Index: Backend/.env
===================================================================
--- Backend/.env	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Backend/.env	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -5,2 +5,6 @@
 PGPORT=5432
 PORT=5000
+EMAIL_HOST_USER=pacrustpizzas@gmail.com
+EMAIL_HOST_PASSWORD=thqyhnmpzzzkddqu
+HOST=localhost
+DANGEROUSLY_DISABLE_HOST_CHECK=true
Index: Backend/index.js
===================================================================
--- Backend/index.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Backend/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,6 +1,8 @@
 import express from 'express';
 import cors from 'cors';
-import { Pool } from 'pg';
+import {Pool} from 'pg';
 import dotenv from 'dotenv';
+
+
 
 const app = express();
@@ -17,75 +19,253 @@
 
 (async () => {
-  try {
-    await pool.query(`
-      CREATE TABLE IF NOT EXISTS users (
-        id SERIAL PRIMARY KEY,
-        username TEXT NOT NULL UNIQUE,
-        password TEXT NOT NULL,
-        email TEXT NOT NULL UNIQUE,
-        address TEXT,
-        phone TEXT,
-        acceptPromotions BOOLEAN DEFAULT FALSE,
-        acceptTerms BOOLEAN DEFAULT FALSE
-      );
-    `);
-    console.log('Табелата users е креирана или постои');
-  } catch (err) {
-    console.error('Грешка при креирање табела:', err);
-  }
+    try {
+        await pool.query(`
+            CREATE TABLE IF NOT EXISTS users
+            (
+                id
+                SERIAL
+                PRIMARY
+                KEY,
+                username
+                TEXT
+                NOT
+                NULL
+                UNIQUE,
+                password
+                TEXT
+                NOT
+                NULL,
+                email
+                TEXT
+                NOT
+                NULL
+                UNIQUE,
+                address
+                TEXT,
+                phone
+                TEXT,
+                acceptPromotions
+                BOOLEAN
+                DEFAULT
+                FALSE,
+                acceptTerms
+                BOOLEAN
+                DEFAULT
+                FALSE
+            );
+        `);
+        await pool.query(`
+            CREATE TABLE IF NOT EXISTS reservations
+            (
+                id
+                SERIAL
+                PRIMARY
+                KEY,
+                table_id
+                TEXT
+                NOT
+                NULL,
+                date
+                DATE
+                NOT
+                NULL,
+                from_time
+                TIME
+                NOT
+                NULL,
+                to_time
+                TIME
+                NOT
+                NULL,
+                username
+                TEXT
+                NOT
+                NULL,
+                people_count
+                INTEGER
+                NOT
+                NULL,
+                comment
+                TEXT
+            );
+        `);
+
+        await pool.query(`
+            CREATE TABLE IF NOT EXISTS orders
+            (
+                id
+                SERIAL
+                PRIMARY
+                KEY,
+                table_name
+                TEXT
+                NOT
+                NULL,
+                order_type
+                TEXT
+                NOT
+                NULL, -- e.g. Dine In / Take Away
+                items
+                JSONB
+                NOT
+                NULL, -- full cart (array of pizzas/items)
+                subtotal
+                NUMERIC
+            (
+                10,
+                2
+            ) NOT NULL,
+                comment TEXT,
+                status TEXT DEFAULT 'pending', -- can be pending, in_kitchen, served, paid
+                created_at TIMESTAMP DEFAULT NOW
+            (
+            )
+                );
+        `);
+        console.log('Табелите users, reservations и orders се креирани или постојат');
+    } catch (err) {
+        console.error('Грешка при креирање табела:', err);
+    }
 })();
 
+
+app.post("/api/orders", async (req, res) => {
+    const {table_name, order_type, items, subtotal, comment} = req.body;
+
+    try {
+        const result = await pool.query(
+            `INSERT INTO orders (table_name, order_type, items, subtotal, comment)
+             VALUES ($1, $2, $3, $4, $5) RETURNING *`,
+            [table_name, order_type, JSON.stringify(items), subtotal, comment]
+        );
+
+        res.json(result.rows[0]);
+    } catch (err) {
+        console.error("Error saving order:", err);
+        res.status(500).json({error: "Database error"});
+    }
+});
+
 app.post('/register', async (req, res) => {
-  const { username, password, email, address, phone, acceptPromotions, acceptTerms } = req.body;
-  try {
-    await pool.query(
-      `INSERT INTO users (username, password, email, address, phone, acceptPromotions, acceptTerms)
-       VALUES ($1, $2, $3, $4, $5, $6, $7)`,
-      [username, password, email, address, phone, acceptPromotions, acceptTerms]
-    );
-    res.status(200).send({ message: "Успешна регистрација!" });
-  } catch (err) {
-    if (err.code === '23505') { // unique violation
-      return res.status(400).send({ message: "Username или Email веќе постои." });
-    }
-    console.error(err);
-    res.status(500).send({ message: "Регистрацијата не успеа" });
-  }
+    const {username, password, email, address, phone, acceptPromotions, acceptTerms} = req.body;
+    try {
+        await pool.query(
+            `INSERT INTO users (username, password, email, address, phone, acceptPromotions, acceptTerms)
+             VALUES ($1, $2, $3, $4, $5, $6, $7)`,
+            [username, password, email, address, phone, acceptPromotions, acceptTerms]
+        );
+        res.status(200).send({message: "Успешна регистрација!"});
+    } catch (err) {
+        if (err.code === '23505') { // unique violation
+            return res.status(400).send({message: "Username или Email веќе постои."});
+        }
+        console.error(err);
+        res.status(500).send({message: "Регистрацијата не успеа"});
+    }
 });
 
 app.post('/login', async (req, res) => {
-  const { username, password } = req.body;
-  try {
-    const { rows } = await pool.query(
-      `SELECT id, username FROM users WHERE username = $1 AND password = $2`,
-      [username, password]
-    );
-    if (rows.length === 0) {
-      return res.status(401).send({ message: 'Неточен username или password' });
-    }
-    res.status(200).send({
-      message: 'Најава успешна',
-      user: rows[0]
-    });
-  } catch (err) {
-    console.error(err);
-    res.status(500).send({ message: 'Грешка при читање од база' });
-  }
+    const {username, password} = req.body;
+    try {
+        const {rows} = await pool.query(
+            `SELECT id, username
+             FROM users
+             WHERE username = $1
+               AND password = $2`,
+            [username, password]
+        );
+        if (rows.length === 0) {
+            return res.status(401).send({message: 'Неточен username или password'});
+        }
+        res.status(200).send({
+            message: 'Најава успешна',
+            user: rows[0]
+        });
+    } catch (err) {
+        console.error(err);
+        res.status(500).send({message: 'Грешка при читање од база'});
+    }
 });
 
 app.get('/users', async (req, res) => {
-  try {
-    const { rows } = await pool.query(
-      `SELECT id, username, email, address, phone, acceptPromotions, acceptTerms FROM users`
-    );
-    res.json(rows);
-  } catch (err) {
-    console.error(err);
-    res.status(500).send({ message: "Грешка при читање корисници" });
-  }
-});
-
+    try {
+        const {rows} = await pool.query(
+            `SELECT id, username, email, address, phone, acceptPromotions, acceptTerms
+             FROM users`
+        );
+        res.json(rows);
+    } catch (err) {
+        console.error(err);
+        res.status(500).send({message: "Грешка при читање корисници"});
+    }
+});
+
+app.post('/api/check-table', async (req, res) => {
+    const {tableId, date, fromTime, toTime} = req.body;
+
+    try {
+        const result = await pool.query(`
+            SELECT *
+            FROM reservations
+            WHERE table_id = $1
+              AND date = $2
+              AND (
+                (from_time
+                < $4
+              AND to_time
+                > $3)
+               OR
+                (from_time >= $3
+              AND from_time
+                < $4)
+                )
+        `, [tableId, date, fromTime, toTime]);
+
+        res.json({available: result.rows.length === 0});
+    } catch (err) {
+        console.error(err);
+        res.status(500).send({message: 'Грешка при проверка на достапност'});
+    }
+});
+
+app.post('/api/reserve', async (req, res) => {
+    const {tableId, date, fromTime, toTime, username, peopleCount, comment} = req.body;
+
+    try {
+        // Прво провери дали е слободна масата
+        const existing = await pool.query(`
+            SELECT *
+            FROM reservations
+            WHERE table_id = $1
+              AND date = $2
+              AND (
+                (from_time
+                < $4
+              AND to_time
+                > $3)
+               OR
+                (from_time >= $3
+              AND from_time
+                < $4)
+                )
+        `, [tableId, date, fromTime, toTime]);
+
+        if (existing.rows.length > 0) {
+            return res.status(400).send({message: 'Масата не е слободна во тој период'});
+        }
+
+        await pool.query(`
+            INSERT INTO reservations (table_id, date, from_time, to_time, username, people_count, comment)
+            VALUES ($1, $2, $3, $4, $5, $6, $7)
+        `, [tableId, date, fromTime, toTime, username, peopleCount, comment]);
+
+        res.send({message: 'Резервацијата е успешно зачувана!'});
+    } catch (err) {
+        console.error(err);
+        res.status(500).send({message: 'Грешка при зачувување на резервацијата'});
+    }
+});
 
 app.listen(PORT, () => {
-  console.log(`Серверот е пуштен на http://localhost:${PORT}`);
-});
+    console.log(`Серверот е пуштен на http://localhost:${PORT}`);
+});
Index: DjangoProject/migrations/0001_initial.py
===================================================================
--- DjangoProject/migrations/0001_initial.py	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ DjangoProject/migrations/0001_initial.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,3 +1,3 @@
-# Generated by Django 5.2.3 on 2025-06-24 17:13
+# Generated by Django 5.2.3 on 2025-08-30 17:42
 
 from django.db import migrations, models
@@ -14,4 +14,20 @@
     operations = [
         migrations.CreateModel(
+            name='Reservation',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('table_id', models.CharField(max_length=100)),
+                ('date', models.DateField()),
+                ('from_time', models.TimeField()),
+                ('to_time', models.TimeField()),
+                ('name', models.CharField(default='Guest', max_length=10)),
+                ('username', models.CharField(max_length=150)),
+                ('people_count', models.IntegerField()),
+                ('comment', models.TextField(blank=True, null=True)),
+                ('city', models.CharField(blank=True, default='Skopje', max_length=20, null=True)),
+                ('approved', models.CharField(default='Not Approved', max_length=20)),
+            ],
+        ),
+        migrations.CreateModel(
             name='User',
             fields=[
@@ -20,8 +36,12 @@
                 ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
                 ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
+                ('name', models.CharField(default='Guest', max_length=20)),
                 ('username', models.CharField(max_length=150, unique=True)),
                 ('email', models.EmailField(max_length=254, unique=True)),
                 ('address', models.CharField(blank=True, max_length=255, null=True)),
                 ('phone', models.CharField(blank=True, max_length=20, null=True)),
+                ('city', models.CharField(blank=True, default='Skopje', max_length=20, null=True)),
+                ('acceptPromotions', models.BooleanField(default=False)),
+                ('email_verified', models.BooleanField(default=False)),
                 ('is_active', models.BooleanField(default=True)),
                 ('is_staff', models.BooleanField(default=False)),
Index: angoProject/migrations/0002_user_acceptpromotions.py
===================================================================
--- DjangoProject/migrations/0002_user_acceptpromotions.py	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ 	(revision )
@@ -1,18 +1,0 @@
-# Generated by Django 5.2.3 on 2025-06-24 22:56
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('DjangoProject', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='user',
-            name='acceptPromotions',
-            field=models.BooleanField(default=False),
-        ),
-    ]
Index: DjangoProject/migrations/0002_user_role.py
===================================================================
--- DjangoProject/migrations/0002_user_role.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0002_user_role.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+# Generated by Django 5.2.3 on 2025-08-31 22:35
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='user',
+            name='role',
+            field=models.CharField(choices=[('client', 'Client'), ('administrator', 'Administrator'), ('employee', 'Employee')], default='client', max_length=20),
+        ),
+    ]
Index: DjangoProject/migrations/0003_create_admin_user.py
===================================================================
--- DjangoProject/migrations/0003_create_admin_user.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0003_create_admin_user.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+from django.db import migrations
+from django.contrib.auth.hashers import make_password
+
+def create_admin_users(apps, schema_editor):
+    User = apps.get_model('DjangoProject', 'User')
+
+    # Admin 1
+    user1, created1 = User.objects.get_or_create(username='admin1')
+    if created1:
+        user1.name = 'Admin One'
+        user1.email = 'admin1@mail.com'
+        user1.password = make_password('adminpass1')
+        user1.role = 'administrator'
+        user1.save()
+
+    # Admin 2
+    user2, created2 = User.objects.get_or_create(username='admin2')
+    if created2:
+        user2.name = 'Admin Two'
+        user2.email = 'admin2@mail.com'
+        user2.password = make_password('adminpass2')
+        user2.role = 'administrator'
+        user2.save()
+
+def delete_admin_users(apps, schema_editor):
+    User = apps.get_model('DjangoProject', 'User')
+    User.objects.filter(username__in=['admin1', 'admin2']).delete()
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0002_user_role'),
+    ]
+
+    operations = [
+        migrations.RunPython(create_admin_users, delete_admin_users),
+    ]
Index: DjangoProject/migrations/0004_merge_0002_user_role_0003_create_admin_user.py
===================================================================
--- DjangoProject/migrations/0004_merge_0002_user_role_0003_create_admin_user.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0004_merge_0002_user_role_0003_create_admin_user.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+# Generated by Django 5.2.3 on 2025-08-31 22:55
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0002_user_role'),
+        ('DjangoProject', '0003_create_admin_user'),
+    ]
+
+    operations = [
+    ]
Index: DjangoProject/migrations/0005_pizza.py
===================================================================
--- DjangoProject/migrations/0005_pizza.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0005_pizza.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+# Generated by Django 5.2.3 on 2025-09-04 00:25
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0004_merge_0002_user_role_0003_create_admin_user'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Pizza',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100)),
+                ('description', models.TextField(blank=True)),
+                ('price', models.DecimalField(decimal_places=2, max_digits=6)),
+                ('size', models.CharField(choices=[('S', 'Small'), ('M', 'Medium'), ('L', 'Large')], max_length=20)),
+                ('is_available', models.BooleanField(default=True)),
+            ],
+        ),
+    ]
Index: DjangoProject/migrations/0006_rename_is_available_pizza_availability_pizza_heading_and_more.py
===================================================================
--- DjangoProject/migrations/0006_rename_is_available_pizza_availability_pizza_heading_and_more.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0006_rename_is_available_pizza_availability_pizza_heading_and_more.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+# Generated by Django 5.2.3 on 2025-09-04 00:31
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0005_pizza'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='pizza',
+            old_name='is_available',
+            new_name='availability',
+        ),
+        migrations.AddField(
+            model_name='pizza',
+            name='heading',
+            field=models.CharField(blank=True, max_length=150),
+        ),
+        migrations.AddField(
+            model_name='pizza',
+            name='image',
+            field=models.CharField(blank=True, max_length=255, null=True),
+        ),
+        migrations.AlterField(
+            model_name='pizza',
+            name='size',
+            field=models.CharField(choices=[('S', 'Small'), ('M', 'Medium'), ('L', 'Large')], default='M', max_length=20),
+        ),
+    ]
Index: DjangoProject/migrations/0007_remove_pizza_size.py
===================================================================
--- DjangoProject/migrations/0007_remove_pizza_size.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0007_remove_pizza_size.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+# Generated by Django 5.2.3 on 2025-09-04 01:02
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0006_rename_is_available_pizza_availability_pizza_heading_and_more'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='pizza',
+            name='size',
+        ),
+    ]
Index: DjangoProject/migrations/0008_ingredient.py
===================================================================
--- DjangoProject/migrations/0008_ingredient.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0008_ingredient.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+# Generated by Django 5.2.3 on 2025-09-07 23:49
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0007_remove_pizza_size'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Ingredient',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100, unique=True)),
+                ('description', models.TextField(blank=True, null=True)),
+                ('price', models.DecimalField(decimal_places=2, default=0.0, max_digits=6)),
+                ('image', models.ImageField(blank=True, null=True, upload_to='ingredients/')),
+                ('availability', models.BooleanField(default=True)),
+            ],
+        ),
+    ]
Index: DjangoProject/migrations/0009_alter_pizza_image.py
===================================================================
--- DjangoProject/migrations/0009_alter_pizza_image.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0009_alter_pizza_image.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+# Generated by Django 5.2.3 on 2025-09-09 22:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0008_ingredient'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='pizza',
+            name='image',
+            field=models.ImageField(blank=True, null=True, upload_to='pizzas/'),
+        ),
+    ]
Index: DjangoProject/migrations/0010_promo.py
===================================================================
--- DjangoProject/migrations/0010_promo.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0010_promo.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+# Generated by Django 5.2.3 on 2025-09-12 01:08
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0009_alter_pizza_image'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Promo',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=50, unique=True)),
+                ('discount_type', models.CharField(choices=[('%', 'Percentage'), ('€', 'Fixed Amount')], default='%', max_length=1)),
+                ('discount_value', models.DecimalField(decimal_places=2, max_digits=6)),
+                ('usage_limit', models.PositiveIntegerField(blank=True, null=True)),
+                ('no_limit', models.BooleanField(default=False)),
+                ('start_date', models.DateField(blank=True, null=True)),
+                ('end_date', models.DateField(blank=True, null=True)),
+                ('active', models.BooleanField(default=True)),
+                ('created_at', models.DateTimeField(auto_now_add=True)),
+            ],
+        ),
+    ]
Index: DjangoProject/migrations/0011_order.py
===================================================================
--- DjangoProject/migrations/0011_order.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0011_order.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+# Generated by Django 5.2.3 on 2025-09-24 12:51
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0010_promo'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Order',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('table_name', models.CharField(max_length=50)),
+                ('order_type', models.CharField(max_length=20)),
+                ('items', models.JSONField()),
+                ('subtotal', models.DecimalField(decimal_places=2, max_digits=10)),
+                ('comment', models.TextField(blank=True, null=True)),
+                ('status', models.CharField(default='pending', max_length=20)),
+                ('created_at', models.DateTimeField(auto_now_add=True)),
+            ],
+        ),
+    ]
Index: DjangoProject/migrations/0012_order_employee_name.py
===================================================================
--- DjangoProject/migrations/0012_order_employee_name.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0012_order_employee_name.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+# Generated by Django 5.2.3 on 2025-09-28 12:39
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0011_order'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='order',
+            name='employee_name',
+            field=models.CharField(blank=True, max_length=100, null=True),
+        ),
+    ]
Index: DjangoProject/migrations/0013_dessert_drink_salad_sauce_specialoffer.py
===================================================================
--- DjangoProject/migrations/0013_dessert_drink_salad_sauce_specialoffer.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0013_dessert_drink_salad_sauce_specialoffer.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+# Generated by Django 5.2.3 on 2025-10-05 23:38
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0012_order_employee_name'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Dessert',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100)),
+                ('price', models.DecimalField(decimal_places=2, max_digits=6)),
+                ('description', models.TextField(blank=True)),
+                ('availability', models.BooleanField(default=True)),
+                ('image', models.ImageField(blank=True, null=True, upload_to='desserts/')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Drink',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100)),
+                ('price', models.DecimalField(decimal_places=2, max_digits=6)),
+                ('size', models.CharField(blank=True, max_length=50, null=True)),
+                ('description', models.TextField(blank=True)),
+                ('availability', models.BooleanField(default=True)),
+                ('image', models.ImageField(blank=True, null=True, upload_to='drinks/')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Salad',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100)),
+                ('price', models.DecimalField(decimal_places=2, max_digits=6)),
+                ('description', models.TextField(blank=True)),
+                ('availability', models.BooleanField(default=True)),
+                ('image', models.ImageField(blank=True, null=True, upload_to='salads/')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Sauce',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100)),
+                ('price', models.DecimalField(decimal_places=2, max_digits=6)),
+                ('description', models.TextField(blank=True)),
+                ('availability', models.BooleanField(default=True)),
+                ('image', models.ImageField(blank=True, null=True, upload_to='sauces/')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='SpecialOffer',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=100)),
+                ('price', models.DecimalField(decimal_places=2, max_digits=6)),
+                ('description', models.TextField(blank=True)),
+                ('availability', models.BooleanField(default=True)),
+                ('image', models.ImageField(blank=True, null=True, upload_to='special_offers/')),
+                ('start_date', models.DateField(blank=True, null=True)),
+                ('end_date', models.DateField(blank=True, null=True)),
+            ],
+        ),
+    ]
Index: DjangoProject/migrations/0014_remove_drink_description.py
===================================================================
--- DjangoProject/migrations/0014_remove_drink_description.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0014_remove_drink_description.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+# Generated by Django 5.2.3 on 2025-10-05 23:39
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0013_dessert_drink_salad_sauce_specialoffer'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='drink',
+            name='description',
+        ),
+    ]
Index: DjangoProject/migrations/0015_remove_dessert_description_remove_sauce_description.py
===================================================================
--- DjangoProject/migrations/0015_remove_dessert_description_remove_sauce_description.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0015_remove_dessert_description_remove_sauce_description.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+# Generated by Django 5.2.3 on 2025-10-05 23:54
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0014_remove_drink_description'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='dessert',
+            name='description',
+        ),
+        migrations.RemoveField(
+            model_name='sauce',
+            name='description',
+        ),
+    ]
Index: DjangoProject/migrations/0016_specialoffer_desserts_count_and_more.py
===================================================================
--- DjangoProject/migrations/0016_specialoffer_desserts_count_and_more.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0016_specialoffer_desserts_count_and_more.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+# Generated by Django 5.2.3 on 2025-10-12 14:57
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0015_remove_dessert_description_remove_sauce_description'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='specialoffer',
+            name='desserts_count',
+            field=models.PositiveIntegerField(default=0),
+        ),
+        migrations.AddField(
+            model_name='specialoffer',
+            name='drinks_count',
+            field=models.PositiveIntegerField(default=0),
+        ),
+        migrations.AddField(
+            model_name='specialoffer',
+            name='pizzas_count',
+            field=models.PositiveIntegerField(default=0),
+        ),
+        migrations.AddField(
+            model_name='specialoffer',
+            name='salads_count',
+            field=models.PositiveIntegerField(default=0),
+        ),
+    ]
Index: DjangoProject/migrations/0017_pizza_stickers.py
===================================================================
--- DjangoProject/migrations/0017_pizza_stickers.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0017_pizza_stickers.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+# Generated by Django 5.2.3 on 2025-10-13 14:33
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0016_specialoffer_desserts_count_and_more'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='pizza',
+            name='stickers',
+            field=models.JSONField(blank=True, default=list),
+        ),
+    ]
Index: DjangoProject/migrations/0018_sticker_remove_pizza_stickers_pizza_stickers.py
===================================================================
--- DjangoProject/migrations/0018_sticker_remove_pizza_stickers_pizza_stickers.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0018_sticker_remove_pizza_stickers_pizza_stickers.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+# Generated by Django 5.2.3 on 2025-10-14 17:34
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0017_pizza_stickers'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Sticker',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('image', models.ImageField(upload_to='stickers/')),
+            ],
+        ),
+        migrations.RemoveField(
+            model_name='pizza',
+            name='stickers',
+        ),
+        migrations.AddField(
+            model_name='pizza',
+            name='stickers',
+            field=models.ManyToManyField(blank=True, related_name='pizzas', to='DjangoProject.sticker'),
+        ),
+    ]
Index: DjangoProject/migrations/0019_message.py
===================================================================
--- DjangoProject/migrations/0019_message.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0019_message.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+# Generated by Django 5.2.3 on 2025-12-15 23:27
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0018_sticker_remove_pizza_stickers_pizza_stickers'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Message',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('sender', models.CharField(max_length=100)),
+                ('content', models.TextField()),
+                ('created_at', models.DateTimeField(auto_now_add=True)),
+            ],
+        ),
+    ]
Index: DjangoProject/migrations/0020_dailycode.py
===================================================================
--- DjangoProject/migrations/0020_dailycode.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0020_dailycode.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+# Generated by Django 5.2.3 on 2025-12-16 01:47
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0019_message'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='DailyCode',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('code', models.CharField(max_length=10, unique=True)),
+                ('created_at', models.DateTimeField(auto_now_add=True)),
+            ],
+        ),
+    ]
Index: DjangoProject/migrations/0021_favorite.py
===================================================================
--- DjangoProject/migrations/0021_favorite.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0021_favorite.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+# Generated by Django 5.2.3 on 2025-12-17 07:31
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0020_dailycode'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Favorite',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('created_at', models.DateTimeField(auto_now_add=True)),
+                ('pizza', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='favorited_by', to='DjangoProject.pizza')),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='favorites', to=settings.AUTH_USER_MODEL)),
+            ],
+            options={
+                'verbose_name': 'Favorite',
+                'verbose_name_plural': 'Favorites',
+                'unique_together': {('user', 'pizza')},
+            },
+        ),
+    ]
Index: DjangoProject/migrations/0022_reservation_email_alter_reservation_approved.py
===================================================================
--- DjangoProject/migrations/0022_reservation_email_alter_reservation_approved.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ DjangoProject/migrations/0022_reservation_email_alter_reservation_approved.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+# Generated by Django 5.2.3 on 2026-01-03 18:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('DjangoProject', '0021_favorite'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='reservation',
+            name='email',
+            field=models.EmailField(default='ilievpetarbt8@gmail.com', max_length=254),
+            preserve_default=False,
+        ),
+        migrations.AlterField(
+            model_name='reservation',
+            name='approved',
+            field=models.CharField(choices=[('Not Approved', 'Not Approved'), ('Approved', 'Approved')], default='Not Approved', max_length=20),
+        ),
+    ]
Index: DjangoProject/models.py
===================================================================
--- DjangoProject/models.py	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ DjangoProject/models.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,26 +1,46 @@
 from django.db import models
+from django.conf import settings
 from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
 
+
 class MyUserManager(BaseUserManager):
-    def create_user(self, username, email, password=None, **extra_fields):
+    def create_user(self, name, username, email, password=None, **extra_fields):
         if not email:
             raise ValueError('Email е задолжителен')
         email = self.normalize_email(email)
+
+        if 'role' not in extra_fields:
+            extra_fields['role'] = 'client'
+
         user = self.model(username=username, email=email, **extra_fields)
         user.set_password(password)  # лозинката се хашира
         user.save(using=self._db)
+
         return user
 
-    def create_superuser(self, username, email, password=None, **extra_fields):
+    def create_superuser(self, name, username, email, password=None, **extra_fields):
         extra_fields.setdefault('is_staff', True)
         extra_fields.setdefault('is_superuser', True)
-        return self.create_user(username, email, password, **extra_fields)
+        return self.create_user(name, username, email, password, **extra_fields)
+
 
 class User(AbstractBaseUser, PermissionsMixin):
+    role_choices = (
+        ('client', 'Client'),
+        ('administrator', 'Administrator'),
+        ('employee', 'Employee'),
+    )
+
+    name = models.CharField(max_length=20, unique=False, default="Guest")
     username = models.CharField(max_length=150, unique=True)
     email = models.EmailField(unique=True)
     address = models.CharField(max_length=255, blank=True, null=True)
     phone = models.CharField(max_length=20, blank=True, null=True)
+    city = models.CharField(max_length=20, blank=True, null=True, default="Skopje")
     acceptPromotions = models.BooleanField(default=False)
+
+    email_verified = models.BooleanField(default=False)
+
+    role = models.CharField(max_length=20, choices=role_choices, default="client")
 
     is_active = models.BooleanField(default=True)
@@ -33,3 +53,172 @@
 
     def __str__(self):
-        return self.username
+        return f"{self.username} ({self.role})"
+
+
+class Reservation(models.Model):
+    table_id = models.CharField(max_length=100)
+    date = models.DateField()
+    from_time = models.TimeField()
+    to_time = models.TimeField()
+    name = models.CharField(max_length=10, default="Guest")
+    username = models.CharField(max_length=150)
+    email = models.EmailField()
+    people_count = models.IntegerField()
+    comment = models.TextField(blank=True, null=True)
+    city = models.CharField(max_length=20, blank=True, null=True, default="Skopje")
+    approved = models.CharField(
+        max_length=20,
+        choices=[
+            ("Not Approved", "Not Approved"),
+            ("Approved", "Approved")
+        ],
+        default="Not Approved"
+    )
+
+
+class Pizza(models.Model):
+    name = models.CharField(max_length=100)
+    heading = models.CharField(max_length=150, blank=True)
+    description = models.TextField(blank=True)
+    price = models.DecimalField(max_digits=6, decimal_places=2)
+    image = models.ImageField(upload_to="pizzas/", blank=True, null=True)
+    availability = models.BooleanField(default=True)
+    stickers = models.ManyToManyField('Sticker', related_name='pizzas', blank=True)
+
+    def __str__(self):
+        return self.name
+
+
+class Sticker(models.Model):
+    image = models.ImageField(upload_to='stickers/')
+
+
+class Ingredient(models.Model):
+    name = models.CharField(max_length=100, unique=True)
+    description = models.TextField(blank=True, null=True)
+    price = models.DecimalField(max_digits=6, decimal_places=2, default=0.00)
+    image = models.ImageField(upload_to="ingredients/", blank=True, null=True)
+    availability = models.BooleanField(default=True)
+
+    def __str__(self):
+        return self.name
+
+
+class Promo(models.Model):
+    DISCOUNT_TYPE_CHOICES = [
+        ('%', 'Percentage'),
+        ('€', 'Fixed Amount'),
+    ]
+
+    name = models.CharField(max_length=50, unique=True)
+    discount_type = models.CharField(max_length=1, choices=DISCOUNT_TYPE_CHOICES, default='%')
+    discount_value = models.DecimalField(max_digits=6, decimal_places=2)
+    usage_limit = models.PositiveIntegerField(blank=True, null=True)
+    no_limit = models.BooleanField(default=False)
+    start_date = models.DateField(blank=True, null=True)
+    end_date = models.DateField(blank=True, null=True)
+    active = models.BooleanField(default=True)
+
+    created_at = models.DateTimeField(auto_now_add=True)
+
+    def __str__(self):
+        return f"{self.name} ({self.discount_type}{self.discount_value})"
+
+
+class Order(models.Model):
+    table_name = models.CharField(max_length=50)
+    order_type = models.CharField(max_length=20)  # Dine In / Takeaway
+    items = models.JSONField()
+    subtotal = models.DecimalField(max_digits=10, decimal_places=2)
+    comment = models.TextField(blank=True, null=True)
+    status = models.CharField(max_length=20, default="pending")
+    created_at = models.DateTimeField(auto_now_add=True)
+    employee_name = models.CharField(max_length=100, blank=True, null=True)  # ✅
+
+
+class Salad(models.Model):
+    name = models.CharField(max_length=100)
+    price = models.DecimalField(max_digits=6, decimal_places=2)
+    description = models.TextField(blank=True)
+    availability = models.BooleanField(default=True)
+    image = models.ImageField(upload_to='salads/', blank=True, null=True)
+
+
+class Drink(models.Model):
+    name = models.CharField(max_length=100)
+    price = models.DecimalField(max_digits=6, decimal_places=2)
+    size = models.CharField(max_length=50, blank=True, null=True)
+    availability = models.BooleanField(default=True)
+    image = models.ImageField(upload_to='drinks/', blank=True, null=True)
+
+
+class Dessert(models.Model):
+    name = models.CharField(max_length=100)
+    price = models.DecimalField(max_digits=6, decimal_places=2)
+    availability = models.BooleanField(default=True)
+    image = models.ImageField(upload_to='desserts/', blank=True, null=True)
+
+
+class Sauce(models.Model):
+    name = models.CharField(max_length=100)
+    price = models.DecimalField(max_digits=6, decimal_places=2)
+    availability = models.BooleanField(default=True)
+    image = models.ImageField(upload_to='sauces/', blank=True, null=True)
+
+    def __str__(self):
+        return self.name
+
+
+class SpecialOffer(models.Model):
+    name = models.CharField(max_length=100)
+    price = models.DecimalField(max_digits=6, decimal_places=2)
+    description = models.TextField(blank=True)
+    availability = models.BooleanField(default=True)
+    image = models.ImageField(upload_to='special_offers/', blank=True, null=True)
+    start_date = models.DateField(blank=True, null=True)
+    end_date = models.DateField(blank=True, null=True)
+
+    # New fields for components of the offer
+    pizzas_count = models.PositiveIntegerField(default=0)
+    drinks_count = models.PositiveIntegerField(default=0)
+    salads_count = models.PositiveIntegerField(default=0)
+    desserts_count = models.PositiveIntegerField(default=0)
+
+    def __str__(self):
+        return self.name
+
+class Message(models.Model):
+    sender = models.CharField(max_length=100)
+    content = models.TextField()
+    created_at = models.DateTimeField(auto_now_add=True)
+
+    def __str__(self):
+        return f"Message from {self.sender}"
+
+class DailyCode(models.Model):
+    code = models.CharField(max_length=10, unique=True)
+    created_at = models.DateTimeField(auto_now_add=True)
+
+    def __str__(self):
+        return self.code
+
+class Favorite(models.Model):
+    user = models.ForeignKey(
+        settings.AUTH_USER_MODEL,
+        on_delete=models.CASCADE,
+        related_name='favorites'
+    )
+    pizza = models.ForeignKey(
+        Pizza,
+        on_delete=models.CASCADE,
+        related_name='favorited_by'
+    )
+    created_at = models.DateTimeField(auto_now_add=True)
+
+    class Meta:
+        unique_together = ('user', 'pizza')
+        verbose_name = "Favorite"
+        verbose_name_plural = "Favorites"
+
+    def __str__(self):
+        return f"{self.user} ❤️ {self.pizza.name}"
Index: DjangoProject/serializers.py
===================================================================
--- DjangoProject/serializers.py	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ DjangoProject/serializers.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,9 +1,10 @@
 from rest_framework import serializers
-from .models import User
+from .models import User, Pizza, Ingredient, Promo, Order, Reservation, Sticker
+from .models import Salad, Drink, Dessert, Sauce, SpecialOffer, Message, Favorite
 
 class UserSerializer(serializers.ModelSerializer):
     class Meta:
         model = User
-        fields = ['id', 'username', 'email', 'address', 'phone', 'acceptPromotions', 'password']
+        fields = ['id', 'name', 'username', 'email', 'address', 'phone', 'acceptPromotions', 'password', 'city', 'role']
         extra_kwargs = {
             'password': {'write_only': True, 'required': False}
@@ -21,2 +22,141 @@
         instance.save()
         return instance
+
+
+class ReservationSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Reservation
+        # fields = [
+        #     "id",
+        #     "table_id",
+        #     "date",
+        #     "from_time",
+        #     "to_time",
+        #     "name",
+        #     "username",
+        #     "people_count",
+        #     "comment",
+        #     "city",
+        #     "approved",
+        # ]
+        fields = "__all__"
+
+class StickerSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Sticker
+        fields = ['id', 'image']
+
+
+class PizzaSerializer(serializers.ModelSerializer):
+    stickers = StickerSerializer(many=True, read_only=True)
+    sticker_ids = serializers.PrimaryKeyRelatedField(
+        many=True,
+        queryset=Sticker.objects.all(),
+        write_only=True,
+        required=False,
+        source='stickers'
+    )
+
+    class Meta:
+        model = Pizza
+        fields = [
+            'id', 'name', 'heading', 'description', 'price',
+            'image', 'availability', 'stickers', 'sticker_ids'
+        ]
+
+    def create(self, validated_data):
+        stickers = validated_data.pop('stickers', [])
+        pizza = Pizza.objects.create(**validated_data)
+        pizza.stickers.set(stickers)
+        return pizza
+
+    def update(self, instance, validated_data):
+        stickers = validated_data.pop('stickers', None)
+
+        # 🧩 Handle stickers manually from request if FormData is used
+        request = self.context.get('request')
+        if request and hasattr(request, 'data'):
+            sticker_ids = request.data.getlist('sticker_ids')
+            if sticker_ids:
+                try:
+                    sticker_ids = [int(x) for x in sticker_ids]
+                    instance.stickers.set(sticker_ids)
+                except ValueError:
+                    pass
+
+        # Update all other fields
+        for attr, value in validated_data.items():
+            setattr(instance, attr, value)
+
+        instance.save()
+        return instance
+
+class IngredientSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Ingredient
+        fields = '__all__'
+
+
+class PromoSerializer(serializers.ModelSerializer):
+    discountType = serializers.CharField(source='discount_type')
+    discountValue = serializers.DecimalField(source='discount_value', max_digits=6, decimal_places=2)
+    usageLimit = serializers.IntegerField(source='usage_limit', required=False, allow_null=True)
+    noLimit = serializers.BooleanField(source='no_limit', required=False)
+    startDate = serializers.DateField(source='start_date', required=False, allow_null=True)
+    endDate = serializers.DateField(source='end_date', required=False, allow_null=True)
+
+    class Meta:
+        model = Promo
+        fields = [
+            'id', 'name', 'discountType', 'discountValue',
+            'usageLimit', 'noLimit', 'startDate', 'endDate',
+            'active', 'created_at'
+        ]
+
+
+class OrderSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Order
+        fields = '__all__'
+
+
+class SaladSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Salad
+        fields = '__all__'
+
+
+class DrinkSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Drink
+        fields = '__all__'
+
+
+class DessertSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Dessert
+        fields = '__all__'
+
+
+class SauceSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Sauce
+        fields = '__all__'
+
+
+class SpecialOfferSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = SpecialOffer
+        fields = '__all__'
+
+class MessageSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Message
+        fields = "__all__"
+
+class FavoriteSerializer(serializers.ModelSerializer):
+    pizza = PizzaSerializer(read_only=True)
+
+    class Meta:
+        model = Favorite
+        fields = ['id', 'pizza']
Index: DjangoProject/settings.py
===================================================================
--- DjangoProject/settings.py	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ DjangoProject/settings.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -2,4 +2,8 @@
 from pathlib import Path
 from dotenv import load_dotenv
+import certifi
+import ssl
+
+EMAIL_SSL_CONTEXT = ssl._create_unverified_context()
 
 BASE_DIR = Path(__file__).resolve().parent.parent
@@ -20,4 +24,18 @@
     'corsheaders',
 ]
+CSRF_TRUSTED_ORIGINS = [
+    'http://localhost:3000',
+]
+EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
+
+EMAIL_HOST = "smtp.gmail.com"
+EMAIL_PORT = 587
+EMAIL_USE_TLS = True
+EMAIL_USE_SSL = False
+
+EMAIL_HOST_USER = "pacrustpizzas@gmail.com"
+EMAIL_HOST_PASSWORD = "kfgb scof vjko acyy"
+
+DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
 
 ROOT_URLCONF = 'DjangoProject.urls'
@@ -88,5 +106,5 @@
 
 SIMPLE_JWT = {
-    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
+    'ACCESS_TOKEN_LIFETIME': timedelta(hours=12),
     'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
     'ROTATE_REFRESH_TOKENS': False,
@@ -95,2 +113,13 @@
     'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
 }
+
+MEDIA_URL = '/media/'
+MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
+
+STATIC_URL = '/static/'
+STATICFILES_DIRS = [BASE_DIR / 'static']
+
+STATIC_ROOT = BASE_DIR / 'staticfiles'
+
+
+
Index: DjangoProject/urls.py
===================================================================
--- DjangoProject/urls.py	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ DjangoProject/urls.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -2,8 +2,12 @@
 from django.http import HttpResponse
 from rest_framework_simplejwt.views import TokenObtainPairView
-from .views import get_user_profile, register_user, update_user
+from . import views
+from .views import get_user_profile, register_user, update_user, verify_email, about_us
+from django.conf import settings
+from django.conf.urls.static import static
 
 def home(request):
     return HttpResponse("Backend server is running!")
+
 
 urlpatterns = [
@@ -13,3 +17,65 @@
     path('api/register/', register_user),
     path('api/users/<int:pk>/', update_user),
+    path('verify-email/<int:user_id>/', verify_email, name='verify-email'),
+    path('api/check-table', views.check_table_availability, name='check_table_availability'),
+    path('api/reserve', views.reserve_table, name='reserve_table'),
+    path('api/about-us', about_us),
+    path('api/user-reservations/', views.get_user_reservations, name='get_user_reservations'),
+    path('api/reservations/<int:pk>/cancel/', views.cancel_reservation, name='cancel_reservation'),
+    path('api/users/', views.get_users, name='get_users'),
+    path("menu/", views.get_menu, name="get_menu"),
+    path("api/pizzas/", views.get_pizzas, name="get_pizzas"),
+    path("api/pizzas/add/", views.add_pizza, name="add_pizza"),
+    path("api/pizzas/<int:pk>/update/", views.update_pizza, name="update_pizza"),
+    path("api/pizzas/<int:pk>/delete/", views.delete_pizza, name="delete_pizza"),
+    path("pizzas/<int:pizza_id>/upload-stickers/", views.upload_stickers),
+    path("api/ingredients/", views.get_ingredients, name="get_ingredients"),
+    path("api/ingredients/add/", views.add_ingredient, name="add_ingredient"),
+    path("api/ingredients/<int:pk>/update/", views.update_ingredient, name="update_ingredient"),
+    path("api/ingredients/<int:pk>/delete/", views.delete_ingredient, name="delete_ingredient"),
+    path("api/promos/", views.get_promos, name="get_promos"),
+    path("api/promos/add/", views.add_promo, name="add_promo"),
+    path("api/promos/<int:pk>/update/", views.update_promo, name="update_promo"),
+    path("api/promos/<int:pk>/delete/", views.delete_promo, name="delete_promo"),
+    path("api/orders", views.create_order, name="create_order"),
+    path("api/get-orders", views.get_orders, name="get_orders"),
+    path("api/orders/<int:pk>/", views.delete_order, name="delete_order"),
+    path("api/orders/<int:pk>/update/", views.update_order_status, name="update_order_status"),
+    path('api/reservations/', views.get_reservations, name='get_reservations'),
+    path("api/salads/", views.get_salads, name="salad-list"),
+    path("api/salads/add/", views.add_salad, name="salad-add"),
+    path("api/salads/<int:pk>/update/", views.update_salad, name="salad-update"),
+    path("api/salads/<int:pk>/delete/", views.delete_salad, name="salad-delete"),
+    path("api/drinks/", views.get_drinks, name="drink-list"),
+    path("api/drinks/add/", views.add_drink, name="drink-add"),
+    path("api/drinks/<int:pk>/update/", views.update_drink, name="drink-update"),
+    path("api/drinks/<int:pk>/delete/", views.delete_drink, name="drink-delete"),
+    path("api/desserts/", views.get_desserts, name="dessert-list"),
+    path("api/desserts/add/", views.add_dessert, name="dessert-add"),
+    path("api/desserts/<int:pk>/update/", views.update_dessert, name="dessert-update"),
+    path("api/desserts/<int:pk>/delete/", views.delete_dessert, name="dessert-delete"),
+    path("api/sauces/", views.get_sauces, name="sauce-list"),
+    path("api/sauces/add/", views.add_sauce, name="sauce-add"),
+    path("api/sauces/<int:pk>/update/", views.update_sauce, name="sauce-update"),
+    path("api/sauces/<int:pk>/delete/", views.delete_sauce, name="sauce-delete"),
+    path("api/special-offers/", views.get_special_offers, name="special-offer-list"),
+    path("api/special-offers/add/", views.add_special_offer, name="special-offer-add"),
+    path("api/special-offers/<int:pk>/update/", views.update_special_offer, name="special-offer-update"),
+    path("api/special-offers/<int:pk>/delete/", views.delete_special_offer, name="special-offer-delete"),
+    path('api/stats/most-ordered/', views.stats_most_ordered_pizzas, name='most-ordered'),
+    path('api/stats/users/', views.stats_users, name='user-stats'),
+    path('api/stats/monthly-orders/', views.stats_monthly_orders, name='monthly-orders'),
+    path("api/send-message/", views.send_message),
+    path("api/get-messages/", views.get_messages, name="get-messages"),
+    path("api/messages/<int:pk>/delete/", views.delete_message, name="delete-message"),
+    path('create-today-promo/', views.create_today_promo, name='create_today_promo'),
+    path('api/get-daily-code/', views.get_daily_code, name='get-daily-code'),
+    path('api/favorites/', views.favorite_list, name='favorite_list'),
+    path('api/favorites/toggle/<int:pizza_id>/', views.toggle_favorite, name='toggle_favorite'),
+    path('api/reservations/<int:pk>/approve/', views.approve_reservation, name='approve_reservation'),
+    path("api/send-reservation-mail/", views.send_reservation_mail, name="send-reservation-mail"),
+    path('api/google-login/', views.google_login, name="google-login"),
 ]
+
+if settings.DEBUG:
+    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Index: DjangoProject/views.py
===================================================================
--- DjangoProject/views.py	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ DjangoProject/views.py	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,20 +1,316 @@
 import traceback
 import sys
+from django.views.decorators.csrf import csrf_exempt
+
 sys.stdout.reconfigure(encoding='utf-8')
-from django.template.context_processors import request
-from rest_framework.decorators import api_view, permission_classes
+from rest_framework.decorators import api_view, permission_classes, parser_classes
+from rest_framework_simplejwt.views import TokenObtainPairView
+from django.core.validators import validate_email
+from django.core.exceptions import ValidationError
+from django.contrib.auth import get_user_model
+from django.utils.decorators import method_decorator
+
+User = get_user_model()
+
+from .models import User, Message, DailyCode
+from .serializers import UserSerializer
+
+import json
+from django.http import JsonResponse
+from datetime import datetime
+
+from .serializers import MessageSerializer
+
 from rest_framework.permissions import IsAuthenticated, AllowAny
-from rest_framework_simplejwt.views import TokenObtainPairView
-
-from rest_framework.response import Response
-from django.contrib.auth.hashers import make_password
-from django.contrib.auth import get_user_model
-User = get_user_model()
-from rest_framework import status
-from rest_framework.response import Response
+from .models import Pizza
+from .serializers import PizzaSerializer
+from .serializers import ReservationSerializer
+
+from .models import Ingredient
+from .serializers import IngredientSerializer
+
 from rest_framework.decorators import api_view, permission_classes
 from rest_framework.permissions import IsAuthenticated
-from .models import User
-from .serializers import UserSerializer
+from .models import Promo
+from .serializers import PromoSerializer
+from .models import Order
+from .serializers import OrderSerializer
+from .models import Sticker
+from django.shortcuts import get_object_or_404
+from rest_framework.parsers import MultiPartParser, FormParser
+from django.db.models.functions import ExtractMonth
+from django.db.models import Count
+from django.utils import timezone
+import random
+
+from .models import Favorite
+from .serializers import FavoriteSerializer
+
+from django.core.mail import send_mail
+from .models import Reservation
+from rest_framework import status
+
+from django.core.mail import get_connection, EmailMessage
+
+import ssl
+from django.core.mail import get_connection, EmailMultiAlternatives
+from django.conf import settings
+
+
+@api_view(["PATCH"])
+def update_order_status(request, pk):
+    try:
+        order = Order.objects.get(pk=pk)
+    except Order.DoesNotExist:
+        return Response({"error": "Order not found"}, status=404)
+
+    status_value = request.data.get("status")
+    if status_value:
+        order.status = status_value
+        order.save()
+        return Response({"message": f"Order {pk} updated to {status_value}"})
+    else:
+        return Response({"error": "Missing status field"}, status=400)
+
+
+@api_view(["POST"])
+def create_order(request):
+    try:
+        data = request.data
+        order = Order.objects.create(
+            table_name=data.get("table_name"),
+            order_type=data.get("order_type"),
+            items=data.get("items"),
+            subtotal=data.get("subtotal"),
+            comment=data.get("comment", ""),
+            status="pending",
+            employee_name=data.get("employee_name"),
+        )
+        return Response({"message": "Order created", "id": order.id}, status=status.HTTP_201_CREATED)
+    except Exception as e:
+        return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(["DELETE"])
+def delete_order(request, pk):
+    try:
+        order = Order.objects.get(pk=pk)
+        order.delete()
+        return Response({"message": "Order deleted successfully"})
+    except Order.DoesNotExist:
+        return Response({"error": "Order not found"}, status=404)
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_orders(request):
+    orders = Order.objects.all().order_by('-id')
+    serializer = OrderSerializer(orders, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_promos(request):
+    promos = Promo.objects.all().order_by('-created_at')
+    serializer = PromoSerializer(promos, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def add_promo(request):
+    serializer = PromoSerializer(data=request.data)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data, status=status.HTTP_201_CREATED)
+    else:
+        print("❌ Promo validation errors:", serializer.errors)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['PUT'])
+@permission_classes([IsAuthenticated])
+def update_promo(request, pk):
+    try:
+        promo = Promo.objects.get(pk=pk)
+    except Promo.DoesNotExist:
+        return Response({"detail": "Promo not found"}, status=status.HTTP_404_NOT_FOUND)
+
+    serializer = PromoSerializer(promo, data=request.data)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def delete_promo(request, pk):
+    try:
+        promo = Promo.objects.get(pk=pk)
+    except Promo.DoesNotExist:
+        return Response({"detail": "Promo not found"}, status=status.HTTP_404_NOT_FOUND)
+
+    promo.delete()
+    return Response({"detail": "Promo deleted"}, status=status.HTTP_204_NO_CONTENT)
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_ingredients(request):
+    ingredients = Ingredient.objects.all()
+    serializer = IngredientSerializer(ingredients, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def add_ingredient(request):
+    serializer = IngredientSerializer(data=request.data)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data, status=status.HTTP_201_CREATED)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['PUT'])
+@permission_classes([IsAuthenticated])
+def update_ingredient(request, pk):
+    try:
+        ingredient = Ingredient.objects.get(pk=pk)
+    except Ingredient.DoesNotExist:
+        return Response({"error": "Ingredient not found"}, status=status.HTTP_404_NOT_FOUND)
+
+    serializer = IngredientSerializer(ingredient, data=request.data, partial=True)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def delete_ingredient(request, pk):
+    try:
+        ingredient = Ingredient.objects.get(pk=pk)
+        ingredient.delete()
+        return Response({"message": "Ingredient deleted"}, status=status.HTTP_204_NO_CONTENT)
+    except Ingredient.DoesNotExist:
+        return Response({"error": "Ingredient not found"}, status=status.HTTP_404_NOT_FOUND)
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_pizzas(request):
+    pizzas = Pizza.objects.all()
+    serializer = PizzaSerializer(pizzas, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def add_pizza(request):
+    serializer = PizzaSerializer(data=request.data)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data, status=status.HTTP_201_CREATED)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['PUT', 'PATCH'])
+@permission_classes([IsAuthenticated])
+@parser_classes([MultiPartParser, FormParser])
+def update_pizza(request, pk):
+    pizza = get_object_or_404(Pizza, pk=pk)
+    print("📦 Received PATCH for pizza", pk)
+    print("➡️ request.data:", request.data)
+    print("➡️ request.FILES:", request.FILES)
+
+    serializer = PizzaSerializer(pizza, data=request.data, partial=True, context={'request': request})
+
+    if serializer.is_valid():
+        serializer.save()
+        print("✅ Pizza updated successfully!")
+        return Response(serializer.data)
+    else:
+        print("❌ Pizza update validation errors:", serializer.errors)
+        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(["POST"])
+@permission_classes([IsAuthenticated])
+@parser_classes([MultiPartParser, FormParser])
+def upload_stickers(request, pizza_id):
+    pizza = get_object_or_404(Pizza, id=pizza_id)
+
+    files = request.FILES.getlist("stickers") or [request.FILES.get("image")]
+    new_stickers = []
+
+    for f in files:
+        if not f:
+            continue
+        sticker = Sticker.objects.create(image=f)
+        pizza.stickers.add(sticker)
+        new_stickers.append({
+            "id": sticker.id,
+            "image": sticker.image.url
+        })
+
+    pizza.save()
+    return Response(new_stickers)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def delete_pizza(request, pk):
+    try:
+        pizza = Pizza.objects.get(pk=pk)
+        pizza.delete()
+        return Response({"message": "Pizza deleted"}, status=status.HTTP_204_NO_CONTENT)
+    except Pizza.DoesNotExist:
+        return Response({"error": "Pizza not found"}, status=status.HTTP_404_NOT_FOUND)
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_menu(request):
+    pizzas = Pizza.objects.filter(is_available=True)
+    serializer = PizzaSerializer(pizzas, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_users(request):
+    users = User.objects.all()
+    serializer = UserSerializer(users, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['GET'])
+@permission_classes([IsAuthenticated])
+def admin_dashboard(request):
+    if request.user.role != "administrator":
+        return Response({"error": "Not authorized"}, status=403)
+    return Response({"message": "Welcome Admin!"})
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def verify_email(request, user_id):
+    try:
+        user = User.objects.get(id=user_id)
+
+        if user.email_verified:
+            return Response({'message': 'Емаил адресата веќе е потврдена.'})
+
+        user.email_verified = True
+        user.save()
+
+        return Response({'message': 'Емаил адресата е успешно потврдена!'})
+    except User.DoesNotExist:
+        return Response({'message': 'Корисникот не постои.'}, status=404)
+
 
 @api_view(['GET'])
@@ -24,4 +320,57 @@
     return Response(serializer.data)
 
+
+@api_view(['GET'])
+def about_us(request):
+    return Response({
+        "company_name": "Your Company Name",
+        "description": "We are a pizza restaurant dedicated to making the best pizzas in town!",
+        "contact_email": "contact@yourcompany.com",
+        "phone": "+123456789"
+    })
+
+
+def send_verification_email(user):
+    try:
+        subject = 'Потврда на регистрација'
+        message = f'''
+    Здраво {user.username},
+    
+    Ви благодариме што се регистриравте на нашата апликација.
+    Кликнете на следниот линк за да ја потврдите вашата емаил адреса:
+    
+    http://localhost:8000/api/verify-email/{user.id}/
+    
+    (Ова е тест линк — во реална апликација се користи token за сигурност)
+        '''
+        send_mail(subject, message, settings.EMAIL_HOST_USER, [user.email])
+    except Exception as e:
+        print("⚠️ Не успеа да се испрати емаил:", e)
+
+
+@api_view(['GET'])
+def get_reservations(request):
+    reservations = Reservation.objects.all()
+    serializer = ReservationSerializer(reservations, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def cancel_reservation(request, pk):
+    try:
+        reservation = Reservation.objects.get(pk=pk, username=request.user.username)
+        reservation.delete()
+        return Response({"message": "Reservation canceled"}, status=204)
+    except Reservation.DoesNotExist:
+        return Response({"error": "Reservation not found"}, status=404)
+    except Exception as e:
+        import traceback
+        print("Error in cancel_reservation:")
+        traceback.print_exc()
+        return Response({"error": str(e)}, status=500)
+
+
+@csrf_exempt
 @api_view(['POST'])
 @permission_classes([AllowAny])
@@ -31,29 +380,57 @@
     try:
         data = request.data
-        username = request.data.get('username')
-        email = request.data.get('email')
-        password = request.data.get('password')
-        address = request.data.get('address')
-        phone = request.data.get('phone')
-        promotions = request.data.get('acceptPromotions')
+        name = data.get('name')
+        username = data.get('username')
+
+        try:
+            email = data.get('email')
+            validate_email(email)
+        except ValidationError:
+            return Response({'message': 'Емаил адресата не е валидна.'}, status=400)
+
+        allowed_domains = ["gmail.com", "yahoo.com", "outlook.com", "hotmail.com"]
+        domain = email.split('@')[-1]
+        if domain not in allowed_domains:
+            return Response({'message': 'Само Gmail, Yahoo или Outlook адреси се дозволени.'}, status=400)
+
+        password = data.get('password')
+        address = data.get('address')
+        phone = data.get('phone')
+        promotions = data.get('acceptPromotions')
+        city = data.get('city')
 
         if not username or not email or not password:
             return Response({'message': 'Недостасуваат обврзни полиња.'}, status=400)
 
+        if User.objects.filter(email=email).exists():
+            return Response({'message': 'Овој емаил веќе е искористен.'}, status=400)
+
+        if User.objects.filter(username=username).exists():
+            return Response({'message': 'Ова корисничко име веќе постои.'}, status=400)
+
+        role = data.get('role', 'client')
+
         user = User.objects.create_user(
+            name=name,
             username=username,
             email=email,
             password=password,
-            address = address,
-            phone = phone,
-            acceptPromotions = promotions
+            address=address,
+            phone=phone,
+            city=city,
+            acceptPromotions=promotions,
+            role=role
         )
 
-        return Response({'message': 'User registered', 'user': {'username': user.username, 'email': user.email}},status=201)
+        send_verification_email(user)
+
+        return Response({'message': 'User registered', 'user': {'username': user.username, 'email': user.email}},
+                        status=201)
     except Exception as e:
-        print("🔥 EXCEPTION:", str(e))
         traceback.print_exc()
         return Response({'error': str(e)}, status=500)
 
+
+@method_decorator(csrf_exempt, name='dispatch')
 class CustomTokenObtainPairView(TokenObtainPairView):
     permission_classes = (AllowAny,)
@@ -63,4 +440,5 @@
         return super().post(request, *args, **kwargs)
 
+
 @api_view(['PUT'])
 @permission_classes([IsAuthenticated])
@@ -71,6 +449,5 @@
         return Response({"error": "User not found."}, status=status.HTTP_404_NOT_FOUND)
 
-    # Само сопствениот профил смееш да го менуваш
-    if request.user != user:
+    if request.user != user and request.user.role != "administrator":
         return Response({"error": "Unauthorized."}, status=status.HTTP_403_FORBIDDEN)
 
@@ -80,2 +457,1028 @@
         return Response(serializer.data)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@csrf_exempt
+def check_table_availability(request):
+    if request.method == 'POST':
+        try:
+            data = json.loads(request.body)
+            table_id = data.get('tableId')
+            date = data.get('date')
+            from_time = data.get('fromTime')
+            to_time = data.get('toTime')
+
+            total_capacity = {
+                "oval-table": 12,
+                "rect-table-1": 6,
+                "rect-table-2": 6,
+                "rect-table-3": 6,
+                "vert-table": 8,
+                "left-table-1": 4,
+                "left-table-2": 4,
+                "left-table-3": 4,
+                "left-table-4": 4,
+                "left-table-5": 4,
+                "left-table-6": 4,
+                "left-table-7": 4,
+                "left-table-8": 4,
+                "left-table-9": 4,
+                "right-table-10": 4,
+                "right-table-11": 4,
+                "right-table-12": 4,
+                "right-table-13": 4,
+                "right-table-14": 4,
+                "right-table-15": 4,
+                "right-table-16": 4,
+            }
+
+            reservations = Reservation.objects.filter(
+                table_id=table_id,
+                date=date,
+                from_time__lt=to_time,
+                to_time__gt=from_time
+            )
+
+            reserved_seats = sum([r.people_count for r in reservations])
+            capacity = total_capacity.get(table_id, 0)
+            free_chairs = max(capacity - reserved_seats, 0)
+
+            reserved_seats = sum([r.people_count for r in reservations])
+            capacity = total_capacity.get(table_id, 0)
+            free_chairs = max(capacity - reserved_seats, 0)
+
+            return JsonResponse({
+                'available': free_chairs > 0,
+                'freeChairs': free_chairs
+            })
+        except Exception as e:
+            return JsonResponse({'error': str(e)}, status=400)
+    else:
+        return JsonResponse({'error': 'Method not allowed'}, status=405)
+
+
+@api_view(['GET'])
+def get_user_reservations(request):
+    try:
+        user_reservations = Reservation.objects.all().order_by('-date', '-from_time')
+
+        reservation_list = []
+        for res in user_reservations:
+            reservation_list.append({
+                "id": res.id,
+                "table": res.table_id,
+                "date": res.date,
+                "from_time": res.from_time.strftime('%H:%M'),
+                "to_time": res.to_time.strftime('%H:%M'),
+                "people_count": res.people_count,
+                "comment": res.comment,
+                "approved": res.approved,
+                "name": res.username
+            })
+
+        return Response(reservation_list)
+
+    except Exception as e:
+        print("🔥 Error fetching reservations:", e)
+        return Response({'error': str(e)}, status=500)
+
+
+@api_view(['POST'])
+def approve_reservation(request, pk):
+    reservation = Reservation.objects.get(pk=pk)
+
+    if reservation.approved == "Approved":
+        reservation.approved = "Not Approved"
+    else:
+        reservation.approved = "Approved"
+
+    reservation.save(update_fields=["approved"])
+
+    return Response({
+        "approved": reservation.approved
+    })
+
+@csrf_exempt
+def reserve_table(request):
+    if request.method == 'POST':
+        try:
+            data = json.loads(request.body)
+
+            print("=" * 50)
+            print("📥 RECEIVED RESERVATION DATA:")
+            for key, value in data.items():
+                print(f"  {key}: {value} (type: {type(value).__name__})")
+            print("=" * 50)
+
+            table_id = data.get('tableId')
+            date = data.get('date')
+            from_time = data.get('fromTime')
+            to_time = data.get('toTime')
+            username = data.get('username')
+            name = data.get('name')
+            email = data.get('email')
+            people_count = data.get('peopleCount')
+            comment = data.get('comment', '')
+
+            if not all([table_id, date, from_time, to_time, name, email, people_count]):
+                missing = []
+                if not table_id: missing.append('tableId')
+                if not date: missing.append('date')
+                if not from_time: missing.append('fromTime')
+                if not to_time: missing.append('toTime')
+                if not name: missing.append('name')
+                if not email: missing.append('email')
+                if not people_count: missing.append('peopleCount')
+
+                return JsonResponse({'error': f'Недостасуваат полиња: {", ".join(missing)}'}, status=400)
+
+            from_time_obj = datetime.strptime(from_time, "%H:%M").time()
+            to_time_obj = datetime.strptime(to_time, "%H:%M").time()
+
+            conflicts = Reservation.objects.filter(
+                table_id=table_id,
+                date=date,
+                from_time__lt=to_time_obj,
+                to_time__gt=from_time_obj
+            )
+
+            if conflicts.exists():
+                return JsonResponse({'message': 'Масата не е слободна во тој период'}, status=400)
+
+
+            reservation = Reservation.objects.create(
+                table_id=table_id,
+                date=date,
+                from_time=from_time_obj,
+                to_time=to_time_obj,
+                username=username if username else None,
+                name=name,
+                email=email,
+                people_count=people_count,
+                comment=comment,
+                approved="Pending"
+            )
+
+            print(f"✅ Reservation created: ID={reservation.id}, Name={name}, Table={table_id}")
+            print("=" * 50)
+
+            return JsonResponse({
+                'message': 'Резервацијата е успешно зачувана!',
+                'reservation_id': reservation.id
+            }, status=201)
+
+        except ValueError as e:
+            print(f"❌ ValueError: {str(e)}")
+            import traceback
+            traceback.print_exc()
+            return JsonResponse({'error': f'Погрешен формат: {str(e)}'}, status=400)
+
+        except Exception as e:
+            print(f"❌ Exception: {str(e)}")
+            import traceback
+            traceback.print_exc()
+            return JsonResponse({'error': str(e)}, status=400)
+    else:
+        return JsonResponse({'error': 'Method not allowed'}, status=405)
+
+from .models import Salad
+from .serializers import SaladSerializer
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_salads(request):
+    salads = Salad.objects.all()
+    serializer = SaladSerializer(salads, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def add_salad(request):
+    serializer = SaladSerializer(data=request.data)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data, status=status.HTTP_201_CREATED)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['PUT'])
+@permission_classes([IsAuthenticated])
+def update_salad(request, pk):
+    try:
+        salad = Salad.objects.get(pk=pk)
+    except Salad.DoesNotExist:
+        return Response({"error": "Salad not found"}, status=404)
+
+    serializer = SaladSerializer(salad, data=request.data, partial=True)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def delete_salad(request, pk):
+    try:
+        salad = Salad.objects.get(pk=pk)
+        salad.delete()
+        return Response({"message": "Salad deleted"}, status=204)
+    except Salad.DoesNotExist:
+        return Response({"error": "Salad not found"}, status=404)
+
+
+from .models import Drink
+from .serializers import DrinkSerializer
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_drinks(request):
+    drinks = Drink.objects.all()
+    try:
+        serializer = DrinkSerializer(drinks, many=True)
+        return Response(serializer.data)
+    except Exception as e:
+        print("Error serializing drinks:", e)
+        return Response({"error": str(e)}, status=500)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def add_drink(request):
+    serializer = DrinkSerializer(data=request.data)
+    if serializer.is_valid():
+        print("Serializer valid!")
+        serializer.save()
+        return Response(serializer.data, status=status.HTTP_201_CREATED)
+
+    print("Serializer errors:", serializer.errors)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['PUT'])
+@permission_classes([IsAuthenticated])
+def update_drink(request, pk):
+    try:
+        drink = Drink.objects.get(pk=pk)
+    except Drink.DoesNotExist:
+        return Response({"error": "Drink not found"}, status=404)
+
+    serializer = DrinkSerializer(drink, data=request.data, partial=True)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def delete_drink(request, pk):
+    try:
+        drink = Drink.objects.get(pk=pk)
+        drink.delete()
+        return Response({"message": "Drink deleted"}, status=204)
+    except Drink.DoesNotExist:
+        return Response({"error": "Drink not found"}, status=404)
+
+
+from .models import Dessert
+from .serializers import DessertSerializer
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_desserts(request):
+    desserts = Dessert.objects.all()
+    serializer = DessertSerializer(desserts, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def add_dessert(request):
+    serializer = DessertSerializer(data=request.data)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data, status=status.HTTP_201_CREATED)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['PUT'])
+@permission_classes([IsAuthenticated])
+def update_dessert(request, pk):
+    try:
+        dessert = Dessert.objects.get(pk=pk)
+    except Dessert.DoesNotExist:
+        return Response({"error": "Dessert not found"}, status=404)
+
+    serializer = DessertSerializer(dessert, data=request.data, partial=True)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def delete_dessert(request, pk):
+    try:
+        dessert = Dessert.objects.get(pk=pk)
+        dessert.delete()
+        return Response({"message": "Dessert deleted"}, status=204)
+    except Dessert.DoesNotExist:
+        return Response({"error": "Dessert not found"}, status=404)
+
+
+from .models import Sauce
+from .serializers import SauceSerializer
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_sauces(request):
+    sauces = Sauce.objects.all()
+    serializer = SauceSerializer(sauces, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def add_sauce(request):
+    serializer = SauceSerializer(data=request.data)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data, status=status.HTTP_201_CREATED)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['PUT'])
+@permission_classes([IsAuthenticated])
+def update_sauce(request, pk):
+    try:
+        sauce = Sauce.objects.get(pk=pk)
+    except Sauce.DoesNotExist:
+        return Response({"error": "Sauce not found"}, status=404)
+
+    serializer = SauceSerializer(sauce, data=request.data, partial=True)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def delete_sauce(request, pk):
+    try:
+        sauce = Sauce.objects.get(pk=pk)
+        sauce.delete()
+        return Response({"message": "Sauce deleted"}, status=204)
+    except Sauce.DoesNotExist:
+        return Response({"error": "Sauce not found"}, status=404)
+
+
+from .models import SpecialOffer
+from .serializers import SpecialOfferSerializer
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_special_offers(request):
+    offers = SpecialOffer.objects.all()
+    serializer = SpecialOfferSerializer(offers, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def add_special_offer(request):
+    serializer = SpecialOfferSerializer(data=request.data)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data, status=status.HTTP_201_CREATED)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['PUT'])
+@permission_classes([IsAuthenticated])
+def update_special_offer(request, pk):
+    try:
+        offer = SpecialOffer.objects.get(pk=pk)
+    except SpecialOffer.DoesNotExist:
+        return Response({"error": "Special Offer not found"}, status=404)
+
+    serializer = SpecialOfferSerializer(offer, data=request.data, partial=True)
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def delete_special_offer(request, pk):
+    try:
+        offer = SpecialOffer.objects.get(pk=pk)
+        offer.delete()
+        return Response({"message": "Special Offer deleted"}, status=204)
+    except SpecialOffer.DoesNotExist:
+        return Response({"error": "Special Offer not found"}, status=404)
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def stats_most_ordered_pizzas(request):
+    pizzas = Pizza.objects.all()
+    data = []
+
+    for pizza in pizzas:
+        count = Order.objects.filter(items__icontains=pizza.name).count()
+        data.append({"name": pizza.name, "count": count})
+
+    return Response(data)
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def stats_users(request):
+    users = User.objects.all()
+
+    clients = users.filter(role="client").count()
+    employees = users.filter(role="employee").count()
+    admins = users.filter(role="administrator").count()
+
+    return Response({
+        "clients": clients,
+        "employees": employees,
+        "admins": admins
+    })
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def stats_monthly_orders(request):
+    stats = (
+        Order.objects
+        .annotate(month=ExtractMonth('created_at'))
+        .values('month')
+        .annotate(count=Count('id'))
+        .order_by('month')
+    )
+    return Response(stats)
+
+
+@api_view(['POST'])
+@permission_classes([AllowAny])
+def send_message(request):
+    print("POST data:", request.data)
+    serializer = MessageSerializer(data=request.data)
+    if serializer.is_valid():
+        serializer.save()
+        print("Message saved!")
+        return Response({"message": "Message sent"}, status=status.HTTP_201_CREATED)
+    print("Errors:", serializer.errors)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['GET'])
+@permission_classes([IsAuthenticated])
+def get_messages(request):
+    messages = Message.objects.all().order_by('-created_at')
+    print("Returning messages:", messages)
+    serializer = MessageSerializer(messages, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['DELETE'])
+@permission_classes([IsAuthenticated])
+def delete_message(request, pk):
+    try:
+        message = Message.objects.get(pk=pk)
+        message.delete()
+        return Response({"message": "Message deleted"}, status=204)
+    except Message.DoesNotExist:
+        return Response({"error": "Message not found"}, status=404)
+
+
+PROMO_DURATION_SECONDS = 300
+
+
+@api_view(['GET'])
+@permission_classes([AllowAny])
+def get_daily_code(request):
+    now = timezone.now()
+    today_start = now.replace(hour=0, minute=0, second=0, microsecond=0)
+
+    code_obj = DailyCode.objects.filter(created_at__gte=today_start).first()
+
+    if code_obj:
+        elapsed = (now - code_obj.created_at).total_seconds()
+        remaining = max(PROMO_DURATION_SECONDS - elapsed, 0)
+        return Response({
+            "code": code_obj.code,
+            "created_at": code_obj.created_at,
+            "time_left": remaining
+        })
+    else:
+        new_code = str(random.randint(1000, 9999))
+        code_obj = DailyCode.objects.create(code=new_code)
+        return Response({
+            "code": code_obj.code,
+            "created_at": code_obj.created_at,
+            "time_left": PROMO_DURATION_SECONDS
+        })
+
+
+@api_view(['POST'])
+def create_today_promo(request):
+    now = timezone.now()
+    today_start = now.replace(hour=0, minute=0, second=0, microsecond=0)
+    promo = Promo.objects.filter(created_at__gte=today_start).first()
+
+    if promo:
+        serializer = PromoSerializer(promo)
+        return Response(serializer.data)
+
+    code = random.randint(1000, 9999)
+    serializer = PromoSerializer(data={"code": code})
+    if serializer.is_valid():
+        serializer.save()
+        return Response(serializer.data, status=status.HTTP_201_CREATED)
+    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+
+@api_view(['GET'])
+@permission_classes([IsAuthenticated])
+def get_favorites(request):
+    favorites = Favorite.objects.filter(user=request.user)
+    serializer = FavoriteSerializer(
+        favorites,
+        many=True,
+        context={'request': request}
+    )
+    return Response(serializer.data)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def toggle_favorite(request, pizza_id):
+    user = request.user
+    try:
+        pizza = Pizza.objects.get(id=pizza_id)
+    except Pizza.DoesNotExist:
+        return Response({"detail": "Pizza not found."}, status=status.HTTP_404_NOT_FOUND)
+
+    favorite, created = Favorite.objects.get_or_create(user=user, pizza=pizza)
+
+    if not created:
+        favorite.delete()
+        return Response({"status": "removed"})
+
+    return Response({"status": "added"})
+
+
+@api_view(['GET'])
+@permission_classes([IsAuthenticated])
+def favorite_list(request):
+    user = request.user
+    favorites = Favorite.objects.filter(user=user)
+    pizzas = [fav.pizza for fav in favorites]
+    serializer = PizzaSerializer(pizzas, many=True)
+    return Response(serializer.data)
+
+
+@api_view(['POST'])
+@permission_classes([IsAuthenticated])
+def send_reservation_mail(request):
+    reservation_id = request.data.get("reservation_id")
+    status = request.data.get("status")
+    reservation = Reservation.objects.get(id=reservation_id)
+    print("EMAIL:", reservation.email)
+    recipient_email = reservation.email
+
+    try:
+        connection = get_connection(
+            backend='django.core.mail.backends.smtp.EmailBackend',
+            host=settings.EMAIL_HOST,
+            port=settings.EMAIL_PORT,
+            username=settings.EMAIL_HOST_USER,
+            password=settings.EMAIL_HOST_PASSWORD,
+            use_tls=True,
+            timeout=30,
+            fail_silently=False,
+        )
+
+        connection.ssl_context = ssl._create_unverified_context()
+
+        if status == "Approved":
+            subject = "Reservation Confirmed - PACrust Pizza"
+            html_message = f"""
+            <!DOCTYPE html>
+            <html>
+            <head>
+                <style>
+                    body {{
+                        font-family: Arial, sans-serif;
+                        background-color: #f4f4f4;
+                        margin: 0;
+                        padding: 0;
+                    }}
+                    .container {{
+                        max-width: 600px;
+                        margin: 20px auto;
+                        background-color: #ffffff;
+                        border-radius: 10px;
+                        overflow: hidden;
+                        box-shadow: 0 4px 6px rgba(0,0,0,0.1);
+                    }}
+                    .header {{
+                        background: linear-gradient(135deg, #4CAF50 0%, #45a049 100%);
+                        color: white;
+                        padding: 30px;
+                        text-align: center;
+                    }}
+                    .header h1 {{
+                        margin: 0;
+                        font-size: 28px;
+                    }}
+                    .status-badge {{
+                        background-color: #2e7d32;
+                        color: white;
+                        padding: 10px 20px;
+                        border-radius: 25px;
+                        display: inline-block;
+                        margin-top: 10px;
+                        font-weight: bold;
+                        font-size: 16px;
+                    }}
+                    .content {{
+                        padding: 30px;
+                    }}
+                    .greeting {{
+                        font-size: 18px;
+                        color: #333;
+                        margin-bottom: 20px;
+                    }}
+                    .details {{
+                        background-color: #f9f9f9;
+                        border-left: 4px solid #4CAF50;
+                        padding: 20px;
+                        margin: 20px 0;
+                    }}
+                    .detail-item {{
+                        display: flex;
+                        align-items: center;
+                        margin: 12px 0;
+                        font-size: 16px;
+                    }}
+                    .detail-icon {{
+                        font-size: 24px;
+                        margin-right: 15px;
+                        min-width: 30px;
+                    }}
+                    .detail-label {{
+                        font-weight: bold;
+                        color: #555;
+                        margin-right: 8px;
+                    }}
+                    .detail-value {{
+                        color: #333;
+                    }}
+                    .footer {{
+                        background-color: #333;
+                        color: white;
+                        text-align: center;
+                        padding: 20px;
+                        font-size: 14px;
+                    }}
+                    .message {{
+                        color: #666;
+                        line-height: 1.6;
+                        margin: 20px 0;
+                    }}
+                </style>
+            </head>
+            <body>
+                <div class="container">
+                    <div class="header">
+                        <h1>PACrust Pizza</h1>
+                        <div class="status-badge">RESERVATION CONFIRMED</div>
+                    </div>
+
+                    <div class="content">
+                        <p class="greeting">Hello {reservation.name},</p>
+
+                        <p class="message">
+                            Great news! Your reservation at <strong>PACrust</strong> has been confirmed. 
+                            We're excited to serve you our delicious pizzas!
+                        </p>
+
+                        <div class="details">
+                            <div class="detail-item">
+                                <span class="detail-label">Date:</span>
+                                <span class="detail-value">{reservation.date}</span>
+                            </div>
+
+                            <div class="detail-item">
+                                <span class="detail-label">Time:</span>
+                                <span class="detail-value">{reservation.from_time} - {reservation.to_time}</span>
+                            </div>
+
+                            <div class="detail-item">
+                                <span class="detail-label">Party Size:</span>
+                                <span class="detail-value">{reservation.people_count} {"person" if reservation.people_count == 1 else "people"}</span>
+                            </div>
+
+                            <div class="detail-item">
+                                <span class="detail-label">Table:</span>
+                                <span class="detail-value">#{reservation.table_id}</span>
+                            </div>
+                        </div>
+
+                        <p class="message">
+                            <strong>Important Notes:</strong><br>
+                            • Please arrive 10 minutes before your reservation time<br>
+                            • If you need to cancel or modify, contact us at least 2 hours in advance<br>
+                            • We hold reservations for 15 minutes past the scheduled time
+                        </p>
+
+                        <p class="message">
+                            Looking forward to welcoming you!<br>
+                            <strong>The PACrust Team</strong>
+                        </p>
+                    </div>
+
+                    <div class="footer">
+                        <p>PACrust Pizza | Contact Us</p>
+                        <p>{settings.EMAIL_HOST_USER}</p>
+                    </div>
+                </div>
+            </body>
+            </html>
+            """
+            plain_message = f"""
+Hello {reservation.name},
+
+YOUR RESERVATION IS CONFIRMED!
+
+Your reservation at PACrust has been approved.
+
+RESERVATION DETAILS:
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+Date: {reservation.date}
+Time: {reservation.from_time} - {reservation.to_time}
+Party Size: {reservation.people_count} {"person" if reservation.people_count == 1 else "people"}
+Table: #{reservation.table_id}
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+
+IMPORTANT NOTES:
+- Please arrive 10 minutes before your reservation time
+- If you need to cancel or modify, contact us at least 2 hours in advance
+- We hold reservations for 15 minutes past the scheduled time
+
+Looking forward to welcoming you!
+
+The PACrust Team
+            """
+        else:  
+            subject = "Reservation Update - PACrust Pizza"
+            html_message = f"""
+            <!DOCTYPE html>
+            <html>
+            <head>
+                <style>
+                    body {{
+                        font-family: Arial, sans-serif;
+                        background-color: #f4f4f4;
+                        margin: 0;
+                        padding: 0;
+                    }}
+                    .container {{
+                        max-width: 600px;
+                        margin: 20px auto;
+                        background-color: #ffffff;
+                        border-radius: 10px;
+                        overflow: hidden;
+                        box-shadow: 0 4px 6px rgba(0,0,0,0.1);
+                    }}
+                    .header {{
+                        background: linear-gradient(135deg, #f44336 0%, #d32f2f 100%);
+                        color: white;
+                        padding: 30px;
+                        text-align: center;
+                    }}
+                    .header h1 {{
+                        margin: 0;
+                        font-size: 28px;
+                    }}
+                    .status-badge {{
+                        background-color: #c62828;
+                        color: white;
+                        padding: 10px 20px;
+                        border-radius: 25px;
+                        display: inline-block;
+                        margin-top: 10px;
+                        font-weight: bold;
+                        font-size: 16px;
+                    }}
+                    .content {{
+                        padding: 30px;
+                    }}
+                    .greeting {{
+                        font-size: 18px;
+                        color: #333;
+                        margin-bottom: 20px;
+                    }}
+                    .details {{
+                        background-color: #fff3f3;
+                        border-left: 4px solid #f44336;
+                        padding: 20px;
+                        margin: 20px 0;
+                    }}
+                    .detail-item {{
+                        display: flex;
+                        align-items: center;
+                        margin: 12px 0;
+                        font-size: 16px;
+                    }}
+                    .detail-icon {{
+                        font-size: 24px;
+                        margin-right: 15px;
+                        min-width: 30px;
+                    }}
+                    .detail-label {{
+                        font-weight: bold;
+                        color: #555;
+                        margin-right: 8px;
+                    }}
+                    .detail-value {{
+                        color: #333;
+                    }}
+                    .footer {{
+                        background-color: #333;
+                        color: white;
+                        text-align: center;
+                        padding: 20px;
+                        font-size: 14px;
+                    }}
+                    .message {{
+                        color: #666;
+                        line-height: 1.6;
+                        margin: 20px 0;
+                    }}
+                </style>
+            </head>
+            <body>
+                <div class="container">
+                    <div class="header">
+                        <h1>PACrust Pizza</h1>
+                        <div class="status-badge">RESERVATION NOT APPROVED</div>
+                    </div>
+
+                    <div class="content">
+                        <p class="greeting">Hello {reservation.name},</p>
+
+                        <p class="message">
+                            Unfortunately, we're unable to confirm your reservation at this time.
+                        </p>
+
+                        <div class="details">
+                            <div class="detail-item">
+                                <span class="detail-label">Requested Date:</span>
+                                <span class="detail-value">{reservation.date}</span>
+                            </div>
+
+                            <div class="detail-item">
+                                <span class="detail-label">Requested Time:</span>
+                                <span class="detail-value">{reservation.from_time} - {reservation.to_time}</span>
+                            </div>
+
+                            <div class="detail-item">
+                                <span class="detail-label">Party Size:</span>
+                                <span class="detail-value">{reservation.people_count} {"person" if reservation.people_count == 1 else "people"}</span>
+                            </div>
+                        </div>
+
+                        <p class="message">
+                            <strong>What's next?</strong><br>
+                            • We may be fully booked at your requested time<br>
+                            • Please try booking for a different date or time<br>
+                            • Contact us directly for alternative options<br>
+                            • We'd love to accommodate you another time!
+                        </p>
+
+                        <p class="message">
+                            We apologize for any inconvenience and hope to see you soon!<br>
+                            <strong>The PACrust Team</strong>
+                        </p>
+                    </div>
+
+                    <div class="footer">
+                        <p>PACrust Pizza | Contact Us</p>
+                        <p>{settings.EMAIL_HOST_USER}</p>
+                    </div>
+                </div>
+            </body>
+            </html>
+            """
+            plain_message = f"""
+Hello {reservation.name},
+
+RESERVATION NOT APPROVED
+
+Unfortunately, we're unable to confirm your reservation at this time.
+
+REQUESTED DETAILS:
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+Date: {reservation.date}
+Time: {reservation.from_time} - {reservation.to_time}
+Party Size: {reservation.people_count} {"person" if reservation.people_count == 1 else "people"}
+━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+
+WHAT'S NEXT?
+- We may be fully booked at your requested time
+- Please try booking for a different date or time
+- Contact us directly for alternative options
+- We'd love to accommodate you another time!
+
+We apologize for any inconvenience and hope to see you soon!
+
+The PACrust Team
+            """
+
+        from django.core.mail import EmailMultiAlternatives
+
+        email = EmailMultiAlternatives(
+            subject=subject,
+            body=plain_message,
+            from_email=settings.EMAIL_HOST_USER,
+            to=[recipient_email],
+            connection=connection,
+        )
+        email.attach_alternative(html_message, "text/html")
+        email.send()
+
+        print(f"Email sent to {recipient_email} - Status: {status}")
+        return Response({"success": True})
+
+    except Exception as e:
+        print(f"Email error: {str(e)}")
+        import traceback
+        traceback.print_exc()
+        return Response({"success": False, "error": str(e)}, status=500)
+
+
+from google.oauth2 import id_token
+from google.auth.transport import requests
+from rest_framework.decorators import api_view
+from rest_framework.response import Response
+from django.contrib.auth import get_user_model
+
+User = get_user_model()
+from rest_framework_simplejwt.tokens import RefreshToken
+
+GOOGLE_CLIENT_ID = "843169508428-d5f1cskdgm7l4acah10nmdue9vm4hmfq.apps.googleusercontent.com"
+
+
+@api_view(['POST'])
+def google_login(request):
+    token = request.data.get('token') or request.data.get('credential')
+
+    print("Received token:", token)
+
+    if not token:
+        return Response({"error": "Token missing"}, status=400)
+
+    try:
+        idinfo = id_token.verify_oauth2_token(
+            token,
+            requests.Request(),
+            GOOGLE_CLIENT_ID
+        )
+
+        email = idinfo.get('email')
+        username = email.split('@')[0]
+
+        user, created = User.objects.get_or_create(
+            email=email,
+            defaults={'username': username}
+        )
+
+        refresh = RefreshToken.for_user(user)
+
+        return Response({
+            'access': str(refresh.access_token),
+            'refresh': str(refresh),
+            'user': {
+                'username': user.username,
+                'email': user.email,
+                'role': getattr(user, 'role', 'user')
+            }
+        })
+
+    except Exception as e:
+        print("GOOGLE ERROR:", e)
+        return Response({'error': str(e)}, status=400)
Index: Frontend/package-lock.json
===================================================================
--- Frontend/package-lock.json	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/package-lock.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -9,4 +9,5 @@
       "version": "0.1.0",
       "dependencies": {
+        "@react-oauth/google": "^0.13.4",
         "@testing-library/dom": "^10.4.0",
         "@testing-library/jest-dom": "^6.6.3",
@@ -14,13 +15,19 @@
         "@testing-library/user-event": "^13.5.0",
         "axios": "^1.10.0",
+        "chart.js": "^4.5.1",
         "react": "^19.1.0",
+        "react-chartjs-2": "^5.3.1",
         "react-dom": "^19.1.0",
         "react-icons": "^5.5.0",
         "react-router-dom": "^7.6.2",
         "react-scripts": "5.0.1",
+        "recharts": "^3.2.1",
         "web-vitals": "^2.1.4"
       },
       "devDependencies": {
-        "concurrently": "^9.2.0"
+        "concurrently": "^9.2.0",
+        "cross-env": "^10.1.0",
+        "patch-package": "^8.0.0",
+        "postinstall-postinstall": "^2.1.0"
       }
     },
@@ -2358,4 +2365,11 @@
       }
     },
+    "node_modules/@epic-web/invariant": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
+      "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@eslint-community/eslint-utils": {
       "version": "4.7.0",
@@ -2964,4 +2978,10 @@
       }
     },
+    "node_modules/@kurkle/color": {
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz",
+      "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
+      "license": "MIT"
+    },
     "node_modules/@leichtgewicht/ip-codec": {
       "version": "2.0.5",
@@ -3094,4 +3114,50 @@
       }
     },
+    "node_modules/@react-oauth/google": {
+      "version": "0.13.4",
+      "resolved": "https://registry.npmjs.org/@react-oauth/google/-/google-0.13.4.tgz",
+      "integrity": "sha512-hGKyNEH+/PK8M0sFEuo3MAEk0txtHpgs94tDQit+s2LXg7b6z53NtzHfqDvoB2X8O6lGB+FRg80hY//X6hfD+w==",
+      "license": "MIT",
+      "peerDependencies": {
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
+      }
+    },
+    "node_modules/@reduxjs/toolkit": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.9.0.tgz",
+      "integrity": "sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog==",
+      "license": "MIT",
+      "dependencies": {
+        "@standard-schema/spec": "^1.0.0",
+        "@standard-schema/utils": "^0.3.0",
+        "immer": "^10.0.3",
+        "redux": "^5.0.1",
+        "redux-thunk": "^3.1.0",
+        "reselect": "^5.1.0"
+      },
+      "peerDependencies": {
+        "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
+        "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "react": {
+          "optional": true
+        },
+        "react-redux": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@reduxjs/toolkit/node_modules/immer": {
+      "version": "10.1.3",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.3.tgz",
+      "integrity": "sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/immer"
+      }
+    },
     "node_modules/@rollup/plugin-babel": {
       "version": "5.3.1",
@@ -3208,4 +3274,16 @@
         "@sinonjs/commons": "^1.7.0"
       }
+    },
+    "node_modules/@standard-schema/spec": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
+      "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+      "license": "MIT"
+    },
+    "node_modules/@standard-schema/utils": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
+      "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
+      "license": "MIT"
     },
     "node_modules/@surma/rollup-plugin-off-main-thread": {
@@ -3655,4 +3733,67 @@
       }
     },
+    "node_modules/@types/d3-array": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+      "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-color": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+      "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-ease": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+      "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-interpolate": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+      "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/d3-color": "*"
+      }
+    },
+    "node_modules/@types/d3-path": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+      "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-scale": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+      "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/d3-time": "*"
+      }
+    },
+    "node_modules/@types/d3-shape": {
+      "version": "3.1.7",
+      "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz",
+      "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/d3-path": "*"
+      }
+    },
+    "node_modules/@types/d3-time": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+      "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-timer": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+      "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+      "license": "MIT"
+    },
     "node_modules/@types/eslint": {
       "version": "8.56.12",
@@ -3907,4 +4048,10 @@
       "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
       "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+      "license": "MIT"
+    },
+    "node_modules/@types/use-sync-external-store": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
+      "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
       "license": "MIT"
     },
@@ -4325,4 +4472,11 @@
       "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
       "license": "Apache-2.0"
+    },
+    "node_modules/@yarnpkg/lockfile": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
+      "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
+      "dev": true,
+      "license": "BSD-2-Clause"
     },
     "node_modules/abab": {
@@ -5564,4 +5718,16 @@
       }
     },
+    "node_modules/chart.js": {
+      "version": "4.5.1",
+      "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz",
+      "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==",
+      "license": "MIT",
+      "dependencies": {
+        "@kurkle/color": "^0.3.0"
+      },
+      "engines": {
+        "pnpm": ">=8"
+      }
+    },
     "node_modules/check-types": {
       "version": "11.2.3",
@@ -5668,4 +5834,13 @@
       }
     },
+    "node_modules/clsx": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/co": {
       "version": "4.6.0",
@@ -6084,4 +6259,22 @@
       "engines": {
         "node": ">=10"
+      }
+    },
+    "node_modules/cross-env": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz",
+      "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@epic-web/invariant": "^1.0.0",
+        "cross-spawn": "^7.0.6"
+      },
+      "bin": {
+        "cross-env": "dist/bin/cross-env.js",
+        "cross-env-shell": "dist/bin/cross-env-shell.js"
+      },
+      "engines": {
+        "node": ">=20"
       }
     },
@@ -6484,4 +6677,125 @@
       "license": "MIT"
     },
+    "node_modules/d3-array": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+      "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+      "license": "ISC",
+      "dependencies": {
+        "internmap": "1 - 2"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-color": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-ease": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+      "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-format": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+      "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-interpolate": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+      "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-color": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-path": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+      "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-scale": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+      "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-array": "2.10.0 - 3",
+        "d3-format": "1 - 3",
+        "d3-interpolate": "1.2.0 - 3",
+        "d3-time": "2.1.1 - 3",
+        "d3-time-format": "2 - 4"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-shape": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+      "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-path": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-time": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+      "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-array": "2 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-time-format": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+      "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-time": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-timer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+      "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/damerau-levenshtein": {
       "version": "1.0.8",
@@ -6576,4 +6890,10 @@
       "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
       "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
+      "license": "MIT"
+    },
+    "node_modules/decimal.js-light": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+      "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
       "license": "MIT"
     },
@@ -7222,4 +7542,14 @@
       }
     },
+    "node_modules/es-toolkit": {
+      "version": "1.40.0",
+      "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.40.0.tgz",
+      "integrity": "sha512-8o6w0KFmU0CiIl0/Q/BCEOabF2IJaELM1T2PWj6e8KqzHv1gdx+7JtFnDwOx1kJH/isJ5NwlDG1nCr1HrRF94Q==",
+      "license": "MIT",
+      "workspaces": [
+        "docs",
+        "benchmarks"
+      ]
+    },
     "node_modules/escalade": {
       "version": "3.2.0",
@@ -8294,4 +8624,14 @@
       }
     },
+    "node_modules/find-yarn-workspace-root": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
+      "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "micromatch": "^4.0.2"
+      }
+    },
     "node_modules/flat-cache": {
       "version": "3.2.0",
@@ -9389,4 +9729,13 @@
       "engines": {
         "node": ">= 0.4"
+      }
+    },
+    "node_modules/internmap": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+      "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
       }
     },
@@ -11075,4 +11424,24 @@
       "license": "MIT"
     },
+    "node_modules/json-stable-stringify": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz",
+      "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
+        "isarray": "^2.0.5",
+        "jsonify": "^0.0.1",
+        "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
@@ -11103,4 +11472,14 @@
       "optionalDependencies": {
         "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/jsonify": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
+      "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
+      "dev": true,
+      "license": "Public Domain",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
@@ -11168,4 +11547,14 @@
       "engines": {
         "node": ">=0.10.0"
+      }
+    },
+    "node_modules/klaw-sync": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
+      "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.1.11"
       }
     },
@@ -12002,4 +12391,14 @@
       }
     },
+    "node_modules/os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/own-keys": {
       "version": "1.0.1",
@@ -12137,4 +12536,105 @@
         "no-case": "^3.0.4",
         "tslib": "^2.0.3"
+      }
+    },
+    "node_modules/patch-package": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz",
+      "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@yarnpkg/lockfile": "^1.1.0",
+        "chalk": "^4.1.2",
+        "ci-info": "^3.7.0",
+        "cross-spawn": "^7.0.3",
+        "find-yarn-workspace-root": "^2.0.0",
+        "fs-extra": "^9.0.0",
+        "json-stable-stringify": "^1.0.2",
+        "klaw-sync": "^6.0.0",
+        "minimist": "^1.2.6",
+        "open": "^7.4.2",
+        "rimraf": "^2.6.3",
+        "semver": "^7.5.3",
+        "slash": "^2.0.0",
+        "tmp": "^0.0.33",
+        "yaml": "^2.2.2"
+      },
+      "bin": {
+        "patch-package": "index.js"
+      },
+      "engines": {
+        "node": ">=14",
+        "npm": ">5"
+      }
+    },
+    "node_modules/patch-package/node_modules/fs-extra": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+      "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "at-least-node": "^1.0.0",
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/patch-package/node_modules/open": {
+      "version": "7.4.2",
+      "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
+      "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-docker": "^2.0.0",
+        "is-wsl": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/patch-package/node_modules/rimraf": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      }
+    },
+    "node_modules/patch-package/node_modules/slash": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+      "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/patch-package/node_modules/yaml": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
+      "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "yaml": "bin.mjs"
+      },
+      "engines": {
+        "node": ">= 14.6"
       }
     },
@@ -13639,4 +14139,12 @@
       "license": "MIT"
     },
+    "node_modules/postinstall-postinstall": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz",
+      "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT"
+    },
     "node_modules/prelude-ls": {
       "version": "1.2.1",
@@ -13920,4 +14428,14 @@
       "engines": {
         "node": ">=14"
+      }
+    },
+    "node_modules/react-chartjs-2": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.3.1.tgz",
+      "integrity": "sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A==",
+      "license": "MIT",
+      "peerDependencies": {
+        "chart.js": "^4.1.1",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
       }
     },
@@ -14059,4 +14577,27 @@
       "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
       "license": "MIT"
+    },
+    "node_modules/react-redux": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
+      "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/use-sync-external-store": "^0.0.6",
+        "use-sync-external-store": "^1.4.0"
+      },
+      "peerDependencies": {
+        "@types/react": "^18.2.25 || ^19",
+        "react": "^18.0 || ^19",
+        "redux": "^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "redux": {
+          "optional": true
+        }
+      }
     },
     "node_modules/react-refresh": {
@@ -14224,4 +14765,47 @@
       }
     },
+    "node_modules/recharts": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.2.1.tgz",
+      "integrity": "sha512-0JKwHRiFZdmLq/6nmilxEZl3pqb4T+aKkOkOi/ZISRZwfBhVMgInxzlYU9D4KnCH3KINScLy68m/OvMXoYGZUw==",
+      "license": "MIT",
+      "dependencies": {
+        "@reduxjs/toolkit": "1.x.x || 2.x.x",
+        "clsx": "^2.1.1",
+        "decimal.js-light": "^2.5.1",
+        "es-toolkit": "^1.39.3",
+        "eventemitter3": "^5.0.1",
+        "immer": "^10.1.1",
+        "react-redux": "8.x.x || 9.x.x",
+        "reselect": "5.1.1",
+        "tiny-invariant": "^1.3.3",
+        "use-sync-external-store": "^1.2.2",
+        "victory-vendor": "^37.0.2"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
+    "node_modules/recharts/node_modules/eventemitter3": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+      "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+      "license": "MIT"
+    },
+    "node_modules/recharts/node_modules/immer": {
+      "version": "10.1.3",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.3.tgz",
+      "integrity": "sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/immer"
+      }
+    },
     "node_modules/recursive-readdir": {
       "version": "2.2.3",
@@ -14247,4 +14831,19 @@
       "engines": {
         "node": ">=8"
+      }
+    },
+    "node_modules/redux": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+      "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
+      "license": "MIT"
+    },
+    "node_modules/redux-thunk": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
+      "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
+      "license": "MIT",
+      "peerDependencies": {
+        "redux": "^5.0.0"
       }
     },
@@ -14412,4 +15011,10 @@
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
       "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+      "license": "MIT"
+    },
+    "node_modules/reselect": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+      "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
       "license": "MIT"
     },
@@ -16294,4 +16899,23 @@
       "license": "MIT"
     },
+    "node_modules/tiny-invariant": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+      "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+      "license": "MIT"
+    },
+    "node_modules/tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "os-tmpdir": "~1.0.2"
+      },
+      "engines": {
+        "node": ">=0.6.0"
+      }
+    },
     "node_modules/tmpl": {
       "version": "1.0.5",
@@ -16747,4 +17371,13 @@
       }
     },
+    "node_modules/use-sync-external-store": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+      "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+      "license": "MIT",
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
@@ -16819,4 +17452,26 @@
       "engines": {
         "node": ">= 0.8"
+      }
+    },
+    "node_modules/victory-vendor": {
+      "version": "37.3.6",
+      "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
+      "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==",
+      "license": "MIT AND ISC",
+      "dependencies": {
+        "@types/d3-array": "^3.0.3",
+        "@types/d3-ease": "^3.0.0",
+        "@types/d3-interpolate": "^3.0.1",
+        "@types/d3-scale": "^4.0.2",
+        "@types/d3-shape": "^3.1.0",
+        "@types/d3-time": "^3.0.0",
+        "@types/d3-timer": "^3.0.0",
+        "d3-array": "^3.1.6",
+        "d3-ease": "^3.0.1",
+        "d3-interpolate": "^3.0.1",
+        "d3-scale": "^4.0.2",
+        "d3-shape": "^3.1.0",
+        "d3-time": "^3.0.0",
+        "d3-timer": "^3.0.1"
       }
     },
Index: Frontend/package.json
===================================================================
--- Frontend/package.json	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -4,4 +4,5 @@
   "private": true,
   "dependencies": {
+    "@react-oauth/google": "^0.13.4",
     "@testing-library/dom": "^10.4.0",
     "@testing-library/jest-dom": "^6.6.3",
@@ -9,9 +10,12 @@
     "@testing-library/user-event": "^13.5.0",
     "axios": "^1.10.0",
+    "chart.js": "^4.5.1",
     "react": "^19.1.0",
+    "react-chartjs-2": "^5.3.1",
     "react-dom": "^19.1.0",
     "react-icons": "^5.5.0",
     "react-router-dom": "^7.6.2",
     "react-scripts": "5.0.1",
+    "recharts": "^3.2.1",
     "web-vitals": "^2.1.4"
   },
@@ -44,5 +48,8 @@
   "proxy": "http://localhost:8000",
   "devDependencies": {
-    "concurrently": "^9.2.0"
+    "concurrently": "^9.2.0",
+    "cross-env": "^10.1.0",
+    "patch-package": "^8.0.0",
+    "postinstall-postinstall": "^2.1.0"
   }
 }
Index: Frontend/src/AboutUsPage.css
===================================================================
--- Frontend/src/AboutUsPage.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ Frontend/src/AboutUsPage.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,374 @@
+/* 🌆 Background */
+.local-background-about-us {
+    background: #0D1B2A;
+    min-height: 100vh;
+    color: #333;
+}
+
+.nav-right-part {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+    flex-wrap: wrap;
+}
+
+
+/* 📄 About Us Container */
+.about-us-container {
+    width: 90%;
+    max-width: 1100px;
+    background: white;
+    border-radius: 20px;
+    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08);
+    margin: 10px 0px;
+    padding: 0px 40px;
+    text-align: center;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.title {
+    font-size: 2.5rem;
+    color: #0D1B2A;
+    margin-bottom: 15px;
+    font-weight: normal;
+}
+
+.description {
+    font-size: 1.1rem;
+    color: #0D1B2A;
+    margin-bottom: 30px;
+    line-height: 1.6;
+    max-width: 800px;
+    opacity: 80%;
+}
+
+/* 🧩 System Overview */
+.system-section {
+    width: 100%;
+    text-align: left;
+    background: #fff3e0;
+    border-radius: 15px;
+    padding: 25px;
+    margin-bottom: 35px;
+}
+
+.system-section h2 {
+    color: #d62828;
+    font-weight: normal;
+    font-size: xx-large;
+    margin: 0px;
+}
+
+.features-list {
+    list-style: none;
+    padding: 0;
+}
+
+.features-list li {
+    margin-bottom: 10px;
+    font-size: 1rem;
+    display: flex;
+    align-items: flex-start;
+    gap: 8px;
+    line-height: 1.5;
+    color: #0D1B2A;
+}
+
+/* 💡 Mission Section */
+.mission-section {
+    background: #f8f8f8;
+    border-left: 5px solid #d62828;
+    padding: 25px;
+    margin-bottom: 35px;
+    border-radius: 10px;
+    width: 100%;
+}
+
+.mission-section h2 {
+    color: #d62828;
+    font-weight: normal;
+    font-size: xx-large;
+    margin: 0px;
+}
+
+.mission-section p {
+    color: #0D1B2A;
+    line-height: 1.6;
+    opacity: 80%;
+}
+
+/* 👨‍🍳 Team Section */
+.team-section {
+    width: 100%;
+    margin-bottom: 40px;
+}
+
+.team-section h2 {
+    color: #d62828;
+    font-weight: normal;
+    font-size: xx-large;
+    margin: 0px 0px 10px 0px;
+}
+
+.team-cards {
+    display: flex;
+    justify-content: center;
+    flex-wrap: wrap;
+    gap: 25px;
+}
+
+.team-card {
+    background: #fff8ef;
+    border: 2px solid #d62828;
+    border-radius: 20px;
+    width: 230px;
+    padding: 20px;
+    text-align: center;
+    transition: transform 0.3s ease, box-shadow 0.3s ease;
+}
+
+.team-card:hover {
+    transform: translateY(-5px);
+    box-shadow: 0 6px 12px rgba(255, 145, 77, 0.2);
+}
+
+.team-card .emoji {
+    font-size: 2rem;
+}
+
+.team-card .name {
+    font-size: 1.3rem;
+    margin-top: 10px;
+    color: #0D1B2A;
+}
+
+.team-card .role {
+    font-size: 1rem;
+    color: #0D1B2A;
+    opacity: 80%;
+}
+
+/* 🎉 Fun Section */
+.fun-section {
+    background: #fff3e0;
+    padding: 25px;
+    border-radius: 15px;
+    margin-bottom: 30px;
+    width: 100%;
+}
+
+.fun-section h2 {
+    color: #d62828;
+    font-weight: normal;
+    font-size: xx-large;
+    margin: 0px;
+}
+
+.fun-section ul {
+    list-style: none;
+    padding: 0;
+}
+
+.fun-section li {
+    font-size: 1rem;
+    margin-bottom: 10px;
+    line-height: 1.5;
+    color: #0D1B2A;
+    opacity: 80%;
+}
+
+/* 📊 Statistics Section */
+.statistics-section {
+    width: 100%;
+    background: #f8f8f8;
+    padding: 30px;
+    border-radius: 15px;
+    margin-bottom: 20px;
+}
+
+.statistics-section h2 {
+    color: #0D1B2A;
+    font-size: 2rem;
+    margin: 0px 0px 30px 0px;
+    text-align: center;
+    font-weight: normal;
+
+}
+
+.charts-container {
+    display: flex;
+    justify-content: center;
+    flex-wrap: wrap;
+    gap: 25px;
+}
+
+.chart-card {
+    width: 320px;
+    background: white;
+    padding: 20px;
+    border-radius: 15px;
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
+    text-align: center;
+}
+
+.chart-card h3 {
+    font-size: 1.2rem;
+    margin: 10px;
+    color: #0D1B2A;
+    font-weight: normal;
+}
+
+.chart-card-2 {
+    height: 200px;
+}
+
+/* ⭐⭐⭐ FEATURE BOXES — COLLAPSE + EXPAND ON HOVER ⭐⭐⭐ */
+
+.power-features {
+    display: grid;
+    grid-template-columns: repeat(4, 1fr); /* ← СЕКОГАШ 4 колони */
+    gap: 25px;
+    margin: 25px;
+}
+
+
+.feature-box {
+    background: #ffffff;
+    border-radius: 18px;
+    padding: 22px;
+    border: 2px solid #ffd8b3;
+    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05);
+
+    /* COLLAPSED MODE */
+    max-height: 90px;
+    overflow: hidden;
+
+    transition: transform 0.25s ease, box-shadow 0.25s ease, max-height 0.3s ease;
+    cursor: pointer;
+
+    text-align: center;
+}
+
+.feature-box:hover {
+    transform: translateY(-6px);
+    box-shadow: 0 10px 18px rgba(255, 122, 0, 0.25);
+
+    /* EXPAND MODE */
+    max-height: 300px;
+}
+
+.feature-box .icon {
+    font-size: 2.2rem;
+    margin-bottom: 10px;
+}
+
+.feature-box h3 {
+    font-size: 1.25rem;
+    color: #d62828;
+    margin: 0;
+    font-weight: normal;
+}
+
+.feature-box p {
+    font-size: 0.98rem;
+    color: #0D1B2A;
+    opacity: 0;
+    line-height: 1.45;
+    margin-top: 10px;
+
+    transition: opacity 0.25s ease;
+}
+
+.feature-box:hover p {
+    opacity: 1;
+}
+
+
+/* 📱 Responsive Design */
+
+@media (max-width: 1024px) {
+    .power-features {
+        grid-template-columns: repeat(2, 1fr); /* на таблети 2 */
+    }
+
+    .about-us-container {
+        padding: 30px;
+    }
+
+    .title {
+        font-size: 2.2rem;
+    }
+
+    .description {
+        font-size: 1rem;
+    }
+
+    .system-section,
+    .mission-section,
+    .fun-section {
+        padding: 20px;
+    }
+}
+
+/* Phones */
+@media (max-width: 768px) {
+    .about-us-container {
+        padding: 20px;
+    }
+
+    .title {
+        font-size: 1.8rem;
+    }
+
+    .description {
+        font-size: 0.95rem;
+    }
+
+    .team-cards {
+        flex-direction: column;
+        align-items: center;
+    }
+
+    .team-card {
+        width: 85%;
+    }
+
+    .original-navigation-reservation {
+        flex-direction: column;
+        gap: 10px;
+    }
+
+    .nav-right-part {
+        justify-content: center;
+    }
+
+}
+
+@media (max-width: 600px) {
+    .power-features {
+        grid-template-columns: 1fr; /* на телефони 1 */
+    }
+}
+
+
+/* Small Phones */
+@media (max-width: 480px) {
+    .title {
+        font-size: 1.6rem;
+    }
+
+    .description {
+        font-size: 0.9rem;
+    }
+
+    .team-card {
+        width: 100%;
+    }
+
+    .features-list li {
+        font-size: 0.9rem;
+    }
+
+}
Index: Frontend/src/AboutUsPage.js
===================================================================
--- Frontend/src/AboutUsPage.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ Frontend/src/AboutUsPage.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,279 @@
+import React, {useEffect, useState} from "react";
+import {useNavigate} from "react-router-dom";
+import PACrustLogo from "./images/pacrustlogo.png";
+import "./AboutUsPage.css";
+import cart from "./images/shopping-cart.png";
+import {Pie, Bar, Doughnut} from "react-chartjs-2";
+import {
+    Chart as ChartJS,
+    ArcElement,
+    BarElement,
+    CategoryScale,
+    LinearScale,
+    Tooltip,
+    Legend
+} from "chart.js";
+
+ChartJS.register(
+    ArcElement,
+    BarElement,
+    CategoryScale,
+    LinearScale,
+    Tooltip,
+    Legend
+);
+
+export default function AboutUsPage({loggedUser, setLoggedUser, logout}) {
+    const navigate = useNavigate();
+
+    const [cartCount, setCartCount] = useState(0);
+
+    const addToCart = () => {
+        setCartCount(cartCount + 1);
+    };
+
+    const [cartItems, setCartItems] = useState([]);
+
+    useEffect(() => {
+        const storedCart = JSON.parse(localStorage.getItem("cartItems")) || [];
+        setCartItems(storedCart);
+        setCartCount(storedCart.length);
+    }, []);
+
+    const goToCheckout = () => {
+        navigate("/checkout", {state: {cartItems}});
+    };
+
+    const [pizzaStats, setPizzaStats] = useState([]);
+    const [userStats, setUserStats] = useState(null);
+    const [monthlyStats, setMonthlyStats] = useState([]);
+
+    useEffect(() => {
+        fetch("http://localhost:8000/api/stats/most-ordered/")
+            .then(r => r.json())
+            .then(data => setPizzaStats(data));
+
+        fetch("http://localhost:8000/api/stats/users/")
+            .then(r => r.json())
+            .then(data => setUserStats(data));
+
+        fetch("http://localhost:8000/api/stats/monthly-orders/")
+            .then(r => r.json())
+            .then(data => setMonthlyStats(data));
+    }, []);
+
+    const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
+
+
+    return (
+        <div className="local-background-about-us">
+            <div className="original-navigation-menu">
+                <div className="navigation-bar">
+                    <div className="logodiv">
+                        <img className="logo" src={PACrustLogo} alt={PACrustLogo} onClick={() => navigate("/")}/>
+                    </div>
+                    <div className="divpart">
+                        <p className="divpartP" onClick={() => navigate("/")}>HOME</p>
+                    </div>
+                    <div className="divpart">
+                        <p className="divpartP" onClick={() => navigate("/menu")}>MENU</p>
+                    </div>
+                    <div className="divpart">
+                        <p className="divpartP">ABOUT US</p>
+                    </div>
+                </div>
+                <div className="nav-right-part">
+                    <div className="phone">📞 075-142-589</div>
+                    {loggedUser && (
+                        <button className="logout-btn" onClick={() => {
+                            localStorage.removeItem("cartItems");
+                            logout();
+                        }}>LOG OUT</button>
+                    )}
+                    <button
+                        className="login-btn"
+                        onClick={() => {
+                            if (loggedUser) {
+                                navigate("/profile");
+                            } else {
+                                navigate("/login");
+                            }
+                        }}
+                    >
+                        {loggedUser ? loggedUser.username : "LOG IN / SIGN IN"}
+                    </button>
+                    {loggedUser && loggedUser.role === "client" && (
+                        <div>
+                            <button
+                                className="checkout-btn"
+                                onClick={() => navigate("/checkout", {state: {cartItems}})}
+                            >
+                                <img src={cart} className="checkout-photo"/>
+                                {cartCount > 0 && <span className="cart-badge">{cartCount}</span>}
+                            </button>
+                        </div>
+                    )}
+                </div>
+            </div>
+
+            <div className="center-it">
+                <div className="about-us-container">
+                    <h1 className="title">About P&ACrust</h1>
+                    <p className="description">
+                        Welcome to <strong>P&ACrust</strong> — a modern pizza ordering and
+                        management platform designed to make your pizza experience simple,
+                        smart, and delicious! From custom pizza creations to real-time order
+                        tracking, we connect clients, employees, and administrators in one
+                        seamless system.
+                    </p>
+
+                    <div className="statistics-section">
+                        <h2>Platform Statistics</h2>
+
+                        <div className="charts-container">
+
+                            <div className="chart-card">
+                                <h3>Most Ordered Pizzas</h3>
+                                <Pie
+                                    data={{
+                                        labels: pizzaStats.map(p => p.name),
+                                        datasets: [
+                                            {
+                                                data: pizzaStats.map(p => p.count),
+                                                backgroundColor: ["#ff6b6b", "#ff9f43", "#1dd1a1", "#54a0ff"]
+                                            }
+                                        ]
+                                    }}
+                                />
+                            </div>
+
+                            <div className="chart-card">
+                                <h3>User Overview</h3>
+                                <Doughnut
+                                    data={{
+                                        labels: ["Clients", "Employees", "Admins"],
+                                        datasets: [
+                                            {
+                                                data: userStats ? [userStats.clients, userStats.employees, userStats.admins] : [],
+                                                backgroundColor: ["#1dd1a1", "#ff9f43", "#ee5253"]
+                                            }
+                                        ]
+                                    }}
+                                />
+
+                            </div>
+
+                            <div className="chart-card chart-card-2">
+                                <h3>Monthly Orders</h3>
+                                <Bar
+                                    data={{
+                                        labels: monthlyStats.map(m => monthNames[m.month - 1]), 
+                                        datasets: [
+                                            {
+                                                label: "Orders",
+                                                data: monthlyStats.map(m => m.count),
+                                                backgroundColor: "#ff9f43"
+                                            }
+                                        ]
+                                    }}
+                                />
+
+                            </div>
+
+                        </div>
+                    </div>
+
+                    <div className="power-features">
+                        <div className="feature-box">
+                            <div className="icon">🍕</div>
+                            <h3>Dynamic Menu</h3>
+                            <p>Explore every pizza, drink & combo with live updates and rich previews.</p>
+                        </div>
+
+                        <div className="feature-box">
+                            <div className="icon">🔐</div>
+                            <h3>Smart Authentication</h3>
+                            <p>Secure login with saved preferences and personalized user experience.</p>
+                        </div>
+
+                        <div className="feature-box">
+                            <div className="icon">📅</div>
+                            <h3>Instant Reservations</h3>
+                            <p>Reserve tables in seconds using our real-time seat availability system.</p>
+                        </div>
+
+                        <div className="feature-box">
+                            <div className="icon">❌</div>
+                            <h3>1-Click Cancellation</h3>
+                            <p>Plans changed? Modify or cancel instantly — no hassle.</p>
+                        </div>
+
+                        <div className="feature-box">
+                            <div className="icon">💳</div>
+                            <h3>Seamless Payments</h3>
+                            <p>Fast, encrypted checkout with multiple payment methods.</p>
+                        </div>
+
+                        <div className="feature-box">
+                            <div className="icon">🧪</div>
+                            <h3>Build-Your-Own Pizza</h3>
+                            <p>Create custom pizzas with unlimited ingredient combinations.</p>
+                        </div>
+
+                        <div className="feature-box">
+                            <div className="icon">📦</div>
+                            <h3>Quick Menu Ordering</h3>
+                            <p>Pick a chef-crafted favorite and order in moments.</p>
+                        </div>
+
+                        <div className="feature-box">
+                            <div className="icon">🏷️</div>
+                            <h3>Promotions Hub</h3>
+                            <p>Exclusive deals, daily discounts & special customer rewards.</p>
+                        </div>
+                    </div>
+
+                    <div className="mission-section">
+                        <h2>Our Mission ️</h2>
+                        <p>
+                            At <strong>P&ACrust</strong>, we believe pizza should be more than
+                            food — it’s an experience. Our goal is to merge tradition with
+                            technology, offering a system where every customer, admin, and
+                            employee can interact smoothly and enjoyably.
+                        </p>
+                    </div>
+
+                    <div className="team-section">
+                        <h2>Meet the P&ACrust Team</h2>
+                        <div className="team-cards">
+                            <div className="team-card">
+                                <div className="emoji">👨‍💻</div>
+                                <h2 className="name">Petar</h2>
+                                <p className="role">System Developer</p>
+                            </div>
+                            <div className="team-card">
+                                <div className="emoji">👨‍💻</div>
+                                <h2 className="name">Aleksandar</h2>
+                                <p className="role">Designer</p>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div className="fun-section">
+                        <h2>Fun Facts</h2>
+                        <ul>
+                            <li>We’ve served over <strong>10,000</strong> slices in one month!</li>
+                            <li>Our delivery scooter “Speedy” has covered <strong>5000 km</strong>.</li>
+                            <li>
+                                Our most loved pizza? <strong>Build-Your-Own Margarita</strong>
+                            </li>
+                        </ul>
+                    </div>
+
+
+                </div>
+            </div>
+
+        </div>
+    );
+}
Index: Frontend/src/AdminPanel.css
===================================================================
--- Frontend/src/AdminPanel.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ Frontend/src/AdminPanel.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1307 @@
+.logodiv-checkout-admin {
+    padding: 20px 0px;
+    display: flex;
+    justify-content: space-around;
+    background-color: #0D1B2A;
+    align-items: center;
+    border-radius: 100px;
+
+}
+
+.oval-white {
+    background-color: white;
+    border-radius: 50%;
+    width: 40px;
+    height: 40px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    cursor: pointer;
+}
+
+.message-photo {
+    width: 16px;
+    height: 16px;
+}
+
+.to-home {
+    color: white;
+    font-size: medium;
+    cursor: pointer;
+}
+
+.navigation-bar-admin {
+    display: flex;
+    justify-content: space-evenly;
+    align-items: center;
+    flex-wrap: wrap;
+    margin: 30px 0px 0px 0px;
+}
+
+.admin-item {
+    width: 15%;
+    height: 30px;
+    padding: 25px;
+    margin: 10px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    text-align: center;
+    cursor: pointer;
+    background-color: #FF7F50;
+    border-radius: 30px 100px;
+    color: white;
+    font-size: medium;
+    transition: all 0.3s ease-in-out;
+}
+
+.admin-item.selected {
+    background-color: #0D1B2A;
+    color: white;
+    border-radius: 100px 30px;
+    transform: scale(1.1); /* little grow effect */
+}
+
+.dashboard {
+    display: flex;
+    gap: 20px;
+    justify-content: space-around;
+    margin: 50px;
+    flex-wrap: wrap;
+    padding-bottom: 50px;
+}
+
+.two-btns {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.chart-container,
+.table-container {
+    width: 45%;
+    background-color: #0D1B2A;
+    padding: 20px;
+    border-radius: 40px;
+    color: white;
+    align-items: center;
+    text-align: center;
+}
+
+.table-container-2 {
+    width: 70%;
+    background-color: #0D1B2A;
+    padding: 20px;
+    border-radius: 40px;
+    color: white;
+    align-items: center;
+    text-align: center;
+}
+
+.earnings-table {
+    width: 100%;
+    border-collapse: collapse;
+    color: white;
+}
+
+.earnings-table thead {
+    color: #FF7F50;
+}
+
+.earnings-table th,
+.earnings-table td {
+    padding: 10px;
+    border-bottom: 1px solid white;
+    text-align: center;
+    font-weight: lighter;
+}
+
+.chart-titles {
+    font-weight: normal;
+    margin: 0px 0px 20px 0px;
+    color: #FF7F50;
+}
+
+.chart-titles-2 {
+    font-weight: normal;
+    margin: 0px 0px 0px 0px;
+    color: #FF7F50;
+}
+
+/* Container for both tables */
+.change-products-container {
+    display: flex;
+    justify-content: center;
+    gap: 40px;
+    margin: 30px auto;
+    width: 90%;
+    max-width: 1300px;
+}
+
+.user-profiles-container {
+    display: flex;
+    justify-content: space-between;
+    gap: 40px;
+    margin: 30px auto;
+    width: 90%;
+}
+
+/* Each box (left and right) */
+.change-box {
+    flex: 1;
+    background-color: #0d1b2a; /* dark navy background */
+    border-radius: 30px;
+    padding: 30px 20px;
+    color: white;
+    text-align: center;
+    width: 90%;
+}
+
+.table-wrapper {
+    overflow-y: auto;
+    max-height: 440px;
+    padding-right: 10px;
+}
+
+.table-wrapper::-webkit-scrollbar {
+    width: 5px;
+}
+
+.table-wrapper::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 2px;
+}
+
+
+.add-btn-class {
+    margin: 20px 0px 0px 0px;
+}
+
+/* Tables */
+.admin-table {
+    width: 100%;
+    border-collapse: collapse;
+    margin-bottom: 20px;
+}
+
+
+.admin-table-2 td {
+    height: 57px;
+}
+
+.admin-table th {
+    border-bottom: 1px solid white;
+    padding: 12px 8px;
+    text-align: center;
+    font-size: 14px;
+    font-weight: lighter;
+}
+
+.admin-table td {
+    border-bottom: 1px solid white;
+    padding: 12px 8px;
+    text-align: center;
+    font-size: 14px;
+    font-weight: lighter;
+    /*height: 101px;*/
+}
+
+.admin-table thead {
+    color: #FF7F50;
+}
+
+/* Inputs */
+.admin-table input {
+    width: 90%;
+    padding: 6px 8px;
+    border-radius: 8px;
+    border: none;
+    font-size: 14px;
+    outline: none;
+}
+
+/* Save button */
+.save-btn {
+    background-color: white;
+    color: #0d1b2a;
+    padding: 10px 30px;
+    border: none;
+    border-radius: 20px;
+    font-weight: bold;
+    cursor: pointer;
+    transition: 0.3s ease;
+}
+
+.save-btn:hover {
+    background-color: #ff7f50;
+    color: #0d1b2a;
+}
+
+.fade-in {
+    animation: fadeSlideIn 0.5s ease forwards;
+}
+
+
+.change-box {
+    transition: transform 0.3s ease, opacity 0.3s ease;
+}
+
+.change-box:hover {
+    transform: scale(1.02); /* slight hover effect */
+}
+
+.user-box {
+    background: #0d1724;
+    border-radius: 50px;
+    padding: 30px 20px;
+    color: white;
+    text-align: center;
+    width: 80%;
+    margin: 30px auto;
+    transition: transform 0.3s ease, opacity 0.3s ease;
+}
+
+.user-box:hover {
+    transform: scale(1.02); /* slight hover effect */
+}
+
+.profiles-title {
+    font-size: 28px;
+    margin-bottom: 20px;
+}
+
+.profiles-table {
+    width: 100%;
+    border-collapse: collapse;
+    text-align: left;
+    color: white;
+    margin-bottom: 20px;
+}
+
+.profiles-table thead {
+    color: #FF7F50;
+
+}
+
+.profiles-table th,
+.profiles-table td {
+    padding: 12px;
+    border-bottom: 1px solid white;
+    font-weight: lighter;
+    text-align: center;
+
+}
+
+.profiles-table td {
+    text-align: center;
+}
+
+.actions {
+    display: flex;
+    gap: 10px;
+    justify-content: center;
+}
+
+.remove-btn {
+    background: #FF7F50;
+    color: white;
+    border: none;
+    padding: 6px 14px;
+    border-radius: 10px;
+    cursor: pointer;
+    font-weight: bold;
+    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+    transition: transform 0.2s ease;
+}
+
+.remove-btn:hover {
+    transform: scale(1.05);
+}
+
+.edit-btn {
+    background: #eee;
+    color: #FF7F50;
+    border: none;
+    padding: 6px 14px;
+    border-radius: 10px;
+    cursor: pointer;
+    font-weight: bold;
+    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+    transition: transform 0.2s ease;
+}
+
+.edit-btn:hover {
+    transform: scale(1.05);
+}
+
+.save-btn-container {
+    margin-top: 20px;
+}
+
+.save-btn {
+    background: white;
+    color: black;
+    border: none;
+    padding: 10px 30px;
+    border-radius: 30px;
+    font-size: 16px;
+    font-weight: bold;
+    cursor: pointer;
+    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+    transition: transform 0.2s ease;
+}
+
+.save-btn:hover {
+    transform: scale(1.05);
+}
+
+.change-width {
+    padding: 5px;
+    width: 100%;
+    border-radius: 10px;
+}
+
+.save-btn-2 {
+    background: #FF7F50;
+    color: #0d1724;
+    border: none;
+    padding: 6px 14px;
+    border-radius: 10px;
+    cursor: pointer;
+    font-weight: bold;
+    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+    transition: transform 0.2s ease;
+}
+
+.save-btn-2:hover {
+    transform: scale(1.05);
+}
+
+.cancel-btn {
+    background: white;
+    color: #0d1724;
+    border: none;
+    padding: 6px 14px;
+    border-radius: 10px;
+    cursor: pointer;
+    font-weight: bold;
+    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+    transition: transform 0.2s ease;
+}
+
+.cancel-btn:hover {
+    transform: scale(1.05);
+}
+
+
+.gap-it {
+    display: flex;
+    justify-content: space-evenly;
+}
+
+
+.add-btn {
+    background: #FF7F50;
+    color: white;
+    border: none;
+    padding: 6px 14px;
+    border-radius: 10px;
+    cursor: pointer;
+    font-weight: bold;
+    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+    transition: transform 0.2s ease;
+}
+
+.add-btn:hover {
+    transform: scale(1.05);
+}
+
+.toggle-cell {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    gap: 6px;
+}
+
+.toggle-btn {
+    background: transparent;
+    border: none;
+    color: gray;
+    font-weight: bold;
+    cursor: pointer;
+    transition: 0.3s ease;
+}
+
+.toggle-btn.active {
+    color: white;
+}
+
+.separator {
+    color: gray;
+
+}
+
+.separator2 {
+    display: flex;
+    align-items: center;
+    width: 10%;
+    margin: 20px 0;
+    color: #888;
+    font-size: 14px;
+    justify-content: center;
+}
+
+.inactive {
+    color: gray;
+}
+
+.promo-input {
+    background: white;
+    border: none;
+    padding: 6px 10px;
+    border-radius: 8px;
+    font-size: 14px;
+    text-align: center;
+}
+
+.promo-input.usage {
+    width: 80px;
+}
+
+
+.toggle-cell-disc {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    gap: 6px;
+}
+
+.toggle-cell-usage {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    gap: 6px;
+}
+
+.tooltip-wrapper {
+    position: relative;
+    display: inline-block;
+}
+
+.tooltip-text {
+    visibility: hidden;
+    width: 180px;
+    background-color: #333;
+    color: #fff;
+    text-align: center;
+    padding: 5px 8px;
+    border-radius: 4px;
+    position: absolute;
+    z-index: 10;
+    top: -35px;
+    left: 50%;
+    transform: translateX(-50%);
+    font-size: 12px;
+    opacity: 0;
+    transition: opacity 0.2s;
+    pointer-events: none; /* so it doesn’t block hover */
+}
+
+.tooltip-wrapper:hover .tooltip-text {
+    visibility: visible;
+    opacity: 1;
+}
+
+
+.section-tabs {
+    display: flex;
+    justify-content: space-around;
+    gap: 15px;
+    margin-bottom: 20px;
+    align-items: center;
+}
+
+.section-tabs .tab {
+    background: white;
+    opacity: 100%;
+    border: 2px solid #FF7F50;
+    border-radius: 25px;
+    padding: 5px 20px;
+    color: #FF7F50;
+    font-weight: 500;
+    cursor: pointer;
+    transition: all 0.2s ease;
+    width: 20%;
+    font-family: "Rubik Dirt", system-ui !important;
+    font-style: normal;
+    text-align: center;
+}
+
+.section-tabs .tab:hover {
+    background-color: #FF7F50;
+    color: white;
+}
+
+.section-tabs .tab.active {
+    background-color: #d82b2b;
+    color: white;
+}
+
+
+.earnings-table th {
+    border-bottom: 3px solid #FF7F50;
+    color: #FF7F50;
+}
+
+.earnings-table td {
+    border-bottom: 2px solid rgba(255, 255, 255, 0.05);
+}
+
+.earnings-table td.num {
+    font-variant-numeric: tabular-nums;
+}
+
+.earnings-table tbody tr:hover {
+    background-color: rgba(255, 127, 80, 0.15);
+    transition: background-color 0.2s ease-in-out;
+}
+
+.loading-text {
+    color: #FF7F50;
+    text-align: center;
+    margin-top: 10px;
+}
+
+.descri-css {
+    width: 25%;
+}
+
+.data-items {
+    overflow-y: auto;
+    max-height: 450px;
+    padding-right: 10px;
+}
+
+.data-items::-webkit-scrollbar {
+    width: 5px;
+}
+
+.data-items::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 2px;
+}
+
+.oval-white {
+    position: relative;
+    cursor: pointer;
+}
+
+.messages-wrapper {
+    position: relative; /* за absolute на popup */
+    display: inline-block;
+}
+
+.hover-messages-popup {
+    position: absolute;
+    top: 100%;
+    right: 0;
+    width: 400px;
+    max-height: 400px;
+    overflow-y: auto;
+    background: white;
+    border-radius: 8px;
+    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
+    padding: 10px;
+    z-index: 1000;
+    animation: fadeIn 0.2s ease-in-out;
+}
+
+.hover-message-item {
+    border-bottom: 1px solid #eee;
+    padding: 6px 0;
+    display: flex;
+    align-items: center;
+}
+
+.delete-message-btn {
+    background-color: #FF7F50;
+    color: white;
+    border: none;
+    padding: 4px 8px;
+    border-radius: 4px;
+    cursor: pointer;
+    float: right;
+    font-size: 0.8rem;
+}
+
+.delete-message-btn:hover {
+    background-color: #ca603d;
+}
+
+.hover-message-item:last-child {
+    border-bottom: none;
+}
+
+@keyframes fadeIn {
+    from {
+        opacity: 0;
+        transform: translateY(-5px);
+    }
+    to {
+        opacity: 1;
+        transform: translateY(0);
+    }
+}
+
+
+@keyframes fadeSlideIn {
+    0% {
+        opacity: 0;
+        transform: translateY(20px);
+
+    }
+    100% {
+        opacity: 1;
+        transform: translateY(0);
+    }
+}
+
+@media (max-width: 1250px) {
+    .profiles-table th, .profiles-table td {
+        padding: 4px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > h2 {
+        font-weight: normal;
+        margin: 0px 0px 10px 0px;
+    }
+}
+
+@media (max-width: 1100px) {
+
+    #root > div > div.user-profiles-container.fade-in > div > table > thead > tr > th, td {
+        font-size: small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > h2 {
+        font-size: medium;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div {
+        padding: 20px 20px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.remove-btn {
+        font-size: small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.edit-btn {
+        font-size: small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.save-btn-2 {
+        font-size: small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.cancel-btn {
+        font-size: small;
+    }
+
+
+    .navigation-bar-admin {
+        margin: 20px 0px 0px 0px;
+    }
+
+    .user-profiles-container {
+        margin: 20px auto;
+    }
+}
+
+@media (max-width: 935px) {
+    #root > div > div.user-profiles-container.fade-in > div > table > thead > tr > th,
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody td {
+        font-size: x-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > h2 {
+        font-size: medium;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div {
+        padding: 20px 20px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.remove-btn {
+        font-size: x-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.edit-btn {
+        font-size: x-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.save-btn-2 {
+        font-size: x-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.cancel-btn {
+        font-size: x-small;
+    }
+
+    .change-width {
+        padding: 5px;
+        width: 80%;
+        border-radius: 10px;
+        height: 1px;
+        font-size: xx-small;
+    }
+
+}
+
+@media (max-width: 768px) {
+    .actions {
+        gap: 5px;
+    }
+
+    .oval-white {
+        width: 25px;
+        height: 25px;
+    }
+
+    .message-photo {
+        width: 10px;
+        height: 10px;
+    }
+
+    .to-home {
+        font-size: x-small;
+    }
+
+    .admin-item {
+        font-size: x-small;
+        width: 10%;
+        height: 15px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > h2 {
+        font-size: small;
+        margin: 0px 0px 10px 0px;
+    }
+
+    .chart-titles, .chart-titles-2 {
+        font-size: small;
+        margin: 0px 0px 10px 0px;
+    }
+
+    .admin-table th {
+        font-size: small;
+    }
+
+    .admin-table td {
+        font-size: x-small;
+        padding: 0px 8px;
+        height: 51px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > thead > tr > th {
+        padding: 2px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > thead > tr > th,
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody td {
+        font-size: xx-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody td {
+        padding: 0px 2px;
+        height: 51px;
+    }
+
+    .remove-btn, .edit-btn, .add-btn, .cancel-btn, .save-btn-2, #root > div > div.change-products-container.fade-in > div > table > tbody > tr:nth-child(2) > td:nth-child(5) > input[type=file] {
+        padding: 3px 10px;
+        font-size: xx-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.remove-btn {
+        padding: 2px 6px;
+        font-size: xx-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.edit-btn {
+        padding: 2px 6px;
+        font-size: xx-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.save-btn-2 {
+        font-size: xx-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.cancel-btn {
+        font-size: xx-small;
+    }
+
+    .admin-table input {
+        width: 90%;
+        padding: 6px 6px;
+        border-radius: 8px;
+        border: none;
+        font-size: x-small;
+        outline: none;
+    }
+
+    .change-box {
+        padding: 20px 20px;
+    }
+
+    .navigation-bar-admin {
+        margin: 20px 0px 0px 0px;
+    }
+
+    .user-profiles-container {
+        margin: 20px auto;
+    }
+
+}
+
+@media (max-width: 650px) {
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody td {
+        font-size: 7px;
+        padding: 0px 1px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > thead > tr > th {
+        font-size: 7px;
+    }
+
+    .remove-btn, .edit-btn, .add-btn, .cancel-btn, .save-btn-2, #root > div > div.change-products-container.fade-in > div > table > tbody > tr:nth-child(2) > td:nth-child(5) > input[type=file] {
+        padding: 2px 6px;
+        font-size: 8px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.remove-btn {
+        padding: 2px 6px;
+        font-size: 8px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.edit-btn {
+        padding: 2px 6px;
+        font-size: 8px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.save-btn-2 {
+        padding: 2px 6px;
+        font-size: 8px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.cancel-btn {
+        padding: 2px 6px;
+        font-size: 8px;
+    }
+}
+
+@media (max-width: 600px) {
+
+    #root > div > div.user-profiles-container.fade-in > div > h2 {
+        font-size: x-small;
+        margin: 0px 0px 10px 0px;
+    }
+
+    .admin-table th {
+        font-size: x-small;
+    }
+
+    .admin-table td {
+        font-size: xx-small;
+        padding: 0px 8px;
+        height: 51px;
+    }
+
+    .change-box {
+        padding: 10px 20px;
+    }
+
+    .admin-table input {
+        width: 90%;
+        padding: 6px 5px;
+        border-radius: 9px;
+        border: none;
+        font-size: x-small;
+        outline: none;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody td {
+        font-size: 7px;
+        padding: 0px 1px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > thead > tr > th {
+        font-size: 7px;
+    }
+
+    .logodiv-checkout-admin {
+        padding: 5px 0px;
+    }
+
+    .navigation-bar-admin {
+        margin: 10px 0px 0px 0px;
+    }
+
+    .user-profiles-container {
+        margin: 10px auto;
+    }
+
+    .chart-titles, .chart-titles-2 {
+        font-size: x-small;
+        margin: 0px 0px 0px 0px;
+    }
+
+    .profiles-table th {
+        font-size: 8px;
+    }
+
+    .profiles-table td {
+        font-size: 6px;
+        padding: 0px 1px;
+        height: 40px;
+    }
+
+    .remove-btn, .edit-btn, .add-btn, .cancel-btn, .save-btn-2, #root > div > div.change-products-container.fade-in > div > table > tbody > tr:nth-child(2) > td:nth-child(5) > input[type=file] {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.remove-btn {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.edit-btn {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.save-btn-2 {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.cancel-btn {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    .profiles-table {
+        margin-bottom: 0px;
+    }
+
+    .change-width {
+        padding: 4px;
+        width: 60%;
+        border-radius: 4px;
+        height: 1px;
+        font-size: 5px;
+    }
+
+}
+
+@media (max-width: 550px) {
+
+    .logodiv-checkout-admin {
+        padding: 5px 0px;
+    }
+
+    .navigation-bar-admin {
+        margin: 10px 0px 0px 0px;
+    }
+
+    .user-profiles-container {
+        margin: 10px auto;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > h2 {
+        font-size: x-small;
+        margin: 0px 0px 0px 0px;
+    }
+
+    .chart-titles, .chart-titles-2 {
+        font-size: x-small;
+        margin: 0px 0px 0px 0px;
+    }
+
+    .profiles-table th {
+        font-size: 8px;
+    }
+
+    .profiles-table td {
+        font-size: 6px;
+        padding: 0px 1px;
+        height: 40px;
+    }
+
+    .remove-btn, .edit-btn, .add-btn, .cancel-btn, .save-btn-2, #root > div > div.change-products-container.fade-in > div > table > tbody > tr:nth-child(2) > td:nth-child(5) > input[type=file] {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.remove-btn {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.edit-btn {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.save-btn-2 {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.cancel-btn {
+        padding: 2px 6px;
+        font-size: 6px;
+    }
+
+    .profiles-table {
+        margin-bottom: 0px;
+    }
+
+
+}
+
+@media (max-width: 500px) {
+    .oval-white {
+        width: 15px;
+        height: 15px;
+    }
+
+    .message-photo {
+        width: 7px;
+        height: 7px;
+    }
+
+    .to-home {
+        font-size: xx-small;
+    }
+
+    .admin-item {
+        font-size: 7px;
+        width: 8%;
+        height: 15px;
+        padding: 20px
+    }
+
+    .admin-table td {
+        font-size: 8px;
+        padding: 0px 2px;
+        height: 60px;
+    }
+
+    .remove-btn, .edit-btn, .add-btn, .cancel-btn, .save-btn-2, #root > div > div.change-products-container.fade-in > div > table > tbody > tr:nth-child(2) > td:nth-child(5) > input[type=file] {
+        padding: 2px 5px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.remove-btn {
+        padding: 2px 5px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.edit-btn {
+        padding: 2px 5px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.save-btn-2 {
+        padding: 2px 5px;
+        font-size: 6px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.cancel-btn {
+        padding: 2px 5px;
+        font-size: 6px;
+    }
+
+    .admin-table {
+        margin-bottom: 10px;
+    }
+
+    .admin-table th {
+        font-size: xx-small;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > h2 {
+        font-size: x-small;
+        margin: 0px 0px 0px 0px;
+    }
+
+    .chart-titles, .chart-titles-2 {
+        font-size: x-small;
+        margin: 0px 0px 0px 0px;
+    }
+
+    .change-products-container {
+        margin: 20px auto;
+    }
+
+    .navigation-bar-admin {
+        margin: 10px 0px 0px 0px;
+    }
+
+    .admin-table input {
+        width: 70%;
+        padding: 0px 3px;
+        border-radius: 9px;
+        border: none;
+        font-size: 8px;
+        outline: none;
+    }
+
+    .profiles-table {
+        margin-bottom: 0px;
+    }
+
+}
+
+@media (max-width: 480px) {
+
+    .logodiv-checkout-admin {
+        padding: 5px 0px;
+    }
+
+    .navigation-bar-admin {
+        margin: 10px 0px 0px 0px;
+    }
+
+    .user-profiles-container {
+        margin: 10px auto;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > h2 {
+        font-size: xx-small;
+        margin: 0px 0px 0px 0px;
+    }
+
+    .chart-titles, .chart-titles-2 {
+        font-size: xx-small;
+        margin: 0px 0px 0px 0px;
+    }
+
+    .profiles-table th {
+        font-size: 5px;
+    }
+
+    .profiles-table td {
+        font-size: 5px;
+        padding: 0px 1px;
+    }
+
+    .remove-btn, .edit-btn, .add-btn, .cancel-btn, .save-btn-2, #root > div > div.change-products-container.fade-in > div > table > tbody > tr:nth-child(2) > td:nth-child(5) > input[type=file] {
+        padding: 2px 5px;
+        font-size: 5px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.remove-btn {
+        padding: 2px 5px;
+        font-size: 5px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.edit-btn {
+        padding: 2px 5px;
+        font-size: 5px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.save-btn-2 {
+        padding: 2px 5px;
+        font-size: 5px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.cancel-btn {
+        padding: 2px 5px;
+        font-size: 5px;
+    }
+
+    .profiles-table {
+        margin-bottom: 0px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody td {
+        font-size: 5px;
+        padding: 0px 1px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > thead > tr > th {
+        font-size: 5px;
+    }
+}
+
+@media (max-width: 390px) {
+
+    .logodiv-checkout-admin {
+        padding: 5px 0px;
+    }
+
+    .navigation-bar-admin {
+        margin: 0px 0px 0px 0px;
+    }
+
+    .user-profiles-container {
+        margin: 0px auto;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > h2 {
+        font-size: 8px;
+        margin: 0px 0px 0px 0px;
+    }
+
+    .chart-titles, .chart-titles-2 {
+        font-size: 8px;
+        margin: 0px 0px 0px 0px;
+    }
+
+    .profiles-table th {
+        font-size: 4px;
+    }
+
+    .profiles-table td {
+        font-size: 4px;
+        padding: 0px 1px;
+    }
+
+    .remove-btn, .edit-btn, .add-btn, .cancel-btn, .save-btn-2, #root > div > div.change-products-container.fade-in > div > table > tbody > tr:nth-child(2) > td:nth-child(5) > input[type=file] {
+        padding: 2px 3px;
+        font-size: 4px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.remove-btn {
+        padding: 2px 3px;
+        font-size: 4px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.edit-btn {
+        padding: 2px 3px;
+        font-size: 4px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.save-btn-2 {
+        padding: 2px 3px;
+        font-size: 4px;
+    }
+
+    #root > div > div.user-profiles-container.fade-in > div > table > tbody button.cancel-btn {
+        padding: 2px 3px;
+        font-size: 4px;
+    }
+
+    .admin-item {
+        font-size: 5px;
+        width: 5%;
+        height: 12px;
+        padding: 15px;
+    }
+
+    .logodiv-checkout-admin {
+        padding: 1px 0px;
+    }
+}
Index: Frontend/src/AdminPanel.js
===================================================================
--- Frontend/src/AdminPanel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ Frontend/src/AdminPanel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3826 @@
+import React, {useState, useEffect, useRef} from "react";
+import "./AdminPanel.css";
+import PACrustLogo from "./images/pacrustlogo1.png"
+import message from './images/messages.png'
+import axios from "axios";
+import {useNavigate} from "react-router-dom";
+import {Line} from "react-chartjs-2";
+import {
+    Chart as ChartJS,
+    LineElement,
+    CategoryScale,
+    LinearScale,
+    PointElement,
+    Title,
+    Tooltip,
+    Legend,
+    Filler,
+} from "chart.js";
+
+ChartJS.register(LineElement, CategoryScale, LinearScale, PointElement, Title, Tooltip, Legend);
+
+
+export default function AdminPanel({loggedUser, setLoggedUser, logout}) {
+
+    const emptyPromo = {
+        name: "",
+        discountType: "%",
+        discountValue: 0,
+        startDate: "",
+        endDate: "",
+        usageLimit: "",
+        noLimit: false,
+        active: true,
+    };
+
+    const [newPromo, setNewPromo] = useState(null);
+    const [promos, setPromos] = useState([]);
+
+
+    async function saveNewPromo() {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        try {
+            const payload = {
+                name: newPromo.name,
+                discountType: newPromo.discountType,
+                discountValue: parseFloat(newPromo.discountValue) || 0,
+                usageLimit: newPromo.noLimit ? null : parseInt(newPromo.usageLimit) || null,
+                noLimit: newPromo.noLimit,
+                startDate: newPromo.startDate || null,
+                endDate: newPromo.endDate || null,
+                active: newPromo.active
+            };
+
+            console.log("Sending payload:", payload);
+
+            const res = await fetch("http://127.0.0.1:8000/api/promos/add/", {
+                method: "POST",
+                headers: {
+                    Authorization: `Bearer ${token}`,
+                    "Content-Type": "application/json"
+                },
+                body: JSON.stringify(payload)
+            });
+
+            if (!res.ok) {
+                const errorData = await res.json();
+                console.error("Backend error:", errorData);
+                alert("❌ " + JSON.stringify(errorData));
+                throw new Error("Failed to save promo");
+            }
+
+            const savedPromo = await res.json();
+            setPromos(prev => [...prev, savedPromo]);
+            setNewPromo(null);
+        } catch (err) {
+            console.error("Error saving promo:", err);
+        }
+    }
+
+
+    async function deletePromo(id) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/promos/${id}/delete/`, {
+                method: "DELETE",
+                headers: {
+                    Authorization: `Bearer ${token}`
+                }
+            });
+
+            if (!res.ok) {
+                const errorData = await res.json();
+                console.error("Backend error deleting promo:", errorData);
+                throw new Error("Failed to delete promo");
+            }
+
+            setPromos(prev => prev.filter(p => p.id !== id));
+        } catch (err) {
+            console.error("Error deleting promo:", err);
+        }
+    }
+
+
+    const [editingPromoId, setEditingPromoId] = useState(null);
+    const [selectedPromo, setSelectedPromo] = useState(null);
+    const updatePromo = (id, updatedData) => {
+        setPromos(prev => prev.map(p => p.id === id ? {...p, ...updatedData} : p));
+        setEditingPromoId(null);
+    };
+
+
+    const [newIngredient, setNewIngredient] = useState(null);
+
+    const [selectedIngredient, setSelectedIngredient] = useState(null);
+
+    const [selectedPizza, setselectedPizza] = useState(null);
+
+
+    async function saveNewIngredient() {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", newIngredient.name);
+        formData.append("price", newIngredient.price);
+        formData.append("description", newIngredient.description);
+        formData.append("availability", newIngredient.availability ? "true" : "false");
+
+        if (newIngredient.imageFile) formData.append("image", newIngredient.imageFile);
+
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/ingredients/add/", {
+                method: "POST",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData
+            });
+
+            const data = await res.json();
+            setIngredients(prev => [...prev, data]);
+            setNewIngredient(null);
+        } catch (err) {
+            console.error("Error saving ingredient:", err);
+        }
+    }
+
+    async function saveEditingIngredient(id, editingData) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", editingData.name);
+        formData.append("price", editingData.price);
+        formData.append("description", editingData.description);
+        if (editingData.imageFile) formData.append("image", editingData.imageFile);
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/ingredients/${id}/update/`, {
+                method: "PUT",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData
+            });
+
+            const updated = await res.json();
+            setIngredients(prev => prev.map(ing => ing.id === id ? updated : ing));
+            setEditingRowId(null);
+        } catch (err) {
+            console.error("Error updating ingredient:", err);
+        }
+    }
+
+    async function deleteIngredient(id) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        try {
+            await fetch(`http://127.0.0.1:8000/api/ingredients/${id}/delete/`, {
+                method: "DELETE",
+                headers: {Authorization: `Bearer ${token}`}
+            });
+
+            setIngredients(prev => prev.filter(ing => ing.id !== id));
+        } catch (err) {
+            console.error("Error deleting ingredient:", err);
+        }
+    }
+
+    const [editingIngredientData, setEditingIngredientData] = useState({});
+
+    const startEditingIngredient = (item) => {
+        setEditingRowId(item.id);
+        setEditingIngredientData({...item});
+    };
+
+    const updateIngredient = async (ingredient) => {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", ingredient.name);
+        formData.append("price", ingredient.price);
+        formData.append("description", ingredient.description);
+        formData.append("availability", ingredient.availability ? "true" : "false");
+
+        if (ingredient.imageFile) formData.append("image", ingredient.imageFile);
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/ingredients/${ingredient.id}/update/`, {
+                method: "PUT",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+            const updated = await res.json();
+            setIngredients(prev => prev.map(ing => ing.id === ingredient.id ? updated : ing));
+            setEditingRowId(null);
+        } catch (err) {
+            console.error("Error updating ingredient:", err);
+        }
+    };
+
+    const [newPizza, setNewPizza] = useState(null);
+    const [editingPizzaId, setEditingPizzaId] = useState(null);
+    const emptyPizza = {
+        name: "",
+        price: 0,
+        heading: "",
+        description: "",
+        imageFile: null,
+        imagePreview: null,
+        stickersFiles: [],
+        stickersPreview: [],
+        stickers: [],
+    };
+
+    const [editingPizzaData, setEditingPizzaData] = useState({...emptyPizza});
+
+    function handleAddClick() {
+        setNewPizza({...emptyPizza, id: "new"});
+    }
+
+    const saveNewPizza = async () => {
+        const formData = new FormData();
+        formData.append("name", newPizza.name);
+        formData.append("price", newPizza.price);
+        formData.append("heading", newPizza.heading);
+        formData.append("description", newPizza.description);
+        if (newPizza.imageFile) formData.append("image", newPizza.imageFile);
+        if (newPizza.stickersFiles) {
+            newPizza.stickersFiles.forEach(file => formData.append("stickers", file));
+        }
+
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/pizzas/", {
+                method: "POST",
+                body: formData
+            });
+            const data = await res.json();
+            setPizzas([...pizzas, data]);
+            setNewPizza(null);
+        } catch (err) {
+            console.error(err);
+        }
+    };
+
+    const [ingredients, setIngredients] = useState([
+        {
+            id: 1,
+            name: "Pepperoni",
+            price: "2€",
+            description: "Spicy, smoky, and crispy slices that bring bold flavor.",
+            image: "./images/pizza55.png",
+        },
+        {
+            id: 2,
+            name: "Cheese",
+            price: "2.50€",
+            description: "Rich and creamy cheese that melts perfectly.",
+            image: "./images/pizza55.png",
+        },
+    ]);
+
+    const [editingRowId, setEditingRowId] = useState(null);
+    const [preview, setPreview] = useState(null);
+
+    const handleFileChange = (e) => {
+        const file = e.target.files[0];
+        if (file) {
+            setPreview(URL.createObjectURL(file));
+        }
+    };
+
+    const navigate = useNavigate();
+
+    const [users, setUsers] = useState([]);
+
+    const [selected, setSelected] = useState(null);
+
+    useEffect(() => {
+        if (selected === 2) {
+            fetch("http://127.0.0.1:8000/api/ingredients/")
+                .then(res => res.json())
+                .then(data => setIngredients(data))
+                .catch(err => console.error("Error fetching ingredients:", err));
+        }
+    }, [selected]);
+
+    const [selectedUser, setSelectedUser] = useState(null);
+
+    // Get pizzas
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/pizzas/")
+            .then(res => res.json())
+            .then(data => setPizzas(data));
+    }, []);
+
+
+    const [pizzas, setPizzas] = useState([]);
+
+    async function fetchPizzas() {
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/pizzas/");
+            const data = await res.json();
+            setPizzas(data);
+        } catch (err) {
+            console.error("Error fetching pizzas:", err);
+        }
+    }
+
+    useEffect(() => {
+        if (selected === 1) {
+            fetch("http://localhost:8000/api/users/")
+                .then((res) => res.json())
+                .then((data) => setUsers(data))
+                .catch((err) => console.error("Error fetching users:", err));
+        }
+    }, [selected]);
+
+
+    const salesData = {
+        labels: ["Spicy Pepperoni Blaze", "Capricciosa", "Garden Delight", "Marharitta", "Mediterranean Greek Feast", "Custom made"],
+        datasets: [
+            {
+                label: 'Sales',
+                data: [100, 80, 70, 40, 60, 110],
+                borderColor: '#FF7F50',
+                backgroundColor: 'rgba(255, 127, 80, 0.2)',
+                tension: 0.4,
+                fill: true,
+                pointBackgroundColor: '#FF7F50',
+                pointBorderColor: '#FF7F50',
+                pointRadius: 5,
+                pointHoverRadius: 7,
+                pointHoverBorderWidth: 2,
+            }
+        ]
+
+    };
+
+    const handleRemove = async (id) => {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("No access token!");
+
+        try {
+            const response = await axios.delete(`http://localhost:8000/api/users/${id}/`, {
+                headers: {Authorization: `Bearer ${token}`},
+            });
+            setUsers(prev => prev.filter(user => user.id !== id));
+            alert("User removed successfully!");
+        } catch (err) {
+            console.error("Full error:", err.response || err);
+            alert("Error removing user. Check console for details.");
+        }
+    };
+
+    const [editingUserId, setEditingUserId] = useState(null);
+    const [editingUserData, setEditingUserData] = useState({});
+
+    const startEditing = (user) => {
+        setEditingUserId(user.id);
+        setEditingUserData({
+            name: user.name || "",
+            username: user.username || "",
+            email: user.email || "",
+            address: user.address || "",
+            phone: user.phone || "",
+            city: user.city || "",
+            role: user.role || ""
+        });
+    };
+
+    const cancelEditing = () => {
+        setEditingUserId(null);
+        setEditingUserData({});
+    };
+
+    const saveEditing = async () => {
+        const token = localStorage.getItem("access");
+        try {
+            const res = await axios.put(
+                `http://localhost:8000/api/users/${editingUserId}/`,
+                editingUserData,
+                {headers: {Authorization: `Bearer ${token}`}}
+            );
+
+            setUsers(users.map(u => u.id === editingUserId ? res.data : u));
+            setEditingUserId(null);
+            setEditingUserData({});
+        } catch (err) {
+            console.error("Update error:", err.response?.data || err);
+            alert("Error updating user.");
+        }
+    };
+
+    function startEditingPizza(pizza) {
+        setEditingPizzaId(pizza.id);
+        setEditingPizzaData({
+            name: pizza.name,
+            price: pizza.price,
+            heading: pizza.heading,
+            description: pizza.description,
+            image: pizza.image,
+            imageFile: null,
+            imagePreview: null,
+            stickersFiles: [],
+            stickers: pizza.stickers || [],
+            stickersPreview: (pizza.stickers || []).map(s =>
+                s.image.startsWith("http") ? s.image : `http://127.0.0.1:8000${s.image}`
+            ),
+        });
+    }
+
+    function handleStickerChange(e) {
+        const files = Array.from(e.target.files);
+        const previews = files.map(file => URL.createObjectURL(file));
+
+        setEditingPizzaData(prev => ({
+            ...prev,
+            stickersFiles: [...(prev.stickersFiles || []), ...files],
+            stickersPreview: [...(prev.stickersPreview || []), ...previews],
+        }));
+    }
+
+    const cancelEditingPizza = () => {
+        setEditingPizzaId(null);
+        setEditingPizzaData({});
+    };
+
+    async function saveEditingPizza() {
+        const token = localStorage.getItem("access");
+
+        const newStickerIds = [];
+        for (const file of editingPizzaData.stickersFiles || []) {
+            const stickerForm = new FormData();
+            stickerForm.append("stickers", file); // not "image"
+
+            const res = await fetch(
+                `http://127.0.0.1:8000/pizzas/${editingPizzaId}/upload-stickers/`,
+                {
+                    method: "POST",
+                    headers: {Authorization: `Bearer ${token}`},
+                    body: stickerForm,
+                }
+            );
+
+            if (res.ok) {
+                const data = await res.json();
+                data.forEach(sticker => newStickerIds.push(sticker.id));
+            } else {
+                console.error("❌ Failed to upload sticker:", await res.text());
+            }
+        }
+
+        const formData = new FormData();
+        formData.append("name", editingPizzaData.name);
+        formData.append("price", editingPizzaData.price);
+        formData.append("heading", editingPizzaData.heading);
+        formData.append("description", editingPizzaData.description);
+
+        if (editingPizzaData.imageFile) {
+            formData.append("image", editingPizzaData.imageFile);
+        }
+
+        // 🧩 3️⃣ Combine sticker IDs safely
+        // ✅ Gather sticker IDs
+        const existingStickerIds = (editingPizzaData.stickers || [])
+            .filter(s => s && s.id)
+            .map(s => Number(s.id));
+
+        const validNewStickerIds = newStickerIds.filter(id => !isNaN(id)).map(Number);
+
+        const allStickerIds = [...existingStickerIds, ...validNewStickerIds];
+
+        console.log("🧾 allStickerIds before update:", allStickerIds);
+
+        for (const id of allStickerIds) {
+            formData.append("sticker_ids", id);
+        }
+
+        // 🧩 4️⃣ Send update request
+        const res = await fetch(
+            `http://127.0.0.1:8000/api/pizzas/${editingPizzaId}/update/`,
+            {
+                method: "PATCH",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            }
+        );
+
+        if (res.ok) {
+            console.log("✅ Pizza updated successfully!");
+            // Refresh pizza list so stickers show immediately
+            await fetchPizzas();
+            setEditingPizzaId(null);
+            setEditingPizzaData({...emptyPizza});
+        } else {
+            console.error("❌ Pizza update failed:", await res.text());
+        }
+    }
+
+    async function uploadStickers(pizzaId, stickerFiles) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        stickerFiles.forEach(file => formData.append("stickers", file));
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/pizzas/${pizzaId}/upload-stickers/`, {
+                method: "POST",
+                headers: {
+                    Authorization: `Bearer ${token}`,
+                },
+                body: formData,
+            });
+
+            if (!res.ok) {
+                const text = await res.text(); // avoids JSON parse crash
+                console.error("Sticker upload error:", text);
+                throw new Error(`Failed to upload stickers (status ${res.status})`);
+            }
+
+            const data = await res.json();
+            console.log("✅ Stickers uploaded:", data.stickers);
+            return data.stickers;
+        } catch (err) {
+            console.error("Error uploading stickers:", err);
+            alert("❌ Error uploading stickers");
+        }
+    }
+
+    const removePizza = async (id) => {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/pizzas/${id}/delete/`, {
+                method: "DELETE",
+                headers: {Authorization: `Bearer ${token}`},
+            });
+
+            setPizzas(prev => prev.filter(p => Number(p.id) !== Number(id)));
+        } catch (err) {
+            console.error("Error deleting pizza:", err);
+        }
+    };
+
+    const [promo, setPromo] = useState({
+        name: "",
+        discountType: "%",
+        discountValue: 0,
+        startDate: "",
+        endDate: "",
+        usageLimit: "",
+        active: true
+    });
+
+    useEffect(() => {
+        if (selected === 3) {
+            fetch("http://127.0.0.1:8000/api/promos/")
+                .then(res => {
+                    if (!res.ok) throw new Error("Failed to fetch promos");
+                    return res.json();
+                })
+                .then(data => setPromos(data))
+                .catch(err => console.error("Error fetching promos:", err));
+        }
+    }, [selected]);
+
+    const [salads, setSalads] = useState([]);
+    const [newSalad, setNewSalad] = useState(null);
+
+    const [drinks, setDrinks] = useState([]);
+    const [newDrink, setNewDrink] = useState(null);
+
+    const [desserts, setDesserts] = useState([]);
+    const [newDessert, setNewDessert] = useState(null);
+
+    const [sauces, setSauces] = useState([]);
+    const [newSauce, setNewSauce] = useState(null);
+
+    const [specialOffers, setSpecialOffers] = useState([]);
+    const [newSpecialOffer, setNewSpecialOffer] = useState(null);
+
+    const [selectedSection, setSelectedSection] = useState("salads");
+
+    useEffect(() => {
+        const token = localStorage.getItem("access");
+        if (selectedSection === "salads") {
+            fetch("http://127.0.0.1:8000/api/salads/")
+                .then(res => res.json())
+                .then(data => setSalads(data))
+                .catch(console.error);
+        } else if (selectedSection === "drinks") {
+            fetch("http://127.0.0.1:8000/api/drinks/")
+                .then(res => res.json())
+                .then(data => setDrinks(data))
+                .catch(console.error);
+        } else if (selectedSection === "desserts") {
+            fetch("http://127.0.0.1:8000/api/desserts/")
+                .then(res => res.json())
+                .then(data => setDesserts(data))
+                .catch(console.error);
+        } else if (selectedSection === "sauces") {
+            fetch("http://127.0.0.1:8000/api/sauces/")
+                .then(res => res.json())
+                .then(data => setSauces(data))
+                .catch(console.error);
+
+        } else if (selectedSection === "specialOffers") {
+            fetch("http://127.0.0.1:8000/api/special-offers/")
+                .then(res => res.json())
+                .then(data => setSpecialOffers(data))
+                .catch(console.error);
+        }
+    }, [selectedSection]);
+
+    async function saveNewSalad() {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", newSalad.name);
+        formData.append("price", newSalad.price);
+        formData.append("description", newSalad.description);
+        formData.append("availability", newSalad.availability ? "true" : "false");
+
+        if (newSalad.imageFile) formData.append("image", newSalad.imageFile);
+
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/salads/add/", {
+                method: "POST",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+
+            if (!res.ok) throw new Error("Failed to save salad");
+            const data = await res.json();
+            setSalads(prev => [...prev, data]);
+            setNewSalad(null);
+        } catch (err) {
+            console.error("Error saving salad:", err);
+        }
+    }
+
+    async function updateSalad(salad) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", salad.name);
+        formData.append("price", salad.price);
+        formData.append("description", salad.description);
+        formData.append("availability", salad.availability ? "true" : "false");
+
+        if (salad.imageFile) formData.append("image", salad.imageFile);
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/salads/${salad.id}/update/`, {
+                method: "PUT",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+
+            if (!res.ok) throw new Error("Failed to update salad");
+            const updated = await res.json();
+            setSalads(prev => prev.map(s => s.id === salad.id ? updated : s));
+            setEditingRowId(null);
+        } catch (err) {
+            console.error("Error updating salad:", err);
+        }
+    }
+
+    async function deleteSalad(id) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/salads/${id}/delete/`, {
+                method: "DELETE",
+                headers: {Authorization: `Bearer ${token}`},
+            });
+
+            if (!res.ok) throw new Error("Failed to delete salad");
+            setSalads(prev => prev.filter(s => s.id !== id));
+        } catch (err) {
+            console.error("Error deleting salad:", err);
+        }
+    }
+
+    async function saveNewDrink() {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", newDrink.name);
+        formData.append("price", newDrink.price);
+        formData.append("availability", newDrink.availability ? "true" : "false");
+        formData.append("size", newDrink.size || "");
+        if (newDrink.imageFile) formData.append("image", newDrink.imageFile);
+
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/drinks/add/", {
+                method: "POST",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+            if (!res.ok) throw new Error("Failed to save drink");
+            const data = await res.json();
+            setDrinks(prev => [...prev, data]);
+            setNewDrink(null);
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function updateDrink(drink) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", drink.name);
+        formData.append("price", drink.price);
+        formData.append("description", drink.description);
+        formData.append("availability", drink.availability ? "true" : "false");
+        if (drink.imageFile) formData.append("image", drink.imageFile);
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/drinks/${drink.id}/update/`, {
+                method: "PUT",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+            if (!res.ok) throw new Error("Failed to update drink");
+            const updated = await res.json();
+            setDrinks(prev => prev.map(d => d.id === drink.id ? updated : d));
+            setEditingRowId(null);
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function deleteDrink(id) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/drinks/${id}/delete/`, {
+                method: "DELETE",
+                headers: {Authorization: `Bearer ${token}`},
+            });
+            if (!res.ok) throw new Error("Failed to delete drink");
+            setDrinks(prev => prev.filter(d => d.id !== id));
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function saveNewDessert() {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", newDessert.name);
+        formData.append("price", newDessert.price);
+        formData.append("availability", newDessert.availability ? "true" : "false");
+        if (newDessert.imageFile) formData.append("image", newDessert.imageFile);
+
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/desserts/add/", {
+                method: "POST",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+            if (!res.ok) throw new Error("Failed to save dessert");
+            const data = await res.json();
+            setDesserts(prev => [...prev, data]);
+            setNewDessert(null);
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function updateDessert(dessert) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", dessert.name);
+        formData.append("price", dessert.price);
+        formData.append("description", dessert.description);
+        formData.append("availability", dessert.availability ? "true" : "false");
+        if (dessert.imageFile) formData.append("image", dessert.imageFile);
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/desserts/${dessert.id}/update/`, {
+                method: "PUT",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+            if (!res.ok) throw new Error("Failed to update dessert");
+            const updated = await res.json();
+            setDesserts(prev => prev.map(d => d.id === dessert.id ? updated : d));
+            setEditingRowId(null);
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function deleteDessert(id) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/desserts/${id}/delete/`, {
+                method: "DELETE",
+                headers: {Authorization: `Bearer ${token}`},
+            });
+            if (!res.ok) throw new Error("Failed to delete dessert");
+            setDesserts(prev => prev.filter(d => d.id !== id));
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function saveNewSauce() {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", newSauce.name);
+        formData.append("price", newSauce.price);
+        formData.append("description", newSauce.description);
+        formData.append("availability", newSauce.availability ? "true" : "false");
+        if (newSauce.imageFile) formData.append("image", newSauce.imageFile);
+
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/sauces/add/", {
+                method: "POST",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+            if (!res.ok) throw new Error("Failed to save sauce");
+            const data = await res.json();
+            setSauces(prev => [...prev, data]);
+            setNewSauce(null);
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function updateSauce(sauce) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", sauce.name);
+        formData.append("price", sauce.price);
+        formData.append("description", sauce.description);
+        formData.append("availability", sauce.availability ? "true" : "false");
+        if (sauce.imageFile) formData.append("image", sauce.imageFile);
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/sauces/${sauce.id}/update/`, {
+                method: "PUT",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+            if (!res.ok) throw new Error("Failed to update sauce");
+            const updated = await res.json();
+            setSauces(prev => prev.map(s => s.id === sauce.id ? updated : s));
+            setEditingRowId(null);
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function deleteSauce(id) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/sauces/${id}/delete/`, {
+                method: "DELETE",
+                headers: {Authorization: `Bearer ${token}`},
+            });
+            if (!res.ok) throw new Error("Failed to delete sauce");
+            setSauces(prev => prev.filter(s => s.id !== id));
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function saveNewSpecialOffer() {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", newSpecialOffer.name);
+        formData.append("price", newSpecialOffer.price);
+        formData.append("description", newSpecialOffer.description);
+        formData.append("availability", newSpecialOffer.availability ? "true" : "false");
+        if (newSpecialOffer.imageFile) formData.append("image", newSpecialOffer.imageFile);
+
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/special-offers/add/", {
+                method: "POST",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+            if (!res.ok) throw new Error("Failed to save special offer");
+            const data = await res.json();
+            setSpecialOffers(prev => [...prev, data]);
+            setNewSpecialOffer(null);
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function updateSpecialOffer(offer) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        const formData = new FormData();
+        formData.append("name", offer.name);
+        formData.append("price", offer.price);
+        formData.append("description", offer.description);
+        formData.append("availability", offer.availability ? "true" : "false");
+        if (offer.imageFile) formData.append("image", offer.imageFile);
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/special-offers/${offer.id}/update/`, {
+                method: "PUT",
+                headers: {Authorization: `Bearer ${token}`},
+                body: formData,
+            });
+            if (!res.ok) throw new Error("Failed to update special offer");
+            const updated = await res.json();
+            setSpecialOffers(prev => prev.map(s => s.id === offer.id ? updated : s));
+            setEditingRowId(null);
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    async function deleteSpecialOffer(id) {
+        const token = localStorage.getItem("access");
+        if (!token) return alert("You must be logged in!");
+
+        try {
+            const res = await fetch(`http://127.0.0.1:8000/api/special-offers/${id}/delete/`, {
+                method: "DELETE",
+                headers: {Authorization: `Bearer ${token}`},
+            });
+            if (!res.ok) throw new Error("Failed to delete special offer");
+            setSpecialOffers(prev => prev.filter(s => s.id !== id));
+        } catch (err) {
+            console.error(err);
+        }
+    }
+
+    const [chartData, setChartData] = useState(null);
+    const [earningsData, setEarningsData] = useState([]);
+    const [stats, setStats] = useState({totalRevenue: 0, totalOrders: 0, avgOrder: 0});
+
+    useEffect(() => {
+        const fetchOrders = async () => {
+            try {
+                const res = await fetch("http://127.0.0.1:8000/api/get-orders");
+                const orders = await res.json();
+
+                const itemStats = {};
+                orders.forEach(order => {
+                    order.items.forEach(item => {
+                        const name = item.name || "Unknown";
+                        const price = parseFloat(item.price) || 0;
+                        const qty = parseInt(item.quantity) || 0;
+                        const revenue = price * qty;
+                        if (!itemStats[name]) itemStats[name] = {price, qty: 0, revenue: 0};
+                        itemStats[name].qty += qty;
+                        itemStats[name].revenue += revenue;
+                    });
+                });
+
+                const totalRevenue = Object.values(itemStats).reduce((sum, i) => sum + i.revenue, 0);
+                const tableData = Object.entries(itemStats).map(([name, data]) => ({
+                    name,
+                    price: data.price.toFixed(2),
+                    qty: data.qty,
+                    revenue: data.revenue.toFixed(2),
+                    sales: ((data.revenue / totalRevenue) * 100).toFixed(1) + "%",
+                }));
+                setEarningsData(tableData);
+
+                // ==== DAILY STATS ====
+                const salesByDate = {};
+                const ordersCountByDate = {};
+
+                orders.forEach(order => {
+                    const date = order.created_at ? order.created_at.slice(0, 10) : "Unknown";
+                    const total = order.items.reduce((sum, i) => sum + i.price * i.quantity, 0);
+                    salesByDate[date] = (salesByDate[date] || 0) + total;
+                    ordersCountByDate[date] = (ordersCountByDate[date] || 0) + 1;
+                });
+
+                const sortedDates = Object.keys(salesByDate).sort();
+
+                const dailySales = sortedDates.map(d => salesByDate[d]);
+                const dailyOrders = sortedDates.map(d => ordersCountByDate[d]);
+                const avgOrderValue = sortedDates.map(d => salesByDate[d] / ordersCountByDate[d]);
+
+                setStats({
+                    totalRevenue: totalRevenue.toFixed(2),
+                    totalOrders: orders.length,
+                    avgOrder: (totalRevenue / orders.length).toFixed(2)
+                });
+
+                setChartData({
+                    labels: sortedDates,
+                    datasets: [
+                        {
+                            label: "Daily Sales (€)",
+                            data: dailySales,
+                            borderColor: "#FF7F50",
+                            backgroundColor: "rgba(255,127,80,0.25)",
+                            pointBackgroundColor: "#FF7F50",
+                            pointBorderColor: "#fff",
+                            borderWidth: 5,
+                            tension: 0.4,
+                            fill: true,
+                        },
+                        {
+                            label: "Orders per Day",
+                            data: dailyOrders,
+                            borderColor: "#00C9FF",
+                            backgroundColor: "rgba(0,201,255,0.25)",
+                            pointBackgroundColor: "#00C9FF",
+                            pointBorderColor: "#fff",
+                            borderWidth: 5,
+                            tension: 0.4,
+                            fill: true,
+                        },
+                        {
+                            label: "Avg Order (€)",
+                            data: avgOrderValue,
+                            borderColor: "#FFD700",
+                            backgroundColor: "rgba(255,215,0,0.25)",
+                            pointBackgroundColor: "#FFD700",
+                            pointBorderColor: "#fff",
+                            borderWidth: 5,
+                            tension: 0.4,
+                            fill: true,
+                        },
+                    ]
+
+                });
+            } catch (err) {
+                console.error("Error fetching orders:", err);
+            }
+        };
+
+        fetchOrders();
+    }, []);
+
+    const [messages, setMessages] = useState([]);
+    const [showMessagesHover, setShowMessagesHover] = useState(false);
+
+    useEffect(() => {
+        const fetchMessages = async () => {
+            try {
+                const token = localStorage.getItem("access");
+                const res = await fetch("http://127.0.0.1:8000/api/get-messages/", {
+                    headers: {
+                        "Authorization": `Bearer ${token}`,
+                    },
+                });
+                if (!res.ok) throw new Error("Failed to fetch messages");
+                const data = await res.json();
+                setMessages(data);
+            } catch (err) {
+                console.error(err);
+            }
+        };
+
+        fetchMessages();
+    }, []);
+
+    const [reservations, setReservations] = useState([]);
+    const [loadingReservations, setLoadingReservations] = useState(true);
+
+    useEffect(() => {
+        const fetchReservations = async () => {
+            try {
+                const token = localStorage.getItem("access");
+                const res = await fetch("http://127.0.0.1:8000/api/user-reservations/", {
+                    method: "GET",
+                    headers: {"Authorization": `Bearer ${token}`},
+                    credentials: "include"
+                });
+
+                console.log("STATUS:", res.status);
+
+                const text = await res.text();
+                console.log("RAW RESPONSE:", text);
+
+                const data = JSON.parse(text);
+                console.log("RESERVATIONS:", data);
+
+                setReservations(data);
+            } catch (err) {
+                console.error("Error fetching reservations:", err);
+            } finally {
+                setLoadingReservations(false);
+            }
+        };
+
+        fetchReservations();
+    }, []);
+
+    const toggleReservationApproval = async (id) => {
+        try {
+            const token = localStorage.getItem("access");
+
+            const res = await fetch(
+                `http://127.0.0.1:8000/api/reservations/${id}/approve/`,
+                {
+                    method: "POST",
+                    headers: {
+                        "Authorization": `Bearer ${token}`,
+                        "Content-Type": "application/json",
+                    },
+                }
+            );
+
+            if (!res.ok) {
+                throw new Error("Failed to update status");
+            }
+
+            const data = await res.json();
+
+            setReservations(prev =>
+                prev.map(r =>
+                    r.id === id ? {...r, approved: data.approved} : r
+                )
+            );
+
+
+        } catch (err) {
+            console.error("Approve toggle error:", err);
+        }
+    };
+
+
+    const sendMail = async (reservation) => {
+        try {
+            const token = localStorage.getItem("access");
+
+            const res = await fetch(
+                "http://127.0.0.1:8000/api/send-reservation-mail/",
+                {
+                    method: "POST",
+                    headers: {
+                        "Authorization": `Bearer ${token}`,
+                        "Content-Type": "application/json",
+                    },
+                    body: JSON.stringify({
+                        reservation_id: reservation.id,
+                        status: reservation.approved,
+                    }),
+                }
+            );
+
+            if (!res.ok) {
+                throw new Error("Failed to send mail");
+            }
+
+            console.log("Mail sent successfully");
+        } catch (err) {
+            console.error("Send mail error:", err);
+        }
+    };
+
+
+    return (
+        <div className="background-checkout">
+            <div className="logodiv-checkout-admin">
+                <div>
+                    <p className="to-home" onClick={() => navigate("/")}>HOME</p>
+                </div>
+
+                <img className="logo" src={PACrustLogo} alt={PACrustLogo} onClick={() => {
+                    navigate("/admin_panel");
+                    setSelected(null)
+                }}/>
+
+                <div
+                    className="messages-wrapper"
+                    onMouseEnter={() => setShowMessagesHover(true)}
+                    onMouseLeave={() => setShowMessagesHover(false)}
+                >
+                    <div className="oval-white">
+                        <img className="message-photo" src={message} alt="Messages"/>
+                    </div>
+
+                    {showMessagesHover && messages.length > 0 && (
+                        <div className="hover-messages-popup">
+                            {messages.map((msg, index) => {
+                                const date = new Date(msg.created_at);
+                                const formattedDate = date.toLocaleDateString() + " " + date.toLocaleTimeString([], {
+                                    hour: '2-digit',
+                                    minute: '2-digit'
+                                });
+
+                                return (
+                                    <div key={index} className="hover-message-item">
+                                        <p>
+                                            <strong>{msg.sender}:</strong> {msg.content}
+                                        </p>
+                                        <small>{formattedDate}</small>
+                                        <button
+                                            className="delete-message-btn"
+                                            onClick={async () => {
+                                                try {
+                                                    const token = localStorage.getItem("access"); // ако користиш JWT
+                                                    const res = await fetch(`http://127.0.0.1:8000/api/messages/${msg.id}/delete/`, {
+                                                        method: "DELETE",
+                                                        headers: {
+                                                            "Authorization": `Bearer ${token}`
+                                                        }
+                                                    });
+                                                    if (!res.ok) throw new Error("Failed to delete message");
+                                                    setMessages(prev => prev.filter(m => m.id !== msg.id));
+                                                } catch (err) {
+                                                    console.error(err);
+                                                    alert("Failed to delete message");
+                                                }
+                                            }}
+                                        >
+                                            Delete
+                                        </button>
+                                    </div>
+                                );
+                            })}
+                        </div>
+                    )}
+                </div>
+
+
+            </div>
+
+            <div className="navigation-bar-admin">
+                <div
+                    className={`admin-item ${selected === 0 ? "selected" : ""}`}
+                    onClick={() => {
+                        if (selected === 0) {
+                            setSelected(null);
+                            navigate("/admin_panel");
+                        } else {
+                            setSelected(0);
+                        }
+                    }}
+                >
+                    Change information and price of the products
+                </div>
+
+                <div
+                    className={`admin-item ${selected === 1 ? "selected" : ""}`}
+                    onClick={() => {
+                        if (selected === 1) {
+                            setSelected(null);
+                            navigate("/admin_panel");
+                        } else {
+                            setSelected(1);
+                        }
+                    }}
+                >
+                    Manage the user profiles
+                </div>
+
+                <div
+                    className={`admin-item ${selected === 2 ? "selected" : ""}`}
+                    onClick={() => {
+                        if (selected === 2) {
+                            setSelected(null);
+                            navigate("/admin_panel");
+                        } else {
+                            setSelected(2);
+                        }
+                    }}
+                >
+                    Add more new products
+                </div>
+
+                <div
+                    className={`admin-item ${selected === 3 ? "selected" : ""}`}
+                    onClick={() => {
+                        if (selected === 3) {
+                            setSelected(null);
+                            navigate("/admin_panel");
+                        } else {
+                            setSelected(3);
+                        }
+                    }}
+                >
+                    Promo codes
+                </div>
+            </div>
+
+            {selected === null && (
+                <div className="dashboard fade-in">
+                    <div className="chart-container">
+                        <div className="chart-header">
+                            <h2 className="chart-titles">Line Chart for Sales Trend</h2>
+                        </div>
+
+                        {chartData ? (
+                            <Line
+                                data={chartData}
+                                options={{
+                                    responsive: true,
+                                    plugins: {
+                                        legend: {position: "top"},
+                                    },
+                                }}
+                            />
+                        ) : (
+                            <p>Loading chart...</p>
+                        )}
+                    </div>
+
+                    <div className="table-container">
+                        <h2 className="chart-titles">Earnings by Items</h2>
+
+                        <div className="data-items">
+                            {earningsData.length > 0 ? (
+                                <table className="earnings-table">
+                                    <thead>
+                                    <tr>
+                                        <th>Item</th>
+                                        <th>Price (€)</th>
+                                        <th>Qty</th>
+                                        <th>Revenue (€)</th>
+                                        <th>% of Sales</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody>
+                                    {earningsData.map((item, i) => (
+                                        <tr key={i} className={i === 0 ? "top-item" : ""}>
+                                            <td>{item.name}</td>
+                                            <td className="num">{item.price}</td>
+                                            <td className="num">{item.qty}</td>
+                                            <td className="num">{item.revenue}</td>
+                                            <td className="num">{item.sales}</td>
+                                        </tr>
+                                    ))}
+                                    </tbody>
+                                </table>
+                            ) : (
+                                <p className="loading-text">Loading earnings data...</p>
+                            )}
+                        </div>
+
+
+                    </div>
+
+                    <div className="table-container-2">
+                        <h2 className="chart-titles">Reservations</h2>
+
+                        {loadingReservations ? (
+                            <p className="loading-text">Loading reservations...</p>
+                        ) : (
+                            <div className="data-items">
+                                <table className="earnings-table">
+                                    <thead>
+                                    <tr>
+                                        <th>Date</th>
+                                        <th>From</th>
+                                        <th>To</th>
+                                        <th>Name</th>
+                                        <th>People</th>
+                                        <th>Comment</th>
+                                        <th>Status</th>
+                                        <th>Actions</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody>
+                                    {reservations
+                                        .map(r => (
+                                            <tr key={r.id}>
+                                                <td>{r.date}</td>
+                                                <td>{r.from_time}</td>
+                                                <td>{r.to_time}</td>
+                                                <td>{r.name}</td>
+                                                <td className="num">{r.people_count}</td>
+                                                <td>{r.comment || "-"}</td>
+                                                <td style={{color: r.approved === "Approved" ? "green" : "red"}}>
+                                                    {r.approved}
+                                                </td>
+
+
+                                                <td className="two-btns">
+                                                    <button
+                                                        className="remove-btn"
+                                                        onClick={() => toggleReservationApproval(r.id)}
+                                                    >
+                                                        {r.approved === "Approved" ? "Unapprove" : "Approve"}
+                                                    </button>
+
+
+                                                    <button
+                                                        className="edit-btn"
+                                                        onClick={() => sendMail(r)}
+                                                        style={{marginLeft: "8px"}}
+                                                    >
+                                                        Send Mail
+                                                    </button>
+                                                </td>
+                                            </tr>
+                                        ))}
+                                    </tbody>
+                                </table>
+                            </div>
+                        )}
+                    </div>
+                </div>
+            )}
+
+            {selected === 0 && (
+                <div className="change-products-container fade-in">
+
+                    <div className="change-box">
+                        <h2 className="chart-titles">Change pizza information</h2>
+                        <div className="table-wrapper">
+                            <table className="admin-table">
+                                <thead>
+                                <tr>
+                                    <th>Name</th>
+                                    <th>Price</th>
+                                    <th>Heading</th>
+                                    <th>Description</th>
+                                    <th>Stickers</th>
+                                    <th>Image</th>
+                                    <th>Actions</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                {pizzas.map((pizza) => (
+                                    <tr key={pizza.id}>
+                                        <td>
+                                            {editingPizzaId === pizza.id ? (
+                                                <input
+                                                    type="text"
+                                                    value={editingPizzaData.name}
+                                                    onChange={e => setEditingPizzaData({
+                                                        ...editingPizzaData,
+                                                        name: e.target.value
+                                                    })}
+                                                />
+                                            ) : pizza.name}
+                                        </td>
+
+                                        <td>
+                                            {editingPizzaId === pizza.id ? (
+                                                <input
+                                                    type="number"
+                                                    value={editingPizzaData.price}
+                                                    onChange={e => setEditingPizzaData({
+                                                        ...editingPizzaData,
+                                                        price: e.target.value
+                                                    })}
+                                                />
+                                            ) : pizza.price}
+                                        </td>
+
+                                        <td>
+                                            {editingPizzaId === pizza.id ? (
+                                                <input
+                                                    type="text"
+                                                    value={editingPizzaData.heading}
+                                                    onChange={e =>
+                                                        setEditingPizzaData({
+                                                            ...editingPizzaData,
+                                                            heading: e.target.value
+                                                        })
+                                                    }
+                                                />
+                                            ) : pizza.heading}
+                                        </td>
+
+                                        <td className="descri-css">
+                                            {editingPizzaId === pizza.id ? (
+                                                <input
+                                                    type="text"
+                                                    value={editingPizzaData.description}
+                                                    onChange={e =>
+                                                        setEditingPizzaData({
+                                                            ...editingPizzaData,
+                                                            description: e.target.value
+                                                        })
+                                                    }
+                                                />
+                                            ) : pizza.description}
+                                        </td>
+
+                                        <td>
+                                            <div style={{display: "flex", flexWrap: "wrap", gap: "5px"}}>
+                                                {pizza.stickers?.map((sticker, i) => (
+                                                    <img
+                                                        key={i}
+                                                        src={
+                                                            sticker.image
+                                                                ? (sticker.image.startsWith("http")
+                                                                    ? sticker.image
+                                                                    : `http://127.0.0.1:8000${sticker.image}`)
+                                                                : "/fallback-image.png"
+                                                        }
+                                                        alt="sticker"
+                                                        width="40"
+                                                        height="40"
+                                                        style={{borderRadius: "5px", background: "white"}}
+                                                    />
+                                                ))}
+                                            </div>
+
+                                            {editingPizzaId === pizza.id && (
+                                                <div style={{marginTop: "5px"}}>
+                                                    <input type="file" accept="image/*" multiple
+                                                           onChange={handleStickerChange}/>
+                                                    <div className="sticker-preview-grid">
+                                                        {editingPizzaData.stickersPreview?.map((src, i) => (
+                                                            <img key={i} src={src} alt="Sticker preview" width="60"
+                                                                 height="60"/>
+                                                        ))}
+                                                    </div>
+                                                </div>
+                                            )}
+
+                                        </td>
+
+
+                                        <td>
+                                            {editingPizzaId === pizza.id ? (
+                                                <>
+                                                    <input
+                                                        type="file"
+                                                        accept="image/*"
+                                                        onChange={(e) => {
+                                                            const file = e.target.files[0];
+                                                            if (file) {
+                                                                setEditingPizzaData({
+                                                                    ...editingPizzaData,
+                                                                    imagePreview: URL.createObjectURL(file), // preview
+                                                                    imageFile: file                   // file to send
+                                                                });
+                                                            }
+                                                        }}
+                                                    />
+
+                                                    {editingPizzaData.imagePreview && (
+                                                        <img
+                                                            src={editingPizzaData.imagePreview}
+                                                            alt="preview"
+                                                            width="60"
+                                                            height="60"
+                                                            style={{marginTop: "5px", borderRadius: "5px"}}
+                                                        />
+                                                    )}
+                                                </>
+                                            ) : (
+                                                <img
+                                                    src={
+                                                        pizza.image && typeof pizza.image === "string"
+                                                            ? (pizza.image.startsWith("http")
+                                                                ? pizza.image
+                                                                : `http://127.0.0.1:8000${pizza.image}`)
+                                                            : "/fallback-image.png" // optional placeholder
+                                                    }
+                                                    alt={pizza.name}
+                                                    style={{width: "100%", height: "80px", objectFit: "cover"}}
+                                                />
+
+
+                                            )}
+                                        </td>
+
+
+                                        <td>
+                                            {editingPizzaId === pizza.id ? (
+                                                <>
+                                                    <div className="actions">
+                                                        <button className="save-btn-2" onClick={saveEditingPizza}>Save
+                                                        </button>
+                                                        <button className="cancel-btn"
+                                                                onClick={cancelEditingPizza}>Cancel
+                                                        </button>
+                                                    </div>
+                                                </>
+                                            ) : (
+                                                <>
+                                                    <div className="actions">
+                                                        {/*<button className="remove-btn"*/}
+                                                        {/*        onClick={() => removePizza(pizza.id)}>Remove*/}
+                                                        {/*</button>*/}
+                                                        <button className="remove-btn"
+                                                                onClick={() => setselectedPizza(pizza)}>Remove
+                                                        </button>
+                                                        <button className="edit-btn"
+                                                                onClick={() => startEditingPizza(pizza)}>Edit
+                                                        </button>
+                                                    </div>
+                                                </>
+                                            )}
+                                        </td>
+                                    </tr>
+                                ))}
+
+                                {newPizza && (
+                                    <tr key="new">
+                                        <td><input type="text" value={newPizza.name}
+                                                   onChange={e => setNewPizza({...newPizza, name: e.target.value})}/>
+                                        </td>
+                                        <td><input type="number" value={newPizza.price}
+                                                   onChange={e => setNewPizza({...newPizza, price: e.target.value})}/>
+                                        </td>
+                                        <td><input type="text" value={newPizza.heading}
+                                                   onChange={e => setNewPizza({...newPizza, heading: e.target.value})}/>
+                                        </td>
+                                        <td><input type="text" value={newPizza.description}
+                                                   onChange={e => setNewPizza({
+                                                       ...newPizza,
+                                                       description: e.target.value
+                                                   })}/>
+                                        </td>
+                                        <td>
+                                            <input
+                                                type="file"
+                                                accept="image/*"
+                                                multiple
+                                                onChange={(e) => {
+                                                    const files = Array.from(e.target.files);
+                                                    const previews = files.map(file => URL.createObjectURL(file));
+                                                    setNewPizza({
+                                                        ...newPizza,
+                                                        stickersFiles: files,
+                                                        stickersPreview: previews
+                                                    });
+                                                }}
+                                            />
+                                            {newPizza.stickersPreview?.length > 0 && (
+                                                <div style={{
+                                                    display: "flex",
+                                                    flexWrap: "wrap",
+                                                    gap: "5px",
+                                                    marginTop: "5px"
+                                                }}>
+                                                    {newPizza.stickersPreview.map((src, i) => (
+                                                        <img key={i} src={src} alt="sticker preview" width="40"
+                                                             height="40"/>
+                                                    ))}
+                                                </div>
+                                            )}
+                                        </td>
+                                        <td>
+                                            <>
+                                                <input
+                                                    type="file"
+                                                    accept="image/*"
+                                                    onChange={(e) => {
+                                                        const file = e.target.files[0];
+                                                        if (file) {
+                                                            setNewPizza({
+                                                                ...newPizza,
+                                                                imageFile: file,
+                                                                imagePreview: URL.createObjectURL(file)
+                                                            });
+                                                        }
+                                                    }}
+                                                />
+                                                {newPizza.imagePreview && (
+                                                    <img src={newPizza.imagePreview} alt="preview" width="60"
+                                                         height="60"/>
+                                                )}
+                                                {newPizza.image && (
+                                                    <img
+                                                        src={newPizza.image}
+                                                        alt="preview"
+                                                        width="60"
+                                                        height="60"
+                                                        style={{marginTop: "5px", borderRadius: "5px"}}
+                                                    />
+                                                )}
+                                            </>
+                                        </td>
+
+                                        <td>
+                                            <button className="save-btn-2" onClick={saveNewPizza}>Save</button>
+                                            <button className="cancel-btn" onClick={() => setNewPizza(null)}>Cancel
+                                            </button>
+                                        </td>
+                                    </tr>
+                                )}
+                                </tbody>
+
+                            </table>
+
+                        </div>
+                        <div className="add-btn-class">
+                            {!newPizza && <button className="add-btn" onClick={handleAddClick}>Add</button>}
+                        </div>
+
+                    </div>
+                </div>
+            )}
+
+            {selectedPizza && (
+                <div className="modal-overlay">
+                    <div className="modal">
+                        <h2>Delete Pizza</h2>
+                        <p>Are you sure you want to delete {selectedPizza.name}?</p>
+                        <div className="gap-it">
+                            <button
+                                className="remove-btn"
+                                onClick={() => {
+                                    removePizza(selectedPizza.id);
+                                    setselectedPizza(null);
+                                }}
+                            >
+                                Yes, delete
+                            </button>
+
+                            <button
+                                className="edit-btn"
+                                onClick={() => setselectedPizza(null)}
+                            >
+                                Cancel
+                            </button>
+                        </div>
+                    </div>
+                </div>
+            )}
+
+            {selected === 1 && (
+                <div className="user-profiles-container fade-in">
+
+                    <div className="change-box">
+                        <h2 className="chart-titles">User Profiles</h2>
+                        <div className="table-wrapper">
+                            <table className="profiles-table">
+                                <thead>
+                                <tr>
+                                    <th>#</th>
+                                    <th>Full Name</th>
+                                    <th>Username</th>
+                                    <th>Email</th>
+                                    <th>Address</th>
+                                    <th>Phone</th>
+                                    <th>City</th>
+                                    <th>Role</th>
+                                    <th>Actions</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                {users.map((user, i) => (
+                                    <tr key={user.id}>
+                                        <td>{i + 1}</td>
+                                        <td>
+                                            {editingUserId === user.id ? (
+                                                <input className="change-width"
+                                                       value={editingUserData.name}
+                                                       onChange={(e) =>
+                                                           setEditingUserData({
+                                                               ...editingUserData,
+                                                               name: e.target.value
+                                                           })
+                                                       }
+                                                />
+                                            ) : (
+                                                user.name || "/"
+                                            )}
+                                        </td>
+                                        <td>
+                                            {editingUserId === user.id ? (
+                                                <input className="change-width"
+                                                       value={editingUserData.username}
+                                                       onChange={(e) =>
+                                                           setEditingUserData({
+                                                               ...editingUserData,
+                                                               username: e.target.value
+                                                           })
+                                                       }
+                                                />
+                                            ) : (
+                                                user.username || "/"
+                                            )}
+                                        </td>
+                                        <td>
+                                            {editingUserId === user.id ? (
+                                                <input className="change-width"
+                                                       value={editingUserData.email}
+                                                       onChange={(e) =>
+                                                           setEditingUserData({
+                                                               ...editingUserData,
+                                                               email: e.target.value
+                                                           })
+                                                       }
+                                                />
+                                            ) : (
+                                                user.email || "/"
+                                            )}
+                                        </td>
+                                        <td>
+                                            {editingUserId === user.id ? (
+                                                <input className="change-width"
+                                                       value={editingUserData.address}
+                                                       onChange={(e) =>
+                                                           setEditingUserData({
+                                                               ...editingUserData,
+                                                               address: e.target.value
+                                                           })
+                                                       }
+                                                />
+                                            ) : (
+                                                user.address || "/"
+                                            )}
+                                        </td>
+                                        <td>
+                                            {editingUserId === user.id ? (
+                                                <input className="change-width"
+                                                       value={editingUserData.phone}
+                                                       onChange={(e) =>
+                                                           setEditingUserData({
+                                                               ...editingUserData,
+                                                               phone: e.target.value
+                                                           })
+                                                       }
+                                                />
+                                            ) : (
+                                                user.phone || "/"
+                                            )}
+                                        </td>
+                                        <td>
+                                            {editingUserId === user.id ? (
+                                                <input className="change-width"
+                                                       value={editingUserData.city}
+                                                       onChange={(e) =>
+                                                           setEditingUserData({
+                                                               ...editingUserData,
+                                                               city: e.target.value
+                                                           })
+                                                       }
+                                                />
+                                            ) : (
+                                                user.city || "/"
+                                            )}
+                                        </td>
+                                        <td>
+                                            {editingUserId === user.id ? (
+                                                <select
+                                                    className="change-width"
+                                                    value={editingUserData.role}
+                                                    onChange={(e) =>
+                                                        setEditingUserData({
+                                                            ...editingUserData,
+                                                            role: e.target.value
+                                                        })
+                                                    }
+                                                >
+                                                    <option value="administrator">administrator</option>
+                                                    <option value="client">client</option>
+                                                    <option value="employee">employee</option>
+                                                </select>
+
+                                            ) : (
+                                                user.role || "/"
+                                            )}
+                                        </td>
+                                        <td>
+                                            <div className="actions">
+                                                {editingUserId === user.id ? (
+                                                    <>
+                                                        <button className="save-btn-2" onClick={saveEditing}>Save
+                                                        </button>
+                                                        <button className="cancel-btn" onClick={cancelEditing}>Cancel
+                                                        </button>
+                                                    </>
+                                                ) : (
+                                                    <>
+                                                        <button className="remove-btn"
+                                                                onClick={() => setSelectedUser(user)}>Remove
+                                                        </button>
+                                                        <button className="edit-btn"
+                                                                onClick={() => startEditing(user)}>Edit
+                                                        </button>
+                                                    </>
+                                                )}
+                                            </div>
+                                        </td>
+                                    </tr>
+                                ))}
+                                </tbody>
+                            </table>
+
+                        </div>
+                    </div>
+                </div>
+            )
+            }
+
+            {selectedUser && (
+                <div className="modal-overlay">
+                    <div className="modal">
+                        <h2>Delete User</h2>
+                        <p>Are you sure you want to delete {selectedUser.name}?</p>
+                        <div className="gap-it">
+                            <button className="remove-btn"
+                                    onClick={() => {
+                                        handleRemove(selectedUser.id);
+                                        setSelectedUser(null);
+                                    }}
+                            >
+                                Yes, delete
+                            </button>
+                            <button className="edit-btn" onClick={() => setSelectedUser(null)}>Cancel
+                            </button>
+                        </div>
+
+                    </div>
+                </div>
+            )
+            }
+
+            {selected === 2 && (
+                <div className="change-products-container fade-in">
+                    <div className="change-box">
+                        <h2 className="chart-titles">Add Ingredients for pizza</h2>
+                        <div className="table-wrapper">
+                            <table className="admin-table">
+                                <thead>
+                                <tr>
+                                    <th>Name</th>
+                                    <th>Price</th>
+                                    <th>Description</th>
+                                    <th>Image</th>
+                                    <th>Availability</th>
+                                    <th>Actions</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                {ingredients.map((item) => (
+                                    <tr key={item.id}>
+                                        {editingRowId === item.id ? (
+                                            <>
+                                                <td>
+                                                    <input
+                                                        type="text"
+                                                        value={item.name}
+                                                        onChange={(e) =>
+                                                            setIngredients(prev =>
+                                                                prev.map(ing =>
+                                                                    ing.id === item.id ? {
+                                                                        ...ing,
+                                                                        name: e.target.value
+                                                                    } : ing
+                                                                )
+                                                            )
+                                                        }
+                                                    />
+                                                </td>
+                                                <td>
+                                                    <input
+                                                        type="text"
+                                                        value={item.price}
+                                                        onChange={(e) =>
+                                                            setIngredients(prev =>
+                                                                prev.map(ing =>
+                                                                    ing.id === item.id ? {
+                                                                        ...ing,
+                                                                        price: e.target.value
+                                                                    } : ing
+                                                                )
+                                                            )
+                                                        }
+                                                    />
+                                                </td>
+                                                <td>
+                                                    <input
+                                                        type="text"
+                                                        value={item.description}
+                                                        onChange={(e) =>
+                                                            setIngredients(prev =>
+                                                                prev.map(ing =>
+                                                                    ing.id === item.id ? {
+                                                                        ...ing,
+                                                                        description: e.target.value
+                                                                    } : ing
+                                                                )
+                                                            )
+                                                        }
+                                                    />
+                                                </td>
+                                                <td>
+                                                    <input
+                                                        type="file"
+                                                        accept="image/*"
+                                                        onChange={(e) => {
+                                                            const file = e.target.files[0];
+                                                            if (file) {
+                                                                setIngredients(prev =>
+                                                                    prev.map(ing =>
+                                                                        ing.id === item.id
+                                                                            ? {
+                                                                                ...ing,
+                                                                                imagePreview: URL.createObjectURL(file),
+                                                                                imageFile: file
+                                                                            }
+                                                                            : ing
+                                                                    )
+                                                                );
+                                                            }
+                                                        }}
+                                                    />
+                                                    <img
+                                                        src={item.imagePreview || item.image}
+                                                        alt="preview"
+                                                        width="60"
+                                                        height="60"
+                                                        style={{marginTop: "5px", borderRadius: "5px"}}
+                                                    />
+                                                </td>
+                                                <td>
+                                                    <input
+                                                        type="checkbox"
+                                                        checked={item.availability || false}
+                                                        onChange={e =>
+                                                            setIngredients(prev =>
+                                                                prev.map(ing =>
+                                                                    ing.id === item.id
+                                                                        ? {...ing, availability: e.target.checked}
+                                                                        : ing
+                                                                )
+                                                            )
+                                                        }
+                                                    />
+
+                                                </td>
+
+                                                <td>
+                                                    <div className="actions">
+                                                        <button
+                                                            className="save-btn-2"
+                                                            onClick={() => updateIngredient(item)}
+                                                        >
+                                                            Save
+                                                        </button>
+                                                        <button
+                                                            className="cancel-btn"
+                                                            onClick={() => setEditingRowId(null)}
+                                                        >
+                                                            Cancel
+                                                        </button>
+                                                    </div>
+                                                </td>
+                                            </>
+                                        ) : (
+                                            <>
+                                                <td>{item.name}</td>
+                                                <td>{item.price}</td>
+                                                <td>{item.description}</td>
+                                                <td>
+                                                    <img
+                                                        src={item.image}
+                                                        alt={item.name}
+                                                        width="60"
+                                                        height="60"
+                                                        style={{borderRadius: "5px"}}
+                                                    />
+                                                </td>
+
+                                                <td>{item.availability ? "✅ Yes" : "❌ No"}</td>
+
+                                                <td>
+                                                    <div className="actions">
+                                                        <button
+                                                            className="remove-btn"
+                                                            onClick={() => setSelectedIngredient(item)}
+                                                        >
+                                                            Remove
+                                                        </button>
+                                                        <button
+                                                            className="edit-btn"
+                                                            onClick={() => setEditingRowId(item.id)}
+                                                        >
+                                                            Edit
+                                                        </button>
+                                                    </div>
+                                                </td>
+                                            </>
+                                        )}
+                                    </tr>
+                                ))}
+
+                                {newIngredient && (
+                                    <tr key="new-ingredient">
+                                        <td><input type="text" value={newIngredient.name}
+                                                   onChange={e => setNewIngredient({
+                                                       ...newIngredient,
+                                                       name: e.target.value
+                                                   })}/></td>
+                                        <td><input type="text" value={newIngredient.price}
+                                                   onChange={e => setNewIngredient({
+                                                       ...newIngredient,
+                                                       price: e.target.value
+                                                   })}/></td>
+                                        <td><input type="text" value={newIngredient.description}
+                                                   onChange={e => setNewIngredient({
+                                                       ...newIngredient,
+                                                       description: e.target.value
+                                                   })}/></td>
+                                        <td>
+                                            <input type="file" accept="image/*" onChange={e => {
+                                                const file = e.target.files[0];
+                                                if (file) {
+                                                    setNewIngredient({
+                                                        ...newIngredient,
+                                                        imagePreview: URL.createObjectURL(file),
+                                                        imageFile: file
+                                                    });
+                                                }
+                                            }}/>
+                                            {newIngredient.imagePreview &&
+                                                <img src={newIngredient.imagePreview} width="60" height="60"/>}
+                                        </td>
+
+                                        <td>
+                                            <input
+                                                type="checkbox"
+                                                checked={newIngredient.availability || false}
+                                                onChange={e => setNewIngredient({
+                                                    ...newIngredient,
+                                                    availability: e.target.checked
+                                                })}
+                                            />
+
+                                        </td>
+
+
+                                        <td>
+                                            <button className="save-btn-2" onClick={saveNewIngredient}>Save</button>
+                                            <button className="cancel-btn" onClick={() => setNewIngredient(null)}>Cancel
+                                            </button>
+                                        </td>
+                                    </tr>
+                                )}
+
+                                </tbody>
+                            </table>
+                        </div>
+
+
+                        <div className="add-btn-class">
+                            {!newPizza && (
+                                <button
+                                    className="add-btn"
+                                    onClick={() =>
+                                        setNewIngredient({
+                                            id: "new",
+                                            name: "",
+                                            price: "",
+                                            description: "",
+                                            availability: true,
+                                            imageFile: null,
+                                            imagePreview: null,
+                                        })
+                                    }
+                                >
+                                    Add
+                                </button>
+                            )}
+                        </div>
+                    </div>
+
+                    {selectedSection === "salads" && (
+                        <div className="change-box">
+                            <div className="section-tabs">
+                                <button
+                                    className={selectedSection === "specialOffers" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("specialOffers")}
+                                >
+                                    Special Offers
+                                </button>
+                                <h2 className="chart-titles-2">Add Salads</h2>
+                                <button
+                                    className={selectedSection === "drinks" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("drinks")}
+                                >
+                                    Drinks
+                                </button>
+                            </div>
+                            <div className="table-wrapper">
+                                <table className="admin-table">
+                                    <thead>
+                                    <tr>
+                                        <th>Name</th>
+                                        <th>Price</th>
+                                        <th>Description</th>
+                                        <th>Image</th>
+                                        <th>Availability</th>
+                                        <th>Actions</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody>
+                                    {salads.map((item) => (
+                                        <tr key={item.id}>
+                                            {editingRowId === item.id ? (
+                                                <>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.name}
+                                                            onChange={(e) =>
+                                                                setSalads(prev =>
+                                                                    prev.map(s =>
+                                                                        s.id === item.id
+                                                                            ? {...s, name: e.target.value}
+                                                                            : s
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.price}
+                                                            onChange={(e) =>
+                                                                setSalads(prev =>
+                                                                    prev.map(s =>
+                                                                        s.id === item.id
+                                                                            ? {...s, price: e.target.value}
+                                                                            : s
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.description}
+                                                            onChange={(e) =>
+                                                                setSalads(prev =>
+                                                                    prev.map(s =>
+                                                                        s.id === item.id
+                                                                            ? {...s, description: e.target.value}
+                                                                            : s
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="file"
+                                                            accept="image/*"
+                                                            onChange={(e) => {
+                                                                const file = e.target.files[0];
+                                                                if (file) {
+                                                                    setSalads(prev =>
+                                                                        prev.map(s =>
+                                                                            s.id === item.id
+                                                                                ? {
+                                                                                    ...s,
+                                                                                    imagePreview: URL.createObjectURL(file),
+                                                                                    imageFile: file
+                                                                                }
+                                                                                : s
+                                                                        )
+                                                                    );
+                                                                }
+                                                            }}
+                                                        />
+                                                        <img
+                                                            src={item.imagePreview || item.image}
+                                                            alt="preview"
+                                                            width="60"
+                                                            height="60"
+                                                            style={{marginTop: "5px", borderRadius: "5px"}}
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="checkbox"
+                                                            checked={item.availability || false}
+                                                            onChange={e =>
+                                                                setSalads(prev =>
+                                                                    prev.map(s =>
+                                                                        s.id === item.id
+                                                                            ? {...s, availability: e.target.checked}
+                                                                            : s
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button className="save-btn-2"
+                                                                    onClick={() => updateSalad(item)}>Save
+                                                            </button>
+                                                            <button className="cancel-btn"
+                                                                    onClick={() => setEditingRowId(null)}>Cancel
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            ) : (
+                                                <>
+                                                    <td>{item.name}</td>
+                                                    <td>{item.price}</td>
+                                                    <td>{item.description}</td>
+                                                    <td>
+                                                        <img
+                                                            src={item.image}
+                                                            alt={item.name}
+                                                            width="60"
+                                                            height="60"
+                                                            style={{borderRadius: "5px"}}
+                                                        />
+                                                    </td>
+                                                    <td>{item.availability ? "✅ Yes" : "❌ No"}</td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button className="remove-btn"
+                                                                    onClick={() => deleteSalad(item.id)}>Remove
+                                                            </button>
+                                                            <button className="edit-btn"
+                                                                    onClick={() => setEditingRowId(item.id)}>Edit
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            )}
+                                        </tr>
+                                    ))}
+
+                                    {newSalad && (
+                                        <tr key="new-salad">
+                                            <td><input type="text" value={newSalad.name}
+                                                       onChange={e => setNewSalad({
+                                                           ...newSalad,
+                                                           name: e.target.value
+                                                       })}/>
+                                            </td>
+                                            <td><input type="text" value={newSalad.price}
+                                                       onChange={e => setNewSalad({
+                                                           ...newSalad,
+                                                           price: e.target.value
+                                                       })}/>
+                                            </td>
+                                            <td><input type="text" value={newSalad.description}
+                                                       onChange={e => setNewSalad({
+                                                           ...newSalad,
+                                                           description: e.target.value
+                                                       })}/></td>
+                                            <td>
+                                                <input type="file" accept="image/*" onChange={e => {
+                                                    const file = e.target.files[0];
+                                                    if (file) {
+                                                        setNewSalad({
+                                                            ...newSalad,
+                                                            imagePreview: URL.createObjectURL(file),
+                                                            imageFile: file
+                                                        });
+                                                    }
+                                                }}/>
+                                                {newSalad.imagePreview &&
+                                                    <img src={newSalad.imagePreview} width="60" height="60"/>}
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="checkbox"
+                                                    checked={newSalad.availability || false}
+                                                    onChange={e => setNewSalad({
+                                                        ...newSalad,
+                                                        availability: e.target.checked
+                                                    })}
+                                                />
+                                            </td>
+                                            <td>
+                                                <button className="save-btn-2" onClick={saveNewSalad}>Save</button>
+                                                <button className="cancel-btn" onClick={() => setNewSalad(null)}>Cancel
+                                                </button>
+                                            </td>
+                                        </tr>
+                                    )}
+                                    </tbody>
+                                </table>
+                            </div>
+
+                            <div className="add-btn-class">
+                                {!newSalad && (
+                                    <button
+                                        className="add-btn"
+                                        onClick={() =>
+                                            setNewSalad({
+                                                id: "new",
+                                                name: "",
+                                                price: "",
+                                                description: "",
+                                                availability: true,
+                                                imageFile: null,
+                                                imagePreview: null,
+                                            })
+                                        }
+                                    >
+                                        Add
+                                    </button>
+                                )}
+                            </div>
+                        </div>
+                    )}
+
+                    {selectedSection === "drinks" && (
+                        <div className="change-box">
+                            <div className="section-tabs">
+                                <button
+                                    className={selectedSection === "salads" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("salads")}
+                                >
+                                    Salads
+                                </button>
+                                <h2 className="chart-titles-2">Add Drinks</h2>
+                                <button
+                                    className={selectedSection === "desserts" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("desserts")}
+                                >
+                                    Desserts
+                                </button>
+                            </div>
+
+                            <div className="table-wrapper">
+                                <table className="admin-table">
+                                    <thead>
+                                    <tr>
+                                        <th>Name</th>
+                                        <th>Price</th>
+                                        <th>Image</th>
+                                        <th>Availability</th>
+                                        <th>Actions</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody>
+                                    {drinks.map((item) => (
+                                        <tr key={item.id}>
+                                            {editingRowId === item.id ? (
+                                                <>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.name}
+                                                            onChange={(e) =>
+                                                                setDrinks(prev =>
+                                                                    prev.map(d =>
+                                                                        d.id === item.id ? {
+                                                                            ...d,
+                                                                            name: e.target.value
+                                                                        } : d
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.price}
+                                                            onChange={(e) =>
+                                                                setDrinks(prev =>
+                                                                    prev.map(d =>
+                                                                        d.id === item.id ? {
+                                                                            ...d,
+                                                                            price: e.target.value
+                                                                        } : d
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="file"
+                                                            accept="image/*"
+                                                            onChange={(e) => {
+                                                                const file = e.target.files[0];
+                                                                if (file) {
+                                                                    setDrinks(prev =>
+                                                                        prev.map(d =>
+                                                                            d.id === item.id
+                                                                                ? {
+                                                                                    ...d,
+                                                                                    imagePreview: URL.createObjectURL(file),
+                                                                                    imageFile: file
+                                                                                }
+                                                                                : d
+                                                                        )
+                                                                    );
+                                                                }
+                                                            }}
+                                                        />
+                                                        <img
+                                                            src={item.imagePreview || item.image}
+                                                            alt="preview"
+                                                            width="60"
+                                                            height="60"
+                                                            style={{marginTop: "5px", borderRadius: "5px"}}
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="checkbox"
+                                                            checked={item.availability || false}
+                                                            onChange={e =>
+                                                                setDrinks(prev =>
+                                                                    prev.map(d =>
+                                                                        d.id === item.id
+                                                                            ? {...d, availability: e.target.checked}
+                                                                            : d
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button className="save-btn-2"
+                                                                    onClick={() => updateDrink(item)}>Save
+                                                            </button>
+                                                            <button className="cancel-btn"
+                                                                    onClick={() => setEditingRowId(null)}>Cancel
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            ) : (
+                                                <>
+                                                    <td>{item.name}</td>
+                                                    <td>{item.price}</td>
+                                                    <td>
+                                                        <img src={item.image} alt={item.name} width="60" height="60"
+                                                             style={{borderRadius: "5px"}}/>
+                                                    </td>
+                                                    <td>{item.availability ? "✅ Yes" : "❌ No"}</td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button className="remove-btn"
+                                                                    onClick={() => deleteDrink(item.id)}>Remove
+                                                            </button>
+                                                            <button className="edit-btn"
+                                                                    onClick={() => setEditingRowId(item.id)}>Edit
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            )}
+                                        </tr>
+                                    ))}
+
+                                    {newDrink && (
+                                        <tr key="new-drink">
+                                            <td><input type="text" value={newDrink.name} onChange={e => setNewDrink({
+                                                ...newDrink,
+                                                name: e.target.value
+                                            })}/></td>
+                                            <td><input type="text" value={newDrink.price} onChange={e => setNewDrink({
+                                                ...newDrink,
+                                                price: e.target.value
+                                            })}/></td>
+                                            <td>
+                                                <input type="file" accept="image/*" onChange={e => {
+                                                    const file = e.target.files[0];
+                                                    if (file) {
+                                                        setNewDrink({
+                                                            ...newDrink,
+                                                            imagePreview: URL.createObjectURL(file),
+                                                            imageFile: file
+                                                        });
+                                                    }
+                                                }}/>
+                                                {newDrink.imagePreview &&
+                                                    <img src={newDrink.imagePreview} width="60" height="60"/>}
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="checkbox"
+                                                    checked={newDrink.availability || false}
+                                                    onChange={e => setNewDrink({
+                                                        ...newDrink,
+                                                        availability: e.target.checked
+                                                    })}
+                                                />
+                                            </td>
+                                            <td>
+                                                <button className="save-btn-2" onClick={saveNewDrink}>Save</button>
+                                                <button className="cancel-btn"
+                                                        onClick={() => setNewDrink(null)}>Cancel
+                                                </button>
+                                            </td>
+                                        </tr>
+                                    )}
+                                    </tbody>
+                                </table>
+                            </div>
+
+                            <div className="add-btn-class">
+                                {!newDrink && (
+                                    <button
+                                        className="add-btn"
+                                        onClick={() =>
+                                            setNewDrink({
+                                                id: "new",
+                                                name: "",
+                                                price: "",
+                                                availability: true,
+                                                imageFile: null,
+                                                imagePreview: null,
+                                            })
+                                        }
+                                    >
+                                        Add
+                                    </button>
+                                )}
+                            </div>
+                        </div>
+                    )}
+
+                    {selectedSection === "desserts" && (
+                        <div className="change-box">
+                            <div className="section-tabs">
+                                <button
+                                    className={selectedSection === "drinks" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("drinks")}
+                                >
+                                    Drinks
+                                </button>
+                                <h2 className="chart-titles-2">Add Desserts</h2>
+                                <button
+                                    className={selectedSection === "sauces" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("sauces")}
+                                >
+                                    Sauces
+                                </button>
+                            </div>
+
+                            <div className="table-wrapper">
+                                <table className="admin-table">
+                                    <thead>
+                                    <tr>
+                                        <th>Name</th>
+                                        <th>Price</th>
+                                        <th>Image</th>
+                                        <th>Availability</th>
+                                        <th>Actions</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody>
+                                    {desserts.map((item) => (
+                                        <tr key={item.id}>
+                                            {editingRowId === item.id ? (
+                                                <>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.name}
+                                                            onChange={(e) =>
+                                                                setDesserts(prev =>
+                                                                    prev.map(d =>
+                                                                        d.id === item.id ? {
+                                                                            ...d,
+                                                                            name: e.target.value
+                                                                        } : d
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.price}
+                                                            onChange={(e) =>
+                                                                setDesserts(prev =>
+                                                                    prev.map(d =>
+                                                                        d.id === item.id ? {
+                                                                            ...d,
+                                                                            price: e.target.value
+                                                                        } : d
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="file"
+                                                            accept="image/*"
+                                                            onChange={(e) => {
+                                                                const file = e.target.files[0];
+                                                                if (file) {
+                                                                    setDesserts(prev =>
+                                                                        prev.map(d =>
+                                                                            d.id === item.id
+                                                                                ? {
+                                                                                    ...d,
+                                                                                    imagePreview: URL.createObjectURL(file),
+                                                                                    imageFile: file
+                                                                                }
+                                                                                : d
+                                                                        )
+                                                                    );
+                                                                }
+                                                            }}
+                                                        />
+                                                        <img
+                                                            src={item.imagePreview || item.image}
+                                                            alt="preview"
+                                                            width="60"
+                                                            height="60"
+                                                            style={{marginTop: "5px", borderRadius: "5px"}}
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="checkbox"
+                                                            checked={item.availability || false}
+                                                            onChange={e =>
+                                                                setDesserts(prev =>
+                                                                    prev.map(d =>
+                                                                        d.id === item.id
+                                                                            ? {...d, availability: e.target.checked}
+                                                                            : d
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button className="save-btn-2"
+                                                                    onClick={() => updateDessert(item)}>Save
+                                                            </button>
+                                                            <button className="cancel-btn"
+                                                                    onClick={() => setEditingRowId(null)}>Cancel
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            ) : (
+                                                <>
+                                                    <td>{item.name}</td>
+                                                    <td>{item.price}</td>
+                                                    <td>
+                                                        <img
+                                                            src={item.image}
+                                                            alt={item.name}
+                                                            width="60"
+                                                            height="60"
+                                                            style={{borderRadius: "5px"}}
+                                                        />
+                                                    </td>
+                                                    <td>{item.availability ? "✅ Yes" : "❌ No"}</td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button className="remove-btn"
+                                                                    onClick={() => deleteDessert(item.id)}>Remove
+                                                            </button>
+                                                            <button className="edit-btn"
+                                                                    onClick={() => setEditingRowId(item.id)}>Edit
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            )}
+                                        </tr>
+                                    ))}
+
+                                    {newDessert && (
+                                        <tr key="new-dessert">
+                                            <td>
+                                                <input
+                                                    type="text"
+                                                    value={newDessert.name}
+                                                    onChange={e => setNewDessert({...newDessert, name: e.target.value})}
+                                                />
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="text"
+                                                    value={newDessert.price}
+                                                    onChange={e => setNewDessert({
+                                                        ...newDessert,
+                                                        price: e.target.value
+                                                    })}
+                                                />
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="file"
+                                                    accept="image/*"
+                                                    onChange={e => {
+                                                        const file = e.target.files[0];
+                                                        if (file) {
+                                                            setNewDessert({
+                                                                ...newDessert,
+                                                                imagePreview: URL.createObjectURL(file),
+                                                                imageFile: file
+                                                            });
+                                                        }
+                                                    }}
+                                                />
+                                                {newDessert.imagePreview && (
+                                                    <img src={newDessert.imagePreview} width="60" height="60"/>
+                                                )}
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="checkbox"
+                                                    checked={newDessert.availability || false}
+                                                    onChange={e => setNewDessert({
+                                                        ...newDessert,
+                                                        availability: e.target.checked
+                                                    })}
+                                                />
+                                            </td>
+                                            <td>
+                                                <button className="save-btn-2" onClick={saveNewDessert}>Save</button>
+                                                <button className="cancel-btn"
+                                                        onClick={() => setNewDessert(null)}>Cancel
+                                                </button>
+                                            </td>
+                                        </tr>
+                                    )}
+                                    </tbody>
+
+                                </table>
+                            </div>
+
+                            <div className="add-btn-class">
+                                {!newDessert && (
+                                    <button
+                                        className="add-btn"
+                                        onClick={() =>
+                                            setNewDessert({
+                                                id: "new",
+                                                name: "",
+                                                price: "",
+                                                availability: true,
+                                                imageFile: null,
+                                                imagePreview: null,
+                                            })
+                                        }
+                                    >
+                                        Add
+                                    </button>
+                                )}
+                            </div>
+                        </div>
+                    )}
+
+
+                    {selectedSection === "sauces" && (
+                        <div className="change-box">
+                            <div className="section-tabs">
+                                <button
+                                    className={selectedSection === "desserts" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("desserts")}
+                                >
+                                    Desserts
+                                </button>
+                                <h2 className="chart-titles-2">Add Sauces</h2>
+                                <button
+                                    className={selectedSection === "specialOffers" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("specialOffers")}
+                                >
+                                    Special Offers
+                                </button>
+                            </div>
+
+                            <div className="table-wrapper">
+                                <table className="admin-table">
+                                    <thead>
+                                    <tr>
+                                        <th>Name</th>
+                                        <th>Price</th>
+                                        <th>Image</th>
+                                        <th>Availability</th>
+                                        <th>Actions</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody>
+                                    {sauces.map((item) => (
+                                        <tr key={item.id}>
+                                            {editingRowId === item.id ? (
+                                                <>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.name}
+                                                            onChange={(e) =>
+                                                                setSauces((prev) =>
+                                                                    prev.map((s) =>
+                                                                        s.id === item.id ? {
+                                                                            ...s,
+                                                                            name: e.target.value
+                                                                        } : s
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.price}
+                                                            onChange={(e) =>
+                                                                setSauces((prev) =>
+                                                                    prev.map((s) =>
+                                                                        s.id === item.id ? {
+                                                                            ...s,
+                                                                            price: e.target.value
+                                                                        } : s
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="file"
+                                                            accept="image/*"
+                                                            onChange={(e) => {
+                                                                const file = e.target.files[0];
+                                                                if (file) {
+                                                                    setSauces((prev) =>
+                                                                        prev.map((s) =>
+                                                                            s.id === item.id
+                                                                                ? {
+                                                                                    ...s,
+                                                                                    imagePreview: URL.createObjectURL(file),
+                                                                                    imageFile: file,
+                                                                                }
+                                                                                : s
+                                                                        )
+                                                                    );
+                                                                }
+                                                            }}
+                                                        />
+                                                        <img
+                                                            src={item.imagePreview || item.image}
+                                                            alt="preview"
+                                                            width="60"
+                                                            height="60"
+                                                            style={{marginTop: "5px", borderRadius: "5px"}}
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="checkbox"
+                                                            checked={item.availability || false}
+                                                            onChange={(e) =>
+                                                                setSauces((prev) =>
+                                                                    prev.map((s) =>
+                                                                        s.id === item.id
+                                                                            ? {...s, availability: e.target.checked}
+                                                                            : s
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button className="save-btn-2"
+                                                                    onClick={() => updateSauce(item)}>
+                                                                Save
+                                                            </button>
+                                                            <button
+                                                                className="cancel-btn"
+                                                                onClick={() => setEditingRowId(null)}
+                                                            >
+                                                                Cancel
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            ) : (
+                                                <>
+                                                    <td>{item.name}</td>
+                                                    <td>{item.price}</td>
+                                                    <td>
+                                                        <img
+                                                            src={item.image}
+                                                            alt={item.name}
+                                                            width="60"
+                                                            height="60"
+                                                            style={{borderRadius: "5px"}}
+                                                        />
+                                                    </td>
+                                                    <td>{item.availability ? "✅ Yes" : "❌ No"}</td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button
+                                                                className="remove-btn"
+                                                                onClick={() => deleteSauce(item.id)}
+                                                            >
+                                                                Remove
+                                                            </button>
+                                                            <button
+                                                                className="edit-btn"
+                                                                onClick={() => setEditingRowId(item.id)}
+                                                            >
+                                                                Edit
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            )}
+                                        </tr>
+                                    ))}
+
+                                    {newSauce && (
+                                        <tr key="new-sause">
+                                            <td>
+                                                <input
+                                                    type="text"
+                                                    value={newSauce.name}
+                                                    onChange={(e) => setNewSauce({...newSauce, name: e.target.value})}
+                                                />
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="text"
+                                                    value={newSauce.price}
+                                                    onChange={(e) =>
+                                                        setNewSauce({...newSauce, price: e.target.value})
+                                                    }
+                                                />
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="file"
+                                                    accept="image/*"
+                                                    onChange={(e) => {
+                                                        const file = e.target.files[0];
+                                                        if (file) {
+                                                            setNewSauce({
+                                                                ...newSauce,
+                                                                imagePreview: URL.createObjectURL(file),
+                                                                imageFile: file,
+                                                            });
+                                                        }
+                                                    }}
+                                                />
+                                                {newSauce.imagePreview && (
+                                                    <img src={newSauce.imagePreview} width="60" height="60"/>
+                                                )}
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="checkbox"
+                                                    checked={newSauce.availability || false}
+                                                    onChange={(e) =>
+                                                        setNewSauce({...newSauce, availability: e.target.checked})
+                                                    }
+                                                />
+                                            </td>
+                                            <td>
+                                                <button className="save-btn-2" onClick={saveNewSauce}>
+                                                    Save
+                                                </button>
+                                                <button className="cancel-btn" onClick={() => setNewSauce(null)}>
+                                                    Cancel
+                                                </button>
+                                            </td>
+                                        </tr>
+                                    )}
+                                    </tbody>
+                                </table>
+                            </div>
+
+                            <div className="add-btn-class">
+                                {!newSauce && (
+                                    <button
+                                        className="add-btn"
+                                        onClick={() =>
+                                            setNewSauce({
+                                                id: "new",
+                                                name: "",
+                                                price: "",
+                                                availability: true,
+                                                imageFile: null,
+                                                imagePreview: null,
+                                            })
+                                        }
+                                    >
+                                        Add
+                                    </button>
+                                )}
+                            </div>
+                        </div>
+                    )}
+
+
+                    {selectedSection === "specialOffers" && (
+                        <div className="change-box">
+                            <div className="section-tabs">
+                                <button
+                                    className={selectedSection === "sauces" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("sauces")}
+                                >
+                                    Sauces
+                                </button>
+                                <h2 className="chart-titles-2">Add Special Offers</h2>
+                                <button
+                                    className={selectedSection === "salads" ? "tab active" : "tab"}
+                                    onClick={() => setSelectedSection("salads")}
+                                >
+                                    Salads
+                                </button>
+                            </div>
+
+                            <div className="table-wrapper">
+                                <table className="admin-table">
+                                    <thead>
+                                    <tr>
+                                        <th>Name</th>
+                                        <th>Price</th>
+                                        <th>Description</th>
+                                        <th>Image</th>
+                                        <th>Availability</th>
+                                        <th>Actions</th>
+                                    </tr>
+                                    </thead>
+                                    <tbody>
+                                    {specialOffers.map((item) => (
+                                        <tr key={item.id}>
+                                            {editingRowId === item.id ? (
+                                                <>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.name}
+                                                            onChange={(e) =>
+                                                                setSpecialOffers(prev =>
+                                                                    prev.map(o =>
+                                                                        o.id === item.id ? {
+                                                                            ...o,
+                                                                            name: e.target.value
+                                                                        } : o
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="number"
+                                                            step="0.01"
+                                                            value={item.price}
+                                                            onChange={(e) =>
+                                                                setSpecialOffers(prev =>
+                                                                    prev.map(o =>
+                                                                        o.id === item.id ? {
+                                                                            ...o,
+                                                                            price: e.target.value
+                                                                        } : o
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="text"
+                                                            value={item.description || ""}
+                                                            placeholder="Combo details, e.g., 2 Pizzas + 1 Drink"
+                                                            onChange={(e) =>
+                                                                setSpecialOffers(prev =>
+                                                                    prev.map(o =>
+                                                                        o.id === item.id ? {
+                                                                            ...o,
+                                                                            description: e.target.value
+                                                                        } : o
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="file"
+                                                            accept="image/*"
+                                                            onChange={(e) => {
+                                                                const file = e.target.files[0];
+                                                                if (file) {
+                                                                    setSpecialOffers(prev =>
+                                                                        prev.map(o =>
+                                                                            o.id === item.id
+                                                                                ? {
+                                                                                    ...o,
+                                                                                    imagePreview: URL.createObjectURL(file),
+                                                                                    imageFile: file
+                                                                                }
+                                                                                : o
+                                                                        )
+                                                                    );
+                                                                }
+                                                            }}
+                                                        />
+                                                        <img
+                                                            src={item.imagePreview || item.image}
+                                                            alt="preview"
+                                                            width="60"
+                                                            height="60"
+                                                            style={{marginTop: "5px", borderRadius: "5px"}}
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <input
+                                                            type="checkbox"
+                                                            checked={item.availability || false}
+                                                            onChange={(e) =>
+                                                                setSpecialOffers(prev =>
+                                                                    prev.map(o =>
+                                                                        o.id === item.id ? {
+                                                                            ...o,
+                                                                            availability: e.target.checked
+                                                                        } : o
+                                                                    )
+                                                                )
+                                                            }
+                                                        />
+                                                    </td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button className="save-btn-2"
+                                                                    onClick={() => updateSpecialOffer(item)}>Save
+                                                            </button>
+                                                            <button className="cancel-btn"
+                                                                    onClick={() => setEditingRowId(null)}>Cancel
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            ) : (
+                                                <>
+                                                    <td>{item.name}</td>
+                                                    <td>{item.price}</td>
+                                                    <td>{item.description}</td>
+                                                    <td>
+                                                        <img src={item.image} alt={item.name} width="60" height="60"
+                                                             style={{borderRadius: "5px"}}/>
+                                                    </td>
+                                                    <td>{item.availability ? "✅ Yes" : "❌ No"}</td>
+                                                    <td>
+                                                        <div className="actions">
+                                                            <button className="remove-btn"
+                                                                    onClick={() => deleteSpecialOffer(item.id)}>Remove
+                                                            </button>
+                                                            <button className="edit-btn"
+                                                                    onClick={() => setEditingRowId(item.id)}>Edit
+                                                            </button>
+                                                        </div>
+                                                    </td>
+                                                </>
+                                            )}
+                                        </tr>
+                                    ))}
+
+                                    {newSpecialOffer && (
+                                        <tr key="new-special-offer">
+                                            <td>
+                                                <input
+                                                    type="text"
+                                                    value={newSpecialOffer.name}
+                                                    onChange={(e) => setNewSpecialOffer({
+                                                        ...newSpecialOffer,
+                                                        name: e.target.value
+                                                    })}
+                                                />
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="number"
+                                                    step="0.01"
+                                                    value={newSpecialOffer.price}
+                                                    onChange={(e) => setNewSpecialOffer({
+                                                        ...newSpecialOffer,
+                                                        price: e.target.value
+                                                    })}
+                                                />
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="text"
+                                                    value={newSpecialOffer.description || ""}
+                                                    placeholder="Combo details, e.g., 2 Pizzas + 1 Drink"
+                                                    onChange={(e) => setNewSpecialOffer({
+                                                        ...newSpecialOffer,
+                                                        description: e.target.value
+                                                    })}
+                                                />
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="file"
+                                                    accept="image/*"
+                                                    onChange={(e) => {
+                                                        const file = e.target.files[0];
+                                                        if (file) {
+                                                            setNewSpecialOffer({
+                                                                ...newSpecialOffer,
+                                                                imagePreview: URL.createObjectURL(file),
+                                                                imageFile: file
+                                                            });
+                                                        }
+                                                    }}
+                                                />
+                                                {newSpecialOffer.imagePreview &&
+                                                    <img src={newSpecialOffer.imagePreview} width="60" height="60"
+                                                         style={{borderRadius: "5px"}}/>}
+                                            </td>
+                                            <td>
+                                                <input
+                                                    type="checkbox"
+                                                    checked={newSpecialOffer.availability || false}
+                                                    onChange={(e) => setNewSpecialOffer({
+                                                        ...newSpecialOffer,
+                                                        availability: e.target.checked
+                                                    })}
+                                                />
+                                            </td>
+                                            <td>
+                                                <button className="save-btn-2" onClick={saveNewSpecialOffer}>Save
+                                                </button>
+                                                <button className="cancel-btn"
+                                                        onClick={() => setNewSpecialOffer(null)}>Cancel
+                                                </button>
+                                            </td>
+                                        </tr>
+                                    )}
+                                    </tbody>
+                                </table>
+                            </div>
+
+                            <div className="add-btn-class">
+                                {!newSpecialOffer && (
+                                    <button className="add-btn" onClick={() =>
+                                        setNewSpecialOffer({
+                                            id: "new",
+                                            name: "",
+                                            price: "",
+                                            description: "",
+                                            availability: true,
+                                            imageFile: null,
+                                            imagePreview: null,
+                                        })
+                                    }>
+                                        Add
+                                    </button>
+                                )}
+                            </div>
+                        </div>
+                    )}
+
+
+                </div>
+            )}
+
+            {selectedIngredient && (
+                <div className="modal-overlay">
+                    <div className="modal">
+                        <h2>Delete Ingredient</h2>
+                        <p>Are you sure you want to delete {selectedIngredient.name}?</p>
+                        <div className="gap-it">
+                            <button
+                                className="remove-btn"
+                                onClick={() => {
+                                    deleteIngredient(selectedIngredient.id);
+                                    setSelectedIngredient(null);
+                                }}
+                            >
+                                Yes, delete
+                            </button>
+                            <button
+                                className="edit-btn"
+                                onClick={() => setSelectedIngredient(null)}
+                            >
+                                Cancel
+                            </button>
+                        </div>
+                    </div>
+                </div>
+            )}
+
+            {selected === 3 && (
+                <div className="change-products-container fade-in">
+                    <div className="change-box">
+                        <h2 className="chart-titles">Table of Promo Codes</h2>
+                        <div className="table-wrapper">
+                            <table className="admin-table admin-table-2">
+                                <thead>
+                                <tr>
+                                    <th>Name</th>
+                                    <th>Discount Type</th>
+                                    <th>Discount Value</th>
+                                    <th>Usage Limit</th>
+                                    <th>Start Date</th>
+                                    <th>End Date</th>
+                                    <th>Active Toggle</th>
+                                    <th>Actions</th>
+                                </tr>
+                                </thead>
+
+                                <tbody>
+                                {promos.map((p) => (
+                                    <tr key={`promo-${p.id}`}>
+                                        <td>{p.name}</td>
+
+                                        <td className="toggle-cell-disc">
+                                            {editingPromoId === p.id ? (
+                                                <>
+                                                    <button
+                                                        className={`toggle-btn ${p.discountType === "%" ? "active" : ""}`}
+                                                        onClick={() =>
+                                                            setPromos(prev =>
+                                                                prev.map(x =>
+                                                                    x.id === p.id ? {...x, discountType: "%"} : x
+                                                                )
+                                                            )
+                                                        }
+                                                    >
+                                                        %
+                                                    </button>
+                                                    <span className="separator2">/</span>
+                                                    <button
+                                                        className={`toggle-btn ${p.discountType === "€" ? "active" : ""}`}
+                                                        onClick={() =>
+                                                            setPromos(prev =>
+                                                                prev.map(x =>
+                                                                    x.id === p.id ? {...x, discountType: "€"} : x
+                                                                )
+                                                            )
+                                                        }
+                                                    >
+                                                        €
+                                                    </button>
+                                                </>
+                                            ) : (
+                                                <>{p.discountType}</>
+                                            )}
+                                        </td>
+
+                                        <td>
+                                            {editingPromoId === p.id ? (
+                                                <input
+                                                    type="number"
+                                                    value={p.discountValue}
+                                                    onChange={(e) =>
+                                                        setPromos(prev =>
+                                                            prev.map(x =>
+                                                                x.id === p.id ? {
+                                                                    ...x,
+                                                                    discountValue: e.target.value
+                                                                } : x
+                                                            )
+                                                        )
+                                                    }
+                                                    className="promo-input"
+                                                />
+                                            ) : (
+                                                <>{p.discountValue}</>
+                                            )}
+                                        </td>
+
+                                        <td>
+                                            {editingPromoId === p.id ? (
+                                                <div className="toggle-cell-usage">
+                                                    <div className="tooltip-wrapper">
+                                                        <input
+                                                            type="number"
+                                                            value={p.noLimit ? "" : p.usageLimit}
+                                                            onChange={(e) =>
+                                                                setPromos(prev =>
+                                                                    prev.map(x =>
+                                                                        x.id === p.id
+                                                                            ? {
+                                                                                ...x,
+                                                                                usageLimit: e.target.value,
+                                                                                noLimit: false
+                                                                            }
+                                                                            : x
+                                                                    )
+                                                                )
+                                                            }
+                                                            disabled={p.noLimit}
+                                                            placeholder="Enter limit"
+                                                            className="promo-input usage"
+                                                        />
+                                                        {p.noLimit && (
+                                                            <span className="tooltip-text">
+            Deselect "No limit" to enter a value
+          </span>
+                                                        )}
+                                                    </div>
+                                                    <span className="separator">/</span>
+                                                    <button
+                                                        type="button"
+                                                        className={`toggle-btn ${p.noLimit ? "active" : ""}`}
+                                                        onClick={() =>
+                                                            setPromos(prev =>
+                                                                prev.map(x =>
+                                                                    x.id === p.id
+                                                                        ? {...x, noLimit: !x.noLimit, usageLimit: ""}
+                                                                        : x
+                                                                )
+                                                            )
+                                                        }
+                                                    >
+                                                        No limit
+                                                    </button>
+                                                </div>
+                                            ) : (
+                                                <>{p.noLimit ? "♾️ No limit" : p.usageLimit}</>
+                                            )}
+                                        </td>
+
+                                        <td>
+                                            {editingPromoId === p.id ? (
+                                                <input
+                                                    type="date"
+                                                    value={p.startDate}
+                                                    onChange={(e) =>
+                                                        setPromos(prev =>
+                                                            prev.map(x =>
+                                                                x.id === p.id ? {...x, startDate: e.target.value} : x
+                                                            )
+                                                        )
+                                                    }
+                                                />
+                                            ) : (
+                                                <>{p.startDate || "-"}</>
+                                            )}
+                                        </td>
+
+                                        <td>
+                                            {editingPromoId === p.id ? (
+                                                <input
+                                                    type="date"
+                                                    value={p.endDate}
+                                                    onChange={(e) =>
+                                                        setPromos(prev =>
+                                                            prev.map(x =>
+                                                                x.id === p.id ? {...x, endDate: e.target.value} : x
+                                                            )
+                                                        )
+                                                    }
+                                                />
+                                            ) : (
+                                                <>{p.endDate || "-"}</>
+                                            )}
+                                        </td>
+
+                                        <td>
+                                            {editingPromoId === p.id ? (
+                                                <label className="switch">
+                                                    <input
+                                                        type="checkbox"
+                                                        checked={p.active}
+                                                        onChange={() =>
+                                                            setPromos(prev =>
+                                                                prev.map(x =>
+                                                                    x.id === p.id ? {...x, active: !x.active} : x
+                                                                )
+                                                            )
+                                                        }
+                                                    />
+                                                    <span className="slider"/>
+                                                </label>
+                                            ) : (
+                                                <>{p.active ? "✅ Active" : "❌ Inactive"}</>
+                                            )}
+                                        </td>
+
+                                        <td>
+                                            <div className="actions">
+                                                {editingPromoId === p.id ? (
+                                                    <>
+                                                        <button
+                                                            className="save-btn-2"
+                                                            onClick={() => updatePromo(p.id, p)}
+                                                        >
+                                                            Save
+                                                        </button>
+                                                        <button
+                                                            className="cancel-btn"
+                                                            onClick={() => setEditingPromoId(null)}
+                                                        >
+                                                            Cancel
+                                                        </button>
+                                                    </>
+                                                ) : (
+                                                    <>
+                                                        <button
+                                                            className="remove-btn"
+                                                            onClick={() => setSelectedPromo(p)}
+                                                        >
+                                                            Remove
+                                                        </button>
+                                                        <button
+                                                            className="edit-btn"
+                                                            onClick={() => setEditingPromoId(p.id)}
+                                                        >
+                                                            Edit
+                                                        </button>
+                                                    </>
+                                                )}
+                                            </div>
+                                        </td>
+                                    </tr>
+                                ))}
+
+                                {newPromo && (
+                                    <tr key="new-promo">
+                                        <td>
+                                            <input
+                                                type="text"
+                                                value={newPromo.name}
+                                                onChange={e => setNewPromo({...newPromo, name: e.target.value})}
+                                                className="promo-input"
+                                            />
+                                        </td>
+
+                                        <td className="toggle-cell-disc">
+                                            <button
+                                                className={`toggle-btn ${newPromo.discountType === "%" ? "active" : ""}`}
+                                                onClick={() => setNewPromo({...newPromo, discountType: "%"})}
+                                            >
+                                                %
+                                            </button>
+                                            <span className="separator2">/</span>
+                                            <button
+                                                className={`toggle-btn ${newPromo.discountType === "€" ? "active" : ""}`}
+                                                onClick={() => setNewPromo({...newPromo, discountType: "€"})}
+                                            >
+                                                €
+                                            </button>
+                                        </td>
+
+                                        <td>
+                                            <input
+                                                type="number"
+                                                value={newPromo.discountValue}
+                                                onChange={e => setNewPromo({
+                                                    ...newPromo,
+                                                    discountValue: e.target.value
+                                                })}
+                                                className="promo-input"
+                                            />
+                                        </td>
+
+                                        <td>
+                                            <div className="toggle-cell-usage">
+                                                <div className="tooltip-wrapper">
+                                                    <input
+                                                        type="number"
+                                                        value={newPromo.noLimit ? "" : newPromo.usageLimit}
+                                                        onChange={e =>
+                                                            setNewPromo({
+                                                                ...newPromo,
+                                                                usageLimit: e.target.value,
+                                                                noLimit: false
+                                                            })
+                                                        }
+                                                        disabled={newPromo.noLimit}
+                                                        placeholder="Enter limit"
+                                                        className="promo-input usage"
+                                                    />
+                                                    {newPromo.noLimit && (
+                                                        <span className="tooltip-text">
+                            Deselect "No limit" to enter a value
+                        </span>
+                                                    )}
+                                                </div>
+                                                <span className="separator">/</span>
+                                                <button
+                                                    type="button"
+                                                    className={`toggle-btn ${newPromo.noLimit ? "active" : ""}`}
+                                                    onClick={() =>
+                                                        setNewPromo({
+                                                            ...newPromo,
+                                                            noLimit: !newPromo.noLimit,
+                                                            usageLimit: ""
+                                                        })
+                                                    }
+                                                >
+                                                    No limit
+                                                </button>
+                                            </div>
+                                        </td>
+
+                                        <td>
+                                            <input
+                                                type="date"
+                                                value={newPromo.startDate}
+                                                onChange={e => setNewPromo({...newPromo, startDate: e.target.value})}
+                                            />
+                                        </td>
+
+                                        <td>
+                                            <input
+                                                type="date"
+                                                value={newPromo.endDate}
+                                                onChange={e => setNewPromo({...newPromo, endDate: e.target.value})}
+                                            />
+                                        </td>
+
+                                        <td>
+                                            <label className="switch">
+                                                <input
+                                                    type="checkbox"
+                                                    checked={newPromo.active}
+                                                    onChange={() => setNewPromo({
+                                                        ...newPromo,
+                                                        active: !newPromo.active
+                                                    })}
+                                                />
+                                                <span className="slider"/>
+                                            </label>
+                                        </td>
+
+                                        <td>
+                                            <div className="actions">
+                                                <button className="save-btn-2" onClick={saveNewPromo}>Save</button>
+                                                <button className="cancel-btn" onClick={() => setNewPromo(null)}>Cancel
+                                                </button>
+                                            </div>
+                                        </td>
+                                    </tr>
+                                )}
+
+
+                                </tbody>
+
+
+                            </table>
+                        </div>
+                        <div className="add-btn-class">
+                            <button
+                                className="add-btn"
+                                disabled={!!newPromo}
+                                onClick={() => setNewPromo({...emptyPromo})}
+                            >
+                                Add
+                            </button>
+
+                        </div>
+
+
+                    </div>
+                </div>
+            )}
+
+            {selectedPromo && (
+                <div className="modal-overlay">
+                    <div className="modal">
+                        <h2>Delete Promo</h2>
+                        <p>Are you sure you want to delete {selectedPromo.name}?</p>
+                        <div className="gap-it">
+                            <button
+                                className="remove-btn"
+                                onClick={() => {
+                                    deletePromo(selectedPromo.id);
+                                    setSelectedPromo(null);
+                                }}
+
+                            >
+                                Yes, delete
+                            </button>
+                            <button
+                                className="edit-btn"
+                                onClick={() => setSelectedPromo(null)}
+                            >
+                                Cancel
+                            </button>
+                        </div>
+                    </div>
+                </div>
+            )
+            }
+
+
+        </div>
+    )
+}
Index: Frontend/src/App.js
===================================================================
--- Frontend/src/App.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/App.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -9,4 +9,8 @@
 import {Navigate} from "react-router-dom";
 import {useEffect} from "react";
+import AboutUsPage from './AboutUsPage';
+import CheckOut from './CheckOut';
+import AdminPanel from "./AdminPanel";
+import EmployeePanel from "./EmployeePanel";
 import axios from 'axios';
 
@@ -76,4 +80,13 @@
     }, [loggedUser]);
 
+    const [cartItems, setCartItems] = useState(() => {
+        const saved = localStorage.getItem("cart");
+        return saved ? JSON.parse(saved) : [];
+    });
+
+    useEffect(() => {
+        localStorage.setItem("cart", JSON.stringify(cartItems));
+    }, [cartItems]);
+
     return (
         <BrowserRouter>
@@ -81,5 +94,20 @@
                 <Route path="/" element={<HomePage loggedUser={loggedUser} logout={logout}/>}/>
                 <Route path="/login" element={<LoginPage setLoggedUser={setLoggedUser} logout={logout}/>}/>
-                <Route path="/signin" element={<SigninPage setLoggedUser={setLoggedUser} logout={logout}/>}/>
+                <Route path="/signin"
+                       element={<SigninPage loggedUser={loggedUser} setLoggedUser={setLoggedUser} logout={logout}/>}/>
+                <Route path="/about_us"
+                       element={<AboutUsPage loggedUser={loggedUser} setLoggedUser={setLoggedUser} logout={logout}/>}/>
+
+                <Route path="/admin_panel" element={loggedUser?.role === "administrator" ?
+                    <AdminPanel loggedUser={loggedUser} logout={logout}/>
+                    : <Navigate to="/"/>
+                }/>
+
+                <Route path="/employee_panel" element={loggedUser?.role === "employee" ?
+                    <EmployeePanel loggedUser={loggedUser} logout={logout}/>
+                    : <Navigate to="/"/>
+                }/>
+
+
                 <Route
                     path="/profile"
@@ -90,8 +118,30 @@
                     }
                 />
+
+                <Route
+                    path="/checkout"
+                    element={
+                        <ProtectedRoute loggedUser={loggedUser}>
+                            <CheckOut
+                                loggedUser={loggedUser}
+                                setLoggedUser={setLoggedUser}
+                                logout={logout}
+                                cartItems={cartItems}
+                                setCartItems={setCartItems}
+                            />
+                        </ProtectedRoute>
+                    }
+                />
+
                 <Route
                     path="/menu"
                     element={
-                        <MenuPage loggedUser={loggedUser} setLoggedUser={setLoggedUser} logout={logout}/>
+                        <MenuPage
+                            loggedUser={loggedUser}
+                            setLoggedUser={setLoggedUser}
+                            logout={logout}
+                            cartItems={cartItems}
+                            setCartItems={setCartItems}
+                        />
                     }
                 />
Index: Frontend/src/CheckOut.js
===================================================================
--- Frontend/src/CheckOut.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ Frontend/src/CheckOut.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,720 @@
+import React, {useState, useEffect} from "react";
+import "./Checkout.css";
+import PACrustLogo from "./images/pacrustlogo.png"
+import axios from "axios";
+import {useNavigate} from "react-router-dom";
+import {useLocation} from "react-router-dom";
+import reorderLogo from "./images/reorder.png";
+
+
+export default function CheckOut({loggedUser, setLoggedUser, logout}) {
+    const navigate = useNavigate();
+
+
+    const handleCheckout = async () => {
+        if (cartItems.length === 0) {
+            alert("Your cart is empty!");
+            return;
+        }
+        const orderData = {
+            table_name: "Take Away",
+            order_type: "Take Away",
+            items: cartItems.map(item => ({
+                id: Date.now() + Math.floor(Math.random() * 1000),
+                name: item.name,
+                size: item.size || "medium",
+                price: item.totalPrice ?? item.price ?? 0,
+                comment: "",
+                category: item.category || "Others",
+                quantity: item.quantity,
+                ingredients: item.baseIngredients || [],
+            })),
+            subtotal: subtotal.toFixed(2),
+            comment: shippingInfo.comment || "",
+            employee_name: loggedUser?.username || "Online Customer",
+        };
+        try {
+            const res = await axios.post("http://127.0.0.1:8000/api/orders", orderData);
+            console.log("Take Away order saved:", res.data);
+
+            setCartItems([]);
+            localStorage.removeItem("cartItems");
+            alert("Order sent! Thank you for ordering!");
+            navigate("/");
+        } catch (err) {
+            alert("Failed to send order. Please try again.");
+        }
+    };
+
+
+    const location = useLocation();
+    const [cartItems, setCartItems] = useState(location.state?.cartItems || []);
+
+    const handleIncrease = (index) => {
+        setCartItems(prev =>
+            prev.map((item, i) =>
+                i === index ? {...item, quantity: item.quantity + 1} : item
+            )
+        );
+    };
+
+    const handleDecrease = (index) => {
+        setCartItems(prev =>
+            prev.map((item, i) =>
+                i === index && item.quantity > 1
+                    ? {...item, quantity: item.quantity - 1}
+                    : item
+            )
+        );
+    };
+
+    const subtotal = cartItems.reduce((sum, item) => {
+        const price = item.totalPrice ?? item.price ?? 0;
+        return sum + price * item.quantity;
+    }, 0);
+
+    const [email, setEmail] = useState(loggedUser.email);
+    const [name, setName] = useState(loggedUser.username);
+    const [username, setUsername] = useState(loggedUser.username);
+    const [address, setAddress] = useState(loggedUser.address || "");
+    const [phone, setPhone] = useState(loggedUser.phone || "");
+    const [city, setCity] = useState(loggedUser.city || "");
+
+    const [step, setStep] = useState(0);
+
+    const steps = ["Shopping bag", "Shipping", "Payment", "Checkout"];
+
+    const handleBack = () => {
+        if (step > 0) setStep(step - 1);
+    };
+
+    const handleContinue = () => {
+        if (step === 2 && payment_selected === "Card") {
+            const nameParts = paymentInfo.cardName.trim().split(" ");
+            if (nameParts.length < 2) {
+                alert("Please enter full name (first and last) from the card.");
+                return;
+            }
+            if (!/^\d{14,16}$/.test(paymentInfo.cardNumber.replace(/\s+/g, ""))) {
+                alert("Card number must be 14 to 16 digits.");
+                return;
+            }
+            if (!paymentInfo.expMonth || !paymentInfo.expYear) {
+                alert("Please select expiration month and year.");
+                return;
+            }
+            if (!/^\d{3}$/.test(paymentInfo.cvv)) {
+                alert("CVV must be 3 digits.");
+                return;
+            }
+        }
+        if (step === 1) {
+            if (selected === "old") {
+                setShippingInfo({
+                    name: loggedUser.username,
+                    email: loggedUser.email,
+                    phone: loggedUser.phone,
+                    address: loggedUser.address,
+                    city: loggedUser.city,
+                    comment: shippingInfo.comment
+                });
+            }
+        }
+        if (step < steps.length - 1) setStep(step + 1);
+    };
+
+    const [selected, setSelected] = useState(null);
+
+    const [payment_selected, setpayment_selected] = useState("");
+
+    const handleSelect = (method) => {
+        setpayment_selected(method);
+        setPaymentInfo((prev) => ({...prev, method}));
+    };
+
+    const [shippingInfo, setShippingInfo] = useState({
+        name: loggedUser.username || "",
+        email: loggedUser.email || "",
+        phone: loggedUser.phone || "",
+        address: loggedUser.address || "",
+        city: loggedUser.city || "",
+        comment: ""
+    });
+
+    const [paymentInfo, setPaymentInfo] = useState({
+        method: "",
+        cardName: "",
+        cardNumber: "",
+        expMonth: "",
+        expYear: "",
+        cvv: ""
+    });
+
+    const [promoCode, setPromoCode] = useState("");
+    const [discount, setDiscount] = useState(0);
+    const [tip, setTip] = useState(0);
+
+    const taxes = subtotal * 0.05;
+    const shippingCost = 3.0;
+
+    const totalBeforeDiscount = subtotal + taxes + shippingCost + Number(tip);
+    const total = totalBeforeDiscount - discount;
+
+    const handleApplyPromo = () => {
+        if (promoCode.toLowerCase() === "save10") {
+            setDiscount(10);
+        } else {
+            setDiscount(0);
+            alert("Invalid promo code");
+        }
+    };
+
+    const [pizzas, setPizzas] = useState([]);
+
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/pizzas/")
+            .then(res => res.json())
+            .then(data => {
+                setPizzas(data);
+            })
+            .catch(err => console.error("Error fetching pizzas:", err));
+    }, []);
+
+    useEffect(() => {
+        if (pizzas.length === 0 || cartItems.length === 0) return;
+
+        console.log("🔄 Updating cart pizza images...");
+
+        const updatedCart = cartItems.map(item => {
+            if (item.category === "pizza") {
+                const matchedPizza = pizzas.find(
+                    p => p.name.trim().toLowerCase() === item.name.trim().toLowerCase()
+                );
+
+                if (matchedPizza && matchedPizza.image) {
+                    const fullImage = matchedPizza.image.startsWith("http")
+                        ? matchedPizza.image
+                        : `http://127.0.0.1:8000${matchedPizza.image}`;
+                    console.log(`✅ Found image for ${item.name}:`, fullImage);
+
+                    return {...item, image: fullImage};
+                }
+            }
+            return item;
+        });
+
+        setCartItems(updatedCart);
+    }, [pizzas]);
+
+
+    return (
+        <div className="background-checkout">
+            <div className="logodiv-checkout">
+                <img className="logo" src={PACrustLogo} alt={PACrustLogo} onClick={() => navigate("/")}/>
+            </div>
+
+            <div className="progress-container">
+                <div className="steps">
+                    {steps.map((s, index) => (
+                        <span
+                            key={index}
+                            className={`step-label ${step === index ? "active" : ""}`}
+                        >
+                            {s}
+                        </span>
+                    ))}
+                </div>
+                <div className="progress-bar">
+                    <div
+                        className="progress-fill"
+                        style={{width: `${(step + 1) / steps.length * 100}%`}}
+                    />
+                </div>
+            </div>
+
+            {step === 0 && (
+                <div className="red-back shopping-bag">
+                    <h2 className="shipping-title">Bag Overview</h2>
+
+                    <div className="scroller">
+                        {cartItems.map((item, index) => (
+                            <div key={index} className="order-item">
+                                <img
+                                    src={item.image || reorderLogo}
+                                    alt={item.name}
+                                    className="pizza-img"
+                                />
+
+
+                                <div className="order-details">
+                                    <p className="order-extra">name</p>
+                                    <p className="order-name">
+                                        {item.name}
+                                        {item.category === "pizza" && item.size ? ` (${item.size})` : ""}
+                                    </p>
+
+                                    {/* Show backend ingredients */}
+                                    {item.baseIngredients && item.baseIngredients.length > 0 && (
+                                        <p className="order-extra">
+                                            Ingredients: {item.baseIngredients.join(", ")}
+                                        </p>
+                                    )}
+
+                                    {/* Show extras (hardcoded toppings) */}
+                                    {item.extras && item.extras.length > 0 && (
+                                        <p className="order-extra">
+                                            Extras: {item.extras.join(", ")}
+                                        </p>
+                                    )}
+                                </div>
+
+                                <div className="order-price">
+                                    <p className="order-extra">price</p>
+                                    <span className="order-name">
+{((item.totalPrice ?? item.price ?? 0) * item.quantity).toFixed(2)} €
+  </span>
+                                </div>
+                                <div className="order-quantity">
+                                    <p className="order-extra">quantity</p>
+                                    <div className="order-quantity-2">
+                                        <button onClick={() => handleDecrease(index)}>-</button>
+                                        <span>{item.quantity}</span>
+                                        <button onClick={() => handleIncrease(index)}>+</button>
+                                    </div>
+
+                                </div>
+                            </div>
+                        ))}
+                    </div>
+
+                    <div className="clear-cart-div">{cartItems.length > 0 && (
+                        <button
+                            className="clear-cart-btn"
+                            onClick={() => {
+                                setCartItems([]);
+                                localStorage.removeItem("cartItems");
+                            }}
+                        >
+                            Clear Cart
+                        </button>
+                    )}</div>
+
+                    <div className="order-buttons">
+                        <button className="back-btn" onClick={() => navigate(-1)}>
+                            Back
+                        </button>
+                        <button className="continue-btn" onClick={handleContinue}>
+                            Continue
+                        </button>
+                    </div>
+                </div>
+            )}
+
+
+            {step === 1 && (
+                <div className="red-back shipping">
+                    <h2 className="shipping-title">Click to select Information</h2>
+
+                    <div className="info-container">
+                        <div
+                            className={`info-box old-info ${selected === "old" ? "selected" : "unselected"}`}
+                            onClick={() => setSelected("old")}
+                        >
+                            <h3 className="info-heading">Old information</h3>
+                            <div className="info-field">
+                                <label>Name</label>
+                                <input type="text" value={username} disabled/>
+                            </div>
+                            <div className="info-field">
+                                <label>Email</label>
+                                <input type="text" value={email} disabled/>
+                            </div>
+                            <div className="info-field">
+                                <label>Phone</label>
+                                <input type="text" value={phone} disabled/>
+                            </div>
+                            <div className="info-field">
+                                <label>Address</label>
+                                <input type="text" value={address} disabled/>
+                            </div>
+                            <div className="info-field">
+                                <label>City</label>
+                                <input type="text" value={city} disabled/>
+                            </div>
+                        </div>
+
+                        <div
+                            className={`info-box new-info ${selected === "new" ? "selected" : "unselected"}`}
+                            onClick={() => setSelected("new")}
+                        >
+                            <h3 className="info-heading">New information</h3>
+                            <div className="info-field">
+                                <label>Name</label>
+                                <input type="text" placeholder="Enter new name"
+                                       onChange={(e) => setShippingInfo({...shippingInfo, name: e.target.value})}
+                                />
+
+                            </div>
+                            <div className="info-field">
+                                <label>Email</label>
+                                <input type="email" placeholder="Enter new email"
+                                       onChange={(e) => setShippingInfo({...shippingInfo, email: e.target.value})}
+                                />
+
+                            </div>
+                            <div className="info-field">
+                                <label>Phone</label>
+                                <input type="text" placeholder="Enter new phone"
+                                       onChange={(e) => setShippingInfo({...shippingInfo, phone: e.target.value})}
+                                />
+
+                            </div>
+                            <div className="info-field">
+                                <label>Address</label>
+                                <input type="text" placeholder="Enter new address"
+                                       onChange={(e) => setShippingInfo({...shippingInfo, address: e.target.value})}
+                                />
+
+                            </div>
+                            <div className="info-field">
+                                <label>City</label>
+                                <input type="text" placeholder="Enter new city"
+                                       onChange={(e) => setShippingInfo({...shippingInfo, city: e.target.value})}
+                                />
+                            </div>
+                        </div>
+                    </div>
+
+                    <div className="comment-box-delivery">
+                        <p className="comment-label">Enter a comment for the delivery, if necessary</p>
+                        <input
+                            type="text"
+                            className="comment-input"
+                            placeholder="Write a comment here..."
+                            value={shippingInfo.comment}
+                            onChange={(e) => setShippingInfo({...shippingInfo, comment: e.target.value})}
+                        />
+                    </div>
+
+                    <div className="order-buttons">
+                        <button className="back-btn" onClick={handleBack}>
+                            Back
+                        </button>
+                        <button className="continue-btn" onClick={handleContinue}>
+                            Continue
+                        </button>
+                    </div>
+                </div>
+            )}
+
+            {step === 2 && (
+                <div className="red-back shipping">
+                    <h2 className="shipping-title">Choose Payment Type</h2>
+
+                    <div className="options">
+                        <div className="first-row">
+                            <button
+                                className={`payment-button ${payment_selected === "Card" ? "selected" : ""}`}
+                                onClick={() => handleSelect("Card")}
+                            >
+                                Credit/Debit Card (Visa, MasterCard, Amex)
+                            </button>
+                            <button
+                                className={`payment-button ${payment_selected === "Paypal" ? "selected" : ""}`}
+                                onClick={() => handleSelect("Paypal")}
+                            >
+                                PayPal
+                            </button>
+                        </div>
+                        <div className="second-row">
+                            <button
+                                className={`payment-button ${payment_selected === "Cash" ? "selected" : ""}`}
+                                onClick={() => handleSelect("Cash")}
+                            >
+                                Cash in Restaurant
+                            </button>
+                            <button
+                                className={`payment-button ${payment_selected === "Apple" ? "selected" : ""}`}
+                                onClick={() => handleSelect("Apple")}
+                            >
+                                Apple Pay / Google Pay
+                            </button>
+                        </div>
+                    </div>
+
+                    <div className="center-it">
+                        <p className="comment-label-it">
+                            If you selected card, please put your information
+                        </p>
+                    </div>
+
+
+                    <div className="card-info">
+                        <div className="card-row">
+                            <div className="card-field">
+                                <label>Cardholder’s name</label>
+                                <input
+                                    type="text"
+                                    placeholder="Name on card"
+                                    value={paymentInfo.cardName}
+                                    onChange={(e) =>
+                                        setPaymentInfo({...paymentInfo, cardName: e.target.value})
+                                    }
+                                /></div>
+                            <div className="card-field">
+                                <label>Card number</label>
+                                <input
+                                    type="text"
+                                    placeholder="1234 5678 9012 3456"
+                                    value={paymentInfo.cardNumber}
+                                    onChange={(e) =>
+                                        setPaymentInfo({...paymentInfo, cardNumber: e.target.value})
+                                    }
+                                /></div>
+                        </div>
+
+                        <div className="card-row">
+                            <div className="card-field small">
+                                <label>Valid thru</label>
+                                <div className="valid-thru-selects">
+                                    <select className="valid-select" value={paymentInfo.expMonth}
+                                            onChange={(e) =>
+                                                setPaymentInfo({...paymentInfo, expMonth: e.target.value})
+                                            }>
+                                        <option value="" disabled>MM</option>
+                                        {Array.from({length: 12}, (_, i) => {
+                                            const month = (i + 1).toString().padStart(2, "0");
+                                            return <option key={month} value={month}>{month}</option>;
+                                        })}
+                                    </select>
+                                    <span>/</span>
+                                    <select className="valid-select" value={paymentInfo.expYear}
+                                            onChange={(e) =>
+                                                setPaymentInfo({...paymentInfo, expYear: e.target.value})
+                                            }>
+                                        <option value="" disabled>YY</option>
+                                        {Array.from({length: 10}, (_, i) => {
+                                            const year = new Date().getFullYear() + i;
+                                            return <option key={year} value={year}>{year.toString().slice(-2)}</option>;
+                                        })}
+                                    </select>
+                                </div>
+                            </div>
+                            <div className="card-field small">
+                                <label>CVV / CVC</label>
+                                <input type="password" placeholder="***" maxLength={3} value={paymentInfo.cvv}
+                                       onChange={(e) =>
+                                           setPaymentInfo({...paymentInfo, cvv: e.target.value})
+                                       }/>
+                            </div>
+                            <div className="card-field small">
+                                <small className="comment-label">
+                                    Your CVV/CVC is a security feature. Do not show it to anyone, not even staff.
+                                </small>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div className="order-buttons-payment">
+                        <button className="back-btn" onClick={handleBack}>
+                            Back
+                        </button>
+                        <button className="continue-btn" onClick={handleContinue}>
+                            Continue
+                        </button>
+                    </div>
+                </div>
+            )}
+
+
+            {step === 3 && (
+                <div className="red-back checkout">
+                    <h2 className="shipping-title">Confirm Your Order</h2>
+
+                    <div className="for-flex">
+                        <div className="orders-last">
+                            <h2 className="checkout-line">Shopping Bag</h2>
+
+                            <div className="scroller2">
+                                {cartItems.map((item, index) => (
+                                    <div key={index} className="order-item-last">
+                                        <img
+                                            src={item.image || reorderLogo}
+                                            alt={item.name}
+                                            className="pizza-img"
+                                        />
+
+
+                                        <div className="order-details">
+                                            <p className="order-extra">name</p>
+                                            <p className="order-name">
+                                                {item.name}
+                                                {item.category === "pizza" && item.size ? ` (${item.size})` : ""}
+                                            </p>
+
+                                            {/* Show backend ingredients */}
+                                            {item.baseIngredients && item.baseIngredients.length > 0 && (
+                                                <p className="order-extra">
+                                                    Ingredients: {item.baseIngredients.join(", ")}
+                                                </p>
+                                            )}
+
+                                            {/* Show extras */}
+                                            {item.extras && item.extras.length > 0 && (
+                                                <p className="order-extra">
+                                                    Extras: {item.extras.join(", ")}
+                                                </p>
+                                            )}
+                                        </div>
+
+                                        <div className="order-price">
+                                            <p className="order-extra">price</p>
+                                            <span className="order-name">
+    {(item.totalPrice * item.quantity).toFixed(2)} €
+  </span>
+                                        </div>
+                                        <div className="order-quantity">
+                                            <p className="order-extra">quantity</p>
+                                            <div className="order-quantity-2">
+                                                <button onClick={() => handleDecrease(index)}>-</button>
+                                                <span>{item.quantity}</span>
+                                                <button onClick={() => handleIncrease(index)}>+</button>
+                                            </div>
+
+                                        </div>
+                                    </div>
+                                ))}
+
+                            </div>
+                        </div>
+
+                        <div className="two-flex">
+                            <div className="orders-last-shipping">
+                                <h2 className="checkout-line">Shipping</h2>
+                                <div>
+                                    <div className={`new-info-last`}>
+                                        <div className="info-field-last">
+                                            <label>Name</label>
+                                            <input type="text" value={shippingInfo.name} disabled/>
+                                        </div>
+                                        <div className="info-field-last">
+                                            <label>Email</label>
+                                            <input type="email" value={shippingInfo.email} disabled/>
+                                        </div>
+                                        <div className="info-field-last">
+                                            <label>Phone</label>
+                                            <input type="text" value={shippingInfo.phone} disabled/>
+                                        </div>
+                                        <div className="info-field-last">
+                                            <label>Address</label>
+                                            <input type="text" value={shippingInfo.address} disabled/>
+                                        </div>
+                                        <div className="info-field-last">
+                                            <label>City</label>
+                                            <input type="text" value={shippingInfo.city} disabled/>
+                                        </div>
+                                        <div className="info-field-last">
+                                            <label>Comment</label>
+                                            <input type="text" value={shippingInfo.comment} disabled/>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div className="orders-last-shipping">
+                                <h2 className="checkout-line">Payment</h2>
+                                <div>
+                                    <div className={`new-info-last`}>
+                                        <div className="info-field-last">
+                                            <label>Type</label>
+                                            <input type="text" value={paymentInfo.method} disabled/>
+                                        </div>
+                                        <div className="info-field-last">
+                                            <label>Name</label>
+                                            <input type="text" value={paymentInfo.cardName} disabled/>
+                                        </div>
+                                        <div className="info-field-last">
+                                            <label>Card Number</label>
+                                            <input type="text"
+                                                   value={paymentInfo.cardNumber.replace(/\d(?=\d{4})/g, "*")} // mask
+                                                   disabled/>
+                                        </div>
+                                        <div className="info-field-last">
+                                            <label>Valid thru</label>
+                                            <input type="text" value={`${paymentInfo.expMonth}/${paymentInfo.expYear}`}
+                                                   disabled/>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div className="orders-last-summary">
+                            <h2 className="checkout-line">Summary</h2>
+                            <div>
+                                <div className={`new-info-last`}>
+                                    <div className="info-field-last">
+                                        <label>Subtotal</label>
+                                        <span>{subtotal.toFixed(2)}€</span>
+                                    </div>
+                                    <div className="info-field-last">
+                                        <label>Taxes</label>
+                                        <span>{taxes.toFixed(2)}€</span>
+                                    </div>
+                                    <div className="info-field-last">
+                                        <label>Shipping</label>
+                                        <span>{shippingCost.toFixed(2)}€</span>
+                                    </div>
+                                    <div className="info-field-last-promo promo-container">
+                                        <label>Promo code</label>
+                                        <div className="promo-input-wrapper">
+                                            <input
+                                                type="text"
+                                                value={promoCode}
+                                                onChange={(e) => setPromoCode(e.target.value)}
+                                                placeholder="Promo"
+                                            />
+                                            <button type="button" className="apply-btn" onClick={handleApplyPromo}>
+                                                Apply
+                                            </button>
+                                        </div>
+                                    </div>
+                                    <div className="info-field-last-promo">
+                                        <label>Tip (€)</label>
+                                        <input
+                                            type="number"
+                                            value={tip}
+                                            onChange={(e) => setTip(Number(e.target.value))}
+                                            placeholder="0.00"
+                                        />
+                                    </div>
+
+                                    <div className="line-summary"></div>
+                                    <div className="info-field-last">
+                                        <label>Discount</label>
+                                        <span>-{discount.toFixed(2)}€</span>
+                                    </div>
+                                    <div className="info-field-last">
+                                        <label>Total</label>
+                                        <span>{total.toFixed(2)}€</span>
+                                    </div>
+                                </div>
+                            </div>
+                            <button className="continue-btn-confirm" onClick={handleCheckout}>
+                                Checkout
+                            </button>
+                        </div>
+                    </div>
+
+
+                    <div className="order-buttons-confirm">
+                        <button className="back-btn-confirm" onClick={handleBack}>
+                            Back
+                        </button>
+                    </div>
+                </div>
+            )}
+
+
+        </div>
+    )
+}
Index: Frontend/src/Checkout.css
===================================================================
--- Frontend/src/Checkout.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ Frontend/src/Checkout.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,914 @@
+.background-checkout {
+    background-color: white;
+}
+
+.logodiv-checkout {
+    padding-top: 20px;
+    display: flex;
+    justify-content: center;
+}
+
+.red-back {
+    background-color: #D82B2B;
+    width: 85%;
+    border-radius: 170px;
+    max-width: 1000px;
+    height: auto;
+    margin: 0 auto;
+    margin-top: 20px;
+    padding: 20px;
+}
+
+.shopping-bag {
+    display: flex;
+    flex-direction: column;
+    gap: 20px;
+}
+
+.shipping {
+    display: flex;
+    flex-direction: column;
+    gap: 20px;
+}
+
+.progress-container {
+    width: 40%;
+    margin: 20px auto;
+}
+
+.steps {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 8px;
+}
+
+.step-label {
+    color: gray;
+    font-size: 16px;
+}
+
+.step-label.active {
+    color: black;
+}
+
+.progress-bar {
+    position: relative;
+    width: 100%;
+    height: 10px;
+    background: #e5e5e5;
+    border-radius: 20px;
+    border: 0.5px solid black;
+}
+
+.progress-fill {
+    height: 10px;
+    background: #d82b2b;
+    border-radius: 20px;
+    transition: width 0.3s ease;
+}
+
+
+/* Default (desktop) */
+.step-label {
+    font-size: 16px;
+}
+
+.progress-bar,
+.progress-fill {
+    height: 10px;
+}
+
+
+.orders {
+    display: flex;
+    flex-direction: column;
+    gap: 20px;
+    margin: 30px 10px;
+}
+
+.order-item {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    background: white;
+    border-radius: 170px;
+    padding: 15px 25px;
+}
+
+.pizza-img {
+    width: 80px;
+    height: 80px;
+    border-radius: 50%;
+}
+
+.order-details {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 5px;
+}
+
+.order-name {
+    /*font-weight: bold;*/
+    margin: 0px;
+}
+
+.order-extra {
+    font-size: 12px;
+    color: gray;
+    display: flex;
+    justify-content: center;
+    margin: 0px;
+}
+
+.order-price {
+    margin-right: 20px;
+    gap: 5px;
+}
+
+.order-quantity {
+    display: flex;
+    align-items: center;
+    margin-right: 30px;
+    flex-direction: column;
+    gap: 5px;
+}
+
+.order-quantity-2 {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+}
+
+.order-quantity-2 button {
+    border: 1px solid black;
+    border-radius: 50%;
+    width: 24px;
+    height: 24px;
+    font-weight: bold;
+    background: none;
+    cursor: pointer;
+}
+
+.order-buttons {
+    display: flex;
+    justify-content: center;
+    gap: 30px;
+    /*margin-top: 20px;*/
+}
+
+.order-buttons-confirm {
+    display: flex;
+    justify-content: center;
+}
+
+.order-buttons-payment {
+    display: flex;
+    justify-content: center;
+    gap: 30px;
+    margin-top: 40px;
+}
+
+.clear-cart-btn:hover {
+    background-color: #181a2b; /* Slightly darker on hover */
+    transform: scale(1.05);
+}
+
+.clear-cart-btn:active {
+    transform: scale(0.95);
+}
+
+.clear-cart-div {
+    display: flex;
+    justify-content: center;
+}
+
+.back-btn,
+.continue-btn,
+.continue-btn-confirm,
+.back-btn-confirm,
+.clear-cart-btn {
+    font-family: 'Rubik Dirt', sans-serif;
+    font-size: 22px;
+    padding: 12px 32px;
+    border-radius: 50px;
+    border: none;
+    cursor: pointer;
+    transition: all 0.3s ease-in-out;
+    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);
+    position: relative;
+    overflow: hidden;
+}
+
+
+.clear-cart-btn {
+    background-color: #2c2f48; /* Coral/orange color to stand out */
+    color: white;
+    font-size: 15px;
+    padding: 8px 32px
+}
+
+
+/* BACK BUTTON */
+.back-btn {
+    background: linear-gradient(135deg, #f87171, #f43f5e);
+    color: #fff;
+}
+
+.back-btn:hover {
+    transform: scale(1.05) rotate(-2deg);
+    box-shadow: 0 6px 14px rgba(244, 63, 94, 0.4);
+}
+
+.back-btn-confirm {
+    background: white;
+    color: red;
+    opacity: 80%;
+}
+
+.back-btn-confirm:hover {
+    transform: scale(1.05) rotate(-2deg);
+    box-shadow: 0 6px 14px rgba(244, 63, 94, 0.4);
+}
+
+/* CONTINUE BUTTON */
+.continue-btn {
+    background: linear-gradient(135deg, #ffffff, #ffe4e6);
+    color: #d62828;
+}
+
+.continue-btn:hover {
+    transform: scale(1.05) rotate(2deg);
+    box-shadow: 0 6px 14px rgba(214, 40, 40, 0.4);
+}
+
+.continue-btn-confirm {
+    background-color: red;
+    color: white;
+}
+
+.continue-btn-confirm:hover {
+    transform: scale(1.05) rotate(2deg);
+}
+
+
+/* FUN ripple effect */
+.back-btn::after,
+.continue-btn::after,
+.continue-btn-confirm::after,
+.back-btn-confirm::after {
+    content: "";
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    width: 0;
+    height: 0;
+    background: rgba(255, 255, 255, 0.4);
+    border-radius: 50%;
+    transform: translate(-50%, -50%);
+    transition: width 0.4s ease, height 0.4s ease;
+}
+
+.back-btn:active::after,
+.continue-btn:active::after {
+    width: 250px;
+    height: 250px;
+}
+
+/*---*/
+/* Info container */
+.info-container {
+    display: flex;
+    justify-content: center;
+    gap: 30px;
+    margin: 5px 30px;
+    transition: all 0.3s ease;
+}
+
+.info-box {
+    flex: 1;
+    padding: 30px;
+    border-radius: 50px;
+    background: #fff;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+    cursor: pointer;
+    transition: transform 0.3s ease, box-shadow 0.3s ease;
+}
+
+/* When not selected */
+.info-box.unselected {
+    opacity: 0.8;
+    background-color: #FFA2A2;
+    transform: scale(0.95);
+}
+
+/* Old info (left) pops out left */
+.old-info.selected {
+    transform: scale(1.05) translateX(-10px);
+    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
+    z-index: 2;
+}
+
+/* New info (right) pops out right */
+.new-info.selected {
+    transform: scale(1.05) translateX(10px);
+    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
+    z-index: 2;
+}
+
+
+/* Inputs inside unselected look dimmed */
+.info-box.unselected input {
+    background-color: rgba(255, 255, 255, 0.4);
+    color: #999;
+}
+
+
+.shipping-title {
+    font-weight: lighter;
+    color: white;
+    display: flex;
+    justify-content: center;
+    margin: 0px;
+}
+
+.info-heading {
+    display: flex;
+    justify-content: center;
+    margin: 0px 0px 20px 0px;
+    color: #D82B2B;
+    font-weight: lighter;
+    font-size: x-large;
+}
+
+.info-field {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-start;
+}
+
+.info-field label {
+    font-weight: lighter;
+    color: #D82B2B;
+    font-size: larger;
+}
+
+.comment-label {
+    margin: 0px 0px 10px 0px;
+    color: white;
+    width: 400px;
+}
+
+.comment-label-it {
+    margin: 0px 0px 10px 0px;
+    color: white;
+    width: 500px;
+    text-align: center;
+}
+
+.center-it {
+    display: flex;
+    justify-content: center;
+}
+
+.comment-box-delivery {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.comment-input {
+    width: 100%;
+    max-width: 700px;
+    padding: 12px 15px;
+    border: 1.5px solid #F9C6C6;
+    border-radius: 20px;
+    font-size: 16px;
+    font-family: inherit;
+    outline: none;
+    transition: border-color 0.3s ease, box-shadow 0.3s ease;
+    background-color: #fff;
+    font-weight: lighter;
+}
+
+.comment-input:focus {
+    border-color: #F9C6C6; /* matches your theme */
+    box-shadow: 0 0 6px rgba(216, 43, 43, 0.3);
+}
+
+.info-field input {
+    width: 90%;
+    max-width: 350px;
+    padding: 12px 15px;
+    border: 1.5px solid #F9C6C6;
+    border-radius: 20px;
+    font-size: 16px;
+    font-family: inherit;
+    outline: none;
+    transition: border-color 0.3s ease, box-shadow 0.3s ease;
+    background-color: #fff;
+    font-weight: lighter;
+}
+
+.info-field input:focus {
+    border-color: #D82B2B; /* matches your theme */
+    box-shadow: 0 0 6px rgba(216, 43, 43, 0.3);
+}
+
+.info-field input::placeholder {
+    color: #999;
+    font-size: 14px;
+}
+
+.payment-button {
+    padding: 30px;
+    border-radius: 50px;
+    background: #fff;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+    cursor: pointer;
+    transition: transform 0.3s ease, box-shadow 0.3s ease;
+}
+
+/*.payment-button {*/
+/*    opacity: 0.8;*/
+/*    background-color: #FFA2A2;*/
+/*    transform: scale(0.95);*/
+/*}*/
+/*-----*/
+
+.center-it {
+    display: flex;
+    justify-content: center;
+}
+
+.options {
+    margin: 30px 0px 50px;
+}
+
+.first-row,
+.second-row {
+    display: flex;
+    justify-content: center;
+    gap: 40px;
+    margin-bottom: 20px;
+}
+
+/*.payment-button {*/
+/*    background-color: #fff;*/
+/*    color: #000;*/
+/*    font-weight: 600;*/
+/*    padding: 14px 20px;*/
+/*    border-radius: 40px;*/
+/*    border: none;*/
+/*    font-size: 16px;*/
+/*    cursor: pointer;*/
+/*    width: 280px;*/
+/*    transition: background-color 0.3s;*/
+/*}*/
+
+/*.payment-button:hover {*/
+/*    background-color: #f3f3f3;*/
+/*}*/
+.payment-button {
+    background-color: white;
+    color: #00000091;
+    padding: 14px 20px;
+    border-radius: 40px;
+    border: none;
+    font: inherit;
+    font-weight: lighter;
+
+    cursor: pointer;
+    width: 280px;
+    transition: background-color 0.3s, transform 0.1s ease-in-out;
+}
+
+.payment-button:hover {
+    background-color: #f3f3f3;
+}
+
+.payment-button:active {
+    transform: scale(0.96); /* small click animation */
+}
+
+.payment-button.selected {
+    background-color: #FFA2A2;
+    color: #fff;
+    box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
+}
+
+
+/* Card info */
+.card-info-note {
+    font-size: 14px;
+    opacity: 0.8;
+    margin-top: 20px;
+}
+
+.card-info {
+    margin: 0px 50px;
+    text-align: left;
+
+}
+
+.card-row {
+    display: flex;
+    gap: 20px;
+    margin-top: 10px;
+    align-items: flex-end;
+}
+
+.card-field {
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+    gap: 5px;
+    color: white;
+}
+
+.card-field.small {
+    max-width: 197px;
+}
+
+.card-field input {
+    padding: 10px;
+    border: none;
+    border-radius: 6px;
+    font-size: 16px;
+    font-family: inherit;
+    outline: none;
+}
+
+.card-field input:focus {
+    box-shadow: 0 0 5px rgba(255, 255, 255, 0.6);
+}
+
+.cvv-note {
+    font-size: 12px;
+    color: #fff;
+    opacity: 0.8;
+    margin-top: 5px;
+}
+
+
+.valid-thru-selects {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+}
+
+.valid-select {
+    padding: 8px 10px;
+    border: 1.5px solid #ccc;
+    border-radius: 6px;
+    font-size: 16px;
+    font-family: inherit;
+    outline: none;
+    cursor: pointer;
+    transition: border-color 0.2s ease;
+}
+
+.valid-select:focus {
+    border-color: #D82B2B;
+}
+
+.order-item-last {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    gap: 15px;
+    background-color: #fff;
+    border-radius: 100px;
+    padding: 15px;
+    width: 92%;
+    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
+}
+
+.orders-last {
+    display: flex;
+    flex-direction: column;
+    gap: 20px; /* spacing between items */
+    margin: 30px 10px;
+    background: white;
+    width: 50%;
+    align-items: center;
+    padding: 20px;
+    border-radius: 50px;
+}
+
+.orders-last-shipping {
+    display: flex;
+    flex-direction: column;
+    margin: 10px 0px;
+    background: white;
+    width: 100%;
+    align-items: center;
+    padding: 10px;
+    border-radius: 50px;
+}
+
+.orders-last-summary {
+    display: flex;
+    flex-direction: column;
+    margin: 10px 10px;
+    background: white;
+    width: 30%;
+    align-items: center;
+    padding: 10px;
+    border-radius: 50px;
+}
+
+.checkout-line {
+    font-weight: lighter;
+    color: grey;
+    display: flex;
+    justify-content: center;
+    margin: 0px;
+    font-size: larger;
+}
+
+.for-flex {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+}
+
+.info-field-last {
+    display: flex;
+    align-items: center;
+}
+
+.info-field-last-promo {
+    display: flex;
+    align-items: center;
+}
+
+.info-field-last input {
+    width: 90%;
+    max-width: 350px;
+    padding: 5px;
+    border: 0px solid #F9C6C6;
+    border-radius: 20px;
+    font-size: small;
+    font-family: inherit;
+    font-weight: lighter;
+    text-align: right;
+}
+
+.new-info-last {
+    margin: 10px;
+    display: flex;
+    gap: 10px;
+    flex-direction: column;
+}
+
+.two-flex {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.info-field-last label {
+    width: 110px;
+    font-size: small;
+}
+
+.info-field-last-promo label {
+    width: 110px;
+    font-size: small;
+}
+
+
+.line-summary {
+    height: 1px;
+    background-color: black;
+}
+
+.info-field-last-promo input {
+    width: 90%;
+    max-width: 350px;
+    padding: 5px;
+    border: 1px solid red;
+    border-radius: 20px;
+    font-size: small;
+    font-family: inherit;
+    font-weight: lighter;
+    text-align: center;
+}
+
+.promo-container .promo-input-wrapper {
+    display: flex;
+    gap: 10px; /* space between input and button */
+    margin-top: 5px;
+}
+
+.promo-container .apply-btn {
+    background-color: red;
+    color: white;
+    cursor: pointer;
+    transition: background-color 0.2s ease, color 0.2s ease;
+    width: 90%;
+    max-width: 350px;
+    padding: 5px;
+    border: 1px solid red;
+    border-radius: 20px;
+    font-size: small;
+    font-family: inherit;
+    font-weight: lighter;
+    text-align: center;
+}
+
+.promo-container .apply-btn:hover {
+    background-color: white;
+    color: red;
+}
+
+
+.scroller {
+    max-height: 500px;
+    overflow-y: auto;
+    display: flex;
+    flex-direction: column;
+    gap: 20px;
+    scroll-behavior: smooth; /* smooth scrolling */
+}
+
+.scroller::-webkit-scrollbar {
+    width: 5px;
+}
+
+.scroller::-webkit-scrollbar-thumb {
+    background-color: white;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.scroller2 {
+    max-height: 400px;
+    overflow-y: auto;
+    display: flex;
+    flex-direction: column;
+    gap: 20px;
+    scroll-behavior: smooth; /* smooth scrolling */
+    align-items: center;
+    width: 400px;
+}
+
+.scroller2::-webkit-scrollbar {
+    width: 5px;
+}
+
+.scroller2::-webkit-scrollbar-thumb {
+    background-color: red;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+
+.orders-last .order-price {
+    display: flex;
+    gap: 5px;
+    margin: 0px;
+    flex-direction: column;
+}
+
+.orders-last .order-quantity {
+    margin: 0px;
+}
+
+/*---*/
+
+/* 📺 Medium screens (≤1200px) */
+@media (max-width: 1200px) {
+    .step-label {
+        font-size: 12px;
+    }
+
+    .progress-bar,
+    .progress-fill {
+        height: 8px;
+    }
+
+    .red-back {
+        border-radius: 100px;
+        padding: 40px;
+    }
+
+    .order-item {
+        flex-wrap: wrap; /* allow details to stack if needed */
+        gap: 15px;
+        padding: 12px 20px;
+    }
+
+    .pizza-img {
+        width: 65px;
+        height: 65px;
+    }
+
+    .order-quantity {
+        margin-right: 15px;
+    }
+
+}
+
+/* 📱 Small screens (≤768px) */
+@media (max-width: 768px) {
+    .step-label {
+        font-size: 9px;
+    }
+
+    .progress-bar,
+    .progress-fill {
+        height: 6px;
+    }
+
+    .logo {
+        width: 75px;
+        height: 75px;
+    }
+
+    .red-back {
+        border-radius: 80px;
+        padding: 30px;
+    }
+
+    .order-item {
+        align-items: center;
+        text-align: center;
+
+    }
+
+    .order-price {
+        margin: 10px 0;
+    }
+
+    .order-quantity {
+        flex-direction: row; /* put + and - in a row instead of column */
+        margin-right: 0;
+        gap: 10px;
+    }
+
+    .order-buttons {
+        align-items: center; /* center them */
+        gap: 15px; /* smaller gap */
+    }
+
+    .order-buttons-payment {
+        align-items: center; /* center them */
+        gap: 15px; /* smaller gap */
+    }
+
+    .back-btn,
+    .continue-btn {
+        width: 100%; /* take full available width */
+        max-width: 280px; /* but don’t stretch too much */
+        font-size: 18px;
+        padding: 10px 20px;
+    }
+}
+
+/* 📱 Extra small screens (≤500px) */
+@media (max-width: 500px) {
+    .step-label {
+        font-size: 6px;
+    }
+
+    .progress-bar,
+    .progress-fill {
+        height: 4px;
+    }
+
+    .red-back {
+        margin: 0 auto;
+        margin-top: 20px;
+    }
+
+    .logo {
+        width: 50px;
+        height: 50px;
+    }
+
+
+    .pizza-img {
+        width: 50px;
+        height: 50px;
+    }
+
+    .order-name {
+        font-size: 14px;
+    }
+
+    .order-extra {
+        font-size: 8px;
+    }
+
+    .back-btn,
+    .continue-btn {
+        width: 100%;
+        max-width: 220px;
+        font-size: 14px;
+        padding: 8px 18px;
+    }
+}
+
+
Index: Frontend/src/EmployeePanel.css
===================================================================
--- Frontend/src/EmployeePanel.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ Frontend/src/EmployeePanel.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1783 @@
+.logodiv-checkout-employee {
+    padding: 20px 0px;
+    display: flex;
+    justify-content: space-around;
+    background-color: #FF7F50;
+    align-items: center;
+    border-radius: 100px;
+}
+
+.background-checkout-employee,
+.background-checkout-employee * {
+    font-family: "Rubik Dirt", system-ui !important;
+    font-style: normal;
+
+}
+
+.background-checkout-employee {
+    background-color: #F9DEC0;
+    min-height: 100vh;
+}
+
+.bar-employee {
+    display: flex;
+    justify-content: center;
+    padding: 30px 0px;
+    gap: 150px;
+}
+
+.employee-btns {
+    padding: 10px 75px;
+    border-radius: 100px;
+    border: 0px;
+    font-size: large;
+    background-color: #2F3349;
+    color: white;
+    cursor: pointer;
+    transition: all 0.3s ease;
+}
+
+.employee-btns.active {
+    background-color: #FF7F50;
+    color: white;
+    transform: scale(1.35);
+}
+
+.employee-btns:hover {
+    background-color: #FF7F50;
+    color: white;
+    transform: scale(1.35);
+}
+
+
+.order-entry-container {
+    display: flex;
+    justify-content: space-evenly;
+    align-items: center;
+}
+
+.employees-navigation {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 20px;
+    background-color: #FF7F50;
+    border-radius: 20px;
+    transition: all 0.3s ease;
+}
+
+.employees-navigation.replay {
+    animation: slideInLeft 0.3s ease-out forwards;
+}
+
+@keyframes slideInLeft {
+    from {
+        transform: translateX(-100%);
+        opacity: 0;
+    }
+    to {
+        transform: translateX(0);
+        opacity: 1;
+    }
+}
+
+.menu-and-cart {
+    display: flex;
+    align-items: center;
+    padding: 5px 75px;
+    gap: 20px;
+    justify-content: center;
+}
+
+.emp-btn {
+    background-color: #2F3349;
+    padding: 10px 40px;
+    width: 175px;
+    display: flex;
+    justify-content: center;
+    border-radius: 100px;
+    border: 0px;
+    font-size: medium;
+    color: #FF7F50;
+    cursor: pointer;
+    transition: all 0.3s ease;
+}
+
+.emp-btn:hover {
+    color: white;
+}
+
+.emp-btn.active {
+    color: white;
+}
+
+.order-entry-wrapper {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-start;
+}
+
+.line-flex {
+    display: flex;
+    align-items: center;
+    gap: 60px;
+    justify-content: center;
+}
+
+.line-flex-2 {
+    display: flex;
+    gap: 20px;
+    justify-content: center;
+    align-items: center;
+}
+
+.employees-navigation.hidden {
+    display: none;
+}
+
+.table {
+    background-color: #FF7F50;
+}
+
+.table-label {
+    color: #FF7F50;
+}
+
+.chair {
+    background-color: #2F3349;
+}
+
+.left-menu {
+    background-color: white;
+    /*min-width: 70%;*/
+    border-radius: 35px;
+    padding: 15px 0px;
+    transition: transform 0.3s ease;
+    /*width: 1200px;*/
+    transform: translateX(-100%);
+}
+
+.left-menu.replay {
+    animation: slideInLeft 0.3s ease-out forwards;
+}
+
+
+@keyframes slideInLeft {
+    from {
+        transform: translateX(-100%);
+        opacity: 0;
+    }
+    to {
+        transform: translateX(0);
+        opacity: 1;
+    }
+}
+
+
+.nav-menu {
+    display: flex;
+    align-items: center;
+    margin: 0px 0px 5px 0px;
+    background-color: #FF7F50;
+    border-radius: 82px;
+    justify-content: space-between;
+    padding: 10px 0px;
+}
+
+.menubtns {
+    background-color: #2F3349;
+    border: none;
+    color: #FF7F50;
+    font-size: x-large;
+    padding: 10px 20px;
+    border-radius: 20px;
+    cursor: pointer;
+}
+
+.menubtns.active {
+    color: white
+}
+
+.menubtns:hover,
+.menubtns:focus {
+    color: white;
+}
+
+.menupart {
+    display: flex;
+    align-items: center;
+    flex-direction: row;
+    justify-content: space-around;
+    margin: 0px 0px 5px 0px;
+}
+
+.menupart-2 {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-around;
+    margin: 0px 0px 5px 0px;
+}
+
+.sizes {
+    display: flex;
+    justify-content: space-around;
+    background: white;
+    border: 5px solid #2F3349;
+    border-radius: 55px;
+    align-items: center;
+}
+
+.size {
+    text-align: center;
+    padding: 10px;
+    cursor: pointer;
+}
+
+.pizza-small {
+    width: 100px;
+}
+
+.pizza-medium {
+    width: 150px;
+}
+
+.pizza-big {
+    width: 200px;
+}
+
+.pizza-size {
+    color: #FF7F50;
+    font-size: x-large;
+}
+
+.pizza-price {
+    color: #FF7F50;
+    font-size: large;
+}
+
+.size.active {
+    background-color: #FF7F50;
+    border-radius: 50px;
+}
+
+.size.active .pizza-size {
+    color: white;
+}
+
+.size.active .pizza-price {
+    color: white;
+}
+
+.right-part {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 10px;
+
+}
+
+.quantity-container {
+    display: flex;
+    align-items: center;
+    gap: 5px;
+    background: #2F3349;
+    color: white;
+    border-radius: 55px;
+    justify-content: center;
+    width: 35%;
+}
+
+.quantity-value {
+    min-width: 25px;
+    text-align: center;
+}
+
+.quantity-buttons {
+    display: flex;
+    flex-direction: column;
+    gap: 2px;
+}
+
+.quantity-buttons button {
+    background: none;
+    border: none;
+    color: white;
+    font-size: medium;
+    cursor: pointer;
+    line-height: 1;
+}
+
+.quantity-buttons button:hover {
+    color: #ff7f50; /* coral hover */
+}
+
+.ingredients-list {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 15px;
+    justify-content: center;
+    overflow-y: auto;
+    max-height: 200px;
+}
+
+.ingredients-list::-webkit-scrollbar {
+    width: 5px;
+}
+
+.ingredients-list::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+
+.ingredient-item {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    border: 3px solid #2F3349;
+    border-radius: 8px;
+    width: 140px;
+    text-align: center;
+    transition: all 0.2s ease-in-out;
+    cursor: pointer;
+}
+
+.ingredient-item:hover {
+    background: #ff7f50;
+}
+
+.ingredient-item.selected {
+    background: #ff7f50;
+}
+
+.ingredient-item.selected .ingredient-name {
+    color: white;
+    font-weight: normal;
+}
+
+.ingredient-item.selected .ingredient-price {
+    color: white;
+}
+
+.ingredient-price {
+    font-size: 14px;
+    color: #333;
+    cursor: pointer;
+}
+
+.ingredient-name {
+    font-size: large;
+    color: #2F3349;
+    cursor: pointer;
+    font-weight: bold;
+
+}
+
+.comment-input-special {
+    width: 100%;
+    max-width: 700px;
+    padding: 12px 15px;
+    border: 3px solid #2F3349;
+    border-radius: 20px;
+    font-size: 16px;
+    font-family: inherit;
+    outline: none;
+    transition: border-color 0.3s ease, box-shadow 0.3s ease;
+    background-color: #2F3349;
+    font-weight: lighter;
+    color: white;
+}
+
+.comment-input-special::placeholder {
+    color: white;
+}
+
+
+.comment-input-special:focus {
+    border-color: white;
+    box-shadow: 0 0 6px #2F3349;
+}
+
+.left-part {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 12px;
+    padding: 10px;
+    justify-content: center;
+}
+
+.pizza-order {
+    max-height: 30vh;
+    overflow-y: auto;
+}
+
+.pizza-order::-webkit-scrollbar {
+    width: 5px;
+}
+
+.pizza-order::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+
+.pizza-card {
+    width: 140px;
+    cursor: pointer;
+    border-radius: 12px;
+    background: #fff;
+    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
+    transition: 0.2s ease;
+    text-align: center;
+    padding: 8px;
+    border: 3px solid #2F3349;
+}
+
+.pizza-card:hover {
+    background: #ff7f50;
+}
+
+.pizza-card.selected {
+    background: #ff7f50;
+}
+
+.pizza-card.selected .pizza-info h4 {
+    color: white;
+    font-weight: normal;
+}
+
+.pizza-card.selected .pizza-info span {
+    color: white;
+    font-weight: normal;
+}
+
+
+.pizza-img-2 {
+    width: 50%;
+    height: 50%;
+    border-radius: 10px;
+}
+
+.pizza-img-3 {
+    width: 50%;
+    height: 50%;
+    object-fit: cover;
+    border-radius: 10px;
+}
+
+.pizza-info h4 {
+    margin: 6px 0 4px;
+    font-size: large;
+    color: #2F3349;
+    cursor: pointer;
+    font-weight: bold;
+}
+
+.pizza-info span {
+    font-weight: bold;
+    color: #2F3349;
+}
+
+.orders-btns {
+    display: flex;
+    justify-content: center;
+    gap: 40px;
+}
+
+.back-order-btn {
+    padding: 10px 50px;
+    color: #ff7f50;
+    background: white;
+    border: 5px solid #ff7f50;
+    border-radius: 35px;
+    font-size: large;
+    cursor: pointer;
+    transition: all 0.5s ease-out;
+}
+
+.add-to-table {
+    padding: 10px 50px;
+    color: white;
+    background: #ff7f50;
+    border: 5px solid #ff7f50;
+    border-radius: 35px;
+    font-size: large;
+    cursor: pointer;
+    transition: all 0.5s ease-out;
+}
+
+.back-order-btn:hover {
+    color: white;
+    background: #ff7f50;
+    border: 5px solid #ff7f50;
+}
+
+.add-to-table:hover {
+    color: #ff7f50;
+    background: white;
+    border: 5px solid #ff7f50;
+}
+
+.right-cart {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 5px;
+    background-color: #2F3349;
+    padding: 20px 20px;
+    border-radius: 35px;
+}
+
+.cart-name {
+    border-radius: 5px;
+    color: #2F3349;
+    border: 1px solid #2F3349;
+    text-align: center;
+    background-color: white;
+    font-size: x-large;
+    padding: 5px 30px;
+    margin: 0px 0px 10px 0px;
+}
+
+.clear-order-btn {
+    border-radius: 35px;
+    color: #FF7F50;
+    border: 1px solid #2F3349;
+    text-align: center;
+    background-color: white;
+    font-size: x-large;
+    padding: 5px 30px;
+    cursor: pointer;
+    margin: 0px 0px 10px 0px;
+}
+
+.send-kitchen-btn {
+    border-radius: 35px;
+    color: white;
+    border: 1px solid white;
+    text-align: center;
+    background-color: #FF7F50;
+    font-size: x-large;
+    padding: 5px 30px;
+    cursor: pointer;
+
+}
+
+.subtotal-name {
+    border-radius: 5px;
+    color: #2F3349;
+    border: 1px solid #2F3349;
+    text-align: center;
+    background-color: white;
+    font-size: x-large;
+    padding: 5px 30px;
+}
+
+.subtotal-price {
+    border-radius: 5px;
+    color: white;
+    border: 1px solid white;
+    text-align: center;
+    background-color: #2F3349;
+    font-size: x-large;
+    padding: 5px 30px;
+}
+
+.cart-item {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    padding: 10px;
+    border-radius: 30px;
+    border: 3px solid white;
+    gap: 5px;
+    margin: 0px 10px 10px 0px;
+}
+
+.cart-item h4 {
+    font-size: large;
+    margin: 0px;
+    font-weight: normal;
+    color: white;
+}
+
+.cart-item ul {
+    margin: 0px;
+    color: white;
+    display: flex;
+    padding: 0px;
+    flex-direction: column;
+    align-items: center;
+    gap: 5px;
+}
+
+.cart-item ul li {
+    max-width: 300px;
+    max-height: 40px;
+    overflow-y: auto;
+}
+
+.cart-item ul li::-webkit-scrollbar {
+    width: 5px;
+}
+
+.cart-item ul li::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.line-items {
+    display: flex;
+    align-items: center;
+}
+
+.price-items {
+    padding: 0px 10px;
+    border: 1px solid white;
+    color: white;
+    border-radius: 35px;
+    font-size: large;
+}
+
+.remove-items {
+    padding: 0px 10px;
+    border: 1px solid white;
+    color: white;
+    background-color: #FF7F50;
+    border-radius: 35px;
+    font-size: large;
+    cursor: pointer;
+}
+
+.subtotal-line {
+    display: flex;
+    align-items: center;
+    justify-content: space-evenly;
+    gap: 10px;
+    margin: 0px 0px 10px 0px;
+
+}
+
+.table-comment {
+    height: 150px;
+    padding: 12px 15px;
+    border: 3px solid white;
+    border-radius: 20px;
+    font-size: 16px;
+    font-family: inherit;
+    outline: none;
+    transition: border-color 0.3s ease, box-shadow 0.3s ease;
+    background-color: #2F3349;
+    font-weight: lighter;
+    color: white;
+
+}
+
+.table-comment::placeholder {
+    color: white;
+    vertical-align: top;
+}
+
+.table-comment:focus {
+    box-shadow: 0 0 6px #2F3349;
+}
+
+.comment-box-1 {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    margin: 0px 0px 10px 0px;
+}
+
+.cart-quantity-control {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+}
+
+.cart-quantity-control button {
+    padding: 0px 10px;
+    border: 1px solid white;
+    color: white;
+    border-radius: 35px;
+    cursor: pointer;
+    font-size: large;
+    background-color: #2F3349;
+}
+
+.cart-quantity-control button:hover {
+    color: white;
+    background-color: #ff7f50;;
+    border: 1px solid white;
+}
+
+.receipt-line {
+    display: flex;
+    align-items: center;
+    justify-content: space-evenly;
+    gap: 20px;
+}
+
+.take-away-name {
+    background-color: #ff7f50;
+    padding: 10px 30px;
+    color: white;
+    font-size: x-large;
+    border-radius: 16px;
+}
+
+.order-entry-container.print-receipt-gap {
+    display: flex;
+    align-items: center;
+    gap: 20px;
+    justify-content: center;
+    margin: 60px 0px 0px 0px;
+}
+
+.take-away-list {
+    display: flex;
+    flex-direction: column;
+    gap: 10px;
+    align-items: center;
+    opacity: 0; /* hidden by default */
+    transform: translateX(-100%); /* off screen */
+}
+
+.take-away-list.replay {
+    animation: slideInLeft 0.3s ease-out forwards;
+}
+
+@keyframes slideInLeft {
+    from {
+        transform: translateX(-100%);
+        opacity: 0;
+    }
+    to {
+        transform: translateX(0);
+        opacity: 1;
+    }
+}
+
+
+.take-away-orders {
+    background-color: #2F3349;
+    padding: 5px 0px;
+    border-radius: 16px;
+    width: 100%;
+    display: flex;
+    flex-direction: column-reverse;
+    align-items: center;
+}
+
+.take-away-order {
+    background-color: #ff7f50;
+    padding: 10px 30px;
+    color: #2F3349;
+    font-size: x-large;
+    border-radius: 16px;
+    margin: 10px 0px;
+    cursor: pointer;
+}
+
+.receipt-preview {
+    background: white;
+    border-radius: 50px;
+    padding: 40px;
+    margin: 20px auto;
+    width: 350px;
+    text-align: center;
+    font-family: monospace;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
+    color: #808080;
+}
+
+.receipt-preview h2 {
+    font-size: xx-large;
+    margin: 20px 0px;
+    font-weight: normal;
+
+}
+
+.receipt-item {
+    border-bottom: 2px solid #808080;
+    margin: 8px 0;
+    padding-bottom: 6px;
+    text-align: left;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.receipt-header {
+    display: flex;
+    gap: 20px;
+    flex-direction: column;
+    align-items: center;
+}
+
+.receipt-header h3 {
+    font-weight: normal;
+    margin: 0px;
+    font-size: xx-large;
+}
+
+.receipt-header p {
+    margin: 0px;
+    font-size: small;
+
+}
+
+.print-btn {
+    background: #FF7F50;
+    color: white;
+    border: none;
+    padding: 10px 20px;
+    border-radius: 8px;
+    cursor: pointer;
+}
+
+.line-rece {
+    display: flex;
+    gap: 30px;
+    font-size: large;
+    font-weight: normal;
+}
+
+.receipt-footer {
+    display: flex;
+    justify-content: center;
+    flex-direction: column;
+    align-items: center;
+}
+
+.receipt-footer p {
+    margin: 0px;
+}
+
+.receipt-foot {
+    display: flex;
+    align-items: center;
+    margin: 20px 0px 0px 0px;
+}
+
+.receipt-foot p {
+    margin: 0px;
+}
+
+.receipt-thanks {
+    margin-top: 20px;
+    font-size: medium;
+    font-style: italic;
+    color: #808080;
+}
+
+.receipt-overlay {
+    position: fixed; /* covers the whole screen */
+    top: 0;
+    left: 0;
+    width: 100vw;
+    height: 100vh;
+    background: rgba(0, 0, 0, 0.7); /* black with 70% opacity */
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    z-index: 999; /* stays on top of everything */
+    flex-direction: column;
+}
+
+.back-btn-receipt {
+    margin-top: 20px;
+    background: #2F3349;
+    color: white;
+    border: none;
+    padding: 10px 20px;
+    border-radius: 8px;
+    cursor: pointer;
+    font-size: medium;
+}
+
+.back-btn-receipt:hover {
+    background: #444b63;
+    transform: scale(1.05);
+    transition: all 0.2s ease-in-out;
+}
+
+.table-disabled {
+    cursor: not-allowed;
+    opacity: 0.6; /* dim it a bit */
+    pointer-events: none; /* prevent click */
+}
+
+.table-element.greyed {
+    opacity: 0.4;
+    pointer-events: none;
+    filter: grayscale(100%);
+}
+
+.disabled-icon {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    font-size: 24px;
+    color: red;
+    pointer-events: none;
+}
+
+.table-group.disabled {
+    opacity: 0.4;
+    pointer-events: none;
+    filter: grayscale(100%);
+}
+
+.table.disabled {
+    opacity: 0.4;
+    pointer-events: none;
+    filter: grayscale(100%);
+}
+
+.no-orders {
+    padding: 20px;
+    margin: 20px 0px 10px auto;
+    text-align: center;
+    color: #6c757d;
+    font-size: 1.2rem;
+    font-weight: 500;
+    background: #f8f9fa;
+    border: 2px dashed #ced4da;
+    border-radius: 12px;
+    max-height: 20px;
+    max-width: 400px;
+    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
+}
+
+.refresh-btn {
+    cursor: pointer;
+    padding: 3px 30px;
+    margin: 0px auto;
+    text-align: center;
+    font-size: 1.2rem;
+    font-weight: 500;
+    color: white;
+    background-color: #ff7f50;
+    border: 2px dashed white;
+    border-radius: 30px;
+    box-shadow: rgba(0, 0, 0, 0.05) 0px 2px 6px;
+    display: flex;
+    justify-content: center;
+    flex-direction: column;
+    align-items: center;
+}
+
+.orders-grid-reception {
+    display: flex;
+    flex-wrap: wrap; /* allow wrapping to new rows */
+    gap: 20px; /* space between cards */
+    justify-content: center; /* align cards to the left */
+    height: 600px;
+    max-width: 1080px;
+    overflow-y: auto;
+    padding: 20px;
+}
+
+.orders-grid-reception::-webkit-scrollbar {
+    width: 5px;
+}
+
+.orders-grid-reception::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.order-card-reception.dine-in {
+    flex-grow: 1;
+    flex-shrink: 1;
+    flex-basis: calc(33.333% - 20px);
+    max-width: 210px;
+    max-height: 310px;
+    background: linear-gradient(145deg, #fffef9, #fffbf2); /* subtle gradient */
+    border-radius: 35px;
+    padding: 10px 20px;
+    gap: 3px;
+    display: flex;
+    flex-direction: column;
+    color: #ff7f50;
+    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1); /* more depth */
+    transition: transform 0.3s ease, box-shadow 0.3s ease, border-left 0.3s ease;
+    border-left: 5px solid #ff7f50;
+    overflow-y: auto;
+}
+
+.order-card-reception.dine-in::-webkit-scrollbar {
+    width: 5px;
+}
+
+.order-card-reception.dine-in::-webkit-scrollbar-thumb {
+    background-color: #2F3349;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.order-card-reception.take-away {
+    color: white;
+    background-color: #ff7f50;
+    flex-grow: 1;
+    flex-shrink: 1;
+    flex-basis: calc(33.333% - 20px);
+    max-width: 210px;
+    max-height: 310px;
+    border-radius: 35px;
+    padding: 10px 20px;
+    gap: 3px;
+    display: flex;
+    flex-direction: column;
+    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
+    transition: transform 0.3s ease, box-shadow 0.3s ease, border-left 0.3s ease;
+    border-left: 5px solid white;
+    overflow-y: auto;
+}
+
+.order-card-reception.take-away::-webkit-scrollbar {
+    width: 5px;
+}
+
+.order-card-reception.take-away::-webkit-scrollbar-thumb {
+    background-color: #2F3349;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+
+.order-card-reception.dine-in:hover {
+    transform: translateY(-5px) scale(1.03);
+    box-shadow: 0 12px 25px rgba(0, 0, 0, 0.15);
+    border-left: 5px solid #ff4500; /* changes color on hover */
+}
+
+.order-card-reception.take-away:hover {
+    transform: translateY(-5px) scale(1.03);
+    box-shadow: 0 12px 25px rgba(0, 0, 0, 0.15);
+    border-left: 5px solid white; /* changes color on hover */
+}
+
+.order-card-reception.dine-in ul {
+    height: 70px;
+    overflow-y: auto;
+    margin: 0px;
+    padding-left: 15px;
+    border-left: 3px solid #ff7f50;
+    list-style: none;
+}
+
+.order-card-reception.take-away ul {
+    height: 70px;
+    overflow-y: auto;
+    margin: 0px;
+    padding-left: 15px;
+    border-left: 3px solid white;
+    list-style: none;
+}
+
+.order-card-reception h3 {
+    font-size: x-large;
+    font-weight: normal;
+    text-align: center;
+    margin: 5px 10px;
+}
+
+.order-card-reception.dine-in h3:hover {
+    color: #ff4500;
+    cursor: pointer;
+}
+
+.order-card-reception.take-away h3:hover {
+    color: white;
+    cursor: pointer;
+}
+
+.order-card-reception ul::-webkit-scrollbar {
+    width: 5px;
+}
+
+.order-card-reception.dine-in ul::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.order-card-reception.take-away ul::-webkit-scrollbar-thumb {
+    background-color: white;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.order-info {
+    flex: 1; /* take remaining space */
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    gap: 3px;
+}
+
+.order-label {
+    display: flex;
+    justify-content: center;
+    font-style: italic;
+    font-variant-caps: all-small-caps;
+    font-size: larger;
+}
+
+.order-card-reception.dine-in .finished-btn {
+    padding: 8px 14px;
+    border: none;
+    border-radius: 20px;
+    background-color: #ff7f50;
+    color: white;
+    cursor: pointer;
+    align-self: center;
+    transition: all 0.3s ease;
+}
+
+.order-card-reception.take-away .finished-btn {
+    padding: 8px 14px;
+    border: none;
+    border-radius: 20px;
+    background-color: white;
+    color: #ff7f50;
+    cursor: pointer;
+    align-self: center;
+    transition: all 0.3s ease;
+}
+
+.finished-btn:hover {
+    background-color: #ff4500;
+    transform: scale(1.15);
+}
+
+.finished-btn:hover {
+    background-color: #ff4500;
+    transform: scale(1.15);
+}
+
+.pizza-comment {
+    max-height: 45px;
+    overflow-y: auto;
+}
+
+.order-comment {
+    max-height: 45px;
+    overflow-y: auto;
+}
+
+.pizza-comment::-webkit-scrollbar {
+    width: 5px;
+}
+
+.order-comment::-webkit-scrollbar {
+    width: 5px;
+}
+
+.order-card-reception.dine-in .pizza-comment::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.order-card-reception.dine-in .order-comment::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.order-card-reception.take-away .pizza-comment::-webkit-scrollbar-thumb {
+    background-color: white;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.order-card-reception.take-away .order-comment::-webkit-scrollbar-thumb {
+    background-color: white;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+
+.width-changer {
+    width: 50%;
+}
+
+.order-label-title {
+    font-weight: 700;
+    text-transform: uppercase;
+    font-size: 13px;
+    color: #2F3349;
+    letter-spacing: 0.5px;
+    margin-right: 4px;
+}
+
+
+.center-divs {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+
+.header-item {
+    flex: 1 1;
+    text-align: center;
+    cursor: pointer;
+    padding: 10px 20px;
+    font-size: x-large;
+    display: flex;
+    align-items: center;
+    gap: 5px;
+}
+
+.header-item:hover {
+    color: white; /* highlight on hover */
+    transition: color 0.3s ease;
+}
+
+.header-item-2 {
+    flex: 1 1;
+    text-align: center;
+    cursor: pointer;
+    padding: 10px;
+    font-size: x-large;
+    gap: 20px;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+}
+
+.header-item-2:hover {
+    color: #2c2f48;; /* highlight on hover */
+    transition: color 0.3s ease;
+}
+
+.review-css {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 20px;
+    background-color: #FF7F50;
+    border-radius: 20px;
+    transition: all 0.3s ease;
+    margin: 40px 0px 0px 0px;
+}
+
+.review-css.replay {
+    animation: slideInLeft 0.3s ease-out forwards;
+}
+
+.data-table {
+    margin-top: 20px;
+    margin-bottom: 20px;
+    padding: 5px 20px;
+    background: #2c2f48;
+    border: 4px solid #ff7f50;
+    overflow-y: auto;
+    max-height: 500px;
+    color: white;
+    border-radius: 35px;
+}
+
+.data-table-2 {
+    overflow-y: auto;
+    max-height: 500px; /* scroll if too many rows */
+    color: white;
+    display: flex;
+    flex-direction: column;
+}
+
+.data-table-2::-webkit-scrollbar {
+    width: 5px;
+}
+
+.data-table-2::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+/* header row */
+.nav-data {
+    display: flex;
+    background: #2c2f48;
+    color: #ff7f50;
+    padding: 10px 30px;
+    border-radius: 35px;
+    border: 3px solid #ff7f50;
+}
+
+.nav-data-2 {
+    display: flex;
+    background: #ff7f50;
+    color: white;
+    padding: 10px 30px;
+    border-radius: 35px;
+    border: 3px solid white;
+    align-items: center;
+    gap: 20px;
+}
+
+
+/* data rows */
+.data-row {
+    display: grid;
+    grid-template-columns: repeat(8, 1fr);
+    background: white;
+    color: #ff7f50;
+    transition: background 0.3s ease, color 0.3s ease;
+    border-radius: 35px;
+    margin: 10px;
+    border: 3px solid #ff7f50;
+}
+
+.data-row:hover {
+    background: #2c2f48;
+    color: white;
+    border: 3px solid #ff7f50;
+}
+
+.data-cell {
+    text-align: center;
+    padding: 5px;
+    font-weight: normal;
+    align-items: center;
+    justify-content: center;
+    display: flex;
+}
+
+.right-data {
+    margin: 40px 0px 0px 0px;
+    width: 70%;
+}
+
+/* truncated text with dots */
+.truncated {
+    display: inline-block;
+    max-width: 120px; /* adjust column width */
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    cursor: pointer;
+    color: #ff7f50;
+}
+
+/* square popup inside the same cell */
+.items-popup {
+    background: white;
+    color: #2c2f48;
+    border: 3px solid #ff7f50;
+    border-radius: 10px;
+    padding: 0px 10px;
+    width: 150px;
+    height: 100px;
+    overflow-y: auto;
+    cursor: pointer;;
+    justify-content: center;
+    flex-direction: column;
+}
+
+
+.items-popup::-webkit-scrollbar {
+    width: 5px;
+}
+
+.items-popup::-webkit-scrollbar-thumb {
+    background-color: #ff7f50;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+.order-box {
+    display: flex;
+    flex-direction: column;
+    border-bottom: 3px dashed #ff7f50;
+    align-items: center;
+    padding: 5px 0px;
+}
+
+.box-in-box {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    width: 90%;
+}
+
+.box-name {
+    font-size: larger;
+    color: #FF7F50;
+}
+
+.sort-arrow {
+    font-size: medium;
+}
+
+.reservation-css {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 20px;
+    background-color: #FF7F50;
+    border-radius: 20px;
+    transition: all 0.3s ease;
+    margin: 40px 0px 0px 0px;
+}
+
+.right-reservation {
+    margin: 40px 0px 0px 0px;
+    display: flex;
+    gap: 10px;
+    align-items: center;
+}
+
+.reservation-box {
+    display: flex;
+    justify-content: center;
+    gap: 20px;
+    background-color: #2c2f48;
+    padding: 20px;
+    border-radius: 35px;
+    align-items: center;
+}
+
+.reservation-line {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+    justify-content: center;
+}
+
+.date-picker-2 {
+    background-color: white;
+    cursor: pointer;
+    border: 2px solid #2c2f48;
+    color: #2c2f48;
+    border-radius: 25px;
+    padding: 8px 12px;
+    font-size: 18px;
+    text-align: center;
+    width: 135px;
+}
+
+.date-select {
+    color: white;
+    min-width: 120px;
+    font-size: large;
+    text-align: center;
+}
+
+.date-selector {
+    animation: slideInLeft 0.3s ease-out forwards;
+    display: flex;
+    align-items: center;
+    flex-direction: column;
+    gap: 15px;
+    background-color: white;
+    border-radius: 40px;
+    padding: 20px 60px;
+    box-shadow: 0 0 12px rgba(0, 0, 0, 0.15);
+    width: 250px;
+}
+
+.table-btn {
+    background-color: #FF7F50;
+    color: white;
+    padding: 10px 30px;
+    border-radius: 35px;
+    border: none;
+    font-size: large;
+    cursor: pointer;
+}
+
+.color-change {
+    color: #FF7F50;
+}
+
+
+.site-overlay {
+    position: fixed; /* covers the whole screen */
+    top: 0;
+    left: 0;
+    width: 100vw;
+    height: 100vh;
+    background: rgba(0, 0, 0, 0.7); /* black with 70% opacity */
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    z-index: 999; /* stays on top of everything */
+    flex-direction: column;
+}
+
+.orange-back {
+    background-color: #FF7F50;
+    border-radius: 35px;
+    color: white;
+    padding: 20px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 20px;
+    max-width: 70%;
+}
+
+.date-heading {
+    padding: 10px 0px;
+    font-size: x-large;
+}
+
+.blue-back {
+    background-color: #2c2f48;
+    border-radius: 35px;
+    padding: 10px 0px;
+}
+
+.heading-table {
+    color: white;
+    display: grid;
+    grid-template-columns: repeat(7, 1fr); /* 7 columns */
+    align-items: center;
+    text-align: center;
+}
+
+.heading-item {
+    padding: 10px 0px;
+    font-size: x-large;
+}
+
+.back-reserve-btn {
+    padding: 5px 30px;
+    background-color: #2c2f48;
+    border-radius: 35px;
+    color: white;
+    border: 3px solid #2c2f48;
+    cursor: pointer;
+    font-size: x-large;
+}
+
+.print-reserve-btn {
+    padding: 5px 30px;
+    background-color: white;
+    border-radius: 35px;
+    color: #2c2f48;
+    border: 3px solid white;
+    cursor: pointer;
+    font-size: x-large;
+}
+
+.btns-gap {
+    display: flex;
+    align-items: center;
+    gap: 50px;
+}
+
+.reservation-row-alert {
+    font-size: x-large;
+    padding: 20px 30px;
+}
+
+.reservation-row {
+    display: grid;
+    grid-template-columns: repeat(7, 1fr); /* 7 columns */
+    align-items: center;
+    text-align: center;
+    border-radius: 35px;
+    background-color: white;
+    margin: 20px 3px;
+    color: #2c2f48;
+    border: 3px solid #ff7f50;
+}
+
+.reservation-item {
+    padding: 10px 15px;
+}
+
+.modal-overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    z-index: 1000;
+}
+
+.modal {
+    background: white;
+    padding: 20px;
+    border-radius: 12px;
+    max-width: 400px;
+    text-align: center;
+    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
+}
+
+.modal-actions {
+    margin-top: 20px;
+    display: flex;
+    justify-content: space-around;
+}
+
+.modal-btn {
+    padding: 10px 20px;
+    border: none;
+    border-radius: 6px;
+    cursor: pointer;
+}
+
+.modal-btn.add {
+    background: #4caf50;
+    color: white;
+}
+
+.modal-btn.cancel {
+    background: #f44336;
+    color: white;
+}
+
+.reservation-hover-box {
+    position: fixed;
+    background: #ff7f50;
+    color: white;
+    padding: 10px 14px;
+    border-radius: 12px;
+    border: 2px solid #2c2f48;
+    font-size: 14px;
+    z-index: 9999;
+    min-width: 180px;
+    max-width: 280px;
+    max-height: 200px;
+    overflow-y: auto;
+    pointer-events: auto;
+    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.35);
+}
+
+.reservation-hover-box::-webkit-scrollbar {
+    width: 6px;
+}
+
+.reservation-hover-box::-webkit-scrollbar-thumb {
+    background-color: #2c2f48;
+    border-radius: 10px;
+}
+
+.reservation-hover-box::-webkit-scrollbar-track {
+    background: #ff7f50;
+}
+
+.in-line {
+    display: flex;
+    gap: 10px;
+}
+
+.color-diff {
+    color: #2c2f48;
+}
+
+.salads-desserts-block {
+    background-color: #9cdb9c;
+    color: #2c2f48;
+    border-radius: 15px;
+    padding: 8px;
+}
+
+.drinks-sauces-block {
+    color: #2c2f48;
+    background-color: #a2e8ff;
+    border-radius: 15px;
+    padding: 8px;
+    margin-top: 6px;
+    margin-bottom: 6px;
+}
+
+.order-item-mini h4 {
+    font-weight: normal;
+    margin: 5px 0px;
+    text-align: center;
+    font-size: larger;
+}
+
+.white-col {
+    color: white;
+}
+
+@media print {
+    body * {
+        visibility: hidden;
+    }
+
+    .receipt-overlay,
+    .receipt-overlay * {
+        visibility: visible; /* show receipt only */
+    }
+
+    .receipt-overlay {
+        position: absolute;
+        top: 0;
+        left: 0;
+        background: white !important; /* remove dark overlay in print */
+        width: 100%;
+        height: auto;
+        box-shadow: none;
+        padding: 0;
+        margin: 0;
+    }
+}
+
+@media (max-width: 750px) {
+    .employee-btns {
+        padding: 6px 30px;
+        font-size: small;
+    }
+
+    .bar-employee {
+        padding: 20px 0px;
+        gap: 100px;
+    }
+
+    .logodiv-checkout-employee {
+        padding: 10px 0px;
+    }
+}
+
+
+@media (max-width: 500px) {
+    .employee-btns {
+        padding: 4px 15px;
+        font-size: small;
+    }
+
+    .bar-employee {
+        padding: 15px 0px;
+        gap: 50px;
+    }
+
+    .logodiv-checkout-employee {
+        padding: 5px 0px;
+    }
+}
+
+@media (max-width: 380px) {
+    .employee-btns {
+        padding: 2px 8px;
+        font-size: x-small;
+    }
+
+    .bar-employee {
+        padding: 10px 0px;
+        gap: 30px;
+    }
+
+    .logodiv-checkout-employee {
+        padding: 0px 0px;
+    }
+}
Index: Frontend/src/EmployeePanel.js
===================================================================
--- Frontend/src/EmployeePanel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ Frontend/src/EmployeePanel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2344 @@
+import React, {useState, useEffect, useRef} from "react";
+import "./EmployeePanel.css";
+import PACrustLogo from "./images/pacrustlogo2.png"
+import PACrustLogo4 from "./images/pacrustlogo4.png"
+import message from './images/messages.png'
+import pizzaimage from './images/margaritta.png'
+import axios from "axios";
+import {useNavigate} from "react-router-dom";
+
+export default function EmployeePanel({loggedUser, setLoggedUser, logout}) {
+
+    const [selected, setSelected] = useState("Order Entry");
+
+    useEffect(() => {
+        setSelected("Order Entry");
+    }, []);
+
+    const [expandedRow, setExpandedRow] = useState(null);
+
+    const [orders, setOrders] = useState([]);
+
+    const formatDate = (dateStr) => {
+        if (!dateStr) return "";
+        const date = new Date(dateStr);
+        const day = String(date.getDate()).padStart(2, "0");
+        const month = String(date.getMonth() + 1).padStart(2, "0");
+        const year = date.getFullYear();
+        return `${day}.${month}.${year}`;
+    };
+
+    useEffect(() => {
+        if (selected === "Order Review") {
+            fetch("http://127.0.0.1:8000/api/get-orders")
+                .then(res => res.json())
+                .then(data => {
+                    setOrders(data);
+                })
+                .catch(err => console.error("Error fetching orders:", err));
+        }
+    }, [selected]);
+
+    const handlePrintReceipt = async () => {
+        if (!selectedOrder) return;
+
+        try {
+            window.print();
+
+            await axios.delete(`http://127.0.0.1:8000/api/orders/${selectedOrder.id}/`);
+
+            const res = await fetch("http://127.0.0.1:8000/api/get-orders");
+            const data = await res.json();
+
+            const withOrders = new Set(data.map(order => order.table_name));
+            setTablesWithOrders(withOrders);
+
+            const takeAwayOnly = data.filter(order => order.order_type === "Take Away");
+            setTakeAwayOrders(takeAwayOnly);
+
+            setSelectedOrder(null);
+            setSelectedTable(null);
+
+        } catch (err) {
+            console.error("Error printing/deleting order:", err);
+            alert("Failed to delete order.");
+        }
+    };
+
+    const handlePrintReservations = async () => {
+        try {
+            window.print();
+
+        } catch (err) {
+            console.error("Error printing.", err);
+            alert("Failed to delete order.");
+        }
+    };
+
+    const [receptionView, setReceptionView] = useState("Pending");
+
+    const [pendingOrders, setPendingOrders] = useState([]);
+
+    useEffect(() => {
+        if (selected === "Order Reception") {
+            fetch("http://127.0.0.1:8000/api/get-orders")
+                .then(res => res.json())
+                .then(data => {
+                    if (receptionView === "Pending") {
+                        setPendingOrders(data.filter(o => o.status === "pending"));
+                    } else if (receptionView === "Finished") {
+                        setFinishedOrders(data.filter(o => o.status === "finished"));
+                    }
+                })
+                .catch(err => console.error("Error fetching orders:", err));
+        }
+    }, [selected, receptionView]);
+
+
+    const [takeAwayOrders, setTakeAwayOrders] = useState([]);
+
+    const [orderType, setOrderType] = useState("Dine In");
+
+    const navigate = useNavigate();
+
+    const [selectedTable, setSelectedTable] = useState(null);
+
+    const [selectedReservationTable, setSelectedReservationTable] = useState(false);
+
+    const [selectedDate, setSelectedDate] = useState(null);
+
+    const [selectedOrder, setSelectedOrder] = useState(null);
+
+    const [receiptTime] = useState(new Date());
+
+    const [showOrderExistsModal, setShowOrderExistsModal] = useState(false);
+    const [orderExistsTable, setOrderExistsTable] = useState(null);
+
+    const handleTableClick = async (id) => {
+        setSelectedTable(id);
+        setOrderType("Dine In");
+
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/get-orders");
+            const data = await res.json();
+
+            const tableLabel = getTableLabel(id);
+            const existingOrder = data.find(o => o.table_name === tableLabel);
+
+            if (selected === "Print Receipt") {
+                if (existingOrder) {
+                    setSelectedOrder(existingOrder);
+                } else {
+                    setSelectedOrder(null);
+                    alert(`No order found for table ${tableLabel}`);
+                }
+                return;
+            }
+
+
+            if (existingOrder) {
+
+                setOrderExistsTable({tableLabel, existingOrder});
+                setShowOrderExistsModal(true);
+            } else {
+                setSelected("Order Entry");
+                setSelectedOrder(null);
+            }
+        } catch (err) {
+            console.error("Error fetching order for table:", err);
+        }
+    };
+
+    const getTableLabel = (id) => {
+        if (id === "oval-table") return "Шанк";
+        if (id === "rect-table-1") return "Maca 1";
+        if (id === "rect-table-2") return "Maca 2";
+        if (id === "rect-table-3") return "Maca 3";
+        if (id === "vert-table") return "Maca 4";
+
+        if (id.startsWith("left-table-")) {
+            const index = parseInt(id.split("-")[2]);
+            return "Maca " + (4 + index);
+        }
+
+        if (id.startsWith("right-table-")) {
+            const index = parseInt(id.split("-")[2]);
+            return "Maca " + (index + 4);
+        }
+
+        return "";
+    };
+
+    const rightTablePositions = [
+        {top: 360, left: 520},
+        {top: 410, left: 630},
+        {top: 360, left: 740},
+        {top: 410, left: 850},
+        {top: 520, left: 550},
+        {top: 520, left: 690},
+        {top: 520, left: 830},
+    ];
+    const leftTablePositions = [
+        {top: 50, left: 0},
+        {top: 50, left: 165},
+        {top: 50, left: 330},
+        {top: 180, left: 0},
+        {top: 180, left: 165},
+        {top: 180, left: 330},
+        {top: 310, left: 0},
+        {top: 310, left: 165},
+        {top: 310, left: 330},
+    ];
+
+    const [tableStatus, setTableStatus] = useState({});
+
+    const getLabelColor = (id) => {
+        const status = tableStatus[id];
+        switch (status) {
+            case "available":
+                return "#4caf50";
+            case "unavailable":
+                return "red";
+            case "default":
+                return "#FF7F50";
+            default:
+                return "#FF7F50";
+        }
+    };
+
+    const [selectedSize, setSelectedSize] = useState("medium");
+
+    const [quantity, setQuantity] = useState(1);
+
+    const increment = () => setQuantity(q => q + 1);
+    const decrement = () => setQuantity(q => (q > 1 ? q - 1 : 1));
+
+
+    const [ingredients, setIngredients] = useState([]);
+
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/ingredients/")
+            .then(res => res.json())
+            .then(data => setIngredients(data))
+            .catch(err => console.error("Error fetching ingredients:", err));
+    }, []);
+
+    const [selectedIngredients, setSelectedIngredients] = useState([]);
+
+    const toggleIngredient = (id) => {
+        setSelectedIngredients(prev =>
+            prev.includes(id)
+                ? prev.filter(item => item !== id)
+                : [...prev, id]
+        );
+    };
+
+    const [orderComment, setOrderComment] = useState("");
+
+    const [tableComment, setTableComment] = useState("");
+
+    const [pizzas, setPizzas] = useState([]);
+    const [salads, setSalads] = useState([]);
+    const [drinks, setDrinks] = useState([]);
+    const [desserts, setDesserts] = useState([]);
+    const [sauses, setSauses] = useState([]);
+    const [specialoffers, setSpecialoffers] = useState([]);
+
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/pizzas/")
+            .then(res => res.json())
+            .then(data => setPizzas(data))
+            .catch(err => console.error("Error fetching pizzas:", err));
+    }, []);
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/salads/")
+            .then(res => res.json())
+            .then(data => setSalads(data))
+            .catch(err => console.error("Error fetching salads:", err));
+    }, []);
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/drinks/")
+            .then(res => res.json())
+            .then(data => setDrinks(data))
+            .catch(err => console.error("Error fetching drinks:", err));
+    }, []);
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/desserts/")
+            .then(res => res.json())
+            .then(data => setDesserts(data))
+            .catch(err => console.error("Error fetching desserts:", err));
+    }, []);
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/sauces/")
+            .then(res => res.json())
+            .then(data => setSauses(data))
+            .catch(err => console.error("Error fetching sauces:", err));
+    }, []);
+
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/special-offers/")
+            .then(res => res.json())
+            .then(data => setSpecialoffers(data))
+            .catch(err => console.error("Error fetching special offers:", err));
+    }, []);
+
+
+    useEffect(() => {
+        if (selected === "Print Receipt") {
+            fetch("http://127.0.0.1:8000/api/get-orders")
+                .then(res => res.json())
+                .then(data => {
+                    const takeAwayOnly = data.filter(order => order.order_type === "Take Away");
+                    setTakeAwayOrders(takeAwayOnly);
+                })
+                .catch(err => console.error("Error fetching orders:", err));
+        }
+    }, [selected]);
+
+    const [selectedPizza, setSelectedPizza] = useState(null);
+
+    const [cartItems, setCartItems] = useState([]);
+
+    const handleAddToTable = () => {
+        if (!selectedPizza) return;
+
+        let basePrice = Number(selectedPizza.price);
+
+        if (selectedSize === "small") basePrice -= 3;
+        if (selectedSize === "big") basePrice += 5;
+
+        const extraIngredients = ingredients.filter(ing => selectedIngredients.includes(ing.id));
+        const ingredientsCost = extraIngredients.reduce((sum, ing) => sum + Number(ing.price), 0);
+
+        const newItem = {
+            id: Date.now(),
+            name: selectedPizza.name,
+            size: selectedSize,
+            type: activeMenu === "Pizzas" ? "Pizzas" : activeMenu,
+            quantity,
+            ingredients: extraIngredients.map(ing => ing.name),
+            comment: orderComment,
+            price: basePrice + ingredientsCost,
+            category: activeMenu,
+        };
+
+        setCartItems([...cartItems, newItem]);
+
+        setSelectedPizza(null);
+        setQuantity(1);
+        setSelectedIngredients([]);
+        setOrderComment("");
+    };
+
+    const subtotal = cartItems.reduce(
+        (sum, item) => sum + Number(item.price) * item.quantity,
+        0
+    );
+
+    const [activeMenu, setActiveMenu] = useState("Pizzas");
+
+    const increaseItem = (id) => {
+        setCartItems(cartItems.map(item =>
+            item.id === id ? {...item, quantity: item.quantity + 1} : item
+        ));
+    };
+
+    const decreaseItem = (id) => {
+        setCartItems(cartItems.map(item =>
+            item.id === id
+                ? {...item, quantity: item.quantity > 1 ? item.quantity - 1 : 1}
+                : item
+        ));
+    };
+
+    const orderEndRef = useRef(null);
+
+    useEffect(() => {
+        if (orderEndRef.current) {
+            orderEndRef.current.scrollIntoView({behavior: "smooth"});
+        }
+    }, [cartItems]);
+
+    const handleSendToKitchen = async () => {
+        if (cartItems.length === 0) return;
+
+        const orderData = {
+            table_name: getTableLabel(selectedTable),
+            order_type: orderType,
+            items: cartItems,
+            subtotal: subtotal,
+            comment: tableComment,
+            employee_name: loggedUser?.username || "Unknown",
+        };
+
+        try {
+            const res = await axios.post("http://127.0.0.1:8000/api/orders", orderData);
+            console.log("Order saved:", res.data);
+            setTablesWithOrders(prev => new Set([...prev, orderData.table_name]));
+            setCartItems([]);
+            setTableComment("");
+            alert("Order is sent to kitchen!");
+        } catch (err) {
+            alert("Failed to send order.");
+        }
+    };
+
+    const [tablesWithOrders, setTablesWithOrders] = useState(new Set());
+
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/get-orders")
+            .then(res => res.json())
+            .then(data => {
+                const withOrders = new Set(data.map(order => order.table_name));
+                setTablesWithOrders(withOrders);
+            })
+            .catch(err => console.error("Error fetching orders:", err));
+    }, []);
+
+    const [finishedOrders, setFinishedOrders] = useState([]);
+
+    const handleFinishOrder = async (order) => {
+        try {
+            await axios.patch(`http://127.0.0.1:8000/api/orders/${order.id}/update/`, {
+                status: "finished"
+            });
+
+            const res = await fetch("http://127.0.0.1:8000/api/get-orders");
+            const data = await res.json();
+
+            const finishedWithTime = data
+                .filter(o => o.status === "finished")
+                .map(o => ({
+                    ...o,
+                    finished_at: new Date().toLocaleTimeString("mk-MK", {hour12: false})
+                }));
+
+            setPendingOrders(data.filter(o => o.status === "pending"));
+            setFinishedOrders(finishedWithTime);
+
+        } catch (err) {
+            console.error("Error finishing order:", err);
+            alert("Failed to finish order.");
+        }
+    };
+
+    const [sortConfig, setSortConfig] = useState({key: null, direction: "asc"});
+
+    const sortedOrders = React.useMemo(() => {
+        let sortableOrders = [...orders];
+        if (sortConfig.key !== null) {
+            sortableOrders.sort((a, b) => {
+                let aValue = a[sortConfig.key];
+                let bValue = b[sortConfig.key];
+
+                switch (sortConfig.key) {
+                    case "id":
+                        aValue = Number(aValue);
+                        bValue = Number(bValue);
+                        break;
+                    case "table_name":
+                        aValue = aValue || "zzzz";
+                        bValue = bValue || "zzzz";
+                        break;
+                    case "order_type":
+                        aValue = aValue === "Dine In" ? 0 : 1;
+                        bValue = bValue === "Dine In" ? 0 : 1;
+                        break;
+                    case "items":
+                        aValue = a.items?.[0]?.name || "";
+                        bValue = b.items?.[0]?.name || "";
+                        break;
+                    case "subtotal":
+                        aValue = Number(aValue);
+                        bValue = Number(bValue);
+                        break;
+                    case "created_at":
+                        aValue = new Date(aValue).getTime();
+                        bValue = new Date(bValue).getTime();
+                        break;
+                    case "date":
+                        aValue = a.created_at ? new Date(a.created_at).toISOString().split("T")[0] : "";
+                        bValue = b.created_at ? new Date(b.created_at).toISOString().split("T")[0] : "";
+                        break;
+                    case "employee_name":
+                        aValue = aValue || "";
+                        bValue = bValue || "";
+                        break;
+                    default:
+                        break;
+                }
+
+                if (aValue < bValue) return sortConfig.direction === "asc" ? -1 : 1;
+                if (aValue > bValue) return sortConfig.direction === "asc" ? 1 : -1;
+                return 0;
+            });
+        }
+        return sortableOrders;
+    }, [orders, sortConfig]);
+
+    const requestSort = (key) => {
+        let direction = "asc";
+        if (sortConfig.key === key && sortConfig.direction === "asc") {
+            direction = "desc";
+        }
+        setSortConfig({key, direction});
+    };
+
+
+    const [reservations, setReservations] = useState([]);
+
+    const [reservedTables, setReservedTables] = useState(new Set());
+
+
+    const fetchReservations = async () => {
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/reservations/");
+            const data = await res.json();
+
+            const normalizeDate = (dateStr) =>
+                new Date(dateStr).toISOString().split("T")[0];
+
+            const filtered = data.filter((r) => normalizeDate(r.date) === selectedDate);
+
+            setReservations(filtered);
+
+            const reserved = new Set(filtered.map((r) => r.table_id));
+            setReservedTables(reserved);
+
+        } catch (err) {
+            console.error("Error fetching reservations:", err);
+        }
+    };
+
+    const getReservationTime = (tableId) => {
+        const resForTable = reservations.filter(r => r.table_id === tableId);
+        if (resForTable.length === 0) return "";
+        return resForTable.map(r => `${r.from_time} - ${r.to_time}`).join(", ");
+    };
+
+
+    const fetchReservationsForDate = async (date) => {
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/reservations/");
+            const data = await res.json();
+
+            const normalizeDate = (dateStr) =>
+                new Date(dateStr).toISOString().split("T")[0];
+
+            const filtered = data.filter((r) => normalizeDate(r.date) === date);
+            setReservations(filtered);
+
+            const mappedTables = filtered.map((r) => {
+                const normalized = normalizeTableId(r.table_id);
+                console.log(`Backend ID: ${r.table_id} → Normalized: ${normalized}`);
+                return normalized;
+            });
+            setReservedTables(new Set(mappedTables));
+
+            setNoReservations(filtered.length === 0);
+
+        } catch (err) {
+            console.error("Error fetching reservations:", err);
+        }
+    };
+
+    useEffect(() => {
+        if (selectedDate) {
+            fetchReservationsForDate(selectedDate);
+        }
+    }, [selectedDate]);
+    const normalizeTableId = (backendId) => {
+        if (!backendId) return "";
+
+        const lower = backendId.toLowerCase();
+
+        // Handle names like "maca 1", "masa 1", etc.
+        const matchNum = backendId.match(/\d+/);
+        if (matchNum) {
+            const num = parseInt(matchNum[0]);
+            // Match Maca 1–4 to rectangular/vertical tables
+            if (num === 1) return "rect-table-1";
+            if (num === 2) return "rect-table-2";
+            if (num === 3) return "rect-table-3";
+            if (num === 4) return "vert-table";
+            // Map Maca 5–13 to left-table series
+            if (num >= 5 && num <= 13) return `left-table-${num - 4}`;
+            // Map Maca 14–20 to right-table series
+            if (num >= 14 && num <= 20) return `right-table-${num - 4}`;
+        }
+
+        // Handle special table names like "Шанк"
+        if (lower.includes("шанк") || lower.includes("oval")) return "oval-table";
+        if (lower.includes("rect1")) return "rect-table-1";
+        if (lower.includes("rect2")) return "rect-table-2";
+        if (lower.includes("rect3")) return "rect-table-3";
+        if (lower.includes("vert")) return "vert-table";
+
+        return backendId;
+    };
+
+    const [resetting, setResetting] = useState(false);
+
+    const refreshReservationView = () => {
+        setResetting(true);
+        setSelectedDate(null);
+        setTimeout(() => {
+            setSelectedDate(new Date());
+            setResetting(false);
+        }, 0);
+    };
+
+    useEffect(() => {
+        if (selected === "Reservation Review" && !selectedReservationTable) {
+            // If a date is already selected, just fetch reservations for it
+            if (selectedDate) {
+                fetchReservationsForDate(selectedDate);
+            } else {
+                refreshReservationView(); // fallback (first open)
+            }
+        }
+    }, [selected, selectedReservationTable, selectedDate]);
+
+    const [hoveredTable, setHoveredTable] = useState(null);
+
+    const [mousePos, setMousePos] = useState({x: 0, y: 0});
+
+    const hoverHideTimeout = useRef(null);
+
+// update mouse position while hovering table
+    const handleMouseMove = (e) => {
+        setMousePos({x: e.clientX, y: e.clientY});
+    };
+
+// when cursor enters a table
+    const handleTableMouseEnter = (tableId) => {
+        if (hoverHideTimeout.current) {
+            clearTimeout(hoverHideTimeout.current);
+            hoverHideTimeout.current = null;
+        }
+        setHoveredTable(tableId);
+    };
+
+// when cursor leaves a table element
+    const handleTableMouseLeave = (e) => {
+        // if moving into the hover box, do nothing
+        const related = e.relatedTarget;
+        if (related && related.closest && related.closest(".reservation-hover-box")) {
+            return;
+        }
+        // short delay so user can move pointer into the hover box
+        hoverHideTimeout.current = setTimeout(() => setHoveredTable(null), 120);
+    };
+
+// when pointer enters the hover box (keep it open)
+    const handleHoverBoxMouseEnter = () => {
+        if (hoverHideTimeout.current) {
+            clearTimeout(hoverHideTimeout.current);
+            hoverHideTimeout.current = null;
+        }
+    };
+
+// when pointer leaves the hover box, hide it (unless moving to a table)
+    const handleHoverBoxMouseLeave = (e) => {
+        const related = e.relatedTarget;
+        if (related && related.closest && related.closest(".table-element")) {
+            return;
+        }
+        setHoveredTable(null);
+    };
+
+    const [noReservations, setNoReservations] = useState(false);
+
+    // const [positions, setPositions] = useState(initialTablePositions);
+    const [tablePositions, setTablePositions] = useState(() => {
+        const saved = localStorage.getItem("tableLayout");
+        if (saved) {
+            try {
+                return JSON.parse(saved).tablePositions || {};
+            } catch {
+                return {};
+            }
+        }
+        return {};
+    });
+
+    return (
+        <div className="background-checkout-employee">
+
+            <div className="logodiv-checkout-employee">
+
+                <img className="logo" src={PACrustLogo} alt={PACrustLogo} onClick={() => {
+                    navigate("/admin_panel");
+                    setSelected(null)
+                }}/>
+
+            </div>
+
+            <div
+                className={`${selected === "Order Review" ? "line-flex-2" : selected === "Reservation Review" ? "reservation-line" : "line-flex"} `}>
+                <div
+                    className={`${selected === "Order Review"
+                        ? "review-css" : selected === "Reservation Review"
+                            ? "reservation-css" : "employees-navigation"}  ${selected === "Order Entry" && selectedTable ? "hidden" : ""}`}>
+                    {[
+                        "Order Entry",
+                        "Order Reception",
+                        "Print Receipt",
+                        "Order Review",
+                        "Reservation Review",
+                    ].map((label) => (
+                        <div
+                            key={label}
+                            className={`emp-btn ${selected === label ? "active replay" : ""}`}
+                            onClick={() => {
+                                setSelected(label);
+                                const nav = document.querySelector(".employees-navigation");
+                                if (nav) {
+                                    nav.classList.remove("replay");
+                                    void nav.offsetWidth;
+                                    nav.classList.add("replay");
+                                }
+                            }}
+
+                        >
+                            {label}
+                        </div>
+                    ))}
+                </div>
+
+                <div className={`order-entry-container ${selected === "Print Receipt" ? "print-receipt-gap" : ""}`}>
+                    {selected === "Order Entry" && !selectedTable && (
+                        <>
+                            <div className="order-entry-wrapper">
+                                <div className="bar-employee">
+                                    <div>
+                                        <button
+                                            className={`employee-btns ${orderType === "Dine In" ? "active" : ""}`}
+                                            onClick={() => setOrderType("Dine In")}
+                                        >
+                                            Dine In
+                                        </button>
+                                    </div>
+                                    <div>
+                                        <button
+                                            className={`employee-btns ${orderType === "Take Away" ? "active" : ""}`}
+                                            onClick={() => {
+                                                setOrderType("Take Away");
+                                                setSelectedTable("take-away");
+                                            }}
+                                        >
+                                            Take Away
+                                        </button>
+                                    </div>
+                                </div>
+                                <div className="tables-map">
+                                    {/* Large oval table with inner space and 12 chairs */}
+                                    <div
+                                        className={`table-group oval-table ${tableStatus["oval-table"] || ""} ${selectedTable === "oval-table" ? 'selected' : ''}`}
+                                        onClick={() => handleTableClick("oval-table")}
+                                        style={tablePositions["oval-table"]}
+
+                                    >
+                                        <div className="table-label-sank"
+                                             style={{color: getLabelColor("oval-table")}}>{getTableLabel("oval-table")}</div>
+
+                                        {[...Array(12)].map((_, i) => (
+                                            <div className={`chair oval-chair chair-${i}`} key={i}></div>
+                                        ))}
+                                        <div className="table oval"></div>
+                                        <div className="table oval-inner"></div>
+
+                                    </div>
+
+                                    {/* Three horizontal rectangle tables with 6 chairs */}
+                                    <div
+                                        className={`table-group rect-table-1 ${tableStatus["rect-table-1"] || ""} ${selectedTable === "rect-table-1" ? 'selected' : ''}`}
+                                        onClick={() => handleTableClick("rect-table-1")}
+                                        style={tablePositions["rect-table-1"]}
+
+                                    >
+                                        <div className="table-label"
+                                             style={{color: getLabelColor("rect-table-1")}}>{getTableLabel("rect-table-1")}</div>
+
+                                        {[...Array(6)].map((_, i) => (
+                                            <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
+                                        ))}
+                                        <div className="table small-rect"></div>
+                                    </div>
+                                    <div
+                                        className={`table-group rect-table-2 ${tableStatus["rect-table-2"] || ""} ${selectedTable === "rect-table-2" ? 'selected' : ''}`}
+                                        onClick={() => handleTableClick("rect-table-2")}
+                                        style={tablePositions["rect-table-2"]}
+
+                                    >
+                                        <div className="table-label"
+                                             style={{color: getLabelColor("rect-table-2")}}>{getTableLabel("rect-table-2")}</div>
+
+                                        {[...Array(6)].map((_, i) => (
+                                            <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
+                                        ))}
+                                        <div className="table small-rect"></div>
+                                    </div>
+                                    <div
+                                        className={`table-group rect-table-3 ${tableStatus["rect-table-3"] || ""} ${selectedTable === "rect-table-3" ? 'selected' : ''}`}
+                                        onClick={() => handleTableClick("rect-table-3")}
+                                        style={tablePositions["rect-table-3"]}
+
+                                    >
+                                        <div className="table-label"
+                                             style={{color: getLabelColor("rect-table-3")}}>{getTableLabel("rect-table-3")}</div>
+
+                                        {[...Array(6)].map((_, i) => (
+                                            <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
+                                        ))}
+                                        <div className="table small-rect"></div>
+                                    </div>
+
+                                    {/* Vertical rectangle table */}
+                                    <div
+                                        className={`table-group vert-table ${tableStatus["vert-table"] || ""} ${selectedTable === "vert-table" ? 'selected' : ''}`}
+                                        onClick={() => handleTableClick("vert-table")}
+                                        style={tablePositions["vert-table"]}
+
+                                    >
+
+                                        <div className="table-label-8"
+                                             style={{color: getLabelColor("vert-table")}}>{getTableLabel("vert-table")}</div>
+
+                                        {[...Array(8)].map((_, i) => (
+                                            <div className={`chair vert-rect-chair chair-${i}`} key={i}></div>
+                                        ))}
+                                        <div className="table vert-rect"></div>
+                                    </div>
+
+                                    {/* Grid of small round tables bottom left */}
+                                    <div className="left-table">
+                                        {[...Array(9)].map((_, i) => (
+                                            <div
+                                                className={`table-group left-table-${i + 1} ${tableStatus[`left-table-${i + 1}`]} ${selectedTable === `left-table-${i + 1}` ? 'selected' : ''}`}
+                                                key={`left-${i + 1}`}
+                                                onClick={() => handleTableClick(`left-table-${i + 1}`)}
+                                                style={leftTablePositions[i]}
+                                            >
+                                                <div className="chair top"></div>
+                                                <div className="chair bottom"></div>
+                                                <div className="chair left"></div>
+                                                <div className="chair right"></div>
+                                                <div className="table round"></div>
+
+                                                <div className="table-label-4"
+                                                     style={{color: getLabelColor(`left-table-${i + 1}`)}}>
+                                                    {getTableLabel(`left-table-${i + 1}`)}
+                                                </div>
+                                            </div>
+                                        ))}
+                                    </div>
+
+                                    {/* Right side grid of small round tables */}
+                                    <div className="right-table">
+                                        {[...Array(7)].map((_, i) => (
+                                            <div
+                                                className={`table-group right-table-${i + 10} ${tableStatus[`right-table-${i + 10}`]} ${selectedTable === `right-table-${i + 10}` ? 'selected' : ''}`}
+                                                key={`right-${i + 10}`}
+                                                onClick={() => handleTableClick(`right-table-${i + 10}`)}
+                                                style={rightTablePositions[i]}
+                                            >
+                                                <div className="chair top"></div>
+                                                <div className="chair bottom"></div>
+                                                <div className="chair left"></div>
+                                                <div className="chair right"></div>
+                                                <div className="table round"></div>
+
+                                                <div
+                                                    className="table-label-4"
+                                                    style={{color: getLabelColor(`right-table-${i + 10}`)}}
+                                                >
+                                                    {getTableLabel(`right-table-${i + 10}`)}
+                                                </div>
+                                            </div>
+                                        ))}
+                                    </div>
+
+                                    <div className="lines"></div>
+                                    <div className="lines2"></div>
+                                </div>
+                            </div>
+                        </>
+                    )}
+
+                    {selected === "Print Receipt" && (
+                        <>
+
+                            <div className="receipt-line">
+                                <div className="order-entry-wrapper">
+                                    <div className="tables-map">
+                                        {/* Oval table */}
+                                        <div
+                                            className={`table-group oval-table ${!tablesWithOrders.has(getTableLabel("oval-table")) ? "disabled" : ""} ${selectedTable === "oval-table" ? "selected" : ""}`}
+                                            onClick={() => {
+                                                if (!tablesWithOrders.has(getTableLabel("oval-table"))) return;
+                                                handleTableClick("oval-table");
+                                            }}
+                                            style={tablePositions["oval-table"]}
+                                        >
+                                            <div className="table-label-sank"
+                                                 style={{color: getLabelColor("oval-table")}}>
+                                                {getTableLabel("oval-table")}
+                                            </div>
+
+                                            {[...Array(12)].map((_, i) => (
+                                                <div className={`chair oval-chair chair-${i}`} key={i}></div>
+                                            ))}
+                                            <div className="table oval"></div>
+                                            <div className="table oval-inner"></div>
+                                        </div>
+
+                                        {/* Three horizontal rectangle tables with 6 chairs */}
+                                        <div
+                                            className={`table-group rect-table-1 ${!tablesWithOrders.has(getTableLabel("rect-table-1")) ? "disabled" : ""} ${selectedTable === "rect-table-1" ? "selected" : ""}`}
+                                            onClick={() => {
+                                                if (!tablesWithOrders.has(getTableLabel("rect-table-1"))) return;
+                                                handleTableClick("rect-table-1");
+                                            }}
+                                            style={tablePositions["rect-table-1"]}
+                                        >
+                                            <div className="table-label" style={{color: getLabelColor("rect-table-1")}}>
+                                                {getTableLabel("rect-table-1")}
+                                            </div>
+
+                                            {[...Array(6)].map((_, i) => (
+                                                <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
+                                            ))}
+                                            <div className="table small-rect"></div>
+                                        </div>
+
+                                        <div
+                                            className={`table-group rect-table-2 ${!tablesWithOrders.has(getTableLabel("rect-table-2")) ? "disabled" : ""} ${selectedTable === "rect-table-2" ? "selected" : ""}`}
+                                            onClick={() => {
+                                                if (!tablesWithOrders.has(getTableLabel("rect-table-2"))) return;
+                                                handleTableClick("rect-table-2");
+                                            }}
+                                            style={tablePositions["rect-table-2"]}
+                                        >
+                                            <div className="table-label" style={{color: getLabelColor("rect-table-2")}}>
+                                                {getTableLabel("rect-table-2")}
+                                            </div>
+
+                                            {[...Array(6)].map((_, i) => (
+                                                <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
+                                            ))}
+                                            <div className="table small-rect"></div>
+                                        </div>
+
+                                        <div
+                                            className={`table-group rect-table-3 ${!tablesWithOrders.has(getTableLabel("rect-table-3")) ? "disabled" : ""} ${selectedTable === "rect-table-3" ? "selected" : ""}`}
+                                            onClick={() => {
+                                                if (!tablesWithOrders.has(getTableLabel("rect-table-3"))) return;
+                                                handleTableClick("rect-table-3");
+                                            }}
+                                            style={tablePositions["rect-table-3"]}
+                                        >
+                                            <div className="table-label" style={{color: getLabelColor("rect-table-3")}}>
+                                                {getTableLabel("rect-table-3")}
+                                            </div>
+
+                                            {[...Array(6)].map((_, i) => (
+                                                <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
+                                            ))}
+                                            <div className="table small-rect"></div>
+                                        </div>
+
+                                        {/* Vertical rectangle table */}
+                                        <div
+                                            className={`table-group vert-table ${!tablesWithOrders.has(getTableLabel("vert-table")) ? "disabled" : ""} ${selectedTable === "vert-table" ? "selected" : ""}`}
+                                            onClick={() => {
+                                                if (!tablesWithOrders.has(getTableLabel("vert-table"))) return;
+                                                handleTableClick("vert-table");
+                                            }}
+                                            style={tablePositions["vert-table"]}
+                                        >
+                                            <div className="table-label-8" style={{color: getLabelColor("vert-table")}}>
+                                                {getTableLabel("vert-table")}
+                                            </div>
+
+                                            {[...Array(8)].map((_, i) => (
+                                                <div className={`chair vert-rect-chair chair-${i}`} key={i}></div>
+                                            ))}
+                                            <div className="table vert-rect"></div>
+                                        </div>
+
+
+                                        {/* Grid of small round tables bottom left */}
+                                        <div className="left-table">
+                                            {[...Array(9)].map((_, i) => {
+                                                const tableId = `left-table-${i + 1}`;
+                                                return (
+                                                    <div
+                                                        className={`table-group ${tableId} ${!tablesWithOrders.has(getTableLabel(tableId)) ? "disabled" : ""} ${selectedTable === tableId ? "selected" : ""}`}
+                                                        key={`left-${i + 1}`}
+                                                        onClick={() => {
+                                                            if (!tablesWithOrders.has(getTableLabel(tableId))) return;
+                                                            handleTableClick(tableId);
+                                                        }}
+                                                        style={leftTablePositions[i]}
+                                                    >
+                                                        <div className="chair top"></div>
+                                                        <div className="chair bottom"></div>
+                                                        <div className="chair left"></div>
+                                                        <div className="chair right"></div>
+                                                        <div className="table round"></div>
+
+                                                        <div className="table-label-4"
+                                                             style={{color: getLabelColor(tableId)}}>
+                                                            {getTableLabel(tableId)}
+                                                        </div>
+                                                    </div>
+                                                );
+                                            })}
+                                        </div>
+
+                                        {/* Right side grid of small round tables */}
+                                        <div className="right-table">
+                                            {[...Array(7)].map((_, i) => {
+                                                const tableId = `right-table-${i + 10}`;
+                                                return (
+                                                    <div
+                                                        className={`table-group ${tableId} ${!tablesWithOrders.has(getTableLabel(tableId)) ? "disabled" : ""} ${selectedTable === tableId ? "selected" : ""}`}
+                                                        key={`right-${i + 10}`}
+                                                        onClick={() => {
+                                                            if (!tablesWithOrders.has(getTableLabel(tableId))) return;
+                                                            handleTableClick(tableId);
+                                                        }}
+                                                        style={rightTablePositions[i]}
+                                                    >
+                                                        <div className="chair top"></div>
+                                                        <div className="chair bottom"></div>
+                                                        <div className="chair left"></div>
+                                                        <div className="chair right"></div>
+                                                        <div className="table round"></div>
+
+                                                        <div className="table-label-4"
+                                                             style={{color: getLabelColor(tableId)}}>
+                                                            {getTableLabel(tableId)}
+                                                        </div>
+                                                    </div>
+                                                );
+                                            })}
+                                        </div>
+
+                                        <div className="lines"></div>
+                                        <div className="lines2"></div>
+                                    </div>
+                                </div>
+
+                                <div className={`take-away-list ${selected === "Print Receipt" ? "replay" : ""}`}>
+                                    <div className="take-away-name">Take Away</div>
+                                    <div className="take-away-orders">
+                                        {takeAwayOrders.length > 0 ? (
+                                            takeAwayOrders.map(order => (
+                                                <div
+                                                    key={order.id}
+                                                    className="take-away-order"
+                                                    onClick={() => setSelectedOrder(order)}
+                                                >
+                                                    Order #{order.id}
+                                                </div>
+                                            ))
+                                        ) : (
+                                            <div className="no-orders">No take away orders</div>
+                                        )}
+                                    </div>
+                                </div>
+                            </div>
+
+                            {selectedOrder && (
+                                <div>
+                                    <div className="receipt-overlay">
+                                        <div className="receipt-preview">
+                                            <div className="receipt-header">
+                                                <img src={PACrustLogo4} alt="logo" className="logo"/>
+                                                <h3>P&A CRUST PIZZA</h3>
+                                                <p>UL. DIMITAR ILEVSKI MURATO<br/>BITOLA 7000, MACEDONIA</p>
+                                            </div>
+
+                                            <h2>{selectedOrder.table_name || "Take Away"}</h2>
+
+                                            {selectedOrder.items?.length > 0 ? (
+                                                selectedOrder.items.map((item, i) => (
+                                                    <div key={i} className="receipt-item">
+                                                        <div className="line-rece">
+                                                            <div>{item.name.toUpperCase()}</div>
+                                                            <span>{item.quantity} x {item.price.toFixed(2)}€</span>
+                                                        </div>
+                                                        <div>size {item.size}</div>
+                                                        {item.ingredients?.map((ing, j) => (
+                                                            <div key={j}>+ {ing}</div>
+                                                        ))}
+                                                    </div>
+                                                ))
+                                            ) : (
+                                                <div>No items in order</div>
+                                            )}
+
+                                            <div className="receipt-footer">
+                                                <p>Tax: {(Number(selectedOrder.subtotal) * 0.05).toFixed(2)}€</p>
+                                                <p>Subtotal: {Number(selectedOrder.subtotal).toFixed(2)}€</p>
+                                                <div className="receipt-foot">
+                                                    <p>Employee: {loggedUser?.username}</p>
+                                                    <button onClick={handlePrintReceipt} className="print-btn no-print">
+                                                        PRINT
+                                                    </button>
+                                                    {receiptTime.toLocaleDateString()} {receiptTime.toLocaleTimeString()}
+                                                </div>
+                                            </div>
+
+                                            <p className="receipt-thanks">🍕 Thank you & come hungry again! 🍕</p>
+
+                                        </div>
+
+                                        <button
+                                            className="back-btn-receipt no-print"
+                                            onClick={() => {
+                                                setSelectedOrder(null);
+                                                setSelectedTable(null);
+                                                setSelected("Print Receipt");
+                                            }}
+                                        >
+                                            ⬅ Back
+                                        </button>
+                                    </div>
+                                </div>
+                            )}
+
+                        </>
+                    )
+                    }
+                </div>
+
+                {selected === "Order Entry" && selectedTable && (
+                    <div className="menu-and-cart">
+                        <div className={`left-menu ${selectedTable ? "replay" : ""}`}>
+                            <div className="nav-menu">
+                                {["Pizzas", "Salads", "Drinks", "Desserts", "Sauses", "Special Offers"].map((menu) => (
+                                    <button
+                                        key={menu}
+                                        className={`menubtns ${activeMenu === menu ? "active" : ""}`}
+                                        onClick={() => setActiveMenu(menu)}
+                                    >
+                                        {menu}
+                                    </button>
+                                ))}
+                            </div>
+
+                            {activeMenu === "Pizzas" && (
+                                <div className="menupart">
+                                    <div className="left-part">
+                                        {pizzas.map(pizza => (
+                                            <div
+                                                key={pizza.id}
+                                                className={`pizza-card ${selectedPizza?.id === pizza.id ? "selected" : ""}`}
+                                                onClick={() =>
+                                                    setSelectedPizza(
+                                                        selectedPizza?.id === pizza.id ? null : pizza
+                                                    )
+                                                }
+                                            >
+                                                <img
+                                                    src={pizza.image || "/default-pizza.png"}
+                                                    alt={pizza.name}
+                                                    className="pizza-img-2"
+                                                />
+                                                <div className="pizza-info">
+                                                    <h4>{pizza.name}</h4>
+                                                    <span>{pizza.price} €</span>
+                                                </div>
+                                            </div>
+
+                                        ))}
+                                    </div>
+
+                                    <div className="right-part">
+                                        <div className="sizes">
+                                            <div
+                                                className={`size ${selectedSize === "small" ? "active" : ""}`}
+                                                onClick={() => setSelectedSize("small")}
+                                            >
+                                                <img className="pizza-small" src={pizzaimage} alt="small pizza"/>
+                                                <div className="pizza-size">small</div>
+                                                <div className="pizza-price">- 3.00 €</div>
+
+                                            </div>
+
+                                            <div
+                                                className={`size ${selectedSize === "medium" ? "active" : ""}`}
+                                                onClick={() => setSelectedSize("medium")}
+                                            >
+                                                <img className="pizza-medium" src={pizzaimage} alt="medium pizza"/>
+                                                <div className="pizza-size">medium</div>
+                                            </div>
+
+                                            <div
+                                                className={`size ${selectedSize === "big" ? "active" : ""}`}
+                                                onClick={() => setSelectedSize("big")}
+                                            >
+                                                <img className="pizza-big" src={pizzaimage} alt="big pizza"/>
+                                                <div className="pizza-size">big</div>
+                                                <div className="pizza-price">+ 5.00 €</div>
+                                            </div>
+                                        </div>
+
+                                        <div className="quantity-container">
+                                            <span className="quantity-label">Quantity:</span>
+                                            <span className="quantity-value">{quantity}</span>
+                                            <div className="quantity-buttons">
+                                                <button onClick={increment}>▲</button>
+                                                <button onClick={decrement}>▼</button>
+                                            </div>
+                                        </div>
+
+                                        <div className="ingredients-container">
+                                            <div className="ingredients-list">
+                                                {ingredients.map(ing => (
+                                                    <div
+                                                        key={ing.id}
+                                                        className={`ingredient-item ${selectedIngredients.includes(ing.id) ? "selected" : ""}`}
+                                                        onClick={() => toggleIngredient(ing.id)}
+                                                    >
+                                                        <div className="ingredient-name">{ing.name}</div>
+                                                        <div className="ingredient-price">{ing.price}€</div>
+                                                    </div>
+                                                ))}
+                                            </div>
+                                        </div>
+
+                                        <div className="comment-box-delivery">
+                                            <input
+                                                type="text"
+                                                className="comment-input-special"
+                                                placeholder="Leave a special instruction..."
+                                                value={orderComment}
+                                                onChange={(e) => setOrderComment(e.target.value)}
+                                            />
+                                        </div>
+                                    </div>
+
+                                </div>
+                            )}
+
+                            {activeMenu === "Salads" && (
+                                <div className="menupart-2">
+                                    <div className="left-part">
+                                        {salads.map(salad => (
+                                            <div
+                                                key={salad.id}
+                                                className={`pizza-card ${selectedPizza?.id === salad.id ? "selected" : ""}`}
+                                                onClick={() =>
+                                                    setSelectedPizza(selectedPizza?.id === salad.id ? null : salad)
+                                                }
+                                            >
+                                                <img
+                                                    src={salad.image || "/default-salad.png"}
+                                                    alt={salad.name}
+                                                    className="pizza-img-3"
+                                                />
+                                                <div className="pizza-info">
+                                                    <h4>{salad.name}</h4>
+                                                    <span>{salad.price} €</span>
+                                                </div>
+                                            </div>
+                                        ))}
+                                    </div>
+
+                                    <div className="right-part">
+                                        <div className="quantity-container">
+                                            <span className="quantity-label">Quantity:</span>
+                                            <span className="quantity-value">{quantity}</span>
+                                            <div className="quantity-buttons">
+                                                <button onClick={increment}>▲</button>
+                                                <button onClick={decrement}>▼</button>
+                                            </div>
+                                        </div>
+
+                                        <div className="comment-box-delivery">
+                                            <input
+                                                type="text"
+                                                className="comment-input-special"
+                                                placeholder="Leave a special instruction..."
+                                                value={orderComment}
+                                                onChange={(e) => setOrderComment(e.target.value)}
+                                            />
+                                        </div>
+                                    </div>
+                                </div>
+                            )}
+
+                            {activeMenu === "Drinks" && (
+                                <div className="menupart-2">
+                                    <div className="left-part">
+                                        {drinks.map(drink => (
+                                            <div
+                                                key={drink.id}
+                                                className={`pizza-card ${selectedPizza?.id === drink.id ? "selected" : ""}`}
+                                                onClick={() =>
+                                                    setSelectedPizza(selectedPizza?.id === drink.id ? null : drink)
+                                                }
+                                            >
+                                                <img
+                                                    src={drink.image || "/default-drink.png"}
+                                                    alt={drink.name}
+                                                    className="pizza-img-2"
+                                                />
+                                                <div className="pizza-info">
+                                                    <h4>{drink.name}</h4>
+                                                    <span>{drink.price} €</span>
+                                                </div>
+                                            </div>
+                                        ))}
+                                    </div>
+
+                                    <div className="right-part">
+                                        <div className="quantity-container">
+                                            <span className="quantity-label">Quantity:</span>
+                                            <span className="quantity-value">{quantity}</span>
+                                            <div className="quantity-buttons">
+                                                <button onClick={increment}>▲</button>
+                                                <button onClick={decrement}>▼</button>
+                                            </div>
+                                        </div>
+
+                                        <div className="comment-box-delivery">
+                                            <input
+                                                type="text"
+                                                className="comment-input-special"
+                                                placeholder="Leave a special instruction..."
+                                                value={orderComment}
+                                                onChange={(e) => setOrderComment(e.target.value)}
+                                            />
+                                        </div>
+                                    </div>
+                                </div>
+                            )}
+
+                            {activeMenu === "Desserts" && (
+                                <div className="menupart-2">
+                                    <div className="left-part">
+                                        {desserts.map(dessert => (
+                                            <div
+                                                key={dessert.id}
+                                                className={`pizza-card ${selectedPizza?.id === dessert.id ? "selected" : ""}`}
+                                                onClick={() =>
+                                                    setSelectedPizza(selectedPizza?.id === dessert.id ? null : dessert)
+                                                }
+                                            >
+                                                <img
+                                                    src={dessert.image || "/default-dessert.png"}
+                                                    alt={dessert.name}
+                                                    className="pizza-img-3"
+                                                />
+                                                <div className="pizza-info">
+                                                    <h4>{dessert.name}</h4>
+                                                    <span>{dessert.price} €</span>
+                                                </div>
+                                            </div>
+                                        ))}
+                                    </div>
+
+                                    <div className="right-part">
+                                        <div className="quantity-container">
+                                            <span className="quantity-label">Quantity:</span>
+                                            <span className="quantity-value">{quantity}</span>
+                                            <div className="quantity-buttons">
+                                                <button onClick={increment}>▲</button>
+                                                <button onClick={decrement}>▼</button>
+                                            </div>
+                                        </div>
+
+                                        <div className="comment-box-delivery">
+                                            <input
+                                                type="text"
+                                                className="comment-input-special"
+                                                placeholder="Leave a special instruction..."
+                                                value={orderComment}
+                                                onChange={(e) => setOrderComment(e.target.value)}
+                                            />
+                                        </div>
+                                    </div>
+                                </div>
+                            )}
+
+                            {activeMenu === "Sauses" && (
+                                <div className="menupart-2">
+                                    <div className="left-part">
+                                        {sauses.map(sause => (
+                                            <div
+                                                key={sause.id}
+                                                className={`pizza-card ${selectedPizza?.id === sause.id ? "selected" : ""}`}
+                                                onClick={() =>
+                                                    setSelectedPizza(selectedPizza?.id === sause.id ? null : sause)
+                                                }
+                                            >
+                                                <img
+                                                    src={sause.image || "/default-sause.png"}
+                                                    alt={sause.name}
+                                                    className="pizza-img-2"
+                                                />
+                                                <div className="pizza-info">
+                                                    <h4>{sause.name}</h4>
+                                                    <span>{sause.price} €</span>
+                                                </div>
+                                            </div>
+                                        ))}
+                                    </div>
+
+                                    <div className="right-part">
+                                        <div className="quantity-container">
+                                            <span className="quantity-label">Quantity:</span>
+                                            <span className="quantity-value">{quantity}</span>
+                                            <div className="quantity-buttons">
+                                                <button onClick={increment}>▲</button>
+                                                <button onClick={decrement}>▼</button>
+                                            </div>
+                                        </div>
+
+                                        <div className="comment-box-delivery">
+                                            <input
+                                                type="text"
+                                                className="comment-input-special"
+                                                placeholder="Leave a special instruction..."
+                                                value={orderComment}
+                                                onChange={(e) => setOrderComment(e.target.value)}
+                                            />
+                                        </div>
+                                    </div>
+                                </div>
+                            )}
+
+                            {activeMenu === "Special Offers" && (
+                                <div className="menupart-2">
+                                    <div className="left-part">
+                                        {specialoffers.map(offer => (
+                                            <div
+                                                key={offer.id}
+                                                className={`pizza-card ${selectedPizza?.id === offer.id ? "selected" : ""}`}
+                                                onClick={() =>
+                                                    setSelectedPizza(selectedPizza?.id === offer.id ? null : offer)
+                                                }
+                                            >
+                                                <img
+                                                    src={offer.image || "/default-offer.png"}
+                                                    alt={offer.name}
+                                                    className="pizza-img-3"
+                                                />
+                                                <div className="pizza-info">
+                                                    <h4>{offer.name}</h4>
+                                                    <span>{offer.price} €</span>
+                                                </div>
+                                            </div>
+                                        ))}
+                                    </div>
+
+                                    <div className="right-part">
+                                        <div className="quantity-container">
+                                            <span className="quantity-label">Quantity:</span>
+                                            <span className="quantity-value">{quantity}</span>
+                                            <div className="quantity-buttons">
+                                                <button onClick={increment}>▲</button>
+                                                <button onClick={decrement}>▼</button>
+                                            </div>
+                                        </div>
+
+                                        <div className="comment-box-delivery">
+                                            <input
+                                                type="text"
+                                                className="comment-input-special"
+                                                placeholder="Leave a special instruction..."
+                                                value={orderComment}
+                                                onChange={(e) => setOrderComment(e.target.value)}
+                                            />
+                                        </div>
+                                    </div>
+                                </div>
+                            )}
+
+
+                            <div className="orders-btns">
+                                <div>
+                                    <button className="back-order-btn" onClick={() => setSelectedTable(null)}>Back
+                                    </button>
+                                </div>
+                                <div>
+                                    <button
+                                        className="add-to-table"
+                                        onClick={handleAddToTable}
+                                    >
+                                        {orderType === "Take Away" ? "Add for Take Away" : "Add to table"}
+                                    </button>
+
+                                </div>
+                            </div>
+                        </div>
+
+
+                        {cartItems.length > 0 && (
+                            <div className="right-cart">
+                                <div className="cart-name">
+                                    {orderType === "Take Away" ? "Take Away" : getTableLabel(selectedTable)}
+                                </div>
+
+                                <div className="pizza-order">
+                                    {cartItems.map(item => (
+                                        <div key={item.id} className="cart-item">
+                                            <h4>{item.name}</h4>
+                                            <ul>
+                                                {item.type === "Pizzas" && item.size && (
+                                                    <li>{item.size}</li>
+                                                )}
+                                                <li>
+                                                    <div className="cart-quantity-control">
+                                                        <button onClick={() => decreaseItem(item.id)}>-</button>
+                                                        <span>{item.quantity}</span>
+                                                        <button onClick={() => increaseItem(item.id)}>+</button>
+                                                    </div>
+                                                </li>
+                                                {item.ingredients.length > 0 && (
+                                                    <li>Extras: {item.ingredients.join(", ")}</li>
+                                                )}
+                                                {item.comment && <li>Note: {item.comment}</li>}
+                                            </ul>
+
+                                            <div className="line-items">
+                                                <div className="price-items">
+                                                    Price: {(item.price * item.quantity).toFixed(2)} €
+                                                </div>
+                                                <div>
+                                                    <button
+                                                        className="remove-items"
+                                                        onClick={() =>
+                                                            setCartItems(cartItems.filter(p => p.id !== item.id))
+                                                        }
+                                                    >
+                                                        Remove
+                                                    </button>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    ))}
+
+                                    <div ref={orderEndRef}/>
+                                </div>
+
+                                <button className="clear-order-btn" onClick={() => setCartItems([])}>
+                                    Clear order
+                                </button>
+
+                                <div className="comment-box-1">
+                                <textarea
+                                    className="table-comment"
+                                    placeholder="Leave a special instruction..."
+                                    value={tableComment}
+                                    onChange={(e) => setTableComment(e.target.value)}
+                                />
+                                </div>
+
+                                <div className="subtotal-line">
+                                    <div className="subtotal-name">Subtotal</div>
+                                    <div className="subtotal-price">{subtotal.toFixed(2)} €</div>
+                                </div>
+
+                                <button className="send-kitchen-btn" onClick={handleSendToKitchen}>
+                                    Send to kitchen
+                                </button>
+                            </div>
+                        )}
+                    </div>
+                )
+                }
+
+                {selected === "Order Reception" && (
+                    <div className="width-changer">
+                        <div className="bar-employee">
+                            <div>
+                                <button
+                                    className={`employee-btns ${receptionView === "Pending" ? "active" : ""}`}
+                                    onClick={() => setReceptionView("Pending")}
+                                >
+                                    Pending Orders
+                                </button>
+                            </div>
+                            <div>
+                                <button
+                                    className={`employee-btns ${receptionView === "Finished" ? "active" : ""}`}
+                                    onClick={() => setReceptionView("Finished")}
+                                >
+                                    Finished
+                                </button>
+                            </div>
+                        </div>
+                        {receptionView === "Pending" && (
+                            <div className="orders-grid-reception">
+                                {pendingOrders.length > 0 ? (
+                                    pendingOrders.map(order => (
+                                        <div
+                                            key={order.id}
+                                            className={`order-card-reception ${order.table_name ? "dine-in" : "take-away"}`}
+                                        >
+                                            {order.items && order.items.length > 0 ? (() => {
+                                                // ✅ Detect item type by category (clean and reliable)
+                                                const pizzas = order.items.filter(i =>
+                                                    i.category?.toLowerCase().includes("pizza")
+                                                );
+
+                                                const saladsDesserts = order.items.filter(i =>
+                                                    i.category?.toLowerCase().includes("salad") ||
+                                                    i.category?.toLowerCase().includes("dessert")
+                                                );
+
+                                                const drinksSauces = order.items.filter(i =>
+                                                    i.category?.toLowerCase().includes("drink") ||
+                                                    i.category?.toLowerCase().includes("sauses")
+                                                );
+
+                                                const unmatched = order.items.filter(i =>
+                                                    ![...pizzas, ...saladsDesserts, ...drinksSauces].includes(i)
+                                                );
+                                                pizzas.push(...unmatched);
+
+
+                                                return (
+                                                    <>
+                                                        {/* 🍕 PIZZAS — normal white */}
+                                                        {pizzas.map((item, index) => (
+                                                            <div key={`pizza-${index}`}
+                                                                 className="order-item-block pizza-block">
+                                                                <h3>{item.name}</h3>
+
+                                                                {item.size && (
+                                                                    <div><span
+                                                                        className="order-label-title">Size:</span> {item.size}
+                                                                    </div>
+                                                                )}
+
+                                                                {item.ingredients?.length > 0 && (
+                                                                    <ul>
+                                                                        {item.ingredients.map((ing, i) => (
+                                                                            <li key={i}>- {ing}</li>
+                                                                        ))}
+                                                                    </ul>
+                                                                )}
+
+                                                                <div className="pizza-comment">
+                                                                    <span
+                                                                        className="order-label-title">Comment:</span> {item.comment || "/"}
+                                                                </div>
+
+                                                                <div><span
+                                                                    className="order-label-title">Quantity:</span> {item.quantity}
+                                                                </div>
+                                                                <div><span
+                                                                    className="order-label-title">Price:</span> €{item.price}
+                                                                </div>
+                                                                <hr/>
+                                                            </div>
+                                                        ))}
+
+                                                        {saladsDesserts.length > 0 && (
+                                                            <div className="order-item-group salads-desserts-block">
+                                                                {saladsDesserts.map((item, index) => (
+                                                                    <div key={`salad-dessert-${index}`}
+                                                                         className="order-item-mini">
+                                                                        <h4>{item.name}</h4>
+                                                                        <div>Comment: <span
+                                                                            className="white-col">{item.comment || "/"}</span>
+                                                                        </div>
+                                                                        <div>Quantity: <span
+                                                                            className="white-col">{item.quantity}</span>
+                                                                        </div>
+                                                                        <div>Price: <span
+                                                                            className="white-col">€{item.price}</span>
+                                                                        </div>
+                                                                    </div>
+                                                                ))}
+                                                            </div>
+                                                        )}
+
+                                                        {drinksSauces.length > 0 && (
+                                                            <div className="order-item-group drinks-sauces-block">
+                                                                {drinksSauces.map((item, index) => (
+                                                                    <div key={`drink-sauce-${index}`}
+                                                                         className="order-item-mini">
+                                                                        <h4>{item.name}</h4>
+                                                                        <div>Comment: <span
+                                                                            className="white-col">{item.comment || "/"}</span>
+                                                                        </div>
+                                                                        <div>Quantity: <span
+                                                                            className="white-col">{item.quantity}</span>
+                                                                        </div>
+                                                                        <div>Price: <span
+                                                                            className="white-col">€{item.price}</span>
+                                                                        </div>
+                                                                    </div>
+                                                                ))}
+                                                            </div>
+                                                        )}
+                                                    </>
+                                                );
+                                            })() : (
+                                                <p>No items</p>
+                                            )}
+
+                                            <button className="finished-btn"
+                                                    onClick={() => handleFinishOrder(order)}> Finished
+                                            </button>
+
+                                        </div>
+                                    ))
+                                ) : (
+                                    <div className="center-divs">
+                                        <div className="no-orders">No pending orders</div>
+                                        <div
+                                            className="refresh-btn"
+                                            onClick={async () => {
+                                                try {
+                                                    const res = await fetch("http://127.0.0.1:8000/api/get-orders");
+                                                    const data = await res.json();
+                                                    setFinishedOrders(data.filter(o => o.status === "finished"));
+                                                    setSelected("Order Reception");
+                                                } catch (err) {
+                                                    console.error("Failed to refresh orders:", err);
+                                                }
+                                            }}
+                                        >
+                                            Refresh
+                                        </div>
+
+                                    </div>)}
+                            </div>
+                        )}
+
+
+                        {receptionView === "Finished" && (
+                            <div className="orders-grid-reception">
+                                {finishedOrders.length > 0 ? (
+                                    finishedOrders.map(order => (
+                                        <div
+                                            key={order.id}
+                                            className={`order-card-reception ${order.table_name ? "dine-in" : "take-away"}`}
+                                        >
+                                            {order.items && order.items.length > 0 ? (() => {
+                                                const pizzas = order.items.filter(i =>
+                                                    i.category?.toLowerCase().includes("pizza")
+                                                );
+
+                                                const saladsDesserts = order.items.filter(i =>
+                                                    i.category?.toLowerCase().includes("salad") ||
+                                                    i.category?.toLowerCase().includes("dessert")
+                                                );
+
+                                                const drinksSauces = order.items.filter(i =>
+                                                    i.category?.toLowerCase().includes("drink") ||
+                                                    i.category?.toLowerCase().includes("sauses")
+                                                );
+
+                                                const unmatched = order.items.filter(i =>
+                                                    ![...pizzas, ...saladsDesserts, ...drinksSauces].includes(i)
+                                                );
+                                                pizzas.push(...unmatched);
+
+                                                return (
+                                                    <>
+                                                        {/* 🍕 PIZZAS — same look */}
+                                                        {pizzas.map((item, index) => (
+                                                            <div key={`pizza-${index}`}
+                                                                 className="order-item-block pizza-block">
+                                                                <h3>{item.name}</h3>
+
+                                                                {item.size && (
+                                                                    <div><span
+                                                                        className="order-label-title">Size:</span> {item.size}
+                                                                    </div>
+                                                                )}
+
+                                                                {item.ingredients?.length > 0 && (
+                                                                    <ul>
+                                                                        {item.ingredients.map((ing, i) => (
+                                                                            <li key={i}>- {ing}</li>
+                                                                        ))}
+                                                                    </ul>
+                                                                )}
+
+                                                                <div className="pizza-comment">
+                                                                    <span
+                                                                        className="order-label-title">Comment:</span> {item.comment || "/"}
+                                                                </div>
+
+                                                                <div><span
+                                                                    className="order-label-title">Quantity:</span> {item.quantity}
+                                                                </div>
+                                                                <div><span
+                                                                    className="order-label-title">Price:</span> €{item.price}
+                                                                </div>
+                                                                <hr/>
+                                                            </div>
+                                                        ))}
+
+                                                        {/* 🥗 SALADS & DESSERTS */}
+                                                        {saladsDesserts.length > 0 && (
+                                                            <div className="order-item-group salads-desserts-block">
+                                                                {saladsDesserts.map((item, index) => (
+                                                                    <div key={`salad-dessert-${index}`}
+                                                                         className="order-item-mini">
+                                                                        <h4>{item.name}</h4>
+                                                                        <div>Comment: <span
+                                                                            className="white-col">{item.comment || "/"}</span>
+                                                                        </div>
+                                                                        <div>Quantity: <span
+                                                                            className="white-col">{item.quantity}</span>
+                                                                        </div>
+                                                                        <div>Price: <span
+                                                                            className="white-col">€{item.price}</span>
+                                                                        </div>
+                                                                    </div>
+                                                                ))}
+                                                            </div>
+                                                        )}
+
+                                                        {/* 🥤 DRINKS & SAUCES */}
+                                                        {drinksSauces.length > 0 && (
+                                                            <div className="order-item-group drinks-sauces-block">
+                                                                {drinksSauces.map((item, index) => (
+                                                                    <div key={`drink-sauce-${index}`}
+                                                                         className="order-item-mini">
+                                                                        <h4>{item.name}</h4>
+                                                                        <div>Comment: <span
+                                                                            className="white-col">{item.comment || "/"}</span>
+                                                                        </div>
+                                                                        <div>Quantity: <span
+                                                                            className="white-col">{item.quantity}</span>
+                                                                        </div>
+                                                                        <div>Price: <span
+                                                                            className="white-col">€{item.price}</span>
+                                                                        </div>
+                                                                    </div>
+                                                                ))}
+                                                            </div>
+                                                        )}
+                                                    </>
+                                                );
+                                            })() : (
+                                                <p>No items</p>
+                                            )}
+
+                                            {/* 💡 No Finished button here */}
+
+                                            <div className="order-label">
+                                                {order.table_name ? `${order.table_name}` : "Take Away"}
+                                                {order.finished_at ? ` - ${order.finished_at}` : ""}
+                                            </div>
+                                        </div>
+                                    ))
+                                ) : (
+                                    <div className="center-divs">
+                                        <div className="no-orders">No finished orders</div>
+                                        <div
+                                            className="refresh-btn"
+                                            onClick={async () => {
+                                                try {
+                                                    const res = await fetch("http://127.0.0.1:8000/api/get-orders");
+                                                    const data = await res.json();
+                                                    setFinishedOrders(data.filter(o => o.status === "finished"));
+                                                    setSelected("Order Reception");
+                                                } catch (err) {
+                                                    console.error("Failed to refresh orders:", err);
+                                                }
+                                            }}
+                                        >
+                                            Refresh
+                                        </div>
+                                    </div>
+                                )}
+                            </div>
+                        )}
+
+
+                    </div>
+                )}
+
+                {selected === "Order Review" && (
+                    <div className="right-data">
+
+                        <div className="nav-data">
+                            <div className="header-item" onClick={() => requestSort("id")}>
+                                ID <span
+                                className="sort-arrow">{sortConfig.key === "id" ? (sortConfig.direction === "asc" ? "▲" : "▼") : "-"}</span>
+                            </div>
+                            <div className="header-item" onClick={() => requestSort("table_name")}>
+                                Table <span
+                                className="sort-arrow">{sortConfig.key === "table_name" ? (sortConfig.direction === "asc" ? "▲" : "▼") : "-"}</span>
+                            </div>
+                            <div className="header-item" onClick={() => requestSort("order_type")}>
+                                Type <span
+                                className="sort-arrow">{sortConfig.key === "order_type" ? (sortConfig.direction === "asc" ? "▲" : "▼") : "-"}</span>
+                            </div>
+                            <div className="header-item" onClick={() => requestSort("items")}>
+                                Items <span
+                                className="sort-arrow">{sortConfig.key === "items" ? (sortConfig.direction === "asc" ? "▲" : "▼") : "-"}</span>
+                            </div>
+                            <div className="header-item" onClick={() => requestSort("subtotal")}>
+                                Subtotal <span
+                                className="sort-arrow">{sortConfig.key === "subtotal" ? (sortConfig.direction === "asc" ? "▲" : "▼") : "-"}</span>
+                            </div>
+                            <div className="header-item" onClick={() => requestSort("created_at")}>
+                                Created <span
+                                className="sort-arrow">{sortConfig.key === "created_at" ? (sortConfig.direction === "asc" ? "▲" : "▼") : "-"}</span>
+                            </div>
+                            <div className="header-item" onClick={() => requestSort("date")}>
+                                Date <span
+                                className="sort-arrow">{sortConfig.key === "date" ? (sortConfig.direction === "asc" ? "▲" : "▼") : "-"}</span>
+                            </div>
+                            <div className="header-item" onClick={() => requestSort("employee_name")}>
+                                Employee <span
+                                className="sort-arrow">{sortConfig.key === "employee_name" ? (sortConfig.direction === "asc" ? "▲" : "▼") : "-"}</span>
+                            </div>
+
+                        </div>
+
+                        <div className="data-table">
+                            <div className="data-table-2">
+                                {sortedOrders.map((order, i) => {
+                                        let time = "—";
+                                        let date = "—";
+                                        if (order.created_at) {
+                                            const createdDate = new Date(order.created_at);
+                                            time = createdDate.toLocaleTimeString("mk-MK", {hour12: false});
+                                            date = createdDate.toISOString().split("T")[0];
+                                        }
+                                        return (
+                                            <div className="data-row" key={order.id || i}>
+                                                <div className="data-cell">{order.id}</div>
+                                                <div
+                                                    className="data-cell">{order.order_type === "Take Away" ? "/" : order.table_name}
+                                                </div>
+                                                <div className="data-cell">
+                                                    {order.order_type === "Take Away" ? "Take Away" : "Dine In"}
+                                                </div>
+                                                <div
+                                                    className="data-cell items-cell"
+                                                    onClick={() => setExpandedRow(expandedRow === i ? null : i)}
+                                                >
+                                                    {expandedRow === i ? (
+                                                        <div className="items-popup">
+                                                            {order.items.map((item, idx) => (
+                                                                <div key={idx} className="order-box">
+                                                                    <div className="box-name">{item.name}</div>
+                                                                    <div className="box-in-box">
+                                                                        <div>Size: {item.size}</div>
+                                                                        <div>Quantity: {item.quantity}</div>
+                                                                        <div>Ingridients: {item.ingredients.length > 0 && `${item.ingredients.join(", ")}`}
+                                                                        </div>
+                                                                    </div>
+                                                                </div>
+                                                            ))}
+                                                        </div>
+                                                    ) : (
+                                                        <span className="truncated">
+      {order.items.map(item => item.name).join(", ")}
+    </span>
+                                                    )}
+                                                </div>
+                                                <div className="data-cell">{order.subtotal} €</div>
+                                                <div className="data-cell">{time}</div>
+                                                <div className="data-cell">{date}</div>
+                                                <div className="data-cell">{order.employee_name || "—"}</div>
+                                            </div>
+                                        )
+                                    }
+                                )
+                                }
+                            </div>
+                        </div>
+
+                        <div className="nav-data-2">
+                            <div className="header-item-2">Total Orders: {orders.length}</div>
+                            <div className="header-item-2">
+                                Revenue: {orders.reduce((sum, o) => sum + Number(o.subtotal), 0).toFixed(2)} €
+                            </div>
+                            <div className="header-item-2">
+                                Average Order Value: {orders.length > 0
+                                ? (orders.reduce((sum, o) => sum + Number(o.subtotal), 0) / orders.length).toFixed(2)
+                                : 0} €
+                            </div>
+                        </div>
+
+                    </div>
+                )}
+
+                {selected === "Reservation Review" && (
+                    <div className="right-reservation">
+
+                        <div className="tables-map">
+                            <div
+                                id="oval-table"
+                                className={`table-element ${noReservations ? "greyed" : ""} table-group oval-table ${!resetting && reservedTables.size > 0 &&
+                                selectedDate && !reservedTables.has("oval-table") ? "disabled" : ""
+                                }`}
+                                onMouseEnter={() => {
+                                    if (selectedDate && reservedTables.has("oval-table")) {
+                                        setHoveredTable("oval-table");
+                                    }
+                                }}
+                                onMouseMove={handleMouseMove}
+                                onMouseLeave={handleTableMouseLeave}
+                                title={getReservationTime("oval-table")}
+                                style={tablePositions["oval-table"]}
+                            >
+                                <div className="table-label-sank"
+                                     style={{color: getLabelColor("oval-table")}}>{getTableLabel("oval-table")}</div>
+
+                                {[...Array(12)].map((_, i) => (
+                                    <div className={`chair oval-chair chair-${i}`} key={i}></div>
+                                ))}
+                                <div className="table oval"></div>
+                                <div className="table oval-inner"></div>
+
+                            </div>
+
+                            <div
+                                className={`table-element ${noReservations ? "greyed" : ""}
+ table-group rect-table-1 ${selectedTable === "rect-table-1" ? "selected" : ""} 
+    ${!resetting && reservedTables.size > 0 && selectedDate && !reservedTables.has("rect-table-1") ? "disabled" : ""}`}
+                                onMouseEnter={() => {
+                                    if (selectedDate && reservedTables.has("rect-table-1")) {
+                                        setHoveredTable("rect-table-1");
+                                    }
+                                }}
+                                onMouseMove={handleMouseMove}
+                                onMouseLeave={handleTableMouseLeave}
+                                title={getReservationTime("rect-table-1")}
+                                style={tablePositions["rect-table-1"]}
+                            >
+                                <div className="table-label"
+                                     style={{color: getLabelColor("rect-table-1")}}>{getTableLabel("rect-table-1")}</div>
+
+                                {[...Array(6)].map((_, i) => (
+                                    <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
+                                ))}
+                                <div className="table small-rect"></div>
+                            </div>
+                            <div
+                                className={`table-element ${noReservations ? "greyed" : ""}
+ table-group rect-table-2 ${selectedTable === "rect-table-2" ? "selected" : ""} 
+    ${!resetting && reservedTables.size > 0 && selectedDate && !reservedTables.has("rect-table-2") ? "disabled" : ""}`}
+                                onMouseEnter={() => {
+                                    if (selectedDate && reservedTables.has("rect-table-2")) {
+                                        setHoveredTable("rect-table-2");
+                                    }
+                                }}
+                                onMouseMove={handleMouseMove}
+                                onMouseLeave={handleTableMouseLeave}
+                                title={getReservationTime("rect-table-2")}
+                                style={tablePositions["rect-table-2"]}
+                            >
+                                <div className="table-label"
+                                     style={{color: getLabelColor("rect-table-2")}}>{getTableLabel("rect-table-2")}</div>
+
+                                {[...Array(6)].map((_, i) => (
+                                    <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
+                                ))}
+                                <div className="table small-rect"></div>
+                            </div>
+                            <div
+                                className={`table-element ${noReservations ? "greyed" : ""}
+ table-group rect-table-3 ${selectedTable === "rect-table-3" ? "selected" : ""} 
+    ${!resetting && reservedTables.size > 0 && selectedDate && !reservedTables.has("rect-table-3") ? "disabled" : ""}`}
+                                onMouseEnter={() => {
+                                    if (selectedDate && reservedTables.has("rect-table-3")) {
+                                        setHoveredTable("rect-table-3");
+                                    }
+                                }}
+                                onMouseMove={handleMouseMove}
+                                onMouseLeave={handleTableMouseLeave}
+                                title={getReservationTime("rect-table-3")}
+                                style={tablePositions["rect-table-3"]}
+                            >
+                                <div className="table-label"
+                                     style={{color: getLabelColor("rect-table-3")}}>{getTableLabel("rect-table-3")}</div>
+
+                                {[...Array(6)].map((_, i) => (
+                                    <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
+                                ))}
+                                <div className="table small-rect"></div>
+                            </div>
+                            <div
+                                className={`table-element ${noReservations ? "greyed" : ""}
+ table-group vert-table  ${selectedTable === "vert-table " ? "selected" : ""} 
+    ${!resetting && reservedTables.size > 0 && selectedDate && !reservedTables.has("vert-table") ? "disabled" : ""}`}
+                                onMouseEnter={() => {
+                                    if (selectedDate && reservedTables.has("vert-table")) {
+                                        setHoveredTable("vert-table");
+                                    }
+                                }}
+                                onMouseMove={handleMouseMove}
+                                onMouseLeave={handleTableMouseLeave}
+                                title={getReservationTime("vert-table")}
+                                style={tablePositions["vert-table"]}
+
+                            >
+                                <div className="table-label-8"
+                                     style={{color: getLabelColor("vert-table")}}>{getTableLabel("vert-table")}</div>
+
+                                {[...Array(8)].map((_, i) => (
+                                    <div className={`chair vert-rect-chair chair-${i}`} key={i}></div>
+                                ))}
+                                <div className="table vert-rect"></div>
+                            </div>
+
+                            {/* Grid of small round tables bottom left */}
+                            <div className="left-table">
+                                {[...Array(9)].map((_, i) => {
+                                    const id = `left-table-${i + 1}`;
+                                    return (
+                                        <div
+                                            key={id}
+                                            className={`table-element ${noReservations ? "greyed" : ""}
+ table-group ${id} 
+        ${selectedTable === id ? "selected" : ""} 
+        ${!resetting && reservedTables.size > 0 && selectedDate && !reservedTables.has(id) ? "disabled" : ""}`}
+                                            onMouseEnter={() => {
+                                                if (selectedDate && reservedTables.has(id)) {
+                                                    setHoveredTable(id);
+                                                }
+                                            }}
+                                            onMouseMove={handleMouseMove}
+                                            onMouseLeave={handleTableMouseLeave}
+                                            style={leftTablePositions[i]}
+                                            title={getReservationTime(id)}
+                                        >
+                                            <div className="chair top"></div>
+                                            <div className="chair bottom"></div>
+                                            <div className="chair left"></div>
+                                            <div className="chair right"></div>
+                                            <div className="table round"></div>
+                                            <div className="table-label-4" style={{color: getLabelColor(id)}}>
+                                                {getTableLabel(id)}
+                                            </div>
+                                        </div>
+                                    );
+                                })}
+
+                            </div>
+
+                            {/* Right side grid of small round tables */}
+                            <div className="right-table">
+                                {[...Array(7)].map((_, i) => {
+                                    const id = `right-table-${i + 10}`;
+                                    return (
+                                        <div
+                                            key={id}
+                                            className={`table-element ${noReservations ? "greyed" : ""}
+ table-group ${id} 
+        ${selectedTable === id ? "selected" : ""} 
+        ${!resetting && reservedTables.size > 0 && selectedDate && !reservedTables.has(id) ? "disabled" : ""}`}
+                                            onMouseEnter={() => {
+                                                if (selectedDate && reservedTables.has(id)) {
+                                                    setHoveredTable(id);
+                                                }
+                                            }}
+                                            onMouseMove={handleMouseMove}
+                                            onMouseLeave={handleTableMouseLeave}
+                                            style={rightTablePositions[i]}
+                                            title={getReservationTime(id)}
+                                        >
+                                            <div className="chair top"></div>
+                                            <div className="chair bottom"></div>
+                                            <div className="chair left"></div>
+                                            <div className="chair right"></div>
+                                            <div className="table round"></div>
+                                            <div className="table-label-4" style={{color: getLabelColor(id)}}>
+                                                {getTableLabel(id)}
+                                            </div>
+                                        </div>
+                                    );
+                                })}
+                            </div>
+
+                            <div className="lines"></div>
+                            <div className="lines2"></div>
+                        </div>
+
+                        {selectedReservationTable && (
+                            <div className="reservation-details-box">
+                                {reservations
+                                    .filter(r => normalizeTableId(r.table_id) === selectedReservationTable)
+                                    .map(r => (
+                                        <div key={r.id}>
+                                            <p><b>Name:</b> {r.name}</p>
+                                            <p><b>From:</b> {r.from_time}</p>
+                                            <p><b>To:</b> {r.to_time}</p>
+                                            <p><b>People:</b> {r.people_count}</p>
+                                            <p><b>Comment:</b> {r.comment}</p>
+                                        </div>
+                                    ))}
+                            </div>
+                        )}
+
+                        {hoveredTable && (
+                            <div
+                                className="reservation-hover-box"
+                                style={{
+                                    top: Math.min(mousePos.y + 4, window.innerHeight - 320), // was +10 → +4
+                                    left: Math.min(mousePos.x + 6, window.innerWidth - 240), // was +10 → +6
+                                    position: "fixed",
+                                }}
+                                onMouseEnter={handleHoverBoxMouseEnter}
+                                onMouseLeave={handleHoverBoxMouseLeave}
+                            >
+                                {reservations
+                                    .filter((r) => normalizeTableId(r.table_id) === hoveredTable)
+                                    .map((r, i, arr) => (
+                                        <div key={i} className="hover-reservation-item">
+                                            <div className="in-line">
+                                                <div className="color-diff">Name:</div>
+                                                <div>{r.name}</div>
+                                            </div>
+                                            <div className="in-line">
+                                                <div className="color-diff">From:</div>
+                                                <div>{r.from_time}</div>
+                                            </div>
+                                            <div className="in-line">
+                                                <div className="color-diff">To:</div>
+                                                <div>{r.to_time}</div>
+                                            </div>
+                                            <div className="in-line">
+                                                <div className="color-diff">People:</div>
+                                                <div>{r.people_count}</div>
+                                            </div>
+                                            {i !== arr.length - 1 && <hr className="hover-divider"/>}
+                                        </div>
+                                    ))}
+                            </div>
+                        )}
+
+
+                        <div className="date-selector">
+
+                            <div className="reservation-box">
+
+                                <div className="date-select">Select date</div>
+
+                                <input
+                                    type="date"
+                                    className="date-picker-2"
+                                    onChange={(e) => {
+                                        const selected = e.target.value;
+                                        setSelectedDate(selected);
+                                        fetchReservationsForDate(selected);
+                                    }}
+                                />
+                            </div>
+
+                            <div className="color-change">----------- or -----------</div>
+
+                            <button
+                                className="table-btn"
+                                onClick={() => {
+                                    if (selectedDate) {
+                                        setSelectedReservationTable(true);
+                                        fetchReservations();
+                                    } else {
+                                        alert("Please select a date first!");
+                                    }
+                                }}
+                            >
+                                Show reservation
+                            </button>
+                        </div>
+
+                        {selectedReservationTable && selectedDate && (
+                            <div className="site-overlay">
+                                <div className="orange-back">
+
+                                    <div className="date-heading">{formatDate(selectedDate)}</div>
+
+                                    <div className="blue-back">
+                                        {reservations.length > 0 ? (
+                                            <>
+                                                <div className="heading-table">
+                                                    <div className="heading-item">Table</div>
+                                                    <div className="heading-item">Date</div>
+                                                    <div className="heading-item">From Time</div>
+                                                    <div className="heading-item">To Time</div>
+                                                    <div className="heading-item">Reservation Name</div>
+                                                    <div className="heading-item">People</div>
+                                                    <div className="heading-item">Comment</div>
+                                                </div>
+
+                                                {reservations.map((res, i) => (
+                                                    <div className="reservation-row" key={i}>
+                                                        <div className="reservation-item">{res.table_id}</div>
+                                                        <div className="reservation-item">{formatDate(res.date)}</div>
+                                                        <div className="reservation-item">{res.from_time}</div>
+                                                        <div className="reservation-item">{res.to_time}</div>
+                                                        <div className="reservation-item">{res.name}</div>
+                                                        <div className="reservation-item">{res.people_count}</div>
+                                                        <div className="reservation-item">{res.comment || "/"}</div>
+                                                    </div>
+                                                ))}
+                                            </>
+                                        ) : (
+                                            <div className="reservation-row-alert">No reservations for this date</div>
+                                        )}
+                                    </div>
+
+                                    <div className="btns-gap">
+                                        <button
+                                            className="back-reserve-btn"
+                                            onClick={() => {
+                                                // refreshReservationView();
+                                                setSelectedReservationTable(false);
+                                            }}
+                                        >
+                                            Back
+                                        </button>
+                                        <button className="print-reserve-btn" onClick={handlePrintReservations}>Print
+                                        </button>
+                                    </div>
+                                </div>
+                            </div>
+                        )}
+                    </div>
+                )}
+
+                {showOrderExistsModal && (
+                    <div className="modal-overlay">
+                        <div className="modal">
+                            <h3>Table {orderExistsTable.tableLabel} already has an order</h3>
+                            <p>Do you want to add more items to it, or choose another table?</p>
+                            <div className="modal-actions">
+                                <button
+                                    className="modal-btn add"
+                                    onClick={() => {
+                                        setSelected("Order Entry");
+                                        setSelectedOrder(orderExistsTable.existingOrder);
+                                        setShowOrderExistsModal(false);
+                                    }}
+                                >
+                                    Add More
+                                </button>
+                                <button
+                                    className="modal-btn cancel"
+                                    onClick={() => {
+                                        setSelectedTable(null);
+                                        setSelectedOrder(null);
+                                        setShowOrderExistsModal(false);
+                                    }}
+                                >
+                                    Choose Another
+                                </button>
+                            </div>
+                        </div>
+                    </div>
+                )}
+            </div>
+        </div>
+    )
+}
Index: Frontend/src/HomePage.css
===================================================================
--- Frontend/src/HomePage.css	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/HomePage.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,14 +1,61 @@
 /* PizzaLanding.css */
-@font-face {
-    font-family: 'Rubik Dirt';
-    src: url('./fonts/RubikDirt-Regular.ttf') format('truetype');
+body {
+    font-family: "Rubik Dirt", system-ui;
+    font-style: normal;
+}
+
+body::-webkit-scrollbar {
+    width: 10px;
+}
+
+body::-webkit-scrollbar-thumb {
+    background-color: #D82B2B;
+    border-radius: 35px;
+    cursor: grab;
+}
+
+
+/*@font-face {*/
+/*    font-family: "Rubik Dirt", system-ui;*/
+/*    font-style: normal;*/
+/*    font-weight: normal;*/
+/*}*/
+
+.admin-btn {
+    background: white;
+    color: #D82B2B;
+    /*font-weight: 600;*/
+    font-size: medium;
+    padding: 12px 28px;
+    border: 2px solid rgba(13, 27, 42, 0.77); /* soft gold border */
+    border-radius: 12px;
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+    cursor: pointer;
+    transition: all 0.3s ease;
+    font-family: "Rubik Dirt", system-ui;
+    font-style: normal;
     font-weight: normal;
-    font-style: normal;
-}
+    /*font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;*/
+}
+
+.admin-btn:hover {
+    background: #D82B2B;
+    color: white;
+    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.2);
+    transform: translateY(-2px);
+    font-size: larger;
+
+}
+
+.admin-btn:active {
+    transform: translateY(0);
+    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
+}
+
 
 .original-navigation-menu {
     display: flex;
     align-items: center;
-    padding: 20px 0px;
+    padding: 10px 0px 0px 0px;
     justify-content: space-around;
 }
@@ -20,8 +67,4 @@
 }
 
-body {
-    font-family: "Rubik Dirt", system-ui;
-    font-style: normal;
-}
 
 .pizza-container {
@@ -43,6 +86,6 @@
 }
 
-.sidebar-home{
-    padding: 30px 20px;
+.sidebar-home {
+    padding: 0px 20px;
     background-color: transparent;
     display: flex;
@@ -51,8 +94,10 @@
     justify-content: center;
 }
+
 .logo {
     width: 100px;
     height: 100px;
     cursor: pointer;
+    /*animation: wiggle 1.5s infinite, spin 2s linear infinite;*/
 }
 
@@ -64,7 +109,7 @@
     gap: 70px;
     align-items: center;
-    padding-top: 120px;
-    padding-bottom: 120px;
-    border-right: 1px solid white;
+    padding-top: 70px;
+    padding-bottom: 70px;
+    justify-content: space-evenly;
 }
 
@@ -82,6 +127,4 @@
 .main-content {
     flex: 1;
-    padding: 30px;
-    padding-right: 0px;
     position: relative;
 }
@@ -101,5 +144,5 @@
 }
 
-.login-btn {
+.login-btn2 {
     background-color: #d62828;
     font-family: 'Rubik Dirt', sans-serif;
@@ -114,5 +157,6 @@
 .logout-btn {
     color: #d62828;
-    background-image: url("./images/white-background.png");
+    /*background-image: url("./images/white-background.png");*/
+    background-color: white;
     font-family: 'Rubik Dirt', sans-serif;
     border: none;
@@ -123,4 +167,36 @@
 }
 
+.checkout-btn {
+    color: #d62828;
+    background-color: white;
+    border: none;
+    font-size: 15px;
+    padding: 10px 16px;
+    border-radius: 20px;
+    cursor: pointer;
+
+    position: relative;
+    /*position: fixed;*/
+    /*bottom: 50px;  !* distance from bottom *!*/
+    /*right: 50px;   !* distance from right *!*/
+    /*z-index: 1000; !* stays above other elements *!*/
+}
+
+.checkout-photo {
+    width: 25px;
+    height: 25px;
+}
+
+.cart-badge {
+    position: absolute;
+    top: -6px;
+    right: -6px;
+    background: #d62828;
+    color: white;
+    font-size: 12px;
+    font-weight: bold;
+    padding: 2px 6px;
+    border-radius: 50%;
+}
 
 .fontHome {
@@ -128,5 +204,5 @@
 }
 
-.login-btn:hover {
+.login-btn2:hover {
     background-color: #cc0000;
 }
@@ -170,5 +246,4 @@
 
 .order-btn {
-    margin-top: 30px;
     background-color: #d62828;
     border: none;
@@ -177,4 +252,5 @@
     border-radius: 30px;
     cursor: pointer;
+    font-family: 'Rubik Dirt', sans-serif;
 }
 
@@ -182,9 +258,4 @@
     background-color: #cc0000;
 }
-
-.image-section img {
-    height: 650px;
-}
-
 
 .dine-section {
@@ -211,5 +282,5 @@
 }
 
-.text-content button {
+.reserve-the-table {
     margin-top: 1rem;
     background-color: #d62828;
@@ -281,15 +352,4 @@
 }
 
-.promo-text button {
-    background-color: #d62828;
-    font-family: 'Rubik Dirt', sans-serif;
-    border: none;
-    font-size: 15px;
-    padding: 10px 16px;
-    border-radius: 20px;
-    cursor: pointer;
-    color: white;
-
-}
 
 .promo-images {
@@ -351,9 +411,6 @@
 
 .promotion-card {
-    margin-top: 3rem;
     background-image: url("images/red-background.jpg");
-    border-radius: 20px;
-    padding-top: 3.5rem;
-    padding-bottom: 1rem;
+    border-radius: 25px;
     width: 20%;
     color: white;
@@ -361,32 +418,21 @@
     position: relative;
     box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 20px;
+    padding: 20px 10px;
 }
 
 .promotion-card img {
     width: 70%;
+    height: 70%;
     border-radius: 100%;
     object-fit: cover;
-    position: absolute;
-    top: -60px;
-    left: 50%;
-    transform: translateX(-50%);
-    box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
 }
 
 .promotion-card p {
-    margin-top: 7rem;
-    margin-bottom: 1rem;
-    font-size: 1rem;
-}
-
-.promotion-card button {
-    background-color: #d62828;
-    font-family: 'Rubik Dirt', sans-serif;
-    border: none;
-    font-size: 15px;
-    padding: 10px 16px;
-    border-radius: 20px;
-    cursor: pointer;
-    color: white;
+    font-size: larger;
+    margin: 0px;
 }
 
@@ -427,4 +473,750 @@
 }
 
-/*----*/
-
+
+/* ========== General Image Responsiveness ========== */
+img {
+    max-width: 100%;
+    height: auto;
+}
+
+/* Make logo stay fixed size on all screens */
+.logo {
+    width: 100px; /* fixed width */
+    height: 100px; /* fixed height */
+    cursor: pointer;
+    max-width: none !important; /* override the global img max-width */
+    flex-shrink: 0 !important; /* prevent shrinking in flex layouts */
+}
+
+/* Default (desktop) */
+.original-navigation-menu {
+    display: flex;
+    align-items: center;
+    justify-content: space-between; /* logo left, actions right */
+    flex-wrap: wrap; /* allow wrapping when needed */
+    padding: 10px 20px;
+    gap: 20px; /* space between left/right parts */
+}
+
+.navigation-bar {
+    display: flex;
+    align-items: center;
+    gap: 20px; /* logo + admin button gap */
+}
+
+.nav-right-part {
+    display: flex;
+    align-items: center;
+    flex-direction: row;
+    gap: 20px; /* phone + buttons gap */
+}
+
+.order-bar {
+    position: fixed;
+    top: 150px;
+    left: 0;
+    display: flex;
+    flex-direction: column;
+    gap: 10px;
+    z-index: 999;
+}
+
+.order-section {
+    position: relative;
+    background: #e74c3c33;
+    border-radius: 0 8px 8px 0;
+    cursor: pointer;
+}
+
+.order-label-2 {
+    display: flex;
+    justify-content: center;
+    font-style: italic;
+    font-variant-caps: all-small-caps;
+    font-size: x-large;
+    padding: 10px;
+    color: white;
+    text-align: center;
+    margin-top: -5px;
+
+}
+
+.order-list {
+    position: absolute;
+    top: 0;
+    left: 100%;
+    width: 300px;
+    max-height: 400px;
+    overflow-y: auto;
+    background: #ffffffd8;
+    border-radius: 20px;
+    box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.2);
+    padding: 10px;
+    opacity: 0;
+    transform: translateX(-20px);
+    pointer-events: none;
+    transition: opacity 0.3s, transform 0.3s;
+}
+
+.order-section:hover .order-list {
+    opacity: 1;
+    transform: translateX(0);
+    pointer-events: auto;
+}
+
+.order-item-2 {
+    border-bottom: 1px solid #ddd;
+    font-size: 14px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    background: white;
+    border-radius: 170px;
+    padding: 15px 25px;
+}
+
+.feedback-btn {
+    position: fixed;
+    right: 35px;
+    bottom: 35px;
+    background-color: white;
+    color: #d62828;
+    border: none;
+    padding: 14px 18px;
+    border-radius: 30px;
+    font-size: 18px;
+    cursor: pointer;
+    z-index: 1000;
+    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
+    font-family: 'Rubik Dirt', sans-serif;
+    font-weight: normal;
+}
+
+.feedback-btn:hover {
+    background-color: #d62828;
+    color: white;
+}
+
+/* OVERLAY */
+.feedback-overlay {
+    position: fixed;
+    inset: 0;
+    background: rgba(0, 0, 0, 0.55);
+    backdrop-filter: blur(4px);
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    z-index: 3000;
+    animation: fadeIn 0.25s ease-in-out;
+}
+
+/* POPUP CARD */
+.feedback-popup {
+    background: linear-gradient(145deg, #ffffff, #f9f9f9);
+    width: 380px;
+    padding: 15px 50px;
+    border-radius: 18px;
+    box-shadow: 0 25px 50px rgba(0, 0, 0, 0.35);
+    animation: slideUp 0.3s ease-out;
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+/* TITLE */
+.feedback-popup h3 {
+    text-align: center;
+    margin-bottom: 6px;
+    font-size: 20px;
+    font-weight: normal;
+    color: #d62828;
+}
+
+/* SUBTITLE */
+.feedback-subtitle {
+    text-align: center;
+    font-size: 13px;
+    color: #777;
+    margin-bottom: 18px;
+}
+
+/* TEXTAREA */
+.feedback-textarea {
+    width: 100%;
+    height: 120px;
+    resize: none;
+    padding: 12px;
+    border-radius: 12px;
+    border: 1px solid #ddd;
+    font-size: 14px;
+    outline: none;
+    transition: all 0.2s ease;
+    font-family: 'Rubik Dirt', sans-serif;
+}
+
+.feedback-textarea:focus {
+    border-color: #d62828;
+    box-shadow: 0 0 0 2px rgba(214, 40, 40, 0.15);
+    font-family: 'Rubik Dirt', sans-serif;
+}
+
+/* ACTIONS */
+.feedback-actions {
+    display: flex;
+    gap: 10px;
+    margin-top: 18px;
+}
+
+/* SEND BUTTON */
+.feedback-send {
+    flex: 1;
+    background: #d62828;
+    color: white;
+    border: none;
+    padding: 10px 30px;
+    border-radius: 12px;
+    font-weight: normal;
+    cursor: pointer;
+    transition: all 0.2s ease;
+    font-family: 'Rubik Dirt', sans-serif;
+}
+
+.feedback-send:hover {
+    background: #b71c1c;
+    transform: translateY(-1px);
+
+}
+
+/* CANCEL BUTTON */
+.feedback-cancel {
+    flex: 1;
+    background: #ececec;
+    color: #333;
+    border: none;
+    padding: 10px 30px;
+    border-radius: 12px;
+    font-weight: normal;
+    cursor: pointer;
+    transition: all 0.2s ease;
+    font-family: 'Rubik Dirt', sans-serif;
+}
+
+.feedback-cancel:hover {
+    background: #d6d6d6;
+    transform: translateY(-1px);
+}
+
+/* ANIMATIONS */
+@keyframes fadeIn {
+    from {
+        opacity: 0;
+    }
+    to {
+        opacity: 1;
+    }
+}
+
+@keyframes slideUp {
+    from {
+        opacity: 0;
+        transform: translateY(25px);
+    }
+    to {
+        opacity: 1;
+        transform: translateY(0);
+    }
+}
+
+.fullscreen-promo {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100vw;
+    height: 100vh;
+    background: linear-gradient(135deg, #fff7e6, #ffe6e6);
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    z-index: 2000;
+    flex-direction: column;
+    text-align: center;
+    overflow: hidden;
+}
+
+.promo-content {
+    position: relative;
+    padding: 40px 60px;
+    border-radius: 20px;
+    background: #fff;
+    box-shadow: 0 10px 50px rgba(0, 0, 0, 0.5);
+    animation: popIn 0.5s ease-out;
+}
+
+.promo-line {
+    margin: 10px 0;
+}
+
+.big-text {
+    font-size: 4rem;
+    font-weight: bold;
+    color: #d62828;
+    animation: pulse 1s infinite;
+}
+
+.medium-text {
+    font-size: 2.5rem;
+    font-weight: bold;
+    color: #f77f00;
+    animation: pulse 1.2s infinite alternate;
+}
+
+.small-text {
+    font-size: 1.8rem;
+    color: #6a040f;
+    animation: pulse 1.5s infinite alternate-reverse;
+}
+
+.promo-close-btn {
+    position: absolute;
+    top: 10px;
+    right: 10px;
+    background: #d62828;
+    color: white;
+    border: none;
+    border-radius: 50%;
+    width: 40px;
+    height: 40px;
+    font-size: 1.5rem;
+    cursor: pointer;
+}
+
+/* Пулс ефект */
+@keyframes pulse {
+    0% {
+        transform: scale(1);
+    }
+    50% {
+        transform: scale(1.1);
+    }
+    100% {
+        transform: scale(1);
+    }
+}
+
+@keyframes popIn {
+    0% {
+        transform: scale(0.8);
+        opacity: 0;
+    }
+    100% {
+        transform: scale(1);
+        opacity: 1;
+    }
+}
+
+
+.promo-timer-fixed {
+    position: fixed;
+    top: 35px;
+    left: 230px;
+    background: rgba(255, 0, 0, 0.8);
+    color: white;
+    font-size: 1.5rem;
+    font-weight: bold;
+    padding: 10px 20px;
+    border-radius: 10px;
+    z-index: 9999;
+    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
+}
+
+@keyframes floatUp {
+    0% {
+        transform: translateY(100vh) rotate(0deg);
+    }
+    100% {
+        transform: translateY(-100vh) rotate(360deg);
+    }
+}
+
+
+@media (max-width: 1024px) {
+    .pizza-container {
+        flex-direction: column; /* stack sidebar above main */
+    }
+
+    .sidebar-home {
+        width: 100%;
+        background-color: transparent; /* or a background if you want */
+        align-items: center;
+        padding: 0px;
+    }
+
+    .nav-links {
+        width: 100%;
+        flex-direction: row;
+        flex-wrap: wrap;
+        gap: 30px;
+        padding: 10px 0;
+        border-right: none;
+        border-bottom: 1px solid white;
+    }
+
+    .main-content {
+        width: 100%;
+    }
+
+    .original-navigation-menu {
+        text-align: center;
+        gap: 10px;
+    }
+
+    .navigation-bar {
+        justify-content: center;
+    }
+
+    .nav-right-part {
+        justify-content: center;
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+    }
+
+
+    .content-wrapper {
+        flex-direction: row;
+        align-items: center;
+        padding: 0px 0px 0px 20px;
+    }
+
+    .text-section {
+        max-width: 90%;
+        text-align: center;
+    }
+
+    .promo-section {
+        flex-direction: column;
+        align-items: center;
+        text-align: center;
+    }
+
+    .promo-text {
+        max-width: 90%;
+        margin-left: 0;
+        margin-bottom: 2rem;
+    }
+
+    .promo-images {
+        width: 100%;
+        justify-content: center;
+    }
+
+    .promotion-card {
+        width: 40%;
+    }
+
+    .main-image {
+        width: 60%;
+    }
+
+}
+
+/* Mobile (≤768px) */
+@media (max-width: 768px) {
+    .nav-links a {
+        font-size: small;
+    }
+
+    .text-section .h1-part p {
+        font-size: 20px;
+        margin-bottom: 0px;
+    }
+
+    .dine-text {
+        font-size: 20px;
+    }
+
+    .text-section .p-part p {
+        font-size: 12px;
+    }
+
+    #root > div > div.dine-section > div.text-content > p:nth-child(2) {
+        font-size: 12px;
+    }
+
+
+    .nav-links {
+        gap: 20px;
+        padding: 10px 0;
+        font-size: large;
+    }
+
+    .image-section img {
+        height: auto;
+    }
+
+    .gallery {
+        flex-direction: column;
+    }
+
+    .main-image {
+        width: 100%;
+        margin-right: 0;
+        margin-bottom: 1rem;
+    }
+
+    .gallery-small {
+        grid-template-columns: 1fr 1fr;
+    }
+
+    .promotion-cards {
+        flex-direction: column;
+        align-items: center;
+    }
+
+    .promotion-card {
+        width: 80%;
+        margin-top: 4rem;
+    }
+
+    .footer {
+        flex-direction: column;
+        text-align: center;
+    }
+
+    .navigation-bar,
+    .nav-right-part {
+        flex-direction: row;
+        gap: 10px;
+    }
+
+    .phone {
+        font-size: x-small;
+    }
+
+    .logo {
+        width: 80px;
+        height: 80px;
+    }
+
+    .text-section {
+        text-align: center;
+    }
+
+    .login-btn2,
+    .logout-btn,
+    .checkout-btn,
+    .reserve-the-table {
+        font-size: x-small; /* shrink font */
+        padding: 4px 10px; /* shrink padding */
+        border-radius: 14px; /* slightly smaller radius */
+    }
+}
+
+
+@media (max-width: 480px) {
+    .logo {
+        width: 80px;
+        height: 80px;
+        max-width: none !important;
+        flex-shrink: 0 !important;
+    }
+
+    .fontHome {
+        font-size: large;
+    }
+
+    .promo-text-heading {
+        font-size: 28px;
+    }
+
+    .text-section .h1-part p {
+        font-size: 15px;
+        margin-top: 0px;
+    }
+
+    .dine-text {
+        font-size: 15px;
+    }
+
+    .text-section .p-part p {
+        font-size: 7px;
+    }
+
+    #root > div > div.dine-section > div.text-content > p:nth-child(2) {
+        font-size: 7px;
+    }
+
+    .promo-ingredients img {
+        width: 60%;
+    }
+
+    .gallery-small {
+        grid-template-columns: 1fr;
+    }
+
+    .promotion-card {
+        width: 90%;
+    }
+
+    .original-navigation-menu {
+        padding: 10px 0px 0px 0px;
+        gap: 0px;
+    }
+
+    .navigation-bar,
+    .nav-right-part {
+        flex-direction: row;
+        gap: 5px;
+    }
+
+    .navigation-bar {
+        padding: 0px;
+    }
+
+    .logo {
+        width: 70px;
+        height: 70px;
+    }
+
+    .nav-links a {
+        font-size: x-small;
+    }
+
+    .phone {
+        font-size: 6px;
+    }
+
+    .login-btn2,
+    .logout-btn,
+    .checkout-btn,
+    .order-btn, .reserve-the-table {
+        font-size: 8px;
+        padding: 2px 7px;
+        border-radius: 14px;
+    }
+
+    .checkout-photo {
+        width: 10px;
+        height: 10px;
+    }
+
+    .admin-btn {
+        font-size: 12px;
+        padding: 6px 12px;
+    }
+
+    .cart-badge {
+        right: 12px;
+        font-size: 6px;
+    }
+
+    .gallery-small {
+        grid-template-columns: 1fr 1fr;
+        display: grid;
+        justify-items: center;
+    }
+}
+
+@media (max-width: 310px) {
+
+
+    .nav-links {
+        gap: 0px;
+        padding: 0px;
+    }
+
+    .nav-links a {
+        font-size: 8px;
+    }
+
+    .login-btn2,
+    .logout-btn,
+    .checkout-btn,
+    .order-btn,
+    .reserve-the-table {
+        font-size: 4px;
+        padding: 2px 5px;
+        border-radius: 14px;
+    }
+
+    .phone {
+        font-size: 4px; /* was 20px */
+    }
+
+    .nav-right-part {
+        gap: 3px;
+    }
+
+    /*.dine-section{*/
+    /*    padding: 10px;*/
+    /*}*/
+}
+
+
+@media (max-width: 220px) {
+
+    .logo {
+        width: 15px;
+        height: 15px;
+    }
+
+    .phone {
+        font-size: 2px;
+    }
+
+    .navigation-bar {
+        padding: 0px;
+    }
+
+    .nav-right-part {
+        gap: 3px;
+    }
+
+    .checkout-photo {
+        width: 10px;
+        height: 10px;
+    }
+
+    .cart-badge {
+        font-size: 5px;
+        padding: 2px 3px;
+    }
+
+    .login-btn2, .logout-btn, .checkout-btn, .order-btn, .reserve-the-table {
+        font-size: 3px;
+        padding: 2px 2px;
+        border-radius: 14px;
+    }
+
+    .text-section .p-part p {
+        font-size: 2px;
+    }
+
+    .text-section .h1-part p {
+        font-size: 6px;
+        margin-top: 0px;
+    }
+
+    .dine-text {
+        font-size: 6px;
+    }
+
+    #root > div > div.dine-section > div.text-content > p:nth-child(2) {
+        font-size: 3px;
+    }
+
+    .nav-links {
+        gap: 0px;
+        padding: 0px;
+    }
+
+    .nav-links a {
+        font-size: 5px;
+    }
+}
+
+
+html {
+    scroll-behavior: smooth;
+}
Index: Frontend/src/HomePage.js
===================================================================
--- Frontend/src/HomePage.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/HomePage.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,3 +1,3 @@
-import React from "react";
+import React, {useState, useEffect} from 'react';
 import "./HomePage.css";
 import pizzaImage from "./images/pizza-image.png";
@@ -8,4 +8,5 @@
 import restoraunt4 from "./images/restoraunt-4.png";
 import restoraunt5 from "./images/restoraunt-5.png";
+import cart from "./images/shopping-cart.png";
 import basil from "./images/basil.png";
 import pizza_secondlayer from "./images/pizza-second-layer.png";
@@ -24,20 +25,145 @@
     const navigate = useNavigate();
 
+    const [cartCount, setCartCount] = useState(0);
+
+    const addToCart = () => {
+        setCartCount(cartCount + 1);
+    };
+
+    const [cartItems, setCartItems] = useState([]);
+
+    useEffect(() => {
+        const storedCart = JSON.parse(localStorage.getItem("cartItems")) || [];
+        setCartItems(storedCart);
+        setCartCount(storedCart.length);
+    }, []);
+
+    const goToCheckout = () => {
+        navigate("/checkout", {state: {cartItems}});
+    };
+
+    const [pendingOrders, setPendingOrders] = useState([]);
+    const [finishedOrders, setFinishedOrders] = useState([]);
+
+    const [showFeedback, setShowFeedback] = useState(false);
+    const [feedbackMessage, setFeedbackMessage] = useState("");
+
+    useEffect(() => {
+        if (!loggedUser) return;
+
+        async function loadOrders() {
+            try {
+                const res = await fetch("http://127.0.0.1:8000/api/get-orders");
+                const orders = await res.json();
+
+                const myOrders = orders.filter(o => o.employee_name === loggedUser.username);
+
+                const pending = myOrders.filter(o => o.status === "pending");
+                const finished = myOrders.filter(o => o.status === "finished");
+
+                setPendingOrders(pending);
+                setFinishedOrders(finished);
+
+            } catch (err) {
+                console.error("Error loading orders:", err);
+            }
+        }
+
+        loadOrders();
+    }, [loggedUser]);
+
+    const sendFeedback = async () => {
+        if (!feedbackMessage.trim()) {
+            alert("Message cannot be empty!");
+            return;
+        }
+
+        try {
+            const res = await fetch("http://127.0.0.1:8000/api/send-message/", {
+                method: "POST",
+                headers: {"Content-Type": "application/json"},
+                body: JSON.stringify({
+                    sender: loggedUser?.username || "Guest",
+                    content: feedbackMessage
+                })
+            });
+            alert("Message sent to administrator");
+            setFeedbackMessage("");
+            setShowFeedback(false);
+        } catch (err) {
+            console.error("Error sending message:", err);
+            alert("Failed to send message.");
+        }
+    };
+
+    const [promo, setPromo] = useState(null);
+    const [showPromo, setShowPromo] = useState(false);
+
+    useEffect(() => {
+        const promoClosed = sessionStorage.getItem("promoClosed");
+        if (promoClosed) return;
+
+        async function fetchPromo() {
+            try {
+                const res = await fetch("http://127.0.0.1:8000/api/get-daily-code/");
+                if (!res.ok) throw new Error("Failed to fetch promo");
+
+                const data = await res.json();
+                if (data.code) {
+                    setPromo(data);
+                    setTimeLeft(Math.floor(data.time_left));
+                    setShowPromo(true);
+                }
+            } catch (err) {
+                console.error("Promo error:", err);
+            }
+        }
+
+        fetchPromo();
+    }, []);
+
+    const [timeLeft, setTimeLeft] = useState(300);
+    useEffect(() => {
+        if (!showPromo) return;
+
+        const timer = setInterval(() => {
+            setTimeLeft(prev => {
+                if (prev <= 1) {
+                    clearInterval(timer);
+                    setShowPromo(false);
+                    return 0;
+                }
+                return prev - 1;
+            });
+        }, 1000);
+
+        return () => clearInterval(timer);
+    }, [showPromo]);
+
+
+    const closePromo = () => {
+        sessionStorage.setItem("promoClosed", "true");
+        setShowPromo(false);
+    };
+
+
     return (
+
         <div>
             <div className="background">
                 <div className="original-navigation-menu">
                     <div className="navigation-bar">
+                        {loggedUser?.role === "administrator" && (
+                            <button className="admin-btn" onClick={() => navigate("/admin_panel")}>
+                                Admin Panel
+                            </button>
+                        )}
+                        {loggedUser?.role === "employee" && (
+                            <button className="admin-btn" onClick={() => navigate("/employee_panel")}>
+                                Employee Panel
+                            </button>
+                        )}
                         <div className="logodiv">
                             <img className="logo" src={PACrustLogo} alt={PACrustLogo} onClick={() => navigate("/")}/>
-                        </div>
-                        <div className="divpart-menu" onClick={() => navigate("/")}>
-                            <p className="divpartP">HOME</p>
-                        </div>
-                        <div className="divpart-menu" onClick={() => navigate("/menu")}>
-                            <p className="divpartP">MENU</p>
-                        </div>
-                        <div className="divpart-menu">
-                            <p className="divpartP">ABOUT US</p>
                         </div>
                     </div>
@@ -48,5 +174,5 @@
                         )}
                         <button
-                            className="login-btn"
+                            className="login-btn2"
                             onClick={() => {
                                 if (loggedUser) {
@@ -59,4 +185,12 @@
                             {loggedUser ? loggedUser.username : "LOG IN / SIGN IN"}
                         </button>
+                        {loggedUser && loggedUser.role === "client" && (
+                            <div>
+                                <button className="checkout-btn" onClick={goToCheckout}>
+                                    <img src={cart} className="checkout-photo"/>
+                                    {cartCount > 0 && <span className="cart-badge">{cartCount}</span>}
+                                </button>
+                            </div>
+                        )}
                     </div>
                 </div>
@@ -65,5 +199,6 @@
                         <nav className="nav-links">
                             <div>
-                                <a className="fontHome" onClick={() => navigate("/menu")}>MENU</a>
+                                <a className="fontHome" onClick={() => navigate("/menu")}>MENU
+                                </a>
                             </div>
                             <div>
@@ -71,8 +206,17 @@
                             </div>
                             <div>
-                                <a className="fontHome" href="#">PROMOTIONS</a>
+                                <a className="fontHome" onClick={(e) => {
+                                    e.preventDefault();
+                                    const section = document.getElementById("promotions");
+                                    if (section) {
+                                        section.scrollIntoView({behavior: "smooth"});
+                                    }
+                                }}
+                                >
+                                    PROMOTIONS
+                                </a>
                             </div>
                             <div>
-                                <a className="fontHome" href="#">ABOUT US</a>
+                                <a className="fontHome" onClick={() => navigate("/about_us")}>ABOUT US</a>
                             </div>
                         </nav>
@@ -121,4 +265,62 @@
             </div>
 
+            {loggedUser && (
+                <div className="order-bar">
+                    <div className="order-section">
+                        <div className="order-label-2">Pending</div>
+                        <div className="order-list">
+                            {pendingOrders.length === 0 ? (
+                                <p>No pending orders</p>
+                            ) : (
+                                pendingOrders.map(order => (
+                                    <div
+                                        key={order.id}
+                                        className="order-item-2"
+                                        style={{
+                                            backgroundColor: order.order_type === "Dine In" ? "#f1f1f1" : "#d62828",
+                                            color: order.order_type === "Dine In" ? "black" : "white",
+                                            padding: "10px",
+                                            borderRadius: "8px",
+                                            marginBottom: "8px"
+                                        }}
+                                    >
+                                        Order #{order.id} – {order.subtotal} € –
+                                        {order.order_type === "Dine In" ? order.table_name : "Take Away"}
+                                    </div>
+
+                                ))
+                            )}
+                        </div>
+                    </div>
+
+                    <div className="order-section">
+                        <div className="order-label-2">Finished</div>
+                        <div className="order-list">
+                            {finishedOrders.length === 0 ? (
+                                <p>No finished orders</p>
+                            ) : (
+                                finishedOrders.map(order => (
+                                    <div
+                                        key={order.id}
+                                        className="order-item-2"
+                                        style={{
+                                            backgroundColor: order.order_type === "Dine In" ? "#f1f1f1" : "#d62828",
+                                            color: order.order_type === "Dine In" ? "black" : "white",
+                                            padding: "10px",
+                                            borderRadius: "8px",
+                                            marginBottom: "8px"
+                                        }}
+                                    >
+                                        Order #{order.id} – {order.subtotal} € –
+                                        {order.order_type === "Dine In" ? order.table_name : "Take Away"}
+                                    </div>
+
+                                ))
+                            )}
+                        </div>
+                    </div>
+                </div>
+            )}
+
 
             <div className="dine-section">
@@ -132,4 +334,5 @@
                     </p>
                     <button
+                        className="reserve-the-table"
                         onClick={() => {
                             if (loggedUser) {
@@ -170,6 +373,44 @@
                         at first bite.
                     </p>
-                    <div className="promo-button">
+                    <div>
+                        <button className="order-btn"
+                                onClick={() => {
+                                    if (loggedUser) {
+                                        navigate("/menu");
+                                    } else {
+                                        navigate("/login");
+                                    }
+                                }}
+                        >
+                            ORDER NOW
+                        </button>
+                    </div>
+
+
+                </div>
+
+
+                <div className="promo-images">
+                    <img src={pizza_secondlayer} alt="Pizza" className="main-promo-image"/>
+                    <div className="promo-ingredients">
+                        <div>
+                            <img src={mozzarella} alt="Cheese"/>
+                            <img src={oil} alt="Olive Oil"/>
+                        </div>
+                        <div>
+                            <img src={tomato} alt="Tomato Sauce"/>
+                            <img src={basil} alt="Basil Leaves"/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div className="promotions" id="promotions">
+                <div className="promotions-title">PROMOTIONS</div>
+                <div className="promotion-cards">
+                    <div className="promotion-card">
+                        <img src={vegetarian} alt="Vegetarian Pizza"/>
+                        <p>VEGETARIAN</p>
                         <button
+                            className="order-btn"
                             onClick={() => {
                                 if (loggedUser) {
@@ -183,30 +424,9 @@
                         </button>
                     </div>
-
-
-                </div>
-
-
-                <div className="promo-images">
-                    <img src={pizza_secondlayer} alt="Pizza" className="main-promo-image"/>
-                    <div className="promo-ingredients">
-                        <div>
-                            <img src={mozzarella} alt="Cheese"/>
-                            <img src={oil} alt="Olive Oil"/>
-                        </div>
-                        <div>
-                            <img src={tomato} alt="Tomato Sauce"/>
-                            <img src={basil} alt="Basil Leaves"/>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div className="promotions">
-                <div className="promotions-title">PROMOTIONS</div>
-                <div className="promotion-cards">
                     <div className="promotion-card">
-                        <img src={vegetarian} alt="Vegetarian Pizza"/>
-                        <p>VEGETARIAN</p>
+                        <img src={peperoni} alt="Pepperoni Pizza"/>
+                        <p>PEPERONI SPECIAL</p>
                         <button
+                            className="order-btn"
                             onClick={() => {
                                 if (loggedUser) {
@@ -221,7 +441,8 @@
                     </div>
                     <div className="promotion-card">
-                        <img src={peperoni} alt="Pepperoni Pizza"/>
-                        <p>PEPERONI SPECIAL</p>
+                        <img src={margaritta} alt="Margarita Pizza"/>
+                        <p>MARGARITTA</p>
                         <button
+                            className="order-btn"
                             onClick={() => {
                                 if (loggedUser) {
@@ -235,21 +456,7 @@
                         </button>
                     </div>
-                    <div className="promotion-card">
-                        <img src={margaritta} alt="Margarita Pizza"/>
-                        <p>MARGARITTA</p>
-                        <button
-                            onClick={() => {
-                                if (loggedUser) {
-                                    navigate("/menu");
-                                } else {
-                                    navigate("/login");
-                                }
-                            }}
-                        >
-                            ORDER NOW
-                        </button>
-                    </div>
                 </div>
             </div>
+
             <footer className="footer">
                 <div className="footer-left">
@@ -271,6 +478,48 @@
                 </div>
             </footer>
+
+            <button
+                className="feedback-btn"
+                onClick={() => setShowFeedback(true)}
+            >
+                Send a Message
+            </button>
+
+            {showFeedback && (
+                <div className="feedback-overlay">
+                    <div className="feedback-popup">
+                        <h3>Send us a message</h3>
+                        <p className="feedback-subtitle">
+                            Have a question or idea? We’d love to hear from you.
+                        </p>
+
+                        <textarea
+                            className="feedback-textarea"
+                            placeholder="Type your message here..."
+                            value={feedbackMessage}
+                            onChange={e => setFeedbackMessage(e.target.value)}
+                        />
+
+                        <div className="feedback-actions">
+                            <button
+                                className="feedback-send"
+                                onClick={sendFeedback}
+                            >
+                                Send
+                            </button>
+
+                            <button
+                                className="feedback-cancel"
+                                onClick={() => setShowFeedback(false)}
+                            >
+                                Close
+                            </button>
+                        </div>
+                    </div>
+                </div>
+            )}
         </div>
 
-    );
+    )
+        ;
 }
Index: Frontend/src/LoginPage.css
===================================================================
--- Frontend/src/LoginPage.css	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/LoginPage.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -30,8 +30,8 @@
 }
 
-.main-content{
-}
-
-.original-navigation-login{
+.main-content {
+}
+
+.original-navigation-login {
     display: flex;
     align-items: center;
@@ -170,5 +170,4 @@
 }
 
-
 .sign-in {
     color: #d62828;
@@ -179,2 +178,72 @@
     cursor: pointer;
 }
+
+
+.custom-alert {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.6); /* dark overlay */
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    z-index: 9999;
+}
+
+.custom-alert-content {
+    background: #fff;
+    padding: 20px 30px;
+    border-radius: 35px;
+    text-align: center;
+    max-width: 300px;
+    width: 80%;
+    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
+}
+
+.custom-alert-content p {
+    margin-bottom: 15px;
+    font-size: 16px;
+}
+
+.custom-alert-content button {
+    padding: 8px 16px;
+    background: #e63946;
+    border: none;
+    color: #fff;
+    border-radius: 6px;
+    cursor: pointer;
+    transition: background 0.3s;
+}
+
+.custom-alert-content button:hover {
+    background: #d62828;
+}
+.nsm7Bb-HzV7m-LgbsSe {
+    box-sizing: border-box;
+    -webkit-transition: background-color .218s, border-color .218s;
+    transition: background-color .218s, border-color .218s;
+    -moz-user-select: none;
+    -webkit-user-select: none;
+    -ms-user-select: none;
+    -webkit-appearance: none;
+    background-color: #fff;
+    background-image: none;
+    border: 1px solid #dadce0;
+    color: #3c4043;
+    cursor: pointer;
+    font-family: "Google Sans", arial, sans-serif;
+    font-size: 14px;
+    height: 40px;
+    letter-spacing: .25px;
+    outline: none;
+    overflow: hidden;
+    padding: 0 12px;
+    position: relative;
+    text-align: center;
+    vertical-align: middle;
+    white-space: nowrap;
+    width: auto;
+    border-radius: 100px;
+}
Index: Frontend/src/LoginPage.js
===================================================================
--- Frontend/src/LoginPage.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/LoginPage.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -7,4 +7,5 @@
 import {useNavigate} from "react-router-dom";
 
+import {GoogleLogin} from "@react-oauth/google";
 
 export default function LoginPage({setLoggedUser}) {
@@ -12,4 +13,8 @@
     const [username, setUsername] = useState("");
     const [password, setPassword] = useState("");
+
+    const [alertMessage, setAlertMessage] = useState("");
+
+    const [showAlert, setShowAlert] = useState(false);
 
     const handleLogin = async (e) => {
@@ -20,9 +25,6 @@
                 password
             });
-            console.log("Одговор од серверот:", response.data); // Додај го ова
-
 
             if (response.status === 200) {
-                alert("Успешно си најавен")
                 localStorage.setItem('access', response.data.access);
                 localStorage.setItem('refresh', response.data.refresh);
@@ -32,11 +34,34 @@
                 });
                 setLoggedUser(userResponse.data);
-                navigate("/")
+
+                if (userResponse.data.role === 'administrator') {
+                    navigate("/admin_panel")
+                } else {
+                    navigate("/")
+                }
             }
         } catch (err) {
-            console.error("Грешка:", err); // Додај го ова
-            alert("Најавата не успеа. Провери ги податоците.")
+            setAlertMessage("Login failed. Please check your details.");
+            setShowAlert(true);
         }
     }
+
+    const handleGoogleLogin = async (googleToken) => {
+        try {
+            const response = await axios.post(
+                "http://localhost:8000/api/google-login/",
+                {token: googleToken}
+            );
+
+            localStorage.setItem("access", response.data.access);
+            localStorage.setItem("refresh", response.data.refresh);
+            setLoggedUser(response.data.user);
+            navigate("/");
+        } catch (err) {
+            setAlertMessage("Google login failed");
+            setShowAlert(true);
+        }
+    };
+
 
     return (
@@ -88,11 +113,18 @@
                                     <div className="separator">
                                         <hr/>
-                                        <span>Or log in with</span>
+                                        <span>Or</span>
                                         <hr/>
                                     </div>
 
                                     <div className="social-buttons">
-                                        <button className="google-btn">G</button>
-                                        <button className="facebook-btn">f</button>
+                                        <GoogleLogin
+                                            onSuccess={credentialResponse => {
+                                                console.log("Google credential:", credentialResponse);
+                                                handleGoogleLogin(credentialResponse.credential);
+                                            }}
+                                            onError={() => {
+                                                console.log("Login Failed");
+                                            }}
+                                        />
                                     </div>
 
@@ -111,4 +143,12 @@
                 </main>
             </div>
+            {showAlert && (
+                <div className="custom-alert">
+                    <div className="custom-alert-content">
+                        <p>{alertMessage}</p>
+                        <button onClick={() => setShowAlert(false)}>OK</button>
+                    </div>
+                </div>
+            )}
         </div>
     )
Index: Frontend/src/MenuPage.css
===================================================================
--- Frontend/src/MenuPage.css	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/MenuPage.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,7 +1,7 @@
-@font-face {
-    font-family: 'Rubik Dirt';
-    src: url('./fonts/RubikDirt-Regular.ttf') format('truetype');
+@import url('https://fonts.googleapis.com/css2?family=Rubik+Dirt&display=swap');
+
+body {
+    font-family: "Rubik Dirt", system-ui, sans-serif;
     font-weight: normal;
-    font-style: normal;
 }
 
@@ -28,4 +28,10 @@
 }
 
+html, body, #root {
+    height: 100%;
+    margin: 0;
+    padding: 0;
+}
+
 .spin-fade-out {
     animation: spinFadeOut 0.7s forwards;
@@ -37,13 +43,15 @@
 
 body {
-    font-family: "Rubik Dirt", system-ui;
+    font-family: "Rubik Dirt", system-ui !important;
     font-style: normal;
-
 }
 
 .menu-page {
-    color: white;
-    height: 100%;
+    min-height: 100%;
+    display: flex;
+    flex-direction: column;
+    position: relative; /* so absolute children position relative to this */
     background: url("./images/red-background.jpg");
+    background-size: cover;
     background-repeat: no-repeat;
 }
@@ -125,5 +133,5 @@
 
 .pizza-image-wrapper {
-    height: 310px;
+    height: 290px;
     overflow: hidden;
     display: flex;
@@ -193,11 +201,11 @@
     background-color: red;
     color: white;
-    font-weight: bold;
     border: none;
-    padding: 12px 24px;
+    padding: 8px 16px;
     border-radius: 8px;
     cursor: pointer;
     font-size: 1rem;
-
+    font-family: "Rubik Dirt", system-ui, sans-serif;
+    font-weight: normal;
 }
 
@@ -215,5 +223,5 @@
     height: 300px;
     overflow: visible;
-    margin-top: 200px;
+    margin-top: 24px;
 }
 
@@ -229,5 +237,986 @@
 }
 
-.main-content {
-    padding: 0;
-}
+.pizza-name-circle-wrapper {
+    height: 380px;
+    overflow: hidden;
+    pointer-events: none;
+    z-index: 2;
+    display: flex;
+    justify-content: center;
+    margin-top: 140px;
+}
+
+.pizza-name-circle {
+    width: 750px;
+    height: 750px;
+    transform: translateY(-150px); /* shift SVG up to center top half */
+}
+
+.pizza-name-circle textPath {
+    font-size: 22px;
+    fill: #ccc;
+    text-anchor: middle;
+    transition: fill 0.3s;
+}
+
+.pizza-name-circle textPath.active {
+    fill: red;
+    font-weight: bold;
+}
+
+.pizza-name-circle textPath {
+    text-anchor: middle;
+    dominant-baseline: middle;
+}
+
+.customize-overlay {
+    position: fixed;
+    inset: 0;
+    background-color: rgba(0, 0, 0, 0.3);
+    z-index: 1000;
+}
+
+.customize-pizza {
+    position: absolute;
+    object-fit: contain;
+    animation: slideToLeft 0.8s forwards ease-out;
+    z-index: 1001;
+}
+
+.customize-pizza.reverse {
+    animation: slideBackToOrigin 0.8s forwards ease-in;
+}
+
+/* Modal container */
+.customize-modal {
+    position: absolute;
+    top: 50%;
+    transform: translateY(-50%);
+    width: 500px;
+    height: 80vh;
+    background: #fff;
+    padding: 20px 20px 0px 20px;
+    z-index: 1002;
+    border-radius: 10px;
+    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
+    overflow-y: auto;
+    display: flex;
+    flex-direction: column;
+    gap: 20px;
+}
+
+/* Slide-in from right */
+.customize-modal.slide-in {
+    animation: slideInFromRight 0.5s forwards ease-out;
+}
+
+/* Slide-out to right */
+.customize-modal.slide-out {
+    animation: slideOutToRight 0.5s forwards ease-in;
+}
+
+.customize-modal::-webkit-scrollbar {
+    width: 10px;
+}
+
+.customize-modal::-webkit-scrollbar-thumb {
+    background-color: #d62828;
+    border-radius: 35px;
+}
+
+
+/* Close button */
+.close-modal-btn {
+    position: absolute;
+    top: 15px;
+    right: 20px;
+    font-size: 28px;
+    font-weight: bold;
+    background: none;
+    border: none;
+    cursor: pointer;
+    z-index: 10;
+    color: #2F3349;
+}
+
+.ingredients-grid {
+    flex: 1;
+    display: grid;
+    grid-template-columns: repeat(3, 1fr);
+    gap: 25px;
+    padding-bottom: 80px; /* space above footer */
+}
+
+.ingredient-card {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.ingredient-img {
+    width: 120px;
+    height: 120px;
+    background: #ddd;
+    border-radius: 6px;
+    margin-bottom: 10px;
+}
+
+.ingredient-name {
+    font-weight: normal;
+    margin-bottom: 8px;
+    text-align: center;
+}
+
+.quantity-controls {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+    color: #2F3349;
+}
+
+.quantity-controls button {
+    padding: 4px 10px;
+    font-size: 16px;
+    border: 1px solid #d62828;
+    background-color: white;
+    color: #d62828;
+    cursor: pointer;
+    border-radius: 35px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.submit-btn {
+    background: #d62828;
+    color: #fff;
+    border: none;
+    padding: 12px 40px;
+    border-radius: 30px;
+    font-size: 18px;
+    cursor: pointer;
+    font-family: "Rubik Dirt", system-ui, sans-serif;
+    font-weight: normal;
+}
+
+
+.ingredients-grid {
+    display: grid;
+    grid-template-columns: repeat(3, 1fr);
+    gap: 25px;
+    padding-bottom: 100px; /* space for sticky footer */
+}
+
+.ingredient-card {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.ingredient-img {
+    width: 120px;
+    height: 120px;
+    background: #ddd;
+    border-radius: 6px;
+    margin-bottom: 10px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    overflow: hidden;
+}
+
+.ingredient-img img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.placeholder {
+    width: 100%;
+    height: 100%;
+    background: #ccc;
+}
+
+.ingredient-name {
+    font-weight: normal;
+    margin-bottom: 8px;
+    text-align: center;
+}
+
+.quantity-controls {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+}
+
+.modal-footer {
+    position: sticky;
+    bottom: 0;
+    background: #fff;
+    padding: 15px 0;
+    display: flex;
+    justify-content: flex-end;
+    border-top: 1.5px solid #eee;
+}
+
+
+.ingredient-card {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    text-align: center;
+}
+
+.ingredient-name {
+    font-weight: normal;
+    margin-top: 8px;
+    margin-bottom: 4px;
+}
+
+.ingredient-price {
+    font-size: 14px;
+    color: #444;
+    margin-bottom: 10px;
+}
+
+.quantity-controls {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+}
+
+
+.modal-overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    z-index: 900; /* ensure behind modal content */
+}
+
+.size-selector-overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    z-index: 1000;
+}
+
+.size-selector-modal {
+    background: #fff;
+    border-radius: 10px;
+    padding: 20px 40px;
+    text-align: center;
+    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
+}
+
+.size-selector-modal h2 {
+    color: #d62828;
+}
+
+.size-options {
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    flex-wrap: wrap; /* allows them to stack if screen is too small */
+    gap: 20px;
+    margin-top: 15px;
+}
+
+.size-option,
+.size-option2,
+.size-option3 {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    flex: 1; /* allow equal width growth */
+    min-width: 140px; /* prevent shrinking too small */
+}
+
+.size-option2 img {
+    max-width: 100%; /* scale based on container */
+    width: 180px; /* default size */
+    height: auto;
+    cursor: pointer;
+    transition: transform 0.3s;
+}
+
+.size-option3 img {
+    max-width: 100%; /* scale based on container */
+    width: 190px; /* default size */
+    height: auto;
+    cursor: pointer;
+    transition: transform 0.3s;
+}
+
+.size-option img {
+    max-width: 100%; /* scale based on container */
+    width: 140px; /* default size */
+    height: auto;
+    cursor: pointer;
+    transition: transform 0.3s;
+}
+
+.size-options img:hover {
+    transform: scale(1.1);
+}
+
+.modal-footer {
+    display: flex;
+    justify-content: space-between; /* price left, buttons right */
+    align-items: center;
+    padding: 15px;
+    border-top: 1px solid #ccc;
+}
+
+.modal-price {
+    font-size: 1.3rem;
+    color: #e63946;
+}
+
+.modal-price span span {
+    font-size: 1rem;
+    color: #2F3349;
+    margin-left: 5px;
+}
+
+
+.modal-actions-menu {
+    display: flex;
+    gap: 10px;
+}
+
+#root > div > div.customize-overlay > div > div h2 {
+    text-align: center;
+    font-weight: bold;
+    font-size: x-large;
+    color: #2F3349;
+    margin: 0px;
+}
+
+.clear-ingredients {
+    color: #d62828;
+    background-color: #fff;
+    border: 3px solid #d62828;
+    padding: 12px 20px;
+    border-radius: 30px;
+    font-size: 18px;
+    cursor: pointer;
+    font-family: "Rubik Dirt", system-ui, sans-serif;
+    font-weight: normal;
+}
+
+.ingredients-container h3 {
+    color: #2F3349;
+    text-align: center;
+    font-weight: normal;
+    margin: 0px 0px 10px 0px;
+}
+
+.ingredients-list-menu {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 15px;
+    justify-content: center;
+    overflow-y: auto;
+    max-height: 550px;
+}
+
+.ingredients-list-menu::-webkit-scrollbar {
+    width: 5px;
+}
+
+.ingredients-list-menu::-webkit-scrollbar-thumb {
+    background-color: #d62828;
+    border-radius: 2px;
+}
+
+
+.ingredient-item-menu {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    border: 3px solid #2F3349;
+    border-radius: 8px;
+    width: 140px;
+    text-align: center;
+    transition: all 0.2s ease-in-out;
+    cursor: pointer;
+    gap: 5px;
+    padding: 5px 0px;
+}
+
+.ingredient-item-menu:hover {
+    background: #d62828;
+}
+
+.ingredient-item-menu.selected {
+    background: #d62828;
+}
+
+.ingredient-item-menu:hover .ingredient-name-menu {
+    color: white;
+    font-weight: normal;
+}
+
+.ingredient-item-menu:hover .ingredient-price-menu {
+    color: white;
+}
+
+.ingredient-item-menu:hover .quantity-controls span {
+    color: white;
+}
+
+.ingredient-img-menu {
+    background: transparent;
+    width: 110px;
+    height: 110px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+
+.pizza-canvas {
+    position: relative; /* Crucial: ingredients position relative to pizza */
+    width: 400px; /* Match your JS inline width */
+    height: 400px; /* Match your JS inline height */
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    z-index: 1001; /* Behind modal but above background */
+}
+
+.ingredients-custom {
+    position: relative; /* Crucial: ingredients position relative to pizza */
+    width: 800px; /* Match your JS inline width */
+    height: 500px;
+    margin-left: 100px;
+}
+
+.ingredients-custom img.customize-pizza {
+    width: 100%;
+    height: auto;
+    object-fit: contain;
+    z-index: 1;
+}
+
+.ingredient-on-pizza {
+    pointer-events: none;
+    /*transition: all 0.3s ease-in-out;*/
+    /*z-index: 2; !* on top of the pizza *!*/
+    position: absolute;
+    width: 60px;
+    height: 60px;
+    pointer-events: none; /* so clicks pass through */
+    z-index: 1003; /* above pizza but below modal */
+    transition: top 0.8s ease-in, left 0.8s ease-in, transform 0.8s ease-in;
+}
+
+.customize-pizza {
+    position: absolute;
+    top: 50%;
+    left: 50%; /* center instead of 25% */
+    transform: translate(-50%, -50%) scale(2);
+    object-fit: contain;
+    animation: slideToLeft 0.8s forwards ease-out;
+    z-index: 1001;
+}
+
+.favorites-bar {
+    position: fixed;
+    top: 120px;
+    left: 20px;
+    z-index: 10000;
+}
+
+.favorites-section {
+    position: relative;
+}
+
+.favorites-label {
+    background: #d62828;
+    color: white;
+    padding: 10px 16px;
+    border-radius: 10px;
+    font-size: 15px;
+    cursor: pointer;
+    user-select: none;
+    white-space: nowrap;
+    box-shadow: 0 6px 15px rgba(0, 0, 0, 0.2);
+}
+
+/* dropdown */
+.favorites-list {
+    position: absolute;
+    top: 110%;
+    left: 0;
+    width: 260px;
+    background: white;
+    border-radius: 12px;
+    padding: 10px;
+    box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);
+
+    opacity: 0;
+    visibility: hidden;
+    transform: translateY(-10px);
+    transition: all 0.25s ease;
+}
+
+.favorites-section:hover .favorites-list {
+    opacity: 1;
+    visibility: visible;
+    transform: translateY(0);
+}
+
+.favorite-item {
+    display: flex;
+    align-items: center;
+    gap: 10px;
+    padding: 6px;
+    border-radius: 8px;
+    cursor: pointer;
+    transition: background 0.2s ease, transform 0.2s ease;
+}
+
+.favorite-item:hover {
+    background: #f5f5f5;
+    transform: translateX(4px);
+}
+
+.favorite-item img {
+    width: 45px;
+    height: 45px;
+    border-radius: 8px;
+    object-fit: cover;
+}
+
+.favorite-info {
+    display: flex;
+    flex-direction: column;
+    cursor: unset;
+}
+
+.favorite-name {
+    font-size: 14px;
+    font-weight: 500;
+    color: #222;
+    width: 120px;
+    cursor: unset;
+}
+
+.favorite-price {
+    font-size: 12px;
+    color: #555;
+    cursor: unset;
+}
+
+.empty-favorites {
+    font-size: 13px;
+    color: #888;
+    text-align: center;
+    padding: 10px;
+}
+
+.favorite-btn {
+    background: transparent;
+    border: none;
+    font-size: 22px;
+    cursor: pointer;
+    color: #bbb;
+    transition: transform 0.2s ease, color 0.2s ease;
+    padding: 5px;
+}
+
+.favorite-btn:hover {
+    color: gold;
+    transform: scale(1.15);
+}
+
+.favorite-btn.active {
+    color: gold;
+}
+
+.remove-fav {
+    background: none;
+    border: none;
+    font-size: 14px;
+    color: #bbb;
+    cursor: pointer;
+    opacity: 0;
+    transition: 0.2s;
+    padding: 0px;
+    margin: 0px;
+}
+
+.favorite-item:hover .remove-fav {
+    opacity: 1;
+}
+
+.remove-fav:hover {
+    color: red;
+}
+
+.fav-cart-btn {
+    cursor: pointer;
+}
+
+
+/* Tablet */
+@media (max-width: 768px) {
+    .size-option img,
+    .size-option2 img {
+        width: 140px;
+    }
+}
+
+/* Mobile */
+@media (max-width: 480px) {
+    .size-options {
+        flex-direction: column; /* stack vertically */
+    }
+
+    .size-option img,
+    .size-option2 img {
+        width: 120px;
+    }
+}
+
+
+@keyframes slideInFromRight {
+    from {
+        right: -600px;
+        opacity: 0;
+    }
+    to {
+        right: 50px;
+        opacity: 1;
+    }
+}
+
+@keyframes slideOutToRight {
+    from {
+        right: 50px;
+        opacity: 1;
+    }
+    to {
+        right: -600px;
+        opacity: 0;
+    }
+}
+
+@keyframes slideToLeft {
+    0% {
+        transform: scale(2);
+        right: 30px;
+    }
+    100% {
+        top: 120%;
+        transform: translate(-50%, -50%) scale(2);
+    }
+}
+
+@keyframes slideBackToOrigin {
+    0% {
+        top: 50%;
+        left: 25%;
+        transform: translate(-50%, -50%) scale(1.9);
+    }
+    100% {
+        transform: scale(2);
+    }
+}
+
+.menu-grid {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+}
+
+.menu-tabs {
+    display: flex;
+    justify-content: center;
+    flex-wrap: wrap;
+    gap: 15px;
+    margin: 0px 0px 20px 0;
+}
+
+.tab {
+    background-color: #cc0000;
+    color: white;
+    border: 2px solid #d62828;
+    border-radius: 15px;
+    padding: 5px 30px;
+    font-size: 16px;
+    cursor: pointer;
+    transition: all 0.2s ease;
+    font-family: "Rubik Dirt", system-ui;
+    font-style: normal;
+}
+
+.tab:hover {
+    background-color: white;
+    color: #d62828;
+}
+
+.tab.active {
+    background-color: white;
+    color: #d62828;
+    transform: scale(1.05);
+}
+
+.salads-carousel {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    position: relative;
+    margin-top: 80px;
+    gap: 20px;
+}
+
+.salad-card {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 10px;
+}
+
+.salad-card img {
+    height: 180px;
+}
+
+.salad-card h3 {
+    margin: 0px;
+    font-size: x-large;
+    font-weight: normal;
+}
+
+.salad-card .ingredients {
+    font-size: medium;
+    color: #b22222;
+    margin: 0px;
+}
+
+.salad-card .price {
+    font-size: x-large;
+    margin: 0px;
+    border-bottom: 2px solid;
+}
+
+.add-to-cart-2 {
+    background-color: #d62828;
+    color: white;
+    border: 2px solid #d62828;
+    border-radius: 25px;
+    padding: 8px 20px;
+    cursor: pointer;
+    transition: 0.3s;
+    font-family: "Rubik Dirt", system-ui !important;
+    font-style: normal;
+}
+
+.salad-card .add-to-cart-2:hover {
+    background-color: white;
+    color: #d62828;
+    border: 2px solid #d62828;
+}
+
+/* Arrows */
+.arrow {
+    font-size: 3rem;
+    color: white;
+    background: none;
+    border: none;
+    cursor: pointer;
+    transition: 0.3s;
+    z-index: 10;
+}
+
+.arrow:hover {
+    color: #ffd700;
+}
+
+/* Optional: animation effect when clicking arrows */
+.carousel-container-2.slide-left .salad-card {
+    animation: slideLeft 0.5s ease forwards;
+}
+
+.carousel-container-2.slide-right .salad-card {
+    animation: slideRight 0.5s ease forwards;
+}
+
+@keyframes slideLeft {
+    from {
+        transform: translateX(0);
+    }
+    to {
+        transform: translateX(-100px);
+    }
+}
+
+@keyframes slideRight {
+    from {
+        transform: translateX(0);
+    }
+    to {
+        transform: translateX(100px);
+    }
+}
+
+.carousel-container-2 {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    gap: 25px;
+    overflow: hidden;
+    width: 1000px;
+    padding: 50px;
+    transition: transform 0.4s ease-in-out;
+}
+
+.carousel-container-2.slide-left {
+    transform: translateX(150px);
+}
+
+.carousel-container-2.slide-right {
+    transform: translateX(-150px);
+}
+
+
+/* Salad cards */
+.salad-card {
+    background-color: #f8f8f8;
+    border-radius: 25px;
+    text-align: center;
+    padding: 25px;
+    color: #d62828;
+    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
+    transition: all 0.4s ease-in-out;
+    flex: 0 0 260px;
+    opacity: 0.7;
+    transform: scale(0.9);
+}
+
+.salad-card.active {
+    transform: scale(1.1) translateY(-10px);
+    opacity: 1;
+    z-index: 2;
+    cursor: pointer;
+    background-color: white;
+}
+
+.card-footer {
+    display: flex;
+    flex-direction: column;
+    gap: 10px;
+    width: 100%;
+    align-items: center;
+    animation: fadeIn 0.4s ease-in;
+}
+
+.salad-comment {
+    width: 90%;
+    min-height: 50px;
+    border-radius: 12px;
+    border: 2px solid #d62828;
+    padding: 8px 12px;
+    font-size: 14px;
+    resize: none;
+    outline: none;
+    transition: all 0.3s ease;
+    color: #d62828;
+    background-color: #fff8f8;
+    font-family: "Rubik Dirt", system-ui !important;
+    font-style: normal;
+}
+
+.salad-comment:focus {
+    border-color: red;
+    box-shadow: 0 0 10px rgba(234, 123, 123, 0.4);
+}
+
+/* Fade in effect */
+@keyframes fadeIn {
+    from {
+        opacity: 0;
+        transform: translateY(10px);
+    }
+    to {
+        opacity: 1;
+        transform: translateY(0);
+    }
+}
+
+.special-offer-footer {
+    background-color: #fff8f2;
+    border-top: 2px dashed #ff7f50;
+    padding: 10px;
+}
+
+.offer-dropdown {
+    margin: 6px 0;
+    padding: 10px 14px;
+    border-radius: 25px;
+    border: 1px solid #ffb68b; /* warm border to match theme */
+    background-color: #fff2e6; /* soft peach background */
+    width: 100%;
+    font-size: 15px;
+    color: #333;
+    outline: none;
+    transition: all 0.2s ease;
+    appearance: none; /* hides default arrow */
+    background-image: url("data:image/svg+xml;utf8,<svg fill='coral' height='18' viewBox='0 0 24 24' width='18' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/></svg>");
+    background-repeat: no-repeat;
+    background-position: right 12px center;
+    background-size: 14px;
+}
+
+.offer-dropdown:hover,
+.offer-dropdown:focus {
+    border-color: #ff7f50;
+    background-color: #ffe9dc;
+    box-shadow: 0 0 5px rgba(255, 127, 80, 0.3);
+}
+
+.h4-heading {
+    margin: 5px 0px 5px 0px;
+    font-weight: normal;
+}
+
+.scroll-div {
+    max-height: 75px;
+    overflow-y: auto;
+}
+
+.scroll-div::-webkit-scrollbar {
+    width: 4px;
+}
+
+.scroll-div::-webkit-scrollbar-thumb {
+    background-color: #d62828;
+    border-radius: 35px;
+}
+
+.salads-carousel-special {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    position: relative;
+    gap: 20px;
+}
+
+.salads-carousel-special .salad-card {
+    padding: 5px 25px;
+    gap: 0px;
+}
Index: Frontend/src/MenuPage.js
===================================================================
--- Frontend/src/MenuPage.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/MenuPage.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,25 +1,106 @@
 import React, {useState, useEffect} from 'react';
 import './MenuPage.css';
-import pizzaData from './PizzaData';
 import PACrustLogo from "./images/pacrustlogo.png"
 import {useNavigate} from "react-router-dom";
+import mushroom from "./images/mushroom.png"
+import sausage from "./images/sausage.png"
+import extracheese from "./images/extracheese.png"
+import olives from "./images/olives.png"
+import bacon from "./images/Bacon.png"
+import sourcream from "./images/sourcream.png"
+import cart from "./images/shopping-cart.png";
+
 
 export default function MenuPage({loggedUser, logout}) {
+
+    const [selectedSection, setSelectedSection] = useState("pizzas");
+    const [pizzas, setPizzas] = useState([]);
+    const [salads, setSalads] = useState([]);
+    const [drinks, setDrinks] = useState([]);
+    const [desserts, setDesserts] = useState([]);
+    const [sauces, setSauces] = useState([]);
+    const [specialoffers, setSpecialOffers] = useState([]);
+
+    useEffect(() => {
+        const endpoints = [
+            {
+                url: "http://127.0.0.1:8000/api/pizzas/",
+                setter: (data) => {
+                    const images = require.context('./images', false, /\.(png|jpe?g|svg)$/);
+
+                    const formatted = data.map(pizza => {
+                        const filename = pizza.image?.split('/').pop() || '';
+                        let imageSrc = null;
+
+                        if (pizza.image?.startsWith('/media/') || pizza.image?.startsWith('http')) {
+                            imageSrc = `http://127.0.0.1:8000${pizza.image.replace('http://127.0.0.1:8000', '')}`;
+                        } else {
+                            try {
+                                imageSrc = images(`./${filename}`);
+                            } catch {
+                                console.warn(`Local pizza image not found: ${filename}`);
+                                imageSrc = null;
+                            }
+                        }
+
+                        const stickers = (pizza.stickers || []).map(s => {
+                            const sFilename = s.image?.split('/').pop() || '';
+                            if (s.image?.startsWith('/media/') || s.image?.startsWith('http')) {
+                                return `http://127.0.0.1:8000${s.image.replace('http://127.0.0.1:8000', '')}`;
+                            } else {
+                                try {
+                                    return images(`./${sFilename}`);
+                                } catch {
+                                    console.warn(`Local sticker not found: ${sFilename}`);
+                                    return null;
+                                }
+                            }
+                        }).filter(Boolean);
+
+                        return {...pizza, image: imageSrc, stickers};
+                    });
+
+                    setPizzas(formatted);
+                }
+            },
+            {url: "http://127.0.0.1:8000/api/salads/", setter: setSalads},
+            {url: "http://127.0.0.1:8000/api/drinks/", setter: setDrinks},
+            {url: "http://127.0.0.1:8000/api/desserts/", setter: setDesserts},
+            {url: "http://127.0.0.1:8000/api/sauces/", setter: setSauces},
+            {url: "http://127.0.0.1:8000/api/special-offers/", setter: setSpecialOffers},
+        ];
+
+        endpoints.forEach(({url, setter}) => {
+            fetch(url)
+                .then(res => res.json())
+                .then(data => setter(data))
+                .catch(err => console.error(`Error fetching from ${url}:`, err));
+        });
+    }, []);
+
     const [currentIndex, setCurrentIndex] = useState(0);
     const [rotation, setRotation] = useState(0);
-
-    const [targetIndex, setTargetIndex] = useState(1);
+    const [nameCircleRotation, setNameCircleRotation] = useState(0);
     const [isFrontImage, setIsFrontImage] = useState(true);
     const [frontImageIndex, setFrontImageIndex] = useState(0);
-    const [backImageIndex, setBackImageIndex] = useState(1 % pizzaData.length);
+    const [backImageIndex, setBackImageIndex] = useState(1);
+
+
+    const [cartItems, setCartItems] = useState(() => {
+        const saved = localStorage.getItem("cartItems");
+        return saved ? JSON.parse(saved) : [];
+    });
+
+    useEffect(() => {
+        localStorage.setItem("cartItems", JSON.stringify(cartItems));
+        setCartCount(cartItems.length);
+    }, [cartItems]);
 
     const handleNext = () => {
         if (isTransitioning) return;
-
         setIsTransitioning(true);
         setRotation(prev => prev + 180);
-
-        const nextIndex = (currentIndex + 1) % pizzaData.length;
-
+        setNameCircleRotation(prev => prev - angleStep);
+        const nextIndex = (currentIndex + 1) % pizzas.length;
         if (isFrontImage) {
             setBackImageIndex(nextIndex);
@@ -27,25 +108,19 @@
             setFrontImageIndex(nextIndex);
         }
-
         setTimeout(() => {
             setCurrentIndex(nextIndex);
             setIsFrontImage(!isFrontImage);
-
-            const newStickers = pizzaData[nextIndex].stickers || [];
+            const newStickers = pizzas[nextIndex].stickers || [];
             setStickerPositions(generateRandomPositions(newStickers.length));
-
             setIsTransitioning(false);
         }, 700);
     };
 
-
     const handlePrev = () => {
         if (isTransitioning) return;
-
         setIsTransitioning(true);
         setRotation(prev => prev - 180);
-
-        const prevIndex = (currentIndex - 1 + pizzaData.length) % pizzaData.length;
-
+        setNameCircleRotation(prev => prev + angleStep);
+        const prevIndex = (currentIndex - 1 + pizzas.length) % pizzas.length;
         if (isFrontImage) {
             setBackImageIndex(prevIndex);
@@ -53,10 +128,9 @@
             setFrontImageIndex(prevIndex);
         }
-
         setTimeout(() => {
             setCurrentIndex(prevIndex);
             setIsFrontImage(!isFrontImage);
 
-            const newStickers = pizzaData[prevIndex].stickers || [];
+            const newStickers = pizzas[prevIndex].stickers || [];
             setStickerPositions(generateRandomPositions(newStickers.length));
 
@@ -65,10 +139,6 @@
     };
 
-
     const [isTransitioning, setIsTransitioning] = useState(false);
-    const [displayIndex, setDisplayIndex] = useState(currentIndex);
     const [stickerPositions, setStickerPositions] = useState([]);
-    const currentPizza = pizzaData[currentIndex];
-    const nextPizza = pizzaData[targetIndex];
     const navigate = useNavigate();
     const CONTAINER_WIDTH = 800;
@@ -76,8 +146,6 @@
     const STICKER_SIZE = 100;
     const PADDING = 10;
-
     const generateRandomPositions = (num) => {
         const positions = [];
-
         const isOverlapping = (newPos) => {
             return positions.some(pos => {
@@ -86,16 +154,12 @@
                 const x2 = (parseFloat(newPos.left) / 100) * CONTAINER_WIDTH;
                 const y2 = (parseFloat(newPos.top) / 100) * CONTAINER_HEIGHT;
-
                 const dx = Math.abs(x1 - x2);
                 const dy = Math.abs(y1 - y2);
-
                 return dx < STICKER_SIZE + PADDING && dy < STICKER_SIZE + PADDING;
             });
         };
-
         for (let i = 0; i < 7; i++) {
             let tries = 0;
             let newPos;
-
             do {
                 const top = Math.random() * 80 + '%';
@@ -103,5 +167,4 @@
                     ? (Math.random() * 30) + '%'
                     : (60 + Math.random() * 30) + '%';
-
                 newPos = {
                     top,
@@ -109,142 +172,1405 @@
                     rotation: Math.random() * 360,
                 };
-
                 tries++;
                 if (tries > 100) break;
             } while (isOverlapping(newPos));
-
             positions.push(newPos);
         }
-
         return positions;
     };
 
     useEffect(() => {
-        const firstPizza = 0;
-        setCurrentIndex(firstPizza);
-        setFrontImageIndex(firstPizza);
-        setBackImageIndex((firstPizza + 1) % pizzaData.length);
-
-        const newStickers = pizzaData[firstPizza].stickers || [];
-        setStickerPositions(generateRandomPositions(newStickers.length));
+        if (pizzas.length > 0) {
+            const firstPizza = 0;
+            setCurrentIndex(firstPizza);
+            setFrontImageIndex(firstPizza);
+            setBackImageIndex((firstPizza + 1) % pizzas.length);
+            const newStickers = pizzas[firstPizza]?.stickers || [];
+            setStickerPositions(generateRandomPositions(newStickers.length));
+        }
+    }, [pizzas]); // 🔁 run after pizzas are fetched
+
+    const n = pizzas.length;
+    const angleStep = 360 / n;
+
+    const [isCustomizing, setIsCustomizing] = useState(false);
+    const [showCustomizeModal, setShowCustomizeModal] = useState(false);
+    const backImageRef = React.useRef(null);
+    const carouselPizzaRef = React.useRef(null);
+    const [pizzaStartRect, setPizzaStartRect] = React.useState({top: 0, left: 0, width: 0, height: 0});
+    const [isClosing, setIsClosing] = React.useState(false);
+
+    const items = [
+        {name: "Mushrooms", price: 0.25, image: mushroom, spawnCount: 8, size: 5, maxSpawn: 3},
+        {name: "Pepperoni", price: 0.5, image: sausage, spawnCount: 3, size: 8, maxSpawn: 3},
+        {name: "Extra cheese", price: 0.5, image: extracheese, spawnCount: -1, size: 7, maxSpawn: 3},
+        {name: "Olives", price: 0.3, image: olives, spawnCount: 3, size: 5, maxSpawn: 3},
+        {name: "Bacon", price: 0.6, image: bacon, spawnCount: 2, size: 18, maxSpawn: 3},
+        {name: "Sour cream", price: 0.4, image: sourcream, spawnCount: 1, size: 10, maxSpawn: 1},
+    ];
+
+    const [quantities, setQuantities] = useState(items.map(() => 0));
+    useEffect(() => {
+        if (showCustomizeModal) {
+            setQuantities(items.map(() => 0));
+        }
+    }, [showCustomizeModal]);
+    const increaseQuantity = (idx, item) => {
+        if (quantities[idx] < items[idx].maxSpawn) {
+            const newQuantities = [...quantities];
+            newQuantities[idx] += 1;
+            setQuantities(newQuantities);
+            handleAddIngredient(item)
+            setSpawnedIngredients([
+                ...spawnedIngredients,
+                {...items[idx], id: Date.now() + Math.random()},
+            ]);
+        }
+    };
+
+    const decreaseQuantity = (idx) => {
+        if (quantities[idx] > 0) {
+            const newQuantities = [...quantities];
+            newQuantities[idx] -= 1;
+            setQuantities(newQuantities);
+            const reversed = [...spawnedIngredients].reverse();
+            const indexToRemove = reversed.findIndex((ing) => ing.name === items[idx].name);
+            if (indexToRemove !== -1) {
+                reversed.splice(indexToRemove, 1);
+                setSpawnedIngredients(reversed.reverse());
+            }
+        }
+    };
+    const [ingredientCounts, setIngredientCounts] = useState(
+        items.map(() => 0)
+    );
+    const [selectedIngredients, setSelectedIngredients] = useState([]);
+
+    const handleAddIngredient = (item) => {
+        const ingredientName = item.name.toLowerCase().replace(/\s+/g, "");
+        const count = item.spawnCount || 1;
+        const size = item.size || 5;
+
+        const newIngredients = spawnIngredient(ingredientName, count, {
+            size,
+            image: item.image
+        });
+
+        setSelectedIngredients((prev) => [...prev, ...newIngredients]);
+    };
+
+    const getRandomPosition = (topMin, topMax, leftMin, leftMax) => {
+        const top = (Math.random() * (topMax - topMin) + topMin).toFixed(2) + "%";
+        const left = (Math.random() * (leftMax - leftMin) + leftMin).toFixed(2) + "%";
+        return {top, left};
+    };
+
+    const spawnIngredient = (name, count, options = {}) => {
+        const ingredients = [];
+        for (let i = 0; i < count; i++) {
+            const rotation = Math.floor(Math.random() * 360);
+            const pos = getRandomPosition(30, 73, 15, 37);
+            if (name === "sourcream") {
+                ingredients.push({
+                    name,
+                    top: "-20%",
+                    left: "50%",
+                    targetTop: "50%",
+                    targetLeft: "25%",
+                    size: options.size || 10,
+                    rotation,
+                    image: options.image,
+                    animate: true,
+                });
+            } else {
+                const pos = getRandomPosition(30, 73, 15, 37);
+                ingredients.push({
+                    name,
+                    top: "-20%",
+                    left: "50%",
+                    targetTop: pos.top,
+                    targetLeft: pos.left,
+                    size: options.size || 5,
+                    rotation,
+                    image: options.image,
+                    animate: true,
+                });
+            }
+        }
+        return ingredients;
+    };
+    useEffect(() => {
+        const timeout = setTimeout(() => {
+            setSelectedIngredients((prev) =>
+                prev.map((ing) =>
+                    ing.animate
+                        ? {...ing, top: ing.targetTop, left: ing.targetLeft, animate: false}
+                        : ing
+                )
+            );
+        }, 50);
+        return () => clearTimeout(timeout);
+    }, [selectedIngredients]);
+    const [spawnedIngredients, setSpawnedIngredients] = useState([]);
+
+    const handleCloseModal = () => {
+        setSelectedIngredients((prev) =>
+            prev.map((ing) => ({
+                ...ing,
+                top: "-20%",
+                left: "50%",
+                isExiting: true,
+            }))
+        );
+
+        setTimeout(() => {
+            setSelectedIngredients([]);
+            setIsClosing(true);
+            setTimeout(() => {
+                setShowCustomizeModal(false);
+                setIsCustomizing(false);
+                setIsClosing(false);
+            }, 500);
+        }, 800);
+    };
+
+    const handleAddToCart = (size) => {
+        const pizza = selectedPizza || pizzas[currentIndex];
+        if (!pizza) return;
+
+        const basePrice = pizza.price || 0;
+
+        const newItem = {
+            id: pizza.id,
+            name: pizza.name,
+            size: size,
+            price: basePrice,
+            quantity: 1,
+            image: pizza.image,
+        };
+
+        setCartItems((prev) => {
+            const updated = [...prev, newItem];
+            localStorage.setItem("cartItems", JSON.stringify(updated));
+            return updated;
+        });
+        setCartCount((prev) => prev + 1);
+        setShowSizeSelector(false);
+        console.log(`Added "${pizza.name}" (${size}) to cart.`);
+        setSelectedPizza(null); 
+    };
+
+
+    const [showSizeSelector, setShowSizeSelector] = useState(false);
+    const [pendingAction, setPendingAction] = useState(null);
+    const handleSizeSelect = (size) => {
+        setSelectedSize(size);
+
+        if (pendingAction === "customize") {
+            const rect = carouselPizzaRef.current?.getBoundingClientRect();
+            if (!rect) return;
+
+            setPizzaStartRect({
+                top: rect.top,
+                left: rect.left,
+                width: rect.width,
+                height: rect.height,
+            });
+
+            setIsCustomizing(true);
+            setSelectedIngredients([]);
+            setQuantities(items.map(() => 0));
+            setSpawnedIngredients([]);
+
+            setTimeout(() => {
+                setShowCustomizeModal(true);
+            }, 300);
+
+            setPendingAction(null);
+        } else if (pendingAction === "add") {
+            handleAddToCart(size);
+            setPendingAction(null);
+        }
+
+        setShowSizeSelector(false);
+    };
+
+    const [selectedSize, setSelectedSize] = useState(null);
+    const [selectedPrice, setSelectedPrice] = useState(null);
+    const calculateExtraCost = () => {
+        const extrasCost = items.reduce((total, item, index) => {
+            return total + (quantities[index] * (item.price || 0));
+        }, 0);
+
+        const backendCost = ingredients.reduce((total, ing) => {
+            const qty = ingredientQuantities[ing.id] || 0;
+            return total + (qty * Number(ing.price || 0));
+        }, 0);
+
+        return extrasCost + backendCost;
+    };
+
+
+    const [cartCount, setCartCount] = useState(0);
+
+    const addToCart = () => {
+        setCartCount(cartCount + 1);
+    };
+
+    const [ingredients, setIngredients] = useState([]);
+    const [ingredientQuantities, setIngredientQuantities] = useState({});
+
+    useEffect(() => {
+        fetch("http://127.0.0.1:8000/api/ingredients/")
+            .then(res => res.json())
+            .then(data => {
+                setIngredients(data);
+
+                const initialQuantities = {};
+                data.forEach(ing => {
+                    initialQuantities[ing.id] = 0;
+                });
+                setIngredientQuantities(initialQuantities);
+            })
+            .catch(err => console.error("Error fetching ingredients:", err));
     }, []);
+
+    const increaseIngredient = (ing) => {
+        setIngredientQuantities(prev => {
+            const newQty = (prev[ing.id] || 0) + 1;
+
+            if (newQty > (prev[ing.id] || 0)) {
+                const pos = getRandomPizzaPosition();
+                setSelectedIngredients(prevSelected => [
+                    ...prevSelected,
+                    {
+                        id: ing.id,
+                        name: ing.name,
+                        image: ing.image.startsWith("http")
+                            ? ing.image
+                            : `http://127.0.0.1:8000${ing.image}`,
+                        ...pos,
+                        size: 8,
+                        rotation: Math.random() * 360,
+                    },
+                ]);
+            }
+
+            return {...prev, [ing.id]: newQty};
+        });
+    };
+
+
+    const decreaseIngredient = (ing) => {
+        setIngredientQuantities(prev => {
+            const newQty = prev[ing.id] > 0 ? prev[ing.id] - 1 : 0;
+
+            if (newQty < (prev[ing.id] || 0)) {
+                setSelectedIngredients(prevSelected => {
+                    const idx = prevSelected.findIndex(sel => sel.id === ing.id);
+                    if (idx !== -1) {
+                        const newArr = [...prevSelected];
+                        newArr.splice(idx, 1);
+                        return newArr;
+                    }
+                    return prevSelected;
+                });
+            }
+
+            return {
+                ...prev,
+                [ing.id]: newQty
+            };
+        });
+    };
+
+    const getRandomPizzaPosition = () => {
+        let x, y;
+        do {
+            x = Math.random() * 100;
+            y = Math.random() * 100;
+            const dx = x - 50;
+            const dy = y - 50;
+            const dist = Math.sqrt(dx * dx + dy * dy);
+            if (dist <= 45) {
+                return {top: `${y}%`, left: `${x}%`};
+            }
+        } while (true);
+    };
+
+
+    const currentPizza = pizzas[currentIndex] || {};
+
+    const [currentSaladIndex, setCurrentSaladIndex] = useState(0);
+
+    const handleNextSalad = () => {
+        setTimeout(() => {
+            setCurrentSaladIndex((prev) => (prev + 1) % salads.length);
+        }, 400);
+    };
+
+    const handlePrevSalad = () => {
+        setTimeout(() => {
+            setCurrentSaladIndex((prev) => (prev - 1 + salads.length) % salads.length);
+        }, 400);
+    };
+
+    const [currentDrinkIndex, setCurrentDrinkIndex] = useState(0);
+
+    const handleNextDrink = () => {
+        setCurrentDrinkIndex((prevIndex) =>
+            prevIndex === drinks.length - 1 ? 0 : prevIndex + 1
+        );
+    };
+
+    const handlePrevDrink = () => {
+        setCurrentDrinkIndex((prevIndex) =>
+            prevIndex === 0 ? drinks.length - 1 : prevIndex - 1
+        );
+    };
+
+    const [currentDessertIndex, setCurrentDessertIndex] = useState(0);
+
+    const handleNextDessert = () => {
+        setCurrentDessertIndex((prev) => (prev + 1) % desserts.length);
+    };
+
+    const handlePrevDessert = () => {
+        setCurrentDessertIndex(
+            (prev) => (prev - 1 + desserts.length) % desserts.length
+        );
+    };
+
+    const [currentSauceIndex, setCurrentSauceIndex] = useState(0);
+
+    const handleNextSauce = () => {
+        setCurrentSauceIndex((prev) => (prev + 1) % sauces.length);
+    };
+
+    const handlePrevSauce = () => {
+        setCurrentSauceIndex(
+            (prev) => (prev - 1 + sauces.length) % sauces.length
+        );
+    };
+
+    const [currentOfferIndex, setCurrentOfferIndex] = useState(0);
+
+    const handleNextOffer = () => {
+        setCurrentOfferIndex((prev) => (prev + 1) % specialoffers.length);
+    };
+
+    const handlePrevOffer = () => {
+        setCurrentOfferIndex((prev) =>
+            prev === 0 ? specialoffers.length - 1 : prev - 1
+        );
+    };
+
+    function parseOfferCounts(description) {
+        if (!description) return {pizzaCount: 0, drinkCount: 0};
+
+        const pizzaMatch = description.match(/(\d+)\s*pizzas?/i);
+        const drinkMatch = description.match(/(\d+)\s*drinks?/i);
+
+        return {
+            pizzaCount: pizzaMatch ? parseInt(pizzaMatch[1], 10) : 0,
+            drinkCount: drinkMatch ? parseInt(drinkMatch[1], 10) : 0,
+        };
+    }
+
+
+    const [favoritePizzas, setFavoritePizzas] = useState([]);
+    const [selectedPizza, setSelectedPizza] = useState(null);
+    
+    const fetchFavorites = () => {
+        fetch("http://127.0.0.1:8000/api/favorites/", {
+            headers: {
+                Authorization: `Bearer ${localStorage.getItem("access")}`,
+            },
+        })
+            .then(res => res.json())
+            .then(data => {
+                setFavoritePizzas(data);
+            })
+            .catch(err => console.error(err));
+    };
+
+    useEffect(() => {
+        if (loggedUser) {
+            fetchFavorites();
+        }
+    }, [loggedUser]);
+
+    const toggleFavorite = (pizza) => {
+        if (!pizza?.id) return;
+        if (!loggedUser) {
+            return;
+        }
+        fetch(`http://127.0.0.1:8000/api/favorites/toggle/${pizza.id}/`, {
+            method: 'POST',
+            headers: {
+                Authorization: `Bearer ${localStorage.getItem("access")}`,
+                'Content-Type': 'application/json'
+            },
+        })
+            .then(res => res.json())
+            .then(data => {
+                setFavoritePizzas((prev) => {
+                    const exists = prev.some(p => p.id === pizza.id);
+                    if (exists) {
+                        return prev.filter(p => p.id !== pizza.id);
+                    } else {
+                        return [...prev, pizza];
+                    }
+                });
+            })
+            .then(() => {
+                fetchFavorites();
+            })
+            .catch(err => console.error("Error toggling favorite:", err));
+    };
+
+    const isFavorite = (pizzaId) =>
+        favoritePizzas.some(p => p?.id === pizzaId);
+
 
     return (
         <div className="menu-page">
             <div className="original-navigation-menu">
-                    <div className="navigation-bar">
-                        <div className="logodiv">
-                            <img className="logo" src={PACrustLogo} alt={PACrustLogo} onClick={() => navigate("/")}/>
+                <div className="navigation-bar">
+                    <div className="logodiv">
+                        <img className="logo" src={PACrustLogo} alt={PACrustLogo} onClick={() => navigate("/")}/>
+                    </div>
+                    <div className="divpart">
+                        <p className="divpartP" onClick={() => navigate("/")}>HOME</p>
+                    </div>
+                    <div className="divpart">
+                        <p className="divpartP" onClick={() => navigate("/menu")}>MENU</p>
+                    </div>
+                    <div className="divpart">
+                        <p className="divpartP">ABOUT US</p>
+                    </div>
+                </div>
+                <div className="nav-right-part">
+                    <div className="phone">📞 075-142-589</div>
+                    {loggedUser && (
+                        <button className="logout-btn" onClick={() => {
+                            localStorage.removeItem("cartItems");
+                            logout();
+                        }}>LOG OUT</button>
+                    )}
+                    <button
+                        className="login-btn"
+                        onClick={() => {
+                            if (loggedUser) {
+                                navigate("/profile");
+                            } else {
+                                navigate("/login");
+                            }
+                        }}
+                    >
+                        {loggedUser ? loggedUser.username : "LOG IN / SIGN IN"}
+                    </button>
+                    {loggedUser && loggedUser.role === "client" && (
+                        <div>
+                            <button
+                                className="checkout-btn"
+                                onClick={() => navigate("/checkout", {state: {cartItems}})}
+                            >
+                                <img src={cart} className="checkout-photo"/>
+                                {cartCount > 0 && <span className="cart-badge">{cartCount}</span>}
+                            </button>
+                            {/*<button onClick={() => setCartCount(cartCount + 1)} style={{marginLeft: "20px"}}>➕ Add*/}
+                            {/*    Menu Item*/}
+                            {/*</button>*/}
                         </div>
-                        <div className="divpart" >
-                            <p className="divpartP" onClick={() => navigate("/")}>HOME</p>
+                    )}
+                </div>
+            </div>
+
+            <main className="main-content-2">
+                <div className="menu-tabs">
+                    <button
+                        className={selectedSection === "pizzas" ? "tab active" : "tab"}
+                        onClick={() => setSelectedSection("pizzas")}
+                    >
+                        Pizzas
+                    </button>
+                    <button
+                        className={selectedSection === "salads" ? "tab active" : "tab"}
+                        onClick={() => setSelectedSection("salads")}
+                    >
+                        Salads
+                    </button>
+                    <button
+                        className={selectedSection === "drinks" ? "tab active" : "tab"}
+                        onClick={() => setSelectedSection("drinks")}
+                    >
+                        Drinks
+                    </button>
+                    <button
+                        className={selectedSection === "desserts" ? "tab active" : "tab"}
+                        onClick={() => setSelectedSection("desserts")}
+                    >
+                        Desserts
+                    </button>
+                    <button
+                        className={selectedSection === "sauces" ? "tab active" : "tab"}
+                        onClick={() => setSelectedSection("sauces")}
+                    >
+                        Sauces
+                    </button>
+                    <button
+                        className={selectedSection === "specialoffers" ? "tab active" : "tab"}
+                        onClick={() => setSelectedSection("specialoffers")}
+                    >
+                        Special Offers
+                    </button>
+                </div>
+
+
+                <div className="menu-section-content">
+
+                    {selectedSection === "pizzas" && (
+                        <div className="menu-grid">
+
+                            <div className="stickers-container"
+                                 style={{position: 'relative', width: '100%', height: '100%'}}>
+
+                                {pizzas.length > 0 && pizzas[currentIndex]?.stickers?.length > 0 && (
+                                    Array.from({length: 7}).map((_, i) => {
+                                        const stickers = pizzas[currentIndex].stickers;
+                                        const src = stickers[i % stickers.length];
+                                        return (
+                                            <img
+                                                key={`${currentIndex}-${i}`}
+                                                src={src}
+                                                alt={`sticker-${i}`}
+                                                className={isTransitioning ? 'spin-fade-out' : 'spin-fade-in'}
+                                                style={{
+                                                    position: 'absolute',
+                                                    top: stickerPositions[i]?.top || '50%',
+                                                    left: stickerPositions[i]?.left || '50%',
+                                                    width: '100px',
+                                                    height: '100px',
+                                                    pointerEvents: 'none',
+                                                    userSelect: 'none',
+                                                }}
+                                            />
+                                        );
+                                    })
+                                )}
+
+
+                                <div className="carousel-container">
+                                    <p className="pizza-title">{currentPizza.heading}</p>
+                                    <p className="pizza-description">{currentPizza.description}</p>
+
+                                    {loggedUser && loggedUser.role === "client" && (
+                                        <div className="favorite-div">
+                                            <button
+                                                className="add-to-cart"
+                                                onClick={() => {
+                                                    if (currentPizza.name === "Make your own") {
+                                                        setPendingAction("customize");
+                                                    } else {
+                                                        setPendingAction("add");
+                                                    }
+                                                    setShowSizeSelector(true);
+                                                }}
+                                            >
+                                                {currentPizza.name === "Make your own" ? "CUSTOMIZE" : "ADD TO CART"}
+                                            </button>
+                                            {currentPizza && (
+                                                <button
+                                                    className={`favorite-btn ${isFavorite(currentPizza.id) ? "active" : ""}`}
+                                                    onClick={() => toggleFavorite(currentPizza)}
+                                                >
+                                                    ★
+                                                </button>
+                                            )}
+
+
+                                        </div>
+                                    )}
+                                    <div className="pizza-names-container">
+
+
+                                    </div>
+                                    <div className="pizza-image-wrapper">
+                                        <button onClick={handlePrev} className="arrow-button">{'<'}</button>
+                                        <div className="pizza-images"
+                                             style={{
+                                                 transform: `rotate(${rotation}deg)`,
+                                                 transition: 'transform 0.7s ease'
+                                             }}>
+                                            {pizzas.length > 0 && pizzas[frontImageIndex]?.image && (
+                                                <img
+                                                    ref={carouselPizzaRef}
+                                                    className="pizza-image"
+                                                    src={pizzas[frontImageIndex].image}
+                                                    alt={pizzas[frontImageIndex].name}
+                                                />
+                                            )}
+
+                                            {pizzas.length > 0 && pizzas[backImageIndex]?.image && (
+                                                <img
+                                                    ref={backImageRef}
+                                                    className="pizza-image2"
+                                                    id="slikaprevvrtena"
+                                                    src={pizzas[backImageIndex].image}
+                                                    alt={pizzas[backImageIndex].name}
+                                                    style={{visibility: isCustomizing ? 'hidden' : 'visible'}}
+                                                />
+                                            )}
+                                        </div>
+                                        <button onClick={handleNext} className="arrow-button">{'>'}</button>
+                                    </div>
+                                </div>
+
+                                <div className="pizza-name-circle-wrapper">
+                                    <svg
+                                        className="pizza-name-circle"
+                                        style={{
+                                            transform: `rotate(${nameCircleRotation - 10}deg)`,
+                                            transition: 'transform 0.7s ease'
+                                        }}
+                                    >
+                                        <defs>
+                                            <path
+                                                id="full-circle"
+                                                d="M380,50 a330,330 0 1,1 0,660 a330,330 0 1,1 0,-660"
+                                            />
+                                        </defs>
+                                        {pizzas.map((pizza, index) => {
+                                            const offset = (index / pizzas.length) * 100 + 5;
+                                            return (
+                                                <text textAnchor="middle" key={pizza.name}>
+
+                                                    <textPath
+                                                        href="#full-circle"
+                                                        startOffset={`${offset}%`}
+                                                        className={index === currentIndex ? 'active' : ''}
+                                                    >
+                                                        {pizza.name}
+                                                    </textPath>
+                                                </text>
+                                            );
+                                        })}
+                                    </svg>
+                                </div>
+
+                            </div>
                         </div>
-                        <div className="divpart" >
-                            <p className="divpartP" onClick={() => navigate("/menu")}>MENU</p>
+                    )}
+
+                    {selectedSection === "salads" && (
+                        <div className="salads-carousel">
+                            <button className="arrow left" onClick={handlePrevSalad}>‹</button>
+
+                            <div className="carousel-container-2">
+                                {salads.length > 0 ? (
+                                    salads
+                                        .slice(currentSaladIndex, currentSaladIndex + 3)
+                                        .concat(
+                                            salads.slice(0, Math.max(0, currentSaladIndex + 3 - salads.length))
+                                        )
+                                        .map((item, index) => {
+                                            const isActive = index === 1;
+
+                                            const handleClick = () => {
+                                                if (index === 0) handlePrevSalad();
+                                                else if (index === 2) handleNextSalad(); 
+                                            };
+                                            return (
+                                                <div
+                                                    key={item.id}
+                                                    onClick={!isActive ? handleClick : undefined}
+                                                    className={`salad-card ${index === 1 ? "active" : ""}`}
+                                                    style={{cursor: !isActive ? "pointer" : "default"}}
+                                                >
+                                                    <h3>{item.name}</h3>
+                                                    <p className="ingredients">{item.description}</p>
+                                                    <p className="price">{Number(item.price).toFixed(2)} €</p>
+                                                    <img
+                                                        src={`http://127.0.0.1:8000${item.image}`}
+                                                        alt={item.name}
+                                                    />
+
+
+                                                    {/* Show Add to Cart only for center card */}
+                                                    {index === 1 && (
+                                                        <div className="card-footer">
+    <textarea
+        className="salad-comment"
+        placeholder="Leave a note (e.g. 'no onions', 'extra dressing')..."
+    ></textarea>
+                                                            {loggedUser && loggedUser.role === "client" && (
+                                                                <button
+                                                                    className="add-to-cart-2"
+                                                                    onClick={() => {
+                                                                        const newItem = {
+                                                                            id: item.id,
+                                                                            name: item.name,
+                                                                            image: `http://127.0.0.1:8000${item.image}`,
+                                                                            price: Number(item.price),
+                                                                            totalPrice: Number(item.price),
+                                                                            quantity: 1,
+                                                                            description: item.description || "",
+                                                                            category: "salads",
+                                                                        };
+                                                                        setCartItems(prev => [...prev, newItem]);
+                                                                        setCartCount(prev => prev + 1);
+                                                                    }}
+
+                                                                >
+                                                                    ADD TO CART
+                                                                </button>
+                                                            )}
+                                                        </div>
+                                                    )}
+                                                </div>
+                                            )
+                                        })
+                                ) : (
+                                    <p className="no-items">No salads found.</p>
+                                )}
+                            </div>
+
+                            <button className="arrow right" onClick={handleNextSalad}>›</button>
                         </div>
-                        <div className="divpart">
-                            <p className="divpartP">ABOUT US</p>
+                    )}
+
+                    {selectedSection === "drinks" && (
+                        <div className="salads-carousel">
+                            <button className="arrow left" onClick={handlePrevDrink}>‹</button>
+
+                            <div className={`carousel-container-2`}>
+                                {drinks.length > 0 ? (
+                                    drinks
+                                        .slice(currentDrinkIndex, currentDrinkIndex + 3)
+                                        .concat(
+                                            drinks.slice(0, Math.max(0, currentDrinkIndex + 3 - drinks.length))
+                                        )
+                                        .map((item, index) => {
+                                            const isActive = index === 1;
+                                            const handleClick = () => {
+                                                if (index === 0) handlePrevDrink();
+                                                else if (index === 2) handleNextDrink();
+                                            };
+
+                                            return (
+                                                <div
+                                                    key={item.id}
+                                                    onClick={!isActive ? handleClick : undefined}
+                                                    className={`salad-card ${isActive ? "active" : ""}`}
+                                                    style={{cursor: !isActive ? "pointer" : "default"}}
+                                                >
+                                                    <h3>{item.name}</h3>
+                                                    <p className="ingredients">{item.description}</p>
+                                                    <p className="price">{Number(item.price).toFixed(2)} €</p>
+                                                    <img
+                                                        src={`http://127.0.0.1:8000${item.image}`}
+                                                        alt={item.name}
+                                                    />
+
+                                                    {index === 1 && (
+                                                        <div className="card-footer">
+        <textarea
+            className="salad-comment"
+            placeholder="Leave a note (e.g. 'no ice', 'less sugar', 'extra lemon')..."
+        ></textarea>
+
+                                                            {loggedUser && loggedUser.role === "client" && (
+                                                                <button
+                                                                    className="add-to-cart-2"
+                                                                    onClick={() => {
+                                                                        const newItem = {
+                                                                            id: item.id,
+                                                                            name: item.name,
+                                                                            image: `http://127.0.0.1:8000${item.image}`,
+                                                                            price: Number(item.price),
+                                                                            totalPrice: Number(item.price),
+                                                                            quantity: 1,
+                                                                            description: item.description || "",
+                                                                            category: "drinks",
+                                                                        };
+                                                                        setCartItems(prev => [...prev, newItem]);
+                                                                        setCartCount(prev => prev + 1);
+                                                                    }}
+
+                                                                >
+                                                                    ADD TO CART
+                                                                </button>
+                                                            )}
+                                                        </div>
+                                                    )}
+
+                                                </div>
+                                            );
+                                        })
+                                ) : (
+                                    <p className="no-items">No drinks found.</p>
+                                )}
+                            </div>
+
+                            <button className="arrow right" onClick={handleNextDrink}>›</button>
+                        </div>
+                    )}
+
+                    {selectedSection === "desserts" && (
+                        <div className="salads-carousel">
+                            <button className="arrow left" onClick={handlePrevDessert}>‹</button>
+
+                            <div className={`carousel-container-2`}>
+                                {desserts.length > 0 ? (
+                                    desserts
+                                        .slice(currentDessertIndex, currentDessertIndex + 3)
+                                        .concat(
+                                            desserts.slice(0, Math.max(0, currentDessertIndex + 3 - desserts.length))
+                                        )
+                                        .map((item, index) => {
+                                            const isActive = index === 1;
+                                            const handleClick = () => {
+                                                if (index === 0) handlePrevDessert();
+                                                else if (index === 2) handleNextDessert();
+                                            };
+
+                                            return (
+                                                <div
+                                                    key={item.id}
+                                                    onClick={!isActive ? handleClick : undefined}
+                                                    className={`salad-card ${isActive ? "active" : ""}`}
+                                                    style={{cursor: !isActive ? "pointer" : "default"}}
+                                                >
+                                                    <h3>{item.name}</h3>
+                                                    <p className="ingredients">{item.description}</p>
+                                                    <p className="price">{Number(item.price).toFixed(2)} €</p>
+                                                    <img
+                                                        src={`http://127.0.0.1:8000${item.image}`}
+                                                        alt={item.name}
+                                                    />
+
+                                                    {index === 1 && (
+                                                        <div className="card-footer">
+                                        <textarea
+                                            className="salad-comment"
+                                            placeholder="Leave a note (e.g. 'extra chocolate', 'no cream')..."
+                                        ></textarea>
+
+                                                            {loggedUser && loggedUser.role === "client" && (
+                                                                <button
+                                                                    className="add-to-cart-2"
+                                                                    onClick={() => {
+                                                                        const newItem = {
+                                                                            id: item.id,
+                                                                            name: item.name,
+                                                                            image: `http://127.0.0.1:8000${item.image}`,
+                                                                            price: Number(item.price),
+                                                                            totalPrice: Number(item.price),
+                                                                            quantity: 1,
+                                                                            description: item.description || "",
+                                                                            category: "desserts",
+                                                                        };
+                                                                        setCartItems(prev => [...prev, newItem]);
+                                                                        setCartCount(prev => prev + 1);
+                                                                    }}
+                                                                >
+                                                                    ADD TO CART
+                                                                </button>
+                                                            )}
+                                                        </div>
+                                                    )}
+                                                </div>
+                                            );
+                                        })
+                                ) : (
+                                    <p className="no-items">No desserts found.</p>
+                                )}
+                            </div>
+
+                            <button className="arrow right" onClick={handleNextDessert}>›</button>
+                        </div>
+                    )}
+
+                    {selectedSection === "sauces" && (
+                        <div className="salads-carousel">
+                            <button className="arrow left" onClick={handlePrevSauce}>‹</button>
+
+                            <div className={`carousel-container-2`}>
+                                {sauces.length > 0 ? (
+                                    sauces
+                                        .slice(currentSauceIndex, currentSauceIndex + 3)
+                                        .concat(
+                                            sauces.slice(0, Math.max(0, currentSauceIndex + 3 - sauces.length))
+                                        )
+                                        .map((item, index) => {
+                                            const isActive = index === 1; // middle card is active
+                                            const handleClick = () => {
+                                                if (index === 0) handlePrevSauce();
+                                                else if (index === 2) handleNextSauce();
+                                            };
+
+                                            return (
+                                                <div
+                                                    key={item.id}
+                                                    onClick={!isActive ? handleClick : undefined}
+                                                    className={`salad-card ${isActive ? "active" : ""}`}
+                                                    style={{cursor: !isActive ? "pointer" : "default"}}
+                                                >
+                                                    <h3>{item.name}</h3>
+                                                    <p className="ingredients">{item.description}</p>
+                                                    <p className="price">{Number(item.price).toFixed(2)} €</p>
+                                                    <img
+                                                        src={`http://127.0.0.1:8000${item.image}`}
+                                                        alt={item.name}
+                                                    />
+
+                                                    {index === 1 && (
+                                                        <div className="card-footer">
+
+                                                            {loggedUser && loggedUser.role === "client" && (
+                                                                <button
+                                                                    className="add-to-cart-2"
+                                                                    onClick={() => {
+                                                                        const newItem = {
+                                                                            id: item.id,
+                                                                            name: item.name,
+                                                                            image: `http://127.0.0.1:8000${item.image}`,
+                                                                            price: Number(item.price),
+                                                                            totalPrice: Number(item.price),
+                                                                            quantity: 1,
+                                                                            description: item.description || "",
+                                                                            category: "sauces",
+                                                                        };
+                                                                        setCartItems(prev => [...prev, newItem]);
+                                                                        setCartCount(prev => prev + 1);
+                                                                    }}
+                                                                >
+                                                                    ADD TO CART
+                                                                </button>
+                                                            )}
+                                                        </div>
+                                                    )}
+                                                </div>
+                                            );
+                                        })
+                                ) : (
+                                    <p className="no-items">No sauces found.</p>
+                                )}
+                            </div>
+
+                            <button className="arrow right" onClick={handleNextSauce}>›</button>
+                        </div>
+                    )}
+
+                    {selectedSection === "specialoffers" && (
+                        <div className="salads-carousel-special }">
+                            <button className="arrow left" onClick={handlePrevOffer}>‹</button>
+
+                            <div className="carousel-container-2">
+                                {specialoffers.length > 0 ? (
+                                    specialoffers
+                                        .slice(currentOfferIndex, currentOfferIndex + 3)
+                                        .concat(
+                                            specialoffers.slice(0, Math.max(0, currentOfferIndex + 3 - specialoffers.length))
+                                        )
+                                        .map((offer, index) => {
+                                            const {pizzaCount, drinkCount} = parseOfferCounts(offer.description);
+
+                                            const isActive = index === 1;
+                                            const handleClick = () => {
+                                                if (index === 0) handlePrevOffer();
+                                                else if (index === 2) handleNextOffer();
+                                            };
+
+                                            return (
+                                                <div
+                                                    key={offer.id}
+                                                    onClick={!isActive ? handleClick : undefined}
+                                                    className={`salad-card ${isActive ? "active" : ""}`}
+                                                    style={{cursor: !isActive ? "pointer" : "default"}}
+                                                >
+                                                    <h3>{offer.name}</h3>
+                                                    <p className="price">{Number(offer.price).toFixed(2)} €</p>
+                                                    <img src={`http://127.0.0.1:8000${offer.image}`} alt={offer.name}/>
+
+                                                    {isActive && (
+                                                        <div className="card-footer special-offer-footer">
+                                                            <div className="offer-selection">
+                                                                <h4 className="h4-heading">Choose your pizzas:</h4>
+
+                                                                <div className="scroll-div">
+                                                                    {Array.from({length: pizzaCount || 0}).map((_, index) => (
+                                                                        <select key={index} className="offer-dropdown">
+                                                                            <option value="">Select
+                                                                                Pizza {index + 1}</option>
+                                                                            {pizzas.map((p) => (
+                                                                                <option key={p.id}
+                                                                                        value={p.id}>{p.name}</option>
+                                                                            ))}
+                                                                        </select>
+                                                                    ))}
+                                                                </div>
+                                                                <h4 className="h4-heading">Choose your drinks:</h4>
+
+                                                                <div className="scroll-div">
+                                                                    {Array.from({length: drinkCount || 0}).map((_, index) => (
+                                                                        <select key={index} className="offer-dropdown">
+                                                                            <option value="">Select
+                                                                                Drink {index + 1}</option>
+                                                                            {drinks.map((d) => (
+                                                                                <option key={d.id}
+                                                                                        value={d.id}>{d.name}</option>
+                                                                            ))}
+                                                                        </select>
+                                                                    ))}
+                                                                </div>
+                                                            </div>
+
+                                                            <textarea
+                                                                className="salad-comment"
+                                                                placeholder="Write any preferences or changes here..."
+                                                            ></textarea>
+
+                                                            {loggedUser && loggedUser.role === "client" && (
+                                                                <button
+                                                                    className="add-to-cart-2"
+                                                                    onClick={() => {
+                                                                        const newItem = {
+                                                                            id: offer.id,
+                                                                            name: offer.name,
+                                                                            image: `http://127.0.0.1:8000${offer.image}`,
+                                                                            price: Number(offer.price),
+                                                                            totalPrice: Number(offer.price),
+                                                                            quantity: 1,
+                                                                            description: offer.description || "",
+                                                                            category: "specialoffer",
+                                                                        };
+                                                                        setCartItems(prev => [...prev, newItem]);
+                                                                        setCartCount(prev => prev + 1);
+                                                                    }}
+
+                                                                >
+                                                                    ADD TO CART
+                                                                </button>
+                                                            )}
+                                                        </div>
+                                                    )}
+
+                                                </div>
+                                            );
+                                        })
+                                ) : (
+                                    <p className="no-items">No special offers found.</p>
+                                )}
+                            </div>
+
+                            <button className="arrow right" onClick={handleNextOffer}>›</button>
+                        </div>
+                    )}
+
+
+                </div>
+            </main>
+
+
+            {showSizeSelector && (
+                <div
+                    className="size-selector-overlay"
+                    onClick={(e) => {
+                        if (e.target.classList.contains("size-selector-overlay")) {
+                            setShowSizeSelector(false);
+                        }
+                    }}
+                >
+                    <div className="size-selector-modal" onClick={(e) => e.stopPropagation()}>
+                        <h2>Choose a size</h2>
+                        <div className="size-options">
+                            {(() => {
+                                const basePrice = parseFloat(currentPizza.price || 0);
+                                const prices = {
+                                    mini: (basePrice - 3).toFixed(2),
+                                    small: basePrice.toFixed(2),
+                                    big: (basePrice + 5).toFixed(2)
+                                };
+
+                                return (
+                                    <>
+                                        <div className="size-option">
+                                            <img
+                                                src={require("./images/20cm.png")}
+                                                alt="20cm"
+                                                onClick={() => handleSizeSelect("mini")}
+                                            />
+                                            <p className="price">{prices.mini}€</p>
+                                        </div>
+
+                                        <div className="size-option2">
+                                            <img
+                                                src={require("./images/25cm.png")}
+                                                alt="25cm"
+                                                onClick={() => handleSizeSelect("small")}
+                                            />
+                                            <p className="price">{prices.small}€</p>
+                                        </div>
+
+                                        <div className="size-option3">
+                                            <img
+                                                src={require("./images/32cm.png")}
+                                                alt="32cm"
+                                                onClick={() => handleSizeSelect("big")}
+                                            />
+                                            <p className="price">{prices.big}€</p>
+                                        </div>
+                                    </>
+                                );
+                            })()}
                         </div>
                     </div>
-                    <div className="nav-right-part">
-                        <div className="phone">📞 075-142-589</div>
-                        {loggedUser && (
-                            <button className="logout-btn" onClick={logout}>LOG OUT</button>
-                        )}
-                        <button
-                            className="login-btn"
-                            onClick={() => {
-                                if (loggedUser) {
-                                    navigate("/profile");
-                                } else {
-                                    navigate("/login");
+                </div>
+            )}
+
+
+            {isCustomizing && (
+                <div className="customize-overlay">
+                    <div className="pizza-canvas">
+                        <img
+                            src={require("./images/pizza2.png")}
+                            alt="Custom Pizza"
+                            className={`customize-pizza ${isClosing ? 'reverse' : ''}`}
+                            style={{
+                                top: pizzaStartRect.top,
+                                left: pizzaStartRect.left,
+                                width: "400px",
+                                height: "400px",
+                            }}
+                        />
+                    </div>
+                    <div className="ingredients-custom">
+                        {selectedIngredients.map((ingredient, index) => {
+                            if (ingredient.name === "Extra cheese") return null;
+                            return (
+                                <img
+                                    key={index}
+                                    src={ingredient.image}
+                                    alt={ingredient.name}
+                                    className="ingredient-on-pizza"
+                                    style={{
+                                        position: 'absolute',
+                                        top: ingredient.top,
+                                        left: ingredient.left,
+                                        width: (ingredient.size + 10) + "%",
+                                        transform: `translate(-50%, -50%) rotate(${ingredient.rotation || 0}deg)`,
+                                        transformOrigin: '50% 50%',
+                                        height: 'auto',
+                                        zIndex: ingredient.name === "sourcream" ? 100000 : 10000,
+                                    }}
+                                />
+                            );
+                        })}
+                    </div>
+
+                    {showCustomizeModal && (
+                        <div
+                            className="modal-overlay"
+                            onClick={(e) => {
+                                if (e.target.classList.contains("modal-overlay")) {
+                                    handleCloseModal();
                                 }
                             }}
                         >
-                            {loggedUser ? loggedUser.username : "LOG IN / SIGN IN"}
-                        </button>
+                            <div className={`customize-modal ${isClosing ? 'slide-out' : 'slide-in'}`}
+                                 onClick={(e) => e.stopPropagation()}>
+
+                                <div>
+                                    <button
+                                        className="close-modal-btn"
+                                        onClick={() => {
+                                            setSelectedIngredients((prev) =>
+                                                prev.map((ing) => ({
+                                                    ...ing,
+                                                    top: "-20%",
+                                                    left: "50%",
+                                                    isExiting: true,
+                                                }))
+                                            );
+                                            setTimeout(() => {
+                                                setSelectedIngredients([]);
+                                                setIsClosing(true);
+                                                setTimeout(() => {
+                                                    setShowCustomizeModal(false);
+                                                    setIsCustomizing(false);
+                                                    setIsClosing(false);
+                                                }, 500);
+                                            }, 800);
+                                        }}
+                                    >
+                                        &times;
+                                    </button>
+
+                                    <h2>Customize Your Pizza</h2>
+
+                                </div>
+
+
+                                <div className="ingredients-container">
+                                    <h3>Choose Ingredients</h3>
+                                    <div className="ingredients-list-menu">
+                                        {ingredients.map(ing => (
+                                            <div key={ing.id} className="ingredient-item-menu">
+                                                <div className="ingredient-img-menu">
+                                                    {ing.image ? (
+                                                        <img src={ing.image} alt={ing.name}/>
+                                                    ) : (
+                                                        <div className="placeholder"/>
+                                                    )}
+                                                </div>
+
+                                                <div className="ingredient-name-menu">{ing.name}</div>
+                                                <div className="ingredient-price-menu">{ing.price}€</div>
+
+                                                <div className="quantity-controls">
+                                                    <button onClick={() => decreaseIngredient(ing)}>-</button>
+                                                    <span>{ingredientQuantities[ing.id] || 0}</span>
+                                                    <button onClick={() => increaseIngredient(ing)}>+</button>
+                                                </div>
+                                            </div>
+                                        ))}
+                                    </div>
+
+                                </div>
+
+
+                                {/* --- Footer --- */}
+                                <div className="modal-footer">
+                                    <div className="modal-price">
+                                        {selectedPrice !== null && (
+                                            <span>
+                                                {selectedPrice}€
+                                                {calculateExtraCost() > 0 && (
+                                                    <span>(+{calculateExtraCost().toFixed(2)}€)</span>
+                                                )}
+                                            </span>
+                                        )}
+                                    </div>
+
+                                    <div className="modal-actions-menu">
+                                        <button
+                                            className="clear-ingredients"
+                                            onClick={() => {
+                                                setSelectedIngredients([]);
+                                                setSpawnedIngredients([]);
+                                                setQuantities(items.map(() => 0));
+
+                                                const resetBackend = {};
+                                                ingredients.forEach(ing => {
+                                                    resetBackend[ing.id] = 0;
+                                                });
+                                                setIngredientQuantities(resetBackend);
+                                            }}
+                                        >
+                                            Clear
+                                        </button>
+
+                                        <button
+                                            className="submit-btn"
+                                            onClick={() => {
+                                                const extraCost = calculateExtraCost();
+                                                const selectedBaseIngredients = ingredients.filter(
+                                                    ing => (ingredientQuantities[ing.id] || 0) > 0
+                                                );
+
+                                                const newItem = {
+                                                    name: "Custom Pizza",
+                                                    size: selectedSize,
+                                                    basePrice: selectedPrice,
+                                                    baseIngredients: selectedBaseIngredients.map(
+                                                        ing => `${ing.name} x${ingredientQuantities[ing.id]}`
+                                                    ),
+                                                    extras: items
+                                                        .map((item, idx) =>
+                                                            quantities[idx] > 0 ? `${item.name} x${quantities[idx]}` : null
+                                                        )
+                                                        .filter(Boolean),
+                                                    extraCost: calculateExtraCost(),
+                                                    totalPrice: selectedPrice + calculateExtraCost(),
+                                                    quantity: 1,
+                                                    image: "./images/pizza2.png",
+                                                };
+
+                                                setCartItems((prev) => [...prev, newItem]);
+                                                setCartCount((prev) => prev + 1);
+
+                                                handleCloseModal();
+                                            }}
+                                        >
+                                            Add to order
+                                        </button>
+                                    </div>
+                                </div>
+                            </div>
+
+                        </div>
+                    )}
+
+
+                </div>
+            )}
+
+            {loggedUser && (
+                <div className="favorites-bar">
+                    <div className="favorites-section">
+                        <div className="favorites-label">
+                            ⭐ Favorites
+                        </div>
+
+                        <div className="favorites-list">
+                            {favoritePizzas.length === 0 ? (
+                                <p className="empty-favorites">No favorite pizzas</p>
+                            ) : (
+                                favoritePizzas.map(pizza => (
+                                    <div
+                                        key={pizza.id}
+                                        className="favorite-item"
+                                    >
+                                        <img
+                                            src={`http://127.0.0.1:8000${pizza.image}`}
+                                            alt={pizza.name}
+                                        />
+                                        <div className="favorite-info">
+                                            <span className="favorite-name">{pizza.name}</span>
+                                            <span className="favorite-price">{pizza.price} €</span>
+                                        </div>
+
+                                        <button
+                                            className="fav-cart-btn"
+                                            onClick={(e) => {
+                                                e.stopPropagation();
+                                                setSelectedPizza(pizza);
+                                                setPendingAction("add");
+                                                setShowSizeSelector(true);
+                                            }}
+                                        >
+                                            🛒
+                                        </button>
+
+                                        <button
+                                            className="remove-fav"
+                                            onClick={(e) => {
+                                                e.stopPropagation();
+                                                toggleFavorite(pizza);
+                                            }}
+                                        >
+                                            ✖
+                                        </button>
+                                    </div>
+                                ))
+                            )}
+                        </div>
                     </div>
                 </div>
-
-            <main className="main-content">
-                <div className="stickers-container" style={{position: 'relative', width: '100%', height: '100%'}}>
-                    {Array.from({length: 7}).map((_, i) => {
-                        const stickers = pizzaData[displayIndex].stickers || [];
-                        const src = stickers[i % stickers.length];
-
-                        return (
-                            <img
-                                key={`${displayIndex}-${i}`}
-                                src={require(`${src}`)}
-                                alt={`sticker-${i}`}
-                                className={isTransitioning ? 'spin-fade-out' : 'spin-fade-in'}
-                                style={{
-                                    position: 'absolute',
-                                    top: stickerPositions[i]?.top || '50%',
-                                    left: stickerPositions[i]?.left || '50%',
-                                    width: '100px',
-                                    height: '100px',
-                                    pointerEvents: 'none',
-                                    userSelect: 'none',
-                                }}
-                            />
-                        );
-                    })}
-
-                    <div className="carousel-container">
-                        <p className="pizza-title">{currentPizza.heading}</p>
-                        <p className="pizza-description">{currentPizza.description}</p>
-                        <button className="add-to-cart">ADD TO CART</button>
-
-                        <div className="pizza-names-container">
-
-                            <svg viewBox="0 0 400 200" className="pizza-name-arc">
-                                <path id="text-curve" d="M -50 220 A 145 160 0 0 1 460 340" fill="transparent"/>
-                                <path
-                                    d="M -44 221 A 145 160 0 0 1 455 345"
-                                    stroke="white"
-                                    strokeWidth="1"
-                                    fill="transparent"
-                                />
-                                {pizzaData.map((pizza, index) => (
-                                    <text key={pizza.name}>
-                                        <textPath
-                                            href="#text-curve"
-                                            startOffset={`${(index * 70.0) / (pizzaData.length - 1) + 5.0}%`}
-                                            className={index === currentIndex ? 'active' : ''}
-                                        >
-                                            {pizza.name}
-                                        </textPath>
-                                    </text>
-                                ))}
-                            </svg>
-
-                        </div>
-                        <div className="pizza-image-wrapper">
-                            <button onClick={handlePrev} className="arrow-button">{'<'}</button>
-                            <div className="pizza-images"
-                                 style={{transform: `rotate(${rotation}deg)`, transition: 'transform 0.7s ease'}}>
-                                <img
-                                    className="pizza-image"
-                                    src={require(`${pizzaData[frontImageIndex].image}`)}
-                                    alt={pizzaData[frontImageIndex].name}
-                                />
-                                <img
-                                    className="pizza-image2"
-                                    id="slikaprevvrtena"
-                                    src={require(`${pizzaData[backImageIndex].image}`)}
-                                    alt={pizzaData[backImageIndex].name}
-                                />
-                            </div>
-
-                            <button onClick={handleNext} className="arrow-button">{'>'}</button>
-
-                        </div>
-
-                    </div>
-                </div>
-            </main>
+            )}
+
         </div>
     );
 };
-
Index: ontend/src/PizzaData.js
===================================================================
--- Frontend/src/PizzaData.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ 	(revision )
@@ -1,45 +1,0 @@
-const pizzaData = [
-  {
-    name: 'Vegetarian',
-    heading:'Garden Delight Pizza',
-    description: 'Indulge in the fresh, vibrant flavors of our Garden Delight Pizza, a colorful medley of nature’s best. Topped with juicy cherry tomatoes, crisp bell peppers, earthy mushrooms, red onions, black olives, and a touch of baby spinach, all layered over a rich tomato basil sauce and melted mozzarella. This pizza is a celebration of freshness—perfectly baked to bring out the natural sweetness and crunch of each ingredient. A wholesome, satisfying choice for every veggie lover!',
-    image: './images/pizza11.png',
-    stickers: ['./images/pepper.png', './images/cheese.png', './images/basil.png','./images/tomato.png']
-
-  },
-  {
-    name: 'Margherita',
-    heading:'Classic Margherita',
-    description: 'Simplicity at its finest — our Classic Margherita is a timeless favorite that lets quality ingredients shine. Featuring a smooth, tangy tomato sauce, fresh mozzarella, and aromatic basil leaves, all on a hand-tossed crust baked to golden perfection. Finished with a drizzle of extra virgin olive oil, this pizza brings you the authentic taste of Italy in every bite. Light, flavorful, and endlessly satisfying.',
-    image: './images/pizza22.png',
-    stickers: ['./images/cheese.png','./images/tomato.png']
-
-  },
-
-  {
-    name: 'Capricciosa',
-    heading:'Capricciosa Royale',
-    description: 'A rich and flavorful Italian classic, the Capricciosa Royale is a symphony of premium ingredients on a perfectly crisp crust. Topped with savory ham, tender mushrooms, artichoke hearts, black olives, and melted mozzarella over a vibrant tomato sauce, this pizza offers a deliciously balanced bite every time. Elegant yet hearty, it’s the perfect choice for those who love variety and bold Mediterranean flavors in every slice.',
-    image: './images/pizza33.png',
-    stickers: ['./images/cheese.png','./images/tomato.png','./images/sausage.png','./images/olive.png']
-
-  },
-  {
-    name: 'Pepperoni',
-    heading:'Spicy Pepperoni Blaze',
-    description: 'Turn up the heat with our Spicy Pepperoni Blaze — a bold take on a classic favorite. Loaded with generous slices of perfectly spiced pepperoni atop a rich tomato sauce and bubbling mozzarella cheese, this pizza delivers a crispy, savory bite every time. Baked to perfection with a hint of smoky flavor, it\'s the go-to choice for meat lovers who crave a little extra kick. Simple, fiery, and irresistibly good.',
-    image: './images/pizza44.png',
-    stickers: ['./images/sausage.png', './images/cheese.png','./images/tomato.png']
-
-  },
-  {
-    name: 'Greek',
-    heading:'Mediterranean Greek Feast',
-    description: 'Transport your taste buds to the sun-soaked shores of the Aegean with our Mediterranean Greek Feast. This vibrant pizza is topped with crumbled feta cheese, juicy cherry tomatoes, Kalamata olives, red onions, fresh cucumbers, and a sprinkle of oregano, all drizzled with a light garlic-infused olive oil over a thin, crispy crust. Refreshing, tangy, and full of flavor — it’s a perfect blend of tradition and taste in every bite.',
-    image: './images/pizza55.png',
-    stickers: ['./images/mozzarella.png', './images/cheese.png', './images/basil.png','./images/tomato.png','./images/olive.png']
-  },
-
-];
-
-export default pizzaData;
Index: Frontend/src/ReserveTable.css
===================================================================
--- Frontend/src/ReserveTable.css	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/ReserveTable.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,5 +1,16 @@
 .local-background-2 {
-    background: #E8C4A1;
+    /*background-image: url("./images/white-background.png");  vaka bese*/
+    /*background-size: cover;*/
+    /*background-position: center;*/
+    /*background-repeat: no-repeat;*/
+
+    /*background-color: #fff5e3; opcija 2 */
+
+    /*background-image: url("https://images.unsplash.com/photo-1525947088131-b701cd0f6dc3?fm=jpg&ixid=M3wxMjA3fDB8MHxzZWFyY2h8Mnx8ZGFyayUyMHdvb2QlMjB0ZXh0dXJlfGVufDB8fDB8fHww&ixlib=rb-4.1.0&q=60&w=3000");*/
     background-repeat: no-repeat;
+    background-position: center;
+    background-size: cover;
+    background-color: #0D1B2A;
+
     min-height: 100vh;
     overflow-x: hidden;
@@ -7,4 +18,11 @@
 }
 
+.original-navigation-reservation {
+    display: flex;
+    align-items: center;
+    padding: 10px 0px;
+    justify-content: space-around;
+}
+
 .logo-left {
     margin-left: 50px;
@@ -14,5 +32,5 @@
     display: flex;
     justify-content: center;
-    color: #D82B2B;
+    color: white;
     margin: 50px 0px;
 }
@@ -28,5 +46,5 @@
 
 .reserve-question {
-    color: #D82B2B;
+    color: white;
     display: flex;
     justify-content: center;
@@ -89,24 +107,4 @@
 /*}*/
 
-.after-submit-dropdown {
-    text-align: center;
-    background-color: #ffffffdd;
-    padding: 20px 60px;
-    border-radius: 12px;
-    box-shadow: 0 0 12px rgba(0, 0, 0, 0.15);
-    width: 250px;
-}
-
-.time-gathering {
-    background-color: #ffffffdd;
-    border-radius: 12px;
-    padding: 20px 60px;
-    width: 250px;
-    box-shadow: 0 0 12px rgba(0, 0, 0, 0.15);
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    gap: 20px;
-}
 
 .dropdown-button {
@@ -124,11 +122,8 @@
     justify-content: center;
     color: #D82B2B;
-}
-
-.time-title {
-    display: flex;
-    justify-content: center;
-    color: #D82B2B;
-}
+    margin: 0px 0px;
+    font-weight: normal;
+}
+
 
 .reservation-controls {
@@ -136,5 +131,5 @@
     justify-content: center;
     gap: 20px;
-    margin-top: 20px;
+    margin: 10px 0px;
 }
 
@@ -167,12 +162,4 @@
 }
 
-.tables-map {
-    text-align: center;
-    background-color: #ffffffdd;
-    padding: 20px 60px;
-    border-radius: 12px;
-    box-shadow: 0 0 12px rgba(0, 0, 0, 0.15);
-    width: 250px;
-}
 
 .reservation-layout {
@@ -181,4 +168,6 @@
     align-items: center;
     gap: 50px;
+    margin-top: 70px;
+    margin-bottom: 70px;
 }
 
@@ -187,14 +176,26 @@
     flex-direction: column;
     gap: 40px;
-}
-
-
-.time-inputs {
-    display: flex;
-    gap: 20px;
-    justify-content: center;
-}
-
-.time-input-group {
+    align-items: center;
+}
+
+.layoutBtn{
+    background-color: #FF7F50;
+    color: white;
+    padding: 10px 30px;
+    border-radius: 999px;
+    border: none;
+    font-size: 16px;
+    cursor: pointer;
+    font-family: "Rubik Dirt", system-ui;
+    animation: slideInRight 0.3s ease-out forwards;
+}
+
+/*.right-table{*/
+/*    position: absolute;*/
+/*    top: 360px;*/
+/*    left: 530px;*/
+/*}*/
+
+.time-group {
     display: flex;
     flex-direction: column;
@@ -202,5 +203,5 @@
 }
 
-.time-input-group label {
+.time-group label {
     font-weight: bold;
     margin-bottom: 5px;
@@ -217,14 +218,14 @@
 }
 
+
 .comment-box {
-    width: 100%;
-    height: 80px;
+    height: 60px;
     border: 2px solid #d82b2b;
     border-radius: 15px;
     padding: 10px;
-    font-size: 14px;
     resize: none;
     font-family: inherit;
     color: #333;
+    margin-top: 20px;
 }
 
@@ -241,20 +242,22 @@
     border: none;
     font-size: 16px;
-    font-weight: bold;
     cursor: pointer;
     font-family: "Rubik Dirt", system-ui;
-    margin-top: 10px;
 }
 
 .tables-map {
     position: relative;
-    width: 700px;
-    height: 500px;
-    background-color: #ffffffdd;
+    width: 850px;
+    height: 600px;
     box-shadow: 0 0 12px rgba(0, 0, 0, 0.15);
     overflow: hidden;
-    border-radius: 12px;
-}
-
+    border-radius: 35px;
+    text-align: center;
+    padding: 20px 60px;
+    background-color: white;
+    animation: slideInLeft 0.3s ease-out forwards;
+    animation-delay: 0.05s;
+    opacity: 0;
+}
 
 .table-group {
@@ -267,10 +270,19 @@
 .table {
     position: absolute;
-    background-color: #814b28;
+    background-color: #FF7F50;
     z-index: 2;
 }
 
+.table-group.default .table {
+    background-color: #FF7F50;
+}
+
+.table-group.default .table.oval-inner {
+    background-color: white;
+}
+
 .oval-table {
-    width: 200px;
+    width: 272px;
+    height: 140px;
     top: 50px;
     left: 40px;
@@ -279,52 +291,61 @@
 .rect-table-1 {
     top: 20px;
-    left: 350px;
+    left: 375px;
+    width: 135px;
 }
 
 .rect-table-2 {
     top: 20px;
-    left: 500px;
+    left: 575px;
+    width: 135px;
 }
 
 .rect-table-3 {
     top: 20px;
-    left: 650px;
+    left: 775px;
+    width: 135px;
 }
 
 .vert-table {
-    top: 150px;
-    left: 690px;
-    height: 115px;
-}
-
-.left-table{
+    top: 160px;
+    left: 750px;
+    height: 175px;
+    width: 80px;
+    transform: rotate(-40deg);
+}
+
+.left-table {
     position: absolute;
     left: 35px;
-    top: 125px;
+    top: 180px;
 }
 
 .table.round {
-    width: 40px;
-    height: 40px;
+    width: 60px;
+    height: 60px;
     border-radius: 50%;
     top: 30px;
-    left: 30px;
+    left: 15px;
+    cursor: pointer;
+
 }
 
 .table.oval {
-    width: 160px;
-    height: 60px;
+    width: 230px;
+    height: 100px;
     border-radius: 30px;
     top: 20px;
     left: 20px;
     position: absolute;
+    cursor: pointer;
+
 }
 
 .table.oval-inner {
-    width: 80px;
-    height: 20px;
-    border-radius: 10px;
+    width: 150px;
+    height: 35px;
+    border-radius: 30px;
     background-color: #fdfbf6;
-    top: 40px;
+    top: 50px;
     left: 60px;
     position: absolute;
@@ -333,17 +354,19 @@
 
 .table.small-rect {
-    width: 100px;
-    height: 30px;
+    width: 135px;
+    height: 40px;
     top: 35px;
     left: 0;
-    border-radius: 8px;
+    border-radius: 30px;
+    cursor: pointer;
 }
 
 .table.vert-rect {
-    width: 30px;
-    height: 114px;
+    width: 40px;
+    height: 175px;
     top: 0;
-    left: 35px;
-    border-radius: 8px;
+    left: 20px;
+    border-radius: 30px;
+    cursor: pointer;
 }
 
@@ -351,108 +374,106 @@
 .chair {
     position: absolute;
-    width: 20px;
-    height: 20px;
-    background-color: #2f3e5c;
-    border-radius: 50%;
+    width: 35px;
+    height: 35px;
+    /*background-color: #2f3e5c; vaka bese */
+    background-color: #333333;
+    border-radius: 30%;
     z-index: 1;
 }
 
 .chair.top {
-    top: 30px;
-    left: 25px;
+    top: 20px;
 }
 
 .chair.right {
-    top: 30px;
-    right: 25px;
+    top: 20px;
+    right: 10px;
 }
 
 .chair.bottom {
-    bottom: 30px;
-    right: 25px;
+    bottom: 0px;
+    right: 10px;
 }
 
 .chair.left {
-    top: 50px;
-    left: 25px;
-}
-
+    top: 65px;
+}
 
 
 /* Oval chairs */
 .oval-chair.chair-0 {
-    top: 10px;
-    left: 90px;
+    top: 5px;
+    left: 120px;
 }
 
 .oval-chair.chair-1 {
-    top: 10px;
-    left: 140px;
+    top: 5px;
+    left: 160px;
 }
 
 .oval-chair.chair-2 {
-    top: 10px;
-    left: 115px;
+    top: 5px;
+    left: 200px;
 }
 
 .oval-chair.chair-3 {
-    top: 70px;
-    left: 140px;
+    top: 100px;
+    left: 200px;
 }
 
 .oval-chair.chair-4 {
-    top: 70px;
-    left: 115px;
+    top: 100px;
+    left: 160px;
 }
 
 .oval-chair.chair-5 {
-    top: 70px;
-    left: 90px;
+    top: 100px;
+    left: 120px;
 }
 
 .oval-chair.chair-6 {
-    top: 70px;
-    left: 65px;
+    top: 100px;
+    left: 80px;
 }
 
 .oval-chair.chair-7 {
-    top: 70px;
+    top: 100px;
     left: 40px;
 }
 
 .oval-chair.chair-8 {
-    top: 40px;
-    left: 10px;
+    top: 50px;
+    left: 5px;
 }
 
 .oval-chair.chair-9 {
-    top: 40px;
-    left: 170px;
+    top: 50px;
+    left: 232px;
 }
 
 .oval-chair.chair-10 {
-    top: 10px;
+    top: 5px;
     left: 40px;
 }
 
 .oval-chair.chair-11 {
-    top: 10px;
-    left: 65px;
+    top: 5px;
+    left: 80px;
 }
 
 /* Rect chairs horizontal */
 .small-rect-chair.chair-0 {
-    top: 25px;
+    top: 20px;
     left: 10px;
 }
 
 .small-rect-chair.chair-1 {
-    top: 25px;
-    left: 40px;
+    top: 20px;
+    left: 50px;
 }
 
 .small-rect-chair.chair-2 {
-    top: 25px;
-    left: 70px;
+    top: 20px;
+    left: 90px;
 }
 
@@ -464,10 +485,10 @@
 .small-rect-chair.chair-4 {
     top: 55px;
-    left: 40px;
+    left: 50px;
 }
 
 .small-rect-chair.chair-5 {
     top: 55px;
-    left: 70px;
+    left: 90px;
 }
 
@@ -475,41 +496,39 @@
 .vert-rect-chair.chair-0 {
     top: 10px;
-    left: 25px;
 }
 
 .vert-rect-chair.chair-1 {
-    top: 35px;
-    left: 25px;
+    top: 50px;
 }
 
 .vert-rect-chair.chair-2 {
-    top: 60px;
-    left: 25px;
+    top: 90px;
 }
 
 .vert-rect-chair.chair-3 {
-    top: 85px;
-    left: 25px;
+    top: 130px;
 }
 
 .vert-rect-chair.chair-4 {
     top: 10px;
-    left: 55px;
+    left: 45px;
 }
 
 .vert-rect-chair.chair-5 {
-    top: 35px;
-    left: 55px;
+    top: 50px;
+    left: 45px;
 }
 
 .vert-rect-chair.chair-6 {
-    top: 60px;
-    left: 55px;
+    top: 90px;
+    left: 45px;
 }
 
 .vert-rect-chair.chair-7 {
-    top: 85px;
-    left: 55px;
-}
+    top: 130px;
+    left: 45px;
+}
+
+
 
 /* Highlighted */
@@ -540,9 +559,4 @@
 }
 
-.tables-map {
-    animation: slideInLeft 0.3s ease-out forwards;
-    animation-delay: 0.05s;
-    opacity: 0;
-}
 
 .after-submit-dropdown {
@@ -550,4 +564,15 @@
     animation-delay: 0.25s;
     opacity: 0;
+    display: flex;
+    align-items: center;
+    flex-direction: column;
+    color: #D82B2B;
+    gap: 15px;
+    background-color: white;
+    text-align: center;
+    padding: 20px 60px;
+    border-radius: 35px;
+    box-shadow: 0 0 12px rgba(0, 0, 0, 0.15);
+    width: 250px;
 }
 
@@ -558,6 +583,6 @@
 }
 
-.lines{
-    top: 290px;
+.lines {
+    top: 350px;
     left: 510px;
     width: 1px;
@@ -567,8 +592,8 @@
 }
 
-.lines2{
-    top: 290px;
+.lines2 {
+    top: 350px;
     left: 510px;
-    width: 330px;
+    width: 460px;
     height: 1px;
     background-color: black;
@@ -577,9 +602,18 @@
 
 .table-group.available .table {
-    background-color: #4caf50 !important; /* зелена */
+    background-color: #4caf50 !important;
+}
+
+.table-group.available .table.oval-inner {
+    background-color: white !important;
 }
 
 .table-group.unavailable .table {
-    background-color: #e53935 !important; /* црвена */
+    background-color: red !important; /* црвена */
+    cursor: not-allowed;
+}
+
+.table-group.unavailable .table.oval-inner {
+    background-color: white !important;
 }
 
@@ -587,2 +621,321 @@
     outline: 3px solid yellow; /* за селектирана */
 }
+
+.table-group.available .table.oval-inner {
+    outline: 0px solid white !important;
+}
+
+.submit-button-time:disabled {
+    opacity: 0.5;
+    cursor: not-allowed;
+}
+
+/*.table-group:hover {*/
+/*    background-color: rgba(255, 200, 0, 0.3); !* светло жолта прозирна позадина *!*/
+/*    cursor: pointer; !* показува дека е кликабилно *!*/
+/*    transition: background-color 0.3s ease;*/
+/*    border-radius: 8px; !* ако сакаш убаво заоблено *!*/
+/*    box-shadow: 0 0 10px rgba(255, 200, 0, 0.5); !* ефект на светлина *!*/
+/*}*/
+
+.table-group:hover {
+    background: radial-gradient(circle, rgba(255, 255, 200, 0.4) 0%, transparent 70%);
+}
+
+.table-group.default:hover {
+    background-color: rgba(255, 200, 0, 0.3);
+    cursor: pointer;
+    transition: background-color 0.3s ease;
+    border-radius: 8px;
+    box-shadow: 0 0 10px rgba(255, 200, 0, 0.5);
+}
+
+/* Available tables hover – stronger green glow */
+.table-group.available:hover {
+    background-color: rgba(144, 238, 144, 0.3); /* lightgreen transparent */
+    cursor: pointer;
+    transition: background-color 0.3s ease;
+    border-radius: 8px;
+    box-shadow: 0 0 10px rgba(144, 238, 144, 0.5);
+}
+
+/* Unavailable tables hover – soft red glow */
+.table-group.unavailable:hover {
+    background-color: rgba(255, 99, 71, 0.3); /* tomato transparent */
+    cursor: not-allowed; /* show it's not clickable */
+    transition: background-color 0.3s ease;
+    border-radius: 8px;
+    box-shadow: 0 0 10px rgba(255, 99, 71, 0.5);
+}
+
+@keyframes shake {
+    0%, 100% {
+        transform: translateX(0);
+    }
+    20%, 60% {
+        transform: translateX(-4px);
+    }
+    40%, 80% {
+        transform: translateX(4px);
+    }
+}
+
+.table-group.unavailable:active {
+    animation: shake 0.3s;
+}
+
+@keyframes pulseGlow {
+    0% {
+        box-shadow: 0 0 5px rgba(144, 238, 144, 0.5);
+    }
+    50% {
+        box-shadow: 0 0 20px rgba(144, 238, 144, 0.9);
+    }
+    100% {
+        box-shadow: 0 0 5px rgba(144, 238, 144, 0.5);
+    }
+}
+
+.table-group.available:hover {
+    animation: pulseGlow 1.5s infinite;
+}
+
+.table-label {
+    position: absolute;
+    left: 50%;
+    top: 8%;
+    transform: translate(-50%, -50%);
+    /*color: black; vaka bese */
+    color: red;
+}
+
+.table-label-sank {
+    position: absolute;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    /*color: black; vaka bese*/
+    color: red;
+    top: -10%;
+}
+
+.table-label-8 {
+    top: -13%;
+    position: absolute;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    /*color: black; vaka bese*/
+    color: red;
+}
+
+.table-label-4 {
+    /*color: black; vaka bese*/
+    color: red;
+    display: flex;
+    justify-content: center;
+}
+
+/* Темна позадина */
+.overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(0, 0, 0, 0.6); /* полупроѕирна црна */
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    z-index: 999;
+}
+
+/* Модал кутија */
+.time-modal {
+    background-color: white;
+    padding: 30px;
+    border-radius: 12px;
+    width: 300px;
+    max-width: 90%;
+    text-align: center;
+    box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
+}
+
+/* Inputs и копчиња */
+.time-inputs {
+    display: flex;
+    flex-direction: column;
+    gap: 20px;
+}
+
+.time-input-group label {
+    font-weight: bold;
+    margin-bottom: 5px;
+    display: block;
+}
+
+input[type="time"] {
+    padding: 6px;
+    font-size: 16px;
+    width: 100%;
+}
+
+
+.close-button {
+    background-color: black;
+    color: white;
+    padding: 10px 30px;
+    border-radius: 999px;
+    border: none;
+    cursor: pointer;
+    font-family: "Rubik Dirt", system-ui;
+    font-size: 16px;
+}
+
+.select_text {
+    color: #D82B2B;
+    font-weight: normal;
+    margin-bottom: 20px;
+}
+
+.multi-time-select {
+    width: 100%;
+    height: 150px;
+    background-color: #1a1a1a;
+    color: white;
+    border: 1px solid #444;
+    padding: 8px;
+}
+
+.checkbox-time-list {
+    max-height: 250px;
+    overflow-y: auto;
+    padding: 10px;
+    border: 1px solid #ccc;
+    background-color: white;
+    border-radius: 8px;
+    display: flex;
+    flex-direction: column;
+    gap: 5px;
+}
+
+.checkbox-time-option {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+    font-size: 14px;
+}
+
+.hour-text {
+    margin: 0px;
+    font-size: large;
+    font-weight: normal;
+}
+
+.selected-times-wrapper {
+    padding: 15px;
+    background: #fafafa;
+    border-radius: 12px;
+    border: 1px solid #e0e0e0;
+    max-width: 400px;
+    transition: all 0.3s ease-in-out;
+    margin-bottom: 20px;
+}
+
+.selected-times-title {
+    font-size: larger;
+    color: #333333;
+    margin-bottom: 10px;
+    font-weight: normal;
+    margin: 0px 0px 10px 0px;
+}
+
+.selected-times-container {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 10px;
+    justify-content: center;
+}
+
+.selected-table-container {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: center;
+    padding-bottom: 10px;
+    flex-direction: column;
+
+}
+
+.time-chip {
+    padding: 6px 14px;
+    background-color: #f3f3f3;
+    border-radius: 9999px;
+    font-size: 14px;
+    color: #333;
+    border: 1px solid #d0d0d0;
+    transition: 0.2s ease;
+}
+
+.time-chip-table {
+    padding: 6px 14px;
+    background-color: #eab5b5;
+    border-radius: 9999px;
+    font-size: 14px;
+    color: #333;
+    border: 1px solid #eab5b5;
+    transition: 0.2s ease;
+}
+
+.time-chip:hover {
+    background-color: #eee;
+    cursor: pointer;
+}
+
+.time-chip-table:hover {
+    background-color: #eac8c8;
+    cursor: pointer;
+}
+
+.clear-button {
+    background-color: #333333;
+    color: white;
+    border: none;
+    padding: 5px 10px;
+    margin: 10px 0px 0px 0px;
+    border-radius: 6px;
+    cursor: pointer;
+    font-weight: bold;
+    opacity: 50%;
+    transition: background-color 0.4s ease;
+}
+
+.clear-button:hover {
+    background-color: #a93333;
+}
+
+.table-group {
+    transition: background-color 0.4s ease, border 0.4s ease, box-shadow 0.4s ease;
+}
+
+.table {
+    transition: background-color 0.4s ease;
+}
+
+.table.round,
+.table.oval,
+.table.small-rect,
+.table.vert-rect {
+    transition: background-color 0.4s ease;
+}
+
+.fade-wrapper {
+    opacity: 1;
+    transform: translateY(0);
+    transition: opacity 0.4s ease, transform 0.4s ease;
+}
+
+.fade-wrapper.hidden {
+    opacity: 0;
+    transform: translateY(10px);
+    pointer-events: none;
+}
+
+
Index: Frontend/src/ReserveTable.js
===================================================================
--- Frontend/src/ReserveTable.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/ReserveTable.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,7 +1,6 @@
-import React, {useState, useEffect} from 'react';
+import React, {useState, useEffect, useRef} from 'react';
 import './ReserveTable.css';
 import PACrustLogo from "./images/pacrustlogo.png"
 import {useNavigate} from "react-router-dom";
-import pizzaData from "./PizzaData";
 
 export default function ReserveTable({loggedUser, logout}) {
@@ -9,43 +8,24 @@
     const [peopleCount, setPeopleCount] = useState(1);
     const [reservationDate, setReservationDate] = useState('');
-    // const [showForm, setShowForm] = useState(true); // default to visible
-    //
-    // useEffect(() => {
-    //     // Check if form was shown before
-    //     const alreadyShown = localStorage.getItem('reservationFormShown');
-    //     if (!alreadyShown) {
-    //         setShowForm(true);
-    //         localStorage.setItem('reservationFormShown', 'true'); // mark it as shown
-    //     }
-    // }, []);
-    //
-    // const handleSubmit = (e) => {
-    //     e.preventDefault();
-    //     console.log(`Reservation for: ${peopleCount} people`);
-    //
-    //     setShowForm(false); // hide form after submit
-    //     // You can navigate or store the data here
-    // };
-    //
-    // useEffect(() => {
-    //     if (!showForm && reservationDate) {
-    //         console.log(`The date is: ${reservationDate}`);
-    //     }
-    // }, [reservationDate, showForm]);
-
+    const [fadeOut, setFadeOut] = useState(false);
+    const [showDetails, setShowDetails] = useState(false);
     const [fromTime, setFromTime] = useState("12:00");
     const [toTime, setToTime] = useState("13:00");
-    const [tableStatus, setTableStatus] = useState({}); // e.g. { "left-table-1": "available" }
     const [selectedTable, setSelectedTable] = useState(null);
+    const [selectedTimes, setSelectedTimes] = useState([]);
+    const [tableStatus, setTableStatus] = useState({});
+
+    const mapRef = useRef(null);
+
 
     const checkTablesAvailability = async () => {
         const tableIds = [
             "oval-table", "rect-table-1", "rect-table-2", "rect-table-3", "vert-table",
-            "left-table-1", "left-table-2", "left-table-3", "left-table-4", "left-table-5", "left-table-6", "left-table-7",
-            "right-table-10", "right-table-11", "right-table-12", "right-table-13", "right-table-14", "right-table-15", "right-table-16"
+            "left-table-1", "left-table-2", "left-table-3", "left-table-4", "left-table-5", "left-table-6", "left-table-7", "left-table-8",
+            "left-table-9", "right-table-10", "right-table-11", "right-table-12", "right-table-13",
+            "right-table-14", "right-table-15", "right-table-16"
         ];
-
         const newStatus = {};
-
+        let freeChairs = 0;
         for (let id of tableIds) {
             const res = await fetch("http://localhost:8000/api/check-table", {
@@ -59,51 +39,283 @@
                 })
             });
+
             const data = await res.json();
-            newStatus[id] = data.available ? "available" : "unavailable";
-        }
-
+
+            if (tableCapacities[id] >= peopleCount && data.available) {
+                newStatus[id] = "available";
+            } else {
+                newStatus[id] = "unavailable";
+            }
+            if (id === "oval-table" && data.available) {
+                freeChairs = data.freeChairs;
+            }
+        }
         setTableStatus(newStatus);
-    };
-
+        setFreeChairsCount(freeChairs);
+    };
+
+    const rightTablePositions = [
+        {top: 360, left: 520}, // right-table-11
+        {top: 410, left: 630}, // right-table-12
+        {top: 360, left: 740}, // right-table-13
+        {top: 410, left: 850}, // right-table-14
+        {top: 520, left: 550}, // right-table-15
+        {top: 520, left: 690}, // right-table-16
+        {top: 520, left: 830}, // right-table-17
+    ];
+    const leftTablePositions = [
+        {top: 50, left: 0},   // left-table-5
+        {top: 50, left: 165}, // left-table-6
+        {top: 50, left: 330}, // left-table-7
+        {top: 180, left: 0},   // left-table-8
+        {top: 180, left: 165}, // left-table-9
+        {top: 180, left: 330}, // left-table-10
+        {top: 310, left: 0},  // left-table-11
+        {top: 310, left: 165},
+        {top: 310, left: 330},
+    ];
     const handleTableClick = (id) => {
+        if (savedTables.length > 0) {
+            alert("Веќе имаш селектирано маса. Кликни 'Clear' за да избришеш и пробај повторно.");
+            return;
+        }
+
         if (tableStatus[id] === "available") {
             setSelectedTable(id);
         }
     };
-
+    const [comment, setComment] = useState("");
+    const defaultStatus = {
+        "oval-table": "default",
+        "rect-table-1": "default",
+        "rect-table-2": "default",
+        "rect-table-3": "default",
+        "vert-table": "default",
+        "left-table-1": "default",
+        "left-table-2": "default",
+        "left-table-3": "default",
+        "left-table-4": "default",
+        "left-table-5": "default",
+        "left-table-6": "default",
+        "left-table-7": "default",
+        "left-table-8": "default",
+        "left-table-9": "default",
+        "right-table-10": "default",
+        "right-table-11": "default",
+        "right-table-12": "default",
+        "right-table-13": "default",
+        "right-table-14": "default",
+        "right-table-15": "default",
+        "right-table-16": "default"
+    };
+    const [savedTimes, setSavedTimes] = useState([]);
+    const getTableLabel = (id) => {
+        if (id === "oval-table") return "Шанк";
+        if (id === "rect-table-1") return "Maca 1";
+        if (id === "rect-table-2") return "Maca 2";
+        if (id === "rect-table-3") return "Maca 3";
+        if (id === "vert-table") return "Maca 4";
+        if (id.startsWith("left-table-")) {
+            const num = parseInt(id.split("-")[2]) + 4; // 1 -> 5, 2 -> 6, ...
+            return "Maca " + num.toString();
+        }
+        if (id.startsWith("right-table-")) {
+            const num = parseInt(id.split("-")[2]) - 10 + 14; // 10 -> 14, 11 -> 15, ...
+            return "Maca " + num.toString();
+        }
+        return "";
+    };
+    const getLabelColor = (id) => {
+        const status = tableStatus[id];
+        switch (status) {
+            case "available":
+                return "#4caf50";   
+            case "unavailable":
+                return "red";     
+            case "default":
+                return "#FF7F50";    
+            default:
+                return "#FF7F50";   
+        }
+    };
     const handleReservationSubmit = async () => {
-        if (!selectedTable) {
+        if (!selectedTable && savedTables.length === 0) {
             alert("Избери маса!");
             return;
         }
 
-        const res = await fetch("http://localhost:8000/api/reserve", {
-            method: "POST",
-            headers: {"Content-Type": "application/json"},
-            body: JSON.stringify({
-                tableId: selectedTable,
-                date: reservationDate,
-                fromTime,
-                toTime,
-                username: loggedUser.username,
-                peopleCount,
-                comment: "" // или читај од поле ако го користиш
-            })
-        });
-
-        const data = await res.json();
-
-        if (res.ok) {
-            alert("Успешна резервација!");
-            checkTablesAvailability(); // update again
-        } else {
-            alert("Грешка: " + data.message);
-        }
-    };
+        if (savedTimes.length === 0) {
+            alert("Избери време!");
+            return;
+        }
+
+        const reservations = [];
+
+        for (let time of savedTimes) {
+            const startTime = time;
+            const [hour, minute] = time.split(":").map(Number);
+            let endHour = hour;
+            let endMinute = minute + 30;
+
+            if (endMinute >= 60) {
+                endMinute -= 60;
+                endHour += 1;
+            }
+
+            const endTime = `${endHour.toString().padStart(2, '0')}:${endMinute.toString().padStart(2, '0')}`;
+
+            const res = await fetch("http://localhost:8000/api/reserve", {
+                method: "POST",
+                headers: {"Content-Type": "application/json"},
+                body: JSON.stringify({
+                    tableId: selectedTable || savedTables[0],
+                    date: reservationDate,
+                    fromTime: startTime,
+                    toTime: endTime,
+                    username: loggedUser.username,
+                    name: loggedUser.name,
+                    email: loggedUser.email,
+                    peopleCount,
+                    comment
+                })
+            });
+
+            const data = await res.json();
+            if (!res.ok) {
+                alert("Грешка кај " + startTime + ": " + data.message);
+                return;
+            } else {
+                reservations.push(startTime + " - " + endTime);
+            }
+        }
+
+        alert("Успешно резервирани термини, очекувајте потврда на мејл.");
+        setFadeOut(true);
+        setTimeout(() => {
+            setSavedTables([]);
+            setSavedTimes([]);
+            setSelectedTable(null);
+            setComment("");
+            setShowDetails(false);
+            setFadeOut(false);
+        }, 400);
+        checkTablesAvailability(); 
+    };
+
+    useEffect(() => {
+        setSelectedTimes([]);
+        setSavedTimes([]);
+    }, [reservationDate]);
+
+    useEffect(() => {
+        setSelectedTimes([]);
+    }, [selectedTable]);
+
+    const tableCapacities = {
+        "oval-table": 12,
+        "rect-table-1": 6,
+        "rect-table-2": 6,
+        "rect-table-3": 6,
+        "vert-table": 8,
+        "left-table-1": 4,
+        "left-table-2": 4,
+        "left-table-3": 4,
+        "left-table-4": 4,
+        "left-table-5": 4,
+        "left-table-6": 4,
+        "left-table-7": 4,
+        "left-table-8": 4,
+        "left-table-9": 4,
+        "right-table-10": 4,
+        "right-table-11": 4,
+        "right-table-12": 4,
+        "right-table-13": 4,
+        "right-table-14": 4,
+        "right-table-15": 4,
+        "right-table-16": 4
+    };
+    const [savedTables, setSavedTables] = useState([]);
+    
+    const generateTimeIntervals = () => {
+        const intervals = [];
+        for (let hour = 10; hour < 23; hour++) {
+            for (let min = 0; min < 60; min += 30) {
+                const startH = hour.toString().padStart(2, '0');
+                const startM = min.toString().padStart(2, '0');
+                let endHour = hour;
+                let endMin = min + 30;
+
+                if (endMin >= 60) {
+                    endMin = 0;
+                    endHour += 1;
+                }
+
+                const endH = endHour.toString().padStart(2, '0');
+                const endM = endMin.toString().padStart(2, '0');
+
+                intervals.push({
+                    label: `${startH}:${startM} - ${endH}:${endM}`,
+                    value: `${startH}:${startM}`,
+                });
+            }
+        }
+        return intervals;
+    };
+
+    const [freeChairsCount, setFreeChairsCount] = useState(0);
+
+    const isAdmin = loggedUser?.role === "administrator";
+
+    const [tablePositions, setTablePositions] = useState({
+        "oval-table": {top: 200, left: 350},
+        "rect-table-1": {top: 150, left: 250},
+        "rect-table-2": {top: 150, left: 400},
+        "rect-table-3": {top: 150, left: 550},
+        "vert-table": {top: 260, left: 700},
+    });
+
+    const handleDragEnd = (e, tableId) => {
+        if (!isAdmin) return;
+
+        const mapRect = mapRef.current.getBoundingClientRect();
+
+        setTablePositions(prev => ({
+            ...prev,
+            [tableId]: {
+                left: e.clientX - mapRect.left - 40,
+                top: e.clientY - mapRect.top - 40,
+            }
+        }));
+    };
+    
+    const [leftPositions, setLeftPositions] = useState(leftTablePositions);
+    const [rightPositions, setRightPositions] = useState(rightTablePositions);
+    
+    useEffect(() => {
+        const savedLayout = localStorage.getItem("tableLayout");
+
+        if (savedLayout) {
+            try {
+                const parsed = JSON.parse(savedLayout);
+
+                if (parsed.tablePositions) {
+                    setTablePositions(parsed.tablePositions);
+                }
+                if (parsed.leftPositions) {
+                    setLeftPositions(parsed.leftPositions);
+                }
+                if (parsed.rightPositions) {
+                    setRightPositions(parsed.rightPositions);
+                }
+            } catch (e) {
+                console.error("Invalid saved layout", e);
+            }
+        }
+    }, []);
 
 
     return (
         <div className="local-background-2">
-            <div className="original-navigation">
+            <div className="original-navigation-reservation">
                 <div className="navigation-bar">
                     <div className="logodiv">
@@ -117,5 +329,5 @@
                     </div>
                     <div className="divpart">
-                        <p className="divpartP">ABOUT US</p>
+                        <a className="divpartP" onClick={() => navigate("/about_us")}>ABOUT US</a>
                     </div>
                 </div>
@@ -138,46 +350,22 @@
                 </div>
             </div>
-            <div className="header-reserve">
-                <h1 className="h1-reserve">RESERVE TABLE</h1>
-            </div>
-
-            {/*ova e ona ako sakash na pocetok da te prasha na cela strana*/}
-            {/*{showForm ? (*/}
-            {/*    <div className="overlay">*/}
-            {/*        <div className="reservation-form-box">*/}
-            {/*            <div className="onDiv">*/}
-            {/*                <h2 className="reserve-question">How many people is the reservation for and which date?</h2>*/}
-            {/*                <form onSubmit={handleSubmit} className="form-table">*/}
-            {/*                    <div className="separ">*/}
-            {/*                        <input*/}
-            {/*                            type="number"*/}
-            {/*                            value={peopleCount}*/}
-            {/*                            min="1"*/}
-            {/*                            step="1"*/}
-            {/*                            onChange={(e) => setPeopleCount(Math.floor(e.target.value))}*/}
-            {/*                            required*/}
-            {/*                            className="input-num"*/}
-            {/*                            align="center"*/}
-            {/*                            max="10"*/}
-            {/*                        />*/}
-            {/*                        <input*/}
-            {/*                            type="date"*/}
-            {/*                            value={reservationDate}*/}
-            {/*                            onChange={(e) => setReservationDate(e.target.value)}*/}
-            {/*                            required*/}
-            {/*                            className="date-picker"*/}
-            {/*                        />*/}
-            {/*                    </div>*/}
-            {/*                    <button className="submit-button" type="submit" style={{marginTop: '20px'}}>Submit*/}
-            {/*                    </button>*/}
-            {/*                </form>*/}
-            {/*            </div>*/}
-            {/*        </div>*/}
-            {/*    </div>*/}
-            {/*)}*/}
+
             <div className="reservation-layout">
-                <div className="tables-map">
-                    {/* Large oval table with inner space and 12 chairs */}
-                    <div className="table-group oval-table">
+                <div className="tables-map" ref={mapRef}>
+                    <div
+                        className={`table-group oval-table" ${tableStatus["oval-table"] || ""}`}
+                        draggable={isAdmin}
+                        onDragEnd={(e) => handleDragEnd(e, "oval-table")}
+                        style={{
+                            position: "absolute",
+                            top: tablePositions["oval-table"]?.top,
+                            left: tablePositions["oval-table"]?.left,
+                            cursor: isAdmin ? "move" : "pointer"
+                        }}
+                        onClick={() => !isAdmin && handleTableClick("oval-table")}
+                    >
+                        <div className="table-label-sank"
+                             style={{color: getLabelColor("oval-table")}}>{getTableLabel("oval-table")}</div>
+
                         {[...Array(12)].map((_, i) => (
                             <div className={`chair oval-chair chair-${i}`} key={i}></div>
@@ -185,8 +373,24 @@
                         <div className="table oval"></div>
                         <div className="table oval-inner"></div>
-                    </div>
-
-                    {/* Three horizontal rectangle tables with 6 chairs */}
-                    <div className="table-group rect-table-1">
+
+
+                    </div>
+
+                    <div
+                        
+                        className={`table-group rect-table-1 ${tableStatus["rect-table-1"] || ""}`}
+                        draggable={isAdmin}
+                        onDragEnd={(e) => handleDragEnd(e, "rect-table-1")}
+                        style={{
+                            position: "absolute",
+                            top: tablePositions["rect-table-1"]?.top,
+                            left: tablePositions["rect-table-1"]?.left,
+                            cursor: isAdmin ? "move" : "pointer"
+                        }}
+                        onClick={() => !isAdmin && handleTableClick("rect-table-1")}
+                    >
+                        <div className="table-label"
+                             style={{color: getLabelColor("rect-table-1")}}>{getTableLabel("rect-table-1")}</div>
+
                         {[...Array(6)].map((_, i) => (
                             <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
@@ -194,5 +398,20 @@
                         <div className="table small-rect"></div>
                     </div>
-                    <div className="table-group rect-table-2">
+                    <div
+                       
+                        className={`table-group rect-table-2 ${tableStatus["rect-table-2"] || ""}`}
+                        draggable={isAdmin}
+                        onDragEnd={(e) => handleDragEnd(e, "rect-table-2")}
+                        style={{
+                            position: "absolute",
+                            top: tablePositions["rect-table-2"]?.top,
+                            left: tablePositions["rect-table-2"]?.left,
+                            cursor: isAdmin ? "move" : "pointer"
+                        }}
+                        onClick={() => !isAdmin && handleTableClick("rect-table-2")}
+                    >
+                        <div className="table-label"
+                             style={{color: getLabelColor("rect-table-2")}}>{getTableLabel("rect-table-2")}</div>
+
                         {[...Array(6)].map((_, i) => (
                             <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
@@ -200,5 +419,19 @@
                         <div className="table small-rect"></div>
                     </div>
-                    <div className="table-group rect-table-3">
+                    <div
+                        className={`table-group rect-table-3 ${tableStatus["rect-table-3"] || ""}`}
+                        draggable={isAdmin}
+                        onDragEnd={(e) => handleDragEnd(e, "rect-table-3")}
+                        style={{
+                            position: "absolute",
+                            top: tablePositions["rect-table-3"]?.top,
+                            left: tablePositions["rect-table-3"]?.left,
+                            cursor: isAdmin ? "move" : "pointer"
+                        }}
+                        onClick={() => !isAdmin && handleTableClick("rect-table-3")}
+                    >
+                        <div className="table-label"
+                             style={{color: getLabelColor("rect-table-3")}}>{getTableLabel("rect-table-3")}</div>
+
                         {[...Array(6)].map((_, i) => (
                             <div className={`chair small-rect-chair chair-${i}`} key={i}></div>
@@ -207,6 +440,20 @@
                     </div>
 
-                    {/* Vertical rectangle table */}
-                    <div className="table-group vert-table">
+                    <div
+                        className={`table-group vert-table ${tableStatus["vert-table"] || ""}`}
+                        draggable={isAdmin}
+                        onDragEnd={(e) => handleDragEnd(e, "vert-table")}
+                        style={{
+                            position: "absolute",
+                            top: tablePositions["vert-table"]?.top,
+                            left: tablePositions["vert-table"]?.left,
+                            cursor: isAdmin ? "move" : "pointer"
+                        }}
+                        onClick={() => !isAdmin && handleTableClick("vert-table")}
+                    >
+
+                        <div className="table-label-8"
+                             style={{color: getLabelColor("vert-table")}}>{getTableLabel("vert-table")}</div>
+
                         {[...Array(8)].map((_, i) => (
                             <div className={`chair vert-rect-chair chair-${i}`} key={i}></div>
@@ -215,30 +462,37 @@
                     </div>
 
-                    {/* Grid of small round tables bottom left */}
                     <div className="left-table">
-                        {[...Array(7)].map((_, i) => {
-                            const row = i < 3 ? 0 : 1;
-                            const col = i < 3 ? i : i - 3;
-                            return (
-                                <div
-                                    className={`table-group left-table-${i + 1} ${tableStatus[`left-table-${i + 1}`]} ${selectedTable === `left-table-${i + 1}` ? 'selected' : ''}`}
-                                    key={`left-${i + 1}`}
-                                    onClick={() => handleTableClick(`left-table-${i + 1}`)}
-                                    style={{
-                                        top: `${150 + row * 100}px`,
-                                        left: `${20 + col * 80}px`
-                                    }}
-                                >
-                                    <div className="chair top"></div>
-                                    <div className="chair bottom"></div>
-                                    <div className="chair left"></div>
-                                    <div className="chair right"></div>
-                                    <div className="table round"></div>
+                        {[...Array(9)].map((_, i) => (
+                            <div
+                                className={`table-group left-table-${i + 1} ${tableStatus[`left-table-${i + 1}`]} ${selectedTable === `left-table-${i + 1}` ? 'selected' : ''}`}
+                                key={`left-${i + 1}`}
+                                onClick={() => handleTableClick(`left-table-${i + 1}`)}
+                                draggable={isAdmin}
+                                onDragEnd={(e) => {
+                                    if (!isAdmin) return;
+                                    const parent = e.currentTarget.parentElement.getBoundingClientRect();
+                                    const newPos = [...leftPositions];
+                                    newPos[i] = {
+                                        top: e.clientY - parent.top - 30,
+                                        left: e.clientX - parent.left - 30,
+                                    };
+                                    setLeftPositions(newPos);
+                                }}
+                                style={leftPositions[i]}
+                            >
+                                <div className="chair top"></div>
+                                <div className="chair bottom"></div>
+                                <div className="chair left"></div>
+                                <div className="chair right"></div>
+                                <div className="table round"></div>
+
+                                <div className="table-label-4"
+                                     style={{color: getLabelColor(`left-table-${i + 1}`)}}>
+                                    {getTableLabel(`left-table-${i + 1}`)}
                                 </div>
-                            );
-                        })}
-                    </div>
-
-                    {/* Right side grid of small round tables */}
+                            </div>
+                        ))}
+                    </div>
+
                     <div className="right-table">
                         {[...Array(7)].map((_, i) => (
@@ -247,7 +501,17 @@
                                 key={`right-${i + 10}`}
                                 onClick={() => handleTableClick(`right-table-${i + 10}`)}
-                                style={{
-                                    top: `${300 + Math.floor(i / 3) * 60}px`,
-                                    left: `${550 + (i % 3) * 60}px`
+                                style={rightPositions[i]}
+                                draggable={isAdmin}
+                                onDragEnd={(e) => {
+                                    if (!isAdmin) return;
+
+                                    const mapRect = mapRef.current.getBoundingClientRect();
+
+                                    const newPos = [...rightPositions];
+                                    newPos[i] = {
+                                        top: e.clientY - mapRect.top - 30,
+                                        left: e.clientX - mapRect.left - 30,
+                                    };
+                                    setRightPositions(newPos);
                                 }}
                             >
@@ -257,4 +521,11 @@
                                 <div className="chair right"></div>
                                 <div className="table round"></div>
+
+                                <div
+                                    className="table-label-4"
+                                    style={{color: getLabelColor(`right-table-${i + 10}`)}}
+                                >
+                                    {getTableLabel(`right-table-${i + 10}`)}
+                                </div>
                             </div>
                         ))}
@@ -263,14 +534,63 @@
                     <div className="lines"></div>
                     <div className="lines2"></div>
-                    {/* Central round table highlighted */}
-                    {/*<div className="table-group selected-table" style={{ top: '220px', left: '200px' }}>*/}
-                    {/*    <div className="chair top"></div>*/}
-                    {/*    <div className="chair bottom"></div>*/}
-                    {/*    <div className="chair left"></div>*/}
-                    {/*    <div className="chair right"></div>*/}
-                    {/*    <div className="table round"></div>*/}
-                    {/*</div>*/}
-
                 </div>
+
+                {selectedTable && (
+                    <div className="overlay">
+                        <div className="time-modal">
+                            <h3 className="select_text">Select Time: </h3>
+                            <div className="time-inputs">
+                                <div className="time-group">
+                                    <div className="checkbox-time-list">
+                                        {generateTimeIntervals().map((time) => (
+                                            <label key={time.value} className="checkbox-time-option">
+                                                <input
+                                                    type="checkbox"
+                                                    value={time.value}
+                                                    checked={selectedTimes.includes(time.value)}
+                                                    onChange={(e) => {
+                                                        const value = e.target.value;
+                                                        setSelectedTimes((prev) =>
+                                                            e.target.checked
+                                                                ? [...prev, value].sort()
+                                                                : prev.filter((t) => t !== value)
+                                                        );
+                                                    }}
+                                                />
+                                                <p className="hour-text">{time.label}</p>
+                                            </label>
+                                        ))}
+                                    </div>
+                                </div>
+
+                                <button
+                                    className="submit-button-time"
+                                    onClick={() => {
+                                        if (selectedTimes.length === 0) {
+                                            alert("Избери време!");
+                                            return;
+                                        }
+                                        setShowDetails(true); 
+                                        setFadeOut(true);
+                                        setTimeout(() => {
+                                            checkTablesAvailability();
+                                            setSavedTimes(selectedTimes);
+                                            setSavedTables((prev) => [...new Set([...prev, getTableLabel(selectedTable)])]); 
+                                            setSelectedTable(null);
+                                            setFadeOut(false);
+                                        }, 200);
+                                    }}
+                                    disabled={!reservationDate}
+                                >
+                                    Save
+                                </button>
+
+                                <button className="close-button" onClick={() => setSelectedTable(null)}>Close</button>
+                            </div>
+                        </div>
+                    </div>
+                )}
+
+
                 <div className="right-side">
                     <div className="after-submit-dropdown">
@@ -278,5 +598,4 @@
 
                         <div className="reservation-controls">
-                            {/* Датум */}
                             <input
                                 type="date"
@@ -284,7 +603,8 @@
                                 onChange={(e) => setReservationDate(e.target.value)}
                                 className="date-picker"
+                                min={new Date().toISOString().split("T")[0]}
                             />
 
-                            {/* Број на луѓе */}
+
                             <select
                                 id="people-select"
@@ -301,39 +621,87 @@
                         </div>
 
-                        <button className="submit-button-time" onClick={checkTablesAvailability}>
+                        <button
+                            className="submit-button-time"
+                            onClick={checkTablesAvailability}
+                            disabled={!reservationDate}
+                        >
                             Check Availability
                         </button>
-                        <button onClick={handleReservationSubmit} className="submit-button-time">
-                            Submit Reservation
+
+                        {showDetails && (
+                            <div className={`selected-times-wrapper fade-wrapper ${fadeOut ? 'hidden' : ''}`}>
+                                <h4 className="selected-times-title">You Selected</h4>
+                                <div className="selected-table-container">
+                                    {savedTables.map((table, index) => (
+                                        <div key={index} className="time-chip-table">
+                                            {table}
+                                        </div>
+                                    ))}
+                                </div>
+                                <div className="selected-times-container">
+                                    {savedTimes.map((time, index) => {
+                                        const label = generateTimeIntervals().find(t => t.value === time)?.label || time;
+                                        return (
+                                            <div key={index} className="time-chip">
+                                                {label}
+                                            </div>
+                                        );
+                                    })}
+                                </div>
+                                <button
+                                    className="clear-button"
+                                    onClick={() => {
+                                        setFadeOut(true); 
+                                        setTimeout(() => {
+                                            setSavedTables([]);
+                                            setSavedTimes([]);
+                                            setSelectedTable(null);
+
+                                            setTableStatus(defaultStatus)
+                                            setShowDetails(false);
+                                            setFadeOut(false); 
+                                        }, 400); 
+
+
+                                    }}
+                                >
+                                    Clear
+                                </button>
+                                <textarea
+                                    className="comment-box"
+                                    placeholder="Leave a comment"
+                                    value={comment}
+                                    onChange={(e) => setComment(e.target.value)}
+                                ></textarea>
+
+                                <button
+                                    onClick={handleReservationSubmit}
+                                    className="submit-button-time"
+                                    disabled={!reservationDate}
+                                >
+                                    Submit Reservation
+                                </button>
+                            </div>
+                        )}
+
+
+                    </div>
+
+                    {isAdmin && (
+                        <button className="layoutBtn" onClick={() => {
+                            const layout = {
+                                tablePositions,
+                                leftPositions,
+                                rightPositions
+                            };
+                            localStorage.setItem("tableLayout", JSON.stringify(layout));
+                            alert("Layout saved");
+                        }
+                        }>
+                            Save layout
                         </button>
-                    </div>
-                    <div className="time-gathering">
-                        <h2 className="time-title">Time of gathering</h2>
-
-                        <div className="time-inputs">
-                            <div className="time-input-group">
-                                <label>From:</label>
-                                <input
-                                    type="time"
-                                    className="time-field"
-                                    value={fromTime}
-                                    onChange={(e) => setFromTime(e.target.value)}
-                                />
-                            </div>
-                            <div className="time-input-group">
-                                <label>To:</label>
-                                <input
-                                    type="time"
-                                    className="time-field"
-                                    value={toTime}
-                                    onChange={(e) => setToTime(e.target.value)}
-                                /></div>
-                        </div>
-
-                        <textarea className="comment-box" placeholder="Leave a comment"></textarea>
-
-                        <button className="submit-button-time">submit</button>
-                    </div>
+                    )}
                 </div>
+
 
             </div>
@@ -342,3 +710,2 @@
         ;
 };
-
Index: Frontend/src/SigninPage.css
===================================================================
--- Frontend/src/SigninPage.css	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/SigninPage.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,158 +1,164 @@
 
 .login-container {
-  display: flex;
-  color: white;
-  height: 100%;
-   background: url("images/red-background.jpg");
-  background-repeat: no-repeat;
+    display: flex;
+    color: white;
+    height: 100%;
+    background: url("images/red-background.jpg");
+    background-repeat: no-repeat;
+    min-height: 100vh;
 }
 
 .sidebar {
-  padding: 30px 20px;
-  background-color: transparent;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
+    padding: 30px 20px;
+    background-color: transparent;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
 }
 
 .logo2 {
-  width: 100px;
-  height: 100px;
+    width: 100px;
+    height: 100px;
 }
 
 
-.wrap{
-  display: flex;
-  margin-top: 150px;
-  background-image: url("./images/secondPizza.png");
-  position: relative;
-  background-repeat: no-repeat;
-  flex: 1;
-  justify-content: flex-start;
-  align-items: center;
+.wrap-signin {
+    display: flex;
+    margin-top: 250px;
+    background-image: url("./images/secondPizza.png");
+    position: relative;
+    background-repeat: no-repeat;
+    flex: 1;
+    justify-content: center;
+    align-items: center;
 }
 
-.text-part{
-  width: 500px;
-  text-align: right;
-  font-size: xx-large;
-}
-.no-margin{
-  margin: 0px;
+.text-part {
+    width: 500px;
+    text-align: right;
+    font-size: xx-large;
 }
 
-.no-margin{
-  margin: 0px;
-}
-.login-part{
-  width: 500px;
-  height: 500px;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  margin-left: 100px;
+.no-margin {
+    margin: 0px;
 }
 
-.secondImg{
-  width: 700px;
+.no-margin {
+    margin: 0px;
+}
+
+.login-part {
+    width: 500px;
+    height: 500px;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    margin-left: 100px;
+}
+
+.secondImg {
+    width: 700px;
 }
 
 .login-form {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
 }
 
 .form-container {
-  background: white;
-  border-radius: 30px;
-  padding: 40px 30px;
-  width: 400px;
-  box-shadow: 0 0 10px rgba(0,0,0,0.2);
+    background: white;
+    border-radius: 30px;
+    padding: 40px 30px;
+    width: 400px;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
 }
 
 .input-group {
-  width: 100%;
-  margin-bottom: 20px;
+    width: 100%;
+    margin-bottom: 20px;
 }
 
 .input-group label {
-  display: block;
-  margin-bottom: 5px;
-  color: #888;
-  font-family: 'Rubik Dirt', sans-serif;
+    display: block;
+    margin-bottom: 5px;
+    color: #888;
+    font-family: 'Rubik Dirt', sans-serif;
 }
 
 .input-group input {
-  width: 100%;
-  padding: 10px 5px;
-  border: none;
-  border-bottom: 2px solid #D32F2F;
-  font-size: 16px;
-  outline: none;
+    width: 100%;
+    padding: 10px 5px;
+    border: none;
+    border-bottom: 2px solid #D32F2F;
+    font-size: 16px;
+    outline: none;
 }
 
 .login-button {
-  width: 100%;
-  background-color: #d62828;
-  font-family: 'Rubik Dirt', sans-serif;
-  border: none;
-  font-size: 15px;
-  padding: 10px 16px;
-  border-radius: 20px;
-  cursor: pointer;
-  color: white;
+    width: 100%;
+    background-color: #d62828;
+    font-family: 'Rubik Dirt', sans-serif;
+    border: none;
+    font-size: 15px;
+    padding: 10px 16px;
+    border-radius: 20px;
+    cursor: pointer;
+    color: white;
 }
 
 .separator {
-  display: flex;
-  align-items: center;
-  width: 100%;
-  margin: 20px 0;
-  color: #888;
-  font-size: 14px;
+    display: flex;
+    align-items: center;
+    width: 100%;
+    margin: 20px 0;
+    color: #888;
+    font-size: 14px;
+    justify-content: center;
 }
 
 .separator hr {
-  flex: 1;
-  border: none;
-  border-top: 1px solid #ccc;
+    flex: 1;
+    border: none;
+    border-top: 1px solid #ccc;
 }
 
 .separator span {
-  margin: 0 10px;
-  white-space: nowrap;
+    margin: 0 10px;
+    white-space: nowrap;
 }
 
 .social-buttons {
-  display: flex;
-  gap: 20px;
+    display: flex;
+    gap: 20px;
 }
+
 .google-btn, .facebook-btn {
-  font-size: 30px;
-  background: none;
-  border: none;
-  cursor: pointer;
-  color: #d62828;
-  padding: 5px 10px;
+    font-size: 30px;
+    background: none;
+    border: none;
+    cursor: pointer;
+    color: #d62828;
+    padding: 5px 10px;
 }
 
 .sign-in {
-  color: #d62828;
+    color: #d62828;
 }
 
-.sign-in:hover{
-  color: #841919;
-  cursor: pointer;
+.sign-in:hover {
+    color: #841919;
+    cursor: pointer;
 }
 
 .radio {
-  font-family: "Rubik Dirt", system-ui;
-  font-size: 16px;
-  color: #333333;
+    font-family: "Rubik Dirt", system-ui;
+    font-size: 16px;
+    color: #333333;
 }
+
 .radio-button-group {
-  display: flex;
-  flex-direction: column;
+    display: flex;
+    flex-direction: column;
     margin-bottom: 20px;
 }
Index: Frontend/src/SigninPage.js
===================================================================
--- Frontend/src/SigninPage.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/SigninPage.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -8,6 +8,10 @@
 
 
-export default function SigninPage({setLoggedUser, logout}) {
+export default function SigninPage({loggedUser, setLoggedUser, logout}) {
     const navigate = useNavigate();
+
+    const [name, setName] = useState(loggedUser ? loggedUser.username : "");
+    const [city, setCity] = useState(loggedUser ? loggedUser.city : "");
+
     const [username, setUsername] = useState("");
     const [password, setFirstPassword] = useState("");
@@ -18,4 +22,5 @@
     const [promotions, setPromotions] = useState("");
     const [terms, setTerms] = useState("");
+
     const [selected, setSelected] = useState(null);
 
@@ -71,5 +76,5 @@
                 </div>
 
-                <div className="wrap">
+                <div className="wrap-signin">
                     <div className="text-part">
                         <h1 className="no-margin">Looking for the best pizza in town?</h1>
@@ -79,12 +84,17 @@
                         <div className="form-container">
                             <form className="login-form" onSubmit={handleRegister}>
+                                <div className="input-group">
+                                    <input type="text" placeholder="Name" value={name}
+                                           onChange={(e) => setName(e.target.value)}/>
+                                </div>
+
+                                <div className="input-group">
+                                    <input type="text" placeholder="Username" value={username}
+                                           onChange={(e) => setUsername(e.target.value)}/>
+                                </div>
 
                                 <div className="input-group">
                                     <input type="text" placeholder="Mail" value={mail}
                                            onChange={(e) => setMail(e.target.value)}/>
-                                </div>
-                                <div className="input-group">
-                                    <input type="text" placeholder="Username" value={username}
-                                           onChange={(e) => setUsername(e.target.value)}/>
                                 </div>
 
@@ -102,4 +112,9 @@
                                     <input type="text" placeholder="Address" value={address}
                                            onChange={(e) => setAddress(e.target.value)}/>
+                                </div>
+
+                                <div className="input-group">
+                                    <input type="text" placeholder="City" value={city}
+                                           onChange={(e) => setCity(e.target.value)}/>
                                 </div>
 
Index: Frontend/src/UserProfile.css
===================================================================
--- Frontend/src/UserProfile.css	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/UserProfile.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -2,4 +2,7 @@
     margin: 30px 15px 30px;
     color: #D82B2B;
+    font-size: clamp(18px, 5vw, 32px);
+    font-weight: lighter;
+
 }
 
@@ -7,26 +10,64 @@
     margin: 30px 15px 30px;
     color: #D82B2B;
-}
+    font-size: clamp(18px, 5vw, 32px);
+    font-weight: lighter;
+
+}
+
+.theUser3 {
+    margin: 30px 15px 30px;
+    color: #D82B2B;
+    font-size: clamp(18px, 5vw, 32px);
+    font-weight: lighter;
+
+}
+
+/*.za_flex {*/
+/*    display: flex;*/
+/*    align-items: center;*/
+/*    gap: 10px;*/
+/*    width: 225px;*/
+/*    cursor: pointer;*/
+/*}*/
+
+/*.za_flex2 {*/
+/*    display: flex;*/
+/*    align-items: center;*/
+/*    gap: 10px;*/
+/*    width: 370px;*/
+/*    cursor: pointer;*/
+/*}*/
+
+/*.za_flex3 {*/
+/*    display: flex;*/
+/*    align-items: center;*/
+/*    gap: 10px;*/
+/*    width: 420px;*/
+/*    cursor: pointer;*/
+/*}*/
 
 .za_flex {
     display: flex;
+    flex-wrap: nowrap;
     align-items: center;
     gap: 10px;
-    width: 225px;
-    cursor: pointer;
-}
-
-.za_flex2 {
-    display: flex;
-    align-items: center;
-    gap: 10px;
-    width: 370px;
-    cursor: pointer;
-}
+    width: 100%; /* Сега се адаптира на родителот */
+    max-width: 420px; /* Максимална големина за desktop */
+    cursor: pointer;
+    justify-content: space-between;
+    padding: 10px 20px;
+    box-sizing: border-box;
+}
+
 
 .arrow-icon {
-    font-size: 24px;
-    color: #D82B2B;
+    font-size: 18px;
+    color: #D82B2B; /* Темноцрвена или каква ти е темата */
+    margin-left: 8px;
     transition: transform 0.3s ease;
+}
+
+.za_flex:hover .arrow-icon {
+    transform: translateX(5px);
 }
 
@@ -63,4 +104,26 @@
 }
 
+.reOrder {
+    color: white;
+    background: #0D1B2A;
+    font-size: large;
+    border-radius: 100px;
+    border: 0px;
+    margin-top: 10px;
+    font-family: 'Rubik Dirt', sans-serif;
+    font-weight: lighter;
+    border: none;
+    padding: 12px 24px;
+    cursor: pointer;
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
+    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
+}
+
+.reOrder:hover {
+    background: linear-gradient(45deg, #0D1B2A, #8A001E);
+    transform: scale(1.025);
+    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
+}
+
 
 .divButton {
@@ -70,14 +133,28 @@
 
 .saveButton {
-    background-color: #D82B2B;
-    color: white;
+    color: white;
+    background-color: red;
+    background-image: linear-gradient(45deg, #ff4d4d, #ff1a1a);
     font-size: large;
-    font-weight: bolder;
     border-radius: 100px;
     border: 0px;
     width: 100px;
     margin-top: 10px;
-    padding: 10px;
-}
+    font-family: 'Rubik Dirt', sans-serif;
+    font-weight: lighter;
+    border: none;
+    padding: 12px 24px;
+    cursor: pointer;
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
+    /*transition: transform 0.3s ease, background-color 0.3s ease;*/
+    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
+}
+
+.saveButton:hover {
+    background-color: #ff6666;
+    transform: scale(1.025);
+    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
+}
+
 
 .separatedInput::placeholder {
@@ -87,17 +164,37 @@
 }
 
+/*.navigation-bar {*/
+/*    padding-right: 40px;*/
+/*    flex-wrap: wrap;*/
+/*    justify-content: center;*/
+/*}*/
+
+/*.navigation-bar {*/
+/*    display: flex;*/
+/*    padding-right: 240px;*/
+/*    justify-content: space-between;*/
+/*    align-items: center;*/
+/*}*/
+
 .navigation-bar {
     display: flex;
-    padding-right: 240px;
+    flex-wrap: wrap;
+    justify-content: space-between;
+    align-items: center;
+    padding: 0px;
+    gap: 10px;
 }
 
 .original-navigation {
+    display: flex;
+    flex-wrap: wrap;
+    align-items: center;
     background: url("images/red-background.jpg");
     background-repeat: no-repeat;
-    display: flex;
-    align-items: center;
+    background-size: cover;
     padding: 10px 0px;
     justify-content: space-around;
 }
+
 
 .nav-right-part {
@@ -109,4 +206,5 @@
     gap: 20px;
     /*padding: 25px 0px;*/
+    justify-content: center;
 }
 
@@ -150,5 +248,5 @@
 .backgroundBox {
     padding: 40px;
-    min-height: 78vh;
+    min-height: 76vh;
     background-image: url("./images/white-background.png");
     background-size: cover;
@@ -162,2 +260,343 @@
     cursor: pointer;
 }
+
+.reservation-grid {
+    display: grid;
+    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
+    gap: 20px;
+    padding: 20px;
+    justify-items: center;
+}
+
+.reservation-card {
+    background-color: #fdfdfd;
+    border-radius: 12px;
+    padding: 16px;
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
+    width: 100%;
+    max-width: 230px;
+    transition: transform 0.2s ease;
+    border-left: 5px solid #e67e22;
+    display: flex;
+    flex-direction: column;
+}
+
+.reservation-card:hover {
+    transform: translateY(-10px) rotate(-2deg);
+}
+
+.reservation-card p {
+    margin: 6px 0;
+    font-size: 15px;
+    color: #333;
+    font-weight: lighter;
+}
+
+.no-reservations {
+    text-align: center;
+    font-size: 18px;
+    color: #777;
+    margin-top: 20px;
+}
+
+
+.profile-grid {
+    display: grid;
+    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
+    gap: 15px;
+    padding: 20px;
+    justify-items: center;
+}
+
+.profile-card {
+    background-color: #fff;
+    border-radius: 12px;
+    padding: 20px;
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
+    width: 100%;
+    max-width: 230px;
+    display: flex;
+    flex-direction: column;
+    gap: 10px;
+    border-left: 5px solid #D82B2B;
+    transition: transform 0.2s ease;
+}
+
+.profile-card:hover {
+    transform: translateY(-10px) rotate(-2deg);
+
+}
+
+.profile-card label {
+    font-weight: lighter;
+    color: #D82B2B;
+}
+
+.profile-card input {
+    padding: 10px;
+    border-radius: 8px;
+    border: 1px solid #ddd;
+    font-size: 16px;
+}
+
+.orders-grid {
+    display: grid;
+    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
+    gap: 30px;
+    padding: 20px;
+    justify-items: center;
+}
+
+.order-card {
+    background-color: #fffef9;
+    border-radius: 12px;
+    padding: 18px;
+    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.06);
+    max-width: 340px;
+    width: 100%;
+    border-left: 5px solid #D82B2B;
+    transition: transform 0.2s ease;
+    display: flex;
+    flex-direction: column;
+}
+
+.order-card:hover {
+    transform: translateY(-10px) rotate(-2deg);
+}
+
+.order-card p {
+    margin: 6px 0;
+    font-size: 15px;
+    color: black;
+    font-weight: lighter;
+}
+
+@media (max-width: 768px) {
+
+    .orders-grid {
+        display: grid;
+        grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
+        gap: 0px;
+        padding: 0px;
+        justify-items: center;
+    }
+
+    .profile-grid {
+        display: grid;
+        grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
+        padding: 0px;
+        gap: 0px;
+        justify-items: center;
+    }
+
+    .reservation-grid {
+        display: grid;
+        grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
+        gap: 0px;
+        padding: 0px;
+        justify-items: center;
+    }
+
+    .za_flex {
+        max-width: 100%;
+        display: flex;
+        align-items: flex-start;
+        gap: 8px;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+
+    .theUser, .theUser2, .theUser3 {
+        margin: 0;
+        font-size: 18px; /* може помала големина за телефон */
+        flex-shrink: 1; /* овозможи да се смали ако треба */
+        font-weight: lighter;
+    }
+
+    .profile-card input {
+        font-size: 14px;
+    }
+
+    .divpart {
+        padding: 10px;
+        text-align: center;
+    }
+
+    .logodiv {
+        margin-left: 0;
+    }
+
+    .backgroundBox {
+        padding: 10px;
+    }
+
+    .saveButton {
+        font-size: 10px;
+        width: 50px;
+
+    }
+
+    .separatedInput {
+        min-width: unset;
+        max-width: 100%;
+        width: 100%;
+    }
+
+    .arrow-icon {
+        flex-shrink: 0; /* стрелката нека остане цела */
+        font-size: 16px;
+        margin-left: 8px;
+    }
+
+    .profile-card, .order-card, .reservation-card {
+        width: 50%; /* помалку од 100% ширина на екран */
+        margin: 7px auto; /* да се центрира */
+        padding: 5px; /* можеш да го намалиш padding ако сакаш */
+        font-size: 10px; /* по мали букви за подобра прегледност */
+        max-width: 150px;
+        display: flex;
+        flex-direction: column;
+    }
+
+    .profile-card input {
+        font-size: 10px;
+    }
+
+    .reservation-card p {
+        font-size: 10px;
+    }
+
+    .order-card p {
+        font-size: 10px;
+    }
+}
+
+
+.add-card-again {
+    background-color: red;
+    background-image: linear-gradient(45deg, #ff4d4d, #ff1a1a); /* gradient */
+    color: white;
+    font-weight: lighter;
+    border: none;
+    padding: 12px 24px;
+    border-radius: 30px;
+    cursor: pointer;
+    font-size: 1rem;
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* depth */
+    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
+    margin: 5px 0px;
+    font-family: 'Rubik Dirt', sans-serif;
+}
+
+.add-card-again:hover {
+    background-color: #ff6666;
+    transform: scale(1.025);
+    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
+}
+
+.cancel-booking {
+    background-color: red;
+    background-image: linear-gradient(45deg, #ff4d4d, #ff1a1a); /* gradient */
+    color: white;
+    font-weight: lighter;
+    border: none;
+    padding: 5px;
+    border-radius: 30px;
+    cursor: pointer;
+    font-size: 1rem;
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* depth */
+    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
+    margin: 5px 0px;
+    font-family: 'Rubik Dirt', sans-serif;
+
+}
+
+.cancel-booking:hover {
+    background-color: #ff6666;
+    transform: scale(1.025);
+    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
+}
+
+.modal-overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.modal {
+    background: #fff;
+    padding: 20px;
+    border-radius: 12px;
+    max-width: 400px;
+    text-align: center;
+}
+
+.modal-buttons {
+    margin-top: 15px;
+    display: flex;
+    justify-content: space-around;
+}
+
+.modal-buttons button {
+    padding: 8px 15px;
+    border: none;
+    border-radius: 6px;
+    cursor: pointer;
+}
+
+.delete-reservation-1 {
+    font-weight: bold;
+    border: none;
+    border-radius: 30px;
+    cursor: pointer;
+    font-size: 1rem;
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
+    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
+    margin: 5px 0px;
+}
+
+.delete-reservation-1:hover {
+    background-color: #e68181;
+    transform: scale(1.025);
+    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
+}
+
+.delete-reservation-2 {
+    font-weight: bold;
+    border: none;
+    border-radius: 30px;
+    cursor: pointer;
+    font-size: 1rem;
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
+    transition: transform 0.3s ease, background-color 0.3s ease;
+    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
+    margin: 5px 0px;
+}
+
+.delete-reservation-2:hover {
+    background-color: #a8a8ef;
+    transform: scale(1.025);
+    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
+}
+
+.grid-transition {
+    opacity: 0;
+    max-height: 0;
+    overflow: hidden;
+    transform: translateY(-10px);
+    transition: all 0.3s ease-in-out;
+}
+
+.grid-transition.show {
+    opacity: 1;
+    max-height: 1000px; /* enough to fit content */
+    transform: translateY(0);
+}
+
Index: Frontend/src/UserProfile.js
===================================================================
--- Frontend/src/UserProfile.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/UserProfile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,3 +1,3 @@
-import React, {useState} from "react";
+import React, {useState, useEffect} from "react";
 import "./UserProfile.css";
 import PACrustLogo from "./images/pacrustlogo.png"
@@ -6,4 +6,7 @@
 import axios from "axios";
 import {useNavigate} from "react-router-dom";
+import cart from "./images/shopping-cart.png";
+import reorderLogo from "./images/reorder.png";
+
 
 export default function UserProfile({loggedUser, setLoggedUser, logout}) {
@@ -11,4 +14,5 @@
 
     const [email, setEmail] = useState(loggedUser.email);
+    const [name, setName] = useState(loggedUser.username);
     const [username, setUsername] = useState(loggedUser.username);
     const [password, setPassword] = useState("");
@@ -16,7 +20,76 @@
     const [address, setAddress] = useState(loggedUser.address || "");
     const [phone, setPhone] = useState(loggedUser.phone || "");
-    const [showDetails, setShowDetails] = useState(true);
-    const [showOrders, setshowOrders] = useState(true);
-
+    const [city, setCity] = useState(loggedUser.city || "");
+
+    const [showDetails, setShowDetails] = useState(false);
+    const [showOrders, setshowOrders] = useState(false);
+    const [showReservations, setshowReservations] = useState(false)
+    const [reservations, setReservations] = useState([]);
+
+    const [selectedReservation, setSelectedReservation] = useState(null);
+    const handleReservationClick = (res) => {
+        const today = new Date();
+        const resDate = new Date(res.date);
+
+        if (resDate >= today) {
+            setSelectedReservation(res);
+        }
+    };
+
+    const [cartCount, setCartCount] = useState(0);
+
+    // Example function to add item to cart
+    const addToCart = () => {
+        setCartCount(cartCount + 1);
+    };
+
+    const [cartItems, setCartItems] = useState([]);
+
+    useEffect(() => {
+        const storedCart = JSON.parse(localStorage.getItem("cartItems")) || [];
+        setCartItems(storedCart);
+        setCartCount(storedCart.length);
+    }, []);
+
+    const goToCheckout = () => {
+        navigate("/checkout", {state: {cartItems}});
+    };
+
+
+    const cancelReservation = async (id) => {
+        const token = localStorage.getItem("access");
+
+        try {
+            await axios.delete(`http://localhost:8000/api/reservations/${id}/cancel/`, {
+                headers: {Authorization: `Bearer ${token}`}
+            });
+
+            setReservations((prev) => prev.filter((r) => r.id !== id));
+            setSelectedReservation(null);
+        } catch (err) {
+            alert("Грешка при откажување.");
+        }
+    };
+
+    useEffect(() => {
+        const fetchReservations = async () => {
+            const token = localStorage.getItem("access");
+
+            try {
+                const res = await axios.get("http://localhost:8000/api/user-reservations/", {
+                    headers: {
+                        Authorization: `Bearer ${token}`
+                    }
+                });
+                setReservations(res.data);
+            } catch (err) {
+                console.error("Error fetching reservations:", err);
+            }
+        };
+
+        if (loggedUser?.id) {
+            fetchReservations();
+        }
+    }, [loggedUser]);
 
     const handleSave = async () => {
@@ -25,19 +98,18 @@
             return;
         }
-
         if (password && password !== confirmPassword) {
             alert("Лозинките не се совпаѓаат.");
             return;
         }
-
         const token = localStorage.getItem("access");
-
         try {
             await axios.put(`http://localhost:8000/api/users/${loggedUser.id}/`, {
                 email,
+                name,
                 username,
                 password: password || undefined,
                 address,
-                phone
+                phone,
+                city
             }, {
                 headers: {
@@ -45,5 +117,4 @@
                 }
             });
-
             const updatedUser = await axios.get("http://localhost:8000/api/user/", {
                 headers: {
@@ -51,14 +122,98 @@
                 }
             });
-
             setLoggedUser(updatedUser.data);
-
             alert("Податоците се успешно зачувани!");
             navigate("/");
         } catch (err) {
-            console.error(err);
             alert("Грешка при зачувување на податоците.");
         }
     };
+
+    const [orders, setOrders] = useState([]);
+
+    useEffect(() => {
+        const fetchOrders = async () => {
+            const token = localStorage.getItem("access");
+            if (!token) return;
+
+            try {
+                const res = await axios.get("http://127.0.0.1:8000/api/get-orders", {
+                    headers: {
+                        Authorization: `Bearer ${token}`,
+                    },
+                });
+
+                const filteredOrders = res.data.filter(
+                    (order) => order.employee_name === loggedUser?.name
+                );
+
+                setOrders(filteredOrders);
+            } catch (err) {
+                console.error("Error fetching user orders:", err);
+            }
+        };
+
+        if (loggedUser?.id) fetchOrders();
+    }, [loggedUser]);
+
+    const handleReOrder = (order) => {
+        const items = order.items.map(item => ({
+            id: item.id,            
+            name: item.name,
+            price: item.price,
+            quantity: item.quantity,
+            size: item.size || "Medium",
+            image: reorderLogo
+        }));
+
+        localStorage.setItem("cartItems", JSON.stringify(items));
+        setCartItems(items);
+        setCartCount(items.length);
+
+        navigate("/checkout", {state: {cartItems: items}});
+    };
+
+    const savedOrderId = localStorage.getItem("savedOrderId");
+
+    useEffect(() => {
+        if (!savedOrderId) return;
+
+        async function loadOrderFromBackend() {
+            try {
+                const res = await fetch("http://127.0.0.1:8000/api/get-orders/");
+                const orders = await res.json();
+
+                const found = orders.find(o => String(o.id) === String(savedOrderId));
+
+                if (!found) {
+                    return;
+                }
+
+                const orderItems = found.items || [];
+
+                const mapped = orderItems.map(item => ({
+                    id: item.id,
+                    name: item.name,
+                    size: item.size || "Medium",
+                    price: item.price,
+                    quantity: item.quantity || 1,
+                    image: "reorder-logo"
+                }));
+
+                setCartItems(mapped);
+                localStorage.setItem("cartItems", JSON.stringify(mapped));
+                setCartCount(mapped.length);
+
+                console.log("Loaded items into cart:", mapped);
+
+            } catch (err) {
+                console.error("Failed loading orders:", err);
+            }
+        }
+
+        loadOrderFromBackend();
+    }, []);
+
+
     return (
         <div className="local-background-profile">
@@ -68,12 +223,12 @@
                         <img className="logo" src={PACrustLogo} alt={PACrustLogo} onClick={() => navigate("/")}/>
                     </div>
-                    <div className="divpart" >
+                    <div className="divpart">
                         <p className="divpartP" onClick={() => navigate("/")}>HOME</p>
                     </div>
-                    <div className="divpart" >
+                    <div className="divpart">
                         <p className="divpartP" onClick={() => navigate("/menu")}>MENU</p>
                     </div>
                     <div className="divpart">
-                        <p className="divpartP">ABOUT US</p>
+                        <a className="divpartP" onClick={() => navigate("/about_us")}>ABOUT US</a>
                     </div>
                 </div>
@@ -94,4 +249,12 @@
                         {loggedUser ? loggedUser.username : "LOG IN / SIGN IN"}
                     </button>
+                    {loggedUser && loggedUser.role === "client" && (
+                        <div>
+                            <button className="checkout-btn" onClick={goToCheckout}>
+                                <img src={cart} className="checkout-photo"/>
+                                {cartCount > 0 && <span className="cart-badge">{cartCount}</span>}
+                            </button>
+                        </div>
+                    )}
                 </div>
             </div>
@@ -103,64 +266,135 @@
                 </div>
 
-                {showDetails && (
-                    <>
-                        <div className="allSeparated">
-                            <div className="cells">
-                                <div><p className="separatedText">Username</p></div>
-                                <div><input className="separatedInput" value={username}
-                                            onChange={(e) => setUsername(e.target.value)}/></div>
+                <div className={`grid-transition ${showDetails ? "show" : ""}`}>
+                    <div className="profile-grid">
+                        <div className="profile-card">
+                            <label>👤 Name</label>
+                            <input value={name} onChange={(e) => setName(e.target.value)}/>
+                        </div>
+
+                        <div className="profile-card">
+                            <label>👤 Username</label>
+                            <input value={username} onChange={(e) => setUsername(e.target.value)}/>
+                        </div>
+
+                        <div className="profile-card">
+                            <label>📧 Email</label>
+                            <input value={email} onChange={(e) => setEmail(e.target.value)}/>
+                        </div>
+
+                        <div className="profile-card">
+                            <label>📞 Phone</label>
+                            <input value={phone} onChange={(e) => setPhone(e.target.value)}/>
+                        </div>
+
+                        <div className="profile-card">
+                            <label>📍 Address</label>
+                            <input value={address} onChange={(e) => setAddress(e.target.value)}/>
+                        </div>
+
+                        <div className="profile-card">
+                            <label>📍 City</label>
+                            <input value={city} onChange={(e) => setCity(e.target.value)}/>
+                        </div>
+
+                        <div className="profile-card">
+                            <label>🔒 Password</label>
+                            <input type="password" value={password} onChange={(e) => setPassword(e.target.value)}/>
+                        </div>
+
+                        <div className="profile-card">
+                            <label>🔒 Confirm Password</label>
+                            <input type="password" value={confirmPassword}
+                                   onChange={(e) => setConfirmPassword(e.target.value)}/>
+                        </div>
+                    </div>
+
+                    <div className="divButton">
+                        <button className="saveButton" onClick={handleSave}>Save</button>
+                    </div>
+                </div>
+
+
+                <div className="za_flex" onClick={() => setshowOrders(!showOrders)}>
+                    <h1 className="theUser2">Orders history</h1>
+                    <span className="arrow-icon">{showOrders ? "▲" : "▼"}</span>
+                </div>
+
+                <div className={`grid-transition ${showOrders ? "show" : ""}`}>
+                    <div className="orders-grid">
+                        {orders.length === 0 ? (
+                            <p className="no-orders">😕 You have no orders yet.</p>
+                        ) : (
+                            orders.map((order) => (
+                                <div key={order.id} className="order-card">
+                                    <p><strong>🧾 Order #{order.id}</strong></p>
+                                    <p><strong>📅 Date:</strong> {new Date(order.created_at).toLocaleDateString()}</p>
+                                    <p><strong>🍕 Products:</strong> {order.items.map(i => i.name).join(", ")}</p>
+                                    <p><strong>💰 Sum:</strong> {order.subtotal}€</p>
+                                    <p><strong>📍 Address:</strong> {order.comment || loggedUser.address}</p>
+                                    <p className="divButton">
+                                        <button className="reOrder" onClick={() => handleReOrder(order)}>
+                                            Re-Order
+                                        </button>
+                                    </p>
+                                </div>
+                            ))
+                        )}
+                    </div>
+                </div>
+
+
+                <div className="za_flex" onClick={() => setshowReservations(!showReservations)}>
+                    <h1 className="theUser3">Reservations history</h1>
+                    <span className="arrow-icon">{showReservations ? "▲" : "▼"}</span>
+                </div>
+
+
+                <div className={`grid-transition ${showReservations ? "show" : ""}`}>
+                    <div className="reservation-grid">
+                        {reservations.length === 0 ? (
+                            <p className="no-reservations">😕 You have no active reservations.</p>
+                        ) : (
+                            reservations.map((res, index) => (
+                                <div key={index} className="reservation-card">
+                                    <p><strong>📅 Date:</strong> {res.date}</p>
+                                    <p><strong>🕒 Time:</strong> {res.from_time} - {res.to_time}</p>
+                                    <p><strong>🪑 Table:</strong> {res.table}</p>
+                                    <p><strong>👥 People:</strong> {res.people_count}</p>
+                                    {res.comment && (
+                                        <p><strong>💬 Comment:</strong> {res.comment}</p>
+                                    )}
+                                    <button className="cancel-booking"
+                                            onClick={() => handleReservationClick(res)}>Cancel booking
+                                    </button>
+                                </div>
+                            ))
+                        )}
+                    </div>
+                </div>
+
+
+                {selectedReservation && (
+                    <div className="modal-overlay">
+                        <div className="modal">
+                            <h2>Cancel Reservation</h2>
+                            <p>Are you sure you want to cancel this reservation?</p>
+                            <p><strong>📅 Date:</strong> {selectedReservation.date}</p>
+                            <p><strong>🕒 Time:</strong> {selectedReservation.from_time} - {selectedReservation.to_time}
+                            </p>
+                            <p><strong>🪑 Table:</strong> {selectedReservation.table}</p>
+
+                            <div className="modal-buttons">
+                                <button className="delete-reservation-1"
+                                        onClick={() => cancelReservation(selectedReservation.id)}>Yes, cancel
+                                </button>
+                                <button className="delete-reservation-2" onClick={() => setSelectedReservation(null)}>No
+                                </button>
                             </div>
-                            <div className="cells">
-                                <div>
-                                    <p className="separatedText">Mail</p>
-                                </div>
-                                <div><input className="separatedInput" value={email}
-                                            onChange={(e) => setEmail(e.target.value)}/>
-                                </div>
-                            </div>
-                            <div className="cells">
-                                <div><p className="separatedText">Phone</p></div>
-                                <div><input className="separatedInput" value={phone}
-                                            onChange={(e) => setPhone(e.target.value)}/>
-                                </div>
-                            </div>
-                            <div className="cells">
-                                <div><p className="separatedText">Address</p></div>
-                                <div><input className="separatedInput" value={address}
-                                            onChange={(e) => setAddress(e.target.value)}/></div>
-                            </div>
-                            <div className="cells">
-                                <div><p className="separatedText">Password</p></div>
-                                <div><input className="separatedInput" type="password" value={password}
-                                            onChange={(e) => setPassword(e.target.value)}/></div>
-                            </div>
-                            <div className="cells">
-                                <div><p className="separatedText">Confirm password</p></div>
-                                <div><input className="separatedInput" type="password" value={confirmPassword}
-                                            onChange={(e) => setConfirmPassword(e.target.value)}/></div>
-                            </div>
-                        </div>
-                        <div className="divButton">
-                            <button className="saveButton" onClick={handleSave}>Save</button>
-                        </div>
-                    </>
+                        </div>
+                    </div>
                 )}
 
-                <div className="za_flex2" onClick={() => setshowOrders(!showOrders)}>
-                    <h1 className="theUser2">Order's history</h1>
-                    <span className="arrow-icon">{showOrders ? "▲" : "▼"}</span>
-                </div>
-
-                {showOrders && (
-                    <>
-                        <div className="allSeparated">
-                            <div className="cells">
-                                <div><p className="separatedText">Username</p></div>
-                                <div><input className="separatedInput" value={username}
-                                            onChange={(e) => setUsername(e.target.value)}/></div>
-                            </div>
-                        </div>
-                    </>
-                )}
+
             </div>
         </div>
Index: Frontend/src/index.js
===================================================================
--- Frontend/src/index.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ Frontend/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -4,14 +4,15 @@
 import App from './App';
 import reportWebVitals from './reportWebVitals';
+import { GoogleOAuthProvider } from '@react-oauth/google';
 
 const root = ReactDOM.createRoot(document.getElementById('root'));
+
 root.render(
   <React.StrictMode>
-    <App />
+    <GoogleOAuthProvider clientId="843169508428-d5f1cskdgm7l4acah10nmdue9vm4hmfq.apps.googleusercontent.com">
+      <App />
+    </GoogleOAuthProvider>
   </React.StrictMode>
 );
 
-// If you want to start measuring performance in your app, pass a function
-// to log results (for example: reportWebVitals(console.log))
-// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
 reportWebVitals();
Index: node_modules/.bin/loose-envify
===================================================================
--- node_modules/.bin/loose-envify	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/.bin/loose-envify	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*)
+        if command -v cygpath > /dev/null 2>&1; then
+            basedir=`cygpath -w "$basedir"`
+        fi
+    ;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../loose-envify/cli.js" "$@"
+else 
+  exec node  "$basedir/../loose-envify/cli.js" "$@"
+fi
Index: node_modules/.bin/loose-envify.cmd
===================================================================
--- node_modules/.bin/loose-envify.cmd	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/.bin/loose-envify.cmd	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\loose-envify\cli.js" %*
Index: node_modules/.bin/loose-envify.ps1
===================================================================
--- node_modules/.bin/loose-envify.ps1	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/.bin/loose-envify.ps1	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "$basedir/node$exe"  "$basedir/../loose-envify/cli.js" $args
+  } else {
+    & "$basedir/node$exe"  "$basedir/../loose-envify/cli.js" $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "node$exe"  "$basedir/../loose-envify/cli.js" $args
+  } else {
+    & "node$exe"  "$basedir/../loose-envify/cli.js" $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret
Index: node_modules/.package-lock.json
===================================================================
--- node_modules/.package-lock.json	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/.package-lock.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,7 +1,129 @@
 {
-  "name": "PACrust",
+  "name": "P-ACrust",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
+    "node_modules/@kurkle/color": {
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz",
+      "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
+      "license": "MIT"
+    },
+    "node_modules/@reduxjs/toolkit": {
+      "version": "2.8.2",
+      "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.8.2.tgz",
+      "integrity": "sha512-MYlOhQ0sLdw4ud48FoC5w0dH9VfWQjtCjreKwYTT3l+r427qYC5Y8PihNutepr8XrNaBUDQo9khWUwQxZaqt5A==",
+      "license": "MIT",
+      "dependencies": {
+        "@standard-schema/spec": "^1.0.0",
+        "@standard-schema/utils": "^0.3.0",
+        "immer": "^10.0.3",
+        "redux": "^5.0.1",
+        "redux-thunk": "^3.1.0",
+        "reselect": "^5.1.0"
+      },
+      "peerDependencies": {
+        "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
+        "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "react": {
+          "optional": true
+        },
+        "react-redux": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@standard-schema/spec": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
+      "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+      "license": "MIT"
+    },
+    "node_modules/@standard-schema/utils": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
+      "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-array": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+      "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-color": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+      "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-ease": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+      "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-interpolate": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+      "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/d3-color": "*"
+      }
+    },
+    "node_modules/@types/d3-path": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+      "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-scale": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+      "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/d3-time": "*"
+      }
+    },
+    "node_modules/@types/d3-shape": {
+      "version": "3.1.7",
+      "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz",
+      "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/d3-path": "*"
+      }
+    },
+    "node_modules/@types/d3-time": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+      "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-timer": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+      "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+      "license": "MIT"
+    },
+    "node_modules/@types/use-sync-external-store": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
+      "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
+      "license": "MIT"
+    },
+    "node_modules/@wojtekmaj/date-utils": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/@wojtekmaj/date-utils/-/date-utils-1.5.1.tgz",
+      "integrity": "sha512-+i7+JmNiE/3c9FKxzWFi2IjRJ+KzZl1QPu6QNrsgaa2MuBgXvUy4gA1TVzf/JMdIIloB76xSKikTWuyYAIVLww==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/wojtekmaj/date-utils?sponsor=1"
+      }
+    },
     "node_modules/accepts": {
       "version": "2.0.0",
@@ -75,4 +197,25 @@
       }
     },
+    "node_modules/chart.js": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz",
+      "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@kurkle/color": "^0.3.0"
+      },
+      "engines": {
+        "pnpm": ">=8"
+      }
+    },
+    "node_modules/clsx": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/content-disposition": {
       "version": "1.0.0",
@@ -127,4 +270,125 @@
       }
     },
+    "node_modules/d3-array": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+      "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+      "license": "ISC",
+      "dependencies": {
+        "internmap": "1 - 2"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-color": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-ease": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+      "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-format": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+      "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-interpolate": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+      "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-color": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-path": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+      "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-scale": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+      "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-array": "2.10.0 - 3",
+        "d3-format": "1 - 3",
+        "d3-interpolate": "1.2.0 - 3",
+        "d3-time": "2.1.1 - 3",
+        "d3-time-format": "2 - 4"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-shape": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+      "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-path": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-time": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+      "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-array": "2 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-time-format": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+      "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-time": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-timer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+      "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/debug": {
       "version": "4.4.1",
@@ -144,4 +408,10 @@
       }
     },
+    "node_modules/decimal.js-light": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+      "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
+      "license": "MIT"
+    },
     "node_modules/depd": {
       "version": "2.0.0",
@@ -153,8 +423,17 @@
       }
     },
+    "node_modules/detect-element-overflow": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/detect-element-overflow/-/detect-element-overflow-1.4.2.tgz",
+      "integrity": "sha512-4m6cVOtvm/GJLjo7WFkPfwXoEIIbM7GQwIh4WEa4g7IsNi1YzwUsGL5ApNLrrHL29bHeNeQ+/iZhw+YHqgE2Fw==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/wojtekmaj/detect-element-overflow?sponsor=1"
+      }
+    },
     "node_modules/dotenv": {
-      "version": "16.5.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
-      "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
+      "version": "16.6.1",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
+      "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
       "license": "BSD-2-Clause",
       "engines": {
@@ -224,4 +503,14 @@
       }
     },
+    "node_modules/es-toolkit": {
+      "version": "1.39.10",
+      "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.39.10.tgz",
+      "integrity": "sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==",
+      "license": "MIT",
+      "workspaces": [
+        "docs",
+        "benchmarks"
+      ]
+    },
     "node_modules/escape-html": {
       "version": "1.0.3",
@@ -238,4 +527,10 @@
         "node": ">= 0.6"
       }
+    },
+    "node_modules/eventemitter3": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+      "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+      "license": "MIT"
     },
     "node_modules/express": {
@@ -362,4 +657,16 @@
       }
     },
+    "node_modules/get-user-locale": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/get-user-locale/-/get-user-locale-2.3.2.tgz",
+      "integrity": "sha512-O2GWvQkhnbDoWFUJfaBlDIKUEdND8ATpBXD6KXcbhxlfktyD/d8w6mkzM/IlQEqGZAMz/PW6j6Hv53BiigKLUQ==",
+      "license": "MIT",
+      "dependencies": {
+        "mem": "^8.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/wojtekmaj/get-user-locale?sponsor=1"
+      }
+    },
     "node_modules/gopd": {
       "version": "1.2.0",
@@ -435,4 +742,14 @@
       }
     },
+    "node_modules/immer": {
+      "version": "10.1.1",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz",
+      "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/immer"
+      }
+    },
     "node_modules/inherits": {
       "version": "2.0.4",
@@ -441,4 +758,13 @@
       "license": "ISC"
     },
+    "node_modules/internmap": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+      "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/ipaddr.js": {
       "version": "1.9.1",
@@ -456,4 +782,43 @@
       "license": "MIT"
     },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "license": "MIT"
+    },
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "license": "MIT",
+      "dependencies": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      },
+      "bin": {
+        "loose-envify": "cli.js"
+      }
+    },
+    "node_modules/make-event-props": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz",
+      "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1"
+      }
+    },
+    "node_modules/map-age-cleaner": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+      "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+      "license": "MIT",
+      "dependencies": {
+        "p-defer": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/math-intrinsics": {
       "version": "1.1.0",
@@ -474,4 +839,20 @@
       }
     },
+    "node_modules/mem": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
+      "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==",
+      "license": "MIT",
+      "dependencies": {
+        "map-age-cleaner": "^0.1.3",
+        "mimic-fn": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/mem?sponsor=1"
+      }
+    },
     "node_modules/merge-descriptors": {
       "version": "2.0.0",
@@ -505,4 +886,13 @@
       "engines": {
         "node": ">= 0.6"
+      }
+    },
+    "node_modules/mimic-fn": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
+      "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
@@ -564,4 +954,13 @@
       }
     },
+    "node_modules/p-defer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+      "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/parseurl": {
       "version": "1.3.3",
@@ -583,12 +982,12 @@
     },
     "node_modules/pg": {
-      "version": "8.16.2",
-      "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.2.tgz",
-      "integrity": "sha512-OtLWF0mKLmpxelOt9BqVq83QV6bTfsS0XLegIeAKqKjurRnRKie1Dc1iL89MugmSLhftxw6NNCyZhm1yQFLMEQ==",
+      "version": "8.16.3",
+      "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz",
+      "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==",
       "license": "MIT",
       "dependencies": {
         "pg-connection-string": "^2.9.1",
         "pg-pool": "^3.10.1",
-        "pg-protocol": "^1.10.2",
+        "pg-protocol": "^1.10.3",
         "pg-types": "2.2.0",
         "pgpass": "1.0.5"
@@ -598,5 +997,5 @@
       },
       "optionalDependencies": {
-        "pg-cloudflare": "^1.2.6"
+        "pg-cloudflare": "^1.2.7"
       },
       "peerDependencies": {
@@ -610,7 +1009,7 @@
     },
     "node_modules/pg-cloudflare": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.6.tgz",
-      "integrity": "sha512-uxmJAnmIgmYgnSFzgOf2cqGQBzwnRYcrEgXuFjJNEkpedEIPBSEzxY7ph4uA9k1mI+l/GR0HjPNS6FKNZe8SBQ==",
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz",
+      "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==",
       "license": "MIT",
       "optional": true
@@ -641,7 +1040,7 @@
     },
     "node_modules/pg-protocol": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.2.tgz",
-      "integrity": "sha512-Ci7jy8PbaWxfsck2dwZdERcDG2A0MG8JoQILs+uZNjABFuBuItAZCWUNz8sXRDMoui24rJw7WlXqgpMdBSN/vQ==",
+      "version": "1.10.3",
+      "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz",
+      "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==",
       "license": "MIT"
     },
@@ -761,4 +1160,191 @@
         "node": ">= 0.8"
       }
+    },
+    "node_modules/react": {
+      "version": "19.1.1",
+      "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz",
+      "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/react-chartjs-2": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.3.0.tgz",
+      "integrity": "sha512-UfZZFnDsERI3c3CZGxzvNJd02SHjaSJ8kgW1djn65H1KK8rehwTjyrRKOG3VTMG8wtHZ5rgAO5oTHtHi9GCCmw==",
+      "license": "MIT",
+      "peerDependencies": {
+        "chart.js": "^4.1.1",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
+    "node_modules/react-clock": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/react-clock/-/react-clock-5.1.0.tgz",
+      "integrity": "sha512-DKmr29VOK6M8wpbzGUZZa9PwGnG9uC6QXtDLwGwcc2r3vdS/HxNhf5xMMjudXLk7m096mNJQf7AgfjiDpzAYYw==",
+      "license": "MIT",
+      "dependencies": {
+        "@wojtekmaj/date-utils": "^1.5.0",
+        "clsx": "^2.0.0",
+        "get-user-locale": "^2.2.1"
+      },
+      "funding": {
+        "url": "https://github.com/wojtekmaj/react-clock?sponsor=1"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-dom": {
+      "version": "19.1.1",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz",
+      "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==",
+      "license": "MIT",
+      "dependencies": {
+        "scheduler": "^0.26.0"
+      },
+      "peerDependencies": {
+        "react": "^19.1.1"
+      }
+    },
+    "node_modules/react-fit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/react-fit/-/react-fit-2.0.1.tgz",
+      "integrity": "sha512-Eip6ALs/+6Jv82Si0I9UnfysdwVlAhkkZRycgmMdnj7jwUg69SVFp84ICxwB8zszkfvJJ2MGAAo9KAYM8ZUykQ==",
+      "license": "MIT",
+      "dependencies": {
+        "detect-element-overflow": "^1.4.0",
+        "warning": "^4.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/wojtekmaj/react-fit?sponsor=1"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-is": {
+      "version": "19.1.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz",
+      "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==",
+      "license": "MIT",
+      "peer": true
+    },
+    "node_modules/react-redux": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
+      "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/use-sync-external-store": "^0.0.6",
+        "use-sync-external-store": "^1.4.0"
+      },
+      "peerDependencies": {
+        "@types/react": "^18.2.25 || ^19",
+        "react": "^18.0 || ^19",
+        "redux": "^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "redux": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-time-picker": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/react-time-picker/-/react-time-picker-7.0.0.tgz",
+      "integrity": "sha512-k6mUjkI+OsY73mg0yjMxqkLXv/UXR1LN7AARNqfyGZOwqHqo1JrjL3lLHTHWQ86HmPTBL/dZACbIX/fV1NLmWg==",
+      "license": "MIT",
+      "dependencies": {
+        "@wojtekmaj/date-utils": "^1.1.3",
+        "clsx": "^2.0.0",
+        "get-user-locale": "^2.2.1",
+        "make-event-props": "^1.6.0",
+        "react-clock": "^5.0.0",
+        "react-fit": "^2.0.0",
+        "update-input-width": "^1.4.0"
+      },
+      "funding": {
+        "url": "https://github.com/wojtekmaj/react-time-picker?sponsor=1"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/recharts": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.1.2.tgz",
+      "integrity": "sha512-vhNbYwaxNbk/IATK0Ki29k3qvTkGqwvCgyQAQ9MavvvBwjvKnMTswdbklJpcOAoMPN/qxF3Lyqob0zO+ZXkZ4g==",
+      "license": "MIT",
+      "dependencies": {
+        "@reduxjs/toolkit": "1.x.x || 2.x.x",
+        "clsx": "^2.1.1",
+        "decimal.js-light": "^2.5.1",
+        "es-toolkit": "^1.39.3",
+        "eventemitter3": "^5.0.1",
+        "immer": "^10.1.1",
+        "react-redux": "8.x.x || 9.x.x",
+        "reselect": "5.1.1",
+        "tiny-invariant": "^1.3.3",
+        "use-sync-external-store": "^1.2.2",
+        "victory-vendor": "^37.0.2"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
+    "node_modules/redux": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+      "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
+      "license": "MIT"
+    },
+    "node_modules/redux-thunk": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
+      "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
+      "license": "MIT",
+      "peerDependencies": {
+        "redux": "^5.0.0"
+      }
+    },
+    "node_modules/reselect": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+      "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
+      "license": "MIT"
     },
     "node_modules/router": {
@@ -804,4 +1390,10 @@
       "license": "MIT"
     },
+    "node_modules/scheduler": {
+      "version": "0.26.0",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
+      "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
+      "license": "MIT"
+    },
     "node_modules/send": {
       "version": "1.2.0",
@@ -937,4 +1529,10 @@
       }
     },
+    "node_modules/tiny-invariant": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+      "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+      "license": "MIT"
+    },
     "node_modules/toidentifier": {
       "version": "1.0.1",
@@ -969,4 +1567,22 @@
       }
     },
+    "node_modules/update-input-width": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/update-input-width/-/update-input-width-1.4.2.tgz",
+      "integrity": "sha512-/p0XLhrQQQ4bMWD7bL9duYObwYCO1qGr8R19xcMmoMSmXuQ7/1//veUnCObQ7/iW6E2pGS6rFkS4TfH4ur7e/g==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/wojtekmaj/update-input-width?sponsor=1"
+      }
+    },
+    "node_modules/use-sync-external-store": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
+      "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
+      "license": "MIT",
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
     "node_modules/vary": {
       "version": "1.1.2",
@@ -976,4 +1592,35 @@
       "engines": {
         "node": ">= 0.8"
+      }
+    },
+    "node_modules/victory-vendor": {
+      "version": "37.3.6",
+      "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
+      "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==",
+      "license": "MIT AND ISC",
+      "dependencies": {
+        "@types/d3-array": "^3.0.3",
+        "@types/d3-ease": "^3.0.0",
+        "@types/d3-interpolate": "^3.0.1",
+        "@types/d3-scale": "^4.0.2",
+        "@types/d3-shape": "^3.1.0",
+        "@types/d3-time": "^3.0.0",
+        "@types/d3-timer": "^3.0.0",
+        "d3-array": "^3.1.6",
+        "d3-ease": "^3.0.1",
+        "d3-interpolate": "^3.0.1",
+        "d3-scale": "^4.0.2",
+        "d3-shape": "^3.1.0",
+        "d3-time": "^3.0.0",
+        "d3-timer": "^3.0.1"
+      }
+    },
+    "node_modules/warning": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.0.0"
       }
     },
Index: node_modules/@kurkle/color/LICENSE.md
===================================================================
--- node_modules/@kurkle/color/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@kurkle/color/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+The MIT License (MIT)
+
+Copyright (c) 2018-2024 Jukka Kurkela
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: node_modules/@kurkle/color/README.md
===================================================================
--- node_modules/@kurkle/color/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@kurkle/color/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,79 @@
+# @kurkle/color
+
+[![npm](https://img.shields.io/npm/v/@kurkle/color?style=plastic)](https://www.npmjs.com/package/@kurkle/color) [![release](https://img.shields.io/github/release/kurkle/color.svg?style=plastic)](https://github.com/kurkle/color/releases/latest) [![npm bundle size](https://img.shields.io/bundlephobia/minzip/@kurkle/color?style=plastic)](https://www.npmjs.com/package/@kurkle/color) [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/kurkle/color/ci.yml?style=plastic)](https://github.com/kurkle/color) [![GitHub](https://img.shields.io/github/license/kurkle/color?style=plastic)](https://github.com/kurkle/color/blob/main/LICENSE.md)
+
+## Overview
+
+Fast and small CSS color parsing and manipulation library.
+
+## Parsing
+
+Supported formats:
+
+- named
+
+```text
+blue
+transparent
+```
+
+- hex
+
+```text
+#aaa
+#bbba
+#1A2b3c
+#f1f2f388
+```
+
+- rgb(a)
+
+```text
+rgb(255, 255, 255)
+rgb(255, 0, 0, 0.5)
+rgb(50%, 50%, 50%, 50%)
+rgb(0 0 100% / 80%)
+rgba(200, 20, 233, 0.2)
+rgba(200, 20, 233, 2e-1)
+```
+
+- hsl(a)
+
+```text
+hsl(240deg, 100%, 50.5%)
+hsl(0deg 100% 50%)
+hsla(12, 10%, 50%, .3)
+hsla(-1.2, 10.2%, 50.9%, 0.4)
+```
+
+- hwb
+
+```text
+hwb(240, 100%, 50.5%)
+hwb(244, 100%, 100%, 0.6)
+```
+
+- hsv
+
+```text
+hsv(240, 100%, 50.5%)
+hsv(244, 100%, 100%, 0.6)
+```
+
+## Docs
+
+[typedocs](https://kurkle.github.io/color/)
+
+**note** The docs are for the ESM module. UMD module only exports the [default export](https://kurkle.github.io/color/modules.html#default)
+
+## Benchmarks
+
+[benchmarks](https://kurkle.github.io/color/dev/bench/)
+
+## Size visualization
+
+[color.min.js](https://kurkle.github.io/color/stats.html)
+
+## License
+
+`@kurkle/color` is available under the [MIT license](https://github.com/kurkle/color/blob/main/LICENSE.md).
Index: node_modules/@kurkle/color/dist/color.cjs
===================================================================
--- node_modules/@kurkle/color/dist/color.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@kurkle/color/dist/color.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,624 @@
+/*!
+ * @kurkle/color v0.3.4
+ * https://github.com/kurkle/color#readme
+ * (c) 2024 Jukka Kurkela
+ * Released under the MIT License
+ */
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+typeof define === 'function' && define.amd ? define(factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global["@kurkle/color"] = factory());
+})(this, (function () { 'use strict';
+
+function round(v) {
+  return v + 0.5 | 0;
+}
+const lim = (v, l, h) => Math.max(Math.min(v, h), l);
+function p2b(v) {
+  return lim(round(v * 2.55), 0, 255);
+}
+function b2p(v) {
+  return lim(round(v / 2.55), 0, 100);
+}
+function n2b(v) {
+  return lim(round(v * 255), 0, 255);
+}
+function b2n(v) {
+  return lim(round(v / 2.55) / 100, 0, 1);
+}
+function n2p(v) {
+  return lim(round(v * 100), 0, 100);
+}
+
+const map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};
+const hex = [...'0123456789ABCDEF'];
+const h1 = b => hex[b & 0xF];
+const h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];
+const eq = b => ((b & 0xF0) >> 4) === (b & 0xF);
+const isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);
+function hexParse(str) {
+  var len = str.length;
+  var ret;
+  if (str[0] === '#') {
+    if (len === 4 || len === 5) {
+      ret = {
+        r: 255 & map$1[str[1]] * 17,
+        g: 255 & map$1[str[2]] * 17,
+        b: 255 & map$1[str[3]] * 17,
+        a: len === 5 ? map$1[str[4]] * 17 : 255
+      };
+    } else if (len === 7 || len === 9) {
+      ret = {
+        r: map$1[str[1]] << 4 | map$1[str[2]],
+        g: map$1[str[3]] << 4 | map$1[str[4]],
+        b: map$1[str[5]] << 4 | map$1[str[6]],
+        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255
+      };
+    }
+  }
+  return ret;
+}
+const alpha = (a, f) => a < 255 ? f(a) : '';
+function hexString(v) {
+  var f = isShort(v) ? h1 : h2;
+  return v
+    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)
+    : undefined;
+}
+
+const HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
+function hsl2rgbn(h, s, l) {
+  const a = s * Math.min(l, 1 - l);
+  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
+  return [f(0), f(8), f(4)];
+}
+function hsv2rgbn(h, s, v) {
+  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
+  return [f(5), f(3), f(1)];
+}
+function hwb2rgbn(h, w, b) {
+  const rgb = hsl2rgbn(h, 1, 0.5);
+  let i;
+  if (w + b > 1) {
+    i = 1 / (w + b);
+    w *= i;
+    b *= i;
+  }
+  for (i = 0; i < 3; i++) {
+    rgb[i] *= 1 - w - b;
+    rgb[i] += w;
+  }
+  return rgb;
+}
+function hueValue(r, g, b, d, max) {
+  if (r === max) {
+    return ((g - b) / d) + (g < b ? 6 : 0);
+  }
+  if (g === max) {
+    return (b - r) / d + 2;
+  }
+  return (r - g) / d + 4;
+}
+function rgb2hsl(v) {
+  const range = 255;
+  const r = v.r / range;
+  const g = v.g / range;
+  const b = v.b / range;
+  const max = Math.max(r, g, b);
+  const min = Math.min(r, g, b);
+  const l = (max + min) / 2;
+  let h, s, d;
+  if (max !== min) {
+    d = max - min;
+    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
+    h = hueValue(r, g, b, d, max);
+    h = h * 60 + 0.5;
+  }
+  return [h | 0, s || 0, l];
+}
+function calln(f, a, b, c) {
+  return (
+    Array.isArray(a)
+      ? f(a[0], a[1], a[2])
+      : f(a, b, c)
+  ).map(n2b);
+}
+function hsl2rgb(h, s, l) {
+  return calln(hsl2rgbn, h, s, l);
+}
+function hwb2rgb(h, w, b) {
+  return calln(hwb2rgbn, h, w, b);
+}
+function hsv2rgb(h, s, v) {
+  return calln(hsv2rgbn, h, s, v);
+}
+function hue(h) {
+  return (h % 360 + 360) % 360;
+}
+function hueParse(str) {
+  const m = HUE_RE.exec(str);
+  let a = 255;
+  let v;
+  if (!m) {
+    return;
+  }
+  if (m[5] !== v) {
+    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);
+  }
+  const h = hue(+m[2]);
+  const p1 = +m[3] / 100;
+  const p2 = +m[4] / 100;
+  if (m[1] === 'hwb') {
+    v = hwb2rgb(h, p1, p2);
+  } else if (m[1] === 'hsv') {
+    v = hsv2rgb(h, p1, p2);
+  } else {
+    v = hsl2rgb(h, p1, p2);
+  }
+  return {
+    r: v[0],
+    g: v[1],
+    b: v[2],
+    a: a
+  };
+}
+function rotate(v, deg) {
+  var h = rgb2hsl(v);
+  h[0] = hue(h[0] + deg);
+  h = hsl2rgb(h);
+  v.r = h[0];
+  v.g = h[1];
+  v.b = h[2];
+}
+function hslString(v) {
+  if (!v) {
+    return;
+  }
+  const a = rgb2hsl(v);
+  const h = a[0];
+  const s = n2p(a[1]);
+  const l = n2p(a[2]);
+  return v.a < 255
+    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`
+    : `hsl(${h}, ${s}%, ${l}%)`;
+}
+
+const map = {
+	x: 'dark',
+	Z: 'light',
+	Y: 're',
+	X: 'blu',
+	W: 'gr',
+	V: 'medium',
+	U: 'slate',
+	A: 'ee',
+	T: 'ol',
+	S: 'or',
+	B: 'ra',
+	C: 'lateg',
+	D: 'ights',
+	R: 'in',
+	Q: 'turquois',
+	E: 'hi',
+	P: 'ro',
+	O: 'al',
+	N: 'le',
+	M: 'de',
+	L: 'yello',
+	F: 'en',
+	K: 'ch',
+	G: 'arks',
+	H: 'ea',
+	I: 'ightg',
+	J: 'wh'
+};
+const names$1 = {
+	OiceXe: 'f0f8ff',
+	antiquewEte: 'faebd7',
+	aqua: 'ffff',
+	aquamarRe: '7fffd4',
+	azuY: 'f0ffff',
+	beige: 'f5f5dc',
+	bisque: 'ffe4c4',
+	black: '0',
+	blanKedOmond: 'ffebcd',
+	Xe: 'ff',
+	XeviTet: '8a2be2',
+	bPwn: 'a52a2a',
+	burlywood: 'deb887',
+	caMtXe: '5f9ea0',
+	KartYuse: '7fff00',
+	KocTate: 'd2691e',
+	cSO: 'ff7f50',
+	cSnflowerXe: '6495ed',
+	cSnsilk: 'fff8dc',
+	crimson: 'dc143c',
+	cyan: 'ffff',
+	xXe: '8b',
+	xcyan: '8b8b',
+	xgTMnPd: 'b8860b',
+	xWay: 'a9a9a9',
+	xgYF: '6400',
+	xgYy: 'a9a9a9',
+	xkhaki: 'bdb76b',
+	xmagFta: '8b008b',
+	xTivegYF: '556b2f',
+	xSange: 'ff8c00',
+	xScEd: '9932cc',
+	xYd: '8b0000',
+	xsOmon: 'e9967a',
+	xsHgYF: '8fbc8f',
+	xUXe: '483d8b',
+	xUWay: '2f4f4f',
+	xUgYy: '2f4f4f',
+	xQe: 'ced1',
+	xviTet: '9400d3',
+	dAppRk: 'ff1493',
+	dApskyXe: 'bfff',
+	dimWay: '696969',
+	dimgYy: '696969',
+	dodgerXe: '1e90ff',
+	fiYbrick: 'b22222',
+	flSOwEte: 'fffaf0',
+	foYstWAn: '228b22',
+	fuKsia: 'ff00ff',
+	gaRsbSo: 'dcdcdc',
+	ghostwEte: 'f8f8ff',
+	gTd: 'ffd700',
+	gTMnPd: 'daa520',
+	Way: '808080',
+	gYF: '8000',
+	gYFLw: 'adff2f',
+	gYy: '808080',
+	honeyMw: 'f0fff0',
+	hotpRk: 'ff69b4',
+	RdianYd: 'cd5c5c',
+	Rdigo: '4b0082',
+	ivSy: 'fffff0',
+	khaki: 'f0e68c',
+	lavFMr: 'e6e6fa',
+	lavFMrXsh: 'fff0f5',
+	lawngYF: '7cfc00',
+	NmoncEffon: 'fffacd',
+	ZXe: 'add8e6',
+	ZcSO: 'f08080',
+	Zcyan: 'e0ffff',
+	ZgTMnPdLw: 'fafad2',
+	ZWay: 'd3d3d3',
+	ZgYF: '90ee90',
+	ZgYy: 'd3d3d3',
+	ZpRk: 'ffb6c1',
+	ZsOmon: 'ffa07a',
+	ZsHgYF: '20b2aa',
+	ZskyXe: '87cefa',
+	ZUWay: '778899',
+	ZUgYy: '778899',
+	ZstAlXe: 'b0c4de',
+	ZLw: 'ffffe0',
+	lime: 'ff00',
+	limegYF: '32cd32',
+	lRF: 'faf0e6',
+	magFta: 'ff00ff',
+	maPon: '800000',
+	VaquamarRe: '66cdaa',
+	VXe: 'cd',
+	VScEd: 'ba55d3',
+	VpurpN: '9370db',
+	VsHgYF: '3cb371',
+	VUXe: '7b68ee',
+	VsprRggYF: 'fa9a',
+	VQe: '48d1cc',
+	VviTetYd: 'c71585',
+	midnightXe: '191970',
+	mRtcYam: 'f5fffa',
+	mistyPse: 'ffe4e1',
+	moccasR: 'ffe4b5',
+	navajowEte: 'ffdead',
+	navy: '80',
+	Tdlace: 'fdf5e6',
+	Tive: '808000',
+	TivedBb: '6b8e23',
+	Sange: 'ffa500',
+	SangeYd: 'ff4500',
+	ScEd: 'da70d6',
+	pOegTMnPd: 'eee8aa',
+	pOegYF: '98fb98',
+	pOeQe: 'afeeee',
+	pOeviTetYd: 'db7093',
+	papayawEp: 'ffefd5',
+	pHKpuff: 'ffdab9',
+	peru: 'cd853f',
+	pRk: 'ffc0cb',
+	plum: 'dda0dd',
+	powMrXe: 'b0e0e6',
+	purpN: '800080',
+	YbeccapurpN: '663399',
+	Yd: 'ff0000',
+	Psybrown: 'bc8f8f',
+	PyOXe: '4169e1',
+	saddNbPwn: '8b4513',
+	sOmon: 'fa8072',
+	sandybPwn: 'f4a460',
+	sHgYF: '2e8b57',
+	sHshell: 'fff5ee',
+	siFna: 'a0522d',
+	silver: 'c0c0c0',
+	skyXe: '87ceeb',
+	UXe: '6a5acd',
+	UWay: '708090',
+	UgYy: '708090',
+	snow: 'fffafa',
+	sprRggYF: 'ff7f',
+	stAlXe: '4682b4',
+	tan: 'd2b48c',
+	teO: '8080',
+	tEstN: 'd8bfd8',
+	tomato: 'ff6347',
+	Qe: '40e0d0',
+	viTet: 'ee82ee',
+	JHt: 'f5deb3',
+	wEte: 'ffffff',
+	wEtesmoke: 'f5f5f5',
+	Lw: 'ffff00',
+	LwgYF: '9acd32'
+};
+function unpack() {
+  const unpacked = {};
+  const keys = Object.keys(names$1);
+  const tkeys = Object.keys(map);
+  let i, j, k, ok, nk;
+  for (i = 0; i < keys.length; i++) {
+    ok = nk = keys[i];
+    for (j = 0; j < tkeys.length; j++) {
+      k = tkeys[j];
+      nk = nk.replace(k, map[k]);
+    }
+    k = parseInt(names$1[ok], 16);
+    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];
+  }
+  return unpacked;
+}
+
+let names;
+function nameParse(str) {
+  if (!names) {
+    names = unpack();
+    names.transparent = [0, 0, 0, 0];
+  }
+  const a = names[str.toLowerCase()];
+  return a && {
+    r: a[0],
+    g: a[1],
+    b: a[2],
+    a: a.length === 4 ? a[3] : 255
+  };
+}
+
+const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
+function rgbParse(str) {
+  const m = RGB_RE.exec(str);
+  let a = 255;
+  let r, g, b;
+  if (!m) {
+    return;
+  }
+  if (m[7] !== r) {
+    const v = +m[7];
+    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);
+  }
+  r = +m[1];
+  g = +m[3];
+  b = +m[5];
+  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));
+  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));
+  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));
+  return {
+    r: r,
+    g: g,
+    b: b,
+    a: a
+  };
+}
+function rgbString(v) {
+  return v && (
+    v.a < 255
+      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`
+      : `rgb(${v.r}, ${v.g}, ${v.b})`
+  );
+}
+
+const to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;
+const from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
+function interpolate(rgb1, rgb2, t) {
+  const r = from(b2n(rgb1.r));
+  const g = from(b2n(rgb1.g));
+  const b = from(b2n(rgb1.b));
+  return {
+    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),
+    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),
+    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),
+    a: rgb1.a + t * (rgb2.a - rgb1.a)
+  };
+}
+
+function modHSL(v, i, ratio) {
+  if (v) {
+    let tmp = rgb2hsl(v);
+    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));
+    tmp = hsl2rgb(tmp);
+    v.r = tmp[0];
+    v.g = tmp[1];
+    v.b = tmp[2];
+  }
+}
+function clone(v, proto) {
+  return v ? Object.assign(proto || {}, v) : v;
+}
+function fromObject(input) {
+  var v = {r: 0, g: 0, b: 0, a: 255};
+  if (Array.isArray(input)) {
+    if (input.length >= 3) {
+      v = {r: input[0], g: input[1], b: input[2], a: 255};
+      if (input.length > 3) {
+        v.a = n2b(input[3]);
+      }
+    }
+  } else {
+    v = clone(input, {r: 0, g: 0, b: 0, a: 1});
+    v.a = n2b(v.a);
+  }
+  return v;
+}
+function functionParse(str) {
+  if (str.charAt(0) === 'r') {
+    return rgbParse(str);
+  }
+  return hueParse(str);
+}
+class Color {
+  constructor(input) {
+    if (input instanceof Color) {
+      return input;
+    }
+    const type = typeof input;
+    let v;
+    if (type === 'object') {
+      v = fromObject(input);
+    } else if (type === 'string') {
+      v = hexParse(input) || nameParse(input) || functionParse(input);
+    }
+    this._rgb = v;
+    this._valid = !!v;
+  }
+  get valid() {
+    return this._valid;
+  }
+  get rgb() {
+    var v = clone(this._rgb);
+    if (v) {
+      v.a = b2n(v.a);
+    }
+    return v;
+  }
+  set rgb(obj) {
+    this._rgb = fromObject(obj);
+  }
+  rgbString() {
+    return this._valid ? rgbString(this._rgb) : undefined;
+  }
+  hexString() {
+    return this._valid ? hexString(this._rgb) : undefined;
+  }
+  hslString() {
+    return this._valid ? hslString(this._rgb) : undefined;
+  }
+  mix(color, weight) {
+    if (color) {
+      const c1 = this.rgb;
+      const c2 = color.rgb;
+      let w2;
+      const p = weight === w2 ? 0.5 : weight;
+      const w = 2 * p - 1;
+      const a = c1.a - c2.a;
+      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
+      w2 = 1 - w1;
+      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;
+      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;
+      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;
+      c1.a = p * c1.a + (1 - p) * c2.a;
+      this.rgb = c1;
+    }
+    return this;
+  }
+  interpolate(color, t) {
+    if (color) {
+      this._rgb = interpolate(this._rgb, color._rgb, t);
+    }
+    return this;
+  }
+  clone() {
+    return new Color(this.rgb);
+  }
+  alpha(a) {
+    this._rgb.a = n2b(a);
+    return this;
+  }
+  clearer(ratio) {
+    const rgb = this._rgb;
+    rgb.a *= 1 - ratio;
+    return this;
+  }
+  greyscale() {
+    const rgb = this._rgb;
+    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);
+    rgb.r = rgb.g = rgb.b = val;
+    return this;
+  }
+  opaquer(ratio) {
+    const rgb = this._rgb;
+    rgb.a *= 1 + ratio;
+    return this;
+  }
+  negate() {
+    const v = this._rgb;
+    v.r = 255 - v.r;
+    v.g = 255 - v.g;
+    v.b = 255 - v.b;
+    return this;
+  }
+  lighten(ratio) {
+    modHSL(this._rgb, 2, ratio);
+    return this;
+  }
+  darken(ratio) {
+    modHSL(this._rgb, 2, -ratio);
+    return this;
+  }
+  saturate(ratio) {
+    modHSL(this._rgb, 1, ratio);
+    return this;
+  }
+  desaturate(ratio) {
+    modHSL(this._rgb, 1, -ratio);
+    return this;
+  }
+  rotate(deg) {
+    rotate(this._rgb, deg);
+    return this;
+  }
+}
+
+function index_esm(input) {
+  return new Color(input);
+}
+
+var color = /*#__PURE__*/Object.freeze({
+__proto__: null,
+Color: Color,
+b2n: b2n,
+b2p: b2p,
+default: index_esm,
+hexParse: hexParse,
+hexString: hexString,
+hsl2rgb: hsl2rgb,
+hslString: hslString,
+hsv2rgb: hsv2rgb,
+hueParse: hueParse,
+hwb2rgb: hwb2rgb,
+lim: lim,
+n2b: n2b,
+n2p: n2p,
+nameParse: nameParse,
+p2b: p2b,
+rgb2hsl: rgb2hsl,
+rgbParse: rgbParse,
+rgbString: rgbString,
+rotate: rotate,
+round: round
+});
+
+var index = Object.assign(index_esm, color);
+
+return index;
+
+}));
Index: node_modules/@kurkle/color/dist/color.d.ts
===================================================================
--- node_modules/@kurkle/color/dist/color.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@kurkle/color/dist/color.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,235 @@
+/**
+ * @packageDocumentation
+ * @module @kurkle/color
+ */
+export type RGBA = {
+    /**
+     * - red [0..255]
+     */
+    r: number;
+    /**
+     * - green [0..255]
+     */
+    g: number;
+    /**
+     * - blue [0..255]
+     */
+    b: number;
+    /**
+     * - alpha [0..1]
+     */
+    a: number;
+};
+ /**
+ * Parse HEX to color
+ * @param {string} str - the string
+ */
+export function hexParse(str: string): {
+    r: number;
+    g: number;
+    b: number;
+    a: number;
+};
+/**
+ * Return HEX string from color
+ * @param {RGBA} v - the color
+ */
+export function hexString(v: RGBA): string | RGBA;
+/**
+ * Rounds decimal to nearest integer
+ * @param {number} v - the number to round
+ */
+export function round(v: number): number;
+/**
+ * convert percent to byte 0..255
+ * @param {number} v - 0..100
+ */
+export function p2b(v: number): number;
+/**
+ * convert byte to percet 0..100
+ * @param {number} v - 0..255
+ */
+export function b2p(v: number): number;
+/**
+ * convert normalized to byte 0..255
+ * @param {number} v - 0..1
+ */
+export function n2b(v: number): number;
+/**
+ * convert byte to normalized 0..1
+ * @param {number} v - 0..255
+ */
+export function b2n(v: number): number;
+/**
+ * convert normalized to percent 0..100
+ * @param {number} v - 0..1
+ */
+export function n2p(v: number): number;
+/**
+ * Convert rgb to hsl
+ * @param {RGBA} v - the color
+ * @returns {number[]} - [h, s, l]
+ */
+export function rgb2hsl(v: RGBA): number[];
+/**
+ * Convert hsl to rgb
+ * @param {number|number[]} h - hue | [h, s, l]
+ * @param {number} [s] - saturation
+ * @param {number} [l] - lightness
+ * @returns {number[]}
+ */
+export function hsl2rgb(h: number | number[], s?: number, l?: number): number[];
+/**
+ * Convert hwb to rgb
+ * @param {number|number[]} h - hue | [h, s, l]
+ * @param {number} [w] - whiteness
+ * @param {number} [b] - blackness
+ * @returns {number[]}
+ */
+export function hwb2rgb(h: number | number[], w?: number, b?: number): number[];
+/**
+ * Convert hsv to rgb
+ * @param {number|number[]} h - hue | [h, s, l]
+ * @param {number} [s] - saturation
+ * @param {number} [v] - value
+ * @returns {number[]}
+ */
+export function hsv2rgb(h: number | number[], s?: number, v?: number): number[];
+/**
+ * Parse hsl/hsv/hwb color string
+ * @param {string} str - hsl/hsv/hwb color string
+ * @returns {RGBA} - the parsed color components
+ */
+export function hueParse(str: string): RGBA;
+/**
+ * Rotate the `v` color by `deg` degrees
+ * @param {RGBA} v - the color
+ * @param {number} deg - degrees to rotate
+ */
+export function rotate(v: RGBA, deg: number): void;
+/**
+ * Return hsl(a) string from color components
+ * @param {RGBA} v - the color
+ * @return {string|undefined}
+ */
+export function hslString(v: RGBA): string;
+/**
+ * Parse color name
+ * @param {string} str - the color name
+ * @return {RGBA} - the color
+ */
+export function nameParse(str: string): RGBA;
+/**
+ * Parse rgb(a) string to RGBA
+ * @param {string} str - the rgb string
+ * @returns {RGBA} - the parsed color
+ */
+export function rgbParse(str: string): RGBA;
+/**
+ * Return rgb(a) string from color
+ * @param {RGBA} v - the color
+ */
+export function rgbString(v: RGBA): string;
+
+export class Color {
+    /**
+     * constructor
+     * @param {Color|RGBA|string|number[]} input
+     */
+    constructor(input: string | number[] | Color | RGBA);
+    /**
+     * @type {RGBA}
+     * @hidden
+     **/
+    _rgb: RGBA;
+    /**
+     * @type {boolean}
+     * @hidden
+     **/
+    _valid: boolean;
+    /**
+     * `true` if this is a valid color
+     * @returns {boolean}
+     */
+    get valid(): boolean;
+    /**
+     * @param {RGBA} obj - the color
+     */
+    set rgb(arg: RGBA);
+    /**
+     * @returns {RGBA} - the color
+     */
+    get rgb(): RGBA;
+    /**
+     * rgb(a) string
+     */
+    rgbString(): string;
+    /**
+     * hex string
+     */
+    hexString(): string;
+    /**
+     * hsl(a) string
+     */
+    hslString(): string;
+    /**
+     * Mix another color to this color.
+     * @param {Color} color - Color to mix in
+     * @param {number} weight - 0..1
+     */
+    mix(color: Color, weight: number): Color;
+    /**
+     * Clone
+     */
+    clone(): Color;
+    /**
+     * Set aplha
+     * @param {number} a - the alpha [0..1]
+     */
+    alpha(a: number): Color;
+    /**
+     * Make clearer
+     * @param {number} ratio - ratio [0..1]
+     */
+    clearer(ratio: number): Color;
+    /**
+     * Convert to grayscale
+     */
+    greyscale(): Color;
+    /**
+     * Opaquer
+     * @param {number} ratio - ratio [0..1]
+     */
+    opaquer(ratio: number): Color;
+    negate(): Color;
+    /**
+     * Lighten
+     * @param {number} ratio - ratio [0..1]
+     */
+    lighten(ratio: number): Color;
+    /**
+     * Darken
+     * @param {number} ratio - ratio [0..1]
+     */
+    darken(ratio: number): Color;
+    /**
+     * Saturate
+     * @param {number} ratio - ratio [0..1]
+     */
+    saturate(ratio: number): Color;
+    /**
+     * Desaturate
+     * @param {number} ratio - ratio [0..1]
+     */
+    desaturate(ratio: number): Color;
+    /**
+     * Rotate
+     * @param {number} deg - degrees to rotate
+     */
+    rotate(deg: number): Color;
+}
+/**
+ * Construct new Color instance
+ * @param {Color|RGBA|string|number[]} input
+ */
+export default function _default(input: string | number[] | Color | RGBA): Color;
Index: node_modules/@kurkle/color/dist/color.esm.js
===================================================================
--- node_modules/@kurkle/color/dist/color.esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@kurkle/color/dist/color.esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,589 @@
+/*!
+ * @kurkle/color v0.3.4
+ * https://github.com/kurkle/color#readme
+ * (c) 2024 Jukka Kurkela
+ * Released under the MIT License
+ */
+function round(v) {
+  return v + 0.5 | 0;
+}
+const lim = (v, l, h) => Math.max(Math.min(v, h), l);
+function p2b(v) {
+  return lim(round(v * 2.55), 0, 255);
+}
+function b2p(v) {
+  return lim(round(v / 2.55), 0, 100);
+}
+function n2b(v) {
+  return lim(round(v * 255), 0, 255);
+}
+function b2n(v) {
+  return lim(round(v / 2.55) / 100, 0, 1);
+}
+function n2p(v) {
+  return lim(round(v * 100), 0, 100);
+}
+
+const map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};
+const hex = [...'0123456789ABCDEF'];
+const h1 = b => hex[b & 0xF];
+const h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];
+const eq = b => ((b & 0xF0) >> 4) === (b & 0xF);
+const isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);
+function hexParse(str) {
+  var len = str.length;
+  var ret;
+  if (str[0] === '#') {
+    if (len === 4 || len === 5) {
+      ret = {
+        r: 255 & map$1[str[1]] * 17,
+        g: 255 & map$1[str[2]] * 17,
+        b: 255 & map$1[str[3]] * 17,
+        a: len === 5 ? map$1[str[4]] * 17 : 255
+      };
+    } else if (len === 7 || len === 9) {
+      ret = {
+        r: map$1[str[1]] << 4 | map$1[str[2]],
+        g: map$1[str[3]] << 4 | map$1[str[4]],
+        b: map$1[str[5]] << 4 | map$1[str[6]],
+        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255
+      };
+    }
+  }
+  return ret;
+}
+const alpha = (a, f) => a < 255 ? f(a) : '';
+function hexString(v) {
+  var f = isShort(v) ? h1 : h2;
+  return v
+    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)
+    : undefined;
+}
+
+const HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
+function hsl2rgbn(h, s, l) {
+  const a = s * Math.min(l, 1 - l);
+  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
+  return [f(0), f(8), f(4)];
+}
+function hsv2rgbn(h, s, v) {
+  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
+  return [f(5), f(3), f(1)];
+}
+function hwb2rgbn(h, w, b) {
+  const rgb = hsl2rgbn(h, 1, 0.5);
+  let i;
+  if (w + b > 1) {
+    i = 1 / (w + b);
+    w *= i;
+    b *= i;
+  }
+  for (i = 0; i < 3; i++) {
+    rgb[i] *= 1 - w - b;
+    rgb[i] += w;
+  }
+  return rgb;
+}
+function hueValue(r, g, b, d, max) {
+  if (r === max) {
+    return ((g - b) / d) + (g < b ? 6 : 0);
+  }
+  if (g === max) {
+    return (b - r) / d + 2;
+  }
+  return (r - g) / d + 4;
+}
+function rgb2hsl(v) {
+  const range = 255;
+  const r = v.r / range;
+  const g = v.g / range;
+  const b = v.b / range;
+  const max = Math.max(r, g, b);
+  const min = Math.min(r, g, b);
+  const l = (max + min) / 2;
+  let h, s, d;
+  if (max !== min) {
+    d = max - min;
+    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
+    h = hueValue(r, g, b, d, max);
+    h = h * 60 + 0.5;
+  }
+  return [h | 0, s || 0, l];
+}
+function calln(f, a, b, c) {
+  return (
+    Array.isArray(a)
+      ? f(a[0], a[1], a[2])
+      : f(a, b, c)
+  ).map(n2b);
+}
+function hsl2rgb(h, s, l) {
+  return calln(hsl2rgbn, h, s, l);
+}
+function hwb2rgb(h, w, b) {
+  return calln(hwb2rgbn, h, w, b);
+}
+function hsv2rgb(h, s, v) {
+  return calln(hsv2rgbn, h, s, v);
+}
+function hue(h) {
+  return (h % 360 + 360) % 360;
+}
+function hueParse(str) {
+  const m = HUE_RE.exec(str);
+  let a = 255;
+  let v;
+  if (!m) {
+    return;
+  }
+  if (m[5] !== v) {
+    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);
+  }
+  const h = hue(+m[2]);
+  const p1 = +m[3] / 100;
+  const p2 = +m[4] / 100;
+  if (m[1] === 'hwb') {
+    v = hwb2rgb(h, p1, p2);
+  } else if (m[1] === 'hsv') {
+    v = hsv2rgb(h, p1, p2);
+  } else {
+    v = hsl2rgb(h, p1, p2);
+  }
+  return {
+    r: v[0],
+    g: v[1],
+    b: v[2],
+    a: a
+  };
+}
+function rotate(v, deg) {
+  var h = rgb2hsl(v);
+  h[0] = hue(h[0] + deg);
+  h = hsl2rgb(h);
+  v.r = h[0];
+  v.g = h[1];
+  v.b = h[2];
+}
+function hslString(v) {
+  if (!v) {
+    return;
+  }
+  const a = rgb2hsl(v);
+  const h = a[0];
+  const s = n2p(a[1]);
+  const l = n2p(a[2]);
+  return v.a < 255
+    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`
+    : `hsl(${h}, ${s}%, ${l}%)`;
+}
+
+const map = {
+	x: 'dark',
+	Z: 'light',
+	Y: 're',
+	X: 'blu',
+	W: 'gr',
+	V: 'medium',
+	U: 'slate',
+	A: 'ee',
+	T: 'ol',
+	S: 'or',
+	B: 'ra',
+	C: 'lateg',
+	D: 'ights',
+	R: 'in',
+	Q: 'turquois',
+	E: 'hi',
+	P: 'ro',
+	O: 'al',
+	N: 'le',
+	M: 'de',
+	L: 'yello',
+	F: 'en',
+	K: 'ch',
+	G: 'arks',
+	H: 'ea',
+	I: 'ightg',
+	J: 'wh'
+};
+const names$1 = {
+	OiceXe: 'f0f8ff',
+	antiquewEte: 'faebd7',
+	aqua: 'ffff',
+	aquamarRe: '7fffd4',
+	azuY: 'f0ffff',
+	beige: 'f5f5dc',
+	bisque: 'ffe4c4',
+	black: '0',
+	blanKedOmond: 'ffebcd',
+	Xe: 'ff',
+	XeviTet: '8a2be2',
+	bPwn: 'a52a2a',
+	burlywood: 'deb887',
+	caMtXe: '5f9ea0',
+	KartYuse: '7fff00',
+	KocTate: 'd2691e',
+	cSO: 'ff7f50',
+	cSnflowerXe: '6495ed',
+	cSnsilk: 'fff8dc',
+	crimson: 'dc143c',
+	cyan: 'ffff',
+	xXe: '8b',
+	xcyan: '8b8b',
+	xgTMnPd: 'b8860b',
+	xWay: 'a9a9a9',
+	xgYF: '6400',
+	xgYy: 'a9a9a9',
+	xkhaki: 'bdb76b',
+	xmagFta: '8b008b',
+	xTivegYF: '556b2f',
+	xSange: 'ff8c00',
+	xScEd: '9932cc',
+	xYd: '8b0000',
+	xsOmon: 'e9967a',
+	xsHgYF: '8fbc8f',
+	xUXe: '483d8b',
+	xUWay: '2f4f4f',
+	xUgYy: '2f4f4f',
+	xQe: 'ced1',
+	xviTet: '9400d3',
+	dAppRk: 'ff1493',
+	dApskyXe: 'bfff',
+	dimWay: '696969',
+	dimgYy: '696969',
+	dodgerXe: '1e90ff',
+	fiYbrick: 'b22222',
+	flSOwEte: 'fffaf0',
+	foYstWAn: '228b22',
+	fuKsia: 'ff00ff',
+	gaRsbSo: 'dcdcdc',
+	ghostwEte: 'f8f8ff',
+	gTd: 'ffd700',
+	gTMnPd: 'daa520',
+	Way: '808080',
+	gYF: '8000',
+	gYFLw: 'adff2f',
+	gYy: '808080',
+	honeyMw: 'f0fff0',
+	hotpRk: 'ff69b4',
+	RdianYd: 'cd5c5c',
+	Rdigo: '4b0082',
+	ivSy: 'fffff0',
+	khaki: 'f0e68c',
+	lavFMr: 'e6e6fa',
+	lavFMrXsh: 'fff0f5',
+	lawngYF: '7cfc00',
+	NmoncEffon: 'fffacd',
+	ZXe: 'add8e6',
+	ZcSO: 'f08080',
+	Zcyan: 'e0ffff',
+	ZgTMnPdLw: 'fafad2',
+	ZWay: 'd3d3d3',
+	ZgYF: '90ee90',
+	ZgYy: 'd3d3d3',
+	ZpRk: 'ffb6c1',
+	ZsOmon: 'ffa07a',
+	ZsHgYF: '20b2aa',
+	ZskyXe: '87cefa',
+	ZUWay: '778899',
+	ZUgYy: '778899',
+	ZstAlXe: 'b0c4de',
+	ZLw: 'ffffe0',
+	lime: 'ff00',
+	limegYF: '32cd32',
+	lRF: 'faf0e6',
+	magFta: 'ff00ff',
+	maPon: '800000',
+	VaquamarRe: '66cdaa',
+	VXe: 'cd',
+	VScEd: 'ba55d3',
+	VpurpN: '9370db',
+	VsHgYF: '3cb371',
+	VUXe: '7b68ee',
+	VsprRggYF: 'fa9a',
+	VQe: '48d1cc',
+	VviTetYd: 'c71585',
+	midnightXe: '191970',
+	mRtcYam: 'f5fffa',
+	mistyPse: 'ffe4e1',
+	moccasR: 'ffe4b5',
+	navajowEte: 'ffdead',
+	navy: '80',
+	Tdlace: 'fdf5e6',
+	Tive: '808000',
+	TivedBb: '6b8e23',
+	Sange: 'ffa500',
+	SangeYd: 'ff4500',
+	ScEd: 'da70d6',
+	pOegTMnPd: 'eee8aa',
+	pOegYF: '98fb98',
+	pOeQe: 'afeeee',
+	pOeviTetYd: 'db7093',
+	papayawEp: 'ffefd5',
+	pHKpuff: 'ffdab9',
+	peru: 'cd853f',
+	pRk: 'ffc0cb',
+	plum: 'dda0dd',
+	powMrXe: 'b0e0e6',
+	purpN: '800080',
+	YbeccapurpN: '663399',
+	Yd: 'ff0000',
+	Psybrown: 'bc8f8f',
+	PyOXe: '4169e1',
+	saddNbPwn: '8b4513',
+	sOmon: 'fa8072',
+	sandybPwn: 'f4a460',
+	sHgYF: '2e8b57',
+	sHshell: 'fff5ee',
+	siFna: 'a0522d',
+	silver: 'c0c0c0',
+	skyXe: '87ceeb',
+	UXe: '6a5acd',
+	UWay: '708090',
+	UgYy: '708090',
+	snow: 'fffafa',
+	sprRggYF: 'ff7f',
+	stAlXe: '4682b4',
+	tan: 'd2b48c',
+	teO: '8080',
+	tEstN: 'd8bfd8',
+	tomato: 'ff6347',
+	Qe: '40e0d0',
+	viTet: 'ee82ee',
+	JHt: 'f5deb3',
+	wEte: 'ffffff',
+	wEtesmoke: 'f5f5f5',
+	Lw: 'ffff00',
+	LwgYF: '9acd32'
+};
+function unpack() {
+  const unpacked = {};
+  const keys = Object.keys(names$1);
+  const tkeys = Object.keys(map);
+  let i, j, k, ok, nk;
+  for (i = 0; i < keys.length; i++) {
+    ok = nk = keys[i];
+    for (j = 0; j < tkeys.length; j++) {
+      k = tkeys[j];
+      nk = nk.replace(k, map[k]);
+    }
+    k = parseInt(names$1[ok], 16);
+    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];
+  }
+  return unpacked;
+}
+
+let names;
+function nameParse(str) {
+  if (!names) {
+    names = unpack();
+    names.transparent = [0, 0, 0, 0];
+  }
+  const a = names[str.toLowerCase()];
+  return a && {
+    r: a[0],
+    g: a[1],
+    b: a[2],
+    a: a.length === 4 ? a[3] : 255
+  };
+}
+
+const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
+function rgbParse(str) {
+  const m = RGB_RE.exec(str);
+  let a = 255;
+  let r, g, b;
+  if (!m) {
+    return;
+  }
+  if (m[7] !== r) {
+    const v = +m[7];
+    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);
+  }
+  r = +m[1];
+  g = +m[3];
+  b = +m[5];
+  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));
+  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));
+  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));
+  return {
+    r: r,
+    g: g,
+    b: b,
+    a: a
+  };
+}
+function rgbString(v) {
+  return v && (
+    v.a < 255
+      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`
+      : `rgb(${v.r}, ${v.g}, ${v.b})`
+  );
+}
+
+const to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;
+const from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
+function interpolate(rgb1, rgb2, t) {
+  const r = from(b2n(rgb1.r));
+  const g = from(b2n(rgb1.g));
+  const b = from(b2n(rgb1.b));
+  return {
+    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),
+    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),
+    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),
+    a: rgb1.a + t * (rgb2.a - rgb1.a)
+  };
+}
+
+function modHSL(v, i, ratio) {
+  if (v) {
+    let tmp = rgb2hsl(v);
+    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));
+    tmp = hsl2rgb(tmp);
+    v.r = tmp[0];
+    v.g = tmp[1];
+    v.b = tmp[2];
+  }
+}
+function clone(v, proto) {
+  return v ? Object.assign(proto || {}, v) : v;
+}
+function fromObject(input) {
+  var v = {r: 0, g: 0, b: 0, a: 255};
+  if (Array.isArray(input)) {
+    if (input.length >= 3) {
+      v = {r: input[0], g: input[1], b: input[2], a: 255};
+      if (input.length > 3) {
+        v.a = n2b(input[3]);
+      }
+    }
+  } else {
+    v = clone(input, {r: 0, g: 0, b: 0, a: 1});
+    v.a = n2b(v.a);
+  }
+  return v;
+}
+function functionParse(str) {
+  if (str.charAt(0) === 'r') {
+    return rgbParse(str);
+  }
+  return hueParse(str);
+}
+class Color {
+  constructor(input) {
+    if (input instanceof Color) {
+      return input;
+    }
+    const type = typeof input;
+    let v;
+    if (type === 'object') {
+      v = fromObject(input);
+    } else if (type === 'string') {
+      v = hexParse(input) || nameParse(input) || functionParse(input);
+    }
+    this._rgb = v;
+    this._valid = !!v;
+  }
+  get valid() {
+    return this._valid;
+  }
+  get rgb() {
+    var v = clone(this._rgb);
+    if (v) {
+      v.a = b2n(v.a);
+    }
+    return v;
+  }
+  set rgb(obj) {
+    this._rgb = fromObject(obj);
+  }
+  rgbString() {
+    return this._valid ? rgbString(this._rgb) : undefined;
+  }
+  hexString() {
+    return this._valid ? hexString(this._rgb) : undefined;
+  }
+  hslString() {
+    return this._valid ? hslString(this._rgb) : undefined;
+  }
+  mix(color, weight) {
+    if (color) {
+      const c1 = this.rgb;
+      const c2 = color.rgb;
+      let w2;
+      const p = weight === w2 ? 0.5 : weight;
+      const w = 2 * p - 1;
+      const a = c1.a - c2.a;
+      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
+      w2 = 1 - w1;
+      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;
+      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;
+      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;
+      c1.a = p * c1.a + (1 - p) * c2.a;
+      this.rgb = c1;
+    }
+    return this;
+  }
+  interpolate(color, t) {
+    if (color) {
+      this._rgb = interpolate(this._rgb, color._rgb, t);
+    }
+    return this;
+  }
+  clone() {
+    return new Color(this.rgb);
+  }
+  alpha(a) {
+    this._rgb.a = n2b(a);
+    return this;
+  }
+  clearer(ratio) {
+    const rgb = this._rgb;
+    rgb.a *= 1 - ratio;
+    return this;
+  }
+  greyscale() {
+    const rgb = this._rgb;
+    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);
+    rgb.r = rgb.g = rgb.b = val;
+    return this;
+  }
+  opaquer(ratio) {
+    const rgb = this._rgb;
+    rgb.a *= 1 + ratio;
+    return this;
+  }
+  negate() {
+    const v = this._rgb;
+    v.r = 255 - v.r;
+    v.g = 255 - v.g;
+    v.b = 255 - v.b;
+    return this;
+  }
+  lighten(ratio) {
+    modHSL(this._rgb, 2, ratio);
+    return this;
+  }
+  darken(ratio) {
+    modHSL(this._rgb, 2, -ratio);
+    return this;
+  }
+  saturate(ratio) {
+    modHSL(this._rgb, 1, ratio);
+    return this;
+  }
+  desaturate(ratio) {
+    modHSL(this._rgb, 1, -ratio);
+    return this;
+  }
+  rotate(deg) {
+    rotate(this._rgb, deg);
+    return this;
+  }
+}
+
+function index_esm(input) {
+  return new Color(input);
+}
+
+export { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };
Index: node_modules/@kurkle/color/dist/color.min.js
===================================================================
--- node_modules/@kurkle/color/dist/color.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@kurkle/color/dist/color.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+/*!
+ * @kurkle/color v0.3.4
+ * https://github.com/kurkle/color#readme
+ * (c) 2024 Jukka Kurkela
+ * Released under the MIT License
+ */
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self)["@kurkle/color"]=t()}(this,(function(){"use strict";function e(e){return e+.5|0}const t=(e,t,f)=>Math.max(Math.min(e,f),t);function f(f){return t(e(2.55*f),0,255)}function r(f){return t(e(255*f),0,255)}function n(f){return t(e(f/2.55)/100,0,1)}function a(f){return t(e(100*f),0,100)}const i={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},s=[..."0123456789ABCDEF"],c=e=>s[15&e],b=e=>s[(240&e)>>4]+s[15&e],g=e=>(240&e)>>4==(15&e);function o(e){var t,f=e.length;return"#"===e[0]&&(4===f||5===f?t={r:255&17*i[e[1]],g:255&17*i[e[2]],b:255&17*i[e[3]],a:5===f?17*i[e[4]]:255}:7!==f&&9!==f||(t={r:i[e[1]]<<4|i[e[2]],g:i[e[3]]<<4|i[e[4]],b:i[e[5]]<<4|i[e[6]],a:9===f?i[e[7]]<<4|i[e[8]]:255})),t}function d(e){var t=(e=>g(e.r)&&g(e.g)&&g(e.b)&&g(e.a))(e)?c:b;return e?"#"+t(e.r)+t(e.g)+t(e.b)+((e,t)=>e<255?t(e):"")(e.a,t):void 0}const u=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function h(e,t,f){const r=t*Math.min(f,1-f),n=(t,n=(t+e/30)%12)=>f-r*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function l(e,t,f){const r=(r,n=(r+e/60)%6)=>f-f*t*Math.max(Math.min(n,4-n,1),0);return[r(5),r(3),r(1)]}function p(e,t,f){const r=h(e,1,.5);let n;for(t+f>1&&(n=1/(t+f),t*=n,f*=n),n=0;n<3;n++)r[n]*=1-t-f,r[n]+=t;return r}function m(e){const t=e.r/255,f=e.g/255,r=e.b/255,n=Math.max(t,f,r),a=Math.min(t,f,r),i=(n+a)/2;let s,c,b;return n!==a&&(b=n-a,c=i>.5?b/(2-n-a):b/(n+a),s=function(e,t,f,r,n){return e===n?(t-f)/r+(t<f?6:0):t===n?(f-e)/r+2:(e-t)/r+4}(t,f,r,b,n),s=60*s+.5),[0|s,c||0,i]}function y(e,t,f,n){return(Array.isArray(t)?e(t[0],t[1],t[2]):e(t,f,n)).map(r)}function Y(e,t,f){return y(h,e,t,f)}function v(e,t,f){return y(p,e,t,f)}function x(e,t,f){return y(l,e,t,f)}function w(e){return(e%360+360)%360}function _(e){const t=u.exec(e);let n,a=255;if(!t)return;t[5]!==n&&(a=t[6]?f(+t[5]):r(+t[5]));const i=w(+t[2]),s=+t[3]/100,c=+t[4]/100;return n="hwb"===t[1]?v(i,s,c):"hsv"===t[1]?x(i,s,c):Y(i,s,c),{r:n[0],g:n[1],b:n[2],a:a}}function F(e,t){var f=m(e);f[0]=w(f[0]+t),f=Y(f),e.r=f[0],e.g=f[1],e.b=f[2]}function M(e){if(!e)return;const t=m(e),f=t[0],r=a(t[1]),i=a(t[2]);return e.a<255?`hsla(${f}, ${r}%, ${i}%, ${n(e.a)})`:`hsl(${f}, ${r}%, ${i}%)`}const k={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},X={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let O;function S(e){O||(O=function(){const e={},t=Object.keys(X),f=Object.keys(k);let r,n,a,i,s;for(r=0;r<t.length;r++){for(i=s=t[r],n=0;n<f.length;n++)a=f[n],s=s.replace(a,k[a]);a=parseInt(X[i],16),e[s]=[a>>16&255,a>>8&255,255&a]}return e}(),O.transparent=[0,0,0,0]);const t=O[e.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:4===t.length?t[3]:255}}const T=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function P(e){const r=T.exec(e);let n,a,i,s=255;if(r){if(r[7]!==n){const e=+r[7];s=r[8]?f(e):t(255*e,0,255)}return n=+r[1],a=+r[3],i=+r[5],n=255&(r[2]?f(n):t(n,0,255)),a=255&(r[4]?f(a):t(a,0,255)),i=255&(r[6]?f(i):t(i,0,255)),{r:n,g:a,b:i,a:s}}}function Z(e){return e&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${n(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`)}const $=e=>e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055,E=e=>e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4);function R(e,t,f){if(e){let r=m(e);r[t]=Math.max(0,Math.min(r[t]+r[t]*f,0===t?360:1)),r=Y(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function A(e,t){return e?Object.assign(t||{},e):e}function U(e){var t={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(t={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(t.a=r(e[3]))):(t=A(e,{r:0,g:0,b:0,a:1})).a=r(t.a),t}class V{constructor(e){if(e instanceof V)return e;const t=typeof e;let f;var r;"object"===t?f=U(e):"string"===t&&(f=o(e)||S(e)||("r"===(r=e).charAt(0)?P(r):_(r))),this._rgb=f,this._valid=!!f}get valid(){return this._valid}get rgb(){var e=A(this._rgb);return e&&(e.a=n(e.a)),e}set rgb(e){this._rgb=U(e)}rgbString(){return this._valid?Z(this._rgb):void 0}hexString(){return this._valid?d(this._rgb):void 0}hslString(){return this._valid?M(this._rgb):void 0}mix(e,t){if(e){const f=this.rgb,r=e.rgb;let n;const a=t===n?.5:t,i=2*a-1,s=f.a-r.a,c=((i*s==-1?i:(i+s)/(1+i*s))+1)/2;n=1-c,f.r=255&c*f.r+n*r.r+.5,f.g=255&c*f.g+n*r.g+.5,f.b=255&c*f.b+n*r.b+.5,f.a=a*f.a+(1-a)*r.a,this.rgb=f}return this}interpolate(e,t){return e&&(this._rgb=function(e,t,f){const a=E(n(e.r)),i=E(n(e.g)),s=E(n(e.b));return{r:r($(a+f*(E(n(t.r))-a))),g:r($(i+f*(E(n(t.g))-i))),b:r($(s+f*(E(n(t.b))-s))),a:e.a+f*(t.a-e.a)}}(this._rgb,e._rgb,t)),this}clone(){return new V(this.rgb)}alpha(e){return this._rgb.a=r(e),this}clearer(e){return this._rgb.a*=1-e,this}greyscale(){const t=this._rgb,f=e(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=f,this}opaquer(e){return this._rgb.a*=1+e,this}negate(){const e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return R(this._rgb,2,e),this}darken(e){return R(this._rgb,2,-e),this}saturate(e){return R(this._rgb,1,e),this}desaturate(e){return R(this._rgb,1,-e),this}rotate(e){return F(this._rgb,e),this}}function W(e){return new V(e)}var j=Object.freeze({__proto__:null,Color:V,b2n:n,b2p:function(f){return t(e(f/2.55),0,100)},default:W,hexParse:o,hexString:d,hsl2rgb:Y,hslString:M,hsv2rgb:x,hueParse:_,hwb2rgb:v,lim:t,n2b:r,n2p:a,nameParse:S,p2b:f,rgb2hsl:m,rgbParse:P,rgbString:Z,rotate:F,round:e});return Object.assign(W,j)}));
+//# sourceMappingURL=color.min.js.map
Index: node_modules/@kurkle/color/dist/color.min.js.map
===================================================================
--- node_modules/@kurkle/color/dist/color.min.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@kurkle/color/dist/color.min.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"color.min.js","sources":["../src/byte.js","../src/hex.js","../src/hue.js","../packed.js","../src/names.js","../src/rgb.js","../src/srgb.js","../src/color.js","../src/index.esm.js","../src/index.js"],"sourcesContent":["/**\n * @packageDocumentation\n * @module utils\n */\n\n/**\n * Rounds decimal to nearest integer\n * @param {number} v - the number to round\n */\nexport function round(v) {\n  return v + 0.5 | 0;\n}\n\nexport const lim = (v, l, h) => Math.max(Math.min(v, h), l);\n\n/**\n * convert percent to byte 0..255\n * @param {number} v - 0..100\n */\nexport function p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\n\n/**\n * convert byte to percet 0..100\n * @param {number} v - 0..255\n */\nexport function b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\n\n/**\n * convert normalized to byte 0..255\n * @param {number} v - 0..1\n */\nexport function n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\n\n/**\n * convert byte to normalized 0..1\n * @param {number} v - 0..255\n */\nexport function b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\n\n/**\n * convert normalized to percent 0..100\n * @param {number} v - 0..1\n */\nexport function n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n","/**\n * @packageDocumentation\n * @module utils\n */\n\n/**\n * @typedef {import('./index.js').RGBA} RGBA\n */\n\n/**\n * @hidden\n */\nconst map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\n\n/**\n * @hidden\n */\nconst hex = [...'0123456789ABCDEF'];\n\n/**\n * @param {number} b - byte\n * @hidden\n */\nconst h1 = b => hex[b & 0xF];\n\n/**\n * @param {number} b - byte\n * @hidden\n */\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\n\n/**\n * @param {number} b - byte\n * @hidden\n */\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\n\n/**\n * @param {RGBA} v - the color\n * @hidden\n */\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n\n/**\n * Parse HEX to color\n * @param {string} str - the string\n */\nexport function hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map[str[1]] * 17,\n        g: 255 & map[str[2]] * 17,\n        b: 255 & map[str[3]] * 17,\n        a: len === 5 ? map[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map[str[1]] << 4 | map[str[2]],\n        g: map[str[3]] << 4 | map[str[4]],\n        b: map[str[5]] << 4 | map[str[6]],\n        a: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\n\nconst alpha = (a, f) => a < 255 ? f(a) : '';\n\n/**\n * Return HEX string from color\n * @param {RGBA} v - the color\n * @return {string|undefined}\n */\nexport function hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n","/**\n * @packageDocumentation\n * @module utils\n */\n\nimport {b2n, n2p, n2b, p2b} from './byte.js';\n\n/**\n * @typedef {import('./index.js').RGBA} RGBA\n */\n\n/**\n * @hidden\n */\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\n\n/**\n * Converts hsl to rgb normalized\n * @url https://jsfiddle.net/Lamik/reuk63ay/91\n * @param {number} h - hue [0..360]\n * @param {number} s - saturation [0..1]\n * @param {number} l - lightness [0..1]\n * @returns {number[]} - [r, g, b] each normalized to [0..1]\n * @hidden\n */\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  /**\n   * @param {number} n\n   */\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\n\n/**\n * Convert hsv to rgb normalized\n * @url https://jsfiddle.net/Lamik/Lr61wqub/15/\n * @param {number} h - hue [0..360]\n * @param {number} s - saturation [0..1]\n * @param {number} v - value [0..1]\n * @returns {number[]} - [r, g, b] each normalized to [0..1]\n * @hidden\n */\nfunction hsv2rgbn(h, s, v) {\n  /**\n   * @param {number} n\n   */\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\n\n/**\n * Convert hwb to rgb normalized\n * @param {number} h - hue [0..360]\n * @param {number} w - whiteness [0..1]\n * @param {number} b - blackness [0..1]\n * @returns {number[]} - [r, g, b] each normalized to [0..1]\n * @hidden\n */\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\n\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\n\n/**\n * Convert rgb to hsl\n * @param {RGBA} v - the color\n * @returns {number[]} - [h, s, l]\n */\nexport function rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\n\n/**\n * @param {function} f\n * @param {number|number[]} a\n * @param {number} b\n * @param {number} c\n * @private\n * @hidden\n */\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\n\n/**\n * Convert hsl to rgb\n * @param {number|number[]} h - hue | [h, s, l]\n * @param {number} [s] - saturation\n * @param {number} [l] - lightness\n * @returns {number[]}\n */\nexport function hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\n\n/**\n * Convert hwb to rgb\n * @param {number|number[]} h - hue | [h, s, l]\n * @param {number} [w] - whiteness\n * @param {number} [b] - blackness\n * @returns {number[]}\n */\nexport function hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\n\n/**\n * Convert hsv to rgb\n * @param {number|number[]} h - hue | [h, s, l]\n * @param {number} [s] - saturation\n * @param {number} [v] - value\n * @returns {number[]}\n */\nexport function hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\n\n/**\n * @param {number} h - the angle\n * @hidden\n */\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\n\n/**\n * Parse hsl/hsv/hwb color string\n * @param {string} str - hsl/hsv/hwb color string\n * @returns {RGBA} - the parsed color components\n */\nexport function hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  // v is undefined\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\n\n/**\n * Rotate the `v` color by `deg` degrees\n * @param {RGBA} v - the color\n * @param {number} deg - degrees to rotate\n */\nexport function rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\n\n/**\n * Return hsl(a) string from color components\n * @param {RGBA} v - the color\n * @return {string|undefined}\n */\nexport function hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n","\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nexport default function unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n","/**\n * @packageDocumentation\n * @module utils\n */\n\nimport unpack from '../packed.js';\nlet names;\n\n/**\n * @typedef {import('./index.js').RGBA} RGBA\n */\n\n/**\n * Parse color name\n * @param {string} str - the color name\n * @return {RGBA} - the color\n */\nexport function nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n","/**\n * @packageDocumentation\n * @module utils\n */\n\nimport {b2n, lim, p2b} from './byte.js';\n\n/**\n * @typedef {import('./index.js').RGBA} RGBA\n */\n\n/**\n * @hidden\n */\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\n\n/**\n * Parse rgb(a) string to RGBA\n * @param {string} str - the rgb string\n * @returns {RGBA} - the parsed color\n */\nexport function rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n\n  if (!m) {\n    return;\n  }\n\n  // r is undefined\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\n\n/**\n * Return rgb(a) string from color\n * @param {RGBA} v - the color\n */\nexport function rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n","import {b2n, n2b} from './byte.js';\n\n/**\n * @typedef {import('./index.js').RGBA} RGBA\n */\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n\n/**\n * @param {RGBA} rgb1 from color\n * @param {RGBA} rgb2 to color\n * @param {number} t 0..1\n * @returns {RGBA} interpolaced\n */\nexport function interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n","/**\n * @packageDocumentation\n * @module index\n */\n\nimport {b2n, n2b, round} from './byte.js';\nimport {hexParse, hexString} from './hex.js';\nimport {hsl2rgb, hslString, hueParse, rgb2hsl, rotate} from './hue.js';\nimport {nameParse} from './names.js';\nimport {rgbParse, rgbString} from './rgb.js';\nimport {interpolate} from './srgb.js';\n\n/**\n * @typedef {import('./index.js').RGBA} RGBA\n */\n\n/**\n * Modify HSL properties\n * @param {RGBA} v - the color\n * @param {number} i - index [0=h, 1=s, 2=l]\n * @param {number} ratio - ratio [0..1]\n * @hidden\n */\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\n\n/**\n * Clone color\n * @param {RGBA} v - the color\n * @param {object} [proto] - prototype\n * @hidden\n */\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\n\n/**\n * @param {RGBA|number[]} input\n * @hidden\n */\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\n\n/**\n * @param {string} str\n * @hidden\n */\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\n\nexport default class Color {\n  /**\n   * constructor\n   * @param {Color|RGBA|string|number[]} input\n   */\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      // @ts-ignore\n      v = fromObject(input);\n    } else if (type === 'string') {\n      // @ts-ignore\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n\n    /** @type {RGBA} */\n    this._rgb = v;\n    /** @type {boolean} */\n    this._valid = !!v;\n  }\n\n  /**\n   * `true` if this is a valid color\n   * @returns {boolean}\n   */\n  get valid() {\n    return this._valid;\n  }\n\n  /**\n   * @returns {RGBA} - the color\n   */\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n\n  /**\n   * @param {RGBA} obj - the color\n   */\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n\n  /**\n   * rgb(a) string\n   * @return {string|undefined}\n   */\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n\n  /**\n   * hex string\n   * @return {string|undefined}\n   */\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n\n  /**\n   * hsl(a) string\n   * @return {string|undefined}\n   */\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n\n  /**\n   * Mix another color to this color.\n   * @param {Color} color - Color to mix in\n   * @param {number} weight - 0..1\n   * @returns {Color}\n   */\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2; // using instead of undefined in the next line\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n\n  /**\n   * Interpolate a color value between this and `color`\n   * @param {Color} color\n   * @param {number} t - 0..1\n   * @returns {Color}\n   */\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n\n  /**\n   * Clone\n   * @returns {Color}\n   */\n  clone() {\n    return new Color(this.rgb);\n  }\n\n  /**\n   * Set aplha\n   * @param {number} a - the alpha [0..1]\n   * @returns {Color}\n   */\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n\n  /**\n   * Make clearer\n   * @param {number} ratio - ratio [0..1]\n   * @returns {Color}\n   */\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n\n  /**\n   * Convert to grayscale\n   * @returns {Color}\n   */\n  greyscale() {\n    const rgb = this._rgb;\n    // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n\n  /**\n   * Opaquer\n   * @param {number} ratio - ratio [0..1]\n   * @returns {Color}\n   */\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n\n  /**\n   * Negates the rgb value\n   * @returns {Color}\n   */\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n\n  /**\n   * Lighten\n   * @param {number} ratio - ratio [0..1]\n   * @returns {Color}\n   */\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n\n  /**\n   * Darken\n   * @param {number} ratio - ratio [0..1]\n   * @returns {Color}\n   */\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n\n  /**\n   * Saturate\n   * @param {number} ratio - ratio [0..1]\n   * @returns {Color}\n   */\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n\n  /**\n   * Desaturate\n   * @param {number} ratio - ratio [0..1]\n   * @returns {Color}\n   */\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n\n  /**\n   * Rotate\n   * @param {number} deg - degrees to rotate\n   * @returns {Color}\n   */\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n","/**\n * @packageDocumentation\n * @module index\n */\n\nimport Color from './color.js';\n\nexport {Color};\nexport * from './byte.js';\nexport * from './hex.js';\nexport * from './hue.js';\nexport * from './names.js';\nexport * from './rgb.js';\n\n/**\n * @typedef {Object} RGBA\n * @property {number} r - red [0..255]\n * @property {number} g - green [0..255]\n * @property {number} b - blue [0..255]\n * @property {number} a - alpha [0..1]\n * @internal\n */\n\n/**\n * Construct new Color instance\n * @param {Color|RGBA|string|number[]} input\n * @internal\n */\nexport default function(input) {\n  return new Color(input);\n}\n","/**\n * @packageDocumentation\n * @module index\n */\n\nimport * as color from './index.esm.js';\n\nexport default Object.assign(color.default, color);\n"],"names":["round","v","lim","l","h","Math","max","min","p2b","n2b","b2n","n2p","map","A","B","C","D","E","F","a","b","c","d","e","f","hex","h1","h2","eq","hexParse","str","ret","len","length","r","g","hexString","isShort","alpha","undefined","HUE_RE","hsl2rgbn","s","n","k","hsv2rgbn","hwb2rgbn","w","rgb","i","rgb2hsl","hueValue","calln","Array","isArray","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","m","exec","p1","p2","rotate","deg","hslString","x","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","nameParse","unpacked","keys","Object","tkeys","j","ok","nk","replace","parseInt","unpack","transparent","toLowerCase","RGB_RE","rgbParse","rgbString","to","pow","from","modHSL","ratio","tmp","clone","proto","assign","fromObject","input","Color","constructor","type","charAt","this","_rgb","_valid","valid","obj","mix","color","weight","c1","c2","w2","p","w1","interpolate","t","rgb1","rgb2","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","index_esm","color.default"],"mappings":"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"}
Index: node_modules/@kurkle/color/package.json
===================================================================
--- node_modules/@kurkle/color/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@kurkle/color/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+{
+  "name": "@kurkle/color",
+  "type": "module",
+  "version": "0.3.4",
+  "description": "css color parsing, manupulation and conversion",
+  "sideEffects": false,
+  "main": "dist/color.cjs",
+  "module": "dist/color.esm.js",
+  "types": "dist/color.d.ts",
+  "exports": {
+    "types": "./dist/color.d.ts",
+    "import": "./dist/color.esm.js",
+    "require": "./dist/color.cjs"
+  },
+  "scripts": {
+    "build": "node util/copy_dist.js && rollup -c",
+    "lint": "eslint src/*.js test/*.js util/*.js",
+    "test": "node test/index.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/kurkle/color.git"
+  },
+  "files": [
+    "dist/*",
+    "dist/color.d.ts"
+  ],
+  "keywords": [
+    "color",
+    "colour",
+    "css",
+    "hsl",
+    "hex",
+    "rgb",
+    "rgba",
+    "hwb",
+    "hsv",
+    "cmyk"
+  ],
+  "author": "Jukka Kurkela",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/kurkle/color/issues"
+  },
+  "homepage": "https://github.com/kurkle/color#readme",
+  "devDependencies": {
+    "@rollup/plugin-terser": "^0.4.0",
+    "assert": "^2.0.0",
+    "benchmark": "^2.1.4",
+    "chartjs-color": "^2.4.1",
+    "chartjs-color-string": "^0.6.0",
+    "child_process": "^1.0.2",
+    "chroma-js": "^3.1.1",
+    "color-name": "^2.0.0",
+    "color-names": "^2.0.0",
+    "color-parse": "^2.0.2",
+    "color-parser": "^0.1.0",
+    "color-string": "^1.5.5",
+    "csscolorparser": "^1.0.3",
+    "eslint": "^9.15.0",
+    "eslint-config-chartjs": "^0.3.0",
+    "eslint-config-defaults": "^9.0.0",
+    "eslint-plugin-import": "^2.22.1",
+    "eslint-plugin-react": "^7.22.0",
+    "fs": "0.0.1-security",
+    "perf_hooks": "0.0.1",
+    "rollup": "^4.25.0",
+    "rollup-plugin-analyzer": "^4.0.0",
+    "rollup-plugin-cleanup": "^3.2.1",
+    "rollup-plugin-istanbul": "^5.0.0",
+    "rollup-plugin-visualizer": "^5.8.3",
+    "tinycolor2": "^1.4.2",
+    "typedoc": "^0.26.7",
+    "typescript": "^5.6.2",
+    "util": "^0.12.3"
+  }
+}
Index: node_modules/@reduxjs/toolkit/LICENSE
===================================================================
--- node_modules/@reduxjs/toolkit/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Mark Erikson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/@reduxjs/toolkit/README.md
===================================================================
--- node_modules/@reduxjs/toolkit/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+# Redux Toolkit
+
+![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/reduxjs/redux-toolkit/tests.yml?style=flat-square)
+[![npm version](https://img.shields.io/npm/v/@reduxjs/toolkit.svg?style=flat-square)](https://www.npmjs.com/package/@reduxjs/toolkit)
+[![npm downloads](https://img.shields.io/npm/dm/@reduxjs/toolkit.svg?style=flat-square&label=RTK+downloads)](https://www.npmjs.com/package/@reduxjs/toolkit)
+
+**The official, opinionated, batteries-included toolset for efficient Redux development**
+
+## Installation
+
+### Create a React Redux App
+
+The recommended way to start new apps with React and Redux Toolkit is by using [our official Redux Toolkit + TS template for Vite](https://github.com/reduxjs/redux-templates), or by creating a new Next.js project using [Next's `with-redux` template](https://github.com/vercel/next.js/tree/canary/examples/with-redux).
+
+Both of these already have Redux Toolkit and React-Redux configured appropriately for that build tool, and come with a small example app that demonstrates how to use several of Redux Toolkit's features.
+
+```bash
+# Vite with our Redux+TS template
+# (using the `degit` tool to clone and extract the template)
+npx degit reduxjs/redux-templates/packages/vite-template-redux my-app
+
+# Next.js using the `with-redux` template
+npx create-next-app --example with-redux my-app
+```
+
+We do not currently have official React Native templates, but recommend these templates for standard React Native and for Expo:
+
+- https://github.com/rahsheen/react-native-template-redux-typescript
+- https://github.com/rahsheen/expo-template-redux-typescript
+
+### An Existing App
+
+Redux Toolkit is available as a package on NPM for use with a module bundler or in a Node application:
+
+```bash
+# NPM
+npm install @reduxjs/toolkit
+
+# Yarn
+yarn add @reduxjs/toolkit
+```
+
+The package includes a precompiled ESM build that can be used as a [`<script type="module">` tag](https://unpkg.com/@reduxjs/toolkit/dist/redux-toolkit.browser.mjs) directly in the browser.
+
+## Documentation
+
+The Redux Toolkit docs are available at **https://redux-toolkit.js.org**, including API references and usage guides for all of the APIs included in Redux Toolkit.
+
+The Redux core docs at https://redux.js.org includes the full Redux tutorials, as well usage guides on general Redux patterns.
+
+## Purpose
+
+The **Redux Toolkit** package is intended to be the standard way to write Redux logic. It was originally created to help address three common concerns about Redux:
+
+- "Configuring a Redux store is too complicated"
+- "I have to add a lot of packages to get Redux to do anything useful"
+- "Redux requires too much boilerplate code"
+
+We can't solve every use case, but in the spirit of [`create-react-app`](https://github.com/facebook/create-react-app), we can try to provide some tools that abstract over the setup process and handle the most common use cases, as well as include some useful utilities that will let the user simplify their application code.
+
+Because of that, this package is deliberately limited in scope. It does _not_ address concepts like "reusable encapsulated Redux modules", folder or file structures, managing entity relationships in the store, and so on.
+
+Redux Toolkit also includes a powerful data fetching and caching capability that we've dubbed "RTK Query". It's included in the package as a separate set of entry points. It's optional, but can eliminate the need to hand-write data fetching logic yourself.
+
+## What's Included
+
+Redux Toolkit includes these APIs:
+
+- `configureStore()`: wraps `createStore` to provide simplified configuration options and good defaults. It can automatically combine your slice reducers, add whatever Redux middleware you supply, includes `redux-thunk` by default, and enables use of the Redux DevTools Extension.
+- `createReducer()`: lets you supply a lookup table of action types to case reducer functions, rather than writing switch statements. In addition, it automatically uses the [`immer` library](https://github.com/mweststrate/immer) to let you write simpler immutable updates with normal mutative code, like `state.todos[3].completed = true`.
+- `createAction()`: generates an action creator function for the given action type string. The function itself has `toString()` defined, so that it can be used in place of the type constant.
+- `createSlice()`: combines `createReducer()` + `createAction()`. Accepts an object of reducer functions, a slice name, and an initial state value, and automatically generates a slice reducer with corresponding action creators and action types.
+- `combineSlices()`: combines multiple slices into a single reducer, and allows "lazy loading" of slices after initialisation.
+- `createListenerMiddleware()`: lets you define "listener" entries that contain an "effect" callback with additional logic, and a way to specify when that callback should run based on dispatched actions or state changes. A lightweight alternative to Redux async middleware like sagas and observables.
+- `createAsyncThunk()`: accepts an action type string and a function that returns a promise, and generates a thunk that dispatches `pending/resolved/rejected` action types based on that promise
+- `createEntityAdapter()`: generates a set of reusable reducers and selectors to manage normalized data in the store
+- The `createSelector()` utility from the [Reselect](https://github.com/reduxjs/reselect) library, re-exported for ease of use.
+
+For details, see [the Redux Toolkit API Reference section in the docs](https://redux-toolkit.js.org/api/configureStore).
+
+## RTK Query
+
+**RTK Query** is provided as an optional addon within the `@reduxjs/toolkit` package. It is purpose-built to solve the use case of data fetching and caching, supplying a compact, but powerful toolset to define an API interface layer for your app. It is intended to simplify common cases for loading data in a web application, eliminating the need to hand-write data fetching & caching logic yourself.
+
+RTK Query is built on top of the Redux Toolkit core for its implementation, using [Redux](https://redux.js.org/) internally for its architecture. Although knowledge of Redux and RTK are not required to use RTK Query, you should explore all of the additional global store management capabilities they provide, as well as installing the [Redux DevTools browser extension](https://github.com/reduxjs/redux-devtools), which works flawlessly with RTK Query to traverse and replay a timeline of your request & cache behavior.
+
+RTK Query is included within the installation of the core Redux Toolkit package. It is available via either of the two entry points below:
+
+```ts no-transpile
+import { createApi } from '@reduxjs/toolkit/query'
+
+/* React-specific entry point that automatically generates
+   hooks corresponding to the defined endpoints */
+import { createApi } from '@reduxjs/toolkit/query/react'
+```
+
+### What's included
+
+RTK Query includes these APIs:
+
+- `createApi()`: The core of RTK Query's functionality. It allows you to define a set of endpoints describe how to retrieve data from a series of endpoints, including configuration of how to fetch and transform that data. In most cases, you should use this once per app, with "one API slice per base URL" as a rule of thumb.
+- `fetchBaseQuery()`: A small wrapper around fetch that aims to simplify requests. Intended as the recommended baseQuery to be used in createApi for the majority of users.
+- `<ApiProvider />`: Can be used as a Provider if you do not already have a Redux store.
+- `setupListeners()`: A utility used to enable refetchOnMount and refetchOnReconnect behaviors.
+
+See the [**RTK Query Overview**](https://redux-toolkit.js.org/rtk-query/overview) page for more details on what RTK Query is, what problems it solves, and how to use it.
+
+## Contributing
+
+Please refer to our [contributing guide](/CONTRIBUTING.md) to learn about our development process, how to propose bugfixes and improvements, and how to build and test your changes to Redux Toolkit.
Index: node_modules/@reduxjs/toolkit/dist/cjs/index.js
===================================================================
--- node_modules/@reduxjs/toolkit/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+'use strict'
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./redux-toolkit.production.min.cjs')
+} else {
+  module.exports = require('./redux-toolkit.development.cjs')
+}
Index: node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.development.cjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2362 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var src_exports = {};
+__export(src_exports, {
+  ReducerType: () => ReducerType,
+  SHOULD_AUTOBATCH: () => SHOULD_AUTOBATCH,
+  TaskAbortError: () => TaskAbortError,
+  Tuple: () => Tuple,
+  addListener: () => addListener,
+  asyncThunkCreator: () => asyncThunkCreator,
+  autoBatchEnhancer: () => autoBatchEnhancer,
+  buildCreateSlice: () => buildCreateSlice,
+  clearAllListeners: () => clearAllListeners,
+  combineSlices: () => combineSlices,
+  configureStore: () => configureStore,
+  createAction: () => createAction,
+  createActionCreatorInvariantMiddleware: () => createActionCreatorInvariantMiddleware,
+  createAsyncThunk: () => createAsyncThunk,
+  createDraftSafeSelector: () => createDraftSafeSelector,
+  createDraftSafeSelectorCreator: () => createDraftSafeSelectorCreator,
+  createDynamicMiddleware: () => createDynamicMiddleware,
+  createEntityAdapter: () => createEntityAdapter,
+  createImmutableStateInvariantMiddleware: () => createImmutableStateInvariantMiddleware,
+  createListenerMiddleware: () => createListenerMiddleware,
+  createNextState: () => import_immer6.produce,
+  createReducer: () => createReducer,
+  createSelector: () => import_reselect2.createSelector,
+  createSelectorCreator: () => import_reselect2.createSelectorCreator,
+  createSerializableStateInvariantMiddleware: () => createSerializableStateInvariantMiddleware,
+  createSlice: () => createSlice,
+  current: () => import_immer6.current,
+  findNonSerializableValue: () => findNonSerializableValue,
+  formatProdErrorMessage: () => formatProdErrorMessage,
+  freeze: () => import_immer6.freeze,
+  isActionCreator: () => isActionCreator,
+  isAllOf: () => isAllOf,
+  isAnyOf: () => isAnyOf,
+  isAsyncThunkAction: () => isAsyncThunkAction,
+  isDraft: () => import_immer6.isDraft,
+  isFluxStandardAction: () => isFSA,
+  isFulfilled: () => isFulfilled,
+  isImmutableDefault: () => isImmutableDefault,
+  isPending: () => isPending,
+  isPlain: () => isPlain,
+  isRejected: () => isRejected,
+  isRejectedWithValue: () => isRejectedWithValue,
+  lruMemoize: () => import_reselect2.lruMemoize,
+  miniSerializeError: () => miniSerializeError,
+  nanoid: () => nanoid,
+  original: () => import_immer6.original,
+  prepareAutoBatched: () => prepareAutoBatched,
+  removeListener: () => removeListener,
+  unwrapResult: () => unwrapResult,
+  weakMapMemoize: () => import_reselect2.weakMapMemoize
+});
+module.exports = __toCommonJS(src_exports);
+__reExport(src_exports, require("redux"), module.exports);
+var import_immer6 = require("immer");
+var import_reselect2 = require("reselect");
+
+// src/createDraftSafeSelector.ts
+var import_immer = require("immer");
+var import_reselect = require("reselect");
+var createDraftSafeSelectorCreator = (...args) => {
+  const createSelector2 = (0, import_reselect.createSelectorCreator)(...args);
+  const createDraftSafeSelector2 = Object.assign((...args2) => {
+    const selector = createSelector2(...args2);
+    const wrappedSelector = (value, ...rest) => selector((0, import_immer.isDraft)(value) ? (0, import_immer.current)(value) : value, ...rest);
+    Object.assign(wrappedSelector, selector);
+    return wrappedSelector;
+  }, {
+    withTypes: () => createDraftSafeSelector2
+  });
+  return createDraftSafeSelector2;
+};
+var createDraftSafeSelector = /* @__PURE__ */ createDraftSafeSelectorCreator(import_reselect.weakMapMemoize);
+
+// src/configureStore.ts
+var import_redux4 = require("redux");
+
+// src/devtoolsExtension.ts
+var import_redux = require("redux");
+var composeWithDevTools = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function() {
+  if (arguments.length === 0) return void 0;
+  if (typeof arguments[0] === "object") return import_redux.compose;
+  return import_redux.compose.apply(null, arguments);
+};
+var devToolsEnhancer = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function() {
+  return function(noop3) {
+    return noop3;
+  };
+};
+
+// src/getDefaultMiddleware.ts
+var import_redux_thunk = require("redux-thunk");
+
+// src/createAction.ts
+var import_redux2 = require("redux");
+
+// src/tsHelpers.ts
+var hasMatchFunction = (v) => {
+  return v && typeof v.match === "function";
+};
+
+// src/createAction.ts
+function createAction(type, prepareAction) {
+  function actionCreator(...args) {
+    if (prepareAction) {
+      let prepared = prepareAction(...args);
+      if (!prepared) {
+        throw new Error(false ? _formatProdErrorMessage(0) : "prepareAction did not return an object");
+      }
+      return {
+        type,
+        payload: prepared.payload,
+        ..."meta" in prepared && {
+          meta: prepared.meta
+        },
+        ..."error" in prepared && {
+          error: prepared.error
+        }
+      };
+    }
+    return {
+      type,
+      payload: args[0]
+    };
+  }
+  actionCreator.toString = () => `${type}`;
+  actionCreator.type = type;
+  actionCreator.match = (action) => (0, import_redux2.isAction)(action) && action.type === type;
+  return actionCreator;
+}
+function isActionCreator(action) {
+  return typeof action === "function" && "type" in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it
+  hasMatchFunction(action);
+}
+function isFSA(action) {
+  return (0, import_redux2.isAction)(action) && Object.keys(action).every(isValidKey);
+}
+function isValidKey(key) {
+  return ["type", "payload", "error", "meta"].indexOf(key) > -1;
+}
+
+// src/actionCreatorInvariantMiddleware.ts
+function getMessage(type) {
+  const splitType = type ? `${type}`.split("/") : [];
+  const actionName = splitType[splitType.length - 1] || "actionCreator";
+  return `Detected an action creator with type "${type || "unknown"}" being dispatched. 
+Make sure you're calling the action creator before dispatching, i.e. \`dispatch(${actionName}())\` instead of \`dispatch(${actionName})\`. This is necessary even if the action has no payload.`;
+}
+function createActionCreatorInvariantMiddleware(options = {}) {
+  if (false) {
+    return () => (next) => (action) => next(action);
+  }
+  const {
+    isActionCreator: isActionCreator2 = isActionCreator
+  } = options;
+  return () => (next) => (action) => {
+    if (isActionCreator2(action)) {
+      console.warn(getMessage(action.type));
+    }
+    return next(action);
+  };
+}
+
+// src/utils.ts
+var import_immer2 = require("immer");
+function getTimeMeasureUtils(maxDelay, fnName) {
+  let elapsed = 0;
+  return {
+    measureTime(fn) {
+      const started = Date.now();
+      try {
+        return fn();
+      } finally {
+        const finished = Date.now();
+        elapsed += finished - started;
+      }
+    },
+    warnIfExceeded() {
+      if (elapsed > maxDelay) {
+        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. 
+If your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.
+It is disabled in production builds, so you don't need to worry about that.`);
+      }
+    }
+  };
+}
+var Tuple = class _Tuple extends Array {
+  constructor(...items) {
+    super(...items);
+    Object.setPrototypeOf(this, _Tuple.prototype);
+  }
+  static get [Symbol.species]() {
+    return _Tuple;
+  }
+  concat(...arr) {
+    return super.concat.apply(this, arr);
+  }
+  prepend(...arr) {
+    if (arr.length === 1 && Array.isArray(arr[0])) {
+      return new _Tuple(...arr[0].concat(this));
+    }
+    return new _Tuple(...arr.concat(this));
+  }
+};
+function freezeDraftable(val) {
+  return (0, import_immer2.isDraftable)(val) ? (0, import_immer2.produce)(val, () => {
+  }) : val;
+}
+function getOrInsertComputed(map, key, compute) {
+  if (map.has(key)) return map.get(key);
+  return map.set(key, compute(key)).get(key);
+}
+
+// src/immutableStateInvariantMiddleware.ts
+function isImmutableDefault(value) {
+  return typeof value !== "object" || value == null || Object.isFrozen(value);
+}
+function trackForMutations(isImmutable, ignorePaths, obj) {
+  const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);
+  return {
+    detectMutations() {
+      return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);
+    }
+  };
+}
+function trackProperties(isImmutable, ignorePaths = [], obj, path = "", checkedObjects = /* @__PURE__ */ new Set()) {
+  const tracked = {
+    value: obj
+  };
+  if (!isImmutable(obj) && !checkedObjects.has(obj)) {
+    checkedObjects.add(obj);
+    tracked.children = {};
+    for (const key in obj) {
+      const childPath = path ? path + "." + key : key;
+      if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {
+        continue;
+      }
+      tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);
+    }
+  }
+  return tracked;
+}
+function detectMutations(isImmutable, ignoredPaths = [], trackedProperty, obj, sameParentRef = false, path = "") {
+  const prevObj = trackedProperty ? trackedProperty.value : void 0;
+  const sameRef = prevObj === obj;
+  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {
+    return {
+      wasMutated: true,
+      path
+    };
+  }
+  if (isImmutable(prevObj) || isImmutable(obj)) {
+    return {
+      wasMutated: false
+    };
+  }
+  const keysToDetect = {};
+  for (let key in trackedProperty.children) {
+    keysToDetect[key] = true;
+  }
+  for (let key in obj) {
+    keysToDetect[key] = true;
+  }
+  const hasIgnoredPaths = ignoredPaths.length > 0;
+  for (let key in keysToDetect) {
+    const nestedPath = path ? path + "." + key : key;
+    if (hasIgnoredPaths) {
+      const hasMatches = ignoredPaths.some((ignored) => {
+        if (ignored instanceof RegExp) {
+          return ignored.test(nestedPath);
+        }
+        return nestedPath === ignored;
+      });
+      if (hasMatches) {
+        continue;
+      }
+    }
+    const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);
+    if (result.wasMutated) {
+      return result;
+    }
+  }
+  return {
+    wasMutated: false
+  };
+}
+function createImmutableStateInvariantMiddleware(options = {}) {
+  if (false) {
+    return () => (next) => (action) => next(action);
+  } else {
+    let stringify2 = function(obj, serializer, indent, decycler) {
+      return JSON.stringify(obj, getSerialize2(serializer, decycler), indent);
+    }, getSerialize2 = function(serializer, decycler) {
+      let stack = [], keys = [];
+      if (!decycler) decycler = function(_, value) {
+        if (stack[0] === value) return "[Circular ~]";
+        return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]";
+      };
+      return function(key, value) {
+        if (stack.length > 0) {
+          var thisPos = stack.indexOf(this);
+          ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+          ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+          if (~stack.indexOf(value)) value = decycler.call(this, key, value);
+        } else stack.push(value);
+        return serializer == null ? value : serializer.call(this, key, value);
+      };
+    };
+    var stringify = stringify2, getSerialize = getSerialize2;
+    let {
+      isImmutable = isImmutableDefault,
+      ignoredPaths,
+      warnAfter = 32
+    } = options;
+    const track = trackForMutations.bind(null, isImmutable, ignoredPaths);
+    return ({
+      getState
+    }) => {
+      let state = getState();
+      let tracker = track(state);
+      let result;
+      return (next) => (action) => {
+        const measureUtils = getTimeMeasureUtils(warnAfter, "ImmutableStateInvariantMiddleware");
+        measureUtils.measureTime(() => {
+          state = getState();
+          result = tracker.detectMutations();
+          tracker = track(state);
+          if (result.wasMutated) {
+            throw new Error(false ? _formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ""}'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);
+          }
+        });
+        const dispatchedAction = next(action);
+        measureUtils.measureTime(() => {
+          state = getState();
+          result = tracker.detectMutations();
+          tracker = track(state);
+          if (result.wasMutated) {
+            throw new Error(false ? _formatProdErrorMessage2(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ""}. Take a look at the reducer(s) handling the action ${stringify2(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);
+          }
+        });
+        measureUtils.warnIfExceeded();
+        return dispatchedAction;
+      };
+    };
+  }
+}
+
+// src/serializableStateInvariantMiddleware.ts
+var import_redux3 = require("redux");
+function isPlain(val) {
+  const type = typeof val;
+  return val == null || type === "string" || type === "boolean" || type === "number" || Array.isArray(val) || (0, import_redux3.isPlainObject)(val);
+}
+function findNonSerializableValue(value, path = "", isSerializable = isPlain, getEntries, ignoredPaths = [], cache) {
+  let foundNestedSerializable;
+  if (!isSerializable(value)) {
+    return {
+      keyPath: path || "<root>",
+      value
+    };
+  }
+  if (typeof value !== "object" || value === null) {
+    return false;
+  }
+  if (cache?.has(value)) return false;
+  const entries = getEntries != null ? getEntries(value) : Object.entries(value);
+  const hasIgnoredPaths = ignoredPaths.length > 0;
+  for (const [key, nestedValue] of entries) {
+    const nestedPath = path ? path + "." + key : key;
+    if (hasIgnoredPaths) {
+      const hasMatches = ignoredPaths.some((ignored) => {
+        if (ignored instanceof RegExp) {
+          return ignored.test(nestedPath);
+        }
+        return nestedPath === ignored;
+      });
+      if (hasMatches) {
+        continue;
+      }
+    }
+    if (!isSerializable(nestedValue)) {
+      return {
+        keyPath: nestedPath,
+        value: nestedValue
+      };
+    }
+    if (typeof nestedValue === "object") {
+      foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);
+      if (foundNestedSerializable) {
+        return foundNestedSerializable;
+      }
+    }
+  }
+  if (cache && isNestedFrozen(value)) cache.add(value);
+  return false;
+}
+function isNestedFrozen(value) {
+  if (!Object.isFrozen(value)) return false;
+  for (const nestedValue of Object.values(value)) {
+    if (typeof nestedValue !== "object" || nestedValue === null) continue;
+    if (!isNestedFrozen(nestedValue)) return false;
+  }
+  return true;
+}
+function createSerializableStateInvariantMiddleware(options = {}) {
+  if (false) {
+    return () => (next) => (action) => next(action);
+  } else {
+    const {
+      isSerializable = isPlain,
+      getEntries,
+      ignoredActions = [],
+      ignoredActionPaths = ["meta.arg", "meta.baseQueryMeta"],
+      ignoredPaths = [],
+      warnAfter = 32,
+      ignoreState = false,
+      ignoreActions = false,
+      disableCache = false
+    } = options;
+    const cache = !disableCache && WeakSet ? /* @__PURE__ */ new WeakSet() : void 0;
+    return (storeAPI) => (next) => (action) => {
+      if (!(0, import_redux3.isAction)(action)) {
+        return next(action);
+      }
+      const result = next(action);
+      const measureUtils = getTimeMeasureUtils(warnAfter, "SerializableStateInvariantMiddleware");
+      if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {
+        measureUtils.measureTime(() => {
+          const foundActionNonSerializableValue = findNonSerializableValue(action, "", isSerializable, getEntries, ignoredActionPaths, cache);
+          if (foundActionNonSerializableValue) {
+            const {
+              keyPath,
+              value
+            } = foundActionNonSerializableValue;
+            console.error(`A non-serializable value was detected in an action, in the path: \`${keyPath}\`. Value:`, value, "\nTake a look at the logic that dispatched this action: ", action, "\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)", "\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)");
+          }
+        });
+      }
+      if (!ignoreState) {
+        measureUtils.measureTime(() => {
+          const state = storeAPI.getState();
+          const foundStateNonSerializableValue = findNonSerializableValue(state, "", isSerializable, getEntries, ignoredPaths, cache);
+          if (foundStateNonSerializableValue) {
+            const {
+              keyPath,
+              value
+            } = foundStateNonSerializableValue;
+            console.error(`A non-serializable value was detected in the state, in the path: \`${keyPath}\`. Value:`, value, `
+Take a look at the reducer(s) handling this action type: ${action.type}.
+(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);
+          }
+        });
+        measureUtils.warnIfExceeded();
+      }
+      return result;
+    };
+  }
+}
+
+// src/getDefaultMiddleware.ts
+function isBoolean(x) {
+  return typeof x === "boolean";
+}
+var buildGetDefaultMiddleware = () => function getDefaultMiddleware(options) {
+  const {
+    thunk = true,
+    immutableCheck = true,
+    serializableCheck = true,
+    actionCreatorCheck = true
+  } = options ?? {};
+  let middlewareArray = new Tuple();
+  if (thunk) {
+    if (isBoolean(thunk)) {
+      middlewareArray.push(import_redux_thunk.thunk);
+    } else {
+      middlewareArray.push((0, import_redux_thunk.withExtraArgument)(thunk.extraArgument));
+    }
+  }
+  if (true) {
+    if (immutableCheck) {
+      let immutableOptions = {};
+      if (!isBoolean(immutableCheck)) {
+        immutableOptions = immutableCheck;
+      }
+      middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));
+    }
+    if (serializableCheck) {
+      let serializableOptions = {};
+      if (!isBoolean(serializableCheck)) {
+        serializableOptions = serializableCheck;
+      }
+      middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));
+    }
+    if (actionCreatorCheck) {
+      let actionCreatorOptions = {};
+      if (!isBoolean(actionCreatorCheck)) {
+        actionCreatorOptions = actionCreatorCheck;
+      }
+      middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));
+    }
+  }
+  return middlewareArray;
+};
+
+// src/autoBatchEnhancer.ts
+var SHOULD_AUTOBATCH = "RTK_autoBatch";
+var prepareAutoBatched = () => (payload) => ({
+  payload,
+  meta: {
+    [SHOULD_AUTOBATCH]: true
+  }
+});
+var createQueueWithTimer = (timeout) => {
+  return (notify) => {
+    setTimeout(notify, timeout);
+  };
+};
+var autoBatchEnhancer = (options = {
+  type: "raf"
+}) => (next) => (...args) => {
+  const store = next(...args);
+  let notifying = true;
+  let shouldNotifyAtEndOfTick = false;
+  let notificationQueued = false;
+  const listeners = /* @__PURE__ */ new Set();
+  const queueCallback = options.type === "tick" ? queueMicrotask : options.type === "raf" ? (
+    // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.
+    typeof window !== "undefined" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10)
+  ) : options.type === "callback" ? options.queueNotification : createQueueWithTimer(options.timeout);
+  const notifyListeners = () => {
+    notificationQueued = false;
+    if (shouldNotifyAtEndOfTick) {
+      shouldNotifyAtEndOfTick = false;
+      listeners.forEach((l) => l());
+    }
+  };
+  return Object.assign({}, store, {
+    // Override the base `store.subscribe` method to keep original listeners
+    // from running if we're delaying notifications
+    subscribe(listener2) {
+      const wrappedListener = () => notifying && listener2();
+      const unsubscribe = store.subscribe(wrappedListener);
+      listeners.add(listener2);
+      return () => {
+        unsubscribe();
+        listeners.delete(listener2);
+      };
+    },
+    // Override the base `store.dispatch` method so that we can check actions
+    // for the `shouldAutoBatch` flag and determine if batching is active
+    dispatch(action) {
+      try {
+        notifying = !action?.meta?.[SHOULD_AUTOBATCH];
+        shouldNotifyAtEndOfTick = !notifying;
+        if (shouldNotifyAtEndOfTick) {
+          if (!notificationQueued) {
+            notificationQueued = true;
+            queueCallback(notifyListeners);
+          }
+        }
+        return store.dispatch(action);
+      } finally {
+        notifying = true;
+      }
+    }
+  });
+};
+
+// src/getDefaultEnhancers.ts
+var buildGetDefaultEnhancers = (middlewareEnhancer) => function getDefaultEnhancers(options) {
+  const {
+    autoBatch = true
+  } = options ?? {};
+  let enhancerArray = new Tuple(middlewareEnhancer);
+  if (autoBatch) {
+    enhancerArray.push(autoBatchEnhancer(typeof autoBatch === "object" ? autoBatch : void 0));
+  }
+  return enhancerArray;
+};
+
+// src/configureStore.ts
+function configureStore(options) {
+  const getDefaultMiddleware = buildGetDefaultMiddleware();
+  const {
+    reducer = void 0,
+    middleware,
+    devTools = true,
+    duplicateMiddlewareCheck = true,
+    preloadedState = void 0,
+    enhancers = void 0
+  } = options || {};
+  let rootReducer;
+  if (typeof reducer === "function") {
+    rootReducer = reducer;
+  } else if ((0, import_redux4.isPlainObject)(reducer)) {
+    rootReducer = (0, import_redux4.combineReducers)(reducer);
+  } else {
+    throw new Error(false ? _formatProdErrorMessage(1) : "`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers");
+  }
+  if (middleware && typeof middleware !== "function") {
+    throw new Error(false ? _formatProdErrorMessage2(2) : "`middleware` field must be a callback");
+  }
+  let finalMiddleware;
+  if (typeof middleware === "function") {
+    finalMiddleware = middleware(getDefaultMiddleware);
+    if (!Array.isArray(finalMiddleware)) {
+      throw new Error(false ? _formatProdErrorMessage3(3) : "when using a middleware builder function, an array of middleware must be returned");
+    }
+  } else {
+    finalMiddleware = getDefaultMiddleware();
+  }
+  if (finalMiddleware.some((item) => typeof item !== "function")) {
+    throw new Error(false ? _formatProdErrorMessage4(4) : "each middleware provided to configureStore must be a function");
+  }
+  if (duplicateMiddlewareCheck) {
+    let middlewareReferences = /* @__PURE__ */ new Set();
+    finalMiddleware.forEach((middleware2) => {
+      if (middlewareReferences.has(middleware2)) {
+        throw new Error(false ? _formatProdErrorMessage5(42) : "Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.");
+      }
+      middlewareReferences.add(middleware2);
+    });
+  }
+  let finalCompose = import_redux4.compose;
+  if (devTools) {
+    finalCompose = composeWithDevTools({
+      // Enable capture of stack traces for dispatched Redux actions
+      trace: true,
+      ...typeof devTools === "object" && devTools
+    });
+  }
+  const middlewareEnhancer = (0, import_redux4.applyMiddleware)(...finalMiddleware);
+  const getDefaultEnhancers = buildGetDefaultEnhancers(middlewareEnhancer);
+  if (enhancers && typeof enhancers !== "function") {
+    throw new Error(false ? _formatProdErrorMessage6(5) : "`enhancers` field must be a callback");
+  }
+  let storeEnhancers = typeof enhancers === "function" ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();
+  if (!Array.isArray(storeEnhancers)) {
+    throw new Error(false ? _formatProdErrorMessage7(6) : "`enhancers` callback must return an array");
+  }
+  if (storeEnhancers.some((item) => typeof item !== "function")) {
+    throw new Error(false ? _formatProdErrorMessage8(7) : "each enhancer provided to configureStore must be a function");
+  }
+  if (finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {
+    console.error("middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`");
+  }
+  const composedEnhancer = finalCompose(...storeEnhancers);
+  return (0, import_redux4.createStore)(rootReducer, preloadedState, composedEnhancer);
+}
+
+// src/createReducer.ts
+var import_immer3 = require("immer");
+
+// src/mapBuilders.ts
+function executeReducerBuilderCallback(builderCallback) {
+  const actionsMap = {};
+  const actionMatchers = [];
+  let defaultCaseReducer;
+  const builder = {
+    addCase(typeOrActionCreator, reducer) {
+      if (true) {
+        if (actionMatchers.length > 0) {
+          throw new Error(false ? _formatProdErrorMessage(26) : "`builder.addCase` should only be called before calling `builder.addMatcher`");
+        }
+        if (defaultCaseReducer) {
+          throw new Error(false ? _formatProdErrorMessage2(27) : "`builder.addCase` should only be called before calling `builder.addDefaultCase`");
+        }
+      }
+      const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;
+      if (!type) {
+        throw new Error(false ? _formatProdErrorMessage3(28) : "`builder.addCase` cannot be called with an empty action type");
+      }
+      if (type in actionsMap) {
+        throw new Error(false ? _formatProdErrorMessage4(29) : `\`builder.addCase\` cannot be called with two reducers for the same action type '${type}'`);
+      }
+      actionsMap[type] = reducer;
+      return builder;
+    },
+    addMatcher(matcher, reducer) {
+      if (true) {
+        if (defaultCaseReducer) {
+          throw new Error(false ? _formatProdErrorMessage5(30) : "`builder.addMatcher` should only be called before calling `builder.addDefaultCase`");
+        }
+      }
+      actionMatchers.push({
+        matcher,
+        reducer
+      });
+      return builder;
+    },
+    addDefaultCase(reducer) {
+      if (true) {
+        if (defaultCaseReducer) {
+          throw new Error(false ? _formatProdErrorMessage6(31) : "`builder.addDefaultCase` can only be called once");
+        }
+      }
+      defaultCaseReducer = reducer;
+      return builder;
+    }
+  };
+  builderCallback(builder);
+  return [actionsMap, actionMatchers, defaultCaseReducer];
+}
+
+// src/createReducer.ts
+function isStateFunction(x) {
+  return typeof x === "function";
+}
+function createReducer(initialState, mapOrBuilderCallback) {
+  if (true) {
+    if (typeof mapOrBuilderCallback === "object") {
+      throw new Error(false ? _formatProdErrorMessage(8) : "The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer");
+    }
+  }
+  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);
+  let getInitialState;
+  if (isStateFunction(initialState)) {
+    getInitialState = () => freezeDraftable(initialState());
+  } else {
+    const frozenInitialState = freezeDraftable(initialState);
+    getInitialState = () => frozenInitialState;
+  }
+  function reducer(state = getInitialState(), action) {
+    let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({
+      matcher
+    }) => matcher(action)).map(({
+      reducer: reducer2
+    }) => reducer2)];
+    if (caseReducers.filter((cr) => !!cr).length === 0) {
+      caseReducers = [finalDefaultCaseReducer];
+    }
+    return caseReducers.reduce((previousState, caseReducer) => {
+      if (caseReducer) {
+        if ((0, import_immer3.isDraft)(previousState)) {
+          const draft = previousState;
+          const result = caseReducer(draft, action);
+          if (result === void 0) {
+            return previousState;
+          }
+          return result;
+        } else if (!(0, import_immer3.isDraftable)(previousState)) {
+          const result = caseReducer(previousState, action);
+          if (result === void 0) {
+            if (previousState === null) {
+              return previousState;
+            }
+            throw Error("A case reducer on a non-draftable value must not return undefined");
+          }
+          return result;
+        } else {
+          return (0, import_immer3.produce)(previousState, (draft) => {
+            return caseReducer(draft, action);
+          });
+        }
+      }
+      return previousState;
+    }, state);
+  }
+  reducer.getInitialState = getInitialState;
+  return reducer;
+}
+
+// src/matchers.ts
+var matches = (matcher, action) => {
+  if (hasMatchFunction(matcher)) {
+    return matcher.match(action);
+  } else {
+    return matcher(action);
+  }
+};
+function isAnyOf(...matchers) {
+  return (action) => {
+    return matchers.some((matcher) => matches(matcher, action));
+  };
+}
+function isAllOf(...matchers) {
+  return (action) => {
+    return matchers.every((matcher) => matches(matcher, action));
+  };
+}
+function hasExpectedRequestMetadata(action, validStatus) {
+  if (!action || !action.meta) return false;
+  const hasValidRequestId = typeof action.meta.requestId === "string";
+  const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;
+  return hasValidRequestId && hasValidRequestStatus;
+}
+function isAsyncThunkArray(a) {
+  return typeof a[0] === "function" && "pending" in a[0] && "fulfilled" in a[0] && "rejected" in a[0];
+}
+function isPending(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["pending"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isPending()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.pending));
+}
+function isRejected(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["rejected"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isRejected()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.rejected));
+}
+function isRejectedWithValue(...asyncThunks) {
+  const hasFlag = (action) => {
+    return action && action.meta && action.meta.rejectedWithValue;
+  };
+  if (asyncThunks.length === 0) {
+    return isAllOf(isRejected(...asyncThunks), hasFlag);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isRejectedWithValue()(asyncThunks[0]);
+  }
+  return isAllOf(isRejected(...asyncThunks), hasFlag);
+}
+function isFulfilled(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["fulfilled"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isFulfilled()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.fulfilled));
+}
+function isAsyncThunkAction(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["pending", "fulfilled", "rejected"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isAsyncThunkAction()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.flatMap((asyncThunk) => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));
+}
+
+// src/nanoid.ts
+var urlAlphabet = "ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW";
+var nanoid = (size = 21) => {
+  let id = "";
+  let i = size;
+  while (i--) {
+    id += urlAlphabet[Math.random() * 64 | 0];
+  }
+  return id;
+};
+
+// src/createAsyncThunk.ts
+var commonProperties = ["name", "message", "stack", "code"];
+var RejectWithValue = class {
+  constructor(payload, meta) {
+    this.payload = payload;
+    this.meta = meta;
+  }
+  /*
+  type-only property to distinguish between RejectWithValue and FulfillWithMeta
+  does not exist at runtime
+  */
+  _type;
+};
+var FulfillWithMeta = class {
+  constructor(payload, meta) {
+    this.payload = payload;
+    this.meta = meta;
+  }
+  /*
+  type-only property to distinguish between RejectWithValue and FulfillWithMeta
+  does not exist at runtime
+  */
+  _type;
+};
+var miniSerializeError = (value) => {
+  if (typeof value === "object" && value !== null) {
+    const simpleError = {};
+    for (const property of commonProperties) {
+      if (typeof value[property] === "string") {
+        simpleError[property] = value[property];
+      }
+    }
+    return simpleError;
+  }
+  return {
+    message: String(value)
+  };
+};
+var externalAbortMessage = "External signal was aborted";
+var createAsyncThunk = /* @__PURE__ */ (() => {
+  function createAsyncThunk2(typePrefix, payloadCreator, options) {
+    const fulfilled = createAction(typePrefix + "/fulfilled", (payload, requestId, arg, meta) => ({
+      payload,
+      meta: {
+        ...meta || {},
+        arg,
+        requestId,
+        requestStatus: "fulfilled"
+      }
+    }));
+    const pending = createAction(typePrefix + "/pending", (requestId, arg, meta) => ({
+      payload: void 0,
+      meta: {
+        ...meta || {},
+        arg,
+        requestId,
+        requestStatus: "pending"
+      }
+    }));
+    const rejected = createAction(typePrefix + "/rejected", (error, requestId, arg, payload, meta) => ({
+      payload,
+      error: (options && options.serializeError || miniSerializeError)(error || "Rejected"),
+      meta: {
+        ...meta || {},
+        arg,
+        requestId,
+        rejectedWithValue: !!payload,
+        requestStatus: "rejected",
+        aborted: error?.name === "AbortError",
+        condition: error?.name === "ConditionError"
+      }
+    }));
+    function actionCreator(arg, {
+      signal
+    } = {}) {
+      return (dispatch, getState, extra) => {
+        const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();
+        const abortController = new AbortController();
+        let abortHandler;
+        let abortReason;
+        function abort(reason) {
+          abortReason = reason;
+          abortController.abort();
+        }
+        if (signal) {
+          if (signal.aborted) {
+            abort(externalAbortMessage);
+          } else {
+            signal.addEventListener("abort", () => abort(externalAbortMessage), {
+              once: true
+            });
+          }
+        }
+        const promise = async function() {
+          let finalAction;
+          try {
+            let conditionResult = options?.condition?.(arg, {
+              getState,
+              extra
+            });
+            if (isThenable(conditionResult)) {
+              conditionResult = await conditionResult;
+            }
+            if (conditionResult === false || abortController.signal.aborted) {
+              throw {
+                name: "ConditionError",
+                message: "Aborted due to condition callback returning false."
+              };
+            }
+            const abortedPromise = new Promise((_, reject) => {
+              abortHandler = () => {
+                reject({
+                  name: "AbortError",
+                  message: abortReason || "Aborted"
+                });
+              };
+              abortController.signal.addEventListener("abort", abortHandler);
+            });
+            dispatch(pending(requestId, arg, options?.getPendingMeta?.({
+              requestId,
+              arg
+            }, {
+              getState,
+              extra
+            })));
+            finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {
+              dispatch,
+              getState,
+              extra,
+              requestId,
+              signal: abortController.signal,
+              abort,
+              rejectWithValue: (value, meta) => {
+                return new RejectWithValue(value, meta);
+              },
+              fulfillWithValue: (value, meta) => {
+                return new FulfillWithMeta(value, meta);
+              }
+            })).then((result) => {
+              if (result instanceof RejectWithValue) {
+                throw result;
+              }
+              if (result instanceof FulfillWithMeta) {
+                return fulfilled(result.payload, requestId, arg, result.meta);
+              }
+              return fulfilled(result, requestId, arg);
+            })]);
+          } catch (err) {
+            finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err, requestId, arg);
+          } finally {
+            if (abortHandler) {
+              abortController.signal.removeEventListener("abort", abortHandler);
+            }
+          }
+          const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;
+          if (!skipDispatch) {
+            dispatch(finalAction);
+          }
+          return finalAction;
+        }();
+        return Object.assign(promise, {
+          abort,
+          requestId,
+          arg,
+          unwrap() {
+            return promise.then(unwrapResult);
+          }
+        });
+      };
+    }
+    return Object.assign(actionCreator, {
+      pending,
+      rejected,
+      fulfilled,
+      settled: isAnyOf(rejected, fulfilled),
+      typePrefix
+    });
+  }
+  createAsyncThunk2.withTypes = () => createAsyncThunk2;
+  return createAsyncThunk2;
+})();
+function unwrapResult(action) {
+  if (action.meta && action.meta.rejectedWithValue) {
+    throw action.payload;
+  }
+  if (action.error) {
+    throw action.error;
+  }
+  return action.payload;
+}
+function isThenable(value) {
+  return value !== null && typeof value === "object" && typeof value.then === "function";
+}
+
+// src/createSlice.ts
+var asyncThunkSymbol = /* @__PURE__ */ Symbol.for("rtk-slice-createasyncthunk");
+var asyncThunkCreator = {
+  [asyncThunkSymbol]: createAsyncThunk
+};
+var ReducerType = /* @__PURE__ */ ((ReducerType2) => {
+  ReducerType2["reducer"] = "reducer";
+  ReducerType2["reducerWithPrepare"] = "reducerWithPrepare";
+  ReducerType2["asyncThunk"] = "asyncThunk";
+  return ReducerType2;
+})(ReducerType || {});
+function getType(slice, actionKey) {
+  return `${slice}/${actionKey}`;
+}
+function buildCreateSlice({
+  creators
+} = {}) {
+  const cAT = creators?.asyncThunk?.[asyncThunkSymbol];
+  return function createSlice2(options) {
+    const {
+      name,
+      reducerPath = name
+    } = options;
+    if (!name) {
+      throw new Error(false ? _formatProdErrorMessage(11) : "`name` is a required option for createSlice");
+    }
+    if (typeof process !== "undefined" && true) {
+      if (options.initialState === void 0) {
+        console.error("You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`");
+      }
+    }
+    const reducers = (typeof options.reducers === "function" ? options.reducers(buildReducerCreators()) : options.reducers) || {};
+    const reducerNames = Object.keys(reducers);
+    const context = {
+      sliceCaseReducersByName: {},
+      sliceCaseReducersByType: {},
+      actionCreators: {},
+      sliceMatchers: []
+    };
+    const contextMethods = {
+      addCase(typeOrActionCreator, reducer2) {
+        const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;
+        if (!type) {
+          throw new Error(false ? _formatProdErrorMessage2(12) : "`context.addCase` cannot be called with an empty action type");
+        }
+        if (type in context.sliceCaseReducersByType) {
+          throw new Error(false ? _formatProdErrorMessage3(13) : "`context.addCase` cannot be called with two reducers for the same action type: " + type);
+        }
+        context.sliceCaseReducersByType[type] = reducer2;
+        return contextMethods;
+      },
+      addMatcher(matcher, reducer2) {
+        context.sliceMatchers.push({
+          matcher,
+          reducer: reducer2
+        });
+        return contextMethods;
+      },
+      exposeAction(name2, actionCreator) {
+        context.actionCreators[name2] = actionCreator;
+        return contextMethods;
+      },
+      exposeCaseReducer(name2, reducer2) {
+        context.sliceCaseReducersByName[name2] = reducer2;
+        return contextMethods;
+      }
+    };
+    reducerNames.forEach((reducerName) => {
+      const reducerDefinition = reducers[reducerName];
+      const reducerDetails = {
+        reducerName,
+        type: getType(name, reducerName),
+        createNotation: typeof options.reducers === "function"
+      };
+      if (isAsyncThunkSliceReducerDefinition(reducerDefinition)) {
+        handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);
+      } else {
+        handleNormalReducerDefinition(reducerDetails, reducerDefinition, contextMethods);
+      }
+    });
+    function buildReducer() {
+      if (true) {
+        if (typeof options.extraReducers === "object") {
+          throw new Error(false ? _formatProdErrorMessage4(14) : "The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice");
+        }
+      }
+      const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = void 0] = typeof options.extraReducers === "function" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];
+      const finalCaseReducers = {
+        ...extraReducers,
+        ...context.sliceCaseReducersByType
+      };
+      return createReducer(options.initialState, (builder) => {
+        for (let key in finalCaseReducers) {
+          builder.addCase(key, finalCaseReducers[key]);
+        }
+        for (let sM of context.sliceMatchers) {
+          builder.addMatcher(sM.matcher, sM.reducer);
+        }
+        for (let m of actionMatchers) {
+          builder.addMatcher(m.matcher, m.reducer);
+        }
+        if (defaultCaseReducer) {
+          builder.addDefaultCase(defaultCaseReducer);
+        }
+      });
+    }
+    const selectSelf = (state) => state;
+    const injectedSelectorCache = /* @__PURE__ */ new Map();
+    const injectedStateCache = /* @__PURE__ */ new WeakMap();
+    let _reducer;
+    function reducer(state, action) {
+      if (!_reducer) _reducer = buildReducer();
+      return _reducer(state, action);
+    }
+    function getInitialState() {
+      if (!_reducer) _reducer = buildReducer();
+      return _reducer.getInitialState();
+    }
+    function makeSelectorProps(reducerPath2, injected = false) {
+      function selectSlice(state) {
+        let sliceState = state[reducerPath2];
+        if (typeof sliceState === "undefined") {
+          if (injected) {
+            sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);
+          } else if (true) {
+            throw new Error(false ? _formatProdErrorMessage5(15) : "selectSlice returned undefined for an uninjected slice reducer");
+          }
+        }
+        return sliceState;
+      }
+      function getSelectors(selectState = selectSelf) {
+        const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => /* @__PURE__ */ new WeakMap());
+        return getOrInsertComputed(selectorCache, selectState, () => {
+          const map = {};
+          for (const [name2, selector] of Object.entries(options.selectors ?? {})) {
+            map[name2] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);
+          }
+          return map;
+        });
+      }
+      return {
+        reducerPath: reducerPath2,
+        getSelectors,
+        get selectors() {
+          return getSelectors(selectSlice);
+        },
+        selectSlice
+      };
+    }
+    const slice = {
+      name,
+      reducer,
+      actions: context.actionCreators,
+      caseReducers: context.sliceCaseReducersByName,
+      getInitialState,
+      ...makeSelectorProps(reducerPath),
+      injectInto(injectable, {
+        reducerPath: pathOpt,
+        ...config
+      } = {}) {
+        const newReducerPath = pathOpt ?? reducerPath;
+        injectable.inject({
+          reducerPath: newReducerPath,
+          reducer
+        }, config);
+        return {
+          ...slice,
+          ...makeSelectorProps(newReducerPath, true)
+        };
+      }
+    };
+    return slice;
+  };
+}
+function wrapSelector(selector, selectState, getInitialState, injected) {
+  function wrapper(rootState, ...args) {
+    let sliceState = selectState(rootState);
+    if (typeof sliceState === "undefined") {
+      if (injected) {
+        sliceState = getInitialState();
+      } else if (true) {
+        throw new Error(false ? _formatProdErrorMessage6(16) : "selectState returned undefined for an uninjected slice reducer");
+      }
+    }
+    return selector(sliceState, ...args);
+  }
+  wrapper.unwrapped = selector;
+  return wrapper;
+}
+var createSlice = /* @__PURE__ */ buildCreateSlice();
+function buildReducerCreators() {
+  function asyncThunk(payloadCreator, config) {
+    return {
+      _reducerDefinitionType: "asyncThunk" /* asyncThunk */,
+      payloadCreator,
+      ...config
+    };
+  }
+  asyncThunk.withTypes = () => asyncThunk;
+  return {
+    reducer(caseReducer) {
+      return Object.assign({
+        // hack so the wrapping function has the same name as the original
+        // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original
+        [caseReducer.name](...args) {
+          return caseReducer(...args);
+        }
+      }[caseReducer.name], {
+        _reducerDefinitionType: "reducer" /* reducer */
+      });
+    },
+    preparedReducer(prepare, reducer) {
+      return {
+        _reducerDefinitionType: "reducerWithPrepare" /* reducerWithPrepare */,
+        prepare,
+        reducer
+      };
+    },
+    asyncThunk
+  };
+}
+function handleNormalReducerDefinition({
+  type,
+  reducerName,
+  createNotation
+}, maybeReducerWithPrepare, context) {
+  let caseReducer;
+  let prepareCallback;
+  if ("reducer" in maybeReducerWithPrepare) {
+    if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {
+      throw new Error(false ? _formatProdErrorMessage7(17) : "Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.");
+    }
+    caseReducer = maybeReducerWithPrepare.reducer;
+    prepareCallback = maybeReducerWithPrepare.prepare;
+  } else {
+    caseReducer = maybeReducerWithPrepare;
+  }
+  context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));
+}
+function isAsyncThunkSliceReducerDefinition(reducerDefinition) {
+  return reducerDefinition._reducerDefinitionType === "asyncThunk" /* asyncThunk */;
+}
+function isCaseReducerWithPrepareDefinition(reducerDefinition) {
+  return reducerDefinition._reducerDefinitionType === "reducerWithPrepare" /* reducerWithPrepare */;
+}
+function handleThunkCaseReducerDefinition({
+  type,
+  reducerName
+}, reducerDefinition, context, cAT) {
+  if (!cAT) {
+    throw new Error(false ? _formatProdErrorMessage8(18) : "Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.");
+  }
+  const {
+    payloadCreator,
+    fulfilled,
+    pending,
+    rejected,
+    settled,
+    options
+  } = reducerDefinition;
+  const thunk = cAT(type, payloadCreator, options);
+  context.exposeAction(reducerName, thunk);
+  if (fulfilled) {
+    context.addCase(thunk.fulfilled, fulfilled);
+  }
+  if (pending) {
+    context.addCase(thunk.pending, pending);
+  }
+  if (rejected) {
+    context.addCase(thunk.rejected, rejected);
+  }
+  if (settled) {
+    context.addMatcher(thunk.settled, settled);
+  }
+  context.exposeCaseReducer(reducerName, {
+    fulfilled: fulfilled || noop,
+    pending: pending || noop,
+    rejected: rejected || noop,
+    settled: settled || noop
+  });
+}
+function noop() {
+}
+
+// src/entities/entity_state.ts
+function getInitialEntityState() {
+  return {
+    ids: [],
+    entities: {}
+  };
+}
+function createInitialStateFactory(stateAdapter) {
+  function getInitialState(additionalState = {}, entities) {
+    const state = Object.assign(getInitialEntityState(), additionalState);
+    return entities ? stateAdapter.setAll(state, entities) : state;
+  }
+  return {
+    getInitialState
+  };
+}
+
+// src/entities/state_selectors.ts
+function createSelectorsFactory() {
+  function getSelectors(selectState, options = {}) {
+    const {
+      createSelector: createSelector2 = createDraftSafeSelector
+    } = options;
+    const selectIds = (state) => state.ids;
+    const selectEntities = (state) => state.entities;
+    const selectAll = createSelector2(selectIds, selectEntities, (ids, entities) => ids.map((id) => entities[id]));
+    const selectId = (_, id) => id;
+    const selectById = (entities, id) => entities[id];
+    const selectTotal = createSelector2(selectIds, (ids) => ids.length);
+    if (!selectState) {
+      return {
+        selectIds,
+        selectEntities,
+        selectAll,
+        selectTotal,
+        selectById: createSelector2(selectEntities, selectId, selectById)
+      };
+    }
+    const selectGlobalizedEntities = createSelector2(selectState, selectEntities);
+    return {
+      selectIds: createSelector2(selectState, selectIds),
+      selectEntities: selectGlobalizedEntities,
+      selectAll: createSelector2(selectState, selectAll),
+      selectTotal: createSelector2(selectState, selectTotal),
+      selectById: createSelector2(selectGlobalizedEntities, selectId, selectById)
+    };
+  }
+  return {
+    getSelectors
+  };
+}
+
+// src/entities/state_adapter.ts
+var import_immer4 = require("immer");
+var isDraftTyped = import_immer4.isDraft;
+function createSingleArgumentStateOperator(mutator) {
+  const operator = createStateOperator((_, state) => mutator(state));
+  return function operation(state) {
+    return operator(state, void 0);
+  };
+}
+function createStateOperator(mutator) {
+  return function operation(state, arg) {
+    function isPayloadActionArgument(arg2) {
+      return isFSA(arg2);
+    }
+    const runMutator = (draft) => {
+      if (isPayloadActionArgument(arg)) {
+        mutator(arg.payload, draft);
+      } else {
+        mutator(arg, draft);
+      }
+    };
+    if (isDraftTyped(state)) {
+      runMutator(state);
+      return state;
+    }
+    return (0, import_immer4.produce)(state, runMutator);
+  };
+}
+
+// src/entities/utils.ts
+var import_immer5 = require("immer");
+function selectIdValue(entity, selectId) {
+  const key = selectId(entity);
+  if (key === void 0) {
+    console.warn("The entity passed to the `selectId` implementation returned undefined.", "You should probably provide your own `selectId` implementation.", "The entity that was passed:", entity, "The `selectId` implementation:", selectId.toString());
+  }
+  return key;
+}
+function ensureEntitiesArray(entities) {
+  if (!Array.isArray(entities)) {
+    entities = Object.values(entities);
+  }
+  return entities;
+}
+function getCurrent(value) {
+  return (0, import_immer5.isDraft)(value) ? (0, import_immer5.current)(value) : value;
+}
+function splitAddedUpdatedEntities(newEntities, selectId, state) {
+  newEntities = ensureEntitiesArray(newEntities);
+  const existingIdsArray = getCurrent(state.ids);
+  const existingIds = new Set(existingIdsArray);
+  const added = [];
+  const addedIds = /* @__PURE__ */ new Set([]);
+  const updated = [];
+  for (const entity of newEntities) {
+    const id = selectIdValue(entity, selectId);
+    if (existingIds.has(id) || addedIds.has(id)) {
+      updated.push({
+        id,
+        changes: entity
+      });
+    } else {
+      addedIds.add(id);
+      added.push(entity);
+    }
+  }
+  return [added, updated, existingIdsArray];
+}
+
+// src/entities/unsorted_state_adapter.ts
+function createUnsortedStateAdapter(selectId) {
+  function addOneMutably(entity, state) {
+    const key = selectIdValue(entity, selectId);
+    if (key in state.entities) {
+      return;
+    }
+    state.ids.push(key);
+    state.entities[key] = entity;
+  }
+  function addManyMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    for (const entity of newEntities) {
+      addOneMutably(entity, state);
+    }
+  }
+  function setOneMutably(entity, state) {
+    const key = selectIdValue(entity, selectId);
+    if (!(key in state.entities)) {
+      state.ids.push(key);
+    }
+    ;
+    state.entities[key] = entity;
+  }
+  function setManyMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    for (const entity of newEntities) {
+      setOneMutably(entity, state);
+    }
+  }
+  function setAllMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    state.ids = [];
+    state.entities = {};
+    addManyMutably(newEntities, state);
+  }
+  function removeOneMutably(key, state) {
+    return removeManyMutably([key], state);
+  }
+  function removeManyMutably(keys, state) {
+    let didMutate = false;
+    keys.forEach((key) => {
+      if (key in state.entities) {
+        delete state.entities[key];
+        didMutate = true;
+      }
+    });
+    if (didMutate) {
+      state.ids = state.ids.filter((id) => id in state.entities);
+    }
+  }
+  function removeAllMutably(state) {
+    Object.assign(state, {
+      ids: [],
+      entities: {}
+    });
+  }
+  function takeNewKey(keys, update, state) {
+    const original3 = state.entities[update.id];
+    if (original3 === void 0) {
+      return false;
+    }
+    const updated = Object.assign({}, original3, update.changes);
+    const newKey = selectIdValue(updated, selectId);
+    const hasNewKey = newKey !== update.id;
+    if (hasNewKey) {
+      keys[update.id] = newKey;
+      delete state.entities[update.id];
+    }
+    ;
+    state.entities[newKey] = updated;
+    return hasNewKey;
+  }
+  function updateOneMutably(update, state) {
+    return updateManyMutably([update], state);
+  }
+  function updateManyMutably(updates, state) {
+    const newKeys = {};
+    const updatesPerEntity = {};
+    updates.forEach((update) => {
+      if (update.id in state.entities) {
+        updatesPerEntity[update.id] = {
+          id: update.id,
+          // Spreads ignore falsy values, so this works even if there isn't
+          // an existing update already at this key
+          changes: {
+            ...updatesPerEntity[update.id]?.changes,
+            ...update.changes
+          }
+        };
+      }
+    });
+    updates = Object.values(updatesPerEntity);
+    const didMutateEntities = updates.length > 0;
+    if (didMutateEntities) {
+      const didMutateIds = updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;
+      if (didMutateIds) {
+        state.ids = Object.values(state.entities).map((e) => selectIdValue(e, selectId));
+      }
+    }
+  }
+  function upsertOneMutably(entity, state) {
+    return upsertManyMutably([entity], state);
+  }
+  function upsertManyMutably(newEntities, state) {
+    const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);
+    addManyMutably(added, state);
+    updateManyMutably(updated, state);
+  }
+  return {
+    removeAll: createSingleArgumentStateOperator(removeAllMutably),
+    addOne: createStateOperator(addOneMutably),
+    addMany: createStateOperator(addManyMutably),
+    setOne: createStateOperator(setOneMutably),
+    setMany: createStateOperator(setManyMutably),
+    setAll: createStateOperator(setAllMutably),
+    updateOne: createStateOperator(updateOneMutably),
+    updateMany: createStateOperator(updateManyMutably),
+    upsertOne: createStateOperator(upsertOneMutably),
+    upsertMany: createStateOperator(upsertManyMutably),
+    removeOne: createStateOperator(removeOneMutably),
+    removeMany: createStateOperator(removeManyMutably)
+  };
+}
+
+// src/entities/sorted_state_adapter.ts
+function findInsertIndex(sortedItems, item, comparisonFunction) {
+  let lowIndex = 0;
+  let highIndex = sortedItems.length;
+  while (lowIndex < highIndex) {
+    let middleIndex = lowIndex + highIndex >>> 1;
+    const currentItem = sortedItems[middleIndex];
+    const res = comparisonFunction(item, currentItem);
+    if (res >= 0) {
+      lowIndex = middleIndex + 1;
+    } else {
+      highIndex = middleIndex;
+    }
+  }
+  return lowIndex;
+}
+function insert(sortedItems, item, comparisonFunction) {
+  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);
+  sortedItems.splice(insertAtIndex, 0, item);
+  return sortedItems;
+}
+function createSortedStateAdapter(selectId, comparer) {
+  const {
+    removeOne,
+    removeMany,
+    removeAll
+  } = createUnsortedStateAdapter(selectId);
+  function addOneMutably(entity, state) {
+    return addManyMutably([entity], state);
+  }
+  function addManyMutably(newEntities, state, existingIds) {
+    newEntities = ensureEntitiesArray(newEntities);
+    const existingKeys = new Set(existingIds ?? getCurrent(state.ids));
+    const models = newEntities.filter((model) => !existingKeys.has(selectIdValue(model, selectId)));
+    if (models.length !== 0) {
+      mergeFunction(state, models);
+    }
+  }
+  function setOneMutably(entity, state) {
+    return setManyMutably([entity], state);
+  }
+  function setManyMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    if (newEntities.length !== 0) {
+      for (const item of newEntities) {
+        delete state.entities[selectId(item)];
+      }
+      mergeFunction(state, newEntities);
+    }
+  }
+  function setAllMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    state.entities = {};
+    state.ids = [];
+    addManyMutably(newEntities, state, []);
+  }
+  function updateOneMutably(update, state) {
+    return updateManyMutably([update], state);
+  }
+  function updateManyMutably(updates, state) {
+    let appliedUpdates = false;
+    let replacedIds = false;
+    for (let update of updates) {
+      const entity = state.entities[update.id];
+      if (!entity) {
+        continue;
+      }
+      appliedUpdates = true;
+      Object.assign(entity, update.changes);
+      const newId = selectId(entity);
+      if (update.id !== newId) {
+        replacedIds = true;
+        delete state.entities[update.id];
+        const oldIndex = state.ids.indexOf(update.id);
+        state.ids[oldIndex] = newId;
+        state.entities[newId] = entity;
+      }
+    }
+    if (appliedUpdates) {
+      mergeFunction(state, [], appliedUpdates, replacedIds);
+    }
+  }
+  function upsertOneMutably(entity, state) {
+    return upsertManyMutably([entity], state);
+  }
+  function upsertManyMutably(newEntities, state) {
+    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities(newEntities, selectId, state);
+    if (added.length) {
+      addManyMutably(added, state, existingIdsArray);
+    }
+    if (updated.length) {
+      updateManyMutably(updated, state);
+    }
+  }
+  function areArraysEqual(a, b) {
+    if (a.length !== b.length) {
+      return false;
+    }
+    for (let i = 0; i < a.length; i++) {
+      if (a[i] === b[i]) {
+        continue;
+      }
+      return false;
+    }
+    return true;
+  }
+  const mergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {
+    const currentEntities = getCurrent(state.entities);
+    const currentIds = getCurrent(state.ids);
+    const stateEntities = state.entities;
+    let ids = currentIds;
+    if (replacedIds) {
+      ids = new Set(currentIds);
+    }
+    let sortedEntities = [];
+    for (const id of ids) {
+      const entity = currentEntities[id];
+      if (entity) {
+        sortedEntities.push(entity);
+      }
+    }
+    const wasPreviouslyEmpty = sortedEntities.length === 0;
+    for (const item of addedItems) {
+      stateEntities[selectId(item)] = item;
+      if (!wasPreviouslyEmpty) {
+        insert(sortedEntities, item, comparer);
+      }
+    }
+    if (wasPreviouslyEmpty) {
+      sortedEntities = addedItems.slice().sort(comparer);
+    } else if (appliedUpdates) {
+      sortedEntities.sort(comparer);
+    }
+    const newSortedIds = sortedEntities.map(selectId);
+    if (!areArraysEqual(currentIds, newSortedIds)) {
+      state.ids = newSortedIds;
+    }
+  };
+  return {
+    removeOne,
+    removeMany,
+    removeAll,
+    addOne: createStateOperator(addOneMutably),
+    updateOne: createStateOperator(updateOneMutably),
+    upsertOne: createStateOperator(upsertOneMutably),
+    setOne: createStateOperator(setOneMutably),
+    setMany: createStateOperator(setManyMutably),
+    setAll: createStateOperator(setAllMutably),
+    addMany: createStateOperator(addManyMutably),
+    updateMany: createStateOperator(updateManyMutably),
+    upsertMany: createStateOperator(upsertManyMutably)
+  };
+}
+
+// src/entities/create_adapter.ts
+function createEntityAdapter(options = {}) {
+  const {
+    selectId,
+    sortComparer
+  } = {
+    sortComparer: false,
+    selectId: (instance) => instance.id,
+    ...options
+  };
+  const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);
+  const stateFactory = createInitialStateFactory(stateAdapter);
+  const selectorsFactory = createSelectorsFactory();
+  return {
+    selectId,
+    sortComparer,
+    ...stateFactory,
+    ...selectorsFactory,
+    ...stateAdapter
+  };
+}
+
+// src/listenerMiddleware/index.ts
+var import_redux5 = require("redux");
+
+// src/listenerMiddleware/exceptions.ts
+var task = "task";
+var listener = "listener";
+var completed = "completed";
+var cancelled = "cancelled";
+var taskCancelled = `task-${cancelled}`;
+var taskCompleted = `task-${completed}`;
+var listenerCancelled = `${listener}-${cancelled}`;
+var listenerCompleted = `${listener}-${completed}`;
+var TaskAbortError = class {
+  constructor(code) {
+    this.code = code;
+    this.message = `${task} ${cancelled} (reason: ${code})`;
+  }
+  name = "TaskAbortError";
+  message;
+};
+
+// src/listenerMiddleware/utils.ts
+var assertFunction = (func, expected) => {
+  if (typeof func !== "function") {
+    throw new TypeError(false ? _formatProdErrorMessage(32) : `${expected} is not a function`);
+  }
+};
+var noop2 = () => {
+};
+var catchRejection = (promise, onError = noop2) => {
+  promise.catch(onError);
+  return promise;
+};
+var addAbortSignalListener = (abortSignal, callback) => {
+  abortSignal.addEventListener("abort", callback, {
+    once: true
+  });
+  return () => abortSignal.removeEventListener("abort", callback);
+};
+var abortControllerWithReason = (abortController, reason) => {
+  const signal = abortController.signal;
+  if (signal.aborted) {
+    return;
+  }
+  if (!("reason" in signal)) {
+    Object.defineProperty(signal, "reason", {
+      enumerable: true,
+      value: reason,
+      configurable: true,
+      writable: true
+    });
+  }
+  ;
+  abortController.abort(reason);
+};
+
+// src/listenerMiddleware/task.ts
+var validateActive = (signal) => {
+  if (signal.aborted) {
+    const {
+      reason
+    } = signal;
+    throw new TaskAbortError(reason);
+  }
+};
+function raceWithSignal(signal, promise) {
+  let cleanup = noop2;
+  return new Promise((resolve, reject) => {
+    const notifyRejection = () => reject(new TaskAbortError(signal.reason));
+    if (signal.aborted) {
+      notifyRejection();
+      return;
+    }
+    cleanup = addAbortSignalListener(signal, notifyRejection);
+    promise.finally(() => cleanup()).then(resolve, reject);
+  }).finally(() => {
+    cleanup = noop2;
+  });
+}
+var runTask = async (task2, cleanUp) => {
+  try {
+    await Promise.resolve();
+    const value = await task2();
+    return {
+      status: "ok",
+      value
+    };
+  } catch (error) {
+    return {
+      status: error instanceof TaskAbortError ? "cancelled" : "rejected",
+      error
+    };
+  } finally {
+    cleanUp?.();
+  }
+};
+var createPause = (signal) => {
+  return (promise) => {
+    return catchRejection(raceWithSignal(signal, promise).then((output) => {
+      validateActive(signal);
+      return output;
+    }));
+  };
+};
+var createDelay = (signal) => {
+  const pause = createPause(signal);
+  return (timeoutMs) => {
+    return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)));
+  };
+};
+
+// src/listenerMiddleware/index.ts
+var {
+  assign
+} = Object;
+var INTERNAL_NIL_TOKEN = {};
+var alm = "listenerMiddleware";
+var createFork = (parentAbortSignal, parentBlockingPromises) => {
+  const linkControllers = (controller) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));
+  return (taskExecutor, opts) => {
+    assertFunction(taskExecutor, "taskExecutor");
+    const childAbortController = new AbortController();
+    linkControllers(childAbortController);
+    const result = runTask(async () => {
+      validateActive(parentAbortSignal);
+      validateActive(childAbortController.signal);
+      const result2 = await taskExecutor({
+        pause: createPause(childAbortController.signal),
+        delay: createDelay(childAbortController.signal),
+        signal: childAbortController.signal
+      });
+      validateActive(childAbortController.signal);
+      return result2;
+    }, () => abortControllerWithReason(childAbortController, taskCompleted));
+    if (opts?.autoJoin) {
+      parentBlockingPromises.push(result.catch(noop2));
+    }
+    return {
+      result: createPause(parentAbortSignal)(result),
+      cancel() {
+        abortControllerWithReason(childAbortController, taskCancelled);
+      }
+    };
+  };
+};
+var createTakePattern = (startListening, signal) => {
+  const take = async (predicate, timeout) => {
+    validateActive(signal);
+    let unsubscribe = () => {
+    };
+    const tuplePromise = new Promise((resolve, reject) => {
+      let stopListening = startListening({
+        predicate,
+        effect: (action, listenerApi) => {
+          listenerApi.unsubscribe();
+          resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);
+        }
+      });
+      unsubscribe = () => {
+        stopListening();
+        reject();
+      };
+    });
+    const promises = [tuplePromise];
+    if (timeout != null) {
+      promises.push(new Promise((resolve) => setTimeout(resolve, timeout, null)));
+    }
+    try {
+      const output = await raceWithSignal(signal, Promise.race(promises));
+      validateActive(signal);
+      return output;
+    } finally {
+      unsubscribe();
+    }
+  };
+  return (predicate, timeout) => catchRejection(take(predicate, timeout));
+};
+var getListenerEntryPropsFrom = (options) => {
+  let {
+    type,
+    actionCreator,
+    matcher,
+    predicate,
+    effect
+  } = options;
+  if (type) {
+    predicate = createAction(type).match;
+  } else if (actionCreator) {
+    type = actionCreator.type;
+    predicate = actionCreator.match;
+  } else if (matcher) {
+    predicate = matcher;
+  } else if (predicate) {
+  } else {
+    throw new Error(false ? _formatProdErrorMessage(21) : "Creating or removing a listener requires one of the known fields for matching an action");
+  }
+  assertFunction(effect, "options.listener");
+  return {
+    predicate,
+    type,
+    effect
+  };
+};
+var createListenerEntry = /* @__PURE__ */ assign((options) => {
+  const {
+    type,
+    predicate,
+    effect
+  } = getListenerEntryPropsFrom(options);
+  const entry = {
+    id: nanoid(),
+    effect,
+    type,
+    predicate,
+    pending: /* @__PURE__ */ new Set(),
+    unsubscribe: () => {
+      throw new Error(false ? _formatProdErrorMessage2(22) : "Unsubscribe not initialized");
+    }
+  };
+  return entry;
+}, {
+  withTypes: () => createListenerEntry
+});
+var findListenerEntry = (listenerMap, options) => {
+  const {
+    type,
+    effect,
+    predicate
+  } = getListenerEntryPropsFrom(options);
+  return Array.from(listenerMap.values()).find((entry) => {
+    const matchPredicateOrType = typeof type === "string" ? entry.type === type : entry.predicate === predicate;
+    return matchPredicateOrType && entry.effect === effect;
+  });
+};
+var cancelActiveListeners = (entry) => {
+  entry.pending.forEach((controller) => {
+    abortControllerWithReason(controller, listenerCancelled);
+  });
+};
+var createClearListenerMiddleware = (listenerMap) => {
+  return () => {
+    listenerMap.forEach(cancelActiveListeners);
+    listenerMap.clear();
+  };
+};
+var safelyNotifyError = (errorHandler, errorToNotify, errorInfo) => {
+  try {
+    errorHandler(errorToNotify, errorInfo);
+  } catch (errorHandlerError) {
+    setTimeout(() => {
+      throw errorHandlerError;
+    }, 0);
+  }
+};
+var addListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/add`), {
+  withTypes: () => addListener
+});
+var clearAllListeners = /* @__PURE__ */ createAction(`${alm}/removeAll`);
+var removeListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/remove`), {
+  withTypes: () => removeListener
+});
+var defaultErrorHandler = (...args) => {
+  console.error(`${alm}/error`, ...args);
+};
+var createListenerMiddleware = (middlewareOptions = {}) => {
+  const listenerMap = /* @__PURE__ */ new Map();
+  const {
+    extra,
+    onError = defaultErrorHandler
+  } = middlewareOptions;
+  assertFunction(onError, "onError");
+  const insertEntry = (entry) => {
+    entry.unsubscribe = () => listenerMap.delete(entry.id);
+    listenerMap.set(entry.id, entry);
+    return (cancelOptions) => {
+      entry.unsubscribe();
+      if (cancelOptions?.cancelActive) {
+        cancelActiveListeners(entry);
+      }
+    };
+  };
+  const startListening = (options) => {
+    const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options);
+    return insertEntry(entry);
+  };
+  assign(startListening, {
+    withTypes: () => startListening
+  });
+  const stopListening = (options) => {
+    const entry = findListenerEntry(listenerMap, options);
+    if (entry) {
+      entry.unsubscribe();
+      if (options.cancelActive) {
+        cancelActiveListeners(entry);
+      }
+    }
+    return !!entry;
+  };
+  assign(stopListening, {
+    withTypes: () => stopListening
+  });
+  const notifyListener = async (entry, action, api, getOriginalState) => {
+    const internalTaskController = new AbortController();
+    const take = createTakePattern(startListening, internalTaskController.signal);
+    const autoJoinPromises = [];
+    try {
+      entry.pending.add(internalTaskController);
+      await Promise.resolve(entry.effect(
+        action,
+        // Use assign() rather than ... to avoid extra helper functions added to bundle
+        assign({}, api, {
+          getOriginalState,
+          condition: (predicate, timeout) => take(predicate, timeout).then(Boolean),
+          take,
+          delay: createDelay(internalTaskController.signal),
+          pause: createPause(internalTaskController.signal),
+          extra,
+          signal: internalTaskController.signal,
+          fork: createFork(internalTaskController.signal, autoJoinPromises),
+          unsubscribe: entry.unsubscribe,
+          subscribe: () => {
+            listenerMap.set(entry.id, entry);
+          },
+          cancelActiveListeners: () => {
+            entry.pending.forEach((controller, _, set) => {
+              if (controller !== internalTaskController) {
+                abortControllerWithReason(controller, listenerCancelled);
+                set.delete(controller);
+              }
+            });
+          },
+          cancel: () => {
+            abortControllerWithReason(internalTaskController, listenerCancelled);
+            entry.pending.delete(internalTaskController);
+          },
+          throwIfCancelled: () => {
+            validateActive(internalTaskController.signal);
+          }
+        })
+      ));
+    } catch (listenerError) {
+      if (!(listenerError instanceof TaskAbortError)) {
+        safelyNotifyError(onError, listenerError, {
+          raisedBy: "effect"
+        });
+      }
+    } finally {
+      await Promise.all(autoJoinPromises);
+      abortControllerWithReason(internalTaskController, listenerCompleted);
+      entry.pending.delete(internalTaskController);
+    }
+  };
+  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);
+  const middleware = (api) => (next) => (action) => {
+    if (!(0, import_redux5.isAction)(action)) {
+      return next(action);
+    }
+    if (addListener.match(action)) {
+      return startListening(action.payload);
+    }
+    if (clearAllListeners.match(action)) {
+      clearListenerMiddleware();
+      return;
+    }
+    if (removeListener.match(action)) {
+      return stopListening(action.payload);
+    }
+    let originalState = api.getState();
+    const getOriginalState = () => {
+      if (originalState === INTERNAL_NIL_TOKEN) {
+        throw new Error(false ? _formatProdErrorMessage3(23) : `${alm}: getOriginalState can only be called synchronously`);
+      }
+      return originalState;
+    };
+    let result;
+    try {
+      result = next(action);
+      if (listenerMap.size > 0) {
+        const currentState = api.getState();
+        const listenerEntries = Array.from(listenerMap.values());
+        for (const entry of listenerEntries) {
+          let runListener = false;
+          try {
+            runListener = entry.predicate(action, currentState, originalState);
+          } catch (predicateError) {
+            runListener = false;
+            safelyNotifyError(onError, predicateError, {
+              raisedBy: "predicate"
+            });
+          }
+          if (!runListener) {
+            continue;
+          }
+          notifyListener(entry, action, api, getOriginalState);
+        }
+      }
+    } finally {
+      originalState = INTERNAL_NIL_TOKEN;
+    }
+    return result;
+  };
+  return {
+    middleware,
+    startListening,
+    stopListening,
+    clearListeners: clearListenerMiddleware
+  };
+};
+
+// src/dynamicMiddleware/index.ts
+var import_redux6 = require("redux");
+var createMiddlewareEntry = (middleware) => ({
+  middleware,
+  applied: /* @__PURE__ */ new Map()
+});
+var matchInstance = (instanceId) => (action) => action?.meta?.instanceId === instanceId;
+var createDynamicMiddleware = () => {
+  const instanceId = nanoid();
+  const middlewareMap = /* @__PURE__ */ new Map();
+  const withMiddleware = Object.assign(createAction("dynamicMiddleware/add", (...middlewares) => ({
+    payload: middlewares,
+    meta: {
+      instanceId
+    }
+  })), {
+    withTypes: () => withMiddleware
+  });
+  const addMiddleware = Object.assign(function addMiddleware2(...middlewares) {
+    middlewares.forEach((middleware2) => {
+      getOrInsertComputed(middlewareMap, middleware2, createMiddlewareEntry);
+    });
+  }, {
+    withTypes: () => addMiddleware
+  });
+  const getFinalMiddleware = (api) => {
+    const appliedMiddleware = Array.from(middlewareMap.values()).map((entry) => getOrInsertComputed(entry.applied, api, entry.middleware));
+    return (0, import_redux6.compose)(...appliedMiddleware);
+  };
+  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));
+  const middleware = (api) => (next) => (action) => {
+    if (isWithMiddleware(action)) {
+      addMiddleware(...action.payload);
+      return api.dispatch;
+    }
+    return getFinalMiddleware(api)(next)(action);
+  };
+  return {
+    middleware,
+    addMiddleware,
+    withMiddleware,
+    instanceId
+  };
+};
+
+// src/combineSlices.ts
+var import_redux7 = require("redux");
+var isSliceLike = (maybeSliceLike) => "reducerPath" in maybeSliceLike && typeof maybeSliceLike.reducerPath === "string";
+var getReducers = (slices) => slices.flatMap((sliceOrMap) => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer]] : Object.entries(sliceOrMap));
+var ORIGINAL_STATE = Symbol.for("rtk-state-proxy-original");
+var isStateProxy = (value) => !!value && !!value[ORIGINAL_STATE];
+var stateProxyMap = /* @__PURE__ */ new WeakMap();
+var createStateProxy = (state, reducerMap, initialStateCache) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {
+  get: (target, prop, receiver) => {
+    if (prop === ORIGINAL_STATE) return target;
+    const result = Reflect.get(target, prop, receiver);
+    if (typeof result === "undefined") {
+      const cached = initialStateCache[prop];
+      if (typeof cached !== "undefined") return cached;
+      const reducer = reducerMap[prop];
+      if (reducer) {
+        const reducerResult = reducer(void 0, {
+          type: nanoid()
+        });
+        if (typeof reducerResult === "undefined") {
+          throw new Error(false ? _formatProdErrorMessage(24) : `The slice reducer for key "${prop.toString()}" returned undefined when called for selector(). If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);
+        }
+        initialStateCache[prop] = reducerResult;
+        return reducerResult;
+      }
+    }
+    return result;
+  }
+}));
+var original = (state) => {
+  if (!isStateProxy(state)) {
+    throw new Error(false ? _formatProdErrorMessage2(25) : "original must be used on state Proxy");
+  }
+  return state[ORIGINAL_STATE];
+};
+var emptyObject = {};
+var noopReducer = (state = emptyObject) => state;
+function combineSlices(...slices) {
+  const reducerMap = Object.fromEntries(getReducers(slices));
+  const getReducer = () => Object.keys(reducerMap).length ? (0, import_redux7.combineReducers)(reducerMap) : noopReducer;
+  let reducer = getReducer();
+  function combinedReducer(state, action) {
+    return reducer(state, action);
+  }
+  combinedReducer.withLazyLoadedSlices = () => combinedReducer;
+  const initialStateCache = {};
+  const inject = (slice, config = {}) => {
+    const {
+      reducerPath,
+      reducer: reducerToInject
+    } = slice;
+    const currentReducer = reducerMap[reducerPath];
+    if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {
+      if (typeof process !== "undefined" && true) {
+        console.error(`called \`inject\` to override already-existing reducer ${reducerPath} without specifying \`overrideExisting: true\``);
+      }
+      return combinedReducer;
+    }
+    if (config.overrideExisting && currentReducer !== reducerToInject) {
+      delete initialStateCache[reducerPath];
+    }
+    reducerMap[reducerPath] = reducerToInject;
+    reducer = getReducer();
+    return combinedReducer;
+  };
+  const selector = Object.assign(function makeSelector(selectorFn, selectState) {
+    return function selector2(state, ...args) {
+      return selectorFn(createStateProxy(selectState ? selectState(state, ...args) : state, reducerMap, initialStateCache), ...args);
+    };
+  }, {
+    original
+  });
+  return Object.assign(combinedReducer, {
+    inject,
+    selector
+  });
+}
+
+// src/formatProdErrorMessage.ts
+function formatProdErrorMessage(code) {
+  return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  ReducerType,
+  SHOULD_AUTOBATCH,
+  TaskAbortError,
+  Tuple,
+  addListener,
+  asyncThunkCreator,
+  autoBatchEnhancer,
+  buildCreateSlice,
+  clearAllListeners,
+  combineSlices,
+  configureStore,
+  createAction,
+  createActionCreatorInvariantMiddleware,
+  createAsyncThunk,
+  createDraftSafeSelector,
+  createDraftSafeSelectorCreator,
+  createDynamicMiddleware,
+  createEntityAdapter,
+  createImmutableStateInvariantMiddleware,
+  createListenerMiddleware,
+  createNextState,
+  createReducer,
+  createSelector,
+  createSelectorCreator,
+  createSerializableStateInvariantMiddleware,
+  createSlice,
+  current,
+  findNonSerializableValue,
+  formatProdErrorMessage,
+  freeze,
+  isActionCreator,
+  isAllOf,
+  isAnyOf,
+  isAsyncThunkAction,
+  isDraft,
+  isFluxStandardAction,
+  isFulfilled,
+  isImmutableDefault,
+  isPending,
+  isPlain,
+  isRejected,
+  isRejectedWithValue,
+  lruMemoize,
+  miniSerializeError,
+  nanoid,
+  original,
+  prepareAutoBatched,
+  removeListener,
+  unwrapResult,
+  weakMapMemoize,
+  ...require("redux")
+});
+//# sourceMappingURL=redux-toolkit.development.cjs.map
Index: node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.development.cjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/index.ts","../../src/createDraftSafeSelector.ts","../../src/configureStore.ts","../../src/devtoolsExtension.ts","../../src/getDefaultMiddleware.ts","../../src/createAction.ts","../../src/tsHelpers.ts","../../src/actionCreatorInvariantMiddleware.ts","../../src/utils.ts","../../src/immutableStateInvariantMiddleware.ts","../../src/serializableStateInvariantMiddleware.ts","../../src/autoBatchEnhancer.ts","../../src/getDefaultEnhancers.ts","../../src/createReducer.ts","../../src/mapBuilders.ts","../../src/matchers.ts","../../src/nanoid.ts","../../src/createAsyncThunk.ts","../../src/createSlice.ts","../../src/entities/entity_state.ts","../../src/entities/state_selectors.ts","../../src/entities/state_adapter.ts","../../src/entities/utils.ts","../../src/entities/unsorted_state_adapter.ts","../../src/entities/sorted_state_adapter.ts","../../src/entities/create_adapter.ts","../../src/listenerMiddleware/index.ts","../../src/listenerMiddleware/exceptions.ts","../../src/listenerMiddleware/utils.ts","../../src/listenerMiddleware/task.ts","../../src/dynamicMiddleware/index.ts","../../src/combineSlices.ts","../../src/formatProdErrorMessage.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from './formatProdErrorMessage';\nexport * from 'redux';\nexport { produce as createNextState, current, freeze, original, isDraft } from 'immer';\nexport type { Draft } from 'immer';\nexport { createSelector, createSelectorCreator, lruMemoize, weakMapMemoize } from 'reselect';\nexport type { Selector, OutputSelector } from 'reselect';\nexport { createDraftSafeSelector, createDraftSafeSelectorCreator } from './createDraftSafeSelector';\nexport type { ThunkAction, ThunkDispatch, ThunkMiddleware } from 'redux-thunk';\nexport {\n// js\nconfigureStore } from './configureStore';\nexport type {\n// types\nConfigureStoreOptions, EnhancedStore } from './configureStore';\nexport type { DevToolsEnhancerOptions } from './devtoolsExtension';\nexport {\n// js\ncreateAction, isActionCreator, isFSA as isFluxStandardAction } from './createAction';\nexport type {\n// types\nPayloadAction, PayloadActionCreator, ActionCreatorWithNonInferrablePayload, ActionCreatorWithOptionalPayload, ActionCreatorWithPayload, ActionCreatorWithoutPayload, ActionCreatorWithPreparedPayload, PrepareAction } from './createAction';\nexport {\n// js\ncreateReducer } from './createReducer';\nexport type {\n// types\nActions, CaseReducer, CaseReducers } from './createReducer';\nexport {\n// js\ncreateSlice, buildCreateSlice, asyncThunkCreator, ReducerType } from './createSlice';\nexport type {\n// types\nCreateSliceOptions, Slice, CaseReducerActions, SliceCaseReducers, ValidateSliceCaseReducers, CaseReducerWithPrepare, ReducerCreators, SliceSelectors } from './createSlice';\nexport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nexport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nexport {\n// js\ncreateImmutableStateInvariantMiddleware, isImmutableDefault } from './immutableStateInvariantMiddleware';\nexport type {\n// types\nImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\nexport {\n// js\ncreateSerializableStateInvariantMiddleware, findNonSerializableValue, isPlain } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nSerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nActionReducerMapBuilder } from './mapBuilders';\nexport { Tuple } from './utils';\nexport { createEntityAdapter } from './entities/create_adapter';\nexport type { EntityState, EntityAdapter, EntitySelectors, EntityStateAdapter, EntityId, Update, IdSelector, Comparer } from './entities/models';\nexport { createAsyncThunk, unwrapResult, miniSerializeError } from './createAsyncThunk';\nexport type { AsyncThunk, AsyncThunkOptions, AsyncThunkAction, AsyncThunkPayloadCreatorReturnValue, AsyncThunkPayloadCreator, GetState, GetThunkAPI, SerializedError, CreateAsyncThunkFunction } from './createAsyncThunk';\nexport {\n// js\nisAllOf, isAnyOf, isPending, isRejected, isFulfilled, isAsyncThunkAction, isRejectedWithValue } from './matchers';\nexport type {\n// types\nActionMatchingAllOf, ActionMatchingAnyOf } from './matchers';\nexport { nanoid } from './nanoid';\nexport type { ListenerEffect, ListenerMiddleware, ListenerEffectAPI, ListenerMiddlewareInstance, CreateListenerMiddlewareOptions, ListenerErrorHandler, TypedStartListening, TypedAddListener, TypedStopListening, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions, ForkedTaskExecutor, ForkedTask, ForkedTaskAPI, AsyncTaskExecutor, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult } from './listenerMiddleware/index';\nexport type { AnyListenerPredicate } from './listenerMiddleware/types';\nexport { createListenerMiddleware, addListener, removeListener, clearAllListeners, TaskAbortError } from './listenerMiddleware/index';\nexport type { AddMiddleware, DynamicDispatch, DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './dynamicMiddleware/types';\nexport { createDynamicMiddleware } from './dynamicMiddleware/index';\nexport { SHOULD_AUTOBATCH, prepareAutoBatched, autoBatchEnhancer } from './autoBatchEnhancer';\nexport type { AutoBatchOptions } from './autoBatchEnhancer';\nexport { combineSlices } from './combineSlices';\nexport type { CombinedSliceReducer, WithSlice } from './combineSlices';\nexport type { ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions, SafePromise } from './tsHelpers';\nexport { formatProdErrorMessage } from './formatProdErrorMessage';","import { current, isDraft } from 'immer';\nimport { createSelectorCreator, weakMapMemoize } from 'reselect';\nexport const createDraftSafeSelectorCreator: typeof createSelectorCreator = (...args: unknown[]) => {\n  const createSelector = (createSelectorCreator as any)(...args);\n  const createDraftSafeSelector = Object.assign((...args: unknown[]) => {\n    const selector = createSelector(...args);\n    const wrappedSelector = (value: unknown, ...rest: unknown[]) => selector(isDraft(value) ? current(value) : value, ...rest);\n    Object.assign(wrappedSelector, selector);\n    return wrappedSelector as any;\n  }, {\n    withTypes: () => createDraftSafeSelector\n  });\n  return createDraftSafeSelector;\n};\n\n/**\n * \"Draft-Safe\" version of `reselect`'s `createSelector`:\n * If an `immer`-drafted object is passed into the resulting selector's first argument,\n * the selector will act on the current draft value, instead of returning a cached value\n * that might be possibly outdated if the draft has been modified since.\n * @public\n */\nexport const createDraftSafeSelector = /* @__PURE__ */\ncreateDraftSafeSelectorCreator(weakMapMemoize);","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Reducer, ReducersMapObject, Middleware, Action, StoreEnhancer, Store, UnknownAction } from 'redux';\nimport { applyMiddleware, createStore, compose, combineReducers, isPlainObject } from 'redux';\nimport type { DevToolsEnhancerOptions as DevToolsOptions } from './devtoolsExtension';\nimport { composeWithDevTools } from './devtoolsExtension';\nimport type { ThunkMiddlewareFor, GetDefaultMiddleware } from './getDefaultMiddleware';\nimport { buildGetDefaultMiddleware } from './getDefaultMiddleware';\nimport type { ExtractDispatchExtensions, ExtractStoreExtensions, ExtractStateExtensions, UnknownIfNonSpecific } from './tsHelpers';\nimport type { Tuple } from './utils';\nimport type { GetDefaultEnhancers } from './getDefaultEnhancers';\nimport { buildGetDefaultEnhancers } from './getDefaultEnhancers';\n\n/**\n * Options for `configureStore()`.\n *\n * @public\n */\nexport interface ConfigureStoreOptions<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<Middlewares<S>>, E extends Tuple<Enhancers> = Tuple<Enhancers>, P = S> {\n  /**\n   * A single reducer function that will be used as the root reducer, or an\n   * object of slice reducers that will be passed to `combineReducers()`.\n   */\n  reducer: Reducer<S, A, P> | ReducersMapObject<S, A, P>;\n\n  /**\n   * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.\n   * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.\n   *\n   * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`\n   * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage\n   */\n  middleware?: (getDefaultMiddleware: GetDefaultMiddleware<S>) => M;\n\n  /**\n   * Whether to enable Redux DevTools integration. Defaults to `true`.\n   *\n   * Additional configuration can be done by passing Redux DevTools options\n   */\n  devTools?: boolean | DevToolsOptions;\n\n  /**\n   * Whether to check for duplicate middleware instances. Defaults to `true`.\n   */\n  duplicateMiddlewareCheck?: boolean;\n\n  /**\n   * The initial state, same as Redux's createStore.\n   * You may optionally specify it to hydrate the state\n   * from the server in universal apps, or to restore a previously serialized\n   * user session. If you use `combineReducers()` to produce the root reducer\n   * function (either directly or indirectly by passing an object as `reducer`),\n   * this must be an object with the same shape as the reducer map keys.\n   */\n  // we infer here, and instead complain if the reducer doesn't match\n  preloadedState?: P;\n\n  /**\n   * The store enhancers to apply. See Redux's `createStore()`.\n   * All enhancers will be included before the DevTools Extension enhancer.\n   * If you need to customize the order of enhancers, supply a callback\n   * function that will receive a `getDefaultEnhancers` function that returns a Tuple,\n   * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).\n   * If you only need to add middleware, you can use the `middleware` parameter instead.\n   */\n  enhancers?: (getDefaultEnhancers: GetDefaultEnhancers<M>) => E;\n}\nexport type Middlewares<S> = ReadonlyArray<Middleware<{}, S>>;\ntype Enhancers = ReadonlyArray<StoreEnhancer>;\n\n/**\n * A Redux store returned by `configureStore()`. Supports dispatching\n * side-effectful _thunks_ in addition to plain actions.\n *\n * @public\n */\nexport type EnhancedStore<S = any, A extends Action = UnknownAction, E extends Enhancers = Enhancers> = ExtractStoreExtensions<E> & Store<S, A, UnknownIfNonSpecific<ExtractStateExtensions<E>>>;\n\n/**\n * A friendly abstraction over the standard Redux `createStore()` function.\n *\n * @param options The store configuration.\n * @returns A configured Redux store.\n *\n * @public\n */\nexport function configureStore<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<[ThunkMiddlewareFor<S>]>, E extends Tuple<Enhancers> = Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>, StoreEnhancer]>, P = S>(options: ConfigureStoreOptions<S, A, M, E, P>): EnhancedStore<S, A, E> {\n  const getDefaultMiddleware = buildGetDefaultMiddleware<S>();\n  const {\n    reducer = undefined,\n    middleware,\n    devTools = true,\n    duplicateMiddlewareCheck = true,\n    preloadedState = undefined,\n    enhancers = undefined\n  } = options || {};\n  let rootReducer: Reducer<S, A, P>;\n  if (typeof reducer === 'function') {\n    rootReducer = reducer;\n  } else if (isPlainObject(reducer)) {\n    rootReducer = combineReducers(reducer) as unknown as Reducer<S, A, P>;\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(1) : '`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\n  }\n  if (process.env.NODE_ENV !== 'production' && middleware && typeof middleware !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(2) : '`middleware` field must be a callback');\n  }\n  let finalMiddleware: Tuple<Middlewares<S>>;\n  if (typeof middleware === 'function') {\n    finalMiddleware = middleware(getDefaultMiddleware);\n    if (process.env.NODE_ENV !== 'production' && !Array.isArray(finalMiddleware)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(3) : 'when using a middleware builder function, an array of middleware must be returned');\n    }\n  } else {\n    finalMiddleware = getDefaultMiddleware();\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(4) : 'each middleware provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && duplicateMiddlewareCheck) {\n    let middlewareReferences = new Set<Middleware<any, S>>();\n    finalMiddleware.forEach(middleware => {\n      if (middlewareReferences.has(middleware)) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(42) : 'Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.');\n      }\n      middlewareReferences.add(middleware);\n    });\n  }\n  let finalCompose = compose;\n  if (devTools) {\n    finalCompose = composeWithDevTools({\n      // Enable capture of stack traces for dispatched Redux actions\n      trace: process.env.NODE_ENV !== 'production',\n      ...(typeof devTools === 'object' && devTools)\n    });\n  }\n  const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n  const getDefaultEnhancers = buildGetDefaultEnhancers<M>(middlewareEnhancer);\n  if (process.env.NODE_ENV !== 'production' && enhancers && typeof enhancers !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : '`enhancers` field must be a callback');\n  }\n  let storeEnhancers = typeof enhancers === 'function' ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n  if (process.env.NODE_ENV !== 'production' && !Array.isArray(storeEnhancers)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : '`enhancers` callback must return an array');\n  }\n  if (process.env.NODE_ENV !== 'production' && storeEnhancers.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : 'each enhancer provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n    console.error('middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`');\n  }\n  const composedEnhancer: StoreEnhancer<any> = finalCompose(...storeEnhancers);\n  return createStore(rootReducer, preloadedState as P, composedEnhancer);\n}","import type { Action, ActionCreator, StoreEnhancer } from 'redux';\nimport { compose } from 'redux';\n\n/**\r\n * @public\r\n */\nexport interface DevToolsEnhancerOptions {\n  /**\r\n   * the instance name to be showed on the monitor page. Default value is `document.title`.\r\n   * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.\r\n   */\n  name?: string;\n  /**\r\n   * action creators functions to be available in the Dispatcher.\r\n   */\n  actionCreators?: ActionCreator<any>[] | {\n    [key: string]: ActionCreator<any>;\n  };\n  /**\r\n   * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.\r\n   * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.\r\n   * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).\r\n   *\r\n   * @default 500 ms.\r\n   */\n  latency?: number;\n  /**\r\n   * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.\r\n   *\r\n   * @default 50\r\n   */\n  maxAge?: number;\n  /**\r\n   * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you\r\n   * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`\r\n   * functions.\r\n   */\n  serialize?: boolean | {\n    /**\r\n     * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).\r\n     * - `false` - will handle also circular references.\r\n     * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.\r\n     * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.\r\n     *   For each of them you can indicate if to include (by setting as `true`).\r\n     *   For `function` key you can also specify a custom function which handles serialization.\r\n     *   See [`jsan`](https://github.com/kolodny/jsan) for more details.\r\n     */\n    options?: undefined | boolean | {\n      date?: true;\n      regex?: true;\n      undefined?: true;\n      error?: true;\n      symbol?: true;\n      map?: true;\n      set?: true;\n      function?: true | ((fn: (...args: any[]) => any) => string);\n    };\n    /**\r\n     * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.\r\n     * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)\r\n     * key. So you can deserialize it back while importing or persisting data.\r\n     * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):\r\n     */\n    replacer?: (key: string, value: unknown) => any;\n    /**\r\n     * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)\r\n     * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)\r\n     * as an example on how to serialize special data types and get them back.\r\n     */\n    reviver?: (key: string, value: unknown) => any;\n    /**\r\n     * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).\r\n     * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.\r\n     * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.\r\n     */\n    immutable?: any;\n    /**\r\n     * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...\r\n     */\n    refs?: any;\n  };\n  /**\r\n   * function which takes `action` object and id number as arguments, and should return `action` object back.\r\n   */\n  actionSanitizer?: <A extends Action>(action: A, id: number) => A;\n  /**\r\n   * function which takes `state` object and index as arguments, and should return `state` object back.\r\n   */\n  stateSanitizer?: <S>(state: S, index: number) => S;\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsDenylist?: string | string[];\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsAllowlist?: string | string[];\n  /**\r\n   * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.\r\n   * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.\r\n   */\n  predicate?: <S, A extends Action>(state: S, action: A) => boolean;\n  /**\r\n   * if specified as `false`, it will not record the changes till clicking on `Start recording` button.\r\n   * Available only for Redux enhancer, for others use `autoPause`.\r\n   *\r\n   * @default true\r\n   */\n  shouldRecordChanges?: boolean;\n  /**\r\n   * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.\r\n   * If not specified, will commit when paused. Available only for Redux enhancer.\r\n   *\r\n   * @default \"@@PAUSED\"\"\r\n   */\n  pauseActionType?: string;\n  /**\r\n   * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\r\n   * Not available for Redux enhancer (as it already does it but storing the data to be sent).\r\n   *\r\n   * @default false\r\n   */\n  autoPause?: boolean;\n  /**\r\n   * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.\r\n   * Available only for Redux enhancer.\r\n   *\r\n   * @default false\r\n   */\n  shouldStartLocked?: boolean;\n  /**\r\n   * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.\r\n   *\r\n   * @default true\r\n   */\n  shouldHotReload?: boolean;\n  /**\r\n   * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.\r\n   *\r\n   * @default false\r\n   */\n  shouldCatchErrors?: boolean;\n  /**\r\n   * If you want to restrict the extension, specify the features you allow.\r\n   * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.\r\n   * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.\r\n   * Otherwise, you'll get/set the data right from the monitor part.\r\n   */\n  features?: {\n    /**\r\n     * start/pause recording of dispatched actions\r\n     */\n    pause?: boolean;\n    /**\r\n     * lock/unlock dispatching actions and side effects\r\n     */\n    lock?: boolean;\n    /**\r\n     * persist states on page reloading\r\n     */\n    persist?: boolean;\n    /**\r\n     * export history of actions in a file\r\n     */\n    export?: boolean | 'custom';\n    /**\r\n     * import history of actions from a file\r\n     */\n    import?: boolean | 'custom';\n    /**\r\n     * jump back and forth (time travelling)\r\n     */\n    jump?: boolean;\n    /**\r\n     * skip (cancel) actions\r\n     */\n    skip?: boolean;\n    /**\r\n     * drag and drop actions in the history list\r\n     */\n    reorder?: boolean;\n    /**\r\n     * dispatch custom actions or action creators\r\n     */\n    dispatch?: boolean;\n    /**\r\n     * generate tests for the selected actions\r\n     */\n    test?: boolean;\n  };\n  /**\r\n   * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.\r\n   * Defaults to false.\r\n   */\n  trace?: boolean | (<A extends Action>(action: A) => string);\n  /**\r\n   * The maximum number of stack trace entries to record per action. Defaults to 10.\r\n   */\n  traceLimit?: number;\n}\ntype Compose = typeof compose;\ninterface ComposeWithDevTools {\n  (options: DevToolsEnhancerOptions): Compose;\n  <StoreExt extends {}>(...funcs: StoreEnhancer<StoreExt>[]): StoreEnhancer<StoreExt>;\n}\n\n/**\r\n * @public\r\n */\nexport const composeWithDevTools: ComposeWithDevTools = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\n  if (arguments.length === 0) return undefined;\n  if (typeof arguments[0] === 'object') return compose;\n  return compose.apply(null, arguments as any as Function[]);\n};\n\n/**\r\n * @public\r\n */\nexport const devToolsEnhancer: {\n  (options: DevToolsEnhancerOptions): StoreEnhancer<any>;\n} = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION__ : function () {\n  return function (noop) {\n    return noop;\n  };\n};","import type { Middleware, UnknownAction } from 'redux';\nimport type { ThunkMiddleware } from 'redux-thunk';\nimport { thunk as thunkMiddleware, withExtraArgument } from 'redux-thunk';\nimport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nimport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nimport type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\n/* PROD_START_REMOVE_UMD */\nimport { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware';\n/* PROD_STOP_REMOVE_UMD */\n\nimport type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nimport { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware';\nimport type { ExcludeFromTuple } from './tsHelpers';\nimport { Tuple } from './utils';\nfunction isBoolean(x: any): x is boolean {\n  return typeof x === 'boolean';\n}\ninterface ThunkOptions<E = any> {\n  extraArgument: E;\n}\ninterface GetDefaultMiddlewareOptions {\n  thunk?: boolean | ThunkOptions;\n  immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions;\n  serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions;\n  actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions;\n}\nexport type ThunkMiddlewareFor<S, O extends GetDefaultMiddlewareOptions = {}> = O extends {\n  thunk: false;\n} ? never : O extends {\n  thunk: {\n    extraArgument: infer E;\n  };\n} ? ThunkMiddleware<S, UnknownAction, E> : ThunkMiddleware<S, UnknownAction>;\nexport type GetDefaultMiddleware<S = any> = <O extends GetDefaultMiddlewareOptions = {\n  thunk: true;\n  immutableCheck: true;\n  serializableCheck: true;\n  actionCreatorCheck: true;\n}>(options?: O) => Tuple<ExcludeFromTuple<[ThunkMiddlewareFor<S, O>], never>>;\nexport const buildGetDefaultMiddleware = <S = any,>(): GetDefaultMiddleware<S> => function getDefaultMiddleware(options) {\n  const {\n    thunk = true,\n    immutableCheck = true,\n    serializableCheck = true,\n    actionCreatorCheck = true\n  } = options ?? {};\n  let middlewareArray = new Tuple<Middleware[]>();\n  if (thunk) {\n    if (isBoolean(thunk)) {\n      middlewareArray.push(thunkMiddleware);\n    } else {\n      middlewareArray.push(withExtraArgument(thunk.extraArgument));\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (immutableCheck) {\n      /* PROD_START_REMOVE_UMD */\n      let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(immutableCheck)) {\n        immutableOptions = immutableCheck;\n      }\n      middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n      /* PROD_STOP_REMOVE_UMD */\n    }\n    if (serializableCheck) {\n      let serializableOptions: SerializableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(serializableCheck)) {\n        serializableOptions = serializableCheck;\n      }\n      middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n    }\n    if (actionCreatorCheck) {\n      let actionCreatorOptions: ActionCreatorInvariantMiddlewareOptions = {};\n      if (!isBoolean(actionCreatorCheck)) {\n        actionCreatorOptions = actionCreatorCheck;\n      }\n      middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n    }\n  }\n  return middlewareArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport { isAction } from 'redux';\nimport type { IsUnknownOrNonInferrable, IfMaybeUndefined, IfVoid, IsAny } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\n\n/**\n * An action with a string type and an associated payload. This is the\n * type of action returned by `createAction()` action creators.\n *\n * @template P The type of the action's payload.\n * @template T the type used for the action type.\n * @template M The type of the action's meta (optional)\n * @template E The type of the action's error (optional)\n *\n * @public\n */\nexport type PayloadAction<P = void, T extends string = string, M = never, E = never> = {\n  payload: P;\n  type: T;\n} & ([M] extends [never] ? {} : {\n  meta: M;\n}) & ([E] extends [never] ? {} : {\n  error: E;\n});\n\n/**\n * A \"prepare\" method to be used as the second parameter of `createAction`.\n * Takes any number of arguments and returns a Flux Standard Action without\n * type (will be added later) that *must* contain a payload (might be undefined).\n *\n * @public\n */\nexport type PrepareAction<P> = ((...args: any[]) => {\n  payload: P;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  error: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n  error: any;\n});\n\n/**\n * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.\n *\n * @internal\n */\nexport type _ActionCreatorWithPreparedPayload<PA extends PrepareAction<any> | void, T extends string = string> = PA extends PrepareAction<infer P> ? ActionCreatorWithPreparedPayload<Parameters<PA>, P, T, ReturnType<PA> extends {\n  error: infer E;\n} ? E : never, ReturnType<PA> extends {\n  meta: infer M;\n} ? M : never> : void;\n\n/**\n * Basic type for all action creators.\n *\n * @inheritdoc {redux#ActionCreator}\n */\nexport type BaseActionCreator<P, T extends string, M = never, E = never> = {\n  type: T;\n  match: (action: unknown) => action is PayloadAction<P, T, M, E>;\n};\n\n/**\n * An action creator that takes multiple arguments that are passed\n * to a `PrepareAction` method to create the final Action.\n * @typeParam Args arguments for the action creator function\n * @typeParam P `payload` type\n * @typeParam T `type` name\n * @typeParam E optional `error` type\n * @typeParam M optional `meta` type\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPreparedPayload<Args extends unknown[], P, T extends string = string, E = never, M = never> extends BaseActionCreator<P, T, M, E> {\n  /**\n   * Calling this {@link redux#ActionCreator} with `Args` will return\n   * an Action with a payload of type `P` and (depending on the `PrepareAction`\n   * method used) a `meta`- and `error` property of types `M` and `E` respectively.\n   */\n  (...args: Args): PayloadAction<P, T, M, E>;\n}\n\n/**\n * An action creator of type `T` that takes an optional payload of type `P`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithOptionalPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`.\n   * Calling it without an argument will return a PayloadAction with a payload of `undefined`.\n   */\n  (payload?: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` that takes no payload.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithoutPayload<T extends string = string> extends BaseActionCreator<undefined, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} will\n   * return a {@link PayloadAction} of type `T` with a payload of `undefined`\n   */\n  (noArgument: void): PayloadAction<undefined, T>;\n}\n\n/**\n * An action creator of type `T` that requires a payload of type P.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`\n   */\n  (payload: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithNonInferrablePayload<T extends string = string> extends BaseActionCreator<unknown, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload\n   * of exactly the type of the argument.\n   */\n  <PT extends unknown>(payload: PT): PayloadAction<PT, T>;\n}\n\n/**\n * An action creator that produces actions with a `payload` attribute.\n *\n * @typeParam P the `payload` type\n * @typeParam T the `type` of the resulting action\n * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.\n *\n * @public\n */\nexport type PayloadActionCreator<P = void, T extends string = string, PA extends PrepareAction<P> | void = void> = IfPrepareActionMethodProvided<PA, _ActionCreatorWithPreparedPayload<PA, T>,\n// else\nIsAny<P, ActionCreatorWithPayload<any, T>, IsUnknownOrNonInferrable<P, ActionCreatorWithNonInferrablePayload<T>,\n// else\nIfVoid<P, ActionCreatorWithoutPayload<T>,\n// else\nIfMaybeUndefined<P, ActionCreatorWithOptionalPayload<P, T>,\n// else\nActionCreatorWithPayload<P, T>>>>>>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<P = void, T extends string = string>(type: T): PayloadActionCreator<P, T>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<PA extends PrepareAction<any>, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>;\nexport function createAction(type: string, prepareAction?: Function): any {\n  function actionCreator(...args: any[]) {\n    if (prepareAction) {\n      let prepared = prepareAction(...args);\n      if (!prepared) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(0) : 'prepareAction did not return an object');\n      }\n      return {\n        type,\n        payload: prepared.payload,\n        ...('meta' in prepared && {\n          meta: prepared.meta\n        }),\n        ...('error' in prepared && {\n          error: prepared.error\n        })\n      };\n    }\n    return {\n      type,\n      payload: args[0]\n    };\n  }\n  actionCreator.toString = () => `${type}`;\n  actionCreator.type = type;\n  actionCreator.match = (action: unknown): action is PayloadAction => isAction(action) && action.type === type;\n  return actionCreator;\n}\n\n/**\n * Returns true if value is an RTK-like action creator, with a static type property and match method.\n */\nexport function isActionCreator(action: unknown): action is BaseActionCreator<unknown, string> & Function {\n  return typeof action === 'function' && 'type' in action &&\n  // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n  hasMatchFunction(action as any);\n}\n\n/**\n * Returns true if value is an action with a string type and valid Flux Standard Action keys.\n */\nexport function isFSA(action: unknown): action is {\n  type: string;\n  payload?: unknown;\n  error?: unknown;\n  meta?: unknown;\n} {\n  return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key: string) {\n  return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1;\n}\n\n// helper types for more readable typings\n\ntype IfPrepareActionMethodProvided<PA extends PrepareAction<any> | void, True, False> = PA extends ((...args: any[]) => any) ? True : False;","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { Middleware } from 'redux';\nimport { isActionCreator as isRTKAction } from './createAction';\nexport interface ActionCreatorInvariantMiddlewareOptions {\n  /**\n   * The function to identify whether a value is an action creator.\n   * The default checks for a function with a static type property and match method.\n   */\n  isActionCreator?: (action: unknown) => action is Function & {\n    type?: unknown;\n  };\n}\nexport function getMessage(type?: unknown) {\n  const splitType = type ? `${type}`.split('/') : [];\n  const actionName = splitType[splitType.length - 1] || 'actionCreator';\n  return `Detected an action creator with type \"${type || 'unknown'}\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nexport function createActionCreatorInvariantMiddleware(options: ActionCreatorInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  }\n  const {\n    isActionCreator = isRTKAction\n  } = options;\n  return () => next => action => {\n    if (isActionCreator(action)) {\n      console.warn(getMessage(action.type));\n    }\n    return next(action);\n  };\n}","import { produce as createNextState, isDraftable } from 'immer';\nexport function getTimeMeasureUtils(maxDelay: number, fnName: string) {\n  let elapsed = 0;\n  return {\n    measureTime<T>(fn: () => T): T {\n      const started = Date.now();\n      try {\n        return fn();\n      } finally {\n        const finished = Date.now();\n        elapsed += finished - started;\n      }\n    },\n    warnIfExceeded() {\n      if (elapsed > maxDelay) {\n        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n      }\n    }\n  };\n}\nexport function delay(ms: number) {\n  return new Promise(resolve => setTimeout(resolve, ms));\n}\nexport class Tuple<Items extends ReadonlyArray<unknown> = []> extends Array<Items[number]> {\n  constructor(length: number);\n  constructor(...items: Items);\n  constructor(...items: any[]) {\n    super(...items);\n    Object.setPrototypeOf(this, Tuple.prototype);\n  }\n  static override get [Symbol.species]() {\n    return Tuple as any;\n  }\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat(...arr: any[]) {\n    return super.concat.apply(this, arr);\n  }\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend(...arr: any[]) {\n    if (arr.length === 1 && Array.isArray(arr[0])) {\n      return new Tuple(...arr[0].concat(this));\n    }\n    return new Tuple(...arr.concat(this));\n  }\n}\nexport function freezeDraftable<T>(val: T) {\n  return isDraftable(val) ? createNextState(val, () => {}) : val;\n}\nexport function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}\nexport function getOrInsertComputed<K extends object, V>(map: WeakMap<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, compute: (key: K) => V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, compute(key)).get(key) as V;\n}\nexport function promiseWithResolvers<T>(): {\n  promise: Promise<T>;\n  resolve: (value: T | PromiseLike<T>) => void;\n  reject: (reason?: any) => void;\n} {\n  let resolve: any;\n  let reject: any;\n  const promise = new Promise<T>((res, rej) => {\n    resolve = res;\n    reject = rej;\n  });\n  return {\n    promise,\n    resolve,\n    reject\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Middleware } from 'redux';\nimport type { IgnorePaths } from './serializableStateInvariantMiddleware';\nimport { getTimeMeasureUtils } from './utils';\ntype EntryProcessor = (key: string, value: any) => any;\n\n/**\n * The default `isImmutable` function.\n *\n * @public\n */\nexport function isImmutableDefault(value: unknown): boolean {\n  return typeof value !== 'object' || value == null || Object.isFrozen(value);\n}\nexport function trackForMutations(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths | undefined, obj: any) {\n  const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\n  return {\n    detectMutations() {\n      return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\n    }\n  };\n}\ninterface TrackedProperty {\n  value: any;\n  children: Record<string, any>;\n}\nfunction trackProperties(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths = [], obj: Record<string, any>, path: string = '', checkedObjects: Set<Record<string, any>> = new Set()) {\n  const tracked: Partial<TrackedProperty> = {\n    value: obj\n  };\n  if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n    checkedObjects.add(obj);\n    tracked.children = {};\n    for (const key in obj) {\n      const childPath = path ? path + '.' + key : key;\n      if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\n        continue;\n      }\n      tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\n    }\n  }\n  return tracked as TrackedProperty;\n}\nfunction detectMutations(isImmutable: IsImmutableFunc, ignoredPaths: IgnorePaths = [], trackedProperty: TrackedProperty, obj: any, sameParentRef: boolean = false, path: string = ''): {\n  wasMutated: boolean;\n  path?: string;\n} {\n  const prevObj = trackedProperty ? trackedProperty.value : undefined;\n  const sameRef = prevObj === obj;\n  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n    return {\n      wasMutated: true,\n      path\n    };\n  }\n  if (isImmutable(prevObj) || isImmutable(obj)) {\n    return {\n      wasMutated: false\n    };\n  }\n\n  // Gather all keys from prev (tracked) and after objs\n  const keysToDetect: Record<string, boolean> = {};\n  for (let key in trackedProperty.children) {\n    keysToDetect[key] = true;\n  }\n  for (let key in obj) {\n    keysToDetect[key] = true;\n  }\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (let key in keysToDetect) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n    if (result.wasMutated) {\n      return result;\n    }\n  }\n  return {\n    wasMutated: false\n  };\n}\ntype IsImmutableFunc = (value: any) => boolean;\n\n/**\n * Options for `createImmutableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface ImmutableStateInvariantMiddlewareOptions {\n  /**\n    Callback function to check if a value is considered to be immutable.\n    This function is applied recursively to every value contained in the state.\n    The default implementation will return true for primitive types\n    (like numbers, strings, booleans, null and undefined).\n   */\n  isImmutable?: IsImmutableFunc;\n  /**\n    An array of dot-separated path strings that match named nodes from\n    the root state to ignore when checking for immutability.\n    Defaults to undefined\n   */\n  ignoredPaths?: IgnorePaths;\n  /** Print a warning if checks take longer than N ms. Default: 32ms */\n  warnAfter?: number;\n}\n\n/**\n * Creates a middleware that checks whether any state was mutated in between\n * dispatches or during a dispatch. If any mutations are detected, an error is\n * thrown.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createImmutableStateInvariantMiddleware(options: ImmutableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    function stringify(obj: any, serializer?: EntryProcessor, indent?: string | number, decycler?: EntryProcessor): string {\n      return JSON.stringify(obj, getSerialize(serializer, decycler), indent);\n    }\n    function getSerialize(serializer?: EntryProcessor, decycler?: EntryProcessor): EntryProcessor {\n      let stack: any[] = [],\n        keys: any[] = [];\n      if (!decycler) decycler = function (_: string, value: any) {\n        if (stack[0] === value) return '[Circular ~]';\n        return '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']';\n      };\n      return function (this: any, key: string, value: any) {\n        if (stack.length > 0) {\n          var thisPos = stack.indexOf(this);\n          ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n          ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n          if (~stack.indexOf(value)) value = decycler!.call(this, key, value);\n        } else stack.push(value);\n        return serializer == null ? value : serializer.call(this, key, value);\n      };\n    }\n    let {\n      isImmutable = isImmutableDefault,\n      ignoredPaths,\n      warnAfter = 32\n    } = options;\n    const track = trackForMutations.bind(null, isImmutable, ignoredPaths);\n    return ({\n      getState\n    }) => {\n      let state = getState();\n      let tracker = track(state);\n      let result;\n      return next => action => {\n        const measureUtils = getTimeMeasureUtils(warnAfter, 'ImmutableStateInvariantMiddleware');\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ''}'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        const dispatchedAction = next(action);\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ''}. Take a look at the reducer(s) handling the action ${stringify(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n        return dispatchedAction;\n      };\n    };\n  }\n}","import type { Middleware } from 'redux';\nimport { isAction, isPlainObject } from 'redux';\nimport { getTimeMeasureUtils } from './utils';\n\n/**\n * Returns true if the passed value is \"plain\", i.e. a value that is either\n * directly JSON-serializable (boolean, number, string, array, plain object)\n * or `undefined`.\n *\n * @param val The value to check.\n *\n * @public\n */\nexport function isPlain(val: any) {\n  const type = typeof val;\n  return val == null || type === 'string' || type === 'boolean' || type === 'number' || Array.isArray(val) || isPlainObject(val);\n}\ninterface NonSerializableValue {\n  keyPath: string;\n  value: unknown;\n}\nexport type IgnorePaths = readonly (string | RegExp)[];\n\n/**\n * @public\n */\nexport function findNonSerializableValue(value: unknown, path: string = '', isSerializable: (value: unknown) => boolean = isPlain, getEntries?: (value: unknown) => [string, any][], ignoredPaths: IgnorePaths = [], cache?: WeakSet<object>): NonSerializableValue | false {\n  let foundNestedSerializable: NonSerializableValue | false;\n  if (!isSerializable(value)) {\n    return {\n      keyPath: path || '<root>',\n      value: value\n    };\n  }\n  if (typeof value !== 'object' || value === null) {\n    return false;\n  }\n  if (cache?.has(value)) return false;\n  const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (const [key, nestedValue] of entries) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    if (!isSerializable(nestedValue)) {\n      return {\n        keyPath: nestedPath,\n        value: nestedValue\n      };\n    }\n    if (typeof nestedValue === 'object') {\n      foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n      if (foundNestedSerializable) {\n        return foundNestedSerializable;\n      }\n    }\n  }\n  if (cache && isNestedFrozen(value)) cache.add(value);\n  return false;\n}\nexport function isNestedFrozen(value: object) {\n  if (!Object.isFrozen(value)) return false;\n  for (const nestedValue of Object.values(value)) {\n    if (typeof nestedValue !== 'object' || nestedValue === null) continue;\n    if (!isNestedFrozen(nestedValue)) return false;\n  }\n  return true;\n}\n\n/**\n * Options for `createSerializableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface SerializableStateInvariantMiddlewareOptions {\n  /**\n   * The function to check if a value is considered serializable. This\n   * function is applied recursively to every value contained in the\n   * state. Defaults to `isPlain()`.\n   */\n  isSerializable?: (value: any) => boolean;\n  /**\n   * The function that will be used to retrieve entries from each\n   * value.  If unspecified, `Object.entries` will be used. Defaults\n   * to `undefined`.\n   */\n  getEntries?: (value: any) => [string, any][];\n\n  /**\n   * An array of action types to ignore when checking for serializability.\n   * Defaults to []\n   */\n  ignoredActions?: string[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to\n   * ['meta.arg', 'meta.baseQueryMeta']\n   */\n  ignoredActionPaths?: (string | RegExp)[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to []\n   */\n  ignoredPaths?: (string | RegExp)[];\n  /**\n   * Execution time warning threshold. If the middleware takes longer\n   * than `warnAfter` ms, a warning will be displayed in the console.\n   * Defaults to 32ms.\n   */\n  warnAfter?: number;\n\n  /**\n   * Opt out of checking state. When set to `true`, other state-related params will be ignored.\n   */\n  ignoreState?: boolean;\n\n  /**\n   * Opt out of checking actions. When set to `true`, other action-related params will be ignored.\n   */\n  ignoreActions?: boolean;\n\n  /**\n   * Opt out of caching the results. The cache uses a WeakSet and speeds up repeated checking processes.\n   * The cache is automatically disabled if no browser support for WeakSet is present.\n   */\n  disableCache?: boolean;\n}\n\n/**\n * Creates a middleware that, after every state change, checks if the new\n * state is serializable. If a non-serializable value is found within the\n * state, an error is printed to the console.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createSerializableStateInvariantMiddleware(options: SerializableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    const {\n      isSerializable = isPlain,\n      getEntries,\n      ignoredActions = [],\n      ignoredActionPaths = ['meta.arg', 'meta.baseQueryMeta'],\n      ignoredPaths = [],\n      warnAfter = 32,\n      ignoreState = false,\n      ignoreActions = false,\n      disableCache = false\n    } = options;\n    const cache: WeakSet<object> | undefined = !disableCache && WeakSet ? new WeakSet() : undefined;\n    return storeAPI => next => action => {\n      if (!isAction(action)) {\n        return next(action);\n      }\n      const result = next(action);\n      const measureUtils = getTimeMeasureUtils(warnAfter, 'SerializableStateInvariantMiddleware');\n      if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type as any) !== -1)) {\n        measureUtils.measureTime(() => {\n          const foundActionNonSerializableValue = findNonSerializableValue(action, '', isSerializable, getEntries, ignoredActionPaths, cache);\n          if (foundActionNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundActionNonSerializableValue;\n            console.error(`A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`, value, '\\nTake a look at the logic that dispatched this action: ', action, '\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)', '\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)');\n          }\n        });\n      }\n      if (!ignoreState) {\n        measureUtils.measureTime(() => {\n          const state = storeAPI.getState();\n          const foundStateNonSerializableValue = findNonSerializableValue(state, '', isSerializable, getEntries, ignoredPaths, cache);\n          if (foundStateNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundStateNonSerializableValue;\n            console.error(`A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`, value, `\nTake a look at the reducer(s) handling this action type: ${action.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n      }\n      return result;\n    };\n  }\n}","import type { StoreEnhancer } from 'redux';\nexport const SHOULD_AUTOBATCH = 'RTK_autoBatch';\nexport const prepareAutoBatched = <T,>() => (payload: T): {\n  payload: T;\n  meta: unknown;\n} => ({\n  payload,\n  meta: {\n    [SHOULD_AUTOBATCH]: true\n  }\n});\nconst createQueueWithTimer = (timeout: number) => {\n  return (notify: () => void) => {\n    setTimeout(notify, timeout);\n  };\n};\nexport type AutoBatchOptions = {\n  type: 'tick';\n} | {\n  type: 'timer';\n  timeout: number;\n} | {\n  type: 'raf';\n} | {\n  type: 'callback';\n  queueNotification: (notify: () => void) => void;\n};\n\n/**\n * A Redux store enhancer that watches for \"low-priority\" actions, and delays\n * notifying subscribers until either the queued callback executes or the\n * next \"standard-priority\" action is dispatched.\n *\n * This allows dispatching multiple \"low-priority\" actions in a row with only\n * a single subscriber notification to the UI after the sequence of actions\n * is finished, thus improving UI re-render performance.\n *\n * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.\n * This can be added to `action.meta` manually, or by using the\n * `prepareAutoBatched` helper.\n *\n * By default, it will queue a notification for the end of the event loop tick.\n * However, you can pass several other options to configure the behavior:\n * - `{type: 'tick'}`: queues using `queueMicrotask`\n * - `{type: 'timer', timeout: number}`: queues using `setTimeout`\n * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)\n * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback\n *\n *\n */\nexport const autoBatchEnhancer = (options: AutoBatchOptions = {\n  type: 'raf'\n}): StoreEnhancer => next => (...args) => {\n  const store = next(...args);\n  let notifying = true;\n  let shouldNotifyAtEndOfTick = false;\n  let notificationQueued = false;\n  const listeners = new Set<() => void>();\n  const queueCallback = options.type === 'tick' ? queueMicrotask : options.type === 'raf' ?\n  // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n  typeof window !== 'undefined' && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10) : options.type === 'callback' ? options.queueNotification : createQueueWithTimer(options.timeout);\n  const notifyListeners = () => {\n    // We're running at the end of the event loop tick.\n    // Run the real listener callbacks to actually update the UI.\n    notificationQueued = false;\n    if (shouldNotifyAtEndOfTick) {\n      shouldNotifyAtEndOfTick = false;\n      listeners.forEach(l => l());\n    }\n  };\n  return Object.assign({}, store, {\n    // Override the base `store.subscribe` method to keep original listeners\n    // from running if we're delaying notifications\n    subscribe(listener: () => void) {\n      // Each wrapped listener will only call the real listener if\n      // the `notifying` flag is currently active when it's called.\n      // This lets the base store work as normal, while the actual UI\n      // update becomes controlled by this enhancer.\n      const wrappedListener: typeof listener = () => notifying && listener();\n      const unsubscribe = store.subscribe(wrappedListener);\n      listeners.add(listener);\n      return () => {\n        unsubscribe();\n        listeners.delete(listener);\n      };\n    },\n    // Override the base `store.dispatch` method so that we can check actions\n    // for the `shouldAutoBatch` flag and determine if batching is active\n    dispatch(action: any) {\n      try {\n        // If the action does _not_ have the `shouldAutoBatch` flag,\n        // we resume/continue normal notify-after-each-dispatch behavior\n        notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n        // If a `notifyListeners` microtask was queued, you can't cancel it.\n        // Instead, we set a flag so that it's a no-op when it does run\n        shouldNotifyAtEndOfTick = !notifying;\n        if (shouldNotifyAtEndOfTick) {\n          // We've seen at least 1 action with `SHOULD_AUTOBATCH`. Try to queue\n          // a microtask to notify listeners at the end of the event loop tick.\n          // Make sure we only enqueue this _once_ per tick.\n          if (!notificationQueued) {\n            notificationQueued = true;\n            queueCallback(notifyListeners);\n          }\n        }\n        // Go ahead and process the action as usual, including reducers.\n        // If normal notification behavior is enabled, the store will notify\n        // all of its own listeners, and the wrapper callbacks above will\n        // see `notifying` is true and pass on to the real listener callbacks.\n        // If we're \"batching\" behavior, then the wrapped callbacks will\n        // bail out, causing the base store notification behavior to be no-ops.\n        return store.dispatch(action);\n      } finally {\n        // Assume we're back to normal behavior after each action\n        notifying = true;\n      }\n    }\n  });\n};","import type { StoreEnhancer } from 'redux';\nimport type { AutoBatchOptions } from './autoBatchEnhancer';\nimport { autoBatchEnhancer } from './autoBatchEnhancer';\nimport { Tuple } from './utils';\nimport type { Middlewares } from './configureStore';\nimport type { ExtractDispatchExtensions } from './tsHelpers';\ntype GetDefaultEnhancersOptions = {\n  autoBatch?: boolean | AutoBatchOptions;\n};\nexport type GetDefaultEnhancers<M extends Middlewares<any>> = (options?: GetDefaultEnhancersOptions) => Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>]>;\nexport const buildGetDefaultEnhancers = <M extends Middlewares<any>,>(middlewareEnhancer: StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>): GetDefaultEnhancers<M> => function getDefaultEnhancers(options) {\n  const {\n    autoBatch = true\n  } = options ?? {};\n  let enhancerArray = new Tuple<StoreEnhancer[]>(middlewareEnhancer);\n  if (autoBatch) {\n    enhancerArray.push(autoBatchEnhancer(typeof autoBatch === 'object' ? autoBatch : undefined));\n  }\n  return enhancerArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Draft } from 'immer';\nimport { produce as createNextState, isDraft, isDraftable } from 'immer';\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { ActionReducerMapBuilder } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { NoInfer, TypeGuard } from './tsHelpers';\nimport { freezeDraftable } from './utils';\n\n/**\n * Defines a mapping from action types to corresponding action object shapes.\n *\n * @deprecated This should not be used manually - it is only used for internal\n *             inference purposes and should not have any further value.\n *             It might be removed in the future.\n * @public\n */\nexport type Actions<T extends keyof any = string> = Record<T, Action>;\nexport type ActionMatcherDescription<S, A extends Action> = {\n  matcher: TypeGuard<A>;\n  reducer: CaseReducer<S, NoInfer<A>>;\n};\nexport type ReadonlyActionMatcherDescriptionCollection<S> = ReadonlyArray<ActionMatcherDescription<S, any>>;\nexport type ActionMatcherDescriptionCollection<S> = Array<ActionMatcherDescription<S, any>>;\n\n/**\n * A *case reducer* is a reducer function for a specific action type. Case\n * reducers can be composed to full reducers using `createReducer()`.\n *\n * Unlike a normal Redux reducer, a case reducer is never called with an\n * `undefined` state to determine the initial state. Instead, the initial\n * state is explicitly specified as an argument to `createReducer()`.\n *\n * In addition, a case reducer can choose to mutate the passed-in `state`\n * value directly instead of returning a new state. This does not actually\n * cause the store state to be mutated directly; instead, thanks to\n * [immer](https://github.com/mweststrate/immer), the mutations are\n * translated to copy operations that result in a new state.\n *\n * @public\n */\nexport type CaseReducer<S = any, A extends Action = UnknownAction> = (state: Draft<S>, action: A) => NoInfer<S> | void | Draft<NoInfer<S>>;\n\n/**\n * A mapping from action types to case reducers for `createReducer()`.\n *\n * @deprecated This should not be used manually - it is only used\n *             for internal inference purposes and using it manually\n *             would lead to type erasure.\n *             It might be removed in the future.\n * @public\n */\nexport type CaseReducers<S, AS extends Actions> = { [T in keyof AS]: AS[T] extends Action ? CaseReducer<S, AS[T]> : void };\nexport type NotFunction<T> = T extends Function ? never : T;\nfunction isStateFunction<S>(x: unknown): x is () => S {\n  return typeof x === 'function';\n}\nexport type ReducerWithInitialState<S extends NotFunction<any>> = Reducer<S> & {\n  getInitialState: () => S;\n};\n\n/**\n * A utility function that allows defining a reducer as a mapping from action\n * type to *case reducer* functions that handle these action types. The\n * reducer's initial state is passed as the first argument.\n *\n * @remarks\n * The body of every case reducer is implicitly wrapped with a call to\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\n * This means that rather than returning a new state object, you can also\n * mutate the passed-in state object directly; these mutations will then be\n * automatically and efficiently translated into copies, giving you both\n * convenience and immutability.\n *\n * @overloadSummary\n * This function accepts a callback that receives a `builder` object as its argument.\n * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be\n * called to define what actions this reducer will handle.\n *\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define\n *   case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n * @example\n```ts\nimport {\n  createAction,\n  createReducer,\n  UnknownAction,\n  PayloadAction,\n} from \"@reduxjs/toolkit\";\n\nconst increment = createAction<number>(\"increment\");\nconst decrement = createAction<number>(\"decrement\");\n\nfunction isActionWithNumberPayload(\n  action: UnknownAction\n): action is PayloadAction<number> {\n  return typeof action.payload === \"number\";\n}\n\nconst reducer = createReducer(\n  {\n    counter: 0,\n    sumOfNumberPayloads: 0,\n    unhandledActions: 0,\n  },\n  (builder) => {\n    builder\n      .addCase(increment, (state, action) => {\n        // action is inferred correctly here\n        state.counter += action.payload;\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {\n        state.counter -= action.payload;\n      })\n      // You can apply a \"matcher function\" to incoming actions\n      .addMatcher(isActionWithNumberPayload, (state, action) => {})\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {});\n  }\n);\n```\n * @public\n */\nexport function createReducer<S extends NotFunction<any>>(initialState: S | (() => S), mapOrBuilderCallback: (builder: ActionReducerMapBuilder<S>) => void): ReducerWithInitialState<S> {\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof mapOrBuilderCallback === 'object') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n    }\n  }\n  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n\n  // Ensure the initial state gets frozen either way (if draftable)\n  let getInitialState: () => S;\n  if (isStateFunction(initialState)) {\n    getInitialState = () => freezeDraftable(initialState());\n  } else {\n    const frozenInitialState = freezeDraftable(initialState);\n    getInitialState = () => frozenInitialState;\n  }\n  function reducer(state = getInitialState(), action: any): S {\n    let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n      matcher\n    }) => matcher(action)).map(({\n      reducer\n    }) => reducer)];\n    if (caseReducers.filter(cr => !!cr).length === 0) {\n      caseReducers = [finalDefaultCaseReducer];\n    }\n    return caseReducers.reduce((previousState, caseReducer): S => {\n      if (caseReducer) {\n        if (isDraft(previousState)) {\n          // If it's already a draft, we must already be inside a `createNextState` call,\n          // likely because this is being wrapped in `createReducer`, `createSlice`, or nested\n          // inside an existing draft. It's safe to just pass the draft to the mutator.\n          const draft = previousState as Draft<S>; // We can assume this is already a draft\n          const result = caseReducer(draft, action);\n          if (result === undefined) {\n            return previousState;\n          }\n          return result as S;\n        } else if (!isDraftable(previousState)) {\n          // If state is not draftable (ex: a primitive, such as 0), we want to directly\n          // return the caseReducer func and not wrap it with produce.\n          const result = caseReducer(previousState as any, action);\n          if (result === undefined) {\n            if (previousState === null) {\n              return previousState;\n            }\n            throw Error('A case reducer on a non-draftable value must not return undefined');\n          }\n          return result as S;\n        } else {\n          // @ts-ignore createNextState() produces an Immutable<Draft<S>> rather\n          // than an Immutable<S>, and TypeScript cannot find out how to reconcile\n          // these two types.\n          return createNextState(previousState, (draft: Draft<S>) => {\n            return caseReducer(draft, action);\n          });\n        }\n      }\n      return previousState;\n    }, state);\n  }\n  reducer.getInitialState = getInitialState;\n  return reducer as ReducerWithInitialState<S>;\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6 } from \"@reduxjs/toolkit\";\nimport type { Action } from 'redux';\nimport type { CaseReducer, CaseReducers, ActionMatcherDescriptionCollection } from './createReducer';\nimport type { TypeGuard } from './tsHelpers';\nexport type TypedActionCreator<Type extends string> = {\n  (...args: any[]): Action<Type>;\n  type: Type;\n};\n\n/**\n * A builder for an action <-> reducer map.\n *\n * @public\n */\nexport interface ActionReducerMapBuilder<State> {\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ActionReducerMapBuilder<State>;\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ActionReducerMapBuilder<State>;\n\n  /**\n   * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   * @example\n  ```ts\n  import {\n  createAction,\n  createReducer,\n  AsyncThunk,\n  UnknownAction,\n  } from \"@reduxjs/toolkit\";\n  type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;\n  type PendingAction = ReturnType<GenericAsyncThunk[\"pending\"]>;\n  type RejectedAction = ReturnType<GenericAsyncThunk[\"rejected\"]>;\n  type FulfilledAction = ReturnType<GenericAsyncThunk[\"fulfilled\"]>;\n  const initialState: Record<string, string> = {};\n  const resetAction = createAction(\"reset-tracked-loading-state\");\n  function isPendingAction(action: UnknownAction): action is PendingAction {\n  return typeof action.type === \"string\" && action.type.endsWith(\"/pending\");\n  }\n  const reducer = createReducer(initialState, (builder) => {\n  builder\n    .addCase(resetAction, () => initialState)\n    // matcher can be defined outside as a type predicate function\n    .addMatcher(isPendingAction, (state, action) => {\n      state[action.meta.requestId] = \"pending\";\n    })\n    .addMatcher(\n      // matcher can be defined inline as a type predicate function\n      (action): action is RejectedAction => action.type.endsWith(\"/rejected\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"rejected\";\n      }\n    )\n    // matcher can just return boolean and the matcher can receive a generic argument\n    .addMatcher<FulfilledAction>(\n      (action) => action.type.endsWith(\"/fulfilled\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"fulfilled\";\n      }\n    );\n  });\n  ```\n   */\n  addMatcher<A>(matcher: TypeGuard<A> | ((action: any) => boolean), reducer: CaseReducer<State, A extends Action ? A : A & Action>): Omit<ActionReducerMapBuilder<State>, 'addCase'>;\n\n  /**\n   * Adds a \"default case\" reducer that is executed if no case reducer and no matcher\n   * reducer was executed for this action.\n   * @param reducer - The fallback \"default case\" reducer function.\n   *\n   * @example\n  ```ts\n  import { createReducer } from '@reduxjs/toolkit'\n  const initialState = { otherActions: 0 }\n  const reducer = createReducer(initialState, builder => {\n  builder\n    // .addCase(...)\n    // .addMatcher(...)\n    .addDefaultCase((state, action) => {\n      state.otherActions++\n    })\n  })\n  ```\n   */\n  addDefaultCase(reducer: CaseReducer<State, Action>): {};\n}\nexport function executeReducerBuilderCallback<S>(builderCallback: (builder: ActionReducerMapBuilder<S>) => void): [CaseReducers<S, any>, ActionMatcherDescriptionCollection<S>, CaseReducer<S, Action> | undefined] {\n  const actionsMap: CaseReducers<S, any> = {};\n  const actionMatchers: ActionMatcherDescriptionCollection<S> = [];\n  let defaultCaseReducer: CaseReducer<S, Action> | undefined;\n  const builder = {\n    addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<S>) {\n      if (process.env.NODE_ENV !== 'production') {\n        /*\n         to keep the definition by the user in line with actual behavior,\n         we enforce `addCase` to always be called before calling `addMatcher`\n         as matching cases take precedence over matchers\n         */\n        if (actionMatchers.length > 0) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(26) : '`builder.addCase` should only be called before calling `builder.addMatcher`');\n        }\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(27) : '`builder.addCase` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n      if (!type) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(28) : '`builder.addCase` cannot be called with an empty action type');\n      }\n      if (type in actionsMap) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(29) : '`builder.addCase` cannot be called with two reducers for the same action type ' + `'${type}'`);\n      }\n      actionsMap[type] = reducer;\n      return builder;\n    },\n    addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<S, A extends Action ? A : A & Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(30) : '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      actionMatchers.push({\n        matcher,\n        reducer\n      });\n      return builder;\n    },\n    addDefaultCase(reducer: CaseReducer<S, Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(31) : '`builder.addDefaultCase` can only be called once');\n        }\n      }\n      defaultCaseReducer = reducer;\n      return builder;\n    }\n  };\n  builderCallback(builder);\n  return [actionsMap, actionMatchers, defaultCaseReducer];\n}","import type { ActionFromMatcher, Matcher, UnionToIntersection } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\nimport type { AsyncThunk, AsyncThunkFulfilledActionCreator, AsyncThunkPendingActionCreator, AsyncThunkRejectedActionCreator } from './createAsyncThunk';\n\n/** @public */\nexport type ActionMatchingAnyOf<Matchers extends Matcher<any>[]> = ActionFromMatcher<Matchers[number]>;\n\n/** @public */\nexport type ActionMatchingAllOf<Matchers extends Matcher<any>[]> = UnionToIntersection<ActionMatchingAnyOf<Matchers>>;\nconst matches = (matcher: Matcher<any>, action: any) => {\n  if (hasMatchFunction(matcher)) {\n    return matcher.match(action);\n  } else {\n    return matcher(action);\n  }\n};\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches any one of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAnyOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAnyOf<Matchers> => {\n    return matchers.some(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches all of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAllOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAllOf<Matchers> => {\n    return matchers.every(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * @param action A redux action\n * @param validStatus An array of valid meta.requestStatus values\n *\n * @internal\n */\nexport function hasExpectedRequestMetadata(action: any, validStatus: readonly string[]) {\n  if (!action || !action.meta) return false;\n  const hasValidRequestId = typeof action.meta.requestId === 'string';\n  const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n  return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a: [any] | AnyAsyncThunk[]): a is AnyAsyncThunk[] {\n  return typeof a[0] === 'function' && 'pending' in a[0] && 'fulfilled' in a[0] && 'rejected' in a[0];\n}\nexport type UnknownAsyncThunkPendingAction = ReturnType<AsyncThunkPendingActionCreator<unknown>>;\nexport type PendingActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is pending.\n *\n * @public\n */\nexport function isPending(): (action: any) => action is UnknownAsyncThunkPendingAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is pending.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is PendingActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a pending thunk action\n * @public\n */\nexport function isPending(action: any): action is UnknownAsyncThunkPendingAction;\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isPending()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.pending));\n}\nexport type UnknownAsyncThunkRejectedAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected.\n *\n * @public\n */\nexport function isRejected(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action\n * @public\n */\nexport function isRejected(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejected()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.rejected));\n}\nexport type UnknownAsyncThunkRejectedWithValueAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedWithValueActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']> & (T extends AsyncThunk<any, any, {\n  rejectValue: infer RejectedValue;\n}> ? {\n  payload: RejectedValue;\n} : unknown);\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected with value.\n *\n * @public\n */\nexport function isRejectedWithValue(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected with value.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedWithValueActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action with value\n * @public\n */\nexport function isRejectedWithValue(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  const hasFlag = (action: any): action is any => {\n    return action && action.meta && action.meta.rejectedWithValue;\n  };\n  if (asyncThunks.length === 0) {\n    return isAllOf(isRejected(...asyncThunks), hasFlag);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejectedWithValue()(asyncThunks[0]);\n  }\n  return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nexport type UnknownAsyncThunkFulfilledAction = ReturnType<AsyncThunkFulfilledActionCreator<unknown, unknown>>;\nexport type FulfilledActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['fulfilled']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is fulfilled.\n *\n * @public\n */\nexport function isFulfilled(): (action: any) => action is UnknownAsyncThunkFulfilledAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is fulfilled.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is FulfilledActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a fulfilled thunk action\n * @public\n */\nexport function isFulfilled(action: any): action is UnknownAsyncThunkFulfilledAction;\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['fulfilled']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isFulfilled()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.fulfilled));\n}\nexport type UnknownAsyncThunkAction = UnknownAsyncThunkPendingAction | UnknownAsyncThunkRejectedAction | UnknownAsyncThunkFulfilledAction;\nexport type AnyAsyncThunk = {\n  pending: {\n    match: (action: any) => action is any;\n  };\n  fulfilled: {\n    match: (action: any) => action is any;\n  };\n  rejected: {\n    match: (action: any) => action is any;\n  };\n};\nexport type ActionsFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']> | ActionFromMatcher<T['fulfilled']> | ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator.\n *\n * @public\n */\nexport function isAsyncThunkAction(): (action: any) => action is UnknownAsyncThunkAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is ActionsFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a thunk action\n * @public\n */\nexport function isAsyncThunkAction(action: any): action is UnknownAsyncThunkAction;\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending', 'fulfilled', 'rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isAsyncThunkAction()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.flatMap(asyncThunk => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}","// Borrowed from https://github.com/ai/nanoid/blob/3.0.2/non-secure/index.js\n// This alphabet uses `A-Za-z0-9_-` symbols. A genetic algorithm helped\n// optimize the gzip compression for this alphabet.\nlet urlAlphabet = 'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW';\n\n/**\r\n *\r\n * @public\r\n */\nexport let nanoid = (size = 21) => {\n  let id = '';\n  // A compact alternative for `for (var i = 0; i < step; i++)`.\n  let i = size;\n  while (i--) {\n    // `| 0` is more compact and faster than `Math.floor()`.\n    id += urlAlphabet[Math.random() * 64 | 0];\n  }\n  return id;\n};","import type { Dispatch, UnknownAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport type { ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport { isAnyOf } from './matchers';\nimport { nanoid } from './nanoid';\nimport type { FallbackIfUnknown, Id, IsAny, IsUnknown, SafePromise } from './tsHelpers';\nexport type BaseThunkAPI<S, E, D extends Dispatch = Dispatch, RejectedValue = unknown, RejectedMeta = unknown, FulfilledMeta = unknown> = {\n  dispatch: D;\n  getState: () => S;\n  extra: E;\n  requestId: string;\n  signal: AbortSignal;\n  abort: (reason?: string) => void;\n  rejectWithValue: IsUnknown<RejectedMeta, (value: RejectedValue) => RejectWithValue<RejectedValue, RejectedMeta>, (value: RejectedValue, meta: RejectedMeta) => RejectWithValue<RejectedValue, RejectedMeta>>;\n  fulfillWithValue: IsUnknown<FulfilledMeta, <FulfilledValue>(value: FulfilledValue) => FulfilledValue, <FulfilledValue>(value: FulfilledValue, meta: FulfilledMeta) => FulfillWithMeta<FulfilledValue, FulfilledMeta>>;\n};\n\n/**\n * @public\n */\nexport interface SerializedError {\n  name?: string;\n  message?: string;\n  stack?: string;\n  code?: string;\n}\nconst commonProperties: Array<keyof SerializedError> = ['name', 'message', 'stack', 'code'];\nclass RejectWithValue<Payload, RejectedMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'RejectWithValue';\n  constructor(public readonly payload: Payload, public readonly meta: RejectedMeta) {}\n}\nclass FulfillWithMeta<Payload, FulfilledMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'FulfillWithMeta';\n  constructor(public readonly payload: Payload, public readonly meta: FulfilledMeta) {}\n}\n\n/**\n * Serializes an error into a plain object.\n * Reworked from https://github.com/sindresorhus/serialize-error\n *\n * @public\n */\nexport const miniSerializeError = (value: any): SerializedError => {\n  if (typeof value === 'object' && value !== null) {\n    const simpleError: SerializedError = {};\n    for (const property of commonProperties) {\n      if (typeof value[property] === 'string') {\n        simpleError[property] = value[property];\n      }\n    }\n    return simpleError;\n  }\n  return {\n    message: String(value)\n  };\n};\nexport type AsyncThunkConfig = {\n  state?: unknown;\n  dispatch?: ThunkDispatch<unknown, unknown, UnknownAction>;\n  extra?: unknown;\n  rejectValue?: unknown;\n  serializedErrorType?: unknown;\n  pendingMeta?: unknown;\n  fulfilledMeta?: unknown;\n  rejectedMeta?: unknown;\n};\nexport type GetState<ThunkApiConfig> = ThunkApiConfig extends {\n  state: infer State;\n} ? State : unknown;\ntype GetExtra<ThunkApiConfig> = ThunkApiConfig extends {\n  extra: infer Extra;\n} ? Extra : unknown;\ntype GetDispatch<ThunkApiConfig> = ThunkApiConfig extends {\n  dispatch: infer Dispatch;\n} ? FallbackIfUnknown<Dispatch, ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>> : ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>;\nexport type GetThunkAPI<ThunkApiConfig> = BaseThunkAPI<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, GetDispatch<ThunkApiConfig>, GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>, GetFulfilledMeta<ThunkApiConfig>>;\ntype GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectValue: infer RejectValue;\n} ? RejectValue : unknown;\ntype GetPendingMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  pendingMeta: infer PendingMeta;\n} ? PendingMeta : unknown;\ntype GetFulfilledMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  fulfilledMeta: infer FulfilledMeta;\n} ? FulfilledMeta : unknown;\ntype GetRejectedMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectedMeta: infer RejectedMeta;\n} ? RejectedMeta : unknown;\ntype GetSerializedErrorType<ThunkApiConfig> = ThunkApiConfig extends {\n  serializedErrorType: infer GetSerializedErrorType;\n} ? GetSerializedErrorType : SerializedError;\ntype MaybePromise<T> = T | Promise<T> | (T extends any ? Promise<T> : never);\n\n/**\n * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig extends AsyncThunkConfig> = MaybePromise<IsUnknown<GetFulfilledMeta<ThunkApiConfig>, Returned, FulfillWithMeta<Returned, GetFulfilledMeta<ThunkApiConfig>>> | RejectWithValue<GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>>>;\n/**\n * A type describing the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreator<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>;\n\n/**\n * A ThunkAction created by `createAsyncThunk`.\n * Dispatching it returns a Promise for either a\n * fulfilled or rejected action.\n * Also, the returned value contains an `abort()` method\n * that allows the asyncAction to be cancelled from the outside.\n *\n * @public\n */\nexport type AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = (dispatch: NonNullable<GetDispatch<ThunkApiConfig>>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => SafePromise<ReturnType<AsyncThunkFulfilledActionCreator<Returned, ThunkArg>> | ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>>> & {\n  abort: (reason?: string) => void;\n  requestId: string;\n  arg: ThunkArg;\n  unwrap: () => Promise<Returned>;\n};\n\n/**\n * Config provided when calling the async thunk action creator.\n */\nexport interface AsyncThunkDispatchConfig {\n  /**\n   * An external `AbortSignal` that will be tracked by the internal `AbortSignal`.\n   */\n  signal?: AbortSignal;\n}\ntype AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = IsAny<ThunkArg,\n// any handling\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// unknown handling\nunknown extends ThunkArg ? (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument not specified or specified as void or undefined\n: [ThunkArg] extends [void] | [undefined] ? (arg?: undefined, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains void\n: [void] extends [ThunkArg] // make optional\n? (arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains undefined\n: [undefined] extends [ThunkArg] ? WithStrictNullChecks<\n// with strict nullChecks: make optional\n(arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// without strict null checks this will match everything, so don't make it optional\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>> // default case: normal argument\n: (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>>;\n\n/**\n * Options object for `createAsyncThunk`.\n *\n * @public\n */\nexport type AsyncThunkOptions<ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  /**\n   * A method to control whether the asyncThunk should be executed. Has access to the\n   * `arg`, `api.getState()` and `api.extra` arguments.\n   *\n   * @returns `false` if it should be skipped\n   */\n  condition?(arg: ThunkArg, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): MaybePromise<boolean | undefined>;\n  /**\n   * If `condition` returns `false`, the asyncThunk will be skipped.\n   * This option allows you to control whether a `rejected` action with `meta.condition == false`\n   * will be dispatched or not.\n   *\n   * @default `false`\n   */\n  dispatchConditionRejection?: boolean;\n  serializeError?: (x: unknown) => GetSerializedErrorType<ThunkApiConfig>;\n\n  /**\n   * A function to use when generating the `requestId` for the request sequence.\n   *\n   * @default `nanoid`\n   */\n  idGenerator?: (arg: ThunkArg) => string;\n} & IsUnknown<GetPendingMeta<ThunkApiConfig>, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   *\n   * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.\n   * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload\n   */\n  getPendingMeta?(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   */\n  getPendingMeta(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}>;\nexport type AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[string, ThunkArg, GetPendingMeta<ThunkApiConfig>?], undefined, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'pending';\n} & GetPendingMeta<ThunkApiConfig>>;\nexport type AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Error | null, string, ThunkArg, GetRejectValue<ThunkApiConfig>?, GetRejectedMeta<ThunkApiConfig>?], GetRejectValue<ThunkApiConfig> | undefined, string, GetSerializedErrorType<ThunkApiConfig>, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'rejected';\n  aborted: boolean;\n  condition: boolean;\n} & (({\n  rejectedWithValue: false;\n} & { [K in keyof GetRejectedMeta<ThunkApiConfig>]?: undefined }) | ({\n  rejectedWithValue: true;\n} & GetRejectedMeta<ThunkApiConfig>))>;\nexport type AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Returned, string, ThunkArg, GetFulfilledMeta<ThunkApiConfig>?], Returned, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'fulfilled';\n} & GetFulfilledMeta<ThunkApiConfig>>;\n\n/**\n * A type describing the return value of `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig> & {\n  pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig>;\n  rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>;\n  fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>;\n  // matchSettled?\n  settled: (action: any) => action is ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> | AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>>;\n  typePrefix: string;\n};\nexport type OverrideThunkApiConfigs<OldConfig, NewConfig> = Id<NewConfig & Omit<OldConfig, keyof NewConfig>>;\nexport type CreateAsyncThunkFunction<CurriedThunkApiConfig extends AsyncThunkConfig> = {\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  // separate signature without `AsyncThunkConfig` for better inference\n  <Returned, ThunkArg = void>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, CurriedThunkApiConfig>): AsyncThunk<Returned, ThunkArg, CurriedThunkApiConfig>;\n\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  <Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>, options?: AsyncThunkOptions<ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>): AsyncThunk<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\ntype CreateAsyncThunk<CurriedThunkApiConfig extends AsyncThunkConfig> = CreateAsyncThunkFunction<CurriedThunkApiConfig> & {\n  withTypes<ThunkApiConfig extends AsyncThunkConfig>(): CreateAsyncThunk<OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\nconst externalAbortMessage = 'External signal was aborted';\nexport const createAsyncThunk = /* @__PURE__ */(() => {\n  function createAsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> {\n    type RejectedValue = GetRejectValue<ThunkApiConfig>;\n    type PendingMeta = GetPendingMeta<ThunkApiConfig>;\n    type FulfilledMeta = GetFulfilledMeta<ThunkApiConfig>;\n    type RejectedMeta = GetRejectedMeta<ThunkApiConfig>;\n    const fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/fulfilled', (payload: Returned, requestId: string, arg: ThunkArg, meta?: FulfilledMeta) => ({\n      payload,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'fulfilled' as const\n      }\n    }));\n    const pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/pending', (requestId: string, arg: ThunkArg, meta?: PendingMeta) => ({\n      payload: undefined,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'pending' as const\n      }\n    }));\n    const rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/rejected', (error: Error | null, requestId: string, arg: ThunkArg, payload?: RejectedValue, meta?: RejectedMeta) => ({\n      payload,\n      error: (options && options.serializeError || miniSerializeError)(error || 'Rejected') as GetSerializedErrorType<ThunkApiConfig>,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        rejectedWithValue: !!payload,\n        requestStatus: 'rejected' as const,\n        aborted: error?.name === 'AbortError',\n        condition: error?.name === 'ConditionError'\n      }\n    }));\n    function actionCreator(arg: ThunkArg, {\n      signal\n    }: AsyncThunkDispatchConfig = {}): AsyncThunkAction<Returned, ThunkArg, Required<ThunkApiConfig>> {\n      return (dispatch, getState, extra) => {\n        const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n        const abortController = new AbortController();\n        let abortHandler: (() => void) | undefined;\n        let abortReason: string | undefined;\n        function abort(reason?: string) {\n          abortReason = reason;\n          abortController.abort();\n        }\n        if (signal) {\n          if (signal.aborted) {\n            abort(externalAbortMessage);\n          } else {\n            signal.addEventListener('abort', () => abort(externalAbortMessage), {\n              once: true\n            });\n          }\n        }\n        const promise = async function () {\n          let finalAction: ReturnType<typeof fulfilled | typeof rejected>;\n          try {\n            let conditionResult = options?.condition?.(arg, {\n              getState,\n              extra\n            });\n            if (isThenable(conditionResult)) {\n              conditionResult = await conditionResult;\n            }\n            if (conditionResult === false || abortController.signal.aborted) {\n              // eslint-disable-next-line no-throw-literal\n              throw {\n                name: 'ConditionError',\n                message: 'Aborted due to condition callback returning false.'\n              };\n            }\n            const abortedPromise = new Promise<never>((_, reject) => {\n              abortHandler = () => {\n                reject({\n                  name: 'AbortError',\n                  message: abortReason || 'Aborted'\n                });\n              };\n              abortController.signal.addEventListener('abort', abortHandler);\n            });\n            dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n              requestId,\n              arg\n            }, {\n              getState,\n              extra\n            })) as any);\n            finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n              dispatch,\n              getState,\n              extra,\n              requestId,\n              signal: abortController.signal,\n              abort,\n              rejectWithValue: ((value: RejectedValue, meta?: RejectedMeta) => {\n                return new RejectWithValue(value, meta);\n              }) as any,\n              fulfillWithValue: ((value: unknown, meta?: FulfilledMeta) => {\n                return new FulfillWithMeta(value, meta);\n              }) as any\n            })).then(result => {\n              if (result instanceof RejectWithValue) {\n                throw result;\n              }\n              if (result instanceof FulfillWithMeta) {\n                return fulfilled(result.payload, requestId, arg, result.meta);\n              }\n              return fulfilled(result as any, requestId, arg);\n            })]);\n          } catch (err) {\n            finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err as any, requestId, arg);\n          } finally {\n            if (abortHandler) {\n              abortController.signal.removeEventListener('abort', abortHandler);\n            }\n          }\n          // We dispatch the result action _after_ the catch, to avoid having any errors\n          // here get swallowed by the try/catch block,\n          // per https://twitter.com/dan_abramov/status/770914221638942720\n          // and https://github.com/reduxjs/redux-toolkit/blob/e85eb17b39a2118d859f7b7746e0f3fee523e089/docs/tutorials/advanced-tutorial.md#async-error-handling-logic-in-thunks\n\n          const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && (finalAction as any).meta.condition;\n          if (!skipDispatch) {\n            dispatch(finalAction as any);\n          }\n          return finalAction;\n        }();\n        return Object.assign(promise as SafePromise<any>, {\n          abort,\n          requestId,\n          arg,\n          unwrap() {\n            return promise.then<any>(unwrapResult);\n          }\n        });\n      };\n    }\n    return Object.assign(actionCreator as AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig>, {\n      pending,\n      rejected,\n      fulfilled,\n      settled: isAnyOf(rejected, fulfilled),\n      typePrefix\n    });\n  }\n  createAsyncThunk.withTypes = () => createAsyncThunk;\n  return createAsyncThunk as CreateAsyncThunk<AsyncThunkConfig>;\n})();\ninterface UnwrappableAction {\n  payload: any;\n  meta?: any;\n  error?: any;\n}\ntype UnwrappedActionPayload<T extends UnwrappableAction> = Exclude<T, {\n  error: any;\n}>['payload'];\n\n/**\n * @public\n */\nexport function unwrapResult<R extends UnwrappableAction>(action: R): UnwrappedActionPayload<R> {\n  if (action.meta && action.meta.rejectedWithValue) {\n    throw action.payload;\n  }\n  if (action.error) {\n    throw action.error;\n  }\n  return action.payload;\n}\ntype WithStrictNullChecks<True, False> = undefined extends boolean ? False : True;\nfunction isThenable(value: any): value is PromiseLike<any> {\n  return value !== null && typeof value === 'object' && typeof value.then === 'function';\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { Selector } from 'reselect';\nimport type { InjectConfig } from './combineSlices';\nimport type { ActionCreatorWithoutPayload, PayloadAction, PayloadActionCreator, PrepareAction, _ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport type { AsyncThunk, AsyncThunkConfig, AsyncThunkOptions, AsyncThunkPayloadCreator, OverrideThunkApiConfigs } from './createAsyncThunk';\nimport { createAsyncThunk as _createAsyncThunk } from './createAsyncThunk';\nimport type { ActionMatcherDescriptionCollection, CaseReducer, ReducerWithInitialState } from './createReducer';\nimport { createReducer } from './createReducer';\nimport type { ActionReducerMapBuilder, TypedActionCreator } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { Id, TypeGuard } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\nconst asyncThunkSymbol = /* @__PURE__ */Symbol.for('rtk-slice-createasyncthunk');\n// type is annotated because it's too long to infer\nexport const asyncThunkCreator: {\n  [asyncThunkSymbol]: typeof _createAsyncThunk;\n} = {\n  [asyncThunkSymbol]: _createAsyncThunk\n};\ntype InjectIntoConfig<NewReducerPath extends string> = InjectConfig & {\n  reducerPath?: NewReducerPath;\n};\n\n/**\n * The return value of `createSlice`\n *\n * @public\n */\nexport interface Slice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice name.\n   */\n  name: Name;\n\n  /**\n   *  The slice reducer path.\n   */\n  reducerPath: ReducerPath;\n\n  /**\n   * The slice's reducer.\n   */\n  reducer: Reducer<State>;\n\n  /**\n   * Action creators for the types of actions that are handled by the slice\n   * reducer.\n   */\n  actions: CaseReducerActions<CaseReducers, Name>;\n\n  /**\n   * The individual case reducer functions that were passed in the `reducers` parameter.\n   * This enables reuse and testing if they were defined inline when calling `createSlice`.\n   */\n  caseReducers: SliceDefinedCaseReducers<CaseReducers>;\n\n  /**\n   * Provides access to the initial state value given to the slice.\n   * If a lazy state initializer was provided, it will be called and a fresh value returned.\n   */\n  getInitialState: () => State;\n\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]: State }>>;\n\n  /**\n   * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.\n   */\n  injectInto<NewReducerPath extends string = ReducerPath>(this: this, injectable: {\n    inject: (slice: {\n      reducerPath: string;\n      reducer: Reducer;\n    }, config?: InjectConfig) => void;\n  }, config?: InjectIntoConfig<NewReducerPath>): InjectedSlice<State, CaseReducers, Name, NewReducerPath, Selectors>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Will throw an error if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]: State }): State;\n}\n\n/**\n * A slice after being called with `injectInto(reducer)`.\n *\n * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.\n */\ntype InjectedSlice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> = Omit<Slice<State, CaseReducers, Name, ReducerPath, Selectors>, 'getSelectors' | 'selectors'> & {\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State | undefined>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State | undefined): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]?: State | undefined }>>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Returns initial state if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]?: State | undefined }): State;\n};\n\n/**\n * Options for `createSlice()`.\n *\n * @public\n */\nexport interface CreateSliceOptions<State = any, CR extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice's name. Used to namespace the generated action types.\n   */\n  name: Name;\n\n  /**\n   * The slice's reducer path. Used when injecting into a combined slice reducer.\n   */\n  reducerPath?: ReducerPath;\n\n  /**\n   * The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n   */\n  initialState: State | (() => State);\n\n  /**\n   * A mapping from action types to action-type-specific *case reducer*\n   * functions. For every action type, a matching action creator will be\n   * generated using `createAction()`.\n   */\n  reducers: ValidateSliceCaseReducers<State, CR> | ((creators: ReducerCreators<State>) => CR);\n\n  /**\n   * A callback that receives a *builder* object to define\n   * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n   *\n   *\n   * @example\n  ```ts\n  import { createAction, createSlice, Action } from '@reduxjs/toolkit'\n  const incrementBy = createAction<number>('incrementBy')\n  const decrement = createAction('decrement')\n  interface RejectedAction extends Action {\n  error: Error\n  }\n  function isRejectedAction(action: Action): action is RejectedAction {\n  return action.type.endsWith('rejected')\n  }\n  createSlice({\n  name: 'counter',\n  initialState: 0,\n  reducers: {},\n  extraReducers: builder => {\n    builder\n      .addCase(incrementBy, (state, action) => {\n        // action is inferred correctly here if using TS\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {})\n      // You can match a range of action types\n      .addMatcher(\n        isRejectedAction,\n        // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard\n        (state, action) => {}\n      )\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {})\n    }\n  })\n  ```\n   */\n  extraReducers?: (builder: ActionReducerMapBuilder<State>) => void;\n\n  /**\n   * A map of selectors that receive the slice's state and any additional arguments, and return a result.\n   */\n  selectors?: Selectors;\n}\nexport enum ReducerType {\n  reducer = 'reducer',\n  reducerWithPrepare = 'reducerWithPrepare',\n  asyncThunk = 'asyncThunk',\n}\ntype ReducerDefinition<T extends ReducerType = ReducerType> = {\n  _reducerDefinitionType: T;\n};\nexport type CaseReducerDefinition<S = any, A extends Action = UnknownAction> = CaseReducer<S, A> & ReducerDefinition<ReducerType.reducer>;\n\n/**\n * A CaseReducer with a `prepare` method.\n *\n * @public\n */\nexport type CaseReducerWithPrepare<State, Action extends PayloadAction> = {\n  reducer: CaseReducer<State, Action>;\n  prepare: PrepareAction<Action['payload']>;\n};\nexport interface CaseReducerWithPrepareDefinition<State, Action extends PayloadAction> extends CaseReducerWithPrepare<State, Action>, ReducerDefinition<ReducerType.reducerWithPrepare> {}\ntype AsyncThunkSliceReducerConfig<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  pending?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['pending']>>;\n  rejected?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected']>>;\n  fulfilled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['fulfilled']>>;\n  settled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']>>;\n  options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>;\n};\ntype AsyncThunkSliceReducerDefinition<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig> & ReducerDefinition<ReducerType.asyncThunk> & {\n  payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>;\n};\n\n/**\n * Providing these as part of the config would cause circular types, so we disallow passing them\n */\ntype PreventCircular<ThunkApiConfig> = { [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch' ? never : ThunkApiConfig[K] };\ninterface AsyncThunkCreator<State, CurriedThunkApiConfig extends PreventCircular<AsyncThunkConfig> = PreventCircular<AsyncThunkConfig>> {\n  <Returned, ThunkArg = void>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, CurriedThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, CurriedThunkApiConfig>;\n  <Returned, ThunkArg, ThunkApiConfig extends PreventCircular<AsyncThunkConfig> = {}>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, ThunkApiConfig>;\n  withTypes<ThunkApiConfig extends PreventCircular<AsyncThunkConfig>>(): AsyncThunkCreator<State, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n}\nexport interface ReducerCreators<State> {\n  reducer(caseReducer: CaseReducer<State, PayloadAction>): CaseReducerDefinition<State, PayloadAction>;\n  reducer<Payload>(caseReducer: CaseReducer<State, PayloadAction<Payload>>): CaseReducerDefinition<State, PayloadAction<Payload>>;\n  asyncThunk: AsyncThunkCreator<State>;\n  preparedReducer<Prepare extends PrepareAction<any>>(prepare: Prepare, reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>): {\n    _reducerDefinitionType: ReducerType.reducerWithPrepare;\n    prepare: Prepare;\n    reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>;\n  };\n}\n\n/**\n * The type describing a slice's `reducers` option.\n *\n * @public\n */\nexport type SliceCaseReducers<State> = Record<string, ReducerDefinition> | Record<string, CaseReducer<State, PayloadAction<any>> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>>;\n\n/**\n * The type describing a slice's `selectors` option.\n */\nexport type SliceSelectors<State> = {\n  [K: string]: (sliceState: State, ...args: any[]) => any;\n};\ntype SliceActionType<SliceName extends string, ActionName extends keyof any> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string;\n\n/**\n * Derives the slice's `actions` property from the `reducers` options\n *\n * @public\n */\nexport type CaseReducerActions<CaseReducers extends SliceCaseReducers<any>, SliceName extends string> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends {\n  prepare: any;\n} ? ActionCreatorForCaseReducerWithPrepare<Definition, SliceActionType<SliceName, Type>> : Definition extends AsyncThunkSliceReducerDefinition<any, infer ThunkArg, infer Returned, infer ThunkApiConfig> ? AsyncThunk<Returned, ThunkArg, ThunkApiConfig> : Definition extends {\n  reducer: any;\n} ? ActionCreatorForCaseReducer<Definition['reducer'], SliceActionType<SliceName, Type>> : ActionCreatorForCaseReducer<Definition, SliceActionType<SliceName, Type>> : never };\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducerWithPrepare<CR extends {\n  prepare: any;\n}, Type extends string> = _ActionCreatorWithPreparedPayload<CR['prepare'], Type>;\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducer`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducer<CR, Type extends string> = CR extends ((state: any, action: infer Action) => any) ? Action extends {\n  payload: infer P;\n} ? PayloadActionCreator<P, Type> : ActionCreatorWithoutPayload<Type> : ActionCreatorWithoutPayload<Type>;\n\n/**\n * Extracts the CaseReducers out of a `reducers` object, even if they are\n * tested into a `CaseReducerWithPrepare`.\n *\n * @internal\n */\ntype SliceDefinedCaseReducers<CaseReducers extends SliceCaseReducers<any>> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends AsyncThunkSliceReducerDefinition<any, any, any> ? Id<Pick<Required<Definition>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>> : Definition extends {\n  reducer: infer Reducer;\n} ? Reducer : Definition : never };\ntype RemappedSelector<S extends Selector, NewState> = S extends Selector<any, infer R, infer P> ? Selector<NewState, R, P> & {\n  unwrapped: S;\n} : never;\n\n/**\n * Extracts the final selector type from the `selectors` object.\n *\n * Removes the `string` index signature from the default value.\n */\ntype SliceDefinedSelectors<State, Selectors extends SliceSelectors<State>, RootState> = { [K in keyof Selectors as string extends K ? never : K]: RemappedSelector<Selectors[K], RootState> };\n\n/**\n * Used on a SliceCaseReducers object.\n * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that\n * the `reducer` and the `prepare` function use the same type of `payload`.\n *\n * Might do additional such checks in the future.\n *\n * This type is only ever useful if you want to write your own wrapper around\n * `createSlice`. Please don't use it otherwise!\n *\n * @public\n */\nexport type ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & { [T in keyof ACR]: ACR[T] extends {\n  reducer(s: S, action?: infer A): any;\n} ? {\n  prepare(...a: never[]): Omit<A, 'type'>;\n} : {} };\nfunction getType(slice: string, actionKey: string): string {\n  return `${slice}/${actionKey}`;\n}\ninterface BuildCreateSliceConfig {\n  creators?: {\n    asyncThunk?: typeof asyncThunkCreator;\n  };\n}\nexport function buildCreateSlice({\n  creators\n}: BuildCreateSliceConfig = {}) {\n  const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n  return function createSlice<State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>): Slice<State, CaseReducers, Name, ReducerPath, Selectors> {\n    const {\n      name,\n      reducerPath = name as unknown as ReducerPath\n    } = options;\n    if (!name) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(11) : '`name` is a required option for createSlice');\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (options.initialState === undefined) {\n        console.error('You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`');\n      }\n    }\n    const reducers = (typeof options.reducers === 'function' ? options.reducers(buildReducerCreators<State>()) : options.reducers) || {};\n    const reducerNames = Object.keys(reducers);\n    const context: ReducerHandlingContext<State> = {\n      sliceCaseReducersByName: {},\n      sliceCaseReducersByType: {},\n      actionCreators: {},\n      sliceMatchers: []\n    };\n    const contextMethods: ReducerHandlingContextMethods<State> = {\n      addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<State>) {\n        const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n        if (!type) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(12) : '`context.addCase` cannot be called with an empty action type');\n        }\n        if (type in context.sliceCaseReducersByType) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(13) : '`context.addCase` cannot be called with two reducers for the same action type: ' + type);\n        }\n        context.sliceCaseReducersByType[type] = reducer;\n        return contextMethods;\n      },\n      addMatcher(matcher, reducer) {\n        context.sliceMatchers.push({\n          matcher,\n          reducer\n        });\n        return contextMethods;\n      },\n      exposeAction(name, actionCreator) {\n        context.actionCreators[name] = actionCreator;\n        return contextMethods;\n      },\n      exposeCaseReducer(name, reducer) {\n        context.sliceCaseReducersByName[name] = reducer;\n        return contextMethods;\n      }\n    };\n    reducerNames.forEach(reducerName => {\n      const reducerDefinition = reducers[reducerName];\n      const reducerDetails: ReducerDetails = {\n        reducerName,\n        type: getType(name, reducerName),\n        createNotation: typeof options.reducers === 'function'\n      };\n      if (isAsyncThunkSliceReducerDefinition<State>(reducerDefinition)) {\n        handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n      } else {\n        handleNormalReducerDefinition<State>(reducerDetails, reducerDefinition as any, contextMethods);\n      }\n    });\n    function buildReducer() {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof options.extraReducers === 'object') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n        }\n      }\n      const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = undefined] = typeof options.extraReducers === 'function' ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n      const finalCaseReducers = {\n        ...extraReducers,\n        ...context.sliceCaseReducersByType\n      };\n      return createReducer(options.initialState, builder => {\n        for (let key in finalCaseReducers) {\n          builder.addCase(key, finalCaseReducers[key] as CaseReducer<any>);\n        }\n        for (let sM of context.sliceMatchers) {\n          builder.addMatcher(sM.matcher, sM.reducer);\n        }\n        for (let m of actionMatchers) {\n          builder.addMatcher(m.matcher, m.reducer);\n        }\n        if (defaultCaseReducer) {\n          builder.addDefaultCase(defaultCaseReducer);\n        }\n      });\n    }\n    const selectSelf = (state: State) => state;\n    const injectedSelectorCache = new Map<boolean, WeakMap<(rootState: any) => State | undefined, Record<string, (rootState: any) => any>>>();\n    const injectedStateCache = new WeakMap<(rootState: any) => State, State>();\n    let _reducer: ReducerWithInitialState<State>;\n    function reducer(state: State | undefined, action: UnknownAction) {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer(state, action);\n    }\n    function getInitialState() {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer.getInitialState();\n    }\n    function makeSelectorProps<CurrentReducerPath extends string = ReducerPath>(reducerPath: CurrentReducerPath, injected = false): Pick<Slice<State, CaseReducers, Name, CurrentReducerPath, Selectors>, 'getSelectors' | 'selectors' | 'selectSlice' | 'reducerPath'> {\n      function selectSlice(state: { [K in CurrentReducerPath]: State }) {\n        let sliceState = state[reducerPath];\n        if (typeof sliceState === 'undefined') {\n          if (injected) {\n            sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);\n          } else if (process.env.NODE_ENV !== 'production') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(15) : 'selectSlice returned undefined for an uninjected slice reducer');\n          }\n        }\n        return sliceState;\n      }\n      function getSelectors(selectState: (rootState: any) => State = selectSelf) {\n        const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => new WeakMap());\n        return getOrInsertComputed(selectorCache, selectState, () => {\n          const map: Record<string, Selector<any, any>> = {};\n          for (const [name, selector] of Object.entries(options.selectors ?? {})) {\n            map[name] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);\n          }\n          return map;\n        }) as any;\n      }\n      return {\n        reducerPath,\n        getSelectors,\n        get selectors() {\n          return getSelectors(selectSlice);\n        },\n        selectSlice\n      };\n    }\n    const slice: Slice<State, CaseReducers, Name, ReducerPath, Selectors> = {\n      name,\n      reducer,\n      actions: context.actionCreators as any,\n      caseReducers: context.sliceCaseReducersByName as any,\n      getInitialState,\n      ...makeSelectorProps(reducerPath),\n      injectInto(injectable, {\n        reducerPath: pathOpt,\n        ...config\n      } = {}) {\n        const newReducerPath = pathOpt ?? reducerPath;\n        injectable.inject({\n          reducerPath: newReducerPath,\n          reducer\n        }, config);\n        return {\n          ...slice,\n          ...makeSelectorProps(newReducerPath, true)\n        } as any;\n      }\n    };\n    return slice;\n  };\n}\nfunction wrapSelector<State, NewState, S extends Selector<State>>(selector: S, selectState: Selector<NewState, State>, getInitialState: () => State, injected?: boolean) {\n  function wrapper(rootState: NewState, ...args: any[]) {\n    let sliceState = selectState(rootState);\n    if (typeof sliceState === 'undefined') {\n      if (injected) {\n        sliceState = getInitialState();\n      } else if (process.env.NODE_ENV !== 'production') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(16) : 'selectState returned undefined for an uninjected slice reducer');\n      }\n    }\n    return selector(sliceState, ...args);\n  }\n  wrapper.unwrapped = selector;\n  return wrapper as RemappedSelector<S, NewState>;\n}\n\n/**\n * A function that accepts an initial state, an object full of reducer\n * functions, and a \"slice name\", and automatically generates\n * action creators and action types that correspond to the\n * reducers and state.\n *\n * @public\n */\nexport const createSlice = /* @__PURE__ */buildCreateSlice();\ninterface ReducerHandlingContext<State> {\n  sliceCaseReducersByName: Record<string, CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>>;\n  sliceCaseReducersByType: Record<string, CaseReducer<State, any>>;\n  sliceMatchers: ActionMatcherDescriptionCollection<State>;\n  actionCreators: Record<string, Function>;\n}\ninterface ReducerHandlingContextMethods<State> {\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ReducerHandlingContextMethods<State>;\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ReducerHandlingContextMethods<State>;\n\n  /**\n   * Allows you to match incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   */\n  addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<State, A extends Action ? A : A & Action>): ReducerHandlingContextMethods<State>;\n  /**\n   * Add an action to be exposed under the final `slice.actions` key.\n   * @param name The key to be exposed as.\n   * @param actionCreator The action to expose.\n   * @example\n   * context.exposeAction(\"addPost\", createAction<Post>(\"addPost\"));\n   *\n   * export const { addPost } = slice.actions\n   *\n   * dispatch(addPost(post))\n   */\n  exposeAction(name: string, actionCreator: Function): ReducerHandlingContextMethods<State>;\n  /**\n   * Add a case reducer to be exposed under the final `slice.caseReducers` key.\n   * @param name The key to be exposed as.\n   * @param reducer The reducer to expose.\n   * @example\n   * context.exposeCaseReducer(\"addPost\", (state, action: PayloadAction<Post>) => {\n   *   state.push(action.payload)\n   * })\n   *\n   * slice.caseReducers.addPost([], addPost(post))\n   */\n  exposeCaseReducer(name: string, reducer: CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>): ReducerHandlingContextMethods<State>;\n}\ninterface ReducerDetails {\n  /** The key the reducer was defined under */\n  reducerName: string;\n  /** The predefined action type, i.e. `${slice.name}/${reducerName}` */\n  type: string;\n  /** Whether create. notation was used when defining reducers */\n  createNotation: boolean;\n}\nfunction buildReducerCreators<State>(): ReducerCreators<State> {\n  function asyncThunk(payloadCreator: AsyncThunkPayloadCreator<any, any>, config: AsyncThunkSliceReducerConfig<State, any>): AsyncThunkSliceReducerDefinition<State, any> {\n    return {\n      _reducerDefinitionType: ReducerType.asyncThunk,\n      payloadCreator,\n      ...config\n    };\n  }\n  asyncThunk.withTypes = () => asyncThunk;\n  return {\n    reducer(caseReducer: CaseReducer<State, any>) {\n      return Object.assign({\n        // hack so the wrapping function has the same name as the original\n        // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n        [caseReducer.name](...args: Parameters<typeof caseReducer>) {\n          return caseReducer(...args);\n        }\n      }[caseReducer.name], {\n        _reducerDefinitionType: ReducerType.reducer\n      } as const);\n    },\n    preparedReducer(prepare, reducer) {\n      return {\n        _reducerDefinitionType: ReducerType.reducerWithPrepare,\n        prepare,\n        reducer\n      };\n    },\n    asyncThunk: asyncThunk as any\n  };\n}\nfunction handleNormalReducerDefinition<State>({\n  type,\n  reducerName,\n  createNotation\n}: ReducerDetails, maybeReducerWithPrepare: CaseReducer<State, {\n  payload: any;\n  type: string;\n}> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>, context: ReducerHandlingContextMethods<State>) {\n  let caseReducer: CaseReducer<State, any>;\n  let prepareCallback: PrepareAction<any> | undefined;\n  if ('reducer' in maybeReducerWithPrepare) {\n    if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(17) : 'Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.');\n    }\n    caseReducer = maybeReducerWithPrepare.reducer;\n    prepareCallback = maybeReducerWithPrepare.prepare;\n  } else {\n    caseReducer = maybeReducerWithPrepare;\n  }\n  context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition<State>(reducerDefinition: any): reducerDefinition is AsyncThunkSliceReducerDefinition<State, any, any, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.asyncThunk;\n}\nfunction isCaseReducerWithPrepareDefinition<State>(reducerDefinition: any): reducerDefinition is CaseReducerWithPrepareDefinition<State, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.reducerWithPrepare;\n}\nfunction handleThunkCaseReducerDefinition<State>({\n  type,\n  reducerName\n}: ReducerDetails, reducerDefinition: AsyncThunkSliceReducerDefinition<State, any, any, any>, context: ReducerHandlingContextMethods<State>, cAT: typeof _createAsyncThunk | undefined) {\n  if (!cAT) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(18) : 'Cannot use `create.asyncThunk` in the built-in `createSlice`. ' + 'Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.');\n  }\n  const {\n    payloadCreator,\n    fulfilled,\n    pending,\n    rejected,\n    settled,\n    options\n  } = reducerDefinition;\n  const thunk = cAT(type, payloadCreator, options as any);\n  context.exposeAction(reducerName, thunk);\n  if (fulfilled) {\n    context.addCase(thunk.fulfilled, fulfilled);\n  }\n  if (pending) {\n    context.addCase(thunk.pending, pending);\n  }\n  if (rejected) {\n    context.addCase(thunk.rejected, rejected);\n  }\n  if (settled) {\n    context.addMatcher(thunk.settled, settled);\n  }\n  context.exposeCaseReducer(reducerName, {\n    fulfilled: fulfilled || noop,\n    pending: pending || noop,\n    rejected: rejected || noop,\n    settled: settled || noop\n  });\n}\nfunction noop() {}","import type { EntityId, EntityState, EntityStateAdapter, EntityStateFactory } from './models';\nexport function getInitialEntityState<T, Id extends EntityId>(): EntityState<T, Id> {\n  return {\n    ids: [],\n    entities: {} as Record<Id, T>\n  };\n}\nexport function createInitialStateFactory<T, Id extends EntityId>(stateAdapter: EntityStateAdapter<T, Id>): EntityStateFactory<T, Id> {\n  function getInitialState(state?: undefined, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id>;\n  function getInitialState<S extends object>(additionalState: S, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id> & S;\n  function getInitialState(additionalState: any = {}, entities?: readonly T[] | Record<Id, T>): any {\n    const state = Object.assign(getInitialEntityState(), additionalState);\n    return entities ? stateAdapter.setAll(state, entities) : state;\n  }\n  return {\n    getInitialState\n  };\n}","import type { CreateSelectorFunction, Selector } from 'reselect';\nimport { createDraftSafeSelector } from '../createDraftSafeSelector';\nimport type { EntityId, EntitySelectors, EntityState } from './models';\ntype AnyFunction = (...args: any) => any;\ntype AnyCreateSelectorFunction = CreateSelectorFunction<<F extends AnyFunction>(f: F) => F, <F extends AnyFunction>(f: F) => F>;\nexport type GetSelectorsOptions = {\n  createSelector?: AnyCreateSelectorFunction;\n};\nexport function createSelectorsFactory<T, Id extends EntityId>() {\n  function getSelectors(selectState?: undefined, options?: GetSelectorsOptions): EntitySelectors<T, EntityState<T, Id>, Id>;\n  function getSelectors<V>(selectState: (state: V) => EntityState<T, Id>, options?: GetSelectorsOptions): EntitySelectors<T, V, Id>;\n  function getSelectors<V>(selectState?: (state: V) => EntityState<T, Id>, options: GetSelectorsOptions = {}): EntitySelectors<T, any, Id> {\n    const {\n      createSelector = createDraftSafeSelector as AnyCreateSelectorFunction\n    } = options;\n    const selectIds = (state: EntityState<T, Id>) => state.ids;\n    const selectEntities = (state: EntityState<T, Id>) => state.entities;\n    const selectAll = createSelector(selectIds, selectEntities, (ids, entities): T[] => ids.map(id => entities[id]!));\n    const selectId = (_: unknown, id: Id) => id;\n    const selectById = (entities: Record<Id, T>, id: Id) => entities[id];\n    const selectTotal = createSelector(selectIds, ids => ids.length);\n    if (!selectState) {\n      return {\n        selectIds,\n        selectEntities,\n        selectAll,\n        selectTotal,\n        selectById: createSelector(selectEntities, selectId, selectById)\n      };\n    }\n    const selectGlobalizedEntities = createSelector(selectState as Selector<V, EntityState<T, Id>>, selectEntities);\n    return {\n      selectIds: createSelector(selectState, selectIds),\n      selectEntities: selectGlobalizedEntities,\n      selectAll: createSelector(selectState, selectAll),\n      selectTotal: createSelector(selectState, selectTotal),\n      selectById: createSelector(selectGlobalizedEntities, selectId, selectById)\n    };\n  }\n  return {\n    getSelectors\n  };\n}","import { produce as createNextState, isDraft } from 'immer';\nimport type { Draft } from 'immer';\nimport type { EntityId, DraftableEntityState, PreventAny } from './models';\nimport type { PayloadAction } from '../createAction';\nimport { isFSA } from '../createAction';\nexport const isDraftTyped = isDraft as <T>(value: T | Draft<T>) => value is Draft<T>;\nexport function createSingleArgumentStateOperator<T, Id extends EntityId>(mutator: (state: DraftableEntityState<T, Id>) => void) {\n  const operator = createStateOperator((_: undefined, state: DraftableEntityState<T, Id>) => mutator(state));\n  return function operation<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>): S {\n    return operator(state as S, undefined);\n  };\n}\nexport function createStateOperator<T, Id extends EntityId, R>(mutator: (arg: R, state: DraftableEntityState<T, Id>) => void) {\n  return function operation<S extends DraftableEntityState<T, Id>>(state: S, arg: R | PayloadAction<R>): S {\n    function isPayloadActionArgument(arg: R | PayloadAction<R>): arg is PayloadAction<R> {\n      return isFSA(arg);\n    }\n    const runMutator = (draft: DraftableEntityState<T, Id>) => {\n      if (isPayloadActionArgument(arg)) {\n        mutator(arg.payload, draft);\n      } else {\n        mutator(arg, draft);\n      }\n    };\n    if (isDraftTyped<DraftableEntityState<T, Id>>(state)) {\n      // we must already be inside a `createNextState` call, likely because\n      // this is being wrapped in `createReducer` or `createSlice`.\n      // It's safe to just pass the draft to the mutator.\n      runMutator(state);\n\n      // since it's a draft, we'll just return it\n      return state;\n    }\n    return createNextState(state, runMutator);\n  };\n}","import type { Draft } from 'immer';\nimport { current, isDraft } from 'immer';\nimport type { DraftableEntityState, EntityId, IdSelector, Update } from './models';\nexport function selectIdValue<T, Id extends EntityId>(entity: T, selectId: IdSelector<T, Id>) {\n  const key = selectId(entity);\n  if (process.env.NODE_ENV !== 'production' && key === undefined) {\n    console.warn('The entity passed to the `selectId` implementation returned undefined.', 'You should probably provide your own `selectId` implementation.', 'The entity that was passed:', entity, 'The `selectId` implementation:', selectId.toString());\n  }\n  return key;\n}\nexport function ensureEntitiesArray<T, Id extends EntityId>(entities: readonly T[] | Record<Id, T>): readonly T[] {\n  if (!Array.isArray(entities)) {\n    entities = Object.values(entities);\n  }\n  return entities;\n}\nexport function getCurrent<T>(value: T | Draft<T>): T {\n  return (isDraft(value) ? current(value) : value) as T;\n}\nexport function splitAddedUpdatedEntities<T, Id extends EntityId>(newEntities: readonly T[] | Record<Id, T>, selectId: IdSelector<T, Id>, state: DraftableEntityState<T, Id>): [T[], Update<T, Id>[], Id[]] {\n  newEntities = ensureEntitiesArray(newEntities);\n  const existingIdsArray = getCurrent(state.ids);\n  const existingIds = new Set<Id>(existingIdsArray);\n  const added: T[] = [];\n  const addedIds = new Set<Id>([]);\n  const updated: Update<T, Id>[] = [];\n  for (const entity of newEntities) {\n    const id = selectIdValue(entity, selectId);\n    if (existingIds.has(id) || addedIds.has(id)) {\n      updated.push({\n        id,\n        changes: entity\n      });\n    } else {\n      addedIds.add(id);\n      added.push(entity);\n    }\n  }\n  return [added, updated, existingIdsArray];\n}","import type { Draft } from 'immer';\nimport type { EntityStateAdapter, IdSelector, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator, createSingleArgumentStateOperator } from './state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities } from './utils';\nexport function createUnsortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  function addOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (key in state.entities) {\n      return;\n    }\n    state.ids.push(key as Id & Draft<Id>);\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      addOneMutably(entity, state);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (!(key in state.entities)) {\n      state.ids.push(key as Id & Draft<Id>);\n    }\n    ;\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      setOneMutably(entity, state);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.ids = [];\n    state.entities = {} as Record<Id, T>;\n    addManyMutably(newEntities, state);\n  }\n  function removeOneMutably(key: Id, state: R): void {\n    return removeManyMutably([key], state);\n  }\n  function removeManyMutably(keys: readonly Id[], state: R): void {\n    let didMutate = false;\n    keys.forEach(key => {\n      if (key in state.entities) {\n        delete (state.entities as Record<Id, T>)[key];\n        didMutate = true;\n      }\n    });\n    if (didMutate) {\n      state.ids = (state.ids as Id[]).filter(id => id in state.entities) as Id[] | Draft<Id[]>;\n    }\n  }\n  function removeAllMutably(state: R): void {\n    Object.assign(state, {\n      ids: [],\n      entities: {}\n    });\n  }\n  function takeNewKey(keys: {\n    [id: string]: Id;\n  }, update: Update<T, Id>, state: R): boolean {\n    const original: T | undefined = (state.entities as Record<Id, T>)[update.id];\n    if (original === undefined) {\n      return false;\n    }\n    const updated: T = Object.assign({}, original, update.changes);\n    const newKey = selectIdValue(updated, selectId);\n    const hasNewKey = newKey !== update.id;\n    if (hasNewKey) {\n      keys[update.id] = newKey;\n      delete (state.entities as Record<Id, T>)[update.id];\n    }\n    ;\n    (state.entities as Record<Id, T>)[newKey] = updated;\n    return hasNewKey;\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    const newKeys: {\n      [id: string]: Id;\n    } = {};\n    const updatesPerEntity: {\n      [id: string]: Update<T, Id>;\n    } = {};\n    updates.forEach(update => {\n      // Only apply updates to entities that currently exist\n      if (update.id in state.entities) {\n        // If there are multiple updates to one entity, merge them together\n        updatesPerEntity[update.id] = {\n          id: update.id,\n          // Spreads ignore falsy values, so this works even if there isn't\n          // an existing update already at this key\n          changes: {\n            ...updatesPerEntity[update.id]?.changes,\n            ...update.changes\n          }\n        };\n      }\n    });\n    updates = Object.values(updatesPerEntity);\n    const didMutateEntities = updates.length > 0;\n    if (didMutateEntities) {\n      const didMutateIds = updates.filter(update => takeNewKey(newKeys, update, state)).length > 0;\n      if (didMutateIds) {\n        state.ids = Object.values(state.entities).map(e => selectIdValue(e as T, selectId));\n      }\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    addManyMutably(added, state);\n    updateManyMutably(updated, state);\n  }\n  return {\n    removeAll: createSingleArgumentStateOperator(removeAllMutably),\n    addOne: createStateOperator(addOneMutably),\n    addMany: createStateOperator(addManyMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    upsertMany: createStateOperator(upsertManyMutably),\n    removeOne: createStateOperator(removeOneMutably),\n    removeMany: createStateOperator(removeManyMutably)\n  };\n}","import type { IdSelector, Comparer, EntityStateAdapter, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator } from './state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities, getCurrent } from './utils';\n\n// Borrowed from Replay\nexport function findInsertIndex<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): number {\n  let lowIndex = 0;\n  let highIndex = sortedItems.length;\n  while (lowIndex < highIndex) {\n    let middleIndex = lowIndex + highIndex >>> 1;\n    const currentItem = sortedItems[middleIndex];\n    const res = comparisonFunction(item, currentItem);\n    if (res >= 0) {\n      lowIndex = middleIndex + 1;\n    } else {\n      highIndex = middleIndex;\n    }\n  }\n  return lowIndex;\n}\nexport function insert<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): T[] {\n  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n  sortedItems.splice(insertAtIndex, 0, item);\n  return sortedItems;\n}\nexport function createSortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>, comparer: Comparer<T>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  const {\n    removeOne,\n    removeMany,\n    removeAll\n  } = createUnsortedStateAdapter(selectId);\n  function addOneMutably(entity: T, state: R): void {\n    return addManyMutably([entity], state);\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R, existingIds?: Id[]): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    const existingKeys = new Set<Id>(existingIds ?? getCurrent(state.ids));\n    const models = newEntities.filter(model => !existingKeys.has(selectIdValue(model, selectId)));\n    if (models.length !== 0) {\n      mergeFunction(state, models);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    return setManyMutably([entity], state);\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    if (newEntities.length !== 0) {\n      for (const item of newEntities) {\n        delete (state.entities as Record<Id, T>)[selectId(item)];\n      }\n      mergeFunction(state, newEntities);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.entities = {} as Record<Id, T>;\n    state.ids = [];\n    addManyMutably(newEntities, state, []);\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    let appliedUpdates = false;\n    let replacedIds = false;\n    for (let update of updates) {\n      const entity: T | undefined = (state.entities as Record<Id, T>)[update.id];\n      if (!entity) {\n        continue;\n      }\n      appliedUpdates = true;\n      Object.assign(entity, update.changes);\n      const newId = selectId(entity);\n      if (update.id !== newId) {\n        // We do support the case where updates can change an item's ID.\n        // This makes things trickier - go ahead and swap the IDs in state now.\n        replacedIds = true;\n        delete (state.entities as Record<Id, T>)[update.id];\n        const oldIndex = (state.ids as Id[]).indexOf(update.id);\n        state.ids[oldIndex] = newId;\n        (state.entities as Record<Id, T>)[newId] = entity;\n      }\n    }\n    if (appliedUpdates) {\n      mergeFunction(state, [], appliedUpdates, replacedIds);\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    if (added.length) {\n      addManyMutably(added, state, existingIdsArray);\n    }\n    if (updated.length) {\n      updateManyMutably(updated, state);\n    }\n  }\n  function areArraysEqual(a: readonly unknown[], b: readonly unknown[]) {\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] === b[i]) {\n        continue;\n      }\n      return false;\n    }\n    return true;\n  }\n  type MergeFunction = (state: R, addedItems: readonly T[], appliedUpdates?: boolean, replacedIds?: boolean) => void;\n  const mergeFunction: MergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n    const currentEntities = getCurrent(state.entities);\n    const currentIds = getCurrent(state.ids);\n    const stateEntities = state.entities as Record<Id, T>;\n    let ids: Iterable<Id> = currentIds;\n    if (replacedIds) {\n      ids = new Set(currentIds);\n    }\n    let sortedEntities: T[] = [];\n    for (const id of ids) {\n      const entity = currentEntities[id];\n      if (entity) {\n        sortedEntities.push(entity);\n      }\n    }\n    const wasPreviouslyEmpty = sortedEntities.length === 0;\n\n    // Insert/overwrite all new/updated\n    for (const item of addedItems) {\n      stateEntities[selectId(item)] = item;\n      if (!wasPreviouslyEmpty) {\n        // Binary search insertion generally requires fewer comparisons\n        insert(sortedEntities, item, comparer);\n      }\n    }\n    if (wasPreviouslyEmpty) {\n      // All we have is the incoming values, sort them\n      sortedEntities = addedItems.slice().sort(comparer);\n    } else if (appliedUpdates) {\n      // We should have a _mostly_-sorted array already\n      sortedEntities.sort(comparer);\n    }\n    const newSortedIds = sortedEntities.map(selectId);\n    if (!areArraysEqual(currentIds, newSortedIds)) {\n      state.ids = newSortedIds;\n    }\n  };\n  return {\n    removeOne,\n    removeMany,\n    removeAll,\n    addOne: createStateOperator(addOneMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    addMany: createStateOperator(addManyMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertMany: createStateOperator(upsertManyMutably)\n  };\n}","import type { EntityAdapter, EntityId, EntityAdapterOptions } from './models';\nimport { createInitialStateFactory } from './entity_state';\nimport { createSelectorsFactory } from './state_selectors';\nimport { createSortedStateAdapter } from './sorted_state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport type { WithRequiredProp } from '../tsHelpers';\nexport function createEntityAdapter<T, Id extends EntityId>(options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>): EntityAdapter<T, Id>;\nexport function createEntityAdapter<T extends {\n  id: EntityId;\n}>(options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>): EntityAdapter<T, T['id']>;\n\n/**\n *\n * @param options\n *\n * @public\n */\nexport function createEntityAdapter<T>(options: EntityAdapterOptions<T, EntityId> = {}): EntityAdapter<T, EntityId> {\n  const {\n    selectId,\n    sortComparer\n  }: Required<EntityAdapterOptions<T, EntityId>> = {\n    sortComparer: false,\n    selectId: (instance: any) => instance.id,\n    ...options\n  };\n  const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n  const stateFactory = createInitialStateFactory(stateAdapter);\n  const selectorsFactory = createSelectorsFactory<T, EntityId>();\n  return {\n    selectId,\n    sortComparer,\n    ...stateFactory,\n    ...selectorsFactory,\n    ...stateAdapter\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Action, Dispatch, MiddlewareAPI, UnknownAction } from 'redux';\nimport { isAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport { createAction } from '../createAction';\nimport { nanoid } from '../nanoid';\nimport { TaskAbortError, listenerCancelled, listenerCompleted, taskCancelled, taskCompleted } from './exceptions';\nimport { createDelay, createPause, raceWithSignal, runTask, validateActive } from './task';\nimport type { AbortSignalWithReason, AddListenerOverloads, AnyListenerPredicate, CreateListenerMiddlewareOptions, FallbackAddListenerOptions, ForkOptions, ForkedTask, ForkedTaskExecutor, ListenerEntry, ListenerErrorHandler, ListenerErrorInfo, ListenerMiddleware, ListenerMiddlewareInstance, TakePattern, TaskResult, TypedAddListener, TypedCreateListenerEntry, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\nimport { abortControllerWithReason, addAbortSignalListener, assertFunction, catchRejection, noop } from './utils';\nexport { TaskAbortError } from './exceptions';\nexport type { AsyncTaskExecutor, CreateListenerMiddlewareOptions, ForkedTask, ForkedTaskAPI, ForkedTaskExecutor, ListenerEffect, ListenerEffectAPI, ListenerErrorHandler, ListenerMiddleware, ListenerMiddlewareInstance, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult, TypedAddListener, TypedRemoveListener, TypedStartListening, TypedStopListening, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\n\n//Overly-aggressive byte-shaving\nconst {\n  assign\n} = Object;\n/**\n * @internal\n */\nconst INTERNAL_NIL_TOKEN = {} as const;\nconst alm = 'listenerMiddleware' as const;\nconst createFork = (parentAbortSignal: AbortSignalWithReason<unknown>, parentBlockingPromises: Promise<any>[]) => {\n  const linkControllers = (controller: AbortController) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n  return <T,>(taskExecutor: ForkedTaskExecutor<T>, opts?: ForkOptions): ForkedTask<T> => {\n    assertFunction(taskExecutor, 'taskExecutor');\n    const childAbortController = new AbortController();\n    linkControllers(childAbortController);\n    const result = runTask<T>(async (): Promise<T> => {\n      validateActive(parentAbortSignal);\n      validateActive(childAbortController.signal);\n      const result = (await taskExecutor({\n        pause: createPause(childAbortController.signal),\n        delay: createDelay(childAbortController.signal),\n        signal: childAbortController.signal\n      })) as T;\n      validateActive(childAbortController.signal);\n      return result;\n    }, () => abortControllerWithReason(childAbortController, taskCompleted));\n    if (opts?.autoJoin) {\n      parentBlockingPromises.push(result.catch(noop));\n    }\n    return {\n      result: createPause<TaskResult<T>>(parentAbortSignal)(result),\n      cancel() {\n        abortControllerWithReason(childAbortController, taskCancelled);\n      }\n    };\n  };\n};\nconst createTakePattern = <S,>(startListening: AddListenerOverloads<UnsubscribeListener, S, Dispatch>, signal: AbortSignal): TakePattern<S> => {\n  /**\n   * A function that takes a ListenerPredicate and an optional timeout,\n   * and resolves when either the predicate returns `true` based on an action\n   * state combination or when the timeout expires.\n   * If the parent listener is canceled while waiting, this will throw a\n   * TaskAbortError.\n   */\n  const take = async <P extends AnyListenerPredicate<S>,>(predicate: P, timeout: number | undefined) => {\n    validateActive(signal);\n\n    // Placeholder unsubscribe function until the listener is added\n    let unsubscribe: UnsubscribeListener = () => {};\n    const tuplePromise = new Promise<[Action, S, S]>((resolve, reject) => {\n      // Inside the Promise, we synchronously add the listener.\n      let stopListening = startListening({\n        predicate: predicate as any,\n        effect: (action, listenerApi): void => {\n          // One-shot listener that cleans up as soon as the predicate passes\n          listenerApi.unsubscribe();\n          // Resolve the promise with the same arguments the predicate saw\n          resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n        }\n      });\n      unsubscribe = () => {\n        stopListening();\n        reject();\n      };\n    });\n    const promises: (Promise<null> | Promise<[Action, S, S]>)[] = [tuplePromise];\n    if (timeout != null) {\n      promises.push(new Promise<null>(resolve => setTimeout(resolve, timeout, null)));\n    }\n    try {\n      const output = await raceWithSignal(signal, Promise.race(promises));\n      validateActive(signal);\n      return output;\n    } finally {\n      // Always clean up the listener\n      unsubscribe();\n    }\n  };\n  return ((predicate: AnyListenerPredicate<S>, timeout: number | undefined) => catchRejection(take(predicate, timeout))) as TakePattern<S>;\n};\nconst getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {\n  let {\n    type,\n    actionCreator,\n    matcher,\n    predicate,\n    effect\n  } = options;\n  if (type) {\n    predicate = createAction(type).match;\n  } else if (actionCreator) {\n    type = actionCreator!.type;\n    predicate = actionCreator.match;\n  } else if (matcher) {\n    predicate = matcher;\n  } else if (predicate) {\n    // pass\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(21) : 'Creating or removing a listener requires one of the known fields for matching an action');\n  }\n  assertFunction(effect, 'options.listener');\n  return {\n    predicate,\n    type,\n    effect\n  };\n};\n\n/** Accepts the possible options for creating a listener, and returns a formatted listener entry */\nexport const createListenerEntry: TypedCreateListenerEntry<unknown> = /* @__PURE__ */assign((options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    predicate,\n    effect\n  } = getListenerEntryPropsFrom(options);\n  const entry: ListenerEntry<unknown> = {\n    id: nanoid(),\n    effect,\n    type,\n    predicate,\n    pending: new Set<AbortController>(),\n    unsubscribe: () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(22) : 'Unsubscribe not initialized');\n    }\n  };\n  return entry;\n}, {\n  withTypes: () => createListenerEntry\n}) as unknown as TypedCreateListenerEntry<unknown>;\nconst findListenerEntry = (listenerMap: Map<string, ListenerEntry>, options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    effect,\n    predicate\n  } = getListenerEntryPropsFrom(options);\n  return Array.from(listenerMap.values()).find(entry => {\n    const matchPredicateOrType = typeof type === 'string' ? entry.type === type : entry.predicate === predicate;\n    return matchPredicateOrType && entry.effect === effect;\n  });\n};\nconst cancelActiveListeners = (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>) => {\n  entry.pending.forEach(controller => {\n    abortControllerWithReason(controller, listenerCancelled);\n  });\n};\nconst createClearListenerMiddleware = (listenerMap: Map<string, ListenerEntry>) => {\n  return () => {\n    listenerMap.forEach(cancelActiveListeners);\n    listenerMap.clear();\n  };\n};\n\n/**\n * Safely reports errors to the `errorHandler` provided.\n * Errors that occur inside `errorHandler` are notified in a new task.\n * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)\n * @param errorHandler\n * @param errorToNotify\n */\nconst safelyNotifyError = (errorHandler: ListenerErrorHandler, errorToNotify: unknown, errorInfo: ListenerErrorInfo): void => {\n  try {\n    errorHandler(errorToNotify, errorInfo);\n  } catch (errorHandlerError) {\n    // We cannot let an error raised here block the listener queue.\n    // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...\n    setTimeout(() => {\n      throw errorHandlerError;\n    }, 0);\n  }\n};\n\n/**\n * @public\n */\nexport const addListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/add`), {\n  withTypes: () => addListener\n}) as unknown as TypedAddListener<unknown>;\n\n/**\n * @public\n */\nexport const clearAllListeners = /* @__PURE__ */createAction(`${alm}/removeAll`);\n\n/**\n * @public\n */\nexport const removeListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/remove`), {\n  withTypes: () => removeListener\n}) as unknown as TypedRemoveListener<unknown>;\nconst defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {\n  console.error(`${alm}/error`, ...args);\n};\n\n/**\n * @public\n */\nexport const createListenerMiddleware = <StateType = unknown, DispatchType extends Dispatch<Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown>(middlewareOptions: CreateListenerMiddlewareOptions<ExtraArgument> = {}) => {\n  const listenerMap = new Map<string, ListenerEntry>();\n  const {\n    extra,\n    onError = defaultErrorHandler\n  } = middlewareOptions;\n  assertFunction(onError, 'onError');\n  const insertEntry = (entry: ListenerEntry) => {\n    entry.unsubscribe = () => listenerMap.delete(entry.id);\n    listenerMap.set(entry.id, entry);\n    return (cancelOptions?: UnsubscribeListenerOptions) => {\n      entry.unsubscribe();\n      if (cancelOptions?.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    };\n  };\n  const startListening = ((options: FallbackAddListenerOptions) => {\n    const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options as any);\n    return insertEntry(entry);\n  }) as AddListenerOverloads<any>;\n  assign(startListening, {\n    withTypes: () => startListening\n  });\n  const stopListening = (options: FallbackAddListenerOptions & UnsubscribeListenerOptions): boolean => {\n    const entry = findListenerEntry(listenerMap, options);\n    if (entry) {\n      entry.unsubscribe();\n      if (options.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    }\n    return !!entry;\n  };\n  assign(stopListening, {\n    withTypes: () => stopListening\n  });\n  const notifyListener = async (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>, action: unknown, api: MiddlewareAPI, getOriginalState: () => StateType) => {\n    const internalTaskController = new AbortController();\n    const take = createTakePattern(startListening as AddListenerOverloads<any>, internalTaskController.signal);\n    const autoJoinPromises: Promise<any>[] = [];\n    try {\n      entry.pending.add(internalTaskController);\n      await Promise.resolve(entry.effect(action,\n      // Use assign() rather than ... to avoid extra helper functions added to bundle\n      assign({}, api, {\n        getOriginalState,\n        condition: (predicate: AnyListenerPredicate<any>, timeout?: number) => take(predicate, timeout).then(Boolean),\n        take,\n        delay: createDelay(internalTaskController.signal),\n        pause: createPause<any>(internalTaskController.signal),\n        extra,\n        signal: internalTaskController.signal,\n        fork: createFork(internalTaskController.signal, autoJoinPromises),\n        unsubscribe: entry.unsubscribe,\n        subscribe: () => {\n          listenerMap.set(entry.id, entry);\n        },\n        cancelActiveListeners: () => {\n          entry.pending.forEach((controller, _, set) => {\n            if (controller !== internalTaskController) {\n              abortControllerWithReason(controller, listenerCancelled);\n              set.delete(controller);\n            }\n          });\n        },\n        cancel: () => {\n          abortControllerWithReason(internalTaskController, listenerCancelled);\n          entry.pending.delete(internalTaskController);\n        },\n        throwIfCancelled: () => {\n          validateActive(internalTaskController.signal);\n        }\n      })));\n    } catch (listenerError) {\n      if (!(listenerError instanceof TaskAbortError)) {\n        safelyNotifyError(onError, listenerError, {\n          raisedBy: 'effect'\n        });\n      }\n    } finally {\n      await Promise.all(autoJoinPromises);\n      abortControllerWithReason(internalTaskController, listenerCompleted); // Notify that the task has completed\n      entry.pending.delete(internalTaskController);\n    }\n  };\n  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n  const middleware: ListenerMiddleware<StateType, DispatchType, ExtraArgument> = api => next => action => {\n    if (!isAction(action)) {\n      // we only want to notify listeners for action objects\n      return next(action);\n    }\n    if (addListener.match(action)) {\n      return startListening(action.payload as any);\n    }\n    if (clearAllListeners.match(action)) {\n      clearListenerMiddleware();\n      return;\n    }\n    if (removeListener.match(action)) {\n      return stopListening(action.payload);\n    }\n\n    // Need to get this state _before_ the reducer processes the action\n    let originalState: StateType | typeof INTERNAL_NIL_TOKEN = api.getState();\n\n    // `getOriginalState` can only be called synchronously.\n    // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820\n    const getOriginalState = (): StateType => {\n      if (originalState === INTERNAL_NIL_TOKEN) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(23) : `${alm}: getOriginalState can only be called synchronously`);\n      }\n      return originalState as StateType;\n    };\n    let result: unknown;\n    try {\n      // Actually forward the action to the reducer before we handle listeners\n      result = next(action);\n      if (listenerMap.size > 0) {\n        const currentState = api.getState();\n        // Work around ESBuild+TS transpilation issue\n        const listenerEntries = Array.from(listenerMap.values());\n        for (const entry of listenerEntries) {\n          let runListener = false;\n          try {\n            runListener = entry.predicate(action, currentState, originalState);\n          } catch (predicateError) {\n            runListener = false;\n            safelyNotifyError(onError, predicateError, {\n              raisedBy: 'predicate'\n            });\n          }\n          if (!runListener) {\n            continue;\n          }\n          notifyListener(entry, action, api, getOriginalState);\n        }\n      }\n    } finally {\n      // Remove `originalState` store from this scope.\n      originalState = INTERNAL_NIL_TOKEN;\n    }\n    return result;\n  };\n  return {\n    middleware,\n    startListening,\n    stopListening,\n    clearListeners: clearListenerMiddleware\n  } as ListenerMiddlewareInstance<StateType, DispatchType, ExtraArgument>;\n};","import type { SerializedError } from '@reduxjs/toolkit';\nconst task = 'task';\nconst listener = 'listener';\nconst completed = 'completed';\nconst cancelled = 'cancelled';\n\n/* TaskAbortError error codes  */\nexport const taskCancelled = `task-${cancelled}` as const;\nexport const taskCompleted = `task-${completed}` as const;\nexport const listenerCancelled = `${listener}-${cancelled}` as const;\nexport const listenerCompleted = `${listener}-${completed}` as const;\nexport class TaskAbortError implements SerializedError {\n  name = 'TaskAbortError';\n  message: string;\n  constructor(public code: string | undefined) {\n    this.message = `${task} ${cancelled} (reason: ${code})`;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AbortSignalWithReason } from './types';\nexport const assertFunction: (func: unknown, expected: string) => asserts func is (...args: unknown[]) => unknown = (func: unknown, expected: string) => {\n  if (typeof func !== 'function') {\n    throw new TypeError(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(32) : `${expected} is not a function`);\n  }\n};\nexport const noop = () => {};\nexport const catchRejection = <T,>(promise: Promise<T>, onError = noop): Promise<T> => {\n  promise.catch(onError);\n  return promise;\n};\nexport const addAbortSignalListener = (abortSignal: AbortSignal, callback: (evt: Event) => void) => {\n  abortSignal.addEventListener('abort', callback, {\n    once: true\n  });\n  return () => abortSignal.removeEventListener('abort', callback);\n};\n\n/**\n * Calls `abortController.abort(reason)` and patches `signal.reason`.\n * if it is not supported.\n *\n * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.\n * @param abortController\n * @param reason\n * @returns\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\n */\nexport const abortControllerWithReason = <T,>(abortController: AbortController, reason: T): void => {\n  type Consumer<T> = (val: T) => void;\n  const signal = abortController.signal as AbortSignalWithReason<T>;\n  if (signal.aborted) {\n    return;\n  }\n\n  // Patch `reason` if necessary.\n  // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.\n  // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'\n  // event are are notified immediately.\n  if (!('reason' in signal)) {\n    Object.defineProperty(signal, 'reason', {\n      enumerable: true,\n      value: reason,\n      configurable: true,\n      writable: true\n    });\n  }\n  ;\n  (abortController.abort as Consumer<typeof reason>)(reason);\n};","import { TaskAbortError } from './exceptions';\nimport type { AbortSignalWithReason, TaskResult } from './types';\nimport { addAbortSignalListener, catchRejection, noop } from './utils';\n\n/**\n * Synchronously raises {@link TaskAbortError} if the task tied to the input `signal` has been cancelled.\n * @param signal\n * @param reason\n * @see {TaskAbortError}\n */\nexport const validateActive = (signal: AbortSignal): void => {\n  if (signal.aborted) {\n    const {\n      reason\n    } = signal as AbortSignalWithReason<string>;\n    throw new TaskAbortError(reason);\n  }\n};\n\n/**\n * Generates a race between the promise(s) and the AbortSignal\n * This avoids `Promise.race()`-related memory leaks:\n * https://github.com/nodejs/node/issues/17469#issuecomment-349794909\n */\nexport function raceWithSignal<T>(signal: AbortSignalWithReason<string>, promise: Promise<T>): Promise<T> {\n  let cleanup = noop;\n  return new Promise<T>((resolve, reject) => {\n    const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n    if (signal.aborted) {\n      notifyRejection();\n      return;\n    }\n    cleanup = addAbortSignalListener(signal, notifyRejection);\n    promise.finally(() => cleanup()).then(resolve, reject);\n  }).finally(() => {\n    // after this point, replace `cleanup` with a noop, so there is no reference to `signal` any more\n    cleanup = noop;\n  });\n}\n\n/**\n * Runs a task and returns promise that resolves to {@link TaskResult}.\n * Second argument is an optional `cleanUp` function that always runs after task.\n *\n * **Note:** `runTask` runs the executor in the next microtask.\n * @returns\n */\nexport const runTask = async <T,>(task: () => Promise<T>, cleanUp?: () => void): Promise<TaskResult<T>> => {\n  try {\n    await Promise.resolve();\n    const value = await task();\n    return {\n      status: 'ok',\n      value\n    };\n  } catch (error: any) {\n    return {\n      status: error instanceof TaskAbortError ? 'cancelled' : 'rejected',\n      error\n    };\n  } finally {\n    cleanUp?.();\n  }\n};\n\n/**\n * Given an input `AbortSignal` and a promise returns another promise that resolves\n * as soon the input promise is provided or rejects as soon as\n * `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createPause = <T,>(signal: AbortSignal) => {\n  return (promise: Promise<T>): Promise<T> => {\n    return catchRejection(raceWithSignal(signal, promise).then(output => {\n      validateActive(signal);\n      return output;\n    }));\n  };\n};\n\n/**\n * Given an input `AbortSignal` and `timeoutMs` returns a promise that resolves\n * after `timeoutMs` or rejects as soon as `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createDelay = (signal: AbortSignal) => {\n  const pause = createPause<void>(signal);\n  return (timeoutMs: number): Promise<void> => {\n    return pause(new Promise<void>(resolve => setTimeout(resolve, timeoutMs)));\n  };\n};","import type { Dispatch, Middleware, UnknownAction } from 'redux';\nimport { compose } from 'redux';\nimport { createAction } from '../createAction';\nimport { isAllOf } from '../matchers';\nimport { nanoid } from '../nanoid';\nimport { getOrInsertComputed } from '../utils';\nimport type { AddMiddleware, DynamicMiddleware, DynamicMiddlewareInstance, MiddlewareEntry, WithMiddleware } from './types';\nexport type { DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './types';\nconst createMiddlewareEntry = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(middleware: Middleware<any, State, DispatchType>): MiddlewareEntry<State, DispatchType> => ({\n  middleware,\n  applied: new Map()\n});\nconst matchInstance = (instanceId: string) => (action: any): action is {\n  meta: {\n    instanceId: string;\n  };\n} => action?.meta?.instanceId === instanceId;\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): DynamicMiddlewareInstance<State, DispatchType> => {\n  const instanceId = nanoid();\n  const middlewareMap = new Map<Middleware<any, State, DispatchType>, MiddlewareEntry<State, DispatchType>>();\n  const withMiddleware = Object.assign(createAction('dynamicMiddleware/add', (...middlewares: Middleware<any, State, DispatchType>[]) => ({\n    payload: middlewares,\n    meta: {\n      instanceId\n    }\n  })), {\n    withTypes: () => withMiddleware\n  }) as WithMiddleware<State, DispatchType>;\n  const addMiddleware = Object.assign(function addMiddleware(...middlewares: Middleware<any, State, DispatchType>[]) {\n    middlewares.forEach(middleware => {\n      getOrInsertComputed(middlewareMap, middleware, createMiddlewareEntry);\n    });\n  }, {\n    withTypes: () => addMiddleware\n  }) as AddMiddleware<State, DispatchType>;\n  const getFinalMiddleware: Middleware<{}, State, DispatchType> = api => {\n    const appliedMiddleware = Array.from(middlewareMap.values()).map(entry => getOrInsertComputed(entry.applied, api, entry.middleware));\n    return compose(...appliedMiddleware);\n  };\n  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n  const middleware: DynamicMiddleware<State, DispatchType> = api => next => action => {\n    if (isWithMiddleware(action)) {\n      addMiddleware(...action.payload);\n      return api.dispatch;\n    }\n    return getFinalMiddleware(api)(next)(action);\n  };\n  return {\n    middleware,\n    addMiddleware,\n    withMiddleware,\n    instanceId\n  };\n};","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Reducer, StateFromReducersMapObject, UnknownAction } from 'redux';\nimport { combineReducers } from 'redux';\nimport { nanoid } from './nanoid';\nimport type { Id, NonUndefined, Tail, UnionToIntersection, WithOptionalProp } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\ntype SliceLike<ReducerPath extends string, State> = {\n  reducerPath: ReducerPath;\n  reducer: Reducer<State>;\n};\ntype AnySliceLike = SliceLike<string, any>;\ntype SliceLikeReducerPath<A extends AnySliceLike> = A extends SliceLike<infer ReducerPath, any> ? ReducerPath : never;\ntype SliceLikeState<A extends AnySliceLike> = A extends SliceLike<any, infer State> ? State : never;\nexport type WithSlice<A extends AnySliceLike> = { [Path in SliceLikeReducerPath<A>]: SliceLikeState<A> };\ntype ReducerMap = Record<string, Reducer>;\ntype ExistingSliceLike<DeclaredState> = { [ReducerPath in keyof DeclaredState]: SliceLike<ReducerPath & string, NonUndefined<DeclaredState[ReducerPath]>> }[keyof DeclaredState];\nexport type InjectConfig = {\n  /**\n   * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.\n   */\n  overrideExisting?: boolean;\n};\n\n/**\n * A reducer that allows for slices/reducers to be injected after initialisation.\n */\nexport interface CombinedSliceReducer<InitialState, DeclaredState = InitialState> extends Reducer<DeclaredState, UnknownAction, Partial<DeclaredState>> {\n  /**\n   * Provide a type for slices that will be injected lazily.\n   *\n   * One way to do this would be with interface merging:\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {}\n   *\n   * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * // elsewhere\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBoolean = rootReducer.inject(booleanSlice);\n   *\n   * // elsewhere again\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices {\n   *     customName: CustomState\n   *   }\n   * }\n   *\n   * const withCustom = rootReducer.inject({ reducerPath: \"customName\", reducer: customSlice.reducer })\n   * ```\n   */\n  withLazyLoadedSlices<Lazy = {}>(): CombinedSliceReducer<InitialState, Id<DeclaredState & Partial<Lazy>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<Sl extends Id<ExistingSliceLike<DeclaredState>>>(slice: Sl, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<Sl>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<ReducerPath extends string, State>(slice: SliceLike<ReducerPath, State & (ReducerPath extends keyof DeclaredState ? never : State)>, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<SliceLike<ReducerPath, State>>>>;\n\n  /**\n   * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n   *\n   * ```ts\n   * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n   * //                                                                ^? boolean | undefined\n   *\n   * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n   *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n   *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n   *   return state.boolean;\n   *   //           ^? boolean\n   * })\n   * ```\n   *\n   * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n   *\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {};\n   *\n   * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * export const rootReducer = combineSlices({ inner: innerReducer });\n   *\n   * export type RootState = ReturnType<typeof rootReducer>;\n   *\n   * // elsewhere\n   *\n   * declare module \"./reducer.ts\" {\n   *  export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBool = innerReducer.inject(booleanSlice);\n   *\n   * const selectBoolean = withBool.selector(\n   *   (state) => state.boolean,\n   *   (rootState: RootState) => state.inner\n   * );\n   * //    now expects to be passed RootState instead of innerReducer state\n   *\n   * ```\n   *\n   * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n   *\n   * ```ts\n   * const injectedReducer = rootReducer.inject(booleanSlice);\n   * const selectBoolean = injectedReducer.selector((state) => {\n   *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n   *   return state.boolean\n   * })\n   * ```\n   */\n  selector: {\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown>(selectorFn: Selector): (state: WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n     *\n     * ```ts\n     *\n     * interface LazyLoadedSlices {};\n     *\n     * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n     *\n     * const rootReducer = combineSlices({ inner: innerReducer });\n     *\n     * type RootState = ReturnType<typeof rootReducer>;\n     *\n     * // elsewhere\n     *\n     * declare module \"./reducer.ts\" {\n     *  interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n     * }\n     *\n     * const withBool = innerReducer.inject(booleanSlice);\n     *\n     * const selectBoolean = withBool.selector(\n     *   (state) => state.boolean,\n     *   (rootState: RootState) => state.inner\n     * );\n     * //    now expects to be passed RootState instead of innerReducer state\n     *\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown, RootState>(selectorFn: Selector, selectState: (rootState: RootState, ...args: Tail<Parameters<Selector>>) => WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>): (state: RootState, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n    /**\n     * Returns the unproxied state. Useful for debugging.\n     * @param state state Proxy, that ensures injected reducers have value\n     * @returns original, unproxied state\n     * @throws if value passed is not a state Proxy\n     */\n    original: (state: DeclaredState) => InitialState & Partial<DeclaredState>;\n  };\n}\ntype InitialState<Slices extends Array<AnySliceLike | ReducerMap>> = UnionToIntersection<Slices[number] extends infer Slice ? Slice extends AnySliceLike ? WithSlice<Slice> : StateFromReducersMapObject<Slice> : never>;\nconst isSliceLike = (maybeSliceLike: AnySliceLike | ReducerMap): maybeSliceLike is AnySliceLike => 'reducerPath' in maybeSliceLike && typeof maybeSliceLike.reducerPath === 'string';\nconst getReducers = (slices: Array<AnySliceLike | ReducerMap>) => slices.flatMap(sliceOrMap => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer] as const] : Object.entries(sliceOrMap));\nconst ORIGINAL_STATE = Symbol.for('rtk-state-proxy-original');\nconst isStateProxy = (value: any) => !!value && !!value[ORIGINAL_STATE];\nconst stateProxyMap = new WeakMap<object, object>();\nconst createStateProxy = <State extends object,>(state: State, reducerMap: Partial<Record<PropertyKey, Reducer>>, initialStateCache: Record<PropertyKey, unknown>) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n  get: (target, prop, receiver) => {\n    if (prop === ORIGINAL_STATE) return target;\n    const result = Reflect.get(target, prop, receiver);\n    if (typeof result === 'undefined') {\n      const cached = initialStateCache[prop];\n      if (typeof cached !== 'undefined') return cached;\n      const reducer = reducerMap[prop];\n      if (reducer) {\n        // ensure action type is random, to prevent reducer treating it differently\n        const reducerResult = reducer(undefined, {\n          type: nanoid()\n        });\n        if (typeof reducerResult === 'undefined') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n        }\n        initialStateCache[prop] = reducerResult;\n        return reducerResult;\n      }\n    }\n    return result;\n  }\n})) as State;\nconst original = (state: any) => {\n  if (!isStateProxy(state)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(25) : 'original must be used on state Proxy');\n  }\n  return state[ORIGINAL_STATE];\n};\nconst emptyObject = {};\nconst noopReducer: Reducer<Record<string, any>> = (state = emptyObject) => state;\nexport function combineSlices<Slices extends Array<AnySliceLike | ReducerMap>>(...slices: Slices): CombinedSliceReducer<Id<InitialState<Slices>>> {\n  const reducerMap = Object.fromEntries<Reducer>(getReducers(slices));\n  const getReducer = () => Object.keys(reducerMap).length ? combineReducers(reducerMap) : noopReducer;\n  let reducer = getReducer();\n  function combinedReducer(state: Record<string, unknown>, action: UnknownAction) {\n    return reducer(state, action);\n  }\n  combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n  const initialStateCache: Record<PropertyKey, unknown> = {};\n  const inject = (slice: AnySliceLike, config: InjectConfig = {}): typeof combinedReducer => {\n    const {\n      reducerPath,\n      reducer: reducerToInject\n    } = slice;\n    const currentReducer = reducerMap[reducerPath];\n    if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n      }\n      return combinedReducer;\n    }\n    if (config.overrideExisting && currentReducer !== reducerToInject) {\n      delete initialStateCache[reducerPath];\n    }\n    reducerMap[reducerPath] = reducerToInject;\n    reducer = getReducer();\n    return combinedReducer;\n  };\n  const selector = Object.assign(function makeSelector<State extends object, RootState, Args extends any[]>(selectorFn: (state: State, ...args: Args) => any, selectState?: (rootState: RootState, ...args: Args) => State) {\n    return function selector(state: State, ...args: Args) {\n      return selectorFn(createStateProxy(selectState ? selectState(state as any, ...args) : state, reducerMap, initialStateCache), ...args);\n    };\n  }, {\n    original\n  });\n  return Object.assign(combinedReducer, {\n    inject,\n    selector\n  }) as any;\n}","/**\r\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\r\n *\r\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\r\n * during build.\r\n * @param {number} code\r\n */\nexport function formatProdErrorMessage(code: number) {\n  return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}"],"mappings":"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","names":["import_immer","import_reselect","createSelector","createDraftSafeSelector","args","import_redux","noop","import_redux","isActionCreator","import_immer","createNextState","stringify","getSerialize","import_redux","thunkMiddleware","listener","middleware","import_immer","reducer","createNextState","createAsyncThunk","ReducerType","createSlice","reducer","name","reducerPath","createSelector","import_immer","arg","createNextState","import_immer","original","import_redux","noop","noop","task","result","noop","import_redux","addMiddleware","middleware","import_redux","selector"]}
Index: node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.production.min.cjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+"use strict";var Pe=Object.defineProperty;var jt=Object.getOwnPropertyDescriptor;var Ft=Object.getOwnPropertyNames;var Vt=Object.prototype.hasOwnProperty;var _t=(e,t)=>{for(var r in t)Pe(e,r,{get:t[r],enumerable:!0})},Me=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ft(t))!Vt.call(e,o)&&o!==r&&Pe(e,o,{get:()=>t[o],enumerable:!(n=jt(t,o))||n.enumerable});return e},w=(e,t,r)=>(Me(e,t,"default"),r&&Me(r,t,"default"));var Lt=e=>Me(Pe({},"__esModule",{value:!0}),e);var C={};_t(C,{ReducerType:()=>We,SHOULD_AUTOBATCH:()=>ce,TaskAbortError:()=>I,Tuple:()=>F,addListener:()=>Re,asyncThunkCreator:()=>lt,autoBatchEnhancer:()=>de,buildCreateSlice:()=>ze,clearAllListeners:()=>qe,combineSlices:()=>Nt,configureStore:()=>st,createAction:()=>b,createActionCreatorInvariantMiddleware:()=>Qe,createAsyncThunk:()=>ye,createDraftSafeSelector:()=>ne,createDraftSafeSelectorCreator:()=>be,createDynamicMiddleware:()=>Dt,createEntityAdapter:()=>Tt,createImmutableStateInvariantMiddleware:()=>Ze,createListenerMiddleware:()=>It,createNextState:()=>N.produce,createReducer:()=>le,createSelector:()=>W.createSelector,createSelectorCreator:()=>W.createSelectorCreator,createSerializableStateInvariantMiddleware:()=>nt,createSlice:()=>pt,current:()=>N.current,findNonSerializableValue:()=>Ne,formatProdErrorMessage:()=>x,freeze:()=>N.freeze,isActionCreator:()=>oe,isAllOf:()=>B,isAnyOf:()=>V,isAsyncThunkAction:()=>_e,isDraft:()=>N.isDraft,isFluxStandardAction:()=>ae,isFulfilled:()=>Ve,isImmutableDefault:()=>Ye,isPending:()=>je,isPlain:()=>Oe,isRejected:()=>$,isRejectedWithValue:()=>Fe,lruMemoize:()=>W.lruMemoize,miniSerializeError:()=>Le,nanoid:()=>O,original:()=>N.original,prepareAutoBatched:()=>at,removeListener:()=>we,unwrapResult:()=>Ue,weakMapMemoize:()=>W.weakMapMemoize});module.exports=Lt(C);w(C,require("redux"),module.exports);var N=require("immer"),W=require("reselect");var ee=require("immer"),te=require("reselect"),be=(...e)=>{let t=(0,te.createSelectorCreator)(...e),r=Object.assign((...n)=>{let o=t(...n),a=(s,...y)=>o((0,ee.isDraft)(s)?(0,ee.current)(s):s,...y);return Object.assign(a,o),a},{withTypes:()=>r});return r},ne=be(te.weakMapMemoize);var D=require("redux");var Ie=require("redux"),Je=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Ie.compose:Ie.compose.apply(null,arguments)},xn=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION__?window.__REDUX_DEVTOOLS_EXTENSION__:function(){return function(e){return e}};var se=require("redux-thunk");var ve=require("redux");var re=e=>e&&typeof e.match=="function";function b(e,t){function r(...n){if(t){let o=t(...n);if(!o)throw new Error(x(0));return{type:e,payload:o.payload,..."meta"in o&&{meta:o.meta},..."error"in o&&{error:o.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>(0,ve.isAction)(n)&&n.type===e,r}function oe(e){return typeof e=="function"&&"type"in e&&re(e)}function ae(e){return(0,ve.isAction)(e)&&Object.keys(e).every(Ut)}function Ut(e){return["type","payload","error","meta"].indexOf(e)>-1}function Wt(e){let t=e?`${e}`.split("/"):[],r=t[t.length-1]||"actionCreator";return`Detected an action creator with type "${e||"unknown"}" being dispatched. 
+Make sure you're calling the action creator before dispatching, i.e. \`dispatch(${r}())\` instead of \`dispatch(${r})\`. This is necessary even if the action has no payload.`}function Qe(e={}){return()=>r=>n=>r(n)}var ie=require("immer");var F=class e extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,e.prototype)}static get[Symbol.species](){return e}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new e(...t[0].concat(this)):new e(...t.concat(this))}};function De(e){return(0,ie.isDraftable)(e)?(0,ie.produce)(e,()=>{}):e}function v(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function Ye(e){return typeof e!="object"||e==null||Object.isFrozen(e)}function Ze(e={}){if(1)return()=>n=>o=>n(o);var t,r}var et=require("redux");function Oe(e){let t=typeof e;return e==null||t==="string"||t==="boolean"||t==="number"||Array.isArray(e)||(0,et.isPlainObject)(e)}function Ne(e,t="",r=Oe,n,o=[],a){let s;if(!r(e))return{keyPath:t||"<root>",value:e};if(typeof e!="object"||e===null||a?.has(e))return!1;let y=n!=null?n(e):Object.entries(e),c=o.length>0;for(let[l,i]of y){let d=t?t+"."+l:l;if(!(c&&o.some(g=>g instanceof RegExp?g.test(d):d===g))){if(!r(i))return{keyPath:d,value:i};if(typeof i=="object"&&(s=Ne(i,d,r,n,o,a),s))return s}}return a&&tt(e)&&a.add(e),!1}function tt(e){if(!Object.isFrozen(e))return!1;for(let t of Object.values(e))if(!(typeof t!="object"||t===null)&&!tt(t))return!1;return!0}function nt(e={}){return()=>t=>r=>t(r)}function zt(e){return typeof e=="boolean"}var rt=()=>function(t){let{thunk:r=!0,immutableCheck:n=!0,serializableCheck:o=!0,actionCreatorCheck:a=!0}=t??{},s=new F;return r&&(zt(r)?s.push(se.thunk):s.push((0,se.withExtraArgument)(r.extraArgument))),s};var ce="RTK_autoBatch",at=()=>e=>({payload:e,meta:{[ce]:!0}}),ot=e=>t=>{setTimeout(t,e)},de=(e={type:"raf"})=>t=>(...r)=>{let n=t(...r),o=!0,a=!1,s=!1,y=new Set,c=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:ot(10):e.type==="callback"?e.queueNotification:ot(e.timeout),l=()=>{s=!1,a&&(a=!1,y.forEach(i=>i()))};return Object.assign({},n,{subscribe(i){let d=()=>o&&i(),T=n.subscribe(d);return y.add(i),()=>{T(),y.delete(i)}},dispatch(i){try{return o=!i?.meta?.[ce],a=!o,a&&(s||(s=!0,c(l))),n.dispatch(i)}finally{o=!0}}})};var it=e=>function(r){let{autoBatch:n=!0}=r??{},o=new F(e);return n&&o.push(de(typeof n=="object"?n:void 0)),o};function st(e){let t=rt(),{reducer:r=void 0,middleware:n,devTools:o=!0,duplicateMiddlewareCheck:a=!0,preloadedState:s=void 0,enhancers:y=void 0}=e||{},c;if(typeof r=="function")c=r;else if((0,D.isPlainObject)(r))c=(0,D.combineReducers)(r);else throw new Error(x(1));let l;typeof n=="function"?l=n(t):l=t();let i=D.compose;o&&(i=Je({trace:!1,...typeof o=="object"&&o}));let d=(0,D.applyMiddleware)(...l),T=it(d),g=typeof y=="function"?y(T):T(),p=i(...g);return(0,D.createStore)(c,s,p)}var G=require("immer");function ue(e){let t={},r=[],n,o={addCase(a,s){let y=typeof a=="string"?a:a.type;if(!y)throw new Error(x(28));if(y in t)throw new Error(x(29));return t[y]=s,o},addMatcher(a,s){return r.push({matcher:a,reducer:s}),o},addDefaultCase(a){return n=a,o}};return e(o),[t,r,n]}function Gt(e){return typeof e=="function"}function le(e,t){let[r,n,o]=ue(t),a;if(Gt(e))a=()=>De(e());else{let y=De(e);a=()=>y}function s(y=a(),c){let l=[r[c.type],...n.filter(({matcher:i})=>i(c)).map(({reducer:i})=>i)];return l.filter(i=>!!i).length===0&&(l=[o]),l.reduce((i,d)=>{if(d)if((0,G.isDraft)(i)){let g=d(i,c);return g===void 0?i:g}else{if((0,G.isDraftable)(i))return(0,G.produce)(i,T=>d(T,c));{let T=d(i,c);if(T===void 0){if(i===null)return i;throw Error("A case reducer on a non-draftable value must not return undefined")}return T}}return i},y)}return s.getInitialState=a,s}var ct=(e,t)=>re(e)?e.match(t):e(t);function V(...e){return t=>e.some(r=>ct(r,t))}function B(...e){return t=>e.every(r=>ct(r,t))}function pe(e,t){if(!e||!e.meta)return!1;let r=typeof e.meta.requestId=="string",n=t.indexOf(e.meta.requestStatus)>-1;return r&&n}function X(e){return typeof e[0]=="function"&&"pending"in e[0]&&"fulfilled"in e[0]&&"rejected"in e[0]}function je(...e){return e.length===0?t=>pe(t,["pending"]):X(e)?V(...e.map(t=>t.pending)):je()(e[0])}function $(...e){return e.length===0?t=>pe(t,["rejected"]):X(e)?V(...e.map(t=>t.rejected)):$()(e[0])}function Fe(...e){let t=r=>r&&r.meta&&r.meta.rejectedWithValue;return e.length===0?B($(...e),t):X(e)?B($(...e),t):Fe()(e[0])}function Ve(...e){return e.length===0?t=>pe(t,["fulfilled"]):X(e)?V(...e.map(t=>t.fulfilled)):Ve()(e[0])}function _e(...e){return e.length===0?t=>pe(t,["pending","fulfilled","rejected"]):X(e)?V(...e.flatMap(t=>[t.pending,t.rejected,t.fulfilled])):_e()(e[0])}var Bt="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",O=(e=21)=>{let t="",r=e;for(;r--;)t+=Bt[Math.random()*64|0];return t};var Kt=["name","message","stack","code"],J=class{constructor(t,r){this.payload=t;this.meta=r}_type},fe=class{constructor(t,r){this.payload=t;this.meta=r}_type},Le=e=>{if(typeof e=="object"&&e!==null){let t={};for(let r of Kt)typeof e[r]=="string"&&(t[r]=e[r]);return t}return{message:String(e)}},dt="External signal was aborted",ye=(()=>{function e(t,r,n){let o=b(t+"/fulfilled",(c,l,i,d)=>({payload:c,meta:{...d||{},arg:i,requestId:l,requestStatus:"fulfilled"}})),a=b(t+"/pending",(c,l,i)=>({payload:void 0,meta:{...i||{},arg:l,requestId:c,requestStatus:"pending"}})),s=b(t+"/rejected",(c,l,i,d,T)=>({payload:d,error:(n&&n.serializeError||Le)(c||"Rejected"),meta:{...T||{},arg:i,requestId:l,rejectedWithValue:!!d,requestStatus:"rejected",aborted:c?.name==="AbortError",condition:c?.name==="ConditionError"}}));function y(c,{signal:l}={}){return(i,d,T)=>{let g=n?.idGenerator?n.idGenerator(c):O(),p=new AbortController,h,u;function f(A){u=A,p.abort()}l&&(l.aborted?f(dt):l.addEventListener("abort",()=>f(dt),{once:!0}));let k=async function(){let A;try{let S=n?.condition?.(c,{getState:d,extra:T});if(Ht(S)&&(S=await S),S===!1||p.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};let P=new Promise((E,R)=>{h=()=>{R({name:"AbortError",message:u||"Aborted"})},p.signal.addEventListener("abort",h)});i(a(g,c,n?.getPendingMeta?.({requestId:g,arg:c},{getState:d,extra:T}))),A=await Promise.race([P,Promise.resolve(r(c,{dispatch:i,getState:d,extra:T,requestId:g,signal:p.signal,abort:f,rejectWithValue:(E,R)=>new J(E,R),fulfillWithValue:(E,R)=>new fe(E,R)})).then(E=>{if(E instanceof J)throw E;return E instanceof fe?o(E.payload,g,c,E.meta):o(E,g,c)})])}catch(S){A=S instanceof J?s(null,g,c,S.payload,S.meta):s(S,g,c)}finally{h&&p.signal.removeEventListener("abort",h)}return n&&!n.dispatchConditionRejection&&s.match(A)&&A.meta.condition||i(A),A}();return Object.assign(k,{abort:f,requestId:g,arg:c,unwrap(){return k.then(Ue)}})}}return Object.assign(y,{pending:a,rejected:s,fulfilled:o,settled:V(s,o),typePrefix:t})}return e.withTypes=()=>e,e})();function Ue(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}function Ht(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}var ut=Symbol.for("rtk-slice-createasyncthunk"),lt={[ut]:ye},We=(n=>(n.reducer="reducer",n.reducerWithPrepare="reducerWithPrepare",n.asyncThunk="asyncThunk",n))(We||{});function qt(e,t){return`${e}/${t}`}function ze({creators:e}={}){let t=e?.asyncThunk?.[ut];return function(n){let{name:o,reducerPath:a=o}=n;if(!o)throw new Error(x(11));typeof process<"u";let s=(typeof n.reducers=="function"?n.reducers(Xt()):n.reducers)||{},y=Object.keys(s),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},l={addCase(A,m){let S=typeof A=="string"?A:A.type;if(!S)throw new Error(x(12));if(S in c.sliceCaseReducersByType)throw new Error(x(13));return c.sliceCaseReducersByType[S]=m,l},addMatcher(A,m){return c.sliceMatchers.push({matcher:A,reducer:m}),l},exposeAction(A,m){return c.actionCreators[A]=m,l},exposeCaseReducer(A,m){return c.sliceCaseReducersByName[A]=m,l}};y.forEach(A=>{let m=s[A],S={reducerName:A,type:qt(o,A),createNotation:typeof n.reducers=="function"};Qt(m)?Zt(S,m,l,t):Jt(S,m,l)});function i(){let[A={},m=[],S=void 0]=typeof n.extraReducers=="function"?ue(n.extraReducers):[n.extraReducers],P={...A,...c.sliceCaseReducersByType};return le(n.initialState,E=>{for(let R in P)E.addCase(R,P[R]);for(let R of c.sliceMatchers)E.addMatcher(R.matcher,R.reducer);for(let R of m)E.addMatcher(R.matcher,R.reducer);S&&E.addDefaultCase(S)})}let d=A=>A,T=new Map,g=new WeakMap,p;function h(A,m){return p||(p=i()),p(A,m)}function u(){return p||(p=i()),p.getInitialState()}function f(A,m=!1){function S(E){let R=E[A];return typeof R>"u"&&m&&(R=v(g,S,u)),R}function P(E=d){let R=v(T,m,()=>new WeakMap);return v(R,E,()=>{let q={};for(let[Z,z]of Object.entries(n.selectors??{}))q[Z]=$t(z,E,()=>v(g,E,u),m);return q})}return{reducerPath:A,getSelectors:P,get selectors(){return P(S)},selectSlice:S}}let k={name:o,reducer:h,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:u,...f(a),injectInto(A,{reducerPath:m,...S}={}){let P=m??a;return A.inject({reducerPath:P,reducer:h},S),{...k,...f(P,!0)}}};return k}}function $t(e,t,r,n){function o(a,...s){let y=t(a);return typeof y>"u"&&n&&(y=r()),e(y,...s)}return o.unwrapped=e,o}var pt=ze();function Xt(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function Jt({type:e,reducerName:t,createNotation:r},n,o){let a,s;if("reducer"in n){if(r&&!Yt(n))throw new Error(x(17));a=n.reducer,s=n.prepare}else a=n;o.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,s?b(e,s):b(e))}function Qt(e){return e._reducerDefinitionType==="asyncThunk"}function Yt(e){return e._reducerDefinitionType==="reducerWithPrepare"}function Zt({type:e,reducerName:t},r,n,o){if(!o)throw new Error(x(18));let{payloadCreator:a,fulfilled:s,pending:y,rejected:c,settled:l,options:i}=r,d=o(e,a,i);n.exposeAction(t,d),s&&n.addCase(d.fulfilled,s),y&&n.addCase(d.pending,y),c&&n.addCase(d.rejected,c),l&&n.addMatcher(d.settled,l),n.exposeCaseReducer(t,{fulfilled:s||he,pending:y||he,rejected:c||he,settled:l||he})}function he(){}function en(){return{ids:[],entities:{}}}function ft(e){function t(r={},n){let o=Object.assign(en(),r);return n?e.setAll(o,n):o}return{getInitialState:t}}function yt(){function e(t,r={}){let{createSelector:n=ne}=r,o=d=>d.ids,a=d=>d.entities,s=n(o,a,(d,T)=>d.map(g=>T[g])),y=(d,T)=>T,c=(d,T)=>d[T],l=n(o,d=>d.length);if(!t)return{selectIds:o,selectEntities:a,selectAll:s,selectTotal:l,selectById:n(a,y,c)};let i=n(t,a);return{selectIds:n(t,o),selectEntities:i,selectAll:n(t,s),selectTotal:n(t,l),selectById:n(i,y,c)}}return{getSelectors:e}}var Ae=require("immer");var tn=Ae.isDraft;function ht(e){let t=M((r,n)=>e(n));return function(n){return t(n,void 0)}}function M(e){return function(r,n){function o(s){return ae(s)}let a=s=>{o(n)?e(n.payload,s):e(n,s)};return tn(r)?(a(r),r):(0,Ae.produce)(r,a)}}var Te=require("immer");function _(e,t){return t(e)}function j(e){return Array.isArray(e)||(e=Object.values(e)),e}function Q(e){return(0,Te.isDraft)(e)?(0,Te.current)(e):e}function me(e,t,r){e=j(e);let n=Q(r.ids),o=new Set(n),a=[],s=new Set([]),y=[];for(let c of e){let l=_(c,t);o.has(l)||s.has(l)?y.push({id:l,changes:c}):(s.add(l),a.push(c))}return[a,y,n]}function ge(e){function t(p,h){let u=_(p,e);u in h.entities||(h.ids.push(u),h.entities[u]=p)}function r(p,h){p=j(p);for(let u of p)t(u,h)}function n(p,h){let u=_(p,e);u in h.entities||h.ids.push(u),h.entities[u]=p}function o(p,h){p=j(p);for(let u of p)n(u,h)}function a(p,h){p=j(p),h.ids=[],h.entities={},r(p,h)}function s(p,h){return y([p],h)}function y(p,h){let u=!1;p.forEach(f=>{f in h.entities&&(delete h.entities[f],u=!0)}),u&&(h.ids=h.ids.filter(f=>f in h.entities))}function c(p){Object.assign(p,{ids:[],entities:{}})}function l(p,h,u){let f=u.entities[h.id];if(f===void 0)return!1;let k=Object.assign({},f,h.changes),A=_(k,e),m=A!==h.id;return m&&(p[h.id]=A,delete u.entities[h.id]),u.entities[A]=k,m}function i(p,h){return d([p],h)}function d(p,h){let u={},f={};p.forEach(A=>{A.id in h.entities&&(f[A.id]={id:A.id,changes:{...f[A.id]?.changes,...A.changes}})}),p=Object.values(f),p.length>0&&p.filter(m=>l(u,m,h)).length>0&&(h.ids=Object.values(h.entities).map(m=>_(m,e)))}function T(p,h){return g([p],h)}function g(p,h){let[u,f]=me(p,e,h);r(u,h),d(f,h)}return{removeAll:ht(c),addOne:M(t),addMany:M(r),setOne:M(n),setMany:M(o),setAll:M(a),updateOne:M(i),updateMany:M(d),upsertOne:M(T),upsertMany:M(g),removeOne:M(s),removeMany:M(y)}}function nn(e,t,r){let n=0,o=e.length;for(;n<o;){let a=n+o>>>1,s=e[a];r(t,s)>=0?n=a+1:o=a}return n}function rn(e,t,r){let n=nn(e,t,r);return e.splice(n,0,t),e}function At(e,t){let{removeOne:r,removeMany:n,removeAll:o}=ge(e);function a(u,f){return s([u],f)}function s(u,f,k){u=j(u);let A=new Set(k??Q(f.ids)),m=u.filter(S=>!A.has(_(S,e)));m.length!==0&&h(f,m)}function y(u,f){return c([u],f)}function c(u,f){if(u=j(u),u.length!==0){for(let k of u)delete f.entities[e(k)];h(f,u)}}function l(u,f){u=j(u),f.entities={},f.ids=[],s(u,f,[])}function i(u,f){return d([u],f)}function d(u,f){let k=!1,A=!1;for(let m of u){let S=f.entities[m.id];if(!S)continue;k=!0,Object.assign(S,m.changes);let P=e(S);if(m.id!==P){A=!0,delete f.entities[m.id];let E=f.ids.indexOf(m.id);f.ids[E]=P,f.entities[P]=S}}k&&h(f,[],k,A)}function T(u,f){return g([u],f)}function g(u,f){let[k,A,m]=me(u,e,f);k.length&&s(k,f,m),A.length&&d(A,f)}function p(u,f){if(u.length!==f.length)return!1;for(let k=0;k<u.length;k++)if(u[k]!==f[k])return!1;return!0}let h=(u,f,k,A)=>{let m=Q(u.entities),S=Q(u.ids),P=u.entities,E=S;A&&(E=new Set(S));let R=[];for(let z of E){let Xe=m[z];Xe&&R.push(Xe)}let q=R.length===0;for(let z of f)P[e(z)]=z,q||rn(R,z,t);q?R=f.slice().sort(t):k&&R.sort(t);let Z=R.map(e);p(S,Z)||(u.ids=Z)};return{removeOne:r,removeMany:n,removeAll:o,addOne:M(a),updateOne:M(i),upsertOne:M(T),setOne:M(y),setMany:M(c),setAll:M(l),addMany:M(s),updateMany:M(d),upsertMany:M(g)}}function Tt(e={}){let{selectId:t,sortComparer:r}={sortComparer:!1,selectId:s=>s.id,...e},n=r?At(t,r):ge(t),o=ft(n),a=yt();return{selectId:t,sortComparer:r,...o,...a,...n}}var Mt=require("redux");var on="task",mt="listener",gt="completed",Ge="cancelled",St=`task-${Ge}`,kt=`task-${gt}`,Se=`${mt}-${Ge}`,xt=`${mt}-${gt}`,I=class{constructor(t){this.code=t;this.message=`${on} ${Ge} (reason: ${t})`}name="TaskAbortError";message};var ke=(e,t)=>{if(typeof e!="function")throw new TypeError(x(32))},K=()=>{},xe=(e,t=K)=>(e.catch(t),e),Ce=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),L=(e,t)=>{let r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))};var U=e=>{if(e.aborted){let{reason:t}=e;throw new I(t)}};function Be(e,t){let r=K;return new Promise((n,o)=>{let a=()=>o(new I(e.reason));if(e.aborted){a();return}r=Ce(e,a),t.finally(()=>r()).then(n,o)}).finally(()=>{r=K})}var Ct=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof I?"cancelled":"rejected",error:r}}finally{t?.()}},Y=e=>t=>xe(Be(e,t).then(r=>(U(e),r))),Ke=e=>{let t=Y(e);return r=>t(new Promise(n=>setTimeout(n,r)))};var{assign:H}=Object,Et={},Ee="listenerMiddleware",an=(e,t)=>{let r=n=>Ce(e,()=>L(n,e.reason));return(n,o)=>{ke(n,"taskExecutor");let a=new AbortController;r(a);let s=Ct(async()=>{U(e),U(a.signal);let y=await n({pause:Y(a.signal),delay:Ke(a.signal),signal:a.signal});return U(a.signal),y},()=>L(a,kt));return o?.autoJoin&&t.push(s.catch(K)),{result:Y(e)(s),cancel(){L(a,St)}}}},sn=(e,t)=>{let r=async(n,o)=>{U(t);let a=()=>{},y=[new Promise((c,l)=>{let i=e({predicate:n,effect:(d,T)=>{T.unsubscribe(),c([d,T.getState(),T.getOriginalState()])}});a=()=>{i(),l()}})];o!=null&&y.push(new Promise(c=>setTimeout(c,o,null)));try{let c=await Be(t,Promise.race(y));return U(t),c}finally{a()}};return(n,o)=>xe(r(n,o))},Pt=e=>{let{type:t,actionCreator:r,matcher:n,predicate:o,effect:a}=e;if(t)o=b(t).match;else if(r)t=r.type,o=r.match;else if(n)o=n;else if(!o)throw new Error(x(21));return ke(a,"options.listener"),{predicate:o,type:t,effect:a}},bt=H(e=>{let{type:t,predicate:r,effect:n}=Pt(e);return{id:O(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(x(22))}}},{withTypes:()=>bt}),Rt=(e,t)=>{let{type:r,effect:n,predicate:o}=Pt(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===o)&&a.effect===n)},He=e=>{e.pending.forEach(t=>{L(t,Se)})},cn=e=>()=>{e.forEach(He),e.clear()},wt=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Re=H(b(`${Ee}/add`),{withTypes:()=>Re}),qe=b(`${Ee}/removeAll`),we=H(b(`${Ee}/remove`),{withTypes:()=>we}),dn=(...e)=>{console.error(`${Ee}/error`,...e)},It=(e={})=>{let t=new Map,{extra:r,onError:n=dn}=e;ke(n,"onError");let o=i=>(i.unsubscribe=()=>t.delete(i.id),t.set(i.id,i),d=>{i.unsubscribe(),d?.cancelActive&&He(i)}),a=i=>{let d=Rt(t,i)??bt(i);return o(d)};H(a,{withTypes:()=>a});let s=i=>{let d=Rt(t,i);return d&&(d.unsubscribe(),i.cancelActive&&He(d)),!!d};H(s,{withTypes:()=>s});let y=async(i,d,T,g)=>{let p=new AbortController,h=sn(a,p.signal),u=[];try{i.pending.add(p),await Promise.resolve(i.effect(d,H({},T,{getOriginalState:g,condition:(f,k)=>h(f,k).then(Boolean),take:h,delay:Ke(p.signal),pause:Y(p.signal),extra:r,signal:p.signal,fork:an(p.signal,u),unsubscribe:i.unsubscribe,subscribe:()=>{t.set(i.id,i)},cancelActiveListeners:()=>{i.pending.forEach((f,k,A)=>{f!==p&&(L(f,Se),A.delete(f))})},cancel:()=>{L(p,Se),i.pending.delete(p)},throwIfCancelled:()=>{U(p.signal)}})))}catch(f){f instanceof I||wt(n,f,{raisedBy:"effect"})}finally{await Promise.all(u),L(p,xt),i.pending.delete(p)}},c=cn(t);return{middleware:i=>d=>T=>{if(!(0,Mt.isAction)(T))return d(T);if(Re.match(T))return a(T.payload);if(qe.match(T)){c();return}if(we.match(T))return s(T.payload);let g=i.getState(),p=()=>{if(g===Et)throw new Error(x(23));return g},h;try{if(h=d(T),t.size>0){let u=i.getState(),f=Array.from(t.values());for(let k of f){let A=!1;try{A=k.predicate(T,u,g)}catch(m){A=!1,wt(n,m,{raisedBy:"predicate"})}A&&y(k,T,i,p)}}}finally{g=Et}return h},startListening:a,stopListening:s,clearListeners:c}};var vt=require("redux");var un=e=>({middleware:e,applied:new Map}),ln=e=>t=>t?.meta?.instanceId===e,Dt=()=>{let e=O(),t=new Map,r=Object.assign(b("dynamicMiddleware/add",(...y)=>({payload:y,meta:{instanceId:e}})),{withTypes:()=>r}),n=Object.assign(function(...c){c.forEach(l=>{v(t,l,un)})},{withTypes:()=>n}),o=y=>{let c=Array.from(t.values()).map(l=>v(l.applied,y,l.middleware));return(0,vt.compose)(...c)},a=B(r,ln(e));return{middleware:y=>c=>l=>a(l)?(n(...l.payload),y.dispatch):o(y)(c)(l),addMiddleware:n,withMiddleware:r,instanceId:e}};var Ot=require("redux");var pn=e=>"reducerPath"in e&&typeof e.reducerPath=="string",fn=e=>e.flatMap(t=>pn(t)?[[t.reducerPath,t.reducer]]:Object.entries(t)),$e=Symbol.for("rtk-state-proxy-original"),yn=e=>!!e&&!!e[$e],hn=new WeakMap,An=(e,t,r)=>v(hn,e,()=>new Proxy(e,{get:(n,o,a)=>{if(o===$e)return n;let s=Reflect.get(n,o,a);if(typeof s>"u"){let y=r[o];if(typeof y<"u")return y;let c=t[o];if(c){let l=c(void 0,{type:O()});if(typeof l>"u")throw new Error(x(24));return r[o]=l,l}}return s}})),Tn=e=>{if(!yn(e))throw new Error(x(25));return e[$e]},mn={},gn=(e=mn)=>e;function Nt(...e){let t=Object.fromEntries(fn(e)),r=()=>Object.keys(t).length?(0,Ot.combineReducers)(t):gn,n=r();function o(c,l){return n(c,l)}o.withLazyLoadedSlices=()=>o;let a={},s=(c,l={})=>{let{reducerPath:i,reducer:d}=c,T=t[i];return!l.overrideExisting&&T&&T!==d?(typeof process<"u",o):(l.overrideExisting&&T!==d&&delete a[i],t[i]=d,n=r(),o)},y=Object.assign(function(l,i){return function(T,...g){return l(An(i?i(T,...g):T,t,a),...g)}},{original:Tn});return Object.assign(o,{inject:s,selector:y})}function x(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}0&&(module.exports={ReducerType,SHOULD_AUTOBATCH,TaskAbortError,Tuple,addListener,asyncThunkCreator,autoBatchEnhancer,buildCreateSlice,clearAllListeners,combineSlices,configureStore,createAction,createActionCreatorInvariantMiddleware,createAsyncThunk,createDraftSafeSelector,createDraftSafeSelectorCreator,createDynamicMiddleware,createEntityAdapter,createImmutableStateInvariantMiddleware,createListenerMiddleware,createNextState,createReducer,createSelector,createSelectorCreator,createSerializableStateInvariantMiddleware,createSlice,current,findNonSerializableValue,formatProdErrorMessage,freeze,isActionCreator,isAllOf,isAnyOf,isAsyncThunkAction,isDraft,isFluxStandardAction,isFulfilled,isImmutableDefault,isPending,isPlain,isRejected,isRejectedWithValue,lruMemoize,miniSerializeError,nanoid,original,prepareAutoBatched,removeListener,unwrapResult,weakMapMemoize,...require("redux")});
+//# sourceMappingURL=redux-toolkit.production.min.cjs.map
Index: node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.production.min.cjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/index.ts","../../src/createDraftSafeSelector.ts","../../src/configureStore.ts","../../src/devtoolsExtension.ts","../../src/getDefaultMiddleware.ts","../../src/createAction.ts","../../src/tsHelpers.ts","../../src/actionCreatorInvariantMiddleware.ts","../../src/utils.ts","../../src/immutableStateInvariantMiddleware.ts","../../src/serializableStateInvariantMiddleware.ts","../../src/autoBatchEnhancer.ts","../../src/getDefaultEnhancers.ts","../../src/createReducer.ts","../../src/mapBuilders.ts","../../src/matchers.ts","../../src/nanoid.ts","../../src/createAsyncThunk.ts","../../src/createSlice.ts","../../src/entities/entity_state.ts","../../src/entities/state_selectors.ts","../../src/entities/state_adapter.ts","../../src/entities/utils.ts","../../src/entities/unsorted_state_adapter.ts","../../src/entities/sorted_state_adapter.ts","../../src/entities/create_adapter.ts","../../src/listenerMiddleware/index.ts","../../src/listenerMiddleware/exceptions.ts","../../src/listenerMiddleware/utils.ts","../../src/listenerMiddleware/task.ts","../../src/dynamicMiddleware/index.ts","../../src/combineSlices.ts","../../src/formatProdErrorMessage.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from './formatProdErrorMessage';\nexport * from 'redux';\nexport { produce as createNextState, current, freeze, original, isDraft } from 'immer';\nexport type { Draft } from 'immer';\nexport { createSelector, createSelectorCreator, lruMemoize, weakMapMemoize } from 'reselect';\nexport type { Selector, OutputSelector } from 'reselect';\nexport { createDraftSafeSelector, createDraftSafeSelectorCreator } from './createDraftSafeSelector';\nexport type { ThunkAction, ThunkDispatch, ThunkMiddleware } from 'redux-thunk';\nexport {\n// js\nconfigureStore } from './configureStore';\nexport type {\n// types\nConfigureStoreOptions, EnhancedStore } from './configureStore';\nexport type { DevToolsEnhancerOptions } from './devtoolsExtension';\nexport {\n// js\ncreateAction, isActionCreator, isFSA as isFluxStandardAction } from './createAction';\nexport type {\n// types\nPayloadAction, PayloadActionCreator, ActionCreatorWithNonInferrablePayload, ActionCreatorWithOptionalPayload, ActionCreatorWithPayload, ActionCreatorWithoutPayload, ActionCreatorWithPreparedPayload, PrepareAction } from './createAction';\nexport {\n// js\ncreateReducer } from './createReducer';\nexport type {\n// types\nActions, CaseReducer, CaseReducers } from './createReducer';\nexport {\n// js\ncreateSlice, buildCreateSlice, asyncThunkCreator, ReducerType } from './createSlice';\nexport type {\n// types\nCreateSliceOptions, Slice, CaseReducerActions, SliceCaseReducers, ValidateSliceCaseReducers, CaseReducerWithPrepare, ReducerCreators, SliceSelectors } from './createSlice';\nexport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nexport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nexport {\n// js\ncreateImmutableStateInvariantMiddleware, isImmutableDefault } from './immutableStateInvariantMiddleware';\nexport type {\n// types\nImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\nexport {\n// js\ncreateSerializableStateInvariantMiddleware, findNonSerializableValue, isPlain } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nSerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nActionReducerMapBuilder } from './mapBuilders';\nexport { Tuple } from './utils';\nexport { createEntityAdapter } from './entities/create_adapter';\nexport type { EntityState, EntityAdapter, EntitySelectors, EntityStateAdapter, EntityId, Update, IdSelector, Comparer } from './entities/models';\nexport { createAsyncThunk, unwrapResult, miniSerializeError } from './createAsyncThunk';\nexport type { AsyncThunk, AsyncThunkOptions, AsyncThunkAction, AsyncThunkPayloadCreatorReturnValue, AsyncThunkPayloadCreator, GetState, GetThunkAPI, SerializedError, CreateAsyncThunkFunction } from './createAsyncThunk';\nexport {\n// js\nisAllOf, isAnyOf, isPending, isRejected, isFulfilled, isAsyncThunkAction, isRejectedWithValue } from './matchers';\nexport type {\n// types\nActionMatchingAllOf, ActionMatchingAnyOf } from './matchers';\nexport { nanoid } from './nanoid';\nexport type { ListenerEffect, ListenerMiddleware, ListenerEffectAPI, ListenerMiddlewareInstance, CreateListenerMiddlewareOptions, ListenerErrorHandler, TypedStartListening, TypedAddListener, TypedStopListening, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions, ForkedTaskExecutor, ForkedTask, ForkedTaskAPI, AsyncTaskExecutor, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult } from './listenerMiddleware/index';\nexport type { AnyListenerPredicate } from './listenerMiddleware/types';\nexport { createListenerMiddleware, addListener, removeListener, clearAllListeners, TaskAbortError } from './listenerMiddleware/index';\nexport type { AddMiddleware, DynamicDispatch, DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './dynamicMiddleware/types';\nexport { createDynamicMiddleware } from './dynamicMiddleware/index';\nexport { SHOULD_AUTOBATCH, prepareAutoBatched, autoBatchEnhancer } from './autoBatchEnhancer';\nexport type { AutoBatchOptions } from './autoBatchEnhancer';\nexport { combineSlices } from './combineSlices';\nexport type { CombinedSliceReducer, WithSlice } from './combineSlices';\nexport type { ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions, SafePromise } from './tsHelpers';\nexport { formatProdErrorMessage } from './formatProdErrorMessage';","import { current, isDraft } from 'immer';\nimport { createSelectorCreator, weakMapMemoize } from 'reselect';\nexport const createDraftSafeSelectorCreator: typeof createSelectorCreator = (...args: unknown[]) => {\n  const createSelector = (createSelectorCreator as any)(...args);\n  const createDraftSafeSelector = Object.assign((...args: unknown[]) => {\n    const selector = createSelector(...args);\n    const wrappedSelector = (value: unknown, ...rest: unknown[]) => selector(isDraft(value) ? current(value) : value, ...rest);\n    Object.assign(wrappedSelector, selector);\n    return wrappedSelector as any;\n  }, {\n    withTypes: () => createDraftSafeSelector\n  });\n  return createDraftSafeSelector;\n};\n\n/**\n * \"Draft-Safe\" version of `reselect`'s `createSelector`:\n * If an `immer`-drafted object is passed into the resulting selector's first argument,\n * the selector will act on the current draft value, instead of returning a cached value\n * that might be possibly outdated if the draft has been modified since.\n * @public\n */\nexport const createDraftSafeSelector = /* @__PURE__ */\ncreateDraftSafeSelectorCreator(weakMapMemoize);","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Reducer, ReducersMapObject, Middleware, Action, StoreEnhancer, Store, UnknownAction } from 'redux';\nimport { applyMiddleware, createStore, compose, combineReducers, isPlainObject } from 'redux';\nimport type { DevToolsEnhancerOptions as DevToolsOptions } from './devtoolsExtension';\nimport { composeWithDevTools } from './devtoolsExtension';\nimport type { ThunkMiddlewareFor, GetDefaultMiddleware } from './getDefaultMiddleware';\nimport { buildGetDefaultMiddleware } from './getDefaultMiddleware';\nimport type { ExtractDispatchExtensions, ExtractStoreExtensions, ExtractStateExtensions, UnknownIfNonSpecific } from './tsHelpers';\nimport type { Tuple } from './utils';\nimport type { GetDefaultEnhancers } from './getDefaultEnhancers';\nimport { buildGetDefaultEnhancers } from './getDefaultEnhancers';\n\n/**\n * Options for `configureStore()`.\n *\n * @public\n */\nexport interface ConfigureStoreOptions<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<Middlewares<S>>, E extends Tuple<Enhancers> = Tuple<Enhancers>, P = S> {\n  /**\n   * A single reducer function that will be used as the root reducer, or an\n   * object of slice reducers that will be passed to `combineReducers()`.\n   */\n  reducer: Reducer<S, A, P> | ReducersMapObject<S, A, P>;\n\n  /**\n   * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.\n   * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.\n   *\n   * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`\n   * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage\n   */\n  middleware?: (getDefaultMiddleware: GetDefaultMiddleware<S>) => M;\n\n  /**\n   * Whether to enable Redux DevTools integration. Defaults to `true`.\n   *\n   * Additional configuration can be done by passing Redux DevTools options\n   */\n  devTools?: boolean | DevToolsOptions;\n\n  /**\n   * Whether to check for duplicate middleware instances. Defaults to `true`.\n   */\n  duplicateMiddlewareCheck?: boolean;\n\n  /**\n   * The initial state, same as Redux's createStore.\n   * You may optionally specify it to hydrate the state\n   * from the server in universal apps, or to restore a previously serialized\n   * user session. If you use `combineReducers()` to produce the root reducer\n   * function (either directly or indirectly by passing an object as `reducer`),\n   * this must be an object with the same shape as the reducer map keys.\n   */\n  // we infer here, and instead complain if the reducer doesn't match\n  preloadedState?: P;\n\n  /**\n   * The store enhancers to apply. See Redux's `createStore()`.\n   * All enhancers will be included before the DevTools Extension enhancer.\n   * If you need to customize the order of enhancers, supply a callback\n   * function that will receive a `getDefaultEnhancers` function that returns a Tuple,\n   * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).\n   * If you only need to add middleware, you can use the `middleware` parameter instead.\n   */\n  enhancers?: (getDefaultEnhancers: GetDefaultEnhancers<M>) => E;\n}\nexport type Middlewares<S> = ReadonlyArray<Middleware<{}, S>>;\ntype Enhancers = ReadonlyArray<StoreEnhancer>;\n\n/**\n * A Redux store returned by `configureStore()`. Supports dispatching\n * side-effectful _thunks_ in addition to plain actions.\n *\n * @public\n */\nexport type EnhancedStore<S = any, A extends Action = UnknownAction, E extends Enhancers = Enhancers> = ExtractStoreExtensions<E> & Store<S, A, UnknownIfNonSpecific<ExtractStateExtensions<E>>>;\n\n/**\n * A friendly abstraction over the standard Redux `createStore()` function.\n *\n * @param options The store configuration.\n * @returns A configured Redux store.\n *\n * @public\n */\nexport function configureStore<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<[ThunkMiddlewareFor<S>]>, E extends Tuple<Enhancers> = Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>, StoreEnhancer]>, P = S>(options: ConfigureStoreOptions<S, A, M, E, P>): EnhancedStore<S, A, E> {\n  const getDefaultMiddleware = buildGetDefaultMiddleware<S>();\n  const {\n    reducer = undefined,\n    middleware,\n    devTools = true,\n    duplicateMiddlewareCheck = true,\n    preloadedState = undefined,\n    enhancers = undefined\n  } = options || {};\n  let rootReducer: Reducer<S, A, P>;\n  if (typeof reducer === 'function') {\n    rootReducer = reducer;\n  } else if (isPlainObject(reducer)) {\n    rootReducer = combineReducers(reducer) as unknown as Reducer<S, A, P>;\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(1) : '`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\n  }\n  if (process.env.NODE_ENV !== 'production' && middleware && typeof middleware !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(2) : '`middleware` field must be a callback');\n  }\n  let finalMiddleware: Tuple<Middlewares<S>>;\n  if (typeof middleware === 'function') {\n    finalMiddleware = middleware(getDefaultMiddleware);\n    if (process.env.NODE_ENV !== 'production' && !Array.isArray(finalMiddleware)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(3) : 'when using a middleware builder function, an array of middleware must be returned');\n    }\n  } else {\n    finalMiddleware = getDefaultMiddleware();\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(4) : 'each middleware provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && duplicateMiddlewareCheck) {\n    let middlewareReferences = new Set<Middleware<any, S>>();\n    finalMiddleware.forEach(middleware => {\n      if (middlewareReferences.has(middleware)) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(42) : 'Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.');\n      }\n      middlewareReferences.add(middleware);\n    });\n  }\n  let finalCompose = compose;\n  if (devTools) {\n    finalCompose = composeWithDevTools({\n      // Enable capture of stack traces for dispatched Redux actions\n      trace: process.env.NODE_ENV !== 'production',\n      ...(typeof devTools === 'object' && devTools)\n    });\n  }\n  const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n  const getDefaultEnhancers = buildGetDefaultEnhancers<M>(middlewareEnhancer);\n  if (process.env.NODE_ENV !== 'production' && enhancers && typeof enhancers !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : '`enhancers` field must be a callback');\n  }\n  let storeEnhancers = typeof enhancers === 'function' ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n  if (process.env.NODE_ENV !== 'production' && !Array.isArray(storeEnhancers)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : '`enhancers` callback must return an array');\n  }\n  if (process.env.NODE_ENV !== 'production' && storeEnhancers.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : 'each enhancer provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n    console.error('middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`');\n  }\n  const composedEnhancer: StoreEnhancer<any> = finalCompose(...storeEnhancers);\n  return createStore(rootReducer, preloadedState as P, composedEnhancer);\n}","import type { Action, ActionCreator, StoreEnhancer } from 'redux';\nimport { compose } from 'redux';\n\n/**\r\n * @public\r\n */\nexport interface DevToolsEnhancerOptions {\n  /**\r\n   * the instance name to be showed on the monitor page. Default value is `document.title`.\r\n   * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.\r\n   */\n  name?: string;\n  /**\r\n   * action creators functions to be available in the Dispatcher.\r\n   */\n  actionCreators?: ActionCreator<any>[] | {\n    [key: string]: ActionCreator<any>;\n  };\n  /**\r\n   * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.\r\n   * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.\r\n   * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).\r\n   *\r\n   * @default 500 ms.\r\n   */\n  latency?: number;\n  /**\r\n   * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.\r\n   *\r\n   * @default 50\r\n   */\n  maxAge?: number;\n  /**\r\n   * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you\r\n   * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`\r\n   * functions.\r\n   */\n  serialize?: boolean | {\n    /**\r\n     * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).\r\n     * - `false` - will handle also circular references.\r\n     * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.\r\n     * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.\r\n     *   For each of them you can indicate if to include (by setting as `true`).\r\n     *   For `function` key you can also specify a custom function which handles serialization.\r\n     *   See [`jsan`](https://github.com/kolodny/jsan) for more details.\r\n     */\n    options?: undefined | boolean | {\n      date?: true;\n      regex?: true;\n      undefined?: true;\n      error?: true;\n      symbol?: true;\n      map?: true;\n      set?: true;\n      function?: true | ((fn: (...args: any[]) => any) => string);\n    };\n    /**\r\n     * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.\r\n     * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)\r\n     * key. So you can deserialize it back while importing or persisting data.\r\n     * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):\r\n     */\n    replacer?: (key: string, value: unknown) => any;\n    /**\r\n     * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)\r\n     * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)\r\n     * as an example on how to serialize special data types and get them back.\r\n     */\n    reviver?: (key: string, value: unknown) => any;\n    /**\r\n     * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).\r\n     * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.\r\n     * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.\r\n     */\n    immutable?: any;\n    /**\r\n     * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...\r\n     */\n    refs?: any;\n  };\n  /**\r\n   * function which takes `action` object and id number as arguments, and should return `action` object back.\r\n   */\n  actionSanitizer?: <A extends Action>(action: A, id: number) => A;\n  /**\r\n   * function which takes `state` object and index as arguments, and should return `state` object back.\r\n   */\n  stateSanitizer?: <S>(state: S, index: number) => S;\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsDenylist?: string | string[];\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsAllowlist?: string | string[];\n  /**\r\n   * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.\r\n   * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.\r\n   */\n  predicate?: <S, A extends Action>(state: S, action: A) => boolean;\n  /**\r\n   * if specified as `false`, it will not record the changes till clicking on `Start recording` button.\r\n   * Available only for Redux enhancer, for others use `autoPause`.\r\n   *\r\n   * @default true\r\n   */\n  shouldRecordChanges?: boolean;\n  /**\r\n   * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.\r\n   * If not specified, will commit when paused. Available only for Redux enhancer.\r\n   *\r\n   * @default \"@@PAUSED\"\"\r\n   */\n  pauseActionType?: string;\n  /**\r\n   * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\r\n   * Not available for Redux enhancer (as it already does it but storing the data to be sent).\r\n   *\r\n   * @default false\r\n   */\n  autoPause?: boolean;\n  /**\r\n   * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.\r\n   * Available only for Redux enhancer.\r\n   *\r\n   * @default false\r\n   */\n  shouldStartLocked?: boolean;\n  /**\r\n   * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.\r\n   *\r\n   * @default true\r\n   */\n  shouldHotReload?: boolean;\n  /**\r\n   * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.\r\n   *\r\n   * @default false\r\n   */\n  shouldCatchErrors?: boolean;\n  /**\r\n   * If you want to restrict the extension, specify the features you allow.\r\n   * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.\r\n   * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.\r\n   * Otherwise, you'll get/set the data right from the monitor part.\r\n   */\n  features?: {\n    /**\r\n     * start/pause recording of dispatched actions\r\n     */\n    pause?: boolean;\n    /**\r\n     * lock/unlock dispatching actions and side effects\r\n     */\n    lock?: boolean;\n    /**\r\n     * persist states on page reloading\r\n     */\n    persist?: boolean;\n    /**\r\n     * export history of actions in a file\r\n     */\n    export?: boolean | 'custom';\n    /**\r\n     * import history of actions from a file\r\n     */\n    import?: boolean | 'custom';\n    /**\r\n     * jump back and forth (time travelling)\r\n     */\n    jump?: boolean;\n    /**\r\n     * skip (cancel) actions\r\n     */\n    skip?: boolean;\n    /**\r\n     * drag and drop actions in the history list\r\n     */\n    reorder?: boolean;\n    /**\r\n     * dispatch custom actions or action creators\r\n     */\n    dispatch?: boolean;\n    /**\r\n     * generate tests for the selected actions\r\n     */\n    test?: boolean;\n  };\n  /**\r\n   * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.\r\n   * Defaults to false.\r\n   */\n  trace?: boolean | (<A extends Action>(action: A) => string);\n  /**\r\n   * The maximum number of stack trace entries to record per action. Defaults to 10.\r\n   */\n  traceLimit?: number;\n}\ntype Compose = typeof compose;\ninterface ComposeWithDevTools {\n  (options: DevToolsEnhancerOptions): Compose;\n  <StoreExt extends {}>(...funcs: StoreEnhancer<StoreExt>[]): StoreEnhancer<StoreExt>;\n}\n\n/**\r\n * @public\r\n */\nexport const composeWithDevTools: ComposeWithDevTools = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\n  if (arguments.length === 0) return undefined;\n  if (typeof arguments[0] === 'object') return compose;\n  return compose.apply(null, arguments as any as Function[]);\n};\n\n/**\r\n * @public\r\n */\nexport const devToolsEnhancer: {\n  (options: DevToolsEnhancerOptions): StoreEnhancer<any>;\n} = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION__ : function () {\n  return function (noop) {\n    return noop;\n  };\n};","import type { Middleware, UnknownAction } from 'redux';\nimport type { ThunkMiddleware } from 'redux-thunk';\nimport { thunk as thunkMiddleware, withExtraArgument } from 'redux-thunk';\nimport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nimport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nimport type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\n/* PROD_START_REMOVE_UMD */\nimport { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware';\n/* PROD_STOP_REMOVE_UMD */\n\nimport type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nimport { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware';\nimport type { ExcludeFromTuple } from './tsHelpers';\nimport { Tuple } from './utils';\nfunction isBoolean(x: any): x is boolean {\n  return typeof x === 'boolean';\n}\ninterface ThunkOptions<E = any> {\n  extraArgument: E;\n}\ninterface GetDefaultMiddlewareOptions {\n  thunk?: boolean | ThunkOptions;\n  immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions;\n  serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions;\n  actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions;\n}\nexport type ThunkMiddlewareFor<S, O extends GetDefaultMiddlewareOptions = {}> = O extends {\n  thunk: false;\n} ? never : O extends {\n  thunk: {\n    extraArgument: infer E;\n  };\n} ? ThunkMiddleware<S, UnknownAction, E> : ThunkMiddleware<S, UnknownAction>;\nexport type GetDefaultMiddleware<S = any> = <O extends GetDefaultMiddlewareOptions = {\n  thunk: true;\n  immutableCheck: true;\n  serializableCheck: true;\n  actionCreatorCheck: true;\n}>(options?: O) => Tuple<ExcludeFromTuple<[ThunkMiddlewareFor<S, O>], never>>;\nexport const buildGetDefaultMiddleware = <S = any,>(): GetDefaultMiddleware<S> => function getDefaultMiddleware(options) {\n  const {\n    thunk = true,\n    immutableCheck = true,\n    serializableCheck = true,\n    actionCreatorCheck = true\n  } = options ?? {};\n  let middlewareArray = new Tuple<Middleware[]>();\n  if (thunk) {\n    if (isBoolean(thunk)) {\n      middlewareArray.push(thunkMiddleware);\n    } else {\n      middlewareArray.push(withExtraArgument(thunk.extraArgument));\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (immutableCheck) {\n      /* PROD_START_REMOVE_UMD */\n      let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(immutableCheck)) {\n        immutableOptions = immutableCheck;\n      }\n      middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n      /* PROD_STOP_REMOVE_UMD */\n    }\n    if (serializableCheck) {\n      let serializableOptions: SerializableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(serializableCheck)) {\n        serializableOptions = serializableCheck;\n      }\n      middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n    }\n    if (actionCreatorCheck) {\n      let actionCreatorOptions: ActionCreatorInvariantMiddlewareOptions = {};\n      if (!isBoolean(actionCreatorCheck)) {\n        actionCreatorOptions = actionCreatorCheck;\n      }\n      middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n    }\n  }\n  return middlewareArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport { isAction } from 'redux';\nimport type { IsUnknownOrNonInferrable, IfMaybeUndefined, IfVoid, IsAny } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\n\n/**\n * An action with a string type and an associated payload. This is the\n * type of action returned by `createAction()` action creators.\n *\n * @template P The type of the action's payload.\n * @template T the type used for the action type.\n * @template M The type of the action's meta (optional)\n * @template E The type of the action's error (optional)\n *\n * @public\n */\nexport type PayloadAction<P = void, T extends string = string, M = never, E = never> = {\n  payload: P;\n  type: T;\n} & ([M] extends [never] ? {} : {\n  meta: M;\n}) & ([E] extends [never] ? {} : {\n  error: E;\n});\n\n/**\n * A \"prepare\" method to be used as the second parameter of `createAction`.\n * Takes any number of arguments and returns a Flux Standard Action without\n * type (will be added later) that *must* contain a payload (might be undefined).\n *\n * @public\n */\nexport type PrepareAction<P> = ((...args: any[]) => {\n  payload: P;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  error: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n  error: any;\n});\n\n/**\n * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.\n *\n * @internal\n */\nexport type _ActionCreatorWithPreparedPayload<PA extends PrepareAction<any> | void, T extends string = string> = PA extends PrepareAction<infer P> ? ActionCreatorWithPreparedPayload<Parameters<PA>, P, T, ReturnType<PA> extends {\n  error: infer E;\n} ? E : never, ReturnType<PA> extends {\n  meta: infer M;\n} ? M : never> : void;\n\n/**\n * Basic type for all action creators.\n *\n * @inheritdoc {redux#ActionCreator}\n */\nexport type BaseActionCreator<P, T extends string, M = never, E = never> = {\n  type: T;\n  match: (action: unknown) => action is PayloadAction<P, T, M, E>;\n};\n\n/**\n * An action creator that takes multiple arguments that are passed\n * to a `PrepareAction` method to create the final Action.\n * @typeParam Args arguments for the action creator function\n * @typeParam P `payload` type\n * @typeParam T `type` name\n * @typeParam E optional `error` type\n * @typeParam M optional `meta` type\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPreparedPayload<Args extends unknown[], P, T extends string = string, E = never, M = never> extends BaseActionCreator<P, T, M, E> {\n  /**\n   * Calling this {@link redux#ActionCreator} with `Args` will return\n   * an Action with a payload of type `P` and (depending on the `PrepareAction`\n   * method used) a `meta`- and `error` property of types `M` and `E` respectively.\n   */\n  (...args: Args): PayloadAction<P, T, M, E>;\n}\n\n/**\n * An action creator of type `T` that takes an optional payload of type `P`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithOptionalPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`.\n   * Calling it without an argument will return a PayloadAction with a payload of `undefined`.\n   */\n  (payload?: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` that takes no payload.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithoutPayload<T extends string = string> extends BaseActionCreator<undefined, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} will\n   * return a {@link PayloadAction} of type `T` with a payload of `undefined`\n   */\n  (noArgument: void): PayloadAction<undefined, T>;\n}\n\n/**\n * An action creator of type `T` that requires a payload of type P.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`\n   */\n  (payload: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithNonInferrablePayload<T extends string = string> extends BaseActionCreator<unknown, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload\n   * of exactly the type of the argument.\n   */\n  <PT extends unknown>(payload: PT): PayloadAction<PT, T>;\n}\n\n/**\n * An action creator that produces actions with a `payload` attribute.\n *\n * @typeParam P the `payload` type\n * @typeParam T the `type` of the resulting action\n * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.\n *\n * @public\n */\nexport type PayloadActionCreator<P = void, T extends string = string, PA extends PrepareAction<P> | void = void> = IfPrepareActionMethodProvided<PA, _ActionCreatorWithPreparedPayload<PA, T>,\n// else\nIsAny<P, ActionCreatorWithPayload<any, T>, IsUnknownOrNonInferrable<P, ActionCreatorWithNonInferrablePayload<T>,\n// else\nIfVoid<P, ActionCreatorWithoutPayload<T>,\n// else\nIfMaybeUndefined<P, ActionCreatorWithOptionalPayload<P, T>,\n// else\nActionCreatorWithPayload<P, T>>>>>>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<P = void, T extends string = string>(type: T): PayloadActionCreator<P, T>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<PA extends PrepareAction<any>, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>;\nexport function createAction(type: string, prepareAction?: Function): any {\n  function actionCreator(...args: any[]) {\n    if (prepareAction) {\n      let prepared = prepareAction(...args);\n      if (!prepared) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(0) : 'prepareAction did not return an object');\n      }\n      return {\n        type,\n        payload: prepared.payload,\n        ...('meta' in prepared && {\n          meta: prepared.meta\n        }),\n        ...('error' in prepared && {\n          error: prepared.error\n        })\n      };\n    }\n    return {\n      type,\n      payload: args[0]\n    };\n  }\n  actionCreator.toString = () => `${type}`;\n  actionCreator.type = type;\n  actionCreator.match = (action: unknown): action is PayloadAction => isAction(action) && action.type === type;\n  return actionCreator;\n}\n\n/**\n * Returns true if value is an RTK-like action creator, with a static type property and match method.\n */\nexport function isActionCreator(action: unknown): action is BaseActionCreator<unknown, string> & Function {\n  return typeof action === 'function' && 'type' in action &&\n  // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n  hasMatchFunction(action as any);\n}\n\n/**\n * Returns true if value is an action with a string type and valid Flux Standard Action keys.\n */\nexport function isFSA(action: unknown): action is {\n  type: string;\n  payload?: unknown;\n  error?: unknown;\n  meta?: unknown;\n} {\n  return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key: string) {\n  return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1;\n}\n\n// helper types for more readable typings\n\ntype IfPrepareActionMethodProvided<PA extends PrepareAction<any> | void, True, False> = PA extends ((...args: any[]) => any) ? True : False;","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { Middleware } from 'redux';\nimport { isActionCreator as isRTKAction } from './createAction';\nexport interface ActionCreatorInvariantMiddlewareOptions {\n  /**\n   * The function to identify whether a value is an action creator.\n   * The default checks for a function with a static type property and match method.\n   */\n  isActionCreator?: (action: unknown) => action is Function & {\n    type?: unknown;\n  };\n}\nexport function getMessage(type?: unknown) {\n  const splitType = type ? `${type}`.split('/') : [];\n  const actionName = splitType[splitType.length - 1] || 'actionCreator';\n  return `Detected an action creator with type \"${type || 'unknown'}\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nexport function createActionCreatorInvariantMiddleware(options: ActionCreatorInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  }\n  const {\n    isActionCreator = isRTKAction\n  } = options;\n  return () => next => action => {\n    if (isActionCreator(action)) {\n      console.warn(getMessage(action.type));\n    }\n    return next(action);\n  };\n}","import { produce as createNextState, isDraftable } from 'immer';\nexport function getTimeMeasureUtils(maxDelay: number, fnName: string) {\n  let elapsed = 0;\n  return {\n    measureTime<T>(fn: () => T): T {\n      const started = Date.now();\n      try {\n        return fn();\n      } finally {\n        const finished = Date.now();\n        elapsed += finished - started;\n      }\n    },\n    warnIfExceeded() {\n      if (elapsed > maxDelay) {\n        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n      }\n    }\n  };\n}\nexport function delay(ms: number) {\n  return new Promise(resolve => setTimeout(resolve, ms));\n}\nexport class Tuple<Items extends ReadonlyArray<unknown> = []> extends Array<Items[number]> {\n  constructor(length: number);\n  constructor(...items: Items);\n  constructor(...items: any[]) {\n    super(...items);\n    Object.setPrototypeOf(this, Tuple.prototype);\n  }\n  static override get [Symbol.species]() {\n    return Tuple as any;\n  }\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat(...arr: any[]) {\n    return super.concat.apply(this, arr);\n  }\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend(...arr: any[]) {\n    if (arr.length === 1 && Array.isArray(arr[0])) {\n      return new Tuple(...arr[0].concat(this));\n    }\n    return new Tuple(...arr.concat(this));\n  }\n}\nexport function freezeDraftable<T>(val: T) {\n  return isDraftable(val) ? createNextState(val, () => {}) : val;\n}\nexport function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}\nexport function getOrInsertComputed<K extends object, V>(map: WeakMap<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, compute: (key: K) => V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, compute(key)).get(key) as V;\n}\nexport function promiseWithResolvers<T>(): {\n  promise: Promise<T>;\n  resolve: (value: T | PromiseLike<T>) => void;\n  reject: (reason?: any) => void;\n} {\n  let resolve: any;\n  let reject: any;\n  const promise = new Promise<T>((res, rej) => {\n    resolve = res;\n    reject = rej;\n  });\n  return {\n    promise,\n    resolve,\n    reject\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Middleware } from 'redux';\nimport type { IgnorePaths } from './serializableStateInvariantMiddleware';\nimport { getTimeMeasureUtils } from './utils';\ntype EntryProcessor = (key: string, value: any) => any;\n\n/**\n * The default `isImmutable` function.\n *\n * @public\n */\nexport function isImmutableDefault(value: unknown): boolean {\n  return typeof value !== 'object' || value == null || Object.isFrozen(value);\n}\nexport function trackForMutations(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths | undefined, obj: any) {\n  const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\n  return {\n    detectMutations() {\n      return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\n    }\n  };\n}\ninterface TrackedProperty {\n  value: any;\n  children: Record<string, any>;\n}\nfunction trackProperties(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths = [], obj: Record<string, any>, path: string = '', checkedObjects: Set<Record<string, any>> = new Set()) {\n  const tracked: Partial<TrackedProperty> = {\n    value: obj\n  };\n  if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n    checkedObjects.add(obj);\n    tracked.children = {};\n    for (const key in obj) {\n      const childPath = path ? path + '.' + key : key;\n      if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\n        continue;\n      }\n      tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\n    }\n  }\n  return tracked as TrackedProperty;\n}\nfunction detectMutations(isImmutable: IsImmutableFunc, ignoredPaths: IgnorePaths = [], trackedProperty: TrackedProperty, obj: any, sameParentRef: boolean = false, path: string = ''): {\n  wasMutated: boolean;\n  path?: string;\n} {\n  const prevObj = trackedProperty ? trackedProperty.value : undefined;\n  const sameRef = prevObj === obj;\n  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n    return {\n      wasMutated: true,\n      path\n    };\n  }\n  if (isImmutable(prevObj) || isImmutable(obj)) {\n    return {\n      wasMutated: false\n    };\n  }\n\n  // Gather all keys from prev (tracked) and after objs\n  const keysToDetect: Record<string, boolean> = {};\n  for (let key in trackedProperty.children) {\n    keysToDetect[key] = true;\n  }\n  for (let key in obj) {\n    keysToDetect[key] = true;\n  }\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (let key in keysToDetect) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n    if (result.wasMutated) {\n      return result;\n    }\n  }\n  return {\n    wasMutated: false\n  };\n}\ntype IsImmutableFunc = (value: any) => boolean;\n\n/**\n * Options for `createImmutableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface ImmutableStateInvariantMiddlewareOptions {\n  /**\n    Callback function to check if a value is considered to be immutable.\n    This function is applied recursively to every value contained in the state.\n    The default implementation will return true for primitive types\n    (like numbers, strings, booleans, null and undefined).\n   */\n  isImmutable?: IsImmutableFunc;\n  /**\n    An array of dot-separated path strings that match named nodes from\n    the root state to ignore when checking for immutability.\n    Defaults to undefined\n   */\n  ignoredPaths?: IgnorePaths;\n  /** Print a warning if checks take longer than N ms. Default: 32ms */\n  warnAfter?: number;\n}\n\n/**\n * Creates a middleware that checks whether any state was mutated in between\n * dispatches or during a dispatch. If any mutations are detected, an error is\n * thrown.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createImmutableStateInvariantMiddleware(options: ImmutableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    function stringify(obj: any, serializer?: EntryProcessor, indent?: string | number, decycler?: EntryProcessor): string {\n      return JSON.stringify(obj, getSerialize(serializer, decycler), indent);\n    }\n    function getSerialize(serializer?: EntryProcessor, decycler?: EntryProcessor): EntryProcessor {\n      let stack: any[] = [],\n        keys: any[] = [];\n      if (!decycler) decycler = function (_: string, value: any) {\n        if (stack[0] === value) return '[Circular ~]';\n        return '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']';\n      };\n      return function (this: any, key: string, value: any) {\n        if (stack.length > 0) {\n          var thisPos = stack.indexOf(this);\n          ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n          ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n          if (~stack.indexOf(value)) value = decycler!.call(this, key, value);\n        } else stack.push(value);\n        return serializer == null ? value : serializer.call(this, key, value);\n      };\n    }\n    let {\n      isImmutable = isImmutableDefault,\n      ignoredPaths,\n      warnAfter = 32\n    } = options;\n    const track = trackForMutations.bind(null, isImmutable, ignoredPaths);\n    return ({\n      getState\n    }) => {\n      let state = getState();\n      let tracker = track(state);\n      let result;\n      return next => action => {\n        const measureUtils = getTimeMeasureUtils(warnAfter, 'ImmutableStateInvariantMiddleware');\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ''}'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        const dispatchedAction = next(action);\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ''}. Take a look at the reducer(s) handling the action ${stringify(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n        return dispatchedAction;\n      };\n    };\n  }\n}","import type { Middleware } from 'redux';\nimport { isAction, isPlainObject } from 'redux';\nimport { getTimeMeasureUtils } from './utils';\n\n/**\n * Returns true if the passed value is \"plain\", i.e. a value that is either\n * directly JSON-serializable (boolean, number, string, array, plain object)\n * or `undefined`.\n *\n * @param val The value to check.\n *\n * @public\n */\nexport function isPlain(val: any) {\n  const type = typeof val;\n  return val == null || type === 'string' || type === 'boolean' || type === 'number' || Array.isArray(val) || isPlainObject(val);\n}\ninterface NonSerializableValue {\n  keyPath: string;\n  value: unknown;\n}\nexport type IgnorePaths = readonly (string | RegExp)[];\n\n/**\n * @public\n */\nexport function findNonSerializableValue(value: unknown, path: string = '', isSerializable: (value: unknown) => boolean = isPlain, getEntries?: (value: unknown) => [string, any][], ignoredPaths: IgnorePaths = [], cache?: WeakSet<object>): NonSerializableValue | false {\n  let foundNestedSerializable: NonSerializableValue | false;\n  if (!isSerializable(value)) {\n    return {\n      keyPath: path || '<root>',\n      value: value\n    };\n  }\n  if (typeof value !== 'object' || value === null) {\n    return false;\n  }\n  if (cache?.has(value)) return false;\n  const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (const [key, nestedValue] of entries) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    if (!isSerializable(nestedValue)) {\n      return {\n        keyPath: nestedPath,\n        value: nestedValue\n      };\n    }\n    if (typeof nestedValue === 'object') {\n      foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n      if (foundNestedSerializable) {\n        return foundNestedSerializable;\n      }\n    }\n  }\n  if (cache && isNestedFrozen(value)) cache.add(value);\n  return false;\n}\nexport function isNestedFrozen(value: object) {\n  if (!Object.isFrozen(value)) return false;\n  for (const nestedValue of Object.values(value)) {\n    if (typeof nestedValue !== 'object' || nestedValue === null) continue;\n    if (!isNestedFrozen(nestedValue)) return false;\n  }\n  return true;\n}\n\n/**\n * Options for `createSerializableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface SerializableStateInvariantMiddlewareOptions {\n  /**\n   * The function to check if a value is considered serializable. This\n   * function is applied recursively to every value contained in the\n   * state. Defaults to `isPlain()`.\n   */\n  isSerializable?: (value: any) => boolean;\n  /**\n   * The function that will be used to retrieve entries from each\n   * value.  If unspecified, `Object.entries` will be used. Defaults\n   * to `undefined`.\n   */\n  getEntries?: (value: any) => [string, any][];\n\n  /**\n   * An array of action types to ignore when checking for serializability.\n   * Defaults to []\n   */\n  ignoredActions?: string[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to\n   * ['meta.arg', 'meta.baseQueryMeta']\n   */\n  ignoredActionPaths?: (string | RegExp)[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to []\n   */\n  ignoredPaths?: (string | RegExp)[];\n  /**\n   * Execution time warning threshold. If the middleware takes longer\n   * than `warnAfter` ms, a warning will be displayed in the console.\n   * Defaults to 32ms.\n   */\n  warnAfter?: number;\n\n  /**\n   * Opt out of checking state. When set to `true`, other state-related params will be ignored.\n   */\n  ignoreState?: boolean;\n\n  /**\n   * Opt out of checking actions. When set to `true`, other action-related params will be ignored.\n   */\n  ignoreActions?: boolean;\n\n  /**\n   * Opt out of caching the results. The cache uses a WeakSet and speeds up repeated checking processes.\n   * The cache is automatically disabled if no browser support for WeakSet is present.\n   */\n  disableCache?: boolean;\n}\n\n/**\n * Creates a middleware that, after every state change, checks if the new\n * state is serializable. If a non-serializable value is found within the\n * state, an error is printed to the console.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createSerializableStateInvariantMiddleware(options: SerializableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    const {\n      isSerializable = isPlain,\n      getEntries,\n      ignoredActions = [],\n      ignoredActionPaths = ['meta.arg', 'meta.baseQueryMeta'],\n      ignoredPaths = [],\n      warnAfter = 32,\n      ignoreState = false,\n      ignoreActions = false,\n      disableCache = false\n    } = options;\n    const cache: WeakSet<object> | undefined = !disableCache && WeakSet ? new WeakSet() : undefined;\n    return storeAPI => next => action => {\n      if (!isAction(action)) {\n        return next(action);\n      }\n      const result = next(action);\n      const measureUtils = getTimeMeasureUtils(warnAfter, 'SerializableStateInvariantMiddleware');\n      if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type as any) !== -1)) {\n        measureUtils.measureTime(() => {\n          const foundActionNonSerializableValue = findNonSerializableValue(action, '', isSerializable, getEntries, ignoredActionPaths, cache);\n          if (foundActionNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundActionNonSerializableValue;\n            console.error(`A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`, value, '\\nTake a look at the logic that dispatched this action: ', action, '\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)', '\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)');\n          }\n        });\n      }\n      if (!ignoreState) {\n        measureUtils.measureTime(() => {\n          const state = storeAPI.getState();\n          const foundStateNonSerializableValue = findNonSerializableValue(state, '', isSerializable, getEntries, ignoredPaths, cache);\n          if (foundStateNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundStateNonSerializableValue;\n            console.error(`A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`, value, `\nTake a look at the reducer(s) handling this action type: ${action.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n      }\n      return result;\n    };\n  }\n}","import type { StoreEnhancer } from 'redux';\nexport const SHOULD_AUTOBATCH = 'RTK_autoBatch';\nexport const prepareAutoBatched = <T,>() => (payload: T): {\n  payload: T;\n  meta: unknown;\n} => ({\n  payload,\n  meta: {\n    [SHOULD_AUTOBATCH]: true\n  }\n});\nconst createQueueWithTimer = (timeout: number) => {\n  return (notify: () => void) => {\n    setTimeout(notify, timeout);\n  };\n};\nexport type AutoBatchOptions = {\n  type: 'tick';\n} | {\n  type: 'timer';\n  timeout: number;\n} | {\n  type: 'raf';\n} | {\n  type: 'callback';\n  queueNotification: (notify: () => void) => void;\n};\n\n/**\n * A Redux store enhancer that watches for \"low-priority\" actions, and delays\n * notifying subscribers until either the queued callback executes or the\n * next \"standard-priority\" action is dispatched.\n *\n * This allows dispatching multiple \"low-priority\" actions in a row with only\n * a single subscriber notification to the UI after the sequence of actions\n * is finished, thus improving UI re-render performance.\n *\n * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.\n * This can be added to `action.meta` manually, or by using the\n * `prepareAutoBatched` helper.\n *\n * By default, it will queue a notification for the end of the event loop tick.\n * However, you can pass several other options to configure the behavior:\n * - `{type: 'tick'}`: queues using `queueMicrotask`\n * - `{type: 'timer', timeout: number}`: queues using `setTimeout`\n * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)\n * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback\n *\n *\n */\nexport const autoBatchEnhancer = (options: AutoBatchOptions = {\n  type: 'raf'\n}): StoreEnhancer => next => (...args) => {\n  const store = next(...args);\n  let notifying = true;\n  let shouldNotifyAtEndOfTick = false;\n  let notificationQueued = false;\n  const listeners = new Set<() => void>();\n  const queueCallback = options.type === 'tick' ? queueMicrotask : options.type === 'raf' ?\n  // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n  typeof window !== 'undefined' && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10) : options.type === 'callback' ? options.queueNotification : createQueueWithTimer(options.timeout);\n  const notifyListeners = () => {\n    // We're running at the end of the event loop tick.\n    // Run the real listener callbacks to actually update the UI.\n    notificationQueued = false;\n    if (shouldNotifyAtEndOfTick) {\n      shouldNotifyAtEndOfTick = false;\n      listeners.forEach(l => l());\n    }\n  };\n  return Object.assign({}, store, {\n    // Override the base `store.subscribe` method to keep original listeners\n    // from running if we're delaying notifications\n    subscribe(listener: () => void) {\n      // Each wrapped listener will only call the real listener if\n      // the `notifying` flag is currently active when it's called.\n      // This lets the base store work as normal, while the actual UI\n      // update becomes controlled by this enhancer.\n      const wrappedListener: typeof listener = () => notifying && listener();\n      const unsubscribe = store.subscribe(wrappedListener);\n      listeners.add(listener);\n      return () => {\n        unsubscribe();\n        listeners.delete(listener);\n      };\n    },\n    // Override the base `store.dispatch` method so that we can check actions\n    // for the `shouldAutoBatch` flag and determine if batching is active\n    dispatch(action: any) {\n      try {\n        // If the action does _not_ have the `shouldAutoBatch` flag,\n        // we resume/continue normal notify-after-each-dispatch behavior\n        notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n        // If a `notifyListeners` microtask was queued, you can't cancel it.\n        // Instead, we set a flag so that it's a no-op when it does run\n        shouldNotifyAtEndOfTick = !notifying;\n        if (shouldNotifyAtEndOfTick) {\n          // We've seen at least 1 action with `SHOULD_AUTOBATCH`. Try to queue\n          // a microtask to notify listeners at the end of the event loop tick.\n          // Make sure we only enqueue this _once_ per tick.\n          if (!notificationQueued) {\n            notificationQueued = true;\n            queueCallback(notifyListeners);\n          }\n        }\n        // Go ahead and process the action as usual, including reducers.\n        // If normal notification behavior is enabled, the store will notify\n        // all of its own listeners, and the wrapper callbacks above will\n        // see `notifying` is true and pass on to the real listener callbacks.\n        // If we're \"batching\" behavior, then the wrapped callbacks will\n        // bail out, causing the base store notification behavior to be no-ops.\n        return store.dispatch(action);\n      } finally {\n        // Assume we're back to normal behavior after each action\n        notifying = true;\n      }\n    }\n  });\n};","import type { StoreEnhancer } from 'redux';\nimport type { AutoBatchOptions } from './autoBatchEnhancer';\nimport { autoBatchEnhancer } from './autoBatchEnhancer';\nimport { Tuple } from './utils';\nimport type { Middlewares } from './configureStore';\nimport type { ExtractDispatchExtensions } from './tsHelpers';\ntype GetDefaultEnhancersOptions = {\n  autoBatch?: boolean | AutoBatchOptions;\n};\nexport type GetDefaultEnhancers<M extends Middlewares<any>> = (options?: GetDefaultEnhancersOptions) => Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>]>;\nexport const buildGetDefaultEnhancers = <M extends Middlewares<any>,>(middlewareEnhancer: StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>): GetDefaultEnhancers<M> => function getDefaultEnhancers(options) {\n  const {\n    autoBatch = true\n  } = options ?? {};\n  let enhancerArray = new Tuple<StoreEnhancer[]>(middlewareEnhancer);\n  if (autoBatch) {\n    enhancerArray.push(autoBatchEnhancer(typeof autoBatch === 'object' ? autoBatch : undefined));\n  }\n  return enhancerArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Draft } from 'immer';\nimport { produce as createNextState, isDraft, isDraftable } from 'immer';\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { ActionReducerMapBuilder } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { NoInfer, TypeGuard } from './tsHelpers';\nimport { freezeDraftable } from './utils';\n\n/**\n * Defines a mapping from action types to corresponding action object shapes.\n *\n * @deprecated This should not be used manually - it is only used for internal\n *             inference purposes and should not have any further value.\n *             It might be removed in the future.\n * @public\n */\nexport type Actions<T extends keyof any = string> = Record<T, Action>;\nexport type ActionMatcherDescription<S, A extends Action> = {\n  matcher: TypeGuard<A>;\n  reducer: CaseReducer<S, NoInfer<A>>;\n};\nexport type ReadonlyActionMatcherDescriptionCollection<S> = ReadonlyArray<ActionMatcherDescription<S, any>>;\nexport type ActionMatcherDescriptionCollection<S> = Array<ActionMatcherDescription<S, any>>;\n\n/**\n * A *case reducer* is a reducer function for a specific action type. Case\n * reducers can be composed to full reducers using `createReducer()`.\n *\n * Unlike a normal Redux reducer, a case reducer is never called with an\n * `undefined` state to determine the initial state. Instead, the initial\n * state is explicitly specified as an argument to `createReducer()`.\n *\n * In addition, a case reducer can choose to mutate the passed-in `state`\n * value directly instead of returning a new state. This does not actually\n * cause the store state to be mutated directly; instead, thanks to\n * [immer](https://github.com/mweststrate/immer), the mutations are\n * translated to copy operations that result in a new state.\n *\n * @public\n */\nexport type CaseReducer<S = any, A extends Action = UnknownAction> = (state: Draft<S>, action: A) => NoInfer<S> | void | Draft<NoInfer<S>>;\n\n/**\n * A mapping from action types to case reducers for `createReducer()`.\n *\n * @deprecated This should not be used manually - it is only used\n *             for internal inference purposes and using it manually\n *             would lead to type erasure.\n *             It might be removed in the future.\n * @public\n */\nexport type CaseReducers<S, AS extends Actions> = { [T in keyof AS]: AS[T] extends Action ? CaseReducer<S, AS[T]> : void };\nexport type NotFunction<T> = T extends Function ? never : T;\nfunction isStateFunction<S>(x: unknown): x is () => S {\n  return typeof x === 'function';\n}\nexport type ReducerWithInitialState<S extends NotFunction<any>> = Reducer<S> & {\n  getInitialState: () => S;\n};\n\n/**\n * A utility function that allows defining a reducer as a mapping from action\n * type to *case reducer* functions that handle these action types. The\n * reducer's initial state is passed as the first argument.\n *\n * @remarks\n * The body of every case reducer is implicitly wrapped with a call to\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\n * This means that rather than returning a new state object, you can also\n * mutate the passed-in state object directly; these mutations will then be\n * automatically and efficiently translated into copies, giving you both\n * convenience and immutability.\n *\n * @overloadSummary\n * This function accepts a callback that receives a `builder` object as its argument.\n * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be\n * called to define what actions this reducer will handle.\n *\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define\n *   case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n * @example\n```ts\nimport {\n  createAction,\n  createReducer,\n  UnknownAction,\n  PayloadAction,\n} from \"@reduxjs/toolkit\";\n\nconst increment = createAction<number>(\"increment\");\nconst decrement = createAction<number>(\"decrement\");\n\nfunction isActionWithNumberPayload(\n  action: UnknownAction\n): action is PayloadAction<number> {\n  return typeof action.payload === \"number\";\n}\n\nconst reducer = createReducer(\n  {\n    counter: 0,\n    sumOfNumberPayloads: 0,\n    unhandledActions: 0,\n  },\n  (builder) => {\n    builder\n      .addCase(increment, (state, action) => {\n        // action is inferred correctly here\n        state.counter += action.payload;\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {\n        state.counter -= action.payload;\n      })\n      // You can apply a \"matcher function\" to incoming actions\n      .addMatcher(isActionWithNumberPayload, (state, action) => {})\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {});\n  }\n);\n```\n * @public\n */\nexport function createReducer<S extends NotFunction<any>>(initialState: S | (() => S), mapOrBuilderCallback: (builder: ActionReducerMapBuilder<S>) => void): ReducerWithInitialState<S> {\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof mapOrBuilderCallback === 'object') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n    }\n  }\n  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n\n  // Ensure the initial state gets frozen either way (if draftable)\n  let getInitialState: () => S;\n  if (isStateFunction(initialState)) {\n    getInitialState = () => freezeDraftable(initialState());\n  } else {\n    const frozenInitialState = freezeDraftable(initialState);\n    getInitialState = () => frozenInitialState;\n  }\n  function reducer(state = getInitialState(), action: any): S {\n    let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n      matcher\n    }) => matcher(action)).map(({\n      reducer\n    }) => reducer)];\n    if (caseReducers.filter(cr => !!cr).length === 0) {\n      caseReducers = [finalDefaultCaseReducer];\n    }\n    return caseReducers.reduce((previousState, caseReducer): S => {\n      if (caseReducer) {\n        if (isDraft(previousState)) {\n          // If it's already a draft, we must already be inside a `createNextState` call,\n          // likely because this is being wrapped in `createReducer`, `createSlice`, or nested\n          // inside an existing draft. It's safe to just pass the draft to the mutator.\n          const draft = previousState as Draft<S>; // We can assume this is already a draft\n          const result = caseReducer(draft, action);\n          if (result === undefined) {\n            return previousState;\n          }\n          return result as S;\n        } else if (!isDraftable(previousState)) {\n          // If state is not draftable (ex: a primitive, such as 0), we want to directly\n          // return the caseReducer func and not wrap it with produce.\n          const result = caseReducer(previousState as any, action);\n          if (result === undefined) {\n            if (previousState === null) {\n              return previousState;\n            }\n            throw Error('A case reducer on a non-draftable value must not return undefined');\n          }\n          return result as S;\n        } else {\n          // @ts-ignore createNextState() produces an Immutable<Draft<S>> rather\n          // than an Immutable<S>, and TypeScript cannot find out how to reconcile\n          // these two types.\n          return createNextState(previousState, (draft: Draft<S>) => {\n            return caseReducer(draft, action);\n          });\n        }\n      }\n      return previousState;\n    }, state);\n  }\n  reducer.getInitialState = getInitialState;\n  return reducer as ReducerWithInitialState<S>;\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6 } from \"@reduxjs/toolkit\";\nimport type { Action } from 'redux';\nimport type { CaseReducer, CaseReducers, ActionMatcherDescriptionCollection } from './createReducer';\nimport type { TypeGuard } from './tsHelpers';\nexport type TypedActionCreator<Type extends string> = {\n  (...args: any[]): Action<Type>;\n  type: Type;\n};\n\n/**\n * A builder for an action <-> reducer map.\n *\n * @public\n */\nexport interface ActionReducerMapBuilder<State> {\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ActionReducerMapBuilder<State>;\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ActionReducerMapBuilder<State>;\n\n  /**\n   * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   * @example\n  ```ts\n  import {\n  createAction,\n  createReducer,\n  AsyncThunk,\n  UnknownAction,\n  } from \"@reduxjs/toolkit\";\n  type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;\n  type PendingAction = ReturnType<GenericAsyncThunk[\"pending\"]>;\n  type RejectedAction = ReturnType<GenericAsyncThunk[\"rejected\"]>;\n  type FulfilledAction = ReturnType<GenericAsyncThunk[\"fulfilled\"]>;\n  const initialState: Record<string, string> = {};\n  const resetAction = createAction(\"reset-tracked-loading-state\");\n  function isPendingAction(action: UnknownAction): action is PendingAction {\n  return typeof action.type === \"string\" && action.type.endsWith(\"/pending\");\n  }\n  const reducer = createReducer(initialState, (builder) => {\n  builder\n    .addCase(resetAction, () => initialState)\n    // matcher can be defined outside as a type predicate function\n    .addMatcher(isPendingAction, (state, action) => {\n      state[action.meta.requestId] = \"pending\";\n    })\n    .addMatcher(\n      // matcher can be defined inline as a type predicate function\n      (action): action is RejectedAction => action.type.endsWith(\"/rejected\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"rejected\";\n      }\n    )\n    // matcher can just return boolean and the matcher can receive a generic argument\n    .addMatcher<FulfilledAction>(\n      (action) => action.type.endsWith(\"/fulfilled\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"fulfilled\";\n      }\n    );\n  });\n  ```\n   */\n  addMatcher<A>(matcher: TypeGuard<A> | ((action: any) => boolean), reducer: CaseReducer<State, A extends Action ? A : A & Action>): Omit<ActionReducerMapBuilder<State>, 'addCase'>;\n\n  /**\n   * Adds a \"default case\" reducer that is executed if no case reducer and no matcher\n   * reducer was executed for this action.\n   * @param reducer - The fallback \"default case\" reducer function.\n   *\n   * @example\n  ```ts\n  import { createReducer } from '@reduxjs/toolkit'\n  const initialState = { otherActions: 0 }\n  const reducer = createReducer(initialState, builder => {\n  builder\n    // .addCase(...)\n    // .addMatcher(...)\n    .addDefaultCase((state, action) => {\n      state.otherActions++\n    })\n  })\n  ```\n   */\n  addDefaultCase(reducer: CaseReducer<State, Action>): {};\n}\nexport function executeReducerBuilderCallback<S>(builderCallback: (builder: ActionReducerMapBuilder<S>) => void): [CaseReducers<S, any>, ActionMatcherDescriptionCollection<S>, CaseReducer<S, Action> | undefined] {\n  const actionsMap: CaseReducers<S, any> = {};\n  const actionMatchers: ActionMatcherDescriptionCollection<S> = [];\n  let defaultCaseReducer: CaseReducer<S, Action> | undefined;\n  const builder = {\n    addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<S>) {\n      if (process.env.NODE_ENV !== 'production') {\n        /*\n         to keep the definition by the user in line with actual behavior,\n         we enforce `addCase` to always be called before calling `addMatcher`\n         as matching cases take precedence over matchers\n         */\n        if (actionMatchers.length > 0) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(26) : '`builder.addCase` should only be called before calling `builder.addMatcher`');\n        }\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(27) : '`builder.addCase` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n      if (!type) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(28) : '`builder.addCase` cannot be called with an empty action type');\n      }\n      if (type in actionsMap) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(29) : '`builder.addCase` cannot be called with two reducers for the same action type ' + `'${type}'`);\n      }\n      actionsMap[type] = reducer;\n      return builder;\n    },\n    addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<S, A extends Action ? A : A & Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(30) : '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      actionMatchers.push({\n        matcher,\n        reducer\n      });\n      return builder;\n    },\n    addDefaultCase(reducer: CaseReducer<S, Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(31) : '`builder.addDefaultCase` can only be called once');\n        }\n      }\n      defaultCaseReducer = reducer;\n      return builder;\n    }\n  };\n  builderCallback(builder);\n  return [actionsMap, actionMatchers, defaultCaseReducer];\n}","import type { ActionFromMatcher, Matcher, UnionToIntersection } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\nimport type { AsyncThunk, AsyncThunkFulfilledActionCreator, AsyncThunkPendingActionCreator, AsyncThunkRejectedActionCreator } from './createAsyncThunk';\n\n/** @public */\nexport type ActionMatchingAnyOf<Matchers extends Matcher<any>[]> = ActionFromMatcher<Matchers[number]>;\n\n/** @public */\nexport type ActionMatchingAllOf<Matchers extends Matcher<any>[]> = UnionToIntersection<ActionMatchingAnyOf<Matchers>>;\nconst matches = (matcher: Matcher<any>, action: any) => {\n  if (hasMatchFunction(matcher)) {\n    return matcher.match(action);\n  } else {\n    return matcher(action);\n  }\n};\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches any one of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAnyOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAnyOf<Matchers> => {\n    return matchers.some(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches all of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAllOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAllOf<Matchers> => {\n    return matchers.every(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * @param action A redux action\n * @param validStatus An array of valid meta.requestStatus values\n *\n * @internal\n */\nexport function hasExpectedRequestMetadata(action: any, validStatus: readonly string[]) {\n  if (!action || !action.meta) return false;\n  const hasValidRequestId = typeof action.meta.requestId === 'string';\n  const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n  return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a: [any] | AnyAsyncThunk[]): a is AnyAsyncThunk[] {\n  return typeof a[0] === 'function' && 'pending' in a[0] && 'fulfilled' in a[0] && 'rejected' in a[0];\n}\nexport type UnknownAsyncThunkPendingAction = ReturnType<AsyncThunkPendingActionCreator<unknown>>;\nexport type PendingActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is pending.\n *\n * @public\n */\nexport function isPending(): (action: any) => action is UnknownAsyncThunkPendingAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is pending.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is PendingActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a pending thunk action\n * @public\n */\nexport function isPending(action: any): action is UnknownAsyncThunkPendingAction;\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isPending()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.pending));\n}\nexport type UnknownAsyncThunkRejectedAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected.\n *\n * @public\n */\nexport function isRejected(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action\n * @public\n */\nexport function isRejected(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejected()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.rejected));\n}\nexport type UnknownAsyncThunkRejectedWithValueAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedWithValueActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']> & (T extends AsyncThunk<any, any, {\n  rejectValue: infer RejectedValue;\n}> ? {\n  payload: RejectedValue;\n} : unknown);\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected with value.\n *\n * @public\n */\nexport function isRejectedWithValue(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected with value.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedWithValueActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action with value\n * @public\n */\nexport function isRejectedWithValue(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  const hasFlag = (action: any): action is any => {\n    return action && action.meta && action.meta.rejectedWithValue;\n  };\n  if (asyncThunks.length === 0) {\n    return isAllOf(isRejected(...asyncThunks), hasFlag);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejectedWithValue()(asyncThunks[0]);\n  }\n  return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nexport type UnknownAsyncThunkFulfilledAction = ReturnType<AsyncThunkFulfilledActionCreator<unknown, unknown>>;\nexport type FulfilledActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['fulfilled']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is fulfilled.\n *\n * @public\n */\nexport function isFulfilled(): (action: any) => action is UnknownAsyncThunkFulfilledAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is fulfilled.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is FulfilledActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a fulfilled thunk action\n * @public\n */\nexport function isFulfilled(action: any): action is UnknownAsyncThunkFulfilledAction;\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['fulfilled']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isFulfilled()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.fulfilled));\n}\nexport type UnknownAsyncThunkAction = UnknownAsyncThunkPendingAction | UnknownAsyncThunkRejectedAction | UnknownAsyncThunkFulfilledAction;\nexport type AnyAsyncThunk = {\n  pending: {\n    match: (action: any) => action is any;\n  };\n  fulfilled: {\n    match: (action: any) => action is any;\n  };\n  rejected: {\n    match: (action: any) => action is any;\n  };\n};\nexport type ActionsFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']> | ActionFromMatcher<T['fulfilled']> | ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator.\n *\n * @public\n */\nexport function isAsyncThunkAction(): (action: any) => action is UnknownAsyncThunkAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is ActionsFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a thunk action\n * @public\n */\nexport function isAsyncThunkAction(action: any): action is UnknownAsyncThunkAction;\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending', 'fulfilled', 'rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isAsyncThunkAction()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.flatMap(asyncThunk => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}","// Borrowed from https://github.com/ai/nanoid/blob/3.0.2/non-secure/index.js\n// This alphabet uses `A-Za-z0-9_-` symbols. A genetic algorithm helped\n// optimize the gzip compression for this alphabet.\nlet urlAlphabet = 'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW';\n\n/**\r\n *\r\n * @public\r\n */\nexport let nanoid = (size = 21) => {\n  let id = '';\n  // A compact alternative for `for (var i = 0; i < step; i++)`.\n  let i = size;\n  while (i--) {\n    // `| 0` is more compact and faster than `Math.floor()`.\n    id += urlAlphabet[Math.random() * 64 | 0];\n  }\n  return id;\n};","import type { Dispatch, UnknownAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport type { ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport { isAnyOf } from './matchers';\nimport { nanoid } from './nanoid';\nimport type { FallbackIfUnknown, Id, IsAny, IsUnknown, SafePromise } from './tsHelpers';\nexport type BaseThunkAPI<S, E, D extends Dispatch = Dispatch, RejectedValue = unknown, RejectedMeta = unknown, FulfilledMeta = unknown> = {\n  dispatch: D;\n  getState: () => S;\n  extra: E;\n  requestId: string;\n  signal: AbortSignal;\n  abort: (reason?: string) => void;\n  rejectWithValue: IsUnknown<RejectedMeta, (value: RejectedValue) => RejectWithValue<RejectedValue, RejectedMeta>, (value: RejectedValue, meta: RejectedMeta) => RejectWithValue<RejectedValue, RejectedMeta>>;\n  fulfillWithValue: IsUnknown<FulfilledMeta, <FulfilledValue>(value: FulfilledValue) => FulfilledValue, <FulfilledValue>(value: FulfilledValue, meta: FulfilledMeta) => FulfillWithMeta<FulfilledValue, FulfilledMeta>>;\n};\n\n/**\n * @public\n */\nexport interface SerializedError {\n  name?: string;\n  message?: string;\n  stack?: string;\n  code?: string;\n}\nconst commonProperties: Array<keyof SerializedError> = ['name', 'message', 'stack', 'code'];\nclass RejectWithValue<Payload, RejectedMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'RejectWithValue';\n  constructor(public readonly payload: Payload, public readonly meta: RejectedMeta) {}\n}\nclass FulfillWithMeta<Payload, FulfilledMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'FulfillWithMeta';\n  constructor(public readonly payload: Payload, public readonly meta: FulfilledMeta) {}\n}\n\n/**\n * Serializes an error into a plain object.\n * Reworked from https://github.com/sindresorhus/serialize-error\n *\n * @public\n */\nexport const miniSerializeError = (value: any): SerializedError => {\n  if (typeof value === 'object' && value !== null) {\n    const simpleError: SerializedError = {};\n    for (const property of commonProperties) {\n      if (typeof value[property] === 'string') {\n        simpleError[property] = value[property];\n      }\n    }\n    return simpleError;\n  }\n  return {\n    message: String(value)\n  };\n};\nexport type AsyncThunkConfig = {\n  state?: unknown;\n  dispatch?: ThunkDispatch<unknown, unknown, UnknownAction>;\n  extra?: unknown;\n  rejectValue?: unknown;\n  serializedErrorType?: unknown;\n  pendingMeta?: unknown;\n  fulfilledMeta?: unknown;\n  rejectedMeta?: unknown;\n};\nexport type GetState<ThunkApiConfig> = ThunkApiConfig extends {\n  state: infer State;\n} ? State : unknown;\ntype GetExtra<ThunkApiConfig> = ThunkApiConfig extends {\n  extra: infer Extra;\n} ? Extra : unknown;\ntype GetDispatch<ThunkApiConfig> = ThunkApiConfig extends {\n  dispatch: infer Dispatch;\n} ? FallbackIfUnknown<Dispatch, ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>> : ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>;\nexport type GetThunkAPI<ThunkApiConfig> = BaseThunkAPI<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, GetDispatch<ThunkApiConfig>, GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>, GetFulfilledMeta<ThunkApiConfig>>;\ntype GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectValue: infer RejectValue;\n} ? RejectValue : unknown;\ntype GetPendingMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  pendingMeta: infer PendingMeta;\n} ? PendingMeta : unknown;\ntype GetFulfilledMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  fulfilledMeta: infer FulfilledMeta;\n} ? FulfilledMeta : unknown;\ntype GetRejectedMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectedMeta: infer RejectedMeta;\n} ? RejectedMeta : unknown;\ntype GetSerializedErrorType<ThunkApiConfig> = ThunkApiConfig extends {\n  serializedErrorType: infer GetSerializedErrorType;\n} ? GetSerializedErrorType : SerializedError;\ntype MaybePromise<T> = T | Promise<T> | (T extends any ? Promise<T> : never);\n\n/**\n * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig extends AsyncThunkConfig> = MaybePromise<IsUnknown<GetFulfilledMeta<ThunkApiConfig>, Returned, FulfillWithMeta<Returned, GetFulfilledMeta<ThunkApiConfig>>> | RejectWithValue<GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>>>;\n/**\n * A type describing the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreator<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>;\n\n/**\n * A ThunkAction created by `createAsyncThunk`.\n * Dispatching it returns a Promise for either a\n * fulfilled or rejected action.\n * Also, the returned value contains an `abort()` method\n * that allows the asyncAction to be cancelled from the outside.\n *\n * @public\n */\nexport type AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = (dispatch: NonNullable<GetDispatch<ThunkApiConfig>>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => SafePromise<ReturnType<AsyncThunkFulfilledActionCreator<Returned, ThunkArg>> | ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>>> & {\n  abort: (reason?: string) => void;\n  requestId: string;\n  arg: ThunkArg;\n  unwrap: () => Promise<Returned>;\n};\n\n/**\n * Config provided when calling the async thunk action creator.\n */\nexport interface AsyncThunkDispatchConfig {\n  /**\n   * An external `AbortSignal` that will be tracked by the internal `AbortSignal`.\n   */\n  signal?: AbortSignal;\n}\ntype AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = IsAny<ThunkArg,\n// any handling\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// unknown handling\nunknown extends ThunkArg ? (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument not specified or specified as void or undefined\n: [ThunkArg] extends [void] | [undefined] ? (arg?: undefined, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains void\n: [void] extends [ThunkArg] // make optional\n? (arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains undefined\n: [undefined] extends [ThunkArg] ? WithStrictNullChecks<\n// with strict nullChecks: make optional\n(arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// without strict null checks this will match everything, so don't make it optional\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>> // default case: normal argument\n: (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>>;\n\n/**\n * Options object for `createAsyncThunk`.\n *\n * @public\n */\nexport type AsyncThunkOptions<ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  /**\n   * A method to control whether the asyncThunk should be executed. Has access to the\n   * `arg`, `api.getState()` and `api.extra` arguments.\n   *\n   * @returns `false` if it should be skipped\n   */\n  condition?(arg: ThunkArg, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): MaybePromise<boolean | undefined>;\n  /**\n   * If `condition` returns `false`, the asyncThunk will be skipped.\n   * This option allows you to control whether a `rejected` action with `meta.condition == false`\n   * will be dispatched or not.\n   *\n   * @default `false`\n   */\n  dispatchConditionRejection?: boolean;\n  serializeError?: (x: unknown) => GetSerializedErrorType<ThunkApiConfig>;\n\n  /**\n   * A function to use when generating the `requestId` for the request sequence.\n   *\n   * @default `nanoid`\n   */\n  idGenerator?: (arg: ThunkArg) => string;\n} & IsUnknown<GetPendingMeta<ThunkApiConfig>, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   *\n   * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.\n   * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload\n   */\n  getPendingMeta?(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   */\n  getPendingMeta(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}>;\nexport type AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[string, ThunkArg, GetPendingMeta<ThunkApiConfig>?], undefined, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'pending';\n} & GetPendingMeta<ThunkApiConfig>>;\nexport type AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Error | null, string, ThunkArg, GetRejectValue<ThunkApiConfig>?, GetRejectedMeta<ThunkApiConfig>?], GetRejectValue<ThunkApiConfig> | undefined, string, GetSerializedErrorType<ThunkApiConfig>, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'rejected';\n  aborted: boolean;\n  condition: boolean;\n} & (({\n  rejectedWithValue: false;\n} & { [K in keyof GetRejectedMeta<ThunkApiConfig>]?: undefined }) | ({\n  rejectedWithValue: true;\n} & GetRejectedMeta<ThunkApiConfig>))>;\nexport type AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Returned, string, ThunkArg, GetFulfilledMeta<ThunkApiConfig>?], Returned, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'fulfilled';\n} & GetFulfilledMeta<ThunkApiConfig>>;\n\n/**\n * A type describing the return value of `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig> & {\n  pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig>;\n  rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>;\n  fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>;\n  // matchSettled?\n  settled: (action: any) => action is ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> | AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>>;\n  typePrefix: string;\n};\nexport type OverrideThunkApiConfigs<OldConfig, NewConfig> = Id<NewConfig & Omit<OldConfig, keyof NewConfig>>;\nexport type CreateAsyncThunkFunction<CurriedThunkApiConfig extends AsyncThunkConfig> = {\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  // separate signature without `AsyncThunkConfig` for better inference\n  <Returned, ThunkArg = void>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, CurriedThunkApiConfig>): AsyncThunk<Returned, ThunkArg, CurriedThunkApiConfig>;\n\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  <Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>, options?: AsyncThunkOptions<ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>): AsyncThunk<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\ntype CreateAsyncThunk<CurriedThunkApiConfig extends AsyncThunkConfig> = CreateAsyncThunkFunction<CurriedThunkApiConfig> & {\n  withTypes<ThunkApiConfig extends AsyncThunkConfig>(): CreateAsyncThunk<OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\nconst externalAbortMessage = 'External signal was aborted';\nexport const createAsyncThunk = /* @__PURE__ */(() => {\n  function createAsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> {\n    type RejectedValue = GetRejectValue<ThunkApiConfig>;\n    type PendingMeta = GetPendingMeta<ThunkApiConfig>;\n    type FulfilledMeta = GetFulfilledMeta<ThunkApiConfig>;\n    type RejectedMeta = GetRejectedMeta<ThunkApiConfig>;\n    const fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/fulfilled', (payload: Returned, requestId: string, arg: ThunkArg, meta?: FulfilledMeta) => ({\n      payload,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'fulfilled' as const\n      }\n    }));\n    const pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/pending', (requestId: string, arg: ThunkArg, meta?: PendingMeta) => ({\n      payload: undefined,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'pending' as const\n      }\n    }));\n    const rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/rejected', (error: Error | null, requestId: string, arg: ThunkArg, payload?: RejectedValue, meta?: RejectedMeta) => ({\n      payload,\n      error: (options && options.serializeError || miniSerializeError)(error || 'Rejected') as GetSerializedErrorType<ThunkApiConfig>,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        rejectedWithValue: !!payload,\n        requestStatus: 'rejected' as const,\n        aborted: error?.name === 'AbortError',\n        condition: error?.name === 'ConditionError'\n      }\n    }));\n    function actionCreator(arg: ThunkArg, {\n      signal\n    }: AsyncThunkDispatchConfig = {}): AsyncThunkAction<Returned, ThunkArg, Required<ThunkApiConfig>> {\n      return (dispatch, getState, extra) => {\n        const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n        const abortController = new AbortController();\n        let abortHandler: (() => void) | undefined;\n        let abortReason: string | undefined;\n        function abort(reason?: string) {\n          abortReason = reason;\n          abortController.abort();\n        }\n        if (signal) {\n          if (signal.aborted) {\n            abort(externalAbortMessage);\n          } else {\n            signal.addEventListener('abort', () => abort(externalAbortMessage), {\n              once: true\n            });\n          }\n        }\n        const promise = async function () {\n          let finalAction: ReturnType<typeof fulfilled | typeof rejected>;\n          try {\n            let conditionResult = options?.condition?.(arg, {\n              getState,\n              extra\n            });\n            if (isThenable(conditionResult)) {\n              conditionResult = await conditionResult;\n            }\n            if (conditionResult === false || abortController.signal.aborted) {\n              // eslint-disable-next-line no-throw-literal\n              throw {\n                name: 'ConditionError',\n                message: 'Aborted due to condition callback returning false.'\n              };\n            }\n            const abortedPromise = new Promise<never>((_, reject) => {\n              abortHandler = () => {\n                reject({\n                  name: 'AbortError',\n                  message: abortReason || 'Aborted'\n                });\n              };\n              abortController.signal.addEventListener('abort', abortHandler);\n            });\n            dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n              requestId,\n              arg\n            }, {\n              getState,\n              extra\n            })) as any);\n            finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n              dispatch,\n              getState,\n              extra,\n              requestId,\n              signal: abortController.signal,\n              abort,\n              rejectWithValue: ((value: RejectedValue, meta?: RejectedMeta) => {\n                return new RejectWithValue(value, meta);\n              }) as any,\n              fulfillWithValue: ((value: unknown, meta?: FulfilledMeta) => {\n                return new FulfillWithMeta(value, meta);\n              }) as any\n            })).then(result => {\n              if (result instanceof RejectWithValue) {\n                throw result;\n              }\n              if (result instanceof FulfillWithMeta) {\n                return fulfilled(result.payload, requestId, arg, result.meta);\n              }\n              return fulfilled(result as any, requestId, arg);\n            })]);\n          } catch (err) {\n            finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err as any, requestId, arg);\n          } finally {\n            if (abortHandler) {\n              abortController.signal.removeEventListener('abort', abortHandler);\n            }\n          }\n          // We dispatch the result action _after_ the catch, to avoid having any errors\n          // here get swallowed by the try/catch block,\n          // per https://twitter.com/dan_abramov/status/770914221638942720\n          // and https://github.com/reduxjs/redux-toolkit/blob/e85eb17b39a2118d859f7b7746e0f3fee523e089/docs/tutorials/advanced-tutorial.md#async-error-handling-logic-in-thunks\n\n          const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && (finalAction as any).meta.condition;\n          if (!skipDispatch) {\n            dispatch(finalAction as any);\n          }\n          return finalAction;\n        }();\n        return Object.assign(promise as SafePromise<any>, {\n          abort,\n          requestId,\n          arg,\n          unwrap() {\n            return promise.then<any>(unwrapResult);\n          }\n        });\n      };\n    }\n    return Object.assign(actionCreator as AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig>, {\n      pending,\n      rejected,\n      fulfilled,\n      settled: isAnyOf(rejected, fulfilled),\n      typePrefix\n    });\n  }\n  createAsyncThunk.withTypes = () => createAsyncThunk;\n  return createAsyncThunk as CreateAsyncThunk<AsyncThunkConfig>;\n})();\ninterface UnwrappableAction {\n  payload: any;\n  meta?: any;\n  error?: any;\n}\ntype UnwrappedActionPayload<T extends UnwrappableAction> = Exclude<T, {\n  error: any;\n}>['payload'];\n\n/**\n * @public\n */\nexport function unwrapResult<R extends UnwrappableAction>(action: R): UnwrappedActionPayload<R> {\n  if (action.meta && action.meta.rejectedWithValue) {\n    throw action.payload;\n  }\n  if (action.error) {\n    throw action.error;\n  }\n  return action.payload;\n}\ntype WithStrictNullChecks<True, False> = undefined extends boolean ? False : True;\nfunction isThenable(value: any): value is PromiseLike<any> {\n  return value !== null && typeof value === 'object' && typeof value.then === 'function';\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { Selector } from 'reselect';\nimport type { InjectConfig } from './combineSlices';\nimport type { ActionCreatorWithoutPayload, PayloadAction, PayloadActionCreator, PrepareAction, _ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport type { AsyncThunk, AsyncThunkConfig, AsyncThunkOptions, AsyncThunkPayloadCreator, OverrideThunkApiConfigs } from './createAsyncThunk';\nimport { createAsyncThunk as _createAsyncThunk } from './createAsyncThunk';\nimport type { ActionMatcherDescriptionCollection, CaseReducer, ReducerWithInitialState } from './createReducer';\nimport { createReducer } from './createReducer';\nimport type { ActionReducerMapBuilder, TypedActionCreator } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { Id, TypeGuard } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\nconst asyncThunkSymbol = /* @__PURE__ */Symbol.for('rtk-slice-createasyncthunk');\n// type is annotated because it's too long to infer\nexport const asyncThunkCreator: {\n  [asyncThunkSymbol]: typeof _createAsyncThunk;\n} = {\n  [asyncThunkSymbol]: _createAsyncThunk\n};\ntype InjectIntoConfig<NewReducerPath extends string> = InjectConfig & {\n  reducerPath?: NewReducerPath;\n};\n\n/**\n * The return value of `createSlice`\n *\n * @public\n */\nexport interface Slice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice name.\n   */\n  name: Name;\n\n  /**\n   *  The slice reducer path.\n   */\n  reducerPath: ReducerPath;\n\n  /**\n   * The slice's reducer.\n   */\n  reducer: Reducer<State>;\n\n  /**\n   * Action creators for the types of actions that are handled by the slice\n   * reducer.\n   */\n  actions: CaseReducerActions<CaseReducers, Name>;\n\n  /**\n   * The individual case reducer functions that were passed in the `reducers` parameter.\n   * This enables reuse and testing if they were defined inline when calling `createSlice`.\n   */\n  caseReducers: SliceDefinedCaseReducers<CaseReducers>;\n\n  /**\n   * Provides access to the initial state value given to the slice.\n   * If a lazy state initializer was provided, it will be called and a fresh value returned.\n   */\n  getInitialState: () => State;\n\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]: State }>>;\n\n  /**\n   * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.\n   */\n  injectInto<NewReducerPath extends string = ReducerPath>(this: this, injectable: {\n    inject: (slice: {\n      reducerPath: string;\n      reducer: Reducer;\n    }, config?: InjectConfig) => void;\n  }, config?: InjectIntoConfig<NewReducerPath>): InjectedSlice<State, CaseReducers, Name, NewReducerPath, Selectors>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Will throw an error if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]: State }): State;\n}\n\n/**\n * A slice after being called with `injectInto(reducer)`.\n *\n * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.\n */\ntype InjectedSlice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> = Omit<Slice<State, CaseReducers, Name, ReducerPath, Selectors>, 'getSelectors' | 'selectors'> & {\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State | undefined>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State | undefined): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]?: State | undefined }>>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Returns initial state if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]?: State | undefined }): State;\n};\n\n/**\n * Options for `createSlice()`.\n *\n * @public\n */\nexport interface CreateSliceOptions<State = any, CR extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice's name. Used to namespace the generated action types.\n   */\n  name: Name;\n\n  /**\n   * The slice's reducer path. Used when injecting into a combined slice reducer.\n   */\n  reducerPath?: ReducerPath;\n\n  /**\n   * The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n   */\n  initialState: State | (() => State);\n\n  /**\n   * A mapping from action types to action-type-specific *case reducer*\n   * functions. For every action type, a matching action creator will be\n   * generated using `createAction()`.\n   */\n  reducers: ValidateSliceCaseReducers<State, CR> | ((creators: ReducerCreators<State>) => CR);\n\n  /**\n   * A callback that receives a *builder* object to define\n   * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n   *\n   *\n   * @example\n  ```ts\n  import { createAction, createSlice, Action } from '@reduxjs/toolkit'\n  const incrementBy = createAction<number>('incrementBy')\n  const decrement = createAction('decrement')\n  interface RejectedAction extends Action {\n  error: Error\n  }\n  function isRejectedAction(action: Action): action is RejectedAction {\n  return action.type.endsWith('rejected')\n  }\n  createSlice({\n  name: 'counter',\n  initialState: 0,\n  reducers: {},\n  extraReducers: builder => {\n    builder\n      .addCase(incrementBy, (state, action) => {\n        // action is inferred correctly here if using TS\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {})\n      // You can match a range of action types\n      .addMatcher(\n        isRejectedAction,\n        // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard\n        (state, action) => {}\n      )\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {})\n    }\n  })\n  ```\n   */\n  extraReducers?: (builder: ActionReducerMapBuilder<State>) => void;\n\n  /**\n   * A map of selectors that receive the slice's state and any additional arguments, and return a result.\n   */\n  selectors?: Selectors;\n}\nexport enum ReducerType {\n  reducer = 'reducer',\n  reducerWithPrepare = 'reducerWithPrepare',\n  asyncThunk = 'asyncThunk',\n}\ntype ReducerDefinition<T extends ReducerType = ReducerType> = {\n  _reducerDefinitionType: T;\n};\nexport type CaseReducerDefinition<S = any, A extends Action = UnknownAction> = CaseReducer<S, A> & ReducerDefinition<ReducerType.reducer>;\n\n/**\n * A CaseReducer with a `prepare` method.\n *\n * @public\n */\nexport type CaseReducerWithPrepare<State, Action extends PayloadAction> = {\n  reducer: CaseReducer<State, Action>;\n  prepare: PrepareAction<Action['payload']>;\n};\nexport interface CaseReducerWithPrepareDefinition<State, Action extends PayloadAction> extends CaseReducerWithPrepare<State, Action>, ReducerDefinition<ReducerType.reducerWithPrepare> {}\ntype AsyncThunkSliceReducerConfig<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  pending?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['pending']>>;\n  rejected?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected']>>;\n  fulfilled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['fulfilled']>>;\n  settled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']>>;\n  options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>;\n};\ntype AsyncThunkSliceReducerDefinition<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig> & ReducerDefinition<ReducerType.asyncThunk> & {\n  payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>;\n};\n\n/**\n * Providing these as part of the config would cause circular types, so we disallow passing them\n */\ntype PreventCircular<ThunkApiConfig> = { [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch' ? never : ThunkApiConfig[K] };\ninterface AsyncThunkCreator<State, CurriedThunkApiConfig extends PreventCircular<AsyncThunkConfig> = PreventCircular<AsyncThunkConfig>> {\n  <Returned, ThunkArg = void>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, CurriedThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, CurriedThunkApiConfig>;\n  <Returned, ThunkArg, ThunkApiConfig extends PreventCircular<AsyncThunkConfig> = {}>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, ThunkApiConfig>;\n  withTypes<ThunkApiConfig extends PreventCircular<AsyncThunkConfig>>(): AsyncThunkCreator<State, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n}\nexport interface ReducerCreators<State> {\n  reducer(caseReducer: CaseReducer<State, PayloadAction>): CaseReducerDefinition<State, PayloadAction>;\n  reducer<Payload>(caseReducer: CaseReducer<State, PayloadAction<Payload>>): CaseReducerDefinition<State, PayloadAction<Payload>>;\n  asyncThunk: AsyncThunkCreator<State>;\n  preparedReducer<Prepare extends PrepareAction<any>>(prepare: Prepare, reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>): {\n    _reducerDefinitionType: ReducerType.reducerWithPrepare;\n    prepare: Prepare;\n    reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>;\n  };\n}\n\n/**\n * The type describing a slice's `reducers` option.\n *\n * @public\n */\nexport type SliceCaseReducers<State> = Record<string, ReducerDefinition> | Record<string, CaseReducer<State, PayloadAction<any>> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>>;\n\n/**\n * The type describing a slice's `selectors` option.\n */\nexport type SliceSelectors<State> = {\n  [K: string]: (sliceState: State, ...args: any[]) => any;\n};\ntype SliceActionType<SliceName extends string, ActionName extends keyof any> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string;\n\n/**\n * Derives the slice's `actions` property from the `reducers` options\n *\n * @public\n */\nexport type CaseReducerActions<CaseReducers extends SliceCaseReducers<any>, SliceName extends string> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends {\n  prepare: any;\n} ? ActionCreatorForCaseReducerWithPrepare<Definition, SliceActionType<SliceName, Type>> : Definition extends AsyncThunkSliceReducerDefinition<any, infer ThunkArg, infer Returned, infer ThunkApiConfig> ? AsyncThunk<Returned, ThunkArg, ThunkApiConfig> : Definition extends {\n  reducer: any;\n} ? ActionCreatorForCaseReducer<Definition['reducer'], SliceActionType<SliceName, Type>> : ActionCreatorForCaseReducer<Definition, SliceActionType<SliceName, Type>> : never };\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducerWithPrepare<CR extends {\n  prepare: any;\n}, Type extends string> = _ActionCreatorWithPreparedPayload<CR['prepare'], Type>;\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducer`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducer<CR, Type extends string> = CR extends ((state: any, action: infer Action) => any) ? Action extends {\n  payload: infer P;\n} ? PayloadActionCreator<P, Type> : ActionCreatorWithoutPayload<Type> : ActionCreatorWithoutPayload<Type>;\n\n/**\n * Extracts the CaseReducers out of a `reducers` object, even if they are\n * tested into a `CaseReducerWithPrepare`.\n *\n * @internal\n */\ntype SliceDefinedCaseReducers<CaseReducers extends SliceCaseReducers<any>> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends AsyncThunkSliceReducerDefinition<any, any, any> ? Id<Pick<Required<Definition>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>> : Definition extends {\n  reducer: infer Reducer;\n} ? Reducer : Definition : never };\ntype RemappedSelector<S extends Selector, NewState> = S extends Selector<any, infer R, infer P> ? Selector<NewState, R, P> & {\n  unwrapped: S;\n} : never;\n\n/**\n * Extracts the final selector type from the `selectors` object.\n *\n * Removes the `string` index signature from the default value.\n */\ntype SliceDefinedSelectors<State, Selectors extends SliceSelectors<State>, RootState> = { [K in keyof Selectors as string extends K ? never : K]: RemappedSelector<Selectors[K], RootState> };\n\n/**\n * Used on a SliceCaseReducers object.\n * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that\n * the `reducer` and the `prepare` function use the same type of `payload`.\n *\n * Might do additional such checks in the future.\n *\n * This type is only ever useful if you want to write your own wrapper around\n * `createSlice`. Please don't use it otherwise!\n *\n * @public\n */\nexport type ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & { [T in keyof ACR]: ACR[T] extends {\n  reducer(s: S, action?: infer A): any;\n} ? {\n  prepare(...a: never[]): Omit<A, 'type'>;\n} : {} };\nfunction getType(slice: string, actionKey: string): string {\n  return `${slice}/${actionKey}`;\n}\ninterface BuildCreateSliceConfig {\n  creators?: {\n    asyncThunk?: typeof asyncThunkCreator;\n  };\n}\nexport function buildCreateSlice({\n  creators\n}: BuildCreateSliceConfig = {}) {\n  const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n  return function createSlice<State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>): Slice<State, CaseReducers, Name, ReducerPath, Selectors> {\n    const {\n      name,\n      reducerPath = name as unknown as ReducerPath\n    } = options;\n    if (!name) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(11) : '`name` is a required option for createSlice');\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (options.initialState === undefined) {\n        console.error('You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`');\n      }\n    }\n    const reducers = (typeof options.reducers === 'function' ? options.reducers(buildReducerCreators<State>()) : options.reducers) || {};\n    const reducerNames = Object.keys(reducers);\n    const context: ReducerHandlingContext<State> = {\n      sliceCaseReducersByName: {},\n      sliceCaseReducersByType: {},\n      actionCreators: {},\n      sliceMatchers: []\n    };\n    const contextMethods: ReducerHandlingContextMethods<State> = {\n      addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<State>) {\n        const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n        if (!type) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(12) : '`context.addCase` cannot be called with an empty action type');\n        }\n        if (type in context.sliceCaseReducersByType) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(13) : '`context.addCase` cannot be called with two reducers for the same action type: ' + type);\n        }\n        context.sliceCaseReducersByType[type] = reducer;\n        return contextMethods;\n      },\n      addMatcher(matcher, reducer) {\n        context.sliceMatchers.push({\n          matcher,\n          reducer\n        });\n        return contextMethods;\n      },\n      exposeAction(name, actionCreator) {\n        context.actionCreators[name] = actionCreator;\n        return contextMethods;\n      },\n      exposeCaseReducer(name, reducer) {\n        context.sliceCaseReducersByName[name] = reducer;\n        return contextMethods;\n      }\n    };\n    reducerNames.forEach(reducerName => {\n      const reducerDefinition = reducers[reducerName];\n      const reducerDetails: ReducerDetails = {\n        reducerName,\n        type: getType(name, reducerName),\n        createNotation: typeof options.reducers === 'function'\n      };\n      if (isAsyncThunkSliceReducerDefinition<State>(reducerDefinition)) {\n        handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n      } else {\n        handleNormalReducerDefinition<State>(reducerDetails, reducerDefinition as any, contextMethods);\n      }\n    });\n    function buildReducer() {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof options.extraReducers === 'object') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n        }\n      }\n      const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = undefined] = typeof options.extraReducers === 'function' ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n      const finalCaseReducers = {\n        ...extraReducers,\n        ...context.sliceCaseReducersByType\n      };\n      return createReducer(options.initialState, builder => {\n        for (let key in finalCaseReducers) {\n          builder.addCase(key, finalCaseReducers[key] as CaseReducer<any>);\n        }\n        for (let sM of context.sliceMatchers) {\n          builder.addMatcher(sM.matcher, sM.reducer);\n        }\n        for (let m of actionMatchers) {\n          builder.addMatcher(m.matcher, m.reducer);\n        }\n        if (defaultCaseReducer) {\n          builder.addDefaultCase(defaultCaseReducer);\n        }\n      });\n    }\n    const selectSelf = (state: State) => state;\n    const injectedSelectorCache = new Map<boolean, WeakMap<(rootState: any) => State | undefined, Record<string, (rootState: any) => any>>>();\n    const injectedStateCache = new WeakMap<(rootState: any) => State, State>();\n    let _reducer: ReducerWithInitialState<State>;\n    function reducer(state: State | undefined, action: UnknownAction) {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer(state, action);\n    }\n    function getInitialState() {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer.getInitialState();\n    }\n    function makeSelectorProps<CurrentReducerPath extends string = ReducerPath>(reducerPath: CurrentReducerPath, injected = false): Pick<Slice<State, CaseReducers, Name, CurrentReducerPath, Selectors>, 'getSelectors' | 'selectors' | 'selectSlice' | 'reducerPath'> {\n      function selectSlice(state: { [K in CurrentReducerPath]: State }) {\n        let sliceState = state[reducerPath];\n        if (typeof sliceState === 'undefined') {\n          if (injected) {\n            sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);\n          } else if (process.env.NODE_ENV !== 'production') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(15) : 'selectSlice returned undefined for an uninjected slice reducer');\n          }\n        }\n        return sliceState;\n      }\n      function getSelectors(selectState: (rootState: any) => State = selectSelf) {\n        const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => new WeakMap());\n        return getOrInsertComputed(selectorCache, selectState, () => {\n          const map: Record<string, Selector<any, any>> = {};\n          for (const [name, selector] of Object.entries(options.selectors ?? {})) {\n            map[name] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);\n          }\n          return map;\n        }) as any;\n      }\n      return {\n        reducerPath,\n        getSelectors,\n        get selectors() {\n          return getSelectors(selectSlice);\n        },\n        selectSlice\n      };\n    }\n    const slice: Slice<State, CaseReducers, Name, ReducerPath, Selectors> = {\n      name,\n      reducer,\n      actions: context.actionCreators as any,\n      caseReducers: context.sliceCaseReducersByName as any,\n      getInitialState,\n      ...makeSelectorProps(reducerPath),\n      injectInto(injectable, {\n        reducerPath: pathOpt,\n        ...config\n      } = {}) {\n        const newReducerPath = pathOpt ?? reducerPath;\n        injectable.inject({\n          reducerPath: newReducerPath,\n          reducer\n        }, config);\n        return {\n          ...slice,\n          ...makeSelectorProps(newReducerPath, true)\n        } as any;\n      }\n    };\n    return slice;\n  };\n}\nfunction wrapSelector<State, NewState, S extends Selector<State>>(selector: S, selectState: Selector<NewState, State>, getInitialState: () => State, injected?: boolean) {\n  function wrapper(rootState: NewState, ...args: any[]) {\n    let sliceState = selectState(rootState);\n    if (typeof sliceState === 'undefined') {\n      if (injected) {\n        sliceState = getInitialState();\n      } else if (process.env.NODE_ENV !== 'production') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(16) : 'selectState returned undefined for an uninjected slice reducer');\n      }\n    }\n    return selector(sliceState, ...args);\n  }\n  wrapper.unwrapped = selector;\n  return wrapper as RemappedSelector<S, NewState>;\n}\n\n/**\n * A function that accepts an initial state, an object full of reducer\n * functions, and a \"slice name\", and automatically generates\n * action creators and action types that correspond to the\n * reducers and state.\n *\n * @public\n */\nexport const createSlice = /* @__PURE__ */buildCreateSlice();\ninterface ReducerHandlingContext<State> {\n  sliceCaseReducersByName: Record<string, CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>>;\n  sliceCaseReducersByType: Record<string, CaseReducer<State, any>>;\n  sliceMatchers: ActionMatcherDescriptionCollection<State>;\n  actionCreators: Record<string, Function>;\n}\ninterface ReducerHandlingContextMethods<State> {\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ReducerHandlingContextMethods<State>;\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ReducerHandlingContextMethods<State>;\n\n  /**\n   * Allows you to match incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   */\n  addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<State, A extends Action ? A : A & Action>): ReducerHandlingContextMethods<State>;\n  /**\n   * Add an action to be exposed under the final `slice.actions` key.\n   * @param name The key to be exposed as.\n   * @param actionCreator The action to expose.\n   * @example\n   * context.exposeAction(\"addPost\", createAction<Post>(\"addPost\"));\n   *\n   * export const { addPost } = slice.actions\n   *\n   * dispatch(addPost(post))\n   */\n  exposeAction(name: string, actionCreator: Function): ReducerHandlingContextMethods<State>;\n  /**\n   * Add a case reducer to be exposed under the final `slice.caseReducers` key.\n   * @param name The key to be exposed as.\n   * @param reducer The reducer to expose.\n   * @example\n   * context.exposeCaseReducer(\"addPost\", (state, action: PayloadAction<Post>) => {\n   *   state.push(action.payload)\n   * })\n   *\n   * slice.caseReducers.addPost([], addPost(post))\n   */\n  exposeCaseReducer(name: string, reducer: CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>): ReducerHandlingContextMethods<State>;\n}\ninterface ReducerDetails {\n  /** The key the reducer was defined under */\n  reducerName: string;\n  /** The predefined action type, i.e. `${slice.name}/${reducerName}` */\n  type: string;\n  /** Whether create. notation was used when defining reducers */\n  createNotation: boolean;\n}\nfunction buildReducerCreators<State>(): ReducerCreators<State> {\n  function asyncThunk(payloadCreator: AsyncThunkPayloadCreator<any, any>, config: AsyncThunkSliceReducerConfig<State, any>): AsyncThunkSliceReducerDefinition<State, any> {\n    return {\n      _reducerDefinitionType: ReducerType.asyncThunk,\n      payloadCreator,\n      ...config\n    };\n  }\n  asyncThunk.withTypes = () => asyncThunk;\n  return {\n    reducer(caseReducer: CaseReducer<State, any>) {\n      return Object.assign({\n        // hack so the wrapping function has the same name as the original\n        // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n        [caseReducer.name](...args: Parameters<typeof caseReducer>) {\n          return caseReducer(...args);\n        }\n      }[caseReducer.name], {\n        _reducerDefinitionType: ReducerType.reducer\n      } as const);\n    },\n    preparedReducer(prepare, reducer) {\n      return {\n        _reducerDefinitionType: ReducerType.reducerWithPrepare,\n        prepare,\n        reducer\n      };\n    },\n    asyncThunk: asyncThunk as any\n  };\n}\nfunction handleNormalReducerDefinition<State>({\n  type,\n  reducerName,\n  createNotation\n}: ReducerDetails, maybeReducerWithPrepare: CaseReducer<State, {\n  payload: any;\n  type: string;\n}> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>, context: ReducerHandlingContextMethods<State>) {\n  let caseReducer: CaseReducer<State, any>;\n  let prepareCallback: PrepareAction<any> | undefined;\n  if ('reducer' in maybeReducerWithPrepare) {\n    if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(17) : 'Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.');\n    }\n    caseReducer = maybeReducerWithPrepare.reducer;\n    prepareCallback = maybeReducerWithPrepare.prepare;\n  } else {\n    caseReducer = maybeReducerWithPrepare;\n  }\n  context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition<State>(reducerDefinition: any): reducerDefinition is AsyncThunkSliceReducerDefinition<State, any, any, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.asyncThunk;\n}\nfunction isCaseReducerWithPrepareDefinition<State>(reducerDefinition: any): reducerDefinition is CaseReducerWithPrepareDefinition<State, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.reducerWithPrepare;\n}\nfunction handleThunkCaseReducerDefinition<State>({\n  type,\n  reducerName\n}: ReducerDetails, reducerDefinition: AsyncThunkSliceReducerDefinition<State, any, any, any>, context: ReducerHandlingContextMethods<State>, cAT: typeof _createAsyncThunk | undefined) {\n  if (!cAT) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(18) : 'Cannot use `create.asyncThunk` in the built-in `createSlice`. ' + 'Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.');\n  }\n  const {\n    payloadCreator,\n    fulfilled,\n    pending,\n    rejected,\n    settled,\n    options\n  } = reducerDefinition;\n  const thunk = cAT(type, payloadCreator, options as any);\n  context.exposeAction(reducerName, thunk);\n  if (fulfilled) {\n    context.addCase(thunk.fulfilled, fulfilled);\n  }\n  if (pending) {\n    context.addCase(thunk.pending, pending);\n  }\n  if (rejected) {\n    context.addCase(thunk.rejected, rejected);\n  }\n  if (settled) {\n    context.addMatcher(thunk.settled, settled);\n  }\n  context.exposeCaseReducer(reducerName, {\n    fulfilled: fulfilled || noop,\n    pending: pending || noop,\n    rejected: rejected || noop,\n    settled: settled || noop\n  });\n}\nfunction noop() {}","import type { EntityId, EntityState, EntityStateAdapter, EntityStateFactory } from './models';\nexport function getInitialEntityState<T, Id extends EntityId>(): EntityState<T, Id> {\n  return {\n    ids: [],\n    entities: {} as Record<Id, T>\n  };\n}\nexport function createInitialStateFactory<T, Id extends EntityId>(stateAdapter: EntityStateAdapter<T, Id>): EntityStateFactory<T, Id> {\n  function getInitialState(state?: undefined, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id>;\n  function getInitialState<S extends object>(additionalState: S, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id> & S;\n  function getInitialState(additionalState: any = {}, entities?: readonly T[] | Record<Id, T>): any {\n    const state = Object.assign(getInitialEntityState(), additionalState);\n    return entities ? stateAdapter.setAll(state, entities) : state;\n  }\n  return {\n    getInitialState\n  };\n}","import type { CreateSelectorFunction, Selector } from 'reselect';\nimport { createDraftSafeSelector } from '../createDraftSafeSelector';\nimport type { EntityId, EntitySelectors, EntityState } from './models';\ntype AnyFunction = (...args: any) => any;\ntype AnyCreateSelectorFunction = CreateSelectorFunction<<F extends AnyFunction>(f: F) => F, <F extends AnyFunction>(f: F) => F>;\nexport type GetSelectorsOptions = {\n  createSelector?: AnyCreateSelectorFunction;\n};\nexport function createSelectorsFactory<T, Id extends EntityId>() {\n  function getSelectors(selectState?: undefined, options?: GetSelectorsOptions): EntitySelectors<T, EntityState<T, Id>, Id>;\n  function getSelectors<V>(selectState: (state: V) => EntityState<T, Id>, options?: GetSelectorsOptions): EntitySelectors<T, V, Id>;\n  function getSelectors<V>(selectState?: (state: V) => EntityState<T, Id>, options: GetSelectorsOptions = {}): EntitySelectors<T, any, Id> {\n    const {\n      createSelector = createDraftSafeSelector as AnyCreateSelectorFunction\n    } = options;\n    const selectIds = (state: EntityState<T, Id>) => state.ids;\n    const selectEntities = (state: EntityState<T, Id>) => state.entities;\n    const selectAll = createSelector(selectIds, selectEntities, (ids, entities): T[] => ids.map(id => entities[id]!));\n    const selectId = (_: unknown, id: Id) => id;\n    const selectById = (entities: Record<Id, T>, id: Id) => entities[id];\n    const selectTotal = createSelector(selectIds, ids => ids.length);\n    if (!selectState) {\n      return {\n        selectIds,\n        selectEntities,\n        selectAll,\n        selectTotal,\n        selectById: createSelector(selectEntities, selectId, selectById)\n      };\n    }\n    const selectGlobalizedEntities = createSelector(selectState as Selector<V, EntityState<T, Id>>, selectEntities);\n    return {\n      selectIds: createSelector(selectState, selectIds),\n      selectEntities: selectGlobalizedEntities,\n      selectAll: createSelector(selectState, selectAll),\n      selectTotal: createSelector(selectState, selectTotal),\n      selectById: createSelector(selectGlobalizedEntities, selectId, selectById)\n    };\n  }\n  return {\n    getSelectors\n  };\n}","import { produce as createNextState, isDraft } from 'immer';\nimport type { Draft } from 'immer';\nimport type { EntityId, DraftableEntityState, PreventAny } from './models';\nimport type { PayloadAction } from '../createAction';\nimport { isFSA } from '../createAction';\nexport const isDraftTyped = isDraft as <T>(value: T | Draft<T>) => value is Draft<T>;\nexport function createSingleArgumentStateOperator<T, Id extends EntityId>(mutator: (state: DraftableEntityState<T, Id>) => void) {\n  const operator = createStateOperator((_: undefined, state: DraftableEntityState<T, Id>) => mutator(state));\n  return function operation<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>): S {\n    return operator(state as S, undefined);\n  };\n}\nexport function createStateOperator<T, Id extends EntityId, R>(mutator: (arg: R, state: DraftableEntityState<T, Id>) => void) {\n  return function operation<S extends DraftableEntityState<T, Id>>(state: S, arg: R | PayloadAction<R>): S {\n    function isPayloadActionArgument(arg: R | PayloadAction<R>): arg is PayloadAction<R> {\n      return isFSA(arg);\n    }\n    const runMutator = (draft: DraftableEntityState<T, Id>) => {\n      if (isPayloadActionArgument(arg)) {\n        mutator(arg.payload, draft);\n      } else {\n        mutator(arg, draft);\n      }\n    };\n    if (isDraftTyped<DraftableEntityState<T, Id>>(state)) {\n      // we must already be inside a `createNextState` call, likely because\n      // this is being wrapped in `createReducer` or `createSlice`.\n      // It's safe to just pass the draft to the mutator.\n      runMutator(state);\n\n      // since it's a draft, we'll just return it\n      return state;\n    }\n    return createNextState(state, runMutator);\n  };\n}","import type { Draft } from 'immer';\nimport { current, isDraft } from 'immer';\nimport type { DraftableEntityState, EntityId, IdSelector, Update } from './models';\nexport function selectIdValue<T, Id extends EntityId>(entity: T, selectId: IdSelector<T, Id>) {\n  const key = selectId(entity);\n  if (process.env.NODE_ENV !== 'production' && key === undefined) {\n    console.warn('The entity passed to the `selectId` implementation returned undefined.', 'You should probably provide your own `selectId` implementation.', 'The entity that was passed:', entity, 'The `selectId` implementation:', selectId.toString());\n  }\n  return key;\n}\nexport function ensureEntitiesArray<T, Id extends EntityId>(entities: readonly T[] | Record<Id, T>): readonly T[] {\n  if (!Array.isArray(entities)) {\n    entities = Object.values(entities);\n  }\n  return entities;\n}\nexport function getCurrent<T>(value: T | Draft<T>): T {\n  return (isDraft(value) ? current(value) : value) as T;\n}\nexport function splitAddedUpdatedEntities<T, Id extends EntityId>(newEntities: readonly T[] | Record<Id, T>, selectId: IdSelector<T, Id>, state: DraftableEntityState<T, Id>): [T[], Update<T, Id>[], Id[]] {\n  newEntities = ensureEntitiesArray(newEntities);\n  const existingIdsArray = getCurrent(state.ids);\n  const existingIds = new Set<Id>(existingIdsArray);\n  const added: T[] = [];\n  const addedIds = new Set<Id>([]);\n  const updated: Update<T, Id>[] = [];\n  for (const entity of newEntities) {\n    const id = selectIdValue(entity, selectId);\n    if (existingIds.has(id) || addedIds.has(id)) {\n      updated.push({\n        id,\n        changes: entity\n      });\n    } else {\n      addedIds.add(id);\n      added.push(entity);\n    }\n  }\n  return [added, updated, existingIdsArray];\n}","import type { Draft } from 'immer';\nimport type { EntityStateAdapter, IdSelector, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator, createSingleArgumentStateOperator } from './state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities } from './utils';\nexport function createUnsortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  function addOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (key in state.entities) {\n      return;\n    }\n    state.ids.push(key as Id & Draft<Id>);\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      addOneMutably(entity, state);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (!(key in state.entities)) {\n      state.ids.push(key as Id & Draft<Id>);\n    }\n    ;\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      setOneMutably(entity, state);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.ids = [];\n    state.entities = {} as Record<Id, T>;\n    addManyMutably(newEntities, state);\n  }\n  function removeOneMutably(key: Id, state: R): void {\n    return removeManyMutably([key], state);\n  }\n  function removeManyMutably(keys: readonly Id[], state: R): void {\n    let didMutate = false;\n    keys.forEach(key => {\n      if (key in state.entities) {\n        delete (state.entities as Record<Id, T>)[key];\n        didMutate = true;\n      }\n    });\n    if (didMutate) {\n      state.ids = (state.ids as Id[]).filter(id => id in state.entities) as Id[] | Draft<Id[]>;\n    }\n  }\n  function removeAllMutably(state: R): void {\n    Object.assign(state, {\n      ids: [],\n      entities: {}\n    });\n  }\n  function takeNewKey(keys: {\n    [id: string]: Id;\n  }, update: Update<T, Id>, state: R): boolean {\n    const original: T | undefined = (state.entities as Record<Id, T>)[update.id];\n    if (original === undefined) {\n      return false;\n    }\n    const updated: T = Object.assign({}, original, update.changes);\n    const newKey = selectIdValue(updated, selectId);\n    const hasNewKey = newKey !== update.id;\n    if (hasNewKey) {\n      keys[update.id] = newKey;\n      delete (state.entities as Record<Id, T>)[update.id];\n    }\n    ;\n    (state.entities as Record<Id, T>)[newKey] = updated;\n    return hasNewKey;\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    const newKeys: {\n      [id: string]: Id;\n    } = {};\n    const updatesPerEntity: {\n      [id: string]: Update<T, Id>;\n    } = {};\n    updates.forEach(update => {\n      // Only apply updates to entities that currently exist\n      if (update.id in state.entities) {\n        // If there are multiple updates to one entity, merge them together\n        updatesPerEntity[update.id] = {\n          id: update.id,\n          // Spreads ignore falsy values, so this works even if there isn't\n          // an existing update already at this key\n          changes: {\n            ...updatesPerEntity[update.id]?.changes,\n            ...update.changes\n          }\n        };\n      }\n    });\n    updates = Object.values(updatesPerEntity);\n    const didMutateEntities = updates.length > 0;\n    if (didMutateEntities) {\n      const didMutateIds = updates.filter(update => takeNewKey(newKeys, update, state)).length > 0;\n      if (didMutateIds) {\n        state.ids = Object.values(state.entities).map(e => selectIdValue(e as T, selectId));\n      }\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    addManyMutably(added, state);\n    updateManyMutably(updated, state);\n  }\n  return {\n    removeAll: createSingleArgumentStateOperator(removeAllMutably),\n    addOne: createStateOperator(addOneMutably),\n    addMany: createStateOperator(addManyMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    upsertMany: createStateOperator(upsertManyMutably),\n    removeOne: createStateOperator(removeOneMutably),\n    removeMany: createStateOperator(removeManyMutably)\n  };\n}","import type { IdSelector, Comparer, EntityStateAdapter, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator } from './state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities, getCurrent } from './utils';\n\n// Borrowed from Replay\nexport function findInsertIndex<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): number {\n  let lowIndex = 0;\n  let highIndex = sortedItems.length;\n  while (lowIndex < highIndex) {\n    let middleIndex = lowIndex + highIndex >>> 1;\n    const currentItem = sortedItems[middleIndex];\n    const res = comparisonFunction(item, currentItem);\n    if (res >= 0) {\n      lowIndex = middleIndex + 1;\n    } else {\n      highIndex = middleIndex;\n    }\n  }\n  return lowIndex;\n}\nexport function insert<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): T[] {\n  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n  sortedItems.splice(insertAtIndex, 0, item);\n  return sortedItems;\n}\nexport function createSortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>, comparer: Comparer<T>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  const {\n    removeOne,\n    removeMany,\n    removeAll\n  } = createUnsortedStateAdapter(selectId);\n  function addOneMutably(entity: T, state: R): void {\n    return addManyMutably([entity], state);\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R, existingIds?: Id[]): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    const existingKeys = new Set<Id>(existingIds ?? getCurrent(state.ids));\n    const models = newEntities.filter(model => !existingKeys.has(selectIdValue(model, selectId)));\n    if (models.length !== 0) {\n      mergeFunction(state, models);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    return setManyMutably([entity], state);\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    if (newEntities.length !== 0) {\n      for (const item of newEntities) {\n        delete (state.entities as Record<Id, T>)[selectId(item)];\n      }\n      mergeFunction(state, newEntities);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.entities = {} as Record<Id, T>;\n    state.ids = [];\n    addManyMutably(newEntities, state, []);\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    let appliedUpdates = false;\n    let replacedIds = false;\n    for (let update of updates) {\n      const entity: T | undefined = (state.entities as Record<Id, T>)[update.id];\n      if (!entity) {\n        continue;\n      }\n      appliedUpdates = true;\n      Object.assign(entity, update.changes);\n      const newId = selectId(entity);\n      if (update.id !== newId) {\n        // We do support the case where updates can change an item's ID.\n        // This makes things trickier - go ahead and swap the IDs in state now.\n        replacedIds = true;\n        delete (state.entities as Record<Id, T>)[update.id];\n        const oldIndex = (state.ids as Id[]).indexOf(update.id);\n        state.ids[oldIndex] = newId;\n        (state.entities as Record<Id, T>)[newId] = entity;\n      }\n    }\n    if (appliedUpdates) {\n      mergeFunction(state, [], appliedUpdates, replacedIds);\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    if (added.length) {\n      addManyMutably(added, state, existingIdsArray);\n    }\n    if (updated.length) {\n      updateManyMutably(updated, state);\n    }\n  }\n  function areArraysEqual(a: readonly unknown[], b: readonly unknown[]) {\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] === b[i]) {\n        continue;\n      }\n      return false;\n    }\n    return true;\n  }\n  type MergeFunction = (state: R, addedItems: readonly T[], appliedUpdates?: boolean, replacedIds?: boolean) => void;\n  const mergeFunction: MergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n    const currentEntities = getCurrent(state.entities);\n    const currentIds = getCurrent(state.ids);\n    const stateEntities = state.entities as Record<Id, T>;\n    let ids: Iterable<Id> = currentIds;\n    if (replacedIds) {\n      ids = new Set(currentIds);\n    }\n    let sortedEntities: T[] = [];\n    for (const id of ids) {\n      const entity = currentEntities[id];\n      if (entity) {\n        sortedEntities.push(entity);\n      }\n    }\n    const wasPreviouslyEmpty = sortedEntities.length === 0;\n\n    // Insert/overwrite all new/updated\n    for (const item of addedItems) {\n      stateEntities[selectId(item)] = item;\n      if (!wasPreviouslyEmpty) {\n        // Binary search insertion generally requires fewer comparisons\n        insert(sortedEntities, item, comparer);\n      }\n    }\n    if (wasPreviouslyEmpty) {\n      // All we have is the incoming values, sort them\n      sortedEntities = addedItems.slice().sort(comparer);\n    } else if (appliedUpdates) {\n      // We should have a _mostly_-sorted array already\n      sortedEntities.sort(comparer);\n    }\n    const newSortedIds = sortedEntities.map(selectId);\n    if (!areArraysEqual(currentIds, newSortedIds)) {\n      state.ids = newSortedIds;\n    }\n  };\n  return {\n    removeOne,\n    removeMany,\n    removeAll,\n    addOne: createStateOperator(addOneMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    addMany: createStateOperator(addManyMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertMany: createStateOperator(upsertManyMutably)\n  };\n}","import type { EntityAdapter, EntityId, EntityAdapterOptions } from './models';\nimport { createInitialStateFactory } from './entity_state';\nimport { createSelectorsFactory } from './state_selectors';\nimport { createSortedStateAdapter } from './sorted_state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport type { WithRequiredProp } from '../tsHelpers';\nexport function createEntityAdapter<T, Id extends EntityId>(options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>): EntityAdapter<T, Id>;\nexport function createEntityAdapter<T extends {\n  id: EntityId;\n}>(options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>): EntityAdapter<T, T['id']>;\n\n/**\n *\n * @param options\n *\n * @public\n */\nexport function createEntityAdapter<T>(options: EntityAdapterOptions<T, EntityId> = {}): EntityAdapter<T, EntityId> {\n  const {\n    selectId,\n    sortComparer\n  }: Required<EntityAdapterOptions<T, EntityId>> = {\n    sortComparer: false,\n    selectId: (instance: any) => instance.id,\n    ...options\n  };\n  const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n  const stateFactory = createInitialStateFactory(stateAdapter);\n  const selectorsFactory = createSelectorsFactory<T, EntityId>();\n  return {\n    selectId,\n    sortComparer,\n    ...stateFactory,\n    ...selectorsFactory,\n    ...stateAdapter\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Action, Dispatch, MiddlewareAPI, UnknownAction } from 'redux';\nimport { isAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport { createAction } from '../createAction';\nimport { nanoid } from '../nanoid';\nimport { TaskAbortError, listenerCancelled, listenerCompleted, taskCancelled, taskCompleted } from './exceptions';\nimport { createDelay, createPause, raceWithSignal, runTask, validateActive } from './task';\nimport type { AbortSignalWithReason, AddListenerOverloads, AnyListenerPredicate, CreateListenerMiddlewareOptions, FallbackAddListenerOptions, ForkOptions, ForkedTask, ForkedTaskExecutor, ListenerEntry, ListenerErrorHandler, ListenerErrorInfo, ListenerMiddleware, ListenerMiddlewareInstance, TakePattern, TaskResult, TypedAddListener, TypedCreateListenerEntry, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\nimport { abortControllerWithReason, addAbortSignalListener, assertFunction, catchRejection, noop } from './utils';\nexport { TaskAbortError } from './exceptions';\nexport type { AsyncTaskExecutor, CreateListenerMiddlewareOptions, ForkedTask, ForkedTaskAPI, ForkedTaskExecutor, ListenerEffect, ListenerEffectAPI, ListenerErrorHandler, ListenerMiddleware, ListenerMiddlewareInstance, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult, TypedAddListener, TypedRemoveListener, TypedStartListening, TypedStopListening, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\n\n//Overly-aggressive byte-shaving\nconst {\n  assign\n} = Object;\n/**\n * @internal\n */\nconst INTERNAL_NIL_TOKEN = {} as const;\nconst alm = 'listenerMiddleware' as const;\nconst createFork = (parentAbortSignal: AbortSignalWithReason<unknown>, parentBlockingPromises: Promise<any>[]) => {\n  const linkControllers = (controller: AbortController) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n  return <T,>(taskExecutor: ForkedTaskExecutor<T>, opts?: ForkOptions): ForkedTask<T> => {\n    assertFunction(taskExecutor, 'taskExecutor');\n    const childAbortController = new AbortController();\n    linkControllers(childAbortController);\n    const result = runTask<T>(async (): Promise<T> => {\n      validateActive(parentAbortSignal);\n      validateActive(childAbortController.signal);\n      const result = (await taskExecutor({\n        pause: createPause(childAbortController.signal),\n        delay: createDelay(childAbortController.signal),\n        signal: childAbortController.signal\n      })) as T;\n      validateActive(childAbortController.signal);\n      return result;\n    }, () => abortControllerWithReason(childAbortController, taskCompleted));\n    if (opts?.autoJoin) {\n      parentBlockingPromises.push(result.catch(noop));\n    }\n    return {\n      result: createPause<TaskResult<T>>(parentAbortSignal)(result),\n      cancel() {\n        abortControllerWithReason(childAbortController, taskCancelled);\n      }\n    };\n  };\n};\nconst createTakePattern = <S,>(startListening: AddListenerOverloads<UnsubscribeListener, S, Dispatch>, signal: AbortSignal): TakePattern<S> => {\n  /**\n   * A function that takes a ListenerPredicate and an optional timeout,\n   * and resolves when either the predicate returns `true` based on an action\n   * state combination or when the timeout expires.\n   * If the parent listener is canceled while waiting, this will throw a\n   * TaskAbortError.\n   */\n  const take = async <P extends AnyListenerPredicate<S>,>(predicate: P, timeout: number | undefined) => {\n    validateActive(signal);\n\n    // Placeholder unsubscribe function until the listener is added\n    let unsubscribe: UnsubscribeListener = () => {};\n    const tuplePromise = new Promise<[Action, S, S]>((resolve, reject) => {\n      // Inside the Promise, we synchronously add the listener.\n      let stopListening = startListening({\n        predicate: predicate as any,\n        effect: (action, listenerApi): void => {\n          // One-shot listener that cleans up as soon as the predicate passes\n          listenerApi.unsubscribe();\n          // Resolve the promise with the same arguments the predicate saw\n          resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n        }\n      });\n      unsubscribe = () => {\n        stopListening();\n        reject();\n      };\n    });\n    const promises: (Promise<null> | Promise<[Action, S, S]>)[] = [tuplePromise];\n    if (timeout != null) {\n      promises.push(new Promise<null>(resolve => setTimeout(resolve, timeout, null)));\n    }\n    try {\n      const output = await raceWithSignal(signal, Promise.race(promises));\n      validateActive(signal);\n      return output;\n    } finally {\n      // Always clean up the listener\n      unsubscribe();\n    }\n  };\n  return ((predicate: AnyListenerPredicate<S>, timeout: number | undefined) => catchRejection(take(predicate, timeout))) as TakePattern<S>;\n};\nconst getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {\n  let {\n    type,\n    actionCreator,\n    matcher,\n    predicate,\n    effect\n  } = options;\n  if (type) {\n    predicate = createAction(type).match;\n  } else if (actionCreator) {\n    type = actionCreator!.type;\n    predicate = actionCreator.match;\n  } else if (matcher) {\n    predicate = matcher;\n  } else if (predicate) {\n    // pass\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(21) : 'Creating or removing a listener requires one of the known fields for matching an action');\n  }\n  assertFunction(effect, 'options.listener');\n  return {\n    predicate,\n    type,\n    effect\n  };\n};\n\n/** Accepts the possible options for creating a listener, and returns a formatted listener entry */\nexport const createListenerEntry: TypedCreateListenerEntry<unknown> = /* @__PURE__ */assign((options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    predicate,\n    effect\n  } = getListenerEntryPropsFrom(options);\n  const entry: ListenerEntry<unknown> = {\n    id: nanoid(),\n    effect,\n    type,\n    predicate,\n    pending: new Set<AbortController>(),\n    unsubscribe: () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(22) : 'Unsubscribe not initialized');\n    }\n  };\n  return entry;\n}, {\n  withTypes: () => createListenerEntry\n}) as unknown as TypedCreateListenerEntry<unknown>;\nconst findListenerEntry = (listenerMap: Map<string, ListenerEntry>, options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    effect,\n    predicate\n  } = getListenerEntryPropsFrom(options);\n  return Array.from(listenerMap.values()).find(entry => {\n    const matchPredicateOrType = typeof type === 'string' ? entry.type === type : entry.predicate === predicate;\n    return matchPredicateOrType && entry.effect === effect;\n  });\n};\nconst cancelActiveListeners = (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>) => {\n  entry.pending.forEach(controller => {\n    abortControllerWithReason(controller, listenerCancelled);\n  });\n};\nconst createClearListenerMiddleware = (listenerMap: Map<string, ListenerEntry>) => {\n  return () => {\n    listenerMap.forEach(cancelActiveListeners);\n    listenerMap.clear();\n  };\n};\n\n/**\n * Safely reports errors to the `errorHandler` provided.\n * Errors that occur inside `errorHandler` are notified in a new task.\n * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)\n * @param errorHandler\n * @param errorToNotify\n */\nconst safelyNotifyError = (errorHandler: ListenerErrorHandler, errorToNotify: unknown, errorInfo: ListenerErrorInfo): void => {\n  try {\n    errorHandler(errorToNotify, errorInfo);\n  } catch (errorHandlerError) {\n    // We cannot let an error raised here block the listener queue.\n    // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...\n    setTimeout(() => {\n      throw errorHandlerError;\n    }, 0);\n  }\n};\n\n/**\n * @public\n */\nexport const addListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/add`), {\n  withTypes: () => addListener\n}) as unknown as TypedAddListener<unknown>;\n\n/**\n * @public\n */\nexport const clearAllListeners = /* @__PURE__ */createAction(`${alm}/removeAll`);\n\n/**\n * @public\n */\nexport const removeListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/remove`), {\n  withTypes: () => removeListener\n}) as unknown as TypedRemoveListener<unknown>;\nconst defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {\n  console.error(`${alm}/error`, ...args);\n};\n\n/**\n * @public\n */\nexport const createListenerMiddleware = <StateType = unknown, DispatchType extends Dispatch<Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown>(middlewareOptions: CreateListenerMiddlewareOptions<ExtraArgument> = {}) => {\n  const listenerMap = new Map<string, ListenerEntry>();\n  const {\n    extra,\n    onError = defaultErrorHandler\n  } = middlewareOptions;\n  assertFunction(onError, 'onError');\n  const insertEntry = (entry: ListenerEntry) => {\n    entry.unsubscribe = () => listenerMap.delete(entry.id);\n    listenerMap.set(entry.id, entry);\n    return (cancelOptions?: UnsubscribeListenerOptions) => {\n      entry.unsubscribe();\n      if (cancelOptions?.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    };\n  };\n  const startListening = ((options: FallbackAddListenerOptions) => {\n    const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options as any);\n    return insertEntry(entry);\n  }) as AddListenerOverloads<any>;\n  assign(startListening, {\n    withTypes: () => startListening\n  });\n  const stopListening = (options: FallbackAddListenerOptions & UnsubscribeListenerOptions): boolean => {\n    const entry = findListenerEntry(listenerMap, options);\n    if (entry) {\n      entry.unsubscribe();\n      if (options.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    }\n    return !!entry;\n  };\n  assign(stopListening, {\n    withTypes: () => stopListening\n  });\n  const notifyListener = async (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>, action: unknown, api: MiddlewareAPI, getOriginalState: () => StateType) => {\n    const internalTaskController = new AbortController();\n    const take = createTakePattern(startListening as AddListenerOverloads<any>, internalTaskController.signal);\n    const autoJoinPromises: Promise<any>[] = [];\n    try {\n      entry.pending.add(internalTaskController);\n      await Promise.resolve(entry.effect(action,\n      // Use assign() rather than ... to avoid extra helper functions added to bundle\n      assign({}, api, {\n        getOriginalState,\n        condition: (predicate: AnyListenerPredicate<any>, timeout?: number) => take(predicate, timeout).then(Boolean),\n        take,\n        delay: createDelay(internalTaskController.signal),\n        pause: createPause<any>(internalTaskController.signal),\n        extra,\n        signal: internalTaskController.signal,\n        fork: createFork(internalTaskController.signal, autoJoinPromises),\n        unsubscribe: entry.unsubscribe,\n        subscribe: () => {\n          listenerMap.set(entry.id, entry);\n        },\n        cancelActiveListeners: () => {\n          entry.pending.forEach((controller, _, set) => {\n            if (controller !== internalTaskController) {\n              abortControllerWithReason(controller, listenerCancelled);\n              set.delete(controller);\n            }\n          });\n        },\n        cancel: () => {\n          abortControllerWithReason(internalTaskController, listenerCancelled);\n          entry.pending.delete(internalTaskController);\n        },\n        throwIfCancelled: () => {\n          validateActive(internalTaskController.signal);\n        }\n      })));\n    } catch (listenerError) {\n      if (!(listenerError instanceof TaskAbortError)) {\n        safelyNotifyError(onError, listenerError, {\n          raisedBy: 'effect'\n        });\n      }\n    } finally {\n      await Promise.all(autoJoinPromises);\n      abortControllerWithReason(internalTaskController, listenerCompleted); // Notify that the task has completed\n      entry.pending.delete(internalTaskController);\n    }\n  };\n  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n  const middleware: ListenerMiddleware<StateType, DispatchType, ExtraArgument> = api => next => action => {\n    if (!isAction(action)) {\n      // we only want to notify listeners for action objects\n      return next(action);\n    }\n    if (addListener.match(action)) {\n      return startListening(action.payload as any);\n    }\n    if (clearAllListeners.match(action)) {\n      clearListenerMiddleware();\n      return;\n    }\n    if (removeListener.match(action)) {\n      return stopListening(action.payload);\n    }\n\n    // Need to get this state _before_ the reducer processes the action\n    let originalState: StateType | typeof INTERNAL_NIL_TOKEN = api.getState();\n\n    // `getOriginalState` can only be called synchronously.\n    // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820\n    const getOriginalState = (): StateType => {\n      if (originalState === INTERNAL_NIL_TOKEN) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(23) : `${alm}: getOriginalState can only be called synchronously`);\n      }\n      return originalState as StateType;\n    };\n    let result: unknown;\n    try {\n      // Actually forward the action to the reducer before we handle listeners\n      result = next(action);\n      if (listenerMap.size > 0) {\n        const currentState = api.getState();\n        // Work around ESBuild+TS transpilation issue\n        const listenerEntries = Array.from(listenerMap.values());\n        for (const entry of listenerEntries) {\n          let runListener = false;\n          try {\n            runListener = entry.predicate(action, currentState, originalState);\n          } catch (predicateError) {\n            runListener = false;\n            safelyNotifyError(onError, predicateError, {\n              raisedBy: 'predicate'\n            });\n          }\n          if (!runListener) {\n            continue;\n          }\n          notifyListener(entry, action, api, getOriginalState);\n        }\n      }\n    } finally {\n      // Remove `originalState` store from this scope.\n      originalState = INTERNAL_NIL_TOKEN;\n    }\n    return result;\n  };\n  return {\n    middleware,\n    startListening,\n    stopListening,\n    clearListeners: clearListenerMiddleware\n  } as ListenerMiddlewareInstance<StateType, DispatchType, ExtraArgument>;\n};","import type { SerializedError } from '@reduxjs/toolkit';\nconst task = 'task';\nconst listener = 'listener';\nconst completed = 'completed';\nconst cancelled = 'cancelled';\n\n/* TaskAbortError error codes  */\nexport const taskCancelled = `task-${cancelled}` as const;\nexport const taskCompleted = `task-${completed}` as const;\nexport const listenerCancelled = `${listener}-${cancelled}` as const;\nexport const listenerCompleted = `${listener}-${completed}` as const;\nexport class TaskAbortError implements SerializedError {\n  name = 'TaskAbortError';\n  message: string;\n  constructor(public code: string | undefined) {\n    this.message = `${task} ${cancelled} (reason: ${code})`;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AbortSignalWithReason } from './types';\nexport const assertFunction: (func: unknown, expected: string) => asserts func is (...args: unknown[]) => unknown = (func: unknown, expected: string) => {\n  if (typeof func !== 'function') {\n    throw new TypeError(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(32) : `${expected} is not a function`);\n  }\n};\nexport const noop = () => {};\nexport const catchRejection = <T,>(promise: Promise<T>, onError = noop): Promise<T> => {\n  promise.catch(onError);\n  return promise;\n};\nexport const addAbortSignalListener = (abortSignal: AbortSignal, callback: (evt: Event) => void) => {\n  abortSignal.addEventListener('abort', callback, {\n    once: true\n  });\n  return () => abortSignal.removeEventListener('abort', callback);\n};\n\n/**\n * Calls `abortController.abort(reason)` and patches `signal.reason`.\n * if it is not supported.\n *\n * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.\n * @param abortController\n * @param reason\n * @returns\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\n */\nexport const abortControllerWithReason = <T,>(abortController: AbortController, reason: T): void => {\n  type Consumer<T> = (val: T) => void;\n  const signal = abortController.signal as AbortSignalWithReason<T>;\n  if (signal.aborted) {\n    return;\n  }\n\n  // Patch `reason` if necessary.\n  // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.\n  // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'\n  // event are are notified immediately.\n  if (!('reason' in signal)) {\n    Object.defineProperty(signal, 'reason', {\n      enumerable: true,\n      value: reason,\n      configurable: true,\n      writable: true\n    });\n  }\n  ;\n  (abortController.abort as Consumer<typeof reason>)(reason);\n};","import { TaskAbortError } from './exceptions';\nimport type { AbortSignalWithReason, TaskResult } from './types';\nimport { addAbortSignalListener, catchRejection, noop } from './utils';\n\n/**\n * Synchronously raises {@link TaskAbortError} if the task tied to the input `signal` has been cancelled.\n * @param signal\n * @param reason\n * @see {TaskAbortError}\n */\nexport const validateActive = (signal: AbortSignal): void => {\n  if (signal.aborted) {\n    const {\n      reason\n    } = signal as AbortSignalWithReason<string>;\n    throw new TaskAbortError(reason);\n  }\n};\n\n/**\n * Generates a race between the promise(s) and the AbortSignal\n * This avoids `Promise.race()`-related memory leaks:\n * https://github.com/nodejs/node/issues/17469#issuecomment-349794909\n */\nexport function raceWithSignal<T>(signal: AbortSignalWithReason<string>, promise: Promise<T>): Promise<T> {\n  let cleanup = noop;\n  return new Promise<T>((resolve, reject) => {\n    const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n    if (signal.aborted) {\n      notifyRejection();\n      return;\n    }\n    cleanup = addAbortSignalListener(signal, notifyRejection);\n    promise.finally(() => cleanup()).then(resolve, reject);\n  }).finally(() => {\n    // after this point, replace `cleanup` with a noop, so there is no reference to `signal` any more\n    cleanup = noop;\n  });\n}\n\n/**\n * Runs a task and returns promise that resolves to {@link TaskResult}.\n * Second argument is an optional `cleanUp` function that always runs after task.\n *\n * **Note:** `runTask` runs the executor in the next microtask.\n * @returns\n */\nexport const runTask = async <T,>(task: () => Promise<T>, cleanUp?: () => void): Promise<TaskResult<T>> => {\n  try {\n    await Promise.resolve();\n    const value = await task();\n    return {\n      status: 'ok',\n      value\n    };\n  } catch (error: any) {\n    return {\n      status: error instanceof TaskAbortError ? 'cancelled' : 'rejected',\n      error\n    };\n  } finally {\n    cleanUp?.();\n  }\n};\n\n/**\n * Given an input `AbortSignal` and a promise returns another promise that resolves\n * as soon the input promise is provided or rejects as soon as\n * `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createPause = <T,>(signal: AbortSignal) => {\n  return (promise: Promise<T>): Promise<T> => {\n    return catchRejection(raceWithSignal(signal, promise).then(output => {\n      validateActive(signal);\n      return output;\n    }));\n  };\n};\n\n/**\n * Given an input `AbortSignal` and `timeoutMs` returns a promise that resolves\n * after `timeoutMs` or rejects as soon as `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createDelay = (signal: AbortSignal) => {\n  const pause = createPause<void>(signal);\n  return (timeoutMs: number): Promise<void> => {\n    return pause(new Promise<void>(resolve => setTimeout(resolve, timeoutMs)));\n  };\n};","import type { Dispatch, Middleware, UnknownAction } from 'redux';\nimport { compose } from 'redux';\nimport { createAction } from '../createAction';\nimport { isAllOf } from '../matchers';\nimport { nanoid } from '../nanoid';\nimport { getOrInsertComputed } from '../utils';\nimport type { AddMiddleware, DynamicMiddleware, DynamicMiddlewareInstance, MiddlewareEntry, WithMiddleware } from './types';\nexport type { DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './types';\nconst createMiddlewareEntry = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(middleware: Middleware<any, State, DispatchType>): MiddlewareEntry<State, DispatchType> => ({\n  middleware,\n  applied: new Map()\n});\nconst matchInstance = (instanceId: string) => (action: any): action is {\n  meta: {\n    instanceId: string;\n  };\n} => action?.meta?.instanceId === instanceId;\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): DynamicMiddlewareInstance<State, DispatchType> => {\n  const instanceId = nanoid();\n  const middlewareMap = new Map<Middleware<any, State, DispatchType>, MiddlewareEntry<State, DispatchType>>();\n  const withMiddleware = Object.assign(createAction('dynamicMiddleware/add', (...middlewares: Middleware<any, State, DispatchType>[]) => ({\n    payload: middlewares,\n    meta: {\n      instanceId\n    }\n  })), {\n    withTypes: () => withMiddleware\n  }) as WithMiddleware<State, DispatchType>;\n  const addMiddleware = Object.assign(function addMiddleware(...middlewares: Middleware<any, State, DispatchType>[]) {\n    middlewares.forEach(middleware => {\n      getOrInsertComputed(middlewareMap, middleware, createMiddlewareEntry);\n    });\n  }, {\n    withTypes: () => addMiddleware\n  }) as AddMiddleware<State, DispatchType>;\n  const getFinalMiddleware: Middleware<{}, State, DispatchType> = api => {\n    const appliedMiddleware = Array.from(middlewareMap.values()).map(entry => getOrInsertComputed(entry.applied, api, entry.middleware));\n    return compose(...appliedMiddleware);\n  };\n  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n  const middleware: DynamicMiddleware<State, DispatchType> = api => next => action => {\n    if (isWithMiddleware(action)) {\n      addMiddleware(...action.payload);\n      return api.dispatch;\n    }\n    return getFinalMiddleware(api)(next)(action);\n  };\n  return {\n    middleware,\n    addMiddleware,\n    withMiddleware,\n    instanceId\n  };\n};","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Reducer, StateFromReducersMapObject, UnknownAction } from 'redux';\nimport { combineReducers } from 'redux';\nimport { nanoid } from './nanoid';\nimport type { Id, NonUndefined, Tail, UnionToIntersection, WithOptionalProp } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\ntype SliceLike<ReducerPath extends string, State> = {\n  reducerPath: ReducerPath;\n  reducer: Reducer<State>;\n};\ntype AnySliceLike = SliceLike<string, any>;\ntype SliceLikeReducerPath<A extends AnySliceLike> = A extends SliceLike<infer ReducerPath, any> ? ReducerPath : never;\ntype SliceLikeState<A extends AnySliceLike> = A extends SliceLike<any, infer State> ? State : never;\nexport type WithSlice<A extends AnySliceLike> = { [Path in SliceLikeReducerPath<A>]: SliceLikeState<A> };\ntype ReducerMap = Record<string, Reducer>;\ntype ExistingSliceLike<DeclaredState> = { [ReducerPath in keyof DeclaredState]: SliceLike<ReducerPath & string, NonUndefined<DeclaredState[ReducerPath]>> }[keyof DeclaredState];\nexport type InjectConfig = {\n  /**\n   * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.\n   */\n  overrideExisting?: boolean;\n};\n\n/**\n * A reducer that allows for slices/reducers to be injected after initialisation.\n */\nexport interface CombinedSliceReducer<InitialState, DeclaredState = InitialState> extends Reducer<DeclaredState, UnknownAction, Partial<DeclaredState>> {\n  /**\n   * Provide a type for slices that will be injected lazily.\n   *\n   * One way to do this would be with interface merging:\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {}\n   *\n   * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * // elsewhere\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBoolean = rootReducer.inject(booleanSlice);\n   *\n   * // elsewhere again\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices {\n   *     customName: CustomState\n   *   }\n   * }\n   *\n   * const withCustom = rootReducer.inject({ reducerPath: \"customName\", reducer: customSlice.reducer })\n   * ```\n   */\n  withLazyLoadedSlices<Lazy = {}>(): CombinedSliceReducer<InitialState, Id<DeclaredState & Partial<Lazy>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<Sl extends Id<ExistingSliceLike<DeclaredState>>>(slice: Sl, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<Sl>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<ReducerPath extends string, State>(slice: SliceLike<ReducerPath, State & (ReducerPath extends keyof DeclaredState ? never : State)>, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<SliceLike<ReducerPath, State>>>>;\n\n  /**\n   * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n   *\n   * ```ts\n   * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n   * //                                                                ^? boolean | undefined\n   *\n   * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n   *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n   *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n   *   return state.boolean;\n   *   //           ^? boolean\n   * })\n   * ```\n   *\n   * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n   *\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {};\n   *\n   * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * export const rootReducer = combineSlices({ inner: innerReducer });\n   *\n   * export type RootState = ReturnType<typeof rootReducer>;\n   *\n   * // elsewhere\n   *\n   * declare module \"./reducer.ts\" {\n   *  export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBool = innerReducer.inject(booleanSlice);\n   *\n   * const selectBoolean = withBool.selector(\n   *   (state) => state.boolean,\n   *   (rootState: RootState) => state.inner\n   * );\n   * //    now expects to be passed RootState instead of innerReducer state\n   *\n   * ```\n   *\n   * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n   *\n   * ```ts\n   * const injectedReducer = rootReducer.inject(booleanSlice);\n   * const selectBoolean = injectedReducer.selector((state) => {\n   *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n   *   return state.boolean\n   * })\n   * ```\n   */\n  selector: {\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown>(selectorFn: Selector): (state: WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n     *\n     * ```ts\n     *\n     * interface LazyLoadedSlices {};\n     *\n     * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n     *\n     * const rootReducer = combineSlices({ inner: innerReducer });\n     *\n     * type RootState = ReturnType<typeof rootReducer>;\n     *\n     * // elsewhere\n     *\n     * declare module \"./reducer.ts\" {\n     *  interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n     * }\n     *\n     * const withBool = innerReducer.inject(booleanSlice);\n     *\n     * const selectBoolean = withBool.selector(\n     *   (state) => state.boolean,\n     *   (rootState: RootState) => state.inner\n     * );\n     * //    now expects to be passed RootState instead of innerReducer state\n     *\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown, RootState>(selectorFn: Selector, selectState: (rootState: RootState, ...args: Tail<Parameters<Selector>>) => WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>): (state: RootState, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n    /**\n     * Returns the unproxied state. Useful for debugging.\n     * @param state state Proxy, that ensures injected reducers have value\n     * @returns original, unproxied state\n     * @throws if value passed is not a state Proxy\n     */\n    original: (state: DeclaredState) => InitialState & Partial<DeclaredState>;\n  };\n}\ntype InitialState<Slices extends Array<AnySliceLike | ReducerMap>> = UnionToIntersection<Slices[number] extends infer Slice ? Slice extends AnySliceLike ? WithSlice<Slice> : StateFromReducersMapObject<Slice> : never>;\nconst isSliceLike = (maybeSliceLike: AnySliceLike | ReducerMap): maybeSliceLike is AnySliceLike => 'reducerPath' in maybeSliceLike && typeof maybeSliceLike.reducerPath === 'string';\nconst getReducers = (slices: Array<AnySliceLike | ReducerMap>) => slices.flatMap(sliceOrMap => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer] as const] : Object.entries(sliceOrMap));\nconst ORIGINAL_STATE = Symbol.for('rtk-state-proxy-original');\nconst isStateProxy = (value: any) => !!value && !!value[ORIGINAL_STATE];\nconst stateProxyMap = new WeakMap<object, object>();\nconst createStateProxy = <State extends object,>(state: State, reducerMap: Partial<Record<PropertyKey, Reducer>>, initialStateCache: Record<PropertyKey, unknown>) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n  get: (target, prop, receiver) => {\n    if (prop === ORIGINAL_STATE) return target;\n    const result = Reflect.get(target, prop, receiver);\n    if (typeof result === 'undefined') {\n      const cached = initialStateCache[prop];\n      if (typeof cached !== 'undefined') return cached;\n      const reducer = reducerMap[prop];\n      if (reducer) {\n        // ensure action type is random, to prevent reducer treating it differently\n        const reducerResult = reducer(undefined, {\n          type: nanoid()\n        });\n        if (typeof reducerResult === 'undefined') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n        }\n        initialStateCache[prop] = reducerResult;\n        return reducerResult;\n      }\n    }\n    return result;\n  }\n})) as State;\nconst original = (state: any) => {\n  if (!isStateProxy(state)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(25) : 'original must be used on state Proxy');\n  }\n  return state[ORIGINAL_STATE];\n};\nconst emptyObject = {};\nconst noopReducer: Reducer<Record<string, any>> = (state = emptyObject) => state;\nexport function combineSlices<Slices extends Array<AnySliceLike | ReducerMap>>(...slices: Slices): CombinedSliceReducer<Id<InitialState<Slices>>> {\n  const reducerMap = Object.fromEntries<Reducer>(getReducers(slices));\n  const getReducer = () => Object.keys(reducerMap).length ? combineReducers(reducerMap) : noopReducer;\n  let reducer = getReducer();\n  function combinedReducer(state: Record<string, unknown>, action: UnknownAction) {\n    return reducer(state, action);\n  }\n  combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n  const initialStateCache: Record<PropertyKey, unknown> = {};\n  const inject = (slice: AnySliceLike, config: InjectConfig = {}): typeof combinedReducer => {\n    const {\n      reducerPath,\n      reducer: reducerToInject\n    } = slice;\n    const currentReducer = reducerMap[reducerPath];\n    if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n      }\n      return combinedReducer;\n    }\n    if (config.overrideExisting && currentReducer !== reducerToInject) {\n      delete initialStateCache[reducerPath];\n    }\n    reducerMap[reducerPath] = reducerToInject;\n    reducer = getReducer();\n    return combinedReducer;\n  };\n  const selector = Object.assign(function makeSelector<State extends object, RootState, Args extends any[]>(selectorFn: (state: State, ...args: Args) => any, selectState?: (rootState: RootState, ...args: Args) => State) {\n    return function selector(state: State, ...args: Args) {\n      return selectorFn(createStateProxy(selectState ? selectState(state as any, ...args) : state, reducerMap, initialStateCache), ...args);\n    };\n  }, {\n    original\n  });\n  return Object.assign(combinedReducer, {\n    inject,\n    selector\n  }) as any;\n}","/**\r\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\r\n *\r\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\r\n * during build.\r\n * @param {number} code\r\n */\nexport function formatProdErrorMessage(code: number) {\n  return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}"],"mappings":"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","names":["src_exports","__export","ReducerType","SHOULD_AUTOBATCH","TaskAbortError","Tuple","addListener","asyncThunkCreator","autoBatchEnhancer","buildCreateSlice","clearAllListeners","combineSlices","configureStore","createAction","createActionCreatorInvariantMiddleware","createAsyncThunk","createDraftSafeSelector","createDraftSafeSelectorCreator","createDynamicMiddleware","createEntityAdapter","createImmutableStateInvariantMiddleware","createListenerMiddleware","createReducer","createSerializableStateInvariantMiddleware","createSlice","findNonSerializableValue","formatProdErrorMessage","isActionCreator","isAllOf","isAnyOf","isAsyncThunkAction","isFSA","isFulfilled","isImmutableDefault","isPending","isPlain","isRejected","isRejectedWithValue","miniSerializeError","nanoid","prepareAutoBatched","removeListener","unwrapResult","__toCommonJS","__reExport","import_immer","import_reselect","import_immer","import_reselect","createDraftSafeSelectorCreator","args","createSelector","createDraftSafeSelector","selector","wrappedSelector","value","rest","import_redux","import_redux","composeWithDevTools","devToolsEnhancer","noop","import_redux_thunk","import_redux","hasMatchFunction","v","createAction","type","prepareAction","actionCreator","args","prepared","formatProdErrorMessage","action","isActionCreator","hasMatchFunction","isFSA","isValidKey","key","getMessage","type","splitType","actionName","createActionCreatorInvariantMiddleware","options","next","action","import_immer","Tuple","_Tuple","items","arr","freezeDraftable","val","createNextState","getOrInsertComputed","map","key","compute","isImmutableDefault","value","createImmutableStateInvariantMiddleware","options","next","action","stringify","getSerialize","import_redux","isPlain","val","type","findNonSerializableValue","value","path","isSerializable","getEntries","ignoredPaths","cache","foundNestedSerializable","entries","hasIgnoredPaths","key","nestedValue","nestedPath","ignored","isNestedFrozen","createSerializableStateInvariantMiddleware","options","next","action","isBoolean","x","buildGetDefaultMiddleware","options","thunk","immutableCheck","serializableCheck","actionCreatorCheck","middlewareArray","Tuple","thunkMiddleware","SHOULD_AUTOBATCH","prepareAutoBatched","payload","createQueueWithTimer","timeout","notify","autoBatchEnhancer","options","next","args","store","notifying","shouldNotifyAtEndOfTick","notificationQueued","listeners","queueCallback","notifyListeners","l","listener","wrappedListener","unsubscribe","action","buildGetDefaultEnhancers","middlewareEnhancer","options","autoBatch","enhancerArray","Tuple","autoBatchEnhancer","configureStore","options","getDefaultMiddleware","buildGetDefaultMiddleware","reducer","middleware","devTools","duplicateMiddlewareCheck","preloadedState","enhancers","rootReducer","formatProdErrorMessage","finalMiddleware","finalCompose","composeWithDevTools","middlewareEnhancer","getDefaultEnhancers","buildGetDefaultEnhancers","storeEnhancers","composedEnhancer","import_immer","executeReducerBuilderCallback","builderCallback","actionsMap","actionMatchers","defaultCaseReducer","builder","typeOrActionCreator","reducer","type","formatProdErrorMessage","matcher","isStateFunction","x","createReducer","initialState","mapOrBuilderCallback","actionsMap","finalActionMatchers","finalDefaultCaseReducer","executeReducerBuilderCallback","getInitialState","freezeDraftable","frozenInitialState","reducer","state","action","caseReducers","matcher","cr","previousState","caseReducer","result","createNextState","draft","matches","matcher","action","hasMatchFunction","isAnyOf","matchers","isAllOf","hasExpectedRequestMetadata","validStatus","hasValidRequestId","hasValidRequestStatus","isAsyncThunkArray","a","isPending","asyncThunks","asyncThunk","isRejected","isRejectedWithValue","hasFlag","isFulfilled","isAsyncThunkAction","urlAlphabet","nanoid","size","id","i","commonProperties","RejectWithValue","payload","meta","FulfillWithMeta","miniSerializeError","value","simpleError","property","externalAbortMessage","createAsyncThunk","typePrefix","payloadCreator","options","fulfilled","createAction","requestId","arg","pending","rejected","error","actionCreator","signal","dispatch","getState","extra","nanoid","abortController","abortHandler","abortReason","abort","reason","promise","finalAction","conditionResult","isThenable","abortedPromise","_","reject","result","err","unwrapResult","isAnyOf","action","asyncThunkSymbol","asyncThunkCreator","createAsyncThunk","ReducerType","getType","slice","actionKey","buildCreateSlice","creators","cAT","options","name","reducerPath","formatProdErrorMessage","reducers","buildReducerCreators","reducerNames","context","contextMethods","typeOrActionCreator","reducer","type","matcher","actionCreator","reducerName","reducerDefinition","reducerDetails","isAsyncThunkSliceReducerDefinition","handleThunkCaseReducerDefinition","handleNormalReducerDefinition","buildReducer","extraReducers","actionMatchers","defaultCaseReducer","executeReducerBuilderCallback","finalCaseReducers","createReducer","builder","key","sM","m","selectSelf","state","injectedSelectorCache","injectedStateCache","_reducer","action","getInitialState","makeSelectorProps","injected","selectSlice","sliceState","getOrInsertComputed","getSelectors","selectState","selectorCache","map","selector","wrapSelector","injectable","pathOpt","config","newReducerPath","wrapper","rootState","args","createSlice","asyncThunk","payloadCreator","caseReducer","prepare","createNotation","maybeReducerWithPrepare","prepareCallback","isCaseReducerWithPrepareDefinition","createAction","fulfilled","pending","rejected","settled","thunk","noop","getInitialEntityState","createInitialStateFactory","stateAdapter","getInitialState","additionalState","entities","state","createSelectorsFactory","getSelectors","selectState","options","createSelector","createDraftSafeSelector","selectIds","state","selectEntities","selectAll","ids","entities","id","selectId","_","selectById","selectTotal","selectGlobalizedEntities","import_immer","isDraftTyped","createSingleArgumentStateOperator","mutator","operator","createStateOperator","_","state","arg","isPayloadActionArgument","isFSA","runMutator","draft","createNextState","import_immer","selectIdValue","entity","selectId","ensureEntitiesArray","entities","getCurrent","value","splitAddedUpdatedEntities","newEntities","state","existingIdsArray","existingIds","added","addedIds","updated","id","createUnsortedStateAdapter","selectId","addOneMutably","entity","state","key","selectIdValue","addManyMutably","newEntities","ensureEntitiesArray","setOneMutably","setManyMutably","setAllMutably","removeOneMutably","removeManyMutably","keys","didMutate","id","removeAllMutably","takeNewKey","update","original","updated","newKey","hasNewKey","updateOneMutably","updateManyMutably","updates","newKeys","updatesPerEntity","e","upsertOneMutably","upsertManyMutably","added","splitAddedUpdatedEntities","createSingleArgumentStateOperator","createStateOperator","findInsertIndex","sortedItems","item","comparisonFunction","lowIndex","highIndex","middleIndex","currentItem","insert","insertAtIndex","createSortedStateAdapter","selectId","comparer","removeOne","removeMany","removeAll","createUnsortedStateAdapter","addOneMutably","entity","state","addManyMutably","newEntities","existingIds","ensureEntitiesArray","existingKeys","getCurrent","models","model","selectIdValue","mergeFunction","setOneMutably","setManyMutably","setAllMutably","updateOneMutably","update","updateManyMutably","updates","appliedUpdates","replacedIds","newId","oldIndex","upsertOneMutably","upsertManyMutably","added","updated","existingIdsArray","splitAddedUpdatedEntities","areArraysEqual","a","b","i","addedItems","currentEntities","currentIds","stateEntities","ids","sortedEntities","id","wasPreviouslyEmpty","newSortedIds","createStateOperator","createEntityAdapter","options","selectId","sortComparer","instance","stateAdapter","createSortedStateAdapter","createUnsortedStateAdapter","stateFactory","createInitialStateFactory","selectorsFactory","createSelectorsFactory","import_redux","task","listener","completed","cancelled","taskCancelled","taskCompleted","listenerCancelled","listenerCompleted","TaskAbortError","code","assertFunction","func","expected","formatProdErrorMessage","noop","catchRejection","promise","onError","addAbortSignalListener","abortSignal","callback","abortControllerWithReason","abortController","reason","signal","validateActive","signal","reason","TaskAbortError","raceWithSignal","promise","cleanup","noop","resolve","reject","notifyRejection","addAbortSignalListener","runTask","task","cleanUp","error","createPause","catchRejection","output","createDelay","pause","timeoutMs","assign","INTERNAL_NIL_TOKEN","alm","createFork","parentAbortSignal","parentBlockingPromises","linkControllers","controller","addAbortSignalListener","abortControllerWithReason","taskExecutor","opts","assertFunction","childAbortController","result","runTask","validateActive","createPause","createDelay","taskCompleted","noop","taskCancelled","createTakePattern","startListening","signal","take","predicate","timeout","unsubscribe","promises","resolve","reject","stopListening","action","listenerApi","output","raceWithSignal","catchRejection","getListenerEntryPropsFrom","options","type","actionCreator","matcher","effect","createAction","formatProdErrorMessage","createListenerEntry","nanoid","findListenerEntry","listenerMap","entry","cancelActiveListeners","listenerCancelled","createClearListenerMiddleware","safelyNotifyError","errorHandler","errorToNotify","errorInfo","errorHandlerError","addListener","clearAllListeners","removeListener","defaultErrorHandler","args","createListenerMiddleware","middlewareOptions","extra","onError","insertEntry","cancelOptions","notifyListener","api","getOriginalState","internalTaskController","autoJoinPromises","_","set","listenerError","TaskAbortError","listenerCompleted","clearListenerMiddleware","next","originalState","currentState","listenerEntries","runListener","predicateError","import_redux","createMiddlewareEntry","middleware","matchInstance","instanceId","action","createDynamicMiddleware","nanoid","middlewareMap","withMiddleware","createAction","middlewares","addMiddleware","getOrInsertComputed","getFinalMiddleware","api","appliedMiddleware","entry","isWithMiddleware","isAllOf","next","import_redux","isSliceLike","maybeSliceLike","getReducers","slices","sliceOrMap","ORIGINAL_STATE","isStateProxy","value","stateProxyMap","createStateProxy","state","reducerMap","initialStateCache","getOrInsertComputed","target","prop","receiver","result","cached","reducer","reducerResult","nanoid","formatProdErrorMessage","original","emptyObject","noopReducer","combineSlices","getReducer","combinedReducer","action","inject","slice","config","reducerPath","reducerToInject","currentReducer","selector","selectorFn","selectState","args","formatProdErrorMessage","code"]}
Index: node_modules/@reduxjs/toolkit/dist/index.d.mts
===================================================================
--- node_modules/@reduxjs/toolkit/dist/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2623 @@
+import { ActionCreator, Action, Middleware, StoreEnhancer, UnknownAction, Reducer, ReducersMapObject, Store, StateFromReducersMapObject, Dispatch, MiddlewareAPI } from 'redux';
+export * from 'redux';
+import { Draft } from 'immer';
+export { Draft, produce as createNextState, current, freeze, isDraft, original } from 'immer';
+import * as reselect from 'reselect';
+import { weakMapMemoize, createSelectorCreator, Selector, CreateSelectorFunction } from 'reselect';
+export { OutputSelector, Selector, createSelector, createSelectorCreator, lruMemoize, weakMapMemoize } from 'reselect';
+import { ThunkMiddleware, ThunkDispatch } from 'redux-thunk';
+export { ThunkAction, ThunkDispatch, ThunkMiddleware } from 'redux-thunk';
+import { UncheckedIndexedAccess } from './uncheckedindexed.js';
+
+declare const createDraftSafeSelectorCreator: typeof createSelectorCreator;
+/**
+ * "Draft-Safe" version of `reselect`'s `createSelector`:
+ * If an `immer`-drafted object is passed into the resulting selector's first argument,
+ * the selector will act on the current draft value, instead of returning a cached value
+ * that might be possibly outdated if the draft has been modified since.
+ * @public
+ */
+declare const createDraftSafeSelector: reselect.CreateSelectorFunction<typeof weakMapMemoize, typeof weakMapMemoize, any>;
+
+/**
+ * @public
+ */
+interface DevToolsEnhancerOptions {
+    /**
+     * the instance name to be showed on the monitor page. Default value is `document.title`.
+     * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.
+     */
+    name?: string;
+    /**
+     * action creators functions to be available in the Dispatcher.
+     */
+    actionCreators?: ActionCreator<any>[] | {
+        [key: string]: ActionCreator<any>;
+    };
+    /**
+     * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.
+     * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.
+     * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).
+     *
+     * @default 500 ms.
+     */
+    latency?: number;
+    /**
+     * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.
+     *
+     * @default 50
+     */
+    maxAge?: number;
+    /**
+     * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you
+     * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`
+     * functions.
+     */
+    serialize?: boolean | {
+        /**
+         * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).
+         * - `false` - will handle also circular references.
+         * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.
+         * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.
+         *   For each of them you can indicate if to include (by setting as `true`).
+         *   For `function` key you can also specify a custom function which handles serialization.
+         *   See [`jsan`](https://github.com/kolodny/jsan) for more details.
+         */
+        options?: undefined | boolean | {
+            date?: true;
+            regex?: true;
+            undefined?: true;
+            error?: true;
+            symbol?: true;
+            map?: true;
+            set?: true;
+            function?: true | ((fn: (...args: any[]) => any) => string);
+        };
+        /**
+         * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.
+         * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)
+         * key. So you can deserialize it back while importing or persisting data.
+         * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):
+         */
+        replacer?: (key: string, value: unknown) => any;
+        /**
+         * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)
+         * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)
+         * as an example on how to serialize special data types and get them back.
+         */
+        reviver?: (key: string, value: unknown) => any;
+        /**
+         * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).
+         * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.
+         * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.
+         */
+        immutable?: any;
+        /**
+         * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...
+         */
+        refs?: any;
+    };
+    /**
+     * function which takes `action` object and id number as arguments, and should return `action` object back.
+     */
+    actionSanitizer?: <A extends Action>(action: A, id: number) => A;
+    /**
+     * function which takes `state` object and index as arguments, and should return `state` object back.
+     */
+    stateSanitizer?: <S>(state: S, index: number) => S;
+    /**
+     * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).
+     * If `actionsAllowlist` specified, `actionsDenylist` is ignored.
+     */
+    actionsDenylist?: string | string[];
+    /**
+     * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).
+     * If `actionsAllowlist` specified, `actionsDenylist` is ignored.
+     */
+    actionsAllowlist?: string | string[];
+    /**
+     * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.
+     * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.
+     */
+    predicate?: <S, A extends Action>(state: S, action: A) => boolean;
+    /**
+     * if specified as `false`, it will not record the changes till clicking on `Start recording` button.
+     * Available only for Redux enhancer, for others use `autoPause`.
+     *
+     * @default true
+     */
+    shouldRecordChanges?: boolean;
+    /**
+     * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.
+     * If not specified, will commit when paused. Available only for Redux enhancer.
+     *
+     * @default "@@PAUSED""
+     */
+    pauseActionType?: string;
+    /**
+     * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.
+     * Not available for Redux enhancer (as it already does it but storing the data to be sent).
+     *
+     * @default false
+     */
+    autoPause?: boolean;
+    /**
+     * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.
+     * Available only for Redux enhancer.
+     *
+     * @default false
+     */
+    shouldStartLocked?: boolean;
+    /**
+     * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.
+     *
+     * @default true
+     */
+    shouldHotReload?: boolean;
+    /**
+     * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.
+     *
+     * @default false
+     */
+    shouldCatchErrors?: boolean;
+    /**
+     * If you want to restrict the extension, specify the features you allow.
+     * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.
+     * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.
+     * Otherwise, you'll get/set the data right from the monitor part.
+     */
+    features?: {
+        /**
+         * start/pause recording of dispatched actions
+         */
+        pause?: boolean;
+        /**
+         * lock/unlock dispatching actions and side effects
+         */
+        lock?: boolean;
+        /**
+         * persist states on page reloading
+         */
+        persist?: boolean;
+        /**
+         * export history of actions in a file
+         */
+        export?: boolean | 'custom';
+        /**
+         * import history of actions from a file
+         */
+        import?: boolean | 'custom';
+        /**
+         * jump back and forth (time travelling)
+         */
+        jump?: boolean;
+        /**
+         * skip (cancel) actions
+         */
+        skip?: boolean;
+        /**
+         * drag and drop actions in the history list
+         */
+        reorder?: boolean;
+        /**
+         * dispatch custom actions or action creators
+         */
+        dispatch?: boolean;
+        /**
+         * generate tests for the selected actions
+         */
+        test?: boolean;
+    };
+    /**
+     * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.
+     * Defaults to false.
+     */
+    trace?: boolean | (<A extends Action>(action: A) => string);
+    /**
+     * The maximum number of stack trace entries to record per action. Defaults to 10.
+     */
+    traceLimit?: number;
+}
+
+interface ActionCreatorInvariantMiddlewareOptions {
+    /**
+     * The function to identify whether a value is an action creator.
+     * The default checks for a function with a static type property and match method.
+     */
+    isActionCreator?: (action: unknown) => action is Function & {
+        type?: unknown;
+    };
+}
+declare function createActionCreatorInvariantMiddleware(options?: ActionCreatorInvariantMiddlewareOptions): Middleware;
+
+/**
+ * Returns true if the passed value is "plain", i.e. a value that is either
+ * directly JSON-serializable (boolean, number, string, array, plain object)
+ * or `undefined`.
+ *
+ * @param val The value to check.
+ *
+ * @public
+ */
+declare function isPlain(val: any): boolean;
+interface NonSerializableValue {
+    keyPath: string;
+    value: unknown;
+}
+type IgnorePaths = readonly (string | RegExp)[];
+/**
+ * @public
+ */
+declare function findNonSerializableValue(value: unknown, path?: string, isSerializable?: (value: unknown) => boolean, getEntries?: (value: unknown) => [string, any][], ignoredPaths?: IgnorePaths, cache?: WeakSet<object>): NonSerializableValue | false;
+/**
+ * Options for `createSerializableStateInvariantMiddleware()`.
+ *
+ * @public
+ */
+interface SerializableStateInvariantMiddlewareOptions {
+    /**
+     * The function to check if a value is considered serializable. This
+     * function is applied recursively to every value contained in the
+     * state. Defaults to `isPlain()`.
+     */
+    isSerializable?: (value: any) => boolean;
+    /**
+     * The function that will be used to retrieve entries from each
+     * value.  If unspecified, `Object.entries` will be used. Defaults
+     * to `undefined`.
+     */
+    getEntries?: (value: any) => [string, any][];
+    /**
+     * An array of action types to ignore when checking for serializability.
+     * Defaults to []
+     */
+    ignoredActions?: string[];
+    /**
+     * An array of dot-separated path strings or regular expressions to ignore
+     * when checking for serializability, Defaults to
+     * ['meta.arg', 'meta.baseQueryMeta']
+     */
+    ignoredActionPaths?: (string | RegExp)[];
+    /**
+     * An array of dot-separated path strings or regular expressions to ignore
+     * when checking for serializability, Defaults to []
+     */
+    ignoredPaths?: (string | RegExp)[];
+    /**
+     * Execution time warning threshold. If the middleware takes longer
+     * than `warnAfter` ms, a warning will be displayed in the console.
+     * Defaults to 32ms.
+     */
+    warnAfter?: number;
+    /**
+     * Opt out of checking state. When set to `true`, other state-related params will be ignored.
+     */
+    ignoreState?: boolean;
+    /**
+     * Opt out of checking actions. When set to `true`, other action-related params will be ignored.
+     */
+    ignoreActions?: boolean;
+    /**
+     * Opt out of caching the results. The cache uses a WeakSet and speeds up repeated checking processes.
+     * The cache is automatically disabled if no browser support for WeakSet is present.
+     */
+    disableCache?: boolean;
+}
+/**
+ * Creates a middleware that, after every state change, checks if the new
+ * state is serializable. If a non-serializable value is found within the
+ * state, an error is printed to the console.
+ *
+ * @param options Middleware options.
+ *
+ * @public
+ */
+declare function createSerializableStateInvariantMiddleware(options?: SerializableStateInvariantMiddlewareOptions): Middleware;
+
+/**
+ * The default `isImmutable` function.
+ *
+ * @public
+ */
+declare function isImmutableDefault(value: unknown): boolean;
+type IsImmutableFunc = (value: any) => boolean;
+/**
+ * Options for `createImmutableStateInvariantMiddleware()`.
+ *
+ * @public
+ */
+interface ImmutableStateInvariantMiddlewareOptions {
+    /**
+      Callback function to check if a value is considered to be immutable.
+      This function is applied recursively to every value contained in the state.
+      The default implementation will return true for primitive types
+      (like numbers, strings, booleans, null and undefined).
+     */
+    isImmutable?: IsImmutableFunc;
+    /**
+      An array of dot-separated path strings that match named nodes from
+      the root state to ignore when checking for immutability.
+      Defaults to undefined
+     */
+    ignoredPaths?: IgnorePaths;
+    /** Print a warning if checks take longer than N ms. Default: 32ms */
+    warnAfter?: number;
+}
+/**
+ * Creates a middleware that checks whether any state was mutated in between
+ * dispatches or during a dispatch. If any mutations are detected, an error is
+ * thrown.
+ *
+ * @param options Middleware options.
+ *
+ * @public
+ */
+declare function createImmutableStateInvariantMiddleware(options?: ImmutableStateInvariantMiddlewareOptions): Middleware;
+
+declare class Tuple<Items extends ReadonlyArray<unknown> = []> extends Array<Items[number]> {
+    constructor(length: number);
+    constructor(...items: Items);
+    static get [Symbol.species](): any;
+    concat<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...Items, ...AdditionalItems]>;
+    concat<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;
+    concat<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;
+    prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...AdditionalItems, ...Items]>;
+    prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;
+    prepend<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;
+}
+
+/**
+ * return True if T is `any`, otherwise return False
+ * taken from https://github.com/joonhocho/tsdef
+ *
+ * @internal
+ */
+type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;
+type CastAny<T, CastTo> = IsAny<T, CastTo, T>;
+/**
+ * return True if T is `unknown`, otherwise return False
+ * taken from https://github.com/joonhocho/tsdef
+ *
+ * @internal
+ */
+type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;
+type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;
+/**
+ * @internal
+ */
+type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;
+/**
+ * @internal
+ */
+type IfVoid<P, True, False> = [void] extends [P] ? True : False;
+/**
+ * @internal
+ */
+type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;
+/**
+ * returns True if TS version is above 3.5, False if below.
+ * uses feature detection to detect TS version >= 3.5
+ * * versions below 3.5 will return `{}` for unresolvable interference
+ * * versions above will return `unknown`
+ *
+ * @internal
+ */
+type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<(<T>() => T)>, 0, 1>];
+/**
+ * @internal
+ */
+type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;
+/**
+ * Convert a Union type `(A|B)` to an intersection type `(A&B)`
+ */
+type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
+type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [
+    infer Head,
+    ...infer Tail
+] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;
+type ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;
+type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;
+type ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;
+type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;
+type ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;
+type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;
+/**
+ * Helper type. Passes T out again, but boxes it in a way that it cannot
+ * "widen" the type by accident if it is a generic that should be inferred
+ * from elsewhere.
+ *
+ * @internal
+ */
+type NoInfer<T> = [T][T extends any ? 0 : never];
+type NonUndefined<T> = T extends undefined ? never : T;
+type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
+type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
+interface TypeGuard<T> {
+    (value: any): value is T;
+}
+interface HasMatchFunction<T> {
+    match: TypeGuard<T>;
+}
+/** @public */
+type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;
+/** @public */
+type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;
+type Id<T> = {
+    [K in keyof T]: T[K];
+} & {};
+type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;
+type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;
+/**
+ * A Promise that will never reject.
+ * @see https://github.com/reduxjs/redux-toolkit/issues/4101
+ */
+type SafePromise<T> = Promise<T> & {
+    __linterBrands: 'SafePromise';
+};
+
+interface ThunkOptions<E = any> {
+    extraArgument: E;
+}
+interface GetDefaultMiddlewareOptions {
+    thunk?: boolean | ThunkOptions;
+    immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions;
+    serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions;
+    actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions;
+}
+type ThunkMiddlewareFor<S, O extends GetDefaultMiddlewareOptions = {}> = O extends {
+    thunk: false;
+} ? never : O extends {
+    thunk: {
+        extraArgument: infer E;
+    };
+} ? ThunkMiddleware<S, UnknownAction, E> : ThunkMiddleware<S, UnknownAction>;
+type GetDefaultMiddleware<S = any> = <O extends GetDefaultMiddlewareOptions = {
+    thunk: true;
+    immutableCheck: true;
+    serializableCheck: true;
+    actionCreatorCheck: true;
+}>(options?: O) => Tuple<ExcludeFromTuple<[ThunkMiddlewareFor<S, O>], never>>;
+
+declare const SHOULD_AUTOBATCH = "RTK_autoBatch";
+declare const prepareAutoBatched: <T>() => (payload: T) => {
+    payload: T;
+    meta: unknown;
+};
+type AutoBatchOptions = {
+    type: 'tick';
+} | {
+    type: 'timer';
+    timeout: number;
+} | {
+    type: 'raf';
+} | {
+    type: 'callback';
+    queueNotification: (notify: () => void) => void;
+};
+/**
+ * A Redux store enhancer that watches for "low-priority" actions, and delays
+ * notifying subscribers until either the queued callback executes or the
+ * next "standard-priority" action is dispatched.
+ *
+ * This allows dispatching multiple "low-priority" actions in a row with only
+ * a single subscriber notification to the UI after the sequence of actions
+ * is finished, thus improving UI re-render performance.
+ *
+ * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.
+ * This can be added to `action.meta` manually, or by using the
+ * `prepareAutoBatched` helper.
+ *
+ * By default, it will queue a notification for the end of the event loop tick.
+ * However, you can pass several other options to configure the behavior:
+ * - `{type: 'tick'}`: queues using `queueMicrotask`
+ * - `{type: 'timer', timeout: number}`: queues using `setTimeout`
+ * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)
+ * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback
+ *
+ *
+ */
+declare const autoBatchEnhancer: (options?: AutoBatchOptions) => StoreEnhancer;
+
+type GetDefaultEnhancersOptions = {
+    autoBatch?: boolean | AutoBatchOptions;
+};
+type GetDefaultEnhancers<M extends Middlewares<any>> = (options?: GetDefaultEnhancersOptions) => Tuple<[StoreEnhancer<{
+    dispatch: ExtractDispatchExtensions<M>;
+}>]>;
+
+/**
+ * Options for `configureStore()`.
+ *
+ * @public
+ */
+interface ConfigureStoreOptions<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<Middlewares<S>>, E extends Tuple<Enhancers> = Tuple<Enhancers>, P = S> {
+    /**
+     * A single reducer function that will be used as the root reducer, or an
+     * object of slice reducers that will be passed to `combineReducers()`.
+     */
+    reducer: Reducer<S, A, P> | ReducersMapObject<S, A, P>;
+    /**
+     * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.
+     * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.
+     *
+     * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`
+     * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage
+     */
+    middleware?: (getDefaultMiddleware: GetDefaultMiddleware<S>) => M;
+    /**
+     * Whether to enable Redux DevTools integration. Defaults to `true`.
+     *
+     * Additional configuration can be done by passing Redux DevTools options
+     */
+    devTools?: boolean | DevToolsEnhancerOptions;
+    /**
+     * Whether to check for duplicate middleware instances. Defaults to `true`.
+     */
+    duplicateMiddlewareCheck?: boolean;
+    /**
+     * The initial state, same as Redux's createStore.
+     * You may optionally specify it to hydrate the state
+     * from the server in universal apps, or to restore a previously serialized
+     * user session. If you use `combineReducers()` to produce the root reducer
+     * function (either directly or indirectly by passing an object as `reducer`),
+     * this must be an object with the same shape as the reducer map keys.
+     */
+    preloadedState?: P;
+    /**
+     * The store enhancers to apply. See Redux's `createStore()`.
+     * All enhancers will be included before the DevTools Extension enhancer.
+     * If you need to customize the order of enhancers, supply a callback
+     * function that will receive a `getDefaultEnhancers` function that returns a Tuple,
+     * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).
+     * If you only need to add middleware, you can use the `middleware` parameter instead.
+     */
+    enhancers?: (getDefaultEnhancers: GetDefaultEnhancers<M>) => E;
+}
+type Middlewares<S> = ReadonlyArray<Middleware<{}, S>>;
+type Enhancers = ReadonlyArray<StoreEnhancer>;
+/**
+ * A Redux store returned by `configureStore()`. Supports dispatching
+ * side-effectful _thunks_ in addition to plain actions.
+ *
+ * @public
+ */
+type EnhancedStore<S = any, A extends Action = UnknownAction, E extends Enhancers = Enhancers> = ExtractStoreExtensions<E> & Store<S, A, UnknownIfNonSpecific<ExtractStateExtensions<E>>>;
+/**
+ * A friendly abstraction over the standard Redux `createStore()` function.
+ *
+ * @param options The store configuration.
+ * @returns A configured Redux store.
+ *
+ * @public
+ */
+declare function configureStore<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<[ThunkMiddlewareFor<S>]>, E extends Tuple<Enhancers> = Tuple<[
+    StoreEnhancer<{
+        dispatch: ExtractDispatchExtensions<M>;
+    }>,
+    StoreEnhancer
+]>, P = S>(options: ConfigureStoreOptions<S, A, M, E, P>): EnhancedStore<S, A, E>;
+
+/**
+ * An action with a string type and an associated payload. This is the
+ * type of action returned by `createAction()` action creators.
+ *
+ * @template P The type of the action's payload.
+ * @template T the type used for the action type.
+ * @template M The type of the action's meta (optional)
+ * @template E The type of the action's error (optional)
+ *
+ * @public
+ */
+type PayloadAction<P = void, T extends string = string, M = never, E = never> = {
+    payload: P;
+    type: T;
+} & ([M] extends [never] ? {} : {
+    meta: M;
+}) & ([E] extends [never] ? {} : {
+    error: E;
+});
+/**
+ * A "prepare" method to be used as the second parameter of `createAction`.
+ * Takes any number of arguments and returns a Flux Standard Action without
+ * type (will be added later) that *must* contain a payload (might be undefined).
+ *
+ * @public
+ */
+type PrepareAction<P> = ((...args: any[]) => {
+    payload: P;
+}) | ((...args: any[]) => {
+    payload: P;
+    meta: any;
+}) | ((...args: any[]) => {
+    payload: P;
+    error: any;
+}) | ((...args: any[]) => {
+    payload: P;
+    meta: any;
+    error: any;
+});
+/**
+ * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.
+ *
+ * @internal
+ */
+type _ActionCreatorWithPreparedPayload<PA extends PrepareAction<any> | void, T extends string = string> = PA extends PrepareAction<infer P> ? ActionCreatorWithPreparedPayload<Parameters<PA>, P, T, ReturnType<PA> extends {
+    error: infer E;
+} ? E : never, ReturnType<PA> extends {
+    meta: infer M;
+} ? M : never> : void;
+/**
+ * Basic type for all action creators.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ */
+type BaseActionCreator<P, T extends string, M = never, E = never> = {
+    type: T;
+    match: (action: unknown) => action is PayloadAction<P, T, M, E>;
+};
+/**
+ * An action creator that takes multiple arguments that are passed
+ * to a `PrepareAction` method to create the final Action.
+ * @typeParam Args arguments for the action creator function
+ * @typeParam P `payload` type
+ * @typeParam T `type` name
+ * @typeParam E optional `error` type
+ * @typeParam M optional `meta` type
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithPreparedPayload<Args extends unknown[], P, T extends string = string, E = never, M = never> extends BaseActionCreator<P, T, M, E> {
+    /**
+     * Calling this {@link redux#ActionCreator} with `Args` will return
+     * an Action with a payload of type `P` and (depending on the `PrepareAction`
+     * method used) a `meta`- and `error` property of types `M` and `E` respectively.
+     */
+    (...args: Args): PayloadAction<P, T, M, E>;
+}
+/**
+ * An action creator of type `T` that takes an optional payload of type `P`.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithOptionalPayload<P, T extends string = string> extends BaseActionCreator<P, T> {
+    /**
+     * Calling this {@link redux#ActionCreator} with an argument will
+     * return a {@link PayloadAction} of type `T` with a payload of `P`.
+     * Calling it without an argument will return a PayloadAction with a payload of `undefined`.
+     */
+    (payload?: P): PayloadAction<P, T>;
+}
+/**
+ * An action creator of type `T` that takes no payload.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithoutPayload<T extends string = string> extends BaseActionCreator<undefined, T> {
+    /**
+     * Calling this {@link redux#ActionCreator} will
+     * return a {@link PayloadAction} of type `T` with a payload of `undefined`
+     */
+    (noArgument: void): PayloadAction<undefined, T>;
+}
+/**
+ * An action creator of type `T` that requires a payload of type P.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithPayload<P, T extends string = string> extends BaseActionCreator<P, T> {
+    /**
+     * Calling this {@link redux#ActionCreator} with an argument will
+     * return a {@link PayloadAction} of type `T` with a payload of `P`
+     */
+    (payload: P): PayloadAction<P, T>;
+}
+/**
+ * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithNonInferrablePayload<T extends string = string> extends BaseActionCreator<unknown, T> {
+    /**
+     * Calling this {@link redux#ActionCreator} with an argument will
+     * return a {@link PayloadAction} of type `T` with a payload
+     * of exactly the type of the argument.
+     */
+    <PT extends unknown>(payload: PT): PayloadAction<PT, T>;
+}
+/**
+ * An action creator that produces actions with a `payload` attribute.
+ *
+ * @typeParam P the `payload` type
+ * @typeParam T the `type` of the resulting action
+ * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.
+ *
+ * @public
+ */
+type PayloadActionCreator<P = void, T extends string = string, PA extends PrepareAction<P> | void = void> = IfPrepareActionMethodProvided<PA, _ActionCreatorWithPreparedPayload<PA, T>, IsAny<P, ActionCreatorWithPayload<any, T>, IsUnknownOrNonInferrable<P, ActionCreatorWithNonInferrablePayload<T>, IfVoid<P, ActionCreatorWithoutPayload<T>, IfMaybeUndefined<P, ActionCreatorWithOptionalPayload<P, T>, ActionCreatorWithPayload<P, T>>>>>>;
+/**
+ * A utility function to create an action creator for the given action type
+ * string. The action creator accepts a single argument, which will be included
+ * in the action object as a field called payload. The action creator function
+ * will also have its toString() overridden so that it returns the action type.
+ *
+ * @param type The action type to use for created actions.
+ * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.
+ *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.
+ *
+ * @public
+ */
+declare function createAction<P = void, T extends string = string>(type: T): PayloadActionCreator<P, T>;
+/**
+ * A utility function to create an action creator for the given action type
+ * string. The action creator accepts a single argument, which will be included
+ * in the action object as a field called payload. The action creator function
+ * will also have its toString() overridden so that it returns the action type.
+ *
+ * @param type The action type to use for created actions.
+ * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.
+ *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.
+ *
+ * @public
+ */
+declare function createAction<PA extends PrepareAction<any>, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>;
+/**
+ * Returns true if value is an RTK-like action creator, with a static type property and match method.
+ */
+declare function isActionCreator(action: unknown): action is BaseActionCreator<unknown, string> & Function;
+/**
+ * Returns true if value is an action with a string type and valid Flux Standard Action keys.
+ */
+declare function isFSA(action: unknown): action is {
+    type: string;
+    payload?: unknown;
+    error?: unknown;
+    meta?: unknown;
+};
+type IfPrepareActionMethodProvided<PA extends PrepareAction<any> | void, True, False> = PA extends (...args: any[]) => any ? True : False;
+
+type TypedActionCreator<Type extends string> = {
+    (...args: any[]): Action<Type>;
+    type: Type;
+};
+/**
+ * A builder for an action <-> reducer map.
+ *
+ * @public
+ */
+interface ActionReducerMapBuilder<State> {
+    /**
+     * Adds a case reducer to handle a single exact action type.
+     * @remarks
+     * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.
+     * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.
+     * @param reducer - The actual case reducer function.
+     */
+    addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ActionReducerMapBuilder<State>;
+    /**
+     * Adds a case reducer to handle a single exact action type.
+     * @remarks
+     * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.
+     * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.
+     * @param reducer - The actual case reducer function.
+     */
+    addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ActionReducerMapBuilder<State>;
+    /**
+     * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.
+     * @remarks
+     * If multiple matcher reducers match, all of them will be executed in the order
+     * they were defined in - even if a case reducer already matched.
+     * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.
+     * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)
+     *   function
+     * @param reducer - The actual case reducer function.
+     *
+     * @example
+  ```ts
+  import {
+    createAction,
+    createReducer,
+    AsyncThunk,
+    UnknownAction,
+  } from "@reduxjs/toolkit";
+  
+  type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;
+  
+  type PendingAction = ReturnType<GenericAsyncThunk["pending"]>;
+  type RejectedAction = ReturnType<GenericAsyncThunk["rejected"]>;
+  type FulfilledAction = ReturnType<GenericAsyncThunk["fulfilled"]>;
+  
+  const initialState: Record<string, string> = {};
+  const resetAction = createAction("reset-tracked-loading-state");
+  
+  function isPendingAction(action: UnknownAction): action is PendingAction {
+    return typeof action.type === "string" && action.type.endsWith("/pending");
+  }
+  
+  const reducer = createReducer(initialState, (builder) => {
+    builder
+      .addCase(resetAction, () => initialState)
+      // matcher can be defined outside as a type predicate function
+      .addMatcher(isPendingAction, (state, action) => {
+        state[action.meta.requestId] = "pending";
+      })
+      .addMatcher(
+        // matcher can be defined inline as a type predicate function
+        (action): action is RejectedAction => action.type.endsWith("/rejected"),
+        (state, action) => {
+          state[action.meta.requestId] = "rejected";
+        }
+      )
+      // matcher can just return boolean and the matcher can receive a generic argument
+      .addMatcher<FulfilledAction>(
+        (action) => action.type.endsWith("/fulfilled"),
+        (state, action) => {
+          state[action.meta.requestId] = "fulfilled";
+        }
+      );
+  });
+  ```
+     */
+    addMatcher<A>(matcher: TypeGuard<A> | ((action: any) => boolean), reducer: CaseReducer<State, A extends Action ? A : A & Action>): Omit<ActionReducerMapBuilder<State>, 'addCase'>;
+    /**
+     * Adds a "default case" reducer that is executed if no case reducer and no matcher
+     * reducer was executed for this action.
+     * @param reducer - The fallback "default case" reducer function.
+     *
+     * @example
+  ```ts
+  import { createReducer } from '@reduxjs/toolkit'
+  const initialState = { otherActions: 0 }
+  const reducer = createReducer(initialState, builder => {
+    builder
+      // .addCase(...)
+      // .addMatcher(...)
+      .addDefaultCase((state, action) => {
+        state.otherActions++
+      })
+  })
+  ```
+     */
+    addDefaultCase(reducer: CaseReducer<State, Action>): {};
+}
+
+/**
+ * Defines a mapping from action types to corresponding action object shapes.
+ *
+ * @deprecated This should not be used manually - it is only used for internal
+ *             inference purposes and should not have any further value.
+ *             It might be removed in the future.
+ * @public
+ */
+type Actions<T extends keyof any = string> = Record<T, Action>;
+/**
+ * A *case reducer* is a reducer function for a specific action type. Case
+ * reducers can be composed to full reducers using `createReducer()`.
+ *
+ * Unlike a normal Redux reducer, a case reducer is never called with an
+ * `undefined` state to determine the initial state. Instead, the initial
+ * state is explicitly specified as an argument to `createReducer()`.
+ *
+ * In addition, a case reducer can choose to mutate the passed-in `state`
+ * value directly instead of returning a new state. This does not actually
+ * cause the store state to be mutated directly; instead, thanks to
+ * [immer](https://github.com/mweststrate/immer), the mutations are
+ * translated to copy operations that result in a new state.
+ *
+ * @public
+ */
+type CaseReducer<S = any, A extends Action = UnknownAction> = (state: Draft<S>, action: A) => NoInfer<S> | void | Draft<NoInfer<S>>;
+/**
+ * A mapping from action types to case reducers for `createReducer()`.
+ *
+ * @deprecated This should not be used manually - it is only used
+ *             for internal inference purposes and using it manually
+ *             would lead to type erasure.
+ *             It might be removed in the future.
+ * @public
+ */
+type CaseReducers<S, AS extends Actions> = {
+    [T in keyof AS]: AS[T] extends Action ? CaseReducer<S, AS[T]> : void;
+};
+type NotFunction<T> = T extends Function ? never : T;
+type ReducerWithInitialState<S extends NotFunction<any>> = Reducer<S> & {
+    getInitialState: () => S;
+};
+/**
+ * A utility function that allows defining a reducer as a mapping from action
+ * type to *case reducer* functions that handle these action types. The
+ * reducer's initial state is passed as the first argument.
+ *
+ * @remarks
+ * The body of every case reducer is implicitly wrapped with a call to
+ * `produce()` from the [immer](https://github.com/mweststrate/immer) library.
+ * This means that rather than returning a new state object, you can also
+ * mutate the passed-in state object directly; these mutations will then be
+ * automatically and efficiently translated into copies, giving you both
+ * convenience and immutability.
+ *
+ * @overloadSummary
+ * This function accepts a callback that receives a `builder` object as its argument.
+ * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be
+ * called to define what actions this reducer will handle.
+ *
+ * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a "lazy initializer" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.
+ * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define
+ *   case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.
+ * @example
+```ts
+import {
+  createAction,
+  createReducer,
+  UnknownAction,
+  PayloadAction,
+} from "@reduxjs/toolkit";
+
+const increment = createAction<number>("increment");
+const decrement = createAction<number>("decrement");
+
+function isActionWithNumberPayload(
+  action: UnknownAction
+): action is PayloadAction<number> {
+  return typeof action.payload === "number";
+}
+
+const reducer = createReducer(
+  {
+    counter: 0,
+    sumOfNumberPayloads: 0,
+    unhandledActions: 0,
+  },
+  (builder) => {
+    builder
+      .addCase(increment, (state, action) => {
+        // action is inferred correctly here
+        state.counter += action.payload;
+      })
+      // You can chain calls, or have separate `builder.addCase()` lines each time
+      .addCase(decrement, (state, action) => {
+        state.counter -= action.payload;
+      })
+      // You can apply a "matcher function" to incoming actions
+      .addMatcher(isActionWithNumberPayload, (state, action) => {})
+      // and provide a default case if no other handlers matched
+      .addDefaultCase((state, action) => {});
+  }
+);
+```
+ * @public
+ */
+declare function createReducer<S extends NotFunction<any>>(initialState: S | (() => S), mapOrBuilderCallback: (builder: ActionReducerMapBuilder<S>) => void): ReducerWithInitialState<S>;
+
+type SliceLike<ReducerPath extends string, State> = {
+    reducerPath: ReducerPath;
+    reducer: Reducer<State>;
+};
+type AnySliceLike = SliceLike<string, any>;
+type SliceLikeReducerPath<A extends AnySliceLike> = A extends SliceLike<infer ReducerPath, any> ? ReducerPath : never;
+type SliceLikeState<A extends AnySliceLike> = A extends SliceLike<any, infer State> ? State : never;
+type WithSlice<A extends AnySliceLike> = {
+    [Path in SliceLikeReducerPath<A>]: SliceLikeState<A>;
+};
+type ReducerMap = Record<string, Reducer>;
+type ExistingSliceLike<DeclaredState> = {
+    [ReducerPath in keyof DeclaredState]: SliceLike<ReducerPath & string, NonUndefined<DeclaredState[ReducerPath]>>;
+}[keyof DeclaredState];
+type InjectConfig = {
+    /**
+     * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.
+     */
+    overrideExisting?: boolean;
+};
+/**
+ * A reducer that allows for slices/reducers to be injected after initialisation.
+ */
+interface CombinedSliceReducer<InitialState, DeclaredState = InitialState> extends Reducer<DeclaredState, UnknownAction, Partial<DeclaredState>> {
+    /**
+     * Provide a type for slices that will be injected lazily.
+     *
+     * One way to do this would be with interface merging:
+     * ```ts
+     *
+     * export interface LazyLoadedSlices {}
+     *
+     * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();
+     *
+     * // elsewhere
+     *
+     * declare module './reducer' {
+     *   export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}
+     * }
+     *
+     * const withBoolean = rootReducer.inject(booleanSlice);
+     *
+     * // elsewhere again
+     *
+     * declare module './reducer' {
+     *   export interface LazyLoadedSlices {
+     *     customName: CustomState
+     *   }
+     * }
+     *
+     * const withCustom = rootReducer.inject({ reducerPath: "customName", reducer: customSlice.reducer })
+     * ```
+     */
+    withLazyLoadedSlices<Lazy = {}>(): CombinedSliceReducer<InitialState, Id<DeclaredState & Partial<Lazy>>>;
+    /**
+     * Inject a slice.
+     *
+     * Accepts an individual slice, RTKQ API instance, or a "slice-like" { reducerPath, reducer } object.
+     *
+     * ```ts
+     * rootReducer.inject(booleanSlice)
+     * rootReducer.inject(baseApi)
+     * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })
+     * ```
+     *
+     */
+    inject<Sl extends Id<ExistingSliceLike<DeclaredState>>>(slice: Sl, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<Sl>>>;
+    /**
+     * Inject a slice.
+     *
+     * Accepts an individual slice, RTKQ API instance, or a "slice-like" { reducerPath, reducer } object.
+     *
+     * ```ts
+     * rootReducer.inject(booleanSlice)
+     * rootReducer.inject(baseApi)
+     * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })
+     * ```
+     *
+     */
+    inject<ReducerPath extends string, State>(slice: SliceLike<ReducerPath, State & (ReducerPath extends keyof DeclaredState ? never : State)>, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<SliceLike<ReducerPath, State>>>>;
+    /**
+     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.
+     *
+     * ```ts
+     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;
+     * //                                                                ^? boolean | undefined
+     *
+     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {
+     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined
+     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined
+     *   return state.boolean;
+     *   //           ^? boolean
+     * })
+     * ```
+     *
+     * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.
+     *
+     * ```ts
+     *
+     * export interface LazyLoadedSlices {};
+     *
+     * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();
+     *
+     * export const rootReducer = combineSlices({ inner: innerReducer });
+     *
+     * export type RootState = ReturnType<typeof rootReducer>;
+     *
+     * // elsewhere
+     *
+     * declare module "./reducer.ts" {
+     *  export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}
+     * }
+     *
+     * const withBool = innerReducer.inject(booleanSlice);
+     *
+     * const selectBoolean = withBool.selector(
+     *   (state) => state.boolean,
+     *   (rootState: RootState) => state.inner
+     * );
+     * //    now expects to be passed RootState instead of innerReducer state
+     *
+     * ```
+     *
+     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)
+     *
+     * ```ts
+     * const injectedReducer = rootReducer.inject(booleanSlice);
+     * const selectBoolean = injectedReducer.selector((state) => {
+     *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined
+     *   return state.boolean
+     * })
+     * ```
+     */
+    selector: {
+        /**
+         * Create a selector that guarantees that the slices injected will have a defined value when selector is run.
+         *
+         * ```ts
+         * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;
+         * //                                                                ^? boolean | undefined
+         *
+         * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {
+         *   // if action hasn't been dispatched since slice was injected, this would usually be undefined
+         *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined
+         *   return state.boolean;
+         *   //           ^? boolean
+         * })
+         * ```
+         *
+         * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)
+         *
+         * ```ts
+         * const injectedReducer = rootReducer.inject(booleanSlice);
+         * const selectBoolean = injectedReducer.selector((state) => {
+         *   console.log(injectedReducer.selector.original(state).boolean) // undefined
+         *   return state.boolean
+         * })
+         * ```
+         */
+        <Selector extends (state: DeclaredState, ...args: any[]) => unknown>(selectorFn: Selector): (state: WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;
+        /**
+         * Create a selector that guarantees that the slices injected will have a defined value when selector is run.
+         *
+         * ```ts
+         * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;
+         * //                                                                ^? boolean | undefined
+         *
+         * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {
+         *   // if action hasn't been dispatched since slice was injected, this would usually be undefined
+         *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined
+         *   return state.boolean;
+         *   //           ^? boolean
+         * })
+         * ```
+         *
+         * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.
+         *
+         * ```ts
+         *
+         * interface LazyLoadedSlices {};
+         *
+         * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();
+         *
+         * const rootReducer = combineSlices({ inner: innerReducer });
+         *
+         * type RootState = ReturnType<typeof rootReducer>;
+         *
+         * // elsewhere
+         *
+         * declare module "./reducer.ts" {
+         *  interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}
+         * }
+         *
+         * const withBool = innerReducer.inject(booleanSlice);
+         *
+         * const selectBoolean = withBool.selector(
+         *   (state) => state.boolean,
+         *   (rootState: RootState) => state.inner
+         * );
+         * //    now expects to be passed RootState instead of innerReducer state
+         *
+         * ```
+         *
+         * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)
+         *
+         * ```ts
+         * const injectedReducer = rootReducer.inject(booleanSlice);
+         * const selectBoolean = injectedReducer.selector((state) => {
+         *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined
+         *   return state.boolean
+         * })
+         * ```
+         */
+        <Selector extends (state: DeclaredState, ...args: any[]) => unknown, RootState>(selectorFn: Selector, selectState: (rootState: RootState, ...args: Tail<Parameters<Selector>>) => WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>): (state: RootState, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;
+        /**
+         * Returns the unproxied state. Useful for debugging.
+         * @param state state Proxy, that ensures injected reducers have value
+         * @returns original, unproxied state
+         * @throws if value passed is not a state Proxy
+         */
+        original: (state: DeclaredState) => InitialState & Partial<DeclaredState>;
+    };
+}
+type InitialState<Slices extends Array<AnySliceLike | ReducerMap>> = UnionToIntersection<Slices[number] extends infer Slice ? Slice extends AnySliceLike ? WithSlice<Slice> : StateFromReducersMapObject<Slice> : never>;
+declare function combineSlices<Slices extends Array<AnySliceLike | ReducerMap>>(...slices: Slices): CombinedSliceReducer<Id<InitialState<Slices>>>;
+
+type BaseThunkAPI<S, E, D extends Dispatch = Dispatch, RejectedValue = unknown, RejectedMeta = unknown, FulfilledMeta = unknown> = {
+    dispatch: D;
+    getState: () => S;
+    extra: E;
+    requestId: string;
+    signal: AbortSignal;
+    abort: (reason?: string) => void;
+    rejectWithValue: IsUnknown<RejectedMeta, (value: RejectedValue) => RejectWithValue<RejectedValue, RejectedMeta>, (value: RejectedValue, meta: RejectedMeta) => RejectWithValue<RejectedValue, RejectedMeta>>;
+    fulfillWithValue: IsUnknown<FulfilledMeta, <FulfilledValue>(value: FulfilledValue) => FulfilledValue, <FulfilledValue>(value: FulfilledValue, meta: FulfilledMeta) => FulfillWithMeta<FulfilledValue, FulfilledMeta>>;
+};
+/**
+ * @public
+ */
+interface SerializedError {
+    name?: string;
+    message?: string;
+    stack?: string;
+    code?: string;
+}
+declare class RejectWithValue<Payload, RejectedMeta> {
+    readonly payload: Payload;
+    readonly meta: RejectedMeta;
+    private readonly _type;
+    constructor(payload: Payload, meta: RejectedMeta);
+}
+declare class FulfillWithMeta<Payload, FulfilledMeta> {
+    readonly payload: Payload;
+    readonly meta: FulfilledMeta;
+    private readonly _type;
+    constructor(payload: Payload, meta: FulfilledMeta);
+}
+/**
+ * Serializes an error into a plain object.
+ * Reworked from https://github.com/sindresorhus/serialize-error
+ *
+ * @public
+ */
+declare const miniSerializeError: (value: any) => SerializedError;
+type AsyncThunkConfig = {
+    state?: unknown;
+    dispatch?: ThunkDispatch<unknown, unknown, UnknownAction>;
+    extra?: unknown;
+    rejectValue?: unknown;
+    serializedErrorType?: unknown;
+    pendingMeta?: unknown;
+    fulfilledMeta?: unknown;
+    rejectedMeta?: unknown;
+};
+type GetState<ThunkApiConfig> = ThunkApiConfig extends {
+    state: infer State;
+} ? State : unknown;
+type GetExtra<ThunkApiConfig> = ThunkApiConfig extends {
+    extra: infer Extra;
+} ? Extra : unknown;
+type GetDispatch<ThunkApiConfig> = ThunkApiConfig extends {
+    dispatch: infer Dispatch;
+} ? FallbackIfUnknown<Dispatch, ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>> : ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>;
+type GetThunkAPI<ThunkApiConfig> = BaseThunkAPI<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, GetDispatch<ThunkApiConfig>, GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>, GetFulfilledMeta<ThunkApiConfig>>;
+type GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {
+    rejectValue: infer RejectValue;
+} ? RejectValue : unknown;
+type GetPendingMeta<ThunkApiConfig> = ThunkApiConfig extends {
+    pendingMeta: infer PendingMeta;
+} ? PendingMeta : unknown;
+type GetFulfilledMeta<ThunkApiConfig> = ThunkApiConfig extends {
+    fulfilledMeta: infer FulfilledMeta;
+} ? FulfilledMeta : unknown;
+type GetRejectedMeta<ThunkApiConfig> = ThunkApiConfig extends {
+    rejectedMeta: infer RejectedMeta;
+} ? RejectedMeta : unknown;
+type GetSerializedErrorType<ThunkApiConfig> = ThunkApiConfig extends {
+    serializedErrorType: infer GetSerializedErrorType;
+} ? GetSerializedErrorType : SerializedError;
+type MaybePromise<T> = T | Promise<T> | (T extends any ? Promise<T> : never);
+/**
+ * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.
+ * Might be useful for wrapping `createAsyncThunk` in custom abstractions.
+ *
+ * @public
+ */
+type AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig extends AsyncThunkConfig> = MaybePromise<IsUnknown<GetFulfilledMeta<ThunkApiConfig>, Returned, FulfillWithMeta<Returned, GetFulfilledMeta<ThunkApiConfig>>> | RejectWithValue<GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>>>;
+/**
+ * A type describing the `payloadCreator` argument to `createAsyncThunk`.
+ * Might be useful for wrapping `createAsyncThunk` in custom abstractions.
+ *
+ * @public
+ */
+type AsyncThunkPayloadCreator<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>;
+/**
+ * A ThunkAction created by `createAsyncThunk`.
+ * Dispatching it returns a Promise for either a
+ * fulfilled or rejected action.
+ * Also, the returned value contains an `abort()` method
+ * that allows the asyncAction to be cancelled from the outside.
+ *
+ * @public
+ */
+type AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = (dispatch: NonNullable<GetDispatch<ThunkApiConfig>>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => SafePromise<ReturnType<AsyncThunkFulfilledActionCreator<Returned, ThunkArg>> | ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>>> & {
+    abort: (reason?: string) => void;
+    requestId: string;
+    arg: ThunkArg;
+    unwrap: () => Promise<Returned>;
+};
+/**
+ * Config provided when calling the async thunk action creator.
+ */
+interface AsyncThunkDispatchConfig {
+    /**
+     * An external `AbortSignal` that will be tracked by the internal `AbortSignal`.
+     */
+    signal?: AbortSignal;
+}
+type AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = IsAny<ThunkArg, (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>, unknown extends ThunkArg ? (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> : [ThunkArg] extends [void] | [undefined] ? (arg?: undefined, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> : [void] extends [ThunkArg] ? (arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> : [undefined] extends [ThunkArg] ? WithStrictNullChecks<(arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>, (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>> : (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>>;
+/**
+ * Options object for `createAsyncThunk`.
+ *
+ * @public
+ */
+type AsyncThunkOptions<ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = {
+    /**
+     * A method to control whether the asyncThunk should be executed. Has access to the
+     * `arg`, `api.getState()` and `api.extra` arguments.
+     *
+     * @returns `false` if it should be skipped
+     */
+    condition?(arg: ThunkArg, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): MaybePromise<boolean | undefined>;
+    /**
+     * If `condition` returns `false`, the asyncThunk will be skipped.
+     * This option allows you to control whether a `rejected` action with `meta.condition == false`
+     * will be dispatched or not.
+     *
+     * @default `false`
+     */
+    dispatchConditionRejection?: boolean;
+    serializeError?: (x: unknown) => GetSerializedErrorType<ThunkApiConfig>;
+    /**
+     * A function to use when generating the `requestId` for the request sequence.
+     *
+     * @default `nanoid`
+     */
+    idGenerator?: (arg: ThunkArg) => string;
+} & IsUnknown<GetPendingMeta<ThunkApiConfig>, {
+    /**
+     * A method to generate additional properties to be added to `meta` of the pending action.
+     *
+     * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.
+     * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload
+     */
+    getPendingMeta?(base: {
+        arg: ThunkArg;
+        requestId: string;
+    }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;
+}, {
+    /**
+     * A method to generate additional properties to be added to `meta` of the pending action.
+     */
+    getPendingMeta(base: {
+        arg: ThunkArg;
+        requestId: string;
+    }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;
+}>;
+type AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[
+    string,
+    ThunkArg,
+    GetPendingMeta<ThunkApiConfig>?
+], undefined, string, never, {
+    arg: ThunkArg;
+    requestId: string;
+    requestStatus: 'pending';
+} & GetPendingMeta<ThunkApiConfig>>;
+type AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[
+    Error | null,
+    string,
+    ThunkArg,
+    GetRejectValue<ThunkApiConfig>?,
+    GetRejectedMeta<ThunkApiConfig>?
+], GetRejectValue<ThunkApiConfig> | undefined, string, GetSerializedErrorType<ThunkApiConfig>, {
+    arg: ThunkArg;
+    requestId: string;
+    requestStatus: 'rejected';
+    aborted: boolean;
+    condition: boolean;
+} & (({
+    rejectedWithValue: false;
+} & {
+    [K in keyof GetRejectedMeta<ThunkApiConfig>]?: undefined;
+}) | ({
+    rejectedWithValue: true;
+} & GetRejectedMeta<ThunkApiConfig>))>;
+type AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[
+    Returned,
+    string,
+    ThunkArg,
+    GetFulfilledMeta<ThunkApiConfig>?
+], Returned, string, never, {
+    arg: ThunkArg;
+    requestId: string;
+    requestStatus: 'fulfilled';
+} & GetFulfilledMeta<ThunkApiConfig>>;
+/**
+ * A type describing the return value of `createAsyncThunk`.
+ * Might be useful for wrapping `createAsyncThunk` in custom abstractions.
+ *
+ * @public
+ */
+type AsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig> & {
+    pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig>;
+    rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>;
+    fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>;
+    settled: (action: any) => action is ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> | AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>>;
+    typePrefix: string;
+};
+type OverrideThunkApiConfigs<OldConfig, NewConfig> = Id<NewConfig & Omit<OldConfig, keyof NewConfig>>;
+type CreateAsyncThunkFunction<CurriedThunkApiConfig extends AsyncThunkConfig> = {
+    /**
+     *
+     * @param typePrefix
+     * @param payloadCreator
+     * @param options
+     *
+     * @public
+     */
+    <Returned, ThunkArg = void>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, CurriedThunkApiConfig>): AsyncThunk<Returned, ThunkArg, CurriedThunkApiConfig>;
+    /**
+     *
+     * @param typePrefix
+     * @param payloadCreator
+     * @param options
+     *
+     * @public
+     */
+    <Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>, options?: AsyncThunkOptions<ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>): AsyncThunk<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;
+};
+type CreateAsyncThunk<CurriedThunkApiConfig extends AsyncThunkConfig> = CreateAsyncThunkFunction<CurriedThunkApiConfig> & {
+    withTypes<ThunkApiConfig extends AsyncThunkConfig>(): CreateAsyncThunk<OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;
+};
+declare const createAsyncThunk: CreateAsyncThunk<AsyncThunkConfig>;
+interface UnwrappableAction {
+    payload: any;
+    meta?: any;
+    error?: any;
+}
+type UnwrappedActionPayload<T extends UnwrappableAction> = Exclude<T, {
+    error: any;
+}>['payload'];
+/**
+ * @public
+ */
+declare function unwrapResult<R extends UnwrappableAction>(action: R): UnwrappedActionPayload<R>;
+type WithStrictNullChecks<True, False> = undefined extends boolean ? False : True;
+
+declare const asyncThunkSymbol: unique symbol;
+declare const asyncThunkCreator: {
+    [asyncThunkSymbol]: typeof createAsyncThunk;
+};
+type InjectIntoConfig<NewReducerPath extends string> = InjectConfig & {
+    reducerPath?: NewReducerPath;
+};
+/**
+ * The return value of `createSlice`
+ *
+ * @public
+ */
+interface Slice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {
+    /**
+     * The slice name.
+     */
+    name: Name;
+    /**
+     *  The slice reducer path.
+     */
+    reducerPath: ReducerPath;
+    /**
+     * The slice's reducer.
+     */
+    reducer: Reducer<State>;
+    /**
+     * Action creators for the types of actions that are handled by the slice
+     * reducer.
+     */
+    actions: CaseReducerActions<CaseReducers, Name>;
+    /**
+     * The individual case reducer functions that were passed in the `reducers` parameter.
+     * This enables reuse and testing if they were defined inline when calling `createSlice`.
+     */
+    caseReducers: SliceDefinedCaseReducers<CaseReducers>;
+    /**
+     * Provides access to the initial state value given to the slice.
+     * If a lazy state initializer was provided, it will be called and a fresh value returned.
+     */
+    getInitialState: () => State;
+    /**
+     * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)
+     */
+    getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State>>;
+    /**
+     * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)
+     */
+    getSelectors<RootState>(selectState: (rootState: RootState) => State): Id<SliceDefinedSelectors<State, Selectors, RootState>>;
+    /**
+     * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)
+     *
+     * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.
+     */
+    get selectors(): Id<SliceDefinedSelectors<State, Selectors, {
+        [K in ReducerPath]: State;
+    }>>;
+    /**
+     * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.
+     */
+    injectInto<NewReducerPath extends string = ReducerPath>(this: this, injectable: {
+        inject: (slice: {
+            reducerPath: string;
+            reducer: Reducer;
+        }, config?: InjectConfig) => void;
+    }, config?: InjectIntoConfig<NewReducerPath>): InjectedSlice<State, CaseReducers, Name, NewReducerPath, Selectors>;
+    /**
+     * Select the slice state, using the slice's current reducerPath.
+     *
+     * Will throw an error if slice is not found.
+     */
+    selectSlice(state: {
+        [K in ReducerPath]: State;
+    }): State;
+}
+/**
+ * A slice after being called with `injectInto(reducer)`.
+ *
+ * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.
+ */
+type InjectedSlice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> = Omit<Slice<State, CaseReducers, Name, ReducerPath, Selectors>, 'getSelectors' | 'selectors'> & {
+    /**
+     * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)
+     */
+    getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State | undefined>>;
+    /**
+     * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)
+     */
+    getSelectors<RootState>(selectState: (rootState: RootState) => State | undefined): Id<SliceDefinedSelectors<State, Selectors, RootState>>;
+    /**
+     * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)
+     *
+     * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.
+     */
+    get selectors(): Id<SliceDefinedSelectors<State, Selectors, {
+        [K in ReducerPath]?: State | undefined;
+    }>>;
+    /**
+     * Select the slice state, using the slice's current reducerPath.
+     *
+     * Returns initial state if slice is not found.
+     */
+    selectSlice(state: {
+        [K in ReducerPath]?: State | undefined;
+    }): State;
+};
+/**
+ * Options for `createSlice()`.
+ *
+ * @public
+ */
+interface CreateSliceOptions<State = any, CR extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {
+    /**
+     * The slice's name. Used to namespace the generated action types.
+     */
+    name: Name;
+    /**
+     * The slice's reducer path. Used when injecting into a combined slice reducer.
+     */
+    reducerPath?: ReducerPath;
+    /**
+     * The initial state that should be used when the reducer is called the first time. This may also be a "lazy initializer" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.
+     */
+    initialState: State | (() => State);
+    /**
+     * A mapping from action types to action-type-specific *case reducer*
+     * functions. For every action type, a matching action creator will be
+     * generated using `createAction()`.
+     */
+    reducers: ValidateSliceCaseReducers<State, CR> | ((creators: ReducerCreators<State>) => CR);
+    /**
+     * A callback that receives a *builder* object to define
+     * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.
+     *
+     *
+     * @example
+  ```ts
+  import { createAction, createSlice, Action } from '@reduxjs/toolkit'
+  const incrementBy = createAction<number>('incrementBy')
+  const decrement = createAction('decrement')
+  
+  interface RejectedAction extends Action {
+    error: Error
+  }
+  
+  function isRejectedAction(action: Action): action is RejectedAction {
+    return action.type.endsWith('rejected')
+  }
+  
+  createSlice({
+    name: 'counter',
+    initialState: 0,
+    reducers: {},
+    extraReducers: builder => {
+      builder
+        .addCase(incrementBy, (state, action) => {
+          // action is inferred correctly here if using TS
+        })
+        // You can chain calls, or have separate `builder.addCase()` lines each time
+        .addCase(decrement, (state, action) => {})
+        // You can match a range of action types
+        .addMatcher(
+          isRejectedAction,
+          // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard
+          (state, action) => {}
+        )
+        // and provide a default case if no other handlers matched
+        .addDefaultCase((state, action) => {})
+      }
+  })
+  ```
+     */
+    extraReducers?: (builder: ActionReducerMapBuilder<State>) => void;
+    /**
+     * A map of selectors that receive the slice's state and any additional arguments, and return a result.
+     */
+    selectors?: Selectors;
+}
+declare enum ReducerType {
+    reducer = "reducer",
+    reducerWithPrepare = "reducerWithPrepare",
+    asyncThunk = "asyncThunk"
+}
+type ReducerDefinition<T extends ReducerType = ReducerType> = {
+    _reducerDefinitionType: T;
+};
+type CaseReducerDefinition<S = any, A extends Action = UnknownAction> = CaseReducer<S, A> & ReducerDefinition<ReducerType.reducer>;
+/**
+ * A CaseReducer with a `prepare` method.
+ *
+ * @public
+ */
+type CaseReducerWithPrepare<State, Action extends PayloadAction> = {
+    reducer: CaseReducer<State, Action>;
+    prepare: PrepareAction<Action['payload']>;
+};
+type AsyncThunkSliceReducerConfig<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = {
+    pending?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['pending']>>;
+    rejected?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected']>>;
+    fulfilled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['fulfilled']>>;
+    settled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']>>;
+    options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>;
+};
+type AsyncThunkSliceReducerDefinition<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig> & ReducerDefinition<ReducerType.asyncThunk> & {
+    payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>;
+};
+/**
+ * Providing these as part of the config would cause circular types, so we disallow passing them
+ */
+type PreventCircular<ThunkApiConfig> = {
+    [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch' ? never : ThunkApiConfig[K];
+};
+interface AsyncThunkCreator<State, CurriedThunkApiConfig extends PreventCircular<AsyncThunkConfig> = PreventCircular<AsyncThunkConfig>> {
+    <Returned, ThunkArg = void>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, CurriedThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, CurriedThunkApiConfig>;
+    <Returned, ThunkArg, ThunkApiConfig extends PreventCircular<AsyncThunkConfig> = {}>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, ThunkApiConfig>;
+    withTypes<ThunkApiConfig extends PreventCircular<AsyncThunkConfig>>(): AsyncThunkCreator<State, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;
+}
+interface ReducerCreators<State> {
+    reducer(caseReducer: CaseReducer<State, PayloadAction>): CaseReducerDefinition<State, PayloadAction>;
+    reducer<Payload>(caseReducer: CaseReducer<State, PayloadAction<Payload>>): CaseReducerDefinition<State, PayloadAction<Payload>>;
+    asyncThunk: AsyncThunkCreator<State>;
+    preparedReducer<Prepare extends PrepareAction<any>>(prepare: Prepare, reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>): {
+        _reducerDefinitionType: ReducerType.reducerWithPrepare;
+        prepare: Prepare;
+        reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>;
+    };
+}
+/**
+ * The type describing a slice's `reducers` option.
+ *
+ * @public
+ */
+type SliceCaseReducers<State> = Record<string, ReducerDefinition> | Record<string, CaseReducer<State, PayloadAction<any>> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>>;
+/**
+ * The type describing a slice's `selectors` option.
+ */
+type SliceSelectors<State> = {
+    [K: string]: (sliceState: State, ...args: any[]) => any;
+};
+type SliceActionType<SliceName extends string, ActionName extends keyof any> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string;
+/**
+ * Derives the slice's `actions` property from the `reducers` options
+ *
+ * @public
+ */
+type CaseReducerActions<CaseReducers extends SliceCaseReducers<any>, SliceName extends string> = {
+    [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends {
+        prepare: any;
+    } ? ActionCreatorForCaseReducerWithPrepare<Definition, SliceActionType<SliceName, Type>> : Definition extends AsyncThunkSliceReducerDefinition<any, infer ThunkArg, infer Returned, infer ThunkApiConfig> ? AsyncThunk<Returned, ThunkArg, ThunkApiConfig> : Definition extends {
+        reducer: any;
+    } ? ActionCreatorForCaseReducer<Definition['reducer'], SliceActionType<SliceName, Type>> : ActionCreatorForCaseReducer<Definition, SliceActionType<SliceName, Type>> : never;
+};
+/**
+ * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`
+ *
+ * @internal
+ */
+type ActionCreatorForCaseReducerWithPrepare<CR extends {
+    prepare: any;
+}, Type extends string> = _ActionCreatorWithPreparedPayload<CR['prepare'], Type>;
+/**
+ * Get a `PayloadActionCreator` type for a passed `CaseReducer`
+ *
+ * @internal
+ */
+type ActionCreatorForCaseReducer<CR, Type extends string> = CR extends (state: any, action: infer Action) => any ? Action extends {
+    payload: infer P;
+} ? PayloadActionCreator<P, Type> : ActionCreatorWithoutPayload<Type> : ActionCreatorWithoutPayload<Type>;
+/**
+ * Extracts the CaseReducers out of a `reducers` object, even if they are
+ * tested into a `CaseReducerWithPrepare`.
+ *
+ * @internal
+ */
+type SliceDefinedCaseReducers<CaseReducers extends SliceCaseReducers<any>> = {
+    [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends AsyncThunkSliceReducerDefinition<any, any, any> ? Id<Pick<Required<Definition>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>> : Definition extends {
+        reducer: infer Reducer;
+    } ? Reducer : Definition : never;
+};
+type RemappedSelector<S extends Selector, NewState> = S extends Selector<any, infer R, infer P> ? Selector<NewState, R, P> & {
+    unwrapped: S;
+} : never;
+/**
+ * Extracts the final selector type from the `selectors` object.
+ *
+ * Removes the `string` index signature from the default value.
+ */
+type SliceDefinedSelectors<State, Selectors extends SliceSelectors<State>, RootState> = {
+    [K in keyof Selectors as string extends K ? never : K]: RemappedSelector<Selectors[K], RootState>;
+};
+/**
+ * Used on a SliceCaseReducers object.
+ * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that
+ * the `reducer` and the `prepare` function use the same type of `payload`.
+ *
+ * Might do additional such checks in the future.
+ *
+ * This type is only ever useful if you want to write your own wrapper around
+ * `createSlice`. Please don't use it otherwise!
+ *
+ * @public
+ */
+type ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & {
+    [T in keyof ACR]: ACR[T] extends {
+        reducer(s: S, action?: infer A): any;
+    } ? {
+        prepare(...a: never[]): Omit<A, 'type'>;
+    } : {};
+};
+interface BuildCreateSliceConfig {
+    creators?: {
+        asyncThunk?: typeof asyncThunkCreator;
+    };
+}
+declare function buildCreateSlice({ creators }?: BuildCreateSliceConfig): <State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>) => Slice<State, CaseReducers, Name, ReducerPath, Selectors>;
+/**
+ * A function that accepts an initial state, an object full of reducer
+ * functions, and a "slice name", and automatically generates
+ * action creators and action types that correspond to the
+ * reducers and state.
+ *
+ * @public
+ */
+declare const createSlice: <State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>) => Slice<State, CaseReducers, Name, ReducerPath, Selectors>;
+
+type AnyFunction = (...args: any) => any;
+type AnyCreateSelectorFunction = CreateSelectorFunction<(<F extends AnyFunction>(f: F) => F), <F extends AnyFunction>(f: F) => F>;
+type GetSelectorsOptions = {
+    createSelector?: AnyCreateSelectorFunction;
+};
+
+/**
+ * @public
+ */
+type EntityId = number | string;
+/**
+ * @public
+ */
+type Comparer<T> = (a: T, b: T) => number;
+/**
+ * @public
+ */
+type IdSelector<T, Id extends EntityId> = (model: T) => Id;
+/**
+ * @public
+ */
+type Update<T, Id extends EntityId> = {
+    id: Id;
+    changes: Partial<T>;
+};
+/**
+ * @public
+ */
+interface EntityState<T, Id extends EntityId> {
+    ids: Id[];
+    entities: Record<Id, T>;
+}
+/**
+ * @public
+ */
+interface EntityAdapterOptions<T, Id extends EntityId> {
+    selectId?: IdSelector<T, Id>;
+    sortComparer?: false | Comparer<T>;
+}
+type PreventAny<S, T, Id extends EntityId> = CastAny<S, EntityState<T, Id>>;
+type DraftableEntityState<T, Id extends EntityId> = EntityState<T, Id> | Draft<EntityState<T, Id>>;
+/**
+ * @public
+ */
+interface EntityStateAdapter<T, Id extends EntityId> {
+    addOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entity: T): S;
+    addOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, action: PayloadAction<T>): S;
+    addMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: readonly T[] | Record<Id, T>): S;
+    addMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: PayloadAction<readonly T[] | Record<Id, T>>): S;
+    setOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entity: T): S;
+    setOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, action: PayloadAction<T>): S;
+    setMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: readonly T[] | Record<Id, T>): S;
+    setMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: PayloadAction<readonly T[] | Record<Id, T>>): S;
+    setAll<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: readonly T[] | Record<Id, T>): S;
+    setAll<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: PayloadAction<readonly T[] | Record<Id, T>>): S;
+    removeOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, key: Id): S;
+    removeOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, key: PayloadAction<Id>): S;
+    removeMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, keys: readonly Id[]): S;
+    removeMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, keys: PayloadAction<readonly Id[]>): S;
+    removeAll<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>): S;
+    updateOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, update: Update<T, Id>): S;
+    updateOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, update: PayloadAction<Update<T, Id>>): S;
+    updateMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, updates: ReadonlyArray<Update<T, Id>>): S;
+    updateMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, updates: PayloadAction<ReadonlyArray<Update<T, Id>>>): S;
+    upsertOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entity: T): S;
+    upsertOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entity: PayloadAction<T>): S;
+    upsertMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: readonly T[] | Record<Id, T>): S;
+    upsertMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: PayloadAction<readonly T[] | Record<Id, T>>): S;
+}
+/**
+ * @public
+ */
+interface EntitySelectors<T, V, IdType extends EntityId> {
+    selectIds: (state: V) => IdType[];
+    selectEntities: (state: V) => Record<IdType, T>;
+    selectAll: (state: V) => T[];
+    selectTotal: (state: V) => number;
+    selectById: (state: V, id: IdType) => Id<UncheckedIndexedAccess<T>>;
+}
+/**
+ * @public
+ */
+interface EntityStateFactory<T, Id extends EntityId> {
+    getInitialState(state?: undefined, entities?: Record<Id, T> | readonly T[]): EntityState<T, Id>;
+    getInitialState<S extends object>(state: S, entities?: Record<Id, T> | readonly T[]): EntityState<T, Id> & S;
+}
+/**
+ * @public
+ */
+interface EntityAdapter<T, Id extends EntityId> extends EntityStateAdapter<T, Id>, EntityStateFactory<T, Id>, Required<EntityAdapterOptions<T, Id>> {
+    getSelectors(selectState?: undefined, options?: GetSelectorsOptions): EntitySelectors<T, EntityState<T, Id>, Id>;
+    getSelectors<V>(selectState: (state: V) => EntityState<T, Id>, options?: GetSelectorsOptions): EntitySelectors<T, V, Id>;
+}
+
+declare function createEntityAdapter<T, Id extends EntityId>(options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>): EntityAdapter<T, Id>;
+declare function createEntityAdapter<T extends {
+    id: EntityId;
+}>(options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>): EntityAdapter<T, T['id']>;
+
+/** @public */
+type ActionMatchingAnyOf<Matchers extends Matcher<any>[]> = ActionFromMatcher<Matchers[number]>;
+/** @public */
+type ActionMatchingAllOf<Matchers extends Matcher<any>[]> = UnionToIntersection<ActionMatchingAnyOf<Matchers>>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action matches any one of the supplied type guards or action
+ * creators.
+ *
+ * @param matchers The type guards or action creators to match against.
+ *
+ * @public
+ */
+declare function isAnyOf<Matchers extends Matcher<any>[]>(...matchers: Matchers): (action: any) => action is ActionMatchingAnyOf<Matchers>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action matches all of the supplied type guards or action
+ * creators.
+ *
+ * @param matchers The type guards or action creators to match against.
+ *
+ * @public
+ */
+declare function isAllOf<Matchers extends Matcher<any>[]>(...matchers: Matchers): (action: any) => action is ActionMatchingAllOf<Matchers>;
+type UnknownAsyncThunkPendingAction = ReturnType<AsyncThunkPendingActionCreator<unknown>>;
+type PendingActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is pending.
+ *
+ * @public
+ */
+declare function isPending(): (action: any) => action is UnknownAsyncThunkPendingAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is pending.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is PendingActionFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a pending thunk action
+ * @public
+ */
+declare function isPending(action: any): action is UnknownAsyncThunkPendingAction;
+type UnknownAsyncThunkRejectedAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;
+type RejectedActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is rejected.
+ *
+ * @public
+ */
+declare function isRejected(): (action: any) => action is UnknownAsyncThunkRejectedAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is rejected.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedActionFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a rejected thunk action
+ * @public
+ */
+declare function isRejected(action: any): action is UnknownAsyncThunkRejectedAction;
+type RejectedWithValueActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']> & (T extends AsyncThunk<any, any, {
+    rejectValue: infer RejectedValue;
+}> ? {
+    payload: RejectedValue;
+} : unknown);
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is rejected with value.
+ *
+ * @public
+ */
+declare function isRejectedWithValue(): (action: any) => action is UnknownAsyncThunkRejectedAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is rejected with value.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedWithValueActionFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a rejected thunk action with value
+ * @public
+ */
+declare function isRejectedWithValue(action: any): action is UnknownAsyncThunkRejectedAction;
+type UnknownAsyncThunkFulfilledAction = ReturnType<AsyncThunkFulfilledActionCreator<unknown, unknown>>;
+type FulfilledActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['fulfilled']>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is fulfilled.
+ *
+ * @public
+ */
+declare function isFulfilled(): (action: any) => action is UnknownAsyncThunkFulfilledAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is fulfilled.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is FulfilledActionFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a fulfilled thunk action
+ * @public
+ */
+declare function isFulfilled(action: any): action is UnknownAsyncThunkFulfilledAction;
+type UnknownAsyncThunkAction = UnknownAsyncThunkPendingAction | UnknownAsyncThunkRejectedAction | UnknownAsyncThunkFulfilledAction;
+type AnyAsyncThunk = {
+    pending: {
+        match: (action: any) => action is any;
+    };
+    fulfilled: {
+        match: (action: any) => action is any;
+    };
+    rejected: {
+        match: (action: any) => action is any;
+    };
+};
+type ActionsFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']> | ActionFromMatcher<T['fulfilled']> | ActionFromMatcher<T['rejected']>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator.
+ *
+ * @public
+ */
+declare function isAsyncThunkAction(): (action: any) => action is UnknownAsyncThunkAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is ActionsFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a thunk action
+ * @public
+ */
+declare function isAsyncThunkAction(action: any): action is UnknownAsyncThunkAction;
+
+/**
+ *
+ * @public
+ */
+declare let nanoid: (size?: number) => string;
+
+declare class TaskAbortError implements SerializedError {
+    code: string | undefined;
+    name: string;
+    message: string;
+    constructor(code: string | undefined);
+}
+
+/**
+ * Types copied from RTK
+ */
+/** @internal */
+type TypedActionCreatorWithMatchFunction<Type extends string> = TypedActionCreator<Type> & {
+    match: MatchFunction<any>;
+};
+/** @internal */
+type AnyListenerPredicate<State> = (action: UnknownAction, currentState: State, originalState: State) => boolean;
+/** @public */
+type ListenerPredicate<ActionType extends Action, State> = (action: UnknownAction, currentState: State, originalState: State) => action is ActionType;
+/** @public */
+interface ConditionFunction<State> {
+    (predicate: AnyListenerPredicate<State>, timeout?: number): Promise<boolean>;
+    (predicate: AnyListenerPredicate<State>, timeout?: number): Promise<boolean>;
+    (predicate: () => boolean, timeout?: number): Promise<boolean>;
+}
+/** @internal */
+type MatchFunction<T> = (v: any) => v is T;
+/** @public */
+interface ForkedTaskAPI {
+    /**
+     * Returns a promise that resolves when `waitFor` resolves or
+     * rejects if the task or the parent listener has been cancelled or is completed.
+     */
+    pause<W>(waitFor: Promise<W>): Promise<W>;
+    /**
+     * Returns a promise that resolves after `timeoutMs` or
+     * rejects if the task or the parent listener has been cancelled or is completed.
+     * @param timeoutMs
+     */
+    delay(timeoutMs: number): Promise<void>;
+    /**
+     * An abort signal whose `aborted` property is set to `true`
+     * if the task execution is either aborted or completed.
+     * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
+     */
+    signal: AbortSignal;
+}
+/** @public */
+interface AsyncTaskExecutor<T> {
+    (forkApi: ForkedTaskAPI): Promise<T>;
+}
+/** @public */
+interface SyncTaskExecutor<T> {
+    (forkApi: ForkedTaskAPI): T;
+}
+/** @public */
+type ForkedTaskExecutor<T> = AsyncTaskExecutor<T> | SyncTaskExecutor<T>;
+/** @public */
+type TaskResolved<T> = {
+    readonly status: 'ok';
+    readonly value: T;
+};
+/** @public */
+type TaskRejected = {
+    readonly status: 'rejected';
+    readonly error: unknown;
+};
+/** @public */
+type TaskCancelled = {
+    readonly status: 'cancelled';
+    readonly error: TaskAbortError;
+};
+/** @public */
+type TaskResult<Value> = TaskResolved<Value> | TaskRejected | TaskCancelled;
+/** @public */
+interface ForkedTask<T> {
+    /**
+     * A promise that resolves when the task is either completed or cancelled or rejects
+     * if parent listener execution is cancelled or completed.
+     *
+     * ### Example
+     * ```ts
+     * const result = await fork(async (forkApi) => Promise.resolve(4)).result
+     *
+     * if(result.status === 'ok') {
+     *   console.log(result.value) // logs 4
+     * }}
+     * ```
+     */
+    result: Promise<TaskResult<T>>;
+    /**
+     * Cancel task if it is in progress or not yet started,
+     * it is noop otherwise.
+     */
+    cancel(): void;
+}
+/** @public */
+interface ForkOptions {
+    /**
+     * If true, causes the parent task to not be marked as complete until
+     * all autoJoined forks have completed or failed.
+     */
+    autoJoin: boolean;
+}
+/** @public */
+interface ListenerEffectAPI<State, DispatchType extends Dispatch, ExtraArgument = unknown> extends MiddlewareAPI<DispatchType, State> {
+    /**
+     * Returns the store state as it existed when the action was originally dispatched, _before_ the reducers ran.
+     *
+     * ### Synchronous invocation
+     *
+     * This function can **only** be invoked **synchronously**, it throws error otherwise.
+     *
+     * @example
+     *
+     * ```ts
+     * middleware.startListening({
+     *  predicate: () => true,
+     *  async effect(_, { getOriginalState }) {
+     *    getOriginalState(); // sync: OK!
+     *
+     *    setTimeout(getOriginalState, 0); // async: throws Error
+     *
+     *    await Promise().resolve();
+     *
+     *    getOriginalState() // async: throws Error
+     *  }
+     * })
+     * ```
+     */
+    getOriginalState: () => State;
+    /**
+     * Removes the listener entry from the middleware and prevent future instances of the listener from running.
+     *
+     * It does **not** cancel any active instances.
+     */
+    unsubscribe(): void;
+    /**
+     * It will subscribe a listener if it was previously removed, noop otherwise.
+     */
+    subscribe(): void;
+    /**
+     * Returns a promise that resolves when the input predicate returns `true` or
+     * rejects if the listener has been cancelled or is completed.
+     *
+     * The return value is `true` if the predicate succeeds or `false` if a timeout is provided and expires first.
+     *
+     * ### Example
+     *
+     * ```ts
+     * const updateBy = createAction<number>('counter/updateBy');
+     *
+     * middleware.startListening({
+     *  actionCreator: updateBy,
+     *  async effect(_, { condition }) {
+     *    // wait at most 3s for `updateBy` actions.
+     *    if(await condition(updateBy.match, 3_000)) {
+     *      // `updateBy` has been dispatched twice in less than 3s.
+     *    }
+     *  }
+     * })
+     * ```
+     */
+    condition: ConditionFunction<State>;
+    /**
+     * Returns a promise that resolves when the input predicate returns `true` or
+     * rejects if the listener has been cancelled or is completed.
+     *
+     * The return value is the `[action, currentState, previousState]` combination that the predicate saw as arguments.
+     *
+     * The promise resolves to null if a timeout is provided and expires first,
+     *
+     * ### Example
+     *
+     * ```ts
+     * const updateBy = createAction<number>('counter/updateBy');
+     *
+     * middleware.startListening({
+     *  actionCreator: updateBy,
+     *  async effect(_, { take }) {
+     *    const [{ payload }] =  await take(updateBy.match);
+     *    console.log(payload); // logs 5;
+     *  }
+     * })
+     *
+     * store.dispatch(updateBy(5));
+     * ```
+     */
+    take: TakePattern<State>;
+    /**
+     * Cancels all other running instances of this same listener except for the one that made this call.
+     */
+    cancelActiveListeners: () => void;
+    /**
+     * Cancels the instance of this listener that made this call.
+     */
+    cancel: () => void;
+    /**
+     * Throws a `TaskAbortError` if this listener has been cancelled
+     */
+    throwIfCancelled: () => void;
+    /**
+     * An abort signal whose `aborted` property is set to `true`
+     * if the listener execution is either aborted or completed.
+     * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
+     */
+    signal: AbortSignal;
+    /**
+     * Returns a promise that resolves after `timeoutMs` or
+     * rejects if the listener has been cancelled or is completed.
+     */
+    delay(timeoutMs: number): Promise<void>;
+    /**
+     * Queues in the next microtask the execution of a task.
+     * @param executor
+     * @param options
+     */
+    fork<T>(executor: ForkedTaskExecutor<T>, options?: ForkOptions): ForkedTask<T>;
+    /**
+     * Returns a promise that resolves when `waitFor` resolves or
+     * rejects if the listener has been cancelled or is completed.
+     * @param promise
+     */
+    pause<M>(promise: Promise<M>): Promise<M>;
+    extra: ExtraArgument;
+}
+/** @public */
+type ListenerEffect<ActionType extends Action, State, DispatchType extends Dispatch, ExtraArgument = unknown> = (action: ActionType, api: ListenerEffectAPI<State, DispatchType, ExtraArgument>) => void | Promise<void>;
+/**
+ * @public
+ * Additional infos regarding the error raised.
+ */
+interface ListenerErrorInfo {
+    /**
+     * Which function has generated the exception.
+     */
+    raisedBy: 'effect' | 'predicate';
+}
+/**
+ * @public
+ * Gets notified with synchronous and asynchronous errors raised by `listeners` or `predicates`.
+ * @param error The thrown error.
+ * @param errorInfo Additional information regarding the thrown error.
+ */
+interface ListenerErrorHandler {
+    (error: unknown, errorInfo: ListenerErrorInfo): void;
+}
+/** @public */
+interface CreateListenerMiddlewareOptions<ExtraArgument = unknown> {
+    extra?: ExtraArgument;
+    /**
+     * Receives synchronous errors that are raised by `listener` and `listenerOption.predicate`.
+     */
+    onError?: ListenerErrorHandler;
+}
+/** @public */
+type ListenerMiddleware<State = unknown, DispatchType extends ThunkDispatch<State, unknown, Action> = ThunkDispatch<State, unknown, UnknownAction>, ExtraArgument = unknown> = Middleware<{
+    (action: Action<'listenerMiddleware/add'>): UnsubscribeListener;
+}, State, DispatchType>;
+/** @public */
+interface ListenerMiddlewareInstance<StateType = unknown, DispatchType extends ThunkDispatch<StateType, unknown, Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown> {
+    middleware: ListenerMiddleware<StateType, DispatchType, ExtraArgument>;
+    startListening: AddListenerOverloads<UnsubscribeListener, StateType, DispatchType, ExtraArgument> & TypedStartListening<StateType, DispatchType, ExtraArgument>;
+    stopListening: RemoveListenerOverloads<StateType, DispatchType> & TypedStopListening<StateType, DispatchType>;
+    /**
+     * Unsubscribes all listeners, cancels running listeners and tasks.
+     */
+    clearListeners: () => void;
+}
+/**
+ * API Function Overloads
+ */
+/** @public */
+type TakePatternOutputWithoutTimeout<State, Predicate extends AnyListenerPredicate<State>> = Predicate extends MatchFunction<infer ActionType> ? Promise<[ActionType, State, State]> : Promise<[UnknownAction, State, State]>;
+/** @public */
+type TakePatternOutputWithTimeout<State, Predicate extends AnyListenerPredicate<State>> = Predicate extends MatchFunction<infer ActionType> ? Promise<[ActionType, State, State] | null> : Promise<[UnknownAction, State, State] | null>;
+/** @public */
+interface TakePattern<State> {
+    <Predicate extends AnyListenerPredicate<State>>(predicate: Predicate): TakePatternOutputWithoutTimeout<State, Predicate>;
+    <Predicate extends AnyListenerPredicate<State>>(predicate: Predicate, timeout: number): TakePatternOutputWithTimeout<State, Predicate>;
+    <Predicate extends AnyListenerPredicate<State>>(predicate: Predicate, timeout?: number | undefined): TakePatternOutputWithTimeout<State, Predicate>;
+}
+/** @public */
+interface UnsubscribeListenerOptions {
+    cancelActive?: true;
+}
+/** @public */
+type UnsubscribeListener = (unsubscribeOptions?: UnsubscribeListenerOptions) => void;
+/**
+ * @public
+ * The possible overloads and options for defining a listener. The return type of each function is specified as a generic arg, so the overloads can be reused for multiple different functions
+ */
+type AddListenerOverloads<Return, StateType = unknown, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown, AdditionalOptions = unknown> = {
+    /** Accepts a "listener predicate" that is also a TS type predicate for the action*/
+    <MiddlewareActionType extends UnknownAction, ListenerPredicateType extends ListenerPredicate<MiddlewareActionType, StateType>>(options: {
+        actionCreator?: never;
+        type?: never;
+        matcher?: never;
+        predicate: ListenerPredicateType;
+        effect: ListenerEffect<ListenerPredicateGuardedActionType<ListenerPredicateType>, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+    /** Accepts an RTK action creator, like `incrementByAmount` */
+    <ActionCreatorType extends TypedActionCreatorWithMatchFunction<any>>(options: {
+        actionCreator: ActionCreatorType;
+        type?: never;
+        matcher?: never;
+        predicate?: never;
+        effect: ListenerEffect<ReturnType<ActionCreatorType>, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+    /** Accepts a specific action type string */
+    <T extends string>(options: {
+        actionCreator?: never;
+        type: T;
+        matcher?: never;
+        predicate?: never;
+        effect: ListenerEffect<Action<T>, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+    /** Accepts an RTK matcher function, such as `incrementByAmount.match` */
+    <MatchFunctionType extends MatchFunction<UnknownAction>>(options: {
+        actionCreator?: never;
+        type?: never;
+        matcher: MatchFunctionType;
+        predicate?: never;
+        effect: ListenerEffect<GuardedType<MatchFunctionType>, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+    /** Accepts a "listener predicate" that just returns a boolean, no type assertion */
+    <ListenerPredicateType extends AnyListenerPredicate<StateType>>(options: {
+        actionCreator?: never;
+        type?: never;
+        matcher?: never;
+        predicate: ListenerPredicateType;
+        effect: ListenerEffect<UnknownAction, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+};
+/** @public */
+type RemoveListenerOverloads<StateType = unknown, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown> = AddListenerOverloads<boolean, StateType, DispatchType, ExtraArgument, UnsubscribeListenerOptions>;
+/**
+ * A "pre-typed" version of `addListenerAction`, so the listener args are well-typed
+ *
+ * @public
+ */
+type TypedAddListener<StateType, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown, Payload = ListenerEntry<StateType, DispatchType>, T extends string = 'listenerMiddleware/add'> = BaseActionCreator<Payload, T> & AddListenerOverloads<PayloadAction<Payload, T>, StateType, DispatchType, ExtraArgument> & {
+    /**
+     * Creates a "pre-typed" version of `addListener`
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every `addListener` call.
+     *
+     * @returns A pre-typed `addListener` with the state, dispatch and extra types already defined.
+     *
+     * @example
+     * ```ts
+     * import { addListener } from '@reduxjs/toolkit'
+     *
+     * export const addAppListener = addListener.withTypes<RootState, AppDispatch, ExtraArguments>()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <OverrideStateType extends StateType, OverrideDispatchType extends Dispatch = ThunkDispatch<OverrideStateType, unknown, UnknownAction>, OverrideExtraArgument = unknown>() => TypedAddListener<OverrideStateType, OverrideDispatchType, OverrideExtraArgument>;
+};
+/**
+ * A "pre-typed" version of `removeListenerAction`, so the listener args are well-typed
+ *
+ * @public
+ */
+type TypedRemoveListener<StateType, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown, Payload = ListenerEntry<StateType, DispatchType>, T extends string = 'listenerMiddleware/remove'> = BaseActionCreator<Payload, T> & AddListenerOverloads<PayloadAction<Payload, T>, StateType, DispatchType, ExtraArgument, UnsubscribeListenerOptions> & {
+    /**
+     * Creates a "pre-typed" version of `removeListener`
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every `removeListener` call.
+     *
+     * @returns A pre-typed `removeListener` with the state, dispatch and extra
+     * types already defined.
+     *
+     * @example
+     * ```ts
+     * import { removeListener } from '@reduxjs/toolkit'
+     *
+     * export const removeAppListener = removeListener.withTypes<
+     *   RootState,
+     *   AppDispatch,
+     *   ExtraArguments
+     * >()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <OverrideStateType extends StateType, OverrideDispatchType extends Dispatch = ThunkDispatch<OverrideStateType, unknown, UnknownAction>, OverrideExtraArgument = unknown>() => TypedRemoveListener<OverrideStateType, OverrideDispatchType, OverrideExtraArgument>;
+};
+/**
+ * A "pre-typed" version of `middleware.startListening`, so the listener args are well-typed
+ *
+ * @public
+ */
+type TypedStartListening<StateType, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown> = AddListenerOverloads<UnsubscribeListener, StateType, DispatchType, ExtraArgument> & {
+    /**
+     * Creates a "pre-typed" version of
+     * {@linkcode ListenerMiddlewareInstance.startListening startListening}
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every
+     * {@linkcode ListenerMiddlewareInstance.startListening startListening} call.
+     *
+     * @returns A pre-typed `startListening` with the state, dispatch and extra types already defined.
+     *
+     * @example
+     * ```ts
+     * import { createListenerMiddleware } from '@reduxjs/toolkit'
+     *
+     * const listenerMiddleware = createListenerMiddleware()
+     *
+     * export const startAppListening = listenerMiddleware.startListening.withTypes<
+     *   RootState,
+     *   AppDispatch,
+     *   ExtraArguments
+     * >()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <OverrideStateType extends StateType, OverrideDispatchType extends Dispatch = ThunkDispatch<OverrideStateType, unknown, UnknownAction>, OverrideExtraArgument = unknown>() => TypedStartListening<OverrideStateType, OverrideDispatchType, OverrideExtraArgument>;
+};
+/**
+ * A "pre-typed" version of `middleware.stopListening`, so the listener args are well-typed
+ *
+ * @public
+ */
+type TypedStopListening<StateType, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown> = RemoveListenerOverloads<StateType, DispatchType, ExtraArgument> & {
+    /**
+     * Creates a "pre-typed" version of
+     * {@linkcode ListenerMiddlewareInstance.stopListening stopListening}
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every
+     * {@linkcode ListenerMiddlewareInstance.stopListening stopListening} call.
+     *
+     * @returns A pre-typed `stopListening` with the state, dispatch and extra types already defined.
+     *
+     * @example
+     * ```ts
+     * import { createListenerMiddleware } from '@reduxjs/toolkit'
+     *
+     * const listenerMiddleware = createListenerMiddleware()
+     *
+     * export const stopAppListening = listenerMiddleware.stopListening.withTypes<
+     *   RootState,
+     *   AppDispatch,
+     *   ExtraArguments
+     * >()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <OverrideStateType extends StateType, OverrideDispatchType extends Dispatch = ThunkDispatch<OverrideStateType, unknown, UnknownAction>, OverrideExtraArgument = unknown>() => TypedStopListening<OverrideStateType, OverrideDispatchType, OverrideExtraArgument>;
+};
+/**
+ * Internal Types
+ */
+/** @internal An single listener entry */
+type ListenerEntry<State = unknown, DispatchType extends Dispatch = Dispatch> = {
+    id: string;
+    effect: ListenerEffect<any, State, DispatchType>;
+    unsubscribe: () => void;
+    pending: Set<AbortController>;
+    type?: string;
+    predicate: ListenerPredicate<UnknownAction, State>;
+};
+/**
+ * Utility Types
+ */
+/** @public */
+type GuardedType<T> = T extends (x: any, ...args: any[]) => x is infer T ? T : never;
+/** @public */
+type ListenerPredicateGuardedActionType<T> = T extends ListenerPredicate<infer ActionType, any> ? ActionType : never;
+
+/**
+ * @public
+ */
+declare const addListener: TypedAddListener<unknown>;
+/**
+ * @public
+ */
+declare const clearAllListeners: ActionCreatorWithoutPayload<"listenerMiddleware/removeAll">;
+/**
+ * @public
+ */
+declare const removeListener: TypedRemoveListener<unknown>;
+/**
+ * @public
+ */
+declare const createListenerMiddleware: <StateType = unknown, DispatchType extends Dispatch<Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown>(middlewareOptions?: CreateListenerMiddlewareOptions<ExtraArgument>) => ListenerMiddlewareInstance<StateType, DispatchType, ExtraArgument>;
+
+type MiddlewareApiConfig = {
+    state?: unknown;
+    dispatch?: Dispatch;
+};
+type GetDispatchType<MiddlewareApiConfig> = MiddlewareApiConfig extends {
+    dispatch: infer DispatchType;
+} ? FallbackIfUnknown<DispatchType, Dispatch> : Dispatch;
+type AddMiddleware<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {
+    (...middlewares: Middleware<any, State, DispatchType>[]): void;
+    withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): AddMiddleware<GetState<MiddlewareConfig>, GetDispatchType<MiddlewareConfig>>;
+};
+type WithMiddleware<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = BaseActionCreator<Middleware<any, State, DispatchType>[], 'dynamicMiddleware/add', {
+    instanceId: string;
+}> & {
+    <Middlewares extends Middleware<any, State, DispatchType>[]>(...middlewares: Middlewares): PayloadAction<Middlewares, 'dynamicMiddleware/add', {
+        instanceId: string;
+    }>;
+    withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): WithMiddleware<GetState<MiddlewareConfig>, GetDispatchType<MiddlewareConfig>>;
+};
+interface DynamicDispatch {
+    <Middlewares extends Middleware<any>[]>(action: PayloadAction<Middlewares, 'dynamicMiddleware/add'>): ExtractDispatchExtensions<Middlewares> & this;
+}
+type DynamicMiddleware<State = unknown, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = Middleware<DynamicDispatch, State, DispatchType>;
+type DynamicMiddlewareInstance<State = unknown, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {
+    middleware: DynamicMiddleware<State, DispatchType>;
+    addMiddleware: AddMiddleware<State, DispatchType>;
+    withMiddleware: WithMiddleware<State, DispatchType>;
+    instanceId: string;
+};
+
+declare const createDynamicMiddleware: <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>() => DynamicMiddlewareInstance<State, DispatchType>;
+
+/**
+ * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js
+ *
+ * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes
+ * during build.
+ * @param {number} code
+ */
+declare function formatProdErrorMessage(code: number): string;
+
+export { type ActionCreatorInvariantMiddlewareOptions, type ActionCreatorWithNonInferrablePayload, type ActionCreatorWithOptionalPayload, type ActionCreatorWithPayload, type ActionCreatorWithPreparedPayload, type ActionCreatorWithoutPayload, type ActionMatchingAllOf, type ActionMatchingAnyOf, type ActionReducerMapBuilder, type Actions, type AddMiddleware, type AnyListenerPredicate, type AsyncTaskExecutor, type AsyncThunk, type AsyncThunkAction, type AsyncThunkOptions, type AsyncThunkPayloadCreator, type AsyncThunkPayloadCreatorReturnValue, type AutoBatchOptions, type CaseReducer, type CaseReducerActions, type CaseReducerWithPrepare, type CaseReducers, type CombinedSliceReducer, type Comparer, type ConfigureStoreOptions, type CreateAsyncThunkFunction, type CreateListenerMiddlewareOptions, type CreateSliceOptions, type DevToolsEnhancerOptions, type DynamicDispatch, type DynamicMiddlewareInstance, type EnhancedStore, type EntityAdapter, type EntityId, type EntitySelectors, type EntityState, type EntityStateAdapter, type ForkedTask, type ForkedTaskAPI, type ForkedTaskExecutor, type GetDispatchType as GetDispatch, type GetState, type GetThunkAPI, type IdSelector, type ImmutableStateInvariantMiddlewareOptions, type ListenerEffect, type ListenerEffectAPI, type ListenerErrorHandler, type ListenerMiddleware, type ListenerMiddlewareInstance, type MiddlewareApiConfig, type PayloadAction, type PayloadActionCreator, type PrepareAction, type ReducerCreators, ReducerType, SHOULD_AUTOBATCH, type SafePromise, type SerializableStateInvariantMiddlewareOptions, type SerializedError, type Slice, type SliceCaseReducers, type SliceSelectors, type SyncTaskExecutor, type ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions, TaskAbortError, type TaskCancelled, type TaskRejected, type TaskResolved, type TaskResult, Tuple, type TypedAddListener, type TypedRemoveListener, type TypedStartListening, type TypedStopListening, type UnsubscribeListener, type UnsubscribeListenerOptions, type Update, type ValidateSliceCaseReducers, type WithSlice, addListener, asyncThunkCreator, autoBatchEnhancer, buildCreateSlice, clearAllListeners, combineSlices, configureStore, createAction, createActionCreatorInvariantMiddleware, createAsyncThunk, createDraftSafeSelector, createDraftSafeSelectorCreator, createDynamicMiddleware, createEntityAdapter, createImmutableStateInvariantMiddleware, createListenerMiddleware, createReducer, createSerializableStateInvariantMiddleware, createSlice, findNonSerializableValue, formatProdErrorMessage, isActionCreator, isAllOf, isAnyOf, isAsyncThunkAction, isFSA as isFluxStandardAction, isFulfilled, isImmutableDefault, isPending, isPlain, isRejected, isRejectedWithValue, miniSerializeError, nanoid, prepareAutoBatched, removeListener, unwrapResult };
Index: node_modules/@reduxjs/toolkit/dist/index.d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2623 @@
+import { ActionCreator, Action, Middleware, StoreEnhancer, UnknownAction, Reducer, ReducersMapObject, Store, StateFromReducersMapObject, Dispatch, MiddlewareAPI } from 'redux';
+export * from 'redux';
+import { Draft } from 'immer';
+export { Draft, produce as createNextState, current, freeze, isDraft, original } from 'immer';
+import * as reselect from 'reselect';
+import { weakMapMemoize, createSelectorCreator, Selector, CreateSelectorFunction } from 'reselect';
+export { OutputSelector, Selector, createSelector, createSelectorCreator, lruMemoize, weakMapMemoize } from 'reselect';
+import { ThunkMiddleware, ThunkDispatch } from 'redux-thunk';
+export { ThunkAction, ThunkDispatch, ThunkMiddleware } from 'redux-thunk';
+import { UncheckedIndexedAccess } from './uncheckedindexed.js';
+
+declare const createDraftSafeSelectorCreator: typeof createSelectorCreator;
+/**
+ * "Draft-Safe" version of `reselect`'s `createSelector`:
+ * If an `immer`-drafted object is passed into the resulting selector's first argument,
+ * the selector will act on the current draft value, instead of returning a cached value
+ * that might be possibly outdated if the draft has been modified since.
+ * @public
+ */
+declare const createDraftSafeSelector: reselect.CreateSelectorFunction<typeof weakMapMemoize, typeof weakMapMemoize, any>;
+
+/**
+ * @public
+ */
+interface DevToolsEnhancerOptions {
+    /**
+     * the instance name to be showed on the monitor page. Default value is `document.title`.
+     * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.
+     */
+    name?: string;
+    /**
+     * action creators functions to be available in the Dispatcher.
+     */
+    actionCreators?: ActionCreator<any>[] | {
+        [key: string]: ActionCreator<any>;
+    };
+    /**
+     * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.
+     * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.
+     * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).
+     *
+     * @default 500 ms.
+     */
+    latency?: number;
+    /**
+     * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.
+     *
+     * @default 50
+     */
+    maxAge?: number;
+    /**
+     * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you
+     * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`
+     * functions.
+     */
+    serialize?: boolean | {
+        /**
+         * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).
+         * - `false` - will handle also circular references.
+         * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.
+         * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.
+         *   For each of them you can indicate if to include (by setting as `true`).
+         *   For `function` key you can also specify a custom function which handles serialization.
+         *   See [`jsan`](https://github.com/kolodny/jsan) for more details.
+         */
+        options?: undefined | boolean | {
+            date?: true;
+            regex?: true;
+            undefined?: true;
+            error?: true;
+            symbol?: true;
+            map?: true;
+            set?: true;
+            function?: true | ((fn: (...args: any[]) => any) => string);
+        };
+        /**
+         * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.
+         * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)
+         * key. So you can deserialize it back while importing or persisting data.
+         * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):
+         */
+        replacer?: (key: string, value: unknown) => any;
+        /**
+         * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)
+         * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)
+         * as an example on how to serialize special data types and get them back.
+         */
+        reviver?: (key: string, value: unknown) => any;
+        /**
+         * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).
+         * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.
+         * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.
+         */
+        immutable?: any;
+        /**
+         * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...
+         */
+        refs?: any;
+    };
+    /**
+     * function which takes `action` object and id number as arguments, and should return `action` object back.
+     */
+    actionSanitizer?: <A extends Action>(action: A, id: number) => A;
+    /**
+     * function which takes `state` object and index as arguments, and should return `state` object back.
+     */
+    stateSanitizer?: <S>(state: S, index: number) => S;
+    /**
+     * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).
+     * If `actionsAllowlist` specified, `actionsDenylist` is ignored.
+     */
+    actionsDenylist?: string | string[];
+    /**
+     * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).
+     * If `actionsAllowlist` specified, `actionsDenylist` is ignored.
+     */
+    actionsAllowlist?: string | string[];
+    /**
+     * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.
+     * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.
+     */
+    predicate?: <S, A extends Action>(state: S, action: A) => boolean;
+    /**
+     * if specified as `false`, it will not record the changes till clicking on `Start recording` button.
+     * Available only for Redux enhancer, for others use `autoPause`.
+     *
+     * @default true
+     */
+    shouldRecordChanges?: boolean;
+    /**
+     * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.
+     * If not specified, will commit when paused. Available only for Redux enhancer.
+     *
+     * @default "@@PAUSED""
+     */
+    pauseActionType?: string;
+    /**
+     * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.
+     * Not available for Redux enhancer (as it already does it but storing the data to be sent).
+     *
+     * @default false
+     */
+    autoPause?: boolean;
+    /**
+     * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.
+     * Available only for Redux enhancer.
+     *
+     * @default false
+     */
+    shouldStartLocked?: boolean;
+    /**
+     * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.
+     *
+     * @default true
+     */
+    shouldHotReload?: boolean;
+    /**
+     * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.
+     *
+     * @default false
+     */
+    shouldCatchErrors?: boolean;
+    /**
+     * If you want to restrict the extension, specify the features you allow.
+     * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.
+     * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.
+     * Otherwise, you'll get/set the data right from the monitor part.
+     */
+    features?: {
+        /**
+         * start/pause recording of dispatched actions
+         */
+        pause?: boolean;
+        /**
+         * lock/unlock dispatching actions and side effects
+         */
+        lock?: boolean;
+        /**
+         * persist states on page reloading
+         */
+        persist?: boolean;
+        /**
+         * export history of actions in a file
+         */
+        export?: boolean | 'custom';
+        /**
+         * import history of actions from a file
+         */
+        import?: boolean | 'custom';
+        /**
+         * jump back and forth (time travelling)
+         */
+        jump?: boolean;
+        /**
+         * skip (cancel) actions
+         */
+        skip?: boolean;
+        /**
+         * drag and drop actions in the history list
+         */
+        reorder?: boolean;
+        /**
+         * dispatch custom actions or action creators
+         */
+        dispatch?: boolean;
+        /**
+         * generate tests for the selected actions
+         */
+        test?: boolean;
+    };
+    /**
+     * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.
+     * Defaults to false.
+     */
+    trace?: boolean | (<A extends Action>(action: A) => string);
+    /**
+     * The maximum number of stack trace entries to record per action. Defaults to 10.
+     */
+    traceLimit?: number;
+}
+
+interface ActionCreatorInvariantMiddlewareOptions {
+    /**
+     * The function to identify whether a value is an action creator.
+     * The default checks for a function with a static type property and match method.
+     */
+    isActionCreator?: (action: unknown) => action is Function & {
+        type?: unknown;
+    };
+}
+declare function createActionCreatorInvariantMiddleware(options?: ActionCreatorInvariantMiddlewareOptions): Middleware;
+
+/**
+ * Returns true if the passed value is "plain", i.e. a value that is either
+ * directly JSON-serializable (boolean, number, string, array, plain object)
+ * or `undefined`.
+ *
+ * @param val The value to check.
+ *
+ * @public
+ */
+declare function isPlain(val: any): boolean;
+interface NonSerializableValue {
+    keyPath: string;
+    value: unknown;
+}
+type IgnorePaths = readonly (string | RegExp)[];
+/**
+ * @public
+ */
+declare function findNonSerializableValue(value: unknown, path?: string, isSerializable?: (value: unknown) => boolean, getEntries?: (value: unknown) => [string, any][], ignoredPaths?: IgnorePaths, cache?: WeakSet<object>): NonSerializableValue | false;
+/**
+ * Options for `createSerializableStateInvariantMiddleware()`.
+ *
+ * @public
+ */
+interface SerializableStateInvariantMiddlewareOptions {
+    /**
+     * The function to check if a value is considered serializable. This
+     * function is applied recursively to every value contained in the
+     * state. Defaults to `isPlain()`.
+     */
+    isSerializable?: (value: any) => boolean;
+    /**
+     * The function that will be used to retrieve entries from each
+     * value.  If unspecified, `Object.entries` will be used. Defaults
+     * to `undefined`.
+     */
+    getEntries?: (value: any) => [string, any][];
+    /**
+     * An array of action types to ignore when checking for serializability.
+     * Defaults to []
+     */
+    ignoredActions?: string[];
+    /**
+     * An array of dot-separated path strings or regular expressions to ignore
+     * when checking for serializability, Defaults to
+     * ['meta.arg', 'meta.baseQueryMeta']
+     */
+    ignoredActionPaths?: (string | RegExp)[];
+    /**
+     * An array of dot-separated path strings or regular expressions to ignore
+     * when checking for serializability, Defaults to []
+     */
+    ignoredPaths?: (string | RegExp)[];
+    /**
+     * Execution time warning threshold. If the middleware takes longer
+     * than `warnAfter` ms, a warning will be displayed in the console.
+     * Defaults to 32ms.
+     */
+    warnAfter?: number;
+    /**
+     * Opt out of checking state. When set to `true`, other state-related params will be ignored.
+     */
+    ignoreState?: boolean;
+    /**
+     * Opt out of checking actions. When set to `true`, other action-related params will be ignored.
+     */
+    ignoreActions?: boolean;
+    /**
+     * Opt out of caching the results. The cache uses a WeakSet and speeds up repeated checking processes.
+     * The cache is automatically disabled if no browser support for WeakSet is present.
+     */
+    disableCache?: boolean;
+}
+/**
+ * Creates a middleware that, after every state change, checks if the new
+ * state is serializable. If a non-serializable value is found within the
+ * state, an error is printed to the console.
+ *
+ * @param options Middleware options.
+ *
+ * @public
+ */
+declare function createSerializableStateInvariantMiddleware(options?: SerializableStateInvariantMiddlewareOptions): Middleware;
+
+/**
+ * The default `isImmutable` function.
+ *
+ * @public
+ */
+declare function isImmutableDefault(value: unknown): boolean;
+type IsImmutableFunc = (value: any) => boolean;
+/**
+ * Options for `createImmutableStateInvariantMiddleware()`.
+ *
+ * @public
+ */
+interface ImmutableStateInvariantMiddlewareOptions {
+    /**
+      Callback function to check if a value is considered to be immutable.
+      This function is applied recursively to every value contained in the state.
+      The default implementation will return true for primitive types
+      (like numbers, strings, booleans, null and undefined).
+     */
+    isImmutable?: IsImmutableFunc;
+    /**
+      An array of dot-separated path strings that match named nodes from
+      the root state to ignore when checking for immutability.
+      Defaults to undefined
+     */
+    ignoredPaths?: IgnorePaths;
+    /** Print a warning if checks take longer than N ms. Default: 32ms */
+    warnAfter?: number;
+}
+/**
+ * Creates a middleware that checks whether any state was mutated in between
+ * dispatches or during a dispatch. If any mutations are detected, an error is
+ * thrown.
+ *
+ * @param options Middleware options.
+ *
+ * @public
+ */
+declare function createImmutableStateInvariantMiddleware(options?: ImmutableStateInvariantMiddlewareOptions): Middleware;
+
+declare class Tuple<Items extends ReadonlyArray<unknown> = []> extends Array<Items[number]> {
+    constructor(length: number);
+    constructor(...items: Items);
+    static get [Symbol.species](): any;
+    concat<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...Items, ...AdditionalItems]>;
+    concat<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;
+    concat<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;
+    prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...AdditionalItems, ...Items]>;
+    prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;
+    prepend<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;
+}
+
+/**
+ * return True if T is `any`, otherwise return False
+ * taken from https://github.com/joonhocho/tsdef
+ *
+ * @internal
+ */
+type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;
+type CastAny<T, CastTo> = IsAny<T, CastTo, T>;
+/**
+ * return True if T is `unknown`, otherwise return False
+ * taken from https://github.com/joonhocho/tsdef
+ *
+ * @internal
+ */
+type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;
+type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;
+/**
+ * @internal
+ */
+type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;
+/**
+ * @internal
+ */
+type IfVoid<P, True, False> = [void] extends [P] ? True : False;
+/**
+ * @internal
+ */
+type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;
+/**
+ * returns True if TS version is above 3.5, False if below.
+ * uses feature detection to detect TS version >= 3.5
+ * * versions below 3.5 will return `{}` for unresolvable interference
+ * * versions above will return `unknown`
+ *
+ * @internal
+ */
+type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<(<T>() => T)>, 0, 1>];
+/**
+ * @internal
+ */
+type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;
+/**
+ * Convert a Union type `(A|B)` to an intersection type `(A&B)`
+ */
+type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
+type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [
+    infer Head,
+    ...infer Tail
+] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;
+type ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;
+type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;
+type ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;
+type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;
+type ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;
+type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;
+/**
+ * Helper type. Passes T out again, but boxes it in a way that it cannot
+ * "widen" the type by accident if it is a generic that should be inferred
+ * from elsewhere.
+ *
+ * @internal
+ */
+type NoInfer<T> = [T][T extends any ? 0 : never];
+type NonUndefined<T> = T extends undefined ? never : T;
+type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
+type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
+interface TypeGuard<T> {
+    (value: any): value is T;
+}
+interface HasMatchFunction<T> {
+    match: TypeGuard<T>;
+}
+/** @public */
+type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;
+/** @public */
+type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;
+type Id<T> = {
+    [K in keyof T]: T[K];
+} & {};
+type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;
+type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;
+/**
+ * A Promise that will never reject.
+ * @see https://github.com/reduxjs/redux-toolkit/issues/4101
+ */
+type SafePromise<T> = Promise<T> & {
+    __linterBrands: 'SafePromise';
+};
+
+interface ThunkOptions<E = any> {
+    extraArgument: E;
+}
+interface GetDefaultMiddlewareOptions {
+    thunk?: boolean | ThunkOptions;
+    immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions;
+    serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions;
+    actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions;
+}
+type ThunkMiddlewareFor<S, O extends GetDefaultMiddlewareOptions = {}> = O extends {
+    thunk: false;
+} ? never : O extends {
+    thunk: {
+        extraArgument: infer E;
+    };
+} ? ThunkMiddleware<S, UnknownAction, E> : ThunkMiddleware<S, UnknownAction>;
+type GetDefaultMiddleware<S = any> = <O extends GetDefaultMiddlewareOptions = {
+    thunk: true;
+    immutableCheck: true;
+    serializableCheck: true;
+    actionCreatorCheck: true;
+}>(options?: O) => Tuple<ExcludeFromTuple<[ThunkMiddlewareFor<S, O>], never>>;
+
+declare const SHOULD_AUTOBATCH = "RTK_autoBatch";
+declare const prepareAutoBatched: <T>() => (payload: T) => {
+    payload: T;
+    meta: unknown;
+};
+type AutoBatchOptions = {
+    type: 'tick';
+} | {
+    type: 'timer';
+    timeout: number;
+} | {
+    type: 'raf';
+} | {
+    type: 'callback';
+    queueNotification: (notify: () => void) => void;
+};
+/**
+ * A Redux store enhancer that watches for "low-priority" actions, and delays
+ * notifying subscribers until either the queued callback executes or the
+ * next "standard-priority" action is dispatched.
+ *
+ * This allows dispatching multiple "low-priority" actions in a row with only
+ * a single subscriber notification to the UI after the sequence of actions
+ * is finished, thus improving UI re-render performance.
+ *
+ * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.
+ * This can be added to `action.meta` manually, or by using the
+ * `prepareAutoBatched` helper.
+ *
+ * By default, it will queue a notification for the end of the event loop tick.
+ * However, you can pass several other options to configure the behavior:
+ * - `{type: 'tick'}`: queues using `queueMicrotask`
+ * - `{type: 'timer', timeout: number}`: queues using `setTimeout`
+ * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)
+ * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback
+ *
+ *
+ */
+declare const autoBatchEnhancer: (options?: AutoBatchOptions) => StoreEnhancer;
+
+type GetDefaultEnhancersOptions = {
+    autoBatch?: boolean | AutoBatchOptions;
+};
+type GetDefaultEnhancers<M extends Middlewares<any>> = (options?: GetDefaultEnhancersOptions) => Tuple<[StoreEnhancer<{
+    dispatch: ExtractDispatchExtensions<M>;
+}>]>;
+
+/**
+ * Options for `configureStore()`.
+ *
+ * @public
+ */
+interface ConfigureStoreOptions<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<Middlewares<S>>, E extends Tuple<Enhancers> = Tuple<Enhancers>, P = S> {
+    /**
+     * A single reducer function that will be used as the root reducer, or an
+     * object of slice reducers that will be passed to `combineReducers()`.
+     */
+    reducer: Reducer<S, A, P> | ReducersMapObject<S, A, P>;
+    /**
+     * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.
+     * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.
+     *
+     * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`
+     * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage
+     */
+    middleware?: (getDefaultMiddleware: GetDefaultMiddleware<S>) => M;
+    /**
+     * Whether to enable Redux DevTools integration. Defaults to `true`.
+     *
+     * Additional configuration can be done by passing Redux DevTools options
+     */
+    devTools?: boolean | DevToolsEnhancerOptions;
+    /**
+     * Whether to check for duplicate middleware instances. Defaults to `true`.
+     */
+    duplicateMiddlewareCheck?: boolean;
+    /**
+     * The initial state, same as Redux's createStore.
+     * You may optionally specify it to hydrate the state
+     * from the server in universal apps, or to restore a previously serialized
+     * user session. If you use `combineReducers()` to produce the root reducer
+     * function (either directly or indirectly by passing an object as `reducer`),
+     * this must be an object with the same shape as the reducer map keys.
+     */
+    preloadedState?: P;
+    /**
+     * The store enhancers to apply. See Redux's `createStore()`.
+     * All enhancers will be included before the DevTools Extension enhancer.
+     * If you need to customize the order of enhancers, supply a callback
+     * function that will receive a `getDefaultEnhancers` function that returns a Tuple,
+     * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).
+     * If you only need to add middleware, you can use the `middleware` parameter instead.
+     */
+    enhancers?: (getDefaultEnhancers: GetDefaultEnhancers<M>) => E;
+}
+type Middlewares<S> = ReadonlyArray<Middleware<{}, S>>;
+type Enhancers = ReadonlyArray<StoreEnhancer>;
+/**
+ * A Redux store returned by `configureStore()`. Supports dispatching
+ * side-effectful _thunks_ in addition to plain actions.
+ *
+ * @public
+ */
+type EnhancedStore<S = any, A extends Action = UnknownAction, E extends Enhancers = Enhancers> = ExtractStoreExtensions<E> & Store<S, A, UnknownIfNonSpecific<ExtractStateExtensions<E>>>;
+/**
+ * A friendly abstraction over the standard Redux `createStore()` function.
+ *
+ * @param options The store configuration.
+ * @returns A configured Redux store.
+ *
+ * @public
+ */
+declare function configureStore<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<[ThunkMiddlewareFor<S>]>, E extends Tuple<Enhancers> = Tuple<[
+    StoreEnhancer<{
+        dispatch: ExtractDispatchExtensions<M>;
+    }>,
+    StoreEnhancer
+]>, P = S>(options: ConfigureStoreOptions<S, A, M, E, P>): EnhancedStore<S, A, E>;
+
+/**
+ * An action with a string type and an associated payload. This is the
+ * type of action returned by `createAction()` action creators.
+ *
+ * @template P The type of the action's payload.
+ * @template T the type used for the action type.
+ * @template M The type of the action's meta (optional)
+ * @template E The type of the action's error (optional)
+ *
+ * @public
+ */
+type PayloadAction<P = void, T extends string = string, M = never, E = never> = {
+    payload: P;
+    type: T;
+} & ([M] extends [never] ? {} : {
+    meta: M;
+}) & ([E] extends [never] ? {} : {
+    error: E;
+});
+/**
+ * A "prepare" method to be used as the second parameter of `createAction`.
+ * Takes any number of arguments and returns a Flux Standard Action without
+ * type (will be added later) that *must* contain a payload (might be undefined).
+ *
+ * @public
+ */
+type PrepareAction<P> = ((...args: any[]) => {
+    payload: P;
+}) | ((...args: any[]) => {
+    payload: P;
+    meta: any;
+}) | ((...args: any[]) => {
+    payload: P;
+    error: any;
+}) | ((...args: any[]) => {
+    payload: P;
+    meta: any;
+    error: any;
+});
+/**
+ * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.
+ *
+ * @internal
+ */
+type _ActionCreatorWithPreparedPayload<PA extends PrepareAction<any> | void, T extends string = string> = PA extends PrepareAction<infer P> ? ActionCreatorWithPreparedPayload<Parameters<PA>, P, T, ReturnType<PA> extends {
+    error: infer E;
+} ? E : never, ReturnType<PA> extends {
+    meta: infer M;
+} ? M : never> : void;
+/**
+ * Basic type for all action creators.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ */
+type BaseActionCreator<P, T extends string, M = never, E = never> = {
+    type: T;
+    match: (action: unknown) => action is PayloadAction<P, T, M, E>;
+};
+/**
+ * An action creator that takes multiple arguments that are passed
+ * to a `PrepareAction` method to create the final Action.
+ * @typeParam Args arguments for the action creator function
+ * @typeParam P `payload` type
+ * @typeParam T `type` name
+ * @typeParam E optional `error` type
+ * @typeParam M optional `meta` type
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithPreparedPayload<Args extends unknown[], P, T extends string = string, E = never, M = never> extends BaseActionCreator<P, T, M, E> {
+    /**
+     * Calling this {@link redux#ActionCreator} with `Args` will return
+     * an Action with a payload of type `P` and (depending on the `PrepareAction`
+     * method used) a `meta`- and `error` property of types `M` and `E` respectively.
+     */
+    (...args: Args): PayloadAction<P, T, M, E>;
+}
+/**
+ * An action creator of type `T` that takes an optional payload of type `P`.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithOptionalPayload<P, T extends string = string> extends BaseActionCreator<P, T> {
+    /**
+     * Calling this {@link redux#ActionCreator} with an argument will
+     * return a {@link PayloadAction} of type `T` with a payload of `P`.
+     * Calling it without an argument will return a PayloadAction with a payload of `undefined`.
+     */
+    (payload?: P): PayloadAction<P, T>;
+}
+/**
+ * An action creator of type `T` that takes no payload.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithoutPayload<T extends string = string> extends BaseActionCreator<undefined, T> {
+    /**
+     * Calling this {@link redux#ActionCreator} will
+     * return a {@link PayloadAction} of type `T` with a payload of `undefined`
+     */
+    (noArgument: void): PayloadAction<undefined, T>;
+}
+/**
+ * An action creator of type `T` that requires a payload of type P.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithPayload<P, T extends string = string> extends BaseActionCreator<P, T> {
+    /**
+     * Calling this {@link redux#ActionCreator} with an argument will
+     * return a {@link PayloadAction} of type `T` with a payload of `P`
+     */
+    (payload: P): PayloadAction<P, T>;
+}
+/**
+ * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+interface ActionCreatorWithNonInferrablePayload<T extends string = string> extends BaseActionCreator<unknown, T> {
+    /**
+     * Calling this {@link redux#ActionCreator} with an argument will
+     * return a {@link PayloadAction} of type `T` with a payload
+     * of exactly the type of the argument.
+     */
+    <PT extends unknown>(payload: PT): PayloadAction<PT, T>;
+}
+/**
+ * An action creator that produces actions with a `payload` attribute.
+ *
+ * @typeParam P the `payload` type
+ * @typeParam T the `type` of the resulting action
+ * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.
+ *
+ * @public
+ */
+type PayloadActionCreator<P = void, T extends string = string, PA extends PrepareAction<P> | void = void> = IfPrepareActionMethodProvided<PA, _ActionCreatorWithPreparedPayload<PA, T>, IsAny<P, ActionCreatorWithPayload<any, T>, IsUnknownOrNonInferrable<P, ActionCreatorWithNonInferrablePayload<T>, IfVoid<P, ActionCreatorWithoutPayload<T>, IfMaybeUndefined<P, ActionCreatorWithOptionalPayload<P, T>, ActionCreatorWithPayload<P, T>>>>>>;
+/**
+ * A utility function to create an action creator for the given action type
+ * string. The action creator accepts a single argument, which will be included
+ * in the action object as a field called payload. The action creator function
+ * will also have its toString() overridden so that it returns the action type.
+ *
+ * @param type The action type to use for created actions.
+ * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.
+ *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.
+ *
+ * @public
+ */
+declare function createAction<P = void, T extends string = string>(type: T): PayloadActionCreator<P, T>;
+/**
+ * A utility function to create an action creator for the given action type
+ * string. The action creator accepts a single argument, which will be included
+ * in the action object as a field called payload. The action creator function
+ * will also have its toString() overridden so that it returns the action type.
+ *
+ * @param type The action type to use for created actions.
+ * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.
+ *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.
+ *
+ * @public
+ */
+declare function createAction<PA extends PrepareAction<any>, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>;
+/**
+ * Returns true if value is an RTK-like action creator, with a static type property and match method.
+ */
+declare function isActionCreator(action: unknown): action is BaseActionCreator<unknown, string> & Function;
+/**
+ * Returns true if value is an action with a string type and valid Flux Standard Action keys.
+ */
+declare function isFSA(action: unknown): action is {
+    type: string;
+    payload?: unknown;
+    error?: unknown;
+    meta?: unknown;
+};
+type IfPrepareActionMethodProvided<PA extends PrepareAction<any> | void, True, False> = PA extends (...args: any[]) => any ? True : False;
+
+type TypedActionCreator<Type extends string> = {
+    (...args: any[]): Action<Type>;
+    type: Type;
+};
+/**
+ * A builder for an action <-> reducer map.
+ *
+ * @public
+ */
+interface ActionReducerMapBuilder<State> {
+    /**
+     * Adds a case reducer to handle a single exact action type.
+     * @remarks
+     * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.
+     * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.
+     * @param reducer - The actual case reducer function.
+     */
+    addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ActionReducerMapBuilder<State>;
+    /**
+     * Adds a case reducer to handle a single exact action type.
+     * @remarks
+     * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.
+     * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.
+     * @param reducer - The actual case reducer function.
+     */
+    addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ActionReducerMapBuilder<State>;
+    /**
+     * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.
+     * @remarks
+     * If multiple matcher reducers match, all of them will be executed in the order
+     * they were defined in - even if a case reducer already matched.
+     * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.
+     * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)
+     *   function
+     * @param reducer - The actual case reducer function.
+     *
+     * @example
+  ```ts
+  import {
+    createAction,
+    createReducer,
+    AsyncThunk,
+    UnknownAction,
+  } from "@reduxjs/toolkit";
+  
+  type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;
+  
+  type PendingAction = ReturnType<GenericAsyncThunk["pending"]>;
+  type RejectedAction = ReturnType<GenericAsyncThunk["rejected"]>;
+  type FulfilledAction = ReturnType<GenericAsyncThunk["fulfilled"]>;
+  
+  const initialState: Record<string, string> = {};
+  const resetAction = createAction("reset-tracked-loading-state");
+  
+  function isPendingAction(action: UnknownAction): action is PendingAction {
+    return typeof action.type === "string" && action.type.endsWith("/pending");
+  }
+  
+  const reducer = createReducer(initialState, (builder) => {
+    builder
+      .addCase(resetAction, () => initialState)
+      // matcher can be defined outside as a type predicate function
+      .addMatcher(isPendingAction, (state, action) => {
+        state[action.meta.requestId] = "pending";
+      })
+      .addMatcher(
+        // matcher can be defined inline as a type predicate function
+        (action): action is RejectedAction => action.type.endsWith("/rejected"),
+        (state, action) => {
+          state[action.meta.requestId] = "rejected";
+        }
+      )
+      // matcher can just return boolean and the matcher can receive a generic argument
+      .addMatcher<FulfilledAction>(
+        (action) => action.type.endsWith("/fulfilled"),
+        (state, action) => {
+          state[action.meta.requestId] = "fulfilled";
+        }
+      );
+  });
+  ```
+     */
+    addMatcher<A>(matcher: TypeGuard<A> | ((action: any) => boolean), reducer: CaseReducer<State, A extends Action ? A : A & Action>): Omit<ActionReducerMapBuilder<State>, 'addCase'>;
+    /**
+     * Adds a "default case" reducer that is executed if no case reducer and no matcher
+     * reducer was executed for this action.
+     * @param reducer - The fallback "default case" reducer function.
+     *
+     * @example
+  ```ts
+  import { createReducer } from '@reduxjs/toolkit'
+  const initialState = { otherActions: 0 }
+  const reducer = createReducer(initialState, builder => {
+    builder
+      // .addCase(...)
+      // .addMatcher(...)
+      .addDefaultCase((state, action) => {
+        state.otherActions++
+      })
+  })
+  ```
+     */
+    addDefaultCase(reducer: CaseReducer<State, Action>): {};
+}
+
+/**
+ * Defines a mapping from action types to corresponding action object shapes.
+ *
+ * @deprecated This should not be used manually - it is only used for internal
+ *             inference purposes and should not have any further value.
+ *             It might be removed in the future.
+ * @public
+ */
+type Actions<T extends keyof any = string> = Record<T, Action>;
+/**
+ * A *case reducer* is a reducer function for a specific action type. Case
+ * reducers can be composed to full reducers using `createReducer()`.
+ *
+ * Unlike a normal Redux reducer, a case reducer is never called with an
+ * `undefined` state to determine the initial state. Instead, the initial
+ * state is explicitly specified as an argument to `createReducer()`.
+ *
+ * In addition, a case reducer can choose to mutate the passed-in `state`
+ * value directly instead of returning a new state. This does not actually
+ * cause the store state to be mutated directly; instead, thanks to
+ * [immer](https://github.com/mweststrate/immer), the mutations are
+ * translated to copy operations that result in a new state.
+ *
+ * @public
+ */
+type CaseReducer<S = any, A extends Action = UnknownAction> = (state: Draft<S>, action: A) => NoInfer<S> | void | Draft<NoInfer<S>>;
+/**
+ * A mapping from action types to case reducers for `createReducer()`.
+ *
+ * @deprecated This should not be used manually - it is only used
+ *             for internal inference purposes and using it manually
+ *             would lead to type erasure.
+ *             It might be removed in the future.
+ * @public
+ */
+type CaseReducers<S, AS extends Actions> = {
+    [T in keyof AS]: AS[T] extends Action ? CaseReducer<S, AS[T]> : void;
+};
+type NotFunction<T> = T extends Function ? never : T;
+type ReducerWithInitialState<S extends NotFunction<any>> = Reducer<S> & {
+    getInitialState: () => S;
+};
+/**
+ * A utility function that allows defining a reducer as a mapping from action
+ * type to *case reducer* functions that handle these action types. The
+ * reducer's initial state is passed as the first argument.
+ *
+ * @remarks
+ * The body of every case reducer is implicitly wrapped with a call to
+ * `produce()` from the [immer](https://github.com/mweststrate/immer) library.
+ * This means that rather than returning a new state object, you can also
+ * mutate the passed-in state object directly; these mutations will then be
+ * automatically and efficiently translated into copies, giving you both
+ * convenience and immutability.
+ *
+ * @overloadSummary
+ * This function accepts a callback that receives a `builder` object as its argument.
+ * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be
+ * called to define what actions this reducer will handle.
+ *
+ * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a "lazy initializer" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.
+ * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define
+ *   case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.
+ * @example
+```ts
+import {
+  createAction,
+  createReducer,
+  UnknownAction,
+  PayloadAction,
+} from "@reduxjs/toolkit";
+
+const increment = createAction<number>("increment");
+const decrement = createAction<number>("decrement");
+
+function isActionWithNumberPayload(
+  action: UnknownAction
+): action is PayloadAction<number> {
+  return typeof action.payload === "number";
+}
+
+const reducer = createReducer(
+  {
+    counter: 0,
+    sumOfNumberPayloads: 0,
+    unhandledActions: 0,
+  },
+  (builder) => {
+    builder
+      .addCase(increment, (state, action) => {
+        // action is inferred correctly here
+        state.counter += action.payload;
+      })
+      // You can chain calls, or have separate `builder.addCase()` lines each time
+      .addCase(decrement, (state, action) => {
+        state.counter -= action.payload;
+      })
+      // You can apply a "matcher function" to incoming actions
+      .addMatcher(isActionWithNumberPayload, (state, action) => {})
+      // and provide a default case if no other handlers matched
+      .addDefaultCase((state, action) => {});
+  }
+);
+```
+ * @public
+ */
+declare function createReducer<S extends NotFunction<any>>(initialState: S | (() => S), mapOrBuilderCallback: (builder: ActionReducerMapBuilder<S>) => void): ReducerWithInitialState<S>;
+
+type SliceLike<ReducerPath extends string, State> = {
+    reducerPath: ReducerPath;
+    reducer: Reducer<State>;
+};
+type AnySliceLike = SliceLike<string, any>;
+type SliceLikeReducerPath<A extends AnySliceLike> = A extends SliceLike<infer ReducerPath, any> ? ReducerPath : never;
+type SliceLikeState<A extends AnySliceLike> = A extends SliceLike<any, infer State> ? State : never;
+type WithSlice<A extends AnySliceLike> = {
+    [Path in SliceLikeReducerPath<A>]: SliceLikeState<A>;
+};
+type ReducerMap = Record<string, Reducer>;
+type ExistingSliceLike<DeclaredState> = {
+    [ReducerPath in keyof DeclaredState]: SliceLike<ReducerPath & string, NonUndefined<DeclaredState[ReducerPath]>>;
+}[keyof DeclaredState];
+type InjectConfig = {
+    /**
+     * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.
+     */
+    overrideExisting?: boolean;
+};
+/**
+ * A reducer that allows for slices/reducers to be injected after initialisation.
+ */
+interface CombinedSliceReducer<InitialState, DeclaredState = InitialState> extends Reducer<DeclaredState, UnknownAction, Partial<DeclaredState>> {
+    /**
+     * Provide a type for slices that will be injected lazily.
+     *
+     * One way to do this would be with interface merging:
+     * ```ts
+     *
+     * export interface LazyLoadedSlices {}
+     *
+     * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();
+     *
+     * // elsewhere
+     *
+     * declare module './reducer' {
+     *   export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}
+     * }
+     *
+     * const withBoolean = rootReducer.inject(booleanSlice);
+     *
+     * // elsewhere again
+     *
+     * declare module './reducer' {
+     *   export interface LazyLoadedSlices {
+     *     customName: CustomState
+     *   }
+     * }
+     *
+     * const withCustom = rootReducer.inject({ reducerPath: "customName", reducer: customSlice.reducer })
+     * ```
+     */
+    withLazyLoadedSlices<Lazy = {}>(): CombinedSliceReducer<InitialState, Id<DeclaredState & Partial<Lazy>>>;
+    /**
+     * Inject a slice.
+     *
+     * Accepts an individual slice, RTKQ API instance, or a "slice-like" { reducerPath, reducer } object.
+     *
+     * ```ts
+     * rootReducer.inject(booleanSlice)
+     * rootReducer.inject(baseApi)
+     * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })
+     * ```
+     *
+     */
+    inject<Sl extends Id<ExistingSliceLike<DeclaredState>>>(slice: Sl, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<Sl>>>;
+    /**
+     * Inject a slice.
+     *
+     * Accepts an individual slice, RTKQ API instance, or a "slice-like" { reducerPath, reducer } object.
+     *
+     * ```ts
+     * rootReducer.inject(booleanSlice)
+     * rootReducer.inject(baseApi)
+     * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })
+     * ```
+     *
+     */
+    inject<ReducerPath extends string, State>(slice: SliceLike<ReducerPath, State & (ReducerPath extends keyof DeclaredState ? never : State)>, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<SliceLike<ReducerPath, State>>>>;
+    /**
+     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.
+     *
+     * ```ts
+     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;
+     * //                                                                ^? boolean | undefined
+     *
+     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {
+     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined
+     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined
+     *   return state.boolean;
+     *   //           ^? boolean
+     * })
+     * ```
+     *
+     * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.
+     *
+     * ```ts
+     *
+     * export interface LazyLoadedSlices {};
+     *
+     * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();
+     *
+     * export const rootReducer = combineSlices({ inner: innerReducer });
+     *
+     * export type RootState = ReturnType<typeof rootReducer>;
+     *
+     * // elsewhere
+     *
+     * declare module "./reducer.ts" {
+     *  export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}
+     * }
+     *
+     * const withBool = innerReducer.inject(booleanSlice);
+     *
+     * const selectBoolean = withBool.selector(
+     *   (state) => state.boolean,
+     *   (rootState: RootState) => state.inner
+     * );
+     * //    now expects to be passed RootState instead of innerReducer state
+     *
+     * ```
+     *
+     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)
+     *
+     * ```ts
+     * const injectedReducer = rootReducer.inject(booleanSlice);
+     * const selectBoolean = injectedReducer.selector((state) => {
+     *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined
+     *   return state.boolean
+     * })
+     * ```
+     */
+    selector: {
+        /**
+         * Create a selector that guarantees that the slices injected will have a defined value when selector is run.
+         *
+         * ```ts
+         * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;
+         * //                                                                ^? boolean | undefined
+         *
+         * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {
+         *   // if action hasn't been dispatched since slice was injected, this would usually be undefined
+         *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined
+         *   return state.boolean;
+         *   //           ^? boolean
+         * })
+         * ```
+         *
+         * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)
+         *
+         * ```ts
+         * const injectedReducer = rootReducer.inject(booleanSlice);
+         * const selectBoolean = injectedReducer.selector((state) => {
+         *   console.log(injectedReducer.selector.original(state).boolean) // undefined
+         *   return state.boolean
+         * })
+         * ```
+         */
+        <Selector extends (state: DeclaredState, ...args: any[]) => unknown>(selectorFn: Selector): (state: WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;
+        /**
+         * Create a selector that guarantees that the slices injected will have a defined value when selector is run.
+         *
+         * ```ts
+         * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;
+         * //                                                                ^? boolean | undefined
+         *
+         * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {
+         *   // if action hasn't been dispatched since slice was injected, this would usually be undefined
+         *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined
+         *   return state.boolean;
+         *   //           ^? boolean
+         * })
+         * ```
+         *
+         * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.
+         *
+         * ```ts
+         *
+         * interface LazyLoadedSlices {};
+         *
+         * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();
+         *
+         * const rootReducer = combineSlices({ inner: innerReducer });
+         *
+         * type RootState = ReturnType<typeof rootReducer>;
+         *
+         * // elsewhere
+         *
+         * declare module "./reducer.ts" {
+         *  interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}
+         * }
+         *
+         * const withBool = innerReducer.inject(booleanSlice);
+         *
+         * const selectBoolean = withBool.selector(
+         *   (state) => state.boolean,
+         *   (rootState: RootState) => state.inner
+         * );
+         * //    now expects to be passed RootState instead of innerReducer state
+         *
+         * ```
+         *
+         * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)
+         *
+         * ```ts
+         * const injectedReducer = rootReducer.inject(booleanSlice);
+         * const selectBoolean = injectedReducer.selector((state) => {
+         *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined
+         *   return state.boolean
+         * })
+         * ```
+         */
+        <Selector extends (state: DeclaredState, ...args: any[]) => unknown, RootState>(selectorFn: Selector, selectState: (rootState: RootState, ...args: Tail<Parameters<Selector>>) => WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>): (state: RootState, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;
+        /**
+         * Returns the unproxied state. Useful for debugging.
+         * @param state state Proxy, that ensures injected reducers have value
+         * @returns original, unproxied state
+         * @throws if value passed is not a state Proxy
+         */
+        original: (state: DeclaredState) => InitialState & Partial<DeclaredState>;
+    };
+}
+type InitialState<Slices extends Array<AnySliceLike | ReducerMap>> = UnionToIntersection<Slices[number] extends infer Slice ? Slice extends AnySliceLike ? WithSlice<Slice> : StateFromReducersMapObject<Slice> : never>;
+declare function combineSlices<Slices extends Array<AnySliceLike | ReducerMap>>(...slices: Slices): CombinedSliceReducer<Id<InitialState<Slices>>>;
+
+type BaseThunkAPI<S, E, D extends Dispatch = Dispatch, RejectedValue = unknown, RejectedMeta = unknown, FulfilledMeta = unknown> = {
+    dispatch: D;
+    getState: () => S;
+    extra: E;
+    requestId: string;
+    signal: AbortSignal;
+    abort: (reason?: string) => void;
+    rejectWithValue: IsUnknown<RejectedMeta, (value: RejectedValue) => RejectWithValue<RejectedValue, RejectedMeta>, (value: RejectedValue, meta: RejectedMeta) => RejectWithValue<RejectedValue, RejectedMeta>>;
+    fulfillWithValue: IsUnknown<FulfilledMeta, <FulfilledValue>(value: FulfilledValue) => FulfilledValue, <FulfilledValue>(value: FulfilledValue, meta: FulfilledMeta) => FulfillWithMeta<FulfilledValue, FulfilledMeta>>;
+};
+/**
+ * @public
+ */
+interface SerializedError {
+    name?: string;
+    message?: string;
+    stack?: string;
+    code?: string;
+}
+declare class RejectWithValue<Payload, RejectedMeta> {
+    readonly payload: Payload;
+    readonly meta: RejectedMeta;
+    private readonly _type;
+    constructor(payload: Payload, meta: RejectedMeta);
+}
+declare class FulfillWithMeta<Payload, FulfilledMeta> {
+    readonly payload: Payload;
+    readonly meta: FulfilledMeta;
+    private readonly _type;
+    constructor(payload: Payload, meta: FulfilledMeta);
+}
+/**
+ * Serializes an error into a plain object.
+ * Reworked from https://github.com/sindresorhus/serialize-error
+ *
+ * @public
+ */
+declare const miniSerializeError: (value: any) => SerializedError;
+type AsyncThunkConfig = {
+    state?: unknown;
+    dispatch?: ThunkDispatch<unknown, unknown, UnknownAction>;
+    extra?: unknown;
+    rejectValue?: unknown;
+    serializedErrorType?: unknown;
+    pendingMeta?: unknown;
+    fulfilledMeta?: unknown;
+    rejectedMeta?: unknown;
+};
+type GetState<ThunkApiConfig> = ThunkApiConfig extends {
+    state: infer State;
+} ? State : unknown;
+type GetExtra<ThunkApiConfig> = ThunkApiConfig extends {
+    extra: infer Extra;
+} ? Extra : unknown;
+type GetDispatch<ThunkApiConfig> = ThunkApiConfig extends {
+    dispatch: infer Dispatch;
+} ? FallbackIfUnknown<Dispatch, ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>> : ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>;
+type GetThunkAPI<ThunkApiConfig> = BaseThunkAPI<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, GetDispatch<ThunkApiConfig>, GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>, GetFulfilledMeta<ThunkApiConfig>>;
+type GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {
+    rejectValue: infer RejectValue;
+} ? RejectValue : unknown;
+type GetPendingMeta<ThunkApiConfig> = ThunkApiConfig extends {
+    pendingMeta: infer PendingMeta;
+} ? PendingMeta : unknown;
+type GetFulfilledMeta<ThunkApiConfig> = ThunkApiConfig extends {
+    fulfilledMeta: infer FulfilledMeta;
+} ? FulfilledMeta : unknown;
+type GetRejectedMeta<ThunkApiConfig> = ThunkApiConfig extends {
+    rejectedMeta: infer RejectedMeta;
+} ? RejectedMeta : unknown;
+type GetSerializedErrorType<ThunkApiConfig> = ThunkApiConfig extends {
+    serializedErrorType: infer GetSerializedErrorType;
+} ? GetSerializedErrorType : SerializedError;
+type MaybePromise<T> = T | Promise<T> | (T extends any ? Promise<T> : never);
+/**
+ * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.
+ * Might be useful for wrapping `createAsyncThunk` in custom abstractions.
+ *
+ * @public
+ */
+type AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig extends AsyncThunkConfig> = MaybePromise<IsUnknown<GetFulfilledMeta<ThunkApiConfig>, Returned, FulfillWithMeta<Returned, GetFulfilledMeta<ThunkApiConfig>>> | RejectWithValue<GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>>>;
+/**
+ * A type describing the `payloadCreator` argument to `createAsyncThunk`.
+ * Might be useful for wrapping `createAsyncThunk` in custom abstractions.
+ *
+ * @public
+ */
+type AsyncThunkPayloadCreator<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>;
+/**
+ * A ThunkAction created by `createAsyncThunk`.
+ * Dispatching it returns a Promise for either a
+ * fulfilled or rejected action.
+ * Also, the returned value contains an `abort()` method
+ * that allows the asyncAction to be cancelled from the outside.
+ *
+ * @public
+ */
+type AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = (dispatch: NonNullable<GetDispatch<ThunkApiConfig>>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => SafePromise<ReturnType<AsyncThunkFulfilledActionCreator<Returned, ThunkArg>> | ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>>> & {
+    abort: (reason?: string) => void;
+    requestId: string;
+    arg: ThunkArg;
+    unwrap: () => Promise<Returned>;
+};
+/**
+ * Config provided when calling the async thunk action creator.
+ */
+interface AsyncThunkDispatchConfig {
+    /**
+     * An external `AbortSignal` that will be tracked by the internal `AbortSignal`.
+     */
+    signal?: AbortSignal;
+}
+type AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = IsAny<ThunkArg, (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>, unknown extends ThunkArg ? (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> : [ThunkArg] extends [void] | [undefined] ? (arg?: undefined, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> : [void] extends [ThunkArg] ? (arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> : [undefined] extends [ThunkArg] ? WithStrictNullChecks<(arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>, (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>> : (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>>;
+/**
+ * Options object for `createAsyncThunk`.
+ *
+ * @public
+ */
+type AsyncThunkOptions<ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = {
+    /**
+     * A method to control whether the asyncThunk should be executed. Has access to the
+     * `arg`, `api.getState()` and `api.extra` arguments.
+     *
+     * @returns `false` if it should be skipped
+     */
+    condition?(arg: ThunkArg, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): MaybePromise<boolean | undefined>;
+    /**
+     * If `condition` returns `false`, the asyncThunk will be skipped.
+     * This option allows you to control whether a `rejected` action with `meta.condition == false`
+     * will be dispatched or not.
+     *
+     * @default `false`
+     */
+    dispatchConditionRejection?: boolean;
+    serializeError?: (x: unknown) => GetSerializedErrorType<ThunkApiConfig>;
+    /**
+     * A function to use when generating the `requestId` for the request sequence.
+     *
+     * @default `nanoid`
+     */
+    idGenerator?: (arg: ThunkArg) => string;
+} & IsUnknown<GetPendingMeta<ThunkApiConfig>, {
+    /**
+     * A method to generate additional properties to be added to `meta` of the pending action.
+     *
+     * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.
+     * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload
+     */
+    getPendingMeta?(base: {
+        arg: ThunkArg;
+        requestId: string;
+    }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;
+}, {
+    /**
+     * A method to generate additional properties to be added to `meta` of the pending action.
+     */
+    getPendingMeta(base: {
+        arg: ThunkArg;
+        requestId: string;
+    }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;
+}>;
+type AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[
+    string,
+    ThunkArg,
+    GetPendingMeta<ThunkApiConfig>?
+], undefined, string, never, {
+    arg: ThunkArg;
+    requestId: string;
+    requestStatus: 'pending';
+} & GetPendingMeta<ThunkApiConfig>>;
+type AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[
+    Error | null,
+    string,
+    ThunkArg,
+    GetRejectValue<ThunkApiConfig>?,
+    GetRejectedMeta<ThunkApiConfig>?
+], GetRejectValue<ThunkApiConfig> | undefined, string, GetSerializedErrorType<ThunkApiConfig>, {
+    arg: ThunkArg;
+    requestId: string;
+    requestStatus: 'rejected';
+    aborted: boolean;
+    condition: boolean;
+} & (({
+    rejectedWithValue: false;
+} & {
+    [K in keyof GetRejectedMeta<ThunkApiConfig>]?: undefined;
+}) | ({
+    rejectedWithValue: true;
+} & GetRejectedMeta<ThunkApiConfig>))>;
+type AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[
+    Returned,
+    string,
+    ThunkArg,
+    GetFulfilledMeta<ThunkApiConfig>?
+], Returned, string, never, {
+    arg: ThunkArg;
+    requestId: string;
+    requestStatus: 'fulfilled';
+} & GetFulfilledMeta<ThunkApiConfig>>;
+/**
+ * A type describing the return value of `createAsyncThunk`.
+ * Might be useful for wrapping `createAsyncThunk` in custom abstractions.
+ *
+ * @public
+ */
+type AsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig> & {
+    pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig>;
+    rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>;
+    fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>;
+    settled: (action: any) => action is ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> | AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>>;
+    typePrefix: string;
+};
+type OverrideThunkApiConfigs<OldConfig, NewConfig> = Id<NewConfig & Omit<OldConfig, keyof NewConfig>>;
+type CreateAsyncThunkFunction<CurriedThunkApiConfig extends AsyncThunkConfig> = {
+    /**
+     *
+     * @param typePrefix
+     * @param payloadCreator
+     * @param options
+     *
+     * @public
+     */
+    <Returned, ThunkArg = void>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, CurriedThunkApiConfig>): AsyncThunk<Returned, ThunkArg, CurriedThunkApiConfig>;
+    /**
+     *
+     * @param typePrefix
+     * @param payloadCreator
+     * @param options
+     *
+     * @public
+     */
+    <Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>, options?: AsyncThunkOptions<ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>): AsyncThunk<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;
+};
+type CreateAsyncThunk<CurriedThunkApiConfig extends AsyncThunkConfig> = CreateAsyncThunkFunction<CurriedThunkApiConfig> & {
+    withTypes<ThunkApiConfig extends AsyncThunkConfig>(): CreateAsyncThunk<OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;
+};
+declare const createAsyncThunk: CreateAsyncThunk<AsyncThunkConfig>;
+interface UnwrappableAction {
+    payload: any;
+    meta?: any;
+    error?: any;
+}
+type UnwrappedActionPayload<T extends UnwrappableAction> = Exclude<T, {
+    error: any;
+}>['payload'];
+/**
+ * @public
+ */
+declare function unwrapResult<R extends UnwrappableAction>(action: R): UnwrappedActionPayload<R>;
+type WithStrictNullChecks<True, False> = undefined extends boolean ? False : True;
+
+declare const asyncThunkSymbol: unique symbol;
+declare const asyncThunkCreator: {
+    [asyncThunkSymbol]: typeof createAsyncThunk;
+};
+type InjectIntoConfig<NewReducerPath extends string> = InjectConfig & {
+    reducerPath?: NewReducerPath;
+};
+/**
+ * The return value of `createSlice`
+ *
+ * @public
+ */
+interface Slice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {
+    /**
+     * The slice name.
+     */
+    name: Name;
+    /**
+     *  The slice reducer path.
+     */
+    reducerPath: ReducerPath;
+    /**
+     * The slice's reducer.
+     */
+    reducer: Reducer<State>;
+    /**
+     * Action creators for the types of actions that are handled by the slice
+     * reducer.
+     */
+    actions: CaseReducerActions<CaseReducers, Name>;
+    /**
+     * The individual case reducer functions that were passed in the `reducers` parameter.
+     * This enables reuse and testing if they were defined inline when calling `createSlice`.
+     */
+    caseReducers: SliceDefinedCaseReducers<CaseReducers>;
+    /**
+     * Provides access to the initial state value given to the slice.
+     * If a lazy state initializer was provided, it will be called and a fresh value returned.
+     */
+    getInitialState: () => State;
+    /**
+     * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)
+     */
+    getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State>>;
+    /**
+     * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)
+     */
+    getSelectors<RootState>(selectState: (rootState: RootState) => State): Id<SliceDefinedSelectors<State, Selectors, RootState>>;
+    /**
+     * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)
+     *
+     * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.
+     */
+    get selectors(): Id<SliceDefinedSelectors<State, Selectors, {
+        [K in ReducerPath]: State;
+    }>>;
+    /**
+     * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.
+     */
+    injectInto<NewReducerPath extends string = ReducerPath>(this: this, injectable: {
+        inject: (slice: {
+            reducerPath: string;
+            reducer: Reducer;
+        }, config?: InjectConfig) => void;
+    }, config?: InjectIntoConfig<NewReducerPath>): InjectedSlice<State, CaseReducers, Name, NewReducerPath, Selectors>;
+    /**
+     * Select the slice state, using the slice's current reducerPath.
+     *
+     * Will throw an error if slice is not found.
+     */
+    selectSlice(state: {
+        [K in ReducerPath]: State;
+    }): State;
+}
+/**
+ * A slice after being called with `injectInto(reducer)`.
+ *
+ * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.
+ */
+type InjectedSlice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> = Omit<Slice<State, CaseReducers, Name, ReducerPath, Selectors>, 'getSelectors' | 'selectors'> & {
+    /**
+     * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)
+     */
+    getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State | undefined>>;
+    /**
+     * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)
+     */
+    getSelectors<RootState>(selectState: (rootState: RootState) => State | undefined): Id<SliceDefinedSelectors<State, Selectors, RootState>>;
+    /**
+     * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)
+     *
+     * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.
+     */
+    get selectors(): Id<SliceDefinedSelectors<State, Selectors, {
+        [K in ReducerPath]?: State | undefined;
+    }>>;
+    /**
+     * Select the slice state, using the slice's current reducerPath.
+     *
+     * Returns initial state if slice is not found.
+     */
+    selectSlice(state: {
+        [K in ReducerPath]?: State | undefined;
+    }): State;
+};
+/**
+ * Options for `createSlice()`.
+ *
+ * @public
+ */
+interface CreateSliceOptions<State = any, CR extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {
+    /**
+     * The slice's name. Used to namespace the generated action types.
+     */
+    name: Name;
+    /**
+     * The slice's reducer path. Used when injecting into a combined slice reducer.
+     */
+    reducerPath?: ReducerPath;
+    /**
+     * The initial state that should be used when the reducer is called the first time. This may also be a "lazy initializer" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.
+     */
+    initialState: State | (() => State);
+    /**
+     * A mapping from action types to action-type-specific *case reducer*
+     * functions. For every action type, a matching action creator will be
+     * generated using `createAction()`.
+     */
+    reducers: ValidateSliceCaseReducers<State, CR> | ((creators: ReducerCreators<State>) => CR);
+    /**
+     * A callback that receives a *builder* object to define
+     * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.
+     *
+     *
+     * @example
+  ```ts
+  import { createAction, createSlice, Action } from '@reduxjs/toolkit'
+  const incrementBy = createAction<number>('incrementBy')
+  const decrement = createAction('decrement')
+  
+  interface RejectedAction extends Action {
+    error: Error
+  }
+  
+  function isRejectedAction(action: Action): action is RejectedAction {
+    return action.type.endsWith('rejected')
+  }
+  
+  createSlice({
+    name: 'counter',
+    initialState: 0,
+    reducers: {},
+    extraReducers: builder => {
+      builder
+        .addCase(incrementBy, (state, action) => {
+          // action is inferred correctly here if using TS
+        })
+        // You can chain calls, or have separate `builder.addCase()` lines each time
+        .addCase(decrement, (state, action) => {})
+        // You can match a range of action types
+        .addMatcher(
+          isRejectedAction,
+          // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard
+          (state, action) => {}
+        )
+        // and provide a default case if no other handlers matched
+        .addDefaultCase((state, action) => {})
+      }
+  })
+  ```
+     */
+    extraReducers?: (builder: ActionReducerMapBuilder<State>) => void;
+    /**
+     * A map of selectors that receive the slice's state and any additional arguments, and return a result.
+     */
+    selectors?: Selectors;
+}
+declare enum ReducerType {
+    reducer = "reducer",
+    reducerWithPrepare = "reducerWithPrepare",
+    asyncThunk = "asyncThunk"
+}
+type ReducerDefinition<T extends ReducerType = ReducerType> = {
+    _reducerDefinitionType: T;
+};
+type CaseReducerDefinition<S = any, A extends Action = UnknownAction> = CaseReducer<S, A> & ReducerDefinition<ReducerType.reducer>;
+/**
+ * A CaseReducer with a `prepare` method.
+ *
+ * @public
+ */
+type CaseReducerWithPrepare<State, Action extends PayloadAction> = {
+    reducer: CaseReducer<State, Action>;
+    prepare: PrepareAction<Action['payload']>;
+};
+type AsyncThunkSliceReducerConfig<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = {
+    pending?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['pending']>>;
+    rejected?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected']>>;
+    fulfilled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['fulfilled']>>;
+    settled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']>>;
+    options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>;
+};
+type AsyncThunkSliceReducerDefinition<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig> & ReducerDefinition<ReducerType.asyncThunk> & {
+    payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>;
+};
+/**
+ * Providing these as part of the config would cause circular types, so we disallow passing them
+ */
+type PreventCircular<ThunkApiConfig> = {
+    [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch' ? never : ThunkApiConfig[K];
+};
+interface AsyncThunkCreator<State, CurriedThunkApiConfig extends PreventCircular<AsyncThunkConfig> = PreventCircular<AsyncThunkConfig>> {
+    <Returned, ThunkArg = void>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, CurriedThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, CurriedThunkApiConfig>;
+    <Returned, ThunkArg, ThunkApiConfig extends PreventCircular<AsyncThunkConfig> = {}>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, ThunkApiConfig>;
+    withTypes<ThunkApiConfig extends PreventCircular<AsyncThunkConfig>>(): AsyncThunkCreator<State, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;
+}
+interface ReducerCreators<State> {
+    reducer(caseReducer: CaseReducer<State, PayloadAction>): CaseReducerDefinition<State, PayloadAction>;
+    reducer<Payload>(caseReducer: CaseReducer<State, PayloadAction<Payload>>): CaseReducerDefinition<State, PayloadAction<Payload>>;
+    asyncThunk: AsyncThunkCreator<State>;
+    preparedReducer<Prepare extends PrepareAction<any>>(prepare: Prepare, reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>): {
+        _reducerDefinitionType: ReducerType.reducerWithPrepare;
+        prepare: Prepare;
+        reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>;
+    };
+}
+/**
+ * The type describing a slice's `reducers` option.
+ *
+ * @public
+ */
+type SliceCaseReducers<State> = Record<string, ReducerDefinition> | Record<string, CaseReducer<State, PayloadAction<any>> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>>;
+/**
+ * The type describing a slice's `selectors` option.
+ */
+type SliceSelectors<State> = {
+    [K: string]: (sliceState: State, ...args: any[]) => any;
+};
+type SliceActionType<SliceName extends string, ActionName extends keyof any> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string;
+/**
+ * Derives the slice's `actions` property from the `reducers` options
+ *
+ * @public
+ */
+type CaseReducerActions<CaseReducers extends SliceCaseReducers<any>, SliceName extends string> = {
+    [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends {
+        prepare: any;
+    } ? ActionCreatorForCaseReducerWithPrepare<Definition, SliceActionType<SliceName, Type>> : Definition extends AsyncThunkSliceReducerDefinition<any, infer ThunkArg, infer Returned, infer ThunkApiConfig> ? AsyncThunk<Returned, ThunkArg, ThunkApiConfig> : Definition extends {
+        reducer: any;
+    } ? ActionCreatorForCaseReducer<Definition['reducer'], SliceActionType<SliceName, Type>> : ActionCreatorForCaseReducer<Definition, SliceActionType<SliceName, Type>> : never;
+};
+/**
+ * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`
+ *
+ * @internal
+ */
+type ActionCreatorForCaseReducerWithPrepare<CR extends {
+    prepare: any;
+}, Type extends string> = _ActionCreatorWithPreparedPayload<CR['prepare'], Type>;
+/**
+ * Get a `PayloadActionCreator` type for a passed `CaseReducer`
+ *
+ * @internal
+ */
+type ActionCreatorForCaseReducer<CR, Type extends string> = CR extends (state: any, action: infer Action) => any ? Action extends {
+    payload: infer P;
+} ? PayloadActionCreator<P, Type> : ActionCreatorWithoutPayload<Type> : ActionCreatorWithoutPayload<Type>;
+/**
+ * Extracts the CaseReducers out of a `reducers` object, even if they are
+ * tested into a `CaseReducerWithPrepare`.
+ *
+ * @internal
+ */
+type SliceDefinedCaseReducers<CaseReducers extends SliceCaseReducers<any>> = {
+    [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends AsyncThunkSliceReducerDefinition<any, any, any> ? Id<Pick<Required<Definition>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>> : Definition extends {
+        reducer: infer Reducer;
+    } ? Reducer : Definition : never;
+};
+type RemappedSelector<S extends Selector, NewState> = S extends Selector<any, infer R, infer P> ? Selector<NewState, R, P> & {
+    unwrapped: S;
+} : never;
+/**
+ * Extracts the final selector type from the `selectors` object.
+ *
+ * Removes the `string` index signature from the default value.
+ */
+type SliceDefinedSelectors<State, Selectors extends SliceSelectors<State>, RootState> = {
+    [K in keyof Selectors as string extends K ? never : K]: RemappedSelector<Selectors[K], RootState>;
+};
+/**
+ * Used on a SliceCaseReducers object.
+ * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that
+ * the `reducer` and the `prepare` function use the same type of `payload`.
+ *
+ * Might do additional such checks in the future.
+ *
+ * This type is only ever useful if you want to write your own wrapper around
+ * `createSlice`. Please don't use it otherwise!
+ *
+ * @public
+ */
+type ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & {
+    [T in keyof ACR]: ACR[T] extends {
+        reducer(s: S, action?: infer A): any;
+    } ? {
+        prepare(...a: never[]): Omit<A, 'type'>;
+    } : {};
+};
+interface BuildCreateSliceConfig {
+    creators?: {
+        asyncThunk?: typeof asyncThunkCreator;
+    };
+}
+declare function buildCreateSlice({ creators }?: BuildCreateSliceConfig): <State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>) => Slice<State, CaseReducers, Name, ReducerPath, Selectors>;
+/**
+ * A function that accepts an initial state, an object full of reducer
+ * functions, and a "slice name", and automatically generates
+ * action creators and action types that correspond to the
+ * reducers and state.
+ *
+ * @public
+ */
+declare const createSlice: <State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>) => Slice<State, CaseReducers, Name, ReducerPath, Selectors>;
+
+type AnyFunction = (...args: any) => any;
+type AnyCreateSelectorFunction = CreateSelectorFunction<(<F extends AnyFunction>(f: F) => F), <F extends AnyFunction>(f: F) => F>;
+type GetSelectorsOptions = {
+    createSelector?: AnyCreateSelectorFunction;
+};
+
+/**
+ * @public
+ */
+type EntityId = number | string;
+/**
+ * @public
+ */
+type Comparer<T> = (a: T, b: T) => number;
+/**
+ * @public
+ */
+type IdSelector<T, Id extends EntityId> = (model: T) => Id;
+/**
+ * @public
+ */
+type Update<T, Id extends EntityId> = {
+    id: Id;
+    changes: Partial<T>;
+};
+/**
+ * @public
+ */
+interface EntityState<T, Id extends EntityId> {
+    ids: Id[];
+    entities: Record<Id, T>;
+}
+/**
+ * @public
+ */
+interface EntityAdapterOptions<T, Id extends EntityId> {
+    selectId?: IdSelector<T, Id>;
+    sortComparer?: false | Comparer<T>;
+}
+type PreventAny<S, T, Id extends EntityId> = CastAny<S, EntityState<T, Id>>;
+type DraftableEntityState<T, Id extends EntityId> = EntityState<T, Id> | Draft<EntityState<T, Id>>;
+/**
+ * @public
+ */
+interface EntityStateAdapter<T, Id extends EntityId> {
+    addOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entity: T): S;
+    addOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, action: PayloadAction<T>): S;
+    addMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: readonly T[] | Record<Id, T>): S;
+    addMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: PayloadAction<readonly T[] | Record<Id, T>>): S;
+    setOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entity: T): S;
+    setOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, action: PayloadAction<T>): S;
+    setMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: readonly T[] | Record<Id, T>): S;
+    setMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: PayloadAction<readonly T[] | Record<Id, T>>): S;
+    setAll<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: readonly T[] | Record<Id, T>): S;
+    setAll<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: PayloadAction<readonly T[] | Record<Id, T>>): S;
+    removeOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, key: Id): S;
+    removeOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, key: PayloadAction<Id>): S;
+    removeMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, keys: readonly Id[]): S;
+    removeMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, keys: PayloadAction<readonly Id[]>): S;
+    removeAll<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>): S;
+    updateOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, update: Update<T, Id>): S;
+    updateOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, update: PayloadAction<Update<T, Id>>): S;
+    updateMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, updates: ReadonlyArray<Update<T, Id>>): S;
+    updateMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, updates: PayloadAction<ReadonlyArray<Update<T, Id>>>): S;
+    upsertOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entity: T): S;
+    upsertOne<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entity: PayloadAction<T>): S;
+    upsertMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: readonly T[] | Record<Id, T>): S;
+    upsertMany<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>, entities: PayloadAction<readonly T[] | Record<Id, T>>): S;
+}
+/**
+ * @public
+ */
+interface EntitySelectors<T, V, IdType extends EntityId> {
+    selectIds: (state: V) => IdType[];
+    selectEntities: (state: V) => Record<IdType, T>;
+    selectAll: (state: V) => T[];
+    selectTotal: (state: V) => number;
+    selectById: (state: V, id: IdType) => Id<UncheckedIndexedAccess<T>>;
+}
+/**
+ * @public
+ */
+interface EntityStateFactory<T, Id extends EntityId> {
+    getInitialState(state?: undefined, entities?: Record<Id, T> | readonly T[]): EntityState<T, Id>;
+    getInitialState<S extends object>(state: S, entities?: Record<Id, T> | readonly T[]): EntityState<T, Id> & S;
+}
+/**
+ * @public
+ */
+interface EntityAdapter<T, Id extends EntityId> extends EntityStateAdapter<T, Id>, EntityStateFactory<T, Id>, Required<EntityAdapterOptions<T, Id>> {
+    getSelectors(selectState?: undefined, options?: GetSelectorsOptions): EntitySelectors<T, EntityState<T, Id>, Id>;
+    getSelectors<V>(selectState: (state: V) => EntityState<T, Id>, options?: GetSelectorsOptions): EntitySelectors<T, V, Id>;
+}
+
+declare function createEntityAdapter<T, Id extends EntityId>(options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>): EntityAdapter<T, Id>;
+declare function createEntityAdapter<T extends {
+    id: EntityId;
+}>(options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>): EntityAdapter<T, T['id']>;
+
+/** @public */
+type ActionMatchingAnyOf<Matchers extends Matcher<any>[]> = ActionFromMatcher<Matchers[number]>;
+/** @public */
+type ActionMatchingAllOf<Matchers extends Matcher<any>[]> = UnionToIntersection<ActionMatchingAnyOf<Matchers>>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action matches any one of the supplied type guards or action
+ * creators.
+ *
+ * @param matchers The type guards or action creators to match against.
+ *
+ * @public
+ */
+declare function isAnyOf<Matchers extends Matcher<any>[]>(...matchers: Matchers): (action: any) => action is ActionMatchingAnyOf<Matchers>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action matches all of the supplied type guards or action
+ * creators.
+ *
+ * @param matchers The type guards or action creators to match against.
+ *
+ * @public
+ */
+declare function isAllOf<Matchers extends Matcher<any>[]>(...matchers: Matchers): (action: any) => action is ActionMatchingAllOf<Matchers>;
+type UnknownAsyncThunkPendingAction = ReturnType<AsyncThunkPendingActionCreator<unknown>>;
+type PendingActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is pending.
+ *
+ * @public
+ */
+declare function isPending(): (action: any) => action is UnknownAsyncThunkPendingAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is pending.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is PendingActionFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a pending thunk action
+ * @public
+ */
+declare function isPending(action: any): action is UnknownAsyncThunkPendingAction;
+type UnknownAsyncThunkRejectedAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;
+type RejectedActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is rejected.
+ *
+ * @public
+ */
+declare function isRejected(): (action: any) => action is UnknownAsyncThunkRejectedAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is rejected.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedActionFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a rejected thunk action
+ * @public
+ */
+declare function isRejected(action: any): action is UnknownAsyncThunkRejectedAction;
+type RejectedWithValueActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']> & (T extends AsyncThunk<any, any, {
+    rejectValue: infer RejectedValue;
+}> ? {
+    payload: RejectedValue;
+} : unknown);
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is rejected with value.
+ *
+ * @public
+ */
+declare function isRejectedWithValue(): (action: any) => action is UnknownAsyncThunkRejectedAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is rejected with value.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedWithValueActionFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a rejected thunk action with value
+ * @public
+ */
+declare function isRejectedWithValue(action: any): action is UnknownAsyncThunkRejectedAction;
+type UnknownAsyncThunkFulfilledAction = ReturnType<AsyncThunkFulfilledActionCreator<unknown, unknown>>;
+type FulfilledActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['fulfilled']>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is fulfilled.
+ *
+ * @public
+ */
+declare function isFulfilled(): (action: any) => action is UnknownAsyncThunkFulfilledAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is fulfilled.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is FulfilledActionFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a fulfilled thunk action
+ * @public
+ */
+declare function isFulfilled(action: any): action is UnknownAsyncThunkFulfilledAction;
+type UnknownAsyncThunkAction = UnknownAsyncThunkPendingAction | UnknownAsyncThunkRejectedAction | UnknownAsyncThunkFulfilledAction;
+type AnyAsyncThunk = {
+    pending: {
+        match: (action: any) => action is any;
+    };
+    fulfilled: {
+        match: (action: any) => action is any;
+    };
+    rejected: {
+        match: (action: any) => action is any;
+    };
+};
+type ActionsFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']> | ActionFromMatcher<T['fulfilled']> | ActionFromMatcher<T['rejected']>;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator.
+ *
+ * @public
+ */
+declare function isAsyncThunkAction(): (action: any) => action is UnknownAsyncThunkAction;
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+declare function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is ActionsFromAsyncThunk<AsyncThunks[number]>;
+/**
+ * Tests if `action` is a thunk action
+ * @public
+ */
+declare function isAsyncThunkAction(action: any): action is UnknownAsyncThunkAction;
+
+/**
+ *
+ * @public
+ */
+declare let nanoid: (size?: number) => string;
+
+declare class TaskAbortError implements SerializedError {
+    code: string | undefined;
+    name: string;
+    message: string;
+    constructor(code: string | undefined);
+}
+
+/**
+ * Types copied from RTK
+ */
+/** @internal */
+type TypedActionCreatorWithMatchFunction<Type extends string> = TypedActionCreator<Type> & {
+    match: MatchFunction<any>;
+};
+/** @internal */
+type AnyListenerPredicate<State> = (action: UnknownAction, currentState: State, originalState: State) => boolean;
+/** @public */
+type ListenerPredicate<ActionType extends Action, State> = (action: UnknownAction, currentState: State, originalState: State) => action is ActionType;
+/** @public */
+interface ConditionFunction<State> {
+    (predicate: AnyListenerPredicate<State>, timeout?: number): Promise<boolean>;
+    (predicate: AnyListenerPredicate<State>, timeout?: number): Promise<boolean>;
+    (predicate: () => boolean, timeout?: number): Promise<boolean>;
+}
+/** @internal */
+type MatchFunction<T> = (v: any) => v is T;
+/** @public */
+interface ForkedTaskAPI {
+    /**
+     * Returns a promise that resolves when `waitFor` resolves or
+     * rejects if the task or the parent listener has been cancelled or is completed.
+     */
+    pause<W>(waitFor: Promise<W>): Promise<W>;
+    /**
+     * Returns a promise that resolves after `timeoutMs` or
+     * rejects if the task or the parent listener has been cancelled or is completed.
+     * @param timeoutMs
+     */
+    delay(timeoutMs: number): Promise<void>;
+    /**
+     * An abort signal whose `aborted` property is set to `true`
+     * if the task execution is either aborted or completed.
+     * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
+     */
+    signal: AbortSignal;
+}
+/** @public */
+interface AsyncTaskExecutor<T> {
+    (forkApi: ForkedTaskAPI): Promise<T>;
+}
+/** @public */
+interface SyncTaskExecutor<T> {
+    (forkApi: ForkedTaskAPI): T;
+}
+/** @public */
+type ForkedTaskExecutor<T> = AsyncTaskExecutor<T> | SyncTaskExecutor<T>;
+/** @public */
+type TaskResolved<T> = {
+    readonly status: 'ok';
+    readonly value: T;
+};
+/** @public */
+type TaskRejected = {
+    readonly status: 'rejected';
+    readonly error: unknown;
+};
+/** @public */
+type TaskCancelled = {
+    readonly status: 'cancelled';
+    readonly error: TaskAbortError;
+};
+/** @public */
+type TaskResult<Value> = TaskResolved<Value> | TaskRejected | TaskCancelled;
+/** @public */
+interface ForkedTask<T> {
+    /**
+     * A promise that resolves when the task is either completed or cancelled or rejects
+     * if parent listener execution is cancelled or completed.
+     *
+     * ### Example
+     * ```ts
+     * const result = await fork(async (forkApi) => Promise.resolve(4)).result
+     *
+     * if(result.status === 'ok') {
+     *   console.log(result.value) // logs 4
+     * }}
+     * ```
+     */
+    result: Promise<TaskResult<T>>;
+    /**
+     * Cancel task if it is in progress or not yet started,
+     * it is noop otherwise.
+     */
+    cancel(): void;
+}
+/** @public */
+interface ForkOptions {
+    /**
+     * If true, causes the parent task to not be marked as complete until
+     * all autoJoined forks have completed or failed.
+     */
+    autoJoin: boolean;
+}
+/** @public */
+interface ListenerEffectAPI<State, DispatchType extends Dispatch, ExtraArgument = unknown> extends MiddlewareAPI<DispatchType, State> {
+    /**
+     * Returns the store state as it existed when the action was originally dispatched, _before_ the reducers ran.
+     *
+     * ### Synchronous invocation
+     *
+     * This function can **only** be invoked **synchronously**, it throws error otherwise.
+     *
+     * @example
+     *
+     * ```ts
+     * middleware.startListening({
+     *  predicate: () => true,
+     *  async effect(_, { getOriginalState }) {
+     *    getOriginalState(); // sync: OK!
+     *
+     *    setTimeout(getOriginalState, 0); // async: throws Error
+     *
+     *    await Promise().resolve();
+     *
+     *    getOriginalState() // async: throws Error
+     *  }
+     * })
+     * ```
+     */
+    getOriginalState: () => State;
+    /**
+     * Removes the listener entry from the middleware and prevent future instances of the listener from running.
+     *
+     * It does **not** cancel any active instances.
+     */
+    unsubscribe(): void;
+    /**
+     * It will subscribe a listener if it was previously removed, noop otherwise.
+     */
+    subscribe(): void;
+    /**
+     * Returns a promise that resolves when the input predicate returns `true` or
+     * rejects if the listener has been cancelled or is completed.
+     *
+     * The return value is `true` if the predicate succeeds or `false` if a timeout is provided and expires first.
+     *
+     * ### Example
+     *
+     * ```ts
+     * const updateBy = createAction<number>('counter/updateBy');
+     *
+     * middleware.startListening({
+     *  actionCreator: updateBy,
+     *  async effect(_, { condition }) {
+     *    // wait at most 3s for `updateBy` actions.
+     *    if(await condition(updateBy.match, 3_000)) {
+     *      // `updateBy` has been dispatched twice in less than 3s.
+     *    }
+     *  }
+     * })
+     * ```
+     */
+    condition: ConditionFunction<State>;
+    /**
+     * Returns a promise that resolves when the input predicate returns `true` or
+     * rejects if the listener has been cancelled or is completed.
+     *
+     * The return value is the `[action, currentState, previousState]` combination that the predicate saw as arguments.
+     *
+     * The promise resolves to null if a timeout is provided and expires first,
+     *
+     * ### Example
+     *
+     * ```ts
+     * const updateBy = createAction<number>('counter/updateBy');
+     *
+     * middleware.startListening({
+     *  actionCreator: updateBy,
+     *  async effect(_, { take }) {
+     *    const [{ payload }] =  await take(updateBy.match);
+     *    console.log(payload); // logs 5;
+     *  }
+     * })
+     *
+     * store.dispatch(updateBy(5));
+     * ```
+     */
+    take: TakePattern<State>;
+    /**
+     * Cancels all other running instances of this same listener except for the one that made this call.
+     */
+    cancelActiveListeners: () => void;
+    /**
+     * Cancels the instance of this listener that made this call.
+     */
+    cancel: () => void;
+    /**
+     * Throws a `TaskAbortError` if this listener has been cancelled
+     */
+    throwIfCancelled: () => void;
+    /**
+     * An abort signal whose `aborted` property is set to `true`
+     * if the listener execution is either aborted or completed.
+     * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
+     */
+    signal: AbortSignal;
+    /**
+     * Returns a promise that resolves after `timeoutMs` or
+     * rejects if the listener has been cancelled or is completed.
+     */
+    delay(timeoutMs: number): Promise<void>;
+    /**
+     * Queues in the next microtask the execution of a task.
+     * @param executor
+     * @param options
+     */
+    fork<T>(executor: ForkedTaskExecutor<T>, options?: ForkOptions): ForkedTask<T>;
+    /**
+     * Returns a promise that resolves when `waitFor` resolves or
+     * rejects if the listener has been cancelled or is completed.
+     * @param promise
+     */
+    pause<M>(promise: Promise<M>): Promise<M>;
+    extra: ExtraArgument;
+}
+/** @public */
+type ListenerEffect<ActionType extends Action, State, DispatchType extends Dispatch, ExtraArgument = unknown> = (action: ActionType, api: ListenerEffectAPI<State, DispatchType, ExtraArgument>) => void | Promise<void>;
+/**
+ * @public
+ * Additional infos regarding the error raised.
+ */
+interface ListenerErrorInfo {
+    /**
+     * Which function has generated the exception.
+     */
+    raisedBy: 'effect' | 'predicate';
+}
+/**
+ * @public
+ * Gets notified with synchronous and asynchronous errors raised by `listeners` or `predicates`.
+ * @param error The thrown error.
+ * @param errorInfo Additional information regarding the thrown error.
+ */
+interface ListenerErrorHandler {
+    (error: unknown, errorInfo: ListenerErrorInfo): void;
+}
+/** @public */
+interface CreateListenerMiddlewareOptions<ExtraArgument = unknown> {
+    extra?: ExtraArgument;
+    /**
+     * Receives synchronous errors that are raised by `listener` and `listenerOption.predicate`.
+     */
+    onError?: ListenerErrorHandler;
+}
+/** @public */
+type ListenerMiddleware<State = unknown, DispatchType extends ThunkDispatch<State, unknown, Action> = ThunkDispatch<State, unknown, UnknownAction>, ExtraArgument = unknown> = Middleware<{
+    (action: Action<'listenerMiddleware/add'>): UnsubscribeListener;
+}, State, DispatchType>;
+/** @public */
+interface ListenerMiddlewareInstance<StateType = unknown, DispatchType extends ThunkDispatch<StateType, unknown, Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown> {
+    middleware: ListenerMiddleware<StateType, DispatchType, ExtraArgument>;
+    startListening: AddListenerOverloads<UnsubscribeListener, StateType, DispatchType, ExtraArgument> & TypedStartListening<StateType, DispatchType, ExtraArgument>;
+    stopListening: RemoveListenerOverloads<StateType, DispatchType> & TypedStopListening<StateType, DispatchType>;
+    /**
+     * Unsubscribes all listeners, cancels running listeners and tasks.
+     */
+    clearListeners: () => void;
+}
+/**
+ * API Function Overloads
+ */
+/** @public */
+type TakePatternOutputWithoutTimeout<State, Predicate extends AnyListenerPredicate<State>> = Predicate extends MatchFunction<infer ActionType> ? Promise<[ActionType, State, State]> : Promise<[UnknownAction, State, State]>;
+/** @public */
+type TakePatternOutputWithTimeout<State, Predicate extends AnyListenerPredicate<State>> = Predicate extends MatchFunction<infer ActionType> ? Promise<[ActionType, State, State] | null> : Promise<[UnknownAction, State, State] | null>;
+/** @public */
+interface TakePattern<State> {
+    <Predicate extends AnyListenerPredicate<State>>(predicate: Predicate): TakePatternOutputWithoutTimeout<State, Predicate>;
+    <Predicate extends AnyListenerPredicate<State>>(predicate: Predicate, timeout: number): TakePatternOutputWithTimeout<State, Predicate>;
+    <Predicate extends AnyListenerPredicate<State>>(predicate: Predicate, timeout?: number | undefined): TakePatternOutputWithTimeout<State, Predicate>;
+}
+/** @public */
+interface UnsubscribeListenerOptions {
+    cancelActive?: true;
+}
+/** @public */
+type UnsubscribeListener = (unsubscribeOptions?: UnsubscribeListenerOptions) => void;
+/**
+ * @public
+ * The possible overloads and options for defining a listener. The return type of each function is specified as a generic arg, so the overloads can be reused for multiple different functions
+ */
+type AddListenerOverloads<Return, StateType = unknown, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown, AdditionalOptions = unknown> = {
+    /** Accepts a "listener predicate" that is also a TS type predicate for the action*/
+    <MiddlewareActionType extends UnknownAction, ListenerPredicateType extends ListenerPredicate<MiddlewareActionType, StateType>>(options: {
+        actionCreator?: never;
+        type?: never;
+        matcher?: never;
+        predicate: ListenerPredicateType;
+        effect: ListenerEffect<ListenerPredicateGuardedActionType<ListenerPredicateType>, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+    /** Accepts an RTK action creator, like `incrementByAmount` */
+    <ActionCreatorType extends TypedActionCreatorWithMatchFunction<any>>(options: {
+        actionCreator: ActionCreatorType;
+        type?: never;
+        matcher?: never;
+        predicate?: never;
+        effect: ListenerEffect<ReturnType<ActionCreatorType>, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+    /** Accepts a specific action type string */
+    <T extends string>(options: {
+        actionCreator?: never;
+        type: T;
+        matcher?: never;
+        predicate?: never;
+        effect: ListenerEffect<Action<T>, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+    /** Accepts an RTK matcher function, such as `incrementByAmount.match` */
+    <MatchFunctionType extends MatchFunction<UnknownAction>>(options: {
+        actionCreator?: never;
+        type?: never;
+        matcher: MatchFunctionType;
+        predicate?: never;
+        effect: ListenerEffect<GuardedType<MatchFunctionType>, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+    /** Accepts a "listener predicate" that just returns a boolean, no type assertion */
+    <ListenerPredicateType extends AnyListenerPredicate<StateType>>(options: {
+        actionCreator?: never;
+        type?: never;
+        matcher?: never;
+        predicate: ListenerPredicateType;
+        effect: ListenerEffect<UnknownAction, StateType, DispatchType, ExtraArgument>;
+    } & AdditionalOptions): Return;
+};
+/** @public */
+type RemoveListenerOverloads<StateType = unknown, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown> = AddListenerOverloads<boolean, StateType, DispatchType, ExtraArgument, UnsubscribeListenerOptions>;
+/**
+ * A "pre-typed" version of `addListenerAction`, so the listener args are well-typed
+ *
+ * @public
+ */
+type TypedAddListener<StateType, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown, Payload = ListenerEntry<StateType, DispatchType>, T extends string = 'listenerMiddleware/add'> = BaseActionCreator<Payload, T> & AddListenerOverloads<PayloadAction<Payload, T>, StateType, DispatchType, ExtraArgument> & {
+    /**
+     * Creates a "pre-typed" version of `addListener`
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every `addListener` call.
+     *
+     * @returns A pre-typed `addListener` with the state, dispatch and extra types already defined.
+     *
+     * @example
+     * ```ts
+     * import { addListener } from '@reduxjs/toolkit'
+     *
+     * export const addAppListener = addListener.withTypes<RootState, AppDispatch, ExtraArguments>()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <OverrideStateType extends StateType, OverrideDispatchType extends Dispatch = ThunkDispatch<OverrideStateType, unknown, UnknownAction>, OverrideExtraArgument = unknown>() => TypedAddListener<OverrideStateType, OverrideDispatchType, OverrideExtraArgument>;
+};
+/**
+ * A "pre-typed" version of `removeListenerAction`, so the listener args are well-typed
+ *
+ * @public
+ */
+type TypedRemoveListener<StateType, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown, Payload = ListenerEntry<StateType, DispatchType>, T extends string = 'listenerMiddleware/remove'> = BaseActionCreator<Payload, T> & AddListenerOverloads<PayloadAction<Payload, T>, StateType, DispatchType, ExtraArgument, UnsubscribeListenerOptions> & {
+    /**
+     * Creates a "pre-typed" version of `removeListener`
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every `removeListener` call.
+     *
+     * @returns A pre-typed `removeListener` with the state, dispatch and extra
+     * types already defined.
+     *
+     * @example
+     * ```ts
+     * import { removeListener } from '@reduxjs/toolkit'
+     *
+     * export const removeAppListener = removeListener.withTypes<
+     *   RootState,
+     *   AppDispatch,
+     *   ExtraArguments
+     * >()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <OverrideStateType extends StateType, OverrideDispatchType extends Dispatch = ThunkDispatch<OverrideStateType, unknown, UnknownAction>, OverrideExtraArgument = unknown>() => TypedRemoveListener<OverrideStateType, OverrideDispatchType, OverrideExtraArgument>;
+};
+/**
+ * A "pre-typed" version of `middleware.startListening`, so the listener args are well-typed
+ *
+ * @public
+ */
+type TypedStartListening<StateType, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown> = AddListenerOverloads<UnsubscribeListener, StateType, DispatchType, ExtraArgument> & {
+    /**
+     * Creates a "pre-typed" version of
+     * {@linkcode ListenerMiddlewareInstance.startListening startListening}
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every
+     * {@linkcode ListenerMiddlewareInstance.startListening startListening} call.
+     *
+     * @returns A pre-typed `startListening` with the state, dispatch and extra types already defined.
+     *
+     * @example
+     * ```ts
+     * import { createListenerMiddleware } from '@reduxjs/toolkit'
+     *
+     * const listenerMiddleware = createListenerMiddleware()
+     *
+     * export const startAppListening = listenerMiddleware.startListening.withTypes<
+     *   RootState,
+     *   AppDispatch,
+     *   ExtraArguments
+     * >()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <OverrideStateType extends StateType, OverrideDispatchType extends Dispatch = ThunkDispatch<OverrideStateType, unknown, UnknownAction>, OverrideExtraArgument = unknown>() => TypedStartListening<OverrideStateType, OverrideDispatchType, OverrideExtraArgument>;
+};
+/**
+ * A "pre-typed" version of `middleware.stopListening`, so the listener args are well-typed
+ *
+ * @public
+ */
+type TypedStopListening<StateType, DispatchType extends Dispatch = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown> = RemoveListenerOverloads<StateType, DispatchType, ExtraArgument> & {
+    /**
+     * Creates a "pre-typed" version of
+     * {@linkcode ListenerMiddlewareInstance.stopListening stopListening}
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every
+     * {@linkcode ListenerMiddlewareInstance.stopListening stopListening} call.
+     *
+     * @returns A pre-typed `stopListening` with the state, dispatch and extra types already defined.
+     *
+     * @example
+     * ```ts
+     * import { createListenerMiddleware } from '@reduxjs/toolkit'
+     *
+     * const listenerMiddleware = createListenerMiddleware()
+     *
+     * export const stopAppListening = listenerMiddleware.stopListening.withTypes<
+     *   RootState,
+     *   AppDispatch,
+     *   ExtraArguments
+     * >()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <OverrideStateType extends StateType, OverrideDispatchType extends Dispatch = ThunkDispatch<OverrideStateType, unknown, UnknownAction>, OverrideExtraArgument = unknown>() => TypedStopListening<OverrideStateType, OverrideDispatchType, OverrideExtraArgument>;
+};
+/**
+ * Internal Types
+ */
+/** @internal An single listener entry */
+type ListenerEntry<State = unknown, DispatchType extends Dispatch = Dispatch> = {
+    id: string;
+    effect: ListenerEffect<any, State, DispatchType>;
+    unsubscribe: () => void;
+    pending: Set<AbortController>;
+    type?: string;
+    predicate: ListenerPredicate<UnknownAction, State>;
+};
+/**
+ * Utility Types
+ */
+/** @public */
+type GuardedType<T> = T extends (x: any, ...args: any[]) => x is infer T ? T : never;
+/** @public */
+type ListenerPredicateGuardedActionType<T> = T extends ListenerPredicate<infer ActionType, any> ? ActionType : never;
+
+/**
+ * @public
+ */
+declare const addListener: TypedAddListener<unknown>;
+/**
+ * @public
+ */
+declare const clearAllListeners: ActionCreatorWithoutPayload<"listenerMiddleware/removeAll">;
+/**
+ * @public
+ */
+declare const removeListener: TypedRemoveListener<unknown>;
+/**
+ * @public
+ */
+declare const createListenerMiddleware: <StateType = unknown, DispatchType extends Dispatch<Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown>(middlewareOptions?: CreateListenerMiddlewareOptions<ExtraArgument>) => ListenerMiddlewareInstance<StateType, DispatchType, ExtraArgument>;
+
+type MiddlewareApiConfig = {
+    state?: unknown;
+    dispatch?: Dispatch;
+};
+type GetDispatchType<MiddlewareApiConfig> = MiddlewareApiConfig extends {
+    dispatch: infer DispatchType;
+} ? FallbackIfUnknown<DispatchType, Dispatch> : Dispatch;
+type AddMiddleware<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {
+    (...middlewares: Middleware<any, State, DispatchType>[]): void;
+    withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): AddMiddleware<GetState<MiddlewareConfig>, GetDispatchType<MiddlewareConfig>>;
+};
+type WithMiddleware<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = BaseActionCreator<Middleware<any, State, DispatchType>[], 'dynamicMiddleware/add', {
+    instanceId: string;
+}> & {
+    <Middlewares extends Middleware<any, State, DispatchType>[]>(...middlewares: Middlewares): PayloadAction<Middlewares, 'dynamicMiddleware/add', {
+        instanceId: string;
+    }>;
+    withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): WithMiddleware<GetState<MiddlewareConfig>, GetDispatchType<MiddlewareConfig>>;
+};
+interface DynamicDispatch {
+    <Middlewares extends Middleware<any>[]>(action: PayloadAction<Middlewares, 'dynamicMiddleware/add'>): ExtractDispatchExtensions<Middlewares> & this;
+}
+type DynamicMiddleware<State = unknown, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = Middleware<DynamicDispatch, State, DispatchType>;
+type DynamicMiddlewareInstance<State = unknown, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {
+    middleware: DynamicMiddleware<State, DispatchType>;
+    addMiddleware: AddMiddleware<State, DispatchType>;
+    withMiddleware: WithMiddleware<State, DispatchType>;
+    instanceId: string;
+};
+
+declare const createDynamicMiddleware: <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>() => DynamicMiddlewareInstance<State, DispatchType>;
+
+/**
+ * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js
+ *
+ * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes
+ * during build.
+ * @param {number} code
+ */
+declare function formatProdErrorMessage(code: number): string;
+
+export { type ActionCreatorInvariantMiddlewareOptions, type ActionCreatorWithNonInferrablePayload, type ActionCreatorWithOptionalPayload, type ActionCreatorWithPayload, type ActionCreatorWithPreparedPayload, type ActionCreatorWithoutPayload, type ActionMatchingAllOf, type ActionMatchingAnyOf, type ActionReducerMapBuilder, type Actions, type AddMiddleware, type AnyListenerPredicate, type AsyncTaskExecutor, type AsyncThunk, type AsyncThunkAction, type AsyncThunkOptions, type AsyncThunkPayloadCreator, type AsyncThunkPayloadCreatorReturnValue, type AutoBatchOptions, type CaseReducer, type CaseReducerActions, type CaseReducerWithPrepare, type CaseReducers, type CombinedSliceReducer, type Comparer, type ConfigureStoreOptions, type CreateAsyncThunkFunction, type CreateListenerMiddlewareOptions, type CreateSliceOptions, type DevToolsEnhancerOptions, type DynamicDispatch, type DynamicMiddlewareInstance, type EnhancedStore, type EntityAdapter, type EntityId, type EntitySelectors, type EntityState, type EntityStateAdapter, type ForkedTask, type ForkedTaskAPI, type ForkedTaskExecutor, type GetDispatchType as GetDispatch, type GetState, type GetThunkAPI, type IdSelector, type ImmutableStateInvariantMiddlewareOptions, type ListenerEffect, type ListenerEffectAPI, type ListenerErrorHandler, type ListenerMiddleware, type ListenerMiddlewareInstance, type MiddlewareApiConfig, type PayloadAction, type PayloadActionCreator, type PrepareAction, type ReducerCreators, ReducerType, SHOULD_AUTOBATCH, type SafePromise, type SerializableStateInvariantMiddlewareOptions, type SerializedError, type Slice, type SliceCaseReducers, type SliceSelectors, type SyncTaskExecutor, type ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions, TaskAbortError, type TaskCancelled, type TaskRejected, type TaskResolved, type TaskResult, Tuple, type TypedAddListener, type TypedRemoveListener, type TypedStartListening, type TypedStopListening, type UnsubscribeListener, type UnsubscribeListenerOptions, type Update, type ValidateSliceCaseReducers, type WithSlice, addListener, asyncThunkCreator, autoBatchEnhancer, buildCreateSlice, clearAllListeners, combineSlices, configureStore, createAction, createActionCreatorInvariantMiddleware, createAsyncThunk, createDraftSafeSelector, createDraftSafeSelectorCreator, createDynamicMiddleware, createEntityAdapter, createImmutableStateInvariantMiddleware, createListenerMiddleware, createReducer, createSerializableStateInvariantMiddleware, createSlice, findNonSerializableValue, formatProdErrorMessage, isActionCreator, isAllOf, isAnyOf, isAsyncThunkAction, isFSA as isFluxStandardAction, isFulfilled, isImmutableDefault, isPending, isPlain, isRejected, isRejectedWithValue, miniSerializeError, nanoid, prepareAutoBatched, removeListener, unwrapResult };
Index: node_modules/@reduxjs/toolkit/dist/query/cjs/index.js
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+'use strict'
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./rtk-query.production.min.cjs')
+} else {
+  module.exports = require('./rtk-query.development.cjs')
+}
Index: node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.development.cjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2925 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/query/index.ts
+var query_exports = {};
+__export(query_exports, {
+  NamedSchemaError: () => NamedSchemaError,
+  QueryStatus: () => QueryStatus,
+  _NEVER: () => _NEVER,
+  buildCreateApi: () => buildCreateApi,
+  copyWithStructuralSharing: () => copyWithStructuralSharing,
+  coreModule: () => coreModule,
+  coreModuleName: () => coreModuleName,
+  createApi: () => createApi,
+  defaultSerializeQueryArgs: () => defaultSerializeQueryArgs,
+  fakeBaseQuery: () => fakeBaseQuery,
+  fetchBaseQuery: () => fetchBaseQuery,
+  retry: () => retry,
+  setupListeners: () => setupListeners,
+  skipToken: () => skipToken
+});
+module.exports = __toCommonJS(query_exports);
+
+// src/query/core/apiState.ts
+var QueryStatus = /* @__PURE__ */ ((QueryStatus2) => {
+  QueryStatus2["uninitialized"] = "uninitialized";
+  QueryStatus2["pending"] = "pending";
+  QueryStatus2["fulfilled"] = "fulfilled";
+  QueryStatus2["rejected"] = "rejected";
+  return QueryStatus2;
+})(QueryStatus || {});
+function getRequestStatusFlags(status) {
+  return {
+    status,
+    isUninitialized: status === "uninitialized" /* uninitialized */,
+    isLoading: status === "pending" /* pending */,
+    isSuccess: status === "fulfilled" /* fulfilled */,
+    isError: status === "rejected" /* rejected */
+  };
+}
+
+// src/query/core/rtkImports.ts
+var import_toolkit = require("@reduxjs/toolkit");
+
+// src/query/utils/copyWithStructuralSharing.ts
+var isPlainObject2 = import_toolkit.isPlainObject;
+function copyWithStructuralSharing(oldObj, newObj) {
+  if (oldObj === newObj || !(isPlainObject2(oldObj) && isPlainObject2(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {
+    return newObj;
+  }
+  const newKeys = Object.keys(newObj);
+  const oldKeys = Object.keys(oldObj);
+  let isSameObject = newKeys.length === oldKeys.length;
+  const mergeObj = Array.isArray(newObj) ? [] : {};
+  for (const key of newKeys) {
+    mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);
+    if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];
+  }
+  return isSameObject ? oldObj : mergeObj;
+}
+
+// src/query/utils/countObjectKeys.ts
+function countObjectKeys(obj) {
+  let count = 0;
+  for (const _key in obj) {
+    count++;
+  }
+  return count;
+}
+
+// src/query/utils/flatten.ts
+var flatten = (arr) => [].concat(...arr);
+
+// src/query/utils/isAbsoluteUrl.ts
+function isAbsoluteUrl(url) {
+  return new RegExp(`(^|:)//`).test(url);
+}
+
+// src/query/utils/isDocumentVisible.ts
+function isDocumentVisible() {
+  if (typeof document === "undefined") {
+    return true;
+  }
+  return document.visibilityState !== "hidden";
+}
+
+// src/query/utils/isNotNullish.ts
+function isNotNullish(v) {
+  return v != null;
+}
+
+// src/query/utils/isOnline.ts
+function isOnline() {
+  return typeof navigator === "undefined" ? true : navigator.onLine === void 0 ? true : navigator.onLine;
+}
+
+// src/query/utils/joinUrls.ts
+var withoutTrailingSlash = (url) => url.replace(/\/$/, "");
+var withoutLeadingSlash = (url) => url.replace(/^\//, "");
+function joinUrls(base, url) {
+  if (!base) {
+    return url;
+  }
+  if (!url) {
+    return base;
+  }
+  if (isAbsoluteUrl(url)) {
+    return url;
+  }
+  const delimiter = base.endsWith("/") || !url.startsWith("?") ? "/" : "";
+  base = withoutTrailingSlash(base);
+  url = withoutLeadingSlash(url);
+  return `${base}${delimiter}${url}`;
+}
+
+// src/query/utils/getOrInsert.ts
+function getOrInsert(map, key, value) {
+  if (map.has(key)) return map.get(key);
+  return map.set(key, value).get(key);
+}
+
+// src/query/fetchBaseQuery.ts
+var defaultFetchFn = (...args) => fetch(...args);
+var defaultValidateStatus = (response) => response.status >= 200 && response.status <= 299;
+var defaultIsJsonContentType = (headers) => (
+  /*applicat*/
+  /ion\/(vnd\.api\+)?json/.test(headers.get("content-type") || "")
+);
+function stripUndefined(obj) {
+  if (!(0, import_toolkit.isPlainObject)(obj)) {
+    return obj;
+  }
+  const copy = {
+    ...obj
+  };
+  for (const [k, v] of Object.entries(copy)) {
+    if (v === void 0) delete copy[k];
+  }
+  return copy;
+}
+function fetchBaseQuery({
+  baseUrl,
+  prepareHeaders = (x) => x,
+  fetchFn = defaultFetchFn,
+  paramsSerializer,
+  isJsonContentType = defaultIsJsonContentType,
+  jsonContentType = "application/json",
+  jsonReplacer,
+  timeout: defaultTimeout,
+  responseHandler: globalResponseHandler,
+  validateStatus: globalValidateStatus,
+  ...baseFetchOptions
+} = {}) {
+  if (typeof fetch === "undefined" && fetchFn === defaultFetchFn) {
+    console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.");
+  }
+  return async (arg, api, extraOptions) => {
+    const {
+      getState,
+      extra,
+      endpoint,
+      forced,
+      type
+    } = api;
+    let meta;
+    let {
+      url,
+      headers = new Headers(baseFetchOptions.headers),
+      params = void 0,
+      responseHandler = globalResponseHandler ?? "json",
+      validateStatus = globalValidateStatus ?? defaultValidateStatus,
+      timeout = defaultTimeout,
+      ...rest
+    } = typeof arg == "string" ? {
+      url: arg
+    } : arg;
+    let abortController, signal = api.signal;
+    if (timeout) {
+      abortController = new AbortController();
+      api.signal.addEventListener("abort", abortController.abort);
+      signal = abortController.signal;
+    }
+    let config = {
+      ...baseFetchOptions,
+      signal,
+      ...rest
+    };
+    headers = new Headers(stripUndefined(headers));
+    config.headers = await prepareHeaders(headers, {
+      getState,
+      arg,
+      extra,
+      endpoint,
+      forced,
+      type,
+      extraOptions
+    }) || headers;
+    const isJsonifiable = (body) => typeof body === "object" && ((0, import_toolkit.isPlainObject)(body) || Array.isArray(body) || typeof body.toJSON === "function");
+    if (!config.headers.has("content-type") && isJsonifiable(config.body)) {
+      config.headers.set("content-type", jsonContentType);
+    }
+    if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {
+      config.body = JSON.stringify(config.body, jsonReplacer);
+    }
+    if (params) {
+      const divider = ~url.indexOf("?") ? "&" : "?";
+      const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));
+      url += divider + query;
+    }
+    url = joinUrls(baseUrl, url);
+    const request = new Request(url, config);
+    const requestClone = new Request(url, config);
+    meta = {
+      request: requestClone
+    };
+    let response, timedOut = false, timeoutId = abortController && setTimeout(() => {
+      timedOut = true;
+      abortController.abort();
+    }, timeout);
+    try {
+      response = await fetchFn(request);
+    } catch (e) {
+      return {
+        error: {
+          status: timedOut ? "TIMEOUT_ERROR" : "FETCH_ERROR",
+          error: String(e)
+        },
+        meta
+      };
+    } finally {
+      if (timeoutId) clearTimeout(timeoutId);
+      abortController?.signal.removeEventListener("abort", abortController.abort);
+    }
+    const responseClone = response.clone();
+    meta.response = responseClone;
+    let resultData;
+    let responseText = "";
+    try {
+      let handleResponseError;
+      await Promise.all([
+        handleResponse(response, responseHandler).then((r) => resultData = r, (e) => handleResponseError = e),
+        // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182
+        // we *have* to "use up" both streams at the same time or they will stop running in node-fetch scenarios
+        responseClone.text().then((r) => responseText = r, () => {
+        })
+      ]);
+      if (handleResponseError) throw handleResponseError;
+    } catch (e) {
+      return {
+        error: {
+          status: "PARSING_ERROR",
+          originalStatus: response.status,
+          data: responseText,
+          error: String(e)
+        },
+        meta
+      };
+    }
+    return validateStatus(response, resultData) ? {
+      data: resultData,
+      meta
+    } : {
+      error: {
+        status: response.status,
+        data: resultData
+      },
+      meta
+    };
+  };
+  async function handleResponse(response, responseHandler) {
+    if (typeof responseHandler === "function") {
+      return responseHandler(response);
+    }
+    if (responseHandler === "content-type") {
+      responseHandler = isJsonContentType(response.headers) ? "json" : "text";
+    }
+    if (responseHandler === "json") {
+      const text = await response.text();
+      return text.length ? JSON.parse(text) : null;
+    }
+    return response.text();
+  }
+}
+
+// src/query/HandledError.ts
+var HandledError = class {
+  constructor(value, meta = void 0) {
+    this.value = value;
+    this.meta = meta;
+  }
+};
+
+// src/query/retry.ts
+async function defaultBackoff(attempt = 0, maxRetries = 5) {
+  const attempts = Math.min(attempt, maxRetries);
+  const timeout = ~~((Math.random() + 0.4) * (300 << attempts));
+  await new Promise((resolve) => setTimeout((res) => resolve(res), timeout));
+}
+function fail(error, meta) {
+  throw Object.assign(new HandledError({
+    error,
+    meta
+  }), {
+    throwImmediately: true
+  });
+}
+var EMPTY_OPTIONS = {};
+var retryWithBackoff = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {
+  const possibleMaxRetries = [5, (defaultOptions || EMPTY_OPTIONS).maxRetries, (extraOptions || EMPTY_OPTIONS).maxRetries].filter((x) => x !== void 0);
+  const [maxRetries] = possibleMaxRetries.slice(-1);
+  const defaultRetryCondition = (_, __, {
+    attempt
+  }) => attempt <= maxRetries;
+  const options = {
+    maxRetries,
+    backoff: defaultBackoff,
+    retryCondition: defaultRetryCondition,
+    ...defaultOptions,
+    ...extraOptions
+  };
+  let retry2 = 0;
+  while (true) {
+    try {
+      const result = await baseQuery(args, api, extraOptions);
+      if (result.error) {
+        throw new HandledError(result);
+      }
+      return result;
+    } catch (e) {
+      retry2++;
+      if (e.throwImmediately) {
+        if (e instanceof HandledError) {
+          return e.value;
+        }
+        throw e;
+      }
+      if (e instanceof HandledError && !options.retryCondition(e.value.error, args, {
+        attempt: retry2,
+        baseQueryApi: api,
+        extraOptions
+      })) {
+        return e.value;
+      }
+      await options.backoff(retry2, options.maxRetries);
+    }
+  }
+};
+var retry = /* @__PURE__ */ Object.assign(retryWithBackoff, {
+  fail
+});
+
+// src/query/core/setupListeners.ts
+var onFocus = /* @__PURE__ */ (0, import_toolkit.createAction)("__rtkq/focused");
+var onFocusLost = /* @__PURE__ */ (0, import_toolkit.createAction)("__rtkq/unfocused");
+var onOnline = /* @__PURE__ */ (0, import_toolkit.createAction)("__rtkq/online");
+var onOffline = /* @__PURE__ */ (0, import_toolkit.createAction)("__rtkq/offline");
+var initialized = false;
+function setupListeners(dispatch, customHandler) {
+  function defaultHandler() {
+    const handleFocus = () => dispatch(onFocus());
+    const handleFocusLost = () => dispatch(onFocusLost());
+    const handleOnline = () => dispatch(onOnline());
+    const handleOffline = () => dispatch(onOffline());
+    const handleVisibilityChange = () => {
+      if (window.document.visibilityState === "visible") {
+        handleFocus();
+      } else {
+        handleFocusLost();
+      }
+    };
+    if (!initialized) {
+      if (typeof window !== "undefined" && window.addEventListener) {
+        window.addEventListener("visibilitychange", handleVisibilityChange, false);
+        window.addEventListener("focus", handleFocus, false);
+        window.addEventListener("online", handleOnline, false);
+        window.addEventListener("offline", handleOffline, false);
+        initialized = true;
+      }
+    }
+    const unsubscribe = () => {
+      window.removeEventListener("focus", handleFocus);
+      window.removeEventListener("visibilitychange", handleVisibilityChange);
+      window.removeEventListener("online", handleOnline);
+      window.removeEventListener("offline", handleOffline);
+      initialized = false;
+    };
+    return unsubscribe;
+  }
+  return customHandler ? customHandler(dispatch, {
+    onFocus,
+    onFocusLost,
+    onOffline,
+    onOnline
+  }) : defaultHandler();
+}
+
+// src/query/endpointDefinitions.ts
+function isQueryDefinition(e) {
+  return e.type === "query" /* query */;
+}
+function isMutationDefinition(e) {
+  return e.type === "mutation" /* mutation */;
+}
+function isInfiniteQueryDefinition(e) {
+  return e.type === "infinitequery" /* infinitequery */;
+}
+function isAnyQueryDefinition(e) {
+  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);
+}
+function calculateProvidedBy(description, result, error, queryArg, meta, assertTagTypes) {
+  if (isFunction(description)) {
+    return description(result, error, queryArg, meta).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);
+  }
+  if (Array.isArray(description)) {
+    return description.map(expandTagDescription).map(assertTagTypes);
+  }
+  return [];
+}
+function isFunction(t) {
+  return typeof t === "function";
+}
+function expandTagDescription(description) {
+  return typeof description === "string" ? {
+    type: description
+  } : description;
+}
+
+// src/query/core/buildThunks.ts
+var import_immer = require("immer");
+
+// src/query/core/buildInitiate.ts
+var import_toolkit2 = require("@reduxjs/toolkit");
+
+// src/tsHelpers.ts
+function asSafePromise(promise, fallback) {
+  return promise.catch(fallback);
+}
+
+// src/query/core/buildInitiate.ts
+var forceQueryFnSymbol = Symbol("forceQueryFn");
+var isUpsertQuery = (arg) => typeof arg[forceQueryFnSymbol] === "function";
+function buildInitiate({
+  serializeQueryArgs,
+  queryThunk,
+  infiniteQueryThunk,
+  mutationThunk,
+  api,
+  context
+}) {
+  const runningQueries = /* @__PURE__ */ new Map();
+  const runningMutations = /* @__PURE__ */ new Map();
+  const {
+    unsubscribeQueryResult,
+    removeMutationResult,
+    updateSubscriptionOptions
+  } = api.internalActions;
+  return {
+    buildInitiateQuery,
+    buildInitiateInfiniteQuery,
+    buildInitiateMutation,
+    getRunningQueryThunk,
+    getRunningMutationThunk,
+    getRunningQueriesThunk,
+    getRunningMutationsThunk
+  };
+  function getRunningQueryThunk(endpointName, queryArgs) {
+    return (dispatch) => {
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      const queryCacheKey = serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      });
+      return runningQueries.get(dispatch)?.[queryCacheKey];
+    };
+  }
+  function getRunningMutationThunk(_endpointName, fixedCacheKeyOrRequestId) {
+    return (dispatch) => {
+      return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId];
+    };
+  }
+  function getRunningQueriesThunk() {
+    return (dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);
+  }
+  function getRunningMutationsThunk() {
+    return (dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);
+  }
+  function middlewareWarning(dispatch) {
+    if (true) {
+      if (middlewareWarning.triggered) return;
+      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());
+      middlewareWarning.triggered = true;
+      if (typeof returnedValue !== "object" || typeof returnedValue?.type === "string") {
+        throw new Error(false ? _formatProdErrorMessage(34) : `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store.
+You must add the middleware for RTK-Query to function correctly!`);
+      }
+    }
+  }
+  function buildInitiateAnyQuery(endpointName, endpointDefinition) {
+    const queryAction = (arg, {
+      subscribe = true,
+      forceRefetch,
+      subscriptionOptions,
+      [forceQueryFnSymbol]: forceQueryFn,
+      ...rest
+    } = {}) => (dispatch, getState) => {
+      const queryCacheKey = serializeQueryArgs({
+        queryArgs: arg,
+        endpointDefinition,
+        endpointName
+      });
+      let thunk;
+      const commonThunkArgs = {
+        ...rest,
+        type: "query",
+        subscribe,
+        forceRefetch,
+        subscriptionOptions,
+        endpointName,
+        originalArgs: arg,
+        queryCacheKey,
+        [forceQueryFnSymbol]: forceQueryFn
+      };
+      if (isQueryDefinition(endpointDefinition)) {
+        thunk = queryThunk(commonThunkArgs);
+      } else {
+        const {
+          direction,
+          initialPageParam
+        } = rest;
+        thunk = infiniteQueryThunk({
+          ...commonThunkArgs,
+          // Supply these even if undefined. This helps with a field existence
+          // check over in `buildSlice.ts`
+          direction,
+          initialPageParam
+        });
+      }
+      const selector = api.endpoints[endpointName].select(arg);
+      const thunkResult = dispatch(thunk);
+      const stateAfter = selector(getState());
+      middlewareWarning(dispatch);
+      const {
+        requestId,
+        abort
+      } = thunkResult;
+      const skippedSynchronously = stateAfter.requestId !== requestId;
+      const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey];
+      const selectFromState = () => selector(getState());
+      const statePromise = Object.assign(forceQueryFn ? (
+        // a query has been forced (upsertQueryData)
+        // -> we want to resolve it once data has been written with the data that will be written
+        thunkResult.then(selectFromState)
+      ) : skippedSynchronously && !runningQuery ? (
+        // a query has been skipped due to a condition and we do not have any currently running query
+        // -> we want to resolve it immediately with the current data
+        Promise.resolve(stateAfter)
+      ) : (
+        // query just started or one is already in flight
+        // -> wait for the running query, then resolve with data from after that
+        Promise.all([runningQuery, thunkResult]).then(selectFromState)
+      ), {
+        arg,
+        requestId,
+        subscriptionOptions,
+        queryCacheKey,
+        abort,
+        async unwrap() {
+          const result = await statePromise;
+          if (result.isError) {
+            throw result.error;
+          }
+          return result.data;
+        },
+        refetch: () => dispatch(queryAction(arg, {
+          subscribe: false,
+          forceRefetch: true
+        })),
+        unsubscribe() {
+          if (subscribe) dispatch(unsubscribeQueryResult({
+            queryCacheKey,
+            requestId
+          }));
+        },
+        updateSubscriptionOptions(options) {
+          statePromise.subscriptionOptions = options;
+          dispatch(updateSubscriptionOptions({
+            endpointName,
+            requestId,
+            queryCacheKey,
+            options
+          }));
+        }
+      });
+      if (!runningQuery && !skippedSynchronously && !forceQueryFn) {
+        const running = getOrInsert(runningQueries, dispatch, {});
+        running[queryCacheKey] = statePromise;
+        statePromise.then(() => {
+          delete running[queryCacheKey];
+          if (!countObjectKeys(running)) {
+            runningQueries.delete(dispatch);
+          }
+        });
+      }
+      return statePromise;
+    };
+    return queryAction;
+  }
+  function buildInitiateQuery(endpointName, endpointDefinition) {
+    const queryAction = buildInitiateAnyQuery(endpointName, endpointDefinition);
+    return queryAction;
+  }
+  function buildInitiateInfiniteQuery(endpointName, endpointDefinition) {
+    const infiniteQueryAction = buildInitiateAnyQuery(endpointName, endpointDefinition);
+    return infiniteQueryAction;
+  }
+  function buildInitiateMutation(endpointName) {
+    return (arg, {
+      track = true,
+      fixedCacheKey
+    } = {}) => (dispatch, getState) => {
+      const thunk = mutationThunk({
+        type: "mutation",
+        endpointName,
+        originalArgs: arg,
+        track,
+        fixedCacheKey
+      });
+      const thunkResult = dispatch(thunk);
+      middlewareWarning(dispatch);
+      const {
+        requestId,
+        abort,
+        unwrap
+      } = thunkResult;
+      const returnValuePromise = asSafePromise(thunkResult.unwrap().then((data) => ({
+        data
+      })), (error) => ({
+        error
+      }));
+      const reset = () => {
+        dispatch(removeMutationResult({
+          requestId,
+          fixedCacheKey
+        }));
+      };
+      const ret = Object.assign(returnValuePromise, {
+        arg: thunkResult.arg,
+        requestId,
+        abort,
+        unwrap,
+        reset
+      });
+      const running = runningMutations.get(dispatch) || {};
+      runningMutations.set(dispatch, running);
+      running[requestId] = ret;
+      ret.then(() => {
+        delete running[requestId];
+        if (!countObjectKeys(running)) {
+          runningMutations.delete(dispatch);
+        }
+      });
+      if (fixedCacheKey) {
+        running[fixedCacheKey] = ret;
+        ret.then(() => {
+          if (running[fixedCacheKey] === ret) {
+            delete running[fixedCacheKey];
+            if (!countObjectKeys(running)) {
+              runningMutations.delete(dispatch);
+            }
+          }
+        });
+      }
+      return ret;
+    };
+  }
+}
+
+// src/query/standardSchema.ts
+var import_utils4 = require("@standard-schema/utils");
+var NamedSchemaError = class extends import_utils4.SchemaError {
+  constructor(issues, value, schemaName, _bqMeta) {
+    super(issues);
+    this.value = value;
+    this.schemaName = schemaName;
+    this._bqMeta = _bqMeta;
+  }
+};
+async function parseWithSchema(schema, data, schemaName, bqMeta) {
+  const result = await schema["~standard"].validate(data);
+  if (result.issues) {
+    throw new NamedSchemaError(result.issues, data, schemaName, bqMeta);
+  }
+  return result.value;
+}
+
+// src/query/core/buildThunks.ts
+function defaultTransformResponse(baseQueryReturnValue) {
+  return baseQueryReturnValue;
+}
+var addShouldAutoBatch = (arg = {}) => {
+  return {
+    ...arg,
+    [import_toolkit.SHOULD_AUTOBATCH]: true
+  };
+};
+function buildThunks({
+  reducerPath,
+  baseQuery,
+  context: {
+    endpointDefinitions
+  },
+  serializeQueryArgs,
+  api,
+  assertTagType,
+  selectors,
+  onSchemaFailure,
+  catchSchemaFailure: globalCatchSchemaFailure,
+  skipSchemaValidation: globalSkipSchemaValidation
+}) {
+  const patchQueryData = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {
+    const endpointDefinition = endpointDefinitions[endpointName];
+    const queryCacheKey = serializeQueryArgs({
+      queryArgs: arg,
+      endpointDefinition,
+      endpointName
+    });
+    dispatch(api.internalActions.queryResultPatched({
+      queryCacheKey,
+      patches
+    }));
+    if (!updateProvided) {
+      return;
+    }
+    const newValue = api.endpoints[endpointName].select(arg)(
+      // Work around TS 4.1 mismatch
+      getState()
+    );
+    const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, void 0, arg, {}, assertTagType);
+    dispatch(api.internalActions.updateProvidedBy([{
+      queryCacheKey,
+      providedTags
+    }]));
+  };
+  function addToStart(items, item, max = 0) {
+    const newItems = [item, ...items];
+    return max && newItems.length > max ? newItems.slice(0, -1) : newItems;
+  }
+  function addToEnd(items, item, max = 0) {
+    const newItems = [...items, item];
+    return max && newItems.length > max ? newItems.slice(1) : newItems;
+  }
+  const updateQueryData = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {
+    const endpointDefinition = api.endpoints[endpointName];
+    const currentState = endpointDefinition.select(arg)(
+      // Work around TS 4.1 mismatch
+      getState()
+    );
+    const ret = {
+      patches: [],
+      inversePatches: [],
+      undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))
+    };
+    if (currentState.status === "uninitialized" /* uninitialized */) {
+      return ret;
+    }
+    let newValue;
+    if ("data" in currentState) {
+      if ((0, import_immer.isDraftable)(currentState.data)) {
+        const [value, patches, inversePatches] = (0, import_immer.produceWithPatches)(currentState.data, updateRecipe);
+        ret.patches.push(...patches);
+        ret.inversePatches.push(...inversePatches);
+        newValue = value;
+      } else {
+        newValue = updateRecipe(currentState.data);
+        ret.patches.push({
+          op: "replace",
+          path: [],
+          value: newValue
+        });
+        ret.inversePatches.push({
+          op: "replace",
+          path: [],
+          value: currentState.data
+        });
+      }
+    }
+    if (ret.patches.length === 0) {
+      return ret;
+    }
+    dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));
+    return ret;
+  };
+  const upsertQueryData = (endpointName, arg, value) => (dispatch) => {
+    const res = dispatch(api.endpoints[endpointName].initiate(arg, {
+      subscribe: false,
+      forceRefetch: true,
+      [forceQueryFnSymbol]: () => ({
+        data: value
+      })
+    }));
+    return res;
+  };
+  const getTransformCallbackForEndpoint = (endpointDefinition, transformFieldName) => {
+    return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName] : defaultTransformResponse;
+  };
+  const executeEndpoint = async (arg, {
+    signal,
+    abort,
+    rejectWithValue,
+    fulfillWithValue,
+    dispatch,
+    getState,
+    extra
+  }) => {
+    const endpointDefinition = endpointDefinitions[arg.endpointName];
+    const {
+      metaSchema,
+      skipSchemaValidation = globalSkipSchemaValidation
+    } = endpointDefinition;
+    try {
+      let transformResponse = getTransformCallbackForEndpoint(endpointDefinition, "transformResponse");
+      const baseQueryApi = {
+        signal,
+        abort,
+        dispatch,
+        getState,
+        extra,
+        endpoint: arg.endpointName,
+        type: arg.type,
+        forced: arg.type === "query" ? isForcedQuery(arg, getState()) : void 0,
+        queryCacheKey: arg.type === "query" ? arg.queryCacheKey : void 0
+      };
+      const forceQueryFn = arg.type === "query" ? arg[forceQueryFnSymbol] : void 0;
+      let finalQueryReturnValue;
+      const fetchPage = async (data, param, maxPages, previous) => {
+        if (param == null && data.pages.length) {
+          return Promise.resolve({
+            data
+          });
+        }
+        const finalQueryArg = {
+          queryArg: arg.originalArgs,
+          pageParam: param
+        };
+        const pageResponse = await executeRequest(finalQueryArg);
+        const addTo = previous ? addToStart : addToEnd;
+        return {
+          data: {
+            pages: addTo(data.pages, pageResponse.data, maxPages),
+            pageParams: addTo(data.pageParams, param, maxPages)
+          },
+          meta: pageResponse.meta
+        };
+      };
+      async function executeRequest(finalQueryArg) {
+        let result;
+        const {
+          extraOptions,
+          argSchema,
+          rawResponseSchema,
+          responseSchema
+        } = endpointDefinition;
+        if (argSchema && !skipSchemaValidation) {
+          finalQueryArg = await parseWithSchema(
+            argSchema,
+            finalQueryArg,
+            "argSchema",
+            {}
+            // we don't have a meta yet, so we can't pass it
+          );
+        }
+        if (forceQueryFn) {
+          result = forceQueryFn();
+        } else if (endpointDefinition.query) {
+          result = await baseQuery(endpointDefinition.query(finalQueryArg), baseQueryApi, extraOptions);
+        } else {
+          result = await endpointDefinition.queryFn(finalQueryArg, baseQueryApi, extraOptions, (arg2) => baseQuery(arg2, baseQueryApi, extraOptions));
+        }
+        if (typeof process !== "undefined" && true) {
+          const what = endpointDefinition.query ? "`baseQuery`" : "`queryFn`";
+          let err;
+          if (!result) {
+            err = `${what} did not return anything.`;
+          } else if (typeof result !== "object") {
+            err = `${what} did not return an object.`;
+          } else if (result.error && result.data) {
+            err = `${what} returned an object containing both \`error\` and \`result\`.`;
+          } else if (result.error === void 0 && result.data === void 0) {
+            err = `${what} returned an object containing neither a valid \`error\` and \`result\`. At least one of them should not be \`undefined\``;
+          } else {
+            for (const key of Object.keys(result)) {
+              if (key !== "error" && key !== "data" && key !== "meta") {
+                err = `The object returned by ${what} has the unknown property ${key}.`;
+                break;
+              }
+            }
+          }
+          if (err) {
+            console.error(`Error encountered handling the endpoint ${arg.endpointName}.
+                  ${err}
+                  It needs to return an object with either the shape \`{ data: <value> }\` or \`{ error: <value> }\` that may contain an optional \`meta\` property.
+                  Object returned was:`, result);
+          }
+        }
+        if (result.error) throw new HandledError(result.error, result.meta);
+        let {
+          data
+        } = result;
+        if (rawResponseSchema && !skipSchemaValidation) {
+          data = await parseWithSchema(rawResponseSchema, result.data, "rawResponseSchema", result.meta);
+        }
+        let transformedResponse = await transformResponse(data, result.meta, finalQueryArg);
+        if (responseSchema && !skipSchemaValidation) {
+          transformedResponse = await parseWithSchema(responseSchema, transformedResponse, "responseSchema", result.meta);
+        }
+        return {
+          ...result,
+          data: transformedResponse
+        };
+      }
+      if (arg.type === "query" && "infiniteQueryOptions" in endpointDefinition) {
+        const {
+          infiniteQueryOptions
+        } = endpointDefinition;
+        const {
+          maxPages = Infinity
+        } = infiniteQueryOptions;
+        let result;
+        const blankData = {
+          pages: [],
+          pageParams: []
+        };
+        const cachedData = selectors.selectQueryEntry(getState(), arg.queryCacheKey)?.data;
+        const isForcedQueryNeedingRefetch = (
+          // arg.forceRefetch
+          isForcedQuery(arg, getState()) && !arg.direction
+        );
+        const existingData = isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData;
+        if ("direction" in arg && arg.direction && existingData.pages.length) {
+          const previous = arg.direction === "backward";
+          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;
+          const param = pageParamFn(infiniteQueryOptions, existingData, arg.originalArgs);
+          result = await fetchPage(existingData, param, maxPages, previous);
+        } else {
+          const {
+            initialPageParam = infiniteQueryOptions.initialPageParam
+          } = arg;
+          const cachedPageParams = cachedData?.pageParams ?? [];
+          const firstPageParam = cachedPageParams[0] ?? initialPageParam;
+          const totalPages = cachedPageParams.length;
+          result = await fetchPage(existingData, firstPageParam, maxPages);
+          if (forceQueryFn) {
+            result = {
+              data: result.data.pages[0]
+            };
+          }
+          for (let i = 1; i < totalPages; i++) {
+            const param = getNextPageParam(infiniteQueryOptions, result.data, arg.originalArgs);
+            result = await fetchPage(result.data, param, maxPages);
+          }
+        }
+        finalQueryReturnValue = result;
+      } else {
+        finalQueryReturnValue = await executeRequest(arg.originalArgs);
+      }
+      if (metaSchema && !skipSchemaValidation && finalQueryReturnValue.meta) {
+        finalQueryReturnValue.meta = await parseWithSchema(metaSchema, finalQueryReturnValue.meta, "metaSchema", finalQueryReturnValue.meta);
+      }
+      return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({
+        fulfilledTimeStamp: Date.now(),
+        baseQueryMeta: finalQueryReturnValue.meta
+      }));
+    } catch (error) {
+      let caughtError = error;
+      if (caughtError instanceof HandledError) {
+        let transformErrorResponse = getTransformCallbackForEndpoint(endpointDefinition, "transformErrorResponse");
+        const {
+          rawErrorResponseSchema,
+          errorResponseSchema
+        } = endpointDefinition;
+        let {
+          value,
+          meta
+        } = caughtError;
+        try {
+          if (rawErrorResponseSchema && !skipSchemaValidation) {
+            value = await parseWithSchema(rawErrorResponseSchema, value, "rawErrorResponseSchema", meta);
+          }
+          if (metaSchema && !skipSchemaValidation) {
+            meta = await parseWithSchema(metaSchema, meta, "metaSchema", meta);
+          }
+          let transformedErrorResponse = await transformErrorResponse(value, meta, arg.originalArgs);
+          if (errorResponseSchema && !skipSchemaValidation) {
+            transformedErrorResponse = await parseWithSchema(errorResponseSchema, transformedErrorResponse, "errorResponseSchema", meta);
+          }
+          return rejectWithValue(transformedErrorResponse, addShouldAutoBatch({
+            baseQueryMeta: meta
+          }));
+        } catch (e) {
+          caughtError = e;
+        }
+      }
+      try {
+        if (caughtError instanceof NamedSchemaError) {
+          const info = {
+            endpoint: arg.endpointName,
+            arg: arg.originalArgs,
+            type: arg.type,
+            queryCacheKey: arg.type === "query" ? arg.queryCacheKey : void 0
+          };
+          endpointDefinition.onSchemaFailure?.(caughtError, info);
+          onSchemaFailure?.(caughtError, info);
+          const {
+            catchSchemaFailure = globalCatchSchemaFailure
+          } = endpointDefinition;
+          if (catchSchemaFailure) {
+            return rejectWithValue(catchSchemaFailure(caughtError, info), addShouldAutoBatch({
+              baseQueryMeta: caughtError._bqMeta
+            }));
+          }
+        }
+      } catch (e) {
+        caughtError = e;
+      }
+      if (typeof process !== "undefined" && true) {
+        console.error(`An unhandled error occurred processing a request for the endpoint "${arg.endpointName}".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`, caughtError);
+      } else {
+        console.error(caughtError);
+      }
+      throw caughtError;
+    }
+  };
+  function isForcedQuery(arg, state) {
+    const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);
+    const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;
+    const fulfilledVal = requestState?.fulfilledTimeStamp;
+    const refetchVal = arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange);
+    if (refetchVal) {
+      return refetchVal === true || (Number(/* @__PURE__ */ new Date()) - Number(fulfilledVal)) / 1e3 >= refetchVal;
+    }
+    return false;
+  }
+  const createQueryThunk = () => {
+    const generatedQueryThunk = (0, import_toolkit.createAsyncThunk)(`${reducerPath}/executeQuery`, executeEndpoint, {
+      getPendingMeta({
+        arg
+      }) {
+        const endpointDefinition = endpointDefinitions[arg.endpointName];
+        return addShouldAutoBatch({
+          startedTimeStamp: Date.now(),
+          ...isInfiniteQueryDefinition(endpointDefinition) ? {
+            direction: arg.direction
+          } : {}
+        });
+      },
+      condition(queryThunkArg, {
+        getState
+      }) {
+        const state = getState();
+        const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);
+        const fulfilledVal = requestState?.fulfilledTimeStamp;
+        const currentArg = queryThunkArg.originalArgs;
+        const previousArg = requestState?.originalArgs;
+        const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];
+        const direction = queryThunkArg.direction;
+        if (isUpsertQuery(queryThunkArg)) {
+          return true;
+        }
+        if (requestState?.status === "pending") {
+          return false;
+        }
+        if (isForcedQuery(queryThunkArg, state)) {
+          return true;
+        }
+        if (isQueryDefinition(endpointDefinition) && endpointDefinition?.forceRefetch?.({
+          currentArg,
+          previousArg,
+          endpointState: requestState,
+          state
+        })) {
+          return true;
+        }
+        if (fulfilledVal && !direction) {
+          return false;
+        }
+        return true;
+      },
+      dispatchConditionRejection: true
+    });
+    return generatedQueryThunk;
+  };
+  const queryThunk = createQueryThunk();
+  const infiniteQueryThunk = createQueryThunk();
+  const mutationThunk = (0, import_toolkit.createAsyncThunk)(`${reducerPath}/executeMutation`, executeEndpoint, {
+    getPendingMeta() {
+      return addShouldAutoBatch({
+        startedTimeStamp: Date.now()
+      });
+    }
+  });
+  const hasTheForce = (options) => "force" in options;
+  const hasMaxAge = (options) => "ifOlderThan" in options;
+  const prefetch = (endpointName, arg, options) => (dispatch, getState) => {
+    const force = hasTheForce(options) && options.force;
+    const maxAge = hasMaxAge(options) && options.ifOlderThan;
+    const queryAction = (force2 = true) => {
+      const options2 = {
+        forceRefetch: force2,
+        isPrefetch: true
+      };
+      return api.endpoints[endpointName].initiate(arg, options2);
+    };
+    const latestStateValue = api.endpoints[endpointName].select(arg)(getState());
+    if (force) {
+      dispatch(queryAction());
+    } else if (maxAge) {
+      const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp;
+      if (!lastFulfilledTs) {
+        dispatch(queryAction());
+        return;
+      }
+      const shouldRetrigger = (Number(/* @__PURE__ */ new Date()) - Number(new Date(lastFulfilledTs))) / 1e3 >= maxAge;
+      if (shouldRetrigger) {
+        dispatch(queryAction());
+      }
+    } else {
+      dispatch(queryAction(false));
+    }
+  };
+  function matchesEndpoint(endpointName) {
+    return (action) => action?.meta?.arg?.endpointName === endpointName;
+  }
+  function buildMatchThunkActions(thunk, endpointName) {
+    return {
+      matchPending: (0, import_toolkit.isAllOf)((0, import_toolkit.isPending)(thunk), matchesEndpoint(endpointName)),
+      matchFulfilled: (0, import_toolkit.isAllOf)((0, import_toolkit.isFulfilled)(thunk), matchesEndpoint(endpointName)),
+      matchRejected: (0, import_toolkit.isAllOf)((0, import_toolkit.isRejected)(thunk), matchesEndpoint(endpointName))
+    };
+  }
+  return {
+    queryThunk,
+    mutationThunk,
+    infiniteQueryThunk,
+    prefetch,
+    updateQueryData,
+    upsertQueryData,
+    patchQueryData,
+    buildMatchThunkActions
+  };
+}
+function getNextPageParam(options, {
+  pages,
+  pageParams
+}, queryArg) {
+  const lastIndex = pages.length - 1;
+  return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams, queryArg);
+}
+function getPreviousPageParam(options, {
+  pages,
+  pageParams
+}, queryArg) {
+  return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams, queryArg);
+}
+function calculateProvidedByThunk(action, type, endpointDefinitions, assertTagType) {
+  return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type], (0, import_toolkit.isFulfilled)(action) ? action.payload : void 0, (0, import_toolkit.isRejectedWithValue)(action) ? action.payload : void 0, action.meta.arg.originalArgs, "baseQueryMeta" in action.meta ? action.meta.baseQueryMeta : void 0, assertTagType);
+}
+
+// src/query/core/buildSlice.ts
+var import_immer2 = require("immer");
+var import_immer3 = require("immer");
+function updateQuerySubstateIfExists(state, queryCacheKey, update) {
+  const substate = state[queryCacheKey];
+  if (substate) {
+    update(substate);
+  }
+}
+function getMutationCacheKey(id) {
+  return ("arg" in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId;
+}
+function updateMutationSubstateIfExists(state, id, update) {
+  const substate = state[getMutationCacheKey(id)];
+  if (substate) {
+    update(substate);
+  }
+}
+var initialState = {};
+function buildSlice({
+  reducerPath,
+  queryThunk,
+  mutationThunk,
+  serializeQueryArgs,
+  context: {
+    endpointDefinitions: definitions,
+    apiUid,
+    extractRehydrationInfo,
+    hasRehydrationInfo
+  },
+  assertTagType,
+  config
+}) {
+  const resetApiState = (0, import_toolkit.createAction)(`${reducerPath}/resetApiState`);
+  function writePendingCacheEntry(draft, arg, upserting, meta) {
+    draft[arg.queryCacheKey] ??= {
+      status: "uninitialized" /* uninitialized */,
+      endpointName: arg.endpointName
+    };
+    updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {
+      substate.status = "pending" /* pending */;
+      substate.requestId = upserting && substate.requestId ? (
+        // for `upsertQuery` **updates**, keep the current `requestId`
+        substate.requestId
+      ) : (
+        // for normal queries or `upsertQuery` **inserts** always update the `requestId`
+        meta.requestId
+      );
+      if (arg.originalArgs !== void 0) {
+        substate.originalArgs = arg.originalArgs;
+      }
+      substate.startedTimeStamp = meta.startedTimeStamp;
+      const endpointDefinition = definitions[meta.arg.endpointName];
+      if (isInfiniteQueryDefinition(endpointDefinition) && "direction" in arg) {
+        ;
+        substate.direction = arg.direction;
+      }
+    });
+  }
+  function writeFulfilledCacheEntry(draft, meta, payload, upserting) {
+    updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, (substate) => {
+      if (substate.requestId !== meta.requestId && !upserting) return;
+      const {
+        merge
+      } = definitions[meta.arg.endpointName];
+      substate.status = "fulfilled" /* fulfilled */;
+      if (merge) {
+        if (substate.data !== void 0) {
+          const {
+            fulfilledTimeStamp,
+            arg,
+            baseQueryMeta,
+            requestId
+          } = meta;
+          let newData = (0, import_toolkit.createNextState)(substate.data, (draftSubstateData) => {
+            return merge(draftSubstateData, payload, {
+              arg: arg.originalArgs,
+              baseQueryMeta,
+              fulfilledTimeStamp,
+              requestId
+            });
+          });
+          substate.data = newData;
+        } else {
+          substate.data = payload;
+        }
+      } else {
+        substate.data = definitions[meta.arg.endpointName].structuralSharing ?? true ? copyWithStructuralSharing((0, import_immer2.isDraft)(substate.data) ? (0, import_immer3.original)(substate.data) : substate.data, payload) : payload;
+      }
+      delete substate.error;
+      substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;
+    });
+  }
+  const querySlice = (0, import_toolkit.createSlice)({
+    name: `${reducerPath}/queries`,
+    initialState,
+    reducers: {
+      removeQueryResult: {
+        reducer(draft, {
+          payload: {
+            queryCacheKey
+          }
+        }) {
+          delete draft[queryCacheKey];
+        },
+        prepare: (0, import_toolkit.prepareAutoBatched)()
+      },
+      cacheEntriesUpserted: {
+        reducer(draft, action) {
+          for (const entry of action.payload) {
+            const {
+              queryDescription: arg,
+              value
+            } = entry;
+            writePendingCacheEntry(draft, arg, true, {
+              arg,
+              requestId: action.meta.requestId,
+              startedTimeStamp: action.meta.timestamp
+            });
+            writeFulfilledCacheEntry(
+              draft,
+              {
+                arg,
+                requestId: action.meta.requestId,
+                fulfilledTimeStamp: action.meta.timestamp,
+                baseQueryMeta: {}
+              },
+              value,
+              // We know we're upserting here
+              true
+            );
+          }
+        },
+        prepare: (payload) => {
+          const queryDescriptions = payload.map((entry) => {
+            const {
+              endpointName,
+              arg,
+              value
+            } = entry;
+            const endpointDefinition = definitions[endpointName];
+            const queryDescription = {
+              type: "query",
+              endpointName,
+              originalArgs: entry.arg,
+              queryCacheKey: serializeQueryArgs({
+                queryArgs: arg,
+                endpointDefinition,
+                endpointName
+              })
+            };
+            return {
+              queryDescription,
+              value
+            };
+          });
+          const result = {
+            payload: queryDescriptions,
+            meta: {
+              [import_toolkit.SHOULD_AUTOBATCH]: true,
+              requestId: (0, import_toolkit.nanoid)(),
+              timestamp: Date.now()
+            }
+          };
+          return result;
+        }
+      },
+      queryResultPatched: {
+        reducer(draft, {
+          payload: {
+            queryCacheKey,
+            patches
+          }
+        }) {
+          updateQuerySubstateIfExists(draft, queryCacheKey, (substate) => {
+            substate.data = (0, import_immer3.applyPatches)(substate.data, patches.concat());
+          });
+        },
+        prepare: (0, import_toolkit.prepareAutoBatched)()
+      }
+    },
+    extraReducers(builder) {
+      builder.addCase(queryThunk.pending, (draft, {
+        meta,
+        meta: {
+          arg
+        }
+      }) => {
+        const upserting = isUpsertQuery(arg);
+        writePendingCacheEntry(draft, arg, upserting, meta);
+      }).addCase(queryThunk.fulfilled, (draft, {
+        meta,
+        payload
+      }) => {
+        const upserting = isUpsertQuery(meta.arg);
+        writeFulfilledCacheEntry(draft, meta, payload, upserting);
+      }).addCase(queryThunk.rejected, (draft, {
+        meta: {
+          condition,
+          arg,
+          requestId
+        },
+        error,
+        payload
+      }) => {
+        updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {
+          if (condition) {
+          } else {
+            if (substate.requestId !== requestId) return;
+            substate.status = "rejected" /* rejected */;
+            substate.error = payload ?? error;
+          }
+        });
+      }).addMatcher(hasRehydrationInfo, (draft, action) => {
+        const {
+          queries
+        } = extractRehydrationInfo(action);
+        for (const [key, entry] of Object.entries(queries)) {
+          if (
+            // do not rehydrate entries that were currently in flight.
+            entry?.status === "fulfilled" /* fulfilled */ || entry?.status === "rejected" /* rejected */
+          ) {
+            draft[key] = entry;
+          }
+        }
+      });
+    }
+  });
+  const mutationSlice = (0, import_toolkit.createSlice)({
+    name: `${reducerPath}/mutations`,
+    initialState,
+    reducers: {
+      removeMutationResult: {
+        reducer(draft, {
+          payload
+        }) {
+          const cacheKey = getMutationCacheKey(payload);
+          if (cacheKey in draft) {
+            delete draft[cacheKey];
+          }
+        },
+        prepare: (0, import_toolkit.prepareAutoBatched)()
+      }
+    },
+    extraReducers(builder) {
+      builder.addCase(mutationThunk.pending, (draft, {
+        meta,
+        meta: {
+          requestId,
+          arg,
+          startedTimeStamp
+        }
+      }) => {
+        if (!arg.track) return;
+        draft[getMutationCacheKey(meta)] = {
+          requestId,
+          status: "pending" /* pending */,
+          endpointName: arg.endpointName,
+          startedTimeStamp
+        };
+      }).addCase(mutationThunk.fulfilled, (draft, {
+        payload,
+        meta
+      }) => {
+        if (!meta.arg.track) return;
+        updateMutationSubstateIfExists(draft, meta, (substate) => {
+          if (substate.requestId !== meta.requestId) return;
+          substate.status = "fulfilled" /* fulfilled */;
+          substate.data = payload;
+          substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;
+        });
+      }).addCase(mutationThunk.rejected, (draft, {
+        payload,
+        error,
+        meta
+      }) => {
+        if (!meta.arg.track) return;
+        updateMutationSubstateIfExists(draft, meta, (substate) => {
+          if (substate.requestId !== meta.requestId) return;
+          substate.status = "rejected" /* rejected */;
+          substate.error = payload ?? error;
+        });
+      }).addMatcher(hasRehydrationInfo, (draft, action) => {
+        const {
+          mutations
+        } = extractRehydrationInfo(action);
+        for (const [key, entry] of Object.entries(mutations)) {
+          if (
+            // do not rehydrate entries that were currently in flight.
+            (entry?.status === "fulfilled" /* fulfilled */ || entry?.status === "rejected" /* rejected */) && // only rehydrate endpoints that were persisted using a `fixedCacheKey`
+            key !== entry?.requestId
+          ) {
+            draft[key] = entry;
+          }
+        }
+      });
+    }
+  });
+  const initialInvalidationState = {
+    tags: {},
+    keys: {}
+  };
+  const invalidationSlice = (0, import_toolkit.createSlice)({
+    name: `${reducerPath}/invalidation`,
+    initialState: initialInvalidationState,
+    reducers: {
+      updateProvidedBy: {
+        reducer(draft, action) {
+          for (const {
+            queryCacheKey,
+            providedTags
+          } of action.payload) {
+            removeCacheKeyFromTags(draft, queryCacheKey);
+            for (const {
+              type,
+              id
+            } of providedTags) {
+              const subscribedQueries = (draft.tags[type] ??= {})[id || "__internal_without_id"] ??= [];
+              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);
+              if (!alreadySubscribed) {
+                subscribedQueries.push(queryCacheKey);
+              }
+            }
+            draft.keys[queryCacheKey] = providedTags;
+          }
+        },
+        prepare: (0, import_toolkit.prepareAutoBatched)()
+      }
+    },
+    extraReducers(builder) {
+      builder.addCase(querySlice.actions.removeQueryResult, (draft, {
+        payload: {
+          queryCacheKey
+        }
+      }) => {
+        removeCacheKeyFromTags(draft, queryCacheKey);
+      }).addMatcher(hasRehydrationInfo, (draft, action) => {
+        const {
+          provided
+        } = extractRehydrationInfo(action);
+        for (const [type, incomingTags] of Object.entries(provided)) {
+          for (const [id, cacheKeys] of Object.entries(incomingTags)) {
+            const subscribedQueries = (draft.tags[type] ??= {})[id || "__internal_without_id"] ??= [];
+            for (const queryCacheKey of cacheKeys) {
+              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);
+              if (!alreadySubscribed) {
+                subscribedQueries.push(queryCacheKey);
+              }
+            }
+          }
+        }
+      }).addMatcher((0, import_toolkit.isAnyOf)((0, import_toolkit.isFulfilled)(queryThunk), (0, import_toolkit.isRejectedWithValue)(queryThunk)), (draft, action) => {
+        writeProvidedTagsForQueries(draft, [action]);
+      }).addMatcher(querySlice.actions.cacheEntriesUpserted.match, (draft, action) => {
+        const mockActions = action.payload.map(({
+          queryDescription,
+          value
+        }) => {
+          return {
+            type: "UNKNOWN",
+            payload: value,
+            meta: {
+              requestStatus: "fulfilled",
+              requestId: "UNKNOWN",
+              arg: queryDescription
+            }
+          };
+        });
+        writeProvidedTagsForQueries(draft, mockActions);
+      });
+    }
+  });
+  function removeCacheKeyFromTags(draft, queryCacheKey) {
+    const existingTags = draft.keys[queryCacheKey] ?? [];
+    for (const tag of existingTags) {
+      const tagType = tag.type;
+      const tagId = tag.id ?? "__internal_without_id";
+      const tagSubscriptions = draft.tags[tagType]?.[tagId];
+      if (tagSubscriptions) {
+        draft.tags[tagType][tagId] = tagSubscriptions.filter((qc) => qc !== queryCacheKey);
+      }
+    }
+    delete draft.keys[queryCacheKey];
+  }
+  function writeProvidedTagsForQueries(draft, actions2) {
+    const providedByEntries = actions2.map((action) => {
+      const providedTags = calculateProvidedByThunk(action, "providesTags", definitions, assertTagType);
+      const {
+        queryCacheKey
+      } = action.meta.arg;
+      return {
+        queryCacheKey,
+        providedTags
+      };
+    });
+    invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy(providedByEntries));
+  }
+  const subscriptionSlice = (0, import_toolkit.createSlice)({
+    name: `${reducerPath}/subscriptions`,
+    initialState,
+    reducers: {
+      updateSubscriptionOptions(d, a) {
+      },
+      unsubscribeQueryResult(d, a) {
+      },
+      internal_getRTKQSubscriptions() {
+      }
+    }
+  });
+  const internalSubscriptionsSlice = (0, import_toolkit.createSlice)({
+    name: `${reducerPath}/internalSubscriptions`,
+    initialState,
+    reducers: {
+      subscriptionsUpdated: {
+        reducer(state, action) {
+          return (0, import_immer3.applyPatches)(state, action.payload);
+        },
+        prepare: (0, import_toolkit.prepareAutoBatched)()
+      }
+    }
+  });
+  const configSlice = (0, import_toolkit.createSlice)({
+    name: `${reducerPath}/config`,
+    initialState: {
+      online: isOnline(),
+      focused: isDocumentVisible(),
+      middlewareRegistered: false,
+      ...config
+    },
+    reducers: {
+      middlewareRegistered(state, {
+        payload
+      }) {
+        state.middlewareRegistered = state.middlewareRegistered === "conflict" || apiUid !== payload ? "conflict" : true;
+      }
+    },
+    extraReducers: (builder) => {
+      builder.addCase(onOnline, (state) => {
+        state.online = true;
+      }).addCase(onOffline, (state) => {
+        state.online = false;
+      }).addCase(onFocus, (state) => {
+        state.focused = true;
+      }).addCase(onFocusLost, (state) => {
+        state.focused = false;
+      }).addMatcher(hasRehydrationInfo, (draft) => ({
+        ...draft
+      }));
+    }
+  });
+  const combinedReducer = (0, import_toolkit.combineReducers)({
+    queries: querySlice.reducer,
+    mutations: mutationSlice.reducer,
+    provided: invalidationSlice.reducer,
+    subscriptions: internalSubscriptionsSlice.reducer,
+    config: configSlice.reducer
+  });
+  const reducer = (state, action) => combinedReducer(resetApiState.match(action) ? void 0 : state, action);
+  const actions = {
+    ...configSlice.actions,
+    ...querySlice.actions,
+    ...subscriptionSlice.actions,
+    ...internalSubscriptionsSlice.actions,
+    ...mutationSlice.actions,
+    ...invalidationSlice.actions,
+    resetApiState
+  };
+  return {
+    reducer,
+    actions
+  };
+}
+
+// src/query/core/buildSelectors.ts
+var skipToken = /* @__PURE__ */ Symbol.for("RTKQ/skipToken");
+var initialSubState = {
+  status: "uninitialized" /* uninitialized */
+};
+var defaultQuerySubState = /* @__PURE__ */ (0, import_toolkit.createNextState)(initialSubState, () => {
+});
+var defaultMutationSubState = /* @__PURE__ */ (0, import_toolkit.createNextState)(initialSubState, () => {
+});
+function buildSelectors({
+  serializeQueryArgs,
+  reducerPath,
+  createSelector: createSelector2
+}) {
+  const selectSkippedQuery = (state) => defaultQuerySubState;
+  const selectSkippedMutation = (state) => defaultMutationSubState;
+  return {
+    buildQuerySelector,
+    buildInfiniteQuerySelector,
+    buildMutationSelector,
+    selectInvalidatedBy,
+    selectCachedArgsForQuery,
+    selectApiState,
+    selectQueries,
+    selectMutations,
+    selectQueryEntry,
+    selectConfig
+  };
+  function withRequestFlags(substate) {
+    return {
+      ...substate,
+      ...getRequestStatusFlags(substate.status)
+    };
+  }
+  function selectApiState(rootState) {
+    const state = rootState[reducerPath];
+    if (true) {
+      if (!state) {
+        if (selectApiState.triggered) return state;
+        selectApiState.triggered = true;
+        console.error(`Error: No data found at \`state.${reducerPath}\`. Did you forget to add the reducer to the store?`);
+      }
+    }
+    return state;
+  }
+  function selectQueries(rootState) {
+    return selectApiState(rootState)?.queries;
+  }
+  function selectQueryEntry(rootState, cacheKey) {
+    return selectQueries(rootState)?.[cacheKey];
+  }
+  function selectMutations(rootState) {
+    return selectApiState(rootState)?.mutations;
+  }
+  function selectConfig(rootState) {
+    return selectApiState(rootState)?.config;
+  }
+  function buildAnyQuerySelector(endpointName, endpointDefinition, combiner) {
+    return (queryArgs) => {
+      if (queryArgs === skipToken) {
+        return createSelector2(selectSkippedQuery, combiner);
+      }
+      const serializedArgs = serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      });
+      const selectQuerySubstate = (state) => selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState;
+      return createSelector2(selectQuerySubstate, combiner);
+    };
+  }
+  function buildQuerySelector(endpointName, endpointDefinition) {
+    return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags);
+  }
+  function buildInfiniteQuerySelector(endpointName, endpointDefinition) {
+    const {
+      infiniteQueryOptions
+    } = endpointDefinition;
+    function withInfiniteQueryResultFlags(substate) {
+      const stateWithRequestFlags = {
+        ...substate,
+        ...getRequestStatusFlags(substate.status)
+      };
+      const {
+        isLoading,
+        isError,
+        direction
+      } = stateWithRequestFlags;
+      const isForward = direction === "forward";
+      const isBackward = direction === "backward";
+      return {
+        ...stateWithRequestFlags,
+        hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),
+        hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),
+        isFetchingNextPage: isLoading && isForward,
+        isFetchingPreviousPage: isLoading && isBackward,
+        isFetchNextPageError: isError && isForward,
+        isFetchPreviousPageError: isError && isBackward
+      };
+    }
+    return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags);
+  }
+  function buildMutationSelector() {
+    return (id) => {
+      let mutationId;
+      if (typeof id === "object") {
+        mutationId = getMutationCacheKey(id) ?? skipToken;
+      } else {
+        mutationId = id;
+      }
+      const selectMutationSubstate = (state) => selectApiState(state)?.mutations?.[mutationId] ?? defaultMutationSubState;
+      const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;
+      return createSelector2(finalSelectMutationSubstate, withRequestFlags);
+    };
+  }
+  function selectInvalidatedBy(state, tags) {
+    const apiState = state[reducerPath];
+    const toInvalidate = /* @__PURE__ */ new Set();
+    for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {
+      const provided = apiState.provided.tags[tag.type];
+      if (!provided) {
+        continue;
+      }
+      let invalidateSubscriptions = (tag.id !== void 0 ? (
+        // id given: invalidate all queries that provide this type & id
+        provided[tag.id]
+      ) : (
+        // no id: invalidate all queries that provide this type
+        flatten(Object.values(provided))
+      )) ?? [];
+      for (const invalidate of invalidateSubscriptions) {
+        toInvalidate.add(invalidate);
+      }
+    }
+    return flatten(Array.from(toInvalidate.values()).map((queryCacheKey) => {
+      const querySubState = apiState.queries[queryCacheKey];
+      return querySubState ? [{
+        queryCacheKey,
+        endpointName: querySubState.endpointName,
+        originalArgs: querySubState.originalArgs
+      }] : [];
+    }));
+  }
+  function selectCachedArgsForQuery(state, queryName) {
+    return Object.values(selectQueries(state)).filter((entry) => entry?.endpointName === queryName && entry.status !== "uninitialized" /* uninitialized */).map((entry) => entry.originalArgs);
+  }
+  function getHasNextPage(options, data, queryArg) {
+    if (!data) return false;
+    return getNextPageParam(options, data, queryArg) != null;
+  }
+  function getHasPreviousPage(options, data, queryArg) {
+    if (!data || !options.getPreviousPageParam) return false;
+    return getPreviousPageParam(options, data, queryArg) != null;
+  }
+}
+
+// src/query/createApi.ts
+var import_toolkit3 = require("@reduxjs/toolkit");
+
+// src/query/defaultSerializeQueryArgs.ts
+var cache = WeakMap ? /* @__PURE__ */ new WeakMap() : void 0;
+var defaultSerializeQueryArgs = ({
+  endpointName,
+  queryArgs
+}) => {
+  let serialized = "";
+  const cached = cache?.get(queryArgs);
+  if (typeof cached === "string") {
+    serialized = cached;
+  } else {
+    const stringified = JSON.stringify(queryArgs, (key, value) => {
+      value = typeof value === "bigint" ? {
+        $bigint: value.toString()
+      } : value;
+      value = (0, import_toolkit.isPlainObject)(value) ? Object.keys(value).sort().reduce((acc, key2) => {
+        acc[key2] = value[key2];
+        return acc;
+      }, {}) : value;
+      return value;
+    });
+    if ((0, import_toolkit.isPlainObject)(queryArgs)) {
+      cache?.set(queryArgs, stringified);
+    }
+    serialized = stringified;
+  }
+  return `${endpointName}(${serialized})`;
+};
+
+// src/query/createApi.ts
+var import_reselect = require("reselect");
+function buildCreateApi(...modules) {
+  return function baseCreateApi(options) {
+    const extractRehydrationInfo = (0, import_reselect.weakMapMemoize)((action) => options.extractRehydrationInfo?.(action, {
+      reducerPath: options.reducerPath ?? "api"
+    }));
+    const optionsWithDefaults = {
+      reducerPath: "api",
+      keepUnusedDataFor: 60,
+      refetchOnMountOrArgChange: false,
+      refetchOnFocus: false,
+      refetchOnReconnect: false,
+      invalidationBehavior: "delayed",
+      ...options,
+      extractRehydrationInfo,
+      serializeQueryArgs(queryArgsApi) {
+        let finalSerializeQueryArgs = defaultSerializeQueryArgs;
+        if ("serializeQueryArgs" in queryArgsApi.endpointDefinition) {
+          const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs;
+          finalSerializeQueryArgs = (queryArgsApi2) => {
+            const initialResult = endpointSQA(queryArgsApi2);
+            if (typeof initialResult === "string") {
+              return initialResult;
+            } else {
+              return defaultSerializeQueryArgs({
+                ...queryArgsApi2,
+                queryArgs: initialResult
+              });
+            }
+          };
+        } else if (options.serializeQueryArgs) {
+          finalSerializeQueryArgs = options.serializeQueryArgs;
+        }
+        return finalSerializeQueryArgs(queryArgsApi);
+      },
+      tagTypes: [...options.tagTypes || []]
+    };
+    const context = {
+      endpointDefinitions: {},
+      batch(fn) {
+        fn();
+      },
+      apiUid: (0, import_toolkit.nanoid)(),
+      extractRehydrationInfo,
+      hasRehydrationInfo: (0, import_reselect.weakMapMemoize)((action) => extractRehydrationInfo(action) != null)
+    };
+    const api = {
+      injectEndpoints,
+      enhanceEndpoints({
+        addTagTypes,
+        endpoints
+      }) {
+        if (addTagTypes) {
+          for (const eT of addTagTypes) {
+            if (!optionsWithDefaults.tagTypes.includes(eT)) {
+              ;
+              optionsWithDefaults.tagTypes.push(eT);
+            }
+          }
+        }
+        if (endpoints) {
+          for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {
+            if (typeof partialDefinition === "function") {
+              partialDefinition(context.endpointDefinitions[endpointName]);
+            } else {
+              Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);
+            }
+          }
+        }
+        return api;
+      }
+    };
+    const initializedModules = modules.map((m) => m.init(api, optionsWithDefaults, context));
+    function injectEndpoints(inject) {
+      const evaluatedEndpoints = inject.endpoints({
+        query: (x) => ({
+          ...x,
+          type: "query" /* query */
+        }),
+        mutation: (x) => ({
+          ...x,
+          type: "mutation" /* mutation */
+        }),
+        infiniteQuery: (x) => ({
+          ...x,
+          type: "infinitequery" /* infinitequery */
+        })
+      });
+      for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {
+        if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {
+          if (inject.overrideExisting === "throw") {
+            throw new Error(false ? _formatProdErrorMessage2(39) : `called \`injectEndpoints\` to override already-existing endpointName ${endpointName} without specifying \`overrideExisting: true\``);
+          } else if (typeof process !== "undefined" && true) {
+            console.error(`called \`injectEndpoints\` to override already-existing endpointName ${endpointName} without specifying \`overrideExisting: true\``);
+          }
+          continue;
+        }
+        if (typeof process !== "undefined" && true) {
+          if (isInfiniteQueryDefinition(definition)) {
+            const {
+              infiniteQueryOptions
+            } = definition;
+            const {
+              maxPages,
+              getPreviousPageParam: getPreviousPageParam2
+            } = infiniteQueryOptions;
+            if (typeof maxPages === "number") {
+              if (maxPages < 1) {
+                throw new Error(false ? _formatProdErrorMessage22(40) : `maxPages for endpoint '${endpointName}' must be a number greater than 0`);
+              }
+              if (typeof getPreviousPageParam2 !== "function") {
+                throw new Error(false ? _formatProdErrorMessage3(41) : `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`);
+              }
+            }
+          }
+        }
+        context.endpointDefinitions[endpointName] = definition;
+        for (const m of initializedModules) {
+          m.injectEndpoint(endpointName, definition);
+        }
+      }
+      return api;
+    }
+    return api.injectEndpoints({
+      endpoints: options.endpoints
+    });
+  };
+}
+
+// src/query/fakeBaseQuery.ts
+var import_toolkit4 = require("@reduxjs/toolkit");
+var _NEVER = /* @__PURE__ */ Symbol();
+function fakeBaseQuery() {
+  return function() {
+    throw new Error(false ? _formatProdErrorMessage4(33) : "When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.");
+  };
+}
+
+// src/query/core/module.ts
+var import_immer5 = require("immer");
+
+// src/query/tsHelpers.ts
+function assertCast(v) {
+}
+function safeAssign(target, ...args) {
+  return Object.assign(target, ...args);
+}
+
+// src/query/core/buildMiddleware/batchActions.ts
+var import_immer4 = require("immer");
+var buildBatchedActionsHandler = ({
+  api,
+  queryThunk,
+  internalState
+}) => {
+  const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;
+  let previousSubscriptions = null;
+  let updateSyncTimer = null;
+  const {
+    updateSubscriptionOptions,
+    unsubscribeQueryResult
+  } = api.internalActions;
+  const actuallyMutateSubscriptions = (mutableState, action) => {
+    if (updateSubscriptionOptions.match(action)) {
+      const {
+        queryCacheKey,
+        requestId,
+        options
+      } = action.payload;
+      if (mutableState?.[queryCacheKey]?.[requestId]) {
+        mutableState[queryCacheKey][requestId] = options;
+      }
+      return true;
+    }
+    if (unsubscribeQueryResult.match(action)) {
+      const {
+        queryCacheKey,
+        requestId
+      } = action.payload;
+      if (mutableState[queryCacheKey]) {
+        delete mutableState[queryCacheKey][requestId];
+      }
+      return true;
+    }
+    if (api.internalActions.removeQueryResult.match(action)) {
+      delete mutableState[action.payload.queryCacheKey];
+      return true;
+    }
+    if (queryThunk.pending.match(action)) {
+      const {
+        meta: {
+          arg,
+          requestId
+        }
+      } = action;
+      const substate = mutableState[arg.queryCacheKey] ??= {};
+      substate[`${requestId}_running`] = {};
+      if (arg.subscribe) {
+        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};
+      }
+      return true;
+    }
+    let mutated = false;
+    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {
+      const state = mutableState[action.meta.arg.queryCacheKey] || {};
+      const key = `${action.meta.requestId}_running`;
+      mutated ||= !!state[key];
+      delete state[key];
+    }
+    if (queryThunk.rejected.match(action)) {
+      const {
+        meta: {
+          condition,
+          arg,
+          requestId
+        }
+      } = action;
+      if (condition && arg.subscribe) {
+        const substate = mutableState[arg.queryCacheKey] ??= {};
+        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};
+        mutated = true;
+      }
+    }
+    return mutated;
+  };
+  const getSubscriptions = () => internalState.currentSubscriptions;
+  const getSubscriptionCount = (queryCacheKey) => {
+    const subscriptions = getSubscriptions();
+    const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {};
+    return countObjectKeys(subscriptionsForQueryArg);
+  };
+  const isRequestSubscribed = (queryCacheKey, requestId) => {
+    const subscriptions = getSubscriptions();
+    return !!subscriptions?.[queryCacheKey]?.[requestId];
+  };
+  const subscriptionSelectors = {
+    getSubscriptions,
+    getSubscriptionCount,
+    isRequestSubscribed
+  };
+  return (action, mwApi) => {
+    if (!previousSubscriptions) {
+      previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));
+    }
+    if (api.util.resetApiState.match(action)) {
+      previousSubscriptions = internalState.currentSubscriptions = {};
+      updateSyncTimer = null;
+      return [true, false];
+    }
+    if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {
+      return [false, subscriptionSelectors];
+    }
+    const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);
+    let actionShouldContinue = true;
+    if (didMutate) {
+      if (!updateSyncTimer) {
+        updateSyncTimer = setTimeout(() => {
+          const newSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));
+          const [, patches] = (0, import_immer4.produceWithPatches)(previousSubscriptions, () => newSubscriptions);
+          mwApi.next(api.internalActions.subscriptionsUpdated(patches));
+          previousSubscriptions = newSubscriptions;
+          updateSyncTimer = null;
+        }, 500);
+      }
+      const isSubscriptionSliceAction = typeof action.type == "string" && !!action.type.startsWith(subscriptionsPrefix);
+      const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;
+      actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;
+    }
+    return [actionShouldContinue, false];
+  };
+};
+
+// src/query/core/buildMiddleware/cacheCollection.ts
+function isObjectEmpty(obj) {
+  for (const k in obj) {
+    return false;
+  }
+  return true;
+}
+var THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2147483647 / 1e3 - 1;
+var buildCacheCollectionHandler = ({
+  reducerPath,
+  api,
+  queryThunk,
+  context,
+  internalState,
+  selectors: {
+    selectQueryEntry,
+    selectConfig
+  }
+}) => {
+  const {
+    removeQueryResult,
+    unsubscribeQueryResult,
+    cacheEntriesUpserted
+  } = api.internalActions;
+  const canTriggerUnsubscribe = (0, import_toolkit.isAnyOf)(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);
+  function anySubscriptionsRemainingForKey(queryCacheKey) {
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    return !!subscriptions && !isObjectEmpty(subscriptions);
+  }
+  const currentRemovalTimeouts = {};
+  const handler = (action, mwApi, internalState2) => {
+    const state = mwApi.getState();
+    const config = selectConfig(state);
+    if (canTriggerUnsubscribe(action)) {
+      let queryCacheKeys;
+      if (cacheEntriesUpserted.match(action)) {
+        queryCacheKeys = action.payload.map((entry) => entry.queryDescription.queryCacheKey);
+      } else {
+        const {
+          queryCacheKey
+        } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;
+        queryCacheKeys = [queryCacheKey];
+      }
+      handleUnsubscribeMany(queryCacheKeys, mwApi, config);
+    }
+    if (api.util.resetApiState.match(action)) {
+      for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {
+        if (timeout) clearTimeout(timeout);
+        delete currentRemovalTimeouts[key];
+      }
+    }
+    if (context.hasRehydrationInfo(action)) {
+      const {
+        queries
+      } = context.extractRehydrationInfo(action);
+      handleUnsubscribeMany(Object.keys(queries), mwApi, config);
+    }
+  };
+  function handleUnsubscribeMany(cacheKeys, api2, config) {
+    const state = api2.getState();
+    for (const queryCacheKey of cacheKeys) {
+      const entry = selectQueryEntry(state, queryCacheKey);
+      handleUnsubscribe(queryCacheKey, entry?.endpointName, api2, config);
+    }
+  }
+  function handleUnsubscribe(queryCacheKey, endpointName, api2, config) {
+    const endpointDefinition = context.endpointDefinitions[endpointName];
+    const keepUnusedDataFor = endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor;
+    if (keepUnusedDataFor === Infinity) {
+      return;
+    }
+    const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));
+    if (!anySubscriptionsRemainingForKey(queryCacheKey)) {
+      const currentTimeout = currentRemovalTimeouts[queryCacheKey];
+      if (currentTimeout) {
+        clearTimeout(currentTimeout);
+      }
+      currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {
+        if (!anySubscriptionsRemainingForKey(queryCacheKey)) {
+          api2.dispatch(removeQueryResult({
+            queryCacheKey
+          }));
+        }
+        delete currentRemovalTimeouts[queryCacheKey];
+      }, finalKeepUnusedDataFor * 1e3);
+    }
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/cacheLifecycle.ts
+var neverResolvedError = new Error("Promise never resolved before cacheEntryRemoved.");
+var buildCacheLifecycleHandler = ({
+  api,
+  reducerPath,
+  context,
+  queryThunk,
+  mutationThunk,
+  internalState,
+  selectors: {
+    selectQueryEntry,
+    selectApiState
+  }
+}) => {
+  const isQueryThunk = (0, import_toolkit.isAsyncThunkAction)(queryThunk);
+  const isMutationThunk = (0, import_toolkit.isAsyncThunkAction)(mutationThunk);
+  const isFulfilledThunk = (0, import_toolkit.isFulfilled)(queryThunk, mutationThunk);
+  const lifecycleMap = {};
+  function resolveLifecycleEntry(cacheKey, data, meta) {
+    const lifecycle = lifecycleMap[cacheKey];
+    if (lifecycle?.valueResolved) {
+      lifecycle.valueResolved({
+        data,
+        meta
+      });
+      delete lifecycle.valueResolved;
+    }
+  }
+  function removeLifecycleEntry(cacheKey) {
+    const lifecycle = lifecycleMap[cacheKey];
+    if (lifecycle) {
+      delete lifecycleMap[cacheKey];
+      lifecycle.cacheEntryRemoved();
+    }
+  }
+  const handler = (action, mwApi, stateBefore) => {
+    const cacheKey = getCacheKey(action);
+    function checkForNewCacheKey(endpointName, cacheKey2, requestId, originalArgs) {
+      const oldEntry = selectQueryEntry(stateBefore, cacheKey2);
+      const newEntry = selectQueryEntry(mwApi.getState(), cacheKey2);
+      if (!oldEntry && newEntry) {
+        handleNewKey(endpointName, originalArgs, cacheKey2, mwApi, requestId);
+      }
+    }
+    if (queryThunk.pending.match(action)) {
+      checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);
+    } else if (api.internalActions.cacheEntriesUpserted.match(action)) {
+      for (const {
+        queryDescription,
+        value
+      } of action.payload) {
+        const {
+          endpointName,
+          originalArgs,
+          queryCacheKey
+        } = queryDescription;
+        checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);
+        resolveLifecycleEntry(queryCacheKey, value, {});
+      }
+    } else if (mutationThunk.pending.match(action)) {
+      const state = mwApi.getState()[reducerPath].mutations[cacheKey];
+      if (state) {
+        handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);
+      }
+    } else if (isFulfilledThunk(action)) {
+      resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);
+    } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {
+      removeLifecycleEntry(cacheKey);
+    } else if (api.util.resetApiState.match(action)) {
+      for (const cacheKey2 of Object.keys(lifecycleMap)) {
+        removeLifecycleEntry(cacheKey2);
+      }
+    }
+  };
+  function getCacheKey(action) {
+    if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;
+    if (isMutationThunk(action)) {
+      return action.meta.arg.fixedCacheKey ?? action.meta.requestId;
+    }
+    if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;
+    if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);
+    return "";
+  }
+  function handleNewKey(endpointName, originalArgs, queryCacheKey, mwApi, requestId) {
+    const endpointDefinition = context.endpointDefinitions[endpointName];
+    const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded;
+    if (!onCacheEntryAdded) return;
+    const lifecycle = {};
+    const cacheEntryRemoved = new Promise((resolve) => {
+      lifecycle.cacheEntryRemoved = resolve;
+    });
+    const cacheDataLoaded = Promise.race([new Promise((resolve) => {
+      lifecycle.valueResolved = resolve;
+    }), cacheEntryRemoved.then(() => {
+      throw neverResolvedError;
+    })]);
+    cacheDataLoaded.catch(() => {
+    });
+    lifecycleMap[queryCacheKey] = lifecycle;
+    const selector = api.endpoints[endpointName].select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : queryCacheKey);
+    const extra = mwApi.dispatch((_, __, extra2) => extra2);
+    const lifecycleApi = {
+      ...mwApi,
+      getCacheEntry: () => selector(mwApi.getState()),
+      requestId,
+      extra,
+      updateCachedData: isAnyQueryDefinition(endpointDefinition) ? (updateRecipe) => mwApi.dispatch(api.util.updateQueryData(endpointName, originalArgs, updateRecipe)) : void 0,
+      cacheDataLoaded,
+      cacheEntryRemoved
+    };
+    const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi);
+    Promise.resolve(runningHandler).catch((e) => {
+      if (e === neverResolvedError) return;
+      throw e;
+    });
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/devMiddleware.ts
+var buildDevCheckHandler = ({
+  api,
+  context: {
+    apiUid
+  },
+  reducerPath
+}) => {
+  return (action, mwApi) => {
+    if (api.util.resetApiState.match(action)) {
+      mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));
+    }
+    if (typeof process !== "undefined" && true) {
+      if (api.internalActions.middlewareRegistered.match(action) && action.payload === apiUid && mwApi.getState()[reducerPath]?.config?.middlewareRegistered === "conflict") {
+        console.warn(`There is a mismatch between slice and middleware for the reducerPath "${reducerPath}".
+You can only have one api per reducer path, this will lead to crashes in various situations!${reducerPath === "api" ? `
+If you have multiple apis, you *have* to specify the reducerPath option when using createApi!` : ""}`);
+      }
+    }
+  };
+};
+
+// src/query/core/buildMiddleware/invalidationByTags.ts
+var buildInvalidationByTagsHandler = ({
+  reducerPath,
+  context,
+  context: {
+    endpointDefinitions
+  },
+  mutationThunk,
+  queryThunk,
+  api,
+  assertTagType,
+  refetchQuery,
+  internalState
+}) => {
+  const {
+    removeQueryResult
+  } = api.internalActions;
+  const isThunkActionWithTags = (0, import_toolkit.isAnyOf)((0, import_toolkit.isFulfilled)(mutationThunk), (0, import_toolkit.isRejectedWithValue)(mutationThunk));
+  const isQueryEnd = (0, import_toolkit.isAnyOf)((0, import_toolkit.isFulfilled)(mutationThunk, queryThunk), (0, import_toolkit.isRejected)(mutationThunk, queryThunk));
+  let pendingTagInvalidations = [];
+  const handler = (action, mwApi) => {
+    if (isThunkActionWithTags(action)) {
+      invalidateTags(calculateProvidedByThunk(action, "invalidatesTags", endpointDefinitions, assertTagType), mwApi);
+    } else if (isQueryEnd(action)) {
+      invalidateTags([], mwApi);
+    } else if (api.util.invalidateTags.match(action)) {
+      invalidateTags(calculateProvidedBy(action.payload, void 0, void 0, void 0, void 0, assertTagType), mwApi);
+    }
+  };
+  function hasPendingRequests(state) {
+    const {
+      queries,
+      mutations
+    } = state;
+    for (const cacheRecord of [queries, mutations]) {
+      for (const key in cacheRecord) {
+        if (cacheRecord[key]?.status === "pending" /* pending */) return true;
+      }
+    }
+    return false;
+  }
+  function invalidateTags(newTags, mwApi) {
+    const rootState = mwApi.getState();
+    const state = rootState[reducerPath];
+    pendingTagInvalidations.push(...newTags);
+    if (state.config.invalidationBehavior === "delayed" && hasPendingRequests(state)) {
+      return;
+    }
+    const tags = pendingTagInvalidations;
+    pendingTagInvalidations = [];
+    if (tags.length === 0) return;
+    const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);
+    context.batch(() => {
+      const valuesArray = Array.from(toInvalidate.values());
+      for (const {
+        queryCacheKey
+      } of valuesArray) {
+        const querySubState = state.queries[queryCacheKey];
+        const subscriptionSubState = internalState.currentSubscriptions[queryCacheKey] ?? {};
+        if (querySubState) {
+          if (countObjectKeys(subscriptionSubState) === 0) {
+            mwApi.dispatch(removeQueryResult({
+              queryCacheKey
+            }));
+          } else if (querySubState.status !== "uninitialized" /* uninitialized */) {
+            mwApi.dispatch(refetchQuery(querySubState));
+          }
+        }
+      }
+    });
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/polling.ts
+var buildPollingHandler = ({
+  reducerPath,
+  queryThunk,
+  api,
+  refetchQuery,
+  internalState
+}) => {
+  const currentPolls = {};
+  const handler = (action, mwApi) => {
+    if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {
+      updatePollingInterval(action.payload, mwApi);
+    }
+    if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {
+      updatePollingInterval(action.meta.arg, mwApi);
+    }
+    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {
+      startNextPoll(action.meta.arg, mwApi);
+    }
+    if (api.util.resetApiState.match(action)) {
+      clearPolls();
+    }
+  };
+  function getCacheEntrySubscriptions(queryCacheKey, api2) {
+    const state = api2.getState()[reducerPath];
+    const querySubState = state.queries[queryCacheKey];
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) return;
+    return subscriptions;
+  }
+  function startNextPoll({
+    queryCacheKey
+  }, api2) {
+    const state = api2.getState()[reducerPath];
+    const querySubState = state.queries[queryCacheKey];
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) return;
+    const {
+      lowestPollingInterval,
+      skipPollingIfUnfocused
+    } = findLowestPollingInterval(subscriptions);
+    if (!Number.isFinite(lowestPollingInterval)) return;
+    const currentPoll = currentPolls[queryCacheKey];
+    if (currentPoll?.timeout) {
+      clearTimeout(currentPoll.timeout);
+      currentPoll.timeout = void 0;
+    }
+    const nextPollTimestamp = Date.now() + lowestPollingInterval;
+    currentPolls[queryCacheKey] = {
+      nextPollTimestamp,
+      pollingInterval: lowestPollingInterval,
+      timeout: setTimeout(() => {
+        if (state.config.focused || !skipPollingIfUnfocused) {
+          api2.dispatch(refetchQuery(querySubState));
+        }
+        startNextPoll({
+          queryCacheKey
+        }, api2);
+      }, lowestPollingInterval)
+    };
+  }
+  function updatePollingInterval({
+    queryCacheKey
+  }, api2) {
+    const state = api2.getState()[reducerPath];
+    const querySubState = state.queries[queryCacheKey];
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) {
+      return;
+    }
+    const {
+      lowestPollingInterval
+    } = findLowestPollingInterval(subscriptions);
+    if (!Number.isFinite(lowestPollingInterval)) {
+      cleanupPollForKey(queryCacheKey);
+      return;
+    }
+    const currentPoll = currentPolls[queryCacheKey];
+    const nextPollTimestamp = Date.now() + lowestPollingInterval;
+    if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {
+      startNextPoll({
+        queryCacheKey
+      }, api2);
+    }
+  }
+  function cleanupPollForKey(key) {
+    const existingPoll = currentPolls[key];
+    if (existingPoll?.timeout) {
+      clearTimeout(existingPoll.timeout);
+    }
+    delete currentPolls[key];
+  }
+  function clearPolls() {
+    for (const key of Object.keys(currentPolls)) {
+      cleanupPollForKey(key);
+    }
+  }
+  function findLowestPollingInterval(subscribers = {}) {
+    let skipPollingIfUnfocused = false;
+    let lowestPollingInterval = Number.POSITIVE_INFINITY;
+    for (let key in subscribers) {
+      if (!!subscribers[key].pollingInterval) {
+        lowestPollingInterval = Math.min(subscribers[key].pollingInterval, lowestPollingInterval);
+        skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;
+      }
+    }
+    return {
+      lowestPollingInterval,
+      skipPollingIfUnfocused
+    };
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/queryLifecycle.ts
+var buildQueryLifecycleHandler = ({
+  api,
+  context,
+  queryThunk,
+  mutationThunk
+}) => {
+  const isPendingThunk = (0, import_toolkit.isPending)(queryThunk, mutationThunk);
+  const isRejectedThunk = (0, import_toolkit.isRejected)(queryThunk, mutationThunk);
+  const isFullfilledThunk = (0, import_toolkit.isFulfilled)(queryThunk, mutationThunk);
+  const lifecycleMap = {};
+  const handler = (action, mwApi) => {
+    if (isPendingThunk(action)) {
+      const {
+        requestId,
+        arg: {
+          endpointName,
+          originalArgs
+        }
+      } = action.meta;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      const onQueryStarted = endpointDefinition?.onQueryStarted;
+      if (onQueryStarted) {
+        const lifecycle = {};
+        const queryFulfilled = new Promise((resolve, reject) => {
+          lifecycle.resolve = resolve;
+          lifecycle.reject = reject;
+        });
+        queryFulfilled.catch(() => {
+        });
+        lifecycleMap[requestId] = lifecycle;
+        const selector = api.endpoints[endpointName].select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : requestId);
+        const extra = mwApi.dispatch((_, __, extra2) => extra2);
+        const lifecycleApi = {
+          ...mwApi,
+          getCacheEntry: () => selector(mwApi.getState()),
+          requestId,
+          extra,
+          updateCachedData: isAnyQueryDefinition(endpointDefinition) ? (updateRecipe) => mwApi.dispatch(api.util.updateQueryData(endpointName, originalArgs, updateRecipe)) : void 0,
+          queryFulfilled
+        };
+        onQueryStarted(originalArgs, lifecycleApi);
+      }
+    } else if (isFullfilledThunk(action)) {
+      const {
+        requestId,
+        baseQueryMeta
+      } = action.meta;
+      lifecycleMap[requestId]?.resolve({
+        data: action.payload,
+        meta: baseQueryMeta
+      });
+      delete lifecycleMap[requestId];
+    } else if (isRejectedThunk(action)) {
+      const {
+        requestId,
+        rejectedWithValue,
+        baseQueryMeta
+      } = action.meta;
+      lifecycleMap[requestId]?.reject({
+        error: action.payload ?? action.error,
+        isUnhandledError: !rejectedWithValue,
+        meta: baseQueryMeta
+      });
+      delete lifecycleMap[requestId];
+    }
+  };
+  return handler;
+};
+
+// src/query/core/buildMiddleware/windowEventHandling.ts
+var buildWindowEventHandler = ({
+  reducerPath,
+  context,
+  api,
+  refetchQuery,
+  internalState
+}) => {
+  const {
+    removeQueryResult
+  } = api.internalActions;
+  const handler = (action, mwApi) => {
+    if (onFocus.match(action)) {
+      refetchValidQueries(mwApi, "refetchOnFocus");
+    }
+    if (onOnline.match(action)) {
+      refetchValidQueries(mwApi, "refetchOnReconnect");
+    }
+  };
+  function refetchValidQueries(api2, type) {
+    const state = api2.getState()[reducerPath];
+    const queries = state.queries;
+    const subscriptions = internalState.currentSubscriptions;
+    context.batch(() => {
+      for (const queryCacheKey of Object.keys(subscriptions)) {
+        const querySubState = queries[queryCacheKey];
+        const subscriptionSubState = subscriptions[queryCacheKey];
+        if (!subscriptionSubState || !querySubState) continue;
+        const shouldRefetch = Object.values(subscriptionSubState).some((sub) => sub[type] === true) || Object.values(subscriptionSubState).every((sub) => sub[type] === void 0) && state.config[type];
+        if (shouldRefetch) {
+          if (countObjectKeys(subscriptionSubState) === 0) {
+            api2.dispatch(removeQueryResult({
+              queryCacheKey
+            }));
+          } else if (querySubState.status !== "uninitialized" /* uninitialized */) {
+            api2.dispatch(refetchQuery(querySubState));
+          }
+        }
+      }
+    });
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/index.ts
+function buildMiddleware(input) {
+  const {
+    reducerPath,
+    queryThunk,
+    api,
+    context
+  } = input;
+  const {
+    apiUid
+  } = context;
+  const actions = {
+    invalidateTags: (0, import_toolkit.createAction)(`${reducerPath}/invalidateTags`)
+  };
+  const isThisApiSliceAction = (action) => action.type.startsWith(`${reducerPath}/`);
+  const handlerBuilders = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];
+  const middleware = (mwApi) => {
+    let initialized2 = false;
+    const internalState = {
+      currentSubscriptions: {}
+    };
+    const builderArgs = {
+      ...input,
+      internalState,
+      refetchQuery,
+      isThisApiSliceAction
+    };
+    const handlers = handlerBuilders.map((build) => build(builderArgs));
+    const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);
+    const windowEventsHandler = buildWindowEventHandler(builderArgs);
+    return (next) => {
+      return (action) => {
+        if (!(0, import_toolkit.isAction)(action)) {
+          return next(action);
+        }
+        if (!initialized2) {
+          initialized2 = true;
+          mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));
+        }
+        const mwApiWithNext = {
+          ...mwApi,
+          next
+        };
+        const stateBefore = mwApi.getState();
+        const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);
+        let res;
+        if (actionShouldContinue) {
+          res = next(action);
+        } else {
+          res = internalProbeResult;
+        }
+        if (!!mwApi.getState()[reducerPath]) {
+          windowEventsHandler(action, mwApiWithNext, stateBefore);
+          if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {
+            for (const handler of handlers) {
+              handler(action, mwApiWithNext, stateBefore);
+            }
+          }
+        }
+        return res;
+      };
+    };
+  };
+  return {
+    middleware,
+    actions
+  };
+  function refetchQuery(querySubState) {
+    return input.api.endpoints[querySubState.endpointName].initiate(querySubState.originalArgs, {
+      subscribe: false,
+      forceRefetch: true
+    });
+  }
+}
+
+// src/query/core/module.ts
+var coreModuleName = /* @__PURE__ */ Symbol();
+var coreModule = ({
+  createSelector: createSelector2 = import_toolkit.createSelector
+} = {}) => ({
+  name: coreModuleName,
+  init(api, {
+    baseQuery,
+    tagTypes,
+    reducerPath,
+    serializeQueryArgs,
+    keepUnusedDataFor,
+    refetchOnMountOrArgChange,
+    refetchOnFocus,
+    refetchOnReconnect,
+    invalidationBehavior,
+    onSchemaFailure,
+    catchSchemaFailure,
+    skipSchemaValidation
+  }, context) {
+    (0, import_immer5.enablePatches)();
+    assertCast(serializeQueryArgs);
+    const assertTagType = (tag) => {
+      if (typeof process !== "undefined" && true) {
+        if (!tagTypes.includes(tag.type)) {
+          console.error(`Tag type '${tag.type}' was used, but not specified in \`tagTypes\`!`);
+        }
+      }
+      return tag;
+    };
+    Object.assign(api, {
+      reducerPath,
+      endpoints: {},
+      internalActions: {
+        onOnline,
+        onOffline,
+        onFocus,
+        onFocusLost
+      },
+      util: {}
+    });
+    const selectors = buildSelectors({
+      serializeQueryArgs,
+      reducerPath,
+      createSelector: createSelector2
+    });
+    const {
+      selectInvalidatedBy,
+      selectCachedArgsForQuery,
+      buildQuerySelector,
+      buildInfiniteQuerySelector,
+      buildMutationSelector
+    } = selectors;
+    safeAssign(api.util, {
+      selectInvalidatedBy,
+      selectCachedArgsForQuery
+    });
+    const {
+      queryThunk,
+      infiniteQueryThunk,
+      mutationThunk,
+      patchQueryData,
+      updateQueryData,
+      upsertQueryData,
+      prefetch,
+      buildMatchThunkActions
+    } = buildThunks({
+      baseQuery,
+      reducerPath,
+      context,
+      api,
+      serializeQueryArgs,
+      assertTagType,
+      selectors,
+      onSchemaFailure,
+      catchSchemaFailure,
+      skipSchemaValidation
+    });
+    const {
+      reducer,
+      actions: sliceActions
+    } = buildSlice({
+      context,
+      queryThunk,
+      infiniteQueryThunk,
+      mutationThunk,
+      serializeQueryArgs,
+      reducerPath,
+      assertTagType,
+      config: {
+        refetchOnFocus,
+        refetchOnReconnect,
+        refetchOnMountOrArgChange,
+        keepUnusedDataFor,
+        reducerPath,
+        invalidationBehavior
+      }
+    });
+    safeAssign(api.util, {
+      patchQueryData,
+      updateQueryData,
+      upsertQueryData,
+      prefetch,
+      resetApiState: sliceActions.resetApiState,
+      upsertQueryEntries: sliceActions.cacheEntriesUpserted
+    });
+    safeAssign(api.internalActions, sliceActions);
+    const {
+      middleware,
+      actions: middlewareActions
+    } = buildMiddleware({
+      reducerPath,
+      context,
+      queryThunk,
+      mutationThunk,
+      infiniteQueryThunk,
+      api,
+      assertTagType,
+      selectors
+    });
+    safeAssign(api.util, middlewareActions);
+    safeAssign(api, {
+      reducer,
+      middleware
+    });
+    const {
+      buildInitiateQuery,
+      buildInitiateInfiniteQuery,
+      buildInitiateMutation,
+      getRunningMutationThunk,
+      getRunningMutationsThunk,
+      getRunningQueriesThunk,
+      getRunningQueryThunk
+    } = buildInitiate({
+      queryThunk,
+      mutationThunk,
+      infiniteQueryThunk,
+      api,
+      serializeQueryArgs,
+      context
+    });
+    safeAssign(api.util, {
+      getRunningMutationThunk,
+      getRunningMutationsThunk,
+      getRunningQueryThunk,
+      getRunningQueriesThunk
+    });
+    return {
+      name: coreModuleName,
+      injectEndpoint(endpointName, definition) {
+        const anyApi = api;
+        const endpoint = anyApi.endpoints[endpointName] ??= {};
+        if (isQueryDefinition(definition)) {
+          safeAssign(endpoint, {
+            name: endpointName,
+            select: buildQuerySelector(endpointName, definition),
+            initiate: buildInitiateQuery(endpointName, definition)
+          }, buildMatchThunkActions(queryThunk, endpointName));
+        }
+        if (isMutationDefinition(definition)) {
+          safeAssign(endpoint, {
+            name: endpointName,
+            select: buildMutationSelector(),
+            initiate: buildInitiateMutation(endpointName)
+          }, buildMatchThunkActions(mutationThunk, endpointName));
+        }
+        if (isInfiniteQueryDefinition(definition)) {
+          safeAssign(endpoint, {
+            name: endpointName,
+            select: buildInfiniteQuerySelector(endpointName, definition),
+            initiate: buildInitiateInfiniteQuery(endpointName, definition)
+          }, buildMatchThunkActions(queryThunk, endpointName));
+        }
+      }
+    };
+  }
+});
+
+// src/query/core/index.ts
+var createApi = /* @__PURE__ */ buildCreateApi(coreModule());
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  NamedSchemaError,
+  QueryStatus,
+  _NEVER,
+  buildCreateApi,
+  copyWithStructuralSharing,
+  coreModule,
+  coreModuleName,
+  createApi,
+  defaultSerializeQueryArgs,
+  fakeBaseQuery,
+  fetchBaseQuery,
+  retry,
+  setupListeners,
+  skipToken
+});
+//# sourceMappingURL=rtk-query.development.cjs.map
Index: node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.development.cjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../../src/query/index.ts","../../../src/query/core/apiState.ts","../../../src/query/core/rtkImports.ts","../../../src/query/utils/copyWithStructuralSharing.ts","../../../src/query/utils/countObjectKeys.ts","../../../src/query/utils/flatten.ts","../../../src/query/utils/isAbsoluteUrl.ts","../../../src/query/utils/isDocumentVisible.ts","../../../src/query/utils/isNotNullish.ts","../../../src/query/utils/isOnline.ts","../../../src/query/utils/joinUrls.ts","../../../src/query/utils/getOrInsert.ts","../../../src/query/fetchBaseQuery.ts","../../../src/query/HandledError.ts","../../../src/query/retry.ts","../../../src/query/core/setupListeners.ts","../../../src/query/endpointDefinitions.ts","../../../src/query/core/buildThunks.ts","../../../src/query/core/buildInitiate.ts","../../../src/tsHelpers.ts","../../../src/query/standardSchema.ts","../../../src/query/core/buildSlice.ts","../../../src/query/core/buildSelectors.ts","../../../src/query/createApi.ts","../../../src/query/defaultSerializeQueryArgs.ts","../../../src/query/fakeBaseQuery.ts","../../../src/query/core/module.ts","../../../src/query/tsHelpers.ts","../../../src/query/core/buildMiddleware/batchActions.ts","../../../src/query/core/buildMiddleware/cacheCollection.ts","../../../src/query/core/buildMiddleware/cacheLifecycle.ts","../../../src/query/core/buildMiddleware/devMiddleware.ts","../../../src/query/core/buildMiddleware/invalidationByTags.ts","../../../src/query/core/buildMiddleware/polling.ts","../../../src/query/core/buildMiddleware/queryLifecycle.ts","../../../src/query/core/buildMiddleware/windowEventHandling.ts","../../../src/query/core/buildMiddleware/index.ts","../../../src/query/core/index.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nexport type { CombinedState, QueryCacheKey, QueryKeys, QuerySubState, RootState, SubscriptionOptions } from './core/apiState';\nexport { QueryStatus } from './core/apiState';\nexport type { Api, ApiContext, Module } from './apiTypes';\nexport type { BaseQueryApi, BaseQueryArg, BaseQueryEnhancer, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nexport type { BaseEndpointDefinition, EndpointDefinitions, EndpointDefinition, EndpointBuilder, QueryDefinition, MutationDefinition, MutationExtraOptions, InfiniteQueryArgFrom, InfiniteQueryDefinition, InfiniteQueryExtraOptions, PageParamFrom, TagDescription, QueryArgFrom, QueryExtraOptions, ResultTypeFrom, DefinitionType, DefinitionsFromApi, OverrideResultType, ResultDescription, TagTypesFromApi, UpdateDefinitions, SchemaFailureHandler, SchemaFailureConverter, SchemaFailureInfo } from './endpointDefinitions';\nexport { fetchBaseQuery } from './fetchBaseQuery';\nexport type { FetchBaseQueryArgs, FetchBaseQueryError, FetchBaseQueryMeta, FetchArgs } from './fetchBaseQuery';\nexport { retry } from './retry';\nexport type { RetryOptions } from './retry';\nexport { setupListeners } from './core/setupListeners';\nexport { skipToken } from './core/buildSelectors';\nexport type { QueryResultSelectorResult, MutationResultSelectorResult, SkipToken } from './core/buildSelectors';\nexport type { QueryActionCreatorResult, MutationActionCreatorResult, StartQueryActionCreatorOptions } from './core/buildInitiate';\nexport type { CreateApi, CreateApiOptions } from './createApi';\nexport { buildCreateApi } from './createApi';\nexport { _NEVER, fakeBaseQuery } from './fakeBaseQuery';\nexport { copyWithStructuralSharing } from './utils/copyWithStructuralSharing';\nexport { createApi, coreModule, coreModuleName } from './core/index';\nexport type { InfiniteData, InfiniteQueryActionCreatorResult, InfiniteQueryConfigOptions, InfiniteQueryResultSelectorResult, InfiniteQuerySubState, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './core/index';\nexport type { ApiEndpointMutation, ApiEndpointQuery, ApiEndpointInfiniteQuery, ApiModules, CoreModule, PrefetchOptions } from './core/module';\nexport { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs';\nexport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nexport type { Id as TSHelpersId, NoInfer as TSHelpersNoInfer, Override as TSHelpersOverride } from './tsHelpers';\nexport { NamedSchemaError } from './standardSchema';","import type { SerializedError } from '@reduxjs/toolkit';\nimport type { BaseQueryError } from '../baseQueryTypes';\nimport type { BaseEndpointDefinition, EndpointDefinitions, FullTagDescription, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFromAnyQuery, QueryDefinition, ResultTypeFrom } from '../endpointDefinitions';\nimport type { Id, WithRequiredProp } from '../tsHelpers';\nexport type QueryCacheKey = string & {\n  _type: 'queryCacheKey';\n};\nexport type QuerySubstateIdentifier = {\n  queryCacheKey: QueryCacheKey;\n};\nexport type MutationSubstateIdentifier = {\n  requestId: string;\n  fixedCacheKey?: string;\n} | {\n  requestId?: string;\n  fixedCacheKey: string;\n};\nexport type RefetchConfigOptions = {\n  refetchOnMountOrArgChange: boolean | number;\n  refetchOnReconnect: boolean;\n  refetchOnFocus: boolean;\n};\nexport type InfiniteQueryConfigOptions<DataType, PageParam, QueryArg> = {\n  /**\n   * The initial page parameter to use for the first page fetch.\n   */\n  initialPageParam: PageParam;\n  /**\n   * This function is required to automatically get the next cursor for infinite queries.\n   * The result will also be used to determine the value of `hasNextPage`.\n   */\n  getNextPageParam: (lastPage: DataType, allPages: Array<DataType>, lastPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * This function can be set to automatically get the previous cursor for infinite queries.\n   * The result will also be used to determine the value of `hasPreviousPage`.\n   */\n  getPreviousPageParam?: (firstPage: DataType, allPages: Array<DataType>, firstPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * If specified, only keep this many pages in cache at once.\n   * If additional pages are fetched, older pages in the other\n   * direction will be dropped from the cache.\n   */\n  maxPages?: number;\n};\nexport type InfiniteData<DataType, PageParam> = {\n  pages: Array<DataType>;\n  pageParams: Array<PageParam>;\n};\n\n/**\n * Strings describing the query state at any given time.\n */\nexport enum QueryStatus {\n  uninitialized = 'uninitialized',\n  pending = 'pending',\n  fulfilled = 'fulfilled',\n  rejected = 'rejected',\n}\nexport type RequestStatusFlags = {\n  status: QueryStatus.uninitialized;\n  isUninitialized: true;\n  isLoading: false;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.pending;\n  isUninitialized: false;\n  isLoading: true;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.fulfilled;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: true;\n  isError: false;\n} | {\n  status: QueryStatus.rejected;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: false;\n  isError: true;\n};\nexport function getRequestStatusFlags(status: QueryStatus): RequestStatusFlags {\n  return {\n    status,\n    isUninitialized: status === QueryStatus.uninitialized,\n    isLoading: status === QueryStatus.pending,\n    isSuccess: status === QueryStatus.fulfilled,\n    isError: status === QueryStatus.rejected\n  } as any;\n}\n\n/**\n * @public\n */\nexport type SubscriptionOptions = {\n  /**\n   * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).\n   */\n  pollingInterval?: number;\n  /**\n   *  Defaults to 'false'. This setting allows you to control whether RTK Query will continue polling if the window is not focused.\n   *\n   *  If pollingInterval is not set or set to 0, this **will not be evaluated** until pollingInterval is greater than 0.\n   *\n   *  Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  skipPollingIfUnfocused?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n};\nexport type Subscribers = {\n  [requestId: string]: SubscriptionOptions;\n};\nexport type QueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any> ? K : never }[keyof Definitions];\nexport type InfiniteQueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? K : never }[keyof Definitions];\nexport type MutationKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends MutationDefinition<any, any, any, any> ? K : never }[keyof Definitions];\ntype BaseQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = {\n  /**\n   * The argument originally passed into the hook or `initiate` action call\n   */\n  originalArgs: QueryArgFromAnyQuery<D>;\n  /**\n   * A unique ID associated with the request\n   */\n  requestId: string;\n  /**\n   * The received data from the query\n   */\n  data?: DataType;\n  /**\n   * The received error if applicable\n   */\n  error?: SerializedError | (D extends QueryDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  /**\n   * The name of the endpoint associated with the query\n   */\n  endpointName: string;\n  /**\n   * Time that the latest query started\n   */\n  startedTimeStamp: number;\n  /**\n   * Time that the latest query was fulfilled\n   */\n  fulfilledTimeStamp?: number;\n};\nexport type QuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = Id<({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'data' | 'fulfilledTimeStamp'> & {\n  error: undefined;\n}) | ({\n  status: QueryStatus.pending;\n} & BaseQuerySubState<D, DataType>) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'error'>) | {\n  status: QueryStatus.uninitialized;\n  originalArgs?: undefined;\n  data?: undefined;\n  error?: undefined;\n  requestId?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n}>;\nexport type InfiniteQueryDirection = 'forward' | 'backward';\nexport type InfiniteQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any> ? QuerySubState<D, InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>> & {\n  direction?: InfiniteQueryDirection;\n} : never;\ntype BaseMutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = {\n  requestId: string;\n  data?: ResultTypeFrom<D>;\n  error?: SerializedError | (D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  endpointName: string;\n  startedTimeStamp: number;\n  fulfilledTimeStamp?: number;\n};\nexport type MutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = (({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseMutationSubState<D>, 'data' | 'fulfilledTimeStamp'>) & {\n  error: undefined;\n}) | (({\n  status: QueryStatus.pending;\n} & BaseMutationSubState<D>) & {\n  data?: undefined;\n}) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseMutationSubState<D>, 'error'>) | {\n  requestId?: undefined;\n  status: QueryStatus.uninitialized;\n  data?: undefined;\n  error?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n};\nexport type CombinedState<D extends EndpointDefinitions, E extends string, ReducerPath extends string> = {\n  queries: QueryState<D>;\n  mutations: MutationState<D>;\n  provided: InvalidationState<E>;\n  subscriptions: SubscriptionState;\n  config: ConfigState<ReducerPath>;\n};\nexport type InvalidationState<TagTypes extends string> = {\n  tags: { [_ in TagTypes]: {\n    [id: string]: Array<QueryCacheKey>;\n    [id: number]: Array<QueryCacheKey>;\n  } };\n  keys: Record<QueryCacheKey, Array<FullTagDescription<any>>>;\n};\nexport type QueryState<D extends EndpointDefinitions> = {\n  [queryCacheKey: string]: QuerySubState<D[string]> | InfiniteQuerySubState<D[string]> | undefined;\n};\nexport type SubscriptionState = {\n  [queryCacheKey: string]: Subscribers | undefined;\n};\nexport type ConfigState<ReducerPath> = RefetchConfigOptions & {\n  reducerPath: ReducerPath;\n  online: boolean;\n  focused: boolean;\n  middlewareRegistered: boolean | 'conflict';\n} & ModifiableConfigState;\nexport type ModifiableConfigState = {\n  keepUnusedDataFor: number;\n  invalidationBehavior: 'delayed' | 'immediately';\n} & RefetchConfigOptions;\nexport type MutationState<D extends EndpointDefinitions> = {\n  [requestId: string]: MutationSubState<D[string]> | undefined;\n};\nexport type RootState<Definitions extends EndpointDefinitions, TagTypes extends string, ReducerPath extends string> = { [P in ReducerPath]: CombinedState<Definitions, TagTypes, P> };","// This file exists to consolidate all of the imports from the `@reduxjs/toolkit` package.\n// ESBuild does not de-duplicate imports, so this file is used to ensure that each method\n// imported is only listed once, and there's only one mention of the `@reduxjs/toolkit` package.\n\nexport { createAction, createSlice, createSelector, createAsyncThunk, combineReducers, createNextState, isAnyOf, isAllOf, isAction, isPending, isRejected, isFulfilled, isRejectedWithValue, isAsyncThunkAction, prepareAutoBatched, SHOULD_AUTOBATCH, isPlainObject, nanoid } from '@reduxjs/toolkit';","import { isPlainObject as _iPO } from '../core/rtkImports';\n\n// remove type guard\nconst isPlainObject: (_: any) => boolean = _iPO;\nexport function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T;\nexport function copyWithStructuralSharing(oldObj: any, newObj: any): any {\n  if (oldObj === newObj || !(isPlainObject(oldObj) && isPlainObject(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {\n    return newObj;\n  }\n  const newKeys = Object.keys(newObj);\n  const oldKeys = Object.keys(oldObj);\n  let isSameObject = newKeys.length === oldKeys.length;\n  const mergeObj: any = Array.isArray(newObj) ? [] : {};\n  for (const key of newKeys) {\n    mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);\n    if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];\n  }\n  return isSameObject ? oldObj : mergeObj;\n}","// Fast method for counting an object's keys\n// without resorting to `Object.keys(obj).length\n// Will this make a big difference in perf? Probably not\n// But we can save a few allocations.\n\nexport function countObjectKeys(obj: Record<any, any>) {\n  let count = 0;\n  for (const _key in obj) {\n    count++;\n  }\n  return count;\n}","/**\r\n * Alternative to `Array.flat(1)`\r\n * @param arr An array like [1,2,3,[1,2]]\r\n * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\r\n */\nexport const flatten = (arr: readonly any[]) => [].concat(...arr);","/**\r\n * If either :// or // is present consider it to be an absolute url\r\n *\r\n * @param url string\r\n */\n\nexport function isAbsoluteUrl(url: string) {\n  return new RegExp(`(^|:)//`).test(url);\n}","/**\r\n * Assumes true for a non-browser env, otherwise makes a best effort\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState\r\n */\nexport function isDocumentVisible(): boolean {\n  // `document` may not exist in non-browser envs (like RN)\n  if (typeof document === 'undefined') {\n    return true;\n  }\n  // Match true for visible, prerender, undefined\n  return document.visibilityState !== 'hidden';\n}","export function isNotNullish<T>(v: T | null | undefined): v is T {\n  return v != null;\n}","/**\n * Assumes a browser is online if `undefined`, otherwise makes a best effort\n * @link https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine\n */\nexport function isOnline() {\n  // We set the default config value in the store, so we'd need to check for this in a SSR env\n  return typeof navigator === 'undefined' ? true : navigator.onLine === undefined ? true : navigator.onLine;\n}","import { isAbsoluteUrl } from './isAbsoluteUrl';\nconst withoutTrailingSlash = (url: string) => url.replace(/\\/$/, '');\nconst withoutLeadingSlash = (url: string) => url.replace(/^\\//, '');\nexport function joinUrls(base: string | undefined, url: string | undefined): string {\n  if (!base) {\n    return url!;\n  }\n  if (!url) {\n    return base;\n  }\n  if (isAbsoluteUrl(url)) {\n    return url;\n  }\n  const delimiter = base.endsWith('/') || !url.startsWith('?') ? '/' : '';\n  base = withoutTrailingSlash(base);\n  url = withoutLeadingSlash(url);\n  return `${base}${delimiter}${url}`;\n}","export function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}","import { joinUrls } from './utils';\nimport { isPlainObject } from './core/rtkImports';\nimport type { BaseQueryApi, BaseQueryFn } from './baseQueryTypes';\nimport type { MaybePromise, Override } from './tsHelpers';\nexport type ResponseHandler = 'content-type' | 'json' | 'text' | ((response: Response) => Promise<any>);\ntype CustomRequestInit = Override<RequestInit, {\n  headers?: Headers | string[][] | Record<string, string | undefined> | undefined;\n}>;\nexport interface FetchArgs extends CustomRequestInit {\n  url: string;\n  params?: Record<string, any>;\n  body?: any;\n  responseHandler?: ResponseHandler;\n  validateStatus?: (response: Response, body: any) => boolean;\n  /**\n   * A number in milliseconds that represents that maximum time a request can take before timing out.\n   */\n  timeout?: number;\n}\n\n/**\n * A mini-wrapper that passes arguments straight through to\n * {@link [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)}.\n * Avoids storing `fetch` in a closure, in order to permit mocking/monkey-patching.\n */\nconst defaultFetchFn: typeof fetch = (...args) => fetch(...args);\nconst defaultValidateStatus = (response: Response) => response.status >= 200 && response.status <= 299;\nconst defaultIsJsonContentType = (headers: Headers) => /*applicat*//ion\\/(vnd\\.api\\+)?json/.test(headers.get('content-type') || '');\nexport type FetchBaseQueryError = {\n  /**\n   * * `number`:\n   *   HTTP status code\n   */\n  status: number;\n  data: unknown;\n} | {\n  /**\n   * * `\"FETCH_ERROR\"`:\n   *   An error that occurred during execution of `fetch` or the `fetchFn` callback option\n   **/\n  status: 'FETCH_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"PARSING_ERROR\"`:\n   *   An error happened during parsing.\n   *   Most likely a non-JSON-response was returned with the default `responseHandler` \"JSON\",\n   *   or an error occurred while executing a custom `responseHandler`.\n   **/\n  status: 'PARSING_ERROR';\n  originalStatus: number;\n  data: string;\n  error: string;\n} | {\n  /**\n   * * `\"TIMEOUT_ERROR\"`:\n   *   Request timed out\n   **/\n  status: 'TIMEOUT_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"CUSTOM_ERROR\"`:\n   *   A custom error type that you can return from your `queryFn` where another error might not make sense.\n   **/\n  status: 'CUSTOM_ERROR';\n  data?: unknown;\n  error: string;\n};\nfunction stripUndefined(obj: any) {\n  if (!isPlainObject(obj)) {\n    return obj;\n  }\n  const copy: Record<string, any> = {\n    ...obj\n  };\n  for (const [k, v] of Object.entries(copy)) {\n    if (v === undefined) delete copy[k];\n  }\n  return copy;\n}\nexport type FetchBaseQueryArgs = {\n  baseUrl?: string;\n  prepareHeaders?: (headers: Headers, api: Pick<BaseQueryApi, 'getState' | 'extra' | 'endpoint' | 'type' | 'forced'> & {\n    arg: string | FetchArgs;\n    extraOptions: unknown;\n  }) => MaybePromise<Headers | void>;\n  fetchFn?: (input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>;\n  paramsSerializer?: (params: Record<string, any>) => string;\n  /**\n   * By default, we only check for 'application/json' and 'application/vnd.api+json' as the content-types for json. If you need to support another format, you can pass\n   * in a predicate function for your given api to get the same automatic stringifying behavior\n   * @example\n   * ```ts\n   * const isJsonContentType = (headers: Headers) => [\"application/vnd.api+json\", \"application/json\", \"application/vnd.hal+json\"].includes(headers.get(\"content-type\")?.trim());\n   * ```\n   */\n  isJsonContentType?: (headers: Headers) => boolean;\n  /**\n   * Defaults to `application/json`;\n   */\n  jsonContentType?: string;\n\n  /**\n   * Custom replacer function used when calling `JSON.stringify()`;\n   */\n  jsonReplacer?: (this: any, key: string, value: any) => any;\n} & RequestInit & Pick<FetchArgs, 'responseHandler' | 'validateStatus' | 'timeout'>;\nexport type FetchBaseQueryMeta = {\n  request: Request;\n  response?: Response;\n};\n\n/**\n * This is a very small wrapper around fetch that aims to simplify requests.\n *\n * @example\n * ```ts\n * const baseQuery = fetchBaseQuery({\n *   baseUrl: 'https://api.your-really-great-app.com/v1/',\n *   prepareHeaders: (headers, { getState }) => {\n *     const token = (getState() as RootState).auth.token;\n *     // If we have a token set in state, let's assume that we should be passing it.\n *     if (token) {\n *       headers.set('authorization', `Bearer ${token}`);\n *     }\n *     return headers;\n *   },\n * })\n * ```\n *\n * @param {string} baseUrl\n * The base URL for an API service.\n * Typically in the format of https://example.com/\n *\n * @param {(headers: Headers, api: { getState: () => unknown; arg: string | FetchArgs; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders\n * An optional function that can be used to inject headers on requests.\n * Provides a Headers object, most of the `BaseQueryApi` (`dispatch` is not available), and the arg passed into the query function.\n * Useful for setting authentication or headers that need to be set conditionally.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers\n *\n * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>} fetchFn\n * Accepts a custom `fetch` function if you do not want to use the default on the window.\n * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`\n *\n * @param {(params: Record<string, unknown>) => string} paramsSerializer\n * An optional function that can be used to stringify querystring parameters.\n *\n * @param {(headers: Headers) => boolean} isJsonContentType\n * An optional predicate function to determine if `JSON.stringify()` should be called on the `body` arg of `FetchArgs`\n *\n * @param {string} jsonContentType Used when automatically setting the content-type header for a request with a jsonifiable body that does not have an explicit content-type header. Defaults to `application/json`.\n *\n * @param {(this: any, key: string, value: any) => any} jsonReplacer Custom replacer function used when calling `JSON.stringify()`.\n *\n * @param {number} timeout\n * A number in milliseconds that represents the maximum time a request can take before timing out.\n */\n\nexport function fetchBaseQuery({\n  baseUrl,\n  prepareHeaders = x => x,\n  fetchFn = defaultFetchFn,\n  paramsSerializer,\n  isJsonContentType = defaultIsJsonContentType,\n  jsonContentType = 'application/json',\n  jsonReplacer,\n  timeout: defaultTimeout,\n  responseHandler: globalResponseHandler,\n  validateStatus: globalValidateStatus,\n  ...baseFetchOptions\n}: FetchBaseQueryArgs = {}): BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta> {\n  if (typeof fetch === 'undefined' && fetchFn === defaultFetchFn) {\n    console.warn('Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.');\n  }\n  return async (arg, api, extraOptions) => {\n    const {\n      getState,\n      extra,\n      endpoint,\n      forced,\n      type\n    } = api;\n    let meta: FetchBaseQueryMeta | undefined;\n    let {\n      url,\n      headers = new Headers(baseFetchOptions.headers),\n      params = undefined,\n      responseHandler = globalResponseHandler ?? 'json' as const,\n      validateStatus = globalValidateStatus ?? defaultValidateStatus,\n      timeout = defaultTimeout,\n      ...rest\n    } = typeof arg == 'string' ? {\n      url: arg\n    } : arg;\n    let abortController: AbortController | undefined,\n      signal = api.signal;\n    if (timeout) {\n      abortController = new AbortController();\n      api.signal.addEventListener('abort', abortController.abort);\n      signal = abortController.signal;\n    }\n    let config: RequestInit = {\n      ...baseFetchOptions,\n      signal,\n      ...rest\n    };\n    headers = new Headers(stripUndefined(headers));\n    config.headers = (await prepareHeaders(headers, {\n      getState,\n      arg,\n      extra,\n      endpoint,\n      forced,\n      type,\n      extraOptions\n    })) || headers;\n\n    // Only set the content-type to json if appropriate. Will not be true for FormData, ArrayBuffer, Blob, etc.\n    const isJsonifiable = (body: any) => typeof body === 'object' && (isPlainObject(body) || Array.isArray(body) || typeof body.toJSON === 'function');\n    if (!config.headers.has('content-type') && isJsonifiable(config.body)) {\n      config.headers.set('content-type', jsonContentType);\n    }\n    if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {\n      config.body = JSON.stringify(config.body, jsonReplacer);\n    }\n    if (params) {\n      const divider = ~url.indexOf('?') ? '&' : '?';\n      const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));\n      url += divider + query;\n    }\n    url = joinUrls(baseUrl, url);\n    const request = new Request(url, config);\n    const requestClone = new Request(url, config);\n    meta = {\n      request: requestClone\n    };\n    let response,\n      timedOut = false,\n      timeoutId = abortController && setTimeout(() => {\n        timedOut = true;\n        abortController!.abort();\n      }, timeout);\n    try {\n      response = await fetchFn(request);\n    } catch (e) {\n      return {\n        error: {\n          status: timedOut ? 'TIMEOUT_ERROR' : 'FETCH_ERROR',\n          error: String(e)\n        },\n        meta\n      };\n    } finally {\n      if (timeoutId) clearTimeout(timeoutId);\n      abortController?.signal.removeEventListener('abort', abortController.abort);\n    }\n    const responseClone = response.clone();\n    meta.response = responseClone;\n    let resultData: any;\n    let responseText: string = '';\n    try {\n      let handleResponseError;\n      await Promise.all([handleResponse(response, responseHandler).then(r => resultData = r, e => handleResponseError = e),\n      // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182\n      // we *have* to \"use up\" both streams at the same time or they will stop running in node-fetch scenarios\n      responseClone.text().then(r => responseText = r, () => {})]);\n      if (handleResponseError) throw handleResponseError;\n    } catch (e) {\n      return {\n        error: {\n          status: 'PARSING_ERROR',\n          originalStatus: response.status,\n          data: responseText,\n          error: String(e)\n        },\n        meta\n      };\n    }\n    return validateStatus(response, resultData) ? {\n      data: resultData,\n      meta\n    } : {\n      error: {\n        status: response.status,\n        data: resultData\n      },\n      meta\n    };\n  };\n  async function handleResponse(response: Response, responseHandler: ResponseHandler) {\n    if (typeof responseHandler === 'function') {\n      return responseHandler(response);\n    }\n    if (responseHandler === 'content-type') {\n      responseHandler = isJsonContentType(response.headers) ? 'json' : 'text';\n    }\n    if (responseHandler === 'json') {\n      const text = await response.text();\n      return text.length ? JSON.parse(text) : null;\n    }\n    return response.text();\n  }\n}","export class HandledError {\n  constructor(public readonly value: any, public readonly meta: any = undefined) {}\n}","import type { BaseQueryApi, BaseQueryArg, BaseQueryEnhancer, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta } from './baseQueryTypes';\nimport type { FetchBaseQueryError } from './fetchBaseQuery';\nimport { HandledError } from './HandledError';\n\n/**\n * Exponential backoff based on the attempt number.\n *\n * @remarks\n * 1. 600ms * random(0.4, 1.4)\n * 2. 1200ms * random(0.4, 1.4)\n * 3. 2400ms * random(0.4, 1.4)\n * 4. 4800ms * random(0.4, 1.4)\n * 5. 9600ms * random(0.4, 1.4)\n *\n * @param attempt - Current attempt\n * @param maxRetries - Maximum number of retries\n */\nasync function defaultBackoff(attempt: number = 0, maxRetries: number = 5) {\n  const attempts = Math.min(attempt, maxRetries);\n  const timeout = ~~((Math.random() + 0.4) * (300 << attempts)); // Force a positive int in the case we make this an option\n  await new Promise(resolve => setTimeout((res: any) => resolve(res), timeout));\n}\ntype RetryConditionFunction = (error: BaseQueryError<BaseQueryFn>, args: BaseQueryArg<BaseQueryFn>, extraArgs: {\n  attempt: number;\n  baseQueryApi: BaseQueryApi;\n  extraOptions: BaseQueryExtraOptions<BaseQueryFn> & RetryOptions;\n}) => boolean;\nexport type RetryOptions = {\n  /**\n   * Function used to determine delay between retries\n   */\n  backoff?: (attempt: number, maxRetries: number) => Promise<void>;\n} & ({\n  /**\n   * How many times the query will be retried (default: 5)\n   */\n  maxRetries?: number;\n  retryCondition?: undefined;\n} | {\n  /**\n   * Callback to determine if a retry should be attempted.\n   * Return `true` for another retry and `false` to quit trying prematurely.\n   */\n  retryCondition?: RetryConditionFunction;\n  maxRetries?: undefined;\n});\nfunction fail<BaseQuery extends BaseQueryFn = BaseQueryFn>(error: BaseQueryError<BaseQuery>, meta?: BaseQueryMeta<BaseQuery>): never {\n  throw Object.assign(new HandledError({\n    error,\n    meta\n  }), {\n    throwImmediately: true\n  });\n}\nconst EMPTY_OPTIONS = {};\nconst retryWithBackoff: BaseQueryEnhancer<unknown, RetryOptions, RetryOptions | void> = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {\n  // We need to figure out `maxRetries` before we define `defaultRetryCondition.\n  // This is probably goofy, but ought to work.\n  // Put our defaults in one array, filter out undefineds, grab the last value.\n  const possibleMaxRetries: number[] = [5, (defaultOptions as any || EMPTY_OPTIONS).maxRetries, (extraOptions as any || EMPTY_OPTIONS).maxRetries].filter(x => x !== undefined);\n  const [maxRetries] = possibleMaxRetries.slice(-1);\n  const defaultRetryCondition: RetryConditionFunction = (_, __, {\n    attempt\n  }) => attempt <= maxRetries;\n  const options: {\n    maxRetries: number;\n    backoff: typeof defaultBackoff;\n    retryCondition: typeof defaultRetryCondition;\n  } = {\n    maxRetries,\n    backoff: defaultBackoff,\n    retryCondition: defaultRetryCondition,\n    ...defaultOptions,\n    ...extraOptions\n  };\n  let retry = 0;\n  while (true) {\n    try {\n      const result = await baseQuery(args, api, extraOptions);\n      // baseQueries _should_ return an error property, so we should check for that and throw it to continue retrying\n      if (result.error) {\n        throw new HandledError(result);\n      }\n      return result;\n    } catch (e: any) {\n      retry++;\n      if (e.throwImmediately) {\n        if (e instanceof HandledError) {\n          return e.value;\n        }\n\n        // We don't know what this is, so we have to rethrow it\n        throw e;\n      }\n      if (e instanceof HandledError && !options.retryCondition(e.value.error as FetchBaseQueryError, args, {\n        attempt: retry,\n        baseQueryApi: api,\n        extraOptions\n      })) {\n        return e.value;\n      }\n      await options.backoff(retry, options.maxRetries);\n    }\n  }\n};\n\n/**\n * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"Retry every request 5 times by default\"\n * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'\n * interface Post {\n *   id: number\n *   name: string\n * }\n * type PostsResponse = Post[]\n *\n * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.\n * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });\n * export const api = createApi({\n *   baseQuery: staggeredBaseQuery,\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsResponse, void>({\n *       query: () => ({ url: 'posts' }),\n *     }),\n *     getPost: build.query<PostsResponse, string>({\n *       query: (id) => ({ url: `post/${id}` }),\n *       extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint\n *     }),\n *   }),\n * });\n *\n * export const { useGetPostsQuery, useGetPostQuery } = api;\n * ```\n */\nexport const retry = /* @__PURE__ */Object.assign(retryWithBackoff, {\n  fail\n});","import type { ThunkDispatch, ActionCreatorWithoutPayload // Workaround for API-Extractor\n} from '@reduxjs/toolkit';\nimport { createAction } from './rtkImports';\nexport const onFocus = /* @__PURE__ */createAction('__rtkq/focused');\nexport const onFocusLost = /* @__PURE__ */createAction('__rtkq/unfocused');\nexport const onOnline = /* @__PURE__ */createAction('__rtkq/online');\nexport const onOffline = /* @__PURE__ */createAction('__rtkq/offline');\nlet initialized = false;\n\n/**\n * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.\n * It requires the dispatch method from your store.\n * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,\n * but you have the option of providing a callback for more granular control.\n *\n * @example\n * ```ts\n * setupListeners(store.dispatch)\n * ```\n *\n * @param dispatch - The dispatch method from your store\n * @param customHandler - An optional callback for more granular control over listener behavior\n * @returns Return value of the handler.\n * The default handler returns an `unsubscribe` method that can be called to remove the listeners.\n */\nexport function setupListeners(dispatch: ThunkDispatch<any, any, any>, customHandler?: (dispatch: ThunkDispatch<any, any, any>, actions: {\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n}) => () => void) {\n  function defaultHandler() {\n    const handleFocus = () => dispatch(onFocus());\n    const handleFocusLost = () => dispatch(onFocusLost());\n    const handleOnline = () => dispatch(onOnline());\n    const handleOffline = () => dispatch(onOffline());\n    const handleVisibilityChange = () => {\n      if (window.document.visibilityState === 'visible') {\n        handleFocus();\n      } else {\n        handleFocusLost();\n      }\n    };\n    if (!initialized) {\n      if (typeof window !== 'undefined' && window.addEventListener) {\n        // Handle focus events\n        window.addEventListener('visibilitychange', handleVisibilityChange, false);\n        window.addEventListener('focus', handleFocus, false);\n\n        // Handle connection events\n        window.addEventListener('online', handleOnline, false);\n        window.addEventListener('offline', handleOffline, false);\n        initialized = true;\n      }\n    }\n    const unsubscribe = () => {\n      window.removeEventListener('focus', handleFocus);\n      window.removeEventListener('visibilitychange', handleVisibilityChange);\n      window.removeEventListener('online', handleOnline);\n      window.removeEventListener('offline', handleOffline);\n      initialized = false;\n    };\n    return unsubscribe;\n  }\n  return customHandler ? customHandler(dispatch, {\n    onFocus,\n    onFocusLost,\n    onOffline,\n    onOnline\n  }) : defaultHandler();\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","import type { AsyncThunk, AsyncThunkPayloadCreator, Draft, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Patch } from 'immer';\nimport { isDraftable, produceWithPatches } from 'immer';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, BaseQueryFn, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryCombinedArg, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFrom, QueryDefinition, ResultDescription, ResultTypeFrom, SchemaFailureConverter, SchemaFailureHandler, SchemaFailureInfo } from '../endpointDefinitions';\nimport { calculateProvidedBy, isInfiniteQueryDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { HandledError } from '../HandledError';\nimport type { UnwrapPromise } from '../tsHelpers';\nimport type { RootState, QueryKeys, QuerySubstateIdentifier, InfiniteData, InfiniteQueryConfigOptions, QueryCacheKey, InfiniteQueryDirection, InfiniteQueryKeys } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { InfiniteQueryActionCreatorResult, QueryActionCreatorResult, StartInfiniteQueryActionCreatorOptions, StartQueryActionCreatorOptions } from './buildInitiate';\nimport { forceQueryFnSymbol, isUpsertQuery } from './buildInitiate';\nimport type { AllSelectors } from './buildSelectors';\nimport type { ApiEndpointQuery, PrefetchOptions } from './module';\nimport { createAsyncThunk, isAllOf, isFulfilled, isPending, isRejected, isRejectedWithValue, SHOULD_AUTOBATCH } from './rtkImports';\nimport { parseWithSchema, NamedSchemaError } from '../standardSchema';\nexport type BuildThunksApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = Matchers<QueryThunk, Definition>;\nexport type BuildThunksApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = Matchers<InfiniteQueryThunk<any>, Definition>;\nexport type BuildThunksApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = Matchers<MutationThunk, Definition>;\ntype EndpointThunk<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = Definition extends EndpointDefinition<infer QueryArg, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<ResultType, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<InfiniteData<ResultType, PageParam>, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : never;\nexport type PendingAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['pending']>;\nexport type FulfilledAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['fulfilled']>;\nexport type RejectedAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['rejected']>;\nexport type Matcher<M> = (value: any) => value is M;\nexport interface Matchers<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> {\n  matchPending: Matcher<PendingAction<Thunk, Definition>>;\n  matchFulfilled: Matcher<FulfilledAction<Thunk, Definition>>;\n  matchRejected: Matcher<RejectedAction<Thunk, Definition>>;\n}\nexport type QueryThunkArg = QuerySubstateIdentifier & StartQueryActionCreatorOptions & {\n  type: 'query';\n  originalArgs: unknown;\n  endpointName: string;\n};\nexport type InfiniteQueryThunkArg<D extends InfiniteQueryDefinition<any, any, any, any, any>> = QuerySubstateIdentifier & StartInfiniteQueryActionCreatorOptions<D> & {\n  type: `query`;\n  originalArgs: unknown;\n  endpointName: string;\n  param: unknown;\n  direction?: InfiniteQueryDirection;\n};\ntype MutationThunkArg = {\n  type: 'mutation';\n  originalArgs: unknown;\n  endpointName: string;\n  track?: boolean;\n  fixedCacheKey?: string;\n};\nexport type ThunkResult = unknown;\nexport type ThunkApiMetaConfig = {\n  pendingMeta: {\n    startedTimeStamp: number;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  fulfilledMeta: {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  rejectedMeta: {\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n};\nexport type QueryThunk = AsyncThunk<ThunkResult, QueryThunkArg, ThunkApiMetaConfig>;\nexport type InfiniteQueryThunk<D extends InfiniteQueryDefinition<any, any, any, any, any>> = AsyncThunk<ThunkResult, InfiniteQueryThunkArg<D>, ThunkApiMetaConfig>;\nexport type MutationThunk = AsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig>;\nfunction defaultTransformResponse(baseQueryReturnValue: unknown) {\n  return baseQueryReturnValue;\n}\nexport type MaybeDrafted<T> = T | Draft<T>;\nexport type Recipe<T> = (data: MaybeDrafted<T>) => void | MaybeDrafted<T>;\nexport type UpsertRecipe<T> = (data: MaybeDrafted<T> | undefined) => void | MaybeDrafted<T>;\nexport type PatchQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, patches: readonly Patch[], updateProvided?: boolean) => ThunkAction<void, PartialState, any, UnknownAction>;\nexport type AllQueryKeys<Definitions extends EndpointDefinitions> = QueryKeys<Definitions> | InfiniteQueryKeys<Definitions>;\nexport type QueryArgFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryArgFrom<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryArgFrom<Definitions[EndpointName]> : never;\nexport type DataFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteData<ResultTypeFrom<Definitions[EndpointName]>, PageParamFrom<Definitions[EndpointName]>> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? ResultTypeFrom<Definitions[EndpointName]> : unknown;\nexport type UpsertThunkResult<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryActionCreatorResult<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryActionCreatorResult<Definitions[EndpointName]> : QueryActionCreatorResult<never>;\nexport type UpdateQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, updateRecipe: Recipe<DataFromAnyQueryDefinition<Definitions, EndpointName>>, updateProvided?: boolean) => ThunkAction<PatchCollection, PartialState, any, UnknownAction>;\nexport type UpsertQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, value: DataFromAnyQueryDefinition<Definitions, EndpointName>) => ThunkAction<UpsertThunkResult<Definitions, EndpointName>, PartialState, any, UnknownAction>;\n\n/**\n * An object returned from dispatching a `api.util.updateQueryData` call.\n */\nexport type PatchCollection = {\n  /**\n   * An `immer` Patch describing the cache update.\n   */\n  patches: Patch[];\n  /**\n   * An `immer` Patch to revert the cache update.\n   */\n  inversePatches: Patch[];\n  /**\n   * A function that will undo the cache update.\n   */\n  undo: () => void;\n};\ntype TransformCallback = (baseQueryReturnValue: unknown, meta: unknown, arg: unknown) => any;\nexport const addShouldAutoBatch = <T extends Record<string, any>,>(arg: T = {} as T): T & {\n  [SHOULD_AUTOBATCH]: true;\n} => {\n  return {\n    ...arg,\n    [SHOULD_AUTOBATCH]: true\n  };\n};\nexport function buildThunks<BaseQuery extends BaseQueryFn, ReducerPath extends string, Definitions extends EndpointDefinitions>({\n  reducerPath,\n  baseQuery,\n  context: {\n    endpointDefinitions\n  },\n  serializeQueryArgs,\n  api,\n  assertTagType,\n  selectors,\n  onSchemaFailure,\n  catchSchemaFailure: globalCatchSchemaFailure,\n  skipSchemaValidation: globalSkipSchemaValidation\n}: {\n  baseQuery: BaseQuery;\n  reducerPath: ReducerPath;\n  context: ApiContext<Definitions>;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  api: Api<BaseQuery, Definitions, ReducerPath, any>;\n  assertTagType: AssertTagTypes;\n  selectors: AllSelectors;\n  onSchemaFailure: SchemaFailureHandler | undefined;\n  catchSchemaFailure: SchemaFailureConverter<BaseQuery> | undefined;\n  skipSchemaValidation: boolean | undefined;\n}) {\n  type State = RootState<any, string, ReducerPath>;\n  const patchQueryData: PatchQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {\n    const endpointDefinition = endpointDefinitions[endpointName];\n    const queryCacheKey = serializeQueryArgs({\n      queryArgs: arg,\n      endpointDefinition,\n      endpointName\n    });\n    dispatch(api.internalActions.queryResultPatched({\n      queryCacheKey,\n      patches\n    }));\n    if (!updateProvided) {\n      return;\n    }\n    const newValue = api.endpoints[endpointName].select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, undefined, arg, {}, assertTagType);\n    dispatch(api.internalActions.updateProvidedBy([{\n      queryCacheKey,\n      providedTags\n    }]));\n  };\n  function addToStart<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [item, ...items];\n    return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n  }\n  function addToEnd<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [...items, item];\n    return max && newItems.length > max ? newItems.slice(1) : newItems;\n  }\n  const updateQueryData: UpdateQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {\n    const endpointDefinition = api.endpoints[endpointName];\n    const currentState = endpointDefinition.select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const ret: PatchCollection = {\n      patches: [],\n      inversePatches: [],\n      undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))\n    };\n    if (currentState.status === QueryStatus.uninitialized) {\n      return ret;\n    }\n    let newValue;\n    if ('data' in currentState) {\n      if (isDraftable(currentState.data)) {\n        const [value, patches, inversePatches] = produceWithPatches(currentState.data, updateRecipe);\n        ret.patches.push(...patches);\n        ret.inversePatches.push(...inversePatches);\n        newValue = value;\n      } else {\n        newValue = updateRecipe(currentState.data);\n        ret.patches.push({\n          op: 'replace',\n          path: [],\n          value: newValue\n        });\n        ret.inversePatches.push({\n          op: 'replace',\n          path: [],\n          value: currentState.data\n        });\n      }\n    }\n    if (ret.patches.length === 0) {\n      return ret;\n    }\n    dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));\n    return ret;\n  };\n  const upsertQueryData: UpsertQueryDataThunk<Definitions, State> = (endpointName, arg, value) => dispatch => {\n    type EndpointName = typeof endpointName;\n    const res = dispatch((api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>).initiate(arg, {\n      subscribe: false,\n      forceRefetch: true,\n      [forceQueryFnSymbol]: () => ({\n        data: value\n      })\n    })) as UpsertThunkResult<Definitions, EndpointName>;\n    return res;\n  };\n  const getTransformCallbackForEndpoint = (endpointDefinition: EndpointDefinition<any, any, any, any>, transformFieldName: 'transformResponse' | 'transformErrorResponse'): TransformCallback => {\n    return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName]! as TransformCallback : defaultTransformResponse;\n  };\n\n  // The generic async payload function for all of our thunks\n  const executeEndpoint: AsyncThunkPayloadCreator<ThunkResult, QueryThunkArg | MutationThunkArg | InfiniteQueryThunkArg<any>, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }> = async (arg, {\n    signal,\n    abort,\n    rejectWithValue,\n    fulfillWithValue,\n    dispatch,\n    getState,\n    extra\n  }) => {\n    const endpointDefinition = endpointDefinitions[arg.endpointName];\n    const {\n      metaSchema,\n      skipSchemaValidation = globalSkipSchemaValidation\n    } = endpointDefinition;\n    try {\n      let transformResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformResponse');\n      const baseQueryApi = {\n        signal,\n        abort,\n        dispatch,\n        getState,\n        extra,\n        endpoint: arg.endpointName,\n        type: arg.type,\n        forced: arg.type === 'query' ? isForcedQuery(arg, getState()) : undefined,\n        queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n      };\n      const forceQueryFn = arg.type === 'query' ? arg[forceQueryFnSymbol] : undefined;\n      let finalQueryReturnValue: QueryReturnValue;\n\n      // Infinite query wrapper, which executes the request and returns\n      // the InfiniteData `{pages, pageParams}` structure\n      const fetchPage = async (data: InfiniteData<unknown, unknown>, param: unknown, maxPages: number, previous?: boolean): Promise<QueryReturnValue> => {\n        // This should handle cases where there is no `getPrevPageParam`,\n        // or `getPPP` returned nullish\n        if (param == null && data.pages.length) {\n          return Promise.resolve({\n            data\n          });\n        }\n        const finalQueryArg: InfiniteQueryCombinedArg<any, any> = {\n          queryArg: arg.originalArgs,\n          pageParam: param\n        };\n        const pageResponse = await executeRequest(finalQueryArg);\n        const addTo = previous ? addToStart : addToEnd;\n        return {\n          data: {\n            pages: addTo(data.pages, pageResponse.data, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          },\n          meta: pageResponse.meta\n        };\n      };\n\n      // Wrapper for executing either `query` or `queryFn`,\n      // and handling any errors\n      async function executeRequest(finalQueryArg: unknown): Promise<QueryReturnValue> {\n        let result: QueryReturnValue;\n        const {\n          extraOptions,\n          argSchema,\n          rawResponseSchema,\n          responseSchema\n        } = endpointDefinition;\n        if (argSchema && !skipSchemaValidation) {\n          finalQueryArg = await parseWithSchema(argSchema, finalQueryArg, 'argSchema', {} // we don't have a meta yet, so we can't pass it\n          );\n        }\n        if (forceQueryFn) {\n          // upsertQueryData relies on this to pass in the user-provided value\n          result = forceQueryFn();\n        } else if (endpointDefinition.query) {\n          result = await baseQuery(endpointDefinition.query(finalQueryArg as any), baseQueryApi, extraOptions as any);\n        } else {\n          result = await endpointDefinition.queryFn(finalQueryArg as any, baseQueryApi, extraOptions as any, arg => baseQuery(arg, baseQueryApi, extraOptions as any));\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          const what = endpointDefinition.query ? '`baseQuery`' : '`queryFn`';\n          let err: undefined | string;\n          if (!result) {\n            err = `${what} did not return anything.`;\n          } else if (typeof result !== 'object') {\n            err = `${what} did not return an object.`;\n          } else if (result.error && result.data) {\n            err = `${what} returned an object containing both \\`error\\` and \\`result\\`.`;\n          } else if (result.error === undefined && result.data === undefined) {\n            err = `${what} returned an object containing neither a valid \\`error\\` and \\`result\\`. At least one of them should not be \\`undefined\\``;\n          } else {\n            for (const key of Object.keys(result)) {\n              if (key !== 'error' && key !== 'data' && key !== 'meta') {\n                err = `The object returned by ${what} has the unknown property ${key}.`;\n                break;\n              }\n            }\n          }\n          if (err) {\n            console.error(`Error encountered handling the endpoint ${arg.endpointName}.\n                  ${err}\n                  It needs to return an object with either the shape \\`{ data: <value> }\\` or \\`{ error: <value> }\\` that may contain an optional \\`meta\\` property.\n                  Object returned was:`, result);\n          }\n        }\n        if (result.error) throw new HandledError(result.error, result.meta);\n        let {\n          data\n        } = result;\n        if (rawResponseSchema && !skipSchemaValidation) {\n          data = await parseWithSchema(rawResponseSchema, result.data, 'rawResponseSchema', result.meta);\n        }\n        let transformedResponse = await transformResponse(data, result.meta, finalQueryArg);\n        if (responseSchema && !skipSchemaValidation) {\n          transformedResponse = await parseWithSchema(responseSchema, transformedResponse, 'responseSchema', result.meta);\n        }\n        return {\n          ...result,\n          data: transformedResponse\n        };\n      }\n      if (arg.type === 'query' && 'infiniteQueryOptions' in endpointDefinition) {\n        // This is an infinite query endpoint\n        const {\n          infiniteQueryOptions\n        } = endpointDefinition;\n\n        // Runtime checks should guarantee this is a positive number if provided\n        const {\n          maxPages = Infinity\n        } = infiniteQueryOptions;\n        let result: QueryReturnValue;\n\n        // Start by looking up the existing InfiniteData value from state,\n        // falling back to an empty value if it doesn't exist yet\n        const blankData = {\n          pages: [],\n          pageParams: []\n        };\n        const cachedData = selectors.selectQueryEntry(getState(), arg.queryCacheKey)?.data as InfiniteData<unknown, unknown> | undefined;\n\n        // When the arg changes or the user forces a refetch,\n        // we don't include the `direction` flag. This lets us distinguish\n        // between actually refetching with a forced query, vs just fetching\n        // the next page.\n        const isForcedQueryNeedingRefetch =\n        // arg.forceRefetch\n        isForcedQuery(arg, getState()) && !(arg as InfiniteQueryThunkArg<any>).direction;\n        const existingData = (isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData) as InfiniteData<unknown, unknown>;\n\n        // If the thunk specified a direction and we do have at least one page,\n        // fetch the next or previous page\n        if ('direction' in arg && arg.direction && existingData.pages.length) {\n          const previous = arg.direction === 'backward';\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const param = pageParamFn(infiniteQueryOptions, existingData, arg.originalArgs);\n          result = await fetchPage(existingData, param, maxPages, previous);\n        } else {\n          // Otherwise, fetch the first page and then any remaining pages\n\n          const {\n            initialPageParam = infiniteQueryOptions.initialPageParam\n          } = arg as InfiniteQueryThunkArg<any>;\n\n          // If we're doing a refetch, we should start from\n          // the first page we have cached.\n          // Otherwise, we should start from the initialPageParam\n          const cachedPageParams = cachedData?.pageParams ?? [];\n          const firstPageParam = cachedPageParams[0] ?? initialPageParam;\n          const totalPages = cachedPageParams.length;\n\n          // Fetch first page\n          result = await fetchPage(existingData, firstPageParam, maxPages);\n          if (forceQueryFn) {\n            // HACK `upsertQueryData` expects the user to pass in the `{pages, pageParams}` structure,\n            // but `fetchPage` treats that as `pages[0]`. We have to manually un-nest it.\n            result = {\n              data: (result.data as InfiniteData<unknown, unknown>).pages[0]\n            } as QueryReturnValue;\n          }\n\n          // Fetch remaining pages\n          for (let i = 1; i < totalPages; i++) {\n            const param = getNextPageParam(infiniteQueryOptions, result.data as InfiniteData<unknown, unknown>, arg.originalArgs);\n            result = await fetchPage(result.data as InfiniteData<unknown, unknown>, param, maxPages);\n          }\n        }\n        finalQueryReturnValue = result;\n      } else {\n        // Non-infinite endpoint. Just run the one request.\n        finalQueryReturnValue = await executeRequest(arg.originalArgs);\n      }\n      if (metaSchema && !skipSchemaValidation && finalQueryReturnValue.meta) {\n        finalQueryReturnValue.meta = await parseWithSchema(metaSchema, finalQueryReturnValue.meta, 'metaSchema', finalQueryReturnValue.meta);\n      }\n\n      // console.log('Final result: ', transformedData)\n      return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({\n        fulfilledTimeStamp: Date.now(),\n        baseQueryMeta: finalQueryReturnValue.meta\n      }));\n    } catch (error) {\n      let caughtError = error;\n      if (caughtError instanceof HandledError) {\n        let transformErrorResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformErrorResponse');\n        const {\n          rawErrorResponseSchema,\n          errorResponseSchema\n        } = endpointDefinition;\n        let {\n          value,\n          meta\n        } = caughtError;\n        try {\n          if (rawErrorResponseSchema && !skipSchemaValidation) {\n            value = await parseWithSchema(rawErrorResponseSchema, value, 'rawErrorResponseSchema', meta);\n          }\n          if (metaSchema && !skipSchemaValidation) {\n            meta = await parseWithSchema(metaSchema, meta, 'metaSchema', meta);\n          }\n          let transformedErrorResponse = await transformErrorResponse(value, meta, arg.originalArgs);\n          if (errorResponseSchema && !skipSchemaValidation) {\n            transformedErrorResponse = await parseWithSchema(errorResponseSchema, transformedErrorResponse, 'errorResponseSchema', meta);\n          }\n          return rejectWithValue(transformedErrorResponse, addShouldAutoBatch({\n            baseQueryMeta: meta\n          }));\n        } catch (e) {\n          caughtError = e;\n        }\n      }\n      try {\n        if (caughtError instanceof NamedSchemaError) {\n          const info: SchemaFailureInfo = {\n            endpoint: arg.endpointName,\n            arg: arg.originalArgs,\n            type: arg.type,\n            queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n          };\n          endpointDefinition.onSchemaFailure?.(caughtError, info);\n          onSchemaFailure?.(caughtError, info);\n          const {\n            catchSchemaFailure = globalCatchSchemaFailure\n          } = endpointDefinition;\n          if (catchSchemaFailure) {\n            return rejectWithValue(catchSchemaFailure(caughtError, info), addShouldAutoBatch({\n              baseQueryMeta: caughtError._bqMeta\n            }));\n          }\n        }\n      } catch (e) {\n        caughtError = e;\n      }\n      if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n        console.error(`An unhandled error occurred processing a request for the endpoint \"${arg.endpointName}\".\nIn the case of an unhandled error, no tags will be \"provided\" or \"invalidated\".`, caughtError);\n      } else {\n        console.error(caughtError);\n      }\n      throw caughtError;\n    }\n  };\n  function isForcedQuery(arg: QueryThunkArg, state: RootState<any, string, ReducerPath>) {\n    const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);\n    const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;\n    const fulfilledVal = requestState?.fulfilledTimeStamp;\n    const refetchVal = arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange);\n    if (refetchVal) {\n      // Return if it's true or compare the dates because it must be a number\n      return refetchVal === true || (Number(new Date()) - Number(fulfilledVal)) / 1000 >= refetchVal;\n    }\n    return false;\n  }\n  const createQueryThunk = <ThunkArgType extends QueryThunkArg | InfiniteQueryThunkArg<any>,>() => {\n    const generatedQueryThunk = createAsyncThunk<ThunkResult, ThunkArgType, ThunkApiMetaConfig & {\n      state: RootState<any, string, ReducerPath>;\n    }>(`${reducerPath}/executeQuery`, executeEndpoint, {\n      getPendingMeta({\n        arg\n      }) {\n        const endpointDefinition = endpointDefinitions[arg.endpointName];\n        return addShouldAutoBatch({\n          startedTimeStamp: Date.now(),\n          ...(isInfiniteQueryDefinition(endpointDefinition) ? {\n            direction: (arg as InfiniteQueryThunkArg<any>).direction\n          } : {})\n        });\n      },\n      condition(queryThunkArg, {\n        getState\n      }) {\n        const state = getState();\n        const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);\n        const fulfilledVal = requestState?.fulfilledTimeStamp;\n        const currentArg = queryThunkArg.originalArgs;\n        const previousArg = requestState?.originalArgs;\n        const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];\n        const direction = (queryThunkArg as InfiniteQueryThunkArg<any>).direction;\n\n        // Order of these checks matters.\n        // In order for `upsertQueryData` to successfully run while an existing request is in flight,\n        /// we have to check for that first, otherwise `queryThunk` will bail out and not run at all.\n        if (isUpsertQuery(queryThunkArg)) {\n          return true;\n        }\n\n        // Don't retry a request that's currently in-flight\n        if (requestState?.status === 'pending') {\n          return false;\n        }\n\n        // if this is forced, continue\n        if (isForcedQuery(queryThunkArg, state)) {\n          return true;\n        }\n        if (isQueryDefinition(endpointDefinition) && endpointDefinition?.forceRefetch?.({\n          currentArg,\n          previousArg,\n          endpointState: requestState,\n          state\n        })) {\n          return true;\n        }\n\n        // Pull from the cache unless we explicitly force refetch or qualify based on time\n        if (fulfilledVal && !direction) {\n          // Value is cached and we didn't specify to refresh, skip it.\n          return false;\n        }\n        return true;\n      },\n      dispatchConditionRejection: true\n    });\n    return generatedQueryThunk;\n  };\n  const queryThunk = createQueryThunk<QueryThunkArg>();\n  const infiniteQueryThunk = createQueryThunk<InfiniteQueryThunkArg<any>>();\n  const mutationThunk = createAsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }>(`${reducerPath}/executeMutation`, executeEndpoint, {\n    getPendingMeta() {\n      return addShouldAutoBatch({\n        startedTimeStamp: Date.now()\n      });\n    }\n  });\n  const hasTheForce = (options: any): options is {\n    force: boolean;\n  } => 'force' in options;\n  const hasMaxAge = (options: any): options is {\n    ifOlderThan: false | number;\n  } => 'ifOlderThan' in options;\n  const prefetch = <EndpointName extends QueryKeys<Definitions>,>(endpointName: EndpointName, arg: any, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction> => (dispatch: ThunkDispatch<any, any, any>, getState: () => any) => {\n    const force = hasTheForce(options) && options.force;\n    const maxAge = hasMaxAge(options) && options.ifOlderThan;\n    const queryAction = (force: boolean = true) => {\n      const options = {\n        forceRefetch: force,\n        isPrefetch: true\n      };\n      return (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).initiate(arg, options);\n    };\n    const latestStateValue = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg)(getState());\n    if (force) {\n      dispatch(queryAction());\n    } else if (maxAge) {\n      const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp;\n      if (!lastFulfilledTs) {\n        dispatch(queryAction());\n        return;\n      }\n      const shouldRetrigger = (Number(new Date()) - Number(new Date(lastFulfilledTs))) / 1000 >= maxAge;\n      if (shouldRetrigger) {\n        dispatch(queryAction());\n      }\n    } else {\n      // If prefetching with no options, just let it try\n      dispatch(queryAction(false));\n    }\n  };\n  function matchesEndpoint(endpointName: string) {\n    return (action: any): action is UnknownAction => action?.meta?.arg?.endpointName === endpointName;\n  }\n  function buildMatchThunkActions<Thunk extends AsyncThunk<any, QueryThunkArg, ThunkApiMetaConfig> | AsyncThunk<any, MutationThunkArg, ThunkApiMetaConfig>>(thunk: Thunk, endpointName: string) {\n    return {\n      matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),\n      matchFulfilled: isAllOf(isFulfilled(thunk), matchesEndpoint(endpointName)),\n      matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName))\n    } as Matchers<Thunk, any>;\n  }\n  return {\n    queryThunk,\n    mutationThunk,\n    infiniteQueryThunk,\n    prefetch,\n    updateQueryData,\n    upsertQueryData,\n    patchQueryData,\n    buildMatchThunkActions\n  };\n}\nexport function getNextPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  const lastIndex = pages.length - 1;\n  return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams, queryArg);\n}\nexport function getPreviousPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams, queryArg);\n}\nexport function calculateProvidedByThunk(action: UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<MutationThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>, type: 'providesTags' | 'invalidatesTags', endpointDefinitions: EndpointDefinitions, assertTagType: AssertTagTypes) {\n  return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type] as ResultDescription<any, any, any, any, any>, isFulfilled(action) ? action.payload : undefined, isRejectedWithValue(action) ? action.payload : undefined, action.meta.arg.originalArgs, 'baseQueryMeta' in action.meta ? action.meta.baseQueryMeta : undefined, assertTagType);\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AsyncThunkAction, SafePromise, SerializedError, ThunkAction, UnknownAction } from '@reduxjs/toolkit';\nimport type { Dispatch } from 'redux';\nimport { asSafePromise } from '../../tsHelpers';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport { isQueryDefinition, type EndpointDefinition, type EndpointDefinitions, type InfiniteQueryArgFrom, type InfiniteQueryDefinition, type MutationDefinition, type PageParamFrom, type QueryArgFrom, type QueryDefinition, type ResultTypeFrom } from '../endpointDefinitions';\nimport { countObjectKeys, getOrInsert, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQueryDirection, SubscriptionOptions } from './apiState';\nimport type { InfiniteQueryResultSelectorResult, QueryResultSelectorResult } from './buildSelectors';\nimport type { InfiniteQueryThunk, InfiniteQueryThunkArg, MutationThunk, QueryThunk, QueryThunkArg, ThunkApiMetaConfig } from './buildThunks';\nimport type { ApiEndpointQuery } from './module';\nexport type BuildInitiateApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  initiate: StartQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  initiate: StartInfiniteQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  initiate: StartMutationActionCreator<Definition>;\n};\nexport const forceQueryFnSymbol = Symbol('forceQueryFn');\nexport const isUpsertQuery = (arg: QueryThunkArg) => typeof arg[forceQueryFnSymbol] === 'function';\nexport type StartQueryActionCreatorOptions = {\n  subscribe?: boolean;\n  forceRefetch?: boolean | number;\n  subscriptionOptions?: SubscriptionOptions;\n  [forceQueryFnSymbol]?: () => QueryReturnValue;\n};\nexport type StartInfiniteQueryActionCreatorOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = StartQueryActionCreatorOptions & {\n  direction?: InfiniteQueryDirection;\n  param?: unknown;\n} & Partial<Pick<Partial<InfiniteQueryConfigOptions<ResultTypeFrom<D>, PageParamFrom<D>, InfiniteQueryArgFrom<D>>>, 'initialPageParam'>>;\ntype AnyQueryActionCreator<D extends EndpointDefinition<any, any, any, any>> = (arg: any, options?: StartQueryActionCreatorOptions) => ThunkAction<AnyActionCreatorResult, any, any, UnknownAction>;\ntype StartQueryActionCreator<D extends QueryDefinition<any, any, any, any, any>> = (arg: QueryArgFrom<D>, options?: StartQueryActionCreatorOptions) => ThunkAction<QueryActionCreatorResult<D>, any, any, UnknownAction>;\nexport type StartInfiniteQueryActionCreator<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D>, options?: StartInfiniteQueryActionCreatorOptions<D>) => ThunkAction<InfiniteQueryActionCreatorResult<D>, any, any, UnknownAction>;\ntype QueryActionCreatorFields = {\n  requestId: string;\n  subscriptionOptions: SubscriptionOptions | undefined;\n  abort(): void;\n  unsubscribe(): void;\n  updateSubscriptionOptions(options: SubscriptionOptions): void;\n  queryCacheKey: string;\n};\ntype AnyActionCreatorResult = SafePromise<any> & QueryActionCreatorFields & {\n  arg: any;\n  unwrap(): Promise<any>;\n  refetch(): AnyActionCreatorResult;\n};\nexport type QueryActionCreatorResult<D extends QueryDefinition<any, any, any, any>> = SafePromise<QueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: QueryArgFrom<D>;\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  refetch(): QueryActionCreatorResult<D>;\n};\nexport type InfiniteQueryActionCreatorResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SafePromise<InfiniteQueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: InfiniteQueryArgFrom<D>;\n  unwrap(): Promise<InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>>;\n  refetch(): InfiniteQueryActionCreatorResult<D>;\n};\ntype StartMutationActionCreator<D extends MutationDefinition<any, any, any, any>> = (arg: QueryArgFrom<D>, options?: {\n  /**\n   * If this mutation should be tracked in the store.\n   * If you just want to manually trigger this mutation using `dispatch` and don't care about the\n   * result, state & potential errors being held in store, you can set this to false.\n   * (defaults to `true`)\n   */\n  track?: boolean;\n  fixedCacheKey?: string;\n}) => ThunkAction<MutationActionCreatorResult<D>, any, any, UnknownAction>;\nexport type MutationActionCreatorResult<D extends MutationDefinition<any, any, any, any>> = SafePromise<{\n  data: ResultTypeFrom<D>;\n  error?: undefined;\n} | {\n  data?: undefined;\n  error: Exclude<BaseQueryError<D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQuery : never>, undefined> | SerializedError;\n}> & {\n  /** @internal */\n  arg: {\n    /**\n     * The name of the given endpoint for the mutation\n     */\n    endpointName: string;\n    /**\n     * The original arguments supplied to the mutation call\n     */\n    originalArgs: QueryArgFrom<D>;\n    /**\n     * Whether the mutation is being tracked in the store.\n     */\n    track?: boolean;\n    fixedCacheKey?: string;\n  };\n  /**\n   * A unique string generated for the request sequence\n   */\n  requestId: string;\n\n  /**\n   * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation\n   * that was fired off from reaching the server, but only to assist in handling the response.\n   *\n   * Calling `abort()` prior to the promise resolving will force it to reach the error state with\n   * the serialized error:\n   * `{ name: 'AbortError', message: 'Aborted' }`\n   *\n   * @example\n   * ```ts\n   * const [updateUser] = useUpdateUserMutation();\n   *\n   * useEffect(() => {\n   *   const promise = updateUser(id);\n   *   promise\n   *     .unwrap()\n   *     .catch((err) => {\n   *       if (err.name === 'AbortError') return;\n   *       // else handle the unexpected error\n   *     })\n   *\n   *   return () => {\n   *     promise.abort();\n   *   }\n   * }, [id, updateUser])\n   * ```\n   */\n  abort(): void;\n  /**\n   * Unwraps a mutation call to provide the raw response/error.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap\"\n   * addPost({ id: 1, name: 'Example' })\n   *   .unwrap()\n   *   .then((payload) => console.log('fulfilled', payload))\n   *   .catch((error) => console.error('rejected', error));\n   * ```\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  /**\n   * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.\n   The value returned by the hook will reset to `isUninitialized` afterwards.\n   */\n  reset(): void;\n};\nexport function buildInitiate({\n  serializeQueryArgs,\n  queryThunk,\n  infiniteQueryThunk,\n  mutationThunk,\n  api,\n  context\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  api: Api<any, EndpointDefinitions, any, any>;\n  context: ApiContext<EndpointDefinitions>;\n}) {\n  const runningQueries: Map<Dispatch, Record<string, QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any> | undefined>> = new Map();\n  const runningMutations: Map<Dispatch, Record<string, MutationActionCreatorResult<any> | undefined>> = new Map();\n  const {\n    unsubscribeQueryResult,\n    removeMutationResult,\n    updateSubscriptionOptions\n  } = api.internalActions;\n  return {\n    buildInitiateQuery,\n    buildInitiateInfiniteQuery,\n    buildInitiateMutation,\n    getRunningQueryThunk,\n    getRunningMutationThunk,\n    getRunningQueriesThunk,\n    getRunningMutationsThunk\n  };\n  function getRunningQueryThunk(endpointName: string, queryArgs: any) {\n    return (dispatch: Dispatch) => {\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      return runningQueries.get(dispatch)?.[queryCacheKey] as QueryActionCreatorResult<never> | InfiniteQueryActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningMutationThunk(\n  /**\n   * this is only here to allow TS to infer the result type by input value\n   * we could use it to validate the result, but it's probably not necessary\n   */\n  _endpointName: string, fixedCacheKeyOrRequestId: string) {\n    return (dispatch: Dispatch) => {\n      return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId] as MutationActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningQueriesThunk() {\n    return (dispatch: Dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function getRunningMutationsThunk() {\n    return (dispatch: Dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function middlewareWarning(dispatch: Dispatch) {\n    if (process.env.NODE_ENV !== 'production') {\n      if ((middlewareWarning as any).triggered) return;\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      (middlewareWarning as any).triggered = true;\n\n      // The RTKQ middleware should return the internal state object,\n      // but it should _not_ be the action object.\n      if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n        // Otherwise, must not have been added\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(34) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\nYou must add the middleware for RTK-Query to function correctly!`);\n      }\n    }\n  }\n  function buildInitiateAnyQuery<T extends 'query' | 'infiniteQuery'>(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any>) {\n    const queryAction: AnyQueryActionCreator<any> = (arg, {\n      subscribe = true,\n      forceRefetch,\n      subscriptionOptions,\n      [forceQueryFnSymbol]: forceQueryFn,\n      ...rest\n    } = {}) => (dispatch, getState) => {\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs: arg,\n        endpointDefinition,\n        endpointName\n      });\n      let thunk: AsyncThunkAction<unknown, QueryThunkArg, ThunkApiMetaConfig>;\n      const commonThunkArgs = {\n        ...rest,\n        type: 'query' as const,\n        subscribe,\n        forceRefetch: forceRefetch,\n        subscriptionOptions,\n        endpointName,\n        originalArgs: arg,\n        queryCacheKey,\n        [forceQueryFnSymbol]: forceQueryFn\n      };\n      if (isQueryDefinition(endpointDefinition)) {\n        thunk = queryThunk(commonThunkArgs);\n      } else {\n        const {\n          direction,\n          initialPageParam\n        } = rest as Pick<InfiniteQueryThunkArg<any>, 'direction' | 'initialPageParam'>;\n        thunk = infiniteQueryThunk({\n          ...(commonThunkArgs as InfiniteQueryThunkArg<any>),\n          // Supply these even if undefined. This helps with a field existence\n          // check over in `buildSlice.ts`\n          direction,\n          initialPageParam\n        });\n      }\n      const selector = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg);\n      const thunkResult = dispatch(thunk);\n      const stateAfter = selector(getState());\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort\n      } = thunkResult;\n      const skippedSynchronously = stateAfter.requestId !== requestId;\n      const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey];\n      const selectFromState = () => selector(getState());\n      const statePromise: AnyActionCreatorResult = Object.assign((forceQueryFn ?\n      // a query has been forced (upsertQueryData)\n      // -> we want to resolve it once data has been written with the data that will be written\n      thunkResult.then(selectFromState) : skippedSynchronously && !runningQuery ?\n      // a query has been skipped due to a condition and we do not have any currently running query\n      // -> we want to resolve it immediately with the current data\n      Promise.resolve(stateAfter) :\n      // query just started or one is already in flight\n      // -> wait for the running query, then resolve with data from after that\n      Promise.all([runningQuery, thunkResult]).then(selectFromState)) as SafePromise<any>, {\n        arg,\n        requestId,\n        subscriptionOptions,\n        queryCacheKey,\n        abort,\n        async unwrap() {\n          const result = await statePromise;\n          if (result.isError) {\n            throw result.error;\n          }\n          return result.data;\n        },\n        refetch: () => dispatch(queryAction(arg, {\n          subscribe: false,\n          forceRefetch: true\n        })),\n        unsubscribe() {\n          if (subscribe) dispatch(unsubscribeQueryResult({\n            queryCacheKey,\n            requestId\n          }));\n        },\n        updateSubscriptionOptions(options: SubscriptionOptions) {\n          statePromise.subscriptionOptions = options;\n          dispatch(updateSubscriptionOptions({\n            endpointName,\n            requestId,\n            queryCacheKey,\n            options\n          }));\n        }\n      });\n      if (!runningQuery && !skippedSynchronously && !forceQueryFn) {\n        const running = getOrInsert(runningQueries, dispatch, {});\n        running[queryCacheKey] = statePromise;\n        statePromise.then(() => {\n          delete running[queryCacheKey];\n          if (!countObjectKeys(running)) {\n            runningQueries.delete(dispatch);\n          }\n        });\n      }\n      return statePromise;\n    };\n    return queryAction;\n  }\n  function buildInitiateQuery(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    const queryAction: StartQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return queryAction;\n  }\n  function buildInitiateInfiniteQuery(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const infiniteQueryAction: StartInfiniteQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return infiniteQueryAction;\n  }\n  function buildInitiateMutation(endpointName: string): StartMutationActionCreator<any> {\n    return (arg, {\n      track = true,\n      fixedCacheKey\n    } = {}) => (dispatch, getState) => {\n      const thunk = mutationThunk({\n        type: 'mutation',\n        endpointName,\n        originalArgs: arg,\n        track,\n        fixedCacheKey\n      });\n      const thunkResult = dispatch(thunk);\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort,\n        unwrap\n      } = thunkResult;\n      const returnValuePromise = asSafePromise(thunkResult.unwrap().then(data => ({\n        data\n      })), error => ({\n        error\n      }));\n      const reset = () => {\n        dispatch(removeMutationResult({\n          requestId,\n          fixedCacheKey\n        }));\n      };\n      const ret = Object.assign(returnValuePromise, {\n        arg: thunkResult.arg,\n        requestId,\n        abort,\n        unwrap,\n        reset\n      });\n      const running = runningMutations.get(dispatch) || {};\n      runningMutations.set(dispatch, running);\n      running[requestId] = ret;\n      ret.then(() => {\n        delete running[requestId];\n        if (!countObjectKeys(running)) {\n          runningMutations.delete(dispatch);\n        }\n      });\n      if (fixedCacheKey) {\n        running[fixedCacheKey] = ret;\n        ret.then(() => {\n          if (running[fixedCacheKey] === ret) {\n            delete running[fixedCacheKey];\n            if (!countObjectKeys(running)) {\n              runningMutations.delete(dispatch);\n            }\n          }\n        });\n      }\n      return ret;\n    };\n  }\n}","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { SchemaError } from '@standard-schema/utils';\nexport class NamedSchemaError extends SchemaError {\n  constructor(issues: readonly StandardSchemaV1.Issue[], public readonly value: any, public readonly schemaName: string, public readonly _bqMeta: any) {\n    super(issues);\n  }\n}\nexport async function parseWithSchema<Schema extends StandardSchemaV1>(schema: Schema, data: unknown, schemaName: string, bqMeta: any): Promise<StandardSchemaV1.InferOutput<Schema>> {\n  const result = await schema['~standard'].validate(data);\n  if (result.issues) {\n    throw new NamedSchemaError(result.issues, data, schemaName, bqMeta);\n  }\n  return result.value;\n}","import type { PayloadAction } from '@reduxjs/toolkit';\nimport { combineReducers, createAction, createSlice, isAnyOf, isFulfilled, isRejectedWithValue, createNextState, prepareAutoBatched, SHOULD_AUTOBATCH, nanoid } from './rtkImports';\nimport type { QuerySubstateIdentifier, QuerySubState, MutationSubstateIdentifier, MutationSubState, MutationState, QueryState, InvalidationState, Subscribers, QueryCacheKey, SubscriptionState, ConfigState, InfiniteQuerySubState, InfiniteQueryDirection } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { AllQueryKeys, QueryArgFromAnyQueryDefinition, DataFromAnyQueryDefinition, InfiniteQueryThunk, MutationThunk, QueryThunk, QueryThunkArg } from './buildThunks';\nimport { calculateProvidedByThunk } from './buildThunks';\nimport { isInfiniteQueryDefinition, type AssertTagTypes, type EndpointDefinitions, type FullTagDescription, type QueryDefinition } from '../endpointDefinitions';\nimport type { Patch } from 'immer';\nimport { isDraft } from 'immer';\nimport { applyPatches, original } from 'immer';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\nimport { isDocumentVisible, isOnline, copyWithStructuralSharing } from '../utils';\nimport type { ApiContext } from '../apiTypes';\nimport { isUpsertQuery } from './buildInitiate';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { UnwrapPromise } from '../tsHelpers';\n\n/**\n * A typesafe single entry to be upserted into the cache\n */\nexport type NormalizedQueryUpsertEntry<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = {\n  endpointName: EndpointName;\n  arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>;\n  value: DataFromAnyQueryDefinition<Definitions, EndpointName>;\n};\n\n/**\n * The internal version that is not typesafe since we can't carry the generics through `createSlice`\n */\ntype NormalizedQueryUpsertEntryPayload = {\n  endpointName: string;\n  arg: unknown;\n  value: unknown;\n};\nexport type ProcessedQueryUpsertEntry = {\n  queryDescription: QueryThunkArg;\n  value: unknown;\n};\n\n/**\n * A typesafe representation of a util action creator that accepts cache entry descriptions to upsert\n */\nexport type UpsertEntries<Definitions extends EndpointDefinitions> = (<EndpointNames extends Array<AllQueryKeys<Definitions>>>(entries: [...{ [I in keyof EndpointNames]: NormalizedQueryUpsertEntry<Definitions, EndpointNames[I]> }]) => PayloadAction<NormalizedQueryUpsertEntryPayload[]>) & {\n  match: (action: unknown) => action is PayloadAction<NormalizedQueryUpsertEntryPayload[]>;\n};\nfunction updateQuerySubstateIfExists(state: QueryState<any>, queryCacheKey: QueryCacheKey, update: (substate: QuerySubState<any> | InfiniteQuerySubState<any>) => void) {\n  const substate = state[queryCacheKey];\n  if (substate) {\n    update(substate);\n  }\n}\nexport function getMutationCacheKey(id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n}): string | undefined;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n} | MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string | undefined {\n  return ('arg' in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId;\n}\nfunction updateMutationSubstateIfExists(state: MutationState<any>, id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}, update: (substate: MutationSubState<any>) => void) {\n  const substate = state[getMutationCacheKey(id)];\n  if (substate) {\n    update(substate);\n  }\n}\nconst initialState = {} as any;\nexport function buildSlice({\n  reducerPath,\n  queryThunk,\n  mutationThunk,\n  serializeQueryArgs,\n  context: {\n    endpointDefinitions: definitions,\n    apiUid,\n    extractRehydrationInfo,\n    hasRehydrationInfo\n  },\n  assertTagType,\n  config\n}: {\n  reducerPath: string;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  context: ApiContext<EndpointDefinitions>;\n  assertTagType: AssertTagTypes;\n  config: Omit<ConfigState<string>, 'online' | 'focused' | 'middlewareRegistered'>;\n}) {\n  const resetApiState = createAction(`${reducerPath}/resetApiState`);\n  function writePendingCacheEntry(draft: QueryState<any>, arg: QueryThunkArg, upserting: boolean, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n    // requestStatus: 'pending'\n  } & {\n    startedTimeStamp: number;\n  }) {\n    draft[arg.queryCacheKey] ??= {\n      status: QueryStatus.uninitialized,\n      endpointName: arg.endpointName\n    };\n    updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n      substate.status = QueryStatus.pending;\n      substate.requestId = upserting && substate.requestId ?\n      // for `upsertQuery` **updates**, keep the current `requestId`\n      substate.requestId :\n      // for normal queries or `upsertQuery` **inserts** always update the `requestId`\n      meta.requestId;\n      if (arg.originalArgs !== undefined) {\n        substate.originalArgs = arg.originalArgs;\n      }\n      substate.startedTimeStamp = meta.startedTimeStamp;\n      const endpointDefinition = definitions[meta.arg.endpointName];\n      if (isInfiniteQueryDefinition(endpointDefinition) && 'direction' in arg) {\n        ;\n        (substate as InfiniteQuerySubState<any>).direction = arg.direction as InfiniteQueryDirection;\n      }\n    });\n  }\n  function writeFulfilledCacheEntry(draft: QueryState<any>, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n  } & {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n  }, payload: unknown, upserting: boolean) {\n    updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, substate => {\n      if (substate.requestId !== meta.requestId && !upserting) return;\n      const {\n        merge\n      } = definitions[meta.arg.endpointName] as QueryDefinition<any, any, any, any>;\n      substate.status = QueryStatus.fulfilled;\n      if (merge) {\n        if (substate.data !== undefined) {\n          const {\n            fulfilledTimeStamp,\n            arg,\n            baseQueryMeta,\n            requestId\n          } = meta;\n          // There's existing cache data. Let the user merge it in themselves.\n          // We're already inside an Immer-powered reducer, and the user could just mutate `substate.data`\n          // themselves inside of `merge()`. But, they might also want to return a new value.\n          // Try to let Immer figure that part out, save the result, and assign it to `substate.data`.\n          let newData = createNextState(substate.data, draftSubstateData => {\n            // As usual with Immer, you can mutate _or_ return inside here, but not both\n            return merge(draftSubstateData, payload, {\n              arg: arg.originalArgs,\n              baseQueryMeta,\n              fulfilledTimeStamp,\n              requestId\n            });\n          });\n          substate.data = newData;\n        } else {\n          // Presumably a fresh request. Just cache the response data.\n          substate.data = payload;\n        }\n      } else {\n        // Assign or safely update the cache data.\n        substate.data = definitions[meta.arg.endpointName].structuralSharing ?? true ? copyWithStructuralSharing(isDraft(substate.data) ? original(substate.data) : substate.data, payload) : payload;\n      }\n      delete substate.error;\n      substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n    });\n  }\n  const querySlice = createSlice({\n    name: `${reducerPath}/queries`,\n    initialState: initialState as QueryState<any>,\n    reducers: {\n      removeQueryResult: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey\n          }\n        }: PayloadAction<QuerySubstateIdentifier>) {\n          delete draft[queryCacheKey];\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier>()\n      },\n      cacheEntriesUpserted: {\n        reducer(draft, action: PayloadAction<ProcessedQueryUpsertEntry[], string, {\n          RTK_autoBatch: boolean;\n          requestId: string;\n          timestamp: number;\n        }>) {\n          for (const entry of action.payload) {\n            const {\n              queryDescription: arg,\n              value\n            } = entry;\n            writePendingCacheEntry(draft, arg, true, {\n              arg,\n              requestId: action.meta.requestId,\n              startedTimeStamp: action.meta.timestamp\n            });\n            writeFulfilledCacheEntry(draft, {\n              arg,\n              requestId: action.meta.requestId,\n              fulfilledTimeStamp: action.meta.timestamp,\n              baseQueryMeta: {}\n            }, value,\n            // We know we're upserting here\n            true);\n          }\n        },\n        prepare: (payload: NormalizedQueryUpsertEntryPayload[]) => {\n          const queryDescriptions: ProcessedQueryUpsertEntry[] = payload.map(entry => {\n            const {\n              endpointName,\n              arg,\n              value\n            } = entry;\n            const endpointDefinition = definitions[endpointName];\n            const queryDescription: QueryThunkArg = {\n              type: 'query',\n              endpointName: endpointName,\n              originalArgs: entry.arg,\n              queryCacheKey: serializeQueryArgs({\n                queryArgs: arg,\n                endpointDefinition,\n                endpointName\n              })\n            };\n            return {\n              queryDescription,\n              value\n            };\n          });\n          const result = {\n            payload: queryDescriptions,\n            meta: {\n              [SHOULD_AUTOBATCH]: true,\n              requestId: nanoid(),\n              timestamp: Date.now()\n            }\n          };\n          return result;\n        }\n      },\n      queryResultPatched: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey,\n            patches\n          }\n        }: PayloadAction<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>) {\n          updateQuerySubstateIfExists(draft, queryCacheKey, substate => {\n            substate.data = applyPatches(substate.data as any, patches.concat());\n          });\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(queryThunk.pending, (draft, {\n        meta,\n        meta: {\n          arg\n        }\n      }) => {\n        const upserting = isUpsertQuery(arg);\n        writePendingCacheEntry(draft, arg, upserting, meta);\n      }).addCase(queryThunk.fulfilled, (draft, {\n        meta,\n        payload\n      }) => {\n        const upserting = isUpsertQuery(meta.arg);\n        writeFulfilledCacheEntry(draft, meta, payload, upserting);\n      }).addCase(queryThunk.rejected, (draft, {\n        meta: {\n          condition,\n          arg,\n          requestId\n        },\n        error,\n        payload\n      }) => {\n        updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n          if (condition) {\n            // request was aborted due to condition (another query already running)\n          } else {\n            // request failed\n            if (substate.requestId !== requestId) return;\n            substate.status = QueryStatus.rejected;\n            substate.error = (payload ?? error) as any;\n          }\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          queries\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(queries)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  const mutationSlice = createSlice({\n    name: `${reducerPath}/mutations`,\n    initialState: initialState as MutationState<any>,\n    reducers: {\n      removeMutationResult: {\n        reducer(draft, {\n          payload\n        }: PayloadAction<MutationSubstateIdentifier>) {\n          const cacheKey = getMutationCacheKey(payload);\n          if (cacheKey in draft) {\n            delete draft[cacheKey];\n          }\n        },\n        prepare: prepareAutoBatched<MutationSubstateIdentifier>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(mutationThunk.pending, (draft, {\n        meta,\n        meta: {\n          requestId,\n          arg,\n          startedTimeStamp\n        }\n      }) => {\n        if (!arg.track) return;\n        draft[getMutationCacheKey(meta)] = {\n          requestId,\n          status: QueryStatus.pending,\n          endpointName: arg.endpointName,\n          startedTimeStamp\n        };\n      }).addCase(mutationThunk.fulfilled, (draft, {\n        payload,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.fulfilled;\n          substate.data = payload;\n          substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n        });\n      }).addCase(mutationThunk.rejected, (draft, {\n        payload,\n        error,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.rejected;\n          substate.error = (payload ?? error) as any;\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          mutations\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(mutations)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          (entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) &&\n          // only rehydrate endpoints that were persisted using a `fixedCacheKey`\n          key !== entry?.requestId) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  type CalculateProvidedByAction = UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>;\n  const initialInvalidationState: InvalidationState<string> = {\n    tags: {},\n    keys: {}\n  };\n  const invalidationSlice = createSlice({\n    name: `${reducerPath}/invalidation`,\n    initialState: initialInvalidationState,\n    reducers: {\n      updateProvidedBy: {\n        reducer(draft, action: PayloadAction<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>) {\n          for (const {\n            queryCacheKey,\n            providedTags\n          } of action.payload) {\n            removeCacheKeyFromTags(draft, queryCacheKey);\n            for (const {\n              type,\n              id\n            } of providedTags) {\n              const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n\n            // Remove readonly from the providedTags array\n            draft.keys[queryCacheKey] = providedTags as FullTagDescription<string>[];\n          }\n        },\n        prepare: prepareAutoBatched<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(querySlice.actions.removeQueryResult, (draft, {\n        payload: {\n          queryCacheKey\n        }\n      }) => {\n        removeCacheKeyFromTags(draft, queryCacheKey);\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          provided\n        } = extractRehydrationInfo(action)!;\n        for (const [type, incomingTags] of Object.entries(provided)) {\n          for (const [id, cacheKeys] of Object.entries(incomingTags)) {\n            const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n            for (const queryCacheKey of cacheKeys) {\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n          }\n        }\n      }).addMatcher(isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)), (draft, action) => {\n        writeProvidedTagsForQueries(draft, [action]);\n      }).addMatcher(querySlice.actions.cacheEntriesUpserted.match, (draft, action) => {\n        const mockActions: CalculateProvidedByAction[] = action.payload.map(({\n          queryDescription,\n          value\n        }) => {\n          return {\n            type: 'UNKNOWN',\n            payload: value,\n            meta: {\n              requestStatus: 'fulfilled',\n              requestId: 'UNKNOWN',\n              arg: queryDescription\n            }\n          };\n        });\n        writeProvidedTagsForQueries(draft, mockActions);\n      });\n    }\n  });\n  function removeCacheKeyFromTags(draft: InvalidationState<any>, queryCacheKey: QueryCacheKey) {\n    const existingTags = draft.keys[queryCacheKey] ?? [];\n\n    // Delete this cache key from any existing tags that may have provided it\n    for (const tag of existingTags) {\n      const tagType = tag.type;\n      const tagId = tag.id ?? '__internal_without_id';\n      const tagSubscriptions = draft.tags[tagType]?.[tagId];\n      if (tagSubscriptions) {\n        draft.tags[tagType][tagId] = tagSubscriptions.filter(qc => qc !== queryCacheKey);\n      }\n    }\n    delete draft.keys[queryCacheKey];\n  }\n  function writeProvidedTagsForQueries(draft: InvalidationState<string>, actions: CalculateProvidedByAction[]) {\n    const providedByEntries = actions.map(action => {\n      const providedTags = calculateProvidedByThunk(action, 'providesTags', definitions, assertTagType);\n      const {\n        queryCacheKey\n      } = action.meta.arg;\n      return {\n        queryCacheKey,\n        providedTags\n      };\n    });\n    invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy(providedByEntries));\n  }\n\n  // Dummy slice to generate actions\n  const subscriptionSlice = createSlice({\n    name: `${reducerPath}/subscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      updateSubscriptionOptions(d, a: PayloadAction<{\n        endpointName: string;\n        requestId: string;\n        options: Subscribers[number];\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      unsubscribeQueryResult(d, a: PayloadAction<{\n        requestId: string;\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      internal_getRTKQSubscriptions() {}\n    }\n  });\n  const internalSubscriptionsSlice = createSlice({\n    name: `${reducerPath}/internalSubscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      subscriptionsUpdated: {\n        reducer(state, action: PayloadAction<Patch[]>) {\n          return applyPatches(state, action.payload);\n        },\n        prepare: prepareAutoBatched<Patch[]>()\n      }\n    }\n  });\n  const configSlice = createSlice({\n    name: `${reducerPath}/config`,\n    initialState: {\n      online: isOnline(),\n      focused: isDocumentVisible(),\n      middlewareRegistered: false,\n      ...config\n    } as ConfigState<string>,\n    reducers: {\n      middlewareRegistered(state, {\n        payload\n      }: PayloadAction<string>) {\n        state.middlewareRegistered = state.middlewareRegistered === 'conflict' || apiUid !== payload ? 'conflict' : true;\n      }\n    },\n    extraReducers: builder => {\n      builder.addCase(onOnline, state => {\n        state.online = true;\n      }).addCase(onOffline, state => {\n        state.online = false;\n      }).addCase(onFocus, state => {\n        state.focused = true;\n      }).addCase(onFocusLost, state => {\n        state.focused = false;\n      })\n      // update the state to be a new object to be picked up as a \"state change\"\n      // by redux-persist's `autoMergeLevel2`\n      .addMatcher(hasRehydrationInfo, draft => ({\n        ...draft\n      }));\n    }\n  });\n  const combinedReducer = combineReducers({\n    queries: querySlice.reducer,\n    mutations: mutationSlice.reducer,\n    provided: invalidationSlice.reducer,\n    subscriptions: internalSubscriptionsSlice.reducer,\n    config: configSlice.reducer\n  });\n  const reducer: typeof combinedReducer = (state, action) => combinedReducer(resetApiState.match(action) ? undefined : state, action);\n  const actions = {\n    ...configSlice.actions,\n    ...querySlice.actions,\n    ...subscriptionSlice.actions,\n    ...internalSubscriptionsSlice.actions,\n    ...mutationSlice.actions,\n    ...invalidationSlice.actions,\n    resetApiState\n  };\n  return {\n    reducer,\n    actions\n  };\n}\nexport type SliceActions = ReturnType<typeof buildSlice>['actions'];","import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, ReducerPathFrom, TagDescription, TagTypesFrom } from '../endpointDefinitions';\nimport { expandTagDescription } from '../endpointDefinitions';\nimport { flatten, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationSubState, QueryCacheKey, QueryKeys, QueryState, QuerySubState, RequestStatusFlags, RootState as _RootState } from './apiState';\nimport { QueryStatus, getRequestStatusFlags } from './apiState';\nimport { getMutationCacheKey } from './buildSlice';\nimport type { createSelector as _createSelector } from './rtkImports';\nimport { createNextState } from './rtkImports';\nimport { type AllQueryKeys, getNextPageParam, getPreviousPageParam } from './buildThunks';\nexport type SkipToken = typeof skipToken;\n/**\n * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`\n * instead of the query argument to get the same effect as if setting\n * `skip: true` in the query options.\n *\n * Useful for scenarios where a query should be skipped when `arg` is `undefined`\n * and TypeScript complains about it because `arg` is not allowed to be passed\n * in as `undefined`, such as\n *\n * ```ts\n * // codeblock-meta title=\"will error if the query argument is not allowed to be undefined\" no-transpile\n * useSomeQuery(arg, { skip: !!arg })\n * ```\n *\n * ```ts\n * // codeblock-meta title=\"using skipToken instead\" no-transpile\n * useSomeQuery(arg ?? skipToken)\n * ```\n *\n * If passed directly into a query or mutation selector, that selector will always\n * return an uninitialized state.\n */\nexport const skipToken = /* @__PURE__ */Symbol.for('RTKQ/skipToken');\nexport type BuildSelectorsApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: QueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: InfiniteQueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: MutationResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\ntype QueryResultSelectorFactory<Definition extends QueryDefinition<any, any, any, any>, RootState> = (queryArg: QueryArgFrom<Definition> | SkipToken) => (state: RootState) => QueryResultSelectorResult<Definition>;\nexport type QueryResultSelectorResult<Definition extends QueryDefinition<any, any, any, any>> = QuerySubState<Definition> & RequestStatusFlags;\ntype InfiniteQueryResultSelectorFactory<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, RootState> = (queryArg: InfiniteQueryArgFrom<Definition> | SkipToken) => (state: RootState) => InfiniteQueryResultSelectorResult<Definition>;\nexport type InfiniteQueryResultFlags = {\n  hasNextPage: boolean;\n  hasPreviousPage: boolean;\n  isFetchingNextPage: boolean;\n  isFetchingPreviousPage: boolean;\n  isFetchNextPageError: boolean;\n  isFetchPreviousPageError: boolean;\n};\nexport type InfiniteQueryResultSelectorResult<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<Definition> & RequestStatusFlags & InfiniteQueryResultFlags;\ntype MutationResultSelectorFactory<Definition extends MutationDefinition<any, any, any, any>, RootState> = (requestId: string | {\n  requestId: string | undefined;\n  fixedCacheKey: string | undefined;\n} | SkipToken) => (state: RootState) => MutationResultSelectorResult<Definition>;\nexport type MutationResultSelectorResult<Definition extends MutationDefinition<any, any, any, any>> = MutationSubState<Definition> & RequestStatusFlags;\nconst initialSubState: QuerySubState<any> = {\n  status: QueryStatus.uninitialized as const\n};\n\n// abuse immer to freeze default states\nconst defaultQuerySubState = /* @__PURE__ */createNextState(initialSubState, () => {});\nconst defaultMutationSubState = /* @__PURE__ */createNextState(initialSubState as MutationSubState<any>, () => {});\nexport type AllSelectors = ReturnType<typeof buildSelectors>;\nexport function buildSelectors<Definitions extends EndpointDefinitions, ReducerPath extends string>({\n  serializeQueryArgs,\n  reducerPath,\n  createSelector\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  reducerPath: ReducerPath;\n  createSelector: typeof _createSelector;\n}) {\n  type RootState = _RootState<Definitions, string, string>;\n  const selectSkippedQuery = (state: RootState) => defaultQuerySubState;\n  const selectSkippedMutation = (state: RootState) => defaultMutationSubState;\n  return {\n    buildQuerySelector,\n    buildInfiniteQuerySelector,\n    buildMutationSelector,\n    selectInvalidatedBy,\n    selectCachedArgsForQuery,\n    selectApiState,\n    selectQueries,\n    selectMutations,\n    selectQueryEntry,\n    selectConfig\n  };\n  function withRequestFlags<T extends {\n    status: QueryStatus;\n  }>(substate: T): T & RequestStatusFlags {\n    return {\n      ...substate,\n      ...getRequestStatusFlags(substate.status)\n    };\n  }\n  function selectApiState(rootState: RootState) {\n    const state = rootState[reducerPath];\n    if (process.env.NODE_ENV !== 'production') {\n      if (!state) {\n        if ((selectApiState as any).triggered) return state;\n        (selectApiState as any).triggered = true;\n        console.error(`Error: No data found at \\`state.${reducerPath}\\`. Did you forget to add the reducer to the store?`);\n      }\n    }\n    return state;\n  }\n  function selectQueries(rootState: RootState) {\n    return selectApiState(rootState)?.queries;\n  }\n  function selectQueryEntry(rootState: RootState, cacheKey: QueryCacheKey) {\n    return selectQueries(rootState)?.[cacheKey];\n  }\n  function selectMutations(rootState: RootState) {\n    return selectApiState(rootState)?.mutations;\n  }\n  function selectConfig(rootState: RootState) {\n    return selectApiState(rootState)?.config;\n  }\n  function buildAnyQuerySelector(endpointName: string, endpointDefinition: EndpointDefinition<any, any, any, any>, combiner: <T extends {\n    status: QueryStatus;\n  }>(substate: T) => T & RequestStatusFlags) {\n    return (queryArgs: any) => {\n      // Avoid calling serializeQueryArgs if the arg is skipToken\n      if (queryArgs === skipToken) {\n        return createSelector(selectSkippedQuery, combiner);\n      }\n      const serializedArgs = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      const selectQuerySubstate = (state: RootState) => selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState;\n      return createSelector(selectQuerySubstate, combiner);\n    };\n  }\n  function buildQuerySelector(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags) as QueryResultSelectorFactory<any, RootState>;\n  }\n  function buildInfiniteQuerySelector(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const {\n      infiniteQueryOptions\n    } = endpointDefinition;\n    function withInfiniteQueryResultFlags<T extends {\n      status: QueryStatus;\n    }>(substate: T): T & RequestStatusFlags & InfiniteQueryResultFlags {\n      const stateWithRequestFlags = {\n        ...(substate as InfiniteQuerySubState<any>),\n        ...getRequestStatusFlags(substate.status)\n      };\n      const {\n        isLoading,\n        isError,\n        direction\n      } = stateWithRequestFlags;\n      const isForward = direction === 'forward';\n      const isBackward = direction === 'backward';\n      return {\n        ...stateWithRequestFlags,\n        hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        isFetchingNextPage: isLoading && isForward,\n        isFetchingPreviousPage: isLoading && isBackward,\n        isFetchNextPageError: isError && isForward,\n        isFetchPreviousPageError: isError && isBackward\n      };\n    }\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags) as unknown as InfiniteQueryResultSelectorFactory<any, RootState>;\n  }\n  function buildMutationSelector() {\n    return (id => {\n      let mutationId: string | typeof skipToken;\n      if (typeof id === 'object') {\n        mutationId = getMutationCacheKey(id) ?? skipToken;\n      } else {\n        mutationId = id;\n      }\n      const selectMutationSubstate = (state: RootState) => selectApiState(state)?.mutations?.[mutationId as string] ?? defaultMutationSubState;\n      const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;\n      return createSelector(finalSelectMutationSubstate, withRequestFlags);\n    }) as MutationResultSelectorFactory<any, RootState>;\n  }\n  function selectInvalidatedBy(state: RootState, tags: ReadonlyArray<TagDescription<string> | null | undefined>): Array<{\n    endpointName: string;\n    originalArgs: any;\n    queryCacheKey: QueryCacheKey;\n  }> {\n    const apiState = state[reducerPath];\n    const toInvalidate = new Set<QueryCacheKey>();\n    for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {\n      const provided = apiState.provided.tags[tag.type];\n      if (!provided) {\n        continue;\n      }\n      let invalidateSubscriptions = (tag.id !== undefined ?\n      // id given: invalidate all queries that provide this type & id\n      provided[tag.id] :\n      // no id: invalidate all queries that provide this type\n      flatten(Object.values(provided))) ?? [];\n      for (const invalidate of invalidateSubscriptions) {\n        toInvalidate.add(invalidate);\n      }\n    }\n    return flatten(Array.from(toInvalidate.values()).map(queryCacheKey => {\n      const querySubState = apiState.queries[queryCacheKey];\n      return querySubState ? [{\n        queryCacheKey,\n        endpointName: querySubState.endpointName!,\n        originalArgs: querySubState.originalArgs\n      }] : [];\n    }));\n  }\n  function selectCachedArgsForQuery<QueryName extends AllQueryKeys<Definitions>>(state: RootState, queryName: QueryName): Array<QueryArgFromAnyQuery<Definitions[QueryName]>> {\n    return Object.values(selectQueries(state) as QueryState<any>).filter((entry): entry is Exclude<QuerySubState<Definitions[QueryName]>, {\n      status: QueryStatus.uninitialized;\n    }> => entry?.endpointName === queryName && entry.status !== QueryStatus.uninitialized).map(entry => entry.originalArgs);\n  }\n  function getHasNextPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data) return false;\n    return getNextPageParam(options, data, queryArg) != null;\n  }\n  function getHasPreviousPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data || !options.getPreviousPageParam) return false;\n    return getPreviousPageParam(options, data, queryArg) != null;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Api, ApiContext, Module, ModuleName } from './apiTypes';\nimport type { CombinedState } from './core/apiState';\nimport type { BaseQueryArg, BaseQueryFn } from './baseQueryTypes';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { EndpointBuilder, EndpointDefinitions, SchemaFailureConverter, SchemaFailureHandler } from './endpointDefinitions';\nimport { DefinitionType, isInfiniteQueryDefinition, isQueryDefinition } from './endpointDefinitions';\nimport { nanoid } from './core/rtkImports';\nimport type { UnknownAction } from '@reduxjs/toolkit';\nimport type { NoInfer } from './tsHelpers';\nimport { weakMapMemoize } from 'reselect';\nexport interface CreateApiOptions<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never> {\n  /**\n   * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   // highlight-start\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  baseQuery: BaseQuery;\n  /**\n   * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   tagTypes: ['Post', 'User'],\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  tagTypes?: readonly TagTypes[];\n  /**\n   * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"apis.js\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';\n   *\n   * const apiOne = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiOne',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   *\n   * const apiTwo = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiTwo',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   * ```\n   */\n  reducerPath?: ReducerPath;\n  /**\n   * Accepts a custom function if you have a need to change the creation of cache keys for any reason.\n   */\n  serializeQueryArgs?: SerializeQueryArgs<unknown>;\n  /**\n   * Endpoints are a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are three endpoint types: [`query`](../../rtk-query/usage/queries), [`infiniteQuery`](../../rtk-query/usage/infinite-queries) and [`mutation`](../../rtk-query/usage/mutations).\n   */\n  endpoints(build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>): Definitions;\n  /**\n   * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   *\n   * ```ts\n   * // codeblock-meta title=\"keepUnusedDataFor example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       keepUnusedDataFor: 5\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  keepUnusedDataFor?: number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `'delayed'`. This setting allows you to control when tags are invalidated after a mutation.\n   *\n   * - `'immediately'`: Queries are invalidated instantly after the mutation finished, even if they are running.\n   *   If the query provides tags that were invalidated while it ran, it won't be re-fetched.\n   * - `'delayed'`: Invalidation only happens after all queries and mutations are settled.\n   *   This ensures that queries are always invalidated correctly and automatically \"batches\" invalidations of concurrent mutations.\n   *   Note that if you constantly have some queries (or mutations) running, this can delay tag invalidations indefinitely.\n   */\n  invalidationBehavior?: 'delayed' | 'immediately';\n  /**\n   * A function that is passed every dispatched action. If this returns something other than `undefined`,\n   * that return value will be used to rehydrate fulfilled & errored queries.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"next-redux-wrapper rehydration example\"\n   * import type { Action, PayloadAction } from '@reduxjs/toolkit'\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import { HYDRATE } from 'next-redux-wrapper'\n   *\n   * type RootState = any; // normally inferred from state\n   *\n   * function isHydrateAction(action: Action): action is PayloadAction<RootState> {\n   *   return action.type === HYDRATE\n   * }\n   *\n   * export const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   extractRehydrationInfo(action, { reducerPath }): any {\n   *     if (isHydrateAction(action)) {\n   *       return action.payload[reducerPath]\n   *     }\n   *   },\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // omitted\n   *   }),\n   * })\n   * ```\n   */\n  extractRehydrationInfo?: (action: UnknownAction, {\n    reducerPath\n  }: {\n    reducerPath: ReducerPath;\n  }) => undefined | CombinedState<NoInfer<Definitions>, NoInfer<TagTypes>, NoInfer<ReducerPath>>;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *     }),\n   *   }),\n   *   onSchemaFailure: (error, info) => {\n   *     console.error(error, info)\n   *   },\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   }),\n   *   catchSchemaFailure: (error, info) => ({\n   *     status: \"CUSTOM_ERROR\",\n   *     error: error.schemaName + \" failed validation\",\n   *     data: error.issues,\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for all endpoints, unless overridden by the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type CreateApi<Modules extends ModuleName> = {\n  /**\n   * Creates a service to use in your application. Contains only the basic redux logic (the core module).\n   *\n   * @link https://redux-toolkit.js.org/rtk-query/api/createApi\n   */\n  <BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never>(options: CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>): Api<BaseQuery, Definitions, ReducerPath, TagTypes, Modules>;\n};\n\n/**\n * Builds a `createApi` method based on the provided `modules`.\n *\n * @link https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api\n *\n * @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints\n * @returns A `createApi` method using the provided `modules`.\n */\nexport function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(...modules: Modules): CreateApi<Modules[number]['name']> {\n  return function baseCreateApi(options) {\n    const extractRehydrationInfo = weakMapMemoize((action: UnknownAction) => options.extractRehydrationInfo?.(action, {\n      reducerPath: (options.reducerPath ?? 'api') as any\n    }));\n    const optionsWithDefaults: CreateApiOptions<any, any, any, any> = {\n      reducerPath: 'api',\n      keepUnusedDataFor: 60,\n      refetchOnMountOrArgChange: false,\n      refetchOnFocus: false,\n      refetchOnReconnect: false,\n      invalidationBehavior: 'delayed',\n      ...options,\n      extractRehydrationInfo,\n      serializeQueryArgs(queryArgsApi) {\n        let finalSerializeQueryArgs = defaultSerializeQueryArgs;\n        if ('serializeQueryArgs' in queryArgsApi.endpointDefinition) {\n          const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs!;\n          finalSerializeQueryArgs = queryArgsApi => {\n            const initialResult = endpointSQA(queryArgsApi);\n            if (typeof initialResult === 'string') {\n              // If the user function returned a string, use it as-is\n              return initialResult;\n            } else {\n              // Assume they returned an object (such as a subset of the original\n              // query args) or a primitive, and serialize it ourselves\n              return defaultSerializeQueryArgs({\n                ...queryArgsApi,\n                queryArgs: initialResult\n              });\n            }\n          };\n        } else if (options.serializeQueryArgs) {\n          finalSerializeQueryArgs = options.serializeQueryArgs;\n        }\n        return finalSerializeQueryArgs(queryArgsApi);\n      },\n      tagTypes: [...(options.tagTypes || [])]\n    };\n    const context: ApiContext<EndpointDefinitions> = {\n      endpointDefinitions: {},\n      batch(fn) {\n        // placeholder \"batch\" method to be overridden by plugins, for example with React.unstable_batchedUpdate\n        fn();\n      },\n      apiUid: nanoid(),\n      extractRehydrationInfo,\n      hasRehydrationInfo: weakMapMemoize(action => extractRehydrationInfo(action) != null)\n    };\n    const api = {\n      injectEndpoints,\n      enhanceEndpoints({\n        addTagTypes,\n        endpoints\n      }) {\n        if (addTagTypes) {\n          for (const eT of addTagTypes) {\n            if (!optionsWithDefaults.tagTypes!.includes(eT as any)) {\n              ;\n              (optionsWithDefaults.tagTypes as any[]).push(eT);\n            }\n          }\n        }\n        if (endpoints) {\n          for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {\n            if (typeof partialDefinition === 'function') {\n              partialDefinition(context.endpointDefinitions[endpointName]);\n            } else {\n              Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);\n            }\n          }\n        }\n        return api;\n      }\n    } as Api<BaseQueryFn, {}, string, string, Modules[number]['name']>;\n    const initializedModules = modules.map(m => m.init(api as any, optionsWithDefaults as any, context));\n    function injectEndpoints(inject: Parameters<typeof api.injectEndpoints>[0]) {\n      const evaluatedEndpoints = inject.endpoints({\n        query: x => ({\n          ...x,\n          type: DefinitionType.query\n        }) as any,\n        mutation: x => ({\n          ...x,\n          type: DefinitionType.mutation\n        }) as any,\n        infiniteQuery: x => ({\n          ...x,\n          type: DefinitionType.infinitequery\n        }) as any\n      });\n      for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {\n        if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {\n          if (inject.overrideExisting === 'throw') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(39) : `called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          } else if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n            console.error(`called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          }\n          continue;\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          if (isInfiniteQueryDefinition(definition)) {\n            const {\n              infiniteQueryOptions\n            } = definition;\n            const {\n              maxPages,\n              getPreviousPageParam\n            } = infiniteQueryOptions;\n            if (typeof maxPages === 'number') {\n              if (maxPages < 1) {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(40) : `maxPages for endpoint '${endpointName}' must be a number greater than 0`);\n              }\n              if (typeof getPreviousPageParam !== 'function') {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(41) : `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`);\n              }\n            }\n          }\n        }\n        context.endpointDefinitions[endpointName] = definition;\n        for (const m of initializedModules) {\n          m.injectEndpoint(endpointName, definition);\n        }\n      }\n      return api as any;\n    }\n    return api.injectEndpoints({\n      endpoints: options.endpoints as any\n    });\n  };\n}","import type { QueryCacheKey } from './core/apiState';\nimport type { EndpointDefinition } from './endpointDefinitions';\nimport { isPlainObject } from './core/rtkImports';\nconst cache: WeakMap<any, string> | undefined = WeakMap ? new WeakMap() : undefined;\nexport const defaultSerializeQueryArgs: SerializeQueryArgs<any> = ({\n  endpointName,\n  queryArgs\n}) => {\n  let serialized = '';\n  const cached = cache?.get(queryArgs);\n  if (typeof cached === 'string') {\n    serialized = cached;\n  } else {\n    const stringified = JSON.stringify(queryArgs, (key, value) => {\n      // Handle bigints\n      value = typeof value === 'bigint' ? {\n        $bigint: value.toString()\n      } : value;\n      // Sort the object keys before stringifying, to prevent useQuery({ a: 1, b: 2 }) having a different cache key than useQuery({ b: 2, a: 1 })\n      value = isPlainObject(value) ? Object.keys(value).sort().reduce<any>((acc, key) => {\n        acc[key] = (value as any)[key];\n        return acc;\n      }, {}) : value;\n      return value;\n    });\n    if (isPlainObject(queryArgs)) {\n      cache?.set(queryArgs, stringified);\n    }\n    serialized = stringified;\n  }\n  return `${endpointName}(${serialized})`;\n};\nexport type SerializeQueryArgs<QueryArgs, ReturnType = string> = (_: {\n  queryArgs: QueryArgs;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => ReturnType;\nexport type InternalSerializeQueryArgs = (_: {\n  queryArgs: any;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => QueryCacheKey;","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { BaseQueryFn } from './baseQueryTypes';\nexport const _NEVER = /* @__PURE__ */Symbol();\nexport type NEVER = typeof _NEVER;\n\n/**\n * Creates a \"fake\" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.\n * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.\n */\nexport function fakeBaseQuery<ErrorType>(): BaseQueryFn<void, NEVER, ErrorType, {}> {\n  return function () {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(33) : 'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.');\n  };\n}","/**\n * Note: this file should import all other files for type discovery and declaration merging\n */\nimport type { ActionCreatorWithPayload, Middleware, Reducer, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport { enablePatches } from 'immer';\nimport type { Api, Module } from '../apiTypes';\nimport type { BaseQueryFn } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinitions, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, TagDescription } from '../endpointDefinitions';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { assertCast, safeAssign } from '../tsHelpers';\nimport type { CombinedState, MutationKeys, QueryKeys, RootState } from './apiState';\nimport type { BuildInitiateApiEndpointMutation, BuildInitiateApiEndpointQuery, MutationActionCreatorResult, QueryActionCreatorResult, InfiniteQueryActionCreatorResult, BuildInitiateApiEndpointInfiniteQuery } from './buildInitiate';\nimport { buildInitiate } from './buildInitiate';\nimport type { ReferenceCacheCollection, ReferenceCacheLifecycle, ReferenceQueryLifecycle } from './buildMiddleware';\nimport { buildMiddleware } from './buildMiddleware';\nimport type { BuildSelectorsApiEndpointInfiniteQuery, BuildSelectorsApiEndpointMutation, BuildSelectorsApiEndpointQuery } from './buildSelectors';\nimport { buildSelectors } from './buildSelectors';\nimport type { SliceActions, UpsertEntries } from './buildSlice';\nimport { buildSlice } from './buildSlice';\nimport type { AllQueryKeys, BuildThunksApiEndpointInfiniteQuery, BuildThunksApiEndpointMutation, BuildThunksApiEndpointQuery, PatchQueryDataThunk, QueryArgFromAnyQueryDefinition, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nimport { buildThunks } from './buildThunks';\nimport { createSelector as _createSelector } from './rtkImports';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\n\n/**\n * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_\n * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value\n *\n * @overloadSummary\n * `force`\n * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.\n */\nexport type PrefetchOptions = {\n  ifOlderThan?: false | number;\n} | {\n  force?: boolean;\n};\nexport const coreModuleName = /* @__PURE__ */Symbol();\nexport type CoreModule = typeof coreModuleName | ReferenceCacheLifecycle | ReferenceQueryLifecycle | ReferenceCacheCollection;\nexport type ThunkWithReturnValue<T> = ThunkAction<T, any, any, UnknownAction>;\nexport interface ApiModules<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nBaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {\n  [coreModuleName]: {\n    /**\n     * This api's reducer should be mounted at `store[api.reducerPath]`.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducerPath: ReducerPath;\n    /**\n     * Internal actions not part of the public API. Note: These are subject to change at any given time.\n     */\n    internalActions: InternalActions;\n    /**\n     *  A standard redux reducer that enables core functionality. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducer: Reducer<CombinedState<Definitions, TagTypes, ReducerPath>, UnknownAction>;\n    /**\n     * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>>;\n    /**\n     * A collection of utility thunks for various situations.\n     */\n    util: {\n      /**\n       * A thunk that (if dispatched) will return a specific running query, identified\n       * by `endpointName` and `arg`.\n       * If that query is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific query triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueryThunk<EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>): ThunkWithReturnValue<QueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'query';\n      }> | InfiniteQueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'infinitequery';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return a specific running mutation, identified\n       * by `endpointName` and `fixedCacheKey` or `requestId`.\n       * If that mutation is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific mutation triggered in any way,\n       * including via hook trigger functions or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationThunk<EndpointName extends MutationKeys<Definitions>>(endpointName: EndpointName, fixedCacheKeyOrRequestId: string): ThunkWithReturnValue<MutationActionCreatorResult<Definitions[EndpointName] & {\n        type: 'mutation';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return all running queries.\n       *\n       * Useful for SSR scenarios to await all running queries triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueriesThunk(): ThunkWithReturnValue<Array<QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>>;\n\n      /**\n       * A thunk that (if dispatched) will return all running mutations.\n       *\n       * Useful for SSR scenarios to await all running mutations triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationsThunk(): ThunkWithReturnValue<Array<MutationActionCreatorResult<any>>>;\n\n      /**\n       * A Redux thunk that can be used to manually trigger pre-fetching of data.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.\n       *\n       * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.\n       *\n       * @example\n       *\n       * ```ts no-transpile\n       * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))\n       * ```\n       */\n      prefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction>;\n      /**\n       * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and an `updateRecipe` callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.\n       *\n       * The thunk executes _synchronously_, and returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).\n       *\n       * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, arg, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.\n       *\n       * Note that the first two arguments (`endpointName` and `arg`) are used to determine which existing cache entry to update. If no existing cache entry is found, the `updateRecipe` callback will not run.\n       *\n       * @example\n       *\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       * ```\n       */\n      updateQueryData: UpdateQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux thunk action creator that, when dispatched, acts as an artificial API request to upsert a value into the cache.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and the data to upsert.\n       *\n       * If no cache entry for that cache key exists, a cache entry will be created and the data added. If a cache entry already exists, this will _overwrite_ the existing cache entry data.\n       *\n       * The thunk executes _asynchronously_, and returns a promise that resolves when the store has been updated.\n       *\n       * If dispatched while an actual request is in progress, both the upsert and request will be handled as soon as they resolve, resulting in a \"last result wins\" update behavior.\n       *\n       * @example\n       *\n       * ```ts\n       * await dispatch(\n       *   api.util.upsertQueryData('getPost', {id: 1}, {id: 1, text: \"Hello!\"})\n       * )\n       * ```\n       */\n      upsertQueryData: UpsertQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n      /**\n       * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.\n       *\n       * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.\n       *\n       * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.\n       *\n       * @example\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       *\n       * // later\n       * dispatch(\n       *   api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)\n       * )\n       *\n       * // or\n       * patchCollection.undo()\n       * ```\n       */\n      patchQueryData: PatchQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.resetApiState())\n       * ```\n       */\n      resetApiState: SliceActions['resetApiState'];\n      upsertQueryEntries: UpsertEntries<Definitions>;\n\n      /**\n       * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).\n       *\n       * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.\n       *\n       * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.\n       *\n       * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:\n       *\n       * - `[TagType]`\n       * - `[{ type: TagType }]`\n       * - `[{ type: TagType, id: number | string }]`\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.invalidateTags(['Post']))\n       * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))\n       * dispatch(\n       *   api.util.invalidateTags([\n       *     { type: 'Post', id: 1 },\n       *     { type: 'Post', id: 'LIST' },\n       *   ])\n       * )\n       * ```\n       */\n      invalidateTags: ActionCreatorWithPayload<Array<TagDescription<TagTypes> | null | undefined>, string>;\n\n      /**\n       * A function to select all `{ endpointName, originalArgs, queryCacheKey }` combinations that would be invalidated by a specific set of tags.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectInvalidatedBy: (state: RootState<Definitions, string, ReducerPath>, tags: ReadonlyArray<TagDescription<TagTypes> | null | undefined>) => Array<{\n        endpointName: string;\n        originalArgs: any;\n        queryCacheKey: string;\n      }>;\n\n      /**\n       * A function to select all arguments currently cached for a given endpoint.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectCachedArgsForQuery: <QueryName extends AllQueryKeys<Definitions>>(state: RootState<Definitions, string, ReducerPath>, queryName: QueryName) => Array<QueryArgFromAnyQuery<Definitions[QueryName]>>;\n    };\n    /**\n     * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.\n     */\n    endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? ApiEndpointQuery<Definitions[K], Definitions> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? ApiEndpointMutation<Definitions[K], Definitions> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? ApiEndpointInfiniteQuery<Definitions[K], Definitions> : never };\n  };\n}\nexport interface ApiEndpointQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends QueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointQuery<Definition>, BuildInitiateApiEndpointQuery<Definition>, BuildSelectorsApiEndpointQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport interface ApiEndpointInfiniteQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends InfiniteQueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointInfiniteQuery<Definition>, BuildInitiateApiEndpointInfiniteQuery<Definition>, BuildSelectorsApiEndpointInfiniteQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface ApiEndpointMutation<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends MutationDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointMutation<Definition>, BuildInitiateApiEndpointMutation<Definition>, BuildSelectorsApiEndpointMutation<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport type ListenerActions = {\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n};\nexport type InternalActions = SliceActions & ListenerActions;\nexport interface CoreModuleOptions {\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module containing the basic redux logic for use with `buildCreateApi`.\n *\n * @example\n * ```ts\n * const createBaseApi = buildCreateApi(coreModule());\n * ```\n */\nexport const coreModule = ({\n  createSelector = _createSelector\n}: CoreModuleOptions = {}): Module<CoreModule> => ({\n  name: coreModuleName,\n  init(api, {\n    baseQuery,\n    tagTypes,\n    reducerPath,\n    serializeQueryArgs,\n    keepUnusedDataFor,\n    refetchOnMountOrArgChange,\n    refetchOnFocus,\n    refetchOnReconnect,\n    invalidationBehavior,\n    onSchemaFailure,\n    catchSchemaFailure,\n    skipSchemaValidation\n  }, context) {\n    enablePatches();\n    assertCast<InternalSerializeQueryArgs>(serializeQueryArgs);\n    const assertTagType: AssertTagTypes = tag => {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        if (!tagTypes.includes(tag.type as any)) {\n          console.error(`Tag type '${tag.type}' was used, but not specified in \\`tagTypes\\`!`);\n        }\n      }\n      return tag;\n    };\n    Object.assign(api, {\n      reducerPath,\n      endpoints: {},\n      internalActions: {\n        onOnline,\n        onOffline,\n        onFocus,\n        onFocusLost\n      },\n      util: {}\n    });\n    const selectors = buildSelectors({\n      serializeQueryArgs: serializeQueryArgs as any,\n      reducerPath,\n      createSelector\n    });\n    const {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery,\n      buildQuerySelector,\n      buildInfiniteQuerySelector,\n      buildMutationSelector\n    } = selectors;\n    safeAssign(api.util, {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery\n    });\n    const {\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      buildMatchThunkActions\n    } = buildThunks({\n      baseQuery,\n      reducerPath,\n      context,\n      api,\n      serializeQueryArgs,\n      assertTagType,\n      selectors,\n      onSchemaFailure,\n      catchSchemaFailure,\n      skipSchemaValidation\n    });\n    const {\n      reducer,\n      actions: sliceActions\n    } = buildSlice({\n      context,\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      serializeQueryArgs,\n      reducerPath,\n      assertTagType,\n      config: {\n        refetchOnFocus,\n        refetchOnReconnect,\n        refetchOnMountOrArgChange,\n        keepUnusedDataFor,\n        reducerPath,\n        invalidationBehavior\n      }\n    });\n    safeAssign(api.util, {\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      resetApiState: sliceActions.resetApiState,\n      upsertQueryEntries: sliceActions.cacheEntriesUpserted as any\n    });\n    safeAssign(api.internalActions, sliceActions);\n    const {\n      middleware,\n      actions: middlewareActions\n    } = buildMiddleware({\n      reducerPath,\n      context,\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      assertTagType,\n      selectors\n    });\n    safeAssign(api.util, middlewareActions);\n    safeAssign(api, {\n      reducer: reducer as any,\n      middleware\n    });\n    const {\n      buildInitiateQuery,\n      buildInitiateInfiniteQuery,\n      buildInitiateMutation,\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueriesThunk,\n      getRunningQueryThunk\n    } = buildInitiate({\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      serializeQueryArgs: serializeQueryArgs as any,\n      context\n    });\n    safeAssign(api.util, {\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueryThunk,\n      getRunningQueriesThunk\n    });\n    return {\n      name: coreModuleName,\n      injectEndpoint(endpointName, definition) {\n        const anyApi = api as any as Api<any, Record<string, any>, string, string, CoreModule>;\n        const endpoint = anyApi.endpoints[endpointName] ??= {} as any;\n        if (isQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildQuerySelector(endpointName, definition),\n            initiate: buildInitiateQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n        if (isMutationDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildMutationSelector(),\n            initiate: buildInitiateMutation(endpointName)\n          }, buildMatchThunkActions(mutationThunk, endpointName));\n        }\n        if (isInfiniteQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildInfiniteQuerySelector(endpointName, definition),\n            initiate: buildInitiateInfiniteQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n      }\n    };\n  }\n});","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import type { InternalHandlerBuilder, SubscriptionSelectors } from './types';\nimport type { SubscriptionState } from '../apiState';\nimport { produceWithPatches } from 'immer';\nimport type { Action } from '@reduxjs/toolkit';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildBatchedActionsHandler: InternalHandlerBuilder<[actionShouldContinue: boolean, returnValue: SubscriptionSelectors | boolean]> = ({\n  api,\n  queryThunk,\n  internalState\n}) => {\n  const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;\n  let previousSubscriptions: SubscriptionState = null as unknown as SubscriptionState;\n  let updateSyncTimer: ReturnType<typeof window.setTimeout> | null = null;\n  const {\n    updateSubscriptionOptions,\n    unsubscribeQueryResult\n  } = api.internalActions;\n\n  // Actually intentionally mutate the subscriptions state used in the middleware\n  // This is done to speed up perf when loading many components\n  const actuallyMutateSubscriptions = (mutableState: SubscriptionState, action: Action) => {\n    if (updateSubscriptionOptions.match(action)) {\n      const {\n        queryCacheKey,\n        requestId,\n        options\n      } = action.payload;\n      if (mutableState?.[queryCacheKey]?.[requestId]) {\n        mutableState[queryCacheKey]![requestId] = options;\n      }\n      return true;\n    }\n    if (unsubscribeQueryResult.match(action)) {\n      const {\n        queryCacheKey,\n        requestId\n      } = action.payload;\n      if (mutableState[queryCacheKey]) {\n        delete mutableState[queryCacheKey]![requestId];\n      }\n      return true;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) {\n      delete mutableState[action.payload.queryCacheKey];\n      return true;\n    }\n    if (queryThunk.pending.match(action)) {\n      const {\n        meta: {\n          arg,\n          requestId\n        }\n      } = action;\n      const substate = mutableState[arg.queryCacheKey] ??= {};\n      substate[`${requestId}_running`] = {};\n      if (arg.subscribe) {\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n      }\n      return true;\n    }\n    let mutated = false;\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {\n      const state = mutableState[action.meta.arg.queryCacheKey] || {};\n      const key = `${action.meta.requestId}_running`;\n      mutated ||= !!state[key];\n      delete state[key];\n    }\n    if (queryThunk.rejected.match(action)) {\n      const {\n        meta: {\n          condition,\n          arg,\n          requestId\n        }\n      } = action;\n      if (condition && arg.subscribe) {\n        const substate = mutableState[arg.queryCacheKey] ??= {};\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n        mutated = true;\n      }\n    }\n    return mutated;\n  };\n  const getSubscriptions = () => internalState.currentSubscriptions;\n  const getSubscriptionCount = (queryCacheKey: string) => {\n    const subscriptions = getSubscriptions();\n    const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {};\n    return countObjectKeys(subscriptionsForQueryArg);\n  };\n  const isRequestSubscribed = (queryCacheKey: string, requestId: string) => {\n    const subscriptions = getSubscriptions();\n    return !!subscriptions?.[queryCacheKey]?.[requestId];\n  };\n  const subscriptionSelectors: SubscriptionSelectors = {\n    getSubscriptions,\n    getSubscriptionCount,\n    isRequestSubscribed\n  };\n  return (action, mwApi): [actionShouldContinue: boolean, result: SubscriptionSelectors | boolean] => {\n    if (!previousSubscriptions) {\n      // Initialize it the first time this handler runs\n      previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n    }\n    if (api.util.resetApiState.match(action)) {\n      previousSubscriptions = internalState.currentSubscriptions = {};\n      updateSyncTimer = null;\n      return [true, false];\n    }\n\n    // Intercept requests by hooks to see if they're subscribed\n    // We return the internal state reference so that hooks\n    // can do their own checks to see if they're still active.\n    // It's stupid and hacky, but it does cut down on some dispatch calls.\n    if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {\n      return [false, subscriptionSelectors];\n    }\n\n    // Update subscription data based on this action\n    const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);\n    let actionShouldContinue = true;\n    if (didMutate) {\n      if (!updateSyncTimer) {\n        // We only use the subscription state for the Redux DevTools at this point,\n        // as the real data is kept here in the middleware.\n        // Given that, we can throttle synchronizing this state significantly to\n        // save on overall perf.\n        // In 1.9, it was updated in a microtask, but now we do it at most every 500ms.\n        updateSyncTimer = setTimeout(() => {\n          // Deep clone the current subscription data\n          const newSubscriptions: SubscriptionState = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n          // Figure out a smaller diff between original and current\n          const [, patches] = produceWithPatches(previousSubscriptions, () => newSubscriptions);\n\n          // Sync the store state for visibility\n          mwApi.next(api.internalActions.subscriptionsUpdated(patches));\n          // Save the cloned state for later reference\n          previousSubscriptions = newSubscriptions;\n          updateSyncTimer = null;\n        }, 500);\n      }\n      const isSubscriptionSliceAction = typeof action.type == 'string' && !!action.type.startsWith(subscriptionsPrefix);\n      const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;\n      actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;\n    }\n    return [actionShouldContinue, false];\n  };\n};","import type { QueryDefinition } from '../../endpointDefinitions';\nimport type { ConfigState, QueryCacheKey } from '../apiState';\nimport { isAnyOf } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, QueryStateMeta, SubMiddlewareApi, TimeoutId } from './types';\nexport type ReferenceCacheCollection = never;\nfunction isObjectEmpty(obj: Record<any, any>) {\n  // Apparently a for..in loop is faster than `Object.keys()` here:\n  // https://stackoverflow.com/a/59787784/62937\n  for (const k in obj) {\n    // If there is at least one key, it's not empty\n    return false;\n  }\n  return true;\n}\nexport type CacheCollectionQueryExtraOptions = {\n  /**\n   * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_\n   *\n   * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   */\n  keepUnusedDataFor?: number;\n};\n\n// Per https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value , browsers store\n// `setTimeout()` timer values in a 32-bit int. If we pass a value in that's larger than that,\n// it wraps and ends up executing immediately.\n// Our `keepUnusedDataFor` values are in seconds, so adjust the numbers here accordingly.\nexport const THIRTY_TWO_BIT_MAX_INT = 2_147_483_647;\nexport const THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2_147_483_647 / 1_000 - 1;\nexport const buildCacheCollectionHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  api,\n  queryThunk,\n  context,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectConfig\n  }\n}) => {\n  const {\n    removeQueryResult,\n    unsubscribeQueryResult,\n    cacheEntriesUpserted\n  } = api.internalActions;\n  const canTriggerUnsubscribe = isAnyOf(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);\n  function anySubscriptionsRemainingForKey(queryCacheKey: string) {\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    return !!subscriptions && !isObjectEmpty(subscriptions);\n  }\n  const currentRemovalTimeouts: QueryStateMeta<TimeoutId> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, internalState) => {\n    const state = mwApi.getState();\n    const config = selectConfig(state);\n    if (canTriggerUnsubscribe(action)) {\n      let queryCacheKeys: QueryCacheKey[];\n      if (cacheEntriesUpserted.match(action)) {\n        queryCacheKeys = action.payload.map(entry => entry.queryDescription.queryCacheKey);\n      } else {\n        const {\n          queryCacheKey\n        } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;\n        queryCacheKeys = [queryCacheKey];\n      }\n      handleUnsubscribeMany(queryCacheKeys, mwApi, config);\n    }\n    if (api.util.resetApiState.match(action)) {\n      for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {\n        if (timeout) clearTimeout(timeout);\n        delete currentRemovalTimeouts[key];\n      }\n    }\n    if (context.hasRehydrationInfo(action)) {\n      const {\n        queries\n      } = context.extractRehydrationInfo(action)!;\n      // Gotcha:\n      // If rehydrating before the endpoint has been injected,the global `keepUnusedDataFor`\n      // will be used instead of the endpoint-specific one.\n      handleUnsubscribeMany(Object.keys(queries) as QueryCacheKey[], mwApi, config);\n    }\n  };\n  function handleUnsubscribeMany(cacheKeys: QueryCacheKey[], api: SubMiddlewareApi, config: ConfigState<string>) {\n    const state = api.getState();\n    for (const queryCacheKey of cacheKeys) {\n      const entry = selectQueryEntry(state, queryCacheKey);\n      handleUnsubscribe(queryCacheKey, entry?.endpointName, api, config);\n    }\n  }\n  function handleUnsubscribe(queryCacheKey: QueryCacheKey, endpointName: string | undefined, api: SubMiddlewareApi, config: ConfigState<string>) {\n    const endpointDefinition = context.endpointDefinitions[endpointName!] as QueryDefinition<any, any, any, any>;\n    const keepUnusedDataFor = endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor;\n    if (keepUnusedDataFor === Infinity) {\n      // Hey, user said keep this forever!\n      return;\n    }\n    // Prevent `setTimeout` timers from overflowing a 32-bit internal int, by\n    // clamping the max value to be at most 1000ms less than the 32-bit max.\n    // Look, a 24.8-day keepalive ought to be enough for anybody, right? :)\n    // Also avoid negative values too.\n    const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));\n    if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n      const currentTimeout = currentRemovalTimeouts[queryCacheKey];\n      if (currentTimeout) {\n        clearTimeout(currentTimeout);\n      }\n      currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {\n        if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n          api.dispatch(removeQueryResult({\n            queryCacheKey\n          }));\n        }\n        delete currentRemovalTimeouts![queryCacheKey];\n      }, finalKeepUnusedDataFor * 1000);\n    }\n  }\n  return handler;\n};","import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { BaseQueryFn, BaseQueryMeta, BaseQueryResult } from '../../baseQueryTypes';\nimport type { BaseEndpointDefinition } from '../../endpointDefinitions';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { QueryCacheKey, RootState } from '../apiState';\nimport type { MutationResultSelectorResult, QueryResultSelectorResult } from '../buildSelectors';\nimport { getMutationCacheKey } from '../buildSlice';\nimport type { PatchCollection, Recipe } from '../buildThunks';\nimport { isAsyncThunkAction, isFulfilled } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseWithKnownReason, SubMiddlewareApi } from './types';\nexport type ReferenceCacheLifecycle = never;\nexport interface QueryBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends LifecycleApi<ReducerPath> {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): QueryResultSelectorResult<{\n    type: DefinitionType.query;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n  /**\n   * Updates the current cache entry value.\n   * For documentation see `api.util.updateQueryData`.\n   */\n  updateCachedData(updateRecipe: Recipe<ResultType>): PatchCollection;\n}\nexport type MutationBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = LifecycleApi<ReducerPath> & {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): MutationResultSelectorResult<{\n    type: DefinitionType.mutation;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n};\ntype LifecycleApi<ReducerPath extends string = string> = {\n  /**\n   * The dispatch method for the store\n   */\n  dispatch: ThunkDispatch<any, any, UnknownAction>;\n  /**\n   * A method to get the current state\n   */\n  getState(): RootState<any, any, ReducerPath>;\n  /**\n   * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.\n   */\n  extra: unknown;\n  /**\n   * A unique ID generated for the mutation\n   */\n  requestId: string;\n};\ntype CacheLifecyclePromises<ResultType = unknown, MetaType = unknown> = {\n  /**\n   * Promise that will resolve with the first value for this cache key.\n   * This allows you to `await` until an actual value is in cache.\n   *\n   * If the cache entry is removed from the cache before any value has ever\n   * been resolved, this Promise will reject with\n   * `new Error('Promise never resolved before cacheEntryRemoved.')`\n   * to prevent memory leaks.\n   * You can just re-throw that error (or not handle it at all) -\n   * it will be caught outside of `cacheEntryAdded`.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  cacheDataLoaded: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: MetaType;\n  }, typeof neverResolvedError>;\n  /**\n   * Promise that allows you to wait for the point in time when the cache entry\n   * has been removed from the cache, by not being used/subscribed to any more\n   * in the application for too long or by dispatching `api.util.resetApiState`.\n   */\n  cacheEntryRemoved: Promise<void>;\n};\nexport interface QueryCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>> {}\nexport type MutationCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>>;\nexport type CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: QueryCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type CacheLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: MutationCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nconst neverResolvedError = new Error('Promise never resolved before cacheEntryRemoved.') as Error & {\n  message: 'Promise never resolved before cacheEntryRemoved.';\n};\nexport const buildCacheLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  reducerPath,\n  context,\n  queryThunk,\n  mutationThunk,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectApiState\n  }\n}) => {\n  const isQueryThunk = isAsyncThunkAction(queryThunk);\n  const isMutationThunk = isAsyncThunkAction(mutationThunk);\n  const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    valueResolved?(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    cacheEntryRemoved(): void;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  function resolveLifecycleEntry(cacheKey: string, data: unknown, meta: unknown) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle?.valueResolved) {\n      lifecycle.valueResolved({\n        data,\n        meta\n      });\n      delete lifecycle.valueResolved;\n    }\n  }\n  function removeLifecycleEntry(cacheKey: string) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle) {\n      delete lifecycleMap[cacheKey];\n      lifecycle.cacheEntryRemoved();\n    }\n  }\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, stateBefore) => {\n    const cacheKey = getCacheKey(action) as QueryCacheKey;\n    function checkForNewCacheKey(endpointName: string, cacheKey: QueryCacheKey, requestId: string, originalArgs: unknown) {\n      const oldEntry = selectQueryEntry(stateBefore, cacheKey);\n      const newEntry = selectQueryEntry(mwApi.getState(), cacheKey);\n      if (!oldEntry && newEntry) {\n        handleNewKey(endpointName, originalArgs, cacheKey, mwApi, requestId);\n      }\n    }\n    if (queryThunk.pending.match(action)) {\n      checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);\n    } else if (api.internalActions.cacheEntriesUpserted.match(action)) {\n      for (const {\n        queryDescription,\n        value\n      } of action.payload) {\n        const {\n          endpointName,\n          originalArgs,\n          queryCacheKey\n        } = queryDescription;\n        checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);\n        resolveLifecycleEntry(queryCacheKey, value, {});\n      }\n    } else if (mutationThunk.pending.match(action)) {\n      const state = mwApi.getState()[reducerPath].mutations[cacheKey];\n      if (state) {\n        handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);\n      }\n    } else if (isFulfilledThunk(action)) {\n      resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);\n    } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {\n      removeLifecycleEntry(cacheKey);\n    } else if (api.util.resetApiState.match(action)) {\n      for (const cacheKey of Object.keys(lifecycleMap)) {\n        removeLifecycleEntry(cacheKey);\n      }\n    }\n  };\n  function getCacheKey(action: any) {\n    if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;\n    if (isMutationThunk(action)) {\n      return action.meta.arg.fixedCacheKey ?? action.meta.requestId;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;\n    if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);\n    return '';\n  }\n  function handleNewKey(endpointName: string, originalArgs: any, queryCacheKey: string, mwApi: SubMiddlewareApi, requestId: string) {\n    const endpointDefinition = context.endpointDefinitions[endpointName];\n    const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded;\n    if (!onCacheEntryAdded) return;\n    const lifecycle = {} as CacheLifecycle;\n    const cacheEntryRemoved = new Promise<void>(resolve => {\n      lifecycle.cacheEntryRemoved = resolve;\n    });\n    const cacheDataLoaded: PromiseWithKnownReason<{\n      data: unknown;\n      meta: unknown;\n    }, typeof neverResolvedError> = Promise.race([new Promise<{\n      data: unknown;\n      meta: unknown;\n    }>(resolve => {\n      lifecycle.valueResolved = resolve;\n    }), cacheEntryRemoved.then(() => {\n      throw neverResolvedError;\n    })]);\n    // prevent uncaught promise rejections from happening.\n    // if the original promise is used in any way, that will create a new promise that will throw again\n    cacheDataLoaded.catch(() => {});\n    lifecycleMap[queryCacheKey] = lifecycle;\n    const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : queryCacheKey);\n    const extra = mwApi.dispatch((_, __, extra) => extra);\n    const lifecycleApi = {\n      ...mwApi,\n      getCacheEntry: () => selector(mwApi.getState()),\n      requestId,\n      extra,\n      updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n      cacheDataLoaded,\n      cacheEntryRemoved\n    };\n    const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi as any);\n    // if a `neverResolvedError` was thrown, but not handled in the running handler, do not let it leak out further\n    Promise.resolve(runningHandler).catch(e => {\n      if (e === neverResolvedError) return;\n      throw e;\n    });\n  }\n  return handler;\n};","import type { InternalHandlerBuilder } from './types';\nexport const buildDevCheckHandler: InternalHandlerBuilder = ({\n  api,\n  context: {\n    apiUid\n  },\n  reducerPath\n}) => {\n  return (action, mwApi) => {\n    if (api.util.resetApiState.match(action)) {\n      // dispatch after api reset\n      mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (api.internalActions.middlewareRegistered.match(action) && action.payload === apiUid && mwApi.getState()[reducerPath]?.config?.middlewareRegistered === 'conflict') {\n        console.warn(`There is a mismatch between slice and middleware for the reducerPath \"${reducerPath}\".\nYou can only have one api per reducer path, this will lead to crashes in various situations!${reducerPath === 'api' ? `\nIf you have multiple apis, you *have* to specify the reducerPath option when using createApi!` : ''}`);\n      }\n    }\n  };\n};","import { isAnyOf, isFulfilled, isRejected, isRejectedWithValue } from '../rtkImports';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport { calculateProvidedBy } from '../../endpointDefinitions';\nimport type { CombinedState, QueryCacheKey } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport { calculateProvidedByThunk } from '../buildThunks';\nimport type { SubMiddlewareApi, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  context: {\n    endpointDefinitions\n  },\n  mutationThunk,\n  queryThunk,\n  api,\n  assertTagType,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const isThunkActionWithTags = isAnyOf(isFulfilled(mutationThunk), isRejectedWithValue(mutationThunk));\n  const isQueryEnd = isAnyOf(isFulfilled(mutationThunk, queryThunk), isRejected(mutationThunk, queryThunk));\n  let pendingTagInvalidations: FullTagDescription<string>[] = [];\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isThunkActionWithTags(action)) {\n      invalidateTags(calculateProvidedByThunk(action, 'invalidatesTags', endpointDefinitions, assertTagType), mwApi);\n    } else if (isQueryEnd(action)) {\n      invalidateTags([], mwApi);\n    } else if (api.util.invalidateTags.match(action)) {\n      invalidateTags(calculateProvidedBy(action.payload, undefined, undefined, undefined, undefined, assertTagType), mwApi);\n    }\n  };\n  function hasPendingRequests(state: CombinedState<EndpointDefinitions, string, string>) {\n    const {\n      queries,\n      mutations\n    } = state;\n    for (const cacheRecord of [queries, mutations]) {\n      for (const key in cacheRecord) {\n        if (cacheRecord[key]?.status === QueryStatus.pending) return true;\n      }\n    }\n    return false;\n  }\n  function invalidateTags(newTags: readonly FullTagDescription<string>[], mwApi: SubMiddlewareApi) {\n    const rootState = mwApi.getState();\n    const state = rootState[reducerPath];\n    pendingTagInvalidations.push(...newTags);\n    if (state.config.invalidationBehavior === 'delayed' && hasPendingRequests(state)) {\n      return;\n    }\n    const tags = pendingTagInvalidations;\n    pendingTagInvalidations = [];\n    if (tags.length === 0) return;\n    const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);\n    context.batch(() => {\n      const valuesArray = Array.from(toInvalidate.values());\n      for (const {\n        queryCacheKey\n      } of valuesArray) {\n        const querySubState = state.queries[queryCacheKey];\n        const subscriptionSubState = internalState.currentSubscriptions[queryCacheKey] ?? {};\n        if (querySubState) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            mwApi.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            mwApi.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { QueryCacheKey, QuerySubstateIdentifier, Subscribers } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport type { QueryStateMeta, SubMiddlewareApi, TimeoutId, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nexport const buildPollingHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  queryThunk,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const currentPolls: QueryStateMeta<{\n    nextPollTimestamp: number;\n    timeout?: TimeoutId;\n    pollingInterval: number;\n  }> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {\n      updatePollingInterval(action.payload, mwApi);\n    }\n    if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {\n      updatePollingInterval(action.meta.arg, mwApi);\n    }\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {\n      startNextPoll(action.meta.arg, mwApi);\n    }\n    if (api.util.resetApiState.match(action)) {\n      clearPolls();\n    }\n  };\n  function getCacheEntrySubscriptions(queryCacheKey: QueryCacheKey, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    return subscriptions;\n  }\n  function startNextPoll({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    const {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) return;\n    const currentPoll = currentPolls[queryCacheKey];\n    if (currentPoll?.timeout) {\n      clearTimeout(currentPoll.timeout);\n      currentPoll.timeout = undefined;\n    }\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    currentPolls[queryCacheKey] = {\n      nextPollTimestamp,\n      pollingInterval: lowestPollingInterval,\n      timeout: setTimeout(() => {\n        if (state.config.focused || !skipPollingIfUnfocused) {\n          api.dispatch(refetchQuery(querySubState));\n        }\n        startNextPoll({\n          queryCacheKey\n        }, api);\n      }, lowestPollingInterval)\n    };\n  }\n  function updatePollingInterval({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) {\n      return;\n    }\n    const {\n      lowestPollingInterval\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) {\n      cleanupPollForKey(queryCacheKey);\n      return;\n    }\n    const currentPoll = currentPolls[queryCacheKey];\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {\n      startNextPoll({\n        queryCacheKey\n      }, api);\n    }\n  }\n  function cleanupPollForKey(key: string) {\n    const existingPoll = currentPolls[key];\n    if (existingPoll?.timeout) {\n      clearTimeout(existingPoll.timeout);\n    }\n    delete currentPolls[key];\n  }\n  function clearPolls() {\n    for (const key of Object.keys(currentPolls)) {\n      cleanupPollForKey(key);\n    }\n  }\n  function findLowestPollingInterval(subscribers: Subscribers = {}) {\n    let skipPollingIfUnfocused: boolean | undefined = false;\n    let lowestPollingInterval = Number.POSITIVE_INFINITY;\n    for (let key in subscribers) {\n      if (!!subscribers[key].pollingInterval) {\n        lowestPollingInterval = Math.min(subscribers[key].pollingInterval!, lowestPollingInterval);\n        skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;\n      }\n    }\n    return {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    };\n  }\n  return handler;\n};","import type { BaseQueryError, BaseQueryFn, BaseQueryMeta } from '../../baseQueryTypes';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { Recipe } from '../buildThunks';\nimport { isFulfilled, isPending, isRejected } from '../rtkImports';\nimport type { MutationBaseLifecycleApi, QueryBaseLifecycleApi } from './cacheLifecycle';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseConstructorWithKnownReason, PromiseWithKnownReason } from './types';\nexport type ReferenceQueryLifecycle = never;\ntype QueryLifecyclePromises<ResultType, BaseQuery extends BaseQueryFn> = {\n  /**\n   * Promise that will resolve with the (transformed) query result.\n   *\n   * If the query fails, this promise will reject with the error.\n   *\n   * This allows you to `await` for the query to finish.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  queryFulfilled: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: BaseQueryMeta<BaseQuery>;\n  }, QueryFulfilledRejectionReason<BaseQuery>>;\n};\ntype QueryFulfilledRejectionReason<BaseQuery extends BaseQueryFn> = {\n  error: BaseQueryError<BaseQuery>;\n  /**\n   * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.\n   */\n  isUnhandledError: false;\n  /**\n   * The `meta` returned by the `baseQuery`\n   */\n  meta: BaseQueryMeta<BaseQuery>;\n} | {\n  error: unknown;\n  meta?: undefined;\n  /**\n   * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn`, `transformResponse` or `transformErrorResponse` throwing an error instead of handling it properly.\n   * There can not be made any assumption about the shape of `error`.\n   */\n  isUnhandledError: true;\n};\nexport type QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used to perform side-effects throughout the lifecycle of the query.\n   *\n   * @example\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * import { messageCreated } from './notificationsSlice\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       async onQueryStarted(id, { dispatch, queryFulfilled }) {\n   *         // `onStart` side-effect\n   *         dispatch(messageCreated('Fetching posts...'))\n   *         try {\n   *           const { data } = await queryFulfilled\n   *           // `onSuccess` side-effect\n   *           dispatch(messageCreated('Posts received!'))\n   *         } catch (err) {\n   *           // `onError` side-effect\n   *           dispatch(messageCreated('Error fetching posts!'))\n   *         }\n   *       }\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, queryLifeCycleApi: QueryLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type QueryLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used for `optimistic updates`.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       providesTags: ['Post'],\n   *     }),\n   *     updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({\n   *       query: ({ id, ...patch }) => ({\n   *         url: `post/${id}`,\n   *         method: 'PATCH',\n   *         body: patch,\n   *       }),\n   *       invalidatesTags: ['Post'],\n   *       async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {\n   *         const patchResult = dispatch(\n   *           api.util.updateQueryData('getPost', id, (draft) => {\n   *             Object.assign(draft, patch)\n   *           })\n   *         )\n   *         try {\n   *           await queryFulfilled\n   *         } catch {\n   *           patchResult.undo()\n   *         }\n   *       },\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, mutationLifeCycleApi: MutationLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport interface QueryLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, QueryLifecyclePromises<ResultType, BaseQuery> {}\nexport type MutationLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & QueryLifecyclePromises<ResultType, BaseQuery>;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleQueryExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific query.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedQueryOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, QueryArgument>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedQueryOnQueryStarted<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async (queryArgument, { dispatch, queryFulfilled }) => {\n *   const result = await queryFulfilled\n *\n *   const { posts } = result.data\n *\n *   // Pre-fill the individual post entries with the results\n *   // from the list endpoint query\n *   dispatch(\n *     baseApiSlice.util.upsertQueryEntries(\n *       posts.map((post) => ({\n *         endpointName: 'getPostById',\n *         arg: post.id,\n *         value: post,\n *       })),\n *     ),\n *   )\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     getPostsByUserId: build.query<PostsApiResponse, QueryArgument>({\n *       query: (userId) => `/posts/user/${userId}`,\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedQueryOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleMutationExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific mutation.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedMutationOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = Pick<Post, 'id'> & Partial<Post>\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, number>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedMutationOnQueryStarted<\n *   Post,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async ({ id, ...patch }, { dispatch, queryFulfilled }) => {\n *   const patchCollection = dispatch(\n *     baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {\n *       Object.assign(draftPost, patch)\n *     }),\n *   )\n *\n *   try {\n *     await queryFulfilled\n *   } catch {\n *     patchCollection.undo()\n *   }\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     addPost: build.mutation<Post, Omit<QueryArgument, 'id'>>({\n *       query: (body) => ({\n *         url: `posts/add`,\n *         method: 'POST',\n *         body,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *\n *     updatePost: build.mutation<Post, QueryArgument>({\n *       query: ({ id, ...patch }) => ({\n *         url: `post/${id}`,\n *         method: 'PATCH',\n *         body: patch,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedMutationOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleMutationExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\nexport const buildQueryLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  context,\n  queryThunk,\n  mutationThunk\n}) => {\n  const isPendingThunk = isPending(queryThunk, mutationThunk);\n  const isRejectedThunk = isRejected(queryThunk, mutationThunk);\n  const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    resolve(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    reject(value: QueryFulfilledRejectionReason<any>): unknown;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isPendingThunk(action)) {\n      const {\n        requestId,\n        arg: {\n          endpointName,\n          originalArgs\n        }\n      } = action.meta;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const onQueryStarted = endpointDefinition?.onQueryStarted;\n      if (onQueryStarted) {\n        const lifecycle = {} as CacheLifecycle;\n        const queryFulfilled = new (Promise as PromiseConstructorWithKnownReason)<{\n          data: unknown;\n          meta: unknown;\n        }, QueryFulfilledRejectionReason<any>>((resolve, reject) => {\n          lifecycle.resolve = resolve;\n          lifecycle.reject = reject;\n        });\n        // prevent uncaught promise rejections from happening.\n        // if the original promise is used in any way, that will create a new promise that will throw again\n        queryFulfilled.catch(() => {});\n        lifecycleMap[requestId] = lifecycle;\n        const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : requestId);\n        const extra = mwApi.dispatch((_, __, extra) => extra);\n        const lifecycleApi = {\n          ...mwApi,\n          getCacheEntry: () => selector(mwApi.getState()),\n          requestId,\n          extra,\n          updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n          queryFulfilled\n        };\n        onQueryStarted(originalArgs, lifecycleApi as any);\n      }\n    } else if (isFullfilledThunk(action)) {\n      const {\n        requestId,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.resolve({\n        data: action.payload,\n        meta: baseQueryMeta\n      });\n      delete lifecycleMap[requestId];\n    } else if (isRejectedThunk(action)) {\n      const {\n        requestId,\n        rejectedWithValue,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.reject({\n        error: action.payload ?? action.error,\n        isUnhandledError: !rejectedWithValue,\n        meta: baseQueryMeta as any\n      });\n      delete lifecycleMap[requestId];\n    }\n  };\n  return handler;\n};","import { QueryStatus } from '../apiState';\nimport type { QueryCacheKey } from '../apiState';\nimport { onFocus, onOnline } from '../setupListeners';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, SubMiddlewareApi } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildWindowEventHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (onFocus.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnFocus');\n    }\n    if (onOnline.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnReconnect');\n    }\n  };\n  function refetchValidQueries(api: SubMiddlewareApi, type: 'refetchOnFocus' | 'refetchOnReconnect') {\n    const state = api.getState()[reducerPath];\n    const queries = state.queries;\n    const subscriptions = internalState.currentSubscriptions;\n    context.batch(() => {\n      for (const queryCacheKey of Object.keys(subscriptions)) {\n        const querySubState = queries[queryCacheKey];\n        const subscriptionSubState = subscriptions[queryCacheKey];\n        if (!subscriptionSubState || !querySubState) continue;\n        const shouldRefetch = Object.values(subscriptionSubState).some(sub => sub[type] === true) || Object.values(subscriptionSubState).every(sub => sub[type] === undefined) && state.config[type];\n        if (shouldRefetch) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            api.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            api.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { Action, Middleware, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport type { QueryStatus, QuerySubState, RootState } from '../apiState';\nimport type { QueryThunkArg } from '../buildThunks';\nimport { createAction, isAction } from '../rtkImports';\nimport { buildBatchedActionsHandler } from './batchActions';\nimport { buildCacheCollectionHandler } from './cacheCollection';\nimport { buildCacheLifecycleHandler } from './cacheLifecycle';\nimport { buildDevCheckHandler } from './devMiddleware';\nimport { buildInvalidationByTagsHandler } from './invalidationByTags';\nimport { buildPollingHandler } from './polling';\nimport { buildQueryLifecycleHandler } from './queryLifecycle';\nimport type { BuildMiddlewareInput, InternalHandlerBuilder, InternalMiddlewareState } from './types';\nimport { buildWindowEventHandler } from './windowEventHandling';\nimport type { ApiEndpointQuery } from '../module';\nexport type { ReferenceCacheCollection } from './cacheCollection';\nexport type { MutationCacheLifecycleApi, QueryCacheLifecycleApi, ReferenceCacheLifecycle } from './cacheLifecycle';\nexport type { MutationLifecycleApi, QueryLifecycleApi, ReferenceQueryLifecycle, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './queryLifecycle';\nexport type { SubscriptionSelectors } from './types';\nexport function buildMiddleware<Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string>(input: BuildMiddlewareInput<Definitions, ReducerPath, TagTypes>) {\n  const {\n    reducerPath,\n    queryThunk,\n    api,\n    context\n  } = input;\n  const {\n    apiUid\n  } = context;\n  const actions = {\n    invalidateTags: createAction<Array<TagTypes | FullTagDescription<TagTypes> | null | undefined>>(`${reducerPath}/invalidateTags`)\n  };\n  const isThisApiSliceAction = (action: Action) => action.type.startsWith(`${reducerPath}/`);\n  const handlerBuilders: InternalHandlerBuilder[] = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];\n  const middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>> = mwApi => {\n    let initialized = false;\n    const internalState: InternalMiddlewareState = {\n      currentSubscriptions: {}\n    };\n    const builderArgs = {\n      ...(input as any as BuildMiddlewareInput<EndpointDefinitions, string, string>),\n      internalState,\n      refetchQuery,\n      isThisApiSliceAction\n    };\n    const handlers = handlerBuilders.map(build => build(builderArgs));\n    const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);\n    const windowEventsHandler = buildWindowEventHandler(builderArgs);\n    return next => {\n      return action => {\n        if (!isAction(action)) {\n          return next(action);\n        }\n        if (!initialized) {\n          initialized = true;\n          // dispatch before any other action\n          mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n        }\n        const mwApiWithNext = {\n          ...mwApi,\n          next\n        };\n        const stateBefore = mwApi.getState();\n        const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);\n        let res: any;\n        if (actionShouldContinue) {\n          res = next(action);\n        } else {\n          res = internalProbeResult;\n        }\n        if (!!mwApi.getState()[reducerPath]) {\n          // Only run these checks if the middleware is registered okay\n\n          // This looks for actions that aren't specific to the API slice\n          windowEventsHandler(action, mwApiWithNext, stateBefore);\n          if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {\n            // Only run these additional checks if the actions are part of the API slice,\n            // or the action has hydration-related data\n            for (const handler of handlers) {\n              handler(action, mwApiWithNext, stateBefore);\n            }\n          }\n        }\n        return res;\n      };\n    };\n  };\n  return {\n    middleware,\n    actions\n  };\n  function refetchQuery(querySubState: Exclude<QuerySubState<any>, {\n    status: QueryStatus.uninitialized;\n  }>) {\n    return (input.api.endpoints[querySubState.endpointName] as ApiEndpointQuery<any, any>).initiate(querySubState.originalArgs as any, {\n      subscribe: false,\n      forceRefetch: true\n    });\n  }\n}","import { buildCreateApi } from '../createApi';\nimport { coreModule } from './module';\nexport const createApi = /* @__PURE__ */buildCreateApi(coreModule());\nexport { QueryStatus } from './apiState';\nexport type { CombinedState, InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationKeys, QueryCacheKey, QueryKeys, QuerySubState, RootState, SubscriptionOptions } from './apiState';\nexport type { InfiniteQueryActionCreatorResult, MutationActionCreatorResult, QueryActionCreatorResult, StartQueryActionCreatorOptions } from './buildInitiate';\nexport type { MutationCacheLifecycleApi, MutationLifecycleApi, QueryCacheLifecycleApi, QueryLifecycleApi, SubscriptionSelectors, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './buildMiddleware/index';\nexport { skipToken } from './buildSelectors';\nexport type { InfiniteQueryResultSelectorResult, MutationResultSelectorResult, QueryResultSelectorResult, SkipToken } from './buildSelectors';\nexport type { SliceActions } from './buildSlice';\nexport type { PatchQueryDataThunk, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nexport { coreModuleName } from './module';\nexport type { ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, CoreModule, InternalActions, PrefetchOptions, ThunkWithReturnValue } from './module';\nexport { setupListeners } from './setupListeners';\nexport { buildCreateApi, coreModule };"],"mappings":"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","names":["QueryStatus","isPlainObject","retry","import_toolkit","import_utils","arg","force","options","import_immer","actions","createSelector","import_toolkit","key","queryArgsApi","_formatProdErrorMessage","getPreviousPageParam","_formatProdErrorMessage2","import_toolkit","_formatProdErrorMessage","import_immer","import_immer","internalState","api","cacheKey","extra","api","extra","api","initialized","createSelector"]}
Index: node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.production.min.cjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+"use strict";var Ce=Object.defineProperty;var Bt=Object.getOwnPropertyDescriptor;var Mt=Object.getOwnPropertyNames;var wt=Object.prototype.hasOwnProperty;var Ct=(e,t)=>{for(var p in t)Ce(e,p,{get:t[p],enumerable:!0})},Ft=(e,t,p,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let y of Mt(t))!wt.call(e,y)&&y!==p&&Ce(e,y,{get:()=>t[y],enumerable:!(m=Bt(t,y))||m.enumerable});return e};var vt=e=>Ft(Ce({},"__esModule",{value:!0}),e);var Wt={};Ct(Wt,{NamedSchemaError:()=>oe,QueryStatus:()=>De,_NEVER:()=>ft,buildCreateApi:()=>Me,copyWithStructuralSharing:()=>me,coreModule:()=>we,coreModuleName:()=>Se,createApi:()=>It,defaultSerializeQueryArgs:()=>Re,fakeBaseQuery:()=>mt,fetchBaseQuery:()=>Je,retry:()=>Ye,setupListeners:()=>Xe,skipToken:()=>Ae});module.exports=vt(Wt);var De=(y=>(y.uninitialized="uninitialized",y.pending="pending",y.fulfilled="fulfilled",y.rejected="rejected",y))(De||{});function Fe(e){return{status:e,isUninitialized:e==="uninitialized",isLoading:e==="pending",isSuccess:e==="fulfilled",isError:e==="rejected"}}var i=require("@reduxjs/toolkit");var Le=i.isPlainObject;function me(e,t){if(e===t||!(Le(e)&&Le(t)||Array.isArray(e)&&Array.isArray(t)))return t;let p=Object.keys(t),m=Object.keys(e),y=p.length===m.length,D=Array.isArray(t)?[]:{};for(let h of p)D[h]=me(e[h],t[h]),y&&(y=e[h]===D[h]);return y?e:D}function J(e){let t=0;for(let p in e)t++;return t}var ve=e=>[].concat(...e);function je(e){return new RegExp("(^|:)//").test(e)}function He(){return typeof document>"u"?!0:document.visibilityState!=="hidden"}function re(e){return e!=null}function _e(){return typeof navigator>"u"||navigator.onLine===void 0?!0:navigator.onLine}var Ot=e=>e.replace(/\/$/,""),Nt=e=>e.replace(/^\//,"");function Ve(e,t){if(!e)return t;if(!t)return e;if(je(t))return t;let p=e.endsWith("/")||!t.startsWith("?")?"/":"";return e=Ot(e),t=Nt(t),`${e}${p}${t}`}function ze(e,t,p){return e.has(t)?e.get(t):e.set(t,p).get(t)}var We=(...e)=>fetch(...e),qt=e=>e.status>=200&&e.status<=299,Kt=e=>/ion\/(vnd\.api\+)?json/.test(e.get("content-type")||"");function $e(e){if(!(0,i.isPlainObject)(e))return e;let t={...e};for(let[p,m]of Object.entries(t))m===void 0&&delete t[p];return t}function Je({baseUrl:e,prepareHeaders:t=A=>A,fetchFn:p=We,paramsSerializer:m,isJsonContentType:y=Kt,jsonContentType:D="application/json",jsonReplacer:h,timeout:B,responseHandler:C,validateStatus:R,...I}={}){return typeof fetch>"u"&&p===We&&console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments."),async(S,o,g)=>{let{getState:M,extra:c,endpoint:s,forced:x,type:l}=o,d,{url:Q,headers:b=new Headers(I.headers),params:E=void 0,responseHandler:k=C??"json",validateStatus:T=R??qt,timeout:u=B,...n}=typeof S=="string"?{url:S}:S,r,a=o.signal;u&&(r=new AbortController,o.signal.addEventListener("abort",r.abort),a=r.signal);let f={...I,signal:a,...n};b=new Headers($e(b)),f.headers=await t(b,{getState:M,arg:S,extra:c,endpoint:s,forced:x,type:l,extraOptions:g})||b;let P=q=>typeof q=="object"&&((0,i.isPlainObject)(q)||Array.isArray(q)||typeof q.toJSON=="function");if(!f.headers.has("content-type")&&P(f.body)&&f.headers.set("content-type",D),P(f.body)&&y(f.headers)&&(f.body=JSON.stringify(f.body,h)),E){let q=~Q.indexOf("?")?"&":"?",v=m?m(E):new URLSearchParams($e(E));Q+=q+v}Q=Ve(e,Q);let O=new Request(Q,f);d={request:new Request(Q,f)};let F,w=!1,U=r&&setTimeout(()=>{w=!0,r.abort()},u);try{F=await p(O)}catch(q){return{error:{status:w?"TIMEOUT_ERROR":"FETCH_ERROR",error:String(q)},meta:d}}finally{U&&clearTimeout(U),r?.signal.removeEventListener("abort",r.abort)}let H=F.clone();d.response=H;let W,j="";try{let q;if(await Promise.all([A(F,k).then(v=>W=v,v=>q=v),H.text().then(v=>j=v,()=>{})]),q)throw q}catch(q){return{error:{status:"PARSING_ERROR",originalStatus:F.status,data:j,error:String(q)},meta:d}}return T(F,W)?{data:W,meta:d}:{error:{status:F.status,data:W},meta:d}};async function A(S,o){if(typeof o=="function")return o(S);if(o==="content-type"&&(o=y(S.headers)?"json":"text"),o==="json"){let g=await S.text();return g.length?JSON.parse(g):null}return S.text()}}var G=class{constructor(t,p=void 0){this.value=t;this.meta=p}};async function Ut(e=0,t=5){let p=Math.min(e,t),m=~~((Math.random()+.4)*(300<<p));await new Promise(y=>setTimeout(D=>y(D),m))}function Lt(e,t){throw Object.assign(new G({error:e,meta:t}),{throwImmediately:!0})}var Ge={},jt=(e,t)=>async(p,m,y)=>{let D=[5,(t||Ge).maxRetries,(y||Ge).maxRetries].filter(I=>I!==void 0),[h]=D.slice(-1),C={maxRetries:h,backoff:Ut,retryCondition:(I,A,{attempt:S})=>S<=h,...t,...y},R=0;for(;;)try{let I=await e(p,m,y);if(I.error)throw new G(I);return I}catch(I){if(R++,I.throwImmediately){if(I instanceof G)return I.value;throw I}if(I instanceof G&&!C.retryCondition(I.value.error,p,{attempt:R,baseQueryApi:m,extraOptions:y}))return I.value;await C.backoff(R,C.maxRetries)}},Ye=Object.assign(jt,{fail:Lt});var ee=(0,i.createAction)("__rtkq/focused"),pe=(0,i.createAction)("__rtkq/unfocused"),te=(0,i.createAction)("__rtkq/online"),ce=(0,i.createAction)("__rtkq/offline"),Oe=!1;function Xe(e,t){function p(){let m=()=>e(ee()),y=()=>e(pe()),D=()=>e(te()),h=()=>e(ce()),B=()=>{window.document.visibilityState==="visible"?m():y()};return Oe||typeof window<"u"&&window.addEventListener&&(window.addEventListener("visibilitychange",B,!1),window.addEventListener("focus",m,!1),window.addEventListener("online",D,!1),window.addEventListener("offline",h,!1),Oe=!0),()=>{window.removeEventListener("focus",m),window.removeEventListener("visibilitychange",B),window.removeEventListener("online",D),window.removeEventListener("offline",h),Oe=!1}}return t?t(e,{onFocus:ee,onFocusLost:pe,onOffline:ce,onOnline:te}):p()}function ie(e){return e.type==="query"}function Ze(e){return e.type==="mutation"}function ae(e){return e.type==="infinitequery"}function le(e){return ie(e)||ae(e)}function ge(e,t,p,m,y,D){return Ht(e)?e(t,p,m,y).filter(re).map(be).map(D):Array.isArray(e)?e.map(be).map(D):[]}function Ht(e){return typeof e=="function"}function be(e){return typeof e=="string"?{type:e}:e}var Pe=require("immer");var An=require("@reduxjs/toolkit");function et(e,t){return e.catch(t)}var fe=Symbol("forceQueryFn"),Qe=e=>typeof e[fe]=="function";function tt({serializeQueryArgs:e,queryThunk:t,infiniteQueryThunk:p,mutationThunk:m,api:y,context:D}){let h=new Map,B=new Map,{unsubscribeQueryResult:C,removeMutationResult:R,updateSubscriptionOptions:I}=y.internalActions;return{buildInitiateQuery:s,buildInitiateInfiniteQuery:x,buildInitiateMutation:l,getRunningQueryThunk:A,getRunningMutationThunk:S,getRunningQueriesThunk:o,getRunningMutationsThunk:g};function A(d,Q){return b=>{let E=D.endpointDefinitions[d],k=e({queryArgs:Q,endpointDefinition:E,endpointName:d});return h.get(b)?.[k]}}function S(d,Q){return b=>B.get(b)?.[Q]}function o(){return d=>Object.values(h.get(d)||{}).filter(re)}function g(){return d=>Object.values(B.get(d)||{}).filter(re)}function M(d){}function c(d,Q){let b=(E,{subscribe:k=!0,forceRefetch:T,subscriptionOptions:u,[fe]:n,...r}={})=>(a,f)=>{let P=e({queryArgs:E,endpointDefinition:Q,endpointName:d}),O,N={...r,type:"query",subscribe:k,forceRefetch:T,subscriptionOptions:u,endpointName:d,originalArgs:E,queryCacheKey:P,[fe]:n};if(ie(Q))O=t(N);else{let{direction:_,initialPageParam:K}=r;O=p({...N,direction:_,initialPageParam:K})}let F=y.endpoints[d].select(E),w=a(O),U=F(f());let{requestId:H,abort:W}=w,j=U.requestId!==H,q=h.get(a)?.[P],v=()=>F(f()),V=Object.assign(n?w.then(v):j&&!q?Promise.resolve(U):Promise.all([q,w]).then(v),{arg:E,requestId:H,subscriptionOptions:u,queryCacheKey:P,abort:W,async unwrap(){let _=await V;if(_.isError)throw _.error;return _.data},refetch:()=>a(b(E,{subscribe:!1,forceRefetch:!0})),unsubscribe(){k&&a(C({queryCacheKey:P,requestId:H}))},updateSubscriptionOptions(_){V.subscriptionOptions=_,a(I({endpointName:d,requestId:H,queryCacheKey:P,options:_}))}});if(!q&&!j&&!n){let _=ze(h,a,{});_[P]=V,V.then(()=>{delete _[P],J(_)||h.delete(a)})}return V};return b}function s(d,Q){return c(d,Q)}function x(d,Q){return c(d,Q)}function l(d){return(Q,{track:b=!0,fixedCacheKey:E}={})=>(k,T)=>{let u=m({type:"mutation",endpointName:d,originalArgs:Q,track:b,fixedCacheKey:E}),n=k(u);let{requestId:r,abort:a,unwrap:f}=n,P=et(n.unwrap().then(w=>({data:w})),w=>({error:w})),O=()=>{k(R({requestId:r,fixedCacheKey:E}))},N=Object.assign(P,{arg:n.arg,requestId:r,abort:a,unwrap:f,reset:O}),F=B.get(k)||{};return B.set(k,F),F[r]=N,N.then(()=>{delete F[r],J(F)||B.delete(k)}),E&&(F[E]=N,N.then(()=>{F[E]===N&&(delete F[E],J(F)||B.delete(k))})),N}}}var nt=require("@standard-schema/utils"),oe=class extends nt.SchemaError{constructor(p,m,y,D){super(p);this.value=m;this.schemaName=y;this._bqMeta=D}};async function ne(e,t,p,m){let y=await e["~standard"].validate(t);if(y.issues)throw new oe(y.issues,t,p,m);return y.value}function _t(e){return e}var Te=(e={})=>({...e,[i.SHOULD_AUTOBATCH]:!0});function rt({reducerPath:e,baseQuery:t,context:{endpointDefinitions:p},serializeQueryArgs:m,api:y,assertTagType:D,selectors:h,onSchemaFailure:B,catchSchemaFailure:C,skipSchemaValidation:R}){let I=(n,r,a,f)=>(P,O)=>{let N=p[n],F=m({queryArgs:r,endpointDefinition:N,endpointName:n});if(P(y.internalActions.queryResultPatched({queryCacheKey:F,patches:a})),!f)return;let w=y.endpoints[n].select(r)(O()),U=ge(N.providesTags,w.data,void 0,r,{},D);P(y.internalActions.updateProvidedBy([{queryCacheKey:F,providedTags:U}]))};function A(n,r,a=0){let f=[r,...n];return a&&f.length>a?f.slice(0,-1):f}function S(n,r,a=0){let f=[...n,r];return a&&f.length>a?f.slice(1):f}let o=(n,r,a,f=!0)=>(P,O)=>{let F=y.endpoints[n].select(r)(O()),w={patches:[],inversePatches:[],undo:()=>P(y.util.patchQueryData(n,r,w.inversePatches,f))};if(F.status==="uninitialized")return w;let U;if("data"in F)if((0,Pe.isDraftable)(F.data)){let[H,W,j]=(0,Pe.produceWithPatches)(F.data,a);w.patches.push(...W),w.inversePatches.push(...j),U=H}else U=a(F.data),w.patches.push({op:"replace",path:[],value:U}),w.inversePatches.push({op:"replace",path:[],value:F.data});return w.patches.length===0||P(y.util.patchQueryData(n,r,w.patches,f)),w},g=(n,r,a)=>f=>f(y.endpoints[n].initiate(r,{subscribe:!1,forceRefetch:!0,[fe]:()=>({data:a})})),M=(n,r)=>n.query&&n[r]?n[r]:_t,c=async(n,{signal:r,abort:a,rejectWithValue:f,fulfillWithValue:P,dispatch:O,getState:N,extra:F})=>{let w=p[n.endpointName],{metaSchema:U,skipSchemaValidation:H=R}=w;try{let W=M(w,"transformResponse"),j={signal:r,abort:a,dispatch:O,getState:N,extra:F,endpoint:n.endpointName,type:n.type,forced:n.type==="query"?s(n,N()):void 0,queryCacheKey:n.type==="query"?n.queryCacheKey:void 0},q=n.type==="query"?n[fe]:void 0,v,V=async(K,L,z,ue)=>{if(L==null&&K.pages.length)return Promise.resolve({data:K});let X={queryArg:n.originalArgs,pageParam:L},ye=await _(X),$=ue?A:S;return{data:{pages:$(K.pages,ye.data,z),pageParams:$(K.pageParams,L,z)},meta:ye.meta}};async function _(K){let L,{extraOptions:z,argSchema:ue,rawResponseSchema:X,responseSchema:ye}=w;if(ue&&!H&&(K=await ne(ue,K,"argSchema",{})),q?L=q():w.query?L=await t(w.query(K),j,z):L=await w.queryFn(K,j,z,de=>t(de,j,z)),typeof process<"u",L.error)throw new G(L.error,L.meta);let{data:$}=L;X&&!H&&($=await ne(X,L.data,"rawResponseSchema",L.meta));let Z=await W($,L.meta,K);return ye&&!H&&(Z=await ne(ye,Z,"responseSchema",L.meta)),{...L,data:Z}}if(n.type==="query"&&"infiniteQueryOptions"in w){let{infiniteQueryOptions:K}=w,{maxPages:L=1/0}=K,z,ue={pages:[],pageParams:[]},X=h.selectQueryEntry(N(),n.queryCacheKey)?.data,$=s(n,N())&&!n.direction||!X?ue:X;if("direction"in n&&n.direction&&$.pages.length){let Z=n.direction==="backward",xe=(Z?Ne:Ee)(K,$,n.originalArgs);z=await V($,xe,L,Z)}else{let{initialPageParam:Z=K.initialPageParam}=n,de=X?.pageParams??[],xe=de[0]??Z,Ke=de.length;z=await V($,xe,L),q&&(z={data:z.data.pages[0]});for(let Ue=1;Ue<Ke;Ue++){let kt=Ee(K,z.data,n.originalArgs);z=await V(z.data,kt,L)}}v=z}else v=await _(n.originalArgs);return U&&!H&&v.meta&&(v.meta=await ne(U,v.meta,"metaSchema",v.meta)),P(v.data,Te({fulfilledTimeStamp:Date.now(),baseQueryMeta:v.meta}))}catch(W){let j=W;if(j instanceof G){let q=M(w,"transformErrorResponse"),{rawErrorResponseSchema:v,errorResponseSchema:V}=w,{value:_,meta:K}=j;try{v&&!H&&(_=await ne(v,_,"rawErrorResponseSchema",K)),U&&!H&&(K=await ne(U,K,"metaSchema",K));let L=await q(_,K,n.originalArgs);return V&&!H&&(L=await ne(V,L,"errorResponseSchema",K)),f(L,Te({baseQueryMeta:K}))}catch(L){j=L}}try{if(j instanceof oe){let q={endpoint:n.endpointName,arg:n.originalArgs,type:n.type,queryCacheKey:n.type==="query"?n.queryCacheKey:void 0};w.onSchemaFailure?.(j,q),B?.(j,q);let{catchSchemaFailure:v=C}=w;if(v)return f(v(j,q),Te({baseQueryMeta:j._bqMeta}))}}catch(q){j=q}throw typeof process<"u",console.error(j),j}};function s(n,r){let a=h.selectQueryEntry(r,n.queryCacheKey),f=h.selectConfig(r).refetchOnMountOrArgChange,P=a?.fulfilledTimeStamp,O=n.forceRefetch??(n.subscribe&&f);return O?O===!0||(Number(new Date)-Number(P))/1e3>=O:!1}let x=()=>(0,i.createAsyncThunk)(`${e}/executeQuery`,c,{getPendingMeta({arg:r}){let a=p[r.endpointName];return Te({startedTimeStamp:Date.now(),...ae(a)?{direction:r.direction}:{}})},condition(r,{getState:a}){let f=a(),P=h.selectQueryEntry(f,r.queryCacheKey),O=P?.fulfilledTimeStamp,N=r.originalArgs,F=P?.originalArgs,w=p[r.endpointName],U=r.direction;return Qe(r)?!0:P?.status==="pending"?!1:s(r,f)||ie(w)&&w?.forceRefetch?.({currentArg:N,previousArg:F,endpointState:P,state:f})?!0:!(O&&!U)},dispatchConditionRejection:!0}),l=x(),d=x(),Q=(0,i.createAsyncThunk)(`${e}/executeMutation`,c,{getPendingMeta(){return Te({startedTimeStamp:Date.now()})}}),b=n=>"force"in n,E=n=>"ifOlderThan"in n,k=(n,r,a)=>(f,P)=>{let O=b(a)&&a.force,N=E(a)&&a.ifOlderThan,F=(U=!0)=>{let H={forceRefetch:U,isPrefetch:!0};return y.endpoints[n].initiate(r,H)},w=y.endpoints[n].select(r)(P());if(O)f(F());else if(N){let U=w?.fulfilledTimeStamp;if(!U){f(F());return}(Number(new Date)-Number(new Date(U)))/1e3>=N&&f(F())}else f(F(!1))};function T(n){return r=>r?.meta?.arg?.endpointName===n}function u(n,r){return{matchPending:(0,i.isAllOf)((0,i.isPending)(n),T(r)),matchFulfilled:(0,i.isAllOf)((0,i.isFulfilled)(n),T(r)),matchRejected:(0,i.isAllOf)((0,i.isRejected)(n),T(r))}}return{queryThunk:l,mutationThunk:Q,infiniteQueryThunk:d,prefetch:k,updateQueryData:o,upsertQueryData:g,patchQueryData:I,buildMatchThunkActions:u}}function Ee(e,{pages:t,pageParams:p},m){let y=t.length-1;return e.getNextPageParam(t[y],t,p[y],p,m)}function Ne(e,{pages:t,pageParams:p},m){return e.getPreviousPageParam?.(t[0],t,p[0],p,m)}function Ie(e,t,p,m){return ge(p[e.meta.arg.endpointName][t],(0,i.isFulfilled)(e)?e.payload:void 0,(0,i.isRejectedWithValue)(e)?e.payload:void 0,e.meta.arg.originalArgs,"baseQueryMeta"in e.meta?e.meta.baseQueryMeta:void 0,m)}var at=require("immer"),he=require("immer");function ke(e,t,p){let m=e[t];m&&p(m)}function se(e){return("arg"in e?e.arg.fixedCacheKey:e.fixedCacheKey)??e.requestId}function it(e,t,p){let m=e[se(t)];m&&p(m)}var Be={};function ot({reducerPath:e,queryThunk:t,mutationThunk:p,serializeQueryArgs:m,context:{endpointDefinitions:y,apiUid:D,extractRehydrationInfo:h,hasRehydrationInfo:B},assertTagType:C,config:R}){let I=(0,i.createAction)(`${e}/resetApiState`);function A(T,u,n,r){T[u.queryCacheKey]??={status:"uninitialized",endpointName:u.endpointName},ke(T,u.queryCacheKey,a=>{a.status="pending",a.requestId=n&&a.requestId?a.requestId:r.requestId,u.originalArgs!==void 0&&(a.originalArgs=u.originalArgs),a.startedTimeStamp=r.startedTimeStamp;let f=y[r.arg.endpointName];ae(f)&&"direction"in u&&(a.direction=u.direction)})}function S(T,u,n,r){ke(T,u.arg.queryCacheKey,a=>{if(a.requestId!==u.requestId&&!r)return;let{merge:f}=y[u.arg.endpointName];if(a.status="fulfilled",f)if(a.data!==void 0){let{fulfilledTimeStamp:P,arg:O,baseQueryMeta:N,requestId:F}=u,w=(0,i.createNextState)(a.data,U=>f(U,n,{arg:O.originalArgs,baseQueryMeta:N,fulfilledTimeStamp:P,requestId:F}));a.data=w}else a.data=n;else a.data=y[u.arg.endpointName].structuralSharing??!0?me((0,at.isDraft)(a.data)?(0,he.original)(a.data):a.data,n):n;delete a.error,a.fulfilledTimeStamp=u.fulfilledTimeStamp})}let o=(0,i.createSlice)({name:`${e}/queries`,initialState:Be,reducers:{removeQueryResult:{reducer(T,{payload:{queryCacheKey:u}}){delete T[u]},prepare:(0,i.prepareAutoBatched)()},cacheEntriesUpserted:{reducer(T,u){for(let n of u.payload){let{queryDescription:r,value:a}=n;A(T,r,!0,{arg:r,requestId:u.meta.requestId,startedTimeStamp:u.meta.timestamp}),S(T,{arg:r,requestId:u.meta.requestId,fulfilledTimeStamp:u.meta.timestamp,baseQueryMeta:{}},a,!0)}},prepare:T=>({payload:T.map(r=>{let{endpointName:a,arg:f,value:P}=r,O=y[a];return{queryDescription:{type:"query",endpointName:a,originalArgs:r.arg,queryCacheKey:m({queryArgs:f,endpointDefinition:O,endpointName:a})},value:P}}),meta:{[i.SHOULD_AUTOBATCH]:!0,requestId:(0,i.nanoid)(),timestamp:Date.now()}})},queryResultPatched:{reducer(T,{payload:{queryCacheKey:u,patches:n}}){ke(T,u,r=>{r.data=(0,he.applyPatches)(r.data,n.concat())})},prepare:(0,i.prepareAutoBatched)()}},extraReducers(T){T.addCase(t.pending,(u,{meta:n,meta:{arg:r}})=>{let a=Qe(r);A(u,r,a,n)}).addCase(t.fulfilled,(u,{meta:n,payload:r})=>{let a=Qe(n.arg);S(u,n,r,a)}).addCase(t.rejected,(u,{meta:{condition:n,arg:r,requestId:a},error:f,payload:P})=>{ke(u,r.queryCacheKey,O=>{if(!n){if(O.requestId!==a)return;O.status="rejected",O.error=P??f}})}).addMatcher(B,(u,n)=>{let{queries:r}=h(n);for(let[a,f]of Object.entries(r))(f?.status==="fulfilled"||f?.status==="rejected")&&(u[a]=f)})}}),g=(0,i.createSlice)({name:`${e}/mutations`,initialState:Be,reducers:{removeMutationResult:{reducer(T,{payload:u}){let n=se(u);n in T&&delete T[n]},prepare:(0,i.prepareAutoBatched)()}},extraReducers(T){T.addCase(p.pending,(u,{meta:n,meta:{requestId:r,arg:a,startedTimeStamp:f}})=>{a.track&&(u[se(n)]={requestId:r,status:"pending",endpointName:a.endpointName,startedTimeStamp:f})}).addCase(p.fulfilled,(u,{payload:n,meta:r})=>{r.arg.track&&it(u,r,a=>{a.requestId===r.requestId&&(a.status="fulfilled",a.data=n,a.fulfilledTimeStamp=r.fulfilledTimeStamp)})}).addCase(p.rejected,(u,{payload:n,error:r,meta:a})=>{a.arg.track&&it(u,a,f=>{f.requestId===a.requestId&&(f.status="rejected",f.error=n??r)})}).addMatcher(B,(u,n)=>{let{mutations:r}=h(n);for(let[a,f]of Object.entries(r))(f?.status==="fulfilled"||f?.status==="rejected")&&a!==f?.requestId&&(u[a]=f)})}}),M={tags:{},keys:{}},c=(0,i.createSlice)({name:`${e}/invalidation`,initialState:M,reducers:{updateProvidedBy:{reducer(T,u){for(let{queryCacheKey:n,providedTags:r}of u.payload){s(T,n);for(let{type:a,id:f}of r){let P=(T.tags[a]??={})[f||"__internal_without_id"]??=[];P.includes(n)||P.push(n)}T.keys[n]=r}},prepare:(0,i.prepareAutoBatched)()}},extraReducers(T){T.addCase(o.actions.removeQueryResult,(u,{payload:{queryCacheKey:n}})=>{s(u,n)}).addMatcher(B,(u,n)=>{let{provided:r}=h(n);for(let[a,f]of Object.entries(r))for(let[P,O]of Object.entries(f)){let N=(u.tags[a]??={})[P||"__internal_without_id"]??=[];for(let F of O)N.includes(F)||N.push(F)}}).addMatcher((0,i.isAnyOf)((0,i.isFulfilled)(t),(0,i.isRejectedWithValue)(t)),(u,n)=>{x(u,[n])}).addMatcher(o.actions.cacheEntriesUpserted.match,(u,n)=>{let r=n.payload.map(({queryDescription:a,value:f})=>({type:"UNKNOWN",payload:f,meta:{requestStatus:"fulfilled",requestId:"UNKNOWN",arg:a}}));x(u,r)})}});function s(T,u){let n=T.keys[u]??[];for(let r of n){let a=r.type,f=r.id??"__internal_without_id",P=T.tags[a]?.[f];P&&(T.tags[a][f]=P.filter(O=>O!==u))}delete T.keys[u]}function x(T,u){let n=u.map(r=>{let a=Ie(r,"providesTags",y,C),{queryCacheKey:f}=r.meta.arg;return{queryCacheKey:f,providedTags:a}});c.caseReducers.updateProvidedBy(T,c.actions.updateProvidedBy(n))}let l=(0,i.createSlice)({name:`${e}/subscriptions`,initialState:Be,reducers:{updateSubscriptionOptions(T,u){},unsubscribeQueryResult(T,u){},internal_getRTKQSubscriptions(){}}}),d=(0,i.createSlice)({name:`${e}/internalSubscriptions`,initialState:Be,reducers:{subscriptionsUpdated:{reducer(T,u){return(0,he.applyPatches)(T,u.payload)},prepare:(0,i.prepareAutoBatched)()}}}),Q=(0,i.createSlice)({name:`${e}/config`,initialState:{online:_e(),focused:He(),middlewareRegistered:!1,...R},reducers:{middlewareRegistered(T,{payload:u}){T.middlewareRegistered=T.middlewareRegistered==="conflict"||D!==u?"conflict":!0}},extraReducers:T=>{T.addCase(te,u=>{u.online=!0}).addCase(ce,u=>{u.online=!1}).addCase(ee,u=>{u.focused=!0}).addCase(pe,u=>{u.focused=!1}).addMatcher(B,u=>({...u}))}}),b=(0,i.combineReducers)({queries:o.reducer,mutations:g.reducer,provided:c.reducer,subscriptions:d.reducer,config:Q.reducer}),E=(T,u)=>b(I.match(u)?void 0:T,u),k={...Q.actions,...o.actions,...l.actions,...d.actions,...g.actions,...c.actions,resetApiState:I};return{reducer:E,actions:k}}var Ae=Symbol.for("RTKQ/skipToken"),yt={status:"uninitialized"},st=(0,i.createNextState)(yt,()=>{}),ut=(0,i.createNextState)(yt,()=>{});function dt({serializeQueryArgs:e,reducerPath:t,createSelector:p}){let m=l=>st,y=l=>ut;return{buildQuerySelector:S,buildInfiniteQuerySelector:o,buildMutationSelector:g,selectInvalidatedBy:M,selectCachedArgsForQuery:c,selectApiState:h,selectQueries:B,selectMutations:R,selectQueryEntry:C,selectConfig:I};function D(l){return{...l,...Fe(l.status)}}function h(l){return l[t]}function B(l){return h(l)?.queries}function C(l,d){return B(l)?.[d]}function R(l){return h(l)?.mutations}function I(l){return h(l)?.config}function A(l,d,Q){return b=>{if(b===Ae)return p(m,Q);let E=e({queryArgs:b,endpointDefinition:d,endpointName:l});return p(T=>C(T,E)??st,Q)}}function S(l,d){return A(l,d,D)}function o(l,d){let{infiniteQueryOptions:Q}=d;function b(E){let k={...E,...Fe(E.status)},{isLoading:T,isError:u,direction:n}=k,r=n==="forward",a=n==="backward";return{...k,hasNextPage:s(Q,k.data,k.originalArgs),hasPreviousPage:x(Q,k.data,k.originalArgs),isFetchingNextPage:T&&r,isFetchingPreviousPage:T&&a,isFetchNextPageError:u&&r,isFetchPreviousPageError:u&&a}}return A(l,d,b)}function g(){return l=>{let d;return typeof l=="object"?d=se(l)??Ae:d=l,p(d===Ae?y:E=>h(E)?.mutations?.[d]??ut,D)}}function M(l,d){let Q=l[t],b=new Set;for(let E of d.filter(re).map(be)){let k=Q.provided.tags[E.type];if(!k)continue;let T=(E.id!==void 0?k[E.id]:ve(Object.values(k)))??[];for(let u of T)b.add(u)}return ve(Array.from(b.values()).map(E=>{let k=Q.queries[E];return k?[{queryCacheKey:E,endpointName:k.endpointName,originalArgs:k.originalArgs}]:[]}))}function c(l,d){return Object.values(B(l)).filter(Q=>Q?.endpointName===d&&Q.status!=="uninitialized").map(Q=>Q.originalArgs)}function s(l,d,Q){return d?Ee(l,d,Q)!=null:!1}function x(l,d,Q){return!d||!l.getPreviousPageParam?!1:Ne(l,d,Q)!=null}}var ct=require("@reduxjs/toolkit");var pt=WeakMap?new WeakMap:void 0,Re=({endpointName:e,queryArgs:t})=>{let p="",m=pt?.get(t);if(typeof m=="string")p=m;else{let y=JSON.stringify(t,(D,h)=>(h=typeof h=="bigint"?{$bigint:h.toString()}:h,h=(0,i.isPlainObject)(h)?Object.keys(h).sort().reduce((B,C)=>(B[C]=h[C],B),{}):h,h));(0,i.isPlainObject)(t)&&pt?.set(t,y),p=y}return`${e}(${p})`};var qe=require("reselect");function Me(...e){return function(p){let m=(0,qe.weakMapMemoize)(R=>p.extractRehydrationInfo?.(R,{reducerPath:p.reducerPath??"api"})),y={reducerPath:"api",keepUnusedDataFor:60,refetchOnMountOrArgChange:!1,refetchOnFocus:!1,refetchOnReconnect:!1,invalidationBehavior:"delayed",...p,extractRehydrationInfo:m,serializeQueryArgs(R){let I=Re;if("serializeQueryArgs"in R.endpointDefinition){let A=R.endpointDefinition.serializeQueryArgs;I=S=>{let o=A(S);return typeof o=="string"?o:Re({...S,queryArgs:o})}}else p.serializeQueryArgs&&(I=p.serializeQueryArgs);return I(R)},tagTypes:[...p.tagTypes||[]]},D={endpointDefinitions:{},batch(R){R()},apiUid:(0,i.nanoid)(),extractRehydrationInfo:m,hasRehydrationInfo:(0,qe.weakMapMemoize)(R=>m(R)!=null)},h={injectEndpoints:C,enhanceEndpoints({addTagTypes:R,endpoints:I}){if(R)for(let A of R)y.tagTypes.includes(A)||y.tagTypes.push(A);if(I)for(let[A,S]of Object.entries(I))typeof S=="function"?S(D.endpointDefinitions[A]):Object.assign(D.endpointDefinitions[A]||{},S);return h}},B=e.map(R=>R.init(h,y,D));function C(R){let I=R.endpoints({query:A=>({...A,type:"query"}),mutation:A=>({...A,type:"mutation"}),infiniteQuery:A=>({...A,type:"infinitequery"})});for(let[A,S]of Object.entries(I)){if(R.overrideExisting!==!0&&A in D.endpointDefinitions){if(R.overrideExisting==="throw")throw new Error((0,ct.formatProdErrorMessage)(39));typeof process<"u";continue}typeof process<"u",D.endpointDefinitions[A]=S;for(let o of B)o.injectEndpoint(A,S)}return h}return h.injectEndpoints({endpoints:p.endpoints})}}var lt=require("@reduxjs/toolkit"),ft=Symbol();function mt(){return function(){throw new Error((0,lt.formatProdErrorMessage)(33))}}var Pt=require("immer");function Y(e,...t){return Object.assign(e,...t)}var gt=require("immer");var Qt=({api:e,queryThunk:t,internalState:p})=>{let m=`${e.reducerPath}/subscriptions`,y=null,D=null,{updateSubscriptionOptions:h,unsubscribeQueryResult:B}=e.internalActions,C=(o,g)=>{if(h.match(g)){let{queryCacheKey:c,requestId:s,options:x}=g.payload;return o?.[c]?.[s]&&(o[c][s]=x),!0}if(B.match(g)){let{queryCacheKey:c,requestId:s}=g.payload;return o[c]&&delete o[c][s],!0}if(e.internalActions.removeQueryResult.match(g))return delete o[g.payload.queryCacheKey],!0;if(t.pending.match(g)){let{meta:{arg:c,requestId:s}}=g,x=o[c.queryCacheKey]??={};return x[`${s}_running`]={},c.subscribe&&(x[s]=c.subscriptionOptions??x[s]??{}),!0}let M=!1;if(t.fulfilled.match(g)||t.rejected.match(g)){let c=o[g.meta.arg.queryCacheKey]||{},s=`${g.meta.requestId}_running`;M||=!!c[s],delete c[s]}if(t.rejected.match(g)){let{meta:{condition:c,arg:s,requestId:x}}=g;if(c&&s.subscribe){let l=o[s.queryCacheKey]??={};l[x]=s.subscriptionOptions??l[x]??{},M=!0}}return M},R=()=>p.currentSubscriptions,S={getSubscriptions:R,getSubscriptionCount:o=>{let M=R()[o]??{};return J(M)},isRequestSubscribed:(o,g)=>!!R()?.[o]?.[g]};return(o,g)=>{if(y||(y=JSON.parse(JSON.stringify(p.currentSubscriptions))),e.util.resetApiState.match(o))return y=p.currentSubscriptions={},D=null,[!0,!1];if(e.internalActions.internal_getRTKQSubscriptions.match(o))return[!1,S];let M=C(p.currentSubscriptions,o),c=!0;if(M){D||(D=setTimeout(()=>{let l=JSON.parse(JSON.stringify(p.currentSubscriptions)),[,d]=(0,gt.produceWithPatches)(y,()=>l);g.next(e.internalActions.subscriptionsUpdated(d)),y=l,D=null},500));let s=typeof o.type=="string"&&!!o.type.startsWith(m),x=t.rejected.match(o)&&o.meta.condition&&!!o.meta.arg.subscribe;c=!s&&!x}return[c,!1]}};function Vt(e){for(let t in e)return!1;return!0}var zt=2147483647/1e3-1,Tt=({reducerPath:e,api:t,queryThunk:p,context:m,internalState:y,selectors:{selectQueryEntry:D,selectConfig:h}})=>{let{removeQueryResult:B,unsubscribeQueryResult:C,cacheEntriesUpserted:R}=t.internalActions,I=(0,i.isAnyOf)(C.match,p.fulfilled,p.rejected,R.match);function A(c){let s=y.currentSubscriptions[c];return!!s&&!Vt(s)}let S={},o=(c,s,x)=>{let l=s.getState(),d=h(l);if(I(c)){let Q;if(R.match(c))Q=c.payload.map(b=>b.queryDescription.queryCacheKey);else{let{queryCacheKey:b}=C.match(c)?c.payload:c.meta.arg;Q=[b]}g(Q,s,d)}if(t.util.resetApiState.match(c))for(let[Q,b]of Object.entries(S))b&&clearTimeout(b),delete S[Q];if(m.hasRehydrationInfo(c)){let{queries:Q}=m.extractRehydrationInfo(c);g(Object.keys(Q),s,d)}};function g(c,s,x){let l=s.getState();for(let d of c){let Q=D(l,d);M(d,Q?.endpointName,s,x)}}function M(c,s,x,l){let Q=m.endpointDefinitions[s]?.keepUnusedDataFor??l.keepUnusedDataFor;if(Q===1/0)return;let b=Math.max(0,Math.min(Q,zt));if(!A(c)){let E=S[c];E&&clearTimeout(E),S[c]=setTimeout(()=>{A(c)||x.dispatch(B({queryCacheKey:c})),delete S[c]},b*1e3)}}return o};var ht=new Error("Promise never resolved before cacheEntryRemoved."),At=({api:e,reducerPath:t,context:p,queryThunk:m,mutationThunk:y,internalState:D,selectors:{selectQueryEntry:h,selectApiState:B}})=>{let C=(0,i.isAsyncThunkAction)(m),R=(0,i.isAsyncThunkAction)(y),I=(0,i.isFulfilled)(m,y),A={};function S(s,x,l){let d=A[s];d?.valueResolved&&(d.valueResolved({data:x,meta:l}),delete d.valueResolved)}function o(s){let x=A[s];x&&(delete A[s],x.cacheEntryRemoved())}let g=(s,x,l)=>{let d=M(s);function Q(b,E,k,T){let u=h(l,E),n=h(x.getState(),E);!u&&n&&c(b,T,E,x,k)}if(m.pending.match(s))Q(s.meta.arg.endpointName,d,s.meta.requestId,s.meta.arg.originalArgs);else if(e.internalActions.cacheEntriesUpserted.match(s))for(let{queryDescription:b,value:E}of s.payload){let{endpointName:k,originalArgs:T,queryCacheKey:u}=b;Q(k,u,s.meta.requestId,T),S(u,E,{})}else if(y.pending.match(s))x.getState()[t].mutations[d]&&c(s.meta.arg.endpointName,s.meta.arg.originalArgs,d,x,s.meta.requestId);else if(I(s))S(d,s.payload,s.meta.baseQueryMeta);else if(e.internalActions.removeQueryResult.match(s)||e.internalActions.removeMutationResult.match(s))o(d);else if(e.util.resetApiState.match(s))for(let b of Object.keys(A))o(b)};function M(s){return C(s)?s.meta.arg.queryCacheKey:R(s)?s.meta.arg.fixedCacheKey??s.meta.requestId:e.internalActions.removeQueryResult.match(s)?s.payload.queryCacheKey:e.internalActions.removeMutationResult.match(s)?se(s.payload):""}function c(s,x,l,d,Q){let b=p.endpointDefinitions[s],E=b?.onCacheEntryAdded;if(!E)return;let k={},T=new Promise(P=>{k.cacheEntryRemoved=P}),u=Promise.race([new Promise(P=>{k.valueResolved=P}),T.then(()=>{throw ht})]);u.catch(()=>{}),A[l]=k;let n=e.endpoints[s].select(le(b)?x:l),r=d.dispatch((P,O,N)=>N),a={...d,getCacheEntry:()=>n(d.getState()),requestId:Q,extra:r,updateCachedData:le(b)?P=>d.dispatch(e.util.updateQueryData(s,x,P)):void 0,cacheDataLoaded:u,cacheEntryRemoved:T},f=E(x,a);Promise.resolve(f).catch(P=>{if(P!==ht)throw P})}return g};var Rt=({api:e,context:{apiUid:t},reducerPath:p})=>(m,y)=>{e.util.resetApiState.match(m)&&y.dispatch(e.internalActions.middlewareRegistered(t)),typeof process<"u"};var St=({reducerPath:e,context:t,context:{endpointDefinitions:p},mutationThunk:m,queryThunk:y,api:D,assertTagType:h,refetchQuery:B,internalState:C})=>{let{removeQueryResult:R}=D.internalActions,I=(0,i.isAnyOf)((0,i.isFulfilled)(m),(0,i.isRejectedWithValue)(m)),A=(0,i.isAnyOf)((0,i.isFulfilled)(m,y),(0,i.isRejected)(m,y)),S=[],o=(c,s)=>{I(c)?M(Ie(c,"invalidatesTags",p,h),s):A(c)?M([],s):D.util.invalidateTags.match(c)&&M(ge(c.payload,void 0,void 0,void 0,void 0,h),s)};function g(c){let{queries:s,mutations:x}=c;for(let l of[s,x])for(let d in l)if(l[d]?.status==="pending")return!0;return!1}function M(c,s){let x=s.getState(),l=x[e];if(S.push(...c),l.config.invalidationBehavior==="delayed"&&g(l))return;let d=S;if(S=[],d.length===0)return;let Q=D.util.selectInvalidatedBy(x,d);t.batch(()=>{let b=Array.from(Q.values());for(let{queryCacheKey:E}of b){let k=l.queries[E],T=C.currentSubscriptions[E]??{};k&&(J(T)===0?s.dispatch(R({queryCacheKey:E})):k.status!=="uninitialized"&&s.dispatch(B(k)))}})}return o};var xt=({reducerPath:e,queryThunk:t,api:p,refetchQuery:m,internalState:y})=>{let D={},h=(o,g)=>{(p.internalActions.updateSubscriptionOptions.match(o)||p.internalActions.unsubscribeQueryResult.match(o))&&R(o.payload,g),(t.pending.match(o)||t.rejected.match(o)&&o.meta.condition)&&R(o.meta.arg,g),(t.fulfilled.match(o)||t.rejected.match(o)&&!o.meta.condition)&&C(o.meta.arg,g),p.util.resetApiState.match(o)&&A()};function B(o,g){let c=g.getState()[e].queries[o],s=y.currentSubscriptions[o];if(!(!c||c.status==="uninitialized"))return s}function C({queryCacheKey:o},g){let M=g.getState()[e],c=M.queries[o],s=y.currentSubscriptions[o];if(!c||c.status==="uninitialized")return;let{lowestPollingInterval:x,skipPollingIfUnfocused:l}=S(s);if(!Number.isFinite(x))return;let d=D[o];d?.timeout&&(clearTimeout(d.timeout),d.timeout=void 0);let Q=Date.now()+x;D[o]={nextPollTimestamp:Q,pollingInterval:x,timeout:setTimeout(()=>{(M.config.focused||!l)&&g.dispatch(m(c)),C({queryCacheKey:o},g)},x)}}function R({queryCacheKey:o},g){let c=g.getState()[e].queries[o],s=y.currentSubscriptions[o];if(!c||c.status==="uninitialized")return;let{lowestPollingInterval:x}=S(s);if(!Number.isFinite(x)){I(o);return}let l=D[o],d=Date.now()+x;(!l||d<l.nextPollTimestamp)&&C({queryCacheKey:o},g)}function I(o){let g=D[o];g?.timeout&&clearTimeout(g.timeout),delete D[o]}function A(){for(let o of Object.keys(D))I(o)}function S(o={}){let g=!1,M=Number.POSITIVE_INFINITY;for(let c in o)o[c].pollingInterval&&(M=Math.min(o[c].pollingInterval,M),g=o[c].skipPollingIfUnfocused||g);return{lowestPollingInterval:M,skipPollingIfUnfocused:g}}return h};var Dt=({api:e,context:t,queryThunk:p,mutationThunk:m})=>{let y=(0,i.isPending)(p,m),D=(0,i.isRejected)(p,m),h=(0,i.isFulfilled)(p,m),B={};return(R,I)=>{if(y(R)){let{requestId:A,arg:{endpointName:S,originalArgs:o}}=R.meta,g=t.endpointDefinitions[S],M=g?.onQueryStarted;if(M){let c={},s=new Promise((Q,b)=>{c.resolve=Q,c.reject=b});s.catch(()=>{}),B[A]=c;let x=e.endpoints[S].select(le(g)?o:A),l=I.dispatch((Q,b,E)=>E),d={...I,getCacheEntry:()=>x(I.getState()),requestId:A,extra:l,updateCachedData:le(g)?Q=>I.dispatch(e.util.updateQueryData(S,o,Q)):void 0,queryFulfilled:s};M(o,d)}}else if(h(R)){let{requestId:A,baseQueryMeta:S}=R.meta;B[A]?.resolve({data:R.payload,meta:S}),delete B[A]}else if(D(R)){let{requestId:A,rejectedWithValue:S,baseQueryMeta:o}=R.meta;B[A]?.reject({error:R.payload??R.error,isUnhandledError:!S,meta:o}),delete B[A]}}};var bt=({reducerPath:e,context:t,api:p,refetchQuery:m,internalState:y})=>{let{removeQueryResult:D}=p.internalActions,h=(C,R)=>{ee.match(C)&&B(R,"refetchOnFocus"),te.match(C)&&B(R,"refetchOnReconnect")};function B(C,R){let I=C.getState()[e],A=I.queries,S=y.currentSubscriptions;t.batch(()=>{for(let o of Object.keys(S)){let g=A[o],M=S[o];if(!M||!g)continue;(Object.values(M).some(s=>s[R]===!0)||Object.values(M).every(s=>s[R]===void 0)&&I.config[R])&&(J(M)===0?C.dispatch(D({queryCacheKey:o})):g.status!=="uninitialized"&&C.dispatch(m(g)))}})}return h};function Et(e){let{reducerPath:t,queryThunk:p,api:m,context:y}=e,{apiUid:D}=y,h={invalidateTags:(0,i.createAction)(`${t}/invalidateTags`)},B=A=>A.type.startsWith(`${t}/`),C=[Rt,Tt,St,xt,At,Dt];return{middleware:A=>{let S=!1,g={...e,internalState:{currentSubscriptions:{}},refetchQuery:I,isThisApiSliceAction:B},M=C.map(x=>x(g)),c=Qt(g),s=bt(g);return x=>l=>{if(!(0,i.isAction)(l))return x(l);S||(S=!0,A.dispatch(m.internalActions.middlewareRegistered(D)));let d={...A,next:x},Q=A.getState(),[b,E]=c(l,d,Q),k;if(b?k=x(l):k=E,A.getState()[t]&&(s(l,d,Q),B(l)||y.hasRehydrationInfo(l)))for(let T of M)T(l,d,Q);return k}},actions:h};function I(A){return e.api.endpoints[A.endpointName].initiate(A.originalArgs,{subscribe:!1,forceRefetch:!0})}}var Se=Symbol(),we=({createSelector:e=i.createSelector}={})=>({name:Se,init(t,{baseQuery:p,tagTypes:m,reducerPath:y,serializeQueryArgs:D,keepUnusedDataFor:h,refetchOnMountOrArgChange:B,refetchOnFocus:C,refetchOnReconnect:R,invalidationBehavior:I,onSchemaFailure:A,catchSchemaFailure:S,skipSchemaValidation:o},g){(0,Pt.enablePatches)();let M=v=>(typeof process<"u",v);Object.assign(t,{reducerPath:y,endpoints:{},internalActions:{onOnline:te,onOffline:ce,onFocus:ee,onFocusLost:pe},util:{}});let c=dt({serializeQueryArgs:D,reducerPath:y,createSelector:e}),{selectInvalidatedBy:s,selectCachedArgsForQuery:x,buildQuerySelector:l,buildInfiniteQuerySelector:d,buildMutationSelector:Q}=c;Y(t.util,{selectInvalidatedBy:s,selectCachedArgsForQuery:x});let{queryThunk:b,infiniteQueryThunk:E,mutationThunk:k,patchQueryData:T,updateQueryData:u,upsertQueryData:n,prefetch:r,buildMatchThunkActions:a}=rt({baseQuery:p,reducerPath:y,context:g,api:t,serializeQueryArgs:D,assertTagType:M,selectors:c,onSchemaFailure:A,catchSchemaFailure:S,skipSchemaValidation:o}),{reducer:f,actions:P}=ot({context:g,queryThunk:b,infiniteQueryThunk:E,mutationThunk:k,serializeQueryArgs:D,reducerPath:y,assertTagType:M,config:{refetchOnFocus:C,refetchOnReconnect:R,refetchOnMountOrArgChange:B,keepUnusedDataFor:h,reducerPath:y,invalidationBehavior:I}});Y(t.util,{patchQueryData:T,updateQueryData:u,upsertQueryData:n,prefetch:r,resetApiState:P.resetApiState,upsertQueryEntries:P.cacheEntriesUpserted}),Y(t.internalActions,P);let{middleware:O,actions:N}=Et({reducerPath:y,context:g,queryThunk:b,mutationThunk:k,infiniteQueryThunk:E,api:t,assertTagType:M,selectors:c});Y(t.util,N),Y(t,{reducer:f,middleware:O});let{buildInitiateQuery:F,buildInitiateInfiniteQuery:w,buildInitiateMutation:U,getRunningMutationThunk:H,getRunningMutationsThunk:W,getRunningQueriesThunk:j,getRunningQueryThunk:q}=tt({queryThunk:b,mutationThunk:k,infiniteQueryThunk:E,api:t,serializeQueryArgs:D,context:g});return Y(t.util,{getRunningMutationThunk:H,getRunningMutationsThunk:W,getRunningQueryThunk:q,getRunningQueriesThunk:j}),{name:Se,injectEndpoint(v,V){let _=t,K=_.endpoints[v]??={};ie(V)&&Y(K,{name:v,select:l(v,V),initiate:F(v,V)},a(b,v)),Ze(V)&&Y(K,{name:v,select:Q(),initiate:U(v)},a(k,v)),ae(V)&&Y(K,{name:v,select:d(v,V),initiate:w(v,V)},a(b,v))}}}});var It=Me(we());0&&(module.exports={NamedSchemaError,QueryStatus,_NEVER,buildCreateApi,copyWithStructuralSharing,coreModule,coreModuleName,createApi,defaultSerializeQueryArgs,fakeBaseQuery,fetchBaseQuery,retry,setupListeners,skipToken});
+//# sourceMappingURL=rtk-query.production.min.cjs.map
Index: node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.production.min.cjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/cjs/rtk-query.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../../src/query/index.ts","../../../src/query/core/apiState.ts","../../../src/query/core/rtkImports.ts","../../../src/query/utils/copyWithStructuralSharing.ts","../../../src/query/utils/countObjectKeys.ts","../../../src/query/utils/flatten.ts","../../../src/query/utils/isAbsoluteUrl.ts","../../../src/query/utils/isDocumentVisible.ts","../../../src/query/utils/isNotNullish.ts","../../../src/query/utils/isOnline.ts","../../../src/query/utils/joinUrls.ts","../../../src/query/utils/getOrInsert.ts","../../../src/query/fetchBaseQuery.ts","../../../src/query/HandledError.ts","../../../src/query/retry.ts","../../../src/query/core/setupListeners.ts","../../../src/query/endpointDefinitions.ts","../../../src/query/core/buildThunks.ts","../../../src/query/core/buildInitiate.ts","../../../src/tsHelpers.ts","../../../src/query/standardSchema.ts","../../../src/query/core/buildSlice.ts","../../../src/query/core/buildSelectors.ts","../../../src/query/createApi.ts","../../../src/query/defaultSerializeQueryArgs.ts","../../../src/query/fakeBaseQuery.ts","../../../src/query/core/module.ts","../../../src/query/tsHelpers.ts","../../../src/query/core/buildMiddleware/batchActions.ts","../../../src/query/core/buildMiddleware/cacheCollection.ts","../../../src/query/core/buildMiddleware/cacheLifecycle.ts","../../../src/query/core/buildMiddleware/devMiddleware.ts","../../../src/query/core/buildMiddleware/invalidationByTags.ts","../../../src/query/core/buildMiddleware/polling.ts","../../../src/query/core/buildMiddleware/queryLifecycle.ts","../../../src/query/core/buildMiddleware/windowEventHandling.ts","../../../src/query/core/buildMiddleware/index.ts","../../../src/query/core/index.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nexport type { CombinedState, QueryCacheKey, QueryKeys, QuerySubState, RootState, SubscriptionOptions } from './core/apiState';\nexport { QueryStatus } from './core/apiState';\nexport type { Api, ApiContext, Module } from './apiTypes';\nexport type { BaseQueryApi, BaseQueryArg, BaseQueryEnhancer, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nexport type { BaseEndpointDefinition, EndpointDefinitions, EndpointDefinition, EndpointBuilder, QueryDefinition, MutationDefinition, MutationExtraOptions, InfiniteQueryArgFrom, InfiniteQueryDefinition, InfiniteQueryExtraOptions, PageParamFrom, TagDescription, QueryArgFrom, QueryExtraOptions, ResultTypeFrom, DefinitionType, DefinitionsFromApi, OverrideResultType, ResultDescription, TagTypesFromApi, UpdateDefinitions, SchemaFailureHandler, SchemaFailureConverter, SchemaFailureInfo } from './endpointDefinitions';\nexport { fetchBaseQuery } from './fetchBaseQuery';\nexport type { FetchBaseQueryArgs, FetchBaseQueryError, FetchBaseQueryMeta, FetchArgs } from './fetchBaseQuery';\nexport { retry } from './retry';\nexport type { RetryOptions } from './retry';\nexport { setupListeners } from './core/setupListeners';\nexport { skipToken } from './core/buildSelectors';\nexport type { QueryResultSelectorResult, MutationResultSelectorResult, SkipToken } from './core/buildSelectors';\nexport type { QueryActionCreatorResult, MutationActionCreatorResult, StartQueryActionCreatorOptions } from './core/buildInitiate';\nexport type { CreateApi, CreateApiOptions } from './createApi';\nexport { buildCreateApi } from './createApi';\nexport { _NEVER, fakeBaseQuery } from './fakeBaseQuery';\nexport { copyWithStructuralSharing } from './utils/copyWithStructuralSharing';\nexport { createApi, coreModule, coreModuleName } from './core/index';\nexport type { InfiniteData, InfiniteQueryActionCreatorResult, InfiniteQueryConfigOptions, InfiniteQueryResultSelectorResult, InfiniteQuerySubState, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './core/index';\nexport type { ApiEndpointMutation, ApiEndpointQuery, ApiEndpointInfiniteQuery, ApiModules, CoreModule, PrefetchOptions } from './core/module';\nexport { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs';\nexport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nexport type { Id as TSHelpersId, NoInfer as TSHelpersNoInfer, Override as TSHelpersOverride } from './tsHelpers';\nexport { NamedSchemaError } from './standardSchema';","import type { SerializedError } from '@reduxjs/toolkit';\nimport type { BaseQueryError } from '../baseQueryTypes';\nimport type { BaseEndpointDefinition, EndpointDefinitions, FullTagDescription, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFromAnyQuery, QueryDefinition, ResultTypeFrom } from '../endpointDefinitions';\nimport type { Id, WithRequiredProp } from '../tsHelpers';\nexport type QueryCacheKey = string & {\n  _type: 'queryCacheKey';\n};\nexport type QuerySubstateIdentifier = {\n  queryCacheKey: QueryCacheKey;\n};\nexport type MutationSubstateIdentifier = {\n  requestId: string;\n  fixedCacheKey?: string;\n} | {\n  requestId?: string;\n  fixedCacheKey: string;\n};\nexport type RefetchConfigOptions = {\n  refetchOnMountOrArgChange: boolean | number;\n  refetchOnReconnect: boolean;\n  refetchOnFocus: boolean;\n};\nexport type InfiniteQueryConfigOptions<DataType, PageParam, QueryArg> = {\n  /**\n   * The initial page parameter to use for the first page fetch.\n   */\n  initialPageParam: PageParam;\n  /**\n   * This function is required to automatically get the next cursor for infinite queries.\n   * The result will also be used to determine the value of `hasNextPage`.\n   */\n  getNextPageParam: (lastPage: DataType, allPages: Array<DataType>, lastPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * This function can be set to automatically get the previous cursor for infinite queries.\n   * The result will also be used to determine the value of `hasPreviousPage`.\n   */\n  getPreviousPageParam?: (firstPage: DataType, allPages: Array<DataType>, firstPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * If specified, only keep this many pages in cache at once.\n   * If additional pages are fetched, older pages in the other\n   * direction will be dropped from the cache.\n   */\n  maxPages?: number;\n};\nexport type InfiniteData<DataType, PageParam> = {\n  pages: Array<DataType>;\n  pageParams: Array<PageParam>;\n};\n\n/**\n * Strings describing the query state at any given time.\n */\nexport enum QueryStatus {\n  uninitialized = 'uninitialized',\n  pending = 'pending',\n  fulfilled = 'fulfilled',\n  rejected = 'rejected',\n}\nexport type RequestStatusFlags = {\n  status: QueryStatus.uninitialized;\n  isUninitialized: true;\n  isLoading: false;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.pending;\n  isUninitialized: false;\n  isLoading: true;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.fulfilled;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: true;\n  isError: false;\n} | {\n  status: QueryStatus.rejected;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: false;\n  isError: true;\n};\nexport function getRequestStatusFlags(status: QueryStatus): RequestStatusFlags {\n  return {\n    status,\n    isUninitialized: status === QueryStatus.uninitialized,\n    isLoading: status === QueryStatus.pending,\n    isSuccess: status === QueryStatus.fulfilled,\n    isError: status === QueryStatus.rejected\n  } as any;\n}\n\n/**\n * @public\n */\nexport type SubscriptionOptions = {\n  /**\n   * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).\n   */\n  pollingInterval?: number;\n  /**\n   *  Defaults to 'false'. This setting allows you to control whether RTK Query will continue polling if the window is not focused.\n   *\n   *  If pollingInterval is not set or set to 0, this **will not be evaluated** until pollingInterval is greater than 0.\n   *\n   *  Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  skipPollingIfUnfocused?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n};\nexport type Subscribers = {\n  [requestId: string]: SubscriptionOptions;\n};\nexport type QueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any> ? K : never }[keyof Definitions];\nexport type InfiniteQueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? K : never }[keyof Definitions];\nexport type MutationKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends MutationDefinition<any, any, any, any> ? K : never }[keyof Definitions];\ntype BaseQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = {\n  /**\n   * The argument originally passed into the hook or `initiate` action call\n   */\n  originalArgs: QueryArgFromAnyQuery<D>;\n  /**\n   * A unique ID associated with the request\n   */\n  requestId: string;\n  /**\n   * The received data from the query\n   */\n  data?: DataType;\n  /**\n   * The received error if applicable\n   */\n  error?: SerializedError | (D extends QueryDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  /**\n   * The name of the endpoint associated with the query\n   */\n  endpointName: string;\n  /**\n   * Time that the latest query started\n   */\n  startedTimeStamp: number;\n  /**\n   * Time that the latest query was fulfilled\n   */\n  fulfilledTimeStamp?: number;\n};\nexport type QuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = Id<({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'data' | 'fulfilledTimeStamp'> & {\n  error: undefined;\n}) | ({\n  status: QueryStatus.pending;\n} & BaseQuerySubState<D, DataType>) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'error'>) | {\n  status: QueryStatus.uninitialized;\n  originalArgs?: undefined;\n  data?: undefined;\n  error?: undefined;\n  requestId?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n}>;\nexport type InfiniteQueryDirection = 'forward' | 'backward';\nexport type InfiniteQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any> ? QuerySubState<D, InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>> & {\n  direction?: InfiniteQueryDirection;\n} : never;\ntype BaseMutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = {\n  requestId: string;\n  data?: ResultTypeFrom<D>;\n  error?: SerializedError | (D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  endpointName: string;\n  startedTimeStamp: number;\n  fulfilledTimeStamp?: number;\n};\nexport type MutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = (({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseMutationSubState<D>, 'data' | 'fulfilledTimeStamp'>) & {\n  error: undefined;\n}) | (({\n  status: QueryStatus.pending;\n} & BaseMutationSubState<D>) & {\n  data?: undefined;\n}) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseMutationSubState<D>, 'error'>) | {\n  requestId?: undefined;\n  status: QueryStatus.uninitialized;\n  data?: undefined;\n  error?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n};\nexport type CombinedState<D extends EndpointDefinitions, E extends string, ReducerPath extends string> = {\n  queries: QueryState<D>;\n  mutations: MutationState<D>;\n  provided: InvalidationState<E>;\n  subscriptions: SubscriptionState;\n  config: ConfigState<ReducerPath>;\n};\nexport type InvalidationState<TagTypes extends string> = {\n  tags: { [_ in TagTypes]: {\n    [id: string]: Array<QueryCacheKey>;\n    [id: number]: Array<QueryCacheKey>;\n  } };\n  keys: Record<QueryCacheKey, Array<FullTagDescription<any>>>;\n};\nexport type QueryState<D extends EndpointDefinitions> = {\n  [queryCacheKey: string]: QuerySubState<D[string]> | InfiniteQuerySubState<D[string]> | undefined;\n};\nexport type SubscriptionState = {\n  [queryCacheKey: string]: Subscribers | undefined;\n};\nexport type ConfigState<ReducerPath> = RefetchConfigOptions & {\n  reducerPath: ReducerPath;\n  online: boolean;\n  focused: boolean;\n  middlewareRegistered: boolean | 'conflict';\n} & ModifiableConfigState;\nexport type ModifiableConfigState = {\n  keepUnusedDataFor: number;\n  invalidationBehavior: 'delayed' | 'immediately';\n} & RefetchConfigOptions;\nexport type MutationState<D extends EndpointDefinitions> = {\n  [requestId: string]: MutationSubState<D[string]> | undefined;\n};\nexport type RootState<Definitions extends EndpointDefinitions, TagTypes extends string, ReducerPath extends string> = { [P in ReducerPath]: CombinedState<Definitions, TagTypes, P> };","// This file exists to consolidate all of the imports from the `@reduxjs/toolkit` package.\n// ESBuild does not de-duplicate imports, so this file is used to ensure that each method\n// imported is only listed once, and there's only one mention of the `@reduxjs/toolkit` package.\n\nexport { createAction, createSlice, createSelector, createAsyncThunk, combineReducers, createNextState, isAnyOf, isAllOf, isAction, isPending, isRejected, isFulfilled, isRejectedWithValue, isAsyncThunkAction, prepareAutoBatched, SHOULD_AUTOBATCH, isPlainObject, nanoid } from '@reduxjs/toolkit';","import { isPlainObject as _iPO } from '../core/rtkImports';\n\n// remove type guard\nconst isPlainObject: (_: any) => boolean = _iPO;\nexport function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T;\nexport function copyWithStructuralSharing(oldObj: any, newObj: any): any {\n  if (oldObj === newObj || !(isPlainObject(oldObj) && isPlainObject(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {\n    return newObj;\n  }\n  const newKeys = Object.keys(newObj);\n  const oldKeys = Object.keys(oldObj);\n  let isSameObject = newKeys.length === oldKeys.length;\n  const mergeObj: any = Array.isArray(newObj) ? [] : {};\n  for (const key of newKeys) {\n    mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);\n    if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];\n  }\n  return isSameObject ? oldObj : mergeObj;\n}","// Fast method for counting an object's keys\n// without resorting to `Object.keys(obj).length\n// Will this make a big difference in perf? Probably not\n// But we can save a few allocations.\n\nexport function countObjectKeys(obj: Record<any, any>) {\n  let count = 0;\n  for (const _key in obj) {\n    count++;\n  }\n  return count;\n}","/**\r\n * Alternative to `Array.flat(1)`\r\n * @param arr An array like [1,2,3,[1,2]]\r\n * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\r\n */\nexport const flatten = (arr: readonly any[]) => [].concat(...arr);","/**\r\n * If either :// or // is present consider it to be an absolute url\r\n *\r\n * @param url string\r\n */\n\nexport function isAbsoluteUrl(url: string) {\n  return new RegExp(`(^|:)//`).test(url);\n}","/**\r\n * Assumes true for a non-browser env, otherwise makes a best effort\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState\r\n */\nexport function isDocumentVisible(): boolean {\n  // `document` may not exist in non-browser envs (like RN)\n  if (typeof document === 'undefined') {\n    return true;\n  }\n  // Match true for visible, prerender, undefined\n  return document.visibilityState !== 'hidden';\n}","export function isNotNullish<T>(v: T | null | undefined): v is T {\n  return v != null;\n}","/**\n * Assumes a browser is online if `undefined`, otherwise makes a best effort\n * @link https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine\n */\nexport function isOnline() {\n  // We set the default config value in the store, so we'd need to check for this in a SSR env\n  return typeof navigator === 'undefined' ? true : navigator.onLine === undefined ? true : navigator.onLine;\n}","import { isAbsoluteUrl } from './isAbsoluteUrl';\nconst withoutTrailingSlash = (url: string) => url.replace(/\\/$/, '');\nconst withoutLeadingSlash = (url: string) => url.replace(/^\\//, '');\nexport function joinUrls(base: string | undefined, url: string | undefined): string {\n  if (!base) {\n    return url!;\n  }\n  if (!url) {\n    return base;\n  }\n  if (isAbsoluteUrl(url)) {\n    return url;\n  }\n  const delimiter = base.endsWith('/') || !url.startsWith('?') ? '/' : '';\n  base = withoutTrailingSlash(base);\n  url = withoutLeadingSlash(url);\n  return `${base}${delimiter}${url}`;\n}","export function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}","import { joinUrls } from './utils';\nimport { isPlainObject } from './core/rtkImports';\nimport type { BaseQueryApi, BaseQueryFn } from './baseQueryTypes';\nimport type { MaybePromise, Override } from './tsHelpers';\nexport type ResponseHandler = 'content-type' | 'json' | 'text' | ((response: Response) => Promise<any>);\ntype CustomRequestInit = Override<RequestInit, {\n  headers?: Headers | string[][] | Record<string, string | undefined> | undefined;\n}>;\nexport interface FetchArgs extends CustomRequestInit {\n  url: string;\n  params?: Record<string, any>;\n  body?: any;\n  responseHandler?: ResponseHandler;\n  validateStatus?: (response: Response, body: any) => boolean;\n  /**\n   * A number in milliseconds that represents that maximum time a request can take before timing out.\n   */\n  timeout?: number;\n}\n\n/**\n * A mini-wrapper that passes arguments straight through to\n * {@link [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)}.\n * Avoids storing `fetch` in a closure, in order to permit mocking/monkey-patching.\n */\nconst defaultFetchFn: typeof fetch = (...args) => fetch(...args);\nconst defaultValidateStatus = (response: Response) => response.status >= 200 && response.status <= 299;\nconst defaultIsJsonContentType = (headers: Headers) => /*applicat*//ion\\/(vnd\\.api\\+)?json/.test(headers.get('content-type') || '');\nexport type FetchBaseQueryError = {\n  /**\n   * * `number`:\n   *   HTTP status code\n   */\n  status: number;\n  data: unknown;\n} | {\n  /**\n   * * `\"FETCH_ERROR\"`:\n   *   An error that occurred during execution of `fetch` or the `fetchFn` callback option\n   **/\n  status: 'FETCH_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"PARSING_ERROR\"`:\n   *   An error happened during parsing.\n   *   Most likely a non-JSON-response was returned with the default `responseHandler` \"JSON\",\n   *   or an error occurred while executing a custom `responseHandler`.\n   **/\n  status: 'PARSING_ERROR';\n  originalStatus: number;\n  data: string;\n  error: string;\n} | {\n  /**\n   * * `\"TIMEOUT_ERROR\"`:\n   *   Request timed out\n   **/\n  status: 'TIMEOUT_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"CUSTOM_ERROR\"`:\n   *   A custom error type that you can return from your `queryFn` where another error might not make sense.\n   **/\n  status: 'CUSTOM_ERROR';\n  data?: unknown;\n  error: string;\n};\nfunction stripUndefined(obj: any) {\n  if (!isPlainObject(obj)) {\n    return obj;\n  }\n  const copy: Record<string, any> = {\n    ...obj\n  };\n  for (const [k, v] of Object.entries(copy)) {\n    if (v === undefined) delete copy[k];\n  }\n  return copy;\n}\nexport type FetchBaseQueryArgs = {\n  baseUrl?: string;\n  prepareHeaders?: (headers: Headers, api: Pick<BaseQueryApi, 'getState' | 'extra' | 'endpoint' | 'type' | 'forced'> & {\n    arg: string | FetchArgs;\n    extraOptions: unknown;\n  }) => MaybePromise<Headers | void>;\n  fetchFn?: (input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>;\n  paramsSerializer?: (params: Record<string, any>) => string;\n  /**\n   * By default, we only check for 'application/json' and 'application/vnd.api+json' as the content-types for json. If you need to support another format, you can pass\n   * in a predicate function for your given api to get the same automatic stringifying behavior\n   * @example\n   * ```ts\n   * const isJsonContentType = (headers: Headers) => [\"application/vnd.api+json\", \"application/json\", \"application/vnd.hal+json\"].includes(headers.get(\"content-type\")?.trim());\n   * ```\n   */\n  isJsonContentType?: (headers: Headers) => boolean;\n  /**\n   * Defaults to `application/json`;\n   */\n  jsonContentType?: string;\n\n  /**\n   * Custom replacer function used when calling `JSON.stringify()`;\n   */\n  jsonReplacer?: (this: any, key: string, value: any) => any;\n} & RequestInit & Pick<FetchArgs, 'responseHandler' | 'validateStatus' | 'timeout'>;\nexport type FetchBaseQueryMeta = {\n  request: Request;\n  response?: Response;\n};\n\n/**\n * This is a very small wrapper around fetch that aims to simplify requests.\n *\n * @example\n * ```ts\n * const baseQuery = fetchBaseQuery({\n *   baseUrl: 'https://api.your-really-great-app.com/v1/',\n *   prepareHeaders: (headers, { getState }) => {\n *     const token = (getState() as RootState).auth.token;\n *     // If we have a token set in state, let's assume that we should be passing it.\n *     if (token) {\n *       headers.set('authorization', `Bearer ${token}`);\n *     }\n *     return headers;\n *   },\n * })\n * ```\n *\n * @param {string} baseUrl\n * The base URL for an API service.\n * Typically in the format of https://example.com/\n *\n * @param {(headers: Headers, api: { getState: () => unknown; arg: string | FetchArgs; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders\n * An optional function that can be used to inject headers on requests.\n * Provides a Headers object, most of the `BaseQueryApi` (`dispatch` is not available), and the arg passed into the query function.\n * Useful for setting authentication or headers that need to be set conditionally.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers\n *\n * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>} fetchFn\n * Accepts a custom `fetch` function if you do not want to use the default on the window.\n * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`\n *\n * @param {(params: Record<string, unknown>) => string} paramsSerializer\n * An optional function that can be used to stringify querystring parameters.\n *\n * @param {(headers: Headers) => boolean} isJsonContentType\n * An optional predicate function to determine if `JSON.stringify()` should be called on the `body` arg of `FetchArgs`\n *\n * @param {string} jsonContentType Used when automatically setting the content-type header for a request with a jsonifiable body that does not have an explicit content-type header. Defaults to `application/json`.\n *\n * @param {(this: any, key: string, value: any) => any} jsonReplacer Custom replacer function used when calling `JSON.stringify()`.\n *\n * @param {number} timeout\n * A number in milliseconds that represents the maximum time a request can take before timing out.\n */\n\nexport function fetchBaseQuery({\n  baseUrl,\n  prepareHeaders = x => x,\n  fetchFn = defaultFetchFn,\n  paramsSerializer,\n  isJsonContentType = defaultIsJsonContentType,\n  jsonContentType = 'application/json',\n  jsonReplacer,\n  timeout: defaultTimeout,\n  responseHandler: globalResponseHandler,\n  validateStatus: globalValidateStatus,\n  ...baseFetchOptions\n}: FetchBaseQueryArgs = {}): BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta> {\n  if (typeof fetch === 'undefined' && fetchFn === defaultFetchFn) {\n    console.warn('Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.');\n  }\n  return async (arg, api, extraOptions) => {\n    const {\n      getState,\n      extra,\n      endpoint,\n      forced,\n      type\n    } = api;\n    let meta: FetchBaseQueryMeta | undefined;\n    let {\n      url,\n      headers = new Headers(baseFetchOptions.headers),\n      params = undefined,\n      responseHandler = globalResponseHandler ?? 'json' as const,\n      validateStatus = globalValidateStatus ?? defaultValidateStatus,\n      timeout = defaultTimeout,\n      ...rest\n    } = typeof arg == 'string' ? {\n      url: arg\n    } : arg;\n    let abortController: AbortController | undefined,\n      signal = api.signal;\n    if (timeout) {\n      abortController = new AbortController();\n      api.signal.addEventListener('abort', abortController.abort);\n      signal = abortController.signal;\n    }\n    let config: RequestInit = {\n      ...baseFetchOptions,\n      signal,\n      ...rest\n    };\n    headers = new Headers(stripUndefined(headers));\n    config.headers = (await prepareHeaders(headers, {\n      getState,\n      arg,\n      extra,\n      endpoint,\n      forced,\n      type,\n      extraOptions\n    })) || headers;\n\n    // Only set the content-type to json if appropriate. Will not be true for FormData, ArrayBuffer, Blob, etc.\n    const isJsonifiable = (body: any) => typeof body === 'object' && (isPlainObject(body) || Array.isArray(body) || typeof body.toJSON === 'function');\n    if (!config.headers.has('content-type') && isJsonifiable(config.body)) {\n      config.headers.set('content-type', jsonContentType);\n    }\n    if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {\n      config.body = JSON.stringify(config.body, jsonReplacer);\n    }\n    if (params) {\n      const divider = ~url.indexOf('?') ? '&' : '?';\n      const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));\n      url += divider + query;\n    }\n    url = joinUrls(baseUrl, url);\n    const request = new Request(url, config);\n    const requestClone = new Request(url, config);\n    meta = {\n      request: requestClone\n    };\n    let response,\n      timedOut = false,\n      timeoutId = abortController && setTimeout(() => {\n        timedOut = true;\n        abortController!.abort();\n      }, timeout);\n    try {\n      response = await fetchFn(request);\n    } catch (e) {\n      return {\n        error: {\n          status: timedOut ? 'TIMEOUT_ERROR' : 'FETCH_ERROR',\n          error: String(e)\n        },\n        meta\n      };\n    } finally {\n      if (timeoutId) clearTimeout(timeoutId);\n      abortController?.signal.removeEventListener('abort', abortController.abort);\n    }\n    const responseClone = response.clone();\n    meta.response = responseClone;\n    let resultData: any;\n    let responseText: string = '';\n    try {\n      let handleResponseError;\n      await Promise.all([handleResponse(response, responseHandler).then(r => resultData = r, e => handleResponseError = e),\n      // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182\n      // we *have* to \"use up\" both streams at the same time or they will stop running in node-fetch scenarios\n      responseClone.text().then(r => responseText = r, () => {})]);\n      if (handleResponseError) throw handleResponseError;\n    } catch (e) {\n      return {\n        error: {\n          status: 'PARSING_ERROR',\n          originalStatus: response.status,\n          data: responseText,\n          error: String(e)\n        },\n        meta\n      };\n    }\n    return validateStatus(response, resultData) ? {\n      data: resultData,\n      meta\n    } : {\n      error: {\n        status: response.status,\n        data: resultData\n      },\n      meta\n    };\n  };\n  async function handleResponse(response: Response, responseHandler: ResponseHandler) {\n    if (typeof responseHandler === 'function') {\n      return responseHandler(response);\n    }\n    if (responseHandler === 'content-type') {\n      responseHandler = isJsonContentType(response.headers) ? 'json' : 'text';\n    }\n    if (responseHandler === 'json') {\n      const text = await response.text();\n      return text.length ? JSON.parse(text) : null;\n    }\n    return response.text();\n  }\n}","export class HandledError {\n  constructor(public readonly value: any, public readonly meta: any = undefined) {}\n}","import type { BaseQueryApi, BaseQueryArg, BaseQueryEnhancer, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta } from './baseQueryTypes';\nimport type { FetchBaseQueryError } from './fetchBaseQuery';\nimport { HandledError } from './HandledError';\n\n/**\n * Exponential backoff based on the attempt number.\n *\n * @remarks\n * 1. 600ms * random(0.4, 1.4)\n * 2. 1200ms * random(0.4, 1.4)\n * 3. 2400ms * random(0.4, 1.4)\n * 4. 4800ms * random(0.4, 1.4)\n * 5. 9600ms * random(0.4, 1.4)\n *\n * @param attempt - Current attempt\n * @param maxRetries - Maximum number of retries\n */\nasync function defaultBackoff(attempt: number = 0, maxRetries: number = 5) {\n  const attempts = Math.min(attempt, maxRetries);\n  const timeout = ~~((Math.random() + 0.4) * (300 << attempts)); // Force a positive int in the case we make this an option\n  await new Promise(resolve => setTimeout((res: any) => resolve(res), timeout));\n}\ntype RetryConditionFunction = (error: BaseQueryError<BaseQueryFn>, args: BaseQueryArg<BaseQueryFn>, extraArgs: {\n  attempt: number;\n  baseQueryApi: BaseQueryApi;\n  extraOptions: BaseQueryExtraOptions<BaseQueryFn> & RetryOptions;\n}) => boolean;\nexport type RetryOptions = {\n  /**\n   * Function used to determine delay between retries\n   */\n  backoff?: (attempt: number, maxRetries: number) => Promise<void>;\n} & ({\n  /**\n   * How many times the query will be retried (default: 5)\n   */\n  maxRetries?: number;\n  retryCondition?: undefined;\n} | {\n  /**\n   * Callback to determine if a retry should be attempted.\n   * Return `true` for another retry and `false` to quit trying prematurely.\n   */\n  retryCondition?: RetryConditionFunction;\n  maxRetries?: undefined;\n});\nfunction fail<BaseQuery extends BaseQueryFn = BaseQueryFn>(error: BaseQueryError<BaseQuery>, meta?: BaseQueryMeta<BaseQuery>): never {\n  throw Object.assign(new HandledError({\n    error,\n    meta\n  }), {\n    throwImmediately: true\n  });\n}\nconst EMPTY_OPTIONS = {};\nconst retryWithBackoff: BaseQueryEnhancer<unknown, RetryOptions, RetryOptions | void> = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {\n  // We need to figure out `maxRetries` before we define `defaultRetryCondition.\n  // This is probably goofy, but ought to work.\n  // Put our defaults in one array, filter out undefineds, grab the last value.\n  const possibleMaxRetries: number[] = [5, (defaultOptions as any || EMPTY_OPTIONS).maxRetries, (extraOptions as any || EMPTY_OPTIONS).maxRetries].filter(x => x !== undefined);\n  const [maxRetries] = possibleMaxRetries.slice(-1);\n  const defaultRetryCondition: RetryConditionFunction = (_, __, {\n    attempt\n  }) => attempt <= maxRetries;\n  const options: {\n    maxRetries: number;\n    backoff: typeof defaultBackoff;\n    retryCondition: typeof defaultRetryCondition;\n  } = {\n    maxRetries,\n    backoff: defaultBackoff,\n    retryCondition: defaultRetryCondition,\n    ...defaultOptions,\n    ...extraOptions\n  };\n  let retry = 0;\n  while (true) {\n    try {\n      const result = await baseQuery(args, api, extraOptions);\n      // baseQueries _should_ return an error property, so we should check for that and throw it to continue retrying\n      if (result.error) {\n        throw new HandledError(result);\n      }\n      return result;\n    } catch (e: any) {\n      retry++;\n      if (e.throwImmediately) {\n        if (e instanceof HandledError) {\n          return e.value;\n        }\n\n        // We don't know what this is, so we have to rethrow it\n        throw e;\n      }\n      if (e instanceof HandledError && !options.retryCondition(e.value.error as FetchBaseQueryError, args, {\n        attempt: retry,\n        baseQueryApi: api,\n        extraOptions\n      })) {\n        return e.value;\n      }\n      await options.backoff(retry, options.maxRetries);\n    }\n  }\n};\n\n/**\n * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"Retry every request 5 times by default\"\n * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'\n * interface Post {\n *   id: number\n *   name: string\n * }\n * type PostsResponse = Post[]\n *\n * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.\n * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });\n * export const api = createApi({\n *   baseQuery: staggeredBaseQuery,\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsResponse, void>({\n *       query: () => ({ url: 'posts' }),\n *     }),\n *     getPost: build.query<PostsResponse, string>({\n *       query: (id) => ({ url: `post/${id}` }),\n *       extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint\n *     }),\n *   }),\n * });\n *\n * export const { useGetPostsQuery, useGetPostQuery } = api;\n * ```\n */\nexport const retry = /* @__PURE__ */Object.assign(retryWithBackoff, {\n  fail\n});","import type { ThunkDispatch, ActionCreatorWithoutPayload // Workaround for API-Extractor\n} from '@reduxjs/toolkit';\nimport { createAction } from './rtkImports';\nexport const onFocus = /* @__PURE__ */createAction('__rtkq/focused');\nexport const onFocusLost = /* @__PURE__ */createAction('__rtkq/unfocused');\nexport const onOnline = /* @__PURE__ */createAction('__rtkq/online');\nexport const onOffline = /* @__PURE__ */createAction('__rtkq/offline');\nlet initialized = false;\n\n/**\n * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.\n * It requires the dispatch method from your store.\n * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,\n * but you have the option of providing a callback for more granular control.\n *\n * @example\n * ```ts\n * setupListeners(store.dispatch)\n * ```\n *\n * @param dispatch - The dispatch method from your store\n * @param customHandler - An optional callback for more granular control over listener behavior\n * @returns Return value of the handler.\n * The default handler returns an `unsubscribe` method that can be called to remove the listeners.\n */\nexport function setupListeners(dispatch: ThunkDispatch<any, any, any>, customHandler?: (dispatch: ThunkDispatch<any, any, any>, actions: {\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n}) => () => void) {\n  function defaultHandler() {\n    const handleFocus = () => dispatch(onFocus());\n    const handleFocusLost = () => dispatch(onFocusLost());\n    const handleOnline = () => dispatch(onOnline());\n    const handleOffline = () => dispatch(onOffline());\n    const handleVisibilityChange = () => {\n      if (window.document.visibilityState === 'visible') {\n        handleFocus();\n      } else {\n        handleFocusLost();\n      }\n    };\n    if (!initialized) {\n      if (typeof window !== 'undefined' && window.addEventListener) {\n        // Handle focus events\n        window.addEventListener('visibilitychange', handleVisibilityChange, false);\n        window.addEventListener('focus', handleFocus, false);\n\n        // Handle connection events\n        window.addEventListener('online', handleOnline, false);\n        window.addEventListener('offline', handleOffline, false);\n        initialized = true;\n      }\n    }\n    const unsubscribe = () => {\n      window.removeEventListener('focus', handleFocus);\n      window.removeEventListener('visibilitychange', handleVisibilityChange);\n      window.removeEventListener('online', handleOnline);\n      window.removeEventListener('offline', handleOffline);\n      initialized = false;\n    };\n    return unsubscribe;\n  }\n  return customHandler ? customHandler(dispatch, {\n    onFocus,\n    onFocusLost,\n    onOffline,\n    onOnline\n  }) : defaultHandler();\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","import type { AsyncThunk, AsyncThunkPayloadCreator, Draft, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Patch } from 'immer';\nimport { isDraftable, produceWithPatches } from 'immer';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, BaseQueryFn, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryCombinedArg, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFrom, QueryDefinition, ResultDescription, ResultTypeFrom, SchemaFailureConverter, SchemaFailureHandler, SchemaFailureInfo } from '../endpointDefinitions';\nimport { calculateProvidedBy, isInfiniteQueryDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { HandledError } from '../HandledError';\nimport type { UnwrapPromise } from '../tsHelpers';\nimport type { RootState, QueryKeys, QuerySubstateIdentifier, InfiniteData, InfiniteQueryConfigOptions, QueryCacheKey, InfiniteQueryDirection, InfiniteQueryKeys } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { InfiniteQueryActionCreatorResult, QueryActionCreatorResult, StartInfiniteQueryActionCreatorOptions, StartQueryActionCreatorOptions } from './buildInitiate';\nimport { forceQueryFnSymbol, isUpsertQuery } from './buildInitiate';\nimport type { AllSelectors } from './buildSelectors';\nimport type { ApiEndpointQuery, PrefetchOptions } from './module';\nimport { createAsyncThunk, isAllOf, isFulfilled, isPending, isRejected, isRejectedWithValue, SHOULD_AUTOBATCH } from './rtkImports';\nimport { parseWithSchema, NamedSchemaError } from '../standardSchema';\nexport type BuildThunksApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = Matchers<QueryThunk, Definition>;\nexport type BuildThunksApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = Matchers<InfiniteQueryThunk<any>, Definition>;\nexport type BuildThunksApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = Matchers<MutationThunk, Definition>;\ntype EndpointThunk<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = Definition extends EndpointDefinition<infer QueryArg, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<ResultType, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<InfiniteData<ResultType, PageParam>, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : never;\nexport type PendingAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['pending']>;\nexport type FulfilledAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['fulfilled']>;\nexport type RejectedAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['rejected']>;\nexport type Matcher<M> = (value: any) => value is M;\nexport interface Matchers<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> {\n  matchPending: Matcher<PendingAction<Thunk, Definition>>;\n  matchFulfilled: Matcher<FulfilledAction<Thunk, Definition>>;\n  matchRejected: Matcher<RejectedAction<Thunk, Definition>>;\n}\nexport type QueryThunkArg = QuerySubstateIdentifier & StartQueryActionCreatorOptions & {\n  type: 'query';\n  originalArgs: unknown;\n  endpointName: string;\n};\nexport type InfiniteQueryThunkArg<D extends InfiniteQueryDefinition<any, any, any, any, any>> = QuerySubstateIdentifier & StartInfiniteQueryActionCreatorOptions<D> & {\n  type: `query`;\n  originalArgs: unknown;\n  endpointName: string;\n  param: unknown;\n  direction?: InfiniteQueryDirection;\n};\ntype MutationThunkArg = {\n  type: 'mutation';\n  originalArgs: unknown;\n  endpointName: string;\n  track?: boolean;\n  fixedCacheKey?: string;\n};\nexport type ThunkResult = unknown;\nexport type ThunkApiMetaConfig = {\n  pendingMeta: {\n    startedTimeStamp: number;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  fulfilledMeta: {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  rejectedMeta: {\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n};\nexport type QueryThunk = AsyncThunk<ThunkResult, QueryThunkArg, ThunkApiMetaConfig>;\nexport type InfiniteQueryThunk<D extends InfiniteQueryDefinition<any, any, any, any, any>> = AsyncThunk<ThunkResult, InfiniteQueryThunkArg<D>, ThunkApiMetaConfig>;\nexport type MutationThunk = AsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig>;\nfunction defaultTransformResponse(baseQueryReturnValue: unknown) {\n  return baseQueryReturnValue;\n}\nexport type MaybeDrafted<T> = T | Draft<T>;\nexport type Recipe<T> = (data: MaybeDrafted<T>) => void | MaybeDrafted<T>;\nexport type UpsertRecipe<T> = (data: MaybeDrafted<T> | undefined) => void | MaybeDrafted<T>;\nexport type PatchQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, patches: readonly Patch[], updateProvided?: boolean) => ThunkAction<void, PartialState, any, UnknownAction>;\nexport type AllQueryKeys<Definitions extends EndpointDefinitions> = QueryKeys<Definitions> | InfiniteQueryKeys<Definitions>;\nexport type QueryArgFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryArgFrom<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryArgFrom<Definitions[EndpointName]> : never;\nexport type DataFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteData<ResultTypeFrom<Definitions[EndpointName]>, PageParamFrom<Definitions[EndpointName]>> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? ResultTypeFrom<Definitions[EndpointName]> : unknown;\nexport type UpsertThunkResult<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryActionCreatorResult<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryActionCreatorResult<Definitions[EndpointName]> : QueryActionCreatorResult<never>;\nexport type UpdateQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, updateRecipe: Recipe<DataFromAnyQueryDefinition<Definitions, EndpointName>>, updateProvided?: boolean) => ThunkAction<PatchCollection, PartialState, any, UnknownAction>;\nexport type UpsertQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, value: DataFromAnyQueryDefinition<Definitions, EndpointName>) => ThunkAction<UpsertThunkResult<Definitions, EndpointName>, PartialState, any, UnknownAction>;\n\n/**\n * An object returned from dispatching a `api.util.updateQueryData` call.\n */\nexport type PatchCollection = {\n  /**\n   * An `immer` Patch describing the cache update.\n   */\n  patches: Patch[];\n  /**\n   * An `immer` Patch to revert the cache update.\n   */\n  inversePatches: Patch[];\n  /**\n   * A function that will undo the cache update.\n   */\n  undo: () => void;\n};\ntype TransformCallback = (baseQueryReturnValue: unknown, meta: unknown, arg: unknown) => any;\nexport const addShouldAutoBatch = <T extends Record<string, any>,>(arg: T = {} as T): T & {\n  [SHOULD_AUTOBATCH]: true;\n} => {\n  return {\n    ...arg,\n    [SHOULD_AUTOBATCH]: true\n  };\n};\nexport function buildThunks<BaseQuery extends BaseQueryFn, ReducerPath extends string, Definitions extends EndpointDefinitions>({\n  reducerPath,\n  baseQuery,\n  context: {\n    endpointDefinitions\n  },\n  serializeQueryArgs,\n  api,\n  assertTagType,\n  selectors,\n  onSchemaFailure,\n  catchSchemaFailure: globalCatchSchemaFailure,\n  skipSchemaValidation: globalSkipSchemaValidation\n}: {\n  baseQuery: BaseQuery;\n  reducerPath: ReducerPath;\n  context: ApiContext<Definitions>;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  api: Api<BaseQuery, Definitions, ReducerPath, any>;\n  assertTagType: AssertTagTypes;\n  selectors: AllSelectors;\n  onSchemaFailure: SchemaFailureHandler | undefined;\n  catchSchemaFailure: SchemaFailureConverter<BaseQuery> | undefined;\n  skipSchemaValidation: boolean | undefined;\n}) {\n  type State = RootState<any, string, ReducerPath>;\n  const patchQueryData: PatchQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {\n    const endpointDefinition = endpointDefinitions[endpointName];\n    const queryCacheKey = serializeQueryArgs({\n      queryArgs: arg,\n      endpointDefinition,\n      endpointName\n    });\n    dispatch(api.internalActions.queryResultPatched({\n      queryCacheKey,\n      patches\n    }));\n    if (!updateProvided) {\n      return;\n    }\n    const newValue = api.endpoints[endpointName].select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, undefined, arg, {}, assertTagType);\n    dispatch(api.internalActions.updateProvidedBy([{\n      queryCacheKey,\n      providedTags\n    }]));\n  };\n  function addToStart<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [item, ...items];\n    return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n  }\n  function addToEnd<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [...items, item];\n    return max && newItems.length > max ? newItems.slice(1) : newItems;\n  }\n  const updateQueryData: UpdateQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {\n    const endpointDefinition = api.endpoints[endpointName];\n    const currentState = endpointDefinition.select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const ret: PatchCollection = {\n      patches: [],\n      inversePatches: [],\n      undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))\n    };\n    if (currentState.status === QueryStatus.uninitialized) {\n      return ret;\n    }\n    let newValue;\n    if ('data' in currentState) {\n      if (isDraftable(currentState.data)) {\n        const [value, patches, inversePatches] = produceWithPatches(currentState.data, updateRecipe);\n        ret.patches.push(...patches);\n        ret.inversePatches.push(...inversePatches);\n        newValue = value;\n      } else {\n        newValue = updateRecipe(currentState.data);\n        ret.patches.push({\n          op: 'replace',\n          path: [],\n          value: newValue\n        });\n        ret.inversePatches.push({\n          op: 'replace',\n          path: [],\n          value: currentState.data\n        });\n      }\n    }\n    if (ret.patches.length === 0) {\n      return ret;\n    }\n    dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));\n    return ret;\n  };\n  const upsertQueryData: UpsertQueryDataThunk<Definitions, State> = (endpointName, arg, value) => dispatch => {\n    type EndpointName = typeof endpointName;\n    const res = dispatch((api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>).initiate(arg, {\n      subscribe: false,\n      forceRefetch: true,\n      [forceQueryFnSymbol]: () => ({\n        data: value\n      })\n    })) as UpsertThunkResult<Definitions, EndpointName>;\n    return res;\n  };\n  const getTransformCallbackForEndpoint = (endpointDefinition: EndpointDefinition<any, any, any, any>, transformFieldName: 'transformResponse' | 'transformErrorResponse'): TransformCallback => {\n    return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName]! as TransformCallback : defaultTransformResponse;\n  };\n\n  // The generic async payload function for all of our thunks\n  const executeEndpoint: AsyncThunkPayloadCreator<ThunkResult, QueryThunkArg | MutationThunkArg | InfiniteQueryThunkArg<any>, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }> = async (arg, {\n    signal,\n    abort,\n    rejectWithValue,\n    fulfillWithValue,\n    dispatch,\n    getState,\n    extra\n  }) => {\n    const endpointDefinition = endpointDefinitions[arg.endpointName];\n    const {\n      metaSchema,\n      skipSchemaValidation = globalSkipSchemaValidation\n    } = endpointDefinition;\n    try {\n      let transformResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformResponse');\n      const baseQueryApi = {\n        signal,\n        abort,\n        dispatch,\n        getState,\n        extra,\n        endpoint: arg.endpointName,\n        type: arg.type,\n        forced: arg.type === 'query' ? isForcedQuery(arg, getState()) : undefined,\n        queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n      };\n      const forceQueryFn = arg.type === 'query' ? arg[forceQueryFnSymbol] : undefined;\n      let finalQueryReturnValue: QueryReturnValue;\n\n      // Infinite query wrapper, which executes the request and returns\n      // the InfiniteData `{pages, pageParams}` structure\n      const fetchPage = async (data: InfiniteData<unknown, unknown>, param: unknown, maxPages: number, previous?: boolean): Promise<QueryReturnValue> => {\n        // This should handle cases where there is no `getPrevPageParam`,\n        // or `getPPP` returned nullish\n        if (param == null && data.pages.length) {\n          return Promise.resolve({\n            data\n          });\n        }\n        const finalQueryArg: InfiniteQueryCombinedArg<any, any> = {\n          queryArg: arg.originalArgs,\n          pageParam: param\n        };\n        const pageResponse = await executeRequest(finalQueryArg);\n        const addTo = previous ? addToStart : addToEnd;\n        return {\n          data: {\n            pages: addTo(data.pages, pageResponse.data, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          },\n          meta: pageResponse.meta\n        };\n      };\n\n      // Wrapper for executing either `query` or `queryFn`,\n      // and handling any errors\n      async function executeRequest(finalQueryArg: unknown): Promise<QueryReturnValue> {\n        let result: QueryReturnValue;\n        const {\n          extraOptions,\n          argSchema,\n          rawResponseSchema,\n          responseSchema\n        } = endpointDefinition;\n        if (argSchema && !skipSchemaValidation) {\n          finalQueryArg = await parseWithSchema(argSchema, finalQueryArg, 'argSchema', {} // we don't have a meta yet, so we can't pass it\n          );\n        }\n        if (forceQueryFn) {\n          // upsertQueryData relies on this to pass in the user-provided value\n          result = forceQueryFn();\n        } else if (endpointDefinition.query) {\n          result = await baseQuery(endpointDefinition.query(finalQueryArg as any), baseQueryApi, extraOptions as any);\n        } else {\n          result = await endpointDefinition.queryFn(finalQueryArg as any, baseQueryApi, extraOptions as any, arg => baseQuery(arg, baseQueryApi, extraOptions as any));\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          const what = endpointDefinition.query ? '`baseQuery`' : '`queryFn`';\n          let err: undefined | string;\n          if (!result) {\n            err = `${what} did not return anything.`;\n          } else if (typeof result !== 'object') {\n            err = `${what} did not return an object.`;\n          } else if (result.error && result.data) {\n            err = `${what} returned an object containing both \\`error\\` and \\`result\\`.`;\n          } else if (result.error === undefined && result.data === undefined) {\n            err = `${what} returned an object containing neither a valid \\`error\\` and \\`result\\`. At least one of them should not be \\`undefined\\``;\n          } else {\n            for (const key of Object.keys(result)) {\n              if (key !== 'error' && key !== 'data' && key !== 'meta') {\n                err = `The object returned by ${what} has the unknown property ${key}.`;\n                break;\n              }\n            }\n          }\n          if (err) {\n            console.error(`Error encountered handling the endpoint ${arg.endpointName}.\n                  ${err}\n                  It needs to return an object with either the shape \\`{ data: <value> }\\` or \\`{ error: <value> }\\` that may contain an optional \\`meta\\` property.\n                  Object returned was:`, result);\n          }\n        }\n        if (result.error) throw new HandledError(result.error, result.meta);\n        let {\n          data\n        } = result;\n        if (rawResponseSchema && !skipSchemaValidation) {\n          data = await parseWithSchema(rawResponseSchema, result.data, 'rawResponseSchema', result.meta);\n        }\n        let transformedResponse = await transformResponse(data, result.meta, finalQueryArg);\n        if (responseSchema && !skipSchemaValidation) {\n          transformedResponse = await parseWithSchema(responseSchema, transformedResponse, 'responseSchema', result.meta);\n        }\n        return {\n          ...result,\n          data: transformedResponse\n        };\n      }\n      if (arg.type === 'query' && 'infiniteQueryOptions' in endpointDefinition) {\n        // This is an infinite query endpoint\n        const {\n          infiniteQueryOptions\n        } = endpointDefinition;\n\n        // Runtime checks should guarantee this is a positive number if provided\n        const {\n          maxPages = Infinity\n        } = infiniteQueryOptions;\n        let result: QueryReturnValue;\n\n        // Start by looking up the existing InfiniteData value from state,\n        // falling back to an empty value if it doesn't exist yet\n        const blankData = {\n          pages: [],\n          pageParams: []\n        };\n        const cachedData = selectors.selectQueryEntry(getState(), arg.queryCacheKey)?.data as InfiniteData<unknown, unknown> | undefined;\n\n        // When the arg changes or the user forces a refetch,\n        // we don't include the `direction` flag. This lets us distinguish\n        // between actually refetching with a forced query, vs just fetching\n        // the next page.\n        const isForcedQueryNeedingRefetch =\n        // arg.forceRefetch\n        isForcedQuery(arg, getState()) && !(arg as InfiniteQueryThunkArg<any>).direction;\n        const existingData = (isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData) as InfiniteData<unknown, unknown>;\n\n        // If the thunk specified a direction and we do have at least one page,\n        // fetch the next or previous page\n        if ('direction' in arg && arg.direction && existingData.pages.length) {\n          const previous = arg.direction === 'backward';\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const param = pageParamFn(infiniteQueryOptions, existingData, arg.originalArgs);\n          result = await fetchPage(existingData, param, maxPages, previous);\n        } else {\n          // Otherwise, fetch the first page and then any remaining pages\n\n          const {\n            initialPageParam = infiniteQueryOptions.initialPageParam\n          } = arg as InfiniteQueryThunkArg<any>;\n\n          // If we're doing a refetch, we should start from\n          // the first page we have cached.\n          // Otherwise, we should start from the initialPageParam\n          const cachedPageParams = cachedData?.pageParams ?? [];\n          const firstPageParam = cachedPageParams[0] ?? initialPageParam;\n          const totalPages = cachedPageParams.length;\n\n          // Fetch first page\n          result = await fetchPage(existingData, firstPageParam, maxPages);\n          if (forceQueryFn) {\n            // HACK `upsertQueryData` expects the user to pass in the `{pages, pageParams}` structure,\n            // but `fetchPage` treats that as `pages[0]`. We have to manually un-nest it.\n            result = {\n              data: (result.data as InfiniteData<unknown, unknown>).pages[0]\n            } as QueryReturnValue;\n          }\n\n          // Fetch remaining pages\n          for (let i = 1; i < totalPages; i++) {\n            const param = getNextPageParam(infiniteQueryOptions, result.data as InfiniteData<unknown, unknown>, arg.originalArgs);\n            result = await fetchPage(result.data as InfiniteData<unknown, unknown>, param, maxPages);\n          }\n        }\n        finalQueryReturnValue = result;\n      } else {\n        // Non-infinite endpoint. Just run the one request.\n        finalQueryReturnValue = await executeRequest(arg.originalArgs);\n      }\n      if (metaSchema && !skipSchemaValidation && finalQueryReturnValue.meta) {\n        finalQueryReturnValue.meta = await parseWithSchema(metaSchema, finalQueryReturnValue.meta, 'metaSchema', finalQueryReturnValue.meta);\n      }\n\n      // console.log('Final result: ', transformedData)\n      return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({\n        fulfilledTimeStamp: Date.now(),\n        baseQueryMeta: finalQueryReturnValue.meta\n      }));\n    } catch (error) {\n      let caughtError = error;\n      if (caughtError instanceof HandledError) {\n        let transformErrorResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformErrorResponse');\n        const {\n          rawErrorResponseSchema,\n          errorResponseSchema\n        } = endpointDefinition;\n        let {\n          value,\n          meta\n        } = caughtError;\n        try {\n          if (rawErrorResponseSchema && !skipSchemaValidation) {\n            value = await parseWithSchema(rawErrorResponseSchema, value, 'rawErrorResponseSchema', meta);\n          }\n          if (metaSchema && !skipSchemaValidation) {\n            meta = await parseWithSchema(metaSchema, meta, 'metaSchema', meta);\n          }\n          let transformedErrorResponse = await transformErrorResponse(value, meta, arg.originalArgs);\n          if (errorResponseSchema && !skipSchemaValidation) {\n            transformedErrorResponse = await parseWithSchema(errorResponseSchema, transformedErrorResponse, 'errorResponseSchema', meta);\n          }\n          return rejectWithValue(transformedErrorResponse, addShouldAutoBatch({\n            baseQueryMeta: meta\n          }));\n        } catch (e) {\n          caughtError = e;\n        }\n      }\n      try {\n        if (caughtError instanceof NamedSchemaError) {\n          const info: SchemaFailureInfo = {\n            endpoint: arg.endpointName,\n            arg: arg.originalArgs,\n            type: arg.type,\n            queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n          };\n          endpointDefinition.onSchemaFailure?.(caughtError, info);\n          onSchemaFailure?.(caughtError, info);\n          const {\n            catchSchemaFailure = globalCatchSchemaFailure\n          } = endpointDefinition;\n          if (catchSchemaFailure) {\n            return rejectWithValue(catchSchemaFailure(caughtError, info), addShouldAutoBatch({\n              baseQueryMeta: caughtError._bqMeta\n            }));\n          }\n        }\n      } catch (e) {\n        caughtError = e;\n      }\n      if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n        console.error(`An unhandled error occurred processing a request for the endpoint \"${arg.endpointName}\".\nIn the case of an unhandled error, no tags will be \"provided\" or \"invalidated\".`, caughtError);\n      } else {\n        console.error(caughtError);\n      }\n      throw caughtError;\n    }\n  };\n  function isForcedQuery(arg: QueryThunkArg, state: RootState<any, string, ReducerPath>) {\n    const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);\n    const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;\n    const fulfilledVal = requestState?.fulfilledTimeStamp;\n    const refetchVal = arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange);\n    if (refetchVal) {\n      // Return if it's true or compare the dates because it must be a number\n      return refetchVal === true || (Number(new Date()) - Number(fulfilledVal)) / 1000 >= refetchVal;\n    }\n    return false;\n  }\n  const createQueryThunk = <ThunkArgType extends QueryThunkArg | InfiniteQueryThunkArg<any>,>() => {\n    const generatedQueryThunk = createAsyncThunk<ThunkResult, ThunkArgType, ThunkApiMetaConfig & {\n      state: RootState<any, string, ReducerPath>;\n    }>(`${reducerPath}/executeQuery`, executeEndpoint, {\n      getPendingMeta({\n        arg\n      }) {\n        const endpointDefinition = endpointDefinitions[arg.endpointName];\n        return addShouldAutoBatch({\n          startedTimeStamp: Date.now(),\n          ...(isInfiniteQueryDefinition(endpointDefinition) ? {\n            direction: (arg as InfiniteQueryThunkArg<any>).direction\n          } : {})\n        });\n      },\n      condition(queryThunkArg, {\n        getState\n      }) {\n        const state = getState();\n        const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);\n        const fulfilledVal = requestState?.fulfilledTimeStamp;\n        const currentArg = queryThunkArg.originalArgs;\n        const previousArg = requestState?.originalArgs;\n        const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];\n        const direction = (queryThunkArg as InfiniteQueryThunkArg<any>).direction;\n\n        // Order of these checks matters.\n        // In order for `upsertQueryData` to successfully run while an existing request is in flight,\n        /// we have to check for that first, otherwise `queryThunk` will bail out and not run at all.\n        if (isUpsertQuery(queryThunkArg)) {\n          return true;\n        }\n\n        // Don't retry a request that's currently in-flight\n        if (requestState?.status === 'pending') {\n          return false;\n        }\n\n        // if this is forced, continue\n        if (isForcedQuery(queryThunkArg, state)) {\n          return true;\n        }\n        if (isQueryDefinition(endpointDefinition) && endpointDefinition?.forceRefetch?.({\n          currentArg,\n          previousArg,\n          endpointState: requestState,\n          state\n        })) {\n          return true;\n        }\n\n        // Pull from the cache unless we explicitly force refetch or qualify based on time\n        if (fulfilledVal && !direction) {\n          // Value is cached and we didn't specify to refresh, skip it.\n          return false;\n        }\n        return true;\n      },\n      dispatchConditionRejection: true\n    });\n    return generatedQueryThunk;\n  };\n  const queryThunk = createQueryThunk<QueryThunkArg>();\n  const infiniteQueryThunk = createQueryThunk<InfiniteQueryThunkArg<any>>();\n  const mutationThunk = createAsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }>(`${reducerPath}/executeMutation`, executeEndpoint, {\n    getPendingMeta() {\n      return addShouldAutoBatch({\n        startedTimeStamp: Date.now()\n      });\n    }\n  });\n  const hasTheForce = (options: any): options is {\n    force: boolean;\n  } => 'force' in options;\n  const hasMaxAge = (options: any): options is {\n    ifOlderThan: false | number;\n  } => 'ifOlderThan' in options;\n  const prefetch = <EndpointName extends QueryKeys<Definitions>,>(endpointName: EndpointName, arg: any, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction> => (dispatch: ThunkDispatch<any, any, any>, getState: () => any) => {\n    const force = hasTheForce(options) && options.force;\n    const maxAge = hasMaxAge(options) && options.ifOlderThan;\n    const queryAction = (force: boolean = true) => {\n      const options = {\n        forceRefetch: force,\n        isPrefetch: true\n      };\n      return (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).initiate(arg, options);\n    };\n    const latestStateValue = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg)(getState());\n    if (force) {\n      dispatch(queryAction());\n    } else if (maxAge) {\n      const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp;\n      if (!lastFulfilledTs) {\n        dispatch(queryAction());\n        return;\n      }\n      const shouldRetrigger = (Number(new Date()) - Number(new Date(lastFulfilledTs))) / 1000 >= maxAge;\n      if (shouldRetrigger) {\n        dispatch(queryAction());\n      }\n    } else {\n      // If prefetching with no options, just let it try\n      dispatch(queryAction(false));\n    }\n  };\n  function matchesEndpoint(endpointName: string) {\n    return (action: any): action is UnknownAction => action?.meta?.arg?.endpointName === endpointName;\n  }\n  function buildMatchThunkActions<Thunk extends AsyncThunk<any, QueryThunkArg, ThunkApiMetaConfig> | AsyncThunk<any, MutationThunkArg, ThunkApiMetaConfig>>(thunk: Thunk, endpointName: string) {\n    return {\n      matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),\n      matchFulfilled: isAllOf(isFulfilled(thunk), matchesEndpoint(endpointName)),\n      matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName))\n    } as Matchers<Thunk, any>;\n  }\n  return {\n    queryThunk,\n    mutationThunk,\n    infiniteQueryThunk,\n    prefetch,\n    updateQueryData,\n    upsertQueryData,\n    patchQueryData,\n    buildMatchThunkActions\n  };\n}\nexport function getNextPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  const lastIndex = pages.length - 1;\n  return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams, queryArg);\n}\nexport function getPreviousPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams, queryArg);\n}\nexport function calculateProvidedByThunk(action: UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<MutationThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>, type: 'providesTags' | 'invalidatesTags', endpointDefinitions: EndpointDefinitions, assertTagType: AssertTagTypes) {\n  return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type] as ResultDescription<any, any, any, any, any>, isFulfilled(action) ? action.payload : undefined, isRejectedWithValue(action) ? action.payload : undefined, action.meta.arg.originalArgs, 'baseQueryMeta' in action.meta ? action.meta.baseQueryMeta : undefined, assertTagType);\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AsyncThunkAction, SafePromise, SerializedError, ThunkAction, UnknownAction } from '@reduxjs/toolkit';\nimport type { Dispatch } from 'redux';\nimport { asSafePromise } from '../../tsHelpers';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport { isQueryDefinition, type EndpointDefinition, type EndpointDefinitions, type InfiniteQueryArgFrom, type InfiniteQueryDefinition, type MutationDefinition, type PageParamFrom, type QueryArgFrom, type QueryDefinition, type ResultTypeFrom } from '../endpointDefinitions';\nimport { countObjectKeys, getOrInsert, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQueryDirection, SubscriptionOptions } from './apiState';\nimport type { InfiniteQueryResultSelectorResult, QueryResultSelectorResult } from './buildSelectors';\nimport type { InfiniteQueryThunk, InfiniteQueryThunkArg, MutationThunk, QueryThunk, QueryThunkArg, ThunkApiMetaConfig } from './buildThunks';\nimport type { ApiEndpointQuery } from './module';\nexport type BuildInitiateApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  initiate: StartQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  initiate: StartInfiniteQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  initiate: StartMutationActionCreator<Definition>;\n};\nexport const forceQueryFnSymbol = Symbol('forceQueryFn');\nexport const isUpsertQuery = (arg: QueryThunkArg) => typeof arg[forceQueryFnSymbol] === 'function';\nexport type StartQueryActionCreatorOptions = {\n  subscribe?: boolean;\n  forceRefetch?: boolean | number;\n  subscriptionOptions?: SubscriptionOptions;\n  [forceQueryFnSymbol]?: () => QueryReturnValue;\n};\nexport type StartInfiniteQueryActionCreatorOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = StartQueryActionCreatorOptions & {\n  direction?: InfiniteQueryDirection;\n  param?: unknown;\n} & Partial<Pick<Partial<InfiniteQueryConfigOptions<ResultTypeFrom<D>, PageParamFrom<D>, InfiniteQueryArgFrom<D>>>, 'initialPageParam'>>;\ntype AnyQueryActionCreator<D extends EndpointDefinition<any, any, any, any>> = (arg: any, options?: StartQueryActionCreatorOptions) => ThunkAction<AnyActionCreatorResult, any, any, UnknownAction>;\ntype StartQueryActionCreator<D extends QueryDefinition<any, any, any, any, any>> = (arg: QueryArgFrom<D>, options?: StartQueryActionCreatorOptions) => ThunkAction<QueryActionCreatorResult<D>, any, any, UnknownAction>;\nexport type StartInfiniteQueryActionCreator<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D>, options?: StartInfiniteQueryActionCreatorOptions<D>) => ThunkAction<InfiniteQueryActionCreatorResult<D>, any, any, UnknownAction>;\ntype QueryActionCreatorFields = {\n  requestId: string;\n  subscriptionOptions: SubscriptionOptions | undefined;\n  abort(): void;\n  unsubscribe(): void;\n  updateSubscriptionOptions(options: SubscriptionOptions): void;\n  queryCacheKey: string;\n};\ntype AnyActionCreatorResult = SafePromise<any> & QueryActionCreatorFields & {\n  arg: any;\n  unwrap(): Promise<any>;\n  refetch(): AnyActionCreatorResult;\n};\nexport type QueryActionCreatorResult<D extends QueryDefinition<any, any, any, any>> = SafePromise<QueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: QueryArgFrom<D>;\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  refetch(): QueryActionCreatorResult<D>;\n};\nexport type InfiniteQueryActionCreatorResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SafePromise<InfiniteQueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: InfiniteQueryArgFrom<D>;\n  unwrap(): Promise<InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>>;\n  refetch(): InfiniteQueryActionCreatorResult<D>;\n};\ntype StartMutationActionCreator<D extends MutationDefinition<any, any, any, any>> = (arg: QueryArgFrom<D>, options?: {\n  /**\n   * If this mutation should be tracked in the store.\n   * If you just want to manually trigger this mutation using `dispatch` and don't care about the\n   * result, state & potential errors being held in store, you can set this to false.\n   * (defaults to `true`)\n   */\n  track?: boolean;\n  fixedCacheKey?: string;\n}) => ThunkAction<MutationActionCreatorResult<D>, any, any, UnknownAction>;\nexport type MutationActionCreatorResult<D extends MutationDefinition<any, any, any, any>> = SafePromise<{\n  data: ResultTypeFrom<D>;\n  error?: undefined;\n} | {\n  data?: undefined;\n  error: Exclude<BaseQueryError<D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQuery : never>, undefined> | SerializedError;\n}> & {\n  /** @internal */\n  arg: {\n    /**\n     * The name of the given endpoint for the mutation\n     */\n    endpointName: string;\n    /**\n     * The original arguments supplied to the mutation call\n     */\n    originalArgs: QueryArgFrom<D>;\n    /**\n     * Whether the mutation is being tracked in the store.\n     */\n    track?: boolean;\n    fixedCacheKey?: string;\n  };\n  /**\n   * A unique string generated for the request sequence\n   */\n  requestId: string;\n\n  /**\n   * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation\n   * that was fired off from reaching the server, but only to assist in handling the response.\n   *\n   * Calling `abort()` prior to the promise resolving will force it to reach the error state with\n   * the serialized error:\n   * `{ name: 'AbortError', message: 'Aborted' }`\n   *\n   * @example\n   * ```ts\n   * const [updateUser] = useUpdateUserMutation();\n   *\n   * useEffect(() => {\n   *   const promise = updateUser(id);\n   *   promise\n   *     .unwrap()\n   *     .catch((err) => {\n   *       if (err.name === 'AbortError') return;\n   *       // else handle the unexpected error\n   *     })\n   *\n   *   return () => {\n   *     promise.abort();\n   *   }\n   * }, [id, updateUser])\n   * ```\n   */\n  abort(): void;\n  /**\n   * Unwraps a mutation call to provide the raw response/error.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap\"\n   * addPost({ id: 1, name: 'Example' })\n   *   .unwrap()\n   *   .then((payload) => console.log('fulfilled', payload))\n   *   .catch((error) => console.error('rejected', error));\n   * ```\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  /**\n   * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.\n   The value returned by the hook will reset to `isUninitialized` afterwards.\n   */\n  reset(): void;\n};\nexport function buildInitiate({\n  serializeQueryArgs,\n  queryThunk,\n  infiniteQueryThunk,\n  mutationThunk,\n  api,\n  context\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  api: Api<any, EndpointDefinitions, any, any>;\n  context: ApiContext<EndpointDefinitions>;\n}) {\n  const runningQueries: Map<Dispatch, Record<string, QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any> | undefined>> = new Map();\n  const runningMutations: Map<Dispatch, Record<string, MutationActionCreatorResult<any> | undefined>> = new Map();\n  const {\n    unsubscribeQueryResult,\n    removeMutationResult,\n    updateSubscriptionOptions\n  } = api.internalActions;\n  return {\n    buildInitiateQuery,\n    buildInitiateInfiniteQuery,\n    buildInitiateMutation,\n    getRunningQueryThunk,\n    getRunningMutationThunk,\n    getRunningQueriesThunk,\n    getRunningMutationsThunk\n  };\n  function getRunningQueryThunk(endpointName: string, queryArgs: any) {\n    return (dispatch: Dispatch) => {\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      return runningQueries.get(dispatch)?.[queryCacheKey] as QueryActionCreatorResult<never> | InfiniteQueryActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningMutationThunk(\n  /**\n   * this is only here to allow TS to infer the result type by input value\n   * we could use it to validate the result, but it's probably not necessary\n   */\n  _endpointName: string, fixedCacheKeyOrRequestId: string) {\n    return (dispatch: Dispatch) => {\n      return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId] as MutationActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningQueriesThunk() {\n    return (dispatch: Dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function getRunningMutationsThunk() {\n    return (dispatch: Dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function middlewareWarning(dispatch: Dispatch) {\n    if (process.env.NODE_ENV !== 'production') {\n      if ((middlewareWarning as any).triggered) return;\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      (middlewareWarning as any).triggered = true;\n\n      // The RTKQ middleware should return the internal state object,\n      // but it should _not_ be the action object.\n      if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n        // Otherwise, must not have been added\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(34) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\nYou must add the middleware for RTK-Query to function correctly!`);\n      }\n    }\n  }\n  function buildInitiateAnyQuery<T extends 'query' | 'infiniteQuery'>(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any>) {\n    const queryAction: AnyQueryActionCreator<any> = (arg, {\n      subscribe = true,\n      forceRefetch,\n      subscriptionOptions,\n      [forceQueryFnSymbol]: forceQueryFn,\n      ...rest\n    } = {}) => (dispatch, getState) => {\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs: arg,\n        endpointDefinition,\n        endpointName\n      });\n      let thunk: AsyncThunkAction<unknown, QueryThunkArg, ThunkApiMetaConfig>;\n      const commonThunkArgs = {\n        ...rest,\n        type: 'query' as const,\n        subscribe,\n        forceRefetch: forceRefetch,\n        subscriptionOptions,\n        endpointName,\n        originalArgs: arg,\n        queryCacheKey,\n        [forceQueryFnSymbol]: forceQueryFn\n      };\n      if (isQueryDefinition(endpointDefinition)) {\n        thunk = queryThunk(commonThunkArgs);\n      } else {\n        const {\n          direction,\n          initialPageParam\n        } = rest as Pick<InfiniteQueryThunkArg<any>, 'direction' | 'initialPageParam'>;\n        thunk = infiniteQueryThunk({\n          ...(commonThunkArgs as InfiniteQueryThunkArg<any>),\n          // Supply these even if undefined. This helps with a field existence\n          // check over in `buildSlice.ts`\n          direction,\n          initialPageParam\n        });\n      }\n      const selector = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg);\n      const thunkResult = dispatch(thunk);\n      const stateAfter = selector(getState());\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort\n      } = thunkResult;\n      const skippedSynchronously = stateAfter.requestId !== requestId;\n      const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey];\n      const selectFromState = () => selector(getState());\n      const statePromise: AnyActionCreatorResult = Object.assign((forceQueryFn ?\n      // a query has been forced (upsertQueryData)\n      // -> we want to resolve it once data has been written with the data that will be written\n      thunkResult.then(selectFromState) : skippedSynchronously && !runningQuery ?\n      // a query has been skipped due to a condition and we do not have any currently running query\n      // -> we want to resolve it immediately with the current data\n      Promise.resolve(stateAfter) :\n      // query just started or one is already in flight\n      // -> wait for the running query, then resolve with data from after that\n      Promise.all([runningQuery, thunkResult]).then(selectFromState)) as SafePromise<any>, {\n        arg,\n        requestId,\n        subscriptionOptions,\n        queryCacheKey,\n        abort,\n        async unwrap() {\n          const result = await statePromise;\n          if (result.isError) {\n            throw result.error;\n          }\n          return result.data;\n        },\n        refetch: () => dispatch(queryAction(arg, {\n          subscribe: false,\n          forceRefetch: true\n        })),\n        unsubscribe() {\n          if (subscribe) dispatch(unsubscribeQueryResult({\n            queryCacheKey,\n            requestId\n          }));\n        },\n        updateSubscriptionOptions(options: SubscriptionOptions) {\n          statePromise.subscriptionOptions = options;\n          dispatch(updateSubscriptionOptions({\n            endpointName,\n            requestId,\n            queryCacheKey,\n            options\n          }));\n        }\n      });\n      if (!runningQuery && !skippedSynchronously && !forceQueryFn) {\n        const running = getOrInsert(runningQueries, dispatch, {});\n        running[queryCacheKey] = statePromise;\n        statePromise.then(() => {\n          delete running[queryCacheKey];\n          if (!countObjectKeys(running)) {\n            runningQueries.delete(dispatch);\n          }\n        });\n      }\n      return statePromise;\n    };\n    return queryAction;\n  }\n  function buildInitiateQuery(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    const queryAction: StartQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return queryAction;\n  }\n  function buildInitiateInfiniteQuery(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const infiniteQueryAction: StartInfiniteQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return infiniteQueryAction;\n  }\n  function buildInitiateMutation(endpointName: string): StartMutationActionCreator<any> {\n    return (arg, {\n      track = true,\n      fixedCacheKey\n    } = {}) => (dispatch, getState) => {\n      const thunk = mutationThunk({\n        type: 'mutation',\n        endpointName,\n        originalArgs: arg,\n        track,\n        fixedCacheKey\n      });\n      const thunkResult = dispatch(thunk);\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort,\n        unwrap\n      } = thunkResult;\n      const returnValuePromise = asSafePromise(thunkResult.unwrap().then(data => ({\n        data\n      })), error => ({\n        error\n      }));\n      const reset = () => {\n        dispatch(removeMutationResult({\n          requestId,\n          fixedCacheKey\n        }));\n      };\n      const ret = Object.assign(returnValuePromise, {\n        arg: thunkResult.arg,\n        requestId,\n        abort,\n        unwrap,\n        reset\n      });\n      const running = runningMutations.get(dispatch) || {};\n      runningMutations.set(dispatch, running);\n      running[requestId] = ret;\n      ret.then(() => {\n        delete running[requestId];\n        if (!countObjectKeys(running)) {\n          runningMutations.delete(dispatch);\n        }\n      });\n      if (fixedCacheKey) {\n        running[fixedCacheKey] = ret;\n        ret.then(() => {\n          if (running[fixedCacheKey] === ret) {\n            delete running[fixedCacheKey];\n            if (!countObjectKeys(running)) {\n              runningMutations.delete(dispatch);\n            }\n          }\n        });\n      }\n      return ret;\n    };\n  }\n}","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { SchemaError } from '@standard-schema/utils';\nexport class NamedSchemaError extends SchemaError {\n  constructor(issues: readonly StandardSchemaV1.Issue[], public readonly value: any, public readonly schemaName: string, public readonly _bqMeta: any) {\n    super(issues);\n  }\n}\nexport async function parseWithSchema<Schema extends StandardSchemaV1>(schema: Schema, data: unknown, schemaName: string, bqMeta: any): Promise<StandardSchemaV1.InferOutput<Schema>> {\n  const result = await schema['~standard'].validate(data);\n  if (result.issues) {\n    throw new NamedSchemaError(result.issues, data, schemaName, bqMeta);\n  }\n  return result.value;\n}","import type { PayloadAction } from '@reduxjs/toolkit';\nimport { combineReducers, createAction, createSlice, isAnyOf, isFulfilled, isRejectedWithValue, createNextState, prepareAutoBatched, SHOULD_AUTOBATCH, nanoid } from './rtkImports';\nimport type { QuerySubstateIdentifier, QuerySubState, MutationSubstateIdentifier, MutationSubState, MutationState, QueryState, InvalidationState, Subscribers, QueryCacheKey, SubscriptionState, ConfigState, InfiniteQuerySubState, InfiniteQueryDirection } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { AllQueryKeys, QueryArgFromAnyQueryDefinition, DataFromAnyQueryDefinition, InfiniteQueryThunk, MutationThunk, QueryThunk, QueryThunkArg } from './buildThunks';\nimport { calculateProvidedByThunk } from './buildThunks';\nimport { isInfiniteQueryDefinition, type AssertTagTypes, type EndpointDefinitions, type FullTagDescription, type QueryDefinition } from '../endpointDefinitions';\nimport type { Patch } from 'immer';\nimport { isDraft } from 'immer';\nimport { applyPatches, original } from 'immer';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\nimport { isDocumentVisible, isOnline, copyWithStructuralSharing } from '../utils';\nimport type { ApiContext } from '../apiTypes';\nimport { isUpsertQuery } from './buildInitiate';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { UnwrapPromise } from '../tsHelpers';\n\n/**\n * A typesafe single entry to be upserted into the cache\n */\nexport type NormalizedQueryUpsertEntry<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = {\n  endpointName: EndpointName;\n  arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>;\n  value: DataFromAnyQueryDefinition<Definitions, EndpointName>;\n};\n\n/**\n * The internal version that is not typesafe since we can't carry the generics through `createSlice`\n */\ntype NormalizedQueryUpsertEntryPayload = {\n  endpointName: string;\n  arg: unknown;\n  value: unknown;\n};\nexport type ProcessedQueryUpsertEntry = {\n  queryDescription: QueryThunkArg;\n  value: unknown;\n};\n\n/**\n * A typesafe representation of a util action creator that accepts cache entry descriptions to upsert\n */\nexport type UpsertEntries<Definitions extends EndpointDefinitions> = (<EndpointNames extends Array<AllQueryKeys<Definitions>>>(entries: [...{ [I in keyof EndpointNames]: NormalizedQueryUpsertEntry<Definitions, EndpointNames[I]> }]) => PayloadAction<NormalizedQueryUpsertEntryPayload[]>) & {\n  match: (action: unknown) => action is PayloadAction<NormalizedQueryUpsertEntryPayload[]>;\n};\nfunction updateQuerySubstateIfExists(state: QueryState<any>, queryCacheKey: QueryCacheKey, update: (substate: QuerySubState<any> | InfiniteQuerySubState<any>) => void) {\n  const substate = state[queryCacheKey];\n  if (substate) {\n    update(substate);\n  }\n}\nexport function getMutationCacheKey(id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n}): string | undefined;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n} | MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string | undefined {\n  return ('arg' in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId;\n}\nfunction updateMutationSubstateIfExists(state: MutationState<any>, id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}, update: (substate: MutationSubState<any>) => void) {\n  const substate = state[getMutationCacheKey(id)];\n  if (substate) {\n    update(substate);\n  }\n}\nconst initialState = {} as any;\nexport function buildSlice({\n  reducerPath,\n  queryThunk,\n  mutationThunk,\n  serializeQueryArgs,\n  context: {\n    endpointDefinitions: definitions,\n    apiUid,\n    extractRehydrationInfo,\n    hasRehydrationInfo\n  },\n  assertTagType,\n  config\n}: {\n  reducerPath: string;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  context: ApiContext<EndpointDefinitions>;\n  assertTagType: AssertTagTypes;\n  config: Omit<ConfigState<string>, 'online' | 'focused' | 'middlewareRegistered'>;\n}) {\n  const resetApiState = createAction(`${reducerPath}/resetApiState`);\n  function writePendingCacheEntry(draft: QueryState<any>, arg: QueryThunkArg, upserting: boolean, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n    // requestStatus: 'pending'\n  } & {\n    startedTimeStamp: number;\n  }) {\n    draft[arg.queryCacheKey] ??= {\n      status: QueryStatus.uninitialized,\n      endpointName: arg.endpointName\n    };\n    updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n      substate.status = QueryStatus.pending;\n      substate.requestId = upserting && substate.requestId ?\n      // for `upsertQuery` **updates**, keep the current `requestId`\n      substate.requestId :\n      // for normal queries or `upsertQuery` **inserts** always update the `requestId`\n      meta.requestId;\n      if (arg.originalArgs !== undefined) {\n        substate.originalArgs = arg.originalArgs;\n      }\n      substate.startedTimeStamp = meta.startedTimeStamp;\n      const endpointDefinition = definitions[meta.arg.endpointName];\n      if (isInfiniteQueryDefinition(endpointDefinition) && 'direction' in arg) {\n        ;\n        (substate as InfiniteQuerySubState<any>).direction = arg.direction as InfiniteQueryDirection;\n      }\n    });\n  }\n  function writeFulfilledCacheEntry(draft: QueryState<any>, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n  } & {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n  }, payload: unknown, upserting: boolean) {\n    updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, substate => {\n      if (substate.requestId !== meta.requestId && !upserting) return;\n      const {\n        merge\n      } = definitions[meta.arg.endpointName] as QueryDefinition<any, any, any, any>;\n      substate.status = QueryStatus.fulfilled;\n      if (merge) {\n        if (substate.data !== undefined) {\n          const {\n            fulfilledTimeStamp,\n            arg,\n            baseQueryMeta,\n            requestId\n          } = meta;\n          // There's existing cache data. Let the user merge it in themselves.\n          // We're already inside an Immer-powered reducer, and the user could just mutate `substate.data`\n          // themselves inside of `merge()`. But, they might also want to return a new value.\n          // Try to let Immer figure that part out, save the result, and assign it to `substate.data`.\n          let newData = createNextState(substate.data, draftSubstateData => {\n            // As usual with Immer, you can mutate _or_ return inside here, but not both\n            return merge(draftSubstateData, payload, {\n              arg: arg.originalArgs,\n              baseQueryMeta,\n              fulfilledTimeStamp,\n              requestId\n            });\n          });\n          substate.data = newData;\n        } else {\n          // Presumably a fresh request. Just cache the response data.\n          substate.data = payload;\n        }\n      } else {\n        // Assign or safely update the cache data.\n        substate.data = definitions[meta.arg.endpointName].structuralSharing ?? true ? copyWithStructuralSharing(isDraft(substate.data) ? original(substate.data) : substate.data, payload) : payload;\n      }\n      delete substate.error;\n      substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n    });\n  }\n  const querySlice = createSlice({\n    name: `${reducerPath}/queries`,\n    initialState: initialState as QueryState<any>,\n    reducers: {\n      removeQueryResult: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey\n          }\n        }: PayloadAction<QuerySubstateIdentifier>) {\n          delete draft[queryCacheKey];\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier>()\n      },\n      cacheEntriesUpserted: {\n        reducer(draft, action: PayloadAction<ProcessedQueryUpsertEntry[], string, {\n          RTK_autoBatch: boolean;\n          requestId: string;\n          timestamp: number;\n        }>) {\n          for (const entry of action.payload) {\n            const {\n              queryDescription: arg,\n              value\n            } = entry;\n            writePendingCacheEntry(draft, arg, true, {\n              arg,\n              requestId: action.meta.requestId,\n              startedTimeStamp: action.meta.timestamp\n            });\n            writeFulfilledCacheEntry(draft, {\n              arg,\n              requestId: action.meta.requestId,\n              fulfilledTimeStamp: action.meta.timestamp,\n              baseQueryMeta: {}\n            }, value,\n            // We know we're upserting here\n            true);\n          }\n        },\n        prepare: (payload: NormalizedQueryUpsertEntryPayload[]) => {\n          const queryDescriptions: ProcessedQueryUpsertEntry[] = payload.map(entry => {\n            const {\n              endpointName,\n              arg,\n              value\n            } = entry;\n            const endpointDefinition = definitions[endpointName];\n            const queryDescription: QueryThunkArg = {\n              type: 'query',\n              endpointName: endpointName,\n              originalArgs: entry.arg,\n              queryCacheKey: serializeQueryArgs({\n                queryArgs: arg,\n                endpointDefinition,\n                endpointName\n              })\n            };\n            return {\n              queryDescription,\n              value\n            };\n          });\n          const result = {\n            payload: queryDescriptions,\n            meta: {\n              [SHOULD_AUTOBATCH]: true,\n              requestId: nanoid(),\n              timestamp: Date.now()\n            }\n          };\n          return result;\n        }\n      },\n      queryResultPatched: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey,\n            patches\n          }\n        }: PayloadAction<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>) {\n          updateQuerySubstateIfExists(draft, queryCacheKey, substate => {\n            substate.data = applyPatches(substate.data as any, patches.concat());\n          });\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(queryThunk.pending, (draft, {\n        meta,\n        meta: {\n          arg\n        }\n      }) => {\n        const upserting = isUpsertQuery(arg);\n        writePendingCacheEntry(draft, arg, upserting, meta);\n      }).addCase(queryThunk.fulfilled, (draft, {\n        meta,\n        payload\n      }) => {\n        const upserting = isUpsertQuery(meta.arg);\n        writeFulfilledCacheEntry(draft, meta, payload, upserting);\n      }).addCase(queryThunk.rejected, (draft, {\n        meta: {\n          condition,\n          arg,\n          requestId\n        },\n        error,\n        payload\n      }) => {\n        updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n          if (condition) {\n            // request was aborted due to condition (another query already running)\n          } else {\n            // request failed\n            if (substate.requestId !== requestId) return;\n            substate.status = QueryStatus.rejected;\n            substate.error = (payload ?? error) as any;\n          }\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          queries\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(queries)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  const mutationSlice = createSlice({\n    name: `${reducerPath}/mutations`,\n    initialState: initialState as MutationState<any>,\n    reducers: {\n      removeMutationResult: {\n        reducer(draft, {\n          payload\n        }: PayloadAction<MutationSubstateIdentifier>) {\n          const cacheKey = getMutationCacheKey(payload);\n          if (cacheKey in draft) {\n            delete draft[cacheKey];\n          }\n        },\n        prepare: prepareAutoBatched<MutationSubstateIdentifier>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(mutationThunk.pending, (draft, {\n        meta,\n        meta: {\n          requestId,\n          arg,\n          startedTimeStamp\n        }\n      }) => {\n        if (!arg.track) return;\n        draft[getMutationCacheKey(meta)] = {\n          requestId,\n          status: QueryStatus.pending,\n          endpointName: arg.endpointName,\n          startedTimeStamp\n        };\n      }).addCase(mutationThunk.fulfilled, (draft, {\n        payload,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.fulfilled;\n          substate.data = payload;\n          substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n        });\n      }).addCase(mutationThunk.rejected, (draft, {\n        payload,\n        error,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.rejected;\n          substate.error = (payload ?? error) as any;\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          mutations\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(mutations)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          (entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) &&\n          // only rehydrate endpoints that were persisted using a `fixedCacheKey`\n          key !== entry?.requestId) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  type CalculateProvidedByAction = UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>;\n  const initialInvalidationState: InvalidationState<string> = {\n    tags: {},\n    keys: {}\n  };\n  const invalidationSlice = createSlice({\n    name: `${reducerPath}/invalidation`,\n    initialState: initialInvalidationState,\n    reducers: {\n      updateProvidedBy: {\n        reducer(draft, action: PayloadAction<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>) {\n          for (const {\n            queryCacheKey,\n            providedTags\n          } of action.payload) {\n            removeCacheKeyFromTags(draft, queryCacheKey);\n            for (const {\n              type,\n              id\n            } of providedTags) {\n              const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n\n            // Remove readonly from the providedTags array\n            draft.keys[queryCacheKey] = providedTags as FullTagDescription<string>[];\n          }\n        },\n        prepare: prepareAutoBatched<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(querySlice.actions.removeQueryResult, (draft, {\n        payload: {\n          queryCacheKey\n        }\n      }) => {\n        removeCacheKeyFromTags(draft, queryCacheKey);\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          provided\n        } = extractRehydrationInfo(action)!;\n        for (const [type, incomingTags] of Object.entries(provided)) {\n          for (const [id, cacheKeys] of Object.entries(incomingTags)) {\n            const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n            for (const queryCacheKey of cacheKeys) {\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n          }\n        }\n      }).addMatcher(isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)), (draft, action) => {\n        writeProvidedTagsForQueries(draft, [action]);\n      }).addMatcher(querySlice.actions.cacheEntriesUpserted.match, (draft, action) => {\n        const mockActions: CalculateProvidedByAction[] = action.payload.map(({\n          queryDescription,\n          value\n        }) => {\n          return {\n            type: 'UNKNOWN',\n            payload: value,\n            meta: {\n              requestStatus: 'fulfilled',\n              requestId: 'UNKNOWN',\n              arg: queryDescription\n            }\n          };\n        });\n        writeProvidedTagsForQueries(draft, mockActions);\n      });\n    }\n  });\n  function removeCacheKeyFromTags(draft: InvalidationState<any>, queryCacheKey: QueryCacheKey) {\n    const existingTags = draft.keys[queryCacheKey] ?? [];\n\n    // Delete this cache key from any existing tags that may have provided it\n    for (const tag of existingTags) {\n      const tagType = tag.type;\n      const tagId = tag.id ?? '__internal_without_id';\n      const tagSubscriptions = draft.tags[tagType]?.[tagId];\n      if (tagSubscriptions) {\n        draft.tags[tagType][tagId] = tagSubscriptions.filter(qc => qc !== queryCacheKey);\n      }\n    }\n    delete draft.keys[queryCacheKey];\n  }\n  function writeProvidedTagsForQueries(draft: InvalidationState<string>, actions: CalculateProvidedByAction[]) {\n    const providedByEntries = actions.map(action => {\n      const providedTags = calculateProvidedByThunk(action, 'providesTags', definitions, assertTagType);\n      const {\n        queryCacheKey\n      } = action.meta.arg;\n      return {\n        queryCacheKey,\n        providedTags\n      };\n    });\n    invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy(providedByEntries));\n  }\n\n  // Dummy slice to generate actions\n  const subscriptionSlice = createSlice({\n    name: `${reducerPath}/subscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      updateSubscriptionOptions(d, a: PayloadAction<{\n        endpointName: string;\n        requestId: string;\n        options: Subscribers[number];\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      unsubscribeQueryResult(d, a: PayloadAction<{\n        requestId: string;\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      internal_getRTKQSubscriptions() {}\n    }\n  });\n  const internalSubscriptionsSlice = createSlice({\n    name: `${reducerPath}/internalSubscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      subscriptionsUpdated: {\n        reducer(state, action: PayloadAction<Patch[]>) {\n          return applyPatches(state, action.payload);\n        },\n        prepare: prepareAutoBatched<Patch[]>()\n      }\n    }\n  });\n  const configSlice = createSlice({\n    name: `${reducerPath}/config`,\n    initialState: {\n      online: isOnline(),\n      focused: isDocumentVisible(),\n      middlewareRegistered: false,\n      ...config\n    } as ConfigState<string>,\n    reducers: {\n      middlewareRegistered(state, {\n        payload\n      }: PayloadAction<string>) {\n        state.middlewareRegistered = state.middlewareRegistered === 'conflict' || apiUid !== payload ? 'conflict' : true;\n      }\n    },\n    extraReducers: builder => {\n      builder.addCase(onOnline, state => {\n        state.online = true;\n      }).addCase(onOffline, state => {\n        state.online = false;\n      }).addCase(onFocus, state => {\n        state.focused = true;\n      }).addCase(onFocusLost, state => {\n        state.focused = false;\n      })\n      // update the state to be a new object to be picked up as a \"state change\"\n      // by redux-persist's `autoMergeLevel2`\n      .addMatcher(hasRehydrationInfo, draft => ({\n        ...draft\n      }));\n    }\n  });\n  const combinedReducer = combineReducers({\n    queries: querySlice.reducer,\n    mutations: mutationSlice.reducer,\n    provided: invalidationSlice.reducer,\n    subscriptions: internalSubscriptionsSlice.reducer,\n    config: configSlice.reducer\n  });\n  const reducer: typeof combinedReducer = (state, action) => combinedReducer(resetApiState.match(action) ? undefined : state, action);\n  const actions = {\n    ...configSlice.actions,\n    ...querySlice.actions,\n    ...subscriptionSlice.actions,\n    ...internalSubscriptionsSlice.actions,\n    ...mutationSlice.actions,\n    ...invalidationSlice.actions,\n    resetApiState\n  };\n  return {\n    reducer,\n    actions\n  };\n}\nexport type SliceActions = ReturnType<typeof buildSlice>['actions'];","import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, ReducerPathFrom, TagDescription, TagTypesFrom } from '../endpointDefinitions';\nimport { expandTagDescription } from '../endpointDefinitions';\nimport { flatten, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationSubState, QueryCacheKey, QueryKeys, QueryState, QuerySubState, RequestStatusFlags, RootState as _RootState } from './apiState';\nimport { QueryStatus, getRequestStatusFlags } from './apiState';\nimport { getMutationCacheKey } from './buildSlice';\nimport type { createSelector as _createSelector } from './rtkImports';\nimport { createNextState } from './rtkImports';\nimport { type AllQueryKeys, getNextPageParam, getPreviousPageParam } from './buildThunks';\nexport type SkipToken = typeof skipToken;\n/**\n * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`\n * instead of the query argument to get the same effect as if setting\n * `skip: true` in the query options.\n *\n * Useful for scenarios where a query should be skipped when `arg` is `undefined`\n * and TypeScript complains about it because `arg` is not allowed to be passed\n * in as `undefined`, such as\n *\n * ```ts\n * // codeblock-meta title=\"will error if the query argument is not allowed to be undefined\" no-transpile\n * useSomeQuery(arg, { skip: !!arg })\n * ```\n *\n * ```ts\n * // codeblock-meta title=\"using skipToken instead\" no-transpile\n * useSomeQuery(arg ?? skipToken)\n * ```\n *\n * If passed directly into a query or mutation selector, that selector will always\n * return an uninitialized state.\n */\nexport const skipToken = /* @__PURE__ */Symbol.for('RTKQ/skipToken');\nexport type BuildSelectorsApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: QueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: InfiniteQueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: MutationResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\ntype QueryResultSelectorFactory<Definition extends QueryDefinition<any, any, any, any>, RootState> = (queryArg: QueryArgFrom<Definition> | SkipToken) => (state: RootState) => QueryResultSelectorResult<Definition>;\nexport type QueryResultSelectorResult<Definition extends QueryDefinition<any, any, any, any>> = QuerySubState<Definition> & RequestStatusFlags;\ntype InfiniteQueryResultSelectorFactory<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, RootState> = (queryArg: InfiniteQueryArgFrom<Definition> | SkipToken) => (state: RootState) => InfiniteQueryResultSelectorResult<Definition>;\nexport type InfiniteQueryResultFlags = {\n  hasNextPage: boolean;\n  hasPreviousPage: boolean;\n  isFetchingNextPage: boolean;\n  isFetchingPreviousPage: boolean;\n  isFetchNextPageError: boolean;\n  isFetchPreviousPageError: boolean;\n};\nexport type InfiniteQueryResultSelectorResult<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<Definition> & RequestStatusFlags & InfiniteQueryResultFlags;\ntype MutationResultSelectorFactory<Definition extends MutationDefinition<any, any, any, any>, RootState> = (requestId: string | {\n  requestId: string | undefined;\n  fixedCacheKey: string | undefined;\n} | SkipToken) => (state: RootState) => MutationResultSelectorResult<Definition>;\nexport type MutationResultSelectorResult<Definition extends MutationDefinition<any, any, any, any>> = MutationSubState<Definition> & RequestStatusFlags;\nconst initialSubState: QuerySubState<any> = {\n  status: QueryStatus.uninitialized as const\n};\n\n// abuse immer to freeze default states\nconst defaultQuerySubState = /* @__PURE__ */createNextState(initialSubState, () => {});\nconst defaultMutationSubState = /* @__PURE__ */createNextState(initialSubState as MutationSubState<any>, () => {});\nexport type AllSelectors = ReturnType<typeof buildSelectors>;\nexport function buildSelectors<Definitions extends EndpointDefinitions, ReducerPath extends string>({\n  serializeQueryArgs,\n  reducerPath,\n  createSelector\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  reducerPath: ReducerPath;\n  createSelector: typeof _createSelector;\n}) {\n  type RootState = _RootState<Definitions, string, string>;\n  const selectSkippedQuery = (state: RootState) => defaultQuerySubState;\n  const selectSkippedMutation = (state: RootState) => defaultMutationSubState;\n  return {\n    buildQuerySelector,\n    buildInfiniteQuerySelector,\n    buildMutationSelector,\n    selectInvalidatedBy,\n    selectCachedArgsForQuery,\n    selectApiState,\n    selectQueries,\n    selectMutations,\n    selectQueryEntry,\n    selectConfig\n  };\n  function withRequestFlags<T extends {\n    status: QueryStatus;\n  }>(substate: T): T & RequestStatusFlags {\n    return {\n      ...substate,\n      ...getRequestStatusFlags(substate.status)\n    };\n  }\n  function selectApiState(rootState: RootState) {\n    const state = rootState[reducerPath];\n    if (process.env.NODE_ENV !== 'production') {\n      if (!state) {\n        if ((selectApiState as any).triggered) return state;\n        (selectApiState as any).triggered = true;\n        console.error(`Error: No data found at \\`state.${reducerPath}\\`. Did you forget to add the reducer to the store?`);\n      }\n    }\n    return state;\n  }\n  function selectQueries(rootState: RootState) {\n    return selectApiState(rootState)?.queries;\n  }\n  function selectQueryEntry(rootState: RootState, cacheKey: QueryCacheKey) {\n    return selectQueries(rootState)?.[cacheKey];\n  }\n  function selectMutations(rootState: RootState) {\n    return selectApiState(rootState)?.mutations;\n  }\n  function selectConfig(rootState: RootState) {\n    return selectApiState(rootState)?.config;\n  }\n  function buildAnyQuerySelector(endpointName: string, endpointDefinition: EndpointDefinition<any, any, any, any>, combiner: <T extends {\n    status: QueryStatus;\n  }>(substate: T) => T & RequestStatusFlags) {\n    return (queryArgs: any) => {\n      // Avoid calling serializeQueryArgs if the arg is skipToken\n      if (queryArgs === skipToken) {\n        return createSelector(selectSkippedQuery, combiner);\n      }\n      const serializedArgs = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      const selectQuerySubstate = (state: RootState) => selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState;\n      return createSelector(selectQuerySubstate, combiner);\n    };\n  }\n  function buildQuerySelector(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags) as QueryResultSelectorFactory<any, RootState>;\n  }\n  function buildInfiniteQuerySelector(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const {\n      infiniteQueryOptions\n    } = endpointDefinition;\n    function withInfiniteQueryResultFlags<T extends {\n      status: QueryStatus;\n    }>(substate: T): T & RequestStatusFlags & InfiniteQueryResultFlags {\n      const stateWithRequestFlags = {\n        ...(substate as InfiniteQuerySubState<any>),\n        ...getRequestStatusFlags(substate.status)\n      };\n      const {\n        isLoading,\n        isError,\n        direction\n      } = stateWithRequestFlags;\n      const isForward = direction === 'forward';\n      const isBackward = direction === 'backward';\n      return {\n        ...stateWithRequestFlags,\n        hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        isFetchingNextPage: isLoading && isForward,\n        isFetchingPreviousPage: isLoading && isBackward,\n        isFetchNextPageError: isError && isForward,\n        isFetchPreviousPageError: isError && isBackward\n      };\n    }\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags) as unknown as InfiniteQueryResultSelectorFactory<any, RootState>;\n  }\n  function buildMutationSelector() {\n    return (id => {\n      let mutationId: string | typeof skipToken;\n      if (typeof id === 'object') {\n        mutationId = getMutationCacheKey(id) ?? skipToken;\n      } else {\n        mutationId = id;\n      }\n      const selectMutationSubstate = (state: RootState) => selectApiState(state)?.mutations?.[mutationId as string] ?? defaultMutationSubState;\n      const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;\n      return createSelector(finalSelectMutationSubstate, withRequestFlags);\n    }) as MutationResultSelectorFactory<any, RootState>;\n  }\n  function selectInvalidatedBy(state: RootState, tags: ReadonlyArray<TagDescription<string> | null | undefined>): Array<{\n    endpointName: string;\n    originalArgs: any;\n    queryCacheKey: QueryCacheKey;\n  }> {\n    const apiState = state[reducerPath];\n    const toInvalidate = new Set<QueryCacheKey>();\n    for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {\n      const provided = apiState.provided.tags[tag.type];\n      if (!provided) {\n        continue;\n      }\n      let invalidateSubscriptions = (tag.id !== undefined ?\n      // id given: invalidate all queries that provide this type & id\n      provided[tag.id] :\n      // no id: invalidate all queries that provide this type\n      flatten(Object.values(provided))) ?? [];\n      for (const invalidate of invalidateSubscriptions) {\n        toInvalidate.add(invalidate);\n      }\n    }\n    return flatten(Array.from(toInvalidate.values()).map(queryCacheKey => {\n      const querySubState = apiState.queries[queryCacheKey];\n      return querySubState ? [{\n        queryCacheKey,\n        endpointName: querySubState.endpointName!,\n        originalArgs: querySubState.originalArgs\n      }] : [];\n    }));\n  }\n  function selectCachedArgsForQuery<QueryName extends AllQueryKeys<Definitions>>(state: RootState, queryName: QueryName): Array<QueryArgFromAnyQuery<Definitions[QueryName]>> {\n    return Object.values(selectQueries(state) as QueryState<any>).filter((entry): entry is Exclude<QuerySubState<Definitions[QueryName]>, {\n      status: QueryStatus.uninitialized;\n    }> => entry?.endpointName === queryName && entry.status !== QueryStatus.uninitialized).map(entry => entry.originalArgs);\n  }\n  function getHasNextPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data) return false;\n    return getNextPageParam(options, data, queryArg) != null;\n  }\n  function getHasPreviousPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data || !options.getPreviousPageParam) return false;\n    return getPreviousPageParam(options, data, queryArg) != null;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Api, ApiContext, Module, ModuleName } from './apiTypes';\nimport type { CombinedState } from './core/apiState';\nimport type { BaseQueryArg, BaseQueryFn } from './baseQueryTypes';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { EndpointBuilder, EndpointDefinitions, SchemaFailureConverter, SchemaFailureHandler } from './endpointDefinitions';\nimport { DefinitionType, isInfiniteQueryDefinition, isQueryDefinition } from './endpointDefinitions';\nimport { nanoid } from './core/rtkImports';\nimport type { UnknownAction } from '@reduxjs/toolkit';\nimport type { NoInfer } from './tsHelpers';\nimport { weakMapMemoize } from 'reselect';\nexport interface CreateApiOptions<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never> {\n  /**\n   * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   // highlight-start\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  baseQuery: BaseQuery;\n  /**\n   * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   tagTypes: ['Post', 'User'],\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  tagTypes?: readonly TagTypes[];\n  /**\n   * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"apis.js\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';\n   *\n   * const apiOne = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiOne',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   *\n   * const apiTwo = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiTwo',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   * ```\n   */\n  reducerPath?: ReducerPath;\n  /**\n   * Accepts a custom function if you have a need to change the creation of cache keys for any reason.\n   */\n  serializeQueryArgs?: SerializeQueryArgs<unknown>;\n  /**\n   * Endpoints are a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are three endpoint types: [`query`](../../rtk-query/usage/queries), [`infiniteQuery`](../../rtk-query/usage/infinite-queries) and [`mutation`](../../rtk-query/usage/mutations).\n   */\n  endpoints(build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>): Definitions;\n  /**\n   * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   *\n   * ```ts\n   * // codeblock-meta title=\"keepUnusedDataFor example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       keepUnusedDataFor: 5\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  keepUnusedDataFor?: number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `'delayed'`. This setting allows you to control when tags are invalidated after a mutation.\n   *\n   * - `'immediately'`: Queries are invalidated instantly after the mutation finished, even if they are running.\n   *   If the query provides tags that were invalidated while it ran, it won't be re-fetched.\n   * - `'delayed'`: Invalidation only happens after all queries and mutations are settled.\n   *   This ensures that queries are always invalidated correctly and automatically \"batches\" invalidations of concurrent mutations.\n   *   Note that if you constantly have some queries (or mutations) running, this can delay tag invalidations indefinitely.\n   */\n  invalidationBehavior?: 'delayed' | 'immediately';\n  /**\n   * A function that is passed every dispatched action. If this returns something other than `undefined`,\n   * that return value will be used to rehydrate fulfilled & errored queries.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"next-redux-wrapper rehydration example\"\n   * import type { Action, PayloadAction } from '@reduxjs/toolkit'\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import { HYDRATE } from 'next-redux-wrapper'\n   *\n   * type RootState = any; // normally inferred from state\n   *\n   * function isHydrateAction(action: Action): action is PayloadAction<RootState> {\n   *   return action.type === HYDRATE\n   * }\n   *\n   * export const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   extractRehydrationInfo(action, { reducerPath }): any {\n   *     if (isHydrateAction(action)) {\n   *       return action.payload[reducerPath]\n   *     }\n   *   },\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // omitted\n   *   }),\n   * })\n   * ```\n   */\n  extractRehydrationInfo?: (action: UnknownAction, {\n    reducerPath\n  }: {\n    reducerPath: ReducerPath;\n  }) => undefined | CombinedState<NoInfer<Definitions>, NoInfer<TagTypes>, NoInfer<ReducerPath>>;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *     }),\n   *   }),\n   *   onSchemaFailure: (error, info) => {\n   *     console.error(error, info)\n   *   },\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   }),\n   *   catchSchemaFailure: (error, info) => ({\n   *     status: \"CUSTOM_ERROR\",\n   *     error: error.schemaName + \" failed validation\",\n   *     data: error.issues,\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for all endpoints, unless overridden by the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type CreateApi<Modules extends ModuleName> = {\n  /**\n   * Creates a service to use in your application. Contains only the basic redux logic (the core module).\n   *\n   * @link https://redux-toolkit.js.org/rtk-query/api/createApi\n   */\n  <BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never>(options: CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>): Api<BaseQuery, Definitions, ReducerPath, TagTypes, Modules>;\n};\n\n/**\n * Builds a `createApi` method based on the provided `modules`.\n *\n * @link https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api\n *\n * @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints\n * @returns A `createApi` method using the provided `modules`.\n */\nexport function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(...modules: Modules): CreateApi<Modules[number]['name']> {\n  return function baseCreateApi(options) {\n    const extractRehydrationInfo = weakMapMemoize((action: UnknownAction) => options.extractRehydrationInfo?.(action, {\n      reducerPath: (options.reducerPath ?? 'api') as any\n    }));\n    const optionsWithDefaults: CreateApiOptions<any, any, any, any> = {\n      reducerPath: 'api',\n      keepUnusedDataFor: 60,\n      refetchOnMountOrArgChange: false,\n      refetchOnFocus: false,\n      refetchOnReconnect: false,\n      invalidationBehavior: 'delayed',\n      ...options,\n      extractRehydrationInfo,\n      serializeQueryArgs(queryArgsApi) {\n        let finalSerializeQueryArgs = defaultSerializeQueryArgs;\n        if ('serializeQueryArgs' in queryArgsApi.endpointDefinition) {\n          const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs!;\n          finalSerializeQueryArgs = queryArgsApi => {\n            const initialResult = endpointSQA(queryArgsApi);\n            if (typeof initialResult === 'string') {\n              // If the user function returned a string, use it as-is\n              return initialResult;\n            } else {\n              // Assume they returned an object (such as a subset of the original\n              // query args) or a primitive, and serialize it ourselves\n              return defaultSerializeQueryArgs({\n                ...queryArgsApi,\n                queryArgs: initialResult\n              });\n            }\n          };\n        } else if (options.serializeQueryArgs) {\n          finalSerializeQueryArgs = options.serializeQueryArgs;\n        }\n        return finalSerializeQueryArgs(queryArgsApi);\n      },\n      tagTypes: [...(options.tagTypes || [])]\n    };\n    const context: ApiContext<EndpointDefinitions> = {\n      endpointDefinitions: {},\n      batch(fn) {\n        // placeholder \"batch\" method to be overridden by plugins, for example with React.unstable_batchedUpdate\n        fn();\n      },\n      apiUid: nanoid(),\n      extractRehydrationInfo,\n      hasRehydrationInfo: weakMapMemoize(action => extractRehydrationInfo(action) != null)\n    };\n    const api = {\n      injectEndpoints,\n      enhanceEndpoints({\n        addTagTypes,\n        endpoints\n      }) {\n        if (addTagTypes) {\n          for (const eT of addTagTypes) {\n            if (!optionsWithDefaults.tagTypes!.includes(eT as any)) {\n              ;\n              (optionsWithDefaults.tagTypes as any[]).push(eT);\n            }\n          }\n        }\n        if (endpoints) {\n          for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {\n            if (typeof partialDefinition === 'function') {\n              partialDefinition(context.endpointDefinitions[endpointName]);\n            } else {\n              Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);\n            }\n          }\n        }\n        return api;\n      }\n    } as Api<BaseQueryFn, {}, string, string, Modules[number]['name']>;\n    const initializedModules = modules.map(m => m.init(api as any, optionsWithDefaults as any, context));\n    function injectEndpoints(inject: Parameters<typeof api.injectEndpoints>[0]) {\n      const evaluatedEndpoints = inject.endpoints({\n        query: x => ({\n          ...x,\n          type: DefinitionType.query\n        }) as any,\n        mutation: x => ({\n          ...x,\n          type: DefinitionType.mutation\n        }) as any,\n        infiniteQuery: x => ({\n          ...x,\n          type: DefinitionType.infinitequery\n        }) as any\n      });\n      for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {\n        if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {\n          if (inject.overrideExisting === 'throw') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(39) : `called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          } else if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n            console.error(`called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          }\n          continue;\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          if (isInfiniteQueryDefinition(definition)) {\n            const {\n              infiniteQueryOptions\n            } = definition;\n            const {\n              maxPages,\n              getPreviousPageParam\n            } = infiniteQueryOptions;\n            if (typeof maxPages === 'number') {\n              if (maxPages < 1) {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(40) : `maxPages for endpoint '${endpointName}' must be a number greater than 0`);\n              }\n              if (typeof getPreviousPageParam !== 'function') {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(41) : `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`);\n              }\n            }\n          }\n        }\n        context.endpointDefinitions[endpointName] = definition;\n        for (const m of initializedModules) {\n          m.injectEndpoint(endpointName, definition);\n        }\n      }\n      return api as any;\n    }\n    return api.injectEndpoints({\n      endpoints: options.endpoints as any\n    });\n  };\n}","import type { QueryCacheKey } from './core/apiState';\nimport type { EndpointDefinition } from './endpointDefinitions';\nimport { isPlainObject } from './core/rtkImports';\nconst cache: WeakMap<any, string> | undefined = WeakMap ? new WeakMap() : undefined;\nexport const defaultSerializeQueryArgs: SerializeQueryArgs<any> = ({\n  endpointName,\n  queryArgs\n}) => {\n  let serialized = '';\n  const cached = cache?.get(queryArgs);\n  if (typeof cached === 'string') {\n    serialized = cached;\n  } else {\n    const stringified = JSON.stringify(queryArgs, (key, value) => {\n      // Handle bigints\n      value = typeof value === 'bigint' ? {\n        $bigint: value.toString()\n      } : value;\n      // Sort the object keys before stringifying, to prevent useQuery({ a: 1, b: 2 }) having a different cache key than useQuery({ b: 2, a: 1 })\n      value = isPlainObject(value) ? Object.keys(value).sort().reduce<any>((acc, key) => {\n        acc[key] = (value as any)[key];\n        return acc;\n      }, {}) : value;\n      return value;\n    });\n    if (isPlainObject(queryArgs)) {\n      cache?.set(queryArgs, stringified);\n    }\n    serialized = stringified;\n  }\n  return `${endpointName}(${serialized})`;\n};\nexport type SerializeQueryArgs<QueryArgs, ReturnType = string> = (_: {\n  queryArgs: QueryArgs;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => ReturnType;\nexport type InternalSerializeQueryArgs = (_: {\n  queryArgs: any;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => QueryCacheKey;","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { BaseQueryFn } from './baseQueryTypes';\nexport const _NEVER = /* @__PURE__ */Symbol();\nexport type NEVER = typeof _NEVER;\n\n/**\n * Creates a \"fake\" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.\n * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.\n */\nexport function fakeBaseQuery<ErrorType>(): BaseQueryFn<void, NEVER, ErrorType, {}> {\n  return function () {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(33) : 'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.');\n  };\n}","/**\n * Note: this file should import all other files for type discovery and declaration merging\n */\nimport type { ActionCreatorWithPayload, Middleware, Reducer, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport { enablePatches } from 'immer';\nimport type { Api, Module } from '../apiTypes';\nimport type { BaseQueryFn } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinitions, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, TagDescription } from '../endpointDefinitions';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { assertCast, safeAssign } from '../tsHelpers';\nimport type { CombinedState, MutationKeys, QueryKeys, RootState } from './apiState';\nimport type { BuildInitiateApiEndpointMutation, BuildInitiateApiEndpointQuery, MutationActionCreatorResult, QueryActionCreatorResult, InfiniteQueryActionCreatorResult, BuildInitiateApiEndpointInfiniteQuery } from './buildInitiate';\nimport { buildInitiate } from './buildInitiate';\nimport type { ReferenceCacheCollection, ReferenceCacheLifecycle, ReferenceQueryLifecycle } from './buildMiddleware';\nimport { buildMiddleware } from './buildMiddleware';\nimport type { BuildSelectorsApiEndpointInfiniteQuery, BuildSelectorsApiEndpointMutation, BuildSelectorsApiEndpointQuery } from './buildSelectors';\nimport { buildSelectors } from './buildSelectors';\nimport type { SliceActions, UpsertEntries } from './buildSlice';\nimport { buildSlice } from './buildSlice';\nimport type { AllQueryKeys, BuildThunksApiEndpointInfiniteQuery, BuildThunksApiEndpointMutation, BuildThunksApiEndpointQuery, PatchQueryDataThunk, QueryArgFromAnyQueryDefinition, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nimport { buildThunks } from './buildThunks';\nimport { createSelector as _createSelector } from './rtkImports';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\n\n/**\n * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_\n * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value\n *\n * @overloadSummary\n * `force`\n * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.\n */\nexport type PrefetchOptions = {\n  ifOlderThan?: false | number;\n} | {\n  force?: boolean;\n};\nexport const coreModuleName = /* @__PURE__ */Symbol();\nexport type CoreModule = typeof coreModuleName | ReferenceCacheLifecycle | ReferenceQueryLifecycle | ReferenceCacheCollection;\nexport type ThunkWithReturnValue<T> = ThunkAction<T, any, any, UnknownAction>;\nexport interface ApiModules<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nBaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {\n  [coreModuleName]: {\n    /**\n     * This api's reducer should be mounted at `store[api.reducerPath]`.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducerPath: ReducerPath;\n    /**\n     * Internal actions not part of the public API. Note: These are subject to change at any given time.\n     */\n    internalActions: InternalActions;\n    /**\n     *  A standard redux reducer that enables core functionality. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducer: Reducer<CombinedState<Definitions, TagTypes, ReducerPath>, UnknownAction>;\n    /**\n     * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>>;\n    /**\n     * A collection of utility thunks for various situations.\n     */\n    util: {\n      /**\n       * A thunk that (if dispatched) will return a specific running query, identified\n       * by `endpointName` and `arg`.\n       * If that query is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific query triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueryThunk<EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>): ThunkWithReturnValue<QueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'query';\n      }> | InfiniteQueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'infinitequery';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return a specific running mutation, identified\n       * by `endpointName` and `fixedCacheKey` or `requestId`.\n       * If that mutation is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific mutation triggered in any way,\n       * including via hook trigger functions or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationThunk<EndpointName extends MutationKeys<Definitions>>(endpointName: EndpointName, fixedCacheKeyOrRequestId: string): ThunkWithReturnValue<MutationActionCreatorResult<Definitions[EndpointName] & {\n        type: 'mutation';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return all running queries.\n       *\n       * Useful for SSR scenarios to await all running queries triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueriesThunk(): ThunkWithReturnValue<Array<QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>>;\n\n      /**\n       * A thunk that (if dispatched) will return all running mutations.\n       *\n       * Useful for SSR scenarios to await all running mutations triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationsThunk(): ThunkWithReturnValue<Array<MutationActionCreatorResult<any>>>;\n\n      /**\n       * A Redux thunk that can be used to manually trigger pre-fetching of data.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.\n       *\n       * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.\n       *\n       * @example\n       *\n       * ```ts no-transpile\n       * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))\n       * ```\n       */\n      prefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction>;\n      /**\n       * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and an `updateRecipe` callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.\n       *\n       * The thunk executes _synchronously_, and returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).\n       *\n       * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, arg, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.\n       *\n       * Note that the first two arguments (`endpointName` and `arg`) are used to determine which existing cache entry to update. If no existing cache entry is found, the `updateRecipe` callback will not run.\n       *\n       * @example\n       *\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       * ```\n       */\n      updateQueryData: UpdateQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux thunk action creator that, when dispatched, acts as an artificial API request to upsert a value into the cache.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and the data to upsert.\n       *\n       * If no cache entry for that cache key exists, a cache entry will be created and the data added. If a cache entry already exists, this will _overwrite_ the existing cache entry data.\n       *\n       * The thunk executes _asynchronously_, and returns a promise that resolves when the store has been updated.\n       *\n       * If dispatched while an actual request is in progress, both the upsert and request will be handled as soon as they resolve, resulting in a \"last result wins\" update behavior.\n       *\n       * @example\n       *\n       * ```ts\n       * await dispatch(\n       *   api.util.upsertQueryData('getPost', {id: 1}, {id: 1, text: \"Hello!\"})\n       * )\n       * ```\n       */\n      upsertQueryData: UpsertQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n      /**\n       * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.\n       *\n       * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.\n       *\n       * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.\n       *\n       * @example\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       *\n       * // later\n       * dispatch(\n       *   api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)\n       * )\n       *\n       * // or\n       * patchCollection.undo()\n       * ```\n       */\n      patchQueryData: PatchQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.resetApiState())\n       * ```\n       */\n      resetApiState: SliceActions['resetApiState'];\n      upsertQueryEntries: UpsertEntries<Definitions>;\n\n      /**\n       * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).\n       *\n       * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.\n       *\n       * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.\n       *\n       * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:\n       *\n       * - `[TagType]`\n       * - `[{ type: TagType }]`\n       * - `[{ type: TagType, id: number | string }]`\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.invalidateTags(['Post']))\n       * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))\n       * dispatch(\n       *   api.util.invalidateTags([\n       *     { type: 'Post', id: 1 },\n       *     { type: 'Post', id: 'LIST' },\n       *   ])\n       * )\n       * ```\n       */\n      invalidateTags: ActionCreatorWithPayload<Array<TagDescription<TagTypes> | null | undefined>, string>;\n\n      /**\n       * A function to select all `{ endpointName, originalArgs, queryCacheKey }` combinations that would be invalidated by a specific set of tags.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectInvalidatedBy: (state: RootState<Definitions, string, ReducerPath>, tags: ReadonlyArray<TagDescription<TagTypes> | null | undefined>) => Array<{\n        endpointName: string;\n        originalArgs: any;\n        queryCacheKey: string;\n      }>;\n\n      /**\n       * A function to select all arguments currently cached for a given endpoint.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectCachedArgsForQuery: <QueryName extends AllQueryKeys<Definitions>>(state: RootState<Definitions, string, ReducerPath>, queryName: QueryName) => Array<QueryArgFromAnyQuery<Definitions[QueryName]>>;\n    };\n    /**\n     * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.\n     */\n    endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? ApiEndpointQuery<Definitions[K], Definitions> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? ApiEndpointMutation<Definitions[K], Definitions> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? ApiEndpointInfiniteQuery<Definitions[K], Definitions> : never };\n  };\n}\nexport interface ApiEndpointQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends QueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointQuery<Definition>, BuildInitiateApiEndpointQuery<Definition>, BuildSelectorsApiEndpointQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport interface ApiEndpointInfiniteQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends InfiniteQueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointInfiniteQuery<Definition>, BuildInitiateApiEndpointInfiniteQuery<Definition>, BuildSelectorsApiEndpointInfiniteQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface ApiEndpointMutation<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends MutationDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointMutation<Definition>, BuildInitiateApiEndpointMutation<Definition>, BuildSelectorsApiEndpointMutation<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport type ListenerActions = {\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n};\nexport type InternalActions = SliceActions & ListenerActions;\nexport interface CoreModuleOptions {\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module containing the basic redux logic for use with `buildCreateApi`.\n *\n * @example\n * ```ts\n * const createBaseApi = buildCreateApi(coreModule());\n * ```\n */\nexport const coreModule = ({\n  createSelector = _createSelector\n}: CoreModuleOptions = {}): Module<CoreModule> => ({\n  name: coreModuleName,\n  init(api, {\n    baseQuery,\n    tagTypes,\n    reducerPath,\n    serializeQueryArgs,\n    keepUnusedDataFor,\n    refetchOnMountOrArgChange,\n    refetchOnFocus,\n    refetchOnReconnect,\n    invalidationBehavior,\n    onSchemaFailure,\n    catchSchemaFailure,\n    skipSchemaValidation\n  }, context) {\n    enablePatches();\n    assertCast<InternalSerializeQueryArgs>(serializeQueryArgs);\n    const assertTagType: AssertTagTypes = tag => {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        if (!tagTypes.includes(tag.type as any)) {\n          console.error(`Tag type '${tag.type}' was used, but not specified in \\`tagTypes\\`!`);\n        }\n      }\n      return tag;\n    };\n    Object.assign(api, {\n      reducerPath,\n      endpoints: {},\n      internalActions: {\n        onOnline,\n        onOffline,\n        onFocus,\n        onFocusLost\n      },\n      util: {}\n    });\n    const selectors = buildSelectors({\n      serializeQueryArgs: serializeQueryArgs as any,\n      reducerPath,\n      createSelector\n    });\n    const {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery,\n      buildQuerySelector,\n      buildInfiniteQuerySelector,\n      buildMutationSelector\n    } = selectors;\n    safeAssign(api.util, {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery\n    });\n    const {\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      buildMatchThunkActions\n    } = buildThunks({\n      baseQuery,\n      reducerPath,\n      context,\n      api,\n      serializeQueryArgs,\n      assertTagType,\n      selectors,\n      onSchemaFailure,\n      catchSchemaFailure,\n      skipSchemaValidation\n    });\n    const {\n      reducer,\n      actions: sliceActions\n    } = buildSlice({\n      context,\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      serializeQueryArgs,\n      reducerPath,\n      assertTagType,\n      config: {\n        refetchOnFocus,\n        refetchOnReconnect,\n        refetchOnMountOrArgChange,\n        keepUnusedDataFor,\n        reducerPath,\n        invalidationBehavior\n      }\n    });\n    safeAssign(api.util, {\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      resetApiState: sliceActions.resetApiState,\n      upsertQueryEntries: sliceActions.cacheEntriesUpserted as any\n    });\n    safeAssign(api.internalActions, sliceActions);\n    const {\n      middleware,\n      actions: middlewareActions\n    } = buildMiddleware({\n      reducerPath,\n      context,\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      assertTagType,\n      selectors\n    });\n    safeAssign(api.util, middlewareActions);\n    safeAssign(api, {\n      reducer: reducer as any,\n      middleware\n    });\n    const {\n      buildInitiateQuery,\n      buildInitiateInfiniteQuery,\n      buildInitiateMutation,\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueriesThunk,\n      getRunningQueryThunk\n    } = buildInitiate({\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      serializeQueryArgs: serializeQueryArgs as any,\n      context\n    });\n    safeAssign(api.util, {\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueryThunk,\n      getRunningQueriesThunk\n    });\n    return {\n      name: coreModuleName,\n      injectEndpoint(endpointName, definition) {\n        const anyApi = api as any as Api<any, Record<string, any>, string, string, CoreModule>;\n        const endpoint = anyApi.endpoints[endpointName] ??= {} as any;\n        if (isQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildQuerySelector(endpointName, definition),\n            initiate: buildInitiateQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n        if (isMutationDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildMutationSelector(),\n            initiate: buildInitiateMutation(endpointName)\n          }, buildMatchThunkActions(mutationThunk, endpointName));\n        }\n        if (isInfiniteQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildInfiniteQuerySelector(endpointName, definition),\n            initiate: buildInitiateInfiniteQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n      }\n    };\n  }\n});","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import type { InternalHandlerBuilder, SubscriptionSelectors } from './types';\nimport type { SubscriptionState } from '../apiState';\nimport { produceWithPatches } from 'immer';\nimport type { Action } from '@reduxjs/toolkit';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildBatchedActionsHandler: InternalHandlerBuilder<[actionShouldContinue: boolean, returnValue: SubscriptionSelectors | boolean]> = ({\n  api,\n  queryThunk,\n  internalState\n}) => {\n  const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;\n  let previousSubscriptions: SubscriptionState = null as unknown as SubscriptionState;\n  let updateSyncTimer: ReturnType<typeof window.setTimeout> | null = null;\n  const {\n    updateSubscriptionOptions,\n    unsubscribeQueryResult\n  } = api.internalActions;\n\n  // Actually intentionally mutate the subscriptions state used in the middleware\n  // This is done to speed up perf when loading many components\n  const actuallyMutateSubscriptions = (mutableState: SubscriptionState, action: Action) => {\n    if (updateSubscriptionOptions.match(action)) {\n      const {\n        queryCacheKey,\n        requestId,\n        options\n      } = action.payload;\n      if (mutableState?.[queryCacheKey]?.[requestId]) {\n        mutableState[queryCacheKey]![requestId] = options;\n      }\n      return true;\n    }\n    if (unsubscribeQueryResult.match(action)) {\n      const {\n        queryCacheKey,\n        requestId\n      } = action.payload;\n      if (mutableState[queryCacheKey]) {\n        delete mutableState[queryCacheKey]![requestId];\n      }\n      return true;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) {\n      delete mutableState[action.payload.queryCacheKey];\n      return true;\n    }\n    if (queryThunk.pending.match(action)) {\n      const {\n        meta: {\n          arg,\n          requestId\n        }\n      } = action;\n      const substate = mutableState[arg.queryCacheKey] ??= {};\n      substate[`${requestId}_running`] = {};\n      if (arg.subscribe) {\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n      }\n      return true;\n    }\n    let mutated = false;\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {\n      const state = mutableState[action.meta.arg.queryCacheKey] || {};\n      const key = `${action.meta.requestId}_running`;\n      mutated ||= !!state[key];\n      delete state[key];\n    }\n    if (queryThunk.rejected.match(action)) {\n      const {\n        meta: {\n          condition,\n          arg,\n          requestId\n        }\n      } = action;\n      if (condition && arg.subscribe) {\n        const substate = mutableState[arg.queryCacheKey] ??= {};\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n        mutated = true;\n      }\n    }\n    return mutated;\n  };\n  const getSubscriptions = () => internalState.currentSubscriptions;\n  const getSubscriptionCount = (queryCacheKey: string) => {\n    const subscriptions = getSubscriptions();\n    const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {};\n    return countObjectKeys(subscriptionsForQueryArg);\n  };\n  const isRequestSubscribed = (queryCacheKey: string, requestId: string) => {\n    const subscriptions = getSubscriptions();\n    return !!subscriptions?.[queryCacheKey]?.[requestId];\n  };\n  const subscriptionSelectors: SubscriptionSelectors = {\n    getSubscriptions,\n    getSubscriptionCount,\n    isRequestSubscribed\n  };\n  return (action, mwApi): [actionShouldContinue: boolean, result: SubscriptionSelectors | boolean] => {\n    if (!previousSubscriptions) {\n      // Initialize it the first time this handler runs\n      previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n    }\n    if (api.util.resetApiState.match(action)) {\n      previousSubscriptions = internalState.currentSubscriptions = {};\n      updateSyncTimer = null;\n      return [true, false];\n    }\n\n    // Intercept requests by hooks to see if they're subscribed\n    // We return the internal state reference so that hooks\n    // can do their own checks to see if they're still active.\n    // It's stupid and hacky, but it does cut down on some dispatch calls.\n    if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {\n      return [false, subscriptionSelectors];\n    }\n\n    // Update subscription data based on this action\n    const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);\n    let actionShouldContinue = true;\n    if (didMutate) {\n      if (!updateSyncTimer) {\n        // We only use the subscription state for the Redux DevTools at this point,\n        // as the real data is kept here in the middleware.\n        // Given that, we can throttle synchronizing this state significantly to\n        // save on overall perf.\n        // In 1.9, it was updated in a microtask, but now we do it at most every 500ms.\n        updateSyncTimer = setTimeout(() => {\n          // Deep clone the current subscription data\n          const newSubscriptions: SubscriptionState = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n          // Figure out a smaller diff between original and current\n          const [, patches] = produceWithPatches(previousSubscriptions, () => newSubscriptions);\n\n          // Sync the store state for visibility\n          mwApi.next(api.internalActions.subscriptionsUpdated(patches));\n          // Save the cloned state for later reference\n          previousSubscriptions = newSubscriptions;\n          updateSyncTimer = null;\n        }, 500);\n      }\n      const isSubscriptionSliceAction = typeof action.type == 'string' && !!action.type.startsWith(subscriptionsPrefix);\n      const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;\n      actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;\n    }\n    return [actionShouldContinue, false];\n  };\n};","import type { QueryDefinition } from '../../endpointDefinitions';\nimport type { ConfigState, QueryCacheKey } from '../apiState';\nimport { isAnyOf } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, QueryStateMeta, SubMiddlewareApi, TimeoutId } from './types';\nexport type ReferenceCacheCollection = never;\nfunction isObjectEmpty(obj: Record<any, any>) {\n  // Apparently a for..in loop is faster than `Object.keys()` here:\n  // https://stackoverflow.com/a/59787784/62937\n  for (const k in obj) {\n    // If there is at least one key, it's not empty\n    return false;\n  }\n  return true;\n}\nexport type CacheCollectionQueryExtraOptions = {\n  /**\n   * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_\n   *\n   * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   */\n  keepUnusedDataFor?: number;\n};\n\n// Per https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value , browsers store\n// `setTimeout()` timer values in a 32-bit int. If we pass a value in that's larger than that,\n// it wraps and ends up executing immediately.\n// Our `keepUnusedDataFor` values are in seconds, so adjust the numbers here accordingly.\nexport const THIRTY_TWO_BIT_MAX_INT = 2_147_483_647;\nexport const THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2_147_483_647 / 1_000 - 1;\nexport const buildCacheCollectionHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  api,\n  queryThunk,\n  context,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectConfig\n  }\n}) => {\n  const {\n    removeQueryResult,\n    unsubscribeQueryResult,\n    cacheEntriesUpserted\n  } = api.internalActions;\n  const canTriggerUnsubscribe = isAnyOf(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);\n  function anySubscriptionsRemainingForKey(queryCacheKey: string) {\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    return !!subscriptions && !isObjectEmpty(subscriptions);\n  }\n  const currentRemovalTimeouts: QueryStateMeta<TimeoutId> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, internalState) => {\n    const state = mwApi.getState();\n    const config = selectConfig(state);\n    if (canTriggerUnsubscribe(action)) {\n      let queryCacheKeys: QueryCacheKey[];\n      if (cacheEntriesUpserted.match(action)) {\n        queryCacheKeys = action.payload.map(entry => entry.queryDescription.queryCacheKey);\n      } else {\n        const {\n          queryCacheKey\n        } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;\n        queryCacheKeys = [queryCacheKey];\n      }\n      handleUnsubscribeMany(queryCacheKeys, mwApi, config);\n    }\n    if (api.util.resetApiState.match(action)) {\n      for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {\n        if (timeout) clearTimeout(timeout);\n        delete currentRemovalTimeouts[key];\n      }\n    }\n    if (context.hasRehydrationInfo(action)) {\n      const {\n        queries\n      } = context.extractRehydrationInfo(action)!;\n      // Gotcha:\n      // If rehydrating before the endpoint has been injected,the global `keepUnusedDataFor`\n      // will be used instead of the endpoint-specific one.\n      handleUnsubscribeMany(Object.keys(queries) as QueryCacheKey[], mwApi, config);\n    }\n  };\n  function handleUnsubscribeMany(cacheKeys: QueryCacheKey[], api: SubMiddlewareApi, config: ConfigState<string>) {\n    const state = api.getState();\n    for (const queryCacheKey of cacheKeys) {\n      const entry = selectQueryEntry(state, queryCacheKey);\n      handleUnsubscribe(queryCacheKey, entry?.endpointName, api, config);\n    }\n  }\n  function handleUnsubscribe(queryCacheKey: QueryCacheKey, endpointName: string | undefined, api: SubMiddlewareApi, config: ConfigState<string>) {\n    const endpointDefinition = context.endpointDefinitions[endpointName!] as QueryDefinition<any, any, any, any>;\n    const keepUnusedDataFor = endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor;\n    if (keepUnusedDataFor === Infinity) {\n      // Hey, user said keep this forever!\n      return;\n    }\n    // Prevent `setTimeout` timers from overflowing a 32-bit internal int, by\n    // clamping the max value to be at most 1000ms less than the 32-bit max.\n    // Look, a 24.8-day keepalive ought to be enough for anybody, right? :)\n    // Also avoid negative values too.\n    const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));\n    if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n      const currentTimeout = currentRemovalTimeouts[queryCacheKey];\n      if (currentTimeout) {\n        clearTimeout(currentTimeout);\n      }\n      currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {\n        if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n          api.dispatch(removeQueryResult({\n            queryCacheKey\n          }));\n        }\n        delete currentRemovalTimeouts![queryCacheKey];\n      }, finalKeepUnusedDataFor * 1000);\n    }\n  }\n  return handler;\n};","import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { BaseQueryFn, BaseQueryMeta, BaseQueryResult } from '../../baseQueryTypes';\nimport type { BaseEndpointDefinition } from '../../endpointDefinitions';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { QueryCacheKey, RootState } from '../apiState';\nimport type { MutationResultSelectorResult, QueryResultSelectorResult } from '../buildSelectors';\nimport { getMutationCacheKey } from '../buildSlice';\nimport type { PatchCollection, Recipe } from '../buildThunks';\nimport { isAsyncThunkAction, isFulfilled } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseWithKnownReason, SubMiddlewareApi } from './types';\nexport type ReferenceCacheLifecycle = never;\nexport interface QueryBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends LifecycleApi<ReducerPath> {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): QueryResultSelectorResult<{\n    type: DefinitionType.query;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n  /**\n   * Updates the current cache entry value.\n   * For documentation see `api.util.updateQueryData`.\n   */\n  updateCachedData(updateRecipe: Recipe<ResultType>): PatchCollection;\n}\nexport type MutationBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = LifecycleApi<ReducerPath> & {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): MutationResultSelectorResult<{\n    type: DefinitionType.mutation;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n};\ntype LifecycleApi<ReducerPath extends string = string> = {\n  /**\n   * The dispatch method for the store\n   */\n  dispatch: ThunkDispatch<any, any, UnknownAction>;\n  /**\n   * A method to get the current state\n   */\n  getState(): RootState<any, any, ReducerPath>;\n  /**\n   * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.\n   */\n  extra: unknown;\n  /**\n   * A unique ID generated for the mutation\n   */\n  requestId: string;\n};\ntype CacheLifecyclePromises<ResultType = unknown, MetaType = unknown> = {\n  /**\n   * Promise that will resolve with the first value for this cache key.\n   * This allows you to `await` until an actual value is in cache.\n   *\n   * If the cache entry is removed from the cache before any value has ever\n   * been resolved, this Promise will reject with\n   * `new Error('Promise never resolved before cacheEntryRemoved.')`\n   * to prevent memory leaks.\n   * You can just re-throw that error (or not handle it at all) -\n   * it will be caught outside of `cacheEntryAdded`.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  cacheDataLoaded: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: MetaType;\n  }, typeof neverResolvedError>;\n  /**\n   * Promise that allows you to wait for the point in time when the cache entry\n   * has been removed from the cache, by not being used/subscribed to any more\n   * in the application for too long or by dispatching `api.util.resetApiState`.\n   */\n  cacheEntryRemoved: Promise<void>;\n};\nexport interface QueryCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>> {}\nexport type MutationCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>>;\nexport type CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: QueryCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type CacheLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: MutationCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nconst neverResolvedError = new Error('Promise never resolved before cacheEntryRemoved.') as Error & {\n  message: 'Promise never resolved before cacheEntryRemoved.';\n};\nexport const buildCacheLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  reducerPath,\n  context,\n  queryThunk,\n  mutationThunk,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectApiState\n  }\n}) => {\n  const isQueryThunk = isAsyncThunkAction(queryThunk);\n  const isMutationThunk = isAsyncThunkAction(mutationThunk);\n  const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    valueResolved?(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    cacheEntryRemoved(): void;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  function resolveLifecycleEntry(cacheKey: string, data: unknown, meta: unknown) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle?.valueResolved) {\n      lifecycle.valueResolved({\n        data,\n        meta\n      });\n      delete lifecycle.valueResolved;\n    }\n  }\n  function removeLifecycleEntry(cacheKey: string) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle) {\n      delete lifecycleMap[cacheKey];\n      lifecycle.cacheEntryRemoved();\n    }\n  }\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, stateBefore) => {\n    const cacheKey = getCacheKey(action) as QueryCacheKey;\n    function checkForNewCacheKey(endpointName: string, cacheKey: QueryCacheKey, requestId: string, originalArgs: unknown) {\n      const oldEntry = selectQueryEntry(stateBefore, cacheKey);\n      const newEntry = selectQueryEntry(mwApi.getState(), cacheKey);\n      if (!oldEntry && newEntry) {\n        handleNewKey(endpointName, originalArgs, cacheKey, mwApi, requestId);\n      }\n    }\n    if (queryThunk.pending.match(action)) {\n      checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);\n    } else if (api.internalActions.cacheEntriesUpserted.match(action)) {\n      for (const {\n        queryDescription,\n        value\n      } of action.payload) {\n        const {\n          endpointName,\n          originalArgs,\n          queryCacheKey\n        } = queryDescription;\n        checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);\n        resolveLifecycleEntry(queryCacheKey, value, {});\n      }\n    } else if (mutationThunk.pending.match(action)) {\n      const state = mwApi.getState()[reducerPath].mutations[cacheKey];\n      if (state) {\n        handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);\n      }\n    } else if (isFulfilledThunk(action)) {\n      resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);\n    } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {\n      removeLifecycleEntry(cacheKey);\n    } else if (api.util.resetApiState.match(action)) {\n      for (const cacheKey of Object.keys(lifecycleMap)) {\n        removeLifecycleEntry(cacheKey);\n      }\n    }\n  };\n  function getCacheKey(action: any) {\n    if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;\n    if (isMutationThunk(action)) {\n      return action.meta.arg.fixedCacheKey ?? action.meta.requestId;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;\n    if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);\n    return '';\n  }\n  function handleNewKey(endpointName: string, originalArgs: any, queryCacheKey: string, mwApi: SubMiddlewareApi, requestId: string) {\n    const endpointDefinition = context.endpointDefinitions[endpointName];\n    const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded;\n    if (!onCacheEntryAdded) return;\n    const lifecycle = {} as CacheLifecycle;\n    const cacheEntryRemoved = new Promise<void>(resolve => {\n      lifecycle.cacheEntryRemoved = resolve;\n    });\n    const cacheDataLoaded: PromiseWithKnownReason<{\n      data: unknown;\n      meta: unknown;\n    }, typeof neverResolvedError> = Promise.race([new Promise<{\n      data: unknown;\n      meta: unknown;\n    }>(resolve => {\n      lifecycle.valueResolved = resolve;\n    }), cacheEntryRemoved.then(() => {\n      throw neverResolvedError;\n    })]);\n    // prevent uncaught promise rejections from happening.\n    // if the original promise is used in any way, that will create a new promise that will throw again\n    cacheDataLoaded.catch(() => {});\n    lifecycleMap[queryCacheKey] = lifecycle;\n    const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : queryCacheKey);\n    const extra = mwApi.dispatch((_, __, extra) => extra);\n    const lifecycleApi = {\n      ...mwApi,\n      getCacheEntry: () => selector(mwApi.getState()),\n      requestId,\n      extra,\n      updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n      cacheDataLoaded,\n      cacheEntryRemoved\n    };\n    const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi as any);\n    // if a `neverResolvedError` was thrown, but not handled in the running handler, do not let it leak out further\n    Promise.resolve(runningHandler).catch(e => {\n      if (e === neverResolvedError) return;\n      throw e;\n    });\n  }\n  return handler;\n};","import type { InternalHandlerBuilder } from './types';\nexport const buildDevCheckHandler: InternalHandlerBuilder = ({\n  api,\n  context: {\n    apiUid\n  },\n  reducerPath\n}) => {\n  return (action, mwApi) => {\n    if (api.util.resetApiState.match(action)) {\n      // dispatch after api reset\n      mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (api.internalActions.middlewareRegistered.match(action) && action.payload === apiUid && mwApi.getState()[reducerPath]?.config?.middlewareRegistered === 'conflict') {\n        console.warn(`There is a mismatch between slice and middleware for the reducerPath \"${reducerPath}\".\nYou can only have one api per reducer path, this will lead to crashes in various situations!${reducerPath === 'api' ? `\nIf you have multiple apis, you *have* to specify the reducerPath option when using createApi!` : ''}`);\n      }\n    }\n  };\n};","import { isAnyOf, isFulfilled, isRejected, isRejectedWithValue } from '../rtkImports';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport { calculateProvidedBy } from '../../endpointDefinitions';\nimport type { CombinedState, QueryCacheKey } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport { calculateProvidedByThunk } from '../buildThunks';\nimport type { SubMiddlewareApi, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  context: {\n    endpointDefinitions\n  },\n  mutationThunk,\n  queryThunk,\n  api,\n  assertTagType,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const isThunkActionWithTags = isAnyOf(isFulfilled(mutationThunk), isRejectedWithValue(mutationThunk));\n  const isQueryEnd = isAnyOf(isFulfilled(mutationThunk, queryThunk), isRejected(mutationThunk, queryThunk));\n  let pendingTagInvalidations: FullTagDescription<string>[] = [];\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isThunkActionWithTags(action)) {\n      invalidateTags(calculateProvidedByThunk(action, 'invalidatesTags', endpointDefinitions, assertTagType), mwApi);\n    } else if (isQueryEnd(action)) {\n      invalidateTags([], mwApi);\n    } else if (api.util.invalidateTags.match(action)) {\n      invalidateTags(calculateProvidedBy(action.payload, undefined, undefined, undefined, undefined, assertTagType), mwApi);\n    }\n  };\n  function hasPendingRequests(state: CombinedState<EndpointDefinitions, string, string>) {\n    const {\n      queries,\n      mutations\n    } = state;\n    for (const cacheRecord of [queries, mutations]) {\n      for (const key in cacheRecord) {\n        if (cacheRecord[key]?.status === QueryStatus.pending) return true;\n      }\n    }\n    return false;\n  }\n  function invalidateTags(newTags: readonly FullTagDescription<string>[], mwApi: SubMiddlewareApi) {\n    const rootState = mwApi.getState();\n    const state = rootState[reducerPath];\n    pendingTagInvalidations.push(...newTags);\n    if (state.config.invalidationBehavior === 'delayed' && hasPendingRequests(state)) {\n      return;\n    }\n    const tags = pendingTagInvalidations;\n    pendingTagInvalidations = [];\n    if (tags.length === 0) return;\n    const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);\n    context.batch(() => {\n      const valuesArray = Array.from(toInvalidate.values());\n      for (const {\n        queryCacheKey\n      } of valuesArray) {\n        const querySubState = state.queries[queryCacheKey];\n        const subscriptionSubState = internalState.currentSubscriptions[queryCacheKey] ?? {};\n        if (querySubState) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            mwApi.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            mwApi.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { QueryCacheKey, QuerySubstateIdentifier, Subscribers } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport type { QueryStateMeta, SubMiddlewareApi, TimeoutId, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nexport const buildPollingHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  queryThunk,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const currentPolls: QueryStateMeta<{\n    nextPollTimestamp: number;\n    timeout?: TimeoutId;\n    pollingInterval: number;\n  }> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {\n      updatePollingInterval(action.payload, mwApi);\n    }\n    if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {\n      updatePollingInterval(action.meta.arg, mwApi);\n    }\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {\n      startNextPoll(action.meta.arg, mwApi);\n    }\n    if (api.util.resetApiState.match(action)) {\n      clearPolls();\n    }\n  };\n  function getCacheEntrySubscriptions(queryCacheKey: QueryCacheKey, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    return subscriptions;\n  }\n  function startNextPoll({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    const {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) return;\n    const currentPoll = currentPolls[queryCacheKey];\n    if (currentPoll?.timeout) {\n      clearTimeout(currentPoll.timeout);\n      currentPoll.timeout = undefined;\n    }\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    currentPolls[queryCacheKey] = {\n      nextPollTimestamp,\n      pollingInterval: lowestPollingInterval,\n      timeout: setTimeout(() => {\n        if (state.config.focused || !skipPollingIfUnfocused) {\n          api.dispatch(refetchQuery(querySubState));\n        }\n        startNextPoll({\n          queryCacheKey\n        }, api);\n      }, lowestPollingInterval)\n    };\n  }\n  function updatePollingInterval({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) {\n      return;\n    }\n    const {\n      lowestPollingInterval\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) {\n      cleanupPollForKey(queryCacheKey);\n      return;\n    }\n    const currentPoll = currentPolls[queryCacheKey];\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {\n      startNextPoll({\n        queryCacheKey\n      }, api);\n    }\n  }\n  function cleanupPollForKey(key: string) {\n    const existingPoll = currentPolls[key];\n    if (existingPoll?.timeout) {\n      clearTimeout(existingPoll.timeout);\n    }\n    delete currentPolls[key];\n  }\n  function clearPolls() {\n    for (const key of Object.keys(currentPolls)) {\n      cleanupPollForKey(key);\n    }\n  }\n  function findLowestPollingInterval(subscribers: Subscribers = {}) {\n    let skipPollingIfUnfocused: boolean | undefined = false;\n    let lowestPollingInterval = Number.POSITIVE_INFINITY;\n    for (let key in subscribers) {\n      if (!!subscribers[key].pollingInterval) {\n        lowestPollingInterval = Math.min(subscribers[key].pollingInterval!, lowestPollingInterval);\n        skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;\n      }\n    }\n    return {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    };\n  }\n  return handler;\n};","import type { BaseQueryError, BaseQueryFn, BaseQueryMeta } from '../../baseQueryTypes';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { Recipe } from '../buildThunks';\nimport { isFulfilled, isPending, isRejected } from '../rtkImports';\nimport type { MutationBaseLifecycleApi, QueryBaseLifecycleApi } from './cacheLifecycle';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseConstructorWithKnownReason, PromiseWithKnownReason } from './types';\nexport type ReferenceQueryLifecycle = never;\ntype QueryLifecyclePromises<ResultType, BaseQuery extends BaseQueryFn> = {\n  /**\n   * Promise that will resolve with the (transformed) query result.\n   *\n   * If the query fails, this promise will reject with the error.\n   *\n   * This allows you to `await` for the query to finish.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  queryFulfilled: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: BaseQueryMeta<BaseQuery>;\n  }, QueryFulfilledRejectionReason<BaseQuery>>;\n};\ntype QueryFulfilledRejectionReason<BaseQuery extends BaseQueryFn> = {\n  error: BaseQueryError<BaseQuery>;\n  /**\n   * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.\n   */\n  isUnhandledError: false;\n  /**\n   * The `meta` returned by the `baseQuery`\n   */\n  meta: BaseQueryMeta<BaseQuery>;\n} | {\n  error: unknown;\n  meta?: undefined;\n  /**\n   * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn`, `transformResponse` or `transformErrorResponse` throwing an error instead of handling it properly.\n   * There can not be made any assumption about the shape of `error`.\n   */\n  isUnhandledError: true;\n};\nexport type QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used to perform side-effects throughout the lifecycle of the query.\n   *\n   * @example\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * import { messageCreated } from './notificationsSlice\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       async onQueryStarted(id, { dispatch, queryFulfilled }) {\n   *         // `onStart` side-effect\n   *         dispatch(messageCreated('Fetching posts...'))\n   *         try {\n   *           const { data } = await queryFulfilled\n   *           // `onSuccess` side-effect\n   *           dispatch(messageCreated('Posts received!'))\n   *         } catch (err) {\n   *           // `onError` side-effect\n   *           dispatch(messageCreated('Error fetching posts!'))\n   *         }\n   *       }\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, queryLifeCycleApi: QueryLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type QueryLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used for `optimistic updates`.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       providesTags: ['Post'],\n   *     }),\n   *     updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({\n   *       query: ({ id, ...patch }) => ({\n   *         url: `post/${id}`,\n   *         method: 'PATCH',\n   *         body: patch,\n   *       }),\n   *       invalidatesTags: ['Post'],\n   *       async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {\n   *         const patchResult = dispatch(\n   *           api.util.updateQueryData('getPost', id, (draft) => {\n   *             Object.assign(draft, patch)\n   *           })\n   *         )\n   *         try {\n   *           await queryFulfilled\n   *         } catch {\n   *           patchResult.undo()\n   *         }\n   *       },\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, mutationLifeCycleApi: MutationLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport interface QueryLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, QueryLifecyclePromises<ResultType, BaseQuery> {}\nexport type MutationLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & QueryLifecyclePromises<ResultType, BaseQuery>;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleQueryExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific query.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedQueryOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, QueryArgument>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedQueryOnQueryStarted<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async (queryArgument, { dispatch, queryFulfilled }) => {\n *   const result = await queryFulfilled\n *\n *   const { posts } = result.data\n *\n *   // Pre-fill the individual post entries with the results\n *   // from the list endpoint query\n *   dispatch(\n *     baseApiSlice.util.upsertQueryEntries(\n *       posts.map((post) => ({\n *         endpointName: 'getPostById',\n *         arg: post.id,\n *         value: post,\n *       })),\n *     ),\n *   )\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     getPostsByUserId: build.query<PostsApiResponse, QueryArgument>({\n *       query: (userId) => `/posts/user/${userId}`,\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedQueryOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleMutationExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific mutation.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedMutationOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = Pick<Post, 'id'> & Partial<Post>\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, number>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedMutationOnQueryStarted<\n *   Post,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async ({ id, ...patch }, { dispatch, queryFulfilled }) => {\n *   const patchCollection = dispatch(\n *     baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {\n *       Object.assign(draftPost, patch)\n *     }),\n *   )\n *\n *   try {\n *     await queryFulfilled\n *   } catch {\n *     patchCollection.undo()\n *   }\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     addPost: build.mutation<Post, Omit<QueryArgument, 'id'>>({\n *       query: (body) => ({\n *         url: `posts/add`,\n *         method: 'POST',\n *         body,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *\n *     updatePost: build.mutation<Post, QueryArgument>({\n *       query: ({ id, ...patch }) => ({\n *         url: `post/${id}`,\n *         method: 'PATCH',\n *         body: patch,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedMutationOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleMutationExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\nexport const buildQueryLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  context,\n  queryThunk,\n  mutationThunk\n}) => {\n  const isPendingThunk = isPending(queryThunk, mutationThunk);\n  const isRejectedThunk = isRejected(queryThunk, mutationThunk);\n  const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    resolve(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    reject(value: QueryFulfilledRejectionReason<any>): unknown;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isPendingThunk(action)) {\n      const {\n        requestId,\n        arg: {\n          endpointName,\n          originalArgs\n        }\n      } = action.meta;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const onQueryStarted = endpointDefinition?.onQueryStarted;\n      if (onQueryStarted) {\n        const lifecycle = {} as CacheLifecycle;\n        const queryFulfilled = new (Promise as PromiseConstructorWithKnownReason)<{\n          data: unknown;\n          meta: unknown;\n        }, QueryFulfilledRejectionReason<any>>((resolve, reject) => {\n          lifecycle.resolve = resolve;\n          lifecycle.reject = reject;\n        });\n        // prevent uncaught promise rejections from happening.\n        // if the original promise is used in any way, that will create a new promise that will throw again\n        queryFulfilled.catch(() => {});\n        lifecycleMap[requestId] = lifecycle;\n        const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : requestId);\n        const extra = mwApi.dispatch((_, __, extra) => extra);\n        const lifecycleApi = {\n          ...mwApi,\n          getCacheEntry: () => selector(mwApi.getState()),\n          requestId,\n          extra,\n          updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n          queryFulfilled\n        };\n        onQueryStarted(originalArgs, lifecycleApi as any);\n      }\n    } else if (isFullfilledThunk(action)) {\n      const {\n        requestId,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.resolve({\n        data: action.payload,\n        meta: baseQueryMeta\n      });\n      delete lifecycleMap[requestId];\n    } else if (isRejectedThunk(action)) {\n      const {\n        requestId,\n        rejectedWithValue,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.reject({\n        error: action.payload ?? action.error,\n        isUnhandledError: !rejectedWithValue,\n        meta: baseQueryMeta as any\n      });\n      delete lifecycleMap[requestId];\n    }\n  };\n  return handler;\n};","import { QueryStatus } from '../apiState';\nimport type { QueryCacheKey } from '../apiState';\nimport { onFocus, onOnline } from '../setupListeners';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, SubMiddlewareApi } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildWindowEventHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (onFocus.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnFocus');\n    }\n    if (onOnline.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnReconnect');\n    }\n  };\n  function refetchValidQueries(api: SubMiddlewareApi, type: 'refetchOnFocus' | 'refetchOnReconnect') {\n    const state = api.getState()[reducerPath];\n    const queries = state.queries;\n    const subscriptions = internalState.currentSubscriptions;\n    context.batch(() => {\n      for (const queryCacheKey of Object.keys(subscriptions)) {\n        const querySubState = queries[queryCacheKey];\n        const subscriptionSubState = subscriptions[queryCacheKey];\n        if (!subscriptionSubState || !querySubState) continue;\n        const shouldRefetch = Object.values(subscriptionSubState).some(sub => sub[type] === true) || Object.values(subscriptionSubState).every(sub => sub[type] === undefined) && state.config[type];\n        if (shouldRefetch) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            api.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            api.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { Action, Middleware, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport type { QueryStatus, QuerySubState, RootState } from '../apiState';\nimport type { QueryThunkArg } from '../buildThunks';\nimport { createAction, isAction } from '../rtkImports';\nimport { buildBatchedActionsHandler } from './batchActions';\nimport { buildCacheCollectionHandler } from './cacheCollection';\nimport { buildCacheLifecycleHandler } from './cacheLifecycle';\nimport { buildDevCheckHandler } from './devMiddleware';\nimport { buildInvalidationByTagsHandler } from './invalidationByTags';\nimport { buildPollingHandler } from './polling';\nimport { buildQueryLifecycleHandler } from './queryLifecycle';\nimport type { BuildMiddlewareInput, InternalHandlerBuilder, InternalMiddlewareState } from './types';\nimport { buildWindowEventHandler } from './windowEventHandling';\nimport type { ApiEndpointQuery } from '../module';\nexport type { ReferenceCacheCollection } from './cacheCollection';\nexport type { MutationCacheLifecycleApi, QueryCacheLifecycleApi, ReferenceCacheLifecycle } from './cacheLifecycle';\nexport type { MutationLifecycleApi, QueryLifecycleApi, ReferenceQueryLifecycle, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './queryLifecycle';\nexport type { SubscriptionSelectors } from './types';\nexport function buildMiddleware<Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string>(input: BuildMiddlewareInput<Definitions, ReducerPath, TagTypes>) {\n  const {\n    reducerPath,\n    queryThunk,\n    api,\n    context\n  } = input;\n  const {\n    apiUid\n  } = context;\n  const actions = {\n    invalidateTags: createAction<Array<TagTypes | FullTagDescription<TagTypes> | null | undefined>>(`${reducerPath}/invalidateTags`)\n  };\n  const isThisApiSliceAction = (action: Action) => action.type.startsWith(`${reducerPath}/`);\n  const handlerBuilders: InternalHandlerBuilder[] = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];\n  const middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>> = mwApi => {\n    let initialized = false;\n    const internalState: InternalMiddlewareState = {\n      currentSubscriptions: {}\n    };\n    const builderArgs = {\n      ...(input as any as BuildMiddlewareInput<EndpointDefinitions, string, string>),\n      internalState,\n      refetchQuery,\n      isThisApiSliceAction\n    };\n    const handlers = handlerBuilders.map(build => build(builderArgs));\n    const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);\n    const windowEventsHandler = buildWindowEventHandler(builderArgs);\n    return next => {\n      return action => {\n        if (!isAction(action)) {\n          return next(action);\n        }\n        if (!initialized) {\n          initialized = true;\n          // dispatch before any other action\n          mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n        }\n        const mwApiWithNext = {\n          ...mwApi,\n          next\n        };\n        const stateBefore = mwApi.getState();\n        const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);\n        let res: any;\n        if (actionShouldContinue) {\n          res = next(action);\n        } else {\n          res = internalProbeResult;\n        }\n        if (!!mwApi.getState()[reducerPath]) {\n          // Only run these checks if the middleware is registered okay\n\n          // This looks for actions that aren't specific to the API slice\n          windowEventsHandler(action, mwApiWithNext, stateBefore);\n          if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {\n            // Only run these additional checks if the actions are part of the API slice,\n            // or the action has hydration-related data\n            for (const handler of handlers) {\n              handler(action, mwApiWithNext, stateBefore);\n            }\n          }\n        }\n        return res;\n      };\n    };\n  };\n  return {\n    middleware,\n    actions\n  };\n  function refetchQuery(querySubState: Exclude<QuerySubState<any>, {\n    status: QueryStatus.uninitialized;\n  }>) {\n    return (input.api.endpoints[querySubState.endpointName] as ApiEndpointQuery<any, any>).initiate(querySubState.originalArgs as any, {\n      subscribe: false,\n      forceRefetch: true\n    });\n  }\n}","import { buildCreateApi } from '../createApi';\nimport { coreModule } from './module';\nexport const createApi = /* @__PURE__ */buildCreateApi(coreModule());\nexport { QueryStatus } from './apiState';\nexport type { CombinedState, InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationKeys, QueryCacheKey, QueryKeys, QuerySubState, RootState, SubscriptionOptions } from './apiState';\nexport type { InfiniteQueryActionCreatorResult, MutationActionCreatorResult, QueryActionCreatorResult, StartQueryActionCreatorOptions } from './buildInitiate';\nexport type { MutationCacheLifecycleApi, MutationLifecycleApi, QueryCacheLifecycleApi, QueryLifecycleApi, SubscriptionSelectors, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './buildMiddleware/index';\nexport { skipToken } from './buildSelectors';\nexport type { InfiniteQueryResultSelectorResult, MutationResultSelectorResult, QueryResultSelectorResult, SkipToken } from './buildSelectors';\nexport type { SliceActions } from './buildSlice';\nexport type { PatchQueryDataThunk, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nexport { coreModuleName } from './module';\nexport type { ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, CoreModule, InternalActions, PrefetchOptions, ThunkWithReturnValue } from './module';\nexport { setupListeners } from './setupListeners';\nexport { buildCreateApi, coreModule };"],"mappings":"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","names":["query_exports","__export","NamedSchemaError","QueryStatus","_NEVER","buildCreateApi","copyWithStructuralSharing","coreModule","coreModuleName","createApi","defaultSerializeQueryArgs","fakeBaseQuery","fetchBaseQuery","retry","setupListeners","skipToken","__toCommonJS","QueryStatus","getRequestStatusFlags","status","import_toolkit","isPlainObject","copyWithStructuralSharing","oldObj","newObj","newKeys","oldKeys","isSameObject","mergeObj","key","countObjectKeys","obj","count","_key","flatten","arr","isAbsoluteUrl","url","isDocumentVisible","isNotNullish","v","isOnline","withoutTrailingSlash","url","withoutLeadingSlash","joinUrls","base","isAbsoluteUrl","delimiter","getOrInsert","map","key","value","defaultFetchFn","args","defaultValidateStatus","response","defaultIsJsonContentType","headers","stripUndefined","obj","copy","k","v","fetchBaseQuery","baseUrl","prepareHeaders","x","fetchFn","paramsSerializer","isJsonContentType","jsonContentType","jsonReplacer","defaultTimeout","globalResponseHandler","globalValidateStatus","baseFetchOptions","arg","api","extraOptions","getState","extra","endpoint","forced","type","meta","url","params","responseHandler","validateStatus","timeout","rest","abortController","signal","config","isJsonifiable","body","divider","query","joinUrls","request","timedOut","timeoutId","e","responseClone","resultData","responseText","handleResponseError","handleResponse","r","text","HandledError","value","meta","defaultBackoff","attempt","maxRetries","attempts","timeout","resolve","res","fail","error","meta","HandledError","EMPTY_OPTIONS","retryWithBackoff","baseQuery","defaultOptions","args","api","extraOptions","possibleMaxRetries","x","options","_","__","retry","result","e","onFocus","onFocusLost","onOnline","onOffline","initialized","setupListeners","dispatch","customHandler","defaultHandler","handleFocus","handleFocusLost","handleOnline","handleOffline","handleVisibilityChange","isQueryDefinition","isMutationDefinition","isInfiniteQueryDefinition","isAnyQueryDefinition","calculateProvidedBy","description","result","error","queryArg","meta","assertTagTypes","isFunction","isNotNullish","expandTagDescription","t","import_immer","import_toolkit","asSafePromise","promise","fallback","forceQueryFnSymbol","isUpsertQuery","arg","buildInitiate","serializeQueryArgs","queryThunk","infiniteQueryThunk","mutationThunk","api","context","runningQueries","runningMutations","unsubscribeQueryResult","removeMutationResult","updateSubscriptionOptions","buildInitiateQuery","buildInitiateInfiniteQuery","buildInitiateMutation","getRunningQueryThunk","getRunningMutationThunk","getRunningQueriesThunk","getRunningMutationsThunk","endpointName","queryArgs","dispatch","endpointDefinition","queryCacheKey","_endpointName","fixedCacheKeyOrRequestId","isNotNullish","middlewareWarning","buildInitiateAnyQuery","queryAction","subscribe","forceRefetch","subscriptionOptions","forceQueryFn","rest","getState","thunk","commonThunkArgs","isQueryDefinition","direction","initialPageParam","selector","thunkResult","stateAfter","requestId","abort","skippedSynchronously","runningQuery","selectFromState","statePromise","result","options","running","getOrInsert","countObjectKeys","track","fixedCacheKey","unwrap","returnValuePromise","asSafePromise","data","error","reset","ret","import_utils","NamedSchemaError","issues","value","schemaName","_bqMeta","parseWithSchema","schema","data","bqMeta","result","defaultTransformResponse","baseQueryReturnValue","addShouldAutoBatch","arg","buildThunks","reducerPath","baseQuery","endpointDefinitions","serializeQueryArgs","api","assertTagType","selectors","onSchemaFailure","globalCatchSchemaFailure","globalSkipSchemaValidation","patchQueryData","endpointName","patches","updateProvided","dispatch","getState","endpointDefinition","queryCacheKey","newValue","providedTags","calculateProvidedBy","addToStart","items","item","max","newItems","addToEnd","updateQueryData","updateRecipe","currentState","ret","value","inversePatches","upsertQueryData","forceQueryFnSymbol","getTransformCallbackForEndpoint","transformFieldName","executeEndpoint","signal","abort","rejectWithValue","fulfillWithValue","extra","metaSchema","skipSchemaValidation","transformResponse","baseQueryApi","isForcedQuery","forceQueryFn","finalQueryReturnValue","fetchPage","data","param","maxPages","previous","finalQueryArg","pageResponse","executeRequest","addTo","result","extraOptions","argSchema","rawResponseSchema","responseSchema","parseWithSchema","HandledError","transformedResponse","infiniteQueryOptions","blankData","cachedData","existingData","getPreviousPageParam","getNextPageParam","initialPageParam","cachedPageParams","firstPageParam","totalPages","i","error","caughtError","transformErrorResponse","rawErrorResponseSchema","errorResponseSchema","meta","transformedErrorResponse","e","NamedSchemaError","info","catchSchemaFailure","state","requestState","baseFetchOnMountOrArgChange","fulfilledVal","refetchVal","createQueryThunk","isInfiniteQueryDefinition","queryThunkArg","currentArg","previousArg","direction","isUpsertQuery","isQueryDefinition","queryThunk","infiniteQueryThunk","mutationThunk","hasTheForce","options","hasMaxAge","prefetch","force","maxAge","queryAction","latestStateValue","lastFulfilledTs","matchesEndpoint","action","buildMatchThunkActions","thunk","pages","pageParams","queryArg","lastIndex","calculateProvidedByThunk","type","import_immer","updateQuerySubstateIfExists","state","queryCacheKey","update","substate","getMutationCacheKey","id","updateMutationSubstateIfExists","initialState","buildSlice","reducerPath","queryThunk","mutationThunk","serializeQueryArgs","definitions","apiUid","extractRehydrationInfo","hasRehydrationInfo","assertTagType","config","resetApiState","writePendingCacheEntry","draft","arg","upserting","meta","endpointDefinition","isInfiniteQueryDefinition","writeFulfilledCacheEntry","payload","merge","fulfilledTimeStamp","baseQueryMeta","requestId","newData","draftSubstateData","copyWithStructuralSharing","querySlice","action","entry","value","endpointName","patches","builder","isUpsertQuery","condition","error","queries","key","mutationSlice","cacheKey","startedTimeStamp","mutations","initialInvalidationState","invalidationSlice","providedTags","removeCacheKeyFromTags","type","subscribedQueries","provided","incomingTags","cacheKeys","writeProvidedTagsForQueries","mockActions","queryDescription","existingTags","tag","tagType","tagId","tagSubscriptions","qc","actions","providedByEntries","calculateProvidedByThunk","subscriptionSlice","d","a","internalSubscriptionsSlice","configSlice","isOnline","isDocumentVisible","onOnline","onOffline","onFocus","onFocusLost","combinedReducer","reducer","skipToken","initialSubState","defaultQuerySubState","defaultMutationSubState","buildSelectors","serializeQueryArgs","reducerPath","createSelector","selectSkippedQuery","state","selectSkippedMutation","buildQuerySelector","buildInfiniteQuerySelector","buildMutationSelector","selectInvalidatedBy","selectCachedArgsForQuery","selectApiState","selectQueries","selectMutations","selectQueryEntry","selectConfig","withRequestFlags","substate","getRequestStatusFlags","rootState","cacheKey","buildAnyQuerySelector","endpointName","endpointDefinition","combiner","queryArgs","serializedArgs","infiniteQueryOptions","withInfiniteQueryResultFlags","stateWithRequestFlags","isLoading","isError","direction","isForward","isBackward","getHasNextPage","getHasPreviousPage","id","mutationId","getMutationCacheKey","tags","apiState","toInvalidate","tag","isNotNullish","expandTagDescription","provided","invalidateSubscriptions","flatten","invalidate","queryCacheKey","querySubState","queryName","entry","options","data","queryArg","getNextPageParam","getPreviousPageParam","import_toolkit","cache","defaultSerializeQueryArgs","endpointName","queryArgs","serialized","cached","stringified","key","value","acc","import_reselect","buildCreateApi","modules","options","extractRehydrationInfo","action","optionsWithDefaults","queryArgsApi","finalSerializeQueryArgs","defaultSerializeQueryArgs","endpointSQA","initialResult","context","fn","api","injectEndpoints","addTagTypes","endpoints","eT","endpointName","partialDefinition","initializedModules","m","inject","evaluatedEndpoints","x","definition","_formatProdErrorMessage","import_toolkit","_NEVER","fakeBaseQuery","_formatProdErrorMessage","import_immer","safeAssign","target","args","import_immer","buildBatchedActionsHandler","api","queryThunk","internalState","subscriptionsPrefix","previousSubscriptions","updateSyncTimer","updateSubscriptionOptions","unsubscribeQueryResult","actuallyMutateSubscriptions","mutableState","action","queryCacheKey","requestId","options","arg","substate","mutated","state","key","condition","getSubscriptions","subscriptionSelectors","subscriptionsForQueryArg","countObjectKeys","mwApi","didMutate","actionShouldContinue","newSubscriptions","patches","isSubscriptionSliceAction","isAdditionalSubscriptionAction","isObjectEmpty","obj","k","THIRTY_TWO_BIT_MAX_TIMER_SECONDS","buildCacheCollectionHandler","reducerPath","api","queryThunk","context","internalState","selectQueryEntry","selectConfig","removeQueryResult","unsubscribeQueryResult","cacheEntriesUpserted","canTriggerUnsubscribe","anySubscriptionsRemainingForKey","queryCacheKey","subscriptions","isObjectEmpty","currentRemovalTimeouts","handler","action","mwApi","state","config","queryCacheKeys","entry","handleUnsubscribeMany","key","timeout","queries","cacheKeys","handleUnsubscribe","endpointName","keepUnusedDataFor","finalKeepUnusedDataFor","currentTimeout","neverResolvedError","buildCacheLifecycleHandler","api","reducerPath","context","queryThunk","mutationThunk","internalState","selectQueryEntry","selectApiState","isQueryThunk","isMutationThunk","isFulfilledThunk","lifecycleMap","resolveLifecycleEntry","cacheKey","data","meta","lifecycle","removeLifecycleEntry","handler","action","mwApi","stateBefore","getCacheKey","checkForNewCacheKey","endpointName","requestId","originalArgs","oldEntry","newEntry","handleNewKey","queryDescription","value","queryCacheKey","getMutationCacheKey","endpointDefinition","onCacheEntryAdded","cacheEntryRemoved","resolve","cacheDataLoaded","selector","isAnyQueryDefinition","extra","_","__","lifecycleApi","updateRecipe","runningHandler","e","buildDevCheckHandler","api","apiUid","reducerPath","action","mwApi","buildInvalidationByTagsHandler","reducerPath","context","endpointDefinitions","mutationThunk","queryThunk","api","assertTagType","refetchQuery","internalState","removeQueryResult","isThunkActionWithTags","isQueryEnd","pendingTagInvalidations","handler","action","mwApi","invalidateTags","calculateProvidedByThunk","calculateProvidedBy","hasPendingRequests","state","queries","mutations","cacheRecord","key","newTags","rootState","tags","toInvalidate","valuesArray","queryCacheKey","querySubState","subscriptionSubState","countObjectKeys","buildPollingHandler","reducerPath","queryThunk","api","refetchQuery","internalState","currentPolls","handler","action","mwApi","updatePollingInterval","startNextPoll","clearPolls","getCacheEntrySubscriptions","queryCacheKey","querySubState","subscriptions","state","lowestPollingInterval","skipPollingIfUnfocused","findLowestPollingInterval","currentPoll","nextPollTimestamp","cleanupPollForKey","key","existingPoll","subscribers","buildQueryLifecycleHandler","api","context","queryThunk","mutationThunk","isPendingThunk","isRejectedThunk","isFullfilledThunk","lifecycleMap","action","mwApi","requestId","endpointName","originalArgs","endpointDefinition","onQueryStarted","lifecycle","queryFulfilled","resolve","reject","selector","isAnyQueryDefinition","extra","_","__","lifecycleApi","updateRecipe","baseQueryMeta","rejectedWithValue","buildWindowEventHandler","reducerPath","context","api","refetchQuery","internalState","removeQueryResult","handler","action","mwApi","onFocus","refetchValidQueries","onOnline","type","state","queries","subscriptions","queryCacheKey","querySubState","subscriptionSubState","sub","countObjectKeys","buildMiddleware","input","reducerPath","queryThunk","api","context","apiUid","actions","isThisApiSliceAction","action","handlerBuilders","buildDevCheckHandler","buildCacheCollectionHandler","buildInvalidationByTagsHandler","buildPollingHandler","buildCacheLifecycleHandler","buildQueryLifecycleHandler","mwApi","initialized","builderArgs","refetchQuery","handlers","build","batchedActionsHandler","buildBatchedActionsHandler","windowEventsHandler","buildWindowEventHandler","next","mwApiWithNext","stateBefore","actionShouldContinue","internalProbeResult","res","handler","querySubState","coreModuleName","coreModule","createSelector","api","baseQuery","tagTypes","reducerPath","serializeQueryArgs","keepUnusedDataFor","refetchOnMountOrArgChange","refetchOnFocus","refetchOnReconnect","invalidationBehavior","onSchemaFailure","catchSchemaFailure","skipSchemaValidation","context","assertTagType","tag","onOnline","onOffline","onFocus","onFocusLost","selectors","buildSelectors","selectInvalidatedBy","selectCachedArgsForQuery","buildQuerySelector","buildInfiniteQuerySelector","buildMutationSelector","safeAssign","queryThunk","infiniteQueryThunk","mutationThunk","patchQueryData","updateQueryData","upsertQueryData","prefetch","buildMatchThunkActions","buildThunks","reducer","sliceActions","buildSlice","middleware","middlewareActions","buildMiddleware","buildInitiateQuery","buildInitiateInfiniteQuery","buildInitiateMutation","getRunningMutationThunk","getRunningMutationsThunk","getRunningQueriesThunk","getRunningQueryThunk","buildInitiate","endpointName","definition","anyApi","endpoint","isQueryDefinition","isMutationDefinition","isInfiniteQueryDefinition","createApi","buildCreateApi","coreModule"]}
Index: node_modules/@reduxjs/toolkit/dist/query/index.d.mts
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2915 @@
+import * as _reduxjs_toolkit from '@reduxjs/toolkit';
+import { ThunkDispatch, UnknownAction, Draft, AsyncThunk, SHOULD_AUTOBATCH, ThunkAction, SafePromise, SerializedError, PayloadAction, ActionCreatorWithoutPayload, Reducer, Middleware, ActionCreatorWithPayload, createSelector } from '@reduxjs/toolkit';
+import { Patch } from 'immer';
+import * as redux from 'redux';
+import { StandardSchemaV1 } from '@standard-schema/spec';
+import { SchemaError } from '@standard-schema/utils';
+
+type Id<T> = {
+    [K in keyof T]: T[K];
+} & {};
+type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
+type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;
+/**
+ * Convert a Union type `(A|B)` to an intersection type `(A&B)`
+ */
+type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
+type NonOptionalKeys<T> = {
+    [K in keyof T]-?: undefined extends T[K] ? never : K;
+}[keyof T];
+type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;
+type NoInfer<T> = [T][T extends any ? 0 : never];
+type NonUndefined<T> = T extends undefined ? never : T;
+type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;
+type MaybePromise<T> = T | PromiseLike<T>;
+type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;
+type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;
+type CastAny<T, CastTo> = IsAny<T, CastTo, T>;
+
+interface BaseQueryApi {
+    signal: AbortSignal;
+    abort: (reason?: string) => void;
+    dispatch: ThunkDispatch<any, any, any>;
+    getState: () => unknown;
+    extra: unknown;
+    endpoint: string;
+    type: 'query' | 'mutation';
+    /**
+     * Only available for queries: indicates if a query has been forced,
+     * i.e. it would have been fetched even if there would already be a cache entry
+     * (this does not mean that there is already a cache entry though!)
+     *
+     * This can be used to for example add a `Cache-Control: no-cache` header for
+     * invalidated queries.
+     */
+    forced?: boolean;
+    /**
+     * Only available for queries: the cache key that was used to store the query result
+     */
+    queryCacheKey?: string;
+}
+type QueryReturnValue<T = unknown, E = unknown, M = unknown> = {
+    error: E;
+    data?: undefined;
+    meta?: M;
+} | {
+    error?: undefined;
+    data: T;
+    meta?: M;
+};
+type BaseQueryFn<Args = any, Result = unknown, Error = unknown, DefinitionExtraOptions = {}, Meta = {}> = (args: Args, api: BaseQueryApi, extraOptions: DefinitionExtraOptions) => MaybePromise<QueryReturnValue<Result, Error, Meta>>;
+type BaseQueryEnhancer<AdditionalArgs = unknown, AdditionalDefinitionExtraOptions = unknown, Config = void> = <BaseQuery extends BaseQueryFn>(baseQuery: BaseQuery, config: Config) => BaseQueryFn<BaseQueryArg<BaseQuery> & AdditionalArgs, BaseQueryResult<BaseQuery>, BaseQueryError<BaseQuery>, BaseQueryExtraOptions<BaseQuery> & AdditionalDefinitionExtraOptions, NonNullable<BaseQueryMeta<BaseQuery>>>;
+/**
+ * @public
+ */
+type BaseQueryResult<BaseQuery extends BaseQueryFn> = UnwrapPromise<ReturnType<BaseQuery>> extends infer Unwrapped ? Unwrapped extends {
+    data: any;
+} ? Unwrapped['data'] : never : never;
+/**
+ * @public
+ */
+type BaseQueryMeta<BaseQuery extends BaseQueryFn> = UnwrapPromise<ReturnType<BaseQuery>>['meta'];
+/**
+ * @public
+ */
+type BaseQueryError<BaseQuery extends BaseQueryFn> = Exclude<UnwrapPromise<ReturnType<BaseQuery>>, {
+    error?: undefined;
+}>['error'];
+/**
+ * @public
+ */
+type BaseQueryArg<T extends (arg: any, ...args: any[]) => any> = T extends (arg: infer A, ...args: any[]) => any ? A : any;
+/**
+ * @public
+ */
+type BaseQueryExtraOptions<BaseQuery extends BaseQueryFn> = Parameters<BaseQuery>[2];
+
+declare const defaultSerializeQueryArgs: SerializeQueryArgs<any>;
+type SerializeQueryArgs<QueryArgs, ReturnType = string> = (_: {
+    queryArgs: QueryArgs;
+    endpointDefinition: EndpointDefinition<any, any, any, any>;
+    endpointName: string;
+}) => ReturnType;
+type InternalSerializeQueryArgs = (_: {
+    queryArgs: any;
+    endpointDefinition: EndpointDefinition<any, any, any, any>;
+    endpointName: string;
+}) => QueryCacheKey;
+
+interface CreateApiOptions<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never> {
+    /**
+     * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.
+     *
+     * @example
+     *
+     * ```ts
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+     *
+     * const api = createApi({
+     *   // highlight-start
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   // highlight-end
+     *   endpoints: (build) => ({
+     *     // ...endpoints
+     *   }),
+     * })
+     * ```
+     */
+    baseQuery: BaseQuery;
+    /**
+     * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).
+     *
+     * @example
+     *
+     * ```ts
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   // highlight-start
+     *   tagTypes: ['Post', 'User'],
+     *   // highlight-end
+     *   endpoints: (build) => ({
+     *     // ...endpoints
+     *   }),
+     * })
+     * ```
+     */
+    tagTypes?: readonly TagTypes[];
+    /**
+     * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="apis.js"
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';
+     *
+     * const apiOne = createApi({
+     *   // highlight-start
+     *   reducerPath: 'apiOne',
+     *   // highlight-end
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (builder) => ({
+     *     // ...endpoints
+     *   }),
+     * });
+     *
+     * const apiTwo = createApi({
+     *   // highlight-start
+     *   reducerPath: 'apiTwo',
+     *   // highlight-end
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (builder) => ({
+     *     // ...endpoints
+     *   }),
+     * });
+     * ```
+     */
+    reducerPath?: ReducerPath;
+    /**
+     * Accepts a custom function if you have a need to change the creation of cache keys for any reason.
+     */
+    serializeQueryArgs?: SerializeQueryArgs<unknown>;
+    /**
+     * Endpoints are a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are three endpoint types: [`query`](../../rtk-query/usage/queries), [`infiniteQuery`](../../rtk-query/usage/infinite-queries) and [`mutation`](../../rtk-query/usage/mutations).
+     */
+    endpoints(build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>): Definitions;
+    /**
+     * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.
+     *
+     * ```ts
+     * // codeblock-meta title="keepUnusedDataFor example"
+     *
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       query: () => 'posts',
+     *       // highlight-start
+     *       keepUnusedDataFor: 5
+     *       // highlight-end
+     *     })
+     *   })
+     * })
+     * ```
+     */
+    keepUnusedDataFor?: number;
+    /**
+     * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.
+     * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.
+     * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.
+     * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     */
+    refetchOnMountOrArgChange?: boolean | number;
+    /**
+     * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     *
+     * Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    refetchOnFocus?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     *
+     * Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    refetchOnReconnect?: boolean;
+    /**
+     * Defaults to `'delayed'`. This setting allows you to control when tags are invalidated after a mutation.
+     *
+     * - `'immediately'`: Queries are invalidated instantly after the mutation finished, even if they are running.
+     *   If the query provides tags that were invalidated while it ran, it won't be re-fetched.
+     * - `'delayed'`: Invalidation only happens after all queries and mutations are settled.
+     *   This ensures that queries are always invalidated correctly and automatically "batches" invalidations of concurrent mutations.
+     *   Note that if you constantly have some queries (or mutations) running, this can delay tag invalidations indefinitely.
+     */
+    invalidationBehavior?: 'delayed' | 'immediately';
+    /**
+     * A function that is passed every dispatched action. If this returns something other than `undefined`,
+     * that return value will be used to rehydrate fulfilled & errored queries.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="next-redux-wrapper rehydration example"
+     * import type { Action, PayloadAction } from '@reduxjs/toolkit'
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import { HYDRATE } from 'next-redux-wrapper'
+     *
+     * type RootState = any; // normally inferred from state
+     *
+     * function isHydrateAction(action: Action): action is PayloadAction<RootState> {
+     *   return action.type === HYDRATE
+     * }
+     *
+     * export const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   // highlight-start
+     *   extractRehydrationInfo(action, { reducerPath }): any {
+     *     if (isHydrateAction(action)) {
+     *       return action.payload[reducerPath]
+     *     }
+     *   },
+     *   // highlight-end
+     *   endpoints: (build) => ({
+     *     // omitted
+     *   }),
+     * })
+     * ```
+     */
+    extractRehydrationInfo?: (action: UnknownAction, { reducerPath, }: {
+        reducerPath: ReducerPath;
+    }) => undefined | CombinedState<NoInfer<Definitions>, NoInfer<TagTypes>, NoInfer<ReducerPath>>;
+    /**
+     * A function that is called when a schema validation fails.
+     *
+     * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).
+     *
+     * `NamedSchemaError` has the following properties:
+     * - `issues`: an array of issues that caused the validation to fail
+     * - `value`: the value that was passed to the schema
+     * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *     }),
+     *   }),
+     *   onSchemaFailure: (error, info) => {
+     *     console.error(error, info)
+     *   },
+     * })
+     * ```
+     */
+    onSchemaFailure?: SchemaFailureHandler;
+    /**
+     * Convert a schema validation failure into an error shape matching base query errors.
+     *
+     * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+     *     }),
+     *   }),
+     *   catchSchemaFailure: (error, info) => ({
+     *     status: "CUSTOM_ERROR",
+     *     error: error.schemaName + " failed validation",
+     *     data: error.issues,
+     *   }),
+     * })
+     * ```
+     */
+    catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;
+    /**
+     * Defaults to `false`.
+     *
+     * If set to `true`, will skip schema validation for all endpoints, unless overridden by the endpoint.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   skipSchemaValidation: process.env.NODE_ENV === "test", // skip schema validation in tests, since we'll be mocking the response
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    skipSchemaValidation?: boolean;
+}
+type CreateApi<Modules extends ModuleName> = {
+    /**
+     * Creates a service to use in your application. Contains only the basic redux logic (the core module).
+     *
+     * @link https://redux-toolkit.js.org/rtk-query/api/createApi
+     */
+    <BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never>(options: CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>): Api<BaseQuery, Definitions, ReducerPath, TagTypes, Modules>;
+};
+/**
+ * Builds a `createApi` method based on the provided `modules`.
+ *
+ * @link https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api
+ *
+ * @example
+ * ```ts
+ * const MyContext = React.createContext<ReactReduxContextValue | null>(null);
+ * const customCreateApi = buildCreateApi(
+ *   coreModule(),
+ *   reactHooksModule({
+ *     hooks: {
+ *       useDispatch: createDispatchHook(MyContext),
+ *       useSelector: createSelectorHook(MyContext),
+ *       useStore: createStoreHook(MyContext)
+ *     }
+ *   })
+ * );
+ * ```
+ *
+ * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints
+ * @returns A `createApi` method using the provided `modules`.
+ */
+declare function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(...modules: Modules): CreateApi<Modules[number]['name']>;
+
+type BuildThunksApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = Matchers<QueryThunk, Definition>;
+type BuildThunksApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = Matchers<InfiniteQueryThunk<any>, Definition>;
+type BuildThunksApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = Matchers<MutationThunk, Definition>;
+type EndpointThunk<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = Definition extends EndpointDefinition<infer QueryArg, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<ResultType, ATArg & {
+    originalArgs: QueryArg;
+}, ATConfig & {
+    rejectValue: BaseQueryError<BaseQueryFn>;
+}> : never : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<InfiniteData<ResultType, PageParam>, ATArg & {
+    originalArgs: QueryArg;
+}, ATConfig & {
+    rejectValue: BaseQueryError<BaseQueryFn>;
+}> : never : never;
+type PendingAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['pending']>;
+type FulfilledAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['fulfilled']>;
+type RejectedAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['rejected']>;
+type Matcher<M> = (value: any) => value is M;
+interface Matchers<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> {
+    matchPending: Matcher<PendingAction<Thunk, Definition>>;
+    matchFulfilled: Matcher<FulfilledAction<Thunk, Definition>>;
+    matchRejected: Matcher<RejectedAction<Thunk, Definition>>;
+}
+type QueryThunkArg = QuerySubstateIdentifier & StartQueryActionCreatorOptions & {
+    type: 'query';
+    originalArgs: unknown;
+    endpointName: string;
+};
+type InfiniteQueryThunkArg<D extends InfiniteQueryDefinition<any, any, any, any, any>> = QuerySubstateIdentifier & StartInfiniteQueryActionCreatorOptions<D> & {
+    type: `query`;
+    originalArgs: unknown;
+    endpointName: string;
+    param: unknown;
+    direction?: InfiniteQueryDirection;
+};
+type MutationThunkArg = {
+    type: 'mutation';
+    originalArgs: unknown;
+    endpointName: string;
+    track?: boolean;
+    fixedCacheKey?: string;
+};
+type ThunkResult = unknown;
+type ThunkApiMetaConfig = {
+    pendingMeta: {
+        startedTimeStamp: number;
+        [SHOULD_AUTOBATCH]: true;
+    };
+    fulfilledMeta: {
+        fulfilledTimeStamp: number;
+        baseQueryMeta: unknown;
+        [SHOULD_AUTOBATCH]: true;
+    };
+    rejectedMeta: {
+        baseQueryMeta: unknown;
+        [SHOULD_AUTOBATCH]: true;
+    };
+};
+type QueryThunk = AsyncThunk<ThunkResult, QueryThunkArg, ThunkApiMetaConfig>;
+type InfiniteQueryThunk<D extends InfiniteQueryDefinition<any, any, any, any, any>> = AsyncThunk<ThunkResult, InfiniteQueryThunkArg<D>, ThunkApiMetaConfig>;
+type MutationThunk = AsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig>;
+type MaybeDrafted<T> = T | Draft<T>;
+type Recipe<T> = (data: MaybeDrafted<T>) => void | MaybeDrafted<T>;
+type PatchQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, patches: readonly Patch[], updateProvided?: boolean) => ThunkAction<void, PartialState, any, UnknownAction>;
+type AllQueryKeys<Definitions extends EndpointDefinitions> = QueryKeys<Definitions> | InfiniteQueryKeys<Definitions>;
+type QueryArgFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryArgFrom<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryArgFrom<Definitions[EndpointName]> : never;
+type DataFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteData<ResultTypeFrom<Definitions[EndpointName]>, PageParamFrom<Definitions[EndpointName]>> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? ResultTypeFrom<Definitions[EndpointName]> : unknown;
+type UpsertThunkResult<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryActionCreatorResult<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryActionCreatorResult<Definitions[EndpointName]> : QueryActionCreatorResult<never>;
+type UpdateQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, updateRecipe: Recipe<DataFromAnyQueryDefinition<Definitions, EndpointName>>, updateProvided?: boolean) => ThunkAction<PatchCollection, PartialState, any, UnknownAction>;
+type UpsertQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, value: DataFromAnyQueryDefinition<Definitions, EndpointName>) => ThunkAction<UpsertThunkResult<Definitions, EndpointName>, PartialState, any, UnknownAction>;
+/**
+ * An object returned from dispatching a `api.util.updateQueryData` call.
+ */
+type PatchCollection = {
+    /**
+     * An `immer` Patch describing the cache update.
+     */
+    patches: Patch[];
+    /**
+     * An `immer` Patch to revert the cache update.
+     */
+    inversePatches: Patch[];
+    /**
+     * A function that will undo the cache update.
+     */
+    undo: () => void;
+};
+
+type SkipToken = typeof skipToken;
+/**
+ * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`
+ * instead of the query argument to get the same effect as if setting
+ * `skip: true` in the query options.
+ *
+ * Useful for scenarios where a query should be skipped when `arg` is `undefined`
+ * and TypeScript complains about it because `arg` is not allowed to be passed
+ * in as `undefined`, such as
+ *
+ * ```ts
+ * // codeblock-meta title="will error if the query argument is not allowed to be undefined" no-transpile
+ * useSomeQuery(arg, { skip: !!arg })
+ * ```
+ *
+ * ```ts
+ * // codeblock-meta title="using skipToken instead" no-transpile
+ * useSomeQuery(arg ?? skipToken)
+ * ```
+ *
+ * If passed directly into a query or mutation selector, that selector will always
+ * return an uninitialized state.
+ */
+export declare const skipToken: unique symbol;
+type BuildSelectorsApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {
+    select: QueryResultSelectorFactory<Definition, RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;
+};
+type BuildSelectorsApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {
+    select: InfiniteQueryResultSelectorFactory<Definition, RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;
+};
+type BuildSelectorsApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {
+    select: MutationResultSelectorFactory<Definition, RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;
+};
+type QueryResultSelectorFactory<Definition extends QueryDefinition<any, any, any, any>, RootState> = (queryArg: QueryArgFrom<Definition> | SkipToken) => (state: RootState) => QueryResultSelectorResult<Definition>;
+type QueryResultSelectorResult<Definition extends QueryDefinition<any, any, any, any>> = QuerySubState<Definition> & RequestStatusFlags;
+type InfiniteQueryResultSelectorFactory<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, RootState> = (queryArg: InfiniteQueryArgFrom<Definition> | SkipToken) => (state: RootState) => InfiniteQueryResultSelectorResult<Definition>;
+type InfiniteQueryResultFlags = {
+    hasNextPage: boolean;
+    hasPreviousPage: boolean;
+    isFetchingNextPage: boolean;
+    isFetchingPreviousPage: boolean;
+    isFetchNextPageError: boolean;
+    isFetchPreviousPageError: boolean;
+};
+type InfiniteQueryResultSelectorResult<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<Definition> & RequestStatusFlags & InfiniteQueryResultFlags;
+type MutationResultSelectorFactory<Definition extends MutationDefinition<any, any, any, any>, RootState> = (requestId: string | {
+    requestId: string | undefined;
+    fixedCacheKey: string | undefined;
+} | SkipToken) => (state: RootState) => MutationResultSelectorResult<Definition>;
+type MutationResultSelectorResult<Definition extends MutationDefinition<any, any, any, any>> = MutationSubState<Definition> & RequestStatusFlags;
+
+type BuildInitiateApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = {
+    initiate: StartQueryActionCreator<Definition>;
+};
+type BuildInitiateApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {
+    initiate: StartInfiniteQueryActionCreator<Definition>;
+};
+type BuildInitiateApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = {
+    initiate: StartMutationActionCreator<Definition>;
+};
+declare const forceQueryFnSymbol: unique symbol;
+type StartQueryActionCreatorOptions = {
+    subscribe?: boolean;
+    forceRefetch?: boolean | number;
+    subscriptionOptions?: SubscriptionOptions;
+    [forceQueryFnSymbol]?: () => QueryReturnValue;
+};
+type StartInfiniteQueryActionCreatorOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = StartQueryActionCreatorOptions & {
+    direction?: InfiniteQueryDirection;
+    param?: unknown;
+} & Partial<Pick<Partial<InfiniteQueryConfigOptions<ResultTypeFrom<D>, PageParamFrom<D>, InfiniteQueryArgFrom<D>>>, 'initialPageParam'>>;
+type StartQueryActionCreator<D extends QueryDefinition<any, any, any, any, any>> = (arg: QueryArgFrom<D>, options?: StartQueryActionCreatorOptions) => ThunkAction<QueryActionCreatorResult<D>, any, any, UnknownAction>;
+type StartInfiniteQueryActionCreator<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D>, options?: StartInfiniteQueryActionCreatorOptions<D>) => ThunkAction<InfiniteQueryActionCreatorResult<D>, any, any, UnknownAction>;
+type QueryActionCreatorFields = {
+    requestId: string;
+    subscriptionOptions: SubscriptionOptions | undefined;
+    abort(): void;
+    unsubscribe(): void;
+    updateSubscriptionOptions(options: SubscriptionOptions): void;
+    queryCacheKey: string;
+};
+type QueryActionCreatorResult<D extends QueryDefinition<any, any, any, any>> = SafePromise<QueryResultSelectorResult<D>> & QueryActionCreatorFields & {
+    arg: QueryArgFrom<D>;
+    unwrap(): Promise<ResultTypeFrom<D>>;
+    refetch(): QueryActionCreatorResult<D>;
+};
+type InfiniteQueryActionCreatorResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SafePromise<InfiniteQueryResultSelectorResult<D>> & QueryActionCreatorFields & {
+    arg: InfiniteQueryArgFrom<D>;
+    unwrap(): Promise<InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>>;
+    refetch(): InfiniteQueryActionCreatorResult<D>;
+};
+type StartMutationActionCreator<D extends MutationDefinition<any, any, any, any>> = (arg: QueryArgFrom<D>, options?: {
+    /**
+     * If this mutation should be tracked in the store.
+     * If you just want to manually trigger this mutation using `dispatch` and don't care about the
+     * result, state & potential errors being held in store, you can set this to false.
+     * (defaults to `true`)
+     */
+    track?: boolean;
+    fixedCacheKey?: string;
+}) => ThunkAction<MutationActionCreatorResult<D>, any, any, UnknownAction>;
+type MutationActionCreatorResult<D extends MutationDefinition<any, any, any, any>> = SafePromise<{
+    data: ResultTypeFrom<D>;
+    error?: undefined;
+} | {
+    data?: undefined;
+    error: Exclude<BaseQueryError<D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQuery : never>, undefined> | SerializedError;
+}> & {
+    /** @internal */
+    arg: {
+        /**
+         * The name of the given endpoint for the mutation
+         */
+        endpointName: string;
+        /**
+         * The original arguments supplied to the mutation call
+         */
+        originalArgs: QueryArgFrom<D>;
+        /**
+         * Whether the mutation is being tracked in the store.
+         */
+        track?: boolean;
+        fixedCacheKey?: string;
+    };
+    /**
+     * A unique string generated for the request sequence
+     */
+    requestId: string;
+    /**
+     * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation
+     * that was fired off from reaching the server, but only to assist in handling the response.
+     *
+     * Calling `abort()` prior to the promise resolving will force it to reach the error state with
+     * the serialized error:
+     * `{ name: 'AbortError', message: 'Aborted' }`
+     *
+     * @example
+     * ```ts
+     * const [updateUser] = useUpdateUserMutation();
+     *
+     * useEffect(() => {
+     *   const promise = updateUser(id);
+     *   promise
+     *     .unwrap()
+     *     .catch((err) => {
+     *       if (err.name === 'AbortError') return;
+     *       // else handle the unexpected error
+     *     })
+     *
+     *   return () => {
+     *     promise.abort();
+     *   }
+     * }, [id, updateUser])
+     * ```
+     */
+    abort(): void;
+    /**
+     * Unwraps a mutation call to provide the raw response/error.
+     *
+     * @remarks
+     * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap"
+     * addPost({ id: 1, name: 'Example' })
+     *   .unwrap()
+     *   .then((payload) => console.log('fulfilled', payload))
+     *   .catch((error) => console.error('rejected', error));
+     * ```
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap with async await"
+     * try {
+     *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();
+     *   console.log('fulfilled', payload)
+     * } catch (error) {
+     *   console.error('rejected', error);
+     * }
+     * ```
+     */
+    unwrap(): Promise<ResultTypeFrom<D>>;
+    /**
+     * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.
+     The value returned by the hook will reset to `isUninitialized` afterwards.
+     */
+    reset(): void;
+};
+
+type ReferenceCacheLifecycle = never;
+interface QueryBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends LifecycleApi<ReducerPath> {
+    /**
+     * Gets the current value of this cache entry.
+     */
+    getCacheEntry(): QueryResultSelectorResult<{
+        type: DefinitionType.query;
+    } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;
+    /**
+     * Updates the current cache entry value.
+     * For documentation see `api.util.updateQueryData`.
+     */
+    updateCachedData(updateRecipe: Recipe<ResultType>): PatchCollection;
+}
+type MutationBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = LifecycleApi<ReducerPath> & {
+    /**
+     * Gets the current value of this cache entry.
+     */
+    getCacheEntry(): MutationResultSelectorResult<{
+        type: DefinitionType.mutation;
+    } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;
+};
+type LifecycleApi<ReducerPath extends string = string> = {
+    /**
+     * The dispatch method for the store
+     */
+    dispatch: ThunkDispatch<any, any, UnknownAction>;
+    /**
+     * A method to get the current state
+     */
+    getState(): RootState<any, any, ReducerPath>;
+    /**
+     * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.
+     */
+    extra: unknown;
+    /**
+     * A unique ID generated for the mutation
+     */
+    requestId: string;
+};
+type CacheLifecyclePromises<ResultType = unknown, MetaType = unknown> = {
+    /**
+     * Promise that will resolve with the first value for this cache key.
+     * This allows you to `await` until an actual value is in cache.
+     *
+     * If the cache entry is removed from the cache before any value has ever
+     * been resolved, this Promise will reject with
+     * `new Error('Promise never resolved before cacheEntryRemoved.')`
+     * to prevent memory leaks.
+     * You can just re-throw that error (or not handle it at all) -
+     * it will be caught outside of `cacheEntryAdded`.
+     *
+     * If you don't interact with this promise, it will not throw.
+     */
+    cacheDataLoaded: PromiseWithKnownReason<{
+        /**
+         * The (transformed) query result.
+         */
+        data: ResultType;
+        /**
+         * The `meta` returned by the `baseQuery`
+         */
+        meta: MetaType;
+    }, typeof neverResolvedError>;
+    /**
+     * Promise that allows you to wait for the point in time when the cache entry
+     * has been removed from the cache, by not being used/subscribed to any more
+     * in the application for too long or by dispatching `api.util.resetApiState`.
+     */
+    cacheEntryRemoved: Promise<void>;
+};
+interface QueryCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>> {
+}
+type MutationCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>>;
+type CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {
+    onCacheEntryAdded?(arg: QueryArg, api: QueryCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;
+};
+type CacheLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;
+type CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {
+    onCacheEntryAdded?(arg: QueryArg, api: MutationCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;
+};
+declare const neverResolvedError: Error & {
+    message: "Promise never resolved before cacheEntryRemoved.";
+};
+
+type ReferenceQueryLifecycle = never;
+type QueryLifecyclePromises<ResultType, BaseQuery extends BaseQueryFn> = {
+    /**
+     * Promise that will resolve with the (transformed) query result.
+     *
+     * If the query fails, this promise will reject with the error.
+     *
+     * This allows you to `await` for the query to finish.
+     *
+     * If you don't interact with this promise, it will not throw.
+     */
+    queryFulfilled: PromiseWithKnownReason<{
+        /**
+         * The (transformed) query result.
+         */
+        data: ResultType;
+        /**
+         * The `meta` returned by the `baseQuery`
+         */
+        meta: BaseQueryMeta<BaseQuery>;
+    }, QueryFulfilledRejectionReason<BaseQuery>>;
+};
+type QueryFulfilledRejectionReason<BaseQuery extends BaseQueryFn> = {
+    error: BaseQueryError<BaseQuery>;
+    /**
+     * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.
+     */
+    isUnhandledError: false;
+    /**
+     * The `meta` returned by the `baseQuery`
+     */
+    meta: BaseQueryMeta<BaseQuery>;
+} | {
+    error: unknown;
+    meta?: undefined;
+    /**
+     * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn`, `transformResponse` or `transformErrorResponse` throwing an error instead of handling it properly.
+     * There can not be made any assumption about the shape of `error`.
+     */
+    isUnhandledError: true;
+};
+type QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {
+    /**
+     * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).
+     *
+     * Can be used to perform side-effects throughout the lifecycle of the query.
+     *
+     * @example
+     * ```ts
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+     * import { messageCreated } from './notificationsSlice
+     * export interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({
+     *     baseUrl: '/',
+     *   }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, number>({
+     *       query: (id) => `post/${id}`,
+     *       async onQueryStarted(id, { dispatch, queryFulfilled }) {
+     *         // `onStart` side-effect
+     *         dispatch(messageCreated('Fetching posts...'))
+     *         try {
+     *           const { data } = await queryFulfilled
+     *           // `onSuccess` side-effect
+     *           dispatch(messageCreated('Posts received!'))
+     *         } catch (err) {
+     *           // `onError` side-effect
+     *           dispatch(messageCreated('Error fetching posts!'))
+     *         }
+     *       }
+     *     }),
+     *   }),
+     * })
+     * ```
+     */
+    onQueryStarted?(queryArgument: QueryArg, queryLifeCycleApi: QueryLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;
+};
+type QueryLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;
+type QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {
+    /**
+     * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).
+     *
+     * Can be used for `optimistic updates`.
+     *
+     * @example
+     *
+     * ```ts
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+     * export interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({
+     *     baseUrl: '/',
+     *   }),
+     *   tagTypes: ['Post'],
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, number>({
+     *       query: (id) => `post/${id}`,
+     *       providesTags: ['Post'],
+     *     }),
+     *     updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({
+     *       query: ({ id, ...patch }) => ({
+     *         url: `post/${id}`,
+     *         method: 'PATCH',
+     *         body: patch,
+     *       }),
+     *       invalidatesTags: ['Post'],
+     *       async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {
+     *         const patchResult = dispatch(
+     *           api.util.updateQueryData('getPost', id, (draft) => {
+     *             Object.assign(draft, patch)
+     *           })
+     *         )
+     *         try {
+     *           await queryFulfilled
+     *         } catch {
+     *           patchResult.undo()
+     *         }
+     *       },
+     *     }),
+     *   }),
+     * })
+     * ```
+     */
+    onQueryStarted?(queryArgument: QueryArg, mutationLifeCycleApi: MutationLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;
+};
+interface QueryLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, QueryLifecyclePromises<ResultType, BaseQuery> {
+}
+type MutationLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & QueryLifecyclePromises<ResultType, BaseQuery>;
+/**
+ * Provides a way to define a strongly-typed version of
+ * {@linkcode QueryLifecycleQueryExtraOptions.onQueryStarted | onQueryStarted}
+ * for a specific query.
+ *
+ * @example
+ * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>
+ *
+ * ```ts
+ * import type { TypedQueryOnQueryStarted } from '@reduxjs/toolkit/query'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+ *
+ * type Post = {
+ *   id: number
+ *   title: string
+ *   userId: number
+ * }
+ *
+ * type PostsApiResponse = {
+ *   posts: Post[]
+ *   total: number
+ *   skip: number
+ *   limit: number
+ * }
+ *
+ * type QueryArgument = number | undefined
+ *
+ * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+ *
+ * const baseApiSlice = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),
+ *   reducerPath: 'postsApi',
+ *   tagTypes: ['Posts'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsApiResponse, void>({
+ *       query: () => `/posts`,
+ *     }),
+ *
+ *     getPostById: build.query<Post, QueryArgument>({
+ *       query: (postId) => `/posts/${postId}`,
+ *     }),
+ *   }),
+ * })
+ *
+ * const updatePostOnFulfilled: TypedQueryOnQueryStarted<
+ *   PostsApiResponse,
+ *   QueryArgument,
+ *   BaseQueryFunction,
+ *   'postsApi'
+ * > = async (queryArgument, { dispatch, queryFulfilled }) => {
+ *   const result = await queryFulfilled
+ *
+ *   const { posts } = result.data
+ *
+ *   // Pre-fill the individual post entries with the results
+ *   // from the list endpoint query
+ *   dispatch(
+ *     baseApiSlice.util.upsertQueryEntries(
+ *       posts.map((post) => ({
+ *         endpointName: 'getPostById',
+ *         arg: post.id,
+ *         value: post,
+ *       })),
+ *     ),
+ *   )
+ * }
+ *
+ * export const extendedApiSlice = baseApiSlice.injectEndpoints({
+ *   endpoints: (build) => ({
+ *     getPostsByUserId: build.query<PostsApiResponse, QueryArgument>({
+ *       query: (userId) => `/posts/user/${userId}`,
+ *
+ *       onQueryStarted: updatePostOnFulfilled,
+ *     }),
+ *   }),
+ * })
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArgumentType - The type of the argument passed into the query.
+ * @template BaseQueryFunctionType - The type of the base query function being used.
+ * @template ReducerPath - The type representing the `reducerPath` for the API slice.
+ *
+ * @since 2.4.0
+ * @public
+ */
+type TypedQueryOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];
+/**
+ * Provides a way to define a strongly-typed version of
+ * {@linkcode QueryLifecycleMutationExtraOptions.onQueryStarted | onQueryStarted}
+ * for a specific mutation.
+ *
+ * @example
+ * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>
+ *
+ * ```ts
+ * import type { TypedMutationOnQueryStarted } from '@reduxjs/toolkit/query'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+ *
+ * type Post = {
+ *   id: number
+ *   title: string
+ *   userId: number
+ * }
+ *
+ * type PostsApiResponse = {
+ *   posts: Post[]
+ *   total: number
+ *   skip: number
+ *   limit: number
+ * }
+ *
+ * type QueryArgument = Pick<Post, 'id'> & Partial<Post>
+ *
+ * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+ *
+ * const baseApiSlice = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),
+ *   reducerPath: 'postsApi',
+ *   tagTypes: ['Posts'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsApiResponse, void>({
+ *       query: () => `/posts`,
+ *     }),
+ *
+ *     getPostById: build.query<Post, number>({
+ *       query: (postId) => `/posts/${postId}`,
+ *     }),
+ *   }),
+ * })
+ *
+ * const updatePostOnFulfilled: TypedMutationOnQueryStarted<
+ *   Post,
+ *   QueryArgument,
+ *   BaseQueryFunction,
+ *   'postsApi'
+ * > = async ({ id, ...patch }, { dispatch, queryFulfilled }) => {
+ *   const patchCollection = dispatch(
+ *     baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {
+ *       Object.assign(draftPost, patch)
+ *     }),
+ *   )
+ *
+ *   try {
+ *     await queryFulfilled
+ *   } catch {
+ *     patchCollection.undo()
+ *   }
+ * }
+ *
+ * export const extendedApiSlice = baseApiSlice.injectEndpoints({
+ *   endpoints: (build) => ({
+ *     addPost: build.mutation<Post, Omit<QueryArgument, 'id'>>({
+ *       query: (body) => ({
+ *         url: `posts/add`,
+ *         method: 'POST',
+ *         body,
+ *       }),
+ *
+ *       onQueryStarted: updatePostOnFulfilled,
+ *     }),
+ *
+ *     updatePost: build.mutation<Post, QueryArgument>({
+ *       query: ({ id, ...patch }) => ({
+ *         url: `post/${id}`,
+ *         method: 'PATCH',
+ *         body: patch,
+ *       }),
+ *
+ *       onQueryStarted: updatePostOnFulfilled,
+ *     }),
+ *   }),
+ * })
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArgumentType - The type of the argument passed into the query.
+ * @template BaseQueryFunctionType - The type of the base query function being used.
+ * @template ReducerPath - The type representing the `reducerPath` for the API slice.
+ *
+ * @since 2.4.0
+ * @public
+ */
+type TypedMutationOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleMutationExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];
+
+/**
+ * A typesafe single entry to be upserted into the cache
+ */
+type NormalizedQueryUpsertEntry<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = {
+    endpointName: EndpointName;
+    arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>;
+    value: DataFromAnyQueryDefinition<Definitions, EndpointName>;
+};
+/**
+ * The internal version that is not typesafe since we can't carry the generics through `createSlice`
+ */
+type NormalizedQueryUpsertEntryPayload = {
+    endpointName: string;
+    arg: unknown;
+    value: unknown;
+};
+type ProcessedQueryUpsertEntry = {
+    queryDescription: QueryThunkArg;
+    value: unknown;
+};
+/**
+ * A typesafe representation of a util action creator that accepts cache entry descriptions to upsert
+ */
+type UpsertEntries<Definitions extends EndpointDefinitions> = (<EndpointNames extends Array<AllQueryKeys<Definitions>>>(entries: [
+    ...{
+        [I in keyof EndpointNames]: NormalizedQueryUpsertEntry<Definitions, EndpointNames[I]>;
+    }
+]) => PayloadAction<NormalizedQueryUpsertEntryPayload[]>) & {
+    match: (action: unknown) => action is PayloadAction<NormalizedQueryUpsertEntryPayload[]>;
+};
+declare function buildSlice({ reducerPath, queryThunk, mutationThunk, serializeQueryArgs, context: { endpointDefinitions: definitions, apiUid, extractRehydrationInfo, hasRehydrationInfo, }, assertTagType, config, }: {
+    reducerPath: string;
+    queryThunk: QueryThunk;
+    infiniteQueryThunk: InfiniteQueryThunk<any>;
+    mutationThunk: MutationThunk;
+    serializeQueryArgs: InternalSerializeQueryArgs;
+    context: ApiContext<EndpointDefinitions>;
+    assertTagType: AssertTagTypes;
+    config: Omit<ConfigState<string>, 'online' | 'focused' | 'middlewareRegistered'>;
+}): {
+    reducer: redux.Reducer<{
+        queries: QueryState<any>;
+        mutations: MutationState<any>;
+        provided: InvalidationState<string>;
+        subscriptions: SubscriptionState;
+        config: ConfigState<string>;
+    }, redux.UnknownAction, Partial<{
+        queries: QueryState<any> | undefined;
+        mutations: MutationState<any> | undefined;
+        provided: InvalidationState<string> | undefined;
+        subscriptions: SubscriptionState | undefined;
+        config: ConfigState<string> | undefined;
+    }>>;
+    actions: {
+        resetApiState: _reduxjs_toolkit.ActionCreatorWithoutPayload<`${string}/resetApiState`>;
+        updateProvidedBy: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: {
+            queryCacheKey: QueryCacheKey;
+            providedTags: readonly FullTagDescription<string>[];
+        }[]], {
+            queryCacheKey: QueryCacheKey;
+            providedTags: readonly FullTagDescription<string>[];
+        }[], `${string}/invalidation/updateProvidedBy`, never, unknown>;
+        removeMutationResult: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: MutationSubstateIdentifier], MutationSubstateIdentifier, `${string}/mutations/removeMutationResult`, never, unknown>;
+        subscriptionsUpdated: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: Patch[]], Patch[], `${string}/internalSubscriptions/subscriptionsUpdated`, never, unknown>;
+        updateSubscriptionOptions: _reduxjs_toolkit.ActionCreatorWithPayload<{
+            endpointName: string;
+            requestId: string;
+            options: Subscribers[number];
+        } & QuerySubstateIdentifier, `${string}/subscriptions/updateSubscriptionOptions`>;
+        unsubscribeQueryResult: _reduxjs_toolkit.ActionCreatorWithPayload<{
+            requestId: string;
+        } & QuerySubstateIdentifier, `${string}/subscriptions/unsubscribeQueryResult`>;
+        internal_getRTKQSubscriptions: _reduxjs_toolkit.ActionCreatorWithoutPayload<`${string}/subscriptions/internal_getRTKQSubscriptions`>;
+        removeQueryResult: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: QuerySubstateIdentifier], QuerySubstateIdentifier, `${string}/queries/removeQueryResult`, never, unknown>;
+        cacheEntriesUpserted: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: NormalizedQueryUpsertEntryPayload[]], ProcessedQueryUpsertEntry[], `${string}/queries/cacheEntriesUpserted`, never, {
+            RTK_autoBatch: boolean;
+            requestId: string;
+            timestamp: number;
+        }>;
+        queryResultPatched: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: QuerySubstateIdentifier & {
+            patches: readonly Patch[];
+        }], QuerySubstateIdentifier & {
+            patches: readonly Patch[];
+        }, `${string}/queries/queryResultPatched`, never, unknown>;
+        middlewareRegistered: _reduxjs_toolkit.ActionCreatorWithPayload<string, `${string}/config/middlewareRegistered`>;
+    };
+};
+type SliceActions = ReturnType<typeof buildSlice>['actions'];
+
+declare const onFocus: ActionCreatorWithoutPayload<"__rtkq/focused">;
+declare const onFocusLost: ActionCreatorWithoutPayload<"__rtkq/unfocused">;
+declare const onOnline: ActionCreatorWithoutPayload<"__rtkq/online">;
+declare const onOffline: ActionCreatorWithoutPayload<"__rtkq/offline">;
+/**
+ * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.
+ * It requires the dispatch method from your store.
+ * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,
+ * but you have the option of providing a callback for more granular control.
+ *
+ * @example
+ * ```ts
+ * setupListeners(store.dispatch)
+ * ```
+ *
+ * @param dispatch - The dispatch method from your store
+ * @param customHandler - An optional callback for more granular control over listener behavior
+ * @returns Return value of the handler.
+ * The default handler returns an `unsubscribe` method that can be called to remove the listeners.
+ */
+declare function setupListeners(dispatch: ThunkDispatch<any, any, any>, customHandler?: (dispatch: ThunkDispatch<any, any, any>, actions: {
+    onFocus: typeof onFocus;
+    onFocusLost: typeof onFocusLost;
+    onOnline: typeof onOnline;
+    onOffline: typeof onOffline;
+}) => () => void): () => void;
+
+/**
+ * Note: this file should import all other files for type discovery and declaration merging
+ */
+
+/**
+ * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_
+ * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value
+ *
+ * @overloadSummary
+ * `force`
+ * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.
+ */
+type PrefetchOptions = {
+    ifOlderThan?: false | number;
+} | {
+    force?: boolean;
+};
+export declare const coreModuleName: unique symbol;
+type CoreModule = typeof coreModuleName | ReferenceCacheLifecycle | ReferenceQueryLifecycle | ReferenceCacheCollection;
+type ThunkWithReturnValue<T> = ThunkAction<T, any, any, UnknownAction>;
+interface ApiModules<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {
+    [coreModuleName]: {
+        /**
+         * This api's reducer should be mounted at `store[api.reducerPath]`.
+         *
+         * @example
+         * ```ts
+         * configureStore({
+         *   reducer: {
+         *     [api.reducerPath]: api.reducer,
+         *   },
+         *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),
+         * })
+         * ```
+         */
+        reducerPath: ReducerPath;
+        /**
+         * Internal actions not part of the public API. Note: These are subject to change at any given time.
+         */
+        internalActions: InternalActions;
+        /**
+         *  A standard redux reducer that enables core functionality. Make sure it's included in your store.
+         *
+         * @example
+         * ```ts
+         * configureStore({
+         *   reducer: {
+         *     [api.reducerPath]: api.reducer,
+         *   },
+         *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),
+         * })
+         * ```
+         */
+        reducer: Reducer<CombinedState<Definitions, TagTypes, ReducerPath>, UnknownAction>;
+        /**
+         * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.
+         *
+         * @example
+         * ```ts
+         * configureStore({
+         *   reducer: {
+         *     [api.reducerPath]: api.reducer,
+         *   },
+         *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),
+         * })
+         * ```
+         */
+        middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>>;
+        /**
+         * A collection of utility thunks for various situations.
+         */
+        util: {
+            /**
+             * A thunk that (if dispatched) will return a specific running query, identified
+             * by `endpointName` and `arg`.
+             * If that query is not running, dispatching the thunk will result in `undefined`.
+             *
+             * Can be used to await a specific query triggered in any way,
+             * including via hook calls or manually dispatching `initiate` actions.
+             *
+             * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+             */
+            getRunningQueryThunk<EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>): ThunkWithReturnValue<QueryActionCreatorResult<Definitions[EndpointName] & {
+                type: 'query';
+            }> | InfiniteQueryActionCreatorResult<Definitions[EndpointName] & {
+                type: 'infinitequery';
+            }> | undefined>;
+            /**
+             * A thunk that (if dispatched) will return a specific running mutation, identified
+             * by `endpointName` and `fixedCacheKey` or `requestId`.
+             * If that mutation is not running, dispatching the thunk will result in `undefined`.
+             *
+             * Can be used to await a specific mutation triggered in any way,
+             * including via hook trigger functions or manually dispatching `initiate` actions.
+             *
+             * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+             */
+            getRunningMutationThunk<EndpointName extends MutationKeys<Definitions>>(endpointName: EndpointName, fixedCacheKeyOrRequestId: string): ThunkWithReturnValue<MutationActionCreatorResult<Definitions[EndpointName] & {
+                type: 'mutation';
+            }> | undefined>;
+            /**
+             * A thunk that (if dispatched) will return all running queries.
+             *
+             * Useful for SSR scenarios to await all running queries triggered in any way,
+             * including via hook calls or manually dispatching `initiate` actions.
+             *
+             * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+             */
+            getRunningQueriesThunk(): ThunkWithReturnValue<Array<QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>>;
+            /**
+             * A thunk that (if dispatched) will return all running mutations.
+             *
+             * Useful for SSR scenarios to await all running mutations triggered in any way,
+             * including via hook calls or manually dispatching `initiate` actions.
+             *
+             * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+             */
+            getRunningMutationsThunk(): ThunkWithReturnValue<Array<MutationActionCreatorResult<any>>>;
+            /**
+             * A Redux thunk that can be used to manually trigger pre-fetching of data.
+             *
+             * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.
+             *
+             * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.
+             *
+             * @example
+             *
+             * ```ts no-transpile
+             * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))
+             * ```
+             */
+            prefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction>;
+            /**
+             * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.
+             *
+             * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and an `updateRecipe` callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.
+             *
+             * The thunk executes _synchronously_, and returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).
+             *
+             * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, arg, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.
+             *
+             * Note that the first two arguments (`endpointName` and `arg`) are used to determine which existing cache entry to update. If no existing cache entry is found, the `updateRecipe` callback will not run.
+             *
+             * @example
+             *
+             * ```ts
+             * const patchCollection = dispatch(
+             *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {
+             *     draftPosts.push({ id: 1, name: 'Teddy' })
+             *   })
+             * )
+             * ```
+             */
+            updateQueryData: UpdateQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;
+            /**
+             * A Redux thunk action creator that, when dispatched, acts as an artificial API request to upsert a value into the cache.
+             *
+             * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and the data to upsert.
+             *
+             * If no cache entry for that cache key exists, a cache entry will be created and the data added. If a cache entry already exists, this will _overwrite_ the existing cache entry data.
+             *
+             * The thunk executes _asynchronously_, and returns a promise that resolves when the store has been updated.
+             *
+             * If dispatched while an actual request is in progress, both the upsert and request will be handled as soon as they resolve, resulting in a "last result wins" update behavior.
+             *
+             * @example
+             *
+             * ```ts
+             * await dispatch(
+             *   api.util.upsertQueryData('getPost', {id: 1}, {id: 1, text: "Hello!"})
+             * )
+             * ```
+             */
+            upsertQueryData: UpsertQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;
+            /**
+             * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.
+             *
+             * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.
+             *
+             * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.
+             *
+             * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.
+             *
+             * @example
+             * ```ts
+             * const patchCollection = dispatch(
+             *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {
+             *     draftPosts.push({ id: 1, name: 'Teddy' })
+             *   })
+             * )
+             *
+             * // later
+             * dispatch(
+             *   api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)
+             * )
+             *
+             * // or
+             * patchCollection.undo()
+             * ```
+             */
+            patchQueryData: PatchQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;
+            /**
+             * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.
+             *
+             * @example
+             *
+             * ```ts
+             * dispatch(api.util.resetApiState())
+             * ```
+             */
+            resetApiState: SliceActions['resetApiState'];
+            upsertQueryEntries: UpsertEntries<Definitions>;
+            /**
+             * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).
+             *
+             * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.
+             *
+             * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.
+             *
+             * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:
+             *
+             * - `[TagType]`
+             * - `[{ type: TagType }]`
+             * - `[{ type: TagType, id: number | string }]`
+             *
+             * @example
+             *
+             * ```ts
+             * dispatch(api.util.invalidateTags(['Post']))
+             * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))
+             * dispatch(
+             *   api.util.invalidateTags([
+             *     { type: 'Post', id: 1 },
+             *     { type: 'Post', id: 'LIST' },
+             *   ])
+             * )
+             * ```
+             */
+            invalidateTags: ActionCreatorWithPayload<Array<TagDescription<TagTypes> | null | undefined>, string>;
+            /**
+             * A function to select all `{ endpointName, originalArgs, queryCacheKey }` combinations that would be invalidated by a specific set of tags.
+             *
+             * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.
+             */
+            selectInvalidatedBy: (state: RootState<Definitions, string, ReducerPath>, tags: ReadonlyArray<TagDescription<TagTypes> | null | undefined>) => Array<{
+                endpointName: string;
+                originalArgs: any;
+                queryCacheKey: string;
+            }>;
+            /**
+             * A function to select all arguments currently cached for a given endpoint.
+             *
+             * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.
+             */
+            selectCachedArgsForQuery: <QueryName extends AllQueryKeys<Definitions>>(state: RootState<Definitions, string, ReducerPath>, queryName: QueryName) => Array<QueryArgFromAnyQuery<Definitions[QueryName]>>;
+        };
+        /**
+         * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.
+         */
+        endpoints: {
+            [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? ApiEndpointQuery<Definitions[K], Definitions> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? ApiEndpointMutation<Definitions[K], Definitions> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? ApiEndpointInfiniteQuery<Definitions[K], Definitions> : never;
+        };
+    };
+}
+interface ApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> extends BuildThunksApiEndpointQuery<Definition>, BuildInitiateApiEndpointQuery<Definition>, BuildSelectorsApiEndpointQuery<Definition, Definitions> {
+    name: string;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types: NonNullable<Definition['Types']>;
+}
+interface ApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> extends BuildThunksApiEndpointInfiniteQuery<Definition>, BuildInitiateApiEndpointInfiniteQuery<Definition>, BuildSelectorsApiEndpointInfiniteQuery<Definition, Definitions> {
+    name: string;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types: NonNullable<Definition['Types']>;
+}
+interface ApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> extends BuildThunksApiEndpointMutation<Definition>, BuildInitiateApiEndpointMutation<Definition>, BuildSelectorsApiEndpointMutation<Definition, Definitions> {
+    name: string;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types: NonNullable<Definition['Types']>;
+}
+type ListenerActions = {
+    /**
+     * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior
+     * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners
+     */
+    onOnline: typeof onOnline;
+    onOffline: typeof onOffline;
+    /**
+     * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior
+     * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners
+     */
+    onFocus: typeof onFocus;
+    onFocusLost: typeof onFocusLost;
+};
+type InternalActions = SliceActions & ListenerActions;
+interface CoreModuleOptions {
+    /**
+     * A selector creator (usually from `reselect`, or matching the same signature)
+     */
+    createSelector?: typeof createSelector;
+}
+/**
+ * Creates a module containing the basic redux logic for use with `buildCreateApi`.
+ *
+ * @example
+ * ```ts
+ * const createBaseApi = buildCreateApi(coreModule());
+ * ```
+ */
+declare const coreModule: ({ createSelector, }?: CoreModuleOptions) => Module<CoreModule>;
+
+declare const createApi: CreateApi<typeof coreModuleName>;
+
+type ModuleName = keyof ApiModules<any, any, any, any>;
+type Module<Name extends ModuleName> = {
+    name: Name;
+    init<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string>(api: Api<BaseQuery, EndpointDefinitions, ReducerPath, TagTypes, ModuleName>, options: WithRequiredProp<CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>, 'reducerPath' | 'serializeQueryArgs' | 'keepUnusedDataFor' | 'refetchOnMountOrArgChange' | 'refetchOnFocus' | 'refetchOnReconnect' | 'invalidationBehavior' | 'tagTypes'>, context: ApiContext<Definitions>): {
+        injectEndpoint(endpointName: string, definition: EndpointDefinition<any, any, any, any>): void;
+    };
+};
+interface ApiContext<Definitions extends EndpointDefinitions> {
+    apiUid: string;
+    endpointDefinitions: Definitions;
+    batch(cb: () => void): void;
+    extractRehydrationInfo: (action: UnknownAction) => CombinedState<any, any, any> | undefined;
+    hasRehydrationInfo: (action: UnknownAction) => boolean;
+}
+type Api<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string, Enhancers extends ModuleName = CoreModule> = UnionToIntersection<ApiModules<BaseQuery, Definitions, ReducerPath, TagTypes>[Enhancers]> & {
+    /**
+     * A function to inject the endpoints into the original API, but also give you that same API with correct types for these endpoints back. Useful with code-splitting.
+     */
+    injectEndpoints<NewDefinitions extends EndpointDefinitions>(_: {
+        endpoints: (build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>) => NewDefinitions;
+        /**
+         * Optionally allows endpoints to be overridden if defined by multiple `injectEndpoints` calls.
+         *
+         * If set to `true`, will override existing endpoints with the new definition.
+         * If set to `'throw'`, will throw an error if an endpoint is redefined with a different definition.
+         * If set to `false` (or unset), will not override existing endpoints with the new definition, and log a warning in development.
+         */
+        overrideExisting?: boolean | 'throw';
+    }): Api<BaseQuery, Definitions & NewDefinitions, ReducerPath, TagTypes, Enhancers>;
+    /**
+     *A function to enhance a generated API with additional information. Useful with code-generation.
+     */
+    enhanceEndpoints<NewTagTypes extends string = never, NewDefinitions extends EndpointDefinitions = never>(_: {
+        addTagTypes?: readonly NewTagTypes[];
+        endpoints?: UpdateDefinitions<Definitions, TagTypes | NoInfer<NewTagTypes>, NewDefinitions> extends infer NewDefinitions ? {
+            [K in keyof NewDefinitions]?: Partial<NewDefinitions[K]> | ((definition: NewDefinitions[K]) => void);
+        } : never;
+    }): Api<BaseQuery, UpdateDefinitions<Definitions, TagTypes | NewTagTypes, NewDefinitions>, ReducerPath, TagTypes | NewTagTypes, Enhancers>;
+};
+
+type PromiseWithKnownReason<T, R> = Omit<Promise<T>, 'then' | 'catch'> & {
+    /**
+     * Attaches callbacks for the resolution and/or rejection of the Promise.
+     * @param onfulfilled The callback to execute when the Promise is resolved.
+     * @param onrejected The callback to execute when the Promise is rejected.
+     * @returns A Promise for the completion of which ever callback is executed.
+     */
+    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: R) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;
+    /**
+     * Attaches a callback for only the rejection of the Promise.
+     * @param onrejected The callback to execute when the Promise is rejected.
+     * @returns A Promise for the completion of the callback.
+     */
+    catch<TResult = never>(onrejected?: ((reason: R) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>;
+};
+
+type ReferenceCacheCollection = never;
+type CacheCollectionQueryExtraOptions = {
+    /**
+     * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_
+     *
+     * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.
+     */
+    keepUnusedDataFor?: number;
+};
+
+export declare const _NEVER: unique symbol;
+type NEVER = typeof _NEVER;
+/**
+ * Creates a "fake" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.
+ * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.
+ */
+declare function fakeBaseQuery<ErrorType>(): BaseQueryFn<void, NEVER, ErrorType, {}>;
+
+declare class NamedSchemaError extends SchemaError {
+    readonly value: any;
+    readonly schemaName: string;
+    readonly _bqMeta: any;
+    constructor(issues: readonly StandardSchemaV1.Issue[], value: any, schemaName: string, _bqMeta: any);
+}
+
+declare const rawResultType: unique symbol;
+declare const resultType: unique symbol;
+declare const baseQuery: unique symbol;
+interface SchemaFailureInfo {
+    endpoint: string;
+    arg: any;
+    type: 'query' | 'mutation';
+    queryCacheKey?: string;
+}
+type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;
+type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;
+type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {
+    /**
+     * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="query example"
+     *
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   tagTypes: ['Post'],
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       // highlight-start
+     *       query: () => 'posts',
+     *       // highlight-end
+     *     }),
+     *     addPost: build.mutation<Post, Partial<Post>>({
+     *      // highlight-start
+     *      query: (body) => ({
+     *        url: `posts`,
+     *        method: 'POST',
+     *        body,
+     *      }),
+     *      // highlight-end
+     *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],
+     *    }),
+     *   })
+     * })
+     * ```
+     */
+    query(arg: QueryArg): BaseQueryArg<BaseQuery>;
+    queryFn?: never;
+    /**
+     * A function to manipulate the data returned by a query or mutation.
+     */
+    transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;
+    /**
+     * A function to manipulate the data returned by a failed query or mutation.
+     */
+    transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;
+    /**
+     * A schema for the result *before* it's passed to `transformResponse`.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const postSchema = v.object({ id: v.number(), name: v.string() })
+     * type Post = v.InferOutput<typeof postSchema>
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPostName: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       rawResponseSchema: postSchema,
+     *       transformResponse: (post) => post.name,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    rawResponseSchema?: StandardSchemaV1<RawResultType>;
+    /**
+     * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     * import {customBaseQuery, baseQueryErrorSchema} from "./customBaseQuery"
+     *
+     * const api = createApi({
+     *   baseQuery: customBaseQuery,
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       rawErrorResponseSchema: baseQueryErrorSchema,
+     *       transformErrorResponse: (error) => error.data,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;
+};
+type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {
+    /**
+     * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Basic queryFn example"
+     *
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       query: () => 'posts',
+     *     }),
+     *     flipCoin: build.query<'heads' | 'tails', void>({
+     *       // highlight-start
+     *       queryFn(arg, queryApi, extraOptions, baseQuery) {
+     *         const randomVal = Math.random()
+     *         if (randomVal < 0.45) {
+     *           return { data: 'heads' }
+     *         }
+     *         if (randomVal < 0.9) {
+     *           return { data: 'tails' }
+     *         }
+     *         return { error: { status: 500, statusText: 'Internal Server Error', data: "Coin landed on its edge!" } }
+     *       }
+     *       // highlight-end
+     *     })
+     *   })
+     * })
+     * ```
+     */
+    queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;
+    query?: never;
+    transformResponse?: never;
+    transformErrorResponse?: never;
+    rawResponseSchema?: never;
+    rawErrorResponseSchema?: never;
+};
+type BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {
+    QueryArg: QueryArg;
+    BaseQuery: BaseQuery;
+    ResultType: ResultType;
+};
+interface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {
+    /**
+     * A schema for the arguments to be passed to the `query` or `queryFn`.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       argSchema: v.object({ id: v.number() }),
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    argSchema?: StandardSchemaV1<QueryArg>;
+    /**
+     * A schema for the result (including `transformResponse` if provided).
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const postSchema = v.object({ id: v.number(), name: v.string() })
+     * type Post = v.InferOutput<typeof postSchema>
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: postSchema,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    responseSchema?: StandardSchemaV1<ResultType>;
+    /**
+     * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     * import { customBaseQuery, baseQueryErrorSchema } from "./customBaseQuery"
+     *
+     * const api = createApi({
+     *   baseQuery: customBaseQuery,
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       errorResponseSchema: baseQueryErrorSchema,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;
+    /**
+     * A schema for the `meta` property returned by the `query` or `queryFn`.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     * import { customBaseQuery, baseQueryMetaSchema } from "./customBaseQuery"
+     *
+     * const api = createApi({
+     *   baseQuery: customBaseQuery,
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       metaSchema: baseQueryMetaSchema,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;
+    /**
+     * Defaults to `true`.
+     *
+     * Most apps should leave this setting on. The only time it can be a performance issue
+     * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and
+     * you're unable to paginate it.
+     *
+     * For details of how this works, please see the below. When it is set to `false`,
+     * every request will cause subscribed components to rerender, even when the data has not changed.
+     *
+     * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing
+     */
+    structuralSharing?: boolean;
+    /**
+     * A function that is called when a schema validation fails.
+     *
+     * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).
+     *
+     * `NamedSchemaError` has the following properties:
+     * - `issues`: an array of issues that caused the validation to fail
+     * - `value`: the value that was passed to the schema
+     * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       onSchemaFailure: (error, info) => {
+     *         console.error(error, info)
+     *       },
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    onSchemaFailure?: SchemaFailureHandler;
+    /**
+     * Convert a schema validation failure into an error shape matching base query errors.
+     *
+     * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+     *       catchSchemaFailure: (error, info) => ({
+     *         status: "CUSTOM_ERROR",
+     *         error: error.schemaName + " failed validation",
+     *         data: error.issues,
+     *       }),
+     *     }),
+     *   }),
+     * })
+     * ```
+     */
+    catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;
+    /**
+     * Defaults to `false`.
+     *
+     * If set to `true`, will skip schema validation for this endpoint.
+     * Overrides the global setting.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+     *       skipSchemaValidation: process.env.NODE_ENV === "test", // skip schema validation in tests, since we'll be mocking the response
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    skipSchemaValidation?: boolean;
+}
+type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {
+    [rawResultType]?: RawResultType;
+    [resultType]?: ResultType;
+    [baseQuery]?: BaseQuery;
+} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {
+    extraOptions: BaseQueryExtraOptions<BaseQuery>;
+}, {
+    extraOptions?: BaseQueryExtraOptions<BaseQuery>;
+}>;
+declare enum DefinitionType {
+    query = "query",
+    mutation = "mutation",
+    infinitequery = "infinitequery"
+}
+type TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;
+type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;
+type FullTagDescription<TagType> = {
+    type: TagType;
+    id?: number | string;
+};
+type TagDescription<TagType> = TagType | FullTagDescription<TagType>;
+/**
+ * @public
+ */
+type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;
+type QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {
+    /**
+     * The endpoint definition type. To be used with some internal generic types.
+     * @example
+     * ```ts
+     * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...
+     * ```
+     */
+    QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;
+    TagTypes: TagTypes;
+    ReducerPath: ReducerPath;
+};
+/**
+ * @public
+ */
+interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {
+    type: DefinitionType.query;
+    /**
+     * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.
+     * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.
+     * 1.  `['Post']` - equivalent to `2`
+     * 2.  `[{ type: 'Post' }]` - equivalent to `1`
+     * 3.  `[{ type: 'Post', id: 1 }]`
+     * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`
+     * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`
+     * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="providesTags example"
+     *
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   tagTypes: ['Posts'],
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       query: () => 'posts',
+     *       // highlight-start
+     *       providesTags: (result) =>
+     *         result
+     *           ? [
+     *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),
+     *               { type: 'Posts', id: 'LIST' },
+     *             ]
+     *           : [{ type: 'Posts', id: 'LIST' }],
+     *       // highlight-end
+     *     })
+     *   })
+     * })
+     * ```
+     */
+    providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;
+    /**
+     * Not to be used. A query should not invalidate tags in the cache.
+     */
+    invalidatesTags?: never;
+    /**
+     * Can be provided to return a custom cache key value based on the query arguments.
+     *
+     * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.
+     *
+     * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.
+     *
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="serializeQueryArgs : exclude value"
+     *
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * interface MyApiClient {
+     *   fetchPost: (id: string) => Promise<Post>
+     * }
+     *
+     * createApi({
+     *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *  endpoints: (build) => ({
+     *    // Example: an endpoint with an API client passed in as an argument,
+     *    // but only the item ID should be used as the cache key
+     *    getPost: build.query<Post, { id: string; client: MyApiClient }>({
+     *      queryFn: async ({ id, client }) => {
+     *        const post = await client.fetchPost(id)
+     *        return { data: post }
+     *      },
+     *      // highlight-start
+     *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {
+     *        const { id } = queryArgs
+     *        // This can return a string, an object, a number, or a boolean.
+     *        // If it returns an object, number or boolean, that value
+     *        // will be serialized automatically via `defaultSerializeQueryArgs`
+     *        return { id } // omit `client` from the cache key
+     *
+     *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:
+     *        // return defaultSerializeQueryArgs({
+     *        //   endpointName,
+     *        //   queryArgs: { id },
+     *        //   endpointDefinition
+     *        // })
+     *        // Or  create and return a string yourself:
+     *        // return `getPost(${id})`
+     *      },
+     *      // highlight-end
+     *    }),
+     *  }),
+     *})
+     * ```
+     */
+    serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;
+    /**
+     * Can be provided to merge an incoming response value into the current cache data.
+     * If supplied, no automatic structural sharing will be applied - it's up to
+     * you to update the cache appropriately.
+     *
+     * Since RTKQ normally replaces cache entries with the new response, you will usually
+     * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep
+     * an existing cache entry so that it can be updated.
+     *
+     * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,
+     * or return a new value, but _not_ both at once.
+     *
+     * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,
+     * the cache entry will just save the response data directly.
+     *
+     * Useful if you don't want a new request to completely override the current cache value,
+     * maybe because you have manually updated it from another source and don't want those
+     * updates to get lost.
+     *
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="merge: pagination"
+     *
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * createApi({
+     *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *  endpoints: (build) => ({
+     *    listItems: build.query<string[], number>({
+     *      query: (pageNumber) => `/listItems?page=${pageNumber}`,
+     *     // Only have one cache entry because the arg always maps to one string
+     *     serializeQueryArgs: ({ endpointName }) => {
+     *       return endpointName
+     *      },
+     *      // Always merge incoming data to the cache entry
+     *      merge: (currentCache, newItems) => {
+     *        currentCache.push(...newItems)
+     *      },
+     *      // Refetch when the page arg changes
+     *      forceRefetch({ currentArg, previousArg }) {
+     *        return currentArg !== previousArg
+     *      },
+     *    }),
+     *  }),
+     *})
+     * ```
+     */
+    merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {
+        arg: QueryArg;
+        baseQueryMeta: BaseQueryMeta<BaseQuery>;
+        requestId: string;
+        fulfilledTimeStamp: number;
+    }): ResultType | void;
+    /**
+     * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.
+     * This is primarily useful for "infinite scroll" / pagination use cases where
+     * RTKQ is keeping a single cache entry that is added to over time, in combination
+     * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback
+     * set to add incoming data to the cache entry each time.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="forceRefresh: pagination"
+     *
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * createApi({
+     *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *  endpoints: (build) => ({
+     *    listItems: build.query<string[], number>({
+     *      query: (pageNumber) => `/listItems?page=${pageNumber}`,
+     *     // Only have one cache entry because the arg always maps to one string
+     *     serializeQueryArgs: ({ endpointName }) => {
+     *       return endpointName
+     *      },
+     *      // Always merge incoming data to the cache entry
+     *      merge: (currentCache, newItems) => {
+     *        currentCache.push(...newItems)
+     *      },
+     *      // Refetch when the page arg changes
+     *      forceRefetch({ currentArg, previousArg }) {
+     *        return currentArg !== previousArg
+     *      },
+     *    }),
+     *  }),
+     *})
+     * ```
+     */
+    forceRefetch?(params: {
+        currentArg: QueryArg | undefined;
+        previousArg: QueryArg | undefined;
+        state: RootState<any, any, string>;
+        endpointState?: QuerySubState<any>;
+    }): boolean;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;
+}
+type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;
+type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {
+    /**
+     * The endpoint definition type. To be used with some internal generic types.
+     * @example
+     * ```ts
+     * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...
+     * ```
+     */
+    InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;
+    TagTypes: TagTypes;
+    ReducerPath: ReducerPath;
+};
+interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {
+    type: DefinitionType.infinitequery;
+    providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;
+    /**
+     * Not to be used. A query should not invalidate tags in the cache.
+     */
+    invalidatesTags?: never;
+    /**
+     * Required options to configure the infinite query behavior.
+     * `initialPageParam` and `getNextPageParam` are required, to
+     * ensure the infinite query can properly fetch the next page of data.
+     * `initialPageParam` may be specified when using the
+     * endpoint, to override the default value.
+     * `maxPages` and `getPreviousPageParam` are both optional.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="infiniteQueryOptions example"
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     *
+     * type Pokemon = {
+     *   id: string
+     *   name: string
+     * }
+     *
+     * const pokemonApi = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+     *   endpoints: (build) => ({
+     *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({
+     *       infiniteQueryOptions: {
+     *         initialPageParam: 0,
+     *         maxPages: 3,
+     *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>
+     *           lastPageParam + 1,
+     *         getPreviousPageParam: (
+     *           firstPage,
+     *           allPages,
+     *           firstPageParam,
+     *           allPageParams,
+     *         ) => {
+     *           return firstPageParam > 0 ? firstPageParam - 1 : undefined
+     *         },
+     *       },
+     *       query({pageParam}) {
+     *         return `https://example.com/listItems?page=${pageParam}`
+     *       },
+     *     }),
+     *   }),
+     * })
+     
+     * ```
+     */
+    infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;
+    /**
+     * Can be provided to return a custom cache key value based on the query arguments.
+     *
+     * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.
+     *
+     * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.
+     *
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="serializeQueryArgs : exclude value"
+     *
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * interface MyApiClient {
+     *   fetchPost: (id: string) => Promise<Post>
+     * }
+     *
+     * createApi({
+     *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *  endpoints: (build) => ({
+     *    // Example: an endpoint with an API client passed in as an argument,
+     *    // but only the item ID should be used as the cache key
+     *    getPost: build.query<Post, { id: string; client: MyApiClient }>({
+     *      queryFn: async ({ id, client }) => {
+     *        const post = await client.fetchPost(id)
+     *        return { data: post }
+     *      },
+     *      // highlight-start
+     *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {
+     *        const { id } = queryArgs
+     *        // This can return a string, an object, a number, or a boolean.
+     *        // If it returns an object, number or boolean, that value
+     *        // will be serialized automatically via `defaultSerializeQueryArgs`
+     *        return { id } // omit `client` from the cache key
+     *
+     *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:
+     *        // return defaultSerializeQueryArgs({
+     *        //   endpointName,
+     *        //   queryArgs: { id },
+     *        //   endpointDefinition
+     *        // })
+     *        // Or  create and return a string yourself:
+     *        // return `getPost(${id})`
+     *      },
+     *      // highlight-end
+     *    }),
+     *  }),
+     *})
+     * ```
+     */
+    serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;
+}
+type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;
+type MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {
+    /**
+     * The endpoint definition type. To be used with some internal generic types.
+     * @example
+     * ```ts
+     * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...
+     * ```
+     */
+    MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;
+    TagTypes: TagTypes;
+    ReducerPath: ReducerPath;
+};
+/**
+ * @public
+ */
+interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {
+    type: DefinitionType.mutation;
+    /**
+     * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.
+     * Expects the same shapes as `providesTags`.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="invalidatesTags example"
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   tagTypes: ['Posts'],
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       query: () => 'posts',
+     *       providesTags: (result) =>
+     *         result
+     *           ? [
+     *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),
+     *               { type: 'Posts', id: 'LIST' },
+     *             ]
+     *           : [{ type: 'Posts', id: 'LIST' }],
+     *     }),
+     *     addPost: build.mutation<Post, Partial<Post>>({
+     *       query(body) {
+     *         return {
+     *           url: `posts`,
+     *           method: 'POST',
+     *           body,
+     *         }
+     *       },
+     *       // highlight-start
+     *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],
+     *       // highlight-end
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;
+    /**
+     * Not to be used. A mutation should not provide tags to the cache.
+     */
+    providesTags?: never;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;
+}
+type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;
+type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;
+type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;
+type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {
+    /**
+     * An endpoint definition that retrieves data, and may provide tags to the cache.
+     *
+     * @example
+     * ```js
+     * // codeblock-meta title="Example of all query endpoint options"
+     * const api = createApi({
+     *  baseQuery,
+     *  endpoints: (build) => ({
+     *    getPost: build.query({
+     *      query: (id) => ({ url: `post/${id}` }),
+     *      // Pick out data and prevent nested properties in a hook or selector
+     *      transformResponse: (response) => response.data,
+     *      // Pick out error and prevent nested properties in a hook or selector
+     *      transformErrorResponse: (response) => response.error,
+     *      // `result` is the server response
+     *      providesTags: (result, error, id) => [{ type: 'Post', id }],
+     *      // trigger side effects or optimistic updates
+     *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},
+     *      // handle subscriptions etc
+     *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},
+     *    }),
+     *  }),
+     *});
+     *```
+     */
+    query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;
+    /**
+     * An endpoint definition that alters data on the server or will possibly invalidate the cache.
+     *
+     * @example
+     * ```js
+     * // codeblock-meta title="Example of all mutation endpoint options"
+     * const api = createApi({
+     *   baseQuery,
+     *   endpoints: (build) => ({
+     *     updatePost: build.mutation({
+     *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),
+     *       // Pick out data and prevent nested properties in a hook or selector
+     *       transformResponse: (response) => response.data,
+     *       // Pick out error and prevent nested properties in a hook or selector
+     *       transformErrorResponse: (response) => response.error,
+     *       // `result` is the server response
+     *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],
+     *      // trigger side effects or optimistic updates
+     *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},
+     *      // handle subscriptions etc
+     *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},
+     *     }),
+     *   }),
+     * });
+     * ```
+     */
+    mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;
+    infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;
+};
+type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;
+type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;
+type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;
+type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;
+type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;
+type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;
+type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;
+type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;
+type InfiniteQueryCombinedArg<QueryArg, PageParam> = {
+    queryArg: QueryArg;
+    pageParam: PageParam;
+};
+type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;
+type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;
+type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;
+type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;
+type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = {
+    [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never;
+};
+
+type QueryCacheKey = string & {
+    _type: 'queryCacheKey';
+};
+type QuerySubstateIdentifier = {
+    queryCacheKey: QueryCacheKey;
+};
+type MutationSubstateIdentifier = {
+    requestId: string;
+    fixedCacheKey?: string;
+} | {
+    requestId?: string;
+    fixedCacheKey: string;
+};
+type RefetchConfigOptions = {
+    refetchOnMountOrArgChange: boolean | number;
+    refetchOnReconnect: boolean;
+    refetchOnFocus: boolean;
+};
+type InfiniteQueryConfigOptions<DataType, PageParam, QueryArg> = {
+    /**
+     * The initial page parameter to use for the first page fetch.
+     */
+    initialPageParam: PageParam;
+    /**
+     * This function is required to automatically get the next cursor for infinite queries.
+     * The result will also be used to determine the value of `hasNextPage`.
+     */
+    getNextPageParam: (lastPage: DataType, allPages: Array<DataType>, lastPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;
+    /**
+     * This function can be set to automatically get the previous cursor for infinite queries.
+     * The result will also be used to determine the value of `hasPreviousPage`.
+     */
+    getPreviousPageParam?: (firstPage: DataType, allPages: Array<DataType>, firstPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;
+    /**
+     * If specified, only keep this many pages in cache at once.
+     * If additional pages are fetched, older pages in the other
+     * direction will be dropped from the cache.
+     */
+    maxPages?: number;
+};
+type InfiniteData<DataType, PageParam> = {
+    pages: Array<DataType>;
+    pageParams: Array<PageParam>;
+};
+/**
+ * Strings describing the query state at any given time.
+ */
+declare enum QueryStatus {
+    uninitialized = "uninitialized",
+    pending = "pending",
+    fulfilled = "fulfilled",
+    rejected = "rejected"
+}
+type RequestStatusFlags = {
+    status: QueryStatus.uninitialized;
+    isUninitialized: true;
+    isLoading: false;
+    isSuccess: false;
+    isError: false;
+} | {
+    status: QueryStatus.pending;
+    isUninitialized: false;
+    isLoading: true;
+    isSuccess: false;
+    isError: false;
+} | {
+    status: QueryStatus.fulfilled;
+    isUninitialized: false;
+    isLoading: false;
+    isSuccess: true;
+    isError: false;
+} | {
+    status: QueryStatus.rejected;
+    isUninitialized: false;
+    isLoading: false;
+    isSuccess: false;
+    isError: true;
+};
+/**
+ * @public
+ */
+type SubscriptionOptions = {
+    /**
+     * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).
+     */
+    pollingInterval?: number;
+    /**
+     *  Defaults to 'false'. This setting allows you to control whether RTK Query will continue polling if the window is not focused.
+     *
+     *  If pollingInterval is not set or set to 0, this **will not be evaluated** until pollingInterval is greater than 0.
+     *
+     *  Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    skipPollingIfUnfocused?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     *
+     * Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    refetchOnReconnect?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     *
+     * Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    refetchOnFocus?: boolean;
+};
+type Subscribers = {
+    [requestId: string]: SubscriptionOptions;
+};
+type QueryKeys<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any> ? K : never;
+}[keyof Definitions];
+type InfiniteQueryKeys<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions]: Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? K : never;
+}[keyof Definitions];
+type MutationKeys<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions]: Definitions[K] extends MutationDefinition<any, any, any, any> ? K : never;
+}[keyof Definitions];
+type BaseQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = {
+    /**
+     * The argument originally passed into the hook or `initiate` action call
+     */
+    originalArgs: QueryArgFromAnyQuery<D>;
+    /**
+     * A unique ID associated with the request
+     */
+    requestId: string;
+    /**
+     * The received data from the query
+     */
+    data?: DataType;
+    /**
+     * The received error if applicable
+     */
+    error?: SerializedError | (D extends QueryDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);
+    /**
+     * The name of the endpoint associated with the query
+     */
+    endpointName: string;
+    /**
+     * Time that the latest query started
+     */
+    startedTimeStamp: number;
+    /**
+     * Time that the latest query was fulfilled
+     */
+    fulfilledTimeStamp?: number;
+};
+type QuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = Id<({
+    status: QueryStatus.fulfilled;
+} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'data' | 'fulfilledTimeStamp'> & {
+    error: undefined;
+}) | ({
+    status: QueryStatus.pending;
+} & BaseQuerySubState<D, DataType>) | ({
+    status: QueryStatus.rejected;
+} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'error'>) | {
+    status: QueryStatus.uninitialized;
+    originalArgs?: undefined;
+    data?: undefined;
+    error?: undefined;
+    requestId?: undefined;
+    endpointName?: string;
+    startedTimeStamp?: undefined;
+    fulfilledTimeStamp?: undefined;
+}>;
+type InfiniteQueryDirection = 'forward' | 'backward';
+type InfiniteQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any> ? QuerySubState<D, InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>> & {
+    direction?: InfiniteQueryDirection;
+} : never;
+type BaseMutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = {
+    requestId: string;
+    data?: ResultTypeFrom<D>;
+    error?: SerializedError | (D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);
+    endpointName: string;
+    startedTimeStamp: number;
+    fulfilledTimeStamp?: number;
+};
+type MutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = (({
+    status: QueryStatus.fulfilled;
+} & WithRequiredProp<BaseMutationSubState<D>, 'data' | 'fulfilledTimeStamp'>) & {
+    error: undefined;
+}) | (({
+    status: QueryStatus.pending;
+} & BaseMutationSubState<D>) & {
+    data?: undefined;
+}) | ({
+    status: QueryStatus.rejected;
+} & WithRequiredProp<BaseMutationSubState<D>, 'error'>) | {
+    requestId?: undefined;
+    status: QueryStatus.uninitialized;
+    data?: undefined;
+    error?: undefined;
+    endpointName?: string;
+    startedTimeStamp?: undefined;
+    fulfilledTimeStamp?: undefined;
+};
+type CombinedState<D extends EndpointDefinitions, E extends string, ReducerPath extends string> = {
+    queries: QueryState<D>;
+    mutations: MutationState<D>;
+    provided: InvalidationState<E>;
+    subscriptions: SubscriptionState;
+    config: ConfigState<ReducerPath>;
+};
+type InvalidationState<TagTypes extends string> = {
+    tags: {
+        [_ in TagTypes]: {
+            [id: string]: Array<QueryCacheKey>;
+            [id: number]: Array<QueryCacheKey>;
+        };
+    };
+    keys: Record<QueryCacheKey, Array<FullTagDescription<any>>>;
+};
+type QueryState<D extends EndpointDefinitions> = {
+    [queryCacheKey: string]: QuerySubState<D[string]> | InfiniteQuerySubState<D[string]> | undefined;
+};
+type SubscriptionState = {
+    [queryCacheKey: string]: Subscribers | undefined;
+};
+type ConfigState<ReducerPath> = RefetchConfigOptions & {
+    reducerPath: ReducerPath;
+    online: boolean;
+    focused: boolean;
+    middlewareRegistered: boolean | 'conflict';
+} & ModifiableConfigState;
+type ModifiableConfigState = {
+    keepUnusedDataFor: number;
+    invalidationBehavior: 'delayed' | 'immediately';
+} & RefetchConfigOptions;
+type MutationState<D extends EndpointDefinitions> = {
+    [requestId: string]: MutationSubState<D[string]> | undefined;
+};
+type RootState<Definitions extends EndpointDefinitions, TagTypes extends string, ReducerPath extends string> = {
+    [P in ReducerPath]: CombinedState<Definitions, TagTypes, P>;
+};
+
+type ResponseHandler = 'content-type' | 'json' | 'text' | ((response: Response) => Promise<any>);
+type CustomRequestInit = Override<RequestInit, {
+    headers?: Headers | string[][] | Record<string, string | undefined> | undefined;
+}>;
+interface FetchArgs extends CustomRequestInit {
+    url: string;
+    params?: Record<string, any>;
+    body?: any;
+    responseHandler?: ResponseHandler;
+    validateStatus?: (response: Response, body: any) => boolean;
+    /**
+     * A number in milliseconds that represents that maximum time a request can take before timing out.
+     */
+    timeout?: number;
+}
+type FetchBaseQueryError = {
+    /**
+     * * `number`:
+     *   HTTP status code
+     */
+    status: number;
+    data: unknown;
+} | {
+    /**
+     * * `"FETCH_ERROR"`:
+     *   An error that occurred during execution of `fetch` or the `fetchFn` callback option
+     **/
+    status: 'FETCH_ERROR';
+    data?: undefined;
+    error: string;
+} | {
+    /**
+     * * `"PARSING_ERROR"`:
+     *   An error happened during parsing.
+     *   Most likely a non-JSON-response was returned with the default `responseHandler` "JSON",
+     *   or an error occurred while executing a custom `responseHandler`.
+     **/
+    status: 'PARSING_ERROR';
+    originalStatus: number;
+    data: string;
+    error: string;
+} | {
+    /**
+     * * `"TIMEOUT_ERROR"`:
+     *   Request timed out
+     **/
+    status: 'TIMEOUT_ERROR';
+    data?: undefined;
+    error: string;
+} | {
+    /**
+     * * `"CUSTOM_ERROR"`:
+     *   A custom error type that you can return from your `queryFn` where another error might not make sense.
+     **/
+    status: 'CUSTOM_ERROR';
+    data?: unknown;
+    error: string;
+};
+type FetchBaseQueryArgs = {
+    baseUrl?: string;
+    prepareHeaders?: (headers: Headers, api: Pick<BaseQueryApi, 'getState' | 'extra' | 'endpoint' | 'type' | 'forced'> & {
+        arg: string | FetchArgs;
+        extraOptions: unknown;
+    }) => MaybePromise<Headers | void>;
+    fetchFn?: (input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>;
+    paramsSerializer?: (params: Record<string, any>) => string;
+    /**
+     * By default, we only check for 'application/json' and 'application/vnd.api+json' as the content-types for json. If you need to support another format, you can pass
+     * in a predicate function for your given api to get the same automatic stringifying behavior
+     * @example
+     * ```ts
+     * const isJsonContentType = (headers: Headers) => ["application/vnd.api+json", "application/json", "application/vnd.hal+json"].includes(headers.get("content-type")?.trim());
+     * ```
+     */
+    isJsonContentType?: (headers: Headers) => boolean;
+    /**
+     * Defaults to `application/json`;
+     */
+    jsonContentType?: string;
+    /**
+     * Custom replacer function used when calling `JSON.stringify()`;
+     */
+    jsonReplacer?: (this: any, key: string, value: any) => any;
+} & RequestInit & Pick<FetchArgs, 'responseHandler' | 'validateStatus' | 'timeout'>;
+type FetchBaseQueryMeta = {
+    request: Request;
+    response?: Response;
+};
+/**
+ * This is a very small wrapper around fetch that aims to simplify requests.
+ *
+ * @example
+ * ```ts
+ * const baseQuery = fetchBaseQuery({
+ *   baseUrl: 'https://api.your-really-great-app.com/v1/',
+ *   prepareHeaders: (headers, { getState }) => {
+ *     const token = (getState() as RootState).auth.token;
+ *     // If we have a token set in state, let's assume that we should be passing it.
+ *     if (token) {
+ *       headers.set('authorization', `Bearer ${token}`);
+ *     }
+ *     return headers;
+ *   },
+ * })
+ * ```
+ *
+ * @param {string} baseUrl
+ * The base URL for an API service.
+ * Typically in the format of https://example.com/
+ *
+ * @param {(headers: Headers, api: { getState: () => unknown; arg: string | FetchArgs; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders
+ * An optional function that can be used to inject headers on requests.
+ * Provides a Headers object, most of the `BaseQueryApi` (`dispatch` is not available), and the arg passed into the query function.
+ * Useful for setting authentication or headers that need to be set conditionally.
+ *
+ * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers
+ *
+ * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>} fetchFn
+ * Accepts a custom `fetch` function if you do not want to use the default on the window.
+ * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`
+ *
+ * @param {(params: Record<string, unknown>) => string} paramsSerializer
+ * An optional function that can be used to stringify querystring parameters.
+ *
+ * @param {(headers: Headers) => boolean} isJsonContentType
+ * An optional predicate function to determine if `JSON.stringify()` should be called on the `body` arg of `FetchArgs`
+ *
+ * @param {string} jsonContentType Used when automatically setting the content-type header for a request with a jsonifiable body that does not have an explicit content-type header. Defaults to `application/json`.
+ *
+ * @param {(this: any, key: string, value: any) => any} jsonReplacer Custom replacer function used when calling `JSON.stringify()`.
+ *
+ * @param {number} timeout
+ * A number in milliseconds that represents the maximum time a request can take before timing out.
+ */
+declare function fetchBaseQuery({ baseUrl, prepareHeaders, fetchFn, paramsSerializer, isJsonContentType, jsonContentType, jsonReplacer, timeout: defaultTimeout, responseHandler: globalResponseHandler, validateStatus: globalValidateStatus, ...baseFetchOptions }?: FetchBaseQueryArgs): BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta>;
+
+type RetryConditionFunction = (error: BaseQueryError<BaseQueryFn>, args: BaseQueryArg<BaseQueryFn>, extraArgs: {
+    attempt: number;
+    baseQueryApi: BaseQueryApi;
+    extraOptions: BaseQueryExtraOptions<BaseQueryFn> & RetryOptions;
+}) => boolean;
+type RetryOptions = {
+    /**
+     * Function used to determine delay between retries
+     */
+    backoff?: (attempt: number, maxRetries: number) => Promise<void>;
+} & ({
+    /**
+     * How many times the query will be retried (default: 5)
+     */
+    maxRetries?: number;
+    retryCondition?: undefined;
+} | {
+    /**
+     * Callback to determine if a retry should be attempted.
+     * Return `true` for another retry and `false` to quit trying prematurely.
+     */
+    retryCondition?: RetryConditionFunction;
+    maxRetries?: undefined;
+});
+declare function fail<BaseQuery extends BaseQueryFn = BaseQueryFn>(error: BaseQueryError<BaseQuery>, meta?: BaseQueryMeta<BaseQuery>): never;
+/**
+ * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.
+ *
+ * @example
+ *
+ * ```ts
+ * // codeblock-meta title="Retry every request 5 times by default"
+ * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'
+ * interface Post {
+ *   id: number
+ *   name: string
+ * }
+ * type PostsResponse = Post[]
+ *
+ * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.
+ * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });
+ * export const api = createApi({
+ *   baseQuery: staggeredBaseQuery,
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsResponse, void>({
+ *       query: () => ({ url: 'posts' }),
+ *     }),
+ *     getPost: build.query<PostsResponse, string>({
+ *       query: (id) => ({ url: `post/${id}` }),
+ *       extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint
+ *     }),
+ *   }),
+ * });
+ *
+ * export const { useGetPostsQuery, useGetPostQuery } = api;
+ * ```
+ */
+declare const retry: BaseQueryEnhancer<unknown, RetryOptions, void | RetryOptions> & {
+    fail: typeof fail;
+};
+
+declare function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T;
+
+export { type Api, type ApiContext, type ApiEndpointInfiniteQuery, type ApiEndpointMutation, type ApiEndpointQuery, type ApiModules, type BaseEndpointDefinition, type BaseQueryApi, type BaseQueryArg, type BaseQueryEnhancer, type BaseQueryError, type BaseQueryExtraOptions, type BaseQueryFn, type BaseQueryMeta, type BaseQueryResult, type CombinedState, type CoreModule, type CreateApi, type CreateApiOptions, DefinitionType, type DefinitionsFromApi, type EndpointBuilder, type EndpointDefinition, type EndpointDefinitions, type FetchArgs, type FetchBaseQueryArgs, type FetchBaseQueryError, type FetchBaseQueryMeta, type InfiniteData, type InfiniteQueryActionCreatorResult, type InfiniteQueryArgFrom, type InfiniteQueryConfigOptions, type InfiniteQueryDefinition, type InfiniteQueryExtraOptions, type InfiniteQueryResultSelectorResult, type InfiniteQuerySubState, type Module, type MutationActionCreatorResult, type MutationDefinition, type MutationExtraOptions, type MutationResultSelectorResult, NamedSchemaError, type OverrideResultType, type PageParamFrom, type PrefetchOptions, type QueryActionCreatorResult, type QueryArgFrom, type QueryCacheKey, type QueryDefinition, type QueryExtraOptions, type QueryKeys, type QueryResultSelectorResult, type QueryReturnValue, QueryStatus, type QuerySubState, type ResultDescription, type ResultTypeFrom, type RetryOptions, type RootState, type SchemaFailureConverter, type SchemaFailureHandler, type SchemaFailureInfo, type SerializeQueryArgs, type SkipToken, type StartQueryActionCreatorOptions, type SubscriptionOptions, type Id as TSHelpersId, type NoInfer as TSHelpersNoInfer, type Override as TSHelpersOverride, type TagDescription, type TagTypesFromApi, type TypedMutationOnQueryStarted, type TypedQueryOnQueryStarted, type UpdateDefinitions, buildCreateApi, copyWithStructuralSharing, coreModule, createApi, defaultSerializeQueryArgs, fakeBaseQuery, fetchBaseQuery, retry, setupListeners };
Index: node_modules/@reduxjs/toolkit/dist/query/index.d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2915 @@
+import * as _reduxjs_toolkit from '@reduxjs/toolkit';
+import { ThunkDispatch, UnknownAction, Draft, AsyncThunk, SHOULD_AUTOBATCH, ThunkAction, SafePromise, SerializedError, PayloadAction, ActionCreatorWithoutPayload, Reducer, Middleware, ActionCreatorWithPayload, createSelector } from '@reduxjs/toolkit';
+import { Patch } from 'immer';
+import * as redux from 'redux';
+import { StandardSchemaV1 } from '@standard-schema/spec';
+import { SchemaError } from '@standard-schema/utils';
+
+type Id<T> = {
+    [K in keyof T]: T[K];
+} & {};
+type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
+type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;
+/**
+ * Convert a Union type `(A|B)` to an intersection type `(A&B)`
+ */
+type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
+type NonOptionalKeys<T> = {
+    [K in keyof T]-?: undefined extends T[K] ? never : K;
+}[keyof T];
+type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;
+type NoInfer<T> = [T][T extends any ? 0 : never];
+type NonUndefined<T> = T extends undefined ? never : T;
+type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;
+type MaybePromise<T> = T | PromiseLike<T>;
+type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;
+type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;
+type CastAny<T, CastTo> = IsAny<T, CastTo, T>;
+
+interface BaseQueryApi {
+    signal: AbortSignal;
+    abort: (reason?: string) => void;
+    dispatch: ThunkDispatch<any, any, any>;
+    getState: () => unknown;
+    extra: unknown;
+    endpoint: string;
+    type: 'query' | 'mutation';
+    /**
+     * Only available for queries: indicates if a query has been forced,
+     * i.e. it would have been fetched even if there would already be a cache entry
+     * (this does not mean that there is already a cache entry though!)
+     *
+     * This can be used to for example add a `Cache-Control: no-cache` header for
+     * invalidated queries.
+     */
+    forced?: boolean;
+    /**
+     * Only available for queries: the cache key that was used to store the query result
+     */
+    queryCacheKey?: string;
+}
+type QueryReturnValue<T = unknown, E = unknown, M = unknown> = {
+    error: E;
+    data?: undefined;
+    meta?: M;
+} | {
+    error?: undefined;
+    data: T;
+    meta?: M;
+};
+type BaseQueryFn<Args = any, Result = unknown, Error = unknown, DefinitionExtraOptions = {}, Meta = {}> = (args: Args, api: BaseQueryApi, extraOptions: DefinitionExtraOptions) => MaybePromise<QueryReturnValue<Result, Error, Meta>>;
+type BaseQueryEnhancer<AdditionalArgs = unknown, AdditionalDefinitionExtraOptions = unknown, Config = void> = <BaseQuery extends BaseQueryFn>(baseQuery: BaseQuery, config: Config) => BaseQueryFn<BaseQueryArg<BaseQuery> & AdditionalArgs, BaseQueryResult<BaseQuery>, BaseQueryError<BaseQuery>, BaseQueryExtraOptions<BaseQuery> & AdditionalDefinitionExtraOptions, NonNullable<BaseQueryMeta<BaseQuery>>>;
+/**
+ * @public
+ */
+type BaseQueryResult<BaseQuery extends BaseQueryFn> = UnwrapPromise<ReturnType<BaseQuery>> extends infer Unwrapped ? Unwrapped extends {
+    data: any;
+} ? Unwrapped['data'] : never : never;
+/**
+ * @public
+ */
+type BaseQueryMeta<BaseQuery extends BaseQueryFn> = UnwrapPromise<ReturnType<BaseQuery>>['meta'];
+/**
+ * @public
+ */
+type BaseQueryError<BaseQuery extends BaseQueryFn> = Exclude<UnwrapPromise<ReturnType<BaseQuery>>, {
+    error?: undefined;
+}>['error'];
+/**
+ * @public
+ */
+type BaseQueryArg<T extends (arg: any, ...args: any[]) => any> = T extends (arg: infer A, ...args: any[]) => any ? A : any;
+/**
+ * @public
+ */
+type BaseQueryExtraOptions<BaseQuery extends BaseQueryFn> = Parameters<BaseQuery>[2];
+
+declare const defaultSerializeQueryArgs: SerializeQueryArgs<any>;
+type SerializeQueryArgs<QueryArgs, ReturnType = string> = (_: {
+    queryArgs: QueryArgs;
+    endpointDefinition: EndpointDefinition<any, any, any, any>;
+    endpointName: string;
+}) => ReturnType;
+type InternalSerializeQueryArgs = (_: {
+    queryArgs: any;
+    endpointDefinition: EndpointDefinition<any, any, any, any>;
+    endpointName: string;
+}) => QueryCacheKey;
+
+interface CreateApiOptions<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never> {
+    /**
+     * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.
+     *
+     * @example
+     *
+     * ```ts
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+     *
+     * const api = createApi({
+     *   // highlight-start
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   // highlight-end
+     *   endpoints: (build) => ({
+     *     // ...endpoints
+     *   }),
+     * })
+     * ```
+     */
+    baseQuery: BaseQuery;
+    /**
+     * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).
+     *
+     * @example
+     *
+     * ```ts
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   // highlight-start
+     *   tagTypes: ['Post', 'User'],
+     *   // highlight-end
+     *   endpoints: (build) => ({
+     *     // ...endpoints
+     *   }),
+     * })
+     * ```
+     */
+    tagTypes?: readonly TagTypes[];
+    /**
+     * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="apis.js"
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';
+     *
+     * const apiOne = createApi({
+     *   // highlight-start
+     *   reducerPath: 'apiOne',
+     *   // highlight-end
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (builder) => ({
+     *     // ...endpoints
+     *   }),
+     * });
+     *
+     * const apiTwo = createApi({
+     *   // highlight-start
+     *   reducerPath: 'apiTwo',
+     *   // highlight-end
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (builder) => ({
+     *     // ...endpoints
+     *   }),
+     * });
+     * ```
+     */
+    reducerPath?: ReducerPath;
+    /**
+     * Accepts a custom function if you have a need to change the creation of cache keys for any reason.
+     */
+    serializeQueryArgs?: SerializeQueryArgs<unknown>;
+    /**
+     * Endpoints are a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are three endpoint types: [`query`](../../rtk-query/usage/queries), [`infiniteQuery`](../../rtk-query/usage/infinite-queries) and [`mutation`](../../rtk-query/usage/mutations).
+     */
+    endpoints(build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>): Definitions;
+    /**
+     * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.
+     *
+     * ```ts
+     * // codeblock-meta title="keepUnusedDataFor example"
+     *
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       query: () => 'posts',
+     *       // highlight-start
+     *       keepUnusedDataFor: 5
+     *       // highlight-end
+     *     })
+     *   })
+     * })
+     * ```
+     */
+    keepUnusedDataFor?: number;
+    /**
+     * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.
+     * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.
+     * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.
+     * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     */
+    refetchOnMountOrArgChange?: boolean | number;
+    /**
+     * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     *
+     * Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    refetchOnFocus?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     *
+     * Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    refetchOnReconnect?: boolean;
+    /**
+     * Defaults to `'delayed'`. This setting allows you to control when tags are invalidated after a mutation.
+     *
+     * - `'immediately'`: Queries are invalidated instantly after the mutation finished, even if they are running.
+     *   If the query provides tags that were invalidated while it ran, it won't be re-fetched.
+     * - `'delayed'`: Invalidation only happens after all queries and mutations are settled.
+     *   This ensures that queries are always invalidated correctly and automatically "batches" invalidations of concurrent mutations.
+     *   Note that if you constantly have some queries (or mutations) running, this can delay tag invalidations indefinitely.
+     */
+    invalidationBehavior?: 'delayed' | 'immediately';
+    /**
+     * A function that is passed every dispatched action. If this returns something other than `undefined`,
+     * that return value will be used to rehydrate fulfilled & errored queries.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="next-redux-wrapper rehydration example"
+     * import type { Action, PayloadAction } from '@reduxjs/toolkit'
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import { HYDRATE } from 'next-redux-wrapper'
+     *
+     * type RootState = any; // normally inferred from state
+     *
+     * function isHydrateAction(action: Action): action is PayloadAction<RootState> {
+     *   return action.type === HYDRATE
+     * }
+     *
+     * export const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   // highlight-start
+     *   extractRehydrationInfo(action, { reducerPath }): any {
+     *     if (isHydrateAction(action)) {
+     *       return action.payload[reducerPath]
+     *     }
+     *   },
+     *   // highlight-end
+     *   endpoints: (build) => ({
+     *     // omitted
+     *   }),
+     * })
+     * ```
+     */
+    extractRehydrationInfo?: (action: UnknownAction, { reducerPath, }: {
+        reducerPath: ReducerPath;
+    }) => undefined | CombinedState<NoInfer<Definitions>, NoInfer<TagTypes>, NoInfer<ReducerPath>>;
+    /**
+     * A function that is called when a schema validation fails.
+     *
+     * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).
+     *
+     * `NamedSchemaError` has the following properties:
+     * - `issues`: an array of issues that caused the validation to fail
+     * - `value`: the value that was passed to the schema
+     * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *     }),
+     *   }),
+     *   onSchemaFailure: (error, info) => {
+     *     console.error(error, info)
+     *   },
+     * })
+     * ```
+     */
+    onSchemaFailure?: SchemaFailureHandler;
+    /**
+     * Convert a schema validation failure into an error shape matching base query errors.
+     *
+     * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+     *     }),
+     *   }),
+     *   catchSchemaFailure: (error, info) => ({
+     *     status: "CUSTOM_ERROR",
+     *     error: error.schemaName + " failed validation",
+     *     data: error.issues,
+     *   }),
+     * })
+     * ```
+     */
+    catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;
+    /**
+     * Defaults to `false`.
+     *
+     * If set to `true`, will skip schema validation for all endpoints, unless overridden by the endpoint.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   skipSchemaValidation: process.env.NODE_ENV === "test", // skip schema validation in tests, since we'll be mocking the response
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    skipSchemaValidation?: boolean;
+}
+type CreateApi<Modules extends ModuleName> = {
+    /**
+     * Creates a service to use in your application. Contains only the basic redux logic (the core module).
+     *
+     * @link https://redux-toolkit.js.org/rtk-query/api/createApi
+     */
+    <BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never>(options: CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>): Api<BaseQuery, Definitions, ReducerPath, TagTypes, Modules>;
+};
+/**
+ * Builds a `createApi` method based on the provided `modules`.
+ *
+ * @link https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api
+ *
+ * @example
+ * ```ts
+ * const MyContext = React.createContext<ReactReduxContextValue | null>(null);
+ * const customCreateApi = buildCreateApi(
+ *   coreModule(),
+ *   reactHooksModule({
+ *     hooks: {
+ *       useDispatch: createDispatchHook(MyContext),
+ *       useSelector: createSelectorHook(MyContext),
+ *       useStore: createStoreHook(MyContext)
+ *     }
+ *   })
+ * );
+ * ```
+ *
+ * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints
+ * @returns A `createApi` method using the provided `modules`.
+ */
+declare function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(...modules: Modules): CreateApi<Modules[number]['name']>;
+
+type BuildThunksApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = Matchers<QueryThunk, Definition>;
+type BuildThunksApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = Matchers<InfiniteQueryThunk<any>, Definition>;
+type BuildThunksApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = Matchers<MutationThunk, Definition>;
+type EndpointThunk<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = Definition extends EndpointDefinition<infer QueryArg, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<ResultType, ATArg & {
+    originalArgs: QueryArg;
+}, ATConfig & {
+    rejectValue: BaseQueryError<BaseQueryFn>;
+}> : never : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<InfiniteData<ResultType, PageParam>, ATArg & {
+    originalArgs: QueryArg;
+}, ATConfig & {
+    rejectValue: BaseQueryError<BaseQueryFn>;
+}> : never : never;
+type PendingAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['pending']>;
+type FulfilledAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['fulfilled']>;
+type RejectedAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['rejected']>;
+type Matcher<M> = (value: any) => value is M;
+interface Matchers<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> {
+    matchPending: Matcher<PendingAction<Thunk, Definition>>;
+    matchFulfilled: Matcher<FulfilledAction<Thunk, Definition>>;
+    matchRejected: Matcher<RejectedAction<Thunk, Definition>>;
+}
+type QueryThunkArg = QuerySubstateIdentifier & StartQueryActionCreatorOptions & {
+    type: 'query';
+    originalArgs: unknown;
+    endpointName: string;
+};
+type InfiniteQueryThunkArg<D extends InfiniteQueryDefinition<any, any, any, any, any>> = QuerySubstateIdentifier & StartInfiniteQueryActionCreatorOptions<D> & {
+    type: `query`;
+    originalArgs: unknown;
+    endpointName: string;
+    param: unknown;
+    direction?: InfiniteQueryDirection;
+};
+type MutationThunkArg = {
+    type: 'mutation';
+    originalArgs: unknown;
+    endpointName: string;
+    track?: boolean;
+    fixedCacheKey?: string;
+};
+type ThunkResult = unknown;
+type ThunkApiMetaConfig = {
+    pendingMeta: {
+        startedTimeStamp: number;
+        [SHOULD_AUTOBATCH]: true;
+    };
+    fulfilledMeta: {
+        fulfilledTimeStamp: number;
+        baseQueryMeta: unknown;
+        [SHOULD_AUTOBATCH]: true;
+    };
+    rejectedMeta: {
+        baseQueryMeta: unknown;
+        [SHOULD_AUTOBATCH]: true;
+    };
+};
+type QueryThunk = AsyncThunk<ThunkResult, QueryThunkArg, ThunkApiMetaConfig>;
+type InfiniteQueryThunk<D extends InfiniteQueryDefinition<any, any, any, any, any>> = AsyncThunk<ThunkResult, InfiniteQueryThunkArg<D>, ThunkApiMetaConfig>;
+type MutationThunk = AsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig>;
+type MaybeDrafted<T> = T | Draft<T>;
+type Recipe<T> = (data: MaybeDrafted<T>) => void | MaybeDrafted<T>;
+type PatchQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, patches: readonly Patch[], updateProvided?: boolean) => ThunkAction<void, PartialState, any, UnknownAction>;
+type AllQueryKeys<Definitions extends EndpointDefinitions> = QueryKeys<Definitions> | InfiniteQueryKeys<Definitions>;
+type QueryArgFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryArgFrom<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryArgFrom<Definitions[EndpointName]> : never;
+type DataFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteData<ResultTypeFrom<Definitions[EndpointName]>, PageParamFrom<Definitions[EndpointName]>> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? ResultTypeFrom<Definitions[EndpointName]> : unknown;
+type UpsertThunkResult<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryActionCreatorResult<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryActionCreatorResult<Definitions[EndpointName]> : QueryActionCreatorResult<never>;
+type UpdateQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, updateRecipe: Recipe<DataFromAnyQueryDefinition<Definitions, EndpointName>>, updateProvided?: boolean) => ThunkAction<PatchCollection, PartialState, any, UnknownAction>;
+type UpsertQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, value: DataFromAnyQueryDefinition<Definitions, EndpointName>) => ThunkAction<UpsertThunkResult<Definitions, EndpointName>, PartialState, any, UnknownAction>;
+/**
+ * An object returned from dispatching a `api.util.updateQueryData` call.
+ */
+type PatchCollection = {
+    /**
+     * An `immer` Patch describing the cache update.
+     */
+    patches: Patch[];
+    /**
+     * An `immer` Patch to revert the cache update.
+     */
+    inversePatches: Patch[];
+    /**
+     * A function that will undo the cache update.
+     */
+    undo: () => void;
+};
+
+type SkipToken = typeof skipToken;
+/**
+ * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`
+ * instead of the query argument to get the same effect as if setting
+ * `skip: true` in the query options.
+ *
+ * Useful for scenarios where a query should be skipped when `arg` is `undefined`
+ * and TypeScript complains about it because `arg` is not allowed to be passed
+ * in as `undefined`, such as
+ *
+ * ```ts
+ * // codeblock-meta title="will error if the query argument is not allowed to be undefined" no-transpile
+ * useSomeQuery(arg, { skip: !!arg })
+ * ```
+ *
+ * ```ts
+ * // codeblock-meta title="using skipToken instead" no-transpile
+ * useSomeQuery(arg ?? skipToken)
+ * ```
+ *
+ * If passed directly into a query or mutation selector, that selector will always
+ * return an uninitialized state.
+ */
+export declare const skipToken: unique symbol;
+type BuildSelectorsApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {
+    select: QueryResultSelectorFactory<Definition, RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;
+};
+type BuildSelectorsApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {
+    select: InfiniteQueryResultSelectorFactory<Definition, RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;
+};
+type BuildSelectorsApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {
+    select: MutationResultSelectorFactory<Definition, RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;
+};
+type QueryResultSelectorFactory<Definition extends QueryDefinition<any, any, any, any>, RootState> = (queryArg: QueryArgFrom<Definition> | SkipToken) => (state: RootState) => QueryResultSelectorResult<Definition>;
+type QueryResultSelectorResult<Definition extends QueryDefinition<any, any, any, any>> = QuerySubState<Definition> & RequestStatusFlags;
+type InfiniteQueryResultSelectorFactory<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, RootState> = (queryArg: InfiniteQueryArgFrom<Definition> | SkipToken) => (state: RootState) => InfiniteQueryResultSelectorResult<Definition>;
+type InfiniteQueryResultFlags = {
+    hasNextPage: boolean;
+    hasPreviousPage: boolean;
+    isFetchingNextPage: boolean;
+    isFetchingPreviousPage: boolean;
+    isFetchNextPageError: boolean;
+    isFetchPreviousPageError: boolean;
+};
+type InfiniteQueryResultSelectorResult<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<Definition> & RequestStatusFlags & InfiniteQueryResultFlags;
+type MutationResultSelectorFactory<Definition extends MutationDefinition<any, any, any, any>, RootState> = (requestId: string | {
+    requestId: string | undefined;
+    fixedCacheKey: string | undefined;
+} | SkipToken) => (state: RootState) => MutationResultSelectorResult<Definition>;
+type MutationResultSelectorResult<Definition extends MutationDefinition<any, any, any, any>> = MutationSubState<Definition> & RequestStatusFlags;
+
+type BuildInitiateApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = {
+    initiate: StartQueryActionCreator<Definition>;
+};
+type BuildInitiateApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {
+    initiate: StartInfiniteQueryActionCreator<Definition>;
+};
+type BuildInitiateApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = {
+    initiate: StartMutationActionCreator<Definition>;
+};
+declare const forceQueryFnSymbol: unique symbol;
+type StartQueryActionCreatorOptions = {
+    subscribe?: boolean;
+    forceRefetch?: boolean | number;
+    subscriptionOptions?: SubscriptionOptions;
+    [forceQueryFnSymbol]?: () => QueryReturnValue;
+};
+type StartInfiniteQueryActionCreatorOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = StartQueryActionCreatorOptions & {
+    direction?: InfiniteQueryDirection;
+    param?: unknown;
+} & Partial<Pick<Partial<InfiniteQueryConfigOptions<ResultTypeFrom<D>, PageParamFrom<D>, InfiniteQueryArgFrom<D>>>, 'initialPageParam'>>;
+type StartQueryActionCreator<D extends QueryDefinition<any, any, any, any, any>> = (arg: QueryArgFrom<D>, options?: StartQueryActionCreatorOptions) => ThunkAction<QueryActionCreatorResult<D>, any, any, UnknownAction>;
+type StartInfiniteQueryActionCreator<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D>, options?: StartInfiniteQueryActionCreatorOptions<D>) => ThunkAction<InfiniteQueryActionCreatorResult<D>, any, any, UnknownAction>;
+type QueryActionCreatorFields = {
+    requestId: string;
+    subscriptionOptions: SubscriptionOptions | undefined;
+    abort(): void;
+    unsubscribe(): void;
+    updateSubscriptionOptions(options: SubscriptionOptions): void;
+    queryCacheKey: string;
+};
+type QueryActionCreatorResult<D extends QueryDefinition<any, any, any, any>> = SafePromise<QueryResultSelectorResult<D>> & QueryActionCreatorFields & {
+    arg: QueryArgFrom<D>;
+    unwrap(): Promise<ResultTypeFrom<D>>;
+    refetch(): QueryActionCreatorResult<D>;
+};
+type InfiniteQueryActionCreatorResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SafePromise<InfiniteQueryResultSelectorResult<D>> & QueryActionCreatorFields & {
+    arg: InfiniteQueryArgFrom<D>;
+    unwrap(): Promise<InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>>;
+    refetch(): InfiniteQueryActionCreatorResult<D>;
+};
+type StartMutationActionCreator<D extends MutationDefinition<any, any, any, any>> = (arg: QueryArgFrom<D>, options?: {
+    /**
+     * If this mutation should be tracked in the store.
+     * If you just want to manually trigger this mutation using `dispatch` and don't care about the
+     * result, state & potential errors being held in store, you can set this to false.
+     * (defaults to `true`)
+     */
+    track?: boolean;
+    fixedCacheKey?: string;
+}) => ThunkAction<MutationActionCreatorResult<D>, any, any, UnknownAction>;
+type MutationActionCreatorResult<D extends MutationDefinition<any, any, any, any>> = SafePromise<{
+    data: ResultTypeFrom<D>;
+    error?: undefined;
+} | {
+    data?: undefined;
+    error: Exclude<BaseQueryError<D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQuery : never>, undefined> | SerializedError;
+}> & {
+    /** @internal */
+    arg: {
+        /**
+         * The name of the given endpoint for the mutation
+         */
+        endpointName: string;
+        /**
+         * The original arguments supplied to the mutation call
+         */
+        originalArgs: QueryArgFrom<D>;
+        /**
+         * Whether the mutation is being tracked in the store.
+         */
+        track?: boolean;
+        fixedCacheKey?: string;
+    };
+    /**
+     * A unique string generated for the request sequence
+     */
+    requestId: string;
+    /**
+     * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation
+     * that was fired off from reaching the server, but only to assist in handling the response.
+     *
+     * Calling `abort()` prior to the promise resolving will force it to reach the error state with
+     * the serialized error:
+     * `{ name: 'AbortError', message: 'Aborted' }`
+     *
+     * @example
+     * ```ts
+     * const [updateUser] = useUpdateUserMutation();
+     *
+     * useEffect(() => {
+     *   const promise = updateUser(id);
+     *   promise
+     *     .unwrap()
+     *     .catch((err) => {
+     *       if (err.name === 'AbortError') return;
+     *       // else handle the unexpected error
+     *     })
+     *
+     *   return () => {
+     *     promise.abort();
+     *   }
+     * }, [id, updateUser])
+     * ```
+     */
+    abort(): void;
+    /**
+     * Unwraps a mutation call to provide the raw response/error.
+     *
+     * @remarks
+     * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap"
+     * addPost({ id: 1, name: 'Example' })
+     *   .unwrap()
+     *   .then((payload) => console.log('fulfilled', payload))
+     *   .catch((error) => console.error('rejected', error));
+     * ```
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap with async await"
+     * try {
+     *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();
+     *   console.log('fulfilled', payload)
+     * } catch (error) {
+     *   console.error('rejected', error);
+     * }
+     * ```
+     */
+    unwrap(): Promise<ResultTypeFrom<D>>;
+    /**
+     * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.
+     The value returned by the hook will reset to `isUninitialized` afterwards.
+     */
+    reset(): void;
+};
+
+type ReferenceCacheLifecycle = never;
+interface QueryBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends LifecycleApi<ReducerPath> {
+    /**
+     * Gets the current value of this cache entry.
+     */
+    getCacheEntry(): QueryResultSelectorResult<{
+        type: DefinitionType.query;
+    } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;
+    /**
+     * Updates the current cache entry value.
+     * For documentation see `api.util.updateQueryData`.
+     */
+    updateCachedData(updateRecipe: Recipe<ResultType>): PatchCollection;
+}
+type MutationBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = LifecycleApi<ReducerPath> & {
+    /**
+     * Gets the current value of this cache entry.
+     */
+    getCacheEntry(): MutationResultSelectorResult<{
+        type: DefinitionType.mutation;
+    } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;
+};
+type LifecycleApi<ReducerPath extends string = string> = {
+    /**
+     * The dispatch method for the store
+     */
+    dispatch: ThunkDispatch<any, any, UnknownAction>;
+    /**
+     * A method to get the current state
+     */
+    getState(): RootState<any, any, ReducerPath>;
+    /**
+     * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.
+     */
+    extra: unknown;
+    /**
+     * A unique ID generated for the mutation
+     */
+    requestId: string;
+};
+type CacheLifecyclePromises<ResultType = unknown, MetaType = unknown> = {
+    /**
+     * Promise that will resolve with the first value for this cache key.
+     * This allows you to `await` until an actual value is in cache.
+     *
+     * If the cache entry is removed from the cache before any value has ever
+     * been resolved, this Promise will reject with
+     * `new Error('Promise never resolved before cacheEntryRemoved.')`
+     * to prevent memory leaks.
+     * You can just re-throw that error (or not handle it at all) -
+     * it will be caught outside of `cacheEntryAdded`.
+     *
+     * If you don't interact with this promise, it will not throw.
+     */
+    cacheDataLoaded: PromiseWithKnownReason<{
+        /**
+         * The (transformed) query result.
+         */
+        data: ResultType;
+        /**
+         * The `meta` returned by the `baseQuery`
+         */
+        meta: MetaType;
+    }, typeof neverResolvedError>;
+    /**
+     * Promise that allows you to wait for the point in time when the cache entry
+     * has been removed from the cache, by not being used/subscribed to any more
+     * in the application for too long or by dispatching `api.util.resetApiState`.
+     */
+    cacheEntryRemoved: Promise<void>;
+};
+interface QueryCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>> {
+}
+type MutationCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>>;
+type CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {
+    onCacheEntryAdded?(arg: QueryArg, api: QueryCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;
+};
+type CacheLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;
+type CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {
+    onCacheEntryAdded?(arg: QueryArg, api: MutationCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;
+};
+declare const neverResolvedError: Error & {
+    message: "Promise never resolved before cacheEntryRemoved.";
+};
+
+type ReferenceQueryLifecycle = never;
+type QueryLifecyclePromises<ResultType, BaseQuery extends BaseQueryFn> = {
+    /**
+     * Promise that will resolve with the (transformed) query result.
+     *
+     * If the query fails, this promise will reject with the error.
+     *
+     * This allows you to `await` for the query to finish.
+     *
+     * If you don't interact with this promise, it will not throw.
+     */
+    queryFulfilled: PromiseWithKnownReason<{
+        /**
+         * The (transformed) query result.
+         */
+        data: ResultType;
+        /**
+         * The `meta` returned by the `baseQuery`
+         */
+        meta: BaseQueryMeta<BaseQuery>;
+    }, QueryFulfilledRejectionReason<BaseQuery>>;
+};
+type QueryFulfilledRejectionReason<BaseQuery extends BaseQueryFn> = {
+    error: BaseQueryError<BaseQuery>;
+    /**
+     * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.
+     */
+    isUnhandledError: false;
+    /**
+     * The `meta` returned by the `baseQuery`
+     */
+    meta: BaseQueryMeta<BaseQuery>;
+} | {
+    error: unknown;
+    meta?: undefined;
+    /**
+     * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn`, `transformResponse` or `transformErrorResponse` throwing an error instead of handling it properly.
+     * There can not be made any assumption about the shape of `error`.
+     */
+    isUnhandledError: true;
+};
+type QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {
+    /**
+     * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).
+     *
+     * Can be used to perform side-effects throughout the lifecycle of the query.
+     *
+     * @example
+     * ```ts
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+     * import { messageCreated } from './notificationsSlice
+     * export interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({
+     *     baseUrl: '/',
+     *   }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, number>({
+     *       query: (id) => `post/${id}`,
+     *       async onQueryStarted(id, { dispatch, queryFulfilled }) {
+     *         // `onStart` side-effect
+     *         dispatch(messageCreated('Fetching posts...'))
+     *         try {
+     *           const { data } = await queryFulfilled
+     *           // `onSuccess` side-effect
+     *           dispatch(messageCreated('Posts received!'))
+     *         } catch (err) {
+     *           // `onError` side-effect
+     *           dispatch(messageCreated('Error fetching posts!'))
+     *         }
+     *       }
+     *     }),
+     *   }),
+     * })
+     * ```
+     */
+    onQueryStarted?(queryArgument: QueryArg, queryLifeCycleApi: QueryLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;
+};
+type QueryLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;
+type QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {
+    /**
+     * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).
+     *
+     * Can be used for `optimistic updates`.
+     *
+     * @example
+     *
+     * ```ts
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+     * export interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({
+     *     baseUrl: '/',
+     *   }),
+     *   tagTypes: ['Post'],
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, number>({
+     *       query: (id) => `post/${id}`,
+     *       providesTags: ['Post'],
+     *     }),
+     *     updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({
+     *       query: ({ id, ...patch }) => ({
+     *         url: `post/${id}`,
+     *         method: 'PATCH',
+     *         body: patch,
+     *       }),
+     *       invalidatesTags: ['Post'],
+     *       async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {
+     *         const patchResult = dispatch(
+     *           api.util.updateQueryData('getPost', id, (draft) => {
+     *             Object.assign(draft, patch)
+     *           })
+     *         )
+     *         try {
+     *           await queryFulfilled
+     *         } catch {
+     *           patchResult.undo()
+     *         }
+     *       },
+     *     }),
+     *   }),
+     * })
+     * ```
+     */
+    onQueryStarted?(queryArgument: QueryArg, mutationLifeCycleApi: MutationLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;
+};
+interface QueryLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, QueryLifecyclePromises<ResultType, BaseQuery> {
+}
+type MutationLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & QueryLifecyclePromises<ResultType, BaseQuery>;
+/**
+ * Provides a way to define a strongly-typed version of
+ * {@linkcode QueryLifecycleQueryExtraOptions.onQueryStarted | onQueryStarted}
+ * for a specific query.
+ *
+ * @example
+ * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>
+ *
+ * ```ts
+ * import type { TypedQueryOnQueryStarted } from '@reduxjs/toolkit/query'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+ *
+ * type Post = {
+ *   id: number
+ *   title: string
+ *   userId: number
+ * }
+ *
+ * type PostsApiResponse = {
+ *   posts: Post[]
+ *   total: number
+ *   skip: number
+ *   limit: number
+ * }
+ *
+ * type QueryArgument = number | undefined
+ *
+ * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+ *
+ * const baseApiSlice = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),
+ *   reducerPath: 'postsApi',
+ *   tagTypes: ['Posts'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsApiResponse, void>({
+ *       query: () => `/posts`,
+ *     }),
+ *
+ *     getPostById: build.query<Post, QueryArgument>({
+ *       query: (postId) => `/posts/${postId}`,
+ *     }),
+ *   }),
+ * })
+ *
+ * const updatePostOnFulfilled: TypedQueryOnQueryStarted<
+ *   PostsApiResponse,
+ *   QueryArgument,
+ *   BaseQueryFunction,
+ *   'postsApi'
+ * > = async (queryArgument, { dispatch, queryFulfilled }) => {
+ *   const result = await queryFulfilled
+ *
+ *   const { posts } = result.data
+ *
+ *   // Pre-fill the individual post entries with the results
+ *   // from the list endpoint query
+ *   dispatch(
+ *     baseApiSlice.util.upsertQueryEntries(
+ *       posts.map((post) => ({
+ *         endpointName: 'getPostById',
+ *         arg: post.id,
+ *         value: post,
+ *       })),
+ *     ),
+ *   )
+ * }
+ *
+ * export const extendedApiSlice = baseApiSlice.injectEndpoints({
+ *   endpoints: (build) => ({
+ *     getPostsByUserId: build.query<PostsApiResponse, QueryArgument>({
+ *       query: (userId) => `/posts/user/${userId}`,
+ *
+ *       onQueryStarted: updatePostOnFulfilled,
+ *     }),
+ *   }),
+ * })
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArgumentType - The type of the argument passed into the query.
+ * @template BaseQueryFunctionType - The type of the base query function being used.
+ * @template ReducerPath - The type representing the `reducerPath` for the API slice.
+ *
+ * @since 2.4.0
+ * @public
+ */
+type TypedQueryOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];
+/**
+ * Provides a way to define a strongly-typed version of
+ * {@linkcode QueryLifecycleMutationExtraOptions.onQueryStarted | onQueryStarted}
+ * for a specific mutation.
+ *
+ * @example
+ * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>
+ *
+ * ```ts
+ * import type { TypedMutationOnQueryStarted } from '@reduxjs/toolkit/query'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+ *
+ * type Post = {
+ *   id: number
+ *   title: string
+ *   userId: number
+ * }
+ *
+ * type PostsApiResponse = {
+ *   posts: Post[]
+ *   total: number
+ *   skip: number
+ *   limit: number
+ * }
+ *
+ * type QueryArgument = Pick<Post, 'id'> & Partial<Post>
+ *
+ * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+ *
+ * const baseApiSlice = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),
+ *   reducerPath: 'postsApi',
+ *   tagTypes: ['Posts'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsApiResponse, void>({
+ *       query: () => `/posts`,
+ *     }),
+ *
+ *     getPostById: build.query<Post, number>({
+ *       query: (postId) => `/posts/${postId}`,
+ *     }),
+ *   }),
+ * })
+ *
+ * const updatePostOnFulfilled: TypedMutationOnQueryStarted<
+ *   Post,
+ *   QueryArgument,
+ *   BaseQueryFunction,
+ *   'postsApi'
+ * > = async ({ id, ...patch }, { dispatch, queryFulfilled }) => {
+ *   const patchCollection = dispatch(
+ *     baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {
+ *       Object.assign(draftPost, patch)
+ *     }),
+ *   )
+ *
+ *   try {
+ *     await queryFulfilled
+ *   } catch {
+ *     patchCollection.undo()
+ *   }
+ * }
+ *
+ * export const extendedApiSlice = baseApiSlice.injectEndpoints({
+ *   endpoints: (build) => ({
+ *     addPost: build.mutation<Post, Omit<QueryArgument, 'id'>>({
+ *       query: (body) => ({
+ *         url: `posts/add`,
+ *         method: 'POST',
+ *         body,
+ *       }),
+ *
+ *       onQueryStarted: updatePostOnFulfilled,
+ *     }),
+ *
+ *     updatePost: build.mutation<Post, QueryArgument>({
+ *       query: ({ id, ...patch }) => ({
+ *         url: `post/${id}`,
+ *         method: 'PATCH',
+ *         body: patch,
+ *       }),
+ *
+ *       onQueryStarted: updatePostOnFulfilled,
+ *     }),
+ *   }),
+ * })
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArgumentType - The type of the argument passed into the query.
+ * @template BaseQueryFunctionType - The type of the base query function being used.
+ * @template ReducerPath - The type representing the `reducerPath` for the API slice.
+ *
+ * @since 2.4.0
+ * @public
+ */
+type TypedMutationOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleMutationExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];
+
+/**
+ * A typesafe single entry to be upserted into the cache
+ */
+type NormalizedQueryUpsertEntry<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = {
+    endpointName: EndpointName;
+    arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>;
+    value: DataFromAnyQueryDefinition<Definitions, EndpointName>;
+};
+/**
+ * The internal version that is not typesafe since we can't carry the generics through `createSlice`
+ */
+type NormalizedQueryUpsertEntryPayload = {
+    endpointName: string;
+    arg: unknown;
+    value: unknown;
+};
+type ProcessedQueryUpsertEntry = {
+    queryDescription: QueryThunkArg;
+    value: unknown;
+};
+/**
+ * A typesafe representation of a util action creator that accepts cache entry descriptions to upsert
+ */
+type UpsertEntries<Definitions extends EndpointDefinitions> = (<EndpointNames extends Array<AllQueryKeys<Definitions>>>(entries: [
+    ...{
+        [I in keyof EndpointNames]: NormalizedQueryUpsertEntry<Definitions, EndpointNames[I]>;
+    }
+]) => PayloadAction<NormalizedQueryUpsertEntryPayload[]>) & {
+    match: (action: unknown) => action is PayloadAction<NormalizedQueryUpsertEntryPayload[]>;
+};
+declare function buildSlice({ reducerPath, queryThunk, mutationThunk, serializeQueryArgs, context: { endpointDefinitions: definitions, apiUid, extractRehydrationInfo, hasRehydrationInfo, }, assertTagType, config, }: {
+    reducerPath: string;
+    queryThunk: QueryThunk;
+    infiniteQueryThunk: InfiniteQueryThunk<any>;
+    mutationThunk: MutationThunk;
+    serializeQueryArgs: InternalSerializeQueryArgs;
+    context: ApiContext<EndpointDefinitions>;
+    assertTagType: AssertTagTypes;
+    config: Omit<ConfigState<string>, 'online' | 'focused' | 'middlewareRegistered'>;
+}): {
+    reducer: redux.Reducer<{
+        queries: QueryState<any>;
+        mutations: MutationState<any>;
+        provided: InvalidationState<string>;
+        subscriptions: SubscriptionState;
+        config: ConfigState<string>;
+    }, redux.UnknownAction, Partial<{
+        queries: QueryState<any> | undefined;
+        mutations: MutationState<any> | undefined;
+        provided: InvalidationState<string> | undefined;
+        subscriptions: SubscriptionState | undefined;
+        config: ConfigState<string> | undefined;
+    }>>;
+    actions: {
+        resetApiState: _reduxjs_toolkit.ActionCreatorWithoutPayload<`${string}/resetApiState`>;
+        updateProvidedBy: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: {
+            queryCacheKey: QueryCacheKey;
+            providedTags: readonly FullTagDescription<string>[];
+        }[]], {
+            queryCacheKey: QueryCacheKey;
+            providedTags: readonly FullTagDescription<string>[];
+        }[], `${string}/invalidation/updateProvidedBy`, never, unknown>;
+        removeMutationResult: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: MutationSubstateIdentifier], MutationSubstateIdentifier, `${string}/mutations/removeMutationResult`, never, unknown>;
+        subscriptionsUpdated: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: Patch[]], Patch[], `${string}/internalSubscriptions/subscriptionsUpdated`, never, unknown>;
+        updateSubscriptionOptions: _reduxjs_toolkit.ActionCreatorWithPayload<{
+            endpointName: string;
+            requestId: string;
+            options: Subscribers[number];
+        } & QuerySubstateIdentifier, `${string}/subscriptions/updateSubscriptionOptions`>;
+        unsubscribeQueryResult: _reduxjs_toolkit.ActionCreatorWithPayload<{
+            requestId: string;
+        } & QuerySubstateIdentifier, `${string}/subscriptions/unsubscribeQueryResult`>;
+        internal_getRTKQSubscriptions: _reduxjs_toolkit.ActionCreatorWithoutPayload<`${string}/subscriptions/internal_getRTKQSubscriptions`>;
+        removeQueryResult: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: QuerySubstateIdentifier], QuerySubstateIdentifier, `${string}/queries/removeQueryResult`, never, unknown>;
+        cacheEntriesUpserted: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: NormalizedQueryUpsertEntryPayload[]], ProcessedQueryUpsertEntry[], `${string}/queries/cacheEntriesUpserted`, never, {
+            RTK_autoBatch: boolean;
+            requestId: string;
+            timestamp: number;
+        }>;
+        queryResultPatched: _reduxjs_toolkit.ActionCreatorWithPreparedPayload<[payload: QuerySubstateIdentifier & {
+            patches: readonly Patch[];
+        }], QuerySubstateIdentifier & {
+            patches: readonly Patch[];
+        }, `${string}/queries/queryResultPatched`, never, unknown>;
+        middlewareRegistered: _reduxjs_toolkit.ActionCreatorWithPayload<string, `${string}/config/middlewareRegistered`>;
+    };
+};
+type SliceActions = ReturnType<typeof buildSlice>['actions'];
+
+declare const onFocus: ActionCreatorWithoutPayload<"__rtkq/focused">;
+declare const onFocusLost: ActionCreatorWithoutPayload<"__rtkq/unfocused">;
+declare const onOnline: ActionCreatorWithoutPayload<"__rtkq/online">;
+declare const onOffline: ActionCreatorWithoutPayload<"__rtkq/offline">;
+/**
+ * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.
+ * It requires the dispatch method from your store.
+ * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,
+ * but you have the option of providing a callback for more granular control.
+ *
+ * @example
+ * ```ts
+ * setupListeners(store.dispatch)
+ * ```
+ *
+ * @param dispatch - The dispatch method from your store
+ * @param customHandler - An optional callback for more granular control over listener behavior
+ * @returns Return value of the handler.
+ * The default handler returns an `unsubscribe` method that can be called to remove the listeners.
+ */
+declare function setupListeners(dispatch: ThunkDispatch<any, any, any>, customHandler?: (dispatch: ThunkDispatch<any, any, any>, actions: {
+    onFocus: typeof onFocus;
+    onFocusLost: typeof onFocusLost;
+    onOnline: typeof onOnline;
+    onOffline: typeof onOffline;
+}) => () => void): () => void;
+
+/**
+ * Note: this file should import all other files for type discovery and declaration merging
+ */
+
+/**
+ * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_
+ * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value
+ *
+ * @overloadSummary
+ * `force`
+ * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.
+ */
+type PrefetchOptions = {
+    ifOlderThan?: false | number;
+} | {
+    force?: boolean;
+};
+export declare const coreModuleName: unique symbol;
+type CoreModule = typeof coreModuleName | ReferenceCacheLifecycle | ReferenceQueryLifecycle | ReferenceCacheCollection;
+type ThunkWithReturnValue<T> = ThunkAction<T, any, any, UnknownAction>;
+interface ApiModules<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {
+    [coreModuleName]: {
+        /**
+         * This api's reducer should be mounted at `store[api.reducerPath]`.
+         *
+         * @example
+         * ```ts
+         * configureStore({
+         *   reducer: {
+         *     [api.reducerPath]: api.reducer,
+         *   },
+         *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),
+         * })
+         * ```
+         */
+        reducerPath: ReducerPath;
+        /**
+         * Internal actions not part of the public API. Note: These are subject to change at any given time.
+         */
+        internalActions: InternalActions;
+        /**
+         *  A standard redux reducer that enables core functionality. Make sure it's included in your store.
+         *
+         * @example
+         * ```ts
+         * configureStore({
+         *   reducer: {
+         *     [api.reducerPath]: api.reducer,
+         *   },
+         *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),
+         * })
+         * ```
+         */
+        reducer: Reducer<CombinedState<Definitions, TagTypes, ReducerPath>, UnknownAction>;
+        /**
+         * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.
+         *
+         * @example
+         * ```ts
+         * configureStore({
+         *   reducer: {
+         *     [api.reducerPath]: api.reducer,
+         *   },
+         *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),
+         * })
+         * ```
+         */
+        middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>>;
+        /**
+         * A collection of utility thunks for various situations.
+         */
+        util: {
+            /**
+             * A thunk that (if dispatched) will return a specific running query, identified
+             * by `endpointName` and `arg`.
+             * If that query is not running, dispatching the thunk will result in `undefined`.
+             *
+             * Can be used to await a specific query triggered in any way,
+             * including via hook calls or manually dispatching `initiate` actions.
+             *
+             * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+             */
+            getRunningQueryThunk<EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>): ThunkWithReturnValue<QueryActionCreatorResult<Definitions[EndpointName] & {
+                type: 'query';
+            }> | InfiniteQueryActionCreatorResult<Definitions[EndpointName] & {
+                type: 'infinitequery';
+            }> | undefined>;
+            /**
+             * A thunk that (if dispatched) will return a specific running mutation, identified
+             * by `endpointName` and `fixedCacheKey` or `requestId`.
+             * If that mutation is not running, dispatching the thunk will result in `undefined`.
+             *
+             * Can be used to await a specific mutation triggered in any way,
+             * including via hook trigger functions or manually dispatching `initiate` actions.
+             *
+             * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+             */
+            getRunningMutationThunk<EndpointName extends MutationKeys<Definitions>>(endpointName: EndpointName, fixedCacheKeyOrRequestId: string): ThunkWithReturnValue<MutationActionCreatorResult<Definitions[EndpointName] & {
+                type: 'mutation';
+            }> | undefined>;
+            /**
+             * A thunk that (if dispatched) will return all running queries.
+             *
+             * Useful for SSR scenarios to await all running queries triggered in any way,
+             * including via hook calls or manually dispatching `initiate` actions.
+             *
+             * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+             */
+            getRunningQueriesThunk(): ThunkWithReturnValue<Array<QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>>;
+            /**
+             * A thunk that (if dispatched) will return all running mutations.
+             *
+             * Useful for SSR scenarios to await all running mutations triggered in any way,
+             * including via hook calls or manually dispatching `initiate` actions.
+             *
+             * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+             */
+            getRunningMutationsThunk(): ThunkWithReturnValue<Array<MutationActionCreatorResult<any>>>;
+            /**
+             * A Redux thunk that can be used to manually trigger pre-fetching of data.
+             *
+             * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.
+             *
+             * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.
+             *
+             * @example
+             *
+             * ```ts no-transpile
+             * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))
+             * ```
+             */
+            prefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction>;
+            /**
+             * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.
+             *
+             * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and an `updateRecipe` callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.
+             *
+             * The thunk executes _synchronously_, and returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).
+             *
+             * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, arg, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.
+             *
+             * Note that the first two arguments (`endpointName` and `arg`) are used to determine which existing cache entry to update. If no existing cache entry is found, the `updateRecipe` callback will not run.
+             *
+             * @example
+             *
+             * ```ts
+             * const patchCollection = dispatch(
+             *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {
+             *     draftPosts.push({ id: 1, name: 'Teddy' })
+             *   })
+             * )
+             * ```
+             */
+            updateQueryData: UpdateQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;
+            /**
+             * A Redux thunk action creator that, when dispatched, acts as an artificial API request to upsert a value into the cache.
+             *
+             * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and the data to upsert.
+             *
+             * If no cache entry for that cache key exists, a cache entry will be created and the data added. If a cache entry already exists, this will _overwrite_ the existing cache entry data.
+             *
+             * The thunk executes _asynchronously_, and returns a promise that resolves when the store has been updated.
+             *
+             * If dispatched while an actual request is in progress, both the upsert and request will be handled as soon as they resolve, resulting in a "last result wins" update behavior.
+             *
+             * @example
+             *
+             * ```ts
+             * await dispatch(
+             *   api.util.upsertQueryData('getPost', {id: 1}, {id: 1, text: "Hello!"})
+             * )
+             * ```
+             */
+            upsertQueryData: UpsertQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;
+            /**
+             * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.
+             *
+             * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.
+             *
+             * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.
+             *
+             * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.
+             *
+             * @example
+             * ```ts
+             * const patchCollection = dispatch(
+             *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {
+             *     draftPosts.push({ id: 1, name: 'Teddy' })
+             *   })
+             * )
+             *
+             * // later
+             * dispatch(
+             *   api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)
+             * )
+             *
+             * // or
+             * patchCollection.undo()
+             * ```
+             */
+            patchQueryData: PatchQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;
+            /**
+             * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.
+             *
+             * @example
+             *
+             * ```ts
+             * dispatch(api.util.resetApiState())
+             * ```
+             */
+            resetApiState: SliceActions['resetApiState'];
+            upsertQueryEntries: UpsertEntries<Definitions>;
+            /**
+             * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).
+             *
+             * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.
+             *
+             * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.
+             *
+             * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:
+             *
+             * - `[TagType]`
+             * - `[{ type: TagType }]`
+             * - `[{ type: TagType, id: number | string }]`
+             *
+             * @example
+             *
+             * ```ts
+             * dispatch(api.util.invalidateTags(['Post']))
+             * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))
+             * dispatch(
+             *   api.util.invalidateTags([
+             *     { type: 'Post', id: 1 },
+             *     { type: 'Post', id: 'LIST' },
+             *   ])
+             * )
+             * ```
+             */
+            invalidateTags: ActionCreatorWithPayload<Array<TagDescription<TagTypes> | null | undefined>, string>;
+            /**
+             * A function to select all `{ endpointName, originalArgs, queryCacheKey }` combinations that would be invalidated by a specific set of tags.
+             *
+             * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.
+             */
+            selectInvalidatedBy: (state: RootState<Definitions, string, ReducerPath>, tags: ReadonlyArray<TagDescription<TagTypes> | null | undefined>) => Array<{
+                endpointName: string;
+                originalArgs: any;
+                queryCacheKey: string;
+            }>;
+            /**
+             * A function to select all arguments currently cached for a given endpoint.
+             *
+             * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.
+             */
+            selectCachedArgsForQuery: <QueryName extends AllQueryKeys<Definitions>>(state: RootState<Definitions, string, ReducerPath>, queryName: QueryName) => Array<QueryArgFromAnyQuery<Definitions[QueryName]>>;
+        };
+        /**
+         * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.
+         */
+        endpoints: {
+            [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? ApiEndpointQuery<Definitions[K], Definitions> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? ApiEndpointMutation<Definitions[K], Definitions> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? ApiEndpointInfiniteQuery<Definitions[K], Definitions> : never;
+        };
+    };
+}
+interface ApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> extends BuildThunksApiEndpointQuery<Definition>, BuildInitiateApiEndpointQuery<Definition>, BuildSelectorsApiEndpointQuery<Definition, Definitions> {
+    name: string;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types: NonNullable<Definition['Types']>;
+}
+interface ApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> extends BuildThunksApiEndpointInfiniteQuery<Definition>, BuildInitiateApiEndpointInfiniteQuery<Definition>, BuildSelectorsApiEndpointInfiniteQuery<Definition, Definitions> {
+    name: string;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types: NonNullable<Definition['Types']>;
+}
+interface ApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> extends BuildThunksApiEndpointMutation<Definition>, BuildInitiateApiEndpointMutation<Definition>, BuildSelectorsApiEndpointMutation<Definition, Definitions> {
+    name: string;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types: NonNullable<Definition['Types']>;
+}
+type ListenerActions = {
+    /**
+     * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior
+     * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners
+     */
+    onOnline: typeof onOnline;
+    onOffline: typeof onOffline;
+    /**
+     * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior
+     * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners
+     */
+    onFocus: typeof onFocus;
+    onFocusLost: typeof onFocusLost;
+};
+type InternalActions = SliceActions & ListenerActions;
+interface CoreModuleOptions {
+    /**
+     * A selector creator (usually from `reselect`, or matching the same signature)
+     */
+    createSelector?: typeof createSelector;
+}
+/**
+ * Creates a module containing the basic redux logic for use with `buildCreateApi`.
+ *
+ * @example
+ * ```ts
+ * const createBaseApi = buildCreateApi(coreModule());
+ * ```
+ */
+declare const coreModule: ({ createSelector, }?: CoreModuleOptions) => Module<CoreModule>;
+
+declare const createApi: CreateApi<typeof coreModuleName>;
+
+type ModuleName = keyof ApiModules<any, any, any, any>;
+type Module<Name extends ModuleName> = {
+    name: Name;
+    init<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string>(api: Api<BaseQuery, EndpointDefinitions, ReducerPath, TagTypes, ModuleName>, options: WithRequiredProp<CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>, 'reducerPath' | 'serializeQueryArgs' | 'keepUnusedDataFor' | 'refetchOnMountOrArgChange' | 'refetchOnFocus' | 'refetchOnReconnect' | 'invalidationBehavior' | 'tagTypes'>, context: ApiContext<Definitions>): {
+        injectEndpoint(endpointName: string, definition: EndpointDefinition<any, any, any, any>): void;
+    };
+};
+interface ApiContext<Definitions extends EndpointDefinitions> {
+    apiUid: string;
+    endpointDefinitions: Definitions;
+    batch(cb: () => void): void;
+    extractRehydrationInfo: (action: UnknownAction) => CombinedState<any, any, any> | undefined;
+    hasRehydrationInfo: (action: UnknownAction) => boolean;
+}
+type Api<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string, Enhancers extends ModuleName = CoreModule> = UnionToIntersection<ApiModules<BaseQuery, Definitions, ReducerPath, TagTypes>[Enhancers]> & {
+    /**
+     * A function to inject the endpoints into the original API, but also give you that same API with correct types for these endpoints back. Useful with code-splitting.
+     */
+    injectEndpoints<NewDefinitions extends EndpointDefinitions>(_: {
+        endpoints: (build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>) => NewDefinitions;
+        /**
+         * Optionally allows endpoints to be overridden if defined by multiple `injectEndpoints` calls.
+         *
+         * If set to `true`, will override existing endpoints with the new definition.
+         * If set to `'throw'`, will throw an error if an endpoint is redefined with a different definition.
+         * If set to `false` (or unset), will not override existing endpoints with the new definition, and log a warning in development.
+         */
+        overrideExisting?: boolean | 'throw';
+    }): Api<BaseQuery, Definitions & NewDefinitions, ReducerPath, TagTypes, Enhancers>;
+    /**
+     *A function to enhance a generated API with additional information. Useful with code-generation.
+     */
+    enhanceEndpoints<NewTagTypes extends string = never, NewDefinitions extends EndpointDefinitions = never>(_: {
+        addTagTypes?: readonly NewTagTypes[];
+        endpoints?: UpdateDefinitions<Definitions, TagTypes | NoInfer<NewTagTypes>, NewDefinitions> extends infer NewDefinitions ? {
+            [K in keyof NewDefinitions]?: Partial<NewDefinitions[K]> | ((definition: NewDefinitions[K]) => void);
+        } : never;
+    }): Api<BaseQuery, UpdateDefinitions<Definitions, TagTypes | NewTagTypes, NewDefinitions>, ReducerPath, TagTypes | NewTagTypes, Enhancers>;
+};
+
+type PromiseWithKnownReason<T, R> = Omit<Promise<T>, 'then' | 'catch'> & {
+    /**
+     * Attaches callbacks for the resolution and/or rejection of the Promise.
+     * @param onfulfilled The callback to execute when the Promise is resolved.
+     * @param onrejected The callback to execute when the Promise is rejected.
+     * @returns A Promise for the completion of which ever callback is executed.
+     */
+    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: R) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;
+    /**
+     * Attaches a callback for only the rejection of the Promise.
+     * @param onrejected The callback to execute when the Promise is rejected.
+     * @returns A Promise for the completion of the callback.
+     */
+    catch<TResult = never>(onrejected?: ((reason: R) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>;
+};
+
+type ReferenceCacheCollection = never;
+type CacheCollectionQueryExtraOptions = {
+    /**
+     * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_
+     *
+     * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.
+     */
+    keepUnusedDataFor?: number;
+};
+
+export declare const _NEVER: unique symbol;
+type NEVER = typeof _NEVER;
+/**
+ * Creates a "fake" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.
+ * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.
+ */
+declare function fakeBaseQuery<ErrorType>(): BaseQueryFn<void, NEVER, ErrorType, {}>;
+
+declare class NamedSchemaError extends SchemaError {
+    readonly value: any;
+    readonly schemaName: string;
+    readonly _bqMeta: any;
+    constructor(issues: readonly StandardSchemaV1.Issue[], value: any, schemaName: string, _bqMeta: any);
+}
+
+declare const rawResultType: unique symbol;
+declare const resultType: unique symbol;
+declare const baseQuery: unique symbol;
+interface SchemaFailureInfo {
+    endpoint: string;
+    arg: any;
+    type: 'query' | 'mutation';
+    queryCacheKey?: string;
+}
+type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;
+type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;
+type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {
+    /**
+     * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="query example"
+     *
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   tagTypes: ['Post'],
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       // highlight-start
+     *       query: () => 'posts',
+     *       // highlight-end
+     *     }),
+     *     addPost: build.mutation<Post, Partial<Post>>({
+     *      // highlight-start
+     *      query: (body) => ({
+     *        url: `posts`,
+     *        method: 'POST',
+     *        body,
+     *      }),
+     *      // highlight-end
+     *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],
+     *    }),
+     *   })
+     * })
+     * ```
+     */
+    query(arg: QueryArg): BaseQueryArg<BaseQuery>;
+    queryFn?: never;
+    /**
+     * A function to manipulate the data returned by a query or mutation.
+     */
+    transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;
+    /**
+     * A function to manipulate the data returned by a failed query or mutation.
+     */
+    transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;
+    /**
+     * A schema for the result *before* it's passed to `transformResponse`.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const postSchema = v.object({ id: v.number(), name: v.string() })
+     * type Post = v.InferOutput<typeof postSchema>
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPostName: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       rawResponseSchema: postSchema,
+     *       transformResponse: (post) => post.name,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    rawResponseSchema?: StandardSchemaV1<RawResultType>;
+    /**
+     * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     * import {customBaseQuery, baseQueryErrorSchema} from "./customBaseQuery"
+     *
+     * const api = createApi({
+     *   baseQuery: customBaseQuery,
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       rawErrorResponseSchema: baseQueryErrorSchema,
+     *       transformErrorResponse: (error) => error.data,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;
+};
+type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {
+    /**
+     * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Basic queryFn example"
+     *
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       query: () => 'posts',
+     *     }),
+     *     flipCoin: build.query<'heads' | 'tails', void>({
+     *       // highlight-start
+     *       queryFn(arg, queryApi, extraOptions, baseQuery) {
+     *         const randomVal = Math.random()
+     *         if (randomVal < 0.45) {
+     *           return { data: 'heads' }
+     *         }
+     *         if (randomVal < 0.9) {
+     *           return { data: 'tails' }
+     *         }
+     *         return { error: { status: 500, statusText: 'Internal Server Error', data: "Coin landed on its edge!" } }
+     *       }
+     *       // highlight-end
+     *     })
+     *   })
+     * })
+     * ```
+     */
+    queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;
+    query?: never;
+    transformResponse?: never;
+    transformErrorResponse?: never;
+    rawResponseSchema?: never;
+    rawErrorResponseSchema?: never;
+};
+type BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {
+    QueryArg: QueryArg;
+    BaseQuery: BaseQuery;
+    ResultType: ResultType;
+};
+interface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {
+    /**
+     * A schema for the arguments to be passed to the `query` or `queryFn`.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       argSchema: v.object({ id: v.number() }),
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    argSchema?: StandardSchemaV1<QueryArg>;
+    /**
+     * A schema for the result (including `transformResponse` if provided).
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const postSchema = v.object({ id: v.number(), name: v.string() })
+     * type Post = v.InferOutput<typeof postSchema>
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: postSchema,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    responseSchema?: StandardSchemaV1<ResultType>;
+    /**
+     * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     * import { customBaseQuery, baseQueryErrorSchema } from "./customBaseQuery"
+     *
+     * const api = createApi({
+     *   baseQuery: customBaseQuery,
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       errorResponseSchema: baseQueryErrorSchema,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;
+    /**
+     * A schema for the `meta` property returned by the `query` or `queryFn`.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     * import { customBaseQuery, baseQueryMetaSchema } from "./customBaseQuery"
+     *
+     * const api = createApi({
+     *   baseQuery: customBaseQuery,
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       metaSchema: baseQueryMetaSchema,
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;
+    /**
+     * Defaults to `true`.
+     *
+     * Most apps should leave this setting on. The only time it can be a performance issue
+     * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and
+     * you're unable to paginate it.
+     *
+     * For details of how this works, please see the below. When it is set to `false`,
+     * every request will cause subscribed components to rerender, even when the data has not changed.
+     *
+     * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing
+     */
+    structuralSharing?: boolean;
+    /**
+     * A function that is called when a schema validation fails.
+     *
+     * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).
+     *
+     * `NamedSchemaError` has the following properties:
+     * - `issues`: an array of issues that caused the validation to fail
+     * - `value`: the value that was passed to the schema
+     * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       onSchemaFailure: (error, info) => {
+     *         console.error(error, info)
+     *       },
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    onSchemaFailure?: SchemaFailureHandler;
+    /**
+     * Convert a schema validation failure into an error shape matching base query errors.
+     *
+     * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+     *       catchSchemaFailure: (error, info) => ({
+     *         status: "CUSTOM_ERROR",
+     *         error: error.schemaName + " failed validation",
+     *         data: error.issues,
+     *       }),
+     *     }),
+     *   }),
+     * })
+     * ```
+     */
+    catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;
+    /**
+     * Defaults to `false`.
+     *
+     * If set to `true`, will skip schema validation for this endpoint.
+     * Overrides the global setting.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta no-transpile
+     * import { createApi } from '@reduxjs/toolkit/query/react'
+     * import * as v from "valibot"
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   endpoints: (build) => ({
+     *     getPost: build.query<Post, { id: number }>({
+     *       query: ({ id }) => `/post/${id}`,
+     *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+     *       skipSchemaValidation: process.env.NODE_ENV === "test", // skip schema validation in tests, since we'll be mocking the response
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    skipSchemaValidation?: boolean;
+}
+type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {
+    [rawResultType]?: RawResultType;
+    [resultType]?: ResultType;
+    [baseQuery]?: BaseQuery;
+} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {
+    extraOptions: BaseQueryExtraOptions<BaseQuery>;
+}, {
+    extraOptions?: BaseQueryExtraOptions<BaseQuery>;
+}>;
+declare enum DefinitionType {
+    query = "query",
+    mutation = "mutation",
+    infinitequery = "infinitequery"
+}
+type TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;
+type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;
+type FullTagDescription<TagType> = {
+    type: TagType;
+    id?: number | string;
+};
+type TagDescription<TagType> = TagType | FullTagDescription<TagType>;
+/**
+ * @public
+ */
+type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;
+type QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {
+    /**
+     * The endpoint definition type. To be used with some internal generic types.
+     * @example
+     * ```ts
+     * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...
+     * ```
+     */
+    QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;
+    TagTypes: TagTypes;
+    ReducerPath: ReducerPath;
+};
+/**
+ * @public
+ */
+interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {
+    type: DefinitionType.query;
+    /**
+     * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.
+     * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.
+     * 1.  `['Post']` - equivalent to `2`
+     * 2.  `[{ type: 'Post' }]` - equivalent to `1`
+     * 3.  `[{ type: 'Post', id: 1 }]`
+     * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`
+     * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`
+     * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="providesTags example"
+     *
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   tagTypes: ['Posts'],
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       query: () => 'posts',
+     *       // highlight-start
+     *       providesTags: (result) =>
+     *         result
+     *           ? [
+     *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),
+     *               { type: 'Posts', id: 'LIST' },
+     *             ]
+     *           : [{ type: 'Posts', id: 'LIST' }],
+     *       // highlight-end
+     *     })
+     *   })
+     * })
+     * ```
+     */
+    providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;
+    /**
+     * Not to be used. A query should not invalidate tags in the cache.
+     */
+    invalidatesTags?: never;
+    /**
+     * Can be provided to return a custom cache key value based on the query arguments.
+     *
+     * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.
+     *
+     * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.
+     *
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="serializeQueryArgs : exclude value"
+     *
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * interface MyApiClient {
+     *   fetchPost: (id: string) => Promise<Post>
+     * }
+     *
+     * createApi({
+     *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *  endpoints: (build) => ({
+     *    // Example: an endpoint with an API client passed in as an argument,
+     *    // but only the item ID should be used as the cache key
+     *    getPost: build.query<Post, { id: string; client: MyApiClient }>({
+     *      queryFn: async ({ id, client }) => {
+     *        const post = await client.fetchPost(id)
+     *        return { data: post }
+     *      },
+     *      // highlight-start
+     *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {
+     *        const { id } = queryArgs
+     *        // This can return a string, an object, a number, or a boolean.
+     *        // If it returns an object, number or boolean, that value
+     *        // will be serialized automatically via `defaultSerializeQueryArgs`
+     *        return { id } // omit `client` from the cache key
+     *
+     *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:
+     *        // return defaultSerializeQueryArgs({
+     *        //   endpointName,
+     *        //   queryArgs: { id },
+     *        //   endpointDefinition
+     *        // })
+     *        // Or  create and return a string yourself:
+     *        // return `getPost(${id})`
+     *      },
+     *      // highlight-end
+     *    }),
+     *  }),
+     *})
+     * ```
+     */
+    serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;
+    /**
+     * Can be provided to merge an incoming response value into the current cache data.
+     * If supplied, no automatic structural sharing will be applied - it's up to
+     * you to update the cache appropriately.
+     *
+     * Since RTKQ normally replaces cache entries with the new response, you will usually
+     * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep
+     * an existing cache entry so that it can be updated.
+     *
+     * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,
+     * or return a new value, but _not_ both at once.
+     *
+     * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,
+     * the cache entry will just save the response data directly.
+     *
+     * Useful if you don't want a new request to completely override the current cache value,
+     * maybe because you have manually updated it from another source and don't want those
+     * updates to get lost.
+     *
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="merge: pagination"
+     *
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * createApi({
+     *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *  endpoints: (build) => ({
+     *    listItems: build.query<string[], number>({
+     *      query: (pageNumber) => `/listItems?page=${pageNumber}`,
+     *     // Only have one cache entry because the arg always maps to one string
+     *     serializeQueryArgs: ({ endpointName }) => {
+     *       return endpointName
+     *      },
+     *      // Always merge incoming data to the cache entry
+     *      merge: (currentCache, newItems) => {
+     *        currentCache.push(...newItems)
+     *      },
+     *      // Refetch when the page arg changes
+     *      forceRefetch({ currentArg, previousArg }) {
+     *        return currentArg !== previousArg
+     *      },
+     *    }),
+     *  }),
+     *})
+     * ```
+     */
+    merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {
+        arg: QueryArg;
+        baseQueryMeta: BaseQueryMeta<BaseQuery>;
+        requestId: string;
+        fulfilledTimeStamp: number;
+    }): ResultType | void;
+    /**
+     * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.
+     * This is primarily useful for "infinite scroll" / pagination use cases where
+     * RTKQ is keeping a single cache entry that is added to over time, in combination
+     * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback
+     * set to add incoming data to the cache entry each time.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="forceRefresh: pagination"
+     *
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * createApi({
+     *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *  endpoints: (build) => ({
+     *    listItems: build.query<string[], number>({
+     *      query: (pageNumber) => `/listItems?page=${pageNumber}`,
+     *     // Only have one cache entry because the arg always maps to one string
+     *     serializeQueryArgs: ({ endpointName }) => {
+     *       return endpointName
+     *      },
+     *      // Always merge incoming data to the cache entry
+     *      merge: (currentCache, newItems) => {
+     *        currentCache.push(...newItems)
+     *      },
+     *      // Refetch when the page arg changes
+     *      forceRefetch({ currentArg, previousArg }) {
+     *        return currentArg !== previousArg
+     *      },
+     *    }),
+     *  }),
+     *})
+     * ```
+     */
+    forceRefetch?(params: {
+        currentArg: QueryArg | undefined;
+        previousArg: QueryArg | undefined;
+        state: RootState<any, any, string>;
+        endpointState?: QuerySubState<any>;
+    }): boolean;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;
+}
+type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;
+type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {
+    /**
+     * The endpoint definition type. To be used with some internal generic types.
+     * @example
+     * ```ts
+     * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...
+     * ```
+     */
+    InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;
+    TagTypes: TagTypes;
+    ReducerPath: ReducerPath;
+};
+interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {
+    type: DefinitionType.infinitequery;
+    providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;
+    /**
+     * Not to be used. A query should not invalidate tags in the cache.
+     */
+    invalidatesTags?: never;
+    /**
+     * Required options to configure the infinite query behavior.
+     * `initialPageParam` and `getNextPageParam` are required, to
+     * ensure the infinite query can properly fetch the next page of data.
+     * `initialPageParam` may be specified when using the
+     * endpoint, to override the default value.
+     * `maxPages` and `getPreviousPageParam` are both optional.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="infiniteQueryOptions example"
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     *
+     * type Pokemon = {
+     *   id: string
+     *   name: string
+     * }
+     *
+     * const pokemonApi = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+     *   endpoints: (build) => ({
+     *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({
+     *       infiniteQueryOptions: {
+     *         initialPageParam: 0,
+     *         maxPages: 3,
+     *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>
+     *           lastPageParam + 1,
+     *         getPreviousPageParam: (
+     *           firstPage,
+     *           allPages,
+     *           firstPageParam,
+     *           allPageParams,
+     *         ) => {
+     *           return firstPageParam > 0 ? firstPageParam - 1 : undefined
+     *         },
+     *       },
+     *       query({pageParam}) {
+     *         return `https://example.com/listItems?page=${pageParam}`
+     *       },
+     *     }),
+     *   }),
+     * })
+     
+     * ```
+     */
+    infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;
+    /**
+     * Can be provided to return a custom cache key value based on the query arguments.
+     *
+     * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.
+     *
+     * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.
+     *
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="serializeQueryArgs : exclude value"
+     *
+     * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     *
+     * interface MyApiClient {
+     *   fetchPost: (id: string) => Promise<Post>
+     * }
+     *
+     * createApi({
+     *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *  endpoints: (build) => ({
+     *    // Example: an endpoint with an API client passed in as an argument,
+     *    // but only the item ID should be used as the cache key
+     *    getPost: build.query<Post, { id: string; client: MyApiClient }>({
+     *      queryFn: async ({ id, client }) => {
+     *        const post = await client.fetchPost(id)
+     *        return { data: post }
+     *      },
+     *      // highlight-start
+     *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {
+     *        const { id } = queryArgs
+     *        // This can return a string, an object, a number, or a boolean.
+     *        // If it returns an object, number or boolean, that value
+     *        // will be serialized automatically via `defaultSerializeQueryArgs`
+     *        return { id } // omit `client` from the cache key
+     *
+     *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:
+     *        // return defaultSerializeQueryArgs({
+     *        //   endpointName,
+     *        //   queryArgs: { id },
+     *        //   endpointDefinition
+     *        // })
+     *        // Or  create and return a string yourself:
+     *        // return `getPost(${id})`
+     *      },
+     *      // highlight-end
+     *    }),
+     *  }),
+     *})
+     * ```
+     */
+    serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;
+}
+type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;
+type MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {
+    /**
+     * The endpoint definition type. To be used with some internal generic types.
+     * @example
+     * ```ts
+     * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...
+     * ```
+     */
+    MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;
+    TagTypes: TagTypes;
+    ReducerPath: ReducerPath;
+};
+/**
+ * @public
+ */
+interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {
+    type: DefinitionType.mutation;
+    /**
+     * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.
+     * Expects the same shapes as `providesTags`.
+     *
+     * @example
+     *
+     * ```ts
+     * // codeblock-meta title="invalidatesTags example"
+     * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+     * interface Post {
+     *   id: number
+     *   name: string
+     * }
+     * type PostsResponse = Post[]
+     *
+     * const api = createApi({
+     *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+     *   tagTypes: ['Posts'],
+     *   endpoints: (build) => ({
+     *     getPosts: build.query<PostsResponse, void>({
+     *       query: () => 'posts',
+     *       providesTags: (result) =>
+     *         result
+     *           ? [
+     *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),
+     *               { type: 'Posts', id: 'LIST' },
+     *             ]
+     *           : [{ type: 'Posts', id: 'LIST' }],
+     *     }),
+     *     addPost: build.mutation<Post, Partial<Post>>({
+     *       query(body) {
+     *         return {
+     *           url: `posts`,
+     *           method: 'POST',
+     *           body,
+     *         }
+     *       },
+     *       // highlight-start
+     *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],
+     *       // highlight-end
+     *     }),
+     *   })
+     * })
+     * ```
+     */
+    invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;
+    /**
+     * Not to be used. A mutation should not provide tags to the cache.
+     */
+    providesTags?: never;
+    /**
+     * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+     */
+    Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;
+}
+type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;
+type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;
+type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;
+type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {
+    /**
+     * An endpoint definition that retrieves data, and may provide tags to the cache.
+     *
+     * @example
+     * ```js
+     * // codeblock-meta title="Example of all query endpoint options"
+     * const api = createApi({
+     *  baseQuery,
+     *  endpoints: (build) => ({
+     *    getPost: build.query({
+     *      query: (id) => ({ url: `post/${id}` }),
+     *      // Pick out data and prevent nested properties in a hook or selector
+     *      transformResponse: (response) => response.data,
+     *      // Pick out error and prevent nested properties in a hook or selector
+     *      transformErrorResponse: (response) => response.error,
+     *      // `result` is the server response
+     *      providesTags: (result, error, id) => [{ type: 'Post', id }],
+     *      // trigger side effects or optimistic updates
+     *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},
+     *      // handle subscriptions etc
+     *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},
+     *    }),
+     *  }),
+     *});
+     *```
+     */
+    query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;
+    /**
+     * An endpoint definition that alters data on the server or will possibly invalidate the cache.
+     *
+     * @example
+     * ```js
+     * // codeblock-meta title="Example of all mutation endpoint options"
+     * const api = createApi({
+     *   baseQuery,
+     *   endpoints: (build) => ({
+     *     updatePost: build.mutation({
+     *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),
+     *       // Pick out data and prevent nested properties in a hook or selector
+     *       transformResponse: (response) => response.data,
+     *       // Pick out error and prevent nested properties in a hook or selector
+     *       transformErrorResponse: (response) => response.error,
+     *       // `result` is the server response
+     *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],
+     *      // trigger side effects or optimistic updates
+     *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},
+     *      // handle subscriptions etc
+     *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},
+     *     }),
+     *   }),
+     * });
+     * ```
+     */
+    mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;
+    infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;
+};
+type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;
+type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;
+type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;
+type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;
+type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;
+type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;
+type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;
+type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;
+type InfiniteQueryCombinedArg<QueryArg, PageParam> = {
+    queryArg: QueryArg;
+    pageParam: PageParam;
+};
+type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;
+type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;
+type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;
+type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;
+type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = {
+    [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never;
+};
+
+type QueryCacheKey = string & {
+    _type: 'queryCacheKey';
+};
+type QuerySubstateIdentifier = {
+    queryCacheKey: QueryCacheKey;
+};
+type MutationSubstateIdentifier = {
+    requestId: string;
+    fixedCacheKey?: string;
+} | {
+    requestId?: string;
+    fixedCacheKey: string;
+};
+type RefetchConfigOptions = {
+    refetchOnMountOrArgChange: boolean | number;
+    refetchOnReconnect: boolean;
+    refetchOnFocus: boolean;
+};
+type InfiniteQueryConfigOptions<DataType, PageParam, QueryArg> = {
+    /**
+     * The initial page parameter to use for the first page fetch.
+     */
+    initialPageParam: PageParam;
+    /**
+     * This function is required to automatically get the next cursor for infinite queries.
+     * The result will also be used to determine the value of `hasNextPage`.
+     */
+    getNextPageParam: (lastPage: DataType, allPages: Array<DataType>, lastPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;
+    /**
+     * This function can be set to automatically get the previous cursor for infinite queries.
+     * The result will also be used to determine the value of `hasPreviousPage`.
+     */
+    getPreviousPageParam?: (firstPage: DataType, allPages: Array<DataType>, firstPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;
+    /**
+     * If specified, only keep this many pages in cache at once.
+     * If additional pages are fetched, older pages in the other
+     * direction will be dropped from the cache.
+     */
+    maxPages?: number;
+};
+type InfiniteData<DataType, PageParam> = {
+    pages: Array<DataType>;
+    pageParams: Array<PageParam>;
+};
+/**
+ * Strings describing the query state at any given time.
+ */
+declare enum QueryStatus {
+    uninitialized = "uninitialized",
+    pending = "pending",
+    fulfilled = "fulfilled",
+    rejected = "rejected"
+}
+type RequestStatusFlags = {
+    status: QueryStatus.uninitialized;
+    isUninitialized: true;
+    isLoading: false;
+    isSuccess: false;
+    isError: false;
+} | {
+    status: QueryStatus.pending;
+    isUninitialized: false;
+    isLoading: true;
+    isSuccess: false;
+    isError: false;
+} | {
+    status: QueryStatus.fulfilled;
+    isUninitialized: false;
+    isLoading: false;
+    isSuccess: true;
+    isError: false;
+} | {
+    status: QueryStatus.rejected;
+    isUninitialized: false;
+    isLoading: false;
+    isSuccess: false;
+    isError: true;
+};
+/**
+ * @public
+ */
+type SubscriptionOptions = {
+    /**
+     * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).
+     */
+    pollingInterval?: number;
+    /**
+     *  Defaults to 'false'. This setting allows you to control whether RTK Query will continue polling if the window is not focused.
+     *
+     *  If pollingInterval is not set or set to 0, this **will not be evaluated** until pollingInterval is greater than 0.
+     *
+     *  Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    skipPollingIfUnfocused?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     *
+     * Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    refetchOnReconnect?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     *
+     * Note: requires [`setupListeners`](./setupListeners) to have been called.
+     */
+    refetchOnFocus?: boolean;
+};
+type Subscribers = {
+    [requestId: string]: SubscriptionOptions;
+};
+type QueryKeys<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any> ? K : never;
+}[keyof Definitions];
+type InfiniteQueryKeys<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions]: Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? K : never;
+}[keyof Definitions];
+type MutationKeys<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions]: Definitions[K] extends MutationDefinition<any, any, any, any> ? K : never;
+}[keyof Definitions];
+type BaseQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = {
+    /**
+     * The argument originally passed into the hook or `initiate` action call
+     */
+    originalArgs: QueryArgFromAnyQuery<D>;
+    /**
+     * A unique ID associated with the request
+     */
+    requestId: string;
+    /**
+     * The received data from the query
+     */
+    data?: DataType;
+    /**
+     * The received error if applicable
+     */
+    error?: SerializedError | (D extends QueryDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);
+    /**
+     * The name of the endpoint associated with the query
+     */
+    endpointName: string;
+    /**
+     * Time that the latest query started
+     */
+    startedTimeStamp: number;
+    /**
+     * Time that the latest query was fulfilled
+     */
+    fulfilledTimeStamp?: number;
+};
+type QuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = Id<({
+    status: QueryStatus.fulfilled;
+} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'data' | 'fulfilledTimeStamp'> & {
+    error: undefined;
+}) | ({
+    status: QueryStatus.pending;
+} & BaseQuerySubState<D, DataType>) | ({
+    status: QueryStatus.rejected;
+} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'error'>) | {
+    status: QueryStatus.uninitialized;
+    originalArgs?: undefined;
+    data?: undefined;
+    error?: undefined;
+    requestId?: undefined;
+    endpointName?: string;
+    startedTimeStamp?: undefined;
+    fulfilledTimeStamp?: undefined;
+}>;
+type InfiniteQueryDirection = 'forward' | 'backward';
+type InfiniteQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any> ? QuerySubState<D, InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>> & {
+    direction?: InfiniteQueryDirection;
+} : never;
+type BaseMutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = {
+    requestId: string;
+    data?: ResultTypeFrom<D>;
+    error?: SerializedError | (D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);
+    endpointName: string;
+    startedTimeStamp: number;
+    fulfilledTimeStamp?: number;
+};
+type MutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = (({
+    status: QueryStatus.fulfilled;
+} & WithRequiredProp<BaseMutationSubState<D>, 'data' | 'fulfilledTimeStamp'>) & {
+    error: undefined;
+}) | (({
+    status: QueryStatus.pending;
+} & BaseMutationSubState<D>) & {
+    data?: undefined;
+}) | ({
+    status: QueryStatus.rejected;
+} & WithRequiredProp<BaseMutationSubState<D>, 'error'>) | {
+    requestId?: undefined;
+    status: QueryStatus.uninitialized;
+    data?: undefined;
+    error?: undefined;
+    endpointName?: string;
+    startedTimeStamp?: undefined;
+    fulfilledTimeStamp?: undefined;
+};
+type CombinedState<D extends EndpointDefinitions, E extends string, ReducerPath extends string> = {
+    queries: QueryState<D>;
+    mutations: MutationState<D>;
+    provided: InvalidationState<E>;
+    subscriptions: SubscriptionState;
+    config: ConfigState<ReducerPath>;
+};
+type InvalidationState<TagTypes extends string> = {
+    tags: {
+        [_ in TagTypes]: {
+            [id: string]: Array<QueryCacheKey>;
+            [id: number]: Array<QueryCacheKey>;
+        };
+    };
+    keys: Record<QueryCacheKey, Array<FullTagDescription<any>>>;
+};
+type QueryState<D extends EndpointDefinitions> = {
+    [queryCacheKey: string]: QuerySubState<D[string]> | InfiniteQuerySubState<D[string]> | undefined;
+};
+type SubscriptionState = {
+    [queryCacheKey: string]: Subscribers | undefined;
+};
+type ConfigState<ReducerPath> = RefetchConfigOptions & {
+    reducerPath: ReducerPath;
+    online: boolean;
+    focused: boolean;
+    middlewareRegistered: boolean | 'conflict';
+} & ModifiableConfigState;
+type ModifiableConfigState = {
+    keepUnusedDataFor: number;
+    invalidationBehavior: 'delayed' | 'immediately';
+} & RefetchConfigOptions;
+type MutationState<D extends EndpointDefinitions> = {
+    [requestId: string]: MutationSubState<D[string]> | undefined;
+};
+type RootState<Definitions extends EndpointDefinitions, TagTypes extends string, ReducerPath extends string> = {
+    [P in ReducerPath]: CombinedState<Definitions, TagTypes, P>;
+};
+
+type ResponseHandler = 'content-type' | 'json' | 'text' | ((response: Response) => Promise<any>);
+type CustomRequestInit = Override<RequestInit, {
+    headers?: Headers | string[][] | Record<string, string | undefined> | undefined;
+}>;
+interface FetchArgs extends CustomRequestInit {
+    url: string;
+    params?: Record<string, any>;
+    body?: any;
+    responseHandler?: ResponseHandler;
+    validateStatus?: (response: Response, body: any) => boolean;
+    /**
+     * A number in milliseconds that represents that maximum time a request can take before timing out.
+     */
+    timeout?: number;
+}
+type FetchBaseQueryError = {
+    /**
+     * * `number`:
+     *   HTTP status code
+     */
+    status: number;
+    data: unknown;
+} | {
+    /**
+     * * `"FETCH_ERROR"`:
+     *   An error that occurred during execution of `fetch` or the `fetchFn` callback option
+     **/
+    status: 'FETCH_ERROR';
+    data?: undefined;
+    error: string;
+} | {
+    /**
+     * * `"PARSING_ERROR"`:
+     *   An error happened during parsing.
+     *   Most likely a non-JSON-response was returned with the default `responseHandler` "JSON",
+     *   or an error occurred while executing a custom `responseHandler`.
+     **/
+    status: 'PARSING_ERROR';
+    originalStatus: number;
+    data: string;
+    error: string;
+} | {
+    /**
+     * * `"TIMEOUT_ERROR"`:
+     *   Request timed out
+     **/
+    status: 'TIMEOUT_ERROR';
+    data?: undefined;
+    error: string;
+} | {
+    /**
+     * * `"CUSTOM_ERROR"`:
+     *   A custom error type that you can return from your `queryFn` where another error might not make sense.
+     **/
+    status: 'CUSTOM_ERROR';
+    data?: unknown;
+    error: string;
+};
+type FetchBaseQueryArgs = {
+    baseUrl?: string;
+    prepareHeaders?: (headers: Headers, api: Pick<BaseQueryApi, 'getState' | 'extra' | 'endpoint' | 'type' | 'forced'> & {
+        arg: string | FetchArgs;
+        extraOptions: unknown;
+    }) => MaybePromise<Headers | void>;
+    fetchFn?: (input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>;
+    paramsSerializer?: (params: Record<string, any>) => string;
+    /**
+     * By default, we only check for 'application/json' and 'application/vnd.api+json' as the content-types for json. If you need to support another format, you can pass
+     * in a predicate function for your given api to get the same automatic stringifying behavior
+     * @example
+     * ```ts
+     * const isJsonContentType = (headers: Headers) => ["application/vnd.api+json", "application/json", "application/vnd.hal+json"].includes(headers.get("content-type")?.trim());
+     * ```
+     */
+    isJsonContentType?: (headers: Headers) => boolean;
+    /**
+     * Defaults to `application/json`;
+     */
+    jsonContentType?: string;
+    /**
+     * Custom replacer function used when calling `JSON.stringify()`;
+     */
+    jsonReplacer?: (this: any, key: string, value: any) => any;
+} & RequestInit & Pick<FetchArgs, 'responseHandler' | 'validateStatus' | 'timeout'>;
+type FetchBaseQueryMeta = {
+    request: Request;
+    response?: Response;
+};
+/**
+ * This is a very small wrapper around fetch that aims to simplify requests.
+ *
+ * @example
+ * ```ts
+ * const baseQuery = fetchBaseQuery({
+ *   baseUrl: 'https://api.your-really-great-app.com/v1/',
+ *   prepareHeaders: (headers, { getState }) => {
+ *     const token = (getState() as RootState).auth.token;
+ *     // If we have a token set in state, let's assume that we should be passing it.
+ *     if (token) {
+ *       headers.set('authorization', `Bearer ${token}`);
+ *     }
+ *     return headers;
+ *   },
+ * })
+ * ```
+ *
+ * @param {string} baseUrl
+ * The base URL for an API service.
+ * Typically in the format of https://example.com/
+ *
+ * @param {(headers: Headers, api: { getState: () => unknown; arg: string | FetchArgs; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders
+ * An optional function that can be used to inject headers on requests.
+ * Provides a Headers object, most of the `BaseQueryApi` (`dispatch` is not available), and the arg passed into the query function.
+ * Useful for setting authentication or headers that need to be set conditionally.
+ *
+ * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers
+ *
+ * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>} fetchFn
+ * Accepts a custom `fetch` function if you do not want to use the default on the window.
+ * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`
+ *
+ * @param {(params: Record<string, unknown>) => string} paramsSerializer
+ * An optional function that can be used to stringify querystring parameters.
+ *
+ * @param {(headers: Headers) => boolean} isJsonContentType
+ * An optional predicate function to determine if `JSON.stringify()` should be called on the `body` arg of `FetchArgs`
+ *
+ * @param {string} jsonContentType Used when automatically setting the content-type header for a request with a jsonifiable body that does not have an explicit content-type header. Defaults to `application/json`.
+ *
+ * @param {(this: any, key: string, value: any) => any} jsonReplacer Custom replacer function used when calling `JSON.stringify()`.
+ *
+ * @param {number} timeout
+ * A number in milliseconds that represents the maximum time a request can take before timing out.
+ */
+declare function fetchBaseQuery({ baseUrl, prepareHeaders, fetchFn, paramsSerializer, isJsonContentType, jsonContentType, jsonReplacer, timeout: defaultTimeout, responseHandler: globalResponseHandler, validateStatus: globalValidateStatus, ...baseFetchOptions }?: FetchBaseQueryArgs): BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta>;
+
+type RetryConditionFunction = (error: BaseQueryError<BaseQueryFn>, args: BaseQueryArg<BaseQueryFn>, extraArgs: {
+    attempt: number;
+    baseQueryApi: BaseQueryApi;
+    extraOptions: BaseQueryExtraOptions<BaseQueryFn> & RetryOptions;
+}) => boolean;
+type RetryOptions = {
+    /**
+     * Function used to determine delay between retries
+     */
+    backoff?: (attempt: number, maxRetries: number) => Promise<void>;
+} & ({
+    /**
+     * How many times the query will be retried (default: 5)
+     */
+    maxRetries?: number;
+    retryCondition?: undefined;
+} | {
+    /**
+     * Callback to determine if a retry should be attempted.
+     * Return `true` for another retry and `false` to quit trying prematurely.
+     */
+    retryCondition?: RetryConditionFunction;
+    maxRetries?: undefined;
+});
+declare function fail<BaseQuery extends BaseQueryFn = BaseQueryFn>(error: BaseQueryError<BaseQuery>, meta?: BaseQueryMeta<BaseQuery>): never;
+/**
+ * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.
+ *
+ * @example
+ *
+ * ```ts
+ * // codeblock-meta title="Retry every request 5 times by default"
+ * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'
+ * interface Post {
+ *   id: number
+ *   name: string
+ * }
+ * type PostsResponse = Post[]
+ *
+ * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.
+ * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });
+ * export const api = createApi({
+ *   baseQuery: staggeredBaseQuery,
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsResponse, void>({
+ *       query: () => ({ url: 'posts' }),
+ *     }),
+ *     getPost: build.query<PostsResponse, string>({
+ *       query: (id) => ({ url: `post/${id}` }),
+ *       extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint
+ *     }),
+ *   }),
+ * });
+ *
+ * export const { useGetPostsQuery, useGetPostQuery } = api;
+ * ```
+ */
+declare const retry: BaseQueryEnhancer<unknown, RetryOptions, void | RetryOptions> & {
+    fail: typeof fail;
+};
+
+declare function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T;
+
+export { type Api, type ApiContext, type ApiEndpointInfiniteQuery, type ApiEndpointMutation, type ApiEndpointQuery, type ApiModules, type BaseEndpointDefinition, type BaseQueryApi, type BaseQueryArg, type BaseQueryEnhancer, type BaseQueryError, type BaseQueryExtraOptions, type BaseQueryFn, type BaseQueryMeta, type BaseQueryResult, type CombinedState, type CoreModule, type CreateApi, type CreateApiOptions, DefinitionType, type DefinitionsFromApi, type EndpointBuilder, type EndpointDefinition, type EndpointDefinitions, type FetchArgs, type FetchBaseQueryArgs, type FetchBaseQueryError, type FetchBaseQueryMeta, type InfiniteData, type InfiniteQueryActionCreatorResult, type InfiniteQueryArgFrom, type InfiniteQueryConfigOptions, type InfiniteQueryDefinition, type InfiniteQueryExtraOptions, type InfiniteQueryResultSelectorResult, type InfiniteQuerySubState, type Module, type MutationActionCreatorResult, type MutationDefinition, type MutationExtraOptions, type MutationResultSelectorResult, NamedSchemaError, type OverrideResultType, type PageParamFrom, type PrefetchOptions, type QueryActionCreatorResult, type QueryArgFrom, type QueryCacheKey, type QueryDefinition, type QueryExtraOptions, type QueryKeys, type QueryResultSelectorResult, type QueryReturnValue, QueryStatus, type QuerySubState, type ResultDescription, type ResultTypeFrom, type RetryOptions, type RootState, type SchemaFailureConverter, type SchemaFailureHandler, type SchemaFailureInfo, type SerializeQueryArgs, type SkipToken, type StartQueryActionCreatorOptions, type SubscriptionOptions, type Id as TSHelpersId, type NoInfer as TSHelpersNoInfer, type Override as TSHelpersOverride, type TagDescription, type TagTypesFromApi, type TypedMutationOnQueryStarted, type TypedQueryOnQueryStarted, type UpdateDefinitions, buildCreateApi, copyWithStructuralSharing, coreModule, createApi, defaultSerializeQueryArgs, fakeBaseQuery, fetchBaseQuery, retry, setupListeners };
Index: node_modules/@reduxjs/toolkit/dist/query/react/cjs/index.js
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+'use strict'
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./rtk-query-react.production.min.cjs')
+} else {
+  module.exports = require('./rtk-query-react.development.cjs')
+}
Index: node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.development.cjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,759 @@
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/query/react/index.ts
+var react_exports = {};
+__export(react_exports, {
+  ApiProvider: () => ApiProvider,
+  UNINITIALIZED_VALUE: () => UNINITIALIZED_VALUE,
+  createApi: () => createApi,
+  reactHooksModule: () => reactHooksModule,
+  reactHooksModuleName: () => reactHooksModuleName
+});
+module.exports = __toCommonJS(react_exports);
+var import_query3 = require("@reduxjs/toolkit/query");
+
+// src/query/react/module.ts
+var import_toolkit2 = require("@reduxjs/toolkit");
+var import_react_redux3 = require("react-redux");
+var import_reselect = require("reselect");
+
+// src/query/utils/capitalize.ts
+function capitalize(str) {
+  return str.replace(str[0], str[0].toUpperCase());
+}
+
+// src/query/utils/countObjectKeys.ts
+function countObjectKeys(obj) {
+  let count = 0;
+  for (const _key in obj) {
+    count++;
+  }
+  return count;
+}
+
+// src/query/endpointDefinitions.ts
+function isQueryDefinition(e) {
+  return e.type === "query" /* query */;
+}
+function isMutationDefinition(e) {
+  return e.type === "mutation" /* mutation */;
+}
+function isInfiniteQueryDefinition(e) {
+  return e.type === "infinitequery" /* infinitequery */;
+}
+
+// src/query/tsHelpers.ts
+function safeAssign(target, ...args) {
+  return Object.assign(target, ...args);
+}
+
+// src/query/react/buildHooks.ts
+var import_toolkit = require("@reduxjs/toolkit");
+var import_query = require("@reduxjs/toolkit/query");
+var import_react3 = require("react");
+var import_react_redux2 = require("react-redux");
+
+// src/query/react/constants.ts
+var UNINITIALIZED_VALUE = Symbol();
+
+// src/query/react/useSerializedStableValue.ts
+var import_react = require("react");
+function useStableQueryArgs(queryArgs, serialize, endpointDefinition, endpointName) {
+  const incoming = (0, import_react.useMemo)(() => ({
+    queryArgs,
+    serialized: typeof queryArgs == "object" ? serialize({
+      queryArgs,
+      endpointDefinition,
+      endpointName
+    }) : queryArgs
+  }), [queryArgs, serialize, endpointDefinition, endpointName]);
+  const cache = (0, import_react.useRef)(incoming);
+  (0, import_react.useEffect)(() => {
+    if (cache.current.serialized !== incoming.serialized) {
+      cache.current = incoming;
+    }
+  }, [incoming]);
+  return cache.current.serialized === incoming.serialized ? cache.current.queryArgs : queryArgs;
+}
+
+// src/query/react/useShallowStableValue.ts
+var import_react2 = require("react");
+var import_react_redux = require("react-redux");
+function useShallowStableValue(value) {
+  const cache = (0, import_react2.useRef)(value);
+  (0, import_react2.useEffect)(() => {
+    if (!(0, import_react_redux.shallowEqual)(cache.current, value)) {
+      cache.current = value;
+    }
+  }, [value]);
+  return (0, import_react_redux.shallowEqual)(cache.current, value) ? cache.current : value;
+}
+
+// src/query/react/buildHooks.ts
+var canUseDOM = () => !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
+var isDOM = /* @__PURE__ */ canUseDOM();
+var isRunningInReactNative = () => typeof navigator !== "undefined" && navigator.product === "ReactNative";
+var isReactNative = /* @__PURE__ */ isRunningInReactNative();
+var getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? import_react3.useLayoutEffect : import_react3.useEffect;
+var useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();
+var noPendingQueryStateSelector = (selected) => {
+  if (selected.isUninitialized) {
+    return {
+      ...selected,
+      isUninitialized: false,
+      isFetching: true,
+      isLoading: selected.data !== void 0 ? false : true,
+      status: import_query.QueryStatus.pending
+    };
+  }
+  return selected;
+};
+function pick(obj, ...keys) {
+  const ret = {};
+  keys.forEach((key) => {
+    ret[key] = obj[key];
+  });
+  return ret;
+}
+var COMMON_HOOK_DEBUG_FIELDS = ["data", "status", "isLoading", "isSuccess", "isError", "error"];
+function buildHooks({
+  api,
+  moduleOptions: {
+    batch,
+    hooks: {
+      useDispatch,
+      useSelector,
+      useStore
+    },
+    unstable__sideEffectsInRender,
+    createSelector
+  },
+  serializeQueryArgs,
+  context
+}) {
+  const usePossiblyImmediateEffect = unstable__sideEffectsInRender ? (cb) => cb() : import_react3.useEffect;
+  return {
+    buildQueryHooks,
+    buildInfiniteQueryHooks,
+    buildMutationHook,
+    usePrefetch
+  };
+  function queryStatePreSelector(currentState, lastResult, queryArgs) {
+    if (lastResult?.endpointName && currentState.isUninitialized) {
+      const {
+        endpointName
+      } = lastResult;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      if (queryArgs !== import_query.skipToken && serializeQueryArgs({
+        queryArgs: lastResult.originalArgs,
+        endpointDefinition,
+        endpointName
+      }) === serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      })) lastResult = void 0;
+    }
+    let data = currentState.isSuccess ? currentState.data : lastResult?.data;
+    if (data === void 0) data = currentState.data;
+    const hasData = data !== void 0;
+    const isFetching = currentState.isLoading;
+    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;
+    const isSuccess = currentState.isSuccess || hasData && (isFetching && !lastResult?.isError || currentState.isUninitialized);
+    return {
+      ...currentState,
+      data,
+      currentData: currentState.data,
+      isFetching,
+      isLoading,
+      isSuccess
+    };
+  }
+  function infiniteQueryStatePreSelector(currentState, lastResult, queryArgs) {
+    if (lastResult?.endpointName && currentState.isUninitialized) {
+      const {
+        endpointName
+      } = lastResult;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      if (queryArgs !== import_query.skipToken && serializeQueryArgs({
+        queryArgs: lastResult.originalArgs,
+        endpointDefinition,
+        endpointName
+      }) === serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      })) lastResult = void 0;
+    }
+    let data = currentState.isSuccess ? currentState.data : lastResult?.data;
+    if (data === void 0) data = currentState.data;
+    const hasData = data !== void 0;
+    const isFetching = currentState.isLoading;
+    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;
+    const isSuccess = currentState.isSuccess || isFetching && hasData;
+    return {
+      ...currentState,
+      data,
+      currentData: currentState.data,
+      isFetching,
+      isLoading,
+      isSuccess
+    };
+  }
+  function usePrefetch(endpointName, defaultOptions) {
+    const dispatch = useDispatch();
+    const stableDefaultOptions = useShallowStableValue(defaultOptions);
+    return (0, import_react3.useCallback)((arg, options) => dispatch(api.util.prefetch(endpointName, arg, {
+      ...stableDefaultOptions,
+      ...options
+    })), [endpointName, dispatch, stableDefaultOptions]);
+  }
+  function useQuerySubscriptionCommonImpl(endpointName, arg, {
+    refetchOnReconnect,
+    refetchOnFocus,
+    refetchOnMountOrArgChange,
+    skip = false,
+    pollingInterval = 0,
+    skipPollingIfUnfocused = false,
+    ...rest
+  } = {}) {
+    const {
+      initiate
+    } = api.endpoints[endpointName];
+    const dispatch = useDispatch();
+    const subscriptionSelectorsRef = (0, import_react3.useRef)(void 0);
+    if (!subscriptionSelectorsRef.current) {
+      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());
+      if (true) {
+        if (typeof returnedValue !== "object" || typeof returnedValue?.type === "string") {
+          throw new Error(false ? _formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store.
+    You must add the middleware for RTK-Query to function correctly!`);
+        }
+      }
+      subscriptionSelectorsRef.current = returnedValue;
+    }
+    const stableArg = useStableQueryArgs(
+      skip ? import_query.skipToken : arg,
+      // Even if the user provided a per-endpoint `serializeQueryArgs` with
+      // a consistent return value, _here_ we want to use the default behavior
+      // so we can tell if _anything_ actually changed. Otherwise, we can end up
+      // with a case where the query args did change but the serialization doesn't,
+      // and then we never try to initiate a refetch.
+      import_query.defaultSerializeQueryArgs,
+      context.endpointDefinitions[endpointName],
+      endpointName
+    );
+    const stableSubscriptionOptions = useShallowStableValue({
+      refetchOnReconnect,
+      refetchOnFocus,
+      pollingInterval,
+      skipPollingIfUnfocused
+    });
+    const initialPageParam = rest.initialPageParam;
+    const stableInitialPageParam = useShallowStableValue(initialPageParam);
+    const promiseRef = (0, import_react3.useRef)(void 0);
+    let {
+      queryCacheKey,
+      requestId
+    } = promiseRef.current || {};
+    let currentRenderHasSubscription = false;
+    if (queryCacheKey && requestId) {
+      currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId);
+    }
+    const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== void 0;
+    usePossiblyImmediateEffect(() => {
+      if (subscriptionRemoved) {
+        promiseRef.current = void 0;
+      }
+    }, [subscriptionRemoved]);
+    usePossiblyImmediateEffect(() => {
+      const lastPromise = promiseRef.current;
+      if (typeof process !== "undefined" && false) {
+        console.log(subscriptionRemoved);
+      }
+      if (stableArg === import_query.skipToken) {
+        lastPromise?.unsubscribe();
+        promiseRef.current = void 0;
+        return;
+      }
+      const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;
+      if (!lastPromise || lastPromise.arg !== stableArg) {
+        lastPromise?.unsubscribe();
+        const promise = dispatch(initiate(stableArg, {
+          subscriptionOptions: stableSubscriptionOptions,
+          forceRefetch: refetchOnMountOrArgChange,
+          ...isInfiniteQueryDefinition(context.endpointDefinitions[endpointName]) ? {
+            initialPageParam: stableInitialPageParam
+          } : {}
+        }));
+        promiseRef.current = promise;
+      } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {
+        lastPromise.updateSubscriptionOptions(stableSubscriptionOptions);
+      }
+    }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, endpointName]);
+    return [promiseRef, dispatch, initiate, stableSubscriptionOptions];
+  }
+  function buildUseQueryState(endpointName, preSelector) {
+    const useQueryState = (arg, {
+      skip = false,
+      selectFromResult
+    } = {}) => {
+      const {
+        select
+      } = api.endpoints[endpointName];
+      const stableArg = useStableQueryArgs(skip ? import_query.skipToken : arg, serializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);
+      const lastValue = (0, import_react3.useRef)(void 0);
+      const selectDefaultResult = (0, import_react3.useMemo)(() => (
+        // Normally ts-ignores are bad and should be avoided, but we're
+        // already casting this selector to be `Selector<any>` anyway,
+        // so the inconsistencies don't matter here
+        // @ts-ignore
+        createSelector([
+          // @ts-ignore
+          select(stableArg),
+          (_, lastResult) => lastResult,
+          (_) => stableArg
+        ], preSelector, {
+          memoizeOptions: {
+            resultEqualityCheck: import_react_redux2.shallowEqual
+          }
+        })
+      ), [select, stableArg]);
+      const querySelector = (0, import_react3.useMemo)(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, {
+        devModeChecks: {
+          identityFunctionCheck: "never"
+        }
+      }) : selectDefaultResult, [selectDefaultResult, selectFromResult]);
+      const currentState = useSelector((state) => querySelector(state, lastValue.current), import_react_redux2.shallowEqual);
+      const store = useStore();
+      const newLastValue = selectDefaultResult(store.getState(), lastValue.current);
+      useIsomorphicLayoutEffect(() => {
+        lastValue.current = newLastValue;
+      }, [newLastValue]);
+      return currentState;
+    };
+    return useQueryState;
+  }
+  function usePromiseRefUnsubscribeOnUnmount(promiseRef) {
+    (0, import_react3.useEffect)(() => {
+      return () => {
+        promiseRef.current?.unsubscribe?.();
+        promiseRef.current = void 0;
+      };
+    }, [promiseRef]);
+  }
+  function refetchOrErrorIfUnmounted(promiseRef) {
+    if (!promiseRef.current) throw new Error(false ? _formatProdErrorMessage2(38) : "Cannot refetch a query that has not been started yet.");
+    return promiseRef.current.refetch();
+  }
+  function buildQueryHooks(endpointName) {
+    const useQuerySubscription = (arg, options = {}) => {
+      const [promiseRef] = useQuerySubscriptionCommonImpl(endpointName, arg, options);
+      usePromiseRefUnsubscribeOnUnmount(promiseRef);
+      return (0, import_react3.useMemo)(() => ({
+        /**
+         * A method to manually refetch data for the query
+         */
+        refetch: () => refetchOrErrorIfUnmounted(promiseRef)
+      }), [promiseRef]);
+    };
+    const useLazyQuerySubscription = ({
+      refetchOnReconnect,
+      refetchOnFocus,
+      pollingInterval = 0,
+      skipPollingIfUnfocused = false
+    } = {}) => {
+      const {
+        initiate
+      } = api.endpoints[endpointName];
+      const dispatch = useDispatch();
+      const [arg, setArg] = (0, import_react3.useState)(UNINITIALIZED_VALUE);
+      const promiseRef = (0, import_react3.useRef)(void 0);
+      const stableSubscriptionOptions = useShallowStableValue({
+        refetchOnReconnect,
+        refetchOnFocus,
+        pollingInterval,
+        skipPollingIfUnfocused
+      });
+      usePossiblyImmediateEffect(() => {
+        const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;
+        if (stableSubscriptionOptions !== lastSubscriptionOptions) {
+          promiseRef.current?.updateSubscriptionOptions(stableSubscriptionOptions);
+        }
+      }, [stableSubscriptionOptions]);
+      const subscriptionOptionsRef = (0, import_react3.useRef)(stableSubscriptionOptions);
+      usePossiblyImmediateEffect(() => {
+        subscriptionOptionsRef.current = stableSubscriptionOptions;
+      }, [stableSubscriptionOptions]);
+      const trigger = (0, import_react3.useCallback)(function(arg2, preferCacheValue = false) {
+        let promise;
+        batch(() => {
+          promiseRef.current?.unsubscribe();
+          promiseRef.current = promise = dispatch(initiate(arg2, {
+            subscriptionOptions: subscriptionOptionsRef.current,
+            forceRefetch: !preferCacheValue
+          }));
+          setArg(arg2);
+        });
+        return promise;
+      }, [dispatch, initiate]);
+      const reset = (0, import_react3.useCallback)(() => {
+        if (promiseRef.current?.queryCacheKey) {
+          dispatch(api.internalActions.removeQueryResult({
+            queryCacheKey: promiseRef.current?.queryCacheKey
+          }));
+        }
+      }, [dispatch]);
+      (0, import_react3.useEffect)(() => {
+        return () => {
+          promiseRef?.current?.unsubscribe();
+        };
+      }, []);
+      (0, import_react3.useEffect)(() => {
+        if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {
+          trigger(arg, true);
+        }
+      }, [arg, trigger]);
+      return (0, import_react3.useMemo)(() => [trigger, arg, {
+        reset
+      }], [trigger, arg, reset]);
+    };
+    const useQueryState = buildUseQueryState(endpointName, queryStatePreSelector);
+    return {
+      useQueryState,
+      useQuerySubscription,
+      useLazyQuerySubscription,
+      useLazyQuery(options) {
+        const [trigger, arg, {
+          reset
+        }] = useLazyQuerySubscription(options);
+        const queryStateResults = useQueryState(arg, {
+          ...options,
+          skip: arg === UNINITIALIZED_VALUE
+        });
+        const info = (0, import_react3.useMemo)(() => ({
+          lastArg: arg
+        }), [arg]);
+        return (0, import_react3.useMemo)(() => [trigger, {
+          ...queryStateResults,
+          reset
+        }, info], [trigger, queryStateResults, reset, info]);
+      },
+      useQuery(arg, options) {
+        const querySubscriptionResults = useQuerySubscription(arg, options);
+        const queryStateResults = useQueryState(arg, {
+          selectFromResult: arg === import_query.skipToken || options?.skip ? void 0 : noPendingQueryStateSelector,
+          ...options
+        });
+        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS);
+        (0, import_react3.useDebugValue)(debugValue);
+        return (0, import_react3.useMemo)(() => ({
+          ...queryStateResults,
+          ...querySubscriptionResults
+        }), [queryStateResults, querySubscriptionResults]);
+      }
+    };
+  }
+  function buildInfiniteQueryHooks(endpointName) {
+    const useInfiniteQuerySubscription = (arg, options = {}) => {
+      const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl(endpointName, arg, options);
+      const subscriptionOptionsRef = (0, import_react3.useRef)(stableSubscriptionOptions);
+      usePossiblyImmediateEffect(() => {
+        subscriptionOptionsRef.current = stableSubscriptionOptions;
+      }, [stableSubscriptionOptions]);
+      const trigger = (0, import_react3.useCallback)(function(arg2, direction) {
+        let promise;
+        batch(() => {
+          promiseRef.current?.unsubscribe();
+          promiseRef.current = promise = dispatch(initiate(arg2, {
+            subscriptionOptions: subscriptionOptionsRef.current,
+            direction
+          }));
+        });
+        return promise;
+      }, [promiseRef, dispatch, initiate]);
+      usePromiseRefUnsubscribeOnUnmount(promiseRef);
+      const stableArg = useStableQueryArgs(
+        options.skip ? import_query.skipToken : arg,
+        // Even if the user provided a per-endpoint `serializeQueryArgs` with
+        // a consistent return value, _here_ we want to use the default behavior
+        // so we can tell if _anything_ actually changed. Otherwise, we can end up
+        // with a case where the query args did change but the serialization doesn't,
+        // and then we never try to initiate a refetch.
+        import_query.defaultSerializeQueryArgs,
+        context.endpointDefinitions[endpointName],
+        endpointName
+      );
+      const refetch = (0, import_react3.useCallback)(() => refetchOrErrorIfUnmounted(promiseRef), [promiseRef]);
+      return (0, import_react3.useMemo)(() => {
+        const fetchNextPage = () => {
+          return trigger(stableArg, "forward");
+        };
+        const fetchPreviousPage = () => {
+          return trigger(stableArg, "backward");
+        };
+        return {
+          trigger,
+          /**
+           * A method to manually refetch data for the query
+           */
+          refetch,
+          fetchNextPage,
+          fetchPreviousPage
+        };
+      }, [refetch, trigger, stableArg]);
+    };
+    const useInfiniteQueryState = buildUseQueryState(endpointName, infiniteQueryStatePreSelector);
+    return {
+      useInfiniteQueryState,
+      useInfiniteQuerySubscription,
+      useInfiniteQuery(arg, options) {
+        const {
+          refetch,
+          fetchNextPage,
+          fetchPreviousPage
+        } = useInfiniteQuerySubscription(arg, options);
+        const queryStateResults = useInfiniteQueryState(arg, {
+          selectFromResult: arg === import_query.skipToken || options?.skip ? void 0 : noPendingQueryStateSelector,
+          ...options
+        });
+        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, "hasNextPage", "hasPreviousPage");
+        (0, import_react3.useDebugValue)(debugValue);
+        return (0, import_react3.useMemo)(() => ({
+          ...queryStateResults,
+          fetchNextPage,
+          fetchPreviousPage,
+          refetch
+        }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]);
+      }
+    };
+  }
+  function buildMutationHook(name) {
+    return ({
+      selectFromResult,
+      fixedCacheKey
+    } = {}) => {
+      const {
+        select,
+        initiate
+      } = api.endpoints[name];
+      const dispatch = useDispatch();
+      const [promise, setPromise] = (0, import_react3.useState)();
+      (0, import_react3.useEffect)(() => () => {
+        if (!promise?.arg.fixedCacheKey) {
+          promise?.reset();
+        }
+      }, [promise]);
+      const triggerMutation = (0, import_react3.useCallback)(function(arg) {
+        const promise2 = dispatch(initiate(arg, {
+          fixedCacheKey
+        }));
+        setPromise(promise2);
+        return promise2;
+      }, [dispatch, initiate, fixedCacheKey]);
+      const {
+        requestId
+      } = promise || {};
+      const selectDefaultResult = (0, import_react3.useMemo)(() => select({
+        fixedCacheKey,
+        requestId: promise?.requestId
+      }), [fixedCacheKey, promise, select]);
+      const mutationSelector = (0, import_react3.useMemo)(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]);
+      const currentState = useSelector(mutationSelector, import_react_redux2.shallowEqual);
+      const originalArgs = fixedCacheKey == null ? promise?.arg.originalArgs : void 0;
+      const reset = (0, import_react3.useCallback)(() => {
+        batch(() => {
+          if (promise) {
+            setPromise(void 0);
+          }
+          if (fixedCacheKey) {
+            dispatch(api.internalActions.removeMutationResult({
+              requestId,
+              fixedCacheKey
+            }));
+          }
+        });
+      }, [dispatch, fixedCacheKey, promise, requestId]);
+      const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, "endpointName");
+      (0, import_react3.useDebugValue)(debugValue);
+      const finalState = (0, import_react3.useMemo)(() => ({
+        ...currentState,
+        originalArgs,
+        reset
+      }), [currentState, originalArgs, reset]);
+      return (0, import_react3.useMemo)(() => [triggerMutation, finalState], [triggerMutation, finalState]);
+    };
+  }
+}
+
+// src/query/react/module.ts
+var reactHooksModuleName = /* @__PURE__ */ Symbol();
+var reactHooksModule = ({
+  batch = import_react_redux3.batch,
+  hooks = {
+    useDispatch: import_react_redux3.useDispatch,
+    useSelector: import_react_redux3.useSelector,
+    useStore: import_react_redux3.useStore
+  },
+  createSelector = import_reselect.createSelector,
+  unstable__sideEffectsInRender = false,
+  ...rest
+} = {}) => {
+  if (true) {
+    const hookNames = ["useDispatch", "useSelector", "useStore"];
+    let warned = false;
+    for (const hookName of hookNames) {
+      if (countObjectKeys(rest) > 0) {
+        if (rest[hookName]) {
+          if (!warned) {
+            console.warn("As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`");
+            warned = true;
+          }
+        }
+        hooks[hookName] = rest[hookName];
+      }
+      if (typeof hooks[hookName] !== "function") {
+        throw new Error(false ? _formatProdErrorMessage3(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(", ")}.
+Hook ${hookName} was either not provided or not a function.`);
+      }
+    }
+  }
+  return {
+    name: reactHooksModuleName,
+    init(api, {
+      serializeQueryArgs
+    }, context) {
+      const anyApi = api;
+      const {
+        buildQueryHooks,
+        buildInfiniteQueryHooks,
+        buildMutationHook,
+        usePrefetch
+      } = buildHooks({
+        api,
+        moduleOptions: {
+          batch,
+          hooks,
+          unstable__sideEffectsInRender,
+          createSelector
+        },
+        serializeQueryArgs,
+        context
+      });
+      safeAssign(anyApi, {
+        usePrefetch
+      });
+      safeAssign(context, {
+        batch
+      });
+      return {
+        injectEndpoint(endpointName, definition) {
+          if (isQueryDefinition(definition)) {
+            const {
+              useQuery,
+              useLazyQuery,
+              useLazyQuerySubscription,
+              useQueryState,
+              useQuerySubscription
+            } = buildQueryHooks(endpointName);
+            safeAssign(anyApi.endpoints[endpointName], {
+              useQuery,
+              useLazyQuery,
+              useLazyQuerySubscription,
+              useQueryState,
+              useQuerySubscription
+            });
+            api[`use${capitalize(endpointName)}Query`] = useQuery;
+            api[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery;
+          }
+          if (isMutationDefinition(definition)) {
+            const useMutation = buildMutationHook(endpointName);
+            safeAssign(anyApi.endpoints[endpointName], {
+              useMutation
+            });
+            api[`use${capitalize(endpointName)}Mutation`] = useMutation;
+          } else if (isInfiniteQueryDefinition(definition)) {
+            const {
+              useInfiniteQuery,
+              useInfiniteQuerySubscription,
+              useInfiniteQueryState
+            } = buildInfiniteQueryHooks(endpointName);
+            safeAssign(anyApi.endpoints[endpointName], {
+              useInfiniteQuery,
+              useInfiniteQuerySubscription,
+              useInfiniteQueryState
+            });
+            api[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery;
+          }
+        }
+      };
+    }
+  };
+};
+
+// src/query/react/index.ts
+__reExport(react_exports, require("@reduxjs/toolkit/query"), module.exports);
+
+// src/query/react/ApiProvider.tsx
+var import_toolkit3 = require("@reduxjs/toolkit");
+var import_react4 = require("react");
+var import_react5 = require("react");
+var React = __toESM(require("react"));
+var import_react_redux4 = require("react-redux");
+var import_query2 = require("@reduxjs/toolkit/query");
+function ApiProvider(props) {
+  const context = props.context || import_react_redux4.ReactReduxContext;
+  const existingContext = (0, import_react4.useContext)(context);
+  if (existingContext) {
+    throw new Error(false ? _formatProdErrorMessage4(35) : "Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.");
+  }
+  const [store] = React.useState(() => (0, import_toolkit3.configureStore)({
+    reducer: {
+      [props.api.reducerPath]: props.api.reducer
+    },
+    middleware: (gDM) => gDM().concat(props.api.middleware)
+  }));
+  (0, import_react5.useEffect)(() => props.setupListeners === false ? void 0 : (0, import_query2.setupListeners)(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]);
+  return /* @__PURE__ */ React.createElement(import_react_redux4.Provider, { store, context }, props.children);
+}
+
+// src/query/react/index.ts
+var createApi = /* @__PURE__ */ (0, import_query3.buildCreateApi)((0, import_query3.coreModule)(), reactHooksModule());
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  ApiProvider,
+  UNINITIALIZED_VALUE,
+  createApi,
+  reactHooksModule,
+  reactHooksModuleName,
+  ...require("@reduxjs/toolkit/query")
+});
+//# sourceMappingURL=rtk-query-react.development.cjs.map
Index: node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.development.cjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../../../src/query/react/index.ts","../../../../src/query/react/module.ts","../../../../src/query/utils/capitalize.ts","../../../../src/query/utils/countObjectKeys.ts","../../../../src/query/endpointDefinitions.ts","../../../../src/query/tsHelpers.ts","../../../../src/query/react/buildHooks.ts","../../../../src/query/react/constants.ts","../../../../src/query/react/useSerializedStableValue.ts","../../../../src/query/react/useShallowStableValue.ts","../../../../src/query/react/ApiProvider.tsx"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nimport { buildCreateApi, coreModule } from '@reduxjs/toolkit/query';\nimport { reactHooksModule, reactHooksModuleName } from './module';\nexport * from '@reduxjs/toolkit/query';\nexport { ApiProvider } from './ApiProvider';\nconst createApi = /* @__PURE__ */buildCreateApi(coreModule(), reactHooksModule());\nexport type { TypedUseMutationResult, TypedUseQueryHookResult, TypedUseQueryStateResult, TypedUseQuerySubscriptionResult, TypedLazyQueryTrigger, TypedUseLazyQuery, TypedUseMutation, TypedMutationTrigger, TypedQueryStateSelector, TypedUseQueryState, TypedUseQuery, TypedUseQuerySubscription, TypedUseLazyQuerySubscription, TypedUseQueryStateOptions, TypedUseLazyQueryStateResult, TypedUseInfiniteQuery, TypedUseInfiniteQueryHookResult, TypedUseInfiniteQueryStateResult, TypedUseInfiniteQuerySubscriptionResult, TypedUseInfiniteQueryStateOptions, TypedInfiniteQueryStateSelector, TypedUseInfiniteQuerySubscription, TypedUseInfiniteQueryState, TypedLazyInfiniteQueryTrigger } from './buildHooks';\nexport { UNINITIALIZED_VALUE } from './constants';\nexport { createApi, reactHooksModule, reactHooksModuleName };","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Api, BaseQueryFn, EndpointDefinitions, InfiniteQueryDefinition, Module, MutationDefinition, PrefetchOptions, QueryArgFrom, QueryDefinition, QueryKeys } from '@reduxjs/toolkit/query';\nimport { batch as rrBatch, useDispatch as rrUseDispatch, useSelector as rrUseSelector, useStore as rrUseStore } from 'react-redux';\nimport { createSelector as _createSelector } from 'reselect';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { safeAssign } from '../tsHelpers';\nimport { capitalize, countObjectKeys } from '../utils';\nimport type { InfiniteQueryHooks, MutationHooks, QueryHooks } from './buildHooks';\nimport { buildHooks } from './buildHooks';\nimport type { HooksWithUniqueNames } from './namedHooks';\nexport const reactHooksModuleName = /* @__PURE__ */Symbol();\nexport type ReactHooksModule = typeof reactHooksModuleName;\ndeclare module '@reduxjs/toolkit/query' {\n  export interface ApiModules<\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  ReducerPath extends string,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  TagTypes extends string> {\n    [reactHooksModuleName]: {\n      /**\n       *  Endpoints based on the input endpoints provided to `createApi`, containing `select`, `hooks` and `action matchers`.\n       */\n      endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? QueryHooks<Definitions[K]> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? MutationHooks<Definitions[K]> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryHooks<Definitions[K]> : never };\n      /**\n       * A hook that accepts a string endpoint name, and provides a callback that when called, pre-fetches the data for that endpoint.\n       */\n      usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, options?: PrefetchOptions): (arg: QueryArgFrom<Definitions[EndpointName]>, options?: PrefetchOptions) => void;\n    } & HooksWithUniqueNames<Definitions>;\n  }\n}\ntype RR = typeof import('react-redux');\nexport interface ReactHooksModuleOptions {\n  /**\n   * The hooks from React Redux to be used\n   */\n  hooks?: {\n    /**\n     * The version of the `useDispatch` hook to be used\n     */\n    useDispatch: RR['useDispatch'];\n    /**\n     * The version of the `useSelector` hook to be used\n     */\n    useSelector: RR['useSelector'];\n    /**\n     * The version of the `useStore` hook to be used\n     */\n    useStore: RR['useStore'];\n  };\n  /**\n   * The version of the `batchedUpdates` function to be used\n   */\n  batch?: RR['batch'];\n  /**\n   * Enables performing asynchronous tasks immediately within a render.\n   *\n   * @example\n   *\n   * ```ts\n   * import {\n   *   buildCreateApi,\n   *   coreModule,\n   *   reactHooksModule\n   * } from '@reduxjs/toolkit/query/react'\n   *\n   * const createApi = buildCreateApi(\n   *   coreModule(),\n   *   reactHooksModule({ unstable__sideEffectsInRender: true })\n   * )\n   * ```\n   */\n  unstable__sideEffectsInRender?: boolean;\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module that generates react hooks from endpoints, for use with `buildCreateApi`.\n *\n *  @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @returns A module for use with `buildCreateApi`\n */\nexport const reactHooksModule = ({\n  batch = rrBatch,\n  hooks = {\n    useDispatch: rrUseDispatch,\n    useSelector: rrUseSelector,\n    useStore: rrUseStore\n  },\n  createSelector = _createSelector,\n  unstable__sideEffectsInRender = false,\n  ...rest\n}: ReactHooksModuleOptions = {}): Module<ReactHooksModule> => {\n  if (process.env.NODE_ENV !== 'production') {\n    const hookNames = ['useDispatch', 'useSelector', 'useStore'] as const;\n    let warned = false;\n    for (const hookName of hookNames) {\n      // warn for old hook options\n      if (countObjectKeys(rest) > 0) {\n        if ((rest as Partial<typeof hooks>)[hookName]) {\n          if (!warned) {\n            console.warn('As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:' + '\\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`');\n            warned = true;\n          }\n        }\n        // migrate\n        // @ts-ignore\n        hooks[hookName] = rest[hookName];\n      }\n      // then make sure we have them all\n      if (typeof hooks[hookName] !== 'function') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(', ')}.\\nHook ${hookName} was either not provided or not a function.`);\n      }\n    }\n  }\n  return {\n    name: reactHooksModuleName,\n    init(api, {\n      serializeQueryArgs\n    }, context) {\n      const anyApi = api as any as Api<any, Record<string, any>, any, any, ReactHooksModule>;\n      const {\n        buildQueryHooks,\n        buildInfiniteQueryHooks,\n        buildMutationHook,\n        usePrefetch\n      } = buildHooks({\n        api,\n        moduleOptions: {\n          batch,\n          hooks,\n          unstable__sideEffectsInRender,\n          createSelector\n        },\n        serializeQueryArgs,\n        context\n      });\n      safeAssign(anyApi, {\n        usePrefetch\n      });\n      safeAssign(context, {\n        batch\n      });\n      return {\n        injectEndpoint(endpointName, definition) {\n          if (isQueryDefinition(definition)) {\n            const {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            } = buildQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            });\n            (api as any)[`use${capitalize(endpointName)}Query`] = useQuery;\n            (api as any)[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery;\n          }\n          if (isMutationDefinition(definition)) {\n            const useMutation = buildMutationHook(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useMutation\n            });\n            (api as any)[`use${capitalize(endpointName)}Mutation`] = useMutation;\n          } else if (isInfiniteQueryDefinition(definition)) {\n            const {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            } = buildInfiniteQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            });\n            (api as any)[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery;\n          }\n        }\n      };\n    }\n  };\n};","export function capitalize(str: string) {\n  return str.replace(str[0], str[0].toUpperCase());\n}","// Fast method for counting an object's keys\n// without resorting to `Object.keys(obj).length\n// Will this make a big difference in perf? Probably not\n// But we can save a few allocations.\n\nexport function countObjectKeys(obj: Record<any, any>) {\n  let count = 0;\n  for (const _key in obj) {\n    count++;\n  }\n  return count;\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Selector, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Api, ApiContext, ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, BaseQueryFn, CoreModule, EndpointDefinitions, InfiniteQueryActionCreatorResult, InfiniteQueryArgFrom, InfiniteQueryDefinition, InfiniteQueryResultSelectorResult, InfiniteQuerySubState, MutationActionCreatorResult, MutationDefinition, MutationResultSelectorResult, PageParamFrom, PrefetchOptions, QueryActionCreatorResult, QueryArgFrom, QueryCacheKey, QueryDefinition, QueryKeys, QueryResultSelectorResult, QuerySubState, ResultTypeFrom, RootState, SerializeQueryArgs, SkipToken, SubscriptionOptions, TSHelpersId, TSHelpersNoInfer, TSHelpersOverride } from '@reduxjs/toolkit/query';\nimport { defaultSerializeQueryArgs, QueryStatus, skipToken } from '@reduxjs/toolkit/query';\nimport type { DependencyList } from 'react';\nimport { useCallback, useDebugValue, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport type { SubscriptionSelectors } from '../core/buildMiddleware/index';\nimport type { InfiniteData, InfiniteQueryConfigOptions } from '../core/index';\nimport type { UninitializedValue } from './constants';\nimport { UNINITIALIZED_VALUE } from './constants';\nimport type { ReactHooksModuleOptions } from './module';\nimport { useStableQueryArgs } from './useSerializedStableValue';\nimport { useShallowStableValue } from './useShallowStableValue';\nimport type { InfiniteQueryDirection } from '../core/apiState';\nimport { isInfiniteQueryDefinition } from '../endpointDefinitions';\nimport type { StartInfiniteQueryActionCreator } from '../core/buildInitiate';\n\n// Copy-pasted from React-Redux\nconst canUseDOM = () => !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nconst isDOM = /* @__PURE__ */canUseDOM();\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\nconst isRunningInReactNative = () => typeof navigator !== 'undefined' && navigator.product === 'ReactNative';\nconst isReactNative = /* @__PURE__ */isRunningInReactNative();\nconst getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? useLayoutEffect : useEffect;\nexport const useIsomorphicLayoutEffect = /* @__PURE__ */getUseIsomorphicLayoutEffect();\nexport type QueryHooks<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  useQuery: UseQuery<Definition>;\n  useLazyQuery: UseLazyQuery<Definition>;\n  useQuerySubscription: UseQuerySubscription<Definition>;\n  useLazyQuerySubscription: UseLazyQuerySubscription<Definition>;\n  useQueryState: UseQueryState<Definition>;\n};\nexport type InfiniteQueryHooks<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  useInfiniteQuery: UseInfiniteQuery<Definition>;\n  useInfiniteQuerySubscription: UseInfiniteQuerySubscription<Definition>;\n  useInfiniteQueryState: UseInfiniteQueryState<Definition>;\n};\nexport type MutationHooks<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  useMutation: UseMutation<Definition>;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n * This hook combines the functionality of both [`useQueryState`](#usequerystate) and [`useQuerySubscription`](#usequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions & UseQueryStateOptions<D, R>) => UseQueryHookResult<D, R>;\nexport type TypedUseQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQueryHookResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & UseQuerySubscriptionResult<D>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuery` hook in userland code.\n */\nexport type TypedUseQueryHookResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery, R> & TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery>;\nexport type UseQuerySubscriptionOptions = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useQuery`](#usequery) or [`useQueryState`](#usequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions) => UseQuerySubscriptionResult<D>;\nexport type TypedUseQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQuerySubscriptionResult<D extends QueryDefinition<any, any, any, any>> = Pick<QueryActionCreatorResult<D>, 'refetch'>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscriptionResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryLastPromiseInfo<D extends QueryDefinition<any, any, any, any>> = {\n  lastArg: QueryArgFrom<D>;\n};\n\n/**\n * A React hook similar to [`useQuery`](#usequery), but with manual control over when the data fetching occurs.\n *\n * This hook includes the functionality of [`useLazyQuerySubscription`](#uselazyquerysubscription).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n *\n * #### Note\n *\n * When the trigger function returned from a LazyQuery is called, it always initiates a new request to the server even if there is cached data. Set `preferCacheValue`(the second argument to the function) as `true` if you want it to immediately return a cached value if one exists.\n */\nexport type UseLazyQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(options?: SubscriptionOptions & Omit<UseQueryStateOptions<D, R>, 'skip'>) => [LazyQueryTrigger<D>, UseLazyQueryStateResult<D, R>, UseLazyQueryLastPromiseInfo<D>];\nexport type TypedUseLazyQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryStateResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & {\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useLazyQuery` hook in userland code.\n */\nexport type TypedUseLazyQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseLazyQueryStateResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\nexport type LazyQueryTrigger<D extends QueryDefinition<any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, preferCacheValue?: boolean): QueryActionCreatorResult<D>;\n};\nexport type TypedLazyQueryTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = LazyQueryTrigger<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook similar to [`useQuerySubscription`](#usequerysubscription), but with manual control over when the data fetching occurs.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useLazyQuery`](#uselazyquery).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n */\nexport type UseLazyQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (options?: SubscriptionOptions) => readonly [LazyQueryTrigger<D>, QueryArgFrom<D> | UninitializedValue, {\n  reset: () => void;\n}];\nexport type TypedUseLazyQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type QueryStateSelector<R extends Record<string, any>, D extends QueryDefinition<any, any, any, any>> = (state: UseQueryStateDefaultResult<D>) => R;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryStateSelector} for use with a specific query.\n * This is useful for scenarios where you want to create a \"pre-typed\"\n * {@linkcode UseQueryStateOptions.selectFromResult | selectFromResult}\n * function.\n *\n * @example\n * <caption>#### __Create a strongly-typed `selectFromResult` selector function__</caption>\n *\n * ```tsx\n * import type { TypedQueryStateSelector } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   title: string\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * type SelectedResult = Pick<PostsApiResponse, 'posts'>\n *\n * const postsApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com/posts' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, QueryArgument>({\n *       query: (limit = 5) => `?limit=${limit}&select=title`,\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = postsApiSlice\n *\n * function PostById({ id }: { id: number }) {\n *   const { post } = useGetPostsQuery(undefined, {\n *     selectFromResult: (state) => ({\n *       post: state.data?.posts.find((post) => post.id === id),\n *     }),\n *   })\n *\n *   return <li>{post?.title}</li>\n * }\n *\n * const EMPTY_ARRAY: Post[] = []\n *\n * const typedSelectFromResult: TypedQueryStateSelector<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   SelectedResult\n * > = (state) => ({ posts: state.data?.posts ?? EMPTY_ARRAY })\n *\n * function PostsList() {\n *   const { posts } = useGetPostsQuery(undefined, {\n *     selectFromResult: typedSelectFromResult,\n *   })\n *\n *   return (\n *     <div>\n *       <ul>\n *         {posts.map((post) => (\n *           <PostById key={post.id} id={post.id} />\n *         ))}\n *       </ul>\n *     </div>\n *   )\n * }\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template SelectedResultType - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.3.0\n * @public\n */\nexport type TypedQueryStateSelector<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, SelectedResultType extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>> = QueryStateSelector<SelectedResultType, QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useQuery`](#usequery) or [`useQuerySubscription`](#usequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQueryState<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQueryStateOptions<D, R>) => UseQueryStateResult<D, R>;\nexport type TypedUseQueryState<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQueryState<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type UseQueryStateOptions<D extends QueryDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: QueryStateSelector<R, D>;\n};\n\n/**\n * Provides a way to define a \"pre-typed\" version of\n * {@linkcode UseQueryStateOptions} with specific options for a given query.\n * This is particularly useful for setting default query behaviors such as\n * refetching strategies, which can be overridden as needed.\n *\n * @example\n * <caption>#### __Create a `useQuery` hook with default options__</caption>\n *\n * ```ts\n * import type {\n *   SubscriptionOptions,\n *   TypedUseQueryStateOptions,\n * } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   name: string\n * }\n *\n * const api = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n *   tagTypes: ['Post'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<Post[], void>({\n *       query: () => 'posts',\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = api\n *\n * export const useGetPostsQueryWithDefaults = <\n *   SelectedResult extends Record<string, any>,\n * >(\n *   overrideOptions: TypedUseQueryStateOptions<\n *     Post[],\n *     void,\n *     ReturnType<typeof fetchBaseQuery>,\n *     SelectedResult\n *   > &\n *     SubscriptionOptions,\n * ) =>\n *   useGetPostsQuery(undefined, {\n *     // Insert default options here\n *\n *     refetchOnMountOrArgChange: true,\n *     refetchOnFocus: true,\n *     ...overrideOptions,\n *   })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArg - The type of the argument passed into the query.\n * @template BaseQuery - The type of the base query function being used.\n * @template SelectedResult - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.2.8\n * @public\n */\nexport type TypedUseQueryStateOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseQueryStateOptions<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseQueryStateResult<_ extends QueryDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R>;\n\n/**\n * Helper type to manually type the result\n * of the `useQueryState` hook in userland code.\n */\nexport type TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TSHelpersNoInfer<R>;\ntype UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> = QuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: ResultTypeFrom<D>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n};\ntype UseQueryStateDefaultResult<D extends QueryDefinition<any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type LazyInfiniteQueryTrigger<D extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, direction: InfiniteQueryDirection): InfiniteQueryActionCreatorResult<D>;\n};\nexport type TypedLazyInfiniteQueryTrigger<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = LazyInfiniteQueryTrigger<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  initialPageParam?: PageParamFrom<D>;\n};\nexport type TypedUseInfiniteQuerySubscription<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscription<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = Pick<InfiniteQueryActionCreatorResult<D>, 'refetch'> & {\n  trigger: LazyInfiniteQueryTrigger<D>;\n  fetchNextPage: () => InfiniteQueryActionCreatorResult<D>;\n  fetchPreviousPage: () => InfiniteQueryActionCreatorResult<D>;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseInfiniteQuerySubscriptionResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscriptionResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type InfiniteQueryStateSelector<R extends Record<string, any>, D extends InfiniteQueryDefinition<any, any, any, any, any>> = (state: UseInfiniteQueryStateDefaultResult<D>) => R;\nexport type TypedInfiniteQueryStateSelector<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = InfiniteQueryStateSelector<SelectedResult, InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.  Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n *  The `data` field will be a `{pages: Data[], pageParams: PageParam[]}` structure containing all fetched page responses and the corresponding page param values for each page. You may use this to render individual pages, combine all pages into a single infinite list, or other display logic as needed.\n *\n * This hook combines the functionality of both [`useInfiniteQueryState`](#useinfinitequerystate) and [`useInfiniteQuerySubscription`](#useinfinitequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * As with normal query hooks, `skipToken` is a valid argument that will skip the query from executing.\n *\n * By default, the initial request will use the `initialPageParam` value that was defined on the infinite query endpoint. If you want to start from a different value, you can pass `initialPageParam` as part of the hook options to override that initial request value.\n *\n * Use the returned `fetchNextPage` and `fetchPreviousPage` methods on the hook result object to trigger fetches forwards and backwards. These will always calculate the next or previous page param based on the current cached pages and the provided `getNext/PreviousPageParam` callbacks defined in the endpoint.\n *\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQuery<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D> & UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryHookResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'fetchNextPage' | 'fetchPreviousPage'>;\nexport type TypedUseInfiniteQuery<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuery<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQuerySubscription`](#useinfinitequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQueryState<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryStateResult<D, R>;\nexport type TypedUseInfiniteQueryState<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQueryState<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data. Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQueryState`](#useinfinitequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseInfiniteQuerySubscription<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D>) => UseInfiniteQuerySubscriptionResult<D>;\nexport type UseInfiniteQueryHookResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = UseInfiniteQueryStateResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'refetch'>;\nexport type TypedUseInfiniteQueryHookResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryHookResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\nexport type UseInfiniteQueryStateOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   * Note that this should always return an object (not a primitive), as RTKQ adds fields to the return value.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: InfiniteQueryStateSelector<R, D>;\n};\nexport type TypedUseInfiniteQueryStateOptions<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateOptions<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseInfiniteQueryStateResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = TSHelpersNoInfer<R>;\nexport type TypedUseInfiniteQueryStateResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\ntype UseInfiniteQueryStateBaseResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n  hasNextPage: false;\n  hasPreviousPage: false;\n  isFetchingNextPage: false;\n  isFetchingPreviousPage: false;\n};\ntype UseInfiniteQueryStateDefaultResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseInfiniteQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseInfiniteQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type MutationStateSelector<R extends Record<string, any>, D extends MutationDefinition<any, any, any, any>> = (state: MutationResultSelectorResult<D>) => R;\nexport type UseMutationStateOptions<D extends MutationDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  selectFromResult?: MutationStateSelector<R, D>;\n  fixedCacheKey?: string;\n};\nexport type UseMutationStateResult<D extends MutationDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R> & {\n  originalArgs?: QueryArgFrom<D>;\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useMutation` hook in userland code.\n */\nexport type TypedUseMutationResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = MutationResultSelectorResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseMutationStateResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\n\n/**\n * A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.\n *\n * #### Features\n *\n * - Manual control over firing a request to alter data on the server or possibly invalidate the cache\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseMutation<D extends MutationDefinition<any, any, any, any>> = <R extends Record<string, any> = MutationResultSelectorResult<D>>(options?: UseMutationStateOptions<D, R>) => readonly [MutationTrigger<D>, UseMutationStateResult<D, R>];\nexport type TypedUseMutation<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseMutation<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type MutationTrigger<D extends MutationDefinition<any, any, any, any>> = {\n  /**\n   * Triggers the mutation and returns a Promise.\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>): MutationActionCreatorResult<D>;\n};\nexport type TypedMutationTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = MutationTrigger<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * Wrapper around `defaultQueryStateSelector` to be used in `useQuery`.\n * We want the initial render to already come back with\n * `{ isUninitialized: false, isFetching: true, isLoading: true }`\n * to prevent that the library user has to do an additional check for `isUninitialized`/\n */\nconst noPendingQueryStateSelector: QueryStateSelector<any, any> = selected => {\n  if (selected.isUninitialized) {\n    return {\n      ...selected,\n      isUninitialized: false,\n      isFetching: true,\n      isLoading: selected.data !== undefined ? false : true,\n      status: QueryStatus.pending\n    } as any;\n  }\n  return selected;\n};\nfunction pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {\n  const ret: any = {};\n  keys.forEach(key => {\n    ret[key] = obj[key];\n  });\n  return ret;\n}\nconst COMMON_HOOK_DEBUG_FIELDS = ['data', 'status', 'isLoading', 'isSuccess', 'isError', 'error'] as const;\ntype GenericPrefetchThunk = (endpointName: any, arg: any, options: PrefetchOptions) => ThunkAction<void, any, any, UnknownAction>;\n\n/**\n *\n * @param opts.api - An API with defined endpoints to create hooks for\n * @param opts.moduleOptions.batch - The version of the `batchedUpdates` function to be used\n * @param opts.moduleOptions.useDispatch - The version of the `useDispatch` hook to be used\n * @param opts.moduleOptions.useSelector - The version of the `useSelector` hook to be used\n * @returns An object containing functions to generate hooks based on an endpoint\n */\nexport function buildHooks<Definitions extends EndpointDefinitions>({\n  api,\n  moduleOptions: {\n    batch,\n    hooks: {\n      useDispatch,\n      useSelector,\n      useStore\n    },\n    unstable__sideEffectsInRender,\n    createSelector\n  },\n  serializeQueryArgs,\n  context\n}: {\n  api: Api<any, Definitions, any, any, CoreModule>;\n  moduleOptions: Required<ReactHooksModuleOptions>;\n  serializeQueryArgs: SerializeQueryArgs<any>;\n  context: ApiContext<Definitions>;\n}) {\n  const usePossiblyImmediateEffect: (effect: () => void | undefined, deps?: DependencyList) => void = unstable__sideEffectsInRender ? cb => cb() : useEffect;\n  return {\n    buildQueryHooks,\n    buildInfiniteQueryHooks,\n    buildMutationHook,\n    usePrefetch\n  };\n  function queryStatePreSelector(currentState: QueryResultSelectorResult<any>, lastResult: UseQueryStateDefaultResult<any> | undefined, queryArgs: any): UseQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n\n    // isSuccess = true when data is present and we're not refetching after an error.\n    // That includes cases where the _current_ item is either actively\n    // fetching or about to fetch due to an uninitialized entry.\n    const isSuccess = currentState.isSuccess || hasData && (isFetching && !lastResult?.isError || currentState.isUninitialized);\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseQueryStateDefaultResult<any>;\n  }\n  function infiniteQueryStatePreSelector(currentState: InfiniteQueryResultSelectorResult<any>, lastResult: UseInfiniteQueryStateDefaultResult<any> | undefined, queryArgs: any): UseInfiniteQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n    // isSuccess = true when data is present\n    const isSuccess = currentState.isSuccess || isFetching && hasData;\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseInfiniteQueryStateDefaultResult<any>;\n  }\n  function usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, defaultOptions?: PrefetchOptions) {\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n    const stableDefaultOptions = useShallowStableValue(defaultOptions);\n    return useCallback((arg: any, options?: PrefetchOptions) => dispatch((api.util.prefetch as GenericPrefetchThunk)(endpointName, arg, {\n      ...stableDefaultOptions,\n      ...options\n    })), [endpointName, dispatch, stableDefaultOptions]);\n  }\n  function useQuerySubscriptionCommonImpl<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(endpointName: string, arg: unknown | SkipToken, {\n    refetchOnReconnect,\n    refetchOnFocus,\n    refetchOnMountOrArgChange,\n    skip = false,\n    pollingInterval = 0,\n    skipPollingIfUnfocused = false,\n    ...rest\n  }: UseQuerySubscriptionOptions = {}) {\n    const {\n      initiate\n    } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n\n    // TODO: Change this to `useRef<SubscriptionSelectors>(undefined)` after upgrading to React 19.\n    const subscriptionSelectorsRef = useRef<SubscriptionSelectors | undefined>(undefined);\n    if (!subscriptionSelectorsRef.current) {\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\n    You must add the middleware for RTK-Query to function correctly!`);\n        }\n      }\n      subscriptionSelectorsRef.current = returnedValue as unknown as SubscriptionSelectors;\n    }\n    const stableArg = useStableQueryArgs(skip ? skipToken : arg,\n    // Even if the user provided a per-endpoint `serializeQueryArgs` with\n    // a consistent return value, _here_ we want to use the default behavior\n    // so we can tell if _anything_ actually changed. Otherwise, we can end up\n    // with a case where the query args did change but the serialization doesn't,\n    // and then we never try to initiate a refetch.\n    defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n    const stableSubscriptionOptions = useShallowStableValue({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval,\n      skipPollingIfUnfocused\n    });\n    const initialPageParam = (rest as UseInfiniteQuerySubscriptionOptions<any>).initialPageParam;\n    const stableInitialPageParam = useShallowStableValue(initialPageParam);\n\n    /**\n     * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n     */\n    const promiseRef = useRef<T | undefined>(undefined);\n    let {\n      queryCacheKey,\n      requestId\n    } = promiseRef.current || {};\n\n    // HACK We've saved the middleware subscription lookup callbacks into a ref,\n    // so we can directly check here if the subscription exists for this query.\n    let currentRenderHasSubscription = false;\n    if (queryCacheKey && requestId) {\n      currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId);\n    }\n    const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== undefined;\n    usePossiblyImmediateEffect((): void | undefined => {\n      if (subscriptionRemoved) {\n        promiseRef.current = undefined;\n      }\n    }, [subscriptionRemoved]);\n    usePossiblyImmediateEffect((): void | undefined => {\n      const lastPromise = promiseRef.current;\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'removeMeOnCompilation') {\n        // this is only present to enforce the rule of hooks to keep `isSubscribed` in the dependency array\n        console.log(subscriptionRemoved);\n      }\n      if (stableArg === skipToken) {\n        lastPromise?.unsubscribe();\n        promiseRef.current = undefined;\n        return;\n      }\n      const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n      if (!lastPromise || lastPromise.arg !== stableArg) {\n        lastPromise?.unsubscribe();\n        const promise = dispatch(initiate(stableArg, {\n          subscriptionOptions: stableSubscriptionOptions,\n          forceRefetch: refetchOnMountOrArgChange,\n          ...(isInfiniteQueryDefinition(context.endpointDefinitions[endpointName]) ? {\n            initialPageParam: stableInitialPageParam\n          } : {})\n        }));\n        promiseRef.current = promise as T;\n      } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n        lastPromise.updateSubscriptionOptions(stableSubscriptionOptions);\n      }\n    }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, endpointName]);\n    return [promiseRef, dispatch, initiate, stableSubscriptionOptions] as const;\n  }\n  function buildUseQueryState(endpointName: string, preSelector: typeof queryStatePreSelector | typeof infiniteQueryStatePreSelector) {\n    const useQueryState = (arg: any, {\n      skip = false,\n      selectFromResult\n    }: UseQueryStateOptions<any, any> | UseInfiniteQueryStateOptions<any, any> = {}) => {\n      const {\n        select\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const stableArg = useStableQueryArgs(skip ? skipToken : arg, serializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      type ApiRootState = Parameters<ReturnType<typeof select>>[0];\n      const lastValue = useRef<any>(undefined);\n      const selectDefaultResult: Selector<ApiRootState, any, [any]> = useMemo(() =>\n      // Normally ts-ignores are bad and should be avoided, but we're\n      // already casting this selector to be `Selector<any>` anyway,\n      // so the inconsistencies don't matter here\n      // @ts-ignore\n      createSelector([\n      // @ts-ignore\n      select(stableArg), (_: ApiRootState, lastResult: any) => lastResult, (_: ApiRootState) => stableArg], preSelector, {\n        memoizeOptions: {\n          resultEqualityCheck: shallowEqual\n        }\n      }), [select, stableArg]);\n      const querySelector: Selector<ApiRootState, any, [any]> = useMemo(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, {\n        devModeChecks: {\n          identityFunctionCheck: 'never'\n        }\n      }) : selectDefaultResult, [selectDefaultResult, selectFromResult]);\n      const currentState = useSelector((state: RootState<Definitions, any, any>) => querySelector(state, lastValue.current), shallowEqual);\n      const store = useStore<RootState<Definitions, any, any>>();\n      const newLastValue = selectDefaultResult(store.getState(), lastValue.current);\n      useIsomorphicLayoutEffect(() => {\n        lastValue.current = newLastValue;\n      }, [newLastValue]);\n      return currentState;\n    };\n    return useQueryState;\n  }\n  function usePromiseRefUnsubscribeOnUnmount(promiseRef: React.RefObject<{\n    unsubscribe?: () => void;\n  } | undefined>) {\n    useEffect(() => {\n      return () => {\n        promiseRef.current?.unsubscribe?.()\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        ;\n        (promiseRef.current as any) = undefined;\n      };\n    }, [promiseRef]);\n  }\n  function refetchOrErrorIfUnmounted<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(promiseRef: React.RefObject<T | undefined>): T {\n    if (!promiseRef.current) throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(38) : 'Cannot refetch a query that has not been started yet.');\n    return promiseRef.current.refetch() as T;\n  }\n  function buildQueryHooks(endpointName: string): QueryHooks<any> {\n    const useQuerySubscription: UseQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef] = useQuerySubscriptionCommonImpl<QueryActionCreatorResult<any>>(endpointName, arg, options);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      return useMemo(() => ({\n        /**\n         * A method to manually refetch data for the query\n         */\n        refetch: () => refetchOrErrorIfUnmounted(promiseRef)\n      }), [promiseRef]);\n    };\n    const useLazyQuerySubscription: UseLazyQuerySubscription<any> = ({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval = 0,\n      skipPollingIfUnfocused = false\n    } = {}) => {\n      const {\n        initiate\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [arg, setArg] = useState<any>(UNINITIALIZED_VALUE);\n\n      // TODO: Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n       */\n      const promiseRef = useRef<QueryActionCreatorResult<any> | undefined>(undefined);\n      const stableSubscriptionOptions = useShallowStableValue({\n        refetchOnReconnect,\n        refetchOnFocus,\n        pollingInterval,\n        skipPollingIfUnfocused\n      });\n      usePossiblyImmediateEffect(() => {\n        const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n        if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n          promiseRef.current?.updateSubscriptionOptions(stableSubscriptionOptions);\n        }\n      }, [stableSubscriptionOptions]);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger = useCallback(function (arg: any, preferCacheValue = false) {\n        let promise: QueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch(initiate(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            forceRefetch: !preferCacheValue\n          }));\n          setArg(arg);\n        });\n        return promise!;\n      }, [dispatch, initiate]);\n      const reset = useCallback(() => {\n        if (promiseRef.current?.queryCacheKey) {\n          dispatch(api.internalActions.removeQueryResult({\n            queryCacheKey: promiseRef.current?.queryCacheKey as QueryCacheKey\n          }));\n        }\n      }, [dispatch]);\n\n      /* cleanup on unmount */\n      useEffect(() => {\n        return () => {\n          promiseRef?.current?.unsubscribe();\n        };\n      }, []);\n\n      /* if \"cleanup on unmount\" was triggered from a fast refresh, we want to reinstate the query */\n      useEffect(() => {\n        if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {\n          trigger(arg, true);\n        }\n      }, [arg, trigger]);\n      return useMemo(() => [trigger, arg, {\n        reset\n      }] as const, [trigger, arg, reset]);\n    };\n    const useQueryState: UseQueryState<any> = buildUseQueryState(endpointName, queryStatePreSelector);\n    return {\n      useQueryState,\n      useQuerySubscription,\n      useLazyQuerySubscription,\n      useLazyQuery(options) {\n        const [trigger, arg, {\n          reset\n        }] = useLazyQuerySubscription(options);\n        const queryStateResults = useQueryState(arg, {\n          ...options,\n          skip: arg === UNINITIALIZED_VALUE\n        });\n        const info = useMemo(() => ({\n          lastArg: arg\n        }), [arg]);\n        return useMemo(() => [trigger, {\n          ...queryStateResults,\n          reset\n        }, info], [trigger, queryStateResults, reset, info]);\n      },\n      useQuery(arg, options) {\n        const querySubscriptionResults = useQuerySubscription(arg, options);\n        const queryStateResults = useQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS);\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          ...querySubscriptionResults\n        }), [queryStateResults, querySubscriptionResults]);\n      }\n    };\n  }\n  function buildInfiniteQueryHooks(endpointName: string): InfiniteQueryHooks<any> {\n    const useInfiniteQuerySubscription: UseInfiniteQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl<InfiniteQueryActionCreatorResult<any>>(endpointName, arg, options);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger: LazyInfiniteQueryTrigger<any> = useCallback(function (arg: unknown, direction: 'forward' | 'backward') {\n        let promise: InfiniteQueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch((initiate as StartInfiniteQueryActionCreator<any>)(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            direction\n          }));\n        });\n        return promise!;\n      }, [promiseRef, dispatch, initiate]);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      const stableArg = useStableQueryArgs(options.skip ? skipToken : arg,\n      // Even if the user provided a per-endpoint `serializeQueryArgs` with\n      // a consistent return value, _here_ we want to use the default behavior\n      // so we can tell if _anything_ actually changed. Otherwise, we can end up\n      // with a case where the query args did change but the serialization doesn't,\n      // and then we never try to initiate a refetch.\n      defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      const refetch = useCallback(() => refetchOrErrorIfUnmounted(promiseRef), [promiseRef]);\n      return useMemo(() => {\n        const fetchNextPage = () => {\n          return trigger(stableArg, 'forward');\n        };\n        const fetchPreviousPage = () => {\n          return trigger(stableArg, 'backward');\n        };\n        return {\n          trigger,\n          /**\n           * A method to manually refetch data for the query\n           */\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        };\n      }, [refetch, trigger, stableArg]);\n    };\n    const useInfiniteQueryState: UseInfiniteQueryState<any> = buildUseQueryState(endpointName, infiniteQueryStatePreSelector);\n    return {\n      useInfiniteQueryState,\n      useInfiniteQuerySubscription,\n      useInfiniteQuery(arg, options) {\n        const {\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        } = useInfiniteQuerySubscription(arg, options);\n        const queryStateResults = useInfiniteQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, 'hasNextPage', 'hasPreviousPage');\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          fetchNextPage,\n          fetchPreviousPage,\n          refetch\n        }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]);\n      }\n    };\n  }\n  function buildMutationHook(name: string): UseMutation<any> {\n    return ({\n      selectFromResult,\n      fixedCacheKey\n    } = {}) => {\n      const {\n        select,\n        initiate\n      } = api.endpoints[name] as ApiEndpointMutation<MutationDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [promise, setPromise] = useState<MutationActionCreatorResult<any>>();\n      useEffect(() => () => {\n        if (!promise?.arg.fixedCacheKey) {\n          promise?.reset();\n        }\n      }, [promise]);\n      const triggerMutation = useCallback(function (arg: Parameters<typeof initiate>['0']) {\n        const promise = dispatch(initiate(arg, {\n          fixedCacheKey\n        }));\n        setPromise(promise);\n        return promise;\n      }, [dispatch, initiate, fixedCacheKey]);\n      const {\n        requestId\n      } = promise || {};\n      const selectDefaultResult = useMemo(() => select({\n        fixedCacheKey,\n        requestId: promise?.requestId\n      }), [fixedCacheKey, promise, select]);\n      const mutationSelector = useMemo((): Selector<RootState<Definitions, any, any>, any> => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]);\n      const currentState = useSelector(mutationSelector, shallowEqual);\n      const originalArgs = fixedCacheKey == null ? promise?.arg.originalArgs : undefined;\n      const reset = useCallback(() => {\n        batch(() => {\n          if (promise) {\n            setPromise(undefined);\n          }\n          if (fixedCacheKey) {\n            dispatch(api.internalActions.removeMutationResult({\n              requestId,\n              fixedCacheKey\n            }));\n          }\n        });\n      }, [dispatch, fixedCacheKey, promise, requestId]);\n      const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, 'endpointName');\n      useDebugValue(debugValue);\n      const finalState = useMemo(() => ({\n        ...currentState,\n        originalArgs,\n        reset\n      }), [currentState, originalArgs, reset]);\n      return useMemo(() => [triggerMutation, finalState] as const, [triggerMutation, finalState]);\n    };\n  }\n}","export const UNINITIALIZED_VALUE = Symbol();\nexport type UninitializedValue = typeof UNINITIALIZED_VALUE;","import { useEffect, useRef, useMemo } from 'react';\nimport type { SerializeQueryArgs } from '@reduxjs/toolkit/query';\nimport type { EndpointDefinition } from '@reduxjs/toolkit/query';\nexport function useStableQueryArgs<T>(queryArgs: T, serialize: SerializeQueryArgs<any>, endpointDefinition: EndpointDefinition<any, any, any, any>, endpointName: string) {\n  const incoming = useMemo(() => ({\n    queryArgs,\n    serialized: typeof queryArgs == 'object' ? serialize({\n      queryArgs,\n      endpointDefinition,\n      endpointName\n    }) : queryArgs\n  }), [queryArgs, serialize, endpointDefinition, endpointName]);\n  const cache = useRef(incoming);\n  useEffect(() => {\n    if (cache.current.serialized !== incoming.serialized) {\n      cache.current = incoming;\n    }\n  }, [incoming]);\n  return cache.current.serialized === incoming.serialized ? cache.current.queryArgs : queryArgs;\n}","import { useEffect, useRef } from 'react';\nimport { shallowEqual } from 'react-redux';\nexport function useShallowStableValue<T>(value: T) {\n  const cache = useRef(value);\n  useEffect(() => {\n    if (!shallowEqual(cache.current, value)) {\n      cache.current = value;\n    }\n  }, [value]);\n  return shallowEqual(cache.current, value) ? cache.current : value;\n}","import { configureStore, formatProdErrorMessage as _formatProdErrorMessage } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport { useContext } from 'react';\nimport { useEffect } from 'react';\nimport * as React from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { Provider, ReactReduxContext } from 'react-redux';\nimport { setupListeners } from '@reduxjs/toolkit/query';\nimport type { Api } from '@reduxjs/toolkit/query';\n\n/**\n * Can be used as a `Provider` if you **do not already have a Redux store**.\n *\n * @example\n * ```tsx\n * // codeblock-meta no-transpile title=\"Basic usage - wrap your App with ApiProvider\"\n * import * as React from 'react';\n * import { ApiProvider } from '@reduxjs/toolkit/query/react';\n * import { Pokemon } from './features/Pokemon';\n *\n * function App() {\n *   return (\n *     <ApiProvider api={api}>\n *       <Pokemon />\n *     </ApiProvider>\n *   );\n * }\n * ```\n *\n * @remarks\n * Using this together with an existing redux store, both will\n * conflict with each other - please use the traditional redux setup\n * in that case.\n */\nexport function ApiProvider(props: {\n  children: any;\n  api: Api<any, {}, any, any>;\n  setupListeners?: Parameters<typeof setupListeners>[1] | false;\n  context?: Context<ReactReduxContextValue | null>;\n}) {\n  const context = props.context || ReactReduxContext;\n  const existingContext = useContext(context);\n  if (existingContext) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(35) : 'Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.');\n  }\n  const [store] = React.useState(() => configureStore({\n    reducer: {\n      [props.api.reducerPath]: props.api.reducer\n    },\n    middleware: gDM => gDM().concat(props.api.middleware)\n  }));\n  // Adds the event listeners for online/offline/focus/etc\n  useEffect((): undefined | (() => void) => props.setupListeners === false ? undefined : setupListeners(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]);\n  return <Provider store={store} context={context}>\n      {props.children}\n    </Provider>;\n}"],"mappings":"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","names":["import_query","import_toolkit","import_react_redux","import_react","import_react_redux","import_react","arg","promise","rrBatch","rrUseDispatch","rrUseSelector","rrUseStore","_createSelector","_formatProdErrorMessage","import_toolkit","import_react","import_react_redux","import_query","_formatProdErrorMessage"]}
Index: node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.production.min.cjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+"use strict";var Pe=Object.create;var W=Object.defineProperty;var he=Object.getOwnPropertyDescriptor;var Ie=Object.getOwnPropertyNames;var Ue=Object.getPrototypeOf,be=Object.prototype.hasOwnProperty;var Ee=(e,s)=>{for(var d in s)W(e,d,{get:s[d],enumerable:!0})},j=(e,s,d,R)=>{if(s&&typeof s=="object"||typeof s=="function")for(let T of Ie(s))!be.call(e,T)&&T!==d&&W(e,T,{get:()=>s[T],enumerable:!(R=he(s,T))||R.enumerable});return e},k=(e,s,d)=>(j(e,s,"default"),d&&j(d,s,"default")),ke=(e,s,d)=>(d=e!=null?Pe(Ue(e)):{},j(s||!e||!e.__esModule?W(d,"default",{value:e,enumerable:!0}):d,e)),Me=e=>j(W({},"__esModule",{value:!0}),e);var E={};Ee(E,{ApiProvider:()=>Se,UNINITIALIZED_VALUE:()=>H,createApi:()=>Ne,reactHooksModule:()=>Qe,reactHooksModuleName:()=>fe});module.exports=Me(E);var te=require("@reduxjs/toolkit/query");var Xe=require("@reduxjs/toolkit"),M=require("react-redux"),Te=require("reselect");function V(e){return e.replace(e[0],e[0].toUpperCase())}function de(e){return e.type==="query"}function ce(e){return e.type==="mutation"}function $(e){return e.type==="infinitequery"}function N(e,...s){return Object.assign(e,...s)}var ge=require("@reduxjs/toolkit"),A=require("@reduxjs/toolkit/query"),n=require("react"),Y=require("react-redux");var H=Symbol();var z=require("react");function G(e,s,d,R){let T=(0,z.useMemo)(()=>({queryArgs:e,serialized:typeof e=="object"?s({queryArgs:e,endpointDefinition:d,endpointName:R}):e}),[e,s,d,R]),D=(0,z.useRef)(T);return(0,z.useEffect)(()=>{D.current.serialized!==T.serialized&&(D.current=T)},[T]),D.current.serialized===T.serialized?D.current.queryArgs:e}var Z=require("react"),ye=require("react-redux");function _(e){let s=(0,Z.useRef)(e);return(0,Z.useEffect)(()=>{(0,ye.shallowEqual)(s.current,e)||(s.current=e)},[e]),(0,ye.shallowEqual)(s.current,e)?s.current:e}var Oe=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Fe=Oe(),we=()=>typeof navigator<"u"&&navigator.product==="ReactNative",ve=we(),Le=()=>Fe||ve?n.useLayoutEffect:n.useEffect,Ce=Le(),le=e=>e.isUninitialized?{...e,isUninitialized:!1,isFetching:!0,isLoading:e.data===void 0,status:A.QueryStatus.pending}:e;function oe(e,...s){let d={};return s.forEach(R=>{d[R]=e[R]}),d}var pe=["data","status","isLoading","isSuccess","isError","error"];function Re({api:e,moduleOptions:{batch:s,hooks:{useDispatch:d,useSelector:R,useStore:T},unstable__sideEffectsInRender:D,createSelector:L},serializeQueryArgs:U,context:h}){let O=D?t=>t():n.useEffect;return{buildQueryHooks:q,buildInfiniteQueryHooks:se,buildMutationHook:ae,usePrefetch:ie};function ne(t,a,Q){if(a?.endpointName&&t.isUninitialized){let{endpointName:y}=a,p=h.endpointDefinitions[y];Q!==A.skipToken&&U({queryArgs:a.originalArgs,endpointDefinition:p,endpointName:y})===U({queryArgs:Q,endpointDefinition:p,endpointName:y})&&(a=void 0)}let o=t.isSuccess?t.data:a?.data;o===void 0&&(o=t.data);let u=o!==void 0,r=t.isLoading,i=(!a||a.isLoading||a.isUninitialized)&&!u&&r,f=t.isSuccess||u&&(r&&!a?.isError||t.isUninitialized);return{...t,data:o,currentData:t.data,isFetching:r,isLoading:i,isSuccess:f}}function re(t,a,Q){if(a?.endpointName&&t.isUninitialized){let{endpointName:y}=a,p=h.endpointDefinitions[y];Q!==A.skipToken&&U({queryArgs:a.originalArgs,endpointDefinition:p,endpointName:y})===U({queryArgs:Q,endpointDefinition:p,endpointName:y})&&(a=void 0)}let o=t.isSuccess?t.data:a?.data;o===void 0&&(o=t.data);let u=o!==void 0,r=t.isLoading,i=(!a||a.isLoading||a.isUninitialized)&&!u&&r,f=t.isSuccess||r&&u;return{...t,data:o,currentData:t.data,isFetching:r,isLoading:i,isSuccess:f}}function ie(t,a){let Q=d(),o=_(a);return(0,n.useCallback)((u,r)=>Q(e.util.prefetch(t,u,{...o,...r})),[t,Q,o])}function B(t,a,{refetchOnReconnect:Q,refetchOnFocus:o,refetchOnMountOrArgChange:u,skip:r=!1,pollingInterval:i=0,skipPollingIfUnfocused:f=!1,...y}={}){let{initiate:p}=e.endpoints[t],l=d(),P=(0,n.useRef)(void 0);if(!P.current){let v=l(e.internalActions.internal_getRTKQSubscriptions());P.current=v}let c=G(r?A.skipToken:a,A.defaultSerializeQueryArgs,h.endpointDefinitions[t],t),g=_({refetchOnReconnect:Q,refetchOnFocus:o,pollingInterval:i,skipPollingIfUnfocused:f}),x=y.initialPageParam,m=_(x),S=(0,n.useRef)(void 0),{queryCacheKey:b,requestId:w}=S.current||{},K=!1;b&&w&&(K=P.current.isRequestSubscribed(b,w));let ue=!K&&S.current!==void 0;return O(()=>{ue&&(S.current=void 0)},[ue]),O(()=>{let v=S.current;if(typeof process<"u",c===A.skipToken){v?.unsubscribe(),S.current=void 0;return}let Ae=S.current?.subscriptionOptions;if(!v||v.arg!==c){v?.unsubscribe();let Be=l(p(c,{subscriptionOptions:g,forceRefetch:u,...$(h.endpointDefinitions[t])?{initialPageParam:m}:{}}));S.current=Be}else g!==Ae&&v.updateSubscriptionOptions(g)},[l,p,u,c,g,ue,m,t]),[S,l,p,g]}function C(t,a){return(o,{skip:u=!1,selectFromResult:r}={})=>{let{select:i}=e.endpoints[t],f=G(u?A.skipToken:o,U,h.endpointDefinitions[t],t),y=(0,n.useRef)(void 0),p=(0,n.useMemo)(()=>L([i(f),(x,m)=>m,x=>f],a,{memoizeOptions:{resultEqualityCheck:Y.shallowEqual}}),[i,f]),l=(0,n.useMemo)(()=>r?L([p],r,{devModeChecks:{identityFunctionCheck:"never"}}):p,[p,r]),P=R(x=>l(x,y.current),Y.shallowEqual),c=T(),g=p(c.getState(),y.current);return Ce(()=>{y.current=g},[g]),P}}function I(t){(0,n.useEffect)(()=>()=>{t.current?.unsubscribe?.(),t.current=void 0},[t])}function F(t){if(!t.current)throw new Error((0,ge.formatProdErrorMessage)(38));return t.current.refetch()}function q(t){let a=(u,r={})=>{let[i]=B(t,u,r);return I(i),(0,n.useMemo)(()=>({refetch:()=>F(i)}),[i])},Q=({refetchOnReconnect:u,refetchOnFocus:r,pollingInterval:i=0,skipPollingIfUnfocused:f=!1}={})=>{let{initiate:y}=e.endpoints[t],p=d(),[l,P]=(0,n.useState)(H),c=(0,n.useRef)(void 0),g=_({refetchOnReconnect:u,refetchOnFocus:r,pollingInterval:i,skipPollingIfUnfocused:f});O(()=>{let b=c.current?.subscriptionOptions;g!==b&&c.current?.updateSubscriptionOptions(g)},[g]);let x=(0,n.useRef)(g);O(()=>{x.current=g},[g]);let m=(0,n.useCallback)(function(b,w=!1){let K;return s(()=>{c.current?.unsubscribe(),c.current=K=p(y(b,{subscriptionOptions:x.current,forceRefetch:!w})),P(b)}),K},[p,y]),S=(0,n.useCallback)(()=>{c.current?.queryCacheKey&&p(e.internalActions.removeQueryResult({queryCacheKey:c.current?.queryCacheKey}))},[p]);return(0,n.useEffect)(()=>()=>{c?.current?.unsubscribe()},[]),(0,n.useEffect)(()=>{l!==H&&!c.current&&m(l,!0)},[l,m]),(0,n.useMemo)(()=>[m,l,{reset:S}],[m,l,S])},o=C(t,ne);return{useQueryState:o,useQuerySubscription:a,useLazyQuerySubscription:Q,useLazyQuery(u){let[r,i,{reset:f}]=Q(u),y=o(i,{...u,skip:i===H}),p=(0,n.useMemo)(()=>({lastArg:i}),[i]);return(0,n.useMemo)(()=>[r,{...y,reset:f},p],[r,y,f,p])},useQuery(u,r){let i=a(u,r),f=o(u,{selectFromResult:u===A.skipToken||r?.skip?void 0:le,...r}),y=oe(f,...pe);return(0,n.useDebugValue)(y),(0,n.useMemo)(()=>({...f,...i}),[f,i])}}}function se(t){let a=(o,u={})=>{let[r,i,f,y]=B(t,o,u),p=(0,n.useRef)(y);O(()=>{p.current=y},[y]);let l=(0,n.useCallback)(function(g,x){let m;return s(()=>{r.current?.unsubscribe(),r.current=m=i(f(g,{subscriptionOptions:p.current,direction:x}))}),m},[r,i,f]);I(r);let P=G(u.skip?A.skipToken:o,A.defaultSerializeQueryArgs,h.endpointDefinitions[t],t),c=(0,n.useCallback)(()=>F(r),[r]);return(0,n.useMemo)(()=>({trigger:l,refetch:c,fetchNextPage:()=>l(P,"forward"),fetchPreviousPage:()=>l(P,"backward")}),[c,l,P])},Q=C(t,re);return{useInfiniteQueryState:Q,useInfiniteQuerySubscription:a,useInfiniteQuery(o,u){let{refetch:r,fetchNextPage:i,fetchPreviousPage:f}=a(o,u),y=Q(o,{selectFromResult:o===A.skipToken||u?.skip?void 0:le,...u}),p=oe(y,...pe,"hasNextPage","hasPreviousPage");return(0,n.useDebugValue)(p),(0,n.useMemo)(()=>({...y,fetchNextPage:i,fetchPreviousPage:f,refetch:r}),[y,i,f,r])}}}function ae(t){return({selectFromResult:a,fixedCacheKey:Q}={})=>{let{select:o,initiate:u}=e.endpoints[t],r=d(),[i,f]=(0,n.useState)();(0,n.useEffect)(()=>()=>{i?.arg.fixedCacheKey||i?.reset()},[i]);let y=(0,n.useCallback)(function(b){let w=r(u(b,{fixedCacheKey:Q}));return f(w),w},[r,u,Q]),{requestId:p}=i||{},l=(0,n.useMemo)(()=>o({fixedCacheKey:Q,requestId:i?.requestId}),[Q,i,o]),P=(0,n.useMemo)(()=>a?L([l],a):l,[a,l]),c=R(P,Y.shallowEqual),g=Q==null?i?.arg.originalArgs:void 0,x=(0,n.useCallback)(()=>{s(()=>{i&&f(void 0),Q&&r(e.internalActions.removeMutationResult({requestId:p,fixedCacheKey:Q}))})},[r,Q,i,p]),m=oe(c,...pe,"endpointName");(0,n.useDebugValue)(m);let S=(0,n.useMemo)(()=>({...c,originalArgs:g,reset:x}),[c,g,x]);return(0,n.useMemo)(()=>[y,S],[y,S])}}}var fe=Symbol(),Qe=({batch:e=M.batch,hooks:s={useDispatch:M.useDispatch,useSelector:M.useSelector,useStore:M.useStore},createSelector:d=Te.createSelector,unstable__sideEffectsInRender:R=!1,...T}={})=>({name:fe,init(D,{serializeQueryArgs:L},U){let h=D,{buildQueryHooks:O,buildInfiniteQueryHooks:ne,buildMutationHook:re,usePrefetch:ie}=Re({api:D,moduleOptions:{batch:e,hooks:s,unstable__sideEffectsInRender:R,createSelector:d},serializeQueryArgs:L,context:U});return N(h,{usePrefetch:ie}),N(U,{batch:e}),{injectEndpoint(B,C){if(de(C)){let{useQuery:I,useLazyQuery:F,useLazyQuerySubscription:q,useQueryState:se,useQuerySubscription:ae}=O(B);N(h.endpoints[B],{useQuery:I,useLazyQuery:F,useLazyQuerySubscription:q,useQueryState:se,useQuerySubscription:ae}),D[`use${V(B)}Query`]=I,D[`useLazy${V(B)}Query`]=F}if(ce(C)){let I=re(B);N(h.endpoints[B],{useMutation:I}),D[`use${V(B)}Mutation`]=I}else if($(C)){let{useInfiniteQuery:I,useInfiniteQuerySubscription:F,useInfiniteQueryState:q}=ne(B);N(h.endpoints[B],{useInfiniteQuery:I,useInfiniteQuerySubscription:F,useInfiniteQueryState:q}),D[`use${V(B)}InfiniteQuery`]=I}}}}});k(E,require("@reduxjs/toolkit/query"),module.exports);var J=require("@reduxjs/toolkit"),De=require("react"),xe=require("react"),X=ke(require("react")),ee=require("react-redux"),me=require("@reduxjs/toolkit/query");function Se(e){let s=e.context||ee.ReactReduxContext;if((0,De.useContext)(s))throw new Error((0,J.formatProdErrorMessage)(35));let[R]=X.useState(()=>(0,J.configureStore)({reducer:{[e.api.reducerPath]:e.api.reducer},middleware:T=>T().concat(e.api.middleware)}));return(0,xe.useEffect)(()=>e.setupListeners===!1?void 0:(0,me.setupListeners)(R.dispatch,e.setupListeners),[e.setupListeners,R.dispatch]),X.createElement(ee.Provider,{store:R,context:s},e.children)}var Ne=(0,te.buildCreateApi)((0,te.coreModule)(),Qe());0&&(module.exports={ApiProvider,UNINITIALIZED_VALUE,createApi,reactHooksModule,reactHooksModuleName,...require("@reduxjs/toolkit/query")});
+//# sourceMappingURL=rtk-query-react.production.min.cjs.map
Index: node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.production.min.cjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/cjs/rtk-query-react.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../../../src/query/react/index.ts","../../../../src/query/react/module.ts","../../../../src/query/utils/capitalize.ts","../../../../src/query/endpointDefinitions.ts","../../../../src/query/tsHelpers.ts","../../../../src/query/react/buildHooks.ts","../../../../src/query/react/constants.ts","../../../../src/query/react/useSerializedStableValue.ts","../../../../src/query/react/useShallowStableValue.ts","../../../../src/query/react/ApiProvider.tsx"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nimport { buildCreateApi, coreModule } from '@reduxjs/toolkit/query';\nimport { reactHooksModule, reactHooksModuleName } from './module';\nexport * from '@reduxjs/toolkit/query';\nexport { ApiProvider } from './ApiProvider';\nconst createApi = /* @__PURE__ */buildCreateApi(coreModule(), reactHooksModule());\nexport type { TypedUseMutationResult, TypedUseQueryHookResult, TypedUseQueryStateResult, TypedUseQuerySubscriptionResult, TypedLazyQueryTrigger, TypedUseLazyQuery, TypedUseMutation, TypedMutationTrigger, TypedQueryStateSelector, TypedUseQueryState, TypedUseQuery, TypedUseQuerySubscription, TypedUseLazyQuerySubscription, TypedUseQueryStateOptions, TypedUseLazyQueryStateResult, TypedUseInfiniteQuery, TypedUseInfiniteQueryHookResult, TypedUseInfiniteQueryStateResult, TypedUseInfiniteQuerySubscriptionResult, TypedUseInfiniteQueryStateOptions, TypedInfiniteQueryStateSelector, TypedUseInfiniteQuerySubscription, TypedUseInfiniteQueryState, TypedLazyInfiniteQueryTrigger } from './buildHooks';\nexport { UNINITIALIZED_VALUE } from './constants';\nexport { createApi, reactHooksModule, reactHooksModuleName };","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Api, BaseQueryFn, EndpointDefinitions, InfiniteQueryDefinition, Module, MutationDefinition, PrefetchOptions, QueryArgFrom, QueryDefinition, QueryKeys } from '@reduxjs/toolkit/query';\nimport { batch as rrBatch, useDispatch as rrUseDispatch, useSelector as rrUseSelector, useStore as rrUseStore } from 'react-redux';\nimport { createSelector as _createSelector } from 'reselect';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { safeAssign } from '../tsHelpers';\nimport { capitalize, countObjectKeys } from '../utils';\nimport type { InfiniteQueryHooks, MutationHooks, QueryHooks } from './buildHooks';\nimport { buildHooks } from './buildHooks';\nimport type { HooksWithUniqueNames } from './namedHooks';\nexport const reactHooksModuleName = /* @__PURE__ */Symbol();\nexport type ReactHooksModule = typeof reactHooksModuleName;\ndeclare module '@reduxjs/toolkit/query' {\n  export interface ApiModules<\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  ReducerPath extends string,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  TagTypes extends string> {\n    [reactHooksModuleName]: {\n      /**\n       *  Endpoints based on the input endpoints provided to `createApi`, containing `select`, `hooks` and `action matchers`.\n       */\n      endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? QueryHooks<Definitions[K]> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? MutationHooks<Definitions[K]> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryHooks<Definitions[K]> : never };\n      /**\n       * A hook that accepts a string endpoint name, and provides a callback that when called, pre-fetches the data for that endpoint.\n       */\n      usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, options?: PrefetchOptions): (arg: QueryArgFrom<Definitions[EndpointName]>, options?: PrefetchOptions) => void;\n    } & HooksWithUniqueNames<Definitions>;\n  }\n}\ntype RR = typeof import('react-redux');\nexport interface ReactHooksModuleOptions {\n  /**\n   * The hooks from React Redux to be used\n   */\n  hooks?: {\n    /**\n     * The version of the `useDispatch` hook to be used\n     */\n    useDispatch: RR['useDispatch'];\n    /**\n     * The version of the `useSelector` hook to be used\n     */\n    useSelector: RR['useSelector'];\n    /**\n     * The version of the `useStore` hook to be used\n     */\n    useStore: RR['useStore'];\n  };\n  /**\n   * The version of the `batchedUpdates` function to be used\n   */\n  batch?: RR['batch'];\n  /**\n   * Enables performing asynchronous tasks immediately within a render.\n   *\n   * @example\n   *\n   * ```ts\n   * import {\n   *   buildCreateApi,\n   *   coreModule,\n   *   reactHooksModule\n   * } from '@reduxjs/toolkit/query/react'\n   *\n   * const createApi = buildCreateApi(\n   *   coreModule(),\n   *   reactHooksModule({ unstable__sideEffectsInRender: true })\n   * )\n   * ```\n   */\n  unstable__sideEffectsInRender?: boolean;\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module that generates react hooks from endpoints, for use with `buildCreateApi`.\n *\n *  @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @returns A module for use with `buildCreateApi`\n */\nexport const reactHooksModule = ({\n  batch = rrBatch,\n  hooks = {\n    useDispatch: rrUseDispatch,\n    useSelector: rrUseSelector,\n    useStore: rrUseStore\n  },\n  createSelector = _createSelector,\n  unstable__sideEffectsInRender = false,\n  ...rest\n}: ReactHooksModuleOptions = {}): Module<ReactHooksModule> => {\n  if (process.env.NODE_ENV !== 'production') {\n    const hookNames = ['useDispatch', 'useSelector', 'useStore'] as const;\n    let warned = false;\n    for (const hookName of hookNames) {\n      // warn for old hook options\n      if (countObjectKeys(rest) > 0) {\n        if ((rest as Partial<typeof hooks>)[hookName]) {\n          if (!warned) {\n            console.warn('As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:' + '\\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`');\n            warned = true;\n          }\n        }\n        // migrate\n        // @ts-ignore\n        hooks[hookName] = rest[hookName];\n      }\n      // then make sure we have them all\n      if (typeof hooks[hookName] !== 'function') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(', ')}.\\nHook ${hookName} was either not provided or not a function.`);\n      }\n    }\n  }\n  return {\n    name: reactHooksModuleName,\n    init(api, {\n      serializeQueryArgs\n    }, context) {\n      const anyApi = api as any as Api<any, Record<string, any>, any, any, ReactHooksModule>;\n      const {\n        buildQueryHooks,\n        buildInfiniteQueryHooks,\n        buildMutationHook,\n        usePrefetch\n      } = buildHooks({\n        api,\n        moduleOptions: {\n          batch,\n          hooks,\n          unstable__sideEffectsInRender,\n          createSelector\n        },\n        serializeQueryArgs,\n        context\n      });\n      safeAssign(anyApi, {\n        usePrefetch\n      });\n      safeAssign(context, {\n        batch\n      });\n      return {\n        injectEndpoint(endpointName, definition) {\n          if (isQueryDefinition(definition)) {\n            const {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            } = buildQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            });\n            (api as any)[`use${capitalize(endpointName)}Query`] = useQuery;\n            (api as any)[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery;\n          }\n          if (isMutationDefinition(definition)) {\n            const useMutation = buildMutationHook(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useMutation\n            });\n            (api as any)[`use${capitalize(endpointName)}Mutation`] = useMutation;\n          } else if (isInfiniteQueryDefinition(definition)) {\n            const {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            } = buildInfiniteQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            });\n            (api as any)[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery;\n          }\n        }\n      };\n    }\n  };\n};","export function capitalize(str: string) {\n  return str.replace(str[0], str[0].toUpperCase());\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Selector, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Api, ApiContext, ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, BaseQueryFn, CoreModule, EndpointDefinitions, InfiniteQueryActionCreatorResult, InfiniteQueryArgFrom, InfiniteQueryDefinition, InfiniteQueryResultSelectorResult, InfiniteQuerySubState, MutationActionCreatorResult, MutationDefinition, MutationResultSelectorResult, PageParamFrom, PrefetchOptions, QueryActionCreatorResult, QueryArgFrom, QueryCacheKey, QueryDefinition, QueryKeys, QueryResultSelectorResult, QuerySubState, ResultTypeFrom, RootState, SerializeQueryArgs, SkipToken, SubscriptionOptions, TSHelpersId, TSHelpersNoInfer, TSHelpersOverride } from '@reduxjs/toolkit/query';\nimport { defaultSerializeQueryArgs, QueryStatus, skipToken } from '@reduxjs/toolkit/query';\nimport type { DependencyList } from 'react';\nimport { useCallback, useDebugValue, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport type { SubscriptionSelectors } from '../core/buildMiddleware/index';\nimport type { InfiniteData, InfiniteQueryConfigOptions } from '../core/index';\nimport type { UninitializedValue } from './constants';\nimport { UNINITIALIZED_VALUE } from './constants';\nimport type { ReactHooksModuleOptions } from './module';\nimport { useStableQueryArgs } from './useSerializedStableValue';\nimport { useShallowStableValue } from './useShallowStableValue';\nimport type { InfiniteQueryDirection } from '../core/apiState';\nimport { isInfiniteQueryDefinition } from '../endpointDefinitions';\nimport type { StartInfiniteQueryActionCreator } from '../core/buildInitiate';\n\n// Copy-pasted from React-Redux\nconst canUseDOM = () => !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nconst isDOM = /* @__PURE__ */canUseDOM();\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\nconst isRunningInReactNative = () => typeof navigator !== 'undefined' && navigator.product === 'ReactNative';\nconst isReactNative = /* @__PURE__ */isRunningInReactNative();\nconst getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? useLayoutEffect : useEffect;\nexport const useIsomorphicLayoutEffect = /* @__PURE__ */getUseIsomorphicLayoutEffect();\nexport type QueryHooks<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  useQuery: UseQuery<Definition>;\n  useLazyQuery: UseLazyQuery<Definition>;\n  useQuerySubscription: UseQuerySubscription<Definition>;\n  useLazyQuerySubscription: UseLazyQuerySubscription<Definition>;\n  useQueryState: UseQueryState<Definition>;\n};\nexport type InfiniteQueryHooks<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  useInfiniteQuery: UseInfiniteQuery<Definition>;\n  useInfiniteQuerySubscription: UseInfiniteQuerySubscription<Definition>;\n  useInfiniteQueryState: UseInfiniteQueryState<Definition>;\n};\nexport type MutationHooks<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  useMutation: UseMutation<Definition>;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n * This hook combines the functionality of both [`useQueryState`](#usequerystate) and [`useQuerySubscription`](#usequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions & UseQueryStateOptions<D, R>) => UseQueryHookResult<D, R>;\nexport type TypedUseQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQueryHookResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & UseQuerySubscriptionResult<D>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuery` hook in userland code.\n */\nexport type TypedUseQueryHookResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery, R> & TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery>;\nexport type UseQuerySubscriptionOptions = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useQuery`](#usequery) or [`useQueryState`](#usequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions) => UseQuerySubscriptionResult<D>;\nexport type TypedUseQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQuerySubscriptionResult<D extends QueryDefinition<any, any, any, any>> = Pick<QueryActionCreatorResult<D>, 'refetch'>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscriptionResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryLastPromiseInfo<D extends QueryDefinition<any, any, any, any>> = {\n  lastArg: QueryArgFrom<D>;\n};\n\n/**\n * A React hook similar to [`useQuery`](#usequery), but with manual control over when the data fetching occurs.\n *\n * This hook includes the functionality of [`useLazyQuerySubscription`](#uselazyquerysubscription).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n *\n * #### Note\n *\n * When the trigger function returned from a LazyQuery is called, it always initiates a new request to the server even if there is cached data. Set `preferCacheValue`(the second argument to the function) as `true` if you want it to immediately return a cached value if one exists.\n */\nexport type UseLazyQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(options?: SubscriptionOptions & Omit<UseQueryStateOptions<D, R>, 'skip'>) => [LazyQueryTrigger<D>, UseLazyQueryStateResult<D, R>, UseLazyQueryLastPromiseInfo<D>];\nexport type TypedUseLazyQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryStateResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & {\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useLazyQuery` hook in userland code.\n */\nexport type TypedUseLazyQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseLazyQueryStateResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\nexport type LazyQueryTrigger<D extends QueryDefinition<any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, preferCacheValue?: boolean): QueryActionCreatorResult<D>;\n};\nexport type TypedLazyQueryTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = LazyQueryTrigger<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook similar to [`useQuerySubscription`](#usequerysubscription), but with manual control over when the data fetching occurs.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useLazyQuery`](#uselazyquery).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n */\nexport type UseLazyQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (options?: SubscriptionOptions) => readonly [LazyQueryTrigger<D>, QueryArgFrom<D> | UninitializedValue, {\n  reset: () => void;\n}];\nexport type TypedUseLazyQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type QueryStateSelector<R extends Record<string, any>, D extends QueryDefinition<any, any, any, any>> = (state: UseQueryStateDefaultResult<D>) => R;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryStateSelector} for use with a specific query.\n * This is useful for scenarios where you want to create a \"pre-typed\"\n * {@linkcode UseQueryStateOptions.selectFromResult | selectFromResult}\n * function.\n *\n * @example\n * <caption>#### __Create a strongly-typed `selectFromResult` selector function__</caption>\n *\n * ```tsx\n * import type { TypedQueryStateSelector } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   title: string\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * type SelectedResult = Pick<PostsApiResponse, 'posts'>\n *\n * const postsApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com/posts' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, QueryArgument>({\n *       query: (limit = 5) => `?limit=${limit}&select=title`,\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = postsApiSlice\n *\n * function PostById({ id }: { id: number }) {\n *   const { post } = useGetPostsQuery(undefined, {\n *     selectFromResult: (state) => ({\n *       post: state.data?.posts.find((post) => post.id === id),\n *     }),\n *   })\n *\n *   return <li>{post?.title}</li>\n * }\n *\n * const EMPTY_ARRAY: Post[] = []\n *\n * const typedSelectFromResult: TypedQueryStateSelector<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   SelectedResult\n * > = (state) => ({ posts: state.data?.posts ?? EMPTY_ARRAY })\n *\n * function PostsList() {\n *   const { posts } = useGetPostsQuery(undefined, {\n *     selectFromResult: typedSelectFromResult,\n *   })\n *\n *   return (\n *     <div>\n *       <ul>\n *         {posts.map((post) => (\n *           <PostById key={post.id} id={post.id} />\n *         ))}\n *       </ul>\n *     </div>\n *   )\n * }\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template SelectedResultType - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.3.0\n * @public\n */\nexport type TypedQueryStateSelector<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, SelectedResultType extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>> = QueryStateSelector<SelectedResultType, QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useQuery`](#usequery) or [`useQuerySubscription`](#usequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQueryState<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQueryStateOptions<D, R>) => UseQueryStateResult<D, R>;\nexport type TypedUseQueryState<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQueryState<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type UseQueryStateOptions<D extends QueryDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: QueryStateSelector<R, D>;\n};\n\n/**\n * Provides a way to define a \"pre-typed\" version of\n * {@linkcode UseQueryStateOptions} with specific options for a given query.\n * This is particularly useful for setting default query behaviors such as\n * refetching strategies, which can be overridden as needed.\n *\n * @example\n * <caption>#### __Create a `useQuery` hook with default options__</caption>\n *\n * ```ts\n * import type {\n *   SubscriptionOptions,\n *   TypedUseQueryStateOptions,\n * } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   name: string\n * }\n *\n * const api = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n *   tagTypes: ['Post'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<Post[], void>({\n *       query: () => 'posts',\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = api\n *\n * export const useGetPostsQueryWithDefaults = <\n *   SelectedResult extends Record<string, any>,\n * >(\n *   overrideOptions: TypedUseQueryStateOptions<\n *     Post[],\n *     void,\n *     ReturnType<typeof fetchBaseQuery>,\n *     SelectedResult\n *   > &\n *     SubscriptionOptions,\n * ) =>\n *   useGetPostsQuery(undefined, {\n *     // Insert default options here\n *\n *     refetchOnMountOrArgChange: true,\n *     refetchOnFocus: true,\n *     ...overrideOptions,\n *   })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArg - The type of the argument passed into the query.\n * @template BaseQuery - The type of the base query function being used.\n * @template SelectedResult - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.2.8\n * @public\n */\nexport type TypedUseQueryStateOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseQueryStateOptions<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseQueryStateResult<_ extends QueryDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R>;\n\n/**\n * Helper type to manually type the result\n * of the `useQueryState` hook in userland code.\n */\nexport type TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TSHelpersNoInfer<R>;\ntype UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> = QuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: ResultTypeFrom<D>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n};\ntype UseQueryStateDefaultResult<D extends QueryDefinition<any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type LazyInfiniteQueryTrigger<D extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, direction: InfiniteQueryDirection): InfiniteQueryActionCreatorResult<D>;\n};\nexport type TypedLazyInfiniteQueryTrigger<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = LazyInfiniteQueryTrigger<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  initialPageParam?: PageParamFrom<D>;\n};\nexport type TypedUseInfiniteQuerySubscription<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscription<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = Pick<InfiniteQueryActionCreatorResult<D>, 'refetch'> & {\n  trigger: LazyInfiniteQueryTrigger<D>;\n  fetchNextPage: () => InfiniteQueryActionCreatorResult<D>;\n  fetchPreviousPage: () => InfiniteQueryActionCreatorResult<D>;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseInfiniteQuerySubscriptionResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscriptionResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type InfiniteQueryStateSelector<R extends Record<string, any>, D extends InfiniteQueryDefinition<any, any, any, any, any>> = (state: UseInfiniteQueryStateDefaultResult<D>) => R;\nexport type TypedInfiniteQueryStateSelector<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = InfiniteQueryStateSelector<SelectedResult, InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.  Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n *  The `data` field will be a `{pages: Data[], pageParams: PageParam[]}` structure containing all fetched page responses and the corresponding page param values for each page. You may use this to render individual pages, combine all pages into a single infinite list, or other display logic as needed.\n *\n * This hook combines the functionality of both [`useInfiniteQueryState`](#useinfinitequerystate) and [`useInfiniteQuerySubscription`](#useinfinitequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * As with normal query hooks, `skipToken` is a valid argument that will skip the query from executing.\n *\n * By default, the initial request will use the `initialPageParam` value that was defined on the infinite query endpoint. If you want to start from a different value, you can pass `initialPageParam` as part of the hook options to override that initial request value.\n *\n * Use the returned `fetchNextPage` and `fetchPreviousPage` methods on the hook result object to trigger fetches forwards and backwards. These will always calculate the next or previous page param based on the current cached pages and the provided `getNext/PreviousPageParam` callbacks defined in the endpoint.\n *\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQuery<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D> & UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryHookResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'fetchNextPage' | 'fetchPreviousPage'>;\nexport type TypedUseInfiniteQuery<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuery<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQuerySubscription`](#useinfinitequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQueryState<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryStateResult<D, R>;\nexport type TypedUseInfiniteQueryState<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQueryState<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data. Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQueryState`](#useinfinitequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseInfiniteQuerySubscription<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D>) => UseInfiniteQuerySubscriptionResult<D>;\nexport type UseInfiniteQueryHookResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = UseInfiniteQueryStateResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'refetch'>;\nexport type TypedUseInfiniteQueryHookResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryHookResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\nexport type UseInfiniteQueryStateOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   * Note that this should always return an object (not a primitive), as RTKQ adds fields to the return value.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: InfiniteQueryStateSelector<R, D>;\n};\nexport type TypedUseInfiniteQueryStateOptions<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateOptions<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseInfiniteQueryStateResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = TSHelpersNoInfer<R>;\nexport type TypedUseInfiniteQueryStateResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\ntype UseInfiniteQueryStateBaseResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n  hasNextPage: false;\n  hasPreviousPage: false;\n  isFetchingNextPage: false;\n  isFetchingPreviousPage: false;\n};\ntype UseInfiniteQueryStateDefaultResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseInfiniteQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseInfiniteQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type MutationStateSelector<R extends Record<string, any>, D extends MutationDefinition<any, any, any, any>> = (state: MutationResultSelectorResult<D>) => R;\nexport type UseMutationStateOptions<D extends MutationDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  selectFromResult?: MutationStateSelector<R, D>;\n  fixedCacheKey?: string;\n};\nexport type UseMutationStateResult<D extends MutationDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R> & {\n  originalArgs?: QueryArgFrom<D>;\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useMutation` hook in userland code.\n */\nexport type TypedUseMutationResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = MutationResultSelectorResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseMutationStateResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\n\n/**\n * A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.\n *\n * #### Features\n *\n * - Manual control over firing a request to alter data on the server or possibly invalidate the cache\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseMutation<D extends MutationDefinition<any, any, any, any>> = <R extends Record<string, any> = MutationResultSelectorResult<D>>(options?: UseMutationStateOptions<D, R>) => readonly [MutationTrigger<D>, UseMutationStateResult<D, R>];\nexport type TypedUseMutation<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseMutation<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type MutationTrigger<D extends MutationDefinition<any, any, any, any>> = {\n  /**\n   * Triggers the mutation and returns a Promise.\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>): MutationActionCreatorResult<D>;\n};\nexport type TypedMutationTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = MutationTrigger<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * Wrapper around `defaultQueryStateSelector` to be used in `useQuery`.\n * We want the initial render to already come back with\n * `{ isUninitialized: false, isFetching: true, isLoading: true }`\n * to prevent that the library user has to do an additional check for `isUninitialized`/\n */\nconst noPendingQueryStateSelector: QueryStateSelector<any, any> = selected => {\n  if (selected.isUninitialized) {\n    return {\n      ...selected,\n      isUninitialized: false,\n      isFetching: true,\n      isLoading: selected.data !== undefined ? false : true,\n      status: QueryStatus.pending\n    } as any;\n  }\n  return selected;\n};\nfunction pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {\n  const ret: any = {};\n  keys.forEach(key => {\n    ret[key] = obj[key];\n  });\n  return ret;\n}\nconst COMMON_HOOK_DEBUG_FIELDS = ['data', 'status', 'isLoading', 'isSuccess', 'isError', 'error'] as const;\ntype GenericPrefetchThunk = (endpointName: any, arg: any, options: PrefetchOptions) => ThunkAction<void, any, any, UnknownAction>;\n\n/**\n *\n * @param opts.api - An API with defined endpoints to create hooks for\n * @param opts.moduleOptions.batch - The version of the `batchedUpdates` function to be used\n * @param opts.moduleOptions.useDispatch - The version of the `useDispatch` hook to be used\n * @param opts.moduleOptions.useSelector - The version of the `useSelector` hook to be used\n * @returns An object containing functions to generate hooks based on an endpoint\n */\nexport function buildHooks<Definitions extends EndpointDefinitions>({\n  api,\n  moduleOptions: {\n    batch,\n    hooks: {\n      useDispatch,\n      useSelector,\n      useStore\n    },\n    unstable__sideEffectsInRender,\n    createSelector\n  },\n  serializeQueryArgs,\n  context\n}: {\n  api: Api<any, Definitions, any, any, CoreModule>;\n  moduleOptions: Required<ReactHooksModuleOptions>;\n  serializeQueryArgs: SerializeQueryArgs<any>;\n  context: ApiContext<Definitions>;\n}) {\n  const usePossiblyImmediateEffect: (effect: () => void | undefined, deps?: DependencyList) => void = unstable__sideEffectsInRender ? cb => cb() : useEffect;\n  return {\n    buildQueryHooks,\n    buildInfiniteQueryHooks,\n    buildMutationHook,\n    usePrefetch\n  };\n  function queryStatePreSelector(currentState: QueryResultSelectorResult<any>, lastResult: UseQueryStateDefaultResult<any> | undefined, queryArgs: any): UseQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n\n    // isSuccess = true when data is present and we're not refetching after an error.\n    // That includes cases where the _current_ item is either actively\n    // fetching or about to fetch due to an uninitialized entry.\n    const isSuccess = currentState.isSuccess || hasData && (isFetching && !lastResult?.isError || currentState.isUninitialized);\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseQueryStateDefaultResult<any>;\n  }\n  function infiniteQueryStatePreSelector(currentState: InfiniteQueryResultSelectorResult<any>, lastResult: UseInfiniteQueryStateDefaultResult<any> | undefined, queryArgs: any): UseInfiniteQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n    // isSuccess = true when data is present\n    const isSuccess = currentState.isSuccess || isFetching && hasData;\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseInfiniteQueryStateDefaultResult<any>;\n  }\n  function usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, defaultOptions?: PrefetchOptions) {\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n    const stableDefaultOptions = useShallowStableValue(defaultOptions);\n    return useCallback((arg: any, options?: PrefetchOptions) => dispatch((api.util.prefetch as GenericPrefetchThunk)(endpointName, arg, {\n      ...stableDefaultOptions,\n      ...options\n    })), [endpointName, dispatch, stableDefaultOptions]);\n  }\n  function useQuerySubscriptionCommonImpl<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(endpointName: string, arg: unknown | SkipToken, {\n    refetchOnReconnect,\n    refetchOnFocus,\n    refetchOnMountOrArgChange,\n    skip = false,\n    pollingInterval = 0,\n    skipPollingIfUnfocused = false,\n    ...rest\n  }: UseQuerySubscriptionOptions = {}) {\n    const {\n      initiate\n    } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n\n    // TODO: Change this to `useRef<SubscriptionSelectors>(undefined)` after upgrading to React 19.\n    const subscriptionSelectorsRef = useRef<SubscriptionSelectors | undefined>(undefined);\n    if (!subscriptionSelectorsRef.current) {\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\n    You must add the middleware for RTK-Query to function correctly!`);\n        }\n      }\n      subscriptionSelectorsRef.current = returnedValue as unknown as SubscriptionSelectors;\n    }\n    const stableArg = useStableQueryArgs(skip ? skipToken : arg,\n    // Even if the user provided a per-endpoint `serializeQueryArgs` with\n    // a consistent return value, _here_ we want to use the default behavior\n    // so we can tell if _anything_ actually changed. Otherwise, we can end up\n    // with a case where the query args did change but the serialization doesn't,\n    // and then we never try to initiate a refetch.\n    defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n    const stableSubscriptionOptions = useShallowStableValue({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval,\n      skipPollingIfUnfocused\n    });\n    const initialPageParam = (rest as UseInfiniteQuerySubscriptionOptions<any>).initialPageParam;\n    const stableInitialPageParam = useShallowStableValue(initialPageParam);\n\n    /**\n     * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n     */\n    const promiseRef = useRef<T | undefined>(undefined);\n    let {\n      queryCacheKey,\n      requestId\n    } = promiseRef.current || {};\n\n    // HACK We've saved the middleware subscription lookup callbacks into a ref,\n    // so we can directly check here if the subscription exists for this query.\n    let currentRenderHasSubscription = false;\n    if (queryCacheKey && requestId) {\n      currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId);\n    }\n    const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== undefined;\n    usePossiblyImmediateEffect((): void | undefined => {\n      if (subscriptionRemoved) {\n        promiseRef.current = undefined;\n      }\n    }, [subscriptionRemoved]);\n    usePossiblyImmediateEffect((): void | undefined => {\n      const lastPromise = promiseRef.current;\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'removeMeOnCompilation') {\n        // this is only present to enforce the rule of hooks to keep `isSubscribed` in the dependency array\n        console.log(subscriptionRemoved);\n      }\n      if (stableArg === skipToken) {\n        lastPromise?.unsubscribe();\n        promiseRef.current = undefined;\n        return;\n      }\n      const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n      if (!lastPromise || lastPromise.arg !== stableArg) {\n        lastPromise?.unsubscribe();\n        const promise = dispatch(initiate(stableArg, {\n          subscriptionOptions: stableSubscriptionOptions,\n          forceRefetch: refetchOnMountOrArgChange,\n          ...(isInfiniteQueryDefinition(context.endpointDefinitions[endpointName]) ? {\n            initialPageParam: stableInitialPageParam\n          } : {})\n        }));\n        promiseRef.current = promise as T;\n      } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n        lastPromise.updateSubscriptionOptions(stableSubscriptionOptions);\n      }\n    }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, endpointName]);\n    return [promiseRef, dispatch, initiate, stableSubscriptionOptions] as const;\n  }\n  function buildUseQueryState(endpointName: string, preSelector: typeof queryStatePreSelector | typeof infiniteQueryStatePreSelector) {\n    const useQueryState = (arg: any, {\n      skip = false,\n      selectFromResult\n    }: UseQueryStateOptions<any, any> | UseInfiniteQueryStateOptions<any, any> = {}) => {\n      const {\n        select\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const stableArg = useStableQueryArgs(skip ? skipToken : arg, serializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      type ApiRootState = Parameters<ReturnType<typeof select>>[0];\n      const lastValue = useRef<any>(undefined);\n      const selectDefaultResult: Selector<ApiRootState, any, [any]> = useMemo(() =>\n      // Normally ts-ignores are bad and should be avoided, but we're\n      // already casting this selector to be `Selector<any>` anyway,\n      // so the inconsistencies don't matter here\n      // @ts-ignore\n      createSelector([\n      // @ts-ignore\n      select(stableArg), (_: ApiRootState, lastResult: any) => lastResult, (_: ApiRootState) => stableArg], preSelector, {\n        memoizeOptions: {\n          resultEqualityCheck: shallowEqual\n        }\n      }), [select, stableArg]);\n      const querySelector: Selector<ApiRootState, any, [any]> = useMemo(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, {\n        devModeChecks: {\n          identityFunctionCheck: 'never'\n        }\n      }) : selectDefaultResult, [selectDefaultResult, selectFromResult]);\n      const currentState = useSelector((state: RootState<Definitions, any, any>) => querySelector(state, lastValue.current), shallowEqual);\n      const store = useStore<RootState<Definitions, any, any>>();\n      const newLastValue = selectDefaultResult(store.getState(), lastValue.current);\n      useIsomorphicLayoutEffect(() => {\n        lastValue.current = newLastValue;\n      }, [newLastValue]);\n      return currentState;\n    };\n    return useQueryState;\n  }\n  function usePromiseRefUnsubscribeOnUnmount(promiseRef: React.RefObject<{\n    unsubscribe?: () => void;\n  } | undefined>) {\n    useEffect(() => {\n      return () => {\n        promiseRef.current?.unsubscribe?.()\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        ;\n        (promiseRef.current as any) = undefined;\n      };\n    }, [promiseRef]);\n  }\n  function refetchOrErrorIfUnmounted<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(promiseRef: React.RefObject<T | undefined>): T {\n    if (!promiseRef.current) throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(38) : 'Cannot refetch a query that has not been started yet.');\n    return promiseRef.current.refetch() as T;\n  }\n  function buildQueryHooks(endpointName: string): QueryHooks<any> {\n    const useQuerySubscription: UseQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef] = useQuerySubscriptionCommonImpl<QueryActionCreatorResult<any>>(endpointName, arg, options);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      return useMemo(() => ({\n        /**\n         * A method to manually refetch data for the query\n         */\n        refetch: () => refetchOrErrorIfUnmounted(promiseRef)\n      }), [promiseRef]);\n    };\n    const useLazyQuerySubscription: UseLazyQuerySubscription<any> = ({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval = 0,\n      skipPollingIfUnfocused = false\n    } = {}) => {\n      const {\n        initiate\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [arg, setArg] = useState<any>(UNINITIALIZED_VALUE);\n\n      // TODO: Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n       */\n      const promiseRef = useRef<QueryActionCreatorResult<any> | undefined>(undefined);\n      const stableSubscriptionOptions = useShallowStableValue({\n        refetchOnReconnect,\n        refetchOnFocus,\n        pollingInterval,\n        skipPollingIfUnfocused\n      });\n      usePossiblyImmediateEffect(() => {\n        const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n        if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n          promiseRef.current?.updateSubscriptionOptions(stableSubscriptionOptions);\n        }\n      }, [stableSubscriptionOptions]);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger = useCallback(function (arg: any, preferCacheValue = false) {\n        let promise: QueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch(initiate(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            forceRefetch: !preferCacheValue\n          }));\n          setArg(arg);\n        });\n        return promise!;\n      }, [dispatch, initiate]);\n      const reset = useCallback(() => {\n        if (promiseRef.current?.queryCacheKey) {\n          dispatch(api.internalActions.removeQueryResult({\n            queryCacheKey: promiseRef.current?.queryCacheKey as QueryCacheKey\n          }));\n        }\n      }, [dispatch]);\n\n      /* cleanup on unmount */\n      useEffect(() => {\n        return () => {\n          promiseRef?.current?.unsubscribe();\n        };\n      }, []);\n\n      /* if \"cleanup on unmount\" was triggered from a fast refresh, we want to reinstate the query */\n      useEffect(() => {\n        if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {\n          trigger(arg, true);\n        }\n      }, [arg, trigger]);\n      return useMemo(() => [trigger, arg, {\n        reset\n      }] as const, [trigger, arg, reset]);\n    };\n    const useQueryState: UseQueryState<any> = buildUseQueryState(endpointName, queryStatePreSelector);\n    return {\n      useQueryState,\n      useQuerySubscription,\n      useLazyQuerySubscription,\n      useLazyQuery(options) {\n        const [trigger, arg, {\n          reset\n        }] = useLazyQuerySubscription(options);\n        const queryStateResults = useQueryState(arg, {\n          ...options,\n          skip: arg === UNINITIALIZED_VALUE\n        });\n        const info = useMemo(() => ({\n          lastArg: arg\n        }), [arg]);\n        return useMemo(() => [trigger, {\n          ...queryStateResults,\n          reset\n        }, info], [trigger, queryStateResults, reset, info]);\n      },\n      useQuery(arg, options) {\n        const querySubscriptionResults = useQuerySubscription(arg, options);\n        const queryStateResults = useQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS);\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          ...querySubscriptionResults\n        }), [queryStateResults, querySubscriptionResults]);\n      }\n    };\n  }\n  function buildInfiniteQueryHooks(endpointName: string): InfiniteQueryHooks<any> {\n    const useInfiniteQuerySubscription: UseInfiniteQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl<InfiniteQueryActionCreatorResult<any>>(endpointName, arg, options);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger: LazyInfiniteQueryTrigger<any> = useCallback(function (arg: unknown, direction: 'forward' | 'backward') {\n        let promise: InfiniteQueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch((initiate as StartInfiniteQueryActionCreator<any>)(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            direction\n          }));\n        });\n        return promise!;\n      }, [promiseRef, dispatch, initiate]);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      const stableArg = useStableQueryArgs(options.skip ? skipToken : arg,\n      // Even if the user provided a per-endpoint `serializeQueryArgs` with\n      // a consistent return value, _here_ we want to use the default behavior\n      // so we can tell if _anything_ actually changed. Otherwise, we can end up\n      // with a case where the query args did change but the serialization doesn't,\n      // and then we never try to initiate a refetch.\n      defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      const refetch = useCallback(() => refetchOrErrorIfUnmounted(promiseRef), [promiseRef]);\n      return useMemo(() => {\n        const fetchNextPage = () => {\n          return trigger(stableArg, 'forward');\n        };\n        const fetchPreviousPage = () => {\n          return trigger(stableArg, 'backward');\n        };\n        return {\n          trigger,\n          /**\n           * A method to manually refetch data for the query\n           */\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        };\n      }, [refetch, trigger, stableArg]);\n    };\n    const useInfiniteQueryState: UseInfiniteQueryState<any> = buildUseQueryState(endpointName, infiniteQueryStatePreSelector);\n    return {\n      useInfiniteQueryState,\n      useInfiniteQuerySubscription,\n      useInfiniteQuery(arg, options) {\n        const {\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        } = useInfiniteQuerySubscription(arg, options);\n        const queryStateResults = useInfiniteQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, 'hasNextPage', 'hasPreviousPage');\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          fetchNextPage,\n          fetchPreviousPage,\n          refetch\n        }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]);\n      }\n    };\n  }\n  function buildMutationHook(name: string): UseMutation<any> {\n    return ({\n      selectFromResult,\n      fixedCacheKey\n    } = {}) => {\n      const {\n        select,\n        initiate\n      } = api.endpoints[name] as ApiEndpointMutation<MutationDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [promise, setPromise] = useState<MutationActionCreatorResult<any>>();\n      useEffect(() => () => {\n        if (!promise?.arg.fixedCacheKey) {\n          promise?.reset();\n        }\n      }, [promise]);\n      const triggerMutation = useCallback(function (arg: Parameters<typeof initiate>['0']) {\n        const promise = dispatch(initiate(arg, {\n          fixedCacheKey\n        }));\n        setPromise(promise);\n        return promise;\n      }, [dispatch, initiate, fixedCacheKey]);\n      const {\n        requestId\n      } = promise || {};\n      const selectDefaultResult = useMemo(() => select({\n        fixedCacheKey,\n        requestId: promise?.requestId\n      }), [fixedCacheKey, promise, select]);\n      const mutationSelector = useMemo((): Selector<RootState<Definitions, any, any>, any> => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]);\n      const currentState = useSelector(mutationSelector, shallowEqual);\n      const originalArgs = fixedCacheKey == null ? promise?.arg.originalArgs : undefined;\n      const reset = useCallback(() => {\n        batch(() => {\n          if (promise) {\n            setPromise(undefined);\n          }\n          if (fixedCacheKey) {\n            dispatch(api.internalActions.removeMutationResult({\n              requestId,\n              fixedCacheKey\n            }));\n          }\n        });\n      }, [dispatch, fixedCacheKey, promise, requestId]);\n      const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, 'endpointName');\n      useDebugValue(debugValue);\n      const finalState = useMemo(() => ({\n        ...currentState,\n        originalArgs,\n        reset\n      }), [currentState, originalArgs, reset]);\n      return useMemo(() => [triggerMutation, finalState] as const, [triggerMutation, finalState]);\n    };\n  }\n}","export const UNINITIALIZED_VALUE = Symbol();\nexport type UninitializedValue = typeof UNINITIALIZED_VALUE;","import { useEffect, useRef, useMemo } from 'react';\nimport type { SerializeQueryArgs } from '@reduxjs/toolkit/query';\nimport type { EndpointDefinition } from '@reduxjs/toolkit/query';\nexport function useStableQueryArgs<T>(queryArgs: T, serialize: SerializeQueryArgs<any>, endpointDefinition: EndpointDefinition<any, any, any, any>, endpointName: string) {\n  const incoming = useMemo(() => ({\n    queryArgs,\n    serialized: typeof queryArgs == 'object' ? serialize({\n      queryArgs,\n      endpointDefinition,\n      endpointName\n    }) : queryArgs\n  }), [queryArgs, serialize, endpointDefinition, endpointName]);\n  const cache = useRef(incoming);\n  useEffect(() => {\n    if (cache.current.serialized !== incoming.serialized) {\n      cache.current = incoming;\n    }\n  }, [incoming]);\n  return cache.current.serialized === incoming.serialized ? cache.current.queryArgs : queryArgs;\n}","import { useEffect, useRef } from 'react';\nimport { shallowEqual } from 'react-redux';\nexport function useShallowStableValue<T>(value: T) {\n  const cache = useRef(value);\n  useEffect(() => {\n    if (!shallowEqual(cache.current, value)) {\n      cache.current = value;\n    }\n  }, [value]);\n  return shallowEqual(cache.current, value) ? cache.current : value;\n}","import { configureStore, formatProdErrorMessage as _formatProdErrorMessage } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport { useContext } from 'react';\nimport { useEffect } from 'react';\nimport * as React from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { Provider, ReactReduxContext } from 'react-redux';\nimport { setupListeners } from '@reduxjs/toolkit/query';\nimport type { Api } from '@reduxjs/toolkit/query';\n\n/**\n * Can be used as a `Provider` if you **do not already have a Redux store**.\n *\n * @example\n * ```tsx\n * // codeblock-meta no-transpile title=\"Basic usage - wrap your App with ApiProvider\"\n * import * as React from 'react';\n * import { ApiProvider } from '@reduxjs/toolkit/query/react';\n * import { Pokemon } from './features/Pokemon';\n *\n * function App() {\n *   return (\n *     <ApiProvider api={api}>\n *       <Pokemon />\n *     </ApiProvider>\n *   );\n * }\n * ```\n *\n * @remarks\n * Using this together with an existing redux store, both will\n * conflict with each other - please use the traditional redux setup\n * in that case.\n */\nexport function ApiProvider(props: {\n  children: any;\n  api: Api<any, {}, any, any>;\n  setupListeners?: Parameters<typeof setupListeners>[1] | false;\n  context?: Context<ReactReduxContextValue | null>;\n}) {\n  const context = props.context || ReactReduxContext;\n  const existingContext = useContext(context);\n  if (existingContext) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(35) : 'Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.');\n  }\n  const [store] = React.useState(() => configureStore({\n    reducer: {\n      [props.api.reducerPath]: props.api.reducer\n    },\n    middleware: gDM => gDM().concat(props.api.middleware)\n  }));\n  // Adds the event listeners for online/offline/focus/etc\n  useEffect((): undefined | (() => void) => props.setupListeners === false ? undefined : setupListeners(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]);\n  return <Provider store={store} context={context}>\n      {props.children}\n    </Provider>;\n}"],"mappings":"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","names":["react_exports","__export","ApiProvider","UNINITIALIZED_VALUE","createApi","reactHooksModule","reactHooksModuleName","__toCommonJS","import_query","import_toolkit","import_react_redux","import_reselect","capitalize","str","isQueryDefinition","isMutationDefinition","isInfiniteQueryDefinition","safeAssign","target","args","import_toolkit","import_query","import_react","import_react_redux","UNINITIALIZED_VALUE","import_react","useStableQueryArgs","queryArgs","serialize","endpointDefinition","endpointName","incoming","cache","import_react","import_react_redux","useShallowStableValue","value","cache","canUseDOM","isDOM","isRunningInReactNative","isReactNative","getUseIsomorphicLayoutEffect","useIsomorphicLayoutEffect","noPendingQueryStateSelector","selected","pick","obj","keys","ret","key","COMMON_HOOK_DEBUG_FIELDS","buildHooks","api","batch","useDispatch","useSelector","useStore","unstable__sideEffectsInRender","createSelector","serializeQueryArgs","context","usePossiblyImmediateEffect","cb","buildQueryHooks","buildInfiniteQueryHooks","buildMutationHook","usePrefetch","queryStatePreSelector","currentState","lastResult","queryArgs","endpointName","endpointDefinition","data","hasData","isFetching","isLoading","isSuccess","infiniteQueryStatePreSelector","defaultOptions","dispatch","stableDefaultOptions","useShallowStableValue","arg","options","useQuerySubscriptionCommonImpl","refetchOnReconnect","refetchOnFocus","refetchOnMountOrArgChange","skip","pollingInterval","skipPollingIfUnfocused","rest","initiate","subscriptionSelectorsRef","returnedValue","stableArg","useStableQueryArgs","stableSubscriptionOptions","initialPageParam","stableInitialPageParam","promiseRef","queryCacheKey","requestId","currentRenderHasSubscription","subscriptionRemoved","lastPromise","lastSubscriptionOptions","promise","isInfiniteQueryDefinition","buildUseQueryState","preSelector","selectFromResult","select","lastValue","selectDefaultResult","_","querySelector","state","store","newLastValue","usePromiseRefUnsubscribeOnUnmount","refetchOrErrorIfUnmounted","_formatProdErrorMessage2","useQuerySubscription","useLazyQuerySubscription","setArg","UNINITIALIZED_VALUE","subscriptionOptionsRef","trigger","preferCacheValue","reset","useQueryState","queryStateResults","info","querySubscriptionResults","debugValue","useInfiniteQuerySubscription","direction","refetch","useInfiniteQueryState","fetchNextPage","fetchPreviousPage","name","fixedCacheKey","setPromise","triggerMutation","mutationSelector","originalArgs","finalState","reactHooksModuleName","reactHooksModule","batch","rrBatch","hooks","rrUseDispatch","rrUseSelector","rrUseStore","createSelector","_createSelector","unstable__sideEffectsInRender","rest","api","serializeQueryArgs","context","anyApi","buildQueryHooks","buildInfiniteQueryHooks","buildMutationHook","usePrefetch","buildHooks","safeAssign","endpointName","definition","isQueryDefinition","useQuery","useLazyQuery","useLazyQuerySubscription","useQueryState","useQuerySubscription","capitalize","isMutationDefinition","useMutation","isInfiniteQueryDefinition","useInfiniteQuery","useInfiniteQuerySubscription","useInfiniteQueryState","__reExport","react_exports","import_toolkit","import_react","React","import_react_redux","import_query","ApiProvider","props","context","_formatProdErrorMessage","store","gDM","createApi","reactHooksModule"]}
Index: node_modules/@reduxjs/toolkit/dist/query/react/index.d.mts
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,959 @@
+import * as _reduxjs_toolkit_query from '@reduxjs/toolkit/query';
+import { QueryDefinition, TSHelpersId, TSHelpersOverride, QuerySubState, ResultTypeFrom, QueryStatus, QueryArgFrom, SkipToken, SubscriptionOptions, TSHelpersNoInfer, QueryActionCreatorResult, MutationDefinition, MutationResultSelectorResult, MutationActionCreatorResult, InfiniteQueryDefinition, InfiniteQuerySubState, PageParamFrom, InfiniteQueryArgFrom, InfiniteQueryActionCreatorResult, BaseQueryFn, EndpointDefinitions, DefinitionType, QueryKeys, PrefetchOptions, Module, Api, setupListeners } from '@reduxjs/toolkit/query';
+export * from '@reduxjs/toolkit/query';
+import * as react_redux from 'react-redux';
+import { ReactReduxContextValue } from 'react-redux';
+import { createSelector } from 'reselect';
+import * as React from 'react';
+import { Context } from 'react';
+
+type InfiniteData<DataType, PageParam> = {
+    pages: Array<DataType>;
+    pageParams: Array<PageParam>;
+};
+type InfiniteQueryDirection = 'forward' | 'backward';
+
+export declare const UNINITIALIZED_VALUE: unique symbol;
+type UninitializedValue = typeof UNINITIALIZED_VALUE;
+
+type QueryHooks<Definition extends QueryDefinition<any, any, any, any, any>> = {
+    useQuery: UseQuery<Definition>;
+    useLazyQuery: UseLazyQuery<Definition>;
+    useQuerySubscription: UseQuerySubscription<Definition>;
+    useLazyQuerySubscription: UseLazyQuerySubscription<Definition>;
+    useQueryState: UseQueryState<Definition>;
+};
+type InfiniteQueryHooks<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {
+    useInfiniteQuery: UseInfiniteQuery<Definition>;
+    useInfiniteQuerySubscription: UseInfiniteQuerySubscription<Definition>;
+    useInfiniteQueryState: UseInfiniteQueryState<Definition>;
+};
+type MutationHooks<Definition extends MutationDefinition<any, any, any, any, any>> = {
+    useMutation: UseMutation<Definition>;
+};
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.
+ *
+ * This hook combines the functionality of both [`useQueryState`](#usequerystate) and [`useQuerySubscription`](#usequerysubscription) together, and is intended to be used in the majority of situations.
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions & UseQueryStateOptions<D, R>) => UseQueryHookResult<D, R>;
+type TypedUseQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type UseQueryHookResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & UseQuerySubscriptionResult<D>;
+/**
+ * Helper type to manually type the result
+ * of the `useQuery` hook in userland code.
+ */
+type TypedUseQueryHookResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery, R> & TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery>;
+type UseQuerySubscriptionOptions = SubscriptionOptions & {
+    /**
+     * Prevents a query from automatically running.
+     *
+     * @remarks
+     * When `skip` is true (or `skipToken` is passed in as `arg`):
+     *
+     * - **If the query has cached data:**
+     *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+     *   * The query will have a status of `uninitialized`
+     *   * If `skip: false` is set after the initial load, the cached result will be used
+     * - **If the query does not have cached data:**
+     *   * The query will have a status of `uninitialized`
+     *   * The query will not exist in the state when viewed with the dev tools
+     *   * The query will not automatically fetch on mount
+     *   * The query will not automatically run when additional components with the same query are added that do run
+     *
+     * @example
+     * ```tsx
+     * // codeblock-meta no-transpile title="Skip example"
+     * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+     *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+     *     skip,
+     *   });
+     *
+     *   return (
+     *     <div>
+     *       {name} - {status}
+     *     </div>
+     *   );
+     * };
+     * ```
+     */
+    skip?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.
+     * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.
+     * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.
+     * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     */
+    refetchOnMountOrArgChange?: boolean | number;
+};
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.
+ *
+ * Note that this hook does not return a request status or cached data. For that use-case, see [`useQuery`](#usequery) or [`useQueryState`](#usequerystate).
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ */
+type UseQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions) => UseQuerySubscriptionResult<D>;
+type TypedUseQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type UseQuerySubscriptionResult<D extends QueryDefinition<any, any, any, any>> = Pick<QueryActionCreatorResult<D>, 'refetch'>;
+/**
+ * Helper type to manually type the result
+ * of the `useQuerySubscription` hook in userland code.
+ */
+type TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscriptionResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type UseLazyQueryLastPromiseInfo<D extends QueryDefinition<any, any, any, any>> = {
+    lastArg: QueryArgFrom<D>;
+};
+/**
+ * A React hook similar to [`useQuery`](#usequery), but with manual control over when the data fetching occurs.
+ *
+ * This hook includes the functionality of [`useLazyQuerySubscription`](#uselazyquerysubscription).
+ *
+ * #### Features
+ *
+ * - Manual control over firing a request to retrieve data
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once
+ *
+ * #### Note
+ *
+ * When the trigger function returned from a LazyQuery is called, it always initiates a new request to the server even if there is cached data. Set `preferCacheValue`(the second argument to the function) as `true` if you want it to immediately return a cached value if one exists.
+ */
+type UseLazyQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(options?: SubscriptionOptions & Omit<UseQueryStateOptions<D, R>, 'skip'>) => [
+    LazyQueryTrigger<D>,
+    UseLazyQueryStateResult<D, R>,
+    UseLazyQueryLastPromiseInfo<D>
+];
+type TypedUseLazyQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type UseLazyQueryStateResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & {
+    /**
+     * Resets the hook state to its initial `uninitialized` state.
+     * This will also remove the last result from the cache.
+     */
+    reset: () => void;
+};
+/**
+ * Helper type to manually type the result
+ * of the `useLazyQuery` hook in userland code.
+ */
+type TypedUseLazyQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseLazyQueryStateResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;
+type LazyQueryTrigger<D extends QueryDefinition<any, any, any, any>> = {
+    /**
+     * Triggers a lazy query.
+     *
+     * By default, this will start a new request even if there is already a value in the cache.
+     * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.
+     *
+     * @remarks
+     * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap with async await"
+     * try {
+     *   const payload = await getUserById(1).unwrap();
+     *   console.log('fulfilled', payload)
+     * } catch (error) {
+     *   console.error('rejected', error);
+     * }
+     * ```
+     */
+    (arg: QueryArgFrom<D>, preferCacheValue?: boolean): QueryActionCreatorResult<D>;
+};
+type TypedLazyQueryTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = LazyQueryTrigger<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+/**
+ * A React hook similar to [`useQuerySubscription`](#usequerysubscription), but with manual control over when the data fetching occurs.
+ *
+ * Note that this hook does not return a request status or cached data. For that use-case, see [`useLazyQuery`](#uselazyquery).
+ *
+ * #### Features
+ *
+ * - Manual control over firing a request to retrieve data
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once
+ */
+type UseLazyQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (options?: SubscriptionOptions) => readonly [
+    LazyQueryTrigger<D>,
+    QueryArgFrom<D> | UninitializedValue,
+    {
+        reset: () => void;
+    }
+];
+type TypedUseLazyQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+/**
+ * @internal
+ */
+type QueryStateSelector<R extends Record<string, any>, D extends QueryDefinition<any, any, any, any>> = (state: UseQueryStateDefaultResult<D>) => R;
+/**
+ * Provides a way to define a strongly-typed version of
+ * {@linkcode QueryStateSelector} for use with a specific query.
+ * This is useful for scenarios where you want to create a "pre-typed"
+ * {@linkcode UseQueryStateOptions.selectFromResult | selectFromResult}
+ * function.
+ *
+ * @example
+ * <caption>#### __Create a strongly-typed `selectFromResult` selector function__</caption>
+ *
+ * ```tsx
+ * import type { TypedQueryStateSelector } from '@reduxjs/toolkit/query/react'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+ *
+ * type Post = {
+ *   id: number
+ *   title: string
+ * }
+ *
+ * type PostsApiResponse = {
+ *   posts: Post[]
+ *   total: number
+ *   skip: number
+ *   limit: number
+ * }
+ *
+ * type QueryArgument = number | undefined
+ *
+ * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+ *
+ * type SelectedResult = Pick<PostsApiResponse, 'posts'>
+ *
+ * const postsApiSlice = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com/posts' }),
+ *   reducerPath: 'postsApi',
+ *   tagTypes: ['Posts'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsApiResponse, QueryArgument>({
+ *       query: (limit = 5) => `?limit=${limit}&select=title`,
+ *     }),
+ *   }),
+ * })
+ *
+ * const { useGetPostsQuery } = postsApiSlice
+ *
+ * function PostById({ id }: { id: number }) {
+ *   const { post } = useGetPostsQuery(undefined, {
+ *     selectFromResult: (state) => ({
+ *       post: state.data?.posts.find((post) => post.id === id),
+ *     }),
+ *   })
+ *
+ *   return <li>{post?.title}</li>
+ * }
+ *
+ * const EMPTY_ARRAY: Post[] = []
+ *
+ * const typedSelectFromResult: TypedQueryStateSelector<
+ *   PostsApiResponse,
+ *   QueryArgument,
+ *   BaseQueryFunction,
+ *   SelectedResult
+ * > = (state) => ({ posts: state.data?.posts ?? EMPTY_ARRAY })
+ *
+ * function PostsList() {
+ *   const { posts } = useGetPostsQuery(undefined, {
+ *     selectFromResult: typedSelectFromResult,
+ *   })
+ *
+ *   return (
+ *     <div>
+ *       <ul>
+ *         {posts.map((post) => (
+ *           <PostById key={post.id} id={post.id} />
+ *         ))}
+ *       </ul>
+ *     </div>
+ *   )
+ * }
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArgumentType - The type of the argument passed into the query.
+ * @template BaseQueryFunctionType - The type of the base query function being used.
+ * @template SelectedResultType - The type of the selected result returned by the __`selectFromResult`__ function.
+ *
+ * @since 2.3.0
+ * @public
+ */
+type TypedQueryStateSelector<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, SelectedResultType extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>> = QueryStateSelector<SelectedResultType, QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>;
+/**
+ * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.
+ *
+ * Note that this hook does not trigger fetching new data. For that use-case, see [`useQuery`](#usequery) or [`useQuerySubscription`](#usequerysubscription).
+ *
+ * #### Features
+ *
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseQueryState<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQueryStateOptions<D, R>) => UseQueryStateResult<D, R>;
+type TypedUseQueryState<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQueryState<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+/**
+ * @internal
+ */
+type UseQueryStateOptions<D extends QueryDefinition<any, any, any, any>, R extends Record<string, any>> = {
+    /**
+     * Prevents a query from automatically running.
+     *
+     * @remarks
+     * When skip is true:
+     *
+     * - **If the query has cached data:**
+     *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+     *   * The query will have a status of `uninitialized`
+     *   * If `skip: false` is set after skipping the initial load, the cached result will be used
+     * - **If the query does not have cached data:**
+     *   * The query will have a status of `uninitialized`
+     *   * The query will not exist in the state when viewed with the dev tools
+     *   * The query will not automatically fetch on mount
+     *   * The query will not automatically run when additional components with the same query are added that do run
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Skip example"
+     * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+     *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+     *     skip,
+     *   });
+     *
+     *   return (
+     *     <div>
+     *       {name} - {status}
+     *     </div>
+     *   );
+     * };
+     * ```
+     */
+    skip?: boolean;
+    /**
+     * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.
+     * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.
+     * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using selectFromResult to extract a single result"
+     * function PostsList() {
+     *   const { data: posts } = api.useGetPostsQuery();
+     *
+     *   return (
+     *     <ul>
+     *       {posts?.data?.map((post) => (
+     *         <PostById key={post.id} id={post.id} />
+     *       ))}
+     *     </ul>
+     *   );
+     * }
+     *
+     * function PostById({ id }: { id: number }) {
+     *   // Will select the post with the given id, and will only rerender if the given posts data changes
+     *   const { post } = api.useGetPostsQuery(undefined, {
+     *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),
+     *   });
+     *
+     *   return <li>{post?.name}</li>;
+     * }
+     * ```
+     */
+    selectFromResult?: QueryStateSelector<R, D>;
+};
+/**
+ * Provides a way to define a "pre-typed" version of
+ * {@linkcode UseQueryStateOptions} with specific options for a given query.
+ * This is particularly useful for setting default query behaviors such as
+ * refetching strategies, which can be overridden as needed.
+ *
+ * @example
+ * <caption>#### __Create a `useQuery` hook with default options__</caption>
+ *
+ * ```ts
+ * import type {
+ *   SubscriptionOptions,
+ *   TypedUseQueryStateOptions,
+ * } from '@reduxjs/toolkit/query/react'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+ *
+ * type Post = {
+ *   id: number
+ *   name: string
+ * }
+ *
+ * const api = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+ *   tagTypes: ['Post'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<Post[], void>({
+ *       query: () => 'posts',
+ *     }),
+ *   }),
+ * })
+ *
+ * const { useGetPostsQuery } = api
+ *
+ * export const useGetPostsQueryWithDefaults = <
+ *   SelectedResult extends Record<string, any>,
+ * >(
+ *   overrideOptions: TypedUseQueryStateOptions<
+ *     Post[],
+ *     void,
+ *     ReturnType<typeof fetchBaseQuery>,
+ *     SelectedResult
+ *   > &
+ *     SubscriptionOptions,
+ * ) =>
+ *   useGetPostsQuery(undefined, {
+ *     // Insert default options here
+ *
+ *     refetchOnMountOrArgChange: true,
+ *     refetchOnFocus: true,
+ *     ...overrideOptions,
+ *   })
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArg - The type of the argument passed into the query.
+ * @template BaseQuery - The type of the base query function being used.
+ * @template SelectedResult - The type of the selected result returned by the __`selectFromResult`__ function.
+ *
+ * @since 2.2.8
+ * @public
+ */
+type TypedUseQueryStateOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseQueryStateOptions<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, SelectedResult>;
+type UseQueryStateResult<_ extends QueryDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R>;
+/**
+ * Helper type to manually type the result
+ * of the `useQueryState` hook in userland code.
+ */
+type TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TSHelpersNoInfer<R>;
+type UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> = QuerySubState<D> & {
+    /**
+     * Where `data` tries to hold data as much as possible, also re-using
+     * data from the last arguments passed into the hook, this property
+     * will always contain the received data from the query, for the current query arguments.
+     */
+    currentData?: ResultTypeFrom<D>;
+    /**
+     * Query has not started yet.
+     */
+    isUninitialized: false;
+    /**
+     * Query is currently loading for the first time. No data yet.
+     */
+    isLoading: false;
+    /**
+     * Query is currently fetching, but might have data from an earlier request.
+     */
+    isFetching: false;
+    /**
+     * Query has data from a successful load.
+     */
+    isSuccess: false;
+    /**
+     * Query is currently in "error" state.
+     */
+    isError: false;
+};
+type UseQueryStateDefaultResult<D extends QueryDefinition<any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseQueryStateBaseResult<D>, {
+    status: QueryStatus.uninitialized;
+}>, {
+    isUninitialized: true;
+}> | TSHelpersOverride<UseQueryStateBaseResult<D>, {
+    isLoading: true;
+    isFetching: boolean;
+    data: undefined;
+} | ({
+    isSuccess: true;
+    isFetching: true;
+    error: undefined;
+} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({
+    isSuccess: true;
+    isFetching: false;
+    error: undefined;
+} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({
+    isError: true;
+} & Required<Pick<UseQueryStateBaseResult<D>, 'error'>>)>> & {
+    /**
+     * @deprecated Included for completeness, but discouraged.
+     * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`
+     * and `isUninitialized` flags instead
+     */
+    status: QueryStatus;
+};
+type LazyInfiniteQueryTrigger<D extends InfiniteQueryDefinition<any, any, any, any, any>> = {
+    /**
+     * Triggers a lazy query.
+     *
+     * By default, this will start a new request even if there is already a value in the cache.
+     * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.
+     *
+     * @remarks
+     * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap with async await"
+     * try {
+     *   const payload = await getUserById(1).unwrap();
+     *   console.log('fulfilled', payload)
+     * } catch (error) {
+     *   console.error('rejected', error);
+     * }
+     * ```
+     */
+    (arg: QueryArgFrom<D>, direction: InfiniteQueryDirection): InfiniteQueryActionCreatorResult<D>;
+};
+type TypedLazyInfiniteQueryTrigger<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = LazyInfiniteQueryTrigger<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+type UseInfiniteQuerySubscriptionOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SubscriptionOptions & {
+    /**
+     * Prevents a query from automatically running.
+     *
+     * @remarks
+     * When `skip` is true (or `skipToken` is passed in as `arg`):
+     *
+     * - **If the query has cached data:**
+     *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+     *   * The query will have a status of `uninitialized`
+     *   * If `skip: false` is set after the initial load, the cached result will be used
+     * - **If the query does not have cached data:**
+     *   * The query will have a status of `uninitialized`
+     *   * The query will not exist in the state when viewed with the dev tools
+     *   * The query will not automatically fetch on mount
+     *   * The query will not automatically run when additional components with the same query are added that do run
+     *
+     * @example
+     * ```tsx
+     * // codeblock-meta no-transpile title="Skip example"
+     * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+     *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+     *     skip,
+     *   });
+     *
+     *   return (
+     *     <div>
+     *       {name} - {status}
+     *     </div>
+     *   );
+     * };
+     * ```
+     */
+    skip?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.
+     * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.
+     * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.
+     * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     */
+    refetchOnMountOrArgChange?: boolean | number;
+    initialPageParam?: PageParamFrom<D>;
+};
+type TypedUseInfiniteQuerySubscription<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscription<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+type UseInfiniteQuerySubscriptionResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = Pick<InfiniteQueryActionCreatorResult<D>, 'refetch'> & {
+    trigger: LazyInfiniteQueryTrigger<D>;
+    fetchNextPage: () => InfiniteQueryActionCreatorResult<D>;
+    fetchPreviousPage: () => InfiniteQueryActionCreatorResult<D>;
+};
+/**
+ * Helper type to manually type the result
+ * of the `useQuerySubscription` hook in userland code.
+ */
+type TypedUseInfiniteQuerySubscriptionResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscriptionResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+type InfiniteQueryStateSelector<R extends Record<string, any>, D extends InfiniteQueryDefinition<any, any, any, any, any>> = (state: UseInfiniteQueryStateDefaultResult<D>) => R;
+type TypedInfiniteQueryStateSelector<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = InfiniteQueryStateSelector<SelectedResult, InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.  Additionally, it will cache multiple "pages" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.
+ *
+ *  The `data` field will be a `{pages: Data[], pageParams: PageParam[]}` structure containing all fetched page responses and the corresponding page param values for each page. You may use this to render individual pages, combine all pages into a single infinite list, or other display logic as needed.
+ *
+ * This hook combines the functionality of both [`useInfiniteQueryState`](#useinfinitequerystate) and [`useInfiniteQuerySubscription`](#useinfinitequerysubscription) together, and is intended to be used in the majority of situations.
+ *
+ * As with normal query hooks, `skipToken` is a valid argument that will skip the query from executing.
+ *
+ * By default, the initial request will use the `initialPageParam` value that was defined on the infinite query endpoint. If you want to start from a different value, you can pass `initialPageParam` as part of the hook options to override that initial request value.
+ *
+ * Use the returned `fetchNextPage` and `fetchPreviousPage` methods on the hook result object to trigger fetches forwards and backwards. These will always calculate the next or previous page param based on the current cached pages and the provided `getNext/PreviousPageParam` callbacks defined in the endpoint.
+ *
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseInfiniteQuery<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D> & UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryHookResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'fetchNextPage' | 'fetchPreviousPage'>;
+type TypedUseInfiniteQuery<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuery<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+/**
+ * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.
+ *
+ * Note that this hook does not trigger fetching new data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQuerySubscription`](#useinfinitequerysubscription).
+ *
+ * #### Features
+ *
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseInfiniteQueryState<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryStateResult<D, R>;
+type TypedUseInfiniteQueryState<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQueryState<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data. Additionally, it will cache multiple "pages" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.
+ *
+ * Note that this hook does not return a request status or cached data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQueryState`](#useinfinitequerystate).
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ */
+type UseInfiniteQuerySubscription<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D>) => UseInfiniteQuerySubscriptionResult<D>;
+type UseInfiniteQueryHookResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = UseInfiniteQueryStateResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'refetch'>;
+type TypedUseInfiniteQueryHookResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryHookResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;
+type UseInfiniteQueryStateOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>, R extends Record<string, any>> = {
+    /**
+     * Prevents a query from automatically running.
+     *
+     * @remarks
+     * When skip is true:
+     *
+     * - **If the query has cached data:**
+     *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+     *   * The query will have a status of `uninitialized`
+     *   * If `skip: false` is set after skipping the initial load, the cached result will be used
+     * - **If the query does not have cached data:**
+     *   * The query will have a status of `uninitialized`
+     *   * The query will not exist in the state when viewed with the dev tools
+     *   * The query will not automatically fetch on mount
+     *   * The query will not automatically run when additional components with the same query are added that do run
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Skip example"
+     * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+     *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+     *     skip,
+     *   });
+     *
+     *   return (
+     *     <div>
+     *       {name} - {status}
+     *     </div>
+     *   );
+     * };
+     * ```
+     */
+    skip?: boolean;
+    /**
+     * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.
+     * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.
+     * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.
+     * Note that this should always return an object (not a primitive), as RTKQ adds fields to the return value.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using selectFromResult to extract a single result"
+     * function PostsList() {
+     *   const { data: posts } = api.useGetPostsQuery();
+     *
+     *   return (
+     *     <ul>
+     *       {posts?.data?.map((post) => (
+     *         <PostById key={post.id} id={post.id} />
+     *       ))}
+     *     </ul>
+     *   );
+     * }
+     *
+     * function PostById({ id }: { id: number }) {
+     *   // Will select the post with the given id, and will only rerender if the given posts data changes
+     *   const { post } = api.useGetPostsQuery(undefined, {
+     *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),
+     *   });
+     *
+     *   return <li>{post?.name}</li>;
+     * }
+     * ```
+     */
+    selectFromResult?: InfiniteQueryStateSelector<R, D>;
+};
+type TypedUseInfiniteQueryStateOptions<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateOptions<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, SelectedResult>;
+type UseInfiniteQueryStateResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = TSHelpersNoInfer<R>;
+type TypedUseInfiniteQueryStateResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;
+type UseInfiniteQueryStateBaseResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<D> & {
+    /**
+     * Where `data` tries to hold data as much as possible, also re-using
+     * data from the last arguments passed into the hook, this property
+     * will always contain the received data from the query, for the current query arguments.
+     */
+    currentData?: InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>;
+    /**
+     * Query has not started yet.
+     */
+    isUninitialized: false;
+    /**
+     * Query is currently loading for the first time. No data yet.
+     */
+    isLoading: false;
+    /**
+     * Query is currently fetching, but might have data from an earlier request.
+     */
+    isFetching: false;
+    /**
+     * Query has data from a successful load.
+     */
+    isSuccess: false;
+    /**
+     * Query is currently in "error" state.
+     */
+    isError: false;
+    hasNextPage: false;
+    hasPreviousPage: false;
+    isFetchingNextPage: false;
+    isFetchingPreviousPage: false;
+};
+type UseInfiniteQueryStateDefaultResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseInfiniteQueryStateBaseResult<D>, {
+    status: QueryStatus.uninitialized;
+}>, {
+    isUninitialized: true;
+}> | TSHelpersOverride<UseInfiniteQueryStateBaseResult<D>, {
+    isLoading: true;
+    isFetching: boolean;
+    data: undefined;
+} | ({
+    isSuccess: true;
+    isFetching: true;
+    error: undefined;
+} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({
+    isSuccess: true;
+    isFetching: false;
+    error: undefined;
+} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({
+    isError: true;
+} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'error'>>)>> & {
+    /**
+     * @deprecated Included for completeness, but discouraged.
+     * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`
+     * and `isUninitialized` flags instead
+     */
+    status: QueryStatus;
+};
+type MutationStateSelector<R extends Record<string, any>, D extends MutationDefinition<any, any, any, any>> = (state: MutationResultSelectorResult<D>) => R;
+type UseMutationStateOptions<D extends MutationDefinition<any, any, any, any>, R extends Record<string, any>> = {
+    selectFromResult?: MutationStateSelector<R, D>;
+    fixedCacheKey?: string;
+};
+type UseMutationStateResult<D extends MutationDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R> & {
+    originalArgs?: QueryArgFrom<D>;
+    /**
+     * Resets the hook state to its initial `uninitialized` state.
+     * This will also remove the last result from the cache.
+     */
+    reset: () => void;
+};
+/**
+ * Helper type to manually type the result
+ * of the `useMutation` hook in userland code.
+ */
+type TypedUseMutationResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = MutationResultSelectorResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseMutationStateResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;
+/**
+ * A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.
+ *
+ * #### Features
+ *
+ * - Manual control over firing a request to alter data on the server or possibly invalidate the cache
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseMutation<D extends MutationDefinition<any, any, any, any>> = <R extends Record<string, any> = MutationResultSelectorResult<D>>(options?: UseMutationStateOptions<D, R>) => readonly [MutationTrigger<D>, UseMutationStateResult<D, R>];
+type TypedUseMutation<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseMutation<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type MutationTrigger<D extends MutationDefinition<any, any, any, any>> = {
+    /**
+     * Triggers the mutation and returns a Promise.
+     * @remarks
+     * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap with async await"
+     * try {
+     *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();
+     *   console.log('fulfilled', payload)
+     * } catch (error) {
+     *   console.error('rejected', error);
+     * }
+     * ```
+     */
+    (arg: QueryArgFrom<D>): MutationActionCreatorResult<D>;
+};
+type TypedMutationTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = MutationTrigger<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+
+type QueryHookNames<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions as Definitions[K] extends {
+        type: DefinitionType.query;
+    } ? `use${Capitalize<K & string>}Query` : never]: UseQuery<Extract<Definitions[K], QueryDefinition<any, any, any, any>>>;
+};
+type LazyQueryHookNames<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions as Definitions[K] extends {
+        type: DefinitionType.query;
+    } ? `useLazy${Capitalize<K & string>}Query` : never]: UseLazyQuery<Extract<Definitions[K], QueryDefinition<any, any, any, any>>>;
+};
+type InfiniteQueryHookNames<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions as Definitions[K] extends {
+        type: DefinitionType.infinitequery;
+    } ? `use${Capitalize<K & string>}InfiniteQuery` : never]: UseInfiniteQuery<Extract<Definitions[K], InfiniteQueryDefinition<any, any, any, any, any>>>;
+};
+type MutationHookNames<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions as Definitions[K] extends {
+        type: DefinitionType.mutation;
+    } ? `use${Capitalize<K & string>}Mutation` : never]: UseMutation<Extract<Definitions[K], MutationDefinition<any, any, any, any>>>;
+};
+type HooksWithUniqueNames<Definitions extends EndpointDefinitions> = QueryHookNames<Definitions> & LazyQueryHookNames<Definitions> & InfiniteQueryHookNames<Definitions> & MutationHookNames<Definitions>;
+
+export declare const reactHooksModuleName: unique symbol;
+type ReactHooksModule = typeof reactHooksModuleName;
+declare module '@reduxjs/toolkit/query' {
+    interface ApiModules<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {
+        [reactHooksModuleName]: {
+            /**
+             *  Endpoints based on the input endpoints provided to `createApi`, containing `select`, `hooks` and `action matchers`.
+             */
+            endpoints: {
+                [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? QueryHooks<Definitions[K]> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? MutationHooks<Definitions[K]> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryHooks<Definitions[K]> : never;
+            };
+            /**
+             * A hook that accepts a string endpoint name, and provides a callback that when called, pre-fetches the data for that endpoint.
+             */
+            usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, options?: PrefetchOptions): (arg: QueryArgFrom<Definitions[EndpointName]>, options?: PrefetchOptions) => void;
+        } & HooksWithUniqueNames<Definitions>;
+    }
+}
+type RR = typeof react_redux;
+interface ReactHooksModuleOptions {
+    /**
+     * The hooks from React Redux to be used
+     */
+    hooks?: {
+        /**
+         * The version of the `useDispatch` hook to be used
+         */
+        useDispatch: RR['useDispatch'];
+        /**
+         * The version of the `useSelector` hook to be used
+         */
+        useSelector: RR['useSelector'];
+        /**
+         * The version of the `useStore` hook to be used
+         */
+        useStore: RR['useStore'];
+    };
+    /**
+     * The version of the `batchedUpdates` function to be used
+     */
+    batch?: RR['batch'];
+    /**
+     * Enables performing asynchronous tasks immediately within a render.
+     *
+     * @example
+     *
+     * ```ts
+     * import {
+     *   buildCreateApi,
+     *   coreModule,
+     *   reactHooksModule
+     * } from '@reduxjs/toolkit/query/react'
+     *
+     * const createApi = buildCreateApi(
+     *   coreModule(),
+     *   reactHooksModule({ unstable__sideEffectsInRender: true })
+     * )
+     * ```
+     */
+    unstable__sideEffectsInRender?: boolean;
+    /**
+     * A selector creator (usually from `reselect`, or matching the same signature)
+     */
+    createSelector?: typeof createSelector;
+}
+/**
+ * Creates a module that generates react hooks from endpoints, for use with `buildCreateApi`.
+ *
+ *  @example
+ * ```ts
+ * const MyContext = React.createContext<ReactReduxContextValue | null>(null);
+ * const customCreateApi = buildCreateApi(
+ *   coreModule(),
+ *   reactHooksModule({
+ *     hooks: {
+ *       useDispatch: createDispatchHook(MyContext),
+ *       useSelector: createSelectorHook(MyContext),
+ *       useStore: createStoreHook(MyContext)
+ *     }
+ *   })
+ * );
+ * ```
+ *
+ * @returns A module for use with `buildCreateApi`
+ */
+declare const reactHooksModule: ({ batch, hooks, createSelector, unstable__sideEffectsInRender, ...rest }?: ReactHooksModuleOptions) => Module<ReactHooksModule>;
+
+/**
+ * Can be used as a `Provider` if you **do not already have a Redux store**.
+ *
+ * @example
+ * ```tsx
+ * // codeblock-meta no-transpile title="Basic usage - wrap your App with ApiProvider"
+ * import * as React from 'react';
+ * import { ApiProvider } from '@reduxjs/toolkit/query/react';
+ * import { Pokemon } from './features/Pokemon';
+ *
+ * function App() {
+ *   return (
+ *     <ApiProvider api={api}>
+ *       <Pokemon />
+ *     </ApiProvider>
+ *   );
+ * }
+ * ```
+ *
+ * @remarks
+ * Using this together with an existing redux store, both will
+ * conflict with each other - please use the traditional redux setup
+ * in that case.
+ */
+declare function ApiProvider(props: {
+    children: any;
+    api: Api<any, {}, any, any>;
+    setupListeners?: Parameters<typeof setupListeners>[1] | false;
+    context?: Context<ReactReduxContextValue | null>;
+}): React.JSX.Element;
+
+declare const createApi: _reduxjs_toolkit_query.CreateApi<typeof _reduxjs_toolkit_query.coreModuleName | typeof reactHooksModuleName>;
+
+export { ApiProvider, type TypedInfiniteQueryStateSelector, type TypedLazyInfiniteQueryTrigger, type TypedLazyQueryTrigger, type TypedMutationTrigger, type TypedQueryStateSelector, type TypedUseInfiniteQuery, type TypedUseInfiniteQueryHookResult, type TypedUseInfiniteQueryState, type TypedUseInfiniteQueryStateOptions, type TypedUseInfiniteQueryStateResult, type TypedUseInfiniteQuerySubscription, type TypedUseInfiniteQuerySubscriptionResult, type TypedUseLazyQuery, type TypedUseLazyQueryStateResult, type TypedUseLazyQuerySubscription, type TypedUseMutation, type TypedUseMutationResult, type TypedUseQuery, type TypedUseQueryHookResult, type TypedUseQueryState, type TypedUseQueryStateOptions, type TypedUseQueryStateResult, type TypedUseQuerySubscription, type TypedUseQuerySubscriptionResult, createApi, reactHooksModule };
Index: node_modules/@reduxjs/toolkit/dist/query/react/index.d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,959 @@
+import * as _reduxjs_toolkit_query from '@reduxjs/toolkit/query';
+import { QueryDefinition, TSHelpersId, TSHelpersOverride, QuerySubState, ResultTypeFrom, QueryStatus, QueryArgFrom, SkipToken, SubscriptionOptions, TSHelpersNoInfer, QueryActionCreatorResult, MutationDefinition, MutationResultSelectorResult, MutationActionCreatorResult, InfiniteQueryDefinition, InfiniteQuerySubState, PageParamFrom, InfiniteQueryArgFrom, InfiniteQueryActionCreatorResult, BaseQueryFn, EndpointDefinitions, DefinitionType, QueryKeys, PrefetchOptions, Module, Api, setupListeners } from '@reduxjs/toolkit/query';
+export * from '@reduxjs/toolkit/query';
+import * as react_redux from 'react-redux';
+import { ReactReduxContextValue } from 'react-redux';
+import { createSelector } from 'reselect';
+import * as React from 'react';
+import { Context } from 'react';
+
+type InfiniteData<DataType, PageParam> = {
+    pages: Array<DataType>;
+    pageParams: Array<PageParam>;
+};
+type InfiniteQueryDirection = 'forward' | 'backward';
+
+export declare const UNINITIALIZED_VALUE: unique symbol;
+type UninitializedValue = typeof UNINITIALIZED_VALUE;
+
+type QueryHooks<Definition extends QueryDefinition<any, any, any, any, any>> = {
+    useQuery: UseQuery<Definition>;
+    useLazyQuery: UseLazyQuery<Definition>;
+    useQuerySubscription: UseQuerySubscription<Definition>;
+    useLazyQuerySubscription: UseLazyQuerySubscription<Definition>;
+    useQueryState: UseQueryState<Definition>;
+};
+type InfiniteQueryHooks<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {
+    useInfiniteQuery: UseInfiniteQuery<Definition>;
+    useInfiniteQuerySubscription: UseInfiniteQuerySubscription<Definition>;
+    useInfiniteQueryState: UseInfiniteQueryState<Definition>;
+};
+type MutationHooks<Definition extends MutationDefinition<any, any, any, any, any>> = {
+    useMutation: UseMutation<Definition>;
+};
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.
+ *
+ * This hook combines the functionality of both [`useQueryState`](#usequerystate) and [`useQuerySubscription`](#usequerysubscription) together, and is intended to be used in the majority of situations.
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions & UseQueryStateOptions<D, R>) => UseQueryHookResult<D, R>;
+type TypedUseQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type UseQueryHookResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & UseQuerySubscriptionResult<D>;
+/**
+ * Helper type to manually type the result
+ * of the `useQuery` hook in userland code.
+ */
+type TypedUseQueryHookResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery, R> & TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery>;
+type UseQuerySubscriptionOptions = SubscriptionOptions & {
+    /**
+     * Prevents a query from automatically running.
+     *
+     * @remarks
+     * When `skip` is true (or `skipToken` is passed in as `arg`):
+     *
+     * - **If the query has cached data:**
+     *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+     *   * The query will have a status of `uninitialized`
+     *   * If `skip: false` is set after the initial load, the cached result will be used
+     * - **If the query does not have cached data:**
+     *   * The query will have a status of `uninitialized`
+     *   * The query will not exist in the state when viewed with the dev tools
+     *   * The query will not automatically fetch on mount
+     *   * The query will not automatically run when additional components with the same query are added that do run
+     *
+     * @example
+     * ```tsx
+     * // codeblock-meta no-transpile title="Skip example"
+     * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+     *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+     *     skip,
+     *   });
+     *
+     *   return (
+     *     <div>
+     *       {name} - {status}
+     *     </div>
+     *   );
+     * };
+     * ```
+     */
+    skip?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.
+     * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.
+     * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.
+     * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     */
+    refetchOnMountOrArgChange?: boolean | number;
+};
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.
+ *
+ * Note that this hook does not return a request status or cached data. For that use-case, see [`useQuery`](#usequery) or [`useQueryState`](#usequerystate).
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ */
+type UseQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions) => UseQuerySubscriptionResult<D>;
+type TypedUseQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type UseQuerySubscriptionResult<D extends QueryDefinition<any, any, any, any>> = Pick<QueryActionCreatorResult<D>, 'refetch'>;
+/**
+ * Helper type to manually type the result
+ * of the `useQuerySubscription` hook in userland code.
+ */
+type TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscriptionResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type UseLazyQueryLastPromiseInfo<D extends QueryDefinition<any, any, any, any>> = {
+    lastArg: QueryArgFrom<D>;
+};
+/**
+ * A React hook similar to [`useQuery`](#usequery), but with manual control over when the data fetching occurs.
+ *
+ * This hook includes the functionality of [`useLazyQuerySubscription`](#uselazyquerysubscription).
+ *
+ * #### Features
+ *
+ * - Manual control over firing a request to retrieve data
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once
+ *
+ * #### Note
+ *
+ * When the trigger function returned from a LazyQuery is called, it always initiates a new request to the server even if there is cached data. Set `preferCacheValue`(the second argument to the function) as `true` if you want it to immediately return a cached value if one exists.
+ */
+type UseLazyQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(options?: SubscriptionOptions & Omit<UseQueryStateOptions<D, R>, 'skip'>) => [
+    LazyQueryTrigger<D>,
+    UseLazyQueryStateResult<D, R>,
+    UseLazyQueryLastPromiseInfo<D>
+];
+type TypedUseLazyQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type UseLazyQueryStateResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & {
+    /**
+     * Resets the hook state to its initial `uninitialized` state.
+     * This will also remove the last result from the cache.
+     */
+    reset: () => void;
+};
+/**
+ * Helper type to manually type the result
+ * of the `useLazyQuery` hook in userland code.
+ */
+type TypedUseLazyQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseLazyQueryStateResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;
+type LazyQueryTrigger<D extends QueryDefinition<any, any, any, any>> = {
+    /**
+     * Triggers a lazy query.
+     *
+     * By default, this will start a new request even if there is already a value in the cache.
+     * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.
+     *
+     * @remarks
+     * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap with async await"
+     * try {
+     *   const payload = await getUserById(1).unwrap();
+     *   console.log('fulfilled', payload)
+     * } catch (error) {
+     *   console.error('rejected', error);
+     * }
+     * ```
+     */
+    (arg: QueryArgFrom<D>, preferCacheValue?: boolean): QueryActionCreatorResult<D>;
+};
+type TypedLazyQueryTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = LazyQueryTrigger<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+/**
+ * A React hook similar to [`useQuerySubscription`](#usequerysubscription), but with manual control over when the data fetching occurs.
+ *
+ * Note that this hook does not return a request status or cached data. For that use-case, see [`useLazyQuery`](#uselazyquery).
+ *
+ * #### Features
+ *
+ * - Manual control over firing a request to retrieve data
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once
+ */
+type UseLazyQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (options?: SubscriptionOptions) => readonly [
+    LazyQueryTrigger<D>,
+    QueryArgFrom<D> | UninitializedValue,
+    {
+        reset: () => void;
+    }
+];
+type TypedUseLazyQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+/**
+ * @internal
+ */
+type QueryStateSelector<R extends Record<string, any>, D extends QueryDefinition<any, any, any, any>> = (state: UseQueryStateDefaultResult<D>) => R;
+/**
+ * Provides a way to define a strongly-typed version of
+ * {@linkcode QueryStateSelector} for use with a specific query.
+ * This is useful for scenarios where you want to create a "pre-typed"
+ * {@linkcode UseQueryStateOptions.selectFromResult | selectFromResult}
+ * function.
+ *
+ * @example
+ * <caption>#### __Create a strongly-typed `selectFromResult` selector function__</caption>
+ *
+ * ```tsx
+ * import type { TypedQueryStateSelector } from '@reduxjs/toolkit/query/react'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+ *
+ * type Post = {
+ *   id: number
+ *   title: string
+ * }
+ *
+ * type PostsApiResponse = {
+ *   posts: Post[]
+ *   total: number
+ *   skip: number
+ *   limit: number
+ * }
+ *
+ * type QueryArgument = number | undefined
+ *
+ * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+ *
+ * type SelectedResult = Pick<PostsApiResponse, 'posts'>
+ *
+ * const postsApiSlice = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com/posts' }),
+ *   reducerPath: 'postsApi',
+ *   tagTypes: ['Posts'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsApiResponse, QueryArgument>({
+ *       query: (limit = 5) => `?limit=${limit}&select=title`,
+ *     }),
+ *   }),
+ * })
+ *
+ * const { useGetPostsQuery } = postsApiSlice
+ *
+ * function PostById({ id }: { id: number }) {
+ *   const { post } = useGetPostsQuery(undefined, {
+ *     selectFromResult: (state) => ({
+ *       post: state.data?.posts.find((post) => post.id === id),
+ *     }),
+ *   })
+ *
+ *   return <li>{post?.title}</li>
+ * }
+ *
+ * const EMPTY_ARRAY: Post[] = []
+ *
+ * const typedSelectFromResult: TypedQueryStateSelector<
+ *   PostsApiResponse,
+ *   QueryArgument,
+ *   BaseQueryFunction,
+ *   SelectedResult
+ * > = (state) => ({ posts: state.data?.posts ?? EMPTY_ARRAY })
+ *
+ * function PostsList() {
+ *   const { posts } = useGetPostsQuery(undefined, {
+ *     selectFromResult: typedSelectFromResult,
+ *   })
+ *
+ *   return (
+ *     <div>
+ *       <ul>
+ *         {posts.map((post) => (
+ *           <PostById key={post.id} id={post.id} />
+ *         ))}
+ *       </ul>
+ *     </div>
+ *   )
+ * }
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArgumentType - The type of the argument passed into the query.
+ * @template BaseQueryFunctionType - The type of the base query function being used.
+ * @template SelectedResultType - The type of the selected result returned by the __`selectFromResult`__ function.
+ *
+ * @since 2.3.0
+ * @public
+ */
+type TypedQueryStateSelector<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, SelectedResultType extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>> = QueryStateSelector<SelectedResultType, QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>;
+/**
+ * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.
+ *
+ * Note that this hook does not trigger fetching new data. For that use-case, see [`useQuery`](#usequery) or [`useQuerySubscription`](#usequerysubscription).
+ *
+ * #### Features
+ *
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseQueryState<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQueryStateOptions<D, R>) => UseQueryStateResult<D, R>;
+type TypedUseQueryState<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQueryState<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+/**
+ * @internal
+ */
+type UseQueryStateOptions<D extends QueryDefinition<any, any, any, any>, R extends Record<string, any>> = {
+    /**
+     * Prevents a query from automatically running.
+     *
+     * @remarks
+     * When skip is true:
+     *
+     * - **If the query has cached data:**
+     *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+     *   * The query will have a status of `uninitialized`
+     *   * If `skip: false` is set after skipping the initial load, the cached result will be used
+     * - **If the query does not have cached data:**
+     *   * The query will have a status of `uninitialized`
+     *   * The query will not exist in the state when viewed with the dev tools
+     *   * The query will not automatically fetch on mount
+     *   * The query will not automatically run when additional components with the same query are added that do run
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Skip example"
+     * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+     *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+     *     skip,
+     *   });
+     *
+     *   return (
+     *     <div>
+     *       {name} - {status}
+     *     </div>
+     *   );
+     * };
+     * ```
+     */
+    skip?: boolean;
+    /**
+     * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.
+     * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.
+     * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using selectFromResult to extract a single result"
+     * function PostsList() {
+     *   const { data: posts } = api.useGetPostsQuery();
+     *
+     *   return (
+     *     <ul>
+     *       {posts?.data?.map((post) => (
+     *         <PostById key={post.id} id={post.id} />
+     *       ))}
+     *     </ul>
+     *   );
+     * }
+     *
+     * function PostById({ id }: { id: number }) {
+     *   // Will select the post with the given id, and will only rerender if the given posts data changes
+     *   const { post } = api.useGetPostsQuery(undefined, {
+     *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),
+     *   });
+     *
+     *   return <li>{post?.name}</li>;
+     * }
+     * ```
+     */
+    selectFromResult?: QueryStateSelector<R, D>;
+};
+/**
+ * Provides a way to define a "pre-typed" version of
+ * {@linkcode UseQueryStateOptions} with specific options for a given query.
+ * This is particularly useful for setting default query behaviors such as
+ * refetching strategies, which can be overridden as needed.
+ *
+ * @example
+ * <caption>#### __Create a `useQuery` hook with default options__</caption>
+ *
+ * ```ts
+ * import type {
+ *   SubscriptionOptions,
+ *   TypedUseQueryStateOptions,
+ * } from '@reduxjs/toolkit/query/react'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+ *
+ * type Post = {
+ *   id: number
+ *   name: string
+ * }
+ *
+ * const api = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+ *   tagTypes: ['Post'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<Post[], void>({
+ *       query: () => 'posts',
+ *     }),
+ *   }),
+ * })
+ *
+ * const { useGetPostsQuery } = api
+ *
+ * export const useGetPostsQueryWithDefaults = <
+ *   SelectedResult extends Record<string, any>,
+ * >(
+ *   overrideOptions: TypedUseQueryStateOptions<
+ *     Post[],
+ *     void,
+ *     ReturnType<typeof fetchBaseQuery>,
+ *     SelectedResult
+ *   > &
+ *     SubscriptionOptions,
+ * ) =>
+ *   useGetPostsQuery(undefined, {
+ *     // Insert default options here
+ *
+ *     refetchOnMountOrArgChange: true,
+ *     refetchOnFocus: true,
+ *     ...overrideOptions,
+ *   })
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArg - The type of the argument passed into the query.
+ * @template BaseQuery - The type of the base query function being used.
+ * @template SelectedResult - The type of the selected result returned by the __`selectFromResult`__ function.
+ *
+ * @since 2.2.8
+ * @public
+ */
+type TypedUseQueryStateOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseQueryStateOptions<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, SelectedResult>;
+type UseQueryStateResult<_ extends QueryDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R>;
+/**
+ * Helper type to manually type the result
+ * of the `useQueryState` hook in userland code.
+ */
+type TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TSHelpersNoInfer<R>;
+type UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> = QuerySubState<D> & {
+    /**
+     * Where `data` tries to hold data as much as possible, also re-using
+     * data from the last arguments passed into the hook, this property
+     * will always contain the received data from the query, for the current query arguments.
+     */
+    currentData?: ResultTypeFrom<D>;
+    /**
+     * Query has not started yet.
+     */
+    isUninitialized: false;
+    /**
+     * Query is currently loading for the first time. No data yet.
+     */
+    isLoading: false;
+    /**
+     * Query is currently fetching, but might have data from an earlier request.
+     */
+    isFetching: false;
+    /**
+     * Query has data from a successful load.
+     */
+    isSuccess: false;
+    /**
+     * Query is currently in "error" state.
+     */
+    isError: false;
+};
+type UseQueryStateDefaultResult<D extends QueryDefinition<any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseQueryStateBaseResult<D>, {
+    status: QueryStatus.uninitialized;
+}>, {
+    isUninitialized: true;
+}> | TSHelpersOverride<UseQueryStateBaseResult<D>, {
+    isLoading: true;
+    isFetching: boolean;
+    data: undefined;
+} | ({
+    isSuccess: true;
+    isFetching: true;
+    error: undefined;
+} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({
+    isSuccess: true;
+    isFetching: false;
+    error: undefined;
+} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({
+    isError: true;
+} & Required<Pick<UseQueryStateBaseResult<D>, 'error'>>)>> & {
+    /**
+     * @deprecated Included for completeness, but discouraged.
+     * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`
+     * and `isUninitialized` flags instead
+     */
+    status: QueryStatus;
+};
+type LazyInfiniteQueryTrigger<D extends InfiniteQueryDefinition<any, any, any, any, any>> = {
+    /**
+     * Triggers a lazy query.
+     *
+     * By default, this will start a new request even if there is already a value in the cache.
+     * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.
+     *
+     * @remarks
+     * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap with async await"
+     * try {
+     *   const payload = await getUserById(1).unwrap();
+     *   console.log('fulfilled', payload)
+     * } catch (error) {
+     *   console.error('rejected', error);
+     * }
+     * ```
+     */
+    (arg: QueryArgFrom<D>, direction: InfiniteQueryDirection): InfiniteQueryActionCreatorResult<D>;
+};
+type TypedLazyInfiniteQueryTrigger<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = LazyInfiniteQueryTrigger<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+type UseInfiniteQuerySubscriptionOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SubscriptionOptions & {
+    /**
+     * Prevents a query from automatically running.
+     *
+     * @remarks
+     * When `skip` is true (or `skipToken` is passed in as `arg`):
+     *
+     * - **If the query has cached data:**
+     *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+     *   * The query will have a status of `uninitialized`
+     *   * If `skip: false` is set after the initial load, the cached result will be used
+     * - **If the query does not have cached data:**
+     *   * The query will have a status of `uninitialized`
+     *   * The query will not exist in the state when viewed with the dev tools
+     *   * The query will not automatically fetch on mount
+     *   * The query will not automatically run when additional components with the same query are added that do run
+     *
+     * @example
+     * ```tsx
+     * // codeblock-meta no-transpile title="Skip example"
+     * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+     *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+     *     skip,
+     *   });
+     *
+     *   return (
+     *     <div>
+     *       {name} - {status}
+     *     </div>
+     *   );
+     * };
+     * ```
+     */
+    skip?: boolean;
+    /**
+     * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.
+     * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.
+     * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.
+     * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.
+     *
+     * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+     */
+    refetchOnMountOrArgChange?: boolean | number;
+    initialPageParam?: PageParamFrom<D>;
+};
+type TypedUseInfiniteQuerySubscription<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscription<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+type UseInfiniteQuerySubscriptionResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = Pick<InfiniteQueryActionCreatorResult<D>, 'refetch'> & {
+    trigger: LazyInfiniteQueryTrigger<D>;
+    fetchNextPage: () => InfiniteQueryActionCreatorResult<D>;
+    fetchPreviousPage: () => InfiniteQueryActionCreatorResult<D>;
+};
+/**
+ * Helper type to manually type the result
+ * of the `useQuerySubscription` hook in userland code.
+ */
+type TypedUseInfiniteQuerySubscriptionResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscriptionResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+type InfiniteQueryStateSelector<R extends Record<string, any>, D extends InfiniteQueryDefinition<any, any, any, any, any>> = (state: UseInfiniteQueryStateDefaultResult<D>) => R;
+type TypedInfiniteQueryStateSelector<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = InfiniteQueryStateSelector<SelectedResult, InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.  Additionally, it will cache multiple "pages" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.
+ *
+ *  The `data` field will be a `{pages: Data[], pageParams: PageParam[]}` structure containing all fetched page responses and the corresponding page param values for each page. You may use this to render individual pages, combine all pages into a single infinite list, or other display logic as needed.
+ *
+ * This hook combines the functionality of both [`useInfiniteQueryState`](#useinfinitequerystate) and [`useInfiniteQuerySubscription`](#useinfinitequerysubscription) together, and is intended to be used in the majority of situations.
+ *
+ * As with normal query hooks, `skipToken` is a valid argument that will skip the query from executing.
+ *
+ * By default, the initial request will use the `initialPageParam` value that was defined on the infinite query endpoint. If you want to start from a different value, you can pass `initialPageParam` as part of the hook options to override that initial request value.
+ *
+ * Use the returned `fetchNextPage` and `fetchPreviousPage` methods on the hook result object to trigger fetches forwards and backwards. These will always calculate the next or previous page param based on the current cached pages and the provided `getNext/PreviousPageParam` callbacks defined in the endpoint.
+ *
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseInfiniteQuery<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D> & UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryHookResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'fetchNextPage' | 'fetchPreviousPage'>;
+type TypedUseInfiniteQuery<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuery<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+/**
+ * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.
+ *
+ * Note that this hook does not trigger fetching new data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQuerySubscription`](#useinfinitequerysubscription).
+ *
+ * #### Features
+ *
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseInfiniteQueryState<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryStateResult<D, R>;
+type TypedUseInfiniteQueryState<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQueryState<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data. Additionally, it will cache multiple "pages" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.
+ *
+ * Note that this hook does not return a request status or cached data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQueryState`](#useinfinitequerystate).
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ */
+type UseInfiniteQuerySubscription<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D>) => UseInfiniteQuerySubscriptionResult<D>;
+type UseInfiniteQueryHookResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = UseInfiniteQueryStateResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'refetch'>;
+type TypedUseInfiniteQueryHookResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryHookResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;
+type UseInfiniteQueryStateOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>, R extends Record<string, any>> = {
+    /**
+     * Prevents a query from automatically running.
+     *
+     * @remarks
+     * When skip is true:
+     *
+     * - **If the query has cached data:**
+     *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+     *   * The query will have a status of `uninitialized`
+     *   * If `skip: false` is set after skipping the initial load, the cached result will be used
+     * - **If the query does not have cached data:**
+     *   * The query will have a status of `uninitialized`
+     *   * The query will not exist in the state when viewed with the dev tools
+     *   * The query will not automatically fetch on mount
+     *   * The query will not automatically run when additional components with the same query are added that do run
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Skip example"
+     * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+     *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+     *     skip,
+     *   });
+     *
+     *   return (
+     *     <div>
+     *       {name} - {status}
+     *     </div>
+     *   );
+     * };
+     * ```
+     */
+    skip?: boolean;
+    /**
+     * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.
+     * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.
+     * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.
+     * Note that this should always return an object (not a primitive), as RTKQ adds fields to the return value.
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using selectFromResult to extract a single result"
+     * function PostsList() {
+     *   const { data: posts } = api.useGetPostsQuery();
+     *
+     *   return (
+     *     <ul>
+     *       {posts?.data?.map((post) => (
+     *         <PostById key={post.id} id={post.id} />
+     *       ))}
+     *     </ul>
+     *   );
+     * }
+     *
+     * function PostById({ id }: { id: number }) {
+     *   // Will select the post with the given id, and will only rerender if the given posts data changes
+     *   const { post } = api.useGetPostsQuery(undefined, {
+     *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),
+     *   });
+     *
+     *   return <li>{post?.name}</li>;
+     * }
+     * ```
+     */
+    selectFromResult?: InfiniteQueryStateSelector<R, D>;
+};
+type TypedUseInfiniteQueryStateOptions<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateOptions<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, SelectedResult>;
+type UseInfiniteQueryStateResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = TSHelpersNoInfer<R>;
+type TypedUseInfiniteQueryStateResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;
+type UseInfiniteQueryStateBaseResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<D> & {
+    /**
+     * Where `data` tries to hold data as much as possible, also re-using
+     * data from the last arguments passed into the hook, this property
+     * will always contain the received data from the query, for the current query arguments.
+     */
+    currentData?: InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>;
+    /**
+     * Query has not started yet.
+     */
+    isUninitialized: false;
+    /**
+     * Query is currently loading for the first time. No data yet.
+     */
+    isLoading: false;
+    /**
+     * Query is currently fetching, but might have data from an earlier request.
+     */
+    isFetching: false;
+    /**
+     * Query has data from a successful load.
+     */
+    isSuccess: false;
+    /**
+     * Query is currently in "error" state.
+     */
+    isError: false;
+    hasNextPage: false;
+    hasPreviousPage: false;
+    isFetchingNextPage: false;
+    isFetchingPreviousPage: false;
+};
+type UseInfiniteQueryStateDefaultResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseInfiniteQueryStateBaseResult<D>, {
+    status: QueryStatus.uninitialized;
+}>, {
+    isUninitialized: true;
+}> | TSHelpersOverride<UseInfiniteQueryStateBaseResult<D>, {
+    isLoading: true;
+    isFetching: boolean;
+    data: undefined;
+} | ({
+    isSuccess: true;
+    isFetching: true;
+    error: undefined;
+} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({
+    isSuccess: true;
+    isFetching: false;
+    error: undefined;
+} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({
+    isError: true;
+} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'error'>>)>> & {
+    /**
+     * @deprecated Included for completeness, but discouraged.
+     * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`
+     * and `isUninitialized` flags instead
+     */
+    status: QueryStatus;
+};
+type MutationStateSelector<R extends Record<string, any>, D extends MutationDefinition<any, any, any, any>> = (state: MutationResultSelectorResult<D>) => R;
+type UseMutationStateOptions<D extends MutationDefinition<any, any, any, any>, R extends Record<string, any>> = {
+    selectFromResult?: MutationStateSelector<R, D>;
+    fixedCacheKey?: string;
+};
+type UseMutationStateResult<D extends MutationDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R> & {
+    originalArgs?: QueryArgFrom<D>;
+    /**
+     * Resets the hook state to its initial `uninitialized` state.
+     * This will also remove the last result from the cache.
+     */
+    reset: () => void;
+};
+/**
+ * Helper type to manually type the result
+ * of the `useMutation` hook in userland code.
+ */
+type TypedUseMutationResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = MutationResultSelectorResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseMutationStateResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;
+/**
+ * A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.
+ *
+ * #### Features
+ *
+ * - Manual control over firing a request to alter data on the server or possibly invalidate the cache
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+type UseMutation<D extends MutationDefinition<any, any, any, any>> = <R extends Record<string, any> = MutationResultSelectorResult<D>>(options?: UseMutationStateOptions<D, R>) => readonly [MutationTrigger<D>, UseMutationStateResult<D, R>];
+type TypedUseMutation<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseMutation<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+type MutationTrigger<D extends MutationDefinition<any, any, any, any>> = {
+    /**
+     * Triggers the mutation and returns a Promise.
+     * @remarks
+     * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap with async await"
+     * try {
+     *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();
+     *   console.log('fulfilled', payload)
+     * } catch (error) {
+     *   console.error('rejected', error);
+     * }
+     * ```
+     */
+    (arg: QueryArgFrom<D>): MutationActionCreatorResult<D>;
+};
+type TypedMutationTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = MutationTrigger<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;
+
+type QueryHookNames<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions as Definitions[K] extends {
+        type: DefinitionType.query;
+    } ? `use${Capitalize<K & string>}Query` : never]: UseQuery<Extract<Definitions[K], QueryDefinition<any, any, any, any>>>;
+};
+type LazyQueryHookNames<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions as Definitions[K] extends {
+        type: DefinitionType.query;
+    } ? `useLazy${Capitalize<K & string>}Query` : never]: UseLazyQuery<Extract<Definitions[K], QueryDefinition<any, any, any, any>>>;
+};
+type InfiniteQueryHookNames<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions as Definitions[K] extends {
+        type: DefinitionType.infinitequery;
+    } ? `use${Capitalize<K & string>}InfiniteQuery` : never]: UseInfiniteQuery<Extract<Definitions[K], InfiniteQueryDefinition<any, any, any, any, any>>>;
+};
+type MutationHookNames<Definitions extends EndpointDefinitions> = {
+    [K in keyof Definitions as Definitions[K] extends {
+        type: DefinitionType.mutation;
+    } ? `use${Capitalize<K & string>}Mutation` : never]: UseMutation<Extract<Definitions[K], MutationDefinition<any, any, any, any>>>;
+};
+type HooksWithUniqueNames<Definitions extends EndpointDefinitions> = QueryHookNames<Definitions> & LazyQueryHookNames<Definitions> & InfiniteQueryHookNames<Definitions> & MutationHookNames<Definitions>;
+
+export declare const reactHooksModuleName: unique symbol;
+type ReactHooksModule = typeof reactHooksModuleName;
+declare module '@reduxjs/toolkit/query' {
+    interface ApiModules<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {
+        [reactHooksModuleName]: {
+            /**
+             *  Endpoints based on the input endpoints provided to `createApi`, containing `select`, `hooks` and `action matchers`.
+             */
+            endpoints: {
+                [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? QueryHooks<Definitions[K]> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? MutationHooks<Definitions[K]> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryHooks<Definitions[K]> : never;
+            };
+            /**
+             * A hook that accepts a string endpoint name, and provides a callback that when called, pre-fetches the data for that endpoint.
+             */
+            usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, options?: PrefetchOptions): (arg: QueryArgFrom<Definitions[EndpointName]>, options?: PrefetchOptions) => void;
+        } & HooksWithUniqueNames<Definitions>;
+    }
+}
+type RR = typeof react_redux;
+interface ReactHooksModuleOptions {
+    /**
+     * The hooks from React Redux to be used
+     */
+    hooks?: {
+        /**
+         * The version of the `useDispatch` hook to be used
+         */
+        useDispatch: RR['useDispatch'];
+        /**
+         * The version of the `useSelector` hook to be used
+         */
+        useSelector: RR['useSelector'];
+        /**
+         * The version of the `useStore` hook to be used
+         */
+        useStore: RR['useStore'];
+    };
+    /**
+     * The version of the `batchedUpdates` function to be used
+     */
+    batch?: RR['batch'];
+    /**
+     * Enables performing asynchronous tasks immediately within a render.
+     *
+     * @example
+     *
+     * ```ts
+     * import {
+     *   buildCreateApi,
+     *   coreModule,
+     *   reactHooksModule
+     * } from '@reduxjs/toolkit/query/react'
+     *
+     * const createApi = buildCreateApi(
+     *   coreModule(),
+     *   reactHooksModule({ unstable__sideEffectsInRender: true })
+     * )
+     * ```
+     */
+    unstable__sideEffectsInRender?: boolean;
+    /**
+     * A selector creator (usually from `reselect`, or matching the same signature)
+     */
+    createSelector?: typeof createSelector;
+}
+/**
+ * Creates a module that generates react hooks from endpoints, for use with `buildCreateApi`.
+ *
+ *  @example
+ * ```ts
+ * const MyContext = React.createContext<ReactReduxContextValue | null>(null);
+ * const customCreateApi = buildCreateApi(
+ *   coreModule(),
+ *   reactHooksModule({
+ *     hooks: {
+ *       useDispatch: createDispatchHook(MyContext),
+ *       useSelector: createSelectorHook(MyContext),
+ *       useStore: createStoreHook(MyContext)
+ *     }
+ *   })
+ * );
+ * ```
+ *
+ * @returns A module for use with `buildCreateApi`
+ */
+declare const reactHooksModule: ({ batch, hooks, createSelector, unstable__sideEffectsInRender, ...rest }?: ReactHooksModuleOptions) => Module<ReactHooksModule>;
+
+/**
+ * Can be used as a `Provider` if you **do not already have a Redux store**.
+ *
+ * @example
+ * ```tsx
+ * // codeblock-meta no-transpile title="Basic usage - wrap your App with ApiProvider"
+ * import * as React from 'react';
+ * import { ApiProvider } from '@reduxjs/toolkit/query/react';
+ * import { Pokemon } from './features/Pokemon';
+ *
+ * function App() {
+ *   return (
+ *     <ApiProvider api={api}>
+ *       <Pokemon />
+ *     </ApiProvider>
+ *   );
+ * }
+ * ```
+ *
+ * @remarks
+ * Using this together with an existing redux store, both will
+ * conflict with each other - please use the traditional redux setup
+ * in that case.
+ */
+declare function ApiProvider(props: {
+    children: any;
+    api: Api<any, {}, any, any>;
+    setupListeners?: Parameters<typeof setupListeners>[1] | false;
+    context?: Context<ReactReduxContextValue | null>;
+}): React.JSX.Element;
+
+declare const createApi: _reduxjs_toolkit_query.CreateApi<typeof _reduxjs_toolkit_query.coreModuleName | typeof reactHooksModuleName>;
+
+export { ApiProvider, type TypedInfiniteQueryStateSelector, type TypedLazyInfiniteQueryTrigger, type TypedLazyQueryTrigger, type TypedMutationTrigger, type TypedQueryStateSelector, type TypedUseInfiniteQuery, type TypedUseInfiniteQueryHookResult, type TypedUseInfiniteQueryState, type TypedUseInfiniteQueryStateOptions, type TypedUseInfiniteQueryStateResult, type TypedUseInfiniteQuerySubscription, type TypedUseInfiniteQuerySubscriptionResult, type TypedUseLazyQuery, type TypedUseLazyQueryStateResult, type TypedUseLazyQuerySubscription, type TypedUseMutation, type TypedUseMutationResult, type TypedUseQuery, type TypedUseQueryHookResult, type TypedUseQueryState, type TypedUseQueryStateOptions, type TypedUseQueryStateResult, type TypedUseQuerySubscription, type TypedUseQuerySubscriptionResult, createApi, reactHooksModule };
Index: node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.browser.mjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+import{buildCreateApi as qe,coreModule as Ke}from"@reduxjs/toolkit/query";import"@reduxjs/toolkit";import{batch as be,useDispatch as Ee,useSelector as ke,useStore as Me}from"react-redux";import{createSelector as Oe}from"reselect";function q(e){return e.replace(e[0],e[0].toUpperCase())}function ie(e){return e.type==="query"}function se(e){return e.type==="mutation"}function _(e){return e.type==="infinitequery"}function L(e,...c){return Object.assign(e,...c)}import{formatProdErrorMessage as xe}from"@reduxjs/toolkit";import{defaultSerializeQueryArgs as ue,QueryStatus as me,skipToken as b}from"@reduxjs/toolkit/query";import{useCallback as F,useDebugValue as ee,useEffect as N,useLayoutEffect as Se,useMemo as A,useRef as C,useState as ye}from"react";import{shallowEqual as te}from"react-redux";var K=Symbol();import{useEffect as le,useRef as ge,useMemo as Re}from"react";function j(e,c,x,l){let h=Re(()=>({queryArgs:e,serialized:typeof e=="object"?c({queryArgs:e,endpointDefinition:x,endpointName:l}):e}),[e,c,x,l]),g=ge(h);return le(()=>{g.current.serialized!==h.serialized&&(g.current=h)},[h]),g.current.serialized===h.serialized?g.current.queryArgs:e}import{useEffect as Te,useRef as De}from"react";import{shallowEqual as ae}from"react-redux";function V(e){let c=De(e);return Te(()=>{ae(c.current,e)||(c.current=e)},[e]),ae(c.current,e)?c.current:e}var Ae=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Be=Ae(),Pe=()=>typeof navigator<"u"&&navigator.product==="ReactNative",he=Pe(),Ie=()=>Be||he?Se:N,Ue=Ie(),oe=e=>e.isUninitialized?{...e,isUninitialized:!1,isFetching:!0,isLoading:e.data===void 0,status:me.pending}:e;function ne(e,...c){let x={};return c.forEach(l=>{x[l]=e[l]}),x}var re=["data","status","isLoading","isSuccess","isError","error"];function pe({api:e,moduleOptions:{batch:c,hooks:{useDispatch:x,useSelector:l,useStore:h},unstable__sideEffectsInRender:g,createSelector:w},serializeQueryArgs:I,context:B}){let E=g?t=>t():N;return{buildQueryHooks:H,buildInfiniteQueryHooks:Y,buildMutationHook:J,usePrefetch:Z};function $(t,i,p){if(i?.endpointName&&t.isUninitialized){let{endpointName:a}=i,y=B.endpointDefinitions[a];p!==b&&I({queryArgs:i.originalArgs,endpointDefinition:y,endpointName:a})===I({queryArgs:p,endpointDefinition:y,endpointName:a})&&(i=void 0)}let u=t.isSuccess?t.data:i?.data;u===void 0&&(u=t.data);let s=u!==void 0,n=t.isLoading,r=(!i||i.isLoading||i.isUninitialized)&&!s&&n,o=t.isSuccess||s&&(n&&!i?.isError||t.isUninitialized);return{...t,data:u,currentData:t.data,isFetching:n,isLoading:r,isSuccess:o}}function G(t,i,p){if(i?.endpointName&&t.isUninitialized){let{endpointName:a}=i,y=B.endpointDefinitions[a];p!==b&&I({queryArgs:i.originalArgs,endpointDefinition:y,endpointName:a})===I({queryArgs:p,endpointDefinition:y,endpointName:a})&&(i=void 0)}let u=t.isSuccess?t.data:i?.data;u===void 0&&(u=t.data);let s=u!==void 0,n=t.isLoading,r=(!i||i.isLoading||i.isUninitialized)&&!s&&n,o=t.isSuccess||n&&s;return{...t,data:u,currentData:t.data,isFetching:n,isLoading:r,isSuccess:o}}function Z(t,i){let p=x(),u=V(i);return F((s,n)=>p(e.util.prefetch(t,s,{...u,...n})),[t,p,u])}function m(t,i,{refetchOnReconnect:p,refetchOnFocus:u,refetchOnMountOrArgChange:s,skip:n=!1,pollingInterval:r=0,skipPollingIfUnfocused:o=!1,...a}={}){let{initiate:y}=e.endpoints[t],Q=x(),S=C(void 0);if(!S.current){let O=Q(e.internalActions.internal_getRTKQSubscriptions());S.current=O}let f=j(n?b:i,ue,B.endpointDefinitions[t],t),d=V({refetchOnReconnect:p,refetchOnFocus:u,pollingInterval:r,skipPollingIfUnfocused:o}),R=a.initialPageParam,T=V(R),D=C(void 0),{queryCacheKey:U,requestId:M}=D.current||{},z=!1;U&&M&&(z=S.current.isRequestSubscribed(U,M));let X=!z&&D.current!==void 0;return E(()=>{X&&(D.current=void 0)},[X]),E(()=>{let O=D.current;if(f===b){O?.unsubscribe(),D.current=void 0;return}let de=D.current?.subscriptionOptions;if(!O||O.arg!==f){O?.unsubscribe();let ce=Q(y(f,{subscriptionOptions:d,forceRefetch:s,..._(B.endpointDefinitions[t])?{initialPageParam:T}:{}}));D.current=ce}else d!==de&&O.updateSubscriptionOptions(d)},[Q,y,s,f,d,X,T,t]),[D,Q,y,d]}function v(t,i){return(u,{skip:s=!1,selectFromResult:n}={})=>{let{select:r}=e.endpoints[t],o=j(s?b:u,I,B.endpointDefinitions[t],t),a=C(void 0),y=A(()=>w([r(o),(R,T)=>T,R=>o],i,{memoizeOptions:{resultEqualityCheck:te}}),[r,o]),Q=A(()=>n?w([y],n,{devModeChecks:{identityFunctionCheck:"never"}}):y,[y,n]),S=l(R=>Q(R,a.current),te),f=h(),d=y(f.getState(),a.current);return Ue(()=>{a.current=d},[d]),S}}function P(t){N(()=>()=>{t.current?.unsubscribe?.(),t.current=void 0},[t])}function k(t){if(!t.current)throw new Error(xe(38));return t.current.refetch()}function H(t){let i=(s,n={})=>{let[r]=m(t,s,n);return P(r),A(()=>({refetch:()=>k(r)}),[r])},p=({refetchOnReconnect:s,refetchOnFocus:n,pollingInterval:r=0,skipPollingIfUnfocused:o=!1}={})=>{let{initiate:a}=e.endpoints[t],y=x(),[Q,S]=ye(K),f=C(void 0),d=V({refetchOnReconnect:s,refetchOnFocus:n,pollingInterval:r,skipPollingIfUnfocused:o});E(()=>{let U=f.current?.subscriptionOptions;d!==U&&f.current?.updateSubscriptionOptions(d)},[d]);let R=C(d);E(()=>{R.current=d},[d]);let T=F(function(U,M=!1){let z;return c(()=>{f.current?.unsubscribe(),f.current=z=y(a(U,{subscriptionOptions:R.current,forceRefetch:!M})),S(U)}),z},[y,a]),D=F(()=>{f.current?.queryCacheKey&&y(e.internalActions.removeQueryResult({queryCacheKey:f.current?.queryCacheKey}))},[y]);return N(()=>()=>{f?.current?.unsubscribe()},[]),N(()=>{Q!==K&&!f.current&&T(Q,!0)},[Q,T]),A(()=>[T,Q,{reset:D}],[T,Q,D])},u=v(t,$);return{useQueryState:u,useQuerySubscription:i,useLazyQuerySubscription:p,useLazyQuery(s){let[n,r,{reset:o}]=p(s),a=u(r,{...s,skip:r===K}),y=A(()=>({lastArg:r}),[r]);return A(()=>[n,{...a,reset:o},y],[n,a,o,y])},useQuery(s,n){let r=i(s,n),o=u(s,{selectFromResult:s===b||n?.skip?void 0:oe,...n}),a=ne(o,...re);return ee(a),A(()=>({...o,...r}),[o,r])}}}function Y(t){let i=(u,s={})=>{let[n,r,o,a]=m(t,u,s),y=C(a);E(()=>{y.current=a},[a]);let Q=F(function(d,R){let T;return c(()=>{n.current?.unsubscribe(),n.current=T=r(o(d,{subscriptionOptions:y.current,direction:R}))}),T},[n,r,o]);P(n);let S=j(s.skip?b:u,ue,B.endpointDefinitions[t],t),f=F(()=>k(n),[n]);return A(()=>({trigger:Q,refetch:f,fetchNextPage:()=>Q(S,"forward"),fetchPreviousPage:()=>Q(S,"backward")}),[f,Q,S])},p=v(t,G);return{useInfiniteQueryState:p,useInfiniteQuerySubscription:i,useInfiniteQuery(u,s){let{refetch:n,fetchNextPage:r,fetchPreviousPage:o}=i(u,s),a=p(u,{selectFromResult:u===b||s?.skip?void 0:oe,...s}),y=ne(a,...re,"hasNextPage","hasPreviousPage");return ee(y),A(()=>({...a,fetchNextPage:r,fetchPreviousPage:o,refetch:n}),[a,r,o,n])}}}function J(t){return({selectFromResult:i,fixedCacheKey:p}={})=>{let{select:u,initiate:s}=e.endpoints[t],n=x(),[r,o]=ye();N(()=>()=>{r?.arg.fixedCacheKey||r?.reset()},[r]);let a=F(function(U){let M=n(s(U,{fixedCacheKey:p}));return o(M),M},[n,s,p]),{requestId:y}=r||{},Q=A(()=>u({fixedCacheKey:p,requestId:r?.requestId}),[p,r,u]),S=A(()=>i?w([Q],i):Q,[i,Q]),f=l(S,te),d=p==null?r?.arg.originalArgs:void 0,R=F(()=>{c(()=>{r&&o(void 0),p&&n(e.internalActions.removeMutationResult({requestId:y,fixedCacheKey:p}))})},[n,p,r,y]),T=ne(f,...re,"endpointName");ee(T);let D=A(()=>({...f,originalArgs:d,reset:R}),[f,d,R]);return A(()=>[a,D],[a,D])}}}var fe=Symbol(),Qe=({batch:e=be,hooks:c={useDispatch:Ee,useSelector:ke,useStore:Me},createSelector:x=Oe,unstable__sideEffectsInRender:l=!1,...h}={})=>({name:fe,init(g,{serializeQueryArgs:w},I){let B=g,{buildQueryHooks:E,buildInfiniteQueryHooks:$,buildMutationHook:G,usePrefetch:Z}=pe({api:g,moduleOptions:{batch:e,hooks:c,unstable__sideEffectsInRender:l,createSelector:x},serializeQueryArgs:w,context:I});return L(B,{usePrefetch:Z}),L(I,{batch:e}),{injectEndpoint(m,v){if(ie(v)){let{useQuery:P,useLazyQuery:k,useLazyQuerySubscription:H,useQueryState:Y,useQuerySubscription:J}=E(m);L(B.endpoints[m],{useQuery:P,useLazyQuery:k,useLazyQuerySubscription:H,useQueryState:Y,useQuerySubscription:J}),g[`use${q(m)}Query`]=P,g[`useLazy${q(m)}Query`]=k}if(se(v)){let P=G(m);L(B.endpoints[m],{useMutation:P}),g[`use${q(m)}Mutation`]=P}else if(_(v)){let{useInfiniteQuery:P,useInfiniteQuerySubscription:k,useInfiniteQueryState:H}=$(m);L(B.endpoints[m],{useInfiniteQuery:P,useInfiniteQuerySubscription:k,useInfiniteQueryState:H}),g[`use${q(m)}InfiniteQuery`]=P}}}}});export*from"@reduxjs/toolkit/query";import{configureStore as Fe,formatProdErrorMessage as we}from"@reduxjs/toolkit";import{useContext as ve}from"react";import{useEffect as Le}from"react";import*as W from"react";import{Provider as Ce,ReactReduxContext as Ne}from"react-redux";import{setupListeners as He}from"@reduxjs/toolkit/query";function ze(e){let c=e.context||Ne;if(ve(c))throw new Error(we(35));let[l]=W.useState(()=>Fe({reducer:{[e.api.reducerPath]:e.api.reducer},middleware:h=>h().concat(e.api.middleware)}));return Le(()=>e.setupListeners===!1?void 0:He(l.dispatch,e.setupListeners),[e.setupListeners,l.dispatch]),W.createElement(Ce,{store:l,context:c},e.children)}var It=qe(Ke(),Qe());export{ze as ApiProvider,K as UNINITIALIZED_VALUE,It as createApi,Qe as reactHooksModule,fe as reactHooksModuleName};
+//# sourceMappingURL=rtk-query-react.browser.mjs.map
Index: node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.browser.mjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../../src/query/react/index.ts","../../../src/query/react/module.ts","../../../src/query/utils/capitalize.ts","../../../src/query/endpointDefinitions.ts","../../../src/query/tsHelpers.ts","../../../src/query/react/buildHooks.ts","../../../src/query/react/constants.ts","../../../src/query/react/useSerializedStableValue.ts","../../../src/query/react/useShallowStableValue.ts","../../../src/query/react/ApiProvider.tsx"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nimport { buildCreateApi, coreModule } from '@reduxjs/toolkit/query';\nimport { reactHooksModule, reactHooksModuleName } from './module';\nexport * from '@reduxjs/toolkit/query';\nexport { ApiProvider } from './ApiProvider';\nconst createApi = /* @__PURE__ */buildCreateApi(coreModule(), reactHooksModule());\nexport type { TypedUseMutationResult, TypedUseQueryHookResult, TypedUseQueryStateResult, TypedUseQuerySubscriptionResult, TypedLazyQueryTrigger, TypedUseLazyQuery, TypedUseMutation, TypedMutationTrigger, TypedQueryStateSelector, TypedUseQueryState, TypedUseQuery, TypedUseQuerySubscription, TypedUseLazyQuerySubscription, TypedUseQueryStateOptions, TypedUseLazyQueryStateResult, TypedUseInfiniteQuery, TypedUseInfiniteQueryHookResult, TypedUseInfiniteQueryStateResult, TypedUseInfiniteQuerySubscriptionResult, TypedUseInfiniteQueryStateOptions, TypedInfiniteQueryStateSelector, TypedUseInfiniteQuerySubscription, TypedUseInfiniteQueryState, TypedLazyInfiniteQueryTrigger } from './buildHooks';\nexport { UNINITIALIZED_VALUE } from './constants';\nexport { createApi, reactHooksModule, reactHooksModuleName };","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Api, BaseQueryFn, EndpointDefinitions, InfiniteQueryDefinition, Module, MutationDefinition, PrefetchOptions, QueryArgFrom, QueryDefinition, QueryKeys } from '@reduxjs/toolkit/query';\nimport { batch as rrBatch, useDispatch as rrUseDispatch, useSelector as rrUseSelector, useStore as rrUseStore } from 'react-redux';\nimport { createSelector as _createSelector } from 'reselect';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { safeAssign } from '../tsHelpers';\nimport { capitalize, countObjectKeys } from '../utils';\nimport type { InfiniteQueryHooks, MutationHooks, QueryHooks } from './buildHooks';\nimport { buildHooks } from './buildHooks';\nimport type { HooksWithUniqueNames } from './namedHooks';\nexport const reactHooksModuleName = /* @__PURE__ */Symbol();\nexport type ReactHooksModule = typeof reactHooksModuleName;\ndeclare module '@reduxjs/toolkit/query' {\n  export interface ApiModules<\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  ReducerPath extends string,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  TagTypes extends string> {\n    [reactHooksModuleName]: {\n      /**\n       *  Endpoints based on the input endpoints provided to `createApi`, containing `select`, `hooks` and `action matchers`.\n       */\n      endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? QueryHooks<Definitions[K]> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? MutationHooks<Definitions[K]> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryHooks<Definitions[K]> : never };\n      /**\n       * A hook that accepts a string endpoint name, and provides a callback that when called, pre-fetches the data for that endpoint.\n       */\n      usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, options?: PrefetchOptions): (arg: QueryArgFrom<Definitions[EndpointName]>, options?: PrefetchOptions) => void;\n    } & HooksWithUniqueNames<Definitions>;\n  }\n}\ntype RR = typeof import('react-redux');\nexport interface ReactHooksModuleOptions {\n  /**\n   * The hooks from React Redux to be used\n   */\n  hooks?: {\n    /**\n     * The version of the `useDispatch` hook to be used\n     */\n    useDispatch: RR['useDispatch'];\n    /**\n     * The version of the `useSelector` hook to be used\n     */\n    useSelector: RR['useSelector'];\n    /**\n     * The version of the `useStore` hook to be used\n     */\n    useStore: RR['useStore'];\n  };\n  /**\n   * The version of the `batchedUpdates` function to be used\n   */\n  batch?: RR['batch'];\n  /**\n   * Enables performing asynchronous tasks immediately within a render.\n   *\n   * @example\n   *\n   * ```ts\n   * import {\n   *   buildCreateApi,\n   *   coreModule,\n   *   reactHooksModule\n   * } from '@reduxjs/toolkit/query/react'\n   *\n   * const createApi = buildCreateApi(\n   *   coreModule(),\n   *   reactHooksModule({ unstable__sideEffectsInRender: true })\n   * )\n   * ```\n   */\n  unstable__sideEffectsInRender?: boolean;\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module that generates react hooks from endpoints, for use with `buildCreateApi`.\n *\n *  @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @returns A module for use with `buildCreateApi`\n */\nexport const reactHooksModule = ({\n  batch = rrBatch,\n  hooks = {\n    useDispatch: rrUseDispatch,\n    useSelector: rrUseSelector,\n    useStore: rrUseStore\n  },\n  createSelector = _createSelector,\n  unstable__sideEffectsInRender = false,\n  ...rest\n}: ReactHooksModuleOptions = {}): Module<ReactHooksModule> => {\n  if (process.env.NODE_ENV !== 'production') {\n    const hookNames = ['useDispatch', 'useSelector', 'useStore'] as const;\n    let warned = false;\n    for (const hookName of hookNames) {\n      // warn for old hook options\n      if (countObjectKeys(rest) > 0) {\n        if ((rest as Partial<typeof hooks>)[hookName]) {\n          if (!warned) {\n            console.warn('As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:' + '\\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`');\n            warned = true;\n          }\n        }\n        // migrate\n        // @ts-ignore\n        hooks[hookName] = rest[hookName];\n      }\n      // then make sure we have them all\n      if (typeof hooks[hookName] !== 'function') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(', ')}.\\nHook ${hookName} was either not provided or not a function.`);\n      }\n    }\n  }\n  return {\n    name: reactHooksModuleName,\n    init(api, {\n      serializeQueryArgs\n    }, context) {\n      const anyApi = api as any as Api<any, Record<string, any>, any, any, ReactHooksModule>;\n      const {\n        buildQueryHooks,\n        buildInfiniteQueryHooks,\n        buildMutationHook,\n        usePrefetch\n      } = buildHooks({\n        api,\n        moduleOptions: {\n          batch,\n          hooks,\n          unstable__sideEffectsInRender,\n          createSelector\n        },\n        serializeQueryArgs,\n        context\n      });\n      safeAssign(anyApi, {\n        usePrefetch\n      });\n      safeAssign(context, {\n        batch\n      });\n      return {\n        injectEndpoint(endpointName, definition) {\n          if (isQueryDefinition(definition)) {\n            const {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            } = buildQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            });\n            (api as any)[`use${capitalize(endpointName)}Query`] = useQuery;\n            (api as any)[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery;\n          }\n          if (isMutationDefinition(definition)) {\n            const useMutation = buildMutationHook(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useMutation\n            });\n            (api as any)[`use${capitalize(endpointName)}Mutation`] = useMutation;\n          } else if (isInfiniteQueryDefinition(definition)) {\n            const {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            } = buildInfiniteQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            });\n            (api as any)[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery;\n          }\n        }\n      };\n    }\n  };\n};","export function capitalize(str: string) {\n  return str.replace(str[0], str[0].toUpperCase());\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Selector, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Api, ApiContext, ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, BaseQueryFn, CoreModule, EndpointDefinitions, InfiniteQueryActionCreatorResult, InfiniteQueryArgFrom, InfiniteQueryDefinition, InfiniteQueryResultSelectorResult, InfiniteQuerySubState, MutationActionCreatorResult, MutationDefinition, MutationResultSelectorResult, PageParamFrom, PrefetchOptions, QueryActionCreatorResult, QueryArgFrom, QueryCacheKey, QueryDefinition, QueryKeys, QueryResultSelectorResult, QuerySubState, ResultTypeFrom, RootState, SerializeQueryArgs, SkipToken, SubscriptionOptions, TSHelpersId, TSHelpersNoInfer, TSHelpersOverride } from '@reduxjs/toolkit/query';\nimport { defaultSerializeQueryArgs, QueryStatus, skipToken } from '@reduxjs/toolkit/query';\nimport type { DependencyList } from 'react';\nimport { useCallback, useDebugValue, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport type { SubscriptionSelectors } from '../core/buildMiddleware/index';\nimport type { InfiniteData, InfiniteQueryConfigOptions } from '../core/index';\nimport type { UninitializedValue } from './constants';\nimport { UNINITIALIZED_VALUE } from './constants';\nimport type { ReactHooksModuleOptions } from './module';\nimport { useStableQueryArgs } from './useSerializedStableValue';\nimport { useShallowStableValue } from './useShallowStableValue';\nimport type { InfiniteQueryDirection } from '../core/apiState';\nimport { isInfiniteQueryDefinition } from '../endpointDefinitions';\nimport type { StartInfiniteQueryActionCreator } from '../core/buildInitiate';\n\n// Copy-pasted from React-Redux\nconst canUseDOM = () => !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nconst isDOM = /* @__PURE__ */canUseDOM();\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\nconst isRunningInReactNative = () => typeof navigator !== 'undefined' && navigator.product === 'ReactNative';\nconst isReactNative = /* @__PURE__ */isRunningInReactNative();\nconst getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? useLayoutEffect : useEffect;\nexport const useIsomorphicLayoutEffect = /* @__PURE__ */getUseIsomorphicLayoutEffect();\nexport type QueryHooks<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  useQuery: UseQuery<Definition>;\n  useLazyQuery: UseLazyQuery<Definition>;\n  useQuerySubscription: UseQuerySubscription<Definition>;\n  useLazyQuerySubscription: UseLazyQuerySubscription<Definition>;\n  useQueryState: UseQueryState<Definition>;\n};\nexport type InfiniteQueryHooks<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  useInfiniteQuery: UseInfiniteQuery<Definition>;\n  useInfiniteQuerySubscription: UseInfiniteQuerySubscription<Definition>;\n  useInfiniteQueryState: UseInfiniteQueryState<Definition>;\n};\nexport type MutationHooks<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  useMutation: UseMutation<Definition>;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n * This hook combines the functionality of both [`useQueryState`](#usequerystate) and [`useQuerySubscription`](#usequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions & UseQueryStateOptions<D, R>) => UseQueryHookResult<D, R>;\nexport type TypedUseQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQueryHookResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & UseQuerySubscriptionResult<D>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuery` hook in userland code.\n */\nexport type TypedUseQueryHookResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery, R> & TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery>;\nexport type UseQuerySubscriptionOptions = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useQuery`](#usequery) or [`useQueryState`](#usequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions) => UseQuerySubscriptionResult<D>;\nexport type TypedUseQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQuerySubscriptionResult<D extends QueryDefinition<any, any, any, any>> = Pick<QueryActionCreatorResult<D>, 'refetch'>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscriptionResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryLastPromiseInfo<D extends QueryDefinition<any, any, any, any>> = {\n  lastArg: QueryArgFrom<D>;\n};\n\n/**\n * A React hook similar to [`useQuery`](#usequery), but with manual control over when the data fetching occurs.\n *\n * This hook includes the functionality of [`useLazyQuerySubscription`](#uselazyquerysubscription).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n *\n * #### Note\n *\n * When the trigger function returned from a LazyQuery is called, it always initiates a new request to the server even if there is cached data. Set `preferCacheValue`(the second argument to the function) as `true` if you want it to immediately return a cached value if one exists.\n */\nexport type UseLazyQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(options?: SubscriptionOptions & Omit<UseQueryStateOptions<D, R>, 'skip'>) => [LazyQueryTrigger<D>, UseLazyQueryStateResult<D, R>, UseLazyQueryLastPromiseInfo<D>];\nexport type TypedUseLazyQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryStateResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & {\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useLazyQuery` hook in userland code.\n */\nexport type TypedUseLazyQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseLazyQueryStateResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\nexport type LazyQueryTrigger<D extends QueryDefinition<any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, preferCacheValue?: boolean): QueryActionCreatorResult<D>;\n};\nexport type TypedLazyQueryTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = LazyQueryTrigger<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook similar to [`useQuerySubscription`](#usequerysubscription), but with manual control over when the data fetching occurs.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useLazyQuery`](#uselazyquery).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n */\nexport type UseLazyQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (options?: SubscriptionOptions) => readonly [LazyQueryTrigger<D>, QueryArgFrom<D> | UninitializedValue, {\n  reset: () => void;\n}];\nexport type TypedUseLazyQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type QueryStateSelector<R extends Record<string, any>, D extends QueryDefinition<any, any, any, any>> = (state: UseQueryStateDefaultResult<D>) => R;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryStateSelector} for use with a specific query.\n * This is useful for scenarios where you want to create a \"pre-typed\"\n * {@linkcode UseQueryStateOptions.selectFromResult | selectFromResult}\n * function.\n *\n * @example\n * <caption>#### __Create a strongly-typed `selectFromResult` selector function__</caption>\n *\n * ```tsx\n * import type { TypedQueryStateSelector } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   title: string\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * type SelectedResult = Pick<PostsApiResponse, 'posts'>\n *\n * const postsApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com/posts' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, QueryArgument>({\n *       query: (limit = 5) => `?limit=${limit}&select=title`,\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = postsApiSlice\n *\n * function PostById({ id }: { id: number }) {\n *   const { post } = useGetPostsQuery(undefined, {\n *     selectFromResult: (state) => ({\n *       post: state.data?.posts.find((post) => post.id === id),\n *     }),\n *   })\n *\n *   return <li>{post?.title}</li>\n * }\n *\n * const EMPTY_ARRAY: Post[] = []\n *\n * const typedSelectFromResult: TypedQueryStateSelector<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   SelectedResult\n * > = (state) => ({ posts: state.data?.posts ?? EMPTY_ARRAY })\n *\n * function PostsList() {\n *   const { posts } = useGetPostsQuery(undefined, {\n *     selectFromResult: typedSelectFromResult,\n *   })\n *\n *   return (\n *     <div>\n *       <ul>\n *         {posts.map((post) => (\n *           <PostById key={post.id} id={post.id} />\n *         ))}\n *       </ul>\n *     </div>\n *   )\n * }\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template SelectedResultType - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.3.0\n * @public\n */\nexport type TypedQueryStateSelector<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, SelectedResultType extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>> = QueryStateSelector<SelectedResultType, QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useQuery`](#usequery) or [`useQuerySubscription`](#usequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQueryState<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQueryStateOptions<D, R>) => UseQueryStateResult<D, R>;\nexport type TypedUseQueryState<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQueryState<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type UseQueryStateOptions<D extends QueryDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: QueryStateSelector<R, D>;\n};\n\n/**\n * Provides a way to define a \"pre-typed\" version of\n * {@linkcode UseQueryStateOptions} with specific options for a given query.\n * This is particularly useful for setting default query behaviors such as\n * refetching strategies, which can be overridden as needed.\n *\n * @example\n * <caption>#### __Create a `useQuery` hook with default options__</caption>\n *\n * ```ts\n * import type {\n *   SubscriptionOptions,\n *   TypedUseQueryStateOptions,\n * } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   name: string\n * }\n *\n * const api = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n *   tagTypes: ['Post'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<Post[], void>({\n *       query: () => 'posts',\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = api\n *\n * export const useGetPostsQueryWithDefaults = <\n *   SelectedResult extends Record<string, any>,\n * >(\n *   overrideOptions: TypedUseQueryStateOptions<\n *     Post[],\n *     void,\n *     ReturnType<typeof fetchBaseQuery>,\n *     SelectedResult\n *   > &\n *     SubscriptionOptions,\n * ) =>\n *   useGetPostsQuery(undefined, {\n *     // Insert default options here\n *\n *     refetchOnMountOrArgChange: true,\n *     refetchOnFocus: true,\n *     ...overrideOptions,\n *   })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArg - The type of the argument passed into the query.\n * @template BaseQuery - The type of the base query function being used.\n * @template SelectedResult - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.2.8\n * @public\n */\nexport type TypedUseQueryStateOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseQueryStateOptions<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseQueryStateResult<_ extends QueryDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R>;\n\n/**\n * Helper type to manually type the result\n * of the `useQueryState` hook in userland code.\n */\nexport type TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TSHelpersNoInfer<R>;\ntype UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> = QuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: ResultTypeFrom<D>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n};\ntype UseQueryStateDefaultResult<D extends QueryDefinition<any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type LazyInfiniteQueryTrigger<D extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, direction: InfiniteQueryDirection): InfiniteQueryActionCreatorResult<D>;\n};\nexport type TypedLazyInfiniteQueryTrigger<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = LazyInfiniteQueryTrigger<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  initialPageParam?: PageParamFrom<D>;\n};\nexport type TypedUseInfiniteQuerySubscription<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscription<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = Pick<InfiniteQueryActionCreatorResult<D>, 'refetch'> & {\n  trigger: LazyInfiniteQueryTrigger<D>;\n  fetchNextPage: () => InfiniteQueryActionCreatorResult<D>;\n  fetchPreviousPage: () => InfiniteQueryActionCreatorResult<D>;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseInfiniteQuerySubscriptionResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscriptionResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type InfiniteQueryStateSelector<R extends Record<string, any>, D extends InfiniteQueryDefinition<any, any, any, any, any>> = (state: UseInfiniteQueryStateDefaultResult<D>) => R;\nexport type TypedInfiniteQueryStateSelector<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = InfiniteQueryStateSelector<SelectedResult, InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.  Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n *  The `data` field will be a `{pages: Data[], pageParams: PageParam[]}` structure containing all fetched page responses and the corresponding page param values for each page. You may use this to render individual pages, combine all pages into a single infinite list, or other display logic as needed.\n *\n * This hook combines the functionality of both [`useInfiniteQueryState`](#useinfinitequerystate) and [`useInfiniteQuerySubscription`](#useinfinitequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * As with normal query hooks, `skipToken` is a valid argument that will skip the query from executing.\n *\n * By default, the initial request will use the `initialPageParam` value that was defined on the infinite query endpoint. If you want to start from a different value, you can pass `initialPageParam` as part of the hook options to override that initial request value.\n *\n * Use the returned `fetchNextPage` and `fetchPreviousPage` methods on the hook result object to trigger fetches forwards and backwards. These will always calculate the next or previous page param based on the current cached pages and the provided `getNext/PreviousPageParam` callbacks defined in the endpoint.\n *\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQuery<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D> & UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryHookResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'fetchNextPage' | 'fetchPreviousPage'>;\nexport type TypedUseInfiniteQuery<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuery<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQuerySubscription`](#useinfinitequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQueryState<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryStateResult<D, R>;\nexport type TypedUseInfiniteQueryState<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQueryState<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data. Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQueryState`](#useinfinitequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseInfiniteQuerySubscription<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D>) => UseInfiniteQuerySubscriptionResult<D>;\nexport type UseInfiniteQueryHookResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = UseInfiniteQueryStateResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'refetch'>;\nexport type TypedUseInfiniteQueryHookResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryHookResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\nexport type UseInfiniteQueryStateOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   * Note that this should always return an object (not a primitive), as RTKQ adds fields to the return value.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: InfiniteQueryStateSelector<R, D>;\n};\nexport type TypedUseInfiniteQueryStateOptions<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateOptions<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseInfiniteQueryStateResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = TSHelpersNoInfer<R>;\nexport type TypedUseInfiniteQueryStateResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\ntype UseInfiniteQueryStateBaseResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n  hasNextPage: false;\n  hasPreviousPage: false;\n  isFetchingNextPage: false;\n  isFetchingPreviousPage: false;\n};\ntype UseInfiniteQueryStateDefaultResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseInfiniteQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseInfiniteQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type MutationStateSelector<R extends Record<string, any>, D extends MutationDefinition<any, any, any, any>> = (state: MutationResultSelectorResult<D>) => R;\nexport type UseMutationStateOptions<D extends MutationDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  selectFromResult?: MutationStateSelector<R, D>;\n  fixedCacheKey?: string;\n};\nexport type UseMutationStateResult<D extends MutationDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R> & {\n  originalArgs?: QueryArgFrom<D>;\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useMutation` hook in userland code.\n */\nexport type TypedUseMutationResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = MutationResultSelectorResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseMutationStateResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\n\n/**\n * A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.\n *\n * #### Features\n *\n * - Manual control over firing a request to alter data on the server or possibly invalidate the cache\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseMutation<D extends MutationDefinition<any, any, any, any>> = <R extends Record<string, any> = MutationResultSelectorResult<D>>(options?: UseMutationStateOptions<D, R>) => readonly [MutationTrigger<D>, UseMutationStateResult<D, R>];\nexport type TypedUseMutation<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseMutation<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type MutationTrigger<D extends MutationDefinition<any, any, any, any>> = {\n  /**\n   * Triggers the mutation and returns a Promise.\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>): MutationActionCreatorResult<D>;\n};\nexport type TypedMutationTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = MutationTrigger<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * Wrapper around `defaultQueryStateSelector` to be used in `useQuery`.\n * We want the initial render to already come back with\n * `{ isUninitialized: false, isFetching: true, isLoading: true }`\n * to prevent that the library user has to do an additional check for `isUninitialized`/\n */\nconst noPendingQueryStateSelector: QueryStateSelector<any, any> = selected => {\n  if (selected.isUninitialized) {\n    return {\n      ...selected,\n      isUninitialized: false,\n      isFetching: true,\n      isLoading: selected.data !== undefined ? false : true,\n      status: QueryStatus.pending\n    } as any;\n  }\n  return selected;\n};\nfunction pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {\n  const ret: any = {};\n  keys.forEach(key => {\n    ret[key] = obj[key];\n  });\n  return ret;\n}\nconst COMMON_HOOK_DEBUG_FIELDS = ['data', 'status', 'isLoading', 'isSuccess', 'isError', 'error'] as const;\ntype GenericPrefetchThunk = (endpointName: any, arg: any, options: PrefetchOptions) => ThunkAction<void, any, any, UnknownAction>;\n\n/**\n *\n * @param opts.api - An API with defined endpoints to create hooks for\n * @param opts.moduleOptions.batch - The version of the `batchedUpdates` function to be used\n * @param opts.moduleOptions.useDispatch - The version of the `useDispatch` hook to be used\n * @param opts.moduleOptions.useSelector - The version of the `useSelector` hook to be used\n * @returns An object containing functions to generate hooks based on an endpoint\n */\nexport function buildHooks<Definitions extends EndpointDefinitions>({\n  api,\n  moduleOptions: {\n    batch,\n    hooks: {\n      useDispatch,\n      useSelector,\n      useStore\n    },\n    unstable__sideEffectsInRender,\n    createSelector\n  },\n  serializeQueryArgs,\n  context\n}: {\n  api: Api<any, Definitions, any, any, CoreModule>;\n  moduleOptions: Required<ReactHooksModuleOptions>;\n  serializeQueryArgs: SerializeQueryArgs<any>;\n  context: ApiContext<Definitions>;\n}) {\n  const usePossiblyImmediateEffect: (effect: () => void | undefined, deps?: DependencyList) => void = unstable__sideEffectsInRender ? cb => cb() : useEffect;\n  return {\n    buildQueryHooks,\n    buildInfiniteQueryHooks,\n    buildMutationHook,\n    usePrefetch\n  };\n  function queryStatePreSelector(currentState: QueryResultSelectorResult<any>, lastResult: UseQueryStateDefaultResult<any> | undefined, queryArgs: any): UseQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n\n    // isSuccess = true when data is present and we're not refetching after an error.\n    // That includes cases where the _current_ item is either actively\n    // fetching or about to fetch due to an uninitialized entry.\n    const isSuccess = currentState.isSuccess || hasData && (isFetching && !lastResult?.isError || currentState.isUninitialized);\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseQueryStateDefaultResult<any>;\n  }\n  function infiniteQueryStatePreSelector(currentState: InfiniteQueryResultSelectorResult<any>, lastResult: UseInfiniteQueryStateDefaultResult<any> | undefined, queryArgs: any): UseInfiniteQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n    // isSuccess = true when data is present\n    const isSuccess = currentState.isSuccess || isFetching && hasData;\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseInfiniteQueryStateDefaultResult<any>;\n  }\n  function usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, defaultOptions?: PrefetchOptions) {\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n    const stableDefaultOptions = useShallowStableValue(defaultOptions);\n    return useCallback((arg: any, options?: PrefetchOptions) => dispatch((api.util.prefetch as GenericPrefetchThunk)(endpointName, arg, {\n      ...stableDefaultOptions,\n      ...options\n    })), [endpointName, dispatch, stableDefaultOptions]);\n  }\n  function useQuerySubscriptionCommonImpl<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(endpointName: string, arg: unknown | SkipToken, {\n    refetchOnReconnect,\n    refetchOnFocus,\n    refetchOnMountOrArgChange,\n    skip = false,\n    pollingInterval = 0,\n    skipPollingIfUnfocused = false,\n    ...rest\n  }: UseQuerySubscriptionOptions = {}) {\n    const {\n      initiate\n    } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n\n    // TODO: Change this to `useRef<SubscriptionSelectors>(undefined)` after upgrading to React 19.\n    const subscriptionSelectorsRef = useRef<SubscriptionSelectors | undefined>(undefined);\n    if (!subscriptionSelectorsRef.current) {\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\n    You must add the middleware for RTK-Query to function correctly!`);\n        }\n      }\n      subscriptionSelectorsRef.current = returnedValue as unknown as SubscriptionSelectors;\n    }\n    const stableArg = useStableQueryArgs(skip ? skipToken : arg,\n    // Even if the user provided a per-endpoint `serializeQueryArgs` with\n    // a consistent return value, _here_ we want to use the default behavior\n    // so we can tell if _anything_ actually changed. Otherwise, we can end up\n    // with a case where the query args did change but the serialization doesn't,\n    // and then we never try to initiate a refetch.\n    defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n    const stableSubscriptionOptions = useShallowStableValue({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval,\n      skipPollingIfUnfocused\n    });\n    const initialPageParam = (rest as UseInfiniteQuerySubscriptionOptions<any>).initialPageParam;\n    const stableInitialPageParam = useShallowStableValue(initialPageParam);\n\n    /**\n     * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n     */\n    const promiseRef = useRef<T | undefined>(undefined);\n    let {\n      queryCacheKey,\n      requestId\n    } = promiseRef.current || {};\n\n    // HACK We've saved the middleware subscription lookup callbacks into a ref,\n    // so we can directly check here if the subscription exists for this query.\n    let currentRenderHasSubscription = false;\n    if (queryCacheKey && requestId) {\n      currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId);\n    }\n    const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== undefined;\n    usePossiblyImmediateEffect((): void | undefined => {\n      if (subscriptionRemoved) {\n        promiseRef.current = undefined;\n      }\n    }, [subscriptionRemoved]);\n    usePossiblyImmediateEffect((): void | undefined => {\n      const lastPromise = promiseRef.current;\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'removeMeOnCompilation') {\n        // this is only present to enforce the rule of hooks to keep `isSubscribed` in the dependency array\n        console.log(subscriptionRemoved);\n      }\n      if (stableArg === skipToken) {\n        lastPromise?.unsubscribe();\n        promiseRef.current = undefined;\n        return;\n      }\n      const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n      if (!lastPromise || lastPromise.arg !== stableArg) {\n        lastPromise?.unsubscribe();\n        const promise = dispatch(initiate(stableArg, {\n          subscriptionOptions: stableSubscriptionOptions,\n          forceRefetch: refetchOnMountOrArgChange,\n          ...(isInfiniteQueryDefinition(context.endpointDefinitions[endpointName]) ? {\n            initialPageParam: stableInitialPageParam\n          } : {})\n        }));\n        promiseRef.current = promise as T;\n      } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n        lastPromise.updateSubscriptionOptions(stableSubscriptionOptions);\n      }\n    }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, endpointName]);\n    return [promiseRef, dispatch, initiate, stableSubscriptionOptions] as const;\n  }\n  function buildUseQueryState(endpointName: string, preSelector: typeof queryStatePreSelector | typeof infiniteQueryStatePreSelector) {\n    const useQueryState = (arg: any, {\n      skip = false,\n      selectFromResult\n    }: UseQueryStateOptions<any, any> | UseInfiniteQueryStateOptions<any, any> = {}) => {\n      const {\n        select\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const stableArg = useStableQueryArgs(skip ? skipToken : arg, serializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      type ApiRootState = Parameters<ReturnType<typeof select>>[0];\n      const lastValue = useRef<any>(undefined);\n      const selectDefaultResult: Selector<ApiRootState, any, [any]> = useMemo(() =>\n      // Normally ts-ignores are bad and should be avoided, but we're\n      // already casting this selector to be `Selector<any>` anyway,\n      // so the inconsistencies don't matter here\n      // @ts-ignore\n      createSelector([\n      // @ts-ignore\n      select(stableArg), (_: ApiRootState, lastResult: any) => lastResult, (_: ApiRootState) => stableArg], preSelector, {\n        memoizeOptions: {\n          resultEqualityCheck: shallowEqual\n        }\n      }), [select, stableArg]);\n      const querySelector: Selector<ApiRootState, any, [any]> = useMemo(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, {\n        devModeChecks: {\n          identityFunctionCheck: 'never'\n        }\n      }) : selectDefaultResult, [selectDefaultResult, selectFromResult]);\n      const currentState = useSelector((state: RootState<Definitions, any, any>) => querySelector(state, lastValue.current), shallowEqual);\n      const store = useStore<RootState<Definitions, any, any>>();\n      const newLastValue = selectDefaultResult(store.getState(), lastValue.current);\n      useIsomorphicLayoutEffect(() => {\n        lastValue.current = newLastValue;\n      }, [newLastValue]);\n      return currentState;\n    };\n    return useQueryState;\n  }\n  function usePromiseRefUnsubscribeOnUnmount(promiseRef: React.RefObject<{\n    unsubscribe?: () => void;\n  } | undefined>) {\n    useEffect(() => {\n      return () => {\n        promiseRef.current?.unsubscribe?.()\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        ;\n        (promiseRef.current as any) = undefined;\n      };\n    }, [promiseRef]);\n  }\n  function refetchOrErrorIfUnmounted<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(promiseRef: React.RefObject<T | undefined>): T {\n    if (!promiseRef.current) throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(38) : 'Cannot refetch a query that has not been started yet.');\n    return promiseRef.current.refetch() as T;\n  }\n  function buildQueryHooks(endpointName: string): QueryHooks<any> {\n    const useQuerySubscription: UseQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef] = useQuerySubscriptionCommonImpl<QueryActionCreatorResult<any>>(endpointName, arg, options);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      return useMemo(() => ({\n        /**\n         * A method to manually refetch data for the query\n         */\n        refetch: () => refetchOrErrorIfUnmounted(promiseRef)\n      }), [promiseRef]);\n    };\n    const useLazyQuerySubscription: UseLazyQuerySubscription<any> = ({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval = 0,\n      skipPollingIfUnfocused = false\n    } = {}) => {\n      const {\n        initiate\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [arg, setArg] = useState<any>(UNINITIALIZED_VALUE);\n\n      // TODO: Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n       */\n      const promiseRef = useRef<QueryActionCreatorResult<any> | undefined>(undefined);\n      const stableSubscriptionOptions = useShallowStableValue({\n        refetchOnReconnect,\n        refetchOnFocus,\n        pollingInterval,\n        skipPollingIfUnfocused\n      });\n      usePossiblyImmediateEffect(() => {\n        const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n        if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n          promiseRef.current?.updateSubscriptionOptions(stableSubscriptionOptions);\n        }\n      }, [stableSubscriptionOptions]);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger = useCallback(function (arg: any, preferCacheValue = false) {\n        let promise: QueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch(initiate(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            forceRefetch: !preferCacheValue\n          }));\n          setArg(arg);\n        });\n        return promise!;\n      }, [dispatch, initiate]);\n      const reset = useCallback(() => {\n        if (promiseRef.current?.queryCacheKey) {\n          dispatch(api.internalActions.removeQueryResult({\n            queryCacheKey: promiseRef.current?.queryCacheKey as QueryCacheKey\n          }));\n        }\n      }, [dispatch]);\n\n      /* cleanup on unmount */\n      useEffect(() => {\n        return () => {\n          promiseRef?.current?.unsubscribe();\n        };\n      }, []);\n\n      /* if \"cleanup on unmount\" was triggered from a fast refresh, we want to reinstate the query */\n      useEffect(() => {\n        if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {\n          trigger(arg, true);\n        }\n      }, [arg, trigger]);\n      return useMemo(() => [trigger, arg, {\n        reset\n      }] as const, [trigger, arg, reset]);\n    };\n    const useQueryState: UseQueryState<any> = buildUseQueryState(endpointName, queryStatePreSelector);\n    return {\n      useQueryState,\n      useQuerySubscription,\n      useLazyQuerySubscription,\n      useLazyQuery(options) {\n        const [trigger, arg, {\n          reset\n        }] = useLazyQuerySubscription(options);\n        const queryStateResults = useQueryState(arg, {\n          ...options,\n          skip: arg === UNINITIALIZED_VALUE\n        });\n        const info = useMemo(() => ({\n          lastArg: arg\n        }), [arg]);\n        return useMemo(() => [trigger, {\n          ...queryStateResults,\n          reset\n        }, info], [trigger, queryStateResults, reset, info]);\n      },\n      useQuery(arg, options) {\n        const querySubscriptionResults = useQuerySubscription(arg, options);\n        const queryStateResults = useQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS);\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          ...querySubscriptionResults\n        }), [queryStateResults, querySubscriptionResults]);\n      }\n    };\n  }\n  function buildInfiniteQueryHooks(endpointName: string): InfiniteQueryHooks<any> {\n    const useInfiniteQuerySubscription: UseInfiniteQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl<InfiniteQueryActionCreatorResult<any>>(endpointName, arg, options);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger: LazyInfiniteQueryTrigger<any> = useCallback(function (arg: unknown, direction: 'forward' | 'backward') {\n        let promise: InfiniteQueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch((initiate as StartInfiniteQueryActionCreator<any>)(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            direction\n          }));\n        });\n        return promise!;\n      }, [promiseRef, dispatch, initiate]);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      const stableArg = useStableQueryArgs(options.skip ? skipToken : arg,\n      // Even if the user provided a per-endpoint `serializeQueryArgs` with\n      // a consistent return value, _here_ we want to use the default behavior\n      // so we can tell if _anything_ actually changed. Otherwise, we can end up\n      // with a case where the query args did change but the serialization doesn't,\n      // and then we never try to initiate a refetch.\n      defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      const refetch = useCallback(() => refetchOrErrorIfUnmounted(promiseRef), [promiseRef]);\n      return useMemo(() => {\n        const fetchNextPage = () => {\n          return trigger(stableArg, 'forward');\n        };\n        const fetchPreviousPage = () => {\n          return trigger(stableArg, 'backward');\n        };\n        return {\n          trigger,\n          /**\n           * A method to manually refetch data for the query\n           */\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        };\n      }, [refetch, trigger, stableArg]);\n    };\n    const useInfiniteQueryState: UseInfiniteQueryState<any> = buildUseQueryState(endpointName, infiniteQueryStatePreSelector);\n    return {\n      useInfiniteQueryState,\n      useInfiniteQuerySubscription,\n      useInfiniteQuery(arg, options) {\n        const {\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        } = useInfiniteQuerySubscription(arg, options);\n        const queryStateResults = useInfiniteQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, 'hasNextPage', 'hasPreviousPage');\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          fetchNextPage,\n          fetchPreviousPage,\n          refetch\n        }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]);\n      }\n    };\n  }\n  function buildMutationHook(name: string): UseMutation<any> {\n    return ({\n      selectFromResult,\n      fixedCacheKey\n    } = {}) => {\n      const {\n        select,\n        initiate\n      } = api.endpoints[name] as ApiEndpointMutation<MutationDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [promise, setPromise] = useState<MutationActionCreatorResult<any>>();\n      useEffect(() => () => {\n        if (!promise?.arg.fixedCacheKey) {\n          promise?.reset();\n        }\n      }, [promise]);\n      const triggerMutation = useCallback(function (arg: Parameters<typeof initiate>['0']) {\n        const promise = dispatch(initiate(arg, {\n          fixedCacheKey\n        }));\n        setPromise(promise);\n        return promise;\n      }, [dispatch, initiate, fixedCacheKey]);\n      const {\n        requestId\n      } = promise || {};\n      const selectDefaultResult = useMemo(() => select({\n        fixedCacheKey,\n        requestId: promise?.requestId\n      }), [fixedCacheKey, promise, select]);\n      const mutationSelector = useMemo((): Selector<RootState<Definitions, any, any>, any> => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]);\n      const currentState = useSelector(mutationSelector, shallowEqual);\n      const originalArgs = fixedCacheKey == null ? promise?.arg.originalArgs : undefined;\n      const reset = useCallback(() => {\n        batch(() => {\n          if (promise) {\n            setPromise(undefined);\n          }\n          if (fixedCacheKey) {\n            dispatch(api.internalActions.removeMutationResult({\n              requestId,\n              fixedCacheKey\n            }));\n          }\n        });\n      }, [dispatch, fixedCacheKey, promise, requestId]);\n      const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, 'endpointName');\n      useDebugValue(debugValue);\n      const finalState = useMemo(() => ({\n        ...currentState,\n        originalArgs,\n        reset\n      }), [currentState, originalArgs, reset]);\n      return useMemo(() => [triggerMutation, finalState] as const, [triggerMutation, finalState]);\n    };\n  }\n}","export const UNINITIALIZED_VALUE = Symbol();\nexport type UninitializedValue = typeof UNINITIALIZED_VALUE;","import { useEffect, useRef, useMemo } from 'react';\nimport type { SerializeQueryArgs } from '@reduxjs/toolkit/query';\nimport type { EndpointDefinition } from '@reduxjs/toolkit/query';\nexport function useStableQueryArgs<T>(queryArgs: T, serialize: SerializeQueryArgs<any>, endpointDefinition: EndpointDefinition<any, any, any, any>, endpointName: string) {\n  const incoming = useMemo(() => ({\n    queryArgs,\n    serialized: typeof queryArgs == 'object' ? serialize({\n      queryArgs,\n      endpointDefinition,\n      endpointName\n    }) : queryArgs\n  }), [queryArgs, serialize, endpointDefinition, endpointName]);\n  const cache = useRef(incoming);\n  useEffect(() => {\n    if (cache.current.serialized !== incoming.serialized) {\n      cache.current = incoming;\n    }\n  }, [incoming]);\n  return cache.current.serialized === incoming.serialized ? cache.current.queryArgs : queryArgs;\n}","import { useEffect, useRef } from 'react';\nimport { shallowEqual } from 'react-redux';\nexport function useShallowStableValue<T>(value: T) {\n  const cache = useRef(value);\n  useEffect(() => {\n    if (!shallowEqual(cache.current, value)) {\n      cache.current = value;\n    }\n  }, [value]);\n  return shallowEqual(cache.current, value) ? cache.current : value;\n}","import { configureStore, formatProdErrorMessage as _formatProdErrorMessage } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport { useContext } from 'react';\nimport { useEffect } from 'react';\nimport * as React from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { Provider, ReactReduxContext } from 'react-redux';\nimport { setupListeners } from '@reduxjs/toolkit/query';\nimport type { Api } from '@reduxjs/toolkit/query';\n\n/**\n * Can be used as a `Provider` if you **do not already have a Redux store**.\n *\n * @example\n * ```tsx\n * // codeblock-meta no-transpile title=\"Basic usage - wrap your App with ApiProvider\"\n * import * as React from 'react';\n * import { ApiProvider } from '@reduxjs/toolkit/query/react';\n * import { Pokemon } from './features/Pokemon';\n *\n * function App() {\n *   return (\n *     <ApiProvider api={api}>\n *       <Pokemon />\n *     </ApiProvider>\n *   );\n * }\n * ```\n *\n * @remarks\n * Using this together with an existing redux store, both will\n * conflict with each other - please use the traditional redux setup\n * in that case.\n */\nexport function ApiProvider(props: {\n  children: any;\n  api: Api<any, {}, any, any>;\n  setupListeners?: Parameters<typeof setupListeners>[1] | false;\n  context?: Context<ReactReduxContextValue | null>;\n}) {\n  const context = props.context || ReactReduxContext;\n  const existingContext = useContext(context);\n  if (existingContext) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(35) : 'Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.');\n  }\n  const [store] = React.useState(() => configureStore({\n    reducer: {\n      [props.api.reducerPath]: props.api.reducer\n    },\n    middleware: gDM => gDM().concat(props.api.middleware)\n  }));\n  // Adds the event listeners for online/offline/focus/etc\n  useEffect((): undefined | (() => void) => props.setupListeners === false ? undefined : setupListeners(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]);\n  return <Provider store={store} context={context}>\n      {props.children}\n    </Provider>;\n}"],"mappings":"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","names":["buildCreateApi","coreModule","rrBatch","rrUseDispatch","rrUseSelector","rrUseStore","_createSelector","capitalize","str","isQueryDefinition","isMutationDefinition","isInfiniteQueryDefinition","safeAssign","target","args","_formatProdErrorMessage2","defaultSerializeQueryArgs","QueryStatus","skipToken","useCallback","useDebugValue","useEffect","useLayoutEffect","useMemo","useRef","useState","shallowEqual","UNINITIALIZED_VALUE","useEffect","useRef","useMemo","useStableQueryArgs","queryArgs","serialize","endpointDefinition","endpointName","incoming","cache","useEffect","useRef","shallowEqual","useShallowStableValue","value","cache","canUseDOM","isDOM","isRunningInReactNative","isReactNative","getUseIsomorphicLayoutEffect","useLayoutEffect","useEffect","useIsomorphicLayoutEffect","noPendingQueryStateSelector","selected","QueryStatus","pick","obj","keys","ret","key","COMMON_HOOK_DEBUG_FIELDS","buildHooks","api","batch","useDispatch","useSelector","useStore","unstable__sideEffectsInRender","createSelector","serializeQueryArgs","context","usePossiblyImmediateEffect","cb","buildQueryHooks","buildInfiniteQueryHooks","buildMutationHook","usePrefetch","queryStatePreSelector","currentState","lastResult","queryArgs","endpointName","endpointDefinition","skipToken","data","hasData","isFetching","isLoading","isSuccess","infiniteQueryStatePreSelector","defaultOptions","dispatch","stableDefaultOptions","useShallowStableValue","useCallback","arg","options","useQuerySubscriptionCommonImpl","refetchOnReconnect","refetchOnFocus","refetchOnMountOrArgChange","skip","pollingInterval","skipPollingIfUnfocused","rest","initiate","subscriptionSelectorsRef","useRef","returnedValue","stableArg","useStableQueryArgs","defaultSerializeQueryArgs","stableSubscriptionOptions","initialPageParam","stableInitialPageParam","promiseRef","queryCacheKey","requestId","currentRenderHasSubscription","subscriptionRemoved","lastPromise","lastSubscriptionOptions","promise","isInfiniteQueryDefinition","buildUseQueryState","preSelector","selectFromResult","select","lastValue","selectDefaultResult","useMemo","_","shallowEqual","querySelector","state","store","newLastValue","usePromiseRefUnsubscribeOnUnmount","refetchOrErrorIfUnmounted","_formatProdErrorMessage2","useQuerySubscription","useLazyQuerySubscription","setArg","useState","UNINITIALIZED_VALUE","subscriptionOptionsRef","trigger","preferCacheValue","reset","useQueryState","queryStateResults","info","querySubscriptionResults","debugValue","useDebugValue","useInfiniteQuerySubscription","direction","refetch","useInfiniteQueryState","fetchNextPage","fetchPreviousPage","name","fixedCacheKey","setPromise","triggerMutation","mutationSelector","originalArgs","finalState","reactHooksModuleName","reactHooksModule","batch","rrBatch","hooks","rrUseDispatch","rrUseSelector","rrUseStore","createSelector","_createSelector","unstable__sideEffectsInRender","rest","api","serializeQueryArgs","context","anyApi","buildQueryHooks","buildInfiniteQueryHooks","buildMutationHook","usePrefetch","buildHooks","safeAssign","endpointName","definition","isQueryDefinition","useQuery","useLazyQuery","useLazyQuerySubscription","useQueryState","useQuerySubscription","capitalize","isMutationDefinition","useMutation","isInfiniteQueryDefinition","useInfiniteQuery","useInfiniteQuerySubscription","useInfiniteQueryState","configureStore","_formatProdErrorMessage","useContext","useEffect","React","Provider","ReactReduxContext","setupListeners","ApiProvider","props","context","store","gDM","createApi","buildCreateApi","coreModule","reactHooksModule"]}
Index: node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.legacy-esm.js
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,753 @@
+var __defProp = Object.defineProperty;
+var __defProps = Object.defineProperties;
+var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
+var __getOwnPropSymbols = Object.getOwnPropertySymbols;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __propIsEnum = Object.prototype.propertyIsEnumerable;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __spreadValues = (a, b) => {
+  for (var prop in b || (b = {}))
+    if (__hasOwnProp.call(b, prop))
+      __defNormalProp(a, prop, b[prop]);
+  if (__getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(b)) {
+      if (__propIsEnum.call(b, prop))
+        __defNormalProp(a, prop, b[prop]);
+    }
+  return a;
+};
+var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
+var __objRest = (source, exclude) => {
+  var target = {};
+  for (var prop in source)
+    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
+      target[prop] = source[prop];
+  if (source != null && __getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(source)) {
+      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
+        target[prop] = source[prop];
+    }
+  return target;
+};
+
+// src/query/react/index.ts
+import { buildCreateApi, coreModule } from "@reduxjs/toolkit/query";
+
+// src/query/react/module.ts
+import { formatProdErrorMessage as _formatProdErrorMessage3 } from "@reduxjs/toolkit";
+import { batch as rrBatch, useDispatch as rrUseDispatch, useSelector as rrUseSelector, useStore as rrUseStore } from "react-redux";
+import { createSelector as _createSelector } from "reselect";
+
+// src/query/utils/capitalize.ts
+function capitalize(str) {
+  return str.replace(str[0], str[0].toUpperCase());
+}
+
+// src/query/utils/countObjectKeys.ts
+function countObjectKeys(obj) {
+  let count = 0;
+  for (const _key in obj) {
+    count++;
+  }
+  return count;
+}
+
+// src/query/endpointDefinitions.ts
+function isQueryDefinition(e) {
+  return e.type === "query" /* query */;
+}
+function isMutationDefinition(e) {
+  return e.type === "mutation" /* mutation */;
+}
+function isInfiniteQueryDefinition(e) {
+  return e.type === "infinitequery" /* infinitequery */;
+}
+
+// src/query/tsHelpers.ts
+function safeAssign(target, ...args) {
+  return Object.assign(target, ...args);
+}
+
+// src/query/react/buildHooks.ts
+import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from "@reduxjs/toolkit";
+import { defaultSerializeQueryArgs, QueryStatus, skipToken } from "@reduxjs/toolkit/query";
+import { useCallback, useDebugValue, useEffect as useEffect3, useLayoutEffect, useMemo as useMemo2, useRef as useRef3, useState } from "react";
+import { shallowEqual as shallowEqual2 } from "react-redux";
+
+// src/query/react/constants.ts
+var UNINITIALIZED_VALUE = Symbol();
+
+// src/query/react/useSerializedStableValue.ts
+import { useEffect, useRef, useMemo } from "react";
+function useStableQueryArgs(queryArgs, serialize, endpointDefinition, endpointName) {
+  const incoming = useMemo(() => ({
+    queryArgs,
+    serialized: typeof queryArgs == "object" ? serialize({
+      queryArgs,
+      endpointDefinition,
+      endpointName
+    }) : queryArgs
+  }), [queryArgs, serialize, endpointDefinition, endpointName]);
+  const cache = useRef(incoming);
+  useEffect(() => {
+    if (cache.current.serialized !== incoming.serialized) {
+      cache.current = incoming;
+    }
+  }, [incoming]);
+  return cache.current.serialized === incoming.serialized ? cache.current.queryArgs : queryArgs;
+}
+
+// src/query/react/useShallowStableValue.ts
+import { useEffect as useEffect2, useRef as useRef2 } from "react";
+import { shallowEqual } from "react-redux";
+function useShallowStableValue(value) {
+  const cache = useRef2(value);
+  useEffect2(() => {
+    if (!shallowEqual(cache.current, value)) {
+      cache.current = value;
+    }
+  }, [value]);
+  return shallowEqual(cache.current, value) ? cache.current : value;
+}
+
+// src/query/react/buildHooks.ts
+var canUseDOM = () => !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
+var isDOM = /* @__PURE__ */ canUseDOM();
+var isRunningInReactNative = () => typeof navigator !== "undefined" && navigator.product === "ReactNative";
+var isReactNative = /* @__PURE__ */ isRunningInReactNative();
+var getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? useLayoutEffect : useEffect3;
+var useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();
+var noPendingQueryStateSelector = (selected) => {
+  if (selected.isUninitialized) {
+    return __spreadProps(__spreadValues({}, selected), {
+      isUninitialized: false,
+      isFetching: true,
+      isLoading: selected.data !== void 0 ? false : true,
+      status: QueryStatus.pending
+    });
+  }
+  return selected;
+};
+function pick(obj, ...keys) {
+  const ret = {};
+  keys.forEach((key) => {
+    ret[key] = obj[key];
+  });
+  return ret;
+}
+var COMMON_HOOK_DEBUG_FIELDS = ["data", "status", "isLoading", "isSuccess", "isError", "error"];
+function buildHooks({
+  api,
+  moduleOptions: {
+    batch,
+    hooks: {
+      useDispatch,
+      useSelector,
+      useStore
+    },
+    unstable__sideEffectsInRender,
+    createSelector
+  },
+  serializeQueryArgs,
+  context
+}) {
+  const usePossiblyImmediateEffect = unstable__sideEffectsInRender ? (cb) => cb() : useEffect3;
+  return {
+    buildQueryHooks,
+    buildInfiniteQueryHooks,
+    buildMutationHook,
+    usePrefetch
+  };
+  function queryStatePreSelector(currentState, lastResult, queryArgs) {
+    if ((lastResult == null ? void 0 : lastResult.endpointName) && currentState.isUninitialized) {
+      const {
+        endpointName
+      } = lastResult;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      if (queryArgs !== skipToken && serializeQueryArgs({
+        queryArgs: lastResult.originalArgs,
+        endpointDefinition,
+        endpointName
+      }) === serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      })) lastResult = void 0;
+    }
+    let data = currentState.isSuccess ? currentState.data : lastResult == null ? void 0 : lastResult.data;
+    if (data === void 0) data = currentState.data;
+    const hasData = data !== void 0;
+    const isFetching = currentState.isLoading;
+    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;
+    const isSuccess = currentState.isSuccess || hasData && (isFetching && !(lastResult == null ? void 0 : lastResult.isError) || currentState.isUninitialized);
+    return __spreadProps(__spreadValues({}, currentState), {
+      data,
+      currentData: currentState.data,
+      isFetching,
+      isLoading,
+      isSuccess
+    });
+  }
+  function infiniteQueryStatePreSelector(currentState, lastResult, queryArgs) {
+    if ((lastResult == null ? void 0 : lastResult.endpointName) && currentState.isUninitialized) {
+      const {
+        endpointName
+      } = lastResult;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      if (queryArgs !== skipToken && serializeQueryArgs({
+        queryArgs: lastResult.originalArgs,
+        endpointDefinition,
+        endpointName
+      }) === serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      })) lastResult = void 0;
+    }
+    let data = currentState.isSuccess ? currentState.data : lastResult == null ? void 0 : lastResult.data;
+    if (data === void 0) data = currentState.data;
+    const hasData = data !== void 0;
+    const isFetching = currentState.isLoading;
+    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;
+    const isSuccess = currentState.isSuccess || isFetching && hasData;
+    return __spreadProps(__spreadValues({}, currentState), {
+      data,
+      currentData: currentState.data,
+      isFetching,
+      isLoading,
+      isSuccess
+    });
+  }
+  function usePrefetch(endpointName, defaultOptions) {
+    const dispatch = useDispatch();
+    const stableDefaultOptions = useShallowStableValue(defaultOptions);
+    return useCallback((arg, options) => dispatch(api.util.prefetch(endpointName, arg, __spreadValues(__spreadValues({}, stableDefaultOptions), options))), [endpointName, dispatch, stableDefaultOptions]);
+  }
+  function useQuerySubscriptionCommonImpl(endpointName, arg, _a = {}) {
+    var _b = _a, {
+      refetchOnReconnect,
+      refetchOnFocus,
+      refetchOnMountOrArgChange,
+      skip = false,
+      pollingInterval = 0,
+      skipPollingIfUnfocused = false
+    } = _b, rest = __objRest(_b, [
+      "refetchOnReconnect",
+      "refetchOnFocus",
+      "refetchOnMountOrArgChange",
+      "skip",
+      "pollingInterval",
+      "skipPollingIfUnfocused"
+    ]);
+    const {
+      initiate
+    } = api.endpoints[endpointName];
+    const dispatch = useDispatch();
+    const subscriptionSelectorsRef = useRef3(void 0);
+    if (!subscriptionSelectorsRef.current) {
+      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());
+      if (process.env.NODE_ENV !== "production") {
+        if (typeof returnedValue !== "object" || typeof (returnedValue == null ? void 0 : returnedValue.type) === "string") {
+          throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store.
+    You must add the middleware for RTK-Query to function correctly!`);
+        }
+      }
+      subscriptionSelectorsRef.current = returnedValue;
+    }
+    const stableArg = useStableQueryArgs(
+      skip ? skipToken : arg,
+      // Even if the user provided a per-endpoint `serializeQueryArgs` with
+      // a consistent return value, _here_ we want to use the default behavior
+      // so we can tell if _anything_ actually changed. Otherwise, we can end up
+      // with a case where the query args did change but the serialization doesn't,
+      // and then we never try to initiate a refetch.
+      defaultSerializeQueryArgs,
+      context.endpointDefinitions[endpointName],
+      endpointName
+    );
+    const stableSubscriptionOptions = useShallowStableValue({
+      refetchOnReconnect,
+      refetchOnFocus,
+      pollingInterval,
+      skipPollingIfUnfocused
+    });
+    const initialPageParam = rest.initialPageParam;
+    const stableInitialPageParam = useShallowStableValue(initialPageParam);
+    const promiseRef = useRef3(void 0);
+    let {
+      queryCacheKey,
+      requestId
+    } = promiseRef.current || {};
+    let currentRenderHasSubscription = false;
+    if (queryCacheKey && requestId) {
+      currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId);
+    }
+    const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== void 0;
+    usePossiblyImmediateEffect(() => {
+      if (subscriptionRemoved) {
+        promiseRef.current = void 0;
+      }
+    }, [subscriptionRemoved]);
+    usePossiblyImmediateEffect(() => {
+      var _a2;
+      const lastPromise = promiseRef.current;
+      if (typeof process !== "undefined" && process.env.NODE_ENV === "removeMeOnCompilation") {
+        console.log(subscriptionRemoved);
+      }
+      if (stableArg === skipToken) {
+        lastPromise == null ? void 0 : lastPromise.unsubscribe();
+        promiseRef.current = void 0;
+        return;
+      }
+      const lastSubscriptionOptions = (_a2 = promiseRef.current) == null ? void 0 : _a2.subscriptionOptions;
+      if (!lastPromise || lastPromise.arg !== stableArg) {
+        lastPromise == null ? void 0 : lastPromise.unsubscribe();
+        const promise = dispatch(initiate(stableArg, __spreadValues({
+          subscriptionOptions: stableSubscriptionOptions,
+          forceRefetch: refetchOnMountOrArgChange
+        }, isInfiniteQueryDefinition(context.endpointDefinitions[endpointName]) ? {
+          initialPageParam: stableInitialPageParam
+        } : {})));
+        promiseRef.current = promise;
+      } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {
+        lastPromise.updateSubscriptionOptions(stableSubscriptionOptions);
+      }
+    }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, endpointName]);
+    return [promiseRef, dispatch, initiate, stableSubscriptionOptions];
+  }
+  function buildUseQueryState(endpointName, preSelector) {
+    const useQueryState = (arg, {
+      skip = false,
+      selectFromResult
+    } = {}) => {
+      const {
+        select
+      } = api.endpoints[endpointName];
+      const stableArg = useStableQueryArgs(skip ? skipToken : arg, serializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);
+      const lastValue = useRef3(void 0);
+      const selectDefaultResult = useMemo2(() => (
+        // Normally ts-ignores are bad and should be avoided, but we're
+        // already casting this selector to be `Selector<any>` anyway,
+        // so the inconsistencies don't matter here
+        // @ts-ignore
+        createSelector([
+          // @ts-ignore
+          select(stableArg),
+          (_, lastResult) => lastResult,
+          (_) => stableArg
+        ], preSelector, {
+          memoizeOptions: {
+            resultEqualityCheck: shallowEqual2
+          }
+        })
+      ), [select, stableArg]);
+      const querySelector = useMemo2(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, {
+        devModeChecks: {
+          identityFunctionCheck: "never"
+        }
+      }) : selectDefaultResult, [selectDefaultResult, selectFromResult]);
+      const currentState = useSelector((state) => querySelector(state, lastValue.current), shallowEqual2);
+      const store = useStore();
+      const newLastValue = selectDefaultResult(store.getState(), lastValue.current);
+      useIsomorphicLayoutEffect(() => {
+        lastValue.current = newLastValue;
+      }, [newLastValue]);
+      return currentState;
+    };
+    return useQueryState;
+  }
+  function usePromiseRefUnsubscribeOnUnmount(promiseRef) {
+    useEffect3(() => {
+      return () => {
+        var _a, _b;
+        (_b = (_a = promiseRef.current) == null ? void 0 : _a.unsubscribe) == null ? void 0 : _b.call(_a);
+        promiseRef.current = void 0;
+      };
+    }, [promiseRef]);
+  }
+  function refetchOrErrorIfUnmounted(promiseRef) {
+    if (!promiseRef.current) throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage2(38) : "Cannot refetch a query that has not been started yet.");
+    return promiseRef.current.refetch();
+  }
+  function buildQueryHooks(endpointName) {
+    const useQuerySubscription = (arg, options = {}) => {
+      const [promiseRef] = useQuerySubscriptionCommonImpl(endpointName, arg, options);
+      usePromiseRefUnsubscribeOnUnmount(promiseRef);
+      return useMemo2(() => ({
+        /**
+         * A method to manually refetch data for the query
+         */
+        refetch: () => refetchOrErrorIfUnmounted(promiseRef)
+      }), [promiseRef]);
+    };
+    const useLazyQuerySubscription = ({
+      refetchOnReconnect,
+      refetchOnFocus,
+      pollingInterval = 0,
+      skipPollingIfUnfocused = false
+    } = {}) => {
+      const {
+        initiate
+      } = api.endpoints[endpointName];
+      const dispatch = useDispatch();
+      const [arg, setArg] = useState(UNINITIALIZED_VALUE);
+      const promiseRef = useRef3(void 0);
+      const stableSubscriptionOptions = useShallowStableValue({
+        refetchOnReconnect,
+        refetchOnFocus,
+        pollingInterval,
+        skipPollingIfUnfocused
+      });
+      usePossiblyImmediateEffect(() => {
+        var _a, _b;
+        const lastSubscriptionOptions = (_a = promiseRef.current) == null ? void 0 : _a.subscriptionOptions;
+        if (stableSubscriptionOptions !== lastSubscriptionOptions) {
+          (_b = promiseRef.current) == null ? void 0 : _b.updateSubscriptionOptions(stableSubscriptionOptions);
+        }
+      }, [stableSubscriptionOptions]);
+      const subscriptionOptionsRef = useRef3(stableSubscriptionOptions);
+      usePossiblyImmediateEffect(() => {
+        subscriptionOptionsRef.current = stableSubscriptionOptions;
+      }, [stableSubscriptionOptions]);
+      const trigger = useCallback(function(arg2, preferCacheValue = false) {
+        let promise;
+        batch(() => {
+          var _a;
+          (_a = promiseRef.current) == null ? void 0 : _a.unsubscribe();
+          promiseRef.current = promise = dispatch(initiate(arg2, {
+            subscriptionOptions: subscriptionOptionsRef.current,
+            forceRefetch: !preferCacheValue
+          }));
+          setArg(arg2);
+        });
+        return promise;
+      }, [dispatch, initiate]);
+      const reset = useCallback(() => {
+        var _a, _b;
+        if ((_a = promiseRef.current) == null ? void 0 : _a.queryCacheKey) {
+          dispatch(api.internalActions.removeQueryResult({
+            queryCacheKey: (_b = promiseRef.current) == null ? void 0 : _b.queryCacheKey
+          }));
+        }
+      }, [dispatch]);
+      useEffect3(() => {
+        return () => {
+          var _a;
+          (_a = promiseRef == null ? void 0 : promiseRef.current) == null ? void 0 : _a.unsubscribe();
+        };
+      }, []);
+      useEffect3(() => {
+        if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {
+          trigger(arg, true);
+        }
+      }, [arg, trigger]);
+      return useMemo2(() => [trigger, arg, {
+        reset
+      }], [trigger, arg, reset]);
+    };
+    const useQueryState = buildUseQueryState(endpointName, queryStatePreSelector);
+    return {
+      useQueryState,
+      useQuerySubscription,
+      useLazyQuerySubscription,
+      useLazyQuery(options) {
+        const [trigger, arg, {
+          reset
+        }] = useLazyQuerySubscription(options);
+        const queryStateResults = useQueryState(arg, __spreadProps(__spreadValues({}, options), {
+          skip: arg === UNINITIALIZED_VALUE
+        }));
+        const info = useMemo2(() => ({
+          lastArg: arg
+        }), [arg]);
+        return useMemo2(() => [trigger, __spreadProps(__spreadValues({}, queryStateResults), {
+          reset
+        }), info], [trigger, queryStateResults, reset, info]);
+      },
+      useQuery(arg, options) {
+        const querySubscriptionResults = useQuerySubscription(arg, options);
+        const queryStateResults = useQueryState(arg, __spreadValues({
+          selectFromResult: arg === skipToken || (options == null ? void 0 : options.skip) ? void 0 : noPendingQueryStateSelector
+        }, options));
+        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS);
+        useDebugValue(debugValue);
+        return useMemo2(() => __spreadValues(__spreadValues({}, queryStateResults), querySubscriptionResults), [queryStateResults, querySubscriptionResults]);
+      }
+    };
+  }
+  function buildInfiniteQueryHooks(endpointName) {
+    const useInfiniteQuerySubscription = (arg, options = {}) => {
+      const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl(endpointName, arg, options);
+      const subscriptionOptionsRef = useRef3(stableSubscriptionOptions);
+      usePossiblyImmediateEffect(() => {
+        subscriptionOptionsRef.current = stableSubscriptionOptions;
+      }, [stableSubscriptionOptions]);
+      const trigger = useCallback(function(arg2, direction) {
+        let promise;
+        batch(() => {
+          var _a;
+          (_a = promiseRef.current) == null ? void 0 : _a.unsubscribe();
+          promiseRef.current = promise = dispatch(initiate(arg2, {
+            subscriptionOptions: subscriptionOptionsRef.current,
+            direction
+          }));
+        });
+        return promise;
+      }, [promiseRef, dispatch, initiate]);
+      usePromiseRefUnsubscribeOnUnmount(promiseRef);
+      const stableArg = useStableQueryArgs(
+        options.skip ? skipToken : arg,
+        // Even if the user provided a per-endpoint `serializeQueryArgs` with
+        // a consistent return value, _here_ we want to use the default behavior
+        // so we can tell if _anything_ actually changed. Otherwise, we can end up
+        // with a case where the query args did change but the serialization doesn't,
+        // and then we never try to initiate a refetch.
+        defaultSerializeQueryArgs,
+        context.endpointDefinitions[endpointName],
+        endpointName
+      );
+      const refetch = useCallback(() => refetchOrErrorIfUnmounted(promiseRef), [promiseRef]);
+      return useMemo2(() => {
+        const fetchNextPage = () => {
+          return trigger(stableArg, "forward");
+        };
+        const fetchPreviousPage = () => {
+          return trigger(stableArg, "backward");
+        };
+        return {
+          trigger,
+          /**
+           * A method to manually refetch data for the query
+           */
+          refetch,
+          fetchNextPage,
+          fetchPreviousPage
+        };
+      }, [refetch, trigger, stableArg]);
+    };
+    const useInfiniteQueryState = buildUseQueryState(endpointName, infiniteQueryStatePreSelector);
+    return {
+      useInfiniteQueryState,
+      useInfiniteQuerySubscription,
+      useInfiniteQuery(arg, options) {
+        const {
+          refetch,
+          fetchNextPage,
+          fetchPreviousPage
+        } = useInfiniteQuerySubscription(arg, options);
+        const queryStateResults = useInfiniteQueryState(arg, __spreadValues({
+          selectFromResult: arg === skipToken || (options == null ? void 0 : options.skip) ? void 0 : noPendingQueryStateSelector
+        }, options));
+        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, "hasNextPage", "hasPreviousPage");
+        useDebugValue(debugValue);
+        return useMemo2(() => __spreadProps(__spreadValues({}, queryStateResults), {
+          fetchNextPage,
+          fetchPreviousPage,
+          refetch
+        }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]);
+      }
+    };
+  }
+  function buildMutationHook(name) {
+    return ({
+      selectFromResult,
+      fixedCacheKey
+    } = {}) => {
+      const {
+        select,
+        initiate
+      } = api.endpoints[name];
+      const dispatch = useDispatch();
+      const [promise, setPromise] = useState();
+      useEffect3(() => () => {
+        if (!(promise == null ? void 0 : promise.arg.fixedCacheKey)) {
+          promise == null ? void 0 : promise.reset();
+        }
+      }, [promise]);
+      const triggerMutation = useCallback(function(arg) {
+        const promise2 = dispatch(initiate(arg, {
+          fixedCacheKey
+        }));
+        setPromise(promise2);
+        return promise2;
+      }, [dispatch, initiate, fixedCacheKey]);
+      const {
+        requestId
+      } = promise || {};
+      const selectDefaultResult = useMemo2(() => select({
+        fixedCacheKey,
+        requestId: promise == null ? void 0 : promise.requestId
+      }), [fixedCacheKey, promise, select]);
+      const mutationSelector = useMemo2(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]);
+      const currentState = useSelector(mutationSelector, shallowEqual2);
+      const originalArgs = fixedCacheKey == null ? promise == null ? void 0 : promise.arg.originalArgs : void 0;
+      const reset = useCallback(() => {
+        batch(() => {
+          if (promise) {
+            setPromise(void 0);
+          }
+          if (fixedCacheKey) {
+            dispatch(api.internalActions.removeMutationResult({
+              requestId,
+              fixedCacheKey
+            }));
+          }
+        });
+      }, [dispatch, fixedCacheKey, promise, requestId]);
+      const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, "endpointName");
+      useDebugValue(debugValue);
+      const finalState = useMemo2(() => __spreadProps(__spreadValues({}, currentState), {
+        originalArgs,
+        reset
+      }), [currentState, originalArgs, reset]);
+      return useMemo2(() => [triggerMutation, finalState], [triggerMutation, finalState]);
+    };
+  }
+}
+
+// src/query/react/module.ts
+var reactHooksModuleName = /* @__PURE__ */ Symbol();
+var reactHooksModule = (_a = {}) => {
+  var _b = _a, {
+    batch = rrBatch,
+    hooks = {
+      useDispatch: rrUseDispatch,
+      useSelector: rrUseSelector,
+      useStore: rrUseStore
+    },
+    createSelector = _createSelector,
+    unstable__sideEffectsInRender = false
+  } = _b, rest = __objRest(_b, [
+    "batch",
+    "hooks",
+    "createSelector",
+    "unstable__sideEffectsInRender"
+  ]);
+  if (process.env.NODE_ENV !== "production") {
+    const hookNames = ["useDispatch", "useSelector", "useStore"];
+    let warned = false;
+    for (const hookName of hookNames) {
+      if (countObjectKeys(rest) > 0) {
+        if (rest[hookName]) {
+          if (!warned) {
+            console.warn("As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`");
+            warned = true;
+          }
+        }
+        hooks[hookName] = rest[hookName];
+      }
+      if (typeof hooks[hookName] !== "function") {
+        throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage3(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(", ")}.
+Hook ${hookName} was either not provided or not a function.`);
+      }
+    }
+  }
+  return {
+    name: reactHooksModuleName,
+    init(api, {
+      serializeQueryArgs
+    }, context) {
+      const anyApi = api;
+      const {
+        buildQueryHooks,
+        buildInfiniteQueryHooks,
+        buildMutationHook,
+        usePrefetch
+      } = buildHooks({
+        api,
+        moduleOptions: {
+          batch,
+          hooks,
+          unstable__sideEffectsInRender,
+          createSelector
+        },
+        serializeQueryArgs,
+        context
+      });
+      safeAssign(anyApi, {
+        usePrefetch
+      });
+      safeAssign(context, {
+        batch
+      });
+      return {
+        injectEndpoint(endpointName, definition) {
+          if (isQueryDefinition(definition)) {
+            const {
+              useQuery,
+              useLazyQuery,
+              useLazyQuerySubscription,
+              useQueryState,
+              useQuerySubscription
+            } = buildQueryHooks(endpointName);
+            safeAssign(anyApi.endpoints[endpointName], {
+              useQuery,
+              useLazyQuery,
+              useLazyQuerySubscription,
+              useQueryState,
+              useQuerySubscription
+            });
+            api[`use${capitalize(endpointName)}Query`] = useQuery;
+            api[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery;
+          }
+          if (isMutationDefinition(definition)) {
+            const useMutation = buildMutationHook(endpointName);
+            safeAssign(anyApi.endpoints[endpointName], {
+              useMutation
+            });
+            api[`use${capitalize(endpointName)}Mutation`] = useMutation;
+          } else if (isInfiniteQueryDefinition(definition)) {
+            const {
+              useInfiniteQuery,
+              useInfiniteQuerySubscription,
+              useInfiniteQueryState
+            } = buildInfiniteQueryHooks(endpointName);
+            safeAssign(anyApi.endpoints[endpointName], {
+              useInfiniteQuery,
+              useInfiniteQuerySubscription,
+              useInfiniteQueryState
+            });
+            api[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery;
+          }
+        }
+      };
+    }
+  };
+};
+
+// src/query/react/index.ts
+export * from "@reduxjs/toolkit/query";
+
+// src/query/react/ApiProvider.tsx
+import { configureStore, formatProdErrorMessage as _formatProdErrorMessage4 } from "@reduxjs/toolkit";
+import { useContext } from "react";
+import { useEffect as useEffect4 } from "react";
+import * as React from "react";
+import { Provider, ReactReduxContext } from "react-redux";
+import { setupListeners } from "@reduxjs/toolkit/query";
+function ApiProvider(props) {
+  const context = props.context || ReactReduxContext;
+  const existingContext = useContext(context);
+  if (existingContext) {
+    throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage4(35) : "Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.");
+  }
+  const [store] = React.useState(() => configureStore({
+    reducer: {
+      [props.api.reducerPath]: props.api.reducer
+    },
+    middleware: (gDM) => gDM().concat(props.api.middleware)
+  }));
+  useEffect4(() => props.setupListeners === false ? void 0 : setupListeners(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]);
+  return /* @__PURE__ */ React.createElement(Provider, { store, context }, props.children);
+}
+
+// src/query/react/index.ts
+var createApi = /* @__PURE__ */ buildCreateApi(coreModule(), reactHooksModule());
+export {
+  ApiProvider,
+  UNINITIALIZED_VALUE,
+  createApi,
+  reactHooksModule,
+  reactHooksModuleName
+};
+//# sourceMappingURL=rtk-query-react.legacy-esm.js.map
Index: node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.legacy-esm.js.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../../src/query/react/index.ts","../../../src/query/react/module.ts","../../../src/query/utils/capitalize.ts","../../../src/query/utils/countObjectKeys.ts","../../../src/query/endpointDefinitions.ts","../../../src/query/tsHelpers.ts","../../../src/query/react/buildHooks.ts","../../../src/query/react/constants.ts","../../../src/query/react/useSerializedStableValue.ts","../../../src/query/react/useShallowStableValue.ts","../../../src/query/react/ApiProvider.tsx"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nimport { buildCreateApi, coreModule } from '@reduxjs/toolkit/query';\nimport { reactHooksModule, reactHooksModuleName } from './module';\nexport * from '@reduxjs/toolkit/query';\nexport { ApiProvider } from './ApiProvider';\nconst createApi = /* @__PURE__ */buildCreateApi(coreModule(), reactHooksModule());\nexport type { TypedUseMutationResult, TypedUseQueryHookResult, TypedUseQueryStateResult, TypedUseQuerySubscriptionResult, TypedLazyQueryTrigger, TypedUseLazyQuery, TypedUseMutation, TypedMutationTrigger, TypedQueryStateSelector, TypedUseQueryState, TypedUseQuery, TypedUseQuerySubscription, TypedUseLazyQuerySubscription, TypedUseQueryStateOptions, TypedUseLazyQueryStateResult, TypedUseInfiniteQuery, TypedUseInfiniteQueryHookResult, TypedUseInfiniteQueryStateResult, TypedUseInfiniteQuerySubscriptionResult, TypedUseInfiniteQueryStateOptions, TypedInfiniteQueryStateSelector, TypedUseInfiniteQuerySubscription, TypedUseInfiniteQueryState, TypedLazyInfiniteQueryTrigger } from './buildHooks';\nexport { UNINITIALIZED_VALUE } from './constants';\nexport { createApi, reactHooksModule, reactHooksModuleName };","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Api, BaseQueryFn, EndpointDefinitions, InfiniteQueryDefinition, Module, MutationDefinition, PrefetchOptions, QueryArgFrom, QueryDefinition, QueryKeys } from '@reduxjs/toolkit/query';\nimport { batch as rrBatch, useDispatch as rrUseDispatch, useSelector as rrUseSelector, useStore as rrUseStore } from 'react-redux';\nimport { createSelector as _createSelector } from 'reselect';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { safeAssign } from '../tsHelpers';\nimport { capitalize, countObjectKeys } from '../utils';\nimport type { InfiniteQueryHooks, MutationHooks, QueryHooks } from './buildHooks';\nimport { buildHooks } from './buildHooks';\nimport type { HooksWithUniqueNames } from './namedHooks';\nexport const reactHooksModuleName = /* @__PURE__ */Symbol();\nexport type ReactHooksModule = typeof reactHooksModuleName;\ndeclare module '@reduxjs/toolkit/query' {\n  export interface ApiModules<\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  ReducerPath extends string,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  TagTypes extends string> {\n    [reactHooksModuleName]: {\n      /**\n       *  Endpoints based on the input endpoints provided to `createApi`, containing `select`, `hooks` and `action matchers`.\n       */\n      endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? QueryHooks<Definitions[K]> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? MutationHooks<Definitions[K]> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryHooks<Definitions[K]> : never };\n      /**\n       * A hook that accepts a string endpoint name, and provides a callback that when called, pre-fetches the data for that endpoint.\n       */\n      usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, options?: PrefetchOptions): (arg: QueryArgFrom<Definitions[EndpointName]>, options?: PrefetchOptions) => void;\n    } & HooksWithUniqueNames<Definitions>;\n  }\n}\ntype RR = typeof import('react-redux');\nexport interface ReactHooksModuleOptions {\n  /**\n   * The hooks from React Redux to be used\n   */\n  hooks?: {\n    /**\n     * The version of the `useDispatch` hook to be used\n     */\n    useDispatch: RR['useDispatch'];\n    /**\n     * The version of the `useSelector` hook to be used\n     */\n    useSelector: RR['useSelector'];\n    /**\n     * The version of the `useStore` hook to be used\n     */\n    useStore: RR['useStore'];\n  };\n  /**\n   * The version of the `batchedUpdates` function to be used\n   */\n  batch?: RR['batch'];\n  /**\n   * Enables performing asynchronous tasks immediately within a render.\n   *\n   * @example\n   *\n   * ```ts\n   * import {\n   *   buildCreateApi,\n   *   coreModule,\n   *   reactHooksModule\n   * } from '@reduxjs/toolkit/query/react'\n   *\n   * const createApi = buildCreateApi(\n   *   coreModule(),\n   *   reactHooksModule({ unstable__sideEffectsInRender: true })\n   * )\n   * ```\n   */\n  unstable__sideEffectsInRender?: boolean;\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module that generates react hooks from endpoints, for use with `buildCreateApi`.\n *\n *  @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @returns A module for use with `buildCreateApi`\n */\nexport const reactHooksModule = ({\n  batch = rrBatch,\n  hooks = {\n    useDispatch: rrUseDispatch,\n    useSelector: rrUseSelector,\n    useStore: rrUseStore\n  },\n  createSelector = _createSelector,\n  unstable__sideEffectsInRender = false,\n  ...rest\n}: ReactHooksModuleOptions = {}): Module<ReactHooksModule> => {\n  if (process.env.NODE_ENV !== 'production') {\n    const hookNames = ['useDispatch', 'useSelector', 'useStore'] as const;\n    let warned = false;\n    for (const hookName of hookNames) {\n      // warn for old hook options\n      if (countObjectKeys(rest) > 0) {\n        if ((rest as Partial<typeof hooks>)[hookName]) {\n          if (!warned) {\n            console.warn('As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:' + '\\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`');\n            warned = true;\n          }\n        }\n        // migrate\n        // @ts-ignore\n        hooks[hookName] = rest[hookName];\n      }\n      // then make sure we have them all\n      if (typeof hooks[hookName] !== 'function') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(', ')}.\\nHook ${hookName} was either not provided or not a function.`);\n      }\n    }\n  }\n  return {\n    name: reactHooksModuleName,\n    init(api, {\n      serializeQueryArgs\n    }, context) {\n      const anyApi = api as any as Api<any, Record<string, any>, any, any, ReactHooksModule>;\n      const {\n        buildQueryHooks,\n        buildInfiniteQueryHooks,\n        buildMutationHook,\n        usePrefetch\n      } = buildHooks({\n        api,\n        moduleOptions: {\n          batch,\n          hooks,\n          unstable__sideEffectsInRender,\n          createSelector\n        },\n        serializeQueryArgs,\n        context\n      });\n      safeAssign(anyApi, {\n        usePrefetch\n      });\n      safeAssign(context, {\n        batch\n      });\n      return {\n        injectEndpoint(endpointName, definition) {\n          if (isQueryDefinition(definition)) {\n            const {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            } = buildQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            });\n            (api as any)[`use${capitalize(endpointName)}Query`] = useQuery;\n            (api as any)[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery;\n          }\n          if (isMutationDefinition(definition)) {\n            const useMutation = buildMutationHook(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useMutation\n            });\n            (api as any)[`use${capitalize(endpointName)}Mutation`] = useMutation;\n          } else if (isInfiniteQueryDefinition(definition)) {\n            const {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            } = buildInfiniteQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            });\n            (api as any)[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery;\n          }\n        }\n      };\n    }\n  };\n};","export function capitalize(str: string) {\n  return str.replace(str[0], str[0].toUpperCase());\n}","// Fast method for counting an object's keys\n// without resorting to `Object.keys(obj).length\n// Will this make a big difference in perf? Probably not\n// But we can save a few allocations.\n\nexport function countObjectKeys(obj: Record<any, any>) {\n  let count = 0;\n  for (const _key in obj) {\n    count++;\n  }\n  return count;\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Selector, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Api, ApiContext, ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, BaseQueryFn, CoreModule, EndpointDefinitions, InfiniteQueryActionCreatorResult, InfiniteQueryArgFrom, InfiniteQueryDefinition, InfiniteQueryResultSelectorResult, InfiniteQuerySubState, MutationActionCreatorResult, MutationDefinition, MutationResultSelectorResult, PageParamFrom, PrefetchOptions, QueryActionCreatorResult, QueryArgFrom, QueryCacheKey, QueryDefinition, QueryKeys, QueryResultSelectorResult, QuerySubState, ResultTypeFrom, RootState, SerializeQueryArgs, SkipToken, SubscriptionOptions, TSHelpersId, TSHelpersNoInfer, TSHelpersOverride } from '@reduxjs/toolkit/query';\nimport { defaultSerializeQueryArgs, QueryStatus, skipToken } from '@reduxjs/toolkit/query';\nimport type { DependencyList } from 'react';\nimport { useCallback, useDebugValue, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport type { SubscriptionSelectors } from '../core/buildMiddleware/index';\nimport type { InfiniteData, InfiniteQueryConfigOptions } from '../core/index';\nimport type { UninitializedValue } from './constants';\nimport { UNINITIALIZED_VALUE } from './constants';\nimport type { ReactHooksModuleOptions } from './module';\nimport { useStableQueryArgs } from './useSerializedStableValue';\nimport { useShallowStableValue } from './useShallowStableValue';\nimport type { InfiniteQueryDirection } from '../core/apiState';\nimport { isInfiniteQueryDefinition } from '../endpointDefinitions';\nimport type { StartInfiniteQueryActionCreator } from '../core/buildInitiate';\n\n// Copy-pasted from React-Redux\nconst canUseDOM = () => !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nconst isDOM = /* @__PURE__ */canUseDOM();\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\nconst isRunningInReactNative = () => typeof navigator !== 'undefined' && navigator.product === 'ReactNative';\nconst isReactNative = /* @__PURE__ */isRunningInReactNative();\nconst getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? useLayoutEffect : useEffect;\nexport const useIsomorphicLayoutEffect = /* @__PURE__ */getUseIsomorphicLayoutEffect();\nexport type QueryHooks<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  useQuery: UseQuery<Definition>;\n  useLazyQuery: UseLazyQuery<Definition>;\n  useQuerySubscription: UseQuerySubscription<Definition>;\n  useLazyQuerySubscription: UseLazyQuerySubscription<Definition>;\n  useQueryState: UseQueryState<Definition>;\n};\nexport type InfiniteQueryHooks<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  useInfiniteQuery: UseInfiniteQuery<Definition>;\n  useInfiniteQuerySubscription: UseInfiniteQuerySubscription<Definition>;\n  useInfiniteQueryState: UseInfiniteQueryState<Definition>;\n};\nexport type MutationHooks<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  useMutation: UseMutation<Definition>;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n * This hook combines the functionality of both [`useQueryState`](#usequerystate) and [`useQuerySubscription`](#usequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions & UseQueryStateOptions<D, R>) => UseQueryHookResult<D, R>;\nexport type TypedUseQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQueryHookResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & UseQuerySubscriptionResult<D>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuery` hook in userland code.\n */\nexport type TypedUseQueryHookResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery, R> & TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery>;\nexport type UseQuerySubscriptionOptions = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useQuery`](#usequery) or [`useQueryState`](#usequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions) => UseQuerySubscriptionResult<D>;\nexport type TypedUseQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQuerySubscriptionResult<D extends QueryDefinition<any, any, any, any>> = Pick<QueryActionCreatorResult<D>, 'refetch'>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscriptionResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryLastPromiseInfo<D extends QueryDefinition<any, any, any, any>> = {\n  lastArg: QueryArgFrom<D>;\n};\n\n/**\n * A React hook similar to [`useQuery`](#usequery), but with manual control over when the data fetching occurs.\n *\n * This hook includes the functionality of [`useLazyQuerySubscription`](#uselazyquerysubscription).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n *\n * #### Note\n *\n * When the trigger function returned from a LazyQuery is called, it always initiates a new request to the server even if there is cached data. Set `preferCacheValue`(the second argument to the function) as `true` if you want it to immediately return a cached value if one exists.\n */\nexport type UseLazyQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(options?: SubscriptionOptions & Omit<UseQueryStateOptions<D, R>, 'skip'>) => [LazyQueryTrigger<D>, UseLazyQueryStateResult<D, R>, UseLazyQueryLastPromiseInfo<D>];\nexport type TypedUseLazyQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryStateResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & {\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useLazyQuery` hook in userland code.\n */\nexport type TypedUseLazyQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseLazyQueryStateResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\nexport type LazyQueryTrigger<D extends QueryDefinition<any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, preferCacheValue?: boolean): QueryActionCreatorResult<D>;\n};\nexport type TypedLazyQueryTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = LazyQueryTrigger<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook similar to [`useQuerySubscription`](#usequerysubscription), but with manual control over when the data fetching occurs.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useLazyQuery`](#uselazyquery).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n */\nexport type UseLazyQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (options?: SubscriptionOptions) => readonly [LazyQueryTrigger<D>, QueryArgFrom<D> | UninitializedValue, {\n  reset: () => void;\n}];\nexport type TypedUseLazyQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type QueryStateSelector<R extends Record<string, any>, D extends QueryDefinition<any, any, any, any>> = (state: UseQueryStateDefaultResult<D>) => R;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryStateSelector} for use with a specific query.\n * This is useful for scenarios where you want to create a \"pre-typed\"\n * {@linkcode UseQueryStateOptions.selectFromResult | selectFromResult}\n * function.\n *\n * @example\n * <caption>#### __Create a strongly-typed `selectFromResult` selector function__</caption>\n *\n * ```tsx\n * import type { TypedQueryStateSelector } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   title: string\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * type SelectedResult = Pick<PostsApiResponse, 'posts'>\n *\n * const postsApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com/posts' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, QueryArgument>({\n *       query: (limit = 5) => `?limit=${limit}&select=title`,\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = postsApiSlice\n *\n * function PostById({ id }: { id: number }) {\n *   const { post } = useGetPostsQuery(undefined, {\n *     selectFromResult: (state) => ({\n *       post: state.data?.posts.find((post) => post.id === id),\n *     }),\n *   })\n *\n *   return <li>{post?.title}</li>\n * }\n *\n * const EMPTY_ARRAY: Post[] = []\n *\n * const typedSelectFromResult: TypedQueryStateSelector<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   SelectedResult\n * > = (state) => ({ posts: state.data?.posts ?? EMPTY_ARRAY })\n *\n * function PostsList() {\n *   const { posts } = useGetPostsQuery(undefined, {\n *     selectFromResult: typedSelectFromResult,\n *   })\n *\n *   return (\n *     <div>\n *       <ul>\n *         {posts.map((post) => (\n *           <PostById key={post.id} id={post.id} />\n *         ))}\n *       </ul>\n *     </div>\n *   )\n * }\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template SelectedResultType - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.3.0\n * @public\n */\nexport type TypedQueryStateSelector<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, SelectedResultType extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>> = QueryStateSelector<SelectedResultType, QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useQuery`](#usequery) or [`useQuerySubscription`](#usequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQueryState<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQueryStateOptions<D, R>) => UseQueryStateResult<D, R>;\nexport type TypedUseQueryState<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQueryState<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type UseQueryStateOptions<D extends QueryDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: QueryStateSelector<R, D>;\n};\n\n/**\n * Provides a way to define a \"pre-typed\" version of\n * {@linkcode UseQueryStateOptions} with specific options for a given query.\n * This is particularly useful for setting default query behaviors such as\n * refetching strategies, which can be overridden as needed.\n *\n * @example\n * <caption>#### __Create a `useQuery` hook with default options__</caption>\n *\n * ```ts\n * import type {\n *   SubscriptionOptions,\n *   TypedUseQueryStateOptions,\n * } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   name: string\n * }\n *\n * const api = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n *   tagTypes: ['Post'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<Post[], void>({\n *       query: () => 'posts',\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = api\n *\n * export const useGetPostsQueryWithDefaults = <\n *   SelectedResult extends Record<string, any>,\n * >(\n *   overrideOptions: TypedUseQueryStateOptions<\n *     Post[],\n *     void,\n *     ReturnType<typeof fetchBaseQuery>,\n *     SelectedResult\n *   > &\n *     SubscriptionOptions,\n * ) =>\n *   useGetPostsQuery(undefined, {\n *     // Insert default options here\n *\n *     refetchOnMountOrArgChange: true,\n *     refetchOnFocus: true,\n *     ...overrideOptions,\n *   })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArg - The type of the argument passed into the query.\n * @template BaseQuery - The type of the base query function being used.\n * @template SelectedResult - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.2.8\n * @public\n */\nexport type TypedUseQueryStateOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseQueryStateOptions<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseQueryStateResult<_ extends QueryDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R>;\n\n/**\n * Helper type to manually type the result\n * of the `useQueryState` hook in userland code.\n */\nexport type TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TSHelpersNoInfer<R>;\ntype UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> = QuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: ResultTypeFrom<D>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n};\ntype UseQueryStateDefaultResult<D extends QueryDefinition<any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type LazyInfiniteQueryTrigger<D extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, direction: InfiniteQueryDirection): InfiniteQueryActionCreatorResult<D>;\n};\nexport type TypedLazyInfiniteQueryTrigger<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = LazyInfiniteQueryTrigger<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  initialPageParam?: PageParamFrom<D>;\n};\nexport type TypedUseInfiniteQuerySubscription<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscription<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = Pick<InfiniteQueryActionCreatorResult<D>, 'refetch'> & {\n  trigger: LazyInfiniteQueryTrigger<D>;\n  fetchNextPage: () => InfiniteQueryActionCreatorResult<D>;\n  fetchPreviousPage: () => InfiniteQueryActionCreatorResult<D>;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseInfiniteQuerySubscriptionResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscriptionResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type InfiniteQueryStateSelector<R extends Record<string, any>, D extends InfiniteQueryDefinition<any, any, any, any, any>> = (state: UseInfiniteQueryStateDefaultResult<D>) => R;\nexport type TypedInfiniteQueryStateSelector<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = InfiniteQueryStateSelector<SelectedResult, InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.  Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n *  The `data` field will be a `{pages: Data[], pageParams: PageParam[]}` structure containing all fetched page responses and the corresponding page param values for each page. You may use this to render individual pages, combine all pages into a single infinite list, or other display logic as needed.\n *\n * This hook combines the functionality of both [`useInfiniteQueryState`](#useinfinitequerystate) and [`useInfiniteQuerySubscription`](#useinfinitequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * As with normal query hooks, `skipToken` is a valid argument that will skip the query from executing.\n *\n * By default, the initial request will use the `initialPageParam` value that was defined on the infinite query endpoint. If you want to start from a different value, you can pass `initialPageParam` as part of the hook options to override that initial request value.\n *\n * Use the returned `fetchNextPage` and `fetchPreviousPage` methods on the hook result object to trigger fetches forwards and backwards. These will always calculate the next or previous page param based on the current cached pages and the provided `getNext/PreviousPageParam` callbacks defined in the endpoint.\n *\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQuery<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D> & UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryHookResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'fetchNextPage' | 'fetchPreviousPage'>;\nexport type TypedUseInfiniteQuery<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuery<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQuerySubscription`](#useinfinitequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQueryState<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryStateResult<D, R>;\nexport type TypedUseInfiniteQueryState<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQueryState<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data. Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQueryState`](#useinfinitequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseInfiniteQuerySubscription<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D>) => UseInfiniteQuerySubscriptionResult<D>;\nexport type UseInfiniteQueryHookResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = UseInfiniteQueryStateResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'refetch'>;\nexport type TypedUseInfiniteQueryHookResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryHookResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\nexport type UseInfiniteQueryStateOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   * Note that this should always return an object (not a primitive), as RTKQ adds fields to the return value.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: InfiniteQueryStateSelector<R, D>;\n};\nexport type TypedUseInfiniteQueryStateOptions<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateOptions<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseInfiniteQueryStateResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = TSHelpersNoInfer<R>;\nexport type TypedUseInfiniteQueryStateResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\ntype UseInfiniteQueryStateBaseResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n  hasNextPage: false;\n  hasPreviousPage: false;\n  isFetchingNextPage: false;\n  isFetchingPreviousPage: false;\n};\ntype UseInfiniteQueryStateDefaultResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseInfiniteQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseInfiniteQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type MutationStateSelector<R extends Record<string, any>, D extends MutationDefinition<any, any, any, any>> = (state: MutationResultSelectorResult<D>) => R;\nexport type UseMutationStateOptions<D extends MutationDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  selectFromResult?: MutationStateSelector<R, D>;\n  fixedCacheKey?: string;\n};\nexport type UseMutationStateResult<D extends MutationDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R> & {\n  originalArgs?: QueryArgFrom<D>;\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useMutation` hook in userland code.\n */\nexport type TypedUseMutationResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = MutationResultSelectorResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseMutationStateResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\n\n/**\n * A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.\n *\n * #### Features\n *\n * - Manual control over firing a request to alter data on the server or possibly invalidate the cache\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseMutation<D extends MutationDefinition<any, any, any, any>> = <R extends Record<string, any> = MutationResultSelectorResult<D>>(options?: UseMutationStateOptions<D, R>) => readonly [MutationTrigger<D>, UseMutationStateResult<D, R>];\nexport type TypedUseMutation<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseMutation<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type MutationTrigger<D extends MutationDefinition<any, any, any, any>> = {\n  /**\n   * Triggers the mutation and returns a Promise.\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>): MutationActionCreatorResult<D>;\n};\nexport type TypedMutationTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = MutationTrigger<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * Wrapper around `defaultQueryStateSelector` to be used in `useQuery`.\n * We want the initial render to already come back with\n * `{ isUninitialized: false, isFetching: true, isLoading: true }`\n * to prevent that the library user has to do an additional check for `isUninitialized`/\n */\nconst noPendingQueryStateSelector: QueryStateSelector<any, any> = selected => {\n  if (selected.isUninitialized) {\n    return {\n      ...selected,\n      isUninitialized: false,\n      isFetching: true,\n      isLoading: selected.data !== undefined ? false : true,\n      status: QueryStatus.pending\n    } as any;\n  }\n  return selected;\n};\nfunction pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {\n  const ret: any = {};\n  keys.forEach(key => {\n    ret[key] = obj[key];\n  });\n  return ret;\n}\nconst COMMON_HOOK_DEBUG_FIELDS = ['data', 'status', 'isLoading', 'isSuccess', 'isError', 'error'] as const;\ntype GenericPrefetchThunk = (endpointName: any, arg: any, options: PrefetchOptions) => ThunkAction<void, any, any, UnknownAction>;\n\n/**\n *\n * @param opts.api - An API with defined endpoints to create hooks for\n * @param opts.moduleOptions.batch - The version of the `batchedUpdates` function to be used\n * @param opts.moduleOptions.useDispatch - The version of the `useDispatch` hook to be used\n * @param opts.moduleOptions.useSelector - The version of the `useSelector` hook to be used\n * @returns An object containing functions to generate hooks based on an endpoint\n */\nexport function buildHooks<Definitions extends EndpointDefinitions>({\n  api,\n  moduleOptions: {\n    batch,\n    hooks: {\n      useDispatch,\n      useSelector,\n      useStore\n    },\n    unstable__sideEffectsInRender,\n    createSelector\n  },\n  serializeQueryArgs,\n  context\n}: {\n  api: Api<any, Definitions, any, any, CoreModule>;\n  moduleOptions: Required<ReactHooksModuleOptions>;\n  serializeQueryArgs: SerializeQueryArgs<any>;\n  context: ApiContext<Definitions>;\n}) {\n  const usePossiblyImmediateEffect: (effect: () => void | undefined, deps?: DependencyList) => void = unstable__sideEffectsInRender ? cb => cb() : useEffect;\n  return {\n    buildQueryHooks,\n    buildInfiniteQueryHooks,\n    buildMutationHook,\n    usePrefetch\n  };\n  function queryStatePreSelector(currentState: QueryResultSelectorResult<any>, lastResult: UseQueryStateDefaultResult<any> | undefined, queryArgs: any): UseQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n\n    // isSuccess = true when data is present and we're not refetching after an error.\n    // That includes cases where the _current_ item is either actively\n    // fetching or about to fetch due to an uninitialized entry.\n    const isSuccess = currentState.isSuccess || hasData && (isFetching && !lastResult?.isError || currentState.isUninitialized);\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseQueryStateDefaultResult<any>;\n  }\n  function infiniteQueryStatePreSelector(currentState: InfiniteQueryResultSelectorResult<any>, lastResult: UseInfiniteQueryStateDefaultResult<any> | undefined, queryArgs: any): UseInfiniteQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n    // isSuccess = true when data is present\n    const isSuccess = currentState.isSuccess || isFetching && hasData;\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseInfiniteQueryStateDefaultResult<any>;\n  }\n  function usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, defaultOptions?: PrefetchOptions) {\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n    const stableDefaultOptions = useShallowStableValue(defaultOptions);\n    return useCallback((arg: any, options?: PrefetchOptions) => dispatch((api.util.prefetch as GenericPrefetchThunk)(endpointName, arg, {\n      ...stableDefaultOptions,\n      ...options\n    })), [endpointName, dispatch, stableDefaultOptions]);\n  }\n  function useQuerySubscriptionCommonImpl<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(endpointName: string, arg: unknown | SkipToken, {\n    refetchOnReconnect,\n    refetchOnFocus,\n    refetchOnMountOrArgChange,\n    skip = false,\n    pollingInterval = 0,\n    skipPollingIfUnfocused = false,\n    ...rest\n  }: UseQuerySubscriptionOptions = {}) {\n    const {\n      initiate\n    } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n\n    // TODO: Change this to `useRef<SubscriptionSelectors>(undefined)` after upgrading to React 19.\n    const subscriptionSelectorsRef = useRef<SubscriptionSelectors | undefined>(undefined);\n    if (!subscriptionSelectorsRef.current) {\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\n    You must add the middleware for RTK-Query to function correctly!`);\n        }\n      }\n      subscriptionSelectorsRef.current = returnedValue as unknown as SubscriptionSelectors;\n    }\n    const stableArg = useStableQueryArgs(skip ? skipToken : arg,\n    // Even if the user provided a per-endpoint `serializeQueryArgs` with\n    // a consistent return value, _here_ we want to use the default behavior\n    // so we can tell if _anything_ actually changed. Otherwise, we can end up\n    // with a case where the query args did change but the serialization doesn't,\n    // and then we never try to initiate a refetch.\n    defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n    const stableSubscriptionOptions = useShallowStableValue({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval,\n      skipPollingIfUnfocused\n    });\n    const initialPageParam = (rest as UseInfiniteQuerySubscriptionOptions<any>).initialPageParam;\n    const stableInitialPageParam = useShallowStableValue(initialPageParam);\n\n    /**\n     * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n     */\n    const promiseRef = useRef<T | undefined>(undefined);\n    let {\n      queryCacheKey,\n      requestId\n    } = promiseRef.current || {};\n\n    // HACK We've saved the middleware subscription lookup callbacks into a ref,\n    // so we can directly check here if the subscription exists for this query.\n    let currentRenderHasSubscription = false;\n    if (queryCacheKey && requestId) {\n      currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId);\n    }\n    const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== undefined;\n    usePossiblyImmediateEffect((): void | undefined => {\n      if (subscriptionRemoved) {\n        promiseRef.current = undefined;\n      }\n    }, [subscriptionRemoved]);\n    usePossiblyImmediateEffect((): void | undefined => {\n      const lastPromise = promiseRef.current;\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'removeMeOnCompilation') {\n        // this is only present to enforce the rule of hooks to keep `isSubscribed` in the dependency array\n        console.log(subscriptionRemoved);\n      }\n      if (stableArg === skipToken) {\n        lastPromise?.unsubscribe();\n        promiseRef.current = undefined;\n        return;\n      }\n      const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n      if (!lastPromise || lastPromise.arg !== stableArg) {\n        lastPromise?.unsubscribe();\n        const promise = dispatch(initiate(stableArg, {\n          subscriptionOptions: stableSubscriptionOptions,\n          forceRefetch: refetchOnMountOrArgChange,\n          ...(isInfiniteQueryDefinition(context.endpointDefinitions[endpointName]) ? {\n            initialPageParam: stableInitialPageParam\n          } : {})\n        }));\n        promiseRef.current = promise as T;\n      } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n        lastPromise.updateSubscriptionOptions(stableSubscriptionOptions);\n      }\n    }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, endpointName]);\n    return [promiseRef, dispatch, initiate, stableSubscriptionOptions] as const;\n  }\n  function buildUseQueryState(endpointName: string, preSelector: typeof queryStatePreSelector | typeof infiniteQueryStatePreSelector) {\n    const useQueryState = (arg: any, {\n      skip = false,\n      selectFromResult\n    }: UseQueryStateOptions<any, any> | UseInfiniteQueryStateOptions<any, any> = {}) => {\n      const {\n        select\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const stableArg = useStableQueryArgs(skip ? skipToken : arg, serializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      type ApiRootState = Parameters<ReturnType<typeof select>>[0];\n      const lastValue = useRef<any>(undefined);\n      const selectDefaultResult: Selector<ApiRootState, any, [any]> = useMemo(() =>\n      // Normally ts-ignores are bad and should be avoided, but we're\n      // already casting this selector to be `Selector<any>` anyway,\n      // so the inconsistencies don't matter here\n      // @ts-ignore\n      createSelector([\n      // @ts-ignore\n      select(stableArg), (_: ApiRootState, lastResult: any) => lastResult, (_: ApiRootState) => stableArg], preSelector, {\n        memoizeOptions: {\n          resultEqualityCheck: shallowEqual\n        }\n      }), [select, stableArg]);\n      const querySelector: Selector<ApiRootState, any, [any]> = useMemo(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, {\n        devModeChecks: {\n          identityFunctionCheck: 'never'\n        }\n      }) : selectDefaultResult, [selectDefaultResult, selectFromResult]);\n      const currentState = useSelector((state: RootState<Definitions, any, any>) => querySelector(state, lastValue.current), shallowEqual);\n      const store = useStore<RootState<Definitions, any, any>>();\n      const newLastValue = selectDefaultResult(store.getState(), lastValue.current);\n      useIsomorphicLayoutEffect(() => {\n        lastValue.current = newLastValue;\n      }, [newLastValue]);\n      return currentState;\n    };\n    return useQueryState;\n  }\n  function usePromiseRefUnsubscribeOnUnmount(promiseRef: React.RefObject<{\n    unsubscribe?: () => void;\n  } | undefined>) {\n    useEffect(() => {\n      return () => {\n        promiseRef.current?.unsubscribe?.()\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        ;\n        (promiseRef.current as any) = undefined;\n      };\n    }, [promiseRef]);\n  }\n  function refetchOrErrorIfUnmounted<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(promiseRef: React.RefObject<T | undefined>): T {\n    if (!promiseRef.current) throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(38) : 'Cannot refetch a query that has not been started yet.');\n    return promiseRef.current.refetch() as T;\n  }\n  function buildQueryHooks(endpointName: string): QueryHooks<any> {\n    const useQuerySubscription: UseQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef] = useQuerySubscriptionCommonImpl<QueryActionCreatorResult<any>>(endpointName, arg, options);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      return useMemo(() => ({\n        /**\n         * A method to manually refetch data for the query\n         */\n        refetch: () => refetchOrErrorIfUnmounted(promiseRef)\n      }), [promiseRef]);\n    };\n    const useLazyQuerySubscription: UseLazyQuerySubscription<any> = ({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval = 0,\n      skipPollingIfUnfocused = false\n    } = {}) => {\n      const {\n        initiate\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [arg, setArg] = useState<any>(UNINITIALIZED_VALUE);\n\n      // TODO: Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n       */\n      const promiseRef = useRef<QueryActionCreatorResult<any> | undefined>(undefined);\n      const stableSubscriptionOptions = useShallowStableValue({\n        refetchOnReconnect,\n        refetchOnFocus,\n        pollingInterval,\n        skipPollingIfUnfocused\n      });\n      usePossiblyImmediateEffect(() => {\n        const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n        if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n          promiseRef.current?.updateSubscriptionOptions(stableSubscriptionOptions);\n        }\n      }, [stableSubscriptionOptions]);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger = useCallback(function (arg: any, preferCacheValue = false) {\n        let promise: QueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch(initiate(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            forceRefetch: !preferCacheValue\n          }));\n          setArg(arg);\n        });\n        return promise!;\n      }, [dispatch, initiate]);\n      const reset = useCallback(() => {\n        if (promiseRef.current?.queryCacheKey) {\n          dispatch(api.internalActions.removeQueryResult({\n            queryCacheKey: promiseRef.current?.queryCacheKey as QueryCacheKey\n          }));\n        }\n      }, [dispatch]);\n\n      /* cleanup on unmount */\n      useEffect(() => {\n        return () => {\n          promiseRef?.current?.unsubscribe();\n        };\n      }, []);\n\n      /* if \"cleanup on unmount\" was triggered from a fast refresh, we want to reinstate the query */\n      useEffect(() => {\n        if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {\n          trigger(arg, true);\n        }\n      }, [arg, trigger]);\n      return useMemo(() => [trigger, arg, {\n        reset\n      }] as const, [trigger, arg, reset]);\n    };\n    const useQueryState: UseQueryState<any> = buildUseQueryState(endpointName, queryStatePreSelector);\n    return {\n      useQueryState,\n      useQuerySubscription,\n      useLazyQuerySubscription,\n      useLazyQuery(options) {\n        const [trigger, arg, {\n          reset\n        }] = useLazyQuerySubscription(options);\n        const queryStateResults = useQueryState(arg, {\n          ...options,\n          skip: arg === UNINITIALIZED_VALUE\n        });\n        const info = useMemo(() => ({\n          lastArg: arg\n        }), [arg]);\n        return useMemo(() => [trigger, {\n          ...queryStateResults,\n          reset\n        }, info], [trigger, queryStateResults, reset, info]);\n      },\n      useQuery(arg, options) {\n        const querySubscriptionResults = useQuerySubscription(arg, options);\n        const queryStateResults = useQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS);\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          ...querySubscriptionResults\n        }), [queryStateResults, querySubscriptionResults]);\n      }\n    };\n  }\n  function buildInfiniteQueryHooks(endpointName: string): InfiniteQueryHooks<any> {\n    const useInfiniteQuerySubscription: UseInfiniteQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl<InfiniteQueryActionCreatorResult<any>>(endpointName, arg, options);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger: LazyInfiniteQueryTrigger<any> = useCallback(function (arg: unknown, direction: 'forward' | 'backward') {\n        let promise: InfiniteQueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch((initiate as StartInfiniteQueryActionCreator<any>)(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            direction\n          }));\n        });\n        return promise!;\n      }, [promiseRef, dispatch, initiate]);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      const stableArg = useStableQueryArgs(options.skip ? skipToken : arg,\n      // Even if the user provided a per-endpoint `serializeQueryArgs` with\n      // a consistent return value, _here_ we want to use the default behavior\n      // so we can tell if _anything_ actually changed. Otherwise, we can end up\n      // with a case where the query args did change but the serialization doesn't,\n      // and then we never try to initiate a refetch.\n      defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      const refetch = useCallback(() => refetchOrErrorIfUnmounted(promiseRef), [promiseRef]);\n      return useMemo(() => {\n        const fetchNextPage = () => {\n          return trigger(stableArg, 'forward');\n        };\n        const fetchPreviousPage = () => {\n          return trigger(stableArg, 'backward');\n        };\n        return {\n          trigger,\n          /**\n           * A method to manually refetch data for the query\n           */\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        };\n      }, [refetch, trigger, stableArg]);\n    };\n    const useInfiniteQueryState: UseInfiniteQueryState<any> = buildUseQueryState(endpointName, infiniteQueryStatePreSelector);\n    return {\n      useInfiniteQueryState,\n      useInfiniteQuerySubscription,\n      useInfiniteQuery(arg, options) {\n        const {\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        } = useInfiniteQuerySubscription(arg, options);\n        const queryStateResults = useInfiniteQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, 'hasNextPage', 'hasPreviousPage');\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          fetchNextPage,\n          fetchPreviousPage,\n          refetch\n        }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]);\n      }\n    };\n  }\n  function buildMutationHook(name: string): UseMutation<any> {\n    return ({\n      selectFromResult,\n      fixedCacheKey\n    } = {}) => {\n      const {\n        select,\n        initiate\n      } = api.endpoints[name] as ApiEndpointMutation<MutationDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [promise, setPromise] = useState<MutationActionCreatorResult<any>>();\n      useEffect(() => () => {\n        if (!promise?.arg.fixedCacheKey) {\n          promise?.reset();\n        }\n      }, [promise]);\n      const triggerMutation = useCallback(function (arg: Parameters<typeof initiate>['0']) {\n        const promise = dispatch(initiate(arg, {\n          fixedCacheKey\n        }));\n        setPromise(promise);\n        return promise;\n      }, [dispatch, initiate, fixedCacheKey]);\n      const {\n        requestId\n      } = promise || {};\n      const selectDefaultResult = useMemo(() => select({\n        fixedCacheKey,\n        requestId: promise?.requestId\n      }), [fixedCacheKey, promise, select]);\n      const mutationSelector = useMemo((): Selector<RootState<Definitions, any, any>, any> => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]);\n      const currentState = useSelector(mutationSelector, shallowEqual);\n      const originalArgs = fixedCacheKey == null ? promise?.arg.originalArgs : undefined;\n      const reset = useCallback(() => {\n        batch(() => {\n          if (promise) {\n            setPromise(undefined);\n          }\n          if (fixedCacheKey) {\n            dispatch(api.internalActions.removeMutationResult({\n              requestId,\n              fixedCacheKey\n            }));\n          }\n        });\n      }, [dispatch, fixedCacheKey, promise, requestId]);\n      const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, 'endpointName');\n      useDebugValue(debugValue);\n      const finalState = useMemo(() => ({\n        ...currentState,\n        originalArgs,\n        reset\n      }), [currentState, originalArgs, reset]);\n      return useMemo(() => [triggerMutation, finalState] as const, [triggerMutation, finalState]);\n    };\n  }\n}","export const UNINITIALIZED_VALUE = Symbol();\nexport type UninitializedValue = typeof UNINITIALIZED_VALUE;","import { useEffect, useRef, useMemo } from 'react';\nimport type { SerializeQueryArgs } from '@reduxjs/toolkit/query';\nimport type { EndpointDefinition } from '@reduxjs/toolkit/query';\nexport function useStableQueryArgs<T>(queryArgs: T, serialize: SerializeQueryArgs<any>, endpointDefinition: EndpointDefinition<any, any, any, any>, endpointName: string) {\n  const incoming = useMemo(() => ({\n    queryArgs,\n    serialized: typeof queryArgs == 'object' ? serialize({\n      queryArgs,\n      endpointDefinition,\n      endpointName\n    }) : queryArgs\n  }), [queryArgs, serialize, endpointDefinition, endpointName]);\n  const cache = useRef(incoming);\n  useEffect(() => {\n    if (cache.current.serialized !== incoming.serialized) {\n      cache.current = incoming;\n    }\n  }, [incoming]);\n  return cache.current.serialized === incoming.serialized ? cache.current.queryArgs : queryArgs;\n}","import { useEffect, useRef } from 'react';\nimport { shallowEqual } from 'react-redux';\nexport function useShallowStableValue<T>(value: T) {\n  const cache = useRef(value);\n  useEffect(() => {\n    if (!shallowEqual(cache.current, value)) {\n      cache.current = value;\n    }\n  }, [value]);\n  return shallowEqual(cache.current, value) ? cache.current : value;\n}","import { configureStore, formatProdErrorMessage as _formatProdErrorMessage } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport { useContext } from 'react';\nimport { useEffect } from 'react';\nimport * as React from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { Provider, ReactReduxContext } from 'react-redux';\nimport { setupListeners } from '@reduxjs/toolkit/query';\nimport type { Api } from '@reduxjs/toolkit/query';\n\n/**\n * Can be used as a `Provider` if you **do not already have a Redux store**.\n *\n * @example\n * ```tsx\n * // codeblock-meta no-transpile title=\"Basic usage - wrap your App with ApiProvider\"\n * import * as React from 'react';\n * import { ApiProvider } from '@reduxjs/toolkit/query/react';\n * import { Pokemon } from './features/Pokemon';\n *\n * function App() {\n *   return (\n *     <ApiProvider api={api}>\n *       <Pokemon />\n *     </ApiProvider>\n *   );\n * }\n * ```\n *\n * @remarks\n * Using this together with an existing redux store, both will\n * conflict with each other - please use the traditional redux setup\n * in that case.\n */\nexport function ApiProvider(props: {\n  children: any;\n  api: Api<any, {}, any, any>;\n  setupListeners?: Parameters<typeof setupListeners>[1] | false;\n  context?: Context<ReactReduxContextValue | null>;\n}) {\n  const context = props.context || ReactReduxContext;\n  const existingContext = useContext(context);\n  if (existingContext) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(35) : 'Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.');\n  }\n  const [store] = React.useState(() => configureStore({\n    reducer: {\n      [props.api.reducerPath]: props.api.reducer\n    },\n    middleware: gDM => gDM().concat(props.api.middleware)\n  }));\n  // Adds the event listeners for online/offline/focus/etc\n  useEffect((): undefined | (() => void) => props.setupListeners === false ? undefined : setupListeners(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]);\n  return <Provider store={store} context={context}>\n      {props.children}\n    </Provider>;\n}"],"mappings":"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","names":["_formatProdErrorMessage","useEffect","useMemo","useRef","shallowEqual","useEffect","useRef","useEffect","useRef","_a","useMemo","shallowEqual","arg","promise","_formatProdErrorMessage","_formatProdErrorMessage","useEffect"]}
Index: node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.modern.mjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.modern.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.modern.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,718 @@
+// src/query/react/index.ts
+import { buildCreateApi, coreModule } from "@reduxjs/toolkit/query";
+
+// src/query/react/module.ts
+import { formatProdErrorMessage as _formatProdErrorMessage3 } from "@reduxjs/toolkit";
+import { batch as rrBatch, useDispatch as rrUseDispatch, useSelector as rrUseSelector, useStore as rrUseStore } from "react-redux";
+import { createSelector as _createSelector } from "reselect";
+
+// src/query/utils/capitalize.ts
+function capitalize(str) {
+  return str.replace(str[0], str[0].toUpperCase());
+}
+
+// src/query/utils/countObjectKeys.ts
+function countObjectKeys(obj) {
+  let count = 0;
+  for (const _key in obj) {
+    count++;
+  }
+  return count;
+}
+
+// src/query/endpointDefinitions.ts
+function isQueryDefinition(e) {
+  return e.type === "query" /* query */;
+}
+function isMutationDefinition(e) {
+  return e.type === "mutation" /* mutation */;
+}
+function isInfiniteQueryDefinition(e) {
+  return e.type === "infinitequery" /* infinitequery */;
+}
+
+// src/query/tsHelpers.ts
+function safeAssign(target, ...args) {
+  return Object.assign(target, ...args);
+}
+
+// src/query/react/buildHooks.ts
+import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from "@reduxjs/toolkit";
+import { defaultSerializeQueryArgs, QueryStatus, skipToken } from "@reduxjs/toolkit/query";
+import { useCallback, useDebugValue, useEffect as useEffect3, useLayoutEffect, useMemo as useMemo2, useRef as useRef3, useState } from "react";
+import { shallowEqual as shallowEqual2 } from "react-redux";
+
+// src/query/react/constants.ts
+var UNINITIALIZED_VALUE = Symbol();
+
+// src/query/react/useSerializedStableValue.ts
+import { useEffect, useRef, useMemo } from "react";
+function useStableQueryArgs(queryArgs, serialize, endpointDefinition, endpointName) {
+  const incoming = useMemo(() => ({
+    queryArgs,
+    serialized: typeof queryArgs == "object" ? serialize({
+      queryArgs,
+      endpointDefinition,
+      endpointName
+    }) : queryArgs
+  }), [queryArgs, serialize, endpointDefinition, endpointName]);
+  const cache = useRef(incoming);
+  useEffect(() => {
+    if (cache.current.serialized !== incoming.serialized) {
+      cache.current = incoming;
+    }
+  }, [incoming]);
+  return cache.current.serialized === incoming.serialized ? cache.current.queryArgs : queryArgs;
+}
+
+// src/query/react/useShallowStableValue.ts
+import { useEffect as useEffect2, useRef as useRef2 } from "react";
+import { shallowEqual } from "react-redux";
+function useShallowStableValue(value) {
+  const cache = useRef2(value);
+  useEffect2(() => {
+    if (!shallowEqual(cache.current, value)) {
+      cache.current = value;
+    }
+  }, [value]);
+  return shallowEqual(cache.current, value) ? cache.current : value;
+}
+
+// src/query/react/buildHooks.ts
+var canUseDOM = () => !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
+var isDOM = /* @__PURE__ */ canUseDOM();
+var isRunningInReactNative = () => typeof navigator !== "undefined" && navigator.product === "ReactNative";
+var isReactNative = /* @__PURE__ */ isRunningInReactNative();
+var getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? useLayoutEffect : useEffect3;
+var useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();
+var noPendingQueryStateSelector = (selected) => {
+  if (selected.isUninitialized) {
+    return {
+      ...selected,
+      isUninitialized: false,
+      isFetching: true,
+      isLoading: selected.data !== void 0 ? false : true,
+      status: QueryStatus.pending
+    };
+  }
+  return selected;
+};
+function pick(obj, ...keys) {
+  const ret = {};
+  keys.forEach((key) => {
+    ret[key] = obj[key];
+  });
+  return ret;
+}
+var COMMON_HOOK_DEBUG_FIELDS = ["data", "status", "isLoading", "isSuccess", "isError", "error"];
+function buildHooks({
+  api,
+  moduleOptions: {
+    batch,
+    hooks: {
+      useDispatch,
+      useSelector,
+      useStore
+    },
+    unstable__sideEffectsInRender,
+    createSelector
+  },
+  serializeQueryArgs,
+  context
+}) {
+  const usePossiblyImmediateEffect = unstable__sideEffectsInRender ? (cb) => cb() : useEffect3;
+  return {
+    buildQueryHooks,
+    buildInfiniteQueryHooks,
+    buildMutationHook,
+    usePrefetch
+  };
+  function queryStatePreSelector(currentState, lastResult, queryArgs) {
+    if (lastResult?.endpointName && currentState.isUninitialized) {
+      const {
+        endpointName
+      } = lastResult;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      if (queryArgs !== skipToken && serializeQueryArgs({
+        queryArgs: lastResult.originalArgs,
+        endpointDefinition,
+        endpointName
+      }) === serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      })) lastResult = void 0;
+    }
+    let data = currentState.isSuccess ? currentState.data : lastResult?.data;
+    if (data === void 0) data = currentState.data;
+    const hasData = data !== void 0;
+    const isFetching = currentState.isLoading;
+    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;
+    const isSuccess = currentState.isSuccess || hasData && (isFetching && !lastResult?.isError || currentState.isUninitialized);
+    return {
+      ...currentState,
+      data,
+      currentData: currentState.data,
+      isFetching,
+      isLoading,
+      isSuccess
+    };
+  }
+  function infiniteQueryStatePreSelector(currentState, lastResult, queryArgs) {
+    if (lastResult?.endpointName && currentState.isUninitialized) {
+      const {
+        endpointName
+      } = lastResult;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      if (queryArgs !== skipToken && serializeQueryArgs({
+        queryArgs: lastResult.originalArgs,
+        endpointDefinition,
+        endpointName
+      }) === serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      })) lastResult = void 0;
+    }
+    let data = currentState.isSuccess ? currentState.data : lastResult?.data;
+    if (data === void 0) data = currentState.data;
+    const hasData = data !== void 0;
+    const isFetching = currentState.isLoading;
+    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;
+    const isSuccess = currentState.isSuccess || isFetching && hasData;
+    return {
+      ...currentState,
+      data,
+      currentData: currentState.data,
+      isFetching,
+      isLoading,
+      isSuccess
+    };
+  }
+  function usePrefetch(endpointName, defaultOptions) {
+    const dispatch = useDispatch();
+    const stableDefaultOptions = useShallowStableValue(defaultOptions);
+    return useCallback((arg, options) => dispatch(api.util.prefetch(endpointName, arg, {
+      ...stableDefaultOptions,
+      ...options
+    })), [endpointName, dispatch, stableDefaultOptions]);
+  }
+  function useQuerySubscriptionCommonImpl(endpointName, arg, {
+    refetchOnReconnect,
+    refetchOnFocus,
+    refetchOnMountOrArgChange,
+    skip = false,
+    pollingInterval = 0,
+    skipPollingIfUnfocused = false,
+    ...rest
+  } = {}) {
+    const {
+      initiate
+    } = api.endpoints[endpointName];
+    const dispatch = useDispatch();
+    const subscriptionSelectorsRef = useRef3(void 0);
+    if (!subscriptionSelectorsRef.current) {
+      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());
+      if (process.env.NODE_ENV !== "production") {
+        if (typeof returnedValue !== "object" || typeof returnedValue?.type === "string") {
+          throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store.
+    You must add the middleware for RTK-Query to function correctly!`);
+        }
+      }
+      subscriptionSelectorsRef.current = returnedValue;
+    }
+    const stableArg = useStableQueryArgs(
+      skip ? skipToken : arg,
+      // Even if the user provided a per-endpoint `serializeQueryArgs` with
+      // a consistent return value, _here_ we want to use the default behavior
+      // so we can tell if _anything_ actually changed. Otherwise, we can end up
+      // with a case where the query args did change but the serialization doesn't,
+      // and then we never try to initiate a refetch.
+      defaultSerializeQueryArgs,
+      context.endpointDefinitions[endpointName],
+      endpointName
+    );
+    const stableSubscriptionOptions = useShallowStableValue({
+      refetchOnReconnect,
+      refetchOnFocus,
+      pollingInterval,
+      skipPollingIfUnfocused
+    });
+    const initialPageParam = rest.initialPageParam;
+    const stableInitialPageParam = useShallowStableValue(initialPageParam);
+    const promiseRef = useRef3(void 0);
+    let {
+      queryCacheKey,
+      requestId
+    } = promiseRef.current || {};
+    let currentRenderHasSubscription = false;
+    if (queryCacheKey && requestId) {
+      currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId);
+    }
+    const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== void 0;
+    usePossiblyImmediateEffect(() => {
+      if (subscriptionRemoved) {
+        promiseRef.current = void 0;
+      }
+    }, [subscriptionRemoved]);
+    usePossiblyImmediateEffect(() => {
+      const lastPromise = promiseRef.current;
+      if (typeof process !== "undefined" && process.env.NODE_ENV === "removeMeOnCompilation") {
+        console.log(subscriptionRemoved);
+      }
+      if (stableArg === skipToken) {
+        lastPromise?.unsubscribe();
+        promiseRef.current = void 0;
+        return;
+      }
+      const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;
+      if (!lastPromise || lastPromise.arg !== stableArg) {
+        lastPromise?.unsubscribe();
+        const promise = dispatch(initiate(stableArg, {
+          subscriptionOptions: stableSubscriptionOptions,
+          forceRefetch: refetchOnMountOrArgChange,
+          ...isInfiniteQueryDefinition(context.endpointDefinitions[endpointName]) ? {
+            initialPageParam: stableInitialPageParam
+          } : {}
+        }));
+        promiseRef.current = promise;
+      } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {
+        lastPromise.updateSubscriptionOptions(stableSubscriptionOptions);
+      }
+    }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, endpointName]);
+    return [promiseRef, dispatch, initiate, stableSubscriptionOptions];
+  }
+  function buildUseQueryState(endpointName, preSelector) {
+    const useQueryState = (arg, {
+      skip = false,
+      selectFromResult
+    } = {}) => {
+      const {
+        select
+      } = api.endpoints[endpointName];
+      const stableArg = useStableQueryArgs(skip ? skipToken : arg, serializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);
+      const lastValue = useRef3(void 0);
+      const selectDefaultResult = useMemo2(() => (
+        // Normally ts-ignores are bad and should be avoided, but we're
+        // already casting this selector to be `Selector<any>` anyway,
+        // so the inconsistencies don't matter here
+        // @ts-ignore
+        createSelector([
+          // @ts-ignore
+          select(stableArg),
+          (_, lastResult) => lastResult,
+          (_) => stableArg
+        ], preSelector, {
+          memoizeOptions: {
+            resultEqualityCheck: shallowEqual2
+          }
+        })
+      ), [select, stableArg]);
+      const querySelector = useMemo2(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, {
+        devModeChecks: {
+          identityFunctionCheck: "never"
+        }
+      }) : selectDefaultResult, [selectDefaultResult, selectFromResult]);
+      const currentState = useSelector((state) => querySelector(state, lastValue.current), shallowEqual2);
+      const store = useStore();
+      const newLastValue = selectDefaultResult(store.getState(), lastValue.current);
+      useIsomorphicLayoutEffect(() => {
+        lastValue.current = newLastValue;
+      }, [newLastValue]);
+      return currentState;
+    };
+    return useQueryState;
+  }
+  function usePromiseRefUnsubscribeOnUnmount(promiseRef) {
+    useEffect3(() => {
+      return () => {
+        promiseRef.current?.unsubscribe?.();
+        promiseRef.current = void 0;
+      };
+    }, [promiseRef]);
+  }
+  function refetchOrErrorIfUnmounted(promiseRef) {
+    if (!promiseRef.current) throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage2(38) : "Cannot refetch a query that has not been started yet.");
+    return promiseRef.current.refetch();
+  }
+  function buildQueryHooks(endpointName) {
+    const useQuerySubscription = (arg, options = {}) => {
+      const [promiseRef] = useQuerySubscriptionCommonImpl(endpointName, arg, options);
+      usePromiseRefUnsubscribeOnUnmount(promiseRef);
+      return useMemo2(() => ({
+        /**
+         * A method to manually refetch data for the query
+         */
+        refetch: () => refetchOrErrorIfUnmounted(promiseRef)
+      }), [promiseRef]);
+    };
+    const useLazyQuerySubscription = ({
+      refetchOnReconnect,
+      refetchOnFocus,
+      pollingInterval = 0,
+      skipPollingIfUnfocused = false
+    } = {}) => {
+      const {
+        initiate
+      } = api.endpoints[endpointName];
+      const dispatch = useDispatch();
+      const [arg, setArg] = useState(UNINITIALIZED_VALUE);
+      const promiseRef = useRef3(void 0);
+      const stableSubscriptionOptions = useShallowStableValue({
+        refetchOnReconnect,
+        refetchOnFocus,
+        pollingInterval,
+        skipPollingIfUnfocused
+      });
+      usePossiblyImmediateEffect(() => {
+        const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;
+        if (stableSubscriptionOptions !== lastSubscriptionOptions) {
+          promiseRef.current?.updateSubscriptionOptions(stableSubscriptionOptions);
+        }
+      }, [stableSubscriptionOptions]);
+      const subscriptionOptionsRef = useRef3(stableSubscriptionOptions);
+      usePossiblyImmediateEffect(() => {
+        subscriptionOptionsRef.current = stableSubscriptionOptions;
+      }, [stableSubscriptionOptions]);
+      const trigger = useCallback(function(arg2, preferCacheValue = false) {
+        let promise;
+        batch(() => {
+          promiseRef.current?.unsubscribe();
+          promiseRef.current = promise = dispatch(initiate(arg2, {
+            subscriptionOptions: subscriptionOptionsRef.current,
+            forceRefetch: !preferCacheValue
+          }));
+          setArg(arg2);
+        });
+        return promise;
+      }, [dispatch, initiate]);
+      const reset = useCallback(() => {
+        if (promiseRef.current?.queryCacheKey) {
+          dispatch(api.internalActions.removeQueryResult({
+            queryCacheKey: promiseRef.current?.queryCacheKey
+          }));
+        }
+      }, [dispatch]);
+      useEffect3(() => {
+        return () => {
+          promiseRef?.current?.unsubscribe();
+        };
+      }, []);
+      useEffect3(() => {
+        if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {
+          trigger(arg, true);
+        }
+      }, [arg, trigger]);
+      return useMemo2(() => [trigger, arg, {
+        reset
+      }], [trigger, arg, reset]);
+    };
+    const useQueryState = buildUseQueryState(endpointName, queryStatePreSelector);
+    return {
+      useQueryState,
+      useQuerySubscription,
+      useLazyQuerySubscription,
+      useLazyQuery(options) {
+        const [trigger, arg, {
+          reset
+        }] = useLazyQuerySubscription(options);
+        const queryStateResults = useQueryState(arg, {
+          ...options,
+          skip: arg === UNINITIALIZED_VALUE
+        });
+        const info = useMemo2(() => ({
+          lastArg: arg
+        }), [arg]);
+        return useMemo2(() => [trigger, {
+          ...queryStateResults,
+          reset
+        }, info], [trigger, queryStateResults, reset, info]);
+      },
+      useQuery(arg, options) {
+        const querySubscriptionResults = useQuerySubscription(arg, options);
+        const queryStateResults = useQueryState(arg, {
+          selectFromResult: arg === skipToken || options?.skip ? void 0 : noPendingQueryStateSelector,
+          ...options
+        });
+        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS);
+        useDebugValue(debugValue);
+        return useMemo2(() => ({
+          ...queryStateResults,
+          ...querySubscriptionResults
+        }), [queryStateResults, querySubscriptionResults]);
+      }
+    };
+  }
+  function buildInfiniteQueryHooks(endpointName) {
+    const useInfiniteQuerySubscription = (arg, options = {}) => {
+      const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl(endpointName, arg, options);
+      const subscriptionOptionsRef = useRef3(stableSubscriptionOptions);
+      usePossiblyImmediateEffect(() => {
+        subscriptionOptionsRef.current = stableSubscriptionOptions;
+      }, [stableSubscriptionOptions]);
+      const trigger = useCallback(function(arg2, direction) {
+        let promise;
+        batch(() => {
+          promiseRef.current?.unsubscribe();
+          promiseRef.current = promise = dispatch(initiate(arg2, {
+            subscriptionOptions: subscriptionOptionsRef.current,
+            direction
+          }));
+        });
+        return promise;
+      }, [promiseRef, dispatch, initiate]);
+      usePromiseRefUnsubscribeOnUnmount(promiseRef);
+      const stableArg = useStableQueryArgs(
+        options.skip ? skipToken : arg,
+        // Even if the user provided a per-endpoint `serializeQueryArgs` with
+        // a consistent return value, _here_ we want to use the default behavior
+        // so we can tell if _anything_ actually changed. Otherwise, we can end up
+        // with a case where the query args did change but the serialization doesn't,
+        // and then we never try to initiate a refetch.
+        defaultSerializeQueryArgs,
+        context.endpointDefinitions[endpointName],
+        endpointName
+      );
+      const refetch = useCallback(() => refetchOrErrorIfUnmounted(promiseRef), [promiseRef]);
+      return useMemo2(() => {
+        const fetchNextPage = () => {
+          return trigger(stableArg, "forward");
+        };
+        const fetchPreviousPage = () => {
+          return trigger(stableArg, "backward");
+        };
+        return {
+          trigger,
+          /**
+           * A method to manually refetch data for the query
+           */
+          refetch,
+          fetchNextPage,
+          fetchPreviousPage
+        };
+      }, [refetch, trigger, stableArg]);
+    };
+    const useInfiniteQueryState = buildUseQueryState(endpointName, infiniteQueryStatePreSelector);
+    return {
+      useInfiniteQueryState,
+      useInfiniteQuerySubscription,
+      useInfiniteQuery(arg, options) {
+        const {
+          refetch,
+          fetchNextPage,
+          fetchPreviousPage
+        } = useInfiniteQuerySubscription(arg, options);
+        const queryStateResults = useInfiniteQueryState(arg, {
+          selectFromResult: arg === skipToken || options?.skip ? void 0 : noPendingQueryStateSelector,
+          ...options
+        });
+        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, "hasNextPage", "hasPreviousPage");
+        useDebugValue(debugValue);
+        return useMemo2(() => ({
+          ...queryStateResults,
+          fetchNextPage,
+          fetchPreviousPage,
+          refetch
+        }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]);
+      }
+    };
+  }
+  function buildMutationHook(name) {
+    return ({
+      selectFromResult,
+      fixedCacheKey
+    } = {}) => {
+      const {
+        select,
+        initiate
+      } = api.endpoints[name];
+      const dispatch = useDispatch();
+      const [promise, setPromise] = useState();
+      useEffect3(() => () => {
+        if (!promise?.arg.fixedCacheKey) {
+          promise?.reset();
+        }
+      }, [promise]);
+      const triggerMutation = useCallback(function(arg) {
+        const promise2 = dispatch(initiate(arg, {
+          fixedCacheKey
+        }));
+        setPromise(promise2);
+        return promise2;
+      }, [dispatch, initiate, fixedCacheKey]);
+      const {
+        requestId
+      } = promise || {};
+      const selectDefaultResult = useMemo2(() => select({
+        fixedCacheKey,
+        requestId: promise?.requestId
+      }), [fixedCacheKey, promise, select]);
+      const mutationSelector = useMemo2(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]);
+      const currentState = useSelector(mutationSelector, shallowEqual2);
+      const originalArgs = fixedCacheKey == null ? promise?.arg.originalArgs : void 0;
+      const reset = useCallback(() => {
+        batch(() => {
+          if (promise) {
+            setPromise(void 0);
+          }
+          if (fixedCacheKey) {
+            dispatch(api.internalActions.removeMutationResult({
+              requestId,
+              fixedCacheKey
+            }));
+          }
+        });
+      }, [dispatch, fixedCacheKey, promise, requestId]);
+      const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, "endpointName");
+      useDebugValue(debugValue);
+      const finalState = useMemo2(() => ({
+        ...currentState,
+        originalArgs,
+        reset
+      }), [currentState, originalArgs, reset]);
+      return useMemo2(() => [triggerMutation, finalState], [triggerMutation, finalState]);
+    };
+  }
+}
+
+// src/query/react/module.ts
+var reactHooksModuleName = /* @__PURE__ */ Symbol();
+var reactHooksModule = ({
+  batch = rrBatch,
+  hooks = {
+    useDispatch: rrUseDispatch,
+    useSelector: rrUseSelector,
+    useStore: rrUseStore
+  },
+  createSelector = _createSelector,
+  unstable__sideEffectsInRender = false,
+  ...rest
+} = {}) => {
+  if (process.env.NODE_ENV !== "production") {
+    const hookNames = ["useDispatch", "useSelector", "useStore"];
+    let warned = false;
+    for (const hookName of hookNames) {
+      if (countObjectKeys(rest) > 0) {
+        if (rest[hookName]) {
+          if (!warned) {
+            console.warn("As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`");
+            warned = true;
+          }
+        }
+        hooks[hookName] = rest[hookName];
+      }
+      if (typeof hooks[hookName] !== "function") {
+        throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage3(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(", ")}.
+Hook ${hookName} was either not provided or not a function.`);
+      }
+    }
+  }
+  return {
+    name: reactHooksModuleName,
+    init(api, {
+      serializeQueryArgs
+    }, context) {
+      const anyApi = api;
+      const {
+        buildQueryHooks,
+        buildInfiniteQueryHooks,
+        buildMutationHook,
+        usePrefetch
+      } = buildHooks({
+        api,
+        moduleOptions: {
+          batch,
+          hooks,
+          unstable__sideEffectsInRender,
+          createSelector
+        },
+        serializeQueryArgs,
+        context
+      });
+      safeAssign(anyApi, {
+        usePrefetch
+      });
+      safeAssign(context, {
+        batch
+      });
+      return {
+        injectEndpoint(endpointName, definition) {
+          if (isQueryDefinition(definition)) {
+            const {
+              useQuery,
+              useLazyQuery,
+              useLazyQuerySubscription,
+              useQueryState,
+              useQuerySubscription
+            } = buildQueryHooks(endpointName);
+            safeAssign(anyApi.endpoints[endpointName], {
+              useQuery,
+              useLazyQuery,
+              useLazyQuerySubscription,
+              useQueryState,
+              useQuerySubscription
+            });
+            api[`use${capitalize(endpointName)}Query`] = useQuery;
+            api[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery;
+          }
+          if (isMutationDefinition(definition)) {
+            const useMutation = buildMutationHook(endpointName);
+            safeAssign(anyApi.endpoints[endpointName], {
+              useMutation
+            });
+            api[`use${capitalize(endpointName)}Mutation`] = useMutation;
+          } else if (isInfiniteQueryDefinition(definition)) {
+            const {
+              useInfiniteQuery,
+              useInfiniteQuerySubscription,
+              useInfiniteQueryState
+            } = buildInfiniteQueryHooks(endpointName);
+            safeAssign(anyApi.endpoints[endpointName], {
+              useInfiniteQuery,
+              useInfiniteQuerySubscription,
+              useInfiniteQueryState
+            });
+            api[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery;
+          }
+        }
+      };
+    }
+  };
+};
+
+// src/query/react/index.ts
+export * from "@reduxjs/toolkit/query";
+
+// src/query/react/ApiProvider.tsx
+import { configureStore, formatProdErrorMessage as _formatProdErrorMessage4 } from "@reduxjs/toolkit";
+import { useContext } from "react";
+import { useEffect as useEffect4 } from "react";
+import * as React from "react";
+import { Provider, ReactReduxContext } from "react-redux";
+import { setupListeners } from "@reduxjs/toolkit/query";
+function ApiProvider(props) {
+  const context = props.context || ReactReduxContext;
+  const existingContext = useContext(context);
+  if (existingContext) {
+    throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage4(35) : "Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.");
+  }
+  const [store] = React.useState(() => configureStore({
+    reducer: {
+      [props.api.reducerPath]: props.api.reducer
+    },
+    middleware: (gDM) => gDM().concat(props.api.middleware)
+  }));
+  useEffect4(() => props.setupListeners === false ? void 0 : setupListeners(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]);
+  return /* @__PURE__ */ React.createElement(Provider, { store, context }, props.children);
+}
+
+// src/query/react/index.ts
+var createApi = /* @__PURE__ */ buildCreateApi(coreModule(), reactHooksModule());
+export {
+  ApiProvider,
+  UNINITIALIZED_VALUE,
+  createApi,
+  reactHooksModule,
+  reactHooksModuleName
+};
+//# sourceMappingURL=rtk-query-react.modern.mjs.map
Index: node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.modern.mjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.modern.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/react/rtk-query-react.modern.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../../src/query/react/index.ts","../../../src/query/react/module.ts","../../../src/query/utils/capitalize.ts","../../../src/query/utils/countObjectKeys.ts","../../../src/query/endpointDefinitions.ts","../../../src/query/tsHelpers.ts","../../../src/query/react/buildHooks.ts","../../../src/query/react/constants.ts","../../../src/query/react/useSerializedStableValue.ts","../../../src/query/react/useShallowStableValue.ts","../../../src/query/react/ApiProvider.tsx"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nimport { buildCreateApi, coreModule } from '@reduxjs/toolkit/query';\nimport { reactHooksModule, reactHooksModuleName } from './module';\nexport * from '@reduxjs/toolkit/query';\nexport { ApiProvider } from './ApiProvider';\nconst createApi = /* @__PURE__ */buildCreateApi(coreModule(), reactHooksModule());\nexport type { TypedUseMutationResult, TypedUseQueryHookResult, TypedUseQueryStateResult, TypedUseQuerySubscriptionResult, TypedLazyQueryTrigger, TypedUseLazyQuery, TypedUseMutation, TypedMutationTrigger, TypedQueryStateSelector, TypedUseQueryState, TypedUseQuery, TypedUseQuerySubscription, TypedUseLazyQuerySubscription, TypedUseQueryStateOptions, TypedUseLazyQueryStateResult, TypedUseInfiniteQuery, TypedUseInfiniteQueryHookResult, TypedUseInfiniteQueryStateResult, TypedUseInfiniteQuerySubscriptionResult, TypedUseInfiniteQueryStateOptions, TypedInfiniteQueryStateSelector, TypedUseInfiniteQuerySubscription, TypedUseInfiniteQueryState, TypedLazyInfiniteQueryTrigger } from './buildHooks';\nexport { UNINITIALIZED_VALUE } from './constants';\nexport { createApi, reactHooksModule, reactHooksModuleName };","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Api, BaseQueryFn, EndpointDefinitions, InfiniteQueryDefinition, Module, MutationDefinition, PrefetchOptions, QueryArgFrom, QueryDefinition, QueryKeys } from '@reduxjs/toolkit/query';\nimport { batch as rrBatch, useDispatch as rrUseDispatch, useSelector as rrUseSelector, useStore as rrUseStore } from 'react-redux';\nimport { createSelector as _createSelector } from 'reselect';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { safeAssign } from '../tsHelpers';\nimport { capitalize, countObjectKeys } from '../utils';\nimport type { InfiniteQueryHooks, MutationHooks, QueryHooks } from './buildHooks';\nimport { buildHooks } from './buildHooks';\nimport type { HooksWithUniqueNames } from './namedHooks';\nexport const reactHooksModuleName = /* @__PURE__ */Symbol();\nexport type ReactHooksModule = typeof reactHooksModuleName;\ndeclare module '@reduxjs/toolkit/query' {\n  export interface ApiModules<\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  ReducerPath extends string,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  TagTypes extends string> {\n    [reactHooksModuleName]: {\n      /**\n       *  Endpoints based on the input endpoints provided to `createApi`, containing `select`, `hooks` and `action matchers`.\n       */\n      endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? QueryHooks<Definitions[K]> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? MutationHooks<Definitions[K]> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryHooks<Definitions[K]> : never };\n      /**\n       * A hook that accepts a string endpoint name, and provides a callback that when called, pre-fetches the data for that endpoint.\n       */\n      usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, options?: PrefetchOptions): (arg: QueryArgFrom<Definitions[EndpointName]>, options?: PrefetchOptions) => void;\n    } & HooksWithUniqueNames<Definitions>;\n  }\n}\ntype RR = typeof import('react-redux');\nexport interface ReactHooksModuleOptions {\n  /**\n   * The hooks from React Redux to be used\n   */\n  hooks?: {\n    /**\n     * The version of the `useDispatch` hook to be used\n     */\n    useDispatch: RR['useDispatch'];\n    /**\n     * The version of the `useSelector` hook to be used\n     */\n    useSelector: RR['useSelector'];\n    /**\n     * The version of the `useStore` hook to be used\n     */\n    useStore: RR['useStore'];\n  };\n  /**\n   * The version of the `batchedUpdates` function to be used\n   */\n  batch?: RR['batch'];\n  /**\n   * Enables performing asynchronous tasks immediately within a render.\n   *\n   * @example\n   *\n   * ```ts\n   * import {\n   *   buildCreateApi,\n   *   coreModule,\n   *   reactHooksModule\n   * } from '@reduxjs/toolkit/query/react'\n   *\n   * const createApi = buildCreateApi(\n   *   coreModule(),\n   *   reactHooksModule({ unstable__sideEffectsInRender: true })\n   * )\n   * ```\n   */\n  unstable__sideEffectsInRender?: boolean;\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module that generates react hooks from endpoints, for use with `buildCreateApi`.\n *\n *  @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @returns A module for use with `buildCreateApi`\n */\nexport const reactHooksModule = ({\n  batch = rrBatch,\n  hooks = {\n    useDispatch: rrUseDispatch,\n    useSelector: rrUseSelector,\n    useStore: rrUseStore\n  },\n  createSelector = _createSelector,\n  unstable__sideEffectsInRender = false,\n  ...rest\n}: ReactHooksModuleOptions = {}): Module<ReactHooksModule> => {\n  if (process.env.NODE_ENV !== 'production') {\n    const hookNames = ['useDispatch', 'useSelector', 'useStore'] as const;\n    let warned = false;\n    for (const hookName of hookNames) {\n      // warn for old hook options\n      if (countObjectKeys(rest) > 0) {\n        if ((rest as Partial<typeof hooks>)[hookName]) {\n          if (!warned) {\n            console.warn('As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:' + '\\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`');\n            warned = true;\n          }\n        }\n        // migrate\n        // @ts-ignore\n        hooks[hookName] = rest[hookName];\n      }\n      // then make sure we have them all\n      if (typeof hooks[hookName] !== 'function') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(36) : `When using custom hooks for context, all ${hookNames.length} hooks need to be provided: ${hookNames.join(', ')}.\\nHook ${hookName} was either not provided or not a function.`);\n      }\n    }\n  }\n  return {\n    name: reactHooksModuleName,\n    init(api, {\n      serializeQueryArgs\n    }, context) {\n      const anyApi = api as any as Api<any, Record<string, any>, any, any, ReactHooksModule>;\n      const {\n        buildQueryHooks,\n        buildInfiniteQueryHooks,\n        buildMutationHook,\n        usePrefetch\n      } = buildHooks({\n        api,\n        moduleOptions: {\n          batch,\n          hooks,\n          unstable__sideEffectsInRender,\n          createSelector\n        },\n        serializeQueryArgs,\n        context\n      });\n      safeAssign(anyApi, {\n        usePrefetch\n      });\n      safeAssign(context, {\n        batch\n      });\n      return {\n        injectEndpoint(endpointName, definition) {\n          if (isQueryDefinition(definition)) {\n            const {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            } = buildQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useQuery,\n              useLazyQuery,\n              useLazyQuerySubscription,\n              useQueryState,\n              useQuerySubscription\n            });\n            (api as any)[`use${capitalize(endpointName)}Query`] = useQuery;\n            (api as any)[`useLazy${capitalize(endpointName)}Query`] = useLazyQuery;\n          }\n          if (isMutationDefinition(definition)) {\n            const useMutation = buildMutationHook(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useMutation\n            });\n            (api as any)[`use${capitalize(endpointName)}Mutation`] = useMutation;\n          } else if (isInfiniteQueryDefinition(definition)) {\n            const {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            } = buildInfiniteQueryHooks(endpointName);\n            safeAssign(anyApi.endpoints[endpointName], {\n              useInfiniteQuery,\n              useInfiniteQuerySubscription,\n              useInfiniteQueryState\n            });\n            (api as any)[`use${capitalize(endpointName)}InfiniteQuery`] = useInfiniteQuery;\n          }\n        }\n      };\n    }\n  };\n};","export function capitalize(str: string) {\n  return str.replace(str[0], str[0].toUpperCase());\n}","// Fast method for counting an object's keys\n// without resorting to `Object.keys(obj).length\n// Will this make a big difference in perf? Probably not\n// But we can save a few allocations.\n\nexport function countObjectKeys(obj: Record<any, any>) {\n  let count = 0;\n  for (const _key in obj) {\n    count++;\n  }\n  return count;\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Selector, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Api, ApiContext, ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, BaseQueryFn, CoreModule, EndpointDefinitions, InfiniteQueryActionCreatorResult, InfiniteQueryArgFrom, InfiniteQueryDefinition, InfiniteQueryResultSelectorResult, InfiniteQuerySubState, MutationActionCreatorResult, MutationDefinition, MutationResultSelectorResult, PageParamFrom, PrefetchOptions, QueryActionCreatorResult, QueryArgFrom, QueryCacheKey, QueryDefinition, QueryKeys, QueryResultSelectorResult, QuerySubState, ResultTypeFrom, RootState, SerializeQueryArgs, SkipToken, SubscriptionOptions, TSHelpersId, TSHelpersNoInfer, TSHelpersOverride } from '@reduxjs/toolkit/query';\nimport { defaultSerializeQueryArgs, QueryStatus, skipToken } from '@reduxjs/toolkit/query';\nimport type { DependencyList } from 'react';\nimport { useCallback, useDebugValue, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport type { SubscriptionSelectors } from '../core/buildMiddleware/index';\nimport type { InfiniteData, InfiniteQueryConfigOptions } from '../core/index';\nimport type { UninitializedValue } from './constants';\nimport { UNINITIALIZED_VALUE } from './constants';\nimport type { ReactHooksModuleOptions } from './module';\nimport { useStableQueryArgs } from './useSerializedStableValue';\nimport { useShallowStableValue } from './useShallowStableValue';\nimport type { InfiniteQueryDirection } from '../core/apiState';\nimport { isInfiniteQueryDefinition } from '../endpointDefinitions';\nimport type { StartInfiniteQueryActionCreator } from '../core/buildInitiate';\n\n// Copy-pasted from React-Redux\nconst canUseDOM = () => !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nconst isDOM = /* @__PURE__ */canUseDOM();\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\nconst isRunningInReactNative = () => typeof navigator !== 'undefined' && navigator.product === 'ReactNative';\nconst isReactNative = /* @__PURE__ */isRunningInReactNative();\nconst getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? useLayoutEffect : useEffect;\nexport const useIsomorphicLayoutEffect = /* @__PURE__ */getUseIsomorphicLayoutEffect();\nexport type QueryHooks<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  useQuery: UseQuery<Definition>;\n  useLazyQuery: UseLazyQuery<Definition>;\n  useQuerySubscription: UseQuerySubscription<Definition>;\n  useLazyQuerySubscription: UseLazyQuerySubscription<Definition>;\n  useQueryState: UseQueryState<Definition>;\n};\nexport type InfiniteQueryHooks<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  useInfiniteQuery: UseInfiniteQuery<Definition>;\n  useInfiniteQuerySubscription: UseInfiniteQuerySubscription<Definition>;\n  useInfiniteQueryState: UseInfiniteQueryState<Definition>;\n};\nexport type MutationHooks<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  useMutation: UseMutation<Definition>;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n * This hook combines the functionality of both [`useQueryState`](#usequerystate) and [`useQuerySubscription`](#usequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions & UseQueryStateOptions<D, R>) => UseQueryHookResult<D, R>;\nexport type TypedUseQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQueryHookResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & UseQuerySubscriptionResult<D>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuery` hook in userland code.\n */\nexport type TypedUseQueryHookResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery, R> & TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery>;\nexport type UseQuerySubscriptionOptions = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n};\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useQuery`](#usequery) or [`useQueryState`](#usequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (arg: QueryArgFrom<D> | SkipToken, options?: UseQuerySubscriptionOptions) => UseQuerySubscriptionResult<D>;\nexport type TypedUseQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseQuerySubscriptionResult<D extends QueryDefinition<any, any, any, any>> = Pick<QueryActionCreatorResult<D>, 'refetch'>;\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQuerySubscriptionResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryLastPromiseInfo<D extends QueryDefinition<any, any, any, any>> = {\n  lastArg: QueryArgFrom<D>;\n};\n\n/**\n * A React hook similar to [`useQuery`](#usequery), but with manual control over when the data fetching occurs.\n *\n * This hook includes the functionality of [`useLazyQuerySubscription`](#uselazyquerysubscription).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n *\n * #### Note\n *\n * When the trigger function returned from a LazyQuery is called, it always initiates a new request to the server even if there is cached data. Set `preferCacheValue`(the second argument to the function) as `true` if you want it to immediately return a cached value if one exists.\n */\nexport type UseLazyQuery<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(options?: SubscriptionOptions & Omit<UseQueryStateOptions<D, R>, 'skip'>) => [LazyQueryTrigger<D>, UseLazyQueryStateResult<D, R>, UseLazyQueryLastPromiseInfo<D>];\nexport type TypedUseLazyQuery<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type UseLazyQueryStateResult<D extends QueryDefinition<any, any, any, any>, R = UseQueryStateDefaultResult<D>> = UseQueryStateResult<D, R> & {\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useLazyQuery` hook in userland code.\n */\nexport type TypedUseLazyQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseLazyQueryStateResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\nexport type LazyQueryTrigger<D extends QueryDefinition<any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, preferCacheValue?: boolean): QueryActionCreatorResult<D>;\n};\nexport type TypedLazyQueryTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = LazyQueryTrigger<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook similar to [`useQuerySubscription`](#usequerysubscription), but with manual control over when the data fetching occurs.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useLazyQuery`](#uselazyquery).\n *\n * #### Features\n *\n * - Manual control over firing a request to retrieve data\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once\n */\nexport type UseLazyQuerySubscription<D extends QueryDefinition<any, any, any, any>> = (options?: SubscriptionOptions) => readonly [LazyQueryTrigger<D>, QueryArgFrom<D> | UninitializedValue, {\n  reset: () => void;\n}];\nexport type TypedUseLazyQuerySubscription<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseLazyQuerySubscription<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type QueryStateSelector<R extends Record<string, any>, D extends QueryDefinition<any, any, any, any>> = (state: UseQueryStateDefaultResult<D>) => R;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryStateSelector} for use with a specific query.\n * This is useful for scenarios where you want to create a \"pre-typed\"\n * {@linkcode UseQueryStateOptions.selectFromResult | selectFromResult}\n * function.\n *\n * @example\n * <caption>#### __Create a strongly-typed `selectFromResult` selector function__</caption>\n *\n * ```tsx\n * import type { TypedQueryStateSelector } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   title: string\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * type SelectedResult = Pick<PostsApiResponse, 'posts'>\n *\n * const postsApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com/posts' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, QueryArgument>({\n *       query: (limit = 5) => `?limit=${limit}&select=title`,\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = postsApiSlice\n *\n * function PostById({ id }: { id: number }) {\n *   const { post } = useGetPostsQuery(undefined, {\n *     selectFromResult: (state) => ({\n *       post: state.data?.posts.find((post) => post.id === id),\n *     }),\n *   })\n *\n *   return <li>{post?.title}</li>\n * }\n *\n * const EMPTY_ARRAY: Post[] = []\n *\n * const typedSelectFromResult: TypedQueryStateSelector<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   SelectedResult\n * > = (state) => ({ posts: state.data?.posts ?? EMPTY_ARRAY })\n *\n * function PostsList() {\n *   const { posts } = useGetPostsQuery(undefined, {\n *     selectFromResult: typedSelectFromResult,\n *   })\n *\n *   return (\n *     <div>\n *       <ul>\n *         {posts.map((post) => (\n *           <PostById key={post.id} id={post.id} />\n *         ))}\n *       </ul>\n *     </div>\n *   )\n * }\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template SelectedResultType - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.3.0\n * @public\n */\nexport type TypedQueryStateSelector<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, SelectedResultType extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>> = QueryStateSelector<SelectedResultType, QueryDefinition<QueryArgumentType, BaseQueryFunctionType, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useQuery`](#usequery) or [`useQuerySubscription`](#usequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseQueryState<D extends QueryDefinition<any, any, any, any>> = <R extends Record<string, any> = UseQueryStateDefaultResult<D>>(arg: QueryArgFrom<D> | SkipToken, options?: UseQueryStateOptions<D, R>) => UseQueryStateResult<D, R>;\nexport type TypedUseQueryState<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseQueryState<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * @internal\n */\nexport type UseQueryStateOptions<D extends QueryDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: QueryStateSelector<R, D>;\n};\n\n/**\n * Provides a way to define a \"pre-typed\" version of\n * {@linkcode UseQueryStateOptions} with specific options for a given query.\n * This is particularly useful for setting default query behaviors such as\n * refetching strategies, which can be overridden as needed.\n *\n * @example\n * <caption>#### __Create a `useQuery` hook with default options__</caption>\n *\n * ```ts\n * import type {\n *   SubscriptionOptions,\n *   TypedUseQueryStateOptions,\n * } from '@reduxjs/toolkit/query/react'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n *\n * type Post = {\n *   id: number\n *   name: string\n * }\n *\n * const api = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n *   tagTypes: ['Post'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<Post[], void>({\n *       query: () => 'posts',\n *     }),\n *   }),\n * })\n *\n * const { useGetPostsQuery } = api\n *\n * export const useGetPostsQueryWithDefaults = <\n *   SelectedResult extends Record<string, any>,\n * >(\n *   overrideOptions: TypedUseQueryStateOptions<\n *     Post[],\n *     void,\n *     ReturnType<typeof fetchBaseQuery>,\n *     SelectedResult\n *   > &\n *     SubscriptionOptions,\n * ) =>\n *   useGetPostsQuery(undefined, {\n *     // Insert default options here\n *\n *     refetchOnMountOrArgChange: true,\n *     refetchOnFocus: true,\n *     ...overrideOptions,\n *   })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArg - The type of the argument passed into the query.\n * @template BaseQuery - The type of the base query function being used.\n * @template SelectedResult - The type of the selected result returned by the __`selectFromResult`__ function.\n *\n * @since 2.2.8\n * @public\n */\nexport type TypedUseQueryStateOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseQueryStateOptions<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseQueryStateResult<_ extends QueryDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R>;\n\n/**\n * Helper type to manually type the result\n * of the `useQueryState` hook in userland code.\n */\nexport type TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = UseQueryStateDefaultResult<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = TSHelpersNoInfer<R>;\ntype UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> = QuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: ResultTypeFrom<D>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n};\ntype UseQueryStateDefaultResult<D extends QueryDefinition<any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type LazyInfiniteQueryTrigger<D extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  /**\n   * Triggers a lazy query.\n   *\n   * By default, this will start a new request even if there is already a value in the cache.\n   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await getUserById(1).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>, direction: InfiniteQueryDirection): InfiniteQueryActionCreatorResult<D>;\n};\nexport type TypedLazyInfiniteQueryTrigger<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = LazyInfiniteQueryTrigger<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SubscriptionOptions & {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When `skip` is true (or `skipToken` is passed in as `arg`):\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```tsx\n   * // codeblock-meta no-transpile title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  initialPageParam?: PageParamFrom<D>;\n};\nexport type TypedUseInfiniteQuerySubscription<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscription<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type UseInfiniteQuerySubscriptionResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = Pick<InfiniteQueryActionCreatorResult<D>, 'refetch'> & {\n  trigger: LazyInfiniteQueryTrigger<D>;\n  fetchNextPage: () => InfiniteQueryActionCreatorResult<D>;\n  fetchPreviousPage: () => InfiniteQueryActionCreatorResult<D>;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useQuerySubscription` hook in userland code.\n */\nexport type TypedUseInfiniteQuerySubscriptionResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuerySubscriptionResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\nexport type InfiniteQueryStateSelector<R extends Record<string, any>, D extends InfiniteQueryDefinition<any, any, any, any, any>> = (state: UseInfiniteQueryStateDefaultResult<D>) => R;\nexport type TypedInfiniteQueryStateSelector<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = InfiniteQueryStateSelector<SelectedResult, InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.  Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.\n *\n *  The `data` field will be a `{pages: Data[], pageParams: PageParam[]}` structure containing all fetched page responses and the corresponding page param values for each page. You may use this to render individual pages, combine all pages into a single infinite list, or other display logic as needed.\n *\n * This hook combines the functionality of both [`useInfiniteQueryState`](#useinfinitequerystate) and [`useInfiniteQuerySubscription`](#useinfinitequerysubscription) together, and is intended to be used in the majority of situations.\n *\n * As with normal query hooks, `skipToken` is a valid argument that will skip the query from executing.\n *\n * By default, the initial request will use the `initialPageParam` value that was defined on the infinite query endpoint. If you want to start from a different value, you can pass `initialPageParam` as part of the hook options to override that initial request value.\n *\n * Use the returned `fetchNextPage` and `fetchPreviousPage` methods on the hook result object to trigger fetches forwards and backwards. These will always calculate the next or previous page param based on the current cached pages and the provided `getNext/PreviousPageParam` callbacks defined in the endpoint.\n *\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQuery<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D> & UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryHookResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'fetchNextPage' | 'fetchPreviousPage'>;\nexport type TypedUseInfiniteQuery<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQuery<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.\n *\n * Note that this hook does not trigger fetching new data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQuerySubscription`](#useinfinitequerysubscription).\n *\n * #### Features\n *\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseInfiniteQueryState<D extends InfiniteQueryDefinition<any, any, any, any, any>> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQueryStateOptions<D, R>) => UseInfiniteQueryStateResult<D, R>;\nexport type TypedUseInfiniteQueryState<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn> = UseInfiniteQueryState<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>;\n\n/**\n * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data. Additionally, it will cache multiple \"pages\" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.\n *\n * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.\n *\n * Note that this hook does not return a request status or cached data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQueryState`](#useinfinitequerystate).\n *\n * #### Features\n *\n * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards\n * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met\n */\nexport type UseInfiniteQuerySubscription<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D> | SkipToken, options?: UseInfiniteQuerySubscriptionOptions<D>) => UseInfiniteQuerySubscriptionResult<D>;\nexport type UseInfiniteQueryHookResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = UseInfiniteQueryStateResult<D, R> & Pick<UseInfiniteQuerySubscriptionResult<D>, 'refetch'>;\nexport type TypedUseInfiniteQueryHookResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryHookResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\nexport type UseInfiniteQueryStateOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>, R extends Record<string, any>> = {\n  /**\n   * Prevents a query from automatically running.\n   *\n   * @remarks\n   * When skip is true:\n   *\n   * - **If the query has cached data:**\n   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed\n   *   * The query will have a status of `uninitialized`\n   *   * If `skip: false` is set after skipping the initial load, the cached result will be used\n   * - **If the query does not have cached data:**\n   *   * The query will have a status of `uninitialized`\n   *   * The query will not exist in the state when viewed with the dev tools\n   *   * The query will not automatically fetch on mount\n   *   * The query will not automatically run when additional components with the same query are added that do run\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Skip example\"\n   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {\n   *   const { data, error, status } = useGetPokemonByNameQuery(name, {\n   *     skip,\n   *   });\n   *\n   *   return (\n   *     <div>\n   *       {name} - {status}\n   *     </div>\n   *   );\n   * };\n   * ```\n   */\n  skip?: boolean;\n  /**\n   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.\n   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.\n   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.\n   * Note that this should always return an object (not a primitive), as RTKQ adds fields to the return value.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using selectFromResult to extract a single result\"\n   * function PostsList() {\n   *   const { data: posts } = api.useGetPostsQuery();\n   *\n   *   return (\n   *     <ul>\n   *       {posts?.data?.map((post) => (\n   *         <PostById key={post.id} id={post.id} />\n   *       ))}\n   *     </ul>\n   *   );\n   * }\n   *\n   * function PostById({ id }: { id: number }) {\n   *   // Will select the post with the given id, and will only rerender if the given posts data changes\n   *   const { post } = api.useGetPostsQuery(undefined, {\n   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),\n   *   });\n   *\n   *   return <li>{post?.name}</li>;\n   * }\n   * ```\n   */\n  selectFromResult?: InfiniteQueryStateSelector<R, D>;\n};\nexport type TypedUseInfiniteQueryStateOptions<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, SelectedResult extends Record<string, any> = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateOptions<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, SelectedResult>;\nexport type UseInfiniteQueryStateResult<D extends InfiniteQueryDefinition<any, any, any, any, any>, R = UseInfiniteQueryStateDefaultResult<D>> = TSHelpersNoInfer<R>;\nexport type TypedUseInfiniteQueryStateResult<ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, R = UseInfiniteQueryStateDefaultResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>>> = UseInfiniteQueryStateResult<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, string, ResultType, string>, R>;\ntype UseInfiniteQueryStateBaseResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<D> & {\n  /**\n   * Where `data` tries to hold data as much as possible, also re-using\n   * data from the last arguments passed into the hook, this property\n   * will always contain the received data from the query, for the current query arguments.\n   */\n  currentData?: InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>;\n  /**\n   * Query has not started yet.\n   */\n  isUninitialized: false;\n  /**\n   * Query is currently loading for the first time. No data yet.\n   */\n  isLoading: false;\n  /**\n   * Query is currently fetching, but might have data from an earlier request.\n   */\n  isFetching: false;\n  /**\n   * Query has data from a successful load.\n   */\n  isSuccess: false;\n  /**\n   * Query is currently in \"error\" state.\n   */\n  isError: false;\n  hasNextPage: false;\n  hasPreviousPage: false;\n  isFetchingNextPage: false;\n  isFetchingPreviousPage: false;\n};\ntype UseInfiniteQueryStateDefaultResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = TSHelpersId<TSHelpersOverride<Extract<UseInfiniteQueryStateBaseResult<D>, {\n  status: QueryStatus.uninitialized;\n}>, {\n  isUninitialized: true;\n}> | TSHelpersOverride<UseInfiniteQueryStateBaseResult<D>, {\n  isLoading: true;\n  isFetching: boolean;\n  data: undefined;\n} | ({\n  isSuccess: true;\n  isFetching: true;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>>) | ({\n  isSuccess: true;\n  isFetching: false;\n  error: undefined;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp' | 'currentData'>>) | ({\n  isError: true;\n} & Required<Pick<UseInfiniteQueryStateBaseResult<D>, 'error'>>)>> & {\n  /**\n   * @deprecated Included for completeness, but discouraged.\n   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`\n   * and `isUninitialized` flags instead\n   */\n  status: QueryStatus;\n};\nexport type MutationStateSelector<R extends Record<string, any>, D extends MutationDefinition<any, any, any, any>> = (state: MutationResultSelectorResult<D>) => R;\nexport type UseMutationStateOptions<D extends MutationDefinition<any, any, any, any>, R extends Record<string, any>> = {\n  selectFromResult?: MutationStateSelector<R, D>;\n  fixedCacheKey?: string;\n};\nexport type UseMutationStateResult<D extends MutationDefinition<any, any, any, any>, R> = TSHelpersNoInfer<R> & {\n  originalArgs?: QueryArgFrom<D>;\n  /**\n   * Resets the hook state to its initial `uninitialized` state.\n   * This will also remove the last result from the cache.\n   */\n  reset: () => void;\n};\n\n/**\n * Helper type to manually type the result\n * of the `useMutation` hook in userland code.\n */\nexport type TypedUseMutationResult<ResultType, QueryArg, BaseQuery extends BaseQueryFn, R = MutationResultSelectorResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>> = UseMutationStateResult<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>, R>;\n\n/**\n * A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.\n *\n * #### Features\n *\n * - Manual control over firing a request to alter data on the server or possibly invalidate the cache\n * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts\n * - Returns the latest request status and cached data from the Redux store\n * - Re-renders as the request status changes and data becomes available\n */\nexport type UseMutation<D extends MutationDefinition<any, any, any, any>> = <R extends Record<string, any> = MutationResultSelectorResult<D>>(options?: UseMutationStateOptions<D, R>) => readonly [MutationTrigger<D>, UseMutationStateResult<D, R>];\nexport type TypedUseMutation<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = UseMutation<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\nexport type MutationTrigger<D extends MutationDefinition<any, any, any, any>> = {\n  /**\n   * Triggers the mutation and returns a Promise.\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  (arg: QueryArgFrom<D>): MutationActionCreatorResult<D>;\n};\nexport type TypedMutationTrigger<ResultType, QueryArg, BaseQuery extends BaseQueryFn> = MutationTrigger<MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>>;\n\n/**\n * Wrapper around `defaultQueryStateSelector` to be used in `useQuery`.\n * We want the initial render to already come back with\n * `{ isUninitialized: false, isFetching: true, isLoading: true }`\n * to prevent that the library user has to do an additional check for `isUninitialized`/\n */\nconst noPendingQueryStateSelector: QueryStateSelector<any, any> = selected => {\n  if (selected.isUninitialized) {\n    return {\n      ...selected,\n      isUninitialized: false,\n      isFetching: true,\n      isLoading: selected.data !== undefined ? false : true,\n      status: QueryStatus.pending\n    } as any;\n  }\n  return selected;\n};\nfunction pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {\n  const ret: any = {};\n  keys.forEach(key => {\n    ret[key] = obj[key];\n  });\n  return ret;\n}\nconst COMMON_HOOK_DEBUG_FIELDS = ['data', 'status', 'isLoading', 'isSuccess', 'isError', 'error'] as const;\ntype GenericPrefetchThunk = (endpointName: any, arg: any, options: PrefetchOptions) => ThunkAction<void, any, any, UnknownAction>;\n\n/**\n *\n * @param opts.api - An API with defined endpoints to create hooks for\n * @param opts.moduleOptions.batch - The version of the `batchedUpdates` function to be used\n * @param opts.moduleOptions.useDispatch - The version of the `useDispatch` hook to be used\n * @param opts.moduleOptions.useSelector - The version of the `useSelector` hook to be used\n * @returns An object containing functions to generate hooks based on an endpoint\n */\nexport function buildHooks<Definitions extends EndpointDefinitions>({\n  api,\n  moduleOptions: {\n    batch,\n    hooks: {\n      useDispatch,\n      useSelector,\n      useStore\n    },\n    unstable__sideEffectsInRender,\n    createSelector\n  },\n  serializeQueryArgs,\n  context\n}: {\n  api: Api<any, Definitions, any, any, CoreModule>;\n  moduleOptions: Required<ReactHooksModuleOptions>;\n  serializeQueryArgs: SerializeQueryArgs<any>;\n  context: ApiContext<Definitions>;\n}) {\n  const usePossiblyImmediateEffect: (effect: () => void | undefined, deps?: DependencyList) => void = unstable__sideEffectsInRender ? cb => cb() : useEffect;\n  return {\n    buildQueryHooks,\n    buildInfiniteQueryHooks,\n    buildMutationHook,\n    usePrefetch\n  };\n  function queryStatePreSelector(currentState: QueryResultSelectorResult<any>, lastResult: UseQueryStateDefaultResult<any> | undefined, queryArgs: any): UseQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n\n    // isSuccess = true when data is present and we're not refetching after an error.\n    // That includes cases where the _current_ item is either actively\n    // fetching or about to fetch due to an uninitialized entry.\n    const isSuccess = currentState.isSuccess || hasData && (isFetching && !lastResult?.isError || currentState.isUninitialized);\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseQueryStateDefaultResult<any>;\n  }\n  function infiniteQueryStatePreSelector(currentState: InfiniteQueryResultSelectorResult<any>, lastResult: UseInfiniteQueryStateDefaultResult<any> | undefined, queryArgs: any): UseInfiniteQueryStateDefaultResult<any> {\n    // if we had a last result and the current result is uninitialized,\n    // we might have called `api.util.resetApiState`\n    // in this case, reset the hook\n    if (lastResult?.endpointName && currentState.isUninitialized) {\n      const {\n        endpointName\n      } = lastResult;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      if (queryArgs !== skipToken && serializeQueryArgs({\n        queryArgs: lastResult.originalArgs,\n        endpointDefinition,\n        endpointName\n      }) === serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      })) lastResult = undefined;\n    }\n\n    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args\n    let data = currentState.isSuccess ? currentState.data : lastResult?.data;\n    if (data === undefined) data = currentState.data;\n    const hasData = data !== undefined;\n\n    // isFetching = true any time a request is in flight\n    const isFetching = currentState.isLoading;\n    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)\n    const isLoading = (!lastResult || lastResult.isLoading || lastResult.isUninitialized) && !hasData && isFetching;\n    // isSuccess = true when data is present\n    const isSuccess = currentState.isSuccess || isFetching && hasData;\n    return {\n      ...currentState,\n      data,\n      currentData: currentState.data,\n      isFetching,\n      isLoading,\n      isSuccess\n    } as UseInfiniteQueryStateDefaultResult<any>;\n  }\n  function usePrefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, defaultOptions?: PrefetchOptions) {\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n    const stableDefaultOptions = useShallowStableValue(defaultOptions);\n    return useCallback((arg: any, options?: PrefetchOptions) => dispatch((api.util.prefetch as GenericPrefetchThunk)(endpointName, arg, {\n      ...stableDefaultOptions,\n      ...options\n    })), [endpointName, dispatch, stableDefaultOptions]);\n  }\n  function useQuerySubscriptionCommonImpl<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(endpointName: string, arg: unknown | SkipToken, {\n    refetchOnReconnect,\n    refetchOnFocus,\n    refetchOnMountOrArgChange,\n    skip = false,\n    pollingInterval = 0,\n    skipPollingIfUnfocused = false,\n    ...rest\n  }: UseQuerySubscriptionOptions = {}) {\n    const {\n      initiate\n    } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n\n    // TODO: Change this to `useRef<SubscriptionSelectors>(undefined)` after upgrading to React 19.\n    const subscriptionSelectorsRef = useRef<SubscriptionSelectors | undefined>(undefined);\n    if (!subscriptionSelectorsRef.current) {\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(37) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\n    You must add the middleware for RTK-Query to function correctly!`);\n        }\n      }\n      subscriptionSelectorsRef.current = returnedValue as unknown as SubscriptionSelectors;\n    }\n    const stableArg = useStableQueryArgs(skip ? skipToken : arg,\n    // Even if the user provided a per-endpoint `serializeQueryArgs` with\n    // a consistent return value, _here_ we want to use the default behavior\n    // so we can tell if _anything_ actually changed. Otherwise, we can end up\n    // with a case where the query args did change but the serialization doesn't,\n    // and then we never try to initiate a refetch.\n    defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n    const stableSubscriptionOptions = useShallowStableValue({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval,\n      skipPollingIfUnfocused\n    });\n    const initialPageParam = (rest as UseInfiniteQuerySubscriptionOptions<any>).initialPageParam;\n    const stableInitialPageParam = useShallowStableValue(initialPageParam);\n\n    /**\n     * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n     */\n    const promiseRef = useRef<T | undefined>(undefined);\n    let {\n      queryCacheKey,\n      requestId\n    } = promiseRef.current || {};\n\n    // HACK We've saved the middleware subscription lookup callbacks into a ref,\n    // so we can directly check here if the subscription exists for this query.\n    let currentRenderHasSubscription = false;\n    if (queryCacheKey && requestId) {\n      currentRenderHasSubscription = subscriptionSelectorsRef.current.isRequestSubscribed(queryCacheKey, requestId);\n    }\n    const subscriptionRemoved = !currentRenderHasSubscription && promiseRef.current !== undefined;\n    usePossiblyImmediateEffect((): void | undefined => {\n      if (subscriptionRemoved) {\n        promiseRef.current = undefined;\n      }\n    }, [subscriptionRemoved]);\n    usePossiblyImmediateEffect((): void | undefined => {\n      const lastPromise = promiseRef.current;\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'removeMeOnCompilation') {\n        // this is only present to enforce the rule of hooks to keep `isSubscribed` in the dependency array\n        console.log(subscriptionRemoved);\n      }\n      if (stableArg === skipToken) {\n        lastPromise?.unsubscribe();\n        promiseRef.current = undefined;\n        return;\n      }\n      const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n      if (!lastPromise || lastPromise.arg !== stableArg) {\n        lastPromise?.unsubscribe();\n        const promise = dispatch(initiate(stableArg, {\n          subscriptionOptions: stableSubscriptionOptions,\n          forceRefetch: refetchOnMountOrArgChange,\n          ...(isInfiniteQueryDefinition(context.endpointDefinitions[endpointName]) ? {\n            initialPageParam: stableInitialPageParam\n          } : {})\n        }));\n        promiseRef.current = promise as T;\n      } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n        lastPromise.updateSubscriptionOptions(stableSubscriptionOptions);\n      }\n    }, [dispatch, initiate, refetchOnMountOrArgChange, stableArg, stableSubscriptionOptions, subscriptionRemoved, stableInitialPageParam, endpointName]);\n    return [promiseRef, dispatch, initiate, stableSubscriptionOptions] as const;\n  }\n  function buildUseQueryState(endpointName: string, preSelector: typeof queryStatePreSelector | typeof infiniteQueryStatePreSelector) {\n    const useQueryState = (arg: any, {\n      skip = false,\n      selectFromResult\n    }: UseQueryStateOptions<any, any> | UseInfiniteQueryStateOptions<any, any> = {}) => {\n      const {\n        select\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const stableArg = useStableQueryArgs(skip ? skipToken : arg, serializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      type ApiRootState = Parameters<ReturnType<typeof select>>[0];\n      const lastValue = useRef<any>(undefined);\n      const selectDefaultResult: Selector<ApiRootState, any, [any]> = useMemo(() =>\n      // Normally ts-ignores are bad and should be avoided, but we're\n      // already casting this selector to be `Selector<any>` anyway,\n      // so the inconsistencies don't matter here\n      // @ts-ignore\n      createSelector([\n      // @ts-ignore\n      select(stableArg), (_: ApiRootState, lastResult: any) => lastResult, (_: ApiRootState) => stableArg], preSelector, {\n        memoizeOptions: {\n          resultEqualityCheck: shallowEqual\n        }\n      }), [select, stableArg]);\n      const querySelector: Selector<ApiRootState, any, [any]> = useMemo(() => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, {\n        devModeChecks: {\n          identityFunctionCheck: 'never'\n        }\n      }) : selectDefaultResult, [selectDefaultResult, selectFromResult]);\n      const currentState = useSelector((state: RootState<Definitions, any, any>) => querySelector(state, lastValue.current), shallowEqual);\n      const store = useStore<RootState<Definitions, any, any>>();\n      const newLastValue = selectDefaultResult(store.getState(), lastValue.current);\n      useIsomorphicLayoutEffect(() => {\n        lastValue.current = newLastValue;\n      }, [newLastValue]);\n      return currentState;\n    };\n    return useQueryState;\n  }\n  function usePromiseRefUnsubscribeOnUnmount(promiseRef: React.RefObject<{\n    unsubscribe?: () => void;\n  } | undefined>) {\n    useEffect(() => {\n      return () => {\n        promiseRef.current?.unsubscribe?.()\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        ;\n        (promiseRef.current as any) = undefined;\n      };\n    }, [promiseRef]);\n  }\n  function refetchOrErrorIfUnmounted<T extends QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>(promiseRef: React.RefObject<T | undefined>): T {\n    if (!promiseRef.current) throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(38) : 'Cannot refetch a query that has not been started yet.');\n    return promiseRef.current.refetch() as T;\n  }\n  function buildQueryHooks(endpointName: string): QueryHooks<any> {\n    const useQuerySubscription: UseQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef] = useQuerySubscriptionCommonImpl<QueryActionCreatorResult<any>>(endpointName, arg, options);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      return useMemo(() => ({\n        /**\n         * A method to manually refetch data for the query\n         */\n        refetch: () => refetchOrErrorIfUnmounted(promiseRef)\n      }), [promiseRef]);\n    };\n    const useLazyQuerySubscription: UseLazyQuerySubscription<any> = ({\n      refetchOnReconnect,\n      refetchOnFocus,\n      pollingInterval = 0,\n      skipPollingIfUnfocused = false\n    } = {}) => {\n      const {\n        initiate\n      } = api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [arg, setArg] = useState<any>(UNINITIALIZED_VALUE);\n\n      // TODO: Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.\n       */\n      const promiseRef = useRef<QueryActionCreatorResult<any> | undefined>(undefined);\n      const stableSubscriptionOptions = useShallowStableValue({\n        refetchOnReconnect,\n        refetchOnFocus,\n        pollingInterval,\n        skipPollingIfUnfocused\n      });\n      usePossiblyImmediateEffect(() => {\n        const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions;\n        if (stableSubscriptionOptions !== lastSubscriptionOptions) {\n          promiseRef.current?.updateSubscriptionOptions(stableSubscriptionOptions);\n        }\n      }, [stableSubscriptionOptions]);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger = useCallback(function (arg: any, preferCacheValue = false) {\n        let promise: QueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch(initiate(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            forceRefetch: !preferCacheValue\n          }));\n          setArg(arg);\n        });\n        return promise!;\n      }, [dispatch, initiate]);\n      const reset = useCallback(() => {\n        if (promiseRef.current?.queryCacheKey) {\n          dispatch(api.internalActions.removeQueryResult({\n            queryCacheKey: promiseRef.current?.queryCacheKey as QueryCacheKey\n          }));\n        }\n      }, [dispatch]);\n\n      /* cleanup on unmount */\n      useEffect(() => {\n        return () => {\n          promiseRef?.current?.unsubscribe();\n        };\n      }, []);\n\n      /* if \"cleanup on unmount\" was triggered from a fast refresh, we want to reinstate the query */\n      useEffect(() => {\n        if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {\n          trigger(arg, true);\n        }\n      }, [arg, trigger]);\n      return useMemo(() => [trigger, arg, {\n        reset\n      }] as const, [trigger, arg, reset]);\n    };\n    const useQueryState: UseQueryState<any> = buildUseQueryState(endpointName, queryStatePreSelector);\n    return {\n      useQueryState,\n      useQuerySubscription,\n      useLazyQuerySubscription,\n      useLazyQuery(options) {\n        const [trigger, arg, {\n          reset\n        }] = useLazyQuerySubscription(options);\n        const queryStateResults = useQueryState(arg, {\n          ...options,\n          skip: arg === UNINITIALIZED_VALUE\n        });\n        const info = useMemo(() => ({\n          lastArg: arg\n        }), [arg]);\n        return useMemo(() => [trigger, {\n          ...queryStateResults,\n          reset\n        }, info], [trigger, queryStateResults, reset, info]);\n      },\n      useQuery(arg, options) {\n        const querySubscriptionResults = useQuerySubscription(arg, options);\n        const queryStateResults = useQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS);\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          ...querySubscriptionResults\n        }), [queryStateResults, querySubscriptionResults]);\n      }\n    };\n  }\n  function buildInfiniteQueryHooks(endpointName: string): InfiniteQueryHooks<any> {\n    const useInfiniteQuerySubscription: UseInfiniteQuerySubscription<any> = (arg: any, options = {}) => {\n      const [promiseRef, dispatch, initiate, stableSubscriptionOptions] = useQuerySubscriptionCommonImpl<InfiniteQueryActionCreatorResult<any>>(endpointName, arg, options);\n      const subscriptionOptionsRef = useRef(stableSubscriptionOptions);\n      usePossiblyImmediateEffect(() => {\n        subscriptionOptionsRef.current = stableSubscriptionOptions;\n      }, [stableSubscriptionOptions]);\n      const trigger: LazyInfiniteQueryTrigger<any> = useCallback(function (arg: unknown, direction: 'forward' | 'backward') {\n        let promise: InfiniteQueryActionCreatorResult<any>;\n        batch(() => {\n          promiseRef.current?.unsubscribe();\n          promiseRef.current = promise = dispatch((initiate as StartInfiniteQueryActionCreator<any>)(arg, {\n            subscriptionOptions: subscriptionOptionsRef.current,\n            direction\n          }));\n        });\n        return promise!;\n      }, [promiseRef, dispatch, initiate]);\n      usePromiseRefUnsubscribeOnUnmount(promiseRef);\n      const stableArg = useStableQueryArgs(options.skip ? skipToken : arg,\n      // Even if the user provided a per-endpoint `serializeQueryArgs` with\n      // a consistent return value, _here_ we want to use the default behavior\n      // so we can tell if _anything_ actually changed. Otherwise, we can end up\n      // with a case where the query args did change but the serialization doesn't,\n      // and then we never try to initiate a refetch.\n      defaultSerializeQueryArgs, context.endpointDefinitions[endpointName], endpointName);\n      const refetch = useCallback(() => refetchOrErrorIfUnmounted(promiseRef), [promiseRef]);\n      return useMemo(() => {\n        const fetchNextPage = () => {\n          return trigger(stableArg, 'forward');\n        };\n        const fetchPreviousPage = () => {\n          return trigger(stableArg, 'backward');\n        };\n        return {\n          trigger,\n          /**\n           * A method to manually refetch data for the query\n           */\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        };\n      }, [refetch, trigger, stableArg]);\n    };\n    const useInfiniteQueryState: UseInfiniteQueryState<any> = buildUseQueryState(endpointName, infiniteQueryStatePreSelector);\n    return {\n      useInfiniteQueryState,\n      useInfiniteQuerySubscription,\n      useInfiniteQuery(arg, options) {\n        const {\n          refetch,\n          fetchNextPage,\n          fetchPreviousPage\n        } = useInfiniteQuerySubscription(arg, options);\n        const queryStateResults = useInfiniteQueryState(arg, {\n          selectFromResult: arg === skipToken || options?.skip ? undefined : noPendingQueryStateSelector,\n          ...options\n        });\n        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS, 'hasNextPage', 'hasPreviousPage');\n        useDebugValue(debugValue);\n        return useMemo(() => ({\n          ...queryStateResults,\n          fetchNextPage,\n          fetchPreviousPage,\n          refetch\n        }), [queryStateResults, fetchNextPage, fetchPreviousPage, refetch]);\n      }\n    };\n  }\n  function buildMutationHook(name: string): UseMutation<any> {\n    return ({\n      selectFromResult,\n      fixedCacheKey\n    } = {}) => {\n      const {\n        select,\n        initiate\n      } = api.endpoints[name] as ApiEndpointMutation<MutationDefinition<any, any, any, any, any>, Definitions>;\n      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>();\n      const [promise, setPromise] = useState<MutationActionCreatorResult<any>>();\n      useEffect(() => () => {\n        if (!promise?.arg.fixedCacheKey) {\n          promise?.reset();\n        }\n      }, [promise]);\n      const triggerMutation = useCallback(function (arg: Parameters<typeof initiate>['0']) {\n        const promise = dispatch(initiate(arg, {\n          fixedCacheKey\n        }));\n        setPromise(promise);\n        return promise;\n      }, [dispatch, initiate, fixedCacheKey]);\n      const {\n        requestId\n      } = promise || {};\n      const selectDefaultResult = useMemo(() => select({\n        fixedCacheKey,\n        requestId: promise?.requestId\n      }), [fixedCacheKey, promise, select]);\n      const mutationSelector = useMemo((): Selector<RootState<Definitions, any, any>, any> => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, [selectFromResult, selectDefaultResult]);\n      const currentState = useSelector(mutationSelector, shallowEqual);\n      const originalArgs = fixedCacheKey == null ? promise?.arg.originalArgs : undefined;\n      const reset = useCallback(() => {\n        batch(() => {\n          if (promise) {\n            setPromise(undefined);\n          }\n          if (fixedCacheKey) {\n            dispatch(api.internalActions.removeMutationResult({\n              requestId,\n              fixedCacheKey\n            }));\n          }\n        });\n      }, [dispatch, fixedCacheKey, promise, requestId]);\n      const debugValue = pick(currentState, ...COMMON_HOOK_DEBUG_FIELDS, 'endpointName');\n      useDebugValue(debugValue);\n      const finalState = useMemo(() => ({\n        ...currentState,\n        originalArgs,\n        reset\n      }), [currentState, originalArgs, reset]);\n      return useMemo(() => [triggerMutation, finalState] as const, [triggerMutation, finalState]);\n    };\n  }\n}","export const UNINITIALIZED_VALUE = Symbol();\nexport type UninitializedValue = typeof UNINITIALIZED_VALUE;","import { useEffect, useRef, useMemo } from 'react';\nimport type { SerializeQueryArgs } from '@reduxjs/toolkit/query';\nimport type { EndpointDefinition } from '@reduxjs/toolkit/query';\nexport function useStableQueryArgs<T>(queryArgs: T, serialize: SerializeQueryArgs<any>, endpointDefinition: EndpointDefinition<any, any, any, any>, endpointName: string) {\n  const incoming = useMemo(() => ({\n    queryArgs,\n    serialized: typeof queryArgs == 'object' ? serialize({\n      queryArgs,\n      endpointDefinition,\n      endpointName\n    }) : queryArgs\n  }), [queryArgs, serialize, endpointDefinition, endpointName]);\n  const cache = useRef(incoming);\n  useEffect(() => {\n    if (cache.current.serialized !== incoming.serialized) {\n      cache.current = incoming;\n    }\n  }, [incoming]);\n  return cache.current.serialized === incoming.serialized ? cache.current.queryArgs : queryArgs;\n}","import { useEffect, useRef } from 'react';\nimport { shallowEqual } from 'react-redux';\nexport function useShallowStableValue<T>(value: T) {\n  const cache = useRef(value);\n  useEffect(() => {\n    if (!shallowEqual(cache.current, value)) {\n      cache.current = value;\n    }\n  }, [value]);\n  return shallowEqual(cache.current, value) ? cache.current : value;\n}","import { configureStore, formatProdErrorMessage as _formatProdErrorMessage } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport { useContext } from 'react';\nimport { useEffect } from 'react';\nimport * as React from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { Provider, ReactReduxContext } from 'react-redux';\nimport { setupListeners } from '@reduxjs/toolkit/query';\nimport type { Api } from '@reduxjs/toolkit/query';\n\n/**\n * Can be used as a `Provider` if you **do not already have a Redux store**.\n *\n * @example\n * ```tsx\n * // codeblock-meta no-transpile title=\"Basic usage - wrap your App with ApiProvider\"\n * import * as React from 'react';\n * import { ApiProvider } from '@reduxjs/toolkit/query/react';\n * import { Pokemon } from './features/Pokemon';\n *\n * function App() {\n *   return (\n *     <ApiProvider api={api}>\n *       <Pokemon />\n *     </ApiProvider>\n *   );\n * }\n * ```\n *\n * @remarks\n * Using this together with an existing redux store, both will\n * conflict with each other - please use the traditional redux setup\n * in that case.\n */\nexport function ApiProvider(props: {\n  children: any;\n  api: Api<any, {}, any, any>;\n  setupListeners?: Parameters<typeof setupListeners>[1] | false;\n  context?: Context<ReactReduxContextValue | null>;\n}) {\n  const context = props.context || ReactReduxContext;\n  const existingContext = useContext(context);\n  if (existingContext) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(35) : 'Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.');\n  }\n  const [store] = React.useState(() => configureStore({\n    reducer: {\n      [props.api.reducerPath]: props.api.reducer\n    },\n    middleware: gDM => gDM().concat(props.api.middleware)\n  }));\n  // Adds the event listeners for online/offline/focus/etc\n  useEffect((): undefined | (() => void) => props.setupListeners === false ? undefined : setupListeners(store.dispatch, props.setupListeners), [props.setupListeners, store.dispatch]);\n  return <Provider store={store} context={context}>\n      {props.children}\n    </Provider>;\n}"],"mappings":"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","names":["_formatProdErrorMessage","useEffect","useMemo","useRef","shallowEqual","useEffect","useRef","useEffect","useRef","useMemo","shallowEqual","arg","promise","_formatProdErrorMessage","_formatProdErrorMessage","useEffect"]}
Index: node_modules/@reduxjs/toolkit/dist/query/rtk-query.browser.mjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/rtk-query.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/rtk-query.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+var Ue=(y=>(y.uninitialized="uninitialized",y.pending="pending",y.fulfilled="fulfilled",y.rejected="rejected",y))(Ue||{});function Le(e){return{status:e,isUninitialized:e==="uninitialized",isLoading:e==="pending",isSuccess:e==="fulfilled",isError:e==="rejected"}}import{createAction as X,createSlice as ae,createSelector as Ye,createAsyncThunk as je,combineReducers as Xe,createNextState as Se,isAnyOf as oe,isAllOf as Pe,isAction as Ze,isPending as Ie,isRejected as fe,isFulfilled as W,isRejectedWithValue as me,isAsyncThunkAction as He,prepareAutoBatched as ge,SHOULD_AUTOBATCH as ke,isPlainObject as te,nanoid as Be}from"@reduxjs/toolkit";var et=te;function Me(e,n){if(e===n||!(et(e)&&et(n)||Array.isArray(e)&&Array.isArray(n)))return n;let d=Object.keys(n),g=Object.keys(e),y=d.length===g.length,x=Array.isArray(n)?[]:{};for(let T of d)x[T]=Me(e[T],n[T]),y&&(y=e[T]===x[T]);return y?e:x}function J(e){let n=0;for(let d in e)n++;return n}var _e=e=>[].concat(...e);function tt(e){return new RegExp("(^|:)//").test(e)}function nt(){return typeof document>"u"?!0:document.visibilityState!=="hidden"}function se(e){return e!=null}function rt(){return typeof navigator>"u"||navigator.onLine===void 0?!0:navigator.onLine}var Ct=e=>e.replace(/\/$/,""),Ft=e=>e.replace(/^\//,"");function it(e,n){if(!e)return n;if(!n)return e;if(tt(n))return n;let d=e.endsWith("/")||!n.startsWith("?")?"/":"";return e=Ct(e),n=Ft(n),`${e}${d}${n}`}function at(e,n,d){return e.has(n)?e.get(n):e.set(n,d).get(n)}var ot=(...e)=>fetch(...e),vt=e=>e.status>=200&&e.status<=299,Ot=e=>/ion\/(vnd\.api\+)?json/.test(e.get("content-type")||"");function st(e){if(!te(e))return e;let n={...e};for(let[d,g]of Object.entries(n))g===void 0&&delete n[d];return n}function Nt({baseUrl:e,prepareHeaders:n=h=>h,fetchFn:d=ot,paramsSerializer:g,isJsonContentType:y=Ot,jsonContentType:x="application/json",jsonReplacer:T,timeout:k,responseHandler:w,validateStatus:A,...P}={}){return typeof fetch>"u"&&d===ot&&console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments."),async(R,a,f)=>{let{getState:B,extra:p,endpoint:o,forced:S,type:c}=a,u,{url:m,headers:D=new Headers(P.headers),params:b=void 0,responseHandler:I=w??"json",validateStatus:Q=A??vt,timeout:s=k,...t}=typeof R=="string"?{url:R}:R,r,i=a.signal;s&&(r=new AbortController,a.signal.addEventListener("abort",r.abort),i=r.signal);let l={...P,signal:i,...t};D=new Headers(st(D)),l.headers=await n(D,{getState:B,arg:R,extra:p,endpoint:o,forced:S,type:c,extraOptions:f})||D;let E=N=>typeof N=="object"&&(te(N)||Array.isArray(N)||typeof N.toJSON=="function");if(!l.headers.has("content-type")&&E(l.body)&&l.headers.set("content-type",x),E(l.body)&&y(l.headers)&&(l.body=JSON.stringify(l.body,T)),b){let N=~m.indexOf("?")?"&":"?",F=g?g(b):new URLSearchParams(st(b));m+=N+F}m=it(e,m);let v=new Request(m,l);u={request:new Request(m,l)};let C,M=!1,K=r&&setTimeout(()=>{M=!0,r.abort()},s);try{C=await d(v)}catch(N){return{error:{status:M?"TIMEOUT_ERROR":"FETCH_ERROR",error:String(N)},meta:u}}finally{K&&clearTimeout(K),r?.signal.removeEventListener("abort",r.abort)}let j=C.clone();u.response=j;let z,L="";try{let N;if(await Promise.all([h(C,I).then(F=>z=F,F=>N=F),j.text().then(F=>L=F,()=>{})]),N)throw N}catch(N){return{error:{status:"PARSING_ERROR",originalStatus:C.status,data:L,error:String(N)},meta:u}}return Q(C,z)?{data:z,meta:u}:{error:{status:C.status,data:z},meta:u}};async function h(R,a){if(typeof a=="function")return a(R);if(a==="content-type"&&(a=y(R.headers)?"json":"text"),a==="json"){let f=await R.text();return f.length?JSON.parse(f):null}return R.text()}}var G=class{constructor(n,d=void 0){this.value=n;this.meta=d}};async function qt(e=0,n=5){let d=Math.min(e,n),g=~~((Math.random()+.4)*(300<<d));await new Promise(y=>setTimeout(x=>y(x),g))}function Kt(e,n){throw Object.assign(new G({error:e,meta:n}),{throwImmediately:!0})}var ut={},Ut=(e,n)=>async(d,g,y)=>{let x=[5,(n||ut).maxRetries,(y||ut).maxRetries].filter(P=>P!==void 0),[T]=x.slice(-1),w={maxRetries:T,backoff:qt,retryCondition:(P,h,{attempt:R})=>R<=T,...n,...y},A=0;for(;;)try{let P=await e(d,g,y);if(P.error)throw new G(P);return P}catch(P){if(A++,P.throwImmediately){if(P instanceof G)return P.value;throw P}if(P instanceof G&&!w.retryCondition(P.value.error,d,{attempt:A,baseQueryApi:g,extraOptions:y}))return P.value;await w.backoff(A,w.maxRetries)}},Lt=Object.assign(Ut,{fail:Kt});var ne=X("__rtkq/focused"),Qe=X("__rtkq/unfocused"),re=X("__rtkq/online"),Te=X("__rtkq/offline"),Ve=!1;function jt(e,n){function d(){let g=()=>e(ne()),y=()=>e(Qe()),x=()=>e(re()),T=()=>e(Te()),k=()=>{window.document.visibilityState==="visible"?g():y()};return Ve||typeof window<"u"&&window.addEventListener&&(window.addEventListener("visibilitychange",k,!1),window.addEventListener("focus",g,!1),window.addEventListener("online",x,!1),window.addEventListener("offline",T,!1),Ve=!0),()=>{window.removeEventListener("focus",g),window.removeEventListener("visibilitychange",k),window.removeEventListener("online",x),window.removeEventListener("offline",T),Ve=!1}}return n?n(e,{onFocus:ne,onFocusLost:Qe,onOffline:Te,onOnline:re}):d()}function ue(e){return e.type==="query"}function yt(e){return e.type==="mutation"}function ye(e){return e.type==="infinitequery"}function he(e){return ue(e)||ye(e)}function xe(e,n,d,g,y,x){return Ht(e)?e(n,d,g,y).filter(se).map(we).map(x):Array.isArray(e)?e.map(we).map(x):[]}function Ht(e){return typeof e=="function"}function we(e){return typeof e=="string"?{type:e}:e}import{isDraftable as Vt,produceWithPatches as zt}from"immer";import"@reduxjs/toolkit";function dt(e,n){return e.catch(n)}var Ae=Symbol("forceQueryFn"),De=e=>typeof e[Ae]=="function";function pt({serializeQueryArgs:e,queryThunk:n,infiniteQueryThunk:d,mutationThunk:g,api:y,context:x}){let T=new Map,k=new Map,{unsubscribeQueryResult:w,removeMutationResult:A,updateSubscriptionOptions:P}=y.internalActions;return{buildInitiateQuery:o,buildInitiateInfiniteQuery:S,buildInitiateMutation:c,getRunningQueryThunk:h,getRunningMutationThunk:R,getRunningQueriesThunk:a,getRunningMutationsThunk:f};function h(u,m){return D=>{let b=x.endpointDefinitions[u],I=e({queryArgs:m,endpointDefinition:b,endpointName:u});return T.get(D)?.[I]}}function R(u,m){return D=>k.get(D)?.[m]}function a(){return u=>Object.values(T.get(u)||{}).filter(se)}function f(){return u=>Object.values(k.get(u)||{}).filter(se)}function B(u){}function p(u,m){let D=(b,{subscribe:I=!0,forceRefetch:Q,subscriptionOptions:s,[Ae]:t,...r}={})=>(i,l)=>{let E=e({queryArgs:b,endpointDefinition:m,endpointName:u}),v,O={...r,type:"query",subscribe:I,forceRefetch:Q,subscriptionOptions:s,endpointName:u,originalArgs:b,queryCacheKey:E,[Ae]:t};if(ue(m))v=n(O);else{let{direction:H,initialPageParam:q}=r;v=d({...O,direction:H,initialPageParam:q})}let C=y.endpoints[u].select(b),M=i(v),K=C(l());let{requestId:j,abort:z}=M,L=K.requestId!==j,N=T.get(i)?.[E],F=()=>C(l()),_=Object.assign(t?M.then(F):L&&!N?Promise.resolve(K):Promise.all([N,M]).then(F),{arg:b,requestId:j,subscriptionOptions:s,queryCacheKey:E,abort:z,async unwrap(){let H=await _;if(H.isError)throw H.error;return H.data},refetch:()=>i(D(b,{subscribe:!1,forceRefetch:!0})),unsubscribe(){I&&i(w({queryCacheKey:E,requestId:j}))},updateSubscriptionOptions(H){_.subscriptionOptions=H,i(P({endpointName:u,requestId:j,queryCacheKey:E,options:H}))}});if(!N&&!L&&!t){let H=at(T,i,{});H[E]=_,_.then(()=>{delete H[E],J(H)||T.delete(i)})}return _};return D}function o(u,m){return p(u,m)}function S(u,m){return p(u,m)}function c(u){return(m,{track:D=!0,fixedCacheKey:b}={})=>(I,Q)=>{let s=g({type:"mutation",endpointName:u,originalArgs:m,track:D,fixedCacheKey:b}),t=I(s);let{requestId:r,abort:i,unwrap:l}=t,E=dt(t.unwrap().then(M=>({data:M})),M=>({error:M})),v=()=>{I(A({requestId:r,fixedCacheKey:b}))},O=Object.assign(E,{arg:t.arg,requestId:r,abort:i,unwrap:l,reset:v}),C=k.get(I)||{};return k.set(I,C),C[r]=O,O.then(()=>{delete C[r],J(C)||k.delete(I)}),b&&(C[b]=O,O.then(()=>{C[b]===O&&(delete C[b],J(C)||k.delete(I))})),O}}}import{SchemaError as _t}from"@standard-schema/utils";var Re=class extends _t{constructor(d,g,y,x){super(d);this.value=g;this.schemaName=y;this._bqMeta=x}};async function ie(e,n,d,g){let y=await e["~standard"].validate(n);if(y.issues)throw new Re(y.issues,n,d,g);return y.value}function Wt(e){return e}var be=(e={})=>({...e,[ke]:!0});function ct({reducerPath:e,baseQuery:n,context:{endpointDefinitions:d},serializeQueryArgs:g,api:y,assertTagType:x,selectors:T,onSchemaFailure:k,catchSchemaFailure:w,skipSchemaValidation:A}){let P=(t,r,i,l)=>(E,v)=>{let O=d[t],C=g({queryArgs:r,endpointDefinition:O,endpointName:t});if(E(y.internalActions.queryResultPatched({queryCacheKey:C,patches:i})),!l)return;let M=y.endpoints[t].select(r)(v()),K=xe(O.providesTags,M.data,void 0,r,{},x);E(y.internalActions.updateProvidedBy([{queryCacheKey:C,providedTags:K}]))};function h(t,r,i=0){let l=[r,...t];return i&&l.length>i?l.slice(0,-1):l}function R(t,r,i=0){let l=[...t,r];return i&&l.length>i?l.slice(1):l}let a=(t,r,i,l=!0)=>(E,v)=>{let C=y.endpoints[t].select(r)(v()),M={patches:[],inversePatches:[],undo:()=>E(y.util.patchQueryData(t,r,M.inversePatches,l))};if(C.status==="uninitialized")return M;let K;if("data"in C)if(Vt(C.data)){let[j,z,L]=zt(C.data,i);M.patches.push(...z),M.inversePatches.push(...L),K=j}else K=i(C.data),M.patches.push({op:"replace",path:[],value:K}),M.inversePatches.push({op:"replace",path:[],value:C.data});return M.patches.length===0||E(y.util.patchQueryData(t,r,M.patches,l)),M},f=(t,r,i)=>l=>l(y.endpoints[t].initiate(r,{subscribe:!1,forceRefetch:!0,[Ae]:()=>({data:i})})),B=(t,r)=>t.query&&t[r]?t[r]:Wt,p=async(t,{signal:r,abort:i,rejectWithValue:l,fulfillWithValue:E,dispatch:v,getState:O,extra:C})=>{let M=d[t.endpointName],{metaSchema:K,skipSchemaValidation:j=A}=M;try{let z=B(M,"transformResponse"),L={signal:r,abort:i,dispatch:v,getState:O,extra:C,endpoint:t.endpointName,type:t.type,forced:t.type==="query"?o(t,O()):void 0,queryCacheKey:t.type==="query"?t.queryCacheKey:void 0},N=t.type==="query"?t[Ae]:void 0,F,_=async(q,U,V,pe)=>{if(U==null&&q.pages.length)return Promise.resolve({data:q});let Z={queryArg:t.originalArgs,pageParam:U},ce=await H(Z),$=pe?h:R;return{data:{pages:$(q.pages,ce.data,V),pageParams:$(q.pageParams,U,V)},meta:ce.meta}};async function H(q){let U,{extraOptions:V,argSchema:pe,rawResponseSchema:Z,responseSchema:ce}=M;if(pe&&!j&&(q=await ie(pe,q,"argSchema",{})),N?U=N():M.query?U=await n(M.query(q),L,V):U=await M.queryFn(q,L,V,le=>n(le,L,V)),U.error)throw new G(U.error,U.meta);let{data:$}=U;Z&&!j&&($=await ie(Z,U.data,"rawResponseSchema",U.meta));let ee=await z($,U.meta,q);return ce&&!j&&(ee=await ie(ce,ee,"responseSchema",U.meta)),{...U,data:ee}}if(t.type==="query"&&"infiniteQueryOptions"in M){let{infiniteQueryOptions:q}=M,{maxPages:U=1/0}=q,V,pe={pages:[],pageParams:[]},Z=T.selectQueryEntry(O(),t.queryCacheKey)?.data,$=o(t,O())&&!t.direction||!Z?pe:Z;if("direction"in t&&t.direction&&$.pages.length){let ee=t.direction==="backward",Ee=(ee?ze:Ce)(q,$,t.originalArgs);V=await _($,Ee,U,ee)}else{let{initialPageParam:ee=q.initialPageParam}=t,le=Z?.pageParams??[],Ee=le[0]??ee,Je=le.length;V=await _($,Ee,U),N&&(V={data:V.data.pages[0]});for(let Ge=1;Ge<Je;Ge++){let wt=Ce(q,V.data,t.originalArgs);V=await _(V.data,wt,U)}}F=V}else F=await H(t.originalArgs);return K&&!j&&F.meta&&(F.meta=await ie(K,F.meta,"metaSchema",F.meta)),E(F.data,be({fulfilledTimeStamp:Date.now(),baseQueryMeta:F.meta}))}catch(z){let L=z;if(L instanceof G){let N=B(M,"transformErrorResponse"),{rawErrorResponseSchema:F,errorResponseSchema:_}=M,{value:H,meta:q}=L;try{F&&!j&&(H=await ie(F,H,"rawErrorResponseSchema",q)),K&&!j&&(q=await ie(K,q,"metaSchema",q));let U=await N(H,q,t.originalArgs);return _&&!j&&(U=await ie(_,U,"errorResponseSchema",q)),l(U,be({baseQueryMeta:q}))}catch(U){L=U}}try{if(L instanceof Re){let N={endpoint:t.endpointName,arg:t.originalArgs,type:t.type,queryCacheKey:t.type==="query"?t.queryCacheKey:void 0};M.onSchemaFailure?.(L,N),k?.(L,N);let{catchSchemaFailure:F=w}=M;if(F)return l(F(L,N),be({baseQueryMeta:L._bqMeta}))}}catch(N){L=N}throw console.error(L),L}};function o(t,r){let i=T.selectQueryEntry(r,t.queryCacheKey),l=T.selectConfig(r).refetchOnMountOrArgChange,E=i?.fulfilledTimeStamp,v=t.forceRefetch??(t.subscribe&&l);return v?v===!0||(Number(new Date)-Number(E))/1e3>=v:!1}let S=()=>je(`${e}/executeQuery`,p,{getPendingMeta({arg:r}){let i=d[r.endpointName];return be({startedTimeStamp:Date.now(),...ye(i)?{direction:r.direction}:{}})},condition(r,{getState:i}){let l=i(),E=T.selectQueryEntry(l,r.queryCacheKey),v=E?.fulfilledTimeStamp,O=r.originalArgs,C=E?.originalArgs,M=d[r.endpointName],K=r.direction;return De(r)?!0:E?.status==="pending"?!1:o(r,l)||ue(M)&&M?.forceRefetch?.({currentArg:O,previousArg:C,endpointState:E,state:l})?!0:!(v&&!K)},dispatchConditionRejection:!0}),c=S(),u=S(),m=je(`${e}/executeMutation`,p,{getPendingMeta(){return be({startedTimeStamp:Date.now()})}}),D=t=>"force"in t,b=t=>"ifOlderThan"in t,I=(t,r,i)=>(l,E)=>{let v=D(i)&&i.force,O=b(i)&&i.ifOlderThan,C=(K=!0)=>{let j={forceRefetch:K,isPrefetch:!0};return y.endpoints[t].initiate(r,j)},M=y.endpoints[t].select(r)(E());if(v)l(C());else if(O){let K=M?.fulfilledTimeStamp;if(!K){l(C());return}(Number(new Date)-Number(new Date(K)))/1e3>=O&&l(C())}else l(C(!1))};function Q(t){return r=>r?.meta?.arg?.endpointName===t}function s(t,r){return{matchPending:Pe(Ie(t),Q(r)),matchFulfilled:Pe(W(t),Q(r)),matchRejected:Pe(fe(t),Q(r))}}return{queryThunk:c,mutationThunk:m,infiniteQueryThunk:u,prefetch:I,updateQueryData:a,upsertQueryData:f,patchQueryData:P,buildMatchThunkActions:s}}function Ce(e,{pages:n,pageParams:d},g){let y=n.length-1;return e.getNextPageParam(n[y],n,d[y],d,g)}function ze(e,{pages:n,pageParams:d},g){return e.getPreviousPageParam?.(n[0],n,d[0],d,g)}function Fe(e,n,d,g){return xe(d[e.meta.arg.endpointName][n],W(e)?e.payload:void 0,me(e)?e.payload:void 0,e.meta.arg.originalArgs,"baseQueryMeta"in e.meta?e.meta.baseQueryMeta:void 0,g)}import{isDraft as $t}from"immer";import{applyPatches as lt,original as Jt}from"immer";function ve(e,n,d){let g=e[n];g&&d(g)}function de(e){return("arg"in e?e.arg.fixedCacheKey:e.fixedCacheKey)??e.requestId}function ft(e,n,d){let g=e[de(n)];g&&d(g)}var Oe={};function mt({reducerPath:e,queryThunk:n,mutationThunk:d,serializeQueryArgs:g,context:{endpointDefinitions:y,apiUid:x,extractRehydrationInfo:T,hasRehydrationInfo:k},assertTagType:w,config:A}){let P=X(`${e}/resetApiState`);function h(Q,s,t,r){Q[s.queryCacheKey]??={status:"uninitialized",endpointName:s.endpointName},ve(Q,s.queryCacheKey,i=>{i.status="pending",i.requestId=t&&i.requestId?i.requestId:r.requestId,s.originalArgs!==void 0&&(i.originalArgs=s.originalArgs),i.startedTimeStamp=r.startedTimeStamp;let l=y[r.arg.endpointName];ye(l)&&"direction"in s&&(i.direction=s.direction)})}function R(Q,s,t,r){ve(Q,s.arg.queryCacheKey,i=>{if(i.requestId!==s.requestId&&!r)return;let{merge:l}=y[s.arg.endpointName];if(i.status="fulfilled",l)if(i.data!==void 0){let{fulfilledTimeStamp:E,arg:v,baseQueryMeta:O,requestId:C}=s,M=Se(i.data,K=>l(K,t,{arg:v.originalArgs,baseQueryMeta:O,fulfilledTimeStamp:E,requestId:C}));i.data=M}else i.data=t;else i.data=y[s.arg.endpointName].structuralSharing??!0?Me($t(i.data)?Jt(i.data):i.data,t):t;delete i.error,i.fulfilledTimeStamp=s.fulfilledTimeStamp})}let a=ae({name:`${e}/queries`,initialState:Oe,reducers:{removeQueryResult:{reducer(Q,{payload:{queryCacheKey:s}}){delete Q[s]},prepare:ge()},cacheEntriesUpserted:{reducer(Q,s){for(let t of s.payload){let{queryDescription:r,value:i}=t;h(Q,r,!0,{arg:r,requestId:s.meta.requestId,startedTimeStamp:s.meta.timestamp}),R(Q,{arg:r,requestId:s.meta.requestId,fulfilledTimeStamp:s.meta.timestamp,baseQueryMeta:{}},i,!0)}},prepare:Q=>({payload:Q.map(r=>{let{endpointName:i,arg:l,value:E}=r,v=y[i];return{queryDescription:{type:"query",endpointName:i,originalArgs:r.arg,queryCacheKey:g({queryArgs:l,endpointDefinition:v,endpointName:i})},value:E}}),meta:{[ke]:!0,requestId:Be(),timestamp:Date.now()}})},queryResultPatched:{reducer(Q,{payload:{queryCacheKey:s,patches:t}}){ve(Q,s,r=>{r.data=lt(r.data,t.concat())})},prepare:ge()}},extraReducers(Q){Q.addCase(n.pending,(s,{meta:t,meta:{arg:r}})=>{let i=De(r);h(s,r,i,t)}).addCase(n.fulfilled,(s,{meta:t,payload:r})=>{let i=De(t.arg);R(s,t,r,i)}).addCase(n.rejected,(s,{meta:{condition:t,arg:r,requestId:i},error:l,payload:E})=>{ve(s,r.queryCacheKey,v=>{if(!t){if(v.requestId!==i)return;v.status="rejected",v.error=E??l}})}).addMatcher(k,(s,t)=>{let{queries:r}=T(t);for(let[i,l]of Object.entries(r))(l?.status==="fulfilled"||l?.status==="rejected")&&(s[i]=l)})}}),f=ae({name:`${e}/mutations`,initialState:Oe,reducers:{removeMutationResult:{reducer(Q,{payload:s}){let t=de(s);t in Q&&delete Q[t]},prepare:ge()}},extraReducers(Q){Q.addCase(d.pending,(s,{meta:t,meta:{requestId:r,arg:i,startedTimeStamp:l}})=>{i.track&&(s[de(t)]={requestId:r,status:"pending",endpointName:i.endpointName,startedTimeStamp:l})}).addCase(d.fulfilled,(s,{payload:t,meta:r})=>{r.arg.track&&ft(s,r,i=>{i.requestId===r.requestId&&(i.status="fulfilled",i.data=t,i.fulfilledTimeStamp=r.fulfilledTimeStamp)})}).addCase(d.rejected,(s,{payload:t,error:r,meta:i})=>{i.arg.track&&ft(s,i,l=>{l.requestId===i.requestId&&(l.status="rejected",l.error=t??r)})}).addMatcher(k,(s,t)=>{let{mutations:r}=T(t);for(let[i,l]of Object.entries(r))(l?.status==="fulfilled"||l?.status==="rejected")&&i!==l?.requestId&&(s[i]=l)})}}),B={tags:{},keys:{}},p=ae({name:`${e}/invalidation`,initialState:B,reducers:{updateProvidedBy:{reducer(Q,s){for(let{queryCacheKey:t,providedTags:r}of s.payload){o(Q,t);for(let{type:i,id:l}of r){let E=(Q.tags[i]??={})[l||"__internal_without_id"]??=[];E.includes(t)||E.push(t)}Q.keys[t]=r}},prepare:ge()}},extraReducers(Q){Q.addCase(a.actions.removeQueryResult,(s,{payload:{queryCacheKey:t}})=>{o(s,t)}).addMatcher(k,(s,t)=>{let{provided:r}=T(t);for(let[i,l]of Object.entries(r))for(let[E,v]of Object.entries(l)){let O=(s.tags[i]??={})[E||"__internal_without_id"]??=[];for(let C of v)O.includes(C)||O.push(C)}}).addMatcher(oe(W(n),me(n)),(s,t)=>{S(s,[t])}).addMatcher(a.actions.cacheEntriesUpserted.match,(s,t)=>{let r=t.payload.map(({queryDescription:i,value:l})=>({type:"UNKNOWN",payload:l,meta:{requestStatus:"fulfilled",requestId:"UNKNOWN",arg:i}}));S(s,r)})}});function o(Q,s){let t=Q.keys[s]??[];for(let r of t){let i=r.type,l=r.id??"__internal_without_id",E=Q.tags[i]?.[l];E&&(Q.tags[i][l]=E.filter(v=>v!==s))}delete Q.keys[s]}function S(Q,s){let t=s.map(r=>{let i=Fe(r,"providesTags",y,w),{queryCacheKey:l}=r.meta.arg;return{queryCacheKey:l,providedTags:i}});p.caseReducers.updateProvidedBy(Q,p.actions.updateProvidedBy(t))}let c=ae({name:`${e}/subscriptions`,initialState:Oe,reducers:{updateSubscriptionOptions(Q,s){},unsubscribeQueryResult(Q,s){},internal_getRTKQSubscriptions(){}}}),u=ae({name:`${e}/internalSubscriptions`,initialState:Oe,reducers:{subscriptionsUpdated:{reducer(Q,s){return lt(Q,s.payload)},prepare:ge()}}}),m=ae({name:`${e}/config`,initialState:{online:rt(),focused:nt(),middlewareRegistered:!1,...A},reducers:{middlewareRegistered(Q,{payload:s}){Q.middlewareRegistered=Q.middlewareRegistered==="conflict"||x!==s?"conflict":!0}},extraReducers:Q=>{Q.addCase(re,s=>{s.online=!0}).addCase(Te,s=>{s.online=!1}).addCase(ne,s=>{s.focused=!0}).addCase(Qe,s=>{s.focused=!1}).addMatcher(k,s=>({...s}))}}),D=Xe({queries:a.reducer,mutations:f.reducer,provided:p.reducer,subscriptions:u.reducer,config:m.reducer}),b=(Q,s)=>D(P.match(s)?void 0:Q,s),I={...m.actions,...a.actions,...c.actions,...u.actions,...f.actions,...p.actions,resetApiState:P};return{reducer:b,actions:I}}var Ne=Symbol.for("RTKQ/skipToken"),Tt={status:"uninitialized"},gt=Se(Tt,()=>{}),Qt=Se(Tt,()=>{});function ht({serializeQueryArgs:e,reducerPath:n,createSelector:d}){let g=c=>gt,y=c=>Qt;return{buildQuerySelector:R,buildInfiniteQuerySelector:a,buildMutationSelector:f,selectInvalidatedBy:B,selectCachedArgsForQuery:p,selectApiState:T,selectQueries:k,selectMutations:A,selectQueryEntry:w,selectConfig:P};function x(c){return{...c,...Le(c.status)}}function T(c){return c[n]}function k(c){return T(c)?.queries}function w(c,u){return k(c)?.[u]}function A(c){return T(c)?.mutations}function P(c){return T(c)?.config}function h(c,u,m){return D=>{if(D===Ne)return d(g,m);let b=e({queryArgs:D,endpointDefinition:u,endpointName:c});return d(Q=>w(Q,b)??gt,m)}}function R(c,u){return h(c,u,x)}function a(c,u){let{infiniteQueryOptions:m}=u;function D(b){let I={...b,...Le(b.status)},{isLoading:Q,isError:s,direction:t}=I,r=t==="forward",i=t==="backward";return{...I,hasNextPage:o(m,I.data,I.originalArgs),hasPreviousPage:S(m,I.data,I.originalArgs),isFetchingNextPage:Q&&r,isFetchingPreviousPage:Q&&i,isFetchNextPageError:s&&r,isFetchPreviousPageError:s&&i}}return h(c,u,D)}function f(){return c=>{let u;return typeof c=="object"?u=de(c)??Ne:u=c,d(u===Ne?y:b=>T(b)?.mutations?.[u]??Qt,x)}}function B(c,u){let m=c[n],D=new Set;for(let b of u.filter(se).map(we)){let I=m.provided.tags[b.type];if(!I)continue;let Q=(b.id!==void 0?I[b.id]:_e(Object.values(I)))??[];for(let s of Q)D.add(s)}return _e(Array.from(D.values()).map(b=>{let I=m.queries[b];return I?[{queryCacheKey:b,endpointName:I.endpointName,originalArgs:I.originalArgs}]:[]}))}function p(c,u){return Object.values(k(c)).filter(m=>m?.endpointName===u&&m.status!=="uninitialized").map(m=>m.originalArgs)}function o(c,u,m){return u?Ce(c,u,m)!=null:!1}function S(c,u,m){return!u||!c.getPreviousPageParam?!1:ze(c,u,m)!=null}}import{formatProdErrorMessage as Gt}from"@reduxjs/toolkit";var At=WeakMap?new WeakMap:void 0,qe=({endpointName:e,queryArgs:n})=>{let d="",g=At?.get(n);if(typeof g=="string")d=g;else{let y=JSON.stringify(n,(x,T)=>(T=typeof T=="bigint"?{$bigint:T.toString()}:T,T=te(T)?Object.keys(T).sort().reduce((k,w)=>(k[w]=T[w],k),{}):T,T));te(n)&&At?.set(n,y),d=y}return`${e}(${d})`};import{weakMapMemoize as Rt}from"reselect";function We(...e){return function(d){let g=Rt(A=>d.extractRehydrationInfo?.(A,{reducerPath:d.reducerPath??"api"})),y={reducerPath:"api",keepUnusedDataFor:60,refetchOnMountOrArgChange:!1,refetchOnFocus:!1,refetchOnReconnect:!1,invalidationBehavior:"delayed",...d,extractRehydrationInfo:g,serializeQueryArgs(A){let P=qe;if("serializeQueryArgs"in A.endpointDefinition){let h=A.endpointDefinition.serializeQueryArgs;P=R=>{let a=h(R);return typeof a=="string"?a:qe({...R,queryArgs:a})}}else d.serializeQueryArgs&&(P=d.serializeQueryArgs);return P(A)},tagTypes:[...d.tagTypes||[]]},x={endpointDefinitions:{},batch(A){A()},apiUid:Be(),extractRehydrationInfo:g,hasRehydrationInfo:Rt(A=>g(A)!=null)},T={injectEndpoints:w,enhanceEndpoints({addTagTypes:A,endpoints:P}){if(A)for(let h of A)y.tagTypes.includes(h)||y.tagTypes.push(h);if(P)for(let[h,R]of Object.entries(P))typeof R=="function"?R(x.endpointDefinitions[h]):Object.assign(x.endpointDefinitions[h]||{},R);return T}},k=e.map(A=>A.init(T,y,x));function w(A){let P=A.endpoints({query:h=>({...h,type:"query"}),mutation:h=>({...h,type:"mutation"}),infiniteQuery:h=>({...h,type:"infinitequery"})});for(let[h,R]of Object.entries(P)){if(A.overrideExisting!==!0&&h in x.endpointDefinitions){if(A.overrideExisting==="throw")throw new Error(Gt(39));continue}x.endpointDefinitions[h]=R;for(let a of k)a.injectEndpoint(h,R)}return T}return T.injectEndpoints({endpoints:d.endpoints})}}import{formatProdErrorMessage as Yt}from"@reduxjs/toolkit";var Xt=Symbol();function Zt(){return function(){throw new Error(Yt(33))}}import{enablePatches as rn}from"immer";function Y(e,...n){return Object.assign(e,...n)}import{produceWithPatches as en}from"immer";var St=({api:e,queryThunk:n,internalState:d})=>{let g=`${e.reducerPath}/subscriptions`,y=null,x=null,{updateSubscriptionOptions:T,unsubscribeQueryResult:k}=e.internalActions,w=(a,f)=>{if(T.match(f)){let{queryCacheKey:p,requestId:o,options:S}=f.payload;return a?.[p]?.[o]&&(a[p][o]=S),!0}if(k.match(f)){let{queryCacheKey:p,requestId:o}=f.payload;return a[p]&&delete a[p][o],!0}if(e.internalActions.removeQueryResult.match(f))return delete a[f.payload.queryCacheKey],!0;if(n.pending.match(f)){let{meta:{arg:p,requestId:o}}=f,S=a[p.queryCacheKey]??={};return S[`${o}_running`]={},p.subscribe&&(S[o]=p.subscriptionOptions??S[o]??{}),!0}let B=!1;if(n.fulfilled.match(f)||n.rejected.match(f)){let p=a[f.meta.arg.queryCacheKey]||{},o=`${f.meta.requestId}_running`;B||=!!p[o],delete p[o]}if(n.rejected.match(f)){let{meta:{condition:p,arg:o,requestId:S}}=f;if(p&&o.subscribe){let c=a[o.queryCacheKey]??={};c[S]=o.subscriptionOptions??c[S]??{},B=!0}}return B},A=()=>d.currentSubscriptions,R={getSubscriptions:A,getSubscriptionCount:a=>{let B=A()[a]??{};return J(B)},isRequestSubscribed:(a,f)=>!!A()?.[a]?.[f]};return(a,f)=>{if(y||(y=JSON.parse(JSON.stringify(d.currentSubscriptions))),e.util.resetApiState.match(a))return y=d.currentSubscriptions={},x=null,[!0,!1];if(e.internalActions.internal_getRTKQSubscriptions.match(a))return[!1,R];let B=w(d.currentSubscriptions,a),p=!0;if(B){x||(x=setTimeout(()=>{let c=JSON.parse(JSON.stringify(d.currentSubscriptions)),[,u]=en(y,()=>c);f.next(e.internalActions.subscriptionsUpdated(u)),y=c,x=null},500));let o=typeof a.type=="string"&&!!a.type.startsWith(g),S=n.rejected.match(a)&&a.meta.condition&&!!a.meta.arg.subscribe;p=!o&&!S}return[p,!1]}};function tn(e){for(let n in e)return!1;return!0}var nn=2147483647/1e3-1,xt=({reducerPath:e,api:n,queryThunk:d,context:g,internalState:y,selectors:{selectQueryEntry:x,selectConfig:T}})=>{let{removeQueryResult:k,unsubscribeQueryResult:w,cacheEntriesUpserted:A}=n.internalActions,P=oe(w.match,d.fulfilled,d.rejected,A.match);function h(p){let o=y.currentSubscriptions[p];return!!o&&!tn(o)}let R={},a=(p,o,S)=>{let c=o.getState(),u=T(c);if(P(p)){let m;if(A.match(p))m=p.payload.map(D=>D.queryDescription.queryCacheKey);else{let{queryCacheKey:D}=w.match(p)?p.payload:p.meta.arg;m=[D]}f(m,o,u)}if(n.util.resetApiState.match(p))for(let[m,D]of Object.entries(R))D&&clearTimeout(D),delete R[m];if(g.hasRehydrationInfo(p)){let{queries:m}=g.extractRehydrationInfo(p);f(Object.keys(m),o,u)}};function f(p,o,S){let c=o.getState();for(let u of p){let m=x(c,u);B(u,m?.endpointName,o,S)}}function B(p,o,S,c){let m=g.endpointDefinitions[o]?.keepUnusedDataFor??c.keepUnusedDataFor;if(m===1/0)return;let D=Math.max(0,Math.min(m,nn));if(!h(p)){let b=R[p];b&&clearTimeout(b),R[p]=setTimeout(()=>{h(p)||S.dispatch(k({queryCacheKey:p})),delete R[p]},D*1e3)}}return a};var Dt=new Error("Promise never resolved before cacheEntryRemoved."),bt=({api:e,reducerPath:n,context:d,queryThunk:g,mutationThunk:y,internalState:x,selectors:{selectQueryEntry:T,selectApiState:k}})=>{let w=He(g),A=He(y),P=W(g,y),h={};function R(o,S,c){let u=h[o];u?.valueResolved&&(u.valueResolved({data:S,meta:c}),delete u.valueResolved)}function a(o){let S=h[o];S&&(delete h[o],S.cacheEntryRemoved())}let f=(o,S,c)=>{let u=B(o);function m(D,b,I,Q){let s=T(c,b),t=T(S.getState(),b);!s&&t&&p(D,Q,b,S,I)}if(g.pending.match(o))m(o.meta.arg.endpointName,u,o.meta.requestId,o.meta.arg.originalArgs);else if(e.internalActions.cacheEntriesUpserted.match(o))for(let{queryDescription:D,value:b}of o.payload){let{endpointName:I,originalArgs:Q,queryCacheKey:s}=D;m(I,s,o.meta.requestId,Q),R(s,b,{})}else if(y.pending.match(o))S.getState()[n].mutations[u]&&p(o.meta.arg.endpointName,o.meta.arg.originalArgs,u,S,o.meta.requestId);else if(P(o))R(u,o.payload,o.meta.baseQueryMeta);else if(e.internalActions.removeQueryResult.match(o)||e.internalActions.removeMutationResult.match(o))a(u);else if(e.util.resetApiState.match(o))for(let D of Object.keys(h))a(D)};function B(o){return w(o)?o.meta.arg.queryCacheKey:A(o)?o.meta.arg.fixedCacheKey??o.meta.requestId:e.internalActions.removeQueryResult.match(o)?o.payload.queryCacheKey:e.internalActions.removeMutationResult.match(o)?de(o.payload):""}function p(o,S,c,u,m){let D=d.endpointDefinitions[o],b=D?.onCacheEntryAdded;if(!b)return;let I={},Q=new Promise(E=>{I.cacheEntryRemoved=E}),s=Promise.race([new Promise(E=>{I.valueResolved=E}),Q.then(()=>{throw Dt})]);s.catch(()=>{}),h[c]=I;let t=e.endpoints[o].select(he(D)?S:c),r=u.dispatch((E,v,O)=>O),i={...u,getCacheEntry:()=>t(u.getState()),requestId:m,extra:r,updateCachedData:he(D)?E=>u.dispatch(e.util.updateQueryData(o,S,E)):void 0,cacheDataLoaded:s,cacheEntryRemoved:Q},l=b(S,i);Promise.resolve(l).catch(E=>{if(E!==Dt)throw E})}return f};var Et=({api:e,context:{apiUid:n},reducerPath:d})=>(g,y)=>{e.util.resetApiState.match(g)&&y.dispatch(e.internalActions.middlewareRegistered(n))};var Pt=({reducerPath:e,context:n,context:{endpointDefinitions:d},mutationThunk:g,queryThunk:y,api:x,assertTagType:T,refetchQuery:k,internalState:w})=>{let{removeQueryResult:A}=x.internalActions,P=oe(W(g),me(g)),h=oe(W(g,y),fe(g,y)),R=[],a=(p,o)=>{P(p)?B(Fe(p,"invalidatesTags",d,T),o):h(p)?B([],o):x.util.invalidateTags.match(p)&&B(xe(p.payload,void 0,void 0,void 0,void 0,T),o)};function f(p){let{queries:o,mutations:S}=p;for(let c of[o,S])for(let u in c)if(c[u]?.status==="pending")return!0;return!1}function B(p,o){let S=o.getState(),c=S[e];if(R.push(...p),c.config.invalidationBehavior==="delayed"&&f(c))return;let u=R;if(R=[],u.length===0)return;let m=x.util.selectInvalidatedBy(S,u);n.batch(()=>{let D=Array.from(m.values());for(let{queryCacheKey:b}of D){let I=c.queries[b],Q=w.currentSubscriptions[b]??{};I&&(J(Q)===0?o.dispatch(A({queryCacheKey:b})):I.status!=="uninitialized"&&o.dispatch(k(I)))}})}return a};var It=({reducerPath:e,queryThunk:n,api:d,refetchQuery:g,internalState:y})=>{let x={},T=(a,f)=>{(d.internalActions.updateSubscriptionOptions.match(a)||d.internalActions.unsubscribeQueryResult.match(a))&&A(a.payload,f),(n.pending.match(a)||n.rejected.match(a)&&a.meta.condition)&&A(a.meta.arg,f),(n.fulfilled.match(a)||n.rejected.match(a)&&!a.meta.condition)&&w(a.meta.arg,f),d.util.resetApiState.match(a)&&h()};function k(a,f){let p=f.getState()[e].queries[a],o=y.currentSubscriptions[a];if(!(!p||p.status==="uninitialized"))return o}function w({queryCacheKey:a},f){let B=f.getState()[e],p=B.queries[a],o=y.currentSubscriptions[a];if(!p||p.status==="uninitialized")return;let{lowestPollingInterval:S,skipPollingIfUnfocused:c}=R(o);if(!Number.isFinite(S))return;let u=x[a];u?.timeout&&(clearTimeout(u.timeout),u.timeout=void 0);let m=Date.now()+S;x[a]={nextPollTimestamp:m,pollingInterval:S,timeout:setTimeout(()=>{(B.config.focused||!c)&&f.dispatch(g(p)),w({queryCacheKey:a},f)},S)}}function A({queryCacheKey:a},f){let p=f.getState()[e].queries[a],o=y.currentSubscriptions[a];if(!p||p.status==="uninitialized")return;let{lowestPollingInterval:S}=R(o);if(!Number.isFinite(S)){P(a);return}let c=x[a],u=Date.now()+S;(!c||u<c.nextPollTimestamp)&&w({queryCacheKey:a},f)}function P(a){let f=x[a];f?.timeout&&clearTimeout(f.timeout),delete x[a]}function h(){for(let a of Object.keys(x))P(a)}function R(a={}){let f=!1,B=Number.POSITIVE_INFINITY;for(let p in a)a[p].pollingInterval&&(B=Math.min(a[p].pollingInterval,B),f=a[p].skipPollingIfUnfocused||f);return{lowestPollingInterval:B,skipPollingIfUnfocused:f}}return T};var kt=({api:e,context:n,queryThunk:d,mutationThunk:g})=>{let y=Ie(d,g),x=fe(d,g),T=W(d,g),k={};return(A,P)=>{if(y(A)){let{requestId:h,arg:{endpointName:R,originalArgs:a}}=A.meta,f=n.endpointDefinitions[R],B=f?.onQueryStarted;if(B){let p={},o=new Promise((m,D)=>{p.resolve=m,p.reject=D});o.catch(()=>{}),k[h]=p;let S=e.endpoints[R].select(he(f)?a:h),c=P.dispatch((m,D,b)=>b),u={...P,getCacheEntry:()=>S(P.getState()),requestId:h,extra:c,updateCachedData:he(f)?m=>P.dispatch(e.util.updateQueryData(R,a,m)):void 0,queryFulfilled:o};B(a,u)}}else if(T(A)){let{requestId:h,baseQueryMeta:R}=A.meta;k[h]?.resolve({data:A.payload,meta:R}),delete k[h]}else if(x(A)){let{requestId:h,rejectedWithValue:R,baseQueryMeta:a}=A.meta;k[h]?.reject({error:A.payload??A.error,isUnhandledError:!R,meta:a}),delete k[h]}}};var Bt=({reducerPath:e,context:n,api:d,refetchQuery:g,internalState:y})=>{let{removeQueryResult:x}=d.internalActions,T=(w,A)=>{ne.match(w)&&k(A,"refetchOnFocus"),re.match(w)&&k(A,"refetchOnReconnect")};function k(w,A){let P=w.getState()[e],h=P.queries,R=y.currentSubscriptions;n.batch(()=>{for(let a of Object.keys(R)){let f=h[a],B=R[a];if(!B||!f)continue;(Object.values(B).some(o=>o[A]===!0)||Object.values(B).every(o=>o[A]===void 0)&&P.config[A])&&(J(B)===0?w.dispatch(x({queryCacheKey:a})):f.status!=="uninitialized"&&w.dispatch(g(f)))}})}return T};function Mt(e){let{reducerPath:n,queryThunk:d,api:g,context:y}=e,{apiUid:x}=y,T={invalidateTags:X(`${n}/invalidateTags`)},k=h=>h.type.startsWith(`${n}/`),w=[Et,xt,Pt,It,bt,kt];return{middleware:h=>{let R=!1,f={...e,internalState:{currentSubscriptions:{}},refetchQuery:P,isThisApiSliceAction:k},B=w.map(S=>S(f)),p=St(f),o=Bt(f);return S=>c=>{if(!Ze(c))return S(c);R||(R=!0,h.dispatch(g.internalActions.middlewareRegistered(x)));let u={...h,next:S},m=h.getState(),[D,b]=p(c,u,m),I;if(D?I=S(c):I=b,h.getState()[n]&&(o(c,u,m),k(c)||y.hasRehydrationInfo(c)))for(let Q of B)Q(c,u,m);return I}},actions:T};function P(h){return e.api.endpoints[h.endpointName].initiate(h.originalArgs,{subscribe:!1,forceRefetch:!0})}}var Ke=Symbol(),$e=({createSelector:e=Ye}={})=>({name:Ke,init(n,{baseQuery:d,tagTypes:g,reducerPath:y,serializeQueryArgs:x,keepUnusedDataFor:T,refetchOnMountOrArgChange:k,refetchOnFocus:w,refetchOnReconnect:A,invalidationBehavior:P,onSchemaFailure:h,catchSchemaFailure:R,skipSchemaValidation:a},f){rn();let B=F=>F;Object.assign(n,{reducerPath:y,endpoints:{},internalActions:{onOnline:re,onOffline:Te,onFocus:ne,onFocusLost:Qe},util:{}});let p=ht({serializeQueryArgs:x,reducerPath:y,createSelector:e}),{selectInvalidatedBy:o,selectCachedArgsForQuery:S,buildQuerySelector:c,buildInfiniteQuerySelector:u,buildMutationSelector:m}=p;Y(n.util,{selectInvalidatedBy:o,selectCachedArgsForQuery:S});let{queryThunk:D,infiniteQueryThunk:b,mutationThunk:I,patchQueryData:Q,updateQueryData:s,upsertQueryData:t,prefetch:r,buildMatchThunkActions:i}=ct({baseQuery:d,reducerPath:y,context:f,api:n,serializeQueryArgs:x,assertTagType:B,selectors:p,onSchemaFailure:h,catchSchemaFailure:R,skipSchemaValidation:a}),{reducer:l,actions:E}=mt({context:f,queryThunk:D,infiniteQueryThunk:b,mutationThunk:I,serializeQueryArgs:x,reducerPath:y,assertTagType:B,config:{refetchOnFocus:w,refetchOnReconnect:A,refetchOnMountOrArgChange:k,keepUnusedDataFor:T,reducerPath:y,invalidationBehavior:P}});Y(n.util,{patchQueryData:Q,updateQueryData:s,upsertQueryData:t,prefetch:r,resetApiState:E.resetApiState,upsertQueryEntries:E.cacheEntriesUpserted}),Y(n.internalActions,E);let{middleware:v,actions:O}=Mt({reducerPath:y,context:f,queryThunk:D,mutationThunk:I,infiniteQueryThunk:b,api:n,assertTagType:B,selectors:p});Y(n.util,O),Y(n,{reducer:l,middleware:v});let{buildInitiateQuery:C,buildInitiateInfiniteQuery:M,buildInitiateMutation:K,getRunningMutationThunk:j,getRunningMutationsThunk:z,getRunningQueriesThunk:L,getRunningQueryThunk:N}=pt({queryThunk:D,mutationThunk:I,infiniteQueryThunk:b,api:n,serializeQueryArgs:x,context:f});return Y(n.util,{getRunningMutationThunk:j,getRunningMutationsThunk:z,getRunningQueryThunk:N,getRunningQueriesThunk:L}),{name:Ke,injectEndpoint(F,_){let H=n,q=H.endpoints[F]??={};ue(_)&&Y(q,{name:F,select:c(F,_),initiate:C(F,_)},i(D,F)),yt(_)&&Y(q,{name:F,select:m(),initiate:K(F)},i(I,F)),ye(_)&&Y(q,{name:F,select:u(F,_),initiate:M(F,_)},i(D,F))}}}});var an=We($e());export{Re as NamedSchemaError,Ue as QueryStatus,Xt as _NEVER,We as buildCreateApi,Me as copyWithStructuralSharing,$e as coreModule,Ke as coreModuleName,an as createApi,qe as defaultSerializeQueryArgs,Zt as fakeBaseQuery,Nt as fetchBaseQuery,Lt as retry,jt as setupListeners,Ne as skipToken};
+//# sourceMappingURL=rtk-query.browser.mjs.map
Index: node_modules/@reduxjs/toolkit/dist/query/rtk-query.browser.mjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/rtk-query.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/rtk-query.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/query/core/apiState.ts","../../src/query/core/rtkImports.ts","../../src/query/utils/copyWithStructuralSharing.ts","../../src/query/utils/countObjectKeys.ts","../../src/query/utils/flatten.ts","../../src/query/utils/isAbsoluteUrl.ts","../../src/query/utils/isDocumentVisible.ts","../../src/query/utils/isNotNullish.ts","../../src/query/utils/isOnline.ts","../../src/query/utils/joinUrls.ts","../../src/query/utils/getOrInsert.ts","../../src/query/fetchBaseQuery.ts","../../src/query/HandledError.ts","../../src/query/retry.ts","../../src/query/core/setupListeners.ts","../../src/query/endpointDefinitions.ts","../../src/query/core/buildThunks.ts","../../src/query/core/buildInitiate.ts","../../src/tsHelpers.ts","../../src/query/standardSchema.ts","../../src/query/core/buildSlice.ts","../../src/query/core/buildSelectors.ts","../../src/query/createApi.ts","../../src/query/defaultSerializeQueryArgs.ts","../../src/query/fakeBaseQuery.ts","../../src/query/core/module.ts","../../src/query/tsHelpers.ts","../../src/query/core/buildMiddleware/batchActions.ts","../../src/query/core/buildMiddleware/cacheCollection.ts","../../src/query/core/buildMiddleware/cacheLifecycle.ts","../../src/query/core/buildMiddleware/devMiddleware.ts","../../src/query/core/buildMiddleware/invalidationByTags.ts","../../src/query/core/buildMiddleware/polling.ts","../../src/query/core/buildMiddleware/queryLifecycle.ts","../../src/query/core/buildMiddleware/windowEventHandling.ts","../../src/query/core/buildMiddleware/index.ts","../../src/query/core/index.ts"],"sourcesContent":["import type { SerializedError } from '@reduxjs/toolkit';\nimport type { BaseQueryError } from '../baseQueryTypes';\nimport type { BaseEndpointDefinition, EndpointDefinitions, FullTagDescription, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFromAnyQuery, QueryDefinition, ResultTypeFrom } from '../endpointDefinitions';\nimport type { Id, WithRequiredProp } from '../tsHelpers';\nexport type QueryCacheKey = string & {\n  _type: 'queryCacheKey';\n};\nexport type QuerySubstateIdentifier = {\n  queryCacheKey: QueryCacheKey;\n};\nexport type MutationSubstateIdentifier = {\n  requestId: string;\n  fixedCacheKey?: string;\n} | {\n  requestId?: string;\n  fixedCacheKey: string;\n};\nexport type RefetchConfigOptions = {\n  refetchOnMountOrArgChange: boolean | number;\n  refetchOnReconnect: boolean;\n  refetchOnFocus: boolean;\n};\nexport type InfiniteQueryConfigOptions<DataType, PageParam, QueryArg> = {\n  /**\n   * The initial page parameter to use for the first page fetch.\n   */\n  initialPageParam: PageParam;\n  /**\n   * This function is required to automatically get the next cursor for infinite queries.\n   * The result will also be used to determine the value of `hasNextPage`.\n   */\n  getNextPageParam: (lastPage: DataType, allPages: Array<DataType>, lastPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * This function can be set to automatically get the previous cursor for infinite queries.\n   * The result will also be used to determine the value of `hasPreviousPage`.\n   */\n  getPreviousPageParam?: (firstPage: DataType, allPages: Array<DataType>, firstPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * If specified, only keep this many pages in cache at once.\n   * If additional pages are fetched, older pages in the other\n   * direction will be dropped from the cache.\n   */\n  maxPages?: number;\n};\nexport type InfiniteData<DataType, PageParam> = {\n  pages: Array<DataType>;\n  pageParams: Array<PageParam>;\n};\n\n/**\n * Strings describing the query state at any given time.\n */\nexport enum QueryStatus {\n  uninitialized = 'uninitialized',\n  pending = 'pending',\n  fulfilled = 'fulfilled',\n  rejected = 'rejected',\n}\nexport type RequestStatusFlags = {\n  status: QueryStatus.uninitialized;\n  isUninitialized: true;\n  isLoading: false;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.pending;\n  isUninitialized: false;\n  isLoading: true;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.fulfilled;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: true;\n  isError: false;\n} | {\n  status: QueryStatus.rejected;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: false;\n  isError: true;\n};\nexport function getRequestStatusFlags(status: QueryStatus): RequestStatusFlags {\n  return {\n    status,\n    isUninitialized: status === QueryStatus.uninitialized,\n    isLoading: status === QueryStatus.pending,\n    isSuccess: status === QueryStatus.fulfilled,\n    isError: status === QueryStatus.rejected\n  } as any;\n}\n\n/**\n * @public\n */\nexport type SubscriptionOptions = {\n  /**\n   * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).\n   */\n  pollingInterval?: number;\n  /**\n   *  Defaults to 'false'. This setting allows you to control whether RTK Query will continue polling if the window is not focused.\n   *\n   *  If pollingInterval is not set or set to 0, this **will not be evaluated** until pollingInterval is greater than 0.\n   *\n   *  Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  skipPollingIfUnfocused?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n};\nexport type Subscribers = {\n  [requestId: string]: SubscriptionOptions;\n};\nexport type QueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any> ? K : never }[keyof Definitions];\nexport type InfiniteQueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? K : never }[keyof Definitions];\nexport type MutationKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends MutationDefinition<any, any, any, any> ? K : never }[keyof Definitions];\ntype BaseQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = {\n  /**\n   * The argument originally passed into the hook or `initiate` action call\n   */\n  originalArgs: QueryArgFromAnyQuery<D>;\n  /**\n   * A unique ID associated with the request\n   */\n  requestId: string;\n  /**\n   * The received data from the query\n   */\n  data?: DataType;\n  /**\n   * The received error if applicable\n   */\n  error?: SerializedError | (D extends QueryDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  /**\n   * The name of the endpoint associated with the query\n   */\n  endpointName: string;\n  /**\n   * Time that the latest query started\n   */\n  startedTimeStamp: number;\n  /**\n   * Time that the latest query was fulfilled\n   */\n  fulfilledTimeStamp?: number;\n};\nexport type QuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = Id<({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'data' | 'fulfilledTimeStamp'> & {\n  error: undefined;\n}) | ({\n  status: QueryStatus.pending;\n} & BaseQuerySubState<D, DataType>) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'error'>) | {\n  status: QueryStatus.uninitialized;\n  originalArgs?: undefined;\n  data?: undefined;\n  error?: undefined;\n  requestId?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n}>;\nexport type InfiniteQueryDirection = 'forward' | 'backward';\nexport type InfiniteQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any> ? QuerySubState<D, InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>> & {\n  direction?: InfiniteQueryDirection;\n} : never;\ntype BaseMutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = {\n  requestId: string;\n  data?: ResultTypeFrom<D>;\n  error?: SerializedError | (D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  endpointName: string;\n  startedTimeStamp: number;\n  fulfilledTimeStamp?: number;\n};\nexport type MutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = (({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseMutationSubState<D>, 'data' | 'fulfilledTimeStamp'>) & {\n  error: undefined;\n}) | (({\n  status: QueryStatus.pending;\n} & BaseMutationSubState<D>) & {\n  data?: undefined;\n}) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseMutationSubState<D>, 'error'>) | {\n  requestId?: undefined;\n  status: QueryStatus.uninitialized;\n  data?: undefined;\n  error?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n};\nexport type CombinedState<D extends EndpointDefinitions, E extends string, ReducerPath extends string> = {\n  queries: QueryState<D>;\n  mutations: MutationState<D>;\n  provided: InvalidationState<E>;\n  subscriptions: SubscriptionState;\n  config: ConfigState<ReducerPath>;\n};\nexport type InvalidationState<TagTypes extends string> = {\n  tags: { [_ in TagTypes]: {\n    [id: string]: Array<QueryCacheKey>;\n    [id: number]: Array<QueryCacheKey>;\n  } };\n  keys: Record<QueryCacheKey, Array<FullTagDescription<any>>>;\n};\nexport type QueryState<D extends EndpointDefinitions> = {\n  [queryCacheKey: string]: QuerySubState<D[string]> | InfiniteQuerySubState<D[string]> | undefined;\n};\nexport type SubscriptionState = {\n  [queryCacheKey: string]: Subscribers | undefined;\n};\nexport type ConfigState<ReducerPath> = RefetchConfigOptions & {\n  reducerPath: ReducerPath;\n  online: boolean;\n  focused: boolean;\n  middlewareRegistered: boolean | 'conflict';\n} & ModifiableConfigState;\nexport type ModifiableConfigState = {\n  keepUnusedDataFor: number;\n  invalidationBehavior: 'delayed' | 'immediately';\n} & RefetchConfigOptions;\nexport type MutationState<D extends EndpointDefinitions> = {\n  [requestId: string]: MutationSubState<D[string]> | undefined;\n};\nexport type RootState<Definitions extends EndpointDefinitions, TagTypes extends string, ReducerPath extends string> = { [P in ReducerPath]: CombinedState<Definitions, TagTypes, P> };","// This file exists to consolidate all of the imports from the `@reduxjs/toolkit` package.\n// ESBuild does not de-duplicate imports, so this file is used to ensure that each method\n// imported is only listed once, and there's only one mention of the `@reduxjs/toolkit` package.\n\nexport { createAction, createSlice, createSelector, createAsyncThunk, combineReducers, createNextState, isAnyOf, isAllOf, isAction, isPending, isRejected, isFulfilled, isRejectedWithValue, isAsyncThunkAction, prepareAutoBatched, SHOULD_AUTOBATCH, isPlainObject, nanoid } from '@reduxjs/toolkit';","import { isPlainObject as _iPO } from '../core/rtkImports';\n\n// remove type guard\nconst isPlainObject: (_: any) => boolean = _iPO;\nexport function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T;\nexport function copyWithStructuralSharing(oldObj: any, newObj: any): any {\n  if (oldObj === newObj || !(isPlainObject(oldObj) && isPlainObject(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {\n    return newObj;\n  }\n  const newKeys = Object.keys(newObj);\n  const oldKeys = Object.keys(oldObj);\n  let isSameObject = newKeys.length === oldKeys.length;\n  const mergeObj: any = Array.isArray(newObj) ? [] : {};\n  for (const key of newKeys) {\n    mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);\n    if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];\n  }\n  return isSameObject ? oldObj : mergeObj;\n}","// Fast method for counting an object's keys\n// without resorting to `Object.keys(obj).length\n// Will this make a big difference in perf? Probably not\n// But we can save a few allocations.\n\nexport function countObjectKeys(obj: Record<any, any>) {\n  let count = 0;\n  for (const _key in obj) {\n    count++;\n  }\n  return count;\n}","/**\r\n * Alternative to `Array.flat(1)`\r\n * @param arr An array like [1,2,3,[1,2]]\r\n * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\r\n */\nexport const flatten = (arr: readonly any[]) => [].concat(...arr);","/**\r\n * If either :// or // is present consider it to be an absolute url\r\n *\r\n * @param url string\r\n */\n\nexport function isAbsoluteUrl(url: string) {\n  return new RegExp(`(^|:)//`).test(url);\n}","/**\r\n * Assumes true for a non-browser env, otherwise makes a best effort\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState\r\n */\nexport function isDocumentVisible(): boolean {\n  // `document` may not exist in non-browser envs (like RN)\n  if (typeof document === 'undefined') {\n    return true;\n  }\n  // Match true for visible, prerender, undefined\n  return document.visibilityState !== 'hidden';\n}","export function isNotNullish<T>(v: T | null | undefined): v is T {\n  return v != null;\n}","/**\n * Assumes a browser is online if `undefined`, otherwise makes a best effort\n * @link https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine\n */\nexport function isOnline() {\n  // We set the default config value in the store, so we'd need to check for this in a SSR env\n  return typeof navigator === 'undefined' ? true : navigator.onLine === undefined ? true : navigator.onLine;\n}","import { isAbsoluteUrl } from './isAbsoluteUrl';\nconst withoutTrailingSlash = (url: string) => url.replace(/\\/$/, '');\nconst withoutLeadingSlash = (url: string) => url.replace(/^\\//, '');\nexport function joinUrls(base: string | undefined, url: string | undefined): string {\n  if (!base) {\n    return url!;\n  }\n  if (!url) {\n    return base;\n  }\n  if (isAbsoluteUrl(url)) {\n    return url;\n  }\n  const delimiter = base.endsWith('/') || !url.startsWith('?') ? '/' : '';\n  base = withoutTrailingSlash(base);\n  url = withoutLeadingSlash(url);\n  return `${base}${delimiter}${url}`;\n}","export function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}","import { joinUrls } from './utils';\nimport { isPlainObject } from './core/rtkImports';\nimport type { BaseQueryApi, BaseQueryFn } from './baseQueryTypes';\nimport type { MaybePromise, Override } from './tsHelpers';\nexport type ResponseHandler = 'content-type' | 'json' | 'text' | ((response: Response) => Promise<any>);\ntype CustomRequestInit = Override<RequestInit, {\n  headers?: Headers | string[][] | Record<string, string | undefined> | undefined;\n}>;\nexport interface FetchArgs extends CustomRequestInit {\n  url: string;\n  params?: Record<string, any>;\n  body?: any;\n  responseHandler?: ResponseHandler;\n  validateStatus?: (response: Response, body: any) => boolean;\n  /**\n   * A number in milliseconds that represents that maximum time a request can take before timing out.\n   */\n  timeout?: number;\n}\n\n/**\n * A mini-wrapper that passes arguments straight through to\n * {@link [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)}.\n * Avoids storing `fetch` in a closure, in order to permit mocking/monkey-patching.\n */\nconst defaultFetchFn: typeof fetch = (...args) => fetch(...args);\nconst defaultValidateStatus = (response: Response) => response.status >= 200 && response.status <= 299;\nconst defaultIsJsonContentType = (headers: Headers) => /*applicat*//ion\\/(vnd\\.api\\+)?json/.test(headers.get('content-type') || '');\nexport type FetchBaseQueryError = {\n  /**\n   * * `number`:\n   *   HTTP status code\n   */\n  status: number;\n  data: unknown;\n} | {\n  /**\n   * * `\"FETCH_ERROR\"`:\n   *   An error that occurred during execution of `fetch` or the `fetchFn` callback option\n   **/\n  status: 'FETCH_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"PARSING_ERROR\"`:\n   *   An error happened during parsing.\n   *   Most likely a non-JSON-response was returned with the default `responseHandler` \"JSON\",\n   *   or an error occurred while executing a custom `responseHandler`.\n   **/\n  status: 'PARSING_ERROR';\n  originalStatus: number;\n  data: string;\n  error: string;\n} | {\n  /**\n   * * `\"TIMEOUT_ERROR\"`:\n   *   Request timed out\n   **/\n  status: 'TIMEOUT_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"CUSTOM_ERROR\"`:\n   *   A custom error type that you can return from your `queryFn` where another error might not make sense.\n   **/\n  status: 'CUSTOM_ERROR';\n  data?: unknown;\n  error: string;\n};\nfunction stripUndefined(obj: any) {\n  if (!isPlainObject(obj)) {\n    return obj;\n  }\n  const copy: Record<string, any> = {\n    ...obj\n  };\n  for (const [k, v] of Object.entries(copy)) {\n    if (v === undefined) delete copy[k];\n  }\n  return copy;\n}\nexport type FetchBaseQueryArgs = {\n  baseUrl?: string;\n  prepareHeaders?: (headers: Headers, api: Pick<BaseQueryApi, 'getState' | 'extra' | 'endpoint' | 'type' | 'forced'> & {\n    arg: string | FetchArgs;\n    extraOptions: unknown;\n  }) => MaybePromise<Headers | void>;\n  fetchFn?: (input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>;\n  paramsSerializer?: (params: Record<string, any>) => string;\n  /**\n   * By default, we only check for 'application/json' and 'application/vnd.api+json' as the content-types for json. If you need to support another format, you can pass\n   * in a predicate function for your given api to get the same automatic stringifying behavior\n   * @example\n   * ```ts\n   * const isJsonContentType = (headers: Headers) => [\"application/vnd.api+json\", \"application/json\", \"application/vnd.hal+json\"].includes(headers.get(\"content-type\")?.trim());\n   * ```\n   */\n  isJsonContentType?: (headers: Headers) => boolean;\n  /**\n   * Defaults to `application/json`;\n   */\n  jsonContentType?: string;\n\n  /**\n   * Custom replacer function used when calling `JSON.stringify()`;\n   */\n  jsonReplacer?: (this: any, key: string, value: any) => any;\n} & RequestInit & Pick<FetchArgs, 'responseHandler' | 'validateStatus' | 'timeout'>;\nexport type FetchBaseQueryMeta = {\n  request: Request;\n  response?: Response;\n};\n\n/**\n * This is a very small wrapper around fetch that aims to simplify requests.\n *\n * @example\n * ```ts\n * const baseQuery = fetchBaseQuery({\n *   baseUrl: 'https://api.your-really-great-app.com/v1/',\n *   prepareHeaders: (headers, { getState }) => {\n *     const token = (getState() as RootState).auth.token;\n *     // If we have a token set in state, let's assume that we should be passing it.\n *     if (token) {\n *       headers.set('authorization', `Bearer ${token}`);\n *     }\n *     return headers;\n *   },\n * })\n * ```\n *\n * @param {string} baseUrl\n * The base URL for an API service.\n * Typically in the format of https://example.com/\n *\n * @param {(headers: Headers, api: { getState: () => unknown; arg: string | FetchArgs; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders\n * An optional function that can be used to inject headers on requests.\n * Provides a Headers object, most of the `BaseQueryApi` (`dispatch` is not available), and the arg passed into the query function.\n * Useful for setting authentication or headers that need to be set conditionally.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers\n *\n * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>} fetchFn\n * Accepts a custom `fetch` function if you do not want to use the default on the window.\n * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`\n *\n * @param {(params: Record<string, unknown>) => string} paramsSerializer\n * An optional function that can be used to stringify querystring parameters.\n *\n * @param {(headers: Headers) => boolean} isJsonContentType\n * An optional predicate function to determine if `JSON.stringify()` should be called on the `body` arg of `FetchArgs`\n *\n * @param {string} jsonContentType Used when automatically setting the content-type header for a request with a jsonifiable body that does not have an explicit content-type header. Defaults to `application/json`.\n *\n * @param {(this: any, key: string, value: any) => any} jsonReplacer Custom replacer function used when calling `JSON.stringify()`.\n *\n * @param {number} timeout\n * A number in milliseconds that represents the maximum time a request can take before timing out.\n */\n\nexport function fetchBaseQuery({\n  baseUrl,\n  prepareHeaders = x => x,\n  fetchFn = defaultFetchFn,\n  paramsSerializer,\n  isJsonContentType = defaultIsJsonContentType,\n  jsonContentType = 'application/json',\n  jsonReplacer,\n  timeout: defaultTimeout,\n  responseHandler: globalResponseHandler,\n  validateStatus: globalValidateStatus,\n  ...baseFetchOptions\n}: FetchBaseQueryArgs = {}): BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta> {\n  if (typeof fetch === 'undefined' && fetchFn === defaultFetchFn) {\n    console.warn('Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.');\n  }\n  return async (arg, api, extraOptions) => {\n    const {\n      getState,\n      extra,\n      endpoint,\n      forced,\n      type\n    } = api;\n    let meta: FetchBaseQueryMeta | undefined;\n    let {\n      url,\n      headers = new Headers(baseFetchOptions.headers),\n      params = undefined,\n      responseHandler = globalResponseHandler ?? 'json' as const,\n      validateStatus = globalValidateStatus ?? defaultValidateStatus,\n      timeout = defaultTimeout,\n      ...rest\n    } = typeof arg == 'string' ? {\n      url: arg\n    } : arg;\n    let abortController: AbortController | undefined,\n      signal = api.signal;\n    if (timeout) {\n      abortController = new AbortController();\n      api.signal.addEventListener('abort', abortController.abort);\n      signal = abortController.signal;\n    }\n    let config: RequestInit = {\n      ...baseFetchOptions,\n      signal,\n      ...rest\n    };\n    headers = new Headers(stripUndefined(headers));\n    config.headers = (await prepareHeaders(headers, {\n      getState,\n      arg,\n      extra,\n      endpoint,\n      forced,\n      type,\n      extraOptions\n    })) || headers;\n\n    // Only set the content-type to json if appropriate. Will not be true for FormData, ArrayBuffer, Blob, etc.\n    const isJsonifiable = (body: any) => typeof body === 'object' && (isPlainObject(body) || Array.isArray(body) || typeof body.toJSON === 'function');\n    if (!config.headers.has('content-type') && isJsonifiable(config.body)) {\n      config.headers.set('content-type', jsonContentType);\n    }\n    if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {\n      config.body = JSON.stringify(config.body, jsonReplacer);\n    }\n    if (params) {\n      const divider = ~url.indexOf('?') ? '&' : '?';\n      const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));\n      url += divider + query;\n    }\n    url = joinUrls(baseUrl, url);\n    const request = new Request(url, config);\n    const requestClone = new Request(url, config);\n    meta = {\n      request: requestClone\n    };\n    let response,\n      timedOut = false,\n      timeoutId = abortController && setTimeout(() => {\n        timedOut = true;\n        abortController!.abort();\n      }, timeout);\n    try {\n      response = await fetchFn(request);\n    } catch (e) {\n      return {\n        error: {\n          status: timedOut ? 'TIMEOUT_ERROR' : 'FETCH_ERROR',\n          error: String(e)\n        },\n        meta\n      };\n    } finally {\n      if (timeoutId) clearTimeout(timeoutId);\n      abortController?.signal.removeEventListener('abort', abortController.abort);\n    }\n    const responseClone = response.clone();\n    meta.response = responseClone;\n    let resultData: any;\n    let responseText: string = '';\n    try {\n      let handleResponseError;\n      await Promise.all([handleResponse(response, responseHandler).then(r => resultData = r, e => handleResponseError = e),\n      // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182\n      // we *have* to \"use up\" both streams at the same time or they will stop running in node-fetch scenarios\n      responseClone.text().then(r => responseText = r, () => {})]);\n      if (handleResponseError) throw handleResponseError;\n    } catch (e) {\n      return {\n        error: {\n          status: 'PARSING_ERROR',\n          originalStatus: response.status,\n          data: responseText,\n          error: String(e)\n        },\n        meta\n      };\n    }\n    return validateStatus(response, resultData) ? {\n      data: resultData,\n      meta\n    } : {\n      error: {\n        status: response.status,\n        data: resultData\n      },\n      meta\n    };\n  };\n  async function handleResponse(response: Response, responseHandler: ResponseHandler) {\n    if (typeof responseHandler === 'function') {\n      return responseHandler(response);\n    }\n    if (responseHandler === 'content-type') {\n      responseHandler = isJsonContentType(response.headers) ? 'json' : 'text';\n    }\n    if (responseHandler === 'json') {\n      const text = await response.text();\n      return text.length ? JSON.parse(text) : null;\n    }\n    return response.text();\n  }\n}","export class HandledError {\n  constructor(public readonly value: any, public readonly meta: any = undefined) {}\n}","import type { BaseQueryApi, BaseQueryArg, BaseQueryEnhancer, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta } from './baseQueryTypes';\nimport type { FetchBaseQueryError } from './fetchBaseQuery';\nimport { HandledError } from './HandledError';\n\n/**\n * Exponential backoff based on the attempt number.\n *\n * @remarks\n * 1. 600ms * random(0.4, 1.4)\n * 2. 1200ms * random(0.4, 1.4)\n * 3. 2400ms * random(0.4, 1.4)\n * 4. 4800ms * random(0.4, 1.4)\n * 5. 9600ms * random(0.4, 1.4)\n *\n * @param attempt - Current attempt\n * @param maxRetries - Maximum number of retries\n */\nasync function defaultBackoff(attempt: number = 0, maxRetries: number = 5) {\n  const attempts = Math.min(attempt, maxRetries);\n  const timeout = ~~((Math.random() + 0.4) * (300 << attempts)); // Force a positive int in the case we make this an option\n  await new Promise(resolve => setTimeout((res: any) => resolve(res), timeout));\n}\ntype RetryConditionFunction = (error: BaseQueryError<BaseQueryFn>, args: BaseQueryArg<BaseQueryFn>, extraArgs: {\n  attempt: number;\n  baseQueryApi: BaseQueryApi;\n  extraOptions: BaseQueryExtraOptions<BaseQueryFn> & RetryOptions;\n}) => boolean;\nexport type RetryOptions = {\n  /**\n   * Function used to determine delay between retries\n   */\n  backoff?: (attempt: number, maxRetries: number) => Promise<void>;\n} & ({\n  /**\n   * How many times the query will be retried (default: 5)\n   */\n  maxRetries?: number;\n  retryCondition?: undefined;\n} | {\n  /**\n   * Callback to determine if a retry should be attempted.\n   * Return `true` for another retry and `false` to quit trying prematurely.\n   */\n  retryCondition?: RetryConditionFunction;\n  maxRetries?: undefined;\n});\nfunction fail<BaseQuery extends BaseQueryFn = BaseQueryFn>(error: BaseQueryError<BaseQuery>, meta?: BaseQueryMeta<BaseQuery>): never {\n  throw Object.assign(new HandledError({\n    error,\n    meta\n  }), {\n    throwImmediately: true\n  });\n}\nconst EMPTY_OPTIONS = {};\nconst retryWithBackoff: BaseQueryEnhancer<unknown, RetryOptions, RetryOptions | void> = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {\n  // We need to figure out `maxRetries` before we define `defaultRetryCondition.\n  // This is probably goofy, but ought to work.\n  // Put our defaults in one array, filter out undefineds, grab the last value.\n  const possibleMaxRetries: number[] = [5, (defaultOptions as any || EMPTY_OPTIONS).maxRetries, (extraOptions as any || EMPTY_OPTIONS).maxRetries].filter(x => x !== undefined);\n  const [maxRetries] = possibleMaxRetries.slice(-1);\n  const defaultRetryCondition: RetryConditionFunction = (_, __, {\n    attempt\n  }) => attempt <= maxRetries;\n  const options: {\n    maxRetries: number;\n    backoff: typeof defaultBackoff;\n    retryCondition: typeof defaultRetryCondition;\n  } = {\n    maxRetries,\n    backoff: defaultBackoff,\n    retryCondition: defaultRetryCondition,\n    ...defaultOptions,\n    ...extraOptions\n  };\n  let retry = 0;\n  while (true) {\n    try {\n      const result = await baseQuery(args, api, extraOptions);\n      // baseQueries _should_ return an error property, so we should check for that and throw it to continue retrying\n      if (result.error) {\n        throw new HandledError(result);\n      }\n      return result;\n    } catch (e: any) {\n      retry++;\n      if (e.throwImmediately) {\n        if (e instanceof HandledError) {\n          return e.value;\n        }\n\n        // We don't know what this is, so we have to rethrow it\n        throw e;\n      }\n      if (e instanceof HandledError && !options.retryCondition(e.value.error as FetchBaseQueryError, args, {\n        attempt: retry,\n        baseQueryApi: api,\n        extraOptions\n      })) {\n        return e.value;\n      }\n      await options.backoff(retry, options.maxRetries);\n    }\n  }\n};\n\n/**\n * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"Retry every request 5 times by default\"\n * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'\n * interface Post {\n *   id: number\n *   name: string\n * }\n * type PostsResponse = Post[]\n *\n * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.\n * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });\n * export const api = createApi({\n *   baseQuery: staggeredBaseQuery,\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsResponse, void>({\n *       query: () => ({ url: 'posts' }),\n *     }),\n *     getPost: build.query<PostsResponse, string>({\n *       query: (id) => ({ url: `post/${id}` }),\n *       extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint\n *     }),\n *   }),\n * });\n *\n * export const { useGetPostsQuery, useGetPostQuery } = api;\n * ```\n */\nexport const retry = /* @__PURE__ */Object.assign(retryWithBackoff, {\n  fail\n});","import type { ThunkDispatch, ActionCreatorWithoutPayload // Workaround for API-Extractor\n} from '@reduxjs/toolkit';\nimport { createAction } from './rtkImports';\nexport const onFocus = /* @__PURE__ */createAction('__rtkq/focused');\nexport const onFocusLost = /* @__PURE__ */createAction('__rtkq/unfocused');\nexport const onOnline = /* @__PURE__ */createAction('__rtkq/online');\nexport const onOffline = /* @__PURE__ */createAction('__rtkq/offline');\nlet initialized = false;\n\n/**\n * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.\n * It requires the dispatch method from your store.\n * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,\n * but you have the option of providing a callback for more granular control.\n *\n * @example\n * ```ts\n * setupListeners(store.dispatch)\n * ```\n *\n * @param dispatch - The dispatch method from your store\n * @param customHandler - An optional callback for more granular control over listener behavior\n * @returns Return value of the handler.\n * The default handler returns an `unsubscribe` method that can be called to remove the listeners.\n */\nexport function setupListeners(dispatch: ThunkDispatch<any, any, any>, customHandler?: (dispatch: ThunkDispatch<any, any, any>, actions: {\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n}) => () => void) {\n  function defaultHandler() {\n    const handleFocus = () => dispatch(onFocus());\n    const handleFocusLost = () => dispatch(onFocusLost());\n    const handleOnline = () => dispatch(onOnline());\n    const handleOffline = () => dispatch(onOffline());\n    const handleVisibilityChange = () => {\n      if (window.document.visibilityState === 'visible') {\n        handleFocus();\n      } else {\n        handleFocusLost();\n      }\n    };\n    if (!initialized) {\n      if (typeof window !== 'undefined' && window.addEventListener) {\n        // Handle focus events\n        window.addEventListener('visibilitychange', handleVisibilityChange, false);\n        window.addEventListener('focus', handleFocus, false);\n\n        // Handle connection events\n        window.addEventListener('online', handleOnline, false);\n        window.addEventListener('offline', handleOffline, false);\n        initialized = true;\n      }\n    }\n    const unsubscribe = () => {\n      window.removeEventListener('focus', handleFocus);\n      window.removeEventListener('visibilitychange', handleVisibilityChange);\n      window.removeEventListener('online', handleOnline);\n      window.removeEventListener('offline', handleOffline);\n      initialized = false;\n    };\n    return unsubscribe;\n  }\n  return customHandler ? customHandler(dispatch, {\n    onFocus,\n    onFocusLost,\n    onOffline,\n    onOnline\n  }) : defaultHandler();\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","import type { AsyncThunk, AsyncThunkPayloadCreator, Draft, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Patch } from 'immer';\nimport { isDraftable, produceWithPatches } from 'immer';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, BaseQueryFn, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryCombinedArg, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFrom, QueryDefinition, ResultDescription, ResultTypeFrom, SchemaFailureConverter, SchemaFailureHandler, SchemaFailureInfo } from '../endpointDefinitions';\nimport { calculateProvidedBy, isInfiniteQueryDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { HandledError } from '../HandledError';\nimport type { UnwrapPromise } from '../tsHelpers';\nimport type { RootState, QueryKeys, QuerySubstateIdentifier, InfiniteData, InfiniteQueryConfigOptions, QueryCacheKey, InfiniteQueryDirection, InfiniteQueryKeys } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { InfiniteQueryActionCreatorResult, QueryActionCreatorResult, StartInfiniteQueryActionCreatorOptions, StartQueryActionCreatorOptions } from './buildInitiate';\nimport { forceQueryFnSymbol, isUpsertQuery } from './buildInitiate';\nimport type { AllSelectors } from './buildSelectors';\nimport type { ApiEndpointQuery, PrefetchOptions } from './module';\nimport { createAsyncThunk, isAllOf, isFulfilled, isPending, isRejected, isRejectedWithValue, SHOULD_AUTOBATCH } from './rtkImports';\nimport { parseWithSchema, NamedSchemaError } from '../standardSchema';\nexport type BuildThunksApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = Matchers<QueryThunk, Definition>;\nexport type BuildThunksApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = Matchers<InfiniteQueryThunk<any>, Definition>;\nexport type BuildThunksApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = Matchers<MutationThunk, Definition>;\ntype EndpointThunk<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = Definition extends EndpointDefinition<infer QueryArg, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<ResultType, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<InfiniteData<ResultType, PageParam>, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : never;\nexport type PendingAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['pending']>;\nexport type FulfilledAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['fulfilled']>;\nexport type RejectedAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['rejected']>;\nexport type Matcher<M> = (value: any) => value is M;\nexport interface Matchers<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> {\n  matchPending: Matcher<PendingAction<Thunk, Definition>>;\n  matchFulfilled: Matcher<FulfilledAction<Thunk, Definition>>;\n  matchRejected: Matcher<RejectedAction<Thunk, Definition>>;\n}\nexport type QueryThunkArg = QuerySubstateIdentifier & StartQueryActionCreatorOptions & {\n  type: 'query';\n  originalArgs: unknown;\n  endpointName: string;\n};\nexport type InfiniteQueryThunkArg<D extends InfiniteQueryDefinition<any, any, any, any, any>> = QuerySubstateIdentifier & StartInfiniteQueryActionCreatorOptions<D> & {\n  type: `query`;\n  originalArgs: unknown;\n  endpointName: string;\n  param: unknown;\n  direction?: InfiniteQueryDirection;\n};\ntype MutationThunkArg = {\n  type: 'mutation';\n  originalArgs: unknown;\n  endpointName: string;\n  track?: boolean;\n  fixedCacheKey?: string;\n};\nexport type ThunkResult = unknown;\nexport type ThunkApiMetaConfig = {\n  pendingMeta: {\n    startedTimeStamp: number;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  fulfilledMeta: {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  rejectedMeta: {\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n};\nexport type QueryThunk = AsyncThunk<ThunkResult, QueryThunkArg, ThunkApiMetaConfig>;\nexport type InfiniteQueryThunk<D extends InfiniteQueryDefinition<any, any, any, any, any>> = AsyncThunk<ThunkResult, InfiniteQueryThunkArg<D>, ThunkApiMetaConfig>;\nexport type MutationThunk = AsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig>;\nfunction defaultTransformResponse(baseQueryReturnValue: unknown) {\n  return baseQueryReturnValue;\n}\nexport type MaybeDrafted<T> = T | Draft<T>;\nexport type Recipe<T> = (data: MaybeDrafted<T>) => void | MaybeDrafted<T>;\nexport type UpsertRecipe<T> = (data: MaybeDrafted<T> | undefined) => void | MaybeDrafted<T>;\nexport type PatchQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, patches: readonly Patch[], updateProvided?: boolean) => ThunkAction<void, PartialState, any, UnknownAction>;\nexport type AllQueryKeys<Definitions extends EndpointDefinitions> = QueryKeys<Definitions> | InfiniteQueryKeys<Definitions>;\nexport type QueryArgFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryArgFrom<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryArgFrom<Definitions[EndpointName]> : never;\nexport type DataFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteData<ResultTypeFrom<Definitions[EndpointName]>, PageParamFrom<Definitions[EndpointName]>> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? ResultTypeFrom<Definitions[EndpointName]> : unknown;\nexport type UpsertThunkResult<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryActionCreatorResult<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryActionCreatorResult<Definitions[EndpointName]> : QueryActionCreatorResult<never>;\nexport type UpdateQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, updateRecipe: Recipe<DataFromAnyQueryDefinition<Definitions, EndpointName>>, updateProvided?: boolean) => ThunkAction<PatchCollection, PartialState, any, UnknownAction>;\nexport type UpsertQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, value: DataFromAnyQueryDefinition<Definitions, EndpointName>) => ThunkAction<UpsertThunkResult<Definitions, EndpointName>, PartialState, any, UnknownAction>;\n\n/**\n * An object returned from dispatching a `api.util.updateQueryData` call.\n */\nexport type PatchCollection = {\n  /**\n   * An `immer` Patch describing the cache update.\n   */\n  patches: Patch[];\n  /**\n   * An `immer` Patch to revert the cache update.\n   */\n  inversePatches: Patch[];\n  /**\n   * A function that will undo the cache update.\n   */\n  undo: () => void;\n};\ntype TransformCallback = (baseQueryReturnValue: unknown, meta: unknown, arg: unknown) => any;\nexport const addShouldAutoBatch = <T extends Record<string, any>,>(arg: T = {} as T): T & {\n  [SHOULD_AUTOBATCH]: true;\n} => {\n  return {\n    ...arg,\n    [SHOULD_AUTOBATCH]: true\n  };\n};\nexport function buildThunks<BaseQuery extends BaseQueryFn, ReducerPath extends string, Definitions extends EndpointDefinitions>({\n  reducerPath,\n  baseQuery,\n  context: {\n    endpointDefinitions\n  },\n  serializeQueryArgs,\n  api,\n  assertTagType,\n  selectors,\n  onSchemaFailure,\n  catchSchemaFailure: globalCatchSchemaFailure,\n  skipSchemaValidation: globalSkipSchemaValidation\n}: {\n  baseQuery: BaseQuery;\n  reducerPath: ReducerPath;\n  context: ApiContext<Definitions>;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  api: Api<BaseQuery, Definitions, ReducerPath, any>;\n  assertTagType: AssertTagTypes;\n  selectors: AllSelectors;\n  onSchemaFailure: SchemaFailureHandler | undefined;\n  catchSchemaFailure: SchemaFailureConverter<BaseQuery> | undefined;\n  skipSchemaValidation: boolean | undefined;\n}) {\n  type State = RootState<any, string, ReducerPath>;\n  const patchQueryData: PatchQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {\n    const endpointDefinition = endpointDefinitions[endpointName];\n    const queryCacheKey = serializeQueryArgs({\n      queryArgs: arg,\n      endpointDefinition,\n      endpointName\n    });\n    dispatch(api.internalActions.queryResultPatched({\n      queryCacheKey,\n      patches\n    }));\n    if (!updateProvided) {\n      return;\n    }\n    const newValue = api.endpoints[endpointName].select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, undefined, arg, {}, assertTagType);\n    dispatch(api.internalActions.updateProvidedBy([{\n      queryCacheKey,\n      providedTags\n    }]));\n  };\n  function addToStart<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [item, ...items];\n    return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n  }\n  function addToEnd<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [...items, item];\n    return max && newItems.length > max ? newItems.slice(1) : newItems;\n  }\n  const updateQueryData: UpdateQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {\n    const endpointDefinition = api.endpoints[endpointName];\n    const currentState = endpointDefinition.select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const ret: PatchCollection = {\n      patches: [],\n      inversePatches: [],\n      undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))\n    };\n    if (currentState.status === QueryStatus.uninitialized) {\n      return ret;\n    }\n    let newValue;\n    if ('data' in currentState) {\n      if (isDraftable(currentState.data)) {\n        const [value, patches, inversePatches] = produceWithPatches(currentState.data, updateRecipe);\n        ret.patches.push(...patches);\n        ret.inversePatches.push(...inversePatches);\n        newValue = value;\n      } else {\n        newValue = updateRecipe(currentState.data);\n        ret.patches.push({\n          op: 'replace',\n          path: [],\n          value: newValue\n        });\n        ret.inversePatches.push({\n          op: 'replace',\n          path: [],\n          value: currentState.data\n        });\n      }\n    }\n    if (ret.patches.length === 0) {\n      return ret;\n    }\n    dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));\n    return ret;\n  };\n  const upsertQueryData: UpsertQueryDataThunk<Definitions, State> = (endpointName, arg, value) => dispatch => {\n    type EndpointName = typeof endpointName;\n    const res = dispatch((api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>).initiate(arg, {\n      subscribe: false,\n      forceRefetch: true,\n      [forceQueryFnSymbol]: () => ({\n        data: value\n      })\n    })) as UpsertThunkResult<Definitions, EndpointName>;\n    return res;\n  };\n  const getTransformCallbackForEndpoint = (endpointDefinition: EndpointDefinition<any, any, any, any>, transformFieldName: 'transformResponse' | 'transformErrorResponse'): TransformCallback => {\n    return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName]! as TransformCallback : defaultTransformResponse;\n  };\n\n  // The generic async payload function for all of our thunks\n  const executeEndpoint: AsyncThunkPayloadCreator<ThunkResult, QueryThunkArg | MutationThunkArg | InfiniteQueryThunkArg<any>, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }> = async (arg, {\n    signal,\n    abort,\n    rejectWithValue,\n    fulfillWithValue,\n    dispatch,\n    getState,\n    extra\n  }) => {\n    const endpointDefinition = endpointDefinitions[arg.endpointName];\n    const {\n      metaSchema,\n      skipSchemaValidation = globalSkipSchemaValidation\n    } = endpointDefinition;\n    try {\n      let transformResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformResponse');\n      const baseQueryApi = {\n        signal,\n        abort,\n        dispatch,\n        getState,\n        extra,\n        endpoint: arg.endpointName,\n        type: arg.type,\n        forced: arg.type === 'query' ? isForcedQuery(arg, getState()) : undefined,\n        queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n      };\n      const forceQueryFn = arg.type === 'query' ? arg[forceQueryFnSymbol] : undefined;\n      let finalQueryReturnValue: QueryReturnValue;\n\n      // Infinite query wrapper, which executes the request and returns\n      // the InfiniteData `{pages, pageParams}` structure\n      const fetchPage = async (data: InfiniteData<unknown, unknown>, param: unknown, maxPages: number, previous?: boolean): Promise<QueryReturnValue> => {\n        // This should handle cases where there is no `getPrevPageParam`,\n        // or `getPPP` returned nullish\n        if (param == null && data.pages.length) {\n          return Promise.resolve({\n            data\n          });\n        }\n        const finalQueryArg: InfiniteQueryCombinedArg<any, any> = {\n          queryArg: arg.originalArgs,\n          pageParam: param\n        };\n        const pageResponse = await executeRequest(finalQueryArg);\n        const addTo = previous ? addToStart : addToEnd;\n        return {\n          data: {\n            pages: addTo(data.pages, pageResponse.data, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          },\n          meta: pageResponse.meta\n        };\n      };\n\n      // Wrapper for executing either `query` or `queryFn`,\n      // and handling any errors\n      async function executeRequest(finalQueryArg: unknown): Promise<QueryReturnValue> {\n        let result: QueryReturnValue;\n        const {\n          extraOptions,\n          argSchema,\n          rawResponseSchema,\n          responseSchema\n        } = endpointDefinition;\n        if (argSchema && !skipSchemaValidation) {\n          finalQueryArg = await parseWithSchema(argSchema, finalQueryArg, 'argSchema', {} // we don't have a meta yet, so we can't pass it\n          );\n        }\n        if (forceQueryFn) {\n          // upsertQueryData relies on this to pass in the user-provided value\n          result = forceQueryFn();\n        } else if (endpointDefinition.query) {\n          result = await baseQuery(endpointDefinition.query(finalQueryArg as any), baseQueryApi, extraOptions as any);\n        } else {\n          result = await endpointDefinition.queryFn(finalQueryArg as any, baseQueryApi, extraOptions as any, arg => baseQuery(arg, baseQueryApi, extraOptions as any));\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          const what = endpointDefinition.query ? '`baseQuery`' : '`queryFn`';\n          let err: undefined | string;\n          if (!result) {\n            err = `${what} did not return anything.`;\n          } else if (typeof result !== 'object') {\n            err = `${what} did not return an object.`;\n          } else if (result.error && result.data) {\n            err = `${what} returned an object containing both \\`error\\` and \\`result\\`.`;\n          } else if (result.error === undefined && result.data === undefined) {\n            err = `${what} returned an object containing neither a valid \\`error\\` and \\`result\\`. At least one of them should not be \\`undefined\\``;\n          } else {\n            for (const key of Object.keys(result)) {\n              if (key !== 'error' && key !== 'data' && key !== 'meta') {\n                err = `The object returned by ${what} has the unknown property ${key}.`;\n                break;\n              }\n            }\n          }\n          if (err) {\n            console.error(`Error encountered handling the endpoint ${arg.endpointName}.\n                  ${err}\n                  It needs to return an object with either the shape \\`{ data: <value> }\\` or \\`{ error: <value> }\\` that may contain an optional \\`meta\\` property.\n                  Object returned was:`, result);\n          }\n        }\n        if (result.error) throw new HandledError(result.error, result.meta);\n        let {\n          data\n        } = result;\n        if (rawResponseSchema && !skipSchemaValidation) {\n          data = await parseWithSchema(rawResponseSchema, result.data, 'rawResponseSchema', result.meta);\n        }\n        let transformedResponse = await transformResponse(data, result.meta, finalQueryArg);\n        if (responseSchema && !skipSchemaValidation) {\n          transformedResponse = await parseWithSchema(responseSchema, transformedResponse, 'responseSchema', result.meta);\n        }\n        return {\n          ...result,\n          data: transformedResponse\n        };\n      }\n      if (arg.type === 'query' && 'infiniteQueryOptions' in endpointDefinition) {\n        // This is an infinite query endpoint\n        const {\n          infiniteQueryOptions\n        } = endpointDefinition;\n\n        // Runtime checks should guarantee this is a positive number if provided\n        const {\n          maxPages = Infinity\n        } = infiniteQueryOptions;\n        let result: QueryReturnValue;\n\n        // Start by looking up the existing InfiniteData value from state,\n        // falling back to an empty value if it doesn't exist yet\n        const blankData = {\n          pages: [],\n          pageParams: []\n        };\n        const cachedData = selectors.selectQueryEntry(getState(), arg.queryCacheKey)?.data as InfiniteData<unknown, unknown> | undefined;\n\n        // When the arg changes or the user forces a refetch,\n        // we don't include the `direction` flag. This lets us distinguish\n        // between actually refetching with a forced query, vs just fetching\n        // the next page.\n        const isForcedQueryNeedingRefetch =\n        // arg.forceRefetch\n        isForcedQuery(arg, getState()) && !(arg as InfiniteQueryThunkArg<any>).direction;\n        const existingData = (isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData) as InfiniteData<unknown, unknown>;\n\n        // If the thunk specified a direction and we do have at least one page,\n        // fetch the next or previous page\n        if ('direction' in arg && arg.direction && existingData.pages.length) {\n          const previous = arg.direction === 'backward';\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const param = pageParamFn(infiniteQueryOptions, existingData, arg.originalArgs);\n          result = await fetchPage(existingData, param, maxPages, previous);\n        } else {\n          // Otherwise, fetch the first page and then any remaining pages\n\n          const {\n            initialPageParam = infiniteQueryOptions.initialPageParam\n          } = arg as InfiniteQueryThunkArg<any>;\n\n          // If we're doing a refetch, we should start from\n          // the first page we have cached.\n          // Otherwise, we should start from the initialPageParam\n          const cachedPageParams = cachedData?.pageParams ?? [];\n          const firstPageParam = cachedPageParams[0] ?? initialPageParam;\n          const totalPages = cachedPageParams.length;\n\n          // Fetch first page\n          result = await fetchPage(existingData, firstPageParam, maxPages);\n          if (forceQueryFn) {\n            // HACK `upsertQueryData` expects the user to pass in the `{pages, pageParams}` structure,\n            // but `fetchPage` treats that as `pages[0]`. We have to manually un-nest it.\n            result = {\n              data: (result.data as InfiniteData<unknown, unknown>).pages[0]\n            } as QueryReturnValue;\n          }\n\n          // Fetch remaining pages\n          for (let i = 1; i < totalPages; i++) {\n            const param = getNextPageParam(infiniteQueryOptions, result.data as InfiniteData<unknown, unknown>, arg.originalArgs);\n            result = await fetchPage(result.data as InfiniteData<unknown, unknown>, param, maxPages);\n          }\n        }\n        finalQueryReturnValue = result;\n      } else {\n        // Non-infinite endpoint. Just run the one request.\n        finalQueryReturnValue = await executeRequest(arg.originalArgs);\n      }\n      if (metaSchema && !skipSchemaValidation && finalQueryReturnValue.meta) {\n        finalQueryReturnValue.meta = await parseWithSchema(metaSchema, finalQueryReturnValue.meta, 'metaSchema', finalQueryReturnValue.meta);\n      }\n\n      // console.log('Final result: ', transformedData)\n      return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({\n        fulfilledTimeStamp: Date.now(),\n        baseQueryMeta: finalQueryReturnValue.meta\n      }));\n    } catch (error) {\n      let caughtError = error;\n      if (caughtError instanceof HandledError) {\n        let transformErrorResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformErrorResponse');\n        const {\n          rawErrorResponseSchema,\n          errorResponseSchema\n        } = endpointDefinition;\n        let {\n          value,\n          meta\n        } = caughtError;\n        try {\n          if (rawErrorResponseSchema && !skipSchemaValidation) {\n            value = await parseWithSchema(rawErrorResponseSchema, value, 'rawErrorResponseSchema', meta);\n          }\n          if (metaSchema && !skipSchemaValidation) {\n            meta = await parseWithSchema(metaSchema, meta, 'metaSchema', meta);\n          }\n          let transformedErrorResponse = await transformErrorResponse(value, meta, arg.originalArgs);\n          if (errorResponseSchema && !skipSchemaValidation) {\n            transformedErrorResponse = await parseWithSchema(errorResponseSchema, transformedErrorResponse, 'errorResponseSchema', meta);\n          }\n          return rejectWithValue(transformedErrorResponse, addShouldAutoBatch({\n            baseQueryMeta: meta\n          }));\n        } catch (e) {\n          caughtError = e;\n        }\n      }\n      try {\n        if (caughtError instanceof NamedSchemaError) {\n          const info: SchemaFailureInfo = {\n            endpoint: arg.endpointName,\n            arg: arg.originalArgs,\n            type: arg.type,\n            queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n          };\n          endpointDefinition.onSchemaFailure?.(caughtError, info);\n          onSchemaFailure?.(caughtError, info);\n          const {\n            catchSchemaFailure = globalCatchSchemaFailure\n          } = endpointDefinition;\n          if (catchSchemaFailure) {\n            return rejectWithValue(catchSchemaFailure(caughtError, info), addShouldAutoBatch({\n              baseQueryMeta: caughtError._bqMeta\n            }));\n          }\n        }\n      } catch (e) {\n        caughtError = e;\n      }\n      if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n        console.error(`An unhandled error occurred processing a request for the endpoint \"${arg.endpointName}\".\nIn the case of an unhandled error, no tags will be \"provided\" or \"invalidated\".`, caughtError);\n      } else {\n        console.error(caughtError);\n      }\n      throw caughtError;\n    }\n  };\n  function isForcedQuery(arg: QueryThunkArg, state: RootState<any, string, ReducerPath>) {\n    const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);\n    const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;\n    const fulfilledVal = requestState?.fulfilledTimeStamp;\n    const refetchVal = arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange);\n    if (refetchVal) {\n      // Return if it's true or compare the dates because it must be a number\n      return refetchVal === true || (Number(new Date()) - Number(fulfilledVal)) / 1000 >= refetchVal;\n    }\n    return false;\n  }\n  const createQueryThunk = <ThunkArgType extends QueryThunkArg | InfiniteQueryThunkArg<any>,>() => {\n    const generatedQueryThunk = createAsyncThunk<ThunkResult, ThunkArgType, ThunkApiMetaConfig & {\n      state: RootState<any, string, ReducerPath>;\n    }>(`${reducerPath}/executeQuery`, executeEndpoint, {\n      getPendingMeta({\n        arg\n      }) {\n        const endpointDefinition = endpointDefinitions[arg.endpointName];\n        return addShouldAutoBatch({\n          startedTimeStamp: Date.now(),\n          ...(isInfiniteQueryDefinition(endpointDefinition) ? {\n            direction: (arg as InfiniteQueryThunkArg<any>).direction\n          } : {})\n        });\n      },\n      condition(queryThunkArg, {\n        getState\n      }) {\n        const state = getState();\n        const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);\n        const fulfilledVal = requestState?.fulfilledTimeStamp;\n        const currentArg = queryThunkArg.originalArgs;\n        const previousArg = requestState?.originalArgs;\n        const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];\n        const direction = (queryThunkArg as InfiniteQueryThunkArg<any>).direction;\n\n        // Order of these checks matters.\n        // In order for `upsertQueryData` to successfully run while an existing request is in flight,\n        /// we have to check for that first, otherwise `queryThunk` will bail out and not run at all.\n        if (isUpsertQuery(queryThunkArg)) {\n          return true;\n        }\n\n        // Don't retry a request that's currently in-flight\n        if (requestState?.status === 'pending') {\n          return false;\n        }\n\n        // if this is forced, continue\n        if (isForcedQuery(queryThunkArg, state)) {\n          return true;\n        }\n        if (isQueryDefinition(endpointDefinition) && endpointDefinition?.forceRefetch?.({\n          currentArg,\n          previousArg,\n          endpointState: requestState,\n          state\n        })) {\n          return true;\n        }\n\n        // Pull from the cache unless we explicitly force refetch or qualify based on time\n        if (fulfilledVal && !direction) {\n          // Value is cached and we didn't specify to refresh, skip it.\n          return false;\n        }\n        return true;\n      },\n      dispatchConditionRejection: true\n    });\n    return generatedQueryThunk;\n  };\n  const queryThunk = createQueryThunk<QueryThunkArg>();\n  const infiniteQueryThunk = createQueryThunk<InfiniteQueryThunkArg<any>>();\n  const mutationThunk = createAsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }>(`${reducerPath}/executeMutation`, executeEndpoint, {\n    getPendingMeta() {\n      return addShouldAutoBatch({\n        startedTimeStamp: Date.now()\n      });\n    }\n  });\n  const hasTheForce = (options: any): options is {\n    force: boolean;\n  } => 'force' in options;\n  const hasMaxAge = (options: any): options is {\n    ifOlderThan: false | number;\n  } => 'ifOlderThan' in options;\n  const prefetch = <EndpointName extends QueryKeys<Definitions>,>(endpointName: EndpointName, arg: any, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction> => (dispatch: ThunkDispatch<any, any, any>, getState: () => any) => {\n    const force = hasTheForce(options) && options.force;\n    const maxAge = hasMaxAge(options) && options.ifOlderThan;\n    const queryAction = (force: boolean = true) => {\n      const options = {\n        forceRefetch: force,\n        isPrefetch: true\n      };\n      return (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).initiate(arg, options);\n    };\n    const latestStateValue = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg)(getState());\n    if (force) {\n      dispatch(queryAction());\n    } else if (maxAge) {\n      const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp;\n      if (!lastFulfilledTs) {\n        dispatch(queryAction());\n        return;\n      }\n      const shouldRetrigger = (Number(new Date()) - Number(new Date(lastFulfilledTs))) / 1000 >= maxAge;\n      if (shouldRetrigger) {\n        dispatch(queryAction());\n      }\n    } else {\n      // If prefetching with no options, just let it try\n      dispatch(queryAction(false));\n    }\n  };\n  function matchesEndpoint(endpointName: string) {\n    return (action: any): action is UnknownAction => action?.meta?.arg?.endpointName === endpointName;\n  }\n  function buildMatchThunkActions<Thunk extends AsyncThunk<any, QueryThunkArg, ThunkApiMetaConfig> | AsyncThunk<any, MutationThunkArg, ThunkApiMetaConfig>>(thunk: Thunk, endpointName: string) {\n    return {\n      matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),\n      matchFulfilled: isAllOf(isFulfilled(thunk), matchesEndpoint(endpointName)),\n      matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName))\n    } as Matchers<Thunk, any>;\n  }\n  return {\n    queryThunk,\n    mutationThunk,\n    infiniteQueryThunk,\n    prefetch,\n    updateQueryData,\n    upsertQueryData,\n    patchQueryData,\n    buildMatchThunkActions\n  };\n}\nexport function getNextPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  const lastIndex = pages.length - 1;\n  return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams, queryArg);\n}\nexport function getPreviousPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams, queryArg);\n}\nexport function calculateProvidedByThunk(action: UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<MutationThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>, type: 'providesTags' | 'invalidatesTags', endpointDefinitions: EndpointDefinitions, assertTagType: AssertTagTypes) {\n  return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type] as ResultDescription<any, any, any, any, any>, isFulfilled(action) ? action.payload : undefined, isRejectedWithValue(action) ? action.payload : undefined, action.meta.arg.originalArgs, 'baseQueryMeta' in action.meta ? action.meta.baseQueryMeta : undefined, assertTagType);\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AsyncThunkAction, SafePromise, SerializedError, ThunkAction, UnknownAction } from '@reduxjs/toolkit';\nimport type { Dispatch } from 'redux';\nimport { asSafePromise } from '../../tsHelpers';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport { isQueryDefinition, type EndpointDefinition, type EndpointDefinitions, type InfiniteQueryArgFrom, type InfiniteQueryDefinition, type MutationDefinition, type PageParamFrom, type QueryArgFrom, type QueryDefinition, type ResultTypeFrom } from '../endpointDefinitions';\nimport { countObjectKeys, getOrInsert, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQueryDirection, SubscriptionOptions } from './apiState';\nimport type { InfiniteQueryResultSelectorResult, QueryResultSelectorResult } from './buildSelectors';\nimport type { InfiniteQueryThunk, InfiniteQueryThunkArg, MutationThunk, QueryThunk, QueryThunkArg, ThunkApiMetaConfig } from './buildThunks';\nimport type { ApiEndpointQuery } from './module';\nexport type BuildInitiateApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  initiate: StartQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  initiate: StartInfiniteQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  initiate: StartMutationActionCreator<Definition>;\n};\nexport const forceQueryFnSymbol = Symbol('forceQueryFn');\nexport const isUpsertQuery = (arg: QueryThunkArg) => typeof arg[forceQueryFnSymbol] === 'function';\nexport type StartQueryActionCreatorOptions = {\n  subscribe?: boolean;\n  forceRefetch?: boolean | number;\n  subscriptionOptions?: SubscriptionOptions;\n  [forceQueryFnSymbol]?: () => QueryReturnValue;\n};\nexport type StartInfiniteQueryActionCreatorOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = StartQueryActionCreatorOptions & {\n  direction?: InfiniteQueryDirection;\n  param?: unknown;\n} & Partial<Pick<Partial<InfiniteQueryConfigOptions<ResultTypeFrom<D>, PageParamFrom<D>, InfiniteQueryArgFrom<D>>>, 'initialPageParam'>>;\ntype AnyQueryActionCreator<D extends EndpointDefinition<any, any, any, any>> = (arg: any, options?: StartQueryActionCreatorOptions) => ThunkAction<AnyActionCreatorResult, any, any, UnknownAction>;\ntype StartQueryActionCreator<D extends QueryDefinition<any, any, any, any, any>> = (arg: QueryArgFrom<D>, options?: StartQueryActionCreatorOptions) => ThunkAction<QueryActionCreatorResult<D>, any, any, UnknownAction>;\nexport type StartInfiniteQueryActionCreator<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D>, options?: StartInfiniteQueryActionCreatorOptions<D>) => ThunkAction<InfiniteQueryActionCreatorResult<D>, any, any, UnknownAction>;\ntype QueryActionCreatorFields = {\n  requestId: string;\n  subscriptionOptions: SubscriptionOptions | undefined;\n  abort(): void;\n  unsubscribe(): void;\n  updateSubscriptionOptions(options: SubscriptionOptions): void;\n  queryCacheKey: string;\n};\ntype AnyActionCreatorResult = SafePromise<any> & QueryActionCreatorFields & {\n  arg: any;\n  unwrap(): Promise<any>;\n  refetch(): AnyActionCreatorResult;\n};\nexport type QueryActionCreatorResult<D extends QueryDefinition<any, any, any, any>> = SafePromise<QueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: QueryArgFrom<D>;\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  refetch(): QueryActionCreatorResult<D>;\n};\nexport type InfiniteQueryActionCreatorResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SafePromise<InfiniteQueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: InfiniteQueryArgFrom<D>;\n  unwrap(): Promise<InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>>;\n  refetch(): InfiniteQueryActionCreatorResult<D>;\n};\ntype StartMutationActionCreator<D extends MutationDefinition<any, any, any, any>> = (arg: QueryArgFrom<D>, options?: {\n  /**\n   * If this mutation should be tracked in the store.\n   * If you just want to manually trigger this mutation using `dispatch` and don't care about the\n   * result, state & potential errors being held in store, you can set this to false.\n   * (defaults to `true`)\n   */\n  track?: boolean;\n  fixedCacheKey?: string;\n}) => ThunkAction<MutationActionCreatorResult<D>, any, any, UnknownAction>;\nexport type MutationActionCreatorResult<D extends MutationDefinition<any, any, any, any>> = SafePromise<{\n  data: ResultTypeFrom<D>;\n  error?: undefined;\n} | {\n  data?: undefined;\n  error: Exclude<BaseQueryError<D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQuery : never>, undefined> | SerializedError;\n}> & {\n  /** @internal */\n  arg: {\n    /**\n     * The name of the given endpoint for the mutation\n     */\n    endpointName: string;\n    /**\n     * The original arguments supplied to the mutation call\n     */\n    originalArgs: QueryArgFrom<D>;\n    /**\n     * Whether the mutation is being tracked in the store.\n     */\n    track?: boolean;\n    fixedCacheKey?: string;\n  };\n  /**\n   * A unique string generated for the request sequence\n   */\n  requestId: string;\n\n  /**\n   * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation\n   * that was fired off from reaching the server, but only to assist in handling the response.\n   *\n   * Calling `abort()` prior to the promise resolving will force it to reach the error state with\n   * the serialized error:\n   * `{ name: 'AbortError', message: 'Aborted' }`\n   *\n   * @example\n   * ```ts\n   * const [updateUser] = useUpdateUserMutation();\n   *\n   * useEffect(() => {\n   *   const promise = updateUser(id);\n   *   promise\n   *     .unwrap()\n   *     .catch((err) => {\n   *       if (err.name === 'AbortError') return;\n   *       // else handle the unexpected error\n   *     })\n   *\n   *   return () => {\n   *     promise.abort();\n   *   }\n   * }, [id, updateUser])\n   * ```\n   */\n  abort(): void;\n  /**\n   * Unwraps a mutation call to provide the raw response/error.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap\"\n   * addPost({ id: 1, name: 'Example' })\n   *   .unwrap()\n   *   .then((payload) => console.log('fulfilled', payload))\n   *   .catch((error) => console.error('rejected', error));\n   * ```\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  /**\n   * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.\n   The value returned by the hook will reset to `isUninitialized` afterwards.\n   */\n  reset(): void;\n};\nexport function buildInitiate({\n  serializeQueryArgs,\n  queryThunk,\n  infiniteQueryThunk,\n  mutationThunk,\n  api,\n  context\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  api: Api<any, EndpointDefinitions, any, any>;\n  context: ApiContext<EndpointDefinitions>;\n}) {\n  const runningQueries: Map<Dispatch, Record<string, QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any> | undefined>> = new Map();\n  const runningMutations: Map<Dispatch, Record<string, MutationActionCreatorResult<any> | undefined>> = new Map();\n  const {\n    unsubscribeQueryResult,\n    removeMutationResult,\n    updateSubscriptionOptions\n  } = api.internalActions;\n  return {\n    buildInitiateQuery,\n    buildInitiateInfiniteQuery,\n    buildInitiateMutation,\n    getRunningQueryThunk,\n    getRunningMutationThunk,\n    getRunningQueriesThunk,\n    getRunningMutationsThunk\n  };\n  function getRunningQueryThunk(endpointName: string, queryArgs: any) {\n    return (dispatch: Dispatch) => {\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      return runningQueries.get(dispatch)?.[queryCacheKey] as QueryActionCreatorResult<never> | InfiniteQueryActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningMutationThunk(\n  /**\n   * this is only here to allow TS to infer the result type by input value\n   * we could use it to validate the result, but it's probably not necessary\n   */\n  _endpointName: string, fixedCacheKeyOrRequestId: string) {\n    return (dispatch: Dispatch) => {\n      return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId] as MutationActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningQueriesThunk() {\n    return (dispatch: Dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function getRunningMutationsThunk() {\n    return (dispatch: Dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function middlewareWarning(dispatch: Dispatch) {\n    if (process.env.NODE_ENV !== 'production') {\n      if ((middlewareWarning as any).triggered) return;\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      (middlewareWarning as any).triggered = true;\n\n      // The RTKQ middleware should return the internal state object,\n      // but it should _not_ be the action object.\n      if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n        // Otherwise, must not have been added\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(34) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\nYou must add the middleware for RTK-Query to function correctly!`);\n      }\n    }\n  }\n  function buildInitiateAnyQuery<T extends 'query' | 'infiniteQuery'>(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any>) {\n    const queryAction: AnyQueryActionCreator<any> = (arg, {\n      subscribe = true,\n      forceRefetch,\n      subscriptionOptions,\n      [forceQueryFnSymbol]: forceQueryFn,\n      ...rest\n    } = {}) => (dispatch, getState) => {\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs: arg,\n        endpointDefinition,\n        endpointName\n      });\n      let thunk: AsyncThunkAction<unknown, QueryThunkArg, ThunkApiMetaConfig>;\n      const commonThunkArgs = {\n        ...rest,\n        type: 'query' as const,\n        subscribe,\n        forceRefetch: forceRefetch,\n        subscriptionOptions,\n        endpointName,\n        originalArgs: arg,\n        queryCacheKey,\n        [forceQueryFnSymbol]: forceQueryFn\n      };\n      if (isQueryDefinition(endpointDefinition)) {\n        thunk = queryThunk(commonThunkArgs);\n      } else {\n        const {\n          direction,\n          initialPageParam\n        } = rest as Pick<InfiniteQueryThunkArg<any>, 'direction' | 'initialPageParam'>;\n        thunk = infiniteQueryThunk({\n          ...(commonThunkArgs as InfiniteQueryThunkArg<any>),\n          // Supply these even if undefined. This helps with a field existence\n          // check over in `buildSlice.ts`\n          direction,\n          initialPageParam\n        });\n      }\n      const selector = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg);\n      const thunkResult = dispatch(thunk);\n      const stateAfter = selector(getState());\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort\n      } = thunkResult;\n      const skippedSynchronously = stateAfter.requestId !== requestId;\n      const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey];\n      const selectFromState = () => selector(getState());\n      const statePromise: AnyActionCreatorResult = Object.assign((forceQueryFn ?\n      // a query has been forced (upsertQueryData)\n      // -> we want to resolve it once data has been written with the data that will be written\n      thunkResult.then(selectFromState) : skippedSynchronously && !runningQuery ?\n      // a query has been skipped due to a condition and we do not have any currently running query\n      // -> we want to resolve it immediately with the current data\n      Promise.resolve(stateAfter) :\n      // query just started or one is already in flight\n      // -> wait for the running query, then resolve with data from after that\n      Promise.all([runningQuery, thunkResult]).then(selectFromState)) as SafePromise<any>, {\n        arg,\n        requestId,\n        subscriptionOptions,\n        queryCacheKey,\n        abort,\n        async unwrap() {\n          const result = await statePromise;\n          if (result.isError) {\n            throw result.error;\n          }\n          return result.data;\n        },\n        refetch: () => dispatch(queryAction(arg, {\n          subscribe: false,\n          forceRefetch: true\n        })),\n        unsubscribe() {\n          if (subscribe) dispatch(unsubscribeQueryResult({\n            queryCacheKey,\n            requestId\n          }));\n        },\n        updateSubscriptionOptions(options: SubscriptionOptions) {\n          statePromise.subscriptionOptions = options;\n          dispatch(updateSubscriptionOptions({\n            endpointName,\n            requestId,\n            queryCacheKey,\n            options\n          }));\n        }\n      });\n      if (!runningQuery && !skippedSynchronously && !forceQueryFn) {\n        const running = getOrInsert(runningQueries, dispatch, {});\n        running[queryCacheKey] = statePromise;\n        statePromise.then(() => {\n          delete running[queryCacheKey];\n          if (!countObjectKeys(running)) {\n            runningQueries.delete(dispatch);\n          }\n        });\n      }\n      return statePromise;\n    };\n    return queryAction;\n  }\n  function buildInitiateQuery(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    const queryAction: StartQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return queryAction;\n  }\n  function buildInitiateInfiniteQuery(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const infiniteQueryAction: StartInfiniteQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return infiniteQueryAction;\n  }\n  function buildInitiateMutation(endpointName: string): StartMutationActionCreator<any> {\n    return (arg, {\n      track = true,\n      fixedCacheKey\n    } = {}) => (dispatch, getState) => {\n      const thunk = mutationThunk({\n        type: 'mutation',\n        endpointName,\n        originalArgs: arg,\n        track,\n        fixedCacheKey\n      });\n      const thunkResult = dispatch(thunk);\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort,\n        unwrap\n      } = thunkResult;\n      const returnValuePromise = asSafePromise(thunkResult.unwrap().then(data => ({\n        data\n      })), error => ({\n        error\n      }));\n      const reset = () => {\n        dispatch(removeMutationResult({\n          requestId,\n          fixedCacheKey\n        }));\n      };\n      const ret = Object.assign(returnValuePromise, {\n        arg: thunkResult.arg,\n        requestId,\n        abort,\n        unwrap,\n        reset\n      });\n      const running = runningMutations.get(dispatch) || {};\n      runningMutations.set(dispatch, running);\n      running[requestId] = ret;\n      ret.then(() => {\n        delete running[requestId];\n        if (!countObjectKeys(running)) {\n          runningMutations.delete(dispatch);\n        }\n      });\n      if (fixedCacheKey) {\n        running[fixedCacheKey] = ret;\n        ret.then(() => {\n          if (running[fixedCacheKey] === ret) {\n            delete running[fixedCacheKey];\n            if (!countObjectKeys(running)) {\n              runningMutations.delete(dispatch);\n            }\n          }\n        });\n      }\n      return ret;\n    };\n  }\n}","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { SchemaError } from '@standard-schema/utils';\nexport class NamedSchemaError extends SchemaError {\n  constructor(issues: readonly StandardSchemaV1.Issue[], public readonly value: any, public readonly schemaName: string, public readonly _bqMeta: any) {\n    super(issues);\n  }\n}\nexport async function parseWithSchema<Schema extends StandardSchemaV1>(schema: Schema, data: unknown, schemaName: string, bqMeta: any): Promise<StandardSchemaV1.InferOutput<Schema>> {\n  const result = await schema['~standard'].validate(data);\n  if (result.issues) {\n    throw new NamedSchemaError(result.issues, data, schemaName, bqMeta);\n  }\n  return result.value;\n}","import type { PayloadAction } from '@reduxjs/toolkit';\nimport { combineReducers, createAction, createSlice, isAnyOf, isFulfilled, isRejectedWithValue, createNextState, prepareAutoBatched, SHOULD_AUTOBATCH, nanoid } from './rtkImports';\nimport type { QuerySubstateIdentifier, QuerySubState, MutationSubstateIdentifier, MutationSubState, MutationState, QueryState, InvalidationState, Subscribers, QueryCacheKey, SubscriptionState, ConfigState, InfiniteQuerySubState, InfiniteQueryDirection } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { AllQueryKeys, QueryArgFromAnyQueryDefinition, DataFromAnyQueryDefinition, InfiniteQueryThunk, MutationThunk, QueryThunk, QueryThunkArg } from './buildThunks';\nimport { calculateProvidedByThunk } from './buildThunks';\nimport { isInfiniteQueryDefinition, type AssertTagTypes, type EndpointDefinitions, type FullTagDescription, type QueryDefinition } from '../endpointDefinitions';\nimport type { Patch } from 'immer';\nimport { isDraft } from 'immer';\nimport { applyPatches, original } from 'immer';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\nimport { isDocumentVisible, isOnline, copyWithStructuralSharing } from '../utils';\nimport type { ApiContext } from '../apiTypes';\nimport { isUpsertQuery } from './buildInitiate';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { UnwrapPromise } from '../tsHelpers';\n\n/**\n * A typesafe single entry to be upserted into the cache\n */\nexport type NormalizedQueryUpsertEntry<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = {\n  endpointName: EndpointName;\n  arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>;\n  value: DataFromAnyQueryDefinition<Definitions, EndpointName>;\n};\n\n/**\n * The internal version that is not typesafe since we can't carry the generics through `createSlice`\n */\ntype NormalizedQueryUpsertEntryPayload = {\n  endpointName: string;\n  arg: unknown;\n  value: unknown;\n};\nexport type ProcessedQueryUpsertEntry = {\n  queryDescription: QueryThunkArg;\n  value: unknown;\n};\n\n/**\n * A typesafe representation of a util action creator that accepts cache entry descriptions to upsert\n */\nexport type UpsertEntries<Definitions extends EndpointDefinitions> = (<EndpointNames extends Array<AllQueryKeys<Definitions>>>(entries: [...{ [I in keyof EndpointNames]: NormalizedQueryUpsertEntry<Definitions, EndpointNames[I]> }]) => PayloadAction<NormalizedQueryUpsertEntryPayload[]>) & {\n  match: (action: unknown) => action is PayloadAction<NormalizedQueryUpsertEntryPayload[]>;\n};\nfunction updateQuerySubstateIfExists(state: QueryState<any>, queryCacheKey: QueryCacheKey, update: (substate: QuerySubState<any> | InfiniteQuerySubState<any>) => void) {\n  const substate = state[queryCacheKey];\n  if (substate) {\n    update(substate);\n  }\n}\nexport function getMutationCacheKey(id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n}): string | undefined;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n} | MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string | undefined {\n  return ('arg' in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId;\n}\nfunction updateMutationSubstateIfExists(state: MutationState<any>, id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}, update: (substate: MutationSubState<any>) => void) {\n  const substate = state[getMutationCacheKey(id)];\n  if (substate) {\n    update(substate);\n  }\n}\nconst initialState = {} as any;\nexport function buildSlice({\n  reducerPath,\n  queryThunk,\n  mutationThunk,\n  serializeQueryArgs,\n  context: {\n    endpointDefinitions: definitions,\n    apiUid,\n    extractRehydrationInfo,\n    hasRehydrationInfo\n  },\n  assertTagType,\n  config\n}: {\n  reducerPath: string;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  context: ApiContext<EndpointDefinitions>;\n  assertTagType: AssertTagTypes;\n  config: Omit<ConfigState<string>, 'online' | 'focused' | 'middlewareRegistered'>;\n}) {\n  const resetApiState = createAction(`${reducerPath}/resetApiState`);\n  function writePendingCacheEntry(draft: QueryState<any>, arg: QueryThunkArg, upserting: boolean, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n    // requestStatus: 'pending'\n  } & {\n    startedTimeStamp: number;\n  }) {\n    draft[arg.queryCacheKey] ??= {\n      status: QueryStatus.uninitialized,\n      endpointName: arg.endpointName\n    };\n    updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n      substate.status = QueryStatus.pending;\n      substate.requestId = upserting && substate.requestId ?\n      // for `upsertQuery` **updates**, keep the current `requestId`\n      substate.requestId :\n      // for normal queries or `upsertQuery` **inserts** always update the `requestId`\n      meta.requestId;\n      if (arg.originalArgs !== undefined) {\n        substate.originalArgs = arg.originalArgs;\n      }\n      substate.startedTimeStamp = meta.startedTimeStamp;\n      const endpointDefinition = definitions[meta.arg.endpointName];\n      if (isInfiniteQueryDefinition(endpointDefinition) && 'direction' in arg) {\n        ;\n        (substate as InfiniteQuerySubState<any>).direction = arg.direction as InfiniteQueryDirection;\n      }\n    });\n  }\n  function writeFulfilledCacheEntry(draft: QueryState<any>, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n  } & {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n  }, payload: unknown, upserting: boolean) {\n    updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, substate => {\n      if (substate.requestId !== meta.requestId && !upserting) return;\n      const {\n        merge\n      } = definitions[meta.arg.endpointName] as QueryDefinition<any, any, any, any>;\n      substate.status = QueryStatus.fulfilled;\n      if (merge) {\n        if (substate.data !== undefined) {\n          const {\n            fulfilledTimeStamp,\n            arg,\n            baseQueryMeta,\n            requestId\n          } = meta;\n          // There's existing cache data. Let the user merge it in themselves.\n          // We're already inside an Immer-powered reducer, and the user could just mutate `substate.data`\n          // themselves inside of `merge()`. But, they might also want to return a new value.\n          // Try to let Immer figure that part out, save the result, and assign it to `substate.data`.\n          let newData = createNextState(substate.data, draftSubstateData => {\n            // As usual with Immer, you can mutate _or_ return inside here, but not both\n            return merge(draftSubstateData, payload, {\n              arg: arg.originalArgs,\n              baseQueryMeta,\n              fulfilledTimeStamp,\n              requestId\n            });\n          });\n          substate.data = newData;\n        } else {\n          // Presumably a fresh request. Just cache the response data.\n          substate.data = payload;\n        }\n      } else {\n        // Assign or safely update the cache data.\n        substate.data = definitions[meta.arg.endpointName].structuralSharing ?? true ? copyWithStructuralSharing(isDraft(substate.data) ? original(substate.data) : substate.data, payload) : payload;\n      }\n      delete substate.error;\n      substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n    });\n  }\n  const querySlice = createSlice({\n    name: `${reducerPath}/queries`,\n    initialState: initialState as QueryState<any>,\n    reducers: {\n      removeQueryResult: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey\n          }\n        }: PayloadAction<QuerySubstateIdentifier>) {\n          delete draft[queryCacheKey];\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier>()\n      },\n      cacheEntriesUpserted: {\n        reducer(draft, action: PayloadAction<ProcessedQueryUpsertEntry[], string, {\n          RTK_autoBatch: boolean;\n          requestId: string;\n          timestamp: number;\n        }>) {\n          for (const entry of action.payload) {\n            const {\n              queryDescription: arg,\n              value\n            } = entry;\n            writePendingCacheEntry(draft, arg, true, {\n              arg,\n              requestId: action.meta.requestId,\n              startedTimeStamp: action.meta.timestamp\n            });\n            writeFulfilledCacheEntry(draft, {\n              arg,\n              requestId: action.meta.requestId,\n              fulfilledTimeStamp: action.meta.timestamp,\n              baseQueryMeta: {}\n            }, value,\n            // We know we're upserting here\n            true);\n          }\n        },\n        prepare: (payload: NormalizedQueryUpsertEntryPayload[]) => {\n          const queryDescriptions: ProcessedQueryUpsertEntry[] = payload.map(entry => {\n            const {\n              endpointName,\n              arg,\n              value\n            } = entry;\n            const endpointDefinition = definitions[endpointName];\n            const queryDescription: QueryThunkArg = {\n              type: 'query',\n              endpointName: endpointName,\n              originalArgs: entry.arg,\n              queryCacheKey: serializeQueryArgs({\n                queryArgs: arg,\n                endpointDefinition,\n                endpointName\n              })\n            };\n            return {\n              queryDescription,\n              value\n            };\n          });\n          const result = {\n            payload: queryDescriptions,\n            meta: {\n              [SHOULD_AUTOBATCH]: true,\n              requestId: nanoid(),\n              timestamp: Date.now()\n            }\n          };\n          return result;\n        }\n      },\n      queryResultPatched: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey,\n            patches\n          }\n        }: PayloadAction<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>) {\n          updateQuerySubstateIfExists(draft, queryCacheKey, substate => {\n            substate.data = applyPatches(substate.data as any, patches.concat());\n          });\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(queryThunk.pending, (draft, {\n        meta,\n        meta: {\n          arg\n        }\n      }) => {\n        const upserting = isUpsertQuery(arg);\n        writePendingCacheEntry(draft, arg, upserting, meta);\n      }).addCase(queryThunk.fulfilled, (draft, {\n        meta,\n        payload\n      }) => {\n        const upserting = isUpsertQuery(meta.arg);\n        writeFulfilledCacheEntry(draft, meta, payload, upserting);\n      }).addCase(queryThunk.rejected, (draft, {\n        meta: {\n          condition,\n          arg,\n          requestId\n        },\n        error,\n        payload\n      }) => {\n        updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n          if (condition) {\n            // request was aborted due to condition (another query already running)\n          } else {\n            // request failed\n            if (substate.requestId !== requestId) return;\n            substate.status = QueryStatus.rejected;\n            substate.error = (payload ?? error) as any;\n          }\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          queries\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(queries)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  const mutationSlice = createSlice({\n    name: `${reducerPath}/mutations`,\n    initialState: initialState as MutationState<any>,\n    reducers: {\n      removeMutationResult: {\n        reducer(draft, {\n          payload\n        }: PayloadAction<MutationSubstateIdentifier>) {\n          const cacheKey = getMutationCacheKey(payload);\n          if (cacheKey in draft) {\n            delete draft[cacheKey];\n          }\n        },\n        prepare: prepareAutoBatched<MutationSubstateIdentifier>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(mutationThunk.pending, (draft, {\n        meta,\n        meta: {\n          requestId,\n          arg,\n          startedTimeStamp\n        }\n      }) => {\n        if (!arg.track) return;\n        draft[getMutationCacheKey(meta)] = {\n          requestId,\n          status: QueryStatus.pending,\n          endpointName: arg.endpointName,\n          startedTimeStamp\n        };\n      }).addCase(mutationThunk.fulfilled, (draft, {\n        payload,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.fulfilled;\n          substate.data = payload;\n          substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n        });\n      }).addCase(mutationThunk.rejected, (draft, {\n        payload,\n        error,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.rejected;\n          substate.error = (payload ?? error) as any;\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          mutations\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(mutations)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          (entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) &&\n          // only rehydrate endpoints that were persisted using a `fixedCacheKey`\n          key !== entry?.requestId) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  type CalculateProvidedByAction = UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>;\n  const initialInvalidationState: InvalidationState<string> = {\n    tags: {},\n    keys: {}\n  };\n  const invalidationSlice = createSlice({\n    name: `${reducerPath}/invalidation`,\n    initialState: initialInvalidationState,\n    reducers: {\n      updateProvidedBy: {\n        reducer(draft, action: PayloadAction<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>) {\n          for (const {\n            queryCacheKey,\n            providedTags\n          } of action.payload) {\n            removeCacheKeyFromTags(draft, queryCacheKey);\n            for (const {\n              type,\n              id\n            } of providedTags) {\n              const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n\n            // Remove readonly from the providedTags array\n            draft.keys[queryCacheKey] = providedTags as FullTagDescription<string>[];\n          }\n        },\n        prepare: prepareAutoBatched<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(querySlice.actions.removeQueryResult, (draft, {\n        payload: {\n          queryCacheKey\n        }\n      }) => {\n        removeCacheKeyFromTags(draft, queryCacheKey);\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          provided\n        } = extractRehydrationInfo(action)!;\n        for (const [type, incomingTags] of Object.entries(provided)) {\n          for (const [id, cacheKeys] of Object.entries(incomingTags)) {\n            const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n            for (const queryCacheKey of cacheKeys) {\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n          }\n        }\n      }).addMatcher(isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)), (draft, action) => {\n        writeProvidedTagsForQueries(draft, [action]);\n      }).addMatcher(querySlice.actions.cacheEntriesUpserted.match, (draft, action) => {\n        const mockActions: CalculateProvidedByAction[] = action.payload.map(({\n          queryDescription,\n          value\n        }) => {\n          return {\n            type: 'UNKNOWN',\n            payload: value,\n            meta: {\n              requestStatus: 'fulfilled',\n              requestId: 'UNKNOWN',\n              arg: queryDescription\n            }\n          };\n        });\n        writeProvidedTagsForQueries(draft, mockActions);\n      });\n    }\n  });\n  function removeCacheKeyFromTags(draft: InvalidationState<any>, queryCacheKey: QueryCacheKey) {\n    const existingTags = draft.keys[queryCacheKey] ?? [];\n\n    // Delete this cache key from any existing tags that may have provided it\n    for (const tag of existingTags) {\n      const tagType = tag.type;\n      const tagId = tag.id ?? '__internal_without_id';\n      const tagSubscriptions = draft.tags[tagType]?.[tagId];\n      if (tagSubscriptions) {\n        draft.tags[tagType][tagId] = tagSubscriptions.filter(qc => qc !== queryCacheKey);\n      }\n    }\n    delete draft.keys[queryCacheKey];\n  }\n  function writeProvidedTagsForQueries(draft: InvalidationState<string>, actions: CalculateProvidedByAction[]) {\n    const providedByEntries = actions.map(action => {\n      const providedTags = calculateProvidedByThunk(action, 'providesTags', definitions, assertTagType);\n      const {\n        queryCacheKey\n      } = action.meta.arg;\n      return {\n        queryCacheKey,\n        providedTags\n      };\n    });\n    invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy(providedByEntries));\n  }\n\n  // Dummy slice to generate actions\n  const subscriptionSlice = createSlice({\n    name: `${reducerPath}/subscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      updateSubscriptionOptions(d, a: PayloadAction<{\n        endpointName: string;\n        requestId: string;\n        options: Subscribers[number];\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      unsubscribeQueryResult(d, a: PayloadAction<{\n        requestId: string;\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      internal_getRTKQSubscriptions() {}\n    }\n  });\n  const internalSubscriptionsSlice = createSlice({\n    name: `${reducerPath}/internalSubscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      subscriptionsUpdated: {\n        reducer(state, action: PayloadAction<Patch[]>) {\n          return applyPatches(state, action.payload);\n        },\n        prepare: prepareAutoBatched<Patch[]>()\n      }\n    }\n  });\n  const configSlice = createSlice({\n    name: `${reducerPath}/config`,\n    initialState: {\n      online: isOnline(),\n      focused: isDocumentVisible(),\n      middlewareRegistered: false,\n      ...config\n    } as ConfigState<string>,\n    reducers: {\n      middlewareRegistered(state, {\n        payload\n      }: PayloadAction<string>) {\n        state.middlewareRegistered = state.middlewareRegistered === 'conflict' || apiUid !== payload ? 'conflict' : true;\n      }\n    },\n    extraReducers: builder => {\n      builder.addCase(onOnline, state => {\n        state.online = true;\n      }).addCase(onOffline, state => {\n        state.online = false;\n      }).addCase(onFocus, state => {\n        state.focused = true;\n      }).addCase(onFocusLost, state => {\n        state.focused = false;\n      })\n      // update the state to be a new object to be picked up as a \"state change\"\n      // by redux-persist's `autoMergeLevel2`\n      .addMatcher(hasRehydrationInfo, draft => ({\n        ...draft\n      }));\n    }\n  });\n  const combinedReducer = combineReducers({\n    queries: querySlice.reducer,\n    mutations: mutationSlice.reducer,\n    provided: invalidationSlice.reducer,\n    subscriptions: internalSubscriptionsSlice.reducer,\n    config: configSlice.reducer\n  });\n  const reducer: typeof combinedReducer = (state, action) => combinedReducer(resetApiState.match(action) ? undefined : state, action);\n  const actions = {\n    ...configSlice.actions,\n    ...querySlice.actions,\n    ...subscriptionSlice.actions,\n    ...internalSubscriptionsSlice.actions,\n    ...mutationSlice.actions,\n    ...invalidationSlice.actions,\n    resetApiState\n  };\n  return {\n    reducer,\n    actions\n  };\n}\nexport type SliceActions = ReturnType<typeof buildSlice>['actions'];","import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, ReducerPathFrom, TagDescription, TagTypesFrom } from '../endpointDefinitions';\nimport { expandTagDescription } from '../endpointDefinitions';\nimport { flatten, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationSubState, QueryCacheKey, QueryKeys, QueryState, QuerySubState, RequestStatusFlags, RootState as _RootState } from './apiState';\nimport { QueryStatus, getRequestStatusFlags } from './apiState';\nimport { getMutationCacheKey } from './buildSlice';\nimport type { createSelector as _createSelector } from './rtkImports';\nimport { createNextState } from './rtkImports';\nimport { type AllQueryKeys, getNextPageParam, getPreviousPageParam } from './buildThunks';\nexport type SkipToken = typeof skipToken;\n/**\n * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`\n * instead of the query argument to get the same effect as if setting\n * `skip: true` in the query options.\n *\n * Useful for scenarios where a query should be skipped when `arg` is `undefined`\n * and TypeScript complains about it because `arg` is not allowed to be passed\n * in as `undefined`, such as\n *\n * ```ts\n * // codeblock-meta title=\"will error if the query argument is not allowed to be undefined\" no-transpile\n * useSomeQuery(arg, { skip: !!arg })\n * ```\n *\n * ```ts\n * // codeblock-meta title=\"using skipToken instead\" no-transpile\n * useSomeQuery(arg ?? skipToken)\n * ```\n *\n * If passed directly into a query or mutation selector, that selector will always\n * return an uninitialized state.\n */\nexport const skipToken = /* @__PURE__ */Symbol.for('RTKQ/skipToken');\nexport type BuildSelectorsApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: QueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: InfiniteQueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: MutationResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\ntype QueryResultSelectorFactory<Definition extends QueryDefinition<any, any, any, any>, RootState> = (queryArg: QueryArgFrom<Definition> | SkipToken) => (state: RootState) => QueryResultSelectorResult<Definition>;\nexport type QueryResultSelectorResult<Definition extends QueryDefinition<any, any, any, any>> = QuerySubState<Definition> & RequestStatusFlags;\ntype InfiniteQueryResultSelectorFactory<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, RootState> = (queryArg: InfiniteQueryArgFrom<Definition> | SkipToken) => (state: RootState) => InfiniteQueryResultSelectorResult<Definition>;\nexport type InfiniteQueryResultFlags = {\n  hasNextPage: boolean;\n  hasPreviousPage: boolean;\n  isFetchingNextPage: boolean;\n  isFetchingPreviousPage: boolean;\n  isFetchNextPageError: boolean;\n  isFetchPreviousPageError: boolean;\n};\nexport type InfiniteQueryResultSelectorResult<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<Definition> & RequestStatusFlags & InfiniteQueryResultFlags;\ntype MutationResultSelectorFactory<Definition extends MutationDefinition<any, any, any, any>, RootState> = (requestId: string | {\n  requestId: string | undefined;\n  fixedCacheKey: string | undefined;\n} | SkipToken) => (state: RootState) => MutationResultSelectorResult<Definition>;\nexport type MutationResultSelectorResult<Definition extends MutationDefinition<any, any, any, any>> = MutationSubState<Definition> & RequestStatusFlags;\nconst initialSubState: QuerySubState<any> = {\n  status: QueryStatus.uninitialized as const\n};\n\n// abuse immer to freeze default states\nconst defaultQuerySubState = /* @__PURE__ */createNextState(initialSubState, () => {});\nconst defaultMutationSubState = /* @__PURE__ */createNextState(initialSubState as MutationSubState<any>, () => {});\nexport type AllSelectors = ReturnType<typeof buildSelectors>;\nexport function buildSelectors<Definitions extends EndpointDefinitions, ReducerPath extends string>({\n  serializeQueryArgs,\n  reducerPath,\n  createSelector\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  reducerPath: ReducerPath;\n  createSelector: typeof _createSelector;\n}) {\n  type RootState = _RootState<Definitions, string, string>;\n  const selectSkippedQuery = (state: RootState) => defaultQuerySubState;\n  const selectSkippedMutation = (state: RootState) => defaultMutationSubState;\n  return {\n    buildQuerySelector,\n    buildInfiniteQuerySelector,\n    buildMutationSelector,\n    selectInvalidatedBy,\n    selectCachedArgsForQuery,\n    selectApiState,\n    selectQueries,\n    selectMutations,\n    selectQueryEntry,\n    selectConfig\n  };\n  function withRequestFlags<T extends {\n    status: QueryStatus;\n  }>(substate: T): T & RequestStatusFlags {\n    return {\n      ...substate,\n      ...getRequestStatusFlags(substate.status)\n    };\n  }\n  function selectApiState(rootState: RootState) {\n    const state = rootState[reducerPath];\n    if (process.env.NODE_ENV !== 'production') {\n      if (!state) {\n        if ((selectApiState as any).triggered) return state;\n        (selectApiState as any).triggered = true;\n        console.error(`Error: No data found at \\`state.${reducerPath}\\`. Did you forget to add the reducer to the store?`);\n      }\n    }\n    return state;\n  }\n  function selectQueries(rootState: RootState) {\n    return selectApiState(rootState)?.queries;\n  }\n  function selectQueryEntry(rootState: RootState, cacheKey: QueryCacheKey) {\n    return selectQueries(rootState)?.[cacheKey];\n  }\n  function selectMutations(rootState: RootState) {\n    return selectApiState(rootState)?.mutations;\n  }\n  function selectConfig(rootState: RootState) {\n    return selectApiState(rootState)?.config;\n  }\n  function buildAnyQuerySelector(endpointName: string, endpointDefinition: EndpointDefinition<any, any, any, any>, combiner: <T extends {\n    status: QueryStatus;\n  }>(substate: T) => T & RequestStatusFlags) {\n    return (queryArgs: any) => {\n      // Avoid calling serializeQueryArgs if the arg is skipToken\n      if (queryArgs === skipToken) {\n        return createSelector(selectSkippedQuery, combiner);\n      }\n      const serializedArgs = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      const selectQuerySubstate = (state: RootState) => selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState;\n      return createSelector(selectQuerySubstate, combiner);\n    };\n  }\n  function buildQuerySelector(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags) as QueryResultSelectorFactory<any, RootState>;\n  }\n  function buildInfiniteQuerySelector(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const {\n      infiniteQueryOptions\n    } = endpointDefinition;\n    function withInfiniteQueryResultFlags<T extends {\n      status: QueryStatus;\n    }>(substate: T): T & RequestStatusFlags & InfiniteQueryResultFlags {\n      const stateWithRequestFlags = {\n        ...(substate as InfiniteQuerySubState<any>),\n        ...getRequestStatusFlags(substate.status)\n      };\n      const {\n        isLoading,\n        isError,\n        direction\n      } = stateWithRequestFlags;\n      const isForward = direction === 'forward';\n      const isBackward = direction === 'backward';\n      return {\n        ...stateWithRequestFlags,\n        hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        isFetchingNextPage: isLoading && isForward,\n        isFetchingPreviousPage: isLoading && isBackward,\n        isFetchNextPageError: isError && isForward,\n        isFetchPreviousPageError: isError && isBackward\n      };\n    }\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags) as unknown as InfiniteQueryResultSelectorFactory<any, RootState>;\n  }\n  function buildMutationSelector() {\n    return (id => {\n      let mutationId: string | typeof skipToken;\n      if (typeof id === 'object') {\n        mutationId = getMutationCacheKey(id) ?? skipToken;\n      } else {\n        mutationId = id;\n      }\n      const selectMutationSubstate = (state: RootState) => selectApiState(state)?.mutations?.[mutationId as string] ?? defaultMutationSubState;\n      const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;\n      return createSelector(finalSelectMutationSubstate, withRequestFlags);\n    }) as MutationResultSelectorFactory<any, RootState>;\n  }\n  function selectInvalidatedBy(state: RootState, tags: ReadonlyArray<TagDescription<string> | null | undefined>): Array<{\n    endpointName: string;\n    originalArgs: any;\n    queryCacheKey: QueryCacheKey;\n  }> {\n    const apiState = state[reducerPath];\n    const toInvalidate = new Set<QueryCacheKey>();\n    for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {\n      const provided = apiState.provided.tags[tag.type];\n      if (!provided) {\n        continue;\n      }\n      let invalidateSubscriptions = (tag.id !== undefined ?\n      // id given: invalidate all queries that provide this type & id\n      provided[tag.id] :\n      // no id: invalidate all queries that provide this type\n      flatten(Object.values(provided))) ?? [];\n      for (const invalidate of invalidateSubscriptions) {\n        toInvalidate.add(invalidate);\n      }\n    }\n    return flatten(Array.from(toInvalidate.values()).map(queryCacheKey => {\n      const querySubState = apiState.queries[queryCacheKey];\n      return querySubState ? [{\n        queryCacheKey,\n        endpointName: querySubState.endpointName!,\n        originalArgs: querySubState.originalArgs\n      }] : [];\n    }));\n  }\n  function selectCachedArgsForQuery<QueryName extends AllQueryKeys<Definitions>>(state: RootState, queryName: QueryName): Array<QueryArgFromAnyQuery<Definitions[QueryName]>> {\n    return Object.values(selectQueries(state) as QueryState<any>).filter((entry): entry is Exclude<QuerySubState<Definitions[QueryName]>, {\n      status: QueryStatus.uninitialized;\n    }> => entry?.endpointName === queryName && entry.status !== QueryStatus.uninitialized).map(entry => entry.originalArgs);\n  }\n  function getHasNextPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data) return false;\n    return getNextPageParam(options, data, queryArg) != null;\n  }\n  function getHasPreviousPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data || !options.getPreviousPageParam) return false;\n    return getPreviousPageParam(options, data, queryArg) != null;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Api, ApiContext, Module, ModuleName } from './apiTypes';\nimport type { CombinedState } from './core/apiState';\nimport type { BaseQueryArg, BaseQueryFn } from './baseQueryTypes';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { EndpointBuilder, EndpointDefinitions, SchemaFailureConverter, SchemaFailureHandler } from './endpointDefinitions';\nimport { DefinitionType, isInfiniteQueryDefinition, isQueryDefinition } from './endpointDefinitions';\nimport { nanoid } from './core/rtkImports';\nimport type { UnknownAction } from '@reduxjs/toolkit';\nimport type { NoInfer } from './tsHelpers';\nimport { weakMapMemoize } from 'reselect';\nexport interface CreateApiOptions<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never> {\n  /**\n   * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   // highlight-start\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  baseQuery: BaseQuery;\n  /**\n   * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   tagTypes: ['Post', 'User'],\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  tagTypes?: readonly TagTypes[];\n  /**\n   * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"apis.js\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';\n   *\n   * const apiOne = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiOne',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   *\n   * const apiTwo = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiTwo',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   * ```\n   */\n  reducerPath?: ReducerPath;\n  /**\n   * Accepts a custom function if you have a need to change the creation of cache keys for any reason.\n   */\n  serializeQueryArgs?: SerializeQueryArgs<unknown>;\n  /**\n   * Endpoints are a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are three endpoint types: [`query`](../../rtk-query/usage/queries), [`infiniteQuery`](../../rtk-query/usage/infinite-queries) and [`mutation`](../../rtk-query/usage/mutations).\n   */\n  endpoints(build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>): Definitions;\n  /**\n   * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   *\n   * ```ts\n   * // codeblock-meta title=\"keepUnusedDataFor example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       keepUnusedDataFor: 5\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  keepUnusedDataFor?: number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `'delayed'`. This setting allows you to control when tags are invalidated after a mutation.\n   *\n   * - `'immediately'`: Queries are invalidated instantly after the mutation finished, even if they are running.\n   *   If the query provides tags that were invalidated while it ran, it won't be re-fetched.\n   * - `'delayed'`: Invalidation only happens after all queries and mutations are settled.\n   *   This ensures that queries are always invalidated correctly and automatically \"batches\" invalidations of concurrent mutations.\n   *   Note that if you constantly have some queries (or mutations) running, this can delay tag invalidations indefinitely.\n   */\n  invalidationBehavior?: 'delayed' | 'immediately';\n  /**\n   * A function that is passed every dispatched action. If this returns something other than `undefined`,\n   * that return value will be used to rehydrate fulfilled & errored queries.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"next-redux-wrapper rehydration example\"\n   * import type { Action, PayloadAction } from '@reduxjs/toolkit'\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import { HYDRATE } from 'next-redux-wrapper'\n   *\n   * type RootState = any; // normally inferred from state\n   *\n   * function isHydrateAction(action: Action): action is PayloadAction<RootState> {\n   *   return action.type === HYDRATE\n   * }\n   *\n   * export const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   extractRehydrationInfo(action, { reducerPath }): any {\n   *     if (isHydrateAction(action)) {\n   *       return action.payload[reducerPath]\n   *     }\n   *   },\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // omitted\n   *   }),\n   * })\n   * ```\n   */\n  extractRehydrationInfo?: (action: UnknownAction, {\n    reducerPath\n  }: {\n    reducerPath: ReducerPath;\n  }) => undefined | CombinedState<NoInfer<Definitions>, NoInfer<TagTypes>, NoInfer<ReducerPath>>;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *     }),\n   *   }),\n   *   onSchemaFailure: (error, info) => {\n   *     console.error(error, info)\n   *   },\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   }),\n   *   catchSchemaFailure: (error, info) => ({\n   *     status: \"CUSTOM_ERROR\",\n   *     error: error.schemaName + \" failed validation\",\n   *     data: error.issues,\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for all endpoints, unless overridden by the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type CreateApi<Modules extends ModuleName> = {\n  /**\n   * Creates a service to use in your application. Contains only the basic redux logic (the core module).\n   *\n   * @link https://redux-toolkit.js.org/rtk-query/api/createApi\n   */\n  <BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never>(options: CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>): Api<BaseQuery, Definitions, ReducerPath, TagTypes, Modules>;\n};\n\n/**\n * Builds a `createApi` method based on the provided `modules`.\n *\n * @link https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api\n *\n * @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints\n * @returns A `createApi` method using the provided `modules`.\n */\nexport function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(...modules: Modules): CreateApi<Modules[number]['name']> {\n  return function baseCreateApi(options) {\n    const extractRehydrationInfo = weakMapMemoize((action: UnknownAction) => options.extractRehydrationInfo?.(action, {\n      reducerPath: (options.reducerPath ?? 'api') as any\n    }));\n    const optionsWithDefaults: CreateApiOptions<any, any, any, any> = {\n      reducerPath: 'api',\n      keepUnusedDataFor: 60,\n      refetchOnMountOrArgChange: false,\n      refetchOnFocus: false,\n      refetchOnReconnect: false,\n      invalidationBehavior: 'delayed',\n      ...options,\n      extractRehydrationInfo,\n      serializeQueryArgs(queryArgsApi) {\n        let finalSerializeQueryArgs = defaultSerializeQueryArgs;\n        if ('serializeQueryArgs' in queryArgsApi.endpointDefinition) {\n          const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs!;\n          finalSerializeQueryArgs = queryArgsApi => {\n            const initialResult = endpointSQA(queryArgsApi);\n            if (typeof initialResult === 'string') {\n              // If the user function returned a string, use it as-is\n              return initialResult;\n            } else {\n              // Assume they returned an object (such as a subset of the original\n              // query args) or a primitive, and serialize it ourselves\n              return defaultSerializeQueryArgs({\n                ...queryArgsApi,\n                queryArgs: initialResult\n              });\n            }\n          };\n        } else if (options.serializeQueryArgs) {\n          finalSerializeQueryArgs = options.serializeQueryArgs;\n        }\n        return finalSerializeQueryArgs(queryArgsApi);\n      },\n      tagTypes: [...(options.tagTypes || [])]\n    };\n    const context: ApiContext<EndpointDefinitions> = {\n      endpointDefinitions: {},\n      batch(fn) {\n        // placeholder \"batch\" method to be overridden by plugins, for example with React.unstable_batchedUpdate\n        fn();\n      },\n      apiUid: nanoid(),\n      extractRehydrationInfo,\n      hasRehydrationInfo: weakMapMemoize(action => extractRehydrationInfo(action) != null)\n    };\n    const api = {\n      injectEndpoints,\n      enhanceEndpoints({\n        addTagTypes,\n        endpoints\n      }) {\n        if (addTagTypes) {\n          for (const eT of addTagTypes) {\n            if (!optionsWithDefaults.tagTypes!.includes(eT as any)) {\n              ;\n              (optionsWithDefaults.tagTypes as any[]).push(eT);\n            }\n          }\n        }\n        if (endpoints) {\n          for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {\n            if (typeof partialDefinition === 'function') {\n              partialDefinition(context.endpointDefinitions[endpointName]);\n            } else {\n              Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);\n            }\n          }\n        }\n        return api;\n      }\n    } as Api<BaseQueryFn, {}, string, string, Modules[number]['name']>;\n    const initializedModules = modules.map(m => m.init(api as any, optionsWithDefaults as any, context));\n    function injectEndpoints(inject: Parameters<typeof api.injectEndpoints>[0]) {\n      const evaluatedEndpoints = inject.endpoints({\n        query: x => ({\n          ...x,\n          type: DefinitionType.query\n        }) as any,\n        mutation: x => ({\n          ...x,\n          type: DefinitionType.mutation\n        }) as any,\n        infiniteQuery: x => ({\n          ...x,\n          type: DefinitionType.infinitequery\n        }) as any\n      });\n      for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {\n        if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {\n          if (inject.overrideExisting === 'throw') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(39) : `called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          } else if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n            console.error(`called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          }\n          continue;\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          if (isInfiniteQueryDefinition(definition)) {\n            const {\n              infiniteQueryOptions\n            } = definition;\n            const {\n              maxPages,\n              getPreviousPageParam\n            } = infiniteQueryOptions;\n            if (typeof maxPages === 'number') {\n              if (maxPages < 1) {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(40) : `maxPages for endpoint '${endpointName}' must be a number greater than 0`);\n              }\n              if (typeof getPreviousPageParam !== 'function') {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(41) : `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`);\n              }\n            }\n          }\n        }\n        context.endpointDefinitions[endpointName] = definition;\n        for (const m of initializedModules) {\n          m.injectEndpoint(endpointName, definition);\n        }\n      }\n      return api as any;\n    }\n    return api.injectEndpoints({\n      endpoints: options.endpoints as any\n    });\n  };\n}","import type { QueryCacheKey } from './core/apiState';\nimport type { EndpointDefinition } from './endpointDefinitions';\nimport { isPlainObject } from './core/rtkImports';\nconst cache: WeakMap<any, string> | undefined = WeakMap ? new WeakMap() : undefined;\nexport const defaultSerializeQueryArgs: SerializeQueryArgs<any> = ({\n  endpointName,\n  queryArgs\n}) => {\n  let serialized = '';\n  const cached = cache?.get(queryArgs);\n  if (typeof cached === 'string') {\n    serialized = cached;\n  } else {\n    const stringified = JSON.stringify(queryArgs, (key, value) => {\n      // Handle bigints\n      value = typeof value === 'bigint' ? {\n        $bigint: value.toString()\n      } : value;\n      // Sort the object keys before stringifying, to prevent useQuery({ a: 1, b: 2 }) having a different cache key than useQuery({ b: 2, a: 1 })\n      value = isPlainObject(value) ? Object.keys(value).sort().reduce<any>((acc, key) => {\n        acc[key] = (value as any)[key];\n        return acc;\n      }, {}) : value;\n      return value;\n    });\n    if (isPlainObject(queryArgs)) {\n      cache?.set(queryArgs, stringified);\n    }\n    serialized = stringified;\n  }\n  return `${endpointName}(${serialized})`;\n};\nexport type SerializeQueryArgs<QueryArgs, ReturnType = string> = (_: {\n  queryArgs: QueryArgs;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => ReturnType;\nexport type InternalSerializeQueryArgs = (_: {\n  queryArgs: any;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => QueryCacheKey;","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { BaseQueryFn } from './baseQueryTypes';\nexport const _NEVER = /* @__PURE__ */Symbol();\nexport type NEVER = typeof _NEVER;\n\n/**\n * Creates a \"fake\" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.\n * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.\n */\nexport function fakeBaseQuery<ErrorType>(): BaseQueryFn<void, NEVER, ErrorType, {}> {\n  return function () {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(33) : 'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.');\n  };\n}","/**\n * Note: this file should import all other files for type discovery and declaration merging\n */\nimport type { ActionCreatorWithPayload, Middleware, Reducer, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport { enablePatches } from 'immer';\nimport type { Api, Module } from '../apiTypes';\nimport type { BaseQueryFn } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinitions, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, TagDescription } from '../endpointDefinitions';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { assertCast, safeAssign } from '../tsHelpers';\nimport type { CombinedState, MutationKeys, QueryKeys, RootState } from './apiState';\nimport type { BuildInitiateApiEndpointMutation, BuildInitiateApiEndpointQuery, MutationActionCreatorResult, QueryActionCreatorResult, InfiniteQueryActionCreatorResult, BuildInitiateApiEndpointInfiniteQuery } from './buildInitiate';\nimport { buildInitiate } from './buildInitiate';\nimport type { ReferenceCacheCollection, ReferenceCacheLifecycle, ReferenceQueryLifecycle } from './buildMiddleware';\nimport { buildMiddleware } from './buildMiddleware';\nimport type { BuildSelectorsApiEndpointInfiniteQuery, BuildSelectorsApiEndpointMutation, BuildSelectorsApiEndpointQuery } from './buildSelectors';\nimport { buildSelectors } from './buildSelectors';\nimport type { SliceActions, UpsertEntries } from './buildSlice';\nimport { buildSlice } from './buildSlice';\nimport type { AllQueryKeys, BuildThunksApiEndpointInfiniteQuery, BuildThunksApiEndpointMutation, BuildThunksApiEndpointQuery, PatchQueryDataThunk, QueryArgFromAnyQueryDefinition, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nimport { buildThunks } from './buildThunks';\nimport { createSelector as _createSelector } from './rtkImports';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\n\n/**\n * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_\n * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value\n *\n * @overloadSummary\n * `force`\n * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.\n */\nexport type PrefetchOptions = {\n  ifOlderThan?: false | number;\n} | {\n  force?: boolean;\n};\nexport const coreModuleName = /* @__PURE__ */Symbol();\nexport type CoreModule = typeof coreModuleName | ReferenceCacheLifecycle | ReferenceQueryLifecycle | ReferenceCacheCollection;\nexport type ThunkWithReturnValue<T> = ThunkAction<T, any, any, UnknownAction>;\nexport interface ApiModules<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nBaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {\n  [coreModuleName]: {\n    /**\n     * This api's reducer should be mounted at `store[api.reducerPath]`.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducerPath: ReducerPath;\n    /**\n     * Internal actions not part of the public API. Note: These are subject to change at any given time.\n     */\n    internalActions: InternalActions;\n    /**\n     *  A standard redux reducer that enables core functionality. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducer: Reducer<CombinedState<Definitions, TagTypes, ReducerPath>, UnknownAction>;\n    /**\n     * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>>;\n    /**\n     * A collection of utility thunks for various situations.\n     */\n    util: {\n      /**\n       * A thunk that (if dispatched) will return a specific running query, identified\n       * by `endpointName` and `arg`.\n       * If that query is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific query triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueryThunk<EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>): ThunkWithReturnValue<QueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'query';\n      }> | InfiniteQueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'infinitequery';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return a specific running mutation, identified\n       * by `endpointName` and `fixedCacheKey` or `requestId`.\n       * If that mutation is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific mutation triggered in any way,\n       * including via hook trigger functions or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationThunk<EndpointName extends MutationKeys<Definitions>>(endpointName: EndpointName, fixedCacheKeyOrRequestId: string): ThunkWithReturnValue<MutationActionCreatorResult<Definitions[EndpointName] & {\n        type: 'mutation';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return all running queries.\n       *\n       * Useful for SSR scenarios to await all running queries triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueriesThunk(): ThunkWithReturnValue<Array<QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>>;\n\n      /**\n       * A thunk that (if dispatched) will return all running mutations.\n       *\n       * Useful for SSR scenarios to await all running mutations triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationsThunk(): ThunkWithReturnValue<Array<MutationActionCreatorResult<any>>>;\n\n      /**\n       * A Redux thunk that can be used to manually trigger pre-fetching of data.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.\n       *\n       * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.\n       *\n       * @example\n       *\n       * ```ts no-transpile\n       * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))\n       * ```\n       */\n      prefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction>;\n      /**\n       * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and an `updateRecipe` callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.\n       *\n       * The thunk executes _synchronously_, and returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).\n       *\n       * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, arg, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.\n       *\n       * Note that the first two arguments (`endpointName` and `arg`) are used to determine which existing cache entry to update. If no existing cache entry is found, the `updateRecipe` callback will not run.\n       *\n       * @example\n       *\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       * ```\n       */\n      updateQueryData: UpdateQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux thunk action creator that, when dispatched, acts as an artificial API request to upsert a value into the cache.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and the data to upsert.\n       *\n       * If no cache entry for that cache key exists, a cache entry will be created and the data added. If a cache entry already exists, this will _overwrite_ the existing cache entry data.\n       *\n       * The thunk executes _asynchronously_, and returns a promise that resolves when the store has been updated.\n       *\n       * If dispatched while an actual request is in progress, both the upsert and request will be handled as soon as they resolve, resulting in a \"last result wins\" update behavior.\n       *\n       * @example\n       *\n       * ```ts\n       * await dispatch(\n       *   api.util.upsertQueryData('getPost', {id: 1}, {id: 1, text: \"Hello!\"})\n       * )\n       * ```\n       */\n      upsertQueryData: UpsertQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n      /**\n       * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.\n       *\n       * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.\n       *\n       * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.\n       *\n       * @example\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       *\n       * // later\n       * dispatch(\n       *   api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)\n       * )\n       *\n       * // or\n       * patchCollection.undo()\n       * ```\n       */\n      patchQueryData: PatchQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.resetApiState())\n       * ```\n       */\n      resetApiState: SliceActions['resetApiState'];\n      upsertQueryEntries: UpsertEntries<Definitions>;\n\n      /**\n       * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).\n       *\n       * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.\n       *\n       * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.\n       *\n       * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:\n       *\n       * - `[TagType]`\n       * - `[{ type: TagType }]`\n       * - `[{ type: TagType, id: number | string }]`\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.invalidateTags(['Post']))\n       * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))\n       * dispatch(\n       *   api.util.invalidateTags([\n       *     { type: 'Post', id: 1 },\n       *     { type: 'Post', id: 'LIST' },\n       *   ])\n       * )\n       * ```\n       */\n      invalidateTags: ActionCreatorWithPayload<Array<TagDescription<TagTypes> | null | undefined>, string>;\n\n      /**\n       * A function to select all `{ endpointName, originalArgs, queryCacheKey }` combinations that would be invalidated by a specific set of tags.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectInvalidatedBy: (state: RootState<Definitions, string, ReducerPath>, tags: ReadonlyArray<TagDescription<TagTypes> | null | undefined>) => Array<{\n        endpointName: string;\n        originalArgs: any;\n        queryCacheKey: string;\n      }>;\n\n      /**\n       * A function to select all arguments currently cached for a given endpoint.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectCachedArgsForQuery: <QueryName extends AllQueryKeys<Definitions>>(state: RootState<Definitions, string, ReducerPath>, queryName: QueryName) => Array<QueryArgFromAnyQuery<Definitions[QueryName]>>;\n    };\n    /**\n     * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.\n     */\n    endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? ApiEndpointQuery<Definitions[K], Definitions> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? ApiEndpointMutation<Definitions[K], Definitions> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? ApiEndpointInfiniteQuery<Definitions[K], Definitions> : never };\n  };\n}\nexport interface ApiEndpointQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends QueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointQuery<Definition>, BuildInitiateApiEndpointQuery<Definition>, BuildSelectorsApiEndpointQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport interface ApiEndpointInfiniteQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends InfiniteQueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointInfiniteQuery<Definition>, BuildInitiateApiEndpointInfiniteQuery<Definition>, BuildSelectorsApiEndpointInfiniteQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface ApiEndpointMutation<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends MutationDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointMutation<Definition>, BuildInitiateApiEndpointMutation<Definition>, BuildSelectorsApiEndpointMutation<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport type ListenerActions = {\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n};\nexport type InternalActions = SliceActions & ListenerActions;\nexport interface CoreModuleOptions {\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module containing the basic redux logic for use with `buildCreateApi`.\n *\n * @example\n * ```ts\n * const createBaseApi = buildCreateApi(coreModule());\n * ```\n */\nexport const coreModule = ({\n  createSelector = _createSelector\n}: CoreModuleOptions = {}): Module<CoreModule> => ({\n  name: coreModuleName,\n  init(api, {\n    baseQuery,\n    tagTypes,\n    reducerPath,\n    serializeQueryArgs,\n    keepUnusedDataFor,\n    refetchOnMountOrArgChange,\n    refetchOnFocus,\n    refetchOnReconnect,\n    invalidationBehavior,\n    onSchemaFailure,\n    catchSchemaFailure,\n    skipSchemaValidation\n  }, context) {\n    enablePatches();\n    assertCast<InternalSerializeQueryArgs>(serializeQueryArgs);\n    const assertTagType: AssertTagTypes = tag => {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        if (!tagTypes.includes(tag.type as any)) {\n          console.error(`Tag type '${tag.type}' was used, but not specified in \\`tagTypes\\`!`);\n        }\n      }\n      return tag;\n    };\n    Object.assign(api, {\n      reducerPath,\n      endpoints: {},\n      internalActions: {\n        onOnline,\n        onOffline,\n        onFocus,\n        onFocusLost\n      },\n      util: {}\n    });\n    const selectors = buildSelectors({\n      serializeQueryArgs: serializeQueryArgs as any,\n      reducerPath,\n      createSelector\n    });\n    const {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery,\n      buildQuerySelector,\n      buildInfiniteQuerySelector,\n      buildMutationSelector\n    } = selectors;\n    safeAssign(api.util, {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery\n    });\n    const {\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      buildMatchThunkActions\n    } = buildThunks({\n      baseQuery,\n      reducerPath,\n      context,\n      api,\n      serializeQueryArgs,\n      assertTagType,\n      selectors,\n      onSchemaFailure,\n      catchSchemaFailure,\n      skipSchemaValidation\n    });\n    const {\n      reducer,\n      actions: sliceActions\n    } = buildSlice({\n      context,\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      serializeQueryArgs,\n      reducerPath,\n      assertTagType,\n      config: {\n        refetchOnFocus,\n        refetchOnReconnect,\n        refetchOnMountOrArgChange,\n        keepUnusedDataFor,\n        reducerPath,\n        invalidationBehavior\n      }\n    });\n    safeAssign(api.util, {\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      resetApiState: sliceActions.resetApiState,\n      upsertQueryEntries: sliceActions.cacheEntriesUpserted as any\n    });\n    safeAssign(api.internalActions, sliceActions);\n    const {\n      middleware,\n      actions: middlewareActions\n    } = buildMiddleware({\n      reducerPath,\n      context,\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      assertTagType,\n      selectors\n    });\n    safeAssign(api.util, middlewareActions);\n    safeAssign(api, {\n      reducer: reducer as any,\n      middleware\n    });\n    const {\n      buildInitiateQuery,\n      buildInitiateInfiniteQuery,\n      buildInitiateMutation,\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueriesThunk,\n      getRunningQueryThunk\n    } = buildInitiate({\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      serializeQueryArgs: serializeQueryArgs as any,\n      context\n    });\n    safeAssign(api.util, {\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueryThunk,\n      getRunningQueriesThunk\n    });\n    return {\n      name: coreModuleName,\n      injectEndpoint(endpointName, definition) {\n        const anyApi = api as any as Api<any, Record<string, any>, string, string, CoreModule>;\n        const endpoint = anyApi.endpoints[endpointName] ??= {} as any;\n        if (isQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildQuerySelector(endpointName, definition),\n            initiate: buildInitiateQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n        if (isMutationDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildMutationSelector(),\n            initiate: buildInitiateMutation(endpointName)\n          }, buildMatchThunkActions(mutationThunk, endpointName));\n        }\n        if (isInfiniteQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildInfiniteQuerySelector(endpointName, definition),\n            initiate: buildInitiateInfiniteQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n      }\n    };\n  }\n});","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import type { InternalHandlerBuilder, SubscriptionSelectors } from './types';\nimport type { SubscriptionState } from '../apiState';\nimport { produceWithPatches } from 'immer';\nimport type { Action } from '@reduxjs/toolkit';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildBatchedActionsHandler: InternalHandlerBuilder<[actionShouldContinue: boolean, returnValue: SubscriptionSelectors | boolean]> = ({\n  api,\n  queryThunk,\n  internalState\n}) => {\n  const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;\n  let previousSubscriptions: SubscriptionState = null as unknown as SubscriptionState;\n  let updateSyncTimer: ReturnType<typeof window.setTimeout> | null = null;\n  const {\n    updateSubscriptionOptions,\n    unsubscribeQueryResult\n  } = api.internalActions;\n\n  // Actually intentionally mutate the subscriptions state used in the middleware\n  // This is done to speed up perf when loading many components\n  const actuallyMutateSubscriptions = (mutableState: SubscriptionState, action: Action) => {\n    if (updateSubscriptionOptions.match(action)) {\n      const {\n        queryCacheKey,\n        requestId,\n        options\n      } = action.payload;\n      if (mutableState?.[queryCacheKey]?.[requestId]) {\n        mutableState[queryCacheKey]![requestId] = options;\n      }\n      return true;\n    }\n    if (unsubscribeQueryResult.match(action)) {\n      const {\n        queryCacheKey,\n        requestId\n      } = action.payload;\n      if (mutableState[queryCacheKey]) {\n        delete mutableState[queryCacheKey]![requestId];\n      }\n      return true;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) {\n      delete mutableState[action.payload.queryCacheKey];\n      return true;\n    }\n    if (queryThunk.pending.match(action)) {\n      const {\n        meta: {\n          arg,\n          requestId\n        }\n      } = action;\n      const substate = mutableState[arg.queryCacheKey] ??= {};\n      substate[`${requestId}_running`] = {};\n      if (arg.subscribe) {\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n      }\n      return true;\n    }\n    let mutated = false;\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {\n      const state = mutableState[action.meta.arg.queryCacheKey] || {};\n      const key = `${action.meta.requestId}_running`;\n      mutated ||= !!state[key];\n      delete state[key];\n    }\n    if (queryThunk.rejected.match(action)) {\n      const {\n        meta: {\n          condition,\n          arg,\n          requestId\n        }\n      } = action;\n      if (condition && arg.subscribe) {\n        const substate = mutableState[arg.queryCacheKey] ??= {};\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n        mutated = true;\n      }\n    }\n    return mutated;\n  };\n  const getSubscriptions = () => internalState.currentSubscriptions;\n  const getSubscriptionCount = (queryCacheKey: string) => {\n    const subscriptions = getSubscriptions();\n    const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {};\n    return countObjectKeys(subscriptionsForQueryArg);\n  };\n  const isRequestSubscribed = (queryCacheKey: string, requestId: string) => {\n    const subscriptions = getSubscriptions();\n    return !!subscriptions?.[queryCacheKey]?.[requestId];\n  };\n  const subscriptionSelectors: SubscriptionSelectors = {\n    getSubscriptions,\n    getSubscriptionCount,\n    isRequestSubscribed\n  };\n  return (action, mwApi): [actionShouldContinue: boolean, result: SubscriptionSelectors | boolean] => {\n    if (!previousSubscriptions) {\n      // Initialize it the first time this handler runs\n      previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n    }\n    if (api.util.resetApiState.match(action)) {\n      previousSubscriptions = internalState.currentSubscriptions = {};\n      updateSyncTimer = null;\n      return [true, false];\n    }\n\n    // Intercept requests by hooks to see if they're subscribed\n    // We return the internal state reference so that hooks\n    // can do their own checks to see if they're still active.\n    // It's stupid and hacky, but it does cut down on some dispatch calls.\n    if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {\n      return [false, subscriptionSelectors];\n    }\n\n    // Update subscription data based on this action\n    const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);\n    let actionShouldContinue = true;\n    if (didMutate) {\n      if (!updateSyncTimer) {\n        // We only use the subscription state for the Redux DevTools at this point,\n        // as the real data is kept here in the middleware.\n        // Given that, we can throttle synchronizing this state significantly to\n        // save on overall perf.\n        // In 1.9, it was updated in a microtask, but now we do it at most every 500ms.\n        updateSyncTimer = setTimeout(() => {\n          // Deep clone the current subscription data\n          const newSubscriptions: SubscriptionState = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n          // Figure out a smaller diff between original and current\n          const [, patches] = produceWithPatches(previousSubscriptions, () => newSubscriptions);\n\n          // Sync the store state for visibility\n          mwApi.next(api.internalActions.subscriptionsUpdated(patches));\n          // Save the cloned state for later reference\n          previousSubscriptions = newSubscriptions;\n          updateSyncTimer = null;\n        }, 500);\n      }\n      const isSubscriptionSliceAction = typeof action.type == 'string' && !!action.type.startsWith(subscriptionsPrefix);\n      const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;\n      actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;\n    }\n    return [actionShouldContinue, false];\n  };\n};","import type { QueryDefinition } from '../../endpointDefinitions';\nimport type { ConfigState, QueryCacheKey } from '../apiState';\nimport { isAnyOf } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, QueryStateMeta, SubMiddlewareApi, TimeoutId } from './types';\nexport type ReferenceCacheCollection = never;\nfunction isObjectEmpty(obj: Record<any, any>) {\n  // Apparently a for..in loop is faster than `Object.keys()` here:\n  // https://stackoverflow.com/a/59787784/62937\n  for (const k in obj) {\n    // If there is at least one key, it's not empty\n    return false;\n  }\n  return true;\n}\nexport type CacheCollectionQueryExtraOptions = {\n  /**\n   * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_\n   *\n   * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   */\n  keepUnusedDataFor?: number;\n};\n\n// Per https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value , browsers store\n// `setTimeout()` timer values in a 32-bit int. If we pass a value in that's larger than that,\n// it wraps and ends up executing immediately.\n// Our `keepUnusedDataFor` values are in seconds, so adjust the numbers here accordingly.\nexport const THIRTY_TWO_BIT_MAX_INT = 2_147_483_647;\nexport const THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2_147_483_647 / 1_000 - 1;\nexport const buildCacheCollectionHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  api,\n  queryThunk,\n  context,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectConfig\n  }\n}) => {\n  const {\n    removeQueryResult,\n    unsubscribeQueryResult,\n    cacheEntriesUpserted\n  } = api.internalActions;\n  const canTriggerUnsubscribe = isAnyOf(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);\n  function anySubscriptionsRemainingForKey(queryCacheKey: string) {\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    return !!subscriptions && !isObjectEmpty(subscriptions);\n  }\n  const currentRemovalTimeouts: QueryStateMeta<TimeoutId> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, internalState) => {\n    const state = mwApi.getState();\n    const config = selectConfig(state);\n    if (canTriggerUnsubscribe(action)) {\n      let queryCacheKeys: QueryCacheKey[];\n      if (cacheEntriesUpserted.match(action)) {\n        queryCacheKeys = action.payload.map(entry => entry.queryDescription.queryCacheKey);\n      } else {\n        const {\n          queryCacheKey\n        } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;\n        queryCacheKeys = [queryCacheKey];\n      }\n      handleUnsubscribeMany(queryCacheKeys, mwApi, config);\n    }\n    if (api.util.resetApiState.match(action)) {\n      for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {\n        if (timeout) clearTimeout(timeout);\n        delete currentRemovalTimeouts[key];\n      }\n    }\n    if (context.hasRehydrationInfo(action)) {\n      const {\n        queries\n      } = context.extractRehydrationInfo(action)!;\n      // Gotcha:\n      // If rehydrating before the endpoint has been injected,the global `keepUnusedDataFor`\n      // will be used instead of the endpoint-specific one.\n      handleUnsubscribeMany(Object.keys(queries) as QueryCacheKey[], mwApi, config);\n    }\n  };\n  function handleUnsubscribeMany(cacheKeys: QueryCacheKey[], api: SubMiddlewareApi, config: ConfigState<string>) {\n    const state = api.getState();\n    for (const queryCacheKey of cacheKeys) {\n      const entry = selectQueryEntry(state, queryCacheKey);\n      handleUnsubscribe(queryCacheKey, entry?.endpointName, api, config);\n    }\n  }\n  function handleUnsubscribe(queryCacheKey: QueryCacheKey, endpointName: string | undefined, api: SubMiddlewareApi, config: ConfigState<string>) {\n    const endpointDefinition = context.endpointDefinitions[endpointName!] as QueryDefinition<any, any, any, any>;\n    const keepUnusedDataFor = endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor;\n    if (keepUnusedDataFor === Infinity) {\n      // Hey, user said keep this forever!\n      return;\n    }\n    // Prevent `setTimeout` timers from overflowing a 32-bit internal int, by\n    // clamping the max value to be at most 1000ms less than the 32-bit max.\n    // Look, a 24.8-day keepalive ought to be enough for anybody, right? :)\n    // Also avoid negative values too.\n    const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));\n    if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n      const currentTimeout = currentRemovalTimeouts[queryCacheKey];\n      if (currentTimeout) {\n        clearTimeout(currentTimeout);\n      }\n      currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {\n        if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n          api.dispatch(removeQueryResult({\n            queryCacheKey\n          }));\n        }\n        delete currentRemovalTimeouts![queryCacheKey];\n      }, finalKeepUnusedDataFor * 1000);\n    }\n  }\n  return handler;\n};","import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { BaseQueryFn, BaseQueryMeta, BaseQueryResult } from '../../baseQueryTypes';\nimport type { BaseEndpointDefinition } from '../../endpointDefinitions';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { QueryCacheKey, RootState } from '../apiState';\nimport type { MutationResultSelectorResult, QueryResultSelectorResult } from '../buildSelectors';\nimport { getMutationCacheKey } from '../buildSlice';\nimport type { PatchCollection, Recipe } from '../buildThunks';\nimport { isAsyncThunkAction, isFulfilled } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseWithKnownReason, SubMiddlewareApi } from './types';\nexport type ReferenceCacheLifecycle = never;\nexport interface QueryBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends LifecycleApi<ReducerPath> {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): QueryResultSelectorResult<{\n    type: DefinitionType.query;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n  /**\n   * Updates the current cache entry value.\n   * For documentation see `api.util.updateQueryData`.\n   */\n  updateCachedData(updateRecipe: Recipe<ResultType>): PatchCollection;\n}\nexport type MutationBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = LifecycleApi<ReducerPath> & {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): MutationResultSelectorResult<{\n    type: DefinitionType.mutation;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n};\ntype LifecycleApi<ReducerPath extends string = string> = {\n  /**\n   * The dispatch method for the store\n   */\n  dispatch: ThunkDispatch<any, any, UnknownAction>;\n  /**\n   * A method to get the current state\n   */\n  getState(): RootState<any, any, ReducerPath>;\n  /**\n   * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.\n   */\n  extra: unknown;\n  /**\n   * A unique ID generated for the mutation\n   */\n  requestId: string;\n};\ntype CacheLifecyclePromises<ResultType = unknown, MetaType = unknown> = {\n  /**\n   * Promise that will resolve with the first value for this cache key.\n   * This allows you to `await` until an actual value is in cache.\n   *\n   * If the cache entry is removed from the cache before any value has ever\n   * been resolved, this Promise will reject with\n   * `new Error('Promise never resolved before cacheEntryRemoved.')`\n   * to prevent memory leaks.\n   * You can just re-throw that error (or not handle it at all) -\n   * it will be caught outside of `cacheEntryAdded`.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  cacheDataLoaded: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: MetaType;\n  }, typeof neverResolvedError>;\n  /**\n   * Promise that allows you to wait for the point in time when the cache entry\n   * has been removed from the cache, by not being used/subscribed to any more\n   * in the application for too long or by dispatching `api.util.resetApiState`.\n   */\n  cacheEntryRemoved: Promise<void>;\n};\nexport interface QueryCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>> {}\nexport type MutationCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>>;\nexport type CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: QueryCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type CacheLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: MutationCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nconst neverResolvedError = new Error('Promise never resolved before cacheEntryRemoved.') as Error & {\n  message: 'Promise never resolved before cacheEntryRemoved.';\n};\nexport const buildCacheLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  reducerPath,\n  context,\n  queryThunk,\n  mutationThunk,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectApiState\n  }\n}) => {\n  const isQueryThunk = isAsyncThunkAction(queryThunk);\n  const isMutationThunk = isAsyncThunkAction(mutationThunk);\n  const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    valueResolved?(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    cacheEntryRemoved(): void;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  function resolveLifecycleEntry(cacheKey: string, data: unknown, meta: unknown) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle?.valueResolved) {\n      lifecycle.valueResolved({\n        data,\n        meta\n      });\n      delete lifecycle.valueResolved;\n    }\n  }\n  function removeLifecycleEntry(cacheKey: string) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle) {\n      delete lifecycleMap[cacheKey];\n      lifecycle.cacheEntryRemoved();\n    }\n  }\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, stateBefore) => {\n    const cacheKey = getCacheKey(action) as QueryCacheKey;\n    function checkForNewCacheKey(endpointName: string, cacheKey: QueryCacheKey, requestId: string, originalArgs: unknown) {\n      const oldEntry = selectQueryEntry(stateBefore, cacheKey);\n      const newEntry = selectQueryEntry(mwApi.getState(), cacheKey);\n      if (!oldEntry && newEntry) {\n        handleNewKey(endpointName, originalArgs, cacheKey, mwApi, requestId);\n      }\n    }\n    if (queryThunk.pending.match(action)) {\n      checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);\n    } else if (api.internalActions.cacheEntriesUpserted.match(action)) {\n      for (const {\n        queryDescription,\n        value\n      } of action.payload) {\n        const {\n          endpointName,\n          originalArgs,\n          queryCacheKey\n        } = queryDescription;\n        checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);\n        resolveLifecycleEntry(queryCacheKey, value, {});\n      }\n    } else if (mutationThunk.pending.match(action)) {\n      const state = mwApi.getState()[reducerPath].mutations[cacheKey];\n      if (state) {\n        handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);\n      }\n    } else if (isFulfilledThunk(action)) {\n      resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);\n    } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {\n      removeLifecycleEntry(cacheKey);\n    } else if (api.util.resetApiState.match(action)) {\n      for (const cacheKey of Object.keys(lifecycleMap)) {\n        removeLifecycleEntry(cacheKey);\n      }\n    }\n  };\n  function getCacheKey(action: any) {\n    if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;\n    if (isMutationThunk(action)) {\n      return action.meta.arg.fixedCacheKey ?? action.meta.requestId;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;\n    if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);\n    return '';\n  }\n  function handleNewKey(endpointName: string, originalArgs: any, queryCacheKey: string, mwApi: SubMiddlewareApi, requestId: string) {\n    const endpointDefinition = context.endpointDefinitions[endpointName];\n    const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded;\n    if (!onCacheEntryAdded) return;\n    const lifecycle = {} as CacheLifecycle;\n    const cacheEntryRemoved = new Promise<void>(resolve => {\n      lifecycle.cacheEntryRemoved = resolve;\n    });\n    const cacheDataLoaded: PromiseWithKnownReason<{\n      data: unknown;\n      meta: unknown;\n    }, typeof neverResolvedError> = Promise.race([new Promise<{\n      data: unknown;\n      meta: unknown;\n    }>(resolve => {\n      lifecycle.valueResolved = resolve;\n    }), cacheEntryRemoved.then(() => {\n      throw neverResolvedError;\n    })]);\n    // prevent uncaught promise rejections from happening.\n    // if the original promise is used in any way, that will create a new promise that will throw again\n    cacheDataLoaded.catch(() => {});\n    lifecycleMap[queryCacheKey] = lifecycle;\n    const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : queryCacheKey);\n    const extra = mwApi.dispatch((_, __, extra) => extra);\n    const lifecycleApi = {\n      ...mwApi,\n      getCacheEntry: () => selector(mwApi.getState()),\n      requestId,\n      extra,\n      updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n      cacheDataLoaded,\n      cacheEntryRemoved\n    };\n    const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi as any);\n    // if a `neverResolvedError` was thrown, but not handled in the running handler, do not let it leak out further\n    Promise.resolve(runningHandler).catch(e => {\n      if (e === neverResolvedError) return;\n      throw e;\n    });\n  }\n  return handler;\n};","import type { InternalHandlerBuilder } from './types';\nexport const buildDevCheckHandler: InternalHandlerBuilder = ({\n  api,\n  context: {\n    apiUid\n  },\n  reducerPath\n}) => {\n  return (action, mwApi) => {\n    if (api.util.resetApiState.match(action)) {\n      // dispatch after api reset\n      mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (api.internalActions.middlewareRegistered.match(action) && action.payload === apiUid && mwApi.getState()[reducerPath]?.config?.middlewareRegistered === 'conflict') {\n        console.warn(`There is a mismatch between slice and middleware for the reducerPath \"${reducerPath}\".\nYou can only have one api per reducer path, this will lead to crashes in various situations!${reducerPath === 'api' ? `\nIf you have multiple apis, you *have* to specify the reducerPath option when using createApi!` : ''}`);\n      }\n    }\n  };\n};","import { isAnyOf, isFulfilled, isRejected, isRejectedWithValue } from '../rtkImports';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport { calculateProvidedBy } from '../../endpointDefinitions';\nimport type { CombinedState, QueryCacheKey } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport { calculateProvidedByThunk } from '../buildThunks';\nimport type { SubMiddlewareApi, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  context: {\n    endpointDefinitions\n  },\n  mutationThunk,\n  queryThunk,\n  api,\n  assertTagType,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const isThunkActionWithTags = isAnyOf(isFulfilled(mutationThunk), isRejectedWithValue(mutationThunk));\n  const isQueryEnd = isAnyOf(isFulfilled(mutationThunk, queryThunk), isRejected(mutationThunk, queryThunk));\n  let pendingTagInvalidations: FullTagDescription<string>[] = [];\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isThunkActionWithTags(action)) {\n      invalidateTags(calculateProvidedByThunk(action, 'invalidatesTags', endpointDefinitions, assertTagType), mwApi);\n    } else if (isQueryEnd(action)) {\n      invalidateTags([], mwApi);\n    } else if (api.util.invalidateTags.match(action)) {\n      invalidateTags(calculateProvidedBy(action.payload, undefined, undefined, undefined, undefined, assertTagType), mwApi);\n    }\n  };\n  function hasPendingRequests(state: CombinedState<EndpointDefinitions, string, string>) {\n    const {\n      queries,\n      mutations\n    } = state;\n    for (const cacheRecord of [queries, mutations]) {\n      for (const key in cacheRecord) {\n        if (cacheRecord[key]?.status === QueryStatus.pending) return true;\n      }\n    }\n    return false;\n  }\n  function invalidateTags(newTags: readonly FullTagDescription<string>[], mwApi: SubMiddlewareApi) {\n    const rootState = mwApi.getState();\n    const state = rootState[reducerPath];\n    pendingTagInvalidations.push(...newTags);\n    if (state.config.invalidationBehavior === 'delayed' && hasPendingRequests(state)) {\n      return;\n    }\n    const tags = pendingTagInvalidations;\n    pendingTagInvalidations = [];\n    if (tags.length === 0) return;\n    const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);\n    context.batch(() => {\n      const valuesArray = Array.from(toInvalidate.values());\n      for (const {\n        queryCacheKey\n      } of valuesArray) {\n        const querySubState = state.queries[queryCacheKey];\n        const subscriptionSubState = internalState.currentSubscriptions[queryCacheKey] ?? {};\n        if (querySubState) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            mwApi.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            mwApi.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { QueryCacheKey, QuerySubstateIdentifier, Subscribers } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport type { QueryStateMeta, SubMiddlewareApi, TimeoutId, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nexport const buildPollingHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  queryThunk,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const currentPolls: QueryStateMeta<{\n    nextPollTimestamp: number;\n    timeout?: TimeoutId;\n    pollingInterval: number;\n  }> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {\n      updatePollingInterval(action.payload, mwApi);\n    }\n    if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {\n      updatePollingInterval(action.meta.arg, mwApi);\n    }\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {\n      startNextPoll(action.meta.arg, mwApi);\n    }\n    if (api.util.resetApiState.match(action)) {\n      clearPolls();\n    }\n  };\n  function getCacheEntrySubscriptions(queryCacheKey: QueryCacheKey, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    return subscriptions;\n  }\n  function startNextPoll({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    const {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) return;\n    const currentPoll = currentPolls[queryCacheKey];\n    if (currentPoll?.timeout) {\n      clearTimeout(currentPoll.timeout);\n      currentPoll.timeout = undefined;\n    }\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    currentPolls[queryCacheKey] = {\n      nextPollTimestamp,\n      pollingInterval: lowestPollingInterval,\n      timeout: setTimeout(() => {\n        if (state.config.focused || !skipPollingIfUnfocused) {\n          api.dispatch(refetchQuery(querySubState));\n        }\n        startNextPoll({\n          queryCacheKey\n        }, api);\n      }, lowestPollingInterval)\n    };\n  }\n  function updatePollingInterval({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) {\n      return;\n    }\n    const {\n      lowestPollingInterval\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) {\n      cleanupPollForKey(queryCacheKey);\n      return;\n    }\n    const currentPoll = currentPolls[queryCacheKey];\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {\n      startNextPoll({\n        queryCacheKey\n      }, api);\n    }\n  }\n  function cleanupPollForKey(key: string) {\n    const existingPoll = currentPolls[key];\n    if (existingPoll?.timeout) {\n      clearTimeout(existingPoll.timeout);\n    }\n    delete currentPolls[key];\n  }\n  function clearPolls() {\n    for (const key of Object.keys(currentPolls)) {\n      cleanupPollForKey(key);\n    }\n  }\n  function findLowestPollingInterval(subscribers: Subscribers = {}) {\n    let skipPollingIfUnfocused: boolean | undefined = false;\n    let lowestPollingInterval = Number.POSITIVE_INFINITY;\n    for (let key in subscribers) {\n      if (!!subscribers[key].pollingInterval) {\n        lowestPollingInterval = Math.min(subscribers[key].pollingInterval!, lowestPollingInterval);\n        skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;\n      }\n    }\n    return {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    };\n  }\n  return handler;\n};","import type { BaseQueryError, BaseQueryFn, BaseQueryMeta } from '../../baseQueryTypes';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { Recipe } from '../buildThunks';\nimport { isFulfilled, isPending, isRejected } from '../rtkImports';\nimport type { MutationBaseLifecycleApi, QueryBaseLifecycleApi } from './cacheLifecycle';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseConstructorWithKnownReason, PromiseWithKnownReason } from './types';\nexport type ReferenceQueryLifecycle = never;\ntype QueryLifecyclePromises<ResultType, BaseQuery extends BaseQueryFn> = {\n  /**\n   * Promise that will resolve with the (transformed) query result.\n   *\n   * If the query fails, this promise will reject with the error.\n   *\n   * This allows you to `await` for the query to finish.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  queryFulfilled: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: BaseQueryMeta<BaseQuery>;\n  }, QueryFulfilledRejectionReason<BaseQuery>>;\n};\ntype QueryFulfilledRejectionReason<BaseQuery extends BaseQueryFn> = {\n  error: BaseQueryError<BaseQuery>;\n  /**\n   * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.\n   */\n  isUnhandledError: false;\n  /**\n   * The `meta` returned by the `baseQuery`\n   */\n  meta: BaseQueryMeta<BaseQuery>;\n} | {\n  error: unknown;\n  meta?: undefined;\n  /**\n   * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn`, `transformResponse` or `transformErrorResponse` throwing an error instead of handling it properly.\n   * There can not be made any assumption about the shape of `error`.\n   */\n  isUnhandledError: true;\n};\nexport type QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used to perform side-effects throughout the lifecycle of the query.\n   *\n   * @example\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * import { messageCreated } from './notificationsSlice\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       async onQueryStarted(id, { dispatch, queryFulfilled }) {\n   *         // `onStart` side-effect\n   *         dispatch(messageCreated('Fetching posts...'))\n   *         try {\n   *           const { data } = await queryFulfilled\n   *           // `onSuccess` side-effect\n   *           dispatch(messageCreated('Posts received!'))\n   *         } catch (err) {\n   *           // `onError` side-effect\n   *           dispatch(messageCreated('Error fetching posts!'))\n   *         }\n   *       }\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, queryLifeCycleApi: QueryLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type QueryLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used for `optimistic updates`.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       providesTags: ['Post'],\n   *     }),\n   *     updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({\n   *       query: ({ id, ...patch }) => ({\n   *         url: `post/${id}`,\n   *         method: 'PATCH',\n   *         body: patch,\n   *       }),\n   *       invalidatesTags: ['Post'],\n   *       async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {\n   *         const patchResult = dispatch(\n   *           api.util.updateQueryData('getPost', id, (draft) => {\n   *             Object.assign(draft, patch)\n   *           })\n   *         )\n   *         try {\n   *           await queryFulfilled\n   *         } catch {\n   *           patchResult.undo()\n   *         }\n   *       },\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, mutationLifeCycleApi: MutationLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport interface QueryLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, QueryLifecyclePromises<ResultType, BaseQuery> {}\nexport type MutationLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & QueryLifecyclePromises<ResultType, BaseQuery>;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleQueryExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific query.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedQueryOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, QueryArgument>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedQueryOnQueryStarted<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async (queryArgument, { dispatch, queryFulfilled }) => {\n *   const result = await queryFulfilled\n *\n *   const { posts } = result.data\n *\n *   // Pre-fill the individual post entries with the results\n *   // from the list endpoint query\n *   dispatch(\n *     baseApiSlice.util.upsertQueryEntries(\n *       posts.map((post) => ({\n *         endpointName: 'getPostById',\n *         arg: post.id,\n *         value: post,\n *       })),\n *     ),\n *   )\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     getPostsByUserId: build.query<PostsApiResponse, QueryArgument>({\n *       query: (userId) => `/posts/user/${userId}`,\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedQueryOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleMutationExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific mutation.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedMutationOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = Pick<Post, 'id'> & Partial<Post>\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, number>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedMutationOnQueryStarted<\n *   Post,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async ({ id, ...patch }, { dispatch, queryFulfilled }) => {\n *   const patchCollection = dispatch(\n *     baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {\n *       Object.assign(draftPost, patch)\n *     }),\n *   )\n *\n *   try {\n *     await queryFulfilled\n *   } catch {\n *     patchCollection.undo()\n *   }\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     addPost: build.mutation<Post, Omit<QueryArgument, 'id'>>({\n *       query: (body) => ({\n *         url: `posts/add`,\n *         method: 'POST',\n *         body,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *\n *     updatePost: build.mutation<Post, QueryArgument>({\n *       query: ({ id, ...patch }) => ({\n *         url: `post/${id}`,\n *         method: 'PATCH',\n *         body: patch,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedMutationOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleMutationExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\nexport const buildQueryLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  context,\n  queryThunk,\n  mutationThunk\n}) => {\n  const isPendingThunk = isPending(queryThunk, mutationThunk);\n  const isRejectedThunk = isRejected(queryThunk, mutationThunk);\n  const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    resolve(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    reject(value: QueryFulfilledRejectionReason<any>): unknown;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isPendingThunk(action)) {\n      const {\n        requestId,\n        arg: {\n          endpointName,\n          originalArgs\n        }\n      } = action.meta;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const onQueryStarted = endpointDefinition?.onQueryStarted;\n      if (onQueryStarted) {\n        const lifecycle = {} as CacheLifecycle;\n        const queryFulfilled = new (Promise as PromiseConstructorWithKnownReason)<{\n          data: unknown;\n          meta: unknown;\n        }, QueryFulfilledRejectionReason<any>>((resolve, reject) => {\n          lifecycle.resolve = resolve;\n          lifecycle.reject = reject;\n        });\n        // prevent uncaught promise rejections from happening.\n        // if the original promise is used in any way, that will create a new promise that will throw again\n        queryFulfilled.catch(() => {});\n        lifecycleMap[requestId] = lifecycle;\n        const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : requestId);\n        const extra = mwApi.dispatch((_, __, extra) => extra);\n        const lifecycleApi = {\n          ...mwApi,\n          getCacheEntry: () => selector(mwApi.getState()),\n          requestId,\n          extra,\n          updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n          queryFulfilled\n        };\n        onQueryStarted(originalArgs, lifecycleApi as any);\n      }\n    } else if (isFullfilledThunk(action)) {\n      const {\n        requestId,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.resolve({\n        data: action.payload,\n        meta: baseQueryMeta\n      });\n      delete lifecycleMap[requestId];\n    } else if (isRejectedThunk(action)) {\n      const {\n        requestId,\n        rejectedWithValue,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.reject({\n        error: action.payload ?? action.error,\n        isUnhandledError: !rejectedWithValue,\n        meta: baseQueryMeta as any\n      });\n      delete lifecycleMap[requestId];\n    }\n  };\n  return handler;\n};","import { QueryStatus } from '../apiState';\nimport type { QueryCacheKey } from '../apiState';\nimport { onFocus, onOnline } from '../setupListeners';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, SubMiddlewareApi } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildWindowEventHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (onFocus.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnFocus');\n    }\n    if (onOnline.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnReconnect');\n    }\n  };\n  function refetchValidQueries(api: SubMiddlewareApi, type: 'refetchOnFocus' | 'refetchOnReconnect') {\n    const state = api.getState()[reducerPath];\n    const queries = state.queries;\n    const subscriptions = internalState.currentSubscriptions;\n    context.batch(() => {\n      for (const queryCacheKey of Object.keys(subscriptions)) {\n        const querySubState = queries[queryCacheKey];\n        const subscriptionSubState = subscriptions[queryCacheKey];\n        if (!subscriptionSubState || !querySubState) continue;\n        const shouldRefetch = Object.values(subscriptionSubState).some(sub => sub[type] === true) || Object.values(subscriptionSubState).every(sub => sub[type] === undefined) && state.config[type];\n        if (shouldRefetch) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            api.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            api.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { Action, Middleware, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport type { QueryStatus, QuerySubState, RootState } from '../apiState';\nimport type { QueryThunkArg } from '../buildThunks';\nimport { createAction, isAction } from '../rtkImports';\nimport { buildBatchedActionsHandler } from './batchActions';\nimport { buildCacheCollectionHandler } from './cacheCollection';\nimport { buildCacheLifecycleHandler } from './cacheLifecycle';\nimport { buildDevCheckHandler } from './devMiddleware';\nimport { buildInvalidationByTagsHandler } from './invalidationByTags';\nimport { buildPollingHandler } from './polling';\nimport { buildQueryLifecycleHandler } from './queryLifecycle';\nimport type { BuildMiddlewareInput, InternalHandlerBuilder, InternalMiddlewareState } from './types';\nimport { buildWindowEventHandler } from './windowEventHandling';\nimport type { ApiEndpointQuery } from '../module';\nexport type { ReferenceCacheCollection } from './cacheCollection';\nexport type { MutationCacheLifecycleApi, QueryCacheLifecycleApi, ReferenceCacheLifecycle } from './cacheLifecycle';\nexport type { MutationLifecycleApi, QueryLifecycleApi, ReferenceQueryLifecycle, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './queryLifecycle';\nexport type { SubscriptionSelectors } from './types';\nexport function buildMiddleware<Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string>(input: BuildMiddlewareInput<Definitions, ReducerPath, TagTypes>) {\n  const {\n    reducerPath,\n    queryThunk,\n    api,\n    context\n  } = input;\n  const {\n    apiUid\n  } = context;\n  const actions = {\n    invalidateTags: createAction<Array<TagTypes | FullTagDescription<TagTypes> | null | undefined>>(`${reducerPath}/invalidateTags`)\n  };\n  const isThisApiSliceAction = (action: Action) => action.type.startsWith(`${reducerPath}/`);\n  const handlerBuilders: InternalHandlerBuilder[] = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];\n  const middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>> = mwApi => {\n    let initialized = false;\n    const internalState: InternalMiddlewareState = {\n      currentSubscriptions: {}\n    };\n    const builderArgs = {\n      ...(input as any as BuildMiddlewareInput<EndpointDefinitions, string, string>),\n      internalState,\n      refetchQuery,\n      isThisApiSliceAction\n    };\n    const handlers = handlerBuilders.map(build => build(builderArgs));\n    const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);\n    const windowEventsHandler = buildWindowEventHandler(builderArgs);\n    return next => {\n      return action => {\n        if (!isAction(action)) {\n          return next(action);\n        }\n        if (!initialized) {\n          initialized = true;\n          // dispatch before any other action\n          mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n        }\n        const mwApiWithNext = {\n          ...mwApi,\n          next\n        };\n        const stateBefore = mwApi.getState();\n        const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);\n        let res: any;\n        if (actionShouldContinue) {\n          res = next(action);\n        } else {\n          res = internalProbeResult;\n        }\n        if (!!mwApi.getState()[reducerPath]) {\n          // Only run these checks if the middleware is registered okay\n\n          // This looks for actions that aren't specific to the API slice\n          windowEventsHandler(action, mwApiWithNext, stateBefore);\n          if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {\n            // Only run these additional checks if the actions are part of the API slice,\n            // or the action has hydration-related data\n            for (const handler of handlers) {\n              handler(action, mwApiWithNext, stateBefore);\n            }\n          }\n        }\n        return res;\n      };\n    };\n  };\n  return {\n    middleware,\n    actions\n  };\n  function refetchQuery(querySubState: Exclude<QuerySubState<any>, {\n    status: QueryStatus.uninitialized;\n  }>) {\n    return (input.api.endpoints[querySubState.endpointName] as ApiEndpointQuery<any, any>).initiate(querySubState.originalArgs as any, {\n      subscribe: false,\n      forceRefetch: true\n    });\n  }\n}","import { buildCreateApi } from '../createApi';\nimport { coreModule } from './module';\nexport const createApi = /* @__PURE__ */buildCreateApi(coreModule());\nexport { QueryStatus } from './apiState';\nexport type { CombinedState, InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationKeys, QueryCacheKey, QueryKeys, QuerySubState, RootState, SubscriptionOptions } from './apiState';\nexport type { InfiniteQueryActionCreatorResult, MutationActionCreatorResult, QueryActionCreatorResult, StartQueryActionCreatorOptions } from './buildInitiate';\nexport type { MutationCacheLifecycleApi, MutationLifecycleApi, QueryCacheLifecycleApi, QueryLifecycleApi, SubscriptionSelectors, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './buildMiddleware/index';\nexport { skipToken } from './buildSelectors';\nexport type { InfiniteQueryResultSelectorResult, MutationResultSelectorResult, QueryResultSelectorResult, SkipToken } from './buildSelectors';\nexport type { SliceActions } from './buildSlice';\nexport type { PatchQueryDataThunk, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nexport { coreModuleName } from './module';\nexport type { ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, CoreModule, InternalActions, PrefetchOptions, ThunkWithReturnValue } from './module';\nexport { setupListeners } from './setupListeners';\nexport { buildCreateApi, coreModule };"],"mappings":"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","names":["QueryStatus","getRequestStatusFlags","status","createAction","createSlice","createSelector","createAsyncThunk","combineReducers","createNextState","isAnyOf","isAllOf","isAction","isPending","isRejected","isFulfilled","isRejectedWithValue","isAsyncThunkAction","prepareAutoBatched","SHOULD_AUTOBATCH","isPlainObject","nanoid","isPlainObject","copyWithStructuralSharing","oldObj","newObj","newKeys","oldKeys","isSameObject","mergeObj","key","countObjectKeys","obj","count","_key","flatten","arr","isAbsoluteUrl","url","isDocumentVisible","isNotNullish","v","isOnline","withoutTrailingSlash","url","withoutLeadingSlash","joinUrls","base","isAbsoluteUrl","delimiter","getOrInsert","map","key","value","defaultFetchFn","args","defaultValidateStatus","response","defaultIsJsonContentType","headers","stripUndefined","obj","isPlainObject","copy","k","v","fetchBaseQuery","baseUrl","prepareHeaders","x","fetchFn","paramsSerializer","isJsonContentType","jsonContentType","jsonReplacer","defaultTimeout","globalResponseHandler","globalValidateStatus","baseFetchOptions","arg","api","extraOptions","getState","extra","endpoint","forced","type","meta","url","params","responseHandler","validateStatus","timeout","rest","abortController","signal","config","isJsonifiable","body","divider","query","joinUrls","request","timedOut","timeoutId","e","responseClone","resultData","responseText","handleResponseError","handleResponse","r","text","HandledError","value","meta","defaultBackoff","attempt","maxRetries","attempts","timeout","resolve","res","fail","error","meta","HandledError","EMPTY_OPTIONS","retryWithBackoff","baseQuery","defaultOptions","args","api","extraOptions","possibleMaxRetries","x","options","_","__","retry","result","e","onFocus","createAction","onFocusLost","onOnline","onOffline","initialized","setupListeners","dispatch","customHandler","defaultHandler","handleFocus","handleFocusLost","handleOnline","handleOffline","handleVisibilityChange","isQueryDefinition","isMutationDefinition","isInfiniteQueryDefinition","isAnyQueryDefinition","calculateProvidedBy","description","result","error","queryArg","meta","assertTagTypes","isFunction","isNotNullish","expandTagDescription","t","isDraftable","produceWithPatches","asSafePromise","promise","fallback","forceQueryFnSymbol","isUpsertQuery","arg","buildInitiate","serializeQueryArgs","queryThunk","infiniteQueryThunk","mutationThunk","api","context","runningQueries","runningMutations","unsubscribeQueryResult","removeMutationResult","updateSubscriptionOptions","buildInitiateQuery","buildInitiateInfiniteQuery","buildInitiateMutation","getRunningQueryThunk","getRunningMutationThunk","getRunningQueriesThunk","getRunningMutationsThunk","endpointName","queryArgs","dispatch","endpointDefinition","queryCacheKey","_endpointName","fixedCacheKeyOrRequestId","isNotNullish","middlewareWarning","buildInitiateAnyQuery","queryAction","subscribe","forceRefetch","subscriptionOptions","forceQueryFn","rest","getState","thunk","commonThunkArgs","isQueryDefinition","direction","initialPageParam","selector","thunkResult","stateAfter","requestId","abort","skippedSynchronously","runningQuery","selectFromState","statePromise","result","options","running","getOrInsert","countObjectKeys","track","fixedCacheKey","unwrap","returnValuePromise","asSafePromise","data","error","reset","ret","SchemaError","NamedSchemaError","issues","value","schemaName","_bqMeta","parseWithSchema","schema","data","bqMeta","result","defaultTransformResponse","baseQueryReturnValue","addShouldAutoBatch","arg","SHOULD_AUTOBATCH","buildThunks","reducerPath","baseQuery","endpointDefinitions","serializeQueryArgs","api","assertTagType","selectors","onSchemaFailure","globalCatchSchemaFailure","globalSkipSchemaValidation","patchQueryData","endpointName","patches","updateProvided","dispatch","getState","endpointDefinition","queryCacheKey","newValue","providedTags","calculateProvidedBy","addToStart","items","item","max","newItems","addToEnd","updateQueryData","updateRecipe","currentState","ret","isDraftable","value","inversePatches","produceWithPatches","upsertQueryData","forceQueryFnSymbol","getTransformCallbackForEndpoint","transformFieldName","executeEndpoint","signal","abort","rejectWithValue","fulfillWithValue","extra","metaSchema","skipSchemaValidation","transformResponse","baseQueryApi","isForcedQuery","forceQueryFn","finalQueryReturnValue","fetchPage","data","param","maxPages","previous","finalQueryArg","pageResponse","executeRequest","addTo","result","extraOptions","argSchema","rawResponseSchema","responseSchema","parseWithSchema","HandledError","transformedResponse","infiniteQueryOptions","blankData","cachedData","existingData","getPreviousPageParam","getNextPageParam","initialPageParam","cachedPageParams","firstPageParam","totalPages","i","error","caughtError","transformErrorResponse","rawErrorResponseSchema","errorResponseSchema","meta","transformedErrorResponse","e","NamedSchemaError","info","catchSchemaFailure","state","requestState","baseFetchOnMountOrArgChange","fulfilledVal","refetchVal","createQueryThunk","createAsyncThunk","isInfiniteQueryDefinition","queryThunkArg","currentArg","previousArg","direction","isUpsertQuery","isQueryDefinition","queryThunk","infiniteQueryThunk","mutationThunk","hasTheForce","options","hasMaxAge","prefetch","force","maxAge","queryAction","latestStateValue","lastFulfilledTs","matchesEndpoint","action","buildMatchThunkActions","thunk","isAllOf","isPending","isFulfilled","isRejected","pages","pageParams","queryArg","lastIndex","calculateProvidedByThunk","type","isRejectedWithValue","isDraft","applyPatches","original","updateQuerySubstateIfExists","state","queryCacheKey","update","substate","getMutationCacheKey","id","updateMutationSubstateIfExists","initialState","buildSlice","reducerPath","queryThunk","mutationThunk","serializeQueryArgs","definitions","apiUid","extractRehydrationInfo","hasRehydrationInfo","assertTagType","config","resetApiState","createAction","writePendingCacheEntry","draft","arg","upserting","meta","endpointDefinition","isInfiniteQueryDefinition","writeFulfilledCacheEntry","payload","merge","fulfilledTimeStamp","baseQueryMeta","requestId","newData","createNextState","draftSubstateData","copyWithStructuralSharing","isDraft","original","querySlice","createSlice","prepareAutoBatched","action","entry","value","endpointName","SHOULD_AUTOBATCH","nanoid","patches","applyPatches","builder","isUpsertQuery","condition","error","queries","key","mutationSlice","cacheKey","startedTimeStamp","mutations","initialInvalidationState","invalidationSlice","providedTags","removeCacheKeyFromTags","type","subscribedQueries","provided","incomingTags","cacheKeys","isAnyOf","isFulfilled","isRejectedWithValue","writeProvidedTagsForQueries","mockActions","queryDescription","existingTags","tag","tagType","tagId","tagSubscriptions","qc","actions","providedByEntries","calculateProvidedByThunk","subscriptionSlice","d","a","internalSubscriptionsSlice","configSlice","isOnline","isDocumentVisible","onOnline","onOffline","onFocus","onFocusLost","combinedReducer","combineReducers","reducer","skipToken","initialSubState","defaultQuerySubState","createNextState","defaultMutationSubState","buildSelectors","serializeQueryArgs","reducerPath","createSelector","selectSkippedQuery","state","selectSkippedMutation","buildQuerySelector","buildInfiniteQuerySelector","buildMutationSelector","selectInvalidatedBy","selectCachedArgsForQuery","selectApiState","selectQueries","selectMutations","selectQueryEntry","selectConfig","withRequestFlags","substate","getRequestStatusFlags","rootState","cacheKey","buildAnyQuerySelector","endpointName","endpointDefinition","combiner","queryArgs","serializedArgs","infiniteQueryOptions","withInfiniteQueryResultFlags","stateWithRequestFlags","isLoading","isError","direction","isForward","isBackward","getHasNextPage","getHasPreviousPage","id","mutationId","getMutationCacheKey","tags","apiState","toInvalidate","tag","isNotNullish","expandTagDescription","provided","invalidateSubscriptions","flatten","invalidate","queryCacheKey","querySubState","queryName","entry","options","data","queryArg","getNextPageParam","getPreviousPageParam","_formatProdErrorMessage","cache","defaultSerializeQueryArgs","endpointName","queryArgs","serialized","cached","stringified","key","value","isPlainObject","acc","weakMapMemoize","buildCreateApi","modules","options","extractRehydrationInfo","action","optionsWithDefaults","queryArgsApi","finalSerializeQueryArgs","defaultSerializeQueryArgs","endpointSQA","initialResult","context","fn","nanoid","api","injectEndpoints","addTagTypes","endpoints","eT","endpointName","partialDefinition","initializedModules","m","inject","evaluatedEndpoints","x","definition","_formatProdErrorMessage","_formatProdErrorMessage","_NEVER","fakeBaseQuery","enablePatches","safeAssign","target","args","produceWithPatches","buildBatchedActionsHandler","api","queryThunk","internalState","subscriptionsPrefix","previousSubscriptions","updateSyncTimer","updateSubscriptionOptions","unsubscribeQueryResult","actuallyMutateSubscriptions","mutableState","action","queryCacheKey","requestId","options","arg","substate","mutated","state","key","condition","getSubscriptions","subscriptionSelectors","subscriptionsForQueryArg","countObjectKeys","mwApi","didMutate","actionShouldContinue","newSubscriptions","patches","produceWithPatches","isSubscriptionSliceAction","isAdditionalSubscriptionAction","isObjectEmpty","obj","k","THIRTY_TWO_BIT_MAX_TIMER_SECONDS","buildCacheCollectionHandler","reducerPath","api","queryThunk","context","internalState","selectQueryEntry","selectConfig","removeQueryResult","unsubscribeQueryResult","cacheEntriesUpserted","canTriggerUnsubscribe","isAnyOf","anySubscriptionsRemainingForKey","queryCacheKey","subscriptions","isObjectEmpty","currentRemovalTimeouts","handler","action","mwApi","state","config","queryCacheKeys","entry","handleUnsubscribeMany","key","timeout","queries","cacheKeys","handleUnsubscribe","endpointName","keepUnusedDataFor","finalKeepUnusedDataFor","currentTimeout","neverResolvedError","buildCacheLifecycleHandler","api","reducerPath","context","queryThunk","mutationThunk","internalState","selectQueryEntry","selectApiState","isQueryThunk","isAsyncThunkAction","isMutationThunk","isFulfilledThunk","isFulfilled","lifecycleMap","resolveLifecycleEntry","cacheKey","data","meta","lifecycle","removeLifecycleEntry","handler","action","mwApi","stateBefore","getCacheKey","checkForNewCacheKey","endpointName","requestId","originalArgs","oldEntry","newEntry","handleNewKey","queryDescription","value","queryCacheKey","getMutationCacheKey","endpointDefinition","onCacheEntryAdded","cacheEntryRemoved","resolve","cacheDataLoaded","selector","isAnyQueryDefinition","extra","_","__","lifecycleApi","updateRecipe","runningHandler","e","buildDevCheckHandler","api","apiUid","reducerPath","action","mwApi","buildInvalidationByTagsHandler","reducerPath","context","endpointDefinitions","mutationThunk","queryThunk","api","assertTagType","refetchQuery","internalState","removeQueryResult","isThunkActionWithTags","isAnyOf","isFulfilled","isRejectedWithValue","isQueryEnd","isRejected","pendingTagInvalidations","handler","action","mwApi","invalidateTags","calculateProvidedByThunk","calculateProvidedBy","hasPendingRequests","state","queries","mutations","cacheRecord","key","newTags","rootState","tags","toInvalidate","valuesArray","queryCacheKey","querySubState","subscriptionSubState","countObjectKeys","buildPollingHandler","reducerPath","queryThunk","api","refetchQuery","internalState","currentPolls","handler","action","mwApi","updatePollingInterval","startNextPoll","clearPolls","getCacheEntrySubscriptions","queryCacheKey","querySubState","subscriptions","state","lowestPollingInterval","skipPollingIfUnfocused","findLowestPollingInterval","currentPoll","nextPollTimestamp","cleanupPollForKey","key","existingPoll","subscribers","buildQueryLifecycleHandler","api","context","queryThunk","mutationThunk","isPendingThunk","isPending","isRejectedThunk","isRejected","isFullfilledThunk","isFulfilled","lifecycleMap","action","mwApi","requestId","endpointName","originalArgs","endpointDefinition","onQueryStarted","lifecycle","queryFulfilled","resolve","reject","selector","isAnyQueryDefinition","extra","_","__","lifecycleApi","updateRecipe","baseQueryMeta","rejectedWithValue","buildWindowEventHandler","reducerPath","context","api","refetchQuery","internalState","removeQueryResult","handler","action","mwApi","onFocus","refetchValidQueries","onOnline","type","state","queries","subscriptions","queryCacheKey","querySubState","subscriptionSubState","sub","countObjectKeys","buildMiddleware","input","reducerPath","queryThunk","api","context","apiUid","actions","createAction","isThisApiSliceAction","action","handlerBuilders","buildDevCheckHandler","buildCacheCollectionHandler","buildInvalidationByTagsHandler","buildPollingHandler","buildCacheLifecycleHandler","buildQueryLifecycleHandler","mwApi","initialized","builderArgs","refetchQuery","handlers","build","batchedActionsHandler","buildBatchedActionsHandler","windowEventsHandler","buildWindowEventHandler","next","isAction","mwApiWithNext","stateBefore","actionShouldContinue","internalProbeResult","res","handler","querySubState","coreModuleName","coreModule","createSelector","api","baseQuery","tagTypes","reducerPath","serializeQueryArgs","keepUnusedDataFor","refetchOnMountOrArgChange","refetchOnFocus","refetchOnReconnect","invalidationBehavior","onSchemaFailure","catchSchemaFailure","skipSchemaValidation","context","enablePatches","assertTagType","tag","onOnline","onOffline","onFocus","onFocusLost","selectors","buildSelectors","selectInvalidatedBy","selectCachedArgsForQuery","buildQuerySelector","buildInfiniteQuerySelector","buildMutationSelector","safeAssign","queryThunk","infiniteQueryThunk","mutationThunk","patchQueryData","updateQueryData","upsertQueryData","prefetch","buildMatchThunkActions","buildThunks","reducer","sliceActions","buildSlice","middleware","middlewareActions","buildMiddleware","buildInitiateQuery","buildInitiateInfiniteQuery","buildInitiateMutation","getRunningMutationThunk","getRunningMutationsThunk","getRunningQueriesThunk","getRunningQueryThunk","buildInitiate","endpointName","definition","anyApi","endpoint","isQueryDefinition","isMutationDefinition","isInfiniteQueryDefinition","createApi","buildCreateApi","coreModule"]}
Index: node_modules/@reduxjs/toolkit/dist/query/rtk-query.legacy-esm.js
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/rtk-query.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/rtk-query.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2948 @@
+var __defProp = Object.defineProperty;
+var __defProps = Object.defineProperties;
+var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
+var __getOwnPropSymbols = Object.getOwnPropertySymbols;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __propIsEnum = Object.prototype.propertyIsEnumerable;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __spreadValues = (a, b) => {
+  for (var prop in b || (b = {}))
+    if (__hasOwnProp.call(b, prop))
+      __defNormalProp(a, prop, b[prop]);
+  if (__getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(b)) {
+      if (__propIsEnum.call(b, prop))
+        __defNormalProp(a, prop, b[prop]);
+    }
+  return a;
+};
+var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
+var __restKey = (key) => typeof key === "symbol" ? key : key + "";
+var __objRest = (source, exclude) => {
+  var target = {};
+  for (var prop in source)
+    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
+      target[prop] = source[prop];
+  if (source != null && __getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(source)) {
+      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
+        target[prop] = source[prop];
+    }
+  return target;
+};
+
+// src/query/core/apiState.ts
+var QueryStatus = /* @__PURE__ */ ((QueryStatus2) => {
+  QueryStatus2["uninitialized"] = "uninitialized";
+  QueryStatus2["pending"] = "pending";
+  QueryStatus2["fulfilled"] = "fulfilled";
+  QueryStatus2["rejected"] = "rejected";
+  return QueryStatus2;
+})(QueryStatus || {});
+function getRequestStatusFlags(status) {
+  return {
+    status,
+    isUninitialized: status === "uninitialized" /* uninitialized */,
+    isLoading: status === "pending" /* pending */,
+    isSuccess: status === "fulfilled" /* fulfilled */,
+    isError: status === "rejected" /* rejected */
+  };
+}
+
+// src/query/core/rtkImports.ts
+import { createAction, createSlice, createSelector, createAsyncThunk, combineReducers, createNextState, isAnyOf, isAllOf, isAction, isPending, isRejected, isFulfilled, isRejectedWithValue, isAsyncThunkAction, prepareAutoBatched, SHOULD_AUTOBATCH, isPlainObject, nanoid } from "@reduxjs/toolkit";
+
+// src/query/utils/copyWithStructuralSharing.ts
+var isPlainObject2 = isPlainObject;
+function copyWithStructuralSharing(oldObj, newObj) {
+  if (oldObj === newObj || !(isPlainObject2(oldObj) && isPlainObject2(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {
+    return newObj;
+  }
+  const newKeys = Object.keys(newObj);
+  const oldKeys = Object.keys(oldObj);
+  let isSameObject = newKeys.length === oldKeys.length;
+  const mergeObj = Array.isArray(newObj) ? [] : {};
+  for (const key of newKeys) {
+    mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);
+    if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];
+  }
+  return isSameObject ? oldObj : mergeObj;
+}
+
+// src/query/utils/countObjectKeys.ts
+function countObjectKeys(obj) {
+  let count = 0;
+  for (const _key in obj) {
+    count++;
+  }
+  return count;
+}
+
+// src/query/utils/flatten.ts
+var flatten = (arr) => [].concat(...arr);
+
+// src/query/utils/isAbsoluteUrl.ts
+function isAbsoluteUrl(url) {
+  return new RegExp(`(^|:)//`).test(url);
+}
+
+// src/query/utils/isDocumentVisible.ts
+function isDocumentVisible() {
+  if (typeof document === "undefined") {
+    return true;
+  }
+  return document.visibilityState !== "hidden";
+}
+
+// src/query/utils/isNotNullish.ts
+function isNotNullish(v) {
+  return v != null;
+}
+
+// src/query/utils/isOnline.ts
+function isOnline() {
+  return typeof navigator === "undefined" ? true : navigator.onLine === void 0 ? true : navigator.onLine;
+}
+
+// src/query/utils/joinUrls.ts
+var withoutTrailingSlash = (url) => url.replace(/\/$/, "");
+var withoutLeadingSlash = (url) => url.replace(/^\//, "");
+function joinUrls(base, url) {
+  if (!base) {
+    return url;
+  }
+  if (!url) {
+    return base;
+  }
+  if (isAbsoluteUrl(url)) {
+    return url;
+  }
+  const delimiter = base.endsWith("/") || !url.startsWith("?") ? "/" : "";
+  base = withoutTrailingSlash(base);
+  url = withoutLeadingSlash(url);
+  return `${base}${delimiter}${url}`;
+}
+
+// src/query/utils/getOrInsert.ts
+function getOrInsert(map, key, value) {
+  if (map.has(key)) return map.get(key);
+  return map.set(key, value).get(key);
+}
+
+// src/query/fetchBaseQuery.ts
+var defaultFetchFn = (...args) => fetch(...args);
+var defaultValidateStatus = (response) => response.status >= 200 && response.status <= 299;
+var defaultIsJsonContentType = (headers) => (
+  /*applicat*/
+  /ion\/(vnd\.api\+)?json/.test(headers.get("content-type") || "")
+);
+function stripUndefined(obj) {
+  if (!isPlainObject(obj)) {
+    return obj;
+  }
+  const copy = __spreadValues({}, obj);
+  for (const [k, v] of Object.entries(copy)) {
+    if (v === void 0) delete copy[k];
+  }
+  return copy;
+}
+function fetchBaseQuery(_a = {}) {
+  var _b = _a, {
+    baseUrl,
+    prepareHeaders = (x) => x,
+    fetchFn = defaultFetchFn,
+    paramsSerializer,
+    isJsonContentType = defaultIsJsonContentType,
+    jsonContentType = "application/json",
+    jsonReplacer,
+    timeout: defaultTimeout,
+    responseHandler: globalResponseHandler,
+    validateStatus: globalValidateStatus
+  } = _b, baseFetchOptions = __objRest(_b, [
+    "baseUrl",
+    "prepareHeaders",
+    "fetchFn",
+    "paramsSerializer",
+    "isJsonContentType",
+    "jsonContentType",
+    "jsonReplacer",
+    "timeout",
+    "responseHandler",
+    "validateStatus"
+  ]);
+  if (typeof fetch === "undefined" && fetchFn === defaultFetchFn) {
+    console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.");
+  }
+  return async (arg, api, extraOptions) => {
+    const {
+      getState,
+      extra,
+      endpoint,
+      forced,
+      type
+    } = api;
+    let meta;
+    let _a2 = typeof arg == "string" ? {
+      url: arg
+    } : arg, {
+      url,
+      headers = new Headers(baseFetchOptions.headers),
+      params = void 0,
+      responseHandler = globalResponseHandler != null ? globalResponseHandler : "json",
+      validateStatus = globalValidateStatus != null ? globalValidateStatus : defaultValidateStatus,
+      timeout = defaultTimeout
+    } = _a2, rest = __objRest(_a2, [
+      "url",
+      "headers",
+      "params",
+      "responseHandler",
+      "validateStatus",
+      "timeout"
+    ]);
+    let abortController, signal = api.signal;
+    if (timeout) {
+      abortController = new AbortController();
+      api.signal.addEventListener("abort", abortController.abort);
+      signal = abortController.signal;
+    }
+    let config = __spreadValues(__spreadProps(__spreadValues({}, baseFetchOptions), {
+      signal
+    }), rest);
+    headers = new Headers(stripUndefined(headers));
+    config.headers = await prepareHeaders(headers, {
+      getState,
+      arg,
+      extra,
+      endpoint,
+      forced,
+      type,
+      extraOptions
+    }) || headers;
+    const isJsonifiable = (body) => typeof body === "object" && (isPlainObject(body) || Array.isArray(body) || typeof body.toJSON === "function");
+    if (!config.headers.has("content-type") && isJsonifiable(config.body)) {
+      config.headers.set("content-type", jsonContentType);
+    }
+    if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {
+      config.body = JSON.stringify(config.body, jsonReplacer);
+    }
+    if (params) {
+      const divider = ~url.indexOf("?") ? "&" : "?";
+      const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));
+      url += divider + query;
+    }
+    url = joinUrls(baseUrl, url);
+    const request = new Request(url, config);
+    const requestClone = new Request(url, config);
+    meta = {
+      request: requestClone
+    };
+    let response, timedOut = false, timeoutId = abortController && setTimeout(() => {
+      timedOut = true;
+      abortController.abort();
+    }, timeout);
+    try {
+      response = await fetchFn(request);
+    } catch (e) {
+      return {
+        error: {
+          status: timedOut ? "TIMEOUT_ERROR" : "FETCH_ERROR",
+          error: String(e)
+        },
+        meta
+      };
+    } finally {
+      if (timeoutId) clearTimeout(timeoutId);
+      abortController == null ? void 0 : abortController.signal.removeEventListener("abort", abortController.abort);
+    }
+    const responseClone = response.clone();
+    meta.response = responseClone;
+    let resultData;
+    let responseText = "";
+    try {
+      let handleResponseError;
+      await Promise.all([
+        handleResponse(response, responseHandler).then((r) => resultData = r, (e) => handleResponseError = e),
+        // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182
+        // we *have* to "use up" both streams at the same time or they will stop running in node-fetch scenarios
+        responseClone.text().then((r) => responseText = r, () => {
+        })
+      ]);
+      if (handleResponseError) throw handleResponseError;
+    } catch (e) {
+      return {
+        error: {
+          status: "PARSING_ERROR",
+          originalStatus: response.status,
+          data: responseText,
+          error: String(e)
+        },
+        meta
+      };
+    }
+    return validateStatus(response, resultData) ? {
+      data: resultData,
+      meta
+    } : {
+      error: {
+        status: response.status,
+        data: resultData
+      },
+      meta
+    };
+  };
+  async function handleResponse(response, responseHandler) {
+    if (typeof responseHandler === "function") {
+      return responseHandler(response);
+    }
+    if (responseHandler === "content-type") {
+      responseHandler = isJsonContentType(response.headers) ? "json" : "text";
+    }
+    if (responseHandler === "json") {
+      const text = await response.text();
+      return text.length ? JSON.parse(text) : null;
+    }
+    return response.text();
+  }
+}
+
+// src/query/HandledError.ts
+var HandledError = class {
+  constructor(value, meta = void 0) {
+    this.value = value;
+    this.meta = meta;
+  }
+};
+
+// src/query/retry.ts
+async function defaultBackoff(attempt = 0, maxRetries = 5) {
+  const attempts = Math.min(attempt, maxRetries);
+  const timeout = ~~((Math.random() + 0.4) * (300 << attempts));
+  await new Promise((resolve) => setTimeout((res) => resolve(res), timeout));
+}
+function fail(error, meta) {
+  throw Object.assign(new HandledError({
+    error,
+    meta
+  }), {
+    throwImmediately: true
+  });
+}
+var EMPTY_OPTIONS = {};
+var retryWithBackoff = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {
+  const possibleMaxRetries = [5, (defaultOptions || EMPTY_OPTIONS).maxRetries, (extraOptions || EMPTY_OPTIONS).maxRetries].filter((x) => x !== void 0);
+  const [maxRetries] = possibleMaxRetries.slice(-1);
+  const defaultRetryCondition = (_, __, {
+    attempt
+  }) => attempt <= maxRetries;
+  const options = __spreadValues(__spreadValues({
+    maxRetries,
+    backoff: defaultBackoff,
+    retryCondition: defaultRetryCondition
+  }, defaultOptions), extraOptions);
+  let retry2 = 0;
+  while (true) {
+    try {
+      const result = await baseQuery(args, api, extraOptions);
+      if (result.error) {
+        throw new HandledError(result);
+      }
+      return result;
+    } catch (e) {
+      retry2++;
+      if (e.throwImmediately) {
+        if (e instanceof HandledError) {
+          return e.value;
+        }
+        throw e;
+      }
+      if (e instanceof HandledError && !options.retryCondition(e.value.error, args, {
+        attempt: retry2,
+        baseQueryApi: api,
+        extraOptions
+      })) {
+        return e.value;
+      }
+      await options.backoff(retry2, options.maxRetries);
+    }
+  }
+};
+var retry = /* @__PURE__ */ Object.assign(retryWithBackoff, {
+  fail
+});
+
+// src/query/core/setupListeners.ts
+var onFocus = /* @__PURE__ */ createAction("__rtkq/focused");
+var onFocusLost = /* @__PURE__ */ createAction("__rtkq/unfocused");
+var onOnline = /* @__PURE__ */ createAction("__rtkq/online");
+var onOffline = /* @__PURE__ */ createAction("__rtkq/offline");
+var initialized = false;
+function setupListeners(dispatch, customHandler) {
+  function defaultHandler() {
+    const handleFocus = () => dispatch(onFocus());
+    const handleFocusLost = () => dispatch(onFocusLost());
+    const handleOnline = () => dispatch(onOnline());
+    const handleOffline = () => dispatch(onOffline());
+    const handleVisibilityChange = () => {
+      if (window.document.visibilityState === "visible") {
+        handleFocus();
+      } else {
+        handleFocusLost();
+      }
+    };
+    if (!initialized) {
+      if (typeof window !== "undefined" && window.addEventListener) {
+        window.addEventListener("visibilitychange", handleVisibilityChange, false);
+        window.addEventListener("focus", handleFocus, false);
+        window.addEventListener("online", handleOnline, false);
+        window.addEventListener("offline", handleOffline, false);
+        initialized = true;
+      }
+    }
+    const unsubscribe = () => {
+      window.removeEventListener("focus", handleFocus);
+      window.removeEventListener("visibilitychange", handleVisibilityChange);
+      window.removeEventListener("online", handleOnline);
+      window.removeEventListener("offline", handleOffline);
+      initialized = false;
+    };
+    return unsubscribe;
+  }
+  return customHandler ? customHandler(dispatch, {
+    onFocus,
+    onFocusLost,
+    onOffline,
+    onOnline
+  }) : defaultHandler();
+}
+
+// src/query/endpointDefinitions.ts
+function isQueryDefinition(e) {
+  return e.type === "query" /* query */;
+}
+function isMutationDefinition(e) {
+  return e.type === "mutation" /* mutation */;
+}
+function isInfiniteQueryDefinition(e) {
+  return e.type === "infinitequery" /* infinitequery */;
+}
+function isAnyQueryDefinition(e) {
+  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);
+}
+function calculateProvidedBy(description, result, error, queryArg, meta, assertTagTypes) {
+  if (isFunction(description)) {
+    return description(result, error, queryArg, meta).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);
+  }
+  if (Array.isArray(description)) {
+    return description.map(expandTagDescription).map(assertTagTypes);
+  }
+  return [];
+}
+function isFunction(t) {
+  return typeof t === "function";
+}
+function expandTagDescription(description) {
+  return typeof description === "string" ? {
+    type: description
+  } : description;
+}
+
+// src/query/core/buildThunks.ts
+import { isDraftable, produceWithPatches } from "immer";
+
+// src/query/core/buildInitiate.ts
+import { formatProdErrorMessage as _formatProdErrorMessage } from "@reduxjs/toolkit";
+
+// src/tsHelpers.ts
+function asSafePromise(promise, fallback) {
+  return promise.catch(fallback);
+}
+
+// src/query/core/buildInitiate.ts
+var forceQueryFnSymbol = Symbol("forceQueryFn");
+var isUpsertQuery = (arg) => typeof arg[forceQueryFnSymbol] === "function";
+function buildInitiate({
+  serializeQueryArgs,
+  queryThunk,
+  infiniteQueryThunk,
+  mutationThunk,
+  api,
+  context
+}) {
+  const runningQueries = /* @__PURE__ */ new Map();
+  const runningMutations = /* @__PURE__ */ new Map();
+  const {
+    unsubscribeQueryResult,
+    removeMutationResult,
+    updateSubscriptionOptions
+  } = api.internalActions;
+  return {
+    buildInitiateQuery,
+    buildInitiateInfiniteQuery,
+    buildInitiateMutation,
+    getRunningQueryThunk,
+    getRunningMutationThunk,
+    getRunningQueriesThunk,
+    getRunningMutationsThunk
+  };
+  function getRunningQueryThunk(endpointName, queryArgs) {
+    return (dispatch) => {
+      var _a;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      const queryCacheKey = serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      });
+      return (_a = runningQueries.get(dispatch)) == null ? void 0 : _a[queryCacheKey];
+    };
+  }
+  function getRunningMutationThunk(_endpointName, fixedCacheKeyOrRequestId) {
+    return (dispatch) => {
+      var _a;
+      return (_a = runningMutations.get(dispatch)) == null ? void 0 : _a[fixedCacheKeyOrRequestId];
+    };
+  }
+  function getRunningQueriesThunk() {
+    return (dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);
+  }
+  function getRunningMutationsThunk() {
+    return (dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);
+  }
+  function middlewareWarning(dispatch) {
+    if (process.env.NODE_ENV !== "production") {
+      if (middlewareWarning.triggered) return;
+      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());
+      middlewareWarning.triggered = true;
+      if (typeof returnedValue !== "object" || typeof (returnedValue == null ? void 0 : returnedValue.type) === "string") {
+        throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage(34) : `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store.
+You must add the middleware for RTK-Query to function correctly!`);
+      }
+    }
+  }
+  function buildInitiateAnyQuery(endpointName, endpointDefinition) {
+    const queryAction = (arg, _a = {}) => {
+      var _b = _a, {
+        subscribe = true,
+        forceRefetch,
+        subscriptionOptions,
+        [forceQueryFnSymbol]: forceQueryFn
+      } = _b, rest = __objRest(_b, [
+        "subscribe",
+        "forceRefetch",
+        "subscriptionOptions",
+        __restKey(forceQueryFnSymbol)
+      ]);
+      return (dispatch, getState) => {
+        var _a2;
+        const queryCacheKey = serializeQueryArgs({
+          queryArgs: arg,
+          endpointDefinition,
+          endpointName
+        });
+        let thunk;
+        const commonThunkArgs = __spreadProps(__spreadValues({}, rest), {
+          type: "query",
+          subscribe,
+          forceRefetch,
+          subscriptionOptions,
+          endpointName,
+          originalArgs: arg,
+          queryCacheKey,
+          [forceQueryFnSymbol]: forceQueryFn
+        });
+        if (isQueryDefinition(endpointDefinition)) {
+          thunk = queryThunk(commonThunkArgs);
+        } else {
+          const {
+            direction,
+            initialPageParam
+          } = rest;
+          thunk = infiniteQueryThunk(__spreadProps(__spreadValues({}, commonThunkArgs), {
+            // Supply these even if undefined. This helps with a field existence
+            // check over in `buildSlice.ts`
+            direction,
+            initialPageParam
+          }));
+        }
+        const selector = api.endpoints[endpointName].select(arg);
+        const thunkResult = dispatch(thunk);
+        const stateAfter = selector(getState());
+        middlewareWarning(dispatch);
+        const {
+          requestId,
+          abort
+        } = thunkResult;
+        const skippedSynchronously = stateAfter.requestId !== requestId;
+        const runningQuery = (_a2 = runningQueries.get(dispatch)) == null ? void 0 : _a2[queryCacheKey];
+        const selectFromState = () => selector(getState());
+        const statePromise = Object.assign(forceQueryFn ? (
+          // a query has been forced (upsertQueryData)
+          // -> we want to resolve it once data has been written with the data that will be written
+          thunkResult.then(selectFromState)
+        ) : skippedSynchronously && !runningQuery ? (
+          // a query has been skipped due to a condition and we do not have any currently running query
+          // -> we want to resolve it immediately with the current data
+          Promise.resolve(stateAfter)
+        ) : (
+          // query just started or one is already in flight
+          // -> wait for the running query, then resolve with data from after that
+          Promise.all([runningQuery, thunkResult]).then(selectFromState)
+        ), {
+          arg,
+          requestId,
+          subscriptionOptions,
+          queryCacheKey,
+          abort,
+          async unwrap() {
+            const result = await statePromise;
+            if (result.isError) {
+              throw result.error;
+            }
+            return result.data;
+          },
+          refetch: () => dispatch(queryAction(arg, {
+            subscribe: false,
+            forceRefetch: true
+          })),
+          unsubscribe() {
+            if (subscribe) dispatch(unsubscribeQueryResult({
+              queryCacheKey,
+              requestId
+            }));
+          },
+          updateSubscriptionOptions(options) {
+            statePromise.subscriptionOptions = options;
+            dispatch(updateSubscriptionOptions({
+              endpointName,
+              requestId,
+              queryCacheKey,
+              options
+            }));
+          }
+        });
+        if (!runningQuery && !skippedSynchronously && !forceQueryFn) {
+          const running = getOrInsert(runningQueries, dispatch, {});
+          running[queryCacheKey] = statePromise;
+          statePromise.then(() => {
+            delete running[queryCacheKey];
+            if (!countObjectKeys(running)) {
+              runningQueries.delete(dispatch);
+            }
+          });
+        }
+        return statePromise;
+      };
+    };
+    return queryAction;
+  }
+  function buildInitiateQuery(endpointName, endpointDefinition) {
+    const queryAction = buildInitiateAnyQuery(endpointName, endpointDefinition);
+    return queryAction;
+  }
+  function buildInitiateInfiniteQuery(endpointName, endpointDefinition) {
+    const infiniteQueryAction = buildInitiateAnyQuery(endpointName, endpointDefinition);
+    return infiniteQueryAction;
+  }
+  function buildInitiateMutation(endpointName) {
+    return (arg, {
+      track = true,
+      fixedCacheKey
+    } = {}) => (dispatch, getState) => {
+      const thunk = mutationThunk({
+        type: "mutation",
+        endpointName,
+        originalArgs: arg,
+        track,
+        fixedCacheKey
+      });
+      const thunkResult = dispatch(thunk);
+      middlewareWarning(dispatch);
+      const {
+        requestId,
+        abort,
+        unwrap
+      } = thunkResult;
+      const returnValuePromise = asSafePromise(thunkResult.unwrap().then((data) => ({
+        data
+      })), (error) => ({
+        error
+      }));
+      const reset = () => {
+        dispatch(removeMutationResult({
+          requestId,
+          fixedCacheKey
+        }));
+      };
+      const ret = Object.assign(returnValuePromise, {
+        arg: thunkResult.arg,
+        requestId,
+        abort,
+        unwrap,
+        reset
+      });
+      const running = runningMutations.get(dispatch) || {};
+      runningMutations.set(dispatch, running);
+      running[requestId] = ret;
+      ret.then(() => {
+        delete running[requestId];
+        if (!countObjectKeys(running)) {
+          runningMutations.delete(dispatch);
+        }
+      });
+      if (fixedCacheKey) {
+        running[fixedCacheKey] = ret;
+        ret.then(() => {
+          if (running[fixedCacheKey] === ret) {
+            delete running[fixedCacheKey];
+            if (!countObjectKeys(running)) {
+              runningMutations.delete(dispatch);
+            }
+          }
+        });
+      }
+      return ret;
+    };
+  }
+}
+
+// src/query/standardSchema.ts
+import { SchemaError } from "@standard-schema/utils";
+var NamedSchemaError = class extends SchemaError {
+  constructor(issues, value, schemaName, _bqMeta) {
+    super(issues);
+    this.value = value;
+    this.schemaName = schemaName;
+    this._bqMeta = _bqMeta;
+  }
+};
+async function parseWithSchema(schema, data, schemaName, bqMeta) {
+  const result = await schema["~standard"].validate(data);
+  if (result.issues) {
+    throw new NamedSchemaError(result.issues, data, schemaName, bqMeta);
+  }
+  return result.value;
+}
+
+// src/query/core/buildThunks.ts
+function defaultTransformResponse(baseQueryReturnValue) {
+  return baseQueryReturnValue;
+}
+var addShouldAutoBatch = (arg = {}) => {
+  return __spreadProps(__spreadValues({}, arg), {
+    [SHOULD_AUTOBATCH]: true
+  });
+};
+function buildThunks({
+  reducerPath,
+  baseQuery,
+  context: {
+    endpointDefinitions
+  },
+  serializeQueryArgs,
+  api,
+  assertTagType,
+  selectors,
+  onSchemaFailure,
+  catchSchemaFailure: globalCatchSchemaFailure,
+  skipSchemaValidation: globalSkipSchemaValidation
+}) {
+  const patchQueryData = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {
+    const endpointDefinition = endpointDefinitions[endpointName];
+    const queryCacheKey = serializeQueryArgs({
+      queryArgs: arg,
+      endpointDefinition,
+      endpointName
+    });
+    dispatch(api.internalActions.queryResultPatched({
+      queryCacheKey,
+      patches
+    }));
+    if (!updateProvided) {
+      return;
+    }
+    const newValue = api.endpoints[endpointName].select(arg)(
+      // Work around TS 4.1 mismatch
+      getState()
+    );
+    const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, void 0, arg, {}, assertTagType);
+    dispatch(api.internalActions.updateProvidedBy([{
+      queryCacheKey,
+      providedTags
+    }]));
+  };
+  function addToStart(items, item, max = 0) {
+    const newItems = [item, ...items];
+    return max && newItems.length > max ? newItems.slice(0, -1) : newItems;
+  }
+  function addToEnd(items, item, max = 0) {
+    const newItems = [...items, item];
+    return max && newItems.length > max ? newItems.slice(1) : newItems;
+  }
+  const updateQueryData = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {
+    const endpointDefinition = api.endpoints[endpointName];
+    const currentState = endpointDefinition.select(arg)(
+      // Work around TS 4.1 mismatch
+      getState()
+    );
+    const ret = {
+      patches: [],
+      inversePatches: [],
+      undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))
+    };
+    if (currentState.status === "uninitialized" /* uninitialized */) {
+      return ret;
+    }
+    let newValue;
+    if ("data" in currentState) {
+      if (isDraftable(currentState.data)) {
+        const [value, patches, inversePatches] = produceWithPatches(currentState.data, updateRecipe);
+        ret.patches.push(...patches);
+        ret.inversePatches.push(...inversePatches);
+        newValue = value;
+      } else {
+        newValue = updateRecipe(currentState.data);
+        ret.patches.push({
+          op: "replace",
+          path: [],
+          value: newValue
+        });
+        ret.inversePatches.push({
+          op: "replace",
+          path: [],
+          value: currentState.data
+        });
+      }
+    }
+    if (ret.patches.length === 0) {
+      return ret;
+    }
+    dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));
+    return ret;
+  };
+  const upsertQueryData = (endpointName, arg, value) => (dispatch) => {
+    const res = dispatch(api.endpoints[endpointName].initiate(arg, {
+      subscribe: false,
+      forceRefetch: true,
+      [forceQueryFnSymbol]: () => ({
+        data: value
+      })
+    }));
+    return res;
+  };
+  const getTransformCallbackForEndpoint = (endpointDefinition, transformFieldName) => {
+    return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName] : defaultTransformResponse;
+  };
+  const executeEndpoint = async (arg, {
+    signal,
+    abort,
+    rejectWithValue,
+    fulfillWithValue,
+    dispatch,
+    getState,
+    extra
+  }) => {
+    var _a, _b, _c, _d;
+    const endpointDefinition = endpointDefinitions[arg.endpointName];
+    const {
+      metaSchema,
+      skipSchemaValidation = globalSkipSchemaValidation
+    } = endpointDefinition;
+    try {
+      let transformResponse = getTransformCallbackForEndpoint(endpointDefinition, "transformResponse");
+      const baseQueryApi = {
+        signal,
+        abort,
+        dispatch,
+        getState,
+        extra,
+        endpoint: arg.endpointName,
+        type: arg.type,
+        forced: arg.type === "query" ? isForcedQuery(arg, getState()) : void 0,
+        queryCacheKey: arg.type === "query" ? arg.queryCacheKey : void 0
+      };
+      const forceQueryFn = arg.type === "query" ? arg[forceQueryFnSymbol] : void 0;
+      let finalQueryReturnValue;
+      const fetchPage = async (data, param, maxPages, previous) => {
+        if (param == null && data.pages.length) {
+          return Promise.resolve({
+            data
+          });
+        }
+        const finalQueryArg = {
+          queryArg: arg.originalArgs,
+          pageParam: param
+        };
+        const pageResponse = await executeRequest(finalQueryArg);
+        const addTo = previous ? addToStart : addToEnd;
+        return {
+          data: {
+            pages: addTo(data.pages, pageResponse.data, maxPages),
+            pageParams: addTo(data.pageParams, param, maxPages)
+          },
+          meta: pageResponse.meta
+        };
+      };
+      async function executeRequest(finalQueryArg) {
+        let result;
+        const {
+          extraOptions,
+          argSchema,
+          rawResponseSchema,
+          responseSchema
+        } = endpointDefinition;
+        if (argSchema && !skipSchemaValidation) {
+          finalQueryArg = await parseWithSchema(
+            argSchema,
+            finalQueryArg,
+            "argSchema",
+            {}
+            // we don't have a meta yet, so we can't pass it
+          );
+        }
+        if (forceQueryFn) {
+          result = forceQueryFn();
+        } else if (endpointDefinition.query) {
+          result = await baseQuery(endpointDefinition.query(finalQueryArg), baseQueryApi, extraOptions);
+        } else {
+          result = await endpointDefinition.queryFn(finalQueryArg, baseQueryApi, extraOptions, (arg2) => baseQuery(arg2, baseQueryApi, extraOptions));
+        }
+        if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+          const what = endpointDefinition.query ? "`baseQuery`" : "`queryFn`";
+          let err;
+          if (!result) {
+            err = `${what} did not return anything.`;
+          } else if (typeof result !== "object") {
+            err = `${what} did not return an object.`;
+          } else if (result.error && result.data) {
+            err = `${what} returned an object containing both \`error\` and \`result\`.`;
+          } else if (result.error === void 0 && result.data === void 0) {
+            err = `${what} returned an object containing neither a valid \`error\` and \`result\`. At least one of them should not be \`undefined\``;
+          } else {
+            for (const key of Object.keys(result)) {
+              if (key !== "error" && key !== "data" && key !== "meta") {
+                err = `The object returned by ${what} has the unknown property ${key}.`;
+                break;
+              }
+            }
+          }
+          if (err) {
+            console.error(`Error encountered handling the endpoint ${arg.endpointName}.
+                  ${err}
+                  It needs to return an object with either the shape \`{ data: <value> }\` or \`{ error: <value> }\` that may contain an optional \`meta\` property.
+                  Object returned was:`, result);
+          }
+        }
+        if (result.error) throw new HandledError(result.error, result.meta);
+        let {
+          data
+        } = result;
+        if (rawResponseSchema && !skipSchemaValidation) {
+          data = await parseWithSchema(rawResponseSchema, result.data, "rawResponseSchema", result.meta);
+        }
+        let transformedResponse = await transformResponse(data, result.meta, finalQueryArg);
+        if (responseSchema && !skipSchemaValidation) {
+          transformedResponse = await parseWithSchema(responseSchema, transformedResponse, "responseSchema", result.meta);
+        }
+        return __spreadProps(__spreadValues({}, result), {
+          data: transformedResponse
+        });
+      }
+      if (arg.type === "query" && "infiniteQueryOptions" in endpointDefinition) {
+        const {
+          infiniteQueryOptions
+        } = endpointDefinition;
+        const {
+          maxPages = Infinity
+        } = infiniteQueryOptions;
+        let result;
+        const blankData = {
+          pages: [],
+          pageParams: []
+        };
+        const cachedData = (_a = selectors.selectQueryEntry(getState(), arg.queryCacheKey)) == null ? void 0 : _a.data;
+        const isForcedQueryNeedingRefetch = (
+          // arg.forceRefetch
+          isForcedQuery(arg, getState()) && !arg.direction
+        );
+        const existingData = isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData;
+        if ("direction" in arg && arg.direction && existingData.pages.length) {
+          const previous = arg.direction === "backward";
+          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;
+          const param = pageParamFn(infiniteQueryOptions, existingData, arg.originalArgs);
+          result = await fetchPage(existingData, param, maxPages, previous);
+        } else {
+          const {
+            initialPageParam = infiniteQueryOptions.initialPageParam
+          } = arg;
+          const cachedPageParams = (_b = cachedData == null ? void 0 : cachedData.pageParams) != null ? _b : [];
+          const firstPageParam = (_c = cachedPageParams[0]) != null ? _c : initialPageParam;
+          const totalPages = cachedPageParams.length;
+          result = await fetchPage(existingData, firstPageParam, maxPages);
+          if (forceQueryFn) {
+            result = {
+              data: result.data.pages[0]
+            };
+          }
+          for (let i = 1; i < totalPages; i++) {
+            const param = getNextPageParam(infiniteQueryOptions, result.data, arg.originalArgs);
+            result = await fetchPage(result.data, param, maxPages);
+          }
+        }
+        finalQueryReturnValue = result;
+      } else {
+        finalQueryReturnValue = await executeRequest(arg.originalArgs);
+      }
+      if (metaSchema && !skipSchemaValidation && finalQueryReturnValue.meta) {
+        finalQueryReturnValue.meta = await parseWithSchema(metaSchema, finalQueryReturnValue.meta, "metaSchema", finalQueryReturnValue.meta);
+      }
+      return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({
+        fulfilledTimeStamp: Date.now(),
+        baseQueryMeta: finalQueryReturnValue.meta
+      }));
+    } catch (error) {
+      let caughtError = error;
+      if (caughtError instanceof HandledError) {
+        let transformErrorResponse = getTransformCallbackForEndpoint(endpointDefinition, "transformErrorResponse");
+        const {
+          rawErrorResponseSchema,
+          errorResponseSchema
+        } = endpointDefinition;
+        let {
+          value,
+          meta
+        } = caughtError;
+        try {
+          if (rawErrorResponseSchema && !skipSchemaValidation) {
+            value = await parseWithSchema(rawErrorResponseSchema, value, "rawErrorResponseSchema", meta);
+          }
+          if (metaSchema && !skipSchemaValidation) {
+            meta = await parseWithSchema(metaSchema, meta, "metaSchema", meta);
+          }
+          let transformedErrorResponse = await transformErrorResponse(value, meta, arg.originalArgs);
+          if (errorResponseSchema && !skipSchemaValidation) {
+            transformedErrorResponse = await parseWithSchema(errorResponseSchema, transformedErrorResponse, "errorResponseSchema", meta);
+          }
+          return rejectWithValue(transformedErrorResponse, addShouldAutoBatch({
+            baseQueryMeta: meta
+          }));
+        } catch (e) {
+          caughtError = e;
+        }
+      }
+      try {
+        if (caughtError instanceof NamedSchemaError) {
+          const info = {
+            endpoint: arg.endpointName,
+            arg: arg.originalArgs,
+            type: arg.type,
+            queryCacheKey: arg.type === "query" ? arg.queryCacheKey : void 0
+          };
+          (_d = endpointDefinition.onSchemaFailure) == null ? void 0 : _d.call(endpointDefinition, caughtError, info);
+          onSchemaFailure == null ? void 0 : onSchemaFailure(caughtError, info);
+          const {
+            catchSchemaFailure = globalCatchSchemaFailure
+          } = endpointDefinition;
+          if (catchSchemaFailure) {
+            return rejectWithValue(catchSchemaFailure(caughtError, info), addShouldAutoBatch({
+              baseQueryMeta: caughtError._bqMeta
+            }));
+          }
+        }
+      } catch (e) {
+        caughtError = e;
+      }
+      if (typeof process !== "undefined" && process.env.NODE_ENV !== "production") {
+        console.error(`An unhandled error occurred processing a request for the endpoint "${arg.endpointName}".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`, caughtError);
+      } else {
+        console.error(caughtError);
+      }
+      throw caughtError;
+    }
+  };
+  function isForcedQuery(arg, state) {
+    var _a;
+    const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);
+    const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;
+    const fulfilledVal = requestState == null ? void 0 : requestState.fulfilledTimeStamp;
+    const refetchVal = (_a = arg.forceRefetch) != null ? _a : arg.subscribe && baseFetchOnMountOrArgChange;
+    if (refetchVal) {
+      return refetchVal === true || (Number(/* @__PURE__ */ new Date()) - Number(fulfilledVal)) / 1e3 >= refetchVal;
+    }
+    return false;
+  }
+  const createQueryThunk = () => {
+    const generatedQueryThunk = createAsyncThunk(`${reducerPath}/executeQuery`, executeEndpoint, {
+      getPendingMeta({
+        arg
+      }) {
+        const endpointDefinition = endpointDefinitions[arg.endpointName];
+        return addShouldAutoBatch(__spreadValues({
+          startedTimeStamp: Date.now()
+        }, isInfiniteQueryDefinition(endpointDefinition) ? {
+          direction: arg.direction
+        } : {}));
+      },
+      condition(queryThunkArg, {
+        getState
+      }) {
+        var _a;
+        const state = getState();
+        const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);
+        const fulfilledVal = requestState == null ? void 0 : requestState.fulfilledTimeStamp;
+        const currentArg = queryThunkArg.originalArgs;
+        const previousArg = requestState == null ? void 0 : requestState.originalArgs;
+        const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];
+        const direction = queryThunkArg.direction;
+        if (isUpsertQuery(queryThunkArg)) {
+          return true;
+        }
+        if ((requestState == null ? void 0 : requestState.status) === "pending") {
+          return false;
+        }
+        if (isForcedQuery(queryThunkArg, state)) {
+          return true;
+        }
+        if (isQueryDefinition(endpointDefinition) && ((_a = endpointDefinition == null ? void 0 : endpointDefinition.forceRefetch) == null ? void 0 : _a.call(endpointDefinition, {
+          currentArg,
+          previousArg,
+          endpointState: requestState,
+          state
+        }))) {
+          return true;
+        }
+        if (fulfilledVal && !direction) {
+          return false;
+        }
+        return true;
+      },
+      dispatchConditionRejection: true
+    });
+    return generatedQueryThunk;
+  };
+  const queryThunk = createQueryThunk();
+  const infiniteQueryThunk = createQueryThunk();
+  const mutationThunk = createAsyncThunk(`${reducerPath}/executeMutation`, executeEndpoint, {
+    getPendingMeta() {
+      return addShouldAutoBatch({
+        startedTimeStamp: Date.now()
+      });
+    }
+  });
+  const hasTheForce = (options) => "force" in options;
+  const hasMaxAge = (options) => "ifOlderThan" in options;
+  const prefetch = (endpointName, arg, options) => (dispatch, getState) => {
+    const force = hasTheForce(options) && options.force;
+    const maxAge = hasMaxAge(options) && options.ifOlderThan;
+    const queryAction = (force2 = true) => {
+      const options2 = {
+        forceRefetch: force2,
+        isPrefetch: true
+      };
+      return api.endpoints[endpointName].initiate(arg, options2);
+    };
+    const latestStateValue = api.endpoints[endpointName].select(arg)(getState());
+    if (force) {
+      dispatch(queryAction());
+    } else if (maxAge) {
+      const lastFulfilledTs = latestStateValue == null ? void 0 : latestStateValue.fulfilledTimeStamp;
+      if (!lastFulfilledTs) {
+        dispatch(queryAction());
+        return;
+      }
+      const shouldRetrigger = (Number(/* @__PURE__ */ new Date()) - Number(new Date(lastFulfilledTs))) / 1e3 >= maxAge;
+      if (shouldRetrigger) {
+        dispatch(queryAction());
+      }
+    } else {
+      dispatch(queryAction(false));
+    }
+  };
+  function matchesEndpoint(endpointName) {
+    return (action) => {
+      var _a, _b;
+      return ((_b = (_a = action == null ? void 0 : action.meta) == null ? void 0 : _a.arg) == null ? void 0 : _b.endpointName) === endpointName;
+    };
+  }
+  function buildMatchThunkActions(thunk, endpointName) {
+    return {
+      matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),
+      matchFulfilled: isAllOf(isFulfilled(thunk), matchesEndpoint(endpointName)),
+      matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName))
+    };
+  }
+  return {
+    queryThunk,
+    mutationThunk,
+    infiniteQueryThunk,
+    prefetch,
+    updateQueryData,
+    upsertQueryData,
+    patchQueryData,
+    buildMatchThunkActions
+  };
+}
+function getNextPageParam(options, {
+  pages,
+  pageParams
+}, queryArg) {
+  const lastIndex = pages.length - 1;
+  return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams, queryArg);
+}
+function getPreviousPageParam(options, {
+  pages,
+  pageParams
+}, queryArg) {
+  var _a;
+  return (_a = options.getPreviousPageParam) == null ? void 0 : _a.call(options, pages[0], pages, pageParams[0], pageParams, queryArg);
+}
+function calculateProvidedByThunk(action, type, endpointDefinitions, assertTagType) {
+  return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type], isFulfilled(action) ? action.payload : void 0, isRejectedWithValue(action) ? action.payload : void 0, action.meta.arg.originalArgs, "baseQueryMeta" in action.meta ? action.meta.baseQueryMeta : void 0, assertTagType);
+}
+
+// src/query/core/buildSlice.ts
+import { isDraft } from "immer";
+import { applyPatches, original } from "immer";
+function updateQuerySubstateIfExists(state, queryCacheKey, update) {
+  const substate = state[queryCacheKey];
+  if (substate) {
+    update(substate);
+  }
+}
+function getMutationCacheKey(id) {
+  var _a;
+  return (_a = "arg" in id ? id.arg.fixedCacheKey : id.fixedCacheKey) != null ? _a : id.requestId;
+}
+function updateMutationSubstateIfExists(state, id, update) {
+  const substate = state[getMutationCacheKey(id)];
+  if (substate) {
+    update(substate);
+  }
+}
+var initialState = {};
+function buildSlice({
+  reducerPath,
+  queryThunk,
+  mutationThunk,
+  serializeQueryArgs,
+  context: {
+    endpointDefinitions: definitions,
+    apiUid,
+    extractRehydrationInfo,
+    hasRehydrationInfo
+  },
+  assertTagType,
+  config
+}) {
+  const resetApiState = createAction(`${reducerPath}/resetApiState`);
+  function writePendingCacheEntry(draft, arg, upserting, meta) {
+    var _a, _b;
+    (_b = draft[_a = arg.queryCacheKey]) != null ? _b : draft[_a] = {
+      status: "uninitialized" /* uninitialized */,
+      endpointName: arg.endpointName
+    };
+    updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {
+      substate.status = "pending" /* pending */;
+      substate.requestId = upserting && substate.requestId ? (
+        // for `upsertQuery` **updates**, keep the current `requestId`
+        substate.requestId
+      ) : (
+        // for normal queries or `upsertQuery` **inserts** always update the `requestId`
+        meta.requestId
+      );
+      if (arg.originalArgs !== void 0) {
+        substate.originalArgs = arg.originalArgs;
+      }
+      substate.startedTimeStamp = meta.startedTimeStamp;
+      const endpointDefinition = definitions[meta.arg.endpointName];
+      if (isInfiniteQueryDefinition(endpointDefinition) && "direction" in arg) {
+        ;
+        substate.direction = arg.direction;
+      }
+    });
+  }
+  function writeFulfilledCacheEntry(draft, meta, payload, upserting) {
+    updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, (substate) => {
+      var _a;
+      if (substate.requestId !== meta.requestId && !upserting) return;
+      const {
+        merge
+      } = definitions[meta.arg.endpointName];
+      substate.status = "fulfilled" /* fulfilled */;
+      if (merge) {
+        if (substate.data !== void 0) {
+          const {
+            fulfilledTimeStamp,
+            arg,
+            baseQueryMeta,
+            requestId
+          } = meta;
+          let newData = createNextState(substate.data, (draftSubstateData) => {
+            return merge(draftSubstateData, payload, {
+              arg: arg.originalArgs,
+              baseQueryMeta,
+              fulfilledTimeStamp,
+              requestId
+            });
+          });
+          substate.data = newData;
+        } else {
+          substate.data = payload;
+        }
+      } else {
+        substate.data = ((_a = definitions[meta.arg.endpointName].structuralSharing) != null ? _a : true) ? copyWithStructuralSharing(isDraft(substate.data) ? original(substate.data) : substate.data, payload) : payload;
+      }
+      delete substate.error;
+      substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;
+    });
+  }
+  const querySlice = createSlice({
+    name: `${reducerPath}/queries`,
+    initialState,
+    reducers: {
+      removeQueryResult: {
+        reducer(draft, {
+          payload: {
+            queryCacheKey
+          }
+        }) {
+          delete draft[queryCacheKey];
+        },
+        prepare: prepareAutoBatched()
+      },
+      cacheEntriesUpserted: {
+        reducer(draft, action) {
+          for (const entry of action.payload) {
+            const {
+              queryDescription: arg,
+              value
+            } = entry;
+            writePendingCacheEntry(draft, arg, true, {
+              arg,
+              requestId: action.meta.requestId,
+              startedTimeStamp: action.meta.timestamp
+            });
+            writeFulfilledCacheEntry(
+              draft,
+              {
+                arg,
+                requestId: action.meta.requestId,
+                fulfilledTimeStamp: action.meta.timestamp,
+                baseQueryMeta: {}
+              },
+              value,
+              // We know we're upserting here
+              true
+            );
+          }
+        },
+        prepare: (payload) => {
+          const queryDescriptions = payload.map((entry) => {
+            const {
+              endpointName,
+              arg,
+              value
+            } = entry;
+            const endpointDefinition = definitions[endpointName];
+            const queryDescription = {
+              type: "query",
+              endpointName,
+              originalArgs: entry.arg,
+              queryCacheKey: serializeQueryArgs({
+                queryArgs: arg,
+                endpointDefinition,
+                endpointName
+              })
+            };
+            return {
+              queryDescription,
+              value
+            };
+          });
+          const result = {
+            payload: queryDescriptions,
+            meta: {
+              [SHOULD_AUTOBATCH]: true,
+              requestId: nanoid(),
+              timestamp: Date.now()
+            }
+          };
+          return result;
+        }
+      },
+      queryResultPatched: {
+        reducer(draft, {
+          payload: {
+            queryCacheKey,
+            patches
+          }
+        }) {
+          updateQuerySubstateIfExists(draft, queryCacheKey, (substate) => {
+            substate.data = applyPatches(substate.data, patches.concat());
+          });
+        },
+        prepare: prepareAutoBatched()
+      }
+    },
+    extraReducers(builder) {
+      builder.addCase(queryThunk.pending, (draft, {
+        meta,
+        meta: {
+          arg
+        }
+      }) => {
+        const upserting = isUpsertQuery(arg);
+        writePendingCacheEntry(draft, arg, upserting, meta);
+      }).addCase(queryThunk.fulfilled, (draft, {
+        meta,
+        payload
+      }) => {
+        const upserting = isUpsertQuery(meta.arg);
+        writeFulfilledCacheEntry(draft, meta, payload, upserting);
+      }).addCase(queryThunk.rejected, (draft, {
+        meta: {
+          condition,
+          arg,
+          requestId
+        },
+        error,
+        payload
+      }) => {
+        updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {
+          if (condition) {
+          } else {
+            if (substate.requestId !== requestId) return;
+            substate.status = "rejected" /* rejected */;
+            substate.error = payload != null ? payload : error;
+          }
+        });
+      }).addMatcher(hasRehydrationInfo, (draft, action) => {
+        const {
+          queries
+        } = extractRehydrationInfo(action);
+        for (const [key, entry] of Object.entries(queries)) {
+          if (
+            // do not rehydrate entries that were currently in flight.
+            (entry == null ? void 0 : entry.status) === "fulfilled" /* fulfilled */ || (entry == null ? void 0 : entry.status) === "rejected" /* rejected */
+          ) {
+            draft[key] = entry;
+          }
+        }
+      });
+    }
+  });
+  const mutationSlice = createSlice({
+    name: `${reducerPath}/mutations`,
+    initialState,
+    reducers: {
+      removeMutationResult: {
+        reducer(draft, {
+          payload
+        }) {
+          const cacheKey = getMutationCacheKey(payload);
+          if (cacheKey in draft) {
+            delete draft[cacheKey];
+          }
+        },
+        prepare: prepareAutoBatched()
+      }
+    },
+    extraReducers(builder) {
+      builder.addCase(mutationThunk.pending, (draft, {
+        meta,
+        meta: {
+          requestId,
+          arg,
+          startedTimeStamp
+        }
+      }) => {
+        if (!arg.track) return;
+        draft[getMutationCacheKey(meta)] = {
+          requestId,
+          status: "pending" /* pending */,
+          endpointName: arg.endpointName,
+          startedTimeStamp
+        };
+      }).addCase(mutationThunk.fulfilled, (draft, {
+        payload,
+        meta
+      }) => {
+        if (!meta.arg.track) return;
+        updateMutationSubstateIfExists(draft, meta, (substate) => {
+          if (substate.requestId !== meta.requestId) return;
+          substate.status = "fulfilled" /* fulfilled */;
+          substate.data = payload;
+          substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;
+        });
+      }).addCase(mutationThunk.rejected, (draft, {
+        payload,
+        error,
+        meta
+      }) => {
+        if (!meta.arg.track) return;
+        updateMutationSubstateIfExists(draft, meta, (substate) => {
+          if (substate.requestId !== meta.requestId) return;
+          substate.status = "rejected" /* rejected */;
+          substate.error = payload != null ? payload : error;
+        });
+      }).addMatcher(hasRehydrationInfo, (draft, action) => {
+        const {
+          mutations
+        } = extractRehydrationInfo(action);
+        for (const [key, entry] of Object.entries(mutations)) {
+          if (
+            // do not rehydrate entries that were currently in flight.
+            ((entry == null ? void 0 : entry.status) === "fulfilled" /* fulfilled */ || (entry == null ? void 0 : entry.status) === "rejected" /* rejected */) && // only rehydrate endpoints that were persisted using a `fixedCacheKey`
+            key !== (entry == null ? void 0 : entry.requestId)
+          ) {
+            draft[key] = entry;
+          }
+        }
+      });
+    }
+  });
+  const initialInvalidationState = {
+    tags: {},
+    keys: {}
+  };
+  const invalidationSlice = createSlice({
+    name: `${reducerPath}/invalidation`,
+    initialState: initialInvalidationState,
+    reducers: {
+      updateProvidedBy: {
+        reducer(draft, action) {
+          var _a, _b, _c, _d, _e;
+          for (const {
+            queryCacheKey,
+            providedTags
+          } of action.payload) {
+            removeCacheKeyFromTags(draft, queryCacheKey);
+            for (const {
+              type,
+              id
+            } of providedTags) {
+              const subscribedQueries = (_e = (_c = (_b = (_a = draft.tags)[type]) != null ? _b : _a[type] = {})[_d = id || "__internal_without_id"]) != null ? _e : _c[_d] = [];
+              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);
+              if (!alreadySubscribed) {
+                subscribedQueries.push(queryCacheKey);
+              }
+            }
+            draft.keys[queryCacheKey] = providedTags;
+          }
+        },
+        prepare: prepareAutoBatched()
+      }
+    },
+    extraReducers(builder) {
+      builder.addCase(querySlice.actions.removeQueryResult, (draft, {
+        payload: {
+          queryCacheKey
+        }
+      }) => {
+        removeCacheKeyFromTags(draft, queryCacheKey);
+      }).addMatcher(hasRehydrationInfo, (draft, action) => {
+        var _a, _b, _c, _d, _e;
+        const {
+          provided
+        } = extractRehydrationInfo(action);
+        for (const [type, incomingTags] of Object.entries(provided)) {
+          for (const [id, cacheKeys] of Object.entries(incomingTags)) {
+            const subscribedQueries = (_e = (_c = (_b = (_a = draft.tags)[type]) != null ? _b : _a[type] = {})[_d = id || "__internal_without_id"]) != null ? _e : _c[_d] = [];
+            for (const queryCacheKey of cacheKeys) {
+              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);
+              if (!alreadySubscribed) {
+                subscribedQueries.push(queryCacheKey);
+              }
+            }
+          }
+        }
+      }).addMatcher(isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)), (draft, action) => {
+        writeProvidedTagsForQueries(draft, [action]);
+      }).addMatcher(querySlice.actions.cacheEntriesUpserted.match, (draft, action) => {
+        const mockActions = action.payload.map(({
+          queryDescription,
+          value
+        }) => {
+          return {
+            type: "UNKNOWN",
+            payload: value,
+            meta: {
+              requestStatus: "fulfilled",
+              requestId: "UNKNOWN",
+              arg: queryDescription
+            }
+          };
+        });
+        writeProvidedTagsForQueries(draft, mockActions);
+      });
+    }
+  });
+  function removeCacheKeyFromTags(draft, queryCacheKey) {
+    var _a, _b, _c;
+    const existingTags = (_a = draft.keys[queryCacheKey]) != null ? _a : [];
+    for (const tag of existingTags) {
+      const tagType = tag.type;
+      const tagId = (_b = tag.id) != null ? _b : "__internal_without_id";
+      const tagSubscriptions = (_c = draft.tags[tagType]) == null ? void 0 : _c[tagId];
+      if (tagSubscriptions) {
+        draft.tags[tagType][tagId] = tagSubscriptions.filter((qc) => qc !== queryCacheKey);
+      }
+    }
+    delete draft.keys[queryCacheKey];
+  }
+  function writeProvidedTagsForQueries(draft, actions2) {
+    const providedByEntries = actions2.map((action) => {
+      const providedTags = calculateProvidedByThunk(action, "providesTags", definitions, assertTagType);
+      const {
+        queryCacheKey
+      } = action.meta.arg;
+      return {
+        queryCacheKey,
+        providedTags
+      };
+    });
+    invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy(providedByEntries));
+  }
+  const subscriptionSlice = createSlice({
+    name: `${reducerPath}/subscriptions`,
+    initialState,
+    reducers: {
+      updateSubscriptionOptions(d, a) {
+      },
+      unsubscribeQueryResult(d, a) {
+      },
+      internal_getRTKQSubscriptions() {
+      }
+    }
+  });
+  const internalSubscriptionsSlice = createSlice({
+    name: `${reducerPath}/internalSubscriptions`,
+    initialState,
+    reducers: {
+      subscriptionsUpdated: {
+        reducer(state, action) {
+          return applyPatches(state, action.payload);
+        },
+        prepare: prepareAutoBatched()
+      }
+    }
+  });
+  const configSlice = createSlice({
+    name: `${reducerPath}/config`,
+    initialState: __spreadValues({
+      online: isOnline(),
+      focused: isDocumentVisible(),
+      middlewareRegistered: false
+    }, config),
+    reducers: {
+      middlewareRegistered(state, {
+        payload
+      }) {
+        state.middlewareRegistered = state.middlewareRegistered === "conflict" || apiUid !== payload ? "conflict" : true;
+      }
+    },
+    extraReducers: (builder) => {
+      builder.addCase(onOnline, (state) => {
+        state.online = true;
+      }).addCase(onOffline, (state) => {
+        state.online = false;
+      }).addCase(onFocus, (state) => {
+        state.focused = true;
+      }).addCase(onFocusLost, (state) => {
+        state.focused = false;
+      }).addMatcher(hasRehydrationInfo, (draft) => __spreadValues({}, draft));
+    }
+  });
+  const combinedReducer = combineReducers({
+    queries: querySlice.reducer,
+    mutations: mutationSlice.reducer,
+    provided: invalidationSlice.reducer,
+    subscriptions: internalSubscriptionsSlice.reducer,
+    config: configSlice.reducer
+  });
+  const reducer = (state, action) => combinedReducer(resetApiState.match(action) ? void 0 : state, action);
+  const actions = __spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, configSlice.actions), querySlice.actions), subscriptionSlice.actions), internalSubscriptionsSlice.actions), mutationSlice.actions), invalidationSlice.actions), {
+    resetApiState
+  });
+  return {
+    reducer,
+    actions
+  };
+}
+
+// src/query/core/buildSelectors.ts
+var skipToken = /* @__PURE__ */ Symbol.for("RTKQ/skipToken");
+var initialSubState = {
+  status: "uninitialized" /* uninitialized */
+};
+var defaultQuerySubState = /* @__PURE__ */ createNextState(initialSubState, () => {
+});
+var defaultMutationSubState = /* @__PURE__ */ createNextState(initialSubState, () => {
+});
+function buildSelectors({
+  serializeQueryArgs,
+  reducerPath,
+  createSelector: createSelector2
+}) {
+  const selectSkippedQuery = (state) => defaultQuerySubState;
+  const selectSkippedMutation = (state) => defaultMutationSubState;
+  return {
+    buildQuerySelector,
+    buildInfiniteQuerySelector,
+    buildMutationSelector,
+    selectInvalidatedBy,
+    selectCachedArgsForQuery,
+    selectApiState,
+    selectQueries,
+    selectMutations,
+    selectQueryEntry,
+    selectConfig
+  };
+  function withRequestFlags(substate) {
+    return __spreadValues(__spreadValues({}, substate), getRequestStatusFlags(substate.status));
+  }
+  function selectApiState(rootState) {
+    const state = rootState[reducerPath];
+    if (process.env.NODE_ENV !== "production") {
+      if (!state) {
+        if (selectApiState.triggered) return state;
+        selectApiState.triggered = true;
+        console.error(`Error: No data found at \`state.${reducerPath}\`. Did you forget to add the reducer to the store?`);
+      }
+    }
+    return state;
+  }
+  function selectQueries(rootState) {
+    var _a;
+    return (_a = selectApiState(rootState)) == null ? void 0 : _a.queries;
+  }
+  function selectQueryEntry(rootState, cacheKey) {
+    var _a;
+    return (_a = selectQueries(rootState)) == null ? void 0 : _a[cacheKey];
+  }
+  function selectMutations(rootState) {
+    var _a;
+    return (_a = selectApiState(rootState)) == null ? void 0 : _a.mutations;
+  }
+  function selectConfig(rootState) {
+    var _a;
+    return (_a = selectApiState(rootState)) == null ? void 0 : _a.config;
+  }
+  function buildAnyQuerySelector(endpointName, endpointDefinition, combiner) {
+    return (queryArgs) => {
+      if (queryArgs === skipToken) {
+        return createSelector2(selectSkippedQuery, combiner);
+      }
+      const serializedArgs = serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      });
+      const selectQuerySubstate = (state) => {
+        var _a;
+        return (_a = selectQueryEntry(state, serializedArgs)) != null ? _a : defaultQuerySubState;
+      };
+      return createSelector2(selectQuerySubstate, combiner);
+    };
+  }
+  function buildQuerySelector(endpointName, endpointDefinition) {
+    return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags);
+  }
+  function buildInfiniteQuerySelector(endpointName, endpointDefinition) {
+    const {
+      infiniteQueryOptions
+    } = endpointDefinition;
+    function withInfiniteQueryResultFlags(substate) {
+      const stateWithRequestFlags = __spreadValues(__spreadValues({}, substate), getRequestStatusFlags(substate.status));
+      const {
+        isLoading,
+        isError,
+        direction
+      } = stateWithRequestFlags;
+      const isForward = direction === "forward";
+      const isBackward = direction === "backward";
+      return __spreadProps(__spreadValues({}, stateWithRequestFlags), {
+        hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),
+        hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),
+        isFetchingNextPage: isLoading && isForward,
+        isFetchingPreviousPage: isLoading && isBackward,
+        isFetchNextPageError: isError && isForward,
+        isFetchPreviousPageError: isError && isBackward
+      });
+    }
+    return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags);
+  }
+  function buildMutationSelector() {
+    return (id) => {
+      var _a;
+      let mutationId;
+      if (typeof id === "object") {
+        mutationId = (_a = getMutationCacheKey(id)) != null ? _a : skipToken;
+      } else {
+        mutationId = id;
+      }
+      const selectMutationSubstate = (state) => {
+        var _a2, _b, _c;
+        return (_c = (_b = (_a2 = selectApiState(state)) == null ? void 0 : _a2.mutations) == null ? void 0 : _b[mutationId]) != null ? _c : defaultMutationSubState;
+      };
+      const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;
+      return createSelector2(finalSelectMutationSubstate, withRequestFlags);
+    };
+  }
+  function selectInvalidatedBy(state, tags) {
+    var _a;
+    const apiState = state[reducerPath];
+    const toInvalidate = /* @__PURE__ */ new Set();
+    for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {
+      const provided = apiState.provided.tags[tag.type];
+      if (!provided) {
+        continue;
+      }
+      let invalidateSubscriptions = (_a = tag.id !== void 0 ? (
+        // id given: invalidate all queries that provide this type & id
+        provided[tag.id]
+      ) : (
+        // no id: invalidate all queries that provide this type
+        flatten(Object.values(provided))
+      )) != null ? _a : [];
+      for (const invalidate of invalidateSubscriptions) {
+        toInvalidate.add(invalidate);
+      }
+    }
+    return flatten(Array.from(toInvalidate.values()).map((queryCacheKey) => {
+      const querySubState = apiState.queries[queryCacheKey];
+      return querySubState ? [{
+        queryCacheKey,
+        endpointName: querySubState.endpointName,
+        originalArgs: querySubState.originalArgs
+      }] : [];
+    }));
+  }
+  function selectCachedArgsForQuery(state, queryName) {
+    return Object.values(selectQueries(state)).filter((entry) => (entry == null ? void 0 : entry.endpointName) === queryName && entry.status !== "uninitialized" /* uninitialized */).map((entry) => entry.originalArgs);
+  }
+  function getHasNextPage(options, data, queryArg) {
+    if (!data) return false;
+    return getNextPageParam(options, data, queryArg) != null;
+  }
+  function getHasPreviousPage(options, data, queryArg) {
+    if (!data || !options.getPreviousPageParam) return false;
+    return getPreviousPageParam(options, data, queryArg) != null;
+  }
+}
+
+// src/query/createApi.ts
+import { formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage22, formatProdErrorMessage as _formatProdErrorMessage3 } from "@reduxjs/toolkit";
+
+// src/query/defaultSerializeQueryArgs.ts
+var cache = WeakMap ? /* @__PURE__ */ new WeakMap() : void 0;
+var defaultSerializeQueryArgs = ({
+  endpointName,
+  queryArgs
+}) => {
+  let serialized = "";
+  const cached = cache == null ? void 0 : cache.get(queryArgs);
+  if (typeof cached === "string") {
+    serialized = cached;
+  } else {
+    const stringified = JSON.stringify(queryArgs, (key, value) => {
+      value = typeof value === "bigint" ? {
+        $bigint: value.toString()
+      } : value;
+      value = isPlainObject(value) ? Object.keys(value).sort().reduce((acc, key2) => {
+        acc[key2] = value[key2];
+        return acc;
+      }, {}) : value;
+      return value;
+    });
+    if (isPlainObject(queryArgs)) {
+      cache == null ? void 0 : cache.set(queryArgs, stringified);
+    }
+    serialized = stringified;
+  }
+  return `${endpointName}(${serialized})`;
+};
+
+// src/query/createApi.ts
+import { weakMapMemoize } from "reselect";
+function buildCreateApi(...modules) {
+  return function baseCreateApi(options) {
+    const extractRehydrationInfo = weakMapMemoize((action) => {
+      var _a, _b;
+      return (_b = options.extractRehydrationInfo) == null ? void 0 : _b.call(options, action, {
+        reducerPath: (_a = options.reducerPath) != null ? _a : "api"
+      });
+    });
+    const optionsWithDefaults = __spreadProps(__spreadValues({
+      reducerPath: "api",
+      keepUnusedDataFor: 60,
+      refetchOnMountOrArgChange: false,
+      refetchOnFocus: false,
+      refetchOnReconnect: false,
+      invalidationBehavior: "delayed"
+    }, options), {
+      extractRehydrationInfo,
+      serializeQueryArgs(queryArgsApi) {
+        let finalSerializeQueryArgs = defaultSerializeQueryArgs;
+        if ("serializeQueryArgs" in queryArgsApi.endpointDefinition) {
+          const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs;
+          finalSerializeQueryArgs = (queryArgsApi2) => {
+            const initialResult = endpointSQA(queryArgsApi2);
+            if (typeof initialResult === "string") {
+              return initialResult;
+            } else {
+              return defaultSerializeQueryArgs(__spreadProps(__spreadValues({}, queryArgsApi2), {
+                queryArgs: initialResult
+              }));
+            }
+          };
+        } else if (options.serializeQueryArgs) {
+          finalSerializeQueryArgs = options.serializeQueryArgs;
+        }
+        return finalSerializeQueryArgs(queryArgsApi);
+      },
+      tagTypes: [...options.tagTypes || []]
+    });
+    const context = {
+      endpointDefinitions: {},
+      batch(fn) {
+        fn();
+      },
+      apiUid: nanoid(),
+      extractRehydrationInfo,
+      hasRehydrationInfo: weakMapMemoize((action) => extractRehydrationInfo(action) != null)
+    };
+    const api = {
+      injectEndpoints,
+      enhanceEndpoints({
+        addTagTypes,
+        endpoints
+      }) {
+        if (addTagTypes) {
+          for (const eT of addTagTypes) {
+            if (!optionsWithDefaults.tagTypes.includes(eT)) {
+              ;
+              optionsWithDefaults.tagTypes.push(eT);
+            }
+          }
+        }
+        if (endpoints) {
+          for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {
+            if (typeof partialDefinition === "function") {
+              partialDefinition(context.endpointDefinitions[endpointName]);
+            } else {
+              Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);
+            }
+          }
+        }
+        return api;
+      }
+    };
+    const initializedModules = modules.map((m) => m.init(api, optionsWithDefaults, context));
+    function injectEndpoints(inject) {
+      const evaluatedEndpoints = inject.endpoints({
+        query: (x) => __spreadProps(__spreadValues({}, x), {
+          type: "query" /* query */
+        }),
+        mutation: (x) => __spreadProps(__spreadValues({}, x), {
+          type: "mutation" /* mutation */
+        }),
+        infiniteQuery: (x) => __spreadProps(__spreadValues({}, x), {
+          type: "infinitequery" /* infinitequery */
+        })
+      });
+      for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {
+        if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {
+          if (inject.overrideExisting === "throw") {
+            throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage2(39) : `called \`injectEndpoints\` to override already-existing endpointName ${endpointName} without specifying \`overrideExisting: true\``);
+          } else if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+            console.error(`called \`injectEndpoints\` to override already-existing endpointName ${endpointName} without specifying \`overrideExisting: true\``);
+          }
+          continue;
+        }
+        if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+          if (isInfiniteQueryDefinition(definition)) {
+            const {
+              infiniteQueryOptions
+            } = definition;
+            const {
+              maxPages,
+              getPreviousPageParam: getPreviousPageParam2
+            } = infiniteQueryOptions;
+            if (typeof maxPages === "number") {
+              if (maxPages < 1) {
+                throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage22(40) : `maxPages for endpoint '${endpointName}' must be a number greater than 0`);
+              }
+              if (typeof getPreviousPageParam2 !== "function") {
+                throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage3(41) : `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`);
+              }
+            }
+          }
+        }
+        context.endpointDefinitions[endpointName] = definition;
+        for (const m of initializedModules) {
+          m.injectEndpoint(endpointName, definition);
+        }
+      }
+      return api;
+    }
+    return api.injectEndpoints({
+      endpoints: options.endpoints
+    });
+  };
+}
+
+// src/query/fakeBaseQuery.ts
+import { formatProdErrorMessage as _formatProdErrorMessage4 } from "@reduxjs/toolkit";
+var _NEVER = /* @__PURE__ */ Symbol();
+function fakeBaseQuery() {
+  return function() {
+    throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage4(33) : "When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.");
+  };
+}
+
+// src/query/core/module.ts
+import { enablePatches } from "immer";
+
+// src/query/tsHelpers.ts
+function assertCast(v) {
+}
+function safeAssign(target, ...args) {
+  return Object.assign(target, ...args);
+}
+
+// src/query/core/buildMiddleware/batchActions.ts
+import { produceWithPatches as produceWithPatches2 } from "immer";
+var buildBatchedActionsHandler = ({
+  api,
+  queryThunk,
+  internalState
+}) => {
+  const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;
+  let previousSubscriptions = null;
+  let updateSyncTimer = null;
+  const {
+    updateSubscriptionOptions,
+    unsubscribeQueryResult
+  } = api.internalActions;
+  const actuallyMutateSubscriptions = (mutableState, action) => {
+    var _a, _b, _c, _d, _e, _f, _g, _h, _i;
+    if (updateSubscriptionOptions.match(action)) {
+      const {
+        queryCacheKey,
+        requestId,
+        options
+      } = action.payload;
+      if ((_a = mutableState == null ? void 0 : mutableState[queryCacheKey]) == null ? void 0 : _a[requestId]) {
+        mutableState[queryCacheKey][requestId] = options;
+      }
+      return true;
+    }
+    if (unsubscribeQueryResult.match(action)) {
+      const {
+        queryCacheKey,
+        requestId
+      } = action.payload;
+      if (mutableState[queryCacheKey]) {
+        delete mutableState[queryCacheKey][requestId];
+      }
+      return true;
+    }
+    if (api.internalActions.removeQueryResult.match(action)) {
+      delete mutableState[action.payload.queryCacheKey];
+      return true;
+    }
+    if (queryThunk.pending.match(action)) {
+      const {
+        meta: {
+          arg,
+          requestId
+        }
+      } = action;
+      const substate = (_c = mutableState[_b = arg.queryCacheKey]) != null ? _c : mutableState[_b] = {};
+      substate[`${requestId}_running`] = {};
+      if (arg.subscribe) {
+        substate[requestId] = (_e = (_d = arg.subscriptionOptions) != null ? _d : substate[requestId]) != null ? _e : {};
+      }
+      return true;
+    }
+    let mutated = false;
+    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {
+      const state = mutableState[action.meta.arg.queryCacheKey] || {};
+      const key = `${action.meta.requestId}_running`;
+      mutated || (mutated = !!state[key]);
+      delete state[key];
+    }
+    if (queryThunk.rejected.match(action)) {
+      const {
+        meta: {
+          condition,
+          arg,
+          requestId
+        }
+      } = action;
+      if (condition && arg.subscribe) {
+        const substate = (_g = mutableState[_f = arg.queryCacheKey]) != null ? _g : mutableState[_f] = {};
+        substate[requestId] = (_i = (_h = arg.subscriptionOptions) != null ? _h : substate[requestId]) != null ? _i : {};
+        mutated = true;
+      }
+    }
+    return mutated;
+  };
+  const getSubscriptions = () => internalState.currentSubscriptions;
+  const getSubscriptionCount = (queryCacheKey) => {
+    var _a;
+    const subscriptions = getSubscriptions();
+    const subscriptionsForQueryArg = (_a = subscriptions[queryCacheKey]) != null ? _a : {};
+    return countObjectKeys(subscriptionsForQueryArg);
+  };
+  const isRequestSubscribed = (queryCacheKey, requestId) => {
+    var _a;
+    const subscriptions = getSubscriptions();
+    return !!((_a = subscriptions == null ? void 0 : subscriptions[queryCacheKey]) == null ? void 0 : _a[requestId]);
+  };
+  const subscriptionSelectors = {
+    getSubscriptions,
+    getSubscriptionCount,
+    isRequestSubscribed
+  };
+  return (action, mwApi) => {
+    if (!previousSubscriptions) {
+      previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));
+    }
+    if (api.util.resetApiState.match(action)) {
+      previousSubscriptions = internalState.currentSubscriptions = {};
+      updateSyncTimer = null;
+      return [true, false];
+    }
+    if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {
+      return [false, subscriptionSelectors];
+    }
+    const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);
+    let actionShouldContinue = true;
+    if (didMutate) {
+      if (!updateSyncTimer) {
+        updateSyncTimer = setTimeout(() => {
+          const newSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));
+          const [, patches] = produceWithPatches2(previousSubscriptions, () => newSubscriptions);
+          mwApi.next(api.internalActions.subscriptionsUpdated(patches));
+          previousSubscriptions = newSubscriptions;
+          updateSyncTimer = null;
+        }, 500);
+      }
+      const isSubscriptionSliceAction = typeof action.type == "string" && !!action.type.startsWith(subscriptionsPrefix);
+      const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;
+      actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;
+    }
+    return [actionShouldContinue, false];
+  };
+};
+
+// src/query/core/buildMiddleware/cacheCollection.ts
+function isObjectEmpty(obj) {
+  for (const k in obj) {
+    return false;
+  }
+  return true;
+}
+var THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2147483647 / 1e3 - 1;
+var buildCacheCollectionHandler = ({
+  reducerPath,
+  api,
+  queryThunk,
+  context,
+  internalState,
+  selectors: {
+    selectQueryEntry,
+    selectConfig
+  }
+}) => {
+  const {
+    removeQueryResult,
+    unsubscribeQueryResult,
+    cacheEntriesUpserted
+  } = api.internalActions;
+  const canTriggerUnsubscribe = isAnyOf(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);
+  function anySubscriptionsRemainingForKey(queryCacheKey) {
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    return !!subscriptions && !isObjectEmpty(subscriptions);
+  }
+  const currentRemovalTimeouts = {};
+  const handler = (action, mwApi, internalState2) => {
+    const state = mwApi.getState();
+    const config = selectConfig(state);
+    if (canTriggerUnsubscribe(action)) {
+      let queryCacheKeys;
+      if (cacheEntriesUpserted.match(action)) {
+        queryCacheKeys = action.payload.map((entry) => entry.queryDescription.queryCacheKey);
+      } else {
+        const {
+          queryCacheKey
+        } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;
+        queryCacheKeys = [queryCacheKey];
+      }
+      handleUnsubscribeMany(queryCacheKeys, mwApi, config);
+    }
+    if (api.util.resetApiState.match(action)) {
+      for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {
+        if (timeout) clearTimeout(timeout);
+        delete currentRemovalTimeouts[key];
+      }
+    }
+    if (context.hasRehydrationInfo(action)) {
+      const {
+        queries
+      } = context.extractRehydrationInfo(action);
+      handleUnsubscribeMany(Object.keys(queries), mwApi, config);
+    }
+  };
+  function handleUnsubscribeMany(cacheKeys, api2, config) {
+    const state = api2.getState();
+    for (const queryCacheKey of cacheKeys) {
+      const entry = selectQueryEntry(state, queryCacheKey);
+      handleUnsubscribe(queryCacheKey, entry == null ? void 0 : entry.endpointName, api2, config);
+    }
+  }
+  function handleUnsubscribe(queryCacheKey, endpointName, api2, config) {
+    var _a;
+    const endpointDefinition = context.endpointDefinitions[endpointName];
+    const keepUnusedDataFor = (_a = endpointDefinition == null ? void 0 : endpointDefinition.keepUnusedDataFor) != null ? _a : config.keepUnusedDataFor;
+    if (keepUnusedDataFor === Infinity) {
+      return;
+    }
+    const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));
+    if (!anySubscriptionsRemainingForKey(queryCacheKey)) {
+      const currentTimeout = currentRemovalTimeouts[queryCacheKey];
+      if (currentTimeout) {
+        clearTimeout(currentTimeout);
+      }
+      currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {
+        if (!anySubscriptionsRemainingForKey(queryCacheKey)) {
+          api2.dispatch(removeQueryResult({
+            queryCacheKey
+          }));
+        }
+        delete currentRemovalTimeouts[queryCacheKey];
+      }, finalKeepUnusedDataFor * 1e3);
+    }
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/cacheLifecycle.ts
+var neverResolvedError = new Error("Promise never resolved before cacheEntryRemoved.");
+var buildCacheLifecycleHandler = ({
+  api,
+  reducerPath,
+  context,
+  queryThunk,
+  mutationThunk,
+  internalState,
+  selectors: {
+    selectQueryEntry,
+    selectApiState
+  }
+}) => {
+  const isQueryThunk = isAsyncThunkAction(queryThunk);
+  const isMutationThunk = isAsyncThunkAction(mutationThunk);
+  const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk);
+  const lifecycleMap = {};
+  function resolveLifecycleEntry(cacheKey, data, meta) {
+    const lifecycle = lifecycleMap[cacheKey];
+    if (lifecycle == null ? void 0 : lifecycle.valueResolved) {
+      lifecycle.valueResolved({
+        data,
+        meta
+      });
+      delete lifecycle.valueResolved;
+    }
+  }
+  function removeLifecycleEntry(cacheKey) {
+    const lifecycle = lifecycleMap[cacheKey];
+    if (lifecycle) {
+      delete lifecycleMap[cacheKey];
+      lifecycle.cacheEntryRemoved();
+    }
+  }
+  const handler = (action, mwApi, stateBefore) => {
+    const cacheKey = getCacheKey(action);
+    function checkForNewCacheKey(endpointName, cacheKey2, requestId, originalArgs) {
+      const oldEntry = selectQueryEntry(stateBefore, cacheKey2);
+      const newEntry = selectQueryEntry(mwApi.getState(), cacheKey2);
+      if (!oldEntry && newEntry) {
+        handleNewKey(endpointName, originalArgs, cacheKey2, mwApi, requestId);
+      }
+    }
+    if (queryThunk.pending.match(action)) {
+      checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);
+    } else if (api.internalActions.cacheEntriesUpserted.match(action)) {
+      for (const {
+        queryDescription,
+        value
+      } of action.payload) {
+        const {
+          endpointName,
+          originalArgs,
+          queryCacheKey
+        } = queryDescription;
+        checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);
+        resolveLifecycleEntry(queryCacheKey, value, {});
+      }
+    } else if (mutationThunk.pending.match(action)) {
+      const state = mwApi.getState()[reducerPath].mutations[cacheKey];
+      if (state) {
+        handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);
+      }
+    } else if (isFulfilledThunk(action)) {
+      resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);
+    } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {
+      removeLifecycleEntry(cacheKey);
+    } else if (api.util.resetApiState.match(action)) {
+      for (const cacheKey2 of Object.keys(lifecycleMap)) {
+        removeLifecycleEntry(cacheKey2);
+      }
+    }
+  };
+  function getCacheKey(action) {
+    var _a;
+    if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;
+    if (isMutationThunk(action)) {
+      return (_a = action.meta.arg.fixedCacheKey) != null ? _a : action.meta.requestId;
+    }
+    if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;
+    if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);
+    return "";
+  }
+  function handleNewKey(endpointName, originalArgs, queryCacheKey, mwApi, requestId) {
+    const endpointDefinition = context.endpointDefinitions[endpointName];
+    const onCacheEntryAdded = endpointDefinition == null ? void 0 : endpointDefinition.onCacheEntryAdded;
+    if (!onCacheEntryAdded) return;
+    const lifecycle = {};
+    const cacheEntryRemoved = new Promise((resolve) => {
+      lifecycle.cacheEntryRemoved = resolve;
+    });
+    const cacheDataLoaded = Promise.race([new Promise((resolve) => {
+      lifecycle.valueResolved = resolve;
+    }), cacheEntryRemoved.then(() => {
+      throw neverResolvedError;
+    })]);
+    cacheDataLoaded.catch(() => {
+    });
+    lifecycleMap[queryCacheKey] = lifecycle;
+    const selector = api.endpoints[endpointName].select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : queryCacheKey);
+    const extra = mwApi.dispatch((_, __, extra2) => extra2);
+    const lifecycleApi = __spreadProps(__spreadValues({}, mwApi), {
+      getCacheEntry: () => selector(mwApi.getState()),
+      requestId,
+      extra,
+      updateCachedData: isAnyQueryDefinition(endpointDefinition) ? (updateRecipe) => mwApi.dispatch(api.util.updateQueryData(endpointName, originalArgs, updateRecipe)) : void 0,
+      cacheDataLoaded,
+      cacheEntryRemoved
+    });
+    const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi);
+    Promise.resolve(runningHandler).catch((e) => {
+      if (e === neverResolvedError) return;
+      throw e;
+    });
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/devMiddleware.ts
+var buildDevCheckHandler = ({
+  api,
+  context: {
+    apiUid
+  },
+  reducerPath
+}) => {
+  return (action, mwApi) => {
+    var _a, _b;
+    if (api.util.resetApiState.match(action)) {
+      mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));
+    }
+    if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+      if (api.internalActions.middlewareRegistered.match(action) && action.payload === apiUid && ((_b = (_a = mwApi.getState()[reducerPath]) == null ? void 0 : _a.config) == null ? void 0 : _b.middlewareRegistered) === "conflict") {
+        console.warn(`There is a mismatch between slice and middleware for the reducerPath "${reducerPath}".
+You can only have one api per reducer path, this will lead to crashes in various situations!${reducerPath === "api" ? `
+If you have multiple apis, you *have* to specify the reducerPath option when using createApi!` : ""}`);
+      }
+    }
+  };
+};
+
+// src/query/core/buildMiddleware/invalidationByTags.ts
+var buildInvalidationByTagsHandler = ({
+  reducerPath,
+  context,
+  context: {
+    endpointDefinitions
+  },
+  mutationThunk,
+  queryThunk,
+  api,
+  assertTagType,
+  refetchQuery,
+  internalState
+}) => {
+  const {
+    removeQueryResult
+  } = api.internalActions;
+  const isThunkActionWithTags = isAnyOf(isFulfilled(mutationThunk), isRejectedWithValue(mutationThunk));
+  const isQueryEnd = isAnyOf(isFulfilled(mutationThunk, queryThunk), isRejected(mutationThunk, queryThunk));
+  let pendingTagInvalidations = [];
+  const handler = (action, mwApi) => {
+    if (isThunkActionWithTags(action)) {
+      invalidateTags(calculateProvidedByThunk(action, "invalidatesTags", endpointDefinitions, assertTagType), mwApi);
+    } else if (isQueryEnd(action)) {
+      invalidateTags([], mwApi);
+    } else if (api.util.invalidateTags.match(action)) {
+      invalidateTags(calculateProvidedBy(action.payload, void 0, void 0, void 0, void 0, assertTagType), mwApi);
+    }
+  };
+  function hasPendingRequests(state) {
+    var _a;
+    const {
+      queries,
+      mutations
+    } = state;
+    for (const cacheRecord of [queries, mutations]) {
+      for (const key in cacheRecord) {
+        if (((_a = cacheRecord[key]) == null ? void 0 : _a.status) === "pending" /* pending */) return true;
+      }
+    }
+    return false;
+  }
+  function invalidateTags(newTags, mwApi) {
+    const rootState = mwApi.getState();
+    const state = rootState[reducerPath];
+    pendingTagInvalidations.push(...newTags);
+    if (state.config.invalidationBehavior === "delayed" && hasPendingRequests(state)) {
+      return;
+    }
+    const tags = pendingTagInvalidations;
+    pendingTagInvalidations = [];
+    if (tags.length === 0) return;
+    const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);
+    context.batch(() => {
+      var _a;
+      const valuesArray = Array.from(toInvalidate.values());
+      for (const {
+        queryCacheKey
+      } of valuesArray) {
+        const querySubState = state.queries[queryCacheKey];
+        const subscriptionSubState = (_a = internalState.currentSubscriptions[queryCacheKey]) != null ? _a : {};
+        if (querySubState) {
+          if (countObjectKeys(subscriptionSubState) === 0) {
+            mwApi.dispatch(removeQueryResult({
+              queryCacheKey
+            }));
+          } else if (querySubState.status !== "uninitialized" /* uninitialized */) {
+            mwApi.dispatch(refetchQuery(querySubState));
+          }
+        }
+      }
+    });
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/polling.ts
+var buildPollingHandler = ({
+  reducerPath,
+  queryThunk,
+  api,
+  refetchQuery,
+  internalState
+}) => {
+  const currentPolls = {};
+  const handler = (action, mwApi) => {
+    if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {
+      updatePollingInterval(action.payload, mwApi);
+    }
+    if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {
+      updatePollingInterval(action.meta.arg, mwApi);
+    }
+    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {
+      startNextPoll(action.meta.arg, mwApi);
+    }
+    if (api.util.resetApiState.match(action)) {
+      clearPolls();
+    }
+  };
+  function getCacheEntrySubscriptions(queryCacheKey, api2) {
+    const state = api2.getState()[reducerPath];
+    const querySubState = state.queries[queryCacheKey];
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) return;
+    return subscriptions;
+  }
+  function startNextPoll({
+    queryCacheKey
+  }, api2) {
+    const state = api2.getState()[reducerPath];
+    const querySubState = state.queries[queryCacheKey];
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) return;
+    const {
+      lowestPollingInterval,
+      skipPollingIfUnfocused
+    } = findLowestPollingInterval(subscriptions);
+    if (!Number.isFinite(lowestPollingInterval)) return;
+    const currentPoll = currentPolls[queryCacheKey];
+    if (currentPoll == null ? void 0 : currentPoll.timeout) {
+      clearTimeout(currentPoll.timeout);
+      currentPoll.timeout = void 0;
+    }
+    const nextPollTimestamp = Date.now() + lowestPollingInterval;
+    currentPolls[queryCacheKey] = {
+      nextPollTimestamp,
+      pollingInterval: lowestPollingInterval,
+      timeout: setTimeout(() => {
+        if (state.config.focused || !skipPollingIfUnfocused) {
+          api2.dispatch(refetchQuery(querySubState));
+        }
+        startNextPoll({
+          queryCacheKey
+        }, api2);
+      }, lowestPollingInterval)
+    };
+  }
+  function updatePollingInterval({
+    queryCacheKey
+  }, api2) {
+    const state = api2.getState()[reducerPath];
+    const querySubState = state.queries[queryCacheKey];
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) {
+      return;
+    }
+    const {
+      lowestPollingInterval
+    } = findLowestPollingInterval(subscriptions);
+    if (!Number.isFinite(lowestPollingInterval)) {
+      cleanupPollForKey(queryCacheKey);
+      return;
+    }
+    const currentPoll = currentPolls[queryCacheKey];
+    const nextPollTimestamp = Date.now() + lowestPollingInterval;
+    if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {
+      startNextPoll({
+        queryCacheKey
+      }, api2);
+    }
+  }
+  function cleanupPollForKey(key) {
+    const existingPoll = currentPolls[key];
+    if (existingPoll == null ? void 0 : existingPoll.timeout) {
+      clearTimeout(existingPoll.timeout);
+    }
+    delete currentPolls[key];
+  }
+  function clearPolls() {
+    for (const key of Object.keys(currentPolls)) {
+      cleanupPollForKey(key);
+    }
+  }
+  function findLowestPollingInterval(subscribers = {}) {
+    let skipPollingIfUnfocused = false;
+    let lowestPollingInterval = Number.POSITIVE_INFINITY;
+    for (let key in subscribers) {
+      if (!!subscribers[key].pollingInterval) {
+        lowestPollingInterval = Math.min(subscribers[key].pollingInterval, lowestPollingInterval);
+        skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;
+      }
+    }
+    return {
+      lowestPollingInterval,
+      skipPollingIfUnfocused
+    };
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/queryLifecycle.ts
+var buildQueryLifecycleHandler = ({
+  api,
+  context,
+  queryThunk,
+  mutationThunk
+}) => {
+  const isPendingThunk = isPending(queryThunk, mutationThunk);
+  const isRejectedThunk = isRejected(queryThunk, mutationThunk);
+  const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk);
+  const lifecycleMap = {};
+  const handler = (action, mwApi) => {
+    var _a, _b, _c;
+    if (isPendingThunk(action)) {
+      const {
+        requestId,
+        arg: {
+          endpointName,
+          originalArgs
+        }
+      } = action.meta;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      const onQueryStarted = endpointDefinition == null ? void 0 : endpointDefinition.onQueryStarted;
+      if (onQueryStarted) {
+        const lifecycle = {};
+        const queryFulfilled = new Promise((resolve, reject) => {
+          lifecycle.resolve = resolve;
+          lifecycle.reject = reject;
+        });
+        queryFulfilled.catch(() => {
+        });
+        lifecycleMap[requestId] = lifecycle;
+        const selector = api.endpoints[endpointName].select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : requestId);
+        const extra = mwApi.dispatch((_, __, extra2) => extra2);
+        const lifecycleApi = __spreadProps(__spreadValues({}, mwApi), {
+          getCacheEntry: () => selector(mwApi.getState()),
+          requestId,
+          extra,
+          updateCachedData: isAnyQueryDefinition(endpointDefinition) ? (updateRecipe) => mwApi.dispatch(api.util.updateQueryData(endpointName, originalArgs, updateRecipe)) : void 0,
+          queryFulfilled
+        });
+        onQueryStarted(originalArgs, lifecycleApi);
+      }
+    } else if (isFullfilledThunk(action)) {
+      const {
+        requestId,
+        baseQueryMeta
+      } = action.meta;
+      (_a = lifecycleMap[requestId]) == null ? void 0 : _a.resolve({
+        data: action.payload,
+        meta: baseQueryMeta
+      });
+      delete lifecycleMap[requestId];
+    } else if (isRejectedThunk(action)) {
+      const {
+        requestId,
+        rejectedWithValue,
+        baseQueryMeta
+      } = action.meta;
+      (_c = lifecycleMap[requestId]) == null ? void 0 : _c.reject({
+        error: (_b = action.payload) != null ? _b : action.error,
+        isUnhandledError: !rejectedWithValue,
+        meta: baseQueryMeta
+      });
+      delete lifecycleMap[requestId];
+    }
+  };
+  return handler;
+};
+
+// src/query/core/buildMiddleware/windowEventHandling.ts
+var buildWindowEventHandler = ({
+  reducerPath,
+  context,
+  api,
+  refetchQuery,
+  internalState
+}) => {
+  const {
+    removeQueryResult
+  } = api.internalActions;
+  const handler = (action, mwApi) => {
+    if (onFocus.match(action)) {
+      refetchValidQueries(mwApi, "refetchOnFocus");
+    }
+    if (onOnline.match(action)) {
+      refetchValidQueries(mwApi, "refetchOnReconnect");
+    }
+  };
+  function refetchValidQueries(api2, type) {
+    const state = api2.getState()[reducerPath];
+    const queries = state.queries;
+    const subscriptions = internalState.currentSubscriptions;
+    context.batch(() => {
+      for (const queryCacheKey of Object.keys(subscriptions)) {
+        const querySubState = queries[queryCacheKey];
+        const subscriptionSubState = subscriptions[queryCacheKey];
+        if (!subscriptionSubState || !querySubState) continue;
+        const shouldRefetch = Object.values(subscriptionSubState).some((sub) => sub[type] === true) || Object.values(subscriptionSubState).every((sub) => sub[type] === void 0) && state.config[type];
+        if (shouldRefetch) {
+          if (countObjectKeys(subscriptionSubState) === 0) {
+            api2.dispatch(removeQueryResult({
+              queryCacheKey
+            }));
+          } else if (querySubState.status !== "uninitialized" /* uninitialized */) {
+            api2.dispatch(refetchQuery(querySubState));
+          }
+        }
+      }
+    });
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/index.ts
+function buildMiddleware(input) {
+  const {
+    reducerPath,
+    queryThunk,
+    api,
+    context
+  } = input;
+  const {
+    apiUid
+  } = context;
+  const actions = {
+    invalidateTags: createAction(`${reducerPath}/invalidateTags`)
+  };
+  const isThisApiSliceAction = (action) => action.type.startsWith(`${reducerPath}/`);
+  const handlerBuilders = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];
+  const middleware = (mwApi) => {
+    let initialized2 = false;
+    const internalState = {
+      currentSubscriptions: {}
+    };
+    const builderArgs = __spreadProps(__spreadValues({}, input), {
+      internalState,
+      refetchQuery,
+      isThisApiSliceAction
+    });
+    const handlers = handlerBuilders.map((build) => build(builderArgs));
+    const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);
+    const windowEventsHandler = buildWindowEventHandler(builderArgs);
+    return (next) => {
+      return (action) => {
+        if (!isAction(action)) {
+          return next(action);
+        }
+        if (!initialized2) {
+          initialized2 = true;
+          mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));
+        }
+        const mwApiWithNext = __spreadProps(__spreadValues({}, mwApi), {
+          next
+        });
+        const stateBefore = mwApi.getState();
+        const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);
+        let res;
+        if (actionShouldContinue) {
+          res = next(action);
+        } else {
+          res = internalProbeResult;
+        }
+        if (!!mwApi.getState()[reducerPath]) {
+          windowEventsHandler(action, mwApiWithNext, stateBefore);
+          if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {
+            for (const handler of handlers) {
+              handler(action, mwApiWithNext, stateBefore);
+            }
+          }
+        }
+        return res;
+      };
+    };
+  };
+  return {
+    middleware,
+    actions
+  };
+  function refetchQuery(querySubState) {
+    return input.api.endpoints[querySubState.endpointName].initiate(querySubState.originalArgs, {
+      subscribe: false,
+      forceRefetch: true
+    });
+  }
+}
+
+// src/query/core/module.ts
+var coreModuleName = /* @__PURE__ */ Symbol();
+var coreModule = ({
+  createSelector: createSelector2 = createSelector
+} = {}) => ({
+  name: coreModuleName,
+  init(api, {
+    baseQuery,
+    tagTypes,
+    reducerPath,
+    serializeQueryArgs,
+    keepUnusedDataFor,
+    refetchOnMountOrArgChange,
+    refetchOnFocus,
+    refetchOnReconnect,
+    invalidationBehavior,
+    onSchemaFailure,
+    catchSchemaFailure,
+    skipSchemaValidation
+  }, context) {
+    enablePatches();
+    assertCast(serializeQueryArgs);
+    const assertTagType = (tag) => {
+      if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+        if (!tagTypes.includes(tag.type)) {
+          console.error(`Tag type '${tag.type}' was used, but not specified in \`tagTypes\`!`);
+        }
+      }
+      return tag;
+    };
+    Object.assign(api, {
+      reducerPath,
+      endpoints: {},
+      internalActions: {
+        onOnline,
+        onOffline,
+        onFocus,
+        onFocusLost
+      },
+      util: {}
+    });
+    const selectors = buildSelectors({
+      serializeQueryArgs,
+      reducerPath,
+      createSelector: createSelector2
+    });
+    const {
+      selectInvalidatedBy,
+      selectCachedArgsForQuery,
+      buildQuerySelector,
+      buildInfiniteQuerySelector,
+      buildMutationSelector
+    } = selectors;
+    safeAssign(api.util, {
+      selectInvalidatedBy,
+      selectCachedArgsForQuery
+    });
+    const {
+      queryThunk,
+      infiniteQueryThunk,
+      mutationThunk,
+      patchQueryData,
+      updateQueryData,
+      upsertQueryData,
+      prefetch,
+      buildMatchThunkActions
+    } = buildThunks({
+      baseQuery,
+      reducerPath,
+      context,
+      api,
+      serializeQueryArgs,
+      assertTagType,
+      selectors,
+      onSchemaFailure,
+      catchSchemaFailure,
+      skipSchemaValidation
+    });
+    const {
+      reducer,
+      actions: sliceActions
+    } = buildSlice({
+      context,
+      queryThunk,
+      infiniteQueryThunk,
+      mutationThunk,
+      serializeQueryArgs,
+      reducerPath,
+      assertTagType,
+      config: {
+        refetchOnFocus,
+        refetchOnReconnect,
+        refetchOnMountOrArgChange,
+        keepUnusedDataFor,
+        reducerPath,
+        invalidationBehavior
+      }
+    });
+    safeAssign(api.util, {
+      patchQueryData,
+      updateQueryData,
+      upsertQueryData,
+      prefetch,
+      resetApiState: sliceActions.resetApiState,
+      upsertQueryEntries: sliceActions.cacheEntriesUpserted
+    });
+    safeAssign(api.internalActions, sliceActions);
+    const {
+      middleware,
+      actions: middlewareActions
+    } = buildMiddleware({
+      reducerPath,
+      context,
+      queryThunk,
+      mutationThunk,
+      infiniteQueryThunk,
+      api,
+      assertTagType,
+      selectors
+    });
+    safeAssign(api.util, middlewareActions);
+    safeAssign(api, {
+      reducer,
+      middleware
+    });
+    const {
+      buildInitiateQuery,
+      buildInitiateInfiniteQuery,
+      buildInitiateMutation,
+      getRunningMutationThunk,
+      getRunningMutationsThunk,
+      getRunningQueriesThunk,
+      getRunningQueryThunk
+    } = buildInitiate({
+      queryThunk,
+      mutationThunk,
+      infiniteQueryThunk,
+      api,
+      serializeQueryArgs,
+      context
+    });
+    safeAssign(api.util, {
+      getRunningMutationThunk,
+      getRunningMutationsThunk,
+      getRunningQueryThunk,
+      getRunningQueriesThunk
+    });
+    return {
+      name: coreModuleName,
+      injectEndpoint(endpointName, definition) {
+        var _a, _b;
+        const anyApi = api;
+        const endpoint = (_b = (_a = anyApi.endpoints)[endpointName]) != null ? _b : _a[endpointName] = {};
+        if (isQueryDefinition(definition)) {
+          safeAssign(endpoint, {
+            name: endpointName,
+            select: buildQuerySelector(endpointName, definition),
+            initiate: buildInitiateQuery(endpointName, definition)
+          }, buildMatchThunkActions(queryThunk, endpointName));
+        }
+        if (isMutationDefinition(definition)) {
+          safeAssign(endpoint, {
+            name: endpointName,
+            select: buildMutationSelector(),
+            initiate: buildInitiateMutation(endpointName)
+          }, buildMatchThunkActions(mutationThunk, endpointName));
+        }
+        if (isInfiniteQueryDefinition(definition)) {
+          safeAssign(endpoint, {
+            name: endpointName,
+            select: buildInfiniteQuerySelector(endpointName, definition),
+            initiate: buildInitiateInfiniteQuery(endpointName, definition)
+          }, buildMatchThunkActions(queryThunk, endpointName));
+        }
+      }
+    };
+  }
+});
+
+// src/query/core/index.ts
+var createApi = /* @__PURE__ */ buildCreateApi(coreModule());
+export {
+  NamedSchemaError,
+  QueryStatus,
+  _NEVER,
+  buildCreateApi,
+  copyWithStructuralSharing,
+  coreModule,
+  coreModuleName,
+  createApi,
+  defaultSerializeQueryArgs,
+  fakeBaseQuery,
+  fetchBaseQuery,
+  retry,
+  setupListeners,
+  skipToken
+};
+//# sourceMappingURL=rtk-query.legacy-esm.js.map
Index: node_modules/@reduxjs/toolkit/dist/query/rtk-query.legacy-esm.js.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/rtk-query.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/rtk-query.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/query/core/apiState.ts","../../src/query/core/rtkImports.ts","../../src/query/utils/copyWithStructuralSharing.ts","../../src/query/utils/countObjectKeys.ts","../../src/query/utils/flatten.ts","../../src/query/utils/isAbsoluteUrl.ts","../../src/query/utils/isDocumentVisible.ts","../../src/query/utils/isNotNullish.ts","../../src/query/utils/isOnline.ts","../../src/query/utils/joinUrls.ts","../../src/query/utils/getOrInsert.ts","../../src/query/fetchBaseQuery.ts","../../src/query/HandledError.ts","../../src/query/retry.ts","../../src/query/core/setupListeners.ts","../../src/query/endpointDefinitions.ts","../../src/query/core/buildThunks.ts","../../src/query/core/buildInitiate.ts","../../src/tsHelpers.ts","../../src/query/standardSchema.ts","../../src/query/core/buildSlice.ts","../../src/query/core/buildSelectors.ts","../../src/query/createApi.ts","../../src/query/defaultSerializeQueryArgs.ts","../../src/query/fakeBaseQuery.ts","../../src/query/core/module.ts","../../src/query/tsHelpers.ts","../../src/query/core/buildMiddleware/batchActions.ts","../../src/query/core/buildMiddleware/cacheCollection.ts","../../src/query/core/buildMiddleware/cacheLifecycle.ts","../../src/query/core/buildMiddleware/devMiddleware.ts","../../src/query/core/buildMiddleware/invalidationByTags.ts","../../src/query/core/buildMiddleware/polling.ts","../../src/query/core/buildMiddleware/queryLifecycle.ts","../../src/query/core/buildMiddleware/windowEventHandling.ts","../../src/query/core/buildMiddleware/index.ts","../../src/query/core/index.ts"],"sourcesContent":["import type { SerializedError } from '@reduxjs/toolkit';\nimport type { BaseQueryError } from '../baseQueryTypes';\nimport type { BaseEndpointDefinition, EndpointDefinitions, FullTagDescription, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFromAnyQuery, QueryDefinition, ResultTypeFrom } from '../endpointDefinitions';\nimport type { Id, WithRequiredProp } from '../tsHelpers';\nexport type QueryCacheKey = string & {\n  _type: 'queryCacheKey';\n};\nexport type QuerySubstateIdentifier = {\n  queryCacheKey: QueryCacheKey;\n};\nexport type MutationSubstateIdentifier = {\n  requestId: string;\n  fixedCacheKey?: string;\n} | {\n  requestId?: string;\n  fixedCacheKey: string;\n};\nexport type RefetchConfigOptions = {\n  refetchOnMountOrArgChange: boolean | number;\n  refetchOnReconnect: boolean;\n  refetchOnFocus: boolean;\n};\nexport type InfiniteQueryConfigOptions<DataType, PageParam, QueryArg> = {\n  /**\n   * The initial page parameter to use for the first page fetch.\n   */\n  initialPageParam: PageParam;\n  /**\n   * This function is required to automatically get the next cursor for infinite queries.\n   * The result will also be used to determine the value of `hasNextPage`.\n   */\n  getNextPageParam: (lastPage: DataType, allPages: Array<DataType>, lastPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * This function can be set to automatically get the previous cursor for infinite queries.\n   * The result will also be used to determine the value of `hasPreviousPage`.\n   */\n  getPreviousPageParam?: (firstPage: DataType, allPages: Array<DataType>, firstPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * If specified, only keep this many pages in cache at once.\n   * If additional pages are fetched, older pages in the other\n   * direction will be dropped from the cache.\n   */\n  maxPages?: number;\n};\nexport type InfiniteData<DataType, PageParam> = {\n  pages: Array<DataType>;\n  pageParams: Array<PageParam>;\n};\n\n/**\n * Strings describing the query state at any given time.\n */\nexport enum QueryStatus {\n  uninitialized = 'uninitialized',\n  pending = 'pending',\n  fulfilled = 'fulfilled',\n  rejected = 'rejected',\n}\nexport type RequestStatusFlags = {\n  status: QueryStatus.uninitialized;\n  isUninitialized: true;\n  isLoading: false;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.pending;\n  isUninitialized: false;\n  isLoading: true;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.fulfilled;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: true;\n  isError: false;\n} | {\n  status: QueryStatus.rejected;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: false;\n  isError: true;\n};\nexport function getRequestStatusFlags(status: QueryStatus): RequestStatusFlags {\n  return {\n    status,\n    isUninitialized: status === QueryStatus.uninitialized,\n    isLoading: status === QueryStatus.pending,\n    isSuccess: status === QueryStatus.fulfilled,\n    isError: status === QueryStatus.rejected\n  } as any;\n}\n\n/**\n * @public\n */\nexport type SubscriptionOptions = {\n  /**\n   * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).\n   */\n  pollingInterval?: number;\n  /**\n   *  Defaults to 'false'. This setting allows you to control whether RTK Query will continue polling if the window is not focused.\n   *\n   *  If pollingInterval is not set or set to 0, this **will not be evaluated** until pollingInterval is greater than 0.\n   *\n   *  Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  skipPollingIfUnfocused?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n};\nexport type Subscribers = {\n  [requestId: string]: SubscriptionOptions;\n};\nexport type QueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any> ? K : never }[keyof Definitions];\nexport type InfiniteQueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? K : never }[keyof Definitions];\nexport type MutationKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends MutationDefinition<any, any, any, any> ? K : never }[keyof Definitions];\ntype BaseQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = {\n  /**\n   * The argument originally passed into the hook or `initiate` action call\n   */\n  originalArgs: QueryArgFromAnyQuery<D>;\n  /**\n   * A unique ID associated with the request\n   */\n  requestId: string;\n  /**\n   * The received data from the query\n   */\n  data?: DataType;\n  /**\n   * The received error if applicable\n   */\n  error?: SerializedError | (D extends QueryDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  /**\n   * The name of the endpoint associated with the query\n   */\n  endpointName: string;\n  /**\n   * Time that the latest query started\n   */\n  startedTimeStamp: number;\n  /**\n   * Time that the latest query was fulfilled\n   */\n  fulfilledTimeStamp?: number;\n};\nexport type QuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = Id<({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'data' | 'fulfilledTimeStamp'> & {\n  error: undefined;\n}) | ({\n  status: QueryStatus.pending;\n} & BaseQuerySubState<D, DataType>) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'error'>) | {\n  status: QueryStatus.uninitialized;\n  originalArgs?: undefined;\n  data?: undefined;\n  error?: undefined;\n  requestId?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n}>;\nexport type InfiniteQueryDirection = 'forward' | 'backward';\nexport type InfiniteQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any> ? QuerySubState<D, InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>> & {\n  direction?: InfiniteQueryDirection;\n} : never;\ntype BaseMutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = {\n  requestId: string;\n  data?: ResultTypeFrom<D>;\n  error?: SerializedError | (D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  endpointName: string;\n  startedTimeStamp: number;\n  fulfilledTimeStamp?: number;\n};\nexport type MutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = (({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseMutationSubState<D>, 'data' | 'fulfilledTimeStamp'>) & {\n  error: undefined;\n}) | (({\n  status: QueryStatus.pending;\n} & BaseMutationSubState<D>) & {\n  data?: undefined;\n}) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseMutationSubState<D>, 'error'>) | {\n  requestId?: undefined;\n  status: QueryStatus.uninitialized;\n  data?: undefined;\n  error?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n};\nexport type CombinedState<D extends EndpointDefinitions, E extends string, ReducerPath extends string> = {\n  queries: QueryState<D>;\n  mutations: MutationState<D>;\n  provided: InvalidationState<E>;\n  subscriptions: SubscriptionState;\n  config: ConfigState<ReducerPath>;\n};\nexport type InvalidationState<TagTypes extends string> = {\n  tags: { [_ in TagTypes]: {\n    [id: string]: Array<QueryCacheKey>;\n    [id: number]: Array<QueryCacheKey>;\n  } };\n  keys: Record<QueryCacheKey, Array<FullTagDescription<any>>>;\n};\nexport type QueryState<D extends EndpointDefinitions> = {\n  [queryCacheKey: string]: QuerySubState<D[string]> | InfiniteQuerySubState<D[string]> | undefined;\n};\nexport type SubscriptionState = {\n  [queryCacheKey: string]: Subscribers | undefined;\n};\nexport type ConfigState<ReducerPath> = RefetchConfigOptions & {\n  reducerPath: ReducerPath;\n  online: boolean;\n  focused: boolean;\n  middlewareRegistered: boolean | 'conflict';\n} & ModifiableConfigState;\nexport type ModifiableConfigState = {\n  keepUnusedDataFor: number;\n  invalidationBehavior: 'delayed' | 'immediately';\n} & RefetchConfigOptions;\nexport type MutationState<D extends EndpointDefinitions> = {\n  [requestId: string]: MutationSubState<D[string]> | undefined;\n};\nexport type RootState<Definitions extends EndpointDefinitions, TagTypes extends string, ReducerPath extends string> = { [P in ReducerPath]: CombinedState<Definitions, TagTypes, P> };","// This file exists to consolidate all of the imports from the `@reduxjs/toolkit` package.\n// ESBuild does not de-duplicate imports, so this file is used to ensure that each method\n// imported is only listed once, and there's only one mention of the `@reduxjs/toolkit` package.\n\nexport { createAction, createSlice, createSelector, createAsyncThunk, combineReducers, createNextState, isAnyOf, isAllOf, isAction, isPending, isRejected, isFulfilled, isRejectedWithValue, isAsyncThunkAction, prepareAutoBatched, SHOULD_AUTOBATCH, isPlainObject, nanoid } from '@reduxjs/toolkit';","import { isPlainObject as _iPO } from '../core/rtkImports';\n\n// remove type guard\nconst isPlainObject: (_: any) => boolean = _iPO;\nexport function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T;\nexport function copyWithStructuralSharing(oldObj: any, newObj: any): any {\n  if (oldObj === newObj || !(isPlainObject(oldObj) && isPlainObject(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {\n    return newObj;\n  }\n  const newKeys = Object.keys(newObj);\n  const oldKeys = Object.keys(oldObj);\n  let isSameObject = newKeys.length === oldKeys.length;\n  const mergeObj: any = Array.isArray(newObj) ? [] : {};\n  for (const key of newKeys) {\n    mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);\n    if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];\n  }\n  return isSameObject ? oldObj : mergeObj;\n}","// Fast method for counting an object's keys\n// without resorting to `Object.keys(obj).length\n// Will this make a big difference in perf? Probably not\n// But we can save a few allocations.\n\nexport function countObjectKeys(obj: Record<any, any>) {\n  let count = 0;\n  for (const _key in obj) {\n    count++;\n  }\n  return count;\n}","/**\r\n * Alternative to `Array.flat(1)`\r\n * @param arr An array like [1,2,3,[1,2]]\r\n * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\r\n */\nexport const flatten = (arr: readonly any[]) => [].concat(...arr);","/**\r\n * If either :// or // is present consider it to be an absolute url\r\n *\r\n * @param url string\r\n */\n\nexport function isAbsoluteUrl(url: string) {\n  return new RegExp(`(^|:)//`).test(url);\n}","/**\r\n * Assumes true for a non-browser env, otherwise makes a best effort\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState\r\n */\nexport function isDocumentVisible(): boolean {\n  // `document` may not exist in non-browser envs (like RN)\n  if (typeof document === 'undefined') {\n    return true;\n  }\n  // Match true for visible, prerender, undefined\n  return document.visibilityState !== 'hidden';\n}","export function isNotNullish<T>(v: T | null | undefined): v is T {\n  return v != null;\n}","/**\n * Assumes a browser is online if `undefined`, otherwise makes a best effort\n * @link https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine\n */\nexport function isOnline() {\n  // We set the default config value in the store, so we'd need to check for this in a SSR env\n  return typeof navigator === 'undefined' ? true : navigator.onLine === undefined ? true : navigator.onLine;\n}","import { isAbsoluteUrl } from './isAbsoluteUrl';\nconst withoutTrailingSlash = (url: string) => url.replace(/\\/$/, '');\nconst withoutLeadingSlash = (url: string) => url.replace(/^\\//, '');\nexport function joinUrls(base: string | undefined, url: string | undefined): string {\n  if (!base) {\n    return url!;\n  }\n  if (!url) {\n    return base;\n  }\n  if (isAbsoluteUrl(url)) {\n    return url;\n  }\n  const delimiter = base.endsWith('/') || !url.startsWith('?') ? '/' : '';\n  base = withoutTrailingSlash(base);\n  url = withoutLeadingSlash(url);\n  return `${base}${delimiter}${url}`;\n}","export function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}","import { joinUrls } from './utils';\nimport { isPlainObject } from './core/rtkImports';\nimport type { BaseQueryApi, BaseQueryFn } from './baseQueryTypes';\nimport type { MaybePromise, Override } from './tsHelpers';\nexport type ResponseHandler = 'content-type' | 'json' | 'text' | ((response: Response) => Promise<any>);\ntype CustomRequestInit = Override<RequestInit, {\n  headers?: Headers | string[][] | Record<string, string | undefined> | undefined;\n}>;\nexport interface FetchArgs extends CustomRequestInit {\n  url: string;\n  params?: Record<string, any>;\n  body?: any;\n  responseHandler?: ResponseHandler;\n  validateStatus?: (response: Response, body: any) => boolean;\n  /**\n   * A number in milliseconds that represents that maximum time a request can take before timing out.\n   */\n  timeout?: number;\n}\n\n/**\n * A mini-wrapper that passes arguments straight through to\n * {@link [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)}.\n * Avoids storing `fetch` in a closure, in order to permit mocking/monkey-patching.\n */\nconst defaultFetchFn: typeof fetch = (...args) => fetch(...args);\nconst defaultValidateStatus = (response: Response) => response.status >= 200 && response.status <= 299;\nconst defaultIsJsonContentType = (headers: Headers) => /*applicat*//ion\\/(vnd\\.api\\+)?json/.test(headers.get('content-type') || '');\nexport type FetchBaseQueryError = {\n  /**\n   * * `number`:\n   *   HTTP status code\n   */\n  status: number;\n  data: unknown;\n} | {\n  /**\n   * * `\"FETCH_ERROR\"`:\n   *   An error that occurred during execution of `fetch` or the `fetchFn` callback option\n   **/\n  status: 'FETCH_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"PARSING_ERROR\"`:\n   *   An error happened during parsing.\n   *   Most likely a non-JSON-response was returned with the default `responseHandler` \"JSON\",\n   *   or an error occurred while executing a custom `responseHandler`.\n   **/\n  status: 'PARSING_ERROR';\n  originalStatus: number;\n  data: string;\n  error: string;\n} | {\n  /**\n   * * `\"TIMEOUT_ERROR\"`:\n   *   Request timed out\n   **/\n  status: 'TIMEOUT_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"CUSTOM_ERROR\"`:\n   *   A custom error type that you can return from your `queryFn` where another error might not make sense.\n   **/\n  status: 'CUSTOM_ERROR';\n  data?: unknown;\n  error: string;\n};\nfunction stripUndefined(obj: any) {\n  if (!isPlainObject(obj)) {\n    return obj;\n  }\n  const copy: Record<string, any> = {\n    ...obj\n  };\n  for (const [k, v] of Object.entries(copy)) {\n    if (v === undefined) delete copy[k];\n  }\n  return copy;\n}\nexport type FetchBaseQueryArgs = {\n  baseUrl?: string;\n  prepareHeaders?: (headers: Headers, api: Pick<BaseQueryApi, 'getState' | 'extra' | 'endpoint' | 'type' | 'forced'> & {\n    arg: string | FetchArgs;\n    extraOptions: unknown;\n  }) => MaybePromise<Headers | void>;\n  fetchFn?: (input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>;\n  paramsSerializer?: (params: Record<string, any>) => string;\n  /**\n   * By default, we only check for 'application/json' and 'application/vnd.api+json' as the content-types for json. If you need to support another format, you can pass\n   * in a predicate function for your given api to get the same automatic stringifying behavior\n   * @example\n   * ```ts\n   * const isJsonContentType = (headers: Headers) => [\"application/vnd.api+json\", \"application/json\", \"application/vnd.hal+json\"].includes(headers.get(\"content-type\")?.trim());\n   * ```\n   */\n  isJsonContentType?: (headers: Headers) => boolean;\n  /**\n   * Defaults to `application/json`;\n   */\n  jsonContentType?: string;\n\n  /**\n   * Custom replacer function used when calling `JSON.stringify()`;\n   */\n  jsonReplacer?: (this: any, key: string, value: any) => any;\n} & RequestInit & Pick<FetchArgs, 'responseHandler' | 'validateStatus' | 'timeout'>;\nexport type FetchBaseQueryMeta = {\n  request: Request;\n  response?: Response;\n};\n\n/**\n * This is a very small wrapper around fetch that aims to simplify requests.\n *\n * @example\n * ```ts\n * const baseQuery = fetchBaseQuery({\n *   baseUrl: 'https://api.your-really-great-app.com/v1/',\n *   prepareHeaders: (headers, { getState }) => {\n *     const token = (getState() as RootState).auth.token;\n *     // If we have a token set in state, let's assume that we should be passing it.\n *     if (token) {\n *       headers.set('authorization', `Bearer ${token}`);\n *     }\n *     return headers;\n *   },\n * })\n * ```\n *\n * @param {string} baseUrl\n * The base URL for an API service.\n * Typically in the format of https://example.com/\n *\n * @param {(headers: Headers, api: { getState: () => unknown; arg: string | FetchArgs; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders\n * An optional function that can be used to inject headers on requests.\n * Provides a Headers object, most of the `BaseQueryApi` (`dispatch` is not available), and the arg passed into the query function.\n * Useful for setting authentication or headers that need to be set conditionally.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers\n *\n * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>} fetchFn\n * Accepts a custom `fetch` function if you do not want to use the default on the window.\n * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`\n *\n * @param {(params: Record<string, unknown>) => string} paramsSerializer\n * An optional function that can be used to stringify querystring parameters.\n *\n * @param {(headers: Headers) => boolean} isJsonContentType\n * An optional predicate function to determine if `JSON.stringify()` should be called on the `body` arg of `FetchArgs`\n *\n * @param {string} jsonContentType Used when automatically setting the content-type header for a request with a jsonifiable body that does not have an explicit content-type header. Defaults to `application/json`.\n *\n * @param {(this: any, key: string, value: any) => any} jsonReplacer Custom replacer function used when calling `JSON.stringify()`.\n *\n * @param {number} timeout\n * A number in milliseconds that represents the maximum time a request can take before timing out.\n */\n\nexport function fetchBaseQuery({\n  baseUrl,\n  prepareHeaders = x => x,\n  fetchFn = defaultFetchFn,\n  paramsSerializer,\n  isJsonContentType = defaultIsJsonContentType,\n  jsonContentType = 'application/json',\n  jsonReplacer,\n  timeout: defaultTimeout,\n  responseHandler: globalResponseHandler,\n  validateStatus: globalValidateStatus,\n  ...baseFetchOptions\n}: FetchBaseQueryArgs = {}): BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta> {\n  if (typeof fetch === 'undefined' && fetchFn === defaultFetchFn) {\n    console.warn('Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.');\n  }\n  return async (arg, api, extraOptions) => {\n    const {\n      getState,\n      extra,\n      endpoint,\n      forced,\n      type\n    } = api;\n    let meta: FetchBaseQueryMeta | undefined;\n    let {\n      url,\n      headers = new Headers(baseFetchOptions.headers),\n      params = undefined,\n      responseHandler = globalResponseHandler ?? 'json' as const,\n      validateStatus = globalValidateStatus ?? defaultValidateStatus,\n      timeout = defaultTimeout,\n      ...rest\n    } = typeof arg == 'string' ? {\n      url: arg\n    } : arg;\n    let abortController: AbortController | undefined,\n      signal = api.signal;\n    if (timeout) {\n      abortController = new AbortController();\n      api.signal.addEventListener('abort', abortController.abort);\n      signal = abortController.signal;\n    }\n    let config: RequestInit = {\n      ...baseFetchOptions,\n      signal,\n      ...rest\n    };\n    headers = new Headers(stripUndefined(headers));\n    config.headers = (await prepareHeaders(headers, {\n      getState,\n      arg,\n      extra,\n      endpoint,\n      forced,\n      type,\n      extraOptions\n    })) || headers;\n\n    // Only set the content-type to json if appropriate. Will not be true for FormData, ArrayBuffer, Blob, etc.\n    const isJsonifiable = (body: any) => typeof body === 'object' && (isPlainObject(body) || Array.isArray(body) || typeof body.toJSON === 'function');\n    if (!config.headers.has('content-type') && isJsonifiable(config.body)) {\n      config.headers.set('content-type', jsonContentType);\n    }\n    if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {\n      config.body = JSON.stringify(config.body, jsonReplacer);\n    }\n    if (params) {\n      const divider = ~url.indexOf('?') ? '&' : '?';\n      const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));\n      url += divider + query;\n    }\n    url = joinUrls(baseUrl, url);\n    const request = new Request(url, config);\n    const requestClone = new Request(url, config);\n    meta = {\n      request: requestClone\n    };\n    let response,\n      timedOut = false,\n      timeoutId = abortController && setTimeout(() => {\n        timedOut = true;\n        abortController!.abort();\n      }, timeout);\n    try {\n      response = await fetchFn(request);\n    } catch (e) {\n      return {\n        error: {\n          status: timedOut ? 'TIMEOUT_ERROR' : 'FETCH_ERROR',\n          error: String(e)\n        },\n        meta\n      };\n    } finally {\n      if (timeoutId) clearTimeout(timeoutId);\n      abortController?.signal.removeEventListener('abort', abortController.abort);\n    }\n    const responseClone = response.clone();\n    meta.response = responseClone;\n    let resultData: any;\n    let responseText: string = '';\n    try {\n      let handleResponseError;\n      await Promise.all([handleResponse(response, responseHandler).then(r => resultData = r, e => handleResponseError = e),\n      // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182\n      // we *have* to \"use up\" both streams at the same time or they will stop running in node-fetch scenarios\n      responseClone.text().then(r => responseText = r, () => {})]);\n      if (handleResponseError) throw handleResponseError;\n    } catch (e) {\n      return {\n        error: {\n          status: 'PARSING_ERROR',\n          originalStatus: response.status,\n          data: responseText,\n          error: String(e)\n        },\n        meta\n      };\n    }\n    return validateStatus(response, resultData) ? {\n      data: resultData,\n      meta\n    } : {\n      error: {\n        status: response.status,\n        data: resultData\n      },\n      meta\n    };\n  };\n  async function handleResponse(response: Response, responseHandler: ResponseHandler) {\n    if (typeof responseHandler === 'function') {\n      return responseHandler(response);\n    }\n    if (responseHandler === 'content-type') {\n      responseHandler = isJsonContentType(response.headers) ? 'json' : 'text';\n    }\n    if (responseHandler === 'json') {\n      const text = await response.text();\n      return text.length ? JSON.parse(text) : null;\n    }\n    return response.text();\n  }\n}","export class HandledError {\n  constructor(public readonly value: any, public readonly meta: any = undefined) {}\n}","import type { BaseQueryApi, BaseQueryArg, BaseQueryEnhancer, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta } from './baseQueryTypes';\nimport type { FetchBaseQueryError } from './fetchBaseQuery';\nimport { HandledError } from './HandledError';\n\n/**\n * Exponential backoff based on the attempt number.\n *\n * @remarks\n * 1. 600ms * random(0.4, 1.4)\n * 2. 1200ms * random(0.4, 1.4)\n * 3. 2400ms * random(0.4, 1.4)\n * 4. 4800ms * random(0.4, 1.4)\n * 5. 9600ms * random(0.4, 1.4)\n *\n * @param attempt - Current attempt\n * @param maxRetries - Maximum number of retries\n */\nasync function defaultBackoff(attempt: number = 0, maxRetries: number = 5) {\n  const attempts = Math.min(attempt, maxRetries);\n  const timeout = ~~((Math.random() + 0.4) * (300 << attempts)); // Force a positive int in the case we make this an option\n  await new Promise(resolve => setTimeout((res: any) => resolve(res), timeout));\n}\ntype RetryConditionFunction = (error: BaseQueryError<BaseQueryFn>, args: BaseQueryArg<BaseQueryFn>, extraArgs: {\n  attempt: number;\n  baseQueryApi: BaseQueryApi;\n  extraOptions: BaseQueryExtraOptions<BaseQueryFn> & RetryOptions;\n}) => boolean;\nexport type RetryOptions = {\n  /**\n   * Function used to determine delay between retries\n   */\n  backoff?: (attempt: number, maxRetries: number) => Promise<void>;\n} & ({\n  /**\n   * How many times the query will be retried (default: 5)\n   */\n  maxRetries?: number;\n  retryCondition?: undefined;\n} | {\n  /**\n   * Callback to determine if a retry should be attempted.\n   * Return `true` for another retry and `false` to quit trying prematurely.\n   */\n  retryCondition?: RetryConditionFunction;\n  maxRetries?: undefined;\n});\nfunction fail<BaseQuery extends BaseQueryFn = BaseQueryFn>(error: BaseQueryError<BaseQuery>, meta?: BaseQueryMeta<BaseQuery>): never {\n  throw Object.assign(new HandledError({\n    error,\n    meta\n  }), {\n    throwImmediately: true\n  });\n}\nconst EMPTY_OPTIONS = {};\nconst retryWithBackoff: BaseQueryEnhancer<unknown, RetryOptions, RetryOptions | void> = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {\n  // We need to figure out `maxRetries` before we define `defaultRetryCondition.\n  // This is probably goofy, but ought to work.\n  // Put our defaults in one array, filter out undefineds, grab the last value.\n  const possibleMaxRetries: number[] = [5, (defaultOptions as any || EMPTY_OPTIONS).maxRetries, (extraOptions as any || EMPTY_OPTIONS).maxRetries].filter(x => x !== undefined);\n  const [maxRetries] = possibleMaxRetries.slice(-1);\n  const defaultRetryCondition: RetryConditionFunction = (_, __, {\n    attempt\n  }) => attempt <= maxRetries;\n  const options: {\n    maxRetries: number;\n    backoff: typeof defaultBackoff;\n    retryCondition: typeof defaultRetryCondition;\n  } = {\n    maxRetries,\n    backoff: defaultBackoff,\n    retryCondition: defaultRetryCondition,\n    ...defaultOptions,\n    ...extraOptions\n  };\n  let retry = 0;\n  while (true) {\n    try {\n      const result = await baseQuery(args, api, extraOptions);\n      // baseQueries _should_ return an error property, so we should check for that and throw it to continue retrying\n      if (result.error) {\n        throw new HandledError(result);\n      }\n      return result;\n    } catch (e: any) {\n      retry++;\n      if (e.throwImmediately) {\n        if (e instanceof HandledError) {\n          return e.value;\n        }\n\n        // We don't know what this is, so we have to rethrow it\n        throw e;\n      }\n      if (e instanceof HandledError && !options.retryCondition(e.value.error as FetchBaseQueryError, args, {\n        attempt: retry,\n        baseQueryApi: api,\n        extraOptions\n      })) {\n        return e.value;\n      }\n      await options.backoff(retry, options.maxRetries);\n    }\n  }\n};\n\n/**\n * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"Retry every request 5 times by default\"\n * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'\n * interface Post {\n *   id: number\n *   name: string\n * }\n * type PostsResponse = Post[]\n *\n * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.\n * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });\n * export const api = createApi({\n *   baseQuery: staggeredBaseQuery,\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsResponse, void>({\n *       query: () => ({ url: 'posts' }),\n *     }),\n *     getPost: build.query<PostsResponse, string>({\n *       query: (id) => ({ url: `post/${id}` }),\n *       extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint\n *     }),\n *   }),\n * });\n *\n * export const { useGetPostsQuery, useGetPostQuery } = api;\n * ```\n */\nexport const retry = /* @__PURE__ */Object.assign(retryWithBackoff, {\n  fail\n});","import type { ThunkDispatch, ActionCreatorWithoutPayload // Workaround for API-Extractor\n} from '@reduxjs/toolkit';\nimport { createAction } from './rtkImports';\nexport const onFocus = /* @__PURE__ */createAction('__rtkq/focused');\nexport const onFocusLost = /* @__PURE__ */createAction('__rtkq/unfocused');\nexport const onOnline = /* @__PURE__ */createAction('__rtkq/online');\nexport const onOffline = /* @__PURE__ */createAction('__rtkq/offline');\nlet initialized = false;\n\n/**\n * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.\n * It requires the dispatch method from your store.\n * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,\n * but you have the option of providing a callback for more granular control.\n *\n * @example\n * ```ts\n * setupListeners(store.dispatch)\n * ```\n *\n * @param dispatch - The dispatch method from your store\n * @param customHandler - An optional callback for more granular control over listener behavior\n * @returns Return value of the handler.\n * The default handler returns an `unsubscribe` method that can be called to remove the listeners.\n */\nexport function setupListeners(dispatch: ThunkDispatch<any, any, any>, customHandler?: (dispatch: ThunkDispatch<any, any, any>, actions: {\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n}) => () => void) {\n  function defaultHandler() {\n    const handleFocus = () => dispatch(onFocus());\n    const handleFocusLost = () => dispatch(onFocusLost());\n    const handleOnline = () => dispatch(onOnline());\n    const handleOffline = () => dispatch(onOffline());\n    const handleVisibilityChange = () => {\n      if (window.document.visibilityState === 'visible') {\n        handleFocus();\n      } else {\n        handleFocusLost();\n      }\n    };\n    if (!initialized) {\n      if (typeof window !== 'undefined' && window.addEventListener) {\n        // Handle focus events\n        window.addEventListener('visibilitychange', handleVisibilityChange, false);\n        window.addEventListener('focus', handleFocus, false);\n\n        // Handle connection events\n        window.addEventListener('online', handleOnline, false);\n        window.addEventListener('offline', handleOffline, false);\n        initialized = true;\n      }\n    }\n    const unsubscribe = () => {\n      window.removeEventListener('focus', handleFocus);\n      window.removeEventListener('visibilitychange', handleVisibilityChange);\n      window.removeEventListener('online', handleOnline);\n      window.removeEventListener('offline', handleOffline);\n      initialized = false;\n    };\n    return unsubscribe;\n  }\n  return customHandler ? customHandler(dispatch, {\n    onFocus,\n    onFocusLost,\n    onOffline,\n    onOnline\n  }) : defaultHandler();\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","import type { AsyncThunk, AsyncThunkPayloadCreator, Draft, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Patch } from 'immer';\nimport { isDraftable, produceWithPatches } from 'immer';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, BaseQueryFn, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryCombinedArg, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFrom, QueryDefinition, ResultDescription, ResultTypeFrom, SchemaFailureConverter, SchemaFailureHandler, SchemaFailureInfo } from '../endpointDefinitions';\nimport { calculateProvidedBy, isInfiniteQueryDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { HandledError } from '../HandledError';\nimport type { UnwrapPromise } from '../tsHelpers';\nimport type { RootState, QueryKeys, QuerySubstateIdentifier, InfiniteData, InfiniteQueryConfigOptions, QueryCacheKey, InfiniteQueryDirection, InfiniteQueryKeys } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { InfiniteQueryActionCreatorResult, QueryActionCreatorResult, StartInfiniteQueryActionCreatorOptions, StartQueryActionCreatorOptions } from './buildInitiate';\nimport { forceQueryFnSymbol, isUpsertQuery } from './buildInitiate';\nimport type { AllSelectors } from './buildSelectors';\nimport type { ApiEndpointQuery, PrefetchOptions } from './module';\nimport { createAsyncThunk, isAllOf, isFulfilled, isPending, isRejected, isRejectedWithValue, SHOULD_AUTOBATCH } from './rtkImports';\nimport { parseWithSchema, NamedSchemaError } from '../standardSchema';\nexport type BuildThunksApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = Matchers<QueryThunk, Definition>;\nexport type BuildThunksApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = Matchers<InfiniteQueryThunk<any>, Definition>;\nexport type BuildThunksApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = Matchers<MutationThunk, Definition>;\ntype EndpointThunk<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = Definition extends EndpointDefinition<infer QueryArg, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<ResultType, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<InfiniteData<ResultType, PageParam>, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : never;\nexport type PendingAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['pending']>;\nexport type FulfilledAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['fulfilled']>;\nexport type RejectedAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['rejected']>;\nexport type Matcher<M> = (value: any) => value is M;\nexport interface Matchers<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> {\n  matchPending: Matcher<PendingAction<Thunk, Definition>>;\n  matchFulfilled: Matcher<FulfilledAction<Thunk, Definition>>;\n  matchRejected: Matcher<RejectedAction<Thunk, Definition>>;\n}\nexport type QueryThunkArg = QuerySubstateIdentifier & StartQueryActionCreatorOptions & {\n  type: 'query';\n  originalArgs: unknown;\n  endpointName: string;\n};\nexport type InfiniteQueryThunkArg<D extends InfiniteQueryDefinition<any, any, any, any, any>> = QuerySubstateIdentifier & StartInfiniteQueryActionCreatorOptions<D> & {\n  type: `query`;\n  originalArgs: unknown;\n  endpointName: string;\n  param: unknown;\n  direction?: InfiniteQueryDirection;\n};\ntype MutationThunkArg = {\n  type: 'mutation';\n  originalArgs: unknown;\n  endpointName: string;\n  track?: boolean;\n  fixedCacheKey?: string;\n};\nexport type ThunkResult = unknown;\nexport type ThunkApiMetaConfig = {\n  pendingMeta: {\n    startedTimeStamp: number;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  fulfilledMeta: {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  rejectedMeta: {\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n};\nexport type QueryThunk = AsyncThunk<ThunkResult, QueryThunkArg, ThunkApiMetaConfig>;\nexport type InfiniteQueryThunk<D extends InfiniteQueryDefinition<any, any, any, any, any>> = AsyncThunk<ThunkResult, InfiniteQueryThunkArg<D>, ThunkApiMetaConfig>;\nexport type MutationThunk = AsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig>;\nfunction defaultTransformResponse(baseQueryReturnValue: unknown) {\n  return baseQueryReturnValue;\n}\nexport type MaybeDrafted<T> = T | Draft<T>;\nexport type Recipe<T> = (data: MaybeDrafted<T>) => void | MaybeDrafted<T>;\nexport type UpsertRecipe<T> = (data: MaybeDrafted<T> | undefined) => void | MaybeDrafted<T>;\nexport type PatchQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, patches: readonly Patch[], updateProvided?: boolean) => ThunkAction<void, PartialState, any, UnknownAction>;\nexport type AllQueryKeys<Definitions extends EndpointDefinitions> = QueryKeys<Definitions> | InfiniteQueryKeys<Definitions>;\nexport type QueryArgFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryArgFrom<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryArgFrom<Definitions[EndpointName]> : never;\nexport type DataFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteData<ResultTypeFrom<Definitions[EndpointName]>, PageParamFrom<Definitions[EndpointName]>> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? ResultTypeFrom<Definitions[EndpointName]> : unknown;\nexport type UpsertThunkResult<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryActionCreatorResult<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryActionCreatorResult<Definitions[EndpointName]> : QueryActionCreatorResult<never>;\nexport type UpdateQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, updateRecipe: Recipe<DataFromAnyQueryDefinition<Definitions, EndpointName>>, updateProvided?: boolean) => ThunkAction<PatchCollection, PartialState, any, UnknownAction>;\nexport type UpsertQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, value: DataFromAnyQueryDefinition<Definitions, EndpointName>) => ThunkAction<UpsertThunkResult<Definitions, EndpointName>, PartialState, any, UnknownAction>;\n\n/**\n * An object returned from dispatching a `api.util.updateQueryData` call.\n */\nexport type PatchCollection = {\n  /**\n   * An `immer` Patch describing the cache update.\n   */\n  patches: Patch[];\n  /**\n   * An `immer` Patch to revert the cache update.\n   */\n  inversePatches: Patch[];\n  /**\n   * A function that will undo the cache update.\n   */\n  undo: () => void;\n};\ntype TransformCallback = (baseQueryReturnValue: unknown, meta: unknown, arg: unknown) => any;\nexport const addShouldAutoBatch = <T extends Record<string, any>,>(arg: T = {} as T): T & {\n  [SHOULD_AUTOBATCH]: true;\n} => {\n  return {\n    ...arg,\n    [SHOULD_AUTOBATCH]: true\n  };\n};\nexport function buildThunks<BaseQuery extends BaseQueryFn, ReducerPath extends string, Definitions extends EndpointDefinitions>({\n  reducerPath,\n  baseQuery,\n  context: {\n    endpointDefinitions\n  },\n  serializeQueryArgs,\n  api,\n  assertTagType,\n  selectors,\n  onSchemaFailure,\n  catchSchemaFailure: globalCatchSchemaFailure,\n  skipSchemaValidation: globalSkipSchemaValidation\n}: {\n  baseQuery: BaseQuery;\n  reducerPath: ReducerPath;\n  context: ApiContext<Definitions>;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  api: Api<BaseQuery, Definitions, ReducerPath, any>;\n  assertTagType: AssertTagTypes;\n  selectors: AllSelectors;\n  onSchemaFailure: SchemaFailureHandler | undefined;\n  catchSchemaFailure: SchemaFailureConverter<BaseQuery> | undefined;\n  skipSchemaValidation: boolean | undefined;\n}) {\n  type State = RootState<any, string, ReducerPath>;\n  const patchQueryData: PatchQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {\n    const endpointDefinition = endpointDefinitions[endpointName];\n    const queryCacheKey = serializeQueryArgs({\n      queryArgs: arg,\n      endpointDefinition,\n      endpointName\n    });\n    dispatch(api.internalActions.queryResultPatched({\n      queryCacheKey,\n      patches\n    }));\n    if (!updateProvided) {\n      return;\n    }\n    const newValue = api.endpoints[endpointName].select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, undefined, arg, {}, assertTagType);\n    dispatch(api.internalActions.updateProvidedBy([{\n      queryCacheKey,\n      providedTags\n    }]));\n  };\n  function addToStart<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [item, ...items];\n    return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n  }\n  function addToEnd<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [...items, item];\n    return max && newItems.length > max ? newItems.slice(1) : newItems;\n  }\n  const updateQueryData: UpdateQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {\n    const endpointDefinition = api.endpoints[endpointName];\n    const currentState = endpointDefinition.select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const ret: PatchCollection = {\n      patches: [],\n      inversePatches: [],\n      undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))\n    };\n    if (currentState.status === QueryStatus.uninitialized) {\n      return ret;\n    }\n    let newValue;\n    if ('data' in currentState) {\n      if (isDraftable(currentState.data)) {\n        const [value, patches, inversePatches] = produceWithPatches(currentState.data, updateRecipe);\n        ret.patches.push(...patches);\n        ret.inversePatches.push(...inversePatches);\n        newValue = value;\n      } else {\n        newValue = updateRecipe(currentState.data);\n        ret.patches.push({\n          op: 'replace',\n          path: [],\n          value: newValue\n        });\n        ret.inversePatches.push({\n          op: 'replace',\n          path: [],\n          value: currentState.data\n        });\n      }\n    }\n    if (ret.patches.length === 0) {\n      return ret;\n    }\n    dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));\n    return ret;\n  };\n  const upsertQueryData: UpsertQueryDataThunk<Definitions, State> = (endpointName, arg, value) => dispatch => {\n    type EndpointName = typeof endpointName;\n    const res = dispatch((api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>).initiate(arg, {\n      subscribe: false,\n      forceRefetch: true,\n      [forceQueryFnSymbol]: () => ({\n        data: value\n      })\n    })) as UpsertThunkResult<Definitions, EndpointName>;\n    return res;\n  };\n  const getTransformCallbackForEndpoint = (endpointDefinition: EndpointDefinition<any, any, any, any>, transformFieldName: 'transformResponse' | 'transformErrorResponse'): TransformCallback => {\n    return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName]! as TransformCallback : defaultTransformResponse;\n  };\n\n  // The generic async payload function for all of our thunks\n  const executeEndpoint: AsyncThunkPayloadCreator<ThunkResult, QueryThunkArg | MutationThunkArg | InfiniteQueryThunkArg<any>, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }> = async (arg, {\n    signal,\n    abort,\n    rejectWithValue,\n    fulfillWithValue,\n    dispatch,\n    getState,\n    extra\n  }) => {\n    const endpointDefinition = endpointDefinitions[arg.endpointName];\n    const {\n      metaSchema,\n      skipSchemaValidation = globalSkipSchemaValidation\n    } = endpointDefinition;\n    try {\n      let transformResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformResponse');\n      const baseQueryApi = {\n        signal,\n        abort,\n        dispatch,\n        getState,\n        extra,\n        endpoint: arg.endpointName,\n        type: arg.type,\n        forced: arg.type === 'query' ? isForcedQuery(arg, getState()) : undefined,\n        queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n      };\n      const forceQueryFn = arg.type === 'query' ? arg[forceQueryFnSymbol] : undefined;\n      let finalQueryReturnValue: QueryReturnValue;\n\n      // Infinite query wrapper, which executes the request and returns\n      // the InfiniteData `{pages, pageParams}` structure\n      const fetchPage = async (data: InfiniteData<unknown, unknown>, param: unknown, maxPages: number, previous?: boolean): Promise<QueryReturnValue> => {\n        // This should handle cases where there is no `getPrevPageParam`,\n        // or `getPPP` returned nullish\n        if (param == null && data.pages.length) {\n          return Promise.resolve({\n            data\n          });\n        }\n        const finalQueryArg: InfiniteQueryCombinedArg<any, any> = {\n          queryArg: arg.originalArgs,\n          pageParam: param\n        };\n        const pageResponse = await executeRequest(finalQueryArg);\n        const addTo = previous ? addToStart : addToEnd;\n        return {\n          data: {\n            pages: addTo(data.pages, pageResponse.data, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          },\n          meta: pageResponse.meta\n        };\n      };\n\n      // Wrapper for executing either `query` or `queryFn`,\n      // and handling any errors\n      async function executeRequest(finalQueryArg: unknown): Promise<QueryReturnValue> {\n        let result: QueryReturnValue;\n        const {\n          extraOptions,\n          argSchema,\n          rawResponseSchema,\n          responseSchema\n        } = endpointDefinition;\n        if (argSchema && !skipSchemaValidation) {\n          finalQueryArg = await parseWithSchema(argSchema, finalQueryArg, 'argSchema', {} // we don't have a meta yet, so we can't pass it\n          );\n        }\n        if (forceQueryFn) {\n          // upsertQueryData relies on this to pass in the user-provided value\n          result = forceQueryFn();\n        } else if (endpointDefinition.query) {\n          result = await baseQuery(endpointDefinition.query(finalQueryArg as any), baseQueryApi, extraOptions as any);\n        } else {\n          result = await endpointDefinition.queryFn(finalQueryArg as any, baseQueryApi, extraOptions as any, arg => baseQuery(arg, baseQueryApi, extraOptions as any));\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          const what = endpointDefinition.query ? '`baseQuery`' : '`queryFn`';\n          let err: undefined | string;\n          if (!result) {\n            err = `${what} did not return anything.`;\n          } else if (typeof result !== 'object') {\n            err = `${what} did not return an object.`;\n          } else if (result.error && result.data) {\n            err = `${what} returned an object containing both \\`error\\` and \\`result\\`.`;\n          } else if (result.error === undefined && result.data === undefined) {\n            err = `${what} returned an object containing neither a valid \\`error\\` and \\`result\\`. At least one of them should not be \\`undefined\\``;\n          } else {\n            for (const key of Object.keys(result)) {\n              if (key !== 'error' && key !== 'data' && key !== 'meta') {\n                err = `The object returned by ${what} has the unknown property ${key}.`;\n                break;\n              }\n            }\n          }\n          if (err) {\n            console.error(`Error encountered handling the endpoint ${arg.endpointName}.\n                  ${err}\n                  It needs to return an object with either the shape \\`{ data: <value> }\\` or \\`{ error: <value> }\\` that may contain an optional \\`meta\\` property.\n                  Object returned was:`, result);\n          }\n        }\n        if (result.error) throw new HandledError(result.error, result.meta);\n        let {\n          data\n        } = result;\n        if (rawResponseSchema && !skipSchemaValidation) {\n          data = await parseWithSchema(rawResponseSchema, result.data, 'rawResponseSchema', result.meta);\n        }\n        let transformedResponse = await transformResponse(data, result.meta, finalQueryArg);\n        if (responseSchema && !skipSchemaValidation) {\n          transformedResponse = await parseWithSchema(responseSchema, transformedResponse, 'responseSchema', result.meta);\n        }\n        return {\n          ...result,\n          data: transformedResponse\n        };\n      }\n      if (arg.type === 'query' && 'infiniteQueryOptions' in endpointDefinition) {\n        // This is an infinite query endpoint\n        const {\n          infiniteQueryOptions\n        } = endpointDefinition;\n\n        // Runtime checks should guarantee this is a positive number if provided\n        const {\n          maxPages = Infinity\n        } = infiniteQueryOptions;\n        let result: QueryReturnValue;\n\n        // Start by looking up the existing InfiniteData value from state,\n        // falling back to an empty value if it doesn't exist yet\n        const blankData = {\n          pages: [],\n          pageParams: []\n        };\n        const cachedData = selectors.selectQueryEntry(getState(), arg.queryCacheKey)?.data as InfiniteData<unknown, unknown> | undefined;\n\n        // When the arg changes or the user forces a refetch,\n        // we don't include the `direction` flag. This lets us distinguish\n        // between actually refetching with a forced query, vs just fetching\n        // the next page.\n        const isForcedQueryNeedingRefetch =\n        // arg.forceRefetch\n        isForcedQuery(arg, getState()) && !(arg as InfiniteQueryThunkArg<any>).direction;\n        const existingData = (isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData) as InfiniteData<unknown, unknown>;\n\n        // If the thunk specified a direction and we do have at least one page,\n        // fetch the next or previous page\n        if ('direction' in arg && arg.direction && existingData.pages.length) {\n          const previous = arg.direction === 'backward';\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const param = pageParamFn(infiniteQueryOptions, existingData, arg.originalArgs);\n          result = await fetchPage(existingData, param, maxPages, previous);\n        } else {\n          // Otherwise, fetch the first page and then any remaining pages\n\n          const {\n            initialPageParam = infiniteQueryOptions.initialPageParam\n          } = arg as InfiniteQueryThunkArg<any>;\n\n          // If we're doing a refetch, we should start from\n          // the first page we have cached.\n          // Otherwise, we should start from the initialPageParam\n          const cachedPageParams = cachedData?.pageParams ?? [];\n          const firstPageParam = cachedPageParams[0] ?? initialPageParam;\n          const totalPages = cachedPageParams.length;\n\n          // Fetch first page\n          result = await fetchPage(existingData, firstPageParam, maxPages);\n          if (forceQueryFn) {\n            // HACK `upsertQueryData` expects the user to pass in the `{pages, pageParams}` structure,\n            // but `fetchPage` treats that as `pages[0]`. We have to manually un-nest it.\n            result = {\n              data: (result.data as InfiniteData<unknown, unknown>).pages[0]\n            } as QueryReturnValue;\n          }\n\n          // Fetch remaining pages\n          for (let i = 1; i < totalPages; i++) {\n            const param = getNextPageParam(infiniteQueryOptions, result.data as InfiniteData<unknown, unknown>, arg.originalArgs);\n            result = await fetchPage(result.data as InfiniteData<unknown, unknown>, param, maxPages);\n          }\n        }\n        finalQueryReturnValue = result;\n      } else {\n        // Non-infinite endpoint. Just run the one request.\n        finalQueryReturnValue = await executeRequest(arg.originalArgs);\n      }\n      if (metaSchema && !skipSchemaValidation && finalQueryReturnValue.meta) {\n        finalQueryReturnValue.meta = await parseWithSchema(metaSchema, finalQueryReturnValue.meta, 'metaSchema', finalQueryReturnValue.meta);\n      }\n\n      // console.log('Final result: ', transformedData)\n      return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({\n        fulfilledTimeStamp: Date.now(),\n        baseQueryMeta: finalQueryReturnValue.meta\n      }));\n    } catch (error) {\n      let caughtError = error;\n      if (caughtError instanceof HandledError) {\n        let transformErrorResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformErrorResponse');\n        const {\n          rawErrorResponseSchema,\n          errorResponseSchema\n        } = endpointDefinition;\n        let {\n          value,\n          meta\n        } = caughtError;\n        try {\n          if (rawErrorResponseSchema && !skipSchemaValidation) {\n            value = await parseWithSchema(rawErrorResponseSchema, value, 'rawErrorResponseSchema', meta);\n          }\n          if (metaSchema && !skipSchemaValidation) {\n            meta = await parseWithSchema(metaSchema, meta, 'metaSchema', meta);\n          }\n          let transformedErrorResponse = await transformErrorResponse(value, meta, arg.originalArgs);\n          if (errorResponseSchema && !skipSchemaValidation) {\n            transformedErrorResponse = await parseWithSchema(errorResponseSchema, transformedErrorResponse, 'errorResponseSchema', meta);\n          }\n          return rejectWithValue(transformedErrorResponse, addShouldAutoBatch({\n            baseQueryMeta: meta\n          }));\n        } catch (e) {\n          caughtError = e;\n        }\n      }\n      try {\n        if (caughtError instanceof NamedSchemaError) {\n          const info: SchemaFailureInfo = {\n            endpoint: arg.endpointName,\n            arg: arg.originalArgs,\n            type: arg.type,\n            queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n          };\n          endpointDefinition.onSchemaFailure?.(caughtError, info);\n          onSchemaFailure?.(caughtError, info);\n          const {\n            catchSchemaFailure = globalCatchSchemaFailure\n          } = endpointDefinition;\n          if (catchSchemaFailure) {\n            return rejectWithValue(catchSchemaFailure(caughtError, info), addShouldAutoBatch({\n              baseQueryMeta: caughtError._bqMeta\n            }));\n          }\n        }\n      } catch (e) {\n        caughtError = e;\n      }\n      if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n        console.error(`An unhandled error occurred processing a request for the endpoint \"${arg.endpointName}\".\nIn the case of an unhandled error, no tags will be \"provided\" or \"invalidated\".`, caughtError);\n      } else {\n        console.error(caughtError);\n      }\n      throw caughtError;\n    }\n  };\n  function isForcedQuery(arg: QueryThunkArg, state: RootState<any, string, ReducerPath>) {\n    const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);\n    const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;\n    const fulfilledVal = requestState?.fulfilledTimeStamp;\n    const refetchVal = arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange);\n    if (refetchVal) {\n      // Return if it's true or compare the dates because it must be a number\n      return refetchVal === true || (Number(new Date()) - Number(fulfilledVal)) / 1000 >= refetchVal;\n    }\n    return false;\n  }\n  const createQueryThunk = <ThunkArgType extends QueryThunkArg | InfiniteQueryThunkArg<any>,>() => {\n    const generatedQueryThunk = createAsyncThunk<ThunkResult, ThunkArgType, ThunkApiMetaConfig & {\n      state: RootState<any, string, ReducerPath>;\n    }>(`${reducerPath}/executeQuery`, executeEndpoint, {\n      getPendingMeta({\n        arg\n      }) {\n        const endpointDefinition = endpointDefinitions[arg.endpointName];\n        return addShouldAutoBatch({\n          startedTimeStamp: Date.now(),\n          ...(isInfiniteQueryDefinition(endpointDefinition) ? {\n            direction: (arg as InfiniteQueryThunkArg<any>).direction\n          } : {})\n        });\n      },\n      condition(queryThunkArg, {\n        getState\n      }) {\n        const state = getState();\n        const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);\n        const fulfilledVal = requestState?.fulfilledTimeStamp;\n        const currentArg = queryThunkArg.originalArgs;\n        const previousArg = requestState?.originalArgs;\n        const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];\n        const direction = (queryThunkArg as InfiniteQueryThunkArg<any>).direction;\n\n        // Order of these checks matters.\n        // In order for `upsertQueryData` to successfully run while an existing request is in flight,\n        /// we have to check for that first, otherwise `queryThunk` will bail out and not run at all.\n        if (isUpsertQuery(queryThunkArg)) {\n          return true;\n        }\n\n        // Don't retry a request that's currently in-flight\n        if (requestState?.status === 'pending') {\n          return false;\n        }\n\n        // if this is forced, continue\n        if (isForcedQuery(queryThunkArg, state)) {\n          return true;\n        }\n        if (isQueryDefinition(endpointDefinition) && endpointDefinition?.forceRefetch?.({\n          currentArg,\n          previousArg,\n          endpointState: requestState,\n          state\n        })) {\n          return true;\n        }\n\n        // Pull from the cache unless we explicitly force refetch or qualify based on time\n        if (fulfilledVal && !direction) {\n          // Value is cached and we didn't specify to refresh, skip it.\n          return false;\n        }\n        return true;\n      },\n      dispatchConditionRejection: true\n    });\n    return generatedQueryThunk;\n  };\n  const queryThunk = createQueryThunk<QueryThunkArg>();\n  const infiniteQueryThunk = createQueryThunk<InfiniteQueryThunkArg<any>>();\n  const mutationThunk = createAsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }>(`${reducerPath}/executeMutation`, executeEndpoint, {\n    getPendingMeta() {\n      return addShouldAutoBatch({\n        startedTimeStamp: Date.now()\n      });\n    }\n  });\n  const hasTheForce = (options: any): options is {\n    force: boolean;\n  } => 'force' in options;\n  const hasMaxAge = (options: any): options is {\n    ifOlderThan: false | number;\n  } => 'ifOlderThan' in options;\n  const prefetch = <EndpointName extends QueryKeys<Definitions>,>(endpointName: EndpointName, arg: any, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction> => (dispatch: ThunkDispatch<any, any, any>, getState: () => any) => {\n    const force = hasTheForce(options) && options.force;\n    const maxAge = hasMaxAge(options) && options.ifOlderThan;\n    const queryAction = (force: boolean = true) => {\n      const options = {\n        forceRefetch: force,\n        isPrefetch: true\n      };\n      return (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).initiate(arg, options);\n    };\n    const latestStateValue = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg)(getState());\n    if (force) {\n      dispatch(queryAction());\n    } else if (maxAge) {\n      const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp;\n      if (!lastFulfilledTs) {\n        dispatch(queryAction());\n        return;\n      }\n      const shouldRetrigger = (Number(new Date()) - Number(new Date(lastFulfilledTs))) / 1000 >= maxAge;\n      if (shouldRetrigger) {\n        dispatch(queryAction());\n      }\n    } else {\n      // If prefetching with no options, just let it try\n      dispatch(queryAction(false));\n    }\n  };\n  function matchesEndpoint(endpointName: string) {\n    return (action: any): action is UnknownAction => action?.meta?.arg?.endpointName === endpointName;\n  }\n  function buildMatchThunkActions<Thunk extends AsyncThunk<any, QueryThunkArg, ThunkApiMetaConfig> | AsyncThunk<any, MutationThunkArg, ThunkApiMetaConfig>>(thunk: Thunk, endpointName: string) {\n    return {\n      matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),\n      matchFulfilled: isAllOf(isFulfilled(thunk), matchesEndpoint(endpointName)),\n      matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName))\n    } as Matchers<Thunk, any>;\n  }\n  return {\n    queryThunk,\n    mutationThunk,\n    infiniteQueryThunk,\n    prefetch,\n    updateQueryData,\n    upsertQueryData,\n    patchQueryData,\n    buildMatchThunkActions\n  };\n}\nexport function getNextPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  const lastIndex = pages.length - 1;\n  return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams, queryArg);\n}\nexport function getPreviousPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams, queryArg);\n}\nexport function calculateProvidedByThunk(action: UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<MutationThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>, type: 'providesTags' | 'invalidatesTags', endpointDefinitions: EndpointDefinitions, assertTagType: AssertTagTypes) {\n  return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type] as ResultDescription<any, any, any, any, any>, isFulfilled(action) ? action.payload : undefined, isRejectedWithValue(action) ? action.payload : undefined, action.meta.arg.originalArgs, 'baseQueryMeta' in action.meta ? action.meta.baseQueryMeta : undefined, assertTagType);\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AsyncThunkAction, SafePromise, SerializedError, ThunkAction, UnknownAction } from '@reduxjs/toolkit';\nimport type { Dispatch } from 'redux';\nimport { asSafePromise } from '../../tsHelpers';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport { isQueryDefinition, type EndpointDefinition, type EndpointDefinitions, type InfiniteQueryArgFrom, type InfiniteQueryDefinition, type MutationDefinition, type PageParamFrom, type QueryArgFrom, type QueryDefinition, type ResultTypeFrom } from '../endpointDefinitions';\nimport { countObjectKeys, getOrInsert, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQueryDirection, SubscriptionOptions } from './apiState';\nimport type { InfiniteQueryResultSelectorResult, QueryResultSelectorResult } from './buildSelectors';\nimport type { InfiniteQueryThunk, InfiniteQueryThunkArg, MutationThunk, QueryThunk, QueryThunkArg, ThunkApiMetaConfig } from './buildThunks';\nimport type { ApiEndpointQuery } from './module';\nexport type BuildInitiateApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  initiate: StartQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  initiate: StartInfiniteQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  initiate: StartMutationActionCreator<Definition>;\n};\nexport const forceQueryFnSymbol = Symbol('forceQueryFn');\nexport const isUpsertQuery = (arg: QueryThunkArg) => typeof arg[forceQueryFnSymbol] === 'function';\nexport type StartQueryActionCreatorOptions = {\n  subscribe?: boolean;\n  forceRefetch?: boolean | number;\n  subscriptionOptions?: SubscriptionOptions;\n  [forceQueryFnSymbol]?: () => QueryReturnValue;\n};\nexport type StartInfiniteQueryActionCreatorOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = StartQueryActionCreatorOptions & {\n  direction?: InfiniteQueryDirection;\n  param?: unknown;\n} & Partial<Pick<Partial<InfiniteQueryConfigOptions<ResultTypeFrom<D>, PageParamFrom<D>, InfiniteQueryArgFrom<D>>>, 'initialPageParam'>>;\ntype AnyQueryActionCreator<D extends EndpointDefinition<any, any, any, any>> = (arg: any, options?: StartQueryActionCreatorOptions) => ThunkAction<AnyActionCreatorResult, any, any, UnknownAction>;\ntype StartQueryActionCreator<D extends QueryDefinition<any, any, any, any, any>> = (arg: QueryArgFrom<D>, options?: StartQueryActionCreatorOptions) => ThunkAction<QueryActionCreatorResult<D>, any, any, UnknownAction>;\nexport type StartInfiniteQueryActionCreator<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D>, options?: StartInfiniteQueryActionCreatorOptions<D>) => ThunkAction<InfiniteQueryActionCreatorResult<D>, any, any, UnknownAction>;\ntype QueryActionCreatorFields = {\n  requestId: string;\n  subscriptionOptions: SubscriptionOptions | undefined;\n  abort(): void;\n  unsubscribe(): void;\n  updateSubscriptionOptions(options: SubscriptionOptions): void;\n  queryCacheKey: string;\n};\ntype AnyActionCreatorResult = SafePromise<any> & QueryActionCreatorFields & {\n  arg: any;\n  unwrap(): Promise<any>;\n  refetch(): AnyActionCreatorResult;\n};\nexport type QueryActionCreatorResult<D extends QueryDefinition<any, any, any, any>> = SafePromise<QueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: QueryArgFrom<D>;\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  refetch(): QueryActionCreatorResult<D>;\n};\nexport type InfiniteQueryActionCreatorResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SafePromise<InfiniteQueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: InfiniteQueryArgFrom<D>;\n  unwrap(): Promise<InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>>;\n  refetch(): InfiniteQueryActionCreatorResult<D>;\n};\ntype StartMutationActionCreator<D extends MutationDefinition<any, any, any, any>> = (arg: QueryArgFrom<D>, options?: {\n  /**\n   * If this mutation should be tracked in the store.\n   * If you just want to manually trigger this mutation using `dispatch` and don't care about the\n   * result, state & potential errors being held in store, you can set this to false.\n   * (defaults to `true`)\n   */\n  track?: boolean;\n  fixedCacheKey?: string;\n}) => ThunkAction<MutationActionCreatorResult<D>, any, any, UnknownAction>;\nexport type MutationActionCreatorResult<D extends MutationDefinition<any, any, any, any>> = SafePromise<{\n  data: ResultTypeFrom<D>;\n  error?: undefined;\n} | {\n  data?: undefined;\n  error: Exclude<BaseQueryError<D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQuery : never>, undefined> | SerializedError;\n}> & {\n  /** @internal */\n  arg: {\n    /**\n     * The name of the given endpoint for the mutation\n     */\n    endpointName: string;\n    /**\n     * The original arguments supplied to the mutation call\n     */\n    originalArgs: QueryArgFrom<D>;\n    /**\n     * Whether the mutation is being tracked in the store.\n     */\n    track?: boolean;\n    fixedCacheKey?: string;\n  };\n  /**\n   * A unique string generated for the request sequence\n   */\n  requestId: string;\n\n  /**\n   * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation\n   * that was fired off from reaching the server, but only to assist in handling the response.\n   *\n   * Calling `abort()` prior to the promise resolving will force it to reach the error state with\n   * the serialized error:\n   * `{ name: 'AbortError', message: 'Aborted' }`\n   *\n   * @example\n   * ```ts\n   * const [updateUser] = useUpdateUserMutation();\n   *\n   * useEffect(() => {\n   *   const promise = updateUser(id);\n   *   promise\n   *     .unwrap()\n   *     .catch((err) => {\n   *       if (err.name === 'AbortError') return;\n   *       // else handle the unexpected error\n   *     })\n   *\n   *   return () => {\n   *     promise.abort();\n   *   }\n   * }, [id, updateUser])\n   * ```\n   */\n  abort(): void;\n  /**\n   * Unwraps a mutation call to provide the raw response/error.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap\"\n   * addPost({ id: 1, name: 'Example' })\n   *   .unwrap()\n   *   .then((payload) => console.log('fulfilled', payload))\n   *   .catch((error) => console.error('rejected', error));\n   * ```\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  /**\n   * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.\n   The value returned by the hook will reset to `isUninitialized` afterwards.\n   */\n  reset(): void;\n};\nexport function buildInitiate({\n  serializeQueryArgs,\n  queryThunk,\n  infiniteQueryThunk,\n  mutationThunk,\n  api,\n  context\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  api: Api<any, EndpointDefinitions, any, any>;\n  context: ApiContext<EndpointDefinitions>;\n}) {\n  const runningQueries: Map<Dispatch, Record<string, QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any> | undefined>> = new Map();\n  const runningMutations: Map<Dispatch, Record<string, MutationActionCreatorResult<any> | undefined>> = new Map();\n  const {\n    unsubscribeQueryResult,\n    removeMutationResult,\n    updateSubscriptionOptions\n  } = api.internalActions;\n  return {\n    buildInitiateQuery,\n    buildInitiateInfiniteQuery,\n    buildInitiateMutation,\n    getRunningQueryThunk,\n    getRunningMutationThunk,\n    getRunningQueriesThunk,\n    getRunningMutationsThunk\n  };\n  function getRunningQueryThunk(endpointName: string, queryArgs: any) {\n    return (dispatch: Dispatch) => {\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      return runningQueries.get(dispatch)?.[queryCacheKey] as QueryActionCreatorResult<never> | InfiniteQueryActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningMutationThunk(\n  /**\n   * this is only here to allow TS to infer the result type by input value\n   * we could use it to validate the result, but it's probably not necessary\n   */\n  _endpointName: string, fixedCacheKeyOrRequestId: string) {\n    return (dispatch: Dispatch) => {\n      return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId] as MutationActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningQueriesThunk() {\n    return (dispatch: Dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function getRunningMutationsThunk() {\n    return (dispatch: Dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function middlewareWarning(dispatch: Dispatch) {\n    if (process.env.NODE_ENV !== 'production') {\n      if ((middlewareWarning as any).triggered) return;\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      (middlewareWarning as any).triggered = true;\n\n      // The RTKQ middleware should return the internal state object,\n      // but it should _not_ be the action object.\n      if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n        // Otherwise, must not have been added\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(34) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\nYou must add the middleware for RTK-Query to function correctly!`);\n      }\n    }\n  }\n  function buildInitiateAnyQuery<T extends 'query' | 'infiniteQuery'>(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any>) {\n    const queryAction: AnyQueryActionCreator<any> = (arg, {\n      subscribe = true,\n      forceRefetch,\n      subscriptionOptions,\n      [forceQueryFnSymbol]: forceQueryFn,\n      ...rest\n    } = {}) => (dispatch, getState) => {\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs: arg,\n        endpointDefinition,\n        endpointName\n      });\n      let thunk: AsyncThunkAction<unknown, QueryThunkArg, ThunkApiMetaConfig>;\n      const commonThunkArgs = {\n        ...rest,\n        type: 'query' as const,\n        subscribe,\n        forceRefetch: forceRefetch,\n        subscriptionOptions,\n        endpointName,\n        originalArgs: arg,\n        queryCacheKey,\n        [forceQueryFnSymbol]: forceQueryFn\n      };\n      if (isQueryDefinition(endpointDefinition)) {\n        thunk = queryThunk(commonThunkArgs);\n      } else {\n        const {\n          direction,\n          initialPageParam\n        } = rest as Pick<InfiniteQueryThunkArg<any>, 'direction' | 'initialPageParam'>;\n        thunk = infiniteQueryThunk({\n          ...(commonThunkArgs as InfiniteQueryThunkArg<any>),\n          // Supply these even if undefined. This helps with a field existence\n          // check over in `buildSlice.ts`\n          direction,\n          initialPageParam\n        });\n      }\n      const selector = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg);\n      const thunkResult = dispatch(thunk);\n      const stateAfter = selector(getState());\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort\n      } = thunkResult;\n      const skippedSynchronously = stateAfter.requestId !== requestId;\n      const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey];\n      const selectFromState = () => selector(getState());\n      const statePromise: AnyActionCreatorResult = Object.assign((forceQueryFn ?\n      // a query has been forced (upsertQueryData)\n      // -> we want to resolve it once data has been written with the data that will be written\n      thunkResult.then(selectFromState) : skippedSynchronously && !runningQuery ?\n      // a query has been skipped due to a condition and we do not have any currently running query\n      // -> we want to resolve it immediately with the current data\n      Promise.resolve(stateAfter) :\n      // query just started or one is already in flight\n      // -> wait for the running query, then resolve with data from after that\n      Promise.all([runningQuery, thunkResult]).then(selectFromState)) as SafePromise<any>, {\n        arg,\n        requestId,\n        subscriptionOptions,\n        queryCacheKey,\n        abort,\n        async unwrap() {\n          const result = await statePromise;\n          if (result.isError) {\n            throw result.error;\n          }\n          return result.data;\n        },\n        refetch: () => dispatch(queryAction(arg, {\n          subscribe: false,\n          forceRefetch: true\n        })),\n        unsubscribe() {\n          if (subscribe) dispatch(unsubscribeQueryResult({\n            queryCacheKey,\n            requestId\n          }));\n        },\n        updateSubscriptionOptions(options: SubscriptionOptions) {\n          statePromise.subscriptionOptions = options;\n          dispatch(updateSubscriptionOptions({\n            endpointName,\n            requestId,\n            queryCacheKey,\n            options\n          }));\n        }\n      });\n      if (!runningQuery && !skippedSynchronously && !forceQueryFn) {\n        const running = getOrInsert(runningQueries, dispatch, {});\n        running[queryCacheKey] = statePromise;\n        statePromise.then(() => {\n          delete running[queryCacheKey];\n          if (!countObjectKeys(running)) {\n            runningQueries.delete(dispatch);\n          }\n        });\n      }\n      return statePromise;\n    };\n    return queryAction;\n  }\n  function buildInitiateQuery(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    const queryAction: StartQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return queryAction;\n  }\n  function buildInitiateInfiniteQuery(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const infiniteQueryAction: StartInfiniteQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return infiniteQueryAction;\n  }\n  function buildInitiateMutation(endpointName: string): StartMutationActionCreator<any> {\n    return (arg, {\n      track = true,\n      fixedCacheKey\n    } = {}) => (dispatch, getState) => {\n      const thunk = mutationThunk({\n        type: 'mutation',\n        endpointName,\n        originalArgs: arg,\n        track,\n        fixedCacheKey\n      });\n      const thunkResult = dispatch(thunk);\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort,\n        unwrap\n      } = thunkResult;\n      const returnValuePromise = asSafePromise(thunkResult.unwrap().then(data => ({\n        data\n      })), error => ({\n        error\n      }));\n      const reset = () => {\n        dispatch(removeMutationResult({\n          requestId,\n          fixedCacheKey\n        }));\n      };\n      const ret = Object.assign(returnValuePromise, {\n        arg: thunkResult.arg,\n        requestId,\n        abort,\n        unwrap,\n        reset\n      });\n      const running = runningMutations.get(dispatch) || {};\n      runningMutations.set(dispatch, running);\n      running[requestId] = ret;\n      ret.then(() => {\n        delete running[requestId];\n        if (!countObjectKeys(running)) {\n          runningMutations.delete(dispatch);\n        }\n      });\n      if (fixedCacheKey) {\n        running[fixedCacheKey] = ret;\n        ret.then(() => {\n          if (running[fixedCacheKey] === ret) {\n            delete running[fixedCacheKey];\n            if (!countObjectKeys(running)) {\n              runningMutations.delete(dispatch);\n            }\n          }\n        });\n      }\n      return ret;\n    };\n  }\n}","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { SchemaError } from '@standard-schema/utils';\nexport class NamedSchemaError extends SchemaError {\n  constructor(issues: readonly StandardSchemaV1.Issue[], public readonly value: any, public readonly schemaName: string, public readonly _bqMeta: any) {\n    super(issues);\n  }\n}\nexport async function parseWithSchema<Schema extends StandardSchemaV1>(schema: Schema, data: unknown, schemaName: string, bqMeta: any): Promise<StandardSchemaV1.InferOutput<Schema>> {\n  const result = await schema['~standard'].validate(data);\n  if (result.issues) {\n    throw new NamedSchemaError(result.issues, data, schemaName, bqMeta);\n  }\n  return result.value;\n}","import type { PayloadAction } from '@reduxjs/toolkit';\nimport { combineReducers, createAction, createSlice, isAnyOf, isFulfilled, isRejectedWithValue, createNextState, prepareAutoBatched, SHOULD_AUTOBATCH, nanoid } from './rtkImports';\nimport type { QuerySubstateIdentifier, QuerySubState, MutationSubstateIdentifier, MutationSubState, MutationState, QueryState, InvalidationState, Subscribers, QueryCacheKey, SubscriptionState, ConfigState, InfiniteQuerySubState, InfiniteQueryDirection } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { AllQueryKeys, QueryArgFromAnyQueryDefinition, DataFromAnyQueryDefinition, InfiniteQueryThunk, MutationThunk, QueryThunk, QueryThunkArg } from './buildThunks';\nimport { calculateProvidedByThunk } from './buildThunks';\nimport { isInfiniteQueryDefinition, type AssertTagTypes, type EndpointDefinitions, type FullTagDescription, type QueryDefinition } from '../endpointDefinitions';\nimport type { Patch } from 'immer';\nimport { isDraft } from 'immer';\nimport { applyPatches, original } from 'immer';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\nimport { isDocumentVisible, isOnline, copyWithStructuralSharing } from '../utils';\nimport type { ApiContext } from '../apiTypes';\nimport { isUpsertQuery } from './buildInitiate';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { UnwrapPromise } from '../tsHelpers';\n\n/**\n * A typesafe single entry to be upserted into the cache\n */\nexport type NormalizedQueryUpsertEntry<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = {\n  endpointName: EndpointName;\n  arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>;\n  value: DataFromAnyQueryDefinition<Definitions, EndpointName>;\n};\n\n/**\n * The internal version that is not typesafe since we can't carry the generics through `createSlice`\n */\ntype NormalizedQueryUpsertEntryPayload = {\n  endpointName: string;\n  arg: unknown;\n  value: unknown;\n};\nexport type ProcessedQueryUpsertEntry = {\n  queryDescription: QueryThunkArg;\n  value: unknown;\n};\n\n/**\n * A typesafe representation of a util action creator that accepts cache entry descriptions to upsert\n */\nexport type UpsertEntries<Definitions extends EndpointDefinitions> = (<EndpointNames extends Array<AllQueryKeys<Definitions>>>(entries: [...{ [I in keyof EndpointNames]: NormalizedQueryUpsertEntry<Definitions, EndpointNames[I]> }]) => PayloadAction<NormalizedQueryUpsertEntryPayload[]>) & {\n  match: (action: unknown) => action is PayloadAction<NormalizedQueryUpsertEntryPayload[]>;\n};\nfunction updateQuerySubstateIfExists(state: QueryState<any>, queryCacheKey: QueryCacheKey, update: (substate: QuerySubState<any> | InfiniteQuerySubState<any>) => void) {\n  const substate = state[queryCacheKey];\n  if (substate) {\n    update(substate);\n  }\n}\nexport function getMutationCacheKey(id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n}): string | undefined;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n} | MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string | undefined {\n  return ('arg' in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId;\n}\nfunction updateMutationSubstateIfExists(state: MutationState<any>, id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}, update: (substate: MutationSubState<any>) => void) {\n  const substate = state[getMutationCacheKey(id)];\n  if (substate) {\n    update(substate);\n  }\n}\nconst initialState = {} as any;\nexport function buildSlice({\n  reducerPath,\n  queryThunk,\n  mutationThunk,\n  serializeQueryArgs,\n  context: {\n    endpointDefinitions: definitions,\n    apiUid,\n    extractRehydrationInfo,\n    hasRehydrationInfo\n  },\n  assertTagType,\n  config\n}: {\n  reducerPath: string;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  context: ApiContext<EndpointDefinitions>;\n  assertTagType: AssertTagTypes;\n  config: Omit<ConfigState<string>, 'online' | 'focused' | 'middlewareRegistered'>;\n}) {\n  const resetApiState = createAction(`${reducerPath}/resetApiState`);\n  function writePendingCacheEntry(draft: QueryState<any>, arg: QueryThunkArg, upserting: boolean, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n    // requestStatus: 'pending'\n  } & {\n    startedTimeStamp: number;\n  }) {\n    draft[arg.queryCacheKey] ??= {\n      status: QueryStatus.uninitialized,\n      endpointName: arg.endpointName\n    };\n    updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n      substate.status = QueryStatus.pending;\n      substate.requestId = upserting && substate.requestId ?\n      // for `upsertQuery` **updates**, keep the current `requestId`\n      substate.requestId :\n      // for normal queries or `upsertQuery` **inserts** always update the `requestId`\n      meta.requestId;\n      if (arg.originalArgs !== undefined) {\n        substate.originalArgs = arg.originalArgs;\n      }\n      substate.startedTimeStamp = meta.startedTimeStamp;\n      const endpointDefinition = definitions[meta.arg.endpointName];\n      if (isInfiniteQueryDefinition(endpointDefinition) && 'direction' in arg) {\n        ;\n        (substate as InfiniteQuerySubState<any>).direction = arg.direction as InfiniteQueryDirection;\n      }\n    });\n  }\n  function writeFulfilledCacheEntry(draft: QueryState<any>, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n  } & {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n  }, payload: unknown, upserting: boolean) {\n    updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, substate => {\n      if (substate.requestId !== meta.requestId && !upserting) return;\n      const {\n        merge\n      } = definitions[meta.arg.endpointName] as QueryDefinition<any, any, any, any>;\n      substate.status = QueryStatus.fulfilled;\n      if (merge) {\n        if (substate.data !== undefined) {\n          const {\n            fulfilledTimeStamp,\n            arg,\n            baseQueryMeta,\n            requestId\n          } = meta;\n          // There's existing cache data. Let the user merge it in themselves.\n          // We're already inside an Immer-powered reducer, and the user could just mutate `substate.data`\n          // themselves inside of `merge()`. But, they might also want to return a new value.\n          // Try to let Immer figure that part out, save the result, and assign it to `substate.data`.\n          let newData = createNextState(substate.data, draftSubstateData => {\n            // As usual with Immer, you can mutate _or_ return inside here, but not both\n            return merge(draftSubstateData, payload, {\n              arg: arg.originalArgs,\n              baseQueryMeta,\n              fulfilledTimeStamp,\n              requestId\n            });\n          });\n          substate.data = newData;\n        } else {\n          // Presumably a fresh request. Just cache the response data.\n          substate.data = payload;\n        }\n      } else {\n        // Assign or safely update the cache data.\n        substate.data = definitions[meta.arg.endpointName].structuralSharing ?? true ? copyWithStructuralSharing(isDraft(substate.data) ? original(substate.data) : substate.data, payload) : payload;\n      }\n      delete substate.error;\n      substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n    });\n  }\n  const querySlice = createSlice({\n    name: `${reducerPath}/queries`,\n    initialState: initialState as QueryState<any>,\n    reducers: {\n      removeQueryResult: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey\n          }\n        }: PayloadAction<QuerySubstateIdentifier>) {\n          delete draft[queryCacheKey];\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier>()\n      },\n      cacheEntriesUpserted: {\n        reducer(draft, action: PayloadAction<ProcessedQueryUpsertEntry[], string, {\n          RTK_autoBatch: boolean;\n          requestId: string;\n          timestamp: number;\n        }>) {\n          for (const entry of action.payload) {\n            const {\n              queryDescription: arg,\n              value\n            } = entry;\n            writePendingCacheEntry(draft, arg, true, {\n              arg,\n              requestId: action.meta.requestId,\n              startedTimeStamp: action.meta.timestamp\n            });\n            writeFulfilledCacheEntry(draft, {\n              arg,\n              requestId: action.meta.requestId,\n              fulfilledTimeStamp: action.meta.timestamp,\n              baseQueryMeta: {}\n            }, value,\n            // We know we're upserting here\n            true);\n          }\n        },\n        prepare: (payload: NormalizedQueryUpsertEntryPayload[]) => {\n          const queryDescriptions: ProcessedQueryUpsertEntry[] = payload.map(entry => {\n            const {\n              endpointName,\n              arg,\n              value\n            } = entry;\n            const endpointDefinition = definitions[endpointName];\n            const queryDescription: QueryThunkArg = {\n              type: 'query',\n              endpointName: endpointName,\n              originalArgs: entry.arg,\n              queryCacheKey: serializeQueryArgs({\n                queryArgs: arg,\n                endpointDefinition,\n                endpointName\n              })\n            };\n            return {\n              queryDescription,\n              value\n            };\n          });\n          const result = {\n            payload: queryDescriptions,\n            meta: {\n              [SHOULD_AUTOBATCH]: true,\n              requestId: nanoid(),\n              timestamp: Date.now()\n            }\n          };\n          return result;\n        }\n      },\n      queryResultPatched: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey,\n            patches\n          }\n        }: PayloadAction<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>) {\n          updateQuerySubstateIfExists(draft, queryCacheKey, substate => {\n            substate.data = applyPatches(substate.data as any, patches.concat());\n          });\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(queryThunk.pending, (draft, {\n        meta,\n        meta: {\n          arg\n        }\n      }) => {\n        const upserting = isUpsertQuery(arg);\n        writePendingCacheEntry(draft, arg, upserting, meta);\n      }).addCase(queryThunk.fulfilled, (draft, {\n        meta,\n        payload\n      }) => {\n        const upserting = isUpsertQuery(meta.arg);\n        writeFulfilledCacheEntry(draft, meta, payload, upserting);\n      }).addCase(queryThunk.rejected, (draft, {\n        meta: {\n          condition,\n          arg,\n          requestId\n        },\n        error,\n        payload\n      }) => {\n        updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n          if (condition) {\n            // request was aborted due to condition (another query already running)\n          } else {\n            // request failed\n            if (substate.requestId !== requestId) return;\n            substate.status = QueryStatus.rejected;\n            substate.error = (payload ?? error) as any;\n          }\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          queries\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(queries)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  const mutationSlice = createSlice({\n    name: `${reducerPath}/mutations`,\n    initialState: initialState as MutationState<any>,\n    reducers: {\n      removeMutationResult: {\n        reducer(draft, {\n          payload\n        }: PayloadAction<MutationSubstateIdentifier>) {\n          const cacheKey = getMutationCacheKey(payload);\n          if (cacheKey in draft) {\n            delete draft[cacheKey];\n          }\n        },\n        prepare: prepareAutoBatched<MutationSubstateIdentifier>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(mutationThunk.pending, (draft, {\n        meta,\n        meta: {\n          requestId,\n          arg,\n          startedTimeStamp\n        }\n      }) => {\n        if (!arg.track) return;\n        draft[getMutationCacheKey(meta)] = {\n          requestId,\n          status: QueryStatus.pending,\n          endpointName: arg.endpointName,\n          startedTimeStamp\n        };\n      }).addCase(mutationThunk.fulfilled, (draft, {\n        payload,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.fulfilled;\n          substate.data = payload;\n          substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n        });\n      }).addCase(mutationThunk.rejected, (draft, {\n        payload,\n        error,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.rejected;\n          substate.error = (payload ?? error) as any;\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          mutations\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(mutations)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          (entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) &&\n          // only rehydrate endpoints that were persisted using a `fixedCacheKey`\n          key !== entry?.requestId) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  type CalculateProvidedByAction = UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>;\n  const initialInvalidationState: InvalidationState<string> = {\n    tags: {},\n    keys: {}\n  };\n  const invalidationSlice = createSlice({\n    name: `${reducerPath}/invalidation`,\n    initialState: initialInvalidationState,\n    reducers: {\n      updateProvidedBy: {\n        reducer(draft, action: PayloadAction<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>) {\n          for (const {\n            queryCacheKey,\n            providedTags\n          } of action.payload) {\n            removeCacheKeyFromTags(draft, queryCacheKey);\n            for (const {\n              type,\n              id\n            } of providedTags) {\n              const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n\n            // Remove readonly from the providedTags array\n            draft.keys[queryCacheKey] = providedTags as FullTagDescription<string>[];\n          }\n        },\n        prepare: prepareAutoBatched<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(querySlice.actions.removeQueryResult, (draft, {\n        payload: {\n          queryCacheKey\n        }\n      }) => {\n        removeCacheKeyFromTags(draft, queryCacheKey);\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          provided\n        } = extractRehydrationInfo(action)!;\n        for (const [type, incomingTags] of Object.entries(provided)) {\n          for (const [id, cacheKeys] of Object.entries(incomingTags)) {\n            const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n            for (const queryCacheKey of cacheKeys) {\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n          }\n        }\n      }).addMatcher(isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)), (draft, action) => {\n        writeProvidedTagsForQueries(draft, [action]);\n      }).addMatcher(querySlice.actions.cacheEntriesUpserted.match, (draft, action) => {\n        const mockActions: CalculateProvidedByAction[] = action.payload.map(({\n          queryDescription,\n          value\n        }) => {\n          return {\n            type: 'UNKNOWN',\n            payload: value,\n            meta: {\n              requestStatus: 'fulfilled',\n              requestId: 'UNKNOWN',\n              arg: queryDescription\n            }\n          };\n        });\n        writeProvidedTagsForQueries(draft, mockActions);\n      });\n    }\n  });\n  function removeCacheKeyFromTags(draft: InvalidationState<any>, queryCacheKey: QueryCacheKey) {\n    const existingTags = draft.keys[queryCacheKey] ?? [];\n\n    // Delete this cache key from any existing tags that may have provided it\n    for (const tag of existingTags) {\n      const tagType = tag.type;\n      const tagId = tag.id ?? '__internal_without_id';\n      const tagSubscriptions = draft.tags[tagType]?.[tagId];\n      if (tagSubscriptions) {\n        draft.tags[tagType][tagId] = tagSubscriptions.filter(qc => qc !== queryCacheKey);\n      }\n    }\n    delete draft.keys[queryCacheKey];\n  }\n  function writeProvidedTagsForQueries(draft: InvalidationState<string>, actions: CalculateProvidedByAction[]) {\n    const providedByEntries = actions.map(action => {\n      const providedTags = calculateProvidedByThunk(action, 'providesTags', definitions, assertTagType);\n      const {\n        queryCacheKey\n      } = action.meta.arg;\n      return {\n        queryCacheKey,\n        providedTags\n      };\n    });\n    invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy(providedByEntries));\n  }\n\n  // Dummy slice to generate actions\n  const subscriptionSlice = createSlice({\n    name: `${reducerPath}/subscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      updateSubscriptionOptions(d, a: PayloadAction<{\n        endpointName: string;\n        requestId: string;\n        options: Subscribers[number];\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      unsubscribeQueryResult(d, a: PayloadAction<{\n        requestId: string;\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      internal_getRTKQSubscriptions() {}\n    }\n  });\n  const internalSubscriptionsSlice = createSlice({\n    name: `${reducerPath}/internalSubscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      subscriptionsUpdated: {\n        reducer(state, action: PayloadAction<Patch[]>) {\n          return applyPatches(state, action.payload);\n        },\n        prepare: prepareAutoBatched<Patch[]>()\n      }\n    }\n  });\n  const configSlice = createSlice({\n    name: `${reducerPath}/config`,\n    initialState: {\n      online: isOnline(),\n      focused: isDocumentVisible(),\n      middlewareRegistered: false,\n      ...config\n    } as ConfigState<string>,\n    reducers: {\n      middlewareRegistered(state, {\n        payload\n      }: PayloadAction<string>) {\n        state.middlewareRegistered = state.middlewareRegistered === 'conflict' || apiUid !== payload ? 'conflict' : true;\n      }\n    },\n    extraReducers: builder => {\n      builder.addCase(onOnline, state => {\n        state.online = true;\n      }).addCase(onOffline, state => {\n        state.online = false;\n      }).addCase(onFocus, state => {\n        state.focused = true;\n      }).addCase(onFocusLost, state => {\n        state.focused = false;\n      })\n      // update the state to be a new object to be picked up as a \"state change\"\n      // by redux-persist's `autoMergeLevel2`\n      .addMatcher(hasRehydrationInfo, draft => ({\n        ...draft\n      }));\n    }\n  });\n  const combinedReducer = combineReducers({\n    queries: querySlice.reducer,\n    mutations: mutationSlice.reducer,\n    provided: invalidationSlice.reducer,\n    subscriptions: internalSubscriptionsSlice.reducer,\n    config: configSlice.reducer\n  });\n  const reducer: typeof combinedReducer = (state, action) => combinedReducer(resetApiState.match(action) ? undefined : state, action);\n  const actions = {\n    ...configSlice.actions,\n    ...querySlice.actions,\n    ...subscriptionSlice.actions,\n    ...internalSubscriptionsSlice.actions,\n    ...mutationSlice.actions,\n    ...invalidationSlice.actions,\n    resetApiState\n  };\n  return {\n    reducer,\n    actions\n  };\n}\nexport type SliceActions = ReturnType<typeof buildSlice>['actions'];","import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, ReducerPathFrom, TagDescription, TagTypesFrom } from '../endpointDefinitions';\nimport { expandTagDescription } from '../endpointDefinitions';\nimport { flatten, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationSubState, QueryCacheKey, QueryKeys, QueryState, QuerySubState, RequestStatusFlags, RootState as _RootState } from './apiState';\nimport { QueryStatus, getRequestStatusFlags } from './apiState';\nimport { getMutationCacheKey } from './buildSlice';\nimport type { createSelector as _createSelector } from './rtkImports';\nimport { createNextState } from './rtkImports';\nimport { type AllQueryKeys, getNextPageParam, getPreviousPageParam } from './buildThunks';\nexport type SkipToken = typeof skipToken;\n/**\n * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`\n * instead of the query argument to get the same effect as if setting\n * `skip: true` in the query options.\n *\n * Useful for scenarios where a query should be skipped when `arg` is `undefined`\n * and TypeScript complains about it because `arg` is not allowed to be passed\n * in as `undefined`, such as\n *\n * ```ts\n * // codeblock-meta title=\"will error if the query argument is not allowed to be undefined\" no-transpile\n * useSomeQuery(arg, { skip: !!arg })\n * ```\n *\n * ```ts\n * // codeblock-meta title=\"using skipToken instead\" no-transpile\n * useSomeQuery(arg ?? skipToken)\n * ```\n *\n * If passed directly into a query or mutation selector, that selector will always\n * return an uninitialized state.\n */\nexport const skipToken = /* @__PURE__ */Symbol.for('RTKQ/skipToken');\nexport type BuildSelectorsApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: QueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: InfiniteQueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: MutationResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\ntype QueryResultSelectorFactory<Definition extends QueryDefinition<any, any, any, any>, RootState> = (queryArg: QueryArgFrom<Definition> | SkipToken) => (state: RootState) => QueryResultSelectorResult<Definition>;\nexport type QueryResultSelectorResult<Definition extends QueryDefinition<any, any, any, any>> = QuerySubState<Definition> & RequestStatusFlags;\ntype InfiniteQueryResultSelectorFactory<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, RootState> = (queryArg: InfiniteQueryArgFrom<Definition> | SkipToken) => (state: RootState) => InfiniteQueryResultSelectorResult<Definition>;\nexport type InfiniteQueryResultFlags = {\n  hasNextPage: boolean;\n  hasPreviousPage: boolean;\n  isFetchingNextPage: boolean;\n  isFetchingPreviousPage: boolean;\n  isFetchNextPageError: boolean;\n  isFetchPreviousPageError: boolean;\n};\nexport type InfiniteQueryResultSelectorResult<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<Definition> & RequestStatusFlags & InfiniteQueryResultFlags;\ntype MutationResultSelectorFactory<Definition extends MutationDefinition<any, any, any, any>, RootState> = (requestId: string | {\n  requestId: string | undefined;\n  fixedCacheKey: string | undefined;\n} | SkipToken) => (state: RootState) => MutationResultSelectorResult<Definition>;\nexport type MutationResultSelectorResult<Definition extends MutationDefinition<any, any, any, any>> = MutationSubState<Definition> & RequestStatusFlags;\nconst initialSubState: QuerySubState<any> = {\n  status: QueryStatus.uninitialized as const\n};\n\n// abuse immer to freeze default states\nconst defaultQuerySubState = /* @__PURE__ */createNextState(initialSubState, () => {});\nconst defaultMutationSubState = /* @__PURE__ */createNextState(initialSubState as MutationSubState<any>, () => {});\nexport type AllSelectors = ReturnType<typeof buildSelectors>;\nexport function buildSelectors<Definitions extends EndpointDefinitions, ReducerPath extends string>({\n  serializeQueryArgs,\n  reducerPath,\n  createSelector\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  reducerPath: ReducerPath;\n  createSelector: typeof _createSelector;\n}) {\n  type RootState = _RootState<Definitions, string, string>;\n  const selectSkippedQuery = (state: RootState) => defaultQuerySubState;\n  const selectSkippedMutation = (state: RootState) => defaultMutationSubState;\n  return {\n    buildQuerySelector,\n    buildInfiniteQuerySelector,\n    buildMutationSelector,\n    selectInvalidatedBy,\n    selectCachedArgsForQuery,\n    selectApiState,\n    selectQueries,\n    selectMutations,\n    selectQueryEntry,\n    selectConfig\n  };\n  function withRequestFlags<T extends {\n    status: QueryStatus;\n  }>(substate: T): T & RequestStatusFlags {\n    return {\n      ...substate,\n      ...getRequestStatusFlags(substate.status)\n    };\n  }\n  function selectApiState(rootState: RootState) {\n    const state = rootState[reducerPath];\n    if (process.env.NODE_ENV !== 'production') {\n      if (!state) {\n        if ((selectApiState as any).triggered) return state;\n        (selectApiState as any).triggered = true;\n        console.error(`Error: No data found at \\`state.${reducerPath}\\`. Did you forget to add the reducer to the store?`);\n      }\n    }\n    return state;\n  }\n  function selectQueries(rootState: RootState) {\n    return selectApiState(rootState)?.queries;\n  }\n  function selectQueryEntry(rootState: RootState, cacheKey: QueryCacheKey) {\n    return selectQueries(rootState)?.[cacheKey];\n  }\n  function selectMutations(rootState: RootState) {\n    return selectApiState(rootState)?.mutations;\n  }\n  function selectConfig(rootState: RootState) {\n    return selectApiState(rootState)?.config;\n  }\n  function buildAnyQuerySelector(endpointName: string, endpointDefinition: EndpointDefinition<any, any, any, any>, combiner: <T extends {\n    status: QueryStatus;\n  }>(substate: T) => T & RequestStatusFlags) {\n    return (queryArgs: any) => {\n      // Avoid calling serializeQueryArgs if the arg is skipToken\n      if (queryArgs === skipToken) {\n        return createSelector(selectSkippedQuery, combiner);\n      }\n      const serializedArgs = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      const selectQuerySubstate = (state: RootState) => selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState;\n      return createSelector(selectQuerySubstate, combiner);\n    };\n  }\n  function buildQuerySelector(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags) as QueryResultSelectorFactory<any, RootState>;\n  }\n  function buildInfiniteQuerySelector(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const {\n      infiniteQueryOptions\n    } = endpointDefinition;\n    function withInfiniteQueryResultFlags<T extends {\n      status: QueryStatus;\n    }>(substate: T): T & RequestStatusFlags & InfiniteQueryResultFlags {\n      const stateWithRequestFlags = {\n        ...(substate as InfiniteQuerySubState<any>),\n        ...getRequestStatusFlags(substate.status)\n      };\n      const {\n        isLoading,\n        isError,\n        direction\n      } = stateWithRequestFlags;\n      const isForward = direction === 'forward';\n      const isBackward = direction === 'backward';\n      return {\n        ...stateWithRequestFlags,\n        hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        isFetchingNextPage: isLoading && isForward,\n        isFetchingPreviousPage: isLoading && isBackward,\n        isFetchNextPageError: isError && isForward,\n        isFetchPreviousPageError: isError && isBackward\n      };\n    }\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags) as unknown as InfiniteQueryResultSelectorFactory<any, RootState>;\n  }\n  function buildMutationSelector() {\n    return (id => {\n      let mutationId: string | typeof skipToken;\n      if (typeof id === 'object') {\n        mutationId = getMutationCacheKey(id) ?? skipToken;\n      } else {\n        mutationId = id;\n      }\n      const selectMutationSubstate = (state: RootState) => selectApiState(state)?.mutations?.[mutationId as string] ?? defaultMutationSubState;\n      const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;\n      return createSelector(finalSelectMutationSubstate, withRequestFlags);\n    }) as MutationResultSelectorFactory<any, RootState>;\n  }\n  function selectInvalidatedBy(state: RootState, tags: ReadonlyArray<TagDescription<string> | null | undefined>): Array<{\n    endpointName: string;\n    originalArgs: any;\n    queryCacheKey: QueryCacheKey;\n  }> {\n    const apiState = state[reducerPath];\n    const toInvalidate = new Set<QueryCacheKey>();\n    for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {\n      const provided = apiState.provided.tags[tag.type];\n      if (!provided) {\n        continue;\n      }\n      let invalidateSubscriptions = (tag.id !== undefined ?\n      // id given: invalidate all queries that provide this type & id\n      provided[tag.id] :\n      // no id: invalidate all queries that provide this type\n      flatten(Object.values(provided))) ?? [];\n      for (const invalidate of invalidateSubscriptions) {\n        toInvalidate.add(invalidate);\n      }\n    }\n    return flatten(Array.from(toInvalidate.values()).map(queryCacheKey => {\n      const querySubState = apiState.queries[queryCacheKey];\n      return querySubState ? [{\n        queryCacheKey,\n        endpointName: querySubState.endpointName!,\n        originalArgs: querySubState.originalArgs\n      }] : [];\n    }));\n  }\n  function selectCachedArgsForQuery<QueryName extends AllQueryKeys<Definitions>>(state: RootState, queryName: QueryName): Array<QueryArgFromAnyQuery<Definitions[QueryName]>> {\n    return Object.values(selectQueries(state) as QueryState<any>).filter((entry): entry is Exclude<QuerySubState<Definitions[QueryName]>, {\n      status: QueryStatus.uninitialized;\n    }> => entry?.endpointName === queryName && entry.status !== QueryStatus.uninitialized).map(entry => entry.originalArgs);\n  }\n  function getHasNextPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data) return false;\n    return getNextPageParam(options, data, queryArg) != null;\n  }\n  function getHasPreviousPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data || !options.getPreviousPageParam) return false;\n    return getPreviousPageParam(options, data, queryArg) != null;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Api, ApiContext, Module, ModuleName } from './apiTypes';\nimport type { CombinedState } from './core/apiState';\nimport type { BaseQueryArg, BaseQueryFn } from './baseQueryTypes';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { EndpointBuilder, EndpointDefinitions, SchemaFailureConverter, SchemaFailureHandler } from './endpointDefinitions';\nimport { DefinitionType, isInfiniteQueryDefinition, isQueryDefinition } from './endpointDefinitions';\nimport { nanoid } from './core/rtkImports';\nimport type { UnknownAction } from '@reduxjs/toolkit';\nimport type { NoInfer } from './tsHelpers';\nimport { weakMapMemoize } from 'reselect';\nexport interface CreateApiOptions<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never> {\n  /**\n   * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   // highlight-start\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  baseQuery: BaseQuery;\n  /**\n   * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   tagTypes: ['Post', 'User'],\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  tagTypes?: readonly TagTypes[];\n  /**\n   * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"apis.js\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';\n   *\n   * const apiOne = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiOne',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   *\n   * const apiTwo = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiTwo',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   * ```\n   */\n  reducerPath?: ReducerPath;\n  /**\n   * Accepts a custom function if you have a need to change the creation of cache keys for any reason.\n   */\n  serializeQueryArgs?: SerializeQueryArgs<unknown>;\n  /**\n   * Endpoints are a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are three endpoint types: [`query`](../../rtk-query/usage/queries), [`infiniteQuery`](../../rtk-query/usage/infinite-queries) and [`mutation`](../../rtk-query/usage/mutations).\n   */\n  endpoints(build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>): Definitions;\n  /**\n   * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   *\n   * ```ts\n   * // codeblock-meta title=\"keepUnusedDataFor example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       keepUnusedDataFor: 5\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  keepUnusedDataFor?: number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `'delayed'`. This setting allows you to control when tags are invalidated after a mutation.\n   *\n   * - `'immediately'`: Queries are invalidated instantly after the mutation finished, even if they are running.\n   *   If the query provides tags that were invalidated while it ran, it won't be re-fetched.\n   * - `'delayed'`: Invalidation only happens after all queries and mutations are settled.\n   *   This ensures that queries are always invalidated correctly and automatically \"batches\" invalidations of concurrent mutations.\n   *   Note that if you constantly have some queries (or mutations) running, this can delay tag invalidations indefinitely.\n   */\n  invalidationBehavior?: 'delayed' | 'immediately';\n  /**\n   * A function that is passed every dispatched action. If this returns something other than `undefined`,\n   * that return value will be used to rehydrate fulfilled & errored queries.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"next-redux-wrapper rehydration example\"\n   * import type { Action, PayloadAction } from '@reduxjs/toolkit'\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import { HYDRATE } from 'next-redux-wrapper'\n   *\n   * type RootState = any; // normally inferred from state\n   *\n   * function isHydrateAction(action: Action): action is PayloadAction<RootState> {\n   *   return action.type === HYDRATE\n   * }\n   *\n   * export const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   extractRehydrationInfo(action, { reducerPath }): any {\n   *     if (isHydrateAction(action)) {\n   *       return action.payload[reducerPath]\n   *     }\n   *   },\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // omitted\n   *   }),\n   * })\n   * ```\n   */\n  extractRehydrationInfo?: (action: UnknownAction, {\n    reducerPath\n  }: {\n    reducerPath: ReducerPath;\n  }) => undefined | CombinedState<NoInfer<Definitions>, NoInfer<TagTypes>, NoInfer<ReducerPath>>;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *     }),\n   *   }),\n   *   onSchemaFailure: (error, info) => {\n   *     console.error(error, info)\n   *   },\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   }),\n   *   catchSchemaFailure: (error, info) => ({\n   *     status: \"CUSTOM_ERROR\",\n   *     error: error.schemaName + \" failed validation\",\n   *     data: error.issues,\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for all endpoints, unless overridden by the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type CreateApi<Modules extends ModuleName> = {\n  /**\n   * Creates a service to use in your application. Contains only the basic redux logic (the core module).\n   *\n   * @link https://redux-toolkit.js.org/rtk-query/api/createApi\n   */\n  <BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never>(options: CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>): Api<BaseQuery, Definitions, ReducerPath, TagTypes, Modules>;\n};\n\n/**\n * Builds a `createApi` method based on the provided `modules`.\n *\n * @link https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api\n *\n * @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints\n * @returns A `createApi` method using the provided `modules`.\n */\nexport function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(...modules: Modules): CreateApi<Modules[number]['name']> {\n  return function baseCreateApi(options) {\n    const extractRehydrationInfo = weakMapMemoize((action: UnknownAction) => options.extractRehydrationInfo?.(action, {\n      reducerPath: (options.reducerPath ?? 'api') as any\n    }));\n    const optionsWithDefaults: CreateApiOptions<any, any, any, any> = {\n      reducerPath: 'api',\n      keepUnusedDataFor: 60,\n      refetchOnMountOrArgChange: false,\n      refetchOnFocus: false,\n      refetchOnReconnect: false,\n      invalidationBehavior: 'delayed',\n      ...options,\n      extractRehydrationInfo,\n      serializeQueryArgs(queryArgsApi) {\n        let finalSerializeQueryArgs = defaultSerializeQueryArgs;\n        if ('serializeQueryArgs' in queryArgsApi.endpointDefinition) {\n          const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs!;\n          finalSerializeQueryArgs = queryArgsApi => {\n            const initialResult = endpointSQA(queryArgsApi);\n            if (typeof initialResult === 'string') {\n              // If the user function returned a string, use it as-is\n              return initialResult;\n            } else {\n              // Assume they returned an object (such as a subset of the original\n              // query args) or a primitive, and serialize it ourselves\n              return defaultSerializeQueryArgs({\n                ...queryArgsApi,\n                queryArgs: initialResult\n              });\n            }\n          };\n        } else if (options.serializeQueryArgs) {\n          finalSerializeQueryArgs = options.serializeQueryArgs;\n        }\n        return finalSerializeQueryArgs(queryArgsApi);\n      },\n      tagTypes: [...(options.tagTypes || [])]\n    };\n    const context: ApiContext<EndpointDefinitions> = {\n      endpointDefinitions: {},\n      batch(fn) {\n        // placeholder \"batch\" method to be overridden by plugins, for example with React.unstable_batchedUpdate\n        fn();\n      },\n      apiUid: nanoid(),\n      extractRehydrationInfo,\n      hasRehydrationInfo: weakMapMemoize(action => extractRehydrationInfo(action) != null)\n    };\n    const api = {\n      injectEndpoints,\n      enhanceEndpoints({\n        addTagTypes,\n        endpoints\n      }) {\n        if (addTagTypes) {\n          for (const eT of addTagTypes) {\n            if (!optionsWithDefaults.tagTypes!.includes(eT as any)) {\n              ;\n              (optionsWithDefaults.tagTypes as any[]).push(eT);\n            }\n          }\n        }\n        if (endpoints) {\n          for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {\n            if (typeof partialDefinition === 'function') {\n              partialDefinition(context.endpointDefinitions[endpointName]);\n            } else {\n              Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);\n            }\n          }\n        }\n        return api;\n      }\n    } as Api<BaseQueryFn, {}, string, string, Modules[number]['name']>;\n    const initializedModules = modules.map(m => m.init(api as any, optionsWithDefaults as any, context));\n    function injectEndpoints(inject: Parameters<typeof api.injectEndpoints>[0]) {\n      const evaluatedEndpoints = inject.endpoints({\n        query: x => ({\n          ...x,\n          type: DefinitionType.query\n        }) as any,\n        mutation: x => ({\n          ...x,\n          type: DefinitionType.mutation\n        }) as any,\n        infiniteQuery: x => ({\n          ...x,\n          type: DefinitionType.infinitequery\n        }) as any\n      });\n      for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {\n        if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {\n          if (inject.overrideExisting === 'throw') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(39) : `called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          } else if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n            console.error(`called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          }\n          continue;\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          if (isInfiniteQueryDefinition(definition)) {\n            const {\n              infiniteQueryOptions\n            } = definition;\n            const {\n              maxPages,\n              getPreviousPageParam\n            } = infiniteQueryOptions;\n            if (typeof maxPages === 'number') {\n              if (maxPages < 1) {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(40) : `maxPages for endpoint '${endpointName}' must be a number greater than 0`);\n              }\n              if (typeof getPreviousPageParam !== 'function') {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(41) : `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`);\n              }\n            }\n          }\n        }\n        context.endpointDefinitions[endpointName] = definition;\n        for (const m of initializedModules) {\n          m.injectEndpoint(endpointName, definition);\n        }\n      }\n      return api as any;\n    }\n    return api.injectEndpoints({\n      endpoints: options.endpoints as any\n    });\n  };\n}","import type { QueryCacheKey } from './core/apiState';\nimport type { EndpointDefinition } from './endpointDefinitions';\nimport { isPlainObject } from './core/rtkImports';\nconst cache: WeakMap<any, string> | undefined = WeakMap ? new WeakMap() : undefined;\nexport const defaultSerializeQueryArgs: SerializeQueryArgs<any> = ({\n  endpointName,\n  queryArgs\n}) => {\n  let serialized = '';\n  const cached = cache?.get(queryArgs);\n  if (typeof cached === 'string') {\n    serialized = cached;\n  } else {\n    const stringified = JSON.stringify(queryArgs, (key, value) => {\n      // Handle bigints\n      value = typeof value === 'bigint' ? {\n        $bigint: value.toString()\n      } : value;\n      // Sort the object keys before stringifying, to prevent useQuery({ a: 1, b: 2 }) having a different cache key than useQuery({ b: 2, a: 1 })\n      value = isPlainObject(value) ? Object.keys(value).sort().reduce<any>((acc, key) => {\n        acc[key] = (value as any)[key];\n        return acc;\n      }, {}) : value;\n      return value;\n    });\n    if (isPlainObject(queryArgs)) {\n      cache?.set(queryArgs, stringified);\n    }\n    serialized = stringified;\n  }\n  return `${endpointName}(${serialized})`;\n};\nexport type SerializeQueryArgs<QueryArgs, ReturnType = string> = (_: {\n  queryArgs: QueryArgs;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => ReturnType;\nexport type InternalSerializeQueryArgs = (_: {\n  queryArgs: any;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => QueryCacheKey;","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { BaseQueryFn } from './baseQueryTypes';\nexport const _NEVER = /* @__PURE__ */Symbol();\nexport type NEVER = typeof _NEVER;\n\n/**\n * Creates a \"fake\" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.\n * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.\n */\nexport function fakeBaseQuery<ErrorType>(): BaseQueryFn<void, NEVER, ErrorType, {}> {\n  return function () {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(33) : 'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.');\n  };\n}","/**\n * Note: this file should import all other files for type discovery and declaration merging\n */\nimport type { ActionCreatorWithPayload, Middleware, Reducer, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport { enablePatches } from 'immer';\nimport type { Api, Module } from '../apiTypes';\nimport type { BaseQueryFn } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinitions, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, TagDescription } from '../endpointDefinitions';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { assertCast, safeAssign } from '../tsHelpers';\nimport type { CombinedState, MutationKeys, QueryKeys, RootState } from './apiState';\nimport type { BuildInitiateApiEndpointMutation, BuildInitiateApiEndpointQuery, MutationActionCreatorResult, QueryActionCreatorResult, InfiniteQueryActionCreatorResult, BuildInitiateApiEndpointInfiniteQuery } from './buildInitiate';\nimport { buildInitiate } from './buildInitiate';\nimport type { ReferenceCacheCollection, ReferenceCacheLifecycle, ReferenceQueryLifecycle } from './buildMiddleware';\nimport { buildMiddleware } from './buildMiddleware';\nimport type { BuildSelectorsApiEndpointInfiniteQuery, BuildSelectorsApiEndpointMutation, BuildSelectorsApiEndpointQuery } from './buildSelectors';\nimport { buildSelectors } from './buildSelectors';\nimport type { SliceActions, UpsertEntries } from './buildSlice';\nimport { buildSlice } from './buildSlice';\nimport type { AllQueryKeys, BuildThunksApiEndpointInfiniteQuery, BuildThunksApiEndpointMutation, BuildThunksApiEndpointQuery, PatchQueryDataThunk, QueryArgFromAnyQueryDefinition, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nimport { buildThunks } from './buildThunks';\nimport { createSelector as _createSelector } from './rtkImports';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\n\n/**\n * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_\n * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value\n *\n * @overloadSummary\n * `force`\n * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.\n */\nexport type PrefetchOptions = {\n  ifOlderThan?: false | number;\n} | {\n  force?: boolean;\n};\nexport const coreModuleName = /* @__PURE__ */Symbol();\nexport type CoreModule = typeof coreModuleName | ReferenceCacheLifecycle | ReferenceQueryLifecycle | ReferenceCacheCollection;\nexport type ThunkWithReturnValue<T> = ThunkAction<T, any, any, UnknownAction>;\nexport interface ApiModules<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nBaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {\n  [coreModuleName]: {\n    /**\n     * This api's reducer should be mounted at `store[api.reducerPath]`.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducerPath: ReducerPath;\n    /**\n     * Internal actions not part of the public API. Note: These are subject to change at any given time.\n     */\n    internalActions: InternalActions;\n    /**\n     *  A standard redux reducer that enables core functionality. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducer: Reducer<CombinedState<Definitions, TagTypes, ReducerPath>, UnknownAction>;\n    /**\n     * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>>;\n    /**\n     * A collection of utility thunks for various situations.\n     */\n    util: {\n      /**\n       * A thunk that (if dispatched) will return a specific running query, identified\n       * by `endpointName` and `arg`.\n       * If that query is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific query triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueryThunk<EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>): ThunkWithReturnValue<QueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'query';\n      }> | InfiniteQueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'infinitequery';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return a specific running mutation, identified\n       * by `endpointName` and `fixedCacheKey` or `requestId`.\n       * If that mutation is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific mutation triggered in any way,\n       * including via hook trigger functions or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationThunk<EndpointName extends MutationKeys<Definitions>>(endpointName: EndpointName, fixedCacheKeyOrRequestId: string): ThunkWithReturnValue<MutationActionCreatorResult<Definitions[EndpointName] & {\n        type: 'mutation';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return all running queries.\n       *\n       * Useful for SSR scenarios to await all running queries triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueriesThunk(): ThunkWithReturnValue<Array<QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>>;\n\n      /**\n       * A thunk that (if dispatched) will return all running mutations.\n       *\n       * Useful for SSR scenarios to await all running mutations triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationsThunk(): ThunkWithReturnValue<Array<MutationActionCreatorResult<any>>>;\n\n      /**\n       * A Redux thunk that can be used to manually trigger pre-fetching of data.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.\n       *\n       * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.\n       *\n       * @example\n       *\n       * ```ts no-transpile\n       * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))\n       * ```\n       */\n      prefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction>;\n      /**\n       * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and an `updateRecipe` callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.\n       *\n       * The thunk executes _synchronously_, and returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).\n       *\n       * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, arg, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.\n       *\n       * Note that the first two arguments (`endpointName` and `arg`) are used to determine which existing cache entry to update. If no existing cache entry is found, the `updateRecipe` callback will not run.\n       *\n       * @example\n       *\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       * ```\n       */\n      updateQueryData: UpdateQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux thunk action creator that, when dispatched, acts as an artificial API request to upsert a value into the cache.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and the data to upsert.\n       *\n       * If no cache entry for that cache key exists, a cache entry will be created and the data added. If a cache entry already exists, this will _overwrite_ the existing cache entry data.\n       *\n       * The thunk executes _asynchronously_, and returns a promise that resolves when the store has been updated.\n       *\n       * If dispatched while an actual request is in progress, both the upsert and request will be handled as soon as they resolve, resulting in a \"last result wins\" update behavior.\n       *\n       * @example\n       *\n       * ```ts\n       * await dispatch(\n       *   api.util.upsertQueryData('getPost', {id: 1}, {id: 1, text: \"Hello!\"})\n       * )\n       * ```\n       */\n      upsertQueryData: UpsertQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n      /**\n       * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.\n       *\n       * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.\n       *\n       * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.\n       *\n       * @example\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       *\n       * // later\n       * dispatch(\n       *   api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)\n       * )\n       *\n       * // or\n       * patchCollection.undo()\n       * ```\n       */\n      patchQueryData: PatchQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.resetApiState())\n       * ```\n       */\n      resetApiState: SliceActions['resetApiState'];\n      upsertQueryEntries: UpsertEntries<Definitions>;\n\n      /**\n       * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).\n       *\n       * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.\n       *\n       * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.\n       *\n       * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:\n       *\n       * - `[TagType]`\n       * - `[{ type: TagType }]`\n       * - `[{ type: TagType, id: number | string }]`\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.invalidateTags(['Post']))\n       * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))\n       * dispatch(\n       *   api.util.invalidateTags([\n       *     { type: 'Post', id: 1 },\n       *     { type: 'Post', id: 'LIST' },\n       *   ])\n       * )\n       * ```\n       */\n      invalidateTags: ActionCreatorWithPayload<Array<TagDescription<TagTypes> | null | undefined>, string>;\n\n      /**\n       * A function to select all `{ endpointName, originalArgs, queryCacheKey }` combinations that would be invalidated by a specific set of tags.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectInvalidatedBy: (state: RootState<Definitions, string, ReducerPath>, tags: ReadonlyArray<TagDescription<TagTypes> | null | undefined>) => Array<{\n        endpointName: string;\n        originalArgs: any;\n        queryCacheKey: string;\n      }>;\n\n      /**\n       * A function to select all arguments currently cached for a given endpoint.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectCachedArgsForQuery: <QueryName extends AllQueryKeys<Definitions>>(state: RootState<Definitions, string, ReducerPath>, queryName: QueryName) => Array<QueryArgFromAnyQuery<Definitions[QueryName]>>;\n    };\n    /**\n     * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.\n     */\n    endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? ApiEndpointQuery<Definitions[K], Definitions> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? ApiEndpointMutation<Definitions[K], Definitions> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? ApiEndpointInfiniteQuery<Definitions[K], Definitions> : never };\n  };\n}\nexport interface ApiEndpointQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends QueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointQuery<Definition>, BuildInitiateApiEndpointQuery<Definition>, BuildSelectorsApiEndpointQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport interface ApiEndpointInfiniteQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends InfiniteQueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointInfiniteQuery<Definition>, BuildInitiateApiEndpointInfiniteQuery<Definition>, BuildSelectorsApiEndpointInfiniteQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface ApiEndpointMutation<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends MutationDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointMutation<Definition>, BuildInitiateApiEndpointMutation<Definition>, BuildSelectorsApiEndpointMutation<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport type ListenerActions = {\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n};\nexport type InternalActions = SliceActions & ListenerActions;\nexport interface CoreModuleOptions {\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module containing the basic redux logic for use with `buildCreateApi`.\n *\n * @example\n * ```ts\n * const createBaseApi = buildCreateApi(coreModule());\n * ```\n */\nexport const coreModule = ({\n  createSelector = _createSelector\n}: CoreModuleOptions = {}): Module<CoreModule> => ({\n  name: coreModuleName,\n  init(api, {\n    baseQuery,\n    tagTypes,\n    reducerPath,\n    serializeQueryArgs,\n    keepUnusedDataFor,\n    refetchOnMountOrArgChange,\n    refetchOnFocus,\n    refetchOnReconnect,\n    invalidationBehavior,\n    onSchemaFailure,\n    catchSchemaFailure,\n    skipSchemaValidation\n  }, context) {\n    enablePatches();\n    assertCast<InternalSerializeQueryArgs>(serializeQueryArgs);\n    const assertTagType: AssertTagTypes = tag => {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        if (!tagTypes.includes(tag.type as any)) {\n          console.error(`Tag type '${tag.type}' was used, but not specified in \\`tagTypes\\`!`);\n        }\n      }\n      return tag;\n    };\n    Object.assign(api, {\n      reducerPath,\n      endpoints: {},\n      internalActions: {\n        onOnline,\n        onOffline,\n        onFocus,\n        onFocusLost\n      },\n      util: {}\n    });\n    const selectors = buildSelectors({\n      serializeQueryArgs: serializeQueryArgs as any,\n      reducerPath,\n      createSelector\n    });\n    const {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery,\n      buildQuerySelector,\n      buildInfiniteQuerySelector,\n      buildMutationSelector\n    } = selectors;\n    safeAssign(api.util, {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery\n    });\n    const {\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      buildMatchThunkActions\n    } = buildThunks({\n      baseQuery,\n      reducerPath,\n      context,\n      api,\n      serializeQueryArgs,\n      assertTagType,\n      selectors,\n      onSchemaFailure,\n      catchSchemaFailure,\n      skipSchemaValidation\n    });\n    const {\n      reducer,\n      actions: sliceActions\n    } = buildSlice({\n      context,\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      serializeQueryArgs,\n      reducerPath,\n      assertTagType,\n      config: {\n        refetchOnFocus,\n        refetchOnReconnect,\n        refetchOnMountOrArgChange,\n        keepUnusedDataFor,\n        reducerPath,\n        invalidationBehavior\n      }\n    });\n    safeAssign(api.util, {\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      resetApiState: sliceActions.resetApiState,\n      upsertQueryEntries: sliceActions.cacheEntriesUpserted as any\n    });\n    safeAssign(api.internalActions, sliceActions);\n    const {\n      middleware,\n      actions: middlewareActions\n    } = buildMiddleware({\n      reducerPath,\n      context,\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      assertTagType,\n      selectors\n    });\n    safeAssign(api.util, middlewareActions);\n    safeAssign(api, {\n      reducer: reducer as any,\n      middleware\n    });\n    const {\n      buildInitiateQuery,\n      buildInitiateInfiniteQuery,\n      buildInitiateMutation,\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueriesThunk,\n      getRunningQueryThunk\n    } = buildInitiate({\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      serializeQueryArgs: serializeQueryArgs as any,\n      context\n    });\n    safeAssign(api.util, {\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueryThunk,\n      getRunningQueriesThunk\n    });\n    return {\n      name: coreModuleName,\n      injectEndpoint(endpointName, definition) {\n        const anyApi = api as any as Api<any, Record<string, any>, string, string, CoreModule>;\n        const endpoint = anyApi.endpoints[endpointName] ??= {} as any;\n        if (isQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildQuerySelector(endpointName, definition),\n            initiate: buildInitiateQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n        if (isMutationDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildMutationSelector(),\n            initiate: buildInitiateMutation(endpointName)\n          }, buildMatchThunkActions(mutationThunk, endpointName));\n        }\n        if (isInfiniteQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildInfiniteQuerySelector(endpointName, definition),\n            initiate: buildInitiateInfiniteQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n      }\n    };\n  }\n});","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import type { InternalHandlerBuilder, SubscriptionSelectors } from './types';\nimport type { SubscriptionState } from '../apiState';\nimport { produceWithPatches } from 'immer';\nimport type { Action } from '@reduxjs/toolkit';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildBatchedActionsHandler: InternalHandlerBuilder<[actionShouldContinue: boolean, returnValue: SubscriptionSelectors | boolean]> = ({\n  api,\n  queryThunk,\n  internalState\n}) => {\n  const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;\n  let previousSubscriptions: SubscriptionState = null as unknown as SubscriptionState;\n  let updateSyncTimer: ReturnType<typeof window.setTimeout> | null = null;\n  const {\n    updateSubscriptionOptions,\n    unsubscribeQueryResult\n  } = api.internalActions;\n\n  // Actually intentionally mutate the subscriptions state used in the middleware\n  // This is done to speed up perf when loading many components\n  const actuallyMutateSubscriptions = (mutableState: SubscriptionState, action: Action) => {\n    if (updateSubscriptionOptions.match(action)) {\n      const {\n        queryCacheKey,\n        requestId,\n        options\n      } = action.payload;\n      if (mutableState?.[queryCacheKey]?.[requestId]) {\n        mutableState[queryCacheKey]![requestId] = options;\n      }\n      return true;\n    }\n    if (unsubscribeQueryResult.match(action)) {\n      const {\n        queryCacheKey,\n        requestId\n      } = action.payload;\n      if (mutableState[queryCacheKey]) {\n        delete mutableState[queryCacheKey]![requestId];\n      }\n      return true;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) {\n      delete mutableState[action.payload.queryCacheKey];\n      return true;\n    }\n    if (queryThunk.pending.match(action)) {\n      const {\n        meta: {\n          arg,\n          requestId\n        }\n      } = action;\n      const substate = mutableState[arg.queryCacheKey] ??= {};\n      substate[`${requestId}_running`] = {};\n      if (arg.subscribe) {\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n      }\n      return true;\n    }\n    let mutated = false;\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {\n      const state = mutableState[action.meta.arg.queryCacheKey] || {};\n      const key = `${action.meta.requestId}_running`;\n      mutated ||= !!state[key];\n      delete state[key];\n    }\n    if (queryThunk.rejected.match(action)) {\n      const {\n        meta: {\n          condition,\n          arg,\n          requestId\n        }\n      } = action;\n      if (condition && arg.subscribe) {\n        const substate = mutableState[arg.queryCacheKey] ??= {};\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n        mutated = true;\n      }\n    }\n    return mutated;\n  };\n  const getSubscriptions = () => internalState.currentSubscriptions;\n  const getSubscriptionCount = (queryCacheKey: string) => {\n    const subscriptions = getSubscriptions();\n    const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {};\n    return countObjectKeys(subscriptionsForQueryArg);\n  };\n  const isRequestSubscribed = (queryCacheKey: string, requestId: string) => {\n    const subscriptions = getSubscriptions();\n    return !!subscriptions?.[queryCacheKey]?.[requestId];\n  };\n  const subscriptionSelectors: SubscriptionSelectors = {\n    getSubscriptions,\n    getSubscriptionCount,\n    isRequestSubscribed\n  };\n  return (action, mwApi): [actionShouldContinue: boolean, result: SubscriptionSelectors | boolean] => {\n    if (!previousSubscriptions) {\n      // Initialize it the first time this handler runs\n      previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n    }\n    if (api.util.resetApiState.match(action)) {\n      previousSubscriptions = internalState.currentSubscriptions = {};\n      updateSyncTimer = null;\n      return [true, false];\n    }\n\n    // Intercept requests by hooks to see if they're subscribed\n    // We return the internal state reference so that hooks\n    // can do their own checks to see if they're still active.\n    // It's stupid and hacky, but it does cut down on some dispatch calls.\n    if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {\n      return [false, subscriptionSelectors];\n    }\n\n    // Update subscription data based on this action\n    const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);\n    let actionShouldContinue = true;\n    if (didMutate) {\n      if (!updateSyncTimer) {\n        // We only use the subscription state for the Redux DevTools at this point,\n        // as the real data is kept here in the middleware.\n        // Given that, we can throttle synchronizing this state significantly to\n        // save on overall perf.\n        // In 1.9, it was updated in a microtask, but now we do it at most every 500ms.\n        updateSyncTimer = setTimeout(() => {\n          // Deep clone the current subscription data\n          const newSubscriptions: SubscriptionState = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n          // Figure out a smaller diff between original and current\n          const [, patches] = produceWithPatches(previousSubscriptions, () => newSubscriptions);\n\n          // Sync the store state for visibility\n          mwApi.next(api.internalActions.subscriptionsUpdated(patches));\n          // Save the cloned state for later reference\n          previousSubscriptions = newSubscriptions;\n          updateSyncTimer = null;\n        }, 500);\n      }\n      const isSubscriptionSliceAction = typeof action.type == 'string' && !!action.type.startsWith(subscriptionsPrefix);\n      const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;\n      actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;\n    }\n    return [actionShouldContinue, false];\n  };\n};","import type { QueryDefinition } from '../../endpointDefinitions';\nimport type { ConfigState, QueryCacheKey } from '../apiState';\nimport { isAnyOf } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, QueryStateMeta, SubMiddlewareApi, TimeoutId } from './types';\nexport type ReferenceCacheCollection = never;\nfunction isObjectEmpty(obj: Record<any, any>) {\n  // Apparently a for..in loop is faster than `Object.keys()` here:\n  // https://stackoverflow.com/a/59787784/62937\n  for (const k in obj) {\n    // If there is at least one key, it's not empty\n    return false;\n  }\n  return true;\n}\nexport type CacheCollectionQueryExtraOptions = {\n  /**\n   * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_\n   *\n   * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   */\n  keepUnusedDataFor?: number;\n};\n\n// Per https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value , browsers store\n// `setTimeout()` timer values in a 32-bit int. If we pass a value in that's larger than that,\n// it wraps and ends up executing immediately.\n// Our `keepUnusedDataFor` values are in seconds, so adjust the numbers here accordingly.\nexport const THIRTY_TWO_BIT_MAX_INT = 2_147_483_647;\nexport const THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2_147_483_647 / 1_000 - 1;\nexport const buildCacheCollectionHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  api,\n  queryThunk,\n  context,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectConfig\n  }\n}) => {\n  const {\n    removeQueryResult,\n    unsubscribeQueryResult,\n    cacheEntriesUpserted\n  } = api.internalActions;\n  const canTriggerUnsubscribe = isAnyOf(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);\n  function anySubscriptionsRemainingForKey(queryCacheKey: string) {\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    return !!subscriptions && !isObjectEmpty(subscriptions);\n  }\n  const currentRemovalTimeouts: QueryStateMeta<TimeoutId> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, internalState) => {\n    const state = mwApi.getState();\n    const config = selectConfig(state);\n    if (canTriggerUnsubscribe(action)) {\n      let queryCacheKeys: QueryCacheKey[];\n      if (cacheEntriesUpserted.match(action)) {\n        queryCacheKeys = action.payload.map(entry => entry.queryDescription.queryCacheKey);\n      } else {\n        const {\n          queryCacheKey\n        } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;\n        queryCacheKeys = [queryCacheKey];\n      }\n      handleUnsubscribeMany(queryCacheKeys, mwApi, config);\n    }\n    if (api.util.resetApiState.match(action)) {\n      for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {\n        if (timeout) clearTimeout(timeout);\n        delete currentRemovalTimeouts[key];\n      }\n    }\n    if (context.hasRehydrationInfo(action)) {\n      const {\n        queries\n      } = context.extractRehydrationInfo(action)!;\n      // Gotcha:\n      // If rehydrating before the endpoint has been injected,the global `keepUnusedDataFor`\n      // will be used instead of the endpoint-specific one.\n      handleUnsubscribeMany(Object.keys(queries) as QueryCacheKey[], mwApi, config);\n    }\n  };\n  function handleUnsubscribeMany(cacheKeys: QueryCacheKey[], api: SubMiddlewareApi, config: ConfigState<string>) {\n    const state = api.getState();\n    for (const queryCacheKey of cacheKeys) {\n      const entry = selectQueryEntry(state, queryCacheKey);\n      handleUnsubscribe(queryCacheKey, entry?.endpointName, api, config);\n    }\n  }\n  function handleUnsubscribe(queryCacheKey: QueryCacheKey, endpointName: string | undefined, api: SubMiddlewareApi, config: ConfigState<string>) {\n    const endpointDefinition = context.endpointDefinitions[endpointName!] as QueryDefinition<any, any, any, any>;\n    const keepUnusedDataFor = endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor;\n    if (keepUnusedDataFor === Infinity) {\n      // Hey, user said keep this forever!\n      return;\n    }\n    // Prevent `setTimeout` timers from overflowing a 32-bit internal int, by\n    // clamping the max value to be at most 1000ms less than the 32-bit max.\n    // Look, a 24.8-day keepalive ought to be enough for anybody, right? :)\n    // Also avoid negative values too.\n    const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));\n    if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n      const currentTimeout = currentRemovalTimeouts[queryCacheKey];\n      if (currentTimeout) {\n        clearTimeout(currentTimeout);\n      }\n      currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {\n        if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n          api.dispatch(removeQueryResult({\n            queryCacheKey\n          }));\n        }\n        delete currentRemovalTimeouts![queryCacheKey];\n      }, finalKeepUnusedDataFor * 1000);\n    }\n  }\n  return handler;\n};","import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { BaseQueryFn, BaseQueryMeta, BaseQueryResult } from '../../baseQueryTypes';\nimport type { BaseEndpointDefinition } from '../../endpointDefinitions';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { QueryCacheKey, RootState } from '../apiState';\nimport type { MutationResultSelectorResult, QueryResultSelectorResult } from '../buildSelectors';\nimport { getMutationCacheKey } from '../buildSlice';\nimport type { PatchCollection, Recipe } from '../buildThunks';\nimport { isAsyncThunkAction, isFulfilled } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseWithKnownReason, SubMiddlewareApi } from './types';\nexport type ReferenceCacheLifecycle = never;\nexport interface QueryBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends LifecycleApi<ReducerPath> {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): QueryResultSelectorResult<{\n    type: DefinitionType.query;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n  /**\n   * Updates the current cache entry value.\n   * For documentation see `api.util.updateQueryData`.\n   */\n  updateCachedData(updateRecipe: Recipe<ResultType>): PatchCollection;\n}\nexport type MutationBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = LifecycleApi<ReducerPath> & {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): MutationResultSelectorResult<{\n    type: DefinitionType.mutation;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n};\ntype LifecycleApi<ReducerPath extends string = string> = {\n  /**\n   * The dispatch method for the store\n   */\n  dispatch: ThunkDispatch<any, any, UnknownAction>;\n  /**\n   * A method to get the current state\n   */\n  getState(): RootState<any, any, ReducerPath>;\n  /**\n   * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.\n   */\n  extra: unknown;\n  /**\n   * A unique ID generated for the mutation\n   */\n  requestId: string;\n};\ntype CacheLifecyclePromises<ResultType = unknown, MetaType = unknown> = {\n  /**\n   * Promise that will resolve with the first value for this cache key.\n   * This allows you to `await` until an actual value is in cache.\n   *\n   * If the cache entry is removed from the cache before any value has ever\n   * been resolved, this Promise will reject with\n   * `new Error('Promise never resolved before cacheEntryRemoved.')`\n   * to prevent memory leaks.\n   * You can just re-throw that error (or not handle it at all) -\n   * it will be caught outside of `cacheEntryAdded`.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  cacheDataLoaded: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: MetaType;\n  }, typeof neverResolvedError>;\n  /**\n   * Promise that allows you to wait for the point in time when the cache entry\n   * has been removed from the cache, by not being used/subscribed to any more\n   * in the application for too long or by dispatching `api.util.resetApiState`.\n   */\n  cacheEntryRemoved: Promise<void>;\n};\nexport interface QueryCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>> {}\nexport type MutationCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>>;\nexport type CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: QueryCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type CacheLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: MutationCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nconst neverResolvedError = new Error('Promise never resolved before cacheEntryRemoved.') as Error & {\n  message: 'Promise never resolved before cacheEntryRemoved.';\n};\nexport const buildCacheLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  reducerPath,\n  context,\n  queryThunk,\n  mutationThunk,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectApiState\n  }\n}) => {\n  const isQueryThunk = isAsyncThunkAction(queryThunk);\n  const isMutationThunk = isAsyncThunkAction(mutationThunk);\n  const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    valueResolved?(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    cacheEntryRemoved(): void;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  function resolveLifecycleEntry(cacheKey: string, data: unknown, meta: unknown) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle?.valueResolved) {\n      lifecycle.valueResolved({\n        data,\n        meta\n      });\n      delete lifecycle.valueResolved;\n    }\n  }\n  function removeLifecycleEntry(cacheKey: string) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle) {\n      delete lifecycleMap[cacheKey];\n      lifecycle.cacheEntryRemoved();\n    }\n  }\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, stateBefore) => {\n    const cacheKey = getCacheKey(action) as QueryCacheKey;\n    function checkForNewCacheKey(endpointName: string, cacheKey: QueryCacheKey, requestId: string, originalArgs: unknown) {\n      const oldEntry = selectQueryEntry(stateBefore, cacheKey);\n      const newEntry = selectQueryEntry(mwApi.getState(), cacheKey);\n      if (!oldEntry && newEntry) {\n        handleNewKey(endpointName, originalArgs, cacheKey, mwApi, requestId);\n      }\n    }\n    if (queryThunk.pending.match(action)) {\n      checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);\n    } else if (api.internalActions.cacheEntriesUpserted.match(action)) {\n      for (const {\n        queryDescription,\n        value\n      } of action.payload) {\n        const {\n          endpointName,\n          originalArgs,\n          queryCacheKey\n        } = queryDescription;\n        checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);\n        resolveLifecycleEntry(queryCacheKey, value, {});\n      }\n    } else if (mutationThunk.pending.match(action)) {\n      const state = mwApi.getState()[reducerPath].mutations[cacheKey];\n      if (state) {\n        handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);\n      }\n    } else if (isFulfilledThunk(action)) {\n      resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);\n    } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {\n      removeLifecycleEntry(cacheKey);\n    } else if (api.util.resetApiState.match(action)) {\n      for (const cacheKey of Object.keys(lifecycleMap)) {\n        removeLifecycleEntry(cacheKey);\n      }\n    }\n  };\n  function getCacheKey(action: any) {\n    if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;\n    if (isMutationThunk(action)) {\n      return action.meta.arg.fixedCacheKey ?? action.meta.requestId;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;\n    if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);\n    return '';\n  }\n  function handleNewKey(endpointName: string, originalArgs: any, queryCacheKey: string, mwApi: SubMiddlewareApi, requestId: string) {\n    const endpointDefinition = context.endpointDefinitions[endpointName];\n    const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded;\n    if (!onCacheEntryAdded) return;\n    const lifecycle = {} as CacheLifecycle;\n    const cacheEntryRemoved = new Promise<void>(resolve => {\n      lifecycle.cacheEntryRemoved = resolve;\n    });\n    const cacheDataLoaded: PromiseWithKnownReason<{\n      data: unknown;\n      meta: unknown;\n    }, typeof neverResolvedError> = Promise.race([new Promise<{\n      data: unknown;\n      meta: unknown;\n    }>(resolve => {\n      lifecycle.valueResolved = resolve;\n    }), cacheEntryRemoved.then(() => {\n      throw neverResolvedError;\n    })]);\n    // prevent uncaught promise rejections from happening.\n    // if the original promise is used in any way, that will create a new promise that will throw again\n    cacheDataLoaded.catch(() => {});\n    lifecycleMap[queryCacheKey] = lifecycle;\n    const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : queryCacheKey);\n    const extra = mwApi.dispatch((_, __, extra) => extra);\n    const lifecycleApi = {\n      ...mwApi,\n      getCacheEntry: () => selector(mwApi.getState()),\n      requestId,\n      extra,\n      updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n      cacheDataLoaded,\n      cacheEntryRemoved\n    };\n    const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi as any);\n    // if a `neverResolvedError` was thrown, but not handled in the running handler, do not let it leak out further\n    Promise.resolve(runningHandler).catch(e => {\n      if (e === neverResolvedError) return;\n      throw e;\n    });\n  }\n  return handler;\n};","import type { InternalHandlerBuilder } from './types';\nexport const buildDevCheckHandler: InternalHandlerBuilder = ({\n  api,\n  context: {\n    apiUid\n  },\n  reducerPath\n}) => {\n  return (action, mwApi) => {\n    if (api.util.resetApiState.match(action)) {\n      // dispatch after api reset\n      mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (api.internalActions.middlewareRegistered.match(action) && action.payload === apiUid && mwApi.getState()[reducerPath]?.config?.middlewareRegistered === 'conflict') {\n        console.warn(`There is a mismatch between slice and middleware for the reducerPath \"${reducerPath}\".\nYou can only have one api per reducer path, this will lead to crashes in various situations!${reducerPath === 'api' ? `\nIf you have multiple apis, you *have* to specify the reducerPath option when using createApi!` : ''}`);\n      }\n    }\n  };\n};","import { isAnyOf, isFulfilled, isRejected, isRejectedWithValue } from '../rtkImports';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport { calculateProvidedBy } from '../../endpointDefinitions';\nimport type { CombinedState, QueryCacheKey } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport { calculateProvidedByThunk } from '../buildThunks';\nimport type { SubMiddlewareApi, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  context: {\n    endpointDefinitions\n  },\n  mutationThunk,\n  queryThunk,\n  api,\n  assertTagType,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const isThunkActionWithTags = isAnyOf(isFulfilled(mutationThunk), isRejectedWithValue(mutationThunk));\n  const isQueryEnd = isAnyOf(isFulfilled(mutationThunk, queryThunk), isRejected(mutationThunk, queryThunk));\n  let pendingTagInvalidations: FullTagDescription<string>[] = [];\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isThunkActionWithTags(action)) {\n      invalidateTags(calculateProvidedByThunk(action, 'invalidatesTags', endpointDefinitions, assertTagType), mwApi);\n    } else if (isQueryEnd(action)) {\n      invalidateTags([], mwApi);\n    } else if (api.util.invalidateTags.match(action)) {\n      invalidateTags(calculateProvidedBy(action.payload, undefined, undefined, undefined, undefined, assertTagType), mwApi);\n    }\n  };\n  function hasPendingRequests(state: CombinedState<EndpointDefinitions, string, string>) {\n    const {\n      queries,\n      mutations\n    } = state;\n    for (const cacheRecord of [queries, mutations]) {\n      for (const key in cacheRecord) {\n        if (cacheRecord[key]?.status === QueryStatus.pending) return true;\n      }\n    }\n    return false;\n  }\n  function invalidateTags(newTags: readonly FullTagDescription<string>[], mwApi: SubMiddlewareApi) {\n    const rootState = mwApi.getState();\n    const state = rootState[reducerPath];\n    pendingTagInvalidations.push(...newTags);\n    if (state.config.invalidationBehavior === 'delayed' && hasPendingRequests(state)) {\n      return;\n    }\n    const tags = pendingTagInvalidations;\n    pendingTagInvalidations = [];\n    if (tags.length === 0) return;\n    const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);\n    context.batch(() => {\n      const valuesArray = Array.from(toInvalidate.values());\n      for (const {\n        queryCacheKey\n      } of valuesArray) {\n        const querySubState = state.queries[queryCacheKey];\n        const subscriptionSubState = internalState.currentSubscriptions[queryCacheKey] ?? {};\n        if (querySubState) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            mwApi.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            mwApi.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { QueryCacheKey, QuerySubstateIdentifier, Subscribers } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport type { QueryStateMeta, SubMiddlewareApi, TimeoutId, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nexport const buildPollingHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  queryThunk,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const currentPolls: QueryStateMeta<{\n    nextPollTimestamp: number;\n    timeout?: TimeoutId;\n    pollingInterval: number;\n  }> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {\n      updatePollingInterval(action.payload, mwApi);\n    }\n    if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {\n      updatePollingInterval(action.meta.arg, mwApi);\n    }\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {\n      startNextPoll(action.meta.arg, mwApi);\n    }\n    if (api.util.resetApiState.match(action)) {\n      clearPolls();\n    }\n  };\n  function getCacheEntrySubscriptions(queryCacheKey: QueryCacheKey, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    return subscriptions;\n  }\n  function startNextPoll({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    const {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) return;\n    const currentPoll = currentPolls[queryCacheKey];\n    if (currentPoll?.timeout) {\n      clearTimeout(currentPoll.timeout);\n      currentPoll.timeout = undefined;\n    }\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    currentPolls[queryCacheKey] = {\n      nextPollTimestamp,\n      pollingInterval: lowestPollingInterval,\n      timeout: setTimeout(() => {\n        if (state.config.focused || !skipPollingIfUnfocused) {\n          api.dispatch(refetchQuery(querySubState));\n        }\n        startNextPoll({\n          queryCacheKey\n        }, api);\n      }, lowestPollingInterval)\n    };\n  }\n  function updatePollingInterval({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) {\n      return;\n    }\n    const {\n      lowestPollingInterval\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) {\n      cleanupPollForKey(queryCacheKey);\n      return;\n    }\n    const currentPoll = currentPolls[queryCacheKey];\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {\n      startNextPoll({\n        queryCacheKey\n      }, api);\n    }\n  }\n  function cleanupPollForKey(key: string) {\n    const existingPoll = currentPolls[key];\n    if (existingPoll?.timeout) {\n      clearTimeout(existingPoll.timeout);\n    }\n    delete currentPolls[key];\n  }\n  function clearPolls() {\n    for (const key of Object.keys(currentPolls)) {\n      cleanupPollForKey(key);\n    }\n  }\n  function findLowestPollingInterval(subscribers: Subscribers = {}) {\n    let skipPollingIfUnfocused: boolean | undefined = false;\n    let lowestPollingInterval = Number.POSITIVE_INFINITY;\n    for (let key in subscribers) {\n      if (!!subscribers[key].pollingInterval) {\n        lowestPollingInterval = Math.min(subscribers[key].pollingInterval!, lowestPollingInterval);\n        skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;\n      }\n    }\n    return {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    };\n  }\n  return handler;\n};","import type { BaseQueryError, BaseQueryFn, BaseQueryMeta } from '../../baseQueryTypes';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { Recipe } from '../buildThunks';\nimport { isFulfilled, isPending, isRejected } from '../rtkImports';\nimport type { MutationBaseLifecycleApi, QueryBaseLifecycleApi } from './cacheLifecycle';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseConstructorWithKnownReason, PromiseWithKnownReason } from './types';\nexport type ReferenceQueryLifecycle = never;\ntype QueryLifecyclePromises<ResultType, BaseQuery extends BaseQueryFn> = {\n  /**\n   * Promise that will resolve with the (transformed) query result.\n   *\n   * If the query fails, this promise will reject with the error.\n   *\n   * This allows you to `await` for the query to finish.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  queryFulfilled: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: BaseQueryMeta<BaseQuery>;\n  }, QueryFulfilledRejectionReason<BaseQuery>>;\n};\ntype QueryFulfilledRejectionReason<BaseQuery extends BaseQueryFn> = {\n  error: BaseQueryError<BaseQuery>;\n  /**\n   * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.\n   */\n  isUnhandledError: false;\n  /**\n   * The `meta` returned by the `baseQuery`\n   */\n  meta: BaseQueryMeta<BaseQuery>;\n} | {\n  error: unknown;\n  meta?: undefined;\n  /**\n   * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn`, `transformResponse` or `transformErrorResponse` throwing an error instead of handling it properly.\n   * There can not be made any assumption about the shape of `error`.\n   */\n  isUnhandledError: true;\n};\nexport type QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used to perform side-effects throughout the lifecycle of the query.\n   *\n   * @example\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * import { messageCreated } from './notificationsSlice\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       async onQueryStarted(id, { dispatch, queryFulfilled }) {\n   *         // `onStart` side-effect\n   *         dispatch(messageCreated('Fetching posts...'))\n   *         try {\n   *           const { data } = await queryFulfilled\n   *           // `onSuccess` side-effect\n   *           dispatch(messageCreated('Posts received!'))\n   *         } catch (err) {\n   *           // `onError` side-effect\n   *           dispatch(messageCreated('Error fetching posts!'))\n   *         }\n   *       }\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, queryLifeCycleApi: QueryLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type QueryLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used for `optimistic updates`.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       providesTags: ['Post'],\n   *     }),\n   *     updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({\n   *       query: ({ id, ...patch }) => ({\n   *         url: `post/${id}`,\n   *         method: 'PATCH',\n   *         body: patch,\n   *       }),\n   *       invalidatesTags: ['Post'],\n   *       async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {\n   *         const patchResult = dispatch(\n   *           api.util.updateQueryData('getPost', id, (draft) => {\n   *             Object.assign(draft, patch)\n   *           })\n   *         )\n   *         try {\n   *           await queryFulfilled\n   *         } catch {\n   *           patchResult.undo()\n   *         }\n   *       },\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, mutationLifeCycleApi: MutationLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport interface QueryLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, QueryLifecyclePromises<ResultType, BaseQuery> {}\nexport type MutationLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & QueryLifecyclePromises<ResultType, BaseQuery>;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleQueryExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific query.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedQueryOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, QueryArgument>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedQueryOnQueryStarted<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async (queryArgument, { dispatch, queryFulfilled }) => {\n *   const result = await queryFulfilled\n *\n *   const { posts } = result.data\n *\n *   // Pre-fill the individual post entries with the results\n *   // from the list endpoint query\n *   dispatch(\n *     baseApiSlice.util.upsertQueryEntries(\n *       posts.map((post) => ({\n *         endpointName: 'getPostById',\n *         arg: post.id,\n *         value: post,\n *       })),\n *     ),\n *   )\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     getPostsByUserId: build.query<PostsApiResponse, QueryArgument>({\n *       query: (userId) => `/posts/user/${userId}`,\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedQueryOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleMutationExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific mutation.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedMutationOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = Pick<Post, 'id'> & Partial<Post>\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, number>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedMutationOnQueryStarted<\n *   Post,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async ({ id, ...patch }, { dispatch, queryFulfilled }) => {\n *   const patchCollection = dispatch(\n *     baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {\n *       Object.assign(draftPost, patch)\n *     }),\n *   )\n *\n *   try {\n *     await queryFulfilled\n *   } catch {\n *     patchCollection.undo()\n *   }\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     addPost: build.mutation<Post, Omit<QueryArgument, 'id'>>({\n *       query: (body) => ({\n *         url: `posts/add`,\n *         method: 'POST',\n *         body,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *\n *     updatePost: build.mutation<Post, QueryArgument>({\n *       query: ({ id, ...patch }) => ({\n *         url: `post/${id}`,\n *         method: 'PATCH',\n *         body: patch,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedMutationOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleMutationExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\nexport const buildQueryLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  context,\n  queryThunk,\n  mutationThunk\n}) => {\n  const isPendingThunk = isPending(queryThunk, mutationThunk);\n  const isRejectedThunk = isRejected(queryThunk, mutationThunk);\n  const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    resolve(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    reject(value: QueryFulfilledRejectionReason<any>): unknown;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isPendingThunk(action)) {\n      const {\n        requestId,\n        arg: {\n          endpointName,\n          originalArgs\n        }\n      } = action.meta;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const onQueryStarted = endpointDefinition?.onQueryStarted;\n      if (onQueryStarted) {\n        const lifecycle = {} as CacheLifecycle;\n        const queryFulfilled = new (Promise as PromiseConstructorWithKnownReason)<{\n          data: unknown;\n          meta: unknown;\n        }, QueryFulfilledRejectionReason<any>>((resolve, reject) => {\n          lifecycle.resolve = resolve;\n          lifecycle.reject = reject;\n        });\n        // prevent uncaught promise rejections from happening.\n        // if the original promise is used in any way, that will create a new promise that will throw again\n        queryFulfilled.catch(() => {});\n        lifecycleMap[requestId] = lifecycle;\n        const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : requestId);\n        const extra = mwApi.dispatch((_, __, extra) => extra);\n        const lifecycleApi = {\n          ...mwApi,\n          getCacheEntry: () => selector(mwApi.getState()),\n          requestId,\n          extra,\n          updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n          queryFulfilled\n        };\n        onQueryStarted(originalArgs, lifecycleApi as any);\n      }\n    } else if (isFullfilledThunk(action)) {\n      const {\n        requestId,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.resolve({\n        data: action.payload,\n        meta: baseQueryMeta\n      });\n      delete lifecycleMap[requestId];\n    } else if (isRejectedThunk(action)) {\n      const {\n        requestId,\n        rejectedWithValue,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.reject({\n        error: action.payload ?? action.error,\n        isUnhandledError: !rejectedWithValue,\n        meta: baseQueryMeta as any\n      });\n      delete lifecycleMap[requestId];\n    }\n  };\n  return handler;\n};","import { QueryStatus } from '../apiState';\nimport type { QueryCacheKey } from '../apiState';\nimport { onFocus, onOnline } from '../setupListeners';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, SubMiddlewareApi } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildWindowEventHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (onFocus.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnFocus');\n    }\n    if (onOnline.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnReconnect');\n    }\n  };\n  function refetchValidQueries(api: SubMiddlewareApi, type: 'refetchOnFocus' | 'refetchOnReconnect') {\n    const state = api.getState()[reducerPath];\n    const queries = state.queries;\n    const subscriptions = internalState.currentSubscriptions;\n    context.batch(() => {\n      for (const queryCacheKey of Object.keys(subscriptions)) {\n        const querySubState = queries[queryCacheKey];\n        const subscriptionSubState = subscriptions[queryCacheKey];\n        if (!subscriptionSubState || !querySubState) continue;\n        const shouldRefetch = Object.values(subscriptionSubState).some(sub => sub[type] === true) || Object.values(subscriptionSubState).every(sub => sub[type] === undefined) && state.config[type];\n        if (shouldRefetch) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            api.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            api.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { Action, Middleware, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport type { QueryStatus, QuerySubState, RootState } from '../apiState';\nimport type { QueryThunkArg } from '../buildThunks';\nimport { createAction, isAction } from '../rtkImports';\nimport { buildBatchedActionsHandler } from './batchActions';\nimport { buildCacheCollectionHandler } from './cacheCollection';\nimport { buildCacheLifecycleHandler } from './cacheLifecycle';\nimport { buildDevCheckHandler } from './devMiddleware';\nimport { buildInvalidationByTagsHandler } from './invalidationByTags';\nimport { buildPollingHandler } from './polling';\nimport { buildQueryLifecycleHandler } from './queryLifecycle';\nimport type { BuildMiddlewareInput, InternalHandlerBuilder, InternalMiddlewareState } from './types';\nimport { buildWindowEventHandler } from './windowEventHandling';\nimport type { ApiEndpointQuery } from '../module';\nexport type { ReferenceCacheCollection } from './cacheCollection';\nexport type { MutationCacheLifecycleApi, QueryCacheLifecycleApi, ReferenceCacheLifecycle } from './cacheLifecycle';\nexport type { MutationLifecycleApi, QueryLifecycleApi, ReferenceQueryLifecycle, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './queryLifecycle';\nexport type { SubscriptionSelectors } from './types';\nexport function buildMiddleware<Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string>(input: BuildMiddlewareInput<Definitions, ReducerPath, TagTypes>) {\n  const {\n    reducerPath,\n    queryThunk,\n    api,\n    context\n  } = input;\n  const {\n    apiUid\n  } = context;\n  const actions = {\n    invalidateTags: createAction<Array<TagTypes | FullTagDescription<TagTypes> | null | undefined>>(`${reducerPath}/invalidateTags`)\n  };\n  const isThisApiSliceAction = (action: Action) => action.type.startsWith(`${reducerPath}/`);\n  const handlerBuilders: InternalHandlerBuilder[] = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];\n  const middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>> = mwApi => {\n    let initialized = false;\n    const internalState: InternalMiddlewareState = {\n      currentSubscriptions: {}\n    };\n    const builderArgs = {\n      ...(input as any as BuildMiddlewareInput<EndpointDefinitions, string, string>),\n      internalState,\n      refetchQuery,\n      isThisApiSliceAction\n    };\n    const handlers = handlerBuilders.map(build => build(builderArgs));\n    const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);\n    const windowEventsHandler = buildWindowEventHandler(builderArgs);\n    return next => {\n      return action => {\n        if (!isAction(action)) {\n          return next(action);\n        }\n        if (!initialized) {\n          initialized = true;\n          // dispatch before any other action\n          mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n        }\n        const mwApiWithNext = {\n          ...mwApi,\n          next\n        };\n        const stateBefore = mwApi.getState();\n        const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);\n        let res: any;\n        if (actionShouldContinue) {\n          res = next(action);\n        } else {\n          res = internalProbeResult;\n        }\n        if (!!mwApi.getState()[reducerPath]) {\n          // Only run these checks if the middleware is registered okay\n\n          // This looks for actions that aren't specific to the API slice\n          windowEventsHandler(action, mwApiWithNext, stateBefore);\n          if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {\n            // Only run these additional checks if the actions are part of the API slice,\n            // or the action has hydration-related data\n            for (const handler of handlers) {\n              handler(action, mwApiWithNext, stateBefore);\n            }\n          }\n        }\n        return res;\n      };\n    };\n  };\n  return {\n    middleware,\n    actions\n  };\n  function refetchQuery(querySubState: Exclude<QuerySubState<any>, {\n    status: QueryStatus.uninitialized;\n  }>) {\n    return (input.api.endpoints[querySubState.endpointName] as ApiEndpointQuery<any, any>).initiate(querySubState.originalArgs as any, {\n      subscribe: false,\n      forceRefetch: true\n    });\n  }\n}","import { buildCreateApi } from '../createApi';\nimport { coreModule } from './module';\nexport const createApi = /* @__PURE__ */buildCreateApi(coreModule());\nexport { QueryStatus } from './apiState';\nexport type { CombinedState, InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationKeys, QueryCacheKey, QueryKeys, QuerySubState, RootState, SubscriptionOptions } from './apiState';\nexport type { InfiniteQueryActionCreatorResult, MutationActionCreatorResult, QueryActionCreatorResult, StartQueryActionCreatorOptions } from './buildInitiate';\nexport type { MutationCacheLifecycleApi, MutationLifecycleApi, QueryCacheLifecycleApi, QueryLifecycleApi, SubscriptionSelectors, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './buildMiddleware/index';\nexport { skipToken } from './buildSelectors';\nexport type { InfiniteQueryResultSelectorResult, MutationResultSelectorResult, QueryResultSelectorResult, SkipToken } from './buildSelectors';\nexport type { SliceActions } from './buildSlice';\nexport type { PatchQueryDataThunk, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nexport { coreModuleName } from './module';\nexport type { ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, CoreModule, InternalActions, PrefetchOptions, ThunkWithReturnValue } from './module';\nexport { setupListeners } from './setupListeners';\nexport { buildCreateApi, coreModule };"],"mappings":"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","names":["QueryStatus","isPlainObject","_a","retry","_a","arg","force","options","actions","createSelector","_a","_formatProdErrorMessage","_formatProdErrorMessage2","key","queryArgsApi","_formatProdErrorMessage","getPreviousPageParam","_formatProdErrorMessage2","_formatProdErrorMessage","produceWithPatches","produceWithPatches","internalState","api","cacheKey","extra","api","extra","api","initialized","createSelector"]}
Index: node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.mjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2885 @@
+// src/query/core/apiState.ts
+var QueryStatus = /* @__PURE__ */ ((QueryStatus2) => {
+  QueryStatus2["uninitialized"] = "uninitialized";
+  QueryStatus2["pending"] = "pending";
+  QueryStatus2["fulfilled"] = "fulfilled";
+  QueryStatus2["rejected"] = "rejected";
+  return QueryStatus2;
+})(QueryStatus || {});
+function getRequestStatusFlags(status) {
+  return {
+    status,
+    isUninitialized: status === "uninitialized" /* uninitialized */,
+    isLoading: status === "pending" /* pending */,
+    isSuccess: status === "fulfilled" /* fulfilled */,
+    isError: status === "rejected" /* rejected */
+  };
+}
+
+// src/query/core/rtkImports.ts
+import { createAction, createSlice, createSelector, createAsyncThunk, combineReducers, createNextState, isAnyOf, isAllOf, isAction, isPending, isRejected, isFulfilled, isRejectedWithValue, isAsyncThunkAction, prepareAutoBatched, SHOULD_AUTOBATCH, isPlainObject, nanoid } from "@reduxjs/toolkit";
+
+// src/query/utils/copyWithStructuralSharing.ts
+var isPlainObject2 = isPlainObject;
+function copyWithStructuralSharing(oldObj, newObj) {
+  if (oldObj === newObj || !(isPlainObject2(oldObj) && isPlainObject2(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {
+    return newObj;
+  }
+  const newKeys = Object.keys(newObj);
+  const oldKeys = Object.keys(oldObj);
+  let isSameObject = newKeys.length === oldKeys.length;
+  const mergeObj = Array.isArray(newObj) ? [] : {};
+  for (const key of newKeys) {
+    mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);
+    if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];
+  }
+  return isSameObject ? oldObj : mergeObj;
+}
+
+// src/query/utils/countObjectKeys.ts
+function countObjectKeys(obj) {
+  let count = 0;
+  for (const _key in obj) {
+    count++;
+  }
+  return count;
+}
+
+// src/query/utils/flatten.ts
+var flatten = (arr) => [].concat(...arr);
+
+// src/query/utils/isAbsoluteUrl.ts
+function isAbsoluteUrl(url) {
+  return new RegExp(`(^|:)//`).test(url);
+}
+
+// src/query/utils/isDocumentVisible.ts
+function isDocumentVisible() {
+  if (typeof document === "undefined") {
+    return true;
+  }
+  return document.visibilityState !== "hidden";
+}
+
+// src/query/utils/isNotNullish.ts
+function isNotNullish(v) {
+  return v != null;
+}
+
+// src/query/utils/isOnline.ts
+function isOnline() {
+  return typeof navigator === "undefined" ? true : navigator.onLine === void 0 ? true : navigator.onLine;
+}
+
+// src/query/utils/joinUrls.ts
+var withoutTrailingSlash = (url) => url.replace(/\/$/, "");
+var withoutLeadingSlash = (url) => url.replace(/^\//, "");
+function joinUrls(base, url) {
+  if (!base) {
+    return url;
+  }
+  if (!url) {
+    return base;
+  }
+  if (isAbsoluteUrl(url)) {
+    return url;
+  }
+  const delimiter = base.endsWith("/") || !url.startsWith("?") ? "/" : "";
+  base = withoutTrailingSlash(base);
+  url = withoutLeadingSlash(url);
+  return `${base}${delimiter}${url}`;
+}
+
+// src/query/utils/getOrInsert.ts
+function getOrInsert(map, key, value) {
+  if (map.has(key)) return map.get(key);
+  return map.set(key, value).get(key);
+}
+
+// src/query/fetchBaseQuery.ts
+var defaultFetchFn = (...args) => fetch(...args);
+var defaultValidateStatus = (response) => response.status >= 200 && response.status <= 299;
+var defaultIsJsonContentType = (headers) => (
+  /*applicat*/
+  /ion\/(vnd\.api\+)?json/.test(headers.get("content-type") || "")
+);
+function stripUndefined(obj) {
+  if (!isPlainObject(obj)) {
+    return obj;
+  }
+  const copy = {
+    ...obj
+  };
+  for (const [k, v] of Object.entries(copy)) {
+    if (v === void 0) delete copy[k];
+  }
+  return copy;
+}
+function fetchBaseQuery({
+  baseUrl,
+  prepareHeaders = (x) => x,
+  fetchFn = defaultFetchFn,
+  paramsSerializer,
+  isJsonContentType = defaultIsJsonContentType,
+  jsonContentType = "application/json",
+  jsonReplacer,
+  timeout: defaultTimeout,
+  responseHandler: globalResponseHandler,
+  validateStatus: globalValidateStatus,
+  ...baseFetchOptions
+} = {}) {
+  if (typeof fetch === "undefined" && fetchFn === defaultFetchFn) {
+    console.warn("Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.");
+  }
+  return async (arg, api, extraOptions) => {
+    const {
+      getState,
+      extra,
+      endpoint,
+      forced,
+      type
+    } = api;
+    let meta;
+    let {
+      url,
+      headers = new Headers(baseFetchOptions.headers),
+      params = void 0,
+      responseHandler = globalResponseHandler ?? "json",
+      validateStatus = globalValidateStatus ?? defaultValidateStatus,
+      timeout = defaultTimeout,
+      ...rest
+    } = typeof arg == "string" ? {
+      url: arg
+    } : arg;
+    let abortController, signal = api.signal;
+    if (timeout) {
+      abortController = new AbortController();
+      api.signal.addEventListener("abort", abortController.abort);
+      signal = abortController.signal;
+    }
+    let config = {
+      ...baseFetchOptions,
+      signal,
+      ...rest
+    };
+    headers = new Headers(stripUndefined(headers));
+    config.headers = await prepareHeaders(headers, {
+      getState,
+      arg,
+      extra,
+      endpoint,
+      forced,
+      type,
+      extraOptions
+    }) || headers;
+    const isJsonifiable = (body) => typeof body === "object" && (isPlainObject(body) || Array.isArray(body) || typeof body.toJSON === "function");
+    if (!config.headers.has("content-type") && isJsonifiable(config.body)) {
+      config.headers.set("content-type", jsonContentType);
+    }
+    if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {
+      config.body = JSON.stringify(config.body, jsonReplacer);
+    }
+    if (params) {
+      const divider = ~url.indexOf("?") ? "&" : "?";
+      const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));
+      url += divider + query;
+    }
+    url = joinUrls(baseUrl, url);
+    const request = new Request(url, config);
+    const requestClone = new Request(url, config);
+    meta = {
+      request: requestClone
+    };
+    let response, timedOut = false, timeoutId = abortController && setTimeout(() => {
+      timedOut = true;
+      abortController.abort();
+    }, timeout);
+    try {
+      response = await fetchFn(request);
+    } catch (e) {
+      return {
+        error: {
+          status: timedOut ? "TIMEOUT_ERROR" : "FETCH_ERROR",
+          error: String(e)
+        },
+        meta
+      };
+    } finally {
+      if (timeoutId) clearTimeout(timeoutId);
+      abortController?.signal.removeEventListener("abort", abortController.abort);
+    }
+    const responseClone = response.clone();
+    meta.response = responseClone;
+    let resultData;
+    let responseText = "";
+    try {
+      let handleResponseError;
+      await Promise.all([
+        handleResponse(response, responseHandler).then((r) => resultData = r, (e) => handleResponseError = e),
+        // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182
+        // we *have* to "use up" both streams at the same time or they will stop running in node-fetch scenarios
+        responseClone.text().then((r) => responseText = r, () => {
+        })
+      ]);
+      if (handleResponseError) throw handleResponseError;
+    } catch (e) {
+      return {
+        error: {
+          status: "PARSING_ERROR",
+          originalStatus: response.status,
+          data: responseText,
+          error: String(e)
+        },
+        meta
+      };
+    }
+    return validateStatus(response, resultData) ? {
+      data: resultData,
+      meta
+    } : {
+      error: {
+        status: response.status,
+        data: resultData
+      },
+      meta
+    };
+  };
+  async function handleResponse(response, responseHandler) {
+    if (typeof responseHandler === "function") {
+      return responseHandler(response);
+    }
+    if (responseHandler === "content-type") {
+      responseHandler = isJsonContentType(response.headers) ? "json" : "text";
+    }
+    if (responseHandler === "json") {
+      const text = await response.text();
+      return text.length ? JSON.parse(text) : null;
+    }
+    return response.text();
+  }
+}
+
+// src/query/HandledError.ts
+var HandledError = class {
+  constructor(value, meta = void 0) {
+    this.value = value;
+    this.meta = meta;
+  }
+};
+
+// src/query/retry.ts
+async function defaultBackoff(attempt = 0, maxRetries = 5) {
+  const attempts = Math.min(attempt, maxRetries);
+  const timeout = ~~((Math.random() + 0.4) * (300 << attempts));
+  await new Promise((resolve) => setTimeout((res) => resolve(res), timeout));
+}
+function fail(error, meta) {
+  throw Object.assign(new HandledError({
+    error,
+    meta
+  }), {
+    throwImmediately: true
+  });
+}
+var EMPTY_OPTIONS = {};
+var retryWithBackoff = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {
+  const possibleMaxRetries = [5, (defaultOptions || EMPTY_OPTIONS).maxRetries, (extraOptions || EMPTY_OPTIONS).maxRetries].filter((x) => x !== void 0);
+  const [maxRetries] = possibleMaxRetries.slice(-1);
+  const defaultRetryCondition = (_, __, {
+    attempt
+  }) => attempt <= maxRetries;
+  const options = {
+    maxRetries,
+    backoff: defaultBackoff,
+    retryCondition: defaultRetryCondition,
+    ...defaultOptions,
+    ...extraOptions
+  };
+  let retry2 = 0;
+  while (true) {
+    try {
+      const result = await baseQuery(args, api, extraOptions);
+      if (result.error) {
+        throw new HandledError(result);
+      }
+      return result;
+    } catch (e) {
+      retry2++;
+      if (e.throwImmediately) {
+        if (e instanceof HandledError) {
+          return e.value;
+        }
+        throw e;
+      }
+      if (e instanceof HandledError && !options.retryCondition(e.value.error, args, {
+        attempt: retry2,
+        baseQueryApi: api,
+        extraOptions
+      })) {
+        return e.value;
+      }
+      await options.backoff(retry2, options.maxRetries);
+    }
+  }
+};
+var retry = /* @__PURE__ */ Object.assign(retryWithBackoff, {
+  fail
+});
+
+// src/query/core/setupListeners.ts
+var onFocus = /* @__PURE__ */ createAction("__rtkq/focused");
+var onFocusLost = /* @__PURE__ */ createAction("__rtkq/unfocused");
+var onOnline = /* @__PURE__ */ createAction("__rtkq/online");
+var onOffline = /* @__PURE__ */ createAction("__rtkq/offline");
+var initialized = false;
+function setupListeners(dispatch, customHandler) {
+  function defaultHandler() {
+    const handleFocus = () => dispatch(onFocus());
+    const handleFocusLost = () => dispatch(onFocusLost());
+    const handleOnline = () => dispatch(onOnline());
+    const handleOffline = () => dispatch(onOffline());
+    const handleVisibilityChange = () => {
+      if (window.document.visibilityState === "visible") {
+        handleFocus();
+      } else {
+        handleFocusLost();
+      }
+    };
+    if (!initialized) {
+      if (typeof window !== "undefined" && window.addEventListener) {
+        window.addEventListener("visibilitychange", handleVisibilityChange, false);
+        window.addEventListener("focus", handleFocus, false);
+        window.addEventListener("online", handleOnline, false);
+        window.addEventListener("offline", handleOffline, false);
+        initialized = true;
+      }
+    }
+    const unsubscribe = () => {
+      window.removeEventListener("focus", handleFocus);
+      window.removeEventListener("visibilitychange", handleVisibilityChange);
+      window.removeEventListener("online", handleOnline);
+      window.removeEventListener("offline", handleOffline);
+      initialized = false;
+    };
+    return unsubscribe;
+  }
+  return customHandler ? customHandler(dispatch, {
+    onFocus,
+    onFocusLost,
+    onOffline,
+    onOnline
+  }) : defaultHandler();
+}
+
+// src/query/endpointDefinitions.ts
+function isQueryDefinition(e) {
+  return e.type === "query" /* query */;
+}
+function isMutationDefinition(e) {
+  return e.type === "mutation" /* mutation */;
+}
+function isInfiniteQueryDefinition(e) {
+  return e.type === "infinitequery" /* infinitequery */;
+}
+function isAnyQueryDefinition(e) {
+  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);
+}
+function calculateProvidedBy(description, result, error, queryArg, meta, assertTagTypes) {
+  if (isFunction(description)) {
+    return description(result, error, queryArg, meta).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);
+  }
+  if (Array.isArray(description)) {
+    return description.map(expandTagDescription).map(assertTagTypes);
+  }
+  return [];
+}
+function isFunction(t) {
+  return typeof t === "function";
+}
+function expandTagDescription(description) {
+  return typeof description === "string" ? {
+    type: description
+  } : description;
+}
+
+// src/query/core/buildThunks.ts
+import { isDraftable, produceWithPatches } from "immer";
+
+// src/query/core/buildInitiate.ts
+import { formatProdErrorMessage as _formatProdErrorMessage } from "@reduxjs/toolkit";
+
+// src/tsHelpers.ts
+function asSafePromise(promise, fallback) {
+  return promise.catch(fallback);
+}
+
+// src/query/core/buildInitiate.ts
+var forceQueryFnSymbol = Symbol("forceQueryFn");
+var isUpsertQuery = (arg) => typeof arg[forceQueryFnSymbol] === "function";
+function buildInitiate({
+  serializeQueryArgs,
+  queryThunk,
+  infiniteQueryThunk,
+  mutationThunk,
+  api,
+  context
+}) {
+  const runningQueries = /* @__PURE__ */ new Map();
+  const runningMutations = /* @__PURE__ */ new Map();
+  const {
+    unsubscribeQueryResult,
+    removeMutationResult,
+    updateSubscriptionOptions
+  } = api.internalActions;
+  return {
+    buildInitiateQuery,
+    buildInitiateInfiniteQuery,
+    buildInitiateMutation,
+    getRunningQueryThunk,
+    getRunningMutationThunk,
+    getRunningQueriesThunk,
+    getRunningMutationsThunk
+  };
+  function getRunningQueryThunk(endpointName, queryArgs) {
+    return (dispatch) => {
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      const queryCacheKey = serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      });
+      return runningQueries.get(dispatch)?.[queryCacheKey];
+    };
+  }
+  function getRunningMutationThunk(_endpointName, fixedCacheKeyOrRequestId) {
+    return (dispatch) => {
+      return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId];
+    };
+  }
+  function getRunningQueriesThunk() {
+    return (dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);
+  }
+  function getRunningMutationsThunk() {
+    return (dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);
+  }
+  function middlewareWarning(dispatch) {
+    if (process.env.NODE_ENV !== "production") {
+      if (middlewareWarning.triggered) return;
+      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());
+      middlewareWarning.triggered = true;
+      if (typeof returnedValue !== "object" || typeof returnedValue?.type === "string") {
+        throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage(34) : `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store.
+You must add the middleware for RTK-Query to function correctly!`);
+      }
+    }
+  }
+  function buildInitiateAnyQuery(endpointName, endpointDefinition) {
+    const queryAction = (arg, {
+      subscribe = true,
+      forceRefetch,
+      subscriptionOptions,
+      [forceQueryFnSymbol]: forceQueryFn,
+      ...rest
+    } = {}) => (dispatch, getState) => {
+      const queryCacheKey = serializeQueryArgs({
+        queryArgs: arg,
+        endpointDefinition,
+        endpointName
+      });
+      let thunk;
+      const commonThunkArgs = {
+        ...rest,
+        type: "query",
+        subscribe,
+        forceRefetch,
+        subscriptionOptions,
+        endpointName,
+        originalArgs: arg,
+        queryCacheKey,
+        [forceQueryFnSymbol]: forceQueryFn
+      };
+      if (isQueryDefinition(endpointDefinition)) {
+        thunk = queryThunk(commonThunkArgs);
+      } else {
+        const {
+          direction,
+          initialPageParam
+        } = rest;
+        thunk = infiniteQueryThunk({
+          ...commonThunkArgs,
+          // Supply these even if undefined. This helps with a field existence
+          // check over in `buildSlice.ts`
+          direction,
+          initialPageParam
+        });
+      }
+      const selector = api.endpoints[endpointName].select(arg);
+      const thunkResult = dispatch(thunk);
+      const stateAfter = selector(getState());
+      middlewareWarning(dispatch);
+      const {
+        requestId,
+        abort
+      } = thunkResult;
+      const skippedSynchronously = stateAfter.requestId !== requestId;
+      const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey];
+      const selectFromState = () => selector(getState());
+      const statePromise = Object.assign(forceQueryFn ? (
+        // a query has been forced (upsertQueryData)
+        // -> we want to resolve it once data has been written with the data that will be written
+        thunkResult.then(selectFromState)
+      ) : skippedSynchronously && !runningQuery ? (
+        // a query has been skipped due to a condition and we do not have any currently running query
+        // -> we want to resolve it immediately with the current data
+        Promise.resolve(stateAfter)
+      ) : (
+        // query just started or one is already in flight
+        // -> wait for the running query, then resolve with data from after that
+        Promise.all([runningQuery, thunkResult]).then(selectFromState)
+      ), {
+        arg,
+        requestId,
+        subscriptionOptions,
+        queryCacheKey,
+        abort,
+        async unwrap() {
+          const result = await statePromise;
+          if (result.isError) {
+            throw result.error;
+          }
+          return result.data;
+        },
+        refetch: () => dispatch(queryAction(arg, {
+          subscribe: false,
+          forceRefetch: true
+        })),
+        unsubscribe() {
+          if (subscribe) dispatch(unsubscribeQueryResult({
+            queryCacheKey,
+            requestId
+          }));
+        },
+        updateSubscriptionOptions(options) {
+          statePromise.subscriptionOptions = options;
+          dispatch(updateSubscriptionOptions({
+            endpointName,
+            requestId,
+            queryCacheKey,
+            options
+          }));
+        }
+      });
+      if (!runningQuery && !skippedSynchronously && !forceQueryFn) {
+        const running = getOrInsert(runningQueries, dispatch, {});
+        running[queryCacheKey] = statePromise;
+        statePromise.then(() => {
+          delete running[queryCacheKey];
+          if (!countObjectKeys(running)) {
+            runningQueries.delete(dispatch);
+          }
+        });
+      }
+      return statePromise;
+    };
+    return queryAction;
+  }
+  function buildInitiateQuery(endpointName, endpointDefinition) {
+    const queryAction = buildInitiateAnyQuery(endpointName, endpointDefinition);
+    return queryAction;
+  }
+  function buildInitiateInfiniteQuery(endpointName, endpointDefinition) {
+    const infiniteQueryAction = buildInitiateAnyQuery(endpointName, endpointDefinition);
+    return infiniteQueryAction;
+  }
+  function buildInitiateMutation(endpointName) {
+    return (arg, {
+      track = true,
+      fixedCacheKey
+    } = {}) => (dispatch, getState) => {
+      const thunk = mutationThunk({
+        type: "mutation",
+        endpointName,
+        originalArgs: arg,
+        track,
+        fixedCacheKey
+      });
+      const thunkResult = dispatch(thunk);
+      middlewareWarning(dispatch);
+      const {
+        requestId,
+        abort,
+        unwrap
+      } = thunkResult;
+      const returnValuePromise = asSafePromise(thunkResult.unwrap().then((data) => ({
+        data
+      })), (error) => ({
+        error
+      }));
+      const reset = () => {
+        dispatch(removeMutationResult({
+          requestId,
+          fixedCacheKey
+        }));
+      };
+      const ret = Object.assign(returnValuePromise, {
+        arg: thunkResult.arg,
+        requestId,
+        abort,
+        unwrap,
+        reset
+      });
+      const running = runningMutations.get(dispatch) || {};
+      runningMutations.set(dispatch, running);
+      running[requestId] = ret;
+      ret.then(() => {
+        delete running[requestId];
+        if (!countObjectKeys(running)) {
+          runningMutations.delete(dispatch);
+        }
+      });
+      if (fixedCacheKey) {
+        running[fixedCacheKey] = ret;
+        ret.then(() => {
+          if (running[fixedCacheKey] === ret) {
+            delete running[fixedCacheKey];
+            if (!countObjectKeys(running)) {
+              runningMutations.delete(dispatch);
+            }
+          }
+        });
+      }
+      return ret;
+    };
+  }
+}
+
+// src/query/standardSchema.ts
+import { SchemaError } from "@standard-schema/utils";
+var NamedSchemaError = class extends SchemaError {
+  constructor(issues, value, schemaName, _bqMeta) {
+    super(issues);
+    this.value = value;
+    this.schemaName = schemaName;
+    this._bqMeta = _bqMeta;
+  }
+};
+async function parseWithSchema(schema, data, schemaName, bqMeta) {
+  const result = await schema["~standard"].validate(data);
+  if (result.issues) {
+    throw new NamedSchemaError(result.issues, data, schemaName, bqMeta);
+  }
+  return result.value;
+}
+
+// src/query/core/buildThunks.ts
+function defaultTransformResponse(baseQueryReturnValue) {
+  return baseQueryReturnValue;
+}
+var addShouldAutoBatch = (arg = {}) => {
+  return {
+    ...arg,
+    [SHOULD_AUTOBATCH]: true
+  };
+};
+function buildThunks({
+  reducerPath,
+  baseQuery,
+  context: {
+    endpointDefinitions
+  },
+  serializeQueryArgs,
+  api,
+  assertTagType,
+  selectors,
+  onSchemaFailure,
+  catchSchemaFailure: globalCatchSchemaFailure,
+  skipSchemaValidation: globalSkipSchemaValidation
+}) {
+  const patchQueryData = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {
+    const endpointDefinition = endpointDefinitions[endpointName];
+    const queryCacheKey = serializeQueryArgs({
+      queryArgs: arg,
+      endpointDefinition,
+      endpointName
+    });
+    dispatch(api.internalActions.queryResultPatched({
+      queryCacheKey,
+      patches
+    }));
+    if (!updateProvided) {
+      return;
+    }
+    const newValue = api.endpoints[endpointName].select(arg)(
+      // Work around TS 4.1 mismatch
+      getState()
+    );
+    const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, void 0, arg, {}, assertTagType);
+    dispatch(api.internalActions.updateProvidedBy([{
+      queryCacheKey,
+      providedTags
+    }]));
+  };
+  function addToStart(items, item, max = 0) {
+    const newItems = [item, ...items];
+    return max && newItems.length > max ? newItems.slice(0, -1) : newItems;
+  }
+  function addToEnd(items, item, max = 0) {
+    const newItems = [...items, item];
+    return max && newItems.length > max ? newItems.slice(1) : newItems;
+  }
+  const updateQueryData = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {
+    const endpointDefinition = api.endpoints[endpointName];
+    const currentState = endpointDefinition.select(arg)(
+      // Work around TS 4.1 mismatch
+      getState()
+    );
+    const ret = {
+      patches: [],
+      inversePatches: [],
+      undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))
+    };
+    if (currentState.status === "uninitialized" /* uninitialized */) {
+      return ret;
+    }
+    let newValue;
+    if ("data" in currentState) {
+      if (isDraftable(currentState.data)) {
+        const [value, patches, inversePatches] = produceWithPatches(currentState.data, updateRecipe);
+        ret.patches.push(...patches);
+        ret.inversePatches.push(...inversePatches);
+        newValue = value;
+      } else {
+        newValue = updateRecipe(currentState.data);
+        ret.patches.push({
+          op: "replace",
+          path: [],
+          value: newValue
+        });
+        ret.inversePatches.push({
+          op: "replace",
+          path: [],
+          value: currentState.data
+        });
+      }
+    }
+    if (ret.patches.length === 0) {
+      return ret;
+    }
+    dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));
+    return ret;
+  };
+  const upsertQueryData = (endpointName, arg, value) => (dispatch) => {
+    const res = dispatch(api.endpoints[endpointName].initiate(arg, {
+      subscribe: false,
+      forceRefetch: true,
+      [forceQueryFnSymbol]: () => ({
+        data: value
+      })
+    }));
+    return res;
+  };
+  const getTransformCallbackForEndpoint = (endpointDefinition, transformFieldName) => {
+    return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName] : defaultTransformResponse;
+  };
+  const executeEndpoint = async (arg, {
+    signal,
+    abort,
+    rejectWithValue,
+    fulfillWithValue,
+    dispatch,
+    getState,
+    extra
+  }) => {
+    const endpointDefinition = endpointDefinitions[arg.endpointName];
+    const {
+      metaSchema,
+      skipSchemaValidation = globalSkipSchemaValidation
+    } = endpointDefinition;
+    try {
+      let transformResponse = getTransformCallbackForEndpoint(endpointDefinition, "transformResponse");
+      const baseQueryApi = {
+        signal,
+        abort,
+        dispatch,
+        getState,
+        extra,
+        endpoint: arg.endpointName,
+        type: arg.type,
+        forced: arg.type === "query" ? isForcedQuery(arg, getState()) : void 0,
+        queryCacheKey: arg.type === "query" ? arg.queryCacheKey : void 0
+      };
+      const forceQueryFn = arg.type === "query" ? arg[forceQueryFnSymbol] : void 0;
+      let finalQueryReturnValue;
+      const fetchPage = async (data, param, maxPages, previous) => {
+        if (param == null && data.pages.length) {
+          return Promise.resolve({
+            data
+          });
+        }
+        const finalQueryArg = {
+          queryArg: arg.originalArgs,
+          pageParam: param
+        };
+        const pageResponse = await executeRequest(finalQueryArg);
+        const addTo = previous ? addToStart : addToEnd;
+        return {
+          data: {
+            pages: addTo(data.pages, pageResponse.data, maxPages),
+            pageParams: addTo(data.pageParams, param, maxPages)
+          },
+          meta: pageResponse.meta
+        };
+      };
+      async function executeRequest(finalQueryArg) {
+        let result;
+        const {
+          extraOptions,
+          argSchema,
+          rawResponseSchema,
+          responseSchema
+        } = endpointDefinition;
+        if (argSchema && !skipSchemaValidation) {
+          finalQueryArg = await parseWithSchema(
+            argSchema,
+            finalQueryArg,
+            "argSchema",
+            {}
+            // we don't have a meta yet, so we can't pass it
+          );
+        }
+        if (forceQueryFn) {
+          result = forceQueryFn();
+        } else if (endpointDefinition.query) {
+          result = await baseQuery(endpointDefinition.query(finalQueryArg), baseQueryApi, extraOptions);
+        } else {
+          result = await endpointDefinition.queryFn(finalQueryArg, baseQueryApi, extraOptions, (arg2) => baseQuery(arg2, baseQueryApi, extraOptions));
+        }
+        if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+          const what = endpointDefinition.query ? "`baseQuery`" : "`queryFn`";
+          let err;
+          if (!result) {
+            err = `${what} did not return anything.`;
+          } else if (typeof result !== "object") {
+            err = `${what} did not return an object.`;
+          } else if (result.error && result.data) {
+            err = `${what} returned an object containing both \`error\` and \`result\`.`;
+          } else if (result.error === void 0 && result.data === void 0) {
+            err = `${what} returned an object containing neither a valid \`error\` and \`result\`. At least one of them should not be \`undefined\``;
+          } else {
+            for (const key of Object.keys(result)) {
+              if (key !== "error" && key !== "data" && key !== "meta") {
+                err = `The object returned by ${what} has the unknown property ${key}.`;
+                break;
+              }
+            }
+          }
+          if (err) {
+            console.error(`Error encountered handling the endpoint ${arg.endpointName}.
+                  ${err}
+                  It needs to return an object with either the shape \`{ data: <value> }\` or \`{ error: <value> }\` that may contain an optional \`meta\` property.
+                  Object returned was:`, result);
+          }
+        }
+        if (result.error) throw new HandledError(result.error, result.meta);
+        let {
+          data
+        } = result;
+        if (rawResponseSchema && !skipSchemaValidation) {
+          data = await parseWithSchema(rawResponseSchema, result.data, "rawResponseSchema", result.meta);
+        }
+        let transformedResponse = await transformResponse(data, result.meta, finalQueryArg);
+        if (responseSchema && !skipSchemaValidation) {
+          transformedResponse = await parseWithSchema(responseSchema, transformedResponse, "responseSchema", result.meta);
+        }
+        return {
+          ...result,
+          data: transformedResponse
+        };
+      }
+      if (arg.type === "query" && "infiniteQueryOptions" in endpointDefinition) {
+        const {
+          infiniteQueryOptions
+        } = endpointDefinition;
+        const {
+          maxPages = Infinity
+        } = infiniteQueryOptions;
+        let result;
+        const blankData = {
+          pages: [],
+          pageParams: []
+        };
+        const cachedData = selectors.selectQueryEntry(getState(), arg.queryCacheKey)?.data;
+        const isForcedQueryNeedingRefetch = (
+          // arg.forceRefetch
+          isForcedQuery(arg, getState()) && !arg.direction
+        );
+        const existingData = isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData;
+        if ("direction" in arg && arg.direction && existingData.pages.length) {
+          const previous = arg.direction === "backward";
+          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;
+          const param = pageParamFn(infiniteQueryOptions, existingData, arg.originalArgs);
+          result = await fetchPage(existingData, param, maxPages, previous);
+        } else {
+          const {
+            initialPageParam = infiniteQueryOptions.initialPageParam
+          } = arg;
+          const cachedPageParams = cachedData?.pageParams ?? [];
+          const firstPageParam = cachedPageParams[0] ?? initialPageParam;
+          const totalPages = cachedPageParams.length;
+          result = await fetchPage(existingData, firstPageParam, maxPages);
+          if (forceQueryFn) {
+            result = {
+              data: result.data.pages[0]
+            };
+          }
+          for (let i = 1; i < totalPages; i++) {
+            const param = getNextPageParam(infiniteQueryOptions, result.data, arg.originalArgs);
+            result = await fetchPage(result.data, param, maxPages);
+          }
+        }
+        finalQueryReturnValue = result;
+      } else {
+        finalQueryReturnValue = await executeRequest(arg.originalArgs);
+      }
+      if (metaSchema && !skipSchemaValidation && finalQueryReturnValue.meta) {
+        finalQueryReturnValue.meta = await parseWithSchema(metaSchema, finalQueryReturnValue.meta, "metaSchema", finalQueryReturnValue.meta);
+      }
+      return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({
+        fulfilledTimeStamp: Date.now(),
+        baseQueryMeta: finalQueryReturnValue.meta
+      }));
+    } catch (error) {
+      let caughtError = error;
+      if (caughtError instanceof HandledError) {
+        let transformErrorResponse = getTransformCallbackForEndpoint(endpointDefinition, "transformErrorResponse");
+        const {
+          rawErrorResponseSchema,
+          errorResponseSchema
+        } = endpointDefinition;
+        let {
+          value,
+          meta
+        } = caughtError;
+        try {
+          if (rawErrorResponseSchema && !skipSchemaValidation) {
+            value = await parseWithSchema(rawErrorResponseSchema, value, "rawErrorResponseSchema", meta);
+          }
+          if (metaSchema && !skipSchemaValidation) {
+            meta = await parseWithSchema(metaSchema, meta, "metaSchema", meta);
+          }
+          let transformedErrorResponse = await transformErrorResponse(value, meta, arg.originalArgs);
+          if (errorResponseSchema && !skipSchemaValidation) {
+            transformedErrorResponse = await parseWithSchema(errorResponseSchema, transformedErrorResponse, "errorResponseSchema", meta);
+          }
+          return rejectWithValue(transformedErrorResponse, addShouldAutoBatch({
+            baseQueryMeta: meta
+          }));
+        } catch (e) {
+          caughtError = e;
+        }
+      }
+      try {
+        if (caughtError instanceof NamedSchemaError) {
+          const info = {
+            endpoint: arg.endpointName,
+            arg: arg.originalArgs,
+            type: arg.type,
+            queryCacheKey: arg.type === "query" ? arg.queryCacheKey : void 0
+          };
+          endpointDefinition.onSchemaFailure?.(caughtError, info);
+          onSchemaFailure?.(caughtError, info);
+          const {
+            catchSchemaFailure = globalCatchSchemaFailure
+          } = endpointDefinition;
+          if (catchSchemaFailure) {
+            return rejectWithValue(catchSchemaFailure(caughtError, info), addShouldAutoBatch({
+              baseQueryMeta: caughtError._bqMeta
+            }));
+          }
+        }
+      } catch (e) {
+        caughtError = e;
+      }
+      if (typeof process !== "undefined" && process.env.NODE_ENV !== "production") {
+        console.error(`An unhandled error occurred processing a request for the endpoint "${arg.endpointName}".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`, caughtError);
+      } else {
+        console.error(caughtError);
+      }
+      throw caughtError;
+    }
+  };
+  function isForcedQuery(arg, state) {
+    const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);
+    const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;
+    const fulfilledVal = requestState?.fulfilledTimeStamp;
+    const refetchVal = arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange);
+    if (refetchVal) {
+      return refetchVal === true || (Number(/* @__PURE__ */ new Date()) - Number(fulfilledVal)) / 1e3 >= refetchVal;
+    }
+    return false;
+  }
+  const createQueryThunk = () => {
+    const generatedQueryThunk = createAsyncThunk(`${reducerPath}/executeQuery`, executeEndpoint, {
+      getPendingMeta({
+        arg
+      }) {
+        const endpointDefinition = endpointDefinitions[arg.endpointName];
+        return addShouldAutoBatch({
+          startedTimeStamp: Date.now(),
+          ...isInfiniteQueryDefinition(endpointDefinition) ? {
+            direction: arg.direction
+          } : {}
+        });
+      },
+      condition(queryThunkArg, {
+        getState
+      }) {
+        const state = getState();
+        const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);
+        const fulfilledVal = requestState?.fulfilledTimeStamp;
+        const currentArg = queryThunkArg.originalArgs;
+        const previousArg = requestState?.originalArgs;
+        const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];
+        const direction = queryThunkArg.direction;
+        if (isUpsertQuery(queryThunkArg)) {
+          return true;
+        }
+        if (requestState?.status === "pending") {
+          return false;
+        }
+        if (isForcedQuery(queryThunkArg, state)) {
+          return true;
+        }
+        if (isQueryDefinition(endpointDefinition) && endpointDefinition?.forceRefetch?.({
+          currentArg,
+          previousArg,
+          endpointState: requestState,
+          state
+        })) {
+          return true;
+        }
+        if (fulfilledVal && !direction) {
+          return false;
+        }
+        return true;
+      },
+      dispatchConditionRejection: true
+    });
+    return generatedQueryThunk;
+  };
+  const queryThunk = createQueryThunk();
+  const infiniteQueryThunk = createQueryThunk();
+  const mutationThunk = createAsyncThunk(`${reducerPath}/executeMutation`, executeEndpoint, {
+    getPendingMeta() {
+      return addShouldAutoBatch({
+        startedTimeStamp: Date.now()
+      });
+    }
+  });
+  const hasTheForce = (options) => "force" in options;
+  const hasMaxAge = (options) => "ifOlderThan" in options;
+  const prefetch = (endpointName, arg, options) => (dispatch, getState) => {
+    const force = hasTheForce(options) && options.force;
+    const maxAge = hasMaxAge(options) && options.ifOlderThan;
+    const queryAction = (force2 = true) => {
+      const options2 = {
+        forceRefetch: force2,
+        isPrefetch: true
+      };
+      return api.endpoints[endpointName].initiate(arg, options2);
+    };
+    const latestStateValue = api.endpoints[endpointName].select(arg)(getState());
+    if (force) {
+      dispatch(queryAction());
+    } else if (maxAge) {
+      const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp;
+      if (!lastFulfilledTs) {
+        dispatch(queryAction());
+        return;
+      }
+      const shouldRetrigger = (Number(/* @__PURE__ */ new Date()) - Number(new Date(lastFulfilledTs))) / 1e3 >= maxAge;
+      if (shouldRetrigger) {
+        dispatch(queryAction());
+      }
+    } else {
+      dispatch(queryAction(false));
+    }
+  };
+  function matchesEndpoint(endpointName) {
+    return (action) => action?.meta?.arg?.endpointName === endpointName;
+  }
+  function buildMatchThunkActions(thunk, endpointName) {
+    return {
+      matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),
+      matchFulfilled: isAllOf(isFulfilled(thunk), matchesEndpoint(endpointName)),
+      matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName))
+    };
+  }
+  return {
+    queryThunk,
+    mutationThunk,
+    infiniteQueryThunk,
+    prefetch,
+    updateQueryData,
+    upsertQueryData,
+    patchQueryData,
+    buildMatchThunkActions
+  };
+}
+function getNextPageParam(options, {
+  pages,
+  pageParams
+}, queryArg) {
+  const lastIndex = pages.length - 1;
+  return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams, queryArg);
+}
+function getPreviousPageParam(options, {
+  pages,
+  pageParams
+}, queryArg) {
+  return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams, queryArg);
+}
+function calculateProvidedByThunk(action, type, endpointDefinitions, assertTagType) {
+  return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type], isFulfilled(action) ? action.payload : void 0, isRejectedWithValue(action) ? action.payload : void 0, action.meta.arg.originalArgs, "baseQueryMeta" in action.meta ? action.meta.baseQueryMeta : void 0, assertTagType);
+}
+
+// src/query/core/buildSlice.ts
+import { isDraft } from "immer";
+import { applyPatches, original } from "immer";
+function updateQuerySubstateIfExists(state, queryCacheKey, update) {
+  const substate = state[queryCacheKey];
+  if (substate) {
+    update(substate);
+  }
+}
+function getMutationCacheKey(id) {
+  return ("arg" in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId;
+}
+function updateMutationSubstateIfExists(state, id, update) {
+  const substate = state[getMutationCacheKey(id)];
+  if (substate) {
+    update(substate);
+  }
+}
+var initialState = {};
+function buildSlice({
+  reducerPath,
+  queryThunk,
+  mutationThunk,
+  serializeQueryArgs,
+  context: {
+    endpointDefinitions: definitions,
+    apiUid,
+    extractRehydrationInfo,
+    hasRehydrationInfo
+  },
+  assertTagType,
+  config
+}) {
+  const resetApiState = createAction(`${reducerPath}/resetApiState`);
+  function writePendingCacheEntry(draft, arg, upserting, meta) {
+    draft[arg.queryCacheKey] ??= {
+      status: "uninitialized" /* uninitialized */,
+      endpointName: arg.endpointName
+    };
+    updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {
+      substate.status = "pending" /* pending */;
+      substate.requestId = upserting && substate.requestId ? (
+        // for `upsertQuery` **updates**, keep the current `requestId`
+        substate.requestId
+      ) : (
+        // for normal queries or `upsertQuery` **inserts** always update the `requestId`
+        meta.requestId
+      );
+      if (arg.originalArgs !== void 0) {
+        substate.originalArgs = arg.originalArgs;
+      }
+      substate.startedTimeStamp = meta.startedTimeStamp;
+      const endpointDefinition = definitions[meta.arg.endpointName];
+      if (isInfiniteQueryDefinition(endpointDefinition) && "direction" in arg) {
+        ;
+        substate.direction = arg.direction;
+      }
+    });
+  }
+  function writeFulfilledCacheEntry(draft, meta, payload, upserting) {
+    updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, (substate) => {
+      if (substate.requestId !== meta.requestId && !upserting) return;
+      const {
+        merge
+      } = definitions[meta.arg.endpointName];
+      substate.status = "fulfilled" /* fulfilled */;
+      if (merge) {
+        if (substate.data !== void 0) {
+          const {
+            fulfilledTimeStamp,
+            arg,
+            baseQueryMeta,
+            requestId
+          } = meta;
+          let newData = createNextState(substate.data, (draftSubstateData) => {
+            return merge(draftSubstateData, payload, {
+              arg: arg.originalArgs,
+              baseQueryMeta,
+              fulfilledTimeStamp,
+              requestId
+            });
+          });
+          substate.data = newData;
+        } else {
+          substate.data = payload;
+        }
+      } else {
+        substate.data = definitions[meta.arg.endpointName].structuralSharing ?? true ? copyWithStructuralSharing(isDraft(substate.data) ? original(substate.data) : substate.data, payload) : payload;
+      }
+      delete substate.error;
+      substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;
+    });
+  }
+  const querySlice = createSlice({
+    name: `${reducerPath}/queries`,
+    initialState,
+    reducers: {
+      removeQueryResult: {
+        reducer(draft, {
+          payload: {
+            queryCacheKey
+          }
+        }) {
+          delete draft[queryCacheKey];
+        },
+        prepare: prepareAutoBatched()
+      },
+      cacheEntriesUpserted: {
+        reducer(draft, action) {
+          for (const entry of action.payload) {
+            const {
+              queryDescription: arg,
+              value
+            } = entry;
+            writePendingCacheEntry(draft, arg, true, {
+              arg,
+              requestId: action.meta.requestId,
+              startedTimeStamp: action.meta.timestamp
+            });
+            writeFulfilledCacheEntry(
+              draft,
+              {
+                arg,
+                requestId: action.meta.requestId,
+                fulfilledTimeStamp: action.meta.timestamp,
+                baseQueryMeta: {}
+              },
+              value,
+              // We know we're upserting here
+              true
+            );
+          }
+        },
+        prepare: (payload) => {
+          const queryDescriptions = payload.map((entry) => {
+            const {
+              endpointName,
+              arg,
+              value
+            } = entry;
+            const endpointDefinition = definitions[endpointName];
+            const queryDescription = {
+              type: "query",
+              endpointName,
+              originalArgs: entry.arg,
+              queryCacheKey: serializeQueryArgs({
+                queryArgs: arg,
+                endpointDefinition,
+                endpointName
+              })
+            };
+            return {
+              queryDescription,
+              value
+            };
+          });
+          const result = {
+            payload: queryDescriptions,
+            meta: {
+              [SHOULD_AUTOBATCH]: true,
+              requestId: nanoid(),
+              timestamp: Date.now()
+            }
+          };
+          return result;
+        }
+      },
+      queryResultPatched: {
+        reducer(draft, {
+          payload: {
+            queryCacheKey,
+            patches
+          }
+        }) {
+          updateQuerySubstateIfExists(draft, queryCacheKey, (substate) => {
+            substate.data = applyPatches(substate.data, patches.concat());
+          });
+        },
+        prepare: prepareAutoBatched()
+      }
+    },
+    extraReducers(builder) {
+      builder.addCase(queryThunk.pending, (draft, {
+        meta,
+        meta: {
+          arg
+        }
+      }) => {
+        const upserting = isUpsertQuery(arg);
+        writePendingCacheEntry(draft, arg, upserting, meta);
+      }).addCase(queryThunk.fulfilled, (draft, {
+        meta,
+        payload
+      }) => {
+        const upserting = isUpsertQuery(meta.arg);
+        writeFulfilledCacheEntry(draft, meta, payload, upserting);
+      }).addCase(queryThunk.rejected, (draft, {
+        meta: {
+          condition,
+          arg,
+          requestId
+        },
+        error,
+        payload
+      }) => {
+        updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {
+          if (condition) {
+          } else {
+            if (substate.requestId !== requestId) return;
+            substate.status = "rejected" /* rejected */;
+            substate.error = payload ?? error;
+          }
+        });
+      }).addMatcher(hasRehydrationInfo, (draft, action) => {
+        const {
+          queries
+        } = extractRehydrationInfo(action);
+        for (const [key, entry] of Object.entries(queries)) {
+          if (
+            // do not rehydrate entries that were currently in flight.
+            entry?.status === "fulfilled" /* fulfilled */ || entry?.status === "rejected" /* rejected */
+          ) {
+            draft[key] = entry;
+          }
+        }
+      });
+    }
+  });
+  const mutationSlice = createSlice({
+    name: `${reducerPath}/mutations`,
+    initialState,
+    reducers: {
+      removeMutationResult: {
+        reducer(draft, {
+          payload
+        }) {
+          const cacheKey = getMutationCacheKey(payload);
+          if (cacheKey in draft) {
+            delete draft[cacheKey];
+          }
+        },
+        prepare: prepareAutoBatched()
+      }
+    },
+    extraReducers(builder) {
+      builder.addCase(mutationThunk.pending, (draft, {
+        meta,
+        meta: {
+          requestId,
+          arg,
+          startedTimeStamp
+        }
+      }) => {
+        if (!arg.track) return;
+        draft[getMutationCacheKey(meta)] = {
+          requestId,
+          status: "pending" /* pending */,
+          endpointName: arg.endpointName,
+          startedTimeStamp
+        };
+      }).addCase(mutationThunk.fulfilled, (draft, {
+        payload,
+        meta
+      }) => {
+        if (!meta.arg.track) return;
+        updateMutationSubstateIfExists(draft, meta, (substate) => {
+          if (substate.requestId !== meta.requestId) return;
+          substate.status = "fulfilled" /* fulfilled */;
+          substate.data = payload;
+          substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;
+        });
+      }).addCase(mutationThunk.rejected, (draft, {
+        payload,
+        error,
+        meta
+      }) => {
+        if (!meta.arg.track) return;
+        updateMutationSubstateIfExists(draft, meta, (substate) => {
+          if (substate.requestId !== meta.requestId) return;
+          substate.status = "rejected" /* rejected */;
+          substate.error = payload ?? error;
+        });
+      }).addMatcher(hasRehydrationInfo, (draft, action) => {
+        const {
+          mutations
+        } = extractRehydrationInfo(action);
+        for (const [key, entry] of Object.entries(mutations)) {
+          if (
+            // do not rehydrate entries that were currently in flight.
+            (entry?.status === "fulfilled" /* fulfilled */ || entry?.status === "rejected" /* rejected */) && // only rehydrate endpoints that were persisted using a `fixedCacheKey`
+            key !== entry?.requestId
+          ) {
+            draft[key] = entry;
+          }
+        }
+      });
+    }
+  });
+  const initialInvalidationState = {
+    tags: {},
+    keys: {}
+  };
+  const invalidationSlice = createSlice({
+    name: `${reducerPath}/invalidation`,
+    initialState: initialInvalidationState,
+    reducers: {
+      updateProvidedBy: {
+        reducer(draft, action) {
+          for (const {
+            queryCacheKey,
+            providedTags
+          } of action.payload) {
+            removeCacheKeyFromTags(draft, queryCacheKey);
+            for (const {
+              type,
+              id
+            } of providedTags) {
+              const subscribedQueries = (draft.tags[type] ??= {})[id || "__internal_without_id"] ??= [];
+              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);
+              if (!alreadySubscribed) {
+                subscribedQueries.push(queryCacheKey);
+              }
+            }
+            draft.keys[queryCacheKey] = providedTags;
+          }
+        },
+        prepare: prepareAutoBatched()
+      }
+    },
+    extraReducers(builder) {
+      builder.addCase(querySlice.actions.removeQueryResult, (draft, {
+        payload: {
+          queryCacheKey
+        }
+      }) => {
+        removeCacheKeyFromTags(draft, queryCacheKey);
+      }).addMatcher(hasRehydrationInfo, (draft, action) => {
+        const {
+          provided
+        } = extractRehydrationInfo(action);
+        for (const [type, incomingTags] of Object.entries(provided)) {
+          for (const [id, cacheKeys] of Object.entries(incomingTags)) {
+            const subscribedQueries = (draft.tags[type] ??= {})[id || "__internal_without_id"] ??= [];
+            for (const queryCacheKey of cacheKeys) {
+              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);
+              if (!alreadySubscribed) {
+                subscribedQueries.push(queryCacheKey);
+              }
+            }
+          }
+        }
+      }).addMatcher(isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)), (draft, action) => {
+        writeProvidedTagsForQueries(draft, [action]);
+      }).addMatcher(querySlice.actions.cacheEntriesUpserted.match, (draft, action) => {
+        const mockActions = action.payload.map(({
+          queryDescription,
+          value
+        }) => {
+          return {
+            type: "UNKNOWN",
+            payload: value,
+            meta: {
+              requestStatus: "fulfilled",
+              requestId: "UNKNOWN",
+              arg: queryDescription
+            }
+          };
+        });
+        writeProvidedTagsForQueries(draft, mockActions);
+      });
+    }
+  });
+  function removeCacheKeyFromTags(draft, queryCacheKey) {
+    const existingTags = draft.keys[queryCacheKey] ?? [];
+    for (const tag of existingTags) {
+      const tagType = tag.type;
+      const tagId = tag.id ?? "__internal_without_id";
+      const tagSubscriptions = draft.tags[tagType]?.[tagId];
+      if (tagSubscriptions) {
+        draft.tags[tagType][tagId] = tagSubscriptions.filter((qc) => qc !== queryCacheKey);
+      }
+    }
+    delete draft.keys[queryCacheKey];
+  }
+  function writeProvidedTagsForQueries(draft, actions2) {
+    const providedByEntries = actions2.map((action) => {
+      const providedTags = calculateProvidedByThunk(action, "providesTags", definitions, assertTagType);
+      const {
+        queryCacheKey
+      } = action.meta.arg;
+      return {
+        queryCacheKey,
+        providedTags
+      };
+    });
+    invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy(providedByEntries));
+  }
+  const subscriptionSlice = createSlice({
+    name: `${reducerPath}/subscriptions`,
+    initialState,
+    reducers: {
+      updateSubscriptionOptions(d, a) {
+      },
+      unsubscribeQueryResult(d, a) {
+      },
+      internal_getRTKQSubscriptions() {
+      }
+    }
+  });
+  const internalSubscriptionsSlice = createSlice({
+    name: `${reducerPath}/internalSubscriptions`,
+    initialState,
+    reducers: {
+      subscriptionsUpdated: {
+        reducer(state, action) {
+          return applyPatches(state, action.payload);
+        },
+        prepare: prepareAutoBatched()
+      }
+    }
+  });
+  const configSlice = createSlice({
+    name: `${reducerPath}/config`,
+    initialState: {
+      online: isOnline(),
+      focused: isDocumentVisible(),
+      middlewareRegistered: false,
+      ...config
+    },
+    reducers: {
+      middlewareRegistered(state, {
+        payload
+      }) {
+        state.middlewareRegistered = state.middlewareRegistered === "conflict" || apiUid !== payload ? "conflict" : true;
+      }
+    },
+    extraReducers: (builder) => {
+      builder.addCase(onOnline, (state) => {
+        state.online = true;
+      }).addCase(onOffline, (state) => {
+        state.online = false;
+      }).addCase(onFocus, (state) => {
+        state.focused = true;
+      }).addCase(onFocusLost, (state) => {
+        state.focused = false;
+      }).addMatcher(hasRehydrationInfo, (draft) => ({
+        ...draft
+      }));
+    }
+  });
+  const combinedReducer = combineReducers({
+    queries: querySlice.reducer,
+    mutations: mutationSlice.reducer,
+    provided: invalidationSlice.reducer,
+    subscriptions: internalSubscriptionsSlice.reducer,
+    config: configSlice.reducer
+  });
+  const reducer = (state, action) => combinedReducer(resetApiState.match(action) ? void 0 : state, action);
+  const actions = {
+    ...configSlice.actions,
+    ...querySlice.actions,
+    ...subscriptionSlice.actions,
+    ...internalSubscriptionsSlice.actions,
+    ...mutationSlice.actions,
+    ...invalidationSlice.actions,
+    resetApiState
+  };
+  return {
+    reducer,
+    actions
+  };
+}
+
+// src/query/core/buildSelectors.ts
+var skipToken = /* @__PURE__ */ Symbol.for("RTKQ/skipToken");
+var initialSubState = {
+  status: "uninitialized" /* uninitialized */
+};
+var defaultQuerySubState = /* @__PURE__ */ createNextState(initialSubState, () => {
+});
+var defaultMutationSubState = /* @__PURE__ */ createNextState(initialSubState, () => {
+});
+function buildSelectors({
+  serializeQueryArgs,
+  reducerPath,
+  createSelector: createSelector2
+}) {
+  const selectSkippedQuery = (state) => defaultQuerySubState;
+  const selectSkippedMutation = (state) => defaultMutationSubState;
+  return {
+    buildQuerySelector,
+    buildInfiniteQuerySelector,
+    buildMutationSelector,
+    selectInvalidatedBy,
+    selectCachedArgsForQuery,
+    selectApiState,
+    selectQueries,
+    selectMutations,
+    selectQueryEntry,
+    selectConfig
+  };
+  function withRequestFlags(substate) {
+    return {
+      ...substate,
+      ...getRequestStatusFlags(substate.status)
+    };
+  }
+  function selectApiState(rootState) {
+    const state = rootState[reducerPath];
+    if (process.env.NODE_ENV !== "production") {
+      if (!state) {
+        if (selectApiState.triggered) return state;
+        selectApiState.triggered = true;
+        console.error(`Error: No data found at \`state.${reducerPath}\`. Did you forget to add the reducer to the store?`);
+      }
+    }
+    return state;
+  }
+  function selectQueries(rootState) {
+    return selectApiState(rootState)?.queries;
+  }
+  function selectQueryEntry(rootState, cacheKey) {
+    return selectQueries(rootState)?.[cacheKey];
+  }
+  function selectMutations(rootState) {
+    return selectApiState(rootState)?.mutations;
+  }
+  function selectConfig(rootState) {
+    return selectApiState(rootState)?.config;
+  }
+  function buildAnyQuerySelector(endpointName, endpointDefinition, combiner) {
+    return (queryArgs) => {
+      if (queryArgs === skipToken) {
+        return createSelector2(selectSkippedQuery, combiner);
+      }
+      const serializedArgs = serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName
+      });
+      const selectQuerySubstate = (state) => selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState;
+      return createSelector2(selectQuerySubstate, combiner);
+    };
+  }
+  function buildQuerySelector(endpointName, endpointDefinition) {
+    return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags);
+  }
+  function buildInfiniteQuerySelector(endpointName, endpointDefinition) {
+    const {
+      infiniteQueryOptions
+    } = endpointDefinition;
+    function withInfiniteQueryResultFlags(substate) {
+      const stateWithRequestFlags = {
+        ...substate,
+        ...getRequestStatusFlags(substate.status)
+      };
+      const {
+        isLoading,
+        isError,
+        direction
+      } = stateWithRequestFlags;
+      const isForward = direction === "forward";
+      const isBackward = direction === "backward";
+      return {
+        ...stateWithRequestFlags,
+        hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),
+        hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),
+        isFetchingNextPage: isLoading && isForward,
+        isFetchingPreviousPage: isLoading && isBackward,
+        isFetchNextPageError: isError && isForward,
+        isFetchPreviousPageError: isError && isBackward
+      };
+    }
+    return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags);
+  }
+  function buildMutationSelector() {
+    return (id) => {
+      let mutationId;
+      if (typeof id === "object") {
+        mutationId = getMutationCacheKey(id) ?? skipToken;
+      } else {
+        mutationId = id;
+      }
+      const selectMutationSubstate = (state) => selectApiState(state)?.mutations?.[mutationId] ?? defaultMutationSubState;
+      const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;
+      return createSelector2(finalSelectMutationSubstate, withRequestFlags);
+    };
+  }
+  function selectInvalidatedBy(state, tags) {
+    const apiState = state[reducerPath];
+    const toInvalidate = /* @__PURE__ */ new Set();
+    for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {
+      const provided = apiState.provided.tags[tag.type];
+      if (!provided) {
+        continue;
+      }
+      let invalidateSubscriptions = (tag.id !== void 0 ? (
+        // id given: invalidate all queries that provide this type & id
+        provided[tag.id]
+      ) : (
+        // no id: invalidate all queries that provide this type
+        flatten(Object.values(provided))
+      )) ?? [];
+      for (const invalidate of invalidateSubscriptions) {
+        toInvalidate.add(invalidate);
+      }
+    }
+    return flatten(Array.from(toInvalidate.values()).map((queryCacheKey) => {
+      const querySubState = apiState.queries[queryCacheKey];
+      return querySubState ? [{
+        queryCacheKey,
+        endpointName: querySubState.endpointName,
+        originalArgs: querySubState.originalArgs
+      }] : [];
+    }));
+  }
+  function selectCachedArgsForQuery(state, queryName) {
+    return Object.values(selectQueries(state)).filter((entry) => entry?.endpointName === queryName && entry.status !== "uninitialized" /* uninitialized */).map((entry) => entry.originalArgs);
+  }
+  function getHasNextPage(options, data, queryArg) {
+    if (!data) return false;
+    return getNextPageParam(options, data, queryArg) != null;
+  }
+  function getHasPreviousPage(options, data, queryArg) {
+    if (!data || !options.getPreviousPageParam) return false;
+    return getPreviousPageParam(options, data, queryArg) != null;
+  }
+}
+
+// src/query/createApi.ts
+import { formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage22, formatProdErrorMessage as _formatProdErrorMessage3 } from "@reduxjs/toolkit";
+
+// src/query/defaultSerializeQueryArgs.ts
+var cache = WeakMap ? /* @__PURE__ */ new WeakMap() : void 0;
+var defaultSerializeQueryArgs = ({
+  endpointName,
+  queryArgs
+}) => {
+  let serialized = "";
+  const cached = cache?.get(queryArgs);
+  if (typeof cached === "string") {
+    serialized = cached;
+  } else {
+    const stringified = JSON.stringify(queryArgs, (key, value) => {
+      value = typeof value === "bigint" ? {
+        $bigint: value.toString()
+      } : value;
+      value = isPlainObject(value) ? Object.keys(value).sort().reduce((acc, key2) => {
+        acc[key2] = value[key2];
+        return acc;
+      }, {}) : value;
+      return value;
+    });
+    if (isPlainObject(queryArgs)) {
+      cache?.set(queryArgs, stringified);
+    }
+    serialized = stringified;
+  }
+  return `${endpointName}(${serialized})`;
+};
+
+// src/query/createApi.ts
+import { weakMapMemoize } from "reselect";
+function buildCreateApi(...modules) {
+  return function baseCreateApi(options) {
+    const extractRehydrationInfo = weakMapMemoize((action) => options.extractRehydrationInfo?.(action, {
+      reducerPath: options.reducerPath ?? "api"
+    }));
+    const optionsWithDefaults = {
+      reducerPath: "api",
+      keepUnusedDataFor: 60,
+      refetchOnMountOrArgChange: false,
+      refetchOnFocus: false,
+      refetchOnReconnect: false,
+      invalidationBehavior: "delayed",
+      ...options,
+      extractRehydrationInfo,
+      serializeQueryArgs(queryArgsApi) {
+        let finalSerializeQueryArgs = defaultSerializeQueryArgs;
+        if ("serializeQueryArgs" in queryArgsApi.endpointDefinition) {
+          const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs;
+          finalSerializeQueryArgs = (queryArgsApi2) => {
+            const initialResult = endpointSQA(queryArgsApi2);
+            if (typeof initialResult === "string") {
+              return initialResult;
+            } else {
+              return defaultSerializeQueryArgs({
+                ...queryArgsApi2,
+                queryArgs: initialResult
+              });
+            }
+          };
+        } else if (options.serializeQueryArgs) {
+          finalSerializeQueryArgs = options.serializeQueryArgs;
+        }
+        return finalSerializeQueryArgs(queryArgsApi);
+      },
+      tagTypes: [...options.tagTypes || []]
+    };
+    const context = {
+      endpointDefinitions: {},
+      batch(fn) {
+        fn();
+      },
+      apiUid: nanoid(),
+      extractRehydrationInfo,
+      hasRehydrationInfo: weakMapMemoize((action) => extractRehydrationInfo(action) != null)
+    };
+    const api = {
+      injectEndpoints,
+      enhanceEndpoints({
+        addTagTypes,
+        endpoints
+      }) {
+        if (addTagTypes) {
+          for (const eT of addTagTypes) {
+            if (!optionsWithDefaults.tagTypes.includes(eT)) {
+              ;
+              optionsWithDefaults.tagTypes.push(eT);
+            }
+          }
+        }
+        if (endpoints) {
+          for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {
+            if (typeof partialDefinition === "function") {
+              partialDefinition(context.endpointDefinitions[endpointName]);
+            } else {
+              Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);
+            }
+          }
+        }
+        return api;
+      }
+    };
+    const initializedModules = modules.map((m) => m.init(api, optionsWithDefaults, context));
+    function injectEndpoints(inject) {
+      const evaluatedEndpoints = inject.endpoints({
+        query: (x) => ({
+          ...x,
+          type: "query" /* query */
+        }),
+        mutation: (x) => ({
+          ...x,
+          type: "mutation" /* mutation */
+        }),
+        infiniteQuery: (x) => ({
+          ...x,
+          type: "infinitequery" /* infinitequery */
+        })
+      });
+      for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {
+        if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {
+          if (inject.overrideExisting === "throw") {
+            throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage2(39) : `called \`injectEndpoints\` to override already-existing endpointName ${endpointName} without specifying \`overrideExisting: true\``);
+          } else if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+            console.error(`called \`injectEndpoints\` to override already-existing endpointName ${endpointName} without specifying \`overrideExisting: true\``);
+          }
+          continue;
+        }
+        if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+          if (isInfiniteQueryDefinition(definition)) {
+            const {
+              infiniteQueryOptions
+            } = definition;
+            const {
+              maxPages,
+              getPreviousPageParam: getPreviousPageParam2
+            } = infiniteQueryOptions;
+            if (typeof maxPages === "number") {
+              if (maxPages < 1) {
+                throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage22(40) : `maxPages for endpoint '${endpointName}' must be a number greater than 0`);
+              }
+              if (typeof getPreviousPageParam2 !== "function") {
+                throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage3(41) : `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`);
+              }
+            }
+          }
+        }
+        context.endpointDefinitions[endpointName] = definition;
+        for (const m of initializedModules) {
+          m.injectEndpoint(endpointName, definition);
+        }
+      }
+      return api;
+    }
+    return api.injectEndpoints({
+      endpoints: options.endpoints
+    });
+  };
+}
+
+// src/query/fakeBaseQuery.ts
+import { formatProdErrorMessage as _formatProdErrorMessage4 } from "@reduxjs/toolkit";
+var _NEVER = /* @__PURE__ */ Symbol();
+function fakeBaseQuery() {
+  return function() {
+    throw new Error(process.env.NODE_ENV === "production" ? _formatProdErrorMessage4(33) : "When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.");
+  };
+}
+
+// src/query/core/module.ts
+import { enablePatches } from "immer";
+
+// src/query/tsHelpers.ts
+function assertCast(v) {
+}
+function safeAssign(target, ...args) {
+  return Object.assign(target, ...args);
+}
+
+// src/query/core/buildMiddleware/batchActions.ts
+import { produceWithPatches as produceWithPatches2 } from "immer";
+var buildBatchedActionsHandler = ({
+  api,
+  queryThunk,
+  internalState
+}) => {
+  const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;
+  let previousSubscriptions = null;
+  let updateSyncTimer = null;
+  const {
+    updateSubscriptionOptions,
+    unsubscribeQueryResult
+  } = api.internalActions;
+  const actuallyMutateSubscriptions = (mutableState, action) => {
+    if (updateSubscriptionOptions.match(action)) {
+      const {
+        queryCacheKey,
+        requestId,
+        options
+      } = action.payload;
+      if (mutableState?.[queryCacheKey]?.[requestId]) {
+        mutableState[queryCacheKey][requestId] = options;
+      }
+      return true;
+    }
+    if (unsubscribeQueryResult.match(action)) {
+      const {
+        queryCacheKey,
+        requestId
+      } = action.payload;
+      if (mutableState[queryCacheKey]) {
+        delete mutableState[queryCacheKey][requestId];
+      }
+      return true;
+    }
+    if (api.internalActions.removeQueryResult.match(action)) {
+      delete mutableState[action.payload.queryCacheKey];
+      return true;
+    }
+    if (queryThunk.pending.match(action)) {
+      const {
+        meta: {
+          arg,
+          requestId
+        }
+      } = action;
+      const substate = mutableState[arg.queryCacheKey] ??= {};
+      substate[`${requestId}_running`] = {};
+      if (arg.subscribe) {
+        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};
+      }
+      return true;
+    }
+    let mutated = false;
+    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {
+      const state = mutableState[action.meta.arg.queryCacheKey] || {};
+      const key = `${action.meta.requestId}_running`;
+      mutated ||= !!state[key];
+      delete state[key];
+    }
+    if (queryThunk.rejected.match(action)) {
+      const {
+        meta: {
+          condition,
+          arg,
+          requestId
+        }
+      } = action;
+      if (condition && arg.subscribe) {
+        const substate = mutableState[arg.queryCacheKey] ??= {};
+        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};
+        mutated = true;
+      }
+    }
+    return mutated;
+  };
+  const getSubscriptions = () => internalState.currentSubscriptions;
+  const getSubscriptionCount = (queryCacheKey) => {
+    const subscriptions = getSubscriptions();
+    const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {};
+    return countObjectKeys(subscriptionsForQueryArg);
+  };
+  const isRequestSubscribed = (queryCacheKey, requestId) => {
+    const subscriptions = getSubscriptions();
+    return !!subscriptions?.[queryCacheKey]?.[requestId];
+  };
+  const subscriptionSelectors = {
+    getSubscriptions,
+    getSubscriptionCount,
+    isRequestSubscribed
+  };
+  return (action, mwApi) => {
+    if (!previousSubscriptions) {
+      previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));
+    }
+    if (api.util.resetApiState.match(action)) {
+      previousSubscriptions = internalState.currentSubscriptions = {};
+      updateSyncTimer = null;
+      return [true, false];
+    }
+    if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {
+      return [false, subscriptionSelectors];
+    }
+    const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);
+    let actionShouldContinue = true;
+    if (didMutate) {
+      if (!updateSyncTimer) {
+        updateSyncTimer = setTimeout(() => {
+          const newSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));
+          const [, patches] = produceWithPatches2(previousSubscriptions, () => newSubscriptions);
+          mwApi.next(api.internalActions.subscriptionsUpdated(patches));
+          previousSubscriptions = newSubscriptions;
+          updateSyncTimer = null;
+        }, 500);
+      }
+      const isSubscriptionSliceAction = typeof action.type == "string" && !!action.type.startsWith(subscriptionsPrefix);
+      const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;
+      actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;
+    }
+    return [actionShouldContinue, false];
+  };
+};
+
+// src/query/core/buildMiddleware/cacheCollection.ts
+function isObjectEmpty(obj) {
+  for (const k in obj) {
+    return false;
+  }
+  return true;
+}
+var THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2147483647 / 1e3 - 1;
+var buildCacheCollectionHandler = ({
+  reducerPath,
+  api,
+  queryThunk,
+  context,
+  internalState,
+  selectors: {
+    selectQueryEntry,
+    selectConfig
+  }
+}) => {
+  const {
+    removeQueryResult,
+    unsubscribeQueryResult,
+    cacheEntriesUpserted
+  } = api.internalActions;
+  const canTriggerUnsubscribe = isAnyOf(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);
+  function anySubscriptionsRemainingForKey(queryCacheKey) {
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    return !!subscriptions && !isObjectEmpty(subscriptions);
+  }
+  const currentRemovalTimeouts = {};
+  const handler = (action, mwApi, internalState2) => {
+    const state = mwApi.getState();
+    const config = selectConfig(state);
+    if (canTriggerUnsubscribe(action)) {
+      let queryCacheKeys;
+      if (cacheEntriesUpserted.match(action)) {
+        queryCacheKeys = action.payload.map((entry) => entry.queryDescription.queryCacheKey);
+      } else {
+        const {
+          queryCacheKey
+        } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;
+        queryCacheKeys = [queryCacheKey];
+      }
+      handleUnsubscribeMany(queryCacheKeys, mwApi, config);
+    }
+    if (api.util.resetApiState.match(action)) {
+      for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {
+        if (timeout) clearTimeout(timeout);
+        delete currentRemovalTimeouts[key];
+      }
+    }
+    if (context.hasRehydrationInfo(action)) {
+      const {
+        queries
+      } = context.extractRehydrationInfo(action);
+      handleUnsubscribeMany(Object.keys(queries), mwApi, config);
+    }
+  };
+  function handleUnsubscribeMany(cacheKeys, api2, config) {
+    const state = api2.getState();
+    for (const queryCacheKey of cacheKeys) {
+      const entry = selectQueryEntry(state, queryCacheKey);
+      handleUnsubscribe(queryCacheKey, entry?.endpointName, api2, config);
+    }
+  }
+  function handleUnsubscribe(queryCacheKey, endpointName, api2, config) {
+    const endpointDefinition = context.endpointDefinitions[endpointName];
+    const keepUnusedDataFor = endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor;
+    if (keepUnusedDataFor === Infinity) {
+      return;
+    }
+    const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));
+    if (!anySubscriptionsRemainingForKey(queryCacheKey)) {
+      const currentTimeout = currentRemovalTimeouts[queryCacheKey];
+      if (currentTimeout) {
+        clearTimeout(currentTimeout);
+      }
+      currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {
+        if (!anySubscriptionsRemainingForKey(queryCacheKey)) {
+          api2.dispatch(removeQueryResult({
+            queryCacheKey
+          }));
+        }
+        delete currentRemovalTimeouts[queryCacheKey];
+      }, finalKeepUnusedDataFor * 1e3);
+    }
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/cacheLifecycle.ts
+var neverResolvedError = new Error("Promise never resolved before cacheEntryRemoved.");
+var buildCacheLifecycleHandler = ({
+  api,
+  reducerPath,
+  context,
+  queryThunk,
+  mutationThunk,
+  internalState,
+  selectors: {
+    selectQueryEntry,
+    selectApiState
+  }
+}) => {
+  const isQueryThunk = isAsyncThunkAction(queryThunk);
+  const isMutationThunk = isAsyncThunkAction(mutationThunk);
+  const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk);
+  const lifecycleMap = {};
+  function resolveLifecycleEntry(cacheKey, data, meta) {
+    const lifecycle = lifecycleMap[cacheKey];
+    if (lifecycle?.valueResolved) {
+      lifecycle.valueResolved({
+        data,
+        meta
+      });
+      delete lifecycle.valueResolved;
+    }
+  }
+  function removeLifecycleEntry(cacheKey) {
+    const lifecycle = lifecycleMap[cacheKey];
+    if (lifecycle) {
+      delete lifecycleMap[cacheKey];
+      lifecycle.cacheEntryRemoved();
+    }
+  }
+  const handler = (action, mwApi, stateBefore) => {
+    const cacheKey = getCacheKey(action);
+    function checkForNewCacheKey(endpointName, cacheKey2, requestId, originalArgs) {
+      const oldEntry = selectQueryEntry(stateBefore, cacheKey2);
+      const newEntry = selectQueryEntry(mwApi.getState(), cacheKey2);
+      if (!oldEntry && newEntry) {
+        handleNewKey(endpointName, originalArgs, cacheKey2, mwApi, requestId);
+      }
+    }
+    if (queryThunk.pending.match(action)) {
+      checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);
+    } else if (api.internalActions.cacheEntriesUpserted.match(action)) {
+      for (const {
+        queryDescription,
+        value
+      } of action.payload) {
+        const {
+          endpointName,
+          originalArgs,
+          queryCacheKey
+        } = queryDescription;
+        checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);
+        resolveLifecycleEntry(queryCacheKey, value, {});
+      }
+    } else if (mutationThunk.pending.match(action)) {
+      const state = mwApi.getState()[reducerPath].mutations[cacheKey];
+      if (state) {
+        handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);
+      }
+    } else if (isFulfilledThunk(action)) {
+      resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);
+    } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {
+      removeLifecycleEntry(cacheKey);
+    } else if (api.util.resetApiState.match(action)) {
+      for (const cacheKey2 of Object.keys(lifecycleMap)) {
+        removeLifecycleEntry(cacheKey2);
+      }
+    }
+  };
+  function getCacheKey(action) {
+    if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;
+    if (isMutationThunk(action)) {
+      return action.meta.arg.fixedCacheKey ?? action.meta.requestId;
+    }
+    if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;
+    if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);
+    return "";
+  }
+  function handleNewKey(endpointName, originalArgs, queryCacheKey, mwApi, requestId) {
+    const endpointDefinition = context.endpointDefinitions[endpointName];
+    const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded;
+    if (!onCacheEntryAdded) return;
+    const lifecycle = {};
+    const cacheEntryRemoved = new Promise((resolve) => {
+      lifecycle.cacheEntryRemoved = resolve;
+    });
+    const cacheDataLoaded = Promise.race([new Promise((resolve) => {
+      lifecycle.valueResolved = resolve;
+    }), cacheEntryRemoved.then(() => {
+      throw neverResolvedError;
+    })]);
+    cacheDataLoaded.catch(() => {
+    });
+    lifecycleMap[queryCacheKey] = lifecycle;
+    const selector = api.endpoints[endpointName].select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : queryCacheKey);
+    const extra = mwApi.dispatch((_, __, extra2) => extra2);
+    const lifecycleApi = {
+      ...mwApi,
+      getCacheEntry: () => selector(mwApi.getState()),
+      requestId,
+      extra,
+      updateCachedData: isAnyQueryDefinition(endpointDefinition) ? (updateRecipe) => mwApi.dispatch(api.util.updateQueryData(endpointName, originalArgs, updateRecipe)) : void 0,
+      cacheDataLoaded,
+      cacheEntryRemoved
+    };
+    const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi);
+    Promise.resolve(runningHandler).catch((e) => {
+      if (e === neverResolvedError) return;
+      throw e;
+    });
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/devMiddleware.ts
+var buildDevCheckHandler = ({
+  api,
+  context: {
+    apiUid
+  },
+  reducerPath
+}) => {
+  return (action, mwApi) => {
+    if (api.util.resetApiState.match(action)) {
+      mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));
+    }
+    if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+      if (api.internalActions.middlewareRegistered.match(action) && action.payload === apiUid && mwApi.getState()[reducerPath]?.config?.middlewareRegistered === "conflict") {
+        console.warn(`There is a mismatch between slice and middleware for the reducerPath "${reducerPath}".
+You can only have one api per reducer path, this will lead to crashes in various situations!${reducerPath === "api" ? `
+If you have multiple apis, you *have* to specify the reducerPath option when using createApi!` : ""}`);
+      }
+    }
+  };
+};
+
+// src/query/core/buildMiddleware/invalidationByTags.ts
+var buildInvalidationByTagsHandler = ({
+  reducerPath,
+  context,
+  context: {
+    endpointDefinitions
+  },
+  mutationThunk,
+  queryThunk,
+  api,
+  assertTagType,
+  refetchQuery,
+  internalState
+}) => {
+  const {
+    removeQueryResult
+  } = api.internalActions;
+  const isThunkActionWithTags = isAnyOf(isFulfilled(mutationThunk), isRejectedWithValue(mutationThunk));
+  const isQueryEnd = isAnyOf(isFulfilled(mutationThunk, queryThunk), isRejected(mutationThunk, queryThunk));
+  let pendingTagInvalidations = [];
+  const handler = (action, mwApi) => {
+    if (isThunkActionWithTags(action)) {
+      invalidateTags(calculateProvidedByThunk(action, "invalidatesTags", endpointDefinitions, assertTagType), mwApi);
+    } else if (isQueryEnd(action)) {
+      invalidateTags([], mwApi);
+    } else if (api.util.invalidateTags.match(action)) {
+      invalidateTags(calculateProvidedBy(action.payload, void 0, void 0, void 0, void 0, assertTagType), mwApi);
+    }
+  };
+  function hasPendingRequests(state) {
+    const {
+      queries,
+      mutations
+    } = state;
+    for (const cacheRecord of [queries, mutations]) {
+      for (const key in cacheRecord) {
+        if (cacheRecord[key]?.status === "pending" /* pending */) return true;
+      }
+    }
+    return false;
+  }
+  function invalidateTags(newTags, mwApi) {
+    const rootState = mwApi.getState();
+    const state = rootState[reducerPath];
+    pendingTagInvalidations.push(...newTags);
+    if (state.config.invalidationBehavior === "delayed" && hasPendingRequests(state)) {
+      return;
+    }
+    const tags = pendingTagInvalidations;
+    pendingTagInvalidations = [];
+    if (tags.length === 0) return;
+    const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);
+    context.batch(() => {
+      const valuesArray = Array.from(toInvalidate.values());
+      for (const {
+        queryCacheKey
+      } of valuesArray) {
+        const querySubState = state.queries[queryCacheKey];
+        const subscriptionSubState = internalState.currentSubscriptions[queryCacheKey] ?? {};
+        if (querySubState) {
+          if (countObjectKeys(subscriptionSubState) === 0) {
+            mwApi.dispatch(removeQueryResult({
+              queryCacheKey
+            }));
+          } else if (querySubState.status !== "uninitialized" /* uninitialized */) {
+            mwApi.dispatch(refetchQuery(querySubState));
+          }
+        }
+      }
+    });
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/polling.ts
+var buildPollingHandler = ({
+  reducerPath,
+  queryThunk,
+  api,
+  refetchQuery,
+  internalState
+}) => {
+  const currentPolls = {};
+  const handler = (action, mwApi) => {
+    if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {
+      updatePollingInterval(action.payload, mwApi);
+    }
+    if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {
+      updatePollingInterval(action.meta.arg, mwApi);
+    }
+    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {
+      startNextPoll(action.meta.arg, mwApi);
+    }
+    if (api.util.resetApiState.match(action)) {
+      clearPolls();
+    }
+  };
+  function getCacheEntrySubscriptions(queryCacheKey, api2) {
+    const state = api2.getState()[reducerPath];
+    const querySubState = state.queries[queryCacheKey];
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) return;
+    return subscriptions;
+  }
+  function startNextPoll({
+    queryCacheKey
+  }, api2) {
+    const state = api2.getState()[reducerPath];
+    const querySubState = state.queries[queryCacheKey];
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) return;
+    const {
+      lowestPollingInterval,
+      skipPollingIfUnfocused
+    } = findLowestPollingInterval(subscriptions);
+    if (!Number.isFinite(lowestPollingInterval)) return;
+    const currentPoll = currentPolls[queryCacheKey];
+    if (currentPoll?.timeout) {
+      clearTimeout(currentPoll.timeout);
+      currentPoll.timeout = void 0;
+    }
+    const nextPollTimestamp = Date.now() + lowestPollingInterval;
+    currentPolls[queryCacheKey] = {
+      nextPollTimestamp,
+      pollingInterval: lowestPollingInterval,
+      timeout: setTimeout(() => {
+        if (state.config.focused || !skipPollingIfUnfocused) {
+          api2.dispatch(refetchQuery(querySubState));
+        }
+        startNextPoll({
+          queryCacheKey
+        }, api2);
+      }, lowestPollingInterval)
+    };
+  }
+  function updatePollingInterval({
+    queryCacheKey
+  }, api2) {
+    const state = api2.getState()[reducerPath];
+    const querySubState = state.queries[queryCacheKey];
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey];
+    if (!querySubState || querySubState.status === "uninitialized" /* uninitialized */) {
+      return;
+    }
+    const {
+      lowestPollingInterval
+    } = findLowestPollingInterval(subscriptions);
+    if (!Number.isFinite(lowestPollingInterval)) {
+      cleanupPollForKey(queryCacheKey);
+      return;
+    }
+    const currentPoll = currentPolls[queryCacheKey];
+    const nextPollTimestamp = Date.now() + lowestPollingInterval;
+    if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {
+      startNextPoll({
+        queryCacheKey
+      }, api2);
+    }
+  }
+  function cleanupPollForKey(key) {
+    const existingPoll = currentPolls[key];
+    if (existingPoll?.timeout) {
+      clearTimeout(existingPoll.timeout);
+    }
+    delete currentPolls[key];
+  }
+  function clearPolls() {
+    for (const key of Object.keys(currentPolls)) {
+      cleanupPollForKey(key);
+    }
+  }
+  function findLowestPollingInterval(subscribers = {}) {
+    let skipPollingIfUnfocused = false;
+    let lowestPollingInterval = Number.POSITIVE_INFINITY;
+    for (let key in subscribers) {
+      if (!!subscribers[key].pollingInterval) {
+        lowestPollingInterval = Math.min(subscribers[key].pollingInterval, lowestPollingInterval);
+        skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;
+      }
+    }
+    return {
+      lowestPollingInterval,
+      skipPollingIfUnfocused
+    };
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/queryLifecycle.ts
+var buildQueryLifecycleHandler = ({
+  api,
+  context,
+  queryThunk,
+  mutationThunk
+}) => {
+  const isPendingThunk = isPending(queryThunk, mutationThunk);
+  const isRejectedThunk = isRejected(queryThunk, mutationThunk);
+  const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk);
+  const lifecycleMap = {};
+  const handler = (action, mwApi) => {
+    if (isPendingThunk(action)) {
+      const {
+        requestId,
+        arg: {
+          endpointName,
+          originalArgs
+        }
+      } = action.meta;
+      const endpointDefinition = context.endpointDefinitions[endpointName];
+      const onQueryStarted = endpointDefinition?.onQueryStarted;
+      if (onQueryStarted) {
+        const lifecycle = {};
+        const queryFulfilled = new Promise((resolve, reject) => {
+          lifecycle.resolve = resolve;
+          lifecycle.reject = reject;
+        });
+        queryFulfilled.catch(() => {
+        });
+        lifecycleMap[requestId] = lifecycle;
+        const selector = api.endpoints[endpointName].select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : requestId);
+        const extra = mwApi.dispatch((_, __, extra2) => extra2);
+        const lifecycleApi = {
+          ...mwApi,
+          getCacheEntry: () => selector(mwApi.getState()),
+          requestId,
+          extra,
+          updateCachedData: isAnyQueryDefinition(endpointDefinition) ? (updateRecipe) => mwApi.dispatch(api.util.updateQueryData(endpointName, originalArgs, updateRecipe)) : void 0,
+          queryFulfilled
+        };
+        onQueryStarted(originalArgs, lifecycleApi);
+      }
+    } else if (isFullfilledThunk(action)) {
+      const {
+        requestId,
+        baseQueryMeta
+      } = action.meta;
+      lifecycleMap[requestId]?.resolve({
+        data: action.payload,
+        meta: baseQueryMeta
+      });
+      delete lifecycleMap[requestId];
+    } else if (isRejectedThunk(action)) {
+      const {
+        requestId,
+        rejectedWithValue,
+        baseQueryMeta
+      } = action.meta;
+      lifecycleMap[requestId]?.reject({
+        error: action.payload ?? action.error,
+        isUnhandledError: !rejectedWithValue,
+        meta: baseQueryMeta
+      });
+      delete lifecycleMap[requestId];
+    }
+  };
+  return handler;
+};
+
+// src/query/core/buildMiddleware/windowEventHandling.ts
+var buildWindowEventHandler = ({
+  reducerPath,
+  context,
+  api,
+  refetchQuery,
+  internalState
+}) => {
+  const {
+    removeQueryResult
+  } = api.internalActions;
+  const handler = (action, mwApi) => {
+    if (onFocus.match(action)) {
+      refetchValidQueries(mwApi, "refetchOnFocus");
+    }
+    if (onOnline.match(action)) {
+      refetchValidQueries(mwApi, "refetchOnReconnect");
+    }
+  };
+  function refetchValidQueries(api2, type) {
+    const state = api2.getState()[reducerPath];
+    const queries = state.queries;
+    const subscriptions = internalState.currentSubscriptions;
+    context.batch(() => {
+      for (const queryCacheKey of Object.keys(subscriptions)) {
+        const querySubState = queries[queryCacheKey];
+        const subscriptionSubState = subscriptions[queryCacheKey];
+        if (!subscriptionSubState || !querySubState) continue;
+        const shouldRefetch = Object.values(subscriptionSubState).some((sub) => sub[type] === true) || Object.values(subscriptionSubState).every((sub) => sub[type] === void 0) && state.config[type];
+        if (shouldRefetch) {
+          if (countObjectKeys(subscriptionSubState) === 0) {
+            api2.dispatch(removeQueryResult({
+              queryCacheKey
+            }));
+          } else if (querySubState.status !== "uninitialized" /* uninitialized */) {
+            api2.dispatch(refetchQuery(querySubState));
+          }
+        }
+      }
+    });
+  }
+  return handler;
+};
+
+// src/query/core/buildMiddleware/index.ts
+function buildMiddleware(input) {
+  const {
+    reducerPath,
+    queryThunk,
+    api,
+    context
+  } = input;
+  const {
+    apiUid
+  } = context;
+  const actions = {
+    invalidateTags: createAction(`${reducerPath}/invalidateTags`)
+  };
+  const isThisApiSliceAction = (action) => action.type.startsWith(`${reducerPath}/`);
+  const handlerBuilders = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];
+  const middleware = (mwApi) => {
+    let initialized2 = false;
+    const internalState = {
+      currentSubscriptions: {}
+    };
+    const builderArgs = {
+      ...input,
+      internalState,
+      refetchQuery,
+      isThisApiSliceAction
+    };
+    const handlers = handlerBuilders.map((build) => build(builderArgs));
+    const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);
+    const windowEventsHandler = buildWindowEventHandler(builderArgs);
+    return (next) => {
+      return (action) => {
+        if (!isAction(action)) {
+          return next(action);
+        }
+        if (!initialized2) {
+          initialized2 = true;
+          mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));
+        }
+        const mwApiWithNext = {
+          ...mwApi,
+          next
+        };
+        const stateBefore = mwApi.getState();
+        const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);
+        let res;
+        if (actionShouldContinue) {
+          res = next(action);
+        } else {
+          res = internalProbeResult;
+        }
+        if (!!mwApi.getState()[reducerPath]) {
+          windowEventsHandler(action, mwApiWithNext, stateBefore);
+          if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {
+            for (const handler of handlers) {
+              handler(action, mwApiWithNext, stateBefore);
+            }
+          }
+        }
+        return res;
+      };
+    };
+  };
+  return {
+    middleware,
+    actions
+  };
+  function refetchQuery(querySubState) {
+    return input.api.endpoints[querySubState.endpointName].initiate(querySubState.originalArgs, {
+      subscribe: false,
+      forceRefetch: true
+    });
+  }
+}
+
+// src/query/core/module.ts
+var coreModuleName = /* @__PURE__ */ Symbol();
+var coreModule = ({
+  createSelector: createSelector2 = createSelector
+} = {}) => ({
+  name: coreModuleName,
+  init(api, {
+    baseQuery,
+    tagTypes,
+    reducerPath,
+    serializeQueryArgs,
+    keepUnusedDataFor,
+    refetchOnMountOrArgChange,
+    refetchOnFocus,
+    refetchOnReconnect,
+    invalidationBehavior,
+    onSchemaFailure,
+    catchSchemaFailure,
+    skipSchemaValidation
+  }, context) {
+    enablePatches();
+    assertCast(serializeQueryArgs);
+    const assertTagType = (tag) => {
+      if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+        if (!tagTypes.includes(tag.type)) {
+          console.error(`Tag type '${tag.type}' was used, but not specified in \`tagTypes\`!`);
+        }
+      }
+      return tag;
+    };
+    Object.assign(api, {
+      reducerPath,
+      endpoints: {},
+      internalActions: {
+        onOnline,
+        onOffline,
+        onFocus,
+        onFocusLost
+      },
+      util: {}
+    });
+    const selectors = buildSelectors({
+      serializeQueryArgs,
+      reducerPath,
+      createSelector: createSelector2
+    });
+    const {
+      selectInvalidatedBy,
+      selectCachedArgsForQuery,
+      buildQuerySelector,
+      buildInfiniteQuerySelector,
+      buildMutationSelector
+    } = selectors;
+    safeAssign(api.util, {
+      selectInvalidatedBy,
+      selectCachedArgsForQuery
+    });
+    const {
+      queryThunk,
+      infiniteQueryThunk,
+      mutationThunk,
+      patchQueryData,
+      updateQueryData,
+      upsertQueryData,
+      prefetch,
+      buildMatchThunkActions
+    } = buildThunks({
+      baseQuery,
+      reducerPath,
+      context,
+      api,
+      serializeQueryArgs,
+      assertTagType,
+      selectors,
+      onSchemaFailure,
+      catchSchemaFailure,
+      skipSchemaValidation
+    });
+    const {
+      reducer,
+      actions: sliceActions
+    } = buildSlice({
+      context,
+      queryThunk,
+      infiniteQueryThunk,
+      mutationThunk,
+      serializeQueryArgs,
+      reducerPath,
+      assertTagType,
+      config: {
+        refetchOnFocus,
+        refetchOnReconnect,
+        refetchOnMountOrArgChange,
+        keepUnusedDataFor,
+        reducerPath,
+        invalidationBehavior
+      }
+    });
+    safeAssign(api.util, {
+      patchQueryData,
+      updateQueryData,
+      upsertQueryData,
+      prefetch,
+      resetApiState: sliceActions.resetApiState,
+      upsertQueryEntries: sliceActions.cacheEntriesUpserted
+    });
+    safeAssign(api.internalActions, sliceActions);
+    const {
+      middleware,
+      actions: middlewareActions
+    } = buildMiddleware({
+      reducerPath,
+      context,
+      queryThunk,
+      mutationThunk,
+      infiniteQueryThunk,
+      api,
+      assertTagType,
+      selectors
+    });
+    safeAssign(api.util, middlewareActions);
+    safeAssign(api, {
+      reducer,
+      middleware
+    });
+    const {
+      buildInitiateQuery,
+      buildInitiateInfiniteQuery,
+      buildInitiateMutation,
+      getRunningMutationThunk,
+      getRunningMutationsThunk,
+      getRunningQueriesThunk,
+      getRunningQueryThunk
+    } = buildInitiate({
+      queryThunk,
+      mutationThunk,
+      infiniteQueryThunk,
+      api,
+      serializeQueryArgs,
+      context
+    });
+    safeAssign(api.util, {
+      getRunningMutationThunk,
+      getRunningMutationsThunk,
+      getRunningQueryThunk,
+      getRunningQueriesThunk
+    });
+    return {
+      name: coreModuleName,
+      injectEndpoint(endpointName, definition) {
+        const anyApi = api;
+        const endpoint = anyApi.endpoints[endpointName] ??= {};
+        if (isQueryDefinition(definition)) {
+          safeAssign(endpoint, {
+            name: endpointName,
+            select: buildQuerySelector(endpointName, definition),
+            initiate: buildInitiateQuery(endpointName, definition)
+          }, buildMatchThunkActions(queryThunk, endpointName));
+        }
+        if (isMutationDefinition(definition)) {
+          safeAssign(endpoint, {
+            name: endpointName,
+            select: buildMutationSelector(),
+            initiate: buildInitiateMutation(endpointName)
+          }, buildMatchThunkActions(mutationThunk, endpointName));
+        }
+        if (isInfiniteQueryDefinition(definition)) {
+          safeAssign(endpoint, {
+            name: endpointName,
+            select: buildInfiniteQuerySelector(endpointName, definition),
+            initiate: buildInitiateInfiniteQuery(endpointName, definition)
+          }, buildMatchThunkActions(queryThunk, endpointName));
+        }
+      }
+    };
+  }
+});
+
+// src/query/core/index.ts
+var createApi = /* @__PURE__ */ buildCreateApi(coreModule());
+export {
+  NamedSchemaError,
+  QueryStatus,
+  _NEVER,
+  buildCreateApi,
+  copyWithStructuralSharing,
+  coreModule,
+  coreModuleName,
+  createApi,
+  defaultSerializeQueryArgs,
+  fakeBaseQuery,
+  fetchBaseQuery,
+  retry,
+  setupListeners,
+  skipToken
+};
+//# sourceMappingURL=rtk-query.modern.mjs.map
Index: node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.mjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/query/core/apiState.ts","../../src/query/core/rtkImports.ts","../../src/query/utils/copyWithStructuralSharing.ts","../../src/query/utils/countObjectKeys.ts","../../src/query/utils/flatten.ts","../../src/query/utils/isAbsoluteUrl.ts","../../src/query/utils/isDocumentVisible.ts","../../src/query/utils/isNotNullish.ts","../../src/query/utils/isOnline.ts","../../src/query/utils/joinUrls.ts","../../src/query/utils/getOrInsert.ts","../../src/query/fetchBaseQuery.ts","../../src/query/HandledError.ts","../../src/query/retry.ts","../../src/query/core/setupListeners.ts","../../src/query/endpointDefinitions.ts","../../src/query/core/buildThunks.ts","../../src/query/core/buildInitiate.ts","../../src/tsHelpers.ts","../../src/query/standardSchema.ts","../../src/query/core/buildSlice.ts","../../src/query/core/buildSelectors.ts","../../src/query/createApi.ts","../../src/query/defaultSerializeQueryArgs.ts","../../src/query/fakeBaseQuery.ts","../../src/query/core/module.ts","../../src/query/tsHelpers.ts","../../src/query/core/buildMiddleware/batchActions.ts","../../src/query/core/buildMiddleware/cacheCollection.ts","../../src/query/core/buildMiddleware/cacheLifecycle.ts","../../src/query/core/buildMiddleware/devMiddleware.ts","../../src/query/core/buildMiddleware/invalidationByTags.ts","../../src/query/core/buildMiddleware/polling.ts","../../src/query/core/buildMiddleware/queryLifecycle.ts","../../src/query/core/buildMiddleware/windowEventHandling.ts","../../src/query/core/buildMiddleware/index.ts","../../src/query/core/index.ts"],"sourcesContent":["import type { SerializedError } from '@reduxjs/toolkit';\nimport type { BaseQueryError } from '../baseQueryTypes';\nimport type { BaseEndpointDefinition, EndpointDefinitions, FullTagDescription, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFromAnyQuery, QueryDefinition, ResultTypeFrom } from '../endpointDefinitions';\nimport type { Id, WithRequiredProp } from '../tsHelpers';\nexport type QueryCacheKey = string & {\n  _type: 'queryCacheKey';\n};\nexport type QuerySubstateIdentifier = {\n  queryCacheKey: QueryCacheKey;\n};\nexport type MutationSubstateIdentifier = {\n  requestId: string;\n  fixedCacheKey?: string;\n} | {\n  requestId?: string;\n  fixedCacheKey: string;\n};\nexport type RefetchConfigOptions = {\n  refetchOnMountOrArgChange: boolean | number;\n  refetchOnReconnect: boolean;\n  refetchOnFocus: boolean;\n};\nexport type InfiniteQueryConfigOptions<DataType, PageParam, QueryArg> = {\n  /**\n   * The initial page parameter to use for the first page fetch.\n   */\n  initialPageParam: PageParam;\n  /**\n   * This function is required to automatically get the next cursor for infinite queries.\n   * The result will also be used to determine the value of `hasNextPage`.\n   */\n  getNextPageParam: (lastPage: DataType, allPages: Array<DataType>, lastPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * This function can be set to automatically get the previous cursor for infinite queries.\n   * The result will also be used to determine the value of `hasPreviousPage`.\n   */\n  getPreviousPageParam?: (firstPage: DataType, allPages: Array<DataType>, firstPageParam: PageParam, allPageParams: Array<PageParam>, queryArg: QueryArg) => PageParam | undefined | null;\n  /**\n   * If specified, only keep this many pages in cache at once.\n   * If additional pages are fetched, older pages in the other\n   * direction will be dropped from the cache.\n   */\n  maxPages?: number;\n};\nexport type InfiniteData<DataType, PageParam> = {\n  pages: Array<DataType>;\n  pageParams: Array<PageParam>;\n};\n\n/**\n * Strings describing the query state at any given time.\n */\nexport enum QueryStatus {\n  uninitialized = 'uninitialized',\n  pending = 'pending',\n  fulfilled = 'fulfilled',\n  rejected = 'rejected',\n}\nexport type RequestStatusFlags = {\n  status: QueryStatus.uninitialized;\n  isUninitialized: true;\n  isLoading: false;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.pending;\n  isUninitialized: false;\n  isLoading: true;\n  isSuccess: false;\n  isError: false;\n} | {\n  status: QueryStatus.fulfilled;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: true;\n  isError: false;\n} | {\n  status: QueryStatus.rejected;\n  isUninitialized: false;\n  isLoading: false;\n  isSuccess: false;\n  isError: true;\n};\nexport function getRequestStatusFlags(status: QueryStatus): RequestStatusFlags {\n  return {\n    status,\n    isUninitialized: status === QueryStatus.uninitialized,\n    isLoading: status === QueryStatus.pending,\n    isSuccess: status === QueryStatus.fulfilled,\n    isError: status === QueryStatus.rejected\n  } as any;\n}\n\n/**\n * @public\n */\nexport type SubscriptionOptions = {\n  /**\n   * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).\n   */\n  pollingInterval?: number;\n  /**\n   *  Defaults to 'false'. This setting allows you to control whether RTK Query will continue polling if the window is not focused.\n   *\n   *  If pollingInterval is not set or set to 0, this **will not be evaluated** until pollingInterval is greater than 0.\n   *\n   *  Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  skipPollingIfUnfocused?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n};\nexport type Subscribers = {\n  [requestId: string]: SubscriptionOptions;\n};\nexport type QueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any> ? K : never }[keyof Definitions];\nexport type InfiniteQueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? K : never }[keyof Definitions];\nexport type MutationKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends MutationDefinition<any, any, any, any> ? K : never }[keyof Definitions];\ntype BaseQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = {\n  /**\n   * The argument originally passed into the hook or `initiate` action call\n   */\n  originalArgs: QueryArgFromAnyQuery<D>;\n  /**\n   * A unique ID associated with the request\n   */\n  requestId: string;\n  /**\n   * The received data from the query\n   */\n  data?: DataType;\n  /**\n   * The received error if applicable\n   */\n  error?: SerializedError | (D extends QueryDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  /**\n   * The name of the endpoint associated with the query\n   */\n  endpointName: string;\n  /**\n   * Time that the latest query started\n   */\n  startedTimeStamp: number;\n  /**\n   * Time that the latest query was fulfilled\n   */\n  fulfilledTimeStamp?: number;\n};\nexport type QuerySubState<D extends BaseEndpointDefinition<any, any, any, any>, DataType = ResultTypeFrom<D>> = Id<({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'data' | 'fulfilledTimeStamp'> & {\n  error: undefined;\n}) | ({\n  status: QueryStatus.pending;\n} & BaseQuerySubState<D, DataType>) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'error'>) | {\n  status: QueryStatus.uninitialized;\n  originalArgs?: undefined;\n  data?: undefined;\n  error?: undefined;\n  requestId?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n}>;\nexport type InfiniteQueryDirection = 'forward' | 'backward';\nexport type InfiniteQuerySubState<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any> ? QuerySubState<D, InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>> & {\n  direction?: InfiniteQueryDirection;\n} : never;\ntype BaseMutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = {\n  requestId: string;\n  data?: ResultTypeFrom<D>;\n  error?: SerializedError | (D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n  endpointName: string;\n  startedTimeStamp: number;\n  fulfilledTimeStamp?: number;\n};\nexport type MutationSubState<D extends BaseEndpointDefinition<any, any, any, any>> = (({\n  status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseMutationSubState<D>, 'data' | 'fulfilledTimeStamp'>) & {\n  error: undefined;\n}) | (({\n  status: QueryStatus.pending;\n} & BaseMutationSubState<D>) & {\n  data?: undefined;\n}) | ({\n  status: QueryStatus.rejected;\n} & WithRequiredProp<BaseMutationSubState<D>, 'error'>) | {\n  requestId?: undefined;\n  status: QueryStatus.uninitialized;\n  data?: undefined;\n  error?: undefined;\n  endpointName?: string;\n  startedTimeStamp?: undefined;\n  fulfilledTimeStamp?: undefined;\n};\nexport type CombinedState<D extends EndpointDefinitions, E extends string, ReducerPath extends string> = {\n  queries: QueryState<D>;\n  mutations: MutationState<D>;\n  provided: InvalidationState<E>;\n  subscriptions: SubscriptionState;\n  config: ConfigState<ReducerPath>;\n};\nexport type InvalidationState<TagTypes extends string> = {\n  tags: { [_ in TagTypes]: {\n    [id: string]: Array<QueryCacheKey>;\n    [id: number]: Array<QueryCacheKey>;\n  } };\n  keys: Record<QueryCacheKey, Array<FullTagDescription<any>>>;\n};\nexport type QueryState<D extends EndpointDefinitions> = {\n  [queryCacheKey: string]: QuerySubState<D[string]> | InfiniteQuerySubState<D[string]> | undefined;\n};\nexport type SubscriptionState = {\n  [queryCacheKey: string]: Subscribers | undefined;\n};\nexport type ConfigState<ReducerPath> = RefetchConfigOptions & {\n  reducerPath: ReducerPath;\n  online: boolean;\n  focused: boolean;\n  middlewareRegistered: boolean | 'conflict';\n} & ModifiableConfigState;\nexport type ModifiableConfigState = {\n  keepUnusedDataFor: number;\n  invalidationBehavior: 'delayed' | 'immediately';\n} & RefetchConfigOptions;\nexport type MutationState<D extends EndpointDefinitions> = {\n  [requestId: string]: MutationSubState<D[string]> | undefined;\n};\nexport type RootState<Definitions extends EndpointDefinitions, TagTypes extends string, ReducerPath extends string> = { [P in ReducerPath]: CombinedState<Definitions, TagTypes, P> };","// This file exists to consolidate all of the imports from the `@reduxjs/toolkit` package.\n// ESBuild does not de-duplicate imports, so this file is used to ensure that each method\n// imported is only listed once, and there's only one mention of the `@reduxjs/toolkit` package.\n\nexport { createAction, createSlice, createSelector, createAsyncThunk, combineReducers, createNextState, isAnyOf, isAllOf, isAction, isPending, isRejected, isFulfilled, isRejectedWithValue, isAsyncThunkAction, prepareAutoBatched, SHOULD_AUTOBATCH, isPlainObject, nanoid } from '@reduxjs/toolkit';","import { isPlainObject as _iPO } from '../core/rtkImports';\n\n// remove type guard\nconst isPlainObject: (_: any) => boolean = _iPO;\nexport function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T;\nexport function copyWithStructuralSharing(oldObj: any, newObj: any): any {\n  if (oldObj === newObj || !(isPlainObject(oldObj) && isPlainObject(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {\n    return newObj;\n  }\n  const newKeys = Object.keys(newObj);\n  const oldKeys = Object.keys(oldObj);\n  let isSameObject = newKeys.length === oldKeys.length;\n  const mergeObj: any = Array.isArray(newObj) ? [] : {};\n  for (const key of newKeys) {\n    mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);\n    if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];\n  }\n  return isSameObject ? oldObj : mergeObj;\n}","// Fast method for counting an object's keys\n// without resorting to `Object.keys(obj).length\n// Will this make a big difference in perf? Probably not\n// But we can save a few allocations.\n\nexport function countObjectKeys(obj: Record<any, any>) {\n  let count = 0;\n  for (const _key in obj) {\n    count++;\n  }\n  return count;\n}","/**\r\n * Alternative to `Array.flat(1)`\r\n * @param arr An array like [1,2,3,[1,2]]\r\n * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\r\n */\nexport const flatten = (arr: readonly any[]) => [].concat(...arr);","/**\r\n * If either :// or // is present consider it to be an absolute url\r\n *\r\n * @param url string\r\n */\n\nexport function isAbsoluteUrl(url: string) {\n  return new RegExp(`(^|:)//`).test(url);\n}","/**\r\n * Assumes true for a non-browser env, otherwise makes a best effort\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState\r\n */\nexport function isDocumentVisible(): boolean {\n  // `document` may not exist in non-browser envs (like RN)\n  if (typeof document === 'undefined') {\n    return true;\n  }\n  // Match true for visible, prerender, undefined\n  return document.visibilityState !== 'hidden';\n}","export function isNotNullish<T>(v: T | null | undefined): v is T {\n  return v != null;\n}","/**\n * Assumes a browser is online if `undefined`, otherwise makes a best effort\n * @link https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine\n */\nexport function isOnline() {\n  // We set the default config value in the store, so we'd need to check for this in a SSR env\n  return typeof navigator === 'undefined' ? true : navigator.onLine === undefined ? true : navigator.onLine;\n}","import { isAbsoluteUrl } from './isAbsoluteUrl';\nconst withoutTrailingSlash = (url: string) => url.replace(/\\/$/, '');\nconst withoutLeadingSlash = (url: string) => url.replace(/^\\//, '');\nexport function joinUrls(base: string | undefined, url: string | undefined): string {\n  if (!base) {\n    return url!;\n  }\n  if (!url) {\n    return base;\n  }\n  if (isAbsoluteUrl(url)) {\n    return url;\n  }\n  const delimiter = base.endsWith('/') || !url.startsWith('?') ? '/' : '';\n  base = withoutTrailingSlash(base);\n  url = withoutLeadingSlash(url);\n  return `${base}${delimiter}${url}`;\n}","export function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}","import { joinUrls } from './utils';\nimport { isPlainObject } from './core/rtkImports';\nimport type { BaseQueryApi, BaseQueryFn } from './baseQueryTypes';\nimport type { MaybePromise, Override } from './tsHelpers';\nexport type ResponseHandler = 'content-type' | 'json' | 'text' | ((response: Response) => Promise<any>);\ntype CustomRequestInit = Override<RequestInit, {\n  headers?: Headers | string[][] | Record<string, string | undefined> | undefined;\n}>;\nexport interface FetchArgs extends CustomRequestInit {\n  url: string;\n  params?: Record<string, any>;\n  body?: any;\n  responseHandler?: ResponseHandler;\n  validateStatus?: (response: Response, body: any) => boolean;\n  /**\n   * A number in milliseconds that represents that maximum time a request can take before timing out.\n   */\n  timeout?: number;\n}\n\n/**\n * A mini-wrapper that passes arguments straight through to\n * {@link [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)}.\n * Avoids storing `fetch` in a closure, in order to permit mocking/monkey-patching.\n */\nconst defaultFetchFn: typeof fetch = (...args) => fetch(...args);\nconst defaultValidateStatus = (response: Response) => response.status >= 200 && response.status <= 299;\nconst defaultIsJsonContentType = (headers: Headers) => /*applicat*//ion\\/(vnd\\.api\\+)?json/.test(headers.get('content-type') || '');\nexport type FetchBaseQueryError = {\n  /**\n   * * `number`:\n   *   HTTP status code\n   */\n  status: number;\n  data: unknown;\n} | {\n  /**\n   * * `\"FETCH_ERROR\"`:\n   *   An error that occurred during execution of `fetch` or the `fetchFn` callback option\n   **/\n  status: 'FETCH_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"PARSING_ERROR\"`:\n   *   An error happened during parsing.\n   *   Most likely a non-JSON-response was returned with the default `responseHandler` \"JSON\",\n   *   or an error occurred while executing a custom `responseHandler`.\n   **/\n  status: 'PARSING_ERROR';\n  originalStatus: number;\n  data: string;\n  error: string;\n} | {\n  /**\n   * * `\"TIMEOUT_ERROR\"`:\n   *   Request timed out\n   **/\n  status: 'TIMEOUT_ERROR';\n  data?: undefined;\n  error: string;\n} | {\n  /**\n   * * `\"CUSTOM_ERROR\"`:\n   *   A custom error type that you can return from your `queryFn` where another error might not make sense.\n   **/\n  status: 'CUSTOM_ERROR';\n  data?: unknown;\n  error: string;\n};\nfunction stripUndefined(obj: any) {\n  if (!isPlainObject(obj)) {\n    return obj;\n  }\n  const copy: Record<string, any> = {\n    ...obj\n  };\n  for (const [k, v] of Object.entries(copy)) {\n    if (v === undefined) delete copy[k];\n  }\n  return copy;\n}\nexport type FetchBaseQueryArgs = {\n  baseUrl?: string;\n  prepareHeaders?: (headers: Headers, api: Pick<BaseQueryApi, 'getState' | 'extra' | 'endpoint' | 'type' | 'forced'> & {\n    arg: string | FetchArgs;\n    extraOptions: unknown;\n  }) => MaybePromise<Headers | void>;\n  fetchFn?: (input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>;\n  paramsSerializer?: (params: Record<string, any>) => string;\n  /**\n   * By default, we only check for 'application/json' and 'application/vnd.api+json' as the content-types for json. If you need to support another format, you can pass\n   * in a predicate function for your given api to get the same automatic stringifying behavior\n   * @example\n   * ```ts\n   * const isJsonContentType = (headers: Headers) => [\"application/vnd.api+json\", \"application/json\", \"application/vnd.hal+json\"].includes(headers.get(\"content-type\")?.trim());\n   * ```\n   */\n  isJsonContentType?: (headers: Headers) => boolean;\n  /**\n   * Defaults to `application/json`;\n   */\n  jsonContentType?: string;\n\n  /**\n   * Custom replacer function used when calling `JSON.stringify()`;\n   */\n  jsonReplacer?: (this: any, key: string, value: any) => any;\n} & RequestInit & Pick<FetchArgs, 'responseHandler' | 'validateStatus' | 'timeout'>;\nexport type FetchBaseQueryMeta = {\n  request: Request;\n  response?: Response;\n};\n\n/**\n * This is a very small wrapper around fetch that aims to simplify requests.\n *\n * @example\n * ```ts\n * const baseQuery = fetchBaseQuery({\n *   baseUrl: 'https://api.your-really-great-app.com/v1/',\n *   prepareHeaders: (headers, { getState }) => {\n *     const token = (getState() as RootState).auth.token;\n *     // If we have a token set in state, let's assume that we should be passing it.\n *     if (token) {\n *       headers.set('authorization', `Bearer ${token}`);\n *     }\n *     return headers;\n *   },\n * })\n * ```\n *\n * @param {string} baseUrl\n * The base URL for an API service.\n * Typically in the format of https://example.com/\n *\n * @param {(headers: Headers, api: { getState: () => unknown; arg: string | FetchArgs; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders\n * An optional function that can be used to inject headers on requests.\n * Provides a Headers object, most of the `BaseQueryApi` (`dispatch` is not available), and the arg passed into the query function.\n * Useful for setting authentication or headers that need to be set conditionally.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers\n *\n * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>} fetchFn\n * Accepts a custom `fetch` function if you do not want to use the default on the window.\n * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`\n *\n * @param {(params: Record<string, unknown>) => string} paramsSerializer\n * An optional function that can be used to stringify querystring parameters.\n *\n * @param {(headers: Headers) => boolean} isJsonContentType\n * An optional predicate function to determine if `JSON.stringify()` should be called on the `body` arg of `FetchArgs`\n *\n * @param {string} jsonContentType Used when automatically setting the content-type header for a request with a jsonifiable body that does not have an explicit content-type header. Defaults to `application/json`.\n *\n * @param {(this: any, key: string, value: any) => any} jsonReplacer Custom replacer function used when calling `JSON.stringify()`.\n *\n * @param {number} timeout\n * A number in milliseconds that represents the maximum time a request can take before timing out.\n */\n\nexport function fetchBaseQuery({\n  baseUrl,\n  prepareHeaders = x => x,\n  fetchFn = defaultFetchFn,\n  paramsSerializer,\n  isJsonContentType = defaultIsJsonContentType,\n  jsonContentType = 'application/json',\n  jsonReplacer,\n  timeout: defaultTimeout,\n  responseHandler: globalResponseHandler,\n  validateStatus: globalValidateStatus,\n  ...baseFetchOptions\n}: FetchBaseQueryArgs = {}): BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta> {\n  if (typeof fetch === 'undefined' && fetchFn === defaultFetchFn) {\n    console.warn('Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.');\n  }\n  return async (arg, api, extraOptions) => {\n    const {\n      getState,\n      extra,\n      endpoint,\n      forced,\n      type\n    } = api;\n    let meta: FetchBaseQueryMeta | undefined;\n    let {\n      url,\n      headers = new Headers(baseFetchOptions.headers),\n      params = undefined,\n      responseHandler = globalResponseHandler ?? 'json' as const,\n      validateStatus = globalValidateStatus ?? defaultValidateStatus,\n      timeout = defaultTimeout,\n      ...rest\n    } = typeof arg == 'string' ? {\n      url: arg\n    } : arg;\n    let abortController: AbortController | undefined,\n      signal = api.signal;\n    if (timeout) {\n      abortController = new AbortController();\n      api.signal.addEventListener('abort', abortController.abort);\n      signal = abortController.signal;\n    }\n    let config: RequestInit = {\n      ...baseFetchOptions,\n      signal,\n      ...rest\n    };\n    headers = new Headers(stripUndefined(headers));\n    config.headers = (await prepareHeaders(headers, {\n      getState,\n      arg,\n      extra,\n      endpoint,\n      forced,\n      type,\n      extraOptions\n    })) || headers;\n\n    // Only set the content-type to json if appropriate. Will not be true for FormData, ArrayBuffer, Blob, etc.\n    const isJsonifiable = (body: any) => typeof body === 'object' && (isPlainObject(body) || Array.isArray(body) || typeof body.toJSON === 'function');\n    if (!config.headers.has('content-type') && isJsonifiable(config.body)) {\n      config.headers.set('content-type', jsonContentType);\n    }\n    if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {\n      config.body = JSON.stringify(config.body, jsonReplacer);\n    }\n    if (params) {\n      const divider = ~url.indexOf('?') ? '&' : '?';\n      const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));\n      url += divider + query;\n    }\n    url = joinUrls(baseUrl, url);\n    const request = new Request(url, config);\n    const requestClone = new Request(url, config);\n    meta = {\n      request: requestClone\n    };\n    let response,\n      timedOut = false,\n      timeoutId = abortController && setTimeout(() => {\n        timedOut = true;\n        abortController!.abort();\n      }, timeout);\n    try {\n      response = await fetchFn(request);\n    } catch (e) {\n      return {\n        error: {\n          status: timedOut ? 'TIMEOUT_ERROR' : 'FETCH_ERROR',\n          error: String(e)\n        },\n        meta\n      };\n    } finally {\n      if (timeoutId) clearTimeout(timeoutId);\n      abortController?.signal.removeEventListener('abort', abortController.abort);\n    }\n    const responseClone = response.clone();\n    meta.response = responseClone;\n    let resultData: any;\n    let responseText: string = '';\n    try {\n      let handleResponseError;\n      await Promise.all([handleResponse(response, responseHandler).then(r => resultData = r, e => handleResponseError = e),\n      // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182\n      // we *have* to \"use up\" both streams at the same time or they will stop running in node-fetch scenarios\n      responseClone.text().then(r => responseText = r, () => {})]);\n      if (handleResponseError) throw handleResponseError;\n    } catch (e) {\n      return {\n        error: {\n          status: 'PARSING_ERROR',\n          originalStatus: response.status,\n          data: responseText,\n          error: String(e)\n        },\n        meta\n      };\n    }\n    return validateStatus(response, resultData) ? {\n      data: resultData,\n      meta\n    } : {\n      error: {\n        status: response.status,\n        data: resultData\n      },\n      meta\n    };\n  };\n  async function handleResponse(response: Response, responseHandler: ResponseHandler) {\n    if (typeof responseHandler === 'function') {\n      return responseHandler(response);\n    }\n    if (responseHandler === 'content-type') {\n      responseHandler = isJsonContentType(response.headers) ? 'json' : 'text';\n    }\n    if (responseHandler === 'json') {\n      const text = await response.text();\n      return text.length ? JSON.parse(text) : null;\n    }\n    return response.text();\n  }\n}","export class HandledError {\n  constructor(public readonly value: any, public readonly meta: any = undefined) {}\n}","import type { BaseQueryApi, BaseQueryArg, BaseQueryEnhancer, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta } from './baseQueryTypes';\nimport type { FetchBaseQueryError } from './fetchBaseQuery';\nimport { HandledError } from './HandledError';\n\n/**\n * Exponential backoff based on the attempt number.\n *\n * @remarks\n * 1. 600ms * random(0.4, 1.4)\n * 2. 1200ms * random(0.4, 1.4)\n * 3. 2400ms * random(0.4, 1.4)\n * 4. 4800ms * random(0.4, 1.4)\n * 5. 9600ms * random(0.4, 1.4)\n *\n * @param attempt - Current attempt\n * @param maxRetries - Maximum number of retries\n */\nasync function defaultBackoff(attempt: number = 0, maxRetries: number = 5) {\n  const attempts = Math.min(attempt, maxRetries);\n  const timeout = ~~((Math.random() + 0.4) * (300 << attempts)); // Force a positive int in the case we make this an option\n  await new Promise(resolve => setTimeout((res: any) => resolve(res), timeout));\n}\ntype RetryConditionFunction = (error: BaseQueryError<BaseQueryFn>, args: BaseQueryArg<BaseQueryFn>, extraArgs: {\n  attempt: number;\n  baseQueryApi: BaseQueryApi;\n  extraOptions: BaseQueryExtraOptions<BaseQueryFn> & RetryOptions;\n}) => boolean;\nexport type RetryOptions = {\n  /**\n   * Function used to determine delay between retries\n   */\n  backoff?: (attempt: number, maxRetries: number) => Promise<void>;\n} & ({\n  /**\n   * How many times the query will be retried (default: 5)\n   */\n  maxRetries?: number;\n  retryCondition?: undefined;\n} | {\n  /**\n   * Callback to determine if a retry should be attempted.\n   * Return `true` for another retry and `false` to quit trying prematurely.\n   */\n  retryCondition?: RetryConditionFunction;\n  maxRetries?: undefined;\n});\nfunction fail<BaseQuery extends BaseQueryFn = BaseQueryFn>(error: BaseQueryError<BaseQuery>, meta?: BaseQueryMeta<BaseQuery>): never {\n  throw Object.assign(new HandledError({\n    error,\n    meta\n  }), {\n    throwImmediately: true\n  });\n}\nconst EMPTY_OPTIONS = {};\nconst retryWithBackoff: BaseQueryEnhancer<unknown, RetryOptions, RetryOptions | void> = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {\n  // We need to figure out `maxRetries` before we define `defaultRetryCondition.\n  // This is probably goofy, but ought to work.\n  // Put our defaults in one array, filter out undefineds, grab the last value.\n  const possibleMaxRetries: number[] = [5, (defaultOptions as any || EMPTY_OPTIONS).maxRetries, (extraOptions as any || EMPTY_OPTIONS).maxRetries].filter(x => x !== undefined);\n  const [maxRetries] = possibleMaxRetries.slice(-1);\n  const defaultRetryCondition: RetryConditionFunction = (_, __, {\n    attempt\n  }) => attempt <= maxRetries;\n  const options: {\n    maxRetries: number;\n    backoff: typeof defaultBackoff;\n    retryCondition: typeof defaultRetryCondition;\n  } = {\n    maxRetries,\n    backoff: defaultBackoff,\n    retryCondition: defaultRetryCondition,\n    ...defaultOptions,\n    ...extraOptions\n  };\n  let retry = 0;\n  while (true) {\n    try {\n      const result = await baseQuery(args, api, extraOptions);\n      // baseQueries _should_ return an error property, so we should check for that and throw it to continue retrying\n      if (result.error) {\n        throw new HandledError(result);\n      }\n      return result;\n    } catch (e: any) {\n      retry++;\n      if (e.throwImmediately) {\n        if (e instanceof HandledError) {\n          return e.value;\n        }\n\n        // We don't know what this is, so we have to rethrow it\n        throw e;\n      }\n      if (e instanceof HandledError && !options.retryCondition(e.value.error as FetchBaseQueryError, args, {\n        attempt: retry,\n        baseQueryApi: api,\n        extraOptions\n      })) {\n        return e.value;\n      }\n      await options.backoff(retry, options.maxRetries);\n    }\n  }\n};\n\n/**\n * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"Retry every request 5 times by default\"\n * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'\n * interface Post {\n *   id: number\n *   name: string\n * }\n * type PostsResponse = Post[]\n *\n * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.\n * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });\n * export const api = createApi({\n *   baseQuery: staggeredBaseQuery,\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsResponse, void>({\n *       query: () => ({ url: 'posts' }),\n *     }),\n *     getPost: build.query<PostsResponse, string>({\n *       query: (id) => ({ url: `post/${id}` }),\n *       extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint\n *     }),\n *   }),\n * });\n *\n * export const { useGetPostsQuery, useGetPostQuery } = api;\n * ```\n */\nexport const retry = /* @__PURE__ */Object.assign(retryWithBackoff, {\n  fail\n});","import type { ThunkDispatch, ActionCreatorWithoutPayload // Workaround for API-Extractor\n} from '@reduxjs/toolkit';\nimport { createAction } from './rtkImports';\nexport const onFocus = /* @__PURE__ */createAction('__rtkq/focused');\nexport const onFocusLost = /* @__PURE__ */createAction('__rtkq/unfocused');\nexport const onOnline = /* @__PURE__ */createAction('__rtkq/online');\nexport const onOffline = /* @__PURE__ */createAction('__rtkq/offline');\nlet initialized = false;\n\n/**\n * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.\n * It requires the dispatch method from your store.\n * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,\n * but you have the option of providing a callback for more granular control.\n *\n * @example\n * ```ts\n * setupListeners(store.dispatch)\n * ```\n *\n * @param dispatch - The dispatch method from your store\n * @param customHandler - An optional callback for more granular control over listener behavior\n * @returns Return value of the handler.\n * The default handler returns an `unsubscribe` method that can be called to remove the listeners.\n */\nexport function setupListeners(dispatch: ThunkDispatch<any, any, any>, customHandler?: (dispatch: ThunkDispatch<any, any, any>, actions: {\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n}) => () => void) {\n  function defaultHandler() {\n    const handleFocus = () => dispatch(onFocus());\n    const handleFocusLost = () => dispatch(onFocusLost());\n    const handleOnline = () => dispatch(onOnline());\n    const handleOffline = () => dispatch(onOffline());\n    const handleVisibilityChange = () => {\n      if (window.document.visibilityState === 'visible') {\n        handleFocus();\n      } else {\n        handleFocusLost();\n      }\n    };\n    if (!initialized) {\n      if (typeof window !== 'undefined' && window.addEventListener) {\n        // Handle focus events\n        window.addEventListener('visibilitychange', handleVisibilityChange, false);\n        window.addEventListener('focus', handleFocus, false);\n\n        // Handle connection events\n        window.addEventListener('online', handleOnline, false);\n        window.addEventListener('offline', handleOffline, false);\n        initialized = true;\n      }\n    }\n    const unsubscribe = () => {\n      window.removeEventListener('focus', handleFocus);\n      window.removeEventListener('visibilitychange', handleVisibilityChange);\n      window.removeEventListener('online', handleOnline);\n      window.removeEventListener('offline', handleOffline);\n      initialized = false;\n    };\n    return unsubscribe;\n  }\n  return customHandler ? customHandler(dispatch, {\n    onFocus,\n    onFocusLost,\n    onOffline,\n    onOnline\n  }) : defaultHandler();\n}","import type { Api } from '@reduxjs/toolkit/query';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nimport type { NamedSchemaError } from './standardSchema';\nconst rawResultType = /* @__PURE__ */Symbol();\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\nexport interface SchemaFailureInfo {\n  endpoint: string;\n  arg: any;\n  type: 'query' | 'mutation';\n  queryCacheKey?: string;\n}\nexport type SchemaFailureHandler = (error: NamedSchemaError, info: SchemaFailureInfo) => void;\nexport type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (error: NamedSchemaError, info: SchemaFailureInfo) => BaseQueryError<BaseQuery>;\nexport type EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery>> = {\n  /**\n   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"query example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       // highlight-start\n   *       query: () => 'posts',\n   *       // highlight-end\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *      // highlight-start\n   *      query: (body) => ({\n   *        url: `posts`,\n   *        method: 'POST',\n   *        body,\n   *      }),\n   *      // highlight-end\n   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n   *    }),\n   *   })\n   * })\n   * ```\n   */\n  query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n  queryFn?: never;\n  /**\n   * A function to manipulate the data returned by a query or mutation.\n   */\n  transformResponse?(baseQueryReturnValue: RawResultType, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n  /**\n   * A function to manipulate the data returned by a failed query or mutation.\n   */\n  transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n\n  /**\n   * A schema for the result *before* it's passed to `transformResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPostName: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawResponseSchema: postSchema,\n   *       transformResponse: (post) => post.name,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawResponseSchema?: StandardSchemaV1<RawResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import {customBaseQuery, baseQueryErrorSchema} from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       rawErrorResponseSchema: baseQueryErrorSchema,\n   *       transformErrorResponse: (error) => error.data,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n};\nexport type EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  /**\n   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Basic queryFn example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *     }),\n   *     flipCoin: build.query<'heads' | 'tails', void>({\n   *       // highlight-start\n   *       queryFn(arg, queryApi, extraOptions, baseQuery) {\n   *         const randomVal = Math.random()\n   *         if (randomVal < 0.45) {\n   *           return { data: 'heads' }\n   *         }\n   *         if (randomVal < 0.9) {\n   *           return { data: 'tails' }\n   *         }\n   *         return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n   *       }\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n  query?: never;\n  transformResponse?: never;\n  transformErrorResponse?: never;\n  rawResponseSchema?: never;\n  rawErrorResponseSchema?: never;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n  QueryArg: QueryArg;\n  BaseQuery: BaseQuery;\n  ResultType: ResultType;\n};\ninterface CommonEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> {\n  /**\n   * A schema for the arguments to be passed to the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       argSchema: v.object({ id: v.number() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  argSchema?: StandardSchemaV1<QueryArg>;\n\n  /**\n   * A schema for the result (including `transformResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const postSchema = v.object({ id: v.number(), name: v.string() })\n   * type Post = v.InferOutput<typeof postSchema>\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: postSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  responseSchema?: StandardSchemaV1<ResultType>;\n\n  /**\n   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryErrorSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       errorResponseSchema: baseQueryErrorSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>;\n\n  /**\n   * A schema for the `meta` property returned by the `query` or `queryFn`.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   * import { customBaseQuery, baseQueryMetaSchema } from \"./customBaseQuery\"\n   *\n   * const api = createApi({\n   *   baseQuery: customBaseQuery,\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       metaSchema: baseQueryMetaSchema,\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>;\n\n  /**\n   * Defaults to `true`.\n   *\n   * Most apps should leave this setting on. The only time it can be a performance issue\n   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n   * you're unable to paginate it.\n   *\n   * For details of how this works, please see the below. When it is set to `false`,\n   * every request will cause subscribed components to rerender, even when the data has not changed.\n   *\n   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n   */\n  structuralSharing?: boolean;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       onSchemaFailure: (error, info) => {\n   *         console.error(error, info)\n   *       },\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       catchSchemaFailure: (error, info) => ({\n   *         status: \"CUSTOM_ERROR\",\n   *         error: error.schemaName + \" failed validation\",\n   *         data: error.issues,\n   *       }),\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for this endpoint.\n   * Overrides the global setting.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *       skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType, RawResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {\n  /* phantom type */\n  [rawResultType]?: RawResultType;\n  /* phantom type */\n  [resultType]?: ResultType;\n  /* phantom type */\n  [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n  extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n  extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n  query = 'query',\n  mutation = 'mutation',\n  infinitequery = 'infinitequery',\n}\ntype TagDescriptionArray<TagTypes extends string> = ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => TagDescriptionArray<TagTypes>;\nexport type FullTagDescription<TagType> = {\n  type: TagType;\n  id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = TagDescriptionArray<TagTypes> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.query;\n\n  /**\n   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n   * 1.  `['Post']` - equivalent to `2`\n   * 2.  `[{ type: 'Post' }]` - equivalent to `1`\n   * 3.  `[{ type: 'Post', id: 1 }]`\n   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`\n   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"providesTags example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * Can be provided to merge an incoming response value into the current cache data.\n   * If supplied, no automatic structural sharing will be applied - it's up to\n   * you to update the cache appropriately.\n   *\n   * Since RTKQ normally replaces cache entries with the new response, you will usually\n   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n   * an existing cache entry so that it can be updated.\n   *\n   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n   * or return a new value, but _not_ both at once.\n   *\n   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n   * the cache entry will just save the response data directly.\n   *\n   * Useful if you don't want a new request to completely override the current cache value,\n   * maybe because you have manually updated it from another source and don't want those\n   * updates to get lost.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"merge: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n    arg: QueryArg;\n    baseQueryMeta: BaseQueryMeta<BaseQuery>;\n    requestId: string;\n    fulfilledTimeStamp: number;\n  }): ResultType | void;\n\n  /**\n   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n   * This is primarily useful for \"infinite scroll\" / pagination use cases where\n   * RTKQ is keeping a single cache entry that is added to over time, in combination\n   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n   * set to add incoming data to the cache entry each time.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"forceRefresh: pagination\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    listItems: build.query<string[], number>({\n   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,\n   *     // Only have one cache entry because the arg always maps to one string\n   *     serializeQueryArgs: ({ endpointName }) => {\n   *       return endpointName\n   *      },\n   *      // Always merge incoming data to the cache entry\n   *      merge: (currentCache, newItems) => {\n   *        currentCache.push(...newItems)\n   *      },\n   *      // Refetch when the page arg changes\n   *      forceRefetch({ currentArg, previousArg }) {\n   *        return currentArg !== previousArg\n   *      },\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  forceRefetch?(params: {\n    currentArg: QueryArg | undefined;\n    previousArg: QueryArg | undefined;\n    state: RootState<any, any, string>;\n    endpointState?: QuerySubState<any>;\n  }): boolean;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n   * ```\n   */\n  InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n  type: DefinitionType.infinitequery;\n  providesTags?: ResultDescription<TagTypes, InfiniteData<ResultType, PageParam>, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A query should not invalidate tags in the cache.\n   */\n  invalidatesTags?: never;\n\n  /**\n   * Required options to configure the infinite query behavior.\n   * `initialPageParam` and `getNextPageParam` are required, to\n   * ensure the infinite query can properly fetch the next page of data.\n   * `initialPageParam` may be specified when using the\n   * endpoint, to override the default value.\n   * `maxPages` and `getPreviousPageParam` are both optional.\n   * \n   * @example\n   * \n   * ```ts\n   * // codeblock-meta title=\"infiniteQueryOptions example\"\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * \n   * type Pokemon = {\n   *   id: string\n   *   name: string\n   * }\n   * \n   * const pokemonApi = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n   *   endpoints: (build) => ({\n   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n   *       infiniteQueryOptions: {\n   *         initialPageParam: 0,\n   *         maxPages: 3,\n   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n   *           lastPageParam + 1,\n   *         getPreviousPageParam: (\n   *           firstPage,\n   *           allPages,\n   *           firstPageParam,\n   *           allPageParams,\n   *         ) => {\n   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined\n   *         },\n   *       },\n   *       query({pageParam}) {\n   *         return `https://example.com/listItems?page=${pageParam}`\n   *       },\n   *     }),\n   *   }),\n   * })\n   \n   * ```\n   */\n  infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam, QueryArg>;\n\n  /**\n   * Can be provided to return a custom cache key value based on the query arguments.\n   *\n   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n   *\n   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.\n   *\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n   *\n   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * interface MyApiClient {\n   *   fetchPost: (id: string) => Promise<Post>\n   * }\n   *\n   * createApi({\n   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *  endpoints: (build) => ({\n   *    // Example: an endpoint with an API client passed in as an argument,\n   *    // but only the item ID should be used as the cache key\n   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({\n   *      queryFn: async ({ id, client }) => {\n   *        const post = await client.fetchPost(id)\n   *        return { data: post }\n   *      },\n   *      // highlight-start\n   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n   *        const { id } = queryArgs\n   *        // This can return a string, an object, a number, or a boolean.\n   *        // If it returns an object, number or boolean, that value\n   *        // will be serialized automatically via `defaultSerializeQueryArgs`\n   *        return { id } // omit `client` from the cache key\n   *\n   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n   *        // return defaultSerializeQueryArgs({\n   *        //   endpointName,\n   *        //   queryArgs: { id },\n   *        //   endpointDefinition\n   *        // })\n   *        // Or  create and return a string yourself:\n   *        // return `getPost(${id})`\n   *      },\n   *      // highlight-end\n   *    }),\n   *  }),\n   *})\n   * ```\n   */\n  serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType, RawResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n  /**\n   * The endpoint definition type. To be used with some internal generic types.\n   * @example\n   * ```ts\n   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n   * ```\n   */\n  MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n  TagTypes: TagTypes;\n  ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n  type: DefinitionType.mutation;\n\n  /**\n   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n   * Expects the same shapes as `providesTags`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"invalidatesTags example\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   tagTypes: ['Posts'],\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       providesTags: (result) =>\n   *         result\n   *           ? [\n   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n   *               { type: 'Posts', id: 'LIST' },\n   *             ]\n   *           : [{ type: 'Posts', id: 'LIST' }],\n   *     }),\n   *     addPost: build.mutation<Post, Partial<Post>>({\n   *       query(body) {\n   *         return {\n   *           url: `posts`,\n   *           method: 'POST',\n   *           body,\n   *         }\n   *       },\n   *       // highlight-start\n   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n   *       // highlight-end\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n  /**\n   * Not to be used. A mutation should not provide tags to the cache.\n   */\n  providesTags?: never;\n\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is QueryDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is MutationDefinition<any, any, any, any, any, any> {\n  return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {\n  return e.type === DefinitionType.infinitequery;\n}\nexport function isAnyQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any> {\n  return isQueryDefinition(e) || isInfiniteQueryDefinition(e);\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n  /**\n   * An endpoint definition that retrieves data, and may provide tags to the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all query endpoint options\"\n   * const api = createApi({\n   *  baseQuery,\n   *  endpoints: (build) => ({\n   *    getPost: build.query({\n   *      query: (id) => ({ url: `post/${id}` }),\n   *      // Pick out data and prevent nested properties in a hook or selector\n   *      transformResponse: (response) => response.data,\n   *      // Pick out error and prevent nested properties in a hook or selector\n   *      transformErrorResponse: (response) => response.error,\n   *      // `result` is the server response\n   *      providesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n   *    }),\n   *  }),\n   *});\n   *```\n   */\n  query<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n\n  /**\n   * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n   *\n   * @example\n   * ```js\n   * // codeblock-meta title=\"Example of all mutation endpoint options\"\n   * const api = createApi({\n   *   baseQuery,\n   *   endpoints: (build) => ({\n   *     updatePost: build.mutation({\n   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n   *       // Pick out data and prevent nested properties in a hook or selector\n   *       transformResponse: (response) => response.data,\n   *       // Pick out error and prevent nested properties in a hook or selector\n   *       transformErrorResponse: (response) => response.error,\n   *       // `result` is the server response\n   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n   *      // trigger side effects or optimistic updates\n   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n   *      // handle subscriptions etc\n   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n   *     }),\n   *   }),\n   * });\n   * ```\n   */\n  mutation<ResultType, QueryArg, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n  infiniteQuery<ResultType, QueryArg, PageParam, RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath, RawResultType>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n  if (isFunction(description)) {\n    return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n  }\n  if (Array.isArray(description)) {\n    return description.map(expandTagDescription).map(assertTagTypes);\n  }\n  return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n  return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n  return typeof description === 'string' ? {\n    type: description\n  } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any> ? QA : never;\nexport type QueryArgFromAnyQuery<D extends BaseEndpointDefinition<any, any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any, any, any> ? InfiniteQueryArgFrom<D> : D extends QueryDefinition<any, any, any, any, any, any> ? QueryArgFrom<D> : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP, any, any> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any, any, any, any>> = D extends EndpointDefinition<any, any, infer TT, any, any, any, any> ? TT : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n  queryArg: QueryArg;\n  pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };","import type { AsyncThunk, AsyncThunkPayloadCreator, Draft, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Patch } from 'immer';\nimport { isDraftable, produceWithPatches } from 'immer';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, BaseQueryFn, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryCombinedArg, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFrom, QueryDefinition, ResultDescription, ResultTypeFrom, SchemaFailureConverter, SchemaFailureHandler, SchemaFailureInfo } from '../endpointDefinitions';\nimport { calculateProvidedBy, isInfiniteQueryDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { HandledError } from '../HandledError';\nimport type { UnwrapPromise } from '../tsHelpers';\nimport type { RootState, QueryKeys, QuerySubstateIdentifier, InfiniteData, InfiniteQueryConfigOptions, QueryCacheKey, InfiniteQueryDirection, InfiniteQueryKeys } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { InfiniteQueryActionCreatorResult, QueryActionCreatorResult, StartInfiniteQueryActionCreatorOptions, StartQueryActionCreatorOptions } from './buildInitiate';\nimport { forceQueryFnSymbol, isUpsertQuery } from './buildInitiate';\nimport type { AllSelectors } from './buildSelectors';\nimport type { ApiEndpointQuery, PrefetchOptions } from './module';\nimport { createAsyncThunk, isAllOf, isFulfilled, isPending, isRejected, isRejectedWithValue, SHOULD_AUTOBATCH } from './rtkImports';\nimport { parseWithSchema, NamedSchemaError } from '../standardSchema';\nexport type BuildThunksApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = Matchers<QueryThunk, Definition>;\nexport type BuildThunksApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = Matchers<InfiniteQueryThunk<any>, Definition>;\nexport type BuildThunksApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = Matchers<MutationThunk, Definition>;\ntype EndpointThunk<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = Definition extends EndpointDefinition<infer QueryArg, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<ResultType, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<InfiniteData<ResultType, PageParam>, ATArg & {\n  originalArgs: QueryArg;\n}, ATConfig & {\n  rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : never;\nexport type PendingAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['pending']>;\nexport type FulfilledAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['fulfilled']>;\nexport type RejectedAction<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['rejected']>;\nexport type Matcher<M> = (value: any) => value is M;\nexport interface Matchers<Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>, Definition extends EndpointDefinition<any, any, any, any>> {\n  matchPending: Matcher<PendingAction<Thunk, Definition>>;\n  matchFulfilled: Matcher<FulfilledAction<Thunk, Definition>>;\n  matchRejected: Matcher<RejectedAction<Thunk, Definition>>;\n}\nexport type QueryThunkArg = QuerySubstateIdentifier & StartQueryActionCreatorOptions & {\n  type: 'query';\n  originalArgs: unknown;\n  endpointName: string;\n};\nexport type InfiniteQueryThunkArg<D extends InfiniteQueryDefinition<any, any, any, any, any>> = QuerySubstateIdentifier & StartInfiniteQueryActionCreatorOptions<D> & {\n  type: `query`;\n  originalArgs: unknown;\n  endpointName: string;\n  param: unknown;\n  direction?: InfiniteQueryDirection;\n};\ntype MutationThunkArg = {\n  type: 'mutation';\n  originalArgs: unknown;\n  endpointName: string;\n  track?: boolean;\n  fixedCacheKey?: string;\n};\nexport type ThunkResult = unknown;\nexport type ThunkApiMetaConfig = {\n  pendingMeta: {\n    startedTimeStamp: number;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  fulfilledMeta: {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n  rejectedMeta: {\n    baseQueryMeta: unknown;\n    [SHOULD_AUTOBATCH]: true;\n  };\n};\nexport type QueryThunk = AsyncThunk<ThunkResult, QueryThunkArg, ThunkApiMetaConfig>;\nexport type InfiniteQueryThunk<D extends InfiniteQueryDefinition<any, any, any, any, any>> = AsyncThunk<ThunkResult, InfiniteQueryThunkArg<D>, ThunkApiMetaConfig>;\nexport type MutationThunk = AsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig>;\nfunction defaultTransformResponse(baseQueryReturnValue: unknown) {\n  return baseQueryReturnValue;\n}\nexport type MaybeDrafted<T> = T | Draft<T>;\nexport type Recipe<T> = (data: MaybeDrafted<T>) => void | MaybeDrafted<T>;\nexport type UpsertRecipe<T> = (data: MaybeDrafted<T> | undefined) => void | MaybeDrafted<T>;\nexport type PatchQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, patches: readonly Patch[], updateProvided?: boolean) => ThunkAction<void, PartialState, any, UnknownAction>;\nexport type AllQueryKeys<Definitions extends EndpointDefinitions> = QueryKeys<Definitions> | InfiniteQueryKeys<Definitions>;\nexport type QueryArgFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryArgFrom<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryArgFrom<Definitions[EndpointName]> : never;\nexport type DataFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteData<ResultTypeFrom<Definitions[EndpointName]>, PageParamFrom<Definitions[EndpointName]>> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? ResultTypeFrom<Definitions[EndpointName]> : unknown;\nexport type UpsertThunkResult<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryActionCreatorResult<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryActionCreatorResult<Definitions[EndpointName]> : QueryActionCreatorResult<never>;\nexport type UpdateQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, updateRecipe: Recipe<DataFromAnyQueryDefinition<Definitions, EndpointName>>, updateProvided?: boolean) => ThunkAction<PatchCollection, PartialState, any, UnknownAction>;\nexport type UpsertQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, value: DataFromAnyQueryDefinition<Definitions, EndpointName>) => ThunkAction<UpsertThunkResult<Definitions, EndpointName>, PartialState, any, UnknownAction>;\n\n/**\n * An object returned from dispatching a `api.util.updateQueryData` call.\n */\nexport type PatchCollection = {\n  /**\n   * An `immer` Patch describing the cache update.\n   */\n  patches: Patch[];\n  /**\n   * An `immer` Patch to revert the cache update.\n   */\n  inversePatches: Patch[];\n  /**\n   * A function that will undo the cache update.\n   */\n  undo: () => void;\n};\ntype TransformCallback = (baseQueryReturnValue: unknown, meta: unknown, arg: unknown) => any;\nexport const addShouldAutoBatch = <T extends Record<string, any>,>(arg: T = {} as T): T & {\n  [SHOULD_AUTOBATCH]: true;\n} => {\n  return {\n    ...arg,\n    [SHOULD_AUTOBATCH]: true\n  };\n};\nexport function buildThunks<BaseQuery extends BaseQueryFn, ReducerPath extends string, Definitions extends EndpointDefinitions>({\n  reducerPath,\n  baseQuery,\n  context: {\n    endpointDefinitions\n  },\n  serializeQueryArgs,\n  api,\n  assertTagType,\n  selectors,\n  onSchemaFailure,\n  catchSchemaFailure: globalCatchSchemaFailure,\n  skipSchemaValidation: globalSkipSchemaValidation\n}: {\n  baseQuery: BaseQuery;\n  reducerPath: ReducerPath;\n  context: ApiContext<Definitions>;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  api: Api<BaseQuery, Definitions, ReducerPath, any>;\n  assertTagType: AssertTagTypes;\n  selectors: AllSelectors;\n  onSchemaFailure: SchemaFailureHandler | undefined;\n  catchSchemaFailure: SchemaFailureConverter<BaseQuery> | undefined;\n  skipSchemaValidation: boolean | undefined;\n}) {\n  type State = RootState<any, string, ReducerPath>;\n  const patchQueryData: PatchQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {\n    const endpointDefinition = endpointDefinitions[endpointName];\n    const queryCacheKey = serializeQueryArgs({\n      queryArgs: arg,\n      endpointDefinition,\n      endpointName\n    });\n    dispatch(api.internalActions.queryResultPatched({\n      queryCacheKey,\n      patches\n    }));\n    if (!updateProvided) {\n      return;\n    }\n    const newValue = api.endpoints[endpointName].select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, undefined, arg, {}, assertTagType);\n    dispatch(api.internalActions.updateProvidedBy([{\n      queryCacheKey,\n      providedTags\n    }]));\n  };\n  function addToStart<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [item, ...items];\n    return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n  }\n  function addToEnd<T>(items: Array<T>, item: T, max = 0): Array<T> {\n    const newItems = [...items, item];\n    return max && newItems.length > max ? newItems.slice(1) : newItems;\n  }\n  const updateQueryData: UpdateQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {\n    const endpointDefinition = api.endpoints[endpointName];\n    const currentState = endpointDefinition.select(arg)(\n    // Work around TS 4.1 mismatch\n    getState() as RootState<any, any, any>);\n    const ret: PatchCollection = {\n      patches: [],\n      inversePatches: [],\n      undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))\n    };\n    if (currentState.status === QueryStatus.uninitialized) {\n      return ret;\n    }\n    let newValue;\n    if ('data' in currentState) {\n      if (isDraftable(currentState.data)) {\n        const [value, patches, inversePatches] = produceWithPatches(currentState.data, updateRecipe);\n        ret.patches.push(...patches);\n        ret.inversePatches.push(...inversePatches);\n        newValue = value;\n      } else {\n        newValue = updateRecipe(currentState.data);\n        ret.patches.push({\n          op: 'replace',\n          path: [],\n          value: newValue\n        });\n        ret.inversePatches.push({\n          op: 'replace',\n          path: [],\n          value: currentState.data\n        });\n      }\n    }\n    if (ret.patches.length === 0) {\n      return ret;\n    }\n    dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));\n    return ret;\n  };\n  const upsertQueryData: UpsertQueryDataThunk<Definitions, State> = (endpointName, arg, value) => dispatch => {\n    type EndpointName = typeof endpointName;\n    const res = dispatch((api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>).initiate(arg, {\n      subscribe: false,\n      forceRefetch: true,\n      [forceQueryFnSymbol]: () => ({\n        data: value\n      })\n    })) as UpsertThunkResult<Definitions, EndpointName>;\n    return res;\n  };\n  const getTransformCallbackForEndpoint = (endpointDefinition: EndpointDefinition<any, any, any, any>, transformFieldName: 'transformResponse' | 'transformErrorResponse'): TransformCallback => {\n    return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName]! as TransformCallback : defaultTransformResponse;\n  };\n\n  // The generic async payload function for all of our thunks\n  const executeEndpoint: AsyncThunkPayloadCreator<ThunkResult, QueryThunkArg | MutationThunkArg | InfiniteQueryThunkArg<any>, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }> = async (arg, {\n    signal,\n    abort,\n    rejectWithValue,\n    fulfillWithValue,\n    dispatch,\n    getState,\n    extra\n  }) => {\n    const endpointDefinition = endpointDefinitions[arg.endpointName];\n    const {\n      metaSchema,\n      skipSchemaValidation = globalSkipSchemaValidation\n    } = endpointDefinition;\n    try {\n      let transformResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformResponse');\n      const baseQueryApi = {\n        signal,\n        abort,\n        dispatch,\n        getState,\n        extra,\n        endpoint: arg.endpointName,\n        type: arg.type,\n        forced: arg.type === 'query' ? isForcedQuery(arg, getState()) : undefined,\n        queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n      };\n      const forceQueryFn = arg.type === 'query' ? arg[forceQueryFnSymbol] : undefined;\n      let finalQueryReturnValue: QueryReturnValue;\n\n      // Infinite query wrapper, which executes the request and returns\n      // the InfiniteData `{pages, pageParams}` structure\n      const fetchPage = async (data: InfiniteData<unknown, unknown>, param: unknown, maxPages: number, previous?: boolean): Promise<QueryReturnValue> => {\n        // This should handle cases where there is no `getPrevPageParam`,\n        // or `getPPP` returned nullish\n        if (param == null && data.pages.length) {\n          return Promise.resolve({\n            data\n          });\n        }\n        const finalQueryArg: InfiniteQueryCombinedArg<any, any> = {\n          queryArg: arg.originalArgs,\n          pageParam: param\n        };\n        const pageResponse = await executeRequest(finalQueryArg);\n        const addTo = previous ? addToStart : addToEnd;\n        return {\n          data: {\n            pages: addTo(data.pages, pageResponse.data, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          },\n          meta: pageResponse.meta\n        };\n      };\n\n      // Wrapper for executing either `query` or `queryFn`,\n      // and handling any errors\n      async function executeRequest(finalQueryArg: unknown): Promise<QueryReturnValue> {\n        let result: QueryReturnValue;\n        const {\n          extraOptions,\n          argSchema,\n          rawResponseSchema,\n          responseSchema\n        } = endpointDefinition;\n        if (argSchema && !skipSchemaValidation) {\n          finalQueryArg = await parseWithSchema(argSchema, finalQueryArg, 'argSchema', {} // we don't have a meta yet, so we can't pass it\n          );\n        }\n        if (forceQueryFn) {\n          // upsertQueryData relies on this to pass in the user-provided value\n          result = forceQueryFn();\n        } else if (endpointDefinition.query) {\n          result = await baseQuery(endpointDefinition.query(finalQueryArg as any), baseQueryApi, extraOptions as any);\n        } else {\n          result = await endpointDefinition.queryFn(finalQueryArg as any, baseQueryApi, extraOptions as any, arg => baseQuery(arg, baseQueryApi, extraOptions as any));\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          const what = endpointDefinition.query ? '`baseQuery`' : '`queryFn`';\n          let err: undefined | string;\n          if (!result) {\n            err = `${what} did not return anything.`;\n          } else if (typeof result !== 'object') {\n            err = `${what} did not return an object.`;\n          } else if (result.error && result.data) {\n            err = `${what} returned an object containing both \\`error\\` and \\`result\\`.`;\n          } else if (result.error === undefined && result.data === undefined) {\n            err = `${what} returned an object containing neither a valid \\`error\\` and \\`result\\`. At least one of them should not be \\`undefined\\``;\n          } else {\n            for (const key of Object.keys(result)) {\n              if (key !== 'error' && key !== 'data' && key !== 'meta') {\n                err = `The object returned by ${what} has the unknown property ${key}.`;\n                break;\n              }\n            }\n          }\n          if (err) {\n            console.error(`Error encountered handling the endpoint ${arg.endpointName}.\n                  ${err}\n                  It needs to return an object with either the shape \\`{ data: <value> }\\` or \\`{ error: <value> }\\` that may contain an optional \\`meta\\` property.\n                  Object returned was:`, result);\n          }\n        }\n        if (result.error) throw new HandledError(result.error, result.meta);\n        let {\n          data\n        } = result;\n        if (rawResponseSchema && !skipSchemaValidation) {\n          data = await parseWithSchema(rawResponseSchema, result.data, 'rawResponseSchema', result.meta);\n        }\n        let transformedResponse = await transformResponse(data, result.meta, finalQueryArg);\n        if (responseSchema && !skipSchemaValidation) {\n          transformedResponse = await parseWithSchema(responseSchema, transformedResponse, 'responseSchema', result.meta);\n        }\n        return {\n          ...result,\n          data: transformedResponse\n        };\n      }\n      if (arg.type === 'query' && 'infiniteQueryOptions' in endpointDefinition) {\n        // This is an infinite query endpoint\n        const {\n          infiniteQueryOptions\n        } = endpointDefinition;\n\n        // Runtime checks should guarantee this is a positive number if provided\n        const {\n          maxPages = Infinity\n        } = infiniteQueryOptions;\n        let result: QueryReturnValue;\n\n        // Start by looking up the existing InfiniteData value from state,\n        // falling back to an empty value if it doesn't exist yet\n        const blankData = {\n          pages: [],\n          pageParams: []\n        };\n        const cachedData = selectors.selectQueryEntry(getState(), arg.queryCacheKey)?.data as InfiniteData<unknown, unknown> | undefined;\n\n        // When the arg changes or the user forces a refetch,\n        // we don't include the `direction` flag. This lets us distinguish\n        // between actually refetching with a forced query, vs just fetching\n        // the next page.\n        const isForcedQueryNeedingRefetch =\n        // arg.forceRefetch\n        isForcedQuery(arg, getState()) && !(arg as InfiniteQueryThunkArg<any>).direction;\n        const existingData = (isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData) as InfiniteData<unknown, unknown>;\n\n        // If the thunk specified a direction and we do have at least one page,\n        // fetch the next or previous page\n        if ('direction' in arg && arg.direction && existingData.pages.length) {\n          const previous = arg.direction === 'backward';\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const param = pageParamFn(infiniteQueryOptions, existingData, arg.originalArgs);\n          result = await fetchPage(existingData, param, maxPages, previous);\n        } else {\n          // Otherwise, fetch the first page and then any remaining pages\n\n          const {\n            initialPageParam = infiniteQueryOptions.initialPageParam\n          } = arg as InfiniteQueryThunkArg<any>;\n\n          // If we're doing a refetch, we should start from\n          // the first page we have cached.\n          // Otherwise, we should start from the initialPageParam\n          const cachedPageParams = cachedData?.pageParams ?? [];\n          const firstPageParam = cachedPageParams[0] ?? initialPageParam;\n          const totalPages = cachedPageParams.length;\n\n          // Fetch first page\n          result = await fetchPage(existingData, firstPageParam, maxPages);\n          if (forceQueryFn) {\n            // HACK `upsertQueryData` expects the user to pass in the `{pages, pageParams}` structure,\n            // but `fetchPage` treats that as `pages[0]`. We have to manually un-nest it.\n            result = {\n              data: (result.data as InfiniteData<unknown, unknown>).pages[0]\n            } as QueryReturnValue;\n          }\n\n          // Fetch remaining pages\n          for (let i = 1; i < totalPages; i++) {\n            const param = getNextPageParam(infiniteQueryOptions, result.data as InfiniteData<unknown, unknown>, arg.originalArgs);\n            result = await fetchPage(result.data as InfiniteData<unknown, unknown>, param, maxPages);\n          }\n        }\n        finalQueryReturnValue = result;\n      } else {\n        // Non-infinite endpoint. Just run the one request.\n        finalQueryReturnValue = await executeRequest(arg.originalArgs);\n      }\n      if (metaSchema && !skipSchemaValidation && finalQueryReturnValue.meta) {\n        finalQueryReturnValue.meta = await parseWithSchema(metaSchema, finalQueryReturnValue.meta, 'metaSchema', finalQueryReturnValue.meta);\n      }\n\n      // console.log('Final result: ', transformedData)\n      return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({\n        fulfilledTimeStamp: Date.now(),\n        baseQueryMeta: finalQueryReturnValue.meta\n      }));\n    } catch (error) {\n      let caughtError = error;\n      if (caughtError instanceof HandledError) {\n        let transformErrorResponse = getTransformCallbackForEndpoint(endpointDefinition, 'transformErrorResponse');\n        const {\n          rawErrorResponseSchema,\n          errorResponseSchema\n        } = endpointDefinition;\n        let {\n          value,\n          meta\n        } = caughtError;\n        try {\n          if (rawErrorResponseSchema && !skipSchemaValidation) {\n            value = await parseWithSchema(rawErrorResponseSchema, value, 'rawErrorResponseSchema', meta);\n          }\n          if (metaSchema && !skipSchemaValidation) {\n            meta = await parseWithSchema(metaSchema, meta, 'metaSchema', meta);\n          }\n          let transformedErrorResponse = await transformErrorResponse(value, meta, arg.originalArgs);\n          if (errorResponseSchema && !skipSchemaValidation) {\n            transformedErrorResponse = await parseWithSchema(errorResponseSchema, transformedErrorResponse, 'errorResponseSchema', meta);\n          }\n          return rejectWithValue(transformedErrorResponse, addShouldAutoBatch({\n            baseQueryMeta: meta\n          }));\n        } catch (e) {\n          caughtError = e;\n        }\n      }\n      try {\n        if (caughtError instanceof NamedSchemaError) {\n          const info: SchemaFailureInfo = {\n            endpoint: arg.endpointName,\n            arg: arg.originalArgs,\n            type: arg.type,\n            queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n          };\n          endpointDefinition.onSchemaFailure?.(caughtError, info);\n          onSchemaFailure?.(caughtError, info);\n          const {\n            catchSchemaFailure = globalCatchSchemaFailure\n          } = endpointDefinition;\n          if (catchSchemaFailure) {\n            return rejectWithValue(catchSchemaFailure(caughtError, info), addShouldAutoBatch({\n              baseQueryMeta: caughtError._bqMeta\n            }));\n          }\n        }\n      } catch (e) {\n        caughtError = e;\n      }\n      if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n        console.error(`An unhandled error occurred processing a request for the endpoint \"${arg.endpointName}\".\nIn the case of an unhandled error, no tags will be \"provided\" or \"invalidated\".`, caughtError);\n      } else {\n        console.error(caughtError);\n      }\n      throw caughtError;\n    }\n  };\n  function isForcedQuery(arg: QueryThunkArg, state: RootState<any, string, ReducerPath>) {\n    const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);\n    const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;\n    const fulfilledVal = requestState?.fulfilledTimeStamp;\n    const refetchVal = arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange);\n    if (refetchVal) {\n      // Return if it's true or compare the dates because it must be a number\n      return refetchVal === true || (Number(new Date()) - Number(fulfilledVal)) / 1000 >= refetchVal;\n    }\n    return false;\n  }\n  const createQueryThunk = <ThunkArgType extends QueryThunkArg | InfiniteQueryThunkArg<any>,>() => {\n    const generatedQueryThunk = createAsyncThunk<ThunkResult, ThunkArgType, ThunkApiMetaConfig & {\n      state: RootState<any, string, ReducerPath>;\n    }>(`${reducerPath}/executeQuery`, executeEndpoint, {\n      getPendingMeta({\n        arg\n      }) {\n        const endpointDefinition = endpointDefinitions[arg.endpointName];\n        return addShouldAutoBatch({\n          startedTimeStamp: Date.now(),\n          ...(isInfiniteQueryDefinition(endpointDefinition) ? {\n            direction: (arg as InfiniteQueryThunkArg<any>).direction\n          } : {})\n        });\n      },\n      condition(queryThunkArg, {\n        getState\n      }) {\n        const state = getState();\n        const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);\n        const fulfilledVal = requestState?.fulfilledTimeStamp;\n        const currentArg = queryThunkArg.originalArgs;\n        const previousArg = requestState?.originalArgs;\n        const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];\n        const direction = (queryThunkArg as InfiniteQueryThunkArg<any>).direction;\n\n        // Order of these checks matters.\n        // In order for `upsertQueryData` to successfully run while an existing request is in flight,\n        /// we have to check for that first, otherwise `queryThunk` will bail out and not run at all.\n        if (isUpsertQuery(queryThunkArg)) {\n          return true;\n        }\n\n        // Don't retry a request that's currently in-flight\n        if (requestState?.status === 'pending') {\n          return false;\n        }\n\n        // if this is forced, continue\n        if (isForcedQuery(queryThunkArg, state)) {\n          return true;\n        }\n        if (isQueryDefinition(endpointDefinition) && endpointDefinition?.forceRefetch?.({\n          currentArg,\n          previousArg,\n          endpointState: requestState,\n          state\n        })) {\n          return true;\n        }\n\n        // Pull from the cache unless we explicitly force refetch or qualify based on time\n        if (fulfilledVal && !direction) {\n          // Value is cached and we didn't specify to refresh, skip it.\n          return false;\n        }\n        return true;\n      },\n      dispatchConditionRejection: true\n    });\n    return generatedQueryThunk;\n  };\n  const queryThunk = createQueryThunk<QueryThunkArg>();\n  const infiniteQueryThunk = createQueryThunk<InfiniteQueryThunkArg<any>>();\n  const mutationThunk = createAsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig & {\n    state: RootState<any, string, ReducerPath>;\n  }>(`${reducerPath}/executeMutation`, executeEndpoint, {\n    getPendingMeta() {\n      return addShouldAutoBatch({\n        startedTimeStamp: Date.now()\n      });\n    }\n  });\n  const hasTheForce = (options: any): options is {\n    force: boolean;\n  } => 'force' in options;\n  const hasMaxAge = (options: any): options is {\n    ifOlderThan: false | number;\n  } => 'ifOlderThan' in options;\n  const prefetch = <EndpointName extends QueryKeys<Definitions>,>(endpointName: EndpointName, arg: any, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction> => (dispatch: ThunkDispatch<any, any, any>, getState: () => any) => {\n    const force = hasTheForce(options) && options.force;\n    const maxAge = hasMaxAge(options) && options.ifOlderThan;\n    const queryAction = (force: boolean = true) => {\n      const options = {\n        forceRefetch: force,\n        isPrefetch: true\n      };\n      return (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).initiate(arg, options);\n    };\n    const latestStateValue = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg)(getState());\n    if (force) {\n      dispatch(queryAction());\n    } else if (maxAge) {\n      const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp;\n      if (!lastFulfilledTs) {\n        dispatch(queryAction());\n        return;\n      }\n      const shouldRetrigger = (Number(new Date()) - Number(new Date(lastFulfilledTs))) / 1000 >= maxAge;\n      if (shouldRetrigger) {\n        dispatch(queryAction());\n      }\n    } else {\n      // If prefetching with no options, just let it try\n      dispatch(queryAction(false));\n    }\n  };\n  function matchesEndpoint(endpointName: string) {\n    return (action: any): action is UnknownAction => action?.meta?.arg?.endpointName === endpointName;\n  }\n  function buildMatchThunkActions<Thunk extends AsyncThunk<any, QueryThunkArg, ThunkApiMetaConfig> | AsyncThunk<any, MutationThunkArg, ThunkApiMetaConfig>>(thunk: Thunk, endpointName: string) {\n    return {\n      matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),\n      matchFulfilled: isAllOf(isFulfilled(thunk), matchesEndpoint(endpointName)),\n      matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName))\n    } as Matchers<Thunk, any>;\n  }\n  return {\n    queryThunk,\n    mutationThunk,\n    infiniteQueryThunk,\n    prefetch,\n    updateQueryData,\n    upsertQueryData,\n    patchQueryData,\n    buildMatchThunkActions\n  };\n}\nexport function getNextPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  const lastIndex = pages.length - 1;\n  return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams, queryArg);\n}\nexport function getPreviousPageParam(options: InfiniteQueryConfigOptions<unknown, unknown, unknown>, {\n  pages,\n  pageParams\n}: InfiniteData<unknown, unknown>, queryArg: unknown): unknown | undefined {\n  return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams, queryArg);\n}\nexport function calculateProvidedByThunk(action: UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<MutationThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>, type: 'providesTags' | 'invalidatesTags', endpointDefinitions: EndpointDefinitions, assertTagType: AssertTagTypes) {\n  return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type] as ResultDescription<any, any, any, any, any>, isFulfilled(action) ? action.payload : undefined, isRejectedWithValue(action) ? action.payload : undefined, action.meta.arg.originalArgs, 'baseQueryMeta' in action.meta ? action.meta.baseQueryMeta : undefined, assertTagType);\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AsyncThunkAction, SafePromise, SerializedError, ThunkAction, UnknownAction } from '@reduxjs/toolkit';\nimport type { Dispatch } from 'redux';\nimport { asSafePromise } from '../../tsHelpers';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport { isQueryDefinition, type EndpointDefinition, type EndpointDefinitions, type InfiniteQueryArgFrom, type InfiniteQueryDefinition, type MutationDefinition, type PageParamFrom, type QueryArgFrom, type QueryDefinition, type ResultTypeFrom } from '../endpointDefinitions';\nimport { countObjectKeys, getOrInsert, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQueryDirection, SubscriptionOptions } from './apiState';\nimport type { InfiniteQueryResultSelectorResult, QueryResultSelectorResult } from './buildSelectors';\nimport type { InfiniteQueryThunk, InfiniteQueryThunkArg, MutationThunk, QueryThunk, QueryThunkArg, ThunkApiMetaConfig } from './buildThunks';\nimport type { ApiEndpointQuery } from './module';\nexport type BuildInitiateApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = {\n  initiate: StartQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n  initiate: StartInfiniteQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = {\n  initiate: StartMutationActionCreator<Definition>;\n};\nexport const forceQueryFnSymbol = Symbol('forceQueryFn');\nexport const isUpsertQuery = (arg: QueryThunkArg) => typeof arg[forceQueryFnSymbol] === 'function';\nexport type StartQueryActionCreatorOptions = {\n  subscribe?: boolean;\n  forceRefetch?: boolean | number;\n  subscriptionOptions?: SubscriptionOptions;\n  [forceQueryFnSymbol]?: () => QueryReturnValue;\n};\nexport type StartInfiniteQueryActionCreatorOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = StartQueryActionCreatorOptions & {\n  direction?: InfiniteQueryDirection;\n  param?: unknown;\n} & Partial<Pick<Partial<InfiniteQueryConfigOptions<ResultTypeFrom<D>, PageParamFrom<D>, InfiniteQueryArgFrom<D>>>, 'initialPageParam'>>;\ntype AnyQueryActionCreator<D extends EndpointDefinition<any, any, any, any>> = (arg: any, options?: StartQueryActionCreatorOptions) => ThunkAction<AnyActionCreatorResult, any, any, UnknownAction>;\ntype StartQueryActionCreator<D extends QueryDefinition<any, any, any, any, any>> = (arg: QueryArgFrom<D>, options?: StartQueryActionCreatorOptions) => ThunkAction<QueryActionCreatorResult<D>, any, any, UnknownAction>;\nexport type StartInfiniteQueryActionCreator<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D>, options?: StartInfiniteQueryActionCreatorOptions<D>) => ThunkAction<InfiniteQueryActionCreatorResult<D>, any, any, UnknownAction>;\ntype QueryActionCreatorFields = {\n  requestId: string;\n  subscriptionOptions: SubscriptionOptions | undefined;\n  abort(): void;\n  unsubscribe(): void;\n  updateSubscriptionOptions(options: SubscriptionOptions): void;\n  queryCacheKey: string;\n};\ntype AnyActionCreatorResult = SafePromise<any> & QueryActionCreatorFields & {\n  arg: any;\n  unwrap(): Promise<any>;\n  refetch(): AnyActionCreatorResult;\n};\nexport type QueryActionCreatorResult<D extends QueryDefinition<any, any, any, any>> = SafePromise<QueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: QueryArgFrom<D>;\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  refetch(): QueryActionCreatorResult<D>;\n};\nexport type InfiniteQueryActionCreatorResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SafePromise<InfiniteQueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n  arg: InfiniteQueryArgFrom<D>;\n  unwrap(): Promise<InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>>;\n  refetch(): InfiniteQueryActionCreatorResult<D>;\n};\ntype StartMutationActionCreator<D extends MutationDefinition<any, any, any, any>> = (arg: QueryArgFrom<D>, options?: {\n  /**\n   * If this mutation should be tracked in the store.\n   * If you just want to manually trigger this mutation using `dispatch` and don't care about the\n   * result, state & potential errors being held in store, you can set this to false.\n   * (defaults to `true`)\n   */\n  track?: boolean;\n  fixedCacheKey?: string;\n}) => ThunkAction<MutationActionCreatorResult<D>, any, any, UnknownAction>;\nexport type MutationActionCreatorResult<D extends MutationDefinition<any, any, any, any>> = SafePromise<{\n  data: ResultTypeFrom<D>;\n  error?: undefined;\n} | {\n  data?: undefined;\n  error: Exclude<BaseQueryError<D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQuery : never>, undefined> | SerializedError;\n}> & {\n  /** @internal */\n  arg: {\n    /**\n     * The name of the given endpoint for the mutation\n     */\n    endpointName: string;\n    /**\n     * The original arguments supplied to the mutation call\n     */\n    originalArgs: QueryArgFrom<D>;\n    /**\n     * Whether the mutation is being tracked in the store.\n     */\n    track?: boolean;\n    fixedCacheKey?: string;\n  };\n  /**\n   * A unique string generated for the request sequence\n   */\n  requestId: string;\n\n  /**\n   * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation\n   * that was fired off from reaching the server, but only to assist in handling the response.\n   *\n   * Calling `abort()` prior to the promise resolving will force it to reach the error state with\n   * the serialized error:\n   * `{ name: 'AbortError', message: 'Aborted' }`\n   *\n   * @example\n   * ```ts\n   * const [updateUser] = useUpdateUserMutation();\n   *\n   * useEffect(() => {\n   *   const promise = updateUser(id);\n   *   promise\n   *     .unwrap()\n   *     .catch((err) => {\n   *       if (err.name === 'AbortError') return;\n   *       // else handle the unexpected error\n   *     })\n   *\n   *   return () => {\n   *     promise.abort();\n   *   }\n   * }, [id, updateUser])\n   * ```\n   */\n  abort(): void;\n  /**\n   * Unwraps a mutation call to provide the raw response/error.\n   *\n   * @remarks\n   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap\"\n   * addPost({ id: 1, name: 'Example' })\n   *   .unwrap()\n   *   .then((payload) => console.log('fulfilled', payload))\n   *   .catch((error) => console.error('rejected', error));\n   * ```\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta title=\"Using .unwrap with async await\"\n   * try {\n   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n   *   console.log('fulfilled', payload)\n   * } catch (error) {\n   *   console.error('rejected', error);\n   * }\n   * ```\n   */\n  unwrap(): Promise<ResultTypeFrom<D>>;\n  /**\n   * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.\n   The value returned by the hook will reset to `isUninitialized` afterwards.\n   */\n  reset(): void;\n};\nexport function buildInitiate({\n  serializeQueryArgs,\n  queryThunk,\n  infiniteQueryThunk,\n  mutationThunk,\n  api,\n  context\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  api: Api<any, EndpointDefinitions, any, any>;\n  context: ApiContext<EndpointDefinitions>;\n}) {\n  const runningQueries: Map<Dispatch, Record<string, QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any> | undefined>> = new Map();\n  const runningMutations: Map<Dispatch, Record<string, MutationActionCreatorResult<any> | undefined>> = new Map();\n  const {\n    unsubscribeQueryResult,\n    removeMutationResult,\n    updateSubscriptionOptions\n  } = api.internalActions;\n  return {\n    buildInitiateQuery,\n    buildInitiateInfiniteQuery,\n    buildInitiateMutation,\n    getRunningQueryThunk,\n    getRunningMutationThunk,\n    getRunningQueriesThunk,\n    getRunningMutationsThunk\n  };\n  function getRunningQueryThunk(endpointName: string, queryArgs: any) {\n    return (dispatch: Dispatch) => {\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      return runningQueries.get(dispatch)?.[queryCacheKey] as QueryActionCreatorResult<never> | InfiniteQueryActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningMutationThunk(\n  /**\n   * this is only here to allow TS to infer the result type by input value\n   * we could use it to validate the result, but it's probably not necessary\n   */\n  _endpointName: string, fixedCacheKeyOrRequestId: string) {\n    return (dispatch: Dispatch) => {\n      return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId] as MutationActionCreatorResult<never> | undefined;\n    };\n  }\n  function getRunningQueriesThunk() {\n    return (dispatch: Dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function getRunningMutationsThunk() {\n    return (dispatch: Dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);\n  }\n  function middlewareWarning(dispatch: Dispatch) {\n    if (process.env.NODE_ENV !== 'production') {\n      if ((middlewareWarning as any).triggered) return;\n      const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n      (middlewareWarning as any).triggered = true;\n\n      // The RTKQ middleware should return the internal state object,\n      // but it should _not_ be the action object.\n      if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n        // Otherwise, must not have been added\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(34) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\nYou must add the middleware for RTK-Query to function correctly!`);\n      }\n    }\n  }\n  function buildInitiateAnyQuery<T extends 'query' | 'infiniteQuery'>(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any>) {\n    const queryAction: AnyQueryActionCreator<any> = (arg, {\n      subscribe = true,\n      forceRefetch,\n      subscriptionOptions,\n      [forceQueryFnSymbol]: forceQueryFn,\n      ...rest\n    } = {}) => (dispatch, getState) => {\n      const queryCacheKey = serializeQueryArgs({\n        queryArgs: arg,\n        endpointDefinition,\n        endpointName\n      });\n      let thunk: AsyncThunkAction<unknown, QueryThunkArg, ThunkApiMetaConfig>;\n      const commonThunkArgs = {\n        ...rest,\n        type: 'query' as const,\n        subscribe,\n        forceRefetch: forceRefetch,\n        subscriptionOptions,\n        endpointName,\n        originalArgs: arg,\n        queryCacheKey,\n        [forceQueryFnSymbol]: forceQueryFn\n      };\n      if (isQueryDefinition(endpointDefinition)) {\n        thunk = queryThunk(commonThunkArgs);\n      } else {\n        const {\n          direction,\n          initialPageParam\n        } = rest as Pick<InfiniteQueryThunkArg<any>, 'direction' | 'initialPageParam'>;\n        thunk = infiniteQueryThunk({\n          ...(commonThunkArgs as InfiniteQueryThunkArg<any>),\n          // Supply these even if undefined. This helps with a field existence\n          // check over in `buildSlice.ts`\n          direction,\n          initialPageParam\n        });\n      }\n      const selector = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg);\n      const thunkResult = dispatch(thunk);\n      const stateAfter = selector(getState());\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort\n      } = thunkResult;\n      const skippedSynchronously = stateAfter.requestId !== requestId;\n      const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey];\n      const selectFromState = () => selector(getState());\n      const statePromise: AnyActionCreatorResult = Object.assign((forceQueryFn ?\n      // a query has been forced (upsertQueryData)\n      // -> we want to resolve it once data has been written with the data that will be written\n      thunkResult.then(selectFromState) : skippedSynchronously && !runningQuery ?\n      // a query has been skipped due to a condition and we do not have any currently running query\n      // -> we want to resolve it immediately with the current data\n      Promise.resolve(stateAfter) :\n      // query just started or one is already in flight\n      // -> wait for the running query, then resolve with data from after that\n      Promise.all([runningQuery, thunkResult]).then(selectFromState)) as SafePromise<any>, {\n        arg,\n        requestId,\n        subscriptionOptions,\n        queryCacheKey,\n        abort,\n        async unwrap() {\n          const result = await statePromise;\n          if (result.isError) {\n            throw result.error;\n          }\n          return result.data;\n        },\n        refetch: () => dispatch(queryAction(arg, {\n          subscribe: false,\n          forceRefetch: true\n        })),\n        unsubscribe() {\n          if (subscribe) dispatch(unsubscribeQueryResult({\n            queryCacheKey,\n            requestId\n          }));\n        },\n        updateSubscriptionOptions(options: SubscriptionOptions) {\n          statePromise.subscriptionOptions = options;\n          dispatch(updateSubscriptionOptions({\n            endpointName,\n            requestId,\n            queryCacheKey,\n            options\n          }));\n        }\n      });\n      if (!runningQuery && !skippedSynchronously && !forceQueryFn) {\n        const running = getOrInsert(runningQueries, dispatch, {});\n        running[queryCacheKey] = statePromise;\n        statePromise.then(() => {\n          delete running[queryCacheKey];\n          if (!countObjectKeys(running)) {\n            runningQueries.delete(dispatch);\n          }\n        });\n      }\n      return statePromise;\n    };\n    return queryAction;\n  }\n  function buildInitiateQuery(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    const queryAction: StartQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return queryAction;\n  }\n  function buildInitiateInfiniteQuery(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const infiniteQueryAction: StartInfiniteQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n    return infiniteQueryAction;\n  }\n  function buildInitiateMutation(endpointName: string): StartMutationActionCreator<any> {\n    return (arg, {\n      track = true,\n      fixedCacheKey\n    } = {}) => (dispatch, getState) => {\n      const thunk = mutationThunk({\n        type: 'mutation',\n        endpointName,\n        originalArgs: arg,\n        track,\n        fixedCacheKey\n      });\n      const thunkResult = dispatch(thunk);\n      middlewareWarning(dispatch);\n      const {\n        requestId,\n        abort,\n        unwrap\n      } = thunkResult;\n      const returnValuePromise = asSafePromise(thunkResult.unwrap().then(data => ({\n        data\n      })), error => ({\n        error\n      }));\n      const reset = () => {\n        dispatch(removeMutationResult({\n          requestId,\n          fixedCacheKey\n        }));\n      };\n      const ret = Object.assign(returnValuePromise, {\n        arg: thunkResult.arg,\n        requestId,\n        abort,\n        unwrap,\n        reset\n      });\n      const running = runningMutations.get(dispatch) || {};\n      runningMutations.set(dispatch, running);\n      running[requestId] = ret;\n      ret.then(() => {\n        delete running[requestId];\n        if (!countObjectKeys(running)) {\n          runningMutations.delete(dispatch);\n        }\n      });\n      if (fixedCacheKey) {\n        running[fixedCacheKey] = ret;\n        ret.then(() => {\n          if (running[fixedCacheKey] === ret) {\n            delete running[fixedCacheKey];\n            if (!countObjectKeys(running)) {\n              runningMutations.delete(dispatch);\n            }\n          }\n        });\n      }\n      return ret;\n    };\n  }\n}","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { SchemaError } from '@standard-schema/utils';\nexport class NamedSchemaError extends SchemaError {\n  constructor(issues: readonly StandardSchemaV1.Issue[], public readonly value: any, public readonly schemaName: string, public readonly _bqMeta: any) {\n    super(issues);\n  }\n}\nexport async function parseWithSchema<Schema extends StandardSchemaV1>(schema: Schema, data: unknown, schemaName: string, bqMeta: any): Promise<StandardSchemaV1.InferOutput<Schema>> {\n  const result = await schema['~standard'].validate(data);\n  if (result.issues) {\n    throw new NamedSchemaError(result.issues, data, schemaName, bqMeta);\n  }\n  return result.value;\n}","import type { PayloadAction } from '@reduxjs/toolkit';\nimport { combineReducers, createAction, createSlice, isAnyOf, isFulfilled, isRejectedWithValue, createNextState, prepareAutoBatched, SHOULD_AUTOBATCH, nanoid } from './rtkImports';\nimport type { QuerySubstateIdentifier, QuerySubState, MutationSubstateIdentifier, MutationSubState, MutationState, QueryState, InvalidationState, Subscribers, QueryCacheKey, SubscriptionState, ConfigState, InfiniteQuerySubState, InfiniteQueryDirection } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { AllQueryKeys, QueryArgFromAnyQueryDefinition, DataFromAnyQueryDefinition, InfiniteQueryThunk, MutationThunk, QueryThunk, QueryThunkArg } from './buildThunks';\nimport { calculateProvidedByThunk } from './buildThunks';\nimport { isInfiniteQueryDefinition, type AssertTagTypes, type EndpointDefinitions, type FullTagDescription, type QueryDefinition } from '../endpointDefinitions';\nimport type { Patch } from 'immer';\nimport { isDraft } from 'immer';\nimport { applyPatches, original } from 'immer';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\nimport { isDocumentVisible, isOnline, copyWithStructuralSharing } from '../utils';\nimport type { ApiContext } from '../apiTypes';\nimport { isUpsertQuery } from './buildInitiate';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { UnwrapPromise } from '../tsHelpers';\n\n/**\n * A typesafe single entry to be upserted into the cache\n */\nexport type NormalizedQueryUpsertEntry<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = {\n  endpointName: EndpointName;\n  arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>;\n  value: DataFromAnyQueryDefinition<Definitions, EndpointName>;\n};\n\n/**\n * The internal version that is not typesafe since we can't carry the generics through `createSlice`\n */\ntype NormalizedQueryUpsertEntryPayload = {\n  endpointName: string;\n  arg: unknown;\n  value: unknown;\n};\nexport type ProcessedQueryUpsertEntry = {\n  queryDescription: QueryThunkArg;\n  value: unknown;\n};\n\n/**\n * A typesafe representation of a util action creator that accepts cache entry descriptions to upsert\n */\nexport type UpsertEntries<Definitions extends EndpointDefinitions> = (<EndpointNames extends Array<AllQueryKeys<Definitions>>>(entries: [...{ [I in keyof EndpointNames]: NormalizedQueryUpsertEntry<Definitions, EndpointNames[I]> }]) => PayloadAction<NormalizedQueryUpsertEntryPayload[]>) & {\n  match: (action: unknown) => action is PayloadAction<NormalizedQueryUpsertEntryPayload[]>;\n};\nfunction updateQuerySubstateIfExists(state: QueryState<any>, queryCacheKey: QueryCacheKey, update: (substate: QuerySubState<any> | InfiniteQuerySubState<any>) => void) {\n  const substate = state[queryCacheKey];\n  if (substate) {\n    update(substate);\n  }\n}\nexport function getMutationCacheKey(id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n}): string | undefined;\nexport function getMutationCacheKey(id: {\n  fixedCacheKey?: string;\n  requestId?: string;\n} | MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}): string | undefined {\n  return ('arg' in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId;\n}\nfunction updateMutationSubstateIfExists(state: MutationState<any>, id: MutationSubstateIdentifier | {\n  requestId: string;\n  arg: {\n    fixedCacheKey?: string | undefined;\n  };\n}, update: (substate: MutationSubState<any>) => void) {\n  const substate = state[getMutationCacheKey(id)];\n  if (substate) {\n    update(substate);\n  }\n}\nconst initialState = {} as any;\nexport function buildSlice({\n  reducerPath,\n  queryThunk,\n  mutationThunk,\n  serializeQueryArgs,\n  context: {\n    endpointDefinitions: definitions,\n    apiUid,\n    extractRehydrationInfo,\n    hasRehydrationInfo\n  },\n  assertTagType,\n  config\n}: {\n  reducerPath: string;\n  queryThunk: QueryThunk;\n  infiniteQueryThunk: InfiniteQueryThunk<any>;\n  mutationThunk: MutationThunk;\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  context: ApiContext<EndpointDefinitions>;\n  assertTagType: AssertTagTypes;\n  config: Omit<ConfigState<string>, 'online' | 'focused' | 'middlewareRegistered'>;\n}) {\n  const resetApiState = createAction(`${reducerPath}/resetApiState`);\n  function writePendingCacheEntry(draft: QueryState<any>, arg: QueryThunkArg, upserting: boolean, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n    // requestStatus: 'pending'\n  } & {\n    startedTimeStamp: number;\n  }) {\n    draft[arg.queryCacheKey] ??= {\n      status: QueryStatus.uninitialized,\n      endpointName: arg.endpointName\n    };\n    updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n      substate.status = QueryStatus.pending;\n      substate.requestId = upserting && substate.requestId ?\n      // for `upsertQuery` **updates**, keep the current `requestId`\n      substate.requestId :\n      // for normal queries or `upsertQuery` **inserts** always update the `requestId`\n      meta.requestId;\n      if (arg.originalArgs !== undefined) {\n        substate.originalArgs = arg.originalArgs;\n      }\n      substate.startedTimeStamp = meta.startedTimeStamp;\n      const endpointDefinition = definitions[meta.arg.endpointName];\n      if (isInfiniteQueryDefinition(endpointDefinition) && 'direction' in arg) {\n        ;\n        (substate as InfiniteQuerySubState<any>).direction = arg.direction as InfiniteQueryDirection;\n      }\n    });\n  }\n  function writeFulfilledCacheEntry(draft: QueryState<any>, meta: {\n    arg: QueryThunkArg;\n    requestId: string;\n  } & {\n    fulfilledTimeStamp: number;\n    baseQueryMeta: unknown;\n  }, payload: unknown, upserting: boolean) {\n    updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, substate => {\n      if (substate.requestId !== meta.requestId && !upserting) return;\n      const {\n        merge\n      } = definitions[meta.arg.endpointName] as QueryDefinition<any, any, any, any>;\n      substate.status = QueryStatus.fulfilled;\n      if (merge) {\n        if (substate.data !== undefined) {\n          const {\n            fulfilledTimeStamp,\n            arg,\n            baseQueryMeta,\n            requestId\n          } = meta;\n          // There's existing cache data. Let the user merge it in themselves.\n          // We're already inside an Immer-powered reducer, and the user could just mutate `substate.data`\n          // themselves inside of `merge()`. But, they might also want to return a new value.\n          // Try to let Immer figure that part out, save the result, and assign it to `substate.data`.\n          let newData = createNextState(substate.data, draftSubstateData => {\n            // As usual with Immer, you can mutate _or_ return inside here, but not both\n            return merge(draftSubstateData, payload, {\n              arg: arg.originalArgs,\n              baseQueryMeta,\n              fulfilledTimeStamp,\n              requestId\n            });\n          });\n          substate.data = newData;\n        } else {\n          // Presumably a fresh request. Just cache the response data.\n          substate.data = payload;\n        }\n      } else {\n        // Assign or safely update the cache data.\n        substate.data = definitions[meta.arg.endpointName].structuralSharing ?? true ? copyWithStructuralSharing(isDraft(substate.data) ? original(substate.data) : substate.data, payload) : payload;\n      }\n      delete substate.error;\n      substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n    });\n  }\n  const querySlice = createSlice({\n    name: `${reducerPath}/queries`,\n    initialState: initialState as QueryState<any>,\n    reducers: {\n      removeQueryResult: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey\n          }\n        }: PayloadAction<QuerySubstateIdentifier>) {\n          delete draft[queryCacheKey];\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier>()\n      },\n      cacheEntriesUpserted: {\n        reducer(draft, action: PayloadAction<ProcessedQueryUpsertEntry[], string, {\n          RTK_autoBatch: boolean;\n          requestId: string;\n          timestamp: number;\n        }>) {\n          for (const entry of action.payload) {\n            const {\n              queryDescription: arg,\n              value\n            } = entry;\n            writePendingCacheEntry(draft, arg, true, {\n              arg,\n              requestId: action.meta.requestId,\n              startedTimeStamp: action.meta.timestamp\n            });\n            writeFulfilledCacheEntry(draft, {\n              arg,\n              requestId: action.meta.requestId,\n              fulfilledTimeStamp: action.meta.timestamp,\n              baseQueryMeta: {}\n            }, value,\n            // We know we're upserting here\n            true);\n          }\n        },\n        prepare: (payload: NormalizedQueryUpsertEntryPayload[]) => {\n          const queryDescriptions: ProcessedQueryUpsertEntry[] = payload.map(entry => {\n            const {\n              endpointName,\n              arg,\n              value\n            } = entry;\n            const endpointDefinition = definitions[endpointName];\n            const queryDescription: QueryThunkArg = {\n              type: 'query',\n              endpointName: endpointName,\n              originalArgs: entry.arg,\n              queryCacheKey: serializeQueryArgs({\n                queryArgs: arg,\n                endpointDefinition,\n                endpointName\n              })\n            };\n            return {\n              queryDescription,\n              value\n            };\n          });\n          const result = {\n            payload: queryDescriptions,\n            meta: {\n              [SHOULD_AUTOBATCH]: true,\n              requestId: nanoid(),\n              timestamp: Date.now()\n            }\n          };\n          return result;\n        }\n      },\n      queryResultPatched: {\n        reducer(draft, {\n          payload: {\n            queryCacheKey,\n            patches\n          }\n        }: PayloadAction<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>) {\n          updateQuerySubstateIfExists(draft, queryCacheKey, substate => {\n            substate.data = applyPatches(substate.data as any, patches.concat());\n          });\n        },\n        prepare: prepareAutoBatched<QuerySubstateIdentifier & {\n          patches: readonly Patch[];\n        }>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(queryThunk.pending, (draft, {\n        meta,\n        meta: {\n          arg\n        }\n      }) => {\n        const upserting = isUpsertQuery(arg);\n        writePendingCacheEntry(draft, arg, upserting, meta);\n      }).addCase(queryThunk.fulfilled, (draft, {\n        meta,\n        payload\n      }) => {\n        const upserting = isUpsertQuery(meta.arg);\n        writeFulfilledCacheEntry(draft, meta, payload, upserting);\n      }).addCase(queryThunk.rejected, (draft, {\n        meta: {\n          condition,\n          arg,\n          requestId\n        },\n        error,\n        payload\n      }) => {\n        updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n          if (condition) {\n            // request was aborted due to condition (another query already running)\n          } else {\n            // request failed\n            if (substate.requestId !== requestId) return;\n            substate.status = QueryStatus.rejected;\n            substate.error = (payload ?? error) as any;\n          }\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          queries\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(queries)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  const mutationSlice = createSlice({\n    name: `${reducerPath}/mutations`,\n    initialState: initialState as MutationState<any>,\n    reducers: {\n      removeMutationResult: {\n        reducer(draft, {\n          payload\n        }: PayloadAction<MutationSubstateIdentifier>) {\n          const cacheKey = getMutationCacheKey(payload);\n          if (cacheKey in draft) {\n            delete draft[cacheKey];\n          }\n        },\n        prepare: prepareAutoBatched<MutationSubstateIdentifier>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(mutationThunk.pending, (draft, {\n        meta,\n        meta: {\n          requestId,\n          arg,\n          startedTimeStamp\n        }\n      }) => {\n        if (!arg.track) return;\n        draft[getMutationCacheKey(meta)] = {\n          requestId,\n          status: QueryStatus.pending,\n          endpointName: arg.endpointName,\n          startedTimeStamp\n        };\n      }).addCase(mutationThunk.fulfilled, (draft, {\n        payload,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.fulfilled;\n          substate.data = payload;\n          substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n        });\n      }).addCase(mutationThunk.rejected, (draft, {\n        payload,\n        error,\n        meta\n      }) => {\n        if (!meta.arg.track) return;\n        updateMutationSubstateIfExists(draft, meta, substate => {\n          if (substate.requestId !== meta.requestId) return;\n          substate.status = QueryStatus.rejected;\n          substate.error = (payload ?? error) as any;\n        });\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          mutations\n        } = extractRehydrationInfo(action)!;\n        for (const [key, entry] of Object.entries(mutations)) {\n          if (\n          // do not rehydrate entries that were currently in flight.\n          (entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) &&\n          // only rehydrate endpoints that were persisted using a `fixedCacheKey`\n          key !== entry?.requestId) {\n            draft[key] = entry;\n          }\n        }\n      });\n    }\n  });\n  type CalculateProvidedByAction = UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<InfiniteQueryThunk<any>>>>;\n  const initialInvalidationState: InvalidationState<string> = {\n    tags: {},\n    keys: {}\n  };\n  const invalidationSlice = createSlice({\n    name: `${reducerPath}/invalidation`,\n    initialState: initialInvalidationState,\n    reducers: {\n      updateProvidedBy: {\n        reducer(draft, action: PayloadAction<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>) {\n          for (const {\n            queryCacheKey,\n            providedTags\n          } of action.payload) {\n            removeCacheKeyFromTags(draft, queryCacheKey);\n            for (const {\n              type,\n              id\n            } of providedTags) {\n              const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n\n            // Remove readonly from the providedTags array\n            draft.keys[queryCacheKey] = providedTags as FullTagDescription<string>[];\n          }\n        },\n        prepare: prepareAutoBatched<Array<{\n          queryCacheKey: QueryCacheKey;\n          providedTags: readonly FullTagDescription<string>[];\n        }>>()\n      }\n    },\n    extraReducers(builder) {\n      builder.addCase(querySlice.actions.removeQueryResult, (draft, {\n        payload: {\n          queryCacheKey\n        }\n      }) => {\n        removeCacheKeyFromTags(draft, queryCacheKey);\n      }).addMatcher(hasRehydrationInfo, (draft, action) => {\n        const {\n          provided\n        } = extractRehydrationInfo(action)!;\n        for (const [type, incomingTags] of Object.entries(provided)) {\n          for (const [id, cacheKeys] of Object.entries(incomingTags)) {\n            const subscribedQueries = (draft.tags[type] ??= {})[id || '__internal_without_id'] ??= [];\n            for (const queryCacheKey of cacheKeys) {\n              const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n              if (!alreadySubscribed) {\n                subscribedQueries.push(queryCacheKey);\n              }\n            }\n          }\n        }\n      }).addMatcher(isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)), (draft, action) => {\n        writeProvidedTagsForQueries(draft, [action]);\n      }).addMatcher(querySlice.actions.cacheEntriesUpserted.match, (draft, action) => {\n        const mockActions: CalculateProvidedByAction[] = action.payload.map(({\n          queryDescription,\n          value\n        }) => {\n          return {\n            type: 'UNKNOWN',\n            payload: value,\n            meta: {\n              requestStatus: 'fulfilled',\n              requestId: 'UNKNOWN',\n              arg: queryDescription\n            }\n          };\n        });\n        writeProvidedTagsForQueries(draft, mockActions);\n      });\n    }\n  });\n  function removeCacheKeyFromTags(draft: InvalidationState<any>, queryCacheKey: QueryCacheKey) {\n    const existingTags = draft.keys[queryCacheKey] ?? [];\n\n    // Delete this cache key from any existing tags that may have provided it\n    for (const tag of existingTags) {\n      const tagType = tag.type;\n      const tagId = tag.id ?? '__internal_without_id';\n      const tagSubscriptions = draft.tags[tagType]?.[tagId];\n      if (tagSubscriptions) {\n        draft.tags[tagType][tagId] = tagSubscriptions.filter(qc => qc !== queryCacheKey);\n      }\n    }\n    delete draft.keys[queryCacheKey];\n  }\n  function writeProvidedTagsForQueries(draft: InvalidationState<string>, actions: CalculateProvidedByAction[]) {\n    const providedByEntries = actions.map(action => {\n      const providedTags = calculateProvidedByThunk(action, 'providesTags', definitions, assertTagType);\n      const {\n        queryCacheKey\n      } = action.meta.arg;\n      return {\n        queryCacheKey,\n        providedTags\n      };\n    });\n    invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy(providedByEntries));\n  }\n\n  // Dummy slice to generate actions\n  const subscriptionSlice = createSlice({\n    name: `${reducerPath}/subscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      updateSubscriptionOptions(d, a: PayloadAction<{\n        endpointName: string;\n        requestId: string;\n        options: Subscribers[number];\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      unsubscribeQueryResult(d, a: PayloadAction<{\n        requestId: string;\n      } & QuerySubstateIdentifier>) {\n        // Dummy\n      },\n      internal_getRTKQSubscriptions() {}\n    }\n  });\n  const internalSubscriptionsSlice = createSlice({\n    name: `${reducerPath}/internalSubscriptions`,\n    initialState: initialState as SubscriptionState,\n    reducers: {\n      subscriptionsUpdated: {\n        reducer(state, action: PayloadAction<Patch[]>) {\n          return applyPatches(state, action.payload);\n        },\n        prepare: prepareAutoBatched<Patch[]>()\n      }\n    }\n  });\n  const configSlice = createSlice({\n    name: `${reducerPath}/config`,\n    initialState: {\n      online: isOnline(),\n      focused: isDocumentVisible(),\n      middlewareRegistered: false,\n      ...config\n    } as ConfigState<string>,\n    reducers: {\n      middlewareRegistered(state, {\n        payload\n      }: PayloadAction<string>) {\n        state.middlewareRegistered = state.middlewareRegistered === 'conflict' || apiUid !== payload ? 'conflict' : true;\n      }\n    },\n    extraReducers: builder => {\n      builder.addCase(onOnline, state => {\n        state.online = true;\n      }).addCase(onOffline, state => {\n        state.online = false;\n      }).addCase(onFocus, state => {\n        state.focused = true;\n      }).addCase(onFocusLost, state => {\n        state.focused = false;\n      })\n      // update the state to be a new object to be picked up as a \"state change\"\n      // by redux-persist's `autoMergeLevel2`\n      .addMatcher(hasRehydrationInfo, draft => ({\n        ...draft\n      }));\n    }\n  });\n  const combinedReducer = combineReducers({\n    queries: querySlice.reducer,\n    mutations: mutationSlice.reducer,\n    provided: invalidationSlice.reducer,\n    subscriptions: internalSubscriptionsSlice.reducer,\n    config: configSlice.reducer\n  });\n  const reducer: typeof combinedReducer = (state, action) => combinedReducer(resetApiState.match(action) ? undefined : state, action);\n  const actions = {\n    ...configSlice.actions,\n    ...querySlice.actions,\n    ...subscriptionSlice.actions,\n    ...internalSubscriptionsSlice.actions,\n    ...mutationSlice.actions,\n    ...invalidationSlice.actions,\n    resetApiState\n  };\n  return {\n    reducer,\n    actions\n  };\n}\nexport type SliceActions = ReturnType<typeof buildSlice>['actions'];","import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, ReducerPathFrom, TagDescription, TagTypesFrom } from '../endpointDefinitions';\nimport { expandTagDescription } from '../endpointDefinitions';\nimport { flatten, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationSubState, QueryCacheKey, QueryKeys, QueryState, QuerySubState, RequestStatusFlags, RootState as _RootState } from './apiState';\nimport { QueryStatus, getRequestStatusFlags } from './apiState';\nimport { getMutationCacheKey } from './buildSlice';\nimport type { createSelector as _createSelector } from './rtkImports';\nimport { createNextState } from './rtkImports';\nimport { type AllQueryKeys, getNextPageParam, getPreviousPageParam } from './buildThunks';\nexport type SkipToken = typeof skipToken;\n/**\n * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`\n * instead of the query argument to get the same effect as if setting\n * `skip: true` in the query options.\n *\n * Useful for scenarios where a query should be skipped when `arg` is `undefined`\n * and TypeScript complains about it because `arg` is not allowed to be passed\n * in as `undefined`, such as\n *\n * ```ts\n * // codeblock-meta title=\"will error if the query argument is not allowed to be undefined\" no-transpile\n * useSomeQuery(arg, { skip: !!arg })\n * ```\n *\n * ```ts\n * // codeblock-meta title=\"using skipToken instead\" no-transpile\n * useSomeQuery(arg ?? skipToken)\n * ```\n *\n * If passed directly into a query or mutation selector, that selector will always\n * return an uninitialized state.\n */\nexport const skipToken = /* @__PURE__ */Symbol.for('RTKQ/skipToken');\nexport type BuildSelectorsApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: QueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: InfiniteQueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n  select: MutationResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\ntype QueryResultSelectorFactory<Definition extends QueryDefinition<any, any, any, any>, RootState> = (queryArg: QueryArgFrom<Definition> | SkipToken) => (state: RootState) => QueryResultSelectorResult<Definition>;\nexport type QueryResultSelectorResult<Definition extends QueryDefinition<any, any, any, any>> = QuerySubState<Definition> & RequestStatusFlags;\ntype InfiniteQueryResultSelectorFactory<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, RootState> = (queryArg: InfiniteQueryArgFrom<Definition> | SkipToken) => (state: RootState) => InfiniteQueryResultSelectorResult<Definition>;\nexport type InfiniteQueryResultFlags = {\n  hasNextPage: boolean;\n  hasPreviousPage: boolean;\n  isFetchingNextPage: boolean;\n  isFetchingPreviousPage: boolean;\n  isFetchNextPageError: boolean;\n  isFetchPreviousPageError: boolean;\n};\nexport type InfiniteQueryResultSelectorResult<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<Definition> & RequestStatusFlags & InfiniteQueryResultFlags;\ntype MutationResultSelectorFactory<Definition extends MutationDefinition<any, any, any, any>, RootState> = (requestId: string | {\n  requestId: string | undefined;\n  fixedCacheKey: string | undefined;\n} | SkipToken) => (state: RootState) => MutationResultSelectorResult<Definition>;\nexport type MutationResultSelectorResult<Definition extends MutationDefinition<any, any, any, any>> = MutationSubState<Definition> & RequestStatusFlags;\nconst initialSubState: QuerySubState<any> = {\n  status: QueryStatus.uninitialized as const\n};\n\n// abuse immer to freeze default states\nconst defaultQuerySubState = /* @__PURE__ */createNextState(initialSubState, () => {});\nconst defaultMutationSubState = /* @__PURE__ */createNextState(initialSubState as MutationSubState<any>, () => {});\nexport type AllSelectors = ReturnType<typeof buildSelectors>;\nexport function buildSelectors<Definitions extends EndpointDefinitions, ReducerPath extends string>({\n  serializeQueryArgs,\n  reducerPath,\n  createSelector\n}: {\n  serializeQueryArgs: InternalSerializeQueryArgs;\n  reducerPath: ReducerPath;\n  createSelector: typeof _createSelector;\n}) {\n  type RootState = _RootState<Definitions, string, string>;\n  const selectSkippedQuery = (state: RootState) => defaultQuerySubState;\n  const selectSkippedMutation = (state: RootState) => defaultMutationSubState;\n  return {\n    buildQuerySelector,\n    buildInfiniteQuerySelector,\n    buildMutationSelector,\n    selectInvalidatedBy,\n    selectCachedArgsForQuery,\n    selectApiState,\n    selectQueries,\n    selectMutations,\n    selectQueryEntry,\n    selectConfig\n  };\n  function withRequestFlags<T extends {\n    status: QueryStatus;\n  }>(substate: T): T & RequestStatusFlags {\n    return {\n      ...substate,\n      ...getRequestStatusFlags(substate.status)\n    };\n  }\n  function selectApiState(rootState: RootState) {\n    const state = rootState[reducerPath];\n    if (process.env.NODE_ENV !== 'production') {\n      if (!state) {\n        if ((selectApiState as any).triggered) return state;\n        (selectApiState as any).triggered = true;\n        console.error(`Error: No data found at \\`state.${reducerPath}\\`. Did you forget to add the reducer to the store?`);\n      }\n    }\n    return state;\n  }\n  function selectQueries(rootState: RootState) {\n    return selectApiState(rootState)?.queries;\n  }\n  function selectQueryEntry(rootState: RootState, cacheKey: QueryCacheKey) {\n    return selectQueries(rootState)?.[cacheKey];\n  }\n  function selectMutations(rootState: RootState) {\n    return selectApiState(rootState)?.mutations;\n  }\n  function selectConfig(rootState: RootState) {\n    return selectApiState(rootState)?.config;\n  }\n  function buildAnyQuerySelector(endpointName: string, endpointDefinition: EndpointDefinition<any, any, any, any>, combiner: <T extends {\n    status: QueryStatus;\n  }>(substate: T) => T & RequestStatusFlags) {\n    return (queryArgs: any) => {\n      // Avoid calling serializeQueryArgs if the arg is skipToken\n      if (queryArgs === skipToken) {\n        return createSelector(selectSkippedQuery, combiner);\n      }\n      const serializedArgs = serializeQueryArgs({\n        queryArgs,\n        endpointDefinition,\n        endpointName\n      });\n      const selectQuerySubstate = (state: RootState) => selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState;\n      return createSelector(selectQuerySubstate, combiner);\n    };\n  }\n  function buildQuerySelector(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags) as QueryResultSelectorFactory<any, RootState>;\n  }\n  function buildInfiniteQuerySelector(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n    const {\n      infiniteQueryOptions\n    } = endpointDefinition;\n    function withInfiniteQueryResultFlags<T extends {\n      status: QueryStatus;\n    }>(substate: T): T & RequestStatusFlags & InfiniteQueryResultFlags {\n      const stateWithRequestFlags = {\n        ...(substate as InfiniteQuerySubState<any>),\n        ...getRequestStatusFlags(substate.status)\n      };\n      const {\n        isLoading,\n        isError,\n        direction\n      } = stateWithRequestFlags;\n      const isForward = direction === 'forward';\n      const isBackward = direction === 'backward';\n      return {\n        ...stateWithRequestFlags,\n        hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data, stateWithRequestFlags.originalArgs),\n        isFetchingNextPage: isLoading && isForward,\n        isFetchingPreviousPage: isLoading && isBackward,\n        isFetchNextPageError: isError && isForward,\n        isFetchPreviousPageError: isError && isBackward\n      };\n    }\n    return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags) as unknown as InfiniteQueryResultSelectorFactory<any, RootState>;\n  }\n  function buildMutationSelector() {\n    return (id => {\n      let mutationId: string | typeof skipToken;\n      if (typeof id === 'object') {\n        mutationId = getMutationCacheKey(id) ?? skipToken;\n      } else {\n        mutationId = id;\n      }\n      const selectMutationSubstate = (state: RootState) => selectApiState(state)?.mutations?.[mutationId as string] ?? defaultMutationSubState;\n      const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;\n      return createSelector(finalSelectMutationSubstate, withRequestFlags);\n    }) as MutationResultSelectorFactory<any, RootState>;\n  }\n  function selectInvalidatedBy(state: RootState, tags: ReadonlyArray<TagDescription<string> | null | undefined>): Array<{\n    endpointName: string;\n    originalArgs: any;\n    queryCacheKey: QueryCacheKey;\n  }> {\n    const apiState = state[reducerPath];\n    const toInvalidate = new Set<QueryCacheKey>();\n    for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {\n      const provided = apiState.provided.tags[tag.type];\n      if (!provided) {\n        continue;\n      }\n      let invalidateSubscriptions = (tag.id !== undefined ?\n      // id given: invalidate all queries that provide this type & id\n      provided[tag.id] :\n      // no id: invalidate all queries that provide this type\n      flatten(Object.values(provided))) ?? [];\n      for (const invalidate of invalidateSubscriptions) {\n        toInvalidate.add(invalidate);\n      }\n    }\n    return flatten(Array.from(toInvalidate.values()).map(queryCacheKey => {\n      const querySubState = apiState.queries[queryCacheKey];\n      return querySubState ? [{\n        queryCacheKey,\n        endpointName: querySubState.endpointName!,\n        originalArgs: querySubState.originalArgs\n      }] : [];\n    }));\n  }\n  function selectCachedArgsForQuery<QueryName extends AllQueryKeys<Definitions>>(state: RootState, queryName: QueryName): Array<QueryArgFromAnyQuery<Definitions[QueryName]>> {\n    return Object.values(selectQueries(state) as QueryState<any>).filter((entry): entry is Exclude<QuerySubState<Definitions[QueryName]>, {\n      status: QueryStatus.uninitialized;\n    }> => entry?.endpointName === queryName && entry.status !== QueryStatus.uninitialized).map(entry => entry.originalArgs);\n  }\n  function getHasNextPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data) return false;\n    return getNextPageParam(options, data, queryArg) != null;\n  }\n  function getHasPreviousPage(options: InfiniteQueryConfigOptions<any, any, any>, data?: InfiniteData<unknown, unknown>, queryArg?: unknown): boolean {\n    if (!data || !options.getPreviousPageParam) return false;\n    return getPreviousPageParam(options, data, queryArg) != null;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Api, ApiContext, Module, ModuleName } from './apiTypes';\nimport type { CombinedState } from './core/apiState';\nimport type { BaseQueryArg, BaseQueryFn } from './baseQueryTypes';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { EndpointBuilder, EndpointDefinitions, SchemaFailureConverter, SchemaFailureHandler } from './endpointDefinitions';\nimport { DefinitionType, isInfiniteQueryDefinition, isQueryDefinition } from './endpointDefinitions';\nimport { nanoid } from './core/rtkImports';\nimport type { UnknownAction } from '@reduxjs/toolkit';\nimport type { NoInfer } from './tsHelpers';\nimport { weakMapMemoize } from 'reselect';\nexport interface CreateApiOptions<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never> {\n  /**\n   * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   // highlight-start\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  baseQuery: BaseQuery;\n  /**\n   * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   tagTypes: ['Post', 'User'],\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // ...endpoints\n   *   }),\n   * })\n   * ```\n   */\n  tagTypes?: readonly TagTypes[];\n  /**\n   * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"apis.js\"\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';\n   *\n   * const apiOne = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiOne',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   *\n   * const apiTwo = createApi({\n   *   // highlight-start\n   *   reducerPath: 'apiTwo',\n   *   // highlight-end\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (builder) => ({\n   *     // ...endpoints\n   *   }),\n   * });\n   * ```\n   */\n  reducerPath?: ReducerPath;\n  /**\n   * Accepts a custom function if you have a need to change the creation of cache keys for any reason.\n   */\n  serializeQueryArgs?: SerializeQueryArgs<unknown>;\n  /**\n   * Endpoints are a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are three endpoint types: [`query`](../../rtk-query/usage/queries), [`infiniteQuery`](../../rtk-query/usage/infinite-queries) and [`mutation`](../../rtk-query/usage/mutations).\n   */\n  endpoints(build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>): Definitions;\n  /**\n   * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   *\n   * ```ts\n   * // codeblock-meta title=\"keepUnusedDataFor example\"\n   *\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * interface Post {\n   *   id: number\n   *   name: string\n   * }\n   * type PostsResponse = Post[]\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPosts: build.query<PostsResponse, void>({\n   *       query: () => 'posts',\n   *       // highlight-start\n   *       keepUnusedDataFor: 5\n   *       // highlight-end\n   *     })\n   *   })\n   * })\n   * ```\n   */\n  keepUnusedDataFor?: number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   */\n  refetchOnMountOrArgChange?: boolean | number;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnFocus?: boolean;\n  /**\n   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n   *\n   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n   *\n   * Note: requires [`setupListeners`](./setupListeners) to have been called.\n   */\n  refetchOnReconnect?: boolean;\n  /**\n   * Defaults to `'delayed'`. This setting allows you to control when tags are invalidated after a mutation.\n   *\n   * - `'immediately'`: Queries are invalidated instantly after the mutation finished, even if they are running.\n   *   If the query provides tags that were invalidated while it ran, it won't be re-fetched.\n   * - `'delayed'`: Invalidation only happens after all queries and mutations are settled.\n   *   This ensures that queries are always invalidated correctly and automatically \"batches\" invalidations of concurrent mutations.\n   *   Note that if you constantly have some queries (or mutations) running, this can delay tag invalidations indefinitely.\n   */\n  invalidationBehavior?: 'delayed' | 'immediately';\n  /**\n   * A function that is passed every dispatched action. If this returns something other than `undefined`,\n   * that return value will be used to rehydrate fulfilled & errored queries.\n   *\n   * @example\n   *\n   * ```ts\n   * // codeblock-meta title=\"next-redux-wrapper rehydration example\"\n   * import type { Action, PayloadAction } from '@reduxjs/toolkit'\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n   * import { HYDRATE } from 'next-redux-wrapper'\n   *\n   * type RootState = any; // normally inferred from state\n   *\n   * function isHydrateAction(action: Action): action is PayloadAction<RootState> {\n   *   return action.type === HYDRATE\n   * }\n   *\n   * export const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   // highlight-start\n   *   extractRehydrationInfo(action, { reducerPath }): any {\n   *     if (isHydrateAction(action)) {\n   *       return action.payload[reducerPath]\n   *     }\n   *   },\n   *   // highlight-end\n   *   endpoints: (build) => ({\n   *     // omitted\n   *   }),\n   * })\n   * ```\n   */\n  extractRehydrationInfo?: (action: UnknownAction, {\n    reducerPath\n  }: {\n    reducerPath: ReducerPath;\n  }) => undefined | CombinedState<NoInfer<Definitions>, NoInfer<TagTypes>, NoInfer<ReducerPath>>;\n\n  /**\n   * A function that is called when a schema validation fails.\n   *\n   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).\n   *\n   * `NamedSchemaError` has the following properties:\n   * - `issues`: an array of issues that caused the validation to fail\n   * - `value`: the value that was passed to the schema\n   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *     }),\n   *   }),\n   *   onSchemaFailure: (error, info) => {\n   *     console.error(error, info)\n   *   },\n   * })\n   * ```\n   */\n  onSchemaFailure?: SchemaFailureHandler;\n\n  /**\n   * Convert a schema validation failure into an error shape matching base query errors.\n   *\n   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   }),\n   *   catchSchemaFailure: (error, info) => ({\n   *     status: \"CUSTOM_ERROR\",\n   *     error: error.schemaName + \" failed validation\",\n   *     data: error.issues,\n   *   }),\n   * })\n   * ```\n   */\n  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>;\n\n  /**\n   * Defaults to `false`.\n   *\n   * If set to `true`, will skip schema validation for all endpoints, unless overridden by the endpoint.\n   *\n   * @example\n   * ```ts\n   * // codeblock-meta no-transpile\n   * import { createApi } from '@reduxjs/toolkit/query/react'\n   * import * as v from \"valibot\"\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n   *   skipSchemaValidation: process.env.NODE_ENV === \"test\", // skip schema validation in tests, since we'll be mocking the response\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, { id: number }>({\n   *       query: ({ id }) => `/post/${id}`,\n   *       responseSchema: v.object({ id: v.number(), name: v.string() }),\n   *     }),\n   *   })\n   * })\n   * ```\n   */\n  skipSchemaValidation?: boolean;\n}\nexport type CreateApi<Modules extends ModuleName> = {\n  /**\n   * Creates a service to use in your application. Contains only the basic redux logic (the core module).\n   *\n   * @link https://redux-toolkit.js.org/rtk-query/api/createApi\n   */\n  <BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never>(options: CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>): Api<BaseQuery, Definitions, ReducerPath, TagTypes, Modules>;\n};\n\n/**\n * Builds a `createApi` method based on the provided `modules`.\n *\n * @link https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api\n *\n * @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n *   coreModule(),\n *   reactHooksModule({\n *     hooks: {\n *       useDispatch: createDispatchHook(MyContext),\n *       useSelector: createSelectorHook(MyContext),\n *       useStore: createStoreHook(MyContext)\n *     }\n *   })\n * );\n * ```\n *\n * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints\n * @returns A `createApi` method using the provided `modules`.\n */\nexport function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(...modules: Modules): CreateApi<Modules[number]['name']> {\n  return function baseCreateApi(options) {\n    const extractRehydrationInfo = weakMapMemoize((action: UnknownAction) => options.extractRehydrationInfo?.(action, {\n      reducerPath: (options.reducerPath ?? 'api') as any\n    }));\n    const optionsWithDefaults: CreateApiOptions<any, any, any, any> = {\n      reducerPath: 'api',\n      keepUnusedDataFor: 60,\n      refetchOnMountOrArgChange: false,\n      refetchOnFocus: false,\n      refetchOnReconnect: false,\n      invalidationBehavior: 'delayed',\n      ...options,\n      extractRehydrationInfo,\n      serializeQueryArgs(queryArgsApi) {\n        let finalSerializeQueryArgs = defaultSerializeQueryArgs;\n        if ('serializeQueryArgs' in queryArgsApi.endpointDefinition) {\n          const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs!;\n          finalSerializeQueryArgs = queryArgsApi => {\n            const initialResult = endpointSQA(queryArgsApi);\n            if (typeof initialResult === 'string') {\n              // If the user function returned a string, use it as-is\n              return initialResult;\n            } else {\n              // Assume they returned an object (such as a subset of the original\n              // query args) or a primitive, and serialize it ourselves\n              return defaultSerializeQueryArgs({\n                ...queryArgsApi,\n                queryArgs: initialResult\n              });\n            }\n          };\n        } else if (options.serializeQueryArgs) {\n          finalSerializeQueryArgs = options.serializeQueryArgs;\n        }\n        return finalSerializeQueryArgs(queryArgsApi);\n      },\n      tagTypes: [...(options.tagTypes || [])]\n    };\n    const context: ApiContext<EndpointDefinitions> = {\n      endpointDefinitions: {},\n      batch(fn) {\n        // placeholder \"batch\" method to be overridden by plugins, for example with React.unstable_batchedUpdate\n        fn();\n      },\n      apiUid: nanoid(),\n      extractRehydrationInfo,\n      hasRehydrationInfo: weakMapMemoize(action => extractRehydrationInfo(action) != null)\n    };\n    const api = {\n      injectEndpoints,\n      enhanceEndpoints({\n        addTagTypes,\n        endpoints\n      }) {\n        if (addTagTypes) {\n          for (const eT of addTagTypes) {\n            if (!optionsWithDefaults.tagTypes!.includes(eT as any)) {\n              ;\n              (optionsWithDefaults.tagTypes as any[]).push(eT);\n            }\n          }\n        }\n        if (endpoints) {\n          for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {\n            if (typeof partialDefinition === 'function') {\n              partialDefinition(context.endpointDefinitions[endpointName]);\n            } else {\n              Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);\n            }\n          }\n        }\n        return api;\n      }\n    } as Api<BaseQueryFn, {}, string, string, Modules[number]['name']>;\n    const initializedModules = modules.map(m => m.init(api as any, optionsWithDefaults as any, context));\n    function injectEndpoints(inject: Parameters<typeof api.injectEndpoints>[0]) {\n      const evaluatedEndpoints = inject.endpoints({\n        query: x => ({\n          ...x,\n          type: DefinitionType.query\n        }) as any,\n        mutation: x => ({\n          ...x,\n          type: DefinitionType.mutation\n        }) as any,\n        infiniteQuery: x => ({\n          ...x,\n          type: DefinitionType.infinitequery\n        }) as any\n      });\n      for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {\n        if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {\n          if (inject.overrideExisting === 'throw') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(39) : `called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          } else if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n            console.error(`called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n          }\n          continue;\n        }\n        if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n          if (isInfiniteQueryDefinition(definition)) {\n            const {\n              infiniteQueryOptions\n            } = definition;\n            const {\n              maxPages,\n              getPreviousPageParam\n            } = infiniteQueryOptions;\n            if (typeof maxPages === 'number') {\n              if (maxPages < 1) {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(40) : `maxPages for endpoint '${endpointName}' must be a number greater than 0`);\n              }\n              if (typeof getPreviousPageParam !== 'function') {\n                throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(41) : `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`);\n              }\n            }\n          }\n        }\n        context.endpointDefinitions[endpointName] = definition;\n        for (const m of initializedModules) {\n          m.injectEndpoint(endpointName, definition);\n        }\n      }\n      return api as any;\n    }\n    return api.injectEndpoints({\n      endpoints: options.endpoints as any\n    });\n  };\n}","import type { QueryCacheKey } from './core/apiState';\nimport type { EndpointDefinition } from './endpointDefinitions';\nimport { isPlainObject } from './core/rtkImports';\nconst cache: WeakMap<any, string> | undefined = WeakMap ? new WeakMap() : undefined;\nexport const defaultSerializeQueryArgs: SerializeQueryArgs<any> = ({\n  endpointName,\n  queryArgs\n}) => {\n  let serialized = '';\n  const cached = cache?.get(queryArgs);\n  if (typeof cached === 'string') {\n    serialized = cached;\n  } else {\n    const stringified = JSON.stringify(queryArgs, (key, value) => {\n      // Handle bigints\n      value = typeof value === 'bigint' ? {\n        $bigint: value.toString()\n      } : value;\n      // Sort the object keys before stringifying, to prevent useQuery({ a: 1, b: 2 }) having a different cache key than useQuery({ b: 2, a: 1 })\n      value = isPlainObject(value) ? Object.keys(value).sort().reduce<any>((acc, key) => {\n        acc[key] = (value as any)[key];\n        return acc;\n      }, {}) : value;\n      return value;\n    });\n    if (isPlainObject(queryArgs)) {\n      cache?.set(queryArgs, stringified);\n    }\n    serialized = stringified;\n  }\n  return `${endpointName}(${serialized})`;\n};\nexport type SerializeQueryArgs<QueryArgs, ReturnType = string> = (_: {\n  queryArgs: QueryArgs;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => ReturnType;\nexport type InternalSerializeQueryArgs = (_: {\n  queryArgs: any;\n  endpointDefinition: EndpointDefinition<any, any, any, any>;\n  endpointName: string;\n}) => QueryCacheKey;","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { BaseQueryFn } from './baseQueryTypes';\nexport const _NEVER = /* @__PURE__ */Symbol();\nexport type NEVER = typeof _NEVER;\n\n/**\n * Creates a \"fake\" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.\n * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.\n */\nexport function fakeBaseQuery<ErrorType>(): BaseQueryFn<void, NEVER, ErrorType, {}> {\n  return function () {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(33) : 'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.');\n  };\n}","/**\n * Note: this file should import all other files for type discovery and declaration merging\n */\nimport type { ActionCreatorWithPayload, Middleware, Reducer, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport { enablePatches } from 'immer';\nimport type { Api, Module } from '../apiTypes';\nimport type { BaseQueryFn } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinitions, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryArgFromAnyQuery, QueryDefinition, TagDescription } from '../endpointDefinitions';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { assertCast, safeAssign } from '../tsHelpers';\nimport type { CombinedState, MutationKeys, QueryKeys, RootState } from './apiState';\nimport type { BuildInitiateApiEndpointMutation, BuildInitiateApiEndpointQuery, MutationActionCreatorResult, QueryActionCreatorResult, InfiniteQueryActionCreatorResult, BuildInitiateApiEndpointInfiniteQuery } from './buildInitiate';\nimport { buildInitiate } from './buildInitiate';\nimport type { ReferenceCacheCollection, ReferenceCacheLifecycle, ReferenceQueryLifecycle } from './buildMiddleware';\nimport { buildMiddleware } from './buildMiddleware';\nimport type { BuildSelectorsApiEndpointInfiniteQuery, BuildSelectorsApiEndpointMutation, BuildSelectorsApiEndpointQuery } from './buildSelectors';\nimport { buildSelectors } from './buildSelectors';\nimport type { SliceActions, UpsertEntries } from './buildSlice';\nimport { buildSlice } from './buildSlice';\nimport type { AllQueryKeys, BuildThunksApiEndpointInfiniteQuery, BuildThunksApiEndpointMutation, BuildThunksApiEndpointQuery, PatchQueryDataThunk, QueryArgFromAnyQueryDefinition, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nimport { buildThunks } from './buildThunks';\nimport { createSelector as _createSelector } from './rtkImports';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\n\n/**\n * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_\n * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value\n *\n * @overloadSummary\n * `force`\n * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.\n */\nexport type PrefetchOptions = {\n  ifOlderThan?: false | number;\n} | {\n  force?: boolean;\n};\nexport const coreModuleName = /* @__PURE__ */Symbol();\nexport type CoreModule = typeof coreModuleName | ReferenceCacheLifecycle | ReferenceQueryLifecycle | ReferenceCacheCollection;\nexport type ThunkWithReturnValue<T> = ThunkAction<T, any, any, UnknownAction>;\nexport interface ApiModules<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nBaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {\n  [coreModuleName]: {\n    /**\n     * This api's reducer should be mounted at `store[api.reducerPath]`.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducerPath: ReducerPath;\n    /**\n     * Internal actions not part of the public API. Note: These are subject to change at any given time.\n     */\n    internalActions: InternalActions;\n    /**\n     *  A standard redux reducer that enables core functionality. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    reducer: Reducer<CombinedState<Definitions, TagTypes, ReducerPath>, UnknownAction>;\n    /**\n     * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.\n     *\n     * @example\n     * ```ts\n     * configureStore({\n     *   reducer: {\n     *     [api.reducerPath]: api.reducer,\n     *   },\n     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n     * })\n     * ```\n     */\n    middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>>;\n    /**\n     * A collection of utility thunks for various situations.\n     */\n    util: {\n      /**\n       * A thunk that (if dispatched) will return a specific running query, identified\n       * by `endpointName` and `arg`.\n       * If that query is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific query triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueryThunk<EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>): ThunkWithReturnValue<QueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'query';\n      }> | InfiniteQueryActionCreatorResult<Definitions[EndpointName] & {\n        type: 'infinitequery';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return a specific running mutation, identified\n       * by `endpointName` and `fixedCacheKey` or `requestId`.\n       * If that mutation is not running, dispatching the thunk will result in `undefined`.\n       *\n       * Can be used to await a specific mutation triggered in any way,\n       * including via hook trigger functions or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationThunk<EndpointName extends MutationKeys<Definitions>>(endpointName: EndpointName, fixedCacheKeyOrRequestId: string): ThunkWithReturnValue<MutationActionCreatorResult<Definitions[EndpointName] & {\n        type: 'mutation';\n      }> | undefined>;\n\n      /**\n       * A thunk that (if dispatched) will return all running queries.\n       *\n       * Useful for SSR scenarios to await all running queries triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningQueriesThunk(): ThunkWithReturnValue<Array<QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>>;\n\n      /**\n       * A thunk that (if dispatched) will return all running mutations.\n       *\n       * Useful for SSR scenarios to await all running mutations triggered in any way,\n       * including via hook calls or manually dispatching `initiate` actions.\n       *\n       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n       */\n      getRunningMutationsThunk(): ThunkWithReturnValue<Array<MutationActionCreatorResult<any>>>;\n\n      /**\n       * A Redux thunk that can be used to manually trigger pre-fetching of data.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.\n       *\n       * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.\n       *\n       * @example\n       *\n       * ```ts no-transpile\n       * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))\n       * ```\n       */\n      prefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction>;\n      /**\n       * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and an `updateRecipe` callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.\n       *\n       * The thunk executes _synchronously_, and returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).\n       *\n       * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, arg, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.\n       *\n       * Note that the first two arguments (`endpointName` and `arg`) are used to determine which existing cache entry to update. If no existing cache entry is found, the `updateRecipe` callback will not run.\n       *\n       * @example\n       *\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       * ```\n       */\n      updateQueryData: UpdateQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux thunk action creator that, when dispatched, acts as an artificial API request to upsert a value into the cache.\n       *\n       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and the data to upsert.\n       *\n       * If no cache entry for that cache key exists, a cache entry will be created and the data added. If a cache entry already exists, this will _overwrite_ the existing cache entry data.\n       *\n       * The thunk executes _asynchronously_, and returns a promise that resolves when the store has been updated.\n       *\n       * If dispatched while an actual request is in progress, both the upsert and request will be handled as soon as they resolve, resulting in a \"last result wins\" update behavior.\n       *\n       * @example\n       *\n       * ```ts\n       * await dispatch(\n       *   api.util.upsertQueryData('getPost', {id: 1}, {id: 1, text: \"Hello!\"})\n       * )\n       * ```\n       */\n      upsertQueryData: UpsertQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n      /**\n       * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.\n       *\n       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.\n       *\n       * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.\n       *\n       * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.\n       *\n       * @example\n       * ```ts\n       * const patchCollection = dispatch(\n       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n       *     draftPosts.push({ id: 1, name: 'Teddy' })\n       *   })\n       * )\n       *\n       * // later\n       * dispatch(\n       *   api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)\n       * )\n       *\n       * // or\n       * patchCollection.undo()\n       * ```\n       */\n      patchQueryData: PatchQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n      /**\n       * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.resetApiState())\n       * ```\n       */\n      resetApiState: SliceActions['resetApiState'];\n      upsertQueryEntries: UpsertEntries<Definitions>;\n\n      /**\n       * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).\n       *\n       * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.\n       *\n       * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.\n       *\n       * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:\n       *\n       * - `[TagType]`\n       * - `[{ type: TagType }]`\n       * - `[{ type: TagType, id: number | string }]`\n       *\n       * @example\n       *\n       * ```ts\n       * dispatch(api.util.invalidateTags(['Post']))\n       * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))\n       * dispatch(\n       *   api.util.invalidateTags([\n       *     { type: 'Post', id: 1 },\n       *     { type: 'Post', id: 'LIST' },\n       *   ])\n       * )\n       * ```\n       */\n      invalidateTags: ActionCreatorWithPayload<Array<TagDescription<TagTypes> | null | undefined>, string>;\n\n      /**\n       * A function to select all `{ endpointName, originalArgs, queryCacheKey }` combinations that would be invalidated by a specific set of tags.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectInvalidatedBy: (state: RootState<Definitions, string, ReducerPath>, tags: ReadonlyArray<TagDescription<TagTypes> | null | undefined>) => Array<{\n        endpointName: string;\n        originalArgs: any;\n        queryCacheKey: string;\n      }>;\n\n      /**\n       * A function to select all arguments currently cached for a given endpoint.\n       *\n       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n       */\n      selectCachedArgsForQuery: <QueryName extends AllQueryKeys<Definitions>>(state: RootState<Definitions, string, ReducerPath>, queryName: QueryName) => Array<QueryArgFromAnyQuery<Definitions[QueryName]>>;\n    };\n    /**\n     * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.\n     */\n    endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? ApiEndpointQuery<Definitions[K], Definitions> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? ApiEndpointMutation<Definitions[K], Definitions> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? ApiEndpointInfiniteQuery<Definitions[K], Definitions> : never };\n  };\n}\nexport interface ApiEndpointQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends QueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointQuery<Definition>, BuildInitiateApiEndpointQuery<Definition>, BuildSelectorsApiEndpointQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport interface ApiEndpointInfiniteQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends InfiniteQueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointInfiniteQuery<Definition>, BuildInitiateApiEndpointInfiniteQuery<Definition>, BuildSelectorsApiEndpointInfiniteQuery<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface ApiEndpointMutation<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends MutationDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointMutation<Definition>, BuildInitiateApiEndpointMutation<Definition>, BuildSelectorsApiEndpointMutation<Definition, Definitions> {\n  name: string;\n  /**\n   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n   */\n  Types: NonNullable<Definition['Types']>;\n}\nexport type ListenerActions = {\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onOnline: typeof onOnline;\n  onOffline: typeof onOffline;\n  /**\n   * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior\n   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners\n   */\n  onFocus: typeof onFocus;\n  onFocusLost: typeof onFocusLost;\n};\nexport type InternalActions = SliceActions & ListenerActions;\nexport interface CoreModuleOptions {\n  /**\n   * A selector creator (usually from `reselect`, or matching the same signature)\n   */\n  createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module containing the basic redux logic for use with `buildCreateApi`.\n *\n * @example\n * ```ts\n * const createBaseApi = buildCreateApi(coreModule());\n * ```\n */\nexport const coreModule = ({\n  createSelector = _createSelector\n}: CoreModuleOptions = {}): Module<CoreModule> => ({\n  name: coreModuleName,\n  init(api, {\n    baseQuery,\n    tagTypes,\n    reducerPath,\n    serializeQueryArgs,\n    keepUnusedDataFor,\n    refetchOnMountOrArgChange,\n    refetchOnFocus,\n    refetchOnReconnect,\n    invalidationBehavior,\n    onSchemaFailure,\n    catchSchemaFailure,\n    skipSchemaValidation\n  }, context) {\n    enablePatches();\n    assertCast<InternalSerializeQueryArgs>(serializeQueryArgs);\n    const assertTagType: AssertTagTypes = tag => {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        if (!tagTypes.includes(tag.type as any)) {\n          console.error(`Tag type '${tag.type}' was used, but not specified in \\`tagTypes\\`!`);\n        }\n      }\n      return tag;\n    };\n    Object.assign(api, {\n      reducerPath,\n      endpoints: {},\n      internalActions: {\n        onOnline,\n        onOffline,\n        onFocus,\n        onFocusLost\n      },\n      util: {}\n    });\n    const selectors = buildSelectors({\n      serializeQueryArgs: serializeQueryArgs as any,\n      reducerPath,\n      createSelector\n    });\n    const {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery,\n      buildQuerySelector,\n      buildInfiniteQuerySelector,\n      buildMutationSelector\n    } = selectors;\n    safeAssign(api.util, {\n      selectInvalidatedBy,\n      selectCachedArgsForQuery\n    });\n    const {\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      buildMatchThunkActions\n    } = buildThunks({\n      baseQuery,\n      reducerPath,\n      context,\n      api,\n      serializeQueryArgs,\n      assertTagType,\n      selectors,\n      onSchemaFailure,\n      catchSchemaFailure,\n      skipSchemaValidation\n    });\n    const {\n      reducer,\n      actions: sliceActions\n    } = buildSlice({\n      context,\n      queryThunk,\n      infiniteQueryThunk,\n      mutationThunk,\n      serializeQueryArgs,\n      reducerPath,\n      assertTagType,\n      config: {\n        refetchOnFocus,\n        refetchOnReconnect,\n        refetchOnMountOrArgChange,\n        keepUnusedDataFor,\n        reducerPath,\n        invalidationBehavior\n      }\n    });\n    safeAssign(api.util, {\n      patchQueryData,\n      updateQueryData,\n      upsertQueryData,\n      prefetch,\n      resetApiState: sliceActions.resetApiState,\n      upsertQueryEntries: sliceActions.cacheEntriesUpserted as any\n    });\n    safeAssign(api.internalActions, sliceActions);\n    const {\n      middleware,\n      actions: middlewareActions\n    } = buildMiddleware({\n      reducerPath,\n      context,\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      assertTagType,\n      selectors\n    });\n    safeAssign(api.util, middlewareActions);\n    safeAssign(api, {\n      reducer: reducer as any,\n      middleware\n    });\n    const {\n      buildInitiateQuery,\n      buildInitiateInfiniteQuery,\n      buildInitiateMutation,\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueriesThunk,\n      getRunningQueryThunk\n    } = buildInitiate({\n      queryThunk,\n      mutationThunk,\n      infiniteQueryThunk,\n      api,\n      serializeQueryArgs: serializeQueryArgs as any,\n      context\n    });\n    safeAssign(api.util, {\n      getRunningMutationThunk,\n      getRunningMutationsThunk,\n      getRunningQueryThunk,\n      getRunningQueriesThunk\n    });\n    return {\n      name: coreModuleName,\n      injectEndpoint(endpointName, definition) {\n        const anyApi = api as any as Api<any, Record<string, any>, string, string, CoreModule>;\n        const endpoint = anyApi.endpoints[endpointName] ??= {} as any;\n        if (isQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildQuerySelector(endpointName, definition),\n            initiate: buildInitiateQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n        if (isMutationDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildMutationSelector(),\n            initiate: buildInitiateMutation(endpointName)\n          }, buildMatchThunkActions(mutationThunk, endpointName));\n        }\n        if (isInfiniteQueryDefinition(definition)) {\n          safeAssign(endpoint, {\n            name: endpointName,\n            select: buildInfiniteQuerySelector(endpointName, definition),\n            initiate: buildInitiateInfiniteQuery(endpointName, definition)\n          }, buildMatchThunkActions(queryThunk, endpointName));\n        }\n      }\n    };\n  }\n});","export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n  return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;","import type { InternalHandlerBuilder, SubscriptionSelectors } from './types';\nimport type { SubscriptionState } from '../apiState';\nimport { produceWithPatches } from 'immer';\nimport type { Action } from '@reduxjs/toolkit';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildBatchedActionsHandler: InternalHandlerBuilder<[actionShouldContinue: boolean, returnValue: SubscriptionSelectors | boolean]> = ({\n  api,\n  queryThunk,\n  internalState\n}) => {\n  const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;\n  let previousSubscriptions: SubscriptionState = null as unknown as SubscriptionState;\n  let updateSyncTimer: ReturnType<typeof window.setTimeout> | null = null;\n  const {\n    updateSubscriptionOptions,\n    unsubscribeQueryResult\n  } = api.internalActions;\n\n  // Actually intentionally mutate the subscriptions state used in the middleware\n  // This is done to speed up perf when loading many components\n  const actuallyMutateSubscriptions = (mutableState: SubscriptionState, action: Action) => {\n    if (updateSubscriptionOptions.match(action)) {\n      const {\n        queryCacheKey,\n        requestId,\n        options\n      } = action.payload;\n      if (mutableState?.[queryCacheKey]?.[requestId]) {\n        mutableState[queryCacheKey]![requestId] = options;\n      }\n      return true;\n    }\n    if (unsubscribeQueryResult.match(action)) {\n      const {\n        queryCacheKey,\n        requestId\n      } = action.payload;\n      if (mutableState[queryCacheKey]) {\n        delete mutableState[queryCacheKey]![requestId];\n      }\n      return true;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) {\n      delete mutableState[action.payload.queryCacheKey];\n      return true;\n    }\n    if (queryThunk.pending.match(action)) {\n      const {\n        meta: {\n          arg,\n          requestId\n        }\n      } = action;\n      const substate = mutableState[arg.queryCacheKey] ??= {};\n      substate[`${requestId}_running`] = {};\n      if (arg.subscribe) {\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n      }\n      return true;\n    }\n    let mutated = false;\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {\n      const state = mutableState[action.meta.arg.queryCacheKey] || {};\n      const key = `${action.meta.requestId}_running`;\n      mutated ||= !!state[key];\n      delete state[key];\n    }\n    if (queryThunk.rejected.match(action)) {\n      const {\n        meta: {\n          condition,\n          arg,\n          requestId\n        }\n      } = action;\n      if (condition && arg.subscribe) {\n        const substate = mutableState[arg.queryCacheKey] ??= {};\n        substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n        mutated = true;\n      }\n    }\n    return mutated;\n  };\n  const getSubscriptions = () => internalState.currentSubscriptions;\n  const getSubscriptionCount = (queryCacheKey: string) => {\n    const subscriptions = getSubscriptions();\n    const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {};\n    return countObjectKeys(subscriptionsForQueryArg);\n  };\n  const isRequestSubscribed = (queryCacheKey: string, requestId: string) => {\n    const subscriptions = getSubscriptions();\n    return !!subscriptions?.[queryCacheKey]?.[requestId];\n  };\n  const subscriptionSelectors: SubscriptionSelectors = {\n    getSubscriptions,\n    getSubscriptionCount,\n    isRequestSubscribed\n  };\n  return (action, mwApi): [actionShouldContinue: boolean, result: SubscriptionSelectors | boolean] => {\n    if (!previousSubscriptions) {\n      // Initialize it the first time this handler runs\n      previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n    }\n    if (api.util.resetApiState.match(action)) {\n      previousSubscriptions = internalState.currentSubscriptions = {};\n      updateSyncTimer = null;\n      return [true, false];\n    }\n\n    // Intercept requests by hooks to see if they're subscribed\n    // We return the internal state reference so that hooks\n    // can do their own checks to see if they're still active.\n    // It's stupid and hacky, but it does cut down on some dispatch calls.\n    if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {\n      return [false, subscriptionSelectors];\n    }\n\n    // Update subscription data based on this action\n    const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);\n    let actionShouldContinue = true;\n    if (didMutate) {\n      if (!updateSyncTimer) {\n        // We only use the subscription state for the Redux DevTools at this point,\n        // as the real data is kept here in the middleware.\n        // Given that, we can throttle synchronizing this state significantly to\n        // save on overall perf.\n        // In 1.9, it was updated in a microtask, but now we do it at most every 500ms.\n        updateSyncTimer = setTimeout(() => {\n          // Deep clone the current subscription data\n          const newSubscriptions: SubscriptionState = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n          // Figure out a smaller diff between original and current\n          const [, patches] = produceWithPatches(previousSubscriptions, () => newSubscriptions);\n\n          // Sync the store state for visibility\n          mwApi.next(api.internalActions.subscriptionsUpdated(patches));\n          // Save the cloned state for later reference\n          previousSubscriptions = newSubscriptions;\n          updateSyncTimer = null;\n        }, 500);\n      }\n      const isSubscriptionSliceAction = typeof action.type == 'string' && !!action.type.startsWith(subscriptionsPrefix);\n      const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;\n      actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;\n    }\n    return [actionShouldContinue, false];\n  };\n};","import type { QueryDefinition } from '../../endpointDefinitions';\nimport type { ConfigState, QueryCacheKey } from '../apiState';\nimport { isAnyOf } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, QueryStateMeta, SubMiddlewareApi, TimeoutId } from './types';\nexport type ReferenceCacheCollection = never;\nfunction isObjectEmpty(obj: Record<any, any>) {\n  // Apparently a for..in loop is faster than `Object.keys()` here:\n  // https://stackoverflow.com/a/59787784/62937\n  for (const k in obj) {\n    // If there is at least one key, it's not empty\n    return false;\n  }\n  return true;\n}\nexport type CacheCollectionQueryExtraOptions = {\n  /**\n   * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_\n   *\n   * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n   */\n  keepUnusedDataFor?: number;\n};\n\n// Per https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value , browsers store\n// `setTimeout()` timer values in a 32-bit int. If we pass a value in that's larger than that,\n// it wraps and ends up executing immediately.\n// Our `keepUnusedDataFor` values are in seconds, so adjust the numbers here accordingly.\nexport const THIRTY_TWO_BIT_MAX_INT = 2_147_483_647;\nexport const THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2_147_483_647 / 1_000 - 1;\nexport const buildCacheCollectionHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  api,\n  queryThunk,\n  context,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectConfig\n  }\n}) => {\n  const {\n    removeQueryResult,\n    unsubscribeQueryResult,\n    cacheEntriesUpserted\n  } = api.internalActions;\n  const canTriggerUnsubscribe = isAnyOf(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);\n  function anySubscriptionsRemainingForKey(queryCacheKey: string) {\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    return !!subscriptions && !isObjectEmpty(subscriptions);\n  }\n  const currentRemovalTimeouts: QueryStateMeta<TimeoutId> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, internalState) => {\n    const state = mwApi.getState();\n    const config = selectConfig(state);\n    if (canTriggerUnsubscribe(action)) {\n      let queryCacheKeys: QueryCacheKey[];\n      if (cacheEntriesUpserted.match(action)) {\n        queryCacheKeys = action.payload.map(entry => entry.queryDescription.queryCacheKey);\n      } else {\n        const {\n          queryCacheKey\n        } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;\n        queryCacheKeys = [queryCacheKey];\n      }\n      handleUnsubscribeMany(queryCacheKeys, mwApi, config);\n    }\n    if (api.util.resetApiState.match(action)) {\n      for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {\n        if (timeout) clearTimeout(timeout);\n        delete currentRemovalTimeouts[key];\n      }\n    }\n    if (context.hasRehydrationInfo(action)) {\n      const {\n        queries\n      } = context.extractRehydrationInfo(action)!;\n      // Gotcha:\n      // If rehydrating before the endpoint has been injected,the global `keepUnusedDataFor`\n      // will be used instead of the endpoint-specific one.\n      handleUnsubscribeMany(Object.keys(queries) as QueryCacheKey[], mwApi, config);\n    }\n  };\n  function handleUnsubscribeMany(cacheKeys: QueryCacheKey[], api: SubMiddlewareApi, config: ConfigState<string>) {\n    const state = api.getState();\n    for (const queryCacheKey of cacheKeys) {\n      const entry = selectQueryEntry(state, queryCacheKey);\n      handleUnsubscribe(queryCacheKey, entry?.endpointName, api, config);\n    }\n  }\n  function handleUnsubscribe(queryCacheKey: QueryCacheKey, endpointName: string | undefined, api: SubMiddlewareApi, config: ConfigState<string>) {\n    const endpointDefinition = context.endpointDefinitions[endpointName!] as QueryDefinition<any, any, any, any>;\n    const keepUnusedDataFor = endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor;\n    if (keepUnusedDataFor === Infinity) {\n      // Hey, user said keep this forever!\n      return;\n    }\n    // Prevent `setTimeout` timers from overflowing a 32-bit internal int, by\n    // clamping the max value to be at most 1000ms less than the 32-bit max.\n    // Look, a 24.8-day keepalive ought to be enough for anybody, right? :)\n    // Also avoid negative values too.\n    const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));\n    if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n      const currentTimeout = currentRemovalTimeouts[queryCacheKey];\n      if (currentTimeout) {\n        clearTimeout(currentTimeout);\n      }\n      currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {\n        if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n          api.dispatch(removeQueryResult({\n            queryCacheKey\n          }));\n        }\n        delete currentRemovalTimeouts![queryCacheKey];\n      }, finalKeepUnusedDataFor * 1000);\n    }\n  }\n  return handler;\n};","import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { BaseQueryFn, BaseQueryMeta, BaseQueryResult } from '../../baseQueryTypes';\nimport type { BaseEndpointDefinition } from '../../endpointDefinitions';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { QueryCacheKey, RootState } from '../apiState';\nimport type { MutationResultSelectorResult, QueryResultSelectorResult } from '../buildSelectors';\nimport { getMutationCacheKey } from '../buildSlice';\nimport type { PatchCollection, Recipe } from '../buildThunks';\nimport { isAsyncThunkAction, isFulfilled } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseWithKnownReason, SubMiddlewareApi } from './types';\nexport type ReferenceCacheLifecycle = never;\nexport interface QueryBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends LifecycleApi<ReducerPath> {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): QueryResultSelectorResult<{\n    type: DefinitionType.query;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n  /**\n   * Updates the current cache entry value.\n   * For documentation see `api.util.updateQueryData`.\n   */\n  updateCachedData(updateRecipe: Recipe<ResultType>): PatchCollection;\n}\nexport type MutationBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = LifecycleApi<ReducerPath> & {\n  /**\n   * Gets the current value of this cache entry.\n   */\n  getCacheEntry(): MutationResultSelectorResult<{\n    type: DefinitionType.mutation;\n  } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, BaseQueryResult<BaseQuery>>>;\n};\ntype LifecycleApi<ReducerPath extends string = string> = {\n  /**\n   * The dispatch method for the store\n   */\n  dispatch: ThunkDispatch<any, any, UnknownAction>;\n  /**\n   * A method to get the current state\n   */\n  getState(): RootState<any, any, ReducerPath>;\n  /**\n   * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.\n   */\n  extra: unknown;\n  /**\n   * A unique ID generated for the mutation\n   */\n  requestId: string;\n};\ntype CacheLifecyclePromises<ResultType = unknown, MetaType = unknown> = {\n  /**\n   * Promise that will resolve with the first value for this cache key.\n   * This allows you to `await` until an actual value is in cache.\n   *\n   * If the cache entry is removed from the cache before any value has ever\n   * been resolved, this Promise will reject with\n   * `new Error('Promise never resolved before cacheEntryRemoved.')`\n   * to prevent memory leaks.\n   * You can just re-throw that error (or not handle it at all) -\n   * it will be caught outside of `cacheEntryAdded`.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  cacheDataLoaded: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: MetaType;\n  }, typeof neverResolvedError>;\n  /**\n   * Promise that allows you to wait for the point in time when the cache entry\n   * has been removed from the cache, by not being used/subscribed to any more\n   * in the application for too long or by dispatching `api.util.resetApiState`.\n   */\n  cacheEntryRemoved: Promise<void>;\n};\nexport interface QueryCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>> {}\nexport type MutationCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>>;\nexport type CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: QueryCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type CacheLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  onCacheEntryAdded?(arg: QueryArg, api: MutationCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nconst neverResolvedError = new Error('Promise never resolved before cacheEntryRemoved.') as Error & {\n  message: 'Promise never resolved before cacheEntryRemoved.';\n};\nexport const buildCacheLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  reducerPath,\n  context,\n  queryThunk,\n  mutationThunk,\n  internalState,\n  selectors: {\n    selectQueryEntry,\n    selectApiState\n  }\n}) => {\n  const isQueryThunk = isAsyncThunkAction(queryThunk);\n  const isMutationThunk = isAsyncThunkAction(mutationThunk);\n  const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    valueResolved?(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    cacheEntryRemoved(): void;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  function resolveLifecycleEntry(cacheKey: string, data: unknown, meta: unknown) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle?.valueResolved) {\n      lifecycle.valueResolved({\n        data,\n        meta\n      });\n      delete lifecycle.valueResolved;\n    }\n  }\n  function removeLifecycleEntry(cacheKey: string) {\n    const lifecycle = lifecycleMap[cacheKey];\n    if (lifecycle) {\n      delete lifecycleMap[cacheKey];\n      lifecycle.cacheEntryRemoved();\n    }\n  }\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi, stateBefore) => {\n    const cacheKey = getCacheKey(action) as QueryCacheKey;\n    function checkForNewCacheKey(endpointName: string, cacheKey: QueryCacheKey, requestId: string, originalArgs: unknown) {\n      const oldEntry = selectQueryEntry(stateBefore, cacheKey);\n      const newEntry = selectQueryEntry(mwApi.getState(), cacheKey);\n      if (!oldEntry && newEntry) {\n        handleNewKey(endpointName, originalArgs, cacheKey, mwApi, requestId);\n      }\n    }\n    if (queryThunk.pending.match(action)) {\n      checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);\n    } else if (api.internalActions.cacheEntriesUpserted.match(action)) {\n      for (const {\n        queryDescription,\n        value\n      } of action.payload) {\n        const {\n          endpointName,\n          originalArgs,\n          queryCacheKey\n        } = queryDescription;\n        checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);\n        resolveLifecycleEntry(queryCacheKey, value, {});\n      }\n    } else if (mutationThunk.pending.match(action)) {\n      const state = mwApi.getState()[reducerPath].mutations[cacheKey];\n      if (state) {\n        handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);\n      }\n    } else if (isFulfilledThunk(action)) {\n      resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);\n    } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {\n      removeLifecycleEntry(cacheKey);\n    } else if (api.util.resetApiState.match(action)) {\n      for (const cacheKey of Object.keys(lifecycleMap)) {\n        removeLifecycleEntry(cacheKey);\n      }\n    }\n  };\n  function getCacheKey(action: any) {\n    if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;\n    if (isMutationThunk(action)) {\n      return action.meta.arg.fixedCacheKey ?? action.meta.requestId;\n    }\n    if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;\n    if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);\n    return '';\n  }\n  function handleNewKey(endpointName: string, originalArgs: any, queryCacheKey: string, mwApi: SubMiddlewareApi, requestId: string) {\n    const endpointDefinition = context.endpointDefinitions[endpointName];\n    const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded;\n    if (!onCacheEntryAdded) return;\n    const lifecycle = {} as CacheLifecycle;\n    const cacheEntryRemoved = new Promise<void>(resolve => {\n      lifecycle.cacheEntryRemoved = resolve;\n    });\n    const cacheDataLoaded: PromiseWithKnownReason<{\n      data: unknown;\n      meta: unknown;\n    }, typeof neverResolvedError> = Promise.race([new Promise<{\n      data: unknown;\n      meta: unknown;\n    }>(resolve => {\n      lifecycle.valueResolved = resolve;\n    }), cacheEntryRemoved.then(() => {\n      throw neverResolvedError;\n    })]);\n    // prevent uncaught promise rejections from happening.\n    // if the original promise is used in any way, that will create a new promise that will throw again\n    cacheDataLoaded.catch(() => {});\n    lifecycleMap[queryCacheKey] = lifecycle;\n    const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : queryCacheKey);\n    const extra = mwApi.dispatch((_, __, extra) => extra);\n    const lifecycleApi = {\n      ...mwApi,\n      getCacheEntry: () => selector(mwApi.getState()),\n      requestId,\n      extra,\n      updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n      cacheDataLoaded,\n      cacheEntryRemoved\n    };\n    const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi as any);\n    // if a `neverResolvedError` was thrown, but not handled in the running handler, do not let it leak out further\n    Promise.resolve(runningHandler).catch(e => {\n      if (e === neverResolvedError) return;\n      throw e;\n    });\n  }\n  return handler;\n};","import type { InternalHandlerBuilder } from './types';\nexport const buildDevCheckHandler: InternalHandlerBuilder = ({\n  api,\n  context: {\n    apiUid\n  },\n  reducerPath\n}) => {\n  return (action, mwApi) => {\n    if (api.util.resetApiState.match(action)) {\n      // dispatch after api reset\n      mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (api.internalActions.middlewareRegistered.match(action) && action.payload === apiUid && mwApi.getState()[reducerPath]?.config?.middlewareRegistered === 'conflict') {\n        console.warn(`There is a mismatch between slice and middleware for the reducerPath \"${reducerPath}\".\nYou can only have one api per reducer path, this will lead to crashes in various situations!${reducerPath === 'api' ? `\nIf you have multiple apis, you *have* to specify the reducerPath option when using createApi!` : ''}`);\n      }\n    }\n  };\n};","import { isAnyOf, isFulfilled, isRejected, isRejectedWithValue } from '../rtkImports';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport { calculateProvidedBy } from '../../endpointDefinitions';\nimport type { CombinedState, QueryCacheKey } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport { calculateProvidedByThunk } from '../buildThunks';\nimport type { SubMiddlewareApi, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  context: {\n    endpointDefinitions\n  },\n  mutationThunk,\n  queryThunk,\n  api,\n  assertTagType,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const isThunkActionWithTags = isAnyOf(isFulfilled(mutationThunk), isRejectedWithValue(mutationThunk));\n  const isQueryEnd = isAnyOf(isFulfilled(mutationThunk, queryThunk), isRejected(mutationThunk, queryThunk));\n  let pendingTagInvalidations: FullTagDescription<string>[] = [];\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isThunkActionWithTags(action)) {\n      invalidateTags(calculateProvidedByThunk(action, 'invalidatesTags', endpointDefinitions, assertTagType), mwApi);\n    } else if (isQueryEnd(action)) {\n      invalidateTags([], mwApi);\n    } else if (api.util.invalidateTags.match(action)) {\n      invalidateTags(calculateProvidedBy(action.payload, undefined, undefined, undefined, undefined, assertTagType), mwApi);\n    }\n  };\n  function hasPendingRequests(state: CombinedState<EndpointDefinitions, string, string>) {\n    const {\n      queries,\n      mutations\n    } = state;\n    for (const cacheRecord of [queries, mutations]) {\n      for (const key in cacheRecord) {\n        if (cacheRecord[key]?.status === QueryStatus.pending) return true;\n      }\n    }\n    return false;\n  }\n  function invalidateTags(newTags: readonly FullTagDescription<string>[], mwApi: SubMiddlewareApi) {\n    const rootState = mwApi.getState();\n    const state = rootState[reducerPath];\n    pendingTagInvalidations.push(...newTags);\n    if (state.config.invalidationBehavior === 'delayed' && hasPendingRequests(state)) {\n      return;\n    }\n    const tags = pendingTagInvalidations;\n    pendingTagInvalidations = [];\n    if (tags.length === 0) return;\n    const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);\n    context.batch(() => {\n      const valuesArray = Array.from(toInvalidate.values());\n      for (const {\n        queryCacheKey\n      } of valuesArray) {\n        const querySubState = state.queries[queryCacheKey];\n        const subscriptionSubState = internalState.currentSubscriptions[queryCacheKey] ?? {};\n        if (querySubState) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            mwApi.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            mwApi.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { QueryCacheKey, QuerySubstateIdentifier, Subscribers } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport type { QueryStateMeta, SubMiddlewareApi, TimeoutId, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nexport const buildPollingHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  queryThunk,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const currentPolls: QueryStateMeta<{\n    nextPollTimestamp: number;\n    timeout?: TimeoutId;\n    pollingInterval: number;\n  }> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {\n      updatePollingInterval(action.payload, mwApi);\n    }\n    if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {\n      updatePollingInterval(action.meta.arg, mwApi);\n    }\n    if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {\n      startNextPoll(action.meta.arg, mwApi);\n    }\n    if (api.util.resetApiState.match(action)) {\n      clearPolls();\n    }\n  };\n  function getCacheEntrySubscriptions(queryCacheKey: QueryCacheKey, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    return subscriptions;\n  }\n  function startNextPoll({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n    const {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) return;\n    const currentPoll = currentPolls[queryCacheKey];\n    if (currentPoll?.timeout) {\n      clearTimeout(currentPoll.timeout);\n      currentPoll.timeout = undefined;\n    }\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    currentPolls[queryCacheKey] = {\n      nextPollTimestamp,\n      pollingInterval: lowestPollingInterval,\n      timeout: setTimeout(() => {\n        if (state.config.focused || !skipPollingIfUnfocused) {\n          api.dispatch(refetchQuery(querySubState));\n        }\n        startNextPoll({\n          queryCacheKey\n        }, api);\n      }, lowestPollingInterval)\n    };\n  }\n  function updatePollingInterval({\n    queryCacheKey\n  }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n    const state = api.getState()[reducerPath];\n    const querySubState = state.queries[queryCacheKey];\n    const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n    if (!querySubState || querySubState.status === QueryStatus.uninitialized) {\n      return;\n    }\n    const {\n      lowestPollingInterval\n    } = findLowestPollingInterval(subscriptions);\n    if (!Number.isFinite(lowestPollingInterval)) {\n      cleanupPollForKey(queryCacheKey);\n      return;\n    }\n    const currentPoll = currentPolls[queryCacheKey];\n    const nextPollTimestamp = Date.now() + lowestPollingInterval;\n    if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {\n      startNextPoll({\n        queryCacheKey\n      }, api);\n    }\n  }\n  function cleanupPollForKey(key: string) {\n    const existingPoll = currentPolls[key];\n    if (existingPoll?.timeout) {\n      clearTimeout(existingPoll.timeout);\n    }\n    delete currentPolls[key];\n  }\n  function clearPolls() {\n    for (const key of Object.keys(currentPolls)) {\n      cleanupPollForKey(key);\n    }\n  }\n  function findLowestPollingInterval(subscribers: Subscribers = {}) {\n    let skipPollingIfUnfocused: boolean | undefined = false;\n    let lowestPollingInterval = Number.POSITIVE_INFINITY;\n    for (let key in subscribers) {\n      if (!!subscribers[key].pollingInterval) {\n        lowestPollingInterval = Math.min(subscribers[key].pollingInterval!, lowestPollingInterval);\n        skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;\n      }\n    }\n    return {\n      lowestPollingInterval,\n      skipPollingIfUnfocused\n    };\n  }\n  return handler;\n};","import type { BaseQueryError, BaseQueryFn, BaseQueryMeta } from '../../baseQueryTypes';\nimport { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions';\nimport type { Recipe } from '../buildThunks';\nimport { isFulfilled, isPending, isRejected } from '../rtkImports';\nimport type { MutationBaseLifecycleApi, QueryBaseLifecycleApi } from './cacheLifecycle';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseConstructorWithKnownReason, PromiseWithKnownReason } from './types';\nexport type ReferenceQueryLifecycle = never;\ntype QueryLifecyclePromises<ResultType, BaseQuery extends BaseQueryFn> = {\n  /**\n   * Promise that will resolve with the (transformed) query result.\n   *\n   * If the query fails, this promise will reject with the error.\n   *\n   * This allows you to `await` for the query to finish.\n   *\n   * If you don't interact with this promise, it will not throw.\n   */\n  queryFulfilled: PromiseWithKnownReason<{\n    /**\n     * The (transformed) query result.\n     */\n    data: ResultType;\n    /**\n     * The `meta` returned by the `baseQuery`\n     */\n    meta: BaseQueryMeta<BaseQuery>;\n  }, QueryFulfilledRejectionReason<BaseQuery>>;\n};\ntype QueryFulfilledRejectionReason<BaseQuery extends BaseQueryFn> = {\n  error: BaseQueryError<BaseQuery>;\n  /**\n   * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.\n   */\n  isUnhandledError: false;\n  /**\n   * The `meta` returned by the `baseQuery`\n   */\n  meta: BaseQueryMeta<BaseQuery>;\n} | {\n  error: unknown;\n  meta?: undefined;\n  /**\n   * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn`, `transformResponse` or `transformErrorResponse` throwing an error instead of handling it properly.\n   * There can not be made any assumption about the shape of `error`.\n   */\n  isUnhandledError: true;\n};\nexport type QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used to perform side-effects throughout the lifecycle of the query.\n   *\n   * @example\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * import { messageCreated } from './notificationsSlice\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       async onQueryStarted(id, { dispatch, queryFulfilled }) {\n   *         // `onStart` side-effect\n   *         dispatch(messageCreated('Fetching posts...'))\n   *         try {\n   *           const { data } = await queryFulfilled\n   *           // `onSuccess` side-effect\n   *           dispatch(messageCreated('Posts received!'))\n   *         } catch (err) {\n   *           // `onError` side-effect\n   *           dispatch(messageCreated('Error fetching posts!'))\n   *         }\n   *       }\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, queryLifeCycleApi: QueryLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type QueryLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n  /**\n   * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n   *\n   * Can be used for `optimistic updates`.\n   *\n   * @example\n   *\n   * ```ts\n   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n   * export interface Post {\n   *   id: number\n   *   name: string\n   * }\n   *\n   * const api = createApi({\n   *   baseQuery: fetchBaseQuery({\n   *     baseUrl: '/',\n   *   }),\n   *   tagTypes: ['Post'],\n   *   endpoints: (build) => ({\n   *     getPost: build.query<Post, number>({\n   *       query: (id) => `post/${id}`,\n   *       providesTags: ['Post'],\n   *     }),\n   *     updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({\n   *       query: ({ id, ...patch }) => ({\n   *         url: `post/${id}`,\n   *         method: 'PATCH',\n   *         body: patch,\n   *       }),\n   *       invalidatesTags: ['Post'],\n   *       async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {\n   *         const patchResult = dispatch(\n   *           api.util.updateQueryData('getPost', id, (draft) => {\n   *             Object.assign(draft, patch)\n   *           })\n   *         )\n   *         try {\n   *           await queryFulfilled\n   *         } catch {\n   *           patchResult.undo()\n   *         }\n   *       },\n   *     }),\n   *   }),\n   * })\n   * ```\n   */\n  onQueryStarted?(queryArgument: QueryArg, mutationLifeCycleApi: MutationLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport interface QueryLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, QueryLifecyclePromises<ResultType, BaseQuery> {}\nexport type MutationLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & QueryLifecyclePromises<ResultType, BaseQuery>;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleQueryExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific query.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedQueryOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, QueryArgument>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedQueryOnQueryStarted<\n *   PostsApiResponse,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async (queryArgument, { dispatch, queryFulfilled }) => {\n *   const result = await queryFulfilled\n *\n *   const { posts } = result.data\n *\n *   // Pre-fill the individual post entries with the results\n *   // from the list endpoint query\n *   dispatch(\n *     baseApiSlice.util.upsertQueryEntries(\n *       posts.map((post) => ({\n *         endpointName: 'getPostById',\n *         arg: post.id,\n *         value: post,\n *       })),\n *     ),\n *   )\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     getPostsByUserId: build.query<PostsApiResponse, QueryArgument>({\n *       query: (userId) => `/posts/user/${userId}`,\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedQueryOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleMutationExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific mutation.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedMutationOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n *   id: number\n *   title: string\n *   userId: number\n * }\n *\n * type PostsApiResponse = {\n *   posts: Post[]\n *   total: number\n *   skip: number\n *   limit: number\n * }\n *\n * type QueryArgument = Pick<Post, 'id'> & Partial<Post>\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n *   reducerPath: 'postsApi',\n *   tagTypes: ['Posts'],\n *   endpoints: (build) => ({\n *     getPosts: build.query<PostsApiResponse, void>({\n *       query: () => `/posts`,\n *     }),\n *\n *     getPostById: build.query<Post, number>({\n *       query: (postId) => `/posts/${postId}`,\n *     }),\n *   }),\n * })\n *\n * const updatePostOnFulfilled: TypedMutationOnQueryStarted<\n *   Post,\n *   QueryArgument,\n *   BaseQueryFunction,\n *   'postsApi'\n * > = async ({ id, ...patch }, { dispatch, queryFulfilled }) => {\n *   const patchCollection = dispatch(\n *     baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {\n *       Object.assign(draftPost, patch)\n *     }),\n *   )\n *\n *   try {\n *     await queryFulfilled\n *   } catch {\n *     patchCollection.undo()\n *   }\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n *   endpoints: (build) => ({\n *     addPost: build.mutation<Post, Omit<QueryArgument, 'id'>>({\n *       query: (body) => ({\n *         url: `posts/add`,\n *         method: 'POST',\n *         body,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *\n *     updatePost: build.mutation<Post, QueryArgument>({\n *       query: ({ id, ...patch }) => ({\n *         url: `post/${id}`,\n *         method: 'PATCH',\n *         body: patch,\n *       }),\n *\n *       onQueryStarted: updatePostOnFulfilled,\n *     }),\n *   }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedMutationOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleMutationExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\nexport const buildQueryLifecycleHandler: InternalHandlerBuilder = ({\n  api,\n  context,\n  queryThunk,\n  mutationThunk\n}) => {\n  const isPendingThunk = isPending(queryThunk, mutationThunk);\n  const isRejectedThunk = isRejected(queryThunk, mutationThunk);\n  const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk);\n  type CacheLifecycle = {\n    resolve(value: {\n      data: unknown;\n      meta: unknown;\n    }): unknown;\n    reject(value: QueryFulfilledRejectionReason<any>): unknown;\n  };\n  const lifecycleMap: Record<string, CacheLifecycle> = {};\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (isPendingThunk(action)) {\n      const {\n        requestId,\n        arg: {\n          endpointName,\n          originalArgs\n        }\n      } = action.meta;\n      const endpointDefinition = context.endpointDefinitions[endpointName];\n      const onQueryStarted = endpointDefinition?.onQueryStarted;\n      if (onQueryStarted) {\n        const lifecycle = {} as CacheLifecycle;\n        const queryFulfilled = new (Promise as PromiseConstructorWithKnownReason)<{\n          data: unknown;\n          meta: unknown;\n        }, QueryFulfilledRejectionReason<any>>((resolve, reject) => {\n          lifecycle.resolve = resolve;\n          lifecycle.reject = reject;\n        });\n        // prevent uncaught promise rejections from happening.\n        // if the original promise is used in any way, that will create a new promise that will throw again\n        queryFulfilled.catch(() => {});\n        lifecycleMap[requestId] = lifecycle;\n        const selector = (api.endpoints[endpointName] as any).select(isAnyQueryDefinition(endpointDefinition) ? originalArgs : requestId);\n        const extra = mwApi.dispatch((_, __, extra) => extra);\n        const lifecycleApi = {\n          ...mwApi,\n          getCacheEntry: () => selector(mwApi.getState()),\n          requestId,\n          extra,\n          updateCachedData: (isAnyQueryDefinition(endpointDefinition) ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n          queryFulfilled\n        };\n        onQueryStarted(originalArgs, lifecycleApi as any);\n      }\n    } else if (isFullfilledThunk(action)) {\n      const {\n        requestId,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.resolve({\n        data: action.payload,\n        meta: baseQueryMeta\n      });\n      delete lifecycleMap[requestId];\n    } else if (isRejectedThunk(action)) {\n      const {\n        requestId,\n        rejectedWithValue,\n        baseQueryMeta\n      } = action.meta;\n      lifecycleMap[requestId]?.reject({\n        error: action.payload ?? action.error,\n        isUnhandledError: !rejectedWithValue,\n        meta: baseQueryMeta as any\n      });\n      delete lifecycleMap[requestId];\n    }\n  };\n  return handler;\n};","import { QueryStatus } from '../apiState';\nimport type { QueryCacheKey } from '../apiState';\nimport { onFocus, onOnline } from '../setupListeners';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, SubMiddlewareApi } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildWindowEventHandler: InternalHandlerBuilder = ({\n  reducerPath,\n  context,\n  api,\n  refetchQuery,\n  internalState\n}) => {\n  const {\n    removeQueryResult\n  } = api.internalActions;\n  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n    if (onFocus.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnFocus');\n    }\n    if (onOnline.match(action)) {\n      refetchValidQueries(mwApi, 'refetchOnReconnect');\n    }\n  };\n  function refetchValidQueries(api: SubMiddlewareApi, type: 'refetchOnFocus' | 'refetchOnReconnect') {\n    const state = api.getState()[reducerPath];\n    const queries = state.queries;\n    const subscriptions = internalState.currentSubscriptions;\n    context.batch(() => {\n      for (const queryCacheKey of Object.keys(subscriptions)) {\n        const querySubState = queries[queryCacheKey];\n        const subscriptionSubState = subscriptions[queryCacheKey];\n        if (!subscriptionSubState || !querySubState) continue;\n        const shouldRefetch = Object.values(subscriptionSubState).some(sub => sub[type] === true) || Object.values(subscriptionSubState).every(sub => sub[type] === undefined) && state.config[type];\n        if (shouldRefetch) {\n          if (countObjectKeys(subscriptionSubState) === 0) {\n            api.dispatch(removeQueryResult({\n              queryCacheKey: queryCacheKey as QueryCacheKey\n            }));\n          } else if (querySubState.status !== QueryStatus.uninitialized) {\n            api.dispatch(refetchQuery(querySubState));\n          }\n        }\n      }\n    });\n  }\n  return handler;\n};","import type { Action, Middleware, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport type { QueryStatus, QuerySubState, RootState } from '../apiState';\nimport type { QueryThunkArg } from '../buildThunks';\nimport { createAction, isAction } from '../rtkImports';\nimport { buildBatchedActionsHandler } from './batchActions';\nimport { buildCacheCollectionHandler } from './cacheCollection';\nimport { buildCacheLifecycleHandler } from './cacheLifecycle';\nimport { buildDevCheckHandler } from './devMiddleware';\nimport { buildInvalidationByTagsHandler } from './invalidationByTags';\nimport { buildPollingHandler } from './polling';\nimport { buildQueryLifecycleHandler } from './queryLifecycle';\nimport type { BuildMiddlewareInput, InternalHandlerBuilder, InternalMiddlewareState } from './types';\nimport { buildWindowEventHandler } from './windowEventHandling';\nimport type { ApiEndpointQuery } from '../module';\nexport type { ReferenceCacheCollection } from './cacheCollection';\nexport type { MutationCacheLifecycleApi, QueryCacheLifecycleApi, ReferenceCacheLifecycle } from './cacheLifecycle';\nexport type { MutationLifecycleApi, QueryLifecycleApi, ReferenceQueryLifecycle, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './queryLifecycle';\nexport type { SubscriptionSelectors } from './types';\nexport function buildMiddleware<Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string>(input: BuildMiddlewareInput<Definitions, ReducerPath, TagTypes>) {\n  const {\n    reducerPath,\n    queryThunk,\n    api,\n    context\n  } = input;\n  const {\n    apiUid\n  } = context;\n  const actions = {\n    invalidateTags: createAction<Array<TagTypes | FullTagDescription<TagTypes> | null | undefined>>(`${reducerPath}/invalidateTags`)\n  };\n  const isThisApiSliceAction = (action: Action) => action.type.startsWith(`${reducerPath}/`);\n  const handlerBuilders: InternalHandlerBuilder[] = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];\n  const middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>> = mwApi => {\n    let initialized = false;\n    const internalState: InternalMiddlewareState = {\n      currentSubscriptions: {}\n    };\n    const builderArgs = {\n      ...(input as any as BuildMiddlewareInput<EndpointDefinitions, string, string>),\n      internalState,\n      refetchQuery,\n      isThisApiSliceAction\n    };\n    const handlers = handlerBuilders.map(build => build(builderArgs));\n    const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);\n    const windowEventsHandler = buildWindowEventHandler(builderArgs);\n    return next => {\n      return action => {\n        if (!isAction(action)) {\n          return next(action);\n        }\n        if (!initialized) {\n          initialized = true;\n          // dispatch before any other action\n          mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n        }\n        const mwApiWithNext = {\n          ...mwApi,\n          next\n        };\n        const stateBefore = mwApi.getState();\n        const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);\n        let res: any;\n        if (actionShouldContinue) {\n          res = next(action);\n        } else {\n          res = internalProbeResult;\n        }\n        if (!!mwApi.getState()[reducerPath]) {\n          // Only run these checks if the middleware is registered okay\n\n          // This looks for actions that aren't specific to the API slice\n          windowEventsHandler(action, mwApiWithNext, stateBefore);\n          if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {\n            // Only run these additional checks if the actions are part of the API slice,\n            // or the action has hydration-related data\n            for (const handler of handlers) {\n              handler(action, mwApiWithNext, stateBefore);\n            }\n          }\n        }\n        return res;\n      };\n    };\n  };\n  return {\n    middleware,\n    actions\n  };\n  function refetchQuery(querySubState: Exclude<QuerySubState<any>, {\n    status: QueryStatus.uninitialized;\n  }>) {\n    return (input.api.endpoints[querySubState.endpointName] as ApiEndpointQuery<any, any>).initiate(querySubState.originalArgs as any, {\n      subscribe: false,\n      forceRefetch: true\n    });\n  }\n}","import { buildCreateApi } from '../createApi';\nimport { coreModule } from './module';\nexport const createApi = /* @__PURE__ */buildCreateApi(coreModule());\nexport { QueryStatus } from './apiState';\nexport type { CombinedState, InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationKeys, QueryCacheKey, QueryKeys, QuerySubState, RootState, SubscriptionOptions } from './apiState';\nexport type { InfiniteQueryActionCreatorResult, MutationActionCreatorResult, QueryActionCreatorResult, StartQueryActionCreatorOptions } from './buildInitiate';\nexport type { MutationCacheLifecycleApi, MutationLifecycleApi, QueryCacheLifecycleApi, QueryLifecycleApi, SubscriptionSelectors, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './buildMiddleware/index';\nexport { skipToken } from './buildSelectors';\nexport type { InfiniteQueryResultSelectorResult, MutationResultSelectorResult, QueryResultSelectorResult, SkipToken } from './buildSelectors';\nexport type { SliceActions } from './buildSlice';\nexport type { PatchQueryDataThunk, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nexport { coreModuleName } from './module';\nexport type { ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, CoreModule, InternalActions, PrefetchOptions, ThunkWithReturnValue } from './module';\nexport { setupListeners } from './setupListeners';\nexport { buildCreateApi, coreModule };"],"mappings":"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","names":["QueryStatus","isPlainObject","retry","arg","force","options","actions","createSelector","_formatProdErrorMessage","_formatProdErrorMessage2","key","queryArgsApi","_formatProdErrorMessage","getPreviousPageParam","_formatProdErrorMessage2","_formatProdErrorMessage","produceWithPatches","produceWithPatches","internalState","api","cacheKey","extra","api","extra","api","initialized","createSelector"]}
Index: node_modules/@reduxjs/toolkit/dist/react/cjs/index.js
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+'use strict'
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./redux-toolkit-react.production.min.cjs')
+} else {
+  module.exports = require('./redux-toolkit-react.development.cjs')
+}
Index: node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.development.cjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/react/index.ts
+var react_exports = {};
+__export(react_exports, {
+  createDynamicMiddleware: () => createDynamicMiddleware
+});
+module.exports = __toCommonJS(react_exports);
+__reExport(react_exports, require("@reduxjs/toolkit"), module.exports);
+
+// src/dynamicMiddleware/react/index.ts
+var import_toolkit = require("@reduxjs/toolkit");
+var import_react_redux = require("react-redux");
+var createDynamicMiddleware = () => {
+  const instance = (0, import_toolkit.createDynamicMiddleware)();
+  const createDispatchWithMiddlewareHookFactory = (context = import_react_redux.ReactReduxContext) => {
+    const useDispatch = context === import_react_redux.ReactReduxContext ? import_react_redux.useDispatch : (0, import_react_redux.createDispatchHook)(context);
+    function createDispatchWithMiddlewareHook2(...middlewares) {
+      instance.addMiddleware(...middlewares);
+      return useDispatch;
+    }
+    createDispatchWithMiddlewareHook2.withTypes = () => createDispatchWithMiddlewareHook2;
+    return createDispatchWithMiddlewareHook2;
+  };
+  const createDispatchWithMiddlewareHook = createDispatchWithMiddlewareHookFactory();
+  return {
+    ...instance,
+    createDispatchWithMiddlewareHookFactory,
+    createDispatchWithMiddlewareHook
+  };
+};
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  createDynamicMiddleware,
+  ...require("@reduxjs/toolkit")
+});
+//# sourceMappingURL=redux-toolkit-react.development.cjs.map
Index: node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.development.cjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../../src/react/index.ts","../../../src/dynamicMiddleware/react/index.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nexport * from '@reduxjs/toolkit';\nexport { createDynamicMiddleware } from '../dynamicMiddleware/react';\nexport type { CreateDispatchWithMiddlewareHook } from '../dynamicMiddleware/react/index';","import type { DynamicMiddlewareInstance, GetDispatch, GetState, MiddlewareApiConfig, TSHelpersExtractDispatchExtensions } from '@reduxjs/toolkit';\nimport { createDynamicMiddleware as cDM } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { createDispatchHook, ReactReduxContext, useDispatch as useDefaultDispatch } from 'react-redux';\nimport type { Action, Dispatch, Middleware, UnknownAction } from 'redux';\nexport type UseDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[] = [], State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = () => TSHelpersExtractDispatchExtensions<Middlewares> & DispatchType;\nexport type CreateDispatchWithMiddlewareHook<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {\n  <Middlewares extends [Middleware<any, State, DispatchType>, ...Middleware<any, State, DispatchType>[]]>(...middlewares: Middlewares): UseDispatchWithMiddlewareHook<Middlewares, State, DispatchType>;\n  withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): CreateDispatchWithMiddlewareHook<GetState<MiddlewareConfig>, GetDispatch<MiddlewareConfig>>;\n};\ntype ActionFromDispatch<DispatchType extends Dispatch<Action>> = DispatchType extends Dispatch<infer Action> ? Action : never;\ntype ReactDynamicMiddlewareInstance<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = DynamicMiddlewareInstance<State, DispatchType> & {\n  createDispatchWithMiddlewareHookFactory: (context?: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null>) => CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  createDispatchWithMiddlewareHook: CreateDispatchWithMiddlewareHook<State, DispatchType>;\n};\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): ReactDynamicMiddlewareInstance<State, DispatchType> => {\n  const instance = cDM<State, DispatchType>();\n  const createDispatchWithMiddlewareHookFactory = (\n  // @ts-ignore\n  context: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null> = ReactReduxContext) => {\n    const useDispatch = context === ReactReduxContext ? useDefaultDispatch : createDispatchHook(context);\n    function createDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[]>(...middlewares: Middlewares) {\n      instance.addMiddleware(...middlewares);\n      return useDispatch;\n    }\n    createDispatchWithMiddlewareHook.withTypes = () => createDispatchWithMiddlewareHook;\n    return createDispatchWithMiddlewareHook as CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  };\n  const createDispatchWithMiddlewareHook = createDispatchWithMiddlewareHookFactory();\n  return {\n    ...instance,\n    createDispatchWithMiddlewareHookFactory,\n    createDispatchWithMiddlewareHook\n  };\n};"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,0BAAc,6BAHd;;;ACCA,qBAA+C;AAG/C,yBAAyF;AAYlF,IAAM,0BAA0B,MAAgJ;AACrL,QAAM,eAAW,eAAAA,yBAAyB;AAC1C,QAAM,0CAA0C,CAEhD,UAA2F,yCAAsB;AAC/G,UAAM,cAAc,YAAY,uCAAoB,mBAAAC,kBAAqB,uCAAmB,OAAO;AACnG,aAASC,qCAAgG,aAA0B;AACjI,eAAS,cAAc,GAAG,WAAW;AACrC,aAAO;AAAA,IACT;AACA,IAAAA,kCAAiC,YAAY,MAAMA;AACnD,WAAOA;AAAA,EACT;AACA,QAAM,mCAAmC,wCAAwC;AACjF,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF;AACF;","names":["cDM","useDefaultDispatch","createDispatchWithMiddlewareHook"]}
Index: node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.production.min.cjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+"use strict";var s=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var x=(t,e)=>{for(var a in e)s(t,a,{get:e[a],enumerable:!0})},d=(t,e,a,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of y(e))!M.call(t,i)&&i!==a&&s(t,i,{get:()=>e[i],enumerable:!(n=w(e,i))||n.enumerable});return t},r=(t,e,a)=>(d(t,e,"default"),a&&d(a,e,"default"));var m=t=>d(s({},"__esModule",{value:!0}),t);var o={};x(o,{createDynamicMiddleware:()=>D});module.exports=m(o);r(o,require("@reduxjs/toolkit"),module.exports);var h=require("@reduxjs/toolkit"),c=require("react-redux"),D=()=>{let t=(0,h.createDynamicMiddleware)(),e=(n=c.ReactReduxContext)=>{let i=n===c.ReactReduxContext?c.useDispatch:(0,c.createDispatchHook)(n);function p(...l){return t.addMiddleware(...l),i}return p.withTypes=()=>p,p},a=e();return{...t,createDispatchWithMiddlewareHookFactory:e,createDispatchWithMiddlewareHook:a}};0&&(module.exports={createDynamicMiddleware,...require("@reduxjs/toolkit")});
+//# sourceMappingURL=redux-toolkit-react.production.min.cjs.map
Index: node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.production.min.cjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/cjs/redux-toolkit-react.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../../src/react/index.ts","../../../src/dynamicMiddleware/react/index.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nexport * from '@reduxjs/toolkit';\nexport { createDynamicMiddleware } from '../dynamicMiddleware/react';\nexport type { CreateDispatchWithMiddlewareHook } from '../dynamicMiddleware/react/index';","import type { DynamicMiddlewareInstance, GetDispatch, GetState, MiddlewareApiConfig, TSHelpersExtractDispatchExtensions } from '@reduxjs/toolkit';\nimport { createDynamicMiddleware as cDM } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { createDispatchHook, ReactReduxContext, useDispatch as useDefaultDispatch } from 'react-redux';\nimport type { Action, Dispatch, Middleware, UnknownAction } from 'redux';\nexport type UseDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[] = [], State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = () => TSHelpersExtractDispatchExtensions<Middlewares> & DispatchType;\nexport type CreateDispatchWithMiddlewareHook<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {\n  <Middlewares extends [Middleware<any, State, DispatchType>, ...Middleware<any, State, DispatchType>[]]>(...middlewares: Middlewares): UseDispatchWithMiddlewareHook<Middlewares, State, DispatchType>;\n  withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): CreateDispatchWithMiddlewareHook<GetState<MiddlewareConfig>, GetDispatch<MiddlewareConfig>>;\n};\ntype ActionFromDispatch<DispatchType extends Dispatch<Action>> = DispatchType extends Dispatch<infer Action> ? Action : never;\ntype ReactDynamicMiddlewareInstance<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = DynamicMiddlewareInstance<State, DispatchType> & {\n  createDispatchWithMiddlewareHookFactory: (context?: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null>) => CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  createDispatchWithMiddlewareHook: CreateDispatchWithMiddlewareHook<State, DispatchType>;\n};\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): ReactDynamicMiddlewareInstance<State, DispatchType> => {\n  const instance = cDM<State, DispatchType>();\n  const createDispatchWithMiddlewareHookFactory = (\n  // @ts-ignore\n  context: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null> = ReactReduxContext) => {\n    const useDispatch = context === ReactReduxContext ? useDefaultDispatch : createDispatchHook(context);\n    function createDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[]>(...middlewares: Middlewares) {\n      instance.addMiddleware(...middlewares);\n      return useDispatch;\n    }\n    createDispatchWithMiddlewareHook.withTypes = () => createDispatchWithMiddlewareHook;\n    return createDispatchWithMiddlewareHook as CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  };\n  const createDispatchWithMiddlewareHook = createDispatchWithMiddlewareHookFactory();\n  return {\n    ...instance,\n    createDispatchWithMiddlewareHookFactory,\n    createDispatchWithMiddlewareHook\n  };\n};"],"mappings":"2dAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GAGAI,EAAAJ,EAAc,4BAHd,gBCCA,IAAAK,EAA+C,4BAG/CC,EAAyF,uBAY5EC,EAA0B,IAAgJ,CACrL,IAAMC,KAAW,EAAAC,yBAAyB,EACpCC,EAA0C,CAEhDC,EAA2F,sBAAsB,CAC/G,IAAMC,EAAcD,IAAY,oBAAoB,EAAAE,eAAqB,sBAAmBF,CAAO,EACnG,SAASG,KAAgGC,EAA0B,CACjI,OAAAP,EAAS,cAAc,GAAGO,CAAW,EAC9BH,CACT,CACA,OAAAE,EAAiC,UAAY,IAAMA,EAC5CA,CACT,EACMA,EAAmCJ,EAAwC,EACjF,MAAO,CACL,GAAGF,EACH,wCAAAE,EACA,iCAAAI,CACF,CACF","names":["react_exports","__export","createDynamicMiddleware","__toCommonJS","__reExport","import_toolkit","import_react_redux","createDynamicMiddleware","instance","cDM","createDispatchWithMiddlewareHookFactory","context","useDispatch","useDefaultDispatch","createDispatchWithMiddlewareHook","middlewares"]}
Index: node_modules/@reduxjs/toolkit/dist/react/index.d.mts
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { DynamicMiddlewareInstance, TSHelpersExtractDispatchExtensions, MiddlewareApiConfig, GetState, GetDispatch } from '@reduxjs/toolkit';
+export * from '@reduxjs/toolkit';
+import { Context } from 'react';
+import { ReactReduxContextValue } from 'react-redux';
+import { Dispatch, UnknownAction, Action, Middleware } from 'redux';
+
+type UseDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[] = [], State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = () => TSHelpersExtractDispatchExtensions<Middlewares> & DispatchType;
+type CreateDispatchWithMiddlewareHook<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {
+    <Middlewares extends [
+        Middleware<any, State, DispatchType>,
+        ...Middleware<any, State, DispatchType>[]
+    ]>(...middlewares: Middlewares): UseDispatchWithMiddlewareHook<Middlewares, State, DispatchType>;
+    withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): CreateDispatchWithMiddlewareHook<GetState<MiddlewareConfig>, GetDispatch<MiddlewareConfig>>;
+};
+type ActionFromDispatch<DispatchType extends Dispatch<Action>> = DispatchType extends Dispatch<infer Action> ? Action : never;
+type ReactDynamicMiddlewareInstance<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = DynamicMiddlewareInstance<State, DispatchType> & {
+    createDispatchWithMiddlewareHookFactory: (context?: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null>) => CreateDispatchWithMiddlewareHook<State, DispatchType>;
+    createDispatchWithMiddlewareHook: CreateDispatchWithMiddlewareHook<State, DispatchType>;
+};
+declare const createDynamicMiddleware: <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>() => ReactDynamicMiddlewareInstance<State, DispatchType>;
+
+export { type CreateDispatchWithMiddlewareHook, createDynamicMiddleware };
Index: node_modules/@reduxjs/toolkit/dist/react/index.d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { DynamicMiddlewareInstance, TSHelpersExtractDispatchExtensions, MiddlewareApiConfig, GetState, GetDispatch } from '@reduxjs/toolkit';
+export * from '@reduxjs/toolkit';
+import { Context } from 'react';
+import { ReactReduxContextValue } from 'react-redux';
+import { Dispatch, UnknownAction, Action, Middleware } from 'redux';
+
+type UseDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[] = [], State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = () => TSHelpersExtractDispatchExtensions<Middlewares> & DispatchType;
+type CreateDispatchWithMiddlewareHook<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {
+    <Middlewares extends [
+        Middleware<any, State, DispatchType>,
+        ...Middleware<any, State, DispatchType>[]
+    ]>(...middlewares: Middlewares): UseDispatchWithMiddlewareHook<Middlewares, State, DispatchType>;
+    withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): CreateDispatchWithMiddlewareHook<GetState<MiddlewareConfig>, GetDispatch<MiddlewareConfig>>;
+};
+type ActionFromDispatch<DispatchType extends Dispatch<Action>> = DispatchType extends Dispatch<infer Action> ? Action : never;
+type ReactDynamicMiddlewareInstance<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = DynamicMiddlewareInstance<State, DispatchType> & {
+    createDispatchWithMiddlewareHookFactory: (context?: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null>) => CreateDispatchWithMiddlewareHook<State, DispatchType>;
+    createDispatchWithMiddlewareHook: CreateDispatchWithMiddlewareHook<State, DispatchType>;
+};
+declare const createDynamicMiddleware: <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>() => ReactDynamicMiddlewareInstance<State, DispatchType>;
+
+export { type CreateDispatchWithMiddlewareHook, createDynamicMiddleware };
Index: node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.browser.mjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export*from"@reduxjs/toolkit";import{createDynamicMiddleware as p}from"@reduxjs/toolkit";import{createDispatchHook as d,ReactReduxContext as c,useDispatch as s}from"react-redux";var h=()=>{let t=p(),a=(i=c)=>{let o=i===c?s:d(i);function e(...r){return t.addMiddleware(...r),o}return e.withTypes=()=>e,e},n=a();return{...t,createDispatchWithMiddlewareHookFactory:a,createDispatchWithMiddlewareHook:n}};export{h as createDynamicMiddleware};
+//# sourceMappingURL=redux-toolkit-react.browser.mjs.map
Index: node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.browser.mjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/react/index.ts","../../src/dynamicMiddleware/react/index.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nexport * from '@reduxjs/toolkit';\nexport { createDynamicMiddleware } from '../dynamicMiddleware/react';\nexport type { CreateDispatchWithMiddlewareHook } from '../dynamicMiddleware/react/index';","import type { DynamicMiddlewareInstance, GetDispatch, GetState, MiddlewareApiConfig, TSHelpersExtractDispatchExtensions } from '@reduxjs/toolkit';\nimport { createDynamicMiddleware as cDM } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { createDispatchHook, ReactReduxContext, useDispatch as useDefaultDispatch } from 'react-redux';\nimport type { Action, Dispatch, Middleware, UnknownAction } from 'redux';\nexport type UseDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[] = [], State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = () => TSHelpersExtractDispatchExtensions<Middlewares> & DispatchType;\nexport type CreateDispatchWithMiddlewareHook<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {\n  <Middlewares extends [Middleware<any, State, DispatchType>, ...Middleware<any, State, DispatchType>[]]>(...middlewares: Middlewares): UseDispatchWithMiddlewareHook<Middlewares, State, DispatchType>;\n  withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): CreateDispatchWithMiddlewareHook<GetState<MiddlewareConfig>, GetDispatch<MiddlewareConfig>>;\n};\ntype ActionFromDispatch<DispatchType extends Dispatch<Action>> = DispatchType extends Dispatch<infer Action> ? Action : never;\ntype ReactDynamicMiddlewareInstance<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = DynamicMiddlewareInstance<State, DispatchType> & {\n  createDispatchWithMiddlewareHookFactory: (context?: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null>) => CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  createDispatchWithMiddlewareHook: CreateDispatchWithMiddlewareHook<State, DispatchType>;\n};\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): ReactDynamicMiddlewareInstance<State, DispatchType> => {\n  const instance = cDM<State, DispatchType>();\n  const createDispatchWithMiddlewareHookFactory = (\n  // @ts-ignore\n  context: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null> = ReactReduxContext) => {\n    const useDispatch = context === ReactReduxContext ? useDefaultDispatch : createDispatchHook(context);\n    function createDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[]>(...middlewares: Middlewares) {\n      instance.addMiddleware(...middlewares);\n      return useDispatch;\n    }\n    createDispatchWithMiddlewareHook.withTypes = () => createDispatchWithMiddlewareHook;\n    return createDispatchWithMiddlewareHook as CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  };\n  const createDispatchWithMiddlewareHook = createDispatchWithMiddlewareHookFactory();\n  return {\n    ...instance,\n    createDispatchWithMiddlewareHookFactory,\n    createDispatchWithMiddlewareHook\n  };\n};"],"mappings":"AAGA,WAAc,mBCFd,OAAS,2BAA2BA,MAAW,mBAG/C,OAAS,sBAAAC,EAAoB,qBAAAC,EAAmB,eAAeC,MAA0B,cAYlF,IAAMC,EAA0B,IAAgJ,CACrL,IAAMC,EAAWL,EAAyB,EACpCM,EAA0C,CAEhDC,EAA2FL,IAAsB,CAC/G,IAAMM,EAAcD,IAAYL,EAAoBC,EAAqBF,EAAmBM,CAAO,EACnG,SAASE,KAAgGC,EAA0B,CACjI,OAAAL,EAAS,cAAc,GAAGK,CAAW,EAC9BF,CACT,CACA,OAAAC,EAAiC,UAAY,IAAMA,EAC5CA,CACT,EACMA,EAAmCH,EAAwC,EACjF,MAAO,CACL,GAAGD,EACH,wCAAAC,EACA,iCAAAG,CACF,CACF","names":["cDM","createDispatchHook","ReactReduxContext","useDefaultDispatch","createDynamicMiddleware","instance","createDispatchWithMiddlewareHookFactory","context","useDispatch","createDispatchWithMiddlewareHook","middlewares"]}
Index: node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.legacy-esm.js
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+var __defProp = Object.defineProperty;
+var __defProps = Object.defineProperties;
+var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
+var __getOwnPropSymbols = Object.getOwnPropertySymbols;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __propIsEnum = Object.prototype.propertyIsEnumerable;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __spreadValues = (a, b) => {
+  for (var prop in b || (b = {}))
+    if (__hasOwnProp.call(b, prop))
+      __defNormalProp(a, prop, b[prop]);
+  if (__getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(b)) {
+      if (__propIsEnum.call(b, prop))
+        __defNormalProp(a, prop, b[prop]);
+    }
+  return a;
+};
+var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
+
+// src/react/index.ts
+export * from "@reduxjs/toolkit";
+
+// src/dynamicMiddleware/react/index.ts
+import { createDynamicMiddleware as cDM } from "@reduxjs/toolkit";
+import { createDispatchHook, ReactReduxContext, useDispatch as useDefaultDispatch } from "react-redux";
+var createDynamicMiddleware = () => {
+  const instance = cDM();
+  const createDispatchWithMiddlewareHookFactory = (context = ReactReduxContext) => {
+    const useDispatch = context === ReactReduxContext ? useDefaultDispatch : createDispatchHook(context);
+    function createDispatchWithMiddlewareHook2(...middlewares) {
+      instance.addMiddleware(...middlewares);
+      return useDispatch;
+    }
+    createDispatchWithMiddlewareHook2.withTypes = () => createDispatchWithMiddlewareHook2;
+    return createDispatchWithMiddlewareHook2;
+  };
+  const createDispatchWithMiddlewareHook = createDispatchWithMiddlewareHookFactory();
+  return __spreadProps(__spreadValues({}, instance), {
+    createDispatchWithMiddlewareHookFactory,
+    createDispatchWithMiddlewareHook
+  });
+};
+export {
+  createDynamicMiddleware
+};
+//# sourceMappingURL=redux-toolkit-react.legacy-esm.js.map
Index: node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.legacy-esm.js.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/react/index.ts","../../src/dynamicMiddleware/react/index.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nexport * from '@reduxjs/toolkit';\nexport { createDynamicMiddleware } from '../dynamicMiddleware/react';\nexport type { CreateDispatchWithMiddlewareHook } from '../dynamicMiddleware/react/index';","import type { DynamicMiddlewareInstance, GetDispatch, GetState, MiddlewareApiConfig, TSHelpersExtractDispatchExtensions } from '@reduxjs/toolkit';\nimport { createDynamicMiddleware as cDM } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { createDispatchHook, ReactReduxContext, useDispatch as useDefaultDispatch } from 'react-redux';\nimport type { Action, Dispatch, Middleware, UnknownAction } from 'redux';\nexport type UseDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[] = [], State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = () => TSHelpersExtractDispatchExtensions<Middlewares> & DispatchType;\nexport type CreateDispatchWithMiddlewareHook<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {\n  <Middlewares extends [Middleware<any, State, DispatchType>, ...Middleware<any, State, DispatchType>[]]>(...middlewares: Middlewares): UseDispatchWithMiddlewareHook<Middlewares, State, DispatchType>;\n  withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): CreateDispatchWithMiddlewareHook<GetState<MiddlewareConfig>, GetDispatch<MiddlewareConfig>>;\n};\ntype ActionFromDispatch<DispatchType extends Dispatch<Action>> = DispatchType extends Dispatch<infer Action> ? Action : never;\ntype ReactDynamicMiddlewareInstance<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = DynamicMiddlewareInstance<State, DispatchType> & {\n  createDispatchWithMiddlewareHookFactory: (context?: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null>) => CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  createDispatchWithMiddlewareHook: CreateDispatchWithMiddlewareHook<State, DispatchType>;\n};\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): ReactDynamicMiddlewareInstance<State, DispatchType> => {\n  const instance = cDM<State, DispatchType>();\n  const createDispatchWithMiddlewareHookFactory = (\n  // @ts-ignore\n  context: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null> = ReactReduxContext) => {\n    const useDispatch = context === ReactReduxContext ? useDefaultDispatch : createDispatchHook(context);\n    function createDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[]>(...middlewares: Middlewares) {\n      instance.addMiddleware(...middlewares);\n      return useDispatch;\n    }\n    createDispatchWithMiddlewareHook.withTypes = () => createDispatchWithMiddlewareHook;\n    return createDispatchWithMiddlewareHook as CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  };\n  const createDispatchWithMiddlewareHook = createDispatchWithMiddlewareHookFactory();\n  return {\n    ...instance,\n    createDispatchWithMiddlewareHookFactory,\n    createDispatchWithMiddlewareHook\n  };\n};"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAGA,cAAc;;;ACFd,SAAS,2BAA2B,WAAW;AAG/C,SAAS,oBAAoB,mBAAmB,eAAe,0BAA0B;AAYlF,IAAM,0BAA0B,MAAgJ;AACrL,QAAM,WAAW,IAAyB;AAC1C,QAAM,0CAA0C,CAEhD,UAA2F,sBAAsB;AAC/G,UAAM,cAAc,YAAY,oBAAoB,qBAAqB,mBAAmB,OAAO;AACnG,aAASA,qCAAgG,aAA0B;AACjI,eAAS,cAAc,GAAG,WAAW;AACrC,aAAO;AAAA,IACT;AACA,IAAAA,kCAAiC,YAAY,MAAMA;AACnD,WAAOA;AAAA,EACT;AACA,QAAM,mCAAmC,wCAAwC;AACjF,SAAO,iCACF,WADE;AAAA,IAEL;AAAA,IACA;AAAA,EACF;AACF;","names":["createDispatchWithMiddlewareHook"]}
Index: node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.modern.mjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.modern.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.modern.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+// src/react/index.ts
+export * from "@reduxjs/toolkit";
+
+// src/dynamicMiddleware/react/index.ts
+import { createDynamicMiddleware as cDM } from "@reduxjs/toolkit";
+import { createDispatchHook, ReactReduxContext, useDispatch as useDefaultDispatch } from "react-redux";
+var createDynamicMiddleware = () => {
+  const instance = cDM();
+  const createDispatchWithMiddlewareHookFactory = (context = ReactReduxContext) => {
+    const useDispatch = context === ReactReduxContext ? useDefaultDispatch : createDispatchHook(context);
+    function createDispatchWithMiddlewareHook2(...middlewares) {
+      instance.addMiddleware(...middlewares);
+      return useDispatch;
+    }
+    createDispatchWithMiddlewareHook2.withTypes = () => createDispatchWithMiddlewareHook2;
+    return createDispatchWithMiddlewareHook2;
+  };
+  const createDispatchWithMiddlewareHook = createDispatchWithMiddlewareHookFactory();
+  return {
+    ...instance,
+    createDispatchWithMiddlewareHookFactory,
+    createDispatchWithMiddlewareHook
+  };
+};
+export {
+  createDynamicMiddleware
+};
+//# sourceMappingURL=redux-toolkit-react.modern.mjs.map
Index: node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.modern.mjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.modern.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/react/redux-toolkit-react.modern.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/react/index.ts","../../src/dynamicMiddleware/react/index.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from '@reduxjs/toolkit';\nexport * from '@reduxjs/toolkit';\nexport { createDynamicMiddleware } from '../dynamicMiddleware/react';\nexport type { CreateDispatchWithMiddlewareHook } from '../dynamicMiddleware/react/index';","import type { DynamicMiddlewareInstance, GetDispatch, GetState, MiddlewareApiConfig, TSHelpersExtractDispatchExtensions } from '@reduxjs/toolkit';\nimport { createDynamicMiddleware as cDM } from '@reduxjs/toolkit';\nimport type { Context } from 'react';\nimport type { ReactReduxContextValue } from 'react-redux';\nimport { createDispatchHook, ReactReduxContext, useDispatch as useDefaultDispatch } from 'react-redux';\nimport type { Action, Dispatch, Middleware, UnknownAction } from 'redux';\nexport type UseDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[] = [], State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = () => TSHelpersExtractDispatchExtensions<Middlewares> & DispatchType;\nexport type CreateDispatchWithMiddlewareHook<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = {\n  <Middlewares extends [Middleware<any, State, DispatchType>, ...Middleware<any, State, DispatchType>[]]>(...middlewares: Middlewares): UseDispatchWithMiddlewareHook<Middlewares, State, DispatchType>;\n  withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): CreateDispatchWithMiddlewareHook<GetState<MiddlewareConfig>, GetDispatch<MiddlewareConfig>>;\n};\ntype ActionFromDispatch<DispatchType extends Dispatch<Action>> = DispatchType extends Dispatch<infer Action> ? Action : never;\ntype ReactDynamicMiddlewareInstance<State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> = DynamicMiddlewareInstance<State, DispatchType> & {\n  createDispatchWithMiddlewareHookFactory: (context?: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null>) => CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  createDispatchWithMiddlewareHook: CreateDispatchWithMiddlewareHook<State, DispatchType>;\n};\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): ReactDynamicMiddlewareInstance<State, DispatchType> => {\n  const instance = cDM<State, DispatchType>();\n  const createDispatchWithMiddlewareHookFactory = (\n  // @ts-ignore\n  context: Context<ReactReduxContextValue<State, ActionFromDispatch<DispatchType>> | null> = ReactReduxContext) => {\n    const useDispatch = context === ReactReduxContext ? useDefaultDispatch : createDispatchHook(context);\n    function createDispatchWithMiddlewareHook<Middlewares extends Middleware<any, State, DispatchType>[]>(...middlewares: Middlewares) {\n      instance.addMiddleware(...middlewares);\n      return useDispatch;\n    }\n    createDispatchWithMiddlewareHook.withTypes = () => createDispatchWithMiddlewareHook;\n    return createDispatchWithMiddlewareHook as CreateDispatchWithMiddlewareHook<State, DispatchType>;\n  };\n  const createDispatchWithMiddlewareHook = createDispatchWithMiddlewareHookFactory();\n  return {\n    ...instance,\n    createDispatchWithMiddlewareHookFactory,\n    createDispatchWithMiddlewareHook\n  };\n};"],"mappings":";AAGA,cAAc;;;ACFd,SAAS,2BAA2B,WAAW;AAG/C,SAAS,oBAAoB,mBAAmB,eAAe,0BAA0B;AAYlF,IAAM,0BAA0B,MAAgJ;AACrL,QAAM,WAAW,IAAyB;AAC1C,QAAM,0CAA0C,CAEhD,UAA2F,sBAAsB;AAC/G,UAAM,cAAc,YAAY,oBAAoB,qBAAqB,mBAAmB,OAAO;AACnG,aAASA,qCAAgG,aAA0B;AACjI,eAAS,cAAc,GAAG,WAAW;AACrC,aAAO;AAAA,IACT;AACA,IAAAA,kCAAiC,YAAY,MAAMA;AACnD,WAAOA;AAAA,EACT;AACA,QAAM,mCAAmC,wCAAwC;AACjF,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF;AACF;","names":["createDispatchWithMiddlewareHook"]}
Index: node_modules/@reduxjs/toolkit/dist/redux-toolkit.browser.mjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/redux-toolkit.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/redux-toolkit.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export*from"redux";import{produce as Io,current as vo,freeze as Do,original as Oo,isDraft as No}from"immer";import{createSelector as Fo,createSelectorCreator as Vo,lruMemoize as _o,weakMapMemoize as Lo}from"reselect";import{current as at,isDraft as it}from"immer";import{createSelectorCreator as st,weakMapMemoize as ct}from"reselect";var xe=(...e)=>{let t=st(...e),r=Object.assign((...n)=>{let o=t(...n),a=(s,...y)=>o(it(s)?at(s):s,...y);return Object.assign(a,o),a},{withTypes:()=>r});return r},ie=xe(ct);import{applyMiddleware as xt,createStore as Ct,compose as Et,combineReducers as Rt,isPlainObject as wt}from"redux";import{compose as Ce}from"redux";var Ee=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Ce:Ce.apply(null,arguments)},Rn=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION__?window.__REDUX_DEVTOOLS_EXTENSION__:function(){return function(e){return e}};import{thunk as mt,withExtraArgument as gt}from"redux-thunk";import{isAction as Re}from"redux";var q=e=>e&&typeof e.match=="function";function M(e,t){function r(...n){if(t){let o=t(...n);if(!o)throw new Error(x(0));return{type:e,payload:o.payload,..."meta"in o&&{meta:o.meta},..."error"in o&&{error:o.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>Re(n)&&n.type===e,r}function se(e){return typeof e=="function"&&"type"in e&&q(e)}function ce(e){return Re(e)&&Object.keys(e).every(dt)}function dt(e){return["type","payload","error","meta"].indexOf(e)>-1}function ut(e){let t=e?`${e}`.split("/"):[],r=t[t.length-1]||"actionCreator";return`Detected an action creator with type "${e||"unknown"}" being dispatched. 
+Make sure you're calling the action creator before dispatching, i.e. \`dispatch(${r}())\` instead of \`dispatch(${r})\`. This is necessary even if the action has no payload.`}function lt(e={}){return()=>r=>n=>r(n)}import{produce as pt,isDraftable as ft}from"immer";var F=class e extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,e.prototype)}static get[Symbol.species](){return e}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new e(...t[0].concat(this)):new e(...t.concat(this))}};function de(e){return ft(e)?pt(e,()=>{}):e}function P(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function yt(e){return typeof e!="object"||e==null||Object.isFrozen(e)}function ht(e={}){if(1)return()=>n=>o=>n(o);var t,r}import{isPlainObject as At}from"redux";function we(e){let t=typeof e;return e==null||t==="string"||t==="boolean"||t==="number"||Array.isArray(e)||At(e)}function Me(e,t="",r=we,n,o=[],a){let s;if(!r(e))return{keyPath:t||"<root>",value:e};if(typeof e!="object"||e===null||a?.has(e))return!1;let y=n!=null?n(e):Object.entries(e),c=o.length>0;for(let[l,i]of y){let d=t?t+"."+l:l;if(!(c&&o.some(g=>g instanceof RegExp?g.test(d):d===g))){if(!r(i))return{keyPath:d,value:i};if(typeof i=="object"&&(s=Me(i,d,r,n,o,a),s))return s}}return a&&Pe(e)&&a.add(e),!1}function Pe(e){if(!Object.isFrozen(e))return!1;for(let t of Object.values(e))if(!(typeof t!="object"||t===null)&&!Pe(t))return!1;return!0}function Tt(e={}){return()=>t=>r=>t(r)}function St(e){return typeof e=="boolean"}var be=()=>function(t){let{thunk:r=!0,immutableCheck:n=!0,serializableCheck:o=!0,actionCreatorCheck:a=!0}=t??{},s=new F;return r&&(St(r)?s.push(mt):s.push(gt(r.extraArgument))),s};var ue="RTK_autoBatch",kt=()=>e=>({payload:e,meta:{[ue]:!0}}),Ie=e=>t=>{setTimeout(t,e)},le=(e={type:"raf"})=>t=>(...r)=>{let n=t(...r),o=!0,a=!1,s=!1,y=new Set,c=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame:Ie(10):e.type==="callback"?e.queueNotification:Ie(e.timeout),l=()=>{s=!1,a&&(a=!1,y.forEach(i=>i()))};return Object.assign({},n,{subscribe(i){let d=()=>o&&i(),T=n.subscribe(d);return y.add(i),()=>{T(),y.delete(i)}},dispatch(i){try{return o=!i?.meta?.[ue],a=!o,a&&(s||(s=!0,c(l))),n.dispatch(i)}finally{o=!0}}})};var ve=e=>function(r){let{autoBatch:n=!0}=r??{},o=new F(e);return n&&o.push(le(typeof n=="object"?n:void 0)),o};function Mt(e){let t=be(),{reducer:r=void 0,middleware:n,devTools:o=!0,duplicateMiddlewareCheck:a=!0,preloadedState:s=void 0,enhancers:y=void 0}=e||{},c;if(typeof r=="function")c=r;else if(wt(r))c=Rt(r);else throw new Error(x(1));let l;typeof n=="function"?l=n(t):l=t();let i=Et;o&&(i=Ee({trace:!1,...typeof o=="object"&&o}));let d=xt(...l),T=ve(d),g=typeof y=="function"?y(T):T(),p=i(...g);return Ct(c,s,p)}import{produce as Pt,isDraft as bt,isDraftable as It}from"immer";function $(e){let t={},r=[],n,o={addCase(a,s){let y=typeof a=="string"?a:a.type;if(!y)throw new Error(x(28));if(y in t)throw new Error(x(29));return t[y]=s,o},addMatcher(a,s){return r.push({matcher:a,reducer:s}),o},addDefaultCase(a){return n=a,o}};return e(o),[t,r,n]}function vt(e){return typeof e=="function"}function pe(e,t){let[r,n,o]=$(t),a;if(vt(e))a=()=>de(e());else{let y=de(e);a=()=>y}function s(y=a(),c){let l=[r[c.type],...n.filter(({matcher:i})=>i(c)).map(({reducer:i})=>i)];return l.filter(i=>!!i).length===0&&(l=[o]),l.reduce((i,d)=>{if(d)if(bt(i)){let g=d(i,c);return g===void 0?i:g}else{if(It(i))return Pt(i,T=>d(T,c));{let T=d(i,c);if(T===void 0){if(i===null)return i;throw Error("A case reducer on a non-draftable value must not return undefined")}return T}}return i},y)}return s.getInitialState=a,s}var De=(e,t)=>q(e)?e.match(t):e(t);function V(...e){return t=>e.some(r=>De(r,t))}function W(...e){return t=>e.every(r=>De(r,t))}function J(e,t){if(!e||!e.meta)return!1;let r=typeof e.meta.requestId=="string",n=t.indexOf(e.meta.requestStatus)>-1;return r&&n}function z(e){return typeof e[0]=="function"&&"pending"in e[0]&&"fulfilled"in e[0]&&"rejected"in e[0]}function Oe(...e){return e.length===0?t=>J(t,["pending"]):z(e)?V(...e.map(t=>t.pending)):Oe()(e[0])}function X(...e){return e.length===0?t=>J(t,["rejected"]):z(e)?V(...e.map(t=>t.rejected)):X()(e[0])}function Ne(...e){let t=r=>r&&r.meta&&r.meta.rejectedWithValue;return e.length===0?W(X(...e),t):z(e)?W(X(...e),t):Ne()(e[0])}function je(...e){return e.length===0?t=>J(t,["fulfilled"]):z(e)?V(...e.map(t=>t.fulfilled)):je()(e[0])}function Fe(...e){return e.length===0?t=>J(t,["pending","fulfilled","rejected"]):z(e)?V(...e.flatMap(t=>[t.pending,t.rejected,t.fulfilled])):Fe()(e[0])}var Dt="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",I=(e=21)=>{let t="",r=e;for(;r--;)t+=Dt[Math.random()*64|0];return t};var Ot=["name","message","stack","code"],G=class{constructor(t,r){this.payload=t;this.meta=r}_type},Q=class{constructor(t,r){this.payload=t;this.meta=r}_type},_e=e=>{if(typeof e=="object"&&e!==null){let t={};for(let r of Ot)typeof e[r]=="string"&&(t[r]=e[r]);return t}return{message:String(e)}},Ve="External signal was aborted",fe=(()=>{function e(t,r,n){let o=M(t+"/fulfilled",(c,l,i,d)=>({payload:c,meta:{...d||{},arg:i,requestId:l,requestStatus:"fulfilled"}})),a=M(t+"/pending",(c,l,i)=>({payload:void 0,meta:{...i||{},arg:l,requestId:c,requestStatus:"pending"}})),s=M(t+"/rejected",(c,l,i,d,T)=>({payload:d,error:(n&&n.serializeError||_e)(c||"Rejected"),meta:{...T||{},arg:i,requestId:l,rejectedWithValue:!!d,requestStatus:"rejected",aborted:c?.name==="AbortError",condition:c?.name==="ConditionError"}}));function y(c,{signal:l}={}){return(i,d,T)=>{let g=n?.idGenerator?n.idGenerator(c):I(),p=new AbortController,h,u;function f(A){u=A,p.abort()}l&&(l.aborted?f(Ve):l.addEventListener("abort",()=>f(Ve),{once:!0}));let k=async function(){let A;try{let S=n?.condition?.(c,{getState:d,extra:T});if(Nt(S)&&(S=await S),S===!1||p.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};let w=new Promise((C,E)=>{h=()=>{E({name:"AbortError",message:u||"Aborted"})},p.signal.addEventListener("abort",h)});i(a(g,c,n?.getPendingMeta?.({requestId:g,arg:c},{getState:d,extra:T}))),A=await Promise.race([w,Promise.resolve(r(c,{dispatch:i,getState:d,extra:T,requestId:g,signal:p.signal,abort:f,rejectWithValue:(C,E)=>new G(C,E),fulfillWithValue:(C,E)=>new Q(C,E)})).then(C=>{if(C instanceof G)throw C;return C instanceof Q?o(C.payload,g,c,C.meta):o(C,g,c)})])}catch(S){A=S instanceof G?s(null,g,c,S.payload,S.meta):s(S,g,c)}finally{h&&p.signal.removeEventListener("abort",h)}return n&&!n.dispatchConditionRejection&&s.match(A)&&A.meta.condition||i(A),A}();return Object.assign(k,{abort:f,requestId:g,arg:c,unwrap(){return k.then(Le)}})}}return Object.assign(y,{pending:a,rejected:s,fulfilled:o,settled:V(s,o),typePrefix:t})}return e.withTypes=()=>e,e})();function Le(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}function Nt(e){return e!==null&&typeof e=="object"&&typeof e.then=="function"}var Ue=Symbol.for("rtk-slice-createasyncthunk"),jt={[Ue]:fe},We=(n=>(n.reducer="reducer",n.reducerWithPrepare="reducerWithPrepare",n.asyncThunk="asyncThunk",n))(We||{});function Ft(e,t){return`${e}/${t}`}function ze({creators:e}={}){let t=e?.asyncThunk?.[Ue];return function(n){let{name:o,reducerPath:a=o}=n;if(!o)throw new Error(x(11));let s=(typeof n.reducers=="function"?n.reducers(Lt()):n.reducers)||{},y=Object.keys(s),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},l={addCase(A,m){let S=typeof A=="string"?A:A.type;if(!S)throw new Error(x(12));if(S in c.sliceCaseReducersByType)throw new Error(x(13));return c.sliceCaseReducersByType[S]=m,l},addMatcher(A,m){return c.sliceMatchers.push({matcher:A,reducer:m}),l},exposeAction(A,m){return c.actionCreators[A]=m,l},exposeCaseReducer(A,m){return c.sliceCaseReducersByName[A]=m,l}};y.forEach(A=>{let m=s[A],S={reducerName:A,type:Ft(o,A),createNotation:typeof n.reducers=="function"};Wt(m)?Gt(S,m,l,t):Ut(S,m,l)});function i(){let[A={},m=[],S=void 0]=typeof n.extraReducers=="function"?$(n.extraReducers):[n.extraReducers],w={...A,...c.sliceCaseReducersByType};return pe(n.initialState,C=>{for(let E in w)C.addCase(E,w[E]);for(let E of c.sliceMatchers)C.addMatcher(E.matcher,E.reducer);for(let E of m)C.addMatcher(E.matcher,E.reducer);S&&C.addDefaultCase(S)})}let d=A=>A,T=new Map,g=new WeakMap,p;function h(A,m){return p||(p=i()),p(A,m)}function u(){return p||(p=i()),p.getInitialState()}function f(A,m=!1){function S(C){let E=C[A];return typeof E>"u"&&m&&(E=P(g,S,u)),E}function w(C=d){let E=P(T,m,()=>new WeakMap);return P(E,C,()=>{let U={};for(let[H,j]of Object.entries(n.selectors??{}))U[H]=Vt(j,C,()=>P(g,C,u),m);return U})}return{reducerPath:A,getSelectors:w,get selectors(){return w(S)},selectSlice:S}}let k={name:o,reducer:h,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:u,...f(a),injectInto(A,{reducerPath:m,...S}={}){let w=m??a;return A.inject({reducerPath:w,reducer:h},S),{...k,...f(w,!0)}}};return k}}function Vt(e,t,r,n){function o(a,...s){let y=t(a);return typeof y>"u"&&n&&(y=r()),e(y,...s)}return o.unwrapped=e,o}var _t=ze();function Lt(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function Ut({type:e,reducerName:t,createNotation:r},n,o){let a,s;if("reducer"in n){if(r&&!zt(n))throw new Error(x(17));a=n.reducer,s=n.prepare}else a=n;o.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,s?M(e,s):M(e))}function Wt(e){return e._reducerDefinitionType==="asyncThunk"}function zt(e){return e._reducerDefinitionType==="reducerWithPrepare"}function Gt({type:e,reducerName:t},r,n,o){if(!o)throw new Error(x(18));let{payloadCreator:a,fulfilled:s,pending:y,rejected:c,settled:l,options:i}=r,d=o(e,a,i);n.exposeAction(t,d),s&&n.addCase(d.fulfilled,s),y&&n.addCase(d.pending,y),c&&n.addCase(d.rejected,c),l&&n.addMatcher(d.settled,l),n.exposeCaseReducer(t,{fulfilled:s||Y,pending:y||Y,rejected:c||Y,settled:l||Y})}function Y(){}function Bt(){return{ids:[],entities:{}}}function Ge(e){function t(r={},n){let o=Object.assign(Bt(),r);return n?e.setAll(o,n):o}return{getInitialState:t}}function Be(){function e(t,r={}){let{createSelector:n=ie}=r,o=d=>d.ids,a=d=>d.entities,s=n(o,a,(d,T)=>d.map(g=>T[g])),y=(d,T)=>T,c=(d,T)=>d[T],l=n(o,d=>d.length);if(!t)return{selectIds:o,selectEntities:a,selectAll:s,selectTotal:l,selectById:n(a,y,c)};let i=n(t,a);return{selectIds:n(t,o),selectEntities:i,selectAll:n(t,s),selectTotal:n(t,l),selectById:n(i,y,c)}}return{getSelectors:e}}import{produce as Kt,isDraft as Ht}from"immer";var qt=Ht;function Ke(e){let t=R((r,n)=>e(n));return function(n){return t(n,void 0)}}function R(e){return function(r,n){function o(s){return ce(s)}let a=s=>{o(n)?e(n.payload,s):e(n,s)};return qt(r)?(a(r),r):Kt(r,a)}}import{current as $t,isDraft as Xt}from"immer";function D(e,t){return t(e)}function v(e){return Array.isArray(e)||(e=Object.values(e)),e}function B(e){return Xt(e)?$t(e):e}function Z(e,t,r){e=v(e);let n=B(r.ids),o=new Set(n),a=[],s=new Set([]),y=[];for(let c of e){let l=D(c,t);o.has(l)||s.has(l)?y.push({id:l,changes:c}):(s.add(l),a.push(c))}return[a,y,n]}function ee(e){function t(p,h){let u=D(p,e);u in h.entities||(h.ids.push(u),h.entities[u]=p)}function r(p,h){p=v(p);for(let u of p)t(u,h)}function n(p,h){let u=D(p,e);u in h.entities||h.ids.push(u),h.entities[u]=p}function o(p,h){p=v(p);for(let u of p)n(u,h)}function a(p,h){p=v(p),h.ids=[],h.entities={},r(p,h)}function s(p,h){return y([p],h)}function y(p,h){let u=!1;p.forEach(f=>{f in h.entities&&(delete h.entities[f],u=!0)}),u&&(h.ids=h.ids.filter(f=>f in h.entities))}function c(p){Object.assign(p,{ids:[],entities:{}})}function l(p,h,u){let f=u.entities[h.id];if(f===void 0)return!1;let k=Object.assign({},f,h.changes),A=D(k,e),m=A!==h.id;return m&&(p[h.id]=A,delete u.entities[h.id]),u.entities[A]=k,m}function i(p,h){return d([p],h)}function d(p,h){let u={},f={};p.forEach(A=>{A.id in h.entities&&(f[A.id]={id:A.id,changes:{...f[A.id]?.changes,...A.changes}})}),p=Object.values(f),p.length>0&&p.filter(m=>l(u,m,h)).length>0&&(h.ids=Object.values(h.entities).map(m=>D(m,e)))}function T(p,h){return g([p],h)}function g(p,h){let[u,f]=Z(p,e,h);r(u,h),d(f,h)}return{removeAll:Ke(c),addOne:R(t),addMany:R(r),setOne:R(n),setMany:R(o),setAll:R(a),updateOne:R(i),updateMany:R(d),upsertOne:R(T),upsertMany:R(g),removeOne:R(s),removeMany:R(y)}}function Jt(e,t,r){let n=0,o=e.length;for(;n<o;){let a=n+o>>>1,s=e[a];r(t,s)>=0?n=a+1:o=a}return n}function Qt(e,t,r){let n=Jt(e,t,r);return e.splice(n,0,t),e}function He(e,t){let{removeOne:r,removeMany:n,removeAll:o}=ee(e);function a(u,f){return s([u],f)}function s(u,f,k){u=v(u);let A=new Set(k??B(f.ids)),m=u.filter(S=>!A.has(D(S,e)));m.length!==0&&h(f,m)}function y(u,f){return c([u],f)}function c(u,f){if(u=v(u),u.length!==0){for(let k of u)delete f.entities[e(k)];h(f,u)}}function l(u,f){u=v(u),f.entities={},f.ids=[],s(u,f,[])}function i(u,f){return d([u],f)}function d(u,f){let k=!1,A=!1;for(let m of u){let S=f.entities[m.id];if(!S)continue;k=!0,Object.assign(S,m.changes);let w=e(S);if(m.id!==w){A=!0,delete f.entities[m.id];let C=f.ids.indexOf(m.id);f.ids[C]=w,f.entities[w]=S}}k&&h(f,[],k,A)}function T(u,f){return g([u],f)}function g(u,f){let[k,A,m]=Z(u,e,f);k.length&&s(k,f,m),A.length&&d(A,f)}function p(u,f){if(u.length!==f.length)return!1;for(let k=0;k<u.length;k++)if(u[k]!==f[k])return!1;return!0}let h=(u,f,k,A)=>{let m=B(u.entities),S=B(u.ids),w=u.entities,C=S;A&&(C=new Set(S));let E=[];for(let j of C){let ke=m[j];ke&&E.push(ke)}let U=E.length===0;for(let j of f)w[e(j)]=j,U||Qt(E,j,t);U?E=f.slice().sort(t):k&&E.sort(t);let H=E.map(e);p(S,H)||(u.ids=H)};return{removeOne:r,removeMany:n,removeAll:o,addOne:R(a),updateOne:R(i),upsertOne:R(T),setOne:R(y),setMany:R(c),setAll:R(l),addMany:R(s),updateMany:R(d),upsertMany:R(g)}}function Yt(e={}){let{selectId:t,sortComparer:r}={sortComparer:!1,selectId:s=>s.id,...e},n=r?He(t,r):ee(t),o=Ge(n),a=Be();return{selectId:t,sortComparer:r,...o,...a,...n}}import{isAction as en}from"redux";var Zt="task",qe="listener",$e="completed",ye="cancelled",Xe=`task-${ye}`,Je=`task-${$e}`,te=`${qe}-${ye}`,Qe=`${qe}-${$e}`,b=class{constructor(t){this.code=t;this.message=`${Zt} ${ye} (reason: ${t})`}name="TaskAbortError";message};var ne=(e,t)=>{if(typeof e!="function")throw new TypeError(x(32))},_=()=>{},re=(e,t=_)=>(e.catch(t),e),oe=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),O=(e,t)=>{let r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))};var N=e=>{if(e.aborted){let{reason:t}=e;throw new b(t)}};function he(e,t){let r=_;return new Promise((n,o)=>{let a=()=>o(new b(e.reason));if(e.aborted){a();return}r=oe(e,a),t.finally(()=>r()).then(n,o)}).finally(()=>{r=_})}var Ye=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof b?"cancelled":"rejected",error:r}}finally{t?.()}},K=e=>t=>re(he(e,t).then(r=>(N(e),r))),Ae=e=>{let t=K(e);return r=>t(new Promise(n=>setTimeout(n,r)))};var{assign:L}=Object,Ze={},ae="listenerMiddleware",tn=(e,t)=>{let r=n=>oe(e,()=>O(n,e.reason));return(n,o)=>{ne(n,"taskExecutor");let a=new AbortController;r(a);let s=Ye(async()=>{N(e),N(a.signal);let y=await n({pause:K(a.signal),delay:Ae(a.signal),signal:a.signal});return N(a.signal),y},()=>O(a,Je));return o?.autoJoin&&t.push(s.catch(_)),{result:K(e)(s),cancel(){O(a,Xe)}}}},nn=(e,t)=>{let r=async(n,o)=>{N(t);let a=()=>{},y=[new Promise((c,l)=>{let i=e({predicate:n,effect:(d,T)=>{T.unsubscribe(),c([d,T.getState(),T.getOriginalState()])}});a=()=>{i(),l()}})];o!=null&&y.push(new Promise(c=>setTimeout(c,o,null)));try{let c=await he(t,Promise.race(y));return N(t),c}finally{a()}};return(n,o)=>re(r(n,o))},nt=e=>{let{type:t,actionCreator:r,matcher:n,predicate:o,effect:a}=e;if(t)o=M(t).match;else if(r)t=r.type,o=r.match;else if(n)o=n;else if(!o)throw new Error(x(21));return ne(a,"options.listener"),{predicate:o,type:t,effect:a}},rt=L(e=>{let{type:t,predicate:r,effect:n}=nt(e);return{id:I(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(x(22))}}},{withTypes:()=>rt}),et=(e,t)=>{let{type:r,effect:n,predicate:o}=nt(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===o)&&a.effect===n)},Te=e=>{e.pending.forEach(t=>{O(t,te)})},rn=e=>()=>{e.forEach(Te),e.clear()},tt=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},me=L(M(`${ae}/add`),{withTypes:()=>me}),ot=M(`${ae}/removeAll`),ge=L(M(`${ae}/remove`),{withTypes:()=>ge}),on=(...e)=>{console.error(`${ae}/error`,...e)},an=(e={})=>{let t=new Map,{extra:r,onError:n=on}=e;ne(n,"onError");let o=i=>(i.unsubscribe=()=>t.delete(i.id),t.set(i.id,i),d=>{i.unsubscribe(),d?.cancelActive&&Te(i)}),a=i=>{let d=et(t,i)??rt(i);return o(d)};L(a,{withTypes:()=>a});let s=i=>{let d=et(t,i);return d&&(d.unsubscribe(),i.cancelActive&&Te(d)),!!d};L(s,{withTypes:()=>s});let y=async(i,d,T,g)=>{let p=new AbortController,h=nn(a,p.signal),u=[];try{i.pending.add(p),await Promise.resolve(i.effect(d,L({},T,{getOriginalState:g,condition:(f,k)=>h(f,k).then(Boolean),take:h,delay:Ae(p.signal),pause:K(p.signal),extra:r,signal:p.signal,fork:tn(p.signal,u),unsubscribe:i.unsubscribe,subscribe:()=>{t.set(i.id,i)},cancelActiveListeners:()=>{i.pending.forEach((f,k,A)=>{f!==p&&(O(f,te),A.delete(f))})},cancel:()=>{O(p,te),i.pending.delete(p)},throwIfCancelled:()=>{N(p.signal)}})))}catch(f){f instanceof b||tt(n,f,{raisedBy:"effect"})}finally{await Promise.all(u),O(p,Qe),i.pending.delete(p)}},c=rn(t);return{middleware:i=>d=>T=>{if(!en(T))return d(T);if(me.match(T))return a(T.payload);if(ot.match(T)){c();return}if(ge.match(T))return s(T.payload);let g=i.getState(),p=()=>{if(g===Ze)throw new Error(x(23));return g},h;try{if(h=d(T),t.size>0){let u=i.getState(),f=Array.from(t.values());for(let k of f){let A=!1;try{A=k.predicate(T,u,g)}catch(m){A=!1,tt(n,m,{raisedBy:"predicate"})}A&&y(k,T,i,p)}}}finally{g=Ze}return h},startListening:a,stopListening:s,clearListeners:c}};import{compose as sn}from"redux";var cn=e=>({middleware:e,applied:new Map}),dn=e=>t=>t?.meta?.instanceId===e,un=()=>{let e=I(),t=new Map,r=Object.assign(M("dynamicMiddleware/add",(...y)=>({payload:y,meta:{instanceId:e}})),{withTypes:()=>r}),n=Object.assign(function(...c){c.forEach(l=>{P(t,l,cn)})},{withTypes:()=>n}),o=y=>{let c=Array.from(t.values()).map(l=>P(l.applied,y,l.middleware));return sn(...c)},a=W(r,dn(e));return{middleware:y=>c=>l=>a(l)?(n(...l.payload),y.dispatch):o(y)(c)(l),addMiddleware:n,withMiddleware:r,instanceId:e}};import{combineReducers as ln}from"redux";var pn=e=>"reducerPath"in e&&typeof e.reducerPath=="string",fn=e=>e.flatMap(t=>pn(t)?[[t.reducerPath,t.reducer]]:Object.entries(t)),Se=Symbol.for("rtk-state-proxy-original"),yn=e=>!!e&&!!e[Se],hn=new WeakMap,An=(e,t,r)=>P(hn,e,()=>new Proxy(e,{get:(n,o,a)=>{if(o===Se)return n;let s=Reflect.get(n,o,a);if(typeof s>"u"){let y=r[o];if(typeof y<"u")return y;let c=t[o];if(c){let l=c(void 0,{type:I()});if(typeof l>"u")throw new Error(x(24));return r[o]=l,l}}return s}})),Tn=e=>{if(!yn(e))throw new Error(x(25));return e[Se]},mn={},gn=(e=mn)=>e;function Sn(...e){let t=Object.fromEntries(fn(e)),r=()=>Object.keys(t).length?ln(t):gn,n=r();function o(c,l){return n(c,l)}o.withLazyLoadedSlices=()=>o;let a={},s=(c,l={})=>{let{reducerPath:i,reducer:d}=c,T=t[i];return!l.overrideExisting&&T&&T!==d||(l.overrideExisting&&T!==d&&delete a[i],t[i]=d,n=r()),o},y=Object.assign(function(l,i){return function(T,...g){return l(An(i?i(T,...g):T,t,a),...g)}},{original:Tn});return Object.assign(o,{inject:s,selector:y})}function x(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}export{We as ReducerType,ue as SHOULD_AUTOBATCH,b as TaskAbortError,F as Tuple,me as addListener,jt as asyncThunkCreator,le as autoBatchEnhancer,ze as buildCreateSlice,ot as clearAllListeners,Sn as combineSlices,Mt as configureStore,M as createAction,lt as createActionCreatorInvariantMiddleware,fe as createAsyncThunk,ie as createDraftSafeSelector,xe as createDraftSafeSelectorCreator,un as createDynamicMiddleware,Yt as createEntityAdapter,ht as createImmutableStateInvariantMiddleware,an as createListenerMiddleware,Io as createNextState,pe as createReducer,Fo as createSelector,Vo as createSelectorCreator,Tt as createSerializableStateInvariantMiddleware,_t as createSlice,vo as current,Me as findNonSerializableValue,x as formatProdErrorMessage,Do as freeze,se as isActionCreator,W as isAllOf,V as isAnyOf,Fe as isAsyncThunkAction,No as isDraft,ce as isFluxStandardAction,je as isFulfilled,yt as isImmutableDefault,Oe as isPending,we as isPlain,X as isRejected,Ne as isRejectedWithValue,_o as lruMemoize,_e as miniSerializeError,I as nanoid,Oo as original,kt as prepareAutoBatched,ge as removeListener,Le as unwrapResult,Lo as weakMapMemoize};
+//# sourceMappingURL=redux-toolkit.browser.mjs.map
Index: node_modules/@reduxjs/toolkit/dist/redux-toolkit.browser.mjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/redux-toolkit.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/redux-toolkit.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/index.ts","../src/createDraftSafeSelector.ts","../src/configureStore.ts","../src/devtoolsExtension.ts","../src/getDefaultMiddleware.ts","../src/createAction.ts","../src/tsHelpers.ts","../src/actionCreatorInvariantMiddleware.ts","../src/utils.ts","../src/immutableStateInvariantMiddleware.ts","../src/serializableStateInvariantMiddleware.ts","../src/autoBatchEnhancer.ts","../src/getDefaultEnhancers.ts","../src/createReducer.ts","../src/mapBuilders.ts","../src/matchers.ts","../src/nanoid.ts","../src/createAsyncThunk.ts","../src/createSlice.ts","../src/entities/entity_state.ts","../src/entities/state_selectors.ts","../src/entities/state_adapter.ts","../src/entities/utils.ts","../src/entities/unsorted_state_adapter.ts","../src/entities/sorted_state_adapter.ts","../src/entities/create_adapter.ts","../src/listenerMiddleware/index.ts","../src/listenerMiddleware/exceptions.ts","../src/listenerMiddleware/utils.ts","../src/listenerMiddleware/task.ts","../src/dynamicMiddleware/index.ts","../src/combineSlices.ts","../src/formatProdErrorMessage.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from './formatProdErrorMessage';\nexport * from 'redux';\nexport { produce as createNextState, current, freeze, original, isDraft } from 'immer';\nexport type { Draft } from 'immer';\nexport { createSelector, createSelectorCreator, lruMemoize, weakMapMemoize } from 'reselect';\nexport type { Selector, OutputSelector } from 'reselect';\nexport { createDraftSafeSelector, createDraftSafeSelectorCreator } from './createDraftSafeSelector';\nexport type { ThunkAction, ThunkDispatch, ThunkMiddleware } from 'redux-thunk';\nexport {\n// js\nconfigureStore } from './configureStore';\nexport type {\n// types\nConfigureStoreOptions, EnhancedStore } from './configureStore';\nexport type { DevToolsEnhancerOptions } from './devtoolsExtension';\nexport {\n// js\ncreateAction, isActionCreator, isFSA as isFluxStandardAction } from './createAction';\nexport type {\n// types\nPayloadAction, PayloadActionCreator, ActionCreatorWithNonInferrablePayload, ActionCreatorWithOptionalPayload, ActionCreatorWithPayload, ActionCreatorWithoutPayload, ActionCreatorWithPreparedPayload, PrepareAction } from './createAction';\nexport {\n// js\ncreateReducer } from './createReducer';\nexport type {\n// types\nActions, CaseReducer, CaseReducers } from './createReducer';\nexport {\n// js\ncreateSlice, buildCreateSlice, asyncThunkCreator, ReducerType } from './createSlice';\nexport type {\n// types\nCreateSliceOptions, Slice, CaseReducerActions, SliceCaseReducers, ValidateSliceCaseReducers, CaseReducerWithPrepare, ReducerCreators, SliceSelectors } from './createSlice';\nexport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nexport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nexport {\n// js\ncreateImmutableStateInvariantMiddleware, isImmutableDefault } from './immutableStateInvariantMiddleware';\nexport type {\n// types\nImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\nexport {\n// js\ncreateSerializableStateInvariantMiddleware, findNonSerializableValue, isPlain } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nSerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nActionReducerMapBuilder } from './mapBuilders';\nexport { Tuple } from './utils';\nexport { createEntityAdapter } from './entities/create_adapter';\nexport type { EntityState, EntityAdapter, EntitySelectors, EntityStateAdapter, EntityId, Update, IdSelector, Comparer } from './entities/models';\nexport { createAsyncThunk, unwrapResult, miniSerializeError } from './createAsyncThunk';\nexport type { AsyncThunk, AsyncThunkOptions, AsyncThunkAction, AsyncThunkPayloadCreatorReturnValue, AsyncThunkPayloadCreator, GetState, GetThunkAPI, SerializedError, CreateAsyncThunkFunction } from './createAsyncThunk';\nexport {\n// js\nisAllOf, isAnyOf, isPending, isRejected, isFulfilled, isAsyncThunkAction, isRejectedWithValue } from './matchers';\nexport type {\n// types\nActionMatchingAllOf, ActionMatchingAnyOf } from './matchers';\nexport { nanoid } from './nanoid';\nexport type { ListenerEffect, ListenerMiddleware, ListenerEffectAPI, ListenerMiddlewareInstance, CreateListenerMiddlewareOptions, ListenerErrorHandler, TypedStartListening, TypedAddListener, TypedStopListening, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions, ForkedTaskExecutor, ForkedTask, ForkedTaskAPI, AsyncTaskExecutor, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult } from './listenerMiddleware/index';\nexport type { AnyListenerPredicate } from './listenerMiddleware/types';\nexport { createListenerMiddleware, addListener, removeListener, clearAllListeners, TaskAbortError } from './listenerMiddleware/index';\nexport type { AddMiddleware, DynamicDispatch, DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './dynamicMiddleware/types';\nexport { createDynamicMiddleware } from './dynamicMiddleware/index';\nexport { SHOULD_AUTOBATCH, prepareAutoBatched, autoBatchEnhancer } from './autoBatchEnhancer';\nexport type { AutoBatchOptions } from './autoBatchEnhancer';\nexport { combineSlices } from './combineSlices';\nexport type { CombinedSliceReducer, WithSlice } from './combineSlices';\nexport type { ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions, SafePromise } from './tsHelpers';\nexport { formatProdErrorMessage } from './formatProdErrorMessage';","import { current, isDraft } from 'immer';\nimport { createSelectorCreator, weakMapMemoize } from 'reselect';\nexport const createDraftSafeSelectorCreator: typeof createSelectorCreator = (...args: unknown[]) => {\n  const createSelector = (createSelectorCreator as any)(...args);\n  const createDraftSafeSelector = Object.assign((...args: unknown[]) => {\n    const selector = createSelector(...args);\n    const wrappedSelector = (value: unknown, ...rest: unknown[]) => selector(isDraft(value) ? current(value) : value, ...rest);\n    Object.assign(wrappedSelector, selector);\n    return wrappedSelector as any;\n  }, {\n    withTypes: () => createDraftSafeSelector\n  });\n  return createDraftSafeSelector;\n};\n\n/**\n * \"Draft-Safe\" version of `reselect`'s `createSelector`:\n * If an `immer`-drafted object is passed into the resulting selector's first argument,\n * the selector will act on the current draft value, instead of returning a cached value\n * that might be possibly outdated if the draft has been modified since.\n * @public\n */\nexport const createDraftSafeSelector = /* @__PURE__ */\ncreateDraftSafeSelectorCreator(weakMapMemoize);","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Reducer, ReducersMapObject, Middleware, Action, StoreEnhancer, Store, UnknownAction } from 'redux';\nimport { applyMiddleware, createStore, compose, combineReducers, isPlainObject } from 'redux';\nimport type { DevToolsEnhancerOptions as DevToolsOptions } from './devtoolsExtension';\nimport { composeWithDevTools } from './devtoolsExtension';\nimport type { ThunkMiddlewareFor, GetDefaultMiddleware } from './getDefaultMiddleware';\nimport { buildGetDefaultMiddleware } from './getDefaultMiddleware';\nimport type { ExtractDispatchExtensions, ExtractStoreExtensions, ExtractStateExtensions, UnknownIfNonSpecific } from './tsHelpers';\nimport type { Tuple } from './utils';\nimport type { GetDefaultEnhancers } from './getDefaultEnhancers';\nimport { buildGetDefaultEnhancers } from './getDefaultEnhancers';\n\n/**\n * Options for `configureStore()`.\n *\n * @public\n */\nexport interface ConfigureStoreOptions<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<Middlewares<S>>, E extends Tuple<Enhancers> = Tuple<Enhancers>, P = S> {\n  /**\n   * A single reducer function that will be used as the root reducer, or an\n   * object of slice reducers that will be passed to `combineReducers()`.\n   */\n  reducer: Reducer<S, A, P> | ReducersMapObject<S, A, P>;\n\n  /**\n   * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.\n   * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.\n   *\n   * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`\n   * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage\n   */\n  middleware?: (getDefaultMiddleware: GetDefaultMiddleware<S>) => M;\n\n  /**\n   * Whether to enable Redux DevTools integration. Defaults to `true`.\n   *\n   * Additional configuration can be done by passing Redux DevTools options\n   */\n  devTools?: boolean | DevToolsOptions;\n\n  /**\n   * Whether to check for duplicate middleware instances. Defaults to `true`.\n   */\n  duplicateMiddlewareCheck?: boolean;\n\n  /**\n   * The initial state, same as Redux's createStore.\n   * You may optionally specify it to hydrate the state\n   * from the server in universal apps, or to restore a previously serialized\n   * user session. If you use `combineReducers()` to produce the root reducer\n   * function (either directly or indirectly by passing an object as `reducer`),\n   * this must be an object with the same shape as the reducer map keys.\n   */\n  // we infer here, and instead complain if the reducer doesn't match\n  preloadedState?: P;\n\n  /**\n   * The store enhancers to apply. See Redux's `createStore()`.\n   * All enhancers will be included before the DevTools Extension enhancer.\n   * If you need to customize the order of enhancers, supply a callback\n   * function that will receive a `getDefaultEnhancers` function that returns a Tuple,\n   * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).\n   * If you only need to add middleware, you can use the `middleware` parameter instead.\n   */\n  enhancers?: (getDefaultEnhancers: GetDefaultEnhancers<M>) => E;\n}\nexport type Middlewares<S> = ReadonlyArray<Middleware<{}, S>>;\ntype Enhancers = ReadonlyArray<StoreEnhancer>;\n\n/**\n * A Redux store returned by `configureStore()`. Supports dispatching\n * side-effectful _thunks_ in addition to plain actions.\n *\n * @public\n */\nexport type EnhancedStore<S = any, A extends Action = UnknownAction, E extends Enhancers = Enhancers> = ExtractStoreExtensions<E> & Store<S, A, UnknownIfNonSpecific<ExtractStateExtensions<E>>>;\n\n/**\n * A friendly abstraction over the standard Redux `createStore()` function.\n *\n * @param options The store configuration.\n * @returns A configured Redux store.\n *\n * @public\n */\nexport function configureStore<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<[ThunkMiddlewareFor<S>]>, E extends Tuple<Enhancers> = Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>, StoreEnhancer]>, P = S>(options: ConfigureStoreOptions<S, A, M, E, P>): EnhancedStore<S, A, E> {\n  const getDefaultMiddleware = buildGetDefaultMiddleware<S>();\n  const {\n    reducer = undefined,\n    middleware,\n    devTools = true,\n    duplicateMiddlewareCheck = true,\n    preloadedState = undefined,\n    enhancers = undefined\n  } = options || {};\n  let rootReducer: Reducer<S, A, P>;\n  if (typeof reducer === 'function') {\n    rootReducer = reducer;\n  } else if (isPlainObject(reducer)) {\n    rootReducer = combineReducers(reducer) as unknown as Reducer<S, A, P>;\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(1) : '`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\n  }\n  if (process.env.NODE_ENV !== 'production' && middleware && typeof middleware !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(2) : '`middleware` field must be a callback');\n  }\n  let finalMiddleware: Tuple<Middlewares<S>>;\n  if (typeof middleware === 'function') {\n    finalMiddleware = middleware(getDefaultMiddleware);\n    if (process.env.NODE_ENV !== 'production' && !Array.isArray(finalMiddleware)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(3) : 'when using a middleware builder function, an array of middleware must be returned');\n    }\n  } else {\n    finalMiddleware = getDefaultMiddleware();\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(4) : 'each middleware provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && duplicateMiddlewareCheck) {\n    let middlewareReferences = new Set<Middleware<any, S>>();\n    finalMiddleware.forEach(middleware => {\n      if (middlewareReferences.has(middleware)) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(42) : 'Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.');\n      }\n      middlewareReferences.add(middleware);\n    });\n  }\n  let finalCompose = compose;\n  if (devTools) {\n    finalCompose = composeWithDevTools({\n      // Enable capture of stack traces for dispatched Redux actions\n      trace: process.env.NODE_ENV !== 'production',\n      ...(typeof devTools === 'object' && devTools)\n    });\n  }\n  const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n  const getDefaultEnhancers = buildGetDefaultEnhancers<M>(middlewareEnhancer);\n  if (process.env.NODE_ENV !== 'production' && enhancers && typeof enhancers !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : '`enhancers` field must be a callback');\n  }\n  let storeEnhancers = typeof enhancers === 'function' ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n  if (process.env.NODE_ENV !== 'production' && !Array.isArray(storeEnhancers)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : '`enhancers` callback must return an array');\n  }\n  if (process.env.NODE_ENV !== 'production' && storeEnhancers.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : 'each enhancer provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n    console.error('middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`');\n  }\n  const composedEnhancer: StoreEnhancer<any> = finalCompose(...storeEnhancers);\n  return createStore(rootReducer, preloadedState as P, composedEnhancer);\n}","import type { Action, ActionCreator, StoreEnhancer } from 'redux';\nimport { compose } from 'redux';\n\n/**\r\n * @public\r\n */\nexport interface DevToolsEnhancerOptions {\n  /**\r\n   * the instance name to be showed on the monitor page. Default value is `document.title`.\r\n   * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.\r\n   */\n  name?: string;\n  /**\r\n   * action creators functions to be available in the Dispatcher.\r\n   */\n  actionCreators?: ActionCreator<any>[] | {\n    [key: string]: ActionCreator<any>;\n  };\n  /**\r\n   * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.\r\n   * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.\r\n   * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).\r\n   *\r\n   * @default 500 ms.\r\n   */\n  latency?: number;\n  /**\r\n   * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.\r\n   *\r\n   * @default 50\r\n   */\n  maxAge?: number;\n  /**\r\n   * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you\r\n   * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`\r\n   * functions.\r\n   */\n  serialize?: boolean | {\n    /**\r\n     * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).\r\n     * - `false` - will handle also circular references.\r\n     * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.\r\n     * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.\r\n     *   For each of them you can indicate if to include (by setting as `true`).\r\n     *   For `function` key you can also specify a custom function which handles serialization.\r\n     *   See [`jsan`](https://github.com/kolodny/jsan) for more details.\r\n     */\n    options?: undefined | boolean | {\n      date?: true;\n      regex?: true;\n      undefined?: true;\n      error?: true;\n      symbol?: true;\n      map?: true;\n      set?: true;\n      function?: true | ((fn: (...args: any[]) => any) => string);\n    };\n    /**\r\n     * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.\r\n     * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)\r\n     * key. So you can deserialize it back while importing or persisting data.\r\n     * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):\r\n     */\n    replacer?: (key: string, value: unknown) => any;\n    /**\r\n     * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)\r\n     * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)\r\n     * as an example on how to serialize special data types and get them back.\r\n     */\n    reviver?: (key: string, value: unknown) => any;\n    /**\r\n     * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).\r\n     * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.\r\n     * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.\r\n     */\n    immutable?: any;\n    /**\r\n     * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...\r\n     */\n    refs?: any;\n  };\n  /**\r\n   * function which takes `action` object and id number as arguments, and should return `action` object back.\r\n   */\n  actionSanitizer?: <A extends Action>(action: A, id: number) => A;\n  /**\r\n   * function which takes `state` object and index as arguments, and should return `state` object back.\r\n   */\n  stateSanitizer?: <S>(state: S, index: number) => S;\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsDenylist?: string | string[];\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsAllowlist?: string | string[];\n  /**\r\n   * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.\r\n   * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.\r\n   */\n  predicate?: <S, A extends Action>(state: S, action: A) => boolean;\n  /**\r\n   * if specified as `false`, it will not record the changes till clicking on `Start recording` button.\r\n   * Available only for Redux enhancer, for others use `autoPause`.\r\n   *\r\n   * @default true\r\n   */\n  shouldRecordChanges?: boolean;\n  /**\r\n   * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.\r\n   * If not specified, will commit when paused. Available only for Redux enhancer.\r\n   *\r\n   * @default \"@@PAUSED\"\"\r\n   */\n  pauseActionType?: string;\n  /**\r\n   * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\r\n   * Not available for Redux enhancer (as it already does it but storing the data to be sent).\r\n   *\r\n   * @default false\r\n   */\n  autoPause?: boolean;\n  /**\r\n   * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.\r\n   * Available only for Redux enhancer.\r\n   *\r\n   * @default false\r\n   */\n  shouldStartLocked?: boolean;\n  /**\r\n   * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.\r\n   *\r\n   * @default true\r\n   */\n  shouldHotReload?: boolean;\n  /**\r\n   * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.\r\n   *\r\n   * @default false\r\n   */\n  shouldCatchErrors?: boolean;\n  /**\r\n   * If you want to restrict the extension, specify the features you allow.\r\n   * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.\r\n   * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.\r\n   * Otherwise, you'll get/set the data right from the monitor part.\r\n   */\n  features?: {\n    /**\r\n     * start/pause recording of dispatched actions\r\n     */\n    pause?: boolean;\n    /**\r\n     * lock/unlock dispatching actions and side effects\r\n     */\n    lock?: boolean;\n    /**\r\n     * persist states on page reloading\r\n     */\n    persist?: boolean;\n    /**\r\n     * export history of actions in a file\r\n     */\n    export?: boolean | 'custom';\n    /**\r\n     * import history of actions from a file\r\n     */\n    import?: boolean | 'custom';\n    /**\r\n     * jump back and forth (time travelling)\r\n     */\n    jump?: boolean;\n    /**\r\n     * skip (cancel) actions\r\n     */\n    skip?: boolean;\n    /**\r\n     * drag and drop actions in the history list\r\n     */\n    reorder?: boolean;\n    /**\r\n     * dispatch custom actions or action creators\r\n     */\n    dispatch?: boolean;\n    /**\r\n     * generate tests for the selected actions\r\n     */\n    test?: boolean;\n  };\n  /**\r\n   * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.\r\n   * Defaults to false.\r\n   */\n  trace?: boolean | (<A extends Action>(action: A) => string);\n  /**\r\n   * The maximum number of stack trace entries to record per action. Defaults to 10.\r\n   */\n  traceLimit?: number;\n}\ntype Compose = typeof compose;\ninterface ComposeWithDevTools {\n  (options: DevToolsEnhancerOptions): Compose;\n  <StoreExt extends {}>(...funcs: StoreEnhancer<StoreExt>[]): StoreEnhancer<StoreExt>;\n}\n\n/**\r\n * @public\r\n */\nexport const composeWithDevTools: ComposeWithDevTools = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\n  if (arguments.length === 0) return undefined;\n  if (typeof arguments[0] === 'object') return compose;\n  return compose.apply(null, arguments as any as Function[]);\n};\n\n/**\r\n * @public\r\n */\nexport const devToolsEnhancer: {\n  (options: DevToolsEnhancerOptions): StoreEnhancer<any>;\n} = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION__ : function () {\n  return function (noop) {\n    return noop;\n  };\n};","import type { Middleware, UnknownAction } from 'redux';\nimport type { ThunkMiddleware } from 'redux-thunk';\nimport { thunk as thunkMiddleware, withExtraArgument } from 'redux-thunk';\nimport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nimport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nimport type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\n/* PROD_START_REMOVE_UMD */\nimport { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware';\n/* PROD_STOP_REMOVE_UMD */\n\nimport type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nimport { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware';\nimport type { ExcludeFromTuple } from './tsHelpers';\nimport { Tuple } from './utils';\nfunction isBoolean(x: any): x is boolean {\n  return typeof x === 'boolean';\n}\ninterface ThunkOptions<E = any> {\n  extraArgument: E;\n}\ninterface GetDefaultMiddlewareOptions {\n  thunk?: boolean | ThunkOptions;\n  immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions;\n  serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions;\n  actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions;\n}\nexport type ThunkMiddlewareFor<S, O extends GetDefaultMiddlewareOptions = {}> = O extends {\n  thunk: false;\n} ? never : O extends {\n  thunk: {\n    extraArgument: infer E;\n  };\n} ? ThunkMiddleware<S, UnknownAction, E> : ThunkMiddleware<S, UnknownAction>;\nexport type GetDefaultMiddleware<S = any> = <O extends GetDefaultMiddlewareOptions = {\n  thunk: true;\n  immutableCheck: true;\n  serializableCheck: true;\n  actionCreatorCheck: true;\n}>(options?: O) => Tuple<ExcludeFromTuple<[ThunkMiddlewareFor<S, O>], never>>;\nexport const buildGetDefaultMiddleware = <S = any,>(): GetDefaultMiddleware<S> => function getDefaultMiddleware(options) {\n  const {\n    thunk = true,\n    immutableCheck = true,\n    serializableCheck = true,\n    actionCreatorCheck = true\n  } = options ?? {};\n  let middlewareArray = new Tuple<Middleware[]>();\n  if (thunk) {\n    if (isBoolean(thunk)) {\n      middlewareArray.push(thunkMiddleware);\n    } else {\n      middlewareArray.push(withExtraArgument(thunk.extraArgument));\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (immutableCheck) {\n      /* PROD_START_REMOVE_UMD */\n      let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(immutableCheck)) {\n        immutableOptions = immutableCheck;\n      }\n      middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n      /* PROD_STOP_REMOVE_UMD */\n    }\n    if (serializableCheck) {\n      let serializableOptions: SerializableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(serializableCheck)) {\n        serializableOptions = serializableCheck;\n      }\n      middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n    }\n    if (actionCreatorCheck) {\n      let actionCreatorOptions: ActionCreatorInvariantMiddlewareOptions = {};\n      if (!isBoolean(actionCreatorCheck)) {\n        actionCreatorOptions = actionCreatorCheck;\n      }\n      middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n    }\n  }\n  return middlewareArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport { isAction } from 'redux';\nimport type { IsUnknownOrNonInferrable, IfMaybeUndefined, IfVoid, IsAny } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\n\n/**\n * An action with a string type and an associated payload. This is the\n * type of action returned by `createAction()` action creators.\n *\n * @template P The type of the action's payload.\n * @template T the type used for the action type.\n * @template M The type of the action's meta (optional)\n * @template E The type of the action's error (optional)\n *\n * @public\n */\nexport type PayloadAction<P = void, T extends string = string, M = never, E = never> = {\n  payload: P;\n  type: T;\n} & ([M] extends [never] ? {} : {\n  meta: M;\n}) & ([E] extends [never] ? {} : {\n  error: E;\n});\n\n/**\n * A \"prepare\" method to be used as the second parameter of `createAction`.\n * Takes any number of arguments and returns a Flux Standard Action without\n * type (will be added later) that *must* contain a payload (might be undefined).\n *\n * @public\n */\nexport type PrepareAction<P> = ((...args: any[]) => {\n  payload: P;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  error: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n  error: any;\n});\n\n/**\n * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.\n *\n * @internal\n */\nexport type _ActionCreatorWithPreparedPayload<PA extends PrepareAction<any> | void, T extends string = string> = PA extends PrepareAction<infer P> ? ActionCreatorWithPreparedPayload<Parameters<PA>, P, T, ReturnType<PA> extends {\n  error: infer E;\n} ? E : never, ReturnType<PA> extends {\n  meta: infer M;\n} ? M : never> : void;\n\n/**\n * Basic type for all action creators.\n *\n * @inheritdoc {redux#ActionCreator}\n */\nexport type BaseActionCreator<P, T extends string, M = never, E = never> = {\n  type: T;\n  match: (action: unknown) => action is PayloadAction<P, T, M, E>;\n};\n\n/**\n * An action creator that takes multiple arguments that are passed\n * to a `PrepareAction` method to create the final Action.\n * @typeParam Args arguments for the action creator function\n * @typeParam P `payload` type\n * @typeParam T `type` name\n * @typeParam E optional `error` type\n * @typeParam M optional `meta` type\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPreparedPayload<Args extends unknown[], P, T extends string = string, E = never, M = never> extends BaseActionCreator<P, T, M, E> {\n  /**\n   * Calling this {@link redux#ActionCreator} with `Args` will return\n   * an Action with a payload of type `P` and (depending on the `PrepareAction`\n   * method used) a `meta`- and `error` property of types `M` and `E` respectively.\n   */\n  (...args: Args): PayloadAction<P, T, M, E>;\n}\n\n/**\n * An action creator of type `T` that takes an optional payload of type `P`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithOptionalPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`.\n   * Calling it without an argument will return a PayloadAction with a payload of `undefined`.\n   */\n  (payload?: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` that takes no payload.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithoutPayload<T extends string = string> extends BaseActionCreator<undefined, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} will\n   * return a {@link PayloadAction} of type `T` with a payload of `undefined`\n   */\n  (noArgument: void): PayloadAction<undefined, T>;\n}\n\n/**\n * An action creator of type `T` that requires a payload of type P.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`\n   */\n  (payload: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithNonInferrablePayload<T extends string = string> extends BaseActionCreator<unknown, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload\n   * of exactly the type of the argument.\n   */\n  <PT extends unknown>(payload: PT): PayloadAction<PT, T>;\n}\n\n/**\n * An action creator that produces actions with a `payload` attribute.\n *\n * @typeParam P the `payload` type\n * @typeParam T the `type` of the resulting action\n * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.\n *\n * @public\n */\nexport type PayloadActionCreator<P = void, T extends string = string, PA extends PrepareAction<P> | void = void> = IfPrepareActionMethodProvided<PA, _ActionCreatorWithPreparedPayload<PA, T>,\n// else\nIsAny<P, ActionCreatorWithPayload<any, T>, IsUnknownOrNonInferrable<P, ActionCreatorWithNonInferrablePayload<T>,\n// else\nIfVoid<P, ActionCreatorWithoutPayload<T>,\n// else\nIfMaybeUndefined<P, ActionCreatorWithOptionalPayload<P, T>,\n// else\nActionCreatorWithPayload<P, T>>>>>>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<P = void, T extends string = string>(type: T): PayloadActionCreator<P, T>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<PA extends PrepareAction<any>, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>;\nexport function createAction(type: string, prepareAction?: Function): any {\n  function actionCreator(...args: any[]) {\n    if (prepareAction) {\n      let prepared = prepareAction(...args);\n      if (!prepared) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(0) : 'prepareAction did not return an object');\n      }\n      return {\n        type,\n        payload: prepared.payload,\n        ...('meta' in prepared && {\n          meta: prepared.meta\n        }),\n        ...('error' in prepared && {\n          error: prepared.error\n        })\n      };\n    }\n    return {\n      type,\n      payload: args[0]\n    };\n  }\n  actionCreator.toString = () => `${type}`;\n  actionCreator.type = type;\n  actionCreator.match = (action: unknown): action is PayloadAction => isAction(action) && action.type === type;\n  return actionCreator;\n}\n\n/**\n * Returns true if value is an RTK-like action creator, with a static type property and match method.\n */\nexport function isActionCreator(action: unknown): action is BaseActionCreator<unknown, string> & Function {\n  return typeof action === 'function' && 'type' in action &&\n  // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n  hasMatchFunction(action as any);\n}\n\n/**\n * Returns true if value is an action with a string type and valid Flux Standard Action keys.\n */\nexport function isFSA(action: unknown): action is {\n  type: string;\n  payload?: unknown;\n  error?: unknown;\n  meta?: unknown;\n} {\n  return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key: string) {\n  return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1;\n}\n\n// helper types for more readable typings\n\ntype IfPrepareActionMethodProvided<PA extends PrepareAction<any> | void, True, False> = PA extends ((...args: any[]) => any) ? True : False;","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { Middleware } from 'redux';\nimport { isActionCreator as isRTKAction } from './createAction';\nexport interface ActionCreatorInvariantMiddlewareOptions {\n  /**\n   * The function to identify whether a value is an action creator.\n   * The default checks for a function with a static type property and match method.\n   */\n  isActionCreator?: (action: unknown) => action is Function & {\n    type?: unknown;\n  };\n}\nexport function getMessage(type?: unknown) {\n  const splitType = type ? `${type}`.split('/') : [];\n  const actionName = splitType[splitType.length - 1] || 'actionCreator';\n  return `Detected an action creator with type \"${type || 'unknown'}\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nexport function createActionCreatorInvariantMiddleware(options: ActionCreatorInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  }\n  const {\n    isActionCreator = isRTKAction\n  } = options;\n  return () => next => action => {\n    if (isActionCreator(action)) {\n      console.warn(getMessage(action.type));\n    }\n    return next(action);\n  };\n}","import { produce as createNextState, isDraftable } from 'immer';\nexport function getTimeMeasureUtils(maxDelay: number, fnName: string) {\n  let elapsed = 0;\n  return {\n    measureTime<T>(fn: () => T): T {\n      const started = Date.now();\n      try {\n        return fn();\n      } finally {\n        const finished = Date.now();\n        elapsed += finished - started;\n      }\n    },\n    warnIfExceeded() {\n      if (elapsed > maxDelay) {\n        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n      }\n    }\n  };\n}\nexport function delay(ms: number) {\n  return new Promise(resolve => setTimeout(resolve, ms));\n}\nexport class Tuple<Items extends ReadonlyArray<unknown> = []> extends Array<Items[number]> {\n  constructor(length: number);\n  constructor(...items: Items);\n  constructor(...items: any[]) {\n    super(...items);\n    Object.setPrototypeOf(this, Tuple.prototype);\n  }\n  static override get [Symbol.species]() {\n    return Tuple as any;\n  }\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat(...arr: any[]) {\n    return super.concat.apply(this, arr);\n  }\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend(...arr: any[]) {\n    if (arr.length === 1 && Array.isArray(arr[0])) {\n      return new Tuple(...arr[0].concat(this));\n    }\n    return new Tuple(...arr.concat(this));\n  }\n}\nexport function freezeDraftable<T>(val: T) {\n  return isDraftable(val) ? createNextState(val, () => {}) : val;\n}\nexport function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}\nexport function getOrInsertComputed<K extends object, V>(map: WeakMap<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, compute: (key: K) => V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, compute(key)).get(key) as V;\n}\nexport function promiseWithResolvers<T>(): {\n  promise: Promise<T>;\n  resolve: (value: T | PromiseLike<T>) => void;\n  reject: (reason?: any) => void;\n} {\n  let resolve: any;\n  let reject: any;\n  const promise = new Promise<T>((res, rej) => {\n    resolve = res;\n    reject = rej;\n  });\n  return {\n    promise,\n    resolve,\n    reject\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Middleware } from 'redux';\nimport type { IgnorePaths } from './serializableStateInvariantMiddleware';\nimport { getTimeMeasureUtils } from './utils';\ntype EntryProcessor = (key: string, value: any) => any;\n\n/**\n * The default `isImmutable` function.\n *\n * @public\n */\nexport function isImmutableDefault(value: unknown): boolean {\n  return typeof value !== 'object' || value == null || Object.isFrozen(value);\n}\nexport function trackForMutations(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths | undefined, obj: any) {\n  const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\n  return {\n    detectMutations() {\n      return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\n    }\n  };\n}\ninterface TrackedProperty {\n  value: any;\n  children: Record<string, any>;\n}\nfunction trackProperties(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths = [], obj: Record<string, any>, path: string = '', checkedObjects: Set<Record<string, any>> = new Set()) {\n  const tracked: Partial<TrackedProperty> = {\n    value: obj\n  };\n  if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n    checkedObjects.add(obj);\n    tracked.children = {};\n    for (const key in obj) {\n      const childPath = path ? path + '.' + key : key;\n      if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\n        continue;\n      }\n      tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\n    }\n  }\n  return tracked as TrackedProperty;\n}\nfunction detectMutations(isImmutable: IsImmutableFunc, ignoredPaths: IgnorePaths = [], trackedProperty: TrackedProperty, obj: any, sameParentRef: boolean = false, path: string = ''): {\n  wasMutated: boolean;\n  path?: string;\n} {\n  const prevObj = trackedProperty ? trackedProperty.value : undefined;\n  const sameRef = prevObj === obj;\n  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n    return {\n      wasMutated: true,\n      path\n    };\n  }\n  if (isImmutable(prevObj) || isImmutable(obj)) {\n    return {\n      wasMutated: false\n    };\n  }\n\n  // Gather all keys from prev (tracked) and after objs\n  const keysToDetect: Record<string, boolean> = {};\n  for (let key in trackedProperty.children) {\n    keysToDetect[key] = true;\n  }\n  for (let key in obj) {\n    keysToDetect[key] = true;\n  }\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (let key in keysToDetect) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n    if (result.wasMutated) {\n      return result;\n    }\n  }\n  return {\n    wasMutated: false\n  };\n}\ntype IsImmutableFunc = (value: any) => boolean;\n\n/**\n * Options for `createImmutableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface ImmutableStateInvariantMiddlewareOptions {\n  /**\n    Callback function to check if a value is considered to be immutable.\n    This function is applied recursively to every value contained in the state.\n    The default implementation will return true for primitive types\n    (like numbers, strings, booleans, null and undefined).\n   */\n  isImmutable?: IsImmutableFunc;\n  /**\n    An array of dot-separated path strings that match named nodes from\n    the root state to ignore when checking for immutability.\n    Defaults to undefined\n   */\n  ignoredPaths?: IgnorePaths;\n  /** Print a warning if checks take longer than N ms. Default: 32ms */\n  warnAfter?: number;\n}\n\n/**\n * Creates a middleware that checks whether any state was mutated in between\n * dispatches or during a dispatch. If any mutations are detected, an error is\n * thrown.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createImmutableStateInvariantMiddleware(options: ImmutableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    function stringify(obj: any, serializer?: EntryProcessor, indent?: string | number, decycler?: EntryProcessor): string {\n      return JSON.stringify(obj, getSerialize(serializer, decycler), indent);\n    }\n    function getSerialize(serializer?: EntryProcessor, decycler?: EntryProcessor): EntryProcessor {\n      let stack: any[] = [],\n        keys: any[] = [];\n      if (!decycler) decycler = function (_: string, value: any) {\n        if (stack[0] === value) return '[Circular ~]';\n        return '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']';\n      };\n      return function (this: any, key: string, value: any) {\n        if (stack.length > 0) {\n          var thisPos = stack.indexOf(this);\n          ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n          ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n          if (~stack.indexOf(value)) value = decycler!.call(this, key, value);\n        } else stack.push(value);\n        return serializer == null ? value : serializer.call(this, key, value);\n      };\n    }\n    let {\n      isImmutable = isImmutableDefault,\n      ignoredPaths,\n      warnAfter = 32\n    } = options;\n    const track = trackForMutations.bind(null, isImmutable, ignoredPaths);\n    return ({\n      getState\n    }) => {\n      let state = getState();\n      let tracker = track(state);\n      let result;\n      return next => action => {\n        const measureUtils = getTimeMeasureUtils(warnAfter, 'ImmutableStateInvariantMiddleware');\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ''}'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        const dispatchedAction = next(action);\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ''}. Take a look at the reducer(s) handling the action ${stringify(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n        return dispatchedAction;\n      };\n    };\n  }\n}","import type { Middleware } from 'redux';\nimport { isAction, isPlainObject } from 'redux';\nimport { getTimeMeasureUtils } from './utils';\n\n/**\n * Returns true if the passed value is \"plain\", i.e. a value that is either\n * directly JSON-serializable (boolean, number, string, array, plain object)\n * or `undefined`.\n *\n * @param val The value to check.\n *\n * @public\n */\nexport function isPlain(val: any) {\n  const type = typeof val;\n  return val == null || type === 'string' || type === 'boolean' || type === 'number' || Array.isArray(val) || isPlainObject(val);\n}\ninterface NonSerializableValue {\n  keyPath: string;\n  value: unknown;\n}\nexport type IgnorePaths = readonly (string | RegExp)[];\n\n/**\n * @public\n */\nexport function findNonSerializableValue(value: unknown, path: string = '', isSerializable: (value: unknown) => boolean = isPlain, getEntries?: (value: unknown) => [string, any][], ignoredPaths: IgnorePaths = [], cache?: WeakSet<object>): NonSerializableValue | false {\n  let foundNestedSerializable: NonSerializableValue | false;\n  if (!isSerializable(value)) {\n    return {\n      keyPath: path || '<root>',\n      value: value\n    };\n  }\n  if (typeof value !== 'object' || value === null) {\n    return false;\n  }\n  if (cache?.has(value)) return false;\n  const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (const [key, nestedValue] of entries) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    if (!isSerializable(nestedValue)) {\n      return {\n        keyPath: nestedPath,\n        value: nestedValue\n      };\n    }\n    if (typeof nestedValue === 'object') {\n      foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n      if (foundNestedSerializable) {\n        return foundNestedSerializable;\n      }\n    }\n  }\n  if (cache && isNestedFrozen(value)) cache.add(value);\n  return false;\n}\nexport function isNestedFrozen(value: object) {\n  if (!Object.isFrozen(value)) return false;\n  for (const nestedValue of Object.values(value)) {\n    if (typeof nestedValue !== 'object' || nestedValue === null) continue;\n    if (!isNestedFrozen(nestedValue)) return false;\n  }\n  return true;\n}\n\n/**\n * Options for `createSerializableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface SerializableStateInvariantMiddlewareOptions {\n  /**\n   * The function to check if a value is considered serializable. This\n   * function is applied recursively to every value contained in the\n   * state. Defaults to `isPlain()`.\n   */\n  isSerializable?: (value: any) => boolean;\n  /**\n   * The function that will be used to retrieve entries from each\n   * value.  If unspecified, `Object.entries` will be used. Defaults\n   * to `undefined`.\n   */\n  getEntries?: (value: any) => [string, any][];\n\n  /**\n   * An array of action types to ignore when checking for serializability.\n   * Defaults to []\n   */\n  ignoredActions?: string[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to\n   * ['meta.arg', 'meta.baseQueryMeta']\n   */\n  ignoredActionPaths?: (string | RegExp)[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to []\n   */\n  ignoredPaths?: (string | RegExp)[];\n  /**\n   * Execution time warning threshold. If the middleware takes longer\n   * than `warnAfter` ms, a warning will be displayed in the console.\n   * Defaults to 32ms.\n   */\n  warnAfter?: number;\n\n  /**\n   * Opt out of checking state. When set to `true`, other state-related params will be ignored.\n   */\n  ignoreState?: boolean;\n\n  /**\n   * Opt out of checking actions. When set to `true`, other action-related params will be ignored.\n   */\n  ignoreActions?: boolean;\n\n  /**\n   * Opt out of caching the results. The cache uses a WeakSet and speeds up repeated checking processes.\n   * The cache is automatically disabled if no browser support for WeakSet is present.\n   */\n  disableCache?: boolean;\n}\n\n/**\n * Creates a middleware that, after every state change, checks if the new\n * state is serializable. If a non-serializable value is found within the\n * state, an error is printed to the console.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createSerializableStateInvariantMiddleware(options: SerializableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    const {\n      isSerializable = isPlain,\n      getEntries,\n      ignoredActions = [],\n      ignoredActionPaths = ['meta.arg', 'meta.baseQueryMeta'],\n      ignoredPaths = [],\n      warnAfter = 32,\n      ignoreState = false,\n      ignoreActions = false,\n      disableCache = false\n    } = options;\n    const cache: WeakSet<object> | undefined = !disableCache && WeakSet ? new WeakSet() : undefined;\n    return storeAPI => next => action => {\n      if (!isAction(action)) {\n        return next(action);\n      }\n      const result = next(action);\n      const measureUtils = getTimeMeasureUtils(warnAfter, 'SerializableStateInvariantMiddleware');\n      if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type as any) !== -1)) {\n        measureUtils.measureTime(() => {\n          const foundActionNonSerializableValue = findNonSerializableValue(action, '', isSerializable, getEntries, ignoredActionPaths, cache);\n          if (foundActionNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundActionNonSerializableValue;\n            console.error(`A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`, value, '\\nTake a look at the logic that dispatched this action: ', action, '\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)', '\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)');\n          }\n        });\n      }\n      if (!ignoreState) {\n        measureUtils.measureTime(() => {\n          const state = storeAPI.getState();\n          const foundStateNonSerializableValue = findNonSerializableValue(state, '', isSerializable, getEntries, ignoredPaths, cache);\n          if (foundStateNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundStateNonSerializableValue;\n            console.error(`A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`, value, `\nTake a look at the reducer(s) handling this action type: ${action.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n      }\n      return result;\n    };\n  }\n}","import type { StoreEnhancer } from 'redux';\nexport const SHOULD_AUTOBATCH = 'RTK_autoBatch';\nexport const prepareAutoBatched = <T,>() => (payload: T): {\n  payload: T;\n  meta: unknown;\n} => ({\n  payload,\n  meta: {\n    [SHOULD_AUTOBATCH]: true\n  }\n});\nconst createQueueWithTimer = (timeout: number) => {\n  return (notify: () => void) => {\n    setTimeout(notify, timeout);\n  };\n};\nexport type AutoBatchOptions = {\n  type: 'tick';\n} | {\n  type: 'timer';\n  timeout: number;\n} | {\n  type: 'raf';\n} | {\n  type: 'callback';\n  queueNotification: (notify: () => void) => void;\n};\n\n/**\n * A Redux store enhancer that watches for \"low-priority\" actions, and delays\n * notifying subscribers until either the queued callback executes or the\n * next \"standard-priority\" action is dispatched.\n *\n * This allows dispatching multiple \"low-priority\" actions in a row with only\n * a single subscriber notification to the UI after the sequence of actions\n * is finished, thus improving UI re-render performance.\n *\n * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.\n * This can be added to `action.meta` manually, or by using the\n * `prepareAutoBatched` helper.\n *\n * By default, it will queue a notification for the end of the event loop tick.\n * However, you can pass several other options to configure the behavior:\n * - `{type: 'tick'}`: queues using `queueMicrotask`\n * - `{type: 'timer', timeout: number}`: queues using `setTimeout`\n * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)\n * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback\n *\n *\n */\nexport const autoBatchEnhancer = (options: AutoBatchOptions = {\n  type: 'raf'\n}): StoreEnhancer => next => (...args) => {\n  const store = next(...args);\n  let notifying = true;\n  let shouldNotifyAtEndOfTick = false;\n  let notificationQueued = false;\n  const listeners = new Set<() => void>();\n  const queueCallback = options.type === 'tick' ? queueMicrotask : options.type === 'raf' ?\n  // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n  typeof window !== 'undefined' && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10) : options.type === 'callback' ? options.queueNotification : createQueueWithTimer(options.timeout);\n  const notifyListeners = () => {\n    // We're running at the end of the event loop tick.\n    // Run the real listener callbacks to actually update the UI.\n    notificationQueued = false;\n    if (shouldNotifyAtEndOfTick) {\n      shouldNotifyAtEndOfTick = false;\n      listeners.forEach(l => l());\n    }\n  };\n  return Object.assign({}, store, {\n    // Override the base `store.subscribe` method to keep original listeners\n    // from running if we're delaying notifications\n    subscribe(listener: () => void) {\n      // Each wrapped listener will only call the real listener if\n      // the `notifying` flag is currently active when it's called.\n      // This lets the base store work as normal, while the actual UI\n      // update becomes controlled by this enhancer.\n      const wrappedListener: typeof listener = () => notifying && listener();\n      const unsubscribe = store.subscribe(wrappedListener);\n      listeners.add(listener);\n      return () => {\n        unsubscribe();\n        listeners.delete(listener);\n      };\n    },\n    // Override the base `store.dispatch` method so that we can check actions\n    // for the `shouldAutoBatch` flag and determine if batching is active\n    dispatch(action: any) {\n      try {\n        // If the action does _not_ have the `shouldAutoBatch` flag,\n        // we resume/continue normal notify-after-each-dispatch behavior\n        notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n        // If a `notifyListeners` microtask was queued, you can't cancel it.\n        // Instead, we set a flag so that it's a no-op when it does run\n        shouldNotifyAtEndOfTick = !notifying;\n        if (shouldNotifyAtEndOfTick) {\n          // We've seen at least 1 action with `SHOULD_AUTOBATCH`. Try to queue\n          // a microtask to notify listeners at the end of the event loop tick.\n          // Make sure we only enqueue this _once_ per tick.\n          if (!notificationQueued) {\n            notificationQueued = true;\n            queueCallback(notifyListeners);\n          }\n        }\n        // Go ahead and process the action as usual, including reducers.\n        // If normal notification behavior is enabled, the store will notify\n        // all of its own listeners, and the wrapper callbacks above will\n        // see `notifying` is true and pass on to the real listener callbacks.\n        // If we're \"batching\" behavior, then the wrapped callbacks will\n        // bail out, causing the base store notification behavior to be no-ops.\n        return store.dispatch(action);\n      } finally {\n        // Assume we're back to normal behavior after each action\n        notifying = true;\n      }\n    }\n  });\n};","import type { StoreEnhancer } from 'redux';\nimport type { AutoBatchOptions } from './autoBatchEnhancer';\nimport { autoBatchEnhancer } from './autoBatchEnhancer';\nimport { Tuple } from './utils';\nimport type { Middlewares } from './configureStore';\nimport type { ExtractDispatchExtensions } from './tsHelpers';\ntype GetDefaultEnhancersOptions = {\n  autoBatch?: boolean | AutoBatchOptions;\n};\nexport type GetDefaultEnhancers<M extends Middlewares<any>> = (options?: GetDefaultEnhancersOptions) => Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>]>;\nexport const buildGetDefaultEnhancers = <M extends Middlewares<any>,>(middlewareEnhancer: StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>): GetDefaultEnhancers<M> => function getDefaultEnhancers(options) {\n  const {\n    autoBatch = true\n  } = options ?? {};\n  let enhancerArray = new Tuple<StoreEnhancer[]>(middlewareEnhancer);\n  if (autoBatch) {\n    enhancerArray.push(autoBatchEnhancer(typeof autoBatch === 'object' ? autoBatch : undefined));\n  }\n  return enhancerArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Draft } from 'immer';\nimport { produce as createNextState, isDraft, isDraftable } from 'immer';\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { ActionReducerMapBuilder } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { NoInfer, TypeGuard } from './tsHelpers';\nimport { freezeDraftable } from './utils';\n\n/**\n * Defines a mapping from action types to corresponding action object shapes.\n *\n * @deprecated This should not be used manually - it is only used for internal\n *             inference purposes and should not have any further value.\n *             It might be removed in the future.\n * @public\n */\nexport type Actions<T extends keyof any = string> = Record<T, Action>;\nexport type ActionMatcherDescription<S, A extends Action> = {\n  matcher: TypeGuard<A>;\n  reducer: CaseReducer<S, NoInfer<A>>;\n};\nexport type ReadonlyActionMatcherDescriptionCollection<S> = ReadonlyArray<ActionMatcherDescription<S, any>>;\nexport type ActionMatcherDescriptionCollection<S> = Array<ActionMatcherDescription<S, any>>;\n\n/**\n * A *case reducer* is a reducer function for a specific action type. Case\n * reducers can be composed to full reducers using `createReducer()`.\n *\n * Unlike a normal Redux reducer, a case reducer is never called with an\n * `undefined` state to determine the initial state. Instead, the initial\n * state is explicitly specified as an argument to `createReducer()`.\n *\n * In addition, a case reducer can choose to mutate the passed-in `state`\n * value directly instead of returning a new state. This does not actually\n * cause the store state to be mutated directly; instead, thanks to\n * [immer](https://github.com/mweststrate/immer), the mutations are\n * translated to copy operations that result in a new state.\n *\n * @public\n */\nexport type CaseReducer<S = any, A extends Action = UnknownAction> = (state: Draft<S>, action: A) => NoInfer<S> | void | Draft<NoInfer<S>>;\n\n/**\n * A mapping from action types to case reducers for `createReducer()`.\n *\n * @deprecated This should not be used manually - it is only used\n *             for internal inference purposes and using it manually\n *             would lead to type erasure.\n *             It might be removed in the future.\n * @public\n */\nexport type CaseReducers<S, AS extends Actions> = { [T in keyof AS]: AS[T] extends Action ? CaseReducer<S, AS[T]> : void };\nexport type NotFunction<T> = T extends Function ? never : T;\nfunction isStateFunction<S>(x: unknown): x is () => S {\n  return typeof x === 'function';\n}\nexport type ReducerWithInitialState<S extends NotFunction<any>> = Reducer<S> & {\n  getInitialState: () => S;\n};\n\n/**\n * A utility function that allows defining a reducer as a mapping from action\n * type to *case reducer* functions that handle these action types. The\n * reducer's initial state is passed as the first argument.\n *\n * @remarks\n * The body of every case reducer is implicitly wrapped with a call to\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\n * This means that rather than returning a new state object, you can also\n * mutate the passed-in state object directly; these mutations will then be\n * automatically and efficiently translated into copies, giving you both\n * convenience and immutability.\n *\n * @overloadSummary\n * This function accepts a callback that receives a `builder` object as its argument.\n * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be\n * called to define what actions this reducer will handle.\n *\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define\n *   case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n * @example\n```ts\nimport {\n  createAction,\n  createReducer,\n  UnknownAction,\n  PayloadAction,\n} from \"@reduxjs/toolkit\";\n\nconst increment = createAction<number>(\"increment\");\nconst decrement = createAction<number>(\"decrement\");\n\nfunction isActionWithNumberPayload(\n  action: UnknownAction\n): action is PayloadAction<number> {\n  return typeof action.payload === \"number\";\n}\n\nconst reducer = createReducer(\n  {\n    counter: 0,\n    sumOfNumberPayloads: 0,\n    unhandledActions: 0,\n  },\n  (builder) => {\n    builder\n      .addCase(increment, (state, action) => {\n        // action is inferred correctly here\n        state.counter += action.payload;\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {\n        state.counter -= action.payload;\n      })\n      // You can apply a \"matcher function\" to incoming actions\n      .addMatcher(isActionWithNumberPayload, (state, action) => {})\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {});\n  }\n);\n```\n * @public\n */\nexport function createReducer<S extends NotFunction<any>>(initialState: S | (() => S), mapOrBuilderCallback: (builder: ActionReducerMapBuilder<S>) => void): ReducerWithInitialState<S> {\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof mapOrBuilderCallback === 'object') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n    }\n  }\n  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n\n  // Ensure the initial state gets frozen either way (if draftable)\n  let getInitialState: () => S;\n  if (isStateFunction(initialState)) {\n    getInitialState = () => freezeDraftable(initialState());\n  } else {\n    const frozenInitialState = freezeDraftable(initialState);\n    getInitialState = () => frozenInitialState;\n  }\n  function reducer(state = getInitialState(), action: any): S {\n    let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n      matcher\n    }) => matcher(action)).map(({\n      reducer\n    }) => reducer)];\n    if (caseReducers.filter(cr => !!cr).length === 0) {\n      caseReducers = [finalDefaultCaseReducer];\n    }\n    return caseReducers.reduce((previousState, caseReducer): S => {\n      if (caseReducer) {\n        if (isDraft(previousState)) {\n          // If it's already a draft, we must already be inside a `createNextState` call,\n          // likely because this is being wrapped in `createReducer`, `createSlice`, or nested\n          // inside an existing draft. It's safe to just pass the draft to the mutator.\n          const draft = previousState as Draft<S>; // We can assume this is already a draft\n          const result = caseReducer(draft, action);\n          if (result === undefined) {\n            return previousState;\n          }\n          return result as S;\n        } else if (!isDraftable(previousState)) {\n          // If state is not draftable (ex: a primitive, such as 0), we want to directly\n          // return the caseReducer func and not wrap it with produce.\n          const result = caseReducer(previousState as any, action);\n          if (result === undefined) {\n            if (previousState === null) {\n              return previousState;\n            }\n            throw Error('A case reducer on a non-draftable value must not return undefined');\n          }\n          return result as S;\n        } else {\n          // @ts-ignore createNextState() produces an Immutable<Draft<S>> rather\n          // than an Immutable<S>, and TypeScript cannot find out how to reconcile\n          // these two types.\n          return createNextState(previousState, (draft: Draft<S>) => {\n            return caseReducer(draft, action);\n          });\n        }\n      }\n      return previousState;\n    }, state);\n  }\n  reducer.getInitialState = getInitialState;\n  return reducer as ReducerWithInitialState<S>;\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6 } from \"@reduxjs/toolkit\";\nimport type { Action } from 'redux';\nimport type { CaseReducer, CaseReducers, ActionMatcherDescriptionCollection } from './createReducer';\nimport type { TypeGuard } from './tsHelpers';\nexport type TypedActionCreator<Type extends string> = {\n  (...args: any[]): Action<Type>;\n  type: Type;\n};\n\n/**\n * A builder for an action <-> reducer map.\n *\n * @public\n */\nexport interface ActionReducerMapBuilder<State> {\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ActionReducerMapBuilder<State>;\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ActionReducerMapBuilder<State>;\n\n  /**\n   * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   * @example\n  ```ts\n  import {\n  createAction,\n  createReducer,\n  AsyncThunk,\n  UnknownAction,\n  } from \"@reduxjs/toolkit\";\n  type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;\n  type PendingAction = ReturnType<GenericAsyncThunk[\"pending\"]>;\n  type RejectedAction = ReturnType<GenericAsyncThunk[\"rejected\"]>;\n  type FulfilledAction = ReturnType<GenericAsyncThunk[\"fulfilled\"]>;\n  const initialState: Record<string, string> = {};\n  const resetAction = createAction(\"reset-tracked-loading-state\");\n  function isPendingAction(action: UnknownAction): action is PendingAction {\n  return typeof action.type === \"string\" && action.type.endsWith(\"/pending\");\n  }\n  const reducer = createReducer(initialState, (builder) => {\n  builder\n    .addCase(resetAction, () => initialState)\n    // matcher can be defined outside as a type predicate function\n    .addMatcher(isPendingAction, (state, action) => {\n      state[action.meta.requestId] = \"pending\";\n    })\n    .addMatcher(\n      // matcher can be defined inline as a type predicate function\n      (action): action is RejectedAction => action.type.endsWith(\"/rejected\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"rejected\";\n      }\n    )\n    // matcher can just return boolean and the matcher can receive a generic argument\n    .addMatcher<FulfilledAction>(\n      (action) => action.type.endsWith(\"/fulfilled\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"fulfilled\";\n      }\n    );\n  });\n  ```\n   */\n  addMatcher<A>(matcher: TypeGuard<A> | ((action: any) => boolean), reducer: CaseReducer<State, A extends Action ? A : A & Action>): Omit<ActionReducerMapBuilder<State>, 'addCase'>;\n\n  /**\n   * Adds a \"default case\" reducer that is executed if no case reducer and no matcher\n   * reducer was executed for this action.\n   * @param reducer - The fallback \"default case\" reducer function.\n   *\n   * @example\n  ```ts\n  import { createReducer } from '@reduxjs/toolkit'\n  const initialState = { otherActions: 0 }\n  const reducer = createReducer(initialState, builder => {\n  builder\n    // .addCase(...)\n    // .addMatcher(...)\n    .addDefaultCase((state, action) => {\n      state.otherActions++\n    })\n  })\n  ```\n   */\n  addDefaultCase(reducer: CaseReducer<State, Action>): {};\n}\nexport function executeReducerBuilderCallback<S>(builderCallback: (builder: ActionReducerMapBuilder<S>) => void): [CaseReducers<S, any>, ActionMatcherDescriptionCollection<S>, CaseReducer<S, Action> | undefined] {\n  const actionsMap: CaseReducers<S, any> = {};\n  const actionMatchers: ActionMatcherDescriptionCollection<S> = [];\n  let defaultCaseReducer: CaseReducer<S, Action> | undefined;\n  const builder = {\n    addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<S>) {\n      if (process.env.NODE_ENV !== 'production') {\n        /*\n         to keep the definition by the user in line with actual behavior,\n         we enforce `addCase` to always be called before calling `addMatcher`\n         as matching cases take precedence over matchers\n         */\n        if (actionMatchers.length > 0) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(26) : '`builder.addCase` should only be called before calling `builder.addMatcher`');\n        }\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(27) : '`builder.addCase` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n      if (!type) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(28) : '`builder.addCase` cannot be called with an empty action type');\n      }\n      if (type in actionsMap) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(29) : '`builder.addCase` cannot be called with two reducers for the same action type ' + `'${type}'`);\n      }\n      actionsMap[type] = reducer;\n      return builder;\n    },\n    addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<S, A extends Action ? A : A & Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(30) : '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      actionMatchers.push({\n        matcher,\n        reducer\n      });\n      return builder;\n    },\n    addDefaultCase(reducer: CaseReducer<S, Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(31) : '`builder.addDefaultCase` can only be called once');\n        }\n      }\n      defaultCaseReducer = reducer;\n      return builder;\n    }\n  };\n  builderCallback(builder);\n  return [actionsMap, actionMatchers, defaultCaseReducer];\n}","import type { ActionFromMatcher, Matcher, UnionToIntersection } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\nimport type { AsyncThunk, AsyncThunkFulfilledActionCreator, AsyncThunkPendingActionCreator, AsyncThunkRejectedActionCreator } from './createAsyncThunk';\n\n/** @public */\nexport type ActionMatchingAnyOf<Matchers extends Matcher<any>[]> = ActionFromMatcher<Matchers[number]>;\n\n/** @public */\nexport type ActionMatchingAllOf<Matchers extends Matcher<any>[]> = UnionToIntersection<ActionMatchingAnyOf<Matchers>>;\nconst matches = (matcher: Matcher<any>, action: any) => {\n  if (hasMatchFunction(matcher)) {\n    return matcher.match(action);\n  } else {\n    return matcher(action);\n  }\n};\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches any one of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAnyOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAnyOf<Matchers> => {\n    return matchers.some(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches all of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAllOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAllOf<Matchers> => {\n    return matchers.every(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * @param action A redux action\n * @param validStatus An array of valid meta.requestStatus values\n *\n * @internal\n */\nexport function hasExpectedRequestMetadata(action: any, validStatus: readonly string[]) {\n  if (!action || !action.meta) return false;\n  const hasValidRequestId = typeof action.meta.requestId === 'string';\n  const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n  return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a: [any] | AnyAsyncThunk[]): a is AnyAsyncThunk[] {\n  return typeof a[0] === 'function' && 'pending' in a[0] && 'fulfilled' in a[0] && 'rejected' in a[0];\n}\nexport type UnknownAsyncThunkPendingAction = ReturnType<AsyncThunkPendingActionCreator<unknown>>;\nexport type PendingActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is pending.\n *\n * @public\n */\nexport function isPending(): (action: any) => action is UnknownAsyncThunkPendingAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is pending.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is PendingActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a pending thunk action\n * @public\n */\nexport function isPending(action: any): action is UnknownAsyncThunkPendingAction;\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isPending()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.pending));\n}\nexport type UnknownAsyncThunkRejectedAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected.\n *\n * @public\n */\nexport function isRejected(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action\n * @public\n */\nexport function isRejected(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejected()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.rejected));\n}\nexport type UnknownAsyncThunkRejectedWithValueAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedWithValueActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']> & (T extends AsyncThunk<any, any, {\n  rejectValue: infer RejectedValue;\n}> ? {\n  payload: RejectedValue;\n} : unknown);\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected with value.\n *\n * @public\n */\nexport function isRejectedWithValue(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected with value.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedWithValueActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action with value\n * @public\n */\nexport function isRejectedWithValue(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  const hasFlag = (action: any): action is any => {\n    return action && action.meta && action.meta.rejectedWithValue;\n  };\n  if (asyncThunks.length === 0) {\n    return isAllOf(isRejected(...asyncThunks), hasFlag);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejectedWithValue()(asyncThunks[0]);\n  }\n  return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nexport type UnknownAsyncThunkFulfilledAction = ReturnType<AsyncThunkFulfilledActionCreator<unknown, unknown>>;\nexport type FulfilledActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['fulfilled']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is fulfilled.\n *\n * @public\n */\nexport function isFulfilled(): (action: any) => action is UnknownAsyncThunkFulfilledAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is fulfilled.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is FulfilledActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a fulfilled thunk action\n * @public\n */\nexport function isFulfilled(action: any): action is UnknownAsyncThunkFulfilledAction;\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['fulfilled']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isFulfilled()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.fulfilled));\n}\nexport type UnknownAsyncThunkAction = UnknownAsyncThunkPendingAction | UnknownAsyncThunkRejectedAction | UnknownAsyncThunkFulfilledAction;\nexport type AnyAsyncThunk = {\n  pending: {\n    match: (action: any) => action is any;\n  };\n  fulfilled: {\n    match: (action: any) => action is any;\n  };\n  rejected: {\n    match: (action: any) => action is any;\n  };\n};\nexport type ActionsFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']> | ActionFromMatcher<T['fulfilled']> | ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator.\n *\n * @public\n */\nexport function isAsyncThunkAction(): (action: any) => action is UnknownAsyncThunkAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is ActionsFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a thunk action\n * @public\n */\nexport function isAsyncThunkAction(action: any): action is UnknownAsyncThunkAction;\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending', 'fulfilled', 'rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isAsyncThunkAction()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.flatMap(asyncThunk => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}","// Borrowed from https://github.com/ai/nanoid/blob/3.0.2/non-secure/index.js\n// This alphabet uses `A-Za-z0-9_-` symbols. A genetic algorithm helped\n// optimize the gzip compression for this alphabet.\nlet urlAlphabet = 'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW';\n\n/**\r\n *\r\n * @public\r\n */\nexport let nanoid = (size = 21) => {\n  let id = '';\n  // A compact alternative for `for (var i = 0; i < step; i++)`.\n  let i = size;\n  while (i--) {\n    // `| 0` is more compact and faster than `Math.floor()`.\n    id += urlAlphabet[Math.random() * 64 | 0];\n  }\n  return id;\n};","import type { Dispatch, UnknownAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport type { ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport { isAnyOf } from './matchers';\nimport { nanoid } from './nanoid';\nimport type { FallbackIfUnknown, Id, IsAny, IsUnknown, SafePromise } from './tsHelpers';\nexport type BaseThunkAPI<S, E, D extends Dispatch = Dispatch, RejectedValue = unknown, RejectedMeta = unknown, FulfilledMeta = unknown> = {\n  dispatch: D;\n  getState: () => S;\n  extra: E;\n  requestId: string;\n  signal: AbortSignal;\n  abort: (reason?: string) => void;\n  rejectWithValue: IsUnknown<RejectedMeta, (value: RejectedValue) => RejectWithValue<RejectedValue, RejectedMeta>, (value: RejectedValue, meta: RejectedMeta) => RejectWithValue<RejectedValue, RejectedMeta>>;\n  fulfillWithValue: IsUnknown<FulfilledMeta, <FulfilledValue>(value: FulfilledValue) => FulfilledValue, <FulfilledValue>(value: FulfilledValue, meta: FulfilledMeta) => FulfillWithMeta<FulfilledValue, FulfilledMeta>>;\n};\n\n/**\n * @public\n */\nexport interface SerializedError {\n  name?: string;\n  message?: string;\n  stack?: string;\n  code?: string;\n}\nconst commonProperties: Array<keyof SerializedError> = ['name', 'message', 'stack', 'code'];\nclass RejectWithValue<Payload, RejectedMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'RejectWithValue';\n  constructor(public readonly payload: Payload, public readonly meta: RejectedMeta) {}\n}\nclass FulfillWithMeta<Payload, FulfilledMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'FulfillWithMeta';\n  constructor(public readonly payload: Payload, public readonly meta: FulfilledMeta) {}\n}\n\n/**\n * Serializes an error into a plain object.\n * Reworked from https://github.com/sindresorhus/serialize-error\n *\n * @public\n */\nexport const miniSerializeError = (value: any): SerializedError => {\n  if (typeof value === 'object' && value !== null) {\n    const simpleError: SerializedError = {};\n    for (const property of commonProperties) {\n      if (typeof value[property] === 'string') {\n        simpleError[property] = value[property];\n      }\n    }\n    return simpleError;\n  }\n  return {\n    message: String(value)\n  };\n};\nexport type AsyncThunkConfig = {\n  state?: unknown;\n  dispatch?: ThunkDispatch<unknown, unknown, UnknownAction>;\n  extra?: unknown;\n  rejectValue?: unknown;\n  serializedErrorType?: unknown;\n  pendingMeta?: unknown;\n  fulfilledMeta?: unknown;\n  rejectedMeta?: unknown;\n};\nexport type GetState<ThunkApiConfig> = ThunkApiConfig extends {\n  state: infer State;\n} ? State : unknown;\ntype GetExtra<ThunkApiConfig> = ThunkApiConfig extends {\n  extra: infer Extra;\n} ? Extra : unknown;\ntype GetDispatch<ThunkApiConfig> = ThunkApiConfig extends {\n  dispatch: infer Dispatch;\n} ? FallbackIfUnknown<Dispatch, ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>> : ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>;\nexport type GetThunkAPI<ThunkApiConfig> = BaseThunkAPI<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, GetDispatch<ThunkApiConfig>, GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>, GetFulfilledMeta<ThunkApiConfig>>;\ntype GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectValue: infer RejectValue;\n} ? RejectValue : unknown;\ntype GetPendingMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  pendingMeta: infer PendingMeta;\n} ? PendingMeta : unknown;\ntype GetFulfilledMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  fulfilledMeta: infer FulfilledMeta;\n} ? FulfilledMeta : unknown;\ntype GetRejectedMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectedMeta: infer RejectedMeta;\n} ? RejectedMeta : unknown;\ntype GetSerializedErrorType<ThunkApiConfig> = ThunkApiConfig extends {\n  serializedErrorType: infer GetSerializedErrorType;\n} ? GetSerializedErrorType : SerializedError;\ntype MaybePromise<T> = T | Promise<T> | (T extends any ? Promise<T> : never);\n\n/**\n * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig extends AsyncThunkConfig> = MaybePromise<IsUnknown<GetFulfilledMeta<ThunkApiConfig>, Returned, FulfillWithMeta<Returned, GetFulfilledMeta<ThunkApiConfig>>> | RejectWithValue<GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>>>;\n/**\n * A type describing the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreator<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>;\n\n/**\n * A ThunkAction created by `createAsyncThunk`.\n * Dispatching it returns a Promise for either a\n * fulfilled or rejected action.\n * Also, the returned value contains an `abort()` method\n * that allows the asyncAction to be cancelled from the outside.\n *\n * @public\n */\nexport type AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = (dispatch: NonNullable<GetDispatch<ThunkApiConfig>>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => SafePromise<ReturnType<AsyncThunkFulfilledActionCreator<Returned, ThunkArg>> | ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>>> & {\n  abort: (reason?: string) => void;\n  requestId: string;\n  arg: ThunkArg;\n  unwrap: () => Promise<Returned>;\n};\n\n/**\n * Config provided when calling the async thunk action creator.\n */\nexport interface AsyncThunkDispatchConfig {\n  /**\n   * An external `AbortSignal` that will be tracked by the internal `AbortSignal`.\n   */\n  signal?: AbortSignal;\n}\ntype AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = IsAny<ThunkArg,\n// any handling\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// unknown handling\nunknown extends ThunkArg ? (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument not specified or specified as void or undefined\n: [ThunkArg] extends [void] | [undefined] ? (arg?: undefined, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains void\n: [void] extends [ThunkArg] // make optional\n? (arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains undefined\n: [undefined] extends [ThunkArg] ? WithStrictNullChecks<\n// with strict nullChecks: make optional\n(arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// without strict null checks this will match everything, so don't make it optional\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>> // default case: normal argument\n: (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>>;\n\n/**\n * Options object for `createAsyncThunk`.\n *\n * @public\n */\nexport type AsyncThunkOptions<ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  /**\n   * A method to control whether the asyncThunk should be executed. Has access to the\n   * `arg`, `api.getState()` and `api.extra` arguments.\n   *\n   * @returns `false` if it should be skipped\n   */\n  condition?(arg: ThunkArg, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): MaybePromise<boolean | undefined>;\n  /**\n   * If `condition` returns `false`, the asyncThunk will be skipped.\n   * This option allows you to control whether a `rejected` action with `meta.condition == false`\n   * will be dispatched or not.\n   *\n   * @default `false`\n   */\n  dispatchConditionRejection?: boolean;\n  serializeError?: (x: unknown) => GetSerializedErrorType<ThunkApiConfig>;\n\n  /**\n   * A function to use when generating the `requestId` for the request sequence.\n   *\n   * @default `nanoid`\n   */\n  idGenerator?: (arg: ThunkArg) => string;\n} & IsUnknown<GetPendingMeta<ThunkApiConfig>, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   *\n   * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.\n   * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload\n   */\n  getPendingMeta?(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   */\n  getPendingMeta(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}>;\nexport type AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[string, ThunkArg, GetPendingMeta<ThunkApiConfig>?], undefined, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'pending';\n} & GetPendingMeta<ThunkApiConfig>>;\nexport type AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Error | null, string, ThunkArg, GetRejectValue<ThunkApiConfig>?, GetRejectedMeta<ThunkApiConfig>?], GetRejectValue<ThunkApiConfig> | undefined, string, GetSerializedErrorType<ThunkApiConfig>, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'rejected';\n  aborted: boolean;\n  condition: boolean;\n} & (({\n  rejectedWithValue: false;\n} & { [K in keyof GetRejectedMeta<ThunkApiConfig>]?: undefined }) | ({\n  rejectedWithValue: true;\n} & GetRejectedMeta<ThunkApiConfig>))>;\nexport type AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Returned, string, ThunkArg, GetFulfilledMeta<ThunkApiConfig>?], Returned, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'fulfilled';\n} & GetFulfilledMeta<ThunkApiConfig>>;\n\n/**\n * A type describing the return value of `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig> & {\n  pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig>;\n  rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>;\n  fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>;\n  // matchSettled?\n  settled: (action: any) => action is ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> | AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>>;\n  typePrefix: string;\n};\nexport type OverrideThunkApiConfigs<OldConfig, NewConfig> = Id<NewConfig & Omit<OldConfig, keyof NewConfig>>;\nexport type CreateAsyncThunkFunction<CurriedThunkApiConfig extends AsyncThunkConfig> = {\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  // separate signature without `AsyncThunkConfig` for better inference\n  <Returned, ThunkArg = void>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, CurriedThunkApiConfig>): AsyncThunk<Returned, ThunkArg, CurriedThunkApiConfig>;\n\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  <Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>, options?: AsyncThunkOptions<ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>): AsyncThunk<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\ntype CreateAsyncThunk<CurriedThunkApiConfig extends AsyncThunkConfig> = CreateAsyncThunkFunction<CurriedThunkApiConfig> & {\n  withTypes<ThunkApiConfig extends AsyncThunkConfig>(): CreateAsyncThunk<OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\nconst externalAbortMessage = 'External signal was aborted';\nexport const createAsyncThunk = /* @__PURE__ */(() => {\n  function createAsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> {\n    type RejectedValue = GetRejectValue<ThunkApiConfig>;\n    type PendingMeta = GetPendingMeta<ThunkApiConfig>;\n    type FulfilledMeta = GetFulfilledMeta<ThunkApiConfig>;\n    type RejectedMeta = GetRejectedMeta<ThunkApiConfig>;\n    const fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/fulfilled', (payload: Returned, requestId: string, arg: ThunkArg, meta?: FulfilledMeta) => ({\n      payload,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'fulfilled' as const\n      }\n    }));\n    const pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/pending', (requestId: string, arg: ThunkArg, meta?: PendingMeta) => ({\n      payload: undefined,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'pending' as const\n      }\n    }));\n    const rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/rejected', (error: Error | null, requestId: string, arg: ThunkArg, payload?: RejectedValue, meta?: RejectedMeta) => ({\n      payload,\n      error: (options && options.serializeError || miniSerializeError)(error || 'Rejected') as GetSerializedErrorType<ThunkApiConfig>,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        rejectedWithValue: !!payload,\n        requestStatus: 'rejected' as const,\n        aborted: error?.name === 'AbortError',\n        condition: error?.name === 'ConditionError'\n      }\n    }));\n    function actionCreator(arg: ThunkArg, {\n      signal\n    }: AsyncThunkDispatchConfig = {}): AsyncThunkAction<Returned, ThunkArg, Required<ThunkApiConfig>> {\n      return (dispatch, getState, extra) => {\n        const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n        const abortController = new AbortController();\n        let abortHandler: (() => void) | undefined;\n        let abortReason: string | undefined;\n        function abort(reason?: string) {\n          abortReason = reason;\n          abortController.abort();\n        }\n        if (signal) {\n          if (signal.aborted) {\n            abort(externalAbortMessage);\n          } else {\n            signal.addEventListener('abort', () => abort(externalAbortMessage), {\n              once: true\n            });\n          }\n        }\n        const promise = async function () {\n          let finalAction: ReturnType<typeof fulfilled | typeof rejected>;\n          try {\n            let conditionResult = options?.condition?.(arg, {\n              getState,\n              extra\n            });\n            if (isThenable(conditionResult)) {\n              conditionResult = await conditionResult;\n            }\n            if (conditionResult === false || abortController.signal.aborted) {\n              // eslint-disable-next-line no-throw-literal\n              throw {\n                name: 'ConditionError',\n                message: 'Aborted due to condition callback returning false.'\n              };\n            }\n            const abortedPromise = new Promise<never>((_, reject) => {\n              abortHandler = () => {\n                reject({\n                  name: 'AbortError',\n                  message: abortReason || 'Aborted'\n                });\n              };\n              abortController.signal.addEventListener('abort', abortHandler);\n            });\n            dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n              requestId,\n              arg\n            }, {\n              getState,\n              extra\n            })) as any);\n            finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n              dispatch,\n              getState,\n              extra,\n              requestId,\n              signal: abortController.signal,\n              abort,\n              rejectWithValue: ((value: RejectedValue, meta?: RejectedMeta) => {\n                return new RejectWithValue(value, meta);\n              }) as any,\n              fulfillWithValue: ((value: unknown, meta?: FulfilledMeta) => {\n                return new FulfillWithMeta(value, meta);\n              }) as any\n            })).then(result => {\n              if (result instanceof RejectWithValue) {\n                throw result;\n              }\n              if (result instanceof FulfillWithMeta) {\n                return fulfilled(result.payload, requestId, arg, result.meta);\n              }\n              return fulfilled(result as any, requestId, arg);\n            })]);\n          } catch (err) {\n            finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err as any, requestId, arg);\n          } finally {\n            if (abortHandler) {\n              abortController.signal.removeEventListener('abort', abortHandler);\n            }\n          }\n          // We dispatch the result action _after_ the catch, to avoid having any errors\n          // here get swallowed by the try/catch block,\n          // per https://twitter.com/dan_abramov/status/770914221638942720\n          // and https://github.com/reduxjs/redux-toolkit/blob/e85eb17b39a2118d859f7b7746e0f3fee523e089/docs/tutorials/advanced-tutorial.md#async-error-handling-logic-in-thunks\n\n          const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && (finalAction as any).meta.condition;\n          if (!skipDispatch) {\n            dispatch(finalAction as any);\n          }\n          return finalAction;\n        }();\n        return Object.assign(promise as SafePromise<any>, {\n          abort,\n          requestId,\n          arg,\n          unwrap() {\n            return promise.then<any>(unwrapResult);\n          }\n        });\n      };\n    }\n    return Object.assign(actionCreator as AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig>, {\n      pending,\n      rejected,\n      fulfilled,\n      settled: isAnyOf(rejected, fulfilled),\n      typePrefix\n    });\n  }\n  createAsyncThunk.withTypes = () => createAsyncThunk;\n  return createAsyncThunk as CreateAsyncThunk<AsyncThunkConfig>;\n})();\ninterface UnwrappableAction {\n  payload: any;\n  meta?: any;\n  error?: any;\n}\ntype UnwrappedActionPayload<T extends UnwrappableAction> = Exclude<T, {\n  error: any;\n}>['payload'];\n\n/**\n * @public\n */\nexport function unwrapResult<R extends UnwrappableAction>(action: R): UnwrappedActionPayload<R> {\n  if (action.meta && action.meta.rejectedWithValue) {\n    throw action.payload;\n  }\n  if (action.error) {\n    throw action.error;\n  }\n  return action.payload;\n}\ntype WithStrictNullChecks<True, False> = undefined extends boolean ? False : True;\nfunction isThenable(value: any): value is PromiseLike<any> {\n  return value !== null && typeof value === 'object' && typeof value.then === 'function';\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { Selector } from 'reselect';\nimport type { InjectConfig } from './combineSlices';\nimport type { ActionCreatorWithoutPayload, PayloadAction, PayloadActionCreator, PrepareAction, _ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport type { AsyncThunk, AsyncThunkConfig, AsyncThunkOptions, AsyncThunkPayloadCreator, OverrideThunkApiConfigs } from './createAsyncThunk';\nimport { createAsyncThunk as _createAsyncThunk } from './createAsyncThunk';\nimport type { ActionMatcherDescriptionCollection, CaseReducer, ReducerWithInitialState } from './createReducer';\nimport { createReducer } from './createReducer';\nimport type { ActionReducerMapBuilder, TypedActionCreator } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { Id, TypeGuard } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\nconst asyncThunkSymbol = /* @__PURE__ */Symbol.for('rtk-slice-createasyncthunk');\n// type is annotated because it's too long to infer\nexport const asyncThunkCreator: {\n  [asyncThunkSymbol]: typeof _createAsyncThunk;\n} = {\n  [asyncThunkSymbol]: _createAsyncThunk\n};\ntype InjectIntoConfig<NewReducerPath extends string> = InjectConfig & {\n  reducerPath?: NewReducerPath;\n};\n\n/**\n * The return value of `createSlice`\n *\n * @public\n */\nexport interface Slice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice name.\n   */\n  name: Name;\n\n  /**\n   *  The slice reducer path.\n   */\n  reducerPath: ReducerPath;\n\n  /**\n   * The slice's reducer.\n   */\n  reducer: Reducer<State>;\n\n  /**\n   * Action creators for the types of actions that are handled by the slice\n   * reducer.\n   */\n  actions: CaseReducerActions<CaseReducers, Name>;\n\n  /**\n   * The individual case reducer functions that were passed in the `reducers` parameter.\n   * This enables reuse and testing if they were defined inline when calling `createSlice`.\n   */\n  caseReducers: SliceDefinedCaseReducers<CaseReducers>;\n\n  /**\n   * Provides access to the initial state value given to the slice.\n   * If a lazy state initializer was provided, it will be called and a fresh value returned.\n   */\n  getInitialState: () => State;\n\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]: State }>>;\n\n  /**\n   * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.\n   */\n  injectInto<NewReducerPath extends string = ReducerPath>(this: this, injectable: {\n    inject: (slice: {\n      reducerPath: string;\n      reducer: Reducer;\n    }, config?: InjectConfig) => void;\n  }, config?: InjectIntoConfig<NewReducerPath>): InjectedSlice<State, CaseReducers, Name, NewReducerPath, Selectors>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Will throw an error if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]: State }): State;\n}\n\n/**\n * A slice after being called with `injectInto(reducer)`.\n *\n * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.\n */\ntype InjectedSlice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> = Omit<Slice<State, CaseReducers, Name, ReducerPath, Selectors>, 'getSelectors' | 'selectors'> & {\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State | undefined>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State | undefined): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]?: State | undefined }>>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Returns initial state if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]?: State | undefined }): State;\n};\n\n/**\n * Options for `createSlice()`.\n *\n * @public\n */\nexport interface CreateSliceOptions<State = any, CR extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice's name. Used to namespace the generated action types.\n   */\n  name: Name;\n\n  /**\n   * The slice's reducer path. Used when injecting into a combined slice reducer.\n   */\n  reducerPath?: ReducerPath;\n\n  /**\n   * The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n   */\n  initialState: State | (() => State);\n\n  /**\n   * A mapping from action types to action-type-specific *case reducer*\n   * functions. For every action type, a matching action creator will be\n   * generated using `createAction()`.\n   */\n  reducers: ValidateSliceCaseReducers<State, CR> | ((creators: ReducerCreators<State>) => CR);\n\n  /**\n   * A callback that receives a *builder* object to define\n   * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n   *\n   *\n   * @example\n  ```ts\n  import { createAction, createSlice, Action } from '@reduxjs/toolkit'\n  const incrementBy = createAction<number>('incrementBy')\n  const decrement = createAction('decrement')\n  interface RejectedAction extends Action {\n  error: Error\n  }\n  function isRejectedAction(action: Action): action is RejectedAction {\n  return action.type.endsWith('rejected')\n  }\n  createSlice({\n  name: 'counter',\n  initialState: 0,\n  reducers: {},\n  extraReducers: builder => {\n    builder\n      .addCase(incrementBy, (state, action) => {\n        // action is inferred correctly here if using TS\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {})\n      // You can match a range of action types\n      .addMatcher(\n        isRejectedAction,\n        // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard\n        (state, action) => {}\n      )\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {})\n    }\n  })\n  ```\n   */\n  extraReducers?: (builder: ActionReducerMapBuilder<State>) => void;\n\n  /**\n   * A map of selectors that receive the slice's state and any additional arguments, and return a result.\n   */\n  selectors?: Selectors;\n}\nexport enum ReducerType {\n  reducer = 'reducer',\n  reducerWithPrepare = 'reducerWithPrepare',\n  asyncThunk = 'asyncThunk',\n}\ntype ReducerDefinition<T extends ReducerType = ReducerType> = {\n  _reducerDefinitionType: T;\n};\nexport type CaseReducerDefinition<S = any, A extends Action = UnknownAction> = CaseReducer<S, A> & ReducerDefinition<ReducerType.reducer>;\n\n/**\n * A CaseReducer with a `prepare` method.\n *\n * @public\n */\nexport type CaseReducerWithPrepare<State, Action extends PayloadAction> = {\n  reducer: CaseReducer<State, Action>;\n  prepare: PrepareAction<Action['payload']>;\n};\nexport interface CaseReducerWithPrepareDefinition<State, Action extends PayloadAction> extends CaseReducerWithPrepare<State, Action>, ReducerDefinition<ReducerType.reducerWithPrepare> {}\ntype AsyncThunkSliceReducerConfig<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  pending?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['pending']>>;\n  rejected?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected']>>;\n  fulfilled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['fulfilled']>>;\n  settled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']>>;\n  options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>;\n};\ntype AsyncThunkSliceReducerDefinition<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig> & ReducerDefinition<ReducerType.asyncThunk> & {\n  payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>;\n};\n\n/**\n * Providing these as part of the config would cause circular types, so we disallow passing them\n */\ntype PreventCircular<ThunkApiConfig> = { [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch' ? never : ThunkApiConfig[K] };\ninterface AsyncThunkCreator<State, CurriedThunkApiConfig extends PreventCircular<AsyncThunkConfig> = PreventCircular<AsyncThunkConfig>> {\n  <Returned, ThunkArg = void>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, CurriedThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, CurriedThunkApiConfig>;\n  <Returned, ThunkArg, ThunkApiConfig extends PreventCircular<AsyncThunkConfig> = {}>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, ThunkApiConfig>;\n  withTypes<ThunkApiConfig extends PreventCircular<AsyncThunkConfig>>(): AsyncThunkCreator<State, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n}\nexport interface ReducerCreators<State> {\n  reducer(caseReducer: CaseReducer<State, PayloadAction>): CaseReducerDefinition<State, PayloadAction>;\n  reducer<Payload>(caseReducer: CaseReducer<State, PayloadAction<Payload>>): CaseReducerDefinition<State, PayloadAction<Payload>>;\n  asyncThunk: AsyncThunkCreator<State>;\n  preparedReducer<Prepare extends PrepareAction<any>>(prepare: Prepare, reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>): {\n    _reducerDefinitionType: ReducerType.reducerWithPrepare;\n    prepare: Prepare;\n    reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>;\n  };\n}\n\n/**\n * The type describing a slice's `reducers` option.\n *\n * @public\n */\nexport type SliceCaseReducers<State> = Record<string, ReducerDefinition> | Record<string, CaseReducer<State, PayloadAction<any>> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>>;\n\n/**\n * The type describing a slice's `selectors` option.\n */\nexport type SliceSelectors<State> = {\n  [K: string]: (sliceState: State, ...args: any[]) => any;\n};\ntype SliceActionType<SliceName extends string, ActionName extends keyof any> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string;\n\n/**\n * Derives the slice's `actions` property from the `reducers` options\n *\n * @public\n */\nexport type CaseReducerActions<CaseReducers extends SliceCaseReducers<any>, SliceName extends string> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends {\n  prepare: any;\n} ? ActionCreatorForCaseReducerWithPrepare<Definition, SliceActionType<SliceName, Type>> : Definition extends AsyncThunkSliceReducerDefinition<any, infer ThunkArg, infer Returned, infer ThunkApiConfig> ? AsyncThunk<Returned, ThunkArg, ThunkApiConfig> : Definition extends {\n  reducer: any;\n} ? ActionCreatorForCaseReducer<Definition['reducer'], SliceActionType<SliceName, Type>> : ActionCreatorForCaseReducer<Definition, SliceActionType<SliceName, Type>> : never };\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducerWithPrepare<CR extends {\n  prepare: any;\n}, Type extends string> = _ActionCreatorWithPreparedPayload<CR['prepare'], Type>;\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducer`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducer<CR, Type extends string> = CR extends ((state: any, action: infer Action) => any) ? Action extends {\n  payload: infer P;\n} ? PayloadActionCreator<P, Type> : ActionCreatorWithoutPayload<Type> : ActionCreatorWithoutPayload<Type>;\n\n/**\n * Extracts the CaseReducers out of a `reducers` object, even if they are\n * tested into a `CaseReducerWithPrepare`.\n *\n * @internal\n */\ntype SliceDefinedCaseReducers<CaseReducers extends SliceCaseReducers<any>> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends AsyncThunkSliceReducerDefinition<any, any, any> ? Id<Pick<Required<Definition>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>> : Definition extends {\n  reducer: infer Reducer;\n} ? Reducer : Definition : never };\ntype RemappedSelector<S extends Selector, NewState> = S extends Selector<any, infer R, infer P> ? Selector<NewState, R, P> & {\n  unwrapped: S;\n} : never;\n\n/**\n * Extracts the final selector type from the `selectors` object.\n *\n * Removes the `string` index signature from the default value.\n */\ntype SliceDefinedSelectors<State, Selectors extends SliceSelectors<State>, RootState> = { [K in keyof Selectors as string extends K ? never : K]: RemappedSelector<Selectors[K], RootState> };\n\n/**\n * Used on a SliceCaseReducers object.\n * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that\n * the `reducer` and the `prepare` function use the same type of `payload`.\n *\n * Might do additional such checks in the future.\n *\n * This type is only ever useful if you want to write your own wrapper around\n * `createSlice`. Please don't use it otherwise!\n *\n * @public\n */\nexport type ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & { [T in keyof ACR]: ACR[T] extends {\n  reducer(s: S, action?: infer A): any;\n} ? {\n  prepare(...a: never[]): Omit<A, 'type'>;\n} : {} };\nfunction getType(slice: string, actionKey: string): string {\n  return `${slice}/${actionKey}`;\n}\ninterface BuildCreateSliceConfig {\n  creators?: {\n    asyncThunk?: typeof asyncThunkCreator;\n  };\n}\nexport function buildCreateSlice({\n  creators\n}: BuildCreateSliceConfig = {}) {\n  const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n  return function createSlice<State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>): Slice<State, CaseReducers, Name, ReducerPath, Selectors> {\n    const {\n      name,\n      reducerPath = name as unknown as ReducerPath\n    } = options;\n    if (!name) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(11) : '`name` is a required option for createSlice');\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (options.initialState === undefined) {\n        console.error('You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`');\n      }\n    }\n    const reducers = (typeof options.reducers === 'function' ? options.reducers(buildReducerCreators<State>()) : options.reducers) || {};\n    const reducerNames = Object.keys(reducers);\n    const context: ReducerHandlingContext<State> = {\n      sliceCaseReducersByName: {},\n      sliceCaseReducersByType: {},\n      actionCreators: {},\n      sliceMatchers: []\n    };\n    const contextMethods: ReducerHandlingContextMethods<State> = {\n      addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<State>) {\n        const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n        if (!type) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(12) : '`context.addCase` cannot be called with an empty action type');\n        }\n        if (type in context.sliceCaseReducersByType) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(13) : '`context.addCase` cannot be called with two reducers for the same action type: ' + type);\n        }\n        context.sliceCaseReducersByType[type] = reducer;\n        return contextMethods;\n      },\n      addMatcher(matcher, reducer) {\n        context.sliceMatchers.push({\n          matcher,\n          reducer\n        });\n        return contextMethods;\n      },\n      exposeAction(name, actionCreator) {\n        context.actionCreators[name] = actionCreator;\n        return contextMethods;\n      },\n      exposeCaseReducer(name, reducer) {\n        context.sliceCaseReducersByName[name] = reducer;\n        return contextMethods;\n      }\n    };\n    reducerNames.forEach(reducerName => {\n      const reducerDefinition = reducers[reducerName];\n      const reducerDetails: ReducerDetails = {\n        reducerName,\n        type: getType(name, reducerName),\n        createNotation: typeof options.reducers === 'function'\n      };\n      if (isAsyncThunkSliceReducerDefinition<State>(reducerDefinition)) {\n        handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n      } else {\n        handleNormalReducerDefinition<State>(reducerDetails, reducerDefinition as any, contextMethods);\n      }\n    });\n    function buildReducer() {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof options.extraReducers === 'object') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n        }\n      }\n      const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = undefined] = typeof options.extraReducers === 'function' ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n      const finalCaseReducers = {\n        ...extraReducers,\n        ...context.sliceCaseReducersByType\n      };\n      return createReducer(options.initialState, builder => {\n        for (let key in finalCaseReducers) {\n          builder.addCase(key, finalCaseReducers[key] as CaseReducer<any>);\n        }\n        for (let sM of context.sliceMatchers) {\n          builder.addMatcher(sM.matcher, sM.reducer);\n        }\n        for (let m of actionMatchers) {\n          builder.addMatcher(m.matcher, m.reducer);\n        }\n        if (defaultCaseReducer) {\n          builder.addDefaultCase(defaultCaseReducer);\n        }\n      });\n    }\n    const selectSelf = (state: State) => state;\n    const injectedSelectorCache = new Map<boolean, WeakMap<(rootState: any) => State | undefined, Record<string, (rootState: any) => any>>>();\n    const injectedStateCache = new WeakMap<(rootState: any) => State, State>();\n    let _reducer: ReducerWithInitialState<State>;\n    function reducer(state: State | undefined, action: UnknownAction) {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer(state, action);\n    }\n    function getInitialState() {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer.getInitialState();\n    }\n    function makeSelectorProps<CurrentReducerPath extends string = ReducerPath>(reducerPath: CurrentReducerPath, injected = false): Pick<Slice<State, CaseReducers, Name, CurrentReducerPath, Selectors>, 'getSelectors' | 'selectors' | 'selectSlice' | 'reducerPath'> {\n      function selectSlice(state: { [K in CurrentReducerPath]: State }) {\n        let sliceState = state[reducerPath];\n        if (typeof sliceState === 'undefined') {\n          if (injected) {\n            sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);\n          } else if (process.env.NODE_ENV !== 'production') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(15) : 'selectSlice returned undefined for an uninjected slice reducer');\n          }\n        }\n        return sliceState;\n      }\n      function getSelectors(selectState: (rootState: any) => State = selectSelf) {\n        const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => new WeakMap());\n        return getOrInsertComputed(selectorCache, selectState, () => {\n          const map: Record<string, Selector<any, any>> = {};\n          for (const [name, selector] of Object.entries(options.selectors ?? {})) {\n            map[name] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);\n          }\n          return map;\n        }) as any;\n      }\n      return {\n        reducerPath,\n        getSelectors,\n        get selectors() {\n          return getSelectors(selectSlice);\n        },\n        selectSlice\n      };\n    }\n    const slice: Slice<State, CaseReducers, Name, ReducerPath, Selectors> = {\n      name,\n      reducer,\n      actions: context.actionCreators as any,\n      caseReducers: context.sliceCaseReducersByName as any,\n      getInitialState,\n      ...makeSelectorProps(reducerPath),\n      injectInto(injectable, {\n        reducerPath: pathOpt,\n        ...config\n      } = {}) {\n        const newReducerPath = pathOpt ?? reducerPath;\n        injectable.inject({\n          reducerPath: newReducerPath,\n          reducer\n        }, config);\n        return {\n          ...slice,\n          ...makeSelectorProps(newReducerPath, true)\n        } as any;\n      }\n    };\n    return slice;\n  };\n}\nfunction wrapSelector<State, NewState, S extends Selector<State>>(selector: S, selectState: Selector<NewState, State>, getInitialState: () => State, injected?: boolean) {\n  function wrapper(rootState: NewState, ...args: any[]) {\n    let sliceState = selectState(rootState);\n    if (typeof sliceState === 'undefined') {\n      if (injected) {\n        sliceState = getInitialState();\n      } else if (process.env.NODE_ENV !== 'production') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(16) : 'selectState returned undefined for an uninjected slice reducer');\n      }\n    }\n    return selector(sliceState, ...args);\n  }\n  wrapper.unwrapped = selector;\n  return wrapper as RemappedSelector<S, NewState>;\n}\n\n/**\n * A function that accepts an initial state, an object full of reducer\n * functions, and a \"slice name\", and automatically generates\n * action creators and action types that correspond to the\n * reducers and state.\n *\n * @public\n */\nexport const createSlice = /* @__PURE__ */buildCreateSlice();\ninterface ReducerHandlingContext<State> {\n  sliceCaseReducersByName: Record<string, CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>>;\n  sliceCaseReducersByType: Record<string, CaseReducer<State, any>>;\n  sliceMatchers: ActionMatcherDescriptionCollection<State>;\n  actionCreators: Record<string, Function>;\n}\ninterface ReducerHandlingContextMethods<State> {\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ReducerHandlingContextMethods<State>;\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ReducerHandlingContextMethods<State>;\n\n  /**\n   * Allows you to match incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   */\n  addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<State, A extends Action ? A : A & Action>): ReducerHandlingContextMethods<State>;\n  /**\n   * Add an action to be exposed under the final `slice.actions` key.\n   * @param name The key to be exposed as.\n   * @param actionCreator The action to expose.\n   * @example\n   * context.exposeAction(\"addPost\", createAction<Post>(\"addPost\"));\n   *\n   * export const { addPost } = slice.actions\n   *\n   * dispatch(addPost(post))\n   */\n  exposeAction(name: string, actionCreator: Function): ReducerHandlingContextMethods<State>;\n  /**\n   * Add a case reducer to be exposed under the final `slice.caseReducers` key.\n   * @param name The key to be exposed as.\n   * @param reducer The reducer to expose.\n   * @example\n   * context.exposeCaseReducer(\"addPost\", (state, action: PayloadAction<Post>) => {\n   *   state.push(action.payload)\n   * })\n   *\n   * slice.caseReducers.addPost([], addPost(post))\n   */\n  exposeCaseReducer(name: string, reducer: CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>): ReducerHandlingContextMethods<State>;\n}\ninterface ReducerDetails {\n  /** The key the reducer was defined under */\n  reducerName: string;\n  /** The predefined action type, i.e. `${slice.name}/${reducerName}` */\n  type: string;\n  /** Whether create. notation was used when defining reducers */\n  createNotation: boolean;\n}\nfunction buildReducerCreators<State>(): ReducerCreators<State> {\n  function asyncThunk(payloadCreator: AsyncThunkPayloadCreator<any, any>, config: AsyncThunkSliceReducerConfig<State, any>): AsyncThunkSliceReducerDefinition<State, any> {\n    return {\n      _reducerDefinitionType: ReducerType.asyncThunk,\n      payloadCreator,\n      ...config\n    };\n  }\n  asyncThunk.withTypes = () => asyncThunk;\n  return {\n    reducer(caseReducer: CaseReducer<State, any>) {\n      return Object.assign({\n        // hack so the wrapping function has the same name as the original\n        // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n        [caseReducer.name](...args: Parameters<typeof caseReducer>) {\n          return caseReducer(...args);\n        }\n      }[caseReducer.name], {\n        _reducerDefinitionType: ReducerType.reducer\n      } as const);\n    },\n    preparedReducer(prepare, reducer) {\n      return {\n        _reducerDefinitionType: ReducerType.reducerWithPrepare,\n        prepare,\n        reducer\n      };\n    },\n    asyncThunk: asyncThunk as any\n  };\n}\nfunction handleNormalReducerDefinition<State>({\n  type,\n  reducerName,\n  createNotation\n}: ReducerDetails, maybeReducerWithPrepare: CaseReducer<State, {\n  payload: any;\n  type: string;\n}> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>, context: ReducerHandlingContextMethods<State>) {\n  let caseReducer: CaseReducer<State, any>;\n  let prepareCallback: PrepareAction<any> | undefined;\n  if ('reducer' in maybeReducerWithPrepare) {\n    if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(17) : 'Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.');\n    }\n    caseReducer = maybeReducerWithPrepare.reducer;\n    prepareCallback = maybeReducerWithPrepare.prepare;\n  } else {\n    caseReducer = maybeReducerWithPrepare;\n  }\n  context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition<State>(reducerDefinition: any): reducerDefinition is AsyncThunkSliceReducerDefinition<State, any, any, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.asyncThunk;\n}\nfunction isCaseReducerWithPrepareDefinition<State>(reducerDefinition: any): reducerDefinition is CaseReducerWithPrepareDefinition<State, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.reducerWithPrepare;\n}\nfunction handleThunkCaseReducerDefinition<State>({\n  type,\n  reducerName\n}: ReducerDetails, reducerDefinition: AsyncThunkSliceReducerDefinition<State, any, any, any>, context: ReducerHandlingContextMethods<State>, cAT: typeof _createAsyncThunk | undefined) {\n  if (!cAT) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(18) : 'Cannot use `create.asyncThunk` in the built-in `createSlice`. ' + 'Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.');\n  }\n  const {\n    payloadCreator,\n    fulfilled,\n    pending,\n    rejected,\n    settled,\n    options\n  } = reducerDefinition;\n  const thunk = cAT(type, payloadCreator, options as any);\n  context.exposeAction(reducerName, thunk);\n  if (fulfilled) {\n    context.addCase(thunk.fulfilled, fulfilled);\n  }\n  if (pending) {\n    context.addCase(thunk.pending, pending);\n  }\n  if (rejected) {\n    context.addCase(thunk.rejected, rejected);\n  }\n  if (settled) {\n    context.addMatcher(thunk.settled, settled);\n  }\n  context.exposeCaseReducer(reducerName, {\n    fulfilled: fulfilled || noop,\n    pending: pending || noop,\n    rejected: rejected || noop,\n    settled: settled || noop\n  });\n}\nfunction noop() {}","import type { EntityId, EntityState, EntityStateAdapter, EntityStateFactory } from './models';\nexport function getInitialEntityState<T, Id extends EntityId>(): EntityState<T, Id> {\n  return {\n    ids: [],\n    entities: {} as Record<Id, T>\n  };\n}\nexport function createInitialStateFactory<T, Id extends EntityId>(stateAdapter: EntityStateAdapter<T, Id>): EntityStateFactory<T, Id> {\n  function getInitialState(state?: undefined, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id>;\n  function getInitialState<S extends object>(additionalState: S, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id> & S;\n  function getInitialState(additionalState: any = {}, entities?: readonly T[] | Record<Id, T>): any {\n    const state = Object.assign(getInitialEntityState(), additionalState);\n    return entities ? stateAdapter.setAll(state, entities) : state;\n  }\n  return {\n    getInitialState\n  };\n}","import type { CreateSelectorFunction, Selector } from 'reselect';\nimport { createDraftSafeSelector } from '../createDraftSafeSelector';\nimport type { EntityId, EntitySelectors, EntityState } from './models';\ntype AnyFunction = (...args: any) => any;\ntype AnyCreateSelectorFunction = CreateSelectorFunction<<F extends AnyFunction>(f: F) => F, <F extends AnyFunction>(f: F) => F>;\nexport type GetSelectorsOptions = {\n  createSelector?: AnyCreateSelectorFunction;\n};\nexport function createSelectorsFactory<T, Id extends EntityId>() {\n  function getSelectors(selectState?: undefined, options?: GetSelectorsOptions): EntitySelectors<T, EntityState<T, Id>, Id>;\n  function getSelectors<V>(selectState: (state: V) => EntityState<T, Id>, options?: GetSelectorsOptions): EntitySelectors<T, V, Id>;\n  function getSelectors<V>(selectState?: (state: V) => EntityState<T, Id>, options: GetSelectorsOptions = {}): EntitySelectors<T, any, Id> {\n    const {\n      createSelector = createDraftSafeSelector as AnyCreateSelectorFunction\n    } = options;\n    const selectIds = (state: EntityState<T, Id>) => state.ids;\n    const selectEntities = (state: EntityState<T, Id>) => state.entities;\n    const selectAll = createSelector(selectIds, selectEntities, (ids, entities): T[] => ids.map(id => entities[id]!));\n    const selectId = (_: unknown, id: Id) => id;\n    const selectById = (entities: Record<Id, T>, id: Id) => entities[id];\n    const selectTotal = createSelector(selectIds, ids => ids.length);\n    if (!selectState) {\n      return {\n        selectIds,\n        selectEntities,\n        selectAll,\n        selectTotal,\n        selectById: createSelector(selectEntities, selectId, selectById)\n      };\n    }\n    const selectGlobalizedEntities = createSelector(selectState as Selector<V, EntityState<T, Id>>, selectEntities);\n    return {\n      selectIds: createSelector(selectState, selectIds),\n      selectEntities: selectGlobalizedEntities,\n      selectAll: createSelector(selectState, selectAll),\n      selectTotal: createSelector(selectState, selectTotal),\n      selectById: createSelector(selectGlobalizedEntities, selectId, selectById)\n    };\n  }\n  return {\n    getSelectors\n  };\n}","import { produce as createNextState, isDraft } from 'immer';\nimport type { Draft } from 'immer';\nimport type { EntityId, DraftableEntityState, PreventAny } from './models';\nimport type { PayloadAction } from '../createAction';\nimport { isFSA } from '../createAction';\nexport const isDraftTyped = isDraft as <T>(value: T | Draft<T>) => value is Draft<T>;\nexport function createSingleArgumentStateOperator<T, Id extends EntityId>(mutator: (state: DraftableEntityState<T, Id>) => void) {\n  const operator = createStateOperator((_: undefined, state: DraftableEntityState<T, Id>) => mutator(state));\n  return function operation<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>): S {\n    return operator(state as S, undefined);\n  };\n}\nexport function createStateOperator<T, Id extends EntityId, R>(mutator: (arg: R, state: DraftableEntityState<T, Id>) => void) {\n  return function operation<S extends DraftableEntityState<T, Id>>(state: S, arg: R | PayloadAction<R>): S {\n    function isPayloadActionArgument(arg: R | PayloadAction<R>): arg is PayloadAction<R> {\n      return isFSA(arg);\n    }\n    const runMutator = (draft: DraftableEntityState<T, Id>) => {\n      if (isPayloadActionArgument(arg)) {\n        mutator(arg.payload, draft);\n      } else {\n        mutator(arg, draft);\n      }\n    };\n    if (isDraftTyped<DraftableEntityState<T, Id>>(state)) {\n      // we must already be inside a `createNextState` call, likely because\n      // this is being wrapped in `createReducer` or `createSlice`.\n      // It's safe to just pass the draft to the mutator.\n      runMutator(state);\n\n      // since it's a draft, we'll just return it\n      return state;\n    }\n    return createNextState(state, runMutator);\n  };\n}","import type { Draft } from 'immer';\nimport { current, isDraft } from 'immer';\nimport type { DraftableEntityState, EntityId, IdSelector, Update } from './models';\nexport function selectIdValue<T, Id extends EntityId>(entity: T, selectId: IdSelector<T, Id>) {\n  const key = selectId(entity);\n  if (process.env.NODE_ENV !== 'production' && key === undefined) {\n    console.warn('The entity passed to the `selectId` implementation returned undefined.', 'You should probably provide your own `selectId` implementation.', 'The entity that was passed:', entity, 'The `selectId` implementation:', selectId.toString());\n  }\n  return key;\n}\nexport function ensureEntitiesArray<T, Id extends EntityId>(entities: readonly T[] | Record<Id, T>): readonly T[] {\n  if (!Array.isArray(entities)) {\n    entities = Object.values(entities);\n  }\n  return entities;\n}\nexport function getCurrent<T>(value: T | Draft<T>): T {\n  return (isDraft(value) ? current(value) : value) as T;\n}\nexport function splitAddedUpdatedEntities<T, Id extends EntityId>(newEntities: readonly T[] | Record<Id, T>, selectId: IdSelector<T, Id>, state: DraftableEntityState<T, Id>): [T[], Update<T, Id>[], Id[]] {\n  newEntities = ensureEntitiesArray(newEntities);\n  const existingIdsArray = getCurrent(state.ids);\n  const existingIds = new Set<Id>(existingIdsArray);\n  const added: T[] = [];\n  const addedIds = new Set<Id>([]);\n  const updated: Update<T, Id>[] = [];\n  for (const entity of newEntities) {\n    const id = selectIdValue(entity, selectId);\n    if (existingIds.has(id) || addedIds.has(id)) {\n      updated.push({\n        id,\n        changes: entity\n      });\n    } else {\n      addedIds.add(id);\n      added.push(entity);\n    }\n  }\n  return [added, updated, existingIdsArray];\n}","import type { Draft } from 'immer';\nimport type { EntityStateAdapter, IdSelector, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator, createSingleArgumentStateOperator } from './state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities } from './utils';\nexport function createUnsortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  function addOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (key in state.entities) {\n      return;\n    }\n    state.ids.push(key as Id & Draft<Id>);\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      addOneMutably(entity, state);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (!(key in state.entities)) {\n      state.ids.push(key as Id & Draft<Id>);\n    }\n    ;\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      setOneMutably(entity, state);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.ids = [];\n    state.entities = {} as Record<Id, T>;\n    addManyMutably(newEntities, state);\n  }\n  function removeOneMutably(key: Id, state: R): void {\n    return removeManyMutably([key], state);\n  }\n  function removeManyMutably(keys: readonly Id[], state: R): void {\n    let didMutate = false;\n    keys.forEach(key => {\n      if (key in state.entities) {\n        delete (state.entities as Record<Id, T>)[key];\n        didMutate = true;\n      }\n    });\n    if (didMutate) {\n      state.ids = (state.ids as Id[]).filter(id => id in state.entities) as Id[] | Draft<Id[]>;\n    }\n  }\n  function removeAllMutably(state: R): void {\n    Object.assign(state, {\n      ids: [],\n      entities: {}\n    });\n  }\n  function takeNewKey(keys: {\n    [id: string]: Id;\n  }, update: Update<T, Id>, state: R): boolean {\n    const original: T | undefined = (state.entities as Record<Id, T>)[update.id];\n    if (original === undefined) {\n      return false;\n    }\n    const updated: T = Object.assign({}, original, update.changes);\n    const newKey = selectIdValue(updated, selectId);\n    const hasNewKey = newKey !== update.id;\n    if (hasNewKey) {\n      keys[update.id] = newKey;\n      delete (state.entities as Record<Id, T>)[update.id];\n    }\n    ;\n    (state.entities as Record<Id, T>)[newKey] = updated;\n    return hasNewKey;\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    const newKeys: {\n      [id: string]: Id;\n    } = {};\n    const updatesPerEntity: {\n      [id: string]: Update<T, Id>;\n    } = {};\n    updates.forEach(update => {\n      // Only apply updates to entities that currently exist\n      if (update.id in state.entities) {\n        // If there are multiple updates to one entity, merge them together\n        updatesPerEntity[update.id] = {\n          id: update.id,\n          // Spreads ignore falsy values, so this works even if there isn't\n          // an existing update already at this key\n          changes: {\n            ...updatesPerEntity[update.id]?.changes,\n            ...update.changes\n          }\n        };\n      }\n    });\n    updates = Object.values(updatesPerEntity);\n    const didMutateEntities = updates.length > 0;\n    if (didMutateEntities) {\n      const didMutateIds = updates.filter(update => takeNewKey(newKeys, update, state)).length > 0;\n      if (didMutateIds) {\n        state.ids = Object.values(state.entities).map(e => selectIdValue(e as T, selectId));\n      }\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    addManyMutably(added, state);\n    updateManyMutably(updated, state);\n  }\n  return {\n    removeAll: createSingleArgumentStateOperator(removeAllMutably),\n    addOne: createStateOperator(addOneMutably),\n    addMany: createStateOperator(addManyMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    upsertMany: createStateOperator(upsertManyMutably),\n    removeOne: createStateOperator(removeOneMutably),\n    removeMany: createStateOperator(removeManyMutably)\n  };\n}","import type { IdSelector, Comparer, EntityStateAdapter, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator } from './state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities, getCurrent } from './utils';\n\n// Borrowed from Replay\nexport function findInsertIndex<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): number {\n  let lowIndex = 0;\n  let highIndex = sortedItems.length;\n  while (lowIndex < highIndex) {\n    let middleIndex = lowIndex + highIndex >>> 1;\n    const currentItem = sortedItems[middleIndex];\n    const res = comparisonFunction(item, currentItem);\n    if (res >= 0) {\n      lowIndex = middleIndex + 1;\n    } else {\n      highIndex = middleIndex;\n    }\n  }\n  return lowIndex;\n}\nexport function insert<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): T[] {\n  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n  sortedItems.splice(insertAtIndex, 0, item);\n  return sortedItems;\n}\nexport function createSortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>, comparer: Comparer<T>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  const {\n    removeOne,\n    removeMany,\n    removeAll\n  } = createUnsortedStateAdapter(selectId);\n  function addOneMutably(entity: T, state: R): void {\n    return addManyMutably([entity], state);\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R, existingIds?: Id[]): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    const existingKeys = new Set<Id>(existingIds ?? getCurrent(state.ids));\n    const models = newEntities.filter(model => !existingKeys.has(selectIdValue(model, selectId)));\n    if (models.length !== 0) {\n      mergeFunction(state, models);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    return setManyMutably([entity], state);\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    if (newEntities.length !== 0) {\n      for (const item of newEntities) {\n        delete (state.entities as Record<Id, T>)[selectId(item)];\n      }\n      mergeFunction(state, newEntities);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.entities = {} as Record<Id, T>;\n    state.ids = [];\n    addManyMutably(newEntities, state, []);\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    let appliedUpdates = false;\n    let replacedIds = false;\n    for (let update of updates) {\n      const entity: T | undefined = (state.entities as Record<Id, T>)[update.id];\n      if (!entity) {\n        continue;\n      }\n      appliedUpdates = true;\n      Object.assign(entity, update.changes);\n      const newId = selectId(entity);\n      if (update.id !== newId) {\n        // We do support the case where updates can change an item's ID.\n        // This makes things trickier - go ahead and swap the IDs in state now.\n        replacedIds = true;\n        delete (state.entities as Record<Id, T>)[update.id];\n        const oldIndex = (state.ids as Id[]).indexOf(update.id);\n        state.ids[oldIndex] = newId;\n        (state.entities as Record<Id, T>)[newId] = entity;\n      }\n    }\n    if (appliedUpdates) {\n      mergeFunction(state, [], appliedUpdates, replacedIds);\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    if (added.length) {\n      addManyMutably(added, state, existingIdsArray);\n    }\n    if (updated.length) {\n      updateManyMutably(updated, state);\n    }\n  }\n  function areArraysEqual(a: readonly unknown[], b: readonly unknown[]) {\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] === b[i]) {\n        continue;\n      }\n      return false;\n    }\n    return true;\n  }\n  type MergeFunction = (state: R, addedItems: readonly T[], appliedUpdates?: boolean, replacedIds?: boolean) => void;\n  const mergeFunction: MergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n    const currentEntities = getCurrent(state.entities);\n    const currentIds = getCurrent(state.ids);\n    const stateEntities = state.entities as Record<Id, T>;\n    let ids: Iterable<Id> = currentIds;\n    if (replacedIds) {\n      ids = new Set(currentIds);\n    }\n    let sortedEntities: T[] = [];\n    for (const id of ids) {\n      const entity = currentEntities[id];\n      if (entity) {\n        sortedEntities.push(entity);\n      }\n    }\n    const wasPreviouslyEmpty = sortedEntities.length === 0;\n\n    // Insert/overwrite all new/updated\n    for (const item of addedItems) {\n      stateEntities[selectId(item)] = item;\n      if (!wasPreviouslyEmpty) {\n        // Binary search insertion generally requires fewer comparisons\n        insert(sortedEntities, item, comparer);\n      }\n    }\n    if (wasPreviouslyEmpty) {\n      // All we have is the incoming values, sort them\n      sortedEntities = addedItems.slice().sort(comparer);\n    } else if (appliedUpdates) {\n      // We should have a _mostly_-sorted array already\n      sortedEntities.sort(comparer);\n    }\n    const newSortedIds = sortedEntities.map(selectId);\n    if (!areArraysEqual(currentIds, newSortedIds)) {\n      state.ids = newSortedIds;\n    }\n  };\n  return {\n    removeOne,\n    removeMany,\n    removeAll,\n    addOne: createStateOperator(addOneMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    addMany: createStateOperator(addManyMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertMany: createStateOperator(upsertManyMutably)\n  };\n}","import type { EntityAdapter, EntityId, EntityAdapterOptions } from './models';\nimport { createInitialStateFactory } from './entity_state';\nimport { createSelectorsFactory } from './state_selectors';\nimport { createSortedStateAdapter } from './sorted_state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport type { WithRequiredProp } from '../tsHelpers';\nexport function createEntityAdapter<T, Id extends EntityId>(options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>): EntityAdapter<T, Id>;\nexport function createEntityAdapter<T extends {\n  id: EntityId;\n}>(options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>): EntityAdapter<T, T['id']>;\n\n/**\n *\n * @param options\n *\n * @public\n */\nexport function createEntityAdapter<T>(options: EntityAdapterOptions<T, EntityId> = {}): EntityAdapter<T, EntityId> {\n  const {\n    selectId,\n    sortComparer\n  }: Required<EntityAdapterOptions<T, EntityId>> = {\n    sortComparer: false,\n    selectId: (instance: any) => instance.id,\n    ...options\n  };\n  const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n  const stateFactory = createInitialStateFactory(stateAdapter);\n  const selectorsFactory = createSelectorsFactory<T, EntityId>();\n  return {\n    selectId,\n    sortComparer,\n    ...stateFactory,\n    ...selectorsFactory,\n    ...stateAdapter\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Action, Dispatch, MiddlewareAPI, UnknownAction } from 'redux';\nimport { isAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport { createAction } from '../createAction';\nimport { nanoid } from '../nanoid';\nimport { TaskAbortError, listenerCancelled, listenerCompleted, taskCancelled, taskCompleted } from './exceptions';\nimport { createDelay, createPause, raceWithSignal, runTask, validateActive } from './task';\nimport type { AbortSignalWithReason, AddListenerOverloads, AnyListenerPredicate, CreateListenerMiddlewareOptions, FallbackAddListenerOptions, ForkOptions, ForkedTask, ForkedTaskExecutor, ListenerEntry, ListenerErrorHandler, ListenerErrorInfo, ListenerMiddleware, ListenerMiddlewareInstance, TakePattern, TaskResult, TypedAddListener, TypedCreateListenerEntry, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\nimport { abortControllerWithReason, addAbortSignalListener, assertFunction, catchRejection, noop } from './utils';\nexport { TaskAbortError } from './exceptions';\nexport type { AsyncTaskExecutor, CreateListenerMiddlewareOptions, ForkedTask, ForkedTaskAPI, ForkedTaskExecutor, ListenerEffect, ListenerEffectAPI, ListenerErrorHandler, ListenerMiddleware, ListenerMiddlewareInstance, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult, TypedAddListener, TypedRemoveListener, TypedStartListening, TypedStopListening, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\n\n//Overly-aggressive byte-shaving\nconst {\n  assign\n} = Object;\n/**\n * @internal\n */\nconst INTERNAL_NIL_TOKEN = {} as const;\nconst alm = 'listenerMiddleware' as const;\nconst createFork = (parentAbortSignal: AbortSignalWithReason<unknown>, parentBlockingPromises: Promise<any>[]) => {\n  const linkControllers = (controller: AbortController) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n  return <T,>(taskExecutor: ForkedTaskExecutor<T>, opts?: ForkOptions): ForkedTask<T> => {\n    assertFunction(taskExecutor, 'taskExecutor');\n    const childAbortController = new AbortController();\n    linkControllers(childAbortController);\n    const result = runTask<T>(async (): Promise<T> => {\n      validateActive(parentAbortSignal);\n      validateActive(childAbortController.signal);\n      const result = (await taskExecutor({\n        pause: createPause(childAbortController.signal),\n        delay: createDelay(childAbortController.signal),\n        signal: childAbortController.signal\n      })) as T;\n      validateActive(childAbortController.signal);\n      return result;\n    }, () => abortControllerWithReason(childAbortController, taskCompleted));\n    if (opts?.autoJoin) {\n      parentBlockingPromises.push(result.catch(noop));\n    }\n    return {\n      result: createPause<TaskResult<T>>(parentAbortSignal)(result),\n      cancel() {\n        abortControllerWithReason(childAbortController, taskCancelled);\n      }\n    };\n  };\n};\nconst createTakePattern = <S,>(startListening: AddListenerOverloads<UnsubscribeListener, S, Dispatch>, signal: AbortSignal): TakePattern<S> => {\n  /**\n   * A function that takes a ListenerPredicate and an optional timeout,\n   * and resolves when either the predicate returns `true` based on an action\n   * state combination or when the timeout expires.\n   * If the parent listener is canceled while waiting, this will throw a\n   * TaskAbortError.\n   */\n  const take = async <P extends AnyListenerPredicate<S>,>(predicate: P, timeout: number | undefined) => {\n    validateActive(signal);\n\n    // Placeholder unsubscribe function until the listener is added\n    let unsubscribe: UnsubscribeListener = () => {};\n    const tuplePromise = new Promise<[Action, S, S]>((resolve, reject) => {\n      // Inside the Promise, we synchronously add the listener.\n      let stopListening = startListening({\n        predicate: predicate as any,\n        effect: (action, listenerApi): void => {\n          // One-shot listener that cleans up as soon as the predicate passes\n          listenerApi.unsubscribe();\n          // Resolve the promise with the same arguments the predicate saw\n          resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n        }\n      });\n      unsubscribe = () => {\n        stopListening();\n        reject();\n      };\n    });\n    const promises: (Promise<null> | Promise<[Action, S, S]>)[] = [tuplePromise];\n    if (timeout != null) {\n      promises.push(new Promise<null>(resolve => setTimeout(resolve, timeout, null)));\n    }\n    try {\n      const output = await raceWithSignal(signal, Promise.race(promises));\n      validateActive(signal);\n      return output;\n    } finally {\n      // Always clean up the listener\n      unsubscribe();\n    }\n  };\n  return ((predicate: AnyListenerPredicate<S>, timeout: number | undefined) => catchRejection(take(predicate, timeout))) as TakePattern<S>;\n};\nconst getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {\n  let {\n    type,\n    actionCreator,\n    matcher,\n    predicate,\n    effect\n  } = options;\n  if (type) {\n    predicate = createAction(type).match;\n  } else if (actionCreator) {\n    type = actionCreator!.type;\n    predicate = actionCreator.match;\n  } else if (matcher) {\n    predicate = matcher;\n  } else if (predicate) {\n    // pass\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(21) : 'Creating or removing a listener requires one of the known fields for matching an action');\n  }\n  assertFunction(effect, 'options.listener');\n  return {\n    predicate,\n    type,\n    effect\n  };\n};\n\n/** Accepts the possible options for creating a listener, and returns a formatted listener entry */\nexport const createListenerEntry: TypedCreateListenerEntry<unknown> = /* @__PURE__ */assign((options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    predicate,\n    effect\n  } = getListenerEntryPropsFrom(options);\n  const entry: ListenerEntry<unknown> = {\n    id: nanoid(),\n    effect,\n    type,\n    predicate,\n    pending: new Set<AbortController>(),\n    unsubscribe: () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(22) : 'Unsubscribe not initialized');\n    }\n  };\n  return entry;\n}, {\n  withTypes: () => createListenerEntry\n}) as unknown as TypedCreateListenerEntry<unknown>;\nconst findListenerEntry = (listenerMap: Map<string, ListenerEntry>, options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    effect,\n    predicate\n  } = getListenerEntryPropsFrom(options);\n  return Array.from(listenerMap.values()).find(entry => {\n    const matchPredicateOrType = typeof type === 'string' ? entry.type === type : entry.predicate === predicate;\n    return matchPredicateOrType && entry.effect === effect;\n  });\n};\nconst cancelActiveListeners = (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>) => {\n  entry.pending.forEach(controller => {\n    abortControllerWithReason(controller, listenerCancelled);\n  });\n};\nconst createClearListenerMiddleware = (listenerMap: Map<string, ListenerEntry>) => {\n  return () => {\n    listenerMap.forEach(cancelActiveListeners);\n    listenerMap.clear();\n  };\n};\n\n/**\n * Safely reports errors to the `errorHandler` provided.\n * Errors that occur inside `errorHandler` are notified in a new task.\n * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)\n * @param errorHandler\n * @param errorToNotify\n */\nconst safelyNotifyError = (errorHandler: ListenerErrorHandler, errorToNotify: unknown, errorInfo: ListenerErrorInfo): void => {\n  try {\n    errorHandler(errorToNotify, errorInfo);\n  } catch (errorHandlerError) {\n    // We cannot let an error raised here block the listener queue.\n    // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...\n    setTimeout(() => {\n      throw errorHandlerError;\n    }, 0);\n  }\n};\n\n/**\n * @public\n */\nexport const addListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/add`), {\n  withTypes: () => addListener\n}) as unknown as TypedAddListener<unknown>;\n\n/**\n * @public\n */\nexport const clearAllListeners = /* @__PURE__ */createAction(`${alm}/removeAll`);\n\n/**\n * @public\n */\nexport const removeListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/remove`), {\n  withTypes: () => removeListener\n}) as unknown as TypedRemoveListener<unknown>;\nconst defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {\n  console.error(`${alm}/error`, ...args);\n};\n\n/**\n * @public\n */\nexport const createListenerMiddleware = <StateType = unknown, DispatchType extends Dispatch<Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown>(middlewareOptions: CreateListenerMiddlewareOptions<ExtraArgument> = {}) => {\n  const listenerMap = new Map<string, ListenerEntry>();\n  const {\n    extra,\n    onError = defaultErrorHandler\n  } = middlewareOptions;\n  assertFunction(onError, 'onError');\n  const insertEntry = (entry: ListenerEntry) => {\n    entry.unsubscribe = () => listenerMap.delete(entry.id);\n    listenerMap.set(entry.id, entry);\n    return (cancelOptions?: UnsubscribeListenerOptions) => {\n      entry.unsubscribe();\n      if (cancelOptions?.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    };\n  };\n  const startListening = ((options: FallbackAddListenerOptions) => {\n    const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options as any);\n    return insertEntry(entry);\n  }) as AddListenerOverloads<any>;\n  assign(startListening, {\n    withTypes: () => startListening\n  });\n  const stopListening = (options: FallbackAddListenerOptions & UnsubscribeListenerOptions): boolean => {\n    const entry = findListenerEntry(listenerMap, options);\n    if (entry) {\n      entry.unsubscribe();\n      if (options.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    }\n    return !!entry;\n  };\n  assign(stopListening, {\n    withTypes: () => stopListening\n  });\n  const notifyListener = async (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>, action: unknown, api: MiddlewareAPI, getOriginalState: () => StateType) => {\n    const internalTaskController = new AbortController();\n    const take = createTakePattern(startListening as AddListenerOverloads<any>, internalTaskController.signal);\n    const autoJoinPromises: Promise<any>[] = [];\n    try {\n      entry.pending.add(internalTaskController);\n      await Promise.resolve(entry.effect(action,\n      // Use assign() rather than ... to avoid extra helper functions added to bundle\n      assign({}, api, {\n        getOriginalState,\n        condition: (predicate: AnyListenerPredicate<any>, timeout?: number) => take(predicate, timeout).then(Boolean),\n        take,\n        delay: createDelay(internalTaskController.signal),\n        pause: createPause<any>(internalTaskController.signal),\n        extra,\n        signal: internalTaskController.signal,\n        fork: createFork(internalTaskController.signal, autoJoinPromises),\n        unsubscribe: entry.unsubscribe,\n        subscribe: () => {\n          listenerMap.set(entry.id, entry);\n        },\n        cancelActiveListeners: () => {\n          entry.pending.forEach((controller, _, set) => {\n            if (controller !== internalTaskController) {\n              abortControllerWithReason(controller, listenerCancelled);\n              set.delete(controller);\n            }\n          });\n        },\n        cancel: () => {\n          abortControllerWithReason(internalTaskController, listenerCancelled);\n          entry.pending.delete(internalTaskController);\n        },\n        throwIfCancelled: () => {\n          validateActive(internalTaskController.signal);\n        }\n      })));\n    } catch (listenerError) {\n      if (!(listenerError instanceof TaskAbortError)) {\n        safelyNotifyError(onError, listenerError, {\n          raisedBy: 'effect'\n        });\n      }\n    } finally {\n      await Promise.all(autoJoinPromises);\n      abortControllerWithReason(internalTaskController, listenerCompleted); // Notify that the task has completed\n      entry.pending.delete(internalTaskController);\n    }\n  };\n  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n  const middleware: ListenerMiddleware<StateType, DispatchType, ExtraArgument> = api => next => action => {\n    if (!isAction(action)) {\n      // we only want to notify listeners for action objects\n      return next(action);\n    }\n    if (addListener.match(action)) {\n      return startListening(action.payload as any);\n    }\n    if (clearAllListeners.match(action)) {\n      clearListenerMiddleware();\n      return;\n    }\n    if (removeListener.match(action)) {\n      return stopListening(action.payload);\n    }\n\n    // Need to get this state _before_ the reducer processes the action\n    let originalState: StateType | typeof INTERNAL_NIL_TOKEN = api.getState();\n\n    // `getOriginalState` can only be called synchronously.\n    // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820\n    const getOriginalState = (): StateType => {\n      if (originalState === INTERNAL_NIL_TOKEN) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(23) : `${alm}: getOriginalState can only be called synchronously`);\n      }\n      return originalState as StateType;\n    };\n    let result: unknown;\n    try {\n      // Actually forward the action to the reducer before we handle listeners\n      result = next(action);\n      if (listenerMap.size > 0) {\n        const currentState = api.getState();\n        // Work around ESBuild+TS transpilation issue\n        const listenerEntries = Array.from(listenerMap.values());\n        for (const entry of listenerEntries) {\n          let runListener = false;\n          try {\n            runListener = entry.predicate(action, currentState, originalState);\n          } catch (predicateError) {\n            runListener = false;\n            safelyNotifyError(onError, predicateError, {\n              raisedBy: 'predicate'\n            });\n          }\n          if (!runListener) {\n            continue;\n          }\n          notifyListener(entry, action, api, getOriginalState);\n        }\n      }\n    } finally {\n      // Remove `originalState` store from this scope.\n      originalState = INTERNAL_NIL_TOKEN;\n    }\n    return result;\n  };\n  return {\n    middleware,\n    startListening,\n    stopListening,\n    clearListeners: clearListenerMiddleware\n  } as ListenerMiddlewareInstance<StateType, DispatchType, ExtraArgument>;\n};","import type { SerializedError } from '@reduxjs/toolkit';\nconst task = 'task';\nconst listener = 'listener';\nconst completed = 'completed';\nconst cancelled = 'cancelled';\n\n/* TaskAbortError error codes  */\nexport const taskCancelled = `task-${cancelled}` as const;\nexport const taskCompleted = `task-${completed}` as const;\nexport const listenerCancelled = `${listener}-${cancelled}` as const;\nexport const listenerCompleted = `${listener}-${completed}` as const;\nexport class TaskAbortError implements SerializedError {\n  name = 'TaskAbortError';\n  message: string;\n  constructor(public code: string | undefined) {\n    this.message = `${task} ${cancelled} (reason: ${code})`;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AbortSignalWithReason } from './types';\nexport const assertFunction: (func: unknown, expected: string) => asserts func is (...args: unknown[]) => unknown = (func: unknown, expected: string) => {\n  if (typeof func !== 'function') {\n    throw new TypeError(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(32) : `${expected} is not a function`);\n  }\n};\nexport const noop = () => {};\nexport const catchRejection = <T,>(promise: Promise<T>, onError = noop): Promise<T> => {\n  promise.catch(onError);\n  return promise;\n};\nexport const addAbortSignalListener = (abortSignal: AbortSignal, callback: (evt: Event) => void) => {\n  abortSignal.addEventListener('abort', callback, {\n    once: true\n  });\n  return () => abortSignal.removeEventListener('abort', callback);\n};\n\n/**\n * Calls `abortController.abort(reason)` and patches `signal.reason`.\n * if it is not supported.\n *\n * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.\n * @param abortController\n * @param reason\n * @returns\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\n */\nexport const abortControllerWithReason = <T,>(abortController: AbortController, reason: T): void => {\n  type Consumer<T> = (val: T) => void;\n  const signal = abortController.signal as AbortSignalWithReason<T>;\n  if (signal.aborted) {\n    return;\n  }\n\n  // Patch `reason` if necessary.\n  // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.\n  // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'\n  // event are are notified immediately.\n  if (!('reason' in signal)) {\n    Object.defineProperty(signal, 'reason', {\n      enumerable: true,\n      value: reason,\n      configurable: true,\n      writable: true\n    });\n  }\n  ;\n  (abortController.abort as Consumer<typeof reason>)(reason);\n};","import { TaskAbortError } from './exceptions';\nimport type { AbortSignalWithReason, TaskResult } from './types';\nimport { addAbortSignalListener, catchRejection, noop } from './utils';\n\n/**\n * Synchronously raises {@link TaskAbortError} if the task tied to the input `signal` has been cancelled.\n * @param signal\n * @param reason\n * @see {TaskAbortError}\n */\nexport const validateActive = (signal: AbortSignal): void => {\n  if (signal.aborted) {\n    const {\n      reason\n    } = signal as AbortSignalWithReason<string>;\n    throw new TaskAbortError(reason);\n  }\n};\n\n/**\n * Generates a race between the promise(s) and the AbortSignal\n * This avoids `Promise.race()`-related memory leaks:\n * https://github.com/nodejs/node/issues/17469#issuecomment-349794909\n */\nexport function raceWithSignal<T>(signal: AbortSignalWithReason<string>, promise: Promise<T>): Promise<T> {\n  let cleanup = noop;\n  return new Promise<T>((resolve, reject) => {\n    const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n    if (signal.aborted) {\n      notifyRejection();\n      return;\n    }\n    cleanup = addAbortSignalListener(signal, notifyRejection);\n    promise.finally(() => cleanup()).then(resolve, reject);\n  }).finally(() => {\n    // after this point, replace `cleanup` with a noop, so there is no reference to `signal` any more\n    cleanup = noop;\n  });\n}\n\n/**\n * Runs a task and returns promise that resolves to {@link TaskResult}.\n * Second argument is an optional `cleanUp` function that always runs after task.\n *\n * **Note:** `runTask` runs the executor in the next microtask.\n * @returns\n */\nexport const runTask = async <T,>(task: () => Promise<T>, cleanUp?: () => void): Promise<TaskResult<T>> => {\n  try {\n    await Promise.resolve();\n    const value = await task();\n    return {\n      status: 'ok',\n      value\n    };\n  } catch (error: any) {\n    return {\n      status: error instanceof TaskAbortError ? 'cancelled' : 'rejected',\n      error\n    };\n  } finally {\n    cleanUp?.();\n  }\n};\n\n/**\n * Given an input `AbortSignal` and a promise returns another promise that resolves\n * as soon the input promise is provided or rejects as soon as\n * `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createPause = <T,>(signal: AbortSignal) => {\n  return (promise: Promise<T>): Promise<T> => {\n    return catchRejection(raceWithSignal(signal, promise).then(output => {\n      validateActive(signal);\n      return output;\n    }));\n  };\n};\n\n/**\n * Given an input `AbortSignal` and `timeoutMs` returns a promise that resolves\n * after `timeoutMs` or rejects as soon as `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createDelay = (signal: AbortSignal) => {\n  const pause = createPause<void>(signal);\n  return (timeoutMs: number): Promise<void> => {\n    return pause(new Promise<void>(resolve => setTimeout(resolve, timeoutMs)));\n  };\n};","import type { Dispatch, Middleware, UnknownAction } from 'redux';\nimport { compose } from 'redux';\nimport { createAction } from '../createAction';\nimport { isAllOf } from '../matchers';\nimport { nanoid } from '../nanoid';\nimport { getOrInsertComputed } from '../utils';\nimport type { AddMiddleware, DynamicMiddleware, DynamicMiddlewareInstance, MiddlewareEntry, WithMiddleware } from './types';\nexport type { DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './types';\nconst createMiddlewareEntry = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(middleware: Middleware<any, State, DispatchType>): MiddlewareEntry<State, DispatchType> => ({\n  middleware,\n  applied: new Map()\n});\nconst matchInstance = (instanceId: string) => (action: any): action is {\n  meta: {\n    instanceId: string;\n  };\n} => action?.meta?.instanceId === instanceId;\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): DynamicMiddlewareInstance<State, DispatchType> => {\n  const instanceId = nanoid();\n  const middlewareMap = new Map<Middleware<any, State, DispatchType>, MiddlewareEntry<State, DispatchType>>();\n  const withMiddleware = Object.assign(createAction('dynamicMiddleware/add', (...middlewares: Middleware<any, State, DispatchType>[]) => ({\n    payload: middlewares,\n    meta: {\n      instanceId\n    }\n  })), {\n    withTypes: () => withMiddleware\n  }) as WithMiddleware<State, DispatchType>;\n  const addMiddleware = Object.assign(function addMiddleware(...middlewares: Middleware<any, State, DispatchType>[]) {\n    middlewares.forEach(middleware => {\n      getOrInsertComputed(middlewareMap, middleware, createMiddlewareEntry);\n    });\n  }, {\n    withTypes: () => addMiddleware\n  }) as AddMiddleware<State, DispatchType>;\n  const getFinalMiddleware: Middleware<{}, State, DispatchType> = api => {\n    const appliedMiddleware = Array.from(middlewareMap.values()).map(entry => getOrInsertComputed(entry.applied, api, entry.middleware));\n    return compose(...appliedMiddleware);\n  };\n  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n  const middleware: DynamicMiddleware<State, DispatchType> = api => next => action => {\n    if (isWithMiddleware(action)) {\n      addMiddleware(...action.payload);\n      return api.dispatch;\n    }\n    return getFinalMiddleware(api)(next)(action);\n  };\n  return {\n    middleware,\n    addMiddleware,\n    withMiddleware,\n    instanceId\n  };\n};","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Reducer, StateFromReducersMapObject, UnknownAction } from 'redux';\nimport { combineReducers } from 'redux';\nimport { nanoid } from './nanoid';\nimport type { Id, NonUndefined, Tail, UnionToIntersection, WithOptionalProp } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\ntype SliceLike<ReducerPath extends string, State> = {\n  reducerPath: ReducerPath;\n  reducer: Reducer<State>;\n};\ntype AnySliceLike = SliceLike<string, any>;\ntype SliceLikeReducerPath<A extends AnySliceLike> = A extends SliceLike<infer ReducerPath, any> ? ReducerPath : never;\ntype SliceLikeState<A extends AnySliceLike> = A extends SliceLike<any, infer State> ? State : never;\nexport type WithSlice<A extends AnySliceLike> = { [Path in SliceLikeReducerPath<A>]: SliceLikeState<A> };\ntype ReducerMap = Record<string, Reducer>;\ntype ExistingSliceLike<DeclaredState> = { [ReducerPath in keyof DeclaredState]: SliceLike<ReducerPath & string, NonUndefined<DeclaredState[ReducerPath]>> }[keyof DeclaredState];\nexport type InjectConfig = {\n  /**\n   * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.\n   */\n  overrideExisting?: boolean;\n};\n\n/**\n * A reducer that allows for slices/reducers to be injected after initialisation.\n */\nexport interface CombinedSliceReducer<InitialState, DeclaredState = InitialState> extends Reducer<DeclaredState, UnknownAction, Partial<DeclaredState>> {\n  /**\n   * Provide a type for slices that will be injected lazily.\n   *\n   * One way to do this would be with interface merging:\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {}\n   *\n   * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * // elsewhere\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBoolean = rootReducer.inject(booleanSlice);\n   *\n   * // elsewhere again\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices {\n   *     customName: CustomState\n   *   }\n   * }\n   *\n   * const withCustom = rootReducer.inject({ reducerPath: \"customName\", reducer: customSlice.reducer })\n   * ```\n   */\n  withLazyLoadedSlices<Lazy = {}>(): CombinedSliceReducer<InitialState, Id<DeclaredState & Partial<Lazy>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<Sl extends Id<ExistingSliceLike<DeclaredState>>>(slice: Sl, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<Sl>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<ReducerPath extends string, State>(slice: SliceLike<ReducerPath, State & (ReducerPath extends keyof DeclaredState ? never : State)>, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<SliceLike<ReducerPath, State>>>>;\n\n  /**\n   * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n   *\n   * ```ts\n   * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n   * //                                                                ^? boolean | undefined\n   *\n   * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n   *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n   *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n   *   return state.boolean;\n   *   //           ^? boolean\n   * })\n   * ```\n   *\n   * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n   *\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {};\n   *\n   * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * export const rootReducer = combineSlices({ inner: innerReducer });\n   *\n   * export type RootState = ReturnType<typeof rootReducer>;\n   *\n   * // elsewhere\n   *\n   * declare module \"./reducer.ts\" {\n   *  export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBool = innerReducer.inject(booleanSlice);\n   *\n   * const selectBoolean = withBool.selector(\n   *   (state) => state.boolean,\n   *   (rootState: RootState) => state.inner\n   * );\n   * //    now expects to be passed RootState instead of innerReducer state\n   *\n   * ```\n   *\n   * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n   *\n   * ```ts\n   * const injectedReducer = rootReducer.inject(booleanSlice);\n   * const selectBoolean = injectedReducer.selector((state) => {\n   *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n   *   return state.boolean\n   * })\n   * ```\n   */\n  selector: {\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown>(selectorFn: Selector): (state: WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n     *\n     * ```ts\n     *\n     * interface LazyLoadedSlices {};\n     *\n     * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n     *\n     * const rootReducer = combineSlices({ inner: innerReducer });\n     *\n     * type RootState = ReturnType<typeof rootReducer>;\n     *\n     * // elsewhere\n     *\n     * declare module \"./reducer.ts\" {\n     *  interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n     * }\n     *\n     * const withBool = innerReducer.inject(booleanSlice);\n     *\n     * const selectBoolean = withBool.selector(\n     *   (state) => state.boolean,\n     *   (rootState: RootState) => state.inner\n     * );\n     * //    now expects to be passed RootState instead of innerReducer state\n     *\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown, RootState>(selectorFn: Selector, selectState: (rootState: RootState, ...args: Tail<Parameters<Selector>>) => WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>): (state: RootState, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n    /**\n     * Returns the unproxied state. Useful for debugging.\n     * @param state state Proxy, that ensures injected reducers have value\n     * @returns original, unproxied state\n     * @throws if value passed is not a state Proxy\n     */\n    original: (state: DeclaredState) => InitialState & Partial<DeclaredState>;\n  };\n}\ntype InitialState<Slices extends Array<AnySliceLike | ReducerMap>> = UnionToIntersection<Slices[number] extends infer Slice ? Slice extends AnySliceLike ? WithSlice<Slice> : StateFromReducersMapObject<Slice> : never>;\nconst isSliceLike = (maybeSliceLike: AnySliceLike | ReducerMap): maybeSliceLike is AnySliceLike => 'reducerPath' in maybeSliceLike && typeof maybeSliceLike.reducerPath === 'string';\nconst getReducers = (slices: Array<AnySliceLike | ReducerMap>) => slices.flatMap(sliceOrMap => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer] as const] : Object.entries(sliceOrMap));\nconst ORIGINAL_STATE = Symbol.for('rtk-state-proxy-original');\nconst isStateProxy = (value: any) => !!value && !!value[ORIGINAL_STATE];\nconst stateProxyMap = new WeakMap<object, object>();\nconst createStateProxy = <State extends object,>(state: State, reducerMap: Partial<Record<PropertyKey, Reducer>>, initialStateCache: Record<PropertyKey, unknown>) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n  get: (target, prop, receiver) => {\n    if (prop === ORIGINAL_STATE) return target;\n    const result = Reflect.get(target, prop, receiver);\n    if (typeof result === 'undefined') {\n      const cached = initialStateCache[prop];\n      if (typeof cached !== 'undefined') return cached;\n      const reducer = reducerMap[prop];\n      if (reducer) {\n        // ensure action type is random, to prevent reducer treating it differently\n        const reducerResult = reducer(undefined, {\n          type: nanoid()\n        });\n        if (typeof reducerResult === 'undefined') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n        }\n        initialStateCache[prop] = reducerResult;\n        return reducerResult;\n      }\n    }\n    return result;\n  }\n})) as State;\nconst original = (state: any) => {\n  if (!isStateProxy(state)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(25) : 'original must be used on state Proxy');\n  }\n  return state[ORIGINAL_STATE];\n};\nconst emptyObject = {};\nconst noopReducer: Reducer<Record<string, any>> = (state = emptyObject) => state;\nexport function combineSlices<Slices extends Array<AnySliceLike | ReducerMap>>(...slices: Slices): CombinedSliceReducer<Id<InitialState<Slices>>> {\n  const reducerMap = Object.fromEntries<Reducer>(getReducers(slices));\n  const getReducer = () => Object.keys(reducerMap).length ? combineReducers(reducerMap) : noopReducer;\n  let reducer = getReducer();\n  function combinedReducer(state: Record<string, unknown>, action: UnknownAction) {\n    return reducer(state, action);\n  }\n  combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n  const initialStateCache: Record<PropertyKey, unknown> = {};\n  const inject = (slice: AnySliceLike, config: InjectConfig = {}): typeof combinedReducer => {\n    const {\n      reducerPath,\n      reducer: reducerToInject\n    } = slice;\n    const currentReducer = reducerMap[reducerPath];\n    if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n      }\n      return combinedReducer;\n    }\n    if (config.overrideExisting && currentReducer !== reducerToInject) {\n      delete initialStateCache[reducerPath];\n    }\n    reducerMap[reducerPath] = reducerToInject;\n    reducer = getReducer();\n    return combinedReducer;\n  };\n  const selector = Object.assign(function makeSelector<State extends object, RootState, Args extends any[]>(selectorFn: (state: State, ...args: Args) => any, selectState?: (rootState: RootState, ...args: Args) => State) {\n    return function selector(state: State, ...args: Args) {\n      return selectorFn(createStateProxy(selectState ? selectState(state as any, ...args) : state, reducerMap, initialStateCache), ...args);\n    };\n  }, {\n    original\n  });\n  return Object.assign(combinedReducer, {\n    inject,\n    selector\n  }) as any;\n}","/**\r\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\r\n *\r\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\r\n * during build.\r\n * @param {number} code\r\n */\nexport function formatProdErrorMessage(code: number) {\n  return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}"],"mappings":"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","names":["produce","current","freeze","original","isDraft","createSelector","createSelectorCreator","lruMemoize","weakMapMemoize","current","isDraft","createSelectorCreator","weakMapMemoize","createDraftSafeSelectorCreator","args","createSelector","createDraftSafeSelector","selector","wrappedSelector","value","rest","applyMiddleware","createStore","compose","combineReducers","isPlainObject","compose","composeWithDevTools","devToolsEnhancer","noop","thunkMiddleware","withExtraArgument","isAction","hasMatchFunction","v","createAction","type","prepareAction","actionCreator","args","prepared","formatProdErrorMessage","action","isAction","isActionCreator","hasMatchFunction","isFSA","isValidKey","key","getMessage","type","splitType","actionName","createActionCreatorInvariantMiddleware","options","next","action","createNextState","isDraftable","Tuple","_Tuple","items","arr","freezeDraftable","val","isDraftable","createNextState","getOrInsertComputed","map","key","compute","isImmutableDefault","value","createImmutableStateInvariantMiddleware","options","next","action","stringify","getSerialize","isPlainObject","isPlain","val","type","isPlainObject","findNonSerializableValue","value","path","isSerializable","getEntries","ignoredPaths","cache","foundNestedSerializable","entries","hasIgnoredPaths","key","nestedValue","nestedPath","ignored","isNestedFrozen","createSerializableStateInvariantMiddleware","options","next","action","isBoolean","x","buildGetDefaultMiddleware","options","thunk","immutableCheck","serializableCheck","actionCreatorCheck","middlewareArray","Tuple","thunkMiddleware","withExtraArgument","SHOULD_AUTOBATCH","prepareAutoBatched","payload","createQueueWithTimer","timeout","notify","autoBatchEnhancer","options","next","args","store","notifying","shouldNotifyAtEndOfTick","notificationQueued","listeners","queueCallback","notifyListeners","l","listener","wrappedListener","unsubscribe","action","buildGetDefaultEnhancers","middlewareEnhancer","options","autoBatch","enhancerArray","Tuple","autoBatchEnhancer","configureStore","options","getDefaultMiddleware","buildGetDefaultMiddleware","reducer","middleware","devTools","duplicateMiddlewareCheck","preloadedState","enhancers","rootReducer","isPlainObject","combineReducers","formatProdErrorMessage","finalMiddleware","finalCompose","compose","composeWithDevTools","middlewareEnhancer","applyMiddleware","getDefaultEnhancers","buildGetDefaultEnhancers","storeEnhancers","composedEnhancer","createStore","createNextState","isDraft","isDraftable","executeReducerBuilderCallback","builderCallback","actionsMap","actionMatchers","defaultCaseReducer","builder","typeOrActionCreator","reducer","type","formatProdErrorMessage","matcher","isStateFunction","x","createReducer","initialState","mapOrBuilderCallback","actionsMap","finalActionMatchers","finalDefaultCaseReducer","executeReducerBuilderCallback","getInitialState","freezeDraftable","frozenInitialState","reducer","state","action","caseReducers","matcher","cr","previousState","caseReducer","isDraft","result","isDraftable","createNextState","draft","matches","matcher","action","hasMatchFunction","isAnyOf","matchers","isAllOf","hasExpectedRequestMetadata","validStatus","hasValidRequestId","hasValidRequestStatus","isAsyncThunkArray","a","isPending","asyncThunks","asyncThunk","isRejected","isRejectedWithValue","hasFlag","isFulfilled","isAsyncThunkAction","urlAlphabet","nanoid","size","id","i","commonProperties","RejectWithValue","payload","meta","FulfillWithMeta","miniSerializeError","value","simpleError","property","externalAbortMessage","createAsyncThunk","typePrefix","payloadCreator","options","fulfilled","createAction","requestId","arg","pending","rejected","error","actionCreator","signal","dispatch","getState","extra","nanoid","abortController","abortHandler","abortReason","abort","reason","promise","finalAction","conditionResult","isThenable","abortedPromise","_","reject","result","err","unwrapResult","isAnyOf","action","asyncThunkSymbol","asyncThunkCreator","createAsyncThunk","ReducerType","getType","slice","actionKey","buildCreateSlice","creators","cAT","options","name","reducerPath","formatProdErrorMessage","reducers","buildReducerCreators","reducerNames","context","contextMethods","typeOrActionCreator","reducer","type","matcher","actionCreator","reducerName","reducerDefinition","reducerDetails","isAsyncThunkSliceReducerDefinition","handleThunkCaseReducerDefinition","handleNormalReducerDefinition","buildReducer","extraReducers","actionMatchers","defaultCaseReducer","executeReducerBuilderCallback","finalCaseReducers","createReducer","builder","key","sM","m","selectSelf","state","injectedSelectorCache","injectedStateCache","_reducer","action","getInitialState","makeSelectorProps","injected","selectSlice","sliceState","getOrInsertComputed","getSelectors","selectState","selectorCache","map","selector","wrapSelector","injectable","pathOpt","config","newReducerPath","wrapper","rootState","args","createSlice","asyncThunk","payloadCreator","caseReducer","prepare","createNotation","maybeReducerWithPrepare","prepareCallback","isCaseReducerWithPrepareDefinition","createAction","fulfilled","pending","rejected","settled","thunk","noop","getInitialEntityState","createInitialStateFactory","stateAdapter","getInitialState","additionalState","entities","state","createSelectorsFactory","getSelectors","selectState","options","createSelector","createDraftSafeSelector","selectIds","state","selectEntities","selectAll","ids","entities","id","selectId","_","selectById","selectTotal","selectGlobalizedEntities","createNextState","isDraft","isDraftTyped","isDraft","createSingleArgumentStateOperator","mutator","operator","createStateOperator","_","state","arg","isPayloadActionArgument","isFSA","runMutator","draft","createNextState","current","isDraft","selectIdValue","entity","selectId","ensureEntitiesArray","entities","getCurrent","value","splitAddedUpdatedEntities","newEntities","state","existingIdsArray","existingIds","added","addedIds","updated","id","createUnsortedStateAdapter","selectId","addOneMutably","entity","state","key","selectIdValue","addManyMutably","newEntities","ensureEntitiesArray","setOneMutably","setManyMutably","setAllMutably","removeOneMutably","removeManyMutably","keys","didMutate","id","removeAllMutably","takeNewKey","update","original","updated","newKey","hasNewKey","updateOneMutably","updateManyMutably","updates","newKeys","updatesPerEntity","e","upsertOneMutably","upsertManyMutably","added","splitAddedUpdatedEntities","createSingleArgumentStateOperator","createStateOperator","findInsertIndex","sortedItems","item","comparisonFunction","lowIndex","highIndex","middleIndex","currentItem","insert","insertAtIndex","createSortedStateAdapter","selectId","comparer","removeOne","removeMany","removeAll","createUnsortedStateAdapter","addOneMutably","entity","state","addManyMutably","newEntities","existingIds","ensureEntitiesArray","existingKeys","getCurrent","models","model","selectIdValue","mergeFunction","setOneMutably","setManyMutably","setAllMutably","updateOneMutably","update","updateManyMutably","updates","appliedUpdates","replacedIds","newId","oldIndex","upsertOneMutably","upsertManyMutably","added","updated","existingIdsArray","splitAddedUpdatedEntities","areArraysEqual","a","b","i","addedItems","currentEntities","currentIds","stateEntities","ids","sortedEntities","id","wasPreviouslyEmpty","newSortedIds","createStateOperator","createEntityAdapter","options","selectId","sortComparer","instance","stateAdapter","createSortedStateAdapter","createUnsortedStateAdapter","stateFactory","createInitialStateFactory","selectorsFactory","createSelectorsFactory","isAction","task","listener","completed","cancelled","taskCancelled","taskCompleted","listenerCancelled","listenerCompleted","TaskAbortError","code","assertFunction","func","expected","formatProdErrorMessage","noop","catchRejection","promise","onError","addAbortSignalListener","abortSignal","callback","abortControllerWithReason","abortController","reason","signal","validateActive","signal","reason","TaskAbortError","raceWithSignal","promise","cleanup","noop","resolve","reject","notifyRejection","addAbortSignalListener","runTask","task","cleanUp","error","createPause","catchRejection","output","createDelay","pause","timeoutMs","assign","INTERNAL_NIL_TOKEN","alm","createFork","parentAbortSignal","parentBlockingPromises","linkControllers","controller","addAbortSignalListener","abortControllerWithReason","taskExecutor","opts","assertFunction","childAbortController","result","runTask","validateActive","createPause","createDelay","taskCompleted","noop","taskCancelled","createTakePattern","startListening","signal","take","predicate","timeout","unsubscribe","promises","resolve","reject","stopListening","action","listenerApi","output","raceWithSignal","catchRejection","getListenerEntryPropsFrom","options","type","actionCreator","matcher","effect","createAction","formatProdErrorMessage","createListenerEntry","nanoid","findListenerEntry","listenerMap","entry","cancelActiveListeners","listenerCancelled","createClearListenerMiddleware","safelyNotifyError","errorHandler","errorToNotify","errorInfo","errorHandlerError","addListener","clearAllListeners","removeListener","defaultErrorHandler","args","createListenerMiddleware","middlewareOptions","extra","onError","insertEntry","cancelOptions","notifyListener","api","getOriginalState","internalTaskController","autoJoinPromises","_","set","listenerError","TaskAbortError","listenerCompleted","clearListenerMiddleware","next","isAction","originalState","currentState","listenerEntries","runListener","predicateError","compose","createMiddlewareEntry","middleware","matchInstance","instanceId","action","createDynamicMiddleware","nanoid","middlewareMap","withMiddleware","createAction","middlewares","addMiddleware","getOrInsertComputed","getFinalMiddleware","api","appliedMiddleware","entry","compose","isWithMiddleware","isAllOf","next","combineReducers","isSliceLike","maybeSliceLike","getReducers","slices","sliceOrMap","ORIGINAL_STATE","isStateProxy","value","stateProxyMap","createStateProxy","state","reducerMap","initialStateCache","getOrInsertComputed","target","prop","receiver","result","cached","reducer","reducerResult","nanoid","formatProdErrorMessage","original","emptyObject","noopReducer","combineSlices","getReducer","combineReducers","combinedReducer","action","inject","slice","config","reducerPath","reducerToInject","currentReducer","selector","selectorFn","selectState","args","formatProdErrorMessage","code"]}
Index: node_modules/@reduxjs/toolkit/dist/redux-toolkit.legacy-esm.js
===================================================================
--- node_modules/@reduxjs/toolkit/dist/redux-toolkit.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/redux-toolkit.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2310 @@
+var __defProp = Object.defineProperty;
+var __defProps = Object.defineProperties;
+var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
+var __getOwnPropSymbols = Object.getOwnPropertySymbols;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __propIsEnum = Object.prototype.propertyIsEnumerable;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __spreadValues = (a, b) => {
+  for (var prop in b || (b = {}))
+    if (__hasOwnProp.call(b, prop))
+      __defNormalProp(a, prop, b[prop]);
+  if (__getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(b)) {
+      if (__propIsEnum.call(b, prop))
+        __defNormalProp(a, prop, b[prop]);
+    }
+  return a;
+};
+var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
+var __objRest = (source, exclude) => {
+  var target = {};
+  for (var prop in source)
+    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
+      target[prop] = source[prop];
+  if (source != null && __getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(source)) {
+      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
+        target[prop] = source[prop];
+    }
+  return target;
+};
+var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
+
+// src/index.ts
+export * from "redux";
+import { produce, current as current3, freeze, original as original2, isDraft as isDraft5 } from "immer";
+import { createSelector, createSelectorCreator as createSelectorCreator2, lruMemoize, weakMapMemoize as weakMapMemoize2 } from "reselect";
+
+// src/createDraftSafeSelector.ts
+import { current, isDraft } from "immer";
+import { createSelectorCreator, weakMapMemoize } from "reselect";
+var createDraftSafeSelectorCreator = (...args) => {
+  const createSelector2 = createSelectorCreator(...args);
+  const createDraftSafeSelector2 = Object.assign((...args2) => {
+    const selector = createSelector2(...args2);
+    const wrappedSelector = (value, ...rest) => selector(isDraft(value) ? current(value) : value, ...rest);
+    Object.assign(wrappedSelector, selector);
+    return wrappedSelector;
+  }, {
+    withTypes: () => createDraftSafeSelector2
+  });
+  return createDraftSafeSelector2;
+};
+var createDraftSafeSelector = /* @__PURE__ */ createDraftSafeSelectorCreator(weakMapMemoize);
+
+// src/configureStore.ts
+import { applyMiddleware, createStore, compose as compose2, combineReducers, isPlainObject as isPlainObject2 } from "redux";
+
+// src/devtoolsExtension.ts
+import { compose } from "redux";
+var composeWithDevTools = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function() {
+  if (arguments.length === 0) return void 0;
+  if (typeof arguments[0] === "object") return compose;
+  return compose.apply(null, arguments);
+};
+var devToolsEnhancer = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function() {
+  return function(noop3) {
+    return noop3;
+  };
+};
+
+// src/getDefaultMiddleware.ts
+import { thunk as thunkMiddleware, withExtraArgument } from "redux-thunk";
+
+// src/createAction.ts
+import { isAction } from "redux";
+
+// src/tsHelpers.ts
+var hasMatchFunction = (v) => {
+  return v && typeof v.match === "function";
+};
+
+// src/createAction.ts
+function createAction(type, prepareAction) {
+  function actionCreator(...args) {
+    if (prepareAction) {
+      let prepared = prepareAction(...args);
+      if (!prepared) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(0) : "prepareAction did not return an object");
+      }
+      return __spreadValues(__spreadValues({
+        type,
+        payload: prepared.payload
+      }, "meta" in prepared && {
+        meta: prepared.meta
+      }), "error" in prepared && {
+        error: prepared.error
+      });
+    }
+    return {
+      type,
+      payload: args[0]
+    };
+  }
+  actionCreator.toString = () => `${type}`;
+  actionCreator.type = type;
+  actionCreator.match = (action) => isAction(action) && action.type === type;
+  return actionCreator;
+}
+function isActionCreator(action) {
+  return typeof action === "function" && "type" in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it
+  hasMatchFunction(action);
+}
+function isFSA(action) {
+  return isAction(action) && Object.keys(action).every(isValidKey);
+}
+function isValidKey(key) {
+  return ["type", "payload", "error", "meta"].indexOf(key) > -1;
+}
+
+// src/actionCreatorInvariantMiddleware.ts
+function getMessage(type) {
+  const splitType = type ? `${type}`.split("/") : [];
+  const actionName = splitType[splitType.length - 1] || "actionCreator";
+  return `Detected an action creator with type "${type || "unknown"}" being dispatched. 
+Make sure you're calling the action creator before dispatching, i.e. \`dispatch(${actionName}())\` instead of \`dispatch(${actionName})\`. This is necessary even if the action has no payload.`;
+}
+function createActionCreatorInvariantMiddleware(options = {}) {
+  if (process.env.NODE_ENV === "production") {
+    return () => (next) => (action) => next(action);
+  }
+  const {
+    isActionCreator: isActionCreator2 = isActionCreator
+  } = options;
+  return () => (next) => (action) => {
+    if (isActionCreator2(action)) {
+      console.warn(getMessage(action.type));
+    }
+    return next(action);
+  };
+}
+
+// src/utils.ts
+import { produce as createNextState, isDraftable } from "immer";
+function getTimeMeasureUtils(maxDelay, fnName) {
+  let elapsed = 0;
+  return {
+    measureTime(fn) {
+      const started = Date.now();
+      try {
+        return fn();
+      } finally {
+        const finished = Date.now();
+        elapsed += finished - started;
+      }
+    },
+    warnIfExceeded() {
+      if (elapsed > maxDelay) {
+        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. 
+If your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.
+It is disabled in production builds, so you don't need to worry about that.`);
+      }
+    }
+  };
+}
+var Tuple = class _Tuple extends Array {
+  constructor(...items) {
+    super(...items);
+    Object.setPrototypeOf(this, _Tuple.prototype);
+  }
+  static get [Symbol.species]() {
+    return _Tuple;
+  }
+  concat(...arr) {
+    return super.concat.apply(this, arr);
+  }
+  prepend(...arr) {
+    if (arr.length === 1 && Array.isArray(arr[0])) {
+      return new _Tuple(...arr[0].concat(this));
+    }
+    return new _Tuple(...arr.concat(this));
+  }
+};
+function freezeDraftable(val) {
+  return isDraftable(val) ? createNextState(val, () => {
+  }) : val;
+}
+function getOrInsertComputed(map, key, compute) {
+  if (map.has(key)) return map.get(key);
+  return map.set(key, compute(key)).get(key);
+}
+
+// src/immutableStateInvariantMiddleware.ts
+function isImmutableDefault(value) {
+  return typeof value !== "object" || value == null || Object.isFrozen(value);
+}
+function trackForMutations(isImmutable, ignorePaths, obj) {
+  const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);
+  return {
+    detectMutations() {
+      return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);
+    }
+  };
+}
+function trackProperties(isImmutable, ignorePaths = [], obj, path = "", checkedObjects = /* @__PURE__ */ new Set()) {
+  const tracked = {
+    value: obj
+  };
+  if (!isImmutable(obj) && !checkedObjects.has(obj)) {
+    checkedObjects.add(obj);
+    tracked.children = {};
+    for (const key in obj) {
+      const childPath = path ? path + "." + key : key;
+      if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {
+        continue;
+      }
+      tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);
+    }
+  }
+  return tracked;
+}
+function detectMutations(isImmutable, ignoredPaths = [], trackedProperty, obj, sameParentRef = false, path = "") {
+  const prevObj = trackedProperty ? trackedProperty.value : void 0;
+  const sameRef = prevObj === obj;
+  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {
+    return {
+      wasMutated: true,
+      path
+    };
+  }
+  if (isImmutable(prevObj) || isImmutable(obj)) {
+    return {
+      wasMutated: false
+    };
+  }
+  const keysToDetect = {};
+  for (let key in trackedProperty.children) {
+    keysToDetect[key] = true;
+  }
+  for (let key in obj) {
+    keysToDetect[key] = true;
+  }
+  const hasIgnoredPaths = ignoredPaths.length > 0;
+  for (let key in keysToDetect) {
+    const nestedPath = path ? path + "." + key : key;
+    if (hasIgnoredPaths) {
+      const hasMatches = ignoredPaths.some((ignored) => {
+        if (ignored instanceof RegExp) {
+          return ignored.test(nestedPath);
+        }
+        return nestedPath === ignored;
+      });
+      if (hasMatches) {
+        continue;
+      }
+    }
+    const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);
+    if (result.wasMutated) {
+      return result;
+    }
+  }
+  return {
+    wasMutated: false
+  };
+}
+function createImmutableStateInvariantMiddleware(options = {}) {
+  if (process.env.NODE_ENV === "production") {
+    return () => (next) => (action) => next(action);
+  } else {
+    let stringify2 = function(obj, serializer, indent, decycler) {
+      return JSON.stringify(obj, getSerialize2(serializer, decycler), indent);
+    }, getSerialize2 = function(serializer, decycler) {
+      let stack = [], keys = [];
+      if (!decycler) decycler = function(_, value) {
+        if (stack[0] === value) return "[Circular ~]";
+        return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]";
+      };
+      return function(key, value) {
+        if (stack.length > 0) {
+          var thisPos = stack.indexOf(this);
+          ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+          ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+          if (~stack.indexOf(value)) value = decycler.call(this, key, value);
+        } else stack.push(value);
+        return serializer == null ? value : serializer.call(this, key, value);
+      };
+    };
+    var stringify = stringify2, getSerialize = getSerialize2;
+    let {
+      isImmutable = isImmutableDefault,
+      ignoredPaths,
+      warnAfter = 32
+    } = options;
+    const track = trackForMutations.bind(null, isImmutable, ignoredPaths);
+    return ({
+      getState
+    }) => {
+      let state = getState();
+      let tracker = track(state);
+      let result;
+      return (next) => (action) => {
+        const measureUtils = getTimeMeasureUtils(warnAfter, "ImmutableStateInvariantMiddleware");
+        measureUtils.measureTime(() => {
+          state = getState();
+          result = tracker.detectMutations();
+          tracker = track(state);
+          if (result.wasMutated) {
+            throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ""}'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);
+          }
+        });
+        const dispatchedAction = next(action);
+        measureUtils.measureTime(() => {
+          state = getState();
+          result = tracker.detectMutations();
+          tracker = track(state);
+          if (result.wasMutated) {
+            throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ""}. Take a look at the reducer(s) handling the action ${stringify2(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);
+          }
+        });
+        measureUtils.warnIfExceeded();
+        return dispatchedAction;
+      };
+    };
+  }
+}
+
+// src/serializableStateInvariantMiddleware.ts
+import { isAction as isAction2, isPlainObject } from "redux";
+function isPlain(val) {
+  const type = typeof val;
+  return val == null || type === "string" || type === "boolean" || type === "number" || Array.isArray(val) || isPlainObject(val);
+}
+function findNonSerializableValue(value, path = "", isSerializable = isPlain, getEntries, ignoredPaths = [], cache) {
+  let foundNestedSerializable;
+  if (!isSerializable(value)) {
+    return {
+      keyPath: path || "<root>",
+      value
+    };
+  }
+  if (typeof value !== "object" || value === null) {
+    return false;
+  }
+  if (cache == null ? void 0 : cache.has(value)) return false;
+  const entries = getEntries != null ? getEntries(value) : Object.entries(value);
+  const hasIgnoredPaths = ignoredPaths.length > 0;
+  for (const [key, nestedValue] of entries) {
+    const nestedPath = path ? path + "." + key : key;
+    if (hasIgnoredPaths) {
+      const hasMatches = ignoredPaths.some((ignored) => {
+        if (ignored instanceof RegExp) {
+          return ignored.test(nestedPath);
+        }
+        return nestedPath === ignored;
+      });
+      if (hasMatches) {
+        continue;
+      }
+    }
+    if (!isSerializable(nestedValue)) {
+      return {
+        keyPath: nestedPath,
+        value: nestedValue
+      };
+    }
+    if (typeof nestedValue === "object") {
+      foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);
+      if (foundNestedSerializable) {
+        return foundNestedSerializable;
+      }
+    }
+  }
+  if (cache && isNestedFrozen(value)) cache.add(value);
+  return false;
+}
+function isNestedFrozen(value) {
+  if (!Object.isFrozen(value)) return false;
+  for (const nestedValue of Object.values(value)) {
+    if (typeof nestedValue !== "object" || nestedValue === null) continue;
+    if (!isNestedFrozen(nestedValue)) return false;
+  }
+  return true;
+}
+function createSerializableStateInvariantMiddleware(options = {}) {
+  if (process.env.NODE_ENV === "production") {
+    return () => (next) => (action) => next(action);
+  } else {
+    const {
+      isSerializable = isPlain,
+      getEntries,
+      ignoredActions = [],
+      ignoredActionPaths = ["meta.arg", "meta.baseQueryMeta"],
+      ignoredPaths = [],
+      warnAfter = 32,
+      ignoreState = false,
+      ignoreActions = false,
+      disableCache = false
+    } = options;
+    const cache = !disableCache && WeakSet ? /* @__PURE__ */ new WeakSet() : void 0;
+    return (storeAPI) => (next) => (action) => {
+      if (!isAction2(action)) {
+        return next(action);
+      }
+      const result = next(action);
+      const measureUtils = getTimeMeasureUtils(warnAfter, "SerializableStateInvariantMiddleware");
+      if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {
+        measureUtils.measureTime(() => {
+          const foundActionNonSerializableValue = findNonSerializableValue(action, "", isSerializable, getEntries, ignoredActionPaths, cache);
+          if (foundActionNonSerializableValue) {
+            const {
+              keyPath,
+              value
+            } = foundActionNonSerializableValue;
+            console.error(`A non-serializable value was detected in an action, in the path: \`${keyPath}\`. Value:`, value, "\nTake a look at the logic that dispatched this action: ", action, "\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)", "\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)");
+          }
+        });
+      }
+      if (!ignoreState) {
+        measureUtils.measureTime(() => {
+          const state = storeAPI.getState();
+          const foundStateNonSerializableValue = findNonSerializableValue(state, "", isSerializable, getEntries, ignoredPaths, cache);
+          if (foundStateNonSerializableValue) {
+            const {
+              keyPath,
+              value
+            } = foundStateNonSerializableValue;
+            console.error(`A non-serializable value was detected in the state, in the path: \`${keyPath}\`. Value:`, value, `
+Take a look at the reducer(s) handling this action type: ${action.type}.
+(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);
+          }
+        });
+        measureUtils.warnIfExceeded();
+      }
+      return result;
+    };
+  }
+}
+
+// src/getDefaultMiddleware.ts
+function isBoolean(x) {
+  return typeof x === "boolean";
+}
+var buildGetDefaultMiddleware = () => function getDefaultMiddleware(options) {
+  const {
+    thunk = true,
+    immutableCheck = true,
+    serializableCheck = true,
+    actionCreatorCheck = true
+  } = options != null ? options : {};
+  let middlewareArray = new Tuple();
+  if (thunk) {
+    if (isBoolean(thunk)) {
+      middlewareArray.push(thunkMiddleware);
+    } else {
+      middlewareArray.push(withExtraArgument(thunk.extraArgument));
+    }
+  }
+  if (process.env.NODE_ENV !== "production") {
+    if (immutableCheck) {
+      let immutableOptions = {};
+      if (!isBoolean(immutableCheck)) {
+        immutableOptions = immutableCheck;
+      }
+      middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));
+    }
+    if (serializableCheck) {
+      let serializableOptions = {};
+      if (!isBoolean(serializableCheck)) {
+        serializableOptions = serializableCheck;
+      }
+      middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));
+    }
+    if (actionCreatorCheck) {
+      let actionCreatorOptions = {};
+      if (!isBoolean(actionCreatorCheck)) {
+        actionCreatorOptions = actionCreatorCheck;
+      }
+      middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));
+    }
+  }
+  return middlewareArray;
+};
+
+// src/autoBatchEnhancer.ts
+var SHOULD_AUTOBATCH = "RTK_autoBatch";
+var prepareAutoBatched = () => (payload) => ({
+  payload,
+  meta: {
+    [SHOULD_AUTOBATCH]: true
+  }
+});
+var createQueueWithTimer = (timeout) => {
+  return (notify) => {
+    setTimeout(notify, timeout);
+  };
+};
+var autoBatchEnhancer = (options = {
+  type: "raf"
+}) => (next) => (...args) => {
+  const store = next(...args);
+  let notifying = true;
+  let shouldNotifyAtEndOfTick = false;
+  let notificationQueued = false;
+  const listeners = /* @__PURE__ */ new Set();
+  const queueCallback = options.type === "tick" ? queueMicrotask : options.type === "raf" ? (
+    // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.
+    typeof window !== "undefined" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10)
+  ) : options.type === "callback" ? options.queueNotification : createQueueWithTimer(options.timeout);
+  const notifyListeners = () => {
+    notificationQueued = false;
+    if (shouldNotifyAtEndOfTick) {
+      shouldNotifyAtEndOfTick = false;
+      listeners.forEach((l) => l());
+    }
+  };
+  return Object.assign({}, store, {
+    // Override the base `store.subscribe` method to keep original listeners
+    // from running if we're delaying notifications
+    subscribe(listener2) {
+      const wrappedListener = () => notifying && listener2();
+      const unsubscribe = store.subscribe(wrappedListener);
+      listeners.add(listener2);
+      return () => {
+        unsubscribe();
+        listeners.delete(listener2);
+      };
+    },
+    // Override the base `store.dispatch` method so that we can check actions
+    // for the `shouldAutoBatch` flag and determine if batching is active
+    dispatch(action) {
+      var _a;
+      try {
+        notifying = !((_a = action == null ? void 0 : action.meta) == null ? void 0 : _a[SHOULD_AUTOBATCH]);
+        shouldNotifyAtEndOfTick = !notifying;
+        if (shouldNotifyAtEndOfTick) {
+          if (!notificationQueued) {
+            notificationQueued = true;
+            queueCallback(notifyListeners);
+          }
+        }
+        return store.dispatch(action);
+      } finally {
+        notifying = true;
+      }
+    }
+  });
+};
+
+// src/getDefaultEnhancers.ts
+var buildGetDefaultEnhancers = (middlewareEnhancer) => function getDefaultEnhancers(options) {
+  const {
+    autoBatch = true
+  } = options != null ? options : {};
+  let enhancerArray = new Tuple(middlewareEnhancer);
+  if (autoBatch) {
+    enhancerArray.push(autoBatchEnhancer(typeof autoBatch === "object" ? autoBatch : void 0));
+  }
+  return enhancerArray;
+};
+
+// src/configureStore.ts
+function configureStore(options) {
+  const getDefaultMiddleware = buildGetDefaultMiddleware();
+  const {
+    reducer = void 0,
+    middleware,
+    devTools = true,
+    duplicateMiddlewareCheck = true,
+    preloadedState = void 0,
+    enhancers = void 0
+  } = options || {};
+  let rootReducer;
+  if (typeof reducer === "function") {
+    rootReducer = reducer;
+  } else if (isPlainObject2(reducer)) {
+    rootReducer = combineReducers(reducer);
+  } else {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(1) : "`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers");
+  }
+  if (process.env.NODE_ENV !== "production" && middleware && typeof middleware !== "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(2) : "`middleware` field must be a callback");
+  }
+  let finalMiddleware;
+  if (typeof middleware === "function") {
+    finalMiddleware = middleware(getDefaultMiddleware);
+    if (process.env.NODE_ENV !== "production" && !Array.isArray(finalMiddleware)) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(3) : "when using a middleware builder function, an array of middleware must be returned");
+    }
+  } else {
+    finalMiddleware = getDefaultMiddleware();
+  }
+  if (process.env.NODE_ENV !== "production" && finalMiddleware.some((item) => typeof item !== "function")) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(4) : "each middleware provided to configureStore must be a function");
+  }
+  if (process.env.NODE_ENV !== "production" && duplicateMiddlewareCheck) {
+    let middlewareReferences = /* @__PURE__ */ new Set();
+    finalMiddleware.forEach((middleware2) => {
+      if (middlewareReferences.has(middleware2)) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(42) : "Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.");
+      }
+      middlewareReferences.add(middleware2);
+    });
+  }
+  let finalCompose = compose2;
+  if (devTools) {
+    finalCompose = composeWithDevTools(__spreadValues({
+      // Enable capture of stack traces for dispatched Redux actions
+      trace: process.env.NODE_ENV !== "production"
+    }, typeof devTools === "object" && devTools));
+  }
+  const middlewareEnhancer = applyMiddleware(...finalMiddleware);
+  const getDefaultEnhancers = buildGetDefaultEnhancers(middlewareEnhancer);
+  if (process.env.NODE_ENV !== "production" && enhancers && typeof enhancers !== "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(5) : "`enhancers` field must be a callback");
+  }
+  let storeEnhancers = typeof enhancers === "function" ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();
+  if (process.env.NODE_ENV !== "production" && !Array.isArray(storeEnhancers)) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(6) : "`enhancers` callback must return an array");
+  }
+  if (process.env.NODE_ENV !== "production" && storeEnhancers.some((item) => typeof item !== "function")) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(7) : "each enhancer provided to configureStore must be a function");
+  }
+  if (process.env.NODE_ENV !== "production" && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {
+    console.error("middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`");
+  }
+  const composedEnhancer = finalCompose(...storeEnhancers);
+  return createStore(rootReducer, preloadedState, composedEnhancer);
+}
+
+// src/createReducer.ts
+import { produce as createNextState2, isDraft as isDraft2, isDraftable as isDraftable2 } from "immer";
+
+// src/mapBuilders.ts
+function executeReducerBuilderCallback(builderCallback) {
+  const actionsMap = {};
+  const actionMatchers = [];
+  let defaultCaseReducer;
+  const builder = {
+    addCase(typeOrActionCreator, reducer) {
+      if (process.env.NODE_ENV !== "production") {
+        if (actionMatchers.length > 0) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(26) : "`builder.addCase` should only be called before calling `builder.addMatcher`");
+        }
+        if (defaultCaseReducer) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(27) : "`builder.addCase` should only be called before calling `builder.addDefaultCase`");
+        }
+      }
+      const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;
+      if (!type) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(28) : "`builder.addCase` cannot be called with an empty action type");
+      }
+      if (type in actionsMap) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(29) : `\`builder.addCase\` cannot be called with two reducers for the same action type '${type}'`);
+      }
+      actionsMap[type] = reducer;
+      return builder;
+    },
+    addMatcher(matcher, reducer) {
+      if (process.env.NODE_ENV !== "production") {
+        if (defaultCaseReducer) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(30) : "`builder.addMatcher` should only be called before calling `builder.addDefaultCase`");
+        }
+      }
+      actionMatchers.push({
+        matcher,
+        reducer
+      });
+      return builder;
+    },
+    addDefaultCase(reducer) {
+      if (process.env.NODE_ENV !== "production") {
+        if (defaultCaseReducer) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(31) : "`builder.addDefaultCase` can only be called once");
+        }
+      }
+      defaultCaseReducer = reducer;
+      return builder;
+    }
+  };
+  builderCallback(builder);
+  return [actionsMap, actionMatchers, defaultCaseReducer];
+}
+
+// src/createReducer.ts
+function isStateFunction(x) {
+  return typeof x === "function";
+}
+function createReducer(initialState, mapOrBuilderCallback) {
+  if (process.env.NODE_ENV !== "production") {
+    if (typeof mapOrBuilderCallback === "object") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(8) : "The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer");
+    }
+  }
+  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);
+  let getInitialState;
+  if (isStateFunction(initialState)) {
+    getInitialState = () => freezeDraftable(initialState());
+  } else {
+    const frozenInitialState = freezeDraftable(initialState);
+    getInitialState = () => frozenInitialState;
+  }
+  function reducer(state = getInitialState(), action) {
+    let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({
+      matcher
+    }) => matcher(action)).map(({
+      reducer: reducer2
+    }) => reducer2)];
+    if (caseReducers.filter((cr) => !!cr).length === 0) {
+      caseReducers = [finalDefaultCaseReducer];
+    }
+    return caseReducers.reduce((previousState, caseReducer) => {
+      if (caseReducer) {
+        if (isDraft2(previousState)) {
+          const draft = previousState;
+          const result = caseReducer(draft, action);
+          if (result === void 0) {
+            return previousState;
+          }
+          return result;
+        } else if (!isDraftable2(previousState)) {
+          const result = caseReducer(previousState, action);
+          if (result === void 0) {
+            if (previousState === null) {
+              return previousState;
+            }
+            throw Error("A case reducer on a non-draftable value must not return undefined");
+          }
+          return result;
+        } else {
+          return createNextState2(previousState, (draft) => {
+            return caseReducer(draft, action);
+          });
+        }
+      }
+      return previousState;
+    }, state);
+  }
+  reducer.getInitialState = getInitialState;
+  return reducer;
+}
+
+// src/matchers.ts
+var matches = (matcher, action) => {
+  if (hasMatchFunction(matcher)) {
+    return matcher.match(action);
+  } else {
+    return matcher(action);
+  }
+};
+function isAnyOf(...matchers) {
+  return (action) => {
+    return matchers.some((matcher) => matches(matcher, action));
+  };
+}
+function isAllOf(...matchers) {
+  return (action) => {
+    return matchers.every((matcher) => matches(matcher, action));
+  };
+}
+function hasExpectedRequestMetadata(action, validStatus) {
+  if (!action || !action.meta) return false;
+  const hasValidRequestId = typeof action.meta.requestId === "string";
+  const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;
+  return hasValidRequestId && hasValidRequestStatus;
+}
+function isAsyncThunkArray(a) {
+  return typeof a[0] === "function" && "pending" in a[0] && "fulfilled" in a[0] && "rejected" in a[0];
+}
+function isPending(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["pending"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isPending()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.pending));
+}
+function isRejected(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["rejected"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isRejected()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.rejected));
+}
+function isRejectedWithValue(...asyncThunks) {
+  const hasFlag = (action) => {
+    return action && action.meta && action.meta.rejectedWithValue;
+  };
+  if (asyncThunks.length === 0) {
+    return isAllOf(isRejected(...asyncThunks), hasFlag);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isRejectedWithValue()(asyncThunks[0]);
+  }
+  return isAllOf(isRejected(...asyncThunks), hasFlag);
+}
+function isFulfilled(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["fulfilled"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isFulfilled()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.fulfilled));
+}
+function isAsyncThunkAction(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["pending", "fulfilled", "rejected"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isAsyncThunkAction()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.flatMap((asyncThunk) => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));
+}
+
+// src/nanoid.ts
+var urlAlphabet = "ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW";
+var nanoid = (size = 21) => {
+  let id = "";
+  let i = size;
+  while (i--) {
+    id += urlAlphabet[Math.random() * 64 | 0];
+  }
+  return id;
+};
+
+// src/createAsyncThunk.ts
+var commonProperties = ["name", "message", "stack", "code"];
+var RejectWithValue = class {
+  constructor(payload, meta) {
+    this.payload = payload;
+    this.meta = meta;
+    /*
+    type-only property to distinguish between RejectWithValue and FulfillWithMeta
+    does not exist at runtime
+    */
+    __publicField(this, "_type");
+  }
+};
+var FulfillWithMeta = class {
+  constructor(payload, meta) {
+    this.payload = payload;
+    this.meta = meta;
+    /*
+    type-only property to distinguish between RejectWithValue and FulfillWithMeta
+    does not exist at runtime
+    */
+    __publicField(this, "_type");
+  }
+};
+var miniSerializeError = (value) => {
+  if (typeof value === "object" && value !== null) {
+    const simpleError = {};
+    for (const property of commonProperties) {
+      if (typeof value[property] === "string") {
+        simpleError[property] = value[property];
+      }
+    }
+    return simpleError;
+  }
+  return {
+    message: String(value)
+  };
+};
+var externalAbortMessage = "External signal was aborted";
+var createAsyncThunk = /* @__PURE__ */ (() => {
+  function createAsyncThunk2(typePrefix, payloadCreator, options) {
+    const fulfilled = createAction(typePrefix + "/fulfilled", (payload, requestId, arg, meta) => ({
+      payload,
+      meta: __spreadProps(__spreadValues({}, meta || {}), {
+        arg,
+        requestId,
+        requestStatus: "fulfilled"
+      })
+    }));
+    const pending = createAction(typePrefix + "/pending", (requestId, arg, meta) => ({
+      payload: void 0,
+      meta: __spreadProps(__spreadValues({}, meta || {}), {
+        arg,
+        requestId,
+        requestStatus: "pending"
+      })
+    }));
+    const rejected = createAction(typePrefix + "/rejected", (error, requestId, arg, payload, meta) => ({
+      payload,
+      error: (options && options.serializeError || miniSerializeError)(error || "Rejected"),
+      meta: __spreadProps(__spreadValues({}, meta || {}), {
+        arg,
+        requestId,
+        rejectedWithValue: !!payload,
+        requestStatus: "rejected",
+        aborted: (error == null ? void 0 : error.name) === "AbortError",
+        condition: (error == null ? void 0 : error.name) === "ConditionError"
+      })
+    }));
+    function actionCreator(arg, {
+      signal
+    } = {}) {
+      return (dispatch, getState, extra) => {
+        const requestId = (options == null ? void 0 : options.idGenerator) ? options.idGenerator(arg) : nanoid();
+        const abortController = new AbortController();
+        let abortHandler;
+        let abortReason;
+        function abort(reason) {
+          abortReason = reason;
+          abortController.abort();
+        }
+        if (signal) {
+          if (signal.aborted) {
+            abort(externalAbortMessage);
+          } else {
+            signal.addEventListener("abort", () => abort(externalAbortMessage), {
+              once: true
+            });
+          }
+        }
+        const promise = async function() {
+          var _a, _b;
+          let finalAction;
+          try {
+            let conditionResult = (_a = options == null ? void 0 : options.condition) == null ? void 0 : _a.call(options, arg, {
+              getState,
+              extra
+            });
+            if (isThenable(conditionResult)) {
+              conditionResult = await conditionResult;
+            }
+            if (conditionResult === false || abortController.signal.aborted) {
+              throw {
+                name: "ConditionError",
+                message: "Aborted due to condition callback returning false."
+              };
+            }
+            const abortedPromise = new Promise((_, reject) => {
+              abortHandler = () => {
+                reject({
+                  name: "AbortError",
+                  message: abortReason || "Aborted"
+                });
+              };
+              abortController.signal.addEventListener("abort", abortHandler);
+            });
+            dispatch(pending(requestId, arg, (_b = options == null ? void 0 : options.getPendingMeta) == null ? void 0 : _b.call(options, {
+              requestId,
+              arg
+            }, {
+              getState,
+              extra
+            })));
+            finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {
+              dispatch,
+              getState,
+              extra,
+              requestId,
+              signal: abortController.signal,
+              abort,
+              rejectWithValue: (value, meta) => {
+                return new RejectWithValue(value, meta);
+              },
+              fulfillWithValue: (value, meta) => {
+                return new FulfillWithMeta(value, meta);
+              }
+            })).then((result) => {
+              if (result instanceof RejectWithValue) {
+                throw result;
+              }
+              if (result instanceof FulfillWithMeta) {
+                return fulfilled(result.payload, requestId, arg, result.meta);
+              }
+              return fulfilled(result, requestId, arg);
+            })]);
+          } catch (err) {
+            finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err, requestId, arg);
+          } finally {
+            if (abortHandler) {
+              abortController.signal.removeEventListener("abort", abortHandler);
+            }
+          }
+          const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;
+          if (!skipDispatch) {
+            dispatch(finalAction);
+          }
+          return finalAction;
+        }();
+        return Object.assign(promise, {
+          abort,
+          requestId,
+          arg,
+          unwrap() {
+            return promise.then(unwrapResult);
+          }
+        });
+      };
+    }
+    return Object.assign(actionCreator, {
+      pending,
+      rejected,
+      fulfilled,
+      settled: isAnyOf(rejected, fulfilled),
+      typePrefix
+    });
+  }
+  createAsyncThunk2.withTypes = () => createAsyncThunk2;
+  return createAsyncThunk2;
+})();
+function unwrapResult(action) {
+  if (action.meta && action.meta.rejectedWithValue) {
+    throw action.payload;
+  }
+  if (action.error) {
+    throw action.error;
+  }
+  return action.payload;
+}
+function isThenable(value) {
+  return value !== null && typeof value === "object" && typeof value.then === "function";
+}
+
+// src/createSlice.ts
+var asyncThunkSymbol = /* @__PURE__ */ Symbol.for("rtk-slice-createasyncthunk");
+var asyncThunkCreator = {
+  [asyncThunkSymbol]: createAsyncThunk
+};
+var ReducerType = /* @__PURE__ */ ((ReducerType2) => {
+  ReducerType2["reducer"] = "reducer";
+  ReducerType2["reducerWithPrepare"] = "reducerWithPrepare";
+  ReducerType2["asyncThunk"] = "asyncThunk";
+  return ReducerType2;
+})(ReducerType || {});
+function getType(slice, actionKey) {
+  return `${slice}/${actionKey}`;
+}
+function buildCreateSlice({
+  creators
+} = {}) {
+  var _a;
+  const cAT = (_a = creators == null ? void 0 : creators.asyncThunk) == null ? void 0 : _a[asyncThunkSymbol];
+  return function createSlice2(options) {
+    const {
+      name,
+      reducerPath = name
+    } = options;
+    if (!name) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(11) : "`name` is a required option for createSlice");
+    }
+    if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+      if (options.initialState === void 0) {
+        console.error("You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`");
+      }
+    }
+    const reducers = (typeof options.reducers === "function" ? options.reducers(buildReducerCreators()) : options.reducers) || {};
+    const reducerNames = Object.keys(reducers);
+    const context = {
+      sliceCaseReducersByName: {},
+      sliceCaseReducersByType: {},
+      actionCreators: {},
+      sliceMatchers: []
+    };
+    const contextMethods = {
+      addCase(typeOrActionCreator, reducer2) {
+        const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;
+        if (!type) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(12) : "`context.addCase` cannot be called with an empty action type");
+        }
+        if (type in context.sliceCaseReducersByType) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(13) : "`context.addCase` cannot be called with two reducers for the same action type: " + type);
+        }
+        context.sliceCaseReducersByType[type] = reducer2;
+        return contextMethods;
+      },
+      addMatcher(matcher, reducer2) {
+        context.sliceMatchers.push({
+          matcher,
+          reducer: reducer2
+        });
+        return contextMethods;
+      },
+      exposeAction(name2, actionCreator) {
+        context.actionCreators[name2] = actionCreator;
+        return contextMethods;
+      },
+      exposeCaseReducer(name2, reducer2) {
+        context.sliceCaseReducersByName[name2] = reducer2;
+        return contextMethods;
+      }
+    };
+    reducerNames.forEach((reducerName) => {
+      const reducerDefinition = reducers[reducerName];
+      const reducerDetails = {
+        reducerName,
+        type: getType(name, reducerName),
+        createNotation: typeof options.reducers === "function"
+      };
+      if (isAsyncThunkSliceReducerDefinition(reducerDefinition)) {
+        handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);
+      } else {
+        handleNormalReducerDefinition(reducerDetails, reducerDefinition, contextMethods);
+      }
+    });
+    function buildReducer() {
+      if (process.env.NODE_ENV !== "production") {
+        if (typeof options.extraReducers === "object") {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(14) : "The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice");
+        }
+      }
+      const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = void 0] = typeof options.extraReducers === "function" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];
+      const finalCaseReducers = __spreadValues(__spreadValues({}, extraReducers), context.sliceCaseReducersByType);
+      return createReducer(options.initialState, (builder) => {
+        for (let key in finalCaseReducers) {
+          builder.addCase(key, finalCaseReducers[key]);
+        }
+        for (let sM of context.sliceMatchers) {
+          builder.addMatcher(sM.matcher, sM.reducer);
+        }
+        for (let m of actionMatchers) {
+          builder.addMatcher(m.matcher, m.reducer);
+        }
+        if (defaultCaseReducer) {
+          builder.addDefaultCase(defaultCaseReducer);
+        }
+      });
+    }
+    const selectSelf = (state) => state;
+    const injectedSelectorCache = /* @__PURE__ */ new Map();
+    const injectedStateCache = /* @__PURE__ */ new WeakMap();
+    let _reducer;
+    function reducer(state, action) {
+      if (!_reducer) _reducer = buildReducer();
+      return _reducer(state, action);
+    }
+    function getInitialState() {
+      if (!_reducer) _reducer = buildReducer();
+      return _reducer.getInitialState();
+    }
+    function makeSelectorProps(reducerPath2, injected = false) {
+      function selectSlice(state) {
+        let sliceState = state[reducerPath2];
+        if (typeof sliceState === "undefined") {
+          if (injected) {
+            sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);
+          } else if (process.env.NODE_ENV !== "production") {
+            throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(15) : "selectSlice returned undefined for an uninjected slice reducer");
+          }
+        }
+        return sliceState;
+      }
+      function getSelectors(selectState = selectSelf) {
+        const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => /* @__PURE__ */ new WeakMap());
+        return getOrInsertComputed(selectorCache, selectState, () => {
+          var _a2;
+          const map = {};
+          for (const [name2, selector] of Object.entries((_a2 = options.selectors) != null ? _a2 : {})) {
+            map[name2] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);
+          }
+          return map;
+        });
+      }
+      return {
+        reducerPath: reducerPath2,
+        getSelectors,
+        get selectors() {
+          return getSelectors(selectSlice);
+        },
+        selectSlice
+      };
+    }
+    const slice = __spreadProps(__spreadValues({
+      name,
+      reducer,
+      actions: context.actionCreators,
+      caseReducers: context.sliceCaseReducersByName,
+      getInitialState
+    }, makeSelectorProps(reducerPath)), {
+      injectInto(injectable, _a2 = {}) {
+        var _b = _a2, {
+          reducerPath: pathOpt
+        } = _b, config = __objRest(_b, [
+          "reducerPath"
+        ]);
+        const newReducerPath = pathOpt != null ? pathOpt : reducerPath;
+        injectable.inject({
+          reducerPath: newReducerPath,
+          reducer
+        }, config);
+        return __spreadValues(__spreadValues({}, slice), makeSelectorProps(newReducerPath, true));
+      }
+    });
+    return slice;
+  };
+}
+function wrapSelector(selector, selectState, getInitialState, injected) {
+  function wrapper(rootState, ...args) {
+    let sliceState = selectState(rootState);
+    if (typeof sliceState === "undefined") {
+      if (injected) {
+        sliceState = getInitialState();
+      } else if (process.env.NODE_ENV !== "production") {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(16) : "selectState returned undefined for an uninjected slice reducer");
+      }
+    }
+    return selector(sliceState, ...args);
+  }
+  wrapper.unwrapped = selector;
+  return wrapper;
+}
+var createSlice = /* @__PURE__ */ buildCreateSlice();
+function buildReducerCreators() {
+  function asyncThunk(payloadCreator, config) {
+    return __spreadValues({
+      _reducerDefinitionType: "asyncThunk" /* asyncThunk */,
+      payloadCreator
+    }, config);
+  }
+  asyncThunk.withTypes = () => asyncThunk;
+  return {
+    reducer(caseReducer) {
+      return Object.assign({
+        // hack so the wrapping function has the same name as the original
+        // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original
+        [caseReducer.name](...args) {
+          return caseReducer(...args);
+        }
+      }[caseReducer.name], {
+        _reducerDefinitionType: "reducer" /* reducer */
+      });
+    },
+    preparedReducer(prepare, reducer) {
+      return {
+        _reducerDefinitionType: "reducerWithPrepare" /* reducerWithPrepare */,
+        prepare,
+        reducer
+      };
+    },
+    asyncThunk
+  };
+}
+function handleNormalReducerDefinition({
+  type,
+  reducerName,
+  createNotation
+}, maybeReducerWithPrepare, context) {
+  let caseReducer;
+  let prepareCallback;
+  if ("reducer" in maybeReducerWithPrepare) {
+    if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(17) : "Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.");
+    }
+    caseReducer = maybeReducerWithPrepare.reducer;
+    prepareCallback = maybeReducerWithPrepare.prepare;
+  } else {
+    caseReducer = maybeReducerWithPrepare;
+  }
+  context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));
+}
+function isAsyncThunkSliceReducerDefinition(reducerDefinition) {
+  return reducerDefinition._reducerDefinitionType === "asyncThunk" /* asyncThunk */;
+}
+function isCaseReducerWithPrepareDefinition(reducerDefinition) {
+  return reducerDefinition._reducerDefinitionType === "reducerWithPrepare" /* reducerWithPrepare */;
+}
+function handleThunkCaseReducerDefinition({
+  type,
+  reducerName
+}, reducerDefinition, context, cAT) {
+  if (!cAT) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(18) : "Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.");
+  }
+  const {
+    payloadCreator,
+    fulfilled,
+    pending,
+    rejected,
+    settled,
+    options
+  } = reducerDefinition;
+  const thunk = cAT(type, payloadCreator, options);
+  context.exposeAction(reducerName, thunk);
+  if (fulfilled) {
+    context.addCase(thunk.fulfilled, fulfilled);
+  }
+  if (pending) {
+    context.addCase(thunk.pending, pending);
+  }
+  if (rejected) {
+    context.addCase(thunk.rejected, rejected);
+  }
+  if (settled) {
+    context.addMatcher(thunk.settled, settled);
+  }
+  context.exposeCaseReducer(reducerName, {
+    fulfilled: fulfilled || noop,
+    pending: pending || noop,
+    rejected: rejected || noop,
+    settled: settled || noop
+  });
+}
+function noop() {
+}
+
+// src/entities/entity_state.ts
+function getInitialEntityState() {
+  return {
+    ids: [],
+    entities: {}
+  };
+}
+function createInitialStateFactory(stateAdapter) {
+  function getInitialState(additionalState = {}, entities) {
+    const state = Object.assign(getInitialEntityState(), additionalState);
+    return entities ? stateAdapter.setAll(state, entities) : state;
+  }
+  return {
+    getInitialState
+  };
+}
+
+// src/entities/state_selectors.ts
+function createSelectorsFactory() {
+  function getSelectors(selectState, options = {}) {
+    const {
+      createSelector: createSelector2 = createDraftSafeSelector
+    } = options;
+    const selectIds = (state) => state.ids;
+    const selectEntities = (state) => state.entities;
+    const selectAll = createSelector2(selectIds, selectEntities, (ids, entities) => ids.map((id) => entities[id]));
+    const selectId = (_, id) => id;
+    const selectById = (entities, id) => entities[id];
+    const selectTotal = createSelector2(selectIds, (ids) => ids.length);
+    if (!selectState) {
+      return {
+        selectIds,
+        selectEntities,
+        selectAll,
+        selectTotal,
+        selectById: createSelector2(selectEntities, selectId, selectById)
+      };
+    }
+    const selectGlobalizedEntities = createSelector2(selectState, selectEntities);
+    return {
+      selectIds: createSelector2(selectState, selectIds),
+      selectEntities: selectGlobalizedEntities,
+      selectAll: createSelector2(selectState, selectAll),
+      selectTotal: createSelector2(selectState, selectTotal),
+      selectById: createSelector2(selectGlobalizedEntities, selectId, selectById)
+    };
+  }
+  return {
+    getSelectors
+  };
+}
+
+// src/entities/state_adapter.ts
+import { produce as createNextState3, isDraft as isDraft3 } from "immer";
+var isDraftTyped = isDraft3;
+function createSingleArgumentStateOperator(mutator) {
+  const operator = createStateOperator((_, state) => mutator(state));
+  return function operation(state) {
+    return operator(state, void 0);
+  };
+}
+function createStateOperator(mutator) {
+  return function operation(state, arg) {
+    function isPayloadActionArgument(arg2) {
+      return isFSA(arg2);
+    }
+    const runMutator = (draft) => {
+      if (isPayloadActionArgument(arg)) {
+        mutator(arg.payload, draft);
+      } else {
+        mutator(arg, draft);
+      }
+    };
+    if (isDraftTyped(state)) {
+      runMutator(state);
+      return state;
+    }
+    return createNextState3(state, runMutator);
+  };
+}
+
+// src/entities/utils.ts
+import { current as current2, isDraft as isDraft4 } from "immer";
+function selectIdValue(entity, selectId) {
+  const key = selectId(entity);
+  if (process.env.NODE_ENV !== "production" && key === void 0) {
+    console.warn("The entity passed to the `selectId` implementation returned undefined.", "You should probably provide your own `selectId` implementation.", "The entity that was passed:", entity, "The `selectId` implementation:", selectId.toString());
+  }
+  return key;
+}
+function ensureEntitiesArray(entities) {
+  if (!Array.isArray(entities)) {
+    entities = Object.values(entities);
+  }
+  return entities;
+}
+function getCurrent(value) {
+  return isDraft4(value) ? current2(value) : value;
+}
+function splitAddedUpdatedEntities(newEntities, selectId, state) {
+  newEntities = ensureEntitiesArray(newEntities);
+  const existingIdsArray = getCurrent(state.ids);
+  const existingIds = new Set(existingIdsArray);
+  const added = [];
+  const addedIds = /* @__PURE__ */ new Set([]);
+  const updated = [];
+  for (const entity of newEntities) {
+    const id = selectIdValue(entity, selectId);
+    if (existingIds.has(id) || addedIds.has(id)) {
+      updated.push({
+        id,
+        changes: entity
+      });
+    } else {
+      addedIds.add(id);
+      added.push(entity);
+    }
+  }
+  return [added, updated, existingIdsArray];
+}
+
+// src/entities/unsorted_state_adapter.ts
+function createUnsortedStateAdapter(selectId) {
+  function addOneMutably(entity, state) {
+    const key = selectIdValue(entity, selectId);
+    if (key in state.entities) {
+      return;
+    }
+    state.ids.push(key);
+    state.entities[key] = entity;
+  }
+  function addManyMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    for (const entity of newEntities) {
+      addOneMutably(entity, state);
+    }
+  }
+  function setOneMutably(entity, state) {
+    const key = selectIdValue(entity, selectId);
+    if (!(key in state.entities)) {
+      state.ids.push(key);
+    }
+    ;
+    state.entities[key] = entity;
+  }
+  function setManyMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    for (const entity of newEntities) {
+      setOneMutably(entity, state);
+    }
+  }
+  function setAllMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    state.ids = [];
+    state.entities = {};
+    addManyMutably(newEntities, state);
+  }
+  function removeOneMutably(key, state) {
+    return removeManyMutably([key], state);
+  }
+  function removeManyMutably(keys, state) {
+    let didMutate = false;
+    keys.forEach((key) => {
+      if (key in state.entities) {
+        delete state.entities[key];
+        didMutate = true;
+      }
+    });
+    if (didMutate) {
+      state.ids = state.ids.filter((id) => id in state.entities);
+    }
+  }
+  function removeAllMutably(state) {
+    Object.assign(state, {
+      ids: [],
+      entities: {}
+    });
+  }
+  function takeNewKey(keys, update, state) {
+    const original3 = state.entities[update.id];
+    if (original3 === void 0) {
+      return false;
+    }
+    const updated = Object.assign({}, original3, update.changes);
+    const newKey = selectIdValue(updated, selectId);
+    const hasNewKey = newKey !== update.id;
+    if (hasNewKey) {
+      keys[update.id] = newKey;
+      delete state.entities[update.id];
+    }
+    ;
+    state.entities[newKey] = updated;
+    return hasNewKey;
+  }
+  function updateOneMutably(update, state) {
+    return updateManyMutably([update], state);
+  }
+  function updateManyMutably(updates, state) {
+    const newKeys = {};
+    const updatesPerEntity = {};
+    updates.forEach((update) => {
+      var _a;
+      if (update.id in state.entities) {
+        updatesPerEntity[update.id] = {
+          id: update.id,
+          // Spreads ignore falsy values, so this works even if there isn't
+          // an existing update already at this key
+          changes: __spreadValues(__spreadValues({}, (_a = updatesPerEntity[update.id]) == null ? void 0 : _a.changes), update.changes)
+        };
+      }
+    });
+    updates = Object.values(updatesPerEntity);
+    const didMutateEntities = updates.length > 0;
+    if (didMutateEntities) {
+      const didMutateIds = updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;
+      if (didMutateIds) {
+        state.ids = Object.values(state.entities).map((e) => selectIdValue(e, selectId));
+      }
+    }
+  }
+  function upsertOneMutably(entity, state) {
+    return upsertManyMutably([entity], state);
+  }
+  function upsertManyMutably(newEntities, state) {
+    const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);
+    addManyMutably(added, state);
+    updateManyMutably(updated, state);
+  }
+  return {
+    removeAll: createSingleArgumentStateOperator(removeAllMutably),
+    addOne: createStateOperator(addOneMutably),
+    addMany: createStateOperator(addManyMutably),
+    setOne: createStateOperator(setOneMutably),
+    setMany: createStateOperator(setManyMutably),
+    setAll: createStateOperator(setAllMutably),
+    updateOne: createStateOperator(updateOneMutably),
+    updateMany: createStateOperator(updateManyMutably),
+    upsertOne: createStateOperator(upsertOneMutably),
+    upsertMany: createStateOperator(upsertManyMutably),
+    removeOne: createStateOperator(removeOneMutably),
+    removeMany: createStateOperator(removeManyMutably)
+  };
+}
+
+// src/entities/sorted_state_adapter.ts
+function findInsertIndex(sortedItems, item, comparisonFunction) {
+  let lowIndex = 0;
+  let highIndex = sortedItems.length;
+  while (lowIndex < highIndex) {
+    let middleIndex = lowIndex + highIndex >>> 1;
+    const currentItem = sortedItems[middleIndex];
+    const res = comparisonFunction(item, currentItem);
+    if (res >= 0) {
+      lowIndex = middleIndex + 1;
+    } else {
+      highIndex = middleIndex;
+    }
+  }
+  return lowIndex;
+}
+function insert(sortedItems, item, comparisonFunction) {
+  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);
+  sortedItems.splice(insertAtIndex, 0, item);
+  return sortedItems;
+}
+function createSortedStateAdapter(selectId, comparer) {
+  const {
+    removeOne,
+    removeMany,
+    removeAll
+  } = createUnsortedStateAdapter(selectId);
+  function addOneMutably(entity, state) {
+    return addManyMutably([entity], state);
+  }
+  function addManyMutably(newEntities, state, existingIds) {
+    newEntities = ensureEntitiesArray(newEntities);
+    const existingKeys = new Set(existingIds != null ? existingIds : getCurrent(state.ids));
+    const models = newEntities.filter((model) => !existingKeys.has(selectIdValue(model, selectId)));
+    if (models.length !== 0) {
+      mergeFunction(state, models);
+    }
+  }
+  function setOneMutably(entity, state) {
+    return setManyMutably([entity], state);
+  }
+  function setManyMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    if (newEntities.length !== 0) {
+      for (const item of newEntities) {
+        delete state.entities[selectId(item)];
+      }
+      mergeFunction(state, newEntities);
+    }
+  }
+  function setAllMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    state.entities = {};
+    state.ids = [];
+    addManyMutably(newEntities, state, []);
+  }
+  function updateOneMutably(update, state) {
+    return updateManyMutably([update], state);
+  }
+  function updateManyMutably(updates, state) {
+    let appliedUpdates = false;
+    let replacedIds = false;
+    for (let update of updates) {
+      const entity = state.entities[update.id];
+      if (!entity) {
+        continue;
+      }
+      appliedUpdates = true;
+      Object.assign(entity, update.changes);
+      const newId = selectId(entity);
+      if (update.id !== newId) {
+        replacedIds = true;
+        delete state.entities[update.id];
+        const oldIndex = state.ids.indexOf(update.id);
+        state.ids[oldIndex] = newId;
+        state.entities[newId] = entity;
+      }
+    }
+    if (appliedUpdates) {
+      mergeFunction(state, [], appliedUpdates, replacedIds);
+    }
+  }
+  function upsertOneMutably(entity, state) {
+    return upsertManyMutably([entity], state);
+  }
+  function upsertManyMutably(newEntities, state) {
+    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities(newEntities, selectId, state);
+    if (added.length) {
+      addManyMutably(added, state, existingIdsArray);
+    }
+    if (updated.length) {
+      updateManyMutably(updated, state);
+    }
+  }
+  function areArraysEqual(a, b) {
+    if (a.length !== b.length) {
+      return false;
+    }
+    for (let i = 0; i < a.length; i++) {
+      if (a[i] === b[i]) {
+        continue;
+      }
+      return false;
+    }
+    return true;
+  }
+  const mergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {
+    const currentEntities = getCurrent(state.entities);
+    const currentIds = getCurrent(state.ids);
+    const stateEntities = state.entities;
+    let ids = currentIds;
+    if (replacedIds) {
+      ids = new Set(currentIds);
+    }
+    let sortedEntities = [];
+    for (const id of ids) {
+      const entity = currentEntities[id];
+      if (entity) {
+        sortedEntities.push(entity);
+      }
+    }
+    const wasPreviouslyEmpty = sortedEntities.length === 0;
+    for (const item of addedItems) {
+      stateEntities[selectId(item)] = item;
+      if (!wasPreviouslyEmpty) {
+        insert(sortedEntities, item, comparer);
+      }
+    }
+    if (wasPreviouslyEmpty) {
+      sortedEntities = addedItems.slice().sort(comparer);
+    } else if (appliedUpdates) {
+      sortedEntities.sort(comparer);
+    }
+    const newSortedIds = sortedEntities.map(selectId);
+    if (!areArraysEqual(currentIds, newSortedIds)) {
+      state.ids = newSortedIds;
+    }
+  };
+  return {
+    removeOne,
+    removeMany,
+    removeAll,
+    addOne: createStateOperator(addOneMutably),
+    updateOne: createStateOperator(updateOneMutably),
+    upsertOne: createStateOperator(upsertOneMutably),
+    setOne: createStateOperator(setOneMutably),
+    setMany: createStateOperator(setManyMutably),
+    setAll: createStateOperator(setAllMutably),
+    addMany: createStateOperator(addManyMutably),
+    updateMany: createStateOperator(updateManyMutably),
+    upsertMany: createStateOperator(upsertManyMutably)
+  };
+}
+
+// src/entities/create_adapter.ts
+function createEntityAdapter(options = {}) {
+  const {
+    selectId,
+    sortComparer
+  } = __spreadValues({
+    sortComparer: false,
+    selectId: (instance) => instance.id
+  }, options);
+  const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);
+  const stateFactory = createInitialStateFactory(stateAdapter);
+  const selectorsFactory = createSelectorsFactory();
+  return __spreadValues(__spreadValues(__spreadValues({
+    selectId,
+    sortComparer
+  }, stateFactory), selectorsFactory), stateAdapter);
+}
+
+// src/listenerMiddleware/index.ts
+import { isAction as isAction3 } from "redux";
+
+// src/listenerMiddleware/exceptions.ts
+var task = "task";
+var listener = "listener";
+var completed = "completed";
+var cancelled = "cancelled";
+var taskCancelled = `task-${cancelled}`;
+var taskCompleted = `task-${completed}`;
+var listenerCancelled = `${listener}-${cancelled}`;
+var listenerCompleted = `${listener}-${completed}`;
+var TaskAbortError = class {
+  constructor(code) {
+    this.code = code;
+    __publicField(this, "name", "TaskAbortError");
+    __publicField(this, "message");
+    this.message = `${task} ${cancelled} (reason: ${code})`;
+  }
+};
+
+// src/listenerMiddleware/utils.ts
+var assertFunction = (func, expected) => {
+  if (typeof func !== "function") {
+    throw new TypeError(process.env.NODE_ENV === "production" ? formatProdErrorMessage(32) : `${expected} is not a function`);
+  }
+};
+var noop2 = () => {
+};
+var catchRejection = (promise, onError = noop2) => {
+  promise.catch(onError);
+  return promise;
+};
+var addAbortSignalListener = (abortSignal, callback) => {
+  abortSignal.addEventListener("abort", callback, {
+    once: true
+  });
+  return () => abortSignal.removeEventListener("abort", callback);
+};
+var abortControllerWithReason = (abortController, reason) => {
+  const signal = abortController.signal;
+  if (signal.aborted) {
+    return;
+  }
+  if (!("reason" in signal)) {
+    Object.defineProperty(signal, "reason", {
+      enumerable: true,
+      value: reason,
+      configurable: true,
+      writable: true
+    });
+  }
+  ;
+  abortController.abort(reason);
+};
+
+// src/listenerMiddleware/task.ts
+var validateActive = (signal) => {
+  if (signal.aborted) {
+    const {
+      reason
+    } = signal;
+    throw new TaskAbortError(reason);
+  }
+};
+function raceWithSignal(signal, promise) {
+  let cleanup = noop2;
+  return new Promise((resolve, reject) => {
+    const notifyRejection = () => reject(new TaskAbortError(signal.reason));
+    if (signal.aborted) {
+      notifyRejection();
+      return;
+    }
+    cleanup = addAbortSignalListener(signal, notifyRejection);
+    promise.finally(() => cleanup()).then(resolve, reject);
+  }).finally(() => {
+    cleanup = noop2;
+  });
+}
+var runTask = async (task2, cleanUp) => {
+  try {
+    await Promise.resolve();
+    const value = await task2();
+    return {
+      status: "ok",
+      value
+    };
+  } catch (error) {
+    return {
+      status: error instanceof TaskAbortError ? "cancelled" : "rejected",
+      error
+    };
+  } finally {
+    cleanUp == null ? void 0 : cleanUp();
+  }
+};
+var createPause = (signal) => {
+  return (promise) => {
+    return catchRejection(raceWithSignal(signal, promise).then((output) => {
+      validateActive(signal);
+      return output;
+    }));
+  };
+};
+var createDelay = (signal) => {
+  const pause = createPause(signal);
+  return (timeoutMs) => {
+    return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)));
+  };
+};
+
+// src/listenerMiddleware/index.ts
+var {
+  assign
+} = Object;
+var INTERNAL_NIL_TOKEN = {};
+var alm = "listenerMiddleware";
+var createFork = (parentAbortSignal, parentBlockingPromises) => {
+  const linkControllers = (controller) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));
+  return (taskExecutor, opts) => {
+    assertFunction(taskExecutor, "taskExecutor");
+    const childAbortController = new AbortController();
+    linkControllers(childAbortController);
+    const result = runTask(async () => {
+      validateActive(parentAbortSignal);
+      validateActive(childAbortController.signal);
+      const result2 = await taskExecutor({
+        pause: createPause(childAbortController.signal),
+        delay: createDelay(childAbortController.signal),
+        signal: childAbortController.signal
+      });
+      validateActive(childAbortController.signal);
+      return result2;
+    }, () => abortControllerWithReason(childAbortController, taskCompleted));
+    if (opts == null ? void 0 : opts.autoJoin) {
+      parentBlockingPromises.push(result.catch(noop2));
+    }
+    return {
+      result: createPause(parentAbortSignal)(result),
+      cancel() {
+        abortControllerWithReason(childAbortController, taskCancelled);
+      }
+    };
+  };
+};
+var createTakePattern = (startListening, signal) => {
+  const take = async (predicate, timeout) => {
+    validateActive(signal);
+    let unsubscribe = () => {
+    };
+    const tuplePromise = new Promise((resolve, reject) => {
+      let stopListening = startListening({
+        predicate,
+        effect: (action, listenerApi) => {
+          listenerApi.unsubscribe();
+          resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);
+        }
+      });
+      unsubscribe = () => {
+        stopListening();
+        reject();
+      };
+    });
+    const promises = [tuplePromise];
+    if (timeout != null) {
+      promises.push(new Promise((resolve) => setTimeout(resolve, timeout, null)));
+    }
+    try {
+      const output = await raceWithSignal(signal, Promise.race(promises));
+      validateActive(signal);
+      return output;
+    } finally {
+      unsubscribe();
+    }
+  };
+  return (predicate, timeout) => catchRejection(take(predicate, timeout));
+};
+var getListenerEntryPropsFrom = (options) => {
+  let {
+    type,
+    actionCreator,
+    matcher,
+    predicate,
+    effect
+  } = options;
+  if (type) {
+    predicate = createAction(type).match;
+  } else if (actionCreator) {
+    type = actionCreator.type;
+    predicate = actionCreator.match;
+  } else if (matcher) {
+    predicate = matcher;
+  } else if (predicate) {
+  } else {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(21) : "Creating or removing a listener requires one of the known fields for matching an action");
+  }
+  assertFunction(effect, "options.listener");
+  return {
+    predicate,
+    type,
+    effect
+  };
+};
+var createListenerEntry = /* @__PURE__ */ assign((options) => {
+  const {
+    type,
+    predicate,
+    effect
+  } = getListenerEntryPropsFrom(options);
+  const entry = {
+    id: nanoid(),
+    effect,
+    type,
+    predicate,
+    pending: /* @__PURE__ */ new Set(),
+    unsubscribe: () => {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(22) : "Unsubscribe not initialized");
+    }
+  };
+  return entry;
+}, {
+  withTypes: () => createListenerEntry
+});
+var findListenerEntry = (listenerMap, options) => {
+  const {
+    type,
+    effect,
+    predicate
+  } = getListenerEntryPropsFrom(options);
+  return Array.from(listenerMap.values()).find((entry) => {
+    const matchPredicateOrType = typeof type === "string" ? entry.type === type : entry.predicate === predicate;
+    return matchPredicateOrType && entry.effect === effect;
+  });
+};
+var cancelActiveListeners = (entry) => {
+  entry.pending.forEach((controller) => {
+    abortControllerWithReason(controller, listenerCancelled);
+  });
+};
+var createClearListenerMiddleware = (listenerMap) => {
+  return () => {
+    listenerMap.forEach(cancelActiveListeners);
+    listenerMap.clear();
+  };
+};
+var safelyNotifyError = (errorHandler, errorToNotify, errorInfo) => {
+  try {
+    errorHandler(errorToNotify, errorInfo);
+  } catch (errorHandlerError) {
+    setTimeout(() => {
+      throw errorHandlerError;
+    }, 0);
+  }
+};
+var addListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/add`), {
+  withTypes: () => addListener
+});
+var clearAllListeners = /* @__PURE__ */ createAction(`${alm}/removeAll`);
+var removeListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/remove`), {
+  withTypes: () => removeListener
+});
+var defaultErrorHandler = (...args) => {
+  console.error(`${alm}/error`, ...args);
+};
+var createListenerMiddleware = (middlewareOptions = {}) => {
+  const listenerMap = /* @__PURE__ */ new Map();
+  const {
+    extra,
+    onError = defaultErrorHandler
+  } = middlewareOptions;
+  assertFunction(onError, "onError");
+  const insertEntry = (entry) => {
+    entry.unsubscribe = () => listenerMap.delete(entry.id);
+    listenerMap.set(entry.id, entry);
+    return (cancelOptions) => {
+      entry.unsubscribe();
+      if (cancelOptions == null ? void 0 : cancelOptions.cancelActive) {
+        cancelActiveListeners(entry);
+      }
+    };
+  };
+  const startListening = (options) => {
+    var _a;
+    const entry = (_a = findListenerEntry(listenerMap, options)) != null ? _a : createListenerEntry(options);
+    return insertEntry(entry);
+  };
+  assign(startListening, {
+    withTypes: () => startListening
+  });
+  const stopListening = (options) => {
+    const entry = findListenerEntry(listenerMap, options);
+    if (entry) {
+      entry.unsubscribe();
+      if (options.cancelActive) {
+        cancelActiveListeners(entry);
+      }
+    }
+    return !!entry;
+  };
+  assign(stopListening, {
+    withTypes: () => stopListening
+  });
+  const notifyListener = async (entry, action, api, getOriginalState) => {
+    const internalTaskController = new AbortController();
+    const take = createTakePattern(startListening, internalTaskController.signal);
+    const autoJoinPromises = [];
+    try {
+      entry.pending.add(internalTaskController);
+      await Promise.resolve(entry.effect(
+        action,
+        // Use assign() rather than ... to avoid extra helper functions added to bundle
+        assign({}, api, {
+          getOriginalState,
+          condition: (predicate, timeout) => take(predicate, timeout).then(Boolean),
+          take,
+          delay: createDelay(internalTaskController.signal),
+          pause: createPause(internalTaskController.signal),
+          extra,
+          signal: internalTaskController.signal,
+          fork: createFork(internalTaskController.signal, autoJoinPromises),
+          unsubscribe: entry.unsubscribe,
+          subscribe: () => {
+            listenerMap.set(entry.id, entry);
+          },
+          cancelActiveListeners: () => {
+            entry.pending.forEach((controller, _, set) => {
+              if (controller !== internalTaskController) {
+                abortControllerWithReason(controller, listenerCancelled);
+                set.delete(controller);
+              }
+            });
+          },
+          cancel: () => {
+            abortControllerWithReason(internalTaskController, listenerCancelled);
+            entry.pending.delete(internalTaskController);
+          },
+          throwIfCancelled: () => {
+            validateActive(internalTaskController.signal);
+          }
+        })
+      ));
+    } catch (listenerError) {
+      if (!(listenerError instanceof TaskAbortError)) {
+        safelyNotifyError(onError, listenerError, {
+          raisedBy: "effect"
+        });
+      }
+    } finally {
+      await Promise.all(autoJoinPromises);
+      abortControllerWithReason(internalTaskController, listenerCompleted);
+      entry.pending.delete(internalTaskController);
+    }
+  };
+  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);
+  const middleware = (api) => (next) => (action) => {
+    if (!isAction3(action)) {
+      return next(action);
+    }
+    if (addListener.match(action)) {
+      return startListening(action.payload);
+    }
+    if (clearAllListeners.match(action)) {
+      clearListenerMiddleware();
+      return;
+    }
+    if (removeListener.match(action)) {
+      return stopListening(action.payload);
+    }
+    let originalState = api.getState();
+    const getOriginalState = () => {
+      if (originalState === INTERNAL_NIL_TOKEN) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(23) : `${alm}: getOriginalState can only be called synchronously`);
+      }
+      return originalState;
+    };
+    let result;
+    try {
+      result = next(action);
+      if (listenerMap.size > 0) {
+        const currentState = api.getState();
+        const listenerEntries = Array.from(listenerMap.values());
+        for (const entry of listenerEntries) {
+          let runListener = false;
+          try {
+            runListener = entry.predicate(action, currentState, originalState);
+          } catch (predicateError) {
+            runListener = false;
+            safelyNotifyError(onError, predicateError, {
+              raisedBy: "predicate"
+            });
+          }
+          if (!runListener) {
+            continue;
+          }
+          notifyListener(entry, action, api, getOriginalState);
+        }
+      }
+    } finally {
+      originalState = INTERNAL_NIL_TOKEN;
+    }
+    return result;
+  };
+  return {
+    middleware,
+    startListening,
+    stopListening,
+    clearListeners: clearListenerMiddleware
+  };
+};
+
+// src/dynamicMiddleware/index.ts
+import { compose as compose3 } from "redux";
+var createMiddlewareEntry = (middleware) => ({
+  middleware,
+  applied: /* @__PURE__ */ new Map()
+});
+var matchInstance = (instanceId) => (action) => {
+  var _a;
+  return ((_a = action == null ? void 0 : action.meta) == null ? void 0 : _a.instanceId) === instanceId;
+};
+var createDynamicMiddleware = () => {
+  const instanceId = nanoid();
+  const middlewareMap = /* @__PURE__ */ new Map();
+  const withMiddleware = Object.assign(createAction("dynamicMiddleware/add", (...middlewares) => ({
+    payload: middlewares,
+    meta: {
+      instanceId
+    }
+  })), {
+    withTypes: () => withMiddleware
+  });
+  const addMiddleware = Object.assign(function addMiddleware2(...middlewares) {
+    middlewares.forEach((middleware2) => {
+      getOrInsertComputed(middlewareMap, middleware2, createMiddlewareEntry);
+    });
+  }, {
+    withTypes: () => addMiddleware
+  });
+  const getFinalMiddleware = (api) => {
+    const appliedMiddleware = Array.from(middlewareMap.values()).map((entry) => getOrInsertComputed(entry.applied, api, entry.middleware));
+    return compose3(...appliedMiddleware);
+  };
+  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));
+  const middleware = (api) => (next) => (action) => {
+    if (isWithMiddleware(action)) {
+      addMiddleware(...action.payload);
+      return api.dispatch;
+    }
+    return getFinalMiddleware(api)(next)(action);
+  };
+  return {
+    middleware,
+    addMiddleware,
+    withMiddleware,
+    instanceId
+  };
+};
+
+// src/combineSlices.ts
+import { combineReducers as combineReducers2 } from "redux";
+var isSliceLike = (maybeSliceLike) => "reducerPath" in maybeSliceLike && typeof maybeSliceLike.reducerPath === "string";
+var getReducers = (slices) => slices.flatMap((sliceOrMap) => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer]] : Object.entries(sliceOrMap));
+var ORIGINAL_STATE = Symbol.for("rtk-state-proxy-original");
+var isStateProxy = (value) => !!value && !!value[ORIGINAL_STATE];
+var stateProxyMap = /* @__PURE__ */ new WeakMap();
+var createStateProxy = (state, reducerMap, initialStateCache) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {
+  get: (target, prop, receiver) => {
+    if (prop === ORIGINAL_STATE) return target;
+    const result = Reflect.get(target, prop, receiver);
+    if (typeof result === "undefined") {
+      const cached = initialStateCache[prop];
+      if (typeof cached !== "undefined") return cached;
+      const reducer = reducerMap[prop];
+      if (reducer) {
+        const reducerResult = reducer(void 0, {
+          type: nanoid()
+        });
+        if (typeof reducerResult === "undefined") {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(24) : `The slice reducer for key "${prop.toString()}" returned undefined when called for selector(). If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);
+        }
+        initialStateCache[prop] = reducerResult;
+        return reducerResult;
+      }
+    }
+    return result;
+  }
+}));
+var original = (state) => {
+  if (!isStateProxy(state)) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(25) : "original must be used on state Proxy");
+  }
+  return state[ORIGINAL_STATE];
+};
+var emptyObject = {};
+var noopReducer = (state = emptyObject) => state;
+function combineSlices(...slices) {
+  const reducerMap = Object.fromEntries(getReducers(slices));
+  const getReducer = () => Object.keys(reducerMap).length ? combineReducers2(reducerMap) : noopReducer;
+  let reducer = getReducer();
+  function combinedReducer(state, action) {
+    return reducer(state, action);
+  }
+  combinedReducer.withLazyLoadedSlices = () => combinedReducer;
+  const initialStateCache = {};
+  const inject = (slice, config = {}) => {
+    const {
+      reducerPath,
+      reducer: reducerToInject
+    } = slice;
+    const currentReducer = reducerMap[reducerPath];
+    if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {
+      if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+        console.error(`called \`inject\` to override already-existing reducer ${reducerPath} without specifying \`overrideExisting: true\``);
+      }
+      return combinedReducer;
+    }
+    if (config.overrideExisting && currentReducer !== reducerToInject) {
+      delete initialStateCache[reducerPath];
+    }
+    reducerMap[reducerPath] = reducerToInject;
+    reducer = getReducer();
+    return combinedReducer;
+  };
+  const selector = Object.assign(function makeSelector(selectorFn, selectState) {
+    return function selector2(state, ...args) {
+      return selectorFn(createStateProxy(selectState ? selectState(state, ...args) : state, reducerMap, initialStateCache), ...args);
+    };
+  }, {
+    original
+  });
+  return Object.assign(combinedReducer, {
+    inject,
+    selector
+  });
+}
+
+// src/formatProdErrorMessage.ts
+function formatProdErrorMessage(code) {
+  return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;
+}
+export {
+  ReducerType,
+  SHOULD_AUTOBATCH,
+  TaskAbortError,
+  Tuple,
+  addListener,
+  asyncThunkCreator,
+  autoBatchEnhancer,
+  buildCreateSlice,
+  clearAllListeners,
+  combineSlices,
+  configureStore,
+  createAction,
+  createActionCreatorInvariantMiddleware,
+  createAsyncThunk,
+  createDraftSafeSelector,
+  createDraftSafeSelectorCreator,
+  createDynamicMiddleware,
+  createEntityAdapter,
+  createImmutableStateInvariantMiddleware,
+  createListenerMiddleware,
+  produce as createNextState,
+  createReducer,
+  createSelector,
+  createSelectorCreator2 as createSelectorCreator,
+  createSerializableStateInvariantMiddleware,
+  createSlice,
+  current3 as current,
+  findNonSerializableValue,
+  formatProdErrorMessage,
+  freeze,
+  isActionCreator,
+  isAllOf,
+  isAnyOf,
+  isAsyncThunkAction,
+  isDraft5 as isDraft,
+  isFSA as isFluxStandardAction,
+  isFulfilled,
+  isImmutableDefault,
+  isPending,
+  isPlain,
+  isRejected,
+  isRejectedWithValue,
+  lruMemoize,
+  miniSerializeError,
+  nanoid,
+  original2 as original,
+  prepareAutoBatched,
+  removeListener,
+  unwrapResult,
+  weakMapMemoize2 as weakMapMemoize
+};
+//# sourceMappingURL=redux-toolkit.legacy-esm.js.map
Index: node_modules/@reduxjs/toolkit/dist/redux-toolkit.legacy-esm.js.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/redux-toolkit.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/redux-toolkit.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/index.ts","../src/createDraftSafeSelector.ts","../src/configureStore.ts","../src/devtoolsExtension.ts","../src/getDefaultMiddleware.ts","../src/createAction.ts","../src/tsHelpers.ts","../src/actionCreatorInvariantMiddleware.ts","../src/utils.ts","../src/immutableStateInvariantMiddleware.ts","../src/serializableStateInvariantMiddleware.ts","../src/autoBatchEnhancer.ts","../src/getDefaultEnhancers.ts","../src/createReducer.ts","../src/mapBuilders.ts","../src/matchers.ts","../src/nanoid.ts","../src/createAsyncThunk.ts","../src/createSlice.ts","../src/entities/entity_state.ts","../src/entities/state_selectors.ts","../src/entities/state_adapter.ts","../src/entities/utils.ts","../src/entities/unsorted_state_adapter.ts","../src/entities/sorted_state_adapter.ts","../src/entities/create_adapter.ts","../src/listenerMiddleware/index.ts","../src/listenerMiddleware/exceptions.ts","../src/listenerMiddleware/utils.ts","../src/listenerMiddleware/task.ts","../src/dynamicMiddleware/index.ts","../src/combineSlices.ts","../src/formatProdErrorMessage.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from './formatProdErrorMessage';\nexport * from 'redux';\nexport { produce as createNextState, current, freeze, original, isDraft } from 'immer';\nexport type { Draft } from 'immer';\nexport { createSelector, createSelectorCreator, lruMemoize, weakMapMemoize } from 'reselect';\nexport type { Selector, OutputSelector } from 'reselect';\nexport { createDraftSafeSelector, createDraftSafeSelectorCreator } from './createDraftSafeSelector';\nexport type { ThunkAction, ThunkDispatch, ThunkMiddleware } from 'redux-thunk';\nexport {\n// js\nconfigureStore } from './configureStore';\nexport type {\n// types\nConfigureStoreOptions, EnhancedStore } from './configureStore';\nexport type { DevToolsEnhancerOptions } from './devtoolsExtension';\nexport {\n// js\ncreateAction, isActionCreator, isFSA as isFluxStandardAction } from './createAction';\nexport type {\n// types\nPayloadAction, PayloadActionCreator, ActionCreatorWithNonInferrablePayload, ActionCreatorWithOptionalPayload, ActionCreatorWithPayload, ActionCreatorWithoutPayload, ActionCreatorWithPreparedPayload, PrepareAction } from './createAction';\nexport {\n// js\ncreateReducer } from './createReducer';\nexport type {\n// types\nActions, CaseReducer, CaseReducers } from './createReducer';\nexport {\n// js\ncreateSlice, buildCreateSlice, asyncThunkCreator, ReducerType } from './createSlice';\nexport type {\n// types\nCreateSliceOptions, Slice, CaseReducerActions, SliceCaseReducers, ValidateSliceCaseReducers, CaseReducerWithPrepare, ReducerCreators, SliceSelectors } from './createSlice';\nexport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nexport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nexport {\n// js\ncreateImmutableStateInvariantMiddleware, isImmutableDefault } from './immutableStateInvariantMiddleware';\nexport type {\n// types\nImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\nexport {\n// js\ncreateSerializableStateInvariantMiddleware, findNonSerializableValue, isPlain } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nSerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nActionReducerMapBuilder } from './mapBuilders';\nexport { Tuple } from './utils';\nexport { createEntityAdapter } from './entities/create_adapter';\nexport type { EntityState, EntityAdapter, EntitySelectors, EntityStateAdapter, EntityId, Update, IdSelector, Comparer } from './entities/models';\nexport { createAsyncThunk, unwrapResult, miniSerializeError } from './createAsyncThunk';\nexport type { AsyncThunk, AsyncThunkOptions, AsyncThunkAction, AsyncThunkPayloadCreatorReturnValue, AsyncThunkPayloadCreator, GetState, GetThunkAPI, SerializedError, CreateAsyncThunkFunction } from './createAsyncThunk';\nexport {\n// js\nisAllOf, isAnyOf, isPending, isRejected, isFulfilled, isAsyncThunkAction, isRejectedWithValue } from './matchers';\nexport type {\n// types\nActionMatchingAllOf, ActionMatchingAnyOf } from './matchers';\nexport { nanoid } from './nanoid';\nexport type { ListenerEffect, ListenerMiddleware, ListenerEffectAPI, ListenerMiddlewareInstance, CreateListenerMiddlewareOptions, ListenerErrorHandler, TypedStartListening, TypedAddListener, TypedStopListening, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions, ForkedTaskExecutor, ForkedTask, ForkedTaskAPI, AsyncTaskExecutor, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult } from './listenerMiddleware/index';\nexport type { AnyListenerPredicate } from './listenerMiddleware/types';\nexport { createListenerMiddleware, addListener, removeListener, clearAllListeners, TaskAbortError } from './listenerMiddleware/index';\nexport type { AddMiddleware, DynamicDispatch, DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './dynamicMiddleware/types';\nexport { createDynamicMiddleware } from './dynamicMiddleware/index';\nexport { SHOULD_AUTOBATCH, prepareAutoBatched, autoBatchEnhancer } from './autoBatchEnhancer';\nexport type { AutoBatchOptions } from './autoBatchEnhancer';\nexport { combineSlices } from './combineSlices';\nexport type { CombinedSliceReducer, WithSlice } from './combineSlices';\nexport type { ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions, SafePromise } from './tsHelpers';\nexport { formatProdErrorMessage } from './formatProdErrorMessage';","import { current, isDraft } from 'immer';\nimport { createSelectorCreator, weakMapMemoize } from 'reselect';\nexport const createDraftSafeSelectorCreator: typeof createSelectorCreator = (...args: unknown[]) => {\n  const createSelector = (createSelectorCreator as any)(...args);\n  const createDraftSafeSelector = Object.assign((...args: unknown[]) => {\n    const selector = createSelector(...args);\n    const wrappedSelector = (value: unknown, ...rest: unknown[]) => selector(isDraft(value) ? current(value) : value, ...rest);\n    Object.assign(wrappedSelector, selector);\n    return wrappedSelector as any;\n  }, {\n    withTypes: () => createDraftSafeSelector\n  });\n  return createDraftSafeSelector;\n};\n\n/**\n * \"Draft-Safe\" version of `reselect`'s `createSelector`:\n * If an `immer`-drafted object is passed into the resulting selector's first argument,\n * the selector will act on the current draft value, instead of returning a cached value\n * that might be possibly outdated if the draft has been modified since.\n * @public\n */\nexport const createDraftSafeSelector = /* @__PURE__ */\ncreateDraftSafeSelectorCreator(weakMapMemoize);","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Reducer, ReducersMapObject, Middleware, Action, StoreEnhancer, Store, UnknownAction } from 'redux';\nimport { applyMiddleware, createStore, compose, combineReducers, isPlainObject } from 'redux';\nimport type { DevToolsEnhancerOptions as DevToolsOptions } from './devtoolsExtension';\nimport { composeWithDevTools } from './devtoolsExtension';\nimport type { ThunkMiddlewareFor, GetDefaultMiddleware } from './getDefaultMiddleware';\nimport { buildGetDefaultMiddleware } from './getDefaultMiddleware';\nimport type { ExtractDispatchExtensions, ExtractStoreExtensions, ExtractStateExtensions, UnknownIfNonSpecific } from './tsHelpers';\nimport type { Tuple } from './utils';\nimport type { GetDefaultEnhancers } from './getDefaultEnhancers';\nimport { buildGetDefaultEnhancers } from './getDefaultEnhancers';\n\n/**\n * Options for `configureStore()`.\n *\n * @public\n */\nexport interface ConfigureStoreOptions<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<Middlewares<S>>, E extends Tuple<Enhancers> = Tuple<Enhancers>, P = S> {\n  /**\n   * A single reducer function that will be used as the root reducer, or an\n   * object of slice reducers that will be passed to `combineReducers()`.\n   */\n  reducer: Reducer<S, A, P> | ReducersMapObject<S, A, P>;\n\n  /**\n   * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.\n   * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.\n   *\n   * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`\n   * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage\n   */\n  middleware?: (getDefaultMiddleware: GetDefaultMiddleware<S>) => M;\n\n  /**\n   * Whether to enable Redux DevTools integration. Defaults to `true`.\n   *\n   * Additional configuration can be done by passing Redux DevTools options\n   */\n  devTools?: boolean | DevToolsOptions;\n\n  /**\n   * Whether to check for duplicate middleware instances. Defaults to `true`.\n   */\n  duplicateMiddlewareCheck?: boolean;\n\n  /**\n   * The initial state, same as Redux's createStore.\n   * You may optionally specify it to hydrate the state\n   * from the server in universal apps, or to restore a previously serialized\n   * user session. If you use `combineReducers()` to produce the root reducer\n   * function (either directly or indirectly by passing an object as `reducer`),\n   * this must be an object with the same shape as the reducer map keys.\n   */\n  // we infer here, and instead complain if the reducer doesn't match\n  preloadedState?: P;\n\n  /**\n   * The store enhancers to apply. See Redux's `createStore()`.\n   * All enhancers will be included before the DevTools Extension enhancer.\n   * If you need to customize the order of enhancers, supply a callback\n   * function that will receive a `getDefaultEnhancers` function that returns a Tuple,\n   * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).\n   * If you only need to add middleware, you can use the `middleware` parameter instead.\n   */\n  enhancers?: (getDefaultEnhancers: GetDefaultEnhancers<M>) => E;\n}\nexport type Middlewares<S> = ReadonlyArray<Middleware<{}, S>>;\ntype Enhancers = ReadonlyArray<StoreEnhancer>;\n\n/**\n * A Redux store returned by `configureStore()`. Supports dispatching\n * side-effectful _thunks_ in addition to plain actions.\n *\n * @public\n */\nexport type EnhancedStore<S = any, A extends Action = UnknownAction, E extends Enhancers = Enhancers> = ExtractStoreExtensions<E> & Store<S, A, UnknownIfNonSpecific<ExtractStateExtensions<E>>>;\n\n/**\n * A friendly abstraction over the standard Redux `createStore()` function.\n *\n * @param options The store configuration.\n * @returns A configured Redux store.\n *\n * @public\n */\nexport function configureStore<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<[ThunkMiddlewareFor<S>]>, E extends Tuple<Enhancers> = Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>, StoreEnhancer]>, P = S>(options: ConfigureStoreOptions<S, A, M, E, P>): EnhancedStore<S, A, E> {\n  const getDefaultMiddleware = buildGetDefaultMiddleware<S>();\n  const {\n    reducer = undefined,\n    middleware,\n    devTools = true,\n    duplicateMiddlewareCheck = true,\n    preloadedState = undefined,\n    enhancers = undefined\n  } = options || {};\n  let rootReducer: Reducer<S, A, P>;\n  if (typeof reducer === 'function') {\n    rootReducer = reducer;\n  } else if (isPlainObject(reducer)) {\n    rootReducer = combineReducers(reducer) as unknown as Reducer<S, A, P>;\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(1) : '`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\n  }\n  if (process.env.NODE_ENV !== 'production' && middleware && typeof middleware !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(2) : '`middleware` field must be a callback');\n  }\n  let finalMiddleware: Tuple<Middlewares<S>>;\n  if (typeof middleware === 'function') {\n    finalMiddleware = middleware(getDefaultMiddleware);\n    if (process.env.NODE_ENV !== 'production' && !Array.isArray(finalMiddleware)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(3) : 'when using a middleware builder function, an array of middleware must be returned');\n    }\n  } else {\n    finalMiddleware = getDefaultMiddleware();\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(4) : 'each middleware provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && duplicateMiddlewareCheck) {\n    let middlewareReferences = new Set<Middleware<any, S>>();\n    finalMiddleware.forEach(middleware => {\n      if (middlewareReferences.has(middleware)) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(42) : 'Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.');\n      }\n      middlewareReferences.add(middleware);\n    });\n  }\n  let finalCompose = compose;\n  if (devTools) {\n    finalCompose = composeWithDevTools({\n      // Enable capture of stack traces for dispatched Redux actions\n      trace: process.env.NODE_ENV !== 'production',\n      ...(typeof devTools === 'object' && devTools)\n    });\n  }\n  const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n  const getDefaultEnhancers = buildGetDefaultEnhancers<M>(middlewareEnhancer);\n  if (process.env.NODE_ENV !== 'production' && enhancers && typeof enhancers !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : '`enhancers` field must be a callback');\n  }\n  let storeEnhancers = typeof enhancers === 'function' ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n  if (process.env.NODE_ENV !== 'production' && !Array.isArray(storeEnhancers)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : '`enhancers` callback must return an array');\n  }\n  if (process.env.NODE_ENV !== 'production' && storeEnhancers.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : 'each enhancer provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n    console.error('middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`');\n  }\n  const composedEnhancer: StoreEnhancer<any> = finalCompose(...storeEnhancers);\n  return createStore(rootReducer, preloadedState as P, composedEnhancer);\n}","import type { Action, ActionCreator, StoreEnhancer } from 'redux';\nimport { compose } from 'redux';\n\n/**\r\n * @public\r\n */\nexport interface DevToolsEnhancerOptions {\n  /**\r\n   * the instance name to be showed on the monitor page. Default value is `document.title`.\r\n   * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.\r\n   */\n  name?: string;\n  /**\r\n   * action creators functions to be available in the Dispatcher.\r\n   */\n  actionCreators?: ActionCreator<any>[] | {\n    [key: string]: ActionCreator<any>;\n  };\n  /**\r\n   * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.\r\n   * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.\r\n   * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).\r\n   *\r\n   * @default 500 ms.\r\n   */\n  latency?: number;\n  /**\r\n   * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.\r\n   *\r\n   * @default 50\r\n   */\n  maxAge?: number;\n  /**\r\n   * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you\r\n   * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`\r\n   * functions.\r\n   */\n  serialize?: boolean | {\n    /**\r\n     * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).\r\n     * - `false` - will handle also circular references.\r\n     * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.\r\n     * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.\r\n     *   For each of them you can indicate if to include (by setting as `true`).\r\n     *   For `function` key you can also specify a custom function which handles serialization.\r\n     *   See [`jsan`](https://github.com/kolodny/jsan) for more details.\r\n     */\n    options?: undefined | boolean | {\n      date?: true;\n      regex?: true;\n      undefined?: true;\n      error?: true;\n      symbol?: true;\n      map?: true;\n      set?: true;\n      function?: true | ((fn: (...args: any[]) => any) => string);\n    };\n    /**\r\n     * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.\r\n     * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)\r\n     * key. So you can deserialize it back while importing or persisting data.\r\n     * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):\r\n     */\n    replacer?: (key: string, value: unknown) => any;\n    /**\r\n     * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)\r\n     * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)\r\n     * as an example on how to serialize special data types and get them back.\r\n     */\n    reviver?: (key: string, value: unknown) => any;\n    /**\r\n     * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).\r\n     * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.\r\n     * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.\r\n     */\n    immutable?: any;\n    /**\r\n     * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...\r\n     */\n    refs?: any;\n  };\n  /**\r\n   * function which takes `action` object and id number as arguments, and should return `action` object back.\r\n   */\n  actionSanitizer?: <A extends Action>(action: A, id: number) => A;\n  /**\r\n   * function which takes `state` object and index as arguments, and should return `state` object back.\r\n   */\n  stateSanitizer?: <S>(state: S, index: number) => S;\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsDenylist?: string | string[];\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsAllowlist?: string | string[];\n  /**\r\n   * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.\r\n   * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.\r\n   */\n  predicate?: <S, A extends Action>(state: S, action: A) => boolean;\n  /**\r\n   * if specified as `false`, it will not record the changes till clicking on `Start recording` button.\r\n   * Available only for Redux enhancer, for others use `autoPause`.\r\n   *\r\n   * @default true\r\n   */\n  shouldRecordChanges?: boolean;\n  /**\r\n   * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.\r\n   * If not specified, will commit when paused. Available only for Redux enhancer.\r\n   *\r\n   * @default \"@@PAUSED\"\"\r\n   */\n  pauseActionType?: string;\n  /**\r\n   * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\r\n   * Not available for Redux enhancer (as it already does it but storing the data to be sent).\r\n   *\r\n   * @default false\r\n   */\n  autoPause?: boolean;\n  /**\r\n   * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.\r\n   * Available only for Redux enhancer.\r\n   *\r\n   * @default false\r\n   */\n  shouldStartLocked?: boolean;\n  /**\r\n   * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.\r\n   *\r\n   * @default true\r\n   */\n  shouldHotReload?: boolean;\n  /**\r\n   * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.\r\n   *\r\n   * @default false\r\n   */\n  shouldCatchErrors?: boolean;\n  /**\r\n   * If you want to restrict the extension, specify the features you allow.\r\n   * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.\r\n   * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.\r\n   * Otherwise, you'll get/set the data right from the monitor part.\r\n   */\n  features?: {\n    /**\r\n     * start/pause recording of dispatched actions\r\n     */\n    pause?: boolean;\n    /**\r\n     * lock/unlock dispatching actions and side effects\r\n     */\n    lock?: boolean;\n    /**\r\n     * persist states on page reloading\r\n     */\n    persist?: boolean;\n    /**\r\n     * export history of actions in a file\r\n     */\n    export?: boolean | 'custom';\n    /**\r\n     * import history of actions from a file\r\n     */\n    import?: boolean | 'custom';\n    /**\r\n     * jump back and forth (time travelling)\r\n     */\n    jump?: boolean;\n    /**\r\n     * skip (cancel) actions\r\n     */\n    skip?: boolean;\n    /**\r\n     * drag and drop actions in the history list\r\n     */\n    reorder?: boolean;\n    /**\r\n     * dispatch custom actions or action creators\r\n     */\n    dispatch?: boolean;\n    /**\r\n     * generate tests for the selected actions\r\n     */\n    test?: boolean;\n  };\n  /**\r\n   * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.\r\n   * Defaults to false.\r\n   */\n  trace?: boolean | (<A extends Action>(action: A) => string);\n  /**\r\n   * The maximum number of stack trace entries to record per action. Defaults to 10.\r\n   */\n  traceLimit?: number;\n}\ntype Compose = typeof compose;\ninterface ComposeWithDevTools {\n  (options: DevToolsEnhancerOptions): Compose;\n  <StoreExt extends {}>(...funcs: StoreEnhancer<StoreExt>[]): StoreEnhancer<StoreExt>;\n}\n\n/**\r\n * @public\r\n */\nexport const composeWithDevTools: ComposeWithDevTools = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\n  if (arguments.length === 0) return undefined;\n  if (typeof arguments[0] === 'object') return compose;\n  return compose.apply(null, arguments as any as Function[]);\n};\n\n/**\r\n * @public\r\n */\nexport const devToolsEnhancer: {\n  (options: DevToolsEnhancerOptions): StoreEnhancer<any>;\n} = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION__ : function () {\n  return function (noop) {\n    return noop;\n  };\n};","import type { Middleware, UnknownAction } from 'redux';\nimport type { ThunkMiddleware } from 'redux-thunk';\nimport { thunk as thunkMiddleware, withExtraArgument } from 'redux-thunk';\nimport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nimport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nimport type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\n/* PROD_START_REMOVE_UMD */\nimport { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware';\n/* PROD_STOP_REMOVE_UMD */\n\nimport type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nimport { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware';\nimport type { ExcludeFromTuple } from './tsHelpers';\nimport { Tuple } from './utils';\nfunction isBoolean(x: any): x is boolean {\n  return typeof x === 'boolean';\n}\ninterface ThunkOptions<E = any> {\n  extraArgument: E;\n}\ninterface GetDefaultMiddlewareOptions {\n  thunk?: boolean | ThunkOptions;\n  immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions;\n  serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions;\n  actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions;\n}\nexport type ThunkMiddlewareFor<S, O extends GetDefaultMiddlewareOptions = {}> = O extends {\n  thunk: false;\n} ? never : O extends {\n  thunk: {\n    extraArgument: infer E;\n  };\n} ? ThunkMiddleware<S, UnknownAction, E> : ThunkMiddleware<S, UnknownAction>;\nexport type GetDefaultMiddleware<S = any> = <O extends GetDefaultMiddlewareOptions = {\n  thunk: true;\n  immutableCheck: true;\n  serializableCheck: true;\n  actionCreatorCheck: true;\n}>(options?: O) => Tuple<ExcludeFromTuple<[ThunkMiddlewareFor<S, O>], never>>;\nexport const buildGetDefaultMiddleware = <S = any,>(): GetDefaultMiddleware<S> => function getDefaultMiddleware(options) {\n  const {\n    thunk = true,\n    immutableCheck = true,\n    serializableCheck = true,\n    actionCreatorCheck = true\n  } = options ?? {};\n  let middlewareArray = new Tuple<Middleware[]>();\n  if (thunk) {\n    if (isBoolean(thunk)) {\n      middlewareArray.push(thunkMiddleware);\n    } else {\n      middlewareArray.push(withExtraArgument(thunk.extraArgument));\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (immutableCheck) {\n      /* PROD_START_REMOVE_UMD */\n      let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(immutableCheck)) {\n        immutableOptions = immutableCheck;\n      }\n      middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n      /* PROD_STOP_REMOVE_UMD */\n    }\n    if (serializableCheck) {\n      let serializableOptions: SerializableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(serializableCheck)) {\n        serializableOptions = serializableCheck;\n      }\n      middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n    }\n    if (actionCreatorCheck) {\n      let actionCreatorOptions: ActionCreatorInvariantMiddlewareOptions = {};\n      if (!isBoolean(actionCreatorCheck)) {\n        actionCreatorOptions = actionCreatorCheck;\n      }\n      middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n    }\n  }\n  return middlewareArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport { isAction } from 'redux';\nimport type { IsUnknownOrNonInferrable, IfMaybeUndefined, IfVoid, IsAny } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\n\n/**\n * An action with a string type and an associated payload. This is the\n * type of action returned by `createAction()` action creators.\n *\n * @template P The type of the action's payload.\n * @template T the type used for the action type.\n * @template M The type of the action's meta (optional)\n * @template E The type of the action's error (optional)\n *\n * @public\n */\nexport type PayloadAction<P = void, T extends string = string, M = never, E = never> = {\n  payload: P;\n  type: T;\n} & ([M] extends [never] ? {} : {\n  meta: M;\n}) & ([E] extends [never] ? {} : {\n  error: E;\n});\n\n/**\n * A \"prepare\" method to be used as the second parameter of `createAction`.\n * Takes any number of arguments and returns a Flux Standard Action without\n * type (will be added later) that *must* contain a payload (might be undefined).\n *\n * @public\n */\nexport type PrepareAction<P> = ((...args: any[]) => {\n  payload: P;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  error: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n  error: any;\n});\n\n/**\n * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.\n *\n * @internal\n */\nexport type _ActionCreatorWithPreparedPayload<PA extends PrepareAction<any> | void, T extends string = string> = PA extends PrepareAction<infer P> ? ActionCreatorWithPreparedPayload<Parameters<PA>, P, T, ReturnType<PA> extends {\n  error: infer E;\n} ? E : never, ReturnType<PA> extends {\n  meta: infer M;\n} ? M : never> : void;\n\n/**\n * Basic type for all action creators.\n *\n * @inheritdoc {redux#ActionCreator}\n */\nexport type BaseActionCreator<P, T extends string, M = never, E = never> = {\n  type: T;\n  match: (action: unknown) => action is PayloadAction<P, T, M, E>;\n};\n\n/**\n * An action creator that takes multiple arguments that are passed\n * to a `PrepareAction` method to create the final Action.\n * @typeParam Args arguments for the action creator function\n * @typeParam P `payload` type\n * @typeParam T `type` name\n * @typeParam E optional `error` type\n * @typeParam M optional `meta` type\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPreparedPayload<Args extends unknown[], P, T extends string = string, E = never, M = never> extends BaseActionCreator<P, T, M, E> {\n  /**\n   * Calling this {@link redux#ActionCreator} with `Args` will return\n   * an Action with a payload of type `P` and (depending on the `PrepareAction`\n   * method used) a `meta`- and `error` property of types `M` and `E` respectively.\n   */\n  (...args: Args): PayloadAction<P, T, M, E>;\n}\n\n/**\n * An action creator of type `T` that takes an optional payload of type `P`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithOptionalPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`.\n   * Calling it without an argument will return a PayloadAction with a payload of `undefined`.\n   */\n  (payload?: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` that takes no payload.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithoutPayload<T extends string = string> extends BaseActionCreator<undefined, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} will\n   * return a {@link PayloadAction} of type `T` with a payload of `undefined`\n   */\n  (noArgument: void): PayloadAction<undefined, T>;\n}\n\n/**\n * An action creator of type `T` that requires a payload of type P.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`\n   */\n  (payload: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithNonInferrablePayload<T extends string = string> extends BaseActionCreator<unknown, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload\n   * of exactly the type of the argument.\n   */\n  <PT extends unknown>(payload: PT): PayloadAction<PT, T>;\n}\n\n/**\n * An action creator that produces actions with a `payload` attribute.\n *\n * @typeParam P the `payload` type\n * @typeParam T the `type` of the resulting action\n * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.\n *\n * @public\n */\nexport type PayloadActionCreator<P = void, T extends string = string, PA extends PrepareAction<P> | void = void> = IfPrepareActionMethodProvided<PA, _ActionCreatorWithPreparedPayload<PA, T>,\n// else\nIsAny<P, ActionCreatorWithPayload<any, T>, IsUnknownOrNonInferrable<P, ActionCreatorWithNonInferrablePayload<T>,\n// else\nIfVoid<P, ActionCreatorWithoutPayload<T>,\n// else\nIfMaybeUndefined<P, ActionCreatorWithOptionalPayload<P, T>,\n// else\nActionCreatorWithPayload<P, T>>>>>>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<P = void, T extends string = string>(type: T): PayloadActionCreator<P, T>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<PA extends PrepareAction<any>, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>;\nexport function createAction(type: string, prepareAction?: Function): any {\n  function actionCreator(...args: any[]) {\n    if (prepareAction) {\n      let prepared = prepareAction(...args);\n      if (!prepared) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(0) : 'prepareAction did not return an object');\n      }\n      return {\n        type,\n        payload: prepared.payload,\n        ...('meta' in prepared && {\n          meta: prepared.meta\n        }),\n        ...('error' in prepared && {\n          error: prepared.error\n        })\n      };\n    }\n    return {\n      type,\n      payload: args[0]\n    };\n  }\n  actionCreator.toString = () => `${type}`;\n  actionCreator.type = type;\n  actionCreator.match = (action: unknown): action is PayloadAction => isAction(action) && action.type === type;\n  return actionCreator;\n}\n\n/**\n * Returns true if value is an RTK-like action creator, with a static type property and match method.\n */\nexport function isActionCreator(action: unknown): action is BaseActionCreator<unknown, string> & Function {\n  return typeof action === 'function' && 'type' in action &&\n  // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n  hasMatchFunction(action as any);\n}\n\n/**\n * Returns true if value is an action with a string type and valid Flux Standard Action keys.\n */\nexport function isFSA(action: unknown): action is {\n  type: string;\n  payload?: unknown;\n  error?: unknown;\n  meta?: unknown;\n} {\n  return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key: string) {\n  return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1;\n}\n\n// helper types for more readable typings\n\ntype IfPrepareActionMethodProvided<PA extends PrepareAction<any> | void, True, False> = PA extends ((...args: any[]) => any) ? True : False;","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { Middleware } from 'redux';\nimport { isActionCreator as isRTKAction } from './createAction';\nexport interface ActionCreatorInvariantMiddlewareOptions {\n  /**\n   * The function to identify whether a value is an action creator.\n   * The default checks for a function with a static type property and match method.\n   */\n  isActionCreator?: (action: unknown) => action is Function & {\n    type?: unknown;\n  };\n}\nexport function getMessage(type?: unknown) {\n  const splitType = type ? `${type}`.split('/') : [];\n  const actionName = splitType[splitType.length - 1] || 'actionCreator';\n  return `Detected an action creator with type \"${type || 'unknown'}\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nexport function createActionCreatorInvariantMiddleware(options: ActionCreatorInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  }\n  const {\n    isActionCreator = isRTKAction\n  } = options;\n  return () => next => action => {\n    if (isActionCreator(action)) {\n      console.warn(getMessage(action.type));\n    }\n    return next(action);\n  };\n}","import { produce as createNextState, isDraftable } from 'immer';\nexport function getTimeMeasureUtils(maxDelay: number, fnName: string) {\n  let elapsed = 0;\n  return {\n    measureTime<T>(fn: () => T): T {\n      const started = Date.now();\n      try {\n        return fn();\n      } finally {\n        const finished = Date.now();\n        elapsed += finished - started;\n      }\n    },\n    warnIfExceeded() {\n      if (elapsed > maxDelay) {\n        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n      }\n    }\n  };\n}\nexport function delay(ms: number) {\n  return new Promise(resolve => setTimeout(resolve, ms));\n}\nexport class Tuple<Items extends ReadonlyArray<unknown> = []> extends Array<Items[number]> {\n  constructor(length: number);\n  constructor(...items: Items);\n  constructor(...items: any[]) {\n    super(...items);\n    Object.setPrototypeOf(this, Tuple.prototype);\n  }\n  static override get [Symbol.species]() {\n    return Tuple as any;\n  }\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat(...arr: any[]) {\n    return super.concat.apply(this, arr);\n  }\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend(...arr: any[]) {\n    if (arr.length === 1 && Array.isArray(arr[0])) {\n      return new Tuple(...arr[0].concat(this));\n    }\n    return new Tuple(...arr.concat(this));\n  }\n}\nexport function freezeDraftable<T>(val: T) {\n  return isDraftable(val) ? createNextState(val, () => {}) : val;\n}\nexport function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}\nexport function getOrInsertComputed<K extends object, V>(map: WeakMap<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, compute: (key: K) => V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, compute(key)).get(key) as V;\n}\nexport function promiseWithResolvers<T>(): {\n  promise: Promise<T>;\n  resolve: (value: T | PromiseLike<T>) => void;\n  reject: (reason?: any) => void;\n} {\n  let resolve: any;\n  let reject: any;\n  const promise = new Promise<T>((res, rej) => {\n    resolve = res;\n    reject = rej;\n  });\n  return {\n    promise,\n    resolve,\n    reject\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Middleware } from 'redux';\nimport type { IgnorePaths } from './serializableStateInvariantMiddleware';\nimport { getTimeMeasureUtils } from './utils';\ntype EntryProcessor = (key: string, value: any) => any;\n\n/**\n * The default `isImmutable` function.\n *\n * @public\n */\nexport function isImmutableDefault(value: unknown): boolean {\n  return typeof value !== 'object' || value == null || Object.isFrozen(value);\n}\nexport function trackForMutations(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths | undefined, obj: any) {\n  const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\n  return {\n    detectMutations() {\n      return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\n    }\n  };\n}\ninterface TrackedProperty {\n  value: any;\n  children: Record<string, any>;\n}\nfunction trackProperties(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths = [], obj: Record<string, any>, path: string = '', checkedObjects: Set<Record<string, any>> = new Set()) {\n  const tracked: Partial<TrackedProperty> = {\n    value: obj\n  };\n  if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n    checkedObjects.add(obj);\n    tracked.children = {};\n    for (const key in obj) {\n      const childPath = path ? path + '.' + key : key;\n      if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\n        continue;\n      }\n      tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\n    }\n  }\n  return tracked as TrackedProperty;\n}\nfunction detectMutations(isImmutable: IsImmutableFunc, ignoredPaths: IgnorePaths = [], trackedProperty: TrackedProperty, obj: any, sameParentRef: boolean = false, path: string = ''): {\n  wasMutated: boolean;\n  path?: string;\n} {\n  const prevObj = trackedProperty ? trackedProperty.value : undefined;\n  const sameRef = prevObj === obj;\n  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n    return {\n      wasMutated: true,\n      path\n    };\n  }\n  if (isImmutable(prevObj) || isImmutable(obj)) {\n    return {\n      wasMutated: false\n    };\n  }\n\n  // Gather all keys from prev (tracked) and after objs\n  const keysToDetect: Record<string, boolean> = {};\n  for (let key in trackedProperty.children) {\n    keysToDetect[key] = true;\n  }\n  for (let key in obj) {\n    keysToDetect[key] = true;\n  }\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (let key in keysToDetect) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n    if (result.wasMutated) {\n      return result;\n    }\n  }\n  return {\n    wasMutated: false\n  };\n}\ntype IsImmutableFunc = (value: any) => boolean;\n\n/**\n * Options for `createImmutableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface ImmutableStateInvariantMiddlewareOptions {\n  /**\n    Callback function to check if a value is considered to be immutable.\n    This function is applied recursively to every value contained in the state.\n    The default implementation will return true for primitive types\n    (like numbers, strings, booleans, null and undefined).\n   */\n  isImmutable?: IsImmutableFunc;\n  /**\n    An array of dot-separated path strings that match named nodes from\n    the root state to ignore when checking for immutability.\n    Defaults to undefined\n   */\n  ignoredPaths?: IgnorePaths;\n  /** Print a warning if checks take longer than N ms. Default: 32ms */\n  warnAfter?: number;\n}\n\n/**\n * Creates a middleware that checks whether any state was mutated in between\n * dispatches or during a dispatch. If any mutations are detected, an error is\n * thrown.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createImmutableStateInvariantMiddleware(options: ImmutableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    function stringify(obj: any, serializer?: EntryProcessor, indent?: string | number, decycler?: EntryProcessor): string {\n      return JSON.stringify(obj, getSerialize(serializer, decycler), indent);\n    }\n    function getSerialize(serializer?: EntryProcessor, decycler?: EntryProcessor): EntryProcessor {\n      let stack: any[] = [],\n        keys: any[] = [];\n      if (!decycler) decycler = function (_: string, value: any) {\n        if (stack[0] === value) return '[Circular ~]';\n        return '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']';\n      };\n      return function (this: any, key: string, value: any) {\n        if (stack.length > 0) {\n          var thisPos = stack.indexOf(this);\n          ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n          ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n          if (~stack.indexOf(value)) value = decycler!.call(this, key, value);\n        } else stack.push(value);\n        return serializer == null ? value : serializer.call(this, key, value);\n      };\n    }\n    let {\n      isImmutable = isImmutableDefault,\n      ignoredPaths,\n      warnAfter = 32\n    } = options;\n    const track = trackForMutations.bind(null, isImmutable, ignoredPaths);\n    return ({\n      getState\n    }) => {\n      let state = getState();\n      let tracker = track(state);\n      let result;\n      return next => action => {\n        const measureUtils = getTimeMeasureUtils(warnAfter, 'ImmutableStateInvariantMiddleware');\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ''}'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        const dispatchedAction = next(action);\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ''}. Take a look at the reducer(s) handling the action ${stringify(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n        return dispatchedAction;\n      };\n    };\n  }\n}","import type { Middleware } from 'redux';\nimport { isAction, isPlainObject } from 'redux';\nimport { getTimeMeasureUtils } from './utils';\n\n/**\n * Returns true if the passed value is \"plain\", i.e. a value that is either\n * directly JSON-serializable (boolean, number, string, array, plain object)\n * or `undefined`.\n *\n * @param val The value to check.\n *\n * @public\n */\nexport function isPlain(val: any) {\n  const type = typeof val;\n  return val == null || type === 'string' || type === 'boolean' || type === 'number' || Array.isArray(val) || isPlainObject(val);\n}\ninterface NonSerializableValue {\n  keyPath: string;\n  value: unknown;\n}\nexport type IgnorePaths = readonly (string | RegExp)[];\n\n/**\n * @public\n */\nexport function findNonSerializableValue(value: unknown, path: string = '', isSerializable: (value: unknown) => boolean = isPlain, getEntries?: (value: unknown) => [string, any][], ignoredPaths: IgnorePaths = [], cache?: WeakSet<object>): NonSerializableValue | false {\n  let foundNestedSerializable: NonSerializableValue | false;\n  if (!isSerializable(value)) {\n    return {\n      keyPath: path || '<root>',\n      value: value\n    };\n  }\n  if (typeof value !== 'object' || value === null) {\n    return false;\n  }\n  if (cache?.has(value)) return false;\n  const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (const [key, nestedValue] of entries) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    if (!isSerializable(nestedValue)) {\n      return {\n        keyPath: nestedPath,\n        value: nestedValue\n      };\n    }\n    if (typeof nestedValue === 'object') {\n      foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n      if (foundNestedSerializable) {\n        return foundNestedSerializable;\n      }\n    }\n  }\n  if (cache && isNestedFrozen(value)) cache.add(value);\n  return false;\n}\nexport function isNestedFrozen(value: object) {\n  if (!Object.isFrozen(value)) return false;\n  for (const nestedValue of Object.values(value)) {\n    if (typeof nestedValue !== 'object' || nestedValue === null) continue;\n    if (!isNestedFrozen(nestedValue)) return false;\n  }\n  return true;\n}\n\n/**\n * Options for `createSerializableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface SerializableStateInvariantMiddlewareOptions {\n  /**\n   * The function to check if a value is considered serializable. This\n   * function is applied recursively to every value contained in the\n   * state. Defaults to `isPlain()`.\n   */\n  isSerializable?: (value: any) => boolean;\n  /**\n   * The function that will be used to retrieve entries from each\n   * value.  If unspecified, `Object.entries` will be used. Defaults\n   * to `undefined`.\n   */\n  getEntries?: (value: any) => [string, any][];\n\n  /**\n   * An array of action types to ignore when checking for serializability.\n   * Defaults to []\n   */\n  ignoredActions?: string[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to\n   * ['meta.arg', 'meta.baseQueryMeta']\n   */\n  ignoredActionPaths?: (string | RegExp)[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to []\n   */\n  ignoredPaths?: (string | RegExp)[];\n  /**\n   * Execution time warning threshold. If the middleware takes longer\n   * than `warnAfter` ms, a warning will be displayed in the console.\n   * Defaults to 32ms.\n   */\n  warnAfter?: number;\n\n  /**\n   * Opt out of checking state. When set to `true`, other state-related params will be ignored.\n   */\n  ignoreState?: boolean;\n\n  /**\n   * Opt out of checking actions. When set to `true`, other action-related params will be ignored.\n   */\n  ignoreActions?: boolean;\n\n  /**\n   * Opt out of caching the results. The cache uses a WeakSet and speeds up repeated checking processes.\n   * The cache is automatically disabled if no browser support for WeakSet is present.\n   */\n  disableCache?: boolean;\n}\n\n/**\n * Creates a middleware that, after every state change, checks if the new\n * state is serializable. If a non-serializable value is found within the\n * state, an error is printed to the console.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createSerializableStateInvariantMiddleware(options: SerializableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    const {\n      isSerializable = isPlain,\n      getEntries,\n      ignoredActions = [],\n      ignoredActionPaths = ['meta.arg', 'meta.baseQueryMeta'],\n      ignoredPaths = [],\n      warnAfter = 32,\n      ignoreState = false,\n      ignoreActions = false,\n      disableCache = false\n    } = options;\n    const cache: WeakSet<object> | undefined = !disableCache && WeakSet ? new WeakSet() : undefined;\n    return storeAPI => next => action => {\n      if (!isAction(action)) {\n        return next(action);\n      }\n      const result = next(action);\n      const measureUtils = getTimeMeasureUtils(warnAfter, 'SerializableStateInvariantMiddleware');\n      if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type as any) !== -1)) {\n        measureUtils.measureTime(() => {\n          const foundActionNonSerializableValue = findNonSerializableValue(action, '', isSerializable, getEntries, ignoredActionPaths, cache);\n          if (foundActionNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundActionNonSerializableValue;\n            console.error(`A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`, value, '\\nTake a look at the logic that dispatched this action: ', action, '\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)', '\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)');\n          }\n        });\n      }\n      if (!ignoreState) {\n        measureUtils.measureTime(() => {\n          const state = storeAPI.getState();\n          const foundStateNonSerializableValue = findNonSerializableValue(state, '', isSerializable, getEntries, ignoredPaths, cache);\n          if (foundStateNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundStateNonSerializableValue;\n            console.error(`A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`, value, `\nTake a look at the reducer(s) handling this action type: ${action.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n      }\n      return result;\n    };\n  }\n}","import type { StoreEnhancer } from 'redux';\nexport const SHOULD_AUTOBATCH = 'RTK_autoBatch';\nexport const prepareAutoBatched = <T,>() => (payload: T): {\n  payload: T;\n  meta: unknown;\n} => ({\n  payload,\n  meta: {\n    [SHOULD_AUTOBATCH]: true\n  }\n});\nconst createQueueWithTimer = (timeout: number) => {\n  return (notify: () => void) => {\n    setTimeout(notify, timeout);\n  };\n};\nexport type AutoBatchOptions = {\n  type: 'tick';\n} | {\n  type: 'timer';\n  timeout: number;\n} | {\n  type: 'raf';\n} | {\n  type: 'callback';\n  queueNotification: (notify: () => void) => void;\n};\n\n/**\n * A Redux store enhancer that watches for \"low-priority\" actions, and delays\n * notifying subscribers until either the queued callback executes or the\n * next \"standard-priority\" action is dispatched.\n *\n * This allows dispatching multiple \"low-priority\" actions in a row with only\n * a single subscriber notification to the UI after the sequence of actions\n * is finished, thus improving UI re-render performance.\n *\n * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.\n * This can be added to `action.meta` manually, or by using the\n * `prepareAutoBatched` helper.\n *\n * By default, it will queue a notification for the end of the event loop tick.\n * However, you can pass several other options to configure the behavior:\n * - `{type: 'tick'}`: queues using `queueMicrotask`\n * - `{type: 'timer', timeout: number}`: queues using `setTimeout`\n * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)\n * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback\n *\n *\n */\nexport const autoBatchEnhancer = (options: AutoBatchOptions = {\n  type: 'raf'\n}): StoreEnhancer => next => (...args) => {\n  const store = next(...args);\n  let notifying = true;\n  let shouldNotifyAtEndOfTick = false;\n  let notificationQueued = false;\n  const listeners = new Set<() => void>();\n  const queueCallback = options.type === 'tick' ? queueMicrotask : options.type === 'raf' ?\n  // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n  typeof window !== 'undefined' && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10) : options.type === 'callback' ? options.queueNotification : createQueueWithTimer(options.timeout);\n  const notifyListeners = () => {\n    // We're running at the end of the event loop tick.\n    // Run the real listener callbacks to actually update the UI.\n    notificationQueued = false;\n    if (shouldNotifyAtEndOfTick) {\n      shouldNotifyAtEndOfTick = false;\n      listeners.forEach(l => l());\n    }\n  };\n  return Object.assign({}, store, {\n    // Override the base `store.subscribe` method to keep original listeners\n    // from running if we're delaying notifications\n    subscribe(listener: () => void) {\n      // Each wrapped listener will only call the real listener if\n      // the `notifying` flag is currently active when it's called.\n      // This lets the base store work as normal, while the actual UI\n      // update becomes controlled by this enhancer.\n      const wrappedListener: typeof listener = () => notifying && listener();\n      const unsubscribe = store.subscribe(wrappedListener);\n      listeners.add(listener);\n      return () => {\n        unsubscribe();\n        listeners.delete(listener);\n      };\n    },\n    // Override the base `store.dispatch` method so that we can check actions\n    // for the `shouldAutoBatch` flag and determine if batching is active\n    dispatch(action: any) {\n      try {\n        // If the action does _not_ have the `shouldAutoBatch` flag,\n        // we resume/continue normal notify-after-each-dispatch behavior\n        notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n        // If a `notifyListeners` microtask was queued, you can't cancel it.\n        // Instead, we set a flag so that it's a no-op when it does run\n        shouldNotifyAtEndOfTick = !notifying;\n        if (shouldNotifyAtEndOfTick) {\n          // We've seen at least 1 action with `SHOULD_AUTOBATCH`. Try to queue\n          // a microtask to notify listeners at the end of the event loop tick.\n          // Make sure we only enqueue this _once_ per tick.\n          if (!notificationQueued) {\n            notificationQueued = true;\n            queueCallback(notifyListeners);\n          }\n        }\n        // Go ahead and process the action as usual, including reducers.\n        // If normal notification behavior is enabled, the store will notify\n        // all of its own listeners, and the wrapper callbacks above will\n        // see `notifying` is true and pass on to the real listener callbacks.\n        // If we're \"batching\" behavior, then the wrapped callbacks will\n        // bail out, causing the base store notification behavior to be no-ops.\n        return store.dispatch(action);\n      } finally {\n        // Assume we're back to normal behavior after each action\n        notifying = true;\n      }\n    }\n  });\n};","import type { StoreEnhancer } from 'redux';\nimport type { AutoBatchOptions } from './autoBatchEnhancer';\nimport { autoBatchEnhancer } from './autoBatchEnhancer';\nimport { Tuple } from './utils';\nimport type { Middlewares } from './configureStore';\nimport type { ExtractDispatchExtensions } from './tsHelpers';\ntype GetDefaultEnhancersOptions = {\n  autoBatch?: boolean | AutoBatchOptions;\n};\nexport type GetDefaultEnhancers<M extends Middlewares<any>> = (options?: GetDefaultEnhancersOptions) => Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>]>;\nexport const buildGetDefaultEnhancers = <M extends Middlewares<any>,>(middlewareEnhancer: StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>): GetDefaultEnhancers<M> => function getDefaultEnhancers(options) {\n  const {\n    autoBatch = true\n  } = options ?? {};\n  let enhancerArray = new Tuple<StoreEnhancer[]>(middlewareEnhancer);\n  if (autoBatch) {\n    enhancerArray.push(autoBatchEnhancer(typeof autoBatch === 'object' ? autoBatch : undefined));\n  }\n  return enhancerArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Draft } from 'immer';\nimport { produce as createNextState, isDraft, isDraftable } from 'immer';\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { ActionReducerMapBuilder } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { NoInfer, TypeGuard } from './tsHelpers';\nimport { freezeDraftable } from './utils';\n\n/**\n * Defines a mapping from action types to corresponding action object shapes.\n *\n * @deprecated This should not be used manually - it is only used for internal\n *             inference purposes and should not have any further value.\n *             It might be removed in the future.\n * @public\n */\nexport type Actions<T extends keyof any = string> = Record<T, Action>;\nexport type ActionMatcherDescription<S, A extends Action> = {\n  matcher: TypeGuard<A>;\n  reducer: CaseReducer<S, NoInfer<A>>;\n};\nexport type ReadonlyActionMatcherDescriptionCollection<S> = ReadonlyArray<ActionMatcherDescription<S, any>>;\nexport type ActionMatcherDescriptionCollection<S> = Array<ActionMatcherDescription<S, any>>;\n\n/**\n * A *case reducer* is a reducer function for a specific action type. Case\n * reducers can be composed to full reducers using `createReducer()`.\n *\n * Unlike a normal Redux reducer, a case reducer is never called with an\n * `undefined` state to determine the initial state. Instead, the initial\n * state is explicitly specified as an argument to `createReducer()`.\n *\n * In addition, a case reducer can choose to mutate the passed-in `state`\n * value directly instead of returning a new state. This does not actually\n * cause the store state to be mutated directly; instead, thanks to\n * [immer](https://github.com/mweststrate/immer), the mutations are\n * translated to copy operations that result in a new state.\n *\n * @public\n */\nexport type CaseReducer<S = any, A extends Action = UnknownAction> = (state: Draft<S>, action: A) => NoInfer<S> | void | Draft<NoInfer<S>>;\n\n/**\n * A mapping from action types to case reducers for `createReducer()`.\n *\n * @deprecated This should not be used manually - it is only used\n *             for internal inference purposes and using it manually\n *             would lead to type erasure.\n *             It might be removed in the future.\n * @public\n */\nexport type CaseReducers<S, AS extends Actions> = { [T in keyof AS]: AS[T] extends Action ? CaseReducer<S, AS[T]> : void };\nexport type NotFunction<T> = T extends Function ? never : T;\nfunction isStateFunction<S>(x: unknown): x is () => S {\n  return typeof x === 'function';\n}\nexport type ReducerWithInitialState<S extends NotFunction<any>> = Reducer<S> & {\n  getInitialState: () => S;\n};\n\n/**\n * A utility function that allows defining a reducer as a mapping from action\n * type to *case reducer* functions that handle these action types. The\n * reducer's initial state is passed as the first argument.\n *\n * @remarks\n * The body of every case reducer is implicitly wrapped with a call to\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\n * This means that rather than returning a new state object, you can also\n * mutate the passed-in state object directly; these mutations will then be\n * automatically and efficiently translated into copies, giving you both\n * convenience and immutability.\n *\n * @overloadSummary\n * This function accepts a callback that receives a `builder` object as its argument.\n * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be\n * called to define what actions this reducer will handle.\n *\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define\n *   case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n * @example\n```ts\nimport {\n  createAction,\n  createReducer,\n  UnknownAction,\n  PayloadAction,\n} from \"@reduxjs/toolkit\";\n\nconst increment = createAction<number>(\"increment\");\nconst decrement = createAction<number>(\"decrement\");\n\nfunction isActionWithNumberPayload(\n  action: UnknownAction\n): action is PayloadAction<number> {\n  return typeof action.payload === \"number\";\n}\n\nconst reducer = createReducer(\n  {\n    counter: 0,\n    sumOfNumberPayloads: 0,\n    unhandledActions: 0,\n  },\n  (builder) => {\n    builder\n      .addCase(increment, (state, action) => {\n        // action is inferred correctly here\n        state.counter += action.payload;\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {\n        state.counter -= action.payload;\n      })\n      // You can apply a \"matcher function\" to incoming actions\n      .addMatcher(isActionWithNumberPayload, (state, action) => {})\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {});\n  }\n);\n```\n * @public\n */\nexport function createReducer<S extends NotFunction<any>>(initialState: S | (() => S), mapOrBuilderCallback: (builder: ActionReducerMapBuilder<S>) => void): ReducerWithInitialState<S> {\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof mapOrBuilderCallback === 'object') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n    }\n  }\n  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n\n  // Ensure the initial state gets frozen either way (if draftable)\n  let getInitialState: () => S;\n  if (isStateFunction(initialState)) {\n    getInitialState = () => freezeDraftable(initialState());\n  } else {\n    const frozenInitialState = freezeDraftable(initialState);\n    getInitialState = () => frozenInitialState;\n  }\n  function reducer(state = getInitialState(), action: any): S {\n    let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n      matcher\n    }) => matcher(action)).map(({\n      reducer\n    }) => reducer)];\n    if (caseReducers.filter(cr => !!cr).length === 0) {\n      caseReducers = [finalDefaultCaseReducer];\n    }\n    return caseReducers.reduce((previousState, caseReducer): S => {\n      if (caseReducer) {\n        if (isDraft(previousState)) {\n          // If it's already a draft, we must already be inside a `createNextState` call,\n          // likely because this is being wrapped in `createReducer`, `createSlice`, or nested\n          // inside an existing draft. It's safe to just pass the draft to the mutator.\n          const draft = previousState as Draft<S>; // We can assume this is already a draft\n          const result = caseReducer(draft, action);\n          if (result === undefined) {\n            return previousState;\n          }\n          return result as S;\n        } else if (!isDraftable(previousState)) {\n          // If state is not draftable (ex: a primitive, such as 0), we want to directly\n          // return the caseReducer func and not wrap it with produce.\n          const result = caseReducer(previousState as any, action);\n          if (result === undefined) {\n            if (previousState === null) {\n              return previousState;\n            }\n            throw Error('A case reducer on a non-draftable value must not return undefined');\n          }\n          return result as S;\n        } else {\n          // @ts-ignore createNextState() produces an Immutable<Draft<S>> rather\n          // than an Immutable<S>, and TypeScript cannot find out how to reconcile\n          // these two types.\n          return createNextState(previousState, (draft: Draft<S>) => {\n            return caseReducer(draft, action);\n          });\n        }\n      }\n      return previousState;\n    }, state);\n  }\n  reducer.getInitialState = getInitialState;\n  return reducer as ReducerWithInitialState<S>;\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6 } from \"@reduxjs/toolkit\";\nimport type { Action } from 'redux';\nimport type { CaseReducer, CaseReducers, ActionMatcherDescriptionCollection } from './createReducer';\nimport type { TypeGuard } from './tsHelpers';\nexport type TypedActionCreator<Type extends string> = {\n  (...args: any[]): Action<Type>;\n  type: Type;\n};\n\n/**\n * A builder for an action <-> reducer map.\n *\n * @public\n */\nexport interface ActionReducerMapBuilder<State> {\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ActionReducerMapBuilder<State>;\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ActionReducerMapBuilder<State>;\n\n  /**\n   * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   * @example\n  ```ts\n  import {\n  createAction,\n  createReducer,\n  AsyncThunk,\n  UnknownAction,\n  } from \"@reduxjs/toolkit\";\n  type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;\n  type PendingAction = ReturnType<GenericAsyncThunk[\"pending\"]>;\n  type RejectedAction = ReturnType<GenericAsyncThunk[\"rejected\"]>;\n  type FulfilledAction = ReturnType<GenericAsyncThunk[\"fulfilled\"]>;\n  const initialState: Record<string, string> = {};\n  const resetAction = createAction(\"reset-tracked-loading-state\");\n  function isPendingAction(action: UnknownAction): action is PendingAction {\n  return typeof action.type === \"string\" && action.type.endsWith(\"/pending\");\n  }\n  const reducer = createReducer(initialState, (builder) => {\n  builder\n    .addCase(resetAction, () => initialState)\n    // matcher can be defined outside as a type predicate function\n    .addMatcher(isPendingAction, (state, action) => {\n      state[action.meta.requestId] = \"pending\";\n    })\n    .addMatcher(\n      // matcher can be defined inline as a type predicate function\n      (action): action is RejectedAction => action.type.endsWith(\"/rejected\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"rejected\";\n      }\n    )\n    // matcher can just return boolean and the matcher can receive a generic argument\n    .addMatcher<FulfilledAction>(\n      (action) => action.type.endsWith(\"/fulfilled\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"fulfilled\";\n      }\n    );\n  });\n  ```\n   */\n  addMatcher<A>(matcher: TypeGuard<A> | ((action: any) => boolean), reducer: CaseReducer<State, A extends Action ? A : A & Action>): Omit<ActionReducerMapBuilder<State>, 'addCase'>;\n\n  /**\n   * Adds a \"default case\" reducer that is executed if no case reducer and no matcher\n   * reducer was executed for this action.\n   * @param reducer - The fallback \"default case\" reducer function.\n   *\n   * @example\n  ```ts\n  import { createReducer } from '@reduxjs/toolkit'\n  const initialState = { otherActions: 0 }\n  const reducer = createReducer(initialState, builder => {\n  builder\n    // .addCase(...)\n    // .addMatcher(...)\n    .addDefaultCase((state, action) => {\n      state.otherActions++\n    })\n  })\n  ```\n   */\n  addDefaultCase(reducer: CaseReducer<State, Action>): {};\n}\nexport function executeReducerBuilderCallback<S>(builderCallback: (builder: ActionReducerMapBuilder<S>) => void): [CaseReducers<S, any>, ActionMatcherDescriptionCollection<S>, CaseReducer<S, Action> | undefined] {\n  const actionsMap: CaseReducers<S, any> = {};\n  const actionMatchers: ActionMatcherDescriptionCollection<S> = [];\n  let defaultCaseReducer: CaseReducer<S, Action> | undefined;\n  const builder = {\n    addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<S>) {\n      if (process.env.NODE_ENV !== 'production') {\n        /*\n         to keep the definition by the user in line with actual behavior,\n         we enforce `addCase` to always be called before calling `addMatcher`\n         as matching cases take precedence over matchers\n         */\n        if (actionMatchers.length > 0) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(26) : '`builder.addCase` should only be called before calling `builder.addMatcher`');\n        }\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(27) : '`builder.addCase` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n      if (!type) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(28) : '`builder.addCase` cannot be called with an empty action type');\n      }\n      if (type in actionsMap) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(29) : '`builder.addCase` cannot be called with two reducers for the same action type ' + `'${type}'`);\n      }\n      actionsMap[type] = reducer;\n      return builder;\n    },\n    addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<S, A extends Action ? A : A & Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(30) : '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      actionMatchers.push({\n        matcher,\n        reducer\n      });\n      return builder;\n    },\n    addDefaultCase(reducer: CaseReducer<S, Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(31) : '`builder.addDefaultCase` can only be called once');\n        }\n      }\n      defaultCaseReducer = reducer;\n      return builder;\n    }\n  };\n  builderCallback(builder);\n  return [actionsMap, actionMatchers, defaultCaseReducer];\n}","import type { ActionFromMatcher, Matcher, UnionToIntersection } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\nimport type { AsyncThunk, AsyncThunkFulfilledActionCreator, AsyncThunkPendingActionCreator, AsyncThunkRejectedActionCreator } from './createAsyncThunk';\n\n/** @public */\nexport type ActionMatchingAnyOf<Matchers extends Matcher<any>[]> = ActionFromMatcher<Matchers[number]>;\n\n/** @public */\nexport type ActionMatchingAllOf<Matchers extends Matcher<any>[]> = UnionToIntersection<ActionMatchingAnyOf<Matchers>>;\nconst matches = (matcher: Matcher<any>, action: any) => {\n  if (hasMatchFunction(matcher)) {\n    return matcher.match(action);\n  } else {\n    return matcher(action);\n  }\n};\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches any one of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAnyOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAnyOf<Matchers> => {\n    return matchers.some(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches all of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAllOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAllOf<Matchers> => {\n    return matchers.every(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * @param action A redux action\n * @param validStatus An array of valid meta.requestStatus values\n *\n * @internal\n */\nexport function hasExpectedRequestMetadata(action: any, validStatus: readonly string[]) {\n  if (!action || !action.meta) return false;\n  const hasValidRequestId = typeof action.meta.requestId === 'string';\n  const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n  return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a: [any] | AnyAsyncThunk[]): a is AnyAsyncThunk[] {\n  return typeof a[0] === 'function' && 'pending' in a[0] && 'fulfilled' in a[0] && 'rejected' in a[0];\n}\nexport type UnknownAsyncThunkPendingAction = ReturnType<AsyncThunkPendingActionCreator<unknown>>;\nexport type PendingActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is pending.\n *\n * @public\n */\nexport function isPending(): (action: any) => action is UnknownAsyncThunkPendingAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is pending.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is PendingActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a pending thunk action\n * @public\n */\nexport function isPending(action: any): action is UnknownAsyncThunkPendingAction;\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isPending()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.pending));\n}\nexport type UnknownAsyncThunkRejectedAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected.\n *\n * @public\n */\nexport function isRejected(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action\n * @public\n */\nexport function isRejected(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejected()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.rejected));\n}\nexport type UnknownAsyncThunkRejectedWithValueAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedWithValueActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']> & (T extends AsyncThunk<any, any, {\n  rejectValue: infer RejectedValue;\n}> ? {\n  payload: RejectedValue;\n} : unknown);\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected with value.\n *\n * @public\n */\nexport function isRejectedWithValue(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected with value.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedWithValueActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action with value\n * @public\n */\nexport function isRejectedWithValue(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  const hasFlag = (action: any): action is any => {\n    return action && action.meta && action.meta.rejectedWithValue;\n  };\n  if (asyncThunks.length === 0) {\n    return isAllOf(isRejected(...asyncThunks), hasFlag);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejectedWithValue()(asyncThunks[0]);\n  }\n  return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nexport type UnknownAsyncThunkFulfilledAction = ReturnType<AsyncThunkFulfilledActionCreator<unknown, unknown>>;\nexport type FulfilledActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['fulfilled']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is fulfilled.\n *\n * @public\n */\nexport function isFulfilled(): (action: any) => action is UnknownAsyncThunkFulfilledAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is fulfilled.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is FulfilledActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a fulfilled thunk action\n * @public\n */\nexport function isFulfilled(action: any): action is UnknownAsyncThunkFulfilledAction;\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['fulfilled']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isFulfilled()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.fulfilled));\n}\nexport type UnknownAsyncThunkAction = UnknownAsyncThunkPendingAction | UnknownAsyncThunkRejectedAction | UnknownAsyncThunkFulfilledAction;\nexport type AnyAsyncThunk = {\n  pending: {\n    match: (action: any) => action is any;\n  };\n  fulfilled: {\n    match: (action: any) => action is any;\n  };\n  rejected: {\n    match: (action: any) => action is any;\n  };\n};\nexport type ActionsFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']> | ActionFromMatcher<T['fulfilled']> | ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator.\n *\n * @public\n */\nexport function isAsyncThunkAction(): (action: any) => action is UnknownAsyncThunkAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is ActionsFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a thunk action\n * @public\n */\nexport function isAsyncThunkAction(action: any): action is UnknownAsyncThunkAction;\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending', 'fulfilled', 'rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isAsyncThunkAction()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.flatMap(asyncThunk => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}","// Borrowed from https://github.com/ai/nanoid/blob/3.0.2/non-secure/index.js\n// This alphabet uses `A-Za-z0-9_-` symbols. A genetic algorithm helped\n// optimize the gzip compression for this alphabet.\nlet urlAlphabet = 'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW';\n\n/**\r\n *\r\n * @public\r\n */\nexport let nanoid = (size = 21) => {\n  let id = '';\n  // A compact alternative for `for (var i = 0; i < step; i++)`.\n  let i = size;\n  while (i--) {\n    // `| 0` is more compact and faster than `Math.floor()`.\n    id += urlAlphabet[Math.random() * 64 | 0];\n  }\n  return id;\n};","import type { Dispatch, UnknownAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport type { ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport { isAnyOf } from './matchers';\nimport { nanoid } from './nanoid';\nimport type { FallbackIfUnknown, Id, IsAny, IsUnknown, SafePromise } from './tsHelpers';\nexport type BaseThunkAPI<S, E, D extends Dispatch = Dispatch, RejectedValue = unknown, RejectedMeta = unknown, FulfilledMeta = unknown> = {\n  dispatch: D;\n  getState: () => S;\n  extra: E;\n  requestId: string;\n  signal: AbortSignal;\n  abort: (reason?: string) => void;\n  rejectWithValue: IsUnknown<RejectedMeta, (value: RejectedValue) => RejectWithValue<RejectedValue, RejectedMeta>, (value: RejectedValue, meta: RejectedMeta) => RejectWithValue<RejectedValue, RejectedMeta>>;\n  fulfillWithValue: IsUnknown<FulfilledMeta, <FulfilledValue>(value: FulfilledValue) => FulfilledValue, <FulfilledValue>(value: FulfilledValue, meta: FulfilledMeta) => FulfillWithMeta<FulfilledValue, FulfilledMeta>>;\n};\n\n/**\n * @public\n */\nexport interface SerializedError {\n  name?: string;\n  message?: string;\n  stack?: string;\n  code?: string;\n}\nconst commonProperties: Array<keyof SerializedError> = ['name', 'message', 'stack', 'code'];\nclass RejectWithValue<Payload, RejectedMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'RejectWithValue';\n  constructor(public readonly payload: Payload, public readonly meta: RejectedMeta) {}\n}\nclass FulfillWithMeta<Payload, FulfilledMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'FulfillWithMeta';\n  constructor(public readonly payload: Payload, public readonly meta: FulfilledMeta) {}\n}\n\n/**\n * Serializes an error into a plain object.\n * Reworked from https://github.com/sindresorhus/serialize-error\n *\n * @public\n */\nexport const miniSerializeError = (value: any): SerializedError => {\n  if (typeof value === 'object' && value !== null) {\n    const simpleError: SerializedError = {};\n    for (const property of commonProperties) {\n      if (typeof value[property] === 'string') {\n        simpleError[property] = value[property];\n      }\n    }\n    return simpleError;\n  }\n  return {\n    message: String(value)\n  };\n};\nexport type AsyncThunkConfig = {\n  state?: unknown;\n  dispatch?: ThunkDispatch<unknown, unknown, UnknownAction>;\n  extra?: unknown;\n  rejectValue?: unknown;\n  serializedErrorType?: unknown;\n  pendingMeta?: unknown;\n  fulfilledMeta?: unknown;\n  rejectedMeta?: unknown;\n};\nexport type GetState<ThunkApiConfig> = ThunkApiConfig extends {\n  state: infer State;\n} ? State : unknown;\ntype GetExtra<ThunkApiConfig> = ThunkApiConfig extends {\n  extra: infer Extra;\n} ? Extra : unknown;\ntype GetDispatch<ThunkApiConfig> = ThunkApiConfig extends {\n  dispatch: infer Dispatch;\n} ? FallbackIfUnknown<Dispatch, ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>> : ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>;\nexport type GetThunkAPI<ThunkApiConfig> = BaseThunkAPI<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, GetDispatch<ThunkApiConfig>, GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>, GetFulfilledMeta<ThunkApiConfig>>;\ntype GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectValue: infer RejectValue;\n} ? RejectValue : unknown;\ntype GetPendingMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  pendingMeta: infer PendingMeta;\n} ? PendingMeta : unknown;\ntype GetFulfilledMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  fulfilledMeta: infer FulfilledMeta;\n} ? FulfilledMeta : unknown;\ntype GetRejectedMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectedMeta: infer RejectedMeta;\n} ? RejectedMeta : unknown;\ntype GetSerializedErrorType<ThunkApiConfig> = ThunkApiConfig extends {\n  serializedErrorType: infer GetSerializedErrorType;\n} ? GetSerializedErrorType : SerializedError;\ntype MaybePromise<T> = T | Promise<T> | (T extends any ? Promise<T> : never);\n\n/**\n * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig extends AsyncThunkConfig> = MaybePromise<IsUnknown<GetFulfilledMeta<ThunkApiConfig>, Returned, FulfillWithMeta<Returned, GetFulfilledMeta<ThunkApiConfig>>> | RejectWithValue<GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>>>;\n/**\n * A type describing the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreator<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>;\n\n/**\n * A ThunkAction created by `createAsyncThunk`.\n * Dispatching it returns a Promise for either a\n * fulfilled or rejected action.\n * Also, the returned value contains an `abort()` method\n * that allows the asyncAction to be cancelled from the outside.\n *\n * @public\n */\nexport type AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = (dispatch: NonNullable<GetDispatch<ThunkApiConfig>>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => SafePromise<ReturnType<AsyncThunkFulfilledActionCreator<Returned, ThunkArg>> | ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>>> & {\n  abort: (reason?: string) => void;\n  requestId: string;\n  arg: ThunkArg;\n  unwrap: () => Promise<Returned>;\n};\n\n/**\n * Config provided when calling the async thunk action creator.\n */\nexport interface AsyncThunkDispatchConfig {\n  /**\n   * An external `AbortSignal` that will be tracked by the internal `AbortSignal`.\n   */\n  signal?: AbortSignal;\n}\ntype AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = IsAny<ThunkArg,\n// any handling\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// unknown handling\nunknown extends ThunkArg ? (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument not specified or specified as void or undefined\n: [ThunkArg] extends [void] | [undefined] ? (arg?: undefined, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains void\n: [void] extends [ThunkArg] // make optional\n? (arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains undefined\n: [undefined] extends [ThunkArg] ? WithStrictNullChecks<\n// with strict nullChecks: make optional\n(arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// without strict null checks this will match everything, so don't make it optional\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>> // default case: normal argument\n: (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>>;\n\n/**\n * Options object for `createAsyncThunk`.\n *\n * @public\n */\nexport type AsyncThunkOptions<ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  /**\n   * A method to control whether the asyncThunk should be executed. Has access to the\n   * `arg`, `api.getState()` and `api.extra` arguments.\n   *\n   * @returns `false` if it should be skipped\n   */\n  condition?(arg: ThunkArg, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): MaybePromise<boolean | undefined>;\n  /**\n   * If `condition` returns `false`, the asyncThunk will be skipped.\n   * This option allows you to control whether a `rejected` action with `meta.condition == false`\n   * will be dispatched or not.\n   *\n   * @default `false`\n   */\n  dispatchConditionRejection?: boolean;\n  serializeError?: (x: unknown) => GetSerializedErrorType<ThunkApiConfig>;\n\n  /**\n   * A function to use when generating the `requestId` for the request sequence.\n   *\n   * @default `nanoid`\n   */\n  idGenerator?: (arg: ThunkArg) => string;\n} & IsUnknown<GetPendingMeta<ThunkApiConfig>, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   *\n   * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.\n   * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload\n   */\n  getPendingMeta?(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   */\n  getPendingMeta(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}>;\nexport type AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[string, ThunkArg, GetPendingMeta<ThunkApiConfig>?], undefined, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'pending';\n} & GetPendingMeta<ThunkApiConfig>>;\nexport type AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Error | null, string, ThunkArg, GetRejectValue<ThunkApiConfig>?, GetRejectedMeta<ThunkApiConfig>?], GetRejectValue<ThunkApiConfig> | undefined, string, GetSerializedErrorType<ThunkApiConfig>, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'rejected';\n  aborted: boolean;\n  condition: boolean;\n} & (({\n  rejectedWithValue: false;\n} & { [K in keyof GetRejectedMeta<ThunkApiConfig>]?: undefined }) | ({\n  rejectedWithValue: true;\n} & GetRejectedMeta<ThunkApiConfig>))>;\nexport type AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Returned, string, ThunkArg, GetFulfilledMeta<ThunkApiConfig>?], Returned, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'fulfilled';\n} & GetFulfilledMeta<ThunkApiConfig>>;\n\n/**\n * A type describing the return value of `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig> & {\n  pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig>;\n  rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>;\n  fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>;\n  // matchSettled?\n  settled: (action: any) => action is ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> | AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>>;\n  typePrefix: string;\n};\nexport type OverrideThunkApiConfigs<OldConfig, NewConfig> = Id<NewConfig & Omit<OldConfig, keyof NewConfig>>;\nexport type CreateAsyncThunkFunction<CurriedThunkApiConfig extends AsyncThunkConfig> = {\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  // separate signature without `AsyncThunkConfig` for better inference\n  <Returned, ThunkArg = void>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, CurriedThunkApiConfig>): AsyncThunk<Returned, ThunkArg, CurriedThunkApiConfig>;\n\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  <Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>, options?: AsyncThunkOptions<ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>): AsyncThunk<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\ntype CreateAsyncThunk<CurriedThunkApiConfig extends AsyncThunkConfig> = CreateAsyncThunkFunction<CurriedThunkApiConfig> & {\n  withTypes<ThunkApiConfig extends AsyncThunkConfig>(): CreateAsyncThunk<OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\nconst externalAbortMessage = 'External signal was aborted';\nexport const createAsyncThunk = /* @__PURE__ */(() => {\n  function createAsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> {\n    type RejectedValue = GetRejectValue<ThunkApiConfig>;\n    type PendingMeta = GetPendingMeta<ThunkApiConfig>;\n    type FulfilledMeta = GetFulfilledMeta<ThunkApiConfig>;\n    type RejectedMeta = GetRejectedMeta<ThunkApiConfig>;\n    const fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/fulfilled', (payload: Returned, requestId: string, arg: ThunkArg, meta?: FulfilledMeta) => ({\n      payload,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'fulfilled' as const\n      }\n    }));\n    const pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/pending', (requestId: string, arg: ThunkArg, meta?: PendingMeta) => ({\n      payload: undefined,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'pending' as const\n      }\n    }));\n    const rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/rejected', (error: Error | null, requestId: string, arg: ThunkArg, payload?: RejectedValue, meta?: RejectedMeta) => ({\n      payload,\n      error: (options && options.serializeError || miniSerializeError)(error || 'Rejected') as GetSerializedErrorType<ThunkApiConfig>,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        rejectedWithValue: !!payload,\n        requestStatus: 'rejected' as const,\n        aborted: error?.name === 'AbortError',\n        condition: error?.name === 'ConditionError'\n      }\n    }));\n    function actionCreator(arg: ThunkArg, {\n      signal\n    }: AsyncThunkDispatchConfig = {}): AsyncThunkAction<Returned, ThunkArg, Required<ThunkApiConfig>> {\n      return (dispatch, getState, extra) => {\n        const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n        const abortController = new AbortController();\n        let abortHandler: (() => void) | undefined;\n        let abortReason: string | undefined;\n        function abort(reason?: string) {\n          abortReason = reason;\n          abortController.abort();\n        }\n        if (signal) {\n          if (signal.aborted) {\n            abort(externalAbortMessage);\n          } else {\n            signal.addEventListener('abort', () => abort(externalAbortMessage), {\n              once: true\n            });\n          }\n        }\n        const promise = async function () {\n          let finalAction: ReturnType<typeof fulfilled | typeof rejected>;\n          try {\n            let conditionResult = options?.condition?.(arg, {\n              getState,\n              extra\n            });\n            if (isThenable(conditionResult)) {\n              conditionResult = await conditionResult;\n            }\n            if (conditionResult === false || abortController.signal.aborted) {\n              // eslint-disable-next-line no-throw-literal\n              throw {\n                name: 'ConditionError',\n                message: 'Aborted due to condition callback returning false.'\n              };\n            }\n            const abortedPromise = new Promise<never>((_, reject) => {\n              abortHandler = () => {\n                reject({\n                  name: 'AbortError',\n                  message: abortReason || 'Aborted'\n                });\n              };\n              abortController.signal.addEventListener('abort', abortHandler);\n            });\n            dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n              requestId,\n              arg\n            }, {\n              getState,\n              extra\n            })) as any);\n            finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n              dispatch,\n              getState,\n              extra,\n              requestId,\n              signal: abortController.signal,\n              abort,\n              rejectWithValue: ((value: RejectedValue, meta?: RejectedMeta) => {\n                return new RejectWithValue(value, meta);\n              }) as any,\n              fulfillWithValue: ((value: unknown, meta?: FulfilledMeta) => {\n                return new FulfillWithMeta(value, meta);\n              }) as any\n            })).then(result => {\n              if (result instanceof RejectWithValue) {\n                throw result;\n              }\n              if (result instanceof FulfillWithMeta) {\n                return fulfilled(result.payload, requestId, arg, result.meta);\n              }\n              return fulfilled(result as any, requestId, arg);\n            })]);\n          } catch (err) {\n            finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err as any, requestId, arg);\n          } finally {\n            if (abortHandler) {\n              abortController.signal.removeEventListener('abort', abortHandler);\n            }\n          }\n          // We dispatch the result action _after_ the catch, to avoid having any errors\n          // here get swallowed by the try/catch block,\n          // per https://twitter.com/dan_abramov/status/770914221638942720\n          // and https://github.com/reduxjs/redux-toolkit/blob/e85eb17b39a2118d859f7b7746e0f3fee523e089/docs/tutorials/advanced-tutorial.md#async-error-handling-logic-in-thunks\n\n          const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && (finalAction as any).meta.condition;\n          if (!skipDispatch) {\n            dispatch(finalAction as any);\n          }\n          return finalAction;\n        }();\n        return Object.assign(promise as SafePromise<any>, {\n          abort,\n          requestId,\n          arg,\n          unwrap() {\n            return promise.then<any>(unwrapResult);\n          }\n        });\n      };\n    }\n    return Object.assign(actionCreator as AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig>, {\n      pending,\n      rejected,\n      fulfilled,\n      settled: isAnyOf(rejected, fulfilled),\n      typePrefix\n    });\n  }\n  createAsyncThunk.withTypes = () => createAsyncThunk;\n  return createAsyncThunk as CreateAsyncThunk<AsyncThunkConfig>;\n})();\ninterface UnwrappableAction {\n  payload: any;\n  meta?: any;\n  error?: any;\n}\ntype UnwrappedActionPayload<T extends UnwrappableAction> = Exclude<T, {\n  error: any;\n}>['payload'];\n\n/**\n * @public\n */\nexport function unwrapResult<R extends UnwrappableAction>(action: R): UnwrappedActionPayload<R> {\n  if (action.meta && action.meta.rejectedWithValue) {\n    throw action.payload;\n  }\n  if (action.error) {\n    throw action.error;\n  }\n  return action.payload;\n}\ntype WithStrictNullChecks<True, False> = undefined extends boolean ? False : True;\nfunction isThenable(value: any): value is PromiseLike<any> {\n  return value !== null && typeof value === 'object' && typeof value.then === 'function';\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { Selector } from 'reselect';\nimport type { InjectConfig } from './combineSlices';\nimport type { ActionCreatorWithoutPayload, PayloadAction, PayloadActionCreator, PrepareAction, _ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport type { AsyncThunk, AsyncThunkConfig, AsyncThunkOptions, AsyncThunkPayloadCreator, OverrideThunkApiConfigs } from './createAsyncThunk';\nimport { createAsyncThunk as _createAsyncThunk } from './createAsyncThunk';\nimport type { ActionMatcherDescriptionCollection, CaseReducer, ReducerWithInitialState } from './createReducer';\nimport { createReducer } from './createReducer';\nimport type { ActionReducerMapBuilder, TypedActionCreator } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { Id, TypeGuard } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\nconst asyncThunkSymbol = /* @__PURE__ */Symbol.for('rtk-slice-createasyncthunk');\n// type is annotated because it's too long to infer\nexport const asyncThunkCreator: {\n  [asyncThunkSymbol]: typeof _createAsyncThunk;\n} = {\n  [asyncThunkSymbol]: _createAsyncThunk\n};\ntype InjectIntoConfig<NewReducerPath extends string> = InjectConfig & {\n  reducerPath?: NewReducerPath;\n};\n\n/**\n * The return value of `createSlice`\n *\n * @public\n */\nexport interface Slice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice name.\n   */\n  name: Name;\n\n  /**\n   *  The slice reducer path.\n   */\n  reducerPath: ReducerPath;\n\n  /**\n   * The slice's reducer.\n   */\n  reducer: Reducer<State>;\n\n  /**\n   * Action creators for the types of actions that are handled by the slice\n   * reducer.\n   */\n  actions: CaseReducerActions<CaseReducers, Name>;\n\n  /**\n   * The individual case reducer functions that were passed in the `reducers` parameter.\n   * This enables reuse and testing if they were defined inline when calling `createSlice`.\n   */\n  caseReducers: SliceDefinedCaseReducers<CaseReducers>;\n\n  /**\n   * Provides access to the initial state value given to the slice.\n   * If a lazy state initializer was provided, it will be called and a fresh value returned.\n   */\n  getInitialState: () => State;\n\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]: State }>>;\n\n  /**\n   * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.\n   */\n  injectInto<NewReducerPath extends string = ReducerPath>(this: this, injectable: {\n    inject: (slice: {\n      reducerPath: string;\n      reducer: Reducer;\n    }, config?: InjectConfig) => void;\n  }, config?: InjectIntoConfig<NewReducerPath>): InjectedSlice<State, CaseReducers, Name, NewReducerPath, Selectors>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Will throw an error if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]: State }): State;\n}\n\n/**\n * A slice after being called with `injectInto(reducer)`.\n *\n * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.\n */\ntype InjectedSlice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> = Omit<Slice<State, CaseReducers, Name, ReducerPath, Selectors>, 'getSelectors' | 'selectors'> & {\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State | undefined>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State | undefined): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]?: State | undefined }>>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Returns initial state if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]?: State | undefined }): State;\n};\n\n/**\n * Options for `createSlice()`.\n *\n * @public\n */\nexport interface CreateSliceOptions<State = any, CR extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice's name. Used to namespace the generated action types.\n   */\n  name: Name;\n\n  /**\n   * The slice's reducer path. Used when injecting into a combined slice reducer.\n   */\n  reducerPath?: ReducerPath;\n\n  /**\n   * The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n   */\n  initialState: State | (() => State);\n\n  /**\n   * A mapping from action types to action-type-specific *case reducer*\n   * functions. For every action type, a matching action creator will be\n   * generated using `createAction()`.\n   */\n  reducers: ValidateSliceCaseReducers<State, CR> | ((creators: ReducerCreators<State>) => CR);\n\n  /**\n   * A callback that receives a *builder* object to define\n   * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n   *\n   *\n   * @example\n  ```ts\n  import { createAction, createSlice, Action } from '@reduxjs/toolkit'\n  const incrementBy = createAction<number>('incrementBy')\n  const decrement = createAction('decrement')\n  interface RejectedAction extends Action {\n  error: Error\n  }\n  function isRejectedAction(action: Action): action is RejectedAction {\n  return action.type.endsWith('rejected')\n  }\n  createSlice({\n  name: 'counter',\n  initialState: 0,\n  reducers: {},\n  extraReducers: builder => {\n    builder\n      .addCase(incrementBy, (state, action) => {\n        // action is inferred correctly here if using TS\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {})\n      // You can match a range of action types\n      .addMatcher(\n        isRejectedAction,\n        // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard\n        (state, action) => {}\n      )\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {})\n    }\n  })\n  ```\n   */\n  extraReducers?: (builder: ActionReducerMapBuilder<State>) => void;\n\n  /**\n   * A map of selectors that receive the slice's state and any additional arguments, and return a result.\n   */\n  selectors?: Selectors;\n}\nexport enum ReducerType {\n  reducer = 'reducer',\n  reducerWithPrepare = 'reducerWithPrepare',\n  asyncThunk = 'asyncThunk',\n}\ntype ReducerDefinition<T extends ReducerType = ReducerType> = {\n  _reducerDefinitionType: T;\n};\nexport type CaseReducerDefinition<S = any, A extends Action = UnknownAction> = CaseReducer<S, A> & ReducerDefinition<ReducerType.reducer>;\n\n/**\n * A CaseReducer with a `prepare` method.\n *\n * @public\n */\nexport type CaseReducerWithPrepare<State, Action extends PayloadAction> = {\n  reducer: CaseReducer<State, Action>;\n  prepare: PrepareAction<Action['payload']>;\n};\nexport interface CaseReducerWithPrepareDefinition<State, Action extends PayloadAction> extends CaseReducerWithPrepare<State, Action>, ReducerDefinition<ReducerType.reducerWithPrepare> {}\ntype AsyncThunkSliceReducerConfig<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  pending?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['pending']>>;\n  rejected?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected']>>;\n  fulfilled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['fulfilled']>>;\n  settled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']>>;\n  options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>;\n};\ntype AsyncThunkSliceReducerDefinition<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig> & ReducerDefinition<ReducerType.asyncThunk> & {\n  payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>;\n};\n\n/**\n * Providing these as part of the config would cause circular types, so we disallow passing them\n */\ntype PreventCircular<ThunkApiConfig> = { [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch' ? never : ThunkApiConfig[K] };\ninterface AsyncThunkCreator<State, CurriedThunkApiConfig extends PreventCircular<AsyncThunkConfig> = PreventCircular<AsyncThunkConfig>> {\n  <Returned, ThunkArg = void>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, CurriedThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, CurriedThunkApiConfig>;\n  <Returned, ThunkArg, ThunkApiConfig extends PreventCircular<AsyncThunkConfig> = {}>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, ThunkApiConfig>;\n  withTypes<ThunkApiConfig extends PreventCircular<AsyncThunkConfig>>(): AsyncThunkCreator<State, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n}\nexport interface ReducerCreators<State> {\n  reducer(caseReducer: CaseReducer<State, PayloadAction>): CaseReducerDefinition<State, PayloadAction>;\n  reducer<Payload>(caseReducer: CaseReducer<State, PayloadAction<Payload>>): CaseReducerDefinition<State, PayloadAction<Payload>>;\n  asyncThunk: AsyncThunkCreator<State>;\n  preparedReducer<Prepare extends PrepareAction<any>>(prepare: Prepare, reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>): {\n    _reducerDefinitionType: ReducerType.reducerWithPrepare;\n    prepare: Prepare;\n    reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>;\n  };\n}\n\n/**\n * The type describing a slice's `reducers` option.\n *\n * @public\n */\nexport type SliceCaseReducers<State> = Record<string, ReducerDefinition> | Record<string, CaseReducer<State, PayloadAction<any>> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>>;\n\n/**\n * The type describing a slice's `selectors` option.\n */\nexport type SliceSelectors<State> = {\n  [K: string]: (sliceState: State, ...args: any[]) => any;\n};\ntype SliceActionType<SliceName extends string, ActionName extends keyof any> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string;\n\n/**\n * Derives the slice's `actions` property from the `reducers` options\n *\n * @public\n */\nexport type CaseReducerActions<CaseReducers extends SliceCaseReducers<any>, SliceName extends string> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends {\n  prepare: any;\n} ? ActionCreatorForCaseReducerWithPrepare<Definition, SliceActionType<SliceName, Type>> : Definition extends AsyncThunkSliceReducerDefinition<any, infer ThunkArg, infer Returned, infer ThunkApiConfig> ? AsyncThunk<Returned, ThunkArg, ThunkApiConfig> : Definition extends {\n  reducer: any;\n} ? ActionCreatorForCaseReducer<Definition['reducer'], SliceActionType<SliceName, Type>> : ActionCreatorForCaseReducer<Definition, SliceActionType<SliceName, Type>> : never };\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducerWithPrepare<CR extends {\n  prepare: any;\n}, Type extends string> = _ActionCreatorWithPreparedPayload<CR['prepare'], Type>;\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducer`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducer<CR, Type extends string> = CR extends ((state: any, action: infer Action) => any) ? Action extends {\n  payload: infer P;\n} ? PayloadActionCreator<P, Type> : ActionCreatorWithoutPayload<Type> : ActionCreatorWithoutPayload<Type>;\n\n/**\n * Extracts the CaseReducers out of a `reducers` object, even if they are\n * tested into a `CaseReducerWithPrepare`.\n *\n * @internal\n */\ntype SliceDefinedCaseReducers<CaseReducers extends SliceCaseReducers<any>> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends AsyncThunkSliceReducerDefinition<any, any, any> ? Id<Pick<Required<Definition>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>> : Definition extends {\n  reducer: infer Reducer;\n} ? Reducer : Definition : never };\ntype RemappedSelector<S extends Selector, NewState> = S extends Selector<any, infer R, infer P> ? Selector<NewState, R, P> & {\n  unwrapped: S;\n} : never;\n\n/**\n * Extracts the final selector type from the `selectors` object.\n *\n * Removes the `string` index signature from the default value.\n */\ntype SliceDefinedSelectors<State, Selectors extends SliceSelectors<State>, RootState> = { [K in keyof Selectors as string extends K ? never : K]: RemappedSelector<Selectors[K], RootState> };\n\n/**\n * Used on a SliceCaseReducers object.\n * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that\n * the `reducer` and the `prepare` function use the same type of `payload`.\n *\n * Might do additional such checks in the future.\n *\n * This type is only ever useful if you want to write your own wrapper around\n * `createSlice`. Please don't use it otherwise!\n *\n * @public\n */\nexport type ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & { [T in keyof ACR]: ACR[T] extends {\n  reducer(s: S, action?: infer A): any;\n} ? {\n  prepare(...a: never[]): Omit<A, 'type'>;\n} : {} };\nfunction getType(slice: string, actionKey: string): string {\n  return `${slice}/${actionKey}`;\n}\ninterface BuildCreateSliceConfig {\n  creators?: {\n    asyncThunk?: typeof asyncThunkCreator;\n  };\n}\nexport function buildCreateSlice({\n  creators\n}: BuildCreateSliceConfig = {}) {\n  const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n  return function createSlice<State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>): Slice<State, CaseReducers, Name, ReducerPath, Selectors> {\n    const {\n      name,\n      reducerPath = name as unknown as ReducerPath\n    } = options;\n    if (!name) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(11) : '`name` is a required option for createSlice');\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (options.initialState === undefined) {\n        console.error('You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`');\n      }\n    }\n    const reducers = (typeof options.reducers === 'function' ? options.reducers(buildReducerCreators<State>()) : options.reducers) || {};\n    const reducerNames = Object.keys(reducers);\n    const context: ReducerHandlingContext<State> = {\n      sliceCaseReducersByName: {},\n      sliceCaseReducersByType: {},\n      actionCreators: {},\n      sliceMatchers: []\n    };\n    const contextMethods: ReducerHandlingContextMethods<State> = {\n      addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<State>) {\n        const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n        if (!type) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(12) : '`context.addCase` cannot be called with an empty action type');\n        }\n        if (type in context.sliceCaseReducersByType) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(13) : '`context.addCase` cannot be called with two reducers for the same action type: ' + type);\n        }\n        context.sliceCaseReducersByType[type] = reducer;\n        return contextMethods;\n      },\n      addMatcher(matcher, reducer) {\n        context.sliceMatchers.push({\n          matcher,\n          reducer\n        });\n        return contextMethods;\n      },\n      exposeAction(name, actionCreator) {\n        context.actionCreators[name] = actionCreator;\n        return contextMethods;\n      },\n      exposeCaseReducer(name, reducer) {\n        context.sliceCaseReducersByName[name] = reducer;\n        return contextMethods;\n      }\n    };\n    reducerNames.forEach(reducerName => {\n      const reducerDefinition = reducers[reducerName];\n      const reducerDetails: ReducerDetails = {\n        reducerName,\n        type: getType(name, reducerName),\n        createNotation: typeof options.reducers === 'function'\n      };\n      if (isAsyncThunkSliceReducerDefinition<State>(reducerDefinition)) {\n        handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n      } else {\n        handleNormalReducerDefinition<State>(reducerDetails, reducerDefinition as any, contextMethods);\n      }\n    });\n    function buildReducer() {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof options.extraReducers === 'object') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n        }\n      }\n      const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = undefined] = typeof options.extraReducers === 'function' ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n      const finalCaseReducers = {\n        ...extraReducers,\n        ...context.sliceCaseReducersByType\n      };\n      return createReducer(options.initialState, builder => {\n        for (let key in finalCaseReducers) {\n          builder.addCase(key, finalCaseReducers[key] as CaseReducer<any>);\n        }\n        for (let sM of context.sliceMatchers) {\n          builder.addMatcher(sM.matcher, sM.reducer);\n        }\n        for (let m of actionMatchers) {\n          builder.addMatcher(m.matcher, m.reducer);\n        }\n        if (defaultCaseReducer) {\n          builder.addDefaultCase(defaultCaseReducer);\n        }\n      });\n    }\n    const selectSelf = (state: State) => state;\n    const injectedSelectorCache = new Map<boolean, WeakMap<(rootState: any) => State | undefined, Record<string, (rootState: any) => any>>>();\n    const injectedStateCache = new WeakMap<(rootState: any) => State, State>();\n    let _reducer: ReducerWithInitialState<State>;\n    function reducer(state: State | undefined, action: UnknownAction) {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer(state, action);\n    }\n    function getInitialState() {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer.getInitialState();\n    }\n    function makeSelectorProps<CurrentReducerPath extends string = ReducerPath>(reducerPath: CurrentReducerPath, injected = false): Pick<Slice<State, CaseReducers, Name, CurrentReducerPath, Selectors>, 'getSelectors' | 'selectors' | 'selectSlice' | 'reducerPath'> {\n      function selectSlice(state: { [K in CurrentReducerPath]: State }) {\n        let sliceState = state[reducerPath];\n        if (typeof sliceState === 'undefined') {\n          if (injected) {\n            sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);\n          } else if (process.env.NODE_ENV !== 'production') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(15) : 'selectSlice returned undefined for an uninjected slice reducer');\n          }\n        }\n        return sliceState;\n      }\n      function getSelectors(selectState: (rootState: any) => State = selectSelf) {\n        const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => new WeakMap());\n        return getOrInsertComputed(selectorCache, selectState, () => {\n          const map: Record<string, Selector<any, any>> = {};\n          for (const [name, selector] of Object.entries(options.selectors ?? {})) {\n            map[name] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);\n          }\n          return map;\n        }) as any;\n      }\n      return {\n        reducerPath,\n        getSelectors,\n        get selectors() {\n          return getSelectors(selectSlice);\n        },\n        selectSlice\n      };\n    }\n    const slice: Slice<State, CaseReducers, Name, ReducerPath, Selectors> = {\n      name,\n      reducer,\n      actions: context.actionCreators as any,\n      caseReducers: context.sliceCaseReducersByName as any,\n      getInitialState,\n      ...makeSelectorProps(reducerPath),\n      injectInto(injectable, {\n        reducerPath: pathOpt,\n        ...config\n      } = {}) {\n        const newReducerPath = pathOpt ?? reducerPath;\n        injectable.inject({\n          reducerPath: newReducerPath,\n          reducer\n        }, config);\n        return {\n          ...slice,\n          ...makeSelectorProps(newReducerPath, true)\n        } as any;\n      }\n    };\n    return slice;\n  };\n}\nfunction wrapSelector<State, NewState, S extends Selector<State>>(selector: S, selectState: Selector<NewState, State>, getInitialState: () => State, injected?: boolean) {\n  function wrapper(rootState: NewState, ...args: any[]) {\n    let sliceState = selectState(rootState);\n    if (typeof sliceState === 'undefined') {\n      if (injected) {\n        sliceState = getInitialState();\n      } else if (process.env.NODE_ENV !== 'production') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(16) : 'selectState returned undefined for an uninjected slice reducer');\n      }\n    }\n    return selector(sliceState, ...args);\n  }\n  wrapper.unwrapped = selector;\n  return wrapper as RemappedSelector<S, NewState>;\n}\n\n/**\n * A function that accepts an initial state, an object full of reducer\n * functions, and a \"slice name\", and automatically generates\n * action creators and action types that correspond to the\n * reducers and state.\n *\n * @public\n */\nexport const createSlice = /* @__PURE__ */buildCreateSlice();\ninterface ReducerHandlingContext<State> {\n  sliceCaseReducersByName: Record<string, CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>>;\n  sliceCaseReducersByType: Record<string, CaseReducer<State, any>>;\n  sliceMatchers: ActionMatcherDescriptionCollection<State>;\n  actionCreators: Record<string, Function>;\n}\ninterface ReducerHandlingContextMethods<State> {\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ReducerHandlingContextMethods<State>;\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ReducerHandlingContextMethods<State>;\n\n  /**\n   * Allows you to match incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   */\n  addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<State, A extends Action ? A : A & Action>): ReducerHandlingContextMethods<State>;\n  /**\n   * Add an action to be exposed under the final `slice.actions` key.\n   * @param name The key to be exposed as.\n   * @param actionCreator The action to expose.\n   * @example\n   * context.exposeAction(\"addPost\", createAction<Post>(\"addPost\"));\n   *\n   * export const { addPost } = slice.actions\n   *\n   * dispatch(addPost(post))\n   */\n  exposeAction(name: string, actionCreator: Function): ReducerHandlingContextMethods<State>;\n  /**\n   * Add a case reducer to be exposed under the final `slice.caseReducers` key.\n   * @param name The key to be exposed as.\n   * @param reducer The reducer to expose.\n   * @example\n   * context.exposeCaseReducer(\"addPost\", (state, action: PayloadAction<Post>) => {\n   *   state.push(action.payload)\n   * })\n   *\n   * slice.caseReducers.addPost([], addPost(post))\n   */\n  exposeCaseReducer(name: string, reducer: CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>): ReducerHandlingContextMethods<State>;\n}\ninterface ReducerDetails {\n  /** The key the reducer was defined under */\n  reducerName: string;\n  /** The predefined action type, i.e. `${slice.name}/${reducerName}` */\n  type: string;\n  /** Whether create. notation was used when defining reducers */\n  createNotation: boolean;\n}\nfunction buildReducerCreators<State>(): ReducerCreators<State> {\n  function asyncThunk(payloadCreator: AsyncThunkPayloadCreator<any, any>, config: AsyncThunkSliceReducerConfig<State, any>): AsyncThunkSliceReducerDefinition<State, any> {\n    return {\n      _reducerDefinitionType: ReducerType.asyncThunk,\n      payloadCreator,\n      ...config\n    };\n  }\n  asyncThunk.withTypes = () => asyncThunk;\n  return {\n    reducer(caseReducer: CaseReducer<State, any>) {\n      return Object.assign({\n        // hack so the wrapping function has the same name as the original\n        // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n        [caseReducer.name](...args: Parameters<typeof caseReducer>) {\n          return caseReducer(...args);\n        }\n      }[caseReducer.name], {\n        _reducerDefinitionType: ReducerType.reducer\n      } as const);\n    },\n    preparedReducer(prepare, reducer) {\n      return {\n        _reducerDefinitionType: ReducerType.reducerWithPrepare,\n        prepare,\n        reducer\n      };\n    },\n    asyncThunk: asyncThunk as any\n  };\n}\nfunction handleNormalReducerDefinition<State>({\n  type,\n  reducerName,\n  createNotation\n}: ReducerDetails, maybeReducerWithPrepare: CaseReducer<State, {\n  payload: any;\n  type: string;\n}> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>, context: ReducerHandlingContextMethods<State>) {\n  let caseReducer: CaseReducer<State, any>;\n  let prepareCallback: PrepareAction<any> | undefined;\n  if ('reducer' in maybeReducerWithPrepare) {\n    if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(17) : 'Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.');\n    }\n    caseReducer = maybeReducerWithPrepare.reducer;\n    prepareCallback = maybeReducerWithPrepare.prepare;\n  } else {\n    caseReducer = maybeReducerWithPrepare;\n  }\n  context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition<State>(reducerDefinition: any): reducerDefinition is AsyncThunkSliceReducerDefinition<State, any, any, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.asyncThunk;\n}\nfunction isCaseReducerWithPrepareDefinition<State>(reducerDefinition: any): reducerDefinition is CaseReducerWithPrepareDefinition<State, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.reducerWithPrepare;\n}\nfunction handleThunkCaseReducerDefinition<State>({\n  type,\n  reducerName\n}: ReducerDetails, reducerDefinition: AsyncThunkSliceReducerDefinition<State, any, any, any>, context: ReducerHandlingContextMethods<State>, cAT: typeof _createAsyncThunk | undefined) {\n  if (!cAT) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(18) : 'Cannot use `create.asyncThunk` in the built-in `createSlice`. ' + 'Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.');\n  }\n  const {\n    payloadCreator,\n    fulfilled,\n    pending,\n    rejected,\n    settled,\n    options\n  } = reducerDefinition;\n  const thunk = cAT(type, payloadCreator, options as any);\n  context.exposeAction(reducerName, thunk);\n  if (fulfilled) {\n    context.addCase(thunk.fulfilled, fulfilled);\n  }\n  if (pending) {\n    context.addCase(thunk.pending, pending);\n  }\n  if (rejected) {\n    context.addCase(thunk.rejected, rejected);\n  }\n  if (settled) {\n    context.addMatcher(thunk.settled, settled);\n  }\n  context.exposeCaseReducer(reducerName, {\n    fulfilled: fulfilled || noop,\n    pending: pending || noop,\n    rejected: rejected || noop,\n    settled: settled || noop\n  });\n}\nfunction noop() {}","import type { EntityId, EntityState, EntityStateAdapter, EntityStateFactory } from './models';\nexport function getInitialEntityState<T, Id extends EntityId>(): EntityState<T, Id> {\n  return {\n    ids: [],\n    entities: {} as Record<Id, T>\n  };\n}\nexport function createInitialStateFactory<T, Id extends EntityId>(stateAdapter: EntityStateAdapter<T, Id>): EntityStateFactory<T, Id> {\n  function getInitialState(state?: undefined, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id>;\n  function getInitialState<S extends object>(additionalState: S, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id> & S;\n  function getInitialState(additionalState: any = {}, entities?: readonly T[] | Record<Id, T>): any {\n    const state = Object.assign(getInitialEntityState(), additionalState);\n    return entities ? stateAdapter.setAll(state, entities) : state;\n  }\n  return {\n    getInitialState\n  };\n}","import type { CreateSelectorFunction, Selector } from 'reselect';\nimport { createDraftSafeSelector } from '../createDraftSafeSelector';\nimport type { EntityId, EntitySelectors, EntityState } from './models';\ntype AnyFunction = (...args: any) => any;\ntype AnyCreateSelectorFunction = CreateSelectorFunction<<F extends AnyFunction>(f: F) => F, <F extends AnyFunction>(f: F) => F>;\nexport type GetSelectorsOptions = {\n  createSelector?: AnyCreateSelectorFunction;\n};\nexport function createSelectorsFactory<T, Id extends EntityId>() {\n  function getSelectors(selectState?: undefined, options?: GetSelectorsOptions): EntitySelectors<T, EntityState<T, Id>, Id>;\n  function getSelectors<V>(selectState: (state: V) => EntityState<T, Id>, options?: GetSelectorsOptions): EntitySelectors<T, V, Id>;\n  function getSelectors<V>(selectState?: (state: V) => EntityState<T, Id>, options: GetSelectorsOptions = {}): EntitySelectors<T, any, Id> {\n    const {\n      createSelector = createDraftSafeSelector as AnyCreateSelectorFunction\n    } = options;\n    const selectIds = (state: EntityState<T, Id>) => state.ids;\n    const selectEntities = (state: EntityState<T, Id>) => state.entities;\n    const selectAll = createSelector(selectIds, selectEntities, (ids, entities): T[] => ids.map(id => entities[id]!));\n    const selectId = (_: unknown, id: Id) => id;\n    const selectById = (entities: Record<Id, T>, id: Id) => entities[id];\n    const selectTotal = createSelector(selectIds, ids => ids.length);\n    if (!selectState) {\n      return {\n        selectIds,\n        selectEntities,\n        selectAll,\n        selectTotal,\n        selectById: createSelector(selectEntities, selectId, selectById)\n      };\n    }\n    const selectGlobalizedEntities = createSelector(selectState as Selector<V, EntityState<T, Id>>, selectEntities);\n    return {\n      selectIds: createSelector(selectState, selectIds),\n      selectEntities: selectGlobalizedEntities,\n      selectAll: createSelector(selectState, selectAll),\n      selectTotal: createSelector(selectState, selectTotal),\n      selectById: createSelector(selectGlobalizedEntities, selectId, selectById)\n    };\n  }\n  return {\n    getSelectors\n  };\n}","import { produce as createNextState, isDraft } from 'immer';\nimport type { Draft } from 'immer';\nimport type { EntityId, DraftableEntityState, PreventAny } from './models';\nimport type { PayloadAction } from '../createAction';\nimport { isFSA } from '../createAction';\nexport const isDraftTyped = isDraft as <T>(value: T | Draft<T>) => value is Draft<T>;\nexport function createSingleArgumentStateOperator<T, Id extends EntityId>(mutator: (state: DraftableEntityState<T, Id>) => void) {\n  const operator = createStateOperator((_: undefined, state: DraftableEntityState<T, Id>) => mutator(state));\n  return function operation<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>): S {\n    return operator(state as S, undefined);\n  };\n}\nexport function createStateOperator<T, Id extends EntityId, R>(mutator: (arg: R, state: DraftableEntityState<T, Id>) => void) {\n  return function operation<S extends DraftableEntityState<T, Id>>(state: S, arg: R | PayloadAction<R>): S {\n    function isPayloadActionArgument(arg: R | PayloadAction<R>): arg is PayloadAction<R> {\n      return isFSA(arg);\n    }\n    const runMutator = (draft: DraftableEntityState<T, Id>) => {\n      if (isPayloadActionArgument(arg)) {\n        mutator(arg.payload, draft);\n      } else {\n        mutator(arg, draft);\n      }\n    };\n    if (isDraftTyped<DraftableEntityState<T, Id>>(state)) {\n      // we must already be inside a `createNextState` call, likely because\n      // this is being wrapped in `createReducer` or `createSlice`.\n      // It's safe to just pass the draft to the mutator.\n      runMutator(state);\n\n      // since it's a draft, we'll just return it\n      return state;\n    }\n    return createNextState(state, runMutator);\n  };\n}","import type { Draft } from 'immer';\nimport { current, isDraft } from 'immer';\nimport type { DraftableEntityState, EntityId, IdSelector, Update } from './models';\nexport function selectIdValue<T, Id extends EntityId>(entity: T, selectId: IdSelector<T, Id>) {\n  const key = selectId(entity);\n  if (process.env.NODE_ENV !== 'production' && key === undefined) {\n    console.warn('The entity passed to the `selectId` implementation returned undefined.', 'You should probably provide your own `selectId` implementation.', 'The entity that was passed:', entity, 'The `selectId` implementation:', selectId.toString());\n  }\n  return key;\n}\nexport function ensureEntitiesArray<T, Id extends EntityId>(entities: readonly T[] | Record<Id, T>): readonly T[] {\n  if (!Array.isArray(entities)) {\n    entities = Object.values(entities);\n  }\n  return entities;\n}\nexport function getCurrent<T>(value: T | Draft<T>): T {\n  return (isDraft(value) ? current(value) : value) as T;\n}\nexport function splitAddedUpdatedEntities<T, Id extends EntityId>(newEntities: readonly T[] | Record<Id, T>, selectId: IdSelector<T, Id>, state: DraftableEntityState<T, Id>): [T[], Update<T, Id>[], Id[]] {\n  newEntities = ensureEntitiesArray(newEntities);\n  const existingIdsArray = getCurrent(state.ids);\n  const existingIds = new Set<Id>(existingIdsArray);\n  const added: T[] = [];\n  const addedIds = new Set<Id>([]);\n  const updated: Update<T, Id>[] = [];\n  for (const entity of newEntities) {\n    const id = selectIdValue(entity, selectId);\n    if (existingIds.has(id) || addedIds.has(id)) {\n      updated.push({\n        id,\n        changes: entity\n      });\n    } else {\n      addedIds.add(id);\n      added.push(entity);\n    }\n  }\n  return [added, updated, existingIdsArray];\n}","import type { Draft } from 'immer';\nimport type { EntityStateAdapter, IdSelector, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator, createSingleArgumentStateOperator } from './state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities } from './utils';\nexport function createUnsortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  function addOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (key in state.entities) {\n      return;\n    }\n    state.ids.push(key as Id & Draft<Id>);\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      addOneMutably(entity, state);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (!(key in state.entities)) {\n      state.ids.push(key as Id & Draft<Id>);\n    }\n    ;\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      setOneMutably(entity, state);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.ids = [];\n    state.entities = {} as Record<Id, T>;\n    addManyMutably(newEntities, state);\n  }\n  function removeOneMutably(key: Id, state: R): void {\n    return removeManyMutably([key], state);\n  }\n  function removeManyMutably(keys: readonly Id[], state: R): void {\n    let didMutate = false;\n    keys.forEach(key => {\n      if (key in state.entities) {\n        delete (state.entities as Record<Id, T>)[key];\n        didMutate = true;\n      }\n    });\n    if (didMutate) {\n      state.ids = (state.ids as Id[]).filter(id => id in state.entities) as Id[] | Draft<Id[]>;\n    }\n  }\n  function removeAllMutably(state: R): void {\n    Object.assign(state, {\n      ids: [],\n      entities: {}\n    });\n  }\n  function takeNewKey(keys: {\n    [id: string]: Id;\n  }, update: Update<T, Id>, state: R): boolean {\n    const original: T | undefined = (state.entities as Record<Id, T>)[update.id];\n    if (original === undefined) {\n      return false;\n    }\n    const updated: T = Object.assign({}, original, update.changes);\n    const newKey = selectIdValue(updated, selectId);\n    const hasNewKey = newKey !== update.id;\n    if (hasNewKey) {\n      keys[update.id] = newKey;\n      delete (state.entities as Record<Id, T>)[update.id];\n    }\n    ;\n    (state.entities as Record<Id, T>)[newKey] = updated;\n    return hasNewKey;\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    const newKeys: {\n      [id: string]: Id;\n    } = {};\n    const updatesPerEntity: {\n      [id: string]: Update<T, Id>;\n    } = {};\n    updates.forEach(update => {\n      // Only apply updates to entities that currently exist\n      if (update.id in state.entities) {\n        // If there are multiple updates to one entity, merge them together\n        updatesPerEntity[update.id] = {\n          id: update.id,\n          // Spreads ignore falsy values, so this works even if there isn't\n          // an existing update already at this key\n          changes: {\n            ...updatesPerEntity[update.id]?.changes,\n            ...update.changes\n          }\n        };\n      }\n    });\n    updates = Object.values(updatesPerEntity);\n    const didMutateEntities = updates.length > 0;\n    if (didMutateEntities) {\n      const didMutateIds = updates.filter(update => takeNewKey(newKeys, update, state)).length > 0;\n      if (didMutateIds) {\n        state.ids = Object.values(state.entities).map(e => selectIdValue(e as T, selectId));\n      }\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    addManyMutably(added, state);\n    updateManyMutably(updated, state);\n  }\n  return {\n    removeAll: createSingleArgumentStateOperator(removeAllMutably),\n    addOne: createStateOperator(addOneMutably),\n    addMany: createStateOperator(addManyMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    upsertMany: createStateOperator(upsertManyMutably),\n    removeOne: createStateOperator(removeOneMutably),\n    removeMany: createStateOperator(removeManyMutably)\n  };\n}","import type { IdSelector, Comparer, EntityStateAdapter, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator } from './state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities, getCurrent } from './utils';\n\n// Borrowed from Replay\nexport function findInsertIndex<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): number {\n  let lowIndex = 0;\n  let highIndex = sortedItems.length;\n  while (lowIndex < highIndex) {\n    let middleIndex = lowIndex + highIndex >>> 1;\n    const currentItem = sortedItems[middleIndex];\n    const res = comparisonFunction(item, currentItem);\n    if (res >= 0) {\n      lowIndex = middleIndex + 1;\n    } else {\n      highIndex = middleIndex;\n    }\n  }\n  return lowIndex;\n}\nexport function insert<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): T[] {\n  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n  sortedItems.splice(insertAtIndex, 0, item);\n  return sortedItems;\n}\nexport function createSortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>, comparer: Comparer<T>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  const {\n    removeOne,\n    removeMany,\n    removeAll\n  } = createUnsortedStateAdapter(selectId);\n  function addOneMutably(entity: T, state: R): void {\n    return addManyMutably([entity], state);\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R, existingIds?: Id[]): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    const existingKeys = new Set<Id>(existingIds ?? getCurrent(state.ids));\n    const models = newEntities.filter(model => !existingKeys.has(selectIdValue(model, selectId)));\n    if (models.length !== 0) {\n      mergeFunction(state, models);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    return setManyMutably([entity], state);\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    if (newEntities.length !== 0) {\n      for (const item of newEntities) {\n        delete (state.entities as Record<Id, T>)[selectId(item)];\n      }\n      mergeFunction(state, newEntities);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.entities = {} as Record<Id, T>;\n    state.ids = [];\n    addManyMutably(newEntities, state, []);\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    let appliedUpdates = false;\n    let replacedIds = false;\n    for (let update of updates) {\n      const entity: T | undefined = (state.entities as Record<Id, T>)[update.id];\n      if (!entity) {\n        continue;\n      }\n      appliedUpdates = true;\n      Object.assign(entity, update.changes);\n      const newId = selectId(entity);\n      if (update.id !== newId) {\n        // We do support the case where updates can change an item's ID.\n        // This makes things trickier - go ahead and swap the IDs in state now.\n        replacedIds = true;\n        delete (state.entities as Record<Id, T>)[update.id];\n        const oldIndex = (state.ids as Id[]).indexOf(update.id);\n        state.ids[oldIndex] = newId;\n        (state.entities as Record<Id, T>)[newId] = entity;\n      }\n    }\n    if (appliedUpdates) {\n      mergeFunction(state, [], appliedUpdates, replacedIds);\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    if (added.length) {\n      addManyMutably(added, state, existingIdsArray);\n    }\n    if (updated.length) {\n      updateManyMutably(updated, state);\n    }\n  }\n  function areArraysEqual(a: readonly unknown[], b: readonly unknown[]) {\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] === b[i]) {\n        continue;\n      }\n      return false;\n    }\n    return true;\n  }\n  type MergeFunction = (state: R, addedItems: readonly T[], appliedUpdates?: boolean, replacedIds?: boolean) => void;\n  const mergeFunction: MergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n    const currentEntities = getCurrent(state.entities);\n    const currentIds = getCurrent(state.ids);\n    const stateEntities = state.entities as Record<Id, T>;\n    let ids: Iterable<Id> = currentIds;\n    if (replacedIds) {\n      ids = new Set(currentIds);\n    }\n    let sortedEntities: T[] = [];\n    for (const id of ids) {\n      const entity = currentEntities[id];\n      if (entity) {\n        sortedEntities.push(entity);\n      }\n    }\n    const wasPreviouslyEmpty = sortedEntities.length === 0;\n\n    // Insert/overwrite all new/updated\n    for (const item of addedItems) {\n      stateEntities[selectId(item)] = item;\n      if (!wasPreviouslyEmpty) {\n        // Binary search insertion generally requires fewer comparisons\n        insert(sortedEntities, item, comparer);\n      }\n    }\n    if (wasPreviouslyEmpty) {\n      // All we have is the incoming values, sort them\n      sortedEntities = addedItems.slice().sort(comparer);\n    } else if (appliedUpdates) {\n      // We should have a _mostly_-sorted array already\n      sortedEntities.sort(comparer);\n    }\n    const newSortedIds = sortedEntities.map(selectId);\n    if (!areArraysEqual(currentIds, newSortedIds)) {\n      state.ids = newSortedIds;\n    }\n  };\n  return {\n    removeOne,\n    removeMany,\n    removeAll,\n    addOne: createStateOperator(addOneMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    addMany: createStateOperator(addManyMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertMany: createStateOperator(upsertManyMutably)\n  };\n}","import type { EntityAdapter, EntityId, EntityAdapterOptions } from './models';\nimport { createInitialStateFactory } from './entity_state';\nimport { createSelectorsFactory } from './state_selectors';\nimport { createSortedStateAdapter } from './sorted_state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport type { WithRequiredProp } from '../tsHelpers';\nexport function createEntityAdapter<T, Id extends EntityId>(options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>): EntityAdapter<T, Id>;\nexport function createEntityAdapter<T extends {\n  id: EntityId;\n}>(options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>): EntityAdapter<T, T['id']>;\n\n/**\n *\n * @param options\n *\n * @public\n */\nexport function createEntityAdapter<T>(options: EntityAdapterOptions<T, EntityId> = {}): EntityAdapter<T, EntityId> {\n  const {\n    selectId,\n    sortComparer\n  }: Required<EntityAdapterOptions<T, EntityId>> = {\n    sortComparer: false,\n    selectId: (instance: any) => instance.id,\n    ...options\n  };\n  const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n  const stateFactory = createInitialStateFactory(stateAdapter);\n  const selectorsFactory = createSelectorsFactory<T, EntityId>();\n  return {\n    selectId,\n    sortComparer,\n    ...stateFactory,\n    ...selectorsFactory,\n    ...stateAdapter\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Action, Dispatch, MiddlewareAPI, UnknownAction } from 'redux';\nimport { isAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport { createAction } from '../createAction';\nimport { nanoid } from '../nanoid';\nimport { TaskAbortError, listenerCancelled, listenerCompleted, taskCancelled, taskCompleted } from './exceptions';\nimport { createDelay, createPause, raceWithSignal, runTask, validateActive } from './task';\nimport type { AbortSignalWithReason, AddListenerOverloads, AnyListenerPredicate, CreateListenerMiddlewareOptions, FallbackAddListenerOptions, ForkOptions, ForkedTask, ForkedTaskExecutor, ListenerEntry, ListenerErrorHandler, ListenerErrorInfo, ListenerMiddleware, ListenerMiddlewareInstance, TakePattern, TaskResult, TypedAddListener, TypedCreateListenerEntry, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\nimport { abortControllerWithReason, addAbortSignalListener, assertFunction, catchRejection, noop } from './utils';\nexport { TaskAbortError } from './exceptions';\nexport type { AsyncTaskExecutor, CreateListenerMiddlewareOptions, ForkedTask, ForkedTaskAPI, ForkedTaskExecutor, ListenerEffect, ListenerEffectAPI, ListenerErrorHandler, ListenerMiddleware, ListenerMiddlewareInstance, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult, TypedAddListener, TypedRemoveListener, TypedStartListening, TypedStopListening, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\n\n//Overly-aggressive byte-shaving\nconst {\n  assign\n} = Object;\n/**\n * @internal\n */\nconst INTERNAL_NIL_TOKEN = {} as const;\nconst alm = 'listenerMiddleware' as const;\nconst createFork = (parentAbortSignal: AbortSignalWithReason<unknown>, parentBlockingPromises: Promise<any>[]) => {\n  const linkControllers = (controller: AbortController) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n  return <T,>(taskExecutor: ForkedTaskExecutor<T>, opts?: ForkOptions): ForkedTask<T> => {\n    assertFunction(taskExecutor, 'taskExecutor');\n    const childAbortController = new AbortController();\n    linkControllers(childAbortController);\n    const result = runTask<T>(async (): Promise<T> => {\n      validateActive(parentAbortSignal);\n      validateActive(childAbortController.signal);\n      const result = (await taskExecutor({\n        pause: createPause(childAbortController.signal),\n        delay: createDelay(childAbortController.signal),\n        signal: childAbortController.signal\n      })) as T;\n      validateActive(childAbortController.signal);\n      return result;\n    }, () => abortControllerWithReason(childAbortController, taskCompleted));\n    if (opts?.autoJoin) {\n      parentBlockingPromises.push(result.catch(noop));\n    }\n    return {\n      result: createPause<TaskResult<T>>(parentAbortSignal)(result),\n      cancel() {\n        abortControllerWithReason(childAbortController, taskCancelled);\n      }\n    };\n  };\n};\nconst createTakePattern = <S,>(startListening: AddListenerOverloads<UnsubscribeListener, S, Dispatch>, signal: AbortSignal): TakePattern<S> => {\n  /**\n   * A function that takes a ListenerPredicate and an optional timeout,\n   * and resolves when either the predicate returns `true` based on an action\n   * state combination or when the timeout expires.\n   * If the parent listener is canceled while waiting, this will throw a\n   * TaskAbortError.\n   */\n  const take = async <P extends AnyListenerPredicate<S>,>(predicate: P, timeout: number | undefined) => {\n    validateActive(signal);\n\n    // Placeholder unsubscribe function until the listener is added\n    let unsubscribe: UnsubscribeListener = () => {};\n    const tuplePromise = new Promise<[Action, S, S]>((resolve, reject) => {\n      // Inside the Promise, we synchronously add the listener.\n      let stopListening = startListening({\n        predicate: predicate as any,\n        effect: (action, listenerApi): void => {\n          // One-shot listener that cleans up as soon as the predicate passes\n          listenerApi.unsubscribe();\n          // Resolve the promise with the same arguments the predicate saw\n          resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n        }\n      });\n      unsubscribe = () => {\n        stopListening();\n        reject();\n      };\n    });\n    const promises: (Promise<null> | Promise<[Action, S, S]>)[] = [tuplePromise];\n    if (timeout != null) {\n      promises.push(new Promise<null>(resolve => setTimeout(resolve, timeout, null)));\n    }\n    try {\n      const output = await raceWithSignal(signal, Promise.race(promises));\n      validateActive(signal);\n      return output;\n    } finally {\n      // Always clean up the listener\n      unsubscribe();\n    }\n  };\n  return ((predicate: AnyListenerPredicate<S>, timeout: number | undefined) => catchRejection(take(predicate, timeout))) as TakePattern<S>;\n};\nconst getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {\n  let {\n    type,\n    actionCreator,\n    matcher,\n    predicate,\n    effect\n  } = options;\n  if (type) {\n    predicate = createAction(type).match;\n  } else if (actionCreator) {\n    type = actionCreator!.type;\n    predicate = actionCreator.match;\n  } else if (matcher) {\n    predicate = matcher;\n  } else if (predicate) {\n    // pass\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(21) : 'Creating or removing a listener requires one of the known fields for matching an action');\n  }\n  assertFunction(effect, 'options.listener');\n  return {\n    predicate,\n    type,\n    effect\n  };\n};\n\n/** Accepts the possible options for creating a listener, and returns a formatted listener entry */\nexport const createListenerEntry: TypedCreateListenerEntry<unknown> = /* @__PURE__ */assign((options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    predicate,\n    effect\n  } = getListenerEntryPropsFrom(options);\n  const entry: ListenerEntry<unknown> = {\n    id: nanoid(),\n    effect,\n    type,\n    predicate,\n    pending: new Set<AbortController>(),\n    unsubscribe: () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(22) : 'Unsubscribe not initialized');\n    }\n  };\n  return entry;\n}, {\n  withTypes: () => createListenerEntry\n}) as unknown as TypedCreateListenerEntry<unknown>;\nconst findListenerEntry = (listenerMap: Map<string, ListenerEntry>, options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    effect,\n    predicate\n  } = getListenerEntryPropsFrom(options);\n  return Array.from(listenerMap.values()).find(entry => {\n    const matchPredicateOrType = typeof type === 'string' ? entry.type === type : entry.predicate === predicate;\n    return matchPredicateOrType && entry.effect === effect;\n  });\n};\nconst cancelActiveListeners = (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>) => {\n  entry.pending.forEach(controller => {\n    abortControllerWithReason(controller, listenerCancelled);\n  });\n};\nconst createClearListenerMiddleware = (listenerMap: Map<string, ListenerEntry>) => {\n  return () => {\n    listenerMap.forEach(cancelActiveListeners);\n    listenerMap.clear();\n  };\n};\n\n/**\n * Safely reports errors to the `errorHandler` provided.\n * Errors that occur inside `errorHandler` are notified in a new task.\n * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)\n * @param errorHandler\n * @param errorToNotify\n */\nconst safelyNotifyError = (errorHandler: ListenerErrorHandler, errorToNotify: unknown, errorInfo: ListenerErrorInfo): void => {\n  try {\n    errorHandler(errorToNotify, errorInfo);\n  } catch (errorHandlerError) {\n    // We cannot let an error raised here block the listener queue.\n    // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...\n    setTimeout(() => {\n      throw errorHandlerError;\n    }, 0);\n  }\n};\n\n/**\n * @public\n */\nexport const addListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/add`), {\n  withTypes: () => addListener\n}) as unknown as TypedAddListener<unknown>;\n\n/**\n * @public\n */\nexport const clearAllListeners = /* @__PURE__ */createAction(`${alm}/removeAll`);\n\n/**\n * @public\n */\nexport const removeListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/remove`), {\n  withTypes: () => removeListener\n}) as unknown as TypedRemoveListener<unknown>;\nconst defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {\n  console.error(`${alm}/error`, ...args);\n};\n\n/**\n * @public\n */\nexport const createListenerMiddleware = <StateType = unknown, DispatchType extends Dispatch<Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown>(middlewareOptions: CreateListenerMiddlewareOptions<ExtraArgument> = {}) => {\n  const listenerMap = new Map<string, ListenerEntry>();\n  const {\n    extra,\n    onError = defaultErrorHandler\n  } = middlewareOptions;\n  assertFunction(onError, 'onError');\n  const insertEntry = (entry: ListenerEntry) => {\n    entry.unsubscribe = () => listenerMap.delete(entry.id);\n    listenerMap.set(entry.id, entry);\n    return (cancelOptions?: UnsubscribeListenerOptions) => {\n      entry.unsubscribe();\n      if (cancelOptions?.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    };\n  };\n  const startListening = ((options: FallbackAddListenerOptions) => {\n    const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options as any);\n    return insertEntry(entry);\n  }) as AddListenerOverloads<any>;\n  assign(startListening, {\n    withTypes: () => startListening\n  });\n  const stopListening = (options: FallbackAddListenerOptions & UnsubscribeListenerOptions): boolean => {\n    const entry = findListenerEntry(listenerMap, options);\n    if (entry) {\n      entry.unsubscribe();\n      if (options.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    }\n    return !!entry;\n  };\n  assign(stopListening, {\n    withTypes: () => stopListening\n  });\n  const notifyListener = async (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>, action: unknown, api: MiddlewareAPI, getOriginalState: () => StateType) => {\n    const internalTaskController = new AbortController();\n    const take = createTakePattern(startListening as AddListenerOverloads<any>, internalTaskController.signal);\n    const autoJoinPromises: Promise<any>[] = [];\n    try {\n      entry.pending.add(internalTaskController);\n      await Promise.resolve(entry.effect(action,\n      // Use assign() rather than ... to avoid extra helper functions added to bundle\n      assign({}, api, {\n        getOriginalState,\n        condition: (predicate: AnyListenerPredicate<any>, timeout?: number) => take(predicate, timeout).then(Boolean),\n        take,\n        delay: createDelay(internalTaskController.signal),\n        pause: createPause<any>(internalTaskController.signal),\n        extra,\n        signal: internalTaskController.signal,\n        fork: createFork(internalTaskController.signal, autoJoinPromises),\n        unsubscribe: entry.unsubscribe,\n        subscribe: () => {\n          listenerMap.set(entry.id, entry);\n        },\n        cancelActiveListeners: () => {\n          entry.pending.forEach((controller, _, set) => {\n            if (controller !== internalTaskController) {\n              abortControllerWithReason(controller, listenerCancelled);\n              set.delete(controller);\n            }\n          });\n        },\n        cancel: () => {\n          abortControllerWithReason(internalTaskController, listenerCancelled);\n          entry.pending.delete(internalTaskController);\n        },\n        throwIfCancelled: () => {\n          validateActive(internalTaskController.signal);\n        }\n      })));\n    } catch (listenerError) {\n      if (!(listenerError instanceof TaskAbortError)) {\n        safelyNotifyError(onError, listenerError, {\n          raisedBy: 'effect'\n        });\n      }\n    } finally {\n      await Promise.all(autoJoinPromises);\n      abortControllerWithReason(internalTaskController, listenerCompleted); // Notify that the task has completed\n      entry.pending.delete(internalTaskController);\n    }\n  };\n  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n  const middleware: ListenerMiddleware<StateType, DispatchType, ExtraArgument> = api => next => action => {\n    if (!isAction(action)) {\n      // we only want to notify listeners for action objects\n      return next(action);\n    }\n    if (addListener.match(action)) {\n      return startListening(action.payload as any);\n    }\n    if (clearAllListeners.match(action)) {\n      clearListenerMiddleware();\n      return;\n    }\n    if (removeListener.match(action)) {\n      return stopListening(action.payload);\n    }\n\n    // Need to get this state _before_ the reducer processes the action\n    let originalState: StateType | typeof INTERNAL_NIL_TOKEN = api.getState();\n\n    // `getOriginalState` can only be called synchronously.\n    // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820\n    const getOriginalState = (): StateType => {\n      if (originalState === INTERNAL_NIL_TOKEN) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(23) : `${alm}: getOriginalState can only be called synchronously`);\n      }\n      return originalState as StateType;\n    };\n    let result: unknown;\n    try {\n      // Actually forward the action to the reducer before we handle listeners\n      result = next(action);\n      if (listenerMap.size > 0) {\n        const currentState = api.getState();\n        // Work around ESBuild+TS transpilation issue\n        const listenerEntries = Array.from(listenerMap.values());\n        for (const entry of listenerEntries) {\n          let runListener = false;\n          try {\n            runListener = entry.predicate(action, currentState, originalState);\n          } catch (predicateError) {\n            runListener = false;\n            safelyNotifyError(onError, predicateError, {\n              raisedBy: 'predicate'\n            });\n          }\n          if (!runListener) {\n            continue;\n          }\n          notifyListener(entry, action, api, getOriginalState);\n        }\n      }\n    } finally {\n      // Remove `originalState` store from this scope.\n      originalState = INTERNAL_NIL_TOKEN;\n    }\n    return result;\n  };\n  return {\n    middleware,\n    startListening,\n    stopListening,\n    clearListeners: clearListenerMiddleware\n  } as ListenerMiddlewareInstance<StateType, DispatchType, ExtraArgument>;\n};","import type { SerializedError } from '@reduxjs/toolkit';\nconst task = 'task';\nconst listener = 'listener';\nconst completed = 'completed';\nconst cancelled = 'cancelled';\n\n/* TaskAbortError error codes  */\nexport const taskCancelled = `task-${cancelled}` as const;\nexport const taskCompleted = `task-${completed}` as const;\nexport const listenerCancelled = `${listener}-${cancelled}` as const;\nexport const listenerCompleted = `${listener}-${completed}` as const;\nexport class TaskAbortError implements SerializedError {\n  name = 'TaskAbortError';\n  message: string;\n  constructor(public code: string | undefined) {\n    this.message = `${task} ${cancelled} (reason: ${code})`;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AbortSignalWithReason } from './types';\nexport const assertFunction: (func: unknown, expected: string) => asserts func is (...args: unknown[]) => unknown = (func: unknown, expected: string) => {\n  if (typeof func !== 'function') {\n    throw new TypeError(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(32) : `${expected} is not a function`);\n  }\n};\nexport const noop = () => {};\nexport const catchRejection = <T,>(promise: Promise<T>, onError = noop): Promise<T> => {\n  promise.catch(onError);\n  return promise;\n};\nexport const addAbortSignalListener = (abortSignal: AbortSignal, callback: (evt: Event) => void) => {\n  abortSignal.addEventListener('abort', callback, {\n    once: true\n  });\n  return () => abortSignal.removeEventListener('abort', callback);\n};\n\n/**\n * Calls `abortController.abort(reason)` and patches `signal.reason`.\n * if it is not supported.\n *\n * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.\n * @param abortController\n * @param reason\n * @returns\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\n */\nexport const abortControllerWithReason = <T,>(abortController: AbortController, reason: T): void => {\n  type Consumer<T> = (val: T) => void;\n  const signal = abortController.signal as AbortSignalWithReason<T>;\n  if (signal.aborted) {\n    return;\n  }\n\n  // Patch `reason` if necessary.\n  // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.\n  // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'\n  // event are are notified immediately.\n  if (!('reason' in signal)) {\n    Object.defineProperty(signal, 'reason', {\n      enumerable: true,\n      value: reason,\n      configurable: true,\n      writable: true\n    });\n  }\n  ;\n  (abortController.abort as Consumer<typeof reason>)(reason);\n};","import { TaskAbortError } from './exceptions';\nimport type { AbortSignalWithReason, TaskResult } from './types';\nimport { addAbortSignalListener, catchRejection, noop } from './utils';\n\n/**\n * Synchronously raises {@link TaskAbortError} if the task tied to the input `signal` has been cancelled.\n * @param signal\n * @param reason\n * @see {TaskAbortError}\n */\nexport const validateActive = (signal: AbortSignal): void => {\n  if (signal.aborted) {\n    const {\n      reason\n    } = signal as AbortSignalWithReason<string>;\n    throw new TaskAbortError(reason);\n  }\n};\n\n/**\n * Generates a race between the promise(s) and the AbortSignal\n * This avoids `Promise.race()`-related memory leaks:\n * https://github.com/nodejs/node/issues/17469#issuecomment-349794909\n */\nexport function raceWithSignal<T>(signal: AbortSignalWithReason<string>, promise: Promise<T>): Promise<T> {\n  let cleanup = noop;\n  return new Promise<T>((resolve, reject) => {\n    const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n    if (signal.aborted) {\n      notifyRejection();\n      return;\n    }\n    cleanup = addAbortSignalListener(signal, notifyRejection);\n    promise.finally(() => cleanup()).then(resolve, reject);\n  }).finally(() => {\n    // after this point, replace `cleanup` with a noop, so there is no reference to `signal` any more\n    cleanup = noop;\n  });\n}\n\n/**\n * Runs a task and returns promise that resolves to {@link TaskResult}.\n * Second argument is an optional `cleanUp` function that always runs after task.\n *\n * **Note:** `runTask` runs the executor in the next microtask.\n * @returns\n */\nexport const runTask = async <T,>(task: () => Promise<T>, cleanUp?: () => void): Promise<TaskResult<T>> => {\n  try {\n    await Promise.resolve();\n    const value = await task();\n    return {\n      status: 'ok',\n      value\n    };\n  } catch (error: any) {\n    return {\n      status: error instanceof TaskAbortError ? 'cancelled' : 'rejected',\n      error\n    };\n  } finally {\n    cleanUp?.();\n  }\n};\n\n/**\n * Given an input `AbortSignal` and a promise returns another promise that resolves\n * as soon the input promise is provided or rejects as soon as\n * `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createPause = <T,>(signal: AbortSignal) => {\n  return (promise: Promise<T>): Promise<T> => {\n    return catchRejection(raceWithSignal(signal, promise).then(output => {\n      validateActive(signal);\n      return output;\n    }));\n  };\n};\n\n/**\n * Given an input `AbortSignal` and `timeoutMs` returns a promise that resolves\n * after `timeoutMs` or rejects as soon as `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createDelay = (signal: AbortSignal) => {\n  const pause = createPause<void>(signal);\n  return (timeoutMs: number): Promise<void> => {\n    return pause(new Promise<void>(resolve => setTimeout(resolve, timeoutMs)));\n  };\n};","import type { Dispatch, Middleware, UnknownAction } from 'redux';\nimport { compose } from 'redux';\nimport { createAction } from '../createAction';\nimport { isAllOf } from '../matchers';\nimport { nanoid } from '../nanoid';\nimport { getOrInsertComputed } from '../utils';\nimport type { AddMiddleware, DynamicMiddleware, DynamicMiddlewareInstance, MiddlewareEntry, WithMiddleware } from './types';\nexport type { DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './types';\nconst createMiddlewareEntry = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(middleware: Middleware<any, State, DispatchType>): MiddlewareEntry<State, DispatchType> => ({\n  middleware,\n  applied: new Map()\n});\nconst matchInstance = (instanceId: string) => (action: any): action is {\n  meta: {\n    instanceId: string;\n  };\n} => action?.meta?.instanceId === instanceId;\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): DynamicMiddlewareInstance<State, DispatchType> => {\n  const instanceId = nanoid();\n  const middlewareMap = new Map<Middleware<any, State, DispatchType>, MiddlewareEntry<State, DispatchType>>();\n  const withMiddleware = Object.assign(createAction('dynamicMiddleware/add', (...middlewares: Middleware<any, State, DispatchType>[]) => ({\n    payload: middlewares,\n    meta: {\n      instanceId\n    }\n  })), {\n    withTypes: () => withMiddleware\n  }) as WithMiddleware<State, DispatchType>;\n  const addMiddleware = Object.assign(function addMiddleware(...middlewares: Middleware<any, State, DispatchType>[]) {\n    middlewares.forEach(middleware => {\n      getOrInsertComputed(middlewareMap, middleware, createMiddlewareEntry);\n    });\n  }, {\n    withTypes: () => addMiddleware\n  }) as AddMiddleware<State, DispatchType>;\n  const getFinalMiddleware: Middleware<{}, State, DispatchType> = api => {\n    const appliedMiddleware = Array.from(middlewareMap.values()).map(entry => getOrInsertComputed(entry.applied, api, entry.middleware));\n    return compose(...appliedMiddleware);\n  };\n  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n  const middleware: DynamicMiddleware<State, DispatchType> = api => next => action => {\n    if (isWithMiddleware(action)) {\n      addMiddleware(...action.payload);\n      return api.dispatch;\n    }\n    return getFinalMiddleware(api)(next)(action);\n  };\n  return {\n    middleware,\n    addMiddleware,\n    withMiddleware,\n    instanceId\n  };\n};","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Reducer, StateFromReducersMapObject, UnknownAction } from 'redux';\nimport { combineReducers } from 'redux';\nimport { nanoid } from './nanoid';\nimport type { Id, NonUndefined, Tail, UnionToIntersection, WithOptionalProp } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\ntype SliceLike<ReducerPath extends string, State> = {\n  reducerPath: ReducerPath;\n  reducer: Reducer<State>;\n};\ntype AnySliceLike = SliceLike<string, any>;\ntype SliceLikeReducerPath<A extends AnySliceLike> = A extends SliceLike<infer ReducerPath, any> ? ReducerPath : never;\ntype SliceLikeState<A extends AnySliceLike> = A extends SliceLike<any, infer State> ? State : never;\nexport type WithSlice<A extends AnySliceLike> = { [Path in SliceLikeReducerPath<A>]: SliceLikeState<A> };\ntype ReducerMap = Record<string, Reducer>;\ntype ExistingSliceLike<DeclaredState> = { [ReducerPath in keyof DeclaredState]: SliceLike<ReducerPath & string, NonUndefined<DeclaredState[ReducerPath]>> }[keyof DeclaredState];\nexport type InjectConfig = {\n  /**\n   * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.\n   */\n  overrideExisting?: boolean;\n};\n\n/**\n * A reducer that allows for slices/reducers to be injected after initialisation.\n */\nexport interface CombinedSliceReducer<InitialState, DeclaredState = InitialState> extends Reducer<DeclaredState, UnknownAction, Partial<DeclaredState>> {\n  /**\n   * Provide a type for slices that will be injected lazily.\n   *\n   * One way to do this would be with interface merging:\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {}\n   *\n   * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * // elsewhere\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBoolean = rootReducer.inject(booleanSlice);\n   *\n   * // elsewhere again\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices {\n   *     customName: CustomState\n   *   }\n   * }\n   *\n   * const withCustom = rootReducer.inject({ reducerPath: \"customName\", reducer: customSlice.reducer })\n   * ```\n   */\n  withLazyLoadedSlices<Lazy = {}>(): CombinedSliceReducer<InitialState, Id<DeclaredState & Partial<Lazy>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<Sl extends Id<ExistingSliceLike<DeclaredState>>>(slice: Sl, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<Sl>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<ReducerPath extends string, State>(slice: SliceLike<ReducerPath, State & (ReducerPath extends keyof DeclaredState ? never : State)>, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<SliceLike<ReducerPath, State>>>>;\n\n  /**\n   * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n   *\n   * ```ts\n   * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n   * //                                                                ^? boolean | undefined\n   *\n   * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n   *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n   *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n   *   return state.boolean;\n   *   //           ^? boolean\n   * })\n   * ```\n   *\n   * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n   *\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {};\n   *\n   * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * export const rootReducer = combineSlices({ inner: innerReducer });\n   *\n   * export type RootState = ReturnType<typeof rootReducer>;\n   *\n   * // elsewhere\n   *\n   * declare module \"./reducer.ts\" {\n   *  export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBool = innerReducer.inject(booleanSlice);\n   *\n   * const selectBoolean = withBool.selector(\n   *   (state) => state.boolean,\n   *   (rootState: RootState) => state.inner\n   * );\n   * //    now expects to be passed RootState instead of innerReducer state\n   *\n   * ```\n   *\n   * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n   *\n   * ```ts\n   * const injectedReducer = rootReducer.inject(booleanSlice);\n   * const selectBoolean = injectedReducer.selector((state) => {\n   *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n   *   return state.boolean\n   * })\n   * ```\n   */\n  selector: {\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown>(selectorFn: Selector): (state: WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n     *\n     * ```ts\n     *\n     * interface LazyLoadedSlices {};\n     *\n     * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n     *\n     * const rootReducer = combineSlices({ inner: innerReducer });\n     *\n     * type RootState = ReturnType<typeof rootReducer>;\n     *\n     * // elsewhere\n     *\n     * declare module \"./reducer.ts\" {\n     *  interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n     * }\n     *\n     * const withBool = innerReducer.inject(booleanSlice);\n     *\n     * const selectBoolean = withBool.selector(\n     *   (state) => state.boolean,\n     *   (rootState: RootState) => state.inner\n     * );\n     * //    now expects to be passed RootState instead of innerReducer state\n     *\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown, RootState>(selectorFn: Selector, selectState: (rootState: RootState, ...args: Tail<Parameters<Selector>>) => WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>): (state: RootState, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n    /**\n     * Returns the unproxied state. Useful for debugging.\n     * @param state state Proxy, that ensures injected reducers have value\n     * @returns original, unproxied state\n     * @throws if value passed is not a state Proxy\n     */\n    original: (state: DeclaredState) => InitialState & Partial<DeclaredState>;\n  };\n}\ntype InitialState<Slices extends Array<AnySliceLike | ReducerMap>> = UnionToIntersection<Slices[number] extends infer Slice ? Slice extends AnySliceLike ? WithSlice<Slice> : StateFromReducersMapObject<Slice> : never>;\nconst isSliceLike = (maybeSliceLike: AnySliceLike | ReducerMap): maybeSliceLike is AnySliceLike => 'reducerPath' in maybeSliceLike && typeof maybeSliceLike.reducerPath === 'string';\nconst getReducers = (slices: Array<AnySliceLike | ReducerMap>) => slices.flatMap(sliceOrMap => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer] as const] : Object.entries(sliceOrMap));\nconst ORIGINAL_STATE = Symbol.for('rtk-state-proxy-original');\nconst isStateProxy = (value: any) => !!value && !!value[ORIGINAL_STATE];\nconst stateProxyMap = new WeakMap<object, object>();\nconst createStateProxy = <State extends object,>(state: State, reducerMap: Partial<Record<PropertyKey, Reducer>>, initialStateCache: Record<PropertyKey, unknown>) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n  get: (target, prop, receiver) => {\n    if (prop === ORIGINAL_STATE) return target;\n    const result = Reflect.get(target, prop, receiver);\n    if (typeof result === 'undefined') {\n      const cached = initialStateCache[prop];\n      if (typeof cached !== 'undefined') return cached;\n      const reducer = reducerMap[prop];\n      if (reducer) {\n        // ensure action type is random, to prevent reducer treating it differently\n        const reducerResult = reducer(undefined, {\n          type: nanoid()\n        });\n        if (typeof reducerResult === 'undefined') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n        }\n        initialStateCache[prop] = reducerResult;\n        return reducerResult;\n      }\n    }\n    return result;\n  }\n})) as State;\nconst original = (state: any) => {\n  if (!isStateProxy(state)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(25) : 'original must be used on state Proxy');\n  }\n  return state[ORIGINAL_STATE];\n};\nconst emptyObject = {};\nconst noopReducer: Reducer<Record<string, any>> = (state = emptyObject) => state;\nexport function combineSlices<Slices extends Array<AnySliceLike | ReducerMap>>(...slices: Slices): CombinedSliceReducer<Id<InitialState<Slices>>> {\n  const reducerMap = Object.fromEntries<Reducer>(getReducers(slices));\n  const getReducer = () => Object.keys(reducerMap).length ? combineReducers(reducerMap) : noopReducer;\n  let reducer = getReducer();\n  function combinedReducer(state: Record<string, unknown>, action: UnknownAction) {\n    return reducer(state, action);\n  }\n  combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n  const initialStateCache: Record<PropertyKey, unknown> = {};\n  const inject = (slice: AnySliceLike, config: InjectConfig = {}): typeof combinedReducer => {\n    const {\n      reducerPath,\n      reducer: reducerToInject\n    } = slice;\n    const currentReducer = reducerMap[reducerPath];\n    if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n      }\n      return combinedReducer;\n    }\n    if (config.overrideExisting && currentReducer !== reducerToInject) {\n      delete initialStateCache[reducerPath];\n    }\n    reducerMap[reducerPath] = reducerToInject;\n    reducer = getReducer();\n    return combinedReducer;\n  };\n  const selector = Object.assign(function makeSelector<State extends object, RootState, Args extends any[]>(selectorFn: (state: State, ...args: Args) => any, selectState?: (rootState: RootState, ...args: Args) => State) {\n    return function selector(state: State, ...args: Args) {\n      return selectorFn(createStateProxy(selectState ? selectState(state as any, ...args) : state, reducerMap, initialStateCache), ...args);\n    };\n  }, {\n    original\n  });\n  return Object.assign(combinedReducer, {\n    inject,\n    selector\n  }) as any;\n}","/**\r\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\r\n *\r\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\r\n * during build.\r\n * @param {number} code\r\n */\nexport function formatProdErrorMessage(code: number) {\n  return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}"],"mappings":"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","names":["current","original","isDraft","createSelectorCreator","weakMapMemoize","createSelector","createDraftSafeSelector","args","compose","isPlainObject","noop","isActionCreator","stringify","getSerialize","isAction","isAction","listener","isPlainObject","middleware","compose","createNextState","isDraft","isDraftable","reducer","isDraft","isDraftable","createNextState","createAsyncThunk","ReducerType","createSlice","reducer","name","reducerPath","_a","createSelector","createNextState","isDraft","isDraft","arg","createNextState","current","isDraft","original","isAction","noop","noop","task","result","noop","isAction","compose","addMiddleware","middleware","compose","combineReducers","combineReducers","selector"]}
Index: node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs
===================================================================
--- node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2286 @@
+// src/index.ts
+export * from "redux";
+import { produce, current as current3, freeze, original as original2, isDraft as isDraft5 } from "immer";
+import { createSelector, createSelectorCreator as createSelectorCreator2, lruMemoize, weakMapMemoize as weakMapMemoize2 } from "reselect";
+
+// src/createDraftSafeSelector.ts
+import { current, isDraft } from "immer";
+import { createSelectorCreator, weakMapMemoize } from "reselect";
+var createDraftSafeSelectorCreator = (...args) => {
+  const createSelector2 = createSelectorCreator(...args);
+  const createDraftSafeSelector2 = Object.assign((...args2) => {
+    const selector = createSelector2(...args2);
+    const wrappedSelector = (value, ...rest) => selector(isDraft(value) ? current(value) : value, ...rest);
+    Object.assign(wrappedSelector, selector);
+    return wrappedSelector;
+  }, {
+    withTypes: () => createDraftSafeSelector2
+  });
+  return createDraftSafeSelector2;
+};
+var createDraftSafeSelector = /* @__PURE__ */ createDraftSafeSelectorCreator(weakMapMemoize);
+
+// src/configureStore.ts
+import { applyMiddleware, createStore, compose as compose2, combineReducers, isPlainObject as isPlainObject2 } from "redux";
+
+// src/devtoolsExtension.ts
+import { compose } from "redux";
+var composeWithDevTools = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function() {
+  if (arguments.length === 0) return void 0;
+  if (typeof arguments[0] === "object") return compose;
+  return compose.apply(null, arguments);
+};
+var devToolsEnhancer = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function() {
+  return function(noop3) {
+    return noop3;
+  };
+};
+
+// src/getDefaultMiddleware.ts
+import { thunk as thunkMiddleware, withExtraArgument } from "redux-thunk";
+
+// src/createAction.ts
+import { isAction } from "redux";
+
+// src/tsHelpers.ts
+var hasMatchFunction = (v) => {
+  return v && typeof v.match === "function";
+};
+
+// src/createAction.ts
+function createAction(type, prepareAction) {
+  function actionCreator(...args) {
+    if (prepareAction) {
+      let prepared = prepareAction(...args);
+      if (!prepared) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(0) : "prepareAction did not return an object");
+      }
+      return {
+        type,
+        payload: prepared.payload,
+        ..."meta" in prepared && {
+          meta: prepared.meta
+        },
+        ..."error" in prepared && {
+          error: prepared.error
+        }
+      };
+    }
+    return {
+      type,
+      payload: args[0]
+    };
+  }
+  actionCreator.toString = () => `${type}`;
+  actionCreator.type = type;
+  actionCreator.match = (action) => isAction(action) && action.type === type;
+  return actionCreator;
+}
+function isActionCreator(action) {
+  return typeof action === "function" && "type" in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it
+  hasMatchFunction(action);
+}
+function isFSA(action) {
+  return isAction(action) && Object.keys(action).every(isValidKey);
+}
+function isValidKey(key) {
+  return ["type", "payload", "error", "meta"].indexOf(key) > -1;
+}
+
+// src/actionCreatorInvariantMiddleware.ts
+function getMessage(type) {
+  const splitType = type ? `${type}`.split("/") : [];
+  const actionName = splitType[splitType.length - 1] || "actionCreator";
+  return `Detected an action creator with type "${type || "unknown"}" being dispatched. 
+Make sure you're calling the action creator before dispatching, i.e. \`dispatch(${actionName}())\` instead of \`dispatch(${actionName})\`. This is necessary even if the action has no payload.`;
+}
+function createActionCreatorInvariantMiddleware(options = {}) {
+  if (process.env.NODE_ENV === "production") {
+    return () => (next) => (action) => next(action);
+  }
+  const {
+    isActionCreator: isActionCreator2 = isActionCreator
+  } = options;
+  return () => (next) => (action) => {
+    if (isActionCreator2(action)) {
+      console.warn(getMessage(action.type));
+    }
+    return next(action);
+  };
+}
+
+// src/utils.ts
+import { produce as createNextState, isDraftable } from "immer";
+function getTimeMeasureUtils(maxDelay, fnName) {
+  let elapsed = 0;
+  return {
+    measureTime(fn) {
+      const started = Date.now();
+      try {
+        return fn();
+      } finally {
+        const finished = Date.now();
+        elapsed += finished - started;
+      }
+    },
+    warnIfExceeded() {
+      if (elapsed > maxDelay) {
+        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. 
+If your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.
+It is disabled in production builds, so you don't need to worry about that.`);
+      }
+    }
+  };
+}
+var Tuple = class _Tuple extends Array {
+  constructor(...items) {
+    super(...items);
+    Object.setPrototypeOf(this, _Tuple.prototype);
+  }
+  static get [Symbol.species]() {
+    return _Tuple;
+  }
+  concat(...arr) {
+    return super.concat.apply(this, arr);
+  }
+  prepend(...arr) {
+    if (arr.length === 1 && Array.isArray(arr[0])) {
+      return new _Tuple(...arr[0].concat(this));
+    }
+    return new _Tuple(...arr.concat(this));
+  }
+};
+function freezeDraftable(val) {
+  return isDraftable(val) ? createNextState(val, () => {
+  }) : val;
+}
+function getOrInsertComputed(map, key, compute) {
+  if (map.has(key)) return map.get(key);
+  return map.set(key, compute(key)).get(key);
+}
+
+// src/immutableStateInvariantMiddleware.ts
+function isImmutableDefault(value) {
+  return typeof value !== "object" || value == null || Object.isFrozen(value);
+}
+function trackForMutations(isImmutable, ignorePaths, obj) {
+  const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);
+  return {
+    detectMutations() {
+      return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);
+    }
+  };
+}
+function trackProperties(isImmutable, ignorePaths = [], obj, path = "", checkedObjects = /* @__PURE__ */ new Set()) {
+  const tracked = {
+    value: obj
+  };
+  if (!isImmutable(obj) && !checkedObjects.has(obj)) {
+    checkedObjects.add(obj);
+    tracked.children = {};
+    for (const key in obj) {
+      const childPath = path ? path + "." + key : key;
+      if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {
+        continue;
+      }
+      tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);
+    }
+  }
+  return tracked;
+}
+function detectMutations(isImmutable, ignoredPaths = [], trackedProperty, obj, sameParentRef = false, path = "") {
+  const prevObj = trackedProperty ? trackedProperty.value : void 0;
+  const sameRef = prevObj === obj;
+  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {
+    return {
+      wasMutated: true,
+      path
+    };
+  }
+  if (isImmutable(prevObj) || isImmutable(obj)) {
+    return {
+      wasMutated: false
+    };
+  }
+  const keysToDetect = {};
+  for (let key in trackedProperty.children) {
+    keysToDetect[key] = true;
+  }
+  for (let key in obj) {
+    keysToDetect[key] = true;
+  }
+  const hasIgnoredPaths = ignoredPaths.length > 0;
+  for (let key in keysToDetect) {
+    const nestedPath = path ? path + "." + key : key;
+    if (hasIgnoredPaths) {
+      const hasMatches = ignoredPaths.some((ignored) => {
+        if (ignored instanceof RegExp) {
+          return ignored.test(nestedPath);
+        }
+        return nestedPath === ignored;
+      });
+      if (hasMatches) {
+        continue;
+      }
+    }
+    const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);
+    if (result.wasMutated) {
+      return result;
+    }
+  }
+  return {
+    wasMutated: false
+  };
+}
+function createImmutableStateInvariantMiddleware(options = {}) {
+  if (process.env.NODE_ENV === "production") {
+    return () => (next) => (action) => next(action);
+  } else {
+    let stringify2 = function(obj, serializer, indent, decycler) {
+      return JSON.stringify(obj, getSerialize2(serializer, decycler), indent);
+    }, getSerialize2 = function(serializer, decycler) {
+      let stack = [], keys = [];
+      if (!decycler) decycler = function(_, value) {
+        if (stack[0] === value) return "[Circular ~]";
+        return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]";
+      };
+      return function(key, value) {
+        if (stack.length > 0) {
+          var thisPos = stack.indexOf(this);
+          ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
+          ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
+          if (~stack.indexOf(value)) value = decycler.call(this, key, value);
+        } else stack.push(value);
+        return serializer == null ? value : serializer.call(this, key, value);
+      };
+    };
+    var stringify = stringify2, getSerialize = getSerialize2;
+    let {
+      isImmutable = isImmutableDefault,
+      ignoredPaths,
+      warnAfter = 32
+    } = options;
+    const track = trackForMutations.bind(null, isImmutable, ignoredPaths);
+    return ({
+      getState
+    }) => {
+      let state = getState();
+      let tracker = track(state);
+      let result;
+      return (next) => (action) => {
+        const measureUtils = getTimeMeasureUtils(warnAfter, "ImmutableStateInvariantMiddleware");
+        measureUtils.measureTime(() => {
+          state = getState();
+          result = tracker.detectMutations();
+          tracker = track(state);
+          if (result.wasMutated) {
+            throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ""}'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);
+          }
+        });
+        const dispatchedAction = next(action);
+        measureUtils.measureTime(() => {
+          state = getState();
+          result = tracker.detectMutations();
+          tracker = track(state);
+          if (result.wasMutated) {
+            throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ""}. Take a look at the reducer(s) handling the action ${stringify2(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);
+          }
+        });
+        measureUtils.warnIfExceeded();
+        return dispatchedAction;
+      };
+    };
+  }
+}
+
+// src/serializableStateInvariantMiddleware.ts
+import { isAction as isAction2, isPlainObject } from "redux";
+function isPlain(val) {
+  const type = typeof val;
+  return val == null || type === "string" || type === "boolean" || type === "number" || Array.isArray(val) || isPlainObject(val);
+}
+function findNonSerializableValue(value, path = "", isSerializable = isPlain, getEntries, ignoredPaths = [], cache) {
+  let foundNestedSerializable;
+  if (!isSerializable(value)) {
+    return {
+      keyPath: path || "<root>",
+      value
+    };
+  }
+  if (typeof value !== "object" || value === null) {
+    return false;
+  }
+  if (cache?.has(value)) return false;
+  const entries = getEntries != null ? getEntries(value) : Object.entries(value);
+  const hasIgnoredPaths = ignoredPaths.length > 0;
+  for (const [key, nestedValue] of entries) {
+    const nestedPath = path ? path + "." + key : key;
+    if (hasIgnoredPaths) {
+      const hasMatches = ignoredPaths.some((ignored) => {
+        if (ignored instanceof RegExp) {
+          return ignored.test(nestedPath);
+        }
+        return nestedPath === ignored;
+      });
+      if (hasMatches) {
+        continue;
+      }
+    }
+    if (!isSerializable(nestedValue)) {
+      return {
+        keyPath: nestedPath,
+        value: nestedValue
+      };
+    }
+    if (typeof nestedValue === "object") {
+      foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);
+      if (foundNestedSerializable) {
+        return foundNestedSerializable;
+      }
+    }
+  }
+  if (cache && isNestedFrozen(value)) cache.add(value);
+  return false;
+}
+function isNestedFrozen(value) {
+  if (!Object.isFrozen(value)) return false;
+  for (const nestedValue of Object.values(value)) {
+    if (typeof nestedValue !== "object" || nestedValue === null) continue;
+    if (!isNestedFrozen(nestedValue)) return false;
+  }
+  return true;
+}
+function createSerializableStateInvariantMiddleware(options = {}) {
+  if (process.env.NODE_ENV === "production") {
+    return () => (next) => (action) => next(action);
+  } else {
+    const {
+      isSerializable = isPlain,
+      getEntries,
+      ignoredActions = [],
+      ignoredActionPaths = ["meta.arg", "meta.baseQueryMeta"],
+      ignoredPaths = [],
+      warnAfter = 32,
+      ignoreState = false,
+      ignoreActions = false,
+      disableCache = false
+    } = options;
+    const cache = !disableCache && WeakSet ? /* @__PURE__ */ new WeakSet() : void 0;
+    return (storeAPI) => (next) => (action) => {
+      if (!isAction2(action)) {
+        return next(action);
+      }
+      const result = next(action);
+      const measureUtils = getTimeMeasureUtils(warnAfter, "SerializableStateInvariantMiddleware");
+      if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {
+        measureUtils.measureTime(() => {
+          const foundActionNonSerializableValue = findNonSerializableValue(action, "", isSerializable, getEntries, ignoredActionPaths, cache);
+          if (foundActionNonSerializableValue) {
+            const {
+              keyPath,
+              value
+            } = foundActionNonSerializableValue;
+            console.error(`A non-serializable value was detected in an action, in the path: \`${keyPath}\`. Value:`, value, "\nTake a look at the logic that dispatched this action: ", action, "\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)", "\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)");
+          }
+        });
+      }
+      if (!ignoreState) {
+        measureUtils.measureTime(() => {
+          const state = storeAPI.getState();
+          const foundStateNonSerializableValue = findNonSerializableValue(state, "", isSerializable, getEntries, ignoredPaths, cache);
+          if (foundStateNonSerializableValue) {
+            const {
+              keyPath,
+              value
+            } = foundStateNonSerializableValue;
+            console.error(`A non-serializable value was detected in the state, in the path: \`${keyPath}\`. Value:`, value, `
+Take a look at the reducer(s) handling this action type: ${action.type}.
+(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);
+          }
+        });
+        measureUtils.warnIfExceeded();
+      }
+      return result;
+    };
+  }
+}
+
+// src/getDefaultMiddleware.ts
+function isBoolean(x) {
+  return typeof x === "boolean";
+}
+var buildGetDefaultMiddleware = () => function getDefaultMiddleware(options) {
+  const {
+    thunk = true,
+    immutableCheck = true,
+    serializableCheck = true,
+    actionCreatorCheck = true
+  } = options ?? {};
+  let middlewareArray = new Tuple();
+  if (thunk) {
+    if (isBoolean(thunk)) {
+      middlewareArray.push(thunkMiddleware);
+    } else {
+      middlewareArray.push(withExtraArgument(thunk.extraArgument));
+    }
+  }
+  if (process.env.NODE_ENV !== "production") {
+    if (immutableCheck) {
+      let immutableOptions = {};
+      if (!isBoolean(immutableCheck)) {
+        immutableOptions = immutableCheck;
+      }
+      middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));
+    }
+    if (serializableCheck) {
+      let serializableOptions = {};
+      if (!isBoolean(serializableCheck)) {
+        serializableOptions = serializableCheck;
+      }
+      middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));
+    }
+    if (actionCreatorCheck) {
+      let actionCreatorOptions = {};
+      if (!isBoolean(actionCreatorCheck)) {
+        actionCreatorOptions = actionCreatorCheck;
+      }
+      middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));
+    }
+  }
+  return middlewareArray;
+};
+
+// src/autoBatchEnhancer.ts
+var SHOULD_AUTOBATCH = "RTK_autoBatch";
+var prepareAutoBatched = () => (payload) => ({
+  payload,
+  meta: {
+    [SHOULD_AUTOBATCH]: true
+  }
+});
+var createQueueWithTimer = (timeout) => {
+  return (notify) => {
+    setTimeout(notify, timeout);
+  };
+};
+var autoBatchEnhancer = (options = {
+  type: "raf"
+}) => (next) => (...args) => {
+  const store = next(...args);
+  let notifying = true;
+  let shouldNotifyAtEndOfTick = false;
+  let notificationQueued = false;
+  const listeners = /* @__PURE__ */ new Set();
+  const queueCallback = options.type === "tick" ? queueMicrotask : options.type === "raf" ? (
+    // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.
+    typeof window !== "undefined" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10)
+  ) : options.type === "callback" ? options.queueNotification : createQueueWithTimer(options.timeout);
+  const notifyListeners = () => {
+    notificationQueued = false;
+    if (shouldNotifyAtEndOfTick) {
+      shouldNotifyAtEndOfTick = false;
+      listeners.forEach((l) => l());
+    }
+  };
+  return Object.assign({}, store, {
+    // Override the base `store.subscribe` method to keep original listeners
+    // from running if we're delaying notifications
+    subscribe(listener2) {
+      const wrappedListener = () => notifying && listener2();
+      const unsubscribe = store.subscribe(wrappedListener);
+      listeners.add(listener2);
+      return () => {
+        unsubscribe();
+        listeners.delete(listener2);
+      };
+    },
+    // Override the base `store.dispatch` method so that we can check actions
+    // for the `shouldAutoBatch` flag and determine if batching is active
+    dispatch(action) {
+      try {
+        notifying = !action?.meta?.[SHOULD_AUTOBATCH];
+        shouldNotifyAtEndOfTick = !notifying;
+        if (shouldNotifyAtEndOfTick) {
+          if (!notificationQueued) {
+            notificationQueued = true;
+            queueCallback(notifyListeners);
+          }
+        }
+        return store.dispatch(action);
+      } finally {
+        notifying = true;
+      }
+    }
+  });
+};
+
+// src/getDefaultEnhancers.ts
+var buildGetDefaultEnhancers = (middlewareEnhancer) => function getDefaultEnhancers(options) {
+  const {
+    autoBatch = true
+  } = options ?? {};
+  let enhancerArray = new Tuple(middlewareEnhancer);
+  if (autoBatch) {
+    enhancerArray.push(autoBatchEnhancer(typeof autoBatch === "object" ? autoBatch : void 0));
+  }
+  return enhancerArray;
+};
+
+// src/configureStore.ts
+function configureStore(options) {
+  const getDefaultMiddleware = buildGetDefaultMiddleware();
+  const {
+    reducer = void 0,
+    middleware,
+    devTools = true,
+    duplicateMiddlewareCheck = true,
+    preloadedState = void 0,
+    enhancers = void 0
+  } = options || {};
+  let rootReducer;
+  if (typeof reducer === "function") {
+    rootReducer = reducer;
+  } else if (isPlainObject2(reducer)) {
+    rootReducer = combineReducers(reducer);
+  } else {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(1) : "`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers");
+  }
+  if (process.env.NODE_ENV !== "production" && middleware && typeof middleware !== "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(2) : "`middleware` field must be a callback");
+  }
+  let finalMiddleware;
+  if (typeof middleware === "function") {
+    finalMiddleware = middleware(getDefaultMiddleware);
+    if (process.env.NODE_ENV !== "production" && !Array.isArray(finalMiddleware)) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(3) : "when using a middleware builder function, an array of middleware must be returned");
+    }
+  } else {
+    finalMiddleware = getDefaultMiddleware();
+  }
+  if (process.env.NODE_ENV !== "production" && finalMiddleware.some((item) => typeof item !== "function")) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(4) : "each middleware provided to configureStore must be a function");
+  }
+  if (process.env.NODE_ENV !== "production" && duplicateMiddlewareCheck) {
+    let middlewareReferences = /* @__PURE__ */ new Set();
+    finalMiddleware.forEach((middleware2) => {
+      if (middlewareReferences.has(middleware2)) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(42) : "Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.");
+      }
+      middlewareReferences.add(middleware2);
+    });
+  }
+  let finalCompose = compose2;
+  if (devTools) {
+    finalCompose = composeWithDevTools({
+      // Enable capture of stack traces for dispatched Redux actions
+      trace: process.env.NODE_ENV !== "production",
+      ...typeof devTools === "object" && devTools
+    });
+  }
+  const middlewareEnhancer = applyMiddleware(...finalMiddleware);
+  const getDefaultEnhancers = buildGetDefaultEnhancers(middlewareEnhancer);
+  if (process.env.NODE_ENV !== "production" && enhancers && typeof enhancers !== "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(5) : "`enhancers` field must be a callback");
+  }
+  let storeEnhancers = typeof enhancers === "function" ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();
+  if (process.env.NODE_ENV !== "production" && !Array.isArray(storeEnhancers)) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(6) : "`enhancers` callback must return an array");
+  }
+  if (process.env.NODE_ENV !== "production" && storeEnhancers.some((item) => typeof item !== "function")) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(7) : "each enhancer provided to configureStore must be a function");
+  }
+  if (process.env.NODE_ENV !== "production" && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {
+    console.error("middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`");
+  }
+  const composedEnhancer = finalCompose(...storeEnhancers);
+  return createStore(rootReducer, preloadedState, composedEnhancer);
+}
+
+// src/createReducer.ts
+import { produce as createNextState2, isDraft as isDraft2, isDraftable as isDraftable2 } from "immer";
+
+// src/mapBuilders.ts
+function executeReducerBuilderCallback(builderCallback) {
+  const actionsMap = {};
+  const actionMatchers = [];
+  let defaultCaseReducer;
+  const builder = {
+    addCase(typeOrActionCreator, reducer) {
+      if (process.env.NODE_ENV !== "production") {
+        if (actionMatchers.length > 0) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(26) : "`builder.addCase` should only be called before calling `builder.addMatcher`");
+        }
+        if (defaultCaseReducer) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(27) : "`builder.addCase` should only be called before calling `builder.addDefaultCase`");
+        }
+      }
+      const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;
+      if (!type) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(28) : "`builder.addCase` cannot be called with an empty action type");
+      }
+      if (type in actionsMap) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(29) : `\`builder.addCase\` cannot be called with two reducers for the same action type '${type}'`);
+      }
+      actionsMap[type] = reducer;
+      return builder;
+    },
+    addMatcher(matcher, reducer) {
+      if (process.env.NODE_ENV !== "production") {
+        if (defaultCaseReducer) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(30) : "`builder.addMatcher` should only be called before calling `builder.addDefaultCase`");
+        }
+      }
+      actionMatchers.push({
+        matcher,
+        reducer
+      });
+      return builder;
+    },
+    addDefaultCase(reducer) {
+      if (process.env.NODE_ENV !== "production") {
+        if (defaultCaseReducer) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(31) : "`builder.addDefaultCase` can only be called once");
+        }
+      }
+      defaultCaseReducer = reducer;
+      return builder;
+    }
+  };
+  builderCallback(builder);
+  return [actionsMap, actionMatchers, defaultCaseReducer];
+}
+
+// src/createReducer.ts
+function isStateFunction(x) {
+  return typeof x === "function";
+}
+function createReducer(initialState, mapOrBuilderCallback) {
+  if (process.env.NODE_ENV !== "production") {
+    if (typeof mapOrBuilderCallback === "object") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(8) : "The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer");
+    }
+  }
+  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);
+  let getInitialState;
+  if (isStateFunction(initialState)) {
+    getInitialState = () => freezeDraftable(initialState());
+  } else {
+    const frozenInitialState = freezeDraftable(initialState);
+    getInitialState = () => frozenInitialState;
+  }
+  function reducer(state = getInitialState(), action) {
+    let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({
+      matcher
+    }) => matcher(action)).map(({
+      reducer: reducer2
+    }) => reducer2)];
+    if (caseReducers.filter((cr) => !!cr).length === 0) {
+      caseReducers = [finalDefaultCaseReducer];
+    }
+    return caseReducers.reduce((previousState, caseReducer) => {
+      if (caseReducer) {
+        if (isDraft2(previousState)) {
+          const draft = previousState;
+          const result = caseReducer(draft, action);
+          if (result === void 0) {
+            return previousState;
+          }
+          return result;
+        } else if (!isDraftable2(previousState)) {
+          const result = caseReducer(previousState, action);
+          if (result === void 0) {
+            if (previousState === null) {
+              return previousState;
+            }
+            throw Error("A case reducer on a non-draftable value must not return undefined");
+          }
+          return result;
+        } else {
+          return createNextState2(previousState, (draft) => {
+            return caseReducer(draft, action);
+          });
+        }
+      }
+      return previousState;
+    }, state);
+  }
+  reducer.getInitialState = getInitialState;
+  return reducer;
+}
+
+// src/matchers.ts
+var matches = (matcher, action) => {
+  if (hasMatchFunction(matcher)) {
+    return matcher.match(action);
+  } else {
+    return matcher(action);
+  }
+};
+function isAnyOf(...matchers) {
+  return (action) => {
+    return matchers.some((matcher) => matches(matcher, action));
+  };
+}
+function isAllOf(...matchers) {
+  return (action) => {
+    return matchers.every((matcher) => matches(matcher, action));
+  };
+}
+function hasExpectedRequestMetadata(action, validStatus) {
+  if (!action || !action.meta) return false;
+  const hasValidRequestId = typeof action.meta.requestId === "string";
+  const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;
+  return hasValidRequestId && hasValidRequestStatus;
+}
+function isAsyncThunkArray(a) {
+  return typeof a[0] === "function" && "pending" in a[0] && "fulfilled" in a[0] && "rejected" in a[0];
+}
+function isPending(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["pending"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isPending()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.pending));
+}
+function isRejected(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["rejected"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isRejected()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.rejected));
+}
+function isRejectedWithValue(...asyncThunks) {
+  const hasFlag = (action) => {
+    return action && action.meta && action.meta.rejectedWithValue;
+  };
+  if (asyncThunks.length === 0) {
+    return isAllOf(isRejected(...asyncThunks), hasFlag);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isRejectedWithValue()(asyncThunks[0]);
+  }
+  return isAllOf(isRejected(...asyncThunks), hasFlag);
+}
+function isFulfilled(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["fulfilled"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isFulfilled()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.fulfilled));
+}
+function isAsyncThunkAction(...asyncThunks) {
+  if (asyncThunks.length === 0) {
+    return (action) => hasExpectedRequestMetadata(action, ["pending", "fulfilled", "rejected"]);
+  }
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isAsyncThunkAction()(asyncThunks[0]);
+  }
+  return isAnyOf(...asyncThunks.flatMap((asyncThunk) => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));
+}
+
+// src/nanoid.ts
+var urlAlphabet = "ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW";
+var nanoid = (size = 21) => {
+  let id = "";
+  let i = size;
+  while (i--) {
+    id += urlAlphabet[Math.random() * 64 | 0];
+  }
+  return id;
+};
+
+// src/createAsyncThunk.ts
+var commonProperties = ["name", "message", "stack", "code"];
+var RejectWithValue = class {
+  constructor(payload, meta) {
+    this.payload = payload;
+    this.meta = meta;
+  }
+  /*
+  type-only property to distinguish between RejectWithValue and FulfillWithMeta
+  does not exist at runtime
+  */
+  _type;
+};
+var FulfillWithMeta = class {
+  constructor(payload, meta) {
+    this.payload = payload;
+    this.meta = meta;
+  }
+  /*
+  type-only property to distinguish between RejectWithValue and FulfillWithMeta
+  does not exist at runtime
+  */
+  _type;
+};
+var miniSerializeError = (value) => {
+  if (typeof value === "object" && value !== null) {
+    const simpleError = {};
+    for (const property of commonProperties) {
+      if (typeof value[property] === "string") {
+        simpleError[property] = value[property];
+      }
+    }
+    return simpleError;
+  }
+  return {
+    message: String(value)
+  };
+};
+var externalAbortMessage = "External signal was aborted";
+var createAsyncThunk = /* @__PURE__ */ (() => {
+  function createAsyncThunk2(typePrefix, payloadCreator, options) {
+    const fulfilled = createAction(typePrefix + "/fulfilled", (payload, requestId, arg, meta) => ({
+      payload,
+      meta: {
+        ...meta || {},
+        arg,
+        requestId,
+        requestStatus: "fulfilled"
+      }
+    }));
+    const pending = createAction(typePrefix + "/pending", (requestId, arg, meta) => ({
+      payload: void 0,
+      meta: {
+        ...meta || {},
+        arg,
+        requestId,
+        requestStatus: "pending"
+      }
+    }));
+    const rejected = createAction(typePrefix + "/rejected", (error, requestId, arg, payload, meta) => ({
+      payload,
+      error: (options && options.serializeError || miniSerializeError)(error || "Rejected"),
+      meta: {
+        ...meta || {},
+        arg,
+        requestId,
+        rejectedWithValue: !!payload,
+        requestStatus: "rejected",
+        aborted: error?.name === "AbortError",
+        condition: error?.name === "ConditionError"
+      }
+    }));
+    function actionCreator(arg, {
+      signal
+    } = {}) {
+      return (dispatch, getState, extra) => {
+        const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();
+        const abortController = new AbortController();
+        let abortHandler;
+        let abortReason;
+        function abort(reason) {
+          abortReason = reason;
+          abortController.abort();
+        }
+        if (signal) {
+          if (signal.aborted) {
+            abort(externalAbortMessage);
+          } else {
+            signal.addEventListener("abort", () => abort(externalAbortMessage), {
+              once: true
+            });
+          }
+        }
+        const promise = async function() {
+          let finalAction;
+          try {
+            let conditionResult = options?.condition?.(arg, {
+              getState,
+              extra
+            });
+            if (isThenable(conditionResult)) {
+              conditionResult = await conditionResult;
+            }
+            if (conditionResult === false || abortController.signal.aborted) {
+              throw {
+                name: "ConditionError",
+                message: "Aborted due to condition callback returning false."
+              };
+            }
+            const abortedPromise = new Promise((_, reject) => {
+              abortHandler = () => {
+                reject({
+                  name: "AbortError",
+                  message: abortReason || "Aborted"
+                });
+              };
+              abortController.signal.addEventListener("abort", abortHandler);
+            });
+            dispatch(pending(requestId, arg, options?.getPendingMeta?.({
+              requestId,
+              arg
+            }, {
+              getState,
+              extra
+            })));
+            finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {
+              dispatch,
+              getState,
+              extra,
+              requestId,
+              signal: abortController.signal,
+              abort,
+              rejectWithValue: (value, meta) => {
+                return new RejectWithValue(value, meta);
+              },
+              fulfillWithValue: (value, meta) => {
+                return new FulfillWithMeta(value, meta);
+              }
+            })).then((result) => {
+              if (result instanceof RejectWithValue) {
+                throw result;
+              }
+              if (result instanceof FulfillWithMeta) {
+                return fulfilled(result.payload, requestId, arg, result.meta);
+              }
+              return fulfilled(result, requestId, arg);
+            })]);
+          } catch (err) {
+            finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err, requestId, arg);
+          } finally {
+            if (abortHandler) {
+              abortController.signal.removeEventListener("abort", abortHandler);
+            }
+          }
+          const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;
+          if (!skipDispatch) {
+            dispatch(finalAction);
+          }
+          return finalAction;
+        }();
+        return Object.assign(promise, {
+          abort,
+          requestId,
+          arg,
+          unwrap() {
+            return promise.then(unwrapResult);
+          }
+        });
+      };
+    }
+    return Object.assign(actionCreator, {
+      pending,
+      rejected,
+      fulfilled,
+      settled: isAnyOf(rejected, fulfilled),
+      typePrefix
+    });
+  }
+  createAsyncThunk2.withTypes = () => createAsyncThunk2;
+  return createAsyncThunk2;
+})();
+function unwrapResult(action) {
+  if (action.meta && action.meta.rejectedWithValue) {
+    throw action.payload;
+  }
+  if (action.error) {
+    throw action.error;
+  }
+  return action.payload;
+}
+function isThenable(value) {
+  return value !== null && typeof value === "object" && typeof value.then === "function";
+}
+
+// src/createSlice.ts
+var asyncThunkSymbol = /* @__PURE__ */ Symbol.for("rtk-slice-createasyncthunk");
+var asyncThunkCreator = {
+  [asyncThunkSymbol]: createAsyncThunk
+};
+var ReducerType = /* @__PURE__ */ ((ReducerType2) => {
+  ReducerType2["reducer"] = "reducer";
+  ReducerType2["reducerWithPrepare"] = "reducerWithPrepare";
+  ReducerType2["asyncThunk"] = "asyncThunk";
+  return ReducerType2;
+})(ReducerType || {});
+function getType(slice, actionKey) {
+  return `${slice}/${actionKey}`;
+}
+function buildCreateSlice({
+  creators
+} = {}) {
+  const cAT = creators?.asyncThunk?.[asyncThunkSymbol];
+  return function createSlice2(options) {
+    const {
+      name,
+      reducerPath = name
+    } = options;
+    if (!name) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(11) : "`name` is a required option for createSlice");
+    }
+    if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+      if (options.initialState === void 0) {
+        console.error("You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`");
+      }
+    }
+    const reducers = (typeof options.reducers === "function" ? options.reducers(buildReducerCreators()) : options.reducers) || {};
+    const reducerNames = Object.keys(reducers);
+    const context = {
+      sliceCaseReducersByName: {},
+      sliceCaseReducersByType: {},
+      actionCreators: {},
+      sliceMatchers: []
+    };
+    const contextMethods = {
+      addCase(typeOrActionCreator, reducer2) {
+        const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;
+        if (!type) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(12) : "`context.addCase` cannot be called with an empty action type");
+        }
+        if (type in context.sliceCaseReducersByType) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(13) : "`context.addCase` cannot be called with two reducers for the same action type: " + type);
+        }
+        context.sliceCaseReducersByType[type] = reducer2;
+        return contextMethods;
+      },
+      addMatcher(matcher, reducer2) {
+        context.sliceMatchers.push({
+          matcher,
+          reducer: reducer2
+        });
+        return contextMethods;
+      },
+      exposeAction(name2, actionCreator) {
+        context.actionCreators[name2] = actionCreator;
+        return contextMethods;
+      },
+      exposeCaseReducer(name2, reducer2) {
+        context.sliceCaseReducersByName[name2] = reducer2;
+        return contextMethods;
+      }
+    };
+    reducerNames.forEach((reducerName) => {
+      const reducerDefinition = reducers[reducerName];
+      const reducerDetails = {
+        reducerName,
+        type: getType(name, reducerName),
+        createNotation: typeof options.reducers === "function"
+      };
+      if (isAsyncThunkSliceReducerDefinition(reducerDefinition)) {
+        handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);
+      } else {
+        handleNormalReducerDefinition(reducerDetails, reducerDefinition, contextMethods);
+      }
+    });
+    function buildReducer() {
+      if (process.env.NODE_ENV !== "production") {
+        if (typeof options.extraReducers === "object") {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(14) : "The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice");
+        }
+      }
+      const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = void 0] = typeof options.extraReducers === "function" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];
+      const finalCaseReducers = {
+        ...extraReducers,
+        ...context.sliceCaseReducersByType
+      };
+      return createReducer(options.initialState, (builder) => {
+        for (let key in finalCaseReducers) {
+          builder.addCase(key, finalCaseReducers[key]);
+        }
+        for (let sM of context.sliceMatchers) {
+          builder.addMatcher(sM.matcher, sM.reducer);
+        }
+        for (let m of actionMatchers) {
+          builder.addMatcher(m.matcher, m.reducer);
+        }
+        if (defaultCaseReducer) {
+          builder.addDefaultCase(defaultCaseReducer);
+        }
+      });
+    }
+    const selectSelf = (state) => state;
+    const injectedSelectorCache = /* @__PURE__ */ new Map();
+    const injectedStateCache = /* @__PURE__ */ new WeakMap();
+    let _reducer;
+    function reducer(state, action) {
+      if (!_reducer) _reducer = buildReducer();
+      return _reducer(state, action);
+    }
+    function getInitialState() {
+      if (!_reducer) _reducer = buildReducer();
+      return _reducer.getInitialState();
+    }
+    function makeSelectorProps(reducerPath2, injected = false) {
+      function selectSlice(state) {
+        let sliceState = state[reducerPath2];
+        if (typeof sliceState === "undefined") {
+          if (injected) {
+            sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);
+          } else if (process.env.NODE_ENV !== "production") {
+            throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(15) : "selectSlice returned undefined for an uninjected slice reducer");
+          }
+        }
+        return sliceState;
+      }
+      function getSelectors(selectState = selectSelf) {
+        const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => /* @__PURE__ */ new WeakMap());
+        return getOrInsertComputed(selectorCache, selectState, () => {
+          const map = {};
+          for (const [name2, selector] of Object.entries(options.selectors ?? {})) {
+            map[name2] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);
+          }
+          return map;
+        });
+      }
+      return {
+        reducerPath: reducerPath2,
+        getSelectors,
+        get selectors() {
+          return getSelectors(selectSlice);
+        },
+        selectSlice
+      };
+    }
+    const slice = {
+      name,
+      reducer,
+      actions: context.actionCreators,
+      caseReducers: context.sliceCaseReducersByName,
+      getInitialState,
+      ...makeSelectorProps(reducerPath),
+      injectInto(injectable, {
+        reducerPath: pathOpt,
+        ...config
+      } = {}) {
+        const newReducerPath = pathOpt ?? reducerPath;
+        injectable.inject({
+          reducerPath: newReducerPath,
+          reducer
+        }, config);
+        return {
+          ...slice,
+          ...makeSelectorProps(newReducerPath, true)
+        };
+      }
+    };
+    return slice;
+  };
+}
+function wrapSelector(selector, selectState, getInitialState, injected) {
+  function wrapper(rootState, ...args) {
+    let sliceState = selectState(rootState);
+    if (typeof sliceState === "undefined") {
+      if (injected) {
+        sliceState = getInitialState();
+      } else if (process.env.NODE_ENV !== "production") {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(16) : "selectState returned undefined for an uninjected slice reducer");
+      }
+    }
+    return selector(sliceState, ...args);
+  }
+  wrapper.unwrapped = selector;
+  return wrapper;
+}
+var createSlice = /* @__PURE__ */ buildCreateSlice();
+function buildReducerCreators() {
+  function asyncThunk(payloadCreator, config) {
+    return {
+      _reducerDefinitionType: "asyncThunk" /* asyncThunk */,
+      payloadCreator,
+      ...config
+    };
+  }
+  asyncThunk.withTypes = () => asyncThunk;
+  return {
+    reducer(caseReducer) {
+      return Object.assign({
+        // hack so the wrapping function has the same name as the original
+        // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original
+        [caseReducer.name](...args) {
+          return caseReducer(...args);
+        }
+      }[caseReducer.name], {
+        _reducerDefinitionType: "reducer" /* reducer */
+      });
+    },
+    preparedReducer(prepare, reducer) {
+      return {
+        _reducerDefinitionType: "reducerWithPrepare" /* reducerWithPrepare */,
+        prepare,
+        reducer
+      };
+    },
+    asyncThunk
+  };
+}
+function handleNormalReducerDefinition({
+  type,
+  reducerName,
+  createNotation
+}, maybeReducerWithPrepare, context) {
+  let caseReducer;
+  let prepareCallback;
+  if ("reducer" in maybeReducerWithPrepare) {
+    if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(17) : "Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.");
+    }
+    caseReducer = maybeReducerWithPrepare.reducer;
+    prepareCallback = maybeReducerWithPrepare.prepare;
+  } else {
+    caseReducer = maybeReducerWithPrepare;
+  }
+  context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));
+}
+function isAsyncThunkSliceReducerDefinition(reducerDefinition) {
+  return reducerDefinition._reducerDefinitionType === "asyncThunk" /* asyncThunk */;
+}
+function isCaseReducerWithPrepareDefinition(reducerDefinition) {
+  return reducerDefinition._reducerDefinitionType === "reducerWithPrepare" /* reducerWithPrepare */;
+}
+function handleThunkCaseReducerDefinition({
+  type,
+  reducerName
+}, reducerDefinition, context, cAT) {
+  if (!cAT) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(18) : "Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.");
+  }
+  const {
+    payloadCreator,
+    fulfilled,
+    pending,
+    rejected,
+    settled,
+    options
+  } = reducerDefinition;
+  const thunk = cAT(type, payloadCreator, options);
+  context.exposeAction(reducerName, thunk);
+  if (fulfilled) {
+    context.addCase(thunk.fulfilled, fulfilled);
+  }
+  if (pending) {
+    context.addCase(thunk.pending, pending);
+  }
+  if (rejected) {
+    context.addCase(thunk.rejected, rejected);
+  }
+  if (settled) {
+    context.addMatcher(thunk.settled, settled);
+  }
+  context.exposeCaseReducer(reducerName, {
+    fulfilled: fulfilled || noop,
+    pending: pending || noop,
+    rejected: rejected || noop,
+    settled: settled || noop
+  });
+}
+function noop() {
+}
+
+// src/entities/entity_state.ts
+function getInitialEntityState() {
+  return {
+    ids: [],
+    entities: {}
+  };
+}
+function createInitialStateFactory(stateAdapter) {
+  function getInitialState(additionalState = {}, entities) {
+    const state = Object.assign(getInitialEntityState(), additionalState);
+    return entities ? stateAdapter.setAll(state, entities) : state;
+  }
+  return {
+    getInitialState
+  };
+}
+
+// src/entities/state_selectors.ts
+function createSelectorsFactory() {
+  function getSelectors(selectState, options = {}) {
+    const {
+      createSelector: createSelector2 = createDraftSafeSelector
+    } = options;
+    const selectIds = (state) => state.ids;
+    const selectEntities = (state) => state.entities;
+    const selectAll = createSelector2(selectIds, selectEntities, (ids, entities) => ids.map((id) => entities[id]));
+    const selectId = (_, id) => id;
+    const selectById = (entities, id) => entities[id];
+    const selectTotal = createSelector2(selectIds, (ids) => ids.length);
+    if (!selectState) {
+      return {
+        selectIds,
+        selectEntities,
+        selectAll,
+        selectTotal,
+        selectById: createSelector2(selectEntities, selectId, selectById)
+      };
+    }
+    const selectGlobalizedEntities = createSelector2(selectState, selectEntities);
+    return {
+      selectIds: createSelector2(selectState, selectIds),
+      selectEntities: selectGlobalizedEntities,
+      selectAll: createSelector2(selectState, selectAll),
+      selectTotal: createSelector2(selectState, selectTotal),
+      selectById: createSelector2(selectGlobalizedEntities, selectId, selectById)
+    };
+  }
+  return {
+    getSelectors
+  };
+}
+
+// src/entities/state_adapter.ts
+import { produce as createNextState3, isDraft as isDraft3 } from "immer";
+var isDraftTyped = isDraft3;
+function createSingleArgumentStateOperator(mutator) {
+  const operator = createStateOperator((_, state) => mutator(state));
+  return function operation(state) {
+    return operator(state, void 0);
+  };
+}
+function createStateOperator(mutator) {
+  return function operation(state, arg) {
+    function isPayloadActionArgument(arg2) {
+      return isFSA(arg2);
+    }
+    const runMutator = (draft) => {
+      if (isPayloadActionArgument(arg)) {
+        mutator(arg.payload, draft);
+      } else {
+        mutator(arg, draft);
+      }
+    };
+    if (isDraftTyped(state)) {
+      runMutator(state);
+      return state;
+    }
+    return createNextState3(state, runMutator);
+  };
+}
+
+// src/entities/utils.ts
+import { current as current2, isDraft as isDraft4 } from "immer";
+function selectIdValue(entity, selectId) {
+  const key = selectId(entity);
+  if (process.env.NODE_ENV !== "production" && key === void 0) {
+    console.warn("The entity passed to the `selectId` implementation returned undefined.", "You should probably provide your own `selectId` implementation.", "The entity that was passed:", entity, "The `selectId` implementation:", selectId.toString());
+  }
+  return key;
+}
+function ensureEntitiesArray(entities) {
+  if (!Array.isArray(entities)) {
+    entities = Object.values(entities);
+  }
+  return entities;
+}
+function getCurrent(value) {
+  return isDraft4(value) ? current2(value) : value;
+}
+function splitAddedUpdatedEntities(newEntities, selectId, state) {
+  newEntities = ensureEntitiesArray(newEntities);
+  const existingIdsArray = getCurrent(state.ids);
+  const existingIds = new Set(existingIdsArray);
+  const added = [];
+  const addedIds = /* @__PURE__ */ new Set([]);
+  const updated = [];
+  for (const entity of newEntities) {
+    const id = selectIdValue(entity, selectId);
+    if (existingIds.has(id) || addedIds.has(id)) {
+      updated.push({
+        id,
+        changes: entity
+      });
+    } else {
+      addedIds.add(id);
+      added.push(entity);
+    }
+  }
+  return [added, updated, existingIdsArray];
+}
+
+// src/entities/unsorted_state_adapter.ts
+function createUnsortedStateAdapter(selectId) {
+  function addOneMutably(entity, state) {
+    const key = selectIdValue(entity, selectId);
+    if (key in state.entities) {
+      return;
+    }
+    state.ids.push(key);
+    state.entities[key] = entity;
+  }
+  function addManyMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    for (const entity of newEntities) {
+      addOneMutably(entity, state);
+    }
+  }
+  function setOneMutably(entity, state) {
+    const key = selectIdValue(entity, selectId);
+    if (!(key in state.entities)) {
+      state.ids.push(key);
+    }
+    ;
+    state.entities[key] = entity;
+  }
+  function setManyMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    for (const entity of newEntities) {
+      setOneMutably(entity, state);
+    }
+  }
+  function setAllMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    state.ids = [];
+    state.entities = {};
+    addManyMutably(newEntities, state);
+  }
+  function removeOneMutably(key, state) {
+    return removeManyMutably([key], state);
+  }
+  function removeManyMutably(keys, state) {
+    let didMutate = false;
+    keys.forEach((key) => {
+      if (key in state.entities) {
+        delete state.entities[key];
+        didMutate = true;
+      }
+    });
+    if (didMutate) {
+      state.ids = state.ids.filter((id) => id in state.entities);
+    }
+  }
+  function removeAllMutably(state) {
+    Object.assign(state, {
+      ids: [],
+      entities: {}
+    });
+  }
+  function takeNewKey(keys, update, state) {
+    const original3 = state.entities[update.id];
+    if (original3 === void 0) {
+      return false;
+    }
+    const updated = Object.assign({}, original3, update.changes);
+    const newKey = selectIdValue(updated, selectId);
+    const hasNewKey = newKey !== update.id;
+    if (hasNewKey) {
+      keys[update.id] = newKey;
+      delete state.entities[update.id];
+    }
+    ;
+    state.entities[newKey] = updated;
+    return hasNewKey;
+  }
+  function updateOneMutably(update, state) {
+    return updateManyMutably([update], state);
+  }
+  function updateManyMutably(updates, state) {
+    const newKeys = {};
+    const updatesPerEntity = {};
+    updates.forEach((update) => {
+      if (update.id in state.entities) {
+        updatesPerEntity[update.id] = {
+          id: update.id,
+          // Spreads ignore falsy values, so this works even if there isn't
+          // an existing update already at this key
+          changes: {
+            ...updatesPerEntity[update.id]?.changes,
+            ...update.changes
+          }
+        };
+      }
+    });
+    updates = Object.values(updatesPerEntity);
+    const didMutateEntities = updates.length > 0;
+    if (didMutateEntities) {
+      const didMutateIds = updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;
+      if (didMutateIds) {
+        state.ids = Object.values(state.entities).map((e) => selectIdValue(e, selectId));
+      }
+    }
+  }
+  function upsertOneMutably(entity, state) {
+    return upsertManyMutably([entity], state);
+  }
+  function upsertManyMutably(newEntities, state) {
+    const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);
+    addManyMutably(added, state);
+    updateManyMutably(updated, state);
+  }
+  return {
+    removeAll: createSingleArgumentStateOperator(removeAllMutably),
+    addOne: createStateOperator(addOneMutably),
+    addMany: createStateOperator(addManyMutably),
+    setOne: createStateOperator(setOneMutably),
+    setMany: createStateOperator(setManyMutably),
+    setAll: createStateOperator(setAllMutably),
+    updateOne: createStateOperator(updateOneMutably),
+    updateMany: createStateOperator(updateManyMutably),
+    upsertOne: createStateOperator(upsertOneMutably),
+    upsertMany: createStateOperator(upsertManyMutably),
+    removeOne: createStateOperator(removeOneMutably),
+    removeMany: createStateOperator(removeManyMutably)
+  };
+}
+
+// src/entities/sorted_state_adapter.ts
+function findInsertIndex(sortedItems, item, comparisonFunction) {
+  let lowIndex = 0;
+  let highIndex = sortedItems.length;
+  while (lowIndex < highIndex) {
+    let middleIndex = lowIndex + highIndex >>> 1;
+    const currentItem = sortedItems[middleIndex];
+    const res = comparisonFunction(item, currentItem);
+    if (res >= 0) {
+      lowIndex = middleIndex + 1;
+    } else {
+      highIndex = middleIndex;
+    }
+  }
+  return lowIndex;
+}
+function insert(sortedItems, item, comparisonFunction) {
+  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);
+  sortedItems.splice(insertAtIndex, 0, item);
+  return sortedItems;
+}
+function createSortedStateAdapter(selectId, comparer) {
+  const {
+    removeOne,
+    removeMany,
+    removeAll
+  } = createUnsortedStateAdapter(selectId);
+  function addOneMutably(entity, state) {
+    return addManyMutably([entity], state);
+  }
+  function addManyMutably(newEntities, state, existingIds) {
+    newEntities = ensureEntitiesArray(newEntities);
+    const existingKeys = new Set(existingIds ?? getCurrent(state.ids));
+    const models = newEntities.filter((model) => !existingKeys.has(selectIdValue(model, selectId)));
+    if (models.length !== 0) {
+      mergeFunction(state, models);
+    }
+  }
+  function setOneMutably(entity, state) {
+    return setManyMutably([entity], state);
+  }
+  function setManyMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    if (newEntities.length !== 0) {
+      for (const item of newEntities) {
+        delete state.entities[selectId(item)];
+      }
+      mergeFunction(state, newEntities);
+    }
+  }
+  function setAllMutably(newEntities, state) {
+    newEntities = ensureEntitiesArray(newEntities);
+    state.entities = {};
+    state.ids = [];
+    addManyMutably(newEntities, state, []);
+  }
+  function updateOneMutably(update, state) {
+    return updateManyMutably([update], state);
+  }
+  function updateManyMutably(updates, state) {
+    let appliedUpdates = false;
+    let replacedIds = false;
+    for (let update of updates) {
+      const entity = state.entities[update.id];
+      if (!entity) {
+        continue;
+      }
+      appliedUpdates = true;
+      Object.assign(entity, update.changes);
+      const newId = selectId(entity);
+      if (update.id !== newId) {
+        replacedIds = true;
+        delete state.entities[update.id];
+        const oldIndex = state.ids.indexOf(update.id);
+        state.ids[oldIndex] = newId;
+        state.entities[newId] = entity;
+      }
+    }
+    if (appliedUpdates) {
+      mergeFunction(state, [], appliedUpdates, replacedIds);
+    }
+  }
+  function upsertOneMutably(entity, state) {
+    return upsertManyMutably([entity], state);
+  }
+  function upsertManyMutably(newEntities, state) {
+    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities(newEntities, selectId, state);
+    if (added.length) {
+      addManyMutably(added, state, existingIdsArray);
+    }
+    if (updated.length) {
+      updateManyMutably(updated, state);
+    }
+  }
+  function areArraysEqual(a, b) {
+    if (a.length !== b.length) {
+      return false;
+    }
+    for (let i = 0; i < a.length; i++) {
+      if (a[i] === b[i]) {
+        continue;
+      }
+      return false;
+    }
+    return true;
+  }
+  const mergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {
+    const currentEntities = getCurrent(state.entities);
+    const currentIds = getCurrent(state.ids);
+    const stateEntities = state.entities;
+    let ids = currentIds;
+    if (replacedIds) {
+      ids = new Set(currentIds);
+    }
+    let sortedEntities = [];
+    for (const id of ids) {
+      const entity = currentEntities[id];
+      if (entity) {
+        sortedEntities.push(entity);
+      }
+    }
+    const wasPreviouslyEmpty = sortedEntities.length === 0;
+    for (const item of addedItems) {
+      stateEntities[selectId(item)] = item;
+      if (!wasPreviouslyEmpty) {
+        insert(sortedEntities, item, comparer);
+      }
+    }
+    if (wasPreviouslyEmpty) {
+      sortedEntities = addedItems.slice().sort(comparer);
+    } else if (appliedUpdates) {
+      sortedEntities.sort(comparer);
+    }
+    const newSortedIds = sortedEntities.map(selectId);
+    if (!areArraysEqual(currentIds, newSortedIds)) {
+      state.ids = newSortedIds;
+    }
+  };
+  return {
+    removeOne,
+    removeMany,
+    removeAll,
+    addOne: createStateOperator(addOneMutably),
+    updateOne: createStateOperator(updateOneMutably),
+    upsertOne: createStateOperator(upsertOneMutably),
+    setOne: createStateOperator(setOneMutably),
+    setMany: createStateOperator(setManyMutably),
+    setAll: createStateOperator(setAllMutably),
+    addMany: createStateOperator(addManyMutably),
+    updateMany: createStateOperator(updateManyMutably),
+    upsertMany: createStateOperator(upsertManyMutably)
+  };
+}
+
+// src/entities/create_adapter.ts
+function createEntityAdapter(options = {}) {
+  const {
+    selectId,
+    sortComparer
+  } = {
+    sortComparer: false,
+    selectId: (instance) => instance.id,
+    ...options
+  };
+  const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);
+  const stateFactory = createInitialStateFactory(stateAdapter);
+  const selectorsFactory = createSelectorsFactory();
+  return {
+    selectId,
+    sortComparer,
+    ...stateFactory,
+    ...selectorsFactory,
+    ...stateAdapter
+  };
+}
+
+// src/listenerMiddleware/index.ts
+import { isAction as isAction3 } from "redux";
+
+// src/listenerMiddleware/exceptions.ts
+var task = "task";
+var listener = "listener";
+var completed = "completed";
+var cancelled = "cancelled";
+var taskCancelled = `task-${cancelled}`;
+var taskCompleted = `task-${completed}`;
+var listenerCancelled = `${listener}-${cancelled}`;
+var listenerCompleted = `${listener}-${completed}`;
+var TaskAbortError = class {
+  constructor(code) {
+    this.code = code;
+    this.message = `${task} ${cancelled} (reason: ${code})`;
+  }
+  name = "TaskAbortError";
+  message;
+};
+
+// src/listenerMiddleware/utils.ts
+var assertFunction = (func, expected) => {
+  if (typeof func !== "function") {
+    throw new TypeError(process.env.NODE_ENV === "production" ? formatProdErrorMessage(32) : `${expected} is not a function`);
+  }
+};
+var noop2 = () => {
+};
+var catchRejection = (promise, onError = noop2) => {
+  promise.catch(onError);
+  return promise;
+};
+var addAbortSignalListener = (abortSignal, callback) => {
+  abortSignal.addEventListener("abort", callback, {
+    once: true
+  });
+  return () => abortSignal.removeEventListener("abort", callback);
+};
+var abortControllerWithReason = (abortController, reason) => {
+  const signal = abortController.signal;
+  if (signal.aborted) {
+    return;
+  }
+  if (!("reason" in signal)) {
+    Object.defineProperty(signal, "reason", {
+      enumerable: true,
+      value: reason,
+      configurable: true,
+      writable: true
+    });
+  }
+  ;
+  abortController.abort(reason);
+};
+
+// src/listenerMiddleware/task.ts
+var validateActive = (signal) => {
+  if (signal.aborted) {
+    const {
+      reason
+    } = signal;
+    throw new TaskAbortError(reason);
+  }
+};
+function raceWithSignal(signal, promise) {
+  let cleanup = noop2;
+  return new Promise((resolve, reject) => {
+    const notifyRejection = () => reject(new TaskAbortError(signal.reason));
+    if (signal.aborted) {
+      notifyRejection();
+      return;
+    }
+    cleanup = addAbortSignalListener(signal, notifyRejection);
+    promise.finally(() => cleanup()).then(resolve, reject);
+  }).finally(() => {
+    cleanup = noop2;
+  });
+}
+var runTask = async (task2, cleanUp) => {
+  try {
+    await Promise.resolve();
+    const value = await task2();
+    return {
+      status: "ok",
+      value
+    };
+  } catch (error) {
+    return {
+      status: error instanceof TaskAbortError ? "cancelled" : "rejected",
+      error
+    };
+  } finally {
+    cleanUp?.();
+  }
+};
+var createPause = (signal) => {
+  return (promise) => {
+    return catchRejection(raceWithSignal(signal, promise).then((output) => {
+      validateActive(signal);
+      return output;
+    }));
+  };
+};
+var createDelay = (signal) => {
+  const pause = createPause(signal);
+  return (timeoutMs) => {
+    return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)));
+  };
+};
+
+// src/listenerMiddleware/index.ts
+var {
+  assign
+} = Object;
+var INTERNAL_NIL_TOKEN = {};
+var alm = "listenerMiddleware";
+var createFork = (parentAbortSignal, parentBlockingPromises) => {
+  const linkControllers = (controller) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));
+  return (taskExecutor, opts) => {
+    assertFunction(taskExecutor, "taskExecutor");
+    const childAbortController = new AbortController();
+    linkControllers(childAbortController);
+    const result = runTask(async () => {
+      validateActive(parentAbortSignal);
+      validateActive(childAbortController.signal);
+      const result2 = await taskExecutor({
+        pause: createPause(childAbortController.signal),
+        delay: createDelay(childAbortController.signal),
+        signal: childAbortController.signal
+      });
+      validateActive(childAbortController.signal);
+      return result2;
+    }, () => abortControllerWithReason(childAbortController, taskCompleted));
+    if (opts?.autoJoin) {
+      parentBlockingPromises.push(result.catch(noop2));
+    }
+    return {
+      result: createPause(parentAbortSignal)(result),
+      cancel() {
+        abortControllerWithReason(childAbortController, taskCancelled);
+      }
+    };
+  };
+};
+var createTakePattern = (startListening, signal) => {
+  const take = async (predicate, timeout) => {
+    validateActive(signal);
+    let unsubscribe = () => {
+    };
+    const tuplePromise = new Promise((resolve, reject) => {
+      let stopListening = startListening({
+        predicate,
+        effect: (action, listenerApi) => {
+          listenerApi.unsubscribe();
+          resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);
+        }
+      });
+      unsubscribe = () => {
+        stopListening();
+        reject();
+      };
+    });
+    const promises = [tuplePromise];
+    if (timeout != null) {
+      promises.push(new Promise((resolve) => setTimeout(resolve, timeout, null)));
+    }
+    try {
+      const output = await raceWithSignal(signal, Promise.race(promises));
+      validateActive(signal);
+      return output;
+    } finally {
+      unsubscribe();
+    }
+  };
+  return (predicate, timeout) => catchRejection(take(predicate, timeout));
+};
+var getListenerEntryPropsFrom = (options) => {
+  let {
+    type,
+    actionCreator,
+    matcher,
+    predicate,
+    effect
+  } = options;
+  if (type) {
+    predicate = createAction(type).match;
+  } else if (actionCreator) {
+    type = actionCreator.type;
+    predicate = actionCreator.match;
+  } else if (matcher) {
+    predicate = matcher;
+  } else if (predicate) {
+  } else {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(21) : "Creating or removing a listener requires one of the known fields for matching an action");
+  }
+  assertFunction(effect, "options.listener");
+  return {
+    predicate,
+    type,
+    effect
+  };
+};
+var createListenerEntry = /* @__PURE__ */ assign((options) => {
+  const {
+    type,
+    predicate,
+    effect
+  } = getListenerEntryPropsFrom(options);
+  const entry = {
+    id: nanoid(),
+    effect,
+    type,
+    predicate,
+    pending: /* @__PURE__ */ new Set(),
+    unsubscribe: () => {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(22) : "Unsubscribe not initialized");
+    }
+  };
+  return entry;
+}, {
+  withTypes: () => createListenerEntry
+});
+var findListenerEntry = (listenerMap, options) => {
+  const {
+    type,
+    effect,
+    predicate
+  } = getListenerEntryPropsFrom(options);
+  return Array.from(listenerMap.values()).find((entry) => {
+    const matchPredicateOrType = typeof type === "string" ? entry.type === type : entry.predicate === predicate;
+    return matchPredicateOrType && entry.effect === effect;
+  });
+};
+var cancelActiveListeners = (entry) => {
+  entry.pending.forEach((controller) => {
+    abortControllerWithReason(controller, listenerCancelled);
+  });
+};
+var createClearListenerMiddleware = (listenerMap) => {
+  return () => {
+    listenerMap.forEach(cancelActiveListeners);
+    listenerMap.clear();
+  };
+};
+var safelyNotifyError = (errorHandler, errorToNotify, errorInfo) => {
+  try {
+    errorHandler(errorToNotify, errorInfo);
+  } catch (errorHandlerError) {
+    setTimeout(() => {
+      throw errorHandlerError;
+    }, 0);
+  }
+};
+var addListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/add`), {
+  withTypes: () => addListener
+});
+var clearAllListeners = /* @__PURE__ */ createAction(`${alm}/removeAll`);
+var removeListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/remove`), {
+  withTypes: () => removeListener
+});
+var defaultErrorHandler = (...args) => {
+  console.error(`${alm}/error`, ...args);
+};
+var createListenerMiddleware = (middlewareOptions = {}) => {
+  const listenerMap = /* @__PURE__ */ new Map();
+  const {
+    extra,
+    onError = defaultErrorHandler
+  } = middlewareOptions;
+  assertFunction(onError, "onError");
+  const insertEntry = (entry) => {
+    entry.unsubscribe = () => listenerMap.delete(entry.id);
+    listenerMap.set(entry.id, entry);
+    return (cancelOptions) => {
+      entry.unsubscribe();
+      if (cancelOptions?.cancelActive) {
+        cancelActiveListeners(entry);
+      }
+    };
+  };
+  const startListening = (options) => {
+    const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options);
+    return insertEntry(entry);
+  };
+  assign(startListening, {
+    withTypes: () => startListening
+  });
+  const stopListening = (options) => {
+    const entry = findListenerEntry(listenerMap, options);
+    if (entry) {
+      entry.unsubscribe();
+      if (options.cancelActive) {
+        cancelActiveListeners(entry);
+      }
+    }
+    return !!entry;
+  };
+  assign(stopListening, {
+    withTypes: () => stopListening
+  });
+  const notifyListener = async (entry, action, api, getOriginalState) => {
+    const internalTaskController = new AbortController();
+    const take = createTakePattern(startListening, internalTaskController.signal);
+    const autoJoinPromises = [];
+    try {
+      entry.pending.add(internalTaskController);
+      await Promise.resolve(entry.effect(
+        action,
+        // Use assign() rather than ... to avoid extra helper functions added to bundle
+        assign({}, api, {
+          getOriginalState,
+          condition: (predicate, timeout) => take(predicate, timeout).then(Boolean),
+          take,
+          delay: createDelay(internalTaskController.signal),
+          pause: createPause(internalTaskController.signal),
+          extra,
+          signal: internalTaskController.signal,
+          fork: createFork(internalTaskController.signal, autoJoinPromises),
+          unsubscribe: entry.unsubscribe,
+          subscribe: () => {
+            listenerMap.set(entry.id, entry);
+          },
+          cancelActiveListeners: () => {
+            entry.pending.forEach((controller, _, set) => {
+              if (controller !== internalTaskController) {
+                abortControllerWithReason(controller, listenerCancelled);
+                set.delete(controller);
+              }
+            });
+          },
+          cancel: () => {
+            abortControllerWithReason(internalTaskController, listenerCancelled);
+            entry.pending.delete(internalTaskController);
+          },
+          throwIfCancelled: () => {
+            validateActive(internalTaskController.signal);
+          }
+        })
+      ));
+    } catch (listenerError) {
+      if (!(listenerError instanceof TaskAbortError)) {
+        safelyNotifyError(onError, listenerError, {
+          raisedBy: "effect"
+        });
+      }
+    } finally {
+      await Promise.all(autoJoinPromises);
+      abortControllerWithReason(internalTaskController, listenerCompleted);
+      entry.pending.delete(internalTaskController);
+    }
+  };
+  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);
+  const middleware = (api) => (next) => (action) => {
+    if (!isAction3(action)) {
+      return next(action);
+    }
+    if (addListener.match(action)) {
+      return startListening(action.payload);
+    }
+    if (clearAllListeners.match(action)) {
+      clearListenerMiddleware();
+      return;
+    }
+    if (removeListener.match(action)) {
+      return stopListening(action.payload);
+    }
+    let originalState = api.getState();
+    const getOriginalState = () => {
+      if (originalState === INTERNAL_NIL_TOKEN) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(23) : `${alm}: getOriginalState can only be called synchronously`);
+      }
+      return originalState;
+    };
+    let result;
+    try {
+      result = next(action);
+      if (listenerMap.size > 0) {
+        const currentState = api.getState();
+        const listenerEntries = Array.from(listenerMap.values());
+        for (const entry of listenerEntries) {
+          let runListener = false;
+          try {
+            runListener = entry.predicate(action, currentState, originalState);
+          } catch (predicateError) {
+            runListener = false;
+            safelyNotifyError(onError, predicateError, {
+              raisedBy: "predicate"
+            });
+          }
+          if (!runListener) {
+            continue;
+          }
+          notifyListener(entry, action, api, getOriginalState);
+        }
+      }
+    } finally {
+      originalState = INTERNAL_NIL_TOKEN;
+    }
+    return result;
+  };
+  return {
+    middleware,
+    startListening,
+    stopListening,
+    clearListeners: clearListenerMiddleware
+  };
+};
+
+// src/dynamicMiddleware/index.ts
+import { compose as compose3 } from "redux";
+var createMiddlewareEntry = (middleware) => ({
+  middleware,
+  applied: /* @__PURE__ */ new Map()
+});
+var matchInstance = (instanceId) => (action) => action?.meta?.instanceId === instanceId;
+var createDynamicMiddleware = () => {
+  const instanceId = nanoid();
+  const middlewareMap = /* @__PURE__ */ new Map();
+  const withMiddleware = Object.assign(createAction("dynamicMiddleware/add", (...middlewares) => ({
+    payload: middlewares,
+    meta: {
+      instanceId
+    }
+  })), {
+    withTypes: () => withMiddleware
+  });
+  const addMiddleware = Object.assign(function addMiddleware2(...middlewares) {
+    middlewares.forEach((middleware2) => {
+      getOrInsertComputed(middlewareMap, middleware2, createMiddlewareEntry);
+    });
+  }, {
+    withTypes: () => addMiddleware
+  });
+  const getFinalMiddleware = (api) => {
+    const appliedMiddleware = Array.from(middlewareMap.values()).map((entry) => getOrInsertComputed(entry.applied, api, entry.middleware));
+    return compose3(...appliedMiddleware);
+  };
+  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));
+  const middleware = (api) => (next) => (action) => {
+    if (isWithMiddleware(action)) {
+      addMiddleware(...action.payload);
+      return api.dispatch;
+    }
+    return getFinalMiddleware(api)(next)(action);
+  };
+  return {
+    middleware,
+    addMiddleware,
+    withMiddleware,
+    instanceId
+  };
+};
+
+// src/combineSlices.ts
+import { combineReducers as combineReducers2 } from "redux";
+var isSliceLike = (maybeSliceLike) => "reducerPath" in maybeSliceLike && typeof maybeSliceLike.reducerPath === "string";
+var getReducers = (slices) => slices.flatMap((sliceOrMap) => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer]] : Object.entries(sliceOrMap));
+var ORIGINAL_STATE = Symbol.for("rtk-state-proxy-original");
+var isStateProxy = (value) => !!value && !!value[ORIGINAL_STATE];
+var stateProxyMap = /* @__PURE__ */ new WeakMap();
+var createStateProxy = (state, reducerMap, initialStateCache) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {
+  get: (target, prop, receiver) => {
+    if (prop === ORIGINAL_STATE) return target;
+    const result = Reflect.get(target, prop, receiver);
+    if (typeof result === "undefined") {
+      const cached = initialStateCache[prop];
+      if (typeof cached !== "undefined") return cached;
+      const reducer = reducerMap[prop];
+      if (reducer) {
+        const reducerResult = reducer(void 0, {
+          type: nanoid()
+        });
+        if (typeof reducerResult === "undefined") {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(24) : `The slice reducer for key "${prop.toString()}" returned undefined when called for selector(). If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);
+        }
+        initialStateCache[prop] = reducerResult;
+        return reducerResult;
+      }
+    }
+    return result;
+  }
+}));
+var original = (state) => {
+  if (!isStateProxy(state)) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(25) : "original must be used on state Proxy");
+  }
+  return state[ORIGINAL_STATE];
+};
+var emptyObject = {};
+var noopReducer = (state = emptyObject) => state;
+function combineSlices(...slices) {
+  const reducerMap = Object.fromEntries(getReducers(slices));
+  const getReducer = () => Object.keys(reducerMap).length ? combineReducers2(reducerMap) : noopReducer;
+  let reducer = getReducer();
+  function combinedReducer(state, action) {
+    return reducer(state, action);
+  }
+  combinedReducer.withLazyLoadedSlices = () => combinedReducer;
+  const initialStateCache = {};
+  const inject = (slice, config = {}) => {
+    const {
+      reducerPath,
+      reducer: reducerToInject
+    } = slice;
+    const currentReducer = reducerMap[reducerPath];
+    if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {
+      if (typeof process !== "undefined" && process.env.NODE_ENV === "development") {
+        console.error(`called \`inject\` to override already-existing reducer ${reducerPath} without specifying \`overrideExisting: true\``);
+      }
+      return combinedReducer;
+    }
+    if (config.overrideExisting && currentReducer !== reducerToInject) {
+      delete initialStateCache[reducerPath];
+    }
+    reducerMap[reducerPath] = reducerToInject;
+    reducer = getReducer();
+    return combinedReducer;
+  };
+  const selector = Object.assign(function makeSelector(selectorFn, selectState) {
+    return function selector2(state, ...args) {
+      return selectorFn(createStateProxy(selectState ? selectState(state, ...args) : state, reducerMap, initialStateCache), ...args);
+    };
+  }, {
+    original
+  });
+  return Object.assign(combinedReducer, {
+    inject,
+    selector
+  });
+}
+
+// src/formatProdErrorMessage.ts
+function formatProdErrorMessage(code) {
+  return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;
+}
+export {
+  ReducerType,
+  SHOULD_AUTOBATCH,
+  TaskAbortError,
+  Tuple,
+  addListener,
+  asyncThunkCreator,
+  autoBatchEnhancer,
+  buildCreateSlice,
+  clearAllListeners,
+  combineSlices,
+  configureStore,
+  createAction,
+  createActionCreatorInvariantMiddleware,
+  createAsyncThunk,
+  createDraftSafeSelector,
+  createDraftSafeSelectorCreator,
+  createDynamicMiddleware,
+  createEntityAdapter,
+  createImmutableStateInvariantMiddleware,
+  createListenerMiddleware,
+  produce as createNextState,
+  createReducer,
+  createSelector,
+  createSelectorCreator2 as createSelectorCreator,
+  createSerializableStateInvariantMiddleware,
+  createSlice,
+  current3 as current,
+  findNonSerializableValue,
+  formatProdErrorMessage,
+  freeze,
+  isActionCreator,
+  isAllOf,
+  isAnyOf,
+  isAsyncThunkAction,
+  isDraft5 as isDraft,
+  isFSA as isFluxStandardAction,
+  isFulfilled,
+  isImmutableDefault,
+  isPending,
+  isPlain,
+  isRejected,
+  isRejectedWithValue,
+  lruMemoize,
+  miniSerializeError,
+  nanoid,
+  original2 as original,
+  prepareAutoBatched,
+  removeListener,
+  unwrapResult,
+  weakMapMemoize2 as weakMapMemoize
+};
+//# sourceMappingURL=redux-toolkit.modern.mjs.map
Index: node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs.map
===================================================================
--- node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/index.ts","../src/createDraftSafeSelector.ts","../src/configureStore.ts","../src/devtoolsExtension.ts","../src/getDefaultMiddleware.ts","../src/createAction.ts","../src/tsHelpers.ts","../src/actionCreatorInvariantMiddleware.ts","../src/utils.ts","../src/immutableStateInvariantMiddleware.ts","../src/serializableStateInvariantMiddleware.ts","../src/autoBatchEnhancer.ts","../src/getDefaultEnhancers.ts","../src/createReducer.ts","../src/mapBuilders.ts","../src/matchers.ts","../src/nanoid.ts","../src/createAsyncThunk.ts","../src/createSlice.ts","../src/entities/entity_state.ts","../src/entities/state_selectors.ts","../src/entities/state_adapter.ts","../src/entities/utils.ts","../src/entities/unsorted_state_adapter.ts","../src/entities/sorted_state_adapter.ts","../src/entities/create_adapter.ts","../src/listenerMiddleware/index.ts","../src/listenerMiddleware/exceptions.ts","../src/listenerMiddleware/utils.ts","../src/listenerMiddleware/task.ts","../src/dynamicMiddleware/index.ts","../src/combineSlices.ts","../src/formatProdErrorMessage.ts"],"sourcesContent":["// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from './formatProdErrorMessage';\nexport * from 'redux';\nexport { produce as createNextState, current, freeze, original, isDraft } from 'immer';\nexport type { Draft } from 'immer';\nexport { createSelector, createSelectorCreator, lruMemoize, weakMapMemoize } from 'reselect';\nexport type { Selector, OutputSelector } from 'reselect';\nexport { createDraftSafeSelector, createDraftSafeSelectorCreator } from './createDraftSafeSelector';\nexport type { ThunkAction, ThunkDispatch, ThunkMiddleware } from 'redux-thunk';\nexport {\n// js\nconfigureStore } from './configureStore';\nexport type {\n// types\nConfigureStoreOptions, EnhancedStore } from './configureStore';\nexport type { DevToolsEnhancerOptions } from './devtoolsExtension';\nexport {\n// js\ncreateAction, isActionCreator, isFSA as isFluxStandardAction } from './createAction';\nexport type {\n// types\nPayloadAction, PayloadActionCreator, ActionCreatorWithNonInferrablePayload, ActionCreatorWithOptionalPayload, ActionCreatorWithPayload, ActionCreatorWithoutPayload, ActionCreatorWithPreparedPayload, PrepareAction } from './createAction';\nexport {\n// js\ncreateReducer } from './createReducer';\nexport type {\n// types\nActions, CaseReducer, CaseReducers } from './createReducer';\nexport {\n// js\ncreateSlice, buildCreateSlice, asyncThunkCreator, ReducerType } from './createSlice';\nexport type {\n// types\nCreateSliceOptions, Slice, CaseReducerActions, SliceCaseReducers, ValidateSliceCaseReducers, CaseReducerWithPrepare, ReducerCreators, SliceSelectors } from './createSlice';\nexport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nexport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nexport {\n// js\ncreateImmutableStateInvariantMiddleware, isImmutableDefault } from './immutableStateInvariantMiddleware';\nexport type {\n// types\nImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\nexport {\n// js\ncreateSerializableStateInvariantMiddleware, findNonSerializableValue, isPlain } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nSerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nActionReducerMapBuilder } from './mapBuilders';\nexport { Tuple } from './utils';\nexport { createEntityAdapter } from './entities/create_adapter';\nexport type { EntityState, EntityAdapter, EntitySelectors, EntityStateAdapter, EntityId, Update, IdSelector, Comparer } from './entities/models';\nexport { createAsyncThunk, unwrapResult, miniSerializeError } from './createAsyncThunk';\nexport type { AsyncThunk, AsyncThunkOptions, AsyncThunkAction, AsyncThunkPayloadCreatorReturnValue, AsyncThunkPayloadCreator, GetState, GetThunkAPI, SerializedError, CreateAsyncThunkFunction } from './createAsyncThunk';\nexport {\n// js\nisAllOf, isAnyOf, isPending, isRejected, isFulfilled, isAsyncThunkAction, isRejectedWithValue } from './matchers';\nexport type {\n// types\nActionMatchingAllOf, ActionMatchingAnyOf } from './matchers';\nexport { nanoid } from './nanoid';\nexport type { ListenerEffect, ListenerMiddleware, ListenerEffectAPI, ListenerMiddlewareInstance, CreateListenerMiddlewareOptions, ListenerErrorHandler, TypedStartListening, TypedAddListener, TypedStopListening, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions, ForkedTaskExecutor, ForkedTask, ForkedTaskAPI, AsyncTaskExecutor, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult } from './listenerMiddleware/index';\nexport type { AnyListenerPredicate } from './listenerMiddleware/types';\nexport { createListenerMiddleware, addListener, removeListener, clearAllListeners, TaskAbortError } from './listenerMiddleware/index';\nexport type { AddMiddleware, DynamicDispatch, DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './dynamicMiddleware/types';\nexport { createDynamicMiddleware } from './dynamicMiddleware/index';\nexport { SHOULD_AUTOBATCH, prepareAutoBatched, autoBatchEnhancer } from './autoBatchEnhancer';\nexport type { AutoBatchOptions } from './autoBatchEnhancer';\nexport { combineSlices } from './combineSlices';\nexport type { CombinedSliceReducer, WithSlice } from './combineSlices';\nexport type { ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions, SafePromise } from './tsHelpers';\nexport { formatProdErrorMessage } from './formatProdErrorMessage';","import { current, isDraft } from 'immer';\nimport { createSelectorCreator, weakMapMemoize } from 'reselect';\nexport const createDraftSafeSelectorCreator: typeof createSelectorCreator = (...args: unknown[]) => {\n  const createSelector = (createSelectorCreator as any)(...args);\n  const createDraftSafeSelector = Object.assign((...args: unknown[]) => {\n    const selector = createSelector(...args);\n    const wrappedSelector = (value: unknown, ...rest: unknown[]) => selector(isDraft(value) ? current(value) : value, ...rest);\n    Object.assign(wrappedSelector, selector);\n    return wrappedSelector as any;\n  }, {\n    withTypes: () => createDraftSafeSelector\n  });\n  return createDraftSafeSelector;\n};\n\n/**\n * \"Draft-Safe\" version of `reselect`'s `createSelector`:\n * If an `immer`-drafted object is passed into the resulting selector's first argument,\n * the selector will act on the current draft value, instead of returning a cached value\n * that might be possibly outdated if the draft has been modified since.\n * @public\n */\nexport const createDraftSafeSelector = /* @__PURE__ */\ncreateDraftSafeSelectorCreator(weakMapMemoize);","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Reducer, ReducersMapObject, Middleware, Action, StoreEnhancer, Store, UnknownAction } from 'redux';\nimport { applyMiddleware, createStore, compose, combineReducers, isPlainObject } from 'redux';\nimport type { DevToolsEnhancerOptions as DevToolsOptions } from './devtoolsExtension';\nimport { composeWithDevTools } from './devtoolsExtension';\nimport type { ThunkMiddlewareFor, GetDefaultMiddleware } from './getDefaultMiddleware';\nimport { buildGetDefaultMiddleware } from './getDefaultMiddleware';\nimport type { ExtractDispatchExtensions, ExtractStoreExtensions, ExtractStateExtensions, UnknownIfNonSpecific } from './tsHelpers';\nimport type { Tuple } from './utils';\nimport type { GetDefaultEnhancers } from './getDefaultEnhancers';\nimport { buildGetDefaultEnhancers } from './getDefaultEnhancers';\n\n/**\n * Options for `configureStore()`.\n *\n * @public\n */\nexport interface ConfigureStoreOptions<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<Middlewares<S>>, E extends Tuple<Enhancers> = Tuple<Enhancers>, P = S> {\n  /**\n   * A single reducer function that will be used as the root reducer, or an\n   * object of slice reducers that will be passed to `combineReducers()`.\n   */\n  reducer: Reducer<S, A, P> | ReducersMapObject<S, A, P>;\n\n  /**\n   * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.\n   * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.\n   *\n   * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`\n   * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage\n   */\n  middleware?: (getDefaultMiddleware: GetDefaultMiddleware<S>) => M;\n\n  /**\n   * Whether to enable Redux DevTools integration. Defaults to `true`.\n   *\n   * Additional configuration can be done by passing Redux DevTools options\n   */\n  devTools?: boolean | DevToolsOptions;\n\n  /**\n   * Whether to check for duplicate middleware instances. Defaults to `true`.\n   */\n  duplicateMiddlewareCheck?: boolean;\n\n  /**\n   * The initial state, same as Redux's createStore.\n   * You may optionally specify it to hydrate the state\n   * from the server in universal apps, or to restore a previously serialized\n   * user session. If you use `combineReducers()` to produce the root reducer\n   * function (either directly or indirectly by passing an object as `reducer`),\n   * this must be an object with the same shape as the reducer map keys.\n   */\n  // we infer here, and instead complain if the reducer doesn't match\n  preloadedState?: P;\n\n  /**\n   * The store enhancers to apply. See Redux's `createStore()`.\n   * All enhancers will be included before the DevTools Extension enhancer.\n   * If you need to customize the order of enhancers, supply a callback\n   * function that will receive a `getDefaultEnhancers` function that returns a Tuple,\n   * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).\n   * If you only need to add middleware, you can use the `middleware` parameter instead.\n   */\n  enhancers?: (getDefaultEnhancers: GetDefaultEnhancers<M>) => E;\n}\nexport type Middlewares<S> = ReadonlyArray<Middleware<{}, S>>;\ntype Enhancers = ReadonlyArray<StoreEnhancer>;\n\n/**\n * A Redux store returned by `configureStore()`. Supports dispatching\n * side-effectful _thunks_ in addition to plain actions.\n *\n * @public\n */\nexport type EnhancedStore<S = any, A extends Action = UnknownAction, E extends Enhancers = Enhancers> = ExtractStoreExtensions<E> & Store<S, A, UnknownIfNonSpecific<ExtractStateExtensions<E>>>;\n\n/**\n * A friendly abstraction over the standard Redux `createStore()` function.\n *\n * @param options The store configuration.\n * @returns A configured Redux store.\n *\n * @public\n */\nexport function configureStore<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<[ThunkMiddlewareFor<S>]>, E extends Tuple<Enhancers> = Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>, StoreEnhancer]>, P = S>(options: ConfigureStoreOptions<S, A, M, E, P>): EnhancedStore<S, A, E> {\n  const getDefaultMiddleware = buildGetDefaultMiddleware<S>();\n  const {\n    reducer = undefined,\n    middleware,\n    devTools = true,\n    duplicateMiddlewareCheck = true,\n    preloadedState = undefined,\n    enhancers = undefined\n  } = options || {};\n  let rootReducer: Reducer<S, A, P>;\n  if (typeof reducer === 'function') {\n    rootReducer = reducer;\n  } else if (isPlainObject(reducer)) {\n    rootReducer = combineReducers(reducer) as unknown as Reducer<S, A, P>;\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(1) : '`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\n  }\n  if (process.env.NODE_ENV !== 'production' && middleware && typeof middleware !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(2) : '`middleware` field must be a callback');\n  }\n  let finalMiddleware: Tuple<Middlewares<S>>;\n  if (typeof middleware === 'function') {\n    finalMiddleware = middleware(getDefaultMiddleware);\n    if (process.env.NODE_ENV !== 'production' && !Array.isArray(finalMiddleware)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(3) : 'when using a middleware builder function, an array of middleware must be returned');\n    }\n  } else {\n    finalMiddleware = getDefaultMiddleware();\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(4) : 'each middleware provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && duplicateMiddlewareCheck) {\n    let middlewareReferences = new Set<Middleware<any, S>>();\n    finalMiddleware.forEach(middleware => {\n      if (middlewareReferences.has(middleware)) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(42) : 'Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.');\n      }\n      middlewareReferences.add(middleware);\n    });\n  }\n  let finalCompose = compose;\n  if (devTools) {\n    finalCompose = composeWithDevTools({\n      // Enable capture of stack traces for dispatched Redux actions\n      trace: process.env.NODE_ENV !== 'production',\n      ...(typeof devTools === 'object' && devTools)\n    });\n  }\n  const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n  const getDefaultEnhancers = buildGetDefaultEnhancers<M>(middlewareEnhancer);\n  if (process.env.NODE_ENV !== 'production' && enhancers && typeof enhancers !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : '`enhancers` field must be a callback');\n  }\n  let storeEnhancers = typeof enhancers === 'function' ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n  if (process.env.NODE_ENV !== 'production' && !Array.isArray(storeEnhancers)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : '`enhancers` callback must return an array');\n  }\n  if (process.env.NODE_ENV !== 'production' && storeEnhancers.some((item: any) => typeof item !== 'function')) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : 'each enhancer provided to configureStore must be a function');\n  }\n  if (process.env.NODE_ENV !== 'production' && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n    console.error('middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`');\n  }\n  const composedEnhancer: StoreEnhancer<any> = finalCompose(...storeEnhancers);\n  return createStore(rootReducer, preloadedState as P, composedEnhancer);\n}","import type { Action, ActionCreator, StoreEnhancer } from 'redux';\nimport { compose } from 'redux';\n\n/**\r\n * @public\r\n */\nexport interface DevToolsEnhancerOptions {\n  /**\r\n   * the instance name to be showed on the monitor page. Default value is `document.title`.\r\n   * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.\r\n   */\n  name?: string;\n  /**\r\n   * action creators functions to be available in the Dispatcher.\r\n   */\n  actionCreators?: ActionCreator<any>[] | {\n    [key: string]: ActionCreator<any>;\n  };\n  /**\r\n   * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.\r\n   * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.\r\n   * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).\r\n   *\r\n   * @default 500 ms.\r\n   */\n  latency?: number;\n  /**\r\n   * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.\r\n   *\r\n   * @default 50\r\n   */\n  maxAge?: number;\n  /**\r\n   * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you\r\n   * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`\r\n   * functions.\r\n   */\n  serialize?: boolean | {\n    /**\r\n     * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).\r\n     * - `false` - will handle also circular references.\r\n     * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.\r\n     * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.\r\n     *   For each of them you can indicate if to include (by setting as `true`).\r\n     *   For `function` key you can also specify a custom function which handles serialization.\r\n     *   See [`jsan`](https://github.com/kolodny/jsan) for more details.\r\n     */\n    options?: undefined | boolean | {\n      date?: true;\n      regex?: true;\n      undefined?: true;\n      error?: true;\n      symbol?: true;\n      map?: true;\n      set?: true;\n      function?: true | ((fn: (...args: any[]) => any) => string);\n    };\n    /**\r\n     * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.\r\n     * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)\r\n     * key. So you can deserialize it back while importing or persisting data.\r\n     * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):\r\n     */\n    replacer?: (key: string, value: unknown) => any;\n    /**\r\n     * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)\r\n     * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)\r\n     * as an example on how to serialize special data types and get them back.\r\n     */\n    reviver?: (key: string, value: unknown) => any;\n    /**\r\n     * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).\r\n     * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.\r\n     * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.\r\n     */\n    immutable?: any;\n    /**\r\n     * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...\r\n     */\n    refs?: any;\n  };\n  /**\r\n   * function which takes `action` object and id number as arguments, and should return `action` object back.\r\n   */\n  actionSanitizer?: <A extends Action>(action: A, id: number) => A;\n  /**\r\n   * function which takes `state` object and index as arguments, and should return `state` object back.\r\n   */\n  stateSanitizer?: <S>(state: S, index: number) => S;\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsDenylist?: string | string[];\n  /**\r\n   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n   */\n  actionsAllowlist?: string | string[];\n  /**\r\n   * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.\r\n   * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.\r\n   */\n  predicate?: <S, A extends Action>(state: S, action: A) => boolean;\n  /**\r\n   * if specified as `false`, it will not record the changes till clicking on `Start recording` button.\r\n   * Available only for Redux enhancer, for others use `autoPause`.\r\n   *\r\n   * @default true\r\n   */\n  shouldRecordChanges?: boolean;\n  /**\r\n   * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.\r\n   * If not specified, will commit when paused. Available only for Redux enhancer.\r\n   *\r\n   * @default \"@@PAUSED\"\"\r\n   */\n  pauseActionType?: string;\n  /**\r\n   * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\r\n   * Not available for Redux enhancer (as it already does it but storing the data to be sent).\r\n   *\r\n   * @default false\r\n   */\n  autoPause?: boolean;\n  /**\r\n   * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.\r\n   * Available only for Redux enhancer.\r\n   *\r\n   * @default false\r\n   */\n  shouldStartLocked?: boolean;\n  /**\r\n   * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.\r\n   *\r\n   * @default true\r\n   */\n  shouldHotReload?: boolean;\n  /**\r\n   * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.\r\n   *\r\n   * @default false\r\n   */\n  shouldCatchErrors?: boolean;\n  /**\r\n   * If you want to restrict the extension, specify the features you allow.\r\n   * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.\r\n   * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.\r\n   * Otherwise, you'll get/set the data right from the monitor part.\r\n   */\n  features?: {\n    /**\r\n     * start/pause recording of dispatched actions\r\n     */\n    pause?: boolean;\n    /**\r\n     * lock/unlock dispatching actions and side effects\r\n     */\n    lock?: boolean;\n    /**\r\n     * persist states on page reloading\r\n     */\n    persist?: boolean;\n    /**\r\n     * export history of actions in a file\r\n     */\n    export?: boolean | 'custom';\n    /**\r\n     * import history of actions from a file\r\n     */\n    import?: boolean | 'custom';\n    /**\r\n     * jump back and forth (time travelling)\r\n     */\n    jump?: boolean;\n    /**\r\n     * skip (cancel) actions\r\n     */\n    skip?: boolean;\n    /**\r\n     * drag and drop actions in the history list\r\n     */\n    reorder?: boolean;\n    /**\r\n     * dispatch custom actions or action creators\r\n     */\n    dispatch?: boolean;\n    /**\r\n     * generate tests for the selected actions\r\n     */\n    test?: boolean;\n  };\n  /**\r\n   * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.\r\n   * Defaults to false.\r\n   */\n  trace?: boolean | (<A extends Action>(action: A) => string);\n  /**\r\n   * The maximum number of stack trace entries to record per action. Defaults to 10.\r\n   */\n  traceLimit?: number;\n}\ntype Compose = typeof compose;\ninterface ComposeWithDevTools {\n  (options: DevToolsEnhancerOptions): Compose;\n  <StoreExt extends {}>(...funcs: StoreEnhancer<StoreExt>[]): StoreEnhancer<StoreExt>;\n}\n\n/**\r\n * @public\r\n */\nexport const composeWithDevTools: ComposeWithDevTools = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\n  if (arguments.length === 0) return undefined;\n  if (typeof arguments[0] === 'object') return compose;\n  return compose.apply(null, arguments as any as Function[]);\n};\n\n/**\r\n * @public\r\n */\nexport const devToolsEnhancer: {\n  (options: DevToolsEnhancerOptions): StoreEnhancer<any>;\n} = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION__ : function () {\n  return function (noop) {\n    return noop;\n  };\n};","import type { Middleware, UnknownAction } from 'redux';\nimport type { ThunkMiddleware } from 'redux-thunk';\nimport { thunk as thunkMiddleware, withExtraArgument } from 'redux-thunk';\nimport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nimport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nimport type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\n/* PROD_START_REMOVE_UMD */\nimport { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware';\n/* PROD_STOP_REMOVE_UMD */\n\nimport type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nimport { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware';\nimport type { ExcludeFromTuple } from './tsHelpers';\nimport { Tuple } from './utils';\nfunction isBoolean(x: any): x is boolean {\n  return typeof x === 'boolean';\n}\ninterface ThunkOptions<E = any> {\n  extraArgument: E;\n}\ninterface GetDefaultMiddlewareOptions {\n  thunk?: boolean | ThunkOptions;\n  immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions;\n  serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions;\n  actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions;\n}\nexport type ThunkMiddlewareFor<S, O extends GetDefaultMiddlewareOptions = {}> = O extends {\n  thunk: false;\n} ? never : O extends {\n  thunk: {\n    extraArgument: infer E;\n  };\n} ? ThunkMiddleware<S, UnknownAction, E> : ThunkMiddleware<S, UnknownAction>;\nexport type GetDefaultMiddleware<S = any> = <O extends GetDefaultMiddlewareOptions = {\n  thunk: true;\n  immutableCheck: true;\n  serializableCheck: true;\n  actionCreatorCheck: true;\n}>(options?: O) => Tuple<ExcludeFromTuple<[ThunkMiddlewareFor<S, O>], never>>;\nexport const buildGetDefaultMiddleware = <S = any,>(): GetDefaultMiddleware<S> => function getDefaultMiddleware(options) {\n  const {\n    thunk = true,\n    immutableCheck = true,\n    serializableCheck = true,\n    actionCreatorCheck = true\n  } = options ?? {};\n  let middlewareArray = new Tuple<Middleware[]>();\n  if (thunk) {\n    if (isBoolean(thunk)) {\n      middlewareArray.push(thunkMiddleware);\n    } else {\n      middlewareArray.push(withExtraArgument(thunk.extraArgument));\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (immutableCheck) {\n      /* PROD_START_REMOVE_UMD */\n      let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(immutableCheck)) {\n        immutableOptions = immutableCheck;\n      }\n      middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n      /* PROD_STOP_REMOVE_UMD */\n    }\n    if (serializableCheck) {\n      let serializableOptions: SerializableStateInvariantMiddlewareOptions = {};\n      if (!isBoolean(serializableCheck)) {\n        serializableOptions = serializableCheck;\n      }\n      middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n    }\n    if (actionCreatorCheck) {\n      let actionCreatorOptions: ActionCreatorInvariantMiddlewareOptions = {};\n      if (!isBoolean(actionCreatorCheck)) {\n        actionCreatorOptions = actionCreatorCheck;\n      }\n      middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n    }\n  }\n  return middlewareArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport { isAction } from 'redux';\nimport type { IsUnknownOrNonInferrable, IfMaybeUndefined, IfVoid, IsAny } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\n\n/**\n * An action with a string type and an associated payload. This is the\n * type of action returned by `createAction()` action creators.\n *\n * @template P The type of the action's payload.\n * @template T the type used for the action type.\n * @template M The type of the action's meta (optional)\n * @template E The type of the action's error (optional)\n *\n * @public\n */\nexport type PayloadAction<P = void, T extends string = string, M = never, E = never> = {\n  payload: P;\n  type: T;\n} & ([M] extends [never] ? {} : {\n  meta: M;\n}) & ([E] extends [never] ? {} : {\n  error: E;\n});\n\n/**\n * A \"prepare\" method to be used as the second parameter of `createAction`.\n * Takes any number of arguments and returns a Flux Standard Action without\n * type (will be added later) that *must* contain a payload (might be undefined).\n *\n * @public\n */\nexport type PrepareAction<P> = ((...args: any[]) => {\n  payload: P;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  error: any;\n}) | ((...args: any[]) => {\n  payload: P;\n  meta: any;\n  error: any;\n});\n\n/**\n * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.\n *\n * @internal\n */\nexport type _ActionCreatorWithPreparedPayload<PA extends PrepareAction<any> | void, T extends string = string> = PA extends PrepareAction<infer P> ? ActionCreatorWithPreparedPayload<Parameters<PA>, P, T, ReturnType<PA> extends {\n  error: infer E;\n} ? E : never, ReturnType<PA> extends {\n  meta: infer M;\n} ? M : never> : void;\n\n/**\n * Basic type for all action creators.\n *\n * @inheritdoc {redux#ActionCreator}\n */\nexport type BaseActionCreator<P, T extends string, M = never, E = never> = {\n  type: T;\n  match: (action: unknown) => action is PayloadAction<P, T, M, E>;\n};\n\n/**\n * An action creator that takes multiple arguments that are passed\n * to a `PrepareAction` method to create the final Action.\n * @typeParam Args arguments for the action creator function\n * @typeParam P `payload` type\n * @typeParam T `type` name\n * @typeParam E optional `error` type\n * @typeParam M optional `meta` type\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPreparedPayload<Args extends unknown[], P, T extends string = string, E = never, M = never> extends BaseActionCreator<P, T, M, E> {\n  /**\n   * Calling this {@link redux#ActionCreator} with `Args` will return\n   * an Action with a payload of type `P` and (depending on the `PrepareAction`\n   * method used) a `meta`- and `error` property of types `M` and `E` respectively.\n   */\n  (...args: Args): PayloadAction<P, T, M, E>;\n}\n\n/**\n * An action creator of type `T` that takes an optional payload of type `P`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithOptionalPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`.\n   * Calling it without an argument will return a PayloadAction with a payload of `undefined`.\n   */\n  (payload?: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` that takes no payload.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithoutPayload<T extends string = string> extends BaseActionCreator<undefined, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} will\n   * return a {@link PayloadAction} of type `T` with a payload of `undefined`\n   */\n  (noArgument: void): PayloadAction<undefined, T>;\n}\n\n/**\n * An action creator of type `T` that requires a payload of type P.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload of `P`\n   */\n  (payload: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithNonInferrablePayload<T extends string = string> extends BaseActionCreator<unknown, T> {\n  /**\n   * Calling this {@link redux#ActionCreator} with an argument will\n   * return a {@link PayloadAction} of type `T` with a payload\n   * of exactly the type of the argument.\n   */\n  <PT extends unknown>(payload: PT): PayloadAction<PT, T>;\n}\n\n/**\n * An action creator that produces actions with a `payload` attribute.\n *\n * @typeParam P the `payload` type\n * @typeParam T the `type` of the resulting action\n * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.\n *\n * @public\n */\nexport type PayloadActionCreator<P = void, T extends string = string, PA extends PrepareAction<P> | void = void> = IfPrepareActionMethodProvided<PA, _ActionCreatorWithPreparedPayload<PA, T>,\n// else\nIsAny<P, ActionCreatorWithPayload<any, T>, IsUnknownOrNonInferrable<P, ActionCreatorWithNonInferrablePayload<T>,\n// else\nIfVoid<P, ActionCreatorWithoutPayload<T>,\n// else\nIfMaybeUndefined<P, ActionCreatorWithOptionalPayload<P, T>,\n// else\nActionCreatorWithPayload<P, T>>>>>>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<P = void, T extends string = string>(type: T): PayloadActionCreator<P, T>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<PA extends PrepareAction<any>, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>;\nexport function createAction(type: string, prepareAction?: Function): any {\n  function actionCreator(...args: any[]) {\n    if (prepareAction) {\n      let prepared = prepareAction(...args);\n      if (!prepared) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(0) : 'prepareAction did not return an object');\n      }\n      return {\n        type,\n        payload: prepared.payload,\n        ...('meta' in prepared && {\n          meta: prepared.meta\n        }),\n        ...('error' in prepared && {\n          error: prepared.error\n        })\n      };\n    }\n    return {\n      type,\n      payload: args[0]\n    };\n  }\n  actionCreator.toString = () => `${type}`;\n  actionCreator.type = type;\n  actionCreator.match = (action: unknown): action is PayloadAction => isAction(action) && action.type === type;\n  return actionCreator;\n}\n\n/**\n * Returns true if value is an RTK-like action creator, with a static type property and match method.\n */\nexport function isActionCreator(action: unknown): action is BaseActionCreator<unknown, string> & Function {\n  return typeof action === 'function' && 'type' in action &&\n  // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n  hasMatchFunction(action as any);\n}\n\n/**\n * Returns true if value is an action with a string type and valid Flux Standard Action keys.\n */\nexport function isFSA(action: unknown): action is {\n  type: string;\n  payload?: unknown;\n  error?: unknown;\n  meta?: unknown;\n} {\n  return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key: string) {\n  return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1;\n}\n\n// helper types for more readable typings\n\ntype IfPrepareActionMethodProvided<PA extends PrepareAction<any> | void, True, False> = PA extends ((...args: any[]) => any) ? True : False;","import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n  Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n  (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n  match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n  return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n  __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n  return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}","import type { Middleware } from 'redux';\nimport { isActionCreator as isRTKAction } from './createAction';\nexport interface ActionCreatorInvariantMiddlewareOptions {\n  /**\n   * The function to identify whether a value is an action creator.\n   * The default checks for a function with a static type property and match method.\n   */\n  isActionCreator?: (action: unknown) => action is Function & {\n    type?: unknown;\n  };\n}\nexport function getMessage(type?: unknown) {\n  const splitType = type ? `${type}`.split('/') : [];\n  const actionName = splitType[splitType.length - 1] || 'actionCreator';\n  return `Detected an action creator with type \"${type || 'unknown'}\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nexport function createActionCreatorInvariantMiddleware(options: ActionCreatorInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  }\n  const {\n    isActionCreator = isRTKAction\n  } = options;\n  return () => next => action => {\n    if (isActionCreator(action)) {\n      console.warn(getMessage(action.type));\n    }\n    return next(action);\n  };\n}","import { produce as createNextState, isDraftable } from 'immer';\nexport function getTimeMeasureUtils(maxDelay: number, fnName: string) {\n  let elapsed = 0;\n  return {\n    measureTime<T>(fn: () => T): T {\n      const started = Date.now();\n      try {\n        return fn();\n      } finally {\n        const finished = Date.now();\n        elapsed += finished - started;\n      }\n    },\n    warnIfExceeded() {\n      if (elapsed > maxDelay) {\n        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n      }\n    }\n  };\n}\nexport function delay(ms: number) {\n  return new Promise(resolve => setTimeout(resolve, ms));\n}\nexport class Tuple<Items extends ReadonlyArray<unknown> = []> extends Array<Items[number]> {\n  constructor(length: number);\n  constructor(...items: Items);\n  constructor(...items: any[]) {\n    super(...items);\n    Object.setPrototypeOf(this, Tuple.prototype);\n  }\n  static override get [Symbol.species]() {\n    return Tuple as any;\n  }\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n  override concat(...arr: any[]) {\n    return super.concat.apply(this, arr);\n  }\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n  prepend(...arr: any[]) {\n    if (arr.length === 1 && Array.isArray(arr[0])) {\n      return new Tuple(...arr[0].concat(this));\n    }\n    return new Tuple(...arr.concat(this));\n  }\n}\nexport function freezeDraftable<T>(val: T) {\n  return isDraftable(val) ? createNextState(val, () => {}) : val;\n}\nexport function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, value).get(key) as V;\n}\nexport function getOrInsertComputed<K extends object, V>(map: WeakMap<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, compute: (key: K) => V): V {\n  if (map.has(key)) return map.get(key) as V;\n  return map.set(key, compute(key)).get(key) as V;\n}\nexport function promiseWithResolvers<T>(): {\n  promise: Promise<T>;\n  resolve: (value: T | PromiseLike<T>) => void;\n  reject: (reason?: any) => void;\n} {\n  let resolve: any;\n  let reject: any;\n  const promise = new Promise<T>((res, rej) => {\n    resolve = res;\n    reject = rej;\n  });\n  return {\n    promise,\n    resolve,\n    reject\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Middleware } from 'redux';\nimport type { IgnorePaths } from './serializableStateInvariantMiddleware';\nimport { getTimeMeasureUtils } from './utils';\ntype EntryProcessor = (key: string, value: any) => any;\n\n/**\n * The default `isImmutable` function.\n *\n * @public\n */\nexport function isImmutableDefault(value: unknown): boolean {\n  return typeof value !== 'object' || value == null || Object.isFrozen(value);\n}\nexport function trackForMutations(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths | undefined, obj: any) {\n  const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\n  return {\n    detectMutations() {\n      return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\n    }\n  };\n}\ninterface TrackedProperty {\n  value: any;\n  children: Record<string, any>;\n}\nfunction trackProperties(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths = [], obj: Record<string, any>, path: string = '', checkedObjects: Set<Record<string, any>> = new Set()) {\n  const tracked: Partial<TrackedProperty> = {\n    value: obj\n  };\n  if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n    checkedObjects.add(obj);\n    tracked.children = {};\n    for (const key in obj) {\n      const childPath = path ? path + '.' + key : key;\n      if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\n        continue;\n      }\n      tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\n    }\n  }\n  return tracked as TrackedProperty;\n}\nfunction detectMutations(isImmutable: IsImmutableFunc, ignoredPaths: IgnorePaths = [], trackedProperty: TrackedProperty, obj: any, sameParentRef: boolean = false, path: string = ''): {\n  wasMutated: boolean;\n  path?: string;\n} {\n  const prevObj = trackedProperty ? trackedProperty.value : undefined;\n  const sameRef = prevObj === obj;\n  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n    return {\n      wasMutated: true,\n      path\n    };\n  }\n  if (isImmutable(prevObj) || isImmutable(obj)) {\n    return {\n      wasMutated: false\n    };\n  }\n\n  // Gather all keys from prev (tracked) and after objs\n  const keysToDetect: Record<string, boolean> = {};\n  for (let key in trackedProperty.children) {\n    keysToDetect[key] = true;\n  }\n  for (let key in obj) {\n    keysToDetect[key] = true;\n  }\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (let key in keysToDetect) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n    if (result.wasMutated) {\n      return result;\n    }\n  }\n  return {\n    wasMutated: false\n  };\n}\ntype IsImmutableFunc = (value: any) => boolean;\n\n/**\n * Options for `createImmutableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface ImmutableStateInvariantMiddlewareOptions {\n  /**\n    Callback function to check if a value is considered to be immutable.\n    This function is applied recursively to every value contained in the state.\n    The default implementation will return true for primitive types\n    (like numbers, strings, booleans, null and undefined).\n   */\n  isImmutable?: IsImmutableFunc;\n  /**\n    An array of dot-separated path strings that match named nodes from\n    the root state to ignore when checking for immutability.\n    Defaults to undefined\n   */\n  ignoredPaths?: IgnorePaths;\n  /** Print a warning if checks take longer than N ms. Default: 32ms */\n  warnAfter?: number;\n}\n\n/**\n * Creates a middleware that checks whether any state was mutated in between\n * dispatches or during a dispatch. If any mutations are detected, an error is\n * thrown.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createImmutableStateInvariantMiddleware(options: ImmutableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    function stringify(obj: any, serializer?: EntryProcessor, indent?: string | number, decycler?: EntryProcessor): string {\n      return JSON.stringify(obj, getSerialize(serializer, decycler), indent);\n    }\n    function getSerialize(serializer?: EntryProcessor, decycler?: EntryProcessor): EntryProcessor {\n      let stack: any[] = [],\n        keys: any[] = [];\n      if (!decycler) decycler = function (_: string, value: any) {\n        if (stack[0] === value) return '[Circular ~]';\n        return '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']';\n      };\n      return function (this: any, key: string, value: any) {\n        if (stack.length > 0) {\n          var thisPos = stack.indexOf(this);\n          ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n          ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n          if (~stack.indexOf(value)) value = decycler!.call(this, key, value);\n        } else stack.push(value);\n        return serializer == null ? value : serializer.call(this, key, value);\n      };\n    }\n    let {\n      isImmutable = isImmutableDefault,\n      ignoredPaths,\n      warnAfter = 32\n    } = options;\n    const track = trackForMutations.bind(null, isImmutable, ignoredPaths);\n    return ({\n      getState\n    }) => {\n      let state = getState();\n      let tracker = track(state);\n      let result;\n      return next => action => {\n        const measureUtils = getTimeMeasureUtils(warnAfter, 'ImmutableStateInvariantMiddleware');\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ''}'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        const dispatchedAction = next(action);\n        measureUtils.measureTime(() => {\n          state = getState();\n          result = tracker.detectMutations();\n          // Track before potentially not meeting the invariant\n          tracker = track(state);\n          if (result.wasMutated) {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ''}. Take a look at the reducer(s) handling the action ${stringify(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n        return dispatchedAction;\n      };\n    };\n  }\n}","import type { Middleware } from 'redux';\nimport { isAction, isPlainObject } from 'redux';\nimport { getTimeMeasureUtils } from './utils';\n\n/**\n * Returns true if the passed value is \"plain\", i.e. a value that is either\n * directly JSON-serializable (boolean, number, string, array, plain object)\n * or `undefined`.\n *\n * @param val The value to check.\n *\n * @public\n */\nexport function isPlain(val: any) {\n  const type = typeof val;\n  return val == null || type === 'string' || type === 'boolean' || type === 'number' || Array.isArray(val) || isPlainObject(val);\n}\ninterface NonSerializableValue {\n  keyPath: string;\n  value: unknown;\n}\nexport type IgnorePaths = readonly (string | RegExp)[];\n\n/**\n * @public\n */\nexport function findNonSerializableValue(value: unknown, path: string = '', isSerializable: (value: unknown) => boolean = isPlain, getEntries?: (value: unknown) => [string, any][], ignoredPaths: IgnorePaths = [], cache?: WeakSet<object>): NonSerializableValue | false {\n  let foundNestedSerializable: NonSerializableValue | false;\n  if (!isSerializable(value)) {\n    return {\n      keyPath: path || '<root>',\n      value: value\n    };\n  }\n  if (typeof value !== 'object' || value === null) {\n    return false;\n  }\n  if (cache?.has(value)) return false;\n  const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n  const hasIgnoredPaths = ignoredPaths.length > 0;\n  for (const [key, nestedValue] of entries) {\n    const nestedPath = path ? path + '.' + key : key;\n    if (hasIgnoredPaths) {\n      const hasMatches = ignoredPaths.some(ignored => {\n        if (ignored instanceof RegExp) {\n          return ignored.test(nestedPath);\n        }\n        return nestedPath === ignored;\n      });\n      if (hasMatches) {\n        continue;\n      }\n    }\n    if (!isSerializable(nestedValue)) {\n      return {\n        keyPath: nestedPath,\n        value: nestedValue\n      };\n    }\n    if (typeof nestedValue === 'object') {\n      foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n      if (foundNestedSerializable) {\n        return foundNestedSerializable;\n      }\n    }\n  }\n  if (cache && isNestedFrozen(value)) cache.add(value);\n  return false;\n}\nexport function isNestedFrozen(value: object) {\n  if (!Object.isFrozen(value)) return false;\n  for (const nestedValue of Object.values(value)) {\n    if (typeof nestedValue !== 'object' || nestedValue === null) continue;\n    if (!isNestedFrozen(nestedValue)) return false;\n  }\n  return true;\n}\n\n/**\n * Options for `createSerializableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface SerializableStateInvariantMiddlewareOptions {\n  /**\n   * The function to check if a value is considered serializable. This\n   * function is applied recursively to every value contained in the\n   * state. Defaults to `isPlain()`.\n   */\n  isSerializable?: (value: any) => boolean;\n  /**\n   * The function that will be used to retrieve entries from each\n   * value.  If unspecified, `Object.entries` will be used. Defaults\n   * to `undefined`.\n   */\n  getEntries?: (value: any) => [string, any][];\n\n  /**\n   * An array of action types to ignore when checking for serializability.\n   * Defaults to []\n   */\n  ignoredActions?: string[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to\n   * ['meta.arg', 'meta.baseQueryMeta']\n   */\n  ignoredActionPaths?: (string | RegExp)[];\n\n  /**\n   * An array of dot-separated path strings or regular expressions to ignore\n   * when checking for serializability, Defaults to []\n   */\n  ignoredPaths?: (string | RegExp)[];\n  /**\n   * Execution time warning threshold. If the middleware takes longer\n   * than `warnAfter` ms, a warning will be displayed in the console.\n   * Defaults to 32ms.\n   */\n  warnAfter?: number;\n\n  /**\n   * Opt out of checking state. When set to `true`, other state-related params will be ignored.\n   */\n  ignoreState?: boolean;\n\n  /**\n   * Opt out of checking actions. When set to `true`, other action-related params will be ignored.\n   */\n  ignoreActions?: boolean;\n\n  /**\n   * Opt out of caching the results. The cache uses a WeakSet and speeds up repeated checking processes.\n   * The cache is automatically disabled if no browser support for WeakSet is present.\n   */\n  disableCache?: boolean;\n}\n\n/**\n * Creates a middleware that, after every state change, checks if the new\n * state is serializable. If a non-serializable value is found within the\n * state, an error is printed to the console.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createSerializableStateInvariantMiddleware(options: SerializableStateInvariantMiddlewareOptions = {}): Middleware {\n  if (process.env.NODE_ENV === 'production') {\n    return () => next => action => next(action);\n  } else {\n    const {\n      isSerializable = isPlain,\n      getEntries,\n      ignoredActions = [],\n      ignoredActionPaths = ['meta.arg', 'meta.baseQueryMeta'],\n      ignoredPaths = [],\n      warnAfter = 32,\n      ignoreState = false,\n      ignoreActions = false,\n      disableCache = false\n    } = options;\n    const cache: WeakSet<object> | undefined = !disableCache && WeakSet ? new WeakSet() : undefined;\n    return storeAPI => next => action => {\n      if (!isAction(action)) {\n        return next(action);\n      }\n      const result = next(action);\n      const measureUtils = getTimeMeasureUtils(warnAfter, 'SerializableStateInvariantMiddleware');\n      if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type as any) !== -1)) {\n        measureUtils.measureTime(() => {\n          const foundActionNonSerializableValue = findNonSerializableValue(action, '', isSerializable, getEntries, ignoredActionPaths, cache);\n          if (foundActionNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundActionNonSerializableValue;\n            console.error(`A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`, value, '\\nTake a look at the logic that dispatched this action: ', action, '\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)', '\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)');\n          }\n        });\n      }\n      if (!ignoreState) {\n        measureUtils.measureTime(() => {\n          const state = storeAPI.getState();\n          const foundStateNonSerializableValue = findNonSerializableValue(state, '', isSerializable, getEntries, ignoredPaths, cache);\n          if (foundStateNonSerializableValue) {\n            const {\n              keyPath,\n              value\n            } = foundStateNonSerializableValue;\n            console.error(`A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`, value, `\nTake a look at the reducer(s) handling this action type: ${action.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n          }\n        });\n        measureUtils.warnIfExceeded();\n      }\n      return result;\n    };\n  }\n}","import type { StoreEnhancer } from 'redux';\nexport const SHOULD_AUTOBATCH = 'RTK_autoBatch';\nexport const prepareAutoBatched = <T,>() => (payload: T): {\n  payload: T;\n  meta: unknown;\n} => ({\n  payload,\n  meta: {\n    [SHOULD_AUTOBATCH]: true\n  }\n});\nconst createQueueWithTimer = (timeout: number) => {\n  return (notify: () => void) => {\n    setTimeout(notify, timeout);\n  };\n};\nexport type AutoBatchOptions = {\n  type: 'tick';\n} | {\n  type: 'timer';\n  timeout: number;\n} | {\n  type: 'raf';\n} | {\n  type: 'callback';\n  queueNotification: (notify: () => void) => void;\n};\n\n/**\n * A Redux store enhancer that watches for \"low-priority\" actions, and delays\n * notifying subscribers until either the queued callback executes or the\n * next \"standard-priority\" action is dispatched.\n *\n * This allows dispatching multiple \"low-priority\" actions in a row with only\n * a single subscriber notification to the UI after the sequence of actions\n * is finished, thus improving UI re-render performance.\n *\n * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.\n * This can be added to `action.meta` manually, or by using the\n * `prepareAutoBatched` helper.\n *\n * By default, it will queue a notification for the end of the event loop tick.\n * However, you can pass several other options to configure the behavior:\n * - `{type: 'tick'}`: queues using `queueMicrotask`\n * - `{type: 'timer', timeout: number}`: queues using `setTimeout`\n * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)\n * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback\n *\n *\n */\nexport const autoBatchEnhancer = (options: AutoBatchOptions = {\n  type: 'raf'\n}): StoreEnhancer => next => (...args) => {\n  const store = next(...args);\n  let notifying = true;\n  let shouldNotifyAtEndOfTick = false;\n  let notificationQueued = false;\n  const listeners = new Set<() => void>();\n  const queueCallback = options.type === 'tick' ? queueMicrotask : options.type === 'raf' ?\n  // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n  typeof window !== 'undefined' && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10) : options.type === 'callback' ? options.queueNotification : createQueueWithTimer(options.timeout);\n  const notifyListeners = () => {\n    // We're running at the end of the event loop tick.\n    // Run the real listener callbacks to actually update the UI.\n    notificationQueued = false;\n    if (shouldNotifyAtEndOfTick) {\n      shouldNotifyAtEndOfTick = false;\n      listeners.forEach(l => l());\n    }\n  };\n  return Object.assign({}, store, {\n    // Override the base `store.subscribe` method to keep original listeners\n    // from running if we're delaying notifications\n    subscribe(listener: () => void) {\n      // Each wrapped listener will only call the real listener if\n      // the `notifying` flag is currently active when it's called.\n      // This lets the base store work as normal, while the actual UI\n      // update becomes controlled by this enhancer.\n      const wrappedListener: typeof listener = () => notifying && listener();\n      const unsubscribe = store.subscribe(wrappedListener);\n      listeners.add(listener);\n      return () => {\n        unsubscribe();\n        listeners.delete(listener);\n      };\n    },\n    // Override the base `store.dispatch` method so that we can check actions\n    // for the `shouldAutoBatch` flag and determine if batching is active\n    dispatch(action: any) {\n      try {\n        // If the action does _not_ have the `shouldAutoBatch` flag,\n        // we resume/continue normal notify-after-each-dispatch behavior\n        notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n        // If a `notifyListeners` microtask was queued, you can't cancel it.\n        // Instead, we set a flag so that it's a no-op when it does run\n        shouldNotifyAtEndOfTick = !notifying;\n        if (shouldNotifyAtEndOfTick) {\n          // We've seen at least 1 action with `SHOULD_AUTOBATCH`. Try to queue\n          // a microtask to notify listeners at the end of the event loop tick.\n          // Make sure we only enqueue this _once_ per tick.\n          if (!notificationQueued) {\n            notificationQueued = true;\n            queueCallback(notifyListeners);\n          }\n        }\n        // Go ahead and process the action as usual, including reducers.\n        // If normal notification behavior is enabled, the store will notify\n        // all of its own listeners, and the wrapper callbacks above will\n        // see `notifying` is true and pass on to the real listener callbacks.\n        // If we're \"batching\" behavior, then the wrapped callbacks will\n        // bail out, causing the base store notification behavior to be no-ops.\n        return store.dispatch(action);\n      } finally {\n        // Assume we're back to normal behavior after each action\n        notifying = true;\n      }\n    }\n  });\n};","import type { StoreEnhancer } from 'redux';\nimport type { AutoBatchOptions } from './autoBatchEnhancer';\nimport { autoBatchEnhancer } from './autoBatchEnhancer';\nimport { Tuple } from './utils';\nimport type { Middlewares } from './configureStore';\nimport type { ExtractDispatchExtensions } from './tsHelpers';\ntype GetDefaultEnhancersOptions = {\n  autoBatch?: boolean | AutoBatchOptions;\n};\nexport type GetDefaultEnhancers<M extends Middlewares<any>> = (options?: GetDefaultEnhancersOptions) => Tuple<[StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>]>;\nexport const buildGetDefaultEnhancers = <M extends Middlewares<any>,>(middlewareEnhancer: StoreEnhancer<{\n  dispatch: ExtractDispatchExtensions<M>;\n}>): GetDefaultEnhancers<M> => function getDefaultEnhancers(options) {\n  const {\n    autoBatch = true\n  } = options ?? {};\n  let enhancerArray = new Tuple<StoreEnhancer[]>(middlewareEnhancer);\n  if (autoBatch) {\n    enhancerArray.push(autoBatchEnhancer(typeof autoBatch === 'object' ? autoBatch : undefined));\n  }\n  return enhancerArray as any;\n};","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Draft } from 'immer';\nimport { produce as createNextState, isDraft, isDraftable } from 'immer';\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { ActionReducerMapBuilder } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { NoInfer, TypeGuard } from './tsHelpers';\nimport { freezeDraftable } from './utils';\n\n/**\n * Defines a mapping from action types to corresponding action object shapes.\n *\n * @deprecated This should not be used manually - it is only used for internal\n *             inference purposes and should not have any further value.\n *             It might be removed in the future.\n * @public\n */\nexport type Actions<T extends keyof any = string> = Record<T, Action>;\nexport type ActionMatcherDescription<S, A extends Action> = {\n  matcher: TypeGuard<A>;\n  reducer: CaseReducer<S, NoInfer<A>>;\n};\nexport type ReadonlyActionMatcherDescriptionCollection<S> = ReadonlyArray<ActionMatcherDescription<S, any>>;\nexport type ActionMatcherDescriptionCollection<S> = Array<ActionMatcherDescription<S, any>>;\n\n/**\n * A *case reducer* is a reducer function for a specific action type. Case\n * reducers can be composed to full reducers using `createReducer()`.\n *\n * Unlike a normal Redux reducer, a case reducer is never called with an\n * `undefined` state to determine the initial state. Instead, the initial\n * state is explicitly specified as an argument to `createReducer()`.\n *\n * In addition, a case reducer can choose to mutate the passed-in `state`\n * value directly instead of returning a new state. This does not actually\n * cause the store state to be mutated directly; instead, thanks to\n * [immer](https://github.com/mweststrate/immer), the mutations are\n * translated to copy operations that result in a new state.\n *\n * @public\n */\nexport type CaseReducer<S = any, A extends Action = UnknownAction> = (state: Draft<S>, action: A) => NoInfer<S> | void | Draft<NoInfer<S>>;\n\n/**\n * A mapping from action types to case reducers for `createReducer()`.\n *\n * @deprecated This should not be used manually - it is only used\n *             for internal inference purposes and using it manually\n *             would lead to type erasure.\n *             It might be removed in the future.\n * @public\n */\nexport type CaseReducers<S, AS extends Actions> = { [T in keyof AS]: AS[T] extends Action ? CaseReducer<S, AS[T]> : void };\nexport type NotFunction<T> = T extends Function ? never : T;\nfunction isStateFunction<S>(x: unknown): x is () => S {\n  return typeof x === 'function';\n}\nexport type ReducerWithInitialState<S extends NotFunction<any>> = Reducer<S> & {\n  getInitialState: () => S;\n};\n\n/**\n * A utility function that allows defining a reducer as a mapping from action\n * type to *case reducer* functions that handle these action types. The\n * reducer's initial state is passed as the first argument.\n *\n * @remarks\n * The body of every case reducer is implicitly wrapped with a call to\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\n * This means that rather than returning a new state object, you can also\n * mutate the passed-in state object directly; these mutations will then be\n * automatically and efficiently translated into copies, giving you both\n * convenience and immutability.\n *\n * @overloadSummary\n * This function accepts a callback that receives a `builder` object as its argument.\n * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be\n * called to define what actions this reducer will handle.\n *\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define\n *   case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n * @example\n```ts\nimport {\n  createAction,\n  createReducer,\n  UnknownAction,\n  PayloadAction,\n} from \"@reduxjs/toolkit\";\n\nconst increment = createAction<number>(\"increment\");\nconst decrement = createAction<number>(\"decrement\");\n\nfunction isActionWithNumberPayload(\n  action: UnknownAction\n): action is PayloadAction<number> {\n  return typeof action.payload === \"number\";\n}\n\nconst reducer = createReducer(\n  {\n    counter: 0,\n    sumOfNumberPayloads: 0,\n    unhandledActions: 0,\n  },\n  (builder) => {\n    builder\n      .addCase(increment, (state, action) => {\n        // action is inferred correctly here\n        state.counter += action.payload;\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {\n        state.counter -= action.payload;\n      })\n      // You can apply a \"matcher function\" to incoming actions\n      .addMatcher(isActionWithNumberPayload, (state, action) => {})\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {});\n  }\n);\n```\n * @public\n */\nexport function createReducer<S extends NotFunction<any>>(initialState: S | (() => S), mapOrBuilderCallback: (builder: ActionReducerMapBuilder<S>) => void): ReducerWithInitialState<S> {\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof mapOrBuilderCallback === 'object') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n    }\n  }\n  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n\n  // Ensure the initial state gets frozen either way (if draftable)\n  let getInitialState: () => S;\n  if (isStateFunction(initialState)) {\n    getInitialState = () => freezeDraftable(initialState());\n  } else {\n    const frozenInitialState = freezeDraftable(initialState);\n    getInitialState = () => frozenInitialState;\n  }\n  function reducer(state = getInitialState(), action: any): S {\n    let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n      matcher\n    }) => matcher(action)).map(({\n      reducer\n    }) => reducer)];\n    if (caseReducers.filter(cr => !!cr).length === 0) {\n      caseReducers = [finalDefaultCaseReducer];\n    }\n    return caseReducers.reduce((previousState, caseReducer): S => {\n      if (caseReducer) {\n        if (isDraft(previousState)) {\n          // If it's already a draft, we must already be inside a `createNextState` call,\n          // likely because this is being wrapped in `createReducer`, `createSlice`, or nested\n          // inside an existing draft. It's safe to just pass the draft to the mutator.\n          const draft = previousState as Draft<S>; // We can assume this is already a draft\n          const result = caseReducer(draft, action);\n          if (result === undefined) {\n            return previousState;\n          }\n          return result as S;\n        } else if (!isDraftable(previousState)) {\n          // If state is not draftable (ex: a primitive, such as 0), we want to directly\n          // return the caseReducer func and not wrap it with produce.\n          const result = caseReducer(previousState as any, action);\n          if (result === undefined) {\n            if (previousState === null) {\n              return previousState;\n            }\n            throw Error('A case reducer on a non-draftable value must not return undefined');\n          }\n          return result as S;\n        } else {\n          // @ts-ignore createNextState() produces an Immutable<Draft<S>> rather\n          // than an Immutable<S>, and TypeScript cannot find out how to reconcile\n          // these two types.\n          return createNextState(previousState, (draft: Draft<S>) => {\n            return caseReducer(draft, action);\n          });\n        }\n      }\n      return previousState;\n    }, state);\n  }\n  reducer.getInitialState = getInitialState;\n  return reducer as ReducerWithInitialState<S>;\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6 } from \"@reduxjs/toolkit\";\nimport type { Action } from 'redux';\nimport type { CaseReducer, CaseReducers, ActionMatcherDescriptionCollection } from './createReducer';\nimport type { TypeGuard } from './tsHelpers';\nexport type TypedActionCreator<Type extends string> = {\n  (...args: any[]): Action<Type>;\n  type: Type;\n};\n\n/**\n * A builder for an action <-> reducer map.\n *\n * @public\n */\nexport interface ActionReducerMapBuilder<State> {\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ActionReducerMapBuilder<State>;\n  /**\n   * Adds a case reducer to handle a single exact action type.\n   * @remarks\n   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ActionReducerMapBuilder<State>;\n\n  /**\n   * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   * @example\n  ```ts\n  import {\n  createAction,\n  createReducer,\n  AsyncThunk,\n  UnknownAction,\n  } from \"@reduxjs/toolkit\";\n  type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;\n  type PendingAction = ReturnType<GenericAsyncThunk[\"pending\"]>;\n  type RejectedAction = ReturnType<GenericAsyncThunk[\"rejected\"]>;\n  type FulfilledAction = ReturnType<GenericAsyncThunk[\"fulfilled\"]>;\n  const initialState: Record<string, string> = {};\n  const resetAction = createAction(\"reset-tracked-loading-state\");\n  function isPendingAction(action: UnknownAction): action is PendingAction {\n  return typeof action.type === \"string\" && action.type.endsWith(\"/pending\");\n  }\n  const reducer = createReducer(initialState, (builder) => {\n  builder\n    .addCase(resetAction, () => initialState)\n    // matcher can be defined outside as a type predicate function\n    .addMatcher(isPendingAction, (state, action) => {\n      state[action.meta.requestId] = \"pending\";\n    })\n    .addMatcher(\n      // matcher can be defined inline as a type predicate function\n      (action): action is RejectedAction => action.type.endsWith(\"/rejected\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"rejected\";\n      }\n    )\n    // matcher can just return boolean and the matcher can receive a generic argument\n    .addMatcher<FulfilledAction>(\n      (action) => action.type.endsWith(\"/fulfilled\"),\n      (state, action) => {\n        state[action.meta.requestId] = \"fulfilled\";\n      }\n    );\n  });\n  ```\n   */\n  addMatcher<A>(matcher: TypeGuard<A> | ((action: any) => boolean), reducer: CaseReducer<State, A extends Action ? A : A & Action>): Omit<ActionReducerMapBuilder<State>, 'addCase'>;\n\n  /**\n   * Adds a \"default case\" reducer that is executed if no case reducer and no matcher\n   * reducer was executed for this action.\n   * @param reducer - The fallback \"default case\" reducer function.\n   *\n   * @example\n  ```ts\n  import { createReducer } from '@reduxjs/toolkit'\n  const initialState = { otherActions: 0 }\n  const reducer = createReducer(initialState, builder => {\n  builder\n    // .addCase(...)\n    // .addMatcher(...)\n    .addDefaultCase((state, action) => {\n      state.otherActions++\n    })\n  })\n  ```\n   */\n  addDefaultCase(reducer: CaseReducer<State, Action>): {};\n}\nexport function executeReducerBuilderCallback<S>(builderCallback: (builder: ActionReducerMapBuilder<S>) => void): [CaseReducers<S, any>, ActionMatcherDescriptionCollection<S>, CaseReducer<S, Action> | undefined] {\n  const actionsMap: CaseReducers<S, any> = {};\n  const actionMatchers: ActionMatcherDescriptionCollection<S> = [];\n  let defaultCaseReducer: CaseReducer<S, Action> | undefined;\n  const builder = {\n    addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<S>) {\n      if (process.env.NODE_ENV !== 'production') {\n        /*\n         to keep the definition by the user in line with actual behavior,\n         we enforce `addCase` to always be called before calling `addMatcher`\n         as matching cases take precedence over matchers\n         */\n        if (actionMatchers.length > 0) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(26) : '`builder.addCase` should only be called before calling `builder.addMatcher`');\n        }\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(27) : '`builder.addCase` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n      if (!type) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(28) : '`builder.addCase` cannot be called with an empty action type');\n      }\n      if (type in actionsMap) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(29) : '`builder.addCase` cannot be called with two reducers for the same action type ' + `'${type}'`);\n      }\n      actionsMap[type] = reducer;\n      return builder;\n    },\n    addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<S, A extends Action ? A : A & Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(30) : '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`');\n        }\n      }\n      actionMatchers.push({\n        matcher,\n        reducer\n      });\n      return builder;\n    },\n    addDefaultCase(reducer: CaseReducer<S, Action>) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (defaultCaseReducer) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(31) : '`builder.addDefaultCase` can only be called once');\n        }\n      }\n      defaultCaseReducer = reducer;\n      return builder;\n    }\n  };\n  builderCallback(builder);\n  return [actionsMap, actionMatchers, defaultCaseReducer];\n}","import type { ActionFromMatcher, Matcher, UnionToIntersection } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\nimport type { AsyncThunk, AsyncThunkFulfilledActionCreator, AsyncThunkPendingActionCreator, AsyncThunkRejectedActionCreator } from './createAsyncThunk';\n\n/** @public */\nexport type ActionMatchingAnyOf<Matchers extends Matcher<any>[]> = ActionFromMatcher<Matchers[number]>;\n\n/** @public */\nexport type ActionMatchingAllOf<Matchers extends Matcher<any>[]> = UnionToIntersection<ActionMatchingAnyOf<Matchers>>;\nconst matches = (matcher: Matcher<any>, action: any) => {\n  if (hasMatchFunction(matcher)) {\n    return matcher.match(action);\n  } else {\n    return matcher(action);\n  }\n};\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches any one of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAnyOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAnyOf<Matchers> => {\n    return matchers.some(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches all of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAllOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n  return (action: any): action is ActionMatchingAllOf<Matchers> => {\n    return matchers.every(matcher => matches(matcher, action));\n  };\n}\n\n/**\n * @param action A redux action\n * @param validStatus An array of valid meta.requestStatus values\n *\n * @internal\n */\nexport function hasExpectedRequestMetadata(action: any, validStatus: readonly string[]) {\n  if (!action || !action.meta) return false;\n  const hasValidRequestId = typeof action.meta.requestId === 'string';\n  const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n  return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a: [any] | AnyAsyncThunk[]): a is AnyAsyncThunk[] {\n  return typeof a[0] === 'function' && 'pending' in a[0] && 'fulfilled' in a[0] && 'rejected' in a[0];\n}\nexport type UnknownAsyncThunkPendingAction = ReturnType<AsyncThunkPendingActionCreator<unknown>>;\nexport type PendingActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is pending.\n *\n * @public\n */\nexport function isPending(): (action: any) => action is UnknownAsyncThunkPendingAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is pending.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is PendingActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a pending thunk action\n * @public\n */\nexport function isPending(action: any): action is UnknownAsyncThunkPendingAction;\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isPending()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.pending));\n}\nexport type UnknownAsyncThunkRejectedAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected.\n *\n * @public\n */\nexport function isRejected(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action\n * @public\n */\nexport function isRejected(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejected()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.rejected));\n}\nexport type UnknownAsyncThunkRejectedWithValueAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedWithValueActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']> & (T extends AsyncThunk<any, any, {\n  rejectValue: infer RejectedValue;\n}> ? {\n  payload: RejectedValue;\n} : unknown);\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected with value.\n *\n * @public\n */\nexport function isRejectedWithValue(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected with value.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedWithValueActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action with value\n * @public\n */\nexport function isRejectedWithValue(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  const hasFlag = (action: any): action is any => {\n    return action && action.meta && action.meta.rejectedWithValue;\n  };\n  if (asyncThunks.length === 0) {\n    return isAllOf(isRejected(...asyncThunks), hasFlag);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isRejectedWithValue()(asyncThunks[0]);\n  }\n  return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nexport type UnknownAsyncThunkFulfilledAction = ReturnType<AsyncThunkFulfilledActionCreator<unknown, unknown>>;\nexport type FulfilledActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['fulfilled']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is fulfilled.\n *\n * @public\n */\nexport function isFulfilled(): (action: any) => action is UnknownAsyncThunkFulfilledAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is fulfilled.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is FulfilledActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a fulfilled thunk action\n * @public\n */\nexport function isFulfilled(action: any): action is UnknownAsyncThunkFulfilledAction;\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['fulfilled']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isFulfilled()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.fulfilled));\n}\nexport type UnknownAsyncThunkAction = UnknownAsyncThunkPendingAction | UnknownAsyncThunkRejectedAction | UnknownAsyncThunkFulfilledAction;\nexport type AnyAsyncThunk = {\n  pending: {\n    match: (action: any) => action is any;\n  };\n  fulfilled: {\n    match: (action: any) => action is any;\n  };\n  rejected: {\n    match: (action: any) => action is any;\n  };\n};\nexport type ActionsFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']> | ActionFromMatcher<T['fulfilled']> | ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator.\n *\n * @public\n */\nexport function isAsyncThunkAction(): (action: any) => action is UnknownAsyncThunkAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is ActionsFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a thunk action\n * @public\n */\nexport function isAsyncThunkAction(action: any): action is UnknownAsyncThunkAction;\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n  if (asyncThunks.length === 0) {\n    return (action: any) => hasExpectedRequestMetadata(action, ['pending', 'fulfilled', 'rejected']);\n  }\n  if (!isAsyncThunkArray(asyncThunks)) {\n    return isAsyncThunkAction()(asyncThunks[0]);\n  }\n  return isAnyOf(...asyncThunks.flatMap(asyncThunk => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}","// Borrowed from https://github.com/ai/nanoid/blob/3.0.2/non-secure/index.js\n// This alphabet uses `A-Za-z0-9_-` symbols. A genetic algorithm helped\n// optimize the gzip compression for this alphabet.\nlet urlAlphabet = 'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW';\n\n/**\r\n *\r\n * @public\r\n */\nexport let nanoid = (size = 21) => {\n  let id = '';\n  // A compact alternative for `for (var i = 0; i < step; i++)`.\n  let i = size;\n  while (i--) {\n    // `| 0` is more compact and faster than `Math.floor()`.\n    id += urlAlphabet[Math.random() * 64 | 0];\n  }\n  return id;\n};","import type { Dispatch, UnknownAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport type { ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport { isAnyOf } from './matchers';\nimport { nanoid } from './nanoid';\nimport type { FallbackIfUnknown, Id, IsAny, IsUnknown, SafePromise } from './tsHelpers';\nexport type BaseThunkAPI<S, E, D extends Dispatch = Dispatch, RejectedValue = unknown, RejectedMeta = unknown, FulfilledMeta = unknown> = {\n  dispatch: D;\n  getState: () => S;\n  extra: E;\n  requestId: string;\n  signal: AbortSignal;\n  abort: (reason?: string) => void;\n  rejectWithValue: IsUnknown<RejectedMeta, (value: RejectedValue) => RejectWithValue<RejectedValue, RejectedMeta>, (value: RejectedValue, meta: RejectedMeta) => RejectWithValue<RejectedValue, RejectedMeta>>;\n  fulfillWithValue: IsUnknown<FulfilledMeta, <FulfilledValue>(value: FulfilledValue) => FulfilledValue, <FulfilledValue>(value: FulfilledValue, meta: FulfilledMeta) => FulfillWithMeta<FulfilledValue, FulfilledMeta>>;\n};\n\n/**\n * @public\n */\nexport interface SerializedError {\n  name?: string;\n  message?: string;\n  stack?: string;\n  code?: string;\n}\nconst commonProperties: Array<keyof SerializedError> = ['name', 'message', 'stack', 'code'];\nclass RejectWithValue<Payload, RejectedMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'RejectWithValue';\n  constructor(public readonly payload: Payload, public readonly meta: RejectedMeta) {}\n}\nclass FulfillWithMeta<Payload, FulfilledMeta> {\n  /*\n  type-only property to distinguish between RejectWithValue and FulfillWithMeta\n  does not exist at runtime\n  */\n  private readonly _type!: 'FulfillWithMeta';\n  constructor(public readonly payload: Payload, public readonly meta: FulfilledMeta) {}\n}\n\n/**\n * Serializes an error into a plain object.\n * Reworked from https://github.com/sindresorhus/serialize-error\n *\n * @public\n */\nexport const miniSerializeError = (value: any): SerializedError => {\n  if (typeof value === 'object' && value !== null) {\n    const simpleError: SerializedError = {};\n    for (const property of commonProperties) {\n      if (typeof value[property] === 'string') {\n        simpleError[property] = value[property];\n      }\n    }\n    return simpleError;\n  }\n  return {\n    message: String(value)\n  };\n};\nexport type AsyncThunkConfig = {\n  state?: unknown;\n  dispatch?: ThunkDispatch<unknown, unknown, UnknownAction>;\n  extra?: unknown;\n  rejectValue?: unknown;\n  serializedErrorType?: unknown;\n  pendingMeta?: unknown;\n  fulfilledMeta?: unknown;\n  rejectedMeta?: unknown;\n};\nexport type GetState<ThunkApiConfig> = ThunkApiConfig extends {\n  state: infer State;\n} ? State : unknown;\ntype GetExtra<ThunkApiConfig> = ThunkApiConfig extends {\n  extra: infer Extra;\n} ? Extra : unknown;\ntype GetDispatch<ThunkApiConfig> = ThunkApiConfig extends {\n  dispatch: infer Dispatch;\n} ? FallbackIfUnknown<Dispatch, ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>> : ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>;\nexport type GetThunkAPI<ThunkApiConfig> = BaseThunkAPI<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, GetDispatch<ThunkApiConfig>, GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>, GetFulfilledMeta<ThunkApiConfig>>;\ntype GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectValue: infer RejectValue;\n} ? RejectValue : unknown;\ntype GetPendingMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  pendingMeta: infer PendingMeta;\n} ? PendingMeta : unknown;\ntype GetFulfilledMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  fulfilledMeta: infer FulfilledMeta;\n} ? FulfilledMeta : unknown;\ntype GetRejectedMeta<ThunkApiConfig> = ThunkApiConfig extends {\n  rejectedMeta: infer RejectedMeta;\n} ? RejectedMeta : unknown;\ntype GetSerializedErrorType<ThunkApiConfig> = ThunkApiConfig extends {\n  serializedErrorType: infer GetSerializedErrorType;\n} ? GetSerializedErrorType : SerializedError;\ntype MaybePromise<T> = T | Promise<T> | (T extends any ? Promise<T> : never);\n\n/**\n * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig extends AsyncThunkConfig> = MaybePromise<IsUnknown<GetFulfilledMeta<ThunkApiConfig>, Returned, FulfillWithMeta<Returned, GetFulfilledMeta<ThunkApiConfig>>> | RejectWithValue<GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>>>;\n/**\n * A type describing the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreator<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>;\n\n/**\n * A ThunkAction created by `createAsyncThunk`.\n * Dispatching it returns a Promise for either a\n * fulfilled or rejected action.\n * Also, the returned value contains an `abort()` method\n * that allows the asyncAction to be cancelled from the outside.\n *\n * @public\n */\nexport type AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = (dispatch: NonNullable<GetDispatch<ThunkApiConfig>>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => SafePromise<ReturnType<AsyncThunkFulfilledActionCreator<Returned, ThunkArg>> | ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>>> & {\n  abort: (reason?: string) => void;\n  requestId: string;\n  arg: ThunkArg;\n  unwrap: () => Promise<Returned>;\n};\n\n/**\n * Config provided when calling the async thunk action creator.\n */\nexport interface AsyncThunkDispatchConfig {\n  /**\n   * An external `AbortSignal` that will be tracked by the internal `AbortSignal`.\n   */\n  signal?: AbortSignal;\n}\ntype AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = IsAny<ThunkArg,\n// any handling\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// unknown handling\nunknown extends ThunkArg ? (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument not specified or specified as void or undefined\n: [ThunkArg] extends [void] | [undefined] ? (arg?: undefined, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains void\n: [void] extends [ThunkArg] // make optional\n? (arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains undefined\n: [undefined] extends [ThunkArg] ? WithStrictNullChecks<\n// with strict nullChecks: make optional\n(arg?: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// without strict null checks this will match everything, so don't make it optional\n(arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>> // default case: normal argument\n: (arg: ThunkArg, config?: AsyncThunkDispatchConfig) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>>;\n\n/**\n * Options object for `createAsyncThunk`.\n *\n * @public\n */\nexport type AsyncThunkOptions<ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  /**\n   * A method to control whether the asyncThunk should be executed. Has access to the\n   * `arg`, `api.getState()` and `api.extra` arguments.\n   *\n   * @returns `false` if it should be skipped\n   */\n  condition?(arg: ThunkArg, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): MaybePromise<boolean | undefined>;\n  /**\n   * If `condition` returns `false`, the asyncThunk will be skipped.\n   * This option allows you to control whether a `rejected` action with `meta.condition == false`\n   * will be dispatched or not.\n   *\n   * @default `false`\n   */\n  dispatchConditionRejection?: boolean;\n  serializeError?: (x: unknown) => GetSerializedErrorType<ThunkApiConfig>;\n\n  /**\n   * A function to use when generating the `requestId` for the request sequence.\n   *\n   * @default `nanoid`\n   */\n  idGenerator?: (arg: ThunkArg) => string;\n} & IsUnknown<GetPendingMeta<ThunkApiConfig>, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   *\n   * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.\n   * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload\n   */\n  getPendingMeta?(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}, {\n  /**\n   * A method to generate additional properties to be added to `meta` of the pending action.\n   */\n  getPendingMeta(base: {\n    arg: ThunkArg;\n    requestId: string;\n  }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}>;\nexport type AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[string, ThunkArg, GetPendingMeta<ThunkApiConfig>?], undefined, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'pending';\n} & GetPendingMeta<ThunkApiConfig>>;\nexport type AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Error | null, string, ThunkArg, GetRejectValue<ThunkApiConfig>?, GetRejectedMeta<ThunkApiConfig>?], GetRejectValue<ThunkApiConfig> | undefined, string, GetSerializedErrorType<ThunkApiConfig>, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'rejected';\n  aborted: boolean;\n  condition: boolean;\n} & (({\n  rejectedWithValue: false;\n} & { [K in keyof GetRejectedMeta<ThunkApiConfig>]?: undefined }) | ({\n  rejectedWithValue: true;\n} & GetRejectedMeta<ThunkApiConfig>))>;\nexport type AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Returned, string, ThunkArg, GetFulfilledMeta<ThunkApiConfig>?], Returned, string, never, {\n  arg: ThunkArg;\n  requestId: string;\n  requestStatus: 'fulfilled';\n} & GetFulfilledMeta<ThunkApiConfig>>;\n\n/**\n * A type describing the return value of `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig> & {\n  pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig>;\n  rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>;\n  fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>;\n  // matchSettled?\n  settled: (action: any) => action is ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> | AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>>;\n  typePrefix: string;\n};\nexport type OverrideThunkApiConfigs<OldConfig, NewConfig> = Id<NewConfig & Omit<OldConfig, keyof NewConfig>>;\nexport type CreateAsyncThunkFunction<CurriedThunkApiConfig extends AsyncThunkConfig> = {\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  // separate signature without `AsyncThunkConfig` for better inference\n  <Returned, ThunkArg = void>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, CurriedThunkApiConfig>): AsyncThunk<Returned, ThunkArg, CurriedThunkApiConfig>;\n\n  /**\n   *\n   * @param typePrefix\n   * @param payloadCreator\n   * @param options\n   *\n   * @public\n   */\n  <Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>, options?: AsyncThunkOptions<ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>): AsyncThunk<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\ntype CreateAsyncThunk<CurriedThunkApiConfig extends AsyncThunkConfig> = CreateAsyncThunkFunction<CurriedThunkApiConfig> & {\n  withTypes<ThunkApiConfig extends AsyncThunkConfig>(): CreateAsyncThunk<OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\nconst externalAbortMessage = 'External signal was aborted';\nexport const createAsyncThunk = /* @__PURE__ */(() => {\n  function createAsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> {\n    type RejectedValue = GetRejectValue<ThunkApiConfig>;\n    type PendingMeta = GetPendingMeta<ThunkApiConfig>;\n    type FulfilledMeta = GetFulfilledMeta<ThunkApiConfig>;\n    type RejectedMeta = GetRejectedMeta<ThunkApiConfig>;\n    const fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/fulfilled', (payload: Returned, requestId: string, arg: ThunkArg, meta?: FulfilledMeta) => ({\n      payload,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'fulfilled' as const\n      }\n    }));\n    const pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/pending', (requestId: string, arg: ThunkArg, meta?: PendingMeta) => ({\n      payload: undefined,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        requestStatus: 'pending' as const\n      }\n    }));\n    const rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/rejected', (error: Error | null, requestId: string, arg: ThunkArg, payload?: RejectedValue, meta?: RejectedMeta) => ({\n      payload,\n      error: (options && options.serializeError || miniSerializeError)(error || 'Rejected') as GetSerializedErrorType<ThunkApiConfig>,\n      meta: {\n        ...(meta as any || {}),\n        arg,\n        requestId,\n        rejectedWithValue: !!payload,\n        requestStatus: 'rejected' as const,\n        aborted: error?.name === 'AbortError',\n        condition: error?.name === 'ConditionError'\n      }\n    }));\n    function actionCreator(arg: ThunkArg, {\n      signal\n    }: AsyncThunkDispatchConfig = {}): AsyncThunkAction<Returned, ThunkArg, Required<ThunkApiConfig>> {\n      return (dispatch, getState, extra) => {\n        const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n        const abortController = new AbortController();\n        let abortHandler: (() => void) | undefined;\n        let abortReason: string | undefined;\n        function abort(reason?: string) {\n          abortReason = reason;\n          abortController.abort();\n        }\n        if (signal) {\n          if (signal.aborted) {\n            abort(externalAbortMessage);\n          } else {\n            signal.addEventListener('abort', () => abort(externalAbortMessage), {\n              once: true\n            });\n          }\n        }\n        const promise = async function () {\n          let finalAction: ReturnType<typeof fulfilled | typeof rejected>;\n          try {\n            let conditionResult = options?.condition?.(arg, {\n              getState,\n              extra\n            });\n            if (isThenable(conditionResult)) {\n              conditionResult = await conditionResult;\n            }\n            if (conditionResult === false || abortController.signal.aborted) {\n              // eslint-disable-next-line no-throw-literal\n              throw {\n                name: 'ConditionError',\n                message: 'Aborted due to condition callback returning false.'\n              };\n            }\n            const abortedPromise = new Promise<never>((_, reject) => {\n              abortHandler = () => {\n                reject({\n                  name: 'AbortError',\n                  message: abortReason || 'Aborted'\n                });\n              };\n              abortController.signal.addEventListener('abort', abortHandler);\n            });\n            dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n              requestId,\n              arg\n            }, {\n              getState,\n              extra\n            })) as any);\n            finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n              dispatch,\n              getState,\n              extra,\n              requestId,\n              signal: abortController.signal,\n              abort,\n              rejectWithValue: ((value: RejectedValue, meta?: RejectedMeta) => {\n                return new RejectWithValue(value, meta);\n              }) as any,\n              fulfillWithValue: ((value: unknown, meta?: FulfilledMeta) => {\n                return new FulfillWithMeta(value, meta);\n              }) as any\n            })).then(result => {\n              if (result instanceof RejectWithValue) {\n                throw result;\n              }\n              if (result instanceof FulfillWithMeta) {\n                return fulfilled(result.payload, requestId, arg, result.meta);\n              }\n              return fulfilled(result as any, requestId, arg);\n            })]);\n          } catch (err) {\n            finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err as any, requestId, arg);\n          } finally {\n            if (abortHandler) {\n              abortController.signal.removeEventListener('abort', abortHandler);\n            }\n          }\n          // We dispatch the result action _after_ the catch, to avoid having any errors\n          // here get swallowed by the try/catch block,\n          // per https://twitter.com/dan_abramov/status/770914221638942720\n          // and https://github.com/reduxjs/redux-toolkit/blob/e85eb17b39a2118d859f7b7746e0f3fee523e089/docs/tutorials/advanced-tutorial.md#async-error-handling-logic-in-thunks\n\n          const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && (finalAction as any).meta.condition;\n          if (!skipDispatch) {\n            dispatch(finalAction as any);\n          }\n          return finalAction;\n        }();\n        return Object.assign(promise as SafePromise<any>, {\n          abort,\n          requestId,\n          arg,\n          unwrap() {\n            return promise.then<any>(unwrapResult);\n          }\n        });\n      };\n    }\n    return Object.assign(actionCreator as AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig>, {\n      pending,\n      rejected,\n      fulfilled,\n      settled: isAnyOf(rejected, fulfilled),\n      typePrefix\n    });\n  }\n  createAsyncThunk.withTypes = () => createAsyncThunk;\n  return createAsyncThunk as CreateAsyncThunk<AsyncThunkConfig>;\n})();\ninterface UnwrappableAction {\n  payload: any;\n  meta?: any;\n  error?: any;\n}\ntype UnwrappedActionPayload<T extends UnwrappableAction> = Exclude<T, {\n  error: any;\n}>['payload'];\n\n/**\n * @public\n */\nexport function unwrapResult<R extends UnwrappableAction>(action: R): UnwrappedActionPayload<R> {\n  if (action.meta && action.meta.rejectedWithValue) {\n    throw action.payload;\n  }\n  if (action.error) {\n    throw action.error;\n  }\n  return action.payload;\n}\ntype WithStrictNullChecks<True, False> = undefined extends boolean ? False : True;\nfunction isThenable(value: any): value is PromiseLike<any> {\n  return value !== null && typeof value === 'object' && typeof value.then === 'function';\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { Selector } from 'reselect';\nimport type { InjectConfig } from './combineSlices';\nimport type { ActionCreatorWithoutPayload, PayloadAction, PayloadActionCreator, PrepareAction, _ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport type { AsyncThunk, AsyncThunkConfig, AsyncThunkOptions, AsyncThunkPayloadCreator, OverrideThunkApiConfigs } from './createAsyncThunk';\nimport { createAsyncThunk as _createAsyncThunk } from './createAsyncThunk';\nimport type { ActionMatcherDescriptionCollection, CaseReducer, ReducerWithInitialState } from './createReducer';\nimport { createReducer } from './createReducer';\nimport type { ActionReducerMapBuilder, TypedActionCreator } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { Id, TypeGuard } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\nconst asyncThunkSymbol = /* @__PURE__ */Symbol.for('rtk-slice-createasyncthunk');\n// type is annotated because it's too long to infer\nexport const asyncThunkCreator: {\n  [asyncThunkSymbol]: typeof _createAsyncThunk;\n} = {\n  [asyncThunkSymbol]: _createAsyncThunk\n};\ntype InjectIntoConfig<NewReducerPath extends string> = InjectConfig & {\n  reducerPath?: NewReducerPath;\n};\n\n/**\n * The return value of `createSlice`\n *\n * @public\n */\nexport interface Slice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice name.\n   */\n  name: Name;\n\n  /**\n   *  The slice reducer path.\n   */\n  reducerPath: ReducerPath;\n\n  /**\n   * The slice's reducer.\n   */\n  reducer: Reducer<State>;\n\n  /**\n   * Action creators for the types of actions that are handled by the slice\n   * reducer.\n   */\n  actions: CaseReducerActions<CaseReducers, Name>;\n\n  /**\n   * The individual case reducer functions that were passed in the `reducers` parameter.\n   * This enables reuse and testing if they were defined inline when calling `createSlice`.\n   */\n  caseReducers: SliceDefinedCaseReducers<CaseReducers>;\n\n  /**\n   * Provides access to the initial state value given to the slice.\n   * If a lazy state initializer was provided, it will be called and a fresh value returned.\n   */\n  getInitialState: () => State;\n\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]: State }>>;\n\n  /**\n   * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.\n   */\n  injectInto<NewReducerPath extends string = ReducerPath>(this: this, injectable: {\n    inject: (slice: {\n      reducerPath: string;\n      reducer: Reducer;\n    }, config?: InjectConfig) => void;\n  }, config?: InjectIntoConfig<NewReducerPath>): InjectedSlice<State, CaseReducers, Name, NewReducerPath, Selectors>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Will throw an error if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]: State }): State;\n}\n\n/**\n * A slice after being called with `injectInto(reducer)`.\n *\n * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.\n */\ntype InjectedSlice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> = Omit<Slice<State, CaseReducers, Name, ReducerPath, Selectors>, 'getSelectors' | 'selectors'> & {\n  /**\n   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n   */\n  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State | undefined>>;\n\n  /**\n   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n   */\n  getSelectors<RootState>(selectState: (rootState: RootState) => State | undefined): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n  /**\n   * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)\n   *\n   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.\n   */\n  get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]?: State | undefined }>>;\n\n  /**\n   * Select the slice state, using the slice's current reducerPath.\n   *\n   * Returns initial state if slice is not found.\n   */\n  selectSlice(state: { [K in ReducerPath]?: State | undefined }): State;\n};\n\n/**\n * Options for `createSlice()`.\n *\n * @public\n */\nexport interface CreateSliceOptions<State = any, CR extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n  /**\n   * The slice's name. Used to namespace the generated action types.\n   */\n  name: Name;\n\n  /**\n   * The slice's reducer path. Used when injecting into a combined slice reducer.\n   */\n  reducerPath?: ReducerPath;\n\n  /**\n   * The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n   */\n  initialState: State | (() => State);\n\n  /**\n   * A mapping from action types to action-type-specific *case reducer*\n   * functions. For every action type, a matching action creator will be\n   * generated using `createAction()`.\n   */\n  reducers: ValidateSliceCaseReducers<State, CR> | ((creators: ReducerCreators<State>) => CR);\n\n  /**\n   * A callback that receives a *builder* object to define\n   * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n   *\n   *\n   * @example\n  ```ts\n  import { createAction, createSlice, Action } from '@reduxjs/toolkit'\n  const incrementBy = createAction<number>('incrementBy')\n  const decrement = createAction('decrement')\n  interface RejectedAction extends Action {\n  error: Error\n  }\n  function isRejectedAction(action: Action): action is RejectedAction {\n  return action.type.endsWith('rejected')\n  }\n  createSlice({\n  name: 'counter',\n  initialState: 0,\n  reducers: {},\n  extraReducers: builder => {\n    builder\n      .addCase(incrementBy, (state, action) => {\n        // action is inferred correctly here if using TS\n      })\n      // You can chain calls, or have separate `builder.addCase()` lines each time\n      .addCase(decrement, (state, action) => {})\n      // You can match a range of action types\n      .addMatcher(\n        isRejectedAction,\n        // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard\n        (state, action) => {}\n      )\n      // and provide a default case if no other handlers matched\n      .addDefaultCase((state, action) => {})\n    }\n  })\n  ```\n   */\n  extraReducers?: (builder: ActionReducerMapBuilder<State>) => void;\n\n  /**\n   * A map of selectors that receive the slice's state and any additional arguments, and return a result.\n   */\n  selectors?: Selectors;\n}\nexport enum ReducerType {\n  reducer = 'reducer',\n  reducerWithPrepare = 'reducerWithPrepare',\n  asyncThunk = 'asyncThunk',\n}\ntype ReducerDefinition<T extends ReducerType = ReducerType> = {\n  _reducerDefinitionType: T;\n};\nexport type CaseReducerDefinition<S = any, A extends Action = UnknownAction> = CaseReducer<S, A> & ReducerDefinition<ReducerType.reducer>;\n\n/**\n * A CaseReducer with a `prepare` method.\n *\n * @public\n */\nexport type CaseReducerWithPrepare<State, Action extends PayloadAction> = {\n  reducer: CaseReducer<State, Action>;\n  prepare: PrepareAction<Action['payload']>;\n};\nexport interface CaseReducerWithPrepareDefinition<State, Action extends PayloadAction> extends CaseReducerWithPrepare<State, Action>, ReducerDefinition<ReducerType.reducerWithPrepare> {}\ntype AsyncThunkSliceReducerConfig<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n  pending?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['pending']>>;\n  rejected?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected']>>;\n  fulfilled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['fulfilled']>>;\n  settled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']>>;\n  options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>;\n};\ntype AsyncThunkSliceReducerDefinition<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig> & ReducerDefinition<ReducerType.asyncThunk> & {\n  payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>;\n};\n\n/**\n * Providing these as part of the config would cause circular types, so we disallow passing them\n */\ntype PreventCircular<ThunkApiConfig> = { [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch' ? never : ThunkApiConfig[K] };\ninterface AsyncThunkCreator<State, CurriedThunkApiConfig extends PreventCircular<AsyncThunkConfig> = PreventCircular<AsyncThunkConfig>> {\n  <Returned, ThunkArg = void>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, CurriedThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, CurriedThunkApiConfig>;\n  <Returned, ThunkArg, ThunkApiConfig extends PreventCircular<AsyncThunkConfig> = {}>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, ThunkApiConfig>;\n  withTypes<ThunkApiConfig extends PreventCircular<AsyncThunkConfig>>(): AsyncThunkCreator<State, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n}\nexport interface ReducerCreators<State> {\n  reducer(caseReducer: CaseReducer<State, PayloadAction>): CaseReducerDefinition<State, PayloadAction>;\n  reducer<Payload>(caseReducer: CaseReducer<State, PayloadAction<Payload>>): CaseReducerDefinition<State, PayloadAction<Payload>>;\n  asyncThunk: AsyncThunkCreator<State>;\n  preparedReducer<Prepare extends PrepareAction<any>>(prepare: Prepare, reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>): {\n    _reducerDefinitionType: ReducerType.reducerWithPrepare;\n    prepare: Prepare;\n    reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>;\n  };\n}\n\n/**\n * The type describing a slice's `reducers` option.\n *\n * @public\n */\nexport type SliceCaseReducers<State> = Record<string, ReducerDefinition> | Record<string, CaseReducer<State, PayloadAction<any>> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>>;\n\n/**\n * The type describing a slice's `selectors` option.\n */\nexport type SliceSelectors<State> = {\n  [K: string]: (sliceState: State, ...args: any[]) => any;\n};\ntype SliceActionType<SliceName extends string, ActionName extends keyof any> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string;\n\n/**\n * Derives the slice's `actions` property from the `reducers` options\n *\n * @public\n */\nexport type CaseReducerActions<CaseReducers extends SliceCaseReducers<any>, SliceName extends string> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends {\n  prepare: any;\n} ? ActionCreatorForCaseReducerWithPrepare<Definition, SliceActionType<SliceName, Type>> : Definition extends AsyncThunkSliceReducerDefinition<any, infer ThunkArg, infer Returned, infer ThunkApiConfig> ? AsyncThunk<Returned, ThunkArg, ThunkApiConfig> : Definition extends {\n  reducer: any;\n} ? ActionCreatorForCaseReducer<Definition['reducer'], SliceActionType<SliceName, Type>> : ActionCreatorForCaseReducer<Definition, SliceActionType<SliceName, Type>> : never };\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducerWithPrepare<CR extends {\n  prepare: any;\n}, Type extends string> = _ActionCreatorWithPreparedPayload<CR['prepare'], Type>;\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducer`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducer<CR, Type extends string> = CR extends ((state: any, action: infer Action) => any) ? Action extends {\n  payload: infer P;\n} ? PayloadActionCreator<P, Type> : ActionCreatorWithoutPayload<Type> : ActionCreatorWithoutPayload<Type>;\n\n/**\n * Extracts the CaseReducers out of a `reducers` object, even if they are\n * tested into a `CaseReducerWithPrepare`.\n *\n * @internal\n */\ntype SliceDefinedCaseReducers<CaseReducers extends SliceCaseReducers<any>> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends AsyncThunkSliceReducerDefinition<any, any, any> ? Id<Pick<Required<Definition>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>> : Definition extends {\n  reducer: infer Reducer;\n} ? Reducer : Definition : never };\ntype RemappedSelector<S extends Selector, NewState> = S extends Selector<any, infer R, infer P> ? Selector<NewState, R, P> & {\n  unwrapped: S;\n} : never;\n\n/**\n * Extracts the final selector type from the `selectors` object.\n *\n * Removes the `string` index signature from the default value.\n */\ntype SliceDefinedSelectors<State, Selectors extends SliceSelectors<State>, RootState> = { [K in keyof Selectors as string extends K ? never : K]: RemappedSelector<Selectors[K], RootState> };\n\n/**\n * Used on a SliceCaseReducers object.\n * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that\n * the `reducer` and the `prepare` function use the same type of `payload`.\n *\n * Might do additional such checks in the future.\n *\n * This type is only ever useful if you want to write your own wrapper around\n * `createSlice`. Please don't use it otherwise!\n *\n * @public\n */\nexport type ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & { [T in keyof ACR]: ACR[T] extends {\n  reducer(s: S, action?: infer A): any;\n} ? {\n  prepare(...a: never[]): Omit<A, 'type'>;\n} : {} };\nfunction getType(slice: string, actionKey: string): string {\n  return `${slice}/${actionKey}`;\n}\ninterface BuildCreateSliceConfig {\n  creators?: {\n    asyncThunk?: typeof asyncThunkCreator;\n  };\n}\nexport function buildCreateSlice({\n  creators\n}: BuildCreateSliceConfig = {}) {\n  const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n  return function createSlice<State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>): Slice<State, CaseReducers, Name, ReducerPath, Selectors> {\n    const {\n      name,\n      reducerPath = name as unknown as ReducerPath\n    } = options;\n    if (!name) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(11) : '`name` is a required option for createSlice');\n    }\n    if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n      if (options.initialState === undefined) {\n        console.error('You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`');\n      }\n    }\n    const reducers = (typeof options.reducers === 'function' ? options.reducers(buildReducerCreators<State>()) : options.reducers) || {};\n    const reducerNames = Object.keys(reducers);\n    const context: ReducerHandlingContext<State> = {\n      sliceCaseReducersByName: {},\n      sliceCaseReducersByType: {},\n      actionCreators: {},\n      sliceMatchers: []\n    };\n    const contextMethods: ReducerHandlingContextMethods<State> = {\n      addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<State>) {\n        const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n        if (!type) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(12) : '`context.addCase` cannot be called with an empty action type');\n        }\n        if (type in context.sliceCaseReducersByType) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(13) : '`context.addCase` cannot be called with two reducers for the same action type: ' + type);\n        }\n        context.sliceCaseReducersByType[type] = reducer;\n        return contextMethods;\n      },\n      addMatcher(matcher, reducer) {\n        context.sliceMatchers.push({\n          matcher,\n          reducer\n        });\n        return contextMethods;\n      },\n      exposeAction(name, actionCreator) {\n        context.actionCreators[name] = actionCreator;\n        return contextMethods;\n      },\n      exposeCaseReducer(name, reducer) {\n        context.sliceCaseReducersByName[name] = reducer;\n        return contextMethods;\n      }\n    };\n    reducerNames.forEach(reducerName => {\n      const reducerDefinition = reducers[reducerName];\n      const reducerDetails: ReducerDetails = {\n        reducerName,\n        type: getType(name, reducerName),\n        createNotation: typeof options.reducers === 'function'\n      };\n      if (isAsyncThunkSliceReducerDefinition<State>(reducerDefinition)) {\n        handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n      } else {\n        handleNormalReducerDefinition<State>(reducerDetails, reducerDefinition as any, contextMethods);\n      }\n    });\n    function buildReducer() {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof options.extraReducers === 'object') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n        }\n      }\n      const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = undefined] = typeof options.extraReducers === 'function' ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n      const finalCaseReducers = {\n        ...extraReducers,\n        ...context.sliceCaseReducersByType\n      };\n      return createReducer(options.initialState, builder => {\n        for (let key in finalCaseReducers) {\n          builder.addCase(key, finalCaseReducers[key] as CaseReducer<any>);\n        }\n        for (let sM of context.sliceMatchers) {\n          builder.addMatcher(sM.matcher, sM.reducer);\n        }\n        for (let m of actionMatchers) {\n          builder.addMatcher(m.matcher, m.reducer);\n        }\n        if (defaultCaseReducer) {\n          builder.addDefaultCase(defaultCaseReducer);\n        }\n      });\n    }\n    const selectSelf = (state: State) => state;\n    const injectedSelectorCache = new Map<boolean, WeakMap<(rootState: any) => State | undefined, Record<string, (rootState: any) => any>>>();\n    const injectedStateCache = new WeakMap<(rootState: any) => State, State>();\n    let _reducer: ReducerWithInitialState<State>;\n    function reducer(state: State | undefined, action: UnknownAction) {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer(state, action);\n    }\n    function getInitialState() {\n      if (!_reducer) _reducer = buildReducer();\n      return _reducer.getInitialState();\n    }\n    function makeSelectorProps<CurrentReducerPath extends string = ReducerPath>(reducerPath: CurrentReducerPath, injected = false): Pick<Slice<State, CaseReducers, Name, CurrentReducerPath, Selectors>, 'getSelectors' | 'selectors' | 'selectSlice' | 'reducerPath'> {\n      function selectSlice(state: { [K in CurrentReducerPath]: State }) {\n        let sliceState = state[reducerPath];\n        if (typeof sliceState === 'undefined') {\n          if (injected) {\n            sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);\n          } else if (process.env.NODE_ENV !== 'production') {\n            throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(15) : 'selectSlice returned undefined for an uninjected slice reducer');\n          }\n        }\n        return sliceState;\n      }\n      function getSelectors(selectState: (rootState: any) => State = selectSelf) {\n        const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => new WeakMap());\n        return getOrInsertComputed(selectorCache, selectState, () => {\n          const map: Record<string, Selector<any, any>> = {};\n          for (const [name, selector] of Object.entries(options.selectors ?? {})) {\n            map[name] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);\n          }\n          return map;\n        }) as any;\n      }\n      return {\n        reducerPath,\n        getSelectors,\n        get selectors() {\n          return getSelectors(selectSlice);\n        },\n        selectSlice\n      };\n    }\n    const slice: Slice<State, CaseReducers, Name, ReducerPath, Selectors> = {\n      name,\n      reducer,\n      actions: context.actionCreators as any,\n      caseReducers: context.sliceCaseReducersByName as any,\n      getInitialState,\n      ...makeSelectorProps(reducerPath),\n      injectInto(injectable, {\n        reducerPath: pathOpt,\n        ...config\n      } = {}) {\n        const newReducerPath = pathOpt ?? reducerPath;\n        injectable.inject({\n          reducerPath: newReducerPath,\n          reducer\n        }, config);\n        return {\n          ...slice,\n          ...makeSelectorProps(newReducerPath, true)\n        } as any;\n      }\n    };\n    return slice;\n  };\n}\nfunction wrapSelector<State, NewState, S extends Selector<State>>(selector: S, selectState: Selector<NewState, State>, getInitialState: () => State, injected?: boolean) {\n  function wrapper(rootState: NewState, ...args: any[]) {\n    let sliceState = selectState(rootState);\n    if (typeof sliceState === 'undefined') {\n      if (injected) {\n        sliceState = getInitialState();\n      } else if (process.env.NODE_ENV !== 'production') {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(16) : 'selectState returned undefined for an uninjected slice reducer');\n      }\n    }\n    return selector(sliceState, ...args);\n  }\n  wrapper.unwrapped = selector;\n  return wrapper as RemappedSelector<S, NewState>;\n}\n\n/**\n * A function that accepts an initial state, an object full of reducer\n * functions, and a \"slice name\", and automatically generates\n * action creators and action types that correspond to the\n * reducers and state.\n *\n * @public\n */\nexport const createSlice = /* @__PURE__ */buildCreateSlice();\ninterface ReducerHandlingContext<State> {\n  sliceCaseReducersByName: Record<string, CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>>;\n  sliceCaseReducersByType: Record<string, CaseReducer<State, any>>;\n  sliceMatchers: ActionMatcherDescriptionCollection<State>;\n  actionCreators: Record<string, Function>;\n}\ninterface ReducerHandlingContextMethods<State> {\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ReducerHandlingContextMethods<State>;\n  /**\n   * Adds a case reducer to handle a single action type.\n   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n   * @param reducer - The actual case reducer function.\n   */\n  addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ReducerHandlingContextMethods<State>;\n\n  /**\n   * Allows you to match incoming actions against your own filter function instead of only the `action.type` property.\n   * @remarks\n   * If multiple matcher reducers match, all of them will be executed in the order\n   * they were defined in - even if a case reducer already matched.\n   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n   *   function\n   * @param reducer - The actual case reducer function.\n   *\n   */\n  addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<State, A extends Action ? A : A & Action>): ReducerHandlingContextMethods<State>;\n  /**\n   * Add an action to be exposed under the final `slice.actions` key.\n   * @param name The key to be exposed as.\n   * @param actionCreator The action to expose.\n   * @example\n   * context.exposeAction(\"addPost\", createAction<Post>(\"addPost\"));\n   *\n   * export const { addPost } = slice.actions\n   *\n   * dispatch(addPost(post))\n   */\n  exposeAction(name: string, actionCreator: Function): ReducerHandlingContextMethods<State>;\n  /**\n   * Add a case reducer to be exposed under the final `slice.caseReducers` key.\n   * @param name The key to be exposed as.\n   * @param reducer The reducer to expose.\n   * @example\n   * context.exposeCaseReducer(\"addPost\", (state, action: PayloadAction<Post>) => {\n   *   state.push(action.payload)\n   * })\n   *\n   * slice.caseReducers.addPost([], addPost(post))\n   */\n  exposeCaseReducer(name: string, reducer: CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>): ReducerHandlingContextMethods<State>;\n}\ninterface ReducerDetails {\n  /** The key the reducer was defined under */\n  reducerName: string;\n  /** The predefined action type, i.e. `${slice.name}/${reducerName}` */\n  type: string;\n  /** Whether create. notation was used when defining reducers */\n  createNotation: boolean;\n}\nfunction buildReducerCreators<State>(): ReducerCreators<State> {\n  function asyncThunk(payloadCreator: AsyncThunkPayloadCreator<any, any>, config: AsyncThunkSliceReducerConfig<State, any>): AsyncThunkSliceReducerDefinition<State, any> {\n    return {\n      _reducerDefinitionType: ReducerType.asyncThunk,\n      payloadCreator,\n      ...config\n    };\n  }\n  asyncThunk.withTypes = () => asyncThunk;\n  return {\n    reducer(caseReducer: CaseReducer<State, any>) {\n      return Object.assign({\n        // hack so the wrapping function has the same name as the original\n        // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n        [caseReducer.name](...args: Parameters<typeof caseReducer>) {\n          return caseReducer(...args);\n        }\n      }[caseReducer.name], {\n        _reducerDefinitionType: ReducerType.reducer\n      } as const);\n    },\n    preparedReducer(prepare, reducer) {\n      return {\n        _reducerDefinitionType: ReducerType.reducerWithPrepare,\n        prepare,\n        reducer\n      };\n    },\n    asyncThunk: asyncThunk as any\n  };\n}\nfunction handleNormalReducerDefinition<State>({\n  type,\n  reducerName,\n  createNotation\n}: ReducerDetails, maybeReducerWithPrepare: CaseReducer<State, {\n  payload: any;\n  type: string;\n}> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>, context: ReducerHandlingContextMethods<State>) {\n  let caseReducer: CaseReducer<State, any>;\n  let prepareCallback: PrepareAction<any> | undefined;\n  if ('reducer' in maybeReducerWithPrepare) {\n    if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(17) : 'Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.');\n    }\n    caseReducer = maybeReducerWithPrepare.reducer;\n    prepareCallback = maybeReducerWithPrepare.prepare;\n  } else {\n    caseReducer = maybeReducerWithPrepare;\n  }\n  context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition<State>(reducerDefinition: any): reducerDefinition is AsyncThunkSliceReducerDefinition<State, any, any, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.asyncThunk;\n}\nfunction isCaseReducerWithPrepareDefinition<State>(reducerDefinition: any): reducerDefinition is CaseReducerWithPrepareDefinition<State, any> {\n  return reducerDefinition._reducerDefinitionType === ReducerType.reducerWithPrepare;\n}\nfunction handleThunkCaseReducerDefinition<State>({\n  type,\n  reducerName\n}: ReducerDetails, reducerDefinition: AsyncThunkSliceReducerDefinition<State, any, any, any>, context: ReducerHandlingContextMethods<State>, cAT: typeof _createAsyncThunk | undefined) {\n  if (!cAT) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(18) : 'Cannot use `create.asyncThunk` in the built-in `createSlice`. ' + 'Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.');\n  }\n  const {\n    payloadCreator,\n    fulfilled,\n    pending,\n    rejected,\n    settled,\n    options\n  } = reducerDefinition;\n  const thunk = cAT(type, payloadCreator, options as any);\n  context.exposeAction(reducerName, thunk);\n  if (fulfilled) {\n    context.addCase(thunk.fulfilled, fulfilled);\n  }\n  if (pending) {\n    context.addCase(thunk.pending, pending);\n  }\n  if (rejected) {\n    context.addCase(thunk.rejected, rejected);\n  }\n  if (settled) {\n    context.addMatcher(thunk.settled, settled);\n  }\n  context.exposeCaseReducer(reducerName, {\n    fulfilled: fulfilled || noop,\n    pending: pending || noop,\n    rejected: rejected || noop,\n    settled: settled || noop\n  });\n}\nfunction noop() {}","import type { EntityId, EntityState, EntityStateAdapter, EntityStateFactory } from './models';\nexport function getInitialEntityState<T, Id extends EntityId>(): EntityState<T, Id> {\n  return {\n    ids: [],\n    entities: {} as Record<Id, T>\n  };\n}\nexport function createInitialStateFactory<T, Id extends EntityId>(stateAdapter: EntityStateAdapter<T, Id>): EntityStateFactory<T, Id> {\n  function getInitialState(state?: undefined, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id>;\n  function getInitialState<S extends object>(additionalState: S, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id> & S;\n  function getInitialState(additionalState: any = {}, entities?: readonly T[] | Record<Id, T>): any {\n    const state = Object.assign(getInitialEntityState(), additionalState);\n    return entities ? stateAdapter.setAll(state, entities) : state;\n  }\n  return {\n    getInitialState\n  };\n}","import type { CreateSelectorFunction, Selector } from 'reselect';\nimport { createDraftSafeSelector } from '../createDraftSafeSelector';\nimport type { EntityId, EntitySelectors, EntityState } from './models';\ntype AnyFunction = (...args: any) => any;\ntype AnyCreateSelectorFunction = CreateSelectorFunction<<F extends AnyFunction>(f: F) => F, <F extends AnyFunction>(f: F) => F>;\nexport type GetSelectorsOptions = {\n  createSelector?: AnyCreateSelectorFunction;\n};\nexport function createSelectorsFactory<T, Id extends EntityId>() {\n  function getSelectors(selectState?: undefined, options?: GetSelectorsOptions): EntitySelectors<T, EntityState<T, Id>, Id>;\n  function getSelectors<V>(selectState: (state: V) => EntityState<T, Id>, options?: GetSelectorsOptions): EntitySelectors<T, V, Id>;\n  function getSelectors<V>(selectState?: (state: V) => EntityState<T, Id>, options: GetSelectorsOptions = {}): EntitySelectors<T, any, Id> {\n    const {\n      createSelector = createDraftSafeSelector as AnyCreateSelectorFunction\n    } = options;\n    const selectIds = (state: EntityState<T, Id>) => state.ids;\n    const selectEntities = (state: EntityState<T, Id>) => state.entities;\n    const selectAll = createSelector(selectIds, selectEntities, (ids, entities): T[] => ids.map(id => entities[id]!));\n    const selectId = (_: unknown, id: Id) => id;\n    const selectById = (entities: Record<Id, T>, id: Id) => entities[id];\n    const selectTotal = createSelector(selectIds, ids => ids.length);\n    if (!selectState) {\n      return {\n        selectIds,\n        selectEntities,\n        selectAll,\n        selectTotal,\n        selectById: createSelector(selectEntities, selectId, selectById)\n      };\n    }\n    const selectGlobalizedEntities = createSelector(selectState as Selector<V, EntityState<T, Id>>, selectEntities);\n    return {\n      selectIds: createSelector(selectState, selectIds),\n      selectEntities: selectGlobalizedEntities,\n      selectAll: createSelector(selectState, selectAll),\n      selectTotal: createSelector(selectState, selectTotal),\n      selectById: createSelector(selectGlobalizedEntities, selectId, selectById)\n    };\n  }\n  return {\n    getSelectors\n  };\n}","import { produce as createNextState, isDraft } from 'immer';\nimport type { Draft } from 'immer';\nimport type { EntityId, DraftableEntityState, PreventAny } from './models';\nimport type { PayloadAction } from '../createAction';\nimport { isFSA } from '../createAction';\nexport const isDraftTyped = isDraft as <T>(value: T | Draft<T>) => value is Draft<T>;\nexport function createSingleArgumentStateOperator<T, Id extends EntityId>(mutator: (state: DraftableEntityState<T, Id>) => void) {\n  const operator = createStateOperator((_: undefined, state: DraftableEntityState<T, Id>) => mutator(state));\n  return function operation<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>): S {\n    return operator(state as S, undefined);\n  };\n}\nexport function createStateOperator<T, Id extends EntityId, R>(mutator: (arg: R, state: DraftableEntityState<T, Id>) => void) {\n  return function operation<S extends DraftableEntityState<T, Id>>(state: S, arg: R | PayloadAction<R>): S {\n    function isPayloadActionArgument(arg: R | PayloadAction<R>): arg is PayloadAction<R> {\n      return isFSA(arg);\n    }\n    const runMutator = (draft: DraftableEntityState<T, Id>) => {\n      if (isPayloadActionArgument(arg)) {\n        mutator(arg.payload, draft);\n      } else {\n        mutator(arg, draft);\n      }\n    };\n    if (isDraftTyped<DraftableEntityState<T, Id>>(state)) {\n      // we must already be inside a `createNextState` call, likely because\n      // this is being wrapped in `createReducer` or `createSlice`.\n      // It's safe to just pass the draft to the mutator.\n      runMutator(state);\n\n      // since it's a draft, we'll just return it\n      return state;\n    }\n    return createNextState(state, runMutator);\n  };\n}","import type { Draft } from 'immer';\nimport { current, isDraft } from 'immer';\nimport type { DraftableEntityState, EntityId, IdSelector, Update } from './models';\nexport function selectIdValue<T, Id extends EntityId>(entity: T, selectId: IdSelector<T, Id>) {\n  const key = selectId(entity);\n  if (process.env.NODE_ENV !== 'production' && key === undefined) {\n    console.warn('The entity passed to the `selectId` implementation returned undefined.', 'You should probably provide your own `selectId` implementation.', 'The entity that was passed:', entity, 'The `selectId` implementation:', selectId.toString());\n  }\n  return key;\n}\nexport function ensureEntitiesArray<T, Id extends EntityId>(entities: readonly T[] | Record<Id, T>): readonly T[] {\n  if (!Array.isArray(entities)) {\n    entities = Object.values(entities);\n  }\n  return entities;\n}\nexport function getCurrent<T>(value: T | Draft<T>): T {\n  return (isDraft(value) ? current(value) : value) as T;\n}\nexport function splitAddedUpdatedEntities<T, Id extends EntityId>(newEntities: readonly T[] | Record<Id, T>, selectId: IdSelector<T, Id>, state: DraftableEntityState<T, Id>): [T[], Update<T, Id>[], Id[]] {\n  newEntities = ensureEntitiesArray(newEntities);\n  const existingIdsArray = getCurrent(state.ids);\n  const existingIds = new Set<Id>(existingIdsArray);\n  const added: T[] = [];\n  const addedIds = new Set<Id>([]);\n  const updated: Update<T, Id>[] = [];\n  for (const entity of newEntities) {\n    const id = selectIdValue(entity, selectId);\n    if (existingIds.has(id) || addedIds.has(id)) {\n      updated.push({\n        id,\n        changes: entity\n      });\n    } else {\n      addedIds.add(id);\n      added.push(entity);\n    }\n  }\n  return [added, updated, existingIdsArray];\n}","import type { Draft } from 'immer';\nimport type { EntityStateAdapter, IdSelector, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator, createSingleArgumentStateOperator } from './state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities } from './utils';\nexport function createUnsortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  function addOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (key in state.entities) {\n      return;\n    }\n    state.ids.push(key as Id & Draft<Id>);\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      addOneMutably(entity, state);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    const key = selectIdValue(entity, selectId);\n    if (!(key in state.entities)) {\n      state.ids.push(key as Id & Draft<Id>);\n    }\n    ;\n    (state.entities as Record<Id, T>)[key] = entity;\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    for (const entity of newEntities) {\n      setOneMutably(entity, state);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.ids = [];\n    state.entities = {} as Record<Id, T>;\n    addManyMutably(newEntities, state);\n  }\n  function removeOneMutably(key: Id, state: R): void {\n    return removeManyMutably([key], state);\n  }\n  function removeManyMutably(keys: readonly Id[], state: R): void {\n    let didMutate = false;\n    keys.forEach(key => {\n      if (key in state.entities) {\n        delete (state.entities as Record<Id, T>)[key];\n        didMutate = true;\n      }\n    });\n    if (didMutate) {\n      state.ids = (state.ids as Id[]).filter(id => id in state.entities) as Id[] | Draft<Id[]>;\n    }\n  }\n  function removeAllMutably(state: R): void {\n    Object.assign(state, {\n      ids: [],\n      entities: {}\n    });\n  }\n  function takeNewKey(keys: {\n    [id: string]: Id;\n  }, update: Update<T, Id>, state: R): boolean {\n    const original: T | undefined = (state.entities as Record<Id, T>)[update.id];\n    if (original === undefined) {\n      return false;\n    }\n    const updated: T = Object.assign({}, original, update.changes);\n    const newKey = selectIdValue(updated, selectId);\n    const hasNewKey = newKey !== update.id;\n    if (hasNewKey) {\n      keys[update.id] = newKey;\n      delete (state.entities as Record<Id, T>)[update.id];\n    }\n    ;\n    (state.entities as Record<Id, T>)[newKey] = updated;\n    return hasNewKey;\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    const newKeys: {\n      [id: string]: Id;\n    } = {};\n    const updatesPerEntity: {\n      [id: string]: Update<T, Id>;\n    } = {};\n    updates.forEach(update => {\n      // Only apply updates to entities that currently exist\n      if (update.id in state.entities) {\n        // If there are multiple updates to one entity, merge them together\n        updatesPerEntity[update.id] = {\n          id: update.id,\n          // Spreads ignore falsy values, so this works even if there isn't\n          // an existing update already at this key\n          changes: {\n            ...updatesPerEntity[update.id]?.changes,\n            ...update.changes\n          }\n        };\n      }\n    });\n    updates = Object.values(updatesPerEntity);\n    const didMutateEntities = updates.length > 0;\n    if (didMutateEntities) {\n      const didMutateIds = updates.filter(update => takeNewKey(newKeys, update, state)).length > 0;\n      if (didMutateIds) {\n        state.ids = Object.values(state.entities).map(e => selectIdValue(e as T, selectId));\n      }\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    addManyMutably(added, state);\n    updateManyMutably(updated, state);\n  }\n  return {\n    removeAll: createSingleArgumentStateOperator(removeAllMutably),\n    addOne: createStateOperator(addOneMutably),\n    addMany: createStateOperator(addManyMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    upsertMany: createStateOperator(upsertManyMutably),\n    removeOne: createStateOperator(removeOneMutably),\n    removeMany: createStateOperator(removeManyMutably)\n  };\n}","import type { IdSelector, Comparer, EntityStateAdapter, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator } from './state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities, getCurrent } from './utils';\n\n// Borrowed from Replay\nexport function findInsertIndex<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): number {\n  let lowIndex = 0;\n  let highIndex = sortedItems.length;\n  while (lowIndex < highIndex) {\n    let middleIndex = lowIndex + highIndex >>> 1;\n    const currentItem = sortedItems[middleIndex];\n    const res = comparisonFunction(item, currentItem);\n    if (res >= 0) {\n      lowIndex = middleIndex + 1;\n    } else {\n      highIndex = middleIndex;\n    }\n  }\n  return lowIndex;\n}\nexport function insert<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): T[] {\n  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n  sortedItems.splice(insertAtIndex, 0, item);\n  return sortedItems;\n}\nexport function createSortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>, comparer: Comparer<T>): EntityStateAdapter<T, Id> {\n  type R = DraftableEntityState<T, Id>;\n  const {\n    removeOne,\n    removeMany,\n    removeAll\n  } = createUnsortedStateAdapter(selectId);\n  function addOneMutably(entity: T, state: R): void {\n    return addManyMutably([entity], state);\n  }\n  function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R, existingIds?: Id[]): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    const existingKeys = new Set<Id>(existingIds ?? getCurrent(state.ids));\n    const models = newEntities.filter(model => !existingKeys.has(selectIdValue(model, selectId)));\n    if (models.length !== 0) {\n      mergeFunction(state, models);\n    }\n  }\n  function setOneMutably(entity: T, state: R): void {\n    return setManyMutably([entity], state);\n  }\n  function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    if (newEntities.length !== 0) {\n      for (const item of newEntities) {\n        delete (state.entities as Record<Id, T>)[selectId(item)];\n      }\n      mergeFunction(state, newEntities);\n    }\n  }\n  function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    newEntities = ensureEntitiesArray(newEntities);\n    state.entities = {} as Record<Id, T>;\n    state.ids = [];\n    addManyMutably(newEntities, state, []);\n  }\n  function updateOneMutably(update: Update<T, Id>, state: R): void {\n    return updateManyMutably([update], state);\n  }\n  function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n    let appliedUpdates = false;\n    let replacedIds = false;\n    for (let update of updates) {\n      const entity: T | undefined = (state.entities as Record<Id, T>)[update.id];\n      if (!entity) {\n        continue;\n      }\n      appliedUpdates = true;\n      Object.assign(entity, update.changes);\n      const newId = selectId(entity);\n      if (update.id !== newId) {\n        // We do support the case where updates can change an item's ID.\n        // This makes things trickier - go ahead and swap the IDs in state now.\n        replacedIds = true;\n        delete (state.entities as Record<Id, T>)[update.id];\n        const oldIndex = (state.ids as Id[]).indexOf(update.id);\n        state.ids[oldIndex] = newId;\n        (state.entities as Record<Id, T>)[newId] = entity;\n      }\n    }\n    if (appliedUpdates) {\n      mergeFunction(state, [], appliedUpdates, replacedIds);\n    }\n  }\n  function upsertOneMutably(entity: T, state: R): void {\n    return upsertManyMutably([entity], state);\n  }\n  function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n    if (added.length) {\n      addManyMutably(added, state, existingIdsArray);\n    }\n    if (updated.length) {\n      updateManyMutably(updated, state);\n    }\n  }\n  function areArraysEqual(a: readonly unknown[], b: readonly unknown[]) {\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] === b[i]) {\n        continue;\n      }\n      return false;\n    }\n    return true;\n  }\n  type MergeFunction = (state: R, addedItems: readonly T[], appliedUpdates?: boolean, replacedIds?: boolean) => void;\n  const mergeFunction: MergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n    const currentEntities = getCurrent(state.entities);\n    const currentIds = getCurrent(state.ids);\n    const stateEntities = state.entities as Record<Id, T>;\n    let ids: Iterable<Id> = currentIds;\n    if (replacedIds) {\n      ids = new Set(currentIds);\n    }\n    let sortedEntities: T[] = [];\n    for (const id of ids) {\n      const entity = currentEntities[id];\n      if (entity) {\n        sortedEntities.push(entity);\n      }\n    }\n    const wasPreviouslyEmpty = sortedEntities.length === 0;\n\n    // Insert/overwrite all new/updated\n    for (const item of addedItems) {\n      stateEntities[selectId(item)] = item;\n      if (!wasPreviouslyEmpty) {\n        // Binary search insertion generally requires fewer comparisons\n        insert(sortedEntities, item, comparer);\n      }\n    }\n    if (wasPreviouslyEmpty) {\n      // All we have is the incoming values, sort them\n      sortedEntities = addedItems.slice().sort(comparer);\n    } else if (appliedUpdates) {\n      // We should have a _mostly_-sorted array already\n      sortedEntities.sort(comparer);\n    }\n    const newSortedIds = sortedEntities.map(selectId);\n    if (!areArraysEqual(currentIds, newSortedIds)) {\n      state.ids = newSortedIds;\n    }\n  };\n  return {\n    removeOne,\n    removeMany,\n    removeAll,\n    addOne: createStateOperator(addOneMutably),\n    updateOne: createStateOperator(updateOneMutably),\n    upsertOne: createStateOperator(upsertOneMutably),\n    setOne: createStateOperator(setOneMutably),\n    setMany: createStateOperator(setManyMutably),\n    setAll: createStateOperator(setAllMutably),\n    addMany: createStateOperator(addManyMutably),\n    updateMany: createStateOperator(updateManyMutably),\n    upsertMany: createStateOperator(upsertManyMutably)\n  };\n}","import type { EntityAdapter, EntityId, EntityAdapterOptions } from './models';\nimport { createInitialStateFactory } from './entity_state';\nimport { createSelectorsFactory } from './state_selectors';\nimport { createSortedStateAdapter } from './sorted_state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport type { WithRequiredProp } from '../tsHelpers';\nexport function createEntityAdapter<T, Id extends EntityId>(options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>): EntityAdapter<T, Id>;\nexport function createEntityAdapter<T extends {\n  id: EntityId;\n}>(options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>): EntityAdapter<T, T['id']>;\n\n/**\n *\n * @param options\n *\n * @public\n */\nexport function createEntityAdapter<T>(options: EntityAdapterOptions<T, EntityId> = {}): EntityAdapter<T, EntityId> {\n  const {\n    selectId,\n    sortComparer\n  }: Required<EntityAdapterOptions<T, EntityId>> = {\n    sortComparer: false,\n    selectId: (instance: any) => instance.id,\n    ...options\n  };\n  const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n  const stateFactory = createInitialStateFactory(stateAdapter);\n  const selectorsFactory = createSelectorsFactory<T, EntityId>();\n  return {\n    selectId,\n    sortComparer,\n    ...stateFactory,\n    ...selectorsFactory,\n    ...stateAdapter\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Action, Dispatch, MiddlewareAPI, UnknownAction } from 'redux';\nimport { isAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport { createAction } from '../createAction';\nimport { nanoid } from '../nanoid';\nimport { TaskAbortError, listenerCancelled, listenerCompleted, taskCancelled, taskCompleted } from './exceptions';\nimport { createDelay, createPause, raceWithSignal, runTask, validateActive } from './task';\nimport type { AbortSignalWithReason, AddListenerOverloads, AnyListenerPredicate, CreateListenerMiddlewareOptions, FallbackAddListenerOptions, ForkOptions, ForkedTask, ForkedTaskExecutor, ListenerEntry, ListenerErrorHandler, ListenerErrorInfo, ListenerMiddleware, ListenerMiddlewareInstance, TakePattern, TaskResult, TypedAddListener, TypedCreateListenerEntry, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\nimport { abortControllerWithReason, addAbortSignalListener, assertFunction, catchRejection, noop } from './utils';\nexport { TaskAbortError } from './exceptions';\nexport type { AsyncTaskExecutor, CreateListenerMiddlewareOptions, ForkedTask, ForkedTaskAPI, ForkedTaskExecutor, ListenerEffect, ListenerEffectAPI, ListenerErrorHandler, ListenerMiddleware, ListenerMiddlewareInstance, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult, TypedAddListener, TypedRemoveListener, TypedStartListening, TypedStopListening, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\n\n//Overly-aggressive byte-shaving\nconst {\n  assign\n} = Object;\n/**\n * @internal\n */\nconst INTERNAL_NIL_TOKEN = {} as const;\nconst alm = 'listenerMiddleware' as const;\nconst createFork = (parentAbortSignal: AbortSignalWithReason<unknown>, parentBlockingPromises: Promise<any>[]) => {\n  const linkControllers = (controller: AbortController) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n  return <T,>(taskExecutor: ForkedTaskExecutor<T>, opts?: ForkOptions): ForkedTask<T> => {\n    assertFunction(taskExecutor, 'taskExecutor');\n    const childAbortController = new AbortController();\n    linkControllers(childAbortController);\n    const result = runTask<T>(async (): Promise<T> => {\n      validateActive(parentAbortSignal);\n      validateActive(childAbortController.signal);\n      const result = (await taskExecutor({\n        pause: createPause(childAbortController.signal),\n        delay: createDelay(childAbortController.signal),\n        signal: childAbortController.signal\n      })) as T;\n      validateActive(childAbortController.signal);\n      return result;\n    }, () => abortControllerWithReason(childAbortController, taskCompleted));\n    if (opts?.autoJoin) {\n      parentBlockingPromises.push(result.catch(noop));\n    }\n    return {\n      result: createPause<TaskResult<T>>(parentAbortSignal)(result),\n      cancel() {\n        abortControllerWithReason(childAbortController, taskCancelled);\n      }\n    };\n  };\n};\nconst createTakePattern = <S,>(startListening: AddListenerOverloads<UnsubscribeListener, S, Dispatch>, signal: AbortSignal): TakePattern<S> => {\n  /**\n   * A function that takes a ListenerPredicate and an optional timeout,\n   * and resolves when either the predicate returns `true` based on an action\n   * state combination or when the timeout expires.\n   * If the parent listener is canceled while waiting, this will throw a\n   * TaskAbortError.\n   */\n  const take = async <P extends AnyListenerPredicate<S>,>(predicate: P, timeout: number | undefined) => {\n    validateActive(signal);\n\n    // Placeholder unsubscribe function until the listener is added\n    let unsubscribe: UnsubscribeListener = () => {};\n    const tuplePromise = new Promise<[Action, S, S]>((resolve, reject) => {\n      // Inside the Promise, we synchronously add the listener.\n      let stopListening = startListening({\n        predicate: predicate as any,\n        effect: (action, listenerApi): void => {\n          // One-shot listener that cleans up as soon as the predicate passes\n          listenerApi.unsubscribe();\n          // Resolve the promise with the same arguments the predicate saw\n          resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n        }\n      });\n      unsubscribe = () => {\n        stopListening();\n        reject();\n      };\n    });\n    const promises: (Promise<null> | Promise<[Action, S, S]>)[] = [tuplePromise];\n    if (timeout != null) {\n      promises.push(new Promise<null>(resolve => setTimeout(resolve, timeout, null)));\n    }\n    try {\n      const output = await raceWithSignal(signal, Promise.race(promises));\n      validateActive(signal);\n      return output;\n    } finally {\n      // Always clean up the listener\n      unsubscribe();\n    }\n  };\n  return ((predicate: AnyListenerPredicate<S>, timeout: number | undefined) => catchRejection(take(predicate, timeout))) as TakePattern<S>;\n};\nconst getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {\n  let {\n    type,\n    actionCreator,\n    matcher,\n    predicate,\n    effect\n  } = options;\n  if (type) {\n    predicate = createAction(type).match;\n  } else if (actionCreator) {\n    type = actionCreator!.type;\n    predicate = actionCreator.match;\n  } else if (matcher) {\n    predicate = matcher;\n  } else if (predicate) {\n    // pass\n  } else {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(21) : 'Creating or removing a listener requires one of the known fields for matching an action');\n  }\n  assertFunction(effect, 'options.listener');\n  return {\n    predicate,\n    type,\n    effect\n  };\n};\n\n/** Accepts the possible options for creating a listener, and returns a formatted listener entry */\nexport const createListenerEntry: TypedCreateListenerEntry<unknown> = /* @__PURE__ */assign((options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    predicate,\n    effect\n  } = getListenerEntryPropsFrom(options);\n  const entry: ListenerEntry<unknown> = {\n    id: nanoid(),\n    effect,\n    type,\n    predicate,\n    pending: new Set<AbortController>(),\n    unsubscribe: () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(22) : 'Unsubscribe not initialized');\n    }\n  };\n  return entry;\n}, {\n  withTypes: () => createListenerEntry\n}) as unknown as TypedCreateListenerEntry<unknown>;\nconst findListenerEntry = (listenerMap: Map<string, ListenerEntry>, options: FallbackAddListenerOptions) => {\n  const {\n    type,\n    effect,\n    predicate\n  } = getListenerEntryPropsFrom(options);\n  return Array.from(listenerMap.values()).find(entry => {\n    const matchPredicateOrType = typeof type === 'string' ? entry.type === type : entry.predicate === predicate;\n    return matchPredicateOrType && entry.effect === effect;\n  });\n};\nconst cancelActiveListeners = (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>) => {\n  entry.pending.forEach(controller => {\n    abortControllerWithReason(controller, listenerCancelled);\n  });\n};\nconst createClearListenerMiddleware = (listenerMap: Map<string, ListenerEntry>) => {\n  return () => {\n    listenerMap.forEach(cancelActiveListeners);\n    listenerMap.clear();\n  };\n};\n\n/**\n * Safely reports errors to the `errorHandler` provided.\n * Errors that occur inside `errorHandler` are notified in a new task.\n * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)\n * @param errorHandler\n * @param errorToNotify\n */\nconst safelyNotifyError = (errorHandler: ListenerErrorHandler, errorToNotify: unknown, errorInfo: ListenerErrorInfo): void => {\n  try {\n    errorHandler(errorToNotify, errorInfo);\n  } catch (errorHandlerError) {\n    // We cannot let an error raised here block the listener queue.\n    // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...\n    setTimeout(() => {\n      throw errorHandlerError;\n    }, 0);\n  }\n};\n\n/**\n * @public\n */\nexport const addListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/add`), {\n  withTypes: () => addListener\n}) as unknown as TypedAddListener<unknown>;\n\n/**\n * @public\n */\nexport const clearAllListeners = /* @__PURE__ */createAction(`${alm}/removeAll`);\n\n/**\n * @public\n */\nexport const removeListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/remove`), {\n  withTypes: () => removeListener\n}) as unknown as TypedRemoveListener<unknown>;\nconst defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {\n  console.error(`${alm}/error`, ...args);\n};\n\n/**\n * @public\n */\nexport const createListenerMiddleware = <StateType = unknown, DispatchType extends Dispatch<Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown>(middlewareOptions: CreateListenerMiddlewareOptions<ExtraArgument> = {}) => {\n  const listenerMap = new Map<string, ListenerEntry>();\n  const {\n    extra,\n    onError = defaultErrorHandler\n  } = middlewareOptions;\n  assertFunction(onError, 'onError');\n  const insertEntry = (entry: ListenerEntry) => {\n    entry.unsubscribe = () => listenerMap.delete(entry.id);\n    listenerMap.set(entry.id, entry);\n    return (cancelOptions?: UnsubscribeListenerOptions) => {\n      entry.unsubscribe();\n      if (cancelOptions?.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    };\n  };\n  const startListening = ((options: FallbackAddListenerOptions) => {\n    const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options as any);\n    return insertEntry(entry);\n  }) as AddListenerOverloads<any>;\n  assign(startListening, {\n    withTypes: () => startListening\n  });\n  const stopListening = (options: FallbackAddListenerOptions & UnsubscribeListenerOptions): boolean => {\n    const entry = findListenerEntry(listenerMap, options);\n    if (entry) {\n      entry.unsubscribe();\n      if (options.cancelActive) {\n        cancelActiveListeners(entry);\n      }\n    }\n    return !!entry;\n  };\n  assign(stopListening, {\n    withTypes: () => stopListening\n  });\n  const notifyListener = async (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>, action: unknown, api: MiddlewareAPI, getOriginalState: () => StateType) => {\n    const internalTaskController = new AbortController();\n    const take = createTakePattern(startListening as AddListenerOverloads<any>, internalTaskController.signal);\n    const autoJoinPromises: Promise<any>[] = [];\n    try {\n      entry.pending.add(internalTaskController);\n      await Promise.resolve(entry.effect(action,\n      // Use assign() rather than ... to avoid extra helper functions added to bundle\n      assign({}, api, {\n        getOriginalState,\n        condition: (predicate: AnyListenerPredicate<any>, timeout?: number) => take(predicate, timeout).then(Boolean),\n        take,\n        delay: createDelay(internalTaskController.signal),\n        pause: createPause<any>(internalTaskController.signal),\n        extra,\n        signal: internalTaskController.signal,\n        fork: createFork(internalTaskController.signal, autoJoinPromises),\n        unsubscribe: entry.unsubscribe,\n        subscribe: () => {\n          listenerMap.set(entry.id, entry);\n        },\n        cancelActiveListeners: () => {\n          entry.pending.forEach((controller, _, set) => {\n            if (controller !== internalTaskController) {\n              abortControllerWithReason(controller, listenerCancelled);\n              set.delete(controller);\n            }\n          });\n        },\n        cancel: () => {\n          abortControllerWithReason(internalTaskController, listenerCancelled);\n          entry.pending.delete(internalTaskController);\n        },\n        throwIfCancelled: () => {\n          validateActive(internalTaskController.signal);\n        }\n      })));\n    } catch (listenerError) {\n      if (!(listenerError instanceof TaskAbortError)) {\n        safelyNotifyError(onError, listenerError, {\n          raisedBy: 'effect'\n        });\n      }\n    } finally {\n      await Promise.all(autoJoinPromises);\n      abortControllerWithReason(internalTaskController, listenerCompleted); // Notify that the task has completed\n      entry.pending.delete(internalTaskController);\n    }\n  };\n  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n  const middleware: ListenerMiddleware<StateType, DispatchType, ExtraArgument> = api => next => action => {\n    if (!isAction(action)) {\n      // we only want to notify listeners for action objects\n      return next(action);\n    }\n    if (addListener.match(action)) {\n      return startListening(action.payload as any);\n    }\n    if (clearAllListeners.match(action)) {\n      clearListenerMiddleware();\n      return;\n    }\n    if (removeListener.match(action)) {\n      return stopListening(action.payload);\n    }\n\n    // Need to get this state _before_ the reducer processes the action\n    let originalState: StateType | typeof INTERNAL_NIL_TOKEN = api.getState();\n\n    // `getOriginalState` can only be called synchronously.\n    // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820\n    const getOriginalState = (): StateType => {\n      if (originalState === INTERNAL_NIL_TOKEN) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(23) : `${alm}: getOriginalState can only be called synchronously`);\n      }\n      return originalState as StateType;\n    };\n    let result: unknown;\n    try {\n      // Actually forward the action to the reducer before we handle listeners\n      result = next(action);\n      if (listenerMap.size > 0) {\n        const currentState = api.getState();\n        // Work around ESBuild+TS transpilation issue\n        const listenerEntries = Array.from(listenerMap.values());\n        for (const entry of listenerEntries) {\n          let runListener = false;\n          try {\n            runListener = entry.predicate(action, currentState, originalState);\n          } catch (predicateError) {\n            runListener = false;\n            safelyNotifyError(onError, predicateError, {\n              raisedBy: 'predicate'\n            });\n          }\n          if (!runListener) {\n            continue;\n          }\n          notifyListener(entry, action, api, getOriginalState);\n        }\n      }\n    } finally {\n      // Remove `originalState` store from this scope.\n      originalState = INTERNAL_NIL_TOKEN;\n    }\n    return result;\n  };\n  return {\n    middleware,\n    startListening,\n    stopListening,\n    clearListeners: clearListenerMiddleware\n  } as ListenerMiddlewareInstance<StateType, DispatchType, ExtraArgument>;\n};","import type { SerializedError } from '@reduxjs/toolkit';\nconst task = 'task';\nconst listener = 'listener';\nconst completed = 'completed';\nconst cancelled = 'cancelled';\n\n/* TaskAbortError error codes  */\nexport const taskCancelled = `task-${cancelled}` as const;\nexport const taskCompleted = `task-${completed}` as const;\nexport const listenerCancelled = `${listener}-${cancelled}` as const;\nexport const listenerCompleted = `${listener}-${completed}` as const;\nexport class TaskAbortError implements SerializedError {\n  name = 'TaskAbortError';\n  message: string;\n  constructor(public code: string | undefined) {\n    this.message = `${task} ${cancelled} (reason: ${code})`;\n  }\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AbortSignalWithReason } from './types';\nexport const assertFunction: (func: unknown, expected: string) => asserts func is (...args: unknown[]) => unknown = (func: unknown, expected: string) => {\n  if (typeof func !== 'function') {\n    throw new TypeError(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(32) : `${expected} is not a function`);\n  }\n};\nexport const noop = () => {};\nexport const catchRejection = <T,>(promise: Promise<T>, onError = noop): Promise<T> => {\n  promise.catch(onError);\n  return promise;\n};\nexport const addAbortSignalListener = (abortSignal: AbortSignal, callback: (evt: Event) => void) => {\n  abortSignal.addEventListener('abort', callback, {\n    once: true\n  });\n  return () => abortSignal.removeEventListener('abort', callback);\n};\n\n/**\n * Calls `abortController.abort(reason)` and patches `signal.reason`.\n * if it is not supported.\n *\n * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.\n * @param abortController\n * @param reason\n * @returns\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\n */\nexport const abortControllerWithReason = <T,>(abortController: AbortController, reason: T): void => {\n  type Consumer<T> = (val: T) => void;\n  const signal = abortController.signal as AbortSignalWithReason<T>;\n  if (signal.aborted) {\n    return;\n  }\n\n  // Patch `reason` if necessary.\n  // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.\n  // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'\n  // event are are notified immediately.\n  if (!('reason' in signal)) {\n    Object.defineProperty(signal, 'reason', {\n      enumerable: true,\n      value: reason,\n      configurable: true,\n      writable: true\n    });\n  }\n  ;\n  (abortController.abort as Consumer<typeof reason>)(reason);\n};","import { TaskAbortError } from './exceptions';\nimport type { AbortSignalWithReason, TaskResult } from './types';\nimport { addAbortSignalListener, catchRejection, noop } from './utils';\n\n/**\n * Synchronously raises {@link TaskAbortError} if the task tied to the input `signal` has been cancelled.\n * @param signal\n * @param reason\n * @see {TaskAbortError}\n */\nexport const validateActive = (signal: AbortSignal): void => {\n  if (signal.aborted) {\n    const {\n      reason\n    } = signal as AbortSignalWithReason<string>;\n    throw new TaskAbortError(reason);\n  }\n};\n\n/**\n * Generates a race between the promise(s) and the AbortSignal\n * This avoids `Promise.race()`-related memory leaks:\n * https://github.com/nodejs/node/issues/17469#issuecomment-349794909\n */\nexport function raceWithSignal<T>(signal: AbortSignalWithReason<string>, promise: Promise<T>): Promise<T> {\n  let cleanup = noop;\n  return new Promise<T>((resolve, reject) => {\n    const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n    if (signal.aborted) {\n      notifyRejection();\n      return;\n    }\n    cleanup = addAbortSignalListener(signal, notifyRejection);\n    promise.finally(() => cleanup()).then(resolve, reject);\n  }).finally(() => {\n    // after this point, replace `cleanup` with a noop, so there is no reference to `signal` any more\n    cleanup = noop;\n  });\n}\n\n/**\n * Runs a task and returns promise that resolves to {@link TaskResult}.\n * Second argument is an optional `cleanUp` function that always runs after task.\n *\n * **Note:** `runTask` runs the executor in the next microtask.\n * @returns\n */\nexport const runTask = async <T,>(task: () => Promise<T>, cleanUp?: () => void): Promise<TaskResult<T>> => {\n  try {\n    await Promise.resolve();\n    const value = await task();\n    return {\n      status: 'ok',\n      value\n    };\n  } catch (error: any) {\n    return {\n      status: error instanceof TaskAbortError ? 'cancelled' : 'rejected',\n      error\n    };\n  } finally {\n    cleanUp?.();\n  }\n};\n\n/**\n * Given an input `AbortSignal` and a promise returns another promise that resolves\n * as soon the input promise is provided or rejects as soon as\n * `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createPause = <T,>(signal: AbortSignal) => {\n  return (promise: Promise<T>): Promise<T> => {\n    return catchRejection(raceWithSignal(signal, promise).then(output => {\n      validateActive(signal);\n      return output;\n    }));\n  };\n};\n\n/**\n * Given an input `AbortSignal` and `timeoutMs` returns a promise that resolves\n * after `timeoutMs` or rejects as soon as `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createDelay = (signal: AbortSignal) => {\n  const pause = createPause<void>(signal);\n  return (timeoutMs: number): Promise<void> => {\n    return pause(new Promise<void>(resolve => setTimeout(resolve, timeoutMs)));\n  };\n};","import type { Dispatch, Middleware, UnknownAction } from 'redux';\nimport { compose } from 'redux';\nimport { createAction } from '../createAction';\nimport { isAllOf } from '../matchers';\nimport { nanoid } from '../nanoid';\nimport { getOrInsertComputed } from '../utils';\nimport type { AddMiddleware, DynamicMiddleware, DynamicMiddlewareInstance, MiddlewareEntry, WithMiddleware } from './types';\nexport type { DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './types';\nconst createMiddlewareEntry = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(middleware: Middleware<any, State, DispatchType>): MiddlewareEntry<State, DispatchType> => ({\n  middleware,\n  applied: new Map()\n});\nconst matchInstance = (instanceId: string) => (action: any): action is {\n  meta: {\n    instanceId: string;\n  };\n} => action?.meta?.instanceId === instanceId;\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): DynamicMiddlewareInstance<State, DispatchType> => {\n  const instanceId = nanoid();\n  const middlewareMap = new Map<Middleware<any, State, DispatchType>, MiddlewareEntry<State, DispatchType>>();\n  const withMiddleware = Object.assign(createAction('dynamicMiddleware/add', (...middlewares: Middleware<any, State, DispatchType>[]) => ({\n    payload: middlewares,\n    meta: {\n      instanceId\n    }\n  })), {\n    withTypes: () => withMiddleware\n  }) as WithMiddleware<State, DispatchType>;\n  const addMiddleware = Object.assign(function addMiddleware(...middlewares: Middleware<any, State, DispatchType>[]) {\n    middlewares.forEach(middleware => {\n      getOrInsertComputed(middlewareMap, middleware, createMiddlewareEntry);\n    });\n  }, {\n    withTypes: () => addMiddleware\n  }) as AddMiddleware<State, DispatchType>;\n  const getFinalMiddleware: Middleware<{}, State, DispatchType> = api => {\n    const appliedMiddleware = Array.from(middlewareMap.values()).map(entry => getOrInsertComputed(entry.applied, api, entry.middleware));\n    return compose(...appliedMiddleware);\n  };\n  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n  const middleware: DynamicMiddleware<State, DispatchType> = api => next => action => {\n    if (isWithMiddleware(action)) {\n      addMiddleware(...action.payload);\n      return api.dispatch;\n    }\n    return getFinalMiddleware(api)(next)(action);\n  };\n  return {\n    middleware,\n    addMiddleware,\n    withMiddleware,\n    instanceId\n  };\n};","import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Reducer, StateFromReducersMapObject, UnknownAction } from 'redux';\nimport { combineReducers } from 'redux';\nimport { nanoid } from './nanoid';\nimport type { Id, NonUndefined, Tail, UnionToIntersection, WithOptionalProp } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\ntype SliceLike<ReducerPath extends string, State> = {\n  reducerPath: ReducerPath;\n  reducer: Reducer<State>;\n};\ntype AnySliceLike = SliceLike<string, any>;\ntype SliceLikeReducerPath<A extends AnySliceLike> = A extends SliceLike<infer ReducerPath, any> ? ReducerPath : never;\ntype SliceLikeState<A extends AnySliceLike> = A extends SliceLike<any, infer State> ? State : never;\nexport type WithSlice<A extends AnySliceLike> = { [Path in SliceLikeReducerPath<A>]: SliceLikeState<A> };\ntype ReducerMap = Record<string, Reducer>;\ntype ExistingSliceLike<DeclaredState> = { [ReducerPath in keyof DeclaredState]: SliceLike<ReducerPath & string, NonUndefined<DeclaredState[ReducerPath]>> }[keyof DeclaredState];\nexport type InjectConfig = {\n  /**\n   * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.\n   */\n  overrideExisting?: boolean;\n};\n\n/**\n * A reducer that allows for slices/reducers to be injected after initialisation.\n */\nexport interface CombinedSliceReducer<InitialState, DeclaredState = InitialState> extends Reducer<DeclaredState, UnknownAction, Partial<DeclaredState>> {\n  /**\n   * Provide a type for slices that will be injected lazily.\n   *\n   * One way to do this would be with interface merging:\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {}\n   *\n   * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * // elsewhere\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBoolean = rootReducer.inject(booleanSlice);\n   *\n   * // elsewhere again\n   *\n   * declare module './reducer' {\n   *   export interface LazyLoadedSlices {\n   *     customName: CustomState\n   *   }\n   * }\n   *\n   * const withCustom = rootReducer.inject({ reducerPath: \"customName\", reducer: customSlice.reducer })\n   * ```\n   */\n  withLazyLoadedSlices<Lazy = {}>(): CombinedSliceReducer<InitialState, Id<DeclaredState & Partial<Lazy>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<Sl extends Id<ExistingSliceLike<DeclaredState>>>(slice: Sl, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<Sl>>>;\n\n  /**\n   * Inject a slice.\n   *\n   * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n   *\n   * ```ts\n   * rootReducer.inject(booleanSlice)\n   * rootReducer.inject(baseApi)\n   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n   * ```\n   *\n   */\n  inject<ReducerPath extends string, State>(slice: SliceLike<ReducerPath, State & (ReducerPath extends keyof DeclaredState ? never : State)>, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<SliceLike<ReducerPath, State>>>>;\n\n  /**\n   * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n   *\n   * ```ts\n   * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n   * //                                                                ^? boolean | undefined\n   *\n   * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n   *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n   *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n   *   return state.boolean;\n   *   //           ^? boolean\n   * })\n   * ```\n   *\n   * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n   *\n   * ```ts\n   *\n   * export interface LazyLoadedSlices {};\n   *\n   * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n   *\n   * export const rootReducer = combineSlices({ inner: innerReducer });\n   *\n   * export type RootState = ReturnType<typeof rootReducer>;\n   *\n   * // elsewhere\n   *\n   * declare module \"./reducer.ts\" {\n   *  export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n   * }\n   *\n   * const withBool = innerReducer.inject(booleanSlice);\n   *\n   * const selectBoolean = withBool.selector(\n   *   (state) => state.boolean,\n   *   (rootState: RootState) => state.inner\n   * );\n   * //    now expects to be passed RootState instead of innerReducer state\n   *\n   * ```\n   *\n   * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n   *\n   * ```ts\n   * const injectedReducer = rootReducer.inject(booleanSlice);\n   * const selectBoolean = injectedReducer.selector((state) => {\n   *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n   *   return state.boolean\n   * })\n   * ```\n   */\n  selector: {\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown>(selectorFn: Selector): (state: WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n\n    /**\n     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n     *\n     * ```ts\n     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n     * //                                                                ^? boolean | undefined\n     *\n     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined\n     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n     *   return state.boolean;\n     *   //           ^? boolean\n     * })\n     * ```\n     *\n     * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n     *\n     * ```ts\n     *\n     * interface LazyLoadedSlices {};\n     *\n     * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n     *\n     * const rootReducer = combineSlices({ inner: innerReducer });\n     *\n     * type RootState = ReturnType<typeof rootReducer>;\n     *\n     * // elsewhere\n     *\n     * declare module \"./reducer.ts\" {\n     *  interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n     * }\n     *\n     * const withBool = innerReducer.inject(booleanSlice);\n     *\n     * const selectBoolean = withBool.selector(\n     *   (state) => state.boolean,\n     *   (rootState: RootState) => state.inner\n     * );\n     * //    now expects to be passed RootState instead of innerReducer state\n     *\n     * ```\n     *\n     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n     *\n     * ```ts\n     * const injectedReducer = rootReducer.inject(booleanSlice);\n     * const selectBoolean = injectedReducer.selector((state) => {\n     *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n     *   return state.boolean\n     * })\n     * ```\n     */\n    <Selector extends (state: DeclaredState, ...args: any[]) => unknown, RootState>(selectorFn: Selector, selectState: (rootState: RootState, ...args: Tail<Parameters<Selector>>) => WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>): (state: RootState, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n    /**\n     * Returns the unproxied state. Useful for debugging.\n     * @param state state Proxy, that ensures injected reducers have value\n     * @returns original, unproxied state\n     * @throws if value passed is not a state Proxy\n     */\n    original: (state: DeclaredState) => InitialState & Partial<DeclaredState>;\n  };\n}\ntype InitialState<Slices extends Array<AnySliceLike | ReducerMap>> = UnionToIntersection<Slices[number] extends infer Slice ? Slice extends AnySliceLike ? WithSlice<Slice> : StateFromReducersMapObject<Slice> : never>;\nconst isSliceLike = (maybeSliceLike: AnySliceLike | ReducerMap): maybeSliceLike is AnySliceLike => 'reducerPath' in maybeSliceLike && typeof maybeSliceLike.reducerPath === 'string';\nconst getReducers = (slices: Array<AnySliceLike | ReducerMap>) => slices.flatMap(sliceOrMap => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer] as const] : Object.entries(sliceOrMap));\nconst ORIGINAL_STATE = Symbol.for('rtk-state-proxy-original');\nconst isStateProxy = (value: any) => !!value && !!value[ORIGINAL_STATE];\nconst stateProxyMap = new WeakMap<object, object>();\nconst createStateProxy = <State extends object,>(state: State, reducerMap: Partial<Record<PropertyKey, Reducer>>, initialStateCache: Record<PropertyKey, unknown>) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n  get: (target, prop, receiver) => {\n    if (prop === ORIGINAL_STATE) return target;\n    const result = Reflect.get(target, prop, receiver);\n    if (typeof result === 'undefined') {\n      const cached = initialStateCache[prop];\n      if (typeof cached !== 'undefined') return cached;\n      const reducer = reducerMap[prop];\n      if (reducer) {\n        // ensure action type is random, to prevent reducer treating it differently\n        const reducerResult = reducer(undefined, {\n          type: nanoid()\n        });\n        if (typeof reducerResult === 'undefined') {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n        }\n        initialStateCache[prop] = reducerResult;\n        return reducerResult;\n      }\n    }\n    return result;\n  }\n})) as State;\nconst original = (state: any) => {\n  if (!isStateProxy(state)) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(25) : 'original must be used on state Proxy');\n  }\n  return state[ORIGINAL_STATE];\n};\nconst emptyObject = {};\nconst noopReducer: Reducer<Record<string, any>> = (state = emptyObject) => state;\nexport function combineSlices<Slices extends Array<AnySliceLike | ReducerMap>>(...slices: Slices): CombinedSliceReducer<Id<InitialState<Slices>>> {\n  const reducerMap = Object.fromEntries<Reducer>(getReducers(slices));\n  const getReducer = () => Object.keys(reducerMap).length ? combineReducers(reducerMap) : noopReducer;\n  let reducer = getReducer();\n  function combinedReducer(state: Record<string, unknown>, action: UnknownAction) {\n    return reducer(state, action);\n  }\n  combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n  const initialStateCache: Record<PropertyKey, unknown> = {};\n  const inject = (slice: AnySliceLike, config: InjectConfig = {}): typeof combinedReducer => {\n    const {\n      reducerPath,\n      reducer: reducerToInject\n    } = slice;\n    const currentReducer = reducerMap[reducerPath];\n    if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n      if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n        console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n      }\n      return combinedReducer;\n    }\n    if (config.overrideExisting && currentReducer !== reducerToInject) {\n      delete initialStateCache[reducerPath];\n    }\n    reducerMap[reducerPath] = reducerToInject;\n    reducer = getReducer();\n    return combinedReducer;\n  };\n  const selector = Object.assign(function makeSelector<State extends object, RootState, Args extends any[]>(selectorFn: (state: State, ...args: Args) => any, selectState?: (rootState: RootState, ...args: Args) => State) {\n    return function selector(state: State, ...args: Args) {\n      return selectorFn(createStateProxy(selectState ? selectState(state as any, ...args) : state, reducerMap, initialStateCache), ...args);\n    };\n  }, {\n    original\n  });\n  return Object.assign(combinedReducer, {\n    inject,\n    selector\n  }) as any;\n}","/**\r\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\r\n *\r\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\r\n * during build.\r\n * @param {number} code\r\n */\nexport function formatProdErrorMessage(code: number) {\n  return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}"],"mappings":"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","names":["current","original","isDraft","createSelectorCreator","weakMapMemoize","createSelector","createDraftSafeSelector","args","compose","isPlainObject","noop","isActionCreator","stringify","getSerialize","isAction","isAction","listener","isPlainObject","middleware","compose","createNextState","isDraft","isDraftable","reducer","isDraft","isDraftable","createNextState","createAsyncThunk","ReducerType","createSlice","reducer","name","reducerPath","createSelector","createNextState","isDraft","isDraft","arg","createNextState","current","isDraft","original","isAction","noop","noop","task","result","noop","isAction","compose","addMiddleware","middleware","compose","combineReducers","combineReducers","selector"]}
Index: node_modules/@reduxjs/toolkit/dist/uncheckedindexed.ts
===================================================================
--- node_modules/@reduxjs/toolkit/dist/uncheckedindexed.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/dist/uncheckedindexed.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+// inlined from https://github.com/EskiMojo14/uncheckedindexed
+// relies on remaining as a TS file, not .d.ts
+type IfMaybeUndefined<T, True, False> = [undefined] extends [T] ? True : False
+
+const testAccess = ({} as Record<string, 0>)['a']
+
+export type IfUncheckedIndexedAccess<True, False> = IfMaybeUndefined<
+  typeof testAccess,
+  True,
+  False
+>
+
+export type UncheckedIndexedAccess<T> = IfUncheckedIndexedAccess<
+  T | undefined,
+  T
+>
Index: node_modules/@reduxjs/toolkit/package.json
===================================================================
--- node_modules/@reduxjs/toolkit/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,286 @@
+{
+  "name": "@reduxjs/toolkit",
+  "version": "2.8.2",
+  "description": "The official, opinionated, batteries-included toolset for efficient Redux development",
+  "author": "Mark Erikson <mark@isquaredsoftware.com>",
+  "license": "MIT",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/reduxjs/redux-toolkit.git"
+  },
+  "keywords": [
+    "redux",
+    "react",
+    "starter",
+    "toolkit",
+    "reducer",
+    "slice",
+    "immer",
+    "immutable",
+    "redux-toolkit"
+  ],
+  "publishConfig": {
+    "access": "public"
+  },
+  "module": "dist/redux-toolkit.legacy-esm.js",
+  "main": "dist/cjs/index.js",
+  "types": "dist/index.d.ts",
+  "react-native": "dist/redux-toolkit.legacy-esm.js",
+  "unpkg": "dist/redux-toolkit.browser.mjs",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "module-sync": {
+        "types": "./dist/index.d.mts",
+        "default": "./dist/redux-toolkit.modern.mjs"
+      },
+      "module": {
+        "types": "./dist/index.d.mts",
+        "default": "./dist/redux-toolkit.modern.mjs"
+      },
+      "react-native": {
+        "import": {
+          "types": "./dist/index.d.mts",
+          "default": "./dist/redux-toolkit.modern.mjs"
+        },
+        "default": {
+          "types": "./dist/index.d.ts",
+          "default": "./dist/cjs/index.js"
+        }
+      },
+      "browser": {
+        "import": {
+          "types": "./dist/index.d.mts",
+          "default": "./dist/redux-toolkit.browser.mjs"
+        },
+        "default": {
+          "types": "./dist/index.d.ts",
+          "default": "./dist/cjs/index.js"
+        }
+      },
+      "import": {
+        "types": "./dist/index.d.mts",
+        "default": "./dist/redux-toolkit.modern.mjs"
+      },
+      "default": {
+        "types": "./dist/index.d.ts",
+        "default": "./dist/cjs/index.js"
+      }
+    },
+    "./react": {
+      "module-sync": {
+        "types": "./dist/react/index.d.mts",
+        "default": "./dist/react/redux-toolkit-react.modern.mjs"
+      },
+      "module": {
+        "types": "./dist/react/index.d.mts",
+        "default": "./dist/react/redux-toolkit-react.modern.mjs"
+      },
+      "react-native": {
+        "import": {
+          "types": "./dist/react/index.d.mts",
+          "default": "./dist/react/redux-toolkit-react.modern.mjs"
+        },
+        "default": {
+          "types": "./dist/react/index.d.ts",
+          "default": "./dist/react/cjs/index.js"
+        }
+      },
+      "browser": {
+        "import": {
+          "types": "./dist/react/index.d.mts",
+          "default": "./dist/react/redux-toolkit-react.browser.mjs"
+        },
+        "default": {
+          "types": "./dist/react/index.d.ts",
+          "default": "./dist/react/cjs/index.js"
+        }
+      },
+      "import": {
+        "types": "./dist/react/index.d.mts",
+        "default": "./dist/react/redux-toolkit-react.modern.mjs"
+      },
+      "default": {
+        "types": "./dist/react/index.d.ts",
+        "default": "./dist/react/cjs/index.js"
+      }
+    },
+    "./query": {
+      "module-sync": {
+        "types": "./dist/query/index.d.mts",
+        "default": "./dist/query/rtk-query.modern.mjs"
+      },
+      "module": {
+        "types": "./dist/query/index.d.mts",
+        "default": "./dist/query/rtk-query.modern.mjs"
+      },
+      "react-native": {
+        "import": {
+          "types": "./dist/query/index.d.mts",
+          "default": "./dist/query/rtk-query.modern.mjs"
+        },
+        "default": {
+          "types": "./dist/query/index.d.ts",
+          "default": "./dist/query/cjs/index.js"
+        }
+      },
+      "browser": {
+        "import": {
+          "types": "./dist/query/index.d.mts",
+          "default": "./dist/query/rtk-query.browser.mjs"
+        },
+        "default": {
+          "types": "./dist/query/index.d.ts",
+          "default": "./dist/query/cjs/index.js"
+        }
+      },
+      "import": {
+        "types": "./dist/query/index.d.mts",
+        "default": "./dist/query/rtk-query.modern.mjs"
+      },
+      "default": {
+        "types": "./dist/query/index.d.ts",
+        "default": "./dist/query/cjs/index.js"
+      }
+    },
+    "./query/react": {
+      "module-sync": {
+        "types": "./dist/query/react/index.d.mts",
+        "default": "./dist/query/react/rtk-query-react.modern.mjs"
+      },
+      "module": {
+        "types": "./dist/query/react/index.d.mts",
+        "default": "./dist/query/react/rtk-query-react.modern.mjs"
+      },
+      "react-native": {
+        "import": {
+          "types": "./dist/query/react/index.d.mts",
+          "default": "./dist/query/react/rtk-query-react.modern.mjs"
+        },
+        "default": {
+          "types": "./dist/query/react/index.d.ts",
+          "default": "./dist/query/react/cjs/index.js"
+        }
+      },
+      "browser": {
+        "import": {
+          "types": "./dist/query/react/index.d.mts",
+          "default": "./dist/query/react/rtk-query-react.browser.mjs"
+        },
+        "default": {
+          "types": "./dist/query/react/index.d.ts",
+          "default": "./dist/query/react/cjs/index.js"
+        }
+      },
+      "import": {
+        "types": "./dist/query/react/index.d.mts",
+        "default": "./dist/query/react/rtk-query-react.modern.mjs"
+      },
+      "default": {
+        "types": "./dist/query/react/index.d.ts",
+        "default": "./dist/query/react/cjs/index.js"
+      }
+    }
+  },
+  "devDependencies": {
+    "@arethetypeswrong/cli": "^0.13.5",
+    "@babel/core": "^7.24.8",
+    "@babel/helper-module-imports": "^7.24.7",
+    "@microsoft/api-extractor": "^7.13.2",
+    "@phryneas/ts-version": "^1.0.2",
+    "@size-limit/file": "^11.0.1",
+    "@size-limit/webpack": "^11.0.1",
+    "@testing-library/dom": "^10.4.0",
+    "@testing-library/react": "^16.0.1",
+    "@testing-library/react-render-stream": "^1.0.3",
+    "@testing-library/user-event": "^14.5.2",
+    "@types/babel__core": "^7.20.5",
+    "@types/babel__helper-module-imports": "^7.18.3",
+    "@types/json-stringify-safe": "^5.0.0",
+    "@types/nanoid": "^2.1.0",
+    "@types/node": "^20.11.0",
+    "@types/query-string": "^6.3.0",
+    "@types/react": "^19.0.1",
+    "@types/react-dom": "^19.0.1",
+    "@types/yargs": "^16.0.1",
+    "@typescript-eslint/eslint-plugin": "^6",
+    "@typescript-eslint/parser": "^6",
+    "axios": "^0.19.2",
+    "esbuild": "^0.25.1",
+    "esbuild-extra": "^0.4.0",
+    "eslint": "^7.25.0",
+    "eslint-config-prettier": "^9.1.0",
+    "eslint-config-react-app": "^7.0.1",
+    "eslint-plugin-flowtype": "^5.7.2",
+    "eslint-plugin-import": "^2.22.1",
+    "eslint-plugin-jsx-a11y": "^6.4.1",
+    "eslint-plugin-prettier": "^5.1.3",
+    "eslint-plugin-react": "^7.23.2",
+    "eslint-plugin-react-hooks": "^4.2.0",
+    "fs-extra": "^9.1.0",
+    "invariant": "^2.2.4",
+    "jsdom": "^25.0.1",
+    "json-stringify-safe": "^5.0.1",
+    "msw": "^2.1.4",
+    "node-fetch": "^3.3.2",
+    "prettier": "^3.2.5",
+    "query-string": "^7.0.1",
+    "react": "^19.0.0",
+    "react-dom": "^19.0.0",
+    "rimraf": "^3.0.2",
+    "size-limit": "^11.0.1",
+    "tslib": "^1.10.0",
+    "tsup": "^8.4.0",
+    "tsx": "^4.19.0",
+    "typescript": "^5.8.2",
+    "valibot": "^1.0.0",
+    "vite-tsconfig-paths": "^4.3.1",
+    "vitest": "^1.6.0",
+    "yargs": "^15.3.1"
+  },
+  "scripts": {
+    "clean": "rimraf dist",
+    "run-build": "tsup --config=$INIT_CWD/tsup.config.mts",
+    "build": "yarn clean && yarn run-build && tsx scripts/fixUniqueSymbolExports.mts",
+    "build-only": "yarn clean && yarn run-build",
+    "format": "prettier --write \"(src|examples)/**/*.{ts,tsx}\" \"**/*.md\"",
+    "format:check": "prettier --list-different \"(src|examples)/**/*.{ts,tsx}\" \"docs/*/**.md\"",
+    "lint": "eslint src examples",
+    "test": "vitest --typecheck --run ",
+    "test:watch": "vitest --watch",
+    "type-tests": "yarn tsc -p tsconfig.test.json --noEmit",
+    "prepack": "yarn build",
+    "size": "size-limit"
+  },
+  "files": [
+    "dist/",
+    "src/",
+    "query",
+    "react"
+  ],
+  "dependencies": {
+    "@standard-schema/spec": "^1.0.0",
+    "@standard-schema/utils": "^0.3.0",
+    "immer": "^10.0.3",
+    "redux": "^5.0.1",
+    "redux-thunk": "^3.1.0",
+    "reselect": "^5.1.0"
+  },
+  "peerDependencies": {
+    "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
+    "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
+  },
+  "peerDependenciesMeta": {
+    "react": {
+      "optional": true
+    },
+    "react-redux": {
+      "optional": true
+    }
+  },
+  "sideEffects": false,
+  "bugs": {
+    "url": "https://github.com/reduxjs/redux-toolkit/issues"
+  },
+  "homepage": "https://redux-toolkit.js.org"
+}
Index: node_modules/@reduxjs/toolkit/query/package.json
===================================================================
--- node_modules/@reduxjs/toolkit/query/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/query/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+{
+  "name": "@reduxjs/toolkit-query",
+  "version": "1.0.0",
+  "description": "",
+  "type": "module",
+  "module": "../dist/query/rtk-query.legacy-esm.js",
+  "main": "../dist/query/cjs/index.js",
+  "types": "./../dist/query/index.d.ts",
+  "react-native": "./../dist/query/rtk-query.legacy-esm.js",
+  "author": "Mark Erikson <mark@isquaredsoftware.com>",
+  "license": "MIT",
+  "sideEffects": false
+}
Index: node_modules/@reduxjs/toolkit/query/react/package.json
===================================================================
--- node_modules/@reduxjs/toolkit/query/react/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/query/react/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+{
+  "name": "@reduxjs/toolkit-query-react",
+  "version": "1.0.0",
+  "description": "",
+  "type": "module",
+  "module": "../../dist/query/react/rtk-query-react.legacy-esm.js",
+  "main": "../../dist/query/react/cjs/index.js",
+  "types": "./../../dist/query/react/index.d.ts",
+  "react-native": "./../../dist/query/react/rtk-query-react.legacy-esm.js",
+  "author": "Mark Erikson <mark@isquaredsoftware.com>",
+  "license": "MIT",
+  "sideEffects": false
+}
Index: node_modules/@reduxjs/toolkit/react/package.json
===================================================================
--- node_modules/@reduxjs/toolkit/react/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/react/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+{
+  "name": "@reduxjs/toolkit-react",
+  "version": "1.0.0",
+  "description": "",
+  "type": "module",
+  "module": "../dist/react/redux-toolkit-react.legacy-esm.js",
+  "main": "./../dist/react/redux-toolkit-react.modern.mjs",
+  "types": "./../dist/react/index.d.ts",
+  "react-native": "./../dist/react/redux-toolkit-react.modern.mjs",
+  "author": "Mark Erikson <mark@isquaredsoftware.com>",
+  "license": "MIT",
+  "sideEffects": false
+}
Index: node_modules/@reduxjs/toolkit/src/actionCreatorInvariantMiddleware.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/actionCreatorInvariantMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/actionCreatorInvariantMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import type { Middleware } from 'redux'
+import { isActionCreator as isRTKAction } from './createAction'
+
+export interface ActionCreatorInvariantMiddlewareOptions {
+  /**
+   * The function to identify whether a value is an action creator.
+   * The default checks for a function with a static type property and match method.
+   */
+  isActionCreator?: (action: unknown) => action is Function & { type?: unknown }
+}
+
+export function getMessage(type?: unknown) {
+  const splitType = type ? `${type}`.split('/') : []
+  const actionName = splitType[splitType.length - 1] || 'actionCreator'
+  return `Detected an action creator with type "${
+    type || 'unknown'
+  }" being dispatched. 
+Make sure you're calling the action creator before dispatching, i.e. \`dispatch(${actionName}())\` instead of \`dispatch(${actionName})\`. This is necessary even if the action has no payload.`
+}
+
+export function createActionCreatorInvariantMiddleware(
+  options: ActionCreatorInvariantMiddlewareOptions = {},
+): Middleware {
+  if (process.env.NODE_ENV === 'production') {
+    return () => (next) => (action) => next(action)
+  }
+  const { isActionCreator = isRTKAction } = options
+  return () => (next) => (action) => {
+    if (isActionCreator(action)) {
+      console.warn(getMessage(action.type))
+    }
+    return next(action)
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/autoBatchEnhancer.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/autoBatchEnhancer.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/autoBatchEnhancer.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,128 @@
+import type { StoreEnhancer } from 'redux'
+
+export const SHOULD_AUTOBATCH = 'RTK_autoBatch'
+
+export const prepareAutoBatched =
+  <T>() =>
+  (payload: T): { payload: T; meta: unknown } => ({
+    payload,
+    meta: { [SHOULD_AUTOBATCH]: true },
+  })
+
+const createQueueWithTimer = (timeout: number) => {
+  return (notify: () => void) => {
+    setTimeout(notify, timeout)
+  }
+}
+
+export type AutoBatchOptions =
+  | { type: 'tick' }
+  | { type: 'timer'; timeout: number }
+  | { type: 'raf' }
+  | { type: 'callback'; queueNotification: (notify: () => void) => void }
+
+/**
+ * A Redux store enhancer that watches for "low-priority" actions, and delays
+ * notifying subscribers until either the queued callback executes or the
+ * next "standard-priority" action is dispatched.
+ *
+ * This allows dispatching multiple "low-priority" actions in a row with only
+ * a single subscriber notification to the UI after the sequence of actions
+ * is finished, thus improving UI re-render performance.
+ *
+ * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.
+ * This can be added to `action.meta` manually, or by using the
+ * `prepareAutoBatched` helper.
+ *
+ * By default, it will queue a notification for the end of the event loop tick.
+ * However, you can pass several other options to configure the behavior:
+ * - `{type: 'tick'}`: queues using `queueMicrotask`
+ * - `{type: 'timer', timeout: number}`: queues using `setTimeout`
+ * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)
+ * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback
+ *
+ *
+ */
+export const autoBatchEnhancer =
+  (options: AutoBatchOptions = { type: 'raf' }): StoreEnhancer =>
+  (next) =>
+  (...args) => {
+    const store = next(...args)
+
+    let notifying = true
+    let shouldNotifyAtEndOfTick = false
+    let notificationQueued = false
+
+    const listeners = new Set<() => void>()
+
+    const queueCallback =
+      options.type === 'tick'
+        ? queueMicrotask
+        : options.type === 'raf'
+          ? // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.
+            typeof window !== 'undefined' && window.requestAnimationFrame
+            ? window.requestAnimationFrame
+            : createQueueWithTimer(10)
+          : options.type === 'callback'
+            ? options.queueNotification
+            : createQueueWithTimer(options.timeout)
+
+    const notifyListeners = () => {
+      // We're running at the end of the event loop tick.
+      // Run the real listener callbacks to actually update the UI.
+      notificationQueued = false
+      if (shouldNotifyAtEndOfTick) {
+        shouldNotifyAtEndOfTick = false
+        listeners.forEach((l) => l())
+      }
+    }
+
+    return Object.assign({}, store, {
+      // Override the base `store.subscribe` method to keep original listeners
+      // from running if we're delaying notifications
+      subscribe(listener: () => void) {
+        // Each wrapped listener will only call the real listener if
+        // the `notifying` flag is currently active when it's called.
+        // This lets the base store work as normal, while the actual UI
+        // update becomes controlled by this enhancer.
+        const wrappedListener: typeof listener = () => notifying && listener()
+        const unsubscribe = store.subscribe(wrappedListener)
+        listeners.add(listener)
+        return () => {
+          unsubscribe()
+          listeners.delete(listener)
+        }
+      },
+      // Override the base `store.dispatch` method so that we can check actions
+      // for the `shouldAutoBatch` flag and determine if batching is active
+      dispatch(action: any) {
+        try {
+          // If the action does _not_ have the `shouldAutoBatch` flag,
+          // we resume/continue normal notify-after-each-dispatch behavior
+          notifying = !action?.meta?.[SHOULD_AUTOBATCH]
+          // If a `notifyListeners` microtask was queued, you can't cancel it.
+          // Instead, we set a flag so that it's a no-op when it does run
+          shouldNotifyAtEndOfTick = !notifying
+          if (shouldNotifyAtEndOfTick) {
+            // We've seen at least 1 action with `SHOULD_AUTOBATCH`. Try to queue
+            // a microtask to notify listeners at the end of the event loop tick.
+            // Make sure we only enqueue this _once_ per tick.
+            if (!notificationQueued) {
+              notificationQueued = true
+              queueCallback(notifyListeners)
+            }
+          }
+          // Go ahead and process the action as usual, including reducers.
+          // If normal notification behavior is enabled, the store will notify
+          // all of its own listeners, and the wrapper callbacks above will
+          // see `notifying` is true and pass on to the real listener callbacks.
+          // If we're "batching" behavior, then the wrapped callbacks will
+          // bail out, causing the base store notification behavior to be no-ops.
+          return store.dispatch(action)
+        } finally {
+          // Assume we're back to normal behavior after each action
+          notifying = true
+        }
+      },
+    })
+  }
Index: node_modules/@reduxjs/toolkit/src/combineSlices.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/combineSlices.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/combineSlices.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,447 @@
+import type { Reducer, StateFromReducersMapObject, UnknownAction } from 'redux'
+import { combineReducers } from 'redux'
+import { nanoid } from './nanoid'
+import type {
+  Id,
+  NonUndefined,
+  Tail,
+  UnionToIntersection,
+  WithOptionalProp,
+} from './tsHelpers'
+import { getOrInsertComputed } from './utils'
+
+type SliceLike<ReducerPath extends string, State> = {
+  reducerPath: ReducerPath
+  reducer: Reducer<State>
+}
+
+type AnySliceLike = SliceLike<string, any>
+
+type SliceLikeReducerPath<A extends AnySliceLike> =
+  A extends SliceLike<infer ReducerPath, any> ? ReducerPath : never
+
+type SliceLikeState<A extends AnySliceLike> =
+  A extends SliceLike<any, infer State> ? State : never
+
+export type WithSlice<A extends AnySliceLike> = {
+  [Path in SliceLikeReducerPath<A>]: SliceLikeState<A>
+}
+
+type ReducerMap = Record<string, Reducer>
+
+type ExistingSliceLike<DeclaredState> = {
+  [ReducerPath in keyof DeclaredState]: SliceLike<
+    ReducerPath & string,
+    NonUndefined<DeclaredState[ReducerPath]>
+  >
+}[keyof DeclaredState]
+
+export type InjectConfig = {
+  /**
+   * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.
+   */
+  overrideExisting?: boolean
+}
+
+/**
+ * A reducer that allows for slices/reducers to be injected after initialisation.
+ */
+export interface CombinedSliceReducer<
+  InitialState,
+  DeclaredState = InitialState,
+> extends Reducer<DeclaredState, UnknownAction, Partial<DeclaredState>> {
+  /**
+   * Provide a type for slices that will be injected lazily.
+   *
+   * One way to do this would be with interface merging:
+   * ```ts
+   *
+   * export interface LazyLoadedSlices {}
+   *
+   * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();
+   *
+   * // elsewhere
+   *
+   * declare module './reducer' {
+   *   export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}
+   * }
+   *
+   * const withBoolean = rootReducer.inject(booleanSlice);
+   *
+   * // elsewhere again
+   *
+   * declare module './reducer' {
+   *   export interface LazyLoadedSlices {
+   *     customName: CustomState
+   *   }
+   * }
+   *
+   * const withCustom = rootReducer.inject({ reducerPath: "customName", reducer: customSlice.reducer })
+   * ```
+   */
+  withLazyLoadedSlices<Lazy = {}>(): CombinedSliceReducer<
+    InitialState,
+    Id<DeclaredState & Partial<Lazy>>
+  >
+
+  /**
+   * Inject a slice.
+   *
+   * Accepts an individual slice, RTKQ API instance, or a "slice-like" { reducerPath, reducer } object.
+   *
+   * ```ts
+   * rootReducer.inject(booleanSlice)
+   * rootReducer.inject(baseApi)
+   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })
+   * ```
+   *
+   */
+  inject<Sl extends Id<ExistingSliceLike<DeclaredState>>>(
+    slice: Sl,
+    config?: InjectConfig,
+  ): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<Sl>>>
+
+  /**
+   * Inject a slice.
+   *
+   * Accepts an individual slice, RTKQ API instance, or a "slice-like" { reducerPath, reducer } object.
+   *
+   * ```ts
+   * rootReducer.inject(booleanSlice)
+   * rootReducer.inject(baseApi)
+   * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })
+   * ```
+   *
+   */
+  inject<ReducerPath extends string, State>(
+    slice: SliceLike<
+      ReducerPath,
+      State & (ReducerPath extends keyof DeclaredState ? never : State)
+    >,
+    config?: InjectConfig,
+  ): CombinedSliceReducer<
+    InitialState,
+    Id<DeclaredState & WithSlice<SliceLike<ReducerPath, State>>>
+  >
+
+  /**
+   * Create a selector that guarantees that the slices injected will have a defined value when selector is run.
+   *
+   * ```ts
+   * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;
+   * //                                                                ^? boolean | undefined
+   *
+   * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {
+   *   // if action hasn't been dispatched since slice was injected, this would usually be undefined
+   *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined
+   *   return state.boolean;
+   *   //           ^? boolean
+   * })
+   * ```
+   *
+   * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.
+   *
+   * ```ts
+   *
+   * export interface LazyLoadedSlices {};
+   *
+   * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();
+   *
+   * export const rootReducer = combineSlices({ inner: innerReducer });
+   *
+   * export type RootState = ReturnType<typeof rootReducer>;
+   *
+   * // elsewhere
+   *
+   * declare module "./reducer.ts" {
+   *  export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}
+   * }
+   *
+   * const withBool = innerReducer.inject(booleanSlice);
+   *
+   * const selectBoolean = withBool.selector(
+   *   (state) => state.boolean,
+   *   (rootState: RootState) => state.inner
+   * );
+   * //    now expects to be passed RootState instead of innerReducer state
+   *
+   * ```
+   *
+   * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)
+   *
+   * ```ts
+   * const injectedReducer = rootReducer.inject(booleanSlice);
+   * const selectBoolean = injectedReducer.selector((state) => {
+   *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined
+   *   return state.boolean
+   * })
+   * ```
+   */
+  selector: {
+    /**
+     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.
+     *
+     * ```ts
+     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;
+     * //                                                                ^? boolean | undefined
+     *
+     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {
+     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined
+     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined
+     *   return state.boolean;
+     *   //           ^? boolean
+     * })
+     * ```
+     *
+     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)
+     *
+     * ```ts
+     * const injectedReducer = rootReducer.inject(booleanSlice);
+     * const selectBoolean = injectedReducer.selector((state) => {
+     *   console.log(injectedReducer.selector.original(state).boolean) // undefined
+     *   return state.boolean
+     * })
+     * ```
+     */
+    <Selector extends (state: DeclaredState, ...args: any[]) => unknown>(
+      selectorFn: Selector,
+    ): (
+      state: WithOptionalProp<
+        Parameters<Selector>[0],
+        Exclude<keyof DeclaredState, keyof InitialState>
+      >,
+      ...args: Tail<Parameters<Selector>>
+    ) => ReturnType<Selector>
+
+    /**
+     * Create a selector that guarantees that the slices injected will have a defined value when selector is run.
+     *
+     * ```ts
+     * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;
+     * //                                                                ^? boolean | undefined
+     *
+     * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {
+     *   // if action hasn't been dispatched since slice was injected, this would usually be undefined
+     *   // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined
+     *   return state.boolean;
+     *   //           ^? boolean
+     * })
+     * ```
+     *
+     * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.
+     *
+     * ```ts
+     *
+     * interface LazyLoadedSlices {};
+     *
+     * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();
+     *
+     * const rootReducer = combineSlices({ inner: innerReducer });
+     *
+     * type RootState = ReturnType<typeof rootReducer>;
+     *
+     * // elsewhere
+     *
+     * declare module "./reducer.ts" {
+     *  interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}
+     * }
+     *
+     * const withBool = innerReducer.inject(booleanSlice);
+     *
+     * const selectBoolean = withBool.selector(
+     *   (state) => state.boolean,
+     *   (rootState: RootState) => state.inner
+     * );
+     * //    now expects to be passed RootState instead of innerReducer state
+     *
+     * ```
+     *
+     * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)
+     *
+     * ```ts
+     * const injectedReducer = rootReducer.inject(booleanSlice);
+     * const selectBoolean = injectedReducer.selector((state) => {
+     *   console.log(injectedReducer.selector.original(state).boolean) // possibly undefined
+     *   return state.boolean
+     * })
+     * ```
+     */
+    <
+      Selector extends (state: DeclaredState, ...args: any[]) => unknown,
+      RootState,
+    >(
+      selectorFn: Selector,
+      selectState: (
+        rootState: RootState,
+        ...args: Tail<Parameters<Selector>>
+      ) => WithOptionalProp<
+        Parameters<Selector>[0],
+        Exclude<keyof DeclaredState, keyof InitialState>
+      >,
+    ): (
+      state: RootState,
+      ...args: Tail<Parameters<Selector>>
+    ) => ReturnType<Selector>
+    /**
+     * Returns the unproxied state. Useful for debugging.
+     * @param state state Proxy, that ensures injected reducers have value
+     * @returns original, unproxied state
+     * @throws if value passed is not a state Proxy
+     */
+    original: (state: DeclaredState) => InitialState & Partial<DeclaredState>
+  }
+}
+
+type InitialState<Slices extends Array<AnySliceLike | ReducerMap>> =
+  UnionToIntersection<
+    Slices[number] extends infer Slice
+      ? Slice extends AnySliceLike
+        ? WithSlice<Slice>
+        : StateFromReducersMapObject<Slice>
+      : never
+  >
+
+const isSliceLike = (
+  maybeSliceLike: AnySliceLike | ReducerMap,
+): maybeSliceLike is AnySliceLike =>
+  'reducerPath' in maybeSliceLike &&
+  typeof maybeSliceLike.reducerPath === 'string'
+
+const getReducers = (slices: Array<AnySliceLike | ReducerMap>) =>
+  slices.flatMap((sliceOrMap) =>
+    isSliceLike(sliceOrMap)
+      ? [[sliceOrMap.reducerPath, sliceOrMap.reducer] as const]
+      : Object.entries(sliceOrMap),
+  )
+
+const ORIGINAL_STATE = Symbol.for('rtk-state-proxy-original')
+
+const isStateProxy = (value: any) => !!value && !!value[ORIGINAL_STATE]
+
+const stateProxyMap = new WeakMap<object, object>()
+
+const createStateProxy = <State extends object>(
+  state: State,
+  reducerMap: Partial<Record<PropertyKey, Reducer>>,
+  initialStateCache: Record<PropertyKey, unknown>,
+) =>
+  getOrInsertComputed(
+    stateProxyMap,
+    state,
+    () =>
+      new Proxy(state, {
+        get: (target, prop, receiver) => {
+          if (prop === ORIGINAL_STATE) return target
+          const result = Reflect.get(target, prop, receiver)
+          if (typeof result === 'undefined') {
+            const cached = initialStateCache[prop]
+            if (typeof cached !== 'undefined') return cached
+            const reducer = reducerMap[prop]
+            if (reducer) {
+              // ensure action type is random, to prevent reducer treating it differently
+              const reducerResult = reducer(undefined, { type: nanoid() })
+              if (typeof reducerResult === 'undefined') {
+                throw new Error(
+                  `The slice reducer for key "${prop.toString()}" returned undefined when called for selector(). ` +
+                    `If the state passed to the reducer is undefined, you must ` +
+                    `explicitly return the initial state. The initial state may ` +
+                    `not be undefined. If you don't want to set a value for this reducer, ` +
+                    `you can use null instead of undefined.`,
+                )
+              }
+              initialStateCache[prop] = reducerResult
+              return reducerResult
+            }
+          }
+          return result
+        },
+      }),
+  ) as State
+
+const original = (state: any) => {
+  if (!isStateProxy(state)) {
+    throw new Error('original must be used on state Proxy')
+  }
+  return state[ORIGINAL_STATE]
+}
+
+const emptyObject = {}
+const noopReducer: Reducer<Record<string, any>> = (state = emptyObject) => state
+
+export function combineSlices<Slices extends Array<AnySliceLike | ReducerMap>>(
+  ...slices: Slices
+): CombinedSliceReducer<Id<InitialState<Slices>>> {
+  const reducerMap = Object.fromEntries<Reducer>(getReducers(slices))
+
+  const getReducer = () =>
+    Object.keys(reducerMap).length ? combineReducers(reducerMap) : noopReducer
+
+  let reducer = getReducer()
+
+  function combinedReducer(
+    state: Record<string, unknown>,
+    action: UnknownAction,
+  ) {
+    return reducer(state, action)
+  }
+
+  combinedReducer.withLazyLoadedSlices = () => combinedReducer
+
+  const initialStateCache: Record<PropertyKey, unknown> = {}
+
+  const inject = (
+    slice: AnySliceLike,
+    config: InjectConfig = {},
+  ): typeof combinedReducer => {
+    const { reducerPath, reducer: reducerToInject } = slice
+
+    const currentReducer = reducerMap[reducerPath]
+    if (
+      !config.overrideExisting &&
+      currentReducer &&
+      currentReducer !== reducerToInject
+    ) {
+      if (
+        typeof process !== 'undefined' &&
+        process.env.NODE_ENV === 'development'
+      ) {
+        console.error(
+          `called \`inject\` to override already-existing reducer ${reducerPath} without specifying \`overrideExisting: true\``,
+        )
+      }
+
+      return combinedReducer
+    }
+
+    if (config.overrideExisting && currentReducer !== reducerToInject) {
+      delete initialStateCache[reducerPath]
+    }
+
+    reducerMap[reducerPath] = reducerToInject
+
+    reducer = getReducer()
+
+    return combinedReducer
+  }
+
+  const selector = Object.assign(
+    function makeSelector<State extends object, RootState, Args extends any[]>(
+      selectorFn: (state: State, ...args: Args) => any,
+      selectState?: (rootState: RootState, ...args: Args) => State,
+    ) {
+      return function selector(state: State, ...args: Args) {
+        return selectorFn(
+          createStateProxy(
+            selectState ? selectState(state as any, ...args) : state,
+            reducerMap,
+            initialStateCache,
+          ),
+          ...args,
+        )
+      }
+    },
+    { original },
+  )
+
+  return Object.assign(combinedReducer, { inject, selector }) as any
+}
Index: node_modules/@reduxjs/toolkit/src/configureStore.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/configureStore.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/configureStore.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,248 @@
+import type {
+  Reducer,
+  ReducersMapObject,
+  Middleware,
+  Action,
+  StoreEnhancer,
+  Store,
+  UnknownAction,
+} from 'redux'
+import {
+  applyMiddleware,
+  createStore,
+  compose,
+  combineReducers,
+  isPlainObject,
+} from 'redux'
+import type { DevToolsEnhancerOptions as DevToolsOptions } from './devtoolsExtension'
+import { composeWithDevTools } from './devtoolsExtension'
+
+import type {
+  ThunkMiddlewareFor,
+  GetDefaultMiddleware,
+} from './getDefaultMiddleware'
+import { buildGetDefaultMiddleware } from './getDefaultMiddleware'
+import type {
+  ExtractDispatchExtensions,
+  ExtractStoreExtensions,
+  ExtractStateExtensions,
+  UnknownIfNonSpecific,
+} from './tsHelpers'
+import type { Tuple } from './utils'
+import type { GetDefaultEnhancers } from './getDefaultEnhancers'
+import { buildGetDefaultEnhancers } from './getDefaultEnhancers'
+
+/**
+ * Options for `configureStore()`.
+ *
+ * @public
+ */
+export interface ConfigureStoreOptions<
+  S = any,
+  A extends Action = UnknownAction,
+  M extends Tuple<Middlewares<S>> = Tuple<Middlewares<S>>,
+  E extends Tuple<Enhancers> = Tuple<Enhancers>,
+  P = S,
+> {
+  /**
+   * A single reducer function that will be used as the root reducer, or an
+   * object of slice reducers that will be passed to `combineReducers()`.
+   */
+  reducer: Reducer<S, A, P> | ReducersMapObject<S, A, P>
+
+  /**
+   * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.
+   * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.
+   *
+   * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`
+   * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage
+   */
+  middleware?: (getDefaultMiddleware: GetDefaultMiddleware<S>) => M
+
+  /**
+   * Whether to enable Redux DevTools integration. Defaults to `true`.
+   *
+   * Additional configuration can be done by passing Redux DevTools options
+   */
+  devTools?: boolean | DevToolsOptions
+
+  /**
+   * Whether to check for duplicate middleware instances. Defaults to `true`.
+   */
+  duplicateMiddlewareCheck?: boolean
+
+  /**
+   * The initial state, same as Redux's createStore.
+   * You may optionally specify it to hydrate the state
+   * from the server in universal apps, or to restore a previously serialized
+   * user session. If you use `combineReducers()` to produce the root reducer
+   * function (either directly or indirectly by passing an object as `reducer`),
+   * this must be an object with the same shape as the reducer map keys.
+   */
+  // we infer here, and instead complain if the reducer doesn't match
+  preloadedState?: P
+
+  /**
+   * The store enhancers to apply. See Redux's `createStore()`.
+   * All enhancers will be included before the DevTools Extension enhancer.
+   * If you need to customize the order of enhancers, supply a callback
+   * function that will receive a `getDefaultEnhancers` function that returns a Tuple,
+   * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).
+   * If you only need to add middleware, you can use the `middleware` parameter instead.
+   */
+  enhancers?: (getDefaultEnhancers: GetDefaultEnhancers<M>) => E
+}
+
+export type Middlewares<S> = ReadonlyArray<Middleware<{}, S>>
+
+type Enhancers = ReadonlyArray<StoreEnhancer>
+
+/**
+ * A Redux store returned by `configureStore()`. Supports dispatching
+ * side-effectful _thunks_ in addition to plain actions.
+ *
+ * @public
+ */
+export type EnhancedStore<
+  S = any,
+  A extends Action = UnknownAction,
+  E extends Enhancers = Enhancers,
+> = ExtractStoreExtensions<E> &
+  Store<S, A, UnknownIfNonSpecific<ExtractStateExtensions<E>>>
+
+/**
+ * A friendly abstraction over the standard Redux `createStore()` function.
+ *
+ * @param options The store configuration.
+ * @returns A configured Redux store.
+ *
+ * @public
+ */
+export function configureStore<
+  S = any,
+  A extends Action = UnknownAction,
+  M extends Tuple<Middlewares<S>> = Tuple<[ThunkMiddlewareFor<S>]>,
+  E extends Tuple<Enhancers> = Tuple<
+    [StoreEnhancer<{ dispatch: ExtractDispatchExtensions<M> }>, StoreEnhancer]
+  >,
+  P = S,
+>(options: ConfigureStoreOptions<S, A, M, E, P>): EnhancedStore<S, A, E> {
+  const getDefaultMiddleware = buildGetDefaultMiddleware<S>()
+
+  const {
+    reducer = undefined,
+    middleware,
+    devTools = true,
+    duplicateMiddlewareCheck = true,
+    preloadedState = undefined,
+    enhancers = undefined,
+  } = options || {}
+
+  let rootReducer: Reducer<S, A, P>
+
+  if (typeof reducer === 'function') {
+    rootReducer = reducer
+  } else if (isPlainObject(reducer)) {
+    rootReducer = combineReducers(reducer) as unknown as Reducer<S, A, P>
+  } else {
+    throw new Error(
+      '`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers',
+    )
+  }
+
+  if (
+    process.env.NODE_ENV !== 'production' &&
+    middleware &&
+    typeof middleware !== 'function'
+  ) {
+    throw new Error('`middleware` field must be a callback')
+  }
+
+  let finalMiddleware: Tuple<Middlewares<S>>
+  if (typeof middleware === 'function') {
+    finalMiddleware = middleware(getDefaultMiddleware)
+
+    if (
+      process.env.NODE_ENV !== 'production' &&
+      !Array.isArray(finalMiddleware)
+    ) {
+      throw new Error(
+        'when using a middleware builder function, an array of middleware must be returned',
+      )
+    }
+  } else {
+    finalMiddleware = getDefaultMiddleware()
+  }
+  if (
+    process.env.NODE_ENV !== 'production' &&
+    finalMiddleware.some((item: any) => typeof item !== 'function')
+  ) {
+    throw new Error(
+      'each middleware provided to configureStore must be a function',
+    )
+  }
+
+  if (process.env.NODE_ENV !== 'production' && duplicateMiddlewareCheck) {
+    let middlewareReferences = new Set<Middleware<any, S>>()
+    finalMiddleware.forEach((middleware) => {
+      if (middlewareReferences.has(middleware)) {
+        throw new Error(
+          'Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.',
+        )
+      }
+      middlewareReferences.add(middleware)
+    })
+  }
+
+  let finalCompose = compose
+
+  if (devTools) {
+    finalCompose = composeWithDevTools({
+      // Enable capture of stack traces for dispatched Redux actions
+      trace: process.env.NODE_ENV !== 'production',
+      ...(typeof devTools === 'object' && devTools),
+    })
+  }
+
+  const middlewareEnhancer = applyMiddleware(...finalMiddleware)
+
+  const getDefaultEnhancers = buildGetDefaultEnhancers<M>(middlewareEnhancer)
+
+  if (
+    process.env.NODE_ENV !== 'production' &&
+    enhancers &&
+    typeof enhancers !== 'function'
+  ) {
+    throw new Error('`enhancers` field must be a callback')
+  }
+
+  let storeEnhancers =
+    typeof enhancers === 'function'
+      ? enhancers(getDefaultEnhancers)
+      : getDefaultEnhancers()
+
+  if (process.env.NODE_ENV !== 'production' && !Array.isArray(storeEnhancers)) {
+    throw new Error('`enhancers` callback must return an array')
+  }
+  if (
+    process.env.NODE_ENV !== 'production' &&
+    storeEnhancers.some((item: any) => typeof item !== 'function')
+  ) {
+    throw new Error(
+      'each enhancer provided to configureStore must be a function',
+    )
+  }
+  if (
+    process.env.NODE_ENV !== 'production' &&
+    finalMiddleware.length &&
+    !storeEnhancers.includes(middlewareEnhancer)
+  ) {
+    console.error(
+      'middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`',
+    )
+  }
+
+  const composedEnhancer: StoreEnhancer<any> = finalCompose(...storeEnhancers)
+
+  return createStore(rootReducer, preloadedState as P, composedEnhancer)
+}
Index: node_modules/@reduxjs/toolkit/src/createAction.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/createAction.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/createAction.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,324 @@
+import { isAction } from 'redux'
+import type {
+  IsUnknownOrNonInferrable,
+  IfMaybeUndefined,
+  IfVoid,
+  IsAny,
+} from './tsHelpers'
+import { hasMatchFunction } from './tsHelpers'
+
+/**
+ * An action with a string type and an associated payload. This is the
+ * type of action returned by `createAction()` action creators.
+ *
+ * @template P The type of the action's payload.
+ * @template T the type used for the action type.
+ * @template M The type of the action's meta (optional)
+ * @template E The type of the action's error (optional)
+ *
+ * @public
+ */
+export type PayloadAction<
+  P = void,
+  T extends string = string,
+  M = never,
+  E = never,
+> = {
+  payload: P
+  type: T
+} & ([M] extends [never]
+  ? {}
+  : {
+      meta: M
+    }) &
+  ([E] extends [never]
+    ? {}
+    : {
+        error: E
+      })
+
+/**
+ * A "prepare" method to be used as the second parameter of `createAction`.
+ * Takes any number of arguments and returns a Flux Standard Action without
+ * type (will be added later) that *must* contain a payload (might be undefined).
+ *
+ * @public
+ */
+export type PrepareAction<P> =
+  | ((...args: any[]) => { payload: P })
+  | ((...args: any[]) => { payload: P; meta: any })
+  | ((...args: any[]) => { payload: P; error: any })
+  | ((...args: any[]) => { payload: P; meta: any; error: any })
+
+/**
+ * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.
+ *
+ * @internal
+ */
+export type _ActionCreatorWithPreparedPayload<
+  PA extends PrepareAction<any> | void,
+  T extends string = string,
+> =
+  PA extends PrepareAction<infer P>
+    ? ActionCreatorWithPreparedPayload<
+        Parameters<PA>,
+        P,
+        T,
+        ReturnType<PA> extends {
+          error: infer E
+        }
+          ? E
+          : never,
+        ReturnType<PA> extends {
+          meta: infer M
+        }
+          ? M
+          : never
+      >
+    : void
+
+/**
+ * Basic type for all action creators.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ */
+export type BaseActionCreator<P, T extends string, M = never, E = never> = {
+  type: T
+  match: (action: unknown) => action is PayloadAction<P, T, M, E>
+}
+
+/**
+ * An action creator that takes multiple arguments that are passed
+ * to a `PrepareAction` method to create the final Action.
+ * @typeParam Args arguments for the action creator function
+ * @typeParam P `payload` type
+ * @typeParam T `type` name
+ * @typeParam E optional `error` type
+ * @typeParam M optional `meta` type
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+export interface ActionCreatorWithPreparedPayload<
+  Args extends unknown[],
+  P,
+  T extends string = string,
+  E = never,
+  M = never,
+> extends BaseActionCreator<P, T, M, E> {
+  /**
+   * Calling this {@link redux#ActionCreator} with `Args` will return
+   * an Action with a payload of type `P` and (depending on the `PrepareAction`
+   * method used) a `meta`- and `error` property of types `M` and `E` respectively.
+   */
+  (...args: Args): PayloadAction<P, T, M, E>
+}
+
+/**
+ * An action creator of type `T` that takes an optional payload of type `P`.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+export interface ActionCreatorWithOptionalPayload<P, T extends string = string>
+  extends BaseActionCreator<P, T> {
+  /**
+   * Calling this {@link redux#ActionCreator} with an argument will
+   * return a {@link PayloadAction} of type `T` with a payload of `P`.
+   * Calling it without an argument will return a PayloadAction with a payload of `undefined`.
+   */
+  (payload?: P): PayloadAction<P, T>
+}
+
+/**
+ * An action creator of type `T` that takes no payload.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+export interface ActionCreatorWithoutPayload<T extends string = string>
+  extends BaseActionCreator<undefined, T> {
+  /**
+   * Calling this {@link redux#ActionCreator} will
+   * return a {@link PayloadAction} of type `T` with a payload of `undefined`
+   */
+  (noArgument: void): PayloadAction<undefined, T>
+}
+
+/**
+ * An action creator of type `T` that requires a payload of type P.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+export interface ActionCreatorWithPayload<P, T extends string = string>
+  extends BaseActionCreator<P, T> {
+  /**
+   * Calling this {@link redux#ActionCreator} with an argument will
+   * return a {@link PayloadAction} of type `T` with a payload of `P`
+   */
+  (payload: P): PayloadAction<P, T>
+}
+
+/**
+ * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.
+ *
+ * @inheritdoc {redux#ActionCreator}
+ *
+ * @public
+ */
+export interface ActionCreatorWithNonInferrablePayload<
+  T extends string = string,
+> extends BaseActionCreator<unknown, T> {
+  /**
+   * Calling this {@link redux#ActionCreator} with an argument will
+   * return a {@link PayloadAction} of type `T` with a payload
+   * of exactly the type of the argument.
+   */
+  <PT extends unknown>(payload: PT): PayloadAction<PT, T>
+}
+
+/**
+ * An action creator that produces actions with a `payload` attribute.
+ *
+ * @typeParam P the `payload` type
+ * @typeParam T the `type` of the resulting action
+ * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.
+ *
+ * @public
+ */
+export type PayloadActionCreator<
+  P = void,
+  T extends string = string,
+  PA extends PrepareAction<P> | void = void,
+> = IfPrepareActionMethodProvided<
+  PA,
+  _ActionCreatorWithPreparedPayload<PA, T>,
+  // else
+  IsAny<
+    P,
+    ActionCreatorWithPayload<any, T>,
+    IsUnknownOrNonInferrable<
+      P,
+      ActionCreatorWithNonInferrablePayload<T>,
+      // else
+      IfVoid<
+        P,
+        ActionCreatorWithoutPayload<T>,
+        // else
+        IfMaybeUndefined<
+          P,
+          ActionCreatorWithOptionalPayload<P, T>,
+          // else
+          ActionCreatorWithPayload<P, T>
+        >
+      >
+    >
+  >
+>
+
+/**
+ * A utility function to create an action creator for the given action type
+ * string. The action creator accepts a single argument, which will be included
+ * in the action object as a field called payload. The action creator function
+ * will also have its toString() overridden so that it returns the action type.
+ *
+ * @param type The action type to use for created actions.
+ * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.
+ *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.
+ *
+ * @public
+ */
+export function createAction<P = void, T extends string = string>(
+  type: T,
+): PayloadActionCreator<P, T>
+
+/**
+ * A utility function to create an action creator for the given action type
+ * string. The action creator accepts a single argument, which will be included
+ * in the action object as a field called payload. The action creator function
+ * will also have its toString() overridden so that it returns the action type.
+ *
+ * @param type The action type to use for created actions.
+ * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.
+ *                If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.
+ *
+ * @public
+ */
+export function createAction<
+  PA extends PrepareAction<any>,
+  T extends string = string,
+>(
+  type: T,
+  prepareAction: PA,
+): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>
+
+export function createAction(type: string, prepareAction?: Function): any {
+  function actionCreator(...args: any[]) {
+    if (prepareAction) {
+      let prepared = prepareAction(...args)
+      if (!prepared) {
+        throw new Error('prepareAction did not return an object')
+      }
+
+      return {
+        type,
+        payload: prepared.payload,
+        ...('meta' in prepared && { meta: prepared.meta }),
+        ...('error' in prepared && { error: prepared.error }),
+      }
+    }
+    return { type, payload: args[0] }
+  }
+
+  actionCreator.toString = () => `${type}`
+
+  actionCreator.type = type
+
+  actionCreator.match = (action: unknown): action is PayloadAction =>
+    isAction(action) && action.type === type
+
+  return actionCreator
+}
+
+/**
+ * Returns true if value is an RTK-like action creator, with a static type property and match method.
+ */
+export function isActionCreator(
+  action: unknown,
+): action is BaseActionCreator<unknown, string> & Function {
+  return (
+    typeof action === 'function' &&
+    'type' in action &&
+    // hasMatchFunction only wants Matchers but I don't see the point in rewriting it
+    hasMatchFunction(action as any)
+  )
+}
+
+/**
+ * Returns true if value is an action with a string type and valid Flux Standard Action keys.
+ */
+export function isFSA(action: unknown): action is {
+  type: string
+  payload?: unknown
+  error?: unknown
+  meta?: unknown
+} {
+  return isAction(action) && Object.keys(action).every(isValidKey)
+}
+
+function isValidKey(key: string) {
+  return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1
+}
+
+// helper types for more readable typings
+
+type IfPrepareActionMethodProvided<
+  PA extends PrepareAction<any> | void,
+  True,
+  False,
+> = PA extends (...args: any[]) => any ? True : False
Index: node_modules/@reduxjs/toolkit/src/createAsyncThunk.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/createAsyncThunk.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/createAsyncThunk.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,789 @@
+import type { Dispatch, UnknownAction } from 'redux'
+import type { ThunkDispatch } from 'redux-thunk'
+import type { ActionCreatorWithPreparedPayload } from './createAction'
+import { createAction } from './createAction'
+import { isAnyOf } from './matchers'
+import { nanoid } from './nanoid'
+import type {
+  FallbackIfUnknown,
+  Id,
+  IsAny,
+  IsUnknown,
+  SafePromise,
+} from './tsHelpers'
+
+export type BaseThunkAPI<
+  S,
+  E,
+  D extends Dispatch = Dispatch,
+  RejectedValue = unknown,
+  RejectedMeta = unknown,
+  FulfilledMeta = unknown,
+> = {
+  dispatch: D
+  getState: () => S
+  extra: E
+  requestId: string
+  signal: AbortSignal
+  abort: (reason?: string) => void
+  rejectWithValue: IsUnknown<
+    RejectedMeta,
+    (value: RejectedValue) => RejectWithValue<RejectedValue, RejectedMeta>,
+    (
+      value: RejectedValue,
+      meta: RejectedMeta,
+    ) => RejectWithValue<RejectedValue, RejectedMeta>
+  >
+  fulfillWithValue: IsUnknown<
+    FulfilledMeta,
+    <FulfilledValue>(value: FulfilledValue) => FulfilledValue,
+    <FulfilledValue>(
+      value: FulfilledValue,
+      meta: FulfilledMeta,
+    ) => FulfillWithMeta<FulfilledValue, FulfilledMeta>
+  >
+}
+
+/**
+ * @public
+ */
+export interface SerializedError {
+  name?: string
+  message?: string
+  stack?: string
+  code?: string
+}
+
+const commonProperties: Array<keyof SerializedError> = [
+  'name',
+  'message',
+  'stack',
+  'code',
+]
+
+class RejectWithValue<Payload, RejectedMeta> {
+  /*
+  type-only property to distinguish between RejectWithValue and FulfillWithMeta
+  does not exist at runtime
+  */
+  private readonly _type!: 'RejectWithValue'
+  constructor(
+    public readonly payload: Payload,
+    public readonly meta: RejectedMeta,
+  ) {}
+}
+
+class FulfillWithMeta<Payload, FulfilledMeta> {
+  /*
+  type-only property to distinguish between RejectWithValue and FulfillWithMeta
+  does not exist at runtime
+  */
+  private readonly _type!: 'FulfillWithMeta'
+  constructor(
+    public readonly payload: Payload,
+    public readonly meta: FulfilledMeta,
+  ) {}
+}
+
+/**
+ * Serializes an error into a plain object.
+ * Reworked from https://github.com/sindresorhus/serialize-error
+ *
+ * @public
+ */
+export const miniSerializeError = (value: any): SerializedError => {
+  if (typeof value === 'object' && value !== null) {
+    const simpleError: SerializedError = {}
+    for (const property of commonProperties) {
+      if (typeof value[property] === 'string') {
+        simpleError[property] = value[property]
+      }
+    }
+
+    return simpleError
+  }
+
+  return { message: String(value) }
+}
+
+export type AsyncThunkConfig = {
+  state?: unknown
+  dispatch?: ThunkDispatch<unknown, unknown, UnknownAction>
+  extra?: unknown
+  rejectValue?: unknown
+  serializedErrorType?: unknown
+  pendingMeta?: unknown
+  fulfilledMeta?: unknown
+  rejectedMeta?: unknown
+}
+
+export type GetState<ThunkApiConfig> = ThunkApiConfig extends {
+  state: infer State
+}
+  ? State
+  : unknown
+
+type GetExtra<ThunkApiConfig> = ThunkApiConfig extends { extra: infer Extra }
+  ? Extra
+  : unknown
+type GetDispatch<ThunkApiConfig> = ThunkApiConfig extends {
+  dispatch: infer Dispatch
+}
+  ? FallbackIfUnknown<
+      Dispatch,
+      ThunkDispatch<
+        GetState<ThunkApiConfig>,
+        GetExtra<ThunkApiConfig>,
+        UnknownAction
+      >
+    >
+  : ThunkDispatch<
+      GetState<ThunkApiConfig>,
+      GetExtra<ThunkApiConfig>,
+      UnknownAction
+    >
+
+export type GetThunkAPI<ThunkApiConfig> = BaseThunkAPI<
+  GetState<ThunkApiConfig>,
+  GetExtra<ThunkApiConfig>,
+  GetDispatch<ThunkApiConfig>,
+  GetRejectValue<ThunkApiConfig>,
+  GetRejectedMeta<ThunkApiConfig>,
+  GetFulfilledMeta<ThunkApiConfig>
+>
+
+type GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {
+  rejectValue: infer RejectValue
+}
+  ? RejectValue
+  : unknown
+
+type GetPendingMeta<ThunkApiConfig> = ThunkApiConfig extends {
+  pendingMeta: infer PendingMeta
+}
+  ? PendingMeta
+  : unknown
+
+type GetFulfilledMeta<ThunkApiConfig> = ThunkApiConfig extends {
+  fulfilledMeta: infer FulfilledMeta
+}
+  ? FulfilledMeta
+  : unknown
+
+type GetRejectedMeta<ThunkApiConfig> = ThunkApiConfig extends {
+  rejectedMeta: infer RejectedMeta
+}
+  ? RejectedMeta
+  : unknown
+
+type GetSerializedErrorType<ThunkApiConfig> = ThunkApiConfig extends {
+  serializedErrorType: infer GetSerializedErrorType
+}
+  ? GetSerializedErrorType
+  : SerializedError
+
+type MaybePromise<T> = T | Promise<T> | (T extends any ? Promise<T> : never)
+
+/**
+ * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.
+ * Might be useful for wrapping `createAsyncThunk` in custom abstractions.
+ *
+ * @public
+ */
+export type AsyncThunkPayloadCreatorReturnValue<
+  Returned,
+  ThunkApiConfig extends AsyncThunkConfig,
+> = MaybePromise<
+  | IsUnknown<
+      GetFulfilledMeta<ThunkApiConfig>,
+      Returned,
+      FulfillWithMeta<Returned, GetFulfilledMeta<ThunkApiConfig>>
+    >
+  | RejectWithValue<
+      GetRejectValue<ThunkApiConfig>,
+      GetRejectedMeta<ThunkApiConfig>
+    >
+>
+/**
+ * A type describing the `payloadCreator` argument to `createAsyncThunk`.
+ * Might be useful for wrapping `createAsyncThunk` in custom abstractions.
+ *
+ * @public
+ */
+export type AsyncThunkPayloadCreator<
+  Returned,
+  ThunkArg = void,
+  ThunkApiConfig extends AsyncThunkConfig = {},
+> = (
+  arg: ThunkArg,
+  thunkAPI: GetThunkAPI<ThunkApiConfig>,
+) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>
+
+/**
+ * A ThunkAction created by `createAsyncThunk`.
+ * Dispatching it returns a Promise for either a
+ * fulfilled or rejected action.
+ * Also, the returned value contains an `abort()` method
+ * that allows the asyncAction to be cancelled from the outside.
+ *
+ * @public
+ */
+export type AsyncThunkAction<
+  Returned,
+  ThunkArg,
+  ThunkApiConfig extends AsyncThunkConfig,
+> = (
+  dispatch: NonNullable<GetDispatch<ThunkApiConfig>>,
+  getState: () => GetState<ThunkApiConfig>,
+  extra: GetExtra<ThunkApiConfig>,
+) => SafePromise<
+  | ReturnType<AsyncThunkFulfilledActionCreator<Returned, ThunkArg>>
+  | ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>>
+> & {
+  abort: (reason?: string) => void
+  requestId: string
+  arg: ThunkArg
+  unwrap: () => Promise<Returned>
+}
+
+/**
+ * Config provided when calling the async thunk action creator.
+ */
+export interface AsyncThunkDispatchConfig {
+  /**
+   * An external `AbortSignal` that will be tracked by the internal `AbortSignal`.
+   */
+  signal?: AbortSignal
+}
+
+type AsyncThunkActionCreator<
+  Returned,
+  ThunkArg,
+  ThunkApiConfig extends AsyncThunkConfig,
+> = IsAny<
+  ThunkArg,
+  // any handling
+  (
+    arg: ThunkArg,
+    config?: AsyncThunkDispatchConfig,
+  ) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,
+  // unknown handling
+  unknown extends ThunkArg
+    ? (
+        arg: ThunkArg,
+        config?: AsyncThunkDispatchConfig,
+      ) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument not specified or specified as void or undefined
+    : [ThunkArg] extends [void] | [undefined]
+      ? (
+          arg?: undefined,
+          config?: AsyncThunkDispatchConfig,
+        ) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains void
+      : [void] extends [ThunkArg] // make optional
+        ? (
+            arg?: ThunkArg,
+            config?: AsyncThunkDispatchConfig,
+          ) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains undefined
+        : [undefined] extends [ThunkArg]
+          ? WithStrictNullChecks<
+              // with strict nullChecks: make optional
+              (
+                arg?: ThunkArg,
+                config?: AsyncThunkDispatchConfig,
+              ) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,
+              // without strict null checks this will match everything, so don't make it optional
+              (
+                arg: ThunkArg,
+                config?: AsyncThunkDispatchConfig,
+              ) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>
+            > // default case: normal argument
+          : (
+              arg: ThunkArg,
+              config?: AsyncThunkDispatchConfig,
+            ) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>
+>
+
+/**
+ * Options object for `createAsyncThunk`.
+ *
+ * @public
+ */
+export type AsyncThunkOptions<
+  ThunkArg = void,
+  ThunkApiConfig extends AsyncThunkConfig = {},
+> = {
+  /**
+   * A method to control whether the asyncThunk should be executed. Has access to the
+   * `arg`, `api.getState()` and `api.extra` arguments.
+   *
+   * @returns `false` if it should be skipped
+   */
+  condition?(
+    arg: ThunkArg,
+    api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>,
+  ): MaybePromise<boolean | undefined>
+  /**
+   * If `condition` returns `false`, the asyncThunk will be skipped.
+   * This option allows you to control whether a `rejected` action with `meta.condition == false`
+   * will be dispatched or not.
+   *
+   * @default `false`
+   */
+  dispatchConditionRejection?: boolean
+
+  serializeError?: (x: unknown) => GetSerializedErrorType<ThunkApiConfig>
+
+  /**
+   * A function to use when generating the `requestId` for the request sequence.
+   *
+   * @default `nanoid`
+   */
+  idGenerator?: (arg: ThunkArg) => string
+} & IsUnknown<
+  GetPendingMeta<ThunkApiConfig>,
+  {
+    /**
+     * A method to generate additional properties to be added to `meta` of the pending action.
+     *
+     * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.
+     * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload
+     */
+    getPendingMeta?(
+      base: {
+        arg: ThunkArg
+        requestId: string
+      },
+      api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>,
+    ): GetPendingMeta<ThunkApiConfig>
+  },
+  {
+    /**
+     * A method to generate additional properties to be added to `meta` of the pending action.
+     */
+    getPendingMeta(
+      base: {
+        arg: ThunkArg
+        requestId: string
+      },
+      api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>,
+    ): GetPendingMeta<ThunkApiConfig>
+  }
+>
+
+export type AsyncThunkPendingActionCreator<
+  ThunkArg,
+  ThunkApiConfig = {},
+> = ActionCreatorWithPreparedPayload<
+  [string, ThunkArg, GetPendingMeta<ThunkApiConfig>?],
+  undefined,
+  string,
+  never,
+  {
+    arg: ThunkArg
+    requestId: string
+    requestStatus: 'pending'
+  } & GetPendingMeta<ThunkApiConfig>
+>
+
+export type AsyncThunkRejectedActionCreator<
+  ThunkArg,
+  ThunkApiConfig = {},
+> = ActionCreatorWithPreparedPayload<
+  [
+    Error | null,
+    string,
+    ThunkArg,
+    GetRejectValue<ThunkApiConfig>?,
+    GetRejectedMeta<ThunkApiConfig>?,
+  ],
+  GetRejectValue<ThunkApiConfig> | undefined,
+  string,
+  GetSerializedErrorType<ThunkApiConfig>,
+  {
+    arg: ThunkArg
+    requestId: string
+    requestStatus: 'rejected'
+    aborted: boolean
+    condition: boolean
+  } & (
+    | ({ rejectedWithValue: false } & {
+        [K in keyof GetRejectedMeta<ThunkApiConfig>]?: undefined
+      })
+    | ({ rejectedWithValue: true } & GetRejectedMeta<ThunkApiConfig>)
+  )
+>
+
+export type AsyncThunkFulfilledActionCreator<
+  Returned,
+  ThunkArg,
+  ThunkApiConfig = {},
+> = ActionCreatorWithPreparedPayload<
+  [Returned, string, ThunkArg, GetFulfilledMeta<ThunkApiConfig>?],
+  Returned,
+  string,
+  never,
+  {
+    arg: ThunkArg
+    requestId: string
+    requestStatus: 'fulfilled'
+  } & GetFulfilledMeta<ThunkApiConfig>
+>
+
+/**
+ * A type describing the return value of `createAsyncThunk`.
+ * Might be useful for wrapping `createAsyncThunk` in custom abstractions.
+ *
+ * @public
+ */
+export type AsyncThunk<
+  Returned,
+  ThunkArg,
+  ThunkApiConfig extends AsyncThunkConfig,
+> = AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig> & {
+  pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig>
+  rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>
+  fulfilled: AsyncThunkFulfilledActionCreator<
+    Returned,
+    ThunkArg,
+    ThunkApiConfig
+  >
+  // matchSettled?
+  settled: (
+    action: any,
+  ) => action is ReturnType<
+    | AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>
+    | AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>
+  >
+  typePrefix: string
+}
+
+export type OverrideThunkApiConfigs<OldConfig, NewConfig> = Id<
+  NewConfig & Omit<OldConfig, keyof NewConfig>
+>
+
+export type CreateAsyncThunkFunction<
+  CurriedThunkApiConfig extends AsyncThunkConfig,
+> = {
+  /**
+   *
+   * @param typePrefix
+   * @param payloadCreator
+   * @param options
+   *
+   * @public
+   */
+  // separate signature without `AsyncThunkConfig` for better inference
+  <Returned, ThunkArg = void>(
+    typePrefix: string,
+    payloadCreator: AsyncThunkPayloadCreator<
+      Returned,
+      ThunkArg,
+      CurriedThunkApiConfig
+    >,
+    options?: AsyncThunkOptions<ThunkArg, CurriedThunkApiConfig>,
+  ): AsyncThunk<Returned, ThunkArg, CurriedThunkApiConfig>
+
+  /**
+   *
+   * @param typePrefix
+   * @param payloadCreator
+   * @param options
+   *
+   * @public
+   */
+  <Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(
+    typePrefix: string,
+    payloadCreator: AsyncThunkPayloadCreator<
+      Returned,
+      ThunkArg,
+      OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>
+    >,
+    options?: AsyncThunkOptions<
+      ThunkArg,
+      OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>
+    >,
+  ): AsyncThunk<
+    Returned,
+    ThunkArg,
+    OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>
+  >
+}
+
+type CreateAsyncThunk<CurriedThunkApiConfig extends AsyncThunkConfig> =
+  CreateAsyncThunkFunction<CurriedThunkApiConfig> & {
+    withTypes<ThunkApiConfig extends AsyncThunkConfig>(): CreateAsyncThunk<
+      OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>
+    >
+  }
+
+const externalAbortMessage = 'External signal was aborted'
+
+export const createAsyncThunk = /* @__PURE__ */ (() => {
+  function createAsyncThunk<
+    Returned,
+    ThunkArg,
+    ThunkApiConfig extends AsyncThunkConfig,
+  >(
+    typePrefix: string,
+    payloadCreator: AsyncThunkPayloadCreator<
+      Returned,
+      ThunkArg,
+      ThunkApiConfig
+    >,
+    options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>,
+  ): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> {
+    type RejectedValue = GetRejectValue<ThunkApiConfig>
+    type PendingMeta = GetPendingMeta<ThunkApiConfig>
+    type FulfilledMeta = GetFulfilledMeta<ThunkApiConfig>
+    type RejectedMeta = GetRejectedMeta<ThunkApiConfig>
+
+    const fulfilled: AsyncThunkFulfilledActionCreator<
+      Returned,
+      ThunkArg,
+      ThunkApiConfig
+    > = createAction(
+      typePrefix + '/fulfilled',
+      (
+        payload: Returned,
+        requestId: string,
+        arg: ThunkArg,
+        meta?: FulfilledMeta,
+      ) => ({
+        payload,
+        meta: {
+          ...((meta as any) || {}),
+          arg,
+          requestId,
+          requestStatus: 'fulfilled' as const,
+        },
+      }),
+    )
+
+    const pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig> =
+      createAction(
+        typePrefix + '/pending',
+        (requestId: string, arg: ThunkArg, meta?: PendingMeta) => ({
+          payload: undefined,
+          meta: {
+            ...((meta as any) || {}),
+            arg,
+            requestId,
+            requestStatus: 'pending' as const,
+          },
+        }),
+      )
+
+    const rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> =
+      createAction(
+        typePrefix + '/rejected',
+        (
+          error: Error | null,
+          requestId: string,
+          arg: ThunkArg,
+          payload?: RejectedValue,
+          meta?: RejectedMeta,
+        ) => ({
+          payload,
+          error: ((options && options.serializeError) || miniSerializeError)(
+            error || 'Rejected',
+          ) as GetSerializedErrorType<ThunkApiConfig>,
+          meta: {
+            ...((meta as any) || {}),
+            arg,
+            requestId,
+            rejectedWithValue: !!payload,
+            requestStatus: 'rejected' as const,
+            aborted: error?.name === 'AbortError',
+            condition: error?.name === 'ConditionError',
+          },
+        }),
+      )
+
+    function actionCreator(
+      arg: ThunkArg,
+      { signal }: AsyncThunkDispatchConfig = {},
+    ): AsyncThunkAction<Returned, ThunkArg, Required<ThunkApiConfig>> {
+      return (dispatch, getState, extra) => {
+        const requestId = options?.idGenerator
+          ? options.idGenerator(arg)
+          : nanoid()
+
+        const abortController = new AbortController()
+        let abortHandler: (() => void) | undefined
+        let abortReason: string | undefined
+
+        function abort(reason?: string) {
+          abortReason = reason
+          abortController.abort()
+        }
+
+        if (signal) {
+          if (signal.aborted) {
+            abort(externalAbortMessage)
+          } else {
+            signal.addEventListener(
+              'abort',
+              () => abort(externalAbortMessage),
+              { once: true },
+            )
+          }
+        }
+
+        const promise = (async function () {
+          let finalAction: ReturnType<typeof fulfilled | typeof rejected>
+          try {
+            let conditionResult = options?.condition?.(arg, { getState, extra })
+            if (isThenable(conditionResult)) {
+              conditionResult = await conditionResult
+            }
+
+            if (conditionResult === false || abortController.signal.aborted) {
+              // eslint-disable-next-line no-throw-literal
+              throw {
+                name: 'ConditionError',
+                message: 'Aborted due to condition callback returning false.',
+              }
+            }
+
+            const abortedPromise = new Promise<never>((_, reject) => {
+              abortHandler = () => {
+                reject({
+                  name: 'AbortError',
+                  message: abortReason || 'Aborted',
+                })
+              }
+              abortController.signal.addEventListener('abort', abortHandler)
+            })
+            dispatch(
+              pending(
+                requestId,
+                arg,
+                options?.getPendingMeta?.(
+                  { requestId, arg },
+                  { getState, extra },
+                ),
+              ) as any,
+            )
+            finalAction = await Promise.race([
+              abortedPromise,
+              Promise.resolve(
+                payloadCreator(arg, {
+                  dispatch,
+                  getState,
+                  extra,
+                  requestId,
+                  signal: abortController.signal,
+                  abort,
+                  rejectWithValue: ((
+                    value: RejectedValue,
+                    meta?: RejectedMeta,
+                  ) => {
+                    return new RejectWithValue(value, meta)
+                  }) as any,
+                  fulfillWithValue: ((value: unknown, meta?: FulfilledMeta) => {
+                    return new FulfillWithMeta(value, meta)
+                  }) as any,
+                }),
+              ).then((result) => {
+                if (result instanceof RejectWithValue) {
+                  throw result
+                }
+                if (result instanceof FulfillWithMeta) {
+                  return fulfilled(result.payload, requestId, arg, result.meta)
+                }
+                return fulfilled(result as any, requestId, arg)
+              }),
+            ])
+          } catch (err) {
+            finalAction =
+              err instanceof RejectWithValue
+                ? rejected(null, requestId, arg, err.payload, err.meta)
+                : rejected(err as any, requestId, arg)
+          } finally {
+            if (abortHandler) {
+              abortController.signal.removeEventListener('abort', abortHandler)
+            }
+          }
+          // We dispatch the result action _after_ the catch, to avoid having any errors
+          // here get swallowed by the try/catch block,
+          // per https://twitter.com/dan_abramov/status/770914221638942720
+          // and https://github.com/reduxjs/redux-toolkit/blob/e85eb17b39a2118d859f7b7746e0f3fee523e089/docs/tutorials/advanced-tutorial.md#async-error-handling-logic-in-thunks
+
+          const skipDispatch =
+            options &&
+            !options.dispatchConditionRejection &&
+            rejected.match(finalAction) &&
+            (finalAction as any).meta.condition
+
+          if (!skipDispatch) {
+            dispatch(finalAction as any)
+          }
+          return finalAction
+        })()
+        return Object.assign(promise as SafePromise<any>, {
+          abort,
+          requestId,
+          arg,
+          unwrap() {
+            return promise.then<any>(unwrapResult)
+          },
+        })
+      }
+    }
+
+    return Object.assign(
+      actionCreator as AsyncThunkActionCreator<
+        Returned,
+        ThunkArg,
+        ThunkApiConfig
+      >,
+      {
+        pending,
+        rejected,
+        fulfilled,
+        settled: isAnyOf(rejected, fulfilled),
+        typePrefix,
+      },
+    )
+  }
+  createAsyncThunk.withTypes = () => createAsyncThunk
+
+  return createAsyncThunk as CreateAsyncThunk<AsyncThunkConfig>
+})()
+
+interface UnwrappableAction {
+  payload: any
+  meta?: any
+  error?: any
+}
+
+type UnwrappedActionPayload<T extends UnwrappableAction> = Exclude<
+  T,
+  { error: any }
+>['payload']
+
+/**
+ * @public
+ */
+export function unwrapResult<R extends UnwrappableAction>(
+  action: R,
+): UnwrappedActionPayload<R> {
+  if (action.meta && action.meta.rejectedWithValue) {
+    throw action.payload
+  }
+  if (action.error) {
+    throw action.error
+  }
+  return action.payload
+}
+
+type WithStrictNullChecks<True, False> = undefined extends boolean
+  ? False
+  : True
+
+function isThenable(value: any): value is PromiseLike<any> {
+  return (
+    value !== null &&
+    typeof value === 'object' &&
+    typeof value.then === 'function'
+  )
+}
Index: node_modules/@reduxjs/toolkit/src/createDraftSafeSelector.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/createDraftSafeSelector.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/createDraftSafeSelector.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { current, isDraft } from 'immer'
+import { createSelectorCreator, weakMapMemoize } from 'reselect'
+
+export const createDraftSafeSelectorCreator: typeof createSelectorCreator = (
+  ...args: unknown[]
+) => {
+  const createSelector = (createSelectorCreator as any)(...args)
+  const createDraftSafeSelector = Object.assign(
+    (...args: unknown[]) => {
+      const selector = createSelector(...args)
+      const wrappedSelector = (value: unknown, ...rest: unknown[]) =>
+        selector(isDraft(value) ? current(value) : value, ...rest)
+      Object.assign(wrappedSelector, selector)
+      return wrappedSelector as any
+    },
+    { withTypes: () => createDraftSafeSelector },
+  )
+  return createDraftSafeSelector
+}
+
+/**
+ * "Draft-Safe" version of `reselect`'s `createSelector`:
+ * If an `immer`-drafted object is passed into the resulting selector's first argument,
+ * the selector will act on the current draft value, instead of returning a cached value
+ * that might be possibly outdated if the draft has been modified since.
+ * @public
+ */
+export const createDraftSafeSelector =
+  /* @__PURE__ */
+  createDraftSafeSelectorCreator(weakMapMemoize)
Index: node_modules/@reduxjs/toolkit/src/createReducer.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/createReducer.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/createReducer.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,221 @@
+import type { Draft } from 'immer'
+import { produce as createNextState, isDraft, isDraftable } from 'immer'
+import type { Action, Reducer, UnknownAction } from 'redux'
+import type { ActionReducerMapBuilder } from './mapBuilders'
+import { executeReducerBuilderCallback } from './mapBuilders'
+import type { NoInfer, TypeGuard } from './tsHelpers'
+import { freezeDraftable } from './utils'
+
+/**
+ * Defines a mapping from action types to corresponding action object shapes.
+ *
+ * @deprecated This should not be used manually - it is only used for internal
+ *             inference purposes and should not have any further value.
+ *             It might be removed in the future.
+ * @public
+ */
+export type Actions<T extends keyof any = string> = Record<T, Action>
+
+export type ActionMatcherDescription<S, A extends Action> = {
+  matcher: TypeGuard<A>
+  reducer: CaseReducer<S, NoInfer<A>>
+}
+
+export type ReadonlyActionMatcherDescriptionCollection<S> = ReadonlyArray<
+  ActionMatcherDescription<S, any>
+>
+
+export type ActionMatcherDescriptionCollection<S> = Array<
+  ActionMatcherDescription<S, any>
+>
+
+/**
+ * A *case reducer* is a reducer function for a specific action type. Case
+ * reducers can be composed to full reducers using `createReducer()`.
+ *
+ * Unlike a normal Redux reducer, a case reducer is never called with an
+ * `undefined` state to determine the initial state. Instead, the initial
+ * state is explicitly specified as an argument to `createReducer()`.
+ *
+ * In addition, a case reducer can choose to mutate the passed-in `state`
+ * value directly instead of returning a new state. This does not actually
+ * cause the store state to be mutated directly; instead, thanks to
+ * [immer](https://github.com/mweststrate/immer), the mutations are
+ * translated to copy operations that result in a new state.
+ *
+ * @public
+ */
+export type CaseReducer<S = any, A extends Action = UnknownAction> = (
+  state: Draft<S>,
+  action: A,
+) => NoInfer<S> | void | Draft<NoInfer<S>>
+
+/**
+ * A mapping from action types to case reducers for `createReducer()`.
+ *
+ * @deprecated This should not be used manually - it is only used
+ *             for internal inference purposes and using it manually
+ *             would lead to type erasure.
+ *             It might be removed in the future.
+ * @public
+ */
+export type CaseReducers<S, AS extends Actions> = {
+  [T in keyof AS]: AS[T] extends Action ? CaseReducer<S, AS[T]> : void
+}
+
+export type NotFunction<T> = T extends Function ? never : T
+
+function isStateFunction<S>(x: unknown): x is () => S {
+  return typeof x === 'function'
+}
+
+export type ReducerWithInitialState<S extends NotFunction<any>> = Reducer<S> & {
+  getInitialState: () => S
+}
+
+/**
+ * A utility function that allows defining a reducer as a mapping from action
+ * type to *case reducer* functions that handle these action types. The
+ * reducer's initial state is passed as the first argument.
+ *
+ * @remarks
+ * The body of every case reducer is implicitly wrapped with a call to
+ * `produce()` from the [immer](https://github.com/mweststrate/immer) library.
+ * This means that rather than returning a new state object, you can also
+ * mutate the passed-in state object directly; these mutations will then be
+ * automatically and efficiently translated into copies, giving you both
+ * convenience and immutability.
+ *
+ * @overloadSummary
+ * This function accepts a callback that receives a `builder` object as its argument.
+ * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be
+ * called to define what actions this reducer will handle.
+ *
+ * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a "lazy initializer" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.
+ * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define
+ *   case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.
+ * @example
+```ts
+import {
+  createAction,
+  createReducer,
+  UnknownAction,
+  PayloadAction,
+} from "@reduxjs/toolkit";
+
+const increment = createAction<number>("increment");
+const decrement = createAction<number>("decrement");
+
+function isActionWithNumberPayload(
+  action: UnknownAction
+): action is PayloadAction<number> {
+  return typeof action.payload === "number";
+}
+
+const reducer = createReducer(
+  {
+    counter: 0,
+    sumOfNumberPayloads: 0,
+    unhandledActions: 0,
+  },
+  (builder) => {
+    builder
+      .addCase(increment, (state, action) => {
+        // action is inferred correctly here
+        state.counter += action.payload;
+      })
+      // You can chain calls, or have separate `builder.addCase()` lines each time
+      .addCase(decrement, (state, action) => {
+        state.counter -= action.payload;
+      })
+      // You can apply a "matcher function" to incoming actions
+      .addMatcher(isActionWithNumberPayload, (state, action) => {})
+      // and provide a default case if no other handlers matched
+      .addDefaultCase((state, action) => {});
+  }
+);
+```
+ * @public
+ */
+export function createReducer<S extends NotFunction<any>>(
+  initialState: S | (() => S),
+  mapOrBuilderCallback: (builder: ActionReducerMapBuilder<S>) => void,
+): ReducerWithInitialState<S> {
+  if (process.env.NODE_ENV !== 'production') {
+    if (typeof mapOrBuilderCallback === 'object') {
+      throw new Error(
+        "The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer",
+      )
+    }
+  }
+
+  let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] =
+    executeReducerBuilderCallback(mapOrBuilderCallback)
+
+  // Ensure the initial state gets frozen either way (if draftable)
+  let getInitialState: () => S
+  if (isStateFunction(initialState)) {
+    getInitialState = () => freezeDraftable(initialState())
+  } else {
+    const frozenInitialState = freezeDraftable(initialState)
+    getInitialState = () => frozenInitialState
+  }
+
+  function reducer(state = getInitialState(), action: any): S {
+    let caseReducers = [
+      actionsMap[action.type],
+      ...finalActionMatchers
+        .filter(({ matcher }) => matcher(action))
+        .map(({ reducer }) => reducer),
+    ]
+    if (caseReducers.filter((cr) => !!cr).length === 0) {
+      caseReducers = [finalDefaultCaseReducer]
+    }
+
+    return caseReducers.reduce((previousState, caseReducer): S => {
+      if (caseReducer) {
+        if (isDraft(previousState)) {
+          // If it's already a draft, we must already be inside a `createNextState` call,
+          // likely because this is being wrapped in `createReducer`, `createSlice`, or nested
+          // inside an existing draft. It's safe to just pass the draft to the mutator.
+          const draft = previousState as Draft<S> // We can assume this is already a draft
+          const result = caseReducer(draft, action)
+
+          if (result === undefined) {
+            return previousState
+          }
+
+          return result as S
+        } else if (!isDraftable(previousState)) {
+          // If state is not draftable (ex: a primitive, such as 0), we want to directly
+          // return the caseReducer func and not wrap it with produce.
+          const result = caseReducer(previousState as any, action)
+
+          if (result === undefined) {
+            if (previousState === null) {
+              return previousState
+            }
+            throw Error(
+              'A case reducer on a non-draftable value must not return undefined',
+            )
+          }
+
+          return result as S
+        } else {
+          // @ts-ignore createNextState() produces an Immutable<Draft<S>> rather
+          // than an Immutable<S>, and TypeScript cannot find out how to reconcile
+          // these two types.
+          return createNextState(previousState, (draft: Draft<S>) => {
+            return caseReducer(draft, action)
+          })
+        }
+      }
+
+      return previousState
+    }, state)
+  }
+
+  reducer.getInitialState = getInitialState
+
+  return reducer as ReducerWithInitialState<S>
+}
Index: node_modules/@reduxjs/toolkit/src/createSlice.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/createSlice.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/createSlice.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1087 @@
+import type { Action, Reducer, UnknownAction } from 'redux'
+import type { Selector } from 'reselect'
+import type { InjectConfig } from './combineSlices'
+import type {
+  ActionCreatorWithoutPayload,
+  PayloadAction,
+  PayloadActionCreator,
+  PrepareAction,
+  _ActionCreatorWithPreparedPayload,
+} from './createAction'
+import { createAction } from './createAction'
+import type {
+  AsyncThunk,
+  AsyncThunkConfig,
+  AsyncThunkOptions,
+  AsyncThunkPayloadCreator,
+  OverrideThunkApiConfigs,
+} from './createAsyncThunk'
+import { createAsyncThunk as _createAsyncThunk } from './createAsyncThunk'
+import type {
+  ActionMatcherDescriptionCollection,
+  CaseReducer,
+  ReducerWithInitialState,
+} from './createReducer'
+import { createReducer } from './createReducer'
+import type { ActionReducerMapBuilder, TypedActionCreator } from './mapBuilders'
+import { executeReducerBuilderCallback } from './mapBuilders'
+import type { Id, TypeGuard } from './tsHelpers'
+import { getOrInsertComputed } from './utils'
+
+const asyncThunkSymbol = /* @__PURE__ */ Symbol.for(
+  'rtk-slice-createasyncthunk',
+)
+// type is annotated because it's too long to infer
+export const asyncThunkCreator: {
+  [asyncThunkSymbol]: typeof _createAsyncThunk
+} = {
+  [asyncThunkSymbol]: _createAsyncThunk,
+}
+
+type InjectIntoConfig<NewReducerPath extends string> = InjectConfig & {
+  reducerPath?: NewReducerPath
+}
+
+/**
+ * The return value of `createSlice`
+ *
+ * @public
+ */
+export interface Slice<
+  State = any,
+  CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>,
+  Name extends string = string,
+  ReducerPath extends string = Name,
+  Selectors extends SliceSelectors<State> = SliceSelectors<State>,
+> {
+  /**
+   * The slice name.
+   */
+  name: Name
+
+  /**
+   *  The slice reducer path.
+   */
+  reducerPath: ReducerPath
+
+  /**
+   * The slice's reducer.
+   */
+  reducer: Reducer<State>
+
+  /**
+   * Action creators for the types of actions that are handled by the slice
+   * reducer.
+   */
+  actions: CaseReducerActions<CaseReducers, Name>
+
+  /**
+   * The individual case reducer functions that were passed in the `reducers` parameter.
+   * This enables reuse and testing if they were defined inline when calling `createSlice`.
+   */
+  caseReducers: SliceDefinedCaseReducers<CaseReducers>
+
+  /**
+   * Provides access to the initial state value given to the slice.
+   * If a lazy state initializer was provided, it will be called and a fresh value returned.
+   */
+  getInitialState: () => State
+
+  /**
+   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)
+   */
+  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State>>
+
+  /**
+   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)
+   */
+  getSelectors<RootState>(
+    selectState: (rootState: RootState) => State,
+  ): Id<SliceDefinedSelectors<State, Selectors, RootState>>
+
+  /**
+   * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)
+   *
+   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.
+   */
+  get selectors(): Id<
+    SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]: State }>
+  >
+
+  /**
+   * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.
+   */
+  injectInto<NewReducerPath extends string = ReducerPath>(
+    this: this,
+    injectable: {
+      inject: (
+        slice: { reducerPath: string; reducer: Reducer },
+        config?: InjectConfig,
+      ) => void
+    },
+    config?: InjectIntoConfig<NewReducerPath>,
+  ): InjectedSlice<State, CaseReducers, Name, NewReducerPath, Selectors>
+
+  /**
+   * Select the slice state, using the slice's current reducerPath.
+   *
+   * Will throw an error if slice is not found.
+   */
+  selectSlice(state: { [K in ReducerPath]: State }): State
+}
+
+/**
+ * A slice after being called with `injectInto(reducer)`.
+ *
+ * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.
+ */
+type InjectedSlice<
+  State = any,
+  CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>,
+  Name extends string = string,
+  ReducerPath extends string = Name,
+  Selectors extends SliceSelectors<State> = SliceSelectors<State>,
+> = Omit<
+  Slice<State, CaseReducers, Name, ReducerPath, Selectors>,
+  'getSelectors' | 'selectors'
+> & {
+  /**
+   * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)
+   */
+  getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State | undefined>>
+
+  /**
+   * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)
+   */
+  getSelectors<RootState>(
+    selectState: (rootState: RootState) => State | undefined,
+  ): Id<SliceDefinedSelectors<State, Selectors, RootState>>
+
+  /**
+   * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)
+   *
+   * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.
+   */
+  get selectors(): Id<
+    SliceDefinedSelectors<
+      State,
+      Selectors,
+      { [K in ReducerPath]?: State | undefined }
+    >
+  >
+
+  /**
+   * Select the slice state, using the slice's current reducerPath.
+   *
+   * Returns initial state if slice is not found.
+   */
+  selectSlice(state: { [K in ReducerPath]?: State | undefined }): State
+}
+
+/**
+ * Options for `createSlice()`.
+ *
+ * @public
+ */
+export interface CreateSliceOptions<
+  State = any,
+  CR extends SliceCaseReducers<State> = SliceCaseReducers<State>,
+  Name extends string = string,
+  ReducerPath extends string = Name,
+  Selectors extends SliceSelectors<State> = SliceSelectors<State>,
+> {
+  /**
+   * The slice's name. Used to namespace the generated action types.
+   */
+  name: Name
+
+  /**
+   * The slice's reducer path. Used when injecting into a combined slice reducer.
+   */
+  reducerPath?: ReducerPath
+
+  /**
+   * The initial state that should be used when the reducer is called the first time. This may also be a "lazy initializer" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.
+   */
+  initialState: State | (() => State)
+
+  /**
+   * A mapping from action types to action-type-specific *case reducer*
+   * functions. For every action type, a matching action creator will be
+   * generated using `createAction()`.
+   */
+  reducers:
+    | ValidateSliceCaseReducers<State, CR>
+    | ((creators: ReducerCreators<State>) => CR)
+
+  /**
+   * A callback that receives a *builder* object to define
+   * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.
+   *
+   *
+   * @example
+```ts
+import { createAction, createSlice, Action } from '@reduxjs/toolkit'
+const incrementBy = createAction<number>('incrementBy')
+const decrement = createAction('decrement')
+
+interface RejectedAction extends Action {
+  error: Error
+}
+
+function isRejectedAction(action: Action): action is RejectedAction {
+  return action.type.endsWith('rejected')
+}
+
+createSlice({
+  name: 'counter',
+  initialState: 0,
+  reducers: {},
+  extraReducers: builder => {
+    builder
+      .addCase(incrementBy, (state, action) => {
+        // action is inferred correctly here if using TS
+      })
+      // You can chain calls, or have separate `builder.addCase()` lines each time
+      .addCase(decrement, (state, action) => {})
+      // You can match a range of action types
+      .addMatcher(
+        isRejectedAction,
+        // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard
+        (state, action) => {}
+      )
+      // and provide a default case if no other handlers matched
+      .addDefaultCase((state, action) => {})
+    }
+})
+```
+   */
+  extraReducers?: (builder: ActionReducerMapBuilder<State>) => void
+
+  /**
+   * A map of selectors that receive the slice's state and any additional arguments, and return a result.
+   */
+  selectors?: Selectors
+}
+
+export enum ReducerType {
+  reducer = 'reducer',
+  reducerWithPrepare = 'reducerWithPrepare',
+  asyncThunk = 'asyncThunk',
+}
+
+type ReducerDefinition<T extends ReducerType = ReducerType> = {
+  _reducerDefinitionType: T
+}
+
+export type CaseReducerDefinition<
+  S = any,
+  A extends Action = UnknownAction,
+> = CaseReducer<S, A> & ReducerDefinition<ReducerType.reducer>
+
+/**
+ * A CaseReducer with a `prepare` method.
+ *
+ * @public
+ */
+export type CaseReducerWithPrepare<State, Action extends PayloadAction> = {
+  reducer: CaseReducer<State, Action>
+  prepare: PrepareAction<Action['payload']>
+}
+
+export interface CaseReducerWithPrepareDefinition<
+  State,
+  Action extends PayloadAction,
+> extends CaseReducerWithPrepare<State, Action>,
+    ReducerDefinition<ReducerType.reducerWithPrepare> {}
+
+type AsyncThunkSliceReducerConfig<
+  State,
+  ThunkArg extends any,
+  Returned = unknown,
+  ThunkApiConfig extends AsyncThunkConfig = {},
+> = {
+  pending?: CaseReducer<
+    State,
+    ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['pending']>
+  >
+  rejected?: CaseReducer<
+    State,
+    ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected']>
+  >
+  fulfilled?: CaseReducer<
+    State,
+    ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['fulfilled']>
+  >
+  settled?: CaseReducer<
+    State,
+    ReturnType<
+      AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']
+    >
+  >
+  options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>
+}
+
+type AsyncThunkSliceReducerDefinition<
+  State,
+  ThunkArg extends any,
+  Returned = unknown,
+  ThunkApiConfig extends AsyncThunkConfig = {},
+> = AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig> &
+  ReducerDefinition<ReducerType.asyncThunk> & {
+    payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>
+  }
+
+/**
+ * Providing these as part of the config would cause circular types, so we disallow passing them
+ */
+type PreventCircular<ThunkApiConfig> = {
+  [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch'
+    ? never
+    : ThunkApiConfig[K]
+}
+
+interface AsyncThunkCreator<
+  State,
+  CurriedThunkApiConfig extends
+    PreventCircular<AsyncThunkConfig> = PreventCircular<AsyncThunkConfig>,
+> {
+  <Returned, ThunkArg = void>(
+    payloadCreator: AsyncThunkPayloadCreator<
+      Returned,
+      ThunkArg,
+      CurriedThunkApiConfig
+    >,
+    config?: AsyncThunkSliceReducerConfig<
+      State,
+      ThunkArg,
+      Returned,
+      CurriedThunkApiConfig
+    >,
+  ): AsyncThunkSliceReducerDefinition<
+    State,
+    ThunkArg,
+    Returned,
+    CurriedThunkApiConfig
+  >
+  <
+    Returned,
+    ThunkArg,
+    ThunkApiConfig extends PreventCircular<AsyncThunkConfig> = {},
+  >(
+    payloadCreator: AsyncThunkPayloadCreator<
+      Returned,
+      ThunkArg,
+      ThunkApiConfig
+    >,
+    config?: AsyncThunkSliceReducerConfig<
+      State,
+      ThunkArg,
+      Returned,
+      ThunkApiConfig
+    >,
+  ): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, ThunkApiConfig>
+  withTypes<
+    ThunkApiConfig extends PreventCircular<AsyncThunkConfig>,
+  >(): AsyncThunkCreator<
+    State,
+    OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>
+  >
+}
+
+export interface ReducerCreators<State> {
+  reducer(
+    caseReducer: CaseReducer<State, PayloadAction>,
+  ): CaseReducerDefinition<State, PayloadAction>
+  reducer<Payload>(
+    caseReducer: CaseReducer<State, PayloadAction<Payload>>,
+  ): CaseReducerDefinition<State, PayloadAction<Payload>>
+
+  asyncThunk: AsyncThunkCreator<State>
+
+  preparedReducer<Prepare extends PrepareAction<any>>(
+    prepare: Prepare,
+    reducer: CaseReducer<
+      State,
+      ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>
+    >,
+  ): {
+    _reducerDefinitionType: ReducerType.reducerWithPrepare
+    prepare: Prepare
+    reducer: CaseReducer<
+      State,
+      ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>
+    >
+  }
+}
+
+/**
+ * The type describing a slice's `reducers` option.
+ *
+ * @public
+ */
+export type SliceCaseReducers<State> =
+  | Record<string, ReducerDefinition>
+  | Record<
+      string,
+      | CaseReducer<State, PayloadAction<any>>
+      | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>
+    >
+
+/**
+ * The type describing a slice's `selectors` option.
+ */
+export type SliceSelectors<State> = {
+  [K: string]: (sliceState: State, ...args: any[]) => any
+}
+
+type SliceActionType<
+  SliceName extends string,
+  ActionName extends keyof any,
+> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string
+
+/**
+ * Derives the slice's `actions` property from the `reducers` options
+ *
+ * @public
+ */
+export type CaseReducerActions<
+  CaseReducers extends SliceCaseReducers<any>,
+  SliceName extends string,
+> = {
+  [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition
+    ? Definition extends { prepare: any }
+      ? ActionCreatorForCaseReducerWithPrepare<
+          Definition,
+          SliceActionType<SliceName, Type>
+        >
+      : Definition extends AsyncThunkSliceReducerDefinition<
+            any,
+            infer ThunkArg,
+            infer Returned,
+            infer ThunkApiConfig
+          >
+        ? AsyncThunk<Returned, ThunkArg, ThunkApiConfig>
+        : Definition extends { reducer: any }
+          ? ActionCreatorForCaseReducer<
+              Definition['reducer'],
+              SliceActionType<SliceName, Type>
+            >
+          : ActionCreatorForCaseReducer<
+              Definition,
+              SliceActionType<SliceName, Type>
+            >
+    : never
+}
+
+/**
+ * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`
+ *
+ * @internal
+ */
+type ActionCreatorForCaseReducerWithPrepare<
+  CR extends { prepare: any },
+  Type extends string,
+> = _ActionCreatorWithPreparedPayload<CR['prepare'], Type>
+
+/**
+ * Get a `PayloadActionCreator` type for a passed `CaseReducer`
+ *
+ * @internal
+ */
+type ActionCreatorForCaseReducer<CR, Type extends string> = CR extends (
+  state: any,
+  action: infer Action,
+) => any
+  ? Action extends { payload: infer P }
+    ? PayloadActionCreator<P, Type>
+    : ActionCreatorWithoutPayload<Type>
+  : ActionCreatorWithoutPayload<Type>
+
+/**
+ * Extracts the CaseReducers out of a `reducers` object, even if they are
+ * tested into a `CaseReducerWithPrepare`.
+ *
+ * @internal
+ */
+type SliceDefinedCaseReducers<CaseReducers extends SliceCaseReducers<any>> = {
+  [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition
+    ? Definition extends AsyncThunkSliceReducerDefinition<any, any, any>
+      ? Id<
+          Pick<
+            Required<Definition>,
+            'fulfilled' | 'rejected' | 'pending' | 'settled'
+          >
+        >
+      : Definition extends {
+            reducer: infer Reducer
+          }
+        ? Reducer
+        : Definition
+    : never
+}
+
+type RemappedSelector<S extends Selector, NewState> =
+  S extends Selector<any, infer R, infer P>
+    ? Selector<NewState, R, P> & { unwrapped: S }
+    : never
+
+/**
+ * Extracts the final selector type from the `selectors` object.
+ *
+ * Removes the `string` index signature from the default value.
+ */
+type SliceDefinedSelectors<
+  State,
+  Selectors extends SliceSelectors<State>,
+  RootState,
+> = {
+  [K in keyof Selectors as string extends K ? never : K]: RemappedSelector<
+    Selectors[K],
+    RootState
+  >
+}
+
+/**
+ * Used on a SliceCaseReducers object.
+ * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that
+ * the `reducer` and the `prepare` function use the same type of `payload`.
+ *
+ * Might do additional such checks in the future.
+ *
+ * This type is only ever useful if you want to write your own wrapper around
+ * `createSlice`. Please don't use it otherwise!
+ *
+ * @public
+ */
+export type ValidateSliceCaseReducers<
+  S,
+  ACR extends SliceCaseReducers<S>,
+> = ACR & {
+  [T in keyof ACR]: ACR[T] extends {
+    reducer(s: S, action?: infer A): any
+  }
+    ? {
+        prepare(...a: never[]): Omit<A, 'type'>
+      }
+    : {}
+}
+
+function getType(slice: string, actionKey: string): string {
+  return `${slice}/${actionKey}`
+}
+
+interface BuildCreateSliceConfig {
+  creators?: {
+    asyncThunk?: typeof asyncThunkCreator
+  }
+}
+
+export function buildCreateSlice({ creators }: BuildCreateSliceConfig = {}) {
+  const cAT = creators?.asyncThunk?.[asyncThunkSymbol]
+  return function createSlice<
+    State,
+    CaseReducers extends SliceCaseReducers<State>,
+    Name extends string,
+    Selectors extends SliceSelectors<State>,
+    ReducerPath extends string = Name,
+  >(
+    options: CreateSliceOptions<
+      State,
+      CaseReducers,
+      Name,
+      ReducerPath,
+      Selectors
+    >,
+  ): Slice<State, CaseReducers, Name, ReducerPath, Selectors> {
+    const { name, reducerPath = name as unknown as ReducerPath } = options
+    if (!name) {
+      throw new Error('`name` is a required option for createSlice')
+    }
+
+    if (
+      typeof process !== 'undefined' &&
+      process.env.NODE_ENV === 'development'
+    ) {
+      if (options.initialState === undefined) {
+        console.error(
+          'You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`',
+        )
+      }
+    }
+
+    const reducers =
+      (typeof options.reducers === 'function'
+        ? options.reducers(buildReducerCreators<State>())
+        : options.reducers) || {}
+
+    const reducerNames = Object.keys(reducers)
+
+    const context: ReducerHandlingContext<State> = {
+      sliceCaseReducersByName: {},
+      sliceCaseReducersByType: {},
+      actionCreators: {},
+      sliceMatchers: [],
+    }
+
+    const contextMethods: ReducerHandlingContextMethods<State> = {
+      addCase(
+        typeOrActionCreator: string | TypedActionCreator<any>,
+        reducer: CaseReducer<State>,
+      ) {
+        const type =
+          typeof typeOrActionCreator === 'string'
+            ? typeOrActionCreator
+            : typeOrActionCreator.type
+        if (!type) {
+          throw new Error(
+            '`context.addCase` cannot be called with an empty action type',
+          )
+        }
+        if (type in context.sliceCaseReducersByType) {
+          throw new Error(
+            '`context.addCase` cannot be called with two reducers for the same action type: ' +
+              type,
+          )
+        }
+        context.sliceCaseReducersByType[type] = reducer
+        return contextMethods
+      },
+      addMatcher(matcher, reducer) {
+        context.sliceMatchers.push({ matcher, reducer })
+        return contextMethods
+      },
+      exposeAction(name, actionCreator) {
+        context.actionCreators[name] = actionCreator
+        return contextMethods
+      },
+      exposeCaseReducer(name, reducer) {
+        context.sliceCaseReducersByName[name] = reducer
+        return contextMethods
+      },
+    }
+
+    reducerNames.forEach((reducerName) => {
+      const reducerDefinition = reducers[reducerName]
+      const reducerDetails: ReducerDetails = {
+        reducerName,
+        type: getType(name, reducerName),
+        createNotation: typeof options.reducers === 'function',
+      }
+      if (isAsyncThunkSliceReducerDefinition<State>(reducerDefinition)) {
+        handleThunkCaseReducerDefinition(
+          reducerDetails,
+          reducerDefinition,
+          contextMethods,
+          cAT,
+        )
+      } else {
+        handleNormalReducerDefinition<State>(
+          reducerDetails,
+          reducerDefinition as any,
+          contextMethods,
+        )
+      }
+    })
+
+    function buildReducer() {
+      if (process.env.NODE_ENV !== 'production') {
+        if (typeof options.extraReducers === 'object') {
+          throw new Error(
+            "The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice",
+          )
+        }
+      }
+      const [
+        extraReducers = {},
+        actionMatchers = [],
+        defaultCaseReducer = undefined,
+      ] =
+        typeof options.extraReducers === 'function'
+          ? executeReducerBuilderCallback(options.extraReducers)
+          : [options.extraReducers]
+
+      const finalCaseReducers = {
+        ...extraReducers,
+        ...context.sliceCaseReducersByType,
+      }
+
+      return createReducer(options.initialState, (builder) => {
+        for (let key in finalCaseReducers) {
+          builder.addCase(key, finalCaseReducers[key] as CaseReducer<any>)
+        }
+        for (let sM of context.sliceMatchers) {
+          builder.addMatcher(sM.matcher, sM.reducer)
+        }
+        for (let m of actionMatchers) {
+          builder.addMatcher(m.matcher, m.reducer)
+        }
+        if (defaultCaseReducer) {
+          builder.addDefaultCase(defaultCaseReducer)
+        }
+      })
+    }
+
+    const selectSelf = (state: State) => state
+
+    const injectedSelectorCache = new Map<
+      boolean,
+      WeakMap<
+        (rootState: any) => State | undefined,
+        Record<string, (rootState: any) => any>
+      >
+    >()
+
+    const injectedStateCache = new WeakMap<(rootState: any) => State, State>()
+
+    let _reducer: ReducerWithInitialState<State>
+
+    function reducer(state: State | undefined, action: UnknownAction) {
+      if (!_reducer) _reducer = buildReducer()
+
+      return _reducer(state, action)
+    }
+
+    function getInitialState() {
+      if (!_reducer) _reducer = buildReducer()
+
+      return _reducer.getInitialState()
+    }
+
+    function makeSelectorProps<CurrentReducerPath extends string = ReducerPath>(
+      reducerPath: CurrentReducerPath,
+      injected = false,
+    ): Pick<
+      Slice<State, CaseReducers, Name, CurrentReducerPath, Selectors>,
+      'getSelectors' | 'selectors' | 'selectSlice' | 'reducerPath'
+    > {
+      function selectSlice(state: { [K in CurrentReducerPath]: State }) {
+        let sliceState = state[reducerPath]
+        if (typeof sliceState === 'undefined') {
+          if (injected) {
+            sliceState = getOrInsertComputed(
+              injectedStateCache,
+              selectSlice,
+              getInitialState,
+            )
+          } else if (process.env.NODE_ENV !== 'production') {
+            throw new Error(
+              'selectSlice returned undefined for an uninjected slice reducer',
+            )
+          }
+        }
+        return sliceState
+      }
+
+      function getSelectors(
+        selectState: (rootState: any) => State = selectSelf,
+      ) {
+        const selectorCache = getOrInsertComputed(
+          injectedSelectorCache,
+          injected,
+          () => new WeakMap(),
+        )
+
+        return getOrInsertComputed(selectorCache, selectState, () => {
+          const map: Record<string, Selector<any, any>> = {}
+          for (const [name, selector] of Object.entries(
+            options.selectors ?? {},
+          )) {
+            map[name] = wrapSelector(
+              selector,
+              selectState,
+              () =>
+                getOrInsertComputed(
+                  injectedStateCache,
+                  selectState,
+                  getInitialState,
+                ),
+              injected,
+            )
+          }
+          return map
+        }) as any
+      }
+      return {
+        reducerPath,
+        getSelectors,
+        get selectors() {
+          return getSelectors(selectSlice)
+        },
+        selectSlice,
+      }
+    }
+
+    const slice: Slice<State, CaseReducers, Name, ReducerPath, Selectors> = {
+      name,
+      reducer,
+      actions: context.actionCreators as any,
+      caseReducers: context.sliceCaseReducersByName as any,
+      getInitialState,
+      ...makeSelectorProps(reducerPath),
+      injectInto(injectable, { reducerPath: pathOpt, ...config } = {}) {
+        const newReducerPath = pathOpt ?? reducerPath
+        injectable.inject({ reducerPath: newReducerPath, reducer }, config)
+        return {
+          ...slice,
+          ...makeSelectorProps(newReducerPath, true),
+        } as any
+      },
+    }
+    return slice
+  }
+}
+
+function wrapSelector<State, NewState, S extends Selector<State>>(
+  selector: S,
+  selectState: Selector<NewState, State>,
+  getInitialState: () => State,
+  injected?: boolean,
+) {
+  function wrapper(rootState: NewState, ...args: any[]) {
+    let sliceState = selectState(rootState)
+    if (typeof sliceState === 'undefined') {
+      if (injected) {
+        sliceState = getInitialState()
+      } else if (process.env.NODE_ENV !== 'production') {
+        throw new Error(
+          'selectState returned undefined for an uninjected slice reducer',
+        )
+      }
+    }
+    return selector(sliceState, ...args)
+  }
+  wrapper.unwrapped = selector
+  return wrapper as RemappedSelector<S, NewState>
+}
+
+/**
+ * A function that accepts an initial state, an object full of reducer
+ * functions, and a "slice name", and automatically generates
+ * action creators and action types that correspond to the
+ * reducers and state.
+ *
+ * @public
+ */
+export const createSlice = /* @__PURE__ */ buildCreateSlice()
+
+interface ReducerHandlingContext<State> {
+  sliceCaseReducersByName: Record<
+    string,
+    | CaseReducer<State, any>
+    | Pick<
+        AsyncThunkSliceReducerDefinition<State, any, any, any>,
+        'fulfilled' | 'rejected' | 'pending' | 'settled'
+      >
+  >
+  sliceCaseReducersByType: Record<string, CaseReducer<State, any>>
+  sliceMatchers: ActionMatcherDescriptionCollection<State>
+  actionCreators: Record<string, Function>
+}
+
+interface ReducerHandlingContextMethods<State> {
+  /**
+   * Adds a case reducer to handle a single action type.
+   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.
+   * @param reducer - The actual case reducer function.
+   */
+  addCase<ActionCreator extends TypedActionCreator<string>>(
+    actionCreator: ActionCreator,
+    reducer: CaseReducer<State, ReturnType<ActionCreator>>,
+  ): ReducerHandlingContextMethods<State>
+  /**
+   * Adds a case reducer to handle a single action type.
+   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.
+   * @param reducer - The actual case reducer function.
+   */
+  addCase<Type extends string, A extends Action<Type>>(
+    type: Type,
+    reducer: CaseReducer<State, A>,
+  ): ReducerHandlingContextMethods<State>
+
+  /**
+   * Allows you to match incoming actions against your own filter function instead of only the `action.type` property.
+   * @remarks
+   * If multiple matcher reducers match, all of them will be executed in the order
+   * they were defined in - even if a case reducer already matched.
+   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.
+   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)
+   *   function
+   * @param reducer - The actual case reducer function.
+   *
+   */
+  addMatcher<A>(
+    matcher: TypeGuard<A>,
+    reducer: CaseReducer<State, A extends Action ? A : A & Action>,
+  ): ReducerHandlingContextMethods<State>
+  /**
+   * Add an action to be exposed under the final `slice.actions` key.
+   * @param name The key to be exposed as.
+   * @param actionCreator The action to expose.
+   * @example
+   * context.exposeAction("addPost", createAction<Post>("addPost"));
+   *
+   * export const { addPost } = slice.actions
+   *
+   * dispatch(addPost(post))
+   */
+  exposeAction(
+    name: string,
+    actionCreator: Function,
+  ): ReducerHandlingContextMethods<State>
+  /**
+   * Add a case reducer to be exposed under the final `slice.caseReducers` key.
+   * @param name The key to be exposed as.
+   * @param reducer The reducer to expose.
+   * @example
+   * context.exposeCaseReducer("addPost", (state, action: PayloadAction<Post>) => {
+   *   state.push(action.payload)
+   * })
+   *
+   * slice.caseReducers.addPost([], addPost(post))
+   */
+  exposeCaseReducer(
+    name: string,
+    reducer:
+      | CaseReducer<State, any>
+      | Pick<
+          AsyncThunkSliceReducerDefinition<State, any, any, any>,
+          'fulfilled' | 'rejected' | 'pending' | 'settled'
+        >,
+  ): ReducerHandlingContextMethods<State>
+}
+
+interface ReducerDetails {
+  /** The key the reducer was defined under */
+  reducerName: string
+  /** The predefined action type, i.e. `${slice.name}/${reducerName}` */
+  type: string
+  /** Whether create. notation was used when defining reducers */
+  createNotation: boolean
+}
+
+function buildReducerCreators<State>(): ReducerCreators<State> {
+  function asyncThunk(
+    payloadCreator: AsyncThunkPayloadCreator<any, any>,
+    config: AsyncThunkSliceReducerConfig<State, any>,
+  ): AsyncThunkSliceReducerDefinition<State, any> {
+    return {
+      _reducerDefinitionType: ReducerType.asyncThunk,
+      payloadCreator,
+      ...config,
+    }
+  }
+  asyncThunk.withTypes = () => asyncThunk
+  return {
+    reducer(caseReducer: CaseReducer<State, any>) {
+      return Object.assign(
+        {
+          // hack so the wrapping function has the same name as the original
+          // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original
+          [caseReducer.name](...args: Parameters<typeof caseReducer>) {
+            return caseReducer(...args)
+          },
+        }[caseReducer.name],
+        {
+          _reducerDefinitionType: ReducerType.reducer,
+        } as const,
+      )
+    },
+    preparedReducer(prepare, reducer) {
+      return {
+        _reducerDefinitionType: ReducerType.reducerWithPrepare,
+        prepare,
+        reducer,
+      }
+    },
+    asyncThunk: asyncThunk as any,
+  }
+}
+
+function handleNormalReducerDefinition<State>(
+  { type, reducerName, createNotation }: ReducerDetails,
+  maybeReducerWithPrepare:
+    | CaseReducer<State, { payload: any; type: string }>
+    | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>,
+  context: ReducerHandlingContextMethods<State>,
+) {
+  let caseReducer: CaseReducer<State, any>
+  let prepareCallback: PrepareAction<any> | undefined
+  if ('reducer' in maybeReducerWithPrepare) {
+    if (
+      createNotation &&
+      !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)
+    ) {
+      throw new Error(
+        'Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.',
+      )
+    }
+    caseReducer = maybeReducerWithPrepare.reducer
+    prepareCallback = maybeReducerWithPrepare.prepare
+  } else {
+    caseReducer = maybeReducerWithPrepare
+  }
+  context
+    .addCase(type, caseReducer)
+    .exposeCaseReducer(reducerName, caseReducer)
+    .exposeAction(
+      reducerName,
+      prepareCallback
+        ? createAction(type, prepareCallback)
+        : createAction(type),
+    )
+}
+
+function isAsyncThunkSliceReducerDefinition<State>(
+  reducerDefinition: any,
+): reducerDefinition is AsyncThunkSliceReducerDefinition<State, any, any, any> {
+  return reducerDefinition._reducerDefinitionType === ReducerType.asyncThunk
+}
+
+function isCaseReducerWithPrepareDefinition<State>(
+  reducerDefinition: any,
+): reducerDefinition is CaseReducerWithPrepareDefinition<State, any> {
+  return (
+    reducerDefinition._reducerDefinitionType === ReducerType.reducerWithPrepare
+  )
+}
+
+function handleThunkCaseReducerDefinition<State>(
+  { type, reducerName }: ReducerDetails,
+  reducerDefinition: AsyncThunkSliceReducerDefinition<State, any, any, any>,
+  context: ReducerHandlingContextMethods<State>,
+  cAT: typeof _createAsyncThunk | undefined,
+) {
+  if (!cAT) {
+    throw new Error(
+      'Cannot use `create.asyncThunk` in the built-in `createSlice`. ' +
+        'Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.',
+    )
+  }
+  const { payloadCreator, fulfilled, pending, rejected, settled, options } =
+    reducerDefinition
+  const thunk = cAT(type, payloadCreator, options as any)
+  context.exposeAction(reducerName, thunk)
+
+  if (fulfilled) {
+    context.addCase(thunk.fulfilled, fulfilled)
+  }
+  if (pending) {
+    context.addCase(thunk.pending, pending)
+  }
+  if (rejected) {
+    context.addCase(thunk.rejected, rejected)
+  }
+  if (settled) {
+    context.addMatcher(thunk.settled, settled)
+  }
+
+  context.exposeCaseReducer(reducerName, {
+    fulfilled: fulfilled || noop,
+    pending: pending || noop,
+    rejected: rejected || noop,
+    settled: settled || noop,
+  })
+}
+
+function noop() {}
Index: node_modules/@reduxjs/toolkit/src/devtoolsExtension.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/devtoolsExtension.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/devtoolsExtension.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,241 @@
+import type { Action, ActionCreator, StoreEnhancer } from 'redux'
+import { compose } from 'redux'
+
+/**
+ * @public
+ */
+export interface DevToolsEnhancerOptions {
+  /**
+   * the instance name to be showed on the monitor page. Default value is `document.title`.
+   * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.
+   */
+  name?: string
+  /**
+   * action creators functions to be available in the Dispatcher.
+   */
+  actionCreators?: ActionCreator<any>[] | { [key: string]: ActionCreator<any> }
+  /**
+   * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.
+   * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.
+   * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).
+   *
+   * @default 500 ms.
+   */
+  latency?: number
+  /**
+   * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.
+   *
+   * @default 50
+   */
+  maxAge?: number
+  /**
+   * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you
+   * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`
+   * functions.
+   */
+  serialize?:
+    | boolean
+    | {
+        /**
+         * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).
+         * - `false` - will handle also circular references.
+         * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.
+         * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.
+         *   For each of them you can indicate if to include (by setting as `true`).
+         *   For `function` key you can also specify a custom function which handles serialization.
+         *   See [`jsan`](https://github.com/kolodny/jsan) for more details.
+         */
+        options?:
+          | undefined
+          | boolean
+          | {
+              date?: true
+              regex?: true
+              undefined?: true
+              error?: true
+              symbol?: true
+              map?: true
+              set?: true
+              function?: true | ((fn: (...args: any[]) => any) => string)
+            }
+        /**
+         * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.
+         * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)
+         * key. So you can deserialize it back while importing or persisting data.
+         * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):
+         */
+        replacer?: (key: string, value: unknown) => any
+        /**
+         * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)
+         * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)
+         * as an example on how to serialize special data types and get them back.
+         */
+        reviver?: (key: string, value: unknown) => any
+        /**
+         * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).
+         * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.
+         * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.
+         */
+        immutable?: any
+        /**
+         * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...
+         */
+        refs?: any
+      }
+  /**
+   * function which takes `action` object and id number as arguments, and should return `action` object back.
+   */
+  actionSanitizer?: <A extends Action>(action: A, id: number) => A
+  /**
+   * function which takes `state` object and index as arguments, and should return `state` object back.
+   */
+  stateSanitizer?: <S>(state: S, index: number) => S
+  /**
+   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).
+   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.
+   */
+  actionsDenylist?: string | string[]
+  /**
+   * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).
+   * If `actionsAllowlist` specified, `actionsDenylist` is ignored.
+   */
+  actionsAllowlist?: string | string[]
+  /**
+   * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.
+   * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.
+   */
+  predicate?: <S, A extends Action>(state: S, action: A) => boolean
+  /**
+   * if specified as `false`, it will not record the changes till clicking on `Start recording` button.
+   * Available only for Redux enhancer, for others use `autoPause`.
+   *
+   * @default true
+   */
+  shouldRecordChanges?: boolean
+  /**
+   * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.
+   * If not specified, will commit when paused. Available only for Redux enhancer.
+   *
+   * @default "@@PAUSED""
+   */
+  pauseActionType?: string
+  /**
+   * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.
+   * Not available for Redux enhancer (as it already does it but storing the data to be sent).
+   *
+   * @default false
+   */
+  autoPause?: boolean
+  /**
+   * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.
+   * Available only for Redux enhancer.
+   *
+   * @default false
+   */
+  shouldStartLocked?: boolean
+  /**
+   * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.
+   *
+   * @default true
+   */
+  shouldHotReload?: boolean
+  /**
+   * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.
+   *
+   * @default false
+   */
+  shouldCatchErrors?: boolean
+  /**
+   * If you want to restrict the extension, specify the features you allow.
+   * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.
+   * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.
+   * Otherwise, you'll get/set the data right from the monitor part.
+   */
+  features?: {
+    /**
+     * start/pause recording of dispatched actions
+     */
+    pause?: boolean
+    /**
+     * lock/unlock dispatching actions and side effects
+     */
+    lock?: boolean
+    /**
+     * persist states on page reloading
+     */
+    persist?: boolean
+    /**
+     * export history of actions in a file
+     */
+    export?: boolean | 'custom'
+    /**
+     * import history of actions from a file
+     */
+    import?: boolean | 'custom'
+    /**
+     * jump back and forth (time travelling)
+     */
+    jump?: boolean
+    /**
+     * skip (cancel) actions
+     */
+    skip?: boolean
+    /**
+     * drag and drop actions in the history list
+     */
+    reorder?: boolean
+    /**
+     * dispatch custom actions or action creators
+     */
+    dispatch?: boolean
+    /**
+     * generate tests for the selected actions
+     */
+    test?: boolean
+  }
+  /**
+   * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.
+   * Defaults to false.
+   */
+  trace?: boolean | (<A extends Action>(action: A) => string)
+  /**
+   * The maximum number of stack trace entries to record per action. Defaults to 10.
+   */
+  traceLimit?: number
+}
+
+type Compose = typeof compose
+
+interface ComposeWithDevTools {
+  (options: DevToolsEnhancerOptions): Compose
+  <StoreExt extends {}>(
+    ...funcs: StoreEnhancer<StoreExt>[]
+  ): StoreEnhancer<StoreExt>
+}
+
+/**
+ * @public
+ */
+export const composeWithDevTools: ComposeWithDevTools =
+  typeof window !== 'undefined' &&
+  (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+    ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+    : function () {
+        if (arguments.length === 0) return undefined
+        if (typeof arguments[0] === 'object') return compose
+        return compose.apply(null, arguments as any as Function[])
+      }
+
+/**
+ * @public
+ */
+export const devToolsEnhancer: {
+  (options: DevToolsEnhancerOptions): StoreEnhancer<any>
+} =
+  typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__
+    ? (window as any).__REDUX_DEVTOOLS_EXTENSION__
+    : function () {
+        return function (noop) {
+          return noop
+        }
+      }
Index: node_modules/@reduxjs/toolkit/src/dynamicMiddleware/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/dynamicMiddleware/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/dynamicMiddleware/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,93 @@
+import type { Dispatch, Middleware, UnknownAction } from 'redux'
+import { compose } from 'redux'
+import { createAction } from '../createAction'
+import { isAllOf } from '../matchers'
+import { nanoid } from '../nanoid'
+import { getOrInsertComputed } from '../utils'
+import type {
+  AddMiddleware,
+  DynamicMiddleware,
+  DynamicMiddlewareInstance,
+  MiddlewareEntry,
+  WithMiddleware,
+} from './types'
+export type {
+  DynamicMiddlewareInstance,
+  GetDispatchType as GetDispatch,
+  MiddlewareApiConfig,
+} from './types'
+
+const createMiddlewareEntry = <
+  State = any,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+>(
+  middleware: Middleware<any, State, DispatchType>,
+): MiddlewareEntry<State, DispatchType> => ({
+  middleware,
+  applied: new Map(),
+})
+
+const matchInstance =
+  (instanceId: string) =>
+  (action: any): action is { meta: { instanceId: string } } =>
+    action?.meta?.instanceId === instanceId
+
+export const createDynamicMiddleware = <
+  State = any,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+>(): DynamicMiddlewareInstance<State, DispatchType> => {
+  const instanceId = nanoid()
+  const middlewareMap = new Map<
+    Middleware<any, State, DispatchType>,
+    MiddlewareEntry<State, DispatchType>
+  >()
+
+  const withMiddleware = Object.assign(
+    createAction(
+      'dynamicMiddleware/add',
+      (...middlewares: Middleware<any, State, DispatchType>[]) => ({
+        payload: middlewares,
+        meta: {
+          instanceId,
+        },
+      }),
+    ),
+    { withTypes: () => withMiddleware },
+  ) as WithMiddleware<State, DispatchType>
+
+  const addMiddleware = Object.assign(
+    function addMiddleware(
+      ...middlewares: Middleware<any, State, DispatchType>[]
+    ) {
+      middlewares.forEach((middleware) => {
+        getOrInsertComputed(middlewareMap, middleware, createMiddlewareEntry)
+      })
+    },
+    { withTypes: () => addMiddleware },
+  ) as AddMiddleware<State, DispatchType>
+
+  const getFinalMiddleware: Middleware<{}, State, DispatchType> = (api) => {
+    const appliedMiddleware = Array.from(middlewareMap.values()).map((entry) =>
+      getOrInsertComputed(entry.applied, api, entry.middleware),
+    )
+    return compose(...appliedMiddleware)
+  }
+
+  const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId))
+
+  const middleware: DynamicMiddleware<State, DispatchType> =
+    (api) => (next) => (action) => {
+      if (isWithMiddleware(action)) {
+        addMiddleware(...action.payload)
+        return api.dispatch
+      }
+      return getFinalMiddleware(api)(next)(action)
+    }
+
+  return {
+    middleware,
+    addMiddleware,
+    withMiddleware,
+    instanceId,
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/dynamicMiddleware/react/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/dynamicMiddleware/react/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/dynamicMiddleware/react/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,101 @@
+import type {
+  DynamicMiddlewareInstance,
+  GetDispatch,
+  GetState,
+  MiddlewareApiConfig,
+  TSHelpersExtractDispatchExtensions,
+} from '@reduxjs/toolkit'
+import { createDynamicMiddleware as cDM } from '@reduxjs/toolkit'
+import type { Context } from 'react'
+import type { ReactReduxContextValue } from 'react-redux'
+import {
+  createDispatchHook,
+  ReactReduxContext,
+  useDispatch as useDefaultDispatch,
+} from 'react-redux'
+import type { Action, Dispatch, Middleware, UnknownAction } from 'redux'
+
+export type UseDispatchWithMiddlewareHook<
+  Middlewares extends Middleware<any, State, DispatchType>[] = [],
+  State = any,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+> = () => TSHelpersExtractDispatchExtensions<Middlewares> & DispatchType
+
+export type CreateDispatchWithMiddlewareHook<
+  State = any,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+> = {
+  <
+    Middlewares extends [
+      Middleware<any, State, DispatchType>,
+      ...Middleware<any, State, DispatchType>[],
+    ],
+  >(
+    ...middlewares: Middlewares
+  ): UseDispatchWithMiddlewareHook<Middlewares, State, DispatchType>
+  withTypes<
+    MiddlewareConfig extends MiddlewareApiConfig,
+  >(): CreateDispatchWithMiddlewareHook<
+    GetState<MiddlewareConfig>,
+    GetDispatch<MiddlewareConfig>
+  >
+}
+
+type ActionFromDispatch<DispatchType extends Dispatch<Action>> =
+  DispatchType extends Dispatch<infer Action> ? Action : never
+
+type ReactDynamicMiddlewareInstance<
+  State = any,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+> = DynamicMiddlewareInstance<State, DispatchType> & {
+  createDispatchWithMiddlewareHookFactory: (
+    context?: Context<ReactReduxContextValue<
+      State,
+      ActionFromDispatch<DispatchType>
+    > | null>,
+  ) => CreateDispatchWithMiddlewareHook<State, DispatchType>
+  createDispatchWithMiddlewareHook: CreateDispatchWithMiddlewareHook<
+    State,
+    DispatchType
+  >
+}
+
+export const createDynamicMiddleware = <
+  State = any,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+>(): ReactDynamicMiddlewareInstance<State, DispatchType> => {
+  const instance = cDM<State, DispatchType>()
+  const createDispatchWithMiddlewareHookFactory = (
+    // @ts-ignore
+    context: Context<ReactReduxContextValue<
+      State,
+      ActionFromDispatch<DispatchType>
+    > | null> = ReactReduxContext,
+  ) => {
+    const useDispatch =
+      context === ReactReduxContext
+        ? useDefaultDispatch
+        : createDispatchHook(context)
+    function createDispatchWithMiddlewareHook<
+      Middlewares extends Middleware<any, State, DispatchType>[],
+    >(...middlewares: Middlewares) {
+      instance.addMiddleware(...middlewares)
+      return useDispatch
+    }
+    createDispatchWithMiddlewareHook.withTypes = () =>
+      createDispatchWithMiddlewareHook
+    return createDispatchWithMiddlewareHook as CreateDispatchWithMiddlewareHook<
+      State,
+      DispatchType
+    >
+  }
+
+  const createDispatchWithMiddlewareHook =
+    createDispatchWithMiddlewareHookFactory()
+
+  return {
+    ...instance,
+    createDispatchWithMiddlewareHookFactory,
+    createDispatchWithMiddlewareHook,
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/index.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/index.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/index.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,95 @@
+import type { Action, Middleware, UnknownAction } from 'redux'
+import type { ThunkDispatch } from 'redux-thunk'
+import { configureStore } from '../../configureStore'
+import { createDynamicMiddleware } from '../index'
+
+const untypedInstance = createDynamicMiddleware()
+
+interface AppDispatch extends ThunkDispatch<number, undefined, UnknownAction> {
+  (n: 1): 1
+}
+
+const typedInstance = createDynamicMiddleware<number, AppDispatch>()
+
+declare const staticMiddleware: Middleware<(n: 1) => 1>
+
+const store = configureStore({
+  reducer: () => 0,
+  middleware: (gDM) =>
+    gDM().prepend(typedInstance.middleware).concat(staticMiddleware),
+})
+
+declare const compatibleMiddleware: Middleware<{}, number, AppDispatch>
+declare const incompatibleMiddleware: Middleware<{}, string, AppDispatch>
+
+declare const addedMiddleware: Middleware<(n: 2) => 2>
+
+describe('type tests', () => {
+  test('instance typed at creation ensures middleware compatibility with store', () => {
+    const store = configureStore({
+      reducer: () => '',
+      // @ts-expect-error
+      middleware: (gDM) => gDM().prepend(typedInstance.middleware),
+    })
+  })
+
+  test('instance typed at creation enforces correct middleware type', () => {
+    typedInstance.addMiddleware(
+      compatibleMiddleware,
+      // @ts-expect-error
+      incompatibleMiddleware,
+    )
+
+    const dispatch = store.dispatch(
+      typedInstance.withMiddleware(
+        compatibleMiddleware,
+        // @ts-expect-error
+        incompatibleMiddleware,
+      ),
+    )
+  })
+
+  test('withTypes() enforces correct middleware type', () => {
+    const addMiddleware = untypedInstance.addMiddleware.withTypes<{
+      state: number
+      dispatch: AppDispatch
+    }>()
+
+    addMiddleware(
+      compatibleMiddleware,
+      // @ts-expect-error
+      incompatibleMiddleware,
+    )
+
+    const withMiddleware = untypedInstance.withMiddleware.withTypes<{
+      state: number
+      dispatch: AppDispatch
+    }>()
+
+    const dispatch = store.dispatch(
+      withMiddleware(
+        compatibleMiddleware,
+        // @ts-expect-error
+        incompatibleMiddleware,
+      ),
+    )
+  })
+
+  test('withMiddleware returns typed dispatch, with any applicable extensions', () => {
+    const dispatch = store.dispatch(
+      typedInstance.withMiddleware(addedMiddleware),
+    )
+
+    // standard
+    expectTypeOf(dispatch({ type: 'foo' })).toEqualTypeOf<Action<string>>()
+
+    // thunk
+    expectTypeOf(dispatch(() => 'foo')).toBeString()
+
+    // static
+    expectTypeOf(dispatch(1)).toEqualTypeOf<1>()
+
+    // added
+    expectTypeOf(dispatch(2)).toEqualTypeOf<2>()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/index.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/index.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/index.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+import type { Middleware } from 'redux'
+import { createDynamicMiddleware } from '../index'
+import { configureStore } from '../../configureStore'
+import type { BaseActionCreator, PayloadAction } from '../../createAction'
+import { createAction } from '../../createAction'
+import { isAllOf } from '../../matchers'
+
+const probeType = 'probeableMW/probe'
+
+export interface ProbeMiddleware
+  extends BaseActionCreator<number, typeof probeType> {
+  <Id extends number>(id: Id): PayloadAction<Id, typeof probeType>
+}
+
+export const probeMiddleware = createAction(probeType) as ProbeMiddleware
+
+const matchId =
+  <Id extends number>(id: Id) =>
+  (action: any): action is PayloadAction<Id> =>
+    action.payload === id
+
+export const makeProbeableMiddleware = <Id extends number>(
+  id: Id,
+): Middleware<{
+  (action: PayloadAction<Id, typeof probeType>): Id
+}> => {
+  const isMiddlewareAction = isAllOf(probeMiddleware, matchId(id))
+  return (api) => (next) => (action) => {
+    if (isMiddlewareAction(action)) {
+      return id
+    }
+    return next(action)
+  }
+}
+
+const staticMiddleware = makeProbeableMiddleware(1)
+
+describe('createDynamicMiddleware', () => {
+  it('allows injecting middleware after store instantiation', () => {
+    const dynamicInstance = createDynamicMiddleware()
+    const store = configureStore({
+      reducer: () => 0,
+      middleware: (gDM) =>
+        gDM().prepend(dynamicInstance.middleware).concat(staticMiddleware),
+    })
+    // normal, pre-inject
+    expect(store.dispatch(probeMiddleware(2))).toEqual(probeMiddleware(2))
+    // static
+    expect(store.dispatch(probeMiddleware(1))).toBe(1)
+
+    // inject
+    dynamicInstance.addMiddleware(makeProbeableMiddleware(2))
+
+    // injected
+    expect(store.dispatch(probeMiddleware(2))).toBe(2)
+  })
+  it('returns dispatch when withMiddleware is dispatched', () => {
+    const dynamicInstance = createDynamicMiddleware()
+    const store = configureStore({
+      reducer: () => 0,
+      middleware: (gDM) => gDM().prepend(dynamicInstance.middleware),
+    })
+
+    // normal, pre-inject
+    expect(store.dispatch(probeMiddleware(2))).toEqual(probeMiddleware(2))
+
+    const dispatch = store.dispatch(
+      dynamicInstance.withMiddleware(makeProbeableMiddleware(2)),
+    )
+    expect(dispatch).toEqual(expect.any(Function))
+
+    expect(dispatch(probeMiddleware(2))).toBe(2)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/react.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/react.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/react.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,81 @@
+import type { Context } from 'react'
+import type { ReactReduxContextValue } from 'react-redux'
+import type { Action, Middleware, UnknownAction } from 'redux'
+import type { ThunkDispatch } from 'redux-thunk'
+import { createDynamicMiddleware } from '../react'
+
+interface AppDispatch extends ThunkDispatch<number, undefined, UnknownAction> {
+  (n: 1): 1
+}
+
+const untypedInstance = createDynamicMiddleware()
+
+const typedInstance = createDynamicMiddleware<number, AppDispatch>()
+
+declare const compatibleMiddleware: Middleware<{}, number, AppDispatch>
+declare const incompatibleMiddleware: Middleware<{}, string, AppDispatch>
+
+declare const customContext: Context<ReactReduxContextValue | null>
+
+declare const addedMiddleware: Middleware<(n: 2) => 2>
+
+describe('type tests', () => {
+  test('instance typed at creation enforces correct middleware type', () => {
+    const useDispatch = typedInstance.createDispatchWithMiddlewareHook(
+      compatibleMiddleware,
+      // @ts-expect-error
+      incompatibleMiddleware,
+    )
+
+    const createDispatchWithMiddlewareHook =
+      typedInstance.createDispatchWithMiddlewareHookFactory(customContext)
+    const useDispatchWithContext = createDispatchWithMiddlewareHook(
+      compatibleMiddleware,
+      // @ts-expect-error
+      incompatibleMiddleware,
+    )
+  })
+
+  test('withTypes() enforces correct middleware type', () => {
+    const createDispatchWithMiddlewareHook =
+      untypedInstance.createDispatchWithMiddlewareHook.withTypes<{
+        state: number
+        dispatch: AppDispatch
+      }>()
+    const useDispatch = createDispatchWithMiddlewareHook(
+      compatibleMiddleware,
+      // @ts-expect-error
+      incompatibleMiddleware,
+    )
+
+    const createCustomDispatchWithMiddlewareHook = untypedInstance
+      .createDispatchWithMiddlewareHookFactory(customContext)
+      .withTypes<{
+        state: number
+        dispatch: AppDispatch
+      }>()
+    const useCustomDispatch = createCustomDispatchWithMiddlewareHook(
+      compatibleMiddleware,
+      // @ts-expect-error
+      incompatibleMiddleware,
+    )
+  })
+
+  test('useDispatchWithMW returns typed dispatch, with any applicable extensions', () => {
+    const useDispatchWithMW =
+      typedInstance.createDispatchWithMiddlewareHook(addedMiddleware)
+    const dispatch = useDispatchWithMW()
+
+    // standard
+    expectTypeOf(dispatch({ type: 'foo' })).toEqualTypeOf<Action<string>>()
+
+    // thunk
+    expectTypeOf(dispatch(() => 'foo')).toBeString()
+
+    // static
+    expectTypeOf(dispatch(1)).toEqualTypeOf<1>()
+
+    // added
+    expectTypeOf(dispatch(2)).toEqualTypeOf<2>()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/react.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/react.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/dynamicMiddleware/tests/react.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,101 @@
+import * as React from 'react'
+import { createDynamicMiddleware } from '../react'
+import { configureStore } from '../../configureStore'
+import { makeProbeableMiddleware, probeMiddleware } from './index.test'
+import { render } from '@testing-library/react'
+import type { Dispatch } from 'redux'
+import type { ReactReduxContextValue } from 'react-redux'
+import { Provider } from 'react-redux'
+
+const staticMiddleware = makeProbeableMiddleware(1)
+
+describe('createReactDynamicMiddleware', () => {
+  describe('createDispatchWithMiddlewareHook', () => {
+    it('injects middleware upon creation', () => {
+      const dynamicInstance = createDynamicMiddleware()
+      const store = configureStore({
+        reducer: () => 0,
+        middleware: (gDM) =>
+          gDM().prepend(dynamicInstance.middleware).concat(staticMiddleware),
+      })
+      // normal, pre-inject
+      expect(store.dispatch(probeMiddleware(2))).toEqual(probeMiddleware(2))
+      // static
+      expect(store.dispatch(probeMiddleware(1))).toBe(1)
+
+      const useDispatch = dynamicInstance.createDispatchWithMiddlewareHook(
+        makeProbeableMiddleware(2),
+      )
+
+      // injected
+      expect(store.dispatch(probeMiddleware(2))).toBe(2)
+    })
+
+    it('returns dispatch', () => {
+      const dynamicInstance = createDynamicMiddleware()
+      const store = configureStore({
+        reducer: () => 0,
+        middleware: (gDM) =>
+          gDM().prepend(dynamicInstance.middleware).concat(staticMiddleware),
+      })
+
+      const useDispatch = dynamicInstance.createDispatchWithMiddlewareHook(
+        makeProbeableMiddleware(2),
+      )
+
+      let dispatch: Dispatch | undefined
+      function Component() {
+        dispatch = useDispatch()
+
+        return null
+      }
+      render(<Component />, {
+        wrapper: ({ children }) => (
+          <Provider store={store}>{children}</Provider>
+        ),
+      })
+      expect(dispatch).toBe(store.dispatch)
+    })
+  })
+  describe('createDispatchWithMiddlewareHookFactory', () => {
+    it('returns the correct store dispatch', () => {
+      const dynamicInstance = createDynamicMiddleware()
+      const store = configureStore({
+        reducer: () => 0,
+        middleware: (gDM) =>
+          gDM().prepend(dynamicInstance.middleware).concat(staticMiddleware),
+      })
+      const store2 = configureStore({
+        reducer: () => '',
+        middleware: (gDM) =>
+          gDM().prepend(dynamicInstance.middleware).concat(staticMiddleware),
+      })
+
+      const context = React.createContext<ReactReduxContextValue | null>(null)
+
+      const createDispatchWithMiddlewareHook =
+        dynamicInstance.createDispatchWithMiddlewareHookFactory(context)
+
+      const useDispatch = createDispatchWithMiddlewareHook(
+        makeProbeableMiddleware(2),
+      )
+
+      let dispatch: Dispatch | undefined
+      function Component() {
+        dispatch = useDispatch()
+
+        return null
+      }
+      render(<Component />, {
+        wrapper: ({ children }) => (
+          <Provider store={store}>
+            <Provider context={context} store={store2}>
+              {children}
+            </Provider>
+          </Provider>
+        ),
+      })
+      expect(dispatch).toBe(store2.dispatch)
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/dynamicMiddleware/types.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/dynamicMiddleware/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/dynamicMiddleware/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+import type { Dispatch, Middleware, MiddlewareAPI, UnknownAction } from 'redux'
+import type { BaseActionCreator, PayloadAction } from '../createAction'
+import type { GetState } from '../createAsyncThunk'
+import type { ExtractDispatchExtensions, FallbackIfUnknown } from '../tsHelpers'
+
+export type GetMiddlewareApi<MiddlewareApiConfig> = MiddlewareAPI<
+  GetDispatchType<MiddlewareApiConfig>,
+  GetState<MiddlewareApiConfig>
+>
+
+export type MiddlewareApiConfig = {
+  state?: unknown
+  dispatch?: Dispatch
+}
+
+// TODO: consolidate with cAT helpers?
+export type GetDispatchType<MiddlewareApiConfig> = MiddlewareApiConfig extends {
+  dispatch: infer DispatchType
+}
+  ? FallbackIfUnknown<DispatchType, Dispatch>
+  : Dispatch
+
+export type AddMiddleware<
+  State = any,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+> = {
+  (...middlewares: Middleware<any, State, DispatchType>[]): void
+  withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): AddMiddleware<
+    GetState<MiddlewareConfig>,
+    GetDispatchType<MiddlewareConfig>
+  >
+}
+
+export type WithMiddleware<
+  State = any,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+> = BaseActionCreator<
+  Middleware<any, State, DispatchType>[],
+  'dynamicMiddleware/add',
+  { instanceId: string }
+> & {
+  <Middlewares extends Middleware<any, State, DispatchType>[]>(
+    ...middlewares: Middlewares
+  ): PayloadAction<Middlewares, 'dynamicMiddleware/add', { instanceId: string }>
+  withTypes<MiddlewareConfig extends MiddlewareApiConfig>(): WithMiddleware<
+    GetState<MiddlewareConfig>,
+    GetDispatchType<MiddlewareConfig>
+  >
+}
+
+export interface DynamicDispatch {
+  // return a version of dispatch that knows about middleware
+  <Middlewares extends Middleware<any>[]>(
+    action: PayloadAction<Middlewares, 'dynamicMiddleware/add'>,
+  ): ExtractDispatchExtensions<Middlewares> & this
+}
+
+export type MiddlewareEntry<
+  State = unknown,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+> = {
+  middleware: Middleware<any, State, DispatchType>
+  applied: Map<
+    MiddlewareAPI<DispatchType, State>,
+    ReturnType<Middleware<any, State, DispatchType>>
+  >
+}
+
+export type DynamicMiddleware<
+  State = unknown,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+> = Middleware<DynamicDispatch, State, DispatchType>
+
+export type DynamicMiddlewareInstance<
+  State = unknown,
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+> = {
+  middleware: DynamicMiddleware<State, DispatchType>
+  addMiddleware: AddMiddleware<State, DispatchType>
+  withMiddleware: WithMiddleware<State, DispatchType>
+  instanceId: string
+}
Index: node_modules/@reduxjs/toolkit/src/entities/create_adapter.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/create_adapter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/create_adapter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+import type { EntityAdapter, EntityId, EntityAdapterOptions } from './models'
+import { createInitialStateFactory } from './entity_state'
+import { createSelectorsFactory } from './state_selectors'
+import { createSortedStateAdapter } from './sorted_state_adapter'
+import { createUnsortedStateAdapter } from './unsorted_state_adapter'
+import type { WithRequiredProp } from '../tsHelpers'
+
+export function createEntityAdapter<T, Id extends EntityId>(
+  options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>,
+): EntityAdapter<T, Id>
+
+export function createEntityAdapter<T extends { id: EntityId }>(
+  options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>,
+): EntityAdapter<T, T['id']>
+
+/**
+ *
+ * @param options
+ *
+ * @public
+ */
+export function createEntityAdapter<T>(
+  options: EntityAdapterOptions<T, EntityId> = {},
+): EntityAdapter<T, EntityId> {
+  const {
+    selectId,
+    sortComparer,
+  }: Required<EntityAdapterOptions<T, EntityId>> = {
+    sortComparer: false,
+    selectId: (instance: any) => instance.id,
+    ...options,
+  }
+
+  const stateAdapter = sortComparer
+    ? createSortedStateAdapter(selectId, sortComparer)
+    : createUnsortedStateAdapter(selectId)
+  const stateFactory = createInitialStateFactory(stateAdapter)
+  const selectorsFactory = createSelectorsFactory<T, EntityId>()
+
+  return {
+    selectId,
+    sortComparer,
+    ...stateFactory,
+    ...selectorsFactory,
+    ...stateAdapter,
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/entities/entity_state.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/entity_state.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/entity_state.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+import type {
+  EntityId,
+  EntityState,
+  EntityStateAdapter,
+  EntityStateFactory,
+} from './models'
+
+export function getInitialEntityState<T, Id extends EntityId>(): EntityState<
+  T,
+  Id
+> {
+  return {
+    ids: [],
+    entities: {} as Record<Id, T>,
+  }
+}
+
+export function createInitialStateFactory<T, Id extends EntityId>(
+  stateAdapter: EntityStateAdapter<T, Id>,
+): EntityStateFactory<T, Id> {
+  function getInitialState(
+    state?: undefined,
+    entities?: readonly T[] | Record<Id, T>,
+  ): EntityState<T, Id>
+  function getInitialState<S extends object>(
+    additionalState: S,
+    entities?: readonly T[] | Record<Id, T>,
+  ): EntityState<T, Id> & S
+  function getInitialState(
+    additionalState: any = {},
+    entities?: readonly T[] | Record<Id, T>,
+  ): any {
+    const state = Object.assign(getInitialEntityState(), additionalState)
+    return entities ? stateAdapter.setAll(state, entities) : state
+  }
+
+  return { getInitialState }
+}
Index: node_modules/@reduxjs/toolkit/src/entities/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+export { createEntityAdapter } from './create_adapter'
+export type {
+  EntityState,
+  EntityAdapter,
+  Update,
+  IdSelector,
+  Comparer,
+} from './models'
Index: node_modules/@reduxjs/toolkit/src/entities/models.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/models.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/models.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,198 @@
+import type { Draft } from 'immer'
+import type { PayloadAction } from '../createAction'
+import type { CastAny, Id } from '../tsHelpers'
+import type { UncheckedIndexedAccess } from '../uncheckedindexed.js'
+import type { GetSelectorsOptions } from './state_selectors'
+
+/**
+ * @public
+ */
+export type EntityId = number | string
+
+/**
+ * @public
+ */
+export type Comparer<T> = (a: T, b: T) => number
+
+/**
+ * @public
+ */
+export type IdSelector<T, Id extends EntityId> = (model: T) => Id
+
+/**
+ * @public
+ */
+export type Update<T, Id extends EntityId> = { id: Id; changes: Partial<T> }
+
+/**
+ * @public
+ */
+export interface EntityState<T, Id extends EntityId> {
+  ids: Id[]
+  entities: Record<Id, T>
+}
+
+/**
+ * @public
+ */
+export interface EntityAdapterOptions<T, Id extends EntityId> {
+  selectId?: IdSelector<T, Id>
+  sortComparer?: false | Comparer<T>
+}
+
+export type PreventAny<S, T, Id extends EntityId> = CastAny<
+  S,
+  EntityState<T, Id>
+>
+
+export type DraftableEntityState<T, Id extends EntityId> =
+  | EntityState<T, Id>
+  | Draft<EntityState<T, Id>>
+
+/**
+ * @public
+ */
+export interface EntityStateAdapter<T, Id extends EntityId> {
+  addOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entity: T,
+  ): S
+  addOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    action: PayloadAction<T>,
+  ): S
+
+  addMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entities: readonly T[] | Record<Id, T>,
+  ): S
+  addMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entities: PayloadAction<readonly T[] | Record<Id, T>>,
+  ): S
+
+  setOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entity: T,
+  ): S
+  setOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    action: PayloadAction<T>,
+  ): S
+  setMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entities: readonly T[] | Record<Id, T>,
+  ): S
+  setMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entities: PayloadAction<readonly T[] | Record<Id, T>>,
+  ): S
+  setAll<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entities: readonly T[] | Record<Id, T>,
+  ): S
+  setAll<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entities: PayloadAction<readonly T[] | Record<Id, T>>,
+  ): S
+
+  removeOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    key: Id,
+  ): S
+  removeOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    key: PayloadAction<Id>,
+  ): S
+
+  removeMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    keys: readonly Id[],
+  ): S
+  removeMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    keys: PayloadAction<readonly Id[]>,
+  ): S
+
+  removeAll<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+  ): S
+
+  updateOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    update: Update<T, Id>,
+  ): S
+  updateOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    update: PayloadAction<Update<T, Id>>,
+  ): S
+
+  updateMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    updates: ReadonlyArray<Update<T, Id>>,
+  ): S
+  updateMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    updates: PayloadAction<ReadonlyArray<Update<T, Id>>>,
+  ): S
+
+  upsertOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entity: T,
+  ): S
+  upsertOne<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entity: PayloadAction<T>,
+  ): S
+
+  upsertMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entities: readonly T[] | Record<Id, T>,
+  ): S
+  upsertMany<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+    entities: PayloadAction<readonly T[] | Record<Id, T>>,
+  ): S
+}
+
+/**
+ * @public
+ */
+export interface EntitySelectors<T, V, IdType extends EntityId> {
+  selectIds: (state: V) => IdType[]
+  selectEntities: (state: V) => Record<IdType, T>
+  selectAll: (state: V) => T[]
+  selectTotal: (state: V) => number
+  selectById: (state: V, id: IdType) => Id<UncheckedIndexedAccess<T>>
+}
+
+/**
+ * @public
+ */
+export interface EntityStateFactory<T, Id extends EntityId> {
+  getInitialState(
+    state?: undefined,
+    entities?: Record<Id, T> | readonly T[],
+  ): EntityState<T, Id>
+  getInitialState<S extends object>(
+    state: S,
+    entities?: Record<Id, T> | readonly T[],
+  ): EntityState<T, Id> & S
+}
+
+/**
+ * @public
+ */
+export interface EntityAdapter<T, Id extends EntityId>
+  extends EntityStateAdapter<T, Id>,
+    EntityStateFactory<T, Id>,
+    Required<EntityAdapterOptions<T, Id>> {
+  getSelectors(
+    selectState?: undefined,
+    options?: GetSelectorsOptions,
+  ): EntitySelectors<T, EntityState<T, Id>, Id>
+  getSelectors<V>(
+    selectState: (state: V) => EntityState<T, Id>,
+    options?: GetSelectorsOptions,
+  ): EntitySelectors<T, V, Id>
+}
Index: node_modules/@reduxjs/toolkit/src/entities/sorted_state_adapter.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/sorted_state_adapter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/sorted_state_adapter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,256 @@
+import type {
+  IdSelector,
+  Comparer,
+  EntityStateAdapter,
+  Update,
+  EntityId,
+  DraftableEntityState,
+} from './models'
+import { createStateOperator } from './state_adapter'
+import { createUnsortedStateAdapter } from './unsorted_state_adapter'
+import {
+  selectIdValue,
+  ensureEntitiesArray,
+  splitAddedUpdatedEntities,
+  getCurrent,
+} from './utils'
+
+// Borrowed from Replay
+export function findInsertIndex<T>(
+  sortedItems: T[],
+  item: T,
+  comparisonFunction: Comparer<T>,
+): number {
+  let lowIndex = 0
+  let highIndex = sortedItems.length
+  while (lowIndex < highIndex) {
+    let middleIndex = (lowIndex + highIndex) >>> 1
+    const currentItem = sortedItems[middleIndex]
+    const res = comparisonFunction(item, currentItem)
+    if (res >= 0) {
+      lowIndex = middleIndex + 1
+    } else {
+      highIndex = middleIndex
+    }
+  }
+
+  return lowIndex
+}
+
+export function insert<T>(
+  sortedItems: T[],
+  item: T,
+  comparisonFunction: Comparer<T>,
+): T[] {
+  const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction)
+
+  sortedItems.splice(insertAtIndex, 0, item)
+
+  return sortedItems
+}
+
+export function createSortedStateAdapter<T, Id extends EntityId>(
+  selectId: IdSelector<T, Id>,
+  comparer: Comparer<T>,
+): EntityStateAdapter<T, Id> {
+  type R = DraftableEntityState<T, Id>
+
+  const { removeOne, removeMany, removeAll } =
+    createUnsortedStateAdapter(selectId)
+
+  function addOneMutably(entity: T, state: R): void {
+    return addManyMutably([entity], state)
+  }
+
+  function addManyMutably(
+    newEntities: readonly T[] | Record<Id, T>,
+    state: R,
+    existingIds?: Id[],
+  ): void {
+    newEntities = ensureEntitiesArray(newEntities)
+
+    const existingKeys = new Set<Id>(existingIds ?? getCurrent(state.ids))
+
+    const models = newEntities.filter(
+      (model) => !existingKeys.has(selectIdValue(model, selectId)),
+    )
+
+    if (models.length !== 0) {
+      mergeFunction(state, models)
+    }
+  }
+
+  function setOneMutably(entity: T, state: R): void {
+    return setManyMutably([entity], state)
+  }
+
+  function setManyMutably(
+    newEntities: readonly T[] | Record<Id, T>,
+    state: R,
+  ): void {
+    newEntities = ensureEntitiesArray(newEntities)
+    if (newEntities.length !== 0) {
+      for (const item of newEntities) {
+        delete (state.entities as Record<Id, T>)[selectId(item)]
+      }
+      mergeFunction(state, newEntities)
+    }
+  }
+
+  function setAllMutably(
+    newEntities: readonly T[] | Record<Id, T>,
+    state: R,
+  ): void {
+    newEntities = ensureEntitiesArray(newEntities)
+    state.entities = {} as Record<Id, T>
+    state.ids = []
+
+    addManyMutably(newEntities, state, [])
+  }
+
+  function updateOneMutably(update: Update<T, Id>, state: R): void {
+    return updateManyMutably([update], state)
+  }
+
+  function updateManyMutably(
+    updates: ReadonlyArray<Update<T, Id>>,
+    state: R,
+  ): void {
+    let appliedUpdates = false
+    let replacedIds = false
+
+    for (let update of updates) {
+      const entity: T | undefined = (state.entities as Record<Id, T>)[update.id]
+      if (!entity) {
+        continue
+      }
+
+      appliedUpdates = true
+
+      Object.assign(entity, update.changes)
+      const newId = selectId(entity)
+
+      if (update.id !== newId) {
+        // We do support the case where updates can change an item's ID.
+        // This makes things trickier - go ahead and swap the IDs in state now.
+        replacedIds = true
+        delete (state.entities as Record<Id, T>)[update.id]
+        const oldIndex = (state.ids as Id[]).indexOf(update.id)
+        state.ids[oldIndex] = newId
+        ;(state.entities as Record<Id, T>)[newId] = entity
+      }
+    }
+
+    if (appliedUpdates) {
+      mergeFunction(state, [], appliedUpdates, replacedIds)
+    }
+  }
+
+  function upsertOneMutably(entity: T, state: R): void {
+    return upsertManyMutably([entity], state)
+  }
+
+  function upsertManyMutably(
+    newEntities: readonly T[] | Record<Id, T>,
+    state: R,
+  ): void {
+    const [added, updated, existingIdsArray] = splitAddedUpdatedEntities<T, Id>(
+      newEntities,
+      selectId,
+      state,
+    )
+
+    if (added.length) {
+      addManyMutably(added, state, existingIdsArray)
+    }
+    if (updated.length) {
+      updateManyMutably(updated, state)
+    }
+  }
+
+  function areArraysEqual(a: readonly unknown[], b: readonly unknown[]) {
+    if (a.length !== b.length) {
+      return false
+    }
+
+    for (let i = 0; i < a.length; i++) {
+      if (a[i] === b[i]) {
+        continue
+      }
+      return false
+    }
+    return true
+  }
+
+  type MergeFunction = (
+    state: R,
+    addedItems: readonly T[],
+    appliedUpdates?: boolean,
+    replacedIds?: boolean,
+  ) => void
+
+  const mergeFunction: MergeFunction = (
+    state,
+    addedItems,
+    appliedUpdates,
+    replacedIds,
+  ) => {
+    const currentEntities = getCurrent(state.entities)
+    const currentIds = getCurrent(state.ids)
+
+    const stateEntities = state.entities as Record<Id, T>
+
+    let ids: Iterable<Id> = currentIds
+    if (replacedIds) {
+      ids = new Set(currentIds)
+    }
+
+    let sortedEntities: T[] = []
+    for (const id of ids) {
+      const entity = currentEntities[id]
+      if (entity) {
+        sortedEntities.push(entity)
+      }
+    }
+    const wasPreviouslyEmpty = sortedEntities.length === 0
+
+    // Insert/overwrite all new/updated
+    for (const item of addedItems) {
+      stateEntities[selectId(item)] = item
+
+      if (!wasPreviouslyEmpty) {
+        // Binary search insertion generally requires fewer comparisons
+        insert(sortedEntities, item, comparer)
+      }
+    }
+
+    if (wasPreviouslyEmpty) {
+      // All we have is the incoming values, sort them
+      sortedEntities = addedItems.slice().sort(comparer)
+    } else if (appliedUpdates) {
+      // We should have a _mostly_-sorted array already
+      sortedEntities.sort(comparer)
+    }
+
+    const newSortedIds = sortedEntities.map(selectId)
+
+    if (!areArraysEqual(currentIds, newSortedIds)) {
+      state.ids = newSortedIds
+    }
+  }
+
+  return {
+    removeOne,
+    removeMany,
+    removeAll,
+    addOne: createStateOperator(addOneMutably),
+    updateOne: createStateOperator(updateOneMutably),
+    upsertOne: createStateOperator(upsertOneMutably),
+    setOne: createStateOperator(setOneMutably),
+    setMany: createStateOperator(setManyMutably),
+    setAll: createStateOperator(setAllMutably),
+    addMany: createStateOperator(addManyMutably),
+    updateMany: createStateOperator(updateManyMutably),
+    upsertMany: createStateOperator(upsertManyMutably),
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/entities/state_adapter.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/state_adapter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/state_adapter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+import { produce as createNextState, isDraft } from 'immer'
+import type { Draft } from 'immer'
+import type { EntityId, DraftableEntityState, PreventAny } from './models'
+import type { PayloadAction } from '../createAction'
+import { isFSA } from '../createAction'
+
+export const isDraftTyped = isDraft as <T>(
+  value: T | Draft<T>,
+) => value is Draft<T>
+
+export function createSingleArgumentStateOperator<T, Id extends EntityId>(
+  mutator: (state: DraftableEntityState<T, Id>) => void,
+) {
+  const operator = createStateOperator(
+    (_: undefined, state: DraftableEntityState<T, Id>) => mutator(state),
+  )
+
+  return function operation<S extends DraftableEntityState<T, Id>>(
+    state: PreventAny<S, T, Id>,
+  ): S {
+    return operator(state as S, undefined)
+  }
+}
+
+export function createStateOperator<T, Id extends EntityId, R>(
+  mutator: (arg: R, state: DraftableEntityState<T, Id>) => void,
+) {
+  return function operation<S extends DraftableEntityState<T, Id>>(
+    state: S,
+    arg: R | PayloadAction<R>,
+  ): S {
+    function isPayloadActionArgument(
+      arg: R | PayloadAction<R>,
+    ): arg is PayloadAction<R> {
+      return isFSA(arg)
+    }
+
+    const runMutator = (draft: DraftableEntityState<T, Id>) => {
+      if (isPayloadActionArgument(arg)) {
+        mutator(arg.payload, draft)
+      } else {
+        mutator(arg, draft)
+      }
+    }
+
+    if (isDraftTyped<DraftableEntityState<T, Id>>(state)) {
+      // we must already be inside a `createNextState` call, likely because
+      // this is being wrapped in `createReducer` or `createSlice`.
+      // It's safe to just pass the draft to the mutator.
+      runMutator(state)
+
+      // since it's a draft, we'll just return it
+      return state
+    }
+
+    return createNextState(state, runMutator)
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/entities/state_selectors.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/state_selectors.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/state_selectors.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+import type { CreateSelectorFunction, Selector } from 'reselect'
+import { createDraftSafeSelector } from '../createDraftSafeSelector'
+import type { EntityId, EntitySelectors, EntityState } from './models'
+
+type AnyFunction = (...args: any) => any
+type AnyCreateSelectorFunction = CreateSelectorFunction<
+  <F extends AnyFunction>(f: F) => F,
+  <F extends AnyFunction>(f: F) => F
+>
+
+export type GetSelectorsOptions = {
+  createSelector?: AnyCreateSelectorFunction
+}
+
+export function createSelectorsFactory<T, Id extends EntityId>() {
+  function getSelectors(
+    selectState?: undefined,
+    options?: GetSelectorsOptions,
+  ): EntitySelectors<T, EntityState<T, Id>, Id>
+  function getSelectors<V>(
+    selectState: (state: V) => EntityState<T, Id>,
+    options?: GetSelectorsOptions,
+  ): EntitySelectors<T, V, Id>
+  function getSelectors<V>(
+    selectState?: (state: V) => EntityState<T, Id>,
+    options: GetSelectorsOptions = {},
+  ): EntitySelectors<T, any, Id> {
+    const {
+      createSelector = createDraftSafeSelector as AnyCreateSelectorFunction,
+    } = options
+
+    const selectIds = (state: EntityState<T, Id>) => state.ids
+
+    const selectEntities = (state: EntityState<T, Id>) => state.entities
+
+    const selectAll = createSelector(
+      selectIds,
+      selectEntities,
+      (ids, entities): T[] => ids.map((id) => entities[id]!),
+    )
+
+    const selectId = (_: unknown, id: Id) => id
+
+    const selectById = (entities: Record<Id, T>, id: Id) => entities[id]
+
+    const selectTotal = createSelector(selectIds, (ids) => ids.length)
+
+    if (!selectState) {
+      return {
+        selectIds,
+        selectEntities,
+        selectAll,
+        selectTotal,
+        selectById: createSelector(selectEntities, selectId, selectById),
+      }
+    }
+
+    const selectGlobalizedEntities = createSelector(
+      selectState as Selector<V, EntityState<T, Id>>,
+      selectEntities,
+    )
+
+    return {
+      selectIds: createSelector(selectState, selectIds),
+      selectEntities: selectGlobalizedEntities,
+      selectAll: createSelector(selectState, selectAll),
+      selectTotal: createSelector(selectState, selectTotal),
+      selectById: createSelector(
+        selectGlobalizedEntities,
+        selectId,
+        selectById,
+      ),
+    }
+  }
+
+  return { getSelectors }
+}
Index: node_modules/@reduxjs/toolkit/src/entities/tests/entity_slice_enhancer.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/tests/entity_slice_enhancer.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/tests/entity_slice_enhancer.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+import { createEntityAdapter, createSlice } from '../..'
+import type {
+  PayloadAction,
+  Slice,
+  SliceCaseReducers,
+  UnknownAction,
+} from '../..'
+import type { EntityId, EntityState, IdSelector } from '../models'
+import type { BookModel } from './fixtures/book'
+
+describe('Entity Slice Enhancer', () => {
+  let slice: Slice<EntityState<BookModel, BookModel['id']>>
+
+  beforeEach(() => {
+    const indieSlice = entitySliceEnhancer({
+      name: 'book',
+      selectId: (book: BookModel) => book.id,
+    })
+    slice = indieSlice
+  })
+
+  it('exposes oneAdded', () => {
+    const book = {
+      id: '0',
+      title: 'Der Steppenwolf',
+      author: 'Herman Hesse',
+    }
+    const action = slice.actions.oneAdded(book)
+    const oneAdded = slice.reducer(undefined, action as UnknownAction)
+    expect(oneAdded.entities['0']).toBe(book)
+  })
+})
+
+interface EntitySliceArgs<T, Id extends EntityId> {
+  name: string
+  selectId: IdSelector<T, Id>
+  modelReducer?: SliceCaseReducers<T>
+}
+
+function entitySliceEnhancer<T, Id extends EntityId>({
+  name,
+  selectId,
+  modelReducer,
+}: EntitySliceArgs<T, Id>) {
+  const modelAdapter = createEntityAdapter({
+    selectId,
+  })
+
+  return createSlice({
+    name,
+    initialState: modelAdapter.getInitialState(),
+    reducers: {
+      oneAdded(state, action: PayloadAction<T>) {
+        modelAdapter.addOne(state, action.payload)
+      },
+      ...modelReducer,
+    },
+  })
+}
Index: node_modules/@reduxjs/toolkit/src/entities/tests/entity_state.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/tests/entity_state.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/tests/entity_state.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,104 @@
+import type { EntityAdapter } from '../index'
+import { createEntityAdapter } from '../index'
+import type { PayloadAction } from '../../createAction'
+import { createAction } from '../../createAction'
+import { createSlice } from '../../createSlice'
+import type { BookModel } from './fixtures/book'
+
+describe('Entity State', () => {
+  let adapter: EntityAdapter<BookModel, string>
+
+  beforeEach(() => {
+    adapter = createEntityAdapter({
+      selectId: (book: BookModel) => book.id,
+    })
+  })
+
+  it('should let you get the initial state', () => {
+    const initialState = adapter.getInitialState()
+
+    expect(initialState).toEqual({
+      ids: [],
+      entities: {},
+    })
+  })
+
+  it('should let you provide additional initial state properties', () => {
+    const additionalProperties = { isHydrated: true }
+
+    const initialState = adapter.getInitialState(additionalProperties)
+
+    expect(initialState).toEqual({
+      ...additionalProperties,
+      ids: [],
+      entities: {},
+    })
+  })
+
+  it('should let you provide initial entities', () => {
+    const book1: BookModel = { id: 'a', title: 'First' }
+
+    const initialState = adapter.getInitialState(undefined, [book1])
+
+    expect(initialState).toEqual({
+      ids: [book1.id],
+      entities: { [book1.id]: book1 },
+    })
+
+    const additionalProperties = { isHydrated: true }
+
+    const initialState2 = adapter.getInitialState(additionalProperties, [book1])
+
+    expect(initialState2).toEqual({
+      ...additionalProperties,
+      ids: [book1.id],
+      entities: { [book1.id]: book1 },
+    })
+  })
+
+  it('should allow methods to be passed as reducers', () => {
+    const upsertBook = createAction<BookModel>('otherBooks/upsert')
+
+    const booksSlice = createSlice({
+      name: 'books',
+      initialState: adapter.getInitialState(),
+      reducers: {
+        addOne: adapter.addOne,
+        removeOne(state, action: PayloadAction<string>) {
+          // TODO The nested `produce` calls don't mutate `state` here as I would have expected.
+          // TODO (note that `state` here is actually an Immer Draft<S>, from `createReducer`)
+          // TODO However, this works if we _return_ the new plain result value instead
+          // TODO See https://github.com/immerjs/immer/issues/533
+          const result = adapter.removeOne(state, action)
+          return result
+        },
+      },
+      extraReducers: (builder) => {
+        builder.addCase(upsertBook, (state, action) => {
+          return adapter.upsertOne(state, action)
+        })
+      },
+    })
+
+    const { addOne, removeOne } = booksSlice.actions
+    const { reducer } = booksSlice
+
+    const selectors = adapter.getSelectors()
+
+    const book1: BookModel = { id: 'a', title: 'First' }
+    const book1a: BookModel = { id: 'a', title: 'Second' }
+
+    const afterAddOne = reducer(undefined, addOne(book1))
+    expect(afterAddOne.entities[book1.id]).toBe(book1)
+
+    const afterRemoveOne = reducer(afterAddOne, removeOne(book1.id))
+    expect(afterRemoveOne.entities[book1.id]).toBeUndefined()
+    expect(selectors.selectTotal(afterRemoveOne)).toBe(0)
+
+    const afterUpsertFirst = reducer(afterRemoveOne, upsertBook(book1))
+    const afterUpsertSecond = reducer(afterUpsertFirst, upsertBook(book1a))
+
+    expect(afterUpsertSecond.entities[book1.id]).toEqual(book1a)
+    expect(selectors.selectTotal(afterUpsertSecond)).toBe(1)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/entities/tests/fixtures/book.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/tests/fixtures/book.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/tests/fixtures/book.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+export interface BookModel {
+  id: string
+  title: string
+  author?: string
+}
+
+export const AClockworkOrange: BookModel = Object.freeze({
+  id: 'aco',
+  title: 'A Clockwork Orange',
+})
+
+export const AnimalFarm: BookModel = Object.freeze({
+  id: 'af',
+  title: 'Animal Farm',
+})
+
+export const TheGreatGatsby: BookModel = Object.freeze({
+  id: 'tgg',
+  title: 'The Great Gatsby',
+})
+
+export const TheHobbit: BookModel = Object.freeze({
+  id: 'th',
+  title: 'The Hobbit',
+  author: 'J. R. R. Tolkien',
+})
Index: node_modules/@reduxjs/toolkit/src/entities/tests/sorted_state_adapter.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/tests/sorted_state_adapter.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/tests/sorted_state_adapter.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1143 @@
+import type { PayloadAction } from '@reduxjs/toolkit'
+import {
+  configureStore,
+  createAction,
+  createSlice,
+  nanoid,
+} from '@reduxjs/toolkit'
+import { createNextState } from '../..'
+import { createEntityAdapter } from '../create_adapter'
+import type { EntityAdapter, EntityState } from '../models'
+import type { BookModel } from './fixtures/book'
+import {
+  AClockworkOrange,
+  AnimalFarm,
+  TheGreatGatsby,
+  TheHobbit,
+} from './fixtures/book'
+
+describe('Sorted State Adapter', () => {
+  let adapter: EntityAdapter<BookModel, string>
+  let state: EntityState<BookModel, string>
+
+  beforeAll(() => {
+    //eslint-disable-next-line
+    Object.defineProperty(Array.prototype, 'unwantedField', {
+      enumerable: true,
+      configurable: true,
+      value: 'This should not appear anywhere',
+    })
+  })
+
+  afterAll(() => {
+    delete (Array.prototype as any).unwantedField
+  })
+
+  beforeEach(() => {
+    adapter = createEntityAdapter({
+      selectId: (book: BookModel) => book.id,
+      sortComparer: (a, b) => {
+        return a.title.localeCompare(b.title)
+      },
+    })
+
+    state = { ids: [], entities: {} }
+  })
+
+  it('should let you add one entity to the state', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    expect(withOneEntity).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+      },
+    })
+  })
+
+  it('should let you add one entity to the state as an FSA', () => {
+    const bookAction = createAction<BookModel>('books/add')
+    const withOneEntity = adapter.addOne(state, bookAction(TheGreatGatsby))
+
+    expect(withOneEntity).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+      },
+    })
+  })
+
+  it('should not change state if you attempt to re-add an entity', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const readded = adapter.addOne(withOneEntity, TheGreatGatsby)
+
+    expect(readded).toBe(withOneEntity)
+  })
+
+  it('should let you add many entities to the state', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withManyMore = adapter.addMany(withOneEntity, [
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+
+    expect(withManyMore).toEqual({
+      ids: [AClockworkOrange.id, AnimalFarm.id, TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+        [AClockworkOrange.id]: AClockworkOrange,
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should let you add many entities to the state from a dictionary', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withManyMore = adapter.addMany(withOneEntity, {
+      [AClockworkOrange.id]: AClockworkOrange,
+      [AnimalFarm.id]: AnimalFarm,
+    })
+
+    expect(withManyMore).toEqual({
+      ids: [AClockworkOrange.id, AnimalFarm.id, TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+        [AClockworkOrange.id]: AClockworkOrange,
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should remove existing and add new ones on setAll', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withAll = adapter.setAll(withOneEntity, [
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+
+    expect(withAll).toEqual({
+      ids: [AClockworkOrange.id, AnimalFarm.id],
+      entities: {
+        [AClockworkOrange.id]: AClockworkOrange,
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should remove existing and add new ones on setAll when passing in a dictionary', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withAll = adapter.setAll(withOneEntity, {
+      [AClockworkOrange.id]: AClockworkOrange,
+      [AnimalFarm.id]: AnimalFarm,
+    })
+
+    expect(withAll).toEqual({
+      ids: [AClockworkOrange.id, AnimalFarm.id],
+      entities: {
+        [AClockworkOrange.id]: AClockworkOrange,
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should remove existing and add new ones on addAll (deprecated)', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withAll = adapter.setAll(withOneEntity, [
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+
+    expect(withAll).toEqual({
+      ids: [AClockworkOrange.id, AnimalFarm.id],
+      entities: {
+        [AClockworkOrange.id]: AClockworkOrange,
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should let you add remove an entity from the state', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withoutOne = adapter.removeOne(withOneEntity, TheGreatGatsby.id)
+
+    expect(withoutOne).toEqual({
+      ids: [],
+      entities: {},
+    })
+  })
+
+  it('should let you remove many entities by id from the state', () => {
+    const withAll = adapter.setAll(state, [
+      TheGreatGatsby,
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+
+    const withoutMany = adapter.removeMany(withAll, [
+      TheGreatGatsby.id,
+      AClockworkOrange.id,
+    ])
+
+    expect(withoutMany).toEqual({
+      ids: [AnimalFarm.id],
+      entities: {
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should let you remove all entities from the state', () => {
+    const withAll = adapter.setAll(state, [
+      TheGreatGatsby,
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+
+    const withoutAll = adapter.removeAll(withAll)
+
+    expect(withoutAll).toEqual({
+      ids: [],
+      entities: {},
+    })
+  })
+
+  it('should let you update an entity in the state', () => {
+    const withOne = adapter.addOne(state, TheGreatGatsby)
+    const changes = { title: 'A New Hope' }
+
+    const withUpdates = adapter.updateOne(withOne, {
+      id: TheGreatGatsby.id,
+      changes,
+    })
+
+    expect(withUpdates).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...changes,
+        },
+      },
+    })
+  })
+
+  it('should not change state if you attempt to update an entity that has not been added', () => {
+    const withUpdates = adapter.updateOne(state, {
+      id: TheGreatGatsby.id,
+      changes: { title: 'A New Title' },
+    })
+
+    expect(withUpdates).toBe(state)
+  })
+
+  it('Replaces an existing entity if you change the ID while updating', () => {
+    const a = { id: 'a', title: 'First' }
+    const b = { id: 'b', title: 'Second' }
+    const c = { id: 'c', title: 'Third' }
+    const d = { id: 'd', title: 'Fourth' }
+    const withAdded = adapter.setAll(state, [a, b, c])
+
+    const withUpdated = adapter.updateOne(withAdded, {
+      id: 'b',
+      changes: {
+        id: 'c',
+      },
+    })
+
+    const { ids, entities } = withUpdated
+
+    expect(ids).toEqual(['a', 'c'])
+    expect(entities.a).toBeTruthy()
+    expect(entities.b).not.toBeTruthy()
+    expect(entities.c).toBeTruthy()
+    expect(entities.c!.id).toBe('c')
+    expect(entities.c!.title).toBe('Second')
+  })
+
+  it('should not change ids state if you attempt to update an entity that does not impact sorting', () => {
+    const withAll = adapter.setAll(state, [
+      TheGreatGatsby,
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+    const changes = { title: 'The Great Gatsby II' }
+
+    const withUpdates = adapter.updateOne(withAll, {
+      id: TheGreatGatsby.id,
+      changes,
+    })
+
+    expect(withAll.ids).toBe(withUpdates.ids)
+  })
+
+  it('should let you update the id of entity', () => {
+    const withOne = adapter.addOne(state, TheGreatGatsby)
+    const changes = { id: 'A New Id' }
+
+    const withUpdates = adapter.updateOne(withOne, {
+      id: TheGreatGatsby.id,
+      changes,
+    })
+
+    expect(withUpdates).toEqual({
+      ids: [changes.id],
+      entities: {
+        [changes.id]: {
+          ...TheGreatGatsby,
+          ...changes,
+        },
+      },
+    })
+  })
+
+  it('should resort correctly if same id but sort key update', () => {
+    const withAll = adapter.setAll(state, [
+      TheGreatGatsby,
+      AnimalFarm,
+      AClockworkOrange,
+    ])
+    const changes = { title: 'A New Hope' }
+
+    const withUpdates = adapter.updateOne(withAll, {
+      id: TheGreatGatsby.id,
+      changes,
+    })
+
+    expect(withUpdates).toEqual({
+      ids: [AClockworkOrange.id, TheGreatGatsby.id, AnimalFarm.id],
+      entities: {
+        [AClockworkOrange.id]: AClockworkOrange,
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...changes,
+        },
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should resort correctly if the id and sort key update', () => {
+    const withOne = adapter.setAll(state, [
+      TheGreatGatsby,
+      AnimalFarm,
+      AClockworkOrange,
+    ])
+    const changes = { id: 'A New Id', title: 'A New Hope' }
+
+    const withUpdates = adapter.updateOne(withOne, {
+      id: TheGreatGatsby.id,
+      changes,
+    })
+
+    expect(withUpdates).toEqual({
+      ids: [AClockworkOrange.id, changes.id, AnimalFarm.id],
+      entities: {
+        [AClockworkOrange.id]: AClockworkOrange,
+        [changes.id]: {
+          ...TheGreatGatsby,
+          ...changes,
+        },
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should maintain a stable sorting order when updating items', () => {
+    interface OrderedEntity {
+      id: string
+      order: number
+      ts: number
+    }
+    const sortedItemsAdapter = createEntityAdapter<OrderedEntity>({
+      sortComparer: (a, b) => a.order - b.order,
+    })
+    const withInitialItems = sortedItemsAdapter.setAll(
+      sortedItemsAdapter.getInitialState(),
+      [
+        { id: 'C', order: 3, ts: 0 },
+        { id: 'A', order: 1, ts: 0 },
+        { id: 'F', order: 4, ts: 0 },
+        { id: 'B', order: 2, ts: 0 },
+        { id: 'D', order: 3, ts: 0 },
+        { id: 'E', order: 3, ts: 0 },
+      ],
+    )
+
+    expect(withInitialItems.ids).toEqual(['A', 'B', 'C', 'D', 'E', 'F'])
+
+    const updated = sortedItemsAdapter.updateOne(withInitialItems, {
+      id: 'C',
+      changes: { ts: 5 },
+    })
+
+    expect(updated.ids).toEqual(['A', 'B', 'C', 'D', 'E', 'F'])
+
+    const updated2 = sortedItemsAdapter.updateOne(withInitialItems, {
+      id: 'D',
+      changes: { ts: 6 },
+    })
+
+    expect(updated2.ids).toEqual(['A', 'B', 'C', 'D', 'E', 'F'])
+  })
+
+  it('should let you update many entities by id in the state', () => {
+    const firstChange = { title: 'Zack' }
+    const secondChange = { title: 'Aaron' }
+    const withMany = adapter.setAll(state, [TheGreatGatsby, AClockworkOrange])
+
+    const withUpdates = adapter.updateMany(withMany, [
+      { id: TheGreatGatsby.id, changes: firstChange },
+      { id: AClockworkOrange.id, changes: secondChange },
+    ])
+
+    expect(withUpdates).toEqual({
+      ids: [AClockworkOrange.id, TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...firstChange,
+        },
+        [AClockworkOrange.id]: {
+          ...AClockworkOrange,
+          ...secondChange,
+        },
+      },
+    })
+  })
+
+  it('should let you add one entity to the state with upsert()', () => {
+    const withOneEntity = adapter.upsertOne(state, TheGreatGatsby)
+    expect(withOneEntity).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+      },
+    })
+  })
+
+  it('should let you update an entity in the state with upsert()', () => {
+    const withOne = adapter.addOne(state, TheGreatGatsby)
+    const changes = { title: 'A New Hope' }
+
+    const withUpdates = adapter.upsertOne(withOne, {
+      ...TheGreatGatsby,
+      ...changes,
+    })
+    expect(withUpdates).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...changes,
+        },
+      },
+    })
+  })
+
+  it('should let you upsert many entities in the state', () => {
+    const firstChange = { title: 'Zack' }
+    const withMany = adapter.setAll(state, [TheGreatGatsby])
+
+    const withUpserts = adapter.upsertMany(withMany, [
+      { ...TheGreatGatsby, ...firstChange },
+      AClockworkOrange,
+    ])
+
+    expect(withUpserts).toEqual({
+      ids: [AClockworkOrange.id, TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...firstChange,
+        },
+        [AClockworkOrange.id]: AClockworkOrange,
+      },
+    })
+  })
+
+  it('should do nothing when upsertMany is given an empty array', () => {
+    const withMany = adapter.setAll(state, [TheGreatGatsby])
+
+    const withUpserts = adapter.upsertMany(withMany, [])
+
+    expect(withUpserts).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+      },
+    })
+  })
+
+  it('should throw when upsertMany is passed undefined or null', async () => {
+    const withMany = adapter.setAll(state, [TheGreatGatsby])
+
+    const fakeRequest = (response: null | undefined) =>
+      new Promise((resolve) => setTimeout(() => resolve(response), 50))
+
+    const undefinedBooks = (await fakeRequest(undefined)) as BookModel[]
+    expect(() => adapter.upsertMany(withMany, undefinedBooks)).toThrow()
+
+    const nullBooks = (await fakeRequest(null)) as BookModel[]
+    expect(() => adapter.upsertMany(withMany, nullBooks)).toThrow()
+  })
+
+  it('should let you upsert many entities in the state when passing in a dictionary', () => {
+    const firstChange = { title: 'Zack' }
+    const withMany = adapter.setAll(state, [TheGreatGatsby])
+
+    const withUpserts = adapter.upsertMany(withMany, {
+      [TheGreatGatsby.id]: { ...TheGreatGatsby, ...firstChange },
+      [AClockworkOrange.id]: AClockworkOrange,
+    })
+
+    expect(withUpserts).toEqual({
+      ids: [AClockworkOrange.id, TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...firstChange,
+        },
+        [AClockworkOrange.id]: AClockworkOrange,
+      },
+    })
+  })
+
+  it('should let you add a new entity then apply changes to it', () => {
+    const firstChange = { author: TheHobbit.author }
+    const secondChange = { title: 'Zack' }
+    const withMany = adapter.setAll(state, [AClockworkOrange])
+
+    const withUpserts = adapter.upsertMany(withMany, [
+      {...TheGreatGatsby}, { ...TheGreatGatsby, ...firstChange }, {...TheGreatGatsby, ...secondChange}
+    ])
+
+    expect(withUpserts).toEqual({
+      ids: [AClockworkOrange.id, TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...firstChange,
+          ...secondChange,
+        },
+        [AClockworkOrange.id]: AClockworkOrange,
+      },
+    })
+  })
+
+  it('should let you add a new entity in the state with setOne() and keep the sorting', () => {
+    const withMany = adapter.setAll(state, [AnimalFarm, TheHobbit])
+    const withOneMore = adapter.setOne(withMany, TheGreatGatsby)
+    expect(withOneMore).toEqual({
+      ids: [AnimalFarm.id, TheGreatGatsby.id, TheHobbit.id],
+      entities: {
+        [AnimalFarm.id]: AnimalFarm,
+        [TheHobbit.id]: TheHobbit,
+        [TheGreatGatsby.id]: TheGreatGatsby,
+      },
+    })
+  })
+
+  it('should let you replace an entity in the state with setOne()', () => {
+    let withOne = adapter.setOne(state, TheHobbit)
+    const changeWithoutAuthor = { id: TheHobbit.id, title: 'Silmarillion' }
+    withOne = adapter.setOne(withOne, changeWithoutAuthor)
+
+    expect(withOne).toEqual({
+      ids: [TheHobbit.id],
+      entities: {
+        [TheHobbit.id]: changeWithoutAuthor,
+      },
+    })
+  })
+
+  it('should do nothing when setMany is given an empty array', () => {
+    const withMany = adapter.setAll(state, [TheGreatGatsby])
+
+    const withUpserts = adapter.setMany(withMany, [])
+
+    expect(withUpserts).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+      },
+    })
+  })
+
+  it('should let you set many entities in the state', () => {
+    const firstChange = { id: TheHobbit.id, title: 'Silmarillion' }
+    const withMany = adapter.setAll(state, [TheHobbit])
+
+    const withSetMany = adapter.setMany(withMany, [
+      firstChange,
+      AClockworkOrange,
+    ])
+
+    expect(withSetMany).toEqual({
+      ids: [AClockworkOrange.id, TheHobbit.id],
+      entities: {
+        [TheHobbit.id]: firstChange,
+        [AClockworkOrange.id]: AClockworkOrange,
+      },
+    })
+  })
+
+  it('should let you set many entities in the state when passing in a dictionary', () => {
+    const changeWithoutAuthor = { id: TheHobbit.id, title: 'Silmarillion' }
+    const withMany = adapter.setAll(state, [TheHobbit])
+
+    const withSetMany = adapter.setMany(withMany, {
+      [TheHobbit.id]: changeWithoutAuthor,
+      [AClockworkOrange.id]: AClockworkOrange,
+    })
+
+    expect(withSetMany).toEqual({
+      ids: [AClockworkOrange.id, TheHobbit.id],
+      entities: {
+        [TheHobbit.id]: changeWithoutAuthor,
+        [AClockworkOrange.id]: AClockworkOrange,
+      },
+    })
+  })
+
+  it("only returns one entry for that id in the id's array", () => {
+    const book1: BookModel = { id: 'a', title: 'First' }
+    const book2: BookModel = { id: 'b', title: 'Second' }
+    const initialState = adapter.getInitialState()
+    const withItems = adapter.addMany(initialState, [book1, book2])
+
+    expect(withItems.ids).toEqual(['a', 'b'])
+    const withUpdate = adapter.updateOne(withItems, {
+      id: 'a',
+      changes: { id: 'b' },
+    })
+
+    expect(withUpdate.ids).toEqual(['b'])
+    expect(withUpdate.entities['b']!.title).toBe(book1.title)
+  })
+
+  it('should minimize the amount of sorting work needed', () => {
+    const INITIAL_ITEMS = 10_000
+    const ADDED_ITEMS = 1_000
+
+    type Entity = { id: string; name: string; position: number }
+
+    let numSorts = 0
+
+    const adaptor = createEntityAdapter({
+      selectId: (entity: Entity) => entity.id,
+      sortComparer: (a, b) => {
+        numSorts++
+        if (a.position < b.position) return -1
+        else if (a.position > b.position) return 1
+        return 0
+      },
+    })
+
+    function generateItems(count: number) {
+      const items: readonly Entity[] = new Array(count)
+        .fill(undefined)
+        .map((x, i) => ({
+          name: `${i}`,
+          position: Math.random(),
+          id: nanoid(),
+        }))
+      return items
+    }
+
+    const entitySlice = createSlice({
+      name: 'entity',
+      initialState: adaptor.getInitialState(),
+      reducers: {
+        updateOne: adaptor.updateOne,
+        upsertOne: adaptor.upsertOne,
+        upsertMany: adaptor.upsertMany,
+        addMany: adaptor.addMany,
+      },
+    })
+
+    const store = configureStore({
+      reducer: {
+        entity: entitySlice.reducer,
+      },
+      middleware: (getDefaultMiddleware) => {
+        return getDefaultMiddleware({
+          serializableCheck: false,
+          immutableCheck: false,
+        })
+      },
+    })
+
+    numSorts = 0
+
+    const logComparisons = false
+
+    function measureComparisons(name: string, cb: () => void) {
+      numSorts = 0
+      const start = new Date().getTime()
+      cb()
+      const end = new Date().getTime()
+      const duration = end - start
+
+      if (logComparisons) {
+        console.log(
+          `${name}: sortComparer called ${numSorts.toLocaleString()} times in ${duration.toLocaleString()}ms`,
+        )
+      }
+    }
+
+    const initialItems = generateItems(INITIAL_ITEMS)
+
+    measureComparisons('Original Setup', () => {
+      store.dispatch(entitySlice.actions.upsertMany(initialItems))
+    })
+
+    expect(numSorts).toBeLessThan(INITIAL_ITEMS * 20)
+
+    measureComparisons('Insert One (random)', () => {
+      store.dispatch(
+        entitySlice.actions.upsertOne({
+          id: nanoid(),
+          position: Math.random(),
+          name: 'test',
+        }),
+      )
+    })
+
+    expect(numSorts).toBeLessThan(50)
+
+    measureComparisons('Insert One (middle)', () => {
+      store.dispatch(
+        entitySlice.actions.upsertOne({
+          id: nanoid(),
+          position: 0.5,
+          name: 'test',
+        }),
+      )
+    })
+
+    expect(numSorts).toBeLessThan(50)
+
+    measureComparisons('Insert One (end)', () => {
+      store.dispatch(
+        entitySlice.actions.upsertOne({
+          id: nanoid(),
+          position: 0.9998,
+          name: 'test',
+        }),
+      )
+    })
+
+    expect(numSorts).toBeLessThan(50)
+
+    const addedItems = generateItems(ADDED_ITEMS)
+    measureComparisons('Add Many', () => {
+      store.dispatch(entitySlice.actions.addMany(addedItems))
+    })
+
+    expect(numSorts).toBeLessThan(ADDED_ITEMS * 20)
+
+    // These numbers will vary because of the randomness, but generally
+    // with 10K items the old code had 200K+ sort calls, while the new code
+    // is around 13K sort calls.
+    expect(numSorts).toBeLessThan(20_000)
+
+    const { ids } = store.getState().entity
+    const middleItemId = ids[(ids.length / 2) | 0]
+
+    measureComparisons('Update One (end)', () => {
+      store.dispatch(
+        // Move this middle item near the end
+        entitySlice.actions.updateOne({
+          id: middleItemId,
+          changes: {
+            position: 0.99999,
+          },
+        }),
+      )
+    })
+
+    const SORTING_COUNT_BUFFER = 100
+
+    expect(numSorts).toBeLessThan(
+      INITIAL_ITEMS + ADDED_ITEMS + SORTING_COUNT_BUFFER,
+    )
+
+    measureComparisons('Update One (middle)', () => {
+      store.dispatch(
+        // Move this middle item near the end
+        entitySlice.actions.updateOne({
+          id: middleItemId,
+          changes: {
+            position: 0.42,
+          },
+        }),
+      )
+    })
+
+    expect(numSorts).toBeLessThan(
+      INITIAL_ITEMS + ADDED_ITEMS + SORTING_COUNT_BUFFER,
+    )
+
+    measureComparisons('Update One (replace)', () => {
+      store.dispatch(
+        // Move this middle item near the end
+        entitySlice.actions.updateOne({
+          id: middleItemId,
+          changes: {
+            id: nanoid(),
+            position: 0.98,
+          },
+        }),
+      )
+    })
+
+    expect(numSorts).toBeLessThan(
+      INITIAL_ITEMS + ADDED_ITEMS + SORTING_COUNT_BUFFER,
+    )
+
+    // The old code was around 120K, the new code is around 10K.
+    //expect(numSorts).toBeLessThan(25_000)
+  })
+
+  it('should not throw an Immer `current` error when `state.ids` is a plain array', () => {
+    const book1: BookModel = { id: 'a', title: 'First' }
+    const initialState = adapter.getInitialState()
+    const withItems = adapter.addMany(initialState, [book1])
+    const booksSlice = createSlice({
+      name: 'books',
+      initialState,
+      reducers: {
+        testCurrentBehavior(state, action: PayloadAction<BookModel>) {
+          // Will overwrite `state.ids` with a plain array
+          adapter.removeAll(state)
+
+          // will call `splitAddedUpdatedEntities` and call `current(state.ids)`
+          adapter.upsertMany(state, [book1])
+        },
+      },
+    })
+
+    booksSlice.reducer(
+      initialState,
+      booksSlice.actions.testCurrentBehavior(book1),
+    )
+  })
+
+  it('should not throw an Immer `current` error when the adapter is called twice', () => {
+    const book1: BookModel = { id: 'a', title: 'First' }
+    const book2: BookModel = { id: 'b', title: 'Second' }
+    const initialState = adapter.getInitialState()
+    const booksSlice = createSlice({
+      name: 'books',
+      initialState,
+      reducers: {
+        testCurrentBehavior(state, action: PayloadAction<BookModel>) {
+          // Will overwrite `state.ids` with a plain array
+          adapter.removeAll(state)
+
+          // will call `splitAddedUpdatedEntities` and call `current(state.ids)`
+          adapter.addOne(state, book1)
+          adapter.addOne(state, book2)
+        },
+      },
+    })
+
+    booksSlice.reducer(
+      initialState,
+      booksSlice.actions.testCurrentBehavior(book1),
+    )
+  })
+
+  describe('can be used mutably when wrapped in createNextState', () => {
+    test('removeAll', () => {
+      const withTwo = adapter.addMany(state, [TheGreatGatsby, AnimalFarm])
+      const result = createNextState(withTwo, (draft) => {
+        adapter.removeAll(draft)
+      })
+      expect(result).toEqual({
+        entities: {},
+        ids: [],
+      })
+    })
+
+    test('addOne', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.addOne(draft, TheGreatGatsby)
+      })
+
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('addMany', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.addMany(draft, [TheGreatGatsby, AnimalFarm])
+      })
+
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['af', 'tgg'],
+      })
+    })
+
+    test('setAll', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.setAll(draft, [TheGreatGatsby, AnimalFarm])
+      })
+
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['af', 'tgg'],
+      })
+    })
+
+    test('updateOne', () => {
+      const withOne = adapter.addOne(state, TheGreatGatsby)
+      const changes = { title: 'A New Hope' }
+      const result = createNextState(withOne, (draft) => {
+        adapter.updateOne(draft, {
+          id: TheGreatGatsby.id,
+          changes,
+        })
+      })
+
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'A New Hope',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('updateMany', () => {
+      const firstChange = { title: 'First Change' }
+      const secondChange = { title: 'Second Change' }
+      const thirdChange = { title: 'Third Change' }
+      const fourthChange = { author: 'Fourth Change' }
+      const withMany = adapter.setAll(state, [
+        TheGreatGatsby,
+        AClockworkOrange,
+        TheHobbit,
+      ])
+
+      const result = createNextState(withMany, (draft) => {
+        adapter.updateMany(draft, [
+          { id: TheHobbit.id, changes: firstChange },
+          { id: TheGreatGatsby.id, changes: secondChange },
+          { id: AClockworkOrange.id, changes: thirdChange },
+          { id: TheHobbit.id, changes: fourthChange },
+        ])
+      })
+
+      expect(result).toEqual({
+        entities: {
+          aco: {
+            id: 'aco',
+            title: 'Third Change',
+          },
+          tgg: {
+            id: 'tgg',
+            title: 'Second Change',
+          },
+          th: {
+            author: 'Fourth Change',
+            id: 'th',
+            title: 'First Change',
+          },
+        },
+        ids: ['th', 'tgg', 'aco'],
+      })
+    })
+
+    test('upsertOne (insert)', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.upsertOne(draft, TheGreatGatsby)
+      })
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('upsertOne (update)', () => {
+      const withOne = adapter.upsertOne(state, TheGreatGatsby)
+      const result = createNextState(withOne, (draft) => {
+        adapter.upsertOne(draft, {
+          id: TheGreatGatsby.id,
+          title: 'A New Hope',
+        })
+      })
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'A New Hope',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('upsertMany', () => {
+      const withOne = adapter.upsertOne(state, TheGreatGatsby)
+      const result = createNextState(withOne, (draft) => {
+        adapter.upsertMany(draft, [
+          {
+            id: TheGreatGatsby.id,
+            title: 'A New Hope',
+          },
+          AnimalFarm,
+        ])
+      })
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+          tgg: {
+            id: 'tgg',
+            title: 'A New Hope',
+          },
+        },
+        ids: ['tgg', 'af'],
+      })
+    })
+
+    test('setOne (insert)', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.setOne(draft, TheGreatGatsby)
+      })
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('setOne (update)', () => {
+      const withOne = adapter.setOne(state, TheHobbit)
+      const result = createNextState(withOne, (draft) => {
+        adapter.setOne(draft, {
+          id: TheHobbit.id,
+          title: 'Silmarillion',
+        })
+      })
+      expect(result).toEqual({
+        entities: {
+          th: {
+            id: 'th',
+            title: 'Silmarillion',
+          },
+        },
+        ids: ['th'],
+      })
+    })
+
+    test('setMany', () => {
+      const withOne = adapter.setOne(state, TheHobbit)
+      const result = createNextState(withOne, (draft) => {
+        adapter.setMany(draft, [
+          {
+            id: TheHobbit.id,
+            title: 'Silmarillion',
+          },
+          AnimalFarm,
+        ])
+      })
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+          th: {
+            id: 'th',
+            title: 'Silmarillion',
+          },
+        },
+        ids: ['af', 'th'],
+      })
+    })
+
+    test('removeOne', () => {
+      const withTwo = adapter.addMany(state, [TheGreatGatsby, AnimalFarm])
+      const result = createNextState(withTwo, (draft) => {
+        adapter.removeOne(draft, TheGreatGatsby.id)
+      })
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+        },
+        ids: ['af'],
+      })
+    })
+
+    test('removeMany', () => {
+      const withThree = adapter.addMany(state, [
+        TheGreatGatsby,
+        AnimalFarm,
+        AClockworkOrange,
+      ])
+      const result = createNextState(withThree, (draft) => {
+        adapter.removeMany(draft, [TheGreatGatsby.id, AnimalFarm.id])
+      })
+      expect(result).toEqual({
+        entities: {
+          aco: {
+            id: 'aco',
+            title: 'A Clockwork Orange',
+          },
+        },
+        ids: ['aco'],
+      })
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/entities/tests/state_adapter.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/tests/state_adapter.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/tests/state_adapter.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+import type { EntityAdapter } from '../index'
+import { createEntityAdapter } from '../index'
+import type { PayloadAction } from '../../createAction'
+import { configureStore } from '../../configureStore'
+import { createSlice } from '../../createSlice'
+import type { BookModel } from './fixtures/book'
+
+describe('createStateOperator', () => {
+  let adapter: EntityAdapter<BookModel, string>
+
+  beforeEach(() => {
+    adapter = createEntityAdapter({
+      selectId: (book: BookModel) => book.id,
+    })
+  })
+  it('Correctly mutates a draft state when inside `createNextState', () => {
+    const booksSlice = createSlice({
+      name: 'books',
+      initialState: adapter.getInitialState(),
+      reducers: {
+        // We should be able to call an adapter method as a mutating helper in a larger reducer
+        addOne(state, action: PayloadAction<BookModel>) {
+          // Originally, having nested `produce` calls don't mutate `state` here as I would have expected.
+          // (note that `state` here is actually an Immer Draft<S>, from `createReducer`)
+          // One woarkound was to return the new plain result value instead
+          // See https://github.com/immerjs/immer/issues/533
+          // However, after tweaking `createStateOperator` to check if the argument is a draft,
+          // we can just treat the operator as strictly mutating, without returning a result,
+          // and the result should be correct.
+          const result = adapter.addOne(state, action)
+          expect(result.ids.length).toBe(1)
+          //Deliberately _don't_ return result
+        },
+        // We should also be able to pass them individually as case reducers
+        addAnother: adapter.addOne,
+      },
+    })
+
+    const { addOne, addAnother } = booksSlice.actions
+
+    const store = configureStore({
+      reducer: {
+        books: booksSlice.reducer,
+      },
+    })
+
+    const book1: BookModel = { id: 'a', title: 'First' }
+    store.dispatch(addOne(book1))
+
+    const state1 = store.getState()
+    expect(state1.books.ids.length).toBe(1)
+    expect(state1.books.entities['a']).toBe(book1)
+
+    const book2: BookModel = { id: 'b', title: 'Second' }
+    store.dispatch(addAnother(book2))
+
+    const state2 = store.getState()
+    expect(state2.books.ids.length).toBe(2)
+    expect(state2.books.entities['b']).toBe(book2)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/entities/tests/state_selectors.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/tests/state_selectors.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/tests/state_selectors.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,154 @@
+import { createDraftSafeSelectorCreator } from '../../createDraftSafeSelector'
+import type { EntityAdapter, EntityState } from '../index'
+import { createEntityAdapter } from '../index'
+import type { EntitySelectors } from '../models'
+import type { BookModel } from './fixtures/book'
+import { AClockworkOrange, AnimalFarm, TheGreatGatsby } from './fixtures/book'
+import type { Selector } from 'reselect'
+import { createSelector, weakMapMemoize } from 'reselect'
+import { vi } from 'vitest'
+
+describe('Entity State Selectors', () => {
+  describe('Composed Selectors', () => {
+    interface State {
+      books: EntityState<BookModel, string>
+    }
+
+    let adapter: EntityAdapter<BookModel, string>
+    let selectors: EntitySelectors<BookModel, State, string>
+    let state: State
+
+    beforeEach(() => {
+      adapter = createEntityAdapter({
+        selectId: (book: BookModel) => book.id,
+      })
+
+      state = {
+        books: adapter.setAll(adapter.getInitialState(), [
+          AClockworkOrange,
+          AnimalFarm,
+          TheGreatGatsby,
+        ]),
+      }
+
+      selectors = adapter.getSelectors((state: State) => state.books)
+    })
+
+    it('should create a selector for selecting the ids', () => {
+      const ids = selectors.selectIds(state)
+
+      expect(ids).toEqual(state.books.ids)
+    })
+
+    it('should create a selector for selecting the entities', () => {
+      const entities = selectors.selectEntities(state)
+
+      expect(entities).toEqual(state.books.entities)
+    })
+
+    it('should create a selector for selecting the list of models', () => {
+      const models = selectors.selectAll(state)
+
+      expect(models).toEqual([AClockworkOrange, AnimalFarm, TheGreatGatsby])
+    })
+
+    it('should create a selector for selecting the count of models', () => {
+      const total = selectors.selectTotal(state)
+
+      expect(total).toEqual(3)
+    })
+
+    it('should create a selector for selecting a single item by ID', () => {
+      const first = selectors.selectById(state, AClockworkOrange.id)
+      expect(first).toBe(AClockworkOrange)
+      const second = selectors.selectById(state, AnimalFarm.id)
+      expect(second).toBe(AnimalFarm)
+    })
+  })
+
+  describe('Uncomposed Selectors', () => {
+    type State = EntityState<BookModel, string>
+
+    let adapter: EntityAdapter<BookModel, string>
+    let selectors: EntitySelectors<
+      BookModel,
+      EntityState<BookModel, string>,
+      string
+    >
+    let state: State
+
+    beforeEach(() => {
+      adapter = createEntityAdapter({
+        selectId: (book: BookModel) => book.id,
+      })
+
+      state = adapter.setAll(adapter.getInitialState(), [
+        AClockworkOrange,
+        AnimalFarm,
+        TheGreatGatsby,
+      ])
+
+      selectors = adapter.getSelectors()
+    })
+
+    it('should create a selector for selecting the ids', () => {
+      const ids = selectors.selectIds(state)
+
+      expect(ids).toEqual(state.ids)
+    })
+
+    it('should create a selector for selecting the entities', () => {
+      const entities = selectors.selectEntities(state)
+
+      expect(entities).toEqual(state.entities)
+    })
+
+    it('should type single entity from Dictionary as entity type or undefined', () => {
+      expectType<
+        Selector<EntityState<BookModel, string>, BookModel | undefined>
+      >(createSelector(selectors.selectEntities, (entities) => entities[0]))
+    })
+
+    it('should create a selector for selecting the list of models', () => {
+      const models = selectors.selectAll(state)
+
+      expect(models).toEqual([AClockworkOrange, AnimalFarm, TheGreatGatsby])
+    })
+
+    it('should create a selector for selecting the count of models', () => {
+      const total = selectors.selectTotal(state)
+
+      expect(total).toEqual(3)
+    })
+
+    it('should create a selector for selecting a single item by ID', () => {
+      const first = selectors.selectById(state, AClockworkOrange.id)
+      expect(first).toBe(AClockworkOrange)
+      const second = selectors.selectById(state, AnimalFarm.id)
+      expect(second).toBe(AnimalFarm)
+    })
+  })
+  describe('custom createSelector instance', () => {
+    it('should use the custom createSelector function if provided', () => {
+      const memoizeSpy = vi.fn(
+        // test that we're allowed to pass memoizers with different options, as long as they're optional
+        <F extends (...args: any[]) => any>(fn: F, param?: boolean) => fn,
+      )
+      const createCustomSelector = createDraftSafeSelectorCreator(memoizeSpy)
+
+      const adapter = createEntityAdapter({
+        selectId: (book: BookModel) => book.id,
+      })
+
+      adapter.getSelectors(undefined, { createSelector: createCustomSelector })
+
+      expect(memoizeSpy).toHaveBeenCalled()
+
+      memoizeSpy.mockClear()
+    })
+  })
+})
+
+function expectType<T>(t: T) {
+  return t
+}
Index: node_modules/@reduxjs/toolkit/src/entities/tests/unsorted_state_adapter.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/tests/unsorted_state_adapter.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/tests/unsorted_state_adapter.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,739 @@
+import type { EntityAdapter, EntityState } from '../models'
+import { createEntityAdapter } from '../create_adapter'
+import type { BookModel } from './fixtures/book'
+import {
+  TheGreatGatsby,
+  AClockworkOrange,
+  AnimalFarm,
+  TheHobbit,
+} from './fixtures/book'
+import { createNextState } from '../..'
+
+describe('Unsorted State Adapter', () => {
+  let adapter: EntityAdapter<BookModel, string>
+  let state: EntityState<BookModel, string>
+
+  beforeAll(() => {
+    //eslint-disable-next-line
+    Object.defineProperty(Array.prototype, 'unwantedField', {
+      enumerable: true,
+      configurable: true,
+      value: 'This should not appear anywhere',
+    })
+  })
+
+  afterAll(() => {
+    delete (Array.prototype as any).unwantedField
+  })
+
+  beforeEach(() => {
+    adapter = createEntityAdapter({
+      selectId: (book: BookModel) => book.id,
+    })
+
+    state = { ids: [], entities: {} }
+  })
+
+  it('should let you add one entity to the state', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    expect(withOneEntity).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+      },
+    })
+  })
+
+  it('should not change state if you attempt to re-add an entity', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const readded = adapter.addOne(withOneEntity, TheGreatGatsby)
+
+    expect(readded).toBe(withOneEntity)
+  })
+
+  it('should let you add many entities to the state', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withManyMore = adapter.addMany(withOneEntity, [
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+
+    expect(withManyMore).toEqual({
+      ids: [TheGreatGatsby.id, AClockworkOrange.id, AnimalFarm.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+        [AClockworkOrange.id]: AClockworkOrange,
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should let you add many entities to the state from a dictionary', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withManyMore = adapter.addMany(withOneEntity, {
+      [AClockworkOrange.id]: AClockworkOrange,
+      [AnimalFarm.id]: AnimalFarm,
+    })
+
+    expect(withManyMore).toEqual({
+      ids: [TheGreatGatsby.id, AClockworkOrange.id, AnimalFarm.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+        [AClockworkOrange.id]: AClockworkOrange,
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should remove existing and add new ones on setAll', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withAll = adapter.setAll(withOneEntity, [
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+
+    expect(withAll).toEqual({
+      ids: [AClockworkOrange.id, AnimalFarm.id],
+      entities: {
+        [AClockworkOrange.id]: AClockworkOrange,
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should remove existing and add new ones on setAll when passing in a dictionary', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withAll = adapter.setAll(withOneEntity, {
+      [AClockworkOrange.id]: AClockworkOrange,
+      [AnimalFarm.id]: AnimalFarm,
+    })
+
+    expect(withAll).toEqual({
+      ids: [AClockworkOrange.id, AnimalFarm.id],
+      entities: {
+        [AClockworkOrange.id]: AClockworkOrange,
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should let you add remove an entity from the state', () => {
+    const withOneEntity = adapter.addOne(state, TheGreatGatsby)
+
+    const withoutOne = adapter.removeOne(withOneEntity, TheGreatGatsby.id)
+
+    expect(withoutOne).toEqual({
+      ids: [],
+      entities: {},
+    })
+  })
+
+  it('should let you remove many entities by id from the state', () => {
+    const withAll = adapter.setAll(state, [
+      TheGreatGatsby,
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+
+    const withoutMany = adapter.removeMany(withAll, [
+      TheGreatGatsby.id,
+      AClockworkOrange.id,
+    ])
+
+    expect(withoutMany).toEqual({
+      ids: [AnimalFarm.id],
+      entities: {
+        [AnimalFarm.id]: AnimalFarm,
+      },
+    })
+  })
+
+  it('should let you remove all entities from the state', () => {
+    const withAll = adapter.setAll(state, [
+      TheGreatGatsby,
+      AClockworkOrange,
+      AnimalFarm,
+    ])
+
+    const withoutAll = adapter.removeAll(withAll)
+
+    expect(withoutAll).toEqual({
+      ids: [],
+      entities: {},
+    })
+  })
+
+  it('should let you update an entity in the state', () => {
+    const withOne = adapter.addOne(state, TheGreatGatsby)
+    const changes = { title: 'A New Hope' }
+
+    const withUpdates = adapter.updateOne(withOne, {
+      id: TheGreatGatsby.id,
+      changes,
+    })
+
+    expect(withUpdates).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...changes,
+        },
+      },
+    })
+  })
+
+  it('should not change state if you attempt to update an entity that has not been added', () => {
+    const withUpdates = adapter.updateOne(state, {
+      id: TheGreatGatsby.id,
+      changes: { title: 'A New Title' },
+    })
+
+    expect(withUpdates).toBe(state)
+  })
+
+  it('should not change ids state if you attempt to update an entity that has already been added', () => {
+    const withOne = adapter.addOne(state, TheGreatGatsby)
+    const changes = { title: 'A New Hope' }
+
+    const withUpdates = adapter.updateOne(withOne, {
+      id: TheGreatGatsby.id,
+      changes,
+    })
+
+    expect(withOne.ids).toBe(withUpdates.ids)
+  })
+
+  it('should let you update the id of entity', () => {
+    const withOne = adapter.addOne(state, TheGreatGatsby)
+    const changes = { id: 'A New Id' }
+
+    const withUpdates = adapter.updateOne(withOne, {
+      id: TheGreatGatsby.id,
+      changes,
+    })
+
+    expect(withUpdates).toEqual({
+      ids: [changes.id],
+      entities: {
+        [changes.id]: {
+          ...TheGreatGatsby,
+          ...changes,
+        },
+      },
+    })
+  })
+
+  it('should let you update many entities by id in the state', () => {
+    const firstChange = { title: 'First Change' }
+    const secondChange = { title: 'Second Change' }
+    const withMany = adapter.setAll(state, [TheGreatGatsby, AClockworkOrange])
+
+    const withUpdates = adapter.updateMany(withMany, [
+      { id: TheGreatGatsby.id, changes: firstChange },
+      { id: AClockworkOrange.id, changes: secondChange },
+    ])
+
+    expect(withUpdates).toEqual({
+      ids: [TheGreatGatsby.id, AClockworkOrange.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...firstChange,
+        },
+        [AClockworkOrange.id]: {
+          ...AClockworkOrange,
+          ...secondChange,
+        },
+      },
+    })
+  })
+
+  it("doesn't break when multiple renames of one item occur", () => {
+    const withA = adapter.addOne(state, { id: 'a', title: 'First' })
+
+    const withUpdates = adapter.updateMany(withA, [
+      { id: 'a', changes: { id: 'b' } },
+      { id: 'a', changes: { id: 'c' } },
+    ])
+
+    const { ids, entities } = withUpdates
+
+    /*
+      Original code failed with a mish-mash of values, like:
+      {
+        ids: [ 'c' ],
+        entities: { b: { id: 'b', title: 'First' }, c: { id: 'c' } }
+      }
+      We now expect that only 'c' will be left:
+      { 
+        ids: [ 'c' ], 
+        entities: { c: { id: 'c', title: 'First' } } 
+      }
+    */
+    expect(ids.length).toBe(1)
+    expect(ids).toEqual(['c'])
+    expect(entities.a).toBeFalsy()
+    expect(entities.b).toBeFalsy()
+    expect(entities.c).toBeTruthy()
+  })
+
+  it('should let you add one entity to the state with upsert()', () => {
+    const withOneEntity = adapter.upsertOne(state, TheGreatGatsby)
+    expect(withOneEntity).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+      },
+    })
+  })
+
+  it('should let you update an entity in the state with upsert()', () => {
+    const withOne = adapter.addOne(state, TheGreatGatsby)
+    const changes = { title: 'A New Hope' }
+
+    const withUpdates = adapter.upsertOne(withOne, {
+      ...TheGreatGatsby,
+      ...changes,
+    })
+    expect(withUpdates).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...changes,
+        },
+      },
+    })
+  })
+
+  it('should let you upsert many entities in the state', () => {
+    const firstChange = { title: 'First Change' }
+    const withMany = adapter.setAll(state, [TheGreatGatsby])
+
+    const withUpserts = adapter.upsertMany(withMany, [
+      { ...TheGreatGatsby, ...firstChange },
+      AClockworkOrange,
+    ])
+
+    expect(withUpserts).toEqual({
+      ids: [TheGreatGatsby.id, AClockworkOrange.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...firstChange,
+        },
+        [AClockworkOrange.id]: AClockworkOrange,
+      },
+    })
+  })
+
+  it('should let you upsert many entities in the state when passing in a dictionary', () => {
+    const firstChange = { title: 'Zack' }
+    const withMany = adapter.setAll(state, [TheGreatGatsby])
+
+    const withUpserts = adapter.upsertMany(withMany, {
+      [TheGreatGatsby.id]: { ...TheGreatGatsby, ...firstChange },
+      [AClockworkOrange.id]: AClockworkOrange,
+    })
+
+    expect(withUpserts).toEqual({
+      ids: [TheGreatGatsby.id, AClockworkOrange.id],
+      entities: {
+        [TheGreatGatsby.id]: {
+          ...TheGreatGatsby,
+          ...firstChange,
+        },
+        [AClockworkOrange.id]: AClockworkOrange,
+      },
+    })
+  })
+
+  it('should let you add a new entity then apply changes to it', () => {
+    const firstChange = { author: TheHobbit.author }
+    const secondChange = { title: 'Zack' }
+    const withMany = adapter.setAll(state, [TheGreatGatsby])
+
+    const withUpserts = adapter.upsertMany(withMany, [
+      {...AClockworkOrange}, { ...AClockworkOrange, ...firstChange }, {...AClockworkOrange, ...secondChange}
+    ])
+
+    expect(withUpserts).toEqual({
+      ids: [TheGreatGatsby.id, AClockworkOrange.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+        [AClockworkOrange.id]: {
+          ...AClockworkOrange,
+          ...firstChange,
+          ...secondChange,
+        },
+      },
+    })
+  })
+
+  it('should let you add a new entity in the state with setOne()', () => {
+    const withOne = adapter.setOne(state, TheGreatGatsby)
+    expect(withOne).toEqual({
+      ids: [TheGreatGatsby.id],
+      entities: {
+        [TheGreatGatsby.id]: TheGreatGatsby,
+      },
+    })
+  })
+
+  it('should let you replace an entity in the state with setOne()', () => {
+    let withOne = adapter.setOne(state, TheHobbit)
+    const changeWithoutAuthor = { id: TheHobbit.id, title: 'Silmarillion' }
+    withOne = adapter.setOne(withOne, changeWithoutAuthor)
+
+    expect(withOne).toEqual({
+      ids: [TheHobbit.id],
+      entities: {
+        [TheHobbit.id]: changeWithoutAuthor,
+      },
+    })
+  })
+
+  it('should let you set many entities in the state', () => {
+    const changeWithoutAuthor = { id: TheHobbit.id, title: 'Silmarillion' }
+    const withMany = adapter.setAll(state, [TheHobbit])
+
+    const withSetMany = adapter.setMany(withMany, [
+      changeWithoutAuthor,
+      AClockworkOrange,
+    ])
+
+    expect(withSetMany).toEqual({
+      ids: [TheHobbit.id, AClockworkOrange.id],
+      entities: {
+        [TheHobbit.id]: changeWithoutAuthor,
+        [AClockworkOrange.id]: AClockworkOrange,
+      },
+    })
+  })
+
+  it('should let you set many entities in the state when passing in a dictionary', () => {
+    const changeWithoutAuthor = { id: TheHobbit.id, title: 'Silmarillion' }
+    const withMany = adapter.setAll(state, [TheHobbit])
+
+    const withSetMany = adapter.setMany(withMany, {
+      [TheHobbit.id]: changeWithoutAuthor,
+      [AClockworkOrange.id]: AClockworkOrange,
+    })
+
+    expect(withSetMany).toEqual({
+      ids: [TheHobbit.id, AClockworkOrange.id],
+      entities: {
+        [TheHobbit.id]: changeWithoutAuthor,
+        [AClockworkOrange.id]: AClockworkOrange,
+      },
+    })
+  })
+  it("only returns one entry for that id in the id's array", () => {
+    const book1: BookModel = { id: 'a', title: 'First' }
+    const book2: BookModel = { id: 'b', title: 'Second' }
+    const initialState = adapter.getInitialState()
+    const withItems = adapter.addMany(initialState, [book1, book2])
+
+    expect(withItems.ids).toEqual(['a', 'b'])
+    const withUpdate = adapter.updateOne(withItems, {
+      id: 'a',
+      changes: { id: 'b' },
+    })
+
+    expect(withUpdate.ids).toEqual(['b'])
+    expect(withUpdate.entities['b']!.title).toBe(book1.title)
+  })
+
+  describe('can be used mutably when wrapped in createNextState', () => {
+    test('removeAll', () => {
+      const withTwo = adapter.addMany(state, [TheGreatGatsby, AnimalFarm])
+      const result = createNextState(withTwo, (draft) => {
+        adapter.removeAll(draft)
+      })
+      expect(result).toEqual({
+        entities: {},
+        ids: [],
+      })
+    })
+
+    test('addOne', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.addOne(draft, TheGreatGatsby)
+      })
+
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('addMany', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.addMany(draft, [TheGreatGatsby, AnimalFarm])
+      })
+
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['tgg', 'af'],
+      })
+    })
+
+    test('setAll', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.setAll(draft, [TheGreatGatsby, AnimalFarm])
+      })
+
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['tgg', 'af'],
+      })
+    })
+
+    test('updateOne', () => {
+      const withOne = adapter.addOne(state, TheGreatGatsby)
+      const changes = { title: 'A New Hope' }
+      const result = createNextState(withOne, (draft) => {
+        adapter.updateOne(draft, {
+          id: TheGreatGatsby.id,
+          changes,
+        })
+      })
+
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'A New Hope',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('updateMany', () => {
+      const firstChange = { title: 'First Change' }
+      const secondChange = { title: 'Second Change' }
+      const thirdChange = { title: 'Third Change' }
+      const fourthChange = { author: 'Fourth Change' }
+      const withMany = adapter.setAll(state, [
+        TheGreatGatsby,
+        AClockworkOrange,
+        TheHobbit,
+      ])
+
+      const result = createNextState(withMany, (draft) => {
+        adapter.updateMany(draft, [
+          { id: TheHobbit.id, changes: firstChange },
+          { id: TheGreatGatsby.id, changes: secondChange },
+          { id: AClockworkOrange.id, changes: thirdChange },
+          { id: TheHobbit.id, changes: fourthChange },
+        ])
+      })
+
+      expect(result).toEqual({
+        entities: {
+          aco: {
+            id: 'aco',
+            title: 'Third Change',
+          },
+          tgg: {
+            id: 'tgg',
+            title: 'Second Change',
+          },
+          th: {
+            author: 'Fourth Change',
+            id: 'th',
+            title: 'First Change',
+          },
+        },
+        ids: ['tgg', 'aco', 'th'],
+      })
+    })
+
+    test('upsertOne (insert)', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.upsertOne(draft, TheGreatGatsby)
+      })
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('upsertOne (update)', () => {
+      const withOne = adapter.upsertOne(state, TheGreatGatsby)
+      const result = createNextState(withOne, (draft) => {
+        adapter.upsertOne(draft, {
+          id: TheGreatGatsby.id,
+          title: 'A New Hope',
+        })
+      })
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'A New Hope',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('upsertMany', () => {
+      const withOne = adapter.upsertOne(state, TheGreatGatsby)
+      const result = createNextState(withOne, (draft) => {
+        adapter.upsertMany(draft, [
+          {
+            id: TheGreatGatsby.id,
+            title: 'A New Hope',
+          },
+          AnimalFarm,
+        ])
+      })
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+          tgg: {
+            id: 'tgg',
+            title: 'A New Hope',
+          },
+        },
+        ids: ['tgg', 'af'],
+      })
+    })
+
+    test('setOne (insert)', () => {
+      const result = createNextState(state, (draft) => {
+        adapter.setOne(draft, TheGreatGatsby)
+      })
+      expect(result).toEqual({
+        entities: {
+          tgg: {
+            id: 'tgg',
+            title: 'The Great Gatsby',
+          },
+        },
+        ids: ['tgg'],
+      })
+    })
+
+    test('setOne (update)', () => {
+      const withOne = adapter.setOne(state, TheHobbit)
+      const result = createNextState(withOne, (draft) => {
+        adapter.setOne(draft, {
+          id: TheHobbit.id,
+          title: 'Silmarillion',
+        })
+      })
+      expect(result).toEqual({
+        entities: {
+          th: {
+            id: 'th',
+            title: 'Silmarillion',
+          },
+        },
+        ids: ['th'],
+      })
+    })
+
+    test('setMany', () => {
+      const withOne = adapter.setOne(state, TheHobbit)
+      const result = createNextState(withOne, (draft) => {
+        adapter.setMany(draft, [
+          {
+            id: TheHobbit.id,
+            title: 'Silmarillion',
+          },
+          AnimalFarm,
+        ])
+      })
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+          th: {
+            id: 'th',
+            title: 'Silmarillion',
+          },
+        },
+        ids: ['th', 'af'],
+      })
+    })
+
+    test('removeOne', () => {
+      const withTwo = adapter.addMany(state, [TheGreatGatsby, AnimalFarm])
+      const result = createNextState(withTwo, (draft) => {
+        adapter.removeOne(draft, TheGreatGatsby.id)
+      })
+      expect(result).toEqual({
+        entities: {
+          af: {
+            id: 'af',
+            title: 'Animal Farm',
+          },
+        },
+        ids: ['af'],
+      })
+    })
+
+    test('removeMany', () => {
+      const withThree = adapter.addMany(state, [
+        TheGreatGatsby,
+        AnimalFarm,
+        AClockworkOrange,
+      ])
+      const result = createNextState(withThree, (draft) => {
+        adapter.removeMany(draft, [TheGreatGatsby.id, AnimalFarm.id])
+      })
+      expect(result).toEqual({
+        entities: {
+          aco: {
+            id: 'aco',
+            title: 'A Clockwork Orange',
+          },
+        },
+        ids: ['aco'],
+      })
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/entities/tests/utils.spec.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/tests/utils.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/tests/utils.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import { AClockworkOrange } from './fixtures/book'
+
+describe('Entity utils', () => {
+  describe(`selectIdValue()`, () => {
+    const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(noop)
+
+    beforeEach(() => {
+      vi.resetModules() // this is important - it clears the cache
+      vi.stubEnv('NODE_ENV', 'development')
+    })
+
+    afterEach(() => {
+      vi.unstubAllEnvs()
+      vi.clearAllMocks()
+    })
+
+    afterAll(() => {
+      vi.restoreAllMocks()
+    })
+
+    it('should not warn when key does exist', async () => {
+      const { selectIdValue } = await import('../utils')
+
+      selectIdValue(AClockworkOrange, (book: any) => book.id)
+      expect(consoleWarnSpy).not.toHaveBeenCalled()
+    })
+
+    it('should warn when key does not exist in dev mode', async () => {
+      const { selectIdValue } = await import('../utils')
+
+      expect(process.env.NODE_ENV).toBe('development')
+
+      selectIdValue(AClockworkOrange, (book: any) => book.foo)
+
+      expect(consoleWarnSpy).toHaveBeenCalledOnce()
+    })
+
+    it('should warn when key is undefined in dev mode', async () => {
+      const { selectIdValue } = await import('../utils')
+
+      expect(process.env.NODE_ENV).toBe('development')
+
+      const undefinedAClockworkOrange = { ...AClockworkOrange, id: undefined }
+      selectIdValue(undefinedAClockworkOrange, (book: any) => book.id)
+
+      expect(consoleWarnSpy).toHaveBeenCalledOnce()
+    })
+
+    it('should not warn when key does not exist in prod mode', async () => {
+      vi.stubEnv('NODE_ENV', 'production')
+
+      const { selectIdValue } = await import('../utils')
+
+      selectIdValue(AClockworkOrange, (book: any) => book.foo)
+
+      expect(consoleWarnSpy).not.toHaveBeenCalled()
+    })
+
+    it('should not warn when key is undefined in prod mode', async () => {
+      vi.stubEnv('NODE_ENV', 'production')
+
+      const { selectIdValue } = await import('../utils')
+
+      const undefinedAClockworkOrange = { ...AClockworkOrange, id: undefined }
+      selectIdValue(undefinedAClockworkOrange, (book: any) => book.id)
+
+      expect(consoleWarnSpy).not.toHaveBeenCalled()
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/entities/unsorted_state_adapter.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/unsorted_state_adapter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/unsorted_state_adapter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,204 @@
+import type { Draft } from 'immer'
+import type {
+  EntityStateAdapter,
+  IdSelector,
+  Update,
+  EntityId,
+  DraftableEntityState,
+} from './models'
+import {
+  createStateOperator,
+  createSingleArgumentStateOperator,
+} from './state_adapter'
+import {
+  selectIdValue,
+  ensureEntitiesArray,
+  splitAddedUpdatedEntities,
+} from './utils'
+
+export function createUnsortedStateAdapter<T, Id extends EntityId>(
+  selectId: IdSelector<T, Id>,
+): EntityStateAdapter<T, Id> {
+  type R = DraftableEntityState<T, Id>
+
+  function addOneMutably(entity: T, state: R): void {
+    const key = selectIdValue(entity, selectId)
+
+    if (key in state.entities) {
+      return
+    }
+
+    state.ids.push(key as Id & Draft<Id>)
+    ;(state.entities as Record<Id, T>)[key] = entity
+  }
+
+  function addManyMutably(
+    newEntities: readonly T[] | Record<Id, T>,
+    state: R,
+  ): void {
+    newEntities = ensureEntitiesArray(newEntities)
+
+    for (const entity of newEntities) {
+      addOneMutably(entity, state)
+    }
+  }
+
+  function setOneMutably(entity: T, state: R): void {
+    const key = selectIdValue(entity, selectId)
+    if (!(key in state.entities)) {
+      state.ids.push(key as Id & Draft<Id>)
+    }
+    ;(state.entities as Record<Id, T>)[key] = entity
+  }
+
+  function setManyMutably(
+    newEntities: readonly T[] | Record<Id, T>,
+    state: R,
+  ): void {
+    newEntities = ensureEntitiesArray(newEntities)
+    for (const entity of newEntities) {
+      setOneMutably(entity, state)
+    }
+  }
+
+  function setAllMutably(
+    newEntities: readonly T[] | Record<Id, T>,
+    state: R,
+  ): void {
+    newEntities = ensureEntitiesArray(newEntities)
+
+    state.ids = []
+    state.entities = {} as Record<Id, T>
+
+    addManyMutably(newEntities, state)
+  }
+
+  function removeOneMutably(key: Id, state: R): void {
+    return removeManyMutably([key], state)
+  }
+
+  function removeManyMutably(keys: readonly Id[], state: R): void {
+    let didMutate = false
+
+    keys.forEach((key) => {
+      if (key in state.entities) {
+        delete (state.entities as Record<Id, T>)[key]
+        didMutate = true
+      }
+    })
+
+    if (didMutate) {
+      state.ids = (state.ids as Id[]).filter((id) => id in state.entities) as
+        | Id[]
+        | Draft<Id[]>
+    }
+  }
+
+  function removeAllMutably(state: R): void {
+    Object.assign(state, {
+      ids: [],
+      entities: {},
+    })
+  }
+
+  function takeNewKey(
+    keys: { [id: string]: Id },
+    update: Update<T, Id>,
+    state: R,
+  ): boolean {
+    const original: T | undefined = (state.entities as Record<Id, T>)[update.id]
+    if (original === undefined) {
+      return false
+    }
+    const updated: T = Object.assign({}, original, update.changes)
+    const newKey = selectIdValue(updated, selectId)
+    const hasNewKey = newKey !== update.id
+
+    if (hasNewKey) {
+      keys[update.id] = newKey
+      delete (state.entities as Record<Id, T>)[update.id]
+    }
+
+    ;(state.entities as Record<Id, T>)[newKey] = updated
+
+    return hasNewKey
+  }
+
+  function updateOneMutably(update: Update<T, Id>, state: R): void {
+    return updateManyMutably([update], state)
+  }
+
+  function updateManyMutably(
+    updates: ReadonlyArray<Update<T, Id>>,
+    state: R,
+  ): void {
+    const newKeys: { [id: string]: Id } = {}
+
+    const updatesPerEntity: { [id: string]: Update<T, Id> } = {}
+
+    updates.forEach((update) => {
+      // Only apply updates to entities that currently exist
+      if (update.id in state.entities) {
+        // If there are multiple updates to one entity, merge them together
+        updatesPerEntity[update.id] = {
+          id: update.id,
+          // Spreads ignore falsy values, so this works even if there isn't
+          // an existing update already at this key
+          changes: {
+            ...updatesPerEntity[update.id]?.changes,
+            ...update.changes,
+          },
+        }
+      }
+    })
+
+    updates = Object.values(updatesPerEntity)
+
+    const didMutateEntities = updates.length > 0
+
+    if (didMutateEntities) {
+      const didMutateIds =
+        updates.filter((update) => takeNewKey(newKeys, update, state)).length >
+        0
+
+      if (didMutateIds) {
+        state.ids = Object.values(state.entities).map((e) =>
+          selectIdValue(e as T, selectId),
+        )
+      }
+    }
+  }
+
+  function upsertOneMutably(entity: T, state: R): void {
+    return upsertManyMutably([entity], state)
+  }
+
+  function upsertManyMutably(
+    newEntities: readonly T[] | Record<Id, T>,
+    state: R,
+  ): void {
+    const [added, updated] = splitAddedUpdatedEntities<T, Id>(
+      newEntities,
+      selectId,
+      state,
+    )
+
+    addManyMutably(added, state)
+    updateManyMutably(updated, state)
+  }
+
+  return {
+    removeAll: createSingleArgumentStateOperator(removeAllMutably),
+    addOne: createStateOperator(addOneMutably),
+    addMany: createStateOperator(addManyMutably),
+    setOne: createStateOperator(setOneMutably),
+    setMany: createStateOperator(setManyMutably),
+    setAll: createStateOperator(setAllMutably),
+    updateOne: createStateOperator(updateOneMutably),
+    updateMany: createStateOperator(updateManyMutably),
+    upsertOne: createStateOperator(upsertOneMutably),
+    upsertMany: createStateOperator(upsertManyMutably),
+    removeOne: createStateOperator(removeOneMutably),
+    removeMany: createStateOperator(removeManyMutably),
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/entities/utils.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/entities/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/entities/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+import type { Draft } from 'immer'
+import { current, isDraft } from 'immer'
+import type {
+  DraftableEntityState,
+  EntityId,
+  IdSelector,
+  Update,
+} from './models'
+
+export function selectIdValue<T, Id extends EntityId>(
+  entity: T,
+  selectId: IdSelector<T, Id>,
+) {
+  const key = selectId(entity)
+
+  if (process.env.NODE_ENV !== 'production' && key === undefined) {
+    console.warn(
+      'The entity passed to the `selectId` implementation returned undefined.',
+      'You should probably provide your own `selectId` implementation.',
+      'The entity that was passed:',
+      entity,
+      'The `selectId` implementation:',
+      selectId.toString(),
+    )
+  }
+
+  return key
+}
+
+export function ensureEntitiesArray<T, Id extends EntityId>(
+  entities: readonly T[] | Record<Id, T>,
+): readonly T[] {
+  if (!Array.isArray(entities)) {
+    entities = Object.values(entities)
+  }
+
+  return entities
+}
+
+export function getCurrent<T>(value: T | Draft<T>): T {
+  return (isDraft(value) ? current(value) : value) as T
+}
+
+export function splitAddedUpdatedEntities<T, Id extends EntityId>(
+  newEntities: readonly T[] | Record<Id, T>,
+  selectId: IdSelector<T, Id>,
+  state: DraftableEntityState<T, Id>,
+): [T[], Update<T, Id>[], Id[]] {
+  newEntities = ensureEntitiesArray(newEntities)
+
+  const existingIdsArray = getCurrent(state.ids)
+  const existingIds = new Set<Id>(existingIdsArray)
+
+  const added: T[] = []
+  const addedIds = new Set<Id>([])
+  const updated: Update<T, Id>[] = []
+
+  for (const entity of newEntities) {
+    const id = selectIdValue(entity, selectId)
+    if (existingIds.has(id) || addedIds.has(id)) {
+      updated.push({ id, changes: entity })
+    } else {
+      addedIds.add(id)
+      added.push(entity)
+    }
+  }
+  return [added, updated, existingIdsArray]
+}
Index: node_modules/@reduxjs/toolkit/src/formatProdErrorMessage.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/formatProdErrorMessage.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/formatProdErrorMessage.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+/**
+ * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js
+ *
+ * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes
+ * during build.
+ * @param {number} code
+ */
+export function formatProdErrorMessage(code: number) {
+  return (
+    `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or ` +
+    'use the non-minified dev environment for full errors. '
+  )
+}
Index: node_modules/@reduxjs/toolkit/src/getDefaultEnhancers.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/getDefaultEnhancers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/getDefaultEnhancers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import type { StoreEnhancer } from 'redux'
+import type { AutoBatchOptions } from './autoBatchEnhancer'
+import { autoBatchEnhancer } from './autoBatchEnhancer'
+import { Tuple } from './utils'
+import type { Middlewares } from './configureStore'
+import type { ExtractDispatchExtensions } from './tsHelpers'
+
+type GetDefaultEnhancersOptions = {
+  autoBatch?: boolean | AutoBatchOptions
+}
+
+export type GetDefaultEnhancers<M extends Middlewares<any>> = (
+  options?: GetDefaultEnhancersOptions,
+) => Tuple<[StoreEnhancer<{ dispatch: ExtractDispatchExtensions<M> }>]>
+
+export const buildGetDefaultEnhancers = <M extends Middlewares<any>>(
+  middlewareEnhancer: StoreEnhancer<{ dispatch: ExtractDispatchExtensions<M> }>,
+): GetDefaultEnhancers<M> =>
+  function getDefaultEnhancers(options) {
+    const { autoBatch = true } = options ?? {}
+
+    let enhancerArray = new Tuple<StoreEnhancer[]>(middlewareEnhancer)
+    if (autoBatch) {
+      enhancerArray.push(
+        autoBatchEnhancer(
+          typeof autoBatch === 'object' ? autoBatch : undefined,
+        ),
+      )
+    }
+    return enhancerArray as any
+  }
Index: node_modules/@reduxjs/toolkit/src/getDefaultMiddleware.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/getDefaultMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/getDefaultMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,113 @@
+import type { Middleware, UnknownAction } from 'redux'
+import type { ThunkMiddleware } from 'redux-thunk'
+import { thunk as thunkMiddleware, withExtraArgument } from 'redux-thunk'
+import type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware'
+import { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware'
+import type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware'
+/* PROD_START_REMOVE_UMD */
+import { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware'
+/* PROD_STOP_REMOVE_UMD */
+
+import type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware'
+import { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware'
+import type { ExcludeFromTuple } from './tsHelpers'
+import { Tuple } from './utils'
+
+function isBoolean(x: any): x is boolean {
+  return typeof x === 'boolean'
+}
+
+interface ThunkOptions<E = any> {
+  extraArgument: E
+}
+
+interface GetDefaultMiddlewareOptions {
+  thunk?: boolean | ThunkOptions
+  immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions
+  serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions
+  actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions
+}
+
+export type ThunkMiddlewareFor<
+  S,
+  O extends GetDefaultMiddlewareOptions = {},
+> = O extends {
+  thunk: false
+}
+  ? never
+  : O extends { thunk: { extraArgument: infer E } }
+    ? ThunkMiddleware<S, UnknownAction, E>
+    : ThunkMiddleware<S, UnknownAction>
+
+export type GetDefaultMiddleware<S = any> = <
+  O extends GetDefaultMiddlewareOptions = {
+    thunk: true
+    immutableCheck: true
+    serializableCheck: true
+    actionCreatorCheck: true
+  },
+>(
+  options?: O,
+) => Tuple<ExcludeFromTuple<[ThunkMiddlewareFor<S, O>], never>>
+
+export const buildGetDefaultMiddleware = <S = any>(): GetDefaultMiddleware<S> =>
+  function getDefaultMiddleware(options) {
+    const {
+      thunk = true,
+      immutableCheck = true,
+      serializableCheck = true,
+      actionCreatorCheck = true,
+    } = options ?? {}
+
+    let middlewareArray = new Tuple<Middleware[]>()
+
+    if (thunk) {
+      if (isBoolean(thunk)) {
+        middlewareArray.push(thunkMiddleware)
+      } else {
+        middlewareArray.push(withExtraArgument(thunk.extraArgument))
+      }
+    }
+
+    if (process.env.NODE_ENV !== 'production') {
+      if (immutableCheck) {
+        /* PROD_START_REMOVE_UMD */
+        let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {}
+
+        if (!isBoolean(immutableCheck)) {
+          immutableOptions = immutableCheck
+        }
+
+        middlewareArray.unshift(
+          createImmutableStateInvariantMiddleware(immutableOptions),
+        )
+        /* PROD_STOP_REMOVE_UMD */
+      }
+
+      if (serializableCheck) {
+        let serializableOptions: SerializableStateInvariantMiddlewareOptions =
+          {}
+
+        if (!isBoolean(serializableCheck)) {
+          serializableOptions = serializableCheck
+        }
+
+        middlewareArray.push(
+          createSerializableStateInvariantMiddleware(serializableOptions),
+        )
+      }
+      if (actionCreatorCheck) {
+        let actionCreatorOptions: ActionCreatorInvariantMiddlewareOptions = {}
+
+        if (!isBoolean(actionCreatorCheck)) {
+          actionCreatorOptions = actionCreatorCheck
+        }
+
+        middlewareArray.unshift(
+          createActionCreatorInvariantMiddleware(actionCreatorOptions),
+        )
+      }
+    }
+
+    return middlewareArray as any
+  }
Index: node_modules/@reduxjs/toolkit/src/immutableStateInvariantMiddleware.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/immutableStateInvariantMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/immutableStateInvariantMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,263 @@
+import type { Middleware } from 'redux'
+import type { IgnorePaths } from './serializableStateInvariantMiddleware'
+import { getTimeMeasureUtils } from './utils'
+
+type EntryProcessor = (key: string, value: any) => any
+
+/**
+ * The default `isImmutable` function.
+ *
+ * @public
+ */
+export function isImmutableDefault(value: unknown): boolean {
+  return typeof value !== 'object' || value == null || Object.isFrozen(value)
+}
+
+export function trackForMutations(
+  isImmutable: IsImmutableFunc,
+  ignorePaths: IgnorePaths | undefined,
+  obj: any,
+) {
+  const trackedProperties = trackProperties(isImmutable, ignorePaths, obj)
+  return {
+    detectMutations() {
+      return detectMutations(isImmutable, ignorePaths, trackedProperties, obj)
+    },
+  }
+}
+
+interface TrackedProperty {
+  value: any
+  children: Record<string, any>
+}
+
+function trackProperties(
+  isImmutable: IsImmutableFunc,
+  ignorePaths: IgnorePaths = [],
+  obj: Record<string, any>,
+  path: string = '',
+  checkedObjects: Set<Record<string, any>> = new Set(),
+) {
+  const tracked: Partial<TrackedProperty> = { value: obj }
+
+  if (!isImmutable(obj) && !checkedObjects.has(obj)) {
+    checkedObjects.add(obj)
+    tracked.children = {}
+
+    for (const key in obj) {
+      const childPath = path ? path + '.' + key : key
+      if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {
+        continue
+      }
+
+      tracked.children[key] = trackProperties(
+        isImmutable,
+        ignorePaths,
+        obj[key],
+        childPath,
+      )
+    }
+  }
+  return tracked as TrackedProperty
+}
+
+function detectMutations(
+  isImmutable: IsImmutableFunc,
+  ignoredPaths: IgnorePaths = [],
+  trackedProperty: TrackedProperty,
+  obj: any,
+  sameParentRef: boolean = false,
+  path: string = '',
+): { wasMutated: boolean; path?: string } {
+  const prevObj = trackedProperty ? trackedProperty.value : undefined
+
+  const sameRef = prevObj === obj
+
+  if (sameParentRef && !sameRef && !Number.isNaN(obj)) {
+    return { wasMutated: true, path }
+  }
+
+  if (isImmutable(prevObj) || isImmutable(obj)) {
+    return { wasMutated: false }
+  }
+
+  // Gather all keys from prev (tracked) and after objs
+  const keysToDetect: Record<string, boolean> = {}
+  for (let key in trackedProperty.children) {
+    keysToDetect[key] = true
+  }
+  for (let key in obj) {
+    keysToDetect[key] = true
+  }
+
+  const hasIgnoredPaths = ignoredPaths.length > 0
+
+  for (let key in keysToDetect) {
+    const nestedPath = path ? path + '.' + key : key
+
+    if (hasIgnoredPaths) {
+      const hasMatches = ignoredPaths.some((ignored) => {
+        if (ignored instanceof RegExp) {
+          return ignored.test(nestedPath)
+        }
+        return nestedPath === ignored
+      })
+      if (hasMatches) {
+        continue
+      }
+    }
+
+    const result = detectMutations(
+      isImmutable,
+      ignoredPaths,
+      trackedProperty.children[key],
+      obj[key],
+      sameRef,
+      nestedPath,
+    )
+
+    if (result.wasMutated) {
+      return result
+    }
+  }
+  return { wasMutated: false }
+}
+
+type IsImmutableFunc = (value: any) => boolean
+
+/**
+ * Options for `createImmutableStateInvariantMiddleware()`.
+ *
+ * @public
+ */
+export interface ImmutableStateInvariantMiddlewareOptions {
+  /**
+    Callback function to check if a value is considered to be immutable.
+    This function is applied recursively to every value contained in the state.
+    The default implementation will return true for primitive types
+    (like numbers, strings, booleans, null and undefined).
+   */
+  isImmutable?: IsImmutableFunc
+  /**
+    An array of dot-separated path strings that match named nodes from
+    the root state to ignore when checking for immutability.
+    Defaults to undefined
+   */
+  ignoredPaths?: IgnorePaths
+  /** Print a warning if checks take longer than N ms. Default: 32ms */
+  warnAfter?: number
+}
+
+/**
+ * Creates a middleware that checks whether any state was mutated in between
+ * dispatches or during a dispatch. If any mutations are detected, an error is
+ * thrown.
+ *
+ * @param options Middleware options.
+ *
+ * @public
+ */
+export function createImmutableStateInvariantMiddleware(
+  options: ImmutableStateInvariantMiddlewareOptions = {},
+): Middleware {
+  if (process.env.NODE_ENV === 'production') {
+    return () => (next) => (action) => next(action)
+  } else {
+    function stringify(
+      obj: any,
+      serializer?: EntryProcessor,
+      indent?: string | number,
+      decycler?: EntryProcessor,
+    ): string {
+      return JSON.stringify(obj, getSerialize(serializer, decycler), indent)
+    }
+
+    function getSerialize(
+      serializer?: EntryProcessor,
+      decycler?: EntryProcessor,
+    ): EntryProcessor {
+      let stack: any[] = [],
+        keys: any[] = []
+
+      if (!decycler)
+        decycler = function (_: string, value: any) {
+          if (stack[0] === value) return '[Circular ~]'
+          return (
+            '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']'
+          )
+        }
+
+      return function (this: any, key: string, value: any) {
+        if (stack.length > 0) {
+          var thisPos = stack.indexOf(this)
+          ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)
+          ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)
+          if (~stack.indexOf(value)) value = decycler!.call(this, key, value)
+        } else stack.push(value)
+
+        return serializer == null ? value : serializer.call(this, key, value)
+      }
+    }
+
+    let {
+      isImmutable = isImmutableDefault,
+      ignoredPaths,
+      warnAfter = 32,
+    } = options
+
+    const track = trackForMutations.bind(null, isImmutable, ignoredPaths)
+
+    return ({ getState }) => {
+      let state = getState()
+      let tracker = track(state)
+
+      let result
+      return (next) => (action) => {
+        const measureUtils = getTimeMeasureUtils(
+          warnAfter,
+          'ImmutableStateInvariantMiddleware',
+        )
+
+        measureUtils.measureTime(() => {
+          state = getState()
+
+          result = tracker.detectMutations()
+          // Track before potentially not meeting the invariant
+          tracker = track(state)
+
+          if (result.wasMutated) {
+            throw new Error(
+              `A state mutation was detected between dispatches, in the path '${
+                result.path || ''
+              }'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`,
+            )
+          }
+        })
+
+        const dispatchedAction = next(action)
+
+        measureUtils.measureTime(() => {
+          state = getState()
+
+          result = tracker.detectMutations()
+          // Track before potentially not meeting the invariant
+          tracker = track(state)
+
+          if (result.wasMutated) {
+            throw new Error(
+              `A state mutation was detected inside a dispatch, in the path: ${
+                result.path || ''
+              }. Take a look at the reducer(s) handling the action ${stringify(
+                action,
+              )}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`,
+            )
+          }
+        })
+
+        measureUtils.warnIfExceeded()
+
+        return dispatchedAction
+      }
+    }
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,215 @@
+// This must remain here so that the `mangleErrors.cjs` build script
+// does not have to import this into each source file it rewrites.
+import { formatProdErrorMessage } from './formatProdErrorMessage'
+
+export * from 'redux'
+export {
+  produce as createNextState,
+  current,
+  freeze,
+  original,
+  isDraft,
+} from 'immer'
+export type { Draft } from 'immer'
+export {
+  createSelector,
+  createSelectorCreator,
+  lruMemoize,
+  weakMapMemoize,
+} from 'reselect'
+export type { Selector, OutputSelector } from 'reselect'
+export {
+  createDraftSafeSelector,
+  createDraftSafeSelectorCreator,
+} from './createDraftSafeSelector'
+export type { ThunkAction, ThunkDispatch, ThunkMiddleware } from 'redux-thunk'
+
+export {
+  // js
+  configureStore,
+} from './configureStore'
+export type {
+  // types
+  ConfigureStoreOptions,
+  EnhancedStore,
+} from './configureStore'
+export type { DevToolsEnhancerOptions } from './devtoolsExtension'
+export {
+  // js
+  createAction,
+  isActionCreator,
+  isFSA as isFluxStandardAction,
+} from './createAction'
+export type {
+  // types
+  PayloadAction,
+  PayloadActionCreator,
+  ActionCreatorWithNonInferrablePayload,
+  ActionCreatorWithOptionalPayload,
+  ActionCreatorWithPayload,
+  ActionCreatorWithoutPayload,
+  ActionCreatorWithPreparedPayload,
+  PrepareAction,
+} from './createAction'
+export {
+  // js
+  createReducer,
+} from './createReducer'
+export type {
+  // types
+  Actions,
+  CaseReducer,
+  CaseReducers,
+} from './createReducer'
+export {
+  // js
+  createSlice,
+  buildCreateSlice,
+  asyncThunkCreator,
+  ReducerType,
+} from './createSlice'
+
+export type {
+  // types
+  CreateSliceOptions,
+  Slice,
+  CaseReducerActions,
+  SliceCaseReducers,
+  ValidateSliceCaseReducers,
+  CaseReducerWithPrepare,
+  ReducerCreators,
+  SliceSelectors,
+} from './createSlice'
+export type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware'
+export { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware'
+export {
+  // js
+  createImmutableStateInvariantMiddleware,
+  isImmutableDefault,
+} from './immutableStateInvariantMiddleware'
+export type {
+  // types
+  ImmutableStateInvariantMiddlewareOptions,
+} from './immutableStateInvariantMiddleware'
+export {
+  // js
+  createSerializableStateInvariantMiddleware,
+  findNonSerializableValue,
+  isPlain,
+} from './serializableStateInvariantMiddleware'
+export type {
+  // types
+  SerializableStateInvariantMiddlewareOptions,
+} from './serializableStateInvariantMiddleware'
+export type {
+  // types
+  ActionReducerMapBuilder,
+} from './mapBuilders'
+export { Tuple } from './utils'
+
+export { createEntityAdapter } from './entities/create_adapter'
+export type {
+  EntityState,
+  EntityAdapter,
+  EntitySelectors,
+  EntityStateAdapter,
+  EntityId,
+  Update,
+  IdSelector,
+  Comparer,
+} from './entities/models'
+
+export {
+  createAsyncThunk,
+  unwrapResult,
+  miniSerializeError,
+} from './createAsyncThunk'
+export type {
+  AsyncThunk,
+  AsyncThunkOptions,
+  AsyncThunkAction,
+  AsyncThunkPayloadCreatorReturnValue,
+  AsyncThunkPayloadCreator,
+  GetState,
+  GetThunkAPI,
+  SerializedError,
+  CreateAsyncThunkFunction,
+} from './createAsyncThunk'
+
+export {
+  // js
+  isAllOf,
+  isAnyOf,
+  isPending,
+  isRejected,
+  isFulfilled,
+  isAsyncThunkAction,
+  isRejectedWithValue,
+} from './matchers'
+export type {
+  // types
+  ActionMatchingAllOf,
+  ActionMatchingAnyOf,
+} from './matchers'
+
+export { nanoid } from './nanoid'
+
+export type {
+  ListenerEffect,
+  ListenerMiddleware,
+  ListenerEffectAPI,
+  ListenerMiddlewareInstance,
+  CreateListenerMiddlewareOptions,
+  ListenerErrorHandler,
+  TypedStartListening,
+  TypedAddListener,
+  TypedStopListening,
+  TypedRemoveListener,
+  UnsubscribeListener,
+  UnsubscribeListenerOptions,
+  ForkedTaskExecutor,
+  ForkedTask,
+  ForkedTaskAPI,
+  AsyncTaskExecutor,
+  SyncTaskExecutor,
+  TaskCancelled,
+  TaskRejected,
+  TaskResolved,
+  TaskResult,
+} from './listenerMiddleware/index'
+export type { AnyListenerPredicate } from './listenerMiddleware/types'
+
+export {
+  createListenerMiddleware,
+  addListener,
+  removeListener,
+  clearAllListeners,
+  TaskAbortError,
+} from './listenerMiddleware/index'
+
+export type {
+  AddMiddleware,
+  DynamicDispatch,
+  DynamicMiddlewareInstance,
+  GetDispatchType as GetDispatch,
+  MiddlewareApiConfig,
+} from './dynamicMiddleware/types'
+export { createDynamicMiddleware } from './dynamicMiddleware/index'
+
+export {
+  SHOULD_AUTOBATCH,
+  prepareAutoBatched,
+  autoBatchEnhancer,
+} from './autoBatchEnhancer'
+export type { AutoBatchOptions } from './autoBatchEnhancer'
+
+export { combineSlices } from './combineSlices'
+
+export type { CombinedSliceReducer, WithSlice } from './combineSlices'
+
+export type {
+  ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions,
+  SafePromise,
+} from './tsHelpers'
+
+export { formatProdErrorMessage } from './formatProdErrorMessage'
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/exceptions.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/exceptions.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/exceptions.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import type { SerializedError } from '@reduxjs/toolkit'
+
+const task = 'task'
+const listener = 'listener'
+const completed = 'completed'
+const cancelled = 'cancelled'
+
+/* TaskAbortError error codes  */
+export const taskCancelled = `task-${cancelled}` as const
+export const taskCompleted = `task-${completed}` as const
+export const listenerCancelled = `${listener}-${cancelled}` as const
+export const listenerCompleted = `${listener}-${completed}` as const
+
+export class TaskAbortError implements SerializedError {
+  name = 'TaskAbortError'
+  message: string
+  constructor(public code: string | undefined) {
+    this.message = `${task} ${cancelled} (reason: ${code})`
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,543 @@
+import type { Action, Dispatch, MiddlewareAPI, UnknownAction } from 'redux'
+import { isAction } from 'redux'
+import type { ThunkDispatch } from 'redux-thunk'
+import { createAction } from '../createAction'
+import { nanoid } from '../nanoid'
+
+import {
+  TaskAbortError,
+  listenerCancelled,
+  listenerCompleted,
+  taskCancelled,
+  taskCompleted,
+} from './exceptions'
+import {
+  createDelay,
+  createPause,
+  raceWithSignal,
+  runTask,
+  validateActive,
+} from './task'
+import type {
+  AbortSignalWithReason,
+  AddListenerOverloads,
+  AnyListenerPredicate,
+  CreateListenerMiddlewareOptions,
+  FallbackAddListenerOptions,
+  ForkOptions,
+  ForkedTask,
+  ForkedTaskExecutor,
+  ListenerEntry,
+  ListenerErrorHandler,
+  ListenerErrorInfo,
+  ListenerMiddleware,
+  ListenerMiddlewareInstance,
+  TakePattern,
+  TaskResult,
+  TypedAddListener,
+  TypedCreateListenerEntry,
+  TypedRemoveListener,
+  UnsubscribeListener,
+  UnsubscribeListenerOptions,
+} from './types'
+import {
+  abortControllerWithReason,
+  addAbortSignalListener,
+  assertFunction,
+  catchRejection,
+  noop,
+} from './utils'
+export { TaskAbortError } from './exceptions'
+export type {
+  AsyncTaskExecutor,
+  CreateListenerMiddlewareOptions,
+  ForkedTask,
+  ForkedTaskAPI,
+  ForkedTaskExecutor,
+  ListenerEffect,
+  ListenerEffectAPI,
+  ListenerErrorHandler,
+  ListenerMiddleware,
+  ListenerMiddlewareInstance,
+  SyncTaskExecutor,
+  TaskCancelled,
+  TaskRejected,
+  TaskResolved,
+  TaskResult,
+  TypedAddListener,
+  TypedRemoveListener,
+  TypedStartListening,
+  TypedStopListening,
+  UnsubscribeListener,
+  UnsubscribeListenerOptions,
+} from './types'
+
+//Overly-aggressive byte-shaving
+const { assign } = Object
+/**
+ * @internal
+ */
+const INTERNAL_NIL_TOKEN = {} as const
+
+const alm = 'listenerMiddleware' as const
+
+const createFork = (
+  parentAbortSignal: AbortSignalWithReason<unknown>,
+  parentBlockingPromises: Promise<any>[],
+) => {
+  const linkControllers = (controller: AbortController) =>
+    addAbortSignalListener(parentAbortSignal, () =>
+      abortControllerWithReason(controller, parentAbortSignal.reason),
+    )
+
+  return <T>(
+    taskExecutor: ForkedTaskExecutor<T>,
+    opts?: ForkOptions,
+  ): ForkedTask<T> => {
+    assertFunction(taskExecutor, 'taskExecutor')
+    const childAbortController = new AbortController()
+
+    linkControllers(childAbortController)
+
+    const result = runTask<T>(
+      async (): Promise<T> => {
+        validateActive(parentAbortSignal)
+        validateActive(childAbortController.signal)
+        const result = (await taskExecutor({
+          pause: createPause(childAbortController.signal),
+          delay: createDelay(childAbortController.signal),
+          signal: childAbortController.signal,
+        })) as T
+        validateActive(childAbortController.signal)
+        return result
+      },
+      () => abortControllerWithReason(childAbortController, taskCompleted),
+    )
+
+    if (opts?.autoJoin) {
+      parentBlockingPromises.push(result.catch(noop))
+    }
+
+    return {
+      result: createPause<TaskResult<T>>(parentAbortSignal)(result),
+      cancel() {
+        abortControllerWithReason(childAbortController, taskCancelled)
+      },
+    }
+  }
+}
+
+const createTakePattern = <S>(
+  startListening: AddListenerOverloads<UnsubscribeListener, S, Dispatch>,
+  signal: AbortSignal,
+): TakePattern<S> => {
+  /**
+   * A function that takes a ListenerPredicate and an optional timeout,
+   * and resolves when either the predicate returns `true` based on an action
+   * state combination or when the timeout expires.
+   * If the parent listener is canceled while waiting, this will throw a
+   * TaskAbortError.
+   */
+  const take = async <P extends AnyListenerPredicate<S>>(
+    predicate: P,
+    timeout: number | undefined,
+  ) => {
+    validateActive(signal)
+
+    // Placeholder unsubscribe function until the listener is added
+    let unsubscribe: UnsubscribeListener = () => {}
+
+    const tuplePromise = new Promise<[Action, S, S]>((resolve, reject) => {
+      // Inside the Promise, we synchronously add the listener.
+      let stopListening = startListening({
+        predicate: predicate as any,
+        effect: (action, listenerApi): void => {
+          // One-shot listener that cleans up as soon as the predicate passes
+          listenerApi.unsubscribe()
+          // Resolve the promise with the same arguments the predicate saw
+          resolve([
+            action,
+            listenerApi.getState(),
+            listenerApi.getOriginalState(),
+          ])
+        },
+      })
+      unsubscribe = () => {
+        stopListening()
+        reject()
+      }
+    })
+
+    const promises: (Promise<null> | Promise<[Action, S, S]>)[] = [tuplePromise]
+
+    if (timeout != null) {
+      promises.push(
+        new Promise<null>((resolve) => setTimeout(resolve, timeout, null)),
+      )
+    }
+
+    try {
+      const output = await raceWithSignal(signal, Promise.race(promises))
+
+      validateActive(signal)
+      return output
+    } finally {
+      // Always clean up the listener
+      unsubscribe()
+    }
+  }
+
+  return ((predicate: AnyListenerPredicate<S>, timeout: number | undefined) =>
+    catchRejection(take(predicate, timeout))) as TakePattern<S>
+}
+
+const getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {
+  let { type, actionCreator, matcher, predicate, effect } = options
+
+  if (type) {
+    predicate = createAction(type).match
+  } else if (actionCreator) {
+    type = actionCreator!.type
+    predicate = actionCreator.match
+  } else if (matcher) {
+    predicate = matcher
+  } else if (predicate) {
+    // pass
+  } else {
+    throw new Error(
+      'Creating or removing a listener requires one of the known fields for matching an action',
+    )
+  }
+
+  assertFunction(effect, 'options.listener')
+
+  return { predicate, type, effect }
+}
+
+/** Accepts the possible options for creating a listener, and returns a formatted listener entry */
+export const createListenerEntry: TypedCreateListenerEntry<unknown> =
+  /* @__PURE__ */ assign(
+    (options: FallbackAddListenerOptions) => {
+      const { type, predicate, effect } = getListenerEntryPropsFrom(options)
+
+      const entry: ListenerEntry<unknown> = {
+        id: nanoid(),
+        effect,
+        type,
+        predicate,
+        pending: new Set<AbortController>(),
+        unsubscribe: () => {
+          throw new Error('Unsubscribe not initialized')
+        },
+      }
+
+      return entry
+    },
+    { withTypes: () => createListenerEntry },
+  ) as unknown as TypedCreateListenerEntry<unknown>
+
+const findListenerEntry = (
+  listenerMap: Map<string, ListenerEntry>,
+  options: FallbackAddListenerOptions,
+) => {
+  const { type, effect, predicate } = getListenerEntryPropsFrom(options)
+
+  return Array.from(listenerMap.values()).find((entry) => {
+    const matchPredicateOrType =
+      typeof type === 'string'
+        ? entry.type === type
+        : entry.predicate === predicate
+
+    return matchPredicateOrType && entry.effect === effect
+  })
+}
+
+const cancelActiveListeners = (
+  entry: ListenerEntry<unknown, Dispatch<UnknownAction>>,
+) => {
+  entry.pending.forEach((controller) => {
+    abortControllerWithReason(controller, listenerCancelled)
+  })
+}
+
+const createClearListenerMiddleware = (
+  listenerMap: Map<string, ListenerEntry>,
+) => {
+  return () => {
+    listenerMap.forEach(cancelActiveListeners)
+
+    listenerMap.clear()
+  }
+}
+
+/**
+ * Safely reports errors to the `errorHandler` provided.
+ * Errors that occur inside `errorHandler` are notified in a new task.
+ * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)
+ * @param errorHandler
+ * @param errorToNotify
+ */
+const safelyNotifyError = (
+  errorHandler: ListenerErrorHandler,
+  errorToNotify: unknown,
+  errorInfo: ListenerErrorInfo,
+): void => {
+  try {
+    errorHandler(errorToNotify, errorInfo)
+  } catch (errorHandlerError) {
+    // We cannot let an error raised here block the listener queue.
+    // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...
+    setTimeout(() => {
+      throw errorHandlerError
+    }, 0)
+  }
+}
+
+/**
+ * @public
+ */
+export const addListener = /* @__PURE__ */ assign(
+  /* @__PURE__ */ createAction(`${alm}/add`),
+  {
+    withTypes: () => addListener,
+  },
+) as unknown as TypedAddListener<unknown>
+
+/**
+ * @public
+ */
+export const clearAllListeners = /* @__PURE__ */ createAction(
+  `${alm}/removeAll`,
+)
+
+/**
+ * @public
+ */
+export const removeListener = /* @__PURE__ */ assign(
+  /* @__PURE__ */ createAction(`${alm}/remove`),
+  {
+    withTypes: () => removeListener,
+  },
+) as unknown as TypedRemoveListener<unknown>
+
+const defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {
+  console.error(`${alm}/error`, ...args)
+}
+
+/**
+ * @public
+ */
+export const createListenerMiddleware = <
+  StateType = unknown,
+  DispatchType extends Dispatch<Action> = ThunkDispatch<
+    StateType,
+    unknown,
+    UnknownAction
+  >,
+  ExtraArgument = unknown,
+>(
+  middlewareOptions: CreateListenerMiddlewareOptions<ExtraArgument> = {},
+) => {
+  const listenerMap = new Map<string, ListenerEntry>()
+  const { extra, onError = defaultErrorHandler } = middlewareOptions
+
+  assertFunction(onError, 'onError')
+
+  const insertEntry = (entry: ListenerEntry) => {
+    entry.unsubscribe = () => listenerMap.delete(entry.id)
+
+    listenerMap.set(entry.id, entry)
+    return (cancelOptions?: UnsubscribeListenerOptions) => {
+      entry.unsubscribe()
+      if (cancelOptions?.cancelActive) {
+        cancelActiveListeners(entry)
+      }
+    }
+  }
+
+  const startListening = ((options: FallbackAddListenerOptions) => {
+    const entry =
+      findListenerEntry(listenerMap, options) ??
+      createListenerEntry(options as any)
+
+    return insertEntry(entry)
+  }) as AddListenerOverloads<any>
+
+  assign(startListening, {
+    withTypes: () => startListening,
+  })
+
+  const stopListening = (
+    options: FallbackAddListenerOptions & UnsubscribeListenerOptions,
+  ): boolean => {
+    const entry = findListenerEntry(listenerMap, options)
+
+    if (entry) {
+      entry.unsubscribe()
+      if (options.cancelActive) {
+        cancelActiveListeners(entry)
+      }
+    }
+
+    return !!entry
+  }
+
+  assign(stopListening, {
+    withTypes: () => stopListening,
+  })
+
+  const notifyListener = async (
+    entry: ListenerEntry<unknown, Dispatch<UnknownAction>>,
+    action: unknown,
+    api: MiddlewareAPI,
+    getOriginalState: () => StateType,
+  ) => {
+    const internalTaskController = new AbortController()
+    const take = createTakePattern(
+      startListening as AddListenerOverloads<any>,
+      internalTaskController.signal,
+    )
+    const autoJoinPromises: Promise<any>[] = []
+
+    try {
+      entry.pending.add(internalTaskController)
+      await Promise.resolve(
+        entry.effect(
+          action,
+          // Use assign() rather than ... to avoid extra helper functions added to bundle
+          assign({}, api, {
+            getOriginalState,
+            condition: (
+              predicate: AnyListenerPredicate<any>,
+              timeout?: number,
+            ) => take(predicate, timeout).then(Boolean),
+            take,
+            delay: createDelay(internalTaskController.signal),
+            pause: createPause<any>(internalTaskController.signal),
+            extra,
+            signal: internalTaskController.signal,
+            fork: createFork(internalTaskController.signal, autoJoinPromises),
+            unsubscribe: entry.unsubscribe,
+            subscribe: () => {
+              listenerMap.set(entry.id, entry)
+            },
+            cancelActiveListeners: () => {
+              entry.pending.forEach((controller, _, set) => {
+                if (controller !== internalTaskController) {
+                  abortControllerWithReason(controller, listenerCancelled)
+                  set.delete(controller)
+                }
+              })
+            },
+            cancel: () => {
+              abortControllerWithReason(
+                internalTaskController,
+                listenerCancelled,
+              )
+              entry.pending.delete(internalTaskController)
+            },
+            throwIfCancelled: () => {
+              validateActive(internalTaskController.signal)
+            },
+          }),
+        ),
+      )
+    } catch (listenerError) {
+      if (!(listenerError instanceof TaskAbortError)) {
+        safelyNotifyError(onError, listenerError, {
+          raisedBy: 'effect',
+        })
+      }
+    } finally {
+      await Promise.all(autoJoinPromises)
+
+      abortControllerWithReason(internalTaskController, listenerCompleted) // Notify that the task has completed
+      entry.pending.delete(internalTaskController)
+    }
+  }
+
+  const clearListenerMiddleware = createClearListenerMiddleware(listenerMap)
+
+  const middleware: ListenerMiddleware<
+    StateType,
+    DispatchType,
+    ExtraArgument
+  > = (api) => (next) => (action) => {
+    if (!isAction(action)) {
+      // we only want to notify listeners for action objects
+      return next(action)
+    }
+
+    if (addListener.match(action)) {
+      return startListening(action.payload as any)
+    }
+
+    if (clearAllListeners.match(action)) {
+      clearListenerMiddleware()
+      return
+    }
+
+    if (removeListener.match(action)) {
+      return stopListening(action.payload)
+    }
+
+    // Need to get this state _before_ the reducer processes the action
+    let originalState: StateType | typeof INTERNAL_NIL_TOKEN = api.getState()
+
+    // `getOriginalState` can only be called synchronously.
+    // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820
+    const getOriginalState = (): StateType => {
+      if (originalState === INTERNAL_NIL_TOKEN) {
+        throw new Error(
+          `${alm}: getOriginalState can only be called synchronously`,
+        )
+      }
+
+      return originalState as StateType
+    }
+
+    let result: unknown
+
+    try {
+      // Actually forward the action to the reducer before we handle listeners
+      result = next(action)
+
+      if (listenerMap.size > 0) {
+        const currentState = api.getState()
+        // Work around ESBuild+TS transpilation issue
+        const listenerEntries = Array.from(listenerMap.values())
+        for (const entry of listenerEntries) {
+          let runListener = false
+
+          try {
+            runListener = entry.predicate(action, currentState, originalState)
+          } catch (predicateError) {
+            runListener = false
+
+            safelyNotifyError(onError, predicateError, {
+              raisedBy: 'predicate',
+            })
+          }
+
+          if (!runListener) {
+            continue
+          }
+
+          notifyListener(entry, action, api, getOriginalState)
+        }
+      }
+    } finally {
+      // Remove `originalState` store from this scope.
+      originalState = INTERNAL_NIL_TOKEN
+    }
+
+    return result
+  }
+
+  return {
+    middleware,
+    startListening,
+    stopListening,
+    clearListeners: clearListenerMiddleware,
+  } as ListenerMiddlewareInstance<StateType, DispatchType, ExtraArgument>
+}
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/task.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/task.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/task.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,101 @@
+import { TaskAbortError } from './exceptions'
+import type { AbortSignalWithReason, TaskResult } from './types'
+import { addAbortSignalListener, catchRejection, noop } from './utils'
+
+/**
+ * Synchronously raises {@link TaskAbortError} if the task tied to the input `signal` has been cancelled.
+ * @param signal
+ * @param reason
+ * @see {TaskAbortError}
+ */
+export const validateActive = (signal: AbortSignal): void => {
+  if (signal.aborted) {
+    const { reason } = signal as AbortSignalWithReason<string>
+    throw new TaskAbortError(reason)
+  }
+}
+
+/**
+ * Generates a race between the promise(s) and the AbortSignal
+ * This avoids `Promise.race()`-related memory leaks:
+ * https://github.com/nodejs/node/issues/17469#issuecomment-349794909
+ */
+export function raceWithSignal<T>(
+  signal: AbortSignalWithReason<string>,
+  promise: Promise<T>,
+): Promise<T> {
+  let cleanup = noop
+  return new Promise<T>((resolve, reject) => {
+    const notifyRejection = () => reject(new TaskAbortError(signal.reason))
+
+    if (signal.aborted) {
+      notifyRejection()
+      return
+    }
+
+    cleanup = addAbortSignalListener(signal, notifyRejection)
+    promise.finally(() => cleanup()).then(resolve, reject)
+  }).finally(() => {
+    // after this point, replace `cleanup` with a noop, so there is no reference to `signal` any more
+    cleanup = noop
+  })
+}
+
+/**
+ * Runs a task and returns promise that resolves to {@link TaskResult}.
+ * Second argument is an optional `cleanUp` function that always runs after task.
+ *
+ * **Note:** `runTask` runs the executor in the next microtask.
+ * @returns
+ */
+export const runTask = async <T>(
+  task: () => Promise<T>,
+  cleanUp?: () => void,
+): Promise<TaskResult<T>> => {
+  try {
+    await Promise.resolve()
+    const value = await task()
+    return {
+      status: 'ok',
+      value,
+    }
+  } catch (error: any) {
+    return {
+      status: error instanceof TaskAbortError ? 'cancelled' : 'rejected',
+      error,
+    }
+  } finally {
+    cleanUp?.()
+  }
+}
+
+/**
+ * Given an input `AbortSignal` and a promise returns another promise that resolves
+ * as soon the input promise is provided or rejects as soon as
+ * `AbortSignal.abort` is `true`.
+ * @param signal
+ * @returns
+ */
+export const createPause = <T>(signal: AbortSignal) => {
+  return (promise: Promise<T>): Promise<T> => {
+    return catchRejection(
+      raceWithSignal(signal, promise).then((output) => {
+        validateActive(signal)
+        return output
+      }),
+    )
+  }
+}
+
+/**
+ * Given an input `AbortSignal` and `timeoutMs` returns a promise that resolves
+ * after `timeoutMs` or rejects as soon as `AbortSignal.abort` is `true`.
+ * @param signal
+ * @returns
+ */
+export const createDelay = (signal: AbortSignal) => {
+  const pause = createPause<void>(signal)
+  return (timeoutMs: number): Promise<void> => {
+    return pause(new Promise<void>((resolve) => setTimeout(resolve, timeoutMs)))
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/effectScenarios.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/effectScenarios.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/effectScenarios.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,367 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import type { PayloadAction } from '@reduxjs/toolkit'
+import {
+  configureStore,
+  createAction,
+  createListenerMiddleware,
+  createSlice,
+  isAnyOf,
+  TaskAbortError,
+} from '@reduxjs/toolkit'
+
+describe('Saga-style Effects Scenarios', () => {
+  interface CounterState {
+    value: number
+  }
+
+  const counterSlice = createSlice({
+    name: 'counter',
+    initialState: { value: 0 } as CounterState,
+    reducers: {
+      increment(state) {
+        state.value += 1
+      },
+      decrement(state) {
+        state.value -= 1
+      },
+      // Use the PayloadAction type to declare the contents of `action.payload`
+      incrementByAmount: (state, action: PayloadAction<number>) => {
+        state.value += action.payload
+      },
+    },
+  })
+  const { increment, decrement, incrementByAmount } = counterSlice.actions
+
+  let { reducer } = counterSlice
+  let listenerMiddleware = createListenerMiddleware<CounterState>()
+  let { middleware, startListening, stopListening } = listenerMiddleware
+
+  let store = configureStore({
+    reducer,
+    middleware: (gDM) => gDM().prepend(middleware),
+  })
+
+  const testAction1 = createAction<string>('testAction1')
+  type TestAction1 = ReturnType<typeof testAction1>
+  const testAction2 = createAction<string>('testAction2')
+  type TestAction2 = ReturnType<typeof testAction2>
+  const testAction3 = createAction<string>('testAction3')
+  type TestAction3 = ReturnType<typeof testAction3>
+
+  type RootState = ReturnType<typeof store.getState>
+
+  function delay(ms: number) {
+    return new Promise((resolve) => setTimeout(resolve, ms))
+  }
+
+  const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+  beforeEach(() => {
+    listenerMiddleware = createListenerMiddleware<CounterState>()
+    middleware = listenerMiddleware.middleware
+    startListening = listenerMiddleware.startListening
+    store = configureStore({
+      reducer,
+      middleware: (gDM) => gDM().prepend(middleware),
+    })
+  })
+
+  afterEach(() => {
+    vi.clearAllMocks()
+  })
+
+  afterAll(() => {
+    vi.restoreAllMocks()
+  })
+
+  test('throttle', async () => {
+    // Ignore incoming actions for a given period of time while processing a task.
+    // Ref: https://redux-saga.js.org/docs/api#throttlems-pattern-saga-args
+
+    let listenerCalls = 0
+    let workPerformed = 0
+
+    startListening({
+      actionCreator: increment,
+      effect: (action, listenerApi) => {
+        listenerCalls++
+
+        // Stop listening until further notice
+        listenerApi.unsubscribe()
+
+        // Queue to start listening again after a delay
+        setTimeout(listenerApi.subscribe, 15)
+        workPerformed++
+      },
+    })
+
+    // Dispatch 3 actions. First triggers listener, next two ignored.
+    store.dispatch(increment())
+    store.dispatch(increment())
+    store.dispatch(increment())
+
+    // Wait for resubscription
+    await delay(25)
+
+    // Dispatch 2 more actions, first triggers, second ignored
+    store.dispatch(increment())
+    store.dispatch(increment())
+
+    // Wait for work
+    await delay(5)
+
+    // Both listener calls completed
+    expect(listenerCalls).toBe(2)
+    expect(workPerformed).toBe(2)
+  })
+
+  test('debounce / takeLatest', async () => {
+    // Repeated calls cancel previous ones, no work performed
+    // until the specified delay elapses without another call
+    // NOTE: This is also basically identical to `takeLatest`.
+    // Ref: https://redux-saga.js.org/docs/api#debouncems-pattern-saga-args
+    // Ref: https://redux-saga.js.org/docs/api#takelatestpattern-saga-args
+
+    let listenerCalls = 0
+    let workPerformed = 0
+
+    startListening({
+      actionCreator: increment,
+      effect: async (action, listenerApi) => {
+        listenerCalls++
+
+        // Cancel any in-progress instances of this listener
+        listenerApi.cancelActiveListeners()
+
+        // Delay before starting actual work
+        await listenerApi.delay(15)
+
+        workPerformed++
+      },
+    })
+
+    // First action, listener 1 starts, nothing to cancel
+    store.dispatch(increment())
+    // Second action, listener 2 starts, cancels 1
+    store.dispatch(increment())
+    // Third action, listener 3 starts, cancels 2
+    store.dispatch(increment())
+
+    // 3 listeners started, third is still paused
+    expect(listenerCalls).toBe(3)
+    expect(workPerformed).toBe(0)
+
+    await delay(25)
+
+    // All 3 started
+    expect(listenerCalls).toBe(3)
+    // First two canceled, `delay()` threw JobCanceled and skipped work.
+    // Third actually completed.
+    expect(workPerformed).toBe(1)
+  })
+
+  test('takeEvery', async () => {
+    // Runs the listener on every action match
+    // Ref: https://redux-saga.js.org/docs/api#takeeverypattern-saga-args
+
+    // NOTE: This is already the default behavior - nothing special here!
+
+    let listenerCalls = 0
+    startListening({
+      actionCreator: increment,
+      effect: (action, listenerApi) => {
+        listenerCalls++
+      },
+    })
+
+    store.dispatch(increment())
+    expect(listenerCalls).toBe(1)
+
+    store.dispatch(increment())
+    expect(listenerCalls).toBe(2)
+  })
+
+  test('takeLeading', async () => {
+    // Starts listener on first action, ignores others until task completes
+    // Ref: https://redux-saga.js.org/docs/api#takeleadingpattern-saga-args
+
+    let listenerCalls = 0
+    let workPerformed = 0
+
+    startListening({
+      actionCreator: increment,
+      effect: async (action, listenerApi) => {
+        listenerCalls++
+
+        // Stop listening for this action
+        listenerApi.unsubscribe()
+
+        // Pretend we're doing expensive work
+        await listenerApi.delay(25)
+
+        workPerformed++
+
+        // Re-enable the listener
+        listenerApi.subscribe()
+      },
+    })
+
+    // First action starts the listener, which unsubscribes
+    store.dispatch(increment())
+    // Second action is ignored
+    store.dispatch(increment())
+
+    // One instance in progress, but not complete
+    expect(listenerCalls).toBe(1)
+    expect(workPerformed).toBe(0)
+
+    await delay(5)
+
+    // In-progress listener not done yet
+    store.dispatch(increment())
+
+    // No changes in status
+    expect(listenerCalls).toBe(1)
+    expect(workPerformed).toBe(0)
+
+    await delay(50)
+
+    // Work finished, should have resubscribed
+    expect(workPerformed).toBe(1)
+
+    // Listener is re-subscribed, will trigger again
+    store.dispatch(increment())
+
+    expect(listenerCalls).toBe(2)
+    expect(workPerformed).toBe(1)
+
+    await delay(50)
+
+    expect(workPerformed).toBe(2)
+  })
+
+  test('fork + join', async () => {
+    // fork starts a child job, join waits for the child to complete and return a value
+    // Ref: https://redux-saga.js.org/docs/api#forkfn-args
+    // Ref: https://redux-saga.js.org/docs/api#jointask
+
+    let childResult = 0
+
+    startListening({
+      actionCreator: increment,
+      effect: async (_, listenerApi) => {
+        const childOutput = 42
+        // Spawn a child job and start it immediately
+        const result = await listenerApi.fork(async () => {
+          // Artificially wait a bit inside the child
+          await listenerApi.delay(5)
+          // Complete the child by returning an Outcome-wrapped value
+          return childOutput
+        }).result
+
+        // Unwrap the child result in the listener
+        if (result.status === 'ok') {
+          childResult = result.value
+        }
+      },
+    })
+
+    store.dispatch(increment())
+
+    await delay(10)
+    expect(childResult).toBe(42)
+  })
+
+  test('fork + cancel', async () => {
+    // fork starts a child job, cancel will raise an exception if the
+    // child is paused in the middle of an effect
+    // Ref: https://redux-saga.js.org/docs/api#forkfn-args
+
+    let childResult = 0
+    let listenerCompleted = false
+
+    startListening({
+      actionCreator: increment,
+      effect: async (action, listenerApi) => {
+        // Spawn a child job and start it immediately
+        const forkedTask = listenerApi.fork(async () => {
+          // Artificially wait a bit inside the child
+          await listenerApi.delay(15)
+          // Complete the child by returning an Outcome-wrapped value
+          childResult = 42
+
+          return 0
+        })
+
+        await listenerApi.delay(5)
+        forkedTask.cancel()
+        listenerCompleted = true
+      },
+    })
+
+    // Starts listener, which starts child
+    store.dispatch(increment())
+
+    // Wait for child to have maybe completed
+    await delay(20)
+
+    // Listener finished, but the child was canceled and threw an exception, so it never finished
+    expect(listenerCompleted).toBe(true)
+    expect(childResult).toBe(0)
+  })
+
+  test('canceled', async () => {
+    // canceled allows checking if the current task was canceled
+    // Ref: https://redux-saga.js.org/docs/api#cancelled
+
+    let canceledAndCaught = false
+    let canceledCheck = false
+
+    startListening({
+      matcher: isAnyOf(increment, decrement, incrementByAmount),
+      effect: async (action, listenerApi) => {
+        if (increment.match(action)) {
+          // Have this branch wait around to be canceled by the other
+          try {
+            await listenerApi.delay(10)
+          } catch (err) {
+            // Can check cancelation based on the exception and its reason
+            if (err instanceof TaskAbortError) {
+              canceledAndCaught = true
+            }
+          }
+        } else if (incrementByAmount.match(action)) {
+          // do a non-cancelation-aware wait
+          await delay(15)
+          if (listenerApi.signal.aborted) {
+            canceledCheck = true
+          }
+        } else if (decrement.match(action)) {
+          listenerApi.cancelActiveListeners()
+        }
+      },
+    })
+
+    // Start first branch
+    store.dispatch(increment())
+    // Cancel first listener
+    store.dispatch(decrement())
+
+    // Have to wait for the delay to resolve
+    // TODO Can we make ``Job.delay()` be a race?
+    await delay(15)
+
+    expect(canceledAndCaught).toBe(true)
+
+    // Start second branch
+    store.dispatch(incrementByAmount(42))
+    // Cancel second listener, although it won't know about that until later
+    store.dispatch(decrement())
+
+    expect(canceledCheck).toBe(false)
+
+    await delay(20)
+
+    expect(canceledCheck).toBe(true)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/fork.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/fork.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/fork.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,530 @@
+import type { EnhancedStore } from '@reduxjs/toolkit'
+import { configureStore, createSlice, createAction } from '@reduxjs/toolkit'
+
+import type { PayloadAction } from '@reduxjs/toolkit'
+import type {
+  AbortSignalWithReason,
+  ForkedTaskExecutor,
+  TaskResult,
+} from '../types'
+import { createListenerMiddleware, TaskAbortError } from '../index'
+import {
+  listenerCancelled,
+  listenerCompleted,
+  taskCancelled,
+  taskCompleted,
+} from '../exceptions'
+
+function delay(ms: number) {
+  return new Promise((resolve) => setTimeout(resolve, ms))
+}
+
+// @see https://deno.land/std@0.95.0/async/deferred.ts (MIT)
+export interface Deferred<T> extends Promise<T> {
+  resolve(value?: T | PromiseLike<T>): void
+  reject(reason?: any): void
+}
+
+/** Creates a Promise with the `reject` and `resolve` functions
+ * placed as methods on the promise object itself. It allows you to do:
+ *
+ *     const p = deferred<number>();
+ *     // ...
+ *     p.resolve(42);
+ */
+export function deferred<T>(): Deferred<T> {
+  let methods
+  const promise = new Promise<T>((resolve, reject): void => {
+    methods = { resolve, reject }
+  })
+  return Object.assign(promise, methods) as Deferred<T>
+}
+
+interface CounterSlice {
+  value: number
+}
+
+describe('fork', () => {
+  const counterSlice = createSlice({
+    name: 'counter',
+    initialState: { value: 0 } as CounterSlice,
+    reducers: {
+      increment(state) {
+        state.value += 1
+      },
+      decrement(state) {
+        state.value -= 1
+      },
+      // Use the PayloadAction type to declare the contents of `action.payload`
+      incrementByAmount: (state, action: PayloadAction<number>) => {
+        state.value += action.payload
+      },
+    },
+  })
+  const { increment, decrement, incrementByAmount } = counterSlice.actions
+  let listenerMiddleware = createListenerMiddleware()
+  let { middleware, startListening, stopListening } = listenerMiddleware
+  let store = configureStore({
+    reducer: counterSlice.reducer,
+    middleware: (gDM) => gDM().prepend(middleware),
+  })
+
+  beforeEach(() => {
+    listenerMiddleware = createListenerMiddleware()
+    middleware = listenerMiddleware.middleware
+    startListening = listenerMiddleware.startListening
+    stopListening = listenerMiddleware.stopListening
+    store = configureStore({
+      reducer: counterSlice.reducer,
+      middleware: (gDM) => gDM().prepend(middleware),
+    })
+  })
+
+  it('runs executors in the next microtask', async () => {
+    let hasRunSyncExector = false
+    let hasRunAsyncExecutor = false
+
+    startListening({
+      actionCreator: increment,
+      effect: async (_, listenerApi) => {
+        listenerApi.fork(() => {
+          hasRunSyncExector = true
+        })
+
+        listenerApi.fork(async () => {
+          hasRunAsyncExecutor = true
+        })
+      },
+    })
+
+    store.dispatch(increment())
+
+    expect(hasRunSyncExector).toBe(false)
+    expect(hasRunAsyncExecutor).toBe(false)
+
+    await Promise.resolve()
+
+    expect(hasRunSyncExector).toBe(true)
+    expect(hasRunAsyncExecutor).toBe(true)
+  })
+
+  test('forkedTask.result rejects TaskAbortError if listener is cancelled', async () => {
+    const deferredForkedTaskError = deferred()
+
+    startListening({
+      actionCreator: increment,
+      async effect(_, listenerApi) {
+        listenerApi.cancelActiveListeners()
+        listenerApi
+          .fork(async () => {
+            await delay(10)
+
+            throw new Error('unreachable code')
+          })
+          .result.then(
+            deferredForkedTaskError.resolve,
+            deferredForkedTaskError.resolve,
+          )
+      },
+    })
+
+    store.dispatch(increment())
+    store.dispatch(increment())
+
+    expect(await deferredForkedTaskError).toEqual(
+      new TaskAbortError(listenerCancelled),
+    )
+  })
+
+  it('synchronously throws TypeError error if the provided executor is not a function', () => {
+    const invalidExecutors = [null, {}, undefined, 1]
+
+    startListening({
+      predicate: () => true,
+      effect: async (_, listenerApi) => {
+        invalidExecutors.forEach((invalidExecutor) => {
+          let caughtError
+          try {
+            listenerApi.fork(invalidExecutor as any)
+          } catch (err) {
+            caughtError = err
+          }
+
+          expect(caughtError).toBeInstanceOf(TypeError)
+        })
+      },
+    })
+
+    store.dispatch(increment())
+
+    expect.assertions(invalidExecutors.length)
+  })
+
+  it('does not run an executor if the task is synchronously cancelled', async () => {
+    const storeStateAfter = deferred()
+
+    startListening({
+      actionCreator: increment,
+      effect: async (action, listenerApi) => {
+        const forkedTask = listenerApi.fork(() => {
+          listenerApi.dispatch(decrement())
+          listenerApi.dispatch(decrement())
+          listenerApi.dispatch(decrement())
+        })
+        forkedTask.cancel()
+
+        const result = await forkedTask.result
+        storeStateAfter.resolve(listenerApi.getState())
+      },
+    })
+    store.dispatch(increment())
+
+    await expect(storeStateAfter).resolves.toEqual({ value: 1 })
+  })
+
+  it.each<{
+    desc: string
+    executor: ForkedTaskExecutor<any>
+    cancelAfterMs?: number
+    expected: TaskResult<any>
+  }>([
+    {
+      desc: 'sync exec - success',
+      executor: () => 42,
+      expected: { status: 'ok', value: 42 },
+    },
+    {
+      desc: 'sync exec - error',
+      executor: () => {
+        throw new Error('2020')
+      },
+      expected: { status: 'rejected', error: new Error('2020') },
+    },
+    {
+      desc: 'sync exec - sync cancel',
+      executor: () => 42,
+      cancelAfterMs: -1,
+      expected: {
+        status: 'cancelled',
+        error: new TaskAbortError(taskCancelled),
+      },
+    },
+    {
+      desc: 'sync exec - async cancel',
+      executor: () => 42,
+      cancelAfterMs: 0,
+      expected: { status: 'ok', value: 42 },
+    },
+    {
+      desc: 'async exec - async cancel',
+      executor: async (forkApi) => {
+        await forkApi.delay(100)
+        throw new Error('2020')
+      },
+      cancelAfterMs: 10,
+      expected: {
+        status: 'cancelled',
+        error: new TaskAbortError(taskCancelled),
+      },
+    },
+    {
+      desc: 'async exec - success',
+      executor: async () => {
+        await delay(20)
+        return Promise.resolve(21)
+      },
+      expected: { status: 'ok', value: 21 },
+    },
+    {
+      desc: 'async exec - error',
+      executor: async () => {
+        await Promise.resolve()
+        throw new Error('2020')
+      },
+      expected: { status: 'rejected', error: new Error('2020') },
+    },
+    {
+      desc: 'async exec - success with forkApi.pause',
+      executor: async (forkApi) => {
+        return forkApi.pause(Promise.resolve(2))
+      },
+      expected: { status: 'ok', value: 2 },
+    },
+    {
+      desc: 'async exec - error with forkApi.pause',
+      executor: async (forkApi) => {
+        return forkApi.pause(Promise.reject(22))
+      },
+      expected: { status: 'rejected', error: 22 },
+    },
+    {
+      desc: 'async exec - success with forkApi.delay',
+      executor: async (forkApi) => {
+        await forkApi.delay(10)
+        return 5
+      },
+      expected: { status: 'ok', value: 5 },
+    },
+  ])('$desc', async ({ executor, expected, cancelAfterMs }) => {
+    let deferredResult = deferred()
+    let forkedTask: any = {}
+
+    startListening({
+      predicate: () => true,
+      effect: async (_, listenerApi) => {
+        forkedTask = listenerApi.fork(executor)
+
+        deferredResult.resolve(await forkedTask.result)
+      },
+    })
+
+    store.dispatch({ type: '' })
+
+    if (typeof cancelAfterMs === 'number') {
+      if (cancelAfterMs < 0) {
+        forkedTask.cancel()
+      } else {
+        await delay(cancelAfterMs)
+        forkedTask.cancel()
+      }
+    }
+
+    const result = await deferredResult
+
+    expect(result).toEqual(expected)
+  })
+
+  describe('forkAPI', () => {
+    test('forkApi.delay rejects as soon as the task is cancelled', async () => {
+      let deferredResult = deferred()
+
+      startListening({
+        actionCreator: increment,
+        effect: async (_, listenerApi) => {
+          const forkedTask = listenerApi.fork(async (forkApi) => {
+            await forkApi.delay(100)
+
+            return 4
+          })
+
+          await listenerApi.delay(10)
+          forkedTask.cancel()
+          deferredResult.resolve(await forkedTask.result)
+        },
+      })
+
+      store.dispatch(increment())
+
+      expect(await deferredResult).toEqual({
+        status: 'cancelled',
+        error: new TaskAbortError(taskCancelled),
+      })
+    })
+
+    test('forkApi.delay rejects as soon as the parent listener is cancelled', async () => {
+      let deferredResult = deferred()
+
+      startListening({
+        actionCreator: increment,
+        effect: async (_, listenerApi) => {
+          listenerApi.cancelActiveListeners()
+          await listenerApi.fork(async (forkApi) => {
+            await forkApi
+              .delay(100)
+              .then(deferredResult.resolve, deferredResult.resolve)
+
+            return 4
+          }).result
+
+          deferredResult.resolve(new Error('unreachable'))
+        },
+      })
+
+      store.dispatch(increment())
+
+      await Promise.resolve()
+
+      store.dispatch(increment())
+      expect(await deferredResult).toEqual(
+        new TaskAbortError(listenerCancelled),
+      )
+    })
+
+    it.each([
+      {
+        autoJoin: true,
+        expectedAbortReason: taskCompleted,
+        cancelListener: false,
+      },
+      {
+        autoJoin: false,
+        expectedAbortReason: listenerCompleted,
+        cancelListener: false,
+      },
+      {
+        autoJoin: true,
+        expectedAbortReason: listenerCancelled,
+        cancelListener: true,
+      },
+      {
+        autoJoin: false,
+        expectedAbortReason: listenerCancelled,
+        cancelListener: true,
+      },
+    ])(
+      'signal is $expectedAbortReason when autoJoin: $autoJoin, cancelListener: $cancelListener',
+      async ({ autoJoin, cancelListener, expectedAbortReason }) => {
+        let deferredResult = deferred()
+
+        const unsubscribe = startListening({
+          actionCreator: increment,
+          async effect(_, listenerApi) {
+            listenerApi.fork(
+              async (forkApi) => {
+                forkApi.signal.addEventListener('abort', () => {
+                  deferredResult.resolve(
+                    (forkApi.signal as AbortSignalWithReason<unknown>).reason,
+                  )
+                })
+
+                await forkApi.delay(10)
+              },
+              { autoJoin },
+            )
+          },
+        })
+
+        store.dispatch(increment())
+
+        // let task start
+        await Promise.resolve()
+
+        if (cancelListener) unsubscribe({ cancelActive: true })
+
+        expect(await deferredResult).toBe(expectedAbortReason)
+      },
+    )
+
+    test('fork.delay does not trigger unhandledRejections for completed or cancelled tasks', async () => {
+      let deferredCompletedEvt = deferred()
+      let deferredCancelledEvt = deferred()
+
+      // Unfortunately we cannot test declaratively unhandleRejections in jest: https://github.com/facebook/jest/issues/5620
+      // This test just fails if an `unhandledRejection` occurs.
+      startListening({
+        actionCreator: increment,
+        effect: async (_, listenerApi) => {
+          const completedTask = listenerApi.fork(async (forkApi) => {
+            forkApi.signal.addEventListener(
+              'abort',
+              deferredCompletedEvt.resolve,
+              { once: true },
+            )
+            forkApi.delay(100) // missing await
+
+            return 4
+          })
+
+          deferredCompletedEvt.resolve(await completedTask.result)
+
+          const godotPauseTrigger = deferred()
+
+          const cancelledTask = listenerApi.fork(async (forkApi) => {
+            forkApi.signal.addEventListener(
+              'abort',
+              deferredCompletedEvt.resolve,
+              { once: true },
+            )
+            forkApi.delay(1_000) // missing await
+            await forkApi.pause(godotPauseTrigger)
+            return 4
+          })
+
+          await Promise.resolve()
+          cancelledTask.cancel()
+          deferredCancelledEvt.resolve(await cancelledTask.result)
+        },
+      })
+
+      store.dispatch(increment())
+      expect(await deferredCompletedEvt).toBeDefined()
+      expect(await deferredCancelledEvt).toBeDefined()
+    })
+  })
+
+  test('forkApi.pause rejects if task is cancelled', async () => {
+    let deferredResult = deferred()
+    startListening({
+      actionCreator: increment,
+      effect: async (_, listenerApi) => {
+        const forkedTask = listenerApi.fork(async (forkApi) => {
+          await forkApi.pause(delay(1_000))
+
+          return 4
+        })
+
+        await Promise.resolve()
+        forkedTask.cancel()
+        deferredResult.resolve(await forkedTask.result)
+      },
+    })
+
+    store.dispatch(increment())
+
+    expect(await deferredResult).toEqual({
+      status: 'cancelled',
+      error: new TaskAbortError(taskCancelled),
+    })
+  })
+
+  test('forkApi.pause rejects as soon as the parent listener is cancelled', async () => {
+    let deferredResult = deferred()
+
+    startListening({
+      actionCreator: increment,
+      effect: async (_, listenerApi) => {
+        listenerApi.cancelActiveListeners()
+        const forkedTask = listenerApi.fork(async (forkApi) => {
+          await forkApi
+            .pause(delay(100))
+            .then(deferredResult.resolve, deferredResult.resolve)
+
+          return 4
+        })
+
+        await forkedTask.result
+        deferredResult.resolve(new Error('unreachable'))
+      },
+    })
+
+    store.dispatch(increment())
+
+    await Promise.resolve()
+
+    store.dispatch(increment())
+    expect(await deferredResult).toEqual(new TaskAbortError(listenerCancelled))
+  })
+
+  test('forkApi.pause rejects if listener is cancelled', async () => {
+    const incrementByInListener = createAction<number>('incrementByInListener')
+
+    startListening({
+      actionCreator: incrementByInListener,
+      async effect({ payload: amountToIncrement }, listenerApi) {
+        listenerApi.cancelActiveListeners()
+        await listenerApi.fork(async (forkApi) => {
+          await forkApi.pause(delay(10))
+          listenerApi.dispatch(incrementByAmount(amountToIncrement))
+        }).result
+        listenerApi.dispatch(incrementByAmount(2 * amountToIncrement))
+      },
+    })
+
+    store.dispatch(incrementByInListener(10))
+    store.dispatch(incrementByInListener(100))
+
+    await delay(50)
+
+    expect(store.getState().value).toEqual(300)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,540 @@
+import { createListenerEntry } from '@internal/listenerMiddleware'
+import type {
+  Action,
+  PayloadAction,
+  TypedAddListener,
+  TypedStartListening,
+  UnknownAction,
+  UnsubscribeListener,
+} from '@reduxjs/toolkit'
+import {
+  addListener,
+  configureStore,
+  createAction,
+  createListenerMiddleware,
+  createSlice,
+  isFluxStandardAction,
+} from '@reduxjs/toolkit'
+
+const listenerMiddleware = createListenerMiddleware()
+const { startListening } = listenerMiddleware
+
+const addTypedListenerAction = addListener as TypedAddListener<CounterState>
+
+interface CounterState {
+  value: number
+}
+
+const testAction1 = createAction<string>('testAction1')
+const testAction2 = createAction<string>('testAction2')
+
+const counterSlice = createSlice({
+  name: 'counter',
+  initialState: { value: 0 } as CounterState,
+  reducers: {
+    increment(state) {
+      state.value += 1
+    },
+    decrement(state) {
+      state.value -= 1
+    },
+    // Use the PayloadAction type to declare the contents of `action.payload`
+    incrementByAmount: (state, action: PayloadAction<number>) => {
+      state.value += action.payload
+    },
+  },
+})
+
+const { increment, decrement, incrementByAmount } = counterSlice.actions
+
+describe('type tests', () => {
+  const store = configureStore({
+    reducer: () => 42,
+    middleware: (gDM) => gDM().prepend(createListenerMiddleware().middleware),
+  })
+
+  test('Allows passing an extra argument on middleware creation', () => {
+    const originalExtra = 42
+    const listenerMiddleware = createListenerMiddleware({
+      extra: originalExtra,
+    })
+    const store = configureStore({
+      reducer: counterSlice.reducer,
+      middleware: (gDM) => gDM().prepend(listenerMiddleware.middleware),
+    })
+
+    let foundExtra: number | null = null
+
+    const typedAddListener =
+      listenerMiddleware.startListening as TypedStartListening<
+        CounterState,
+        typeof store.dispatch,
+        typeof originalExtra
+      >
+
+    typedAddListener({
+      matcher: (action): action is Action => true,
+      effect: (action, listenerApi) => {
+        foundExtra = listenerApi.extra
+
+        expectTypeOf(listenerApi.extra).toMatchTypeOf(originalExtra)
+      },
+    })
+
+    store.dispatch(testAction1('a'))
+    expect(foundExtra).toBe(originalExtra)
+  })
+
+  test('unsubscribing via callback from dispatch', () => {
+    const unsubscribe = store.dispatch(
+      addListener({
+        actionCreator: testAction1,
+        effect: () => {},
+      }),
+    )
+
+    expectTypeOf(unsubscribe).toEqualTypeOf<UnsubscribeListener>()
+
+    store.dispatch(testAction1('a'))
+
+    unsubscribe()
+    store.dispatch(testAction2('b'))
+    store.dispatch(testAction1('c'))
+  })
+
+  test('take resolves to `[A, CurrentState, PreviousState] | null` if a possibly undefined timeout parameter is provided', () => {
+    type ExpectedTakeResultType =
+      | readonly [ReturnType<typeof increment>, CounterState, CounterState]
+      | null
+
+    let timeout: number | undefined = undefined
+    let done = false
+
+    const startAppListening =
+      startListening as TypedStartListening<CounterState>
+    startAppListening({
+      predicate: incrementByAmount.match,
+      effect: async (_, listenerApi) => {
+        let takeResult = await listenerApi.take(increment.match, timeout)
+
+        timeout = 1
+        takeResult = await listenerApi.take(increment.match, timeout)
+        expect(takeResult).toBeNull()
+
+        expectTypeOf(takeResult).toMatchTypeOf<ExpectedTakeResultType>()
+
+        done = true
+      },
+    })
+
+    expect(done).toBe(true)
+  })
+
+  test('State args default to unknown', () => {
+    createListenerEntry({
+      predicate: (
+        action,
+        currentState,
+        previousState,
+      ): action is UnknownAction => {
+        expectTypeOf(currentState).toBeUnknown()
+
+        expectTypeOf(previousState).toBeUnknown()
+
+        return true
+      },
+      effect: (action, listenerApi) => {
+        const listenerState = listenerApi.getState()
+
+        expectTypeOf(listenerState).toBeUnknown()
+
+        listenerApi.dispatch((dispatch, getState) => {
+          const thunkState = getState()
+
+          expectTypeOf(thunkState).toBeUnknown()
+        })
+      },
+    })
+
+    startListening({
+      predicate: (
+        action,
+        currentState,
+        previousState,
+      ): action is UnknownAction => {
+        expectTypeOf(currentState).toBeUnknown()
+
+        expectTypeOf(previousState).toBeUnknown()
+
+        return true
+      },
+      effect: (action, listenerApi) => {},
+    })
+
+    startListening({
+      matcher: increment.match,
+      effect: (action, listenerApi) => {
+        const listenerState = listenerApi.getState()
+
+        expectTypeOf(listenerState).toBeUnknown()
+
+        listenerApi.dispatch((dispatch, getState) => {
+          const thunkState = getState()
+
+          expectTypeOf(thunkState).toBeUnknown()
+        })
+      },
+    })
+
+    store.dispatch(
+      addListener({
+        predicate: (
+          action,
+          currentState,
+          previousState,
+        ): action is UnknownAction => {
+          expectTypeOf(currentState).toBeUnknown()
+
+          expectTypeOf(previousState).toBeUnknown()
+
+          return true
+        },
+        effect: (action, listenerApi) => {
+          const listenerState = listenerApi.getState()
+
+          expectTypeOf(listenerState).toBeUnknown()
+
+          listenerApi.dispatch((dispatch, getState) => {
+            const thunkState = getState()
+
+            expectTypeOf(thunkState).toBeUnknown()
+          })
+        },
+      }),
+    )
+
+    store.dispatch(
+      addListener({
+        matcher: increment.match,
+        effect: (action, listenerApi) => {
+          const listenerState = listenerApi.getState()
+
+          expectTypeOf(listenerState).toBeUnknown()
+
+          listenerApi.dispatch((dispatch, getState) => {
+            const thunkState = getState()
+
+            expectTypeOf(thunkState).toBeUnknown()
+          })
+        },
+      }),
+    )
+  })
+
+  test('Action type is inferred from args', () => {
+    startListening({
+      type: 'abcd',
+      effect: (action, listenerApi) => {
+        expectTypeOf(action).toEqualTypeOf<{ type: 'abcd' }>()
+      },
+    })
+
+    startListening({
+      actionCreator: incrementByAmount,
+      effect: (action, listenerApi) => {
+        expectTypeOf(action).toMatchTypeOf<PayloadAction<number>>()
+      },
+    })
+
+    startListening({
+      matcher: incrementByAmount.match,
+      effect: (action, listenerApi) => {
+        expectTypeOf(action).toMatchTypeOf<PayloadAction<number>>()
+      },
+    })
+
+    startListening({
+      predicate: (
+        action,
+        currentState,
+        previousState,
+      ): action is PayloadAction<number> => {
+        return (
+          isFluxStandardAction(action) && typeof action.payload === 'boolean'
+        )
+      },
+      effect: (action, listenerApi) => {
+        expectTypeOf(action).toEqualTypeOf<PayloadAction<number>>()
+      },
+    })
+
+    startListening({
+      predicate: (action, currentState) => {
+        return (
+          isFluxStandardAction(action) && typeof action.payload === 'number'
+        )
+      },
+      effect: (action, listenerApi) => {
+        expectTypeOf(action).toEqualTypeOf<UnknownAction>()
+      },
+    })
+
+    store.dispatch(
+      addListener({
+        type: 'abcd',
+        effect: (action, listenerApi) => {
+          expectTypeOf(action).toEqualTypeOf<{ type: 'abcd' }>()
+        },
+      }),
+    )
+
+    store.dispatch(
+      addListener({
+        actionCreator: incrementByAmount,
+        effect: (action, listenerApi) => {
+          expectTypeOf(action).toMatchTypeOf<PayloadAction<number>>()
+        },
+      }),
+    )
+
+    store.dispatch(
+      addListener({
+        matcher: incrementByAmount.match,
+        effect: (action, listenerApi) => {
+          expectTypeOf(action).toMatchTypeOf<PayloadAction<number>>()
+        },
+      }),
+    )
+  })
+
+  test('Can create a pre-typed middleware', () => {
+    const typedMiddleware = createListenerMiddleware<CounterState>()
+
+    typedMiddleware.startListening({
+      predicate: (
+        action,
+        currentState,
+        previousState,
+      ): action is UnknownAction => {
+        expectTypeOf(currentState).not.toBeAny()
+
+        expectTypeOf(previousState).not.toBeAny()
+
+        expectTypeOf(currentState).toEqualTypeOf<CounterState>()
+
+        expectTypeOf(previousState).toEqualTypeOf<CounterState>()
+
+        return true
+      },
+      effect: (action, listenerApi) => {
+        const listenerState = listenerApi.getState()
+
+        expectTypeOf(listenerState).toEqualTypeOf<CounterState>()
+
+        listenerApi.dispatch((dispatch, getState) => {
+          const thunkState = listenerApi.getState()
+
+          expectTypeOf(thunkState).toEqualTypeOf<CounterState>()
+        })
+      },
+    })
+
+    // Can pass a predicate function with fewer args
+    typedMiddleware.startListening({
+      predicate: (action, currentState): action is PayloadAction<number> => {
+        expectTypeOf(currentState).not.toBeAny()
+
+        expectTypeOf(currentState).toEqualTypeOf<CounterState>()
+
+        return true
+      },
+      effect: (action, listenerApi) => {
+        expectTypeOf(action).toEqualTypeOf<PayloadAction<number>>()
+
+        const listenerState = listenerApi.getState()
+
+        expectTypeOf(listenerState).toEqualTypeOf<CounterState>()
+
+        listenerApi.dispatch((dispatch, getState) => {
+          const thunkState = listenerApi.getState()
+
+          expectTypeOf(thunkState).toEqualTypeOf<CounterState>()
+        })
+      },
+    })
+
+    typedMiddleware.startListening({
+      actionCreator: incrementByAmount,
+      effect: (action, listenerApi) => {
+        const listenerState = listenerApi.getState()
+
+        expectTypeOf(listenerState).toEqualTypeOf<CounterState>()
+
+        listenerApi.dispatch((dispatch, getState) => {
+          const thunkState = listenerApi.getState()
+
+          expectTypeOf(thunkState).toEqualTypeOf<CounterState>()
+        })
+      },
+    })
+
+    store.dispatch(
+      addTypedListenerAction({
+        predicate: (
+          action,
+          currentState,
+          previousState,
+        ): action is ReturnType<typeof incrementByAmount> => {
+          expectTypeOf(currentState).not.toBeAny()
+
+          expectTypeOf(previousState).not.toBeAny()
+
+          expectTypeOf(currentState).toEqualTypeOf<CounterState>()
+
+          expectTypeOf(previousState).toEqualTypeOf<CounterState>()
+
+          return true
+        },
+        effect: (action, listenerApi) => {
+          const listenerState = listenerApi.getState()
+
+          expectTypeOf(listenerState).toEqualTypeOf<CounterState>()
+
+          listenerApi.dispatch((dispatch, getState) => {
+            const thunkState = listenerApi.getState()
+
+            expectTypeOf(thunkState).toEqualTypeOf<CounterState>()
+          })
+        },
+      }),
+    )
+
+    store.dispatch(
+      addTypedListenerAction({
+        predicate: (
+          action,
+          currentState,
+          previousState,
+        ): action is UnknownAction => {
+          expectTypeOf(currentState).not.toBeAny()
+
+          expectTypeOf(previousState).not.toBeAny()
+
+          expectTypeOf(currentState).toEqualTypeOf<CounterState>()
+
+          expectTypeOf(previousState).toEqualTypeOf<CounterState>()
+
+          return true
+        },
+        effect: (action, listenerApi) => {
+          const listenerState = listenerApi.getState()
+
+          expectTypeOf(listenerState).toEqualTypeOf<CounterState>()
+
+          listenerApi.dispatch((dispatch, getState) => {
+            const thunkState = listenerApi.getState()
+
+            expectTypeOf(thunkState).toEqualTypeOf<CounterState>()
+          })
+        },
+      }),
+    )
+  })
+
+  test('Can create pre-typed versions of startListening and addListener', () => {
+    const typedAddListener = startListening as TypedStartListening<CounterState>
+    const typedAddListenerAction = addListener as TypedAddListener<CounterState>
+
+    typedAddListener({
+      predicate: (
+        action,
+        currentState,
+        previousState,
+      ): action is UnknownAction => {
+        expectTypeOf(currentState).not.toBeAny()
+
+        expectTypeOf(previousState).not.toBeAny()
+
+        expectTypeOf(currentState).toEqualTypeOf<CounterState>()
+
+        expectTypeOf(previousState).toEqualTypeOf<CounterState>()
+
+        return true
+      },
+      effect: (action, listenerApi) => {
+        const listenerState = listenerApi.getState()
+
+        expectTypeOf(listenerState).toEqualTypeOf<CounterState>()
+
+        listenerApi.dispatch((dispatch, getState) => {
+          const thunkState = listenerApi.getState()
+
+          expectTypeOf(thunkState).toEqualTypeOf<CounterState>()
+        })
+      },
+    })
+
+    typedAddListener({
+      matcher: incrementByAmount.match,
+      effect: (action, listenerApi) => {
+        const listenerState = listenerApi.getState()
+
+        expectTypeOf(listenerState).toEqualTypeOf<CounterState>()
+
+        listenerApi.dispatch((dispatch, getState) => {
+          const thunkState = listenerApi.getState()
+
+          expectTypeOf(thunkState).toEqualTypeOf<CounterState>()
+        })
+      },
+    })
+
+    store.dispatch(
+      typedAddListenerAction({
+        predicate: (
+          action,
+          currentState,
+          previousState,
+        ): action is UnknownAction => {
+          expectTypeOf(currentState).not.toBeAny()
+
+          expectTypeOf(previousState).not.toBeAny()
+
+          expectTypeOf(currentState).toEqualTypeOf<CounterState>()
+
+          expectTypeOf(previousState).toEqualTypeOf<CounterState>()
+
+          return true
+        },
+        effect: (action, listenerApi) => {
+          const listenerState = listenerApi.getState()
+
+          expectTypeOf(listenerState).toEqualTypeOf<CounterState>()
+
+          listenerApi.dispatch((dispatch, getState) => {
+            const thunkState = listenerApi.getState()
+
+            expectTypeOf(thunkState).toEqualTypeOf<CounterState>()
+          })
+        },
+      }),
+    )
+
+    store.dispatch(
+      typedAddListenerAction({
+        matcher: incrementByAmount.match,
+        effect: (action, listenerApi) => {
+          const listenerState = listenerApi.getState()
+
+          expectTypeOf(listenerState).toEqualTypeOf<CounterState>()
+
+          listenerApi.dispatch((dispatch, getState) => {
+            const thunkState = listenerApi.getState()
+
+            expectTypeOf(thunkState).toEqualTypeOf<CounterState>()
+          })
+        },
+      }),
+    )
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1374 @@
+import {
+  listenerCancelled,
+  listenerCompleted,
+} from '@internal/listenerMiddleware/exceptions'
+import type {
+  AbortSignalWithReason,
+  AddListenerOverloads,
+} from '@internal/listenerMiddleware/types'
+import { noop } from '@internal/listenerMiddleware/utils'
+import type {
+  Action,
+  ListenerEffect,
+  ListenerEffectAPI,
+  PayloadAction,
+  TypedRemoveListener,
+  TypedStartListening,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import {
+  TaskAbortError,
+  addListener,
+  clearAllListeners,
+  configureStore,
+  createAction,
+  createListenerMiddleware,
+  createSlice,
+  isAnyOf,
+  removeListener,
+} from '@reduxjs/toolkit'
+import type { Mock } from 'vitest'
+
+const middlewareApi = {
+  getState: expect.any(Function),
+  getOriginalState: expect.any(Function),
+  condition: expect.any(Function),
+  extra: undefined,
+  take: expect.any(Function),
+  signal: expect.any(Object),
+  fork: expect.any(Function),
+  delay: expect.any(Function),
+  pause: expect.any(Function),
+  dispatch: expect.any(Function),
+  unsubscribe: expect.any(Function),
+  subscribe: expect.any(Function),
+  cancelActiveListeners: expect.any(Function),
+  cancel: expect.any(Function),
+  throwIfCancelled: expect.any(Function),
+}
+
+// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+export interface Deferred<T> extends Promise<T> {
+  resolve(value?: T | PromiseLike<T>): void
+  // deno-lint-ignore no-explicit-any
+  reject(reason?: any): void
+}
+
+/** Creates a Promise with the `reject` and `resolve` functions
+ * placed as methods on the promise object itself. It allows you to do:
+ *
+ *     const p = deferred<number>();
+ *     // ...
+ *     p.resolve(42);
+ */
+export function deferred<T>(): Deferred<T> {
+  let methods
+  const promise = new Promise<T>((resolve, reject): void => {
+    methods = { resolve, reject }
+  })
+  return Object.assign(promise, methods) as Deferred<T>
+}
+
+describe('createListenerMiddleware', () => {
+  let store = configureStore({
+    reducer: () => 42,
+    middleware: (gDM) => gDM().prepend(createListenerMiddleware().middleware),
+  })
+
+  interface CounterState {
+    value: number
+  }
+
+  const counterSlice = createSlice({
+    name: 'counter',
+    initialState: { value: 0 } as CounterState,
+    reducers: {
+      increment(state) {
+        state.value += 1
+      },
+      decrement(state) {
+        state.value -= 1
+      },
+      // Use the PayloadAction type to declare the contents of `action.payload`
+      incrementByAmount: (state, action: PayloadAction<number>) => {
+        state.value += action.payload
+      },
+    },
+  })
+  const { increment, decrement, incrementByAmount } = counterSlice.actions
+
+  function delay(ms: number) {
+    return new Promise((resolve) => setTimeout(resolve, ms))
+  }
+
+  let reducer: Mock
+  let listenerMiddleware = createListenerMiddleware()
+  let { middleware, startListening, stopListening, clearListeners } =
+    listenerMiddleware
+  const removeTypedListenerAction =
+    removeListener as TypedRemoveListener<CounterState>
+
+  const testAction1 = createAction<string>('testAction1')
+  type TestAction1 = ReturnType<typeof testAction1>
+  const testAction2 = createAction<string>('testAction2')
+  type TestAction2 = ReturnType<typeof testAction2>
+  const testAction3 = createAction<string>('testAction3')
+
+  vi.spyOn(console, 'error').mockImplementation(noop)
+
+  beforeEach(() => {
+    listenerMiddleware = createListenerMiddleware()
+    middleware = listenerMiddleware.middleware
+    startListening = listenerMiddleware.startListening
+    stopListening = listenerMiddleware.stopListening
+    clearListeners = listenerMiddleware.clearListeners
+    reducer = vi.fn(() => ({}))
+    store = configureStore({
+      reducer,
+      middleware: (gDM) => gDM().prepend(middleware),
+    })
+  })
+
+  afterEach(() => {
+    vi.clearAllMocks()
+  })
+
+  afterAll(() => {
+    vi.restoreAllMocks()
+  })
+
+  describe('Middleware setup', () => {
+    test('Allows passing an extra argument on middleware creation', () => {
+      const originalExtra = 42
+      const listenerMiddleware = createListenerMiddleware({
+        extra: originalExtra,
+      })
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(listenerMiddleware.middleware),
+      })
+
+      let foundExtra: number | null = null
+
+      const typedAddListener =
+        listenerMiddleware.startListening as TypedStartListening<
+          CounterState,
+          typeof store.dispatch,
+          typeof originalExtra
+        >
+
+      typedAddListener({
+        matcher: (action): action is Action => true,
+        effect: (action, listenerApi) => {
+          foundExtra = listenerApi.extra
+        },
+      })
+
+      store.dispatch(testAction1('a'))
+      expect(foundExtra).toBe(originalExtra)
+    })
+
+    test('Passes through if there are no listeners', () => {
+      const originalAction = testAction1('a')
+      const resultAction = store.dispatch(originalAction)
+      expect(resultAction).toBe(originalAction)
+    })
+  })
+
+  describe('Subscription and unsubscription', () => {
+    test('directly subscribing', () => {
+      const effect = vi.fn((_: TestAction1) => {})
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+      store.dispatch(testAction2('b'))
+      store.dispatch(testAction1('c'))
+
+      expect(effect.mock.calls).toEqual([
+        [testAction1('a'), middlewareApi],
+        [testAction1('c'), middlewareApi],
+      ])
+    })
+
+    test('stopListening returns true if an entry has been unsubscribed, false otherwise', () => {
+      const effect = vi.fn((_: TestAction1) => {})
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      expect(stopListening({ actionCreator: testAction2, effect })).toBe(false)
+      expect(stopListening({ actionCreator: testAction1, effect })).toBe(true)
+    })
+
+    test('dispatch(removeListener({...})) returns true if an entry has been unsubscribed, false otherwise', () => {
+      const effect = vi.fn((_: TestAction1) => {})
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      expect(
+        store.dispatch(
+          removeTypedListenerAction({
+            actionCreator: testAction2,
+            effect,
+          }),
+        ),
+      ).toBe(false)
+      expect(
+        store.dispatch(
+          removeTypedListenerAction({
+            actionCreator: testAction1,
+            effect,
+          }),
+        ),
+      ).toBe(true)
+    })
+
+    test('can subscribe with a string action type', () => {
+      const effect = vi.fn((_: UnknownAction) => {})
+
+      store.dispatch(
+        addListener({
+          type: testAction2.type,
+          effect,
+        }),
+      )
+
+      store.dispatch(testAction2('b'))
+      expect(effect.mock.calls).toEqual([[testAction2('b'), middlewareApi]])
+
+      store.dispatch(removeListener({ type: testAction2.type, effect }))
+
+      store.dispatch(testAction2('b'))
+      expect(effect.mock.calls).toEqual([[testAction2('b'), middlewareApi]])
+    })
+
+    test('can subscribe with a matcher function', () => {
+      const effect = vi.fn((_: UnknownAction) => {})
+
+      const isAction1Or2 = isAnyOf(testAction1, testAction2)
+
+      const unsubscribe = startListening({
+        matcher: isAction1Or2,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+      store.dispatch(testAction2('b'))
+      store.dispatch(testAction3('c'))
+      expect(effect.mock.calls).toEqual([
+        [testAction1('a'), middlewareApi],
+        [testAction2('b'), middlewareApi],
+      ])
+
+      unsubscribe()
+
+      store.dispatch(testAction2('b'))
+      expect(effect.mock.calls).toEqual([
+        [testAction1('a'), middlewareApi],
+        [testAction2('b'), middlewareApi],
+      ])
+    })
+
+    test('Can subscribe with an action predicate function', () => {
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      let listener1Calls = 0
+
+      startListening({
+        predicate: (action, state) => {
+          return (state as CounterState).value > 1
+        },
+        effect: () => {
+          listener1Calls++
+        },
+      })
+
+      let listener2Calls = 0
+
+      startListening({
+        predicate: (action, state, prevState) => {
+          return (
+            (state as CounterState).value > 1 &&
+            (prevState as CounterState).value % 2 === 0
+          )
+        },
+        effect: () => {
+          listener2Calls++
+        },
+      })
+
+      store.dispatch(increment())
+      store.dispatch(increment())
+      store.dispatch(increment())
+      store.dispatch(increment())
+
+      expect(listener1Calls).toBe(3)
+      expect(listener2Calls).toBe(1)
+    })
+
+    test('subscribing with the same listener will not make it trigger twice (like EventTarget.addEventListener())', () => {
+      const effect = vi.fn((_: TestAction1) => {})
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+      store.dispatch(testAction2('b'))
+      store.dispatch(testAction1('c'))
+
+      expect(effect.mock.calls).toEqual([
+        [testAction1('a'), middlewareApi],
+        [testAction1('c'), middlewareApi],
+      ])
+    })
+
+    test('subscribing with the same effect but different predicate is allowed', () => {
+      const effect = vi.fn((_: TestAction1 | TestAction2) => {})
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+      startListening({
+        actionCreator: testAction2,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+      store.dispatch(testAction2('b'))
+
+      expect(effect.mock.calls).toEqual([
+        [testAction1('a'), middlewareApi],
+        [testAction2('b'), middlewareApi],
+      ])
+    })
+
+    test('unsubscribing via callback', () => {
+      const effect = vi.fn((_: TestAction1) => {})
+
+      const unsubscribe = startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+      unsubscribe()
+      store.dispatch(testAction2('b'))
+      store.dispatch(testAction1('c'))
+
+      expect(effect.mock.calls).toEqual([[testAction1('a'), middlewareApi]])
+    })
+
+    test('directly unsubscribing', () => {
+      const effect = vi.fn((_: TestAction1) => {})
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+
+      stopListening({ actionCreator: testAction1, effect })
+      store.dispatch(testAction2('b'))
+      store.dispatch(testAction1('c'))
+
+      expect(effect.mock.calls).toEqual([[testAction1('a'), middlewareApi]])
+    })
+
+    test('unsubscribing without any subscriptions does not trigger an error', () => {
+      stopListening({ matcher: testAction1.match, effect: noop })
+    })
+
+    test('subscribing via action', () => {
+      const effect = vi.fn((_: TestAction1) => {})
+
+      store.dispatch(
+        addListener({
+          actionCreator: testAction1,
+          effect,
+        }),
+      )
+
+      store.dispatch(testAction1('a'))
+      store.dispatch(testAction2('b'))
+      store.dispatch(testAction1('c'))
+
+      expect(effect.mock.calls).toEqual([
+        [testAction1('a'), middlewareApi],
+        [testAction1('c'), middlewareApi],
+      ])
+    })
+
+    test('unsubscribing via callback from dispatch', () => {
+      const effect = vi.fn((_: TestAction1) => {})
+
+      const unsubscribe = store.dispatch(
+        addListener({
+          actionCreator: testAction1,
+          effect,
+        }),
+      )
+
+      store.dispatch(testAction1('a'))
+
+      unsubscribe()
+      store.dispatch(testAction2('b'))
+      store.dispatch(testAction1('c'))
+
+      expect(effect.mock.calls).toEqual([[testAction1('a'), middlewareApi]])
+    })
+
+    test('unsubscribing via action', () => {
+      const effect = vi.fn((_: TestAction1) => {})
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+
+      store.dispatch(removeListener({ actionCreator: testAction1, effect }))
+      store.dispatch(testAction2('b'))
+      store.dispatch(testAction1('c'))
+
+      expect(effect.mock.calls).toEqual([[testAction1('a'), middlewareApi]])
+    })
+
+    test('can cancel an active listener when unsubscribing directly', async () => {
+      let wasCancelled = false
+      const unsubscribe = startListening({
+        actionCreator: testAction1,
+        effect: async (action, listenerApi) => {
+          try {
+            await listenerApi.condition(testAction2.match)
+          } catch (err) {
+            if (err instanceof TaskAbortError) {
+              wasCancelled = true
+            }
+          }
+        },
+      })
+
+      store.dispatch(testAction1('a'))
+      unsubscribe({ cancelActive: true })
+      expect(wasCancelled).toBe(false)
+      await delay(10)
+      expect(wasCancelled).toBe(true)
+    })
+
+    test('can cancel an active listener when unsubscribing via stopListening', async () => {
+      let wasCancelled = false
+      const effect = async (action: any, listenerApi: any) => {
+        try {
+          await listenerApi.condition(testAction2.match)
+        } catch (err) {
+          if (err instanceof TaskAbortError) {
+            wasCancelled = true
+          }
+        }
+      }
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+      stopListening({ actionCreator: testAction1, effect, cancelActive: true })
+      expect(wasCancelled).toBe(false)
+      await delay(10)
+      expect(wasCancelled).toBe(true)
+    })
+
+    test('can cancel an active listener when unsubscribing via removeListener', async () => {
+      let wasCancelled = false
+      const effect = async (action: any, listenerApi: any) => {
+        try {
+          await listenerApi.condition(testAction2.match)
+        } catch (err) {
+          if (err instanceof TaskAbortError) {
+            wasCancelled = true
+          }
+        }
+      }
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+      store.dispatch(
+        removeListener({
+          actionCreator: testAction1,
+          effect,
+          cancelActive: true,
+        }),
+      )
+      expect(wasCancelled).toBe(false)
+      await delay(10)
+      expect(wasCancelled).toBe(true)
+    })
+
+    const addListenerOptions: [
+      string,
+      Omit<
+        AddListenerOverloads<
+          () => void,
+          typeof store.getState,
+          typeof store.dispatch
+        >,
+        'effect' | 'withTypes'
+      >,
+    ][] = [
+      ['predicate', { predicate: () => true }],
+      ['actionCreator', { actionCreator: testAction1 }],
+      ['matcher', { matcher: isAnyOf(testAction1, testAction2) }],
+      ['type', { type: testAction1.type }],
+    ]
+
+    test.each(addListenerOptions)(
+      'add and remove listener with "%s" param correctly',
+      (_, params) => {
+        const effect: ListenerEffect<
+          UnknownAction,
+          typeof store.getState,
+          typeof store.dispatch
+        > = vi.fn()
+
+        startListening({ ...params, effect } as any)
+
+        store.dispatch(testAction1('a'))
+        expect(effect).toBeCalledTimes(1)
+
+        stopListening({ ...params, effect } as any)
+
+        store.dispatch(testAction1('b'))
+        expect(effect).toBeCalledTimes(1)
+      },
+    )
+
+    const unforwardedActions: [string, UnknownAction][] = [
+      [
+        'addListener',
+        addListener({ actionCreator: testAction1, effect: noop }),
+      ],
+      [
+        'removeListener',
+        removeListener({ actionCreator: testAction1, effect: noop }),
+      ],
+    ]
+    test.each(unforwardedActions)(
+      '"%s" is not forwarded to the reducer',
+      (_, action) => {
+        reducer.mockClear()
+
+        store.dispatch(testAction1('a'))
+        store.dispatch(action)
+        store.dispatch(testAction2('b'))
+
+        expect(reducer.mock.calls).toEqual([
+          [{}, testAction1('a')],
+          [{}, testAction2('b')],
+        ])
+      },
+    )
+
+    test('listenerApi.signal has correct reason when listener is cancelled or completes', async () => {
+      const notifyDeferred = createAction<Deferred<string>>('notify-deferred')
+
+      startListening({
+        actionCreator: notifyDeferred,
+        async effect({ payload }, { signal, cancelActiveListeners, delay }) {
+          signal.addEventListener(
+            'abort',
+            () => {
+              payload.resolve((signal as AbortSignalWithReason<string>).reason)
+            },
+            { once: true },
+          )
+
+          cancelActiveListeners()
+          delay(10)
+        },
+      })
+
+      const deferredCancelledSignalReason = store.dispatch(
+        notifyDeferred(deferred<string>()),
+      ).payload
+      const deferredCompletedSignalReason = store.dispatch(
+        notifyDeferred(deferred<string>()),
+      ).payload
+
+      expect(await deferredCancelledSignalReason).toBe(listenerCancelled)
+      expect(await deferredCompletedSignalReason).toBe(listenerCompleted)
+    })
+
+    test('can self-cancel via middleware api', async () => {
+      const notifyDeferred = createAction<Deferred<string>>('notify-deferred')
+
+      startListening({
+        actionCreator: notifyDeferred,
+        effect: async ({ payload }, { signal, cancel, delay }) => {
+          signal.addEventListener(
+            'abort',
+            () => {
+              payload.resolve((signal as AbortSignalWithReason<string>).reason)
+            },
+            { once: true },
+          )
+
+          cancel()
+        },
+      })
+
+      const deferredCancelledSignalReason = store.dispatch(
+        notifyDeferred(deferred<string>()),
+      ).payload
+
+      expect(await deferredCancelledSignalReason).toBe(listenerCancelled)
+    })
+
+    test('Can easily check if the listener has been cancelled', async () => {
+      const pauseDeferred = deferred<void>()
+
+      let listenerCancelled = false
+      let listenerStarted = false
+      let listenerCompleted = false
+      let cancelListener: () => void = () => {}
+      let error: TaskAbortError | undefined = undefined
+
+      startListening({
+        actionCreator: testAction1,
+        effect: async ({ payload }, { throwIfCancelled, cancel }) => {
+          cancelListener = cancel
+          try {
+            listenerStarted = true
+            throwIfCancelled()
+            await pauseDeferred
+
+            throwIfCancelled()
+            listenerCompleted = true
+          } catch (err) {
+            if (err instanceof TaskAbortError) {
+              listenerCancelled = true
+              error = err
+            }
+          }
+        },
+      })
+
+      store.dispatch(testAction1('a'))
+      expect(listenerStarted).toBe(true)
+      expect(listenerCompleted).toBe(false)
+      expect(listenerCancelled).toBe(false)
+
+      // Cancel it while the listener is paused at a non-cancel-aware promise
+      cancelListener()
+      pauseDeferred.resolve()
+
+      await delay(10)
+      expect(listenerCompleted).toBe(false)
+      expect(listenerCancelled).toBe(true)
+      expect((error as any)?.message).toBe(
+        'task cancelled (reason: listener-cancelled)',
+      )
+    })
+
+    test('can unsubscribe via middleware api', () => {
+      const effect = vi.fn(
+        (action: TestAction1, api: ListenerEffectAPI<any, any>) => {
+          if (action.payload === 'b') {
+            api.unsubscribe()
+          }
+        },
+      )
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+      store.dispatch(testAction1('b'))
+      store.dispatch(testAction1('c'))
+
+      expect(effect.mock.calls).toEqual([
+        [testAction1('a'), middlewareApi],
+        [testAction1('b'), middlewareApi],
+      ])
+    })
+
+    test('Can re-subscribe via middleware api', async () => {
+      let numListenerRuns = 0
+      startListening({
+        actionCreator: testAction1,
+        effect: async (action, listenerApi) => {
+          numListenerRuns++
+
+          listenerApi.unsubscribe()
+
+          await listenerApi.condition(testAction2.match)
+
+          listenerApi.subscribe()
+        },
+      })
+
+      store.dispatch(testAction1('a'))
+      expect(numListenerRuns).toBe(1)
+
+      store.dispatch(testAction1('a'))
+      expect(numListenerRuns).toBe(1)
+
+      store.dispatch(testAction2('b'))
+      expect(numListenerRuns).toBe(1)
+
+      await delay(5)
+
+      store.dispatch(testAction1('b'))
+      expect(numListenerRuns).toBe(2)
+    })
+  })
+
+  describe('clear listeners', () => {
+    test('dispatch(clearListenerAction()) cancels running listeners and removes all subscriptions', async () => {
+      const listener1Test = deferred()
+      let listener1Calls = 0
+      let listener2Calls = 0
+      let listener3Calls = 0
+
+      startListening({
+        actionCreator: testAction1,
+        async effect(_, listenerApi) {
+          listener1Calls++
+          listenerApi.signal.addEventListener(
+            'abort',
+            () => listener1Test.resolve(listener1Calls),
+            { once: true },
+          )
+          await listenerApi.condition(() => true)
+          listener1Test.reject(new Error('unreachable: listener1Test'))
+        },
+      })
+
+      startListening({
+        actionCreator: clearAllListeners,
+        effect() {
+          listener2Calls++
+        },
+      })
+
+      startListening({
+        predicate: () => true,
+        effect() {
+          listener3Calls++
+        },
+      })
+
+      store.dispatch(testAction1('a'))
+      store.dispatch(clearAllListeners())
+      store.dispatch(testAction1('b'))
+      expect(await listener1Test).toBe(1)
+      expect(listener1Calls).toBe(1)
+      expect(listener3Calls).toBe(1)
+      expect(listener2Calls).toBe(0)
+    })
+
+    test('clear() cancels running listeners and removes all subscriptions', async () => {
+      const listener1Test = deferred()
+
+      let listener1Calls = 0
+      let listener2Calls = 0
+
+      startListening({
+        actionCreator: testAction1,
+        async effect(_, listenerApi) {
+          listener1Calls++
+          listenerApi.signal.addEventListener(
+            'abort',
+            () => listener1Test.resolve(listener1Calls),
+            { once: true },
+          )
+          await listenerApi.condition(() => true)
+          listener1Test.reject(new Error('unreachable: listener1Test'))
+        },
+      })
+
+      startListening({
+        actionCreator: testAction2,
+        effect() {
+          listener2Calls++
+        },
+      })
+
+      store.dispatch(testAction1('a'))
+
+      clearListeners()
+      store.dispatch(testAction1('b'))
+      store.dispatch(testAction2('c'))
+
+      expect(listener2Calls).toBe(0)
+      expect(await listener1Test).toBe(1)
+    })
+
+    test('clear() cancels all running forked tasks', async () => {
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      startListening({
+        actionCreator: testAction1,
+        async effect(_, { fork, dispatch }) {
+          await fork(() => dispatch(incrementByAmount(3))).result
+          dispatch(incrementByAmount(4))
+        },
+      })
+
+      expect(store.getState().value).toBe(0)
+      store.dispatch(testAction1('a'))
+
+      clearListeners()
+
+      await Promise.resolve() // Forked tasks run on the next microtask.
+
+      expect(store.getState().value).toBe(0)
+    })
+  })
+
+  describe('Listener API', () => {
+    test('Passes both getState and getOriginalState in the API', () => {
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      let listener1Calls = 0
+      startListening({
+        actionCreator: increment,
+        effect: (action, listenerApi) => {
+          const stateBefore = listenerApi.getOriginalState() as CounterState
+          const currentState = listenerApi.getOriginalState() as CounterState
+
+          listener1Calls++
+          // In the "before" phase, we pass the same state
+          expect(currentState).toBe(stateBefore)
+        },
+      })
+
+      let listener2Calls = 0
+      startListening({
+        actionCreator: increment,
+        effect: (action, listenerApi) => {
+          // TODO getState functions aren't typed right here
+          const stateBefore = listenerApi.getOriginalState() as CounterState
+          const currentState = listenerApi.getOriginalState() as CounterState
+
+          listener2Calls++
+          // In the "after" phase, we pass the new state for `getState`, and still have original state too
+          expect(currentState.value).toBe(stateBefore.value + 1)
+        },
+      })
+
+      store.dispatch(increment())
+
+      expect(listener1Calls).toBe(1)
+      expect(listener2Calls).toBe(1)
+    })
+
+    test('getOriginalState can only be invoked synchronously', async () => {
+      const onError = vi.fn()
+
+      const listenerMiddleware = createListenerMiddleware<CounterState>({
+        onError,
+      })
+      const { middleware, startListening } = listenerMiddleware
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      startListening({
+        actionCreator: increment,
+        async effect(_, listenerApi) {
+          const runIncrementBy = () => {
+            listenerApi.dispatch(
+              counterSlice.actions.incrementByAmount(
+                listenerApi.getOriginalState().value + 2,
+              ),
+            )
+          }
+
+          runIncrementBy()
+
+          await Promise.resolve()
+
+          runIncrementBy()
+        },
+      })
+
+      expect(store.getState()).toEqual({ value: 0 })
+
+      store.dispatch(increment()) // state.value+=1 && trigger listener
+      expect(onError).not.toHaveBeenCalled()
+      expect(store.getState()).toEqual({ value: 3 })
+
+      await delay(0)
+
+      expect(onError).toBeCalledWith(
+        new Error(
+          'listenerMiddleware: getOriginalState can only be called synchronously',
+        ),
+        { raisedBy: 'effect' },
+      )
+      expect(store.getState()).toEqual({ value: 3 })
+    })
+
+    test('by default, actions are forwarded to the store', () => {
+      reducer.mockClear()
+
+      const effect = vi.fn((_: TestAction1) => {})
+
+      startListening({
+        actionCreator: testAction1,
+        effect,
+      })
+
+      store.dispatch(testAction1('a'))
+
+      expect(reducer.mock.calls).toEqual([[{}, testAction1('a')]])
+    })
+
+    test('listenerApi.delay does not trigger unhandledRejections for completed or cancelled listners', async () => {
+      const deferredCompletedEvt = deferred()
+      const deferredCancelledEvt = deferred()
+      const godotPauseTrigger = deferred()
+
+      // Unfortunately we cannot test declaratively unhandleRejections in jest: https://github.com/facebook/jest/issues/5620
+      // This test just fails if an `unhandledRejection` occurs.
+      startListening({
+        actionCreator: increment,
+        effect: async (_, listenerApi) => {
+          listenerApi.unsubscribe()
+          listenerApi.signal.addEventListener(
+            'abort',
+            deferredCompletedEvt.resolve,
+            { once: true },
+          )
+          listenerApi.delay(100) // missing await
+        },
+      })
+
+      startListening({
+        actionCreator: increment,
+        effect: async (_, listenerApi) => {
+          listenerApi.cancelActiveListeners()
+          listenerApi.signal.addEventListener(
+            'abort',
+            deferredCancelledEvt.resolve,
+            { once: true },
+          )
+          listenerApi.delay(100) // missing await
+          listenerApi.pause(godotPauseTrigger)
+        },
+      })
+
+      store.dispatch(increment())
+      store.dispatch(increment())
+
+      expect(await deferredCompletedEvt).toBeDefined()
+      expect(await deferredCancelledEvt).toBeDefined()
+    })
+  })
+
+  describe('Error handling', () => {
+    test('Continues running other listeners if one of them raises an error', () => {
+      const matcher = (action: any): action is any => true
+
+      startListening({
+        matcher,
+        effect: () => {
+          throw new Error('Panic!')
+        },
+      })
+
+      const effect = vi.fn(() => {})
+      startListening({ matcher, effect })
+
+      store.dispatch(testAction1('a'))
+      expect(effect.mock.calls).toEqual([[testAction1('a'), middlewareApi]])
+    })
+
+    test('Continues running other listeners if a predicate raises an error', () => {
+      const matcher = (action: any): action is any => true
+      const firstListener = vi.fn(() => {})
+      const secondListener = vi.fn(() => {})
+
+      startListening({
+        // @ts-expect-error
+        matcher: (arg: unknown): arg is unknown => {
+          throw new Error('Predicate Panic!')
+        },
+        effect: firstListener,
+      })
+
+      startListening({ matcher, effect: secondListener })
+
+      store.dispatch(testAction1('a'))
+      expect(firstListener).not.toHaveBeenCalled()
+      expect(secondListener.mock.calls).toEqual([
+        [testAction1('a'), middlewareApi],
+      ])
+    })
+
+    test('Notifies sync listener errors to `onError`, if provided', async () => {
+      const onError = vi.fn()
+      const listenerMiddleware = createListenerMiddleware({
+        onError,
+      })
+      const { middleware, startListening } = listenerMiddleware
+      reducer = vi.fn(() => ({}))
+      store = configureStore({
+        reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      const listenerError = new Error('Boom!')
+
+      const matcher = (action: any): action is any => true
+
+      startListening({
+        matcher,
+        effect: () => {
+          throw listenerError
+        },
+      })
+
+      store.dispatch(testAction1('a'))
+      await delay(100)
+
+      expect(onError).toBeCalledWith(listenerError, {
+        raisedBy: 'effect',
+      })
+    })
+
+    test('Notifies async listeners errors to `onError`, if provided', async () => {
+      const onError = vi.fn()
+      const listenerMiddleware = createListenerMiddleware({
+        onError,
+      })
+      const { middleware, startListening } = listenerMiddleware
+      reducer = vi.fn(() => ({}))
+      store = configureStore({
+        reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      const listenerError = new Error('Boom!')
+      const matcher = (action: any): action is any => true
+
+      startListening({
+        matcher,
+        effect: async () => {
+          throw listenerError
+        },
+      })
+
+      store.dispatch(testAction1('a'))
+
+      await delay(100)
+
+      expect(onError).toBeCalledWith(listenerError, {
+        raisedBy: 'effect',
+      })
+    })
+  })
+
+  describe('take and condition methods', () => {
+    test('take resolves to the tuple [A, CurrentState, PreviousState] when the predicate matches the action', async () => {
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      const typedAddListener = startListening as TypedStartListening<
+        CounterState,
+        typeof store.dispatch
+      >
+      let result:
+        | [ReturnType<typeof increment>, CounterState, CounterState]
+        | null = null
+
+      typedAddListener({
+        predicate: incrementByAmount.match,
+        async effect(_: UnknownAction, listenerApi) {
+          result = await listenerApi.take(increment.match)
+        },
+      })
+      store.dispatch(incrementByAmount(1))
+      store.dispatch(increment())
+
+      await delay(10)
+
+      expect(result).toEqual([increment(), { value: 2 }, { value: 1 }])
+    })
+
+    test('take resolves to null if the timeout expires', async () => {
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      let takeResult: any = undefined
+
+      startListening({
+        predicate: incrementByAmount.match,
+        effect: async (_, listenerApi) => {
+          takeResult = await listenerApi.take(increment.match, 15)
+        },
+      })
+      store.dispatch(incrementByAmount(1))
+      await delay(25)
+
+      expect(takeResult).toBe(null)
+    })
+
+    test("take resolves to [A, CurrentState, PreviousState] if the timeout is provided but doesn't expire", async () => {
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+      let takeResult: any = undefined
+      let stateBefore: any = undefined
+      let stateCurrent: any = undefined
+
+      startListening({
+        predicate: incrementByAmount.match,
+        effect: async (_, listenerApi) => {
+          stateBefore = listenerApi.getState()
+          takeResult = await listenerApi.take(increment.match, 50)
+          stateCurrent = listenerApi.getState()
+        },
+      })
+      store.dispatch(incrementByAmount(1))
+      store.dispatch(increment())
+
+      await delay(25)
+      expect(takeResult).toEqual([increment(), stateCurrent, stateBefore])
+    })
+
+    test('take resolves to `[A, CurrentState, PreviousState] | null` if a possibly undefined timeout parameter is provided', async () => {
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      let timeout: number | undefined = undefined
+      let done = false
+
+      const startAppListening =
+        startListening as TypedStartListening<CounterState>
+      startAppListening({
+        predicate: incrementByAmount.match,
+        effect: async (_, listenerApi) => {
+          const stateBefore = listenerApi.getState()
+
+          let takeResult = await listenerApi.take(increment.match, timeout)
+          const stateCurrent = listenerApi.getState()
+          expect(takeResult).toEqual([increment(), stateCurrent, stateBefore])
+
+          timeout = 1
+          takeResult = await listenerApi.take(increment.match, timeout)
+          expect(takeResult).toBeNull()
+
+          done = true
+        },
+      })
+      store.dispatch(incrementByAmount(1))
+      store.dispatch(increment())
+
+      await delay(25)
+      expect(done).toBe(true)
+    })
+
+    test('condition method resolves promise when the predicate succeeds', async () => {
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      let finalCount = 0
+      let listenerStarted = false
+
+      startListening({
+        predicate: (action, _, previousState) => {
+          return (
+            increment.match(action) &&
+            (previousState as CounterState).value === 0
+          )
+        },
+        effect: async (action, listenerApi) => {
+          listenerStarted = true
+          const result = await listenerApi.condition((action, currentState) => {
+            return (currentState as CounterState).value === 3
+          })
+
+          expect(result).toBe(true)
+          const latestState = listenerApi.getState() as CounterState
+          finalCount = latestState.value
+        },
+      })
+
+      store.dispatch(increment())
+
+      expect(listenerStarted).toBe(true)
+      await delay(25)
+      store.dispatch(increment())
+      store.dispatch(increment())
+
+      await delay(25)
+
+      expect(finalCount).toBe(3)
+    })
+
+    test('condition method resolves promise when there is a timeout', async () => {
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+
+      let finalCount = 0
+      let listenerStarted = false
+
+      startListening({
+        predicate: (action, currentState) => {
+          return (
+            increment.match(action) &&
+            (currentState as CounterState).value === 1
+          )
+        },
+        effect: async (action, listenerApi) => {
+          listenerStarted = true
+          const result = await listenerApi.condition((action, currentState) => {
+            return (currentState as CounterState).value === 3
+          }, 25)
+
+          expect(result).toBe(false)
+          const latestState = listenerApi.getState() as CounterState
+          finalCount = latestState.value
+        },
+      })
+
+      store.dispatch(increment())
+      expect(listenerStarted).toBe(true)
+
+      store.dispatch(increment())
+
+      await delay(50)
+      store.dispatch(increment())
+
+      expect(finalCount).toBe(2)
+    })
+
+    test('take does not trigger unhandledRejections for completed or cancelled tasks', async () => {
+      const deferredCompletedEvt = deferred()
+      const deferredCancelledEvt = deferred()
+      const store = configureStore({
+        reducer: counterSlice.reducer,
+        middleware: (gDM) => gDM().prepend(middleware),
+      })
+      const godotPauseTrigger = deferred()
+
+      startListening({
+        predicate: () => true,
+        effect: async (_, listenerApi) => {
+          listenerApi.unsubscribe() // run once
+          listenerApi.signal.addEventListener(
+            'abort',
+            deferredCompletedEvt.resolve,
+          )
+          listenerApi.take(() => true) // missing await
+        },
+      })
+
+      startListening({
+        predicate: () => true,
+        effect: async (_, listenerApi) => {
+          listenerApi.cancelActiveListeners()
+          listenerApi.signal.addEventListener(
+            'abort',
+            deferredCancelledEvt.resolve,
+          )
+          listenerApi.take(() => true) // missing await
+          await listenerApi.pause(godotPauseTrigger)
+        },
+      })
+
+      store.dispatch({ type: 'type' })
+      store.dispatch({ type: 'type' })
+      expect(await deferredCompletedEvt).toBeDefined()
+    })
+  })
+
+  describe('Job API', () => {
+    test('Allows canceling previous jobs', async () => {
+      let jobsStarted = 0
+      let jobsContinued = 0
+      let jobsCanceled = 0
+
+      startListening({
+        actionCreator: increment,
+        effect: async (action, listenerApi) => {
+          jobsStarted++
+
+          if (jobsStarted < 3) {
+            try {
+              await listenerApi.condition(decrement.match)
+              // Cancelation _should_ cause `condition()` to throw so we never
+              // end up hitting this next line
+              jobsContinued++
+            } catch (err) {
+              if (err instanceof TaskAbortError) {
+                jobsCanceled++
+              }
+            }
+          } else {
+            listenerApi.cancelActiveListeners()
+          }
+        },
+      })
+
+      store.dispatch(increment())
+      store.dispatch(increment())
+      store.dispatch(increment())
+
+      await delay(10)
+      expect(jobsStarted).toBe(3)
+      expect(jobsContinued).toBe(0)
+      expect(jobsCanceled).toBe(2)
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.withTypes.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.withTypes.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.withTypes.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,159 @@
+import type {
+  Action,
+  ThunkAction,
+  TypedAddListener,
+  TypedRemoveListener,
+  TypedStartListening,
+  TypedStopListening,
+} from '@reduxjs/toolkit'
+import {
+  addListener,
+  configureStore,
+  createAsyncThunk,
+  createListenerMiddleware,
+  createSlice,
+  removeListener,
+} from '@reduxjs/toolkit'
+import { describe, expectTypeOf, test } from 'vitest'
+
+export interface CounterState {
+  counter: number
+}
+
+const initialState: CounterState = {
+  counter: 0,
+}
+
+export const counterSlice = createSlice({
+  name: 'counter',
+  initialState,
+  reducers: {
+    increment(state) {
+      state.counter++
+    },
+  },
+})
+
+export function fetchCount(amount = 1) {
+  return new Promise<{ data: number }>((resolve) =>
+    setTimeout(() => resolve({ data: amount }), 500),
+  )
+}
+
+export const incrementAsync = createAsyncThunk(
+  'counter/fetchCount',
+  async (amount: number) => {
+    const response = await fetchCount(amount)
+    // The value we return becomes the `fulfilled` action payload
+    return response.data
+  },
+)
+
+const { increment } = counterSlice.actions
+
+const store = configureStore({
+  reducer: counterSlice.reducer,
+})
+
+type AppStore = typeof store
+type AppDispatch = typeof store.dispatch
+type RootState = ReturnType<typeof store.getState>
+type AppThunk<ThunkReturnType = void> = ThunkAction<
+  ThunkReturnType,
+  RootState,
+  unknown,
+  Action
+>
+type ExtraArgument = { foo: string }
+
+describe('listenerMiddleware.withTypes<RootState, AppDispatch>()', () => {
+  const listenerMiddleware = createListenerMiddleware()
+  let timeout: number | undefined = undefined
+  let done = false
+
+  type ExpectedTakeResultType =
+    | [ReturnType<typeof increment>, RootState, RootState]
+    | null
+
+  test('startListening.withTypes', () => {
+    const startAppListening = listenerMiddleware.startListening.withTypes<
+      RootState,
+      AppDispatch,
+      ExtraArgument
+    >()
+
+    expectTypeOf(startAppListening).toEqualTypeOf<
+      TypedStartListening<RootState, AppDispatch, ExtraArgument>
+    >()
+
+    startAppListening({
+      predicate: increment.match,
+      effect: async (action, listenerApi) => {
+        const stateBefore = listenerApi.getState()
+
+        expectTypeOf(increment).returns.toEqualTypeOf(action)
+
+        expectTypeOf(listenerApi.dispatch).toEqualTypeOf<AppDispatch>()
+
+        expectTypeOf(stateBefore).toEqualTypeOf<RootState>()
+
+        let takeResult = await listenerApi.take(increment.match, timeout)
+        const stateCurrent = listenerApi.getState()
+
+        expectTypeOf(takeResult).toEqualTypeOf<ExpectedTakeResultType>()
+
+        expectTypeOf(stateCurrent).toEqualTypeOf<RootState>()
+
+        expectTypeOf(listenerApi.extra).toEqualTypeOf<ExtraArgument>()
+
+        timeout = 1
+        takeResult = await listenerApi.take(increment.match, timeout)
+
+        done = true
+      },
+    })
+  })
+
+  test('addListener.withTypes', () => {
+    const addAppListener = addListener.withTypes<RootState, AppDispatch, ExtraArgument>()
+
+    expectTypeOf(addAppListener).toEqualTypeOf<
+      TypedAddListener<RootState, AppDispatch, ExtraArgument>
+    >()
+
+    store.dispatch(
+      addAppListener({
+        matcher: increment.match,
+        effect: (action, listenerApi) => {
+          const state = listenerApi.getState()
+
+          expectTypeOf(state).toEqualTypeOf<RootState>()
+
+          expectTypeOf(listenerApi.dispatch).toEqualTypeOf<AppDispatch>()
+
+          expectTypeOf(listenerApi.extra).toEqualTypeOf<ExtraArgument>()
+        },
+      }),
+    )
+  })
+
+  test('removeListener.withTypes', () => {
+    const removeAppListener = removeListener.withTypes<RootState, AppDispatch, ExtraArgument>()
+
+    expectTypeOf(removeAppListener).toEqualTypeOf<
+      TypedRemoveListener<RootState, AppDispatch, ExtraArgument>
+    >()
+  })
+
+  test('stopListening.withTypes', () => {
+    const stopAppListening = listenerMiddleware.stopListening.withTypes<
+      RootState,
+      AppDispatch,
+      ExtraArgument
+    >()
+
+    expectTypeOf(stopAppListening).toEqualTypeOf<
+      TypedStopListening<RootState, AppDispatch, ExtraArgument>
+    >()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.withTypes.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.withTypes.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/listenerMiddleware.withTypes.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,120 @@
+import type { Action } from 'redux'
+import type { ThunkAction } from 'redux-thunk'
+import { describe, expect, test } from 'vitest'
+import { configureStore } from '../../configureStore'
+import { createAsyncThunk } from '../../createAsyncThunk'
+import { createSlice } from '../../createSlice'
+import { addListener, createListenerMiddleware, removeListener } from '../index'
+
+export interface CounterState {
+  counter: number
+}
+
+const initialState: CounterState = {
+  counter: 0,
+}
+
+export const counterSlice = createSlice({
+  name: 'counter',
+  initialState,
+  reducers: {
+    increment(state) {
+      state.counter++
+    },
+  },
+})
+
+export function fetchCount(amount = 1) {
+  return new Promise<{ data: number }>((resolve) =>
+    setTimeout(() => resolve({ data: amount }), 500),
+  )
+}
+
+export const incrementAsync = createAsyncThunk(
+  'counter/fetchCount',
+  async (amount: number) => {
+    const response = await fetchCount(amount)
+    // The value we return becomes the `fulfilled` action payload
+    return response.data
+  },
+)
+
+const { increment } = counterSlice.actions
+
+const store = configureStore({
+  reducer: counterSlice.reducer,
+})
+
+type AppStore = typeof store
+type AppDispatch = typeof store.dispatch
+type RootState = ReturnType<typeof store.getState>
+type AppThunk<ThunkReturnType = void> = ThunkAction<
+  ThunkReturnType,
+  RootState,
+  unknown,
+  Action
+>
+
+type ExtraArgument = { foo: string }
+
+const listenerMiddleware = createListenerMiddleware()
+
+const startAppListening = listenerMiddleware.startListening.withTypes<
+  RootState,
+  AppDispatch,
+  ExtraArgument
+>()
+
+const stopAppListening = listenerMiddleware.stopListening.withTypes<
+  RootState,
+  AppDispatch,
+  ExtraArgument
+>()
+
+const addAppListener = addListener.withTypes<RootState, AppDispatch, ExtraArgument>()
+
+const removeAppListener = removeListener.withTypes<RootState, AppDispatch, ExtraArgument>()
+
+describe('startAppListening.withTypes', () => {
+  test('should return startListening', () => {
+    expect(startAppListening.withTypes).toEqual(expect.any(Function))
+
+    expect(startAppListening.withTypes().withTypes).toEqual(
+      expect.any(Function),
+    )
+
+    expect(startAppListening).toBe(listenerMiddleware.startListening)
+  })
+})
+
+describe('stopAppListening.withTypes', () => {
+  test('should return stopListening', () => {
+    expect(stopAppListening.withTypes).toEqual(expect.any(Function))
+
+    expect(stopAppListening.withTypes().withTypes).toEqual(expect.any(Function))
+
+    expect(stopAppListening).toBe(listenerMiddleware.stopListening)
+  })
+})
+
+describe('addAppListener.withTypes', () => {
+  test('should return addListener', () => {
+    expect(addAppListener.withTypes).toEqual(expect.any(Function))
+
+    expect(addAppListener.withTypes().withTypes).toEqual(expect.any(Function))
+
+    expect(addAppListener).toBe(addListener)
+  })
+})
+
+describe('removeAppListener.withTypes', () => {
+  test('should return removeListener', () => {
+    expect(removeAppListener.withTypes).toEqual(expect.any(Function))
+
+    expect(removeAppListener.withTypes().withTypes).toEqual(
+      expect.any(Function),
+    )
+
+    expect(removeAppListener).toBe(removeListener)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/useCases.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/useCases.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/tests/useCases.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,175 @@
+import {
+  configureStore,
+  createAction,
+  createSlice,
+  isAnyOf,
+} from '@reduxjs/toolkit'
+
+import type { PayloadAction } from '@reduxjs/toolkit'
+
+import { createListenerMiddleware } from '../index'
+
+import type { TypedAddListener } from '../index'
+import { TaskAbortError } from '../exceptions'
+
+interface CounterState {
+  value: number
+}
+
+const counterSlice = createSlice({
+  name: 'counter',
+  initialState: { value: 0 } as CounterState,
+  reducers: {
+    increment(state) {
+      state.value += 1
+    },
+    decrement(state) {
+      state.value -= 1
+    },
+    // Use the PayloadAction type to declare the contents of `action.payload`
+    incrementByAmount: (state, action: PayloadAction<number>) => {
+      state.value += action.payload
+    },
+  },
+})
+const { increment, decrement, incrementByAmount } = counterSlice.actions
+
+describe('Saga-style Effects Scenarios', () => {
+  let listenerMiddleware = createListenerMiddleware<CounterState>()
+  let { middleware, startListening, stopListening } = listenerMiddleware
+
+  let store = configureStore({
+    reducer: counterSlice.reducer,
+    middleware: (gDM) => gDM().prepend(middleware),
+  })
+
+  const testAction1 = createAction<string>('testAction1')
+  type TestAction1 = ReturnType<typeof testAction1>
+  const testAction2 = createAction<string>('testAction2')
+  type TestAction2 = ReturnType<typeof testAction2>
+  const testAction3 = createAction<string>('testAction3')
+  type TestAction3 = ReturnType<typeof testAction3>
+
+  type RootState = ReturnType<typeof store.getState>
+
+  function delay(ms: number) {
+    return new Promise((resolve) => setTimeout(resolve, ms))
+  }
+
+  beforeEach(() => {
+    listenerMiddleware = createListenerMiddleware<CounterState>()
+    middleware = listenerMiddleware.middleware
+    startListening = listenerMiddleware.startListening
+    store = configureStore({
+      reducer: counterSlice.reducer,
+      middleware: (gDM) => gDM().prepend(middleware),
+    })
+  })
+
+  test('Long polling loop', async () => {
+    // Reimplementation of a saga-based long-polling loop that is controlled
+    // by "start/stop" actions. The infinite loop waits for a message from the
+    // server, processes it somehow, and waits for the next message.
+    // Ref: https://gist.github.com/markerikson/5203e71a69fa9dff203c9e27c3d84154
+    const eventPollingStarted = createAction('serverPolling/started')
+    const eventPollingStopped = createAction('serverPolling/stopped')
+
+    // For this example, we're going to fake up a "server event poll" async
+    // function by wrapping an event emitter so that every call returns a
+    // promise that is resolved the next time an event is emitted.
+    // This is the tiniest event emitter I could find to copy-paste in here.
+    let createNanoEvents = () => ({
+      events: {} as Record<string, any>,
+      emit(event: string, ...args: any[]) {
+        ;(this.events[event] || []).forEach((i: any) => i(...args))
+      },
+      on(event: string, cb: (...args: any[]) => void) {
+        ;(this.events[event] = this.events[event] || []).push(cb)
+        return () =>
+          (this.events[event] = (this.events[event] || []).filter(
+            (l: any) => l !== cb,
+          ))
+      },
+    })
+    const emitter = createNanoEvents()
+
+    // Rig up a dummy "receive a message from the server" API we can trigger manually
+    function pollForEvent() {
+      return new Promise<{ type: string }>((resolve, reject) => {
+        const unsubscribe = emitter.on('serverEvent', (arg1: string) => {
+          unsubscribe()
+          resolve({ type: arg1 })
+        })
+      })
+    }
+
+    // Track how many times each message was processed by the loop
+    const receivedMessages = {
+      a: 0,
+      b: 0,
+      c: 0,
+    }
+
+    let pollingTaskStarted = false
+    let pollingTaskCanceled = false
+
+    startListening({
+      actionCreator: eventPollingStarted,
+      effect: async (action, listenerApi) => {
+        listenerApi.unsubscribe()
+
+        // Start a child job that will infinitely loop receiving messages
+        const pollingTask = listenerApi.fork(async (forkApi) => {
+          pollingTaskStarted = true
+          try {
+            while (true) {
+              // Cancelation-aware pause for a new server message
+              const serverEvent = await forkApi.pause(pollForEvent())
+              // Process the message. In this case, just count the times we've seen this message.
+              if (serverEvent.type in receivedMessages) {
+                receivedMessages[
+                  serverEvent.type as keyof typeof receivedMessages
+                ]++
+              }
+            }
+          } catch (err) {
+            if (err instanceof TaskAbortError) {
+              pollingTaskCanceled = true
+            }
+          }
+          return 0
+        })
+
+        // Wait for the "stop polling" action
+        await listenerApi.condition(eventPollingStopped.match)
+        pollingTask.cancel()
+      },
+    })
+
+    store.dispatch(eventPollingStarted())
+    await delay(5)
+    expect(pollingTaskStarted).toBe(true)
+
+    await delay(5)
+    emitter.emit('serverEvent', 'a')
+    // Promise resolution
+    await delay(1)
+    emitter.emit('serverEvent', 'b')
+    // Promise resolution
+    await delay(1)
+
+    store.dispatch(eventPollingStopped())
+
+    // Have to break out of the event loop to let the cancelation promise
+    // kick in - emitting before this would still resolve pollForEvent()
+    await delay(1)
+    emitter.emit('serverEvent', 'c')
+
+    // A and B were processed earlier. The first C was processed because the
+    // emitter synchronously resolved the `pollForEvents` promise before
+    // the cancelation took effect, but after another pause, the
+    // cancelation kicked in and the second C is ignored.
+    expect(receivedMessages).toEqual({ a: 1, b: 1, c: 0 })
+    expect(pollingTaskCanceled).toBe(true)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/types.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,878 @@
+import type {
+  Action,
+  Dispatch,
+  Middleware,
+  MiddlewareAPI,
+  UnknownAction,
+} from 'redux'
+import type { ThunkDispatch } from 'redux-thunk'
+import type { BaseActionCreator, PayloadAction } from '../createAction'
+import type { TypedActionCreator } from '../mapBuilders'
+import type { TaskAbortError } from './exceptions'
+
+/**
+ * @internal
+ * At the time of writing `lib.dom.ts` does not provide `abortSignal.reason`.
+ */
+export type AbortSignalWithReason<T> = AbortSignal & { reason?: T }
+
+/**
+ * Types copied from RTK
+ */
+
+/** @internal */
+type TypedActionCreatorWithMatchFunction<Type extends string> =
+  TypedActionCreator<Type> & {
+    match: MatchFunction<any>
+  }
+
+/** @internal */
+export type AnyListenerPredicate<State> = (
+  action: UnknownAction,
+  currentState: State,
+  originalState: State,
+) => boolean
+
+/** @public */
+export type ListenerPredicate<ActionType extends Action, State> = (
+  action: UnknownAction,
+  currentState: State,
+  originalState: State,
+) => action is ActionType
+
+/** @public */
+export interface ConditionFunction<State> {
+  (predicate: AnyListenerPredicate<State>, timeout?: number): Promise<boolean>
+  (predicate: AnyListenerPredicate<State>, timeout?: number): Promise<boolean>
+  (predicate: () => boolean, timeout?: number): Promise<boolean>
+}
+
+/** @internal */
+export type MatchFunction<T> = (v: any) => v is T
+
+/** @public */
+export interface ForkedTaskAPI {
+  /**
+   * Returns a promise that resolves when `waitFor` resolves or
+   * rejects if the task or the parent listener has been cancelled or is completed.
+   */
+  pause<W>(waitFor: Promise<W>): Promise<W>
+  /**
+   * Returns a promise that resolves after `timeoutMs` or
+   * rejects if the task or the parent listener has been cancelled or is completed.
+   * @param timeoutMs
+   */
+  delay(timeoutMs: number): Promise<void>
+  /**
+   * An abort signal whose `aborted` property is set to `true`
+   * if the task execution is either aborted or completed.
+   * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
+   */
+  signal: AbortSignal
+}
+
+/** @public */
+export interface AsyncTaskExecutor<T> {
+  (forkApi: ForkedTaskAPI): Promise<T>
+}
+
+/** @public */
+export interface SyncTaskExecutor<T> {
+  (forkApi: ForkedTaskAPI): T
+}
+
+/** @public */
+export type ForkedTaskExecutor<T> = AsyncTaskExecutor<T> | SyncTaskExecutor<T>
+
+/** @public */
+export type TaskResolved<T> = {
+  readonly status: 'ok'
+  readonly value: T
+}
+
+/** @public */
+export type TaskRejected = {
+  readonly status: 'rejected'
+  readonly error: unknown
+}
+
+/** @public */
+export type TaskCancelled = {
+  readonly status: 'cancelled'
+  readonly error: TaskAbortError
+}
+
+/** @public */
+export type TaskResult<Value> =
+  | TaskResolved<Value>
+  | TaskRejected
+  | TaskCancelled
+
+/** @public */
+export interface ForkedTask<T> {
+  /**
+   * A promise that resolves when the task is either completed or cancelled or rejects
+   * if parent listener execution is cancelled or completed.
+   *
+   * ### Example
+   * ```ts
+   * const result = await fork(async (forkApi) => Promise.resolve(4)).result
+   *
+   * if(result.status === 'ok') {
+   *   console.log(result.value) // logs 4
+   * }}
+   * ```
+   */
+  result: Promise<TaskResult<T>>
+  /**
+   * Cancel task if it is in progress or not yet started,
+   * it is noop otherwise.
+   */
+  cancel(): void
+}
+
+/** @public */
+export interface ForkOptions {
+  /**
+   * If true, causes the parent task to not be marked as complete until
+   * all autoJoined forks have completed or failed.
+   */
+  autoJoin: boolean
+}
+
+/** @public */
+export interface ListenerEffectAPI<
+  State,
+  DispatchType extends Dispatch,
+  ExtraArgument = unknown,
+> extends MiddlewareAPI<DispatchType, State> {
+  /**
+   * Returns the store state as it existed when the action was originally dispatched, _before_ the reducers ran.
+   *
+   * ### Synchronous invocation
+   *
+   * This function can **only** be invoked **synchronously**, it throws error otherwise.
+   *
+   * @example
+   *
+   * ```ts
+   * middleware.startListening({
+   *  predicate: () => true,
+   *  async effect(_, { getOriginalState }) {
+   *    getOriginalState(); // sync: OK!
+   *
+   *    setTimeout(getOriginalState, 0); // async: throws Error
+   *
+   *    await Promise().resolve();
+   *
+   *    getOriginalState() // async: throws Error
+   *  }
+   * })
+   * ```
+   */
+  getOriginalState: () => State
+  /**
+   * Removes the listener entry from the middleware and prevent future instances of the listener from running.
+   *
+   * It does **not** cancel any active instances.
+   */
+  unsubscribe(): void
+  /**
+   * It will subscribe a listener if it was previously removed, noop otherwise.
+   */
+  subscribe(): void
+  /**
+   * Returns a promise that resolves when the input predicate returns `true` or
+   * rejects if the listener has been cancelled or is completed.
+   *
+   * The return value is `true` if the predicate succeeds or `false` if a timeout is provided and expires first.
+   *
+   * ### Example
+   *
+   * ```ts
+   * const updateBy = createAction<number>('counter/updateBy');
+   *
+   * middleware.startListening({
+   *  actionCreator: updateBy,
+   *  async effect(_, { condition }) {
+   *    // wait at most 3s for `updateBy` actions.
+   *    if(await condition(updateBy.match, 3_000)) {
+   *      // `updateBy` has been dispatched twice in less than 3s.
+   *    }
+   *  }
+   * })
+   * ```
+   */
+  condition: ConditionFunction<State>
+  /**
+   * Returns a promise that resolves when the input predicate returns `true` or
+   * rejects if the listener has been cancelled or is completed.
+   *
+   * The return value is the `[action, currentState, previousState]` combination that the predicate saw as arguments.
+   *
+   * The promise resolves to null if a timeout is provided and expires first,
+   *
+   * ### Example
+   *
+   * ```ts
+   * const updateBy = createAction<number>('counter/updateBy');
+   *
+   * middleware.startListening({
+   *  actionCreator: updateBy,
+   *  async effect(_, { take }) {
+   *    const [{ payload }] =  await take(updateBy.match);
+   *    console.log(payload); // logs 5;
+   *  }
+   * })
+   *
+   * store.dispatch(updateBy(5));
+   * ```
+   */
+  take: TakePattern<State>
+  /**
+   * Cancels all other running instances of this same listener except for the one that made this call.
+   */
+  cancelActiveListeners: () => void
+  /**
+   * Cancels the instance of this listener that made this call.
+   */
+  cancel: () => void
+  /**
+   * Throws a `TaskAbortError` if this listener has been cancelled
+   */
+  throwIfCancelled: () => void
+  /**
+   * An abort signal whose `aborted` property is set to `true`
+   * if the listener execution is either aborted or completed.
+   * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal
+   */
+  signal: AbortSignal
+  /**
+   * Returns a promise that resolves after `timeoutMs` or
+   * rejects if the listener has been cancelled or is completed.
+   */
+  delay(timeoutMs: number): Promise<void>
+  /**
+   * Queues in the next microtask the execution of a task.
+   * @param executor
+   * @param options
+   */
+  fork<T>(executor: ForkedTaskExecutor<T>, options?: ForkOptions): ForkedTask<T>
+  /**
+   * Returns a promise that resolves when `waitFor` resolves or
+   * rejects if the listener has been cancelled or is completed.
+   * @param promise
+   */
+  pause<M>(promise: Promise<M>): Promise<M>
+  extra: ExtraArgument
+}
+
+/** @public */
+export type ListenerEffect<
+  ActionType extends Action,
+  State,
+  DispatchType extends Dispatch,
+  ExtraArgument = unknown,
+> = (
+  action: ActionType,
+  api: ListenerEffectAPI<State, DispatchType, ExtraArgument>,
+) => void | Promise<void>
+
+/**
+ * @public
+ * Additional infos regarding the error raised.
+ */
+export interface ListenerErrorInfo {
+  /**
+   * Which function has generated the exception.
+   */
+  raisedBy: 'effect' | 'predicate'
+}
+
+/**
+ * @public
+ * Gets notified with synchronous and asynchronous errors raised by `listeners` or `predicates`.
+ * @param error The thrown error.
+ * @param errorInfo Additional information regarding the thrown error.
+ */
+export interface ListenerErrorHandler {
+  (error: unknown, errorInfo: ListenerErrorInfo): void
+}
+
+/** @public */
+export interface CreateListenerMiddlewareOptions<ExtraArgument = unknown> {
+  extra?: ExtraArgument
+  /**
+   * Receives synchronous errors that are raised by `listener` and `listenerOption.predicate`.
+   */
+  onError?: ListenerErrorHandler
+}
+
+/** @public */
+export type ListenerMiddleware<
+  State = unknown,
+  DispatchType extends ThunkDispatch<State, unknown, Action> = ThunkDispatch<
+    State,
+    unknown,
+    UnknownAction
+  >,
+  ExtraArgument = unknown,
+> = Middleware<
+  {
+    (action: Action<'listenerMiddleware/add'>): UnsubscribeListener
+  },
+  State,
+  DispatchType
+>
+
+/** @public */
+export interface ListenerMiddlewareInstance<
+  StateType = unknown,
+  DispatchType extends ThunkDispatch<
+    StateType,
+    unknown,
+    Action
+  > = ThunkDispatch<StateType, unknown, UnknownAction>,
+  ExtraArgument = unknown,
+> {
+  middleware: ListenerMiddleware<StateType, DispatchType, ExtraArgument>
+
+  startListening: AddListenerOverloads<
+    UnsubscribeListener,
+    StateType,
+    DispatchType,
+    ExtraArgument
+  > &
+    TypedStartListening<StateType, DispatchType, ExtraArgument>
+
+  stopListening: RemoveListenerOverloads<StateType, DispatchType> &
+    TypedStopListening<StateType, DispatchType>
+
+  /**
+   * Unsubscribes all listeners, cancels running listeners and tasks.
+   */
+  clearListeners: () => void
+}
+
+/**
+ * API Function Overloads
+ */
+
+/** @public */
+export type TakePatternOutputWithoutTimeout<
+  State,
+  Predicate extends AnyListenerPredicate<State>,
+> =
+  Predicate extends MatchFunction<infer ActionType>
+    ? Promise<[ActionType, State, State]>
+    : Promise<[UnknownAction, State, State]>
+
+/** @public */
+export type TakePatternOutputWithTimeout<
+  State,
+  Predicate extends AnyListenerPredicate<State>,
+> =
+  Predicate extends MatchFunction<infer ActionType>
+    ? Promise<[ActionType, State, State] | null>
+    : Promise<[UnknownAction, State, State] | null>
+
+/** @public */
+export interface TakePattern<State> {
+  <Predicate extends AnyListenerPredicate<State>>(
+    predicate: Predicate,
+  ): TakePatternOutputWithoutTimeout<State, Predicate>
+  <Predicate extends AnyListenerPredicate<State>>(
+    predicate: Predicate,
+    timeout: number,
+  ): TakePatternOutputWithTimeout<State, Predicate>
+  <Predicate extends AnyListenerPredicate<State>>(
+    predicate: Predicate,
+    timeout?: number | undefined,
+  ): TakePatternOutputWithTimeout<State, Predicate>
+}
+
+/** @public */
+export interface UnsubscribeListenerOptions {
+  cancelActive?: true
+}
+
+/** @public */
+export type UnsubscribeListener = (
+  unsubscribeOptions?: UnsubscribeListenerOptions,
+) => void
+
+/**
+ * @public
+ * The possible overloads and options for defining a listener. The return type of each function is specified as a generic arg, so the overloads can be reused for multiple different functions
+ */
+export type AddListenerOverloads<
+  Return,
+  StateType = unknown,
+  DispatchType extends Dispatch = ThunkDispatch<
+    StateType,
+    unknown,
+    UnknownAction
+  >,
+  ExtraArgument = unknown,
+  AdditionalOptions = unknown,
+> = {
+  /** Accepts a "listener predicate" that is also a TS type predicate for the action*/
+  <
+    MiddlewareActionType extends UnknownAction,
+    ListenerPredicateType extends ListenerPredicate<
+      MiddlewareActionType,
+      StateType
+    >,
+  >(
+    options: {
+      actionCreator?: never
+      type?: never
+      matcher?: never
+      predicate: ListenerPredicateType
+      effect: ListenerEffect<
+        ListenerPredicateGuardedActionType<ListenerPredicateType>,
+        StateType,
+        DispatchType,
+        ExtraArgument
+      >
+    } & AdditionalOptions,
+  ): Return
+
+  /** Accepts an RTK action creator, like `incrementByAmount` */
+  <ActionCreatorType extends TypedActionCreatorWithMatchFunction<any>>(
+    options: {
+      actionCreator: ActionCreatorType
+      type?: never
+      matcher?: never
+      predicate?: never
+      effect: ListenerEffect<
+        ReturnType<ActionCreatorType>,
+        StateType,
+        DispatchType,
+        ExtraArgument
+      >
+    } & AdditionalOptions,
+  ): Return
+
+  /** Accepts a specific action type string */
+  <T extends string>(
+    options: {
+      actionCreator?: never
+      type: T
+      matcher?: never
+      predicate?: never
+      effect: ListenerEffect<Action<T>, StateType, DispatchType, ExtraArgument>
+    } & AdditionalOptions,
+  ): Return
+
+  /** Accepts an RTK matcher function, such as `incrementByAmount.match` */
+  <MatchFunctionType extends MatchFunction<UnknownAction>>(
+    options: {
+      actionCreator?: never
+      type?: never
+      matcher: MatchFunctionType
+      predicate?: never
+      effect: ListenerEffect<
+        GuardedType<MatchFunctionType>,
+        StateType,
+        DispatchType,
+        ExtraArgument
+      >
+    } & AdditionalOptions,
+  ): Return
+
+  /** Accepts a "listener predicate" that just returns a boolean, no type assertion */
+  <ListenerPredicateType extends AnyListenerPredicate<StateType>>(
+    options: {
+      actionCreator?: never
+      type?: never
+      matcher?: never
+      predicate: ListenerPredicateType
+      effect: ListenerEffect<
+        UnknownAction,
+        StateType,
+        DispatchType,
+        ExtraArgument
+      >
+    } & AdditionalOptions,
+  ): Return
+}
+
+/** @public */
+export type RemoveListenerOverloads<
+  StateType = unknown,
+  DispatchType extends Dispatch = ThunkDispatch<
+    StateType,
+    unknown,
+    UnknownAction
+  >,
+  ExtraArgument = unknown,
+> = AddListenerOverloads<
+  boolean,
+  StateType,
+  DispatchType,
+  ExtraArgument,
+  UnsubscribeListenerOptions
+>
+
+/** @public */
+export interface RemoveListenerAction<
+  ActionType extends UnknownAction,
+  State,
+  DispatchType extends Dispatch,
+> {
+  type: 'listenerMiddleware/remove'
+  payload: {
+    type: string
+    listener: ListenerEffect<ActionType, State, DispatchType>
+  }
+}
+
+/**
+ * A "pre-typed" version of `addListenerAction`, so the listener args are well-typed
+ *
+ * @public
+ */
+export type TypedAddListener<
+  StateType,
+  DispatchType extends Dispatch = ThunkDispatch<
+    StateType,
+    unknown,
+    UnknownAction
+  >,
+  ExtraArgument = unknown,
+  Payload = ListenerEntry<StateType, DispatchType>,
+  T extends string = 'listenerMiddleware/add',
+> = BaseActionCreator<Payload, T> &
+  AddListenerOverloads<
+    PayloadAction<Payload, T>,
+    StateType,
+    DispatchType,
+    ExtraArgument
+  > & {
+    /**
+     * Creates a "pre-typed" version of `addListener`
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every `addListener` call.
+     *
+     * @returns A pre-typed `addListener` with the state, dispatch and extra types already defined.
+     *
+     * @example
+     * ```ts
+     * import { addListener } from '@reduxjs/toolkit'
+     *
+     * export const addAppListener = addListener.withTypes<RootState, AppDispatch, ExtraArguments>()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <
+      OverrideStateType extends StateType,
+      OverrideDispatchType extends Dispatch = ThunkDispatch<
+        OverrideStateType,
+        unknown,
+        UnknownAction
+      >,
+      OverrideExtraArgument = unknown,
+    >() => TypedAddListener<
+      OverrideStateType,
+      OverrideDispatchType,
+      OverrideExtraArgument
+    >
+  }
+
+/**
+ * A "pre-typed" version of `removeListenerAction`, so the listener args are well-typed
+ *
+ * @public
+ */
+export type TypedRemoveListener<
+  StateType,
+  DispatchType extends Dispatch = ThunkDispatch<
+    StateType,
+    unknown,
+    UnknownAction
+  >,
+  ExtraArgument = unknown,
+  Payload = ListenerEntry<StateType, DispatchType>,
+  T extends string = 'listenerMiddleware/remove',
+> = BaseActionCreator<Payload, T> &
+  AddListenerOverloads<
+    PayloadAction<Payload, T>,
+    StateType,
+    DispatchType,
+    ExtraArgument,
+    UnsubscribeListenerOptions
+  > & {
+    /**
+     * Creates a "pre-typed" version of `removeListener`
+     * where the `state`, `dispatch` and `extra` types are predefined.
+     *
+     * This allows you to set the `state`, `dispatch` and `extra` types once,
+     * eliminating the need to specify them with every `removeListener` call.
+     *
+     * @returns A pre-typed `removeListener` with the state, dispatch and extra
+     * types already defined.
+     *
+     * @example
+     * ```ts
+     * import { removeListener } from '@reduxjs/toolkit'
+     *
+     * export const removeAppListener = removeListener.withTypes<
+     *   RootState,
+     *   AppDispatch,
+     *   ExtraArguments
+     * >()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state the middleware listener operates on.
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     * @template OverrideExtraArgument - The specific type of the extra object.
+     *
+     * @since 2.1.0
+     */
+    withTypes: <
+      OverrideStateType extends StateType,
+      OverrideDispatchType extends Dispatch = ThunkDispatch<
+        OverrideStateType,
+        unknown,
+        UnknownAction
+      >,
+      OverrideExtraArgument = unknown,
+    >() => TypedRemoveListener<
+      OverrideStateType,
+      OverrideDispatchType,
+      OverrideExtraArgument
+    >
+  }
+
+/**
+ * A "pre-typed" version of `middleware.startListening`, so the listener args are well-typed
+ *
+ * @public
+ */
+export type TypedStartListening<
+  StateType,
+  DispatchType extends Dispatch = ThunkDispatch<
+    StateType,
+    unknown,
+    UnknownAction
+  >,
+  ExtraArgument = unknown,
+> = AddListenerOverloads<
+  UnsubscribeListener,
+  StateType,
+  DispatchType,
+  ExtraArgument
+> & {
+  /**
+   * Creates a "pre-typed" version of
+   * {@linkcode ListenerMiddlewareInstance.startListening startListening}
+   * where the `state`, `dispatch` and `extra` types are predefined.
+   *
+   * This allows you to set the `state`, `dispatch` and `extra` types once,
+   * eliminating the need to specify them with every
+   * {@linkcode ListenerMiddlewareInstance.startListening startListening} call.
+   *
+   * @returns A pre-typed `startListening` with the state, dispatch and extra types already defined.
+   *
+   * @example
+   * ```ts
+   * import { createListenerMiddleware } from '@reduxjs/toolkit'
+   *
+   * const listenerMiddleware = createListenerMiddleware()
+   *
+   * export const startAppListening = listenerMiddleware.startListening.withTypes<
+   *   RootState,
+   *   AppDispatch,
+   *   ExtraArguments
+   * >()
+   * ```
+   *
+   * @template OverrideStateType - The specific type of state the middleware listener operates on.
+   * @template OverrideDispatchType - The specific type of the dispatch function.
+   * @template OverrideExtraArgument - The specific type of the extra object.
+   *
+   * @since 2.1.0
+   */
+  withTypes: <
+    OverrideStateType extends StateType,
+    OverrideDispatchType extends Dispatch = ThunkDispatch<
+      OverrideStateType,
+      unknown,
+      UnknownAction
+    >,
+    OverrideExtraArgument = unknown,
+  >() => TypedStartListening<
+    OverrideStateType,
+    OverrideDispatchType,
+    OverrideExtraArgument
+  >
+}
+
+/**
+ * A "pre-typed" version of `middleware.stopListening`, so the listener args are well-typed
+ *
+ * @public
+ */
+export type TypedStopListening<
+  StateType,
+  DispatchType extends Dispatch = ThunkDispatch<
+    StateType,
+    unknown,
+    UnknownAction
+  >,
+  ExtraArgument = unknown,
+> = RemoveListenerOverloads<StateType, DispatchType, ExtraArgument> & {
+  /**
+   * Creates a "pre-typed" version of
+   * {@linkcode ListenerMiddlewareInstance.stopListening stopListening}
+   * where the `state`, `dispatch` and `extra` types are predefined.
+   *
+   * This allows you to set the `state`, `dispatch` and `extra` types once,
+   * eliminating the need to specify them with every
+   * {@linkcode ListenerMiddlewareInstance.stopListening stopListening} call.
+   *
+   * @returns A pre-typed `stopListening` with the state, dispatch and extra types already defined.
+   *
+   * @example
+   * ```ts
+   * import { createListenerMiddleware } from '@reduxjs/toolkit'
+   *
+   * const listenerMiddleware = createListenerMiddleware()
+   *
+   * export const stopAppListening = listenerMiddleware.stopListening.withTypes<
+   *   RootState,
+   *   AppDispatch,
+   *   ExtraArguments
+   * >()
+   * ```
+   *
+   * @template OverrideStateType - The specific type of state the middleware listener operates on.
+   * @template OverrideDispatchType - The specific type of the dispatch function.
+   * @template OverrideExtraArgument - The specific type of the extra object.
+   *
+   * @since 2.1.0
+   */
+  withTypes: <
+    OverrideStateType extends StateType,
+    OverrideDispatchType extends Dispatch = ThunkDispatch<
+      OverrideStateType,
+      unknown,
+      UnknownAction
+    >,
+    OverrideExtraArgument = unknown,
+  >() => TypedStopListening<
+    OverrideStateType,
+    OverrideDispatchType,
+    OverrideExtraArgument
+  >
+}
+
+/**
+ * A "pre-typed" version of `createListenerEntry`, so the listener args are well-typed
+ *
+ * @public
+ */
+export type TypedCreateListenerEntry<
+  StateType,
+  DispatchType extends Dispatch = ThunkDispatch<
+    StateType,
+    unknown,
+    UnknownAction
+  >,
+  ExtraArgument = unknown,
+> = AddListenerOverloads<
+  ListenerEntry<StateType, DispatchType>,
+  StateType,
+  DispatchType,
+  ExtraArgument
+> & {
+  /**
+   * Creates a "pre-typed" version of `createListenerEntry`
+   * where the `state`, `dispatch` and `extra` types are predefined.
+   *
+   * This allows you to set the `state`, `dispatch` and `extra` types once, eliminating
+   * the need to specify them with every `createListenerEntry` call.
+   *
+   * @returns A pre-typed `createListenerEntry` with the state, dispatch and extra
+   * types already defined.
+   *
+   * @example
+   * ```ts
+   * import { createListenerEntry } from '@reduxjs/toolkit'
+   *
+   * export const createAppListenerEntry = createListenerEntry.withTypes<
+   *   RootState,
+   *   AppDispatch,
+   *   ExtraArguments
+   * >()
+   * ```
+   *
+   * @template OverrideStateType - The specific type of state the middleware listener operates on.
+   * @template OverrideDispatchType - The specific type of the dispatch function.
+   * @template OverrideExtraArgument - The specific type of the extra object.
+   *
+   * @since 2.1.0
+   */
+  withTypes: <
+    OverrideStateType extends StateType,
+    OverrideDispatchType extends Dispatch = ThunkDispatch<
+      OverrideStateType,
+      unknown,
+      UnknownAction
+    >,
+    OverrideExtraArgument = unknown,
+  >() => TypedStopListening<
+    OverrideStateType,
+    OverrideDispatchType,
+    OverrideExtraArgument
+  >
+}
+
+/**
+ * Internal Types
+ */
+
+/** @internal An single listener entry */
+export type ListenerEntry<
+  State = unknown,
+  DispatchType extends Dispatch = Dispatch,
+> = {
+  id: string
+  effect: ListenerEffect<any, State, DispatchType>
+  unsubscribe: () => void
+  pending: Set<AbortController>
+  type?: string
+  predicate: ListenerPredicate<UnknownAction, State>
+}
+
+/**
+ * @internal
+ * A shorthand form of the accepted args, solely so that `createListenerEntry` has validly-typed conditional logic when checking the options contents
+ */
+export type FallbackAddListenerOptions = {
+  actionCreator?: TypedActionCreatorWithMatchFunction<string>
+  type?: string
+  matcher?: MatchFunction<any>
+  predicate?: ListenerPredicate<any, any>
+} & { effect: ListenerEffect<any, any, any> }
+
+/**
+ * Utility Types
+ */
+
+/** @public */
+export type GuardedType<T> = T extends (x: any, ...args: any[]) => x is infer T
+  ? T
+  : never
+
+/** @public */
+export type ListenerPredicateGuardedActionType<T> =
+  T extends ListenerPredicate<infer ActionType, any> ? ActionType : never
Index: node_modules/@reduxjs/toolkit/src/listenerMiddleware/utils.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/listenerMiddleware/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/listenerMiddleware/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+import type { AbortSignalWithReason } from './types'
+
+export const assertFunction: (
+  func: unknown,
+  expected: string,
+) => asserts func is (...args: unknown[]) => unknown = (
+  func: unknown,
+  expected: string,
+) => {
+  if (typeof func !== 'function') {
+    throw new TypeError(`${expected} is not a function`)
+  }
+}
+
+export const noop = () => {}
+
+export const catchRejection = <T>(
+  promise: Promise<T>,
+  onError = noop,
+): Promise<T> => {
+  promise.catch(onError)
+
+  return promise
+}
+
+export const addAbortSignalListener = (
+  abortSignal: AbortSignal,
+  callback: (evt: Event) => void,
+) => {
+  abortSignal.addEventListener('abort', callback, { once: true })
+  return () => abortSignal.removeEventListener('abort', callback)
+}
+
+/**
+ * Calls `abortController.abort(reason)` and patches `signal.reason`.
+ * if it is not supported.
+ *
+ * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.
+ * @param abortController
+ * @param reason
+ * @returns
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason
+ */
+export const abortControllerWithReason = <T>(
+  abortController: AbortController,
+  reason: T,
+): void => {
+  type Consumer<T> = (val: T) => void
+
+  const signal = abortController.signal as AbortSignalWithReason<T>
+
+  if (signal.aborted) {
+    return
+  }
+
+  // Patch `reason` if necessary.
+  // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.
+  // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'
+  // event are are notified immediately.
+  if (!('reason' in signal)) {
+    Object.defineProperty(signal, 'reason', {
+      enumerable: true,
+      value: reason,
+      configurable: true,
+      writable: true,
+    })
+  }
+
+  ;(abortController.abort as Consumer<typeof reason>)(reason)
+}
Index: node_modules/@reduxjs/toolkit/src/mapBuilders.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/mapBuilders.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/mapBuilders.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,202 @@
+import type { Action } from 'redux'
+import type {
+  CaseReducer,
+  CaseReducers,
+  ActionMatcherDescriptionCollection,
+} from './createReducer'
+import type { TypeGuard } from './tsHelpers'
+
+export type TypedActionCreator<Type extends string> = {
+  (...args: any[]): Action<Type>
+  type: Type
+}
+
+/**
+ * A builder for an action <-> reducer map.
+ *
+ * @public
+ */
+export interface ActionReducerMapBuilder<State> {
+  /**
+   * Adds a case reducer to handle a single exact action type.
+   * @remarks
+   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.
+   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.
+   * @param reducer - The actual case reducer function.
+   */
+  addCase<ActionCreator extends TypedActionCreator<string>>(
+    actionCreator: ActionCreator,
+    reducer: CaseReducer<State, ReturnType<ActionCreator>>,
+  ): ActionReducerMapBuilder<State>
+  /**
+   * Adds a case reducer to handle a single exact action type.
+   * @remarks
+   * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.
+   * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.
+   * @param reducer - The actual case reducer function.
+   */
+  addCase<Type extends string, A extends Action<Type>>(
+    type: Type,
+    reducer: CaseReducer<State, A>,
+  ): ActionReducerMapBuilder<State>
+
+  /**
+   * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.
+   * @remarks
+   * If multiple matcher reducers match, all of them will be executed in the order
+   * they were defined in - even if a case reducer already matched.
+   * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.
+   * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)
+   *   function
+   * @param reducer - The actual case reducer function.
+   *
+   * @example
+```ts
+import {
+  createAction,
+  createReducer,
+  AsyncThunk,
+  UnknownAction,
+} from "@reduxjs/toolkit";
+
+type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;
+
+type PendingAction = ReturnType<GenericAsyncThunk["pending"]>;
+type RejectedAction = ReturnType<GenericAsyncThunk["rejected"]>;
+type FulfilledAction = ReturnType<GenericAsyncThunk["fulfilled"]>;
+
+const initialState: Record<string, string> = {};
+const resetAction = createAction("reset-tracked-loading-state");
+
+function isPendingAction(action: UnknownAction): action is PendingAction {
+  return typeof action.type === "string" && action.type.endsWith("/pending");
+}
+
+const reducer = createReducer(initialState, (builder) => {
+  builder
+    .addCase(resetAction, () => initialState)
+    // matcher can be defined outside as a type predicate function
+    .addMatcher(isPendingAction, (state, action) => {
+      state[action.meta.requestId] = "pending";
+    })
+    .addMatcher(
+      // matcher can be defined inline as a type predicate function
+      (action): action is RejectedAction => action.type.endsWith("/rejected"),
+      (state, action) => {
+        state[action.meta.requestId] = "rejected";
+      }
+    )
+    // matcher can just return boolean and the matcher can receive a generic argument
+    .addMatcher<FulfilledAction>(
+      (action) => action.type.endsWith("/fulfilled"),
+      (state, action) => {
+        state[action.meta.requestId] = "fulfilled";
+      }
+    );
+});
+```
+   */
+  addMatcher<A>(
+    matcher: TypeGuard<A> | ((action: any) => boolean),
+    reducer: CaseReducer<State, A extends Action ? A : A & Action>,
+  ): Omit<ActionReducerMapBuilder<State>, 'addCase'>
+
+  /**
+   * Adds a "default case" reducer that is executed if no case reducer and no matcher
+   * reducer was executed for this action.
+   * @param reducer - The fallback "default case" reducer function.
+   *
+   * @example
+```ts
+import { createReducer } from '@reduxjs/toolkit'
+const initialState = { otherActions: 0 }
+const reducer = createReducer(initialState, builder => {
+  builder
+    // .addCase(...)
+    // .addMatcher(...)
+    .addDefaultCase((state, action) => {
+      state.otherActions++
+    })
+})
+```
+   */
+  addDefaultCase(reducer: CaseReducer<State, Action>): {}
+}
+
+export function executeReducerBuilderCallback<S>(
+  builderCallback: (builder: ActionReducerMapBuilder<S>) => void,
+): [
+  CaseReducers<S, any>,
+  ActionMatcherDescriptionCollection<S>,
+  CaseReducer<S, Action> | undefined,
+] {
+  const actionsMap: CaseReducers<S, any> = {}
+  const actionMatchers: ActionMatcherDescriptionCollection<S> = []
+  let defaultCaseReducer: CaseReducer<S, Action> | undefined
+  const builder = {
+    addCase(
+      typeOrActionCreator: string | TypedActionCreator<any>,
+      reducer: CaseReducer<S>,
+    ) {
+      if (process.env.NODE_ENV !== 'production') {
+        /*
+         to keep the definition by the user in line with actual behavior,
+         we enforce `addCase` to always be called before calling `addMatcher`
+         as matching cases take precedence over matchers
+         */
+        if (actionMatchers.length > 0) {
+          throw new Error(
+            '`builder.addCase` should only be called before calling `builder.addMatcher`',
+          )
+        }
+        if (defaultCaseReducer) {
+          throw new Error(
+            '`builder.addCase` should only be called before calling `builder.addDefaultCase`',
+          )
+        }
+      }
+      const type =
+        typeof typeOrActionCreator === 'string'
+          ? typeOrActionCreator
+          : typeOrActionCreator.type
+      if (!type) {
+        throw new Error(
+          '`builder.addCase` cannot be called with an empty action type',
+        )
+      }
+      if (type in actionsMap) {
+        throw new Error(
+          '`builder.addCase` cannot be called with two reducers for the same action type ' +
+            `'${type}'`,
+        )
+      }
+      actionsMap[type] = reducer
+      return builder
+    },
+    addMatcher<A>(
+      matcher: TypeGuard<A>,
+      reducer: CaseReducer<S, A extends Action ? A : A & Action>,
+    ) {
+      if (process.env.NODE_ENV !== 'production') {
+        if (defaultCaseReducer) {
+          throw new Error(
+            '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`',
+          )
+        }
+      }
+      actionMatchers.push({ matcher, reducer })
+      return builder
+    },
+    addDefaultCase(reducer: CaseReducer<S, Action>) {
+      if (process.env.NODE_ENV !== 'production') {
+        if (defaultCaseReducer) {
+          throw new Error('`builder.addDefaultCase` can only be called once')
+        }
+      }
+      defaultCaseReducer = reducer
+      return builder
+    },
+  }
+  builderCallback(builder)
+  return [actionsMap, actionMatchers, defaultCaseReducer]
+}
Index: node_modules/@reduxjs/toolkit/src/matchers.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/matchers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/matchers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,365 @@
+import type {
+  ActionFromMatcher,
+  Matcher,
+  UnionToIntersection,
+} from './tsHelpers'
+import { hasMatchFunction } from './tsHelpers'
+import type {
+  AsyncThunk,
+  AsyncThunkFulfilledActionCreator,
+  AsyncThunkPendingActionCreator,
+  AsyncThunkRejectedActionCreator,
+} from './createAsyncThunk'
+
+/** @public */
+export type ActionMatchingAnyOf<Matchers extends Matcher<any>[]> =
+  ActionFromMatcher<Matchers[number]>
+
+/** @public */
+export type ActionMatchingAllOf<Matchers extends Matcher<any>[]> =
+  UnionToIntersection<ActionMatchingAnyOf<Matchers>>
+
+const matches = (matcher: Matcher<any>, action: any) => {
+  if (hasMatchFunction(matcher)) {
+    return matcher.match(action)
+  } else {
+    return matcher(action)
+  }
+}
+
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action matches any one of the supplied type guards or action
+ * creators.
+ *
+ * @param matchers The type guards or action creators to match against.
+ *
+ * @public
+ */
+export function isAnyOf<Matchers extends Matcher<any>[]>(
+  ...matchers: Matchers
+) {
+  return (action: any): action is ActionMatchingAnyOf<Matchers> => {
+    return matchers.some((matcher) => matches(matcher, action))
+  }
+}
+
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action matches all of the supplied type guards or action
+ * creators.
+ *
+ * @param matchers The type guards or action creators to match against.
+ *
+ * @public
+ */
+export function isAllOf<Matchers extends Matcher<any>[]>(
+  ...matchers: Matchers
+) {
+  return (action: any): action is ActionMatchingAllOf<Matchers> => {
+    return matchers.every((matcher) => matches(matcher, action))
+  }
+}
+
+/**
+ * @param action A redux action
+ * @param validStatus An array of valid meta.requestStatus values
+ *
+ * @internal
+ */
+export function hasExpectedRequestMetadata(
+  action: any,
+  validStatus: readonly string[],
+) {
+  if (!action || !action.meta) return false
+
+  const hasValidRequestId = typeof action.meta.requestId === 'string'
+  const hasValidRequestStatus =
+    validStatus.indexOf(action.meta.requestStatus) > -1
+
+  return hasValidRequestId && hasValidRequestStatus
+}
+
+function isAsyncThunkArray(a: [any] | AnyAsyncThunk[]): a is AnyAsyncThunk[] {
+  return (
+    typeof a[0] === 'function' &&
+    'pending' in a[0] &&
+    'fulfilled' in a[0] &&
+    'rejected' in a[0]
+  )
+}
+
+export type UnknownAsyncThunkPendingAction = ReturnType<
+  AsyncThunkPendingActionCreator<unknown>
+>
+
+export type PendingActionFromAsyncThunk<T extends AnyAsyncThunk> =
+  ActionFromMatcher<T['pending']>
+
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is pending.
+ *
+ * @public
+ */
+export function isPending(): (
+  action: any,
+) => action is UnknownAsyncThunkPendingAction
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is pending.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+export function isPending<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(
+  ...asyncThunks: AsyncThunks
+): (action: any) => action is PendingActionFromAsyncThunk<AsyncThunks[number]>
+/**
+ * Tests if `action` is a pending thunk action
+ * @public
+ */
+export function isPending(action: any): action is UnknownAsyncThunkPendingAction
+export function isPending<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(...asyncThunks: AsyncThunks | [any]) {
+  if (asyncThunks.length === 0) {
+    return (action: any) => hasExpectedRequestMetadata(action, ['pending'])
+  }
+
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isPending()(asyncThunks[0])
+  }
+
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.pending))
+}
+
+export type UnknownAsyncThunkRejectedAction = ReturnType<
+  AsyncThunkRejectedActionCreator<unknown, unknown>
+>
+
+export type RejectedActionFromAsyncThunk<T extends AnyAsyncThunk> =
+  ActionFromMatcher<T['rejected']>
+
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is rejected.
+ *
+ * @public
+ */
+export function isRejected(): (
+  action: any,
+) => action is UnknownAsyncThunkRejectedAction
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is rejected.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+export function isRejected<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(
+  ...asyncThunks: AsyncThunks
+): (action: any) => action is RejectedActionFromAsyncThunk<AsyncThunks[number]>
+/**
+ * Tests if `action` is a rejected thunk action
+ * @public
+ */
+export function isRejected(
+  action: any,
+): action is UnknownAsyncThunkRejectedAction
+export function isRejected<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(...asyncThunks: AsyncThunks | [any]) {
+  if (asyncThunks.length === 0) {
+    return (action: any) => hasExpectedRequestMetadata(action, ['rejected'])
+  }
+
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isRejected()(asyncThunks[0])
+  }
+
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.rejected))
+}
+
+export type UnknownAsyncThunkRejectedWithValueAction = ReturnType<
+  AsyncThunkRejectedActionCreator<unknown, unknown>
+>
+
+export type RejectedWithValueActionFromAsyncThunk<T extends AnyAsyncThunk> =
+  ActionFromMatcher<T['rejected']> &
+    (T extends AsyncThunk<any, any, { rejectValue: infer RejectedValue }>
+      ? { payload: RejectedValue }
+      : unknown)
+
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is rejected with value.
+ *
+ * @public
+ */
+export function isRejectedWithValue(): (
+  action: any,
+) => action is UnknownAsyncThunkRejectedAction
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is rejected with value.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+export function isRejectedWithValue<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(
+  ...asyncThunks: AsyncThunks
+): (
+  action: any,
+) => action is RejectedWithValueActionFromAsyncThunk<AsyncThunks[number]>
+/**
+ * Tests if `action` is a rejected thunk action with value
+ * @public
+ */
+export function isRejectedWithValue(
+  action: any,
+): action is UnknownAsyncThunkRejectedAction
+export function isRejectedWithValue<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(...asyncThunks: AsyncThunks | [any]) {
+  const hasFlag = (action: any): action is any => {
+    return action && action.meta && action.meta.rejectedWithValue
+  }
+
+  if (asyncThunks.length === 0) {
+    return isAllOf(isRejected(...asyncThunks), hasFlag)
+  }
+
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isRejectedWithValue()(asyncThunks[0])
+  }
+
+  return isAllOf(isRejected(...asyncThunks), hasFlag)
+}
+
+export type UnknownAsyncThunkFulfilledAction = ReturnType<
+  AsyncThunkFulfilledActionCreator<unknown, unknown>
+>
+
+export type FulfilledActionFromAsyncThunk<T extends AnyAsyncThunk> =
+  ActionFromMatcher<T['fulfilled']>
+
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator, and that
+ * the action is fulfilled.
+ *
+ * @public
+ */
+export function isFulfilled(): (
+  action: any,
+) => action is UnknownAsyncThunkFulfilledAction
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators,
+ * and that the action is fulfilled.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+export function isFulfilled<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(
+  ...asyncThunks: AsyncThunks
+): (action: any) => action is FulfilledActionFromAsyncThunk<AsyncThunks[number]>
+/**
+ * Tests if `action` is a fulfilled thunk action
+ * @public
+ */
+export function isFulfilled(
+  action: any,
+): action is UnknownAsyncThunkFulfilledAction
+export function isFulfilled<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(...asyncThunks: AsyncThunks | [any]) {
+  if (asyncThunks.length === 0) {
+    return (action: any) => hasExpectedRequestMetadata(action, ['fulfilled'])
+  }
+
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isFulfilled()(asyncThunks[0])
+  }
+
+  return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.fulfilled))
+}
+
+export type UnknownAsyncThunkAction =
+  | UnknownAsyncThunkPendingAction
+  | UnknownAsyncThunkRejectedAction
+  | UnknownAsyncThunkFulfilledAction
+
+export type AnyAsyncThunk = {
+  pending: { match: (action: any) => action is any }
+  fulfilled: { match: (action: any) => action is any }
+  rejected: { match: (action: any) => action is any }
+}
+
+export type ActionsFromAsyncThunk<T extends AnyAsyncThunk> =
+  | ActionFromMatcher<T['pending']>
+  | ActionFromMatcher<T['fulfilled']>
+  | ActionFromMatcher<T['rejected']>
+
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action was created by an async thunk action creator.
+ *
+ * @public
+ */
+export function isAsyncThunkAction(): (
+  action: any,
+) => action is UnknownAsyncThunkAction
+/**
+ * A higher-order function that returns a function that may be used to check
+ * whether an action belongs to one of the provided async thunk action creators.
+ *
+ * @param asyncThunks (optional) The async thunk action creators to match against.
+ *
+ * @public
+ */
+export function isAsyncThunkAction<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(
+  ...asyncThunks: AsyncThunks
+): (action: any) => action is ActionsFromAsyncThunk<AsyncThunks[number]>
+/**
+ * Tests if `action` is a thunk action
+ * @public
+ */
+export function isAsyncThunkAction(
+  action: any,
+): action is UnknownAsyncThunkAction
+export function isAsyncThunkAction<
+  AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]],
+>(...asyncThunks: AsyncThunks | [any]) {
+  if (asyncThunks.length === 0) {
+    return (action: any) =>
+      hasExpectedRequestMetadata(action, ['pending', 'fulfilled', 'rejected'])
+  }
+
+  if (!isAsyncThunkArray(asyncThunks)) {
+    return isAsyncThunkAction()(asyncThunks[0])
+  }
+
+  return isAnyOf(...asyncThunks.flatMap(asyncThunk => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]))
+}
Index: node_modules/@reduxjs/toolkit/src/nanoid.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/nanoid.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/nanoid.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+// Borrowed from https://github.com/ai/nanoid/blob/3.0.2/non-secure/index.js
+// This alphabet uses `A-Za-z0-9_-` symbols. A genetic algorithm helped
+// optimize the gzip compression for this alphabet.
+let urlAlphabet =
+  'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW'
+
+/**
+ *
+ * @public
+ */
+export let nanoid = (size = 21) => {
+  let id = ''
+  // A compact alternative for `for (var i = 0; i < step; i++)`.
+  let i = size
+  while (i--) {
+    // `| 0` is more compact and faster than `Math.floor()`.
+    id += urlAlphabet[(Math.random() * 64) | 0]
+  }
+  return id
+}
Index: node_modules/@reduxjs/toolkit/src/query/HandledError.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/HandledError.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/HandledError.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export class HandledError {
+  constructor(
+    public readonly value: any,
+    public readonly meta: any = undefined,
+  ) {}
+}
Index: node_modules/@reduxjs/toolkit/src/query/apiTypes.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/apiTypes.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/apiTypes.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,116 @@
+import type { UnknownAction } from '@reduxjs/toolkit'
+import type { BaseQueryFn } from './baseQueryTypes'
+import type { CombinedState, CoreModule } from './core'
+import type { ApiModules } from './core/module'
+import type { CreateApiOptions } from './createApi'
+import type {
+  EndpointBuilder,
+  EndpointDefinition,
+  EndpointDefinitions,
+  UpdateDefinitions,
+} from './endpointDefinitions'
+import type {
+  NoInfer,
+  UnionToIntersection,
+  WithRequiredProp,
+} from './tsHelpers'
+
+export type ModuleName = keyof ApiModules<any, any, any, any>
+
+export type Module<Name extends ModuleName> = {
+  name: Name
+  init<
+    BaseQuery extends BaseQueryFn,
+    Definitions extends EndpointDefinitions,
+    ReducerPath extends string,
+    TagTypes extends string,
+  >(
+    api: Api<BaseQuery, EndpointDefinitions, ReducerPath, TagTypes, ModuleName>,
+    options: WithRequiredProp<
+      CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>,
+      | 'reducerPath'
+      | 'serializeQueryArgs'
+      | 'keepUnusedDataFor'
+      | 'refetchOnMountOrArgChange'
+      | 'refetchOnFocus'
+      | 'refetchOnReconnect'
+      | 'invalidationBehavior'
+      | 'tagTypes'
+    >,
+    context: ApiContext<Definitions>,
+  ): {
+    injectEndpoint(
+      endpointName: string,
+      definition: EndpointDefinition<any, any, any, any>,
+    ): void
+  }
+}
+
+export interface ApiContext<Definitions extends EndpointDefinitions> {
+  apiUid: string
+  endpointDefinitions: Definitions
+  batch(cb: () => void): void
+  extractRehydrationInfo: (
+    action: UnknownAction,
+  ) => CombinedState<any, any, any> | undefined
+  hasRehydrationInfo: (action: UnknownAction) => boolean
+}
+
+export type Api<
+  BaseQuery extends BaseQueryFn,
+  Definitions extends EndpointDefinitions,
+  ReducerPath extends string,
+  TagTypes extends string,
+  Enhancers extends ModuleName = CoreModule,
+> = UnionToIntersection<
+  ApiModules<BaseQuery, Definitions, ReducerPath, TagTypes>[Enhancers]
+> & {
+  /**
+   * A function to inject the endpoints into the original API, but also give you that same API with correct types for these endpoints back. Useful with code-splitting.
+   */
+  injectEndpoints<NewDefinitions extends EndpointDefinitions>(_: {
+    endpoints: (
+      build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>,
+    ) => NewDefinitions
+    /**
+     * Optionally allows endpoints to be overridden if defined by multiple `injectEndpoints` calls.
+     *
+     * If set to `true`, will override existing endpoints with the new definition.
+     * If set to `'throw'`, will throw an error if an endpoint is redefined with a different definition.
+     * If set to `false` (or unset), will not override existing endpoints with the new definition, and log a warning in development.
+     */
+    overrideExisting?: boolean | 'throw'
+  }): Api<
+    BaseQuery,
+    Definitions & NewDefinitions,
+    ReducerPath,
+    TagTypes,
+    Enhancers
+  >
+  /**
+   *A function to enhance a generated API with additional information. Useful with code-generation.
+   */
+  enhanceEndpoints<
+    NewTagTypes extends string = never,
+    NewDefinitions extends EndpointDefinitions = never,
+  >(_: {
+    addTagTypes?: readonly NewTagTypes[]
+    endpoints?: UpdateDefinitions<
+      Definitions,
+      TagTypes | NoInfer<NewTagTypes>,
+      NewDefinitions
+    > extends infer NewDefinitions
+      ? {
+          [K in keyof NewDefinitions]?:
+            | Partial<NewDefinitions[K]>
+            | ((definition: NewDefinitions[K]) => void)
+        }
+      : never
+  }): Api<
+    BaseQuery,
+    UpdateDefinitions<Definitions, TagTypes | NewTagTypes, NewDefinitions>,
+    ReducerPath,
+    TagTypes | NewTagTypes,
+    Enhancers
+  >
+}
Index: node_modules/@reduxjs/toolkit/src/query/baseQueryTypes.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/baseQueryTypes.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/baseQueryTypes.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,101 @@
+import type { ThunkDispatch } from '@reduxjs/toolkit'
+import type { MaybePromise, UnwrapPromise } from './tsHelpers'
+
+export interface BaseQueryApi {
+  signal: AbortSignal
+  abort: (reason?: string) => void
+  dispatch: ThunkDispatch<any, any, any>
+  getState: () => unknown
+  extra: unknown
+  endpoint: string
+  type: 'query' | 'mutation'
+  /**
+   * Only available for queries: indicates if a query has been forced,
+   * i.e. it would have been fetched even if there would already be a cache entry
+   * (this does not mean that there is already a cache entry though!)
+   *
+   * This can be used to for example add a `Cache-Control: no-cache` header for
+   * invalidated queries.
+   */
+  forced?: boolean
+  /**
+   * Only available for queries: the cache key that was used to store the query result
+   */
+  queryCacheKey?: string
+}
+
+export type QueryReturnValue<T = unknown, E = unknown, M = unknown> =
+  | {
+      error: E
+      data?: undefined
+      meta?: M
+    }
+  | {
+      error?: undefined
+      data: T
+      meta?: M
+    }
+
+export type BaseQueryFn<
+  Args = any,
+  Result = unknown,
+  Error = unknown,
+  DefinitionExtraOptions = {},
+  Meta = {},
+> = (
+  args: Args,
+  api: BaseQueryApi,
+  extraOptions: DefinitionExtraOptions,
+) => MaybePromise<QueryReturnValue<Result, Error, Meta>>
+
+export type BaseQueryEnhancer<
+  AdditionalArgs = unknown,
+  AdditionalDefinitionExtraOptions = unknown,
+  Config = void,
+> = <BaseQuery extends BaseQueryFn>(
+  baseQuery: BaseQuery,
+  config: Config,
+) => BaseQueryFn<
+  BaseQueryArg<BaseQuery> & AdditionalArgs,
+  BaseQueryResult<BaseQuery>,
+  BaseQueryError<BaseQuery>,
+  BaseQueryExtraOptions<BaseQuery> & AdditionalDefinitionExtraOptions,
+  NonNullable<BaseQueryMeta<BaseQuery>>
+>
+
+/**
+ * @public
+ */
+export type BaseQueryResult<BaseQuery extends BaseQueryFn> =
+  UnwrapPromise<ReturnType<BaseQuery>> extends infer Unwrapped
+    ? Unwrapped extends { data: any }
+      ? Unwrapped['data']
+      : never
+    : never
+
+/**
+ * @public
+ */
+export type BaseQueryMeta<BaseQuery extends BaseQueryFn> = UnwrapPromise<
+  ReturnType<BaseQuery>
+>['meta']
+
+/**
+ * @public
+ */
+export type BaseQueryError<BaseQuery extends BaseQueryFn> = Exclude<
+  UnwrapPromise<ReturnType<BaseQuery>>,
+  { error?: undefined }
+>['error']
+
+/**
+ * @public
+ */
+export type BaseQueryArg<T extends (arg: any, ...args: any[]) => any> =
+  T extends (arg: infer A, ...args: any[]) => any ? A : any
+
+/**
+ * @public
+ */
+export type BaseQueryExtraOptions<BaseQuery extends BaseQueryFn> =
+  Parameters<BaseQuery>[2]
Index: node_modules/@reduxjs/toolkit/src/query/core/apiState.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/apiState.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/apiState.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,354 @@
+import type { SerializedError } from '@reduxjs/toolkit'
+import type { BaseQueryError } from '../baseQueryTypes'
+import type {
+  BaseEndpointDefinition,
+  EndpointDefinitions,
+  FullTagDescription,
+  InfiniteQueryDefinition,
+  MutationDefinition,
+  PageParamFrom,
+  QueryArgFromAnyQuery,
+  QueryDefinition,
+  ResultTypeFrom,
+} from '../endpointDefinitions'
+import type { Id, WithRequiredProp } from '../tsHelpers'
+
+export type QueryCacheKey = string & { _type: 'queryCacheKey' }
+export type QuerySubstateIdentifier = { queryCacheKey: QueryCacheKey }
+export type MutationSubstateIdentifier =
+  | { requestId: string; fixedCacheKey?: string }
+  | { requestId?: string; fixedCacheKey: string }
+
+export type RefetchConfigOptions = {
+  refetchOnMountOrArgChange: boolean | number
+  refetchOnReconnect: boolean
+  refetchOnFocus: boolean
+}
+
+export type InfiniteQueryConfigOptions<DataType, PageParam, QueryArg> = {
+  /**
+   * The initial page parameter to use for the first page fetch.
+   */
+  initialPageParam: PageParam
+  /**
+   * This function is required to automatically get the next cursor for infinite queries.
+   * The result will also be used to determine the value of `hasNextPage`.
+   */
+  getNextPageParam: (
+    lastPage: DataType,
+    allPages: Array<DataType>,
+    lastPageParam: PageParam,
+    allPageParams: Array<PageParam>,
+    queryArg: QueryArg,
+  ) => PageParam | undefined | null
+  /**
+   * This function can be set to automatically get the previous cursor for infinite queries.
+   * The result will also be used to determine the value of `hasPreviousPage`.
+   */
+  getPreviousPageParam?: (
+    firstPage: DataType,
+    allPages: Array<DataType>,
+    firstPageParam: PageParam,
+    allPageParams: Array<PageParam>,
+    queryArg: QueryArg,
+  ) => PageParam | undefined | null
+  /**
+   * If specified, only keep this many pages in cache at once.
+   * If additional pages are fetched, older pages in the other
+   * direction will be dropped from the cache.
+   */
+  maxPages?: number
+}
+
+export type InfiniteData<DataType, PageParam> = {
+  pages: Array<DataType>
+  pageParams: Array<PageParam>
+}
+
+/**
+ * Strings describing the query state at any given time.
+ */
+export enum QueryStatus {
+  uninitialized = 'uninitialized',
+  pending = 'pending',
+  fulfilled = 'fulfilled',
+  rejected = 'rejected',
+}
+
+export type RequestStatusFlags =
+  | {
+      status: QueryStatus.uninitialized
+      isUninitialized: true
+      isLoading: false
+      isSuccess: false
+      isError: false
+    }
+  | {
+      status: QueryStatus.pending
+      isUninitialized: false
+      isLoading: true
+      isSuccess: false
+      isError: false
+    }
+  | {
+      status: QueryStatus.fulfilled
+      isUninitialized: false
+      isLoading: false
+      isSuccess: true
+      isError: false
+    }
+  | {
+      status: QueryStatus.rejected
+      isUninitialized: false
+      isLoading: false
+      isSuccess: false
+      isError: true
+    }
+
+export function getRequestStatusFlags(status: QueryStatus): RequestStatusFlags {
+  return {
+    status,
+    isUninitialized: status === QueryStatus.uninitialized,
+    isLoading: status === QueryStatus.pending,
+    isSuccess: status === QueryStatus.fulfilled,
+    isError: status === QueryStatus.rejected,
+  } as any
+}
+
+/**
+ * @public
+ */
+export type SubscriptionOptions = {
+  /**
+   * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).
+   */
+  pollingInterval?: number
+  /**
+   *  Defaults to 'false'. This setting allows you to control whether RTK Query will continue polling if the window is not focused.
+   *
+   *  If pollingInterval is not set or set to 0, this **will not be evaluated** until pollingInterval is greater than 0.
+   *
+   *  Note: requires [`setupListeners`](./setupListeners) to have been called.
+   */
+  skipPollingIfUnfocused?: boolean
+  /**
+   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.
+   *
+   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+   *
+   * Note: requires [`setupListeners`](./setupListeners) to have been called.
+   */
+  refetchOnReconnect?: boolean
+  /**
+   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.
+   *
+   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+   *
+   * Note: requires [`setupListeners`](./setupListeners) to have been called.
+   */
+  refetchOnFocus?: boolean
+}
+export type Subscribers = { [requestId: string]: SubscriptionOptions }
+export type QueryKeys<Definitions extends EndpointDefinitions> = {
+  [K in keyof Definitions]: Definitions[K] extends QueryDefinition<
+    any,
+    any,
+    any,
+    any
+  >
+    ? K
+    : never
+}[keyof Definitions]
+
+export type InfiniteQueryKeys<Definitions extends EndpointDefinitions> = {
+  [K in keyof Definitions]: Definitions[K] extends InfiniteQueryDefinition<
+    any,
+    any,
+    any,
+    any,
+    any
+  >
+    ? K
+    : never
+}[keyof Definitions]
+
+export type MutationKeys<Definitions extends EndpointDefinitions> = {
+  [K in keyof Definitions]: Definitions[K] extends MutationDefinition<
+    any,
+    any,
+    any,
+    any
+  >
+    ? K
+    : never
+}[keyof Definitions]
+
+type BaseQuerySubState<
+  D extends BaseEndpointDefinition<any, any, any, any>,
+  DataType = ResultTypeFrom<D>,
+> = {
+  /**
+   * The argument originally passed into the hook or `initiate` action call
+   */
+  originalArgs: QueryArgFromAnyQuery<D>
+  /**
+   * A unique ID associated with the request
+   */
+  requestId: string
+  /**
+   * The received data from the query
+   */
+  data?: DataType
+  /**
+   * The received error if applicable
+   */
+  error?:
+    | SerializedError
+    | (D extends QueryDefinition<any, infer BaseQuery, any, any>
+        ? BaseQueryError<BaseQuery>
+        : never)
+  /**
+   * The name of the endpoint associated with the query
+   */
+  endpointName: string
+  /**
+   * Time that the latest query started
+   */
+  startedTimeStamp: number
+  /**
+   * Time that the latest query was fulfilled
+   */
+  fulfilledTimeStamp?: number
+}
+
+export type QuerySubState<
+  D extends BaseEndpointDefinition<any, any, any, any>,
+  DataType = ResultTypeFrom<D>,
+> = Id<
+  | ({ status: QueryStatus.fulfilled } & WithRequiredProp<
+      BaseQuerySubState<D, DataType>,
+      'data' | 'fulfilledTimeStamp'
+    > & { error: undefined })
+  | ({ status: QueryStatus.pending } & BaseQuerySubState<D, DataType>)
+  | ({ status: QueryStatus.rejected } & WithRequiredProp<
+      BaseQuerySubState<D, DataType>,
+      'error'
+    >)
+  | {
+      status: QueryStatus.uninitialized
+      originalArgs?: undefined
+      data?: undefined
+      error?: undefined
+      requestId?: undefined
+      endpointName?: string
+      startedTimeStamp?: undefined
+      fulfilledTimeStamp?: undefined
+    }
+>
+
+export type InfiniteQueryDirection = 'forward' | 'backward'
+
+export type InfiniteQuerySubState<
+  D extends BaseEndpointDefinition<any, any, any, any>,
+> =
+  D extends InfiniteQueryDefinition<any, any, any, any, any>
+    ? QuerySubState<D, InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>> & {
+        direction?: InfiniteQueryDirection
+      }
+    : never
+
+type BaseMutationSubState<
+  D extends BaseEndpointDefinition<any, any, any, any>,
+> = {
+  requestId: string
+  data?: ResultTypeFrom<D>
+  error?:
+    | SerializedError
+    | (D extends MutationDefinition<any, infer BaseQuery, any, any>
+        ? BaseQueryError<BaseQuery>
+        : never)
+  endpointName: string
+  startedTimeStamp: number
+  fulfilledTimeStamp?: number
+}
+
+export type MutationSubState<
+  D extends BaseEndpointDefinition<any, any, any, any>,
+> =
+  | (({
+      status: QueryStatus.fulfilled
+    } & WithRequiredProp<
+      BaseMutationSubState<D>,
+      'data' | 'fulfilledTimeStamp'
+    >) & { error: undefined })
+  | (({ status: QueryStatus.pending } & BaseMutationSubState<D>) & {
+      data?: undefined
+    })
+  | ({ status: QueryStatus.rejected } & WithRequiredProp<
+      BaseMutationSubState<D>,
+      'error'
+    >)
+  | {
+      requestId?: undefined
+      status: QueryStatus.uninitialized
+      data?: undefined
+      error?: undefined
+      endpointName?: string
+      startedTimeStamp?: undefined
+      fulfilledTimeStamp?: undefined
+    }
+
+export type CombinedState<
+  D extends EndpointDefinitions,
+  E extends string,
+  ReducerPath extends string,
+> = {
+  queries: QueryState<D>
+  mutations: MutationState<D>
+  provided: InvalidationState<E>
+  subscriptions: SubscriptionState
+  config: ConfigState<ReducerPath>
+}
+
+export type InvalidationState<TagTypes extends string> = {
+  tags: {
+    [_ in TagTypes]: {
+      [id: string]: Array<QueryCacheKey>
+      [id: number]: Array<QueryCacheKey>
+    }
+  }
+  keys: Record<QueryCacheKey, Array<FullTagDescription<any>>>
+}
+
+export type QueryState<D extends EndpointDefinitions> = {
+  [queryCacheKey: string]:
+    | QuerySubState<D[string]>
+    | InfiniteQuerySubState<D[string]>
+    | undefined
+}
+
+export type SubscriptionState = {
+  [queryCacheKey: string]: Subscribers | undefined
+}
+
+export type ConfigState<ReducerPath> = RefetchConfigOptions & {
+  reducerPath: ReducerPath
+  online: boolean
+  focused: boolean
+  middlewareRegistered: boolean | 'conflict'
+} & ModifiableConfigState
+
+export type ModifiableConfigState = {
+  keepUnusedDataFor: number
+  invalidationBehavior: 'delayed' | 'immediately'
+} & RefetchConfigOptions
+
+export type MutationState<D extends EndpointDefinitions> = {
+  [requestId: string]: MutationSubState<D[string]> | undefined
+}
+
+export type RootState<
+  Definitions extends EndpointDefinitions,
+  TagTypes extends string,
+  ReducerPath extends string,
+> = { [P in ReducerPath]: CombinedState<Definitions, TagTypes, P> }
Index: node_modules/@reduxjs/toolkit/src/query/core/buildInitiate.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildInitiate.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildInitiate.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,595 @@
+import type {
+  AsyncThunkAction,
+  SafePromise,
+  SerializedError,
+  ThunkAction,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import type { Dispatch } from 'redux'
+import { asSafePromise } from '../../tsHelpers'
+import type { Api, ApiContext } from '../apiTypes'
+import type { BaseQueryError, QueryReturnValue } from '../baseQueryTypes'
+import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'
+import {
+  isQueryDefinition,
+  type EndpointDefinition,
+  type EndpointDefinitions,
+  type InfiniteQueryArgFrom,
+  type InfiniteQueryDefinition,
+  type MutationDefinition,
+  type PageParamFrom,
+  type QueryArgFrom,
+  type QueryDefinition,
+  type ResultTypeFrom,
+} from '../endpointDefinitions'
+import { countObjectKeys, getOrInsert, isNotNullish } from '../utils'
+import type {
+  InfiniteData,
+  InfiniteQueryConfigOptions,
+  InfiniteQueryDirection,
+  SubscriptionOptions,
+} from './apiState'
+import type {
+  InfiniteQueryResultSelectorResult,
+  QueryResultSelectorResult,
+} from './buildSelectors'
+import type {
+  InfiniteQueryThunk,
+  InfiniteQueryThunkArg,
+  MutationThunk,
+  QueryThunk,
+  QueryThunkArg,
+  ThunkApiMetaConfig,
+} from './buildThunks'
+import type { ApiEndpointQuery } from './module'
+
+export type BuildInitiateApiEndpointQuery<
+  Definition extends QueryDefinition<any, any, any, any, any>,
+> = {
+  initiate: StartQueryActionCreator<Definition>
+}
+
+export type BuildInitiateApiEndpointInfiniteQuery<
+  Definition extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = {
+  initiate: StartInfiniteQueryActionCreator<Definition>
+}
+
+export type BuildInitiateApiEndpointMutation<
+  Definition extends MutationDefinition<any, any, any, any, any>,
+> = {
+  initiate: StartMutationActionCreator<Definition>
+}
+
+export const forceQueryFnSymbol = Symbol('forceQueryFn')
+export const isUpsertQuery = (arg: QueryThunkArg) =>
+  typeof arg[forceQueryFnSymbol] === 'function'
+
+export type StartQueryActionCreatorOptions = {
+  subscribe?: boolean
+  forceRefetch?: boolean | number
+  subscriptionOptions?: SubscriptionOptions
+  [forceQueryFnSymbol]?: () => QueryReturnValue
+}
+
+export type StartInfiniteQueryActionCreatorOptions<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = StartQueryActionCreatorOptions & {
+  direction?: InfiniteQueryDirection
+  param?: unknown
+} & Partial<
+    Pick<
+      Partial<
+        InfiniteQueryConfigOptions<
+          ResultTypeFrom<D>,
+          PageParamFrom<D>,
+          InfiniteQueryArgFrom<D>
+        >
+      >,
+      'initialPageParam'
+    >
+  >
+
+type AnyQueryActionCreator<D extends EndpointDefinition<any, any, any, any>> = (
+  arg: any,
+  options?: StartQueryActionCreatorOptions,
+) => ThunkAction<AnyActionCreatorResult, any, any, UnknownAction>
+
+type StartQueryActionCreator<
+  D extends QueryDefinition<any, any, any, any, any>,
+> = (
+  arg: QueryArgFrom<D>,
+  options?: StartQueryActionCreatorOptions,
+) => ThunkAction<QueryActionCreatorResult<D>, any, any, UnknownAction>
+
+export type StartInfiniteQueryActionCreator<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = (
+  arg: InfiniteQueryArgFrom<D>,
+  options?: StartInfiniteQueryActionCreatorOptions<D>,
+) => ThunkAction<InfiniteQueryActionCreatorResult<D>, any, any, UnknownAction>
+
+type QueryActionCreatorFields = {
+  requestId: string
+  subscriptionOptions: SubscriptionOptions | undefined
+  abort(): void
+  unsubscribe(): void
+  updateSubscriptionOptions(options: SubscriptionOptions): void
+  queryCacheKey: string
+}
+
+type AnyActionCreatorResult = SafePromise<any> &
+  QueryActionCreatorFields & {
+    arg: any
+    unwrap(): Promise<any>
+    refetch(): AnyActionCreatorResult
+  }
+
+export type QueryActionCreatorResult<
+  D extends QueryDefinition<any, any, any, any>,
+> = SafePromise<QueryResultSelectorResult<D>> &
+  QueryActionCreatorFields & {
+    arg: QueryArgFrom<D>
+    unwrap(): Promise<ResultTypeFrom<D>>
+    refetch(): QueryActionCreatorResult<D>
+  }
+
+export type InfiniteQueryActionCreatorResult<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = SafePromise<InfiniteQueryResultSelectorResult<D>> &
+  QueryActionCreatorFields & {
+    arg: InfiniteQueryArgFrom<D>
+    unwrap(): Promise<InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>>
+    refetch(): InfiniteQueryActionCreatorResult<D>
+  }
+
+type StartMutationActionCreator<
+  D extends MutationDefinition<any, any, any, any>,
+> = (
+  arg: QueryArgFrom<D>,
+  options?: {
+    /**
+     * If this mutation should be tracked in the store.
+     * If you just want to manually trigger this mutation using `dispatch` and don't care about the
+     * result, state & potential errors being held in store, you can set this to false.
+     * (defaults to `true`)
+     */
+    track?: boolean
+    fixedCacheKey?: string
+  },
+) => ThunkAction<MutationActionCreatorResult<D>, any, any, UnknownAction>
+
+export type MutationActionCreatorResult<
+  D extends MutationDefinition<any, any, any, any>,
+> = SafePromise<
+  | {
+      data: ResultTypeFrom<D>
+      error?: undefined
+    }
+  | {
+      data?: undefined
+      error:
+        | Exclude<
+            BaseQueryError<
+              D extends MutationDefinition<any, infer BaseQuery, any, any>
+                ? BaseQuery
+                : never
+            >,
+            undefined
+          >
+        | SerializedError
+    }
+> & {
+  /** @internal */
+  arg: {
+    /**
+     * The name of the given endpoint for the mutation
+     */
+    endpointName: string
+    /**
+     * The original arguments supplied to the mutation call
+     */
+    originalArgs: QueryArgFrom<D>
+    /**
+     * Whether the mutation is being tracked in the store.
+     */
+    track?: boolean
+    fixedCacheKey?: string
+  }
+  /**
+   * A unique string generated for the request sequence
+   */
+  requestId: string
+
+  /**
+   * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation
+   * that was fired off from reaching the server, but only to assist in handling the response.
+   *
+   * Calling `abort()` prior to the promise resolving will force it to reach the error state with
+   * the serialized error:
+   * `{ name: 'AbortError', message: 'Aborted' }`
+   *
+   * @example
+   * ```ts
+   * const [updateUser] = useUpdateUserMutation();
+   *
+   * useEffect(() => {
+   *   const promise = updateUser(id);
+   *   promise
+   *     .unwrap()
+   *     .catch((err) => {
+   *       if (err.name === 'AbortError') return;
+   *       // else handle the unexpected error
+   *     })
+   *
+   *   return () => {
+   *     promise.abort();
+   *   }
+   * }, [id, updateUser])
+   * ```
+   */
+  abort(): void
+  /**
+   * Unwraps a mutation call to provide the raw response/error.
+   *
+   * @remarks
+   * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta title="Using .unwrap"
+   * addPost({ id: 1, name: 'Example' })
+   *   .unwrap()
+   *   .then((payload) => console.log('fulfilled', payload))
+   *   .catch((error) => console.error('rejected', error));
+   * ```
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta title="Using .unwrap with async await"
+   * try {
+   *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();
+   *   console.log('fulfilled', payload)
+   * } catch (error) {
+   *   console.error('rejected', error);
+   * }
+   * ```
+   */
+  unwrap(): Promise<ResultTypeFrom<D>>
+  /**
+   * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.
+   The value returned by the hook will reset to `isUninitialized` afterwards.
+   */
+  reset(): void
+}
+
+export function buildInitiate({
+  serializeQueryArgs,
+  queryThunk,
+  infiniteQueryThunk,
+  mutationThunk,
+  api,
+  context,
+}: {
+  serializeQueryArgs: InternalSerializeQueryArgs
+  queryThunk: QueryThunk
+  infiniteQueryThunk: InfiniteQueryThunk<any>
+  mutationThunk: MutationThunk
+  api: Api<any, EndpointDefinitions, any, any>
+  context: ApiContext<EndpointDefinitions>
+}) {
+  const runningQueries: Map<
+    Dispatch,
+    Record<
+      string,
+      | QueryActionCreatorResult<any>
+      | InfiniteQueryActionCreatorResult<any>
+      | undefined
+    >
+  > = new Map()
+  const runningMutations: Map<
+    Dispatch,
+    Record<string, MutationActionCreatorResult<any> | undefined>
+  > = new Map()
+
+  const {
+    unsubscribeQueryResult,
+    removeMutationResult,
+    updateSubscriptionOptions,
+  } = api.internalActions
+  return {
+    buildInitiateQuery,
+    buildInitiateInfiniteQuery,
+    buildInitiateMutation,
+    getRunningQueryThunk,
+    getRunningMutationThunk,
+    getRunningQueriesThunk,
+    getRunningMutationsThunk,
+  }
+
+  function getRunningQueryThunk(endpointName: string, queryArgs: any) {
+    return (dispatch: Dispatch) => {
+      const endpointDefinition = context.endpointDefinitions[endpointName]
+      const queryCacheKey = serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName,
+      })
+      return runningQueries.get(dispatch)?.[queryCacheKey] as
+        | QueryActionCreatorResult<never>
+        | InfiniteQueryActionCreatorResult<never>
+        | undefined
+    }
+  }
+
+  function getRunningMutationThunk(
+    /**
+     * this is only here to allow TS to infer the result type by input value
+     * we could use it to validate the result, but it's probably not necessary
+     */
+    _endpointName: string,
+    fixedCacheKeyOrRequestId: string,
+  ) {
+    return (dispatch: Dispatch) => {
+      return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId] as
+        | MutationActionCreatorResult<never>
+        | undefined
+    }
+  }
+
+  function getRunningQueriesThunk() {
+    return (dispatch: Dispatch) =>
+      Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish)
+  }
+
+  function getRunningMutationsThunk() {
+    return (dispatch: Dispatch) =>
+      Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish)
+  }
+
+  function middlewareWarning(dispatch: Dispatch) {
+    if (process.env.NODE_ENV !== 'production') {
+      if ((middlewareWarning as any).triggered) return
+      const returnedValue = dispatch(
+        api.internalActions.internal_getRTKQSubscriptions(),
+      )
+
+      ;(middlewareWarning as any).triggered = true
+
+      // The RTKQ middleware should return the internal state object,
+      // but it should _not_ be the action object.
+      if (
+        typeof returnedValue !== 'object' ||
+        typeof returnedValue?.type === 'string'
+      ) {
+        // Otherwise, must not have been added
+        throw new Error(
+          `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store.
+You must add the middleware for RTK-Query to function correctly!`,
+        )
+      }
+    }
+  }
+
+  function buildInitiateAnyQuery<T extends 'query' | 'infiniteQuery'>(
+    endpointName: string,
+    endpointDefinition:
+      | QueryDefinition<any, any, any, any>
+      | InfiniteQueryDefinition<any, any, any, any, any>,
+  ) {
+    const queryAction: AnyQueryActionCreator<any> =
+      (
+        arg,
+        {
+          subscribe = true,
+          forceRefetch,
+          subscriptionOptions,
+          [forceQueryFnSymbol]: forceQueryFn,
+          ...rest
+        } = {},
+      ) =>
+      (dispatch, getState) => {
+        const queryCacheKey = serializeQueryArgs({
+          queryArgs: arg,
+          endpointDefinition,
+          endpointName,
+        })
+
+        let thunk: AsyncThunkAction<unknown, QueryThunkArg, ThunkApiMetaConfig>
+
+        const commonThunkArgs = {
+          ...rest,
+          type: 'query' as const,
+          subscribe,
+          forceRefetch: forceRefetch,
+          subscriptionOptions,
+          endpointName,
+          originalArgs: arg,
+          queryCacheKey,
+          [forceQueryFnSymbol]: forceQueryFn,
+        }
+
+        if (isQueryDefinition(endpointDefinition)) {
+          thunk = queryThunk(commonThunkArgs)
+        } else {
+          const { direction, initialPageParam } = rest as Pick<
+            InfiniteQueryThunkArg<any>,
+            'direction' | 'initialPageParam'
+          >
+          thunk = infiniteQueryThunk({
+            ...(commonThunkArgs as InfiniteQueryThunkArg<any>),
+            // Supply these even if undefined. This helps with a field existence
+            // check over in `buildSlice.ts`
+            direction,
+            initialPageParam,
+          })
+        }
+
+        const selector = (
+          api.endpoints[endpointName] as ApiEndpointQuery<any, any>
+        ).select(arg)
+
+        const thunkResult = dispatch(thunk)
+        const stateAfter = selector(getState())
+
+        middlewareWarning(dispatch)
+
+        const { requestId, abort } = thunkResult
+
+        const skippedSynchronously = stateAfter.requestId !== requestId
+
+        const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey]
+        const selectFromState = () => selector(getState())
+
+        const statePromise: AnyActionCreatorResult = Object.assign(
+          (forceQueryFn
+            ? // a query has been forced (upsertQueryData)
+              // -> we want to resolve it once data has been written with the data that will be written
+              thunkResult.then(selectFromState)
+            : skippedSynchronously && !runningQuery
+              ? // a query has been skipped due to a condition and we do not have any currently running query
+                // -> we want to resolve it immediately with the current data
+                Promise.resolve(stateAfter)
+              : // query just started or one is already in flight
+                // -> wait for the running query, then resolve with data from after that
+                Promise.all([runningQuery, thunkResult]).then(
+                  selectFromState,
+                )) as SafePromise<any>,
+          {
+            arg,
+            requestId,
+            subscriptionOptions,
+            queryCacheKey,
+            abort,
+            async unwrap() {
+              const result = await statePromise
+
+              if (result.isError) {
+                throw result.error
+              }
+
+              return result.data
+            },
+            refetch: () =>
+              dispatch(
+                queryAction(arg, { subscribe: false, forceRefetch: true }),
+              ),
+            unsubscribe() {
+              if (subscribe)
+                dispatch(
+                  unsubscribeQueryResult({
+                    queryCacheKey,
+                    requestId,
+                  }),
+                )
+            },
+            updateSubscriptionOptions(options: SubscriptionOptions) {
+              statePromise.subscriptionOptions = options
+              dispatch(
+                updateSubscriptionOptions({
+                  endpointName,
+                  requestId,
+                  queryCacheKey,
+                  options,
+                }),
+              )
+            },
+          },
+        )
+
+        if (!runningQuery && !skippedSynchronously && !forceQueryFn) {
+          const running = getOrInsert(runningQueries, dispatch, {})
+          running[queryCacheKey] = statePromise
+
+          statePromise.then(() => {
+            delete running[queryCacheKey]
+            if (!countObjectKeys(running)) {
+              runningQueries.delete(dispatch)
+            }
+          })
+        }
+
+        return statePromise
+      }
+    return queryAction
+  }
+
+  function buildInitiateQuery(
+    endpointName: string,
+    endpointDefinition: QueryDefinition<any, any, any, any>,
+  ) {
+    const queryAction: StartQueryActionCreator<any> = buildInitiateAnyQuery(
+      endpointName,
+      endpointDefinition,
+    )
+
+    return queryAction
+  }
+
+  function buildInitiateInfiniteQuery(
+    endpointName: string,
+    endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>,
+  ) {
+    const infiniteQueryAction: StartInfiniteQueryActionCreator<any> =
+      buildInitiateAnyQuery(endpointName, endpointDefinition)
+
+    return infiniteQueryAction
+  }
+
+  function buildInitiateMutation(
+    endpointName: string,
+  ): StartMutationActionCreator<any> {
+    return (arg, { track = true, fixedCacheKey } = {}) =>
+      (dispatch, getState) => {
+        const thunk = mutationThunk({
+          type: 'mutation',
+          endpointName,
+          originalArgs: arg,
+          track,
+          fixedCacheKey,
+        })
+        const thunkResult = dispatch(thunk)
+        middlewareWarning(dispatch)
+        const { requestId, abort, unwrap } = thunkResult
+        const returnValuePromise = asSafePromise(
+          thunkResult.unwrap().then((data) => ({ data })),
+          (error) => ({ error }),
+        )
+
+        const reset = () => {
+          dispatch(removeMutationResult({ requestId, fixedCacheKey }))
+        }
+
+        const ret = Object.assign(returnValuePromise, {
+          arg: thunkResult.arg,
+          requestId,
+          abort,
+          unwrap,
+          reset,
+        })
+
+        const running = runningMutations.get(dispatch) || {}
+        runningMutations.set(dispatch, running)
+        running[requestId] = ret
+        ret.then(() => {
+          delete running[requestId]
+          if (!countObjectKeys(running)) {
+            runningMutations.delete(dispatch)
+          }
+        })
+        if (fixedCacheKey) {
+          running[fixedCacheKey] = ret
+          ret.then(() => {
+            if (running[fixedCacheKey] === ret) {
+              delete running[fixedCacheKey]
+              if (!countObjectKeys(running)) {
+                runningMutations.delete(dispatch)
+              }
+            }
+          })
+        }
+
+        return ret
+      }
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/batchActions.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/batchActions.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/batchActions.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,177 @@
+import type { InternalHandlerBuilder, SubscriptionSelectors } from './types'
+import type { SubscriptionState } from '../apiState'
+import { produceWithPatches } from 'immer'
+import type { Action } from '@reduxjs/toolkit'
+import { countObjectKeys } from '../../utils/countObjectKeys'
+
+export const buildBatchedActionsHandler: InternalHandlerBuilder<
+  [actionShouldContinue: boolean, returnValue: SubscriptionSelectors | boolean]
+> = ({ api, queryThunk, internalState }) => {
+  const subscriptionsPrefix = `${api.reducerPath}/subscriptions`
+
+  let previousSubscriptions: SubscriptionState =
+    null as unknown as SubscriptionState
+
+  let updateSyncTimer: ReturnType<typeof window.setTimeout> | null = null
+
+  const { updateSubscriptionOptions, unsubscribeQueryResult } =
+    api.internalActions
+
+  // Actually intentionally mutate the subscriptions state used in the middleware
+  // This is done to speed up perf when loading many components
+  const actuallyMutateSubscriptions = (
+    mutableState: SubscriptionState,
+    action: Action,
+  ) => {
+    if (updateSubscriptionOptions.match(action)) {
+      const { queryCacheKey, requestId, options } = action.payload
+
+      if (mutableState?.[queryCacheKey]?.[requestId]) {
+        mutableState[queryCacheKey]![requestId] = options
+      }
+      return true
+    }
+    if (unsubscribeQueryResult.match(action)) {
+      const { queryCacheKey, requestId } = action.payload
+      if (mutableState[queryCacheKey]) {
+        delete mutableState[queryCacheKey]![requestId]
+      }
+      return true
+    }
+    if (api.internalActions.removeQueryResult.match(action)) {
+      delete mutableState[action.payload.queryCacheKey]
+      return true
+    }
+    if (queryThunk.pending.match(action)) {
+      const {
+        meta: { arg, requestId },
+      } = action
+      const substate = (mutableState[arg.queryCacheKey] ??= {})
+      substate[`${requestId}_running`] = {}
+      if (arg.subscribe) {
+        substate[requestId] =
+          arg.subscriptionOptions ?? substate[requestId] ?? {}
+      }
+      return true
+    }
+    let mutated = false
+    if (
+      queryThunk.fulfilled.match(action) ||
+      queryThunk.rejected.match(action)
+    ) {
+      const state = mutableState[action.meta.arg.queryCacheKey] || {}
+      const key = `${action.meta.requestId}_running`
+      mutated ||= !!state[key]
+      delete state[key]
+    }
+    if (queryThunk.rejected.match(action)) {
+      const {
+        meta: { condition, arg, requestId },
+      } = action
+      if (condition && arg.subscribe) {
+        const substate = (mutableState[arg.queryCacheKey] ??= {})
+        substate[requestId] =
+          arg.subscriptionOptions ?? substate[requestId] ?? {}
+
+        mutated = true
+      }
+    }
+
+    return mutated
+  }
+
+  const getSubscriptions = () => internalState.currentSubscriptions
+  const getSubscriptionCount = (queryCacheKey: string) => {
+    const subscriptions = getSubscriptions()
+    const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {}
+    return countObjectKeys(subscriptionsForQueryArg)
+  }
+  const isRequestSubscribed = (queryCacheKey: string, requestId: string) => {
+    const subscriptions = getSubscriptions()
+    return !!subscriptions?.[queryCacheKey]?.[requestId]
+  }
+
+  const subscriptionSelectors: SubscriptionSelectors = {
+    getSubscriptions,
+    getSubscriptionCount,
+    isRequestSubscribed,
+  }
+
+  return (
+    action,
+    mwApi,
+  ): [
+    actionShouldContinue: boolean,
+    result: SubscriptionSelectors | boolean,
+  ] => {
+    if (!previousSubscriptions) {
+      // Initialize it the first time this handler runs
+      previousSubscriptions = JSON.parse(
+        JSON.stringify(internalState.currentSubscriptions),
+      )
+    }
+
+    if (api.util.resetApiState.match(action)) {
+      previousSubscriptions = internalState.currentSubscriptions = {}
+      updateSyncTimer = null
+      return [true, false]
+    }
+
+    // Intercept requests by hooks to see if they're subscribed
+    // We return the internal state reference so that hooks
+    // can do their own checks to see if they're still active.
+    // It's stupid and hacky, but it does cut down on some dispatch calls.
+    if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {
+      return [false, subscriptionSelectors]
+    }
+
+    // Update subscription data based on this action
+    const didMutate = actuallyMutateSubscriptions(
+      internalState.currentSubscriptions,
+      action,
+    )
+
+    let actionShouldContinue = true
+
+    if (didMutate) {
+      if (!updateSyncTimer) {
+        // We only use the subscription state for the Redux DevTools at this point,
+        // as the real data is kept here in the middleware.
+        // Given that, we can throttle synchronizing this state significantly to
+        // save on overall perf.
+        // In 1.9, it was updated in a microtask, but now we do it at most every 500ms.
+        updateSyncTimer = setTimeout(() => {
+          // Deep clone the current subscription data
+          const newSubscriptions: SubscriptionState = JSON.parse(
+            JSON.stringify(internalState.currentSubscriptions),
+          )
+          // Figure out a smaller diff between original and current
+          const [, patches] = produceWithPatches(
+            previousSubscriptions,
+            () => newSubscriptions,
+          )
+
+          // Sync the store state for visibility
+          mwApi.next(api.internalActions.subscriptionsUpdated(patches))
+          // Save the cloned state for later reference
+          previousSubscriptions = newSubscriptions
+          updateSyncTimer = null
+        }, 500)
+      }
+
+      const isSubscriptionSliceAction =
+        typeof action.type == 'string' &&
+        !!action.type.startsWith(subscriptionsPrefix)
+
+      const isAdditionalSubscriptionAction =
+        queryThunk.rejected.match(action) &&
+        action.meta.condition &&
+        !!action.meta.arg.subscribe
+
+      actionShouldContinue =
+        !isSubscriptionSliceAction && !isAdditionalSubscriptionAction
+    }
+
+    return [actionShouldContinue, false]
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheCollection.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheCollection.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheCollection.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,162 @@
+import type { QueryDefinition } from '../../endpointDefinitions'
+import type { ConfigState, QueryCacheKey } from '../apiState'
+import { isAnyOf } from '../rtkImports'
+import type {
+  ApiMiddlewareInternalHandler,
+  InternalHandlerBuilder,
+  QueryStateMeta,
+  SubMiddlewareApi,
+  TimeoutId,
+} from './types'
+
+export type ReferenceCacheCollection = never
+
+function isObjectEmpty(obj: Record<any, any>) {
+  // Apparently a for..in loop is faster than `Object.keys()` here:
+  // https://stackoverflow.com/a/59787784/62937
+  for (const k in obj) {
+    // If there is at least one key, it's not empty
+    return false
+  }
+  return true
+}
+
+export type CacheCollectionQueryExtraOptions = {
+  /**
+   * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_
+   *
+   * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.
+   */
+  keepUnusedDataFor?: number
+}
+
+// Per https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value , browsers store
+// `setTimeout()` timer values in a 32-bit int. If we pass a value in that's larger than that,
+// it wraps and ends up executing immediately.
+// Our `keepUnusedDataFor` values are in seconds, so adjust the numbers here accordingly.
+export const THIRTY_TWO_BIT_MAX_INT = 2_147_483_647
+export const THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2_147_483_647 / 1_000 - 1
+
+export const buildCacheCollectionHandler: InternalHandlerBuilder = ({
+  reducerPath,
+  api,
+  queryThunk,
+  context,
+  internalState,
+  selectors: { selectQueryEntry, selectConfig },
+}) => {
+  const { removeQueryResult, unsubscribeQueryResult, cacheEntriesUpserted } =
+    api.internalActions
+
+  const canTriggerUnsubscribe = isAnyOf(
+    unsubscribeQueryResult.match,
+    queryThunk.fulfilled,
+    queryThunk.rejected,
+    cacheEntriesUpserted.match,
+  )
+
+  function anySubscriptionsRemainingForKey(queryCacheKey: string) {
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey]
+    return !!subscriptions && !isObjectEmpty(subscriptions)
+  }
+
+  const currentRemovalTimeouts: QueryStateMeta<TimeoutId> = {}
+
+  const handler: ApiMiddlewareInternalHandler = (
+    action,
+    mwApi,
+    internalState,
+  ) => {
+    const state = mwApi.getState()
+    const config = selectConfig(state)
+    if (canTriggerUnsubscribe(action)) {
+      let queryCacheKeys: QueryCacheKey[]
+
+      if (cacheEntriesUpserted.match(action)) {
+        queryCacheKeys = action.payload.map(
+          (entry) => entry.queryDescription.queryCacheKey,
+        )
+      } else {
+        const { queryCacheKey } = unsubscribeQueryResult.match(action)
+          ? action.payload
+          : action.meta.arg
+        queryCacheKeys = [queryCacheKey]
+      }
+
+      handleUnsubscribeMany(queryCacheKeys, mwApi, config)
+    }
+
+    if (api.util.resetApiState.match(action)) {
+      for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {
+        if (timeout) clearTimeout(timeout)
+        delete currentRemovalTimeouts[key]
+      }
+    }
+
+    if (context.hasRehydrationInfo(action)) {
+      const { queries } = context.extractRehydrationInfo(action)!
+      // Gotcha:
+      // If rehydrating before the endpoint has been injected,the global `keepUnusedDataFor`
+      // will be used instead of the endpoint-specific one.
+      handleUnsubscribeMany(
+        Object.keys(queries) as QueryCacheKey[],
+        mwApi,
+        config,
+      )
+    }
+  }
+
+  function handleUnsubscribeMany(
+    cacheKeys: QueryCacheKey[],
+    api: SubMiddlewareApi,
+    config: ConfigState<string>,
+  ) {
+    const state = api.getState()
+    for (const queryCacheKey of cacheKeys) {
+      const entry = selectQueryEntry(state, queryCacheKey)
+      handleUnsubscribe(queryCacheKey, entry?.endpointName, api, config)
+    }
+  }
+
+  function handleUnsubscribe(
+    queryCacheKey: QueryCacheKey,
+    endpointName: string | undefined,
+    api: SubMiddlewareApi,
+    config: ConfigState<string>,
+  ) {
+    const endpointDefinition = context.endpointDefinitions[
+      endpointName!
+    ] as QueryDefinition<any, any, any, any>
+    const keepUnusedDataFor =
+      endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor
+
+    if (keepUnusedDataFor === Infinity) {
+      // Hey, user said keep this forever!
+      return
+    }
+    // Prevent `setTimeout` timers from overflowing a 32-bit internal int, by
+    // clamping the max value to be at most 1000ms less than the 32-bit max.
+    // Look, a 24.8-day keepalive ought to be enough for anybody, right? :)
+    // Also avoid negative values too.
+    const finalKeepUnusedDataFor = Math.max(
+      0,
+      Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS),
+    )
+
+    if (!anySubscriptionsRemainingForKey(queryCacheKey)) {
+      const currentTimeout = currentRemovalTimeouts[queryCacheKey]
+      if (currentTimeout) {
+        clearTimeout(currentTimeout)
+      }
+
+      currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {
+        if (!anySubscriptionsRemainingForKey(queryCacheKey)) {
+          api.dispatch(removeQueryResult({ queryCacheKey }))
+        }
+        delete currentRemovalTimeouts![queryCacheKey]
+      }, finalKeepUnusedDataFor * 1000)
+    }
+  }
+
+  return handler
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,370 @@
+import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'
+import type {
+  BaseQueryFn,
+  BaseQueryMeta,
+  BaseQueryResult,
+} from '../../baseQueryTypes'
+import type { BaseEndpointDefinition } from '../../endpointDefinitions'
+import { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions'
+import type { QueryCacheKey, RootState } from '../apiState'
+import type {
+  MutationResultSelectorResult,
+  QueryResultSelectorResult,
+} from '../buildSelectors'
+import { getMutationCacheKey } from '../buildSlice'
+import type { PatchCollection, Recipe } from '../buildThunks'
+import { isAsyncThunkAction, isFulfilled } from '../rtkImports'
+import type {
+  ApiMiddlewareInternalHandler,
+  InternalHandlerBuilder,
+  PromiseWithKnownReason,
+  SubMiddlewareApi,
+} from './types'
+
+export type ReferenceCacheLifecycle = never
+
+export interface QueryBaseLifecycleApi<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+  ReducerPath extends string = string,
+> extends LifecycleApi<ReducerPath> {
+  /**
+   * Gets the current value of this cache entry.
+   */
+  getCacheEntry(): QueryResultSelectorResult<
+    { type: DefinitionType.query } & BaseEndpointDefinition<
+      QueryArg,
+      BaseQuery,
+      ResultType,
+      BaseQueryResult<BaseQuery>
+    >
+  >
+  /**
+   * Updates the current cache entry value.
+   * For documentation see `api.util.updateQueryData`.
+   */
+  updateCachedData(updateRecipe: Recipe<ResultType>): PatchCollection
+}
+
+export type MutationBaseLifecycleApi<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+  ReducerPath extends string = string,
+> = LifecycleApi<ReducerPath> & {
+  /**
+   * Gets the current value of this cache entry.
+   */
+  getCacheEntry(): MutationResultSelectorResult<
+    { type: DefinitionType.mutation } & BaseEndpointDefinition<
+      QueryArg,
+      BaseQuery,
+      ResultType,
+      BaseQueryResult<BaseQuery>
+    >
+  >
+}
+
+type LifecycleApi<ReducerPath extends string = string> = {
+  /**
+   * The dispatch method for the store
+   */
+  dispatch: ThunkDispatch<any, any, UnknownAction>
+  /**
+   * A method to get the current state
+   */
+  getState(): RootState<any, any, ReducerPath>
+  /**
+   * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.
+   */
+  extra: unknown
+  /**
+   * A unique ID generated for the mutation
+   */
+  requestId: string
+}
+
+type CacheLifecyclePromises<ResultType = unknown, MetaType = unknown> = {
+  /**
+   * Promise that will resolve with the first value for this cache key.
+   * This allows you to `await` until an actual value is in cache.
+   *
+   * If the cache entry is removed from the cache before any value has ever
+   * been resolved, this Promise will reject with
+   * `new Error('Promise never resolved before cacheEntryRemoved.')`
+   * to prevent memory leaks.
+   * You can just re-throw that error (or not handle it at all) -
+   * it will be caught outside of `cacheEntryAdded`.
+   *
+   * If you don't interact with this promise, it will not throw.
+   */
+  cacheDataLoaded: PromiseWithKnownReason<
+    {
+      /**
+       * The (transformed) query result.
+       */
+      data: ResultType
+      /**
+       * The `meta` returned by the `baseQuery`
+       */
+      meta: MetaType
+    },
+    typeof neverResolvedError
+  >
+  /**
+   * Promise that allows you to wait for the point in time when the cache entry
+   * has been removed from the cache, by not being used/subscribed to any more
+   * in the application for too long or by dispatching `api.util.resetApiState`.
+   */
+  cacheEntryRemoved: Promise<void>
+}
+
+export interface QueryCacheLifecycleApi<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+  ReducerPath extends string = string,
+> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>,
+    CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>> {}
+
+export type MutationCacheLifecycleApi<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+  ReducerPath extends string = string,
+> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> &
+  CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>>
+
+export type CacheLifecycleQueryExtraOptions<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string = string,
+> = {
+  onCacheEntryAdded?(
+    arg: QueryArg,
+    api: QueryCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>,
+  ): Promise<void> | void
+}
+
+export type CacheLifecycleInfiniteQueryExtraOptions<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string = string,
+> = CacheLifecycleQueryExtraOptions<
+  ResultType,
+  QueryArg,
+  BaseQuery,
+  ReducerPath
+>
+
+export type CacheLifecycleMutationExtraOptions<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string = string,
+> = {
+  onCacheEntryAdded?(
+    arg: QueryArg,
+    api: MutationCacheLifecycleApi<
+      QueryArg,
+      BaseQuery,
+      ResultType,
+      ReducerPath
+    >,
+  ): Promise<void> | void
+}
+
+const neverResolvedError = new Error(
+  'Promise never resolved before cacheEntryRemoved.',
+) as Error & {
+  message: 'Promise never resolved before cacheEntryRemoved.'
+}
+
+export const buildCacheLifecycleHandler: InternalHandlerBuilder = ({
+  api,
+  reducerPath,
+  context,
+  queryThunk,
+  mutationThunk,
+  internalState,
+  selectors: { selectQueryEntry, selectApiState },
+}) => {
+  const isQueryThunk = isAsyncThunkAction(queryThunk)
+  const isMutationThunk = isAsyncThunkAction(mutationThunk)
+  const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk)
+
+  type CacheLifecycle = {
+    valueResolved?(value: { data: unknown; meta: unknown }): unknown
+    cacheEntryRemoved(): void
+  }
+  const lifecycleMap: Record<string, CacheLifecycle> = {}
+
+  function resolveLifecycleEntry(
+    cacheKey: string,
+    data: unknown,
+    meta: unknown,
+  ) {
+    const lifecycle = lifecycleMap[cacheKey]
+
+    if (lifecycle?.valueResolved) {
+      lifecycle.valueResolved({
+        data,
+        meta,
+      })
+      delete lifecycle.valueResolved
+    }
+  }
+
+  function removeLifecycleEntry(cacheKey: string) {
+    const lifecycle = lifecycleMap[cacheKey]
+    if (lifecycle) {
+      delete lifecycleMap[cacheKey]
+      lifecycle.cacheEntryRemoved()
+    }
+  }
+
+  const handler: ApiMiddlewareInternalHandler = (
+    action,
+    mwApi,
+    stateBefore,
+  ) => {
+    const cacheKey = getCacheKey(action) as QueryCacheKey
+
+    function checkForNewCacheKey(
+      endpointName: string,
+      cacheKey: QueryCacheKey,
+      requestId: string,
+      originalArgs: unknown,
+    ) {
+      const oldEntry = selectQueryEntry(stateBefore, cacheKey)
+      const newEntry = selectQueryEntry(mwApi.getState(), cacheKey)
+      if (!oldEntry && newEntry) {
+        handleNewKey(endpointName, originalArgs, cacheKey, mwApi, requestId)
+      }
+    }
+
+    if (queryThunk.pending.match(action)) {
+      checkForNewCacheKey(
+        action.meta.arg.endpointName,
+        cacheKey,
+        action.meta.requestId,
+        action.meta.arg.originalArgs,
+      )
+    } else if (api.internalActions.cacheEntriesUpserted.match(action)) {
+      for (const { queryDescription, value } of action.payload) {
+        const { endpointName, originalArgs, queryCacheKey } = queryDescription
+        checkForNewCacheKey(
+          endpointName,
+          queryCacheKey,
+          action.meta.requestId,
+          originalArgs,
+        )
+
+        resolveLifecycleEntry(queryCacheKey, value, {})
+      }
+    } else if (mutationThunk.pending.match(action)) {
+      const state = mwApi.getState()[reducerPath].mutations[cacheKey]
+      if (state) {
+        handleNewKey(
+          action.meta.arg.endpointName,
+          action.meta.arg.originalArgs,
+          cacheKey,
+          mwApi,
+          action.meta.requestId,
+        )
+      }
+    } else if (isFulfilledThunk(action)) {
+      resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta)
+    } else if (
+      api.internalActions.removeQueryResult.match(action) ||
+      api.internalActions.removeMutationResult.match(action)
+    ) {
+      removeLifecycleEntry(cacheKey)
+    } else if (api.util.resetApiState.match(action)) {
+      for (const cacheKey of Object.keys(lifecycleMap)) {
+        removeLifecycleEntry(cacheKey)
+      }
+    }
+  }
+
+  function getCacheKey(action: any) {
+    if (isQueryThunk(action)) return action.meta.arg.queryCacheKey
+    if (isMutationThunk(action)) {
+      return action.meta.arg.fixedCacheKey ?? action.meta.requestId
+    }
+    if (api.internalActions.removeQueryResult.match(action))
+      return action.payload.queryCacheKey
+    if (api.internalActions.removeMutationResult.match(action))
+      return getMutationCacheKey(action.payload)
+    return ''
+  }
+
+  function handleNewKey(
+    endpointName: string,
+    originalArgs: any,
+    queryCacheKey: string,
+    mwApi: SubMiddlewareApi,
+    requestId: string,
+  ) {
+    const endpointDefinition = context.endpointDefinitions[endpointName]
+    const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded
+    if (!onCacheEntryAdded) return
+
+    const lifecycle = {} as CacheLifecycle
+
+    const cacheEntryRemoved = new Promise<void>((resolve) => {
+      lifecycle.cacheEntryRemoved = resolve
+    })
+    const cacheDataLoaded: PromiseWithKnownReason<
+      { data: unknown; meta: unknown },
+      typeof neverResolvedError
+    > = Promise.race([
+      new Promise<{ data: unknown; meta: unknown }>((resolve) => {
+        lifecycle.valueResolved = resolve
+      }),
+      cacheEntryRemoved.then(() => {
+        throw neverResolvedError
+      }),
+    ])
+    // prevent uncaught promise rejections from happening.
+    // if the original promise is used in any way, that will create a new promise that will throw again
+    cacheDataLoaded.catch(() => {})
+    lifecycleMap[queryCacheKey] = lifecycle
+    const selector = (api.endpoints[endpointName] as any).select(
+      isAnyQueryDefinition(endpointDefinition) ? originalArgs : queryCacheKey,
+    )
+
+    const extra = mwApi.dispatch((_, __, extra) => extra)
+    const lifecycleApi = {
+      ...mwApi,
+      getCacheEntry: () => selector(mwApi.getState()),
+      requestId,
+      extra,
+      updateCachedData: (isAnyQueryDefinition(endpointDefinition)
+        ? (updateRecipe: Recipe<any>) =>
+            mwApi.dispatch(
+              api.util.updateQueryData(
+                endpointName as never,
+                originalArgs as never,
+                updateRecipe,
+              ),
+            )
+        : undefined) as any,
+
+      cacheDataLoaded,
+      cacheEntryRemoved,
+    }
+
+    const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi as any)
+    // if a `neverResolvedError` was thrown, but not handled in the running handler, do not let it leak out further
+    Promise.resolve(runningHandler).catch((e) => {
+      if (e === neverResolvedError) return
+      throw e
+    })
+  }
+
+  return handler
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/devMiddleware.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/devMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/devMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import type { InternalHandlerBuilder } from './types'
+
+export const buildDevCheckHandler: InternalHandlerBuilder = ({
+  api,
+  context: { apiUid },
+  reducerPath,
+}) => {
+  return (action, mwApi) => {
+    if (api.util.resetApiState.match(action)) {
+      // dispatch after api reset
+      mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid))
+    }
+
+    if (
+      typeof process !== 'undefined' &&
+      process.env.NODE_ENV === 'development'
+    ) {
+      if (
+        api.internalActions.middlewareRegistered.match(action) &&
+        action.payload === apiUid &&
+        mwApi.getState()[reducerPath]?.config?.middlewareRegistered ===
+          'conflict'
+      ) {
+        console.warn(`There is a mismatch between slice and middleware for the reducerPath "${reducerPath}".
+You can only have one api per reducer path, this will lead to crashes in various situations!${
+          reducerPath === 'api'
+            ? `
+If you have multiple apis, you *have* to specify the reducerPath option when using createApi!`
+            : ''
+        }`)
+      }
+    }
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,163 @@
+import type {
+  Action,
+  Middleware,
+  ThunkDispatch,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import type {
+  EndpointDefinitions,
+  FullTagDescription,
+} from '../../endpointDefinitions'
+import type { QueryStatus, QuerySubState, RootState } from '../apiState'
+import type { QueryThunkArg } from '../buildThunks'
+import { createAction, isAction } from '../rtkImports'
+import { buildBatchedActionsHandler } from './batchActions'
+import { buildCacheCollectionHandler } from './cacheCollection'
+import { buildCacheLifecycleHandler } from './cacheLifecycle'
+import { buildDevCheckHandler } from './devMiddleware'
+import { buildInvalidationByTagsHandler } from './invalidationByTags'
+import { buildPollingHandler } from './polling'
+import { buildQueryLifecycleHandler } from './queryLifecycle'
+import type {
+  BuildMiddlewareInput,
+  InternalHandlerBuilder,
+  InternalMiddlewareState,
+} from './types'
+import { buildWindowEventHandler } from './windowEventHandling'
+import type { ApiEndpointQuery } from '../module'
+export type { ReferenceCacheCollection } from './cacheCollection'
+export type {
+  MutationCacheLifecycleApi,
+  QueryCacheLifecycleApi,
+  ReferenceCacheLifecycle,
+} from './cacheLifecycle'
+export type {
+  MutationLifecycleApi,
+  QueryLifecycleApi,
+  ReferenceQueryLifecycle,
+  TypedMutationOnQueryStarted,
+  TypedQueryOnQueryStarted,
+} from './queryLifecycle'
+export type { SubscriptionSelectors } from './types'
+
+export function buildMiddleware<
+  Definitions extends EndpointDefinitions,
+  ReducerPath extends string,
+  TagTypes extends string,
+>(input: BuildMiddlewareInput<Definitions, ReducerPath, TagTypes>) {
+  const { reducerPath, queryThunk, api, context } = input
+  const { apiUid } = context
+
+  const actions = {
+    invalidateTags: createAction<
+      Array<TagTypes | FullTagDescription<TagTypes> | null | undefined>
+    >(`${reducerPath}/invalidateTags`),
+  }
+
+  const isThisApiSliceAction = (action: Action) =>
+    action.type.startsWith(`${reducerPath}/`)
+
+  const handlerBuilders: InternalHandlerBuilder[] = [
+    buildDevCheckHandler,
+    buildCacheCollectionHandler,
+    buildInvalidationByTagsHandler,
+    buildPollingHandler,
+    buildCacheLifecycleHandler,
+    buildQueryLifecycleHandler,
+  ]
+
+  const middleware: Middleware<
+    {},
+    RootState<Definitions, string, ReducerPath>,
+    ThunkDispatch<any, any, UnknownAction>
+  > = (mwApi) => {
+    let initialized = false
+
+    const internalState: InternalMiddlewareState = {
+      currentSubscriptions: {},
+    }
+
+    const builderArgs = {
+      ...(input as any as BuildMiddlewareInput<
+        EndpointDefinitions,
+        string,
+        string
+      >),
+      internalState,
+      refetchQuery,
+      isThisApiSliceAction,
+    }
+
+    const handlers = handlerBuilders.map((build) => build(builderArgs))
+
+    const batchedActionsHandler = buildBatchedActionsHandler(builderArgs)
+    const windowEventsHandler = buildWindowEventHandler(builderArgs)
+
+    return (next) => {
+      return (action) => {
+        if (!isAction(action)) {
+          return next(action)
+        }
+        if (!initialized) {
+          initialized = true
+          // dispatch before any other action
+          mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid))
+        }
+
+        const mwApiWithNext = { ...mwApi, next }
+
+        const stateBefore = mwApi.getState()
+
+        const [actionShouldContinue, internalProbeResult] =
+          batchedActionsHandler(action, mwApiWithNext, stateBefore)
+
+        let res: any
+
+        if (actionShouldContinue) {
+          res = next(action)
+        } else {
+          res = internalProbeResult
+        }
+
+        if (!!mwApi.getState()[reducerPath]) {
+          // Only run these checks if the middleware is registered okay
+
+          // This looks for actions that aren't specific to the API slice
+          windowEventsHandler(action, mwApiWithNext, stateBefore)
+
+          if (
+            isThisApiSliceAction(action) ||
+            context.hasRehydrationInfo(action)
+          ) {
+            // Only run these additional checks if the actions are part of the API slice,
+            // or the action has hydration-related data
+            for (const handler of handlers) {
+              handler(action, mwApiWithNext, stateBefore)
+            }
+          }
+        }
+
+        return res
+      }
+    }
+  }
+
+  return { middleware, actions }
+
+  function refetchQuery(
+    querySubState: Exclude<
+      QuerySubState<any>,
+      { status: QueryStatus.uninitialized }
+    >,
+  ) {
+    return (
+      input.api.endpoints[querySubState.endpointName] as ApiEndpointQuery<
+        any,
+        any
+      >
+    ).initiate(querySubState.originalArgs as any, {
+      subscribe: false,
+      forceRefetch: true,
+    })
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,133 @@
+import {
+  isAnyOf,
+  isFulfilled,
+  isRejected,
+  isRejectedWithValue,
+} from '../rtkImports'
+
+import type {
+  EndpointDefinitions,
+  FullTagDescription,
+} from '../../endpointDefinitions'
+import { calculateProvidedBy } from '../../endpointDefinitions'
+import type { CombinedState, QueryCacheKey } from '../apiState'
+import { QueryStatus } from '../apiState'
+import { calculateProvidedByThunk } from '../buildThunks'
+import type {
+  SubMiddlewareApi,
+  InternalHandlerBuilder,
+  ApiMiddlewareInternalHandler,
+  InternalMiddlewareState,
+} from './types'
+import { countObjectKeys } from '../../utils/countObjectKeys'
+
+export const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({
+  reducerPath,
+  context,
+  context: { endpointDefinitions },
+  mutationThunk,
+  queryThunk,
+  api,
+  assertTagType,
+  refetchQuery,
+  internalState,
+}) => {
+  const { removeQueryResult } = api.internalActions
+  const isThunkActionWithTags = isAnyOf(
+    isFulfilled(mutationThunk),
+    isRejectedWithValue(mutationThunk),
+  )
+
+  const isQueryEnd = isAnyOf(
+    isFulfilled(mutationThunk, queryThunk),
+    isRejected(mutationThunk, queryThunk),
+  )
+
+  let pendingTagInvalidations: FullTagDescription<string>[] = []
+
+  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {
+    if (isThunkActionWithTags(action)) {
+      invalidateTags(
+        calculateProvidedByThunk(
+          action,
+          'invalidatesTags',
+          endpointDefinitions,
+          assertTagType,
+        ),
+        mwApi,
+      )
+    } else if (isQueryEnd(action)) {
+      invalidateTags([], mwApi)
+    } else if (api.util.invalidateTags.match(action)) {
+      invalidateTags(
+        calculateProvidedBy(
+          action.payload,
+          undefined,
+          undefined,
+          undefined,
+          undefined,
+          assertTagType,
+        ),
+        mwApi,
+      )
+    }
+  }
+
+  function hasPendingRequests(
+    state: CombinedState<EndpointDefinitions, string, string>,
+  ) {
+    const { queries, mutations } = state
+    for (const cacheRecord of [queries, mutations]) {
+      for (const key in cacheRecord) {
+        if (cacheRecord[key]?.status === QueryStatus.pending) return true
+      }
+    }
+    return false
+  }
+
+  function invalidateTags(
+    newTags: readonly FullTagDescription<string>[],
+    mwApi: SubMiddlewareApi,
+  ) {
+    const rootState = mwApi.getState()
+    const state = rootState[reducerPath]
+
+    pendingTagInvalidations.push(...newTags)
+
+    if (
+      state.config.invalidationBehavior === 'delayed' &&
+      hasPendingRequests(state)
+    ) {
+      return
+    }
+
+    const tags = pendingTagInvalidations
+    pendingTagInvalidations = []
+    if (tags.length === 0) return
+
+    const toInvalidate = api.util.selectInvalidatedBy(rootState, tags)
+
+    context.batch(() => {
+      const valuesArray = Array.from(toInvalidate.values())
+      for (const { queryCacheKey } of valuesArray) {
+        const querySubState = state.queries[queryCacheKey]
+        const subscriptionSubState =
+          internalState.currentSubscriptions[queryCacheKey] ?? {}
+
+        if (querySubState) {
+          if (countObjectKeys(subscriptionSubState) === 0) {
+            mwApi.dispatch(
+              removeQueryResult({
+                queryCacheKey: queryCacheKey as QueryCacheKey,
+              }),
+            )
+          } else if (querySubState.status !== QueryStatus.uninitialized) {
+            mwApi.dispatch(refetchQuery(querySubState))
+          }
+        }
+      }
+    })
+  }
+
+  return handler
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/polling.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/polling.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/polling.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,168 @@
+import type {
+  QueryCacheKey,
+  QuerySubstateIdentifier,
+  Subscribers,
+} from '../apiState'
+import { QueryStatus } from '../apiState'
+import type {
+  QueryStateMeta,
+  SubMiddlewareApi,
+  TimeoutId,
+  InternalHandlerBuilder,
+  ApiMiddlewareInternalHandler,
+  InternalMiddlewareState,
+} from './types'
+
+export const buildPollingHandler: InternalHandlerBuilder = ({
+  reducerPath,
+  queryThunk,
+  api,
+  refetchQuery,
+  internalState,
+}) => {
+  const currentPolls: QueryStateMeta<{
+    nextPollTimestamp: number
+    timeout?: TimeoutId
+    pollingInterval: number
+  }> = {}
+
+  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {
+    if (
+      api.internalActions.updateSubscriptionOptions.match(action) ||
+      api.internalActions.unsubscribeQueryResult.match(action)
+    ) {
+      updatePollingInterval(action.payload, mwApi)
+    }
+
+    if (
+      queryThunk.pending.match(action) ||
+      (queryThunk.rejected.match(action) && action.meta.condition)
+    ) {
+      updatePollingInterval(action.meta.arg, mwApi)
+    }
+
+    if (
+      queryThunk.fulfilled.match(action) ||
+      (queryThunk.rejected.match(action) && !action.meta.condition)
+    ) {
+      startNextPoll(action.meta.arg, mwApi)
+    }
+
+    if (api.util.resetApiState.match(action)) {
+      clearPolls()
+    }
+  }
+
+  function getCacheEntrySubscriptions(
+    queryCacheKey: QueryCacheKey,
+    api: SubMiddlewareApi,
+  ) {
+    const state = api.getState()[reducerPath]
+    const querySubState = state.queries[queryCacheKey]
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey]
+
+    if (!querySubState || querySubState.status === QueryStatus.uninitialized)
+      return
+
+    return subscriptions
+  }
+
+  function startNextPoll(
+    { queryCacheKey }: QuerySubstateIdentifier,
+    api: SubMiddlewareApi,
+  ) {
+    const state = api.getState()[reducerPath]
+    const querySubState = state.queries[queryCacheKey]
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey]
+
+    if (!querySubState || querySubState.status === QueryStatus.uninitialized)
+      return
+
+    const { lowestPollingInterval, skipPollingIfUnfocused } =
+      findLowestPollingInterval(subscriptions)
+    if (!Number.isFinite(lowestPollingInterval)) return
+
+    const currentPoll = currentPolls[queryCacheKey]
+
+    if (currentPoll?.timeout) {
+      clearTimeout(currentPoll.timeout)
+      currentPoll.timeout = undefined
+    }
+
+    const nextPollTimestamp = Date.now() + lowestPollingInterval
+
+    currentPolls[queryCacheKey] = {
+      nextPollTimestamp,
+      pollingInterval: lowestPollingInterval,
+      timeout: setTimeout(() => {
+        if (state.config.focused || !skipPollingIfUnfocused) {
+          api.dispatch(refetchQuery(querySubState))
+        }
+        startNextPoll({ queryCacheKey }, api)
+      }, lowestPollingInterval),
+    }
+  }
+
+  function updatePollingInterval(
+    { queryCacheKey }: QuerySubstateIdentifier,
+    api: SubMiddlewareApi,
+  ) {
+    const state = api.getState()[reducerPath]
+    const querySubState = state.queries[queryCacheKey]
+    const subscriptions = internalState.currentSubscriptions[queryCacheKey]
+
+    if (!querySubState || querySubState.status === QueryStatus.uninitialized) {
+      return
+    }
+
+    const { lowestPollingInterval } = findLowestPollingInterval(subscriptions)
+
+    if (!Number.isFinite(lowestPollingInterval)) {
+      cleanupPollForKey(queryCacheKey)
+      return
+    }
+
+    const currentPoll = currentPolls[queryCacheKey]
+    const nextPollTimestamp = Date.now() + lowestPollingInterval
+
+    if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {
+      startNextPoll({ queryCacheKey }, api)
+    }
+  }
+
+  function cleanupPollForKey(key: string) {
+    const existingPoll = currentPolls[key]
+    if (existingPoll?.timeout) {
+      clearTimeout(existingPoll.timeout)
+    }
+    delete currentPolls[key]
+  }
+
+  function clearPolls() {
+    for (const key of Object.keys(currentPolls)) {
+      cleanupPollForKey(key)
+    }
+  }
+
+  function findLowestPollingInterval(subscribers: Subscribers = {}) {
+    let skipPollingIfUnfocused: boolean | undefined = false
+    let lowestPollingInterval = Number.POSITIVE_INFINITY
+    for (let key in subscribers) {
+      if (!!subscribers[key].pollingInterval) {
+        lowestPollingInterval = Math.min(
+          subscribers[key].pollingInterval!,
+          lowestPollingInterval,
+        )
+        skipPollingIfUnfocused =
+          subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused
+      }
+    }
+
+    return {
+      lowestPollingInterval,
+      skipPollingIfUnfocused,
+    }
+  }
+
+  return handler
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,504 @@
+import type {
+  BaseQueryError,
+  BaseQueryFn,
+  BaseQueryMeta,
+} from '../../baseQueryTypes'
+import { DefinitionType, isAnyQueryDefinition } from '../../endpointDefinitions'
+import type { Recipe } from '../buildThunks'
+import { isFulfilled, isPending, isRejected } from '../rtkImports'
+import type {
+  MutationBaseLifecycleApi,
+  QueryBaseLifecycleApi,
+} from './cacheLifecycle'
+import type {
+  ApiMiddlewareInternalHandler,
+  InternalHandlerBuilder,
+  PromiseConstructorWithKnownReason,
+  PromiseWithKnownReason,
+} from './types'
+
+export type ReferenceQueryLifecycle = never
+
+type QueryLifecyclePromises<ResultType, BaseQuery extends BaseQueryFn> = {
+  /**
+   * Promise that will resolve with the (transformed) query result.
+   *
+   * If the query fails, this promise will reject with the error.
+   *
+   * This allows you to `await` for the query to finish.
+   *
+   * If you don't interact with this promise, it will not throw.
+   */
+  queryFulfilled: PromiseWithKnownReason<
+    {
+      /**
+       * The (transformed) query result.
+       */
+      data: ResultType
+      /**
+       * The `meta` returned by the `baseQuery`
+       */
+      meta: BaseQueryMeta<BaseQuery>
+    },
+    QueryFulfilledRejectionReason<BaseQuery>
+  >
+}
+
+type QueryFulfilledRejectionReason<BaseQuery extends BaseQueryFn> =
+  | {
+      error: BaseQueryError<BaseQuery>
+      /**
+       * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.
+       */
+      isUnhandledError: false
+      /**
+       * The `meta` returned by the `baseQuery`
+       */
+      meta: BaseQueryMeta<BaseQuery>
+    }
+  | {
+      error: unknown
+      meta?: undefined
+      /**
+       * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn`, `transformResponse` or `transformErrorResponse` throwing an error instead of handling it properly.
+       * There can not be made any assumption about the shape of `error`.
+       */
+      isUnhandledError: true
+    }
+
+export type QueryLifecycleQueryExtraOptions<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string = string,
+> = {
+  /**
+   * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).
+   *
+   * Can be used to perform side-effects throughout the lifecycle of the query.
+   *
+   * @example
+   * ```ts
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+   * import { messageCreated } from './notificationsSlice
+   * export interface Post {
+   *   id: number
+   *   name: string
+   * }
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({
+   *     baseUrl: '/',
+   *   }),
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, number>({
+   *       query: (id) => `post/${id}`,
+   *       async onQueryStarted(id, { dispatch, queryFulfilled }) {
+   *         // `onStart` side-effect
+   *         dispatch(messageCreated('Fetching posts...'))
+   *         try {
+   *           const { data } = await queryFulfilled
+   *           // `onSuccess` side-effect
+   *           dispatch(messageCreated('Posts received!'))
+   *         } catch (err) {
+   *           // `onError` side-effect
+   *           dispatch(messageCreated('Error fetching posts!'))
+   *         }
+   *       }
+   *     }),
+   *   }),
+   * })
+   * ```
+   */
+  onQueryStarted?(
+    queryArgument: QueryArg,
+    queryLifeCycleApi: QueryLifecycleApi<
+      QueryArg,
+      BaseQuery,
+      ResultType,
+      ReducerPath
+    >,
+  ): Promise<void> | void
+}
+
+export type QueryLifecycleInfiniteQueryExtraOptions<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string = string,
+> = QueryLifecycleQueryExtraOptions<
+  ResultType,
+  QueryArg,
+  BaseQuery,
+  ReducerPath
+>
+
+export type QueryLifecycleMutationExtraOptions<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string = string,
+> = {
+  /**
+   * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).
+   *
+   * Can be used for `optimistic updates`.
+   *
+   * @example
+   *
+   * ```ts
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+   * export interface Post {
+   *   id: number
+   *   name: string
+   * }
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({
+   *     baseUrl: '/',
+   *   }),
+   *   tagTypes: ['Post'],
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, number>({
+   *       query: (id) => `post/${id}`,
+   *       providesTags: ['Post'],
+   *     }),
+   *     updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({
+   *       query: ({ id, ...patch }) => ({
+   *         url: `post/${id}`,
+   *         method: 'PATCH',
+   *         body: patch,
+   *       }),
+   *       invalidatesTags: ['Post'],
+   *       async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {
+   *         const patchResult = dispatch(
+   *           api.util.updateQueryData('getPost', id, (draft) => {
+   *             Object.assign(draft, patch)
+   *           })
+   *         )
+   *         try {
+   *           await queryFulfilled
+   *         } catch {
+   *           patchResult.undo()
+   *         }
+   *       },
+   *     }),
+   *   }),
+   * })
+   * ```
+   */
+  onQueryStarted?(
+    queryArgument: QueryArg,
+    mutationLifeCycleApi: MutationLifecycleApi<
+      QueryArg,
+      BaseQuery,
+      ResultType,
+      ReducerPath
+    >,
+  ): Promise<void> | void
+}
+
+export interface QueryLifecycleApi<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+  ReducerPath extends string = string,
+> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>,
+    QueryLifecyclePromises<ResultType, BaseQuery> {}
+
+export type MutationLifecycleApi<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+  ReducerPath extends string = string,
+> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> &
+  QueryLifecyclePromises<ResultType, BaseQuery>
+
+/**
+ * Provides a way to define a strongly-typed version of
+ * {@linkcode QueryLifecycleQueryExtraOptions.onQueryStarted | onQueryStarted}
+ * for a specific query.
+ *
+ * @example
+ * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>
+ *
+ * ```ts
+ * import type { TypedQueryOnQueryStarted } from '@reduxjs/toolkit/query'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+ *
+ * type Post = {
+ *   id: number
+ *   title: string
+ *   userId: number
+ * }
+ *
+ * type PostsApiResponse = {
+ *   posts: Post[]
+ *   total: number
+ *   skip: number
+ *   limit: number
+ * }
+ *
+ * type QueryArgument = number | undefined
+ *
+ * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+ *
+ * const baseApiSlice = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),
+ *   reducerPath: 'postsApi',
+ *   tagTypes: ['Posts'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsApiResponse, void>({
+ *       query: () => `/posts`,
+ *     }),
+ *
+ *     getPostById: build.query<Post, QueryArgument>({
+ *       query: (postId) => `/posts/${postId}`,
+ *     }),
+ *   }),
+ * })
+ *
+ * const updatePostOnFulfilled: TypedQueryOnQueryStarted<
+ *   PostsApiResponse,
+ *   QueryArgument,
+ *   BaseQueryFunction,
+ *   'postsApi'
+ * > = async (queryArgument, { dispatch, queryFulfilled }) => {
+ *   const result = await queryFulfilled
+ *
+ *   const { posts } = result.data
+ *
+ *   // Pre-fill the individual post entries with the results
+ *   // from the list endpoint query
+ *   dispatch(
+ *     baseApiSlice.util.upsertQueryEntries(
+ *       posts.map((post) => ({
+ *         endpointName: 'getPostById',
+ *         arg: post.id,
+ *         value: post,
+ *       })),
+ *     ),
+ *   )
+ * }
+ *
+ * export const extendedApiSlice = baseApiSlice.injectEndpoints({
+ *   endpoints: (build) => ({
+ *     getPostsByUserId: build.query<PostsApiResponse, QueryArgument>({
+ *       query: (userId) => `/posts/user/${userId}`,
+ *
+ *       onQueryStarted: updatePostOnFulfilled,
+ *     }),
+ *   }),
+ * })
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArgumentType - The type of the argument passed into the query.
+ * @template BaseQueryFunctionType - The type of the base query function being used.
+ * @template ReducerPath - The type representing the `reducerPath` for the API slice.
+ *
+ * @since 2.4.0
+ * @public
+ */
+export type TypedQueryOnQueryStarted<
+  ResultType,
+  QueryArgumentType,
+  BaseQueryFunctionType extends BaseQueryFn,
+  ReducerPath extends string = string,
+> = QueryLifecycleQueryExtraOptions<
+  ResultType,
+  QueryArgumentType,
+  BaseQueryFunctionType,
+  ReducerPath
+>['onQueryStarted']
+
+/**
+ * Provides a way to define a strongly-typed version of
+ * {@linkcode QueryLifecycleMutationExtraOptions.onQueryStarted | onQueryStarted}
+ * for a specific mutation.
+ *
+ * @example
+ * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>
+ *
+ * ```ts
+ * import type { TypedMutationOnQueryStarted } from '@reduxjs/toolkit/query'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+ *
+ * type Post = {
+ *   id: number
+ *   title: string
+ *   userId: number
+ * }
+ *
+ * type PostsApiResponse = {
+ *   posts: Post[]
+ *   total: number
+ *   skip: number
+ *   limit: number
+ * }
+ *
+ * type QueryArgument = Pick<Post, 'id'> & Partial<Post>
+ *
+ * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+ *
+ * const baseApiSlice = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),
+ *   reducerPath: 'postsApi',
+ *   tagTypes: ['Posts'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsApiResponse, void>({
+ *       query: () => `/posts`,
+ *     }),
+ *
+ *     getPostById: build.query<Post, number>({
+ *       query: (postId) => `/posts/${postId}`,
+ *     }),
+ *   }),
+ * })
+ *
+ * const updatePostOnFulfilled: TypedMutationOnQueryStarted<
+ *   Post,
+ *   QueryArgument,
+ *   BaseQueryFunction,
+ *   'postsApi'
+ * > = async ({ id, ...patch }, { dispatch, queryFulfilled }) => {
+ *   const patchCollection = dispatch(
+ *     baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {
+ *       Object.assign(draftPost, patch)
+ *     }),
+ *   )
+ *
+ *   try {
+ *     await queryFulfilled
+ *   } catch {
+ *     patchCollection.undo()
+ *   }
+ * }
+ *
+ * export const extendedApiSlice = baseApiSlice.injectEndpoints({
+ *   endpoints: (build) => ({
+ *     addPost: build.mutation<Post, Omit<QueryArgument, 'id'>>({
+ *       query: (body) => ({
+ *         url: `posts/add`,
+ *         method: 'POST',
+ *         body,
+ *       }),
+ *
+ *       onQueryStarted: updatePostOnFulfilled,
+ *     }),
+ *
+ *     updatePost: build.mutation<Post, QueryArgument>({
+ *       query: ({ id, ...patch }) => ({
+ *         url: `post/${id}`,
+ *         method: 'PATCH',
+ *         body: patch,
+ *       }),
+ *
+ *       onQueryStarted: updatePostOnFulfilled,
+ *     }),
+ *   }),
+ * })
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArgumentType - The type of the argument passed into the query.
+ * @template BaseQueryFunctionType - The type of the base query function being used.
+ * @template ReducerPath - The type representing the `reducerPath` for the API slice.
+ *
+ * @since 2.4.0
+ * @public
+ */
+export type TypedMutationOnQueryStarted<
+  ResultType,
+  QueryArgumentType,
+  BaseQueryFunctionType extends BaseQueryFn,
+  ReducerPath extends string = string,
+> = QueryLifecycleMutationExtraOptions<
+  ResultType,
+  QueryArgumentType,
+  BaseQueryFunctionType,
+  ReducerPath
+>['onQueryStarted']
+
+export const buildQueryLifecycleHandler: InternalHandlerBuilder = ({
+  api,
+  context,
+  queryThunk,
+  mutationThunk,
+}) => {
+  const isPendingThunk = isPending(queryThunk, mutationThunk)
+  const isRejectedThunk = isRejected(queryThunk, mutationThunk)
+  const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk)
+
+  type CacheLifecycle = {
+    resolve(value: { data: unknown; meta: unknown }): unknown
+    reject(value: QueryFulfilledRejectionReason<any>): unknown
+  }
+  const lifecycleMap: Record<string, CacheLifecycle> = {}
+
+  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {
+    if (isPendingThunk(action)) {
+      const {
+        requestId,
+        arg: { endpointName, originalArgs },
+      } = action.meta
+      const endpointDefinition = context.endpointDefinitions[endpointName]
+      const onQueryStarted = endpointDefinition?.onQueryStarted
+      if (onQueryStarted) {
+        const lifecycle = {} as CacheLifecycle
+        const queryFulfilled =
+          new (Promise as PromiseConstructorWithKnownReason)<
+            { data: unknown; meta: unknown },
+            QueryFulfilledRejectionReason<any>
+          >((resolve, reject) => {
+            lifecycle.resolve = resolve
+            lifecycle.reject = reject
+          })
+        // prevent uncaught promise rejections from happening.
+        // if the original promise is used in any way, that will create a new promise that will throw again
+        queryFulfilled.catch(() => {})
+        lifecycleMap[requestId] = lifecycle
+        const selector = (api.endpoints[endpointName] as any).select(
+          isAnyQueryDefinition(endpointDefinition) ? originalArgs : requestId,
+        )
+
+        const extra = mwApi.dispatch((_, __, extra) => extra)
+        const lifecycleApi = {
+          ...mwApi,
+          getCacheEntry: () => selector(mwApi.getState()),
+          requestId,
+          extra,
+          updateCachedData: (isAnyQueryDefinition(endpointDefinition)
+            ? (updateRecipe: Recipe<any>) =>
+                mwApi.dispatch(
+                  api.util.updateQueryData(
+                    endpointName as never,
+                    originalArgs as never,
+                    updateRecipe,
+                  ),
+                )
+            : undefined) as any,
+          queryFulfilled,
+        }
+        onQueryStarted(originalArgs, lifecycleApi as any)
+      }
+    } else if (isFullfilledThunk(action)) {
+      const { requestId, baseQueryMeta } = action.meta
+      lifecycleMap[requestId]?.resolve({
+        data: action.payload,
+        meta: baseQueryMeta,
+      })
+      delete lifecycleMap[requestId]
+    } else if (isRejectedThunk(action)) {
+      const { requestId, rejectedWithValue, baseQueryMeta } = action.meta
+      lifecycleMap[requestId]?.reject({
+        error: action.payload ?? action.error,
+        isUnhandledError: !rejectedWithValue,
+        meta: baseQueryMeta as any,
+      })
+      delete lifecycleMap[requestId]
+    }
+  }
+
+  return handler
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/types.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,144 @@
+import type {
+  Action,
+  AsyncThunkAction,
+  Middleware,
+  MiddlewareAPI,
+  ThunkAction,
+  ThunkDispatch,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import type { Api, ApiContext } from '../../apiTypes'
+import type {
+  AssertTagTypes,
+  EndpointDefinitions,
+} from '../../endpointDefinitions'
+import type {
+  QueryStatus,
+  QuerySubState,
+  RootState,
+  SubscriptionState,
+} from '../apiState'
+import type {
+  InfiniteQueryThunk,
+  MutationThunk,
+  QueryThunk,
+  QueryThunkArg,
+  ThunkResult,
+} from '../buildThunks'
+import type { QueryActionCreatorResult } from '../buildInitiate'
+import type { AllSelectors } from '../buildSelectors'
+
+export type QueryStateMeta<T> = Record<string, undefined | T>
+export type TimeoutId = ReturnType<typeof setTimeout>
+
+export interface InternalMiddlewareState {
+  currentSubscriptions: SubscriptionState
+}
+
+export interface SubscriptionSelectors {
+  getSubscriptions: () => SubscriptionState
+  getSubscriptionCount: (queryCacheKey: string) => number
+  isRequestSubscribed: (queryCacheKey: string, requestId: string) => boolean
+}
+
+export interface BuildMiddlewareInput<
+  Definitions extends EndpointDefinitions,
+  ReducerPath extends string,
+  TagTypes extends string,
+> {
+  reducerPath: ReducerPath
+  context: ApiContext<Definitions>
+  queryThunk: QueryThunk
+  mutationThunk: MutationThunk
+  infiniteQueryThunk: InfiniteQueryThunk<any>
+  api: Api<any, Definitions, ReducerPath, TagTypes>
+  assertTagType: AssertTagTypes
+  selectors: AllSelectors
+}
+
+export type SubMiddlewareApi = MiddlewareAPI<
+  ThunkDispatch<any, any, UnknownAction>,
+  RootState<EndpointDefinitions, string, string>
+>
+
+export interface BuildSubMiddlewareInput
+  extends BuildMiddlewareInput<EndpointDefinitions, string, string> {
+  internalState: InternalMiddlewareState
+  refetchQuery(
+    querySubState: Exclude<
+      QuerySubState<any>,
+      { status: QueryStatus.uninitialized }
+    >,
+  ): ThunkAction<QueryActionCreatorResult<any>, any, any, UnknownAction>
+  isThisApiSliceAction: (action: Action) => boolean
+  selectors: AllSelectors
+}
+
+export type SubMiddlewareBuilder = (
+  input: BuildSubMiddlewareInput,
+) => Middleware<
+  {},
+  RootState<EndpointDefinitions, string, string>,
+  ThunkDispatch<any, any, UnknownAction>
+>
+
+type MwNext = Parameters<ReturnType<Middleware>>[0]
+
+export type ApiMiddlewareInternalHandler<Return = void> = (
+  action: Action,
+  mwApi: SubMiddlewareApi & { next: MwNext },
+  prevState: RootState<EndpointDefinitions, string, string>,
+) => Return
+
+export type InternalHandlerBuilder<ReturnType = void> = (
+  input: BuildSubMiddlewareInput,
+) => ApiMiddlewareInternalHandler<ReturnType>
+
+export interface PromiseConstructorWithKnownReason {
+  /**
+   * Creates a new Promise with a known rejection reason.
+   * @param executor A callback used to initialize the promise. This callback is passed two arguments:
+   * a resolve callback used to resolve the promise with a value or the result of another promise,
+   * and a reject callback used to reject the promise with a provided reason or error.
+   */
+  new <T, R>(
+    executor: (
+      resolve: (value: T | PromiseLike<T>) => void,
+      reject: (reason?: R) => void,
+    ) => void,
+  ): PromiseWithKnownReason<T, R>
+}
+
+export type PromiseWithKnownReason<T, R> = Omit<
+  Promise<T>,
+  'then' | 'catch'
+> & {
+  /**
+   * Attaches callbacks for the resolution and/or rejection of the Promise.
+   * @param onfulfilled The callback to execute when the Promise is resolved.
+   * @param onrejected The callback to execute when the Promise is rejected.
+   * @returns A Promise for the completion of which ever callback is executed.
+   */
+  then<TResult1 = T, TResult2 = never>(
+    onfulfilled?:
+      | ((value: T) => TResult1 | PromiseLike<TResult1>)
+      | undefined
+      | null,
+    onrejected?:
+      | ((reason: R) => TResult2 | PromiseLike<TResult2>)
+      | undefined
+      | null,
+  ): Promise<TResult1 | TResult2>
+
+  /**
+   * Attaches a callback for only the rejection of the Promise.
+   * @param onrejected The callback to execute when the Promise is rejected.
+   * @returns A Promise for the completion of the callback.
+   */
+  catch<TResult = never>(
+    onrejected?:
+      | ((reason: R) => TResult | PromiseLike<TResult>)
+      | undefined
+      | null,
+  ): Promise<T | TResult>
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/windowEventHandling.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/windowEventHandling.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/windowEventHandling.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+import { QueryStatus } from '../apiState'
+import type { QueryCacheKey } from '../apiState'
+import { onFocus, onOnline } from '../setupListeners'
+import type {
+  ApiMiddlewareInternalHandler,
+  InternalHandlerBuilder,
+  SubMiddlewareApi,
+} from './types'
+import { countObjectKeys } from '../../utils/countObjectKeys'
+
+export const buildWindowEventHandler: InternalHandlerBuilder = ({
+  reducerPath,
+  context,
+  api,
+  refetchQuery,
+  internalState,
+}) => {
+  const { removeQueryResult } = api.internalActions
+
+  const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {
+    if (onFocus.match(action)) {
+      refetchValidQueries(mwApi, 'refetchOnFocus')
+    }
+    if (onOnline.match(action)) {
+      refetchValidQueries(mwApi, 'refetchOnReconnect')
+    }
+  }
+
+  function refetchValidQueries(
+    api: SubMiddlewareApi,
+    type: 'refetchOnFocus' | 'refetchOnReconnect',
+  ) {
+    const state = api.getState()[reducerPath]
+    const queries = state.queries
+    const subscriptions = internalState.currentSubscriptions
+
+    context.batch(() => {
+      for (const queryCacheKey of Object.keys(subscriptions)) {
+        const querySubState = queries[queryCacheKey]
+        const subscriptionSubState = subscriptions[queryCacheKey]
+
+        if (!subscriptionSubState || !querySubState) continue
+
+        const shouldRefetch =
+          Object.values(subscriptionSubState).some(
+            (sub) => sub[type] === true,
+          ) ||
+          (Object.values(subscriptionSubState).every(
+            (sub) => sub[type] === undefined,
+          ) &&
+            state.config[type])
+
+        if (shouldRefetch) {
+          if (countObjectKeys(subscriptionSubState) === 0) {
+            api.dispatch(
+              removeQueryResult({
+                queryCacheKey: queryCacheKey as QueryCacheKey,
+              }),
+            )
+          } else if (querySubState.status !== QueryStatus.uninitialized) {
+            api.dispatch(refetchQuery(querySubState))
+          }
+        }
+      }
+    })
+  }
+
+  return handler
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildSelectors.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildSelectors.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildSelectors.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,416 @@
+import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'
+import type {
+  EndpointDefinition,
+  EndpointDefinitions,
+  InfiniteQueryArgFrom,
+  InfiniteQueryDefinition,
+  MutationDefinition,
+  QueryArgFrom,
+  QueryArgFromAnyQuery,
+  QueryDefinition,
+  ReducerPathFrom,
+  TagDescription,
+  TagTypesFrom,
+} from '../endpointDefinitions'
+import { expandTagDescription } from '../endpointDefinitions'
+import { flatten, isNotNullish } from '../utils'
+import type {
+  InfiniteData,
+  InfiniteQueryConfigOptions,
+  InfiniteQuerySubState,
+  MutationSubState,
+  QueryCacheKey,
+  QueryKeys,
+  QueryState,
+  QuerySubState,
+  RequestStatusFlags,
+  RootState as _RootState,
+} from './apiState'
+import { QueryStatus, getRequestStatusFlags } from './apiState'
+import { getMutationCacheKey } from './buildSlice'
+import type { createSelector as _createSelector } from './rtkImports'
+import { createNextState } from './rtkImports'
+import {
+  type AllQueryKeys,
+  getNextPageParam,
+  getPreviousPageParam,
+} from './buildThunks'
+
+export type SkipToken = typeof skipToken
+/**
+ * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`
+ * instead of the query argument to get the same effect as if setting
+ * `skip: true` in the query options.
+ *
+ * Useful for scenarios where a query should be skipped when `arg` is `undefined`
+ * and TypeScript complains about it because `arg` is not allowed to be passed
+ * in as `undefined`, such as
+ *
+ * ```ts
+ * // codeblock-meta title="will error if the query argument is not allowed to be undefined" no-transpile
+ * useSomeQuery(arg, { skip: !!arg })
+ * ```
+ *
+ * ```ts
+ * // codeblock-meta title="using skipToken instead" no-transpile
+ * useSomeQuery(arg ?? skipToken)
+ * ```
+ *
+ * If passed directly into a query or mutation selector, that selector will always
+ * return an uninitialized state.
+ */
+export const skipToken = /* @__PURE__ */ Symbol.for('RTKQ/skipToken')
+
+export type BuildSelectorsApiEndpointQuery<
+  Definition extends QueryDefinition<any, any, any, any, any>,
+  Definitions extends EndpointDefinitions,
+> = {
+  select: QueryResultSelectorFactory<
+    Definition,
+    _RootState<
+      Definitions,
+      TagTypesFrom<Definition>,
+      ReducerPathFrom<Definition>
+    >
+  >
+}
+
+export type BuildSelectorsApiEndpointInfiniteQuery<
+  Definition extends InfiniteQueryDefinition<any, any, any, any, any>,
+  Definitions extends EndpointDefinitions,
+> = {
+  select: InfiniteQueryResultSelectorFactory<
+    Definition,
+    _RootState<
+      Definitions,
+      TagTypesFrom<Definition>,
+      ReducerPathFrom<Definition>
+    >
+  >
+}
+
+export type BuildSelectorsApiEndpointMutation<
+  Definition extends MutationDefinition<any, any, any, any, any>,
+  Definitions extends EndpointDefinitions,
+> = {
+  select: MutationResultSelectorFactory<
+    Definition,
+    _RootState<
+      Definitions,
+      TagTypesFrom<Definition>,
+      ReducerPathFrom<Definition>
+    >
+  >
+}
+
+type QueryResultSelectorFactory<
+  Definition extends QueryDefinition<any, any, any, any>,
+  RootState,
+> = (
+  queryArg: QueryArgFrom<Definition> | SkipToken,
+) => (state: RootState) => QueryResultSelectorResult<Definition>
+
+export type QueryResultSelectorResult<
+  Definition extends QueryDefinition<any, any, any, any>,
+> = QuerySubState<Definition> & RequestStatusFlags
+
+type InfiniteQueryResultSelectorFactory<
+  Definition extends InfiniteQueryDefinition<any, any, any, any, any>,
+  RootState,
+> = (
+  queryArg: InfiniteQueryArgFrom<Definition> | SkipToken,
+) => (state: RootState) => InfiniteQueryResultSelectorResult<Definition>
+
+export type InfiniteQueryResultFlags = {
+  hasNextPage: boolean
+  hasPreviousPage: boolean
+  isFetchingNextPage: boolean
+  isFetchingPreviousPage: boolean
+  isFetchNextPageError: boolean
+  isFetchPreviousPageError: boolean
+}
+
+export type InfiniteQueryResultSelectorResult<
+  Definition extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = InfiniteQuerySubState<Definition> &
+  RequestStatusFlags &
+  InfiniteQueryResultFlags
+
+type MutationResultSelectorFactory<
+  Definition extends MutationDefinition<any, any, any, any>,
+  RootState,
+> = (
+  requestId:
+    | string
+    | { requestId: string | undefined; fixedCacheKey: string | undefined }
+    | SkipToken,
+) => (state: RootState) => MutationResultSelectorResult<Definition>
+
+export type MutationResultSelectorResult<
+  Definition extends MutationDefinition<any, any, any, any>,
+> = MutationSubState<Definition> & RequestStatusFlags
+
+const initialSubState: QuerySubState<any> = {
+  status: QueryStatus.uninitialized as const,
+}
+
+// abuse immer to freeze default states
+const defaultQuerySubState = /* @__PURE__ */ createNextState(
+  initialSubState,
+  () => {},
+)
+const defaultMutationSubState = /* @__PURE__ */ createNextState(
+  initialSubState as MutationSubState<any>,
+  () => {},
+)
+
+export type AllSelectors = ReturnType<typeof buildSelectors>
+
+export function buildSelectors<
+  Definitions extends EndpointDefinitions,
+  ReducerPath extends string,
+>({
+  serializeQueryArgs,
+  reducerPath,
+  createSelector,
+}: {
+  serializeQueryArgs: InternalSerializeQueryArgs
+  reducerPath: ReducerPath
+  createSelector: typeof _createSelector
+}) {
+  type RootState = _RootState<Definitions, string, string>
+
+  const selectSkippedQuery = (state: RootState) => defaultQuerySubState
+  const selectSkippedMutation = (state: RootState) => defaultMutationSubState
+
+  return {
+    buildQuerySelector,
+    buildInfiniteQuerySelector,
+    buildMutationSelector,
+    selectInvalidatedBy,
+    selectCachedArgsForQuery,
+    selectApiState,
+    selectQueries,
+    selectMutations,
+    selectQueryEntry,
+    selectConfig,
+  }
+
+  function withRequestFlags<T extends { status: QueryStatus }>(
+    substate: T,
+  ): T & RequestStatusFlags {
+    return { ...substate, ...getRequestStatusFlags(substate.status) }
+  }
+
+  function selectApiState(rootState: RootState) {
+    const state = rootState[reducerPath]
+    if (process.env.NODE_ENV !== 'production') {
+      if (!state) {
+        if ((selectApiState as any).triggered) return state
+        ;(selectApiState as any).triggered = true
+        console.error(
+          `Error: No data found at \`state.${reducerPath}\`. Did you forget to add the reducer to the store?`,
+        )
+      }
+    }
+    return state
+  }
+
+  function selectQueries(rootState: RootState) {
+    return selectApiState(rootState)?.queries
+  }
+
+  function selectQueryEntry(rootState: RootState, cacheKey: QueryCacheKey) {
+    return selectQueries(rootState)?.[cacheKey]
+  }
+
+  function selectMutations(rootState: RootState) {
+    return selectApiState(rootState)?.mutations
+  }
+
+  function selectConfig(rootState: RootState) {
+    return selectApiState(rootState)?.config
+  }
+
+  function buildAnyQuerySelector(
+    endpointName: string,
+    endpointDefinition: EndpointDefinition<any, any, any, any>,
+    combiner: <T extends { status: QueryStatus }>(
+      substate: T,
+    ) => T & RequestStatusFlags,
+  ) {
+    return (queryArgs: any) => {
+      // Avoid calling serializeQueryArgs if the arg is skipToken
+      if (queryArgs === skipToken) {
+        return createSelector(selectSkippedQuery, combiner)
+      }
+
+      const serializedArgs = serializeQueryArgs({
+        queryArgs,
+        endpointDefinition,
+        endpointName,
+      })
+      const selectQuerySubstate = (state: RootState) =>
+        selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState
+
+      return createSelector(selectQuerySubstate, combiner)
+    }
+  }
+
+  function buildQuerySelector(
+    endpointName: string,
+    endpointDefinition: QueryDefinition<any, any, any, any>,
+  ) {
+    return buildAnyQuerySelector(
+      endpointName,
+      endpointDefinition,
+      withRequestFlags,
+    ) as QueryResultSelectorFactory<any, RootState>
+  }
+
+  function buildInfiniteQuerySelector(
+    endpointName: string,
+    endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>,
+  ) {
+    const { infiniteQueryOptions } = endpointDefinition
+
+    function withInfiniteQueryResultFlags<T extends { status: QueryStatus }>(
+      substate: T,
+    ): T & RequestStatusFlags & InfiniteQueryResultFlags {
+      const stateWithRequestFlags = {
+        ...(substate as InfiniteQuerySubState<any>),
+        ...getRequestStatusFlags(substate.status),
+      }
+
+      const { isLoading, isError, direction } = stateWithRequestFlags
+      const isForward = direction === 'forward'
+      const isBackward = direction === 'backward'
+
+      return {
+        ...stateWithRequestFlags,
+        hasNextPage: getHasNextPage(
+          infiniteQueryOptions,
+          stateWithRequestFlags.data,
+          stateWithRequestFlags.originalArgs,
+        ),
+        hasPreviousPage: getHasPreviousPage(
+          infiniteQueryOptions,
+          stateWithRequestFlags.data,
+          stateWithRequestFlags.originalArgs,
+        ),
+        isFetchingNextPage: isLoading && isForward,
+        isFetchingPreviousPage: isLoading && isBackward,
+        isFetchNextPageError: isError && isForward,
+        isFetchPreviousPageError: isError && isBackward,
+      }
+    }
+
+    return buildAnyQuerySelector(
+      endpointName,
+      endpointDefinition,
+      withInfiniteQueryResultFlags,
+    ) as unknown as InfiniteQueryResultSelectorFactory<any, RootState>
+  }
+
+  function buildMutationSelector() {
+    return ((id) => {
+      let mutationId: string | typeof skipToken
+      if (typeof id === 'object') {
+        mutationId = getMutationCacheKey(id) ?? skipToken
+      } else {
+        mutationId = id
+      }
+      const selectMutationSubstate = (state: RootState) =>
+        selectApiState(state)?.mutations?.[mutationId as string] ??
+        defaultMutationSubState
+      const finalSelectMutationSubstate =
+        mutationId === skipToken
+          ? selectSkippedMutation
+          : selectMutationSubstate
+
+      return createSelector(finalSelectMutationSubstate, withRequestFlags)
+    }) as MutationResultSelectorFactory<any, RootState>
+  }
+
+  function selectInvalidatedBy(
+    state: RootState,
+    tags: ReadonlyArray<TagDescription<string> | null | undefined>,
+  ): Array<{
+    endpointName: string
+    originalArgs: any
+    queryCacheKey: QueryCacheKey
+  }> {
+    const apiState = state[reducerPath]
+    const toInvalidate = new Set<QueryCacheKey>()
+    for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {
+      const provided = apiState.provided.tags[tag.type]
+      if (!provided) {
+        continue
+      }
+
+      let invalidateSubscriptions =
+        (tag.id !== undefined
+          ? // id given: invalidate all queries that provide this type & id
+            provided[tag.id]
+          : // no id: invalidate all queries that provide this type
+            flatten(Object.values(provided))) ?? []
+
+      for (const invalidate of invalidateSubscriptions) {
+        toInvalidate.add(invalidate)
+      }
+    }
+
+    return flatten(
+      Array.from(toInvalidate.values()).map((queryCacheKey) => {
+        const querySubState = apiState.queries[queryCacheKey]
+        return querySubState
+          ? [
+              {
+                queryCacheKey,
+                endpointName: querySubState.endpointName!,
+                originalArgs: querySubState.originalArgs,
+              },
+            ]
+          : []
+      }),
+    )
+  }
+
+  function selectCachedArgsForQuery<
+    QueryName extends AllQueryKeys<Definitions>,
+  >(
+    state: RootState,
+    queryName: QueryName,
+  ): Array<QueryArgFromAnyQuery<Definitions[QueryName]>> {
+    return Object.values(selectQueries(state) as QueryState<any>)
+      .filter(
+        (
+          entry,
+        ): entry is Exclude<
+          QuerySubState<Definitions[QueryName]>,
+          { status: QueryStatus.uninitialized }
+        > =>
+          entry?.endpointName === queryName &&
+          entry.status !== QueryStatus.uninitialized,
+      )
+      .map((entry) => entry.originalArgs)
+  }
+
+  function getHasNextPage(
+    options: InfiniteQueryConfigOptions<any, any, any>,
+    data?: InfiniteData<unknown, unknown>,
+    queryArg?: unknown,
+  ): boolean {
+    if (!data) return false
+    return getNextPageParam(options, data, queryArg) != null
+  }
+
+  function getHasPreviousPage(
+    options: InfiniteQueryConfigOptions<any, any, any>,
+    data?: InfiniteData<unknown, unknown>,
+    queryArg?: unknown,
+  ): boolean {
+    if (!data || !options.getPreviousPageParam) return false
+    return getPreviousPageParam(options, data, queryArg) != null
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/buildSlice.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildSlice.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildSlice.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,726 @@
+import type { PayloadAction } from '@reduxjs/toolkit'
+import {
+  combineReducers,
+  createAction,
+  createSlice,
+  isAnyOf,
+  isFulfilled,
+  isRejectedWithValue,
+  createNextState,
+  prepareAutoBatched,
+  SHOULD_AUTOBATCH,
+  nanoid,
+} from './rtkImports'
+import type {
+  QuerySubstateIdentifier,
+  QuerySubState,
+  MutationSubstateIdentifier,
+  MutationSubState,
+  MutationState,
+  QueryState,
+  InvalidationState,
+  Subscribers,
+  QueryCacheKey,
+  SubscriptionState,
+  ConfigState,
+  InfiniteQuerySubState,
+  InfiniteQueryDirection,
+} from './apiState'
+import { QueryStatus } from './apiState'
+import type {
+  AllQueryKeys,
+  QueryArgFromAnyQueryDefinition,
+  DataFromAnyQueryDefinition,
+  InfiniteQueryThunk,
+  MutationThunk,
+  QueryThunk,
+  QueryThunkArg,
+} from './buildThunks'
+import { calculateProvidedByThunk } from './buildThunks'
+import {
+  isInfiniteQueryDefinition,
+  type AssertTagTypes,
+  type EndpointDefinitions,
+  type FullTagDescription,
+  type QueryDefinition,
+} from '../endpointDefinitions'
+import type { Patch } from 'immer'
+import { isDraft } from 'immer'
+import { applyPatches, original } from 'immer'
+import { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners'
+import {
+  isDocumentVisible,
+  isOnline,
+  copyWithStructuralSharing,
+} from '../utils'
+import type { ApiContext } from '../apiTypes'
+import { isUpsertQuery } from './buildInitiate'
+import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'
+import type { UnwrapPromise } from '../tsHelpers'
+
+/**
+ * A typesafe single entry to be upserted into the cache
+ */
+export type NormalizedQueryUpsertEntry<
+  Definitions extends EndpointDefinitions,
+  EndpointName extends AllQueryKeys<Definitions>,
+> = {
+  endpointName: EndpointName
+  arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>
+  value: DataFromAnyQueryDefinition<Definitions, EndpointName>
+}
+
+/**
+ * The internal version that is not typesafe since we can't carry the generics through `createSlice`
+ */
+type NormalizedQueryUpsertEntryPayload = {
+  endpointName: string
+  arg: unknown
+  value: unknown
+}
+
+export type ProcessedQueryUpsertEntry = {
+  queryDescription: QueryThunkArg
+  value: unknown
+}
+
+/**
+ * A typesafe representation of a util action creator that accepts cache entry descriptions to upsert
+ */
+export type UpsertEntries<Definitions extends EndpointDefinitions> = (<
+  EndpointNames extends Array<AllQueryKeys<Definitions>>,
+>(
+  entries: [
+    ...{
+      [I in keyof EndpointNames]: NormalizedQueryUpsertEntry<
+        Definitions,
+        EndpointNames[I]
+      >
+    },
+  ],
+) => PayloadAction<NormalizedQueryUpsertEntryPayload[]>) & {
+  match: (
+    action: unknown,
+  ) => action is PayloadAction<NormalizedQueryUpsertEntryPayload[]>
+}
+
+function updateQuerySubstateIfExists(
+  state: QueryState<any>,
+  queryCacheKey: QueryCacheKey,
+  update: (substate: QuerySubState<any> | InfiniteQuerySubState<any>) => void,
+) {
+  const substate = state[queryCacheKey]
+  if (substate) {
+    update(substate)
+  }
+}
+
+export function getMutationCacheKey(
+  id:
+    | MutationSubstateIdentifier
+    | { requestId: string; arg: { fixedCacheKey?: string | undefined } },
+): string
+export function getMutationCacheKey(id: {
+  fixedCacheKey?: string
+  requestId?: string
+}): string | undefined
+
+export function getMutationCacheKey(
+  id:
+    | { fixedCacheKey?: string; requestId?: string }
+    | MutationSubstateIdentifier
+    | { requestId: string; arg: { fixedCacheKey?: string | undefined } },
+): string | undefined {
+  return ('arg' in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId
+}
+
+function updateMutationSubstateIfExists(
+  state: MutationState<any>,
+  id:
+    | MutationSubstateIdentifier
+    | { requestId: string; arg: { fixedCacheKey?: string | undefined } },
+  update: (substate: MutationSubState<any>) => void,
+) {
+  const substate = state[getMutationCacheKey(id)]
+  if (substate) {
+    update(substate)
+  }
+}
+
+const initialState = {} as any
+
+export function buildSlice({
+  reducerPath,
+  queryThunk,
+  mutationThunk,
+  serializeQueryArgs,
+  context: {
+    endpointDefinitions: definitions,
+    apiUid,
+    extractRehydrationInfo,
+    hasRehydrationInfo,
+  },
+  assertTagType,
+  config,
+}: {
+  reducerPath: string
+  queryThunk: QueryThunk
+  infiniteQueryThunk: InfiniteQueryThunk<any>
+  mutationThunk: MutationThunk
+  serializeQueryArgs: InternalSerializeQueryArgs
+  context: ApiContext<EndpointDefinitions>
+  assertTagType: AssertTagTypes
+  config: Omit<
+    ConfigState<string>,
+    'online' | 'focused' | 'middlewareRegistered'
+  >
+}) {
+  const resetApiState = createAction(`${reducerPath}/resetApiState`)
+
+  function writePendingCacheEntry(
+    draft: QueryState<any>,
+    arg: QueryThunkArg,
+    upserting: boolean,
+    meta: {
+      arg: QueryThunkArg
+      requestId: string
+      // requestStatus: 'pending'
+    } & { startedTimeStamp: number },
+  ) {
+    draft[arg.queryCacheKey] ??= {
+      status: QueryStatus.uninitialized,
+      endpointName: arg.endpointName,
+    }
+
+    updateQuerySubstateIfExists(draft, arg.queryCacheKey, (substate) => {
+      substate.status = QueryStatus.pending
+
+      substate.requestId =
+        upserting && substate.requestId
+          ? // for `upsertQuery` **updates**, keep the current `requestId`
+            substate.requestId
+          : // for normal queries or `upsertQuery` **inserts** always update the `requestId`
+            meta.requestId
+      if (arg.originalArgs !== undefined) {
+        substate.originalArgs = arg.originalArgs
+      }
+      substate.startedTimeStamp = meta.startedTimeStamp
+
+      const endpointDefinition = definitions[meta.arg.endpointName]
+
+      if (isInfiniteQueryDefinition(endpointDefinition) && 'direction' in arg) {
+        ;(substate as InfiniteQuerySubState<any>).direction =
+          arg.direction as InfiniteQueryDirection
+      }
+    })
+  }
+
+  function writeFulfilledCacheEntry(
+    draft: QueryState<any>,
+    meta: { arg: QueryThunkArg; requestId: string } & {
+      fulfilledTimeStamp: number
+      baseQueryMeta: unknown
+    },
+    payload: unknown,
+    upserting: boolean,
+  ) {
+    updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, (substate) => {
+      if (substate.requestId !== meta.requestId && !upserting) return
+      const { merge } = definitions[meta.arg.endpointName] as QueryDefinition<
+        any,
+        any,
+        any,
+        any
+      >
+      substate.status = QueryStatus.fulfilled
+
+      if (merge) {
+        if (substate.data !== undefined) {
+          const { fulfilledTimeStamp, arg, baseQueryMeta, requestId } = meta
+          // There's existing cache data. Let the user merge it in themselves.
+          // We're already inside an Immer-powered reducer, and the user could just mutate `substate.data`
+          // themselves inside of `merge()`. But, they might also want to return a new value.
+          // Try to let Immer figure that part out, save the result, and assign it to `substate.data`.
+          let newData = createNextState(substate.data, (draftSubstateData) => {
+            // As usual with Immer, you can mutate _or_ return inside here, but not both
+            return merge(draftSubstateData, payload, {
+              arg: arg.originalArgs,
+              baseQueryMeta,
+              fulfilledTimeStamp,
+              requestId,
+            })
+          })
+          substate.data = newData
+        } else {
+          // Presumably a fresh request. Just cache the response data.
+          substate.data = payload
+        }
+      } else {
+        // Assign or safely update the cache data.
+        substate.data =
+          (definitions[meta.arg.endpointName].structuralSharing ?? true)
+            ? copyWithStructuralSharing(
+                isDraft(substate.data)
+                  ? original(substate.data)
+                  : substate.data,
+                payload,
+              )
+            : payload
+      }
+
+      delete substate.error
+      substate.fulfilledTimeStamp = meta.fulfilledTimeStamp
+    })
+  }
+
+  const querySlice = createSlice({
+    name: `${reducerPath}/queries`,
+    initialState: initialState as QueryState<any>,
+    reducers: {
+      removeQueryResult: {
+        reducer(
+          draft,
+          {
+            payload: { queryCacheKey },
+          }: PayloadAction<QuerySubstateIdentifier>,
+        ) {
+          delete draft[queryCacheKey]
+        },
+        prepare: prepareAutoBatched<QuerySubstateIdentifier>(),
+      },
+      cacheEntriesUpserted: {
+        reducer(
+          draft,
+          action: PayloadAction<
+            ProcessedQueryUpsertEntry[],
+            string,
+            { RTK_autoBatch: boolean; requestId: string; timestamp: number }
+          >,
+        ) {
+          for (const entry of action.payload) {
+            const { queryDescription: arg, value } = entry
+            writePendingCacheEntry(draft, arg, true, {
+              arg,
+              requestId: action.meta.requestId,
+              startedTimeStamp: action.meta.timestamp,
+            })
+
+            writeFulfilledCacheEntry(
+              draft,
+              {
+                arg,
+                requestId: action.meta.requestId,
+                fulfilledTimeStamp: action.meta.timestamp,
+                baseQueryMeta: {},
+              },
+              value,
+              // We know we're upserting here
+              true,
+            )
+          }
+        },
+        prepare: (payload: NormalizedQueryUpsertEntryPayload[]) => {
+          const queryDescriptions: ProcessedQueryUpsertEntry[] = payload.map(
+            (entry) => {
+              const { endpointName, arg, value } = entry
+              const endpointDefinition = definitions[endpointName]
+              const queryDescription: QueryThunkArg = {
+                type: 'query',
+                endpointName: endpointName,
+                originalArgs: entry.arg,
+                queryCacheKey: serializeQueryArgs({
+                  queryArgs: arg,
+                  endpointDefinition,
+                  endpointName,
+                }),
+              }
+              return { queryDescription, value }
+            },
+          )
+
+          const result = {
+            payload: queryDescriptions,
+            meta: {
+              [SHOULD_AUTOBATCH]: true,
+              requestId: nanoid(),
+              timestamp: Date.now(),
+            },
+          }
+          return result
+        },
+      },
+      queryResultPatched: {
+        reducer(
+          draft,
+          {
+            payload: { queryCacheKey, patches },
+          }: PayloadAction<
+            QuerySubstateIdentifier & { patches: readonly Patch[] }
+          >,
+        ) {
+          updateQuerySubstateIfExists(draft, queryCacheKey, (substate) => {
+            substate.data = applyPatches(substate.data as any, patches.concat())
+          })
+        },
+        prepare: prepareAutoBatched<
+          QuerySubstateIdentifier & { patches: readonly Patch[] }
+        >(),
+      },
+    },
+    extraReducers(builder) {
+      builder
+        .addCase(queryThunk.pending, (draft, { meta, meta: { arg } }) => {
+          const upserting = isUpsertQuery(arg)
+          writePendingCacheEntry(draft, arg, upserting, meta)
+        })
+        .addCase(queryThunk.fulfilled, (draft, { meta, payload }) => {
+          const upserting = isUpsertQuery(meta.arg)
+          writeFulfilledCacheEntry(draft, meta, payload, upserting)
+        })
+        .addCase(
+          queryThunk.rejected,
+          (draft, { meta: { condition, arg, requestId }, error, payload }) => {
+            updateQuerySubstateIfExists(
+              draft,
+              arg.queryCacheKey,
+              (substate) => {
+                if (condition) {
+                  // request was aborted due to condition (another query already running)
+                } else {
+                  // request failed
+                  if (substate.requestId !== requestId) return
+                  substate.status = QueryStatus.rejected
+                  substate.error = (payload ?? error) as any
+                }
+              },
+            )
+          },
+        )
+        .addMatcher(hasRehydrationInfo, (draft, action) => {
+          const { queries } = extractRehydrationInfo(action)!
+          for (const [key, entry] of Object.entries(queries)) {
+            if (
+              // do not rehydrate entries that were currently in flight.
+              entry?.status === QueryStatus.fulfilled ||
+              entry?.status === QueryStatus.rejected
+            ) {
+              draft[key] = entry
+            }
+          }
+        })
+    },
+  })
+  const mutationSlice = createSlice({
+    name: `${reducerPath}/mutations`,
+    initialState: initialState as MutationState<any>,
+    reducers: {
+      removeMutationResult: {
+        reducer(draft, { payload }: PayloadAction<MutationSubstateIdentifier>) {
+          const cacheKey = getMutationCacheKey(payload)
+          if (cacheKey in draft) {
+            delete draft[cacheKey]
+          }
+        },
+        prepare: prepareAutoBatched<MutationSubstateIdentifier>(),
+      },
+    },
+    extraReducers(builder) {
+      builder
+        .addCase(
+          mutationThunk.pending,
+          (draft, { meta, meta: { requestId, arg, startedTimeStamp } }) => {
+            if (!arg.track) return
+
+            draft[getMutationCacheKey(meta)] = {
+              requestId,
+              status: QueryStatus.pending,
+              endpointName: arg.endpointName,
+              startedTimeStamp,
+            }
+          },
+        )
+        .addCase(mutationThunk.fulfilled, (draft, { payload, meta }) => {
+          if (!meta.arg.track) return
+
+          updateMutationSubstateIfExists(draft, meta, (substate) => {
+            if (substate.requestId !== meta.requestId) return
+            substate.status = QueryStatus.fulfilled
+            substate.data = payload
+            substate.fulfilledTimeStamp = meta.fulfilledTimeStamp
+          })
+        })
+        .addCase(mutationThunk.rejected, (draft, { payload, error, meta }) => {
+          if (!meta.arg.track) return
+
+          updateMutationSubstateIfExists(draft, meta, (substate) => {
+            if (substate.requestId !== meta.requestId) return
+
+            substate.status = QueryStatus.rejected
+            substate.error = (payload ?? error) as any
+          })
+        })
+        .addMatcher(hasRehydrationInfo, (draft, action) => {
+          const { mutations } = extractRehydrationInfo(action)!
+          for (const [key, entry] of Object.entries(mutations)) {
+            if (
+              // do not rehydrate entries that were currently in flight.
+              (entry?.status === QueryStatus.fulfilled ||
+                entry?.status === QueryStatus.rejected) &&
+              // only rehydrate endpoints that were persisted using a `fixedCacheKey`
+              key !== entry?.requestId
+            ) {
+              draft[key] = entry
+            }
+          }
+        })
+    },
+  })
+
+  type CalculateProvidedByAction = UnwrapPromise<
+    | ReturnType<ReturnType<QueryThunk>>
+    | ReturnType<ReturnType<InfiniteQueryThunk<any>>>
+  >
+
+  const initialInvalidationState: InvalidationState<string> = {
+    tags: {},
+    keys: {},
+  }
+
+  const invalidationSlice = createSlice({
+    name: `${reducerPath}/invalidation`,
+    initialState: initialInvalidationState,
+    reducers: {
+      updateProvidedBy: {
+        reducer(
+          draft,
+          action: PayloadAction<
+            Array<{
+              queryCacheKey: QueryCacheKey
+              providedTags: readonly FullTagDescription<string>[]
+            }>
+          >,
+        ) {
+          for (const { queryCacheKey, providedTags } of action.payload) {
+            removeCacheKeyFromTags(draft, queryCacheKey)
+
+            for (const { type, id } of providedTags) {
+              const subscribedQueries = ((draft.tags[type] ??= {})[
+                id || '__internal_without_id'
+              ] ??= [])
+              const alreadySubscribed =
+                subscribedQueries.includes(queryCacheKey)
+              if (!alreadySubscribed) {
+                subscribedQueries.push(queryCacheKey)
+              }
+            }
+
+            // Remove readonly from the providedTags array
+            draft.keys[queryCacheKey] =
+              providedTags as FullTagDescription<string>[]
+          }
+        },
+        prepare:
+          prepareAutoBatched<
+            Array<{
+              queryCacheKey: QueryCacheKey
+              providedTags: readonly FullTagDescription<string>[]
+            }>
+          >(),
+      },
+    },
+    extraReducers(builder) {
+      builder
+        .addCase(
+          querySlice.actions.removeQueryResult,
+          (draft, { payload: { queryCacheKey } }) => {
+            removeCacheKeyFromTags(draft, queryCacheKey)
+          },
+        )
+        .addMatcher(hasRehydrationInfo, (draft, action) => {
+          const { provided } = extractRehydrationInfo(action)!
+          for (const [type, incomingTags] of Object.entries(provided)) {
+            for (const [id, cacheKeys] of Object.entries(incomingTags)) {
+              const subscribedQueries = ((draft.tags[type] ??= {})[
+                id || '__internal_without_id'
+              ] ??= [])
+              for (const queryCacheKey of cacheKeys) {
+                const alreadySubscribed =
+                  subscribedQueries.includes(queryCacheKey)
+                if (!alreadySubscribed) {
+                  subscribedQueries.push(queryCacheKey)
+                }
+              }
+            }
+          }
+        })
+        .addMatcher(
+          isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)),
+          (draft, action) => {
+            writeProvidedTagsForQueries(draft, [action])
+          },
+        )
+        .addMatcher(
+          querySlice.actions.cacheEntriesUpserted.match,
+          (draft, action) => {
+            const mockActions: CalculateProvidedByAction[] = action.payload.map(
+              ({ queryDescription, value }) => {
+                return {
+                  type: 'UNKNOWN',
+                  payload: value,
+                  meta: {
+                    requestStatus: 'fulfilled',
+                    requestId: 'UNKNOWN',
+                    arg: queryDescription,
+                  },
+                }
+              },
+            )
+            writeProvidedTagsForQueries(draft, mockActions)
+          },
+        )
+    },
+  })
+
+  function removeCacheKeyFromTags(
+    draft: InvalidationState<any>,
+    queryCacheKey: QueryCacheKey,
+  ) {
+    const existingTags = draft.keys[queryCacheKey] ?? []
+
+    // Delete this cache key from any existing tags that may have provided it
+    for (const tag of existingTags) {
+      const tagType = tag.type
+      const tagId = tag.id ?? '__internal_without_id'
+      const tagSubscriptions = draft.tags[tagType]?.[tagId]
+
+      if (tagSubscriptions) {
+        draft.tags[tagType][tagId] = tagSubscriptions.filter(
+          (qc) => qc !== queryCacheKey,
+        )
+      }
+    }
+
+    delete draft.keys[queryCacheKey]
+  }
+
+  function writeProvidedTagsForQueries(
+    draft: InvalidationState<string>,
+    actions: CalculateProvidedByAction[],
+  ) {
+    const providedByEntries = actions.map((action) => {
+      const providedTags = calculateProvidedByThunk(
+        action,
+        'providesTags',
+        definitions,
+        assertTagType,
+      )
+      const { queryCacheKey } = action.meta.arg
+      return { queryCacheKey, providedTags }
+    })
+
+    invalidationSlice.caseReducers.updateProvidedBy(
+      draft,
+      invalidationSlice.actions.updateProvidedBy(providedByEntries),
+    )
+  }
+
+  // Dummy slice to generate actions
+  const subscriptionSlice = createSlice({
+    name: `${reducerPath}/subscriptions`,
+    initialState: initialState as SubscriptionState,
+    reducers: {
+      updateSubscriptionOptions(
+        d,
+        a: PayloadAction<
+          {
+            endpointName: string
+            requestId: string
+            options: Subscribers[number]
+          } & QuerySubstateIdentifier
+        >,
+      ) {
+        // Dummy
+      },
+      unsubscribeQueryResult(
+        d,
+        a: PayloadAction<{ requestId: string } & QuerySubstateIdentifier>,
+      ) {
+        // Dummy
+      },
+      internal_getRTKQSubscriptions() {},
+    },
+  })
+
+  const internalSubscriptionsSlice = createSlice({
+    name: `${reducerPath}/internalSubscriptions`,
+    initialState: initialState as SubscriptionState,
+    reducers: {
+      subscriptionsUpdated: {
+        reducer(state, action: PayloadAction<Patch[]>) {
+          return applyPatches(state, action.payload)
+        },
+        prepare: prepareAutoBatched<Patch[]>(),
+      },
+    },
+  })
+
+  const configSlice = createSlice({
+    name: `${reducerPath}/config`,
+    initialState: {
+      online: isOnline(),
+      focused: isDocumentVisible(),
+      middlewareRegistered: false,
+      ...config,
+    } as ConfigState<string>,
+    reducers: {
+      middlewareRegistered(state, { payload }: PayloadAction<string>) {
+        state.middlewareRegistered =
+          state.middlewareRegistered === 'conflict' || apiUid !== payload
+            ? 'conflict'
+            : true
+      },
+    },
+    extraReducers: (builder) => {
+      builder
+        .addCase(onOnline, (state) => {
+          state.online = true
+        })
+        .addCase(onOffline, (state) => {
+          state.online = false
+        })
+        .addCase(onFocus, (state) => {
+          state.focused = true
+        })
+        .addCase(onFocusLost, (state) => {
+          state.focused = false
+        })
+        // update the state to be a new object to be picked up as a "state change"
+        // by redux-persist's `autoMergeLevel2`
+        .addMatcher(hasRehydrationInfo, (draft) => ({ ...draft }))
+    },
+  })
+
+  const combinedReducer = combineReducers({
+    queries: querySlice.reducer,
+    mutations: mutationSlice.reducer,
+    provided: invalidationSlice.reducer,
+    subscriptions: internalSubscriptionsSlice.reducer,
+    config: configSlice.reducer,
+  })
+
+  const reducer: typeof combinedReducer = (state, action) =>
+    combinedReducer(resetApiState.match(action) ? undefined : state, action)
+
+  const actions = {
+    ...configSlice.actions,
+    ...querySlice.actions,
+    ...subscriptionSlice.actions,
+    ...internalSubscriptionsSlice.actions,
+    ...mutationSlice.actions,
+    ...invalidationSlice.actions,
+    resetApiState,
+  }
+
+  return { reducer, actions }
+}
+export type SliceActions = ReturnType<typeof buildSlice>['actions']
Index: node_modules/@reduxjs/toolkit/src/query/core/buildThunks.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/buildThunks.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/buildThunks.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1092 @@
+import type {
+  AsyncThunk,
+  AsyncThunkPayloadCreator,
+  Draft,
+  ThunkAction,
+  ThunkDispatch,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import type { Patch } from 'immer'
+import { isDraftable, produceWithPatches } from 'immer'
+import type { Api, ApiContext } from '../apiTypes'
+import type {
+  BaseQueryError,
+  BaseQueryFn,
+  QueryReturnValue,
+} from '../baseQueryTypes'
+import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'
+import type {
+  AssertTagTypes,
+  EndpointDefinition,
+  EndpointDefinitions,
+  InfiniteQueryArgFrom,
+  InfiniteQueryCombinedArg,
+  InfiniteQueryDefinition,
+  MutationDefinition,
+  PageParamFrom,
+  QueryArgFrom,
+  QueryDefinition,
+  ResultDescription,
+  ResultTypeFrom,
+  SchemaFailureConverter,
+  SchemaFailureHandler,
+  SchemaFailureInfo,
+} from '../endpointDefinitions'
+import {
+  calculateProvidedBy,
+  isInfiniteQueryDefinition,
+  isQueryDefinition,
+} from '../endpointDefinitions'
+import { HandledError } from '../HandledError'
+import type { UnwrapPromise } from '../tsHelpers'
+import type {
+  RootState,
+  QueryKeys,
+  QuerySubstateIdentifier,
+  InfiniteData,
+  InfiniteQueryConfigOptions,
+  QueryCacheKey,
+  InfiniteQueryDirection,
+  InfiniteQueryKeys,
+} from './apiState'
+import { QueryStatus } from './apiState'
+import type {
+  InfiniteQueryActionCreatorResult,
+  QueryActionCreatorResult,
+  StartInfiniteQueryActionCreatorOptions,
+  StartQueryActionCreatorOptions,
+} from './buildInitiate'
+import { forceQueryFnSymbol, isUpsertQuery } from './buildInitiate'
+import type { AllSelectors } from './buildSelectors'
+import type { ApiEndpointQuery, PrefetchOptions } from './module'
+import {
+  createAsyncThunk,
+  isAllOf,
+  isFulfilled,
+  isPending,
+  isRejected,
+  isRejectedWithValue,
+  SHOULD_AUTOBATCH,
+} from './rtkImports'
+import { parseWithSchema, NamedSchemaError } from '../standardSchema'
+
+export type BuildThunksApiEndpointQuery<
+  Definition extends QueryDefinition<any, any, any, any, any>,
+> = Matchers<QueryThunk, Definition>
+
+export type BuildThunksApiEndpointInfiniteQuery<
+  Definition extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = Matchers<InfiniteQueryThunk<any>, Definition>
+
+export type BuildThunksApiEndpointMutation<
+  Definition extends MutationDefinition<any, any, any, any, any>,
+> = Matchers<MutationThunk, Definition>
+
+type EndpointThunk<
+  Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>,
+  Definition extends EndpointDefinition<any, any, any, any>,
+> =
+  Definition extends EndpointDefinition<
+    infer QueryArg,
+    infer BaseQueryFn,
+    any,
+    infer ResultType
+  >
+    ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig>
+      ? AsyncThunk<
+          ResultType,
+          ATArg & { originalArgs: QueryArg },
+          ATConfig & { rejectValue: BaseQueryError<BaseQueryFn> }
+        >
+      : never
+    : Definition extends InfiniteQueryDefinition<
+          infer QueryArg,
+          infer PageParam,
+          infer BaseQueryFn,
+          any,
+          infer ResultType
+        >
+      ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig>
+        ? AsyncThunk<
+            InfiniteData<ResultType, PageParam>,
+            ATArg & { originalArgs: QueryArg },
+            ATConfig & { rejectValue: BaseQueryError<BaseQueryFn> }
+          >
+        : never
+      : never
+
+export type PendingAction<
+  Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>,
+  Definition extends EndpointDefinition<any, any, any, any>,
+> = ReturnType<EndpointThunk<Thunk, Definition>['pending']>
+
+export type FulfilledAction<
+  Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>,
+  Definition extends EndpointDefinition<any, any, any, any>,
+> = ReturnType<EndpointThunk<Thunk, Definition>['fulfilled']>
+
+export type RejectedAction<
+  Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>,
+  Definition extends EndpointDefinition<any, any, any, any>,
+> = ReturnType<EndpointThunk<Thunk, Definition>['rejected']>
+
+export type Matcher<M> = (value: any) => value is M
+
+export interface Matchers<
+  Thunk extends QueryThunk | MutationThunk | InfiniteQueryThunk<any>,
+  Definition extends EndpointDefinition<any, any, any, any>,
+> {
+  matchPending: Matcher<PendingAction<Thunk, Definition>>
+  matchFulfilled: Matcher<FulfilledAction<Thunk, Definition>>
+  matchRejected: Matcher<RejectedAction<Thunk, Definition>>
+}
+
+export type QueryThunkArg = QuerySubstateIdentifier &
+  StartQueryActionCreatorOptions & {
+    type: 'query'
+    originalArgs: unknown
+    endpointName: string
+  }
+
+export type InfiniteQueryThunkArg<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = QuerySubstateIdentifier &
+  StartInfiniteQueryActionCreatorOptions<D> & {
+    type: `query`
+    originalArgs: unknown
+    endpointName: string
+    param: unknown
+    direction?: InfiniteQueryDirection
+  }
+
+type MutationThunkArg = {
+  type: 'mutation'
+  originalArgs: unknown
+  endpointName: string
+  track?: boolean
+  fixedCacheKey?: string
+}
+
+export type ThunkResult = unknown
+
+export type ThunkApiMetaConfig = {
+  pendingMeta: { startedTimeStamp: number; [SHOULD_AUTOBATCH]: true }
+  fulfilledMeta: {
+    fulfilledTimeStamp: number
+    baseQueryMeta: unknown
+    [SHOULD_AUTOBATCH]: true
+  }
+  rejectedMeta: { baseQueryMeta: unknown; [SHOULD_AUTOBATCH]: true }
+}
+export type QueryThunk = AsyncThunk<
+  ThunkResult,
+  QueryThunkArg,
+  ThunkApiMetaConfig
+>
+export type InfiniteQueryThunk<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = AsyncThunk<ThunkResult, InfiniteQueryThunkArg<D>, ThunkApiMetaConfig>
+export type MutationThunk = AsyncThunk<
+  ThunkResult,
+  MutationThunkArg,
+  ThunkApiMetaConfig
+>
+
+function defaultTransformResponse(baseQueryReturnValue: unknown) {
+  return baseQueryReturnValue
+}
+
+export type MaybeDrafted<T> = T | Draft<T>
+export type Recipe<T> = (data: MaybeDrafted<T>) => void | MaybeDrafted<T>
+export type UpsertRecipe<T> = (
+  data: MaybeDrafted<T> | undefined,
+) => void | MaybeDrafted<T>
+
+export type PatchQueryDataThunk<
+  Definitions extends EndpointDefinitions,
+  PartialState,
+> = <EndpointName extends QueryKeys<Definitions>>(
+  endpointName: EndpointName,
+  arg: QueryArgFrom<Definitions[EndpointName]>,
+  patches: readonly Patch[],
+  updateProvided?: boolean,
+) => ThunkAction<void, PartialState, any, UnknownAction>
+
+export type AllQueryKeys<Definitions extends EndpointDefinitions> =
+  | QueryKeys<Definitions>
+  | InfiniteQueryKeys<Definitions>
+
+export type QueryArgFromAnyQueryDefinition<
+  Definitions extends EndpointDefinitions,
+  EndpointName extends AllQueryKeys<Definitions>,
+> =
+  Definitions[EndpointName] extends InfiniteQueryDefinition<
+    any,
+    any,
+    any,
+    any,
+    any
+  >
+    ? InfiniteQueryArgFrom<Definitions[EndpointName]>
+    : Definitions[EndpointName] extends QueryDefinition<any, any, any, any>
+      ? QueryArgFrom<Definitions[EndpointName]>
+      : never
+
+export type DataFromAnyQueryDefinition<
+  Definitions extends EndpointDefinitions,
+  EndpointName extends AllQueryKeys<Definitions>,
+> =
+  Definitions[EndpointName] extends InfiniteQueryDefinition<
+    any,
+    any,
+    any,
+    any,
+    any
+  >
+    ? InfiniteData<
+        ResultTypeFrom<Definitions[EndpointName]>,
+        PageParamFrom<Definitions[EndpointName]>
+      >
+    : Definitions[EndpointName] extends QueryDefinition<any, any, any, any>
+      ? ResultTypeFrom<Definitions[EndpointName]>
+      : unknown
+
+export type UpsertThunkResult<
+  Definitions extends EndpointDefinitions,
+  EndpointName extends AllQueryKeys<Definitions>,
+> =
+  Definitions[EndpointName] extends InfiniteQueryDefinition<
+    any,
+    any,
+    any,
+    any,
+    any
+  >
+    ? InfiniteQueryActionCreatorResult<Definitions[EndpointName]>
+    : Definitions[EndpointName] extends QueryDefinition<any, any, any, any>
+      ? QueryActionCreatorResult<Definitions[EndpointName]>
+      : QueryActionCreatorResult<never>
+
+export type UpdateQueryDataThunk<
+  Definitions extends EndpointDefinitions,
+  PartialState,
+> = <EndpointName extends AllQueryKeys<Definitions>>(
+  endpointName: EndpointName,
+  arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>,
+  updateRecipe: Recipe<DataFromAnyQueryDefinition<Definitions, EndpointName>>,
+  updateProvided?: boolean,
+) => ThunkAction<PatchCollection, PartialState, any, UnknownAction>
+
+export type UpsertQueryDataThunk<
+  Definitions extends EndpointDefinitions,
+  PartialState,
+> = <EndpointName extends AllQueryKeys<Definitions>>(
+  endpointName: EndpointName,
+  arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>,
+  value: DataFromAnyQueryDefinition<Definitions, EndpointName>,
+) => ThunkAction<
+  UpsertThunkResult<Definitions, EndpointName>,
+  PartialState,
+  any,
+  UnknownAction
+>
+
+/**
+ * An object returned from dispatching a `api.util.updateQueryData` call.
+ */
+export type PatchCollection = {
+  /**
+   * An `immer` Patch describing the cache update.
+   */
+  patches: Patch[]
+  /**
+   * An `immer` Patch to revert the cache update.
+   */
+  inversePatches: Patch[]
+  /**
+   * A function that will undo the cache update.
+   */
+  undo: () => void
+}
+
+type TransformCallback = (
+  baseQueryReturnValue: unknown,
+  meta: unknown,
+  arg: unknown,
+) => any
+
+export const addShouldAutoBatch = <T extends Record<string, any>>(
+  arg: T = {} as T,
+): T & { [SHOULD_AUTOBATCH]: true } => {
+  return { ...arg, [SHOULD_AUTOBATCH]: true }
+}
+
+export function buildThunks<
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string,
+  Definitions extends EndpointDefinitions,
+>({
+  reducerPath,
+  baseQuery,
+  context: { endpointDefinitions },
+  serializeQueryArgs,
+  api,
+  assertTagType,
+  selectors,
+  onSchemaFailure,
+  catchSchemaFailure: globalCatchSchemaFailure,
+  skipSchemaValidation: globalSkipSchemaValidation,
+}: {
+  baseQuery: BaseQuery
+  reducerPath: ReducerPath
+  context: ApiContext<Definitions>
+  serializeQueryArgs: InternalSerializeQueryArgs
+  api: Api<BaseQuery, Definitions, ReducerPath, any>
+  assertTagType: AssertTagTypes
+  selectors: AllSelectors
+  onSchemaFailure: SchemaFailureHandler | undefined
+  catchSchemaFailure: SchemaFailureConverter<BaseQuery> | undefined
+  skipSchemaValidation: boolean | undefined
+}) {
+  type State = RootState<any, string, ReducerPath>
+
+  const patchQueryData: PatchQueryDataThunk<EndpointDefinitions, State> =
+    (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {
+      const endpointDefinition = endpointDefinitions[endpointName]
+
+      const queryCacheKey = serializeQueryArgs({
+        queryArgs: arg,
+        endpointDefinition,
+        endpointName,
+      })
+
+      dispatch(
+        api.internalActions.queryResultPatched({ queryCacheKey, patches }),
+      )
+
+      if (!updateProvided) {
+        return
+      }
+
+      const newValue = api.endpoints[endpointName].select(arg)(
+        // Work around TS 4.1 mismatch
+        getState() as RootState<any, any, any>,
+      )
+
+      const providedTags = calculateProvidedBy(
+        endpointDefinition.providesTags,
+        newValue.data,
+        undefined,
+        arg,
+        {},
+        assertTagType,
+      )
+
+      dispatch(
+        api.internalActions.updateProvidedBy([{ queryCacheKey, providedTags }]),
+      )
+    }
+
+  function addToStart<T>(items: Array<T>, item: T, max = 0): Array<T> {
+    const newItems = [item, ...items]
+    return max && newItems.length > max ? newItems.slice(0, -1) : newItems
+  }
+
+  function addToEnd<T>(items: Array<T>, item: T, max = 0): Array<T> {
+    const newItems = [...items, item]
+    return max && newItems.length > max ? newItems.slice(1) : newItems
+  }
+
+  const updateQueryData: UpdateQueryDataThunk<EndpointDefinitions, State> =
+    (endpointName, arg, updateRecipe, updateProvided = true) =>
+    (dispatch, getState) => {
+      const endpointDefinition = api.endpoints[endpointName]
+
+      const currentState = endpointDefinition.select(arg)(
+        // Work around TS 4.1 mismatch
+        getState() as RootState<any, any, any>,
+      )
+
+      const ret: PatchCollection = {
+        patches: [],
+        inversePatches: [],
+        undo: () =>
+          dispatch(
+            api.util.patchQueryData(
+              endpointName,
+              arg,
+              ret.inversePatches,
+              updateProvided,
+            ),
+          ),
+      }
+      if (currentState.status === QueryStatus.uninitialized) {
+        return ret
+      }
+      let newValue
+      if ('data' in currentState) {
+        if (isDraftable(currentState.data)) {
+          const [value, patches, inversePatches] = produceWithPatches(
+            currentState.data,
+            updateRecipe,
+          )
+          ret.patches.push(...patches)
+          ret.inversePatches.push(...inversePatches)
+          newValue = value
+        } else {
+          newValue = updateRecipe(currentState.data)
+          ret.patches.push({ op: 'replace', path: [], value: newValue })
+          ret.inversePatches.push({
+            op: 'replace',
+            path: [],
+            value: currentState.data,
+          })
+        }
+      }
+
+      if (ret.patches.length === 0) {
+        return ret
+      }
+
+      dispatch(
+        api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided),
+      )
+
+      return ret
+    }
+
+  const upsertQueryData: UpsertQueryDataThunk<Definitions, State> =
+    (endpointName, arg, value) => (dispatch) => {
+      type EndpointName = typeof endpointName
+      const res = dispatch(
+        (
+          api.endpoints[endpointName] as ApiEndpointQuery<
+            QueryDefinition<any, any, any, any, any>,
+            Definitions
+          >
+        ).initiate(arg, {
+          subscribe: false,
+          forceRefetch: true,
+          [forceQueryFnSymbol]: () => ({ data: value }),
+        }),
+      ) as UpsertThunkResult<Definitions, EndpointName>
+
+      return res
+    }
+
+  const getTransformCallbackForEndpoint = (
+    endpointDefinition: EndpointDefinition<any, any, any, any>,
+    transformFieldName: 'transformResponse' | 'transformErrorResponse',
+  ): TransformCallback => {
+    return endpointDefinition.query && endpointDefinition[transformFieldName]
+      ? (endpointDefinition[transformFieldName]! as TransformCallback)
+      : defaultTransformResponse
+  }
+
+  // The generic async payload function for all of our thunks
+  const executeEndpoint: AsyncThunkPayloadCreator<
+    ThunkResult,
+    QueryThunkArg | MutationThunkArg | InfiniteQueryThunkArg<any>,
+    ThunkApiMetaConfig & { state: RootState<any, string, ReducerPath> }
+  > = async (
+    arg,
+    {
+      signal,
+      abort,
+      rejectWithValue,
+      fulfillWithValue,
+      dispatch,
+      getState,
+      extra,
+    },
+  ) => {
+    const endpointDefinition = endpointDefinitions[arg.endpointName]
+    const { metaSchema, skipSchemaValidation = globalSkipSchemaValidation } =
+      endpointDefinition
+
+    try {
+      let transformResponse = getTransformCallbackForEndpoint(
+        endpointDefinition,
+        'transformResponse',
+      )
+
+      const baseQueryApi = {
+        signal,
+        abort,
+        dispatch,
+        getState,
+        extra,
+        endpoint: arg.endpointName,
+        type: arg.type,
+        forced:
+          arg.type === 'query' ? isForcedQuery(arg, getState()) : undefined,
+        queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined,
+      }
+
+      const forceQueryFn =
+        arg.type === 'query' ? arg[forceQueryFnSymbol] : undefined
+
+      let finalQueryReturnValue: QueryReturnValue
+
+      // Infinite query wrapper, which executes the request and returns
+      // the InfiniteData `{pages, pageParams}` structure
+      const fetchPage = async (
+        data: InfiniteData<unknown, unknown>,
+        param: unknown,
+        maxPages: number,
+        previous?: boolean,
+      ): Promise<QueryReturnValue> => {
+        // This should handle cases where there is no `getPrevPageParam`,
+        // or `getPPP` returned nullish
+        if (param == null && data.pages.length) {
+          return Promise.resolve({ data })
+        }
+
+        const finalQueryArg: InfiniteQueryCombinedArg<any, any> = {
+          queryArg: arg.originalArgs,
+          pageParam: param,
+        }
+
+        const pageResponse = await executeRequest(finalQueryArg)
+
+        const addTo = previous ? addToStart : addToEnd
+
+        return {
+          data: {
+            pages: addTo(data.pages, pageResponse.data, maxPages),
+            pageParams: addTo(data.pageParams, param, maxPages),
+          },
+          meta: pageResponse.meta,
+        }
+      }
+
+      // Wrapper for executing either `query` or `queryFn`,
+      // and handling any errors
+      async function executeRequest(
+        finalQueryArg: unknown,
+      ): Promise<QueryReturnValue> {
+        let result: QueryReturnValue
+        const { extraOptions, argSchema, rawResponseSchema, responseSchema } =
+          endpointDefinition
+
+        if (argSchema && !skipSchemaValidation) {
+          finalQueryArg = await parseWithSchema(
+            argSchema,
+            finalQueryArg,
+            'argSchema',
+            {}, // we don't have a meta yet, so we can't pass it
+          )
+        }
+
+        if (forceQueryFn) {
+          // upsertQueryData relies on this to pass in the user-provided value
+          result = forceQueryFn()
+        } else if (endpointDefinition.query) {
+          result = await baseQuery(
+            endpointDefinition.query(finalQueryArg as any),
+            baseQueryApi,
+            extraOptions as any,
+          )
+        } else {
+          result = await endpointDefinition.queryFn(
+            finalQueryArg as any,
+            baseQueryApi,
+            extraOptions as any,
+            (arg) => baseQuery(arg, baseQueryApi, extraOptions as any),
+          )
+        }
+
+        if (
+          typeof process !== 'undefined' &&
+          process.env.NODE_ENV === 'development'
+        ) {
+          const what = endpointDefinition.query ? '`baseQuery`' : '`queryFn`'
+          let err: undefined | string
+          if (!result) {
+            err = `${what} did not return anything.`
+          } else if (typeof result !== 'object') {
+            err = `${what} did not return an object.`
+          } else if (result.error && result.data) {
+            err = `${what} returned an object containing both \`error\` and \`result\`.`
+          } else if (result.error === undefined && result.data === undefined) {
+            err = `${what} returned an object containing neither a valid \`error\` and \`result\`. At least one of them should not be \`undefined\``
+          } else {
+            for (const key of Object.keys(result)) {
+              if (key !== 'error' && key !== 'data' && key !== 'meta') {
+                err = `The object returned by ${what} has the unknown property ${key}.`
+                break
+              }
+            }
+          }
+          if (err) {
+            console.error(
+              `Error encountered handling the endpoint ${arg.endpointName}.
+                  ${err}
+                  It needs to return an object with either the shape \`{ data: <value> }\` or \`{ error: <value> }\` that may contain an optional \`meta\` property.
+                  Object returned was:`,
+              result,
+            )
+          }
+        }
+
+        if (result.error) throw new HandledError(result.error, result.meta)
+
+        let { data } = result
+
+        if (rawResponseSchema && !skipSchemaValidation) {
+          data = await parseWithSchema(
+            rawResponseSchema,
+            result.data,
+            'rawResponseSchema',
+            result.meta,
+          )
+        }
+
+        let transformedResponse = await transformResponse(
+          data,
+          result.meta,
+          finalQueryArg,
+        )
+
+        if (responseSchema && !skipSchemaValidation) {
+          transformedResponse = await parseWithSchema(
+            responseSchema,
+            transformedResponse,
+            'responseSchema',
+            result.meta,
+          )
+        }
+
+        return {
+          ...result,
+          data: transformedResponse,
+        }
+      }
+
+      if (
+        arg.type === 'query' &&
+        'infiniteQueryOptions' in endpointDefinition
+      ) {
+        // This is an infinite query endpoint
+        const { infiniteQueryOptions } = endpointDefinition
+
+        // Runtime checks should guarantee this is a positive number if provided
+        const { maxPages = Infinity } = infiniteQueryOptions
+
+        let result: QueryReturnValue
+
+        // Start by looking up the existing InfiniteData value from state,
+        // falling back to an empty value if it doesn't exist yet
+        const blankData = { pages: [], pageParams: [] }
+        const cachedData = selectors.selectQueryEntry(
+          getState(),
+          arg.queryCacheKey,
+        )?.data as InfiniteData<unknown, unknown> | undefined
+
+        // When the arg changes or the user forces a refetch,
+        // we don't include the `direction` flag. This lets us distinguish
+        // between actually refetching with a forced query, vs just fetching
+        // the next page.
+        const isForcedQueryNeedingRefetch = // arg.forceRefetch
+          isForcedQuery(arg, getState()) &&
+          !(arg as InfiniteQueryThunkArg<any>).direction
+        const existingData = (
+          isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData
+        ) as InfiniteData<unknown, unknown>
+
+        // If the thunk specified a direction and we do have at least one page,
+        // fetch the next or previous page
+        if ('direction' in arg && arg.direction && existingData.pages.length) {
+          const previous = arg.direction === 'backward'
+          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam
+          const param = pageParamFn(
+            infiniteQueryOptions,
+            existingData,
+            arg.originalArgs,
+          )
+
+          result = await fetchPage(existingData, param, maxPages, previous)
+        } else {
+          // Otherwise, fetch the first page and then any remaining pages
+
+          const { initialPageParam = infiniteQueryOptions.initialPageParam } =
+            arg as InfiniteQueryThunkArg<any>
+
+          // If we're doing a refetch, we should start from
+          // the first page we have cached.
+          // Otherwise, we should start from the initialPageParam
+          const cachedPageParams = cachedData?.pageParams ?? []
+          const firstPageParam = cachedPageParams[0] ?? initialPageParam
+          const totalPages = cachedPageParams.length
+
+          // Fetch first page
+          result = await fetchPage(existingData, firstPageParam, maxPages)
+
+          if (forceQueryFn) {
+            // HACK `upsertQueryData` expects the user to pass in the `{pages, pageParams}` structure,
+            // but `fetchPage` treats that as `pages[0]`. We have to manually un-nest it.
+            result = {
+              data: (result.data as InfiniteData<unknown, unknown>).pages[0],
+            } as QueryReturnValue
+          }
+
+          // Fetch remaining pages
+          for (let i = 1; i < totalPages; i++) {
+            const param = getNextPageParam(
+              infiniteQueryOptions,
+              result.data as InfiniteData<unknown, unknown>,
+              arg.originalArgs,
+            )
+            result = await fetchPage(
+              result.data as InfiniteData<unknown, unknown>,
+              param,
+              maxPages,
+            )
+          }
+        }
+
+        finalQueryReturnValue = result
+      } else {
+        // Non-infinite endpoint. Just run the one request.
+        finalQueryReturnValue = await executeRequest(arg.originalArgs)
+      }
+
+      if (metaSchema && !skipSchemaValidation && finalQueryReturnValue.meta) {
+        finalQueryReturnValue.meta = await parseWithSchema(
+          metaSchema,
+          finalQueryReturnValue.meta,
+          'metaSchema',
+          finalQueryReturnValue.meta,
+        )
+      }
+
+      // console.log('Final result: ', transformedData)
+      return fulfillWithValue(
+        finalQueryReturnValue.data,
+        addShouldAutoBatch({
+          fulfilledTimeStamp: Date.now(),
+          baseQueryMeta: finalQueryReturnValue.meta,
+        }),
+      )
+    } catch (error) {
+      let caughtError = error
+      if (caughtError instanceof HandledError) {
+        let transformErrorResponse = getTransformCallbackForEndpoint(
+          endpointDefinition,
+          'transformErrorResponse',
+        )
+        const { rawErrorResponseSchema, errorResponseSchema } =
+          endpointDefinition
+
+        let { value, meta } = caughtError
+
+        try {
+          if (rawErrorResponseSchema && !skipSchemaValidation) {
+            value = await parseWithSchema(
+              rawErrorResponseSchema,
+              value,
+              'rawErrorResponseSchema',
+              meta,
+            )
+          }
+
+          if (metaSchema && !skipSchemaValidation) {
+            meta = await parseWithSchema(metaSchema, meta, 'metaSchema', meta)
+          }
+          let transformedErrorResponse = await transformErrorResponse(
+            value,
+            meta,
+            arg.originalArgs,
+          )
+          if (errorResponseSchema && !skipSchemaValidation) {
+            transformedErrorResponse = await parseWithSchema(
+              errorResponseSchema,
+              transformedErrorResponse,
+              'errorResponseSchema',
+              meta,
+            )
+          }
+
+          return rejectWithValue(
+            transformedErrorResponse,
+            addShouldAutoBatch({ baseQueryMeta: meta }),
+          )
+        } catch (e) {
+          caughtError = e
+        }
+      }
+      try {
+        if (caughtError instanceof NamedSchemaError) {
+          const info: SchemaFailureInfo = {
+            endpoint: arg.endpointName,
+            arg: arg.originalArgs,
+            type: arg.type,
+            queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined,
+          }
+          endpointDefinition.onSchemaFailure?.(caughtError, info)
+          onSchemaFailure?.(caughtError, info)
+          const { catchSchemaFailure = globalCatchSchemaFailure } =
+            endpointDefinition
+          if (catchSchemaFailure) {
+            return rejectWithValue(
+              catchSchemaFailure(caughtError, info),
+              addShouldAutoBatch({ baseQueryMeta: caughtError._bqMeta }),
+            )
+          }
+        }
+      } catch (e) {
+        caughtError = e
+      }
+      if (
+        typeof process !== 'undefined' &&
+        process.env.NODE_ENV !== 'production'
+      ) {
+        console.error(
+          `An unhandled error occurred processing a request for the endpoint "${arg.endpointName}".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+          caughtError,
+        )
+      } else {
+        console.error(caughtError)
+      }
+      throw caughtError
+    }
+  }
+
+  function isForcedQuery(
+    arg: QueryThunkArg,
+    state: RootState<any, string, ReducerPath>,
+  ) {
+    const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey)
+    const baseFetchOnMountOrArgChange =
+      selectors.selectConfig(state).refetchOnMountOrArgChange
+
+    const fulfilledVal = requestState?.fulfilledTimeStamp
+    const refetchVal =
+      arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange)
+
+    if (refetchVal) {
+      // Return if it's true or compare the dates because it must be a number
+      return (
+        refetchVal === true ||
+        (Number(new Date()) - Number(fulfilledVal)) / 1000 >= refetchVal
+      )
+    }
+    return false
+  }
+
+  const createQueryThunk = <
+    ThunkArgType extends QueryThunkArg | InfiniteQueryThunkArg<any>,
+  >() => {
+    const generatedQueryThunk = createAsyncThunk<
+      ThunkResult,
+      ThunkArgType,
+      ThunkApiMetaConfig & { state: RootState<any, string, ReducerPath> }
+    >(`${reducerPath}/executeQuery`, executeEndpoint, {
+      getPendingMeta({ arg }) {
+        const endpointDefinition = endpointDefinitions[arg.endpointName]
+        return addShouldAutoBatch({
+          startedTimeStamp: Date.now(),
+          ...(isInfiniteQueryDefinition(endpointDefinition)
+            ? { direction: (arg as InfiniteQueryThunkArg<any>).direction }
+            : {}),
+        })
+      },
+      condition(queryThunkArg, { getState }) {
+        const state = getState()
+
+        const requestState = selectors.selectQueryEntry(
+          state,
+          queryThunkArg.queryCacheKey,
+        )
+        const fulfilledVal = requestState?.fulfilledTimeStamp
+        const currentArg = queryThunkArg.originalArgs
+        const previousArg = requestState?.originalArgs
+        const endpointDefinition =
+          endpointDefinitions[queryThunkArg.endpointName]
+        const direction = (queryThunkArg as InfiniteQueryThunkArg<any>)
+          .direction
+
+        // Order of these checks matters.
+        // In order for `upsertQueryData` to successfully run while an existing request is in flight,
+        /// we have to check for that first, otherwise `queryThunk` will bail out and not run at all.
+        if (isUpsertQuery(queryThunkArg)) {
+          return true
+        }
+
+        // Don't retry a request that's currently in-flight
+        if (requestState?.status === 'pending') {
+          return false
+        }
+
+        // if this is forced, continue
+        if (isForcedQuery(queryThunkArg, state)) {
+          return true
+        }
+
+        if (
+          isQueryDefinition(endpointDefinition) &&
+          endpointDefinition?.forceRefetch?.({
+            currentArg,
+            previousArg,
+            endpointState: requestState,
+            state,
+          })
+        ) {
+          return true
+        }
+
+        // Pull from the cache unless we explicitly force refetch or qualify based on time
+        if (fulfilledVal && !direction) {
+          // Value is cached and we didn't specify to refresh, skip it.
+          return false
+        }
+
+        return true
+      },
+      dispatchConditionRejection: true,
+    })
+    return generatedQueryThunk
+  }
+
+  const queryThunk = createQueryThunk<QueryThunkArg>()
+  const infiniteQueryThunk = createQueryThunk<InfiniteQueryThunkArg<any>>()
+
+  const mutationThunk = createAsyncThunk<
+    ThunkResult,
+    MutationThunkArg,
+    ThunkApiMetaConfig & { state: RootState<any, string, ReducerPath> }
+  >(`${reducerPath}/executeMutation`, executeEndpoint, {
+    getPendingMeta() {
+      return addShouldAutoBatch({ startedTimeStamp: Date.now() })
+    },
+  })
+
+  const hasTheForce = (options: any): options is { force: boolean } =>
+    'force' in options
+  const hasMaxAge = (
+    options: any,
+  ): options is { ifOlderThan: false | number } => 'ifOlderThan' in options
+
+  const prefetch =
+    <EndpointName extends QueryKeys<Definitions>>(
+      endpointName: EndpointName,
+      arg: any,
+      options: PrefetchOptions,
+    ): ThunkAction<void, any, any, UnknownAction> =>
+    (dispatch: ThunkDispatch<any, any, any>, getState: () => any) => {
+      const force = hasTheForce(options) && options.force
+      const maxAge = hasMaxAge(options) && options.ifOlderThan
+
+      const queryAction = (force: boolean = true) => {
+        const options = { forceRefetch: force, isPrefetch: true }
+        return (
+          api.endpoints[endpointName] as ApiEndpointQuery<any, any>
+        ).initiate(arg, options)
+      }
+      const latestStateValue = (
+        api.endpoints[endpointName] as ApiEndpointQuery<any, any>
+      ).select(arg)(getState())
+
+      if (force) {
+        dispatch(queryAction())
+      } else if (maxAge) {
+        const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp
+        if (!lastFulfilledTs) {
+          dispatch(queryAction())
+          return
+        }
+        const shouldRetrigger =
+          (Number(new Date()) - Number(new Date(lastFulfilledTs))) / 1000 >=
+          maxAge
+        if (shouldRetrigger) {
+          dispatch(queryAction())
+        }
+      } else {
+        // If prefetching with no options, just let it try
+        dispatch(queryAction(false))
+      }
+    }
+
+  function matchesEndpoint(endpointName: string) {
+    return (action: any): action is UnknownAction =>
+      action?.meta?.arg?.endpointName === endpointName
+  }
+
+  function buildMatchThunkActions<
+    Thunk extends
+      | AsyncThunk<any, QueryThunkArg, ThunkApiMetaConfig>
+      | AsyncThunk<any, MutationThunkArg, ThunkApiMetaConfig>,
+  >(thunk: Thunk, endpointName: string) {
+    return {
+      matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),
+      matchFulfilled: isAllOf(
+        isFulfilled(thunk),
+        matchesEndpoint(endpointName),
+      ),
+      matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName)),
+    } as Matchers<Thunk, any>
+  }
+
+  return {
+    queryThunk,
+    mutationThunk,
+    infiniteQueryThunk,
+    prefetch,
+    updateQueryData,
+    upsertQueryData,
+    patchQueryData,
+    buildMatchThunkActions,
+  }
+}
+
+export function getNextPageParam(
+  options: InfiniteQueryConfigOptions<unknown, unknown, unknown>,
+  { pages, pageParams }: InfiniteData<unknown, unknown>,
+  queryArg: unknown,
+): unknown | undefined {
+  const lastIndex = pages.length - 1
+  return options.getNextPageParam(
+    pages[lastIndex],
+    pages,
+    pageParams[lastIndex],
+    pageParams,
+    queryArg,
+  )
+}
+
+export function getPreviousPageParam(
+  options: InfiniteQueryConfigOptions<unknown, unknown, unknown>,
+  { pages, pageParams }: InfiniteData<unknown, unknown>,
+  queryArg: unknown,
+): unknown | undefined {
+  return options.getPreviousPageParam?.(
+    pages[0],
+    pages,
+    pageParams[0],
+    pageParams,
+    queryArg,
+  )
+}
+
+export function calculateProvidedByThunk(
+  action: UnwrapPromise<
+    | ReturnType<ReturnType<QueryThunk>>
+    | ReturnType<ReturnType<MutationThunk>>
+    | ReturnType<ReturnType<InfiniteQueryThunk<any>>>
+  >,
+  type: 'providesTags' | 'invalidatesTags',
+  endpointDefinitions: EndpointDefinitions,
+  assertTagType: AssertTagTypes,
+) {
+  return calculateProvidedBy(
+    endpointDefinitions[action.meta.arg.endpointName][
+      type
+    ] as ResultDescription<any, any, any, any, any>,
+    isFulfilled(action) ? action.payload : undefined,
+    isRejectedWithValue(action) ? action.payload : undefined,
+    action.meta.arg.originalArgs,
+    'baseQueryMeta' in action.meta ? action.meta.baseQueryMeta : undefined,
+    assertTagType,
+  )
+}
Index: node_modules/@reduxjs/toolkit/src/query/core/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+import { buildCreateApi } from '../createApi'
+import { coreModule } from './module'
+
+export const createApi = /* @__PURE__ */ buildCreateApi(coreModule())
+
+export { QueryStatus } from './apiState'
+export type {
+  CombinedState,
+  InfiniteData,
+  InfiniteQueryConfigOptions,
+  InfiniteQuerySubState,
+  MutationKeys,
+  QueryCacheKey,
+  QueryKeys,
+  QuerySubState,
+  RootState,
+  SubscriptionOptions,
+} from './apiState'
+export type {
+  InfiniteQueryActionCreatorResult,
+  MutationActionCreatorResult,
+  QueryActionCreatorResult,
+  StartQueryActionCreatorOptions,
+} from './buildInitiate'
+export type {
+  MutationCacheLifecycleApi,
+  MutationLifecycleApi,
+  QueryCacheLifecycleApi,
+  QueryLifecycleApi,
+  SubscriptionSelectors,
+  TypedMutationOnQueryStarted,
+  TypedQueryOnQueryStarted,
+} from './buildMiddleware/index'
+export { skipToken } from './buildSelectors'
+export type {
+  InfiniteQueryResultSelectorResult,
+  MutationResultSelectorResult,
+  QueryResultSelectorResult,
+  SkipToken,
+} from './buildSelectors'
+export type { SliceActions } from './buildSlice'
+export type {
+  PatchQueryDataThunk,
+  UpdateQueryDataThunk,
+  UpsertQueryDataThunk,
+} from './buildThunks'
+export { coreModuleName } from './module'
+export type {
+  ApiEndpointInfiniteQuery,
+  ApiEndpointMutation,
+  ApiEndpointQuery,
+  CoreModule,
+  InternalActions,
+  PrefetchOptions,
+  ThunkWithReturnValue,
+} from './module'
+export { setupListeners } from './setupListeners'
+export { buildCreateApi, coreModule }
Index: node_modules/@reduxjs/toolkit/src/query/core/module.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/module.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/module.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,707 @@
+/**
+ * Note: this file should import all other files for type discovery and declaration merging
+ */
+import type {
+  ActionCreatorWithPayload,
+  Middleware,
+  Reducer,
+  ThunkAction,
+  ThunkDispatch,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import { enablePatches } from 'immer'
+import type { Api, Module } from '../apiTypes'
+import type { BaseQueryFn } from '../baseQueryTypes'
+import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'
+import type {
+  AssertTagTypes,
+  EndpointDefinitions,
+  InfiniteQueryDefinition,
+  MutationDefinition,
+  QueryArgFrom,
+  QueryArgFromAnyQuery,
+  QueryDefinition,
+  TagDescription,
+} from '../endpointDefinitions'
+import {
+  isInfiniteQueryDefinition,
+  isMutationDefinition,
+  isQueryDefinition,
+} from '../endpointDefinitions'
+import { assertCast, safeAssign } from '../tsHelpers'
+import type {
+  CombinedState,
+  MutationKeys,
+  QueryKeys,
+  RootState,
+} from './apiState'
+import type {
+  BuildInitiateApiEndpointMutation,
+  BuildInitiateApiEndpointQuery,
+  MutationActionCreatorResult,
+  QueryActionCreatorResult,
+  InfiniteQueryActionCreatorResult,
+  BuildInitiateApiEndpointInfiniteQuery,
+} from './buildInitiate'
+import { buildInitiate } from './buildInitiate'
+import type {
+  ReferenceCacheCollection,
+  ReferenceCacheLifecycle,
+  ReferenceQueryLifecycle,
+} from './buildMiddleware'
+import { buildMiddleware } from './buildMiddleware'
+import type {
+  BuildSelectorsApiEndpointInfiniteQuery,
+  BuildSelectorsApiEndpointMutation,
+  BuildSelectorsApiEndpointQuery,
+} from './buildSelectors'
+import { buildSelectors } from './buildSelectors'
+import type { SliceActions, UpsertEntries } from './buildSlice'
+import { buildSlice } from './buildSlice'
+import type {
+  AllQueryKeys,
+  BuildThunksApiEndpointInfiniteQuery,
+  BuildThunksApiEndpointMutation,
+  BuildThunksApiEndpointQuery,
+  PatchQueryDataThunk,
+  QueryArgFromAnyQueryDefinition,
+  UpdateQueryDataThunk,
+  UpsertQueryDataThunk,
+} from './buildThunks'
+import { buildThunks } from './buildThunks'
+import { createSelector as _createSelector } from './rtkImports'
+import { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners'
+
+/**
+ * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_
+ * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value
+ *
+ * @overloadSummary
+ * `force`
+ * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.
+ */
+export type PrefetchOptions =
+  | {
+      ifOlderThan?: false | number
+    }
+  | { force?: boolean }
+
+export const coreModuleName = /* @__PURE__ */ Symbol()
+export type CoreModule =
+  | typeof coreModuleName
+  | ReferenceCacheLifecycle
+  | ReferenceQueryLifecycle
+  | ReferenceCacheCollection
+
+export type ThunkWithReturnValue<T> = ThunkAction<T, any, any, UnknownAction>
+
+export interface ApiModules<
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  BaseQuery extends BaseQueryFn,
+  Definitions extends EndpointDefinitions,
+  ReducerPath extends string,
+  TagTypes extends string,
+> {
+  [coreModuleName]: {
+    /**
+     * This api's reducer should be mounted at `store[api.reducerPath]`.
+     *
+     * @example
+     * ```ts
+     * configureStore({
+     *   reducer: {
+     *     [api.reducerPath]: api.reducer,
+     *   },
+     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),
+     * })
+     * ```
+     */
+    reducerPath: ReducerPath
+    /**
+     * Internal actions not part of the public API. Note: These are subject to change at any given time.
+     */
+    internalActions: InternalActions
+    /**
+     *  A standard redux reducer that enables core functionality. Make sure it's included in your store.
+     *
+     * @example
+     * ```ts
+     * configureStore({
+     *   reducer: {
+     *     [api.reducerPath]: api.reducer,
+     *   },
+     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),
+     * })
+     * ```
+     */
+    reducer: Reducer<
+      CombinedState<Definitions, TagTypes, ReducerPath>,
+      UnknownAction
+    >
+    /**
+     * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.
+     *
+     * @example
+     * ```ts
+     * configureStore({
+     *   reducer: {
+     *     [api.reducerPath]: api.reducer,
+     *   },
+     *   middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),
+     * })
+     * ```
+     */
+    middleware: Middleware<
+      {},
+      RootState<Definitions, string, ReducerPath>,
+      ThunkDispatch<any, any, UnknownAction>
+    >
+    /**
+     * A collection of utility thunks for various situations.
+     */
+    util: {
+      /**
+       * A thunk that (if dispatched) will return a specific running query, identified
+       * by `endpointName` and `arg`.
+       * If that query is not running, dispatching the thunk will result in `undefined`.
+       *
+       * Can be used to await a specific query triggered in any way,
+       * including via hook calls or manually dispatching `initiate` actions.
+       *
+       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+       */
+      getRunningQueryThunk<EndpointName extends AllQueryKeys<Definitions>>(
+        endpointName: EndpointName,
+        arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>,
+      ): ThunkWithReturnValue<
+        | QueryActionCreatorResult<
+            Definitions[EndpointName] & { type: 'query' }
+          >
+        | InfiniteQueryActionCreatorResult<
+            Definitions[EndpointName] & { type: 'infinitequery' }
+          >
+        | undefined
+      >
+
+      /**
+       * A thunk that (if dispatched) will return a specific running mutation, identified
+       * by `endpointName` and `fixedCacheKey` or `requestId`.
+       * If that mutation is not running, dispatching the thunk will result in `undefined`.
+       *
+       * Can be used to await a specific mutation triggered in any way,
+       * including via hook trigger functions or manually dispatching `initiate` actions.
+       *
+       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+       */
+      getRunningMutationThunk<EndpointName extends MutationKeys<Definitions>>(
+        endpointName: EndpointName,
+        fixedCacheKeyOrRequestId: string,
+      ): ThunkWithReturnValue<
+        | MutationActionCreatorResult<
+            Definitions[EndpointName] & { type: 'mutation' }
+          >
+        | undefined
+      >
+
+      /**
+       * A thunk that (if dispatched) will return all running queries.
+       *
+       * Useful for SSR scenarios to await all running queries triggered in any way,
+       * including via hook calls or manually dispatching `initiate` actions.
+       *
+       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+       */
+      getRunningQueriesThunk(): ThunkWithReturnValue<
+        Array<
+          QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>
+        >
+      >
+
+      /**
+       * A thunk that (if dispatched) will return all running mutations.
+       *
+       * Useful for SSR scenarios to await all running mutations triggered in any way,
+       * including via hook calls or manually dispatching `initiate` actions.
+       *
+       * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.
+       */
+      getRunningMutationsThunk(): ThunkWithReturnValue<
+        Array<MutationActionCreatorResult<any>>
+      >
+
+      /**
+       * A Redux thunk that can be used to manually trigger pre-fetching of data.
+       *
+       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.
+       *
+       * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.
+       *
+       * @example
+       *
+       * ```ts no-transpile
+       * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))
+       * ```
+       */
+      prefetch<EndpointName extends QueryKeys<Definitions>>(
+        endpointName: EndpointName,
+        arg: QueryArgFrom<Definitions[EndpointName]>,
+        options: PrefetchOptions,
+      ): ThunkAction<void, any, any, UnknownAction>
+      /**
+       * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.
+       *
+       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and an `updateRecipe` callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.
+       *
+       * The thunk executes _synchronously_, and returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).
+       *
+       * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, arg, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.
+       *
+       * Note that the first two arguments (`endpointName` and `arg`) are used to determine which existing cache entry to update. If no existing cache entry is found, the `updateRecipe` callback will not run.
+       *
+       * @example
+       *
+       * ```ts
+       * const patchCollection = dispatch(
+       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {
+       *     draftPosts.push({ id: 1, name: 'Teddy' })
+       *   })
+       * )
+       * ```
+       */
+      updateQueryData: UpdateQueryDataThunk<
+        Definitions,
+        RootState<Definitions, string, ReducerPath>
+      >
+
+      /**
+       * A Redux thunk action creator that, when dispatched, acts as an artificial API request to upsert a value into the cache.
+       *
+       * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and the data to upsert.
+       *
+       * If no cache entry for that cache key exists, a cache entry will be created and the data added. If a cache entry already exists, this will _overwrite_ the existing cache entry data.
+       *
+       * The thunk executes _asynchronously_, and returns a promise that resolves when the store has been updated.
+       *
+       * If dispatched while an actual request is in progress, both the upsert and request will be handled as soon as they resolve, resulting in a "last result wins" update behavior.
+       *
+       * @example
+       *
+       * ```ts
+       * await dispatch(
+       *   api.util.upsertQueryData('getPost', {id: 1}, {id: 1, text: "Hello!"})
+       * )
+       * ```
+       */
+      upsertQueryData: UpsertQueryDataThunk<
+        Definitions,
+        RootState<Definitions, string, ReducerPath>
+      >
+      /**
+       * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.
+       *
+       * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.
+       *
+       * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.
+       *
+       * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.
+       *
+       * @example
+       * ```ts
+       * const patchCollection = dispatch(
+       *   api.util.updateQueryData('getPosts', undefined, (draftPosts) => {
+       *     draftPosts.push({ id: 1, name: 'Teddy' })
+       *   })
+       * )
+       *
+       * // later
+       * dispatch(
+       *   api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)
+       * )
+       *
+       * // or
+       * patchCollection.undo()
+       * ```
+       */
+      patchQueryData: PatchQueryDataThunk<
+        Definitions,
+        RootState<Definitions, string, ReducerPath>
+      >
+
+      /**
+       * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.
+       *
+       * @example
+       *
+       * ```ts
+       * dispatch(api.util.resetApiState())
+       * ```
+       */
+      resetApiState: SliceActions['resetApiState']
+
+      upsertQueryEntries: UpsertEntries<Definitions>
+
+      /**
+       * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).
+       *
+       * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.
+       *
+       * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.
+       *
+       * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:
+       *
+       * - `[TagType]`
+       * - `[{ type: TagType }]`
+       * - `[{ type: TagType, id: number | string }]`
+       *
+       * @example
+       *
+       * ```ts
+       * dispatch(api.util.invalidateTags(['Post']))
+       * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))
+       * dispatch(
+       *   api.util.invalidateTags([
+       *     { type: 'Post', id: 1 },
+       *     { type: 'Post', id: 'LIST' },
+       *   ])
+       * )
+       * ```
+       */
+      invalidateTags: ActionCreatorWithPayload<
+        Array<TagDescription<TagTypes> | null | undefined>,
+        string
+      >
+
+      /**
+       * A function to select all `{ endpointName, originalArgs, queryCacheKey }` combinations that would be invalidated by a specific set of tags.
+       *
+       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.
+       */
+      selectInvalidatedBy: (
+        state: RootState<Definitions, string, ReducerPath>,
+        tags: ReadonlyArray<TagDescription<TagTypes> | null | undefined>,
+      ) => Array<{
+        endpointName: string
+        originalArgs: any
+        queryCacheKey: string
+      }>
+
+      /**
+       * A function to select all arguments currently cached for a given endpoint.
+       *
+       * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.
+       */
+      selectCachedArgsForQuery: <QueryName extends AllQueryKeys<Definitions>>(
+        state: RootState<Definitions, string, ReducerPath>,
+        queryName: QueryName,
+      ) => Array<QueryArgFromAnyQuery<Definitions[QueryName]>>
+    }
+    /**
+     * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.
+     */
+    endpoints: {
+      [K in keyof Definitions]: Definitions[K] extends QueryDefinition<
+        any,
+        any,
+        any,
+        any,
+        any
+      >
+        ? ApiEndpointQuery<Definitions[K], Definitions>
+        : Definitions[K] extends MutationDefinition<any, any, any, any, any>
+          ? ApiEndpointMutation<Definitions[K], Definitions>
+          : Definitions[K] extends InfiniteQueryDefinition<
+                any,
+                any,
+                any,
+                any,
+                any
+              >
+            ? ApiEndpointInfiniteQuery<Definitions[K], Definitions>
+            : never
+    }
+  }
+}
+
+export interface ApiEndpointQuery<
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  Definition extends QueryDefinition<any, any, any, any, any>,
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  Definitions extends EndpointDefinitions,
+> extends BuildThunksApiEndpointQuery<Definition>,
+    BuildInitiateApiEndpointQuery<Definition>,
+    BuildSelectorsApiEndpointQuery<Definition, Definitions> {
+  name: string
+  /**
+   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+   */
+  Types: NonNullable<Definition['Types']>
+}
+
+export interface ApiEndpointInfiniteQuery<
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  Definition extends InfiniteQueryDefinition<any, any, any, any, any>,
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  Definitions extends EndpointDefinitions,
+> extends BuildThunksApiEndpointInfiniteQuery<Definition>,
+    BuildInitiateApiEndpointInfiniteQuery<Definition>,
+    BuildSelectorsApiEndpointInfiniteQuery<Definition, Definitions> {
+  name: string
+  /**
+   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+   */
+  Types: NonNullable<Definition['Types']>
+}
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+export interface ApiEndpointMutation<
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  Definition extends MutationDefinition<any, any, any, any, any>,
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  Definitions extends EndpointDefinitions,
+> extends BuildThunksApiEndpointMutation<Definition>,
+    BuildInitiateApiEndpointMutation<Definition>,
+    BuildSelectorsApiEndpointMutation<Definition, Definitions> {
+  name: string
+  /**
+   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+   */
+  Types: NonNullable<Definition['Types']>
+}
+
+export type ListenerActions = {
+  /**
+   * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior
+   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners
+   */
+  onOnline: typeof onOnline
+  onOffline: typeof onOffline
+  /**
+   * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior
+   * @link https://redux-toolkit.js.org/rtk-query/api/setupListeners
+   */
+  onFocus: typeof onFocus
+  onFocusLost: typeof onFocusLost
+}
+
+export type InternalActions = SliceActions & ListenerActions
+
+export interface CoreModuleOptions {
+  /**
+   * A selector creator (usually from `reselect`, or matching the same signature)
+   */
+  createSelector?: typeof _createSelector
+}
+
+/**
+ * Creates a module containing the basic redux logic for use with `buildCreateApi`.
+ *
+ * @example
+ * ```ts
+ * const createBaseApi = buildCreateApi(coreModule());
+ * ```
+ */
+export const coreModule = ({
+  createSelector = _createSelector,
+}: CoreModuleOptions = {}): Module<CoreModule> => ({
+  name: coreModuleName,
+  init(
+    api,
+    {
+      baseQuery,
+      tagTypes,
+      reducerPath,
+      serializeQueryArgs,
+      keepUnusedDataFor,
+      refetchOnMountOrArgChange,
+      refetchOnFocus,
+      refetchOnReconnect,
+      invalidationBehavior,
+      onSchemaFailure,
+      catchSchemaFailure,
+      skipSchemaValidation,
+    },
+    context,
+  ) {
+    enablePatches()
+
+    assertCast<InternalSerializeQueryArgs>(serializeQueryArgs)
+
+    const assertTagType: AssertTagTypes = (tag) => {
+      if (
+        typeof process !== 'undefined' &&
+        process.env.NODE_ENV === 'development'
+      ) {
+        if (!tagTypes.includes(tag.type as any)) {
+          console.error(
+            `Tag type '${tag.type}' was used, but not specified in \`tagTypes\`!`,
+          )
+        }
+      }
+      return tag
+    }
+
+    Object.assign(api, {
+      reducerPath,
+      endpoints: {},
+      internalActions: {
+        onOnline,
+        onOffline,
+        onFocus,
+        onFocusLost,
+      },
+      util: {},
+    })
+
+    const selectors = buildSelectors({
+      serializeQueryArgs: serializeQueryArgs as any,
+      reducerPath,
+      createSelector,
+    })
+
+    const {
+      selectInvalidatedBy,
+      selectCachedArgsForQuery,
+      buildQuerySelector,
+      buildInfiniteQuerySelector,
+      buildMutationSelector,
+    } = selectors
+
+    safeAssign(api.util, { selectInvalidatedBy, selectCachedArgsForQuery })
+
+    const {
+      queryThunk,
+      infiniteQueryThunk,
+      mutationThunk,
+      patchQueryData,
+      updateQueryData,
+      upsertQueryData,
+      prefetch,
+      buildMatchThunkActions,
+    } = buildThunks({
+      baseQuery,
+      reducerPath,
+      context,
+      api,
+      serializeQueryArgs,
+      assertTagType,
+      selectors,
+      onSchemaFailure,
+      catchSchemaFailure,
+      skipSchemaValidation,
+    })
+
+    const { reducer, actions: sliceActions } = buildSlice({
+      context,
+      queryThunk,
+      infiniteQueryThunk,
+      mutationThunk,
+      serializeQueryArgs,
+      reducerPath,
+      assertTagType,
+      config: {
+        refetchOnFocus,
+        refetchOnReconnect,
+        refetchOnMountOrArgChange,
+        keepUnusedDataFor,
+        reducerPath,
+        invalidationBehavior,
+      },
+    })
+
+    safeAssign(api.util, {
+      patchQueryData,
+      updateQueryData,
+      upsertQueryData,
+      prefetch,
+      resetApiState: sliceActions.resetApiState,
+      upsertQueryEntries: sliceActions.cacheEntriesUpserted as any,
+    })
+    safeAssign(api.internalActions, sliceActions)
+
+    const { middleware, actions: middlewareActions } = buildMiddleware({
+      reducerPath,
+      context,
+      queryThunk,
+      mutationThunk,
+      infiniteQueryThunk,
+      api,
+      assertTagType,
+      selectors,
+    })
+    safeAssign(api.util, middlewareActions)
+
+    safeAssign(api, { reducer: reducer as any, middleware })
+
+    const {
+      buildInitiateQuery,
+      buildInitiateInfiniteQuery,
+      buildInitiateMutation,
+      getRunningMutationThunk,
+      getRunningMutationsThunk,
+      getRunningQueriesThunk,
+      getRunningQueryThunk,
+    } = buildInitiate({
+      queryThunk,
+      mutationThunk,
+      infiniteQueryThunk,
+      api,
+      serializeQueryArgs: serializeQueryArgs as any,
+      context,
+    })
+
+    safeAssign(api.util, {
+      getRunningMutationThunk,
+      getRunningMutationsThunk,
+      getRunningQueryThunk,
+      getRunningQueriesThunk,
+    })
+
+    return {
+      name: coreModuleName,
+      injectEndpoint(endpointName, definition) {
+        const anyApi = api as any as Api<
+          any,
+          Record<string, any>,
+          string,
+          string,
+          CoreModule
+        >
+        const endpoint = (anyApi.endpoints[endpointName] ??= {} as any)
+
+        if (isQueryDefinition(definition)) {
+          safeAssign(
+            endpoint,
+            {
+              name: endpointName,
+              select: buildQuerySelector(endpointName, definition),
+              initiate: buildInitiateQuery(endpointName, definition),
+            },
+            buildMatchThunkActions(queryThunk, endpointName),
+          )
+        }
+        if (isMutationDefinition(definition)) {
+          safeAssign(
+            endpoint,
+            {
+              name: endpointName,
+              select: buildMutationSelector(),
+              initiate: buildInitiateMutation(endpointName),
+            },
+            buildMatchThunkActions(mutationThunk, endpointName),
+          )
+        }
+        if (isInfiniteQueryDefinition(definition)) {
+          safeAssign(
+            endpoint,
+            {
+              name: endpointName,
+              select: buildInfiniteQuerySelector(endpointName, definition),
+              initiate: buildInitiateInfiniteQuery(endpointName, definition),
+            },
+            buildMatchThunkActions(queryThunk, endpointName),
+          )
+        }
+      },
+    }
+  },
+})
Index: node_modules/@reduxjs/toolkit/src/query/core/rtkImports.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/rtkImports.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/rtkImports.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+// This file exists to consolidate all of the imports from the `@reduxjs/toolkit` package.
+// ESBuild does not de-duplicate imports, so this file is used to ensure that each method
+// imported is only listed once, and there's only one mention of the `@reduxjs/toolkit` package.
+
+export {
+  createAction,
+  createSlice,
+  createSelector,
+  createAsyncThunk,
+  combineReducers,
+  createNextState,
+  isAnyOf,
+  isAllOf,
+  isAction,
+  isPending,
+  isRejected,
+  isFulfilled,
+  isRejectedWithValue,
+  isAsyncThunkAction,
+  prepareAutoBatched,
+  SHOULD_AUTOBATCH,
+  isPlainObject,
+  nanoid,
+} from '@reduxjs/toolkit'
Index: node_modules/@reduxjs/toolkit/src/query/core/setupListeners.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/core/setupListeners.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/core/setupListeners.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,84 @@
+import type {
+  ThunkDispatch,
+  ActionCreatorWithoutPayload, // Workaround for API-Extractor
+} from '@reduxjs/toolkit'
+import { createAction } from './rtkImports'
+
+export const onFocus = /* @__PURE__ */ createAction('__rtkq/focused')
+export const onFocusLost = /* @__PURE__ */ createAction('__rtkq/unfocused')
+export const onOnline = /* @__PURE__ */ createAction('__rtkq/online')
+export const onOffline = /* @__PURE__ */ createAction('__rtkq/offline')
+
+let initialized = false
+
+/**
+ * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.
+ * It requires the dispatch method from your store.
+ * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,
+ * but you have the option of providing a callback for more granular control.
+ *
+ * @example
+ * ```ts
+ * setupListeners(store.dispatch)
+ * ```
+ *
+ * @param dispatch - The dispatch method from your store
+ * @param customHandler - An optional callback for more granular control over listener behavior
+ * @returns Return value of the handler.
+ * The default handler returns an `unsubscribe` method that can be called to remove the listeners.
+ */
+export function setupListeners(
+  dispatch: ThunkDispatch<any, any, any>,
+  customHandler?: (
+    dispatch: ThunkDispatch<any, any, any>,
+    actions: {
+      onFocus: typeof onFocus
+      onFocusLost: typeof onFocusLost
+      onOnline: typeof onOnline
+      onOffline: typeof onOffline
+    },
+  ) => () => void,
+) {
+  function defaultHandler() {
+    const handleFocus = () => dispatch(onFocus())
+    const handleFocusLost = () => dispatch(onFocusLost())
+    const handleOnline = () => dispatch(onOnline())
+    const handleOffline = () => dispatch(onOffline())
+    const handleVisibilityChange = () => {
+      if (window.document.visibilityState === 'visible') {
+        handleFocus()
+      } else {
+        handleFocusLost()
+      }
+    }
+
+    if (!initialized) {
+      if (typeof window !== 'undefined' && window.addEventListener) {
+        // Handle focus events
+        window.addEventListener(
+          'visibilitychange',
+          handleVisibilityChange,
+          false,
+        )
+        window.addEventListener('focus', handleFocus, false)
+
+        // Handle connection events
+        window.addEventListener('online', handleOnline, false)
+        window.addEventListener('offline', handleOffline, false)
+        initialized = true
+      }
+    }
+    const unsubscribe = () => {
+      window.removeEventListener('focus', handleFocus)
+      window.removeEventListener('visibilitychange', handleVisibilityChange)
+      window.removeEventListener('online', handleOnline)
+      window.removeEventListener('offline', handleOffline)
+      initialized = false
+    }
+    return unsubscribe
+  }
+
+  return customHandler
+    ? customHandler(dispatch, { onFocus, onFocusLost, onOffline, onOnline })
+    : defaultHandler()
+}
Index: node_modules/@reduxjs/toolkit/src/query/createApi.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/createApi.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/createApi.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,503 @@
+import type { Api, ApiContext, Module, ModuleName } from './apiTypes'
+import type { CombinedState } from './core/apiState'
+import type { BaseQueryArg, BaseQueryFn } from './baseQueryTypes'
+import type { SerializeQueryArgs } from './defaultSerializeQueryArgs'
+import { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs'
+import type {
+  EndpointBuilder,
+  EndpointDefinitions,
+  SchemaFailureConverter,
+  SchemaFailureHandler,
+} from './endpointDefinitions'
+import {
+  DefinitionType,
+  isInfiniteQueryDefinition,
+  isQueryDefinition,
+} from './endpointDefinitions'
+import { nanoid } from './core/rtkImports'
+import type { UnknownAction } from '@reduxjs/toolkit'
+import type { NoInfer } from './tsHelpers'
+import { weakMapMemoize } from 'reselect'
+
+export interface CreateApiOptions<
+  BaseQuery extends BaseQueryFn,
+  Definitions extends EndpointDefinitions,
+  ReducerPath extends string = 'api',
+  TagTypes extends string = never,
+> {
+  /**
+   * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.
+   *
+   * @example
+   *
+   * ```ts
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+   *
+   * const api = createApi({
+   *   // highlight-start
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   // highlight-end
+   *   endpoints: (build) => ({
+   *     // ...endpoints
+   *   }),
+   * })
+   * ```
+   */
+  baseQuery: BaseQuery
+  /**
+   * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).
+   *
+   * @example
+   *
+   * ```ts
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   // highlight-start
+   *   tagTypes: ['Post', 'User'],
+   *   // highlight-end
+   *   endpoints: (build) => ({
+   *     // ...endpoints
+   *   }),
+   * })
+   * ```
+   */
+  tagTypes?: readonly TagTypes[]
+  /**
+   * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.
+   *
+   * @example
+   *
+   * ```ts
+   * // codeblock-meta title="apis.js"
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';
+   *
+   * const apiOne = createApi({
+   *   // highlight-start
+   *   reducerPath: 'apiOne',
+   *   // highlight-end
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (builder) => ({
+   *     // ...endpoints
+   *   }),
+   * });
+   *
+   * const apiTwo = createApi({
+   *   // highlight-start
+   *   reducerPath: 'apiTwo',
+   *   // highlight-end
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (builder) => ({
+   *     // ...endpoints
+   *   }),
+   * });
+   * ```
+   */
+  reducerPath?: ReducerPath
+  /**
+   * Accepts a custom function if you have a need to change the creation of cache keys for any reason.
+   */
+  serializeQueryArgs?: SerializeQueryArgs<unknown>
+  /**
+   * Endpoints are a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are three endpoint types: [`query`](../../rtk-query/usage/queries), [`infiniteQuery`](../../rtk-query/usage/infinite-queries) and [`mutation`](../../rtk-query/usage/mutations).
+   */
+  endpoints(
+    build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>,
+  ): Definitions
+  /**
+   * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.
+   *
+   * ```ts
+   * // codeblock-meta title="keepUnusedDataFor example"
+   *
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * interface Post {
+   *   id: number
+   *   name: string
+   * }
+   * type PostsResponse = Post[]
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPosts: build.query<PostsResponse, void>({
+   *       query: () => 'posts',
+   *       // highlight-start
+   *       keepUnusedDataFor: 5
+   *       // highlight-end
+   *     })
+   *   })
+   * })
+   * ```
+   */
+  keepUnusedDataFor?: number
+  /**
+   * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.
+   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.
+   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.
+   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.
+   *
+   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+   */
+  refetchOnMountOrArgChange?: boolean | number
+  /**
+   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.
+   *
+   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+   *
+   * Note: requires [`setupListeners`](./setupListeners) to have been called.
+   */
+  refetchOnFocus?: boolean
+  /**
+   * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.
+   *
+   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+   *
+   * Note: requires [`setupListeners`](./setupListeners) to have been called.
+   */
+  refetchOnReconnect?: boolean
+  /**
+   * Defaults to `'delayed'`. This setting allows you to control when tags are invalidated after a mutation.
+   *
+   * - `'immediately'`: Queries are invalidated instantly after the mutation finished, even if they are running.
+   *   If the query provides tags that were invalidated while it ran, it won't be re-fetched.
+   * - `'delayed'`: Invalidation only happens after all queries and mutations are settled.
+   *   This ensures that queries are always invalidated correctly and automatically "batches" invalidations of concurrent mutations.
+   *   Note that if you constantly have some queries (or mutations) running, this can delay tag invalidations indefinitely.
+   */
+  invalidationBehavior?: 'delayed' | 'immediately'
+  /**
+   * A function that is passed every dispatched action. If this returns something other than `undefined`,
+   * that return value will be used to rehydrate fulfilled & errored queries.
+   *
+   * @example
+   *
+   * ```ts
+   * // codeblock-meta title="next-redux-wrapper rehydration example"
+   * import type { Action, PayloadAction } from '@reduxjs/toolkit'
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * import { HYDRATE } from 'next-redux-wrapper'
+   *
+   * type RootState = any; // normally inferred from state
+   *
+   * function isHydrateAction(action: Action): action is PayloadAction<RootState> {
+   *   return action.type === HYDRATE
+   * }
+   *
+   * export const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   // highlight-start
+   *   extractRehydrationInfo(action, { reducerPath }): any {
+   *     if (isHydrateAction(action)) {
+   *       return action.payload[reducerPath]
+   *     }
+   *   },
+   *   // highlight-end
+   *   endpoints: (build) => ({
+   *     // omitted
+   *   }),
+   * })
+   * ```
+   */
+  extractRehydrationInfo?: (
+    action: UnknownAction,
+    {
+      reducerPath,
+    }: {
+      reducerPath: ReducerPath
+    },
+  ) =>
+    | undefined
+    | CombinedState<
+        NoInfer<Definitions>,
+        NoInfer<TagTypes>,
+        NoInfer<ReducerPath>
+      >
+
+  /**
+   * A function that is called when a schema validation fails.
+   *
+   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).
+   *
+   * `NamedSchemaError` has the following properties:
+   * - `issues`: an array of issues that caused the validation to fail
+   * - `value`: the value that was passed to the schema
+   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *     }),
+   *   }),
+   *   onSchemaFailure: (error, info) => {
+   *     console.error(error, info)
+   *   },
+   * })
+   * ```
+   */
+  onSchemaFailure?: SchemaFailureHandler
+
+  /**
+   * Convert a schema validation failure into an error shape matching base query errors.
+   *
+   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+   *     }),
+   *   }),
+   *   catchSchemaFailure: (error, info) => ({
+   *     status: "CUSTOM_ERROR",
+   *     error: error.schemaName + " failed validation",
+   *     data: error.issues,
+   *   }),
+   * })
+   * ```
+   */
+  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>
+
+  /**
+   * Defaults to `false`.
+   *
+   * If set to `true`, will skip schema validation for all endpoints, unless overridden by the endpoint.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   skipSchemaValidation: process.env.NODE_ENV === "test", // skip schema validation in tests, since we'll be mocking the response
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  skipSchemaValidation?: boolean
+}
+
+export type CreateApi<Modules extends ModuleName> = {
+  /**
+   * Creates a service to use in your application. Contains only the basic redux logic (the core module).
+   *
+   * @link https://redux-toolkit.js.org/rtk-query/api/createApi
+   */
+  <
+    BaseQuery extends BaseQueryFn,
+    Definitions extends EndpointDefinitions,
+    ReducerPath extends string = 'api',
+    TagTypes extends string = never,
+  >(
+    options: CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>,
+  ): Api<BaseQuery, Definitions, ReducerPath, TagTypes, Modules>
+}
+
+/**
+ * Builds a `createApi` method based on the provided `modules`.
+ *
+ * @link https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api
+ *
+ * @example
+ * ```ts
+ * const MyContext = React.createContext<ReactReduxContextValue | null>(null);
+ * const customCreateApi = buildCreateApi(
+ *   coreModule(),
+ *   reactHooksModule({
+ *     hooks: {
+ *       useDispatch: createDispatchHook(MyContext),
+ *       useSelector: createSelectorHook(MyContext),
+ *       useStore: createStoreHook(MyContext)
+ *     }
+ *   })
+ * );
+ * ```
+ *
+ * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints
+ * @returns A `createApi` method using the provided `modules`.
+ */
+export function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(
+  ...modules: Modules
+): CreateApi<Modules[number]['name']> {
+  return function baseCreateApi(options) {
+    const extractRehydrationInfo = weakMapMemoize((action: UnknownAction) =>
+      options.extractRehydrationInfo?.(action, {
+        reducerPath: (options.reducerPath ?? 'api') as any,
+      }),
+    )
+
+    const optionsWithDefaults: CreateApiOptions<any, any, any, any> = {
+      reducerPath: 'api',
+      keepUnusedDataFor: 60,
+      refetchOnMountOrArgChange: false,
+      refetchOnFocus: false,
+      refetchOnReconnect: false,
+      invalidationBehavior: 'delayed',
+      ...options,
+      extractRehydrationInfo,
+      serializeQueryArgs(queryArgsApi) {
+        let finalSerializeQueryArgs = defaultSerializeQueryArgs
+        if ('serializeQueryArgs' in queryArgsApi.endpointDefinition) {
+          const endpointSQA =
+            queryArgsApi.endpointDefinition.serializeQueryArgs!
+          finalSerializeQueryArgs = (queryArgsApi) => {
+            const initialResult = endpointSQA(queryArgsApi)
+            if (typeof initialResult === 'string') {
+              // If the user function returned a string, use it as-is
+              return initialResult
+            } else {
+              // Assume they returned an object (such as a subset of the original
+              // query args) or a primitive, and serialize it ourselves
+              return defaultSerializeQueryArgs({
+                ...queryArgsApi,
+                queryArgs: initialResult,
+              })
+            }
+          }
+        } else if (options.serializeQueryArgs) {
+          finalSerializeQueryArgs = options.serializeQueryArgs
+        }
+
+        return finalSerializeQueryArgs(queryArgsApi)
+      },
+      tagTypes: [...(options.tagTypes || [])],
+    }
+
+    const context: ApiContext<EndpointDefinitions> = {
+      endpointDefinitions: {},
+      batch(fn) {
+        // placeholder "batch" method to be overridden by plugins, for example with React.unstable_batchedUpdate
+        fn()
+      },
+      apiUid: nanoid(),
+      extractRehydrationInfo,
+      hasRehydrationInfo: weakMapMemoize(
+        (action) => extractRehydrationInfo(action) != null,
+      ),
+    }
+
+    const api = {
+      injectEndpoints,
+      enhanceEndpoints({ addTagTypes, endpoints }) {
+        if (addTagTypes) {
+          for (const eT of addTagTypes) {
+            if (!optionsWithDefaults.tagTypes!.includes(eT as any)) {
+              ;(optionsWithDefaults.tagTypes as any[]).push(eT)
+            }
+          }
+        }
+        if (endpoints) {
+          for (const [endpointName, partialDefinition] of Object.entries(
+            endpoints,
+          )) {
+            if (typeof partialDefinition === 'function') {
+              partialDefinition(context.endpointDefinitions[endpointName])
+            } else {
+              Object.assign(
+                context.endpointDefinitions[endpointName] || {},
+                partialDefinition,
+              )
+            }
+          }
+        }
+        return api
+      },
+    } as Api<BaseQueryFn, {}, string, string, Modules[number]['name']>
+
+    const initializedModules = modules.map((m) =>
+      m.init(api as any, optionsWithDefaults as any, context),
+    )
+
+    function injectEndpoints(
+      inject: Parameters<typeof api.injectEndpoints>[0],
+    ) {
+      const evaluatedEndpoints = inject.endpoints({
+        query: (x) => ({ ...x, type: DefinitionType.query }) as any,
+        mutation: (x) => ({ ...x, type: DefinitionType.mutation }) as any,
+        infiniteQuery: (x) =>
+          ({ ...x, type: DefinitionType.infinitequery }) as any,
+      })
+
+      for (const [endpointName, definition] of Object.entries(
+        evaluatedEndpoints,
+      )) {
+        if (
+          inject.overrideExisting !== true &&
+          endpointName in context.endpointDefinitions
+        ) {
+          if (inject.overrideExisting === 'throw') {
+            throw new Error(
+              `called \`injectEndpoints\` to override already-existing endpointName ${endpointName} without specifying \`overrideExisting: true\``,
+            )
+          } else if (
+            typeof process !== 'undefined' &&
+            process.env.NODE_ENV === 'development'
+          ) {
+            console.error(
+              `called \`injectEndpoints\` to override already-existing endpointName ${endpointName} without specifying \`overrideExisting: true\``,
+            )
+          }
+
+          continue
+        }
+
+        if (
+          typeof process !== 'undefined' &&
+          process.env.NODE_ENV === 'development'
+        ) {
+          if (isInfiniteQueryDefinition(definition)) {
+            const { infiniteQueryOptions } = definition
+            const { maxPages, getPreviousPageParam } = infiniteQueryOptions
+
+            if (typeof maxPages === 'number') {
+              if (maxPages < 1) {
+                throw new Error(
+                  `maxPages for endpoint '${endpointName}' must be a number greater than 0`,
+                )
+              }
+
+              if (typeof getPreviousPageParam !== 'function') {
+                throw new Error(
+                  `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`,
+                )
+              }
+            }
+          }
+        }
+
+        context.endpointDefinitions[endpointName] = definition
+        for (const m of initializedModules) {
+          m.injectEndpoint(endpointName, definition)
+        }
+      }
+
+      return api as any
+    }
+
+    return api.injectEndpoints({ endpoints: options.endpoints as any })
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/defaultSerializeQueryArgs.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/defaultSerializeQueryArgs.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/defaultSerializeQueryArgs.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+import type { QueryCacheKey } from './core/apiState'
+import type { EndpointDefinition } from './endpointDefinitions'
+import { isPlainObject } from './core/rtkImports'
+
+const cache: WeakMap<any, string> | undefined = WeakMap
+  ? new WeakMap()
+  : undefined
+
+export const defaultSerializeQueryArgs: SerializeQueryArgs<any> = ({
+  endpointName,
+  queryArgs,
+}) => {
+  let serialized = ''
+
+  const cached = cache?.get(queryArgs)
+
+  if (typeof cached === 'string') {
+    serialized = cached
+  } else {
+    const stringified = JSON.stringify(queryArgs, (key, value) => {
+      // Handle bigints
+      value = typeof value === 'bigint' ? { $bigint: value.toString() } : value
+      // Sort the object keys before stringifying, to prevent useQuery({ a: 1, b: 2 }) having a different cache key than useQuery({ b: 2, a: 1 })
+      value = isPlainObject(value)
+        ? Object.keys(value)
+            .sort()
+            .reduce<any>((acc, key) => {
+              acc[key] = (value as any)[key]
+              return acc
+            }, {})
+        : value
+      return value
+    })
+    if (isPlainObject(queryArgs)) {
+      cache?.set(queryArgs, stringified)
+    }
+    serialized = stringified
+  }
+  return `${endpointName}(${serialized})`
+}
+
+export type SerializeQueryArgs<QueryArgs, ReturnType = string> = (_: {
+  queryArgs: QueryArgs
+  endpointDefinition: EndpointDefinition<any, any, any, any>
+  endpointName: string
+}) => ReturnType
+
+export type InternalSerializeQueryArgs = (_: {
+  queryArgs: any
+  endpointDefinition: EndpointDefinition<any, any, any, any>
+  endpointName: string
+}) => QueryCacheKey
Index: node_modules/@reduxjs/toolkit/src/query/endpointDefinitions.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/endpointDefinitions.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/endpointDefinitions.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1545 @@
+import type { Api } from '@reduxjs/toolkit/query'
+import type { StandardSchemaV1 } from '@standard-schema/spec'
+import type {
+  BaseQueryApi,
+  BaseQueryArg,
+  BaseQueryError,
+  BaseQueryExtraOptions,
+  BaseQueryFn,
+  BaseQueryMeta,
+  BaseQueryResult,
+  QueryReturnValue,
+} from './baseQueryTypes'
+import type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection'
+import type {
+  CacheLifecycleInfiniteQueryExtraOptions,
+  CacheLifecycleMutationExtraOptions,
+  CacheLifecycleQueryExtraOptions,
+} from './core/buildMiddleware/cacheLifecycle'
+import type {
+  QueryLifecycleInfiniteQueryExtraOptions,
+  QueryLifecycleMutationExtraOptions,
+  QueryLifecycleQueryExtraOptions,
+} from './core/buildMiddleware/queryLifecycle'
+import type {
+  InfiniteData,
+  InfiniteQueryConfigOptions,
+  QuerySubState,
+  RootState,
+} from './core/index'
+import type { SerializeQueryArgs } from './defaultSerializeQueryArgs'
+import type { NEVER } from './fakeBaseQuery'
+import type {
+  CastAny,
+  HasRequiredProps,
+  MaybePromise,
+  NonUndefined,
+  OmitFromUnion,
+  UnwrapPromise,
+} from './tsHelpers'
+import { isNotNullish } from './utils'
+import type { NamedSchemaError } from './standardSchema'
+
+const rawResultType = /* @__PURE__ */ Symbol()
+const resultType = /* @__PURE__ */ Symbol()
+const baseQuery = /* @__PURE__ */ Symbol()
+
+export interface SchemaFailureInfo {
+  endpoint: string
+  arg: any
+  type: 'query' | 'mutation'
+  queryCacheKey?: string
+}
+
+export type SchemaFailureHandler = (
+  error: NamedSchemaError,
+  info: SchemaFailureInfo,
+) => void
+
+export type SchemaFailureConverter<BaseQuery extends BaseQueryFn> = (
+  error: NamedSchemaError,
+  info: SchemaFailureInfo,
+) => BaseQueryError<BaseQuery>
+
+export type EndpointDefinitionWithQuery<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+  RawResultType extends BaseQueryResult<BaseQuery>,
+> = {
+  /**
+   * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.
+   *
+   * @example
+   *
+   * ```ts
+   * // codeblock-meta title="query example"
+   *
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * interface Post {
+   *   id: number
+   *   name: string
+   * }
+   * type PostsResponse = Post[]
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   tagTypes: ['Post'],
+   *   endpoints: (build) => ({
+   *     getPosts: build.query<PostsResponse, void>({
+   *       // highlight-start
+   *       query: () => 'posts',
+   *       // highlight-end
+   *     }),
+   *     addPost: build.mutation<Post, Partial<Post>>({
+   *      // highlight-start
+   *      query: (body) => ({
+   *        url: `posts`,
+   *        method: 'POST',
+   *        body,
+   *      }),
+   *      // highlight-end
+   *      invalidatesTags: [{ type: 'Post', id: 'LIST' }],
+   *    }),
+   *   })
+   * })
+   * ```
+   */
+  query(arg: QueryArg): BaseQueryArg<BaseQuery>
+  queryFn?: never
+  /**
+   * A function to manipulate the data returned by a query or mutation.
+   */
+  transformResponse?(
+    baseQueryReturnValue: RawResultType,
+    meta: BaseQueryMeta<BaseQuery>,
+    arg: QueryArg,
+  ): ResultType | Promise<ResultType>
+  /**
+   * A function to manipulate the data returned by a failed query or mutation.
+   */
+  transformErrorResponse?(
+    baseQueryReturnValue: BaseQueryError<BaseQuery>,
+    meta: BaseQueryMeta<BaseQuery>,
+    arg: QueryArg,
+  ): unknown
+
+  /**
+   * A schema for the result *before* it's passed to `transformResponse`.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   *
+   * const postSchema = v.object({ id: v.number(), name: v.string() })
+   * type Post = v.InferOutput<typeof postSchema>
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPostName: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       rawResponseSchema: postSchema,
+   *       transformResponse: (post) => post.name,
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  rawResponseSchema?: StandardSchemaV1<RawResultType>
+
+  /**
+   * A schema for the error object returned by the `query` or `queryFn`, *before* it's passed to `transformErrorResponse`.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   * import {customBaseQuery, baseQueryErrorSchema} from "./customBaseQuery"
+   *
+   * const api = createApi({
+   *   baseQuery: customBaseQuery,
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       rawErrorResponseSchema: baseQueryErrorSchema,
+   *       transformErrorResponse: (error) => error.data,
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  rawErrorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>
+}
+
+export type EndpointDefinitionWithQueryFn<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+> = {
+  /**
+   * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta title="Basic queryFn example"
+   *
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * interface Post {
+   *   id: number
+   *   name: string
+   * }
+   * type PostsResponse = Post[]
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPosts: build.query<PostsResponse, void>({
+   *       query: () => 'posts',
+   *     }),
+   *     flipCoin: build.query<'heads' | 'tails', void>({
+   *       // highlight-start
+   *       queryFn(arg, queryApi, extraOptions, baseQuery) {
+   *         const randomVal = Math.random()
+   *         if (randomVal < 0.45) {
+   *           return { data: 'heads' }
+   *         }
+   *         if (randomVal < 0.9) {
+   *           return { data: 'tails' }
+   *         }
+   *         return { error: { status: 500, statusText: 'Internal Server Error', data: "Coin landed on its edge!" } }
+   *       }
+   *       // highlight-end
+   *     })
+   *   })
+   * })
+   * ```
+   */
+  queryFn(
+    arg: QueryArg,
+    api: BaseQueryApi,
+    extraOptions: BaseQueryExtraOptions<BaseQuery>,
+    baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>,
+  ): MaybePromise<
+    QueryReturnValue<
+      ResultType,
+      BaseQueryError<BaseQuery>,
+      BaseQueryMeta<BaseQuery>
+    >
+  >
+  query?: never
+  transformResponse?: never
+  transformErrorResponse?: never
+  rawResponseSchema?: never
+  rawErrorResponseSchema?: never
+}
+
+type BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {
+  QueryArg: QueryArg
+  BaseQuery: BaseQuery
+  ResultType: ResultType
+}
+
+interface CommonEndpointDefinition<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+> {
+  /**
+   * A schema for the arguments to be passed to the `query` or `queryFn`.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       argSchema: v.object({ id: v.number() }),
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  argSchema?: StandardSchemaV1<QueryArg>
+
+  /**
+   * A schema for the result (including `transformResponse` if provided).
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   *
+   * const postSchema = v.object({ id: v.number(), name: v.string() })
+   * type Post = v.InferOutput<typeof postSchema>
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       responseSchema: postSchema,
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  responseSchema?: StandardSchemaV1<ResultType>
+
+  /**
+   * A schema for the error object returned by the `query` or `queryFn` (including `transformErrorResponse` if provided).
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   * import { customBaseQuery, baseQueryErrorSchema } from "./customBaseQuery"
+   *
+   * const api = createApi({
+   *   baseQuery: customBaseQuery,
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       errorResponseSchema: baseQueryErrorSchema,
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  errorResponseSchema?: StandardSchemaV1<BaseQueryError<BaseQuery>>
+
+  /**
+   * A schema for the `meta` property returned by the `query` or `queryFn`.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   * import { customBaseQuery, baseQueryMetaSchema } from "./customBaseQuery"
+   *
+   * const api = createApi({
+   *   baseQuery: customBaseQuery,
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       metaSchema: baseQueryMetaSchema,
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  metaSchema?: StandardSchemaV1<BaseQueryMeta<BaseQuery>>
+
+  /**
+   * Defaults to `true`.
+   *
+   * Most apps should leave this setting on. The only time it can be a performance issue
+   * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and
+   * you're unable to paginate it.
+   *
+   * For details of how this works, please see the below. When it is set to `false`,
+   * every request will cause subscribed components to rerender, even when the data has not changed.
+   *
+   * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing
+   */
+  structuralSharing?: boolean
+
+  /**
+   * A function that is called when a schema validation fails.
+   *
+   * Gets called with a `NamedSchemaError` and an object containing the endpoint name, the type of the endpoint, the argument passed to the endpoint, and the query cache key (if applicable).
+   *
+   * `NamedSchemaError` has the following properties:
+   * - `issues`: an array of issues that caused the validation to fail
+   * - `value`: the value that was passed to the schema
+   * - `schemaName`: the name of the schema that was used to validate the value (e.g. `argSchema`)
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       onSchemaFailure: (error, info) => {
+   *         console.error(error, info)
+   *       },
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  onSchemaFailure?: SchemaFailureHandler
+
+  /**
+   * Convert a schema validation failure into an error shape matching base query errors.
+   *
+   * When not provided, schema failures are treated as fatal, and normal error handling such as tag invalidation will not be executed.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+   *       catchSchemaFailure: (error, info) => ({
+   *         status: "CUSTOM_ERROR",
+   *         error: error.schemaName + " failed validation",
+   *         data: error.issues,
+   *       }),
+   *     }),
+   *   }),
+   * })
+   * ```
+   */
+  catchSchemaFailure?: SchemaFailureConverter<BaseQuery>
+
+  /**
+   * Defaults to `false`.
+   *
+   * If set to `true`, will skip schema validation for this endpoint.
+   * Overrides the global setting.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta no-transpile
+   * import { createApi } from '@reduxjs/toolkit/query/react'
+   * import * as v from "valibot"
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   endpoints: (build) => ({
+   *     getPost: build.query<Post, { id: number }>({
+   *       query: ({ id }) => `/post/${id}`,
+   *       responseSchema: v.object({ id: v.number(), name: v.string() }),
+   *       skipSchemaValidation: process.env.NODE_ENV === "test", // skip schema validation in tests, since we'll be mocking the response
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  skipSchemaValidation?: boolean
+}
+
+export type BaseEndpointDefinition<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ResultType,
+  RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>,
+> = (
+  | ([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER]
+      ? never
+      : EndpointDefinitionWithQuery<
+          QueryArg,
+          BaseQuery,
+          ResultType,
+          RawResultType
+        >)
+  | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>
+) &
+  CommonEndpointDefinition<QueryArg, BaseQuery, ResultType> & {
+    /* phantom type */
+    [rawResultType]?: RawResultType
+    /* phantom type */
+    [resultType]?: ResultType
+    /* phantom type */
+    [baseQuery]?: BaseQuery
+  } & HasRequiredProps<
+    BaseQueryExtraOptions<BaseQuery>,
+    { extraOptions: BaseQueryExtraOptions<BaseQuery> },
+    { extraOptions?: BaseQueryExtraOptions<BaseQuery> }
+  >
+
+export enum DefinitionType {
+  query = 'query',
+  mutation = 'mutation',
+  infinitequery = 'infinitequery',
+}
+
+type TagDescriptionArray<TagTypes extends string> = ReadonlyArray<
+  TagDescription<TagTypes> | undefined | null
+>
+
+export type GetResultDescriptionFn<
+  TagTypes extends string,
+  ResultType,
+  QueryArg,
+  ErrorType,
+  MetaType,
+> = (
+  result: ResultType | undefined,
+  error: ErrorType | undefined,
+  arg: QueryArg,
+  meta: MetaType,
+) => TagDescriptionArray<TagTypes>
+
+export type FullTagDescription<TagType> = {
+  type: TagType
+  id?: number | string
+}
+export type TagDescription<TagType> = TagType | FullTagDescription<TagType>
+
+/**
+ * @public
+ */
+export type ResultDescription<
+  TagTypes extends string,
+  ResultType,
+  QueryArg,
+  ErrorType,
+  MetaType,
+> =
+  | TagDescriptionArray<TagTypes>
+  | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>
+
+type QueryTypes<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  TagTypes extends string,
+  ResultType,
+  ReducerPath extends string = string,
+> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {
+  /**
+   * The endpoint definition type. To be used with some internal generic types.
+   * @example
+   * ```ts
+   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...
+   * ```
+   */
+  QueryDefinition: QueryDefinition<
+    QueryArg,
+    BaseQuery,
+    TagTypes,
+    ResultType,
+    ReducerPath
+  >
+  TagTypes: TagTypes
+  ReducerPath: ReducerPath
+}
+
+/**
+ * @public
+ */
+export interface QueryExtraOptions<
+  TagTypes extends string,
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string = string,
+> extends CacheLifecycleQueryExtraOptions<
+      ResultType,
+      QueryArg,
+      BaseQuery,
+      ReducerPath
+    >,
+    QueryLifecycleQueryExtraOptions<
+      ResultType,
+      QueryArg,
+      BaseQuery,
+      ReducerPath
+    >,
+    CacheCollectionQueryExtraOptions {
+  type: DefinitionType.query
+
+  /**
+   * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.
+   * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.
+   * 1.  `['Post']` - equivalent to `2`
+   * 2.  `[{ type: 'Post' }]` - equivalent to `1`
+   * 3.  `[{ type: 'Post', id: 1 }]`
+   * 4.  `(result, error, arg) => ['Post']` - equivalent to `5`
+   * 5.  `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`
+   * 6.  `(result, error, arg) => [{ type: 'Post', id: 1 }]`
+   *
+   * @example
+   *
+   * ```ts
+   * // codeblock-meta title="providesTags example"
+   *
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * interface Post {
+   *   id: number
+   *   name: string
+   * }
+   * type PostsResponse = Post[]
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   tagTypes: ['Posts'],
+   *   endpoints: (build) => ({
+   *     getPosts: build.query<PostsResponse, void>({
+   *       query: () => 'posts',
+   *       // highlight-start
+   *       providesTags: (result) =>
+   *         result
+   *           ? [
+   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),
+   *               { type: 'Posts', id: 'LIST' },
+   *             ]
+   *           : [{ type: 'Posts', id: 'LIST' }],
+   *       // highlight-end
+   *     })
+   *   })
+   * })
+   * ```
+   */
+  providesTags?: ResultDescription<
+    TagTypes,
+    ResultType,
+    QueryArg,
+    BaseQueryError<BaseQuery>,
+    BaseQueryMeta<BaseQuery>
+  >
+  /**
+   * Not to be used. A query should not invalidate tags in the cache.
+   */
+  invalidatesTags?: never
+
+  /**
+   * Can be provided to return a custom cache key value based on the query arguments.
+   *
+   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.
+   *
+   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.
+   *
+   *
+   * @example
+   *
+   * ```ts
+   * // codeblock-meta title="serializeQueryArgs : exclude value"
+   *
+   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+   * interface Post {
+   *   id: number
+   *   name: string
+   * }
+   *
+   * interface MyApiClient {
+   *   fetchPost: (id: string) => Promise<Post>
+   * }
+   *
+   * createApi({
+   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *  endpoints: (build) => ({
+   *    // Example: an endpoint with an API client passed in as an argument,
+   *    // but only the item ID should be used as the cache key
+   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({
+   *      queryFn: async ({ id, client }) => {
+   *        const post = await client.fetchPost(id)
+   *        return { data: post }
+   *      },
+   *      // highlight-start
+   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {
+   *        const { id } = queryArgs
+   *        // This can return a string, an object, a number, or a boolean.
+   *        // If it returns an object, number or boolean, that value
+   *        // will be serialized automatically via `defaultSerializeQueryArgs`
+   *        return { id } // omit `client` from the cache key
+   *
+   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:
+   *        // return defaultSerializeQueryArgs({
+   *        //   endpointName,
+   *        //   queryArgs: { id },
+   *        //   endpointDefinition
+   *        // })
+   *        // Or  create and return a string yourself:
+   *        // return `getPost(${id})`
+   *      },
+   *      // highlight-end
+   *    }),
+   *  }),
+   *})
+   * ```
+   */
+  serializeQueryArgs?: SerializeQueryArgs<
+    QueryArg,
+    string | number | boolean | Record<any, any>
+  >
+
+  /**
+   * Can be provided to merge an incoming response value into the current cache data.
+   * If supplied, no automatic structural sharing will be applied - it's up to
+   * you to update the cache appropriately.
+   *
+   * Since RTKQ normally replaces cache entries with the new response, you will usually
+   * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep
+   * an existing cache entry so that it can be updated.
+   *
+   * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,
+   * or return a new value, but _not_ both at once.
+   *
+   * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,
+   * the cache entry will just save the response data directly.
+   *
+   * Useful if you don't want a new request to completely override the current cache value,
+   * maybe because you have manually updated it from another source and don't want those
+   * updates to get lost.
+   *
+   *
+   * @example
+   *
+   * ```ts
+   * // codeblock-meta title="merge: pagination"
+   *
+   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+   * interface Post {
+   *   id: number
+   *   name: string
+   * }
+   *
+   * createApi({
+   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *  endpoints: (build) => ({
+   *    listItems: build.query<string[], number>({
+   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,
+   *     // Only have one cache entry because the arg always maps to one string
+   *     serializeQueryArgs: ({ endpointName }) => {
+   *       return endpointName
+   *      },
+   *      // Always merge incoming data to the cache entry
+   *      merge: (currentCache, newItems) => {
+   *        currentCache.push(...newItems)
+   *      },
+   *      // Refetch when the page arg changes
+   *      forceRefetch({ currentArg, previousArg }) {
+   *        return currentArg !== previousArg
+   *      },
+   *    }),
+   *  }),
+   *})
+   * ```
+   */
+  merge?(
+    currentCacheData: ResultType,
+    responseData: ResultType,
+    otherArgs: {
+      arg: QueryArg
+      baseQueryMeta: BaseQueryMeta<BaseQuery>
+      requestId: string
+      fulfilledTimeStamp: number
+    },
+  ): ResultType | void
+
+  /**
+   * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.
+   * This is primarily useful for "infinite scroll" / pagination use cases where
+   * RTKQ is keeping a single cache entry that is added to over time, in combination
+   * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback
+   * set to add incoming data to the cache entry each time.
+   *
+   * @example
+   *
+   * ```ts
+   * // codeblock-meta title="forceRefresh: pagination"
+   *
+   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+   * interface Post {
+   *   id: number
+   *   name: string
+   * }
+   *
+   * createApi({
+   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *  endpoints: (build) => ({
+   *    listItems: build.query<string[], number>({
+   *      query: (pageNumber) => `/listItems?page=${pageNumber}`,
+   *     // Only have one cache entry because the arg always maps to one string
+   *     serializeQueryArgs: ({ endpointName }) => {
+   *       return endpointName
+   *      },
+   *      // Always merge incoming data to the cache entry
+   *      merge: (currentCache, newItems) => {
+   *        currentCache.push(...newItems)
+   *      },
+   *      // Refetch when the page arg changes
+   *      forceRefetch({ currentArg, previousArg }) {
+   *        return currentArg !== previousArg
+   *      },
+   *    }),
+   *  }),
+   *})
+   * ```
+   */
+  forceRefetch?(params: {
+    currentArg: QueryArg | undefined
+    previousArg: QueryArg | undefined
+    state: RootState<any, any, string>
+    endpointState?: QuerySubState<any>
+  }): boolean
+
+  /**
+   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+   */
+  Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>
+}
+
+export type QueryDefinition<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  TagTypes extends string,
+  ResultType,
+  ReducerPath extends string = string,
+  RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>,
+> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> &
+  QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>
+
+export type InfiniteQueryTypes<
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+  TagTypes extends string,
+  ResultType,
+  ReducerPath extends string = string,
+> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {
+  /**
+   * The endpoint definition type. To be used with some internal generic types.
+   * @example
+   * ```ts
+   * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...
+   * ```
+   */
+  InfiniteQueryDefinition: InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    TagTypes,
+    ResultType,
+    ReducerPath
+  >
+  TagTypes: TagTypes
+  ReducerPath: ReducerPath
+}
+
+export interface InfiniteQueryExtraOptions<
+  TagTypes extends string,
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string = string,
+> extends CacheLifecycleInfiniteQueryExtraOptions<
+      InfiniteData<ResultType, PageParam>,
+      QueryArg,
+      BaseQuery,
+      ReducerPath
+    >,
+    QueryLifecycleInfiniteQueryExtraOptions<
+      InfiniteData<ResultType, PageParam>,
+      QueryArg,
+      BaseQuery,
+      ReducerPath
+    >,
+    CacheCollectionQueryExtraOptions {
+  type: DefinitionType.infinitequery
+
+  providesTags?: ResultDescription<
+    TagTypes,
+    InfiniteData<ResultType, PageParam>,
+    QueryArg,
+    BaseQueryError<BaseQuery>,
+    BaseQueryMeta<BaseQuery>
+  >
+  /**
+   * Not to be used. A query should not invalidate tags in the cache.
+   */
+  invalidatesTags?: never
+
+  /**
+   * Required options to configure the infinite query behavior.
+   * `initialPageParam` and `getNextPageParam` are required, to
+   * ensure the infinite query can properly fetch the next page of data.
+   * `initialPageParam` may be specified when using the
+   * endpoint, to override the default value.
+   * `maxPages` and `getPreviousPageParam` are both optional.
+   * 
+   * @example
+   * 
+   * ```ts
+   * // codeblock-meta title="infiniteQueryOptions example"
+   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+   * 
+   * type Pokemon = {
+   *   id: string
+   *   name: string
+   * }
+   * 
+   * const pokemonApi = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+   *   endpoints: (build) => ({
+   *     getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({
+   *       infiniteQueryOptions: {
+   *         initialPageParam: 0,
+   *         maxPages: 3,
+   *         getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>
+   *           lastPageParam + 1,
+   *         getPreviousPageParam: (
+   *           firstPage,
+   *           allPages,
+   *           firstPageParam,
+   *           allPageParams,
+   *         ) => {
+   *           return firstPageParam > 0 ? firstPageParam - 1 : undefined
+   *         },
+   *       },
+   *       query({pageParam}) {
+   *         return `https://example.com/listItems?page=${pageParam}`
+   *       },
+   *     }),
+   *   }),
+   * })
+   
+   * ```
+   */
+  infiniteQueryOptions: InfiniteQueryConfigOptions<
+    ResultType,
+    PageParam,
+    QueryArg
+  >
+
+  /**
+   * Can be provided to return a custom cache key value based on the query arguments.
+   *
+   * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key.  It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.
+   *
+   * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean.  If it returns a string, that value will be used as the cache key directly.  If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`.  This simplifies the use case of stripping out args you don't want included in the cache key.
+   *
+   *
+   * @example
+   *
+   * ```ts
+   * // codeblock-meta title="serializeQueryArgs : exclude value"
+   *
+   * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'
+   * interface Post {
+   *   id: number
+   *   name: string
+   * }
+   *
+   * interface MyApiClient {
+   *   fetchPost: (id: string) => Promise<Post>
+   * }
+   *
+   * createApi({
+   *  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *  endpoints: (build) => ({
+   *    // Example: an endpoint with an API client passed in as an argument,
+   *    // but only the item ID should be used as the cache key
+   *    getPost: build.query<Post, { id: string; client: MyApiClient }>({
+   *      queryFn: async ({ id, client }) => {
+   *        const post = await client.fetchPost(id)
+   *        return { data: post }
+   *      },
+   *      // highlight-start
+   *      serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {
+   *        const { id } = queryArgs
+   *        // This can return a string, an object, a number, or a boolean.
+   *        // If it returns an object, number or boolean, that value
+   *        // will be serialized automatically via `defaultSerializeQueryArgs`
+   *        return { id } // omit `client` from the cache key
+   *
+   *        // Alternately, you can use `defaultSerializeQueryArgs` yourself:
+   *        // return defaultSerializeQueryArgs({
+   *        //   endpointName,
+   *        //   queryArgs: { id },
+   *        //   endpointDefinition
+   *        // })
+   *        // Or  create and return a string yourself:
+   *        // return `getPost(${id})`
+   *      },
+   *      // highlight-end
+   *    }),
+   *  }),
+   *})
+   * ```
+   */
+  serializeQueryArgs?: SerializeQueryArgs<
+    QueryArg,
+    string | number | boolean | Record<any, any>
+  >
+
+  /**
+   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+   */
+  Types?: InfiniteQueryTypes<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    TagTypes,
+    ResultType,
+    ReducerPath
+  >
+}
+
+export type InfiniteQueryDefinition<
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+  TagTypes extends string,
+  ResultType,
+  ReducerPath extends string = string,
+  RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>,
+> =
+  // Infinite query endpoints receive `{queryArg, pageParam}`
+  BaseEndpointDefinition<
+    InfiniteQueryCombinedArg<QueryArg, PageParam>,
+    BaseQuery,
+    ResultType,
+    RawResultType
+  > &
+    InfiniteQueryExtraOptions<
+      TagTypes,
+      ResultType,
+      QueryArg,
+      PageParam,
+      BaseQuery,
+      ReducerPath
+    >
+
+type MutationTypes<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  TagTypes extends string,
+  ResultType,
+  ReducerPath extends string = string,
+> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {
+  /**
+   * The endpoint definition type. To be used with some internal generic types.
+   * @example
+   * ```ts
+   * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...
+   * ```
+   */
+  MutationDefinition: MutationDefinition<
+    QueryArg,
+    BaseQuery,
+    TagTypes,
+    ResultType,
+    ReducerPath
+  >
+  TagTypes: TagTypes
+  ReducerPath: ReducerPath
+}
+
+/**
+ * @public
+ */
+export interface MutationExtraOptions<
+  TagTypes extends string,
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  ReducerPath extends string = string,
+> extends CacheLifecycleMutationExtraOptions<
+      ResultType,
+      QueryArg,
+      BaseQuery,
+      ReducerPath
+    >,
+    QueryLifecycleMutationExtraOptions<
+      ResultType,
+      QueryArg,
+      BaseQuery,
+      ReducerPath
+    > {
+  type: DefinitionType.mutation
+
+  /**
+   * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.
+   * Expects the same shapes as `providesTags`.
+   *
+   * @example
+   *
+   * ```ts
+   * // codeblock-meta title="invalidatesTags example"
+   * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+   * interface Post {
+   *   id: number
+   *   name: string
+   * }
+   * type PostsResponse = Post[]
+   *
+   * const api = createApi({
+   *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+   *   tagTypes: ['Posts'],
+   *   endpoints: (build) => ({
+   *     getPosts: build.query<PostsResponse, void>({
+   *       query: () => 'posts',
+   *       providesTags: (result) =>
+   *         result
+   *           ? [
+   *               ...result.map(({ id }) => ({ type: 'Posts' as const, id })),
+   *               { type: 'Posts', id: 'LIST' },
+   *             ]
+   *           : [{ type: 'Posts', id: 'LIST' }],
+   *     }),
+   *     addPost: build.mutation<Post, Partial<Post>>({
+   *       query(body) {
+   *         return {
+   *           url: `posts`,
+   *           method: 'POST',
+   *           body,
+   *         }
+   *       },
+   *       // highlight-start
+   *       invalidatesTags: [{ type: 'Posts', id: 'LIST' }],
+   *       // highlight-end
+   *     }),
+   *   })
+   * })
+   * ```
+   */
+  invalidatesTags?: ResultDescription<
+    TagTypes,
+    ResultType,
+    QueryArg,
+    BaseQueryError<BaseQuery>,
+    BaseQueryMeta<BaseQuery>
+  >
+  /**
+   * Not to be used. A mutation should not provide tags to the cache.
+   */
+  providesTags?: never
+
+  /**
+   * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
+   */
+  Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>
+}
+
+export type MutationDefinition<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  TagTypes extends string,
+  ResultType,
+  ReducerPath extends string = string,
+  RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>,
+> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType, RawResultType> &
+  MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>
+
+export type EndpointDefinition<
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  TagTypes extends string,
+  ResultType,
+  ReducerPath extends string = string,
+  PageParam = any,
+  RawResultType extends BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>,
+> =
+  | QueryDefinition<
+      QueryArg,
+      BaseQuery,
+      TagTypes,
+      ResultType,
+      ReducerPath,
+      RawResultType
+    >
+  | MutationDefinition<
+      QueryArg,
+      BaseQuery,
+      TagTypes,
+      ResultType,
+      ReducerPath,
+      RawResultType
+    >
+  | InfiniteQueryDefinition<
+      QueryArg,
+      PageParam,
+      BaseQuery,
+      TagTypes,
+      ResultType,
+      ReducerPath,
+      RawResultType
+    >
+
+export type EndpointDefinitions = Record<
+  string,
+  EndpointDefinition<any, any, any, any, any, any, any>
+>
+
+export function isQueryDefinition(
+  e: EndpointDefinition<any, any, any, any, any, any, any>,
+): e is QueryDefinition<any, any, any, any, any, any> {
+  return e.type === DefinitionType.query
+}
+
+export function isMutationDefinition(
+  e: EndpointDefinition<any, any, any, any, any, any, any>,
+): e is MutationDefinition<any, any, any, any, any, any> {
+  return e.type === DefinitionType.mutation
+}
+
+export function isInfiniteQueryDefinition(
+  e: EndpointDefinition<any, any, any, any, any, any, any>,
+): e is InfiniteQueryDefinition<any, any, any, any, any, any, any> {
+  return e.type === DefinitionType.infinitequery
+}
+
+export function isAnyQueryDefinition(
+  e: EndpointDefinition<any, any, any, any>,
+): e is
+  | QueryDefinition<any, any, any, any>
+  | InfiniteQueryDefinition<any, any, any, any, any> {
+  return isQueryDefinition(e) || isInfiniteQueryDefinition(e)
+}
+
+export type EndpointBuilder<
+  BaseQuery extends BaseQueryFn,
+  TagTypes extends string,
+  ReducerPath extends string,
+> = {
+  /**
+   * An endpoint definition that retrieves data, and may provide tags to the cache.
+   *
+   * @example
+   * ```js
+   * // codeblock-meta title="Example of all query endpoint options"
+   * const api = createApi({
+   *  baseQuery,
+   *  endpoints: (build) => ({
+   *    getPost: build.query({
+   *      query: (id) => ({ url: `post/${id}` }),
+   *      // Pick out data and prevent nested properties in a hook or selector
+   *      transformResponse: (response) => response.data,
+   *      // Pick out error and prevent nested properties in a hook or selector
+   *      transformErrorResponse: (response) => response.error,
+   *      // `result` is the server response
+   *      providesTags: (result, error, id) => [{ type: 'Post', id }],
+   *      // trigger side effects or optimistic updates
+   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},
+   *      // handle subscriptions etc
+   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},
+   *    }),
+   *  }),
+   *});
+   *```
+   */
+  query<
+    ResultType,
+    QueryArg,
+    RawResultType extends
+      BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>,
+  >(
+    definition: OmitFromUnion<
+      QueryDefinition<
+        QueryArg,
+        BaseQuery,
+        TagTypes,
+        ResultType,
+        ReducerPath,
+        RawResultType
+      >,
+      'type'
+    >,
+  ): QueryDefinition<
+    QueryArg,
+    BaseQuery,
+    TagTypes,
+    ResultType,
+    ReducerPath,
+    RawResultType
+  >
+
+  /**
+   * An endpoint definition that alters data on the server or will possibly invalidate the cache.
+   *
+   * @example
+   * ```js
+   * // codeblock-meta title="Example of all mutation endpoint options"
+   * const api = createApi({
+   *   baseQuery,
+   *   endpoints: (build) => ({
+   *     updatePost: build.mutation({
+   *       query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),
+   *       // Pick out data and prevent nested properties in a hook or selector
+   *       transformResponse: (response) => response.data,
+   *       // Pick out error and prevent nested properties in a hook or selector
+   *       transformErrorResponse: (response) => response.error,
+   *       // `result` is the server response
+   *       invalidatesTags: (result, error, id) => [{ type: 'Post', id }],
+   *      // trigger side effects or optimistic updates
+   *      onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},
+   *      // handle subscriptions etc
+   *      onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},
+   *     }),
+   *   }),
+   * });
+   * ```
+   */
+  mutation<
+    ResultType,
+    QueryArg,
+    RawResultType extends
+      BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>,
+  >(
+    definition: OmitFromUnion<
+      MutationDefinition<
+        QueryArg,
+        BaseQuery,
+        TagTypes,
+        ResultType,
+        ReducerPath,
+        RawResultType
+      >,
+      'type'
+    >,
+  ): MutationDefinition<
+    QueryArg,
+    BaseQuery,
+    TagTypes,
+    ResultType,
+    ReducerPath,
+    RawResultType
+  >
+
+  infiniteQuery<
+    ResultType,
+    QueryArg,
+    PageParam,
+    RawResultType extends
+      BaseQueryResult<BaseQuery> = BaseQueryResult<BaseQuery>,
+  >(
+    definition: OmitFromUnion<
+      InfiniteQueryDefinition<
+        QueryArg,
+        PageParam,
+        BaseQuery,
+        TagTypes,
+        ResultType,
+        ReducerPath,
+        RawResultType
+      >,
+      'type'
+    >,
+  ): InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    TagTypes,
+    ResultType,
+    ReducerPath,
+    RawResultType
+  >
+}
+
+export type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T
+
+export function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(
+  description:
+    | ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType>
+    | undefined,
+  result: ResultType | undefined,
+  error: ErrorType | undefined,
+  queryArg: QueryArg,
+  meta: MetaType | undefined,
+  assertTagTypes: AssertTagTypes,
+): readonly FullTagDescription<string>[] {
+  if (isFunction(description)) {
+    return description(
+      result as ResultType,
+      error as undefined,
+      queryArg,
+      meta as MetaType,
+    )
+      .filter(isNotNullish)
+      .map(expandTagDescription)
+      .map(assertTagTypes)
+  }
+  if (Array.isArray(description)) {
+    return description.map(expandTagDescription).map(assertTagTypes)
+  }
+  return []
+}
+
+function isFunction<T>(t: T): t is Extract<T, Function> {
+  return typeof t === 'function'
+}
+
+export function expandTagDescription(
+  description: TagDescription<string>,
+): FullTagDescription<string> {
+  return typeof description === 'string' ? { type: description } : description
+}
+
+export type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any, any>> =
+  D extends BaseEndpointDefinition<infer QA, any, any, any> ? QA : never
+
+// Just extracting `QueryArg` from `BaseEndpointDefinition`
+// doesn't sufficiently match here.
+// We need to explicitly match against `InfiniteQueryDefinition`
+export type InfiniteQueryArgFrom<
+  D extends BaseEndpointDefinition<any, any, any, any>,
+> =
+  D extends InfiniteQueryDefinition<infer QA, any, any, any, any, any, any>
+    ? QA
+    : never
+
+export type QueryArgFromAnyQuery<
+  D extends BaseEndpointDefinition<any, any, any, any>,
+> =
+  D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>
+    ? InfiniteQueryArgFrom<D>
+    : D extends QueryDefinition<any, any, any, any, any, any>
+      ? QueryArgFrom<D>
+      : never
+
+export type ResultTypeFrom<
+  D extends BaseEndpointDefinition<any, any, any, any>,
+> = D extends BaseEndpointDefinition<any, any, infer RT, any> ? RT : unknown
+
+export type ReducerPathFrom<
+  D extends EndpointDefinition<any, any, any, any, any, any, any>,
+> =
+  D extends EndpointDefinition<any, any, any, any, infer RP, any, any>
+    ? RP
+    : unknown
+
+export type TagTypesFrom<
+  D extends EndpointDefinition<any, any, any, any, any, any, any>,
+> =
+  D extends EndpointDefinition<any, any, infer TT, any, any, any, any>
+    ? TT
+    : unknown
+
+export type PageParamFrom<
+  D extends InfiniteQueryDefinition<any, any, any, any, any, any, any>,
+> =
+  D extends InfiniteQueryDefinition<any, infer PP, any, any, any, any, any>
+    ? PP
+    : unknown
+
+export type InfiniteQueryCombinedArg<QueryArg, PageParam> = {
+  queryArg: QueryArg
+  pageParam: PageParam
+}
+
+export type TagTypesFromApi<T> =
+  T extends Api<any, any, any, infer TagTypes> ? TagTypes : never
+
+export type DefinitionsFromApi<T> =
+  T extends Api<any, infer Definitions, any, any> ? Definitions : never
+
+export type TransformedResponse<
+  NewDefinitions extends EndpointDefinitions,
+  K,
+  ResultType,
+> = K extends keyof NewDefinitions
+  ? NewDefinitions[K]['transformResponse'] extends undefined
+    ? ResultType
+    : UnwrapPromise<
+        ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>
+      >
+  : ResultType
+
+export type OverrideResultType<Definition, NewResultType> =
+  Definition extends QueryDefinition<
+    infer QueryArg,
+    infer BaseQuery,
+    infer TagTypes,
+    any,
+    infer ReducerPath
+  >
+    ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath>
+    : Definition extends MutationDefinition<
+          infer QueryArg,
+          infer BaseQuery,
+          infer TagTypes,
+          any,
+          infer ReducerPath
+        >
+      ? MutationDefinition<
+          QueryArg,
+          BaseQuery,
+          TagTypes,
+          NewResultType,
+          ReducerPath
+        >
+      : Definition extends InfiniteQueryDefinition<
+            infer QueryArg,
+            infer PageParam,
+            infer BaseQuery,
+            infer TagTypes,
+            any,
+            infer ReducerPath
+          >
+        ? InfiniteQueryDefinition<
+            QueryArg,
+            PageParam,
+            BaseQuery,
+            TagTypes,
+            NewResultType,
+            ReducerPath
+          >
+        : never
+
+export type UpdateDefinitions<
+  Definitions extends EndpointDefinitions,
+  NewTagTypes extends string,
+  NewDefinitions extends EndpointDefinitions,
+> = {
+  [K in keyof Definitions]: Definitions[K] extends QueryDefinition<
+    infer QueryArg,
+    infer BaseQuery,
+    any,
+    infer ResultType,
+    infer ReducerPath
+  >
+    ? QueryDefinition<
+        QueryArg,
+        BaseQuery,
+        NewTagTypes,
+        TransformedResponse<NewDefinitions, K, ResultType>,
+        ReducerPath
+      >
+    : Definitions[K] extends MutationDefinition<
+          infer QueryArg,
+          infer BaseQuery,
+          any,
+          infer ResultType,
+          infer ReducerPath
+        >
+      ? MutationDefinition<
+          QueryArg,
+          BaseQuery,
+          NewTagTypes,
+          TransformedResponse<NewDefinitions, K, ResultType>,
+          ReducerPath
+        >
+      : Definitions[K] extends InfiniteQueryDefinition<
+            infer QueryArg,
+            infer PageParam,
+            infer BaseQuery,
+            any,
+            infer ResultType,
+            infer ReducerPath
+          >
+        ? InfiniteQueryDefinition<
+            QueryArg,
+            PageParam,
+            BaseQuery,
+            NewTagTypes,
+            TransformedResponse<NewDefinitions, K, ResultType>,
+            ReducerPath
+          >
+        : never
+}
Index: node_modules/@reduxjs/toolkit/src/query/fakeBaseQuery.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/fakeBaseQuery.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/fakeBaseQuery.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import type { BaseQueryFn } from './baseQueryTypes'
+
+export const _NEVER = /* @__PURE__ */ Symbol()
+export type NEVER = typeof _NEVER
+
+/**
+ * Creates a "fake" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.
+ * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.
+ */
+export function fakeBaseQuery<ErrorType>(): BaseQueryFn<
+  void,
+  NEVER,
+  ErrorType,
+  {}
+> {
+  return function () {
+    throw new Error(
+      'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.',
+    )
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/fetchBaseQuery.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/fetchBaseQuery.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/fetchBaseQuery.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,375 @@
+import { joinUrls } from './utils'
+import { isPlainObject } from './core/rtkImports'
+import type { BaseQueryApi, BaseQueryFn } from './baseQueryTypes'
+import type { MaybePromise, Override } from './tsHelpers'
+
+export type ResponseHandler =
+  | 'content-type'
+  | 'json'
+  | 'text'
+  | ((response: Response) => Promise<any>)
+
+type CustomRequestInit = Override<
+  RequestInit,
+  {
+    headers?:
+      | Headers
+      | string[][]
+      | Record<string, string | undefined>
+      | undefined
+  }
+>
+
+export interface FetchArgs extends CustomRequestInit {
+  url: string
+  params?: Record<string, any>
+  body?: any
+  responseHandler?: ResponseHandler
+  validateStatus?: (response: Response, body: any) => boolean
+  /**
+   * A number in milliseconds that represents that maximum time a request can take before timing out.
+   */
+  timeout?: number
+}
+
+/**
+ * A mini-wrapper that passes arguments straight through to
+ * {@link [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)}.
+ * Avoids storing `fetch` in a closure, in order to permit mocking/monkey-patching.
+ */
+const defaultFetchFn: typeof fetch = (...args) => fetch(...args)
+
+const defaultValidateStatus = (response: Response) =>
+  response.status >= 200 && response.status <= 299
+
+const defaultIsJsonContentType = (headers: Headers) =>
+  /*applicat*/ /ion\/(vnd\.api\+)?json/.test(headers.get('content-type') || '')
+
+export type FetchBaseQueryError =
+  | {
+      /**
+       * * `number`:
+       *   HTTP status code
+       */
+      status: number
+      data: unknown
+    }
+  | {
+      /**
+       * * `"FETCH_ERROR"`:
+       *   An error that occurred during execution of `fetch` or the `fetchFn` callback option
+       **/
+      status: 'FETCH_ERROR'
+      data?: undefined
+      error: string
+    }
+  | {
+      /**
+       * * `"PARSING_ERROR"`:
+       *   An error happened during parsing.
+       *   Most likely a non-JSON-response was returned with the default `responseHandler` "JSON",
+       *   or an error occurred while executing a custom `responseHandler`.
+       **/
+      status: 'PARSING_ERROR'
+      originalStatus: number
+      data: string
+      error: string
+    }
+  | {
+      /**
+       * * `"TIMEOUT_ERROR"`:
+       *   Request timed out
+       **/
+      status: 'TIMEOUT_ERROR'
+      data?: undefined
+      error: string
+    }
+  | {
+      /**
+       * * `"CUSTOM_ERROR"`:
+       *   A custom error type that you can return from your `queryFn` where another error might not make sense.
+       **/
+      status: 'CUSTOM_ERROR'
+      data?: unknown
+      error: string
+    }
+
+function stripUndefined(obj: any) {
+  if (!isPlainObject(obj)) {
+    return obj
+  }
+  const copy: Record<string, any> = { ...obj }
+  for (const [k, v] of Object.entries(copy)) {
+    if (v === undefined) delete copy[k]
+  }
+  return copy
+}
+
+export type FetchBaseQueryArgs = {
+  baseUrl?: string
+  prepareHeaders?: (
+    headers: Headers,
+    api: Pick<
+      BaseQueryApi,
+      'getState' | 'extra' | 'endpoint' | 'type' | 'forced'
+    > & { arg: string | FetchArgs; extraOptions: unknown },
+  ) => MaybePromise<Headers | void>
+  fetchFn?: (
+    input: RequestInfo,
+    init?: RequestInit | undefined,
+  ) => Promise<Response>
+  paramsSerializer?: (params: Record<string, any>) => string
+  /**
+   * By default, we only check for 'application/json' and 'application/vnd.api+json' as the content-types for json. If you need to support another format, you can pass
+   * in a predicate function for your given api to get the same automatic stringifying behavior
+   * @example
+   * ```ts
+   * const isJsonContentType = (headers: Headers) => ["application/vnd.api+json", "application/json", "application/vnd.hal+json"].includes(headers.get("content-type")?.trim());
+   * ```
+   */
+  isJsonContentType?: (headers: Headers) => boolean
+  /**
+   * Defaults to `application/json`;
+   */
+  jsonContentType?: string
+
+  /**
+   * Custom replacer function used when calling `JSON.stringify()`;
+   */
+  jsonReplacer?: (this: any, key: string, value: any) => any
+} & RequestInit &
+  Pick<FetchArgs, 'responseHandler' | 'validateStatus' | 'timeout'>
+
+export type FetchBaseQueryMeta = { request: Request; response?: Response }
+
+/**
+ * This is a very small wrapper around fetch that aims to simplify requests.
+ *
+ * @example
+ * ```ts
+ * const baseQuery = fetchBaseQuery({
+ *   baseUrl: 'https://api.your-really-great-app.com/v1/',
+ *   prepareHeaders: (headers, { getState }) => {
+ *     const token = (getState() as RootState).auth.token;
+ *     // If we have a token set in state, let's assume that we should be passing it.
+ *     if (token) {
+ *       headers.set('authorization', `Bearer ${token}`);
+ *     }
+ *     return headers;
+ *   },
+ * })
+ * ```
+ *
+ * @param {string} baseUrl
+ * The base URL for an API service.
+ * Typically in the format of https://example.com/
+ *
+ * @param {(headers: Headers, api: { getState: () => unknown; arg: string | FetchArgs; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders
+ * An optional function that can be used to inject headers on requests.
+ * Provides a Headers object, most of the `BaseQueryApi` (`dispatch` is not available), and the arg passed into the query function.
+ * Useful for setting authentication or headers that need to be set conditionally.
+ *
+ * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers
+ *
+ * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>} fetchFn
+ * Accepts a custom `fetch` function if you do not want to use the default on the window.
+ * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`
+ *
+ * @param {(params: Record<string, unknown>) => string} paramsSerializer
+ * An optional function that can be used to stringify querystring parameters.
+ *
+ * @param {(headers: Headers) => boolean} isJsonContentType
+ * An optional predicate function to determine if `JSON.stringify()` should be called on the `body` arg of `FetchArgs`
+ *
+ * @param {string} jsonContentType Used when automatically setting the content-type header for a request with a jsonifiable body that does not have an explicit content-type header. Defaults to `application/json`.
+ *
+ * @param {(this: any, key: string, value: any) => any} jsonReplacer Custom replacer function used when calling `JSON.stringify()`.
+ *
+ * @param {number} timeout
+ * A number in milliseconds that represents the maximum time a request can take before timing out.
+ */
+
+export function fetchBaseQuery({
+  baseUrl,
+  prepareHeaders = (x) => x,
+  fetchFn = defaultFetchFn,
+  paramsSerializer,
+  isJsonContentType = defaultIsJsonContentType,
+  jsonContentType = 'application/json',
+  jsonReplacer,
+  timeout: defaultTimeout,
+  responseHandler: globalResponseHandler,
+  validateStatus: globalValidateStatus,
+  ...baseFetchOptions
+}: FetchBaseQueryArgs = {}): BaseQueryFn<
+  string | FetchArgs,
+  unknown,
+  FetchBaseQueryError,
+  {},
+  FetchBaseQueryMeta
+> {
+  if (typeof fetch === 'undefined' && fetchFn === defaultFetchFn) {
+    console.warn(
+      'Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.',
+    )
+  }
+  return async (arg, api, extraOptions) => {
+    const { getState, extra, endpoint, forced, type } = api
+    let meta: FetchBaseQueryMeta | undefined
+    let {
+      url,
+      headers = new Headers(baseFetchOptions.headers),
+      params = undefined,
+      responseHandler = globalResponseHandler ?? ('json' as const),
+      validateStatus = globalValidateStatus ?? defaultValidateStatus,
+      timeout = defaultTimeout,
+      ...rest
+    } = typeof arg == 'string' ? { url: arg } : arg
+
+    let abortController: AbortController | undefined,
+      signal = api.signal
+    if (timeout) {
+      abortController = new AbortController()
+      api.signal.addEventListener('abort', abortController.abort)
+      signal = abortController.signal
+    }
+
+    let config: RequestInit = {
+      ...baseFetchOptions,
+      signal,
+      ...rest,
+    }
+
+    headers = new Headers(stripUndefined(headers))
+    config.headers =
+      (await prepareHeaders(headers, {
+        getState,
+        arg,
+        extra,
+        endpoint,
+        forced,
+        type,
+        extraOptions,
+      })) || headers
+
+    // Only set the content-type to json if appropriate. Will not be true for FormData, ArrayBuffer, Blob, etc.
+    const isJsonifiable = (body: any) =>
+      typeof body === 'object' &&
+      (isPlainObject(body) ||
+        Array.isArray(body) ||
+        typeof body.toJSON === 'function')
+
+    if (!config.headers.has('content-type') && isJsonifiable(config.body)) {
+      config.headers.set('content-type', jsonContentType)
+    }
+
+    if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {
+      config.body = JSON.stringify(config.body, jsonReplacer)
+    }
+
+    if (params) {
+      const divider = ~url.indexOf('?') ? '&' : '?'
+      const query = paramsSerializer
+        ? paramsSerializer(params)
+        : new URLSearchParams(stripUndefined(params))
+      url += divider + query
+    }
+
+    url = joinUrls(baseUrl, url)
+
+    const request = new Request(url, config)
+    const requestClone = new Request(url, config)
+    meta = { request: requestClone }
+
+    let response,
+      timedOut = false,
+      timeoutId =
+        abortController &&
+        setTimeout(() => {
+          timedOut = true
+          abortController!.abort()
+        }, timeout)
+    try {
+      response = await fetchFn(request)
+    } catch (e) {
+      return {
+        error: {
+          status: timedOut ? 'TIMEOUT_ERROR' : 'FETCH_ERROR',
+          error: String(e),
+        },
+        meta,
+      }
+    } finally {
+      if (timeoutId) clearTimeout(timeoutId)
+      abortController?.signal.removeEventListener(
+        'abort',
+        abortController.abort,
+      )
+    }
+    const responseClone = response.clone()
+
+    meta.response = responseClone
+
+    let resultData: any
+    let responseText: string = ''
+    try {
+      let handleResponseError
+      await Promise.all([
+        handleResponse(response, responseHandler).then(
+          (r) => (resultData = r),
+          (e) => (handleResponseError = e),
+        ),
+        // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182
+        // we *have* to "use up" both streams at the same time or they will stop running in node-fetch scenarios
+        responseClone.text().then(
+          (r) => (responseText = r),
+          () => {},
+        ),
+      ])
+      if (handleResponseError) throw handleResponseError
+    } catch (e) {
+      return {
+        error: {
+          status: 'PARSING_ERROR',
+          originalStatus: response.status,
+          data: responseText,
+          error: String(e),
+        },
+        meta,
+      }
+    }
+
+    return validateStatus(response, resultData)
+      ? {
+          data: resultData,
+          meta,
+        }
+      : {
+          error: {
+            status: response.status,
+            data: resultData,
+          },
+          meta,
+        }
+  }
+
+  async function handleResponse(
+    response: Response,
+    responseHandler: ResponseHandler,
+  ) {
+    if (typeof responseHandler === 'function') {
+      return responseHandler(response)
+    }
+
+    if (responseHandler === 'content-type') {
+      responseHandler = isJsonContentType(response.headers) ? 'json' : 'text'
+    }
+
+    if (responseHandler === 'json') {
+      const text = await response.text()
+      return text.length ? JSON.parse(text) : null
+    }
+
+    return response.text()
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,105 @@
+// This must remain here so that the `mangleErrors.cjs` build script
+// does not have to import this into each source file it rewrites.
+import { formatProdErrorMessage } from '@reduxjs/toolkit'
+
+export type {
+  CombinedState,
+  QueryCacheKey,
+  QueryKeys,
+  QuerySubState,
+  RootState,
+  SubscriptionOptions,
+} from './core/apiState'
+export { QueryStatus } from './core/apiState'
+export type { Api, ApiContext, Module } from './apiTypes'
+
+export type {
+  BaseQueryApi,
+  BaseQueryArg,
+  BaseQueryEnhancer,
+  BaseQueryError,
+  BaseQueryExtraOptions,
+  BaseQueryFn,
+  BaseQueryMeta,
+  BaseQueryResult,
+  QueryReturnValue,
+} from './baseQueryTypes'
+export type {
+  BaseEndpointDefinition,
+  EndpointDefinitions,
+  EndpointDefinition,
+  EndpointBuilder,
+  QueryDefinition,
+  MutationDefinition,
+  MutationExtraOptions,
+  InfiniteQueryArgFrom,
+  InfiniteQueryDefinition,
+  InfiniteQueryExtraOptions,
+  PageParamFrom,
+  TagDescription,
+  QueryArgFrom,
+  QueryExtraOptions,
+  ResultTypeFrom,
+  DefinitionType,
+  DefinitionsFromApi,
+  OverrideResultType,
+  ResultDescription,
+  TagTypesFromApi,
+  UpdateDefinitions,
+  SchemaFailureHandler,
+  SchemaFailureConverter,
+  SchemaFailureInfo,
+} from './endpointDefinitions'
+export { fetchBaseQuery } from './fetchBaseQuery'
+export type {
+  FetchBaseQueryArgs,
+  FetchBaseQueryError,
+  FetchBaseQueryMeta,
+  FetchArgs,
+} from './fetchBaseQuery'
+export { retry } from './retry'
+export type { RetryOptions } from './retry'
+export { setupListeners } from './core/setupListeners'
+export { skipToken } from './core/buildSelectors'
+export type {
+  QueryResultSelectorResult,
+  MutationResultSelectorResult,
+  SkipToken,
+} from './core/buildSelectors'
+export type {
+  QueryActionCreatorResult,
+  MutationActionCreatorResult,
+  StartQueryActionCreatorOptions,
+} from './core/buildInitiate'
+export type { CreateApi, CreateApiOptions } from './createApi'
+export { buildCreateApi } from './createApi'
+export { _NEVER, fakeBaseQuery } from './fakeBaseQuery'
+export { copyWithStructuralSharing } from './utils/copyWithStructuralSharing'
+export { createApi, coreModule, coreModuleName } from './core/index'
+export type {
+  InfiniteData,
+  InfiniteQueryActionCreatorResult,
+  InfiniteQueryConfigOptions,
+  InfiniteQueryResultSelectorResult,
+  InfiniteQuerySubState,
+  TypedMutationOnQueryStarted,
+  TypedQueryOnQueryStarted,
+} from './core/index'
+export type {
+  ApiEndpointMutation,
+  ApiEndpointQuery,
+  ApiEndpointInfiniteQuery,
+  ApiModules,
+  CoreModule,
+  PrefetchOptions,
+} from './core/module'
+export { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs'
+export type { SerializeQueryArgs } from './defaultSerializeQueryArgs'
+
+export type {
+  Id as TSHelpersId,
+  NoInfer as TSHelpersNoInfer,
+  Override as TSHelpersOverride,
+} from './tsHelpers'
+
+export { NamedSchemaError } from './standardSchema'
Index: node_modules/@reduxjs/toolkit/src/query/react/ApiProvider.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/react/ApiProvider.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/react/ApiProvider.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+import { configureStore } from '@reduxjs/toolkit'
+import type { Context } from 'react'
+import { useContext } from 'react'
+import { useEffect } from 'react'
+import * as React from 'react'
+import type { ReactReduxContextValue } from 'react-redux'
+import { Provider, ReactReduxContext } from 'react-redux'
+import { setupListeners } from '@reduxjs/toolkit/query'
+import type { Api } from '@reduxjs/toolkit/query'
+
+/**
+ * Can be used as a `Provider` if you **do not already have a Redux store**.
+ *
+ * @example
+ * ```tsx
+ * // codeblock-meta no-transpile title="Basic usage - wrap your App with ApiProvider"
+ * import * as React from 'react';
+ * import { ApiProvider } from '@reduxjs/toolkit/query/react';
+ * import { Pokemon } from './features/Pokemon';
+ *
+ * function App() {
+ *   return (
+ *     <ApiProvider api={api}>
+ *       <Pokemon />
+ *     </ApiProvider>
+ *   );
+ * }
+ * ```
+ *
+ * @remarks
+ * Using this together with an existing redux store, both will
+ * conflict with each other - please use the traditional redux setup
+ * in that case.
+ */
+export function ApiProvider(props: {
+  children: any
+  api: Api<any, {}, any, any>
+  setupListeners?: Parameters<typeof setupListeners>[1] | false
+  context?: Context<ReactReduxContextValue | null>
+}) {
+  const context = props.context || ReactReduxContext
+  const existingContext = useContext(context)
+  if (existingContext) {
+    throw new Error(
+      'Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.',
+    )
+  }
+  const [store] = React.useState(() =>
+    configureStore({
+      reducer: {
+        [props.api.reducerPath]: props.api.reducer,
+      },
+      middleware: (gDM) => gDM().concat(props.api.middleware),
+    }),
+  )
+  // Adds the event listeners for online/offline/focus/etc
+  useEffect(
+    (): undefined | (() => void) =>
+      props.setupListeners === false
+        ? undefined
+        : setupListeners(store.dispatch, props.setupListeners),
+    [props.setupListeners, store.dispatch],
+  )
+
+  return (
+    <Provider store={store} context={context}>
+      {props.children}
+    </Provider>
+  )
+}
Index: node_modules/@reduxjs/toolkit/src/query/react/buildHooks.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/react/buildHooks.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/react/buildHooks.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2209 @@
+import type {
+  Selector,
+  ThunkAction,
+  ThunkDispatch,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import type {
+  Api,
+  ApiContext,
+  ApiEndpointInfiniteQuery,
+  ApiEndpointMutation,
+  ApiEndpointQuery,
+  BaseQueryFn,
+  CoreModule,
+  EndpointDefinitions,
+  InfiniteQueryActionCreatorResult,
+  InfiniteQueryArgFrom,
+  InfiniteQueryDefinition,
+  InfiniteQueryResultSelectorResult,
+  InfiniteQuerySubState,
+  MutationActionCreatorResult,
+  MutationDefinition,
+  MutationResultSelectorResult,
+  PageParamFrom,
+  PrefetchOptions,
+  QueryActionCreatorResult,
+  QueryArgFrom,
+  QueryCacheKey,
+  QueryDefinition,
+  QueryKeys,
+  QueryResultSelectorResult,
+  QuerySubState,
+  ResultTypeFrom,
+  RootState,
+  SerializeQueryArgs,
+  SkipToken,
+  SubscriptionOptions,
+  TSHelpersId,
+  TSHelpersNoInfer,
+  TSHelpersOverride,
+} from '@reduxjs/toolkit/query'
+import {
+  defaultSerializeQueryArgs,
+  QueryStatus,
+  skipToken,
+} from '@reduxjs/toolkit/query'
+import type { DependencyList } from 'react'
+import {
+  useCallback,
+  useDebugValue,
+  useEffect,
+  useLayoutEffect,
+  useMemo,
+  useRef,
+  useState,
+} from 'react'
+import { shallowEqual } from 'react-redux'
+
+import type { SubscriptionSelectors } from '../core/buildMiddleware/index'
+import type { InfiniteData, InfiniteQueryConfigOptions } from '../core/index'
+import type { UninitializedValue } from './constants'
+import { UNINITIALIZED_VALUE } from './constants'
+import type { ReactHooksModuleOptions } from './module'
+import { useStableQueryArgs } from './useSerializedStableValue'
+import { useShallowStableValue } from './useShallowStableValue'
+import type { InfiniteQueryDirection } from '../core/apiState'
+import { isInfiniteQueryDefinition } from '../endpointDefinitions'
+import type { StartInfiniteQueryActionCreator } from '../core/buildInitiate'
+
+// Copy-pasted from React-Redux
+const canUseDOM = () =>
+  !!(
+    typeof window !== 'undefined' &&
+    typeof window.document !== 'undefined' &&
+    typeof window.document.createElement !== 'undefined'
+  )
+
+const isDOM = /* @__PURE__ */ canUseDOM()
+
+// Under React Native, we know that we always want to use useLayoutEffect
+
+const isRunningInReactNative = () =>
+  typeof navigator !== 'undefined' && navigator.product === 'ReactNative'
+
+const isReactNative = /* @__PURE__ */ isRunningInReactNative()
+
+const getUseIsomorphicLayoutEffect = () =>
+  isDOM || isReactNative ? useLayoutEffect : useEffect
+
+export const useIsomorphicLayoutEffect =
+  /* @__PURE__ */ getUseIsomorphicLayoutEffect()
+
+export type QueryHooks<
+  Definition extends QueryDefinition<any, any, any, any, any>,
+> = {
+  useQuery: UseQuery<Definition>
+  useLazyQuery: UseLazyQuery<Definition>
+  useQuerySubscription: UseQuerySubscription<Definition>
+  useLazyQuerySubscription: UseLazyQuerySubscription<Definition>
+  useQueryState: UseQueryState<Definition>
+}
+
+export type InfiniteQueryHooks<
+  Definition extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = {
+  useInfiniteQuery: UseInfiniteQuery<Definition>
+  useInfiniteQuerySubscription: UseInfiniteQuerySubscription<Definition>
+  useInfiniteQueryState: UseInfiniteQueryState<Definition>
+}
+
+export type MutationHooks<
+  Definition extends MutationDefinition<any, any, any, any, any>,
+> = {
+  useMutation: UseMutation<Definition>
+}
+
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.
+ *
+ * This hook combines the functionality of both [`useQueryState`](#usequerystate) and [`useQuerySubscription`](#usequerysubscription) together, and is intended to be used in the majority of situations.
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+export type UseQuery<D extends QueryDefinition<any, any, any, any>> = <
+  R extends Record<string, any> = UseQueryStateDefaultResult<D>,
+>(
+  arg: QueryArgFrom<D> | SkipToken,
+  options?: UseQuerySubscriptionOptions & UseQueryStateOptions<D, R>,
+) => UseQueryHookResult<D, R>
+
+export type TypedUseQuery<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+> = UseQuery<QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>>
+
+export type UseQueryHookResult<
+  D extends QueryDefinition<any, any, any, any>,
+  R = UseQueryStateDefaultResult<D>,
+> = UseQueryStateResult<D, R> & UseQuerySubscriptionResult<D>
+
+/**
+ * Helper type to manually type the result
+ * of the `useQuery` hook in userland code.
+ */
+export type TypedUseQueryHookResult<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  R = UseQueryStateDefaultResult<
+    QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+  >,
+> = TypedUseQueryStateResult<ResultType, QueryArg, BaseQuery, R> &
+  TypedUseQuerySubscriptionResult<ResultType, QueryArg, BaseQuery>
+
+export type UseQuerySubscriptionOptions = SubscriptionOptions & {
+  /**
+   * Prevents a query from automatically running.
+   *
+   * @remarks
+   * When `skip` is true (or `skipToken` is passed in as `arg`):
+   *
+   * - **If the query has cached data:**
+   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+   *   * The query will have a status of `uninitialized`
+   *   * If `skip: false` is set after the initial load, the cached result will be used
+   * - **If the query does not have cached data:**
+   *   * The query will have a status of `uninitialized`
+   *   * The query will not exist in the state when viewed with the dev tools
+   *   * The query will not automatically fetch on mount
+   *   * The query will not automatically run when additional components with the same query are added that do run
+   *
+   * @example
+   * ```tsx
+   * // codeblock-meta no-transpile title="Skip example"
+   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+   *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+   *     skip,
+   *   });
+   *
+   *   return (
+   *     <div>
+   *       {name} - {status}
+   *     </div>
+   *   );
+   * };
+   * ```
+   */
+  skip?: boolean
+  /**
+   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.
+   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.
+   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.
+   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.
+   *
+   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+   */
+  refetchOnMountOrArgChange?: boolean | number
+}
+
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.
+ *
+ * Note that this hook does not return a request status or cached data. For that use-case, see [`useQuery`](#usequery) or [`useQueryState`](#usequerystate).
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ */
+export type UseQuerySubscription<
+  D extends QueryDefinition<any, any, any, any>,
+> = (
+  arg: QueryArgFrom<D> | SkipToken,
+  options?: UseQuerySubscriptionOptions,
+) => UseQuerySubscriptionResult<D>
+
+export type TypedUseQuerySubscription<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+> = UseQuerySubscription<
+  QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+>
+
+export type UseQuerySubscriptionResult<
+  D extends QueryDefinition<any, any, any, any>,
+> = Pick<QueryActionCreatorResult<D>, 'refetch'>
+
+/**
+ * Helper type to manually type the result
+ * of the `useQuerySubscription` hook in userland code.
+ */
+export type TypedUseQuerySubscriptionResult<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+> = UseQuerySubscriptionResult<
+  QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+>
+
+export type UseLazyQueryLastPromiseInfo<
+  D extends QueryDefinition<any, any, any, any>,
+> = {
+  lastArg: QueryArgFrom<D>
+}
+
+/**
+ * A React hook similar to [`useQuery`](#usequery), but with manual control over when the data fetching occurs.
+ *
+ * This hook includes the functionality of [`useLazyQuerySubscription`](#uselazyquerysubscription).
+ *
+ * #### Features
+ *
+ * - Manual control over firing a request to retrieve data
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once
+ *
+ * #### Note
+ *
+ * When the trigger function returned from a LazyQuery is called, it always initiates a new request to the server even if there is cached data. Set `preferCacheValue`(the second argument to the function) as `true` if you want it to immediately return a cached value if one exists.
+ */
+export type UseLazyQuery<D extends QueryDefinition<any, any, any, any>> = <
+  R extends Record<string, any> = UseQueryStateDefaultResult<D>,
+>(
+  options?: SubscriptionOptions & Omit<UseQueryStateOptions<D, R>, 'skip'>,
+) => [
+  LazyQueryTrigger<D>,
+  UseLazyQueryStateResult<D, R>,
+  UseLazyQueryLastPromiseInfo<D>,
+]
+
+export type TypedUseLazyQuery<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+> = UseLazyQuery<
+  QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+>
+
+export type UseLazyQueryStateResult<
+  D extends QueryDefinition<any, any, any, any>,
+  R = UseQueryStateDefaultResult<D>,
+> = UseQueryStateResult<D, R> & {
+  /**
+   * Resets the hook state to its initial `uninitialized` state.
+   * This will also remove the last result from the cache.
+   */
+  reset: () => void
+}
+
+/**
+ * Helper type to manually type the result
+ * of the `useLazyQuery` hook in userland code.
+ */
+export type TypedUseLazyQueryStateResult<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  R = UseQueryStateDefaultResult<
+    QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+  >,
+> = UseLazyQueryStateResult<
+  QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>,
+  R
+>
+
+export type LazyQueryTrigger<D extends QueryDefinition<any, any, any, any>> = {
+  /**
+   * Triggers a lazy query.
+   *
+   * By default, this will start a new request even if there is already a value in the cache.
+   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.
+   *
+   * @remarks
+   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta title="Using .unwrap with async await"
+   * try {
+   *   const payload = await getUserById(1).unwrap();
+   *   console.log('fulfilled', payload)
+   * } catch (error) {
+   *   console.error('rejected', error);
+   * }
+   * ```
+   */
+  (
+    arg: QueryArgFrom<D>,
+    preferCacheValue?: boolean,
+  ): QueryActionCreatorResult<D>
+}
+
+export type TypedLazyQueryTrigger<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+> = LazyQueryTrigger<
+  QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+>
+
+/**
+ * A React hook similar to [`useQuerySubscription`](#usequerysubscription), but with manual control over when the data fetching occurs.
+ *
+ * Note that this hook does not return a request status or cached data. For that use-case, see [`useLazyQuery`](#uselazyquery).
+ *
+ * #### Features
+ *
+ * - Manual control over firing a request to retrieve data
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met and the fetch has been manually called at least once
+ */
+export type UseLazyQuerySubscription<
+  D extends QueryDefinition<any, any, any, any>,
+> = (
+  options?: SubscriptionOptions,
+) => readonly [
+  LazyQueryTrigger<D>,
+  QueryArgFrom<D> | UninitializedValue,
+  { reset: () => void },
+]
+
+export type TypedUseLazyQuerySubscription<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+> = UseLazyQuerySubscription<
+  QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+>
+
+/**
+ * @internal
+ */
+export type QueryStateSelector<
+  R extends Record<string, any>,
+  D extends QueryDefinition<any, any, any, any>,
+> = (state: UseQueryStateDefaultResult<D>) => R
+
+/**
+ * Provides a way to define a strongly-typed version of
+ * {@linkcode QueryStateSelector} for use with a specific query.
+ * This is useful for scenarios where you want to create a "pre-typed"
+ * {@linkcode UseQueryStateOptions.selectFromResult | selectFromResult}
+ * function.
+ *
+ * @example
+ * <caption>#### __Create a strongly-typed `selectFromResult` selector function__</caption>
+ *
+ * ```tsx
+ * import type { TypedQueryStateSelector } from '@reduxjs/toolkit/query/react'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+ *
+ * type Post = {
+ *   id: number
+ *   title: string
+ * }
+ *
+ * type PostsApiResponse = {
+ *   posts: Post[]
+ *   total: number
+ *   skip: number
+ *   limit: number
+ * }
+ *
+ * type QueryArgument = number | undefined
+ *
+ * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+ *
+ * type SelectedResult = Pick<PostsApiResponse, 'posts'>
+ *
+ * const postsApiSlice = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com/posts' }),
+ *   reducerPath: 'postsApi',
+ *   tagTypes: ['Posts'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsApiResponse, QueryArgument>({
+ *       query: (limit = 5) => `?limit=${limit}&select=title`,
+ *     }),
+ *   }),
+ * })
+ *
+ * const { useGetPostsQuery } = postsApiSlice
+ *
+ * function PostById({ id }: { id: number }) {
+ *   const { post } = useGetPostsQuery(undefined, {
+ *     selectFromResult: (state) => ({
+ *       post: state.data?.posts.find((post) => post.id === id),
+ *     }),
+ *   })
+ *
+ *   return <li>{post?.title}</li>
+ * }
+ *
+ * const EMPTY_ARRAY: Post[] = []
+ *
+ * const typedSelectFromResult: TypedQueryStateSelector<
+ *   PostsApiResponse,
+ *   QueryArgument,
+ *   BaseQueryFunction,
+ *   SelectedResult
+ * > = (state) => ({ posts: state.data?.posts ?? EMPTY_ARRAY })
+ *
+ * function PostsList() {
+ *   const { posts } = useGetPostsQuery(undefined, {
+ *     selectFromResult: typedSelectFromResult,
+ *   })
+ *
+ *   return (
+ *     <div>
+ *       <ul>
+ *         {posts.map((post) => (
+ *           <PostById key={post.id} id={post.id} />
+ *         ))}
+ *       </ul>
+ *     </div>
+ *   )
+ * }
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArgumentType - The type of the argument passed into the query.
+ * @template BaseQueryFunctionType - The type of the base query function being used.
+ * @template SelectedResultType - The type of the selected result returned by the __`selectFromResult`__ function.
+ *
+ * @since 2.3.0
+ * @public
+ */
+export type TypedQueryStateSelector<
+  ResultType,
+  QueryArgumentType,
+  BaseQueryFunctionType extends BaseQueryFn,
+  SelectedResultType extends Record<string, any> = UseQueryStateDefaultResult<
+    QueryDefinition<
+      QueryArgumentType,
+      BaseQueryFunctionType,
+      string,
+      ResultType,
+      string
+    >
+  >,
+> = QueryStateSelector<
+  SelectedResultType,
+  QueryDefinition<
+    QueryArgumentType,
+    BaseQueryFunctionType,
+    string,
+    ResultType,
+    string
+  >
+>
+
+/**
+ * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.
+ *
+ * Note that this hook does not trigger fetching new data. For that use-case, see [`useQuery`](#usequery) or [`useQuerySubscription`](#usequerysubscription).
+ *
+ * #### Features
+ *
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+export type UseQueryState<D extends QueryDefinition<any, any, any, any>> = <
+  R extends Record<string, any> = UseQueryStateDefaultResult<D>,
+>(
+  arg: QueryArgFrom<D> | SkipToken,
+  options?: UseQueryStateOptions<D, R>,
+) => UseQueryStateResult<D, R>
+
+export type TypedUseQueryState<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+> = UseQueryState<
+  QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+>
+
+/**
+ * @internal
+ */
+export type UseQueryStateOptions<
+  D extends QueryDefinition<any, any, any, any>,
+  R extends Record<string, any>,
+> = {
+  /**
+   * Prevents a query from automatically running.
+   *
+   * @remarks
+   * When skip is true:
+   *
+   * - **If the query has cached data:**
+   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+   *   * The query will have a status of `uninitialized`
+   *   * If `skip: false` is set after skipping the initial load, the cached result will be used
+   * - **If the query does not have cached data:**
+   *   * The query will have a status of `uninitialized`
+   *   * The query will not exist in the state when viewed with the dev tools
+   *   * The query will not automatically fetch on mount
+   *   * The query will not automatically run when additional components with the same query are added that do run
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta title="Skip example"
+   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+   *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+   *     skip,
+   *   });
+   *
+   *   return (
+   *     <div>
+   *       {name} - {status}
+   *     </div>
+   *   );
+   * };
+   * ```
+   */
+  skip?: boolean
+  /**
+   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.
+   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.
+   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta title="Using selectFromResult to extract a single result"
+   * function PostsList() {
+   *   const { data: posts } = api.useGetPostsQuery();
+   *
+   *   return (
+   *     <ul>
+   *       {posts?.data?.map((post) => (
+   *         <PostById key={post.id} id={post.id} />
+   *       ))}
+   *     </ul>
+   *   );
+   * }
+   *
+   * function PostById({ id }: { id: number }) {
+   *   // Will select the post with the given id, and will only rerender if the given posts data changes
+   *   const { post } = api.useGetPostsQuery(undefined, {
+   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),
+   *   });
+   *
+   *   return <li>{post?.name}</li>;
+   * }
+   * ```
+   */
+  selectFromResult?: QueryStateSelector<R, D>
+}
+
+/**
+ * Provides a way to define a "pre-typed" version of
+ * {@linkcode UseQueryStateOptions} with specific options for a given query.
+ * This is particularly useful for setting default query behaviors such as
+ * refetching strategies, which can be overridden as needed.
+ *
+ * @example
+ * <caption>#### __Create a `useQuery` hook with default options__</caption>
+ *
+ * ```ts
+ * import type {
+ *   SubscriptionOptions,
+ *   TypedUseQueryStateOptions,
+ * } from '@reduxjs/toolkit/query/react'
+ * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+ *
+ * type Post = {
+ *   id: number
+ *   name: string
+ * }
+ *
+ * const api = createApi({
+ *   baseQuery: fetchBaseQuery({ baseUrl: '/' }),
+ *   tagTypes: ['Post'],
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<Post[], void>({
+ *       query: () => 'posts',
+ *     }),
+ *   }),
+ * })
+ *
+ * const { useGetPostsQuery } = api
+ *
+ * export const useGetPostsQueryWithDefaults = <
+ *   SelectedResult extends Record<string, any>,
+ * >(
+ *   overrideOptions: TypedUseQueryStateOptions<
+ *     Post[],
+ *     void,
+ *     ReturnType<typeof fetchBaseQuery>,
+ *     SelectedResult
+ *   > &
+ *     SubscriptionOptions,
+ * ) =>
+ *   useGetPostsQuery(undefined, {
+ *     // Insert default options here
+ *
+ *     refetchOnMountOrArgChange: true,
+ *     refetchOnFocus: true,
+ *     ...overrideOptions,
+ *   })
+ * ```
+ *
+ * @template ResultType - The type of the result `data` returned by the query.
+ * @template QueryArg - The type of the argument passed into the query.
+ * @template BaseQuery - The type of the base query function being used.
+ * @template SelectedResult - The type of the selected result returned by the __`selectFromResult`__ function.
+ *
+ * @since 2.2.8
+ * @public
+ */
+export type TypedUseQueryStateOptions<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  SelectedResult extends Record<string, any> = UseQueryStateDefaultResult<
+    QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+  >,
+> = UseQueryStateOptions<
+  QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>,
+  SelectedResult
+>
+
+export type UseQueryStateResult<
+  _ extends QueryDefinition<any, any, any, any>,
+  R,
+> = TSHelpersNoInfer<R>
+
+/**
+ * Helper type to manually type the result
+ * of the `useQueryState` hook in userland code.
+ */
+export type TypedUseQueryStateResult<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  R = UseQueryStateDefaultResult<
+    QueryDefinition<QueryArg, BaseQuery, string, ResultType, string>
+  >,
+> = TSHelpersNoInfer<R>
+
+type UseQueryStateBaseResult<D extends QueryDefinition<any, any, any, any>> =
+  QuerySubState<D> & {
+    /**
+     * Where `data` tries to hold data as much as possible, also re-using
+     * data from the last arguments passed into the hook, this property
+     * will always contain the received data from the query, for the current query arguments.
+     */
+    currentData?: ResultTypeFrom<D>
+    /**
+     * Query has not started yet.
+     */
+    isUninitialized: false
+    /**
+     * Query is currently loading for the first time. No data yet.
+     */
+    isLoading: false
+    /**
+     * Query is currently fetching, but might have data from an earlier request.
+     */
+    isFetching: false
+    /**
+     * Query has data from a successful load.
+     */
+    isSuccess: false
+    /**
+     * Query is currently in "error" state.
+     */
+    isError: false
+  }
+
+type UseQueryStateDefaultResult<D extends QueryDefinition<any, any, any, any>> =
+  TSHelpersId<
+    | TSHelpersOverride<
+        Extract<
+          UseQueryStateBaseResult<D>,
+          { status: QueryStatus.uninitialized }
+        >,
+        { isUninitialized: true }
+      >
+    | TSHelpersOverride<
+        UseQueryStateBaseResult<D>,
+        | { isLoading: true; isFetching: boolean; data: undefined }
+        | ({
+            isSuccess: true
+            isFetching: true
+            error: undefined
+          } & Required<
+            Pick<UseQueryStateBaseResult<D>, 'data' | 'fulfilledTimeStamp'>
+          >)
+        | ({
+            isSuccess: true
+            isFetching: false
+            error: undefined
+          } & Required<
+            Pick<
+              UseQueryStateBaseResult<D>,
+              'data' | 'fulfilledTimeStamp' | 'currentData'
+            >
+          >)
+        | ({ isError: true } & Required<
+            Pick<UseQueryStateBaseResult<D>, 'error'>
+          >)
+      >
+  > & {
+    /**
+     * @deprecated Included for completeness, but discouraged.
+     * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`
+     * and `isUninitialized` flags instead
+     */
+    status: QueryStatus
+  }
+
+export type LazyInfiniteQueryTrigger<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = {
+  /**
+   * Triggers a lazy query.
+   *
+   * By default, this will start a new request even if there is already a value in the cache.
+   * If you want to use the cache value and only start a request if there is no cache value, set the second argument to `true`.
+   *
+   * @remarks
+   * If you need to access the error or success payload immediately after a lazy query, you can chain .unwrap().
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta title="Using .unwrap with async await"
+   * try {
+   *   const payload = await getUserById(1).unwrap();
+   *   console.log('fulfilled', payload)
+   * } catch (error) {
+   *   console.error('rejected', error);
+   * }
+   * ```
+   */
+  (
+    arg: QueryArgFrom<D>,
+    direction: InfiniteQueryDirection,
+  ): InfiniteQueryActionCreatorResult<D>
+}
+
+export type TypedLazyInfiniteQueryTrigger<
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+> = LazyInfiniteQueryTrigger<
+  InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    string,
+    ResultType,
+    string
+  >
+>
+
+export type UseInfiniteQuerySubscriptionOptions<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = SubscriptionOptions & {
+  /**
+   * Prevents a query from automatically running.
+   *
+   * @remarks
+   * When `skip` is true (or `skipToken` is passed in as `arg`):
+   *
+   * - **If the query has cached data:**
+   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+   *   * The query will have a status of `uninitialized`
+   *   * If `skip: false` is set after the initial load, the cached result will be used
+   * - **If the query does not have cached data:**
+   *   * The query will have a status of `uninitialized`
+   *   * The query will not exist in the state when viewed with the dev tools
+   *   * The query will not automatically fetch on mount
+   *   * The query will not automatically run when additional components with the same query are added that do run
+   *
+   * @example
+   * ```tsx
+   * // codeblock-meta no-transpile title="Skip example"
+   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+   *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+   *     skip,
+   *   });
+   *
+   *   return (
+   *     <div>
+   *       {name} - {status}
+   *     </div>
+   *   );
+   * };
+   * ```
+   */
+  skip?: boolean
+  /**
+   * Defaults to `false`. This setting allows you to control whether if a cached result is already available, RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.
+   * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.
+   * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.
+   * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.
+   *
+   * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.
+   */
+  refetchOnMountOrArgChange?: boolean | number
+  initialPageParam?: PageParamFrom<D>
+}
+
+export type TypedUseInfiniteQuerySubscription<
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+> = UseInfiniteQuerySubscription<
+  InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    string,
+    ResultType,
+    string
+  >
+>
+
+export type UseInfiniteQuerySubscriptionResult<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = Pick<InfiniteQueryActionCreatorResult<D>, 'refetch'> & {
+  trigger: LazyInfiniteQueryTrigger<D>
+  fetchNextPage: () => InfiniteQueryActionCreatorResult<D>
+  fetchPreviousPage: () => InfiniteQueryActionCreatorResult<D>
+}
+
+/**
+ * Helper type to manually type the result
+ * of the `useQuerySubscription` hook in userland code.
+ */
+export type TypedUseInfiniteQuerySubscriptionResult<
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+> = UseInfiniteQuerySubscriptionResult<
+  InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    string,
+    ResultType,
+    string
+  >
+>
+
+export type InfiniteQueryStateSelector<
+  R extends Record<string, any>,
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = (state: UseInfiniteQueryStateDefaultResult<D>) => R
+
+export type TypedInfiniteQueryStateSelector<
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+  SelectedResult extends Record<
+    string,
+    any
+  > = UseInfiniteQueryStateDefaultResult<
+    InfiniteQueryDefinition<
+      QueryArg,
+      PageParam,
+      BaseQuery,
+      string,
+      ResultType,
+      string
+    >
+  >,
+> = InfiniteQueryStateSelector<
+  SelectedResult,
+  InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    string,
+    ResultType,
+    string
+  >
+>
+
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, 'subscribes' the component to the cached data, and reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.  Additionally, it will cache multiple "pages" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already, and the hook will return the data for that query arg once it's available.
+ *
+ *  The `data` field will be a `{pages: Data[], pageParams: PageParam[]}` structure containing all fetched page responses and the corresponding page param values for each page. You may use this to render individual pages, combine all pages into a single infinite list, or other display logic as needed.
+ *
+ * This hook combines the functionality of both [`useInfiniteQueryState`](#useinfinitequerystate) and [`useInfiniteQuerySubscription`](#useinfinitequerysubscription) together, and is intended to be used in the majority of situations.
+ *
+ * As with normal query hooks, `skipToken` is a valid argument that will skip the query from executing.
+ *
+ * By default, the initial request will use the `initialPageParam` value that was defined on the infinite query endpoint. If you want to start from a different value, you can pass `initialPageParam` as part of the hook options to override that initial request value.
+ *
+ * Use the returned `fetchNextPage` and `fetchPreviousPage` methods on the hook result object to trigger fetches forwards and backwards. These will always calculate the next or previous page param based on the current cached pages and the provided `getNext/PreviousPageParam` callbacks defined in the endpoint.
+ *
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+export type UseInfiniteQuery<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(
+  arg: InfiniteQueryArgFrom<D> | SkipToken,
+  options?: UseInfiniteQuerySubscriptionOptions<D> &
+    UseInfiniteQueryStateOptions<D, R>,
+) => UseInfiniteQueryHookResult<D, R> &
+  Pick<
+    UseInfiniteQuerySubscriptionResult<D>,
+    'fetchNextPage' | 'fetchPreviousPage'
+  >
+
+export type TypedUseInfiniteQuery<
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+> = UseInfiniteQuery<
+  InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    string,
+    ResultType,
+    string
+  >
+>
+
+/**
+ * A React hook that reads the request status and cached data from the Redux store. The component will re-render as the loading status changes and the data becomes available.
+ *
+ * Note that this hook does not trigger fetching new data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQuerySubscription`](#useinfinitequerysubscription).
+ *
+ * #### Features
+ *
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+export type UseInfiniteQueryState<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = <R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<D>>(
+  arg: InfiniteQueryArgFrom<D> | SkipToken,
+  options?: UseInfiniteQueryStateOptions<D, R>,
+) => UseInfiniteQueryStateResult<D, R>
+
+export type TypedUseInfiniteQueryState<
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+> = UseInfiniteQueryState<
+  InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    string,
+    ResultType,
+    string
+  >
+>
+
+/**
+ * A React hook that automatically triggers fetches of data from an endpoint, and 'subscribes' the component to the cached data. Additionally, it will cache multiple "pages" worth of responses within a single cache entry, and allows fetching more pages forwards and backwards from the current cached pages.
+ *
+ * The query arg is used as a cache key. Changing the query arg will tell the hook to re-fetch the data if it does not exist in the cache already.
+ *
+ * Note that this hook does not return a request status or cached data. For that use-case, see [`useInfiniteQuery`](#useinfinitequery) or [`useInfiniteQueryState`](#useinfinitequerystate).
+ *
+ * #### Features
+ *
+ * - Automatically triggers requests to retrieve data based on the hook argument and whether cached data exists by default
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Caches multiple pages worth of responses, and provides methods to trigger more page fetches forwards and backwards
+ * - Accepts polling/re-fetching options to trigger automatic re-fetches when the corresponding criteria is met
+ */
+export type UseInfiniteQuerySubscription<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = (
+  arg: InfiniteQueryArgFrom<D> | SkipToken,
+  options?: UseInfiniteQuerySubscriptionOptions<D>,
+) => UseInfiniteQuerySubscriptionResult<D>
+
+export type UseInfiniteQueryHookResult<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+  R = UseInfiniteQueryStateDefaultResult<D>,
+> = UseInfiniteQueryStateResult<D, R> &
+  Pick<UseInfiniteQuerySubscriptionResult<D>, 'refetch'>
+
+export type TypedUseInfiniteQueryHookResult<
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+  R extends Record<string, any> = UseInfiniteQueryStateDefaultResult<
+    InfiniteQueryDefinition<
+      QueryArg,
+      PageParam,
+      BaseQuery,
+      string,
+      ResultType,
+      string
+    >
+  >,
+> = UseInfiniteQueryHookResult<
+  InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    string,
+    ResultType,
+    string
+  >,
+  R
+>
+
+export type UseInfiniteQueryStateOptions<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+  R extends Record<string, any>,
+> = {
+  /**
+   * Prevents a query from automatically running.
+   *
+   * @remarks
+   * When skip is true:
+   *
+   * - **If the query has cached data:**
+   *   * The cached data **will not be used** on the initial load, and will ignore updates from any identical query until the `skip` condition is removed
+   *   * The query will have a status of `uninitialized`
+   *   * If `skip: false` is set after skipping the initial load, the cached result will be used
+   * - **If the query does not have cached data:**
+   *   * The query will have a status of `uninitialized`
+   *   * The query will not exist in the state when viewed with the dev tools
+   *   * The query will not automatically fetch on mount
+   *   * The query will not automatically run when additional components with the same query are added that do run
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta title="Skip example"
+   * const Pokemon = ({ name, skip }: { name: string; skip: boolean }) => {
+   *   const { data, error, status } = useGetPokemonByNameQuery(name, {
+   *     skip,
+   *   });
+   *
+   *   return (
+   *     <div>
+   *       {name} - {status}
+   *     </div>
+   *   );
+   * };
+   * ```
+   */
+  skip?: boolean
+  /**
+   * `selectFromResult` allows you to get a specific segment from a query result in a performant manner.
+   * When using this feature, the component will not rerender unless the underlying data of the selected item has changed.
+   * If the selected item is one element in a larger collection, it will disregard changes to elements in the same collection.
+   * Note that this should always return an object (not a primitive), as RTKQ adds fields to the return value.
+   *
+   * @example
+   * ```ts
+   * // codeblock-meta title="Using selectFromResult to extract a single result"
+   * function PostsList() {
+   *   const { data: posts } = api.useGetPostsQuery();
+   *
+   *   return (
+   *     <ul>
+   *       {posts?.data?.map((post) => (
+   *         <PostById key={post.id} id={post.id} />
+   *       ))}
+   *     </ul>
+   *   );
+   * }
+   *
+   * function PostById({ id }: { id: number }) {
+   *   // Will select the post with the given id, and will only rerender if the given posts data changes
+   *   const { post } = api.useGetPostsQuery(undefined, {
+   *     selectFromResult: ({ data }) => ({ post: data?.find((post) => post.id === id) }),
+   *   });
+   *
+   *   return <li>{post?.name}</li>;
+   * }
+   * ```
+   */
+  selectFromResult?: InfiniteQueryStateSelector<R, D>
+}
+
+export type TypedUseInfiniteQueryStateOptions<
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+  SelectedResult extends Record<
+    string,
+    any
+  > = UseInfiniteQueryStateDefaultResult<
+    InfiniteQueryDefinition<
+      QueryArg,
+      PageParam,
+      BaseQuery,
+      string,
+      ResultType,
+      string
+    >
+  >,
+> = UseInfiniteQueryStateOptions<
+  InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    string,
+    ResultType,
+    string
+  >,
+  SelectedResult
+>
+
+export type UseInfiniteQueryStateResult<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+  R = UseInfiniteQueryStateDefaultResult<D>,
+> = TSHelpersNoInfer<R>
+
+export type TypedUseInfiniteQueryStateResult<
+  ResultType,
+  QueryArg,
+  PageParam,
+  BaseQuery extends BaseQueryFn,
+  R = UseInfiniteQueryStateDefaultResult<
+    InfiniteQueryDefinition<
+      QueryArg,
+      PageParam,
+      BaseQuery,
+      string,
+      ResultType,
+      string
+    >
+  >,
+> = UseInfiniteQueryStateResult<
+  InfiniteQueryDefinition<
+    QueryArg,
+    PageParam,
+    BaseQuery,
+    string,
+    ResultType,
+    string
+  >,
+  R
+>
+
+type UseInfiniteQueryStateBaseResult<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = InfiniteQuerySubState<D> & {
+  /**
+   * Where `data` tries to hold data as much as possible, also re-using
+   * data from the last arguments passed into the hook, this property
+   * will always contain the received data from the query, for the current query arguments.
+   */
+  currentData?: InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>
+  /**
+   * Query has not started yet.
+   */
+  isUninitialized: false
+  /**
+   * Query is currently loading for the first time. No data yet.
+   */
+  isLoading: false
+  /**
+   * Query is currently fetching, but might have data from an earlier request.
+   */
+  isFetching: false
+  /**
+   * Query has data from a successful load.
+   */
+  isSuccess: false
+  /**
+   * Query is currently in "error" state.
+   */
+  isError: false
+  hasNextPage: false
+  hasPreviousPage: false
+  isFetchingNextPage: false
+  isFetchingPreviousPage: false
+}
+
+type UseInfiniteQueryStateDefaultResult<
+  D extends InfiniteQueryDefinition<any, any, any, any, any>,
+> = TSHelpersId<
+  | TSHelpersOverride<
+      Extract<
+        UseInfiniteQueryStateBaseResult<D>,
+        { status: QueryStatus.uninitialized }
+      >,
+      { isUninitialized: true }
+    >
+  | TSHelpersOverride<
+      UseInfiniteQueryStateBaseResult<D>,
+      | { isLoading: true; isFetching: boolean; data: undefined }
+      | ({
+          isSuccess: true
+          isFetching: true
+          error: undefined
+        } & Required<
+          Pick<
+            UseInfiniteQueryStateBaseResult<D>,
+            'data' | 'fulfilledTimeStamp'
+          >
+        >)
+      | ({
+          isSuccess: true
+          isFetching: false
+          error: undefined
+        } & Required<
+          Pick<
+            UseInfiniteQueryStateBaseResult<D>,
+            'data' | 'fulfilledTimeStamp' | 'currentData'
+          >
+        >)
+      | ({ isError: true } & Required<
+          Pick<UseInfiniteQueryStateBaseResult<D>, 'error'>
+        >)
+    >
+> & {
+  /**
+   * @deprecated Included for completeness, but discouraged.
+   * Please use the `isLoading`, `isFetching`, `isSuccess`, `isError`
+   * and `isUninitialized` flags instead
+   */
+  status: QueryStatus
+}
+
+export type MutationStateSelector<
+  R extends Record<string, any>,
+  D extends MutationDefinition<any, any, any, any>,
+> = (state: MutationResultSelectorResult<D>) => R
+
+export type UseMutationStateOptions<
+  D extends MutationDefinition<any, any, any, any>,
+  R extends Record<string, any>,
+> = {
+  selectFromResult?: MutationStateSelector<R, D>
+  fixedCacheKey?: string
+}
+
+export type UseMutationStateResult<
+  D extends MutationDefinition<any, any, any, any>,
+  R,
+> = TSHelpersNoInfer<R> & {
+  originalArgs?: QueryArgFrom<D>
+  /**
+   * Resets the hook state to its initial `uninitialized` state.
+   * This will also remove the last result from the cache.
+   */
+  reset: () => void
+}
+
+/**
+ * Helper type to manually type the result
+ * of the `useMutation` hook in userland code.
+ */
+export type TypedUseMutationResult<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+  R = MutationResultSelectorResult<
+    MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>
+  >,
+> = UseMutationStateResult<
+  MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>,
+  R
+>
+
+/**
+ * A React hook that lets you trigger an update request for a given endpoint, and subscribes the component to read the request status from the Redux store. The component will re-render as the loading status changes.
+ *
+ * #### Features
+ *
+ * - Manual control over firing a request to alter data on the server or possibly invalidate the cache
+ * - 'Subscribes' the component to keep cached data in the store, and 'unsubscribes' when the component unmounts
+ * - Returns the latest request status and cached data from the Redux store
+ * - Re-renders as the request status changes and data becomes available
+ */
+export type UseMutation<D extends MutationDefinition<any, any, any, any>> = <
+  R extends Record<string, any> = MutationResultSelectorResult<D>,
+>(
+  options?: UseMutationStateOptions<D, R>,
+) => readonly [MutationTrigger<D>, UseMutationStateResult<D, R>]
+
+export type TypedUseMutation<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+> = UseMutation<
+  MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>
+>
+
+export type MutationTrigger<D extends MutationDefinition<any, any, any, any>> =
+  {
+    /**
+     * Triggers the mutation and returns a Promise.
+     * @remarks
+     * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().
+     *
+     * @example
+     * ```ts
+     * // codeblock-meta title="Using .unwrap with async await"
+     * try {
+     *   const payload = await addPost({ id: 1, name: 'Example' }).unwrap();
+     *   console.log('fulfilled', payload)
+     * } catch (error) {
+     *   console.error('rejected', error);
+     * }
+     * ```
+     */
+    (arg: QueryArgFrom<D>): MutationActionCreatorResult<D>
+  }
+
+export type TypedMutationTrigger<
+  ResultType,
+  QueryArg,
+  BaseQuery extends BaseQueryFn,
+> = MutationTrigger<
+  MutationDefinition<QueryArg, BaseQuery, string, ResultType, string>
+>
+
+/**
+ * Wrapper around `defaultQueryStateSelector` to be used in `useQuery`.
+ * We want the initial render to already come back with
+ * `{ isUninitialized: false, isFetching: true, isLoading: true }`
+ * to prevent that the library user has to do an additional check for `isUninitialized`/
+ */
+const noPendingQueryStateSelector: QueryStateSelector<any, any> = (
+  selected,
+) => {
+  if (selected.isUninitialized) {
+    return {
+      ...selected,
+      isUninitialized: false,
+      isFetching: true,
+      isLoading: selected.data !== undefined ? false : true,
+      status: QueryStatus.pending,
+    } as any
+  }
+  return selected
+}
+
+function pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {
+  const ret: any = {}
+  keys.forEach((key) => {
+    ret[key] = obj[key]
+  })
+  return ret
+}
+
+const COMMON_HOOK_DEBUG_FIELDS = [
+  'data',
+  'status',
+  'isLoading',
+  'isSuccess',
+  'isError',
+  'error',
+] as const
+
+type GenericPrefetchThunk = (
+  endpointName: any,
+  arg: any,
+  options: PrefetchOptions,
+) => ThunkAction<void, any, any, UnknownAction>
+
+/**
+ *
+ * @param opts.api - An API with defined endpoints to create hooks for
+ * @param opts.moduleOptions.batch - The version of the `batchedUpdates` function to be used
+ * @param opts.moduleOptions.useDispatch - The version of the `useDispatch` hook to be used
+ * @param opts.moduleOptions.useSelector - The version of the `useSelector` hook to be used
+ * @returns An object containing functions to generate hooks based on an endpoint
+ */
+export function buildHooks<Definitions extends EndpointDefinitions>({
+  api,
+  moduleOptions: {
+    batch,
+    hooks: { useDispatch, useSelector, useStore },
+    unstable__sideEffectsInRender,
+    createSelector,
+  },
+  serializeQueryArgs,
+  context,
+}: {
+  api: Api<any, Definitions, any, any, CoreModule>
+  moduleOptions: Required<ReactHooksModuleOptions>
+  serializeQueryArgs: SerializeQueryArgs<any>
+  context: ApiContext<Definitions>
+}) {
+  const usePossiblyImmediateEffect: (
+    effect: () => void | undefined,
+    deps?: DependencyList,
+  ) => void = unstable__sideEffectsInRender ? (cb) => cb() : useEffect
+
+  return {
+    buildQueryHooks,
+    buildInfiniteQueryHooks,
+    buildMutationHook,
+    usePrefetch,
+  }
+
+  function queryStatePreSelector(
+    currentState: QueryResultSelectorResult<any>,
+    lastResult: UseQueryStateDefaultResult<any> | undefined,
+    queryArgs: any,
+  ): UseQueryStateDefaultResult<any> {
+    // if we had a last result and the current result is uninitialized,
+    // we might have called `api.util.resetApiState`
+    // in this case, reset the hook
+    if (lastResult?.endpointName && currentState.isUninitialized) {
+      const { endpointName } = lastResult
+      const endpointDefinition = context.endpointDefinitions[endpointName]
+      if (
+        queryArgs !== skipToken &&
+        serializeQueryArgs({
+          queryArgs: lastResult.originalArgs,
+          endpointDefinition,
+          endpointName,
+        }) ===
+          serializeQueryArgs({
+            queryArgs,
+            endpointDefinition,
+            endpointName,
+          })
+      )
+        lastResult = undefined
+    }
+
+    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args
+    let data = currentState.isSuccess ? currentState.data : lastResult?.data
+    if (data === undefined) data = currentState.data
+
+    const hasData = data !== undefined
+
+    // isFetching = true any time a request is in flight
+    const isFetching = currentState.isLoading
+
+    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)
+    const isLoading =
+      (!lastResult || lastResult.isLoading || lastResult.isUninitialized) &&
+      !hasData &&
+      isFetching
+
+    // isSuccess = true when data is present and we're not refetching after an error.
+    // That includes cases where the _current_ item is either actively
+    // fetching or about to fetch due to an uninitialized entry.
+    const isSuccess =
+      currentState.isSuccess ||
+      (hasData &&
+        ((isFetching && !lastResult?.isError) || currentState.isUninitialized))
+
+    return {
+      ...currentState,
+      data,
+      currentData: currentState.data,
+      isFetching,
+      isLoading,
+      isSuccess,
+    } as UseQueryStateDefaultResult<any>
+  }
+
+  function infiniteQueryStatePreSelector(
+    currentState: InfiniteQueryResultSelectorResult<any>,
+    lastResult: UseInfiniteQueryStateDefaultResult<any> | undefined,
+    queryArgs: any,
+  ): UseInfiniteQueryStateDefaultResult<any> {
+    // if we had a last result and the current result is uninitialized,
+    // we might have called `api.util.resetApiState`
+    // in this case, reset the hook
+    if (lastResult?.endpointName && currentState.isUninitialized) {
+      const { endpointName } = lastResult
+      const endpointDefinition = context.endpointDefinitions[endpointName]
+      if (
+        queryArgs !== skipToken &&
+        serializeQueryArgs({
+          queryArgs: lastResult.originalArgs,
+          endpointDefinition,
+          endpointName,
+        }) ===
+          serializeQueryArgs({
+            queryArgs,
+            endpointDefinition,
+            endpointName,
+          })
+      )
+        lastResult = undefined
+    }
+
+    // data is the last known good request result we have tracked - or if none has been tracked yet the last good result for the current args
+    let data = currentState.isSuccess ? currentState.data : lastResult?.data
+    if (data === undefined) data = currentState.data
+
+    const hasData = data !== undefined
+
+    // isFetching = true any time a request is in flight
+    const isFetching = currentState.isLoading
+    // isLoading = true only when loading while no data is present yet (initial load with no data in the cache)
+    const isLoading =
+      (!lastResult || lastResult.isLoading || lastResult.isUninitialized) &&
+      !hasData &&
+      isFetching
+    // isSuccess = true when data is present
+    const isSuccess = currentState.isSuccess || (isFetching && hasData)
+
+    return {
+      ...currentState,
+      data,
+      currentData: currentState.data,
+      isFetching,
+      isLoading,
+      isSuccess,
+    } as UseInfiniteQueryStateDefaultResult<any>
+  }
+
+  function usePrefetch<EndpointName extends QueryKeys<Definitions>>(
+    endpointName: EndpointName,
+    defaultOptions?: PrefetchOptions,
+  ) {
+    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>()
+    const stableDefaultOptions = useShallowStableValue(defaultOptions)
+
+    return useCallback(
+      (arg: any, options?: PrefetchOptions) =>
+        dispatch(
+          (api.util.prefetch as GenericPrefetchThunk)(endpointName, arg, {
+            ...stableDefaultOptions,
+            ...options,
+          }),
+        ),
+      [endpointName, dispatch, stableDefaultOptions],
+    )
+  }
+
+  function useQuerySubscriptionCommonImpl<
+    T extends
+      | QueryActionCreatorResult<any>
+      | InfiniteQueryActionCreatorResult<any>,
+  >(
+    endpointName: string,
+    arg: unknown | SkipToken,
+    {
+      refetchOnReconnect,
+      refetchOnFocus,
+      refetchOnMountOrArgChange,
+      skip = false,
+      pollingInterval = 0,
+      skipPollingIfUnfocused = false,
+      ...rest
+    }: UseQuerySubscriptionOptions = {},
+  ) {
+    const { initiate } = api.endpoints[endpointName] as ApiEndpointQuery<
+      QueryDefinition<any, any, any, any, any>,
+      Definitions
+    >
+    const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>()
+
+    // TODO: Change this to `useRef<SubscriptionSelectors>(undefined)` after upgrading to React 19.
+    const subscriptionSelectorsRef = useRef<SubscriptionSelectors | undefined>(
+      undefined,
+    )
+
+    if (!subscriptionSelectorsRef.current) {
+      const returnedValue = dispatch(
+        api.internalActions.internal_getRTKQSubscriptions(),
+      )
+
+      if (process.env.NODE_ENV !== 'production') {
+        if (
+          typeof returnedValue !== 'object' ||
+          typeof returnedValue?.type === 'string'
+        ) {
+          throw new Error(
+            `Warning: Middleware for RTK-Query API at reducerPath "${api.reducerPath}" has not been added to the store.
+    You must add the middleware for RTK-Query to function correctly!`,
+          )
+        }
+      }
+
+      subscriptionSelectorsRef.current =
+        returnedValue as unknown as SubscriptionSelectors
+    }
+    const stableArg = useStableQueryArgs(
+      skip ? skipToken : arg,
+      // Even if the user provided a per-endpoint `serializeQueryArgs` with
+      // a consistent return value, _here_ we want to use the default behavior
+      // so we can tell if _anything_ actually changed. Otherwise, we can end up
+      // with a case where the query args did change but the serialization doesn't,
+      // and then we never try to initiate a refetch.
+      defaultSerializeQueryArgs,
+      context.endpointDefinitions[endpointName],
+      endpointName,
+    )
+    const stableSubscriptionOptions = useShallowStableValue({
+      refetchOnReconnect,
+      refetchOnFocus,
+      pollingInterval,
+      skipPollingIfUnfocused,
+    })
+
+    const initialPageParam = (rest as UseInfiniteQuerySubscriptionOptions<any>)
+      .initialPageParam
+    const stableInitialPageParam = useShallowStableValue(initialPageParam)
+
+    /**
+     * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.
+     */
+    const promiseRef = useRef<T | undefined>(undefined)
+
+    let { queryCacheKey, requestId } = promiseRef.current || {}
+
+    // HACK We've saved the middleware subscription lookup callbacks into a ref,
+    // so we can directly check here if the subscription exists for this query.
+    let currentRenderHasSubscription = false
+    if (queryCacheKey && requestId) {
+      currentRenderHasSubscription =
+        subscriptionSelectorsRef.current.isRequestSubscribed(
+          queryCacheKey,
+          requestId,
+        )
+    }
+
+    const subscriptionRemoved =
+      !currentRenderHasSubscription && promiseRef.current !== undefined
+
+    usePossiblyImmediateEffect((): void | undefined => {
+      if (subscriptionRemoved) {
+        promiseRef.current = undefined
+      }
+    }, [subscriptionRemoved])
+
+    usePossiblyImmediateEffect((): void | undefined => {
+      const lastPromise = promiseRef.current
+      if (
+        typeof process !== 'undefined' &&
+        process.env.NODE_ENV === 'removeMeOnCompilation'
+      ) {
+        // this is only present to enforce the rule of hooks to keep `isSubscribed` in the dependency array
+        console.log(subscriptionRemoved)
+      }
+
+      if (stableArg === skipToken) {
+        lastPromise?.unsubscribe()
+        promiseRef.current = undefined
+        return
+      }
+
+      const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions
+
+      if (!lastPromise || lastPromise.arg !== stableArg) {
+        lastPromise?.unsubscribe()
+        const promise = dispatch(
+          initiate(stableArg, {
+            subscriptionOptions: stableSubscriptionOptions,
+            forceRefetch: refetchOnMountOrArgChange,
+            ...(isInfiniteQueryDefinition(
+              context.endpointDefinitions[endpointName],
+            )
+              ? {
+                  initialPageParam: stableInitialPageParam,
+                }
+              : {}),
+          }),
+        )
+
+        promiseRef.current = promise as T
+      } else if (stableSubscriptionOptions !== lastSubscriptionOptions) {
+        lastPromise.updateSubscriptionOptions(stableSubscriptionOptions)
+      }
+    }, [
+      dispatch,
+      initiate,
+      refetchOnMountOrArgChange,
+      stableArg,
+      stableSubscriptionOptions,
+      subscriptionRemoved,
+      stableInitialPageParam,
+      endpointName,
+    ])
+
+    return [promiseRef, dispatch, initiate, stableSubscriptionOptions] as const
+  }
+
+  function buildUseQueryState(
+    endpointName: string,
+    preSelector:
+      | typeof queryStatePreSelector
+      | typeof infiniteQueryStatePreSelector,
+  ) {
+    const useQueryState = (
+      arg: any,
+      {
+        skip = false,
+        selectFromResult,
+      }:
+        | UseQueryStateOptions<any, any>
+        | UseInfiniteQueryStateOptions<any, any> = {},
+    ) => {
+      const { select } = api.endpoints[endpointName] as ApiEndpointQuery<
+        QueryDefinition<any, any, any, any, any>,
+        Definitions
+      >
+      const stableArg = useStableQueryArgs(
+        skip ? skipToken : arg,
+        serializeQueryArgs,
+        context.endpointDefinitions[endpointName],
+        endpointName,
+      )
+
+      type ApiRootState = Parameters<ReturnType<typeof select>>[0]
+
+      const lastValue = useRef<any>(undefined)
+
+      const selectDefaultResult: Selector<ApiRootState, any, [any]> = useMemo(
+        () =>
+          // Normally ts-ignores are bad and should be avoided, but we're
+          // already casting this selector to be `Selector<any>` anyway,
+          // so the inconsistencies don't matter here
+          // @ts-ignore
+          createSelector(
+            [
+              // @ts-ignore
+              select(stableArg),
+              (_: ApiRootState, lastResult: any) => lastResult,
+              (_: ApiRootState) => stableArg,
+            ],
+            preSelector,
+            {
+              memoizeOptions: {
+                resultEqualityCheck: shallowEqual,
+              },
+            },
+          ),
+        [select, stableArg],
+      )
+
+      const querySelector: Selector<ApiRootState, any, [any]> = useMemo(
+        () =>
+          selectFromResult
+            ? createSelector([selectDefaultResult], selectFromResult, {
+                devModeChecks: { identityFunctionCheck: 'never' },
+              })
+            : selectDefaultResult,
+        [selectDefaultResult, selectFromResult],
+      )
+
+      const currentState = useSelector(
+        (state: RootState<Definitions, any, any>) =>
+          querySelector(state, lastValue.current),
+        shallowEqual,
+      )
+
+      const store = useStore<RootState<Definitions, any, any>>()
+      const newLastValue = selectDefaultResult(
+        store.getState(),
+        lastValue.current,
+      )
+      useIsomorphicLayoutEffect(() => {
+        lastValue.current = newLastValue
+      }, [newLastValue])
+
+      return currentState
+    }
+
+    return useQueryState
+  }
+
+  function usePromiseRefUnsubscribeOnUnmount(
+    promiseRef: React.RefObject<{ unsubscribe?: () => void } | undefined>,
+  ) {
+    useEffect(() => {
+      return () => {
+        promiseRef.current?.unsubscribe?.()
+        // eslint-disable-next-line react-hooks/exhaustive-deps
+        ;(promiseRef.current as any) = undefined
+      }
+    }, [promiseRef])
+  }
+
+  function refetchOrErrorIfUnmounted<
+    T extends
+      | QueryActionCreatorResult<any>
+      | InfiniteQueryActionCreatorResult<any>,
+  >(promiseRef: React.RefObject<T | undefined>): T {
+    if (!promiseRef.current)
+      throw new Error('Cannot refetch a query that has not been started yet.')
+    return promiseRef.current.refetch() as T
+  }
+
+  function buildQueryHooks(endpointName: string): QueryHooks<any> {
+    const useQuerySubscription: UseQuerySubscription<any> = (
+      arg: any,
+      options = {},
+    ) => {
+      const [promiseRef] = useQuerySubscriptionCommonImpl<
+        QueryActionCreatorResult<any>
+      >(endpointName, arg, options)
+
+      usePromiseRefUnsubscribeOnUnmount(promiseRef)
+
+      return useMemo(
+        () => ({
+          /**
+           * A method to manually refetch data for the query
+           */
+          refetch: () => refetchOrErrorIfUnmounted(promiseRef),
+        }),
+        [promiseRef],
+      )
+    }
+
+    const useLazyQuerySubscription: UseLazyQuerySubscription<any> = ({
+      refetchOnReconnect,
+      refetchOnFocus,
+      pollingInterval = 0,
+      skipPollingIfUnfocused = false,
+    } = {}) => {
+      const { initiate } = api.endpoints[endpointName] as ApiEndpointQuery<
+        QueryDefinition<any, any, any, any, any>,
+        Definitions
+      >
+      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>()
+
+      const [arg, setArg] = useState<any>(UNINITIALIZED_VALUE)
+
+      // TODO: Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.
+      /**
+       * @todo Change this to `useRef<QueryActionCreatorResult<any>>(undefined)` after upgrading to React 19.
+       */
+      const promiseRef = useRef<QueryActionCreatorResult<any> | undefined>(
+        undefined,
+      )
+
+      const stableSubscriptionOptions = useShallowStableValue({
+        refetchOnReconnect,
+        refetchOnFocus,
+        pollingInterval,
+        skipPollingIfUnfocused,
+      })
+
+      usePossiblyImmediateEffect(() => {
+        const lastSubscriptionOptions = promiseRef.current?.subscriptionOptions
+
+        if (stableSubscriptionOptions !== lastSubscriptionOptions) {
+          promiseRef.current?.updateSubscriptionOptions(
+            stableSubscriptionOptions,
+          )
+        }
+      }, [stableSubscriptionOptions])
+
+      const subscriptionOptionsRef = useRef(stableSubscriptionOptions)
+      usePossiblyImmediateEffect(() => {
+        subscriptionOptionsRef.current = stableSubscriptionOptions
+      }, [stableSubscriptionOptions])
+
+      const trigger = useCallback(
+        function (arg: any, preferCacheValue = false) {
+          let promise: QueryActionCreatorResult<any>
+
+          batch(() => {
+            promiseRef.current?.unsubscribe()
+
+            promiseRef.current = promise = dispatch(
+              initiate(arg, {
+                subscriptionOptions: subscriptionOptionsRef.current,
+                forceRefetch: !preferCacheValue,
+              }),
+            )
+
+            setArg(arg)
+          })
+
+          return promise!
+        },
+        [dispatch, initiate],
+      )
+
+      const reset = useCallback(() => {
+        if (promiseRef.current?.queryCacheKey) {
+          dispatch(
+            api.internalActions.removeQueryResult({
+              queryCacheKey: promiseRef.current?.queryCacheKey as QueryCacheKey,
+            }),
+          )
+        }
+      }, [dispatch])
+
+      /* cleanup on unmount */
+      useEffect(() => {
+        return () => {
+          promiseRef?.current?.unsubscribe()
+        }
+      }, [])
+
+      /* if "cleanup on unmount" was triggered from a fast refresh, we want to reinstate the query */
+      useEffect(() => {
+        if (arg !== UNINITIALIZED_VALUE && !promiseRef.current) {
+          trigger(arg, true)
+        }
+      }, [arg, trigger])
+
+      return useMemo(
+        () => [trigger, arg, { reset }] as const,
+        [trigger, arg, reset],
+      )
+    }
+
+    const useQueryState: UseQueryState<any> = buildUseQueryState(
+      endpointName,
+      queryStatePreSelector,
+    )
+
+    return {
+      useQueryState,
+      useQuerySubscription,
+      useLazyQuerySubscription,
+      useLazyQuery(options) {
+        const [trigger, arg, { reset }] = useLazyQuerySubscription(options)
+        const queryStateResults = useQueryState(arg, {
+          ...options,
+          skip: arg === UNINITIALIZED_VALUE,
+        })
+
+        const info = useMemo(() => ({ lastArg: arg }), [arg])
+        return useMemo(
+          () => [trigger, { ...queryStateResults, reset }, info],
+          [trigger, queryStateResults, reset, info],
+        )
+      },
+      useQuery(arg, options) {
+        const querySubscriptionResults = useQuerySubscription(arg, options)
+        const queryStateResults = useQueryState(arg, {
+          selectFromResult:
+            arg === skipToken || options?.skip
+              ? undefined
+              : noPendingQueryStateSelector,
+          ...options,
+        })
+
+        const debugValue = pick(queryStateResults, ...COMMON_HOOK_DEBUG_FIELDS)
+        useDebugValue(debugValue)
+
+        return useMemo(
+          () => ({ ...queryStateResults, ...querySubscriptionResults }),
+          [queryStateResults, querySubscriptionResults],
+        )
+      },
+    }
+  }
+
+  function buildInfiniteQueryHooks(
+    endpointName: string,
+  ): InfiniteQueryHooks<any> {
+    const useInfiniteQuerySubscription: UseInfiniteQuerySubscription<any> = (
+      arg: any,
+      options = {},
+    ) => {
+      const [promiseRef, dispatch, initiate, stableSubscriptionOptions] =
+        useQuerySubscriptionCommonImpl<InfiniteQueryActionCreatorResult<any>>(
+          endpointName,
+          arg,
+          options,
+        )
+
+      const subscriptionOptionsRef = useRef(stableSubscriptionOptions)
+      usePossiblyImmediateEffect(() => {
+        subscriptionOptionsRef.current = stableSubscriptionOptions
+      }, [stableSubscriptionOptions])
+
+      const trigger: LazyInfiniteQueryTrigger<any> = useCallback(
+        function (arg: unknown, direction: 'forward' | 'backward') {
+          let promise: InfiniteQueryActionCreatorResult<any>
+
+          batch(() => {
+            promiseRef.current?.unsubscribe()
+
+            promiseRef.current = promise = dispatch(
+              (initiate as StartInfiniteQueryActionCreator<any>)(arg, {
+                subscriptionOptions: subscriptionOptionsRef.current,
+                direction,
+              }),
+            )
+          })
+
+          return promise!
+        },
+        [promiseRef, dispatch, initiate],
+      )
+
+      usePromiseRefUnsubscribeOnUnmount(promiseRef)
+
+      const stableArg = useStableQueryArgs(
+        options.skip ? skipToken : arg,
+        // Even if the user provided a per-endpoint `serializeQueryArgs` with
+        // a consistent return value, _here_ we want to use the default behavior
+        // so we can tell if _anything_ actually changed. Otherwise, we can end up
+        // with a case where the query args did change but the serialization doesn't,
+        // and then we never try to initiate a refetch.
+        defaultSerializeQueryArgs,
+        context.endpointDefinitions[endpointName],
+        endpointName,
+      )
+
+      const refetch = useCallback(
+        () => refetchOrErrorIfUnmounted(promiseRef),
+        [promiseRef],
+      )
+
+      return useMemo(() => {
+        const fetchNextPage = () => {
+          return trigger(stableArg, 'forward')
+        }
+
+        const fetchPreviousPage = () => {
+          return trigger(stableArg, 'backward')
+        }
+
+        return {
+          trigger,
+          /**
+           * A method to manually refetch data for the query
+           */
+          refetch,
+          fetchNextPage,
+          fetchPreviousPage,
+        }
+      }, [refetch, trigger, stableArg])
+    }
+
+    const useInfiniteQueryState: UseInfiniteQueryState<any> =
+      buildUseQueryState(endpointName, infiniteQueryStatePreSelector)
+
+    return {
+      useInfiniteQueryState,
+      useInfiniteQuerySubscription,
+      useInfiniteQuery(arg, options) {
+        const { refetch, fetchNextPage, fetchPreviousPage } =
+          useInfiniteQuerySubscription(arg, options)
+        const queryStateResults = useInfiniteQueryState(arg, {
+          selectFromResult:
+            arg === skipToken || options?.skip
+              ? undefined
+              : noPendingQueryStateSelector,
+          ...options,
+        })
+
+        const debugValue = pick(
+          queryStateResults,
+          ...COMMON_HOOK_DEBUG_FIELDS,
+          'hasNextPage',
+          'hasPreviousPage',
+        )
+        useDebugValue(debugValue)
+
+        return useMemo(
+          () => ({
+            ...queryStateResults,
+            fetchNextPage,
+            fetchPreviousPage,
+            refetch,
+          }),
+          [queryStateResults, fetchNextPage, fetchPreviousPage, refetch],
+        )
+      },
+    }
+  }
+
+  function buildMutationHook(name: string): UseMutation<any> {
+    return ({ selectFromResult, fixedCacheKey } = {}) => {
+      const { select, initiate } = api.endpoints[name] as ApiEndpointMutation<
+        MutationDefinition<any, any, any, any, any>,
+        Definitions
+      >
+      const dispatch = useDispatch<ThunkDispatch<any, any, UnknownAction>>()
+      const [promise, setPromise] = useState<MutationActionCreatorResult<any>>()
+
+      useEffect(
+        () => () => {
+          if (!promise?.arg.fixedCacheKey) {
+            promise?.reset()
+          }
+        },
+        [promise],
+      )
+
+      const triggerMutation = useCallback(
+        function (arg: Parameters<typeof initiate>['0']) {
+          const promise = dispatch(initiate(arg, { fixedCacheKey }))
+          setPromise(promise)
+          return promise
+        },
+        [dispatch, initiate, fixedCacheKey],
+      )
+
+      const { requestId } = promise || {}
+      const selectDefaultResult = useMemo(
+        () => select({ fixedCacheKey, requestId: promise?.requestId }),
+        [fixedCacheKey, promise, select],
+      )
+      const mutationSelector = useMemo(
+        (): Selector<RootState<Definitions, any, any>, any> =>
+          selectFromResult
+            ? createSelector([selectDefaultResult], selectFromResult)
+            : selectDefaultResult,
+        [selectFromResult, selectDefaultResult],
+      )
+
+      const currentState = useSelector(mutationSelector, shallowEqual)
+      const originalArgs =
+        fixedCacheKey == null ? promise?.arg.originalArgs : undefined
+      const reset = useCallback(() => {
+        batch(() => {
+          if (promise) {
+            setPromise(undefined)
+          }
+          if (fixedCacheKey) {
+            dispatch(
+              api.internalActions.removeMutationResult({
+                requestId,
+                fixedCacheKey,
+              }),
+            )
+          }
+        })
+      }, [dispatch, fixedCacheKey, promise, requestId])
+
+      const debugValue = pick(
+        currentState,
+        ...COMMON_HOOK_DEBUG_FIELDS,
+        'endpointName',
+      )
+      useDebugValue(debugValue)
+
+      const finalState = useMemo(
+        () => ({ ...currentState, originalArgs, reset }),
+        [currentState, originalArgs, reset],
+      )
+
+      return useMemo(
+        () => [triggerMutation, finalState] as const,
+        [triggerMutation, finalState],
+      )
+    }
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/react/constants.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/react/constants.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/react/constants.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export const UNINITIALIZED_VALUE = Symbol()
+export type UninitializedValue = typeof UNINITIALIZED_VALUE
Index: node_modules/@reduxjs/toolkit/src/query/react/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/react/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/react/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+// This must remain here so that the `mangleErrors.cjs` build script
+// does not have to import this into each source file it rewrites.
+import { formatProdErrorMessage } from '@reduxjs/toolkit'
+
+import { buildCreateApi, coreModule } from '@reduxjs/toolkit/query'
+import { reactHooksModule, reactHooksModuleName } from './module'
+
+export * from '@reduxjs/toolkit/query'
+export { ApiProvider } from './ApiProvider'
+
+const createApi = /* @__PURE__ */ buildCreateApi(
+  coreModule(),
+  reactHooksModule(),
+)
+
+export type {
+  TypedUseMutationResult,
+  TypedUseQueryHookResult,
+  TypedUseQueryStateResult,
+  TypedUseQuerySubscriptionResult,
+  TypedLazyQueryTrigger,
+  TypedUseLazyQuery,
+  TypedUseMutation,
+  TypedMutationTrigger,
+  TypedQueryStateSelector,
+  TypedUseQueryState,
+  TypedUseQuery,
+  TypedUseQuerySubscription,
+  TypedUseLazyQuerySubscription,
+  TypedUseQueryStateOptions,
+  TypedUseLazyQueryStateResult,
+  TypedUseInfiniteQuery,
+  TypedUseInfiniteQueryHookResult,
+  TypedUseInfiniteQueryStateResult,
+  TypedUseInfiniteQuerySubscriptionResult,
+  TypedUseInfiniteQueryStateOptions,
+  TypedInfiniteQueryStateSelector,
+  TypedUseInfiniteQuerySubscription,
+  TypedUseInfiniteQueryState,
+  TypedLazyInfiniteQueryTrigger,
+} from './buildHooks'
+export { UNINITIALIZED_VALUE } from './constants'
+export { createApi, reactHooksModule, reactHooksModuleName }
Index: node_modules/@reduxjs/toolkit/src/query/react/module.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/react/module.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/react/module.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,274 @@
+import type {
+  Api,
+  BaseQueryFn,
+  EndpointDefinitions,
+  InfiniteQueryDefinition,
+  Module,
+  MutationDefinition,
+  PrefetchOptions,
+  QueryArgFrom,
+  QueryDefinition,
+  QueryKeys,
+} from '@reduxjs/toolkit/query'
+import {
+  batch as rrBatch,
+  useDispatch as rrUseDispatch,
+  useSelector as rrUseSelector,
+  useStore as rrUseStore,
+} from 'react-redux'
+import { createSelector as _createSelector } from 'reselect'
+import {
+  isInfiniteQueryDefinition,
+  isMutationDefinition,
+  isQueryDefinition,
+} from '../endpointDefinitions'
+import { safeAssign } from '../tsHelpers'
+import { capitalize, countObjectKeys } from '../utils'
+import type {
+  InfiniteQueryHooks,
+  MutationHooks,
+  QueryHooks,
+} from './buildHooks'
+import { buildHooks } from './buildHooks'
+import type { HooksWithUniqueNames } from './namedHooks'
+
+export const reactHooksModuleName = /* @__PURE__ */ Symbol()
+export type ReactHooksModule = typeof reactHooksModuleName
+
+declare module '@reduxjs/toolkit/query' {
+  export interface ApiModules<
+    // eslint-disable-next-line @typescript-eslint/no-unused-vars
+    BaseQuery extends BaseQueryFn,
+    Definitions extends EndpointDefinitions,
+    // eslint-disable-next-line @typescript-eslint/no-unused-vars
+    ReducerPath extends string,
+    // eslint-disable-next-line @typescript-eslint/no-unused-vars
+    TagTypes extends string,
+  > {
+    [reactHooksModuleName]: {
+      /**
+       *  Endpoints based on the input endpoints provided to `createApi`, containing `select`, `hooks` and `action matchers`.
+       */
+      endpoints: {
+        [K in keyof Definitions]: Definitions[K] extends QueryDefinition<
+          any,
+          any,
+          any,
+          any,
+          any
+        >
+          ? QueryHooks<Definitions[K]>
+          : Definitions[K] extends MutationDefinition<any, any, any, any, any>
+            ? MutationHooks<Definitions[K]>
+            : Definitions[K] extends InfiniteQueryDefinition<
+                  any,
+                  any,
+                  any,
+                  any,
+                  any
+                >
+              ? InfiniteQueryHooks<Definitions[K]>
+              : never
+      }
+      /**
+       * A hook that accepts a string endpoint name, and provides a callback that when called, pre-fetches the data for that endpoint.
+       */
+      usePrefetch<EndpointName extends QueryKeys<Definitions>>(
+        endpointName: EndpointName,
+        options?: PrefetchOptions,
+      ): (
+        arg: QueryArgFrom<Definitions[EndpointName]>,
+        options?: PrefetchOptions,
+      ) => void
+    } & HooksWithUniqueNames<Definitions>
+  }
+}
+
+type RR = typeof import('react-redux')
+
+export interface ReactHooksModuleOptions {
+  /**
+   * The hooks from React Redux to be used
+   */
+  hooks?: {
+    /**
+     * The version of the `useDispatch` hook to be used
+     */
+    useDispatch: RR['useDispatch']
+    /**
+     * The version of the `useSelector` hook to be used
+     */
+    useSelector: RR['useSelector']
+    /**
+     * The version of the `useStore` hook to be used
+     */
+    useStore: RR['useStore']
+  }
+  /**
+   * The version of the `batchedUpdates` function to be used
+   */
+  batch?: RR['batch']
+  /**
+   * Enables performing asynchronous tasks immediately within a render.
+   *
+   * @example
+   *
+   * ```ts
+   * import {
+   *   buildCreateApi,
+   *   coreModule,
+   *   reactHooksModule
+   * } from '@reduxjs/toolkit/query/react'
+   *
+   * const createApi = buildCreateApi(
+   *   coreModule(),
+   *   reactHooksModule({ unstable__sideEffectsInRender: true })
+   * )
+   * ```
+   */
+  unstable__sideEffectsInRender?: boolean
+  /**
+   * A selector creator (usually from `reselect`, or matching the same signature)
+   */
+  createSelector?: typeof _createSelector
+}
+
+/**
+ * Creates a module that generates react hooks from endpoints, for use with `buildCreateApi`.
+ *
+ *  @example
+ * ```ts
+ * const MyContext = React.createContext<ReactReduxContextValue | null>(null);
+ * const customCreateApi = buildCreateApi(
+ *   coreModule(),
+ *   reactHooksModule({
+ *     hooks: {
+ *       useDispatch: createDispatchHook(MyContext),
+ *       useSelector: createSelectorHook(MyContext),
+ *       useStore: createStoreHook(MyContext)
+ *     }
+ *   })
+ * );
+ * ```
+ *
+ * @returns A module for use with `buildCreateApi`
+ */
+export const reactHooksModule = ({
+  batch = rrBatch,
+  hooks = {
+    useDispatch: rrUseDispatch,
+    useSelector: rrUseSelector,
+    useStore: rrUseStore,
+  },
+  createSelector = _createSelector,
+  unstable__sideEffectsInRender = false,
+  ...rest
+}: ReactHooksModuleOptions = {}): Module<ReactHooksModule> => {
+  if (process.env.NODE_ENV !== 'production') {
+    const hookNames = ['useDispatch', 'useSelector', 'useStore'] as const
+    let warned = false
+    for (const hookName of hookNames) {
+      // warn for old hook options
+      if (countObjectKeys(rest) > 0) {
+        if ((rest as Partial<typeof hooks>)[hookName]) {
+          if (!warned) {
+            console.warn(
+              'As of RTK 2.0, the hooks now need to be specified as one object, provided under a `hooks` key:' +
+                '\n`reactHooksModule({ hooks: { useDispatch, useSelector, useStore } })`',
+            )
+            warned = true
+          }
+        }
+        // migrate
+        // @ts-ignore
+        hooks[hookName] = rest[hookName]
+      }
+      // then make sure we have them all
+      if (typeof hooks[hookName] !== 'function') {
+        throw new Error(
+          `When using custom hooks for context, all ${
+            hookNames.length
+          } hooks need to be provided: ${hookNames.join(
+            ', ',
+          )}.\nHook ${hookName} was either not provided or not a function.`,
+        )
+      }
+    }
+  }
+
+  return {
+    name: reactHooksModuleName,
+    init(api, { serializeQueryArgs }, context) {
+      const anyApi = api as any as Api<
+        any,
+        Record<string, any>,
+        any,
+        any,
+        ReactHooksModule
+      >
+      const {
+        buildQueryHooks,
+        buildInfiniteQueryHooks,
+        buildMutationHook,
+        usePrefetch,
+      } = buildHooks({
+        api,
+        moduleOptions: {
+          batch,
+          hooks,
+          unstable__sideEffectsInRender,
+          createSelector,
+        },
+        serializeQueryArgs,
+        context,
+      })
+      safeAssign(anyApi, { usePrefetch })
+      safeAssign(context, { batch })
+
+      return {
+        injectEndpoint(endpointName, definition) {
+          if (isQueryDefinition(definition)) {
+            const {
+              useQuery,
+              useLazyQuery,
+              useLazyQuerySubscription,
+              useQueryState,
+              useQuerySubscription,
+            } = buildQueryHooks(endpointName)
+            safeAssign(anyApi.endpoints[endpointName], {
+              useQuery,
+              useLazyQuery,
+              useLazyQuerySubscription,
+              useQueryState,
+              useQuerySubscription,
+            })
+            ;(api as any)[`use${capitalize(endpointName)}Query`] = useQuery
+            ;(api as any)[`useLazy${capitalize(endpointName)}Query`] =
+              useLazyQuery
+          }
+          if (isMutationDefinition(definition)) {
+            const useMutation = buildMutationHook(endpointName)
+            safeAssign(anyApi.endpoints[endpointName], {
+              useMutation,
+            })
+            ;(api as any)[`use${capitalize(endpointName)}Mutation`] =
+              useMutation
+          } else if (isInfiniteQueryDefinition(definition)) {
+            const {
+              useInfiniteQuery,
+              useInfiniteQuerySubscription,
+              useInfiniteQueryState,
+            } = buildInfiniteQueryHooks(endpointName)
+            safeAssign(anyApi.endpoints[endpointName], {
+              useInfiniteQuery,
+              useInfiniteQuerySubscription,
+              useInfiniteQueryState,
+            })
+            ;(api as any)[`use${capitalize(endpointName)}InfiniteQuery`] =
+              useInfiniteQuery
+          }
+        },
+      }
+    },
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/query/react/namedHooks.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/react/namedHooks.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/react/namedHooks.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+import type {
+  DefinitionType,
+  EndpointDefinitions,
+  MutationDefinition,
+  QueryDefinition,
+  InfiniteQueryDefinition,
+} from '@reduxjs/toolkit/query'
+import type {
+  UseInfiniteQuery,
+  UseLazyQuery,
+  UseMutation,
+  UseQuery,
+} from './buildHooks'
+
+type QueryHookNames<Definitions extends EndpointDefinitions> = {
+  [K in keyof Definitions as Definitions[K] extends {
+    type: DefinitionType.query
+  }
+    ? `use${Capitalize<K & string>}Query`
+    : never]: UseQuery<
+    Extract<Definitions[K], QueryDefinition<any, any, any, any>>
+  >
+}
+
+type LazyQueryHookNames<Definitions extends EndpointDefinitions> = {
+  [K in keyof Definitions as Definitions[K] extends {
+    type: DefinitionType.query
+  }
+    ? `useLazy${Capitalize<K & string>}Query`
+    : never]: UseLazyQuery<
+    Extract<Definitions[K], QueryDefinition<any, any, any, any>>
+  >
+}
+
+type InfiniteQueryHookNames<Definitions extends EndpointDefinitions> = {
+  [K in keyof Definitions as Definitions[K] extends {
+    type: DefinitionType.infinitequery
+  }
+    ? `use${Capitalize<K & string>}InfiniteQuery`
+    : never]: UseInfiniteQuery<
+    Extract<Definitions[K], InfiniteQueryDefinition<any, any, any, any, any>>
+  >
+}
+
+type MutationHookNames<Definitions extends EndpointDefinitions> = {
+  [K in keyof Definitions as Definitions[K] extends {
+    type: DefinitionType.mutation
+  }
+    ? `use${Capitalize<K & string>}Mutation`
+    : never]: UseMutation<
+    Extract<Definitions[K], MutationDefinition<any, any, any, any>>
+  >
+}
+
+export type HooksWithUniqueNames<Definitions extends EndpointDefinitions> =
+  QueryHookNames<Definitions> &
+    LazyQueryHookNames<Definitions> &
+    InfiniteQueryHookNames<Definitions> &
+    MutationHookNames<Definitions>
Index: node_modules/@reduxjs/toolkit/src/query/react/useSerializedStableValue.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/react/useSerializedStableValue.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/react/useSerializedStableValue.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { useEffect, useRef, useMemo } from 'react'
+import type { SerializeQueryArgs } from '@reduxjs/toolkit/query'
+import type { EndpointDefinition } from '@reduxjs/toolkit/query'
+
+export function useStableQueryArgs<T>(
+  queryArgs: T,
+  serialize: SerializeQueryArgs<any>,
+  endpointDefinition: EndpointDefinition<any, any, any, any>,
+  endpointName: string,
+) {
+  const incoming = useMemo(
+    () => ({
+      queryArgs,
+      serialized:
+        typeof queryArgs == 'object'
+          ? serialize({ queryArgs, endpointDefinition, endpointName })
+          : queryArgs,
+    }),
+    [queryArgs, serialize, endpointDefinition, endpointName],
+  )
+  const cache = useRef(incoming)
+  useEffect(() => {
+    if (cache.current.serialized !== incoming.serialized) {
+      cache.current = incoming
+    }
+  }, [incoming])
+
+  return cache.current.serialized === incoming.serialized
+    ? cache.current.queryArgs
+    : queryArgs
+}
Index: node_modules/@reduxjs/toolkit/src/query/react/useShallowStableValue.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/react/useShallowStableValue.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/react/useShallowStableValue.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { useEffect, useRef } from 'react'
+import { shallowEqual } from 'react-redux'
+
+export function useShallowStableValue<T>(value: T) {
+  const cache = useRef(value)
+  useEffect(() => {
+    if (!shallowEqual(cache.current, value)) {
+      cache.current = value
+    }
+  }, [value])
+
+  return shallowEqual(cache.current, value) ? cache.current : value
+}
Index: node_modules/@reduxjs/toolkit/src/query/retry.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/retry.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/retry.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,177 @@
+import type {
+  BaseQueryApi,
+  BaseQueryArg,
+  BaseQueryEnhancer,
+  BaseQueryError,
+  BaseQueryExtraOptions,
+  BaseQueryFn,
+  BaseQueryMeta,
+} from './baseQueryTypes'
+import type { FetchBaseQueryError } from './fetchBaseQuery'
+import { HandledError } from './HandledError'
+
+/**
+ * Exponential backoff based on the attempt number.
+ *
+ * @remarks
+ * 1. 600ms * random(0.4, 1.4)
+ * 2. 1200ms * random(0.4, 1.4)
+ * 3. 2400ms * random(0.4, 1.4)
+ * 4. 4800ms * random(0.4, 1.4)
+ * 5. 9600ms * random(0.4, 1.4)
+ *
+ * @param attempt - Current attempt
+ * @param maxRetries - Maximum number of retries
+ */
+async function defaultBackoff(attempt: number = 0, maxRetries: number = 5) {
+  const attempts = Math.min(attempt, maxRetries)
+
+  const timeout = ~~((Math.random() + 0.4) * (300 << attempts)) // Force a positive int in the case we make this an option
+  await new Promise((resolve) =>
+    setTimeout((res: any) => resolve(res), timeout),
+  )
+}
+
+type RetryConditionFunction = (
+  error: BaseQueryError<BaseQueryFn>,
+  args: BaseQueryArg<BaseQueryFn>,
+  extraArgs: {
+    attempt: number
+    baseQueryApi: BaseQueryApi
+    extraOptions: BaseQueryExtraOptions<BaseQueryFn> & RetryOptions
+  },
+) => boolean
+
+export type RetryOptions = {
+  /**
+   * Function used to determine delay between retries
+   */
+  backoff?: (attempt: number, maxRetries: number) => Promise<void>
+} & (
+  | {
+      /**
+       * How many times the query will be retried (default: 5)
+       */
+      maxRetries?: number
+      retryCondition?: undefined
+    }
+  | {
+      /**
+       * Callback to determine if a retry should be attempted.
+       * Return `true` for another retry and `false` to quit trying prematurely.
+       */
+      retryCondition?: RetryConditionFunction
+      maxRetries?: undefined
+    }
+)
+
+function fail<BaseQuery extends BaseQueryFn = BaseQueryFn>(
+  error: BaseQueryError<BaseQuery>,
+  meta?: BaseQueryMeta<BaseQuery>,
+): never {
+  throw Object.assign(new HandledError({ error, meta }), {
+    throwImmediately: true,
+  })
+}
+
+const EMPTY_OPTIONS = {}
+
+const retryWithBackoff: BaseQueryEnhancer<
+  unknown,
+  RetryOptions,
+  RetryOptions | void
+> = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {
+  // We need to figure out `maxRetries` before we define `defaultRetryCondition.
+  // This is probably goofy, but ought to work.
+  // Put our defaults in one array, filter out undefineds, grab the last value.
+  const possibleMaxRetries: number[] = [
+    5,
+    ((defaultOptions as any) || EMPTY_OPTIONS).maxRetries,
+    ((extraOptions as any) || EMPTY_OPTIONS).maxRetries,
+  ].filter((x) => x !== undefined)
+  const [maxRetries] = possibleMaxRetries.slice(-1)
+
+  const defaultRetryCondition: RetryConditionFunction = (_, __, { attempt }) =>
+    attempt <= maxRetries
+
+  const options: {
+    maxRetries: number
+    backoff: typeof defaultBackoff
+    retryCondition: typeof defaultRetryCondition
+  } = {
+    maxRetries,
+    backoff: defaultBackoff,
+    retryCondition: defaultRetryCondition,
+    ...defaultOptions,
+    ...extraOptions,
+  }
+  let retry = 0
+
+  while (true) {
+    try {
+      const result = await baseQuery(args, api, extraOptions)
+      // baseQueries _should_ return an error property, so we should check for that and throw it to continue retrying
+      if (result.error) {
+        throw new HandledError(result)
+      }
+      return result
+    } catch (e: any) {
+      retry++
+
+      if (e.throwImmediately) {
+        if (e instanceof HandledError) {
+          return e.value
+        }
+
+        // We don't know what this is, so we have to rethrow it
+        throw e
+      }
+
+      if (
+        e instanceof HandledError &&
+        !options.retryCondition(e.value.error as FetchBaseQueryError, args, {
+          attempt: retry,
+          baseQueryApi: api,
+          extraOptions,
+        })
+      ) {
+        return e.value
+      }
+      await options.backoff(retry, options.maxRetries)
+    }
+  }
+}
+
+/**
+ * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.
+ *
+ * @example
+ *
+ * ```ts
+ * // codeblock-meta title="Retry every request 5 times by default"
+ * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'
+ * interface Post {
+ *   id: number
+ *   name: string
+ * }
+ * type PostsResponse = Post[]
+ *
+ * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.
+ * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });
+ * export const api = createApi({
+ *   baseQuery: staggeredBaseQuery,
+ *   endpoints: (build) => ({
+ *     getPosts: build.query<PostsResponse, void>({
+ *       query: () => ({ url: 'posts' }),
+ *     }),
+ *     getPost: build.query<PostsResponse, string>({
+ *       query: (id) => ({ url: `post/${id}` }),
+ *       extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint
+ *     }),
+ *   }),
+ * });
+ *
+ * export const { useGetPostsQuery, useGetPostQuery } = api;
+ * ```
+ */
+export const retry = /* @__PURE__ */ Object.assign(retryWithBackoff, { fail })
Index: node_modules/@reduxjs/toolkit/src/query/standardSchema.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/standardSchema.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/standardSchema.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import type { StandardSchemaV1 } from '@standard-schema/spec'
+import { SchemaError } from '@standard-schema/utils'
+
+export class NamedSchemaError extends SchemaError {
+  constructor(
+    issues: readonly StandardSchemaV1.Issue[],
+    public readonly value: any,
+    public readonly schemaName: string,
+    public readonly _bqMeta: any,
+  ) {
+    super(issues)
+  }
+}
+
+export async function parseWithSchema<Schema extends StandardSchemaV1>(
+  schema: Schema,
+  data: unknown,
+  schemaName: string,
+  bqMeta: any,
+): Promise<StandardSchemaV1.InferOutput<Schema>> {
+  const result = await schema['~standard'].validate(data)
+  if (result.issues) {
+    throw new NamedSchemaError(result.issues, data, schemaName, bqMeta)
+  }
+  return result.value
+}
Index: node_modules/@reduxjs/toolkit/src/query/tests/apiProvider.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/apiProvider.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/apiProvider.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,170 @@
+import { configureStore } from '@reduxjs/toolkit'
+import {
+  ApiProvider,
+  buildCreateApi,
+  coreModule,
+  createApi,
+  reactHooksModule,
+} from '@reduxjs/toolkit/query/react'
+import { fireEvent, render, waitFor } from '@testing-library/react'
+import { delay } from 'msw'
+import * as React from 'react'
+import type { ReactReduxContextValue } from 'react-redux'
+import {
+  Provider,
+  createDispatchHook,
+  createSelectorHook,
+  createStoreHook,
+} from 'react-redux'
+
+const api = createApi({
+  baseQuery: async (arg: any) => {
+    await delay(150)
+    return { data: arg?.body ? arg.body : null }
+  },
+  endpoints: (build) => ({
+    getUser: build.query<any, number>({
+      query: (arg) => arg,
+    }),
+    updateUser: build.mutation<any, { name: string }>({
+      query: (update) => ({ body: update }),
+    }),
+  }),
+})
+
+afterEach(() => {
+  vi.resetAllMocks()
+})
+
+describe('ApiProvider', () => {
+  test('ApiProvider allows a user to make queries without a traditional Redux setup', async () => {
+    function User() {
+      const [value, setValue] = React.useState(0)
+
+      const { isFetching } = api.endpoints.getUser.useQuery(1, {
+        skip: value < 1,
+      })
+
+      return (
+        <div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <button onClick={() => setValue((val) => val + 1)}>
+            Increment value
+          </button>
+        </div>
+      )
+    }
+
+    const { getByText, getByTestId } = render(
+      <ApiProvider api={api}>
+        <User />
+      </ApiProvider>,
+    )
+
+    await waitFor(() =>
+      expect(getByTestId('isFetching').textContent).toBe('false'),
+    )
+    fireEvent.click(getByText('Increment value'))
+    await waitFor(() =>
+      expect(getByTestId('isFetching').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(getByTestId('isFetching').textContent).toBe('false'),
+    )
+    fireEvent.click(getByText('Increment value'))
+    // Being that nothing has changed in the args, this should never fire.
+    expect(getByTestId('isFetching').textContent).toBe('false')
+  })
+  test('ApiProvider throws if nested inside a Redux context', () => {
+    // Intentionally swallow the "unhandled error" message
+    vi.spyOn(console, 'error').mockImplementation(() => {})
+    expect(() =>
+      render(
+        <Provider store={configureStore({ reducer: () => null })}>
+          <ApiProvider api={api}>child</ApiProvider>
+        </Provider>,
+      ),
+    ).toThrowErrorMatchingInlineSnapshot(
+      `[Error: Existing Redux context detected. If you already have a store set up, please use the traditional Redux setup.]`,
+    )
+  })
+  test('ApiProvider allows a custom context', async () => {
+    const customContext = React.createContext<ReactReduxContextValue | null>(
+      null,
+    )
+
+    const createApiWithCustomContext = buildCreateApi(
+      coreModule(),
+      reactHooksModule({
+        hooks: {
+          useStore: createStoreHook(customContext),
+          useSelector: createSelectorHook(customContext),
+          useDispatch: createDispatchHook(customContext),
+        },
+      }),
+    )
+
+    const customApi = createApiWithCustomContext({
+      baseQuery: async (arg: any) => {
+        await delay(150)
+        return { data: arg?.body ? arg.body : null }
+      },
+      endpoints: (build) => ({
+        getUser: build.query<any, number>({
+          query: (arg) => arg,
+        }),
+        updateUser: build.mutation<any, { name: string }>({
+          query: (update) => ({ body: update }),
+        }),
+      }),
+    })
+
+    function User() {
+      const [value, setValue] = React.useState(0)
+
+      const { isFetching } = customApi.endpoints.getUser.useQuery(1, {
+        skip: value < 1,
+      })
+
+      return (
+        <div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <button onClick={() => setValue((val) => val + 1)}>
+            Increment value
+          </button>
+        </div>
+      )
+    }
+
+    const { getByText, getByTestId } = render(
+      <ApiProvider api={customApi} context={customContext}>
+        <User />
+      </ApiProvider>,
+    )
+
+    await waitFor(() =>
+      expect(getByTestId('isFetching').textContent).toBe('false'),
+    )
+    fireEvent.click(getByText('Increment value'))
+    await waitFor(() =>
+      expect(getByTestId('isFetching').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(getByTestId('isFetching').textContent).toBe('false'),
+    )
+    fireEvent.click(getByText('Increment value'))
+    // Being that nothing has changed in the args, this should never fire.
+    expect(getByTestId('isFetching').textContent).toBe('false')
+
+    // won't throw if nested, because context is different
+    expect(() =>
+      render(
+        <Provider store={configureStore({ reducer: () => null })}>
+          <ApiProvider api={customApi} context={customContext}>
+            child
+          </ApiProvider>
+        </Provider>,
+      ),
+    ).not.toThrow()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/baseQueryTypes.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/baseQueryTypes.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/baseQueryTypes.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query'
+
+describe('type tests', () => {
+  test('BaseQuery meta types propagate to endpoint callbacks', () => {
+    createApi({
+      baseQuery: fetchBaseQuery(),
+      endpoints: (build) => ({
+        getDummy: build.query<null, undefined>({
+          query: () => 'dummy',
+          onCacheEntryAdded: async (arg, { cacheDataLoaded }) => {
+            const { meta } = await cacheDataLoaded
+            const { request, response } = meta! // Expect request and response to be there
+          },
+        }),
+      }),
+    })
+
+    const baseQuery = retry(fetchBaseQuery()) // Even when wrapped with retry
+    createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        getDummy: build.query<null, undefined>({
+          query: () => 'dummy',
+          onCacheEntryAdded: async (arg, { cacheDataLoaded }) => {
+            const { meta } = await cacheDataLoaded
+            const { request, response } = meta! // Expect request and response to be there
+          },
+        }),
+      }),
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/buildCreateApi.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/buildCreateApi.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/buildCreateApi.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,168 @@
+import { createSelectorCreator, lruMemoize } from '@reduxjs/toolkit'
+import {
+  buildCreateApi,
+  coreModule,
+  reactHooksModule,
+} from '@reduxjs/toolkit/query/react'
+import { render, screen, waitFor } from '@testing-library/react'
+import { delay } from 'msw'
+import * as React from 'react'
+import type { ReactReduxContextValue } from 'react-redux'
+import {
+  Provider,
+  createDispatchHook,
+  createSelectorHook,
+  createStoreHook,
+} from 'react-redux'
+import { setupApiStore, useRenderCounter } from '../../tests/utils/helpers'
+
+const MyContext = React.createContext<ReactReduxContextValue | null>(null)
+
+describe('buildCreateApi', () => {
+  test('Works with all hooks provided', async () => {
+    const customCreateApi = buildCreateApi(
+      coreModule(),
+      reactHooksModule({
+        hooks: {
+          useDispatch: createDispatchHook(MyContext),
+          useSelector: createSelectorHook(MyContext),
+          useStore: createStoreHook(MyContext),
+        },
+      }),
+    )
+
+    const api = customCreateApi({
+      baseQuery: async (arg: any) => {
+        await delay(150)
+
+        return {
+          data: arg?.body ? { ...arg.body } : {},
+        }
+      },
+      endpoints: (build) => ({
+        getUser: build.query<{ name: string }, number>({
+          query: () => ({
+            body: { name: 'Timmy' },
+          }),
+        }),
+      }),
+    })
+
+    let getRenderCount: () => number = () => 0
+
+    const storeRef = setupApiStore(api, {}, { withoutTestLifecycles: true })
+
+    // Copy of 'useQuery hook basic render count assumptions' from `buildHooks.test.tsx`
+    function User() {
+      const { isFetching } = api.endpoints.getUser.useQuery(1)
+      getRenderCount = useRenderCounter()
+
+      return (
+        <div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+        </div>
+      )
+    }
+
+    function Wrapper({ children }: any) {
+      return (
+        <Provider store={storeRef.store} context={MyContext}>
+          {children}
+        </Provider>
+      )
+    }
+
+    render(<User />, { wrapper: Wrapper })
+    // By the time this runs, the initial render will happen, and the query
+    //  will start immediately running by the time we can expect this
+    expect(getRenderCount()).toBe(2)
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+    )
+    expect(getRenderCount()).toBe(3)
+  })
+
+  test("Throws an error if you don't provide all hooks", async () => {
+    const callBuildCreateApi = () => {
+      const customCreateApi = buildCreateApi(
+        coreModule(),
+        reactHooksModule({
+          // @ts-ignore
+          hooks: {
+            useDispatch: createDispatchHook(MyContext),
+            useSelector: createSelectorHook(MyContext),
+          },
+        }),
+      )
+    }
+
+    expect(callBuildCreateApi).toThrowErrorMatchingInlineSnapshot(
+      `
+      [Error: When using custom hooks for context, all 3 hooks need to be provided: useDispatch, useSelector, useStore.
+      Hook useStore was either not provided or not a function.]
+    `,
+    )
+  })
+  test('allows passing createSelector instance', async () => {
+    const memoize = vi.fn(lruMemoize)
+    const createSelector = createSelectorCreator(memoize)
+    const createApi = buildCreateApi(
+      coreModule({ createSelector }),
+      reactHooksModule({ createSelector }),
+    )
+    const api = createApi({
+      baseQuery: async (arg: any) => {
+        await delay(150)
+
+        return {
+          data: arg?.body ? { ...arg.body } : {},
+        }
+      },
+      endpoints: (build) => ({
+        getUser: build.query<{ name: string }, number>({
+          query: () => ({
+            body: { name: 'Timmy' },
+          }),
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, {}, { withoutTestLifecycles: true })
+
+    await storeRef.store.dispatch(api.endpoints.getUser.initiate(1))
+
+    const selectUser = api.endpoints.getUser.select(1)
+
+    expect(selectUser(storeRef.store.getState()).data).toEqual({
+      name: 'Timmy',
+    })
+
+    expect(memoize).toHaveBeenCalledTimes(4)
+
+    memoize.mockClear()
+
+    function User() {
+      const { isFetching } = api.endpoints.getUser.useQuery(1)
+
+      return (
+        <div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+        </div>
+      )
+    }
+
+    function Wrapper({ children }: any) {
+      return <Provider store={storeRef.store}>{children}</Provider>
+    }
+
+    render(<User />, { wrapper: Wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+    )
+
+    // select() + selectFromResult
+    expect(memoize).toHaveBeenCalledTimes(8)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/buildHooks.test-d.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/buildHooks.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/buildHooks.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,374 @@
+import type {
+  QueryStateSelector,
+  UseMutation,
+  UseQuery,
+} from '@internal/query/react/buildHooks'
+import { ANY } from '@internal/tests/utils/helpers'
+import type { SerializedError } from '@reduxjs/toolkit'
+import type {
+  QueryDefinition,
+  SubscriptionOptions,
+  TypedQueryStateSelector,
+} from '@reduxjs/toolkit/query/react'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+import { useState } from 'react'
+
+let amount = 0
+let nextItemId = 0
+
+interface Item {
+  id: number
+}
+
+const api = createApi({
+  baseQuery: (arg: any) => {
+    if (arg?.body && 'amount' in arg.body) {
+      amount += 1
+    }
+
+    if (arg?.body && 'forceError' in arg.body) {
+      return {
+        error: {
+          status: 500,
+          data: null,
+        },
+      }
+    }
+
+    if (arg?.body && 'listItems' in arg.body) {
+      const items: Item[] = []
+      for (let i = 0; i < 3; i++) {
+        const item = { id: nextItemId++ }
+        items.push(item)
+      }
+      return { data: items }
+    }
+
+    return {
+      data: arg?.body ? { ...arg.body, ...(amount ? { amount } : {}) } : {},
+    }
+  },
+  endpoints: (build) => ({
+    getUser: build.query<{ name: string }, number>({
+      query: () => ({
+        body: { name: 'Timmy' },
+      }),
+    }),
+    getUserAndForceError: build.query<{ name: string }, number>({
+      query: () => ({
+        body: {
+          forceError: true,
+        },
+      }),
+    }),
+    getIncrementedAmount: build.query<{ amount: number }, void>({
+      query: () => ({
+        url: '',
+        body: {
+          amount,
+        },
+      }),
+    }),
+    updateUser: build.mutation<{ name: string }, { name: string }>({
+      query: (update) => ({ body: update }),
+    }),
+    getError: build.query({
+      query: () => '/error',
+    }),
+    listItems: build.query<Item[], { pageNumber: number }>({
+      serializeQueryArgs: ({ endpointName }) => {
+        return endpointName
+      },
+      query: ({ pageNumber }) => ({
+        url: `items?limit=1&offset=${pageNumber}`,
+        body: {
+          listItems: true,
+        },
+      }),
+      merge: (currentCache, newItems) => {
+        currentCache.push(...newItems)
+      },
+      forceRefetch: () => {
+        return true
+      },
+    }),
+  }),
+})
+
+describe('type tests', () => {
+  test('useLazyQuery hook callback returns various properties to handle the result', () => {
+    function User() {
+      const [getUser] = api.endpoints.getUser.useLazyQuery()
+      const [{ successMsg, errMsg, isAborted }, setValues] = useState({
+        successMsg: '',
+        errMsg: '',
+        isAborted: false,
+      })
+
+      const handleClick = (abort: boolean) => async () => {
+        const res = getUser(1)
+
+        // no-op simply for clearer type assertions
+        res.then((result) => {
+          if (result.isSuccess) {
+            expectTypeOf(result).toMatchTypeOf<{
+              data: {
+                name: string
+              }
+            }>()
+          }
+
+          if (result.isError) {
+            expectTypeOf(result).toMatchTypeOf<{
+              error: { status: number; data: unknown } | SerializedError
+            }>()
+          }
+        })
+
+        expectTypeOf(res.arg).toBeNumber()
+
+        expectTypeOf(res.requestId).toBeString()
+
+        expectTypeOf(res.abort).toEqualTypeOf<() => void>()
+
+        expectTypeOf(res.unsubscribe).toEqualTypeOf<() => void>()
+
+        expectTypeOf(res.updateSubscriptionOptions).toEqualTypeOf<
+          (options: SubscriptionOptions) => void
+        >()
+
+        expectTypeOf(res.refetch).toMatchTypeOf<() => void>()
+
+        expectTypeOf(res.unwrap()).resolves.toEqualTypeOf<{ name: string }>()
+      }
+
+      return (
+        <div>
+          <button onClick={handleClick(false)}>Fetch User successfully</button>
+          <button onClick={handleClick(true)}>Fetch User and abort</button>
+          <div>{successMsg}</div>
+          <div>{errMsg}</div>
+          <div>{isAborted ? 'Request was aborted' : ''}</div>
+        </div>
+      )
+    }
+  })
+
+  test('useMutation hook callback returns various properties to handle the result', async () => {
+    function User() {
+      const [updateUser] = api.endpoints.updateUser.useMutation()
+      const [successMsg, setSuccessMsg] = useState('')
+      const [errMsg, setErrMsg] = useState('')
+      const [isAborted, setIsAborted] = useState(false)
+
+      const handleClick = async () => {
+        const res = updateUser({ name: 'Banana' })
+
+        expectTypeOf(res).resolves.toMatchTypeOf<
+          | {
+              error: { status: number; data: unknown } | SerializedError
+            }
+          | {
+              data: {
+                name: string
+              }
+            }
+        >()
+
+        expectTypeOf(res.arg).toMatchTypeOf<{
+          endpointName: string
+          originalArgs: { name: string }
+          track?: boolean
+        }>()
+
+        expectTypeOf(res.requestId).toBeString()
+
+        expectTypeOf(res.abort).toEqualTypeOf<() => void>()
+
+        expectTypeOf(res.unwrap()).resolves.toEqualTypeOf<{ name: string }>()
+
+        expectTypeOf(res.reset).toEqualTypeOf<() => void>()
+      }
+
+      return (
+        <div>
+          <button onClick={handleClick}>Update User and abort</button>
+          <div>{successMsg}</div>
+          <div>{errMsg}</div>
+          <div>{isAborted ? 'Request was aborted' : ''}</div>
+        </div>
+      )
+    }
+  })
+
+  test('top level named hooks', () => {
+    interface Post {
+      id: number
+      name: string
+      fetched_at: string
+    }
+
+    type PostsResponse = Post[]
+
+    const api = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com/' }),
+      tagTypes: ['Posts'],
+      endpoints: (build) => ({
+        getPosts: build.query<PostsResponse, void>({
+          query: () => ({ url: 'posts' }),
+          providesTags: (result) =>
+            result ? result.map(({ id }) => ({ type: 'Posts', id })) : [],
+        }),
+        updatePost: build.mutation<Post, Partial<Post>>({
+          query: ({ id, ...body }) => ({
+            url: `post/${id}`,
+            method: 'PUT',
+            body,
+          }),
+          invalidatesTags: (result, error, { id }) => [{ type: 'Posts', id }],
+        }),
+        addPost: build.mutation<Post, Partial<Post>>({
+          query: (body) => ({
+            url: `post`,
+            method: 'POST',
+            body,
+          }),
+          invalidatesTags: ['Posts'],
+        }),
+      }),
+    })
+
+    expectTypeOf(api.useGetPostsQuery).toEqualTypeOf(
+      api.endpoints.getPosts.useQuery,
+    )
+
+    expectTypeOf(api.useUpdatePostMutation).toEqualTypeOf(
+      api.endpoints.updatePost.useMutation,
+    )
+
+    expectTypeOf(api.useAddPostMutation).toEqualTypeOf(
+      api.endpoints.addPost.useMutation,
+    )
+  })
+
+  test('UseQuery type can be used to recreate the hook type', () => {
+    const fakeQuery = ANY as UseQuery<
+      typeof api.endpoints.getUser.Types.QueryDefinition
+    >
+
+    expectTypeOf(fakeQuery).toEqualTypeOf(api.endpoints.getUser.useQuery)
+  })
+
+  test('UseMutation type can be used to recreate the hook type', () => {
+    const fakeMutation = ANY as UseMutation<
+      typeof api.endpoints.updateUser.Types.MutationDefinition
+    >
+
+    expectTypeOf(fakeMutation).toEqualTypeOf(
+      api.endpoints.updateUser.useMutation,
+    )
+  })
+
+  test('TypedQueryStateSelector creates a pre-typed version of QueryStateSelector', () => {
+    type Post = {
+      id: number
+      title: string
+    }
+
+    type PostsApiResponse = {
+      posts: Post[]
+      total: number
+      skip: number
+      limit: number
+    }
+
+    type QueryArgument = number | undefined
+
+    type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+
+    type SelectedResult = Pick<PostsApiResponse, 'posts'>
+
+    const postsApiSlice = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com/posts' }),
+      reducerPath: 'postsApi',
+      tagTypes: ['Posts'],
+      endpoints: (build) => ({
+        getPosts: build.query<PostsApiResponse, QueryArgument>({
+          query: (limit = 5) => `?limit=${limit}&select=title`,
+        }),
+      }),
+    })
+
+    const { useGetPostsQuery } = postsApiSlice
+
+    function PostById({ id }: { id: number }) {
+      const { post } = useGetPostsQuery(undefined, {
+        selectFromResult: (state) => ({
+          post: state.data?.posts.find((post) => post.id === id),
+        }),
+      })
+
+      expectTypeOf(post).toEqualTypeOf<Post | undefined>()
+
+      return <li>{post?.title}</li>
+    }
+
+    const EMPTY_ARRAY: Post[] = []
+
+    const typedSelectFromResult: TypedQueryStateSelector<
+      PostsApiResponse,
+      QueryArgument,
+      BaseQueryFunction,
+      SelectedResult
+    > = (state) => ({ posts: state.data?.posts ?? EMPTY_ARRAY })
+
+    expectTypeOf<
+      TypedQueryStateSelector<
+        PostsApiResponse,
+        QueryArgument,
+        BaseQueryFunction,
+        SelectedResult
+      >
+    >().toEqualTypeOf<
+      QueryStateSelector<
+        SelectedResult,
+        QueryDefinition<
+          QueryArgument,
+          BaseQueryFunction,
+          string,
+          PostsApiResponse
+        >
+      >
+    >()
+
+    expectTypeOf(typedSelectFromResult).toEqualTypeOf<
+      QueryStateSelector<
+        SelectedResult,
+        QueryDefinition<
+          QueryArgument,
+          BaseQueryFunction,
+          string,
+          PostsApiResponse
+        >
+      >
+    >()
+
+    function PostsList() {
+      const { posts } = useGetPostsQuery(undefined, {
+        selectFromResult: typedSelectFromResult,
+      })
+
+      expectTypeOf(posts).toEqualTypeOf<Post[]>()
+
+      return (
+        <div>
+          <ul>
+            {posts.map((post) => (
+              <PostById key={post.id} id={post.id} />
+            ))}
+          </ul>
+        </div>
+      )
+    }
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/buildHooks.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/buildHooks.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/buildHooks.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3792 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import type { SubscriptionOptions } from '@internal/query/core/apiState'
+import type { SubscriptionSelectors } from '@internal/query/core/buildMiddleware/types'
+import { server } from '@internal/query/tests/mocks/server'
+import { countObjectKeys } from '@internal/query/utils/countObjectKeys'
+import {
+  actionsReducer,
+  setupApiStore,
+  useRenderCounter,
+  waitForFakeTimer,
+  waitMs,
+  withProvider,
+} from '@internal/tests/utils/helpers'
+import type { UnknownAction } from '@reduxjs/toolkit'
+import {
+  configureStore,
+  createListenerMiddleware,
+  createSlice,
+} from '@reduxjs/toolkit'
+import {
+  QueryStatus,
+  createApi,
+  fetchBaseQuery,
+  skipToken,
+} from '@reduxjs/toolkit/query/react'
+import {
+  act,
+  fireEvent,
+  render,
+  renderHook,
+  screen,
+  waitFor,
+} from '@testing-library/react'
+import { userEvent } from '@testing-library/user-event'
+import type { SyncScreen } from '@testing-library/react-render-stream/pure'
+import { createRenderStream } from '@testing-library/react-render-stream/pure'
+import { HttpResponse, http, delay } from 'msw'
+import { useEffect, useMemo, useState } from 'react'
+import type { InfiniteQueryResultFlags } from '../core/buildSelectors'
+
+// Just setup a temporary in-memory counter for tests that `getIncrementedAmount`.
+// This can be used to test how many renders happen due to data changes or
+// the refetching behavior of components.
+let amount = 0
+let nextItemId = 0
+let refetchCount = 0
+
+interface Item {
+  id: number
+}
+
+const api = createApi({
+  baseQuery: async (arg: any) => {
+    await waitForFakeTimer(150)
+    if (arg?.body && 'amount' in arg.body) {
+      amount += 1
+    }
+
+    if (arg?.body && 'forceError' in arg.body) {
+      return {
+        error: {
+          status: 500,
+          data: null,
+        },
+      }
+    }
+
+    if (arg?.body && 'listItems' in arg.body) {
+      const items: Item[] = []
+      for (let i = 0; i < 3; i++) {
+        const item = { id: nextItemId++ }
+        items.push(item)
+      }
+      return { data: items }
+    }
+
+    return {
+      data: arg?.body ? { ...arg.body, ...(amount ? { amount } : {}) } : {},
+    }
+  },
+  tagTypes: ['IncrementedAmount'],
+  endpoints: (build) => ({
+    getUser: build.query<{ name: string }, number>({
+      query: () => ({
+        body: { name: 'Timmy' },
+      }),
+    }),
+    getUserAndForceError: build.query<{ name: string }, number>({
+      query: () => ({
+        body: {
+          forceError: true,
+        },
+      }),
+    }),
+    getUserWithRefetchError: build.query<{ name: string }, number>({
+      queryFn: async (id) => {
+        refetchCount += 1
+
+        if (refetchCount > 1) {
+          return { error: true } as any
+        }
+
+        return { data: { name: 'Timmy' } }
+      },
+    }),
+    getIncrementedAmount: build.query<{ amount: number }, void>({
+      query: () => ({
+        url: '',
+        body: {
+          amount,
+        },
+      }),
+      providesTags: ['IncrementedAmount'],
+    }),
+    triggerUpdatedAmount: build.mutation<void, void>({
+      queryFn: async () => {
+        return { data: undefined }
+      },
+      invalidatesTags: ['IncrementedAmount'],
+    }),
+    updateUser: build.mutation<{ name: string }, { name: string }>({
+      query: (update) => ({ body: update }),
+    }),
+    getError: build.query({
+      query: () => '/error',
+    }),
+    listItems: build.query<Item[], { pageNumber: number | bigint }>({
+      serializeQueryArgs: ({ endpointName }) => {
+        return endpointName
+      },
+      query: ({ pageNumber }) => ({
+        url: `items?limit=1&offset=${pageNumber}`,
+        body: {
+          listItems: true,
+        },
+      }),
+      merge: (currentCache, newItems) => {
+        currentCache.push(...newItems)
+      },
+      forceRefetch: () => {
+        return true
+      },
+    }),
+    queryWithDeepArg: build.query<string, { param: { nested: string } }>({
+      query: ({ param: { nested } }) => nested,
+      serializeQueryArgs: ({ queryArgs }) => {
+        return queryArgs.param.nested
+      },
+    }),
+  }),
+})
+
+const listenerMiddleware = createListenerMiddleware()
+
+let actions: UnknownAction[] = []
+
+const storeRef = setupApiStore(
+  api,
+  {},
+  {
+    middleware: {
+      prepend: [listenerMiddleware.middleware],
+    },
+  },
+)
+
+let getSubscriptions: SubscriptionSelectors['getSubscriptions']
+let getSubscriptionCount: SubscriptionSelectors['getSubscriptionCount']
+
+beforeEach(() => {
+  actions = []
+  listenerMiddleware.startListening({
+    predicate: () => true,
+    effect: (action) => {
+      actions.push(action)
+    },
+  })
+  ;({ getSubscriptions, getSubscriptionCount } = storeRef.store.dispatch(
+    api.internalActions.internal_getRTKQSubscriptions(),
+  ) as unknown as SubscriptionSelectors)
+})
+
+afterEach(() => {
+  nextItemId = 0
+  amount = 0
+  listenerMiddleware.clearListeners()
+
+  server.resetHandlers()
+})
+
+let getRenderCount: () => number = () => 0
+
+describe('hooks tests', () => {
+  describe('useQuery', () => {
+    test('useQuery hook basic render count assumptions', async () => {
+      function User() {
+        const { isFetching } = api.endpoints.getUser.useQuery(1)
+        getRenderCount = useRenderCounter()
+
+        return (
+          <div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      // By the time this runs, the initial render will happen, and the query
+      //  will start immediately running by the time we can expect this
+      expect(getRenderCount()).toBe(2)
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      expect(getRenderCount()).toBe(3)
+    })
+
+    test('useQuery hook sets isFetching=true whenever a request is in flight', async () => {
+      function User() {
+        const [value, setValue] = useState(0)
+
+        const { isFetching } = api.endpoints.getUser.useQuery(1, {
+          skip: value < 1,
+        })
+        getRenderCount = useRenderCounter()
+
+        return (
+          <div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <button onClick={() => setValue((val) => val + 1)}>
+              Increment value
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      expect(getRenderCount()).toBe(1)
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      fireEvent.click(screen.getByText('Increment value')) // setState = 1, perform request = 2
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      expect(getRenderCount()).toBe(4)
+
+      fireEvent.click(screen.getByText('Increment value'))
+      // Being that nothing has changed in the args, this should never fire.
+      expect(screen.getByTestId('isFetching').textContent).toBe('false')
+      expect(getRenderCount()).toBe(5) // even though there was no request, the button click updates the state so this is an expected render
+    })
+
+    test('useQuery hook sets isLoading=true only on initial request', async () => {
+      let refetch: any, isLoading: boolean, isFetching: boolean
+      function User() {
+        const [value, setValue] = useState(0)
+
+        ;({ isLoading, isFetching, refetch } = api.endpoints.getUser.useQuery(
+          2,
+          {
+            skip: value < 1,
+          },
+        ))
+        return (
+          <div>
+            <div data-testid="isLoading">{String(isLoading)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <button onClick={() => setValue((val) => val + 1)}>
+              Increment value
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      // Being that we skipped the initial request on mount, this should be false
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+      )
+      fireEvent.click(screen.getByText('Increment value'))
+      // Condition is met, should load
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+      ) // Make sure the original loading has completed.
+      fireEvent.click(screen.getByText('Increment value'))
+      // Being that we already have data, isLoading should be false
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+      )
+      // We call a refetch, should still be `false`
+      act(() => void refetch())
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      expect(screen.getByTestId('isLoading').textContent).toBe('false')
+    })
+
+    test('useQuery hook sets isLoading and isFetching to the correct states', async () => {
+      let refetchMe: () => void = () => {}
+      function User() {
+        const [value, setValue] = useState(0)
+        getRenderCount = useRenderCounter()
+
+        const { isLoading, isFetching, refetch } =
+          api.endpoints.getUser.useQuery(22, { skip: value < 1 })
+        refetchMe = refetch
+        return (
+          <div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <div data-testid="isLoading">{String(isLoading)}</div>
+            <button onClick={() => setValue((val) => val + 1)}>
+              Increment value
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      expect(getRenderCount()).toBe(1)
+
+      expect(screen.getByTestId('isLoading').textContent).toBe('false')
+      expect(screen.getByTestId('isFetching').textContent).toBe('false')
+
+      fireEvent.click(screen.getByText('Increment value')) // renders: set state = 1, perform request = 2
+      // Condition is met, should load
+      await waitFor(() => {
+        expect(screen.getByTestId('isLoading').textContent).toBe('true')
+        expect(screen.getByTestId('isFetching').textContent).toBe('true')
+      })
+
+      // Make sure the request is done for sure.
+      await waitFor(() => {
+        expect(screen.getByTestId('isLoading').textContent).toBe('false')
+        expect(screen.getByTestId('isFetching').textContent).toBe('false')
+      })
+      expect(getRenderCount()).toBe(4)
+
+      fireEvent.click(screen.getByText('Increment value'))
+      // Being that we already have data and changing the value doesn't trigger a new request, only the button click should impact the render
+      await waitFor(() => {
+        expect(screen.getByTestId('isLoading').textContent).toBe('false')
+        expect(screen.getByTestId('isFetching').textContent).toBe('false')
+      })
+      expect(getRenderCount()).toBe(5)
+
+      // We call a refetch, should set `isFetching` to true, then false when complete/errored
+      act(() => void refetchMe())
+      await waitFor(() => {
+        expect(screen.getByTestId('isLoading').textContent).toBe('false')
+        expect(screen.getByTestId('isFetching').textContent).toBe('true')
+      })
+      await waitFor(() => {
+        expect(screen.getByTestId('isLoading').textContent).toBe('false')
+        expect(screen.getByTestId('isFetching').textContent).toBe('false')
+      })
+      expect(getRenderCount()).toBe(7)
+    })
+
+    test('`isLoading` does not jump back to true, while `isFetching` does', async () => {
+      const loadingHist: boolean[] = [],
+        fetchingHist: boolean[] = []
+
+      function User({ id }: { id: number }) {
+        const { isLoading, isFetching, status } =
+          api.endpoints.getUser.useQuery(id)
+
+        useEffect(() => {
+          loadingHist.push(isLoading)
+        }, [isLoading])
+        useEffect(() => {
+          fetchingHist.push(isFetching)
+        }, [isFetching])
+        return (
+          <div data-testid="status">
+            {status === QueryStatus.fulfilled && id}
+          </div>
+        )
+      }
+
+      let { rerender } = render(<User id={1} />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('1'),
+      )
+      rerender(<User id={2} />)
+
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('2'),
+      )
+
+      expect(loadingHist).toEqual([true, false])
+      expect(fetchingHist).toEqual([true, false, true, false])
+    })
+
+    test('`isSuccess` does not jump back false on subsequent queries', async () => {
+      type LoadingState = {
+        id: number
+        isFetching: boolean
+        isSuccess: boolean
+      }
+      const loadingHistory: LoadingState[] = []
+
+      function User({ id }: { id: number }) {
+        const queryRes = api.endpoints.getUser.useQuery(id)
+
+        useEffect(() => {
+          const { isFetching, isSuccess } = queryRes
+          loadingHistory.push({ id, isFetching, isSuccess })
+        }, [id, queryRes])
+        return (
+          <div data-testid="status">
+            {queryRes.status === QueryStatus.fulfilled && id}
+          </div>
+        )
+      }
+
+      let { rerender } = render(<User id={1} />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('1'),
+      )
+      rerender(<User id={2} />)
+
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('2'),
+      )
+
+      expect(loadingHistory).toEqual([
+        // Initial render(s)
+        { id: 1, isFetching: true, isSuccess: false },
+        { id: 1, isFetching: true, isSuccess: false },
+        // Data returned
+        { id: 1, isFetching: false, isSuccess: true },
+        // ID changed, there's an uninitialized cache entry.
+        // IMPORTANT: `isSuccess` should not be false here.
+        // We have valid data already for the old item.
+        { id: 2, isFetching: true, isSuccess: true },
+        { id: 2, isFetching: true, isSuccess: true },
+        { id: 2, isFetching: false, isSuccess: true },
+      ])
+    })
+
+    test('isSuccess stays consistent if there is an error while refetching', async () => {
+      type LoadingState = {
+        id: number
+        isFetching: boolean
+        isSuccess: boolean
+        isError: boolean
+      }
+      const loadingHistory: LoadingState[] = []
+
+      function Component({ id = 1 }) {
+        const queryRes = api.endpoints.getUserWithRefetchError.useQuery(id)
+        const { refetch, data, status } = queryRes
+
+        useEffect(() => {
+          const { isFetching, isSuccess, isError } = queryRes
+          loadingHistory.push({ id, isFetching, isSuccess, isError })
+        }, [id, queryRes])
+
+        return (
+          <div>
+            <button
+              onClick={() => {
+                refetch()
+              }}
+            >
+              refetch
+            </button>
+            <div data-testid="name">{data?.name}</div>
+            <div data-testid="status">{status}</div>
+          </div>
+        )
+      }
+
+      render(<Component />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('name').textContent).toBe('Timmy'),
+      )
+
+      fireEvent.click(screen.getByText('refetch'))
+
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('pending'),
+      )
+
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('rejected'),
+      )
+
+      fireEvent.click(screen.getByText('refetch'))
+
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('pending'),
+      )
+
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('rejected'),
+      )
+
+      expect(loadingHistory).toEqual([
+        // Initial renders
+        { id: 1, isFetching: true, isSuccess: false, isError: false },
+        { id: 1, isFetching: true, isSuccess: false, isError: false },
+        // Data is returned
+        { id: 1, isFetching: false, isSuccess: true, isError: false },
+        // Started first refetch
+        { id: 1, isFetching: true, isSuccess: true, isError: false },
+        // First refetch errored
+        { id: 1, isFetching: false, isSuccess: false, isError: true },
+        // Started second refetch
+        // IMPORTANT We expect `isSuccess` to still be false,
+        // despite having started the refetch again.
+        { id: 1, isFetching: true, isSuccess: false, isError: false },
+        // Second refetch errored
+        { id: 1, isFetching: false, isSuccess: false, isError: true },
+      ])
+    })
+
+    test('useQuery hook respects refetchOnMountOrArgChange: true', async () => {
+      let data, isLoading, isFetching
+      function User() {
+        ;({ data, isLoading, isFetching } =
+          api.endpoints.getIncrementedAmount.useQuery(undefined, {
+            refetchOnMountOrArgChange: true,
+          }))
+        return (
+          <div>
+            <div data-testid="isLoading">{String(isLoading)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <div data-testid="amount">{String(data?.amount)}</div>
+          </div>
+        )
+      }
+
+      const { unmount } = render(<User />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+      )
+
+      await waitFor(() =>
+        expect(screen.getByTestId('amount').textContent).toBe('1'),
+      )
+
+      unmount()
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      // Let's make sure we actually fetch, and we increment
+      expect(screen.getByTestId('isLoading').textContent).toBe('false')
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      await waitFor(() =>
+        expect(screen.getByTestId('amount').textContent).toBe('2'),
+      )
+    })
+
+    test('useQuery does not refetch when refetchOnMountOrArgChange: NUMBER condition is not met', async () => {
+      let data, isLoading, isFetching
+      function User() {
+        ;({ data, isLoading, isFetching } =
+          api.endpoints.getIncrementedAmount.useQuery(undefined, {
+            refetchOnMountOrArgChange: 10,
+          }))
+        return (
+          <div>
+            <div data-testid="isLoading">{String(isLoading)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <div data-testid="amount">{String(data?.amount)}</div>
+          </div>
+        )
+      }
+
+      const { unmount } = render(<User />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+      )
+
+      await waitFor(() =>
+        expect(screen.getByTestId('amount').textContent).toBe('1'),
+      )
+
+      unmount()
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      // Let's make sure we actually fetch, and we increment. Should be false because we do this immediately
+      // and the condition is set to 10 seconds
+      expect(screen.getByTestId('isFetching').textContent).toBe('false')
+      await waitFor(() =>
+        expect(screen.getByTestId('amount').textContent).toBe('1'),
+      )
+    })
+
+    test('useQuery refetches when refetchOnMountOrArgChange: NUMBER condition is met', async () => {
+      let data, isLoading, isFetching
+      function User() {
+        ;({ data, isLoading, isFetching } =
+          api.endpoints.getIncrementedAmount.useQuery(undefined, {
+            refetchOnMountOrArgChange: 0.5,
+          }))
+        return (
+          <div>
+            <div data-testid="isLoading">{String(isLoading)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <div data-testid="amount">{String(data?.amount)}</div>
+          </div>
+        )
+      }
+
+      const { unmount } = render(<User />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+      )
+
+      await waitFor(() =>
+        expect(screen.getByTestId('amount').textContent).toBe('1'),
+      )
+
+      unmount()
+
+      // Wait to make sure we've passed the `refetchOnMountOrArgChange` value
+      await waitMs(510)
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      // Let's make sure we actually fetch, and we increment
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      await waitFor(() =>
+        expect(screen.getByTestId('amount').textContent).toBe('2'),
+      )
+    })
+
+    test('refetchOnMountOrArgChange works as expected when changing skip from false->true', async () => {
+      let data, isLoading, isFetching
+      function User() {
+        const [skip, setSkip] = useState(true)
+        ;({ data, isLoading, isFetching } =
+          api.endpoints.getIncrementedAmount.useQuery(undefined, {
+            refetchOnMountOrArgChange: 0.5,
+            skip,
+          }))
+
+        return (
+          <div>
+            <div data-testid="isLoading">{String(isLoading)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <div data-testid="amount">{String(data?.amount)}</div>
+            <button onClick={() => setSkip((prev) => !prev)}>
+              change skip
+            </button>
+            ;
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      expect(screen.getByTestId('isLoading').textContent).toBe('false')
+      expect(screen.getByTestId('amount').textContent).toBe('undefined')
+
+      fireEvent.click(screen.getByText('change skip'))
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      await waitFor(() =>
+        expect(screen.getByTestId('amount').textContent).toBe('1'),
+      )
+    })
+
+    test('refetchOnMountOrArgChange works as expected when changing skip from false->true with a cached query', async () => {
+      // 1. we need to mount a skipped query, then toggle skip to generate a cached result
+      // 2. we need to mount a skipped component after that, then toggle skip as well. should pull from the cache.
+      // 3. we need to mount another skipped component, then toggle skip after the specified duration and expect the time condition to be satisfied
+
+      let data, isLoading, isFetching
+      function User() {
+        const [skip, setSkip] = useState(true)
+        ;({ data, isLoading, isFetching } =
+          api.endpoints.getIncrementedAmount.useQuery(undefined, {
+            skip,
+            refetchOnMountOrArgChange: 0.5,
+          }))
+
+        return (
+          <div>
+            <div data-testid="isLoading">{String(isLoading)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <div data-testid="amount">{String(data?.amount)}</div>
+            <button onClick={() => setSkip((prev) => !prev)}>
+              change skip
+            </button>
+            ;
+          </div>
+        )
+      }
+
+      let { unmount } = render(<User />, { wrapper: storeRef.wrapper })
+
+      expect(screen.getByTestId('isFetching').textContent).toBe('false')
+
+      // skipped queries do nothing by default, so we need to toggle that to get a cached result
+      fireEvent.click(screen.getByText('change skip'))
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+
+      await waitFor(() => {
+        expect(screen.getByTestId('amount').textContent).toBe('1')
+        expect(screen.getByTestId('isFetching').textContent).toBe('false')
+      })
+
+      unmount()
+
+      await waitMs(100)
+
+      // This will pull from the cache as the time criteria is not met.
+      ;({ unmount } = render(<User />, {
+        wrapper: storeRef.wrapper,
+      }))
+
+      // skipped queries return nothing
+      expect(screen.getByTestId('isFetching').textContent).toBe('false')
+      expect(screen.getByTestId('amount').textContent).toBe('undefined')
+
+      // toggle skip -> true... won't refetch as the time critera is not met, and just loads the cached values
+      fireEvent.click(screen.getByText('change skip'))
+      expect(screen.getByTestId('isFetching').textContent).toBe('false')
+      expect(screen.getByTestId('amount').textContent).toBe('1')
+
+      unmount()
+
+      await waitMs(500)
+      ;({ unmount } = render(<User />, {
+        wrapper: storeRef.wrapper,
+      }))
+
+      // toggle skip -> true... will cause a refetch as the time criteria is now satisfied
+      fireEvent.click(screen.getByText('change skip'))
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      await waitFor(() =>
+        expect(screen.getByTestId('amount').textContent).toBe('2'),
+      )
+    })
+
+    test(`useQuery refetches when query args object changes even if serialized args don't change`, async () => {
+      const user = userEvent.setup()
+
+      function ItemList() {
+        const [pageNumber, setPageNumber] = useState(0)
+        const { data = [] } = api.useListItemsQuery({
+          pageNumber,
+        })
+
+        const renderedItems = data.map((item) => (
+          <li key={item.id}>ID: {item.id}</li>
+        ))
+        return (
+          <div>
+            <button onClick={() => setPageNumber(pageNumber + 1)}>
+              Next Page
+            </button>
+            <ul>{renderedItems}</ul>
+          </div>
+        )
+      }
+
+      render(<ItemList />, { wrapper: storeRef.wrapper })
+
+      await screen.findByText('ID: 0')
+
+      await user.click(screen.getByText('Next Page'))
+
+      await screen.findByText('ID: 3')
+    })
+
+    test(`useQuery shouldn't call args serialization if request skipped`, async () => {
+      expect(() =>
+        renderHook(() => api.endpoints.queryWithDeepArg.useQuery(skipToken), {
+          wrapper: storeRef.wrapper,
+        }),
+      ).not.toThrow()
+    })
+
+    test(`useQuery gracefully handles bigint types`, async () => {
+      const user = userEvent.setup()
+
+      function ItemList() {
+        const [pageNumber, setPageNumber] = useState(0)
+        const { data = [] } = api.useListItemsQuery({
+          pageNumber: BigInt(pageNumber),
+        })
+
+        const renderedItems = data.map((item) => (
+          <li key={item.id}>ID: {item.id}</li>
+        ))
+        return (
+          <div>
+            <button onClick={() => setPageNumber(pageNumber + 1)}>
+              Next Page
+            </button>
+            <ul>{renderedItems}</ul>
+          </div>
+        )
+      }
+
+      render(<ItemList />, { wrapper: storeRef.wrapper })
+
+      await screen.findByText('ID: 0')
+
+      await user.click(screen.getByText('Next Page'))
+
+      await screen.findByText('ID: 3')
+    })
+
+    describe('api.util.resetApiState resets hook', () => {
+      test('without `selectFromResult`', async () => {
+        const { result } = renderHook(() => api.endpoints.getUser.useQuery(5), {
+          wrapper: storeRef.wrapper,
+        })
+
+        await waitFor(() => expect(result.current.isSuccess).toBe(true))
+
+        act(() => void storeRef.store.dispatch(api.util.resetApiState()))
+
+        expect(result.current).toEqual(
+          expect.objectContaining({
+            isError: false,
+            isFetching: true,
+            isLoading: true,
+            isSuccess: false,
+            isUninitialized: false,
+            refetch: expect.any(Function),
+            status: 'pending',
+          }),
+        )
+      })
+      test('with `selectFromResult`', async () => {
+        const selectFromResult = vi.fn((x) => x)
+        const { result } = renderHook(
+          () => api.endpoints.getUser.useQuery(5, { selectFromResult }),
+          {
+            wrapper: storeRef.wrapper,
+          },
+        )
+
+        await waitFor(() => expect(result.current.isSuccess).toBe(true))
+        selectFromResult.mockClear()
+        act(() => {
+          storeRef.store.dispatch(api.util.resetApiState())
+        })
+
+        expect(selectFromResult).toHaveBeenNthCalledWith(1, {
+          isError: false,
+          isFetching: false,
+          isLoading: false,
+          isSuccess: false,
+          isUninitialized: true,
+          status: 'uninitialized',
+        })
+      })
+
+      test('hook should not be stuck loading post resetApiState after re-render', async () => {
+        const user = userEvent.setup()
+
+        function QueryComponent() {
+          const { isLoading, data } = api.endpoints.getUser.useQuery(1)
+
+          if (isLoading) {
+            return <p>Loading...</p>
+          }
+
+          return <p>{data?.name}</p>
+        }
+
+        function Wrapper() {
+          const [open, setOpen] = useState(true)
+
+          const handleRerender = () => {
+            setOpen(false)
+            setTimeout(() => {
+              setOpen(true)
+            }, 250)
+          }
+
+          const handleReset = () => {
+            storeRef.store.dispatch(api.util.resetApiState())
+          }
+
+          return (
+            <>
+              <button onClick={handleRerender} aria-label="Rerender component">
+                Rerender
+              </button>
+              {open ? (
+                <div>
+                  <button onClick={handleReset} aria-label="Reset API state">
+                    Reset
+                  </button>
+
+                  <QueryComponent />
+                </div>
+              ) : null}
+            </>
+          )
+        }
+
+        render(<Wrapper />, { wrapper: storeRef.wrapper })
+
+        await user.click(
+          screen.getByRole('button', { name: /Rerender component/i }),
+        )
+        await waitFor(() => {
+          expect(screen.getByText('Timmy')).toBeTruthy()
+        })
+
+        await user.click(
+          screen.getByRole('button', { name: /reset api state/i }),
+        )
+        await waitFor(() => {
+          expect(screen.queryByText('Loading...')).toBeNull()
+        })
+        await waitFor(() => {
+          expect(screen.getByText('Timmy')).toBeTruthy()
+        })
+      })
+    })
+
+    test('useQuery refetch method returns a promise that resolves with the result', async () => {
+      const { result } = renderHook(
+        () => api.endpoints.getIncrementedAmount.useQuery(),
+        {
+          wrapper: storeRef.wrapper,
+        },
+      )
+
+      await waitFor(() => expect(result.current.isSuccess).toBe(true))
+      const originalAmount = result.current.data!.amount
+
+      const { refetch } = result.current
+
+      let resPromise: ReturnType<typeof refetch> = null as any
+      await act(async () => {
+        resPromise = refetch()
+      })
+      expect(resPromise).toBeInstanceOf(Promise)
+      const res = await act(() => resPromise)
+      expect(res.data!.amount).toBeGreaterThan(originalAmount)
+    })
+
+    // See https://github.com/reduxjs/redux-toolkit/issues/4267 - Memory leak in useQuery rapid query arg changes
+    test('Hook subscriptions are properly cleaned up when query is fulfilled/rejected', async () => {
+      // This is imported already, but it seems to be causing issues with the test on certain matrixes
+
+      const pokemonApi = createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+        endpoints: (builder) => ({
+          getTest: builder.query<string, number>({
+            async queryFn() {
+              await new Promise((resolve) => setTimeout(resolve, 1000))
+              return { data: 'data!' }
+            },
+            keepUnusedDataFor: 0,
+          }),
+        }),
+      })
+
+      const storeRef = setupApiStore(pokemonApi, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const checkNumQueries = (count: number) => {
+        const cacheEntries = Object.keys(storeRef.store.getState().api.queries)
+        const queries = cacheEntries.length
+
+        expect(queries).toBe(count)
+      }
+
+      let i = 0
+
+      function User() {
+        const [fetchTest, { isFetching, isUninitialized }] =
+          pokemonApi.endpoints.getTest.useLazyQuery()
+
+        return (
+          <div>
+            <div data-testid="isUninitialized">{String(isUninitialized)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <button data-testid="fetchButton" onClick={() => fetchTest(i++)}>
+              fetchUser
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      fireEvent.click(screen.getByTestId('fetchButton'))
+      fireEvent.click(screen.getByTestId('fetchButton'))
+      fireEvent.click(screen.getByTestId('fetchButton'))
+      checkNumQueries(3)
+
+      await act(async () => {
+        await delay(1500)
+      })
+
+      // There should only be one stored query once they have had time to resolve
+      checkNumQueries(1)
+    })
+
+    // See https://github.com/reduxjs/redux-toolkit/issues/3182
+    test('Hook subscriptions are properly cleaned up when changing skip back and forth', async () => {
+      const pokemonApi = createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+        endpoints: (builder) => ({
+          getPokemonByName: builder.query({
+            queryFn: (name: string) => ({ data: null }),
+            keepUnusedDataFor: 1,
+          }),
+        }),
+      })
+
+      const storeRef = setupApiStore(pokemonApi, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const checkNumSubscriptions = (arg: string, count: number) => {
+        const subscriptions = getSubscriptions()
+        const cacheKeyEntry = subscriptions[arg]
+
+        if (cacheKeyEntry) {
+          const subscriptionCount = Object.keys(cacheKeyEntry) //getSubscriptionCount(arg)
+          expect(subscriptionCount).toBe(count)
+        }
+      }
+
+      // 1) Initial state: an active subscription
+      const { rerender, unmount } = renderHook(
+        ([arg, options]: Parameters<
+          typeof pokemonApi.useGetPokemonByNameQuery
+        >) => pokemonApi.useGetPokemonByNameQuery(arg, options),
+        {
+          wrapper: storeRef.wrapper,
+          initialProps: ['a'],
+        },
+      )
+
+      await act(async () => {
+        await waitMs(1)
+      })
+
+      // 2) Set the current subscription to `{skip: true}
+      rerender(['a', { skip: true }])
+
+      // 3) Change _both_ the cache key _and_ `{skip: false}` at the same time.
+      // This causes the `subscriptionRemoved` check to be `true`.
+      rerender(['b'])
+
+      // There should only be one active subscription after changing the arg
+      checkNumSubscriptions('b', 1)
+
+      // 4) Re-render with the same arg.
+      // This causes the `subscriptionRemoved` check to be `false`.
+      // Correct behavior is this does _not_ clear the promise ref,
+      // so
+      rerender(['b'])
+
+      // There should only be one active subscription after changing the arg
+      checkNumSubscriptions('b', 1)
+
+      await act(async () => {
+        await waitMs(1)
+      })
+
+      unmount()
+
+      await act(async () => {
+        await waitMs(1)
+      })
+
+      // There should be no subscription entries left over after changing
+      // cache key args and swapping `skip` on and off
+      checkNumSubscriptions('b', 0)
+
+      const finalSubscriptions = getSubscriptions()
+
+      for (const cacheKeyEntry of Object.values(finalSubscriptions)) {
+        expect(Object.values(cacheKeyEntry!).length).toBe(0)
+      }
+    })
+
+    test('Hook subscription failures do not reset isLoading state', async () => {
+      const states: boolean[] = []
+
+      function Parent() {
+        const { isLoading } = api.endpoints.getUserAndForceError.useQuery(1)
+
+        // Collect loading states to verify that it does not revert back to true.
+        states.push(isLoading)
+
+        // Parent conditionally renders child when loading.
+        if (isLoading) return null
+
+        return <Child />
+      }
+
+      function Child() {
+        // Using the same args as the parent
+        api.endpoints.getUserAndForceError.useQuery(1)
+
+        return null
+      }
+
+      render(<Parent />, { wrapper: storeRef.wrapper })
+
+      expect(states).toHaveLength(2)
+
+      // Allow at least three state effects to hit.
+      // Trying to see if any [true, false, true] occurs.
+      await act(async () => {
+        await waitForFakeTimer(150)
+      })
+
+      expect(states).toHaveLength(4)
+
+      await act(async () => {
+        await waitForFakeTimer(150)
+      })
+
+      expect(states).toHaveLength(5)
+
+      await act(async () => {
+        await waitForFakeTimer(150)
+      })
+
+      expect(states).toHaveLength(5)
+
+      // Find if at any time the isLoading state has reverted
+      // E.G.: `[..., true, false, ..., true]`
+      //              ^^^^  ^^^^^       ^^^^
+      const firstTrue = states.indexOf(true)
+      const firstFalse = states.slice(firstTrue).indexOf(false)
+      const revertedState = states.slice(firstFalse).indexOf(true)
+
+      expect(
+        revertedState,
+        `Expected isLoading state to never revert back to true but did after ${revertedState} renders...`,
+      ).toBe(-1)
+    })
+
+    describe('Hook middleware requirements', () => {
+      const consoleErrorSpy = vi
+        .spyOn(console, 'error')
+        .mockImplementation(noop)
+
+      afterEach(() => {
+        consoleErrorSpy.mockClear()
+      })
+
+      afterAll(() => {
+        consoleErrorSpy.mockRestore()
+      })
+
+      test('Throws error if middleware is not added to the store', async () => {
+        const store = configureStore({
+          reducer: {
+            [api.reducerPath]: api.reducer,
+          },
+        })
+
+        const doRender = () => {
+          renderHook(() => api.endpoints.getIncrementedAmount.useQuery(), {
+            wrapper: withProvider(store),
+          })
+        }
+
+        expect(doRender).toThrowError(
+          /Warning: Middleware for RTK-Query API at reducerPath "api" has not been added to the store/,
+        )
+      })
+    })
+  })
+
+  describe('useLazyQuery', () => {
+    let data: any
+
+    afterEach(() => {
+      data = undefined
+    })
+
+    let getRenderCount: () => number = () => 0
+    test('useLazyQuery does not automatically fetch when mounted and has undefined data', async () => {
+      function User() {
+        const [fetchUser, { data: hookData, isFetching, isUninitialized }] =
+          api.endpoints.getUser.useLazyQuery()
+        getRenderCount = useRenderCounter()
+
+        data = hookData
+
+        return (
+          <div>
+            <div data-testid="isUninitialized">{String(isUninitialized)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <button data-testid="fetchButton" onClick={() => fetchUser(1)}>
+              fetchUser
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      expect(getRenderCount()).toBe(1)
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isUninitialized').textContent).toBe('true'),
+      )
+      await waitFor(() => expect(data).toBeUndefined())
+
+      fireEvent.click(screen.getByTestId('fetchButton'))
+      expect(getRenderCount()).toBe(2)
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isUninitialized').textContent).toBe('false'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      expect(getRenderCount()).toBe(3)
+
+      fireEvent.click(screen.getByTestId('fetchButton'))
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      expect(getRenderCount()).toBe(5)
+    })
+
+    test('useLazyQuery accepts updated subscription options and only dispatches updateSubscriptionOptions when values are updated', async () => {
+      let interval = 1000
+      function User() {
+        const [options, setOptions] = useState<SubscriptionOptions>()
+        const [fetchUser, { data: hookData, isFetching, isUninitialized }] =
+          api.endpoints.getUser.useLazyQuery(options)
+        getRenderCount = useRenderCounter()
+
+        data = hookData
+
+        return (
+          <div>
+            <div data-testid="isUninitialized">{String(isUninitialized)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+
+            <button data-testid="fetchButton" onClick={() => fetchUser(1)}>
+              fetchUser
+            </button>
+            <button
+              data-testid="updateOptions"
+              onClick={() =>
+                setOptions({
+                  pollingInterval: interval,
+                })
+              }
+            >
+              updateOptions
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      expect(getRenderCount()).toBe(1) // hook mount
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isUninitialized').textContent).toBe('true'),
+      )
+      await waitFor(() => expect(data).toBeUndefined())
+
+      fireEvent.click(screen.getByTestId('fetchButton'))
+      expect(getRenderCount()).toBe(2)
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      expect(getRenderCount()).toBe(3)
+
+      fireEvent.click(screen.getByTestId('updateOptions')) // setState = 1
+      expect(getRenderCount()).toBe(4)
+
+      fireEvent.click(screen.getByTestId('fetchButton')) // perform new request = 2
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      expect(getRenderCount()).toBe(6)
+
+      interval = 1000
+
+      fireEvent.click(screen.getByTestId('updateOptions')) // setState = 1
+      expect(getRenderCount()).toBe(7)
+
+      fireEvent.click(screen.getByTestId('fetchButton'))
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      expect(getRenderCount()).toBe(9)
+
+      expect(
+        actions.filter(api.internalActions.updateSubscriptionOptions.match),
+      ).toHaveLength(1)
+    })
+
+    test('useLazyQuery accepts updated args and unsubscribes the original query', async () => {
+      function User() {
+        const [fetchUser, { data: hookData, isFetching, isUninitialized }] =
+          api.endpoints.getUser.useLazyQuery()
+
+        data = hookData
+
+        return (
+          <div>
+            <div data-testid="isUninitialized">{String(isUninitialized)}</div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+
+            <button data-testid="fetchUser1" onClick={() => fetchUser(1)}>
+              fetchUser1
+            </button>
+            <button data-testid="fetchUser2" onClick={() => fetchUser(2)}>
+              fetchUser2
+            </button>
+          </div>
+        )
+      }
+
+      const { unmount } = render(<User />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isUninitialized').textContent).toBe('true'),
+      )
+      await waitFor(() => expect(data).toBeUndefined())
+
+      fireEvent.click(screen.getByTestId('fetchUser1'))
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      // Being that there is only the initial query, no unsubscribe should be dispatched
+      expect(
+        actions.filter(api.internalActions.unsubscribeQueryResult.match),
+      ).toHaveLength(0)
+
+      fireEvent.click(screen.getByTestId('fetchUser2'))
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      expect(
+        actions.filter(api.internalActions.unsubscribeQueryResult.match),
+      ).toHaveLength(1)
+
+      fireEvent.click(screen.getByTestId('fetchUser1'))
+
+      expect(
+        actions.filter(api.internalActions.unsubscribeQueryResult.match),
+      ).toHaveLength(2)
+
+      // we always unsubscribe the original promise and create a new one
+      fireEvent.click(screen.getByTestId('fetchUser1'))
+      expect(
+        actions.filter(api.internalActions.unsubscribeQueryResult.match),
+      ).toHaveLength(3)
+
+      unmount()
+
+      // We unsubscribe after the component unmounts
+      expect(
+        actions.filter(api.internalActions.unsubscribeQueryResult.match),
+      ).toHaveLength(4)
+    })
+
+    test('useLazyQuery hook callback returns various properties to handle the result', async () => {
+      const user = userEvent.setup()
+
+      function User() {
+        const [getUser] = api.endpoints.getUser.useLazyQuery()
+        const [{ successMsg, errMsg, isAborted }, setValues] = useState({
+          successMsg: '',
+          errMsg: '',
+          isAborted: false,
+        })
+
+        const handleClick = (abort: boolean) => async () => {
+          const res = getUser(1)
+
+          // abort the query immediately to force an error
+          if (abort) res.abort()
+          res
+            .unwrap()
+            .then((result) => {
+              setValues({
+                successMsg: `Successfully fetched user ${result.name}`,
+                errMsg: '',
+                isAborted: false,
+              })
+            })
+            .catch((err) => {
+              setValues({
+                successMsg: '',
+                errMsg: `An error has occurred fetching userId: ${res.arg}`,
+                isAborted: err.name === 'AbortError',
+              })
+            })
+        }
+
+        return (
+          <div>
+            <button onClick={handleClick(false)}>
+              Fetch User successfully
+            </button>
+            <button onClick={handleClick(true)}>Fetch User and abort</button>
+            <div>{successMsg}</div>
+            <div>{errMsg}</div>
+            <div>{isAborted ? 'Request was aborted' : ''}</div>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      expect(screen.queryByText(/An error has occurred/i)).toBeNull()
+      expect(screen.queryByText(/Successfully fetched user/i)).toBeNull()
+      expect(screen.queryByText('Request was aborted')).toBeNull()
+
+      fireEvent.click(
+        screen.getByRole('button', { name: 'Fetch User and abort' }),
+      )
+      await screen.findByText('An error has occurred fetching userId: 1')
+      expect(screen.queryByText(/Successfully fetched user/i)).toBeNull()
+      screen.getByText('Request was aborted')
+
+      await user.click(
+        screen.getByRole('button', { name: 'Fetch User successfully' }),
+      )
+
+      await screen.findByText('Successfully fetched user Timmy')
+      expect(screen.queryByText(/An error has occurred/i)).toBeNull()
+      expect(screen.queryByText('Request was aborted')).toBeNull()
+    })
+
+    test('unwrapping the useLazyQuery trigger result does not throw on ConditionError and instead returns the aggregate error', async () => {
+      function User() {
+        const [getUser, { data, error }] =
+          api.endpoints.getUserAndForceError.useLazyQuery()
+
+        const [unwrappedError, setUnwrappedError] = useState<any>()
+
+        const handleClick = async () => {
+          const res = getUser(1)
+
+          try {
+            await res.unwrap()
+          } catch (error) {
+            setUnwrappedError(error)
+          }
+        }
+
+        return (
+          <div>
+            <button onClick={handleClick}>Fetch User</button>
+            <div data-testid="result">{JSON.stringify(data)}</div>
+            <div data-testid="error">{JSON.stringify(error)}</div>
+            <div data-testid="unwrappedError">
+              {JSON.stringify(unwrappedError)}
+            </div>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      const fetchButton = screen.getByRole('button', { name: 'Fetch User' })
+      fireEvent.click(fetchButton)
+      fireEvent.click(fetchButton) // This technically dispatches a ConditionError, but we don't want to see that here. We want the real error to resolve.
+
+      await waitFor(() => {
+        const errorResult = screen.getByTestId('error')?.textContent
+        const unwrappedErrorResult =
+          screen.getByTestId('unwrappedError')?.textContent
+
+        if (errorResult && unwrappedErrorResult) {
+          expect(JSON.parse(errorResult)).toMatchObject({
+            status: 500,
+            data: null,
+          })
+          expect(JSON.parse(unwrappedErrorResult)).toMatchObject(
+            JSON.parse(errorResult),
+          )
+        }
+      })
+
+      expect(screen.getByTestId('result').textContent).toBe('')
+    })
+
+    test('useLazyQuery does not throw on ConditionError and instead returns the aggregate result', async () => {
+      function User() {
+        const [getUser, { data, error }] = api.endpoints.getUser.useLazyQuery()
+
+        const [unwrappedResult, setUnwrappedResult] = useState<
+          undefined | { name: string }
+        >()
+
+        const handleClick = async () => {
+          const res = getUser(1)
+
+          const result = await res.unwrap()
+          setUnwrappedResult(result)
+        }
+
+        return (
+          <div>
+            <button onClick={handleClick}>Fetch User</button>
+            <div data-testid="result">{JSON.stringify(data)}</div>
+            <div data-testid="error">{JSON.stringify(error)}</div>
+            <div data-testid="unwrappedResult">
+              {JSON.stringify(unwrappedResult)}
+            </div>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      const fetchButton = screen.getByRole('button', { name: 'Fetch User' })
+      fireEvent.click(fetchButton)
+      fireEvent.click(fetchButton) // This technically dispatches a ConditionError, but we don't want to see that here. We want the real result to resolve and ignore the error.
+
+      await waitFor(() => {
+        const dataResult = screen.getByTestId('error')?.textContent
+        const unwrappedDataResult =
+          screen.getByTestId('unwrappedResult')?.textContent
+
+        if (dataResult && unwrappedDataResult) {
+          expect(JSON.parse(dataResult)).toMatchObject({
+            name: 'Timmy',
+          })
+          expect(JSON.parse(unwrappedDataResult)).toMatchObject(
+            JSON.parse(dataResult),
+          )
+        }
+      })
+
+      expect(screen.getByTestId('error').textContent).toBe('')
+    })
+
+    test('useLazyQuery trigger promise returns the correctly updated data', async () => {
+      const user = userEvent.setup()
+
+      const LazyUnwrapUseEffect = () => {
+        const [triggerGetIncrementedAmount, { isFetching, isSuccess, data }] =
+          api.endpoints.getIncrementedAmount.useLazyQuery()
+
+        type AmountData = { amount: number } | undefined
+
+        const [triggerUpdate] = api.endpoints.triggerUpdatedAmount.useMutation()
+
+        const [dataFromQuery, setDataFromQuery] =
+          useState<AmountData>(undefined)
+        const [dataFromTrigger, setDataFromTrigger] =
+          useState<AmountData>(undefined)
+
+        const handleLoad = async () => {
+          try {
+            const res = await triggerGetIncrementedAmount().unwrap()
+
+            setDataFromTrigger(res) // adding client side state here will cause stale data
+          } catch (error) {
+            console.error('Error handling increment trigger', error)
+          }
+        }
+
+        const handleMutate = async () => {
+          try {
+            await triggerUpdate()
+            // Force the lazy trigger to refetch
+            await handleLoad()
+          } catch (error) {
+            console.error('Error handling mutate trigger', error)
+          }
+        }
+
+        useEffect(() => {
+          // Intentionally copy to local state for comparison purposes
+          setDataFromQuery(data)
+        }, [data])
+
+        let content: React.ReactNode | null = null
+
+        if (isFetching) {
+          content = <div className="loading">Loading</div>
+        } else if (isSuccess) {
+          content = (
+            <div className="wrapper">
+              <div>
+                useEffect data: {dataFromQuery?.amount ?? 'No query amount'}
+              </div>
+              <div>
+                Unwrap data: {dataFromTrigger?.amount ?? 'No trigger amount'}
+              </div>
+            </div>
+          )
+        }
+
+        return (
+          <div className="outer">
+            <button onClick={() => handleLoad()}>Load Data</button>
+            <button onClick={() => handleMutate()}>Update Data</button>
+            {content}
+          </div>
+        )
+      }
+
+      render(<LazyUnwrapUseEffect />, { wrapper: storeRef.wrapper })
+
+      // Kick off the initial fetch via lazy query trigger
+      await user.click(screen.getByText('Load Data'))
+
+      // We get back initial data, which should get copied into local state,
+      // and also should come back as valid via the lazy trigger promise
+      await waitFor(() => {
+        expect(screen.getByText('useEffect data: 1')).toBeTruthy()
+        expect(screen.getByText('Unwrap data: 1')).toBeTruthy()
+      })
+
+      // If we mutate and then re-run the lazy trigger afterwards...
+      await user.click(screen.getByText('Update Data'))
+
+      // We should see both sets of data agree (ie, the lazy trigger promise
+      // should not return stale data or be out of sync with the hook).
+      // Prior to PR #4651, this would fail because the trigger never updated properly.
+      await waitFor(() => {
+        expect(screen.getByText('useEffect data: 2')).toBeTruthy()
+        expect(screen.getByText('Unwrap data: 2')).toBeTruthy()
+      })
+    })
+
+    test('`reset` sets state back to original state', async () => {
+      const user = userEvent.setup()
+
+      function User() {
+        const [getUser, { isSuccess, isUninitialized, reset }, _lastInfo] =
+          api.endpoints.getUser.useLazyQuery()
+
+        const handleFetchClick = async () => {
+          await getUser(1).unwrap()
+        }
+
+        return (
+          <div>
+            <span>
+              {isUninitialized
+                ? 'isUninitialized'
+                : isSuccess
+                  ? 'isSuccess'
+                  : 'other'}
+            </span>
+            <button onClick={handleFetchClick}>Fetch User</button>
+            <button onClick={reset}>Reset</button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      await screen.findByText(/isUninitialized/i)
+      expect(countObjectKeys(storeRef.store.getState().api.queries)).toBe(0)
+
+      await user.click(screen.getByRole('button', { name: 'Fetch User' }))
+
+      await screen.findByText(/isSuccess/i)
+      expect(countObjectKeys(storeRef.store.getState().api.queries)).toBe(1)
+
+      await user.click(
+        screen.getByRole('button', {
+          name: 'Reset',
+        }),
+      )
+
+      await screen.findByText(/isUninitialized/i)
+      expect(countObjectKeys(storeRef.store.getState().api.queries)).toBe(0)
+    })
+  })
+
+  describe('useInfiniteQuery', () => {
+    type Pokemon = {
+      id: string
+      name: string
+    }
+
+    const pokemonApi = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+      endpoints: (builder) => ({
+        getInfinitePokemon: builder.infiniteQuery<Pokemon, string, number>({
+          infiniteQueryOptions: {
+            initialPageParam: 0,
+            getNextPageParam: (
+              lastPage,
+              allPages,
+              lastPageParam,
+              allPageParams,
+            ) => lastPageParam + 1,
+            getPreviousPageParam: (
+              firstPage,
+              allPages,
+              firstPageParam,
+              allPageParams,
+            ) => {
+              return firstPageParam > 0 ? firstPageParam - 1 : undefined
+            },
+          },
+          query({ pageParam }) {
+            return `https://example.com/listItems?page=${pageParam}`
+          },
+        }),
+      }),
+    })
+
+    const pokemonApiWithRefetch = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+      endpoints: (builder) => ({
+        getInfinitePokemon: builder.infiniteQuery<Pokemon, string, number>({
+          infiniteQueryOptions: {
+            initialPageParam: 0,
+            getNextPageParam: (
+              lastPage,
+              allPages,
+              lastPageParam,
+              allPageParams,
+            ) => lastPageParam + 1,
+            getPreviousPageParam: (
+              firstPage,
+              allPages,
+              firstPageParam,
+              allPageParams,
+            ) => {
+              return firstPageParam > 0 ? firstPageParam - 1 : undefined
+            },
+          },
+          query({ pageParam }) {
+            return `https://example.com/listItems?page=${pageParam}`
+          },
+        }),
+      }),
+      refetchOnMountOrArgChange: true,
+    })
+
+    function PokemonList({
+      api,
+      arg = 'fire',
+      initialPageParam = 0,
+    }: {
+      api: typeof pokemonApi
+      arg?: string
+      initialPageParam?: number
+    }) {
+      const {
+        data,
+        isFetching,
+        isUninitialized,
+        fetchNextPage,
+        fetchPreviousPage,
+        refetch,
+      } = api.useGetInfinitePokemonInfiniteQuery(arg, {
+        initialPageParam,
+      })
+
+      const handlePreviousPage = async () => {
+        const res = await fetchPreviousPage()
+      }
+
+      const handleNextPage = async () => {
+        const res = await fetchNextPage()
+      }
+
+      const handleRefetch = async () => {
+        const res = await refetch()
+      }
+
+      return (
+        <div>
+          <div data-testid="isUninitialized">{String(isUninitialized)}</div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div>Type: {arg}</div>
+          <div data-testid="data">
+            {data?.pages.map((page, i: number | null | undefined) => (
+              <div key={i}>{page.name}</div>
+            ))}
+          </div>
+          <button data-testid="prevPage" onClick={() => handlePreviousPage()}>
+            previousPage
+          </button>
+          <button data-testid="nextPage" onClick={() => handleNextPage()}>
+            nextPage
+          </button>
+          <button data-testid="refetch" onClick={() => handleRefetch()}>
+            refetch
+          </button>
+        </div>
+      )
+    }
+
+    beforeEach(() => {
+      server.use(
+        http.get('https://example.com/listItems', ({ request }) => {
+          const url = new URL(request.url)
+          const pageString = url.searchParams.get('page')
+          const pageNum = parseInt(pageString || '0')
+
+          const results: Pokemon = {
+            id: `${pageNum}`,
+            name: `Pokemon ${pageNum}`,
+          }
+
+          return HttpResponse.json(results)
+        }),
+      )
+    })
+
+    test.each([
+      ['no refetch', pokemonApi],
+      ['with refetch', pokemonApiWithRefetch],
+    ])(`useInfiniteQuery %s`, async (_, pokemonApi) => {
+      const storeRef = setupApiStore(pokemonApi, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const { takeRender, render, getCurrentRender } = createRenderStream({
+        snapshotDOM: true,
+      })
+
+      const checkNumQueries = (count: number) => {
+        const cacheEntries = Object.keys(storeRef.store.getState().api.queries)
+        const queries = cacheEntries.length
+        //console.log('queries', queries, storeRef.store.getState().api.queries)
+
+        expect(queries).toBe(count)
+      }
+
+      const checkEntryFlags = (
+        arg: string,
+        expectedFlags: Partial<InfiniteQueryResultFlags>,
+      ) => {
+        const selector = pokemonApi.endpoints.getInfinitePokemon.select(arg)
+        const entry = selector(storeRef.store.getState())
+
+        const actualFlags: InfiniteQueryResultFlags = {
+          hasNextPage: false,
+          hasPreviousPage: false,
+          isFetchingNextPage: false,
+          isFetchingPreviousPage: false,
+          isFetchNextPageError: false,
+          isFetchPreviousPageError: false,
+          ...expectedFlags,
+        }
+
+        expect(entry).toMatchObject(actualFlags)
+      }
+
+      const checkPageRows = (
+        withinDOM: () => SyncScreen,
+        type: string,
+        ids: number[],
+      ) => {
+        expect(withinDOM().getByText(`Type: ${type}`)).toBeTruthy()
+        for (const id of ids) {
+          expect(withinDOM().getByText(`Pokemon ${id}`)).toBeTruthy()
+        }
+      }
+
+      async function waitForFetch(handleExtraMiddleRender = false) {
+        {
+          const { withinDOM } = await takeRender()
+          expect(withinDOM().getByTestId('isFetching').textContent).toBe('true')
+        }
+
+        // We seem to do an extra render when fetching an uninitialized entry
+        if (handleExtraMiddleRender) {
+          {
+            const { withinDOM } = await takeRender()
+            expect(withinDOM().getByTestId('isFetching').textContent).toBe(
+              'true',
+            )
+          }
+        }
+
+        {
+          // Second fetch complete
+          const { withinDOM } = await takeRender()
+          expect(withinDOM().getByTestId('isFetching').textContent).toBe(
+            'false',
+          )
+        }
+      }
+
+      const utils = render(<PokemonList api={pokemonApi} />, {
+        wrapper: storeRef.wrapper,
+      })
+      checkNumQueries(1)
+      checkEntryFlags('fire', {})
+      await waitForFetch(true)
+      checkNumQueries(1)
+      checkPageRows(getCurrentRender().withinDOM, 'fire', [0])
+      checkEntryFlags('fire', {
+        hasNextPage: true,
+      })
+
+      fireEvent.click(screen.getByTestId('nextPage'), {})
+      checkEntryFlags('fire', {
+        hasNextPage: true,
+        isFetchingNextPage: true,
+      })
+      await waitForFetch()
+      checkPageRows(getCurrentRender().withinDOM, 'fire', [0, 1])
+      checkEntryFlags('fire', {
+        hasNextPage: true,
+      })
+
+      fireEvent.click(screen.getByTestId('nextPage'))
+      await waitForFetch()
+      checkPageRows(getCurrentRender().withinDOM, 'fire', [0, 1, 2])
+
+      utils.rerender(
+        <PokemonList api={pokemonApi} arg="water" initialPageParam={3} />,
+      )
+      checkEntryFlags('water', {})
+      await waitForFetch(true)
+      checkNumQueries(2)
+      checkPageRows(getCurrentRender().withinDOM, 'water', [3])
+      checkEntryFlags('water', {
+        hasNextPage: true,
+        hasPreviousPage: true,
+      })
+
+      fireEvent.click(screen.getByTestId('nextPage'))
+      checkEntryFlags('water', {
+        hasNextPage: true,
+        hasPreviousPage: true,
+        isFetchingNextPage: true,
+      })
+      await waitForFetch()
+      checkPageRows(getCurrentRender().withinDOM, 'water', [3, 4])
+      checkEntryFlags('water', {
+        hasNextPage: true,
+        hasPreviousPage: true,
+      })
+
+      fireEvent.click(screen.getByTestId('prevPage'))
+      checkEntryFlags('water', {
+        hasNextPage: true,
+        hasPreviousPage: true,
+        isFetchingPreviousPage: true,
+      })
+      await waitForFetch()
+      checkPageRows(getCurrentRender().withinDOM, 'water', [2, 3, 4])
+      checkEntryFlags('water', {
+        hasNextPage: true,
+        hasPreviousPage: true,
+      })
+
+      fireEvent.click(screen.getByTestId('refetch'))
+      checkEntryFlags('water', {
+        hasNextPage: true,
+        hasPreviousPage: true,
+      })
+      await waitForFetch()
+      checkPageRows(getCurrentRender().withinDOM, 'water', [2, 3, 4])
+      checkEntryFlags('water', {
+        hasNextPage: true,
+        hasPreviousPage: true,
+      })
+    })
+
+    test('Object page params does not keep forcing refetching', async () => {
+      type Project = {
+        id: number
+        createdAt: string
+      }
+
+      type ProjectsResponse = {
+        projects: Project[]
+        numFound: number
+        serverTime: string
+      }
+
+      interface ProjectsInitialPageParam {
+        offset: number
+        limit: number
+      }
+
+      const apiWithInfiniteScroll = createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com/' }),
+        endpoints: (builder) => ({
+          projectsLimitOffset: builder.infiniteQuery<
+            ProjectsResponse,
+            void,
+            ProjectsInitialPageParam
+          >({
+            infiniteQueryOptions: {
+              initialPageParam: {
+                offset: 0,
+                limit: 20,
+              },
+              getNextPageParam: (
+                lastPage,
+                allPages,
+                lastPageParam,
+                allPageParams,
+              ) => {
+                const nextOffset = lastPageParam.offset + lastPageParam.limit
+                const remainingItems = lastPage?.numFound - nextOffset
+
+                if (remainingItems <= 0) {
+                  return undefined
+                }
+
+                return {
+                  ...lastPageParam,
+                  offset: nextOffset,
+                }
+              },
+              getPreviousPageParam: (
+                firstPage,
+                allPages,
+                firstPageParam,
+                allPageParams,
+              ) => {
+                const prevOffset = firstPageParam.offset - firstPageParam.limit
+                if (prevOffset < 0) return undefined
+
+                return {
+                  ...firstPageParam,
+                  offset: firstPageParam.offset - firstPageParam.limit,
+                }
+              },
+            },
+            query: ({ pageParam }) => {
+              const { offset, limit } = pageParam
+              return {
+                url: `https://example.com/api/projectsLimitOffset?offset=${offset}&limit=${limit}`,
+                method: 'GET',
+              }
+            },
+          }),
+        }),
+      })
+
+      const projects = Array.from({ length: 50 }, (_, i) => {
+        return {
+          id: i,
+          createdAt: Date.now() + i * 1000,
+        }
+      })
+
+      let numRequests = 0
+
+      server.use(
+        http.get(
+          'https://example.com/api/projectsLimitOffset',
+          async ({ request }) => {
+            const url = new URL(request.url)
+            const limit = parseInt(url.searchParams.get('limit') ?? '5', 10)
+            let offset = parseInt(url.searchParams.get('offset') ?? '0', 10)
+
+            numRequests++
+
+            if (isNaN(offset) || offset < 0) {
+              offset = 0
+            }
+            if (isNaN(limit) || limit <= 0) {
+              return HttpResponse.json(
+                {
+                  message:
+                    "Invalid 'limit' parameter. It must be a positive integer.",
+                } as any,
+                { status: 400 },
+              )
+            }
+
+            const result = projects.slice(offset, offset + limit)
+
+            await delay(10)
+            return HttpResponse.json({
+              projects: result,
+              serverTime: Date.now(),
+              numFound: projects.length,
+            })
+          },
+        ),
+      )
+
+      function LimitOffsetExample() {
+        const {
+          data,
+          hasPreviousPage,
+          hasNextPage,
+          error,
+          isFetching,
+          isLoading,
+          isError,
+          fetchNextPage,
+          fetchPreviousPage,
+          isFetchingNextPage,
+          isFetchingPreviousPage,
+          status,
+        } = apiWithInfiniteScroll.useProjectsLimitOffsetInfiniteQuery(
+          undefined,
+          {
+            initialPageParam: {
+              offset: 10,
+              limit: 10,
+            },
+          },
+        )
+
+        const [counter, setCounter] = useState(0)
+
+        const combinedData = useMemo(() => {
+          return data?.pages?.map((item) => item?.projects)?.flat()
+        }, [data])
+
+        return (
+          <div>
+            <h2>Limit and Offset Infinite Scroll</h2>
+            <button onClick={() => setCounter((c) => c + 1)}>Increment</button>
+            <div>Counter: {counter}</div>
+            {isLoading ? (
+              <p>Loading...</p>
+            ) : isError ? (
+              <span>Error: {error.message}</span>
+            ) : null}
+
+            <>
+              <div>
+                <button
+                  onClick={() => fetchPreviousPage()}
+                  disabled={!hasPreviousPage || isFetchingPreviousPage}
+                >
+                  {isFetchingPreviousPage
+                    ? 'Loading more...'
+                    : hasPreviousPage
+                      ? 'Load Older'
+                      : 'Nothing more to load'}
+                </button>
+              </div>
+              <div data-testid="projects">
+                {combinedData?.map((project, index, arr) => {
+                  return (
+                    <div key={project.id}>
+                      <div data-testid="project">
+                        <div>{`Project ${project.id} (created at: ${project.createdAt})`}</div>
+                      </div>
+                    </div>
+                  )
+                })}
+              </div>
+              <div>
+                <button
+                  onClick={() => fetchNextPage()}
+                  disabled={!hasNextPage || isFetchingNextPage}
+                >
+                  {isFetchingNextPage
+                    ? 'Loading more...'
+                    : hasNextPage
+                      ? 'Load Newer'
+                      : 'Nothing more to load'}
+                </button>
+              </div>
+              <div>
+                {isFetching && !isFetchingPreviousPage && !isFetchingNextPage
+                  ? 'Background Updating...'
+                  : null}
+              </div>
+            </>
+          </div>
+        )
+      }
+
+      const storeRef = setupApiStore(
+        apiWithInfiniteScroll,
+        { ...actionsReducer },
+        {
+          withoutTestLifecycles: true,
+        },
+      )
+
+      const { takeRender, render, totalRenderCount } = createRenderStream({
+        snapshotDOM: true,
+      })
+
+      render(<LimitOffsetExample />, {
+        wrapper: storeRef.wrapper,
+      })
+
+      {
+        const { withinDOM } = await takeRender()
+        withinDOM().getByText('Counter: 0')
+        withinDOM().getByText('Loading...')
+      }
+
+      {
+        const { withinDOM } = await takeRender()
+        withinDOM().getByText('Counter: 0')
+        withinDOM().getByText('Loading...')
+      }
+
+      {
+        const { withinDOM } = await takeRender()
+        withinDOM().getByText('Counter: 0')
+
+        expect(withinDOM().getAllByTestId('project').length).toBe(10)
+        expect(withinDOM().queryByTestId('Loading...')).toBeNull()
+      }
+
+      expect(totalRenderCount()).toBe(3)
+      expect(numRequests).toBe(1)
+    })
+
+    test('useInfiniteQuery hook does not fetch when the skip token is set', async () => {
+      function Pokemon() {
+        const [value, setValue] = useState(0)
+
+        const { isFetching } = pokemonApi.useGetInfinitePokemonInfiniteQuery(
+          'fire',
+          {
+            skip: value < 1,
+          },
+        )
+        getRenderCount = useRenderCounter()
+
+        return (
+          <div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <button onClick={() => setValue((val) => val + 1)}>
+              Increment value
+            </button>
+          </div>
+        )
+      }
+
+      render(<Pokemon />, { wrapper: storeRef.wrapper })
+      expect(getRenderCount()).toBe(1)
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      fireEvent.click(screen.getByText('Increment value'))
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+      )
+      expect(getRenderCount()).toBe(2)
+    })
+  })
+
+  describe('useMutation', () => {
+    test('useMutation hook sets and unsets the isLoading flag when running', async () => {
+      function User() {
+        const [updateUser, { isLoading }] =
+          api.endpoints.updateUser.useMutation()
+
+        return (
+          <div>
+            <div data-testid="isLoading">{String(isLoading)}</div>
+            <button onClick={() => updateUser({ name: 'Banana' })}>
+              Update User
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+      )
+      fireEvent.click(screen.getByText('Update User'))
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+      )
+    })
+
+    test('useMutation hook sets data to the resolved response on success', async () => {
+      const result = { name: 'Banana' }
+
+      function User() {
+        const [updateUser, { data }] = api.endpoints.updateUser.useMutation()
+
+        return (
+          <div>
+            <div data-testid="result">{JSON.stringify(data)}</div>
+            <button onClick={() => updateUser({ name: 'Banana' })}>
+              Update User
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      fireEvent.click(screen.getByText('Update User'))
+      await waitFor(() =>
+        expect(screen.getByTestId('result').textContent).toBe(
+          JSON.stringify(result),
+        ),
+      )
+    })
+
+    test('useMutation hook callback returns various properties to handle the result', async () => {
+      const user = userEvent.setup()
+
+      function User() {
+        const [updateUser] = api.endpoints.updateUser.useMutation()
+        const [successMsg, setSuccessMsg] = useState('')
+        const [errMsg, setErrMsg] = useState('')
+        const [isAborted, setIsAborted] = useState(false)
+
+        const handleClick = async () => {
+          const res = updateUser({ name: 'Banana' })
+
+          // abort the mutation immediately to force an error
+          res.abort()
+          res
+            .unwrap()
+            .then((result) => {
+              setSuccessMsg(`Successfully updated user ${result.name}`)
+            })
+            .catch((err) => {
+              setErrMsg(
+                `An error has occurred updating user ${res.arg.originalArgs.name}`,
+              )
+              if (err.name === 'AbortError') {
+                setIsAborted(true)
+              }
+            })
+        }
+
+        return (
+          <div>
+            <button onClick={handleClick}>Update User and abort</button>
+            <div>{successMsg}</div>
+            <div>{errMsg}</div>
+            <div>{isAborted ? 'Request was aborted' : ''}</div>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      expect(screen.queryByText(/An error has occurred/i)).toBeNull()
+      expect(screen.queryByText(/Successfully updated user/i)).toBeNull()
+      expect(screen.queryByText('Request was aborted')).toBeNull()
+
+      await user.click(
+        screen.getByRole('button', { name: 'Update User and abort' }),
+      )
+      await screen.findByText('An error has occurred updating user Banana')
+      expect(screen.queryByText(/Successfully updated user/i)).toBeNull()
+      screen.getByText('Request was aborted')
+    })
+
+    test('useMutation return value contains originalArgs', async () => {
+      const { result } = renderHook(
+        () => api.endpoints.updateUser.useMutation(),
+        {
+          wrapper: storeRef.wrapper,
+        },
+      )
+      const arg = { name: 'Foo' }
+
+      const firstRenderResult = result.current
+      expect(firstRenderResult[1].originalArgs).toBe(undefined)
+      await act(async () => {
+        await firstRenderResult[0](arg)
+      })
+      const secondRenderResult = result.current
+      expect(firstRenderResult[1].originalArgs).toBe(undefined)
+      expect(secondRenderResult[1].originalArgs).toBe(arg)
+    })
+
+    test('`reset` sets state back to original state', async () => {
+      const user = userEvent.setup()
+
+      function User() {
+        const [updateUser, result] = api.endpoints.updateUser.useMutation()
+        return (
+          <>
+            <span>
+              {result.isUninitialized
+                ? 'isUninitialized'
+                : result.isSuccess
+                  ? 'isSuccess'
+                  : 'other'}
+            </span>
+            <span>{result.originalArgs?.name}</span>
+            <button onClick={() => updateUser({ name: 'Yay' })}>trigger</button>
+            <button onClick={result.reset}>reset</button>
+          </>
+        )
+      }
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      await screen.findByText(/isUninitialized/i)
+      expect(screen.queryByText('Yay')).toBeNull()
+      expect(countObjectKeys(storeRef.store.getState().api.mutations)).toBe(0)
+
+      await user.click(screen.getByRole('button', { name: 'trigger' }))
+
+      await screen.findByText(/isSuccess/i)
+      expect(screen.queryByText('Yay')).not.toBeNull()
+      expect(countObjectKeys(storeRef.store.getState().api.mutations)).toBe(1)
+
+      await user.click(screen.getByRole('button', { name: 'reset' }))
+
+      await screen.findByText(/isUninitialized/i)
+      expect(screen.queryByText('Yay')).toBeNull()
+      expect(countObjectKeys(storeRef.store.getState().api.mutations)).toBe(0)
+    })
+  })
+
+  describe('usePrefetch', () => {
+    test('usePrefetch respects force arg', async () => {
+      const user = userEvent.setup()
+
+      const { usePrefetch } = api
+      const USER_ID = 4
+      function User() {
+        const { isFetching } = api.endpoints.getUser.useQuery(USER_ID)
+        const prefetchUser = usePrefetch('getUser', { force: true })
+
+        return (
+          <div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <button
+              onMouseEnter={() => prefetchUser(USER_ID, { force: true })}
+              data-testid="highPriority"
+            >
+              High priority action intent
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      // Resolve initial query
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      await user.hover(screen.getByTestId('highPriority'))
+
+      expect(
+        api.endpoints.getUser.select(USER_ID)(storeRef.store.getState() as any),
+      ).toEqual({
+        data: { name: 'Timmy' },
+        endpointName: 'getUser',
+        error: undefined,
+        fulfilledTimeStamp: expect.any(Number),
+        isError: false,
+        isLoading: true,
+        isSuccess: false,
+        isUninitialized: false,
+        originalArgs: USER_ID,
+        requestId: expect.any(String),
+        startedTimeStamp: expect.any(Number),
+        status: QueryStatus.pending,
+      })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      expect(
+        api.endpoints.getUser.select(USER_ID)(storeRef.store.getState() as any),
+      ).toEqual({
+        data: { name: 'Timmy' },
+        endpointName: 'getUser',
+        fulfilledTimeStamp: expect.any(Number),
+        isError: false,
+        isLoading: false,
+        isSuccess: true,
+        isUninitialized: false,
+        originalArgs: USER_ID,
+        requestId: expect.any(String),
+        startedTimeStamp: expect.any(Number),
+        status: QueryStatus.fulfilled,
+      })
+    })
+
+    test('usePrefetch does not make an additional request if already in the cache and force=false', async () => {
+      const user = userEvent.setup()
+
+      const { usePrefetch } = api
+      const USER_ID = 2
+
+      function User() {
+        // Load the initial query
+        const { isFetching } = api.endpoints.getUser.useQuery(USER_ID)
+        const prefetchUser = usePrefetch('getUser', { force: false })
+
+        return (
+          <div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <button
+              onMouseEnter={() => prefetchUser(USER_ID)}
+              data-testid="lowPriority"
+            >
+              Low priority user action intent
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      // Let the initial query resolve
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      // Try to prefetch what we just loaded
+      await user.hover(screen.getByTestId('lowPriority'))
+
+      expect(
+        api.endpoints.getUser.select(USER_ID)(storeRef.store.getState() as any),
+      ).toEqual({
+        data: { name: 'Timmy' },
+        endpointName: 'getUser',
+        fulfilledTimeStamp: expect.any(Number),
+        isError: false,
+        isLoading: false,
+        isSuccess: true,
+        isUninitialized: false,
+        originalArgs: USER_ID,
+        requestId: expect.any(String),
+        startedTimeStamp: expect.any(Number),
+        status: QueryStatus.fulfilled,
+      })
+
+      await waitMs()
+
+      expect(
+        api.endpoints.getUser.select(USER_ID)(storeRef.store.getState() as any),
+      ).toEqual({
+        data: { name: 'Timmy' },
+        endpointName: 'getUser',
+        fulfilledTimeStamp: expect.any(Number),
+        isError: false,
+        isLoading: false,
+        isSuccess: true,
+        isUninitialized: false,
+        originalArgs: USER_ID,
+        requestId: expect.any(String),
+        startedTimeStamp: expect.any(Number),
+        status: QueryStatus.fulfilled,
+      })
+    })
+
+    test('usePrefetch respects ifOlderThan when it evaluates to true', async () => {
+      const user = userEvent.setup()
+
+      const { usePrefetch } = api
+      const USER_ID = 47
+
+      function User() {
+        // Load the initial query
+        const { isFetching } = api.endpoints.getUser.useQuery(USER_ID)
+        const prefetchUser = usePrefetch('getUser', { ifOlderThan: 0.2 })
+
+        return (
+          <div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <button
+              onMouseEnter={() => prefetchUser(USER_ID)}
+              data-testid="lowPriority"
+            >
+              Low priority user action intent
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      // Wait 400ms, making it respect ifOlderThan
+      await waitMs(400)
+
+      // This should run the query being that we're past the threshold
+      await user.hover(screen.getByTestId('lowPriority'))
+
+      expect(
+        api.endpoints.getUser.select(USER_ID)(storeRef.store.getState() as any),
+      ).toEqual({
+        data: { name: 'Timmy' },
+        endpointName: 'getUser',
+        fulfilledTimeStamp: expect.any(Number),
+        isError: false,
+        isLoading: true,
+        isSuccess: false,
+        isUninitialized: false,
+        originalArgs: USER_ID,
+        requestId: expect.any(String),
+        startedTimeStamp: expect.any(Number),
+        status: QueryStatus.pending,
+      })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+
+      expect(
+        api.endpoints.getUser.select(USER_ID)(storeRef.store.getState() as any),
+      ).toEqual({
+        data: { name: 'Timmy' },
+        endpointName: 'getUser',
+        fulfilledTimeStamp: expect.any(Number),
+        isError: false,
+        isLoading: false,
+        isSuccess: true,
+        isUninitialized: false,
+        originalArgs: USER_ID,
+        requestId: expect.any(String),
+        startedTimeStamp: expect.any(Number),
+        status: QueryStatus.fulfilled,
+      })
+    })
+
+    test('usePrefetch returns the last success result when ifOlderThan evalutes to false', async () => {
+      const user = userEvent.setup()
+
+      const { usePrefetch } = api
+      const USER_ID = 2
+
+      function User() {
+        // Load the initial query
+        const { isFetching } = api.endpoints.getUser.useQuery(USER_ID)
+        const prefetchUser = usePrefetch('getUser', { ifOlderThan: 10 })
+
+        return (
+          <div>
+            <div data-testid="isFetching">{String(isFetching)}</div>
+            <button
+              onMouseEnter={() => prefetchUser(USER_ID)}
+              data-testid="lowPriority"
+            >
+              Low priority user action intent
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      await waitFor(() =>
+        expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+      )
+      await waitMs()
+
+      // Get a snapshot of the last result
+      const latestQueryData = api.endpoints.getUser.select(USER_ID)(
+        storeRef.store.getState() as any,
+      )
+
+      await user.hover(screen.getByTestId('lowPriority'))
+
+      //  Serve up the result from the cache being that the condition wasn't met
+      expect(
+        api.endpoints.getUser.select(USER_ID)(storeRef.store.getState() as any),
+      ).toEqual(latestQueryData)
+    })
+
+    test('usePrefetch executes a query even if conditions fail when the cache is empty', async () => {
+      const user = userEvent.setup()
+
+      const { usePrefetch } = api
+      const USER_ID = 2
+
+      function User() {
+        const prefetchUser = usePrefetch('getUser', { ifOlderThan: 10 })
+
+        return (
+          <div>
+            <button
+              onMouseEnter={() => prefetchUser(USER_ID)}
+              data-testid="lowPriority"
+            >
+              Low priority user action intent
+            </button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+
+      await user.hover(screen.getByTestId('lowPriority'))
+
+      expect(
+        api.endpoints.getUser.select(USER_ID)(storeRef.store.getState()),
+      ).toEqual({
+        endpointName: 'getUser',
+        isError: false,
+        isLoading: true,
+        isSuccess: false,
+        isUninitialized: false,
+        originalArgs: USER_ID,
+        requestId: expect.any(String),
+        startedTimeStamp: expect.any(Number),
+        status: 'pending',
+      })
+    })
+  })
+
+  describe('useQuery and useMutation invalidation behavior', () => {
+    const api = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+      tagTypes: ['User'],
+      endpoints: (build) => ({
+        checkSession: build.query<any, void>({
+          query: () => '/me',
+          providesTags: ['User'],
+        }),
+        login: build.mutation<any, any>({
+          query: () => ({ url: '/login', method: 'POST' }),
+          invalidatesTags: ['User'],
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, { ...actionsReducer })
+    test('initially failed useQueries that provide an tag will refetch after a mutation invalidates it', async () => {
+      const checkSessionData = { name: 'matt' }
+      server.use(
+        http.get(
+          'https://example.com/me',
+          () => {
+            return HttpResponse.json(null, { status: 500 })
+          },
+          { once: true },
+        ),
+        http.get('https://example.com/me', () => {
+          return HttpResponse.json(checkSessionData)
+        }),
+        http.post('https://example.com/login', () => {
+          return HttpResponse.json(null, { status: 200 })
+        }),
+      )
+      let data, isLoading, isError
+      function User() {
+        ;({ data, isError, isLoading } = api.endpoints.checkSession.useQuery())
+        const [login, { isLoading: loginLoading }] =
+          api.endpoints.login.useMutation()
+
+        return (
+          <div>
+            <div data-testid="isLoading">{String(isLoading)}</div>
+            <div data-testid="isError">{String(isError)}</div>
+            <div data-testid="user">{JSON.stringify(data)}</div>
+            <div data-testid="loginLoading">{String(loginLoading)}</div>
+            <button onClick={() => login(null)}>Login</button>
+          </div>
+        )
+      }
+
+      render(<User />, { wrapper: storeRef.wrapper })
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('isError').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('user').textContent).toBe(''),
+      )
+
+      fireEvent.click(screen.getByRole('button', { name: /Login/i }))
+
+      await waitFor(() =>
+        expect(screen.getByTestId('loginLoading').textContent).toBe('true'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('loginLoading').textContent).toBe('false'),
+      )
+      // login mutation will cause the original errored out query to refire, clearing the error and setting the user
+      await waitFor(() =>
+        expect(screen.getByTestId('isError').textContent).toBe('false'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('user').textContent).toBe(
+          JSON.stringify(checkSessionData),
+        ),
+      )
+
+      const { checkSession, login } = api.endpoints
+      expect(storeRef.store.getState().actions).toMatchSequence(
+        api.internalActions.middlewareRegistered.match,
+        checkSession.matchPending,
+        checkSession.matchRejected,
+        login.matchPending,
+        login.matchFulfilled,
+        checkSession.matchPending,
+        checkSession.matchFulfilled,
+      )
+    })
+  })
+})
+
+describe('hooks with createApi defaults set', () => {
+  const defaultApi = createApi({
+    baseQuery: async (arg: any) => {
+      await waitMs()
+      if ('amount' in arg?.body) {
+        amount += 1
+      }
+      return {
+        data: arg?.body
+          ? { ...arg.body, ...(amount ? { amount } : {}) }
+          : undefined,
+      }
+    },
+    endpoints: (build) => ({
+      getIncrementedAmount: build.query<any, void>({
+        query: () => ({
+          url: '',
+          body: {
+            amount,
+          },
+        }),
+      }),
+    }),
+    refetchOnMountOrArgChange: true,
+  })
+
+  const storeRef = setupApiStore(defaultApi)
+  test('useQuery hook respects refetchOnMountOrArgChange: true when set in createApi options', async () => {
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery())
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    const { unmount } = render(<User />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    unmount()
+
+    function OtherUser() {
+      ;({ data, isFetching } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+          refetchOnMountOrArgChange: true,
+        }))
+      return (
+        <div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    render(<OtherUser />, { wrapper: storeRef.wrapper })
+    // Let's make sure we actually fetch, and we increment
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+    )
+
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('2'),
+    )
+  })
+
+  test('useQuery hook overrides default refetchOnMountOrArgChange: false that was set by createApi', async () => {
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery())
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    let { unmount } = render(<User />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    unmount()
+
+    function OtherUser() {
+      ;({ data, isFetching } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+          refetchOnMountOrArgChange: false,
+        }))
+      return (
+        <div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    render(<OtherUser />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+  })
+
+  describe('selectFromResult (query) behaviors', () => {
+    let startingId = 3
+    const initialPosts = [
+      { id: 1, name: 'A sample post', fetched_at: new Date().toUTCString() },
+      {
+        id: 2,
+        name: 'A post about rtk-query',
+        fetched_at: new Date().toUTCString(),
+      },
+    ]
+    let posts = [] as typeof initialPosts
+
+    beforeEach(() => {
+      startingId = 3
+      posts = [...initialPosts]
+
+      const handlers = [
+        http.get('https://example.com/posts', () => {
+          return HttpResponse.json(posts)
+        }),
+        http.put<{ id: string }, Partial<Post>>(
+          'https://example.com/post/:id',
+          async ({ request, params }) => {
+            const body = await request.json()
+            const id = Number(params.id)
+            const idx = posts.findIndex((post) => post.id === id)
+
+            const newPosts = posts.map((post, index) =>
+              index !== idx
+                ? post
+                : {
+                    ...body,
+                    id,
+                    name: body?.name || post.name,
+                    fetched_at: new Date().toUTCString(),
+                  },
+            )
+            posts = [...newPosts]
+
+            return HttpResponse.json(posts)
+          },
+        ),
+        http.post<any, Omit<Post, 'id'>>(
+          'https://example.com/post',
+          async ({ request }) => {
+            const body = await request.json()
+            const post = body
+            startingId += 1
+            posts.concat({
+              ...post,
+              fetched_at: new Date().toISOString(),
+              id: startingId,
+            })
+            return HttpResponse.json(posts)
+          },
+        ),
+      ]
+
+      server.use(...handlers)
+    })
+
+    interface Post {
+      id: number
+      name: string
+      fetched_at: string
+    }
+
+    type PostsResponse = Post[]
+
+    const api = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com/' }),
+      tagTypes: ['Posts'],
+      endpoints: (build) => ({
+        getPosts: build.query<PostsResponse, void>({
+          query: () => ({ url: 'posts' }),
+          providesTags: (result) =>
+            result ? result.map(({ id }) => ({ type: 'Posts', id })) : [],
+        }),
+        updatePost: build.mutation<Post, Partial<Post>>({
+          query: ({ id, ...body }) => ({
+            url: `post/${id}`,
+            method: 'PUT',
+            body,
+          }),
+          invalidatesTags: (result, error, { id }) => [{ type: 'Posts', id }],
+        }),
+        addPost: build.mutation<Post, Partial<Post>>({
+          query: (body) => ({
+            url: `post`,
+            method: 'POST',
+            body,
+          }),
+          invalidatesTags: ['Posts'],
+        }),
+      }),
+    })
+
+    const counterSlice = createSlice({
+      name: 'counter',
+      initialState: { count: 0 },
+      reducers: {
+        increment(state) {
+          state.count++
+        },
+      },
+    })
+
+    const storeRef = setupApiStore(api, {
+      counter: counterSlice.reducer,
+    })
+
+    test('useQueryState serves a deeply memoized value and does not rerender unnecessarily', async () => {
+      function Posts() {
+        const { data: posts } = api.endpoints.getPosts.useQuery()
+        const [addPost] = api.endpoints.addPost.useMutation()
+        return (
+          <div>
+            <button
+              data-testid="addPost"
+              onClick={() => addPost({ name: `some text ${posts?.length}` })}
+            >
+              Add random post
+            </button>
+          </div>
+        )
+      }
+
+      function SelectedPost() {
+        const { post } = api.endpoints.getPosts.useQueryState(undefined, {
+          selectFromResult: ({ data }) => ({
+            post: data?.find((post) => post.id === 1),
+          }),
+        })
+        getRenderCount = useRenderCounter()
+
+        /**
+         * Notes on the renderCount behavior
+         *
+         * We initialize at 0, and the first render will bump that 1 while post is `undefined`.
+         * Once the request resolves, it will be at 2. What we're looking for is to make sure that
+         * any requests that don't directly change the value of the selected item will have no impact
+         * on rendering.
+         */
+
+        return <div />
+      }
+
+      render(
+        <div>
+          <Posts />
+          <SelectedPost />
+        </div>,
+        { wrapper: storeRef.wrapper },
+      )
+
+      expect(getRenderCount()).toBe(1)
+
+      const addBtn = screen.getByTestId('addPost')
+
+      await waitFor(() => expect(getRenderCount()).toBe(2))
+
+      fireEvent.click(addBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(2))
+      // We fire off a few requests that would typically cause a rerender as JSON.parse() on a request would always be a new object.
+      fireEvent.click(addBtn)
+      fireEvent.click(addBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(2))
+      // Being that it didn't rerender, we can be assured that the behavior is correct
+    })
+
+    /**
+     * This test shows that even though a user can select a specific post, the fetching/loading flags
+     * will still cause rerenders for the query. This should show that if you're using selectFromResult,
+     * the 'performance' value comes with selecting _only_ the data.
+     */
+    test('useQuery with selectFromResult with all flags destructured rerenders like the default useQuery behavior', async () => {
+      function Posts() {
+        const { data: posts } = api.endpoints.getPosts.useQuery()
+        const [addPost] = api.endpoints.addPost.useMutation()
+        getRenderCount = useRenderCounter()
+        return (
+          <div>
+            <button
+              data-testid="addPost"
+              onClick={() =>
+                addPost({
+                  name: `some text ${posts?.length}`,
+                  fetched_at: new Date().toISOString(),
+                })
+              }
+            >
+              Add random post
+            </button>
+          </div>
+        )
+      }
+
+      function SelectedPost() {
+        getRenderCount = useRenderCounter()
+
+        const { post } = api.endpoints.getPosts.useQuery(undefined, {
+          selectFromResult: ({
+            data,
+            isUninitialized,
+            isLoading,
+            isFetching,
+            isSuccess,
+            isError,
+          }) => ({
+            post: data?.find((post) => post.id === 1),
+            isUninitialized,
+            isLoading,
+            isFetching,
+            isSuccess,
+            isError,
+          }),
+        })
+
+        return <div />
+      }
+
+      render(
+        <div>
+          <Posts />
+          <SelectedPost />
+        </div>,
+        { wrapper: storeRef.wrapper },
+      )
+      expect(getRenderCount()).toBe(2)
+
+      const addBtn = screen.getByTestId('addPost')
+
+      await waitFor(() => expect(getRenderCount()).toBe(3))
+
+      fireEvent.click(addBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(5))
+      fireEvent.click(addBtn)
+      fireEvent.click(addBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(7))
+    })
+
+    test('useQuery with selectFromResult option serves a deeply memoized value and does not rerender unnecessarily', async () => {
+      function Posts() {
+        const { data: posts } = api.endpoints.getPosts.useQuery()
+        const [addPost] = api.endpoints.addPost.useMutation()
+        return (
+          <div>
+            <button
+              data-testid="addPost"
+              onClick={() =>
+                addPost({
+                  name: `some text ${posts?.length}`,
+                  fetched_at: new Date().toISOString(),
+                })
+              }
+            >
+              Add random post
+            </button>
+          </div>
+        )
+      }
+
+      function SelectedPost() {
+        getRenderCount = useRenderCounter()
+        const { post } = api.endpoints.getPosts.useQuery(undefined, {
+          selectFromResult: ({ data }) => ({
+            post: data?.find((post) => post.id === 1),
+          }),
+        })
+
+        return <div />
+      }
+
+      render(
+        <div>
+          <Posts />
+          <SelectedPost />
+        </div>,
+        { wrapper: storeRef.wrapper },
+      )
+      expect(getRenderCount()).toBe(1)
+
+      const addBtn = screen.getByTestId('addPost')
+
+      await waitFor(() => expect(getRenderCount()).toBe(2))
+
+      fireEvent.click(addBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(2))
+      fireEvent.click(addBtn)
+      fireEvent.click(addBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(2))
+    })
+
+    test('useQuery with selectFromResult option serves a deeply memoized value, then ONLY updates when the underlying data changes', async () => {
+      let expectablePost: Post | undefined
+      function Posts() {
+        const { data: posts } = api.endpoints.getPosts.useQuery()
+        const [addPost] = api.endpoints.addPost.useMutation()
+        const [updatePost] = api.endpoints.updatePost.useMutation()
+
+        return (
+          <div>
+            <button
+              data-testid="addPost"
+              onClick={() =>
+                addPost({
+                  name: `some text ${posts?.length}`,
+                  fetched_at: new Date().toISOString(),
+                })
+              }
+            >
+              Add random post
+            </button>
+            <button
+              data-testid="updatePost"
+              onClick={() => updatePost({ id: 1, name: 'supercoooll!' })}
+            >
+              Update post
+            </button>
+          </div>
+        )
+      }
+
+      function SelectedPost() {
+        const { post } = api.endpoints.getPosts.useQuery(undefined, {
+          selectFromResult: ({ data }) => ({
+            post: data?.find((post) => post.id === 1),
+          }),
+        })
+        getRenderCount = useRenderCounter()
+
+        useEffect(() => {
+          expectablePost = post
+        }, [post])
+
+        return (
+          <div>
+            <div data-testid="postName">{post?.name}</div>
+          </div>
+        )
+      }
+
+      render(
+        <div>
+          <Posts />
+          <SelectedPost />
+        </div>,
+        { wrapper: storeRef.wrapper },
+      )
+      expect(getRenderCount()).toBe(1)
+
+      const addBtn = screen.getByTestId('addPost')
+      const updateBtn = screen.getByTestId('updatePost')
+
+      fireEvent.click(addBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(2))
+      fireEvent.click(addBtn)
+      fireEvent.click(addBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(2))
+
+      fireEvent.click(updateBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(3))
+      expect(expectablePost?.name).toBe('supercoooll!')
+
+      fireEvent.click(addBtn)
+      await waitFor(() => expect(getRenderCount()).toBe(3))
+    })
+
+    test('useQuery with selectFromResult option does not update when unrelated data in the store changes', async () => {
+      function Posts() {
+        const { posts } = api.endpoints.getPosts.useQuery(undefined, {
+          selectFromResult: ({ data }) => ({
+            // Intentionally use an unstable reference to force a rerender
+            posts: data?.filter((post) => post.name.includes('post')),
+          }),
+        })
+
+        getRenderCount = useRenderCounter()
+
+        return (
+          <div>
+            {posts?.map((post) => <div key={post.id}>{post.name}</div>)}
+          </div>
+        )
+      }
+
+      function CounterButton() {
+        return (
+          <div
+            data-testid="incrementButton"
+            onClick={() =>
+              storeRef.store.dispatch(counterSlice.actions.increment())
+            }
+          >
+            Increment Count
+          </div>
+        )
+      }
+
+      render(
+        <div>
+          <Posts />
+          <CounterButton />
+        </div>,
+        { wrapper: storeRef.wrapper },
+      )
+
+      await waitFor(() => expect(getRenderCount()).toBe(2))
+
+      const incrementBtn = screen.getByTestId('incrementButton')
+      fireEvent.click(incrementBtn)
+      expect(getRenderCount()).toBe(2)
+    })
+
+    test('useQuery with selectFromResult option has a type error if the result is not an object', async () => {
+      function SelectedPost() {
+        const res2 = api.endpoints.getPosts.useQuery(undefined, {
+          // selectFromResult must always return an object
+          selectFromResult: ({ data }) => ({ size: data?.length ?? 0 }),
+        })
+
+        return (
+          <div>
+            <div data-testid="size2">{res2.size}</div>
+          </div>
+        )
+      }
+
+      render(
+        <div>
+          <SelectedPost />
+        </div>,
+        { wrapper: storeRef.wrapper },
+      )
+
+      expect(screen.getByTestId('size2').textContent).toBe('0')
+    })
+  })
+
+  describe('selectFromResult (mutation) behavior', () => {
+    const api = createApi({
+      baseQuery: async (arg: any) => {
+        await waitMs()
+        if ('amount' in arg?.body) {
+          amount += 1
+        }
+        return {
+          data: arg?.body
+            ? { ...arg.body, ...(amount ? { amount } : {}) }
+            : undefined,
+        }
+      },
+      endpoints: (build) => ({
+        increment: build.mutation<{ amount: number }, number>({
+          query: (amount) => ({
+            url: '',
+            method: 'POST',
+            body: {
+              amount,
+            },
+          }),
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, {
+      ...actionsReducer,
+    })
+
+    it('causes no more than one rerender when using selectFromResult with an empty object', async () => {
+      function Counter() {
+        const [increment] = api.endpoints.increment.useMutation({
+          selectFromResult: () => ({}),
+        })
+        getRenderCount = useRenderCounter()
+
+        return (
+          <div>
+            <button
+              data-testid="incrementButton"
+              onClick={() => increment(1)}
+            ></button>
+          </div>
+        )
+      }
+
+      render(<Counter />, { wrapper: storeRef.wrapper })
+
+      expect(getRenderCount()).toBe(1)
+
+      fireEvent.click(screen.getByTestId('incrementButton'))
+      await waitMs(200) // give our baseQuery a chance to return
+      expect(getRenderCount()).toBe(2)
+
+      fireEvent.click(screen.getByTestId('incrementButton'))
+      await waitMs(200)
+      expect(getRenderCount()).toBe(3)
+
+      const { increment } = api.endpoints
+
+      expect(storeRef.store.getState().actions).toMatchSequence(
+        api.internalActions.middlewareRegistered.match,
+        increment.matchPending,
+        increment.matchFulfilled,
+        increment.matchPending,
+        api.internalActions.removeMutationResult.match,
+        increment.matchFulfilled,
+      )
+    })
+
+    it('causes rerenders when only selected data changes', async () => {
+      function Counter() {
+        const [increment, { data }] = api.endpoints.increment.useMutation({
+          selectFromResult: ({ data }) => ({ data }),
+        })
+        getRenderCount = useRenderCounter()
+
+        return (
+          <div>
+            <button
+              data-testid="incrementButton"
+              onClick={() => increment(1)}
+            ></button>
+            <div data-testid="data">{JSON.stringify(data)}</div>
+          </div>
+        )
+      }
+
+      render(<Counter />, { wrapper: storeRef.wrapper })
+
+      expect(getRenderCount()).toBe(1)
+
+      fireEvent.click(screen.getByTestId('incrementButton'))
+      await waitFor(() =>
+        expect(screen.getByTestId('data').textContent).toBe(
+          JSON.stringify({ amount: 1 }),
+        ),
+      )
+      expect(getRenderCount()).toBe(3)
+
+      fireEvent.click(screen.getByTestId('incrementButton'))
+      await waitFor(() =>
+        expect(screen.getByTestId('data').textContent).toBe(
+          JSON.stringify({ amount: 2 }),
+        ),
+      )
+      expect(getRenderCount()).toBe(5)
+    })
+
+    it('causes the expected # of rerenders when NOT using selectFromResult', async () => {
+      function Counter() {
+        const [increment, data] = api.endpoints.increment.useMutation()
+        getRenderCount = useRenderCounter()
+
+        return (
+          <div>
+            <button
+              data-testid="incrementButton"
+              onClick={() => increment(1)}
+            ></button>
+            <div data-testid="status">{String(data.status)}</div>
+          </div>
+        )
+      }
+
+      render(<Counter />, { wrapper: storeRef.wrapper })
+
+      expect(getRenderCount()).toBe(1) // mount, uninitialized status in substate
+
+      fireEvent.click(screen.getByTestId('incrementButton'))
+
+      expect(getRenderCount()).toBe(2) // will be pending, isLoading: true,
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('pending'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('fulfilled'),
+      )
+      expect(getRenderCount()).toBe(3)
+
+      fireEvent.click(screen.getByTestId('incrementButton'))
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('pending'),
+      )
+      await waitFor(() =>
+        expect(screen.getByTestId('status').textContent).toBe('fulfilled'),
+      )
+      expect(getRenderCount()).toBe(5)
+    })
+
+    it('useMutation with selectFromResult option has a type error if the result is not an object', async () => {
+      function Counter() {
+        const [increment] = api.endpoints.increment.useMutation({
+          // selectFromResult must always return an object
+          // @ts-expect-error
+          selectFromResult: () => 42,
+        })
+
+        return (
+          <div>
+            <button
+              data-testid="incrementButton"
+              onClick={() => increment(1)}
+            ></button>
+          </div>
+        )
+      }
+
+      render(<Counter />, { wrapper: storeRef.wrapper })
+    })
+  })
+})
+
+describe('skip behavior', () => {
+  const uninitialized = {
+    status: QueryStatus.uninitialized,
+    refetch: expect.any(Function),
+    data: undefined,
+    isError: false,
+    isFetching: false,
+    isLoading: false,
+    isSuccess: false,
+    isUninitialized: true,
+  }
+
+  test('normal skip', async () => {
+    const { result, rerender } = renderHook(
+      ([arg, options]: Parameters<typeof api.endpoints.getUser.useQuery>) =>
+        api.endpoints.getUser.useQuery(arg, options),
+      {
+        wrapper: storeRef.wrapper,
+        initialProps: [1, { skip: true }],
+      },
+    )
+
+    expect(result.current).toEqual(uninitialized)
+    await waitMs(1)
+    expect(getSubscriptionCount('getUser(1)')).toBe(0)
+
+    rerender([1])
+
+    await act(async () => {
+      await waitForFakeTimer(150)
+    })
+
+    expect(result.current).toMatchObject({ status: QueryStatus.fulfilled })
+    await waitMs(1)
+    expect(getSubscriptionCount('getUser(1)')).toBe(1)
+
+    rerender([1, { skip: true }])
+
+    expect(result.current).toEqual({
+      ...uninitialized,
+      isSuccess: true,
+      currentData: undefined,
+      data: { name: 'Timmy' },
+    })
+    await waitMs(1)
+    expect(getSubscriptionCount('getUser(1)')).toBe(0)
+  })
+
+  test('skipToken', async () => {
+    const { result, rerender } = renderHook(
+      ([arg, options]: Parameters<typeof api.endpoints.getUser.useQuery>) =>
+        api.endpoints.getUser.useQuery(arg, options),
+      {
+        wrapper: storeRef.wrapper,
+        initialProps: [skipToken],
+      },
+    )
+
+    expect(result.current).toEqual(uninitialized)
+    await waitMs(1)
+
+    expect(getSubscriptionCount('getUser(1)')).toBe(0)
+    // also no subscription on `getUser(skipToken)` or similar:
+    expect(getSubscriptions()).toEqual({})
+
+    rerender([1])
+
+    await act(async () => {
+      await waitForFakeTimer(150)
+    })
+
+    expect(result.current).toMatchObject({ status: QueryStatus.fulfilled })
+    await waitMs(1)
+    expect(getSubscriptionCount('getUser(1)')).toBe(1)
+    expect(getSubscriptions()).not.toEqual({})
+
+    rerender([skipToken])
+
+    expect(result.current).toEqual({
+      ...uninitialized,
+      isSuccess: true,
+      currentData: undefined,
+      data: { name: 'Timmy' },
+    })
+    await waitMs(1)
+    expect(getSubscriptionCount('getUser(1)')).toBe(0)
+  })
+
+  test('skipToken does not break serializeQueryArgs', async () => {
+    const { result, rerender } = renderHook(
+      ([arg, options]: Parameters<
+        typeof api.endpoints.queryWithDeepArg.useQuery
+      >) => api.endpoints.queryWithDeepArg.useQuery(arg, options),
+      {
+        wrapper: storeRef.wrapper,
+        initialProps: [skipToken],
+      },
+    )
+
+    expect(result.current).toEqual(uninitialized)
+    await waitMs(1)
+
+    expect(getSubscriptionCount('nestedValue')).toBe(0)
+    // also no subscription on `getUser(skipToken)` or similar:
+    expect(getSubscriptions()).toEqual({})
+
+    rerender([{ param: { nested: 'nestedValue' } }])
+
+    await act(async () => {
+      await waitForFakeTimer(150)
+    })
+
+    expect(result.current).toMatchObject({ status: QueryStatus.fulfilled })
+    await waitMs(1)
+
+    expect(getSubscriptionCount('nestedValue')).toBe(1)
+    expect(getSubscriptions()).not.toEqual({})
+
+    rerender([skipToken])
+
+    expect(result.current).toEqual({
+      ...uninitialized,
+      isSuccess: true,
+      currentData: undefined,
+      data: {},
+    })
+    await waitMs(1)
+    expect(getSubscriptionCount('nestedValue')).toBe(0)
+  })
+
+  test('skipping a previously fetched query retains the existing value as `data`, but clears `currentData`', async () => {
+    const { result, rerender } = renderHook(
+      ([arg, options]: Parameters<typeof api.endpoints.getUser.useQuery>) =>
+        api.endpoints.getUser.useQuery(arg, options),
+      {
+        wrapper: storeRef.wrapper,
+        initialProps: [1],
+      },
+    )
+
+    await act(async () => {
+      await waitForFakeTimer(150)
+    })
+
+    // Normal fulfilled result, with both `data` and `currentData`
+    expect(result.current).toMatchObject({
+      status: QueryStatus.fulfilled,
+      isSuccess: true,
+      data: { name: 'Timmy' },
+      currentData: { name: 'Timmy' },
+    })
+
+    rerender([1, { skip: true }])
+
+    // After skipping, the query is "uninitialized", but still retains the last fetched `data`
+    // even though it's skipped. `currentData` is undefined, since that matches the current arg.
+    expect(result.current).toMatchObject({
+      status: QueryStatus.uninitialized,
+      isSuccess: true,
+      data: { name: 'Timmy' },
+      currentData: undefined,
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/buildInitiate.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/buildInitiate.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/buildInitiate.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,175 @@
+import { setupApiStore } from '@internal/tests/utils/helpers'
+import { createApi } from '../core'
+import type { SubscriptionSelectors } from '../core/buildMiddleware/types'
+import { fakeBaseQuery } from '../fakeBaseQuery'
+
+let calls = 0
+const api = createApi({
+  baseQuery: fakeBaseQuery(),
+  endpoints: (build) => ({
+    increment: build.query<number, void>({
+      async queryFn() {
+        const data = calls++
+        await Promise.resolve()
+        return { data }
+      },
+    }),
+    failing: build.query<void, void>({
+      async queryFn() {
+        await Promise.resolve()
+        return { error: { status: 500, data: 'error' } }
+      },
+    }),
+  }),
+})
+
+const storeRef = setupApiStore(api)
+
+let getSubscriptions: SubscriptionSelectors['getSubscriptions']
+let isRequestSubscribed: SubscriptionSelectors['isRequestSubscribed']
+
+beforeEach(() => {
+  ;({ getSubscriptions, isRequestSubscribed } = storeRef.store.dispatch(
+    api.internalActions.internal_getRTKQSubscriptions(),
+  ) as unknown as SubscriptionSelectors)
+})
+
+test('multiple synchonrous initiate calls with pre-existing cache entry', async () => {
+  const { store, api } = storeRef
+  // seed the store
+  const firstValue = await store.dispatch(api.endpoints.increment.initiate())
+
+  expect(firstValue).toMatchObject({ data: 0, status: 'fulfilled' })
+
+  // dispatch another increment
+  const secondValuePromise = store.dispatch(api.endpoints.increment.initiate())
+  // and one with a forced refresh
+  const thirdValuePromise = store.dispatch(
+    api.endpoints.increment.initiate(undefined, { forceRefetch: true }),
+  )
+  // and another increment
+  const fourthValuePromise = store.dispatch(api.endpoints.increment.initiate())
+
+  const secondValue = await secondValuePromise
+  const thirdValue = await thirdValuePromise
+  const fourthValue = await fourthValuePromise
+
+  expect(secondValue).toMatchObject({
+    data: firstValue.data,
+    status: 'fulfilled',
+    requestId: firstValue.requestId,
+  })
+
+  expect(thirdValue).toMatchObject({ data: 1, status: 'fulfilled' })
+  expect(thirdValue.requestId).not.toBe(firstValue.requestId)
+  expect(fourthValue).toMatchObject({
+    data: thirdValue.data,
+    status: 'fulfilled',
+    requestId: thirdValue.requestId,
+  })
+})
+
+describe('calling initiate without a cache entry, with subscribe: false still returns correct values', () => {
+  test('successful query', async () => {
+    const { store, api } = storeRef
+    calls = 0
+    const promise = store.dispatch(
+      api.endpoints.increment.initiate(undefined, { subscribe: false }),
+    )
+    expect(isRequestSubscribed('increment(undefined)', promise.requestId)).toBe(
+      false,
+    )
+    expect(
+      isRequestSubscribed(
+        'increment(undefined)',
+        `${promise.requestId}_running`,
+      ),
+    ).toBe(true)
+
+    await expect(promise).resolves.toMatchObject({
+      data: 0,
+      status: 'fulfilled',
+    })
+    expect(
+      isRequestSubscribed(
+        'increment(undefined)',
+        `${promise.requestId}_running`,
+      ),
+    ).toBe(false)
+  })
+
+  test('rejected query', async () => {
+    const { store, api } = storeRef
+    calls = 0
+    const promise = store.dispatch(
+      api.endpoints.failing.initiate(undefined, { subscribe: false }),
+    )
+    expect(isRequestSubscribed('failing(undefined)', promise.requestId)).toBe(
+      false,
+    )
+    expect(
+      isRequestSubscribed('failing(undefined)', `${promise.requestId}_running`),
+    ).toBe(true)
+
+    await expect(promise).resolves.toMatchObject({
+      status: 'rejected',
+    })
+    expect(
+      isRequestSubscribed('failing(undefined)', `${promise.requestId}_running`),
+    ).toBe(false)
+  })
+})
+
+describe('calling initiate should have resulting queryCacheKey match baseQuery queryCacheKey', () => {
+  const baseQuery = vi.fn(() => ({ data: 'success' }))
+  function getNewApi() {
+    return createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        query: build.query<void, { arg1: string; arg2: string }>({
+          query: (args) => `queryUrl/${args.arg1}/${args.arg2}`,
+        }),
+        mutation: build.mutation<void, { arg1: string; arg2: string }>({
+          query: () => 'mutationUrl',
+        }),
+      }),
+    })
+  }
+  let api = getNewApi()
+  beforeEach(() => {
+    baseQuery.mockClear()
+    api = getNewApi()
+  })
+
+  test('should be a string and matching on queries', () => {
+    const { store: storeApi } = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+    const promise = storeApi.dispatch(
+      api.endpoints.query.initiate({ arg2: 'secondArg', arg1: 'firstArg' }),
+    )
+    expect(baseQuery).toHaveBeenCalledWith(
+      expect.any(String),
+      expect.objectContaining({
+        queryCacheKey: promise.queryCacheKey,
+      }),
+      undefined,
+    )
+  })
+
+  test('should be undefined and matching on mutations', () => {
+    const { store: storeApi } = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+    storeApi.dispatch(
+      api.endpoints.mutation.initiate({ arg2: 'secondArg', arg1: 'firstArg' }),
+    )
+    expect(baseQuery).toHaveBeenCalledWith(
+      expect.any(String),
+      expect.objectContaining({
+        queryCacheKey: undefined,
+      }),
+      undefined,
+    )
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/buildMiddleware.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/buildMiddleware.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/buildMiddleware.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,83 @@
+import { createApi } from '@reduxjs/toolkit/query'
+
+const baseQuery = (args?: any) => ({ data: args })
+
+const api = createApi({
+  baseQuery,
+  tagTypes: ['Banana', 'Bread'],
+  endpoints: (build) => ({
+    getBanana: build.query<unknown, number>({
+      query(id) {
+        return { url: `banana/${id}` }
+      },
+      providesTags: ['Banana'],
+    }),
+    getBananas: build.query<unknown, void>({
+      query() {
+        return { url: 'bananas' }
+      },
+      providesTags: ['Banana'],
+    }),
+    getBread: build.query<unknown, number>({
+      query(id) {
+        return { url: `bread/${id}` }
+      },
+      providesTags: ['Bread'],
+    }),
+  }),
+})
+
+describe('type tests', () => {
+  it('should allow for an array of string TagTypes', () => {
+    api.util.invalidateTags(['Banana', 'Bread'])
+  })
+
+  it('should allow for an array of full TagTypes descriptions', () => {
+    api.util.invalidateTags([{ type: 'Banana' }, { type: 'Bread', id: 1 }])
+  })
+
+  it('should allow for a mix of full descriptions as well as plain strings', () => {
+    api.util.invalidateTags(['Banana', { type: 'Bread', id: 1 }])
+  })
+
+  it('should error when using non-existing TagTypes', () => {
+    // @ts-expect-error
+    api.util.invalidateTags(['Missing Tag'])
+  })
+
+  it('should error when using non-existing TagTypes in the full format', () => {
+    // @ts-expect-error
+    api.util.invalidateTags([{ type: 'Missing' }])
+  })
+
+  it('should allow pre-fetching for an endpoint that takes an arg', () => {
+    api.util.prefetch('getBanana', 5, { force: true })
+    api.util.prefetch('getBanana', 5, { force: false })
+    api.util.prefetch('getBanana', 5, { ifOlderThan: false })
+    api.util.prefetch('getBanana', 5, { ifOlderThan: 30 })
+    api.util.prefetch('getBanana', 5, {})
+  })
+
+  it('should error when pre-fetching with the incorrect arg type', () => {
+    // @ts-expect-error arg should be number, not string
+    api.util.prefetch('getBanana', '5', { force: true })
+  })
+
+  it('should allow pre-fetching for an endpoint with a void arg', () => {
+    api.util.prefetch('getBananas', undefined, { force: true })
+    api.util.prefetch('getBananas', undefined, { force: false })
+    api.util.prefetch('getBananas', undefined, { ifOlderThan: false })
+    api.util.prefetch('getBananas', undefined, { ifOlderThan: 30 })
+    api.util.prefetch('getBananas', undefined, {})
+  })
+
+  it('should error when pre-fetching with a defined arg when expecting void', () => {
+    // @ts-expect-error arg should be void, not number
+    api.util.prefetch('getBananas', 5, { force: true })
+  })
+
+  it('should error when pre-fetching for an incorrect endpoint name', () => {
+    // @ts-expect-error endpoint name does not exist
+    api.util.prefetch('getPomegranates', undefined, { force: true })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/buildMiddleware.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/buildMiddleware.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/buildMiddleware.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,136 @@
+import { createApi } from '@reduxjs/toolkit/query'
+import { delay } from 'msw'
+import { actionsReducer, setupApiStore } from '../../tests/utils/helpers'
+
+const baseQuery = (args?: any) => ({ data: args })
+const api = createApi({
+  baseQuery,
+  tagTypes: ['Banana', 'Bread'],
+  endpoints: (build) => ({
+    getBanana: build.query<unknown, number>({
+      query(id) {
+        return { url: `banana/${id}` }
+      },
+      providesTags: ['Banana'],
+    }),
+    getBananas: build.query<unknown, void>({
+      query() {
+        return { url: 'bananas' }
+      },
+      providesTags: ['Banana'],
+    }),
+    getBread: build.query<unknown, number>({
+      query(id) {
+        return { url: `bread/${id}` }
+      },
+      providesTags: ['Bread'],
+    }),
+    invalidateFruit: build.mutation({
+      query: (fruit?: 'Banana' | 'Bread' | null) => ({ url: `invalidate/fruit/${fruit || ''}` }),
+      invalidatesTags(result, error, arg) {
+        return [arg]
+      }
+    })
+  }),
+})
+const { getBanana, getBread, invalidateFruit } = api.endpoints
+
+const storeRef = setupApiStore(api, {
+  ...actionsReducer,
+})
+
+it('invalidates the specified tags', async () => {
+  await storeRef.store.dispatch(getBanana.initiate(1))
+  expect(storeRef.store.getState().actions).toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    getBanana.matchPending,
+    getBanana.matchFulfilled,
+  )
+
+  await storeRef.store.dispatch(api.util.invalidateTags(['Banana', 'Bread']))
+
+  // Slight pause to let the middleware run and such
+  await delay(20)
+
+  const firstSequence = [
+    api.internalActions.middlewareRegistered.match,
+    getBanana.matchPending,
+    getBanana.matchFulfilled,
+    api.util.invalidateTags.match,
+    getBanana.matchPending,
+    getBanana.matchFulfilled,
+  ]
+  expect(storeRef.store.getState().actions).toMatchSequence(...firstSequence)
+
+  await storeRef.store.dispatch(getBread.initiate(1))
+  await storeRef.store.dispatch(api.util.invalidateTags([{ type: 'Bread' }]))
+
+  await delay(20)
+
+  expect(storeRef.store.getState().actions).toMatchSequence(
+    ...firstSequence,
+    getBread.matchPending,
+    getBread.matchFulfilled,
+    api.util.invalidateTags.match,
+    getBread.matchPending,
+    getBread.matchFulfilled,
+  )
+})
+
+it('invalidates tags correctly when null or undefined are provided as tags', async() =>{
+  await storeRef.store.dispatch(getBanana.initiate(1))
+  await storeRef.store.dispatch(api.util.invalidateTags([undefined, null, 'Banana']))
+
+  // Slight pause to let the middleware run and such
+  await delay(20)
+
+  const apiActions = [
+    api.internalActions.middlewareRegistered.match,
+    getBanana.matchPending,
+    getBanana.matchFulfilled,
+    api.util.invalidateTags.match,
+    getBanana.matchPending,
+    getBanana.matchFulfilled,
+  ]
+
+  expect(storeRef.store.getState().actions).toMatchSequence(...apiActions)
+})
+
+
+it.each([
+  { tags: [undefined, null, 'Bread'] as Parameters<typeof api.util.invalidateTags>['0'] },
+  { tags: [undefined, null], }, { tags: [] }]
+)('does not invalidate with tags=$tags if no query matches', async ({ tags }) => {
+  await storeRef.store.dispatch(getBanana.initiate(1))
+  await storeRef.store.dispatch(api.util.invalidateTags(tags))
+
+  // Slight pause to let the middleware run and such
+  await delay(20)
+
+  const apiActions = [
+    api.internalActions.middlewareRegistered.match,
+    getBanana.matchPending,
+    getBanana.matchFulfilled,
+    api.util.invalidateTags.match,
+  ]
+
+  expect(storeRef.store.getState().actions).toMatchSequence(...apiActions)
+})
+ 
+it.each([{ mutationArg: 'Bread' as "Bread" | null | undefined  }, { mutationArg: undefined }, { mutationArg: null }])('does not invalidate queries when a mutation with tags=[$mutationArg] runs and does not match anything', async ({ mutationArg }) => {
+  await storeRef.store.dispatch(getBanana.initiate(1))
+  await storeRef.store.dispatch(invalidateFruit.initiate(mutationArg))
+
+  // Slight pause to let the middleware run and such
+  await delay(20)
+
+  const apiActions = [
+    api.internalActions.middlewareRegistered.match,
+    getBanana.matchPending,
+    getBanana.matchFulfilled,
+    invalidateFruit.matchPending,
+    invalidateFruit.matchFulfilled,
+  ]
+
+  expect(storeRef.store.getState().actions).toMatchSequence(...apiActions)
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/buildSelector.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/buildSelector.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/buildSelector.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,111 @@
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+
+import { configureStore, createSelector } from '@reduxjs/toolkit'
+
+describe('type tests', () => {
+  test('buildSelector type test', () => {
+    interface Todo {
+      userId: number
+      id: number
+      title: string
+      completed: boolean
+    }
+
+    type Todos = Array<Todo>
+
+    const exampleApi = createApi({
+      reducerPath: 'api',
+      baseQuery: fetchBaseQuery({
+        baseUrl: 'https://jsonplaceholder.typicode.com',
+      }),
+      endpoints: (build) => ({
+        getTodos: build.query<Todos, string>({
+          query: () => '/todos',
+        }),
+      }),
+    })
+
+    const exampleQuerySelector = exampleApi.endpoints.getTodos.select('/')
+
+    const todosSelector = createSelector(
+      [exampleQuerySelector],
+      (queryState) => {
+        return queryState?.data?.[0] ?? ({} as Todo)
+      },
+    )
+
+    const firstTodoTitleSelector = createSelector(
+      [todosSelector],
+      (todo) => todo?.title,
+    )
+
+    const store = configureStore({
+      reducer: {
+        [exampleApi.reducerPath]: exampleApi.reducer,
+        other: () => 1,
+      },
+    })
+
+    const todoTitle = firstTodoTitleSelector(store.getState())
+
+    // This only compiles if we carried the types through
+    const upperTitle = todoTitle.toUpperCase()
+
+    expectTypeOf(upperTitle).toBeString()
+  })
+
+  test('selectCachedArgsForQuery type test', () => {
+    interface Todo {
+      userId: number
+      id: number
+      title: string
+      completed: boolean
+    }
+
+    type Todos = Array<Todo>
+
+    const exampleApi = createApi({
+      reducerPath: 'api',
+      baseQuery: fetchBaseQuery({
+        baseUrl: 'https://jsonplaceholder.typicode.com',
+      }),
+      endpoints: (build) => ({
+        getTodos: build.query<Todos, string>({
+          query: () => '/todos',
+        }),
+        getInfiniteTodos: build.infiniteQuery<Todos, string, number>({
+          infiniteQueryOptions: {
+            initialPageParam: 0,
+            maxPages: 3,
+            getNextPageParam: (
+              lastPage,
+              allPages,
+              lastPageParam,
+              allPageParams,
+            ) => lastPageParam + 1,
+          },
+          query({ pageParam }) {
+            return `/todos?page=${pageParam}`
+          },
+        }),
+      }),
+    })
+
+    const store = configureStore({
+      reducer: {
+        [exampleApi.reducerPath]: exampleApi.reducer,
+        other: () => 1,
+      },
+    })
+
+    expectTypeOf(
+      exampleApi.util.selectCachedArgsForQuery(store.getState(), 'getTodos'),
+    ).toEqualTypeOf<string[]>()
+    expectTypeOf(
+      exampleApi.util.selectCachedArgsForQuery(
+        store.getState(),
+        'getInfiniteTodos',
+      ),
+    ).toEqualTypeOf<string[]>()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/buildSlice.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/buildSlice.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/buildSlice.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,214 @@
+import { createSlice } from '@reduxjs/toolkit'
+import { createApi } from '@reduxjs/toolkit/query'
+import { delay } from 'msw'
+import { setupApiStore } from '../../tests/utils/helpers'
+
+let shouldApiResponseSuccess = true
+
+const baseQuery = (args?: any) => ({ data: args })
+const api = createApi({
+  baseQuery,
+  tagTypes: ['SUCCEED', 'FAILED'],
+  endpoints: (build) => ({
+    getUser: build.query<{ url: string; success: boolean }, number>({
+      query(id) {
+        return { url: `user/${id}`, success: shouldApiResponseSuccess }
+      },
+      providesTags: (result) => (result?.success ? ['SUCCEED'] : ['FAILED']),
+    }),
+  }),
+})
+const { getUser } = api.endpoints
+
+const authSlice = createSlice({
+  name: 'auth',
+  initialState: {
+    token: '1234',
+  },
+  reducers: {
+    setToken(state, action) {
+      state.token = action.payload
+    },
+  },
+})
+
+const storeRef = setupApiStore(api, { auth: authSlice.reducer })
+
+describe('buildSlice', () => {
+  beforeEach(() => {
+    shouldApiResponseSuccess = true
+  })
+
+  it('only resets the api state when resetApiState is dispatched', async () => {
+    storeRef.store.dispatch({ type: 'unrelated' }) // trigger "registered middleware" into place
+    const initialState = storeRef.store.getState()
+
+    await storeRef.store.dispatch(
+      getUser.initiate(1, { subscriptionOptions: { pollingInterval: 10 } }),
+    )
+
+    const initialQueryState = {
+      api: {
+        config: {
+          focused: true,
+          invalidationBehavior: 'delayed',
+          keepUnusedDataFor: 60,
+          middlewareRegistered: true,
+          online: true,
+          reducerPath: 'api',
+          refetchOnFocus: false,
+          refetchOnMountOrArgChange: false,
+          refetchOnReconnect: false,
+        },
+        mutations: {},
+        provided: expect.any(Object),
+        queries: {
+          'getUser(1)': {
+            data: {
+              success: true,
+              url: 'user/1',
+            },
+            endpointName: 'getUser',
+            fulfilledTimeStamp: expect.any(Number),
+            originalArgs: 1,
+            requestId: expect.any(String),
+            startedTimeStamp: expect.any(Number),
+            status: 'fulfilled',
+          },
+        },
+        // Filled some time later
+        subscriptions: {},
+      },
+      auth: {
+        token: '1234',
+      },
+    }
+
+    expect(storeRef.store.getState()).toEqual(initialQueryState)
+
+    storeRef.store.dispatch(api.util.resetApiState())
+
+    expect(storeRef.store.getState()).toEqual(initialState)
+  })
+
+  it('replaces previous tags with new provided tags', async () => {
+    await storeRef.store.dispatch(getUser.initiate(1))
+
+    expect(
+      api.util.selectInvalidatedBy(storeRef.store.getState(), ['SUCCEED']),
+    ).toHaveLength(1)
+    expect(
+      api.util.selectInvalidatedBy(storeRef.store.getState(), ['FAILED']),
+    ).toHaveLength(0)
+
+    shouldApiResponseSuccess = false
+
+    storeRef.store.dispatch(getUser.initiate(1)).refetch()
+
+    await delay(10)
+
+    expect(
+      api.util.selectInvalidatedBy(storeRef.store.getState(), ['SUCCEED']),
+    ).toHaveLength(0)
+    expect(
+      api.util.selectInvalidatedBy(storeRef.store.getState(), ['FAILED']),
+    ).toHaveLength(1)
+  })
+})
+
+describe('`merge` callback', () => {
+  const baseQuery = (args?: any) => ({ data: args })
+
+  interface Todo {
+    id: string
+    text: string
+  }
+
+  it('Calls `merge` once there is existing data, and allows mutations of cache state', async () => {
+    let mergeCalled = false
+    let queryFnCalls = 0
+    const todoTexts = ['A', 'B', 'C', 'D']
+
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        getTodos: build.query<Todo[], void>({
+          async queryFn() {
+            const text = todoTexts[queryFnCalls]
+            return { data: [{ id: `${queryFnCalls++}`, text }] }
+          },
+          merge(currentCacheValue, responseData) {
+            mergeCalled = true
+            currentCacheValue.push(...responseData)
+          },
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    const selectTodoEntry = api.endpoints.getTodos.select()
+
+    const res = storeRef.store.dispatch(api.endpoints.getTodos.initiate())
+    await res
+    expect(mergeCalled).toBe(false)
+    const todoEntry1 = selectTodoEntry(storeRef.store.getState())
+    expect(todoEntry1.data).toEqual([{ id: '0', text: 'A' }])
+
+    res.refetch()
+
+    await delay(10)
+
+    expect(mergeCalled).toBe(true)
+    const todoEntry2 = selectTodoEntry(storeRef.store.getState())
+
+    expect(todoEntry2.data).toEqual([
+      { id: '0', text: 'A' },
+      { id: '1', text: 'B' },
+    ])
+  })
+
+  it('Allows returning a different value from `merge`', async () => {
+    let firstQueryFnCall = true
+
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        getTodos: build.query<Todo[], void>({
+          async queryFn() {
+            const item = firstQueryFnCall
+              ? { id: '0', text: 'A' }
+              : { id: '1', text: 'B' }
+            firstQueryFnCall = false
+            return { data: [item] }
+          },
+          merge(currentCacheValue, responseData) {
+            return responseData
+          },
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    const selectTodoEntry = api.endpoints.getTodos.select()
+
+    const res = storeRef.store.dispatch(api.endpoints.getTodos.initiate())
+    await res
+
+    const todoEntry1 = selectTodoEntry(storeRef.store.getState())
+    expect(todoEntry1.data).toEqual([{ id: '0', text: 'A' }])
+
+    res.refetch()
+
+    await delay(10)
+
+    const todoEntry2 = selectTodoEntry(storeRef.store.getState())
+
+    expect(todoEntry2.data).toEqual([{ id: '1', text: 'B' }])
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/buildThunks.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/buildThunks.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/buildThunks.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,251 @@
+import { configureStore, isAllOf } from '@reduxjs/toolkit'
+import { createApi } from '@reduxjs/toolkit/query/react'
+import { renderHook, waitFor } from '@testing-library/react'
+import { actionsReducer, withProvider } from '../../tests/utils/helpers'
+import type { BaseQueryApi } from '../baseQueryTypes'
+
+test('handles a non-async baseQuery without error', async () => {
+  const baseQuery = (args?: any) => ({ data: args })
+  const api = createApi({
+    baseQuery,
+    endpoints: (build) => ({
+      getUser: build.query<unknown, number>({
+        query(id) {
+          return { url: `user/${id}` }
+        },
+      }),
+    }),
+  })
+  const { getUser } = api.endpoints
+  const store = configureStore({
+    reducer: {
+      [api.reducerPath]: api.reducer,
+    },
+    middleware: (gDM) => gDM().concat(api.middleware),
+  })
+
+  const promise = store.dispatch(getUser.initiate(1))
+  const { data } = await promise
+
+  expect(data).toEqual({
+    url: 'user/1',
+  })
+
+  const storeResult = getUser.select(1)(store.getState())
+  expect(storeResult).toEqual({
+    data: {
+      url: 'user/1',
+    },
+    endpointName: 'getUser',
+    isError: false,
+    isLoading: false,
+    isSuccess: true,
+    isUninitialized: false,
+    originalArgs: 1,
+    requestId: expect.any(String),
+    status: 'fulfilled',
+    startedTimeStamp: expect.any(Number),
+    fulfilledTimeStamp: expect.any(Number),
+  })
+})
+
+test('passes the extraArgument property to the baseQueryApi', async () => {
+  const baseQuery = (_args: any, api: BaseQueryApi) => ({ data: api.extra })
+  const api = createApi({
+    baseQuery,
+    endpoints: (build) => ({
+      getUser: build.query<unknown, void>({
+        query: () => '',
+      }),
+    }),
+  })
+  const store = configureStore({
+    reducer: {
+      [api.reducerPath]: api.reducer,
+    },
+    middleware: (gDM) =>
+      gDM({ thunk: { extraArgument: 'cakes' } }).concat(api.middleware),
+  })
+  const { getUser } = api.endpoints
+  const { data } = await store.dispatch(getUser.initiate())
+  expect(data).toBe('cakes')
+})
+
+describe('re-triggering behavior on arg change', () => {
+  const api = createApi({
+    baseQuery: () => ({ data: null }),
+    endpoints: (build) => ({
+      getUser: build.query<any, any>({
+        query: (obj) => obj,
+      }),
+    }),
+  })
+  const { getUser } = api.endpoints
+  const store = configureStore({
+    reducer: { [api.reducerPath]: api.reducer },
+    middleware: (gDM) => gDM().concat(api.middleware),
+  })
+
+  const spy = vi.spyOn(getUser, 'initiate')
+  beforeEach(() => void spy.mockClear())
+
+  test('re-trigger on literal value change', async () => {
+    const { result, rerender } = renderHook(
+      (props) => getUser.useQuery(props),
+      {
+        wrapper: withProvider(store),
+        initialProps: 5,
+      },
+    )
+
+    await waitFor(() => {
+      expect(result.current.status).not.toBe('pending')
+    })
+
+    expect(spy).toHaveBeenCalledOnce()
+
+    for (let x = 1; x < 3; x++) {
+      rerender(6)
+      await waitFor(() => {
+        expect(result.current.status).not.toBe('pending')
+      })
+      expect(spy).toHaveBeenCalledTimes(2)
+    }
+
+    for (let x = 1; x < 3; x++) {
+      rerender(7)
+      await waitFor(() => {
+        expect(result.current.status).not.toBe('pending')
+      })
+      expect(spy).toHaveBeenCalledTimes(3)
+    }
+  })
+
+  test('only re-trigger on shallow-equal arg change', async () => {
+    const { result, rerender } = renderHook(
+      (props) => getUser.useQuery(props),
+      {
+        wrapper: withProvider(store),
+        initialProps: { name: 'Bob', likes: 'iceCream' },
+      },
+    )
+
+    await waitFor(() => {
+      expect(result.current.status).not.toBe('pending')
+    })
+    expect(spy).toHaveBeenCalledOnce()
+
+    for (let x = 1; x < 3; x++) {
+      rerender({ name: 'Bob', likes: 'waffles' })
+      await waitFor(() => {
+        expect(result.current.status).not.toBe('pending')
+      })
+      expect(spy).toHaveBeenCalledTimes(2)
+    }
+
+    for (let x = 1; x < 3; x++) {
+      rerender({ name: 'Alice', likes: 'waffles' })
+      await waitFor(() => {
+        expect(result.current.status).not.toBe('pending')
+      })
+      expect(spy).toHaveBeenCalledTimes(3)
+    }
+  })
+
+  test('re-triggers every time on deeper value changes', async () => {
+    const name = 'Tim'
+
+    const { result, rerender } = renderHook(
+      (props) => getUser.useQuery(props),
+      {
+        wrapper: withProvider(store),
+        initialProps: { person: { name } },
+      },
+    )
+
+    await waitFor(() => {
+      expect(result.current.status).not.toBe('pending')
+    })
+    expect(spy).toHaveBeenCalledOnce()
+
+    for (let x = 1; x < 3; x++) {
+      rerender({ person: { name: name + x } })
+      await waitFor(() => {
+        expect(result.current.status).not.toBe('pending')
+      })
+      expect(spy).toHaveBeenCalledTimes(x + 1)
+    }
+  })
+
+  test('do not re-trigger if the order of keys change while maintaining the same values', async () => {
+    const { result, rerender } = renderHook(
+      (props) => getUser.useQuery(props),
+      {
+        wrapper: withProvider(store),
+        initialProps: { name: 'Tim', likes: 'Bananas' },
+      },
+    )
+
+    await waitFor(() => {
+      expect(result.current.status).not.toBe('pending')
+    })
+    expect(spy).toHaveBeenCalledOnce()
+
+    for (let x = 1; x < 3; x++) {
+      rerender({ likes: 'Bananas', name: 'Tim' })
+      await waitFor(() => {
+        expect(result.current.status).not.toBe('pending')
+      })
+      expect(spy).toHaveBeenCalledOnce()
+    }
+  })
+})
+
+describe('prefetch', () => {
+  const baseQuery = () => ({ data: null })
+  const api = createApi({
+    baseQuery,
+    endpoints: (build) => ({
+      getUser: build.query<any, any>({
+        query: (obj) => obj,
+      }),
+    }),
+  })
+
+  const store = configureStore({
+    reducer: { [api.reducerPath]: api.reducer, ...actionsReducer },
+    middleware: (gDM) => gDM().concat(api.middleware),
+  })
+  it('should attach isPrefetch if prefetching', async () => {
+    store.dispatch(api.util.prefetch('getUser', 1, {}))
+
+    await Promise.all(store.dispatch(api.util.getRunningQueriesThunk()))
+
+    const isPrefetch = (
+      action: any,
+    ): action is { meta: { arg: { isPrefetch: true } } } =>
+      action?.meta?.arg?.isPrefetch
+
+    expect(store.getState().actions).toMatchSequence(
+      api.internalActions.middlewareRegistered.match,
+      isAllOf(api.endpoints.getUser.matchPending, isPrefetch),
+      isAllOf(api.endpoints.getUser.matchFulfilled, isPrefetch),
+    )
+
+    // compare against a regular initiate call
+    await store.dispatch(
+      api.endpoints.getUser.initiate(1, { forceRefetch: true }),
+    )
+
+    const isNotPrefetch = (action: any): action is unknown =>
+      !isPrefetch(action)
+
+    expect(store.getState().actions).toMatchSequence(
+      api.internalActions.middlewareRegistered.match,
+      isAllOf(api.endpoints.getUser.matchPending, isPrefetch),
+      isAllOf(api.endpoints.getUser.matchFulfilled, isPrefetch),
+      isAllOf(api.endpoints.getUser.matchPending, isNotPrefetch),
+      isAllOf(api.endpoints.getUser.matchFulfilled, isNotPrefetch),
+    )
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/cacheCollection.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/cacheCollection.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/cacheCollection.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,187 @@
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+import { configureStore } from '@reduxjs/toolkit'
+import { vi } from 'vitest'
+import type { Middleware, Reducer } from 'redux'
+import {
+  THIRTY_TWO_BIT_MAX_INT,
+  THIRTY_TWO_BIT_MAX_TIMER_SECONDS,
+} from '../core/buildMiddleware/cacheCollection'
+import { countObjectKeys } from '../utils/countObjectKeys'
+
+beforeAll(() => {
+  vi.useFakeTimers()
+})
+
+const onCleanup = vi.fn()
+
+beforeEach(() => {
+  onCleanup.mockClear()
+})
+
+test(`query: await cleanup, defaults`, async () => {
+  const { store, api } = storeForApi(
+    createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+      endpoints: (build) => ({
+        query: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+      }),
+    }),
+  )
+
+  const promise = store.dispatch(api.endpoints.query.initiate('arg'))
+  await promise
+  promise.unsubscribe()
+  vi.advanceTimersByTime(59000)
+  expect(onCleanup).not.toHaveBeenCalled()
+  vi.advanceTimersByTime(2000)
+  expect(onCleanup).toHaveBeenCalled()
+})
+
+test(`query: await cleanup, keepUnusedDataFor set`, async () => {
+  const { store, api } = storeForApi(
+    createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+      endpoints: (build) => ({
+        query: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+      }),
+      keepUnusedDataFor: 29,
+    }),
+  )
+
+  const promise = store.dispatch(api.endpoints.query.initiate('arg'))
+  await promise
+  promise.unsubscribe()
+  vi.advanceTimersByTime(28000)
+  expect(onCleanup).not.toHaveBeenCalled()
+  vi.advanceTimersByTime(2000)
+  expect(onCleanup).toHaveBeenCalled()
+})
+
+test(`query: handles large keepUnuseDataFor values over 32-bit ms`, async () => {
+  const { store, api } = storeForApi(
+    createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+      endpoints: (build) => ({
+        query: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+      }),
+      keepUnusedDataFor: THIRTY_TWO_BIT_MAX_TIMER_SECONDS - 10,
+    }),
+  )
+
+  const promise = store.dispatch(api.endpoints.query.initiate('arg'))
+  await promise
+  promise.unsubscribe()
+
+  // Shouldn't have been called right away
+  vi.advanceTimersByTime(1000)
+  expect(onCleanup).not.toHaveBeenCalled()
+
+  // Shouldn't have been called any time in the next few minutes
+  vi.advanceTimersByTime(1_000_000)
+  expect(onCleanup).not.toHaveBeenCalled()
+
+  // _Should_ be called _wayyyy_ in the future (like 24.8 days from now)
+  vi.advanceTimersByTime(THIRTY_TWO_BIT_MAX_TIMER_SECONDS * 1000),
+    expect(onCleanup).toHaveBeenCalled()
+})
+
+describe(`query: await cleanup, keepUnusedDataFor set`, () => {
+  const { store, api } = storeForApi(
+    createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+      endpoints: (build) => ({
+        query: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+        query2: build.query<unknown, string>({
+          query: () => '/success',
+          keepUnusedDataFor: 35,
+        }),
+        query3: build.query<unknown, string>({
+          query: () => '/success',
+          keepUnusedDataFor: 0,
+        }),
+        query4: build.query<unknown, string>({
+          query: () => '/success',
+          keepUnusedDataFor: Infinity,
+        }),
+      }),
+      keepUnusedDataFor: 29,
+    }),
+  )
+
+  test('global keepUnusedDataFor', async () => {
+    const promise = store.dispatch(api.endpoints.query.initiate('arg'))
+    await promise
+    promise.unsubscribe()
+    vi.advanceTimersByTime(28000)
+    expect(onCleanup).not.toHaveBeenCalled()
+    vi.advanceTimersByTime(2000)
+    expect(onCleanup).toHaveBeenCalled()
+  })
+
+  test('endpoint keepUnusedDataFor', async () => {
+    const promise = store.dispatch(api.endpoints.query2.initiate('arg'))
+    await promise
+    promise.unsubscribe()
+
+    vi.advanceTimersByTime(34000)
+    expect(onCleanup).not.toHaveBeenCalled()
+    vi.advanceTimersByTime(2000)
+    expect(onCleanup).toHaveBeenCalled()
+  })
+
+  test('endpoint keepUnusedDataFor: 0 ', async () => {
+    expect(onCleanup).not.toHaveBeenCalled()
+    const promise = store.dispatch(api.endpoints.query3.initiate('arg'))
+    await promise
+    promise.unsubscribe()
+    expect(onCleanup).not.toHaveBeenCalled()
+    vi.advanceTimersByTime(1)
+    expect(onCleanup).toHaveBeenCalled()
+  })
+
+  test('endpoint keepUnusedDataFor: Infinity', async () => {
+    expect(onCleanup).not.toHaveBeenCalled()
+    store.dispatch(api.endpoints.query4.initiate('arg')).unsubscribe()
+    expect(onCleanup).not.toHaveBeenCalled()
+    vi.advanceTimersByTime(THIRTY_TWO_BIT_MAX_INT)
+    expect(onCleanup).not.toHaveBeenCalled()
+  })
+})
+
+function storeForApi<
+  A extends {
+    reducerPath: 'api'
+    reducer: Reducer<any, any>
+    middleware: Middleware
+    util: { resetApiState(): any }
+  },
+>(api: A) {
+  const store = configureStore({
+    reducer: { api: api.reducer },
+    middleware: (gdm) =>
+      gdm({ serializableCheck: false, immutableCheck: false }).concat(
+        api.middleware,
+      ),
+    enhancers: (gde) =>
+      gde({
+        autoBatch: false,
+      }),
+  })
+  let hadQueries = false
+  store.subscribe(() => {
+    const queryState = store.getState().api.queries
+    if (hadQueries && countObjectKeys(queryState) === 0) {
+      onCleanup()
+    }
+    hadQueries = hadQueries || countObjectKeys(queryState) > 0
+  })
+  return { api, store }
+}
Index: node_modules/@reduxjs/toolkit/src/query/tests/cacheLifecycle.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/cacheLifecycle.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/cacheLifecycle.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import type { FetchBaseQueryMeta } from '@reduxjs/toolkit/query'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+
+const api = createApi({
+  baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+  endpoints: () => ({}),
+})
+
+describe('type tests', () => {
+  test(`mutation: await cacheDataLoaded, await cacheEntryRemoved (success)`, () => {
+    const extended = api.injectEndpoints({
+      overrideExisting: true,
+      endpoints: (build) => ({
+        injected: build.mutation<number, string>({
+          query: () => '/success',
+          async onCacheEntryAdded(
+            arg,
+            { dispatch, getState, cacheEntryRemoved, cacheDataLoaded },
+          ) {
+            const firstValue = await cacheDataLoaded
+
+            expectTypeOf(firstValue).toMatchTypeOf<{
+              data: number
+              meta?: FetchBaseQueryMeta
+            }>()
+          },
+        }),
+      }),
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/cacheLifecycle.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/cacheLifecycle.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/cacheLifecycle.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,708 @@
+import {
+  DEFAULT_DELAY_MS,
+  fakeTimerWaitFor,
+  setupApiStore,
+} from '@internal/tests/utils/helpers'
+import type { QueryActionCreatorResult } from '@reduxjs/toolkit/query'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+
+beforeAll(() => {
+  vi.useFakeTimers()
+})
+
+const api = createApi({
+  baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+  endpoints: () => ({}),
+})
+const storeRef = setupApiStore(api)
+
+const onNewCacheEntry = vi.fn()
+const gotFirstValue = vi.fn()
+const onCleanup = vi.fn()
+const onCatch = vi.fn()
+
+beforeEach(() => {
+  onNewCacheEntry.mockClear()
+  gotFirstValue.mockClear()
+  onCleanup.mockClear()
+  onCatch.mockClear()
+})
+
+describe.each([['query'], ['mutation']] as const)(
+  'generic cases: %s',
+  (type) => {
+    test(`${type}: new cache entry only`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          injected: build[type as 'mutation']<unknown, string>({
+            query: () => '/success',
+            onCacheEntryAdded(arg, { dispatch, getState }) {
+              onNewCacheEntry(arg)
+            },
+          }),
+        }),
+      })
+      storeRef.store.dispatch(extended.endpoints.injected.initiate('arg'))
+      expect(onNewCacheEntry).toHaveBeenCalledWith('arg')
+    })
+
+    test(`${type}: await cacheEntryRemoved`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          // Lying to TS here
+          injected: build[type as 'mutation']<unknown, string>({
+            query: () => '/success',
+            async onCacheEntryAdded(
+              arg,
+              { dispatch, getState, cacheEntryRemoved },
+            ) {
+              onNewCacheEntry(arg)
+              await cacheEntryRemoved
+              onCleanup()
+            },
+          }),
+        }),
+      })
+      const promise = storeRef.store.dispatch(
+        extended.endpoints.injected.initiate('arg'),
+      )
+
+      expect(onNewCacheEntry).toHaveBeenCalledWith('arg')
+      expect(onCleanup).not.toHaveBeenCalled()
+
+      await promise
+      if (type === 'mutation') {
+        promise.reset()
+      } else {
+        ;(promise as unknown as QueryActionCreatorResult<any>).unsubscribe()
+      }
+      await vi.advanceTimersByTimeAsync(DEFAULT_DELAY_MS)
+      if (type === 'query') {
+        await vi.advanceTimersByTimeAsync(59000)
+        expect(onCleanup).not.toHaveBeenCalled()
+        await vi.advanceTimersByTimeAsync(2000)
+      }
+
+      expect(onCleanup).toHaveBeenCalled()
+    })
+
+    test(`${type}: await cacheDataLoaded, await cacheEntryRemoved (success)`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          injected: build[type as 'mutation']<number, string>({
+            query: () => '/success',
+            async onCacheEntryAdded(
+              arg,
+              { dispatch, getState, cacheEntryRemoved, cacheDataLoaded },
+            ) {
+              onNewCacheEntry(arg)
+              const firstValue = await cacheDataLoaded
+              gotFirstValue(firstValue)
+              await cacheEntryRemoved
+              onCleanup()
+            },
+          }),
+        }),
+      })
+      const promise = storeRef.store.dispatch(
+        extended.endpoints.injected.initiate('arg'),
+      )
+
+      expect(onNewCacheEntry).toHaveBeenCalledWith('arg')
+
+      expect(gotFirstValue).not.toHaveBeenCalled()
+      expect(onCleanup).not.toHaveBeenCalled()
+
+      await fakeTimerWaitFor(() => {
+        expect(gotFirstValue).toHaveBeenCalled()
+      })
+      expect(gotFirstValue).toHaveBeenCalledWith({
+        data: { value: 'success' },
+        meta: {
+          request: expect.any(Request),
+          response: expect.any(Object), // Response is not available in jest env
+        },
+      })
+      expect(onCleanup).not.toHaveBeenCalled()
+
+      if (type === 'mutation') {
+        promise.reset()
+      } else {
+        ;(promise as unknown as QueryActionCreatorResult<any>).unsubscribe()
+      }
+      await vi.advanceTimersByTimeAsync(DEFAULT_DELAY_MS)
+      if (type === 'query') {
+        await vi.advanceTimersByTimeAsync(59000)
+        expect(onCleanup).not.toHaveBeenCalled()
+        await vi.advanceTimersByTimeAsync(2000)
+      }
+
+      expect(onCleanup).toHaveBeenCalled()
+    })
+
+    test(`${type}: await cacheDataLoaded, await cacheEntryRemoved (cacheDataLoaded never resolves)`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          injected: build[type as 'mutation']<unknown, string>({
+            query: () => '/error', // we will initiate only once and that one time will be an error -> cacheDataLoaded will never resolve
+            async onCacheEntryAdded(
+              arg,
+              { dispatch, getState, cacheEntryRemoved, cacheDataLoaded },
+            ) {
+              onNewCacheEntry(arg)
+              // this will wait until cacheEntryRemoved, then reject => nothing past that line will execute
+              // but since this special "cacheEntryRemoved" rejection is handled outside, there will be no
+              // uncaught rejection error
+              const firstValue = await cacheDataLoaded
+              gotFirstValue(firstValue)
+              await cacheEntryRemoved
+              onCleanup()
+            },
+          }),
+        }),
+      })
+      const promise = storeRef.store.dispatch(
+        extended.endpoints.injected.initiate('arg'),
+      )
+      expect(onNewCacheEntry).toHaveBeenCalledWith('arg')
+
+      if (type === 'mutation') {
+        promise.reset()
+      } else {
+        ;(promise as unknown as QueryActionCreatorResult<any>).unsubscribe()
+      }
+      await vi.advanceTimersByTimeAsync(DEFAULT_DELAY_MS)
+      if (type === 'query') {
+        await vi.advanceTimersByTimeAsync(120000)
+      }
+      expect(gotFirstValue).not.toHaveBeenCalled()
+      expect(onCleanup).not.toHaveBeenCalled()
+    })
+
+    test(`${type}: try { await cacheDataLoaded }, await cacheEntryRemoved (cacheDataLoaded never resolves)`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          injected: build[type as 'mutation']<unknown, string>({
+            query: () => '/error', // we will initiate only once and that one time will be an error -> cacheDataLoaded will never resolve
+            async onCacheEntryAdded(
+              arg,
+              { dispatch, getState, cacheEntryRemoved, cacheDataLoaded },
+            ) {
+              onNewCacheEntry(arg)
+
+              try {
+                // this will wait until cacheEntryRemoved, then reject => nothing else in this try..catch block will execute
+                const firstValue = await cacheDataLoaded
+                gotFirstValue(firstValue)
+              } catch (e) {
+                onCatch(e)
+              }
+              await cacheEntryRemoved
+              onCleanup()
+            },
+          }),
+        }),
+      })
+      const promise = storeRef.store.dispatch(
+        extended.endpoints.injected.initiate('arg'),
+      )
+
+      expect(onNewCacheEntry).toHaveBeenCalledWith('arg')
+      await promise
+      if (type === 'mutation') {
+        promise.reset()
+      } else {
+        ;(promise as unknown as QueryActionCreatorResult<any>).unsubscribe()
+      }
+      await vi.advanceTimersByTimeAsync(DEFAULT_DELAY_MS)
+
+      if (type === 'query') {
+        await vi.advanceTimersByTimeAsync(59000)
+        expect(onCleanup).not.toHaveBeenCalled()
+        await vi.advanceTimersByTimeAsync(2000)
+      }
+
+      expect(onCleanup).toHaveBeenCalled()
+      expect(gotFirstValue).not.toHaveBeenCalled()
+      expect(onCatch.mock.calls[0][0]).toMatchObject({
+        message: 'Promise never resolved before cacheEntryRemoved.',
+      })
+    })
+
+    test(`${type}: try { await cacheDataLoaded, await cacheEntryRemoved } (cacheDataLoaded never resolves)`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          injected: build[type as 'mutation']<unknown, string>({
+            query: () => '/error', // we will initiate only once and that one time will be an error -> cacheDataLoaded will never resolve
+            async onCacheEntryAdded(
+              arg,
+              { dispatch, getState, cacheEntryRemoved, cacheDataLoaded },
+            ) {
+              onNewCacheEntry(arg)
+
+              try {
+                // this will wait until cacheEntryRemoved, then reject => nothing else in this try..catch block will execute
+                const firstValue = await cacheDataLoaded
+                gotFirstValue(firstValue)
+                // cleanup in this scenario only needs to be done for stuff within this try..catch block - totally valid scenario
+                await cacheEntryRemoved
+                onCleanup()
+              } catch (e) {
+                onCatch(e)
+              }
+            },
+          }),
+        }),
+      })
+      const promise = storeRef.store.dispatch(
+        extended.endpoints.injected.initiate('arg'),
+      )
+
+      expect(onNewCacheEntry).toHaveBeenCalledWith('arg')
+      await promise
+
+      if (type === 'mutation') {
+        promise.reset()
+      } else {
+        ;(promise as unknown as QueryActionCreatorResult<any>).unsubscribe()
+      }
+      await vi.advanceTimersByTimeAsync(DEFAULT_DELAY_MS)
+      if (type === 'query') {
+        await vi.advanceTimersByTimeAsync(59000)
+        expect(onCleanup).not.toHaveBeenCalled()
+        await vi.advanceTimersByTimeAsync(2000)
+      }
+      expect(onCleanup).not.toHaveBeenCalled()
+      expect(gotFirstValue).not.toHaveBeenCalled()
+      expect(onCatch.mock.calls[0][0]).toMatchObject({
+        message: 'Promise never resolved before cacheEntryRemoved.',
+      })
+    })
+
+    test(`${type}: try { await cacheDataLoaded } finally { await cacheEntryRemoved } (cacheDataLoaded never resolves)`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          injected: build[type as 'mutation']<unknown, string>({
+            query: () => '/error', // we will initiate only once and that one time will be an error -> cacheDataLoaded will never resolve
+            async onCacheEntryAdded(
+              arg,
+              { dispatch, getState, cacheEntryRemoved, cacheDataLoaded },
+            ) {
+              onNewCacheEntry(arg)
+
+              try {
+                // this will wait until cacheEntryRemoved, then reject => nothing else in this try..catch block will execute
+                const firstValue = await cacheDataLoaded
+                gotFirstValue(firstValue)
+              } catch (e) {
+                onCatch(e)
+              } finally {
+                await cacheEntryRemoved
+                onCleanup()
+              }
+            },
+          }),
+        }),
+      })
+      const promise = storeRef.store.dispatch(
+        extended.endpoints.injected.initiate('arg'),
+      )
+
+      expect(onNewCacheEntry).toHaveBeenCalledWith('arg')
+
+      await promise
+      if (type === 'mutation') {
+        promise.reset()
+      } else {
+        ;(promise as unknown as QueryActionCreatorResult<any>).unsubscribe()
+      }
+      await vi.advanceTimersByTimeAsync(DEFAULT_DELAY_MS)
+      if (type === 'query') {
+        await vi.advanceTimersByTimeAsync(59000)
+        expect(onCleanup).not.toHaveBeenCalled()
+        await vi.advanceTimersByTimeAsync(2000)
+      }
+      expect(onCleanup).toHaveBeenCalled()
+      expect(gotFirstValue).not.toHaveBeenCalled()
+      expect(onCatch.mock.calls[0][0]).toMatchObject({
+        message: 'Promise never resolved before cacheEntryRemoved.',
+      })
+    })
+  },
+)
+
+test(`query: getCacheEntry`, async () => {
+  const snapshot = vi.fn()
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.query<unknown, string>({
+        query: () => '/success',
+        async onCacheEntryAdded(
+          arg,
+          {
+            dispatch,
+            getState,
+            getCacheEntry,
+            cacheEntryRemoved,
+            cacheDataLoaded,
+          },
+        ) {
+          snapshot(getCacheEntry())
+          gotFirstValue(await cacheDataLoaded)
+          snapshot(getCacheEntry())
+          await cacheEntryRemoved
+          snapshot(getCacheEntry())
+        },
+      }),
+    }),
+  })
+  const promise = storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg'),
+  )
+  await promise
+  promise.unsubscribe()
+
+  await fakeTimerWaitFor(() => {
+    expect(gotFirstValue).toHaveBeenCalled()
+  })
+
+  await vi.advanceTimersByTimeAsync(120000)
+
+  expect(snapshot).toHaveBeenCalledTimes(3)
+  expect(snapshot.mock.calls[0][0]).toMatchObject({
+    endpointName: 'injected',
+    isError: false,
+    isLoading: true,
+    isSuccess: false,
+    isUninitialized: false,
+    originalArgs: 'arg',
+    requestId: promise.requestId,
+    startedTimeStamp: expect.any(Number),
+    status: 'pending',
+  })
+  expect(snapshot.mock.calls[1][0]).toMatchObject({
+    data: {
+      value: 'success',
+    },
+    endpointName: 'injected',
+    fulfilledTimeStamp: expect.any(Number),
+    isError: false,
+    isLoading: false,
+    isSuccess: true,
+    isUninitialized: false,
+    originalArgs: 'arg',
+    requestId: promise.requestId,
+    startedTimeStamp: expect.any(Number),
+    status: 'fulfilled',
+  })
+  expect(snapshot.mock.calls[2][0]).toMatchObject({
+    isError: false,
+    isLoading: false,
+    isSuccess: false,
+    isUninitialized: true,
+    status: 'uninitialized',
+  })
+})
+
+test(`mutation: getCacheEntry`, async () => {
+  const snapshot = vi.fn()
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.mutation<unknown, string>({
+        query: () => '/success',
+        async onCacheEntryAdded(
+          arg,
+          {
+            dispatch,
+            getState,
+            getCacheEntry,
+            cacheEntryRemoved,
+            cacheDataLoaded,
+          },
+        ) {
+          snapshot(getCacheEntry())
+          gotFirstValue(await cacheDataLoaded)
+          snapshot(getCacheEntry())
+          await cacheEntryRemoved
+          snapshot(getCacheEntry())
+        },
+      }),
+    }),
+  })
+  const promise = storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg'),
+  )
+  await fakeTimerWaitFor(() => {
+    expect(gotFirstValue).toHaveBeenCalled()
+  })
+
+  promise.reset()
+  await vi.advanceTimersByTimeAsync(DEFAULT_DELAY_MS)
+
+  expect(snapshot).toHaveBeenCalledTimes(3)
+  expect(snapshot.mock.calls[0][0]).toMatchObject({
+    endpointName: 'injected',
+    isError: false,
+    isLoading: true,
+    isSuccess: false,
+    isUninitialized: false,
+    startedTimeStamp: expect.any(Number),
+    status: 'pending',
+  })
+  expect(snapshot.mock.calls[1][0]).toMatchObject({
+    data: {
+      value: 'success',
+    },
+    endpointName: 'injected',
+    fulfilledTimeStamp: expect.any(Number),
+    isError: false,
+    isLoading: false,
+    isSuccess: true,
+    isUninitialized: false,
+    startedTimeStamp: expect.any(Number),
+    status: 'fulfilled',
+  })
+  expect(snapshot.mock.calls[2][0]).toMatchObject({
+    isError: false,
+    isLoading: false,
+    isSuccess: false,
+    isUninitialized: true,
+    status: 'uninitialized',
+  })
+})
+
+test('query: updateCachedData', async () => {
+  const trackCalls = vi.fn()
+
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.query<{ value: string }, string>({
+        query: () => '/success',
+        async onCacheEntryAdded(
+          arg,
+          {
+            dispatch,
+            getState,
+            getCacheEntry,
+            updateCachedData,
+            cacheEntryRemoved,
+            cacheDataLoaded,
+          },
+        ) {
+          expect(getCacheEntry().data).toEqual(undefined)
+          // calling `updateCachedData` when there is no data yet should not do anything
+          updateCachedData((draft) => {
+            draft.value = 'TEST'
+            trackCalls()
+          })
+          expect(trackCalls).not.toHaveBeenCalled()
+          expect(getCacheEntry().data).toEqual(undefined)
+
+          gotFirstValue(await cacheDataLoaded)
+
+          expect(getCacheEntry().data).toEqual({ value: 'success' })
+          updateCachedData((draft) => {
+            draft.value = 'TEST'
+            trackCalls()
+          })
+          expect(trackCalls).toHaveBeenCalledOnce()
+          expect(getCacheEntry().data).toEqual({ value: 'TEST' })
+
+          await cacheEntryRemoved
+
+          expect(getCacheEntry().data).toEqual(undefined)
+          // calling `updateCachedData` when there is no data any more should not do anything
+          updateCachedData((draft) => {
+            draft.value = 'TEST2'
+            trackCalls()
+          })
+          expect(trackCalls).toHaveBeenCalledOnce()
+          expect(getCacheEntry().data).toEqual(undefined)
+
+          onCleanup()
+        },
+      }),
+    }),
+  })
+  const promise = storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg'),
+  )
+  await promise
+  promise.unsubscribe()
+
+  await fakeTimerWaitFor(() => {
+    expect(gotFirstValue).toHaveBeenCalled()
+  })
+
+  await vi.advanceTimersByTimeAsync(61000)
+
+  await fakeTimerWaitFor(() => {
+    expect(onCleanup).toHaveBeenCalled()
+  })
+})
+
+test('updateCachedData - infinite query', async () => {
+  const trackCalls = vi.fn()
+
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      infiniteInjected: build.infiniteQuery<{ value: string }, string, number>({
+        query: () => '/success',
+        infiniteQueryOptions: {
+          initialPageParam: 1,
+          getNextPageParam: (
+            lastPage,
+            allPages,
+            lastPageParam,
+            allPageParams,
+          ) => lastPageParam + 1,
+        },
+        async onCacheEntryAdded(
+          arg,
+          {
+            dispatch,
+            getState,
+            getCacheEntry,
+            updateCachedData,
+            cacheEntryRemoved,
+            cacheDataLoaded,
+          },
+        ) {
+          expect(getCacheEntry().data).toEqual(undefined)
+          // calling `updateCachedData` when there is no data yet should not do anything
+          updateCachedData((draft) => {
+            draft.pages = [{ value: 'TEST' }]
+            draft.pageParams = [1]
+            trackCalls()
+          })
+          expect(trackCalls).not.toHaveBeenCalled()
+          expect(getCacheEntry().data).toEqual(undefined)
+
+          gotFirstValue(await cacheDataLoaded)
+
+          expect(getCacheEntry().data).toEqual({
+            pages: [{ value: 'success' }],
+            pageParams: [1],
+          })
+          updateCachedData((draft) => {
+            draft.pages = [{ value: 'TEST' }]
+            draft.pageParams = [1]
+            trackCalls()
+          })
+          expect(trackCalls).toHaveBeenCalledOnce()
+          expect(getCacheEntry().data).toEqual({
+            pages: [{ value: 'TEST' }],
+            pageParams: [1],
+          })
+
+          await cacheEntryRemoved
+
+          expect(getCacheEntry().data).toEqual(undefined)
+          // calling `updateCachedData` when there is no data any more should not do anything
+          updateCachedData((draft) => {
+            draft.pages = [{ value: 'TEST' }, { value: 'TEST2' }]
+            draft.pageParams = [1, 2]
+            trackCalls()
+          })
+          expect(trackCalls).toHaveBeenCalledOnce()
+          expect(getCacheEntry().data).toEqual(undefined)
+
+          onCleanup()
+        },
+      }),
+    }),
+  })
+  const promise = storeRef.store.dispatch(
+    extended.endpoints.infiniteInjected.initiate('arg'),
+  )
+  await promise
+  promise.unsubscribe()
+
+  await fakeTimerWaitFor(() => {
+    expect(gotFirstValue).toHaveBeenCalled()
+  })
+
+  await vi.advanceTimersByTimeAsync(61000)
+
+  await fakeTimerWaitFor(() => {
+    expect(onCleanup).toHaveBeenCalled()
+  })
+})
+
+test('dispatching further actions does not trigger another lifecycle', async () => {
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.query<unknown, void>({
+        query: () => '/success',
+        async onCacheEntryAdded() {
+          onNewCacheEntry()
+        },
+      }),
+    }),
+  })
+  await storeRef.store.dispatch(extended.endpoints.injected.initiate())
+  expect(onNewCacheEntry).toHaveBeenCalledOnce()
+
+  await storeRef.store.dispatch(extended.endpoints.injected.initiate())
+  expect(onNewCacheEntry).toHaveBeenCalledOnce()
+
+  await storeRef.store.dispatch(
+    extended.endpoints.injected.initiate(undefined, { forceRefetch: true }),
+  )
+  expect(onNewCacheEntry).toHaveBeenCalledOnce()
+})
+
+test('dispatching a query initializer with `subscribe: false` does also start a lifecycle', async () => {
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.query<unknown, void>({
+        query: () => '/success',
+        async onCacheEntryAdded() {
+          onNewCacheEntry()
+        },
+      }),
+    }),
+  })
+  await storeRef.store.dispatch(
+    extended.endpoints.injected.initiate(undefined, { subscribe: false }),
+  )
+  expect(onNewCacheEntry).toHaveBeenCalledOnce()
+
+  // will not be called a second time though
+  await storeRef.store.dispatch(extended.endpoints.injected.initiate(undefined))
+  expect(onNewCacheEntry).toHaveBeenCalledOnce()
+})
+
+test('dispatching a mutation initializer with `track: false` does not start a lifecycle', async () => {
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.mutation<unknown, void>({
+        query: () => '/success',
+        async onCacheEntryAdded() {
+          onNewCacheEntry()
+        },
+      }),
+    }),
+  })
+  await storeRef.store.dispatch(
+    extended.endpoints.injected.initiate(undefined, { track: false }),
+  )
+  expect(onNewCacheEntry).not.toHaveBeenCalled()
+
+  await storeRef.store.dispatch(extended.endpoints.injected.initiate(undefined))
+  expect(onNewCacheEntry).toHaveBeenCalledOnce()
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/cleanup.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/cleanup.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/cleanup.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,200 @@
+// tests for "cleanup-after-unsubscribe" behavior
+import React from 'react'
+
+import { createListenerMiddleware } from '@reduxjs/toolkit'
+import { createApi, QueryStatus } from '@reduxjs/toolkit/query/react'
+import { act, render, screen, waitFor } from '@testing-library/react'
+import { setupApiStore } from '../../tests/utils/helpers'
+import type { SubscriptionSelectors } from '../core/buildMiddleware/types'
+
+const api = createApi({
+  baseQuery: () => ({ data: 42 }),
+  endpoints: (build) => ({
+    a: build.query<unknown, void>({ query: () => '' }),
+    b: build.query<unknown, void>({ query: () => '' }),
+  }),
+})
+const storeRef = setupApiStore(api)
+
+const getSubStateA = () => storeRef.store.getState().api.queries['a(undefined)']
+const getSubStateB = () => storeRef.store.getState().api.queries['b(undefined)']
+
+function UsingA() {
+  const { data } = api.endpoints.a.useQuery()
+
+  return <>Result: {data as React.ReactNode} </>
+}
+
+function UsingB() {
+  api.endpoints.b.useQuery()
+
+  return <></>
+}
+
+function UsingAB() {
+  api.endpoints.a.useQuery()
+  api.endpoints.b.useQuery()
+
+  return <></>
+}
+
+beforeAll(() => {
+  vi.useFakeTimers({ shouldAdvanceTime: true })
+})
+
+test('data stays in store when component stays rendered', async () => {
+  expect(getSubStateA()).toBeUndefined()
+
+  render(<UsingA />, { wrapper: storeRef.wrapper })
+  await waitFor(() =>
+    expect(getSubStateA()?.status).toBe(QueryStatus.fulfilled),
+  )
+
+  vi.advanceTimersByTime(120_000)
+
+  expect(getSubStateA()?.status).toBe(QueryStatus.fulfilled)
+})
+
+test('data is removed from store after 60 seconds', async () => {
+  expect(getSubStateA()).toBeUndefined()
+
+  const { unmount } = render(<UsingA />, { wrapper: storeRef.wrapper })
+  await waitFor(() =>
+    expect(getSubStateA()?.status).toBe(QueryStatus.fulfilled),
+  )
+
+  unmount()
+
+  vi.advanceTimersByTime(59_000)
+
+  expect(getSubStateA()?.status).toBe(QueryStatus.fulfilled)
+
+  vi.advanceTimersByTime(2000)
+
+  expect(getSubStateA()).toBeUndefined()
+})
+
+test('data stays in store when component stays rendered while data for another component is removed after it unmounted', async () => {
+  expect(getSubStateA()).toBeUndefined()
+  expect(getSubStateB()).toBeUndefined()
+
+  const { rerender } = render(
+    <>
+      <UsingA />
+      <UsingB />
+    </>,
+    { wrapper: storeRef.wrapper },
+  )
+  await waitFor(() => {
+    expect(getSubStateA()?.status).toBe(QueryStatus.fulfilled)
+    expect(getSubStateB()?.status).toBe(QueryStatus.fulfilled)
+  })
+
+  const statusA = getSubStateA()
+
+  await act(async () => {
+    rerender(<UsingA />)
+
+    vi.advanceTimersByTime(10)
+  })
+
+  vi.advanceTimersByTime(120_000)
+
+  expect(getSubStateA()).toEqual(statusA)
+  expect(getSubStateB()).toBeUndefined()
+})
+
+test('data stays in store when one component requiring the data stays in the store', async () => {
+  expect(getSubStateA()).toBeUndefined()
+  expect(getSubStateB()).toBeUndefined()
+
+  const { rerender } = render(
+    <>
+      <UsingA key="a" />
+      <UsingAB key="ab" />
+    </>,
+    { wrapper: storeRef.wrapper },
+  )
+  await waitFor(() => {
+    expect(getSubStateA()?.status).toBe(QueryStatus.fulfilled)
+    expect(getSubStateB()?.status).toBe(QueryStatus.fulfilled)
+  })
+
+  const statusA = getSubStateA()
+  const statusB = getSubStateB()
+
+  await act(async () => {
+    rerender(<UsingAB key="ab" />)
+    vi.advanceTimersByTime(10)
+    vi.runAllTimers()
+  })
+
+  await act(async () => {
+    vi.advanceTimersByTime(120000)
+    vi.runAllTimers()
+  })
+
+  expect(getSubStateA()).toEqual(statusA)
+  expect(getSubStateB()).toEqual(statusB)
+})
+
+test('Minimizes the number of subscription dispatches when multiple components ask for the same data', async () => {
+  const listenerMiddleware = createListenerMiddleware()
+  const storeRef = setupApiStore(api, undefined, {
+    middleware: {
+      concat: [listenerMiddleware.middleware],
+    },
+    withoutTestLifecycles: true,
+  })
+
+  const actionTypes: unknown[] = []
+
+  listenerMiddleware.startListening({
+    predicate: () => true,
+    effect: (action) => {
+      if (
+        action.type.includes('subscriptionsUpdated') ||
+        action.type.includes('internal_')
+      ) {
+        return
+      }
+
+      actionTypes.push(action.type)
+    },
+  })
+
+  const { getSubscriptionCount } = storeRef.store.dispatch(
+    api.internalActions.internal_getRTKQSubscriptions(),
+  ) as unknown as SubscriptionSelectors
+
+  const NUM_LIST_ITEMS = 1000
+
+  function ParentComponent() {
+    const listItems = Array.from({ length: NUM_LIST_ITEMS }).map((_, i) => (
+      <UsingA key={i} />
+    ))
+
+    return <>{listItems}</>
+  }
+
+  render(<ParentComponent />, {
+    wrapper: storeRef.wrapper,
+  })
+
+  await act(async () => {
+    vi.advanceTimersByTime(10)
+    vi.runAllTimers()
+  })
+
+  await waitFor(() => {
+    return screen.getAllByText(/42/).length > 0
+  })
+
+  expect(getSubscriptionCount('a(undefined)')).toBe(NUM_LIST_ITEMS)
+
+  expect(actionTypes).toEqual([
+    'api/config/middlewareRegistered',
+    'api/executeQuery/pending',
+    'api/executeQuery/fulfilled',
+  ])
+}, 25_000)
Index: node_modules/@reduxjs/toolkit/src/query/tests/copyWithStructuralSharing.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/copyWithStructuralSharing.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/copyWithStructuralSharing.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,88 @@
+import { copyWithStructuralSharing } from '@reduxjs/toolkit/query'
+
+test('equal object from JSON Object', () => {
+  const json = JSON.stringify({
+    a: { b: { c: { d: 1, e: '2', f: true }, g: false }, h: null },
+    i: null,
+  })
+  const objA = JSON.parse(json)
+  const objB = JSON.parse(json)
+  expect(objA).toStrictEqual(objB)
+  expect(objA).not.toBe(objB)
+  const newCopy = copyWithStructuralSharing(objA, objB)
+  expect(newCopy).toBe(objA)
+  expect(newCopy).not.toBe(objB)
+  expect(newCopy).toStrictEqual(objB)
+})
+
+test('equal object from JSON Object', () => {
+  const json = JSON.stringify({
+    a: { b: { c: { d: 1, e: '2', f: true }, g: false }, h: null },
+    i: null,
+  })
+  const objA = JSON.parse(json)
+  const objB = JSON.parse(json)
+  objB.a.h = 4
+  expect(objA).not.toStrictEqual(objB)
+  expect(objA).not.toBe(objB)
+  expect(objA.a.b).toStrictEqual(objB.a.b)
+  expect(objA.a.b).not.toBe(objB.a.b)
+
+  const newCopy = copyWithStructuralSharing(objA, objB)
+  expect(newCopy).not.toBe(objA)
+  expect(newCopy).not.toStrictEqual(objA)
+  expect(newCopy).toStrictEqual(objB)
+
+  expect(newCopy.a.b).toBe(objA.a.b)
+  expect(newCopy.a.b).not.toBe(objB.a.b)
+  expect(newCopy.a.b).toStrictEqual(objB.a.b)
+})
+
+test('equal object from JSON Array', () => {
+  const json = JSON.stringify([
+    1,
+    'a',
+    { 2: 'b' },
+    { 3: { 4: 'c' }, d: null },
+    null,
+    5,
+  ])
+  const objA = JSON.parse(json)
+  const objB = JSON.parse(json)
+
+  expect(objA).toStrictEqual(objB)
+  expect(objA).not.toBe(objB)
+  const newCopy = copyWithStructuralSharing(objA, objB)
+  expect(newCopy).toBe(objA)
+  expect(newCopy).not.toBe(objB)
+  expect(newCopy).toStrictEqual(objB)
+})
+
+test('equal object from JSON Array', () => {
+  const json = JSON.stringify([
+    1,
+    'a',
+    { 2: 'b' },
+    { 3: { 4: 'c' }, d: null },
+    null,
+    5,
+  ])
+  const objA = JSON.parse(json)
+  const objB = JSON.parse(json)
+  objB[2][2] = 'x'
+
+  expect(objA).not.toStrictEqual(objB)
+  expect(objA).not.toBe(objB)
+  const newCopy = copyWithStructuralSharing(objA, objB)
+  expect(newCopy).not.toBe(objA)
+  expect(newCopy).not.toBe(objB)
+  expect(newCopy).toStrictEqual(objB)
+
+  expect(newCopy[3]).toBe(objA[3])
+  expect(newCopy[3]).not.toBe(objB[3])
+  expect(newCopy[3]).toStrictEqual(objB[3])
+
+  expect(newCopy[2]).not.toBe(objA[2])
+  expect(newCopy[2]).not.toBe(objB[2])
+  expect(newCopy[2]).toStrictEqual(objB[2])
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/createApi.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/createApi.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/createApi.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,516 @@
+import { setupApiStore } from '@internal/tests/utils/helpers'
+import type { EntityState, SerializedError } from '@reduxjs/toolkit'
+import { configureStore, createEntityAdapter } from '@reduxjs/toolkit'
+import type {
+  DefinitionsFromApi,
+  FetchBaseQueryError,
+  FetchBaseQueryMeta,
+  MutationDefinition,
+  OverrideResultType,
+  QueryDefinition,
+  TagDescription,
+  TagTypesFromApi,
+} from '@reduxjs/toolkit/query'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+import * as v from 'valibot'
+import type { Post } from './mocks/handlers'
+
+describe('type tests', () => {
+  test('sensible defaults', () => {
+    const api = createApi({
+      baseQuery: fetchBaseQuery(),
+      endpoints: (build) => ({
+        getUser: build.query<unknown, void>({
+          query(id) {
+            return { url: `user/${id}` }
+          },
+        }),
+        updateUser: build.mutation<unknown, void>({
+          query: () => '',
+        }),
+      }),
+    })
+
+    configureStore({
+      reducer: {
+        [api.reducerPath]: api.reducer,
+      },
+      middleware: (gDM) => gDM().concat(api.middleware),
+    })
+
+    expectTypeOf(api.reducerPath).toEqualTypeOf<'api'>()
+
+    expectTypeOf(api.util.invalidateTags)
+      .parameter(0)
+      .toEqualTypeOf<(null | undefined | TagDescription<never>)[]>()
+  })
+
+  describe('endpoint definition typings', () => {
+    const api = createApi({
+      baseQuery: (from: 'From'): { data: 'To' } | Promise<{ data: 'To' }> => ({
+        data: 'To',
+      }),
+      endpoints: () => ({}),
+      tagTypes: ['typeA', 'typeB'],
+    })
+
+    test('query: query & transformResponse types', () => {
+      api.injectEndpoints({
+        endpoints: (build) => ({
+          query: build.query<'RetVal', 'Arg'>({
+            query: (x: 'Arg') => 'From' as const,
+            transformResponse(r: 'To') {
+              return 'RetVal' as const
+            },
+          }),
+          query1: build.query<'RetVal', 'Arg'>({
+            // @ts-expect-error
+            query: (x: 'Error') => 'From' as const,
+            transformResponse(r: 'To') {
+              return 'RetVal' as const
+            },
+          }),
+          query2: build.query<'RetVal', 'Arg'>({
+            // @ts-expect-error
+            query: (x: 'Arg') => 'Error' as const,
+            transformResponse(r: 'To') {
+              return 'RetVal' as const
+            },
+          }),
+          query3: build.query<'RetVal', 'Arg'>({
+            query: (x: 'Arg') => 'From' as const,
+            // @ts-expect-error
+            transformResponse(r: 'Error') {
+              return 'RetVal' as const
+            },
+          }),
+          query4: build.query<'RetVal', 'Arg'>({
+            query: (x: 'Arg') => 'From' as const,
+            // @ts-expect-error
+            transformResponse(r: 'To') {
+              return 'Error' as const
+            },
+          }),
+          queryInference1: build.query<'RetVal', 'Arg'>({
+            query: (x) => {
+              expectTypeOf(x).toEqualTypeOf<'Arg'>()
+
+              return 'From'
+            },
+            transformResponse(r) {
+              expectTypeOf(r).toEqualTypeOf<'To'>()
+
+              return 'RetVal'
+            },
+          }),
+          queryInference2: (() => {
+            const query = build.query({
+              query: (x: 'Arg') => 'From' as const,
+              transformResponse(r: 'To') {
+                return 'RetVal' as const
+              },
+            })
+
+            expectTypeOf(query).toMatchTypeOf<
+              QueryDefinition<'Arg', any, any, 'RetVal'>
+            >()
+
+            return query
+          })(),
+        }),
+      })
+    })
+
+    test('mutation: query & transformResponse types', () => {
+      api.injectEndpoints({
+        endpoints: (build) => ({
+          query: build.mutation<'RetVal', 'Arg'>({
+            query: (x: 'Arg') => 'From' as const,
+            transformResponse(r: 'To') {
+              return 'RetVal' as const
+            },
+          }),
+          query1: build.mutation<'RetVal', 'Arg'>({
+            // @ts-expect-error
+            query: (x: 'Error') => 'From' as const,
+            transformResponse(r: 'To') {
+              return 'RetVal' as const
+            },
+          }),
+          query2: build.mutation<'RetVal', 'Arg'>({
+            // @ts-expect-error
+            query: (x: 'Arg') => 'Error' as const,
+            transformResponse(r: 'To') {
+              return 'RetVal' as const
+            },
+          }),
+          query3: build.mutation<'RetVal', 'Arg'>({
+            query: (x: 'Arg') => 'From' as const,
+            // @ts-expect-error
+            transformResponse(r: 'Error') {
+              return 'RetVal' as const
+            },
+          }),
+          query4: build.mutation<'RetVal', 'Arg'>({
+            query: (x: 'Arg') => 'From' as const,
+            // @ts-expect-error
+            transformResponse(r: 'To') {
+              return 'Error' as const
+            },
+          }),
+          mutationInference1: build.mutation<'RetVal', 'Arg'>({
+            query: (x) => {
+              expectTypeOf(x).toEqualTypeOf<'Arg'>()
+
+              return 'From'
+            },
+            transformResponse(r) {
+              expectTypeOf(r).toEqualTypeOf<'To'>()
+
+              return 'RetVal'
+            },
+          }),
+          mutationInference2: (() => {
+            const query = build.mutation({
+              query: (x: 'Arg') => 'From' as const,
+              transformResponse(r: 'To') {
+                return 'RetVal' as const
+              },
+            })
+
+            expectTypeOf(query).toMatchTypeOf<
+              MutationDefinition<'Arg', any, any, 'RetVal'>
+            >()
+
+            return query
+          })(),
+        }),
+      })
+    })
+
+    describe('enhancing endpoint definitions', () => {
+      const baseQuery = (x: string) => ({ data: 'success' })
+
+      function getNewApi() {
+        return createApi({
+          baseQuery,
+          tagTypes: ['old'],
+          endpoints: (build) => ({
+            query1: build.query<'out1', 'in1'>({ query: (id) => `${id}` }),
+            query2: build.query<'out2', 'in2'>({ query: (id) => `${id}` }),
+            mutation1: build.mutation<'out1', 'in1'>({
+              query: (id) => `${id}`,
+            }),
+            mutation2: build.mutation<'out2', 'in2'>({
+              query: (id) => `${id}`,
+            }),
+          }),
+        })
+      }
+
+      const api1 = getNewApi()
+
+      test('warn on wrong tagType', () => {
+        const storeRef = setupApiStore(api1, undefined, {
+          withoutTestLifecycles: true,
+        })
+
+        api1.enhanceEndpoints({
+          endpoints: {
+            query1: {
+              // @ts-expect-error
+              providesTags: ['new'],
+            },
+            query2: {
+              // @ts-expect-error
+              providesTags: ['missing'],
+            },
+          },
+        })
+
+        const enhanced = api1.enhanceEndpoints({
+          addTagTypes: ['new'],
+          endpoints: {
+            query1: {
+              providesTags: ['new'],
+            },
+            query2: {
+              // @ts-expect-error
+              providesTags: ['missing'],
+            },
+          },
+        })
+
+        storeRef.store.dispatch(api1.endpoints.query1.initiate('in1'))
+
+        storeRef.store.dispatch(api1.endpoints.query2.initiate('in2'))
+
+        enhanced.enhanceEndpoints({
+          endpoints: {
+            query1: {
+              // returned `enhanced` api contains "new" entityType
+              providesTags: ['new'],
+            },
+            query2: {
+              // @ts-expect-error
+              providesTags: ['missing'],
+            },
+          },
+        })
+      })
+
+      test('modify', () => {
+        const storeRef = setupApiStore(api1, undefined, {
+          withoutTestLifecycles: true,
+        })
+
+        api1.enhanceEndpoints({
+          endpoints: {
+            query1: {
+              query: (x) => {
+                expectTypeOf(x).toEqualTypeOf<'in1'>()
+
+                return 'modified1'
+              },
+            },
+            query2(definition) {
+              definition.query = (x) => {
+                expectTypeOf(x).toEqualTypeOf<'in2'>()
+
+                return 'modified2'
+              }
+            },
+            mutation1: {
+              query: (x) => {
+                expectTypeOf(x).toEqualTypeOf<'in1'>()
+
+                return 'modified1'
+              },
+            },
+            mutation2(definition) {
+              definition.query = (x) => {
+                expectTypeOf(x).toEqualTypeOf<'in2'>()
+
+                return 'modified2'
+              }
+            },
+            // @ts-expect-error
+            nonExisting: {},
+          },
+        })
+
+        storeRef.store.dispatch(api1.endpoints.query1.initiate('in1'))
+        storeRef.store.dispatch(api1.endpoints.query2.initiate('in2'))
+        storeRef.store.dispatch(api1.endpoints.mutation1.initiate('in1'))
+        storeRef.store.dispatch(api1.endpoints.mutation2.initiate('in2'))
+      })
+
+      test('updated transform response types', async () => {
+        const baseApi = createApi({
+          baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+          tagTypes: ['old'],
+          endpoints: (build) => ({
+            query1: build.query<'out1', void>({ query: () => 'success' }),
+            mutation1: build.mutation<'out1', void>({ query: () => 'success' }),
+          }),
+        })
+
+        type Transformed = { value: string }
+
+        type Definitions = DefinitionsFromApi<typeof api1>
+
+        type TagTypes = TagTypesFromApi<typeof api1>
+
+        type Q1Definition = OverrideResultType<
+          Definitions['query1'],
+          Transformed
+        >
+
+        type M1Definition = OverrideResultType<
+          Definitions['mutation1'],
+          Transformed
+        >
+
+        type UpdatedDefinitions = Omit<Definitions, 'query1' | 'mutation1'> & {
+          query1: Q1Definition
+          mutation1: M1Definition
+        }
+
+        const enhancedApi = baseApi.enhanceEndpoints<
+          TagTypes,
+          UpdatedDefinitions
+        >({
+          endpoints: {
+            query1: {
+              transformResponse: (a, b, c) => ({
+                value: 'transformed',
+              }),
+            },
+            mutation1: {
+              transformResponse: (a, b, c) => ({
+                value: 'transformed',
+              }),
+            },
+          },
+        })
+
+        const storeRef = setupApiStore(enhancedApi, undefined, {
+          withoutTestLifecycles: true,
+        })
+
+        const queryResponse = await storeRef.store.dispatch(
+          enhancedApi.endpoints.query1.initiate(),
+        )
+
+        expectTypeOf(queryResponse.data).toMatchTypeOf<
+          Transformed | undefined
+        >()
+
+        const mutationResponse = await storeRef.store.dispatch(
+          enhancedApi.endpoints.mutation1.initiate(),
+        )
+
+        expectTypeOf(mutationResponse).toMatchTypeOf<
+          | { data: Transformed }
+          | { error: FetchBaseQueryError | SerializedError }
+        >()
+      })
+    })
+    describe('endpoint schemas', () => {
+      const argSchema = v.object({ id: v.number() })
+      const postSchema = v.object({
+        id: v.number(),
+        title: v.string(),
+        body: v.string(),
+      }) satisfies v.GenericSchema<Post>
+      const errorResponseSchema = v.object({
+        status: v.number(),
+        data: v.unknown(),
+      }) satisfies v.GenericSchema<FetchBaseQueryError>
+      const metaSchema = v.object({
+        request: v.instance(Request),
+        response: v.optional(v.instance(Response)),
+      }) satisfies v.GenericSchema<FetchBaseQueryMeta>
+      test('schemas must match', () => {
+        createApi({
+          baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+          endpoints: (build) => ({
+            query: build.query<Post, { id: number }>({
+              query: ({ id }) => `/post/${id}`,
+              argSchema,
+              responseSchema: postSchema,
+              errorResponseSchema,
+              metaSchema,
+            }),
+            bothMismatch: build.query<Post, { id: number }>({
+              query: ({ id }) => `/post/${id}`,
+              // @ts-expect-error wrong schema
+              argSchema: v.object({ id: v.string() }),
+              // @ts-expect-error wrong schema
+              responseSchema: v.object({ id: v.string() }),
+              // @ts-expect-error wrong schema
+              errorResponseSchema: v.object({ status: v.string() }),
+              // @ts-expect-error wrong schema
+              metaSchema: v.object({ request: v.string() }),
+            }),
+            inputMismatch: build.query<Post, { id: number }>({
+              query: ({ id }) => `/post/${id}`,
+              // @ts-expect-error can't expect different input
+              argSchema: v.object({
+                id: v.pipe(v.string(), v.transform(Number), v.number()),
+              }),
+              // @ts-expect-error can't expect different input
+              responseSchema: v.object({
+                ...postSchema.entries,
+                id: v.pipe(v.string(), v.transform(Number)),
+              }) satisfies v.GenericSchema<any, Post>,
+              // @ts-expect-error can't expect different input
+              errorResponseSchema: v.object({
+                ...errorResponseSchema.entries,
+                status: v.pipe(v.string(), v.transform(Number)),
+              }) satisfies v.GenericSchema<any, FetchBaseQueryError>,
+              // @ts-expect-error can't expect different input
+              metaSchema: v.object({
+                ...metaSchema.entries,
+                request: v.pipe(
+                  v.string(),
+                  v.transform((url) => new Request(url)),
+                ),
+              }) satisfies v.GenericSchema<any, FetchBaseQueryMeta>,
+            }),
+            outputMismatch: build.query<Post, { id: number }>({
+              query: ({ id }) => `/post/${id}`,
+              // @ts-expect-error can't provide different output
+              argSchema: v.object({
+                id: v.pipe(v.number(), v.transform(String)),
+              }),
+              // @ts-expect-error can't provide different output
+              responseSchema: v.object({
+                ...postSchema.entries,
+                id: v.pipe(v.number(), v.transform(String)),
+              }) satisfies v.GenericSchema<Post, any>,
+              // @ts-expect-error can't provide different output
+              errorResponseSchema: v.object({
+                ...errorResponseSchema.entries,
+                status: v.pipe(v.number(), v.transform(String)),
+              }) satisfies v.GenericSchema<FetchBaseQueryError, any>,
+              // @ts-expect-error can't provide different output
+              metaSchema: v.object({
+                ...metaSchema.entries,
+                request: v.pipe(
+                  v.instance(Request),
+                  v.transform((r) => r.url),
+                ),
+              }) satisfies v.GenericSchema<FetchBaseQueryMeta, any>,
+            }),
+          }),
+        })
+      })
+      test('schemas as a source of inference', () => {
+        const postAdapter = createEntityAdapter<Post>()
+        const api = createApi({
+          baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+          endpoints: (build) => ({
+            query: build.query({
+              query: ({ id }: { id: number }) => `/post/${id}`,
+              responseSchema: postSchema,
+            }),
+            query2: build.query({
+              query: (arg) => {
+                expectTypeOf(arg).toEqualTypeOf<{ id: number }>()
+                return `/post/${arg.id}`
+              },
+              argSchema,
+              responseSchema: postSchema,
+            }),
+            query3: build.query({
+              query: (_arg: void) => `/posts`,
+              rawResponseSchema: v.array(postSchema),
+              transformResponse: (posts) => {
+                expectTypeOf(posts).toEqualTypeOf<Post[]>()
+                return postAdapter.getInitialState(undefined, posts)
+              },
+            }),
+          }),
+        })
+
+        expectTypeOf(api.endpoints.query.Types.QueryArg).toEqualTypeOf<{
+          id: number
+        }>()
+        expectTypeOf(api.endpoints.query.Types.ResultType).toEqualTypeOf<Post>()
+
+        expectTypeOf(api.endpoints.query2.Types.QueryArg).toEqualTypeOf<{
+          id: number
+        }>()
+        expectTypeOf(
+          api.endpoints.query2.Types.ResultType,
+        ).toEqualTypeOf<Post>()
+
+        expectTypeOf(api.endpoints.query3.Types.QueryArg).toEqualTypeOf<void>()
+        expectTypeOf(api.endpoints.query3.Types.ResultType).toEqualTypeOf<
+          EntityState<Post, Post['id']>
+        >()
+      })
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/createApi.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/createApi.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/createApi.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1933 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import { server } from '@internal/query/tests/mocks/server'
+import {
+  getSerializedHeaders,
+  setupApiStore,
+} from '@internal/tests/utils/helpers'
+import type { SerializedError } from '@reduxjs/toolkit'
+import { configureStore, createAction, createReducer } from '@reduxjs/toolkit'
+import type {
+  DefinitionsFromApi,
+  FetchBaseQueryError,
+  FetchBaseQueryMeta,
+  OverrideResultType,
+  SchemaFailureConverter,
+  SerializeQueryArgs,
+  TagTypesFromApi,
+} from '@reduxjs/toolkit/query'
+import {
+  createApi,
+  fetchBaseQuery,
+  NamedSchemaError,
+} from '@reduxjs/toolkit/query'
+import { HttpResponse, delay, http } from 'msw'
+import nodeFetch from 'node-fetch'
+import * as v from 'valibot'
+import type { SchemaFailureHandler } from '../endpointDefinitions'
+
+beforeAll(() => {
+  vi.stubEnv('NODE_ENV', 'development')
+
+  return vi.unstubAllEnvs
+})
+
+const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+afterEach(() => {
+  vi.clearAllMocks()
+  server.resetHandlers()
+})
+
+afterAll(() => {
+  vi.restoreAllMocks()
+})
+
+function paginate<T>(array: T[], page_size: number, page_number: number) {
+  // human-readable page numbers usually start with 1, so we reduce 1 in the first argument
+  return array.slice((page_number - 1) * page_size, page_number * page_size)
+}
+
+test('sensible defaults', () => {
+  const api = createApi({
+    baseQuery: fetchBaseQuery(),
+    endpoints: (build) => ({
+      getUser: build.query<unknown, void>({
+        query(id) {
+          return { url: `user/${id}` }
+        },
+      }),
+      updateUser: build.mutation<unknown, void>({
+        query: () => '',
+      }),
+    }),
+  })
+  configureStore({
+    reducer: {
+      [api.reducerPath]: api.reducer,
+    },
+    middleware: (gDM) => gDM().concat(api.middleware),
+  })
+  expect(api.reducerPath).toBe('api')
+
+  expect(api.endpoints.getUser.name).toBe('getUser')
+  expect(api.endpoints.updateUser.name).toBe('updateUser')
+})
+
+describe('wrong tagTypes log errors', () => {
+  const baseQuery = vi.fn()
+  const api = createApi({
+    baseQuery,
+    tagTypes: ['User'],
+    endpoints: (build) => ({
+      provideNothing: build.query<unknown, void>({
+        query: () => '',
+      }),
+      provideTypeString: build.query<unknown, void>({
+        query: () => '',
+        providesTags: ['User'],
+      }),
+      provideTypeWithId: build.query<unknown, void>({
+        query: () => '',
+        providesTags: [{ type: 'User', id: 5 }],
+      }),
+      provideTypeWithIdAndCallback: build.query<unknown, void>({
+        query: () => '',
+        providesTags: () => [{ type: 'User', id: 5 }],
+      }),
+      provideWrongTypeString: build.query<unknown, void>({
+        query: () => '',
+        // @ts-expect-error
+        providesTags: ['Users'],
+      }),
+      provideWrongTypeWithId: build.query<unknown, void>({
+        query: () => '',
+        // @ts-expect-error
+        providesTags: [{ type: 'Users', id: 5 }],
+      }),
+      provideWrongTypeWithIdAndCallback: build.query<unknown, void>({
+        query: () => '',
+        // @ts-expect-error
+        providesTags: () => [{ type: 'Users', id: 5 }],
+      }),
+      invalidateNothing: build.query<unknown, void>({
+        query: () => '',
+      }),
+      invalidateTypeString: build.mutation<unknown, void>({
+        query: () => '',
+        invalidatesTags: ['User'],
+      }),
+      invalidateTypeWithId: build.mutation<unknown, void>({
+        query: () => '',
+        invalidatesTags: [{ type: 'User', id: 5 }],
+      }),
+      invalidateTypeWithIdAndCallback: build.mutation<unknown, void>({
+        query: () => '',
+        invalidatesTags: () => [{ type: 'User', id: 5 }],
+      }),
+
+      invalidateWrongTypeString: build.mutation<unknown, void>({
+        query: () => '',
+        // @ts-expect-error
+        invalidatesTags: ['Users'],
+      }),
+      invalidateWrongTypeWithId: build.mutation<unknown, void>({
+        query: () => '',
+        // @ts-expect-error
+        invalidatesTags: [{ type: 'Users', id: 5 }],
+      }),
+      invalidateWrongTypeWithIdAndCallback: build.mutation<unknown, void>({
+        query: () => '',
+        // @ts-expect-error
+        invalidatesTags: () => [{ type: 'Users', id: 5 }],
+      }),
+    }),
+  })
+  const store = configureStore({
+    reducer: {
+      [api.reducerPath]: api.reducer,
+    },
+    middleware: (gDM) => gDM().concat(api.middleware),
+  })
+
+  beforeEach(() => {
+    baseQuery.mockResolvedValue({ data: 'foo' })
+  })
+
+  test.each<[keyof typeof api.endpoints, boolean?]>([
+    ['provideNothing', false],
+    ['provideTypeString', false],
+    ['provideTypeWithId', false],
+    ['provideTypeWithIdAndCallback', false],
+    ['provideWrongTypeString', true],
+    ['provideWrongTypeWithId', true],
+    ['provideWrongTypeWithIdAndCallback', true],
+    ['invalidateNothing', false],
+    ['invalidateTypeString', false],
+    ['invalidateTypeWithId', false],
+    ['invalidateTypeWithIdAndCallback', false],
+    ['invalidateWrongTypeString', true],
+    ['invalidateWrongTypeWithId', true],
+    ['invalidateWrongTypeWithIdAndCallback', true],
+  ])(`endpoint %s should log an error? %s`, async (endpoint, shouldError) => {
+    vi.stubEnv('NODE_ENV', 'development')
+
+    // @ts-ignore
+    store.dispatch(api.endpoints[endpoint].initiate())
+    let result: { status: string }
+    do {
+      await delay(5)
+      // @ts-ignore
+      result = api.endpoints[endpoint].select()(store.getState())
+    } while (result.status === 'pending')
+
+    if (shouldError) {
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        "Tag type 'Users' was used, but not specified in `tagTypes`!",
+      )
+    } else {
+      expect(consoleErrorSpy).not.toHaveBeenCalled()
+    }
+  })
+})
+
+describe('endpoint definition typings', () => {
+  const api = createApi({
+    baseQuery: (from: 'From'): { data: 'To' } | Promise<{ data: 'To' }> => ({
+      data: 'To',
+    }),
+    endpoints: () => ({}),
+    tagTypes: ['typeA', 'typeB'],
+  })
+  test('query: query & transformResponse types', () => {
+    api.injectEndpoints({
+      endpoints: (build) => ({
+        query: build.query<'RetVal', 'Arg'>({
+          query: (x: 'Arg') => 'From' as const,
+          transformResponse(r: 'To') {
+            return 'RetVal' as const
+          },
+        }),
+        query1: build.query<'RetVal', 'Arg'>({
+          // @ts-expect-error
+          query: (x: 'Error') => 'From' as const,
+          transformResponse(r: 'To') {
+            return 'RetVal' as const
+          },
+        }),
+        query2: build.query<'RetVal', 'Arg'>({
+          // @ts-expect-error
+          query: (x: 'Arg') => 'Error' as const,
+          transformResponse(r: 'To') {
+            return 'RetVal' as const
+          },
+        }),
+        query3: build.query<'RetVal', 'Arg'>({
+          query: (x: 'Arg') => 'From' as const,
+          // @ts-expect-error
+          transformResponse(r: 'Error') {
+            return 'RetVal' as const
+          },
+        }),
+        query4: build.query<'RetVal', 'Arg'>({
+          query: (x: 'Arg') => 'From' as const,
+          // @ts-expect-error
+          transformResponse(r: 'To') {
+            return 'Error' as const
+          },
+        }),
+        queryInference1: build.query<'RetVal', 'Arg'>({
+          query: (x) => {
+            return 'From'
+          },
+          transformResponse(r) {
+            return 'RetVal'
+          },
+        }),
+        queryInference2: (() => {
+          const query = build.query({
+            query: (x: 'Arg') => 'From' as const,
+            transformResponse(r: 'To') {
+              return 'RetVal' as const
+            },
+          })
+          return query
+        })(),
+      }),
+    })
+  })
+  test('mutation: query & transformResponse types', () => {
+    api.injectEndpoints({
+      endpoints: (build) => ({
+        query: build.mutation<'RetVal', 'Arg'>({
+          query: (x: 'Arg') => 'From' as const,
+          transformResponse(r: 'To') {
+            return 'RetVal' as const
+          },
+        }),
+        query1: build.mutation<'RetVal', 'Arg'>({
+          // @ts-expect-error
+          query: (x: 'Error') => 'From' as const,
+          transformResponse(r: 'To') {
+            return 'RetVal' as const
+          },
+        }),
+        query2: build.mutation<'RetVal', 'Arg'>({
+          // @ts-expect-error
+          query: (x: 'Arg') => 'Error' as const,
+          transformResponse(r: 'To') {
+            return 'RetVal' as const
+          },
+        }),
+        query3: build.mutation<'RetVal', 'Arg'>({
+          query: (x: 'Arg') => 'From' as const,
+          // @ts-expect-error
+          transformResponse(r: 'Error') {
+            return 'RetVal' as const
+          },
+        }),
+        query4: build.mutation<'RetVal', 'Arg'>({
+          query: (x: 'Arg') => 'From' as const,
+          // @ts-expect-error
+          transformResponse(r: 'To') {
+            return 'Error' as const
+          },
+        }),
+        mutationInference1: build.mutation<'RetVal', 'Arg'>({
+          query: (x) => {
+            return 'From'
+          },
+          transformResponse(r) {
+            return 'RetVal'
+          },
+        }),
+        mutationInference2: (() => {
+          const query = build.mutation({
+            query: (x: 'Arg') => 'From' as const,
+            transformResponse(r: 'To') {
+              return 'RetVal' as const
+            },
+          })
+          return query
+        })(),
+      }),
+    })
+  })
+
+  describe('enhancing endpoint definitions', () => {
+    const baseQuery = vi.fn((x: string) => ({ data: 'success' }))
+    const commonBaseQueryApi = {
+      dispatch: expect.any(Function),
+      endpoint: expect.any(String),
+      abort: expect.any(Function),
+      extra: undefined,
+      forced: expect.any(Boolean),
+      getState: expect.any(Function),
+      signal: expect.any(Object),
+      type: expect.any(String),
+      queryCacheKey: expect.any(String),
+    }
+    beforeEach(() => {
+      baseQuery.mockClear()
+    })
+    function getNewApi() {
+      return createApi({
+        baseQuery,
+        tagTypes: ['old'],
+        endpoints: (build) => ({
+          query1: build.query<'out1', 'in1'>({ query: (id) => `${id}` }),
+          query2: build.query<'out2', 'in2'>({ query: (id) => `${id}` }),
+          mutation1: build.mutation<'out1', 'in1'>({ query: (id) => `${id}` }),
+          mutation2: build.mutation<'out2', 'in2'>({ query: (id) => `${id}` }),
+        }),
+      })
+    }
+    let api = getNewApi()
+    beforeEach(() => {
+      api = getNewApi()
+    })
+
+    test('pre-modification behavior', async () => {
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      storeRef.store.dispatch(api.endpoints.query1.initiate('in1'))
+      storeRef.store.dispatch(api.endpoints.query2.initiate('in2'))
+      storeRef.store.dispatch(api.endpoints.mutation1.initiate('in1'))
+      storeRef.store.dispatch(api.endpoints.mutation2.initiate('in2'))
+
+      expect(baseQuery.mock.calls).toEqual([
+        [
+          'in1',
+          {
+            dispatch: expect.any(Function),
+            endpoint: expect.any(String),
+            getState: expect.any(Function),
+            signal: expect.any(Object),
+            abort: expect.any(Function),
+            forced: expect.any(Boolean),
+            type: expect.any(String),
+            queryCacheKey: expect.any(String),
+          },
+          undefined,
+        ],
+        [
+          'in2',
+          {
+            dispatch: expect.any(Function),
+            endpoint: expect.any(String),
+            getState: expect.any(Function),
+            signal: expect.any(Object),
+            abort: expect.any(Function),
+            forced: expect.any(Boolean),
+            type: expect.any(String),
+            queryCacheKey: expect.any(String),
+          },
+          undefined,
+        ],
+        [
+          'in1',
+          {
+            dispatch: expect.any(Function),
+            endpoint: expect.any(String),
+            getState: expect.any(Function),
+            signal: expect.any(Object),
+            abort: expect.any(Function),
+            // forced: undefined,
+            type: expect.any(String),
+          },
+          undefined,
+        ],
+        [
+          'in2',
+          {
+            dispatch: expect.any(Function),
+            endpoint: expect.any(String),
+            getState: expect.any(Function),
+            signal: expect.any(Object),
+            abort: expect.any(Function),
+            // forced: undefined,
+            type: expect.any(String),
+          },
+          undefined,
+        ],
+      ])
+    })
+
+    test('warn on wrong tagType', async () => {
+      vi.stubEnv('NODE_ENV', 'development')
+
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      // only type-test this part
+      if (2 > 1) {
+        api.enhanceEndpoints({
+          endpoints: {
+            query1: {
+              // @ts-expect-error
+              providesTags: ['new'],
+            },
+            query2: {
+              // @ts-expect-error
+              providesTags: ['missing'],
+            },
+          },
+        })
+      }
+
+      const enhanced = api.enhanceEndpoints({
+        addTagTypes: ['new'],
+        endpoints: {
+          query1: {
+            providesTags: ['new'],
+          },
+          query2: {
+            // @ts-expect-error
+            providesTags: ['missing'],
+          },
+        },
+      })
+
+      storeRef.store.dispatch(api.endpoints.query1.initiate('in1'))
+      await delay(1)
+      expect(consoleErrorSpy).not.toHaveBeenCalled()
+
+      storeRef.store.dispatch(api.endpoints.query2.initiate('in2'))
+      await delay(1)
+
+      expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        "Tag type 'missing' was used, but not specified in `tagTypes`!",
+      )
+
+      // only type-test this part
+      if (2 > 1) {
+        enhanced.enhanceEndpoints({
+          endpoints: {
+            query1: {
+              // returned `enhanced` api contains "new" enitityType
+              providesTags: ['new'],
+            },
+            query2: {
+              // @ts-expect-error
+              providesTags: ['missing'],
+            },
+          },
+        })
+      }
+    })
+
+    test('modify', () => {
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      api.enhanceEndpoints({
+        endpoints: {
+          query1: {
+            query: (x) => {
+              return 'modified1'
+            },
+          },
+          query2(definition) {
+            definition.query = (x) => {
+              return 'modified2'
+            }
+          },
+          mutation1: {
+            query: (x) => {
+              return 'modified1'
+            },
+          },
+          mutation2(definition) {
+            definition.query = (x) => {
+              return 'modified2'
+            }
+          },
+          // @ts-expect-error
+          nonExisting: {},
+        },
+      })
+
+      storeRef.store.dispatch(api.endpoints.query1.initiate('in1'))
+      storeRef.store.dispatch(api.endpoints.query2.initiate('in2'))
+      storeRef.store.dispatch(api.endpoints.mutation1.initiate('in1'))
+      storeRef.store.dispatch(api.endpoints.mutation2.initiate('in2'))
+
+      expect(baseQuery.mock.calls).toEqual([
+        ['modified1', commonBaseQueryApi, undefined],
+        ['modified2', commonBaseQueryApi, undefined],
+        [
+          'modified1',
+          {
+            ...commonBaseQueryApi,
+            forced: undefined,
+            queryCacheKey: undefined,
+          },
+          undefined,
+        ],
+        [
+          'modified2',
+          {
+            ...commonBaseQueryApi,
+            forced: undefined,
+            queryCacheKey: undefined,
+          },
+          undefined,
+        ],
+      ])
+    })
+
+    test('updated transform response types', async () => {
+      const baseApi = createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+        tagTypes: ['old'],
+        endpoints: (build) => ({
+          query1: build.query<'out1', void>({ query: () => 'success' }),
+          mutation1: build.mutation<'out1', void>({ query: () => 'success' }),
+        }),
+      })
+
+      type Transformed = { value: string }
+
+      type Definitions = DefinitionsFromApi<typeof api>
+      type TagTypes = TagTypesFromApi<typeof api>
+
+      type Q1Definition = OverrideResultType<Definitions['query1'], Transformed>
+      type M1Definition = OverrideResultType<
+        Definitions['mutation1'],
+        Transformed
+      >
+
+      type UpdatedDefitions = Omit<Definitions, 'query1' | 'mutation1'> & {
+        query1: Q1Definition
+        mutation1: M1Definition
+      }
+
+      const enhancedApi = baseApi.enhanceEndpoints<TagTypes, UpdatedDefitions>({
+        endpoints: {
+          query1: {
+            transformResponse: (a, b, c) => ({
+              value: 'transformed',
+            }),
+          },
+          mutation1: {
+            transformResponse: (a, b, c) => ({
+              value: 'transformed',
+            }),
+          },
+        },
+      })
+
+      const storeRef = setupApiStore(enhancedApi, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const queryResponse = await storeRef.store.dispatch(
+        enhancedApi.endpoints.query1.initiate(),
+      )
+      expect(queryResponse.data).toEqual({ value: 'transformed' })
+
+      const mutationResponse = await storeRef.store.dispatch(
+        enhancedApi.endpoints.mutation1.initiate(),
+      )
+      expect('data' in mutationResponse && mutationResponse.data).toEqual({
+        value: 'transformed',
+      })
+    })
+  })
+})
+
+describe('additional transformResponse behaviors', () => {
+  type SuccessResponse = { value: 'success' }
+  type EchoResponseData = { banana: 'bread' }
+  type ErrorResponse = { value: 'error' }
+  const api = createApi({
+    baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+    endpoints: (build) => ({
+      echo: build.mutation({
+        query: () => ({ method: 'PUT', url: '/echo' }),
+      }),
+      mutation: build.mutation({
+        query: () => ({
+          url: '/echo',
+          method: 'POST',
+          body: { nested: { banana: 'bread' } },
+        }),
+        transformResponse: (response: { body: { nested: EchoResponseData } }) =>
+          response.body.nested,
+      }),
+      mutationWithError: build.mutation({
+        query: () => ({
+          url: '/error',
+          method: 'POST',
+        }),
+        transformErrorResponse: (response) => {
+          const data = response.data as ErrorResponse
+          return data.value
+        },
+      }),
+      mutationWithMeta: build.mutation({
+        query: () => ({
+          url: '/echo',
+          method: 'POST',
+          body: { nested: { banana: 'bread' } },
+        }),
+        transformResponse: (
+          response: { body: { nested: EchoResponseData } },
+          meta,
+        ) => {
+          return {
+            ...response.body.nested,
+            meta: {
+              request: { headers: getSerializedHeaders(meta?.request.headers) },
+              response: {
+                headers: getSerializedHeaders(meta?.response?.headers),
+              },
+            },
+          }
+        },
+      }),
+      query: build.query<SuccessResponse & EchoResponseData, void>({
+        query: () => '/success',
+        transformResponse: async (response: SuccessResponse) => {
+          const res: any = await nodeFetch('https://example.com/echo', {
+            method: 'POST',
+            body: JSON.stringify({ banana: 'bread' }),
+          }).then((res) => res.json())
+
+          const additionalData = res.body as EchoResponseData
+          return { ...response, ...additionalData }
+        },
+      }),
+      queryWithMeta: build.query<SuccessResponse, void>({
+        query: () => '/success',
+        transformResponse: async (response: SuccessResponse, meta) => {
+          return {
+            ...response,
+            meta: {
+              request: { headers: getSerializedHeaders(meta?.request.headers) },
+              response: {
+                headers: getSerializedHeaders(meta?.response?.headers),
+              },
+            },
+          }
+        },
+      }),
+    }),
+  })
+
+  const storeRef = setupApiStore(api)
+
+  test('transformResponse handles an async transformation and returns the merged data (query)', async () => {
+    const result = await storeRef.store.dispatch(api.endpoints.query.initiate())
+
+    expect(result.data).toEqual({ value: 'success', banana: 'bread' })
+  })
+
+  test('transformResponse transforms a response from a mutation', async () => {
+    const result = await storeRef.store.dispatch(
+      api.endpoints.mutation.initiate({}),
+    )
+
+    expect('data' in result && result.data).toEqual({ banana: 'bread' })
+  })
+
+  test('transformResponse transforms a response from a mutation with an error', async () => {
+    const result = await storeRef.store.dispatch(
+      api.endpoints.mutationWithError.initiate({}),
+    )
+
+    expect('error' in result && result.error).toEqual('error')
+  })
+
+  test('transformResponse can inject baseQuery meta into the end result from a mutation', async () => {
+    const result = await storeRef.store.dispatch(
+      api.endpoints.mutationWithMeta.initiate({}),
+    )
+
+    expect('data' in result && result.data).toEqual({
+      banana: 'bread',
+      meta: {
+        request: {
+          headers: {
+            'content-type': 'application/json',
+          },
+        },
+        response: {
+          headers: {
+            'content-type': 'application/json',
+          },
+        },
+      },
+    })
+  })
+
+  test('transformResponse can inject baseQuery meta into the end result from a query', async () => {
+    const result = await storeRef.store.dispatch(
+      api.endpoints.queryWithMeta.initiate(),
+    )
+
+    expect(result.data).toEqual({
+      value: 'success',
+      meta: {
+        request: {
+          headers: {},
+        },
+        response: {
+          headers: {
+            'content-type': 'application/json',
+          },
+        },
+      },
+    })
+  })
+})
+
+describe('query endpoint lifecycles - onStart, onSuccess, onError', () => {
+  const initialState = {
+    count: null as null | number,
+  }
+  const setCount = createAction<number>('setCount')
+  const testReducer = createReducer(initialState, (builder) => {
+    builder.addCase(setCount, (state, action) => {
+      state.count = action.payload
+    })
+  })
+
+  type SuccessResponse = { value: 'success' }
+  const api = createApi({
+    baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+    endpoints: (build) => ({
+      echo: build.mutation({
+        query: () => ({ method: 'PUT', url: '/echo' }),
+      }),
+      query: build.query<SuccessResponse, void>({
+        query: () => '/success',
+        async onQueryStarted(_, api) {
+          api.dispatch(setCount(0))
+          try {
+            await api.queryFulfilled
+            api.dispatch(setCount(1))
+          } catch {
+            api.dispatch(setCount(-1))
+          }
+        },
+      }),
+      mutation: build.mutation<SuccessResponse, void>({
+        query: () => ({ url: '/success', method: 'POST' }),
+        async onQueryStarted(_, api) {
+          api.dispatch(setCount(0))
+          try {
+            await api.queryFulfilled
+            api.dispatch(setCount(1))
+          } catch {
+            api.dispatch(setCount(-1))
+          }
+        },
+      }),
+    }),
+  })
+
+  const storeRef = setupApiStore(api, { testReducer })
+
+  test('query lifecycle events fire properly', async () => {
+    // We intentionally fail the first request so we can test all lifecycles
+    server.use(
+      http.get(
+        'https://example.com/success',
+        () => HttpResponse.json({ value: 'failed' }, { status: 500 }),
+        { once: true },
+      ),
+    )
+
+    expect(storeRef.store.getState().testReducer.count).toBe(null)
+    const failAttempt = storeRef.store.dispatch(api.endpoints.query.initiate())
+    expect(storeRef.store.getState().testReducer.count).toBe(0)
+    await failAttempt
+    await delay(10)
+    expect(storeRef.store.getState().testReducer.count).toBe(-1)
+
+    const successAttempt = storeRef.store.dispatch(
+      api.endpoints.query.initiate(),
+    )
+    expect(storeRef.store.getState().testReducer.count).toBe(0)
+    await successAttempt
+    await delay(10)
+    expect(storeRef.store.getState().testReducer.count).toBe(1)
+  })
+
+  test('mutation lifecycle events fire properly', async () => {
+    // We intentionally fail the first request so we can test all lifecycles
+    server.use(
+      http.post(
+        'https://example.com/success',
+        () => HttpResponse.json({ value: 'failed' }, { status: 500 }),
+        { once: true },
+      ),
+    )
+
+    expect(storeRef.store.getState().testReducer.count).toBe(null)
+    const failAttempt = storeRef.store.dispatch(
+      api.endpoints.mutation.initiate(),
+    )
+    expect(storeRef.store.getState().testReducer.count).toBe(0)
+    await failAttempt
+    expect(storeRef.store.getState().testReducer.count).toBe(-1)
+
+    const successAttempt = storeRef.store.dispatch(
+      api.endpoints.mutation.initiate(),
+    )
+    expect(storeRef.store.getState().testReducer.count).toBe(0)
+    await successAttempt
+    expect(storeRef.store.getState().testReducer.count).toBe(1)
+  })
+})
+
+test('providesTags and invalidatesTags can use baseQueryMeta', async () => {
+  let _meta: FetchBaseQueryMeta | undefined
+
+  type SuccessResponse = { value: 'success' }
+
+  const api = createApi({
+    baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+    tagTypes: ['success'],
+    endpoints: (build) => ({
+      query: build.query<SuccessResponse, void>({
+        query: () => '/success',
+        providesTags: (_result, _error, _arg, meta) => {
+          _meta = meta
+          return ['success']
+        },
+      }),
+      mutation: build.mutation<SuccessResponse, void>({
+        query: () => ({ url: '/success', method: 'POST' }),
+        invalidatesTags: (_result, _error, _arg, meta) => {
+          _meta = meta
+          return ['success']
+        },
+      }),
+    }),
+  })
+
+  const storeRef = setupApiStore(api, undefined, {
+    withoutTestLifecycles: true,
+  })
+
+  await storeRef.store.dispatch(api.endpoints.query.initiate())
+  expect('request' in _meta! && 'response' in _meta!).toBe(true)
+
+  _meta = undefined
+
+  await storeRef.store.dispatch(api.endpoints.mutation.initiate())
+
+  expect('request' in _meta! && 'response' in _meta!).toBe(true)
+})
+
+describe('structuralSharing flag behaviors', () => {
+  type SuccessResponse = { value: 'success' }
+
+  const api = createApi({
+    baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+    tagTypes: ['success'],
+    endpoints: (build) => ({
+      enabled: build.query<SuccessResponse, void>({
+        query: () => '/success',
+      }),
+      disabled: build.query<SuccessResponse, void>({
+        query: () => ({ url: '/success' }),
+        structuralSharing: false,
+      }),
+    }),
+  })
+
+  const storeRef = setupApiStore(api)
+
+  it('enables structural sharing for query endpoints by default', async () => {
+    await storeRef.store.dispatch(api.endpoints.enabled.initiate())
+    const firstRef = api.endpoints.enabled.select()(storeRef.store.getState())
+
+    await storeRef.store.dispatch(
+      api.endpoints.enabled.initiate(undefined, { forceRefetch: true }),
+    )
+
+    const secondRef = api.endpoints.enabled.select()(storeRef.store.getState())
+
+    expect(firstRef.requestId).not.toEqual(secondRef.requestId)
+    expect(firstRef.data === secondRef.data).toBeTruthy()
+  })
+
+  it('allows a query endpoint to opt-out of structural sharing', async () => {
+    await storeRef.store.dispatch(api.endpoints.disabled.initiate())
+    const firstRef = api.endpoints.disabled.select()(storeRef.store.getState())
+
+    await storeRef.store.dispatch(
+      api.endpoints.disabled.initiate(undefined, { forceRefetch: true }),
+    )
+
+    const secondRef = api.endpoints.disabled.select()(storeRef.store.getState())
+
+    expect(firstRef.requestId).not.toEqual(secondRef.requestId)
+    expect(firstRef.data === secondRef.data).toBeFalsy()
+  })
+})
+
+describe('custom serializeQueryArgs per endpoint', () => {
+  const customArgsSerializer: SerializeQueryArgs<number> = ({
+    endpointName,
+    queryArgs,
+  }) => `${endpointName}-${queryArgs}`
+
+  type SuccessResponse = { value: 'success' }
+
+  const serializer1 = vi.fn(customArgsSerializer)
+
+  interface MyApiClient {
+    fetchPost: (id: string) => Promise<SuccessResponse>
+  }
+
+  const dummyClient: MyApiClient = {
+    async fetchPost() {
+      return { value: 'success' }
+    },
+  }
+
+  const api = createApi({
+    baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+    serializeQueryArgs: ({ endpointName, queryArgs }) =>
+      `base-${endpointName}-${queryArgs}`,
+    endpoints: (build) => ({
+      queryWithNoSerializer: build.query<SuccessResponse, number>({
+        query: (arg) => `${arg}`,
+      }),
+      queryWithCustomSerializer: build.query<SuccessResponse, number>({
+        query: (arg) => `${arg}`,
+        serializeQueryArgs: serializer1,
+      }),
+      queryWithCustomObjectSerializer: build.query<
+        SuccessResponse,
+        { id: number; client: MyApiClient }
+      >({
+        query: (arg) => `${arg.id}`,
+        serializeQueryArgs: ({
+          endpointDefinition,
+          endpointName,
+          queryArgs,
+        }) => {
+          const { id } = queryArgs
+          return { id }
+        },
+      }),
+      queryWithCustomNumberSerializer: build.query<
+        SuccessResponse,
+        { id: number; client: MyApiClient }
+      >({
+        query: (arg) => `${arg.id}`,
+        serializeQueryArgs: ({
+          endpointDefinition,
+          endpointName,
+          queryArgs,
+        }) => {
+          const { id } = queryArgs
+          return id
+        },
+      }),
+      listItems: build.query<string[], number>({
+        query: (pageNumber) => `/listItems?page=${pageNumber}`,
+        serializeQueryArgs: ({ endpointName }) => {
+          return endpointName
+        },
+        merge: (currentCache, newItems) => {
+          currentCache.push(...newItems)
+        },
+        forceRefetch({ currentArg, previousArg }) {
+          return currentArg !== previousArg
+        },
+      }),
+      listItems2: build.query<{ items: string[]; meta?: any }, number>({
+        query: (pageNumber) => `/listItems2?page=${pageNumber}`,
+        serializeQueryArgs: ({ endpointName }) => {
+          return endpointName
+        },
+        transformResponse(items: string[]) {
+          return { items }
+        },
+        merge: (currentCache, newData, meta) => {
+          currentCache.items.push(...newData.items)
+          currentCache.meta = meta
+        },
+        forceRefetch({ currentArg, previousArg }) {
+          return currentArg !== previousArg
+        },
+      }),
+    }),
+  })
+
+  const storeRef = setupApiStore(api)
+
+  it('Works via createApi', async () => {
+    await storeRef.store.dispatch(
+      api.endpoints.queryWithNoSerializer.initiate(99),
+    )
+
+    expect(serializer1).not.toHaveBeenCalled()
+
+    await storeRef.store.dispatch(
+      api.endpoints.queryWithCustomSerializer.initiate(42),
+    )
+
+    expect(serializer1).toHaveBeenCalled()
+
+    expect(
+      storeRef.store.getState().api.queries['base-queryWithNoSerializer-99'],
+    ).toBeTruthy()
+
+    expect(
+      storeRef.store.getState().api.queries['queryWithCustomSerializer-42'],
+    ).toBeTruthy()
+  })
+
+  const serializer2 = vi.fn(customArgsSerializer)
+
+  const injectedApi = api.injectEndpoints({
+    endpoints: (build) => ({
+      injectedQueryWithCustomSerializer: build.query<SuccessResponse, number>({
+        query: (arg) => `${arg}`,
+        serializeQueryArgs: serializer2,
+      }),
+    }),
+  })
+
+  it('Works via injectEndpoints', async () => {
+    expect(serializer2).not.toHaveBeenCalled()
+
+    await storeRef.store.dispatch(
+      injectedApi.endpoints.injectedQueryWithCustomSerializer.initiate(5),
+    )
+
+    expect(serializer2).toHaveBeenCalled()
+    expect(
+      storeRef.store.getState().api.queries[
+        'injectedQueryWithCustomSerializer-5'
+      ],
+    ).toBeTruthy()
+  })
+
+  test('Serializes a returned object for query args', async () => {
+    await storeRef.store.dispatch(
+      api.endpoints.queryWithCustomObjectSerializer.initiate({
+        id: 42,
+        client: dummyClient,
+      }),
+    )
+
+    expect(
+      storeRef.store.getState().api.queries[
+        'queryWithCustomObjectSerializer({"id":42})'
+      ],
+    ).toBeTruthy()
+  })
+
+  test('Serializes a returned primitive for query args', async () => {
+    await storeRef.store.dispatch(
+      api.endpoints.queryWithCustomNumberSerializer.initiate({
+        id: 42,
+        client: dummyClient,
+      }),
+    )
+
+    expect(
+      storeRef.store.getState().api.queries[
+        'queryWithCustomNumberSerializer(42)'
+      ],
+    ).toBeTruthy()
+  })
+
+  test('serializeQueryArgs + merge allows refetching as args change with same cache key', async () => {
+    const allItems = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'i']
+    const PAGE_SIZE = 3
+
+    server.use(
+      http.get('https://example.com/listItems', ({ request }) => {
+        const url = new URL(request.url)
+        const pageString = url.searchParams.get('page')
+        const pageNum = parseInt(pageString || '0')
+
+        const results = paginate(allItems, PAGE_SIZE, pageNum)
+        return HttpResponse.json(results)
+      }),
+    )
+
+    // Page number shouldn't matter here, because the cache key ignores that.
+    // We just need to select the only cache entry.
+    const selectListItems = api.endpoints.listItems.select(0)
+
+    await storeRef.store.dispatch(api.endpoints.listItems.initiate(1))
+
+    const initialEntry = selectListItems(storeRef.store.getState())
+    expect(initialEntry.data).toEqual(['a', 'b', 'c'])
+
+    await storeRef.store.dispatch(api.endpoints.listItems.initiate(2))
+    const updatedEntry = selectListItems(storeRef.store.getState())
+    expect(updatedEntry.data).toEqual(['a', 'b', 'c', 'd', 'e', 'f'])
+  })
+
+  test('merge receives a meta object as an argument', async () => {
+    const allItems = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'i']
+    const PAGE_SIZE = 3
+
+    server.use(
+      http.get('https://example.com/listItems2', ({ request }) => {
+        const url = new URL(request.url)
+        const pageString = url.searchParams.get('page')
+        const pageNum = parseInt(pageString || '0')
+
+        const results = paginate(allItems, PAGE_SIZE, pageNum)
+        return HttpResponse.json(results)
+      }),
+    )
+
+    const selectListItems = api.endpoints.listItems2.select(0)
+
+    await storeRef.store.dispatch(api.endpoints.listItems2.initiate(1))
+    await storeRef.store.dispatch(api.endpoints.listItems2.initiate(2))
+    const cacheEntry = selectListItems(storeRef.store.getState())
+
+    // Should have passed along the third arg from `merge` containing these fields
+    expect(cacheEntry.data?.meta).toEqual({
+      requestId: expect.any(String),
+      fulfilledTimeStamp: expect.any(Number),
+      arg: 2,
+      baseQueryMeta: expect.any(Object),
+    })
+  })
+})
+
+describe('timeout behavior', () => {
+  test('triggers TIMEOUT_ERROR', async () => {
+    const api = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com', timeout: 5 }),
+      endpoints: (build) => ({
+        query: build.query<unknown, void>({
+          query: () => '/success',
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    server.use(
+      http.get(
+        'https://example.com/success',
+        async () => {
+          await delay(50)
+          return HttpResponse.json({ value: 'failed' }, { status: 500 })
+        },
+        { once: true },
+      ),
+    )
+
+    const result = await storeRef.store.dispatch(api.endpoints.query.initiate())
+
+    expect(result?.error).toEqual({
+      status: 'TIMEOUT_ERROR',
+      error: expect.stringMatching(/^AbortError:/),
+    })
+  })
+})
+
+describe('endpoint schemas', () => {
+  const schemaConverter: SchemaFailureConverter<
+    ReturnType<typeof fetchBaseQuery>
+  > = (error) => {
+    return {
+      status: 'CUSTOM_ERROR',
+      error: error.schemaName + ' failed validation',
+      data: error.issues,
+    }
+  }
+
+  const serializedSchemaError = {
+    name: 'SchemaError',
+    message: expect.any(String),
+    stack: expect.any(String),
+  } satisfies SerializedError
+
+  const onSchemaFailureGlobal = vi.fn<Parameters<SchemaFailureHandler>>()
+  const onSchemaFailureEndpoint = vi.fn<Parameters<SchemaFailureHandler>>()
+  afterEach(() => {
+    onSchemaFailureGlobal.mockClear()
+    onSchemaFailureEndpoint.mockClear()
+  })
+
+  function expectFailureHandlersToHaveBeenCalled({
+    schemaName,
+    value,
+    arg,
+  }: {
+    schemaName: string
+    value: unknown
+    arg: unknown
+  }) {
+    for (const handler of [onSchemaFailureGlobal, onSchemaFailureEndpoint]) {
+      expect(handler).toHaveBeenCalledOnce()
+      const [namedError, info] = handler.mock.calls[0]
+      expect(namedError).toBeInstanceOf(NamedSchemaError)
+      expect(namedError.issues.length).toBeGreaterThan(0)
+      expect(namedError.value).toEqual(value)
+      expect(namedError.schemaName).toBe(schemaName)
+      expect(info.endpoint).toBe('query')
+      expect(info.type).toBe('query')
+      expect(info.arg).toEqual(arg)
+    }
+  }
+
+  describe('argSchema', () => {
+    const makeApi = ({
+      globalSkip,
+      endpointSkip,
+      globalCatch,
+      endpointCatch,
+    }: {
+      globalSkip?: boolean
+      endpointSkip?: boolean
+      globalCatch?: boolean
+      endpointCatch?: boolean
+    } = {}) =>
+      createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+        onSchemaFailure: onSchemaFailureGlobal,
+        skipSchemaValidation: globalSkip,
+        catchSchemaFailure: globalCatch ? schemaConverter : undefined,
+        endpoints: (build) => ({
+          query: build.query<unknown, { id: number }>({
+            query: ({ id }) => `/post/${id}`,
+            argSchema: v.object({ id: v.number() }),
+            onSchemaFailure: onSchemaFailureEndpoint,
+            skipSchemaValidation: endpointSkip,
+            catchSchemaFailure: endpointCatch ? schemaConverter : undefined,
+          }),
+        }),
+      })
+    test("can be used to validate the endpoint's arguments", async () => {
+      const api = makeApi()
+
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate({ id: 1 }),
+      )
+
+      expect(result?.error).toBeUndefined()
+
+      const invalidResult = await storeRef.store.dispatch(
+        // @ts-expect-error
+        api.endpoints.query.initiate({ id: '1' }),
+      )
+
+      expect(invalidResult?.error).toEqual(serializedSchemaError)
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'argSchema',
+        value: { id: '1' },
+        arg: { id: '1' },
+      })
+    })
+    test('can be skipped globally', async () => {
+      const api = makeApi({ globalSkip: true })
+
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const result = await storeRef.store.dispatch(
+        // @ts-expect-error
+        api.endpoints.query.initiate({ id: '1' }),
+      )
+
+      expect(result?.error).toBeUndefined()
+    })
+    test('can be skipped on the endpoint', async () => {
+      const api = makeApi({ endpointSkip: true })
+
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const result = await storeRef.store.dispatch(
+        // @ts-expect-error
+        api.endpoints.query.initiate({ id: '1' }),
+      )
+
+      expect(result?.error).toBeUndefined()
+    })
+    // we only need to test this once
+    test('endpoint overrides global skip', async () => {
+      const api = makeApi({ globalSkip: true, endpointSkip: false })
+
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const result = await storeRef.store.dispatch(
+        // @ts-expect-error
+        api.endpoints.query.initiate({ id: '1' }),
+      )
+
+      expect(result?.error).toEqual(serializedSchemaError)
+    })
+
+    test('can be converted to a standard error object at global level', async () => {
+      const api = makeApi({ globalCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const result = await storeRef.store.dispatch(
+        // @ts-expect-error
+        api.endpoints.query.initiate({ id: '1' }),
+      )
+
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'argSchema failed validation',
+        data: expect.any(Array),
+      })
+
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'argSchema',
+        value: { id: '1' },
+        arg: { id: '1' },
+      })
+    })
+    test('can be converted to a standard error object at endpoint level', async () => {
+      const api = makeApi({ endpointCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+
+      const result = await storeRef.store.dispatch(
+        // @ts-expect-error
+        api.endpoints.query.initiate({ id: '1' }),
+      )
+
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'argSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'argSchema',
+        value: { id: '1' },
+        arg: { id: '1' },
+      })
+    })
+  })
+  describe('rawResponseSchema', () => {
+    const makeApi = ({
+      globalSkip,
+      endpointSkip,
+      globalCatch,
+      endpointCatch,
+    }: {
+      globalSkip?: boolean
+      endpointSkip?: boolean
+      globalCatch?: boolean
+      endpointCatch?: boolean
+    } = {}) =>
+      createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+        onSchemaFailure: onSchemaFailureGlobal,
+        catchSchemaFailure: globalCatch ? schemaConverter : undefined,
+        skipSchemaValidation: globalSkip,
+        endpoints: (build) => ({
+          query: build.query<{ success: boolean }, void>({
+            query: () => '/success',
+            rawResponseSchema: v.object({ value: v.literal('success!') }),
+            onSchemaFailure: onSchemaFailureEndpoint,
+            catchSchemaFailure: endpointCatch ? schemaConverter : undefined,
+            skipSchemaValidation: endpointSkip,
+          }),
+        }),
+      })
+    test("can be used to validate the endpoint's raw result", async () => {
+      const api = makeApi()
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual(serializedSchemaError)
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'rawResponseSchema',
+        value: { value: 'success' },
+        arg: undefined,
+      })
+    })
+    test('can be skipped globally', async () => {
+      const api = makeApi({ globalSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toBeUndefined()
+    })
+    test('can be skipped on the endpoint', async () => {
+      const api = makeApi({ endpointSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toBeUndefined()
+    })
+    test('can be converted to a standard error object at global level', async () => {
+      const api = makeApi({ globalCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'rawResponseSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'rawResponseSchema',
+        value: { value: 'success' },
+        arg: undefined,
+      })
+    })
+    test('can be converted to a standard error object at endpoint level', async () => {
+      const api = makeApi({ endpointCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'rawResponseSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'rawResponseSchema',
+        value: { value: 'success' },
+        arg: undefined,
+      })
+    })
+  })
+  describe('responseSchema', () => {
+    const makeApi = ({
+      globalSkip,
+      endpointSkip,
+      globalCatch,
+      endpointCatch,
+    }: {
+      globalSkip?: boolean
+      endpointSkip?: boolean
+      globalCatch?: boolean
+      endpointCatch?: boolean
+    } = {}) =>
+      createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+        onSchemaFailure: onSchemaFailureGlobal,
+        catchSchemaFailure: globalCatch ? schemaConverter : undefined,
+        skipSchemaValidation: globalSkip,
+        endpoints: (build) => ({
+          query: build.query<{ success: boolean }, void>({
+            query: () => '/success',
+            transformResponse: () => ({ success: false }),
+            responseSchema: v.object({ success: v.literal(true) }),
+            onSchemaFailure: onSchemaFailureEndpoint,
+            catchSchemaFailure: endpointCatch ? schemaConverter : undefined,
+            skipSchemaValidation: endpointSkip,
+          }),
+        }),
+      })
+    test("can be used to validate the endpoint's final result", async () => {
+      const api = makeApi()
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual(serializedSchemaError)
+
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'responseSchema',
+        value: { success: false },
+        arg: undefined,
+      })
+    })
+    test('can be skipped globally', async () => {
+      const api = makeApi({ globalSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toBeUndefined()
+    })
+    test('can be skipped on the endpoint', async () => {
+      const api = makeApi({ endpointSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toBeUndefined()
+    })
+    test('can be converted to a standard error object at global level', async () => {
+      const api = makeApi({ globalCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'responseSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'responseSchema',
+        value: { success: false },
+        arg: undefined,
+      })
+    })
+    test('can be converted to a standard error object at endpoint level', async () => {
+      const api = makeApi({ endpointCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'responseSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'responseSchema',
+        value: { success: false },
+        arg: undefined,
+      })
+    })
+  })
+  describe('rawErrorResponseSchema', () => {
+    const makeApi = ({
+      globalSkip,
+      endpointSkip,
+      globalCatch,
+      endpointCatch,
+    }: {
+      globalSkip?: boolean
+      endpointSkip?: boolean
+      globalCatch?: boolean
+      endpointCatch?: boolean
+    } = {}) =>
+      createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+        onSchemaFailure: onSchemaFailureGlobal,
+        catchSchemaFailure: globalCatch ? schemaConverter : undefined,
+        skipSchemaValidation: globalSkip,
+        endpoints: (build) => ({
+          query: build.query<{ success: boolean }, void>({
+            query: () => '/error',
+            rawErrorResponseSchema: v.object({
+              status: v.pipe(v.number(), v.minValue(400), v.maxValue(499)),
+              data: v.unknown(),
+            }),
+            onSchemaFailure: onSchemaFailureEndpoint,
+            catchSchemaFailure: endpointCatch ? schemaConverter : undefined,
+            skipSchemaValidation: endpointSkip,
+          }),
+        }),
+      })
+    test("can be used to validate the endpoint's raw error result", async () => {
+      const api = makeApi()
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual(serializedSchemaError)
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'rawErrorResponseSchema',
+        value: { status: 500, data: { value: 'error' } },
+        arg: undefined,
+      })
+    })
+    test('can be skipped globally', async () => {
+      const api = makeApi({ globalSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).not.toEqual(serializedSchemaError)
+    })
+    test('can be skipped on the endpoint', async () => {
+      const api = makeApi({ endpointSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).not.toEqual(serializedSchemaError)
+    })
+    test('can be converted to a standard error object at global level', async () => {
+      const api = makeApi({ globalCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'rawErrorResponseSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'rawErrorResponseSchema',
+        value: { status: 500, data: { value: 'error' } },
+        arg: undefined,
+      })
+    })
+    test('can be converted to a standard error object at endpoint level', async () => {
+      const api = makeApi({ endpointCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'rawErrorResponseSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'rawErrorResponseSchema',
+        value: { status: 500, data: { value: 'error' } },
+        arg: undefined,
+      })
+    })
+  })
+  describe('errorResponseSchema', () => {
+    const makeApi = ({
+      globalSkip,
+      endpointSkip,
+      globalCatch,
+      endpointCatch,
+    }: {
+      globalSkip?: boolean
+      endpointSkip?: boolean
+      globalCatch?: boolean
+      endpointCatch?: boolean
+    } = {}) =>
+      createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+        onSchemaFailure: onSchemaFailureGlobal,
+        catchSchemaFailure: globalCatch ? schemaConverter : undefined,
+        skipSchemaValidation: globalSkip,
+        endpoints: (build) => ({
+          query: build.query<{ success: boolean }, void>({
+            query: () => '/error',
+            transformErrorResponse: (error): FetchBaseQueryError => ({
+              status: 'CUSTOM_ERROR',
+              data: error,
+              error: 'whoops',
+            }),
+            errorResponseSchema: v.object({
+              status: v.literal('CUSTOM_ERROR'),
+              error: v.literal('oh no'),
+              data: v.unknown(),
+            }),
+            onSchemaFailure: onSchemaFailureEndpoint,
+            catchSchemaFailure: endpointCatch ? schemaConverter : undefined,
+            skipSchemaValidation: endpointSkip,
+          }),
+        }),
+      })
+    test("can be used to validate the endpoint's final error result", async () => {
+      const api = makeApi()
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual(serializedSchemaError)
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'errorResponseSchema',
+        value: {
+          status: 'CUSTOM_ERROR',
+          error: 'whoops',
+          data: { status: 500, data: { value: 'error' } },
+        },
+        arg: undefined,
+      })
+    })
+    test('can be skipped globally', async () => {
+      const api = makeApi({ globalSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).not.toEqual(serializedSchemaError)
+    })
+    test('can be skipped on the endpoint', async () => {
+      const api = makeApi({ endpointSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).not.toEqual(serializedSchemaError)
+    })
+    test('can be converted to a standard error object at global level', async () => {
+      const api = makeApi({ globalCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'errorResponseSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'errorResponseSchema',
+        value: {
+          status: 'CUSTOM_ERROR',
+          error: 'whoops',
+          data: { status: 500, data: { value: 'error' } },
+        },
+        arg: undefined,
+      })
+    })
+    test('can be converted to a standard error object at endpoint level', async () => {
+      const api = makeApi({ endpointCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'errorResponseSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'errorResponseSchema',
+        value: {
+          status: 'CUSTOM_ERROR',
+          error: 'whoops',
+          data: { status: 500, data: { value: 'error' } },
+        },
+        arg: undefined,
+      })
+    })
+  })
+  describe('metaSchema', () => {
+    const makeApi = ({
+      globalSkip,
+      endpointSkip,
+      globalCatch,
+      endpointCatch,
+    }: {
+      globalSkip?: boolean
+      endpointSkip?: boolean
+      globalCatch?: boolean
+      endpointCatch?: boolean
+    } = {}) =>
+      createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+        onSchemaFailure: onSchemaFailureGlobal,
+        catchSchemaFailure: globalCatch ? schemaConverter : undefined,
+        skipSchemaValidation: globalSkip,
+        endpoints: (build) => ({
+          query: build.query<{ success: boolean }, void>({
+            query: () => '/success',
+            metaSchema: v.object({
+              request: v.instance(Request),
+              response: v.instance(Response),
+              timestamp: v.number(),
+            }),
+            onSchemaFailure: onSchemaFailureEndpoint,
+            catchSchemaFailure: endpointCatch ? schemaConverter : undefined,
+            skipSchemaValidation: endpointSkip,
+          }),
+        }),
+      })
+    test("can be used to validate the endpoint's meta result", async () => {
+      const api = makeApi()
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual(serializedSchemaError)
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'metaSchema',
+        value: {
+          request: expect.any(Request),
+          response: expect.any(Response),
+        },
+        arg: undefined,
+      })
+    })
+    test('can be skipped globally', async () => {
+      const api = makeApi({ globalSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toBeUndefined()
+    })
+    test('can be skipped on the endpoint', async () => {
+      const api = makeApi({ endpointSkip: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toBeUndefined()
+    })
+    test('can be converted to a standard error object at global level', async () => {
+      const api = makeApi({ globalCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'metaSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'metaSchema',
+        value: {
+          request: expect.any(Request),
+          response: expect.any(Response),
+        },
+        arg: undefined,
+      })
+    })
+    test('can be converted to a standard error object at endpoint level', async () => {
+      const api = makeApi({ endpointCatch: true })
+      const storeRef = setupApiStore(api, undefined, {
+        withoutTestLifecycles: true,
+      })
+      const result = await storeRef.store.dispatch(
+        api.endpoints.query.initiate(),
+      )
+      expect(result?.error).toEqual({
+        status: 'CUSTOM_ERROR',
+        error: 'metaSchema failed validation',
+        data: expect.any(Array),
+      })
+      expectFailureHandlersToHaveBeenCalled({
+        schemaName: 'metaSchema',
+        value: {
+          request: expect.any(Request),
+          response: expect.any(Response),
+        },
+        arg: undefined,
+      })
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/defaultSerializeQueryArgs.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/defaultSerializeQueryArgs.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/defaultSerializeQueryArgs.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,122 @@
+import { defaultSerializeQueryArgs } from '@internal/query/defaultSerializeQueryArgs'
+
+const endpointDefinition: any = {}
+const endpointName = 'test'
+
+test('string arg', () => {
+  expect(
+    defaultSerializeQueryArgs({
+      endpointDefinition,
+      endpointName,
+      queryArgs: 'arg',
+    }),
+  ).toMatchInlineSnapshot(`"test("arg")"`)
+})
+
+test('number arg', () => {
+  expect(
+    defaultSerializeQueryArgs({
+      endpointDefinition,
+      endpointName,
+      queryArgs: 5,
+    }),
+  ).toMatchInlineSnapshot(`"test(5)"`)
+})
+
+test('bigint arg has non-default serialization (intead of throwing)', () => {
+  expect(
+    defaultSerializeQueryArgs({
+      endpointDefinition,
+      endpointName,
+      queryArgs: BigInt(10),
+    }),
+  ).toMatchInlineSnapshot(`"test({"$bigint":"10"})"`)
+})
+
+test('simple object arg is sorted', () => {
+  expect(
+    defaultSerializeQueryArgs({
+      endpointDefinition,
+      endpointName,
+      queryArgs: { name: 'arg', age: 5 },
+    }),
+  ).toMatchInlineSnapshot(`"test({"age":5,"name":"arg"})"`)
+})
+
+test('nested object arg is sorted recursively', () => {
+  expect(
+    defaultSerializeQueryArgs({
+      endpointDefinition,
+      endpointName,
+      queryArgs: { name: { last: 'Split', first: 'Banana' }, age: 5 },
+    }),
+  ).toMatchInlineSnapshot(
+    `"test({"age":5,"name":{"first":"Banana","last":"Split"}})"`,
+  )
+})
+
+test('Fully serializes a deeply nested object', () => {
+  const nestedObj = {
+    a: {
+      a1: {
+        a11: {
+          a111: 1,
+        },
+      },
+    },
+    b: {
+      b2: {
+        b21: 3,
+      },
+      b1: {
+        b11: 2,
+      },
+    },
+  }
+
+  const res = defaultSerializeQueryArgs({
+    endpointDefinition,
+    endpointName,
+    queryArgs: nestedObj,
+  })
+  expect(res).toMatchInlineSnapshot(
+    `"test({"a":{"a1":{"a11":{"a111":1}}},"b":{"b1":{"b11":2},"b2":{"b21":3}}})"`,
+  )
+})
+
+test('Caches results for plain objects', () => {
+  const testData = Array.from({ length: 10000 }).map((_, i) => {
+    return {
+      albumId: i,
+      id: i,
+      title: 'accusamus beatae ad facilis cum similique qui sunt',
+      url: 'https://via.placeholder.com/600/92c952',
+      thumbnailUrl: 'https://via.placeholder.com/150/92c952',
+    }
+  })
+
+  const data = {
+    testData,
+  }
+
+  const runWithTimer = (data: any) => {
+    const start = Date.now()
+    const res = defaultSerializeQueryArgs({
+      endpointDefinition,
+      endpointName,
+      queryArgs: data,
+    })
+    const end = Date.now()
+    const duration = end - start
+    return [res, duration] as const
+  }
+
+  const [res1, time1] = runWithTimer(data)
+  const [res2, time2] = runWithTimer(data)
+
+  expect(res1).toBe(res2)
+  expect(time2).toBeLessThanOrEqual(time1)
+  // Locally, stringifying 10K items takes 25-30ms.
+  // Assuming the WeakMap cache hit, this _should_ be 0
+  expect(time2).toBeLessThan(2)
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/devWarnings.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/devWarnings.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/devWarnings.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,552 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import { configureStore } from '@reduxjs/toolkit'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+
+const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(noop)
+
+const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+beforeEach(() => {
+  vi.stubEnv('NODE_ENV', 'development')
+})
+
+afterEach(() => {
+  vi.unstubAllEnvs()
+  vi.clearAllMocks()
+})
+
+afterAll(() => {
+  vi.restoreAllMocks()
+  vi.unstubAllEnvs()
+})
+
+const baseUrl = 'https://example.com'
+
+function createApis() {
+  const api1 = createApi({
+    baseQuery: fetchBaseQuery({ baseUrl }),
+    endpoints: (builder) => ({
+      q1: builder.query({ query: () => '/success' }),
+    }),
+  })
+
+  const api1_2 = createApi({
+    baseQuery: fetchBaseQuery({ baseUrl }),
+    endpoints: (builder) => ({
+      q1: builder.query({ query: () => '/success' }),
+    }),
+  })
+
+  const api2 = createApi({
+    reducerPath: 'api2',
+    baseQuery: fetchBaseQuery({ baseUrl }),
+    endpoints: (builder) => ({
+      q1: builder.query({ query: () => '/success' }),
+    }),
+  })
+  return [api1, api1_2, api2] as const
+}
+
+let [api1, api1_2, api2] = createApis()
+beforeEach(() => {
+  ;[api1, api1_2, api2] = createApis()
+})
+
+const reMatchMissingMiddlewareError =
+  /Warning: Middleware for RTK-Query API at reducerPath "api" has not been added to the store/
+
+describe('missing middleware', () => {
+  test.each([
+    ['development', true],
+    ['production', false],
+  ])('%s warns if middleware is missing: %s', (env, shouldWarn) => {
+    vi.stubEnv('NODE_ENV', env)
+
+    const store = configureStore({
+      reducer: { [api1.reducerPath]: api1.reducer },
+    })
+    const doDispatch = () => {
+      store.dispatch(api1.endpoints.q1.initiate(undefined))
+    }
+    if (shouldWarn) {
+      expect(doDispatch).toThrowError(reMatchMissingMiddlewareError)
+    } else {
+      expect(doDispatch).not.toThrowError()
+    }
+  })
+
+  test('does not warn if middleware is not missing', () => {
+    const store = configureStore({
+      reducer: { [api1.reducerPath]: api1.reducer },
+      middleware: (gdm) => gdm().concat(api1.middleware),
+    })
+    store.dispatch(api1.endpoints.q1.initiate(undefined))
+
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+  })
+
+  test('warns only once per api', () => {
+    const store = configureStore({
+      reducer: { [api1.reducerPath]: api1.reducer },
+    })
+    const doDispatch = () => {
+      store.dispatch(api1.endpoints.q1.initiate(undefined))
+    }
+
+    expect(doDispatch).toThrowError(reMatchMissingMiddlewareError)
+    expect(doDispatch).not.toThrowError()
+  })
+
+  test('warns multiple times for multiple apis', () => {
+    const store = configureStore({
+      reducer: {
+        [api1.reducerPath]: api1.reducer,
+        [api2.reducerPath]: api2.reducer,
+      },
+    })
+    const doDispatch1 = () => {
+      store.dispatch(api1.endpoints.q1.initiate(undefined))
+    }
+    const doDispatch2 = () => {
+      store.dispatch(api2.endpoints.q1.initiate(undefined))
+    }
+    expect(doDispatch1).toThrowError(reMatchMissingMiddlewareError)
+    expect(doDispatch2).toThrowError(
+      /Warning: Middleware for RTK-Query API at reducerPath "api2" has not been added to the store/,
+    )
+  })
+})
+
+describe('missing reducer', () => {
+  describe.each([
+    ['development', true],
+    ['production', false],
+  ])('%s warns if reducer is missing: %s', (env, shouldWarn) => {
+    beforeEach(() => {
+      vi.stubEnv('NODE_ENV', env)
+    })
+
+    afterAll(() => {
+      vi.unstubAllEnvs()
+    })
+
+    test('middleware not crashing if reducer is missing', async () => {
+      const store = configureStore({
+        reducer: { x: () => 0 },
+        // @ts-expect-error
+        middleware: (gdm) => gdm().concat(api1.middleware),
+      })
+      await store.dispatch(api1.endpoints.q1.initiate(undefined))
+
+      expect(process.env.NODE_ENV).toBe(env)
+    })
+
+    test(`warning behavior`, () => {
+      const store = configureStore({
+        reducer: { x: () => 0 },
+        // @ts-expect-error
+        middleware: (gdm) => gdm().concat(api1.middleware),
+      })
+      // @ts-expect-error
+      api1.endpoints.q1.select(undefined)(store.getState())
+
+      expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+      expect(process.env.NODE_ENV).toBe(env)
+
+      if (shouldWarn) {
+        expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+        expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+          'Error: No data found at `state.api`. Did you forget to add the reducer to the store?',
+        )
+      } else {
+        expect(consoleErrorSpy).not.toHaveBeenCalled()
+      }
+    })
+  })
+
+  test('does not warn if reducer is not missing', () => {
+    const store = configureStore({
+      reducer: { [api1.reducerPath]: api1.reducer },
+      middleware: (gdm) => gdm().concat(api1.middleware),
+    })
+    api1.endpoints.q1.select(undefined)(store.getState())
+
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+  })
+
+  test('warns only once per api', () => {
+    const store = configureStore({
+      reducer: { x: () => 0 },
+      // @ts-expect-error
+      middleware: (gdm) => gdm().concat(api1.middleware),
+    })
+    // @ts-expect-error
+    api1.endpoints.q1.select(undefined)(store.getState())
+    // @ts-expect-error
+    api1.endpoints.q1.select(undefined)(store.getState())
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      'Error: No data found at `state.api`. Did you forget to add the reducer to the store?',
+    )
+  })
+
+  test('warns multiple times for multiple apis', () => {
+    const store = configureStore({
+      reducer: { x: () => 0 },
+      // @ts-expect-error
+      middleware: (gdm) => gdm().concat(api1.middleware),
+    })
+    // @ts-expect-error
+    api1.endpoints.q1.select(undefined)(store.getState())
+    // @ts-expect-error
+    api2.endpoints.q1.select(undefined)(store.getState())
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+    expect(consoleErrorSpy).toHaveBeenCalledTimes(2)
+
+    expect(consoleErrorSpy).toHaveBeenNthCalledWith(
+      1,
+      'Error: No data found at `state.api`. Did you forget to add the reducer to the store?',
+    )
+
+    expect(consoleErrorSpy).toHaveBeenNthCalledWith(
+      2,
+      'Error: No data found at `state.api2`. Did you forget to add the reducer to the store?',
+    )
+  })
+})
+
+test('warns for reducer and also throws error if everything is missing', async () => {
+  const store = configureStore({
+    reducer: { x: () => 0 },
+  })
+  // @ts-expect-error
+  api1.endpoints.q1.select(undefined)(store.getState())
+  const doDispatch = () => {
+    store.dispatch(api1.endpoints.q1.initiate(undefined))
+  }
+  expect(doDispatch).toThrowError(reMatchMissingMiddlewareError)
+
+  expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+  expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+  expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+    'Error: No data found at `state.api`. Did you forget to add the reducer to the store?',
+  )
+})
+
+describe('warns on multiple apis using the same `reducerPath`', () => {
+  test('common: two apis, same order', async () => {
+    const store = configureStore({
+      reducer: {
+        // TS 5.3 now errors on identical object keys. We want to force that behavior.
+        // @ts-ignore
+        [api1.reducerPath]: api1.reducer,
+        // @ts-ignore
+        [api1_2.reducerPath]: api1_2.reducer,
+      },
+      middleware: (gDM) => gDM().concat(api1.middleware, api1_2.middleware),
+    })
+    await store.dispatch(api1.endpoints.q1.initiate(undefined))
+
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+
+    expect(consoleWarnSpy).toHaveBeenCalledOnce()
+
+    // only second api prints
+    expect(consoleWarnSpy).toHaveBeenLastCalledWith(
+      `There is a mismatch between slice and middleware for the reducerPath "api".
+You can only have one api per reducer path, this will lead to crashes in various situations!
+If you have multiple apis, you *have* to specify the reducerPath option when using createApi!`,
+    )
+  })
+
+  test('common: two apis, opposing order', async () => {
+    const store = configureStore({
+      reducer: {
+        // @ts-ignore
+        [api1.reducerPath]: api1.reducer,
+        // @ts-ignore
+        [api1_2.reducerPath]: api1_2.reducer,
+      },
+      middleware: (gDM) => gDM().concat(api1_2.middleware, api1.middleware),
+    })
+    await store.dispatch(api1.endpoints.q1.initiate(undefined))
+
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+
+    expect(consoleWarnSpy).toHaveBeenCalledTimes(2)
+
+    // both apis print
+    expect(consoleWarnSpy).toHaveBeenNthCalledWith(
+      1,
+      `There is a mismatch between slice and middleware for the reducerPath "api".
+You can only have one api per reducer path, this will lead to crashes in various situations!
+If you have multiple apis, you *have* to specify the reducerPath option when using createApi!`,
+    )
+
+    expect(consoleWarnSpy).toHaveBeenNthCalledWith(
+      2,
+      `There is a mismatch between slice and middleware for the reducerPath "api".
+You can only have one api per reducer path, this will lead to crashes in various situations!
+If you have multiple apis, you *have* to specify the reducerPath option when using createApi!`,
+    )
+  })
+
+  test('common: two apis, only first middleware', async () => {
+    const store = configureStore({
+      reducer: {
+        // @ts-ignore
+        [api1.reducerPath]: api1.reducer,
+        // @ts-ignore
+        [api1_2.reducerPath]: api1_2.reducer,
+      },
+      middleware: (gDM) => gDM().concat(api1.middleware),
+    })
+    await store.dispatch(api1.endpoints.q1.initiate(undefined))
+
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+
+    expect(consoleWarnSpy).toHaveBeenCalledOnce()
+
+    expect(consoleWarnSpy).toHaveBeenLastCalledWith(
+      `There is a mismatch between slice and middleware for the reducerPath "api".
+You can only have one api per reducer path, this will lead to crashes in various situations!
+If you have multiple apis, you *have* to specify the reducerPath option when using createApi!`,
+    )
+  })
+
+  /**
+   * This is the one edge case that we currently cannot detect:
+   * Multiple apis with the same reducer key and only the middleware of the last api is being used.
+   *
+   * It would be great to support this case as well, but for now:
+   * "It is what it is."
+   */
+  test.todo('common: two apis, only second middleware', async () => {
+    const store = configureStore({
+      reducer: {
+        // @ts-ignore
+        [api1.reducerPath]: api1.reducer,
+        // @ts-ignore
+        [api1_2.reducerPath]: api1_2.reducer,
+      },
+      middleware: (gDM) => gDM().concat(api1_2.middleware),
+    })
+    await store.dispatch(api1.endpoints.q1.initiate(undefined))
+
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+
+    expect(consoleWarnSpy).toHaveBeenCalledOnce()
+
+    expect(consoleWarnSpy).toHaveBeenLastCalledWith(
+      `There is a mismatch between slice and middleware for the reducerPath "api".
+You can only have one api per reducer path, this will lead to crashes in various situations!
+If you have multiple apis, you *have* to specify the reducerPath option when using createApi!`,
+    )
+  })
+})
+
+describe('`console.error` on unhandled errors during `initiate`', () => {
+  test('error thrown in `baseQuery`', async () => {
+    const api = createApi({
+      baseQuery(): { data: any } {
+        throw new Error('this was kinda expected')
+      },
+      endpoints: (build) => ({
+        baseQuery: build.query<any, void>({ query() {} }),
+      }),
+    })
+    const store = configureStore({
+      reducer: { [api.reducerPath]: api.reducer },
+      middleware: (gdm) => gdm().concat(api.middleware),
+    })
+    await store.dispatch(api.endpoints.baseQuery.initiate())
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `An unhandled error occurred processing a request for the endpoint "baseQuery".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+      Error('this was kinda expected'),
+    )
+  })
+
+  test('error thrown in `queryFn`', async () => {
+    const api = createApi({
+      baseQuery() {
+        return { data: {} }
+      },
+      endpoints: (build) => ({
+        queryFn: build.query<any, void>({
+          queryFn() {
+            throw new Error('this was kinda expected')
+          },
+        }),
+      }),
+    })
+    const store = configureStore({
+      reducer: { [api.reducerPath]: api.reducer },
+      middleware: (gdm) => gdm().concat(api.middleware),
+    })
+    await store.dispatch(api.endpoints.queryFn.initiate())
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `An unhandled error occurred processing a request for the endpoint "queryFn".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+      Error('this was kinda expected'),
+    )
+  })
+
+  test('error thrown in `transformResponse`', async () => {
+    const api = createApi({
+      baseQuery() {
+        return { data: {} }
+      },
+      endpoints: (build) => ({
+        transformRspn: build.query<any, void>({
+          query() {},
+          transformResponse() {
+            throw new Error('this was kinda expected')
+          },
+        }),
+      }),
+    })
+    const store = configureStore({
+      reducer: { [api.reducerPath]: api.reducer },
+      middleware: (gdm) => gdm().concat(api.middleware),
+    })
+    await store.dispatch(api.endpoints.transformRspn.initiate())
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `An unhandled error occurred processing a request for the endpoint "transformRspn".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+      Error('this was kinda expected'),
+    )
+  })
+
+  test('error thrown in `transformErrorResponse`', async () => {
+    const api = createApi({
+      baseQuery() {
+        return { error: {} }
+      },
+      endpoints: (build) => ({
+        // @ts-ignore TS doesn't like `() => never` for `tER`
+        transformErRspn: build.query<number, void>({
+          // @ts-ignore TS doesn't like `() => never` for `tER`
+          query: () => '/dummy',
+          // @ts-ignore TS doesn't like `() => never` for `tER`
+          transformErrorResponse() {
+            throw new Error('this was kinda expected')
+          },
+        }),
+      }),
+    })
+    const store = configureStore({
+      reducer: { [api.reducerPath]: api.reducer },
+      middleware: (gdm) => gdm().concat(api.middleware),
+    })
+    await store.dispatch(api.endpoints.transformErRspn.initiate())
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `An unhandled error occurred processing a request for the endpoint "transformErRspn".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+      Error('this was kinda expected'),
+    )
+  })
+
+  test('`fetchBaseQuery`: error thrown in `prepareHeaders`', async () => {
+    const api = createApi({
+      baseQuery: fetchBaseQuery({
+        baseUrl,
+        prepareHeaders() {
+          throw new Error('this was kinda expected')
+        },
+      }),
+      endpoints: (build) => ({
+        prep: build.query<any, void>({
+          query() {
+            return '/success'
+          },
+        }),
+      }),
+    })
+    const store = configureStore({
+      reducer: { [api.reducerPath]: api.reducer },
+      middleware: (gdm) => gdm().concat(api.middleware),
+    })
+    await store.dispatch(api.endpoints.prep.initiate())
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `An unhandled error occurred processing a request for the endpoint "prep".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+      Error('this was kinda expected'),
+    )
+  })
+
+  test('`fetchBaseQuery`: error thrown in `validateStatus`', async () => {
+    const api = createApi({
+      baseQuery: fetchBaseQuery({
+        baseUrl,
+      }),
+      endpoints: (build) => ({
+        val: build.query<any, void>({
+          query() {
+            return {
+              url: '/success',
+
+              validateStatus() {
+                throw new Error('this was kinda expected')
+              },
+            }
+          },
+        }),
+      }),
+    })
+    const store = configureStore({
+      reducer: { [api.reducerPath]: api.reducer },
+      middleware: (gdm) => gdm().concat(api.middleware),
+    })
+    await store.dispatch(api.endpoints.val.initiate())
+
+    expect(consoleWarnSpy).not.toHaveBeenCalled()
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `An unhandled error occurred processing a request for the endpoint "val".
+In the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+      Error('this was kinda expected'),
+    )
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/errorHandling.test-d.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/errorHandling.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/errorHandling.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+import { useState } from 'react'
+
+const mockSuccessResponse = { value: 'success' }
+
+const api = createApi({
+  baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+  endpoints: (build) => ({
+    update: build.mutation<typeof mockSuccessResponse, any>({
+      query: () => ({ url: 'success' }),
+    }),
+    failedUpdate: build.mutation<typeof mockSuccessResponse, any>({
+      query: () => ({ url: 'error' }),
+    }),
+  }),
+})
+
+describe('type tests', () => {
+  test('a mutation is unwrappable and has the correct types', () => {
+    function User() {
+      const [manualError, setManualError] = useState<any>()
+
+      const [update, { isLoading, data, error }] =
+        api.endpoints.update.useMutation()
+
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="data">{JSON.stringify(data)}</div>
+          <div data-testid="error">{JSON.stringify(error)}</div>
+          <div data-testid="manuallySetError">
+            {JSON.stringify(manualError)}
+          </div>
+          <button
+            onClick={() => {
+              update({ name: 'hello' })
+                .unwrap()
+                .then((result) => {
+                  expectTypeOf(result).toEqualTypeOf(mockSuccessResponse)
+
+                  setManualError(undefined)
+                })
+                .catch(setManualError)
+            }}
+          >
+            Update User
+          </button>
+        </div>
+      )
+    }
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/errorHandling.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/errorHandling.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/errorHandling.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,657 @@
+import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'
+import type { BaseQueryFn, BaseQueryApi } from '@reduxjs/toolkit/query/react'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+import {
+  act,
+  fireEvent,
+  render,
+  renderHook,
+  screen,
+  waitFor,
+} from '@testing-library/react'
+import type { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'
+import axios from 'axios'
+import { HttpResponse, http } from 'msw'
+import * as React from 'react'
+import { useDispatch } from 'react-redux'
+import { hookWaitFor, setupApiStore } from '@internal/tests/utils/helpers'
+import { server } from '@internal/query/tests/mocks/server'
+
+const baseQuery = fetchBaseQuery({ baseUrl: 'https://example.com' })
+
+const api = createApi({
+  baseQuery,
+  endpoints(build) {
+    return {
+      query: build.query({ query: () => '/query' }),
+      mutation: build.mutation({
+        query: () => ({ url: '/mutation', method: 'POST' }),
+      }),
+    }
+  },
+})
+
+const storeRef = setupApiStore(api)
+
+const failQueryOnce = http.get(
+  '/query',
+  () => HttpResponse.json({ value: 'failed' }, { status: 500 }),
+  { once: true },
+)
+
+describe('fetchBaseQuery', () => {
+  let commonBaseQueryApiArgs: BaseQueryApi = {} as any
+  beforeEach(() => {
+    const abortController = new AbortController()
+    commonBaseQueryApiArgs = {
+      signal: abortController.signal,
+      abort: (reason) =>
+        //@ts-ignore
+        abortController.abort(reason),
+      dispatch: storeRef.store.dispatch,
+      getState: storeRef.store.getState,
+      extra: undefined,
+      type: 'query',
+      endpoint: 'doesntmatterhere',
+    }
+  })
+  test('success', async () => {
+    await expect(
+      baseQuery('/success', commonBaseQueryApiArgs, {}),
+    ).resolves.toEqual({
+      data: { value: 'success' },
+      meta: {
+        request: expect.any(Object),
+        response: expect.any(Object),
+      },
+    })
+  })
+  test('error', async () => {
+    server.use(failQueryOnce)
+    await expect(
+      baseQuery('/error', commonBaseQueryApiArgs, {}),
+    ).resolves.toEqual({
+      error: {
+        data: { value: 'error' },
+        status: 500,
+      },
+      meta: {
+        request: expect.any(Object),
+        response: expect.any(Object),
+      },
+    })
+  })
+})
+
+describe('query error handling', () => {
+  test('success', async () => {
+    server.use(
+      http.get('https://example.com/query', () =>
+        HttpResponse.json({ value: 'success' }),
+      ),
+    )
+    const { result } = renderHook(() => api.endpoints.query.useQuery({}), {
+      wrapper: storeRef.wrapper,
+    })
+
+    await hookWaitFor(() => expect(result.current.isFetching).toBeFalsy())
+    expect(result.current).toEqual(
+      expect.objectContaining({
+        isLoading: false,
+        isError: false,
+        isSuccess: true,
+        data: { value: 'success' },
+      }),
+    )
+  })
+
+  test('error', async () => {
+    server.use(
+      http.get('https://example.com/query', () =>
+        HttpResponse.json({ value: 'error' }, { status: 500 }),
+      ),
+    )
+    const { result } = renderHook(() => api.endpoints.query.useQuery({}), {
+      wrapper: storeRef.wrapper,
+    })
+
+    await hookWaitFor(() => expect(result.current.isFetching).toBeFalsy())
+    expect(result.current).toEqual(
+      expect.objectContaining({
+        isLoading: false,
+        isError: true,
+        isSuccess: false,
+        error: {
+          status: 500,
+          data: { value: 'error' },
+        },
+      }),
+    )
+  })
+
+  test('success -> error', async () => {
+    server.use(
+      http.get('https://example.com/query', () =>
+        HttpResponse.json({ value: 'success' }),
+      ),
+    )
+    const { result } = renderHook(() => api.endpoints.query.useQuery({}), {
+      wrapper: storeRef.wrapper,
+    })
+
+    await hookWaitFor(() => expect(result.current.isFetching).toBeFalsy())
+    expect(result.current).toEqual(
+      expect.objectContaining({
+        isLoading: false,
+        isError: false,
+        isSuccess: true,
+        data: { value: 'success' },
+      }),
+    )
+
+    server.use(
+      http.get(
+        'https://example.com/query',
+        () => HttpResponse.json({ value: 'error' }, { status: 500 }),
+        { once: true },
+      ),
+    )
+
+    act(() => void result.current.refetch())
+
+    await hookWaitFor(() => expect(result.current.isFetching).toBeFalsy())
+    expect(result.current).toEqual(
+      expect.objectContaining({
+        isLoading: false,
+        isError: true,
+        isSuccess: false,
+        error: {
+          status: 500,
+          data: { value: 'error' },
+        },
+        // last data will stay available
+        data: { value: 'success' },
+      }),
+    )
+  })
+
+  test('error -> success', async () => {
+    server.use(
+      http.get('https://example.com/query', () =>
+        HttpResponse.json({ value: 'success' }),
+      ),
+    )
+    server.use(
+      http.get(
+        'https://example.com/query',
+        () => HttpResponse.json({ value: 'error' }, { status: 500 }),
+        { once: true },
+      ),
+    )
+    const { result } = renderHook(() => api.endpoints.query.useQuery({}), {
+      wrapper: storeRef.wrapper,
+    })
+
+    await hookWaitFor(() => expect(result.current.isFetching).toBeFalsy())
+    expect(result.current).toEqual(
+      expect.objectContaining({
+        isLoading: false,
+        isError: true,
+        isSuccess: false,
+        error: {
+          status: 500,
+          data: { value: 'error' },
+        },
+      }),
+    )
+
+    act(() => void result.current.refetch())
+
+    await hookWaitFor(() => expect(result.current.isFetching).toBeFalsy())
+    expect(result.current).toEqual(
+      expect.objectContaining({
+        isLoading: false,
+        isError: false,
+        isSuccess: true,
+        data: { value: 'success' },
+      }),
+    )
+  })
+})
+
+describe('mutation error handling', () => {
+  test('success', async () => {
+    server.use(
+      http.post('https://example.com/mutation', () =>
+        HttpResponse.json({ value: 'success' }),
+      ),
+    )
+    const { result } = renderHook(() => api.endpoints.mutation.useMutation(), {
+      wrapper: storeRef.wrapper,
+    })
+
+    const [trigger] = result.current
+
+    act(() => void trigger({}))
+
+    await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+    expect(result.current[1]).toEqual(
+      expect.objectContaining({
+        isLoading: false,
+        isError: false,
+        isSuccess: true,
+        data: { value: 'success' },
+      }),
+    )
+  })
+
+  test('error', async () => {
+    server.use(
+      http.post('https://example.com/mutation', () =>
+        HttpResponse.json({ value: 'error' }, { status: 500 }),
+      ),
+    )
+    const { result } = renderHook(() => api.endpoints.mutation.useMutation(), {
+      wrapper: storeRef.wrapper,
+    })
+
+    const [trigger] = result.current
+
+    act(() => void trigger({}))
+
+    await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+    expect(result.current[1]).toEqual(
+      expect.objectContaining({
+        isLoading: false,
+        isError: true,
+        isSuccess: false,
+        error: {
+          status: 500,
+          data: { value: 'error' },
+        },
+      }),
+    )
+  })
+
+  test('success -> error', async () => {
+    server.use(
+      http.post('https://example.com/mutation', () =>
+        HttpResponse.json({ value: 'success' }),
+      ),
+    )
+    const { result } = renderHook(() => api.endpoints.mutation.useMutation(), {
+      wrapper: storeRef.wrapper,
+    })
+
+    {
+      const [trigger] = result.current
+
+      act(() => void trigger({}))
+
+      await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+      expect(result.current[1]).toEqual(
+        expect.objectContaining({
+          isLoading: false,
+          isError: false,
+          isSuccess: true,
+          data: { value: 'success' },
+        }),
+      )
+    }
+
+    server.use(
+      http.post(
+        'https://example.com/mutation',
+        () => HttpResponse.json({ value: 'error' }, { status: 500 }),
+        { once: true },
+      ),
+    )
+
+    {
+      const [trigger] = result.current
+
+      act(() => void trigger({}))
+
+      await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+      expect(result.current[1]).toEqual(
+        expect.objectContaining({
+          isLoading: false,
+          isError: true,
+          isSuccess: false,
+          error: {
+            status: 500,
+            data: { value: 'error' },
+          },
+        }),
+      )
+      expect(result.current[1].data).toBeUndefined()
+    }
+  })
+
+  test('error -> success', async () => {
+    server.use(
+      http.post('https://example.com/mutation', () =>
+        HttpResponse.json({ value: 'success' }),
+      ),
+    )
+    server.use(
+      http.post(
+        'https://example.com/mutation',
+        () => HttpResponse.json({ value: 'error' }, { status: 500 }),
+        { once: true },
+      ),
+    )
+
+    const { result } = renderHook(() => api.endpoints.mutation.useMutation(), {
+      wrapper: storeRef.wrapper,
+    })
+
+    {
+      const [trigger] = result.current
+
+      act(() => void trigger({}))
+
+      await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+      expect(result.current[1]).toEqual(
+        expect.objectContaining({
+          isLoading: false,
+          isError: true,
+          isSuccess: false,
+          error: {
+            status: 500,
+            data: { value: 'error' },
+          },
+        }),
+      )
+    }
+
+    {
+      const [trigger] = result.current
+
+      act(() => void trigger({}))
+
+      await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+      expect(result.current[1]).toEqual(
+        expect.objectContaining({
+          isLoading: false,
+          isError: false,
+          isSuccess: true,
+        }),
+      )
+      expect(result.current[1].error).toBeUndefined()
+    }
+  })
+})
+
+describe('custom axios baseQuery', () => {
+  const axiosBaseQuery =
+    (
+      { baseUrl }: { baseUrl: string } = { baseUrl: '' },
+    ): BaseQueryFn<
+      {
+        url: string
+        method?: AxiosRequestConfig['method']
+        data?: AxiosRequestConfig['data']
+      },
+      unknown,
+      unknown,
+      unknown,
+      { response: AxiosResponse; request: AxiosRequestConfig }
+    > =>
+    async ({ url, method, data }) => {
+      const config = { url: baseUrl + url, method, data }
+      try {
+        const result = await axios(config)
+        return {
+          data: result.data,
+          meta: { request: config, response: result },
+        }
+      } catch (axiosError) {
+        const err = axiosError as AxiosError
+        return {
+          error: {
+            status: err.response?.status,
+            data: err.response?.data,
+          },
+          meta: { request: config, response: err.response as AxiosResponse },
+        }
+      }
+    }
+
+  type SuccessResponse = { value: 'success' }
+  const api = createApi({
+    baseQuery: axiosBaseQuery({
+      baseUrl: 'https://example.com',
+    }),
+    endpoints(build) {
+      return {
+        query: build.query<SuccessResponse, void>({
+          query: () => ({ url: '/success', method: 'get' }),
+          transformResponse: (result: SuccessResponse, meta) => {
+            return { ...result, metaResponseData: meta?.response.data }
+          },
+        }),
+        mutation: build.mutation<SuccessResponse, any>({
+          query: () => ({ url: '/success', method: 'post' }),
+        }),
+      }
+    },
+  })
+
+  const storeRef = setupApiStore(api)
+
+  test('axiosBaseQuery transformResponse uses its custom meta format', async () => {
+    const result = await storeRef.store.dispatch(api.endpoints.query.initiate())
+
+    expect(result.data).toEqual({
+      value: 'success',
+      metaResponseData: { value: 'success' },
+    })
+  })
+
+  test('axios errors behave as expected', async () => {
+    server.use(
+      http.get('https://example.com/success', () =>
+        HttpResponse.json({ value: 'error' }, { status: 500 }),
+      ),
+    )
+    const { result } = renderHook(() => api.endpoints.query.useQuery(), {
+      wrapper: storeRef.wrapper,
+    })
+
+    await hookWaitFor(() => expect(result.current.isFetching).toBeFalsy())
+    expect(result.current).toEqual(
+      expect.objectContaining({
+        isLoading: false,
+        isError: true,
+        isSuccess: false,
+        error: { status: 500, data: { value: 'error' } },
+      }),
+    )
+  })
+})
+
+describe('error handling in a component', () => {
+  const mockErrorResponse = { value: 'error', very: 'mean' }
+  const mockSuccessResponse = { value: 'success' }
+
+  const api = createApi({
+    baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+    endpoints: (build) => ({
+      update: build.mutation<typeof mockSuccessResponse, any>({
+        query: () => ({ url: 'success' }),
+      }),
+      failedUpdate: build.mutation<typeof mockSuccessResponse, any>({
+        query: () => ({ url: 'error' }),
+      }),
+    }),
+  })
+  const storeRef = setupApiStore(api)
+
+  test('a mutation is unwrappable and has the correct types', async () => {
+    server.use(
+      http.get(
+        'https://example.com/success',
+        () => HttpResponse.json(mockErrorResponse, { status: 500 }),
+        { once: true },
+      ),
+    )
+
+    function User() {
+      const [manualError, setManualError] = React.useState<any>()
+      const [update, { isLoading, data, error }] =
+        api.endpoints.update.useMutation()
+
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="data">{JSON.stringify(data)}</div>
+          <div data-testid="error">{JSON.stringify(error)}</div>
+          <div data-testid="manuallySetError">
+            {JSON.stringify(manualError)}
+          </div>
+          <button
+            onClick={() => {
+              update({ name: 'hello' })
+                .unwrap()
+                .then((result) => {
+                  setManualError(undefined)
+                })
+                .catch((error) => act(() => setManualError(error)))
+            }}
+          >
+            Update User
+          </button>
+        </div>
+      )
+    }
+
+    render(<User />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    fireEvent.click(screen.getByText('Update User'))
+    expect(screen.getByTestId('isLoading').textContent).toBe('true')
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+
+    // Make sure the hook and the unwrapped action return the same things in an error state
+    await waitFor(() =>
+      expect(screen.getByTestId('error').textContent).toEqual(
+        screen.getByTestId('manuallySetError').textContent,
+      ),
+    )
+
+    fireEvent.click(screen.getByText('Update User'))
+    expect(screen.getByTestId('isLoading').textContent).toBe('true')
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('error').textContent).toBeFalsy(),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('manuallySetError').textContent).toBeFalsy(),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('data').textContent).toEqual(
+        JSON.stringify(mockSuccessResponse),
+      ),
+    )
+  })
+
+  for (const track of [true, false]) {
+    test(`an un-subscribed mutation will still return something useful (success case, track: ${track})`, async () => {
+      const hook = renderHook(useDispatch, { wrapper: storeRef.wrapper })
+
+      const dispatch = hook.result.current as ThunkDispatch<
+        any,
+        any,
+        UnknownAction
+      >
+      let mutationqueryFulfilled: ReturnType<
+        ReturnType<typeof api.endpoints.update.initiate>
+      >
+      act(() => {
+        mutationqueryFulfilled = dispatch(
+          api.endpoints.update.initiate({}, { track }),
+        )
+      })
+      const result = await mutationqueryFulfilled!
+      expect(result).toMatchObject({
+        data: { value: 'success' },
+      })
+    })
+
+    test(`an un-subscribed mutation will still return something useful (error case, track: ${track})`, async () => {
+      const hook = renderHook(useDispatch, { wrapper: storeRef.wrapper })
+
+      const dispatch = hook.result.current as ThunkDispatch<
+        any,
+        any,
+        UnknownAction
+      >
+      let mutationqueryFulfilled: ReturnType<
+        ReturnType<typeof api.endpoints.failedUpdate.initiate>
+      >
+      act(() => {
+        mutationqueryFulfilled = dispatch(
+          api.endpoints.failedUpdate.initiate({}, { track }),
+        )
+      })
+      const result = await mutationqueryFulfilled!
+      expect(result).toMatchObject({
+        error: {
+          status: 500,
+          data: { value: 'error' },
+        },
+      })
+    })
+    test(`an un-subscribed mutation will still be unwrappable (success case), track: ${track}`, async () => {
+      const hook = renderHook(useDispatch, { wrapper: storeRef.wrapper })
+
+      const dispatch = hook.result.current as ThunkDispatch<
+        any,
+        any,
+        UnknownAction
+      >
+      let mutationqueryFulfilled: ReturnType<
+        ReturnType<typeof api.endpoints.update.initiate>
+      >
+      act(() => {
+        mutationqueryFulfilled = dispatch(
+          api.endpoints.update.initiate({}, { track }),
+        )
+      })
+      const result = await mutationqueryFulfilled!.unwrap()
+      expect(result).toMatchObject({
+        value: 'success',
+      })
+    })
+
+    test(`an un-subscribed mutation will still be unwrappable (error case, track: ${track})`, async () => {
+      const hook = renderHook(useDispatch, { wrapper: storeRef.wrapper })
+
+      const dispatch = hook.result.current as ThunkDispatch<
+        any,
+        any,
+        UnknownAction
+      >
+      let mutationqueryFulfilled: ReturnType<
+        ReturnType<typeof api.endpoints.failedUpdate.initiate>
+      >
+      act(() => {
+        mutationqueryFulfilled = dispatch(
+          api.endpoints.failedUpdate.initiate({}, { track }),
+        )
+      })
+      const unwrappedPromise = mutationqueryFulfilled!.unwrap()
+      await expect(unwrappedPromise).rejects.toMatchObject({
+        status: 500,
+        data: { value: 'error' },
+      })
+    })
+  }
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/fakeBaseQuery.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/fakeBaseQuery.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/fakeBaseQuery.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,148 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import { configureStore } from '@reduxjs/toolkit'
+import { createApi, fakeBaseQuery } from '@reduxjs/toolkit/query'
+
+type CustomErrorType = { type: 'Custom' }
+
+const api = createApi({
+  baseQuery: fakeBaseQuery<CustomErrorType>(),
+  endpoints: (build) => ({
+    withQuery: build.query<string, string>({
+      // @ts-expect-error
+      query(arg: string) {
+        return `resultFrom(${arg})`
+      },
+      // @ts-expect-error
+      transformResponse(response) {
+        return response.wrappedByBaseQuery
+      },
+    }),
+    withQueryFn: build.query<string, string>({
+      queryFn(arg: string) {
+        return { data: `resultFrom(${arg})` }
+      },
+    }),
+    withInvalidDataQueryFn: build.query<string, string>({
+      // @ts-expect-error
+      queryFn(arg: string) {
+        return { data: 5 }
+      },
+    }),
+    withErrorQueryFn: build.query<string, string>({
+      queryFn(arg: string) {
+        return { error: { type: 'Custom' } }
+      },
+    }),
+    withInvalidErrorQueryFn: build.query<string, string>({
+      // @ts-expect-error
+      queryFn(arg: string) {
+        return { error: 5 }
+      },
+    }),
+    withAsyncQueryFn: build.query<string, string>({
+      async queryFn(arg: string) {
+        return { data: `resultFrom(${arg})` }
+      },
+    }),
+    withInvalidDataAsyncQueryFn: build.query<string, string>({
+      // @ts-expect-error
+      async queryFn(arg: string) {
+        return { data: 5 }
+      },
+    }),
+    withAsyncErrorQueryFn: build.query<string, string>({
+      async queryFn(arg: string) {
+        return { error: { type: 'Custom' } }
+      },
+    }),
+    withInvalidAsyncErrorQueryFn: build.query<string, string>({
+      // @ts-expect-error
+      async queryFn(arg: string) {
+        return { error: 5 }
+      },
+    }),
+
+    mutationWithQueryFn: build.mutation<string, string>({
+      queryFn(arg: string) {
+        return { data: `resultFrom(${arg})` }
+      },
+    }),
+    mutationWithInvalidDataQueryFn: build.mutation<string, string>({
+      // @ts-expect-error
+      queryFn(arg: string) {
+        return { data: 5 }
+      },
+    }),
+    mutationWithErrorQueryFn: build.mutation<string, string>({
+      queryFn(arg: string) {
+        return { error: { type: 'Custom' } }
+      },
+    }),
+    mutationWithInvalidErrorQueryFn: build.mutation<string, string>({
+      // @ts-expect-error
+      queryFn(arg: string) {
+        return { error: 5 }
+      },
+    }),
+
+    mutationWithAsyncQueryFn: build.mutation<string, string>({
+      async queryFn(arg: string) {
+        return { data: `resultFrom(${arg})` }
+      },
+    }),
+    mutationWithInvalidAsyncQueryFn: build.mutation<string, string>({
+      // @ts-expect-error
+      async queryFn(arg: string) {
+        return { data: 5 }
+      },
+    }),
+    mutationWithAsyncErrorQueryFn: build.mutation<string, string>({
+      async queryFn(arg: string) {
+        return { error: { type: 'Custom' } }
+      },
+    }),
+    mutationWithInvalidAsyncErrorQueryFn: build.mutation<string, string>({
+      // @ts-expect-error
+      async queryFn(arg: string) {
+        return { error: 5 }
+      },
+    }),
+    // @ts-expect-error
+    withNeither: build.query<string, string>({}),
+    // @ts-expect-error
+    mutationWithNeither: build.mutation<string, string>({}),
+  }),
+})
+
+const store = configureStore({
+  reducer: {
+    [api.reducerPath]: api.reducer,
+  },
+  middleware: (gDM) => gDM({}).concat(api.middleware),
+})
+
+test('fakeBaseQuery throws when invoking query', async () => {
+  const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+  const thunk = api.endpoints.withQuery.initiate('')
+
+  const result = await store.dispatch(thunk)
+
+  expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+  expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+    `An unhandled error occurred processing a request for the endpoint "withQuery".\nIn the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+    Error(
+      'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.',
+    ),
+  )
+
+  expect(result!.error).toEqual({
+    message:
+      'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.',
+    name: 'Error',
+    stack: expect.any(String),
+  })
+
+  consoleErrorSpy.mockRestore()
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/fetchBaseQuery.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/fetchBaseQuery.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/fetchBaseQuery.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1175 @@
+import { createSlice } from '@reduxjs/toolkit'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+import { headersToObject } from 'headers-polyfill'
+import { HttpResponse, delay, http } from 'msw'
+// @ts-ignore
+import nodeFetch from 'node-fetch'
+import queryString from 'query-string'
+import { vi } from 'vitest'
+import { setupApiStore } from '../../tests/utils/helpers'
+import type { BaseQueryApi } from '../baseQueryTypes'
+import { server } from './mocks/server'
+
+const defaultHeaders: Record<string, string> = {
+  fake: 'header',
+  delete: 'true',
+  delete2: '1',
+}
+
+const baseUrl = 'https://example.com'
+
+// @ts-ignore
+const fetchFn = vi.fn<Promise<any>, any[]>(nodeFetch)
+
+const baseQuery = fetchBaseQuery({
+  baseUrl,
+  fetchFn: fetchFn as any,
+  prepareHeaders: (headers, { getState }) => {
+    const { token } = (getState() as RootState).auth
+
+    // If we have a token set in state, let's assume that we should be passing it.
+    if (token) {
+      headers.set('authorization', `Bearer ${token}`)
+    }
+    // A user could customize their behavior here, so we'll just test that custom scenarios would work.
+    const potentiallyConflictingKeys = Object.keys(defaultHeaders)
+    potentiallyConflictingKeys.forEach((key) => {
+      // Check for presence of a default key, if the incoming endpoint headers don't specify it as '', then set it
+      const existingValue = headers.get(key)
+      if (!existingValue && existingValue !== '') {
+        headers.set(key, String(defaultHeaders[key]))
+        // If an endpoint sets a header with a value of '', just delete the header.
+      } else if (headers.get(key) === '') {
+        headers.delete(key)
+      }
+    })
+
+    return headers
+  },
+})
+
+const api = createApi({
+  baseQuery,
+  endpoints(build) {
+    return {
+      query: build.query({ query: () => ({ url: '/echo', headers: {} }) }),
+      mutation: build.mutation({
+        query: () => ({ url: '/echo', method: 'POST', credentials: 'omit' }),
+      }),
+    }
+  },
+})
+
+const authSlice = createSlice({
+  name: 'auth',
+  initialState: {
+    token: '',
+  },
+  reducers: {
+    setToken(state, action) {
+      state.token = action.payload
+    },
+  },
+})
+
+const storeRef = setupApiStore(api, { auth: authSlice.reducer })
+type RootState = ReturnType<typeof storeRef.store.getState>
+
+let commonBaseQueryApi: BaseQueryApi = {} as any
+beforeEach(() => {
+  let abortController = new AbortController()
+  commonBaseQueryApi = {
+    signal: abortController.signal,
+    abort: (reason) =>
+      // @ts-ignore
+      abortController.abort(reason),
+    dispatch: storeRef.store.dispatch,
+    getState: storeRef.store.getState,
+    extra: undefined,
+    type: 'query',
+    endpoint: 'doesntmatterhere',
+  }
+})
+
+describe('fetchBaseQuery', () => {
+  describe('basic functionality', () => {
+    it('should return an object for a simple GET request when it is json data', async () => {
+      const req = baseQuery('/success', commonBaseQueryApi, {})
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.data).toEqual({ value: 'success' })
+    })
+
+    it('should return undefined for a simple GET request when the response is empty', async () => {
+      const req = baseQuery('/empty', commonBaseQueryApi, {})
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+
+      expect(res.data).toBeNull()
+    })
+
+    it('should return an error and status for error responses', async () => {
+      const req = baseQuery('/error', commonBaseQueryApi, {})
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.error).toEqual({
+        status: 500,
+        data: { value: 'error' },
+      })
+    })
+
+    it('should handle a connection loss semi-gracefully', async () => {
+      fetchFn.mockRejectedValueOnce(new TypeError('Failed to fetch'))
+
+      const req = baseQuery('/success', commonBaseQueryApi, {})
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBe(undefined)
+      expect(res.error).toEqual({
+        status: 'FETCH_ERROR',
+        error: 'TypeError: Failed to fetch',
+      })
+    })
+  })
+
+  describe('non-JSON-body', () => {
+    it('success: should return data ("text" responseHandler)', async () => {
+      server.use(
+        http.get(
+          'https://example.com/success',
+          () => HttpResponse.text(`this is not json!`),
+          { once: true },
+        ),
+      )
+
+      const req = baseQuery(
+        { url: '/success', responseHandler: 'text' },
+        commonBaseQueryApi,
+        {},
+      )
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.data).toEqual(`this is not json!`)
+    })
+
+    it('success: should fail gracefully (default="json" responseHandler)', async () => {
+      server.use(
+        http.get(
+          'https://example.com/success',
+          () => HttpResponse.text(`this is not json!`),
+          { once: true },
+        ),
+      )
+
+      const req = baseQuery('/success', commonBaseQueryApi, {})
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.error).toEqual({
+        status: 'PARSING_ERROR',
+        error: expect.stringMatching(/SyntaxError: Unexpected token/),
+        originalStatus: 200,
+        data: `this is not json!`,
+      })
+    })
+
+    it('success: parse text without error ("content-type" responseHandler)', async () => {
+      server.use(
+        http.get(
+          'https://example.com/success',
+          () => HttpResponse.text(`this is not json!`),
+          { once: true },
+        ),
+      )
+
+      const req = baseQuery(
+        {
+          url: '/success',
+          responseHandler: 'content-type',
+        },
+        commonBaseQueryApi,
+        {},
+      )
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.response?.headers.get('content-type')).toEqual(
+        'text/plain',
+      )
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.data).toEqual(`this is not json!`)
+    })
+
+    it('success: parse json without error ("content-type" responseHandler)', async () => {
+      server.use(
+        http.get(
+          'https://example.com/success',
+          () => HttpResponse.json(`this will become json!`),
+          { once: true },
+        ),
+      )
+
+      const req = baseQuery(
+        {
+          url: '/success',
+          responseHandler: 'content-type',
+        },
+        commonBaseQueryApi,
+        {},
+      )
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.response?.headers.get('content-type')).toEqual(
+        'application/json',
+      )
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.data).toEqual(`this will become json!`)
+    })
+
+    it('server error: should fail normally with a 500 status ("text" responseHandler)', async () => {
+      server.use(
+        http.get('https://example.com/error', () =>
+          HttpResponse.text(`this is not json!`, { status: 500 }),
+        ),
+      )
+
+      const req = baseQuery(
+        { url: '/error', responseHandler: 'text' },
+        commonBaseQueryApi,
+        {},
+      )
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.error).toEqual({
+        status: 500,
+        data: `this is not json!`,
+      })
+    })
+
+    it('server error: should fail normally with a 500 status as text ("content-type" responseHandler)', async () => {
+      const serverResponse = 'Internal Server Error'
+      server.use(
+        http.get('https://example.com/error', () =>
+          HttpResponse.text(serverResponse, { status: 500 }),
+        ),
+      )
+
+      const req = baseQuery(
+        { url: '/error', responseHandler: 'content-type' },
+        commonBaseQueryApi,
+        {},
+      )
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.meta?.response?.headers.get('content-type')).toEqual(
+        'text/plain',
+      )
+      expect(res.error).toEqual({
+        status: 500,
+        data: serverResponse,
+      })
+    })
+
+    it('server error: should fail normally with a 500 status as json ("content-type" responseHandler)', async () => {
+      const serverResponse = {
+        errors: { field1: "Password cannot be 'password'" },
+      }
+      server.use(
+        http.get('https://example.com/error', () =>
+          HttpResponse.json(serverResponse, { status: 500 }),
+        ),
+      )
+
+      const req = baseQuery(
+        { url: '/error', responseHandler: 'content-type' },
+        commonBaseQueryApi,
+        {},
+      )
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.meta?.response?.headers.get('content-type')).toEqual(
+        'application/json',
+      )
+      expect(res.error).toEqual({
+        status: 500,
+        data: serverResponse,
+      })
+    })
+
+    it('server error: should fail gracefully (default="json" responseHandler)', async () => {
+      server.use(
+        http.get('https://example.com/error', () =>
+          HttpResponse.text(`this is not json!`, { status: 500 }),
+        ),
+      )
+
+      const req = baseQuery('/error', commonBaseQueryApi, {})
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.error).toEqual({
+        status: 'PARSING_ERROR',
+        error: expect.stringMatching(/SyntaxError: Unexpected token/),
+        originalStatus: 500,
+        data: `this is not json!`,
+      })
+    })
+  })
+
+  describe('arg.body', () => {
+    test('an object provided to body will be serialized when content-type is json', async () => {
+      const data = {
+        test: 'value',
+      }
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo', body: data, method: 'POST' },
+        { ...commonBaseQueryApi, type: 'mutation' },
+        {},
+      ))
+
+      expect(request.headers['content-type']).toBe('application/json')
+      expect(request.body).toEqual(data)
+    })
+
+    test('an array provided to body will be serialized when content-type is json', async () => {
+      const data = ['test', 'value']
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo', body: data, method: 'POST' },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['content-type']).toBe('application/json')
+      expect(request.body).toEqual(data)
+    })
+
+    test('an object provided to body will not be serialized when content-type is not json', async () => {
+      const data = {
+        test: 'value',
+      }
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        {
+          url: '/echo',
+          body: data,
+          method: 'POST',
+          headers: { 'content-type': 'text/html' },
+        },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['content-type']).toBe('text/html')
+      expect(request.body).toEqual('[object Object]')
+    })
+
+    test('an array provided to body will not be serialized when content-type is not json', async () => {
+      const data = ['test', 'value']
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        {
+          url: '/echo',
+          body: data,
+          method: 'POST',
+          headers: { 'content-type': 'text/html' },
+        },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['content-type']).toBe('text/html')
+      expect(request.body).toEqual(data.join(','))
+    })
+
+    it('supports a custom jsonContentType', async () => {
+      const baseQuery = fetchBaseQuery({
+        baseUrl,
+        fetchFn: fetchFn as any,
+        jsonContentType: 'application/vnd.api+json',
+      })
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        {
+          url: '/echo',
+          body: {},
+          method: 'POST',
+        },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['content-type']).toBe('application/vnd.api+json')
+    })
+
+    it('supports a custom jsonReplacer', async () => {
+      const body = {
+        items: new Set(['A', 'B', 'C']),
+      }
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        {
+          url: '/echo',
+          body,
+          method: 'POST',
+        },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['content-type']).toBe('application/json')
+      expect(request.body).toEqual({ items: {} }) // Set is not properly marshalled by default
+
+      // Use jsonReplacer
+      const baseQueryWithReplacer = fetchBaseQuery({
+        baseUrl,
+        fetchFn: fetchFn as any,
+        jsonReplacer: (key, value) =>
+          value instanceof Set ? [...value] : value,
+      })
+
+      ;({ data: request } = await baseQueryWithReplacer(
+        {
+          url: '/echo',
+          body,
+          method: 'POST',
+        },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['content-type']).toBe('application/json')
+      expect(request.body).toEqual({ items: ['A', 'B', 'C'] }) // Set is marshalled correctly by jsonReplacer
+    })
+  })
+
+  describe('arg.params', () => {
+    it('should not serialize missing params', async () => {
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo' },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.url).toEqual(`${baseUrl}/echo`)
+    })
+
+    it('should serialize numeric and boolean params', async () => {
+      const params = { a: 1, b: true }
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo', params },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.url).toEqual(`${baseUrl}/echo?a=1&b=true`)
+    })
+
+    it('should merge params into existing url querystring', async () => {
+      const params = { a: 1, b: true }
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo?banana=pudding', params },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.url).toEqual(`${baseUrl}/echo?banana=pudding&a=1&b=true`)
+    })
+
+    it('should accept a URLSearchParams instance', async () => {
+      const params = new URLSearchParams({ apple: 'fruit' })
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo', params },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.url).toEqual(`${baseUrl}/echo?apple=fruit`)
+    })
+
+    it('should strip undefined values from the end params', async () => {
+      const params = { apple: 'fruit', banana: undefined, randy: null }
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo', params },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.url).toEqual(`${baseUrl}/echo?apple=fruit&randy=null`)
+    })
+
+    it('should support a paramsSerializer', async () => {
+      const baseQuery = fetchBaseQuery({
+        baseUrl,
+        fetchFn: fetchFn as any,
+        paramsSerializer: (params: Record<string, unknown>) =>
+          queryString.stringify(params, { arrayFormat: 'bracket' }),
+      })
+
+      const api = createApi({
+        baseQuery,
+        endpoints(build) {
+          return {
+            query: build.query({
+              query: () => ({ url: '/echo', headers: {} }),
+            }),
+            mutation: build.mutation({
+              query: () => ({
+                url: '/echo',
+                method: 'POST',
+                credentials: 'omit',
+              }),
+            }),
+          }
+        },
+      })
+
+      const params = {
+        someArray: ['a', 'b', 'c'],
+      }
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo', params },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.url).toEqual(
+        `${baseUrl}/echo?someArray[]=a&someArray[]=b&someArray[]=c`,
+      )
+    })
+
+    it('should supports a custom isJsonContentType function', async () => {
+      const testBody = {
+        i_should_be_stringified: true,
+      }
+      const baseQuery = fetchBaseQuery({
+        baseUrl,
+        fetchFn: fetchFn as any,
+        isJsonContentType: (headers) =>
+          [
+            'application/vnd.api+json',
+            'application/json',
+            'application/vnd.hal+json',
+          ].includes(headers.get('content-type') ?? ''),
+      })
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        {
+          url: '/echo',
+          method: 'POST',
+          body: testBody,
+          headers: { 'content-type': 'application/vnd.hal+json' },
+        },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.body).toMatchObject(testBody)
+    })
+  })
+
+  describe('validateStatus', () => {
+    test('validateStatus can return an error even on normal 200 responses', async () => {
+      // This is a scenario where an API may always return a 200, but indicates there is an error when success = false
+      const res = await baseQuery(
+        {
+          url: '/nonstandard-error',
+          validateStatus: (response, body) =>
+            response.status === 200 && body.success === false ? false : true,
+        },
+        commonBaseQueryApi,
+        {},
+      )
+
+      expect(res.error).toEqual({
+        status: 200,
+        data: {
+          success: false,
+          message: 'This returns a 200 but is really an error',
+        },
+      })
+    })
+  })
+
+  describe('arg.headers and prepareHeaders', () => {
+    test('uses the default headers set in prepareHeaders', async () => {
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo' },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['fake']).toBe(defaultHeaders['fake'])
+      expect(request.headers['delete']).toBe(defaultHeaders['delete'])
+      expect(request.headers['delete2']).toBe(defaultHeaders['delete2'])
+    })
+
+    test('adds endpoint-level headers to the defaults', async () => {
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo', headers: { authorization: 'Bearer banana' } },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['authorization']).toBe('Bearer banana')
+      expect(request.headers['fake']).toBe(defaultHeaders['fake'])
+      expect(request.headers['delete']).toBe(defaultHeaders['delete'])
+      expect(request.headers['delete2']).toBe(defaultHeaders['delete2'])
+    })
+
+    test('it does not set application/json when content-type is set', async () => {
+      let request: any
+      ;({ data: request } = await baseQuery(
+        {
+          url: '/echo',
+          headers: {
+            authorization: 'Bearer banana',
+            'content-type': 'custom-content-type',
+          },
+        },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['authorization']).toBe('Bearer banana')
+      expect(request.headers['content-type']).toBe('custom-content-type')
+      expect(request.headers['fake']).toBe(defaultHeaders['fake'])
+      expect(request.headers['delete']).toBe(defaultHeaders['delete'])
+      expect(request.headers['delete2']).toBe(defaultHeaders['delete2'])
+    })
+
+    test('respects the headers from an endpoint over the base headers', async () => {
+      const fake = 'fake endpoint value'
+
+      let request: any
+      ;({ data: request } = await baseQuery(
+        { url: '/echo', headers: { fake, delete: '', delete2: '' } },
+        commonBaseQueryApi,
+        {},
+      ))
+
+      expect(request.headers['fake']).toBe(fake)
+      expect(request.headers['delete']).toBeUndefined()
+      expect(request.headers['delete2']).toBeUndefined()
+    })
+
+    test('prepareHeaders can return undefined', async () => {
+      let request: any
+
+      const token = 'accessToken'
+
+      const _baseQuery = fetchBaseQuery({
+        baseUrl,
+        prepareHeaders: (headers) => {
+          headers.set('authorization', `Bearer ${token}`)
+        },
+      })
+
+      const doRequest = async () =>
+        _baseQuery({ url: '/echo' }, commonBaseQueryApi, {})
+
+      ;({ data: request } = await doRequest())
+
+      expect(request.headers['authorization']).toBe(`Bearer ${token}`)
+    })
+
+    test('prepareHeaders is able to be an async function', async () => {
+      let request: any
+
+      const token = 'accessToken'
+      const getAccessTokenAsync = async () => token
+
+      const _baseQuery = fetchBaseQuery({
+        baseUrl,
+        prepareHeaders: async (headers) => {
+          headers.set('authorization', `Bearer ${await getAccessTokenAsync()}`)
+          return headers
+        },
+      })
+
+      const doRequest = async () =>
+        _baseQuery({ url: '/echo' }, commonBaseQueryApi, {})
+
+      ;({ data: request } = await doRequest())
+
+      expect(request.headers['authorization']).toBe(`Bearer ${token}`)
+    })
+
+    test('prepareHeaders is able to be an async function returning undefined', async () => {
+      let request: any
+
+      const token = 'accessToken'
+      const getAccessTokenAsync = async () => token
+
+      const _baseQuery = fetchBaseQuery({
+        baseUrl,
+        prepareHeaders: async (headers) => {
+          headers.set('authorization', `Bearer ${await getAccessTokenAsync()}`)
+        },
+      })
+
+      const doRequest = async () =>
+        _baseQuery({ url: '/echo' }, commonBaseQueryApi, {})
+
+      ;({ data: request } = await doRequest())
+
+      expect(request.headers['authorization']).toBe(`Bearer ${token}`)
+    })
+
+    test('prepareHeaders is able to select from a state', async () => {
+      let request: any
+
+      const doRequest = async () => {
+        const abortController = new AbortController()
+        return baseQuery(
+          { url: '/echo' },
+          {
+            signal: abortController.signal,
+            abort: (reason) =>
+              // @ts-ignore
+              abortController.abort(reason),
+            dispatch: storeRef.store.dispatch,
+            getState: storeRef.store.getState,
+            extra: undefined,
+            type: 'query',
+            endpoint: '',
+          },
+          {},
+        )
+      }
+
+      ;({ data: request } = await doRequest())
+
+      expect(request.headers['authorization']).toBeUndefined()
+
+      // Set a token and the follow up request should have the header injected by prepareHeaders
+      const token = 'fakeToken!'
+      storeRef.store.dispatch(authSlice.actions.setToken(token))
+      ;({ data: request } = await doRequest())
+
+      expect(request.headers['authorization']).toBe(`Bearer ${token}`)
+    })
+
+    test('prepareHeaders provides extra api information for getState, extra, endpoint, type and forced', async () => {
+      let _getState, _arg: any, _extra, _endpoint, _type, _forced
+
+      const baseQuery = fetchBaseQuery({
+        baseUrl,
+        fetchFn: fetchFn as any,
+        prepareHeaders: (
+          headers,
+          { getState, arg, extra, endpoint, type, forced },
+        ) => {
+          _getState = getState
+          _arg = arg
+          _endpoint = endpoint
+          _type = type
+          _forced = forced
+          _extra = extra
+
+          return headers
+        },
+      })
+
+      const fakeAuth0Client = {
+        getTokenSilently: async () => 'fakeToken',
+      }
+
+      const doRequest = async () => {
+        const abortController = new AbortController()
+        return baseQuery(
+          { url: '/echo' },
+          {
+            signal: abortController.signal,
+            abort: (reason) =>
+              // @ts-ignore
+              abortController.abort(reason),
+            dispatch: storeRef.store.dispatch,
+            getState: storeRef.store.getState,
+            extra: fakeAuth0Client,
+            type: 'query',
+            forced: true,
+            endpoint: 'someEndpointName',
+          },
+          {},
+        )
+      }
+
+      await doRequest()
+
+      expect(_getState).toBeDefined()
+      expect(_arg!.url).toBe('/echo')
+      expect(_endpoint).toBe('someEndpointName')
+      expect(_type).toBe('query')
+      expect(_forced).toBe(true)
+      expect(_extra).toBe(fakeAuth0Client)
+    })
+
+    test('can be instantiated with a `ExtraOptions` generic and `extraOptions` will be available in `prepareHeaders', async () => {
+      const prepare = vitest.fn()
+      const baseQuery = fetchBaseQuery({
+        prepareHeaders(headers, api) {
+          expectTypeOf(api.extraOptions).toEqualTypeOf<unknown>()
+          prepare.apply(undefined, arguments as unknown as any[])
+        },
+      })
+      baseQuery('https://example.com', commonBaseQueryApi, {
+        foo: 'baz',
+        bar: 5,
+      })
+      expect(prepare).toHaveBeenCalledWith(
+        expect.anything(),
+        expect.objectContaining({ extraOptions: { foo: 'baz', bar: 5 } }),
+      )
+
+      // ensure types
+      createApi({
+        baseQuery,
+        endpoints(build) {
+          return {
+            testQuery: build.query({
+              query: () => ({ url: '/echo', headers: {} }),
+              extraOptions: {
+                foo: 'asd',
+                bar: 1,
+              },
+            }),
+            testMutation: build.mutation({
+              query: () => ({
+                url: '/echo',
+                method: 'POST',
+                credentials: 'omit',
+              }),
+              extraOptions: {
+                foo: 'qwe',
+                bar: 15,
+              },
+            }),
+          }
+        },
+      })
+    })
+  })
+
+  test('can pass `headers` into `fetchBaseQuery`', async () => {
+    let request: any
+
+    const token = 'accessToken'
+
+    const _baseQuery = fetchBaseQuery({
+      baseUrl,
+      headers: { authorization: `Bearer ${token}` },
+    })
+
+    const doRequest = async () =>
+      _baseQuery({ url: '/echo' }, commonBaseQueryApi, {})
+
+    ;({ data: request } = await doRequest())
+
+    expect(request.headers['authorization']).toBe(`Bearer ${token}`)
+  })
+
+  test('lets a header be undefined', async () => {
+    let request: any
+    ;({ data: request } = await baseQuery(
+      { url: '/echo', headers: undefined },
+      commonBaseQueryApi,
+      {},
+    ))
+
+    expect(request.headers['fake']).toBe(defaultHeaders['fake'])
+    expect(request.headers['delete']).toBe(defaultHeaders['delete'])
+    expect(request.headers['delete2']).toBe(defaultHeaders['delete2'])
+  })
+
+  test('allows for possibly undefined header key/values', async () => {
+    const banana = '1' as '1' | undefined
+    let request: any
+    ;({ data: request } = await baseQuery(
+      { url: '/echo', headers: { banana } },
+      commonBaseQueryApi,
+      {},
+    ))
+
+    expect(request.headers['banana']).toBe('1')
+    expect(request.headers['fake']).toBe(defaultHeaders['fake'])
+    expect(request.headers['delete']).toBe(defaultHeaders['delete'])
+    expect(request.headers['delete2']).toBe(defaultHeaders['delete2'])
+  })
+
+  test('strips undefined values from the headers', async () => {
+    const banana = undefined as '1' | undefined
+    let request: any
+    ;({ data: request } = await baseQuery(
+      { url: '/echo', headers: { banana } },
+      commonBaseQueryApi,
+      {},
+    ))
+
+    expect(request.headers['banana']).toBeUndefined()
+    expect(request.headers['fake']).toBe(defaultHeaders['fake'])
+    expect(request.headers['delete']).toBe(defaultHeaders['delete'])
+    expect(request.headers['delete2']).toBe(defaultHeaders['delete2'])
+  })
+
+  describe('Accepts global arguments', () => {
+    test('Global responseHandler', async () => {
+      server.use(
+        http.get(
+          'https://example.com/success',
+          () => HttpResponse.text(`this is not json!`),
+          { once: true },
+        ),
+      )
+
+      const globalizedBaseQuery = fetchBaseQuery({
+        baseUrl,
+        fetchFn: fetchFn as any,
+        responseHandler: 'text',
+      })
+
+      const req = globalizedBaseQuery(
+        { url: '/success' },
+        commonBaseQueryApi,
+        {},
+      )
+      expect(req).toBeInstanceOf(Promise)
+      const res = await req
+      expect(res).toBeInstanceOf(Object)
+      expect(res.meta?.request).toBeInstanceOf(Request)
+      expect(res.meta?.response).toBeInstanceOf(Object)
+      expect(res.error).toBeUndefined()
+      expect(res.data).toEqual(`this is not json!`)
+    })
+
+    test('Global validateStatus', async () => {
+      const globalizedBaseQuery = fetchBaseQuery({
+        baseUrl,
+        fetchFn: fetchFn as any,
+        validateStatus: (response, body) =>
+          response.status === 200 && body.success === false ? false : true,
+      })
+
+      // This is a scenario where an API may always return a 200, but indicates there is an error when success = false
+      const res = await globalizedBaseQuery(
+        {
+          url: '/nonstandard-error',
+        },
+        commonBaseQueryApi,
+        {},
+      )
+
+      expect(res.error).toEqual({
+        status: 200,
+        data: {
+          success: false,
+          message: 'This returns a 200 but is really an error',
+        },
+      })
+    })
+
+    test('Global timeout', async () => {
+      server.use(
+        http.get(
+          'https://example.com/empty1',
+          async ({ request, cookies, params, requestId }) => {
+            await delay(300)
+
+            return HttpResponse.json({
+              ...request,
+              cookies,
+              params,
+              requestId,
+              url: new URL(request.url),
+              headers: headersToObject(request.headers),
+            })
+          },
+          { once: true },
+        ),
+      )
+
+      const globalizedBaseQuery = fetchBaseQuery({
+        baseUrl,
+        fetchFn: fetchFn as any,
+        timeout: 200,
+      })
+
+      const result = await globalizedBaseQuery(
+        { url: '/empty1' },
+        commonBaseQueryApi,
+        {},
+      )
+
+      expect(result?.error).toEqual({
+        status: 'TIMEOUT_ERROR',
+        error: expect.stringMatching(/^AbortError:/),
+      })
+    })
+  })
+})
+
+describe('fetchFn', () => {
+  test('accepts a custom fetchFn', async () => {
+    const baseUrl = 'https://example.com'
+    const params = new URLSearchParams({ apple: 'fruit' })
+
+    const baseQuery = fetchBaseQuery({
+      baseUrl,
+      fetchFn: nodeFetch as any,
+    })
+    let request: any
+    ;({ data: request } = await baseQuery(
+      { url: '/echo', params },
+      commonBaseQueryApi,
+      {},
+    ))
+
+    expect(request.url).toEqual(`${baseUrl}/echo?apple=fruit`)
+  })
+
+  test('respects mocking window.fetch after a fetch base query is created', async () => {
+    const baseUrl = 'https://example.com'
+    const baseQuery = fetchBaseQuery({ baseUrl })
+
+    const fakeResponse = {
+      ok: true,
+      status: 200,
+      text: async () => `{ "url": "mock-return-url" }`,
+      clone: () => fakeResponse,
+    }
+
+    const spiedFetch = vi.spyOn(window, 'fetch')
+    spiedFetch.mockResolvedValueOnce(fakeResponse as any)
+
+    const { data } = await baseQuery({ url: '/echo' }, commonBaseQueryApi, {})
+    expect(data).toEqual({ url: 'mock-return-url' })
+
+    spiedFetch.mockClear()
+  })
+})
+
+describe('FormData', () => {
+  test('sets the right headers when sending FormData', async () => {
+    const body = new FormData()
+
+    body.append('username', 'test')
+
+    body.append(
+      'file',
+      new Blob([JSON.stringify({ hello: 'there' }, null, 2)], {
+        type: 'application/json',
+      }),
+    )
+
+    const res = await baseQuery(
+      { url: '/echo', method: 'POST', body },
+      commonBaseQueryApi,
+      {},
+    )
+
+    const request: any = res.data
+
+    expect(request.headers['content-type']).not.toContain('application/json')
+  })
+})
+
+describe('still throws on completely unexpected errors', () => {
+  test('', async () => {
+    const error = new Error('some unexpected error')
+    const req = baseQuery(
+      {
+        url: '/success',
+        validateStatus() {
+          throw error
+        },
+      },
+      commonBaseQueryApi,
+      {},
+    )
+    expect(req).toBeInstanceOf(Promise)
+    await expect(req).rejects.toBe(error)
+  })
+})
+
+describe('timeout', () => {
+  test('throws a timeout error when a request takes longer than specified timeout duration', async () => {
+    server.use(
+      http.get(
+        'https://example.com/empty2',
+        async ({ request, cookies, params, requestId }) => {
+          await delay(300)
+
+          return HttpResponse.json({
+            ...request,
+            url: new URL(request.url),
+            cookies,
+            params,
+            requestId,
+            headers: headersToObject(request.headers),
+          })
+        },
+        { once: true },
+      ),
+    )
+
+    const result = await baseQuery(
+      { url: '/empty2', timeout: 200 },
+      commonBaseQueryApi,
+      {},
+    )
+
+    expect(result?.error).toEqual({
+      status: 'TIMEOUT_ERROR',
+      error: expect.stringMatching(/^AbortError:/),
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/infiniteQueries.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/infiniteQueries.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/infiniteQueries.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,169 @@
+import type { skipToken, InfiniteData } from '@reduxjs/toolkit/query/react'
+import {
+  createApi,
+  fetchBaseQuery,
+  QueryStatus,
+} from '@reduxjs/toolkit/query/react'
+import { setupApiStore } from '../../tests/utils/helpers'
+import { createSlice } from '@internal/createSlice'
+
+describe('Infinite queries', () => {
+  test('Basic infinite query behavior', async () => {
+    type Pokemon = {
+      id: string
+      name: string
+    }
+
+    const pokemonApi = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+      endpoints: (build) => ({
+        getInfinitePokemon: build.infiniteQuery<Pokemon[], string, number>({
+          infiniteQueryOptions: {
+            initialPageParam: 0,
+            getNextPageParam: (
+              lastPage,
+              allPages,
+              lastPageParam,
+              allPageParams,
+              queryArg,
+            ) => {
+              expectTypeOf(lastPage).toEqualTypeOf<Pokemon[]>()
+
+              expectTypeOf(allPages).toEqualTypeOf<Pokemon[][]>()
+
+              expectTypeOf(lastPageParam).toBeNumber()
+
+              expectTypeOf(allPageParams).toEqualTypeOf<number[]>()
+
+              expectTypeOf(queryArg).toBeString()
+
+              return lastPageParam + 1
+            },
+          },
+          query({ pageParam, queryArg }) {
+            expectTypeOf(pageParam).toBeNumber()
+            expectTypeOf(queryArg).toBeString()
+
+            return `https://example.com/listItems?page=${pageParam}`
+          },
+          async onCacheEntryAdded(arg, api) {
+            const data = await api.cacheDataLoaded
+            expectTypeOf(data.data).toEqualTypeOf<
+              InfiniteData<Pokemon[], number>
+            >()
+          },
+          async onQueryStarted(arg, api) {
+            const data = await api.queryFulfilled
+            expectTypeOf(data.data).toEqualTypeOf<
+              InfiniteData<Pokemon[], number>
+            >()
+          },
+          providesTags: (result) => {
+            expectTypeOf(result).toEqualTypeOf<
+              InfiniteData<Pokemon[], number> | undefined
+            >()
+            return []
+          },
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(pokemonApi, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    expectTypeOf(pokemonApi.endpoints.getInfinitePokemon.initiate)
+      .parameter(0)
+      .toBeString()
+
+    expectTypeOf(pokemonApi.useGetInfinitePokemonInfiniteQuery).toBeFunction()
+
+    expectTypeOf(pokemonApi.endpoints.getInfinitePokemon.useInfiniteQuery)
+      .parameter(0)
+      .toEqualTypeOf<string | typeof skipToken>()
+
+    expectTypeOf(pokemonApi.endpoints.getInfinitePokemon.useInfiniteQueryState)
+      .parameter(0)
+      .toEqualTypeOf<string | typeof skipToken>()
+
+    expectTypeOf(
+      pokemonApi.endpoints.getInfinitePokemon.useInfiniteQuerySubscription,
+    )
+      .parameter(0)
+      .toEqualTypeOf<string | typeof skipToken>()
+
+    const slice = createSlice({
+      name: 'pokemon',
+      initialState: {} as { data: Pokemon[] },
+      reducers: {},
+      extraReducers: (builder) => {
+        builder.addMatcher(
+          pokemonApi.endpoints.getInfinitePokemon.matchFulfilled,
+          (state, action) => {
+            expectTypeOf(action.payload).toEqualTypeOf<
+              InfiniteData<Pokemon[], number>
+            >()
+          },
+        )
+      },
+    })
+
+    const res = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {}),
+    )
+
+    const firstResult = await res
+
+    if (firstResult.status === QueryStatus.fulfilled) {
+      expectTypeOf(firstResult.data.pages).toEqualTypeOf<Pokemon[][]>()
+      expectTypeOf(firstResult.data.pageParams).toEqualTypeOf<number[]>()
+    }
+
+    storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {
+        direction: 'forward',
+      }),
+    )
+
+    const useGetInfinitePokemonQuery =
+      pokemonApi.endpoints.getInfinitePokemon.useInfiniteQuery
+
+    expectTypeOf(useGetInfinitePokemonQuery)
+      .parameter(0)
+      .toEqualTypeOf<string | typeof skipToken>()
+
+    function PokemonList() {
+      const {
+        data,
+        currentData,
+        isFetching,
+        isUninitialized,
+        isSuccess,
+        fetchNextPage,
+      } = useGetInfinitePokemonQuery('a')
+
+      expectTypeOf(data).toEqualTypeOf<
+        InfiniteData<Pokemon[], number> | undefined
+      >()
+
+      if (isSuccess) {
+        expectTypeOf(data.pages).toEqualTypeOf<Pokemon[][]>()
+        expectTypeOf(data.pageParams).toEqualTypeOf<number[]>()
+      }
+
+      if (currentData) {
+        expectTypeOf(currentData.pages).toEqualTypeOf<Pokemon[][]>()
+        expectTypeOf(currentData.pageParams).toEqualTypeOf<number[]>()
+      }
+
+      const handleClick = async () => {
+        const res = await fetchNextPage()
+
+        if (res.status === QueryStatus.fulfilled) {
+          expectTypeOf(res.data.pages).toEqualTypeOf<Pokemon[][]>()
+          expectTypeOf(res.data.pageParams).toEqualTypeOf<number[]>()
+        }
+      }
+    }
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/infiniteQueries.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/infiniteQueries.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/infiniteQueries.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1008 @@
+import { server } from '@internal/query/tests/mocks/server'
+import type { InfiniteQueryActionCreatorResult } from '@reduxjs/toolkit/query/react'
+import {
+  QueryStatus,
+  createApi,
+  fakeBaseQuery,
+  fetchBaseQuery,
+} from '@reduxjs/toolkit/query/react'
+import { HttpResponse, delay, http } from 'msw'
+import { actionsReducer, setupApiStore } from '../../tests/utils/helpers'
+import type { InfiniteQueryResultFlags } from '../core/buildSelectors'
+
+describe('Infinite queries', () => {
+  type Pokemon = {
+    id: string
+    name: string
+  }
+
+  let counters: Record<string, number> = {}
+  let queryCounter = 0
+
+  const pokemonApi = createApi({
+    baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+    endpoints: (build) => ({
+      getInfinitePokemon: build.infiniteQuery<Pokemon[], string, number>({
+        infiniteQueryOptions: {
+          initialPageParam: 0,
+          getNextPageParam: (
+            lastPage,
+            allPages,
+            lastPageParam,
+            allPageParams,
+            queryArg,
+          ) => {
+            expect(typeof queryArg).toBe('string')
+            return lastPageParam + 1
+          },
+          getPreviousPageParam: (
+            firstPage,
+            allPages,
+            firstPageParam,
+            allPageParams,
+            queryArg,
+          ) => {
+            expect(typeof queryArg).toBe('string')
+            return firstPageParam > 0 ? firstPageParam - 1 : undefined
+          },
+        },
+        query({ pageParam }) {
+          return `https://example.com/listItems?page=${pageParam}`
+        },
+      }),
+      getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>(
+        {
+          infiniteQueryOptions: {
+            initialPageParam: 0,
+            maxPages: 3,
+            getNextPageParam: (
+              lastPage,
+              allPages,
+              lastPageParam,
+              allPageParams,
+            ) => lastPageParam + 1,
+            getPreviousPageParam: (
+              firstPage,
+              allPages,
+              firstPageParam,
+              allPageParams,
+            ) => {
+              return firstPageParam > 0 ? firstPageParam - 1 : undefined
+            },
+          },
+          query({ pageParam }) {
+            return `https://example.com/listItems?page=${pageParam}`
+          },
+        },
+      ),
+      counters: build.query<{ id: string; counter: number }, string>({
+        queryFn: async (arg) => {
+          if (!(arg in counters)) {
+            counters[arg] = 0
+          }
+          counters[arg]++
+
+          return { data: { id: arg, counter: counters[arg] } }
+        },
+      }),
+    }),
+  })
+
+  let hitCounter = 0
+
+  type HitCounter = { page: number; hitCounter: number }
+
+  const countersApi = createApi({
+    baseQuery: fakeBaseQuery(),
+    tagTypes: ['Counter'],
+    endpoints: (build) => ({
+      counters: build.infiniteQuery<HitCounter, string, number>({
+        queryFn({ pageParam }) {
+          hitCounter++
+
+          return { data: { page: pageParam, hitCounter } }
+        },
+        infiniteQueryOptions: {
+          initialPageParam: 0,
+          getNextPageParam: (
+            lastPage,
+            allPages,
+            lastPageParam,
+            allPageParams,
+          ) => lastPageParam + 1,
+        },
+        providesTags: ['Counter'],
+      }),
+      mutation: build.mutation<null, void>({
+        queryFn: async () => {
+          return { data: null }
+        },
+        invalidatesTags: ['Counter'],
+      }),
+    }),
+  })
+
+  let storeRef = setupApiStore(
+    pokemonApi,
+    { ...actionsReducer },
+    {
+      withoutTestLifecycles: true,
+    },
+  )
+
+  beforeEach(() => {
+    server.use(
+      http.get('https://example.com/listItems', ({ request }) => {
+        const url = new URL(request.url)
+        const pageString = url.searchParams.get('page')
+        const pageNum = parseInt(pageString || '0')
+        queryCounter++
+
+        const results: Pokemon[] = [
+          { id: `${pageNum}`, name: `Pokemon ${pageNum}` },
+        ]
+        return HttpResponse.json(results)
+      }),
+    )
+
+    storeRef = setupApiStore(
+      pokemonApi,
+      { ...actionsReducer },
+      {
+        withoutTestLifecycles: true,
+      },
+    )
+
+    counters = {}
+
+    hitCounter = 0
+    queryCounter = 0
+  })
+
+  type InfiniteQueryResult = Awaited<InfiniteQueryActionCreatorResult<any>>
+
+  const checkResultData = (
+    result: InfiniteQueryResult,
+    expectedValues: Pokemon[][],
+  ) => {
+    expect(result.status).toBe(QueryStatus.fulfilled)
+    if (result.status === QueryStatus.fulfilled) {
+      expect(result.data.pages).toEqual(expectedValues)
+    }
+  }
+
+  const checkResultLength = (
+    result: InfiniteQueryResult,
+    expectedLength: number,
+  ) => {
+    expect(result.status).toBe(QueryStatus.fulfilled)
+    if (result.status === QueryStatus.fulfilled) {
+      expect(result.data.pages).toHaveLength(expectedLength)
+    }
+  }
+
+  test('Basic infinite query behavior', async () => {
+    const checkFlags = (
+      value: unknown,
+      expectedFlags: Partial<InfiniteQueryResultFlags>,
+    ) => {
+      const actualFlags: InfiniteQueryResultFlags = {
+        hasNextPage: false,
+        hasPreviousPage: false,
+        isFetchingNextPage: false,
+        isFetchingPreviousPage: false,
+        isFetchNextPageError: false,
+        isFetchPreviousPageError: false,
+        ...expectedFlags,
+      }
+
+      expect(value).toMatchObject(actualFlags)
+    }
+
+    const checkEntryFlags = (
+      arg: string,
+      expectedFlags: Partial<InfiniteQueryResultFlags>,
+    ) => {
+      const selector = pokemonApi.endpoints.getInfinitePokemon.select(arg)
+      const entry = selector(storeRef.store.getState())
+
+      checkFlags(entry, expectedFlags)
+    }
+
+    const res1 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {}),
+    )
+
+    checkEntryFlags('fire', {})
+
+    const entry1InitialLoad = await res1
+
+    checkResultData(entry1InitialLoad, [[{ id: '0', name: 'Pokemon 0' }]])
+    checkFlags(entry1InitialLoad, {
+      hasNextPage: true,
+    })
+
+    const res2 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {
+        direction: 'forward',
+      }),
+    )
+
+    checkEntryFlags('fire', {
+      hasNextPage: true,
+      isFetchingNextPage: true,
+    })
+
+    const entry1SecondPage = await res2
+
+    checkResultData(entry1SecondPage, [
+      [{ id: '0', name: 'Pokemon 0' }],
+      [{ id: '1', name: 'Pokemon 1' }],
+    ])
+    checkFlags(entry1SecondPage, {
+      hasNextPage: true,
+    })
+
+    const res3 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {
+        direction: 'backward',
+      }),
+    )
+
+    checkEntryFlags('fire', {
+      hasNextPage: true,
+      isFetchingPreviousPage: true,
+    })
+
+    const entry1PrevPageMissing = await res3
+
+    checkResultData(entry1PrevPageMissing, [
+      [{ id: '0', name: 'Pokemon 0' }],
+      [{ id: '1', name: 'Pokemon 1' }],
+    ])
+    checkFlags(entry1PrevPageMissing, {
+      hasNextPage: true,
+    })
+
+    const res4 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('water', {
+        initialPageParam: 3,
+      }),
+    )
+
+    checkEntryFlags('water', {})
+
+    const entry2InitialLoad = await res4
+
+    checkResultData(entry2InitialLoad, [[{ id: '3', name: 'Pokemon 3' }]])
+    checkFlags(entry2InitialLoad, {
+      hasNextPage: true,
+      hasPreviousPage: true,
+    })
+
+    const res5 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('water', {
+        direction: 'forward',
+      }),
+    )
+
+    checkEntryFlags('water', {
+      hasNextPage: true,
+      hasPreviousPage: true,
+      isFetchingNextPage: true,
+    })
+
+    const entry2NextPage = await res5
+
+    checkResultData(entry2NextPage, [
+      [{ id: '3', name: 'Pokemon 3' }],
+      [{ id: '4', name: 'Pokemon 4' }],
+    ])
+    checkFlags(entry2NextPage, {
+      hasNextPage: true,
+      hasPreviousPage: true,
+    })
+
+    const res6 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('water', {
+        direction: 'backward',
+      }),
+    )
+
+    checkEntryFlags('water', {
+      hasNextPage: true,
+      hasPreviousPage: true,
+      isFetchingPreviousPage: true,
+    })
+
+    const entry2PrevPage = await res6
+
+    checkResultData(entry2PrevPage, [
+      [{ id: '2', name: 'Pokemon 2' }],
+      [{ id: '3', name: 'Pokemon 3' }],
+      [{ id: '4', name: 'Pokemon 4' }],
+    ])
+    checkFlags(entry2PrevPage, {
+      hasNextPage: true,
+      hasPreviousPage: true,
+    })
+  })
+
+  test('does not have a page limit without maxPages', async () => {
+    for (let i = 1; i <= 10; i++) {
+      const res = await storeRef.store.dispatch(
+        pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {
+          direction: 'forward',
+        }),
+      )
+
+      checkResultLength(res, i)
+    }
+  })
+
+  test('applies a page limit with maxPages', async () => {
+    for (let i = 1; i <= 10; i++) {
+      const res = await storeRef.store.dispatch(
+        pokemonApi.endpoints.getInfinitePokemonWithMax.initiate('fire', {
+          direction: 'forward',
+        }),
+      )
+
+      checkResultLength(res, Math.min(i, 3))
+    }
+
+    // Should now have entries 7, 8, 9 after the loop
+
+    const res = await storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemonWithMax.initiate('fire', {
+        direction: 'backward',
+      }),
+    )
+
+    checkResultData(res, [
+      [{ id: '6', name: 'Pokemon 6' }],
+      [{ id: '7', name: 'Pokemon 7' }],
+      [{ id: '8', name: 'Pokemon 8' }],
+    ])
+  })
+
+  test('validates maxPages during createApi call', async () => {
+    vi.stubEnv('NODE_ENV', 'development')
+
+    const createApiWithMaxPages = (
+      maxPages: number,
+      getPreviousPageParam: (() => number) | undefined,
+    ) => {
+      createApi({
+        baseQuery: fakeBaseQuery(),
+        endpoints: (build) => ({
+          getInfinitePokemon: build.infiniteQuery<Pokemon[], string, number>({
+            query(pageParam) {
+              return `https://example.com/listItems?page=${pageParam}`
+            },
+            infiniteQueryOptions: {
+              initialPageParam: 0,
+              maxPages,
+              getNextPageParam: () => 1,
+              getPreviousPageParam,
+            },
+          }),
+        }),
+      })
+    }
+
+    expect(() => createApiWithMaxPages(0, () => 0)).toThrowError(
+      `maxPages for endpoint 'getInfinitePokemon' must be a number greater than 0`,
+    )
+
+    expect(() => createApiWithMaxPages(1, undefined)).toThrowError(
+      `getPreviousPageParam for endpoint 'getInfinitePokemon' must be a function if maxPages is used`,
+    )
+  })
+
+  test('refetches all existing pages', async () => {
+    const checkResultData = (
+      result: InfiniteQueryResult,
+      expectedValues: HitCounter[],
+    ) => {
+      expect(result.status).toBe(QueryStatus.fulfilled)
+      if (result.status === QueryStatus.fulfilled) {
+        expect(result.data.pages).toEqual(expectedValues)
+      }
+    }
+
+    const storeRef = setupApiStore(
+      countersApi,
+      { ...actionsReducer },
+      {
+        withoutTestLifecycles: true,
+      },
+    )
+
+    await storeRef.store.dispatch(
+      countersApi.endpoints.counters.initiate('item', {
+        initialPageParam: 3,
+      }),
+    )
+
+    await storeRef.store.dispatch(
+      countersApi.endpoints.counters.initiate('item', {
+        direction: 'forward',
+      }),
+    )
+
+    const thirdPromise = storeRef.store.dispatch(
+      countersApi.endpoints.counters.initiate('item', {
+        direction: 'forward',
+      }),
+    )
+
+    const thirdRes = await thirdPromise
+
+    checkResultData(thirdRes, [
+      { page: 3, hitCounter: 1 },
+      { page: 4, hitCounter: 2 },
+      { page: 5, hitCounter: 3 },
+    ])
+
+    const fourthRes = await thirdPromise.refetch()
+
+    checkResultData(fourthRes, [
+      { page: 3, hitCounter: 4 },
+      { page: 4, hitCounter: 5 },
+      { page: 5, hitCounter: 6 },
+    ])
+  })
+
+  test('Refetches on invalidation', async () => {
+    const checkResultData = (
+      result: InfiniteQueryResult,
+      expectedValues: HitCounter[],
+    ) => {
+      expect(result.status).toBe(QueryStatus.fulfilled)
+      if (result.status === QueryStatus.fulfilled) {
+        expect(result.data.pages).toEqual(expectedValues)
+      }
+    }
+
+    const storeRef = setupApiStore(
+      countersApi,
+      { ...actionsReducer },
+      {
+        withoutTestLifecycles: true,
+      },
+    )
+
+    await storeRef.store.dispatch(
+      countersApi.endpoints.counters.initiate('item', {
+        initialPageParam: 3,
+      }),
+    )
+
+    await storeRef.store.dispatch(
+      countersApi.endpoints.counters.initiate('item', {
+        direction: 'forward',
+      }),
+    )
+
+    const thirdPromise = storeRef.store.dispatch(
+      countersApi.endpoints.counters.initiate('item', {
+        direction: 'forward',
+      }),
+    )
+
+    const thirdRes = await thirdPromise
+
+    checkResultData(thirdRes, [
+      { page: 3, hitCounter: 1 },
+      { page: 4, hitCounter: 2 },
+      { page: 5, hitCounter: 3 },
+    ])
+
+    await storeRef.store.dispatch(countersApi.endpoints.mutation.initiate())
+
+    let entry = countersApi.endpoints.counters.select('item')(
+      storeRef.store.getState(),
+    )
+    const promise = storeRef.store.dispatch(
+      countersApi.util.getRunningQueryThunk('counters', 'item'),
+    )
+    const promises = storeRef.store.dispatch(
+      countersApi.util.getRunningQueriesThunk(),
+    )
+    expect(entry).toMatchObject({
+      status: 'pending',
+    })
+
+    expect(promise).toBeInstanceOf(Promise)
+
+    expect(promises).toEqual([promise])
+
+    const finalRes = await promise
+
+    checkResultData(finalRes as any, [
+      { page: 3, hitCounter: 4 },
+      { page: 4, hitCounter: 5 },
+      { page: 5, hitCounter: 6 },
+    ])
+  })
+
+  test('Refetches on polling', async () => {
+    const checkResultData = (
+      result: InfiniteQueryResult,
+      expectedValues: HitCounter[],
+    ) => {
+      expect(result.status).toBe(QueryStatus.fulfilled)
+      if (result.status === QueryStatus.fulfilled) {
+        expect(result.data.pages).toEqual(expectedValues)
+      }
+    }
+
+    const storeRef = setupApiStore(
+      countersApi,
+      { ...actionsReducer },
+      {
+        withoutTestLifecycles: true,
+      },
+    )
+
+    await storeRef.store.dispatch(
+      countersApi.endpoints.counters.initiate('item', {
+        initialPageParam: 3,
+      }),
+    )
+
+    await storeRef.store.dispatch(
+      countersApi.endpoints.counters.initiate('item', {
+        direction: 'forward',
+      }),
+    )
+
+    const thirdPromise = storeRef.store.dispatch(
+      countersApi.endpoints.counters.initiate('item', {
+        direction: 'forward',
+      }),
+    )
+
+    const thirdRes = await thirdPromise
+
+    checkResultData(thirdRes, [
+      { page: 3, hitCounter: 1 },
+      { page: 4, hitCounter: 2 },
+      { page: 5, hitCounter: 3 },
+    ])
+
+    thirdPromise.updateSubscriptionOptions({
+      pollingInterval: 50,
+    })
+
+    await delay(25)
+
+    let entry = countersApi.endpoints.counters.select('item')(
+      storeRef.store.getState(),
+    )
+
+    checkResultData(thirdRes, [
+      { page: 3, hitCounter: 1 },
+      { page: 4, hitCounter: 2 },
+      { page: 5, hitCounter: 3 },
+    ])
+
+    await delay(50)
+
+    entry = countersApi.endpoints.counters.select('item')(
+      storeRef.store.getState(),
+    )
+
+    checkResultData(entry as any, [
+      { page: 3, hitCounter: 4 },
+      { page: 4, hitCounter: 5 },
+      { page: 5, hitCounter: 6 },
+    ])
+  })
+
+  test('Handles multiple next page fetches at once', async () => {
+    const initialEntry = await storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {}),
+    )
+
+    checkResultData(initialEntry, [[{ id: '0', name: 'Pokemon 0' }]])
+
+    expect(queryCounter).toBe(1)
+
+    const promise1 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {
+        direction: 'forward',
+      }),
+    )
+
+    expect(queryCounter).toBe(1)
+
+    const promise2 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {
+        direction: 'forward',
+      }),
+    )
+
+    const entry1 = await promise1
+    const entry2 = await promise2
+
+    // The second thunk should have bailed out because the entry was now
+    // pending, so we should only have sent one request.
+    expect(queryCounter).toBe(2)
+
+    expect(entry1).toEqual(entry2)
+
+    checkResultData(entry1, [
+      [{ id: '0', name: 'Pokemon 0' }],
+      [{ id: '1', name: 'Pokemon 1' }],
+    ])
+
+    expect(queryCounter).toBe(2)
+
+    const promise3 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {
+        direction: 'forward',
+      }),
+    )
+
+    expect(queryCounter).toBe(2)
+
+    // We can abort an existing promise, but due to timing issues,
+    // we have to await the promise first before triggering the next request.
+    promise3.abort()
+    const entry3 = await promise3
+
+    const promise4 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {
+        direction: 'forward',
+      }),
+    )
+
+    const entry4 = await promise4
+
+    expect(queryCounter).toBe(4)
+
+    checkResultData(entry4, [
+      [{ id: '0', name: 'Pokemon 0' }],
+      [{ id: '1', name: 'Pokemon 1' }],
+      [{ id: '2', name: 'Pokemon 2' }],
+    ])
+  })
+
+  test('can fetch pages with refetchOnMountOrArgChange active', async () => {
+    const pokemonApiWithRefetch = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+      endpoints: (build) => ({
+        getInfinitePokemon: build.infiniteQuery<Pokemon[], string, number>({
+          infiniteQueryOptions: {
+            initialPageParam: 0,
+            getNextPageParam: (
+              lastPage,
+              allPages,
+              // Page param type should be `number`
+              lastPageParam,
+              allPageParams,
+            ) => lastPageParam + 1,
+            getPreviousPageParam: (
+              firstPage,
+              allPages,
+              firstPageParam,
+              allPageParams,
+            ) => {
+              return firstPageParam > 0 ? firstPageParam - 1 : undefined
+            },
+          },
+          query({ pageParam }) {
+            return `https://example.com/listItems?page=${pageParam}`
+          },
+        }),
+      }),
+      refetchOnMountOrArgChange: true,
+    })
+
+    const storeRef = setupApiStore(
+      pokemonApiWithRefetch,
+      { ...actionsReducer },
+      {
+        withoutTestLifecycles: true,
+      },
+    )
+
+    const res1 = storeRef.store.dispatch(
+      pokemonApiWithRefetch.endpoints.getInfinitePokemon.initiate('fire', {}),
+    )
+
+    const entry1InitialLoad = await res1
+    checkResultData(entry1InitialLoad, [[{ id: '0', name: 'Pokemon 0' }]])
+
+    const res2 = storeRef.store.dispatch(
+      pokemonApiWithRefetch.endpoints.getInfinitePokemon.initiate('fire', {
+        direction: 'forward',
+      }),
+    )
+
+    const entry1SecondPage = await res2
+    checkResultData(entry1SecondPage, [
+      [{ id: '0', name: 'Pokemon 0' }],
+      [{ id: '1', name: 'Pokemon 1' }],
+    ])
+
+    expect(queryCounter).toBe(2)
+
+    const entry2InitialLoad = await storeRef.store.dispatch(
+      pokemonApiWithRefetch.endpoints.getInfinitePokemon.initiate('water', {}),
+    )
+
+    checkResultData(entry2InitialLoad, [[{ id: '0', name: 'Pokemon 0' }]])
+
+    expect(queryCounter).toBe(3)
+
+    const entry2SecondPage = await storeRef.store.dispatch(
+      pokemonApiWithRefetch.endpoints.getInfinitePokemon.initiate('water', {
+        direction: 'forward',
+      }),
+    )
+    checkResultData(entry2SecondPage, [
+      [{ id: '0', name: 'Pokemon 0' }],
+      [{ id: '1', name: 'Pokemon 1' }],
+    ])
+
+    expect(queryCounter).toBe(4)
+
+    // Should now be able to switch back to the first query.
+    // The hooks dispatch on arg change without a direction.
+    // That should trigger a refetch of the first query, meaning two requests.
+    // It should also _replace_ the existing results, rather than appending
+    // duplicate entries ([0, 1, 0, 1])
+    const entry1Refetched = await storeRef.store.dispatch(
+      pokemonApiWithRefetch.endpoints.getInfinitePokemon.initiate('fire', {}),
+    )
+
+    checkResultData(entry1Refetched, [
+      [{ id: '0', name: 'Pokemon 0' }],
+      [{ id: '1', name: 'Pokemon 1' }],
+    ])
+
+    expect(queryCounter).toBe(6)
+  })
+
+  test('Works with cache manipulation utils', async () => {
+    const res1 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('fire', {}),
+    )
+
+    const entry1InitialLoad = await res1
+    checkResultData(entry1InitialLoad, [[{ id: '0', name: 'Pokemon 0' }]])
+
+    storeRef.store.dispatch(
+      pokemonApi.util.updateQueryData('getInfinitePokemon', 'fire', (draft) => {
+        draft.pages.push([{ id: '1', name: 'Pokemon 1' }])
+        draft.pageParams.push(1)
+      }),
+    )
+
+    const selectFire = pokemonApi.endpoints.getInfinitePokemon.select('fire')
+    const entry1Updated = selectFire(storeRef.store.getState())
+
+    expect(entry1Updated.data).toEqual({
+      pages: [
+        [{ id: '0', name: 'Pokemon 0' }],
+        [{ id: '1', name: 'Pokemon 1' }],
+      ],
+      pageParams: [0, 1],
+    })
+
+    const res2 = storeRef.store.dispatch(
+      pokemonApi.util.upsertQueryData('getInfinitePokemon', 'water', {
+        pages: [[{ id: '2', name: 'Pokemon 2' }]],
+        pageParams: [2],
+      }),
+    )
+
+    const entry2InitialLoad = await res2
+    const selectWater = pokemonApi.endpoints.getInfinitePokemon.select('water')
+    const entry2Updated = selectWater(storeRef.store.getState())
+
+    expect(entry2Updated.data).toEqual({
+      pages: [[{ id: '2', name: 'Pokemon 2' }]],
+      pageParams: [2],
+    })
+
+    storeRef.store.dispatch(
+      pokemonApi.util.upsertQueryEntries([
+        {
+          endpointName: 'getInfinitePokemon',
+          arg: 'air',
+          value: {
+            pages: [[{ id: '3', name: 'Pokemon 3' }]],
+            pageParams: [3],
+          },
+        },
+      ]),
+    )
+
+    const selectAir = pokemonApi.endpoints.getInfinitePokemon.select('air')
+    const entry3Initial = selectAir(storeRef.store.getState())
+
+    expect(entry3Initial.data).toEqual({
+      pages: [[{ id: '3', name: 'Pokemon 3' }]],
+      pageParams: [3],
+    })
+
+    await storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemon.initiate('air', {
+        direction: 'forward',
+      }),
+    )
+
+    const entry3Updated = selectAir(storeRef.store.getState())
+
+    expect(entry3Updated.data).toEqual({
+      pages: [
+        [{ id: '3', name: 'Pokemon 3' }],
+        [{ id: '4', name: 'Pokemon 4' }],
+      ],
+      pageParams: [3, 4],
+    })
+  })
+
+  test('Cache lifecycle methods are called', async () => {
+    const cacheEntryAddedCallback = vi.fn()
+    const queryStartedCallback = vi.fn()
+
+    const pokemonApi = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+      endpoints: (build) => ({
+        getInfinitePokemonWithLifecycles: build.infiniteQuery<
+          Pokemon[],
+          string,
+          number
+        >({
+          infiniteQueryOptions: {
+            initialPageParam: 0,
+            getNextPageParam: (
+              lastPage,
+              allPages,
+              // Page param type should be `number`
+              lastPageParam,
+              allPageParams,
+            ) => lastPageParam + 1,
+            getPreviousPageParam: (
+              firstPage,
+              allPages,
+              firstPageParam,
+              allPageParams,
+            ) => {
+              return firstPageParam > 0 ? firstPageParam - 1 : undefined
+            },
+          },
+          query({ pageParam }) {
+            return `https://example.com/listItems?page=${pageParam}`
+          },
+          async onCacheEntryAdded(arg, api) {
+            const data = await api.cacheDataLoaded
+            cacheEntryAddedCallback(arg, data)
+          },
+          async onQueryStarted(arg, api) {
+            const data = await api.queryFulfilled
+            queryStartedCallback(arg, data)
+          },
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(
+      pokemonApi,
+      { ...actionsReducer },
+      {
+        withoutTestLifecycles: true,
+      },
+    )
+
+    const res1 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemonWithLifecycles.initiate(
+        'fire',
+        {},
+      ),
+    )
+
+    const entry1InitialLoad = await res1
+    checkResultData(entry1InitialLoad, [[{ id: '0', name: 'Pokemon 0' }]])
+
+    expect(cacheEntryAddedCallback).toHaveBeenCalledWith('fire', {
+      data: {
+        pages: [[{ id: '0', name: 'Pokemon 0' }]],
+        pageParams: [0],
+      },
+      meta: expect.objectContaining({
+        request: expect.anything(),
+        response: expect.anything(),
+      }),
+    })
+
+    expect(queryStartedCallback).toHaveBeenCalledWith('fire', {
+      data: {
+        pages: [[{ id: '0', name: 'Pokemon 0' }]],
+        pageParams: [0],
+      },
+      meta: expect.objectContaining({
+        request: expect.anything(),
+        response: expect.anything(),
+      }),
+    })
+  })
+
+  test('Can use transformResponse', async () => {
+    type PokemonPage = { items: Pokemon[]; page: number }
+    const pokemonApi = createApi({
+      baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),
+      endpoints: (build) => ({
+        getInfinitePokemonWithTransform: build.infiniteQuery<
+          PokemonPage,
+          string,
+          number
+        >({
+          infiniteQueryOptions: {
+            initialPageParam: 0,
+            getNextPageParam: (
+              lastPage,
+              allPages,
+              // Page param type should be `number`
+              lastPageParam,
+              allPageParams,
+            ) => lastPageParam + 1,
+          },
+          query({ pageParam }) {
+            return `https://example.com/listItems?page=${pageParam}`
+          },
+          transformResponse(baseQueryReturnValue: Pokemon[], meta, arg) {
+            expect(Array.isArray(baseQueryReturnValue)).toBe(true)
+            return {
+              items: baseQueryReturnValue,
+              page: arg.pageParam,
+            }
+          },
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(
+      pokemonApi,
+      { ...actionsReducer },
+      {
+        withoutTestLifecycles: true,
+      },
+    )
+
+    const checkResultData = (
+      result: InfiniteQueryResult,
+      expectedValues: PokemonPage[],
+    ) => {
+      expect(result.status).toBe(QueryStatus.fulfilled)
+      if (result.status === QueryStatus.fulfilled) {
+        expect(result.data.pages).toEqual(expectedValues)
+      }
+    }
+
+    const res1 = storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemonWithTransform.initiate('fire', {}),
+    )
+
+    const entry1InitialLoad = await res1
+    checkResultData(entry1InitialLoad, [
+      { items: [{ id: '0', name: 'Pokemon 0' }], page: 0 },
+    ])
+
+    const entry1Updated = await storeRef.store.dispatch(
+      pokemonApi.endpoints.getInfinitePokemonWithTransform.initiate('fire', {
+        direction: 'forward',
+      }),
+    )
+
+    checkResultData(entry1Updated, [
+      { items: [{ id: '0', name: 'Pokemon 0' }], page: 0 },
+      { items: [{ id: '1', name: 'Pokemon 1' }], page: 1 },
+    ])
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/injectEndpoints.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/injectEndpoints.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/injectEndpoints.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,121 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import { configureStore } from '@internal/configureStore'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+
+const api = createApi({
+  baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+  endpoints: () => ({}),
+})
+
+describe('injectEndpoints', () => {
+  const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+  afterEach(() => {
+    vi.clearAllMocks()
+    vi.unstubAllEnvs()
+  })
+
+  afterAll(() => {
+    vi.restoreAllMocks()
+    vi.unstubAllEnvs()
+  })
+
+  test("query: overriding with `overrideEndpoints`='throw' throws an error", async () => {
+    const extended = api.injectEndpoints({
+      endpoints: (build) => ({
+        injected: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+      }),
+    })
+
+    expect(() => {
+      extended.injectEndpoints({
+        overrideExisting: 'throw',
+        endpoints: (build) => ({
+          injected: build.query<unknown, string>({
+            query: () => '/success',
+          }),
+        }),
+      })
+    }).toThrowError(
+      new Error(
+        `called \`injectEndpoints\` to override already-existing endpointName injected without specifying \`overrideExisting: true\``,
+      ),
+    )
+  })
+
+  test('query: overriding an endpoint with `overrideEndpoints`=false does nothing in production', async () => {
+    vi.stubEnv('NODE_ENV', 'development')
+
+    const extended = api.injectEndpoints({
+      endpoints: (build) => ({
+        injected: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+      }),
+    })
+
+    extended.injectEndpoints({
+      overrideExisting: false,
+      endpoints: (build) => ({
+        injected: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+      }),
+    })
+
+    expect(consoleErrorSpy).toHaveBeenCalledWith(
+      `called \`injectEndpoints\` to override already-existing endpointName injected without specifying \`overrideExisting: true\``,
+    )
+  })
+
+  test('query: overriding with `overrideEndpoints`=false logs an error in development', async () => {
+    vi.stubEnv('NODE_ENV', 'production')
+
+    const extended = api.injectEndpoints({
+      endpoints: (build) => ({
+        injected: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+      }),
+    })
+
+    extended.injectEndpoints({
+      overrideExisting: false,
+      endpoints: (build) => ({
+        injected: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+      }),
+    })
+
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+  })
+
+  test('adding the same middleware to the store twice throws an error', () => {
+    // Strictly speaking this is a duplicate of the tests in configureStore.test.ts,
+    // but this helps confirm that we throw the error for adding
+    // the same API middleware twice.
+    const extendedApi = api.injectEndpoints({
+      endpoints: (build) => ({
+        injected: build.query<unknown, string>({
+          query: () => '/success',
+        }),
+      }),
+    })
+
+    const makeStore = () =>
+      configureStore({
+        reducer: {
+          api: api.reducer,
+        },
+        middleware: (getDefaultMiddleware) =>
+          getDefaultMiddleware().concat(api.middleware, extendedApi.middleware),
+      })
+
+    expect(makeStore).toThrowError(
+      'Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.',
+    )
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/invalidation.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/invalidation.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/invalidation.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,146 @@
+import type { TagDescription } from '@reduxjs/toolkit/query'
+import { createApi, fakeBaseQuery } from '@reduxjs/toolkit/query'
+import { waitFor } from '@testing-library/react'
+import { delay } from 'msw'
+import { setupApiStore } from '../../tests/utils/helpers'
+
+const tagTypes = [
+  'apple',
+  'pear',
+  'banana',
+  'tomato',
+  'cat',
+  'dog',
+  'giraffe',
+] as const
+type TagTypes = (typeof tagTypes)[number]
+type ProvidedTags = TagDescription<TagTypes>[] 
+type InvalidatesTags = (ProvidedTags[number] | null | undefined)[]
+/** providesTags, invalidatesTags, shouldInvalidate */
+const caseMatrix: [ProvidedTags, InvalidatesTags, boolean][] = [
+  // *****************************
+  // basic invalidation behavior
+  // *****************************
+
+  // string
+  [['apple'], ['apple'], true],
+  [['apple'], ['pear'], false],
+  // string and type only behave identical
+  [[{ type: 'apple' }], ['apple'], true],
+  [[{ type: 'apple' }], ['pear'], false],
+  [['apple'], [{ type: 'apple' }], true],
+  [['apple'], [{ type: 'pear' }], false],
+  // type only invalidates type + id
+  [[{ type: 'apple', id: 1 }], [{ type: 'apple' }], true],
+  [[{ type: 'pear', id: 1 }], ['apple'], false],
+  // type + id never invalidates type only
+  [['apple'], [{ type: 'apple', id: 1 }], false],
+  [['pear'], [{ type: 'apple', id: 1 }], false],
+  // type + id invalidates type + id
+  [[{ type: 'apple', id: 1 }], [{ type: 'apple', id: 1 }], true],
+  [[{ type: 'apple', id: 1 }], [{ type: 'apple', id: 2 }], false],
+  // null and undefined
+  [['apple'], [null], false],
+  [['apple'], [undefined], false],
+  [['apple'], [null, 'apple'], true],
+  [['apple'], [undefined, 'apple'], true],
+  // *****************************
+  // test multiple values in array
+  // *****************************
+
+  [['apple', 'banana', 'tomato'], ['apple'], true],
+  [['apple'], ['pear', 'banana', 'tomato'], false],
+  [
+    [
+      { type: 'apple', id: 1 },
+      { type: 'apple', id: 3 },
+      { type: 'apple', id: 4 },
+    ],
+    [{ type: 'apple', id: 1 }],
+    true,
+  ],
+  [
+    [{ type: 'apple', id: 1 }],
+    [
+      { type: 'apple', id: 2 },
+      { type: 'apple', id: 3 },
+      { type: 'apple', id: 4 },
+    ],
+    false,
+  ],
+]
+
+test.each(caseMatrix)(
+  '\tprovidesTags: %O,\n\tinvalidatesTags: %O,\n\tshould invalidate: %s',
+  async (providesTags, invalidatesTags, shouldInvalidate) => {
+    let queryCount = 0
+    const {
+      store,
+      api,
+      api: {
+        endpoints: { invalidating, providing, unrelated },
+      },
+    } = setupApiStore(
+      createApi({
+        baseQuery: fakeBaseQuery(),
+        tagTypes,
+        endpoints: (build) => ({
+          providing: build.query<unknown, void>({
+            queryFn() {
+              queryCount++
+              return { data: {} }
+            },
+            providesTags,
+          }),
+          unrelated: build.query<unknown, void>({
+            queryFn() {
+              return { data: {} }
+            },
+            providesTags: ['cat', 'dog', { type: 'giraffe', id: 8 }],
+          }),
+          invalidating: build.mutation<unknown, void>({
+            queryFn() {
+              return { data: {} }
+            },
+            invalidatesTags,
+          }),
+        }),
+      }),
+      undefined,
+      { withoutTestLifecycles: true },
+    )
+
+    store.dispatch(providing.initiate())
+    store.dispatch(unrelated.initiate())
+    expect(queryCount).toBe(1)
+    await waitFor(() => {
+      expect(api.endpoints.providing.select()(store.getState()).status).toBe(
+        'fulfilled',
+      )
+      expect(api.endpoints.unrelated.select()(store.getState()).status).toBe(
+        'fulfilled',
+      )
+    })
+    const toInvalidate = api.util.selectInvalidatedBy(
+      store.getState(),
+      invalidatesTags,
+    )
+
+    if (shouldInvalidate) {
+      expect(toInvalidate).toEqual([
+        {
+          queryCacheKey: 'providing(undefined)',
+          endpointName: 'providing',
+          originalArgs: undefined,
+        },
+      ])
+    } else {
+      expect(toInvalidate).toEqual([])
+    }
+
+    store.dispatch(invalidating.initiate())
+    expect(queryCount).toBe(1)
+    await delay(2)
+    expect(queryCount).toBe(shouldInvalidate ? 2 : 1)
+  },
+)
Index: node_modules/@reduxjs/toolkit/src/query/tests/matchers.test-d.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/matchers.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/matchers.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+import type { SerializedError } from '@reduxjs/toolkit'
+import { createSlice } from '@reduxjs/toolkit'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+
+interface ResultType {
+  result: 'complex'
+}
+
+interface ArgType {
+  foo: 'bar'
+  count: 3
+}
+
+const baseQuery = fetchBaseQuery({ baseUrl: 'https://example.com' })
+const api = createApi({
+  baseQuery,
+  endpoints(build) {
+    return {
+      querySuccess: build.query<ResultType, ArgType>({
+        query: () => '/success',
+      }),
+      querySuccess2: build.query({ query: () => '/success' }),
+      queryFail: build.query({ query: () => '/error' }),
+      mutationSuccess: build.mutation({
+        query: () => ({ url: '/success', method: 'POST' }),
+      }),
+      mutationSuccess2: build.mutation({
+        query: () => ({ url: '/success', method: 'POST' }),
+      }),
+      mutationFail: build.mutation({
+        query: () => ({ url: '/error', method: 'POST' }),
+      }),
+    }
+  },
+})
+
+describe('type tests', () => {
+  test('inferred types', () => {
+    createSlice({
+      name: 'auth',
+      initialState: {},
+      reducers: {},
+      extraReducers: (builder) => {
+        builder
+          .addMatcher(
+            api.endpoints.querySuccess.matchPending,
+            (state, action) => {
+              expectTypeOf(action.payload).toBeUndefined()
+
+              expectTypeOf(
+                action.meta.arg.originalArgs,
+              ).toEqualTypeOf<ArgType>()
+            },
+          )
+          .addMatcher(
+            api.endpoints.querySuccess.matchFulfilled,
+            (state, action) => {
+              expectTypeOf(action.payload).toEqualTypeOf<ResultType>()
+
+              expectTypeOf(action.meta.fulfilledTimeStamp).toBeNumber()
+
+              expectTypeOf(
+                action.meta.arg.originalArgs,
+              ).toEqualTypeOf<ArgType>()
+            },
+          )
+          .addMatcher(
+            api.endpoints.querySuccess.matchRejected,
+            (state, action) => {
+              expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+
+              expectTypeOf(
+                action.meta.arg.originalArgs,
+              ).toEqualTypeOf<ArgType>()
+            },
+          )
+      },
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/matchers.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/matchers.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/matchers.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,241 @@
+import {
+  actionsReducer,
+  hookWaitFor,
+  setupApiStore,
+} from '@internal/tests/utils/helpers'
+import { createSlice } from '@reduxjs/toolkit'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+import { act, renderHook } from '@testing-library/react'
+
+interface ResultType {
+  result: 'complex'
+}
+
+interface ArgType {
+  foo: 'bar'
+  count: 3
+}
+
+const baseQuery = fetchBaseQuery({ baseUrl: 'https://example.com' })
+const api = createApi({
+  baseQuery,
+  endpoints(build) {
+    return {
+      querySuccess: build.query<ResultType, ArgType>({
+        query: () => '/success',
+      }),
+      querySuccess2: build.query({ query: () => '/success' }),
+      queryFail: build.query({ query: () => '/error' }),
+      mutationSuccess: build.mutation({
+        query: () => ({ url: '/success', method: 'POST' }),
+      }),
+      mutationSuccess2: build.mutation({
+        query: () => ({ url: '/success', method: 'POST' }),
+      }),
+      mutationFail: build.mutation({
+        query: () => ({ url: '/error', method: 'POST' }),
+      }),
+    }
+  },
+})
+
+const storeRef = setupApiStore(api, {
+  ...actionsReducer,
+})
+
+const {
+  mutationFail,
+  mutationSuccess,
+  mutationSuccess2,
+  queryFail,
+  querySuccess,
+  querySuccess2,
+} = api.endpoints
+
+test('matches query pending & fulfilled actions for the given endpoint', async () => {
+  const endpoint = querySuccess2
+  const otherEndpoint = queryFail
+  const { result } = renderHook(() => endpoint.useQuery({} as any), {
+    wrapper: storeRef.wrapper,
+  })
+  await hookWaitFor(() => expect(result.current.isLoading).toBeFalsy())
+
+  expect(storeRef.store.getState().actions).toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchFulfilled,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    otherEndpoint.matchPending,
+    otherEndpoint.matchFulfilled,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchFulfilled,
+    api.endpoints.mutationSuccess.matchFulfilled,
+    endpoint.matchRejected,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchRejected,
+  )
+})
+test('matches query pending & rejected actions for the given endpoint', async () => {
+  const endpoint = queryFail
+  const { result } = renderHook(() => endpoint.useQuery({}), {
+    wrapper: storeRef.wrapper,
+  })
+  await hookWaitFor(() => expect(result.current.isLoading).toBeFalsy())
+  expect(storeRef.store.getState().actions).toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchRejected,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchFulfilled,
+    endpoint.matchRejected,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchFulfilled,
+  )
+})
+
+test('matches lazy query pending & fulfilled actions for given endpoint', async () => {
+  const endpoint = querySuccess
+  const { result } = renderHook(() => endpoint.useLazyQuery(), {
+    wrapper: storeRef.wrapper,
+  })
+  act(() => void result.current[0]({} as any))
+  await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+
+  expect(storeRef.store.getState().actions).toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchFulfilled,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchFulfilled,
+    endpoint.matchRejected,
+  )
+
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchRejected,
+  )
+})
+
+test('matches lazy query pending & rejected actions for given endpoint', async () => {
+  const endpoint = queryFail
+  const { result } = renderHook(() => endpoint.useLazyQuery(), {
+    wrapper: storeRef.wrapper,
+  })
+  act(() => void result.current[0]({}))
+  await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+
+  expect(storeRef.store.getState().actions).toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchRejected,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchFulfilled,
+    endpoint.matchRejected,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchFulfilled,
+  )
+})
+
+test('matches mutation pending & fulfilled actions for the given endpoint', async () => {
+  const endpoint = mutationSuccess
+  const otherEndpoint = mutationSuccess2
+  const { result } = renderHook(() => endpoint.useMutation(), {
+    wrapper: storeRef.wrapper,
+  })
+  act(() => void result.current[0]({}))
+  await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+
+  expect(storeRef.store.getState().actions).toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchFulfilled,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    otherEndpoint.matchPending,
+    otherEndpoint.matchFulfilled,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchFulfilled,
+    endpoint.matchRejected,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchRejected,
+  )
+})
+test('matches mutation pending & rejected actions for the given endpoint', async () => {
+  const endpoint = mutationFail
+  const { result } = renderHook(() => endpoint.useMutation(), {
+    wrapper: storeRef.wrapper,
+  })
+  act(() => void result.current[0]({}))
+  await hookWaitFor(() => expect(result.current[1].isLoading).toBeFalsy())
+
+  expect(storeRef.store.getState().actions).toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchRejected,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchFulfilled,
+    endpoint.matchRejected,
+  )
+  expect(storeRef.store.getState().actions).not.toMatchSequence(
+    api.internalActions.middlewareRegistered.match,
+    endpoint.matchPending,
+    endpoint.matchFulfilled,
+  )
+})
+
+test('inferred types', () => {
+  createSlice({
+    name: 'auth',
+    initialState: {},
+    reducers: {},
+    extraReducers: (builder) => {
+      builder
+        .addMatcher(
+          api.endpoints.querySuccess.matchPending,
+          (state, action) => {
+            // @ts-expect-error
+            console.log(action.error)
+          },
+        )
+        .addMatcher(
+          api.endpoints.querySuccess.matchFulfilled,
+          (state, action) => {
+            // @ts-expect-error
+            console.log(action.error)
+          },
+        )
+        .addMatcher(
+          api.endpoints.querySuccess.matchRejected,
+          (state, action) => {},
+        )
+    },
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/mocks/handlers.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/mocks/handlers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/mocks/handlers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,107 @@
+import { headersToObject } from 'headers-polyfill'
+import { HttpResponse, http } from 'msw'
+
+export type Post = {
+  id: number
+  title: string
+  body: string
+}
+
+export const posts: Record<string, Post> = {
+  1: { id: 1, title: 'hello', body: 'extra body!' },
+}
+
+export const handlers = [
+  http.get(
+    'https://example.com',
+    async ({ request, params, cookies, requestId }) => {
+      HttpResponse.json({ value: 'success' })
+    },
+  ),
+  http.get(
+    'https://example.com/echo',
+    async ({ request, params, cookies, requestId }) => {
+      return HttpResponse.json({
+        ...request,
+        params,
+        cookies,
+        requestId,
+        url: new URL(request.url),
+        headers: headersToObject(request.headers),
+      })
+    },
+  ),
+
+  http.post(
+    'https://example.com/echo',
+    async ({ request, cookies, params, requestId }) => {
+      let body
+
+      try {
+        body =
+          headersToObject(request.headers)['content-type'] === 'text/html'
+            ? await request.text()
+            : await request.json()
+      } catch (err) {
+        body = request.body
+      }
+
+      return HttpResponse.json({
+        ...request,
+        cookies,
+        params,
+        requestId,
+        body,
+        url: new URL(request.url),
+        headers: headersToObject(request.headers),
+      })
+    },
+  ),
+
+  http.get('https://example.com/success', () =>
+    HttpResponse.json({ value: 'success' }),
+  ),
+
+  http.post('https://example.com/success', () =>
+    HttpResponse.json({ value: 'success' }),
+  ),
+
+  http.get('https://example.com/empty', () => new HttpResponse('')),
+
+  http.get('https://example.com/error', () =>
+    HttpResponse.json({ value: 'error' }, { status: 500 }),
+  ),
+
+  http.post('https://example.com/error', () =>
+    HttpResponse.json({ value: 'error' }, { status: 500 }),
+  ),
+
+  http.get('https://example.com/nonstandard-error', () =>
+    HttpResponse.json(
+      {
+        success: false,
+        message: 'This returns a 200 but is really an error',
+      },
+      { status: 200 },
+    ),
+  ),
+
+  http.get('https://example.com/mirror', ({ params }) =>
+    HttpResponse.json(params),
+  ),
+
+  http.post('https://example.com/mirror', ({ params }) =>
+    HttpResponse.json(params),
+  ),
+
+  http.get('https://example.com/posts/random', () => {
+    // just simulate an api that returned a random ID
+    const { id } = posts[1]
+    return HttpResponse.json({ id })
+  }),
+
+  http.get<{ id: string }, any, Pick<Post, 'id'>>(
+    'https://example.com/post/:id',
+    ({ params }) => HttpResponse.json(posts[params.id]),
+  ),
+]
Index: node_modules/@reduxjs/toolkit/src/query/tests/mocks/server.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/mocks/server.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/mocks/server.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { setupServer } from 'msw/node'
+import { handlers } from './handlers'
+
+// This configures a request mocking server with the given request handlers.
+export const server = setupServer(...handlers)
Index: node_modules/@reduxjs/toolkit/src/query/tests/optimisticUpdates.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/optimisticUpdates.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/optimisticUpdates.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,476 @@
+import { createApi } from '@reduxjs/toolkit/query/react'
+import { act, renderHook } from '@testing-library/react'
+import { delay } from 'msw'
+import {
+  actionsReducer,
+  hookWaitFor,
+  setupApiStore,
+} from '../../tests/utils/helpers'
+import type { InvalidationState } from '../core/apiState'
+
+interface Post {
+  id: string
+  title: string
+  contents: string
+}
+
+const baseQuery = vi.fn()
+beforeEach(() => {
+  baseQuery.mockReset()
+})
+
+const api = createApi({
+  baseQuery: (...args: any[]) => {
+    const result = baseQuery(...args)
+    if (typeof result === 'object' && 'then' in result)
+      return result
+        .then((data: any) => ({ data, meta: 'meta' }))
+        .catch((e: any) => ({ error: e }))
+    return { data: result, meta: 'meta' }
+  },
+  tagTypes: ['Post'],
+  endpoints: (build) => ({
+    post: build.query<Post, string>({
+      query: (id) => `post/${id}`,
+      providesTags: ['Post'],
+    }),
+    listPosts: build.query<Post[], void>({
+      query: () => `posts`,
+      providesTags: (result) => [
+        ...(result?.map(({ id }) => ({ type: 'Post' as const, id })) ?? []),
+        'Post',
+      ],
+    }),
+    updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({
+      query: ({ id, ...patch }) => ({
+        url: `post/${id}`,
+        method: 'PATCH',
+        body: patch,
+      }),
+      async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {
+        const { undo } = dispatch(
+          api.util.updateQueryData('post', id, (draft) => {
+            Object.assign(draft, patch)
+          }),
+        )
+        queryFulfilled.catch(undo)
+      },
+      invalidatesTags: (result) => (result ? ['Post'] : []),
+    }),
+  }),
+})
+
+const storeRef = setupApiStore(api, { ...actionsReducer })
+
+describe('basic lifecycle', () => {
+  let onStart = vi.fn(),
+    onError = vi.fn(),
+    onSuccess = vi.fn()
+
+  const extendedApi = api.injectEndpoints({
+    endpoints: (build) => ({
+      test: build.mutation({
+        query: (x) => x,
+        async onQueryStarted(arg, api) {
+          onStart(arg)
+          try {
+            const result = await api.queryFulfilled
+            onSuccess(result)
+          } catch (e) {
+            onError(e)
+          }
+        },
+      }),
+    }),
+    overrideExisting: true,
+  })
+
+  beforeEach(() => {
+    onStart.mockReset()
+    onError.mockReset()
+    onSuccess.mockReset()
+  })
+
+  test('success', async () => {
+    const { result } = renderHook(
+      () => extendedApi.endpoints.test.useMutation(),
+      { wrapper: storeRef.wrapper },
+    )
+
+    baseQuery.mockResolvedValue('success')
+
+    expect(onStart).not.toHaveBeenCalled()
+    expect(baseQuery).not.toHaveBeenCalled()
+    act(() => void result.current[0]('arg'))
+    expect(onStart).toHaveBeenCalledWith('arg')
+    expect(baseQuery).toHaveBeenCalledWith('arg', expect.any(Object), undefined)
+
+    expect(onError).not.toHaveBeenCalled()
+    expect(onSuccess).not.toHaveBeenCalled()
+    await act(() => delay(5))
+    expect(onError).not.toHaveBeenCalled()
+    expect(onSuccess).toHaveBeenCalledWith({ data: 'success', meta: 'meta' })
+  })
+
+  test('error', async () => {
+    const { result } = renderHook(
+      () => extendedApi.endpoints.test.useMutation(),
+      { wrapper: storeRef.wrapper },
+    )
+
+    baseQuery.mockRejectedValueOnce('error')
+    expect(onStart).not.toHaveBeenCalled()
+    expect(baseQuery).not.toHaveBeenCalled()
+
+    act(() => void result.current[0]('arg'))
+    expect(onStart).toHaveBeenCalledWith('arg')
+    expect(baseQuery).toHaveBeenCalledWith('arg', expect.any(Object), undefined)
+    expect(onError).not.toHaveBeenCalled()
+    expect(onSuccess).not.toHaveBeenCalled()
+    await act(() => delay(5))
+    expect(onError).toHaveBeenCalledWith({
+      error: 'error',
+      isUnhandledError: false,
+      meta: undefined,
+    })
+    expect(onSuccess).not.toHaveBeenCalled()
+  })
+})
+
+describe('updateQueryData', () => {
+  test('updates cache values, can apply inverse patch', async () => {
+    baseQuery
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'All about cheese.',
+        contents: 'TODO',
+      })
+      // TODO I have no idea why the query is getting called multiple times,
+      // but passing an additional mocked value (_any_ value)
+      // seems to silence some annoying "got an undefined result" logging
+      .mockResolvedValueOnce(42)
+    const { result } = renderHook(() => api.endpoints.post.useQuery('3'), {
+      wrapper: storeRef.wrapper,
+    })
+    await hookWaitFor(() => expect(result.current.isSuccess).toBeTruthy())
+
+    const dataBefore = result.current.data
+    expect(dataBefore).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'TODO',
+    })
+
+    let returnValue!: ReturnType<ReturnType<typeof api.util.updateQueryData>>
+    act(() => {
+      returnValue = storeRef.store.dispatch(
+        api.util.updateQueryData('post', '3', (draft) => {
+          draft.contents = 'I love cheese!'
+        }),
+      )
+    })
+
+    expect(result.current.data).not.toBe(dataBefore)
+    expect(result.current.data).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'I love cheese!',
+    })
+
+    expect(returnValue).toEqual({
+      inversePatches: [{ op: 'replace', path: ['contents'], value: 'TODO' }],
+      patches: [{ op: 'replace', path: ['contents'], value: 'I love cheese!' }],
+      undo: expect.any(Function),
+    })
+
+    act(() => {
+      storeRef.store.dispatch(
+        api.util.patchQueryData('post', '3', returnValue.inversePatches),
+      )
+    })
+
+    expect(result.current.data).toEqual(dataBefore)
+  })
+
+  test('updates (list) cache values including provided tags, undos that', async () => {
+    baseQuery
+      .mockResolvedValueOnce([
+        { id: '3', title: 'All about cheese.', contents: 'TODO' },
+      ])
+      .mockResolvedValueOnce(42)
+    const { result } = renderHook(() => api.endpoints.listPosts.useQuery(), {
+      wrapper: storeRef.wrapper,
+    })
+    await hookWaitFor(() => expect(result.current.isSuccess).toBeTruthy())
+
+    let provided!: InvalidationState<'Post'>
+    act(() => {
+      provided = storeRef.store.getState().api.provided
+    })
+
+    const provided3 = provided.tags.Post['3']
+
+    let returnValue!: ReturnType<ReturnType<typeof api.util.updateQueryData>>
+    act(() => {
+      returnValue = storeRef.store.dispatch(
+        api.util.updateQueryData(
+          'listPosts',
+          undefined,
+          (draft) => {
+            draft.push({
+              id: '4',
+              title: 'Mostly about cheese.',
+              contents: 'TODO',
+            })
+          },
+          true,
+        ),
+      )
+    })
+
+    act(() => {
+      provided = storeRef.store.getState().api.provided
+    })
+
+    const provided4 = provided.tags.Post['4']
+
+    expect(provided4).toEqual(provided3)
+
+    act(() => {
+      returnValue.undo()
+    })
+
+    act(() => {
+      provided = storeRef.store.getState().api.provided
+    })
+
+    const provided4Next = provided.tags.Post['4']
+
+    expect(provided4Next).toEqual([])
+  })
+
+  test('updates (list) cache values excluding provided tags, undoes that', async () => {
+    baseQuery
+      .mockResolvedValueOnce([
+        { id: '3', title: 'All about cheese.', contents: 'TODO' },
+      ])
+      .mockResolvedValueOnce(42)
+    const { result } = renderHook(() => api.endpoints.listPosts.useQuery(), {
+      wrapper: storeRef.wrapper,
+    })
+    await hookWaitFor(() => expect(result.current.isSuccess).toBeTruthy())
+
+    let provided!: InvalidationState<'Post'>
+    act(() => {
+      provided = storeRef.store.getState().api.provided
+    })
+
+    let returnValue!: ReturnType<ReturnType<typeof api.util.updateQueryData>>
+    act(() => {
+      returnValue = storeRef.store.dispatch(
+        api.util.updateQueryData(
+          'listPosts',
+          undefined,
+          (draft) => {
+            draft.push({
+              id: '4',
+              title: 'Mostly about cheese.',
+              contents: 'TODO',
+            })
+          },
+          false,
+        ),
+      )
+    })
+
+    act(() => {
+      provided = storeRef.store.getState().api.provided
+    })
+
+    const provided4 = provided.tags.Post['4']
+
+    expect(provided4).toEqual(undefined)
+
+    act(() => {
+      returnValue.undo()
+    })
+
+    act(() => {
+      provided = storeRef.store.getState().api.provided
+    })
+
+    const provided4Next = provided.tags.Post['4']
+
+    expect(provided4Next).toEqual(undefined)
+  })
+
+  test('does not update non-existing values', async () => {
+    baseQuery
+      .mockImplementationOnce(async () => ({
+        id: '3',
+        title: 'All about cheese.',
+        contents: 'TODO',
+      }))
+      .mockResolvedValueOnce(42)
+
+    const { result } = renderHook(() => api.endpoints.post.useQuery('3'), {
+      wrapper: storeRef.wrapper,
+    })
+    await hookWaitFor(() => expect(result.current.isSuccess).toBeTruthy())
+
+    const dataBefore = result.current.data
+    expect(dataBefore).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'TODO',
+    })
+
+    let returnValue!: ReturnType<ReturnType<typeof api.util.updateQueryData>>
+    act(() => {
+      returnValue = storeRef.store.dispatch(
+        api.util.updateQueryData('post', '4', (draft) => {
+          draft.contents = 'I love cheese!'
+        }),
+      )
+    })
+
+    expect(result.current.data).toBe(dataBefore)
+
+    expect(returnValue).toEqual({
+      inversePatches: [],
+      patches: [],
+      undo: expect.any(Function),
+    })
+  })
+})
+
+describe('full integration', () => {
+  test('success case', async () => {
+    baseQuery
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'All about cheese.',
+        contents: 'TODO',
+      })
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'Meanwhile, this changed server-side.',
+        contents: 'Delicious cheese!',
+      })
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'Meanwhile, this changed server-side.',
+        contents: 'Delicious cheese!',
+      })
+      .mockResolvedValueOnce(42)
+    const { result } = renderHook(
+      () => ({
+        query: api.endpoints.post.useQuery('3'),
+        mutation: api.endpoints.updatePost.useMutation(),
+      }),
+      { wrapper: storeRef.wrapper },
+    )
+    await hookWaitFor(() => expect(result.current.query.isSuccess).toBeTruthy())
+
+    expect(result.current.query.data).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'TODO',
+    })
+
+    act(() => {
+      result.current.mutation[0]({ id: '3', contents: 'Delicious cheese!' })
+    })
+
+    expect(result.current.query.data).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'Delicious cheese!',
+    })
+
+    await hookWaitFor(() =>
+      expect(result.current.query.data).toEqual({
+        id: '3',
+        title: 'Meanwhile, this changed server-side.',
+        contents: 'Delicious cheese!',
+      }),
+    )
+  })
+
+  test('error case', async () => {
+    baseQuery
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'All about cheese.',
+        contents: 'TODO',
+      })
+      .mockRejectedValueOnce('some error!')
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'Meanwhile, this changed server-side.',
+        contents: 'TODO',
+      })
+      .mockResolvedValueOnce(42)
+
+    const { result } = renderHook(
+      () => ({
+        query: api.endpoints.post.useQuery('3'),
+        mutation: api.endpoints.updatePost.useMutation(),
+      }),
+      { wrapper: storeRef.wrapper },
+    )
+    await hookWaitFor(() => expect(result.current.query.isSuccess).toBeTruthy())
+
+    expect(result.current.query.data).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'TODO',
+    })
+
+    act(() => {
+      result.current.mutation[0]({ id: '3', contents: 'Delicious cheese!' })
+    })
+
+    // optimistic update
+    expect(result.current.query.data).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'Delicious cheese!',
+    })
+
+    // rollback
+    await hookWaitFor(() =>
+      expect(result.current.query.data).toEqual({
+        id: '3',
+        title: 'All about cheese.',
+        contents: 'TODO',
+      }),
+    )
+
+    // mutation failed - will not invalidate query and not refetch data from the server
+    await expect(() =>
+      hookWaitFor(
+        () =>
+          expect(result.current.query.data).toEqual({
+            id: '3',
+            title: 'Meanwhile, this changed server-side.',
+            contents: 'TODO',
+          }),
+        50,
+      ),
+    ).rejects.toBeTruthy()
+
+    act(() => void result.current.query.refetch())
+
+    // manually refetching gives up-to-date data
+    await hookWaitFor(
+      () =>
+        expect(result.current.query.data).toEqual({
+          id: '3',
+          title: 'Meanwhile, this changed server-side.',
+          contents: 'TODO',
+        }),
+      50,
+    )
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/optimisticUpserts.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/optimisticUpserts.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/optimisticUpserts.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,662 @@
+import { createApi } from '@reduxjs/toolkit/query/react'
+import { createAction } from '@reduxjs/toolkit'
+import {
+  actionsReducer,
+  hookWaitFor,
+  setupApiStore,
+} from '../../tests/utils/helpers'
+import {
+  render,
+  renderHook,
+  act,
+  waitFor,
+  screen,
+} from '@testing-library/react'
+import { delay } from 'msw'
+
+interface Post {
+  id: string
+  title: string
+  contents: string
+}
+
+interface FolderT {
+  id: number
+  children: FolderT[]
+}
+
+const baseQuery = vi.fn()
+beforeEach(() => baseQuery.mockReset())
+
+const postAddedAction = createAction<string>('postAdded')
+
+const api = createApi({
+  baseQuery: (...args: any[]) => {
+    const result = baseQuery(...args)
+    if (typeof result === 'object' && 'then' in result)
+      return result
+        .then((data: any) => ({ data, meta: 'meta' }))
+        .catch((e: any) => ({ error: e }))
+    return { data: result, meta: 'meta' }
+  },
+  tagTypes: ['Post', 'Folder'],
+  endpoints: (build) => ({
+    getPosts: build.query<Post[], void>({ query: () => '/posts' }),
+    post: build.query<Post, string>({
+      query: (id) => `post/${id}`,
+      providesTags: ['Post'],
+    }),
+    updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({
+      query: ({ id, ...patch }) => ({
+        url: `post/${id}`,
+        method: 'PATCH',
+        body: patch,
+      }),
+      async onQueryStarted(arg, { dispatch, queryFulfilled, getState }) {
+        const currentItem = api.endpoints.post.select(arg.id)(getState())
+        if (currentItem?.data) {
+          dispatch(
+            api.util.upsertQueryData('post', arg.id, {
+              ...currentItem.data,
+              ...arg,
+            }),
+          )
+        }
+      },
+      invalidatesTags: (result) => (result ? ['Post'] : []),
+    }),
+    post2: build.query<Post, string>({
+      queryFn: async (id) => {
+        await delay(20)
+        return { data: { id, title: 'All about cheese.', contents: 'TODO' } }
+      },
+    }),
+    postWithSideEffect: build.query<Post, string>({
+      query: (id) => `post/${id}`,
+      providesTags: (result) => {
+        if (result) {
+          return [{ type: 'Post', id: result.id } as const]
+        }
+        return []
+      },
+      async onCacheEntryAdded(arg, api) {
+        // Verify that lifecycle promise resolution works
+        const res = await api.cacheDataLoaded
+
+        // and leave a side effect we can check in the test
+        api.dispatch(postAddedAction(res.data.id))
+      },
+      keepUnusedDataFor: 0.01,
+    }),
+    getFolder: build.query<FolderT, number>({
+      queryFn: async (args) => {
+        return {
+          data: {
+            id: args,
+            // Folder contains children that are as well folders
+            children: [{ id: 2, children: [] }],
+          },
+        }
+      },
+      providesTags: (result, err, args) => [{ type: 'Folder', id: args }],
+      onQueryStarted: async (args, queryApi) => {
+        const { data } = await queryApi.queryFulfilled
+
+        // Upsert getFolder endpoint with children from response data
+        const upsertData = data.children.map((child) => ({
+          arg: child.id,
+          endpointName: 'getFolder' as const,
+          value: child,
+        }))
+
+        queryApi.dispatch(api.util.upsertQueryEntries(upsertData))
+      },
+    }),
+  }),
+})
+
+const storeRef = setupApiStore(api, { ...actionsReducer })
+
+describe('basic lifecycle', () => {
+  let onStart = vi.fn(),
+    onError = vi.fn(),
+    onSuccess = vi.fn()
+
+  const extendedApi = api.injectEndpoints({
+    endpoints: (build) => ({
+      test: build.mutation({
+        query: (x) => x,
+        async onQueryStarted(arg, api) {
+          onStart(arg)
+          try {
+            const result = await api.queryFulfilled
+            onSuccess(result)
+          } catch (e) {
+            onError(e)
+          }
+        },
+      }),
+    }),
+    overrideExisting: true,
+  })
+
+  beforeEach(() => {
+    onStart.mockReset()
+    onError.mockReset()
+    onSuccess.mockReset()
+  })
+
+  test('Does basic inserts and upserts', async () => {
+    const newPost: Post = {
+      id: '3',
+      contents: 'Inserted content',
+      title: 'Inserted title',
+    }
+    const insertPromise = storeRef.store.dispatch(
+      api.util.upsertQueryData('post', newPost.id, newPost),
+    )
+
+    await insertPromise
+
+    const selectPost3 = api.endpoints.post.select(newPost.id)
+    const insertedPostEntry = selectPost3(storeRef.store.getState())
+    expect(insertedPostEntry.isSuccess).toBe(true)
+    expect(insertedPostEntry.data).toEqual(newPost)
+
+    const updatedPost: Post = {
+      id: '3',
+      contents: 'Updated content',
+      title: 'Updated title',
+    }
+
+    const updatePromise = storeRef.store.dispatch(
+      api.util.upsertQueryData('post', updatedPost.id, updatedPost),
+    )
+
+    await updatePromise
+
+    const updatedPostEntry = selectPost3(storeRef.store.getState())
+
+    expect(updatedPostEntry.isSuccess).toBe(true)
+    expect(updatedPostEntry.data).toEqual(updatedPost)
+  })
+
+  test('success', async () => {
+    const { result } = renderHook(
+      () => extendedApi.endpoints.test.useMutation(),
+      { wrapper: storeRef.wrapper },
+    )
+
+    baseQuery.mockResolvedValue('success')
+
+    expect(onStart).not.toHaveBeenCalled()
+    expect(baseQuery).not.toHaveBeenCalled()
+    act(() => void result.current[0]('arg'))
+    expect(onStart).toHaveBeenCalledWith('arg')
+    expect(baseQuery).toHaveBeenCalledWith('arg', expect.any(Object), undefined)
+
+    expect(onError).not.toHaveBeenCalled()
+    expect(onSuccess).not.toHaveBeenCalled()
+    await act(() => delay(5))
+    expect(onError).not.toHaveBeenCalled()
+    expect(onSuccess).toHaveBeenCalledWith({ data: 'success', meta: 'meta' })
+  })
+
+  test('error', async () => {
+    const { result } = renderHook(
+      () => extendedApi.endpoints.test.useMutation(),
+      { wrapper: storeRef.wrapper },
+    )
+
+    baseQuery.mockRejectedValueOnce('error')
+
+    expect(onStart).not.toHaveBeenCalled()
+    expect(baseQuery).not.toHaveBeenCalled()
+    act(() => void result.current[0]('arg'))
+    expect(onStart).toHaveBeenCalledWith('arg')
+    expect(baseQuery).toHaveBeenCalledWith('arg', expect.any(Object), undefined)
+
+    expect(onError).not.toHaveBeenCalled()
+    expect(onSuccess).not.toHaveBeenCalled()
+    await act(() => delay(5))
+    expect(onError).toHaveBeenCalledWith({
+      error: 'error',
+      isUnhandledError: false,
+      meta: undefined,
+    })
+    expect(onSuccess).not.toHaveBeenCalled()
+  })
+})
+
+describe('upsertQueryData', () => {
+  test('inserts cache entry', async () => {
+    baseQuery
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'All about cheese.',
+        contents: 'TODO',
+      })
+      // TODO I have no idea why the query is getting called multiple times,
+      // but passing an additional mocked value (_any_ value)
+      // seems to silence some annoying "got an undefined result" logging
+      .mockResolvedValueOnce(42)
+    const { result } = renderHook(() => api.endpoints.post.useQuery('3'), {
+      wrapper: storeRef.wrapper,
+    })
+    await hookWaitFor(() => expect(result.current.isSuccess).toBeTruthy())
+
+    const dataBefore = result.current.data
+    expect(dataBefore).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'TODO',
+    })
+
+    await act(async () => {
+      storeRef.store.dispatch(
+        api.util.upsertQueryData('post', '3', {
+          id: '3',
+          title: 'All about cheese.',
+          contents: 'I love cheese!',
+        }),
+      )
+    })
+
+    expect(result.current.data).not.toBe(dataBefore)
+    expect(result.current.data).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'I love cheese!',
+    })
+  })
+
+  test('does update non-existing values', async () => {
+    baseQuery
+      // throw an error to make sure there is no cached data
+      .mockImplementationOnce(async () => {
+        throw new Error('failed to load')
+      })
+      .mockResolvedValueOnce(42)
+
+    // a subscriber is needed to have the data stay in the cache
+    // Not sure if this is the wanted behavior, I would have liked
+    // it to stay in the cache for the x amount of time the cache
+    // is preserved normally after the last subscriber was unmounted
+    const { result, rerender } = renderHook(
+      () => api.endpoints.post.useQuery('4'),
+      { wrapper: storeRef.wrapper },
+    )
+    await hookWaitFor(() => expect(result.current.isError).toBeTruthy())
+
+    // upsert the data
+    act(() => {
+      storeRef.store.dispatch(
+        api.util.upsertQueryData('post', '4', {
+          id: '4',
+          title: 'All about cheese',
+          contents: 'I love cheese!',
+        }),
+      )
+    })
+
+    // rerender the hook
+    rerender()
+    // wait until everything has settled
+    await hookWaitFor(() => expect(result.current.isSuccess).toBeTruthy())
+
+    // the cached data is returned as the result
+    expect(result.current.data).toStrictEqual({
+      id: '4',
+      title: 'All about cheese',
+      contents: 'I love cheese!',
+    })
+  })
+
+  test('upsert while a normal query is running (success)', async () => {
+    const fetchedData = {
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'Yummy',
+    }
+    baseQuery.mockImplementation(() => delay(20).then(() => fetchedData))
+    const upsertedData = {
+      id: '3',
+      title: 'Data from a SSR Render',
+      contents: 'This is just some random data',
+    }
+
+    const selector = api.endpoints.post.select('3')
+    const fetchRes = storeRef.store.dispatch(api.endpoints.post.initiate('3'))
+    const upsertRes = storeRef.store.dispatch(
+      api.util.upsertQueryData('post', '3', upsertedData),
+    )
+
+    await upsertRes
+    let state = selector(storeRef.store.getState())
+    expect(state.data).toEqual(upsertedData)
+
+    await fetchRes
+    state = selector(storeRef.store.getState())
+    expect(state.data).toEqual(fetchedData)
+  })
+  test('upsert while a normal query is running (rejected)', async () => {
+    baseQuery.mockImplementationOnce(async () => {
+      await delay(20)
+      // eslint-disable-next-line no-throw-literal
+      throw 'Error!'
+    })
+    const upsertedData = {
+      id: '3',
+      title: 'Data from a SSR Render',
+      contents: 'This is just some random data',
+    }
+
+    const selector = api.endpoints.post.select('3')
+    const fetchRes = storeRef.store.dispatch(api.endpoints.post.initiate('3'))
+    const upsertRes = storeRef.store.dispatch(
+      api.util.upsertQueryData('post', '3', upsertedData),
+    )
+
+    await upsertRes
+    let state = selector(storeRef.store.getState())
+    expect(state.data).toEqual(upsertedData)
+    expect(state.isSuccess).toBeTruthy()
+
+    await fetchRes
+    state = selector(storeRef.store.getState())
+    expect(state.data).toEqual(upsertedData)
+    expect(state.isError).toBeTruthy()
+  })
+})
+
+describe('upsertQueryEntries', () => {
+  const posts: Post[] = [
+    { id: '1', contents: 'A', title: 'A' },
+    { id: '2', contents: 'B', title: 'B' },
+    { id: '3', contents: 'C', title: 'C' },
+  ]
+
+  const entriesAction = api.util.upsertQueryEntries([
+    { endpointName: 'getPosts', arg: undefined, value: posts },
+    ...posts.map((post) => ({
+      endpointName: 'postWithSideEffect' as const,
+      arg: post.id,
+      value: post,
+    })),
+  ])
+
+  test('Upserts many entries at once', async () => {
+    storeRef.store.dispatch(entriesAction)
+
+    const state = storeRef.store.getState()
+
+    expect(api.endpoints.getPosts.select()(state).data).toBe(posts)
+
+    for (const post of posts) {
+      expect(api.endpoints.postWithSideEffect.select(post.id)(state).data).toBe(
+        post,
+      )
+
+      // Should have added tags
+      expect(state.api.provided.tags.Post[post.id]).toEqual([
+        `postWithSideEffect("${post.id}")`,
+      ])
+    }
+  })
+
+  test('Triggers cache lifecycles and side effects', async () => {
+    storeRef.store.dispatch(entriesAction)
+
+    // Tricky timing. The cache data promises will be resolved
+    // in microtasks. We need to wait for them. Best to do this
+    // in a loop just to avoid a hardcoded delay, but also this
+    // needs to complete before `keepUnusedDataFor` expires them.
+    await waitFor(
+      () => {
+        const state = storeRef.store.getState()
+
+        // onCacheEntryAdded should have run for each post,
+        // including cache data being resolved
+        for (const post of posts) {
+          const matchingSideEffectAction = state.actions.find(
+            (action) =>
+              postAddedAction.match(action) && action.payload === post.id,
+          )
+          expect(matchingSideEffectAction).toBeTruthy()
+        }
+
+        const selectedData =
+          api.endpoints.postWithSideEffect.select('1')(state).data
+
+        expect(selectedData).toBe(posts[0])
+      },
+      { timeout: 50, interval: 5 },
+    )
+
+    // The cache data should be removed after the keepUnusedDataFor time,
+    // so wait longer than that
+    await delay(100)
+
+    const stateAfter = storeRef.store.getState()
+
+    expect(api.endpoints.postWithSideEffect.select('1')(stateAfter).data).toBe(
+      undefined,
+    )
+  })
+
+  test('Handles repeated upserts and async lifecycles', async () => {
+    const StateForUpsertFolder = ({ folderId }: { folderId: number }) => {
+      const { status } = api.useGetFolderQuery(folderId)
+
+      return (
+        <>
+          <div>
+            Status getFolder with ID (
+            {folderId === 1 ? 'original request' : 'upserted'}) {folderId}:{' '}
+            <span data-testid={`status-${folderId}`}>{status}</span>
+          </div>
+        </>
+      )
+    }
+
+    const Folder = () => {
+      const { data, isLoading, isError } = api.useGetFolderQuery(1)
+
+      return (
+        <div>
+          <h1>Folders</h1>
+
+          {isLoading && <div>Loading...</div>}
+
+          {isError && <div>Error...</div>}
+
+          <StateForUpsertFolder key={`state-${1}`} folderId={1} />
+          <StateForUpsertFolder key={`state-${2}`} folderId={2} />
+        </div>
+      )
+    }
+
+    render(<Folder />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() => {
+      const { actions } = storeRef.store.getState()
+      // Inspection:
+      // - 2 inits
+      // - 2 pendings, 2 fulfilleds for the hook queries
+      // - 2 upserts
+      expect(actions.length).toBe(8)
+      expect(
+        actions.filter((a) => api.util.upsertQueryEntries.match(a)).length,
+      ).toBe(2)
+    })
+    expect(screen.getByTestId('status-2').textContent).toBe('fulfilled')
+  })
+})
+
+describe('full integration', () => {
+  test('success case', async () => {
+    baseQuery
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'All about cheese.',
+        contents: 'TODO',
+      })
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'Meanwhile, this changed server-side.',
+        contents: 'Delicious cheese!',
+      })
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'Meanwhile, this changed server-side.',
+        contents: 'Delicious cheese!',
+      })
+      .mockResolvedValueOnce(42)
+    const { result } = renderHook(
+      () => ({
+        query: api.endpoints.post.useQuery('3'),
+        mutation: api.endpoints.updatePost.useMutation(),
+      }),
+      { wrapper: storeRef.wrapper },
+    )
+    await hookWaitFor(() => expect(result.current.query.isSuccess).toBeTruthy())
+
+    expect(result.current.query.data).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'TODO',
+    })
+
+    await act(async () => {
+      await result.current.mutation[0]({
+        id: '3',
+        contents: 'Delicious cheese!',
+      })
+    })
+
+    expect(result.current.query.data).toEqual({
+      id: '3',
+      title: 'Meanwhile, this changed server-side.',
+      contents: 'Delicious cheese!',
+    })
+
+    await hookWaitFor(() =>
+      expect(result.current.query.data).toEqual({
+        id: '3',
+        title: 'Meanwhile, this changed server-side.',
+        contents: 'Delicious cheese!',
+      }),
+    )
+  })
+
+  test('error case', async () => {
+    baseQuery
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'All about cheese.',
+        contents: 'TODO',
+      })
+      .mockRejectedValueOnce('some error!')
+      .mockResolvedValueOnce({
+        id: '3',
+        title: 'Meanwhile, this changed server-side.',
+        contents: 'TODO',
+      })
+      .mockResolvedValueOnce(42)
+
+    const { result } = renderHook(
+      () => ({
+        query: api.endpoints.post.useQuery('3'),
+        mutation: api.endpoints.updatePost.useMutation(),
+      }),
+      { wrapper: storeRef.wrapper },
+    )
+    await hookWaitFor(() => expect(result.current.query.isSuccess).toBeTruthy())
+
+    expect(result.current.query.data).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'TODO',
+    })
+
+    await act(async () => {
+      await result.current.mutation[0]({
+        id: '3',
+        contents: 'Delicious cheese!',
+      })
+    })
+
+    // optimistic update
+    expect(result.current.query.data).toEqual({
+      id: '3',
+      title: 'All about cheese.',
+      contents: 'Delicious cheese!',
+    })
+
+    // mutation failed - will not invalidate query and not refetch data from the server
+    await expect(() =>
+      hookWaitFor(
+        () =>
+          expect(result.current.query.data).toEqual({
+            id: '3',
+            title: 'Meanwhile, this changed server-side.',
+            contents: 'TODO',
+          }),
+        50,
+      ),
+    ).rejects.toBeTruthy()
+
+    act(() => void result.current.query.refetch())
+
+    // manually refetching gives up-to-date data
+    await hookWaitFor(
+      () =>
+        expect(result.current.query.data).toEqual({
+          id: '3',
+          title: 'Meanwhile, this changed server-side.',
+          contents: 'TODO',
+        }),
+      50,
+    )
+  })
+
+  test('Interop with in-flight requests', async () => {
+    await act(async () => {
+      const fetchRes = storeRef.store.dispatch(
+        api.endpoints.post2.initiate('3'),
+      )
+
+      const upsertRes = storeRef.store.dispatch(
+        api.util.upsertQueryData('post2', '3', {
+          id: '3',
+          title: 'Upserted title',
+          contents: 'Upserted contents',
+        }),
+      )
+
+      const selectEntry = api.endpoints.post2.select('3')
+      await waitFor(
+        () => {
+          const entry1 = selectEntry(storeRef.store.getState())
+          expect(entry1.data).toEqual({
+            id: '3',
+            title: 'Upserted title',
+            contents: 'Upserted contents',
+          })
+        },
+        { interval: 1, timeout: 15 },
+      )
+      await waitFor(
+        () => {
+          const entry2 = selectEntry(storeRef.store.getState())
+          expect(entry2.data).toEqual({
+            id: '3',
+            title: 'All about cheese.',
+            contents: 'TODO',
+          })
+        },
+        { interval: 1 },
+      )
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/polling.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/polling.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/polling.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,233 @@
+import { createApi } from '@reduxjs/toolkit/query'
+import { delay } from 'msw'
+import { setupApiStore } from '../../tests/utils/helpers'
+import type { SubscriptionSelectors } from '../core/buildMiddleware/types'
+
+const mockBaseQuery = vi
+  .fn()
+  .mockImplementation((args: any) => ({ data: args }))
+
+const api = createApi({
+  baseQuery: mockBaseQuery,
+  tagTypes: ['Posts'],
+  endpoints: (build) => ({
+    getPosts: build.query<unknown, number>({
+      query(pageNumber) {
+        return { url: 'posts', params: pageNumber }
+      },
+      providesTags: ['Posts'],
+    }),
+  }),
+})
+const { getPosts } = api.endpoints
+
+const storeRef = setupApiStore(api)
+
+let getSubscriptions: SubscriptionSelectors['getSubscriptions']
+
+beforeEach(() => {
+  ;({ getSubscriptions } = storeRef.store.dispatch(
+    api.internalActions.internal_getRTKQSubscriptions(),
+  ) as unknown as SubscriptionSelectors)
+})
+
+const getSubscribersForQueryCacheKey = (queryCacheKey: string) =>
+  getSubscriptions()[queryCacheKey] || {}
+const createSubscriptionGetter = (queryCacheKey: string) => () =>
+  getSubscribersForQueryCacheKey(queryCacheKey)
+
+describe('polling tests', () => {
+  it('clears intervals when seeing a resetApiState action', async () => {
+    await storeRef.store.dispatch(
+      getPosts.initiate(1, {
+        subscriptionOptions: { pollingInterval: 10 },
+        subscribe: true,
+      }),
+    )
+
+    expect(mockBaseQuery).toHaveBeenCalledOnce()
+
+    storeRef.store.dispatch(api.util.resetApiState())
+
+    await delay(30)
+
+    expect(mockBaseQuery).toHaveBeenCalledOnce()
+  })
+
+  it('replaces polling interval when the subscription options are updated', async () => {
+    const { requestId, queryCacheKey, ...subscription } =
+      storeRef.store.dispatch(
+        getPosts.initiate(1, {
+          subscriptionOptions: { pollingInterval: 10 },
+          subscribe: true,
+        }),
+      )
+
+    const getSubs = createSubscriptionGetter(queryCacheKey)
+
+    await delay(1)
+    expect(Object.keys(getSubs())).toHaveLength(1)
+    expect(getSubs()[requestId].pollingInterval).toBe(10)
+
+    subscription.updateSubscriptionOptions({ pollingInterval: 20 })
+
+    await delay(1)
+    expect(Object.keys(getSubs())).toHaveLength(1)
+    expect(getSubs()[requestId].pollingInterval).toBe(20)
+  })
+
+  it(`doesn't replace the interval when removing a shared query instance with a poll `, async () => {
+    const subscriptionOne = storeRef.store.dispatch(
+      getPosts.initiate(1, {
+        subscriptionOptions: { pollingInterval: 10 },
+        subscribe: true,
+      }),
+    )
+
+    storeRef.store.dispatch(
+      getPosts.initiate(1, {
+        subscriptionOptions: { pollingInterval: 10 },
+        subscribe: true,
+      }),
+    )
+
+    await delay(10)
+
+    const getSubs = createSubscriptionGetter(subscriptionOne.queryCacheKey)
+
+    expect(Object.keys(getSubs())).toHaveLength(2)
+
+    subscriptionOne.unsubscribe()
+
+    await delay(1)
+    expect(Object.keys(getSubs())).toHaveLength(1)
+  })
+
+  it('uses lowest specified interval when two components are mounted', async () => {
+    storeRef.store.dispatch(
+      getPosts.initiate(1, {
+        subscriptionOptions: { pollingInterval: 30000 },
+        subscribe: true,
+      }),
+    )
+
+    storeRef.store.dispatch(
+      getPosts.initiate(1, {
+        subscriptionOptions: { pollingInterval: 10 },
+        subscribe: true,
+      }),
+    )
+
+    await delay(20)
+
+    expect(mockBaseQuery.mock.calls.length).toBeGreaterThanOrEqual(2)
+  })
+
+  it('respects skipPollingIfUnfocused', async () => {
+    mockBaseQuery.mockClear()
+    storeRef.store.dispatch(
+      getPosts.initiate(2, {
+        subscriptionOptions: {
+          pollingInterval: 10,
+          skipPollingIfUnfocused: true,
+        },
+        subscribe: true,
+      }),
+    )
+    storeRef.store.dispatch(api.internalActions?.onFocusLost())
+
+    await delay(50)
+    const callsWithSkip = mockBaseQuery.mock.calls.length
+
+    storeRef.store.dispatch(
+      getPosts.initiate(2, {
+        subscriptionOptions: {
+          pollingInterval: 10,
+          skipPollingIfUnfocused: false,
+        },
+        subscribe: true,
+      }),
+    )
+
+    storeRef.store.dispatch(api.internalActions?.onFocus())
+
+    await delay(50)
+    const callsWithoutSkip = mockBaseQuery.mock.calls.length
+
+    expect(callsWithSkip).toBe(1)
+    expect(callsWithoutSkip).toBeGreaterThan(2)
+
+    storeRef.store.dispatch(api.util.resetApiState())
+  })
+
+  it('respects skipPollingIfUnfocused if at least one subscription has it', async () => {
+    storeRef.store.dispatch(
+      getPosts.initiate(3, {
+        subscriptionOptions: {
+          pollingInterval: 10,
+          skipPollingIfUnfocused: false,
+        },
+        subscribe: true,
+      }),
+    )
+
+    await delay(50)
+    const callsWithoutSkip = mockBaseQuery.mock.calls.length
+
+    storeRef.store.dispatch(
+      getPosts.initiate(3, {
+        subscriptionOptions: {
+          pollingInterval: 15,
+          skipPollingIfUnfocused: true,
+        },
+        subscribe: true,
+      }),
+    )
+
+    storeRef.store.dispatch(
+      getPosts.initiate(3, {
+        subscriptionOptions: {
+          pollingInterval: 20,
+          skipPollingIfUnfocused: false,
+        },
+        subscribe: true,
+      }),
+    )
+
+    storeRef.store.dispatch(api.internalActions?.onFocusLost())
+
+    await delay(50)
+    const callsWithSkip = mockBaseQuery.mock.calls.length
+
+    expect(callsWithoutSkip).toBeGreaterThan(2)
+    expect(callsWithSkip).toBe(callsWithoutSkip + 1)
+  })
+
+  it('replaces skipPollingIfUnfocused when the subscription options are updated', async () => {
+    const { requestId, queryCacheKey, ...subscription } =
+      storeRef.store.dispatch(
+        getPosts.initiate(1, {
+          subscriptionOptions: {
+            pollingInterval: 10,
+            skipPollingIfUnfocused: false,
+          },
+          subscribe: true,
+        }),
+      )
+
+    const getSubs = createSubscriptionGetter(queryCacheKey)
+
+    await delay(1)
+    expect(Object.keys(getSubs())).toHaveLength(1)
+    expect(getSubs()[requestId].skipPollingIfUnfocused).toBe(false)
+
+    subscription.updateSubscriptionOptions({
+      pollingInterval: 20,
+      skipPollingIfUnfocused: true,
+    })
+
+    await delay(1)
+    expect(Object.keys(getSubs())).toHaveLength(1)
+    expect(getSubs()[requestId].skipPollingIfUnfocused).toBe(true)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/queryFn.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/queryFn.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/queryFn.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,445 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import type { QuerySubState } from '@internal/query/core/apiState'
+import type { Post } from '@internal/query/tests/mocks/handlers'
+import { posts } from '@internal/query/tests/mocks/handlers'
+import { actionsReducer, setupApiStore } from '@internal/tests/utils/helpers'
+import type { SerializedError } from '@reduxjs/toolkit'
+import { configureStore } from '@reduxjs/toolkit'
+import type { BaseQueryFn, FetchBaseQueryError } from '@reduxjs/toolkit/query'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+
+describe('queryFn base implementation tests', () => {
+  const baseQuery: BaseQueryFn<string, { wrappedByBaseQuery: string }, string> =
+    vi.fn((arg: string) =>
+      arg.includes('withErrorQuery')
+        ? { error: `cut${arg}` }
+        : { data: { wrappedByBaseQuery: arg } },
+    )
+
+  const api = createApi({
+    baseQuery,
+    endpoints: (build) => ({
+      withQuery: build.query<string, string>({
+        query(arg: string) {
+          return `resultFrom(${arg})`
+        },
+        transformResponse(response) {
+          return response.wrappedByBaseQuery
+        },
+      }),
+      withErrorQuery: build.query<string, string>({
+        query(arg: string) {
+          return `resultFrom(${arg})`
+        },
+        transformErrorResponse(response) {
+          return response.slice(3)
+        },
+      }),
+      withQueryFn: build.query<string, string>({
+        queryFn(arg: string) {
+          return { data: `resultFrom(${arg})` }
+        },
+      }),
+      withInvalidDataQueryFn: build.query<string, string>({
+        // @ts-expect-error
+        queryFn(arg: string) {
+          return { data: 5 }
+        },
+      }),
+      withErrorQueryFn: build.query<string, string>({
+        queryFn(arg: string) {
+          return { error: `resultFrom(${arg})` }
+        },
+      }),
+      withInvalidErrorQueryFn: build.query<string, string>({
+        // @ts-expect-error
+        queryFn(arg: string) {
+          return { error: 5 }
+        },
+      }),
+      withThrowingQueryFn: build.query<string, string>({
+        queryFn(arg: string) {
+          throw new Error(`resultFrom(${arg})`)
+        },
+      }),
+      withAsyncQueryFn: build.query<string, string>({
+        async queryFn(arg: string) {
+          return { data: `resultFrom(${arg})` }
+        },
+      }),
+      withInvalidDataAsyncQueryFn: build.query<string, string>({
+        // @ts-expect-error
+        async queryFn(arg: string) {
+          return { data: 5 }
+        },
+      }),
+      withAsyncErrorQueryFn: build.query<string, string>({
+        async queryFn(arg: string) {
+          return { error: `resultFrom(${arg})` }
+        },
+      }),
+      withInvalidAsyncErrorQueryFn: build.query<string, string>({
+        // @ts-expect-error
+        async queryFn(arg: string) {
+          return { error: 5 }
+        },
+      }),
+      withAsyncThrowingQueryFn: build.query<string, string>({
+        async queryFn(arg: string) {
+          throw new Error(`resultFrom(${arg})`)
+        },
+      }),
+      mutationWithQueryFn: build.mutation<string, string>({
+        queryFn(arg: string) {
+          return { data: `resultFrom(${arg})` }
+        },
+      }),
+      mutationWithInvalidDataQueryFn: build.mutation<string, string>({
+        // @ts-expect-error
+        queryFn(arg: string) {
+          return { data: 5 }
+        },
+      }),
+      mutationWithErrorQueryFn: build.mutation<string, string>({
+        queryFn(arg: string) {
+          return { error: `resultFrom(${arg})` }
+        },
+      }),
+      mutationWithInvalidErrorQueryFn: build.mutation<string, string>({
+        // @ts-expect-error
+        queryFn(arg: string) {
+          return { error: 5 }
+        },
+      }),
+      mutationWithThrowingQueryFn: build.mutation<string, string>({
+        queryFn(arg: string) {
+          throw new Error(`resultFrom(${arg})`)
+        },
+      }),
+      mutationWithAsyncQueryFn: build.mutation<string, string>({
+        async queryFn(arg: string) {
+          return { data: `resultFrom(${arg})` }
+        },
+      }),
+      mutationWithInvalidAsyncQueryFn: build.mutation<string, string>({
+        // @ts-expect-error
+        async queryFn(arg: string) {
+          return { data: 5 }
+        },
+      }),
+      mutationWithAsyncErrorQueryFn: build.mutation<string, string>({
+        async queryFn(arg: string) {
+          return { error: `resultFrom(${arg})` }
+        },
+      }),
+      mutationWithInvalidAsyncErrorQueryFn: build.mutation<string, string>({
+        // @ts-expect-error
+        async queryFn(arg: string) {
+          return { error: 5 }
+        },
+      }),
+      mutationWithAsyncThrowingQueryFn: build.mutation<string, string>({
+        async queryFn(arg: string) {
+          throw new Error(`resultFrom(${arg})`)
+        },
+      }),
+      // @ts-expect-error
+      withNeither: build.query<string, string>({}),
+      // @ts-expect-error
+      mutationWithNeither: build.mutation<string, string>({}),
+    }),
+  })
+
+  const {
+    withQuery,
+    withErrorQuery,
+    withQueryFn,
+    withErrorQueryFn,
+    withThrowingQueryFn,
+    withAsyncQueryFn,
+    withAsyncErrorQueryFn,
+    withAsyncThrowingQueryFn,
+    mutationWithQueryFn,
+    mutationWithErrorQueryFn,
+    mutationWithThrowingQueryFn,
+    mutationWithAsyncQueryFn,
+    mutationWithAsyncErrorQueryFn,
+    mutationWithAsyncThrowingQueryFn,
+    withNeither,
+    mutationWithNeither,
+  } = api.endpoints
+
+  const store = configureStore({
+    reducer: {
+      [api.reducerPath]: api.reducer,
+    },
+    middleware: (gDM) => gDM({}).concat(api.middleware),
+  })
+
+  test.each([
+    ['withQuery', withQuery, 'data'],
+    ['withErrorQuery', withErrorQuery, 'error'],
+    ['withQueryFn', withQueryFn, 'data'],
+    ['withErrorQueryFn', withErrorQueryFn, 'error'],
+    ['withThrowingQueryFn', withThrowingQueryFn, 'throw'],
+    ['withAsyncQueryFn', withAsyncQueryFn, 'data'],
+    ['withAsyncErrorQueryFn', withAsyncErrorQueryFn, 'error'],
+    ['withAsyncThrowingQueryFn', withAsyncThrowingQueryFn, 'throw'],
+  ])('%s', async (endpointName, endpoint, expectedResult) => {
+    const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+    const thunk = endpoint.initiate(endpointName)
+
+    const result: undefined | QuerySubState<any> = await store.dispatch(thunk)
+
+    if (endpointName.includes('Throw')) {
+      expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        `An unhandled error occurred processing a request for the endpoint "${endpointName}".\nIn the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+        Error(`resultFrom(${endpointName})`),
+      )
+    } else {
+      expect(consoleErrorSpy).not.toHaveBeenCalled()
+    }
+
+    if (expectedResult === 'data') {
+      expect(result).toEqual(
+        expect.objectContaining({
+          data: `resultFrom(${endpointName})`,
+        }),
+      )
+    } else if (expectedResult === 'error') {
+      expect(result).toEqual(
+        expect.objectContaining({
+          error: `resultFrom(${endpointName})`,
+        }),
+      )
+    } else {
+      expect(result).toEqual(
+        expect.objectContaining({
+          error: expect.objectContaining({
+            message: `resultFrom(${endpointName})`,
+          }),
+        }),
+      )
+    }
+
+    consoleErrorSpy.mockRestore()
+  })
+
+  test.each([
+    ['mutationWithQueryFn', mutationWithQueryFn, 'data'],
+    ['mutationWithErrorQueryFn', mutationWithErrorQueryFn, 'error'],
+    ['mutationWithThrowingQueryFn', mutationWithThrowingQueryFn, 'throw'],
+    ['mutationWithAsyncQueryFn', mutationWithAsyncQueryFn, 'data'],
+    ['mutationWithAsyncErrorQueryFn', mutationWithAsyncErrorQueryFn, 'error'],
+    [
+      'mutationWithAsyncThrowingQueryFn',
+      mutationWithAsyncThrowingQueryFn,
+      'throw',
+    ],
+  ])('%s', async (endpointName, endpoint, expectedResult) => {
+    const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+    const thunk = endpoint.initiate(endpointName)
+
+    const result:
+      | undefined
+      | { data: string }
+      | { error: string | SerializedError } = await store.dispatch(thunk)
+
+    if (endpointName.includes('Throw')) {
+      expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        `An unhandled error occurred processing a request for the endpoint "${endpointName}".\nIn the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+        Error(`resultFrom(${endpointName})`),
+      )
+    } else {
+      expect(consoleErrorSpy).not.toHaveBeenCalled()
+    }
+
+    if (expectedResult === 'data') {
+      expect(result).toEqual(
+        expect.objectContaining({
+          data: `resultFrom(${endpointName})`,
+        }),
+      )
+    } else if (expectedResult === 'error') {
+      expect(result).toEqual(
+        expect.objectContaining({
+          error: `resultFrom(${endpointName})`,
+        }),
+      )
+    } else {
+      expect(result).toEqual(
+        expect.objectContaining({
+          error: expect.objectContaining({
+            message: `resultFrom(${endpointName})`,
+          }),
+        }),
+      )
+    }
+
+    consoleErrorSpy.mockRestore()
+  })
+
+  test('neither provided', async () => {
+    const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+    {
+      const thunk = withNeither.initiate('withNeither')
+
+      const result: QuerySubState<any> = await store.dispatch(thunk)
+
+      expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        `An unhandled error occurred processing a request for the endpoint "withNeither".\nIn the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+        TypeError('endpointDefinition.queryFn is not a function'),
+      )
+
+      expect(result.error).toEqual(
+        expect.objectContaining({
+          message: 'endpointDefinition.queryFn is not a function',
+        }),
+      )
+
+      consoleErrorSpy.mockClear()
+    }
+    {
+      const thunk = mutationWithNeither.initiate('mutationWithNeither')
+
+      const result:
+        | undefined
+        | { data: string }
+        | { error: string | SerializedError } = await store.dispatch(thunk)
+
+      expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        `An unhandled error occurred processing a request for the endpoint "mutationWithNeither".\nIn the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+        TypeError('endpointDefinition.queryFn is not a function'),
+      )
+
+      if (!('error' in result)) {
+        expect.fail()
+      }
+
+      expect(result.error).toEqual(
+        expect.objectContaining({
+          message: 'endpointDefinition.queryFn is not a function',
+        }),
+      )
+    }
+
+    consoleErrorSpy.mockRestore()
+  })
+})
+
+describe('usage scenario tests', () => {
+  const mockData = { id: 1, name: 'Banana' }
+  const mockDocResult = {
+    exists: () => true,
+    data: () => mockData,
+  }
+  const get = vi.fn(() => Promise.resolve(mockDocResult))
+  const doc = vi.fn((name) => ({
+    get,
+  }))
+  const collection = vi.fn((name) => ({ get, doc }))
+  const firestore = () => {
+    return { collection, doc }
+  }
+
+  const baseQuery = fetchBaseQuery({ baseUrl: 'https://example.com/' })
+  const api = createApi({
+    baseQuery,
+    endpoints: (build) => ({
+      getRandomUser: build.query<Post, void>({
+        async queryFn(_arg: void, _queryApi, _extraOptions, fetchWithBQ) {
+          // get a random post
+          const randomResult = await fetchWithBQ('posts/random')
+          if (randomResult.error) {
+            throw randomResult.error
+          }
+          const post = randomResult.data as Post
+          const result = await fetchWithBQ(`/post/${post.id}`)
+          return result.data
+            ? { data: result.data as Post }
+            : { error: result.error as FetchBaseQueryError }
+        },
+      }),
+      getFirebaseUser: build.query<typeof mockData, number>({
+        async queryFn(arg: number) {
+          const getResult = await firestore().collection('users').doc(arg).get()
+          if (!getResult.exists()) {
+            throw new Error('Missing user')
+          }
+          return { data: getResult.data() }
+        },
+      }),
+      getMissingFirebaseUser: build.query<typeof mockData, number>({
+        async queryFn(arg: number) {
+          const getResult = await firestore().collection('users').doc(arg).get()
+          // intentionally throw if it exists to keep the mocking overhead low
+          if (getResult.exists()) {
+            throw new Error('Missing user')
+          }
+          return { data: getResult.data() }
+        },
+      }),
+    }),
+  })
+
+  const storeRef = setupApiStore(api, {
+    ...actionsReducer,
+  })
+
+  /**
+   * Allow for a scenario where you can chain X requests
+   * https://discord.com/channels/102860784329052160/103538784460615680/825430959247720449
+   * const resp1 = await api.get(url);
+   * const resp2 = await api.get(`${url2}/id=${resp1.data.id}`);
+   */
+
+  it('can chain multiple queries together', async () => {
+    const result = await storeRef.store.dispatch(
+      api.endpoints.getRandomUser.initiate(),
+    )
+    expect(result.data).toEqual(posts[1])
+  })
+
+  it('can wrap a service like Firebase', async () => {
+    const result = await storeRef.store.dispatch(
+      api.endpoints.getFirebaseUser.initiate(1),
+    )
+    expect(result.data).toEqual(mockData)
+  })
+
+  it('can wrap a service like Firebase and handle errors', async () => {
+    const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+    const result: QuerySubState<any> = await storeRef.store.dispatch(
+      api.endpoints.getMissingFirebaseUser.initiate(1),
+    )
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `An unhandled error occurred processing a request for the endpoint "getMissingFirebaseUser".\nIn the case of an unhandled error, no tags will be "provided" or "invalidated".`,
+      Error('Missing user'),
+    )
+
+    expect(result.data).toBeUndefined()
+    expect(result.error).toEqual(
+      expect.objectContaining({
+        message: 'Missing user',
+        name: 'Error',
+      }),
+    )
+
+    consoleErrorSpy.mockRestore()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/queryLifecycle.test-d.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/queryLifecycle.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/queryLifecycle.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,371 @@
+import type { PatchCollection, Recipe } from '@internal/query/core/buildThunks'
+import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit'
+import type {
+  FetchBaseQueryError,
+  FetchBaseQueryMeta,
+  RootState,
+  TypedMutationOnQueryStarted,
+  TypedQueryOnQueryStarted,
+} from '@reduxjs/toolkit/query'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+
+const api = createApi({
+  baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+  endpoints: () => ({}),
+})
+
+describe('type tests', () => {
+  test(`mutation: onStart and onSuccess`, async () => {
+    const extended = api.injectEndpoints({
+      overrideExisting: true,
+      endpoints: (build) => ({
+        injected: build.mutation<number, string>({
+          query: () => '/success',
+          async onQueryStarted(arg, { queryFulfilled }) {
+            // awaiting without catching like this would result in an `unhandledRejection` exception if there was an error
+            // unfortunately we cannot test for that in jest.
+            const result = await queryFulfilled
+
+            expectTypeOf(result).toMatchTypeOf<{
+              data: number
+              meta?: FetchBaseQueryMeta
+            }>()
+          },
+        }),
+      }),
+    })
+  })
+
+  test('query types', () => {
+    const extended = api.injectEndpoints({
+      overrideExisting: true,
+      endpoints: (build) => ({
+        injected: build.query<number, string>({
+          query: () => '/success',
+          async onQueryStarted(arg, { queryFulfilled }) {
+            queryFulfilled.then(
+              (result) => {
+                expectTypeOf(result).toMatchTypeOf<{
+                  data: number
+                  meta?: FetchBaseQueryMeta
+                }>()
+              },
+              (reason) => {
+                if (reason.isUnhandledError) {
+                  expectTypeOf(reason).toEqualTypeOf<{
+                    error: unknown
+                    meta?: undefined
+                    isUnhandledError: true
+                  }>()
+                } else {
+                  expectTypeOf(reason).toEqualTypeOf<{
+                    error: FetchBaseQueryError
+                    isUnhandledError: false
+                    meta: FetchBaseQueryMeta | undefined
+                  }>()
+                }
+              },
+            )
+
+            queryFulfilled.catch((reason) => {
+              if (reason.isUnhandledError) {
+                expectTypeOf(reason).toEqualTypeOf<{
+                  error: unknown
+                  meta?: undefined
+                  isUnhandledError: true
+                }>()
+              } else {
+                expectTypeOf(reason).toEqualTypeOf<{
+                  error: FetchBaseQueryError
+                  isUnhandledError: false
+                  meta: FetchBaseQueryMeta | undefined
+                }>()
+              }
+            })
+
+            const result = await queryFulfilled
+
+            expectTypeOf(result).toMatchTypeOf<{
+              data: number
+              meta?: FetchBaseQueryMeta
+            }>()
+          },
+        }),
+      }),
+    })
+  })
+
+  test('mutation types', () => {
+    const extended = api.injectEndpoints({
+      overrideExisting: true,
+      endpoints: (build) => ({
+        injected: build.query<number, string>({
+          query: () => '/success',
+          async onQueryStarted(arg, { queryFulfilled }) {
+            queryFulfilled.then(
+              (result) => {
+                expectTypeOf(result).toMatchTypeOf<{
+                  data: number
+                  meta?: FetchBaseQueryMeta
+                }>()
+              },
+              (reason) => {
+                if (reason.isUnhandledError) {
+                  expectTypeOf(reason).toEqualTypeOf<{
+                    error: unknown
+                    meta?: undefined
+                    isUnhandledError: true
+                  }>()
+                } else {
+                  expectTypeOf(reason).toEqualTypeOf<{
+                    error: FetchBaseQueryError
+                    isUnhandledError: false
+                    meta: FetchBaseQueryMeta | undefined
+                  }>()
+                }
+              },
+            )
+
+            queryFulfilled.catch((reason) => {
+              if (reason.isUnhandledError) {
+                expectTypeOf(reason).toEqualTypeOf<{
+                  error: unknown
+                  meta?: undefined
+                  isUnhandledError: true
+                }>()
+              } else {
+                expectTypeOf(reason).toEqualTypeOf<{
+                  error: FetchBaseQueryError
+                  isUnhandledError: false
+                  meta: FetchBaseQueryMeta | undefined
+                }>()
+              }
+            })
+
+            const result = await queryFulfilled
+
+            expectTypeOf(result).toMatchTypeOf<{
+              data: number
+              meta?: FetchBaseQueryMeta
+            }>()
+          },
+        }),
+      }),
+    })
+  })
+
+  describe('typed `onQueryStarted` function', () => {
+    test('TypedQueryOnQueryStarted creates a pre-typed version of onQueryStarted', () => {
+      type Post = {
+        id: number
+        title: string
+        userId: number
+      }
+
+      type PostsApiResponse = {
+        posts: Post[]
+        total: number
+        skip: number
+        limit: number
+      }
+
+      type QueryArgument = number | undefined
+
+      type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+
+      const baseApiSlice = createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),
+        reducerPath: 'postsApi',
+        tagTypes: ['Posts'],
+        endpoints: (builder) => ({
+          getPosts: builder.query<PostsApiResponse, void>({
+            query: () => `/posts`,
+          }),
+
+          getPostById: builder.query<Post, QueryArgument>({
+            query: (postId) => `/posts/${postId}`,
+          }),
+        }),
+      })
+
+      const updatePostOnFulfilled: TypedQueryOnQueryStarted<
+        PostsApiResponse,
+        QueryArgument,
+        BaseQueryFunction,
+        'postsApi'
+      > = async (queryArgument, queryLifeCycleApi) => {
+        const {
+          dispatch,
+          extra,
+          getCacheEntry,
+          getState,
+          queryFulfilled,
+          requestId,
+          updateCachedData,
+        } = queryLifeCycleApi
+
+        expectTypeOf(queryArgument).toEqualTypeOf<QueryArgument>()
+
+        expectTypeOf(dispatch).toEqualTypeOf<
+          ThunkDispatch<any, any, UnknownAction>
+        >()
+
+        expectTypeOf(extra).toBeUnknown()
+
+        expectTypeOf(getState).toEqualTypeOf<
+          () => RootState<any, any, 'postsApi'>
+        >()
+
+        expectTypeOf(requestId).toBeString()
+
+        expectTypeOf(getCacheEntry).toBeFunction()
+
+        expectTypeOf(updateCachedData).toEqualTypeOf<
+          (updateRecipe: Recipe<PostsApiResponse>) => PatchCollection
+        >()
+
+        expectTypeOf(queryFulfilled).resolves.toEqualTypeOf<{
+          data: PostsApiResponse
+          meta: FetchBaseQueryMeta | undefined
+        }>()
+
+        const result = await queryFulfilled
+
+        const { posts } = result.data
+
+        dispatch(
+          baseApiSlice.util.upsertQueryEntries(
+            posts.map((post) => ({
+              // Without `as const` this will result in a TS error in TS 4.7.
+              endpointName: 'getPostById' as const,
+              arg: post.id,
+              value: post,
+            })),
+          ),
+        )
+      }
+
+      const extendedApiSlice = baseApiSlice.injectEndpoints({
+        endpoints: (builder) => ({
+          getPostsByUserId: builder.query<PostsApiResponse, QueryArgument>({
+            query: (userId) => `/posts/user/${userId}`,
+
+            onQueryStarted: updatePostOnFulfilled,
+          }),
+        }),
+      })
+    })
+
+    test('TypedMutationOnQueryStarted creates a pre-typed version of onQueryStarted', () => {
+      type Post = {
+        id: number
+        title: string
+        userId: number
+      }
+
+      type PostsApiResponse = {
+        posts: Post[]
+        total: number
+        skip: number
+        limit: number
+      }
+
+      type QueryArgument = Pick<Post, 'id'> & Partial<Post>
+
+      type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>
+
+      const baseApiSlice = createApi({
+        baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),
+        reducerPath: 'postsApi',
+        tagTypes: ['Posts'],
+        endpoints: (builder) => ({
+          getPosts: builder.query<PostsApiResponse, void>({
+            query: () => `/posts`,
+          }),
+
+          getPostById: builder.query<Post, number>({
+            query: (postId) => `/posts/${postId}`,
+          }),
+        }),
+      })
+
+      const updatePostOnFulfilled: TypedMutationOnQueryStarted<
+        Post,
+        QueryArgument,
+        BaseQueryFunction,
+        'postsApi'
+      > = async (queryArgument, mutationLifeCycleApi) => {
+        const { id, ...patch } = queryArgument
+        const {
+          dispatch,
+          extra,
+          getCacheEntry,
+          getState,
+          queryFulfilled,
+          requestId,
+        } = mutationLifeCycleApi
+
+        const patchCollection = dispatch(
+          baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {
+            Object.assign(draftPost, patch)
+          }),
+        )
+
+        expectTypeOf(queryFulfilled).resolves.toEqualTypeOf<{
+          data: Post
+          meta: FetchBaseQueryMeta | undefined
+        }>()
+
+        expectTypeOf(queryArgument).toEqualTypeOf<QueryArgument>()
+
+        expectTypeOf(dispatch).toEqualTypeOf<
+          ThunkDispatch<any, any, UnknownAction>
+        >()
+
+        expectTypeOf(extra).toBeUnknown()
+
+        expectTypeOf(getState).toEqualTypeOf<
+          () => RootState<any, any, 'postsApi'>
+        >()
+
+        expectTypeOf(requestId).toBeString()
+
+        expectTypeOf(getCacheEntry).toBeFunction()
+
+        expectTypeOf(mutationLifeCycleApi).not.toHaveProperty(
+          'updateCachedData',
+        )
+
+        try {
+          await queryFulfilled
+        } catch {
+          patchCollection.undo()
+        }
+      }
+
+      const extendedApiSlice = baseApiSlice.injectEndpoints({
+        endpoints: (builder) => ({
+          addPost: builder.mutation<Post, Omit<QueryArgument, 'id'>>({
+            query: (body) => ({
+              url: `posts/add`,
+              method: 'POST',
+              body,
+            }),
+
+            onQueryStarted: updatePostOnFulfilled,
+          }),
+
+          updatePost: builder.mutation<Post, QueryArgument>({
+            query: ({ id, ...patch }) => ({
+              url: `post/${id}`,
+              method: 'PATCH',
+              body: patch,
+            }),
+
+            onQueryStarted: updatePostOnFulfilled,
+          }),
+        }),
+      })
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/queryLifecycle.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/queryLifecycle.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/queryLifecycle.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,547 @@
+import { server } from '@internal/query/tests/mocks/server'
+import { setupApiStore } from '@internal/tests/utils/helpers'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+import { waitFor } from '@testing-library/react'
+import { HttpResponse, http } from 'msw'
+import { vi } from 'vitest'
+
+const api = createApi({
+  baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
+  endpoints: () => ({}),
+})
+const storeRef = setupApiStore(api)
+
+const onStart = vi.fn()
+const onSuccess = vi.fn()
+const onError = vi.fn()
+
+beforeEach(() => {
+  onStart.mockClear()
+  onSuccess.mockClear()
+  onError.mockClear()
+})
+
+describe.each([['query'], ['mutation']] as const)(
+  'generic cases: %s',
+  (type) => {
+    test(`${type}: onStart only`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          injected: build[type as 'mutation']<unknown, string>({
+            query: () => '/success',
+            onQueryStarted(arg) {
+              onStart(arg)
+            },
+          }),
+        }),
+      })
+      storeRef.store.dispatch(extended.endpoints.injected.initiate('arg'))
+      expect(onStart).toHaveBeenCalledWith('arg')
+    })
+
+    test(`${type}: onStart and onSuccess`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          injected: build[type as 'mutation']<number, string>({
+            query: () => '/success',
+            async onQueryStarted(arg, { queryFulfilled }) {
+              onStart(arg)
+              // awaiting without catching like this would result in an `unhandledRejection` exception if there was an error
+              // unfortunately we cannot test for that in jest.
+              const result = await queryFulfilled
+              onSuccess(result)
+            },
+          }),
+        }),
+      })
+      storeRef.store.dispatch(extended.endpoints.injected.initiate('arg'))
+      expect(onStart).toHaveBeenCalledWith('arg')
+      await waitFor(() => {
+        expect(onSuccess).toHaveBeenCalledWith({
+          data: { value: 'success' },
+          meta: {
+            request: expect.any(Request),
+            response: expect.any(Object), // Response is not available in jest env
+          },
+        })
+      })
+    })
+
+    test(`${type}: onStart and onError`, async () => {
+      const extended = api.injectEndpoints({
+        overrideExisting: true,
+        endpoints: (build) => ({
+          injected: build[type as 'mutation']<unknown, string>({
+            query: () => '/error',
+            async onQueryStarted(arg, { queryFulfilled }) {
+              onStart(arg)
+              try {
+                const result = await queryFulfilled
+                onSuccess(result)
+              } catch (e) {
+                onError(e)
+              }
+            },
+          }),
+        }),
+      })
+      storeRef.store.dispatch(extended.endpoints.injected.initiate('arg'))
+      expect(onStart).toHaveBeenCalledWith('arg')
+      await waitFor(() => {
+        expect(onError).toHaveBeenCalledWith({
+          error: {
+            status: 500,
+            data: { value: 'error' },
+          },
+          isUnhandledError: false,
+          meta: {
+            request: expect.any(Request),
+            response: expect.any(Object), // Response is not available in jest env
+          },
+        })
+      })
+      expect(onSuccess).not.toHaveBeenCalled()
+    })
+  },
+)
+
+test('query: getCacheEntry (success)', async () => {
+  const snapshot = vi.fn()
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.query<unknown, string>({
+        query: () => '/success',
+        async onQueryStarted(
+          arg,
+          { dispatch, getState, getCacheEntry, queryFulfilled },
+        ) {
+          try {
+            snapshot(getCacheEntry())
+            const result = await queryFulfilled
+            onSuccess(result)
+            snapshot(getCacheEntry())
+          } catch (e) {
+            onError(e)
+            snapshot(getCacheEntry())
+          }
+        },
+      }),
+    }),
+  })
+  const promise = storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg'),
+  )
+
+  await waitFor(() => {
+    expect(onSuccess).toHaveBeenCalled()
+  })
+
+  expect(snapshot).toHaveBeenCalledTimes(2)
+  expect(snapshot.mock.calls[0][0]).toMatchObject({
+    endpointName: 'injected',
+    isError: false,
+    isLoading: true,
+    isSuccess: false,
+    isUninitialized: false,
+    originalArgs: 'arg',
+    requestId: promise.requestId,
+    startedTimeStamp: expect.any(Number),
+    status: 'pending',
+  })
+  expect(snapshot.mock.calls[1][0]).toMatchObject({
+    data: {
+      value: 'success',
+    },
+    endpointName: 'injected',
+    fulfilledTimeStamp: expect.any(Number),
+    isError: false,
+    isLoading: false,
+    isSuccess: true,
+    isUninitialized: false,
+    originalArgs: 'arg',
+    requestId: promise.requestId,
+    startedTimeStamp: expect.any(Number),
+    status: 'fulfilled',
+  })
+})
+
+test('query: getCacheEntry (error)', async () => {
+  const snapshot = vi.fn()
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.query<unknown, string>({
+        query: () => '/error',
+        async onQueryStarted(
+          arg,
+          { dispatch, getState, getCacheEntry, queryFulfilled },
+        ) {
+          try {
+            snapshot(getCacheEntry())
+            const result = await queryFulfilled
+            onSuccess(result)
+            snapshot(getCacheEntry())
+          } catch (e) {
+            onError(e)
+            snapshot(getCacheEntry())
+          }
+        },
+      }),
+    }),
+  })
+  const promise = storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg'),
+  )
+
+  await waitFor(() => {
+    expect(onError).toHaveBeenCalled()
+  })
+
+  expect(snapshot.mock.calls[0][0]).toMatchObject({
+    endpointName: 'injected',
+    isError: false,
+    isLoading: true,
+    isSuccess: false,
+    isUninitialized: false,
+    originalArgs: 'arg',
+    requestId: promise.requestId,
+    startedTimeStamp: expect.any(Number),
+    status: 'pending',
+  })
+  expect(snapshot.mock.calls[1][0]).toMatchObject({
+    error: {
+      data: { value: 'error' },
+      status: 500,
+    },
+    endpointName: 'injected',
+    isError: true,
+    isLoading: false,
+    isSuccess: false,
+    isUninitialized: false,
+    originalArgs: 'arg',
+    requestId: promise.requestId,
+    startedTimeStamp: expect.any(Number),
+    status: 'rejected',
+  })
+})
+
+test('mutation: getCacheEntry (success)', async () => {
+  const snapshot = vi.fn()
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.mutation<unknown, string>({
+        query: () => '/success',
+        async onQueryStarted(
+          arg,
+          { dispatch, getState, getCacheEntry, queryFulfilled },
+        ) {
+          try {
+            snapshot(getCacheEntry())
+            const result = await queryFulfilled
+            onSuccess(result)
+            snapshot(getCacheEntry())
+          } catch (e) {
+            onError(e)
+            snapshot(getCacheEntry())
+          }
+        },
+      }),
+    }),
+  })
+  const promise = storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg'),
+  )
+
+  await waitFor(() => {
+    expect(onSuccess).toHaveBeenCalled()
+  })
+
+  expect(snapshot).toHaveBeenCalledTimes(2)
+  expect(snapshot.mock.calls[0][0]).toMatchObject({
+    endpointName: 'injected',
+    isError: false,
+    isLoading: true,
+    isSuccess: false,
+    isUninitialized: false,
+    startedTimeStamp: expect.any(Number),
+    status: 'pending',
+  })
+  expect(snapshot.mock.calls[1][0]).toMatchObject({
+    data: {
+      value: 'success',
+    },
+    endpointName: 'injected',
+    fulfilledTimeStamp: expect.any(Number),
+    isError: false,
+    isLoading: false,
+    isSuccess: true,
+    isUninitialized: false,
+    startedTimeStamp: expect.any(Number),
+    status: 'fulfilled',
+  })
+})
+
+test('mutation: getCacheEntry (error)', async () => {
+  const snapshot = vi.fn()
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.mutation<unknown, string>({
+        query: () => '/error',
+        async onQueryStarted(
+          arg,
+          { dispatch, getState, getCacheEntry, queryFulfilled },
+        ) {
+          try {
+            snapshot(getCacheEntry())
+            const result = await queryFulfilled
+            onSuccess(result)
+            snapshot(getCacheEntry())
+          } catch (e) {
+            onError(e)
+            snapshot(getCacheEntry())
+          }
+        },
+      }),
+    }),
+  })
+  const promise = storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg'),
+  )
+
+  await waitFor(() => {
+    expect(onError).toHaveBeenCalled()
+  })
+
+  expect(snapshot.mock.calls[0][0]).toMatchObject({
+    endpointName: 'injected',
+    isError: false,
+    isLoading: true,
+    isSuccess: false,
+    isUninitialized: false,
+    startedTimeStamp: expect.any(Number),
+    status: 'pending',
+  })
+  expect(snapshot.mock.calls[1][0]).toMatchObject({
+    error: {
+      data: { value: 'error' },
+      status: 500,
+    },
+    endpointName: 'injected',
+    isError: true,
+    isLoading: false,
+    isSuccess: false,
+    isUninitialized: false,
+    startedTimeStamp: expect.any(Number),
+    status: 'rejected',
+  })
+})
+
+test('query: updateCachedData', async () => {
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.query<{ value: string }, string>({
+        query: () => '/success',
+        async onQueryStarted(
+          arg,
+          {
+            dispatch,
+            getState,
+            getCacheEntry,
+            updateCachedData,
+            queryFulfilled,
+          },
+        ) {
+          // calling `updateCachedData` when there is no data yet should not do anything
+          // but if there is a cache value it will be updated & overwritten by the next successful result
+          updateCachedData((draft) => {
+            draft.value += '.'
+          })
+
+          try {
+            await queryFulfilled
+            onSuccess(getCacheEntry().data)
+          } catch (error) {
+            updateCachedData((draft) => {
+              draft.value += 'x'
+            })
+            onError(getCacheEntry().data)
+          }
+        },
+      }),
+    }),
+  })
+
+  // request 1: success
+  expect(onSuccess).not.toHaveBeenCalled()
+  storeRef.store.dispatch(extended.endpoints.injected.initiate('arg'))
+
+  await waitFor(() => {
+    expect(onSuccess).toHaveBeenCalled()
+  })
+  expect(onSuccess).toHaveBeenCalledWith({ value: 'success' })
+  onSuccess.mockClear()
+
+  // request 2: error
+  expect(onError).not.toHaveBeenCalled()
+  server.use(
+    http.get(
+      'https://example.com/success',
+      () => {
+        return HttpResponse.json({ value: 'failed' }, { status: 500 })
+      },
+      { once: true },
+    ),
+  )
+  storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg', { forceRefetch: true }),
+  )
+
+  await waitFor(() => {
+    expect(onError).toHaveBeenCalled()
+  })
+  expect(onError).toHaveBeenCalledWith({ value: 'success.x' })
+
+  // request 3: success
+  expect(onSuccess).not.toHaveBeenCalled()
+
+  storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg', { forceRefetch: true }),
+  )
+
+  await waitFor(() => {
+    expect(onSuccess).toHaveBeenCalled()
+  })
+  expect(onSuccess).toHaveBeenCalledWith({ value: 'success' })
+  onSuccess.mockClear()
+})
+
+test('infinite query: updateCachedData', async () => {
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      infiniteInjected: build.infiniteQuery<{ value: string }, string, number>({
+        query: () => '/success',
+        infiniteQueryOptions: {
+          initialPageParam: 1,
+          getNextPageParam: (
+            lastPage,
+            allPages,
+            lastPageParam,
+            allPageParams,
+          ) => lastPageParam + 1,
+        },
+        async onQueryStarted(
+          arg,
+          {
+            dispatch,
+            getState,
+            getCacheEntry,
+            updateCachedData,
+            queryFulfilled,
+          },
+        ) {
+          // calling `updateCachedData` when there is no data yet should not do anything
+          // but if there is a cache value it will be updated & overwritten by the next successful result
+          updateCachedData((draft) => {
+            draft.pages = [{ value: '.' }]
+            draft.pageParams = [1]
+          })
+
+          try {
+            await queryFulfilled
+            onSuccess(getCacheEntry().data)
+          } catch (error) {
+            updateCachedData((draft) => {
+              draft.pages = [{ value: 'success.x' }]
+              draft.pageParams = [1]
+            })
+            onError(getCacheEntry().data)
+          }
+        },
+      }),
+    }),
+  })
+
+  // request 1: success
+  expect(onSuccess).not.toHaveBeenCalled()
+  storeRef.store.dispatch(extended.endpoints.infiniteInjected.initiate('arg'))
+
+  await waitFor(() => {
+    expect(onSuccess).toHaveBeenCalled()
+  })
+  expect(onSuccess).toHaveBeenCalledWith({
+    pages: [{ value: 'success' }],
+    pageParams: [1],
+  })
+  onSuccess.mockClear()
+
+  // request 2: error
+  expect(onError).not.toHaveBeenCalled()
+  server.use(
+    http.get(
+      'https://example.com/success',
+      () => {
+        return HttpResponse.json({ value: 'failed' }, { status: 500 })
+      },
+      { once: true },
+    ),
+  )
+  storeRef.store.dispatch(
+    extended.endpoints.infiniteInjected.initiate('arg', { forceRefetch: true }),
+  )
+
+  await waitFor(() => {
+    expect(onError).toHaveBeenCalled()
+  })
+  expect(onError).toHaveBeenCalledWith({
+    pages: [{ value: 'success.x' }],
+    pageParams: [1],
+  })
+
+  // request 3: success
+  expect(onSuccess).not.toHaveBeenCalled()
+
+  storeRef.store.dispatch(
+    extended.endpoints.infiniteInjected.initiate('arg', { forceRefetch: true }),
+  )
+
+  await waitFor(() => {
+    expect(onSuccess).toHaveBeenCalled()
+  })
+  expect(onSuccess).toHaveBeenCalledWith({
+    pages: [{ value: 'success' }],
+    pageParams: [1],
+  })
+  onSuccess.mockClear()
+})
+
+test('query: will only start lifecycle if query is not skipped due to `condition`', async () => {
+  const extended = api.injectEndpoints({
+    overrideExisting: true,
+    endpoints: (build) => ({
+      injected: build.query<unknown, string>({
+        query: () => '/success',
+        onQueryStarted(arg) {
+          onStart(arg)
+        },
+      }),
+    }),
+  })
+  const promise = storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg'),
+  )
+  expect(onStart).toHaveBeenCalledOnce()
+  storeRef.store.dispatch(extended.endpoints.injected.initiate('arg'))
+  expect(onStart).toHaveBeenCalledOnce()
+  await promise
+  storeRef.store.dispatch(
+    extended.endpoints.injected.initiate('arg', { forceRefetch: true }),
+  )
+  expect(onStart).toHaveBeenCalledTimes(2)
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/raceConditions.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/raceConditions.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/raceConditions.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,109 @@
+import { createApi, QueryStatus } from '@reduxjs/toolkit/query'
+import { delay } from 'msw'
+import { actionsReducer, setupApiStore } from '../../tests/utils/helpers'
+
+// We need to be able to control when which query resolves to simulate race
+// conditions properly, that's the purpose of this factory.
+const createPromiseFactory = () => {
+  const resolveQueue: (() => void)[] = []
+  const createPromise = () =>
+    new Promise<void>((resolve) => {
+      resolveQueue.push(resolve)
+    })
+  const resolveOldest = () => {
+    resolveQueue.shift()?.()
+  }
+  return { createPromise, resolveOldest }
+}
+
+const getEatenBananaPromises = createPromiseFactory()
+const eatBananaPromises = createPromiseFactory()
+
+let eatenBananas = 0
+const api = createApi({
+  invalidationBehavior: 'delayed',
+  baseQuery: () => undefined as any,
+  tagTypes: ['Banana'],
+  endpoints: (build) => ({
+    // Eat a banana.
+    eatBanana: build.mutation<unknown, void>({
+      queryFn: async () => {
+        await eatBananaPromises.createPromise()
+        eatenBananas += 1
+        return { data: null, meta: {} }
+      },
+      invalidatesTags: ['Banana'],
+    }),
+
+    // Get the number of eaten bananas.
+    getEatenBananas: build.query<number, void>({
+      queryFn: async (arg, arg1, arg2, arg3) => {
+        const result = eatenBananas
+        await getEatenBananaPromises.createPromise()
+        return { data: result }
+      },
+      providesTags: ['Banana'],
+    }),
+  }),
+})
+const { getEatenBananas, eatBanana } = api.endpoints
+
+const storeRef = setupApiStore(api, {
+  ...actionsReducer,
+})
+
+it('invalidates a query after a corresponding mutation', async () => {
+  eatenBananas = 0
+
+  const query = storeRef.store.dispatch(getEatenBananas.initiate())
+  const getQueryState = () =>
+    storeRef.store.getState().api.queries[query.queryCacheKey]
+  getEatenBananaPromises.resolveOldest()
+  await delay(2)
+
+  expect(getQueryState()?.data).toBe(0)
+  expect(getQueryState()?.status).toBe(QueryStatus.fulfilled)
+
+  const mutation = storeRef.store.dispatch(eatBanana.initiate())
+  const getMutationState = () =>
+    storeRef.store.getState().api.mutations[mutation.requestId]
+  eatBananaPromises.resolveOldest()
+  await delay(2)
+
+  expect(getMutationState()?.status).toBe(QueryStatus.fulfilled)
+  expect(getQueryState()?.data).toBe(0)
+  expect(getQueryState()?.status).toBe(QueryStatus.pending)
+
+  getEatenBananaPromises.resolveOldest()
+  await delay(2)
+
+  expect(getQueryState()?.data).toBe(1)
+  expect(getQueryState()?.status).toBe(QueryStatus.fulfilled)
+})
+
+it('invalidates a query whose corresponding mutation finished while the query was in flight', async () => {
+  eatenBananas = 0
+
+  const query = storeRef.store.dispatch(getEatenBananas.initiate())
+  const getQueryState = () =>
+    storeRef.store.getState().api.queries[query.queryCacheKey]
+
+  const mutation = storeRef.store.dispatch(eatBanana.initiate())
+  const getMutationState = () =>
+    storeRef.store.getState().api.mutations[mutation.requestId]
+  eatBananaPromises.resolveOldest()
+  await delay(2)
+  expect(getMutationState()?.status).toBe(QueryStatus.fulfilled)
+
+  getEatenBananaPromises.resolveOldest()
+  await delay(2)
+  expect(getQueryState()?.data).toBe(0)
+  expect(getQueryState()?.status).toBe(QueryStatus.pending)
+
+  // should already be refetching
+  getEatenBananaPromises.resolveOldest()
+  await delay(2)
+
+  expect(getQueryState()?.status).toBe(QueryStatus.fulfilled)
+  expect(getQueryState()?.data).toBe(1)
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/refetchingBehaviors.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/refetchingBehaviors.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/refetchingBehaviors.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,447 @@
+import { createApi, setupListeners } from '@reduxjs/toolkit/query/react'
+import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'
+import { delay } from 'msw'
+import { setupApiStore } from '../../tests/utils/helpers'
+
+// Just setup a temporary in-memory counter for tests that `getIncrementedAmount`.
+// This can be used to test how many renders happen due to data changes or
+// the refetching behavior of components.
+let amount = 0
+
+const defaultApi = createApi({
+  baseQuery: async (arg: any) => {
+    await delay(150)
+    if ('amount' in arg?.body) {
+      amount += 1
+    }
+    return {
+      data: arg?.body
+        ? { ...arg.body, ...(amount ? { amount } : {}) }
+        : undefined,
+    }
+  },
+  endpoints: (build) => ({
+    getIncrementedAmount: build.query<any, void>({
+      query: () => ({
+        url: '',
+        body: {
+          amount,
+        },
+      }),
+    }),
+  }),
+  refetchOnFocus: true,
+  refetchOnReconnect: true,
+})
+
+const storeRef = setupApiStore(defaultApi)
+
+const getIncrementedAmountState = () =>
+  storeRef.store.getState().api.queries['getIncrementedAmount(undefined)']
+
+afterEach(() => {
+  amount = 0
+})
+
+describe('refetchOnFocus tests', () => {
+  test('useQuery hook respects refetchOnFocus: true when set in createApi options', async () => {
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isFetching, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery())
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    render(<User />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    fireEvent.focus(window)
+
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('2'),
+    )
+  })
+
+  test('useQuery hook respects refetchOnFocus: false from a hook and overrides createApi defaults', async () => {
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isFetching, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+          refetchOnFocus: false,
+        }))
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    render(<User />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    fireEvent.focus(window)
+
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+  })
+
+  test('useQuery hook prefers refetchOnFocus: true when multiple components have different configurations', async () => {
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isFetching, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+          refetchOnFocus: false,
+        }))
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    function UserWithRefetchTrue() {
+      ;({ data, isFetching, isLoading } =
+      defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+        refetchOnFocus: true,
+        }))
+      return <div />
+    }
+
+    render(
+      <div>
+        <User />
+        <UserWithRefetchTrue />
+      </div>,
+      { wrapper: storeRef.wrapper },
+    )
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    fireEvent.focus(window)
+    expect(screen.getByTestId('isLoading').textContent).toBe('false')
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('2'),
+    )
+  })
+
+  test('useQuery hook cleans data if refetch without active subscribers', async () => {
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isFetching, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+          refetchOnFocus: true,
+        }))
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    const { unmount } = render(<User />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    unmount()
+
+    expect(getIncrementedAmountState()).not.toBeUndefined()
+
+    fireEvent.focus(window)
+
+    await delay(1)
+    expect(getIncrementedAmountState()).toBeUndefined()
+  })
+})
+
+describe('refetchOnReconnect tests', () => {
+  test('useQuery hook respects refetchOnReconnect: true when set in createApi options', async () => {
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isFetching, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery())
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    render(<User />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    act(() => {
+      window.dispatchEvent(new Event('offline'))
+      window.dispatchEvent(new Event('online'))
+    })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('2'),
+    )
+  })
+
+  test('useQuery hook should not refetch when refetchOnReconnect: false from a hook and overrides createApi defaults', async () => {
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isFetching, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+          refetchOnReconnect: false,
+        }))
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    render(<User />, { wrapper: storeRef.wrapper })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    act(() => {
+      window.dispatchEvent(new Event('offline'))
+      window.dispatchEvent(new Event('online'))
+    })
+    expect(screen.getByTestId('isFetching').textContent).toBe('false')
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+  })
+
+  test('useQuery hook prefers refetchOnReconnect: true when multiple components have different configurations', async () => {
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isFetching, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+          refetchOnReconnect: false,
+        }))
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    function UserWithRefetchTrue() {
+      ;({ data, isFetching, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+          refetchOnReconnect: true,
+        }))
+      return <div />
+    }
+
+    render(
+      <div>
+        <User />
+        <UserWithRefetchTrue />
+      </div>,
+      { wrapper: storeRef.wrapper },
+    )
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    act(() => {
+      window.dispatchEvent(new Event('offline'))
+      window.dispatchEvent(new Event('online'))
+    })
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('2'),
+    )
+  })
+})
+
+describe('customListenersHandler', () => {
+  const storeRef = setupApiStore(defaultApi, undefined, {
+    withoutListeners: true,
+  })
+
+  test('setupListeners accepts a custom callback and executes it', async () => {
+    const consoleSpy = vi.spyOn(console, 'log')
+    consoleSpy.mockImplementation((...args: any[]) => {
+      // console.info(...args)
+    })
+    const dispatchSpy = vi.spyOn(storeRef.store, 'dispatch')
+
+    let unsubscribe = () => {}
+    unsubscribe = setupListeners(
+      storeRef.store.dispatch,
+      (dispatch, actions) => {
+        const handleOnline = () =>
+          dispatch(defaultApi.internalActions.onOnline())
+        window.addEventListener('online', handleOnline, false)
+        console.log('setup!')
+        return () => {
+          window.removeEventListener('online', handleOnline)
+          console.log('cleanup!')
+        }
+      },
+    )
+
+    await delay(150)
+
+    let data, isLoading, isFetching
+
+    function User() {
+      ;({ data, isFetching, isLoading } =
+        defaultApi.endpoints.getIncrementedAmount.useQuery(undefined, {
+          refetchOnReconnect: true,
+        }))
+      return (
+        <div>
+          <div data-testid="isLoading">{String(isLoading)}</div>
+          <div data-testid="isFetching">{String(isFetching)}</div>
+          <div data-testid="amount">{String(data?.amount)}</div>
+        </div>
+      )
+    }
+
+    render(<User />, { wrapper: storeRef.wrapper })
+
+    expect(consoleSpy).toHaveBeenCalledWith('setup!')
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isLoading').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('1'),
+    )
+
+    act(() => {
+      window.dispatchEvent(new Event('offline'))
+      window.dispatchEvent(new Event('online'))
+    })
+    expect(dispatchSpy).toHaveBeenCalled()
+
+    // Ignore RTKQ middleware internal data calls
+    const mockCallsWithoutInternals = dispatchSpy.mock.calls.filter((call) => {
+      const type = (call[0] as any)?.type ?? ''
+      const reIsInternal = /internal/i
+      return !reIsInternal.test(type)
+    })
+
+    expect(
+      defaultApi.internalActions.onOnline.match(
+        mockCallsWithoutInternals[1][0] as any,
+      ),
+    ).toBe(true)
+
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('true'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('isFetching').textContent).toBe('false'),
+    )
+    await waitFor(() =>
+      expect(screen.getByTestId('amount').textContent).toBe('2'),
+    )
+
+    unsubscribe()
+    expect(consoleSpy).toHaveBeenCalledWith('cleanup!')
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/retry.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/retry.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/retry.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+import { retry, type RetryOptions } from '@internal/query/retry'
+import {
+  fetchBaseQuery,
+  type FetchBaseQueryError,
+  type FetchBaseQueryMeta,
+} from '@internal/query/fetchBaseQuery'
+
+describe('type tests', () => {
+  test('RetryOptions only accepts one of maxRetries or retryCondition', () => {
+    // Should not complain if only `maxRetries` exists
+    expectTypeOf({ maxRetries: 5 }).toMatchTypeOf<RetryOptions>()
+
+    // Should not complain if only `retryCondition` exists
+    expectTypeOf({ retryCondition: () => false }).toMatchTypeOf<RetryOptions>()
+
+    // Should complain if both `maxRetries` and `retryCondition` exist at once
+    expectTypeOf({
+      maxRetries: 5,
+      retryCondition: () => false,
+    }).not.toMatchTypeOf<RetryOptions>()
+  })
+  test('fail can be pretyped to only accept correct error and meta', () => {
+    expectTypeOf(retry.fail).parameter(0).toEqualTypeOf<unknown>()
+    expectTypeOf(retry.fail).parameter(1).toEqualTypeOf<{} | undefined>()
+    expectTypeOf(retry.fail).toBeCallableWith('Literally anything', {})
+
+    const myBaseQuery = fetchBaseQuery()
+    const typedFail = retry.fail<typeof myBaseQuery>
+
+    expectTypeOf(typedFail).parameter(0).toMatchTypeOf<FetchBaseQueryError>()
+    expectTypeOf(typedFail)
+      .parameter(1)
+      .toMatchTypeOf<FetchBaseQueryMeta | undefined>()
+
+    expectTypeOf(typedFail).toBeCallableWith(
+      {
+        status: 401,
+        data: 'Unauthorized',
+      },
+      { request: new Request('http://localhost') },
+    )
+
+    expectTypeOf(typedFail).parameter(0).not.toMatchTypeOf<string>()
+    expectTypeOf(typedFail).parameter(1).not.toMatchTypeOf<{}>()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/retry.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/retry.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/retry.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,468 @@
+import type { BaseQueryFn, FetchBaseQueryError } from '@reduxjs/toolkit/query'
+import { createApi, retry } from '@reduxjs/toolkit/query'
+import { setupApiStore } from '../../tests/utils/helpers'
+
+beforeEach(() => {
+  vi.useFakeTimers()
+})
+
+const loopTimers = async (max: number = 12) => {
+  let count = 0
+  while (count < max) {
+    await vi.advanceTimersByTimeAsync(1)
+    vi.advanceTimersByTime(120_000)
+    count++
+  }
+}
+
+describe('configuration', () => {
+  test('retrying without any config options', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ error: 'rejected' })
+
+    const baseQuery = retry(baseBaseQuery)
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+
+    await loopTimers(7)
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(6)
+  })
+
+  test('retrying with baseQuery config that overrides default behavior (maxRetries: 5)', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ error: 'rejected' })
+
+    const baseQuery = retry(baseBaseQuery, { maxRetries: 3 })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+
+    await loopTimers(5)
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(4)
+  })
+
+  test('retrying with endpoint config that overrides baseQuery config', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ error: 'rejected' })
+
+    const baseQuery = retry(baseBaseQuery, { maxRetries: 3 })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+        }),
+        q2: build.query({
+          query: () => {},
+          extraOptions: { maxRetries: 8 },
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+    await loopTimers(5)
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(4)
+
+    baseBaseQuery.mockClear()
+
+    storeRef.store.dispatch(api.endpoints.q2.initiate({}))
+
+    await loopTimers(10)
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(9)
+  })
+
+  test('stops retrying a query after a success', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery
+      .mockResolvedValueOnce({ error: 'rejected' })
+      .mockResolvedValueOnce({ error: 'rejected' })
+      .mockResolvedValue({ data: { success: true } })
+
+    const baseQuery = retry(baseBaseQuery, { maxRetries: 10 })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.mutation({
+          query: () => {},
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+
+    await loopTimers(6)
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(3)
+  })
+
+  test('retrying also works with mutations', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ error: 'rejected' })
+
+    const baseQuery = retry(baseBaseQuery, { maxRetries: 3 })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        m1: build.mutation({
+          query: () => ({ method: 'PUT' }),
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    storeRef.store.dispatch(api.endpoints.m1.initiate({}))
+
+    await loopTimers(5)
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(4)
+  })
+
+  test('retrying stops after a success from a mutation', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery
+      .mockRejectedValueOnce(new Error('rejected'))
+      .mockRejectedValueOnce(new Error('rejected'))
+      .mockResolvedValue({ data: { success: true } })
+
+    const baseQuery = retry(baseBaseQuery, { maxRetries: 3 })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        m1: build.mutation({
+          query: () => ({ method: 'PUT' }),
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    storeRef.store.dispatch(api.endpoints.m1.initiate({}))
+
+    await loopTimers(5)
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(3)
+  })
+  test('non-error-cases should **not** retry', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ data: { success: true } })
+
+    const baseQuery = retry(baseBaseQuery, { maxRetries: 3 })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+
+    await loopTimers(2)
+
+    expect(baseBaseQuery).toHaveBeenCalledOnce()
+  })
+  test('calling retry.fail(error) will skip retrying and expose the error directly', async () => {
+    const error = { message: 'banana' }
+
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockImplementation((input) => {
+      retry.fail(error)
+      return { data: `this won't happen` }
+    })
+
+    const baseQuery = retry(baseBaseQuery)
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    const result = await storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+
+    await loopTimers(2)
+
+    expect(baseBaseQuery).toHaveBeenCalledOnce()
+    expect(result.error).toEqual(error)
+    expect(result).toEqual({
+      endpointName: 'q1',
+      error,
+      isError: true,
+      isLoading: false,
+      isSuccess: false,
+      isUninitialized: false,
+      originalArgs: expect.any(Object),
+      requestId: expect.any(String),
+      startedTimeStamp: expect.any(Number),
+      status: 'rejected',
+    })
+  })
+
+  test('wrapping retry(retry(..., { maxRetries: 3 }), { maxRetries: 3 }) should retry 16 times', async () => {
+    /**
+     * Note:
+     * This will retry 16 total times because we try the initial + 3 retries (sum: 4), then retry that process 3 times (starting at 0 for a total of 4)... 4x4=16 (allegedly)
+     */
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ error: 'rejected' })
+
+    const baseQuery = retry(retry(baseBaseQuery, { maxRetries: 3 }), {
+      maxRetries: 3,
+    })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+
+    await loopTimers(18)
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(16)
+  })
+
+  test('accepts a custom backoff fn', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ error: 'rejected' })
+
+    const baseQuery = retry(baseBaseQuery, {
+      maxRetries: 8,
+      backoff: async (attempt, maxRetries) => {
+        const attempts = Math.min(attempt, maxRetries)
+        const timeout = attempts * 300 // Scale up by 300ms per request, ex: 300ms, 600ms, 900ms, 1200ms...
+        await new Promise((resolve) =>
+          setTimeout((res: any) => resolve(res), timeout),
+        )
+      },
+    })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+
+    await loopTimers()
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(9)
+  })
+
+  test('accepts a custom retryCondition fn', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ error: 'rejected' })
+
+    const overrideMaxRetries = 3
+
+    const baseQuery = retry(baseBaseQuery, {
+      retryCondition: (_, __, { attempt }) => attempt <= overrideMaxRetries,
+    })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+
+    await loopTimers()
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(overrideMaxRetries + 1)
+  })
+
+  test('retryCondition with endpoint config that overrides baseQuery config', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ error: 'rejected' })
+
+    const baseQuery = retry(baseBaseQuery, {
+      maxRetries: 10,
+    })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+          extraOptions: {
+            retryCondition: (_, __, { attempt }) => attempt <= 5,
+          },
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+
+    await loopTimers()
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(6)
+  })
+
+  test('retryCondition also works with mutations', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+
+    baseBaseQuery
+      .mockRejectedValueOnce(new Error('rejected'))
+      .mockRejectedValueOnce(new Error('hello retryCondition'))
+      .mockRejectedValueOnce(new Error('rejected'))
+      .mockResolvedValue({ error: 'hello retryCondition' })
+
+    const baseQuery = retry(baseBaseQuery, {})
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        m1: build.mutation({
+          query: () => ({ method: 'PUT' }),
+          extraOptions: {
+            retryCondition: (e) =>
+              (e as FetchBaseQueryError).data === 'hello retryCondition',
+          },
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+    storeRef.store.dispatch(api.endpoints.m1.initiate({}))
+
+    await loopTimers()
+
+    expect(baseBaseQuery).toHaveBeenCalledTimes(4)
+  })
+
+  test('Specifying maxRetries as 0 in RetryOptions prevents retries', async () => {
+    const baseBaseQuery = vi.fn<
+      Parameters<BaseQueryFn>,
+      ReturnType<BaseQueryFn>
+    >()
+    baseBaseQuery.mockResolvedValue({ error: 'rejected' })
+
+    const baseQuery = retry(baseBaseQuery, { maxRetries: 0 })
+    const api = createApi({
+      baseQuery,
+      endpoints: (build) => ({
+        q1: build.query({
+          query: () => {},
+        }),
+      }),
+    })
+
+    const storeRef = setupApiStore(api, undefined, {
+      withoutTestLifecycles: true,
+    })
+
+    storeRef.store.dispatch(api.endpoints.q1.initiate({}))
+    await loopTimers(2)
+
+    expect(baseBaseQuery).toHaveBeenCalledOnce()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/unionTypes.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/unionTypes.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/unionTypes.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,914 @@
+import type { UseQueryStateOptions } from '@internal/query/react/buildHooks'
+import type { SerializedError } from '@reduxjs/toolkit'
+import type {
+  FetchBaseQueryError,
+  QueryDefinition,
+  TypedUseMutationResult,
+  TypedUseQueryHookResult,
+  TypedUseQueryState,
+  TypedUseQueryStateResult,
+  TypedUseQuerySubscriptionResult,
+  TypedLazyQueryTrigger,
+  TypedUseLazyQueryStateResult,
+  TypedUseLazyQuery,
+  TypedUseLazyQuerySubscription,
+  TypedUseMutation,
+  TypedMutationTrigger,
+  TypedUseQuerySubscription,
+  TypedUseQuery,
+  TypedUseQueryStateOptions,
+} from '@reduxjs/toolkit/query/react'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
+
+const baseQuery = fetchBaseQuery()
+
+const api = createApi({
+  baseQuery,
+  endpoints: (build) => ({
+    getTest: build.query<string, void>({ query: () => '' }),
+    mutation: build.mutation<string, void>({ query: () => '' }),
+  }),
+})
+
+describe('union types', () => {
+  test('query selector union', () => {
+    const result = api.endpoints.getTest.select()({} as any)
+
+    if (result.isUninitialized) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+    }
+
+    if (result.isLoading) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+    }
+
+    if (result.isError) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+    }
+
+    if (result.isSuccess) {
+      expectTypeOf(result.data).toBeString()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+    }
+
+    expectTypeOf(result).not.toBeNever()
+
+    // is always one of those four
+    if (
+      !result.isUninitialized &&
+      !result.isLoading &&
+      !result.isError &&
+      !result.isSuccess
+    ) {
+      expectTypeOf(result).toBeNever()
+    }
+  })
+
+  test('useQuery union', () => {
+    const result = api.endpoints.getTest.useQuery()
+
+    if (result.isUninitialized) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toEqualTypeOf<false>()
+    }
+
+    if (result.isLoading) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toBeBoolean()
+    }
+
+    if (result.isError) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toEqualTypeOf<false>()
+    }
+
+    if (result.isSuccess) {
+      expectTypeOf(result.data).toBeString()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toBeBoolean()
+    }
+
+    if (result.isFetching) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toBeBoolean()
+
+      expectTypeOf(result.isSuccess).toBeBoolean()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+    }
+
+    expectTypeOf(result.currentData).toEqualTypeOf<string | undefined>()
+
+    if (result.isSuccess) {
+      if (!result.isFetching) {
+        expectTypeOf(result.currentData).toBeString()
+      } else {
+        expectTypeOf(result.currentData).toEqualTypeOf<string | undefined>()
+      }
+    }
+
+    expectTypeOf(result).not.toBeNever()
+
+    // is always one of those four
+    if (
+      !result.isUninitialized &&
+      !result.isLoading &&
+      !result.isError &&
+      !result.isSuccess
+    ) {
+      expectTypeOf(result).toBeNever()
+    }
+  })
+  test('useQuery TS4.1 union', () => {
+    const result = api.useGetTestQuery()
+
+    if (result.isUninitialized) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toEqualTypeOf<false>()
+    }
+
+    if (result.isLoading) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toBeBoolean()
+    }
+
+    if (result.isError) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toEqualTypeOf<false>()
+    }
+
+    if (result.isSuccess) {
+      expectTypeOf(result.data).toBeString()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toBeBoolean()
+    }
+
+    if (result.isFetching) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toBeBoolean()
+
+      expectTypeOf(result.isSuccess).toBeBoolean()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+    }
+
+    expectTypeOf(result).not.toBeNever()
+
+    // is always one of those four
+    if (
+      !result.isUninitialized &&
+      !result.isLoading &&
+      !result.isError &&
+      !result.isSuccess
+    ) {
+      expectTypeOf(result).toBeNever()
+    }
+  })
+
+  test('useLazyQuery union', () => {
+    const [_trigger, result] = api.endpoints.getTest.useLazyQuery()
+
+    if (result.isUninitialized) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toEqualTypeOf<false>()
+    }
+
+    if (result.isLoading) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toBeBoolean()
+    }
+
+    if (result.isError) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toEqualTypeOf<false>()
+    }
+
+    if (result.isSuccess) {
+      expectTypeOf(result.data).toBeString()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toBeBoolean()
+    }
+
+    if (result.isFetching) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toBeBoolean()
+
+      expectTypeOf(result.isSuccess).toBeBoolean()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+    }
+
+    expectTypeOf(result).not.toBeNever()
+
+    // is always one of those four
+    if (
+      !result.isUninitialized &&
+      !result.isLoading &&
+      !result.isError &&
+      !result.isSuccess
+    ) {
+      expectTypeOf(result).toBeNever()
+    }
+  })
+
+  test('useLazyQuery TS4.1 union', () => {
+    const [_trigger, result] = api.useLazyGetTestQuery()
+
+    if (result.isUninitialized) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toEqualTypeOf<false>()
+    }
+
+    if (result.isLoading) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toBeBoolean()
+    }
+
+    if (result.isError) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toEqualTypeOf<false>()
+    }
+
+    if (result.isSuccess) {
+      expectTypeOf(result.data).toBeString()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isFetching).toBeBoolean()
+    }
+
+    if (result.isFetching) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toBeBoolean()
+
+      expectTypeOf(result.isSuccess).toBeBoolean()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+    }
+
+    expectTypeOf(result).not.toBeNever()
+
+    // is always one of those four
+    if (
+      !result.isUninitialized &&
+      !result.isLoading &&
+      !result.isError &&
+      !result.isSuccess
+    ) {
+      expectTypeOf(result).toBeNever()
+    }
+  })
+
+  test('queryHookResult (without selector) union', async () => {
+    const useQueryStateResult = api.endpoints.getTest.useQueryState()
+
+    const useQueryResult = api.endpoints.getTest.useQuery()
+
+    const useQueryStateWithSelectFromResult =
+      api.endpoints.getTest.useQueryState(undefined, {
+        selectFromResult: () => ({ x: true }),
+      })
+
+    const { refetch, ...useQueryResultWithoutMethods } = useQueryResult
+
+    assertType<typeof useQueryResultWithoutMethods>(useQueryStateResult)
+
+    expectTypeOf(useQueryStateResult).toMatchTypeOf(
+      useQueryResultWithoutMethods,
+    )
+
+    expectTypeOf(useQueryStateWithSelectFromResult)
+      .parameter(0)
+      .not.toMatchTypeOf(useQueryResultWithoutMethods)
+
+    expectTypeOf(api.endpoints.getTest.select).returns.returns.toEqualTypeOf<
+      Awaited<ReturnType<typeof refetch>>
+    >()
+  })
+
+  test('useQueryState (with selectFromResult)', () => {
+    const result = api.endpoints.getTest.useQueryState(undefined, {
+      selectFromResult({
+        data,
+        isLoading,
+        isFetching,
+        isError,
+        isSuccess,
+        isUninitialized,
+      }) {
+        return {
+          data: data ?? 1,
+          isLoading,
+          isFetching,
+          isError,
+          isSuccess,
+          isUninitialized,
+        }
+      },
+    })
+
+    expectTypeOf({
+      data: '' as string | number,
+      isUninitialized: false,
+      isLoading: true,
+      isFetching: true,
+      isSuccess: false,
+      isError: false,
+    }).toEqualTypeOf(result)
+  })
+
+  test('useQuery (with selectFromResult)', async () => {
+    const { refetch, ...result } = api.endpoints.getTest.useQuery(undefined, {
+      selectFromResult({
+        data,
+        isLoading,
+        isFetching,
+        isError,
+        isSuccess,
+        isUninitialized,
+      }) {
+        return {
+          data: data ?? 1,
+          isLoading,
+          isFetching,
+          isError,
+          isSuccess,
+          isUninitialized,
+        }
+      },
+    })
+
+    expectTypeOf({
+      data: '' as string | number,
+      isUninitialized: false,
+      isLoading: true,
+      isFetching: true,
+      isSuccess: false,
+      isError: false,
+    }).toEqualTypeOf(result)
+
+    expectTypeOf(api.endpoints.getTest.select).returns.returns.toEqualTypeOf<
+      Awaited<ReturnType<typeof refetch>>
+    >()
+  })
+
+  test('useMutation union', () => {
+    const [_trigger, result] = api.endpoints.mutation.useMutation()
+
+    if (result.isUninitialized) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+    }
+
+    if (result.isLoading) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+    }
+
+    if (result.isError) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+    }
+
+    if (result.isSuccess) {
+      expectTypeOf(result.data).toBeString()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+    }
+
+    expectTypeOf(result).not.toBeNever()
+
+    // is always one of those four
+    if (
+      !result.isUninitialized &&
+      !result.isLoading &&
+      !result.isError &&
+      !result.isSuccess
+    ) {
+      expectTypeOf(result).toBeNever()
+    }
+  })
+
+  test('useMutation (with selectFromResult)', () => {
+    const [_trigger, result] = api.endpoints.mutation.useMutation({
+      selectFromResult({
+        data,
+        isLoading,
+        isError,
+        isSuccess,
+        isUninitialized,
+      }) {
+        return {
+          data: data ?? 'hi',
+          isLoading,
+          isError,
+          isSuccess,
+          isUninitialized,
+        }
+      },
+    })
+
+    expectTypeOf({
+      data: '' as string,
+      isUninitialized: false,
+      isLoading: true,
+      isSuccess: false,
+      isError: false,
+      reset: () => {},
+    }).toMatchTypeOf(result)
+  })
+
+  test('useMutation TS4.1 union', () => {
+    const [_trigger, result] = api.useMutationMutation()
+
+    if (result.isUninitialized) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+    }
+
+    if (result.isLoading) {
+      expectTypeOf(result.data).toBeUndefined()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError | undefined
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+    }
+
+    if (result.isError) {
+      expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
+
+      expectTypeOf(result.error).toEqualTypeOf<
+        SerializedError | FetchBaseQueryError
+      >()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isSuccess).toEqualTypeOf<false>()
+    }
+
+    if (result.isSuccess) {
+      expectTypeOf(result.data).toBeString()
+
+      expectTypeOf(result.error).toBeUndefined()
+
+      expectTypeOf(result.isUninitialized).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isLoading).toEqualTypeOf<false>()
+
+      expectTypeOf(result.isError).toEqualTypeOf<false>()
+    }
+
+    expectTypeOf(result).not.toBeNever()
+
+    // is always one of those four
+    if (
+      !result.isUninitialized &&
+      !result.isLoading &&
+      !result.isError &&
+      !result.isSuccess
+    ) {
+      expectTypeOf(result).toBeNever()
+    }
+  })
+})
+
+describe('"Typed" helper types', () => {
+  test('useQuery', () => {
+    expectTypeOf<TypedUseQuery<string, void, typeof baseQuery>>().toMatchTypeOf(
+      api.endpoints.getTest.useQuery,
+    )
+
+    const result = api.endpoints.getTest.useQuery()
+
+    expectTypeOf<
+      TypedUseQueryHookResult<string, void, typeof baseQuery>
+    >().toEqualTypeOf(result)
+  })
+
+  test('useQuery with selectFromResult', () => {
+    const result = api.endpoints.getTest.useQuery(undefined, {
+      selectFromResult: () => ({ x: true }),
+    })
+
+    expectTypeOf<
+      TypedUseQueryHookResult<string, void, typeof baseQuery, { x: boolean }>
+    >().toEqualTypeOf(result)
+  })
+
+  test('useQueryState', () => {
+    expectTypeOf<
+      TypedUseQueryState<string, void, typeof baseQuery>
+    >().toMatchTypeOf(api.endpoints.getTest.useQueryState)
+
+    const result = api.endpoints.getTest.useQueryState()
+
+    expectTypeOf<
+      TypedUseQueryStateResult<string, void, typeof baseQuery>
+    >().toEqualTypeOf(result)
+  })
+
+  test('useQueryState with selectFromResult', () => {
+    const result = api.endpoints.getTest.useQueryState(undefined, {
+      selectFromResult: () => ({ x: true }),
+    })
+
+    expectTypeOf<
+      TypedUseQueryStateResult<string, void, typeof baseQuery, { x: boolean }>
+    >().toEqualTypeOf(result)
+  })
+
+  test('useQueryState options', () => {
+    expectTypeOf<
+      TypedUseQueryStateOptions<string, void, typeof baseQuery>
+    >().toMatchTypeOf<
+      Parameters<typeof api.endpoints.getTest.useQueryState>[1]
+    >()
+
+    expectTypeOf<
+      UseQueryStateOptions<
+        QueryDefinition<void, typeof baseQuery, string, string>,
+        { x: boolean }
+      >
+    >().toEqualTypeOf<
+      TypedUseQueryStateOptions<string, void, typeof baseQuery, { x: boolean }>
+    >()
+  })
+
+  test('useQuerySubscription', () => {
+    expectTypeOf<
+      TypedUseQuerySubscription<string, void, typeof baseQuery>
+    >().toMatchTypeOf(api.endpoints.getTest.useQuerySubscription)
+
+    const result = api.endpoints.getTest.useQuerySubscription()
+
+    expectTypeOf<
+      TypedUseQuerySubscriptionResult<string, void, typeof baseQuery>
+    >().toEqualTypeOf(result)
+  })
+
+  test('useLazyQuery', () => {
+    expectTypeOf<
+      TypedUseLazyQuery<string, void, typeof baseQuery>
+    >().toMatchTypeOf(api.endpoints.getTest.useLazyQuery)
+
+    const [trigger, result] = api.endpoints.getTest.useLazyQuery()
+
+    expectTypeOf<
+      TypedLazyQueryTrigger<string, void, typeof baseQuery>
+    >().toMatchTypeOf(trigger)
+
+    expectTypeOf<
+      TypedUseLazyQueryStateResult<string, void, typeof baseQuery>
+    >().toMatchTypeOf(result)
+  })
+
+  test('useLazyQuery with selectFromResult', () => {
+    const [trigger, result] = api.endpoints.getTest.useLazyQuery({
+      selectFromResult: () => ({ x: true }),
+    })
+
+    expectTypeOf<
+      TypedLazyQueryTrigger<string, void, typeof baseQuery>
+    >().toMatchTypeOf(trigger)
+
+    expectTypeOf<
+      TypedUseLazyQueryStateResult<
+        string,
+        void,
+        typeof baseQuery,
+        { x: boolean }
+      >
+    >().toMatchTypeOf(result)
+  })
+
+  test('useLazyQuerySubscription', () => {
+    expectTypeOf<
+      TypedUseLazyQuerySubscription<string, void, typeof baseQuery>
+    >().toMatchTypeOf(api.endpoints.getTest.useLazyQuerySubscription)
+
+    const [trigger] = api.endpoints.getTest.useLazyQuerySubscription()
+
+    expectTypeOf<
+      TypedLazyQueryTrigger<string, void, typeof baseQuery>
+    >().toMatchTypeOf(trigger)
+  })
+
+  test('useMutation', () => {
+    expectTypeOf<
+      TypedUseMutation<string, void, typeof baseQuery>
+    >().toMatchTypeOf(api.endpoints.mutation.useMutation)
+
+    const [trigger, result] = api.endpoints.mutation.useMutation()
+
+    expectTypeOf<
+      TypedMutationTrigger<string, void, typeof baseQuery>
+    >().toMatchTypeOf(trigger)
+
+    expectTypeOf<
+      TypedUseMutationResult<string, void, typeof baseQuery>
+    >().toMatchTypeOf(result)
+  })
+
+  test('useQuery - defining selectFromResult separately', () => {
+    const selectFromResult = (
+      result: TypedUseQueryStateResult<string, void, typeof baseQuery>,
+    ) => ({ x: true })
+
+    const result = api.endpoints.getTest.useQuery(undefined, {
+      selectFromResult,
+    })
+
+    expectTypeOf(result).toEqualTypeOf<
+      TypedUseQueryHookResult<
+        string,
+        void,
+        typeof baseQuery,
+        ReturnType<typeof selectFromResult>
+      >
+    >()
+  })
+
+  test('useMutation - defining selectFromResult separately', () => {
+    const selectFromResult = (
+      result: Omit<
+        TypedUseMutationResult<string, void, typeof baseQuery>,
+        'reset' | 'originalArgs'
+      >,
+    ) => ({ x: true })
+
+    const [trigger, result] = api.endpoints.mutation.useMutation({
+      selectFromResult,
+    })
+    expectTypeOf(result).toEqualTypeOf<
+      TypedUseMutationResult<
+        string,
+        void,
+        typeof baseQuery,
+        ReturnType<typeof selectFromResult>
+      >
+    >()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/useMutation-fixedCacheKey.test.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/useMutation-fixedCacheKey.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/useMutation-fixedCacheKey.test.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,394 @@
+import { createApi } from '@reduxjs/toolkit/query/react'
+import {
+  act,
+  getByTestId,
+  render,
+  screen,
+  waitFor,
+} from '@testing-library/react'
+import { delay } from 'msw'
+import { vi } from 'vitest'
+import { setupApiStore } from '../../tests/utils/helpers'
+
+describe('fixedCacheKey', () => {
+  const onNewCacheEntry = vi.fn()
+
+  const api = createApi({
+    async baseQuery(arg: string | Promise<string>) {
+      return { data: await arg }
+    },
+    endpoints: (build) => ({
+      send: build.mutation<string, string | Promise<string>>({
+        query: (arg) => arg,
+      }),
+    }),
+  })
+  const storeRef = setupApiStore(api)
+
+  function Component({
+    name,
+    fixedCacheKey,
+    value = name,
+  }: {
+    name: string
+    fixedCacheKey?: string
+    value?: string | Promise<string>
+  }) {
+    const [trigger, result] = api.endpoints.send.useMutation({ fixedCacheKey })
+
+    return (
+      <div data-testid={name}>
+        <div data-testid="status">{result.status}</div>
+        <div data-testid="data">{result.data}</div>
+        <div data-testid="originalArgs">{String(result.originalArgs)}</div>
+        <button data-testid="trigger" onClick={() => trigger(value)}>
+          trigger
+        </button>
+        <button data-testid="reset" onClick={result.reset}>
+          reset
+        </button>
+      </div>
+    )
+  }
+
+  test('two mutations without `fixedCacheKey` do not influence each other', async () => {
+    render(
+      <>
+        <Component name="C1" />
+        <Component name="C2" />
+      </>,
+      { wrapper: storeRef.wrapper },
+    )
+    const c1 = screen.getByTestId('C1')
+    const c2 = screen.getByTestId('C2')
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+
+    act(() => {
+      getByTestId(c1, 'trigger').click()
+    })
+
+    await waitFor(() =>
+      expect(getByTestId(c1, 'status').textContent).toBe('fulfilled'),
+    )
+    expect(getByTestId(c1, 'data').textContent).toBe('C1')
+    expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+  })
+
+  test('two mutations with the same `fixedCacheKey` do influence each other', async () => {
+    render(
+      <>
+        <Component name="C1" fixedCacheKey="test" />
+        <Component name="C2" fixedCacheKey="test" />
+      </>,
+      { wrapper: storeRef.wrapper },
+    )
+    const c1 = screen.getByTestId('C1')
+    const c2 = screen.getByTestId('C2')
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+
+    act(() => {
+      getByTestId(c1, 'trigger').click()
+    })
+
+    await waitFor(() => {
+      expect(getByTestId(c1, 'status').textContent).toBe('fulfilled')
+      expect(getByTestId(c1, 'data').textContent).toBe('C1')
+      expect(getByTestId(c2, 'status').textContent).toBe('fulfilled')
+      expect(getByTestId(c2, 'data').textContent).toBe('C1')
+    })
+
+    // test reset from the other component
+    act(() => {
+      getByTestId(c2, 'reset').click()
+    })
+    await waitFor(() => {
+      expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+      expect(getByTestId(c1, 'data').textContent).toBe('')
+      expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+      expect(getByTestId(c2, 'data').textContent).toBe('')
+    })
+  })
+
+  test('resetting from the component that triggered the mutation resets for each shared result', async () => {
+    render(
+      <>
+        <Component name="C1" fixedCacheKey="test-A" />
+        <Component name="C2" fixedCacheKey="test-A" />
+        <Component name="C3" fixedCacheKey="test-B" />
+        <Component name="C4" fixedCacheKey="test-B" />
+      </>,
+      { wrapper: storeRef.wrapper },
+    )
+    const c1 = screen.getByTestId('C1')
+    const c2 = screen.getByTestId('C2')
+    const c3 = screen.getByTestId('C3')
+    const c4 = screen.getByTestId('C4')
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c3, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c4, 'status').textContent).toBe('uninitialized')
+
+    // trigger with a component using the first cache key
+
+    act(() => {
+      getByTestId(c1, 'trigger').click()
+    })
+
+    await waitFor(() =>
+      expect(getByTestId(c1, 'status').textContent).toBe('fulfilled'),
+    )
+
+    // the components with the first cache key should be affected
+    expect(getByTestId(c1, 'data').textContent).toBe('C1')
+    expect(getByTestId(c2, 'status').textContent).toBe('fulfilled')
+    expect(getByTestId(c2, 'data').textContent).toBe('C1')
+    expect(getByTestId(c2, 'status').textContent).toBe('fulfilled')
+
+    // the components with the second cache key should be unaffected
+    expect(getByTestId(c3, 'data').textContent).toBe('')
+    expect(getByTestId(c3, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c4, 'data').textContent).toBe('')
+    expect(getByTestId(c4, 'status').textContent).toBe('uninitialized')
+
+    // trigger with a component using the second cache key
+
+    act(() => {
+      getByTestId(c3, 'trigger').click()
+    })
+
+    await waitFor(() =>
+      expect(getByTestId(c3, 'status').textContent).toBe('fulfilled'),
+    )
+
+    // the components with the first cache key should be unaffected
+    await waitFor(() => {
+      expect(getByTestId(c1, 'data').textContent).toBe('C1')
+      expect(getByTestId(c2, 'status').textContent).toBe('fulfilled')
+      expect(getByTestId(c2, 'data').textContent).toBe('C1')
+      expect(getByTestId(c2, 'status').textContent).toBe('fulfilled')
+
+      // the component with the second cache key should be affected
+      expect(getByTestId(c3, 'data').textContent).toBe('C3')
+      expect(getByTestId(c3, 'status').textContent).toBe('fulfilled')
+      expect(getByTestId(c4, 'data').textContent).toBe('C3')
+      expect(getByTestId(c4, 'status').textContent).toBe('fulfilled')
+    })
+
+    // test reset from the component that triggered the mutation for the first cache key
+
+    act(() => {
+      getByTestId(c1, 'reset').click()
+    })
+
+    await waitFor(() => {
+      // the components with the first cache key should be affected
+      expect(getByTestId(c1, 'data').textContent).toBe('')
+      expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+      expect(getByTestId(c2, 'data').textContent).toBe('')
+      expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+
+      // the components with the second cache key should be unaffected
+      expect(getByTestId(c3, 'data').textContent).toBe('C3')
+      expect(getByTestId(c3, 'status').textContent).toBe('fulfilled')
+      expect(getByTestId(c4, 'data').textContent).toBe('C3')
+      expect(getByTestId(c4, 'status').textContent).toBe('fulfilled')
+    })
+  })
+
+  test('two mutations with different `fixedCacheKey` do not influence each other', async () => {
+    render(
+      <>
+        <Component name="C1" fixedCacheKey="test" />
+        <Component name="C2" fixedCacheKey="toast" />
+      </>,
+      { wrapper: storeRef.wrapper },
+    )
+    const c1 = screen.getByTestId('C1')
+    const c2 = screen.getByTestId('C2')
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+
+    act(() => {
+      getByTestId(c1, 'trigger').click()
+    })
+
+    await waitFor(() =>
+      expect(getByTestId(c1, 'status').textContent).toBe('fulfilled'),
+    )
+    expect(getByTestId(c1, 'data').textContent).toBe('C1')
+    expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+  })
+
+  test('unmounting and remounting keeps data intact', async () => {
+    const { rerender } = render(<Component name="C1" fixedCacheKey="test" />, {
+      wrapper: storeRef.wrapper,
+    })
+    let c1 = screen.getByTestId('C1')
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+
+    act(() => {
+      getByTestId(c1, 'trigger').click()
+    })
+
+    await waitFor(() =>
+      expect(getByTestId(c1, 'status').textContent).toBe('fulfilled'),
+    )
+    expect(getByTestId(c1, 'data').textContent).toBe('C1')
+
+    rerender(<div />)
+    expect(screen.queryByTestId('C1')).toBe(null)
+
+    rerender(<Component name="C1" fixedCacheKey="test" />)
+    c1 = screen.getByTestId('C1')
+    expect(getByTestId(c1, 'status').textContent).toBe('fulfilled')
+    expect(getByTestId(c1, 'data').textContent).toBe('C1')
+  })
+
+  test('(limitation) mutations using `fixedCacheKey` do not return `originalArgs`', async () => {
+    render(
+      <>
+        <Component name="C1" fixedCacheKey="test" />
+        <Component name="C2" fixedCacheKey="test" />
+      </>,
+      { wrapper: storeRef.wrapper },
+    )
+    const c1 = screen.getByTestId('C1')
+    const c2 = screen.getByTestId('C2')
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+
+    act(() => {
+      getByTestId(c1, 'trigger').click()
+    })
+
+    await waitFor(() =>
+      expect(getByTestId(c1, 'status').textContent).toBe('fulfilled'),
+    )
+    expect(getByTestId(c1, 'data').textContent).toBe('C1')
+    expect(getByTestId(c2, 'status').textContent).toBe('fulfilled')
+    expect(getByTestId(c2, 'data').textContent).toBe('C1')
+  })
+
+  test('a component without `fixedCacheKey` has `originalArgs`', async () => {
+    render(<Component name="C1" />, {
+      wrapper: storeRef.wrapper,
+    })
+    let c1 = screen.getByTestId('C1')
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c1, 'originalArgs').textContent).toBe('undefined')
+
+    await act(async () => {
+      getByTestId(c1, 'trigger').click()
+      await Promise.resolve()
+    })
+
+    expect(getByTestId(c1, 'originalArgs').textContent).toBe('C1')
+  })
+
+  test('a component with `fixedCacheKey` does never have `originalArgs`', async () => {
+    render(<Component name="C1" fixedCacheKey="test" />, {
+      wrapper: storeRef.wrapper,
+    })
+    let c1 = screen.getByTestId('C1')
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c1, 'originalArgs').textContent).toBe('undefined')
+
+    await act(async () => {
+      getByTestId(c1, 'trigger').click()
+    })
+
+    expect(getByTestId(c1, 'originalArgs').textContent).toBe('undefined')
+  })
+
+  test('using `fixedCacheKey` will always use the latest dispatched thunk, prevent races', async () => {
+    let resolve1: (str: string) => void, resolve2: (str: string) => void
+    const p1 = new Promise<string>((resolve) => {
+      resolve1 = resolve
+    })
+    const p2 = new Promise<string>((resolve) => {
+      resolve2 = resolve
+    })
+    render(
+      <>
+        <Component name="C1" fixedCacheKey="test" value={p1} />
+        <Component name="C2" fixedCacheKey="test" value={p2} />
+      </>,
+      { wrapper: storeRef.wrapper },
+    )
+    const c1 = screen.getByTestId('C1')
+    const c2 = screen.getByTestId('C2')
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c2, 'status').textContent).toBe('uninitialized')
+
+    await act(async () => {
+      getByTestId(c1, 'trigger').click()
+      await Promise.resolve()
+    })
+
+    expect(getByTestId(c1, 'status').textContent).toBe('pending')
+    expect(getByTestId(c1, 'data').textContent).toBe('')
+
+    act(() => {
+      getByTestId(c2, 'trigger').click()
+    })
+
+    expect(getByTestId(c1, 'status').textContent).toBe('pending')
+    expect(getByTestId(c1, 'data').textContent).toBe('')
+
+    await act(async () => {
+      resolve1!('this should not show up any more')
+      await Promise.resolve()
+    })
+
+    await delay(150)
+
+    expect(getByTestId(c1, 'status').textContent).toBe('pending')
+    expect(getByTestId(c1, 'data').textContent).toBe('')
+
+    await act(async () => {
+      resolve2!('this should be visible')
+      await Promise.resolve()
+    })
+
+    await delay(150)
+
+    expect(getByTestId(c1, 'status').textContent).toBe('fulfilled')
+    expect(getByTestId(c1, 'data').textContent).toBe('this should be visible')
+  })
+
+  test('using fixedCacheKey should create a new cache entry', async () => {
+    api.enhanceEndpoints({
+      endpoints: {
+        send: {
+          onCacheEntryAdded: (arg) => onNewCacheEntry(arg),
+        },
+      },
+    })
+
+    render(<Component name="C1" fixedCacheKey={'testKey'} />, {
+      wrapper: storeRef.wrapper,
+    })
+
+    let c1 = screen.getByTestId('C1')
+
+    expect(getByTestId(c1, 'status').textContent).toBe('uninitialized')
+    expect(getByTestId(c1, 'originalArgs').textContent).toBe('undefined')
+
+    await act(async () => {
+      getByTestId(c1, 'trigger').click()
+      await Promise.resolve()
+    })
+
+    expect(onNewCacheEntry).toHaveBeenCalledWith('C1')
+
+    api.enhanceEndpoints({
+      endpoints: {
+        send: {
+          onCacheEntryAdded: undefined,
+        },
+      },
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tests/utils.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tests/utils.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tests/utils.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,109 @@
+import { vi } from 'vitest'
+import {
+  isOnline,
+  isDocumentVisible,
+  flatten,
+  joinUrls,
+} from '@internal/query/utils'
+
+afterAll(() => {
+  vi.restoreAllMocks()
+})
+
+describe('isOnline', () => {
+  test('Assumes online=true in a node env', () => {
+    vi.spyOn(window, 'navigator', 'get').mockImplementation(
+      () => undefined as any,
+    )
+
+    expect(navigator).toBeUndefined()
+    expect(isOnline()).toBe(true)
+  })
+
+  test('Returns false if navigator isOnline=false', () => {
+    vi.spyOn(window, 'navigator', 'get').mockImplementation(
+      () => ({ onLine: false }) as any,
+    )
+    expect(isOnline()).toBe(false)
+  })
+
+  test('Returns true if navigator isOnline=true', () => {
+    vi.spyOn(window, 'navigator', 'get').mockImplementation(
+      () => ({ onLine: true }) as any,
+    )
+    expect(isOnline()).toBe(true)
+  })
+})
+
+describe('isDocumentVisible', () => {
+  test('Assumes true when in a non-browser env', () => {
+    vi.spyOn(window, 'document', 'get').mockImplementation(
+      () => undefined as any,
+    )
+    expect(window.document).toBeUndefined()
+    expect(isDocumentVisible()).toBe(true)
+  })
+
+  test('Returns false when hidden=true', () => {
+    vi.spyOn(window, 'document', 'get').mockImplementation(
+      () => ({ visibilityState: 'hidden' }) as any,
+    )
+    expect(isDocumentVisible()).toBe(false)
+  })
+
+  test('Returns true when visibilityState=prerender', () => {
+    vi.spyOn(window, 'document', 'get').mockImplementation(
+      () => ({ visibilityState: 'prerender' }) as any,
+    )
+    expect(document.visibilityState).toBe('prerender')
+    expect(isDocumentVisible()).toBe(true)
+  })
+  test('Returns true when visibilityState=visible', () => {
+    vi.spyOn(window, 'document', 'get').mockImplementation(
+      () => ({ visibilityState: 'visible' }) as any,
+    )
+    expect(document.visibilityState).toBe('visible')
+    expect(isDocumentVisible()).toBe(true)
+  })
+  test('Returns true when visibilityState=undefined', () => {
+    vi.spyOn(window, 'document', 'get').mockImplementation(
+      () => ({ visibilityState: undefined }) as any,
+    )
+    expect(document.visibilityState).toBeUndefined()
+    expect(isDocumentVisible()).toBe(true)
+  })
+})
+
+describe('joinUrls', () => {
+  test.each([
+    ['/api/', '/banana', '/api/banana'],
+    ['/api/', 'banana', '/api/banana'],
+    ['/api', '/banana', '/api/banana'],
+    ['/api', 'banana', '/api/banana'],
+    ['', '/banana', '/banana'],
+    ['', 'banana', 'banana'],
+    ['api', '?a=1', 'api?a=1'],
+    ['api/', '?a=1', 'api/?a=1'],
+    ['api', 'banana?a=1', 'api/banana?a=1'],
+    ['api/', 'banana?a=1', 'api/banana?a=1'],
+    ['https://example.com/api', 'banana', 'https://example.com/api/banana'],
+    ['https://example.com/api', '/banana', 'https://example.com/api/banana'],
+    ['https://example.com/api/', 'banana', 'https://example.com/api/banana'],
+    ['https://example.com/api/', '/banana', 'https://example.com/api/banana'],
+    ['https://example.com/api/', 'https://example.org', 'https://example.org'],
+    ['https://example.com/api/', '//example.org', '//example.org'],
+  ])('%s and %s join to %s', (base, url, expected) => {
+    expect(joinUrls(base, url)).toBe(expected)
+  })
+})
+
+describe('flatten', () => {
+  test('flattens an array to a depth of 1', () => {
+    expect(flatten([1, 2, [3, 4]])).toEqual([1, 2, 3, 4])
+  })
+  test('does not flatten to a depth of 2', () => {
+    const flattenResult = flatten([1, 2, [3, 4, [5, 6]]])
+    expect(flattenResult).not.toEqual([1, 2, 3, 4, 5, 6])
+    expect(flattenResult).toEqual([1, 2, 3, 4, [5, 6]])
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/query/tsHelpers.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/tsHelpers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/tsHelpers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+export type Id<T> = { [K in keyof T]: T[K] } & {}
+export type WithRequiredProp<T, K extends keyof T> = Omit<T, K> &
+  Required<Pick<T, K>>
+export type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never
+export function assertCast<T>(v: any): asserts v is T {}
+
+export function safeAssign<T extends object>(
+  target: T,
+  ...args: Array<Partial<NoInfer<T>>>
+): T {
+  return Object.assign(target, ...args)
+}
+
+/**
+ * Convert a Union type `(A|B)` to an intersection type `(A&B)`
+ */
+export type UnionToIntersection<U> = (
+  U extends any ? (k: U) => void : never
+) extends (k: infer I) => void
+  ? I
+  : never
+
+export type NonOptionalKeys<T> = {
+  [K in keyof T]-?: undefined extends T[K] ? never : K
+}[keyof T]
+
+export type HasRequiredProps<T, True, False> =
+  NonOptionalKeys<T> extends never ? False : True
+
+export type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>
+
+export type NoInfer<T> = [T][T extends any ? 0 : never]
+
+export type NonUndefined<T> = T extends undefined ? never : T
+
+export type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T
+
+export type MaybePromise<T> = T | PromiseLike<T>
+
+export type OmitFromUnion<T, K extends keyof T> = T extends any
+  ? Omit<T, K>
+  : never
+
+export type IsAny<T, True, False = never> = true | false extends (
+  T extends never ? true : false
+)
+  ? True
+  : False
+
+export type CastAny<T, CastTo> = IsAny<T, CastTo, T>
Index: node_modules/@reduxjs/toolkit/src/query/utils/capitalize.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/capitalize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/capitalize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export function capitalize(str: string) {
+  return str.replace(str[0], str[0].toUpperCase())
+}
Index: node_modules/@reduxjs/toolkit/src/query/utils/copyWithStructuralSharing.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/copyWithStructuralSharing.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/copyWithStructuralSharing.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { isPlainObject as _iPO } from '../core/rtkImports'
+
+// remove type guard
+const isPlainObject: (_: any) => boolean = _iPO
+
+export function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T
+export function copyWithStructuralSharing(oldObj: any, newObj: any): any {
+  if (
+    oldObj === newObj ||
+    !(
+      (isPlainObject(oldObj) && isPlainObject(newObj)) ||
+      (Array.isArray(oldObj) && Array.isArray(newObj))
+    )
+  ) {
+    return newObj
+  }
+  const newKeys = Object.keys(newObj)
+  const oldKeys = Object.keys(oldObj)
+
+  let isSameObject = newKeys.length === oldKeys.length
+  const mergeObj: any = Array.isArray(newObj) ? [] : {}
+  for (const key of newKeys) {
+    mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key])
+    if (isSameObject) isSameObject = oldObj[key] === mergeObj[key]
+  }
+  return isSameObject ? oldObj : mergeObj
+}
Index: node_modules/@reduxjs/toolkit/src/query/utils/countObjectKeys.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/countObjectKeys.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/countObjectKeys.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+// Fast method for counting an object's keys
+// without resorting to `Object.keys(obj).length
+// Will this make a big difference in perf? Probably not
+// But we can save a few allocations.
+
+export function countObjectKeys(obj: Record<any, any>) {
+  let count = 0
+
+  for (const _key in obj) {
+    count++
+  }
+
+  return count
+}
Index: node_modules/@reduxjs/toolkit/src/query/utils/flatten.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/flatten.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/flatten.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+/**
+ * Alternative to `Array.flat(1)`
+ * @param arr An array like [1,2,3,[1,2]]
+ * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
+ */
+export const flatten = (arr: readonly any[]) => [].concat(...arr)
Index: node_modules/@reduxjs/toolkit/src/query/utils/getOrInsert.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/getOrInsert.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/getOrInsert.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+export function getOrInsert<K extends object, V>(
+  map: WeakMap<K, V>,
+  key: K,
+  value: V,
+): V
+export function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V
+export function getOrInsert<K extends object, V>(
+  map: Map<K, V> | WeakMap<K, V>,
+  key: K,
+  value: V,
+): V {
+  if (map.has(key)) return map.get(key) as V
+
+  return map.set(key, value).get(key) as V
+}
Index: node_modules/@reduxjs/toolkit/src/query/utils/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+export * from './capitalize'
+export * from './copyWithStructuralSharing'
+export * from './countObjectKeys'
+export * from './flatten'
+export * from './isAbsoluteUrl'
+export * from './isDocumentVisible'
+export * from './isNotNullish'
+export * from './isOnline'
+export * from './isValidUrl'
+export * from './joinUrls'
+export * from './getOrInsert'
Index: node_modules/@reduxjs/toolkit/src/query/utils/isAbsoluteUrl.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/isAbsoluteUrl.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/isAbsoluteUrl.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+/**
+ * If either :// or // is present consider it to be an absolute url
+ *
+ * @param url string
+ */
+
+export function isAbsoluteUrl(url: string) {
+  return new RegExp(`(^|:)//`).test(url)
+}
Index: node_modules/@reduxjs/toolkit/src/query/utils/isDocumentVisible.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/isDocumentVisible.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/isDocumentVisible.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+/**
+ * Assumes true for a non-browser env, otherwise makes a best effort
+ * @link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState
+ */
+export function isDocumentVisible(): boolean {
+  // `document` may not exist in non-browser envs (like RN)
+  if (typeof document === 'undefined') {
+    return true
+  }
+  // Match true for visible, prerender, undefined
+  return document.visibilityState !== 'hidden'
+}
Index: node_modules/@reduxjs/toolkit/src/query/utils/isNotNullish.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/isNotNullish.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/isNotNullish.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export function isNotNullish<T>(v: T | null | undefined): v is T {
+  return v != null
+}
Index: node_modules/@reduxjs/toolkit/src/query/utils/isOnline.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/isOnline.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/isOnline.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+/**
+ * Assumes a browser is online if `undefined`, otherwise makes a best effort
+ * @link https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine
+ */
+export function isOnline() {
+  // We set the default config value in the store, so we'd need to check for this in a SSR env
+  return typeof navigator === 'undefined'
+    ? true
+    : navigator.onLine === undefined
+      ? true
+      : navigator.onLine
+}
Index: node_modules/@reduxjs/toolkit/src/query/utils/isValidUrl.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/isValidUrl.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/isValidUrl.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export function isValidUrl(string: string) {
+  try {
+    new URL(string)
+  } catch (_) {
+    return false
+  }
+
+  return true
+}
Index: node_modules/@reduxjs/toolkit/src/query/utils/joinUrls.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/query/utils/joinUrls.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/query/utils/joinUrls.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import { isAbsoluteUrl } from './isAbsoluteUrl'
+
+const withoutTrailingSlash = (url: string) => url.replace(/\/$/, '')
+const withoutLeadingSlash = (url: string) => url.replace(/^\//, '')
+
+export function joinUrls(
+  base: string | undefined,
+  url: string | undefined,
+): string {
+  if (!base) {
+    return url!
+  }
+  if (!url) {
+    return base
+  }
+
+  if (isAbsoluteUrl(url)) {
+    return url
+  }
+
+  const delimiter = base.endsWith('/') || !url.startsWith('?') ? '/' : ''
+  base = withoutTrailingSlash(base)
+  url = withoutLeadingSlash(url)
+
+  return `${base}${delimiter}${url}`
+}
Index: node_modules/@reduxjs/toolkit/src/react/index.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/react/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/react/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+// This must remain here so that the `mangleErrors.cjs` build script
+// does not have to import this into each source file it rewrites.
+import { formatProdErrorMessage } from '@reduxjs/toolkit'
+export * from '@reduxjs/toolkit'
+
+export { createDynamicMiddleware } from '../dynamicMiddleware/react'
+export type { CreateDispatchWithMiddlewareHook } from '../dynamicMiddleware/react/index'
Index: node_modules/@reduxjs/toolkit/src/serializableStateInvariantMiddleware.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/serializableStateInvariantMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/serializableStateInvariantMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,285 @@
+import type { Middleware } from 'redux'
+import { isAction, isPlainObject } from 'redux'
+import { getTimeMeasureUtils } from './utils'
+
+/**
+ * Returns true if the passed value is "plain", i.e. a value that is either
+ * directly JSON-serializable (boolean, number, string, array, plain object)
+ * or `undefined`.
+ *
+ * @param val The value to check.
+ *
+ * @public
+ */
+export function isPlain(val: any) {
+  const type = typeof val
+  return (
+    val == null ||
+    type === 'string' ||
+    type === 'boolean' ||
+    type === 'number' ||
+    Array.isArray(val) ||
+    isPlainObject(val)
+  )
+}
+
+interface NonSerializableValue {
+  keyPath: string
+  value: unknown
+}
+
+export type IgnorePaths = readonly (string | RegExp)[]
+
+/**
+ * @public
+ */
+export function findNonSerializableValue(
+  value: unknown,
+  path: string = '',
+  isSerializable: (value: unknown) => boolean = isPlain,
+  getEntries?: (value: unknown) => [string, any][],
+  ignoredPaths: IgnorePaths = [],
+  cache?: WeakSet<object>,
+): NonSerializableValue | false {
+  let foundNestedSerializable: NonSerializableValue | false
+
+  if (!isSerializable(value)) {
+    return {
+      keyPath: path || '<root>',
+      value: value,
+    }
+  }
+
+  if (typeof value !== 'object' || value === null) {
+    return false
+  }
+
+  if (cache?.has(value)) return false
+
+  const entries = getEntries != null ? getEntries(value) : Object.entries(value)
+
+  const hasIgnoredPaths = ignoredPaths.length > 0
+
+  for (const [key, nestedValue] of entries) {
+    const nestedPath = path ? path + '.' + key : key
+
+    if (hasIgnoredPaths) {
+      const hasMatches = ignoredPaths.some((ignored) => {
+        if (ignored instanceof RegExp) {
+          return ignored.test(nestedPath)
+        }
+        return nestedPath === ignored
+      })
+      if (hasMatches) {
+        continue
+      }
+    }
+
+    if (!isSerializable(nestedValue)) {
+      return {
+        keyPath: nestedPath,
+        value: nestedValue,
+      }
+    }
+
+    if (typeof nestedValue === 'object') {
+      foundNestedSerializable = findNonSerializableValue(
+        nestedValue,
+        nestedPath,
+        isSerializable,
+        getEntries,
+        ignoredPaths,
+        cache,
+      )
+
+      if (foundNestedSerializable) {
+        return foundNestedSerializable
+      }
+    }
+  }
+
+  if (cache && isNestedFrozen(value)) cache.add(value)
+
+  return false
+}
+
+export function isNestedFrozen(value: object) {
+  if (!Object.isFrozen(value)) return false
+
+  for (const nestedValue of Object.values(value)) {
+    if (typeof nestedValue !== 'object' || nestedValue === null) continue
+
+    if (!isNestedFrozen(nestedValue)) return false
+  }
+
+  return true
+}
+
+/**
+ * Options for `createSerializableStateInvariantMiddleware()`.
+ *
+ * @public
+ */
+export interface SerializableStateInvariantMiddlewareOptions {
+  /**
+   * The function to check if a value is considered serializable. This
+   * function is applied recursively to every value contained in the
+   * state. Defaults to `isPlain()`.
+   */
+  isSerializable?: (value: any) => boolean
+  /**
+   * The function that will be used to retrieve entries from each
+   * value.  If unspecified, `Object.entries` will be used. Defaults
+   * to `undefined`.
+   */
+  getEntries?: (value: any) => [string, any][]
+
+  /**
+   * An array of action types to ignore when checking for serializability.
+   * Defaults to []
+   */
+  ignoredActions?: string[]
+
+  /**
+   * An array of dot-separated path strings or regular expressions to ignore
+   * when checking for serializability, Defaults to
+   * ['meta.arg', 'meta.baseQueryMeta']
+   */
+  ignoredActionPaths?: (string | RegExp)[]
+
+  /**
+   * An array of dot-separated path strings or regular expressions to ignore
+   * when checking for serializability, Defaults to []
+   */
+  ignoredPaths?: (string | RegExp)[]
+  /**
+   * Execution time warning threshold. If the middleware takes longer
+   * than `warnAfter` ms, a warning will be displayed in the console.
+   * Defaults to 32ms.
+   */
+  warnAfter?: number
+
+  /**
+   * Opt out of checking state. When set to `true`, other state-related params will be ignored.
+   */
+  ignoreState?: boolean
+
+  /**
+   * Opt out of checking actions. When set to `true`, other action-related params will be ignored.
+   */
+  ignoreActions?: boolean
+
+  /**
+   * Opt out of caching the results. The cache uses a WeakSet and speeds up repeated checking processes.
+   * The cache is automatically disabled if no browser support for WeakSet is present.
+   */
+  disableCache?: boolean
+}
+
+/**
+ * Creates a middleware that, after every state change, checks if the new
+ * state is serializable. If a non-serializable value is found within the
+ * state, an error is printed to the console.
+ *
+ * @param options Middleware options.
+ *
+ * @public
+ */
+export function createSerializableStateInvariantMiddleware(
+  options: SerializableStateInvariantMiddlewareOptions = {},
+): Middleware {
+  if (process.env.NODE_ENV === 'production') {
+    return () => (next) => (action) => next(action)
+  } else {
+    const {
+      isSerializable = isPlain,
+      getEntries,
+      ignoredActions = [],
+      ignoredActionPaths = ['meta.arg', 'meta.baseQueryMeta'],
+      ignoredPaths = [],
+      warnAfter = 32,
+      ignoreState = false,
+      ignoreActions = false,
+      disableCache = false,
+    } = options
+
+    const cache: WeakSet<object> | undefined =
+      !disableCache && WeakSet ? new WeakSet() : undefined
+
+    return (storeAPI) => (next) => (action) => {
+      if (!isAction(action)) {
+        return next(action)
+      }
+
+      const result = next(action)
+
+      const measureUtils = getTimeMeasureUtils(
+        warnAfter,
+        'SerializableStateInvariantMiddleware',
+      )
+
+      if (
+        !ignoreActions &&
+        !(
+          ignoredActions.length &&
+          ignoredActions.indexOf(action.type as any) !== -1
+        )
+      ) {
+        measureUtils.measureTime(() => {
+          const foundActionNonSerializableValue = findNonSerializableValue(
+            action,
+            '',
+            isSerializable,
+            getEntries,
+            ignoredActionPaths,
+            cache,
+          )
+
+          if (foundActionNonSerializableValue) {
+            const { keyPath, value } = foundActionNonSerializableValue
+
+            console.error(
+              `A non-serializable value was detected in an action, in the path: \`${keyPath}\`. Value:`,
+              value,
+              '\nTake a look at the logic that dispatched this action: ',
+              action,
+              '\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)',
+              '\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)',
+            )
+          }
+        })
+      }
+
+      if (!ignoreState) {
+        measureUtils.measureTime(() => {
+          const state = storeAPI.getState()
+
+          const foundStateNonSerializableValue = findNonSerializableValue(
+            state,
+            '',
+            isSerializable,
+            getEntries,
+            ignoredPaths,
+            cache,
+          )
+
+          if (foundStateNonSerializableValue) {
+            const { keyPath, value } = foundStateNonSerializableValue
+
+            console.error(
+              `A non-serializable value was detected in the state, in the path: \`${keyPath}\`. Value:`,
+              value,
+              `
+Take a look at the reducer(s) handling this action type: ${action.type}.
+(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`,
+            )
+          }
+        })
+
+        measureUtils.warnIfExceeded()
+      }
+
+      return result
+    }
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/tests/Tuple.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/Tuple.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/Tuple.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,83 @@
+import { Tuple } from '@reduxjs/toolkit'
+
+describe('type tests', () => {
+  test('compatibility is checked between described types', () => {
+    const stringTuple = new Tuple('')
+
+    expectTypeOf(stringTuple).toEqualTypeOf<Tuple<[string]>>()
+
+    expectTypeOf(stringTuple).toMatchTypeOf<Tuple<string[]>>()
+
+    expectTypeOf(stringTuple).not.toMatchTypeOf<Tuple<[string, string]>>()
+
+    const numberTuple = new Tuple(0, 1)
+
+    expectTypeOf(numberTuple).not.toMatchTypeOf<Tuple<string[]>>()
+  })
+
+  test('concat is inferred properly', () => {
+    const singleString = new Tuple('')
+
+    expectTypeOf(singleString).toEqualTypeOf<Tuple<[string]>>()
+
+    expectTypeOf(singleString.concat('')).toEqualTypeOf<
+      Tuple<[string, string]>
+    >()
+
+    expectTypeOf(singleString.concat([''] as const)).toMatchTypeOf<
+      Tuple<[string, string]>
+    >()
+  })
+
+  test('prepend is inferred properly', () => {
+    const singleString = new Tuple('')
+
+    expectTypeOf(singleString).toEqualTypeOf<Tuple<[string]>>()
+
+    expectTypeOf(singleString.prepend('')).toEqualTypeOf<
+      Tuple<[string, string]>
+    >()
+
+    expectTypeOf(singleString.prepend([''] as const)).toMatchTypeOf<
+      Tuple<[string, string]>
+    >()
+  })
+
+  test('push must match existing items', () => {
+    const stringTuple = new Tuple('')
+
+    expectTypeOf(stringTuple.push).toBeCallableWith('')
+
+    expectTypeOf(stringTuple.push).parameter(0).not.toBeNumber()
+  })
+
+  test('Tuples can be combined', () => {
+    const stringTuple = new Tuple('')
+
+    const numberTuple = new Tuple(0, 1)
+
+    expectTypeOf(stringTuple.concat(numberTuple)).toEqualTypeOf<
+      Tuple<[string, number, number]>
+    >()
+
+    expectTypeOf(stringTuple.prepend(numberTuple)).toEqualTypeOf<
+      Tuple<[number, number, string]>
+    >()
+
+    expectTypeOf(numberTuple.concat(stringTuple)).toEqualTypeOf<
+      Tuple<[number, number, string]>
+    >()
+
+    expectTypeOf(numberTuple.prepend(stringTuple)).toEqualTypeOf<
+      Tuple<[string, number, number]>
+    >()
+
+    expectTypeOf(stringTuple.prepend(numberTuple)).not.toMatchTypeOf<
+      Tuple<[string, number, number]>
+    >()
+
+    expectTypeOf(stringTuple.concat(numberTuple)).not.toMatchTypeOf<
+      Tuple<[number, number, string]>
+    >()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/actionCreatorInvariantMiddleware.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/actionCreatorInvariantMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/actionCreatorInvariantMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+import type { ActionCreatorInvariantMiddlewareOptions } from '@internal/actionCreatorInvariantMiddleware'
+import { getMessage } from '@internal/actionCreatorInvariantMiddleware'
+import { createActionCreatorInvariantMiddleware } from '@internal/actionCreatorInvariantMiddleware'
+import type { MiddlewareAPI } from '@reduxjs/toolkit'
+import { createAction } from '@reduxjs/toolkit'
+
+describe('createActionCreatorInvariantMiddleware', () => {
+  const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
+
+  afterEach(() => {
+    consoleSpy.mockClear()
+  })
+  afterAll(() => {
+    consoleSpy.mockRestore()
+  })
+
+  const dummyAction = createAction('aSlice/anAction')
+
+  it('sends the action through the middleware chain', () => {
+    const next = vi.fn()
+    const dispatch = createActionCreatorInvariantMiddleware()(
+      {} as MiddlewareAPI,
+    )(next)
+    dispatch({ type: 'SOME_ACTION' })
+
+    expect(next).toHaveBeenCalledWith({
+      type: 'SOME_ACTION',
+    })
+  })
+
+  const makeActionTester = (
+    options?: ActionCreatorInvariantMiddlewareOptions,
+  ) =>
+    createActionCreatorInvariantMiddleware(options)({} as MiddlewareAPI)(
+      (action) => action,
+    )
+
+  it('logs a warning to console if an action creator is mistakenly dispatched', () => {
+    const testAction = makeActionTester()
+
+    testAction(dummyAction())
+
+    expect(consoleSpy).not.toHaveBeenCalled()
+
+    testAction(dummyAction)
+
+    expect(consoleSpy).toHaveBeenLastCalledWith(getMessage(dummyAction.type))
+  })
+
+  it('allows passing a custom predicate', () => {
+    let predicateCalled = false
+    const testAction = makeActionTester({
+      isActionCreator(action): action is Function {
+        predicateCalled = true
+        return false
+      },
+    })
+    testAction(dummyAction())
+    expect(predicateCalled).toBe(true)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/autoBatchEnhancer.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/autoBatchEnhancer.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/autoBatchEnhancer.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,208 @@
+import { configureStore } from '../configureStore'
+import { createSlice } from '../createSlice'
+import type { AutoBatchOptions } from '../autoBatchEnhancer'
+import { autoBatchEnhancer, prepareAutoBatched } from '../autoBatchEnhancer'
+import { delay } from '../utils'
+import { debounce } from 'lodash'
+
+interface CounterState {
+  value: number
+}
+
+const counterSlice = createSlice({
+  name: 'counter',
+  initialState: { value: 0 } as CounterState,
+  reducers: {
+    incrementBatched: {
+      // Batched, low-priority
+      reducer(state) {
+        state.value += 1
+      },
+      prepare: prepareAutoBatched<void>(),
+    },
+    // Not batched, normal priority
+    decrementUnbatched(state) {
+      state.value -= 1
+    },
+  },
+})
+const { incrementBatched, decrementUnbatched } = counterSlice.actions
+
+const makeStore = (autoBatchOptions?: AutoBatchOptions) => {
+  return configureStore({
+    reducer: counterSlice.reducer,
+    enhancers: (getDefaultEnhancers) =>
+      getDefaultEnhancers({
+        autoBatch: autoBatchOptions,
+      }),
+  })
+}
+
+let store: ReturnType<typeof makeStore>
+
+let subscriptionNotifications = 0
+
+const cases: AutoBatchOptions[] = [
+  { type: 'tick' },
+  { type: 'raf' },
+  { type: 'timer', timeout: 0 },
+  { type: 'timer', timeout: 10 },
+  { type: 'timer', timeout: 20 },
+  {
+    type: 'callback',
+    queueNotification: debounce((notify: () => void) => {
+      notify()
+    }, 5),
+  },
+]
+
+describe.each(cases)('autoBatchEnhancer: %j', (autoBatchOptions) => {
+  beforeEach(() => {
+    subscriptionNotifications = 0
+    store = makeStore(autoBatchOptions)
+
+    store.subscribe(() => {
+      subscriptionNotifications++
+    })
+  })
+  test('Does not alter normal subscription notification behavior', async () => {
+    store.dispatch(decrementUnbatched())
+    expect(subscriptionNotifications).toBe(1)
+    store.dispatch(decrementUnbatched())
+    expect(subscriptionNotifications).toBe(2)
+    store.dispatch(decrementUnbatched())
+    expect(subscriptionNotifications).toBe(3)
+    store.dispatch(decrementUnbatched())
+
+    await delay(25)
+
+    expect(subscriptionNotifications).toBe(4)
+  })
+
+  test('Only notifies once if several batched actions are dispatched in a row', async () => {
+    store.dispatch(incrementBatched())
+    expect(subscriptionNotifications).toBe(0)
+    store.dispatch(incrementBatched())
+    expect(subscriptionNotifications).toBe(0)
+    store.dispatch(incrementBatched())
+    expect(subscriptionNotifications).toBe(0)
+    store.dispatch(incrementBatched())
+
+    await delay(25)
+
+    expect(subscriptionNotifications).toBe(1)
+  })
+
+  test('Notifies immediately if a non-batched action is dispatched', async () => {
+    store.dispatch(incrementBatched())
+    expect(subscriptionNotifications).toBe(0)
+    store.dispatch(incrementBatched())
+    expect(subscriptionNotifications).toBe(0)
+    store.dispatch(decrementUnbatched())
+    expect(subscriptionNotifications).toBe(1)
+    store.dispatch(incrementBatched())
+
+    await delay(25)
+
+    expect(subscriptionNotifications).toBe(2)
+  })
+
+  test('Does not notify at end of tick if last action was normal priority', async () => {
+    store.dispatch(incrementBatched())
+    expect(subscriptionNotifications).toBe(0)
+    store.dispatch(incrementBatched())
+    expect(subscriptionNotifications).toBe(0)
+    store.dispatch(decrementUnbatched())
+    expect(subscriptionNotifications).toBe(1)
+    store.dispatch(incrementBatched())
+    store.dispatch(decrementUnbatched())
+    expect(subscriptionNotifications).toBe(2)
+    store.dispatch(decrementUnbatched())
+    expect(subscriptionNotifications).toBe(3)
+
+    await delay(25)
+
+    expect(subscriptionNotifications).toBe(3)
+  })
+})
+
+describe.each(cases)(
+  'autoBatchEnhancer with fake timers: %j',
+  (autoBatchOptions) => {
+    beforeAll(() => {
+      vitest.useFakeTimers({
+        toFake: ['setTimeout', 'queueMicrotask', 'requestAnimationFrame'],
+      })
+    })
+    afterAll(() => {
+      vitest.useRealTimers()
+    })
+    beforeEach(() => {
+      subscriptionNotifications = 0
+      store = makeStore(autoBatchOptions)
+
+      store.subscribe(() => {
+        subscriptionNotifications++
+      })
+    })
+    test('Does not alter normal subscription notification behavior', () => {
+      store.dispatch(decrementUnbatched())
+      expect(subscriptionNotifications).toBe(1)
+      store.dispatch(decrementUnbatched())
+      expect(subscriptionNotifications).toBe(2)
+      store.dispatch(decrementUnbatched())
+      expect(subscriptionNotifications).toBe(3)
+      store.dispatch(decrementUnbatched())
+
+      vitest.runAllTimers()
+
+      expect(subscriptionNotifications).toBe(4)
+    })
+
+    test('Only notifies once if several batched actions are dispatched in a row', () => {
+      store.dispatch(incrementBatched())
+      expect(subscriptionNotifications).toBe(0)
+      store.dispatch(incrementBatched())
+      expect(subscriptionNotifications).toBe(0)
+      store.dispatch(incrementBatched())
+      expect(subscriptionNotifications).toBe(0)
+      store.dispatch(incrementBatched())
+
+      vitest.runAllTimers()
+
+      expect(subscriptionNotifications).toBe(1)
+    })
+
+    test('Notifies immediately if a non-batched action is dispatched', () => {
+      store.dispatch(incrementBatched())
+      expect(subscriptionNotifications).toBe(0)
+      store.dispatch(incrementBatched())
+      expect(subscriptionNotifications).toBe(0)
+      store.dispatch(decrementUnbatched())
+      expect(subscriptionNotifications).toBe(1)
+      store.dispatch(incrementBatched())
+
+      vitest.runAllTimers()
+
+      expect(subscriptionNotifications).toBe(2)
+    })
+
+    test('Does not notify at end of tick if last action was normal priority', () => {
+      store.dispatch(incrementBatched())
+      expect(subscriptionNotifications).toBe(0)
+      store.dispatch(incrementBatched())
+      expect(subscriptionNotifications).toBe(0)
+      store.dispatch(decrementUnbatched())
+      expect(subscriptionNotifications).toBe(1)
+      store.dispatch(incrementBatched())
+      store.dispatch(decrementUnbatched())
+      expect(subscriptionNotifications).toBe(2)
+      store.dispatch(decrementUnbatched())
+      expect(subscriptionNotifications).toBe(3)
+
+      vitest.runAllTimers()
+
+      expect(subscriptionNotifications).toBe(3)
+    })
+  },
+)
Index: node_modules/@reduxjs/toolkit/src/tests/combineSlices.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/combineSlices.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/combineSlices.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,219 @@
+import type { Reducer, Slice, WithSlice } from '@reduxjs/toolkit'
+import { combineSlices } from '@reduxjs/toolkit'
+import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'
+
+declare const stringSlice: Slice<string, {}, 'string'>
+
+declare const numberSlice: Slice<number, {}, 'number'>
+
+declare const booleanReducer: Reducer<boolean>
+
+const exampleApi = createApi({
+  baseQuery: fetchBaseQuery(),
+  endpoints: (build) => ({
+    getThing: build.query({
+      query: () => '',
+    }),
+  }),
+})
+
+type ExampleApiState = ReturnType<typeof exampleApi.reducer>
+
+describe('type tests', () => {
+  test('combineSlices correctly combines static state', () => {
+    const rootReducer = combineSlices(stringSlice, numberSlice, exampleApi, {
+      boolean: booleanReducer,
+    })
+
+    expectTypeOf(rootReducer(undefined, { type: '' })).toEqualTypeOf<{
+      string: string
+      number: number
+      boolean: boolean
+      api: ExampleApiState
+    }>()
+  })
+
+  test('combineSlices allows passing no initial reducers', () => {
+    const rootReducer = combineSlices()
+
+    expectTypeOf(rootReducer(undefined, { type: '' })).toEqualTypeOf<{}>()
+
+    const declaredLazy =
+      combineSlices().withLazyLoadedSlices<WithSlice<typeof numberSlice>>()
+
+    expectTypeOf(declaredLazy(undefined, { type: '' })).toEqualTypeOf<{
+      number?: number
+    }>()
+  })
+
+  test('withLazyLoadedSlices adds partial to state', () => {
+    const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<
+      WithSlice<typeof numberSlice> & WithSlice<typeof exampleApi>
+    >()
+
+    expectTypeOf(rootReducer(undefined, { type: '' }).number).toEqualTypeOf<
+      number | undefined
+    >()
+
+    expectTypeOf(rootReducer(undefined, { type: '' }).api).toEqualTypeOf<
+      ExampleApiState | undefined
+    >()
+  })
+
+  test('inject marks injected keys as required', () => {
+    const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<
+      WithSlice<typeof numberSlice> &
+        WithSlice<typeof exampleApi> & { boolean: boolean }
+    >()
+
+    expectTypeOf(rootReducer(undefined, { type: '' }).number).toEqualTypeOf<
+      number | undefined
+    >()
+
+    expectTypeOf(rootReducer(undefined, { type: '' }).boolean).toEqualTypeOf<
+      boolean | undefined
+    >()
+
+    expectTypeOf(rootReducer(undefined, { type: '' }).api).toEqualTypeOf<
+      ExampleApiState | undefined
+    >()
+
+    const withNumber = rootReducer.inject(numberSlice)
+
+    expectTypeOf(withNumber(undefined, { type: '' }).number).toBeNumber()
+
+    const withBool = rootReducer.inject({
+      reducerPath: 'boolean' as const,
+      reducer: booleanReducer,
+    })
+
+    expectTypeOf(withBool(undefined, { type: '' }).boolean).toBeBoolean()
+
+    const withApi = rootReducer.inject(exampleApi)
+
+    expectTypeOf(
+      withApi(undefined, { type: '' }).api,
+    ).toEqualTypeOf<ExampleApiState>()
+  })
+
+  test('selector() allows defining selectors with injected reducers defined', () => {
+    const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<
+      WithSlice<typeof numberSlice> & { boolean: boolean }
+    >()
+
+    type RootState = ReturnType<typeof rootReducer>
+
+    const withoutInjection = rootReducer.selector(
+      (state: RootState) => state.number,
+    )
+
+    expectTypeOf(
+      withoutInjection(rootReducer(undefined, { type: '' })),
+    ).toEqualTypeOf<number | undefined>()
+
+    const withInjection = rootReducer
+      .inject(numberSlice)
+      .selector((state) => state.number)
+
+    expectTypeOf(
+      withInjection(rootReducer(undefined, { type: '' })),
+    ).toBeNumber()
+  })
+
+  test('selector() passes arguments through', () => {
+    const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<
+      WithSlice<typeof numberSlice> & { boolean: boolean }
+    >()
+
+    const selector = rootReducer
+      .inject(numberSlice)
+      .selector((state, num: number) => state.number)
+
+    const state = rootReducer(undefined, { type: '' })
+
+    expectTypeOf(selector).toBeCallableWith(state, 0)
+
+    // required argument
+    expectTypeOf(selector).parameters.not.toMatchTypeOf([state])
+
+    // number not string
+    expectTypeOf(selector).parameters.not.toMatchTypeOf([state, ''])
+  })
+
+  test('nested calls inferred correctly', () => {
+    const innerReducer =
+      combineSlices(stringSlice).withLazyLoadedSlices<
+        WithSlice<typeof numberSlice>
+      >()
+
+    const innerSelector = innerReducer.inject(numberSlice).selector(
+      (state) => state.number,
+      (rootState: RootState) => rootState.inner,
+    )
+
+    const outerReducer = combineSlices({ inner: innerReducer })
+
+    type RootState = ReturnType<typeof outerReducer>
+
+    expectTypeOf(outerReducer(undefined, { type: '' })).toMatchTypeOf<{
+      inner: { string: string }
+    }>()
+
+    expectTypeOf(
+      innerSelector(outerReducer(undefined, { type: '' })),
+    ).toBeNumber()
+  })
+
+  test('selector errors if selectorFn and selectState are mismatched', () => {
+    const combinedReducer =
+      combineSlices(stringSlice).withLazyLoadedSlices<
+        WithSlice<typeof numberSlice>
+      >()
+
+    const outerReducer = combineSlices({ inner: combinedReducer })
+
+    type RootState = ReturnType<typeof outerReducer>
+
+    combinedReducer.selector(
+      (state) => state.number,
+      // @ts-expect-error wrong state returned
+      (rootState: RootState) => rootState.inner.number,
+    )
+
+    combinedReducer.selector(
+      (state, num: number) => state.number,
+      // @ts-expect-error wrong arguments
+      (rootState: RootState, str: string) => rootState.inner,
+    )
+
+    combinedReducer.selector(
+      (state, num: number) => state.number,
+      (rootState: RootState) => rootState.inner,
+    )
+
+    // TODO: see if there's a way of making this work
+    // probably a rare case so not the end of the world if not
+    combinedReducer.selector(
+      (state) => state.number,
+      // @ts-ignore
+      (rootState: RootState, num: number) => rootState.inner,
+    )
+  })
+
+  test('correct type of state is inferred when not declared via `withLazyLoadedSlices`', () => {
+    // Related to https://github.com/reduxjs/redux-toolkit/issues/4171
+
+    const combinedReducer = combineSlices(stringSlice)
+
+    const withNumber = combinedReducer.inject(numberSlice)
+
+    expectTypeOf(withNumber).returns.toEqualTypeOf<{
+      string: string
+      number: number
+    }>()
+
+    expectTypeOf(
+      withNumber(undefined, { type: '' }).number,
+    ).toMatchTypeOf<number>()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/combineSlices.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/combineSlices.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/combineSlices.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,215 @@
+import type { WithSlice } from '@reduxjs/toolkit'
+import {
+  combineSlices,
+  createAction,
+  createReducer,
+  createSlice,
+} from '@reduxjs/toolkit'
+
+const dummyAction = createAction<void>('dummy')
+
+const stringSlice = createSlice({
+  name: 'string',
+  initialState: '',
+  reducers: {},
+})
+
+const numberSlice = createSlice({
+  name: 'number',
+  initialState: 0,
+  reducers: {},
+})
+
+const booleanReducer = createReducer(false, () => {})
+
+const counterReducer = createSlice({
+  name: 'counter',
+  initialState: () => ({ value: 0 }),
+  reducers: {},
+})
+
+// mimic - we can't use RTKQ here directly
+const api = {
+  reducerPath: 'api' as const,
+  reducer: createReducer(
+    {
+      queries: {},
+      mutations: {},
+      provided: {},
+      subscriptions: {},
+      config: {
+        reducerPath: 'api',
+        invalidationBehavior: 'delayed',
+        online: false,
+        focused: false,
+        keepUnusedDataFor: 60,
+        middlewareRegistered: false,
+        refetchOnMountOrArgChange: false,
+        refetchOnReconnect: false,
+        refetchOnFocus: false,
+      },
+    },
+    () => {},
+  ),
+}
+
+describe('combineSlices', () => {
+  it('calls combineReducers to combine static slices/reducers', () => {
+    const combinedReducer = combineSlices(
+      stringSlice,
+      {
+        num: numberSlice.reducer,
+        boolean: booleanReducer,
+      },
+      api,
+    )
+    expect(combinedReducer(undefined, dummyAction())).toEqual({
+      string: stringSlice.getInitialState(),
+      num: numberSlice.getInitialState(),
+      boolean: booleanReducer.getInitialState(),
+      api: api.reducer.getInitialState(),
+    })
+  })
+  it('allows passing no initial reducers', () => {
+    const combinedReducer = combineSlices()
+
+    const result = combinedReducer(undefined, dummyAction())
+
+    expect(result).toEqual({})
+
+    // no-op if we have no reducers yet
+    expect(combinedReducer(result, dummyAction())).toBe(result)
+  })
+  describe('injects', () => {
+    beforeEach(() => {
+      vi.stubEnv('NODE_ENV', 'development')
+
+      return vi.unstubAllEnvs
+    })
+
+    it('injects slice', () => {
+      const combinedReducer =
+        combineSlices(stringSlice).withLazyLoadedSlices<
+          WithSlice<typeof numberSlice>
+        >()
+
+      expect(combinedReducer(undefined, dummyAction()).number).toBe(undefined)
+
+      const injectedReducer = combinedReducer.inject(numberSlice)
+
+      expect(injectedReducer(undefined, dummyAction()).number).toBe(
+        numberSlice.getInitialState(),
+      )
+    })
+    it('logs error when same name is used for different reducers', () => {
+      const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
+      const combinedReducer = combineSlices(stringSlice).withLazyLoadedSlices<{
+        boolean: boolean
+      }>()
+
+      combinedReducer.inject({
+        reducerPath: 'boolean' as const,
+        reducer: booleanReducer,
+      })
+
+      combinedReducer.inject({
+        reducerPath: 'boolean' as const,
+        reducer: booleanReducer,
+      })
+
+      expect(consoleSpy).not.toHaveBeenCalled()
+
+      combinedReducer.inject({
+        reducerPath: 'boolean' as const,
+        // @ts-expect-error wrong reducer
+        reducer: stringSlice.reducer,
+      })
+
+      expect(consoleSpy).toHaveBeenCalledWith(
+        `called \`inject\` to override already-existing reducer boolean without specifying \`overrideExisting: true\``,
+      )
+      consoleSpy.mockRestore()
+    })
+    it('allows replacement of reducers if overrideExisting is true', () => {
+      const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
+      const combinedReducer = combineSlices(stringSlice).withLazyLoadedSlices<
+        WithSlice<typeof numberSlice> &
+          WithSlice<typeof api> & { boolean: boolean }
+      >()
+
+      combinedReducer.inject(numberSlice)
+
+      combinedReducer.inject(
+        { reducerPath: 'number' as const, reducer: () => 0 },
+        { overrideExisting: true },
+      )
+
+      expect(consoleSpy).not.toHaveBeenCalled()
+    })
+  })
+  describe('selector', () => {
+    const combinedReducer = combineSlices(stringSlice).withLazyLoadedSlices<{
+      boolean: boolean
+      counter: { value: number }
+    }>()
+
+    const uninjectedState = combinedReducer(undefined, dummyAction())
+
+    const injectedReducer = combinedReducer.inject({
+      reducerPath: 'boolean' as const,
+      reducer: booleanReducer,
+    })
+
+    it('ensures state is defined in selector even if action has not been dispatched', () => {
+      expect(uninjectedState.boolean).toBe(undefined)
+
+      const selectBoolean = injectedReducer.selector((state) => state.boolean)
+
+      expect(selectBoolean(uninjectedState)).toBe(
+        booleanReducer.getInitialState(),
+      )
+    })
+    it('exposes original to allow for logging', () => {
+      const selectBoolean = injectedReducer.selector(
+        (state) => injectedReducer.selector.original(state).boolean,
+      )
+      expect(selectBoolean(uninjectedState)).toBe(undefined)
+    })
+    it('throws if original is called on something other than state proxy', () => {
+      expect(() => injectedReducer.selector.original({} as any)).toThrow(
+        'original must be used on state Proxy',
+      )
+    })
+    it('allows passing a selectState selector, to handle nested state', () => {
+      const wrappedReducer = combineSlices({
+        inner: combinedReducer,
+      })
+
+      type RootState = ReturnType<typeof wrappedReducer>
+
+      const selector = injectedReducer.selector(
+        (state) => state.boolean,
+        (rootState: RootState) => rootState.inner,
+      )
+
+      expect(selector(wrappedReducer(undefined, dummyAction()))).toBe(
+        booleanReducer.getInitialState(),
+      )
+    })
+    it('caches initial state', () => {
+      const beforeInject = combinedReducer(undefined, dummyAction())
+      const injectedReducer = combinedReducer.inject(counterReducer)
+      const selectCounter = injectedReducer.selector((state) => state.counter)
+      const counter = selectCounter(beforeInject)
+      expect(counter).toBe(selectCounter(beforeInject))
+
+      injectedReducer.inject(
+        { reducerPath: 'counter', reducer: () => ({ value: 0 }) },
+        { overrideExisting: true },
+      )
+      const counter2 = selectCounter(beforeInject)
+      expect(counter2).not.toBe(counter)
+      expect(counter2).toBe(selectCounter(beforeInject))
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/combinedTest.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/combinedTest.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/combinedTest.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,133 @@
+import type { PayloadAction } from '@reduxjs/toolkit'
+import {
+  createAsyncThunk,
+  createAction,
+  createSlice,
+  configureStore,
+  createEntityAdapter,
+} from '@reduxjs/toolkit'
+import type { EntityAdapter } from '@internal/entities/models'
+import type { BookModel } from '@internal/entities/tests/fixtures/book'
+
+describe('Combined entity slice', () => {
+  let adapter: EntityAdapter<BookModel, string>
+
+  beforeEach(() => {
+    adapter = createEntityAdapter({
+      selectId: (book: BookModel) => book.id,
+      sortComparer: (a, b) => a.title.localeCompare(b.title),
+    })
+  })
+
+  it('Entity and async features all works together', async () => {
+    const upsertBook = createAction<BookModel>('otherBooks/upsert')
+
+    type BooksState = ReturnType<typeof adapter.getInitialState> & {
+      loading: 'initial' | 'pending' | 'finished' | 'failed'
+      lastRequestId: string | null
+    }
+
+    const initialState: BooksState = adapter.getInitialState({
+      loading: 'initial',
+      lastRequestId: null,
+    })
+
+    const fakeBooks: BookModel[] = [
+      { id: 'b', title: 'Second' },
+      { id: 'a', title: 'First' },
+    ]
+
+    const fetchBooksTAC = createAsyncThunk<
+      BookModel[],
+      void,
+      {
+        state: { books: BooksState }
+      }
+    >(
+      'books/fetch',
+      async (arg, { getState, dispatch, extra, requestId, signal }) => {
+        const state = getState()
+        return fakeBooks
+      },
+    )
+
+    const booksSlice = createSlice({
+      name: 'books',
+      initialState,
+      reducers: {
+        addOne: adapter.addOne,
+        removeOne(state, action: PayloadAction<string>) {
+          const sizeBefore = state.ids.length
+          // Originally, having nested `produce` calls don't mutate `state` here as I would have expected.
+          // (note that `state` here is actually an Immer Draft<S>, from `createReducer`)
+          // One woarkound was to return the new plain result value instead
+          // See https://github.com/immerjs/immer/issues/533
+          // However, after tweaking `createStateOperator` to check if the argument is a draft,
+          // we can just treat the operator as strictly mutating, without returning a result,
+          // and the result should be correct.
+          const result = adapter.removeOne(state, action)
+
+          const sizeAfter = state.ids.length
+          if (sizeBefore > 0) {
+            expect(sizeAfter).toBe(sizeBefore - 1)
+          }
+
+          //Deliberately _don't_ return result
+        },
+      },
+      extraReducers: (builder) => {
+        builder.addCase(upsertBook, (state, action) => {
+          return adapter.upsertOne(state, action)
+        })
+        builder.addCase(fetchBooksTAC.pending, (state, action) => {
+          state.loading = 'pending'
+          state.lastRequestId = action.meta.requestId
+        })
+        builder.addCase(fetchBooksTAC.fulfilled, (state, action) => {
+          if (
+            state.loading === 'pending' &&
+            action.meta.requestId === state.lastRequestId
+          ) {
+            adapter.setAll(state, action.payload)
+            state.loading = 'finished'
+            state.lastRequestId = null
+          }
+        })
+      },
+    })
+
+    const { addOne, removeOne } = booksSlice.actions
+    const { reducer } = booksSlice
+
+    const store = configureStore({
+      reducer: {
+        books: reducer,
+      },
+    })
+
+    await store.dispatch(fetchBooksTAC())
+
+    const { books: booksAfterLoaded } = store.getState()
+    // Sorted, so "First" goes first
+    expect(booksAfterLoaded.ids).toEqual(['a', 'b'])
+    expect(booksAfterLoaded.lastRequestId).toBe(null)
+    expect(booksAfterLoaded.loading).toBe('finished')
+
+    store.dispatch(addOne({ id: 'd', title: 'Remove Me' }))
+    store.dispatch(removeOne('d'))
+
+    store.dispatch(addOne({ id: 'c', title: 'Middle' }))
+
+    const { books: booksAfterAddOne } = store.getState()
+
+    // Sorted, so "Middle" goes in the middle
+    expect(booksAfterAddOne.ids).toEqual(['a', 'c', 'b'])
+
+    store.dispatch(upsertBook({ id: 'c', title: 'Zeroth' }))
+
+    const { books: booksAfterUpsert } = store.getState()
+
+    // Sorted, so "Zeroth" goes last
+    expect(booksAfterUpsert.ids).toEqual(['a', 'b', 'c'])
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/configureStore.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/configureStore.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/configureStore.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,805 @@
+import type {
+  Action,
+  ConfigureStoreOptions,
+  Dispatch,
+  Middleware,
+  PayloadAction,
+  Reducer,
+  Store,
+  StoreEnhancer,
+  ThunkAction,
+  ThunkDispatch,
+  ThunkMiddleware,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import {
+  Tuple,
+  applyMiddleware,
+  combineReducers,
+  configureStore,
+  createSlice,
+} from '@reduxjs/toolkit'
+import { thunk } from 'redux-thunk'
+
+const _anyMiddleware: any = () => () => () => {}
+
+describe('type tests', () => {
+  test('configureStore() requires a valid reducer or reducer map.', () => {
+    configureStore({
+      reducer: (state, action) => 0,
+    })
+
+    configureStore({
+      reducer: {
+        counter1: () => 0,
+        counter2: () => 1,
+      },
+    })
+
+    // @ts-expect-error
+    configureStore({ reducer: 'not a reducer' })
+
+    // @ts-expect-error
+    configureStore({ reducer: { a: 'not a reducer' } })
+
+    // @ts-expect-error
+    configureStore({})
+  })
+
+  test('configureStore() infers the store state type.', () => {
+    const reducer: Reducer<number> = () => 0
+
+    const store = configureStore({ reducer })
+
+    expectTypeOf(store).toMatchTypeOf<Store<number, UnknownAction>>()
+
+    expectTypeOf(store).not.toMatchTypeOf<Store<string, UnknownAction>>()
+  })
+
+  test('configureStore() infers the store action type.', () => {
+    const reducer: Reducer<number, PayloadAction<number>> = () => 0
+
+    const store = configureStore({ reducer })
+
+    expectTypeOf(store).toMatchTypeOf<Store<number, PayloadAction<number>>>()
+
+    expectTypeOf(store).not.toMatchTypeOf<
+      Store<number, PayloadAction<string>>
+    >()
+  })
+
+  test('configureStore() accepts Tuple for middleware, but not plain array.', () => {
+    const middleware: Middleware = (store) => (next) => next
+
+    configureStore({
+      reducer: () => 0,
+      middleware: () => new Tuple(middleware),
+    })
+
+    configureStore({
+      reducer: () => 0,
+      // @ts-expect-error
+      middleware: () => [middleware],
+    })
+
+    configureStore({
+      reducer: () => 0,
+      // @ts-expect-error
+      middleware: () => new Tuple('not middleware'),
+    })
+  })
+
+  test('configureStore() accepts devTools flag.', () => {
+    configureStore({
+      reducer: () => 0,
+      devTools: true,
+    })
+
+    configureStore({
+      reducer: () => 0,
+      // @ts-expect-error
+      devTools: 'true',
+    })
+  })
+
+  test('configureStore() accepts devTools EnhancerOptions.', () => {
+    configureStore({
+      reducer: () => 0,
+      devTools: { name: 'myApp' },
+    })
+
+    configureStore({
+      reducer: () => 0,
+      // @ts-expect-error
+      devTools: { appName: 'myApp' },
+    })
+  })
+
+  test('configureStore() accepts preloadedState.', () => {
+    configureStore({
+      reducer: () => 0,
+      preloadedState: 0,
+    })
+
+    configureStore({
+      // @ts-expect-error
+      reducer: (_: number) => 0,
+      preloadedState: 'non-matching state type',
+    })
+  })
+
+  test('nullable state is preserved', () => {
+    const store = configureStore({
+      reducer: (): string | null => null,
+    })
+
+    expectTypeOf(store.getState()).toEqualTypeOf<string | null>()
+  })
+
+  test('configureStore() accepts store Tuple for enhancers, but not plain array', () => {
+    const enhancer = applyMiddleware(() => (next) => next)
+
+    const store = configureStore({
+      reducer: () => 0,
+      enhancers: () => new Tuple(enhancer),
+    })
+
+    const store2 = configureStore({
+      reducer: () => 0,
+      // @ts-expect-error
+      enhancers: () => [enhancer],
+    })
+
+    expectTypeOf(store.dispatch).toMatchTypeOf<
+      Dispatch & ThunkDispatch<number, undefined, UnknownAction>
+    >()
+
+    configureStore({
+      reducer: () => 0,
+      // @ts-expect-error
+      enhancers: () => new Tuple('not a store enhancer'),
+    })
+
+    const somePropertyStoreEnhancer: StoreEnhancer<{
+      someProperty: string
+    }> = (next) => {
+      return (reducer, preloadedState) => {
+        return {
+          ...next(reducer, preloadedState),
+          someProperty: 'some value',
+        }
+      }
+    }
+
+    const anotherPropertyStoreEnhancer: StoreEnhancer<{
+      anotherProperty: number
+    }> = (next) => {
+      return (reducer, preloadedState) => {
+        return {
+          ...next(reducer, preloadedState),
+          anotherProperty: 123,
+        }
+      }
+    }
+
+    const store3 = configureStore({
+      reducer: () => 0,
+      enhancers: () =>
+        new Tuple(somePropertyStoreEnhancer, anotherPropertyStoreEnhancer),
+    })
+
+    expectTypeOf(store3.dispatch).toEqualTypeOf<Dispatch>()
+
+    expectTypeOf(store3.someProperty).toBeString()
+
+    expectTypeOf(store3.anotherProperty).toBeNumber()
+
+    const storeWithCallback = configureStore({
+      reducer: () => 0,
+      enhancers: (getDefaultEnhancers) =>
+        getDefaultEnhancers()
+          .prepend(anotherPropertyStoreEnhancer)
+          .concat(somePropertyStoreEnhancer),
+    })
+
+    expectTypeOf(store3.dispatch).toMatchTypeOf<
+      Dispatch & ThunkDispatch<number, undefined, UnknownAction>
+    >()
+
+    expectTypeOf(store3.someProperty).toBeString()
+
+    expectTypeOf(store3.anotherProperty).toBeNumber()
+
+    const someStateExtendingEnhancer: StoreEnhancer<
+      {},
+      { someProperty: string }
+    > =
+      (next) =>
+      (...args) => {
+        const store = next(...args)
+        const getState = () => ({
+          ...store.getState(),
+          someProperty: 'some value',
+        })
+        return {
+          ...store,
+          getState,
+        } as any
+      }
+
+    const anotherStateExtendingEnhancer: StoreEnhancer<
+      {},
+      { anotherProperty: number }
+    > =
+      (next) =>
+      (...args) => {
+        const store = next(...args)
+        const getState = () => ({
+          ...store.getState(),
+          anotherProperty: 123,
+        })
+        return {
+          ...store,
+          getState,
+        } as any
+      }
+
+    const store4 = configureStore({
+      reducer: () => ({ aProperty: 0 }),
+      enhancers: () =>
+        new Tuple(someStateExtendingEnhancer, anotherStateExtendingEnhancer),
+    })
+
+    const state = store4.getState()
+
+    expectTypeOf(state.aProperty).toBeNumber()
+
+    expectTypeOf(state.someProperty).toBeString()
+
+    expectTypeOf(state.anotherProperty).toBeNumber()
+
+    const storeWithCallback2 = configureStore({
+      reducer: () => ({ aProperty: 0 }),
+      enhancers: (gDE) =>
+        gDE().concat(someStateExtendingEnhancer, anotherStateExtendingEnhancer),
+    })
+
+    const stateWithCallback = storeWithCallback2.getState()
+
+    expectTypeOf(stateWithCallback.aProperty).toBeNumber()
+
+    expectTypeOf(stateWithCallback.someProperty).toBeString()
+
+    expectTypeOf(stateWithCallback.anotherProperty).toBeNumber()
+  })
+
+  test('Preloaded state typings', () => {
+    const counterReducer1: Reducer<number> = () => 0
+    const counterReducer2: Reducer<number> = () => 0
+
+    test('partial preloaded state', () => {
+      const store = configureStore({
+        reducer: {
+          counter1: counterReducer1,
+          counter2: counterReducer2,
+        },
+        preloadedState: {
+          counter1: 0,
+        },
+      })
+
+      expectTypeOf(store.getState().counter1).toBeNumber()
+
+      expectTypeOf(store.getState().counter2).toBeNumber()
+    })
+
+    test('empty preloaded state', () => {
+      const store = configureStore({
+        reducer: {
+          counter1: counterReducer1,
+          counter2: counterReducer2,
+        },
+        preloadedState: {},
+      })
+
+      expectTypeOf(store.getState().counter1).toBeNumber()
+
+      expectTypeOf(store.getState().counter2).toBeNumber()
+    })
+
+    test('excess properties in preloaded state', () => {
+      const store = configureStore({
+        reducer: {
+          // @ts-expect-error
+          counter1: counterReducer1,
+          counter2: counterReducer2,
+        },
+        preloadedState: {
+          counter1: 0,
+          counter3: 5,
+        },
+      })
+
+      expectTypeOf(store.getState().counter1).toBeNumber()
+
+      expectTypeOf(store.getState().counter2).toBeNumber()
+    })
+
+    test('mismatching properties in preloaded state', () => {
+      const store = configureStore({
+        reducer: {
+          // @ts-expect-error
+          counter1: counterReducer1,
+          counter2: counterReducer2,
+        },
+        preloadedState: {
+          counter3: 5,
+        },
+      })
+
+      expectTypeOf(store.getState().counter1).toBeNumber()
+
+      expectTypeOf(store.getState().counter2).toBeNumber()
+    })
+
+    test('string preloaded state when expecting object', () => {
+      const store = configureStore({
+        reducer: {
+          // @ts-expect-error
+          counter1: counterReducer1,
+          counter2: counterReducer2,
+        },
+        preloadedState: 'test',
+      })
+
+      expectTypeOf(store.getState().counter1).toBeNumber()
+
+      expectTypeOf(store.getState().counter2).toBeNumber()
+    })
+
+    test('nested combineReducers allows partial', () => {
+      const store = configureStore({
+        reducer: {
+          group1: combineReducers({
+            counter1: counterReducer1,
+            counter2: counterReducer2,
+          }),
+          group2: combineReducers({
+            counter1: counterReducer1,
+            counter2: counterReducer2,
+          }),
+        },
+        preloadedState: {
+          group1: {
+            counter1: 5,
+          },
+        },
+      })
+
+      expectTypeOf(store.getState().group1.counter1).toBeNumber()
+
+      expectTypeOf(store.getState().group1.counter2).toBeNumber()
+
+      expectTypeOf(store.getState().group2.counter1).toBeNumber()
+
+      expectTypeOf(store.getState().group2.counter2).toBeNumber()
+    })
+
+    test('non-nested combineReducers does not allow partial', () => {
+      interface GroupState {
+        counter1: number
+        counter2: number
+      }
+
+      const initialState = { counter1: 0, counter2: 0 }
+
+      const group1Reducer: Reducer<GroupState> = (state = initialState) => state
+      const group2Reducer: Reducer<GroupState> = (state = initialState) => state
+
+      const store = configureStore({
+        reducer: {
+          // @ts-expect-error
+          group1: group1Reducer,
+          group2: group2Reducer,
+        },
+        preloadedState: {
+          group1: {
+            counter1: 5,
+          },
+        },
+      })
+
+      expectTypeOf(store.getState().group1.counter1).toBeNumber()
+
+      expectTypeOf(store.getState().group1.counter2).toBeNumber()
+
+      expectTypeOf(store.getState().group2.counter1).toBeNumber()
+
+      expectTypeOf(store.getState().group2.counter2).toBeNumber()
+    })
+  })
+
+  test('Dispatch typings', () => {
+    type StateA = number
+    const reducerA = () => 0
+    const thunkA = () => {
+      return (() => {}) as any as ThunkAction<Promise<'A'>, StateA, any, any>
+    }
+
+    type StateB = string
+    const thunkB = () => {
+      return (dispatch: Dispatch, getState: () => StateB) => {}
+    }
+
+    test('by default, dispatching Thunks is possible', () => {
+      const store = configureStore({
+        reducer: reducerA,
+      })
+
+      store.dispatch(thunkA())
+      // @ts-expect-error
+      store.dispatch(thunkB())
+
+      const res = store.dispatch((dispatch, getState) => {
+        return 42
+      })
+
+      const action = store.dispatch({ type: 'foo' })
+    })
+
+    test('return type of thunks and actions is inferred correctly', () => {
+      const slice = createSlice({
+        name: 'counter',
+        initialState: {
+          value: 0,
+        },
+        reducers: {
+          incrementByAmount: (state, action: PayloadAction<number>) => {
+            state.value += action.payload
+          },
+        },
+      })
+
+      const store = configureStore({
+        reducer: {
+          counter: slice.reducer,
+        },
+      })
+
+      const action = slice.actions.incrementByAmount(2)
+
+      const dispatchResult = store.dispatch(action)
+
+      expectTypeOf(dispatchResult).toMatchTypeOf<{
+        type: string
+        payload: number
+      }>()
+
+      const promiseResult = store.dispatch(async (dispatch) => {
+        return 42
+      })
+
+      expectTypeOf(promiseResult).toEqualTypeOf<Promise<number>>()
+
+      const store2 = configureStore({
+        reducer: {
+          counter: slice.reducer,
+        },
+        middleware: (gDM) =>
+          gDM({
+            thunk: {
+              extraArgument: 42,
+            },
+          }),
+      })
+
+      const dispatchResult2 = store2.dispatch(action)
+
+      expectTypeOf(dispatchResult2).toMatchTypeOf<{
+        type: string
+        payload: number
+      }>()
+    })
+
+    test('removing the Thunk Middleware', () => {
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: () => new Tuple(),
+      })
+
+      expectTypeOf(store.dispatch).parameter(0).not.toMatchTypeOf(thunkA())
+
+      expectTypeOf(store.dispatch).parameter(0).not.toMatchTypeOf(thunkB())
+    })
+
+    test('adding the thunk middleware by hand', () => {
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: () => new Tuple(thunk as ThunkMiddleware<StateA>),
+      })
+
+      store.dispatch(thunkA())
+      // @ts-expect-error
+      store.dispatch(thunkB())
+    })
+
+    test('custom middleware', () => {
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: () =>
+          new Tuple(0 as unknown as Middleware<(a: StateA) => boolean, StateA>),
+      })
+
+      expectTypeOf(store.dispatch(5)).toBeBoolean()
+
+      expectTypeOf(store.dispatch(5)).not.toBeString()
+    })
+
+    test('multiple custom middleware', () => {
+      const middleware = [] as any as Tuple<
+        [
+          Middleware<(a: 'a') => 'A', StateA>,
+          Middleware<(b: 'b') => 'B', StateA>,
+          ThunkMiddleware<StateA>,
+        ]
+      >
+
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: () => middleware,
+      })
+
+      expectTypeOf(store.dispatch('a')).toEqualTypeOf<'A'>()
+
+      expectTypeOf(store.dispatch('b')).toEqualTypeOf<'B'>()
+
+      expectTypeOf(store.dispatch(thunkA())).toEqualTypeOf<Promise<'A'>>()
+    })
+
+    test('Accepts thunk with `unknown`, `undefined` or `null` ThunkAction extraArgument per default', () => {
+      const store = configureStore({ reducer: {} })
+      // undefined is the default value for the ThunkMiddleware extraArgument
+      store.dispatch(function () {} as ThunkAction<
+        void,
+        {},
+        undefined,
+        UnknownAction
+      >)
+      // `null` for the `extra` generic was previously documented in the RTK "Advanced Tutorial", but
+      // is a bad pattern and users should use `unknown` instead
+      // @ts-expect-error
+      store.dispatch(function () {} as ThunkAction<
+        void,
+        {},
+        null,
+        UnknownAction
+      >)
+      // unknown is the best way to type a ThunkAction if you do not care
+      // about the value of the extraArgument, as it will always work with every
+      // ThunkMiddleware, no matter the actual extraArgument type
+      store.dispatch(function () {} as ThunkAction<
+        void,
+        {},
+        unknown,
+        UnknownAction
+      >)
+      // @ts-expect-error
+      store.dispatch(function () {} as ThunkAction<
+        void,
+        {},
+        boolean,
+        UnknownAction
+      >)
+    })
+
+    test('custom middleware and getDefaultMiddleware', () => {
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: (gDM) =>
+          gDM().prepend((() => {}) as any as Middleware<
+            (a: 'a') => 'A',
+            StateA
+          >),
+      })
+
+      expectTypeOf(store.dispatch('a')).toEqualTypeOf<'A'>()
+
+      expectTypeOf(store.dispatch(thunkA())).toEqualTypeOf<Promise<'A'>>()
+
+      expectTypeOf(store.dispatch).parameter(0).not.toMatchTypeOf(thunkB())
+    })
+
+    test('custom middleware and getDefaultMiddleware, using prepend', () => {
+      const otherMiddleware: Middleware<(a: 'a') => 'A', StateA> =
+        _anyMiddleware
+
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: (gDM) => {
+          const concatenated = gDM().prepend(otherMiddleware)
+
+          expectTypeOf(concatenated).toMatchTypeOf<
+            ReadonlyArray<
+              typeof otherMiddleware | ThunkMiddleware | Middleware<{}>
+            >
+          >()
+
+          return concatenated
+        },
+      })
+
+      expectTypeOf(store.dispatch('a')).toEqualTypeOf<'A'>()
+
+      expectTypeOf(store.dispatch(thunkA())).toEqualTypeOf<Promise<'A'>>()
+
+      expectTypeOf(store.dispatch).parameter(0).not.toMatchTypeOf(thunkB())
+    })
+
+    test('custom middleware and getDefaultMiddleware, using concat', () => {
+      const otherMiddleware: Middleware<(a: 'a') => 'A', StateA> =
+        _anyMiddleware
+
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: (gDM) => {
+          const concatenated = gDM().concat(otherMiddleware)
+
+          expectTypeOf(concatenated).toMatchTypeOf<
+            ReadonlyArray<
+              typeof otherMiddleware | ThunkMiddleware | Middleware<{}>
+            >
+          >()
+
+          return concatenated
+        },
+      })
+
+      expectTypeOf(store.dispatch('a')).toEqualTypeOf<'A'>()
+
+      expectTypeOf(store.dispatch(thunkA())).toEqualTypeOf<Promise<'A'>>()
+
+      expectTypeOf(store.dispatch).parameter(0).not.toMatchTypeOf(thunkB())
+    })
+
+    test('middlewareBuilder notation, getDefaultMiddleware (unconfigured)', () => {
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: (getDefaultMiddleware) =>
+          getDefaultMiddleware().prepend((() => {}) as any as Middleware<
+            (a: 'a') => 'A',
+            StateA
+          >),
+      })
+
+      expectTypeOf(store.dispatch('a')).toEqualTypeOf<'A'>()
+
+      expectTypeOf(store.dispatch(thunkA())).toEqualTypeOf<Promise<'A'>>()
+
+      expectTypeOf(store.dispatch).parameter(0).not.toMatchTypeOf(thunkB())
+    })
+
+    test('middlewareBuilder notation, getDefaultMiddleware, concat & prepend', () => {
+      const otherMiddleware: Middleware<(a: 'a') => 'A', StateA> =
+        _anyMiddleware
+
+      const otherMiddleware2: Middleware<(a: 'b') => 'B', StateA> =
+        _anyMiddleware
+
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: (getDefaultMiddleware) =>
+          getDefaultMiddleware()
+            .concat(otherMiddleware)
+            .prepend(otherMiddleware2),
+      })
+
+      expectTypeOf(store.dispatch('a')).toEqualTypeOf<'A'>()
+
+      expectTypeOf(store.dispatch(thunkA())).toEqualTypeOf<Promise<'A'>>()
+
+      expectTypeOf(store.dispatch('b')).toEqualTypeOf<'B'>()
+
+      expectTypeOf(store.dispatch).parameter(0).not.toMatchTypeOf(thunkB())
+    })
+
+    test('middlewareBuilder notation, getDefaultMiddleware (thunk: false)', () => {
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: (getDefaultMiddleware) =>
+          getDefaultMiddleware({ thunk: false }).prepend(
+            (() => {}) as any as Middleware<(a: 'a') => 'A', StateA>,
+          ),
+      })
+
+      expectTypeOf(store.dispatch('a')).toEqualTypeOf<'A'>()
+
+      expectTypeOf(store.dispatch).parameter(0).not.toMatchTypeOf(thunkA())
+    })
+
+    test("badly typed middleware won't make `dispatch` `any`", () => {
+      const store = configureStore({
+        reducer: reducerA,
+        middleware: (getDefaultMiddleware) =>
+          getDefaultMiddleware().concat(_anyMiddleware as Middleware<any>),
+      })
+
+      expectTypeOf(store.dispatch).not.toBeAny()
+    })
+
+    test("decorated `configureStore` won't make `dispatch` `never`", () => {
+      const someSlice = createSlice({
+        name: 'something',
+        initialState: null as any,
+        reducers: {
+          set(state) {
+            return state
+          },
+        },
+      })
+
+      function configureMyStore<S>(
+        options: Omit<ConfigureStoreOptions<S>, 'reducer'>,
+      ) {
+        return configureStore({
+          ...options,
+          reducer: someSlice.reducer,
+        })
+      }
+
+      const store = configureMyStore({})
+
+      expectTypeOf(store.dispatch).toBeFunction()
+    })
+
+    interface CounterState {
+      value: number
+    }
+
+    const counterSlice = createSlice({
+      name: 'counter',
+      initialState: { value: 0 } as CounterState,
+      reducers: {
+        increment(state) {
+          state.value += 1
+        },
+        decrement(state) {
+          state.value -= 1
+        },
+        // Use the PayloadAction type to declare the contents of `action.payload`
+        incrementByAmount: (state, action: PayloadAction<number>) => {
+          state.value += action.payload
+        },
+      },
+    })
+
+    type Unsubscribe = () => void
+
+    // A fake middleware that tells TS that an unsubscribe callback is being returned for a given action
+    // This is the same signature that the "listener" middleware uses
+    const dummyMiddleware: Middleware<
+      {
+        (action: Action<'actionListenerMiddleware/add'>): Unsubscribe
+      },
+      CounterState
+    > = (storeApi) => (next) => (action) => {}
+
+    const store = configureStore({
+      reducer: counterSlice.reducer,
+      middleware: (gDM) => gDM().prepend(dummyMiddleware),
+    })
+
+    // Order matters here! We need the listener type to come first, otherwise
+    // the thunk middleware type kicks in and TS thinks a plain action is being returned
+    expectTypeOf(store.dispatch).toEqualTypeOf<
+      ((action: Action<'actionListenerMiddleware/add'>) => Unsubscribe) &
+        ThunkDispatch<CounterState, undefined, UnknownAction> &
+        Dispatch<UnknownAction>
+    >()
+
+    const unsubscribe = store.dispatch({
+      type: 'actionListenerMiddleware/add',
+    } as const)
+
+    expectTypeOf(unsubscribe).toEqualTypeOf<Unsubscribe>()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/configureStore.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/configureStore.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/configureStore.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,371 @@
+import * as DevTools from '@internal/devtoolsExtension'
+import type { Middleware, StoreEnhancer } from '@reduxjs/toolkit'
+import { Tuple } from '@reduxjs/toolkit'
+import type * as Redux from 'redux'
+import { vi } from 'vitest'
+
+vi.doMock('redux', async (importOriginal) => {
+  const redux = await importOriginal<typeof import('redux')>()
+
+  vi.spyOn(redux, 'applyMiddleware')
+  vi.spyOn(redux, 'combineReducers')
+  vi.spyOn(redux, 'compose')
+  vi.spyOn(redux, 'createStore')
+
+  return redux
+})
+
+describe('configureStore', async () => {
+  const composeWithDevToolsSpy = vi.spyOn(DevTools, 'composeWithDevTools')
+
+  const redux = await import('redux')
+
+  const { configureStore } = await import('@reduxjs/toolkit')
+
+  const reducer: Redux.Reducer = (state = {}, _action) => state
+
+  beforeEach(() => {
+    vi.clearAllMocks()
+  })
+
+  describe('given a function reducer', () => {
+    it('calls createStore with the reducer', () => {
+      configureStore({ reducer })
+      expect(configureStore({ reducer })).toBeInstanceOf(Object)
+
+      expect(redux.createStore).toHaveBeenCalledWith(
+        reducer,
+        undefined,
+        expect.any(Function),
+      )
+      expect(redux.applyMiddleware).toHaveBeenCalled()
+      if (process.env.TEST_DIST) {
+        expect(composeWithDevToolsSpy).not.toHaveBeenCalled()
+      } else {
+        expect(composeWithDevToolsSpy).toHaveBeenCalledTimes(2)
+      }
+    })
+  })
+
+  describe('given an object of reducers', () => {
+    it('calls createStore with the combined reducers', () => {
+      const reducer = {
+        reducer() {
+          return true
+        },
+      }
+      expect(configureStore({ reducer })).toBeInstanceOf(Object)
+      expect(redux.combineReducers).toHaveBeenCalledWith(reducer)
+      expect(redux.applyMiddleware).toHaveBeenCalled()
+      if (process.env.TEST_DIST) {
+        expect(composeWithDevToolsSpy).not.toHaveBeenCalled()
+      } else {
+        expect(composeWithDevToolsSpy).toHaveBeenCalledOnce()
+      }
+      expect(redux.createStore).toHaveBeenCalledWith(
+        expect.any(Function),
+        undefined,
+        expect.any(Function),
+      )
+    })
+  })
+
+  describe('given no reducer', () => {
+    it('throws', () => {
+      expect(configureStore).toThrow(
+        '`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers',
+      )
+    })
+  })
+
+  describe('given no middleware', () => {
+    it('calls createStore without any middleware', () => {
+      expect(
+        configureStore({ middleware: () => new Tuple(), reducer }),
+      ).toBeInstanceOf(Object)
+      expect(redux.applyMiddleware).toHaveBeenCalledWith()
+      if (process.env.TEST_DIST) {
+        expect(composeWithDevToolsSpy).not.toHaveBeenCalled()
+      } else {
+        expect(composeWithDevToolsSpy).toHaveBeenCalledOnce()
+      }
+      expect(redux.createStore).toHaveBeenCalledWith(
+        reducer,
+        undefined,
+        expect.any(Function),
+      )
+    })
+  })
+
+  describe('given an array of middleware', () => {
+    it('throws an error requiring a callback', () => {
+      // @ts-expect-error
+      expect(() => configureStore({ middleware: [], reducer })).toThrow(
+        '`middleware` field must be a callback',
+      )
+    })
+  })
+
+  describe('given undefined middleware', () => {
+    it('calls createStore with default middleware', () => {
+      expect(configureStore({ middleware: undefined, reducer })).toBeInstanceOf(
+        Object,
+      )
+      expect(redux.applyMiddleware).toHaveBeenCalledWith(
+        expect.any(Function), // immutableCheck
+        expect.any(Function), // thunk
+        expect.any(Function), // serializableCheck
+        expect.any(Function), // actionCreatorCheck
+      )
+      if (process.env.TEST_DIST) {
+        expect(composeWithDevToolsSpy).not.toHaveBeenCalled()
+      } else {
+        expect(composeWithDevToolsSpy).toHaveBeenCalledOnce()
+      }
+      expect(redux.createStore).toHaveBeenCalledWith(
+        reducer,
+        undefined,
+        expect.any(Function),
+      )
+    })
+  })
+
+  describe('given any middleware', () => {
+    const exampleMiddleware: Middleware<any, any> = () => (next) => (action) =>
+      next(action)
+    it('throws an error by default if there are duplicate middleware', () => {
+      const makeStore = () => {
+        return configureStore({
+          reducer,
+          middleware: (gDM) =>
+            gDM().concat(exampleMiddleware, exampleMiddleware),
+        })
+      }
+
+      expect(makeStore).toThrowError(
+        'Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.',
+      )
+    })
+
+    it('does not throw a duplicate middleware error if duplicateMiddlewareCheck is disabled', () => {
+      const makeStore = () => {
+        return configureStore({
+          reducer,
+          middleware: (gDM) =>
+            gDM().concat(exampleMiddleware, exampleMiddleware),
+          duplicateMiddlewareCheck: false,
+        })
+      }
+
+      expect(makeStore).not.toThrowError()
+    })
+  })
+
+  describe('given a middleware creation function that returns undefined', () => {
+    it('throws an error', () => {
+      const invalidBuilder = vi.fn((getDefaultMiddleware) => undefined as any)
+      expect(() =>
+        configureStore({ middleware: invalidBuilder, reducer }),
+      ).toThrow(
+        'when using a middleware builder function, an array of middleware must be returned',
+      )
+    })
+  })
+
+  describe('given a middleware creation function that returns an array with non-functions', () => {
+    it('throws an error', () => {
+      const invalidBuilder = vi.fn((getDefaultMiddleware) => [true] as any)
+      expect(() =>
+        configureStore({ middleware: invalidBuilder, reducer }),
+      ).toThrow('each middleware provided to configureStore must be a function')
+    })
+  })
+
+  describe('given custom middleware', () => {
+    it('calls createStore with custom middleware and without default middleware', () => {
+      const thank: Redux.Middleware = (_store) => (next) => (action) =>
+        next(action)
+      expect(
+        configureStore({ middleware: () => new Tuple(thank), reducer }),
+      ).toBeInstanceOf(Object)
+      expect(redux.applyMiddleware).toHaveBeenCalledWith(thank)
+      if (process.env.TEST_DIST) {
+        expect(composeWithDevToolsSpy).not.toHaveBeenCalled()
+      } else {
+        expect(composeWithDevToolsSpy).toHaveBeenCalledOnce()
+      }
+      expect(redux.createStore).toHaveBeenCalledWith(
+        reducer,
+        undefined,
+        expect.any(Function),
+      )
+    })
+  })
+
+  describe('middleware builder notation', () => {
+    it('calls builder, passes getDefaultMiddleware and uses returned middlewares', () => {
+      const thank = vi.fn(
+        ((_store) => (next) => (action) => 'foobar') as Redux.Middleware,
+      )
+
+      const builder = vi.fn((getDefaultMiddleware) => {
+        expect(getDefaultMiddleware).toEqual(expect.any(Function))
+        expect(getDefaultMiddleware()).toEqual(expect.any(Array))
+
+        return new Tuple(thank)
+      })
+
+      const store = configureStore({ middleware: builder, reducer })
+
+      expect(builder).toHaveBeenCalled()
+
+      expect(store.dispatch({ type: 'test' })).toBe('foobar')
+    })
+  })
+
+  describe('with devTools disabled', () => {
+    it('calls createStore without devTools enhancer', () => {
+      expect(configureStore({ devTools: false, reducer })).toBeInstanceOf(
+        Object,
+      )
+      expect(redux.applyMiddleware).toHaveBeenCalled()
+      expect(redux.compose).toHaveBeenCalled()
+      expect(redux.createStore).toHaveBeenCalledWith(
+        reducer,
+        undefined,
+        expect.any(Function),
+      )
+    })
+  })
+
+  describe('with devTools options', () => {
+    it('calls createStore with devTools enhancer and option', () => {
+      const options = {
+        name: 'myApp',
+        trace: true,
+      }
+      expect(configureStore({ devTools: options, reducer })).toBeInstanceOf(
+        Object,
+      )
+      expect(redux.applyMiddleware).toHaveBeenCalled()
+      if (process.env.TEST_DIST) {
+        expect(composeWithDevToolsSpy).not.toHaveBeenCalled()
+      } else {
+        expect(composeWithDevToolsSpy).toHaveBeenCalledOnce()
+
+        expect(composeWithDevToolsSpy).toHaveBeenLastCalledWith(options)
+      }
+      expect(redux.createStore).toHaveBeenCalledWith(
+        reducer,
+        undefined,
+        expect.any(Function),
+      )
+    })
+  })
+
+  describe('given preloadedState', () => {
+    it('calls createStore with preloadedState', () => {
+      expect(configureStore({ reducer })).toBeInstanceOf(Object)
+      expect(redux.applyMiddleware).toHaveBeenCalled()
+      if (process.env.TEST_DIST) {
+        expect(composeWithDevToolsSpy).not.toHaveBeenCalled()
+      } else {
+        expect(composeWithDevToolsSpy).toHaveBeenCalledOnce()
+      }
+      expect(redux.createStore).toHaveBeenCalledWith(
+        reducer,
+        undefined,
+        expect.any(Function),
+      )
+    })
+  })
+
+  describe('given enhancers', () => {
+    let dummyEnhancerCalled = false
+
+    const dummyEnhancer: StoreEnhancer =
+      (createStore) => (reducer, preloadedState) => {
+        dummyEnhancerCalled = true
+
+        return createStore(reducer, preloadedState)
+      }
+
+    beforeEach(() => {
+      dummyEnhancerCalled = false
+    })
+
+    it('calls createStore with enhancers', () => {
+      expect(
+        configureStore({
+          enhancers: (gDE) => gDE().concat(dummyEnhancer),
+          reducer,
+        }),
+      ).toBeInstanceOf(Object)
+      expect(redux.applyMiddleware).toHaveBeenCalled()
+      if (process.env.TEST_DIST) {
+        expect(composeWithDevToolsSpy).not.toHaveBeenCalled()
+      } else {
+        expect(composeWithDevToolsSpy).toHaveBeenCalledOnce()
+      }
+      expect(redux.createStore).toHaveBeenCalledWith(
+        reducer,
+        undefined,
+        expect.any(Function),
+      )
+
+      expect(dummyEnhancerCalled).toBe(true)
+    })
+
+    describe('invalid arguments', () => {
+      test('enhancers is not a callback', () => {
+        expect(() => configureStore({ reducer, enhancers: [] as any })).toThrow(
+          '`enhancers` field must be a callback',
+        )
+      })
+
+      test('callback fails to return array', () => {
+        expect(() =>
+          configureStore({ reducer, enhancers: (() => {}) as any }),
+        ).toThrow('`enhancers` callback must return an array')
+      })
+
+      test('array contains non-function', () => {
+        expect(() =>
+          configureStore({ reducer, enhancers: (() => ['']) as any }),
+        ).toThrow('each enhancer provided to configureStore must be a function')
+      })
+    })
+
+    const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
+    beforeEach(() => {
+      consoleSpy.mockClear()
+    })
+    afterAll(() => {
+      consoleSpy.mockRestore()
+    })
+
+    it('warns if middleware enhancer is excluded from final array when middlewares are provided', () => {
+      const store = configureStore({
+        reducer,
+        enhancers: () => new Tuple(dummyEnhancer),
+      })
+
+      expect(dummyEnhancerCalled).toBe(true)
+
+      expect(consoleSpy).toHaveBeenCalledWith(
+        'middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`',
+      )
+    })
+    it("doesn't warn when middleware enhancer is excluded if no middlewares provided", () => {
+      const store = configureStore({
+        reducer,
+        middleware: () => new Tuple(),
+        enhancers: () => new Tuple(dummyEnhancer),
+      })
+
+      expect(dummyEnhancerCalled).toBe(true)
+
+      expect(consoleSpy).not.toHaveBeenCalled()
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createAction.test-d.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createAction.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createAction.test-d.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,326 @@
+import type {
+  Action,
+  ActionCreator,
+  ActionCreatorWithNonInferrablePayload,
+  ActionCreatorWithOptionalPayload,
+  ActionCreatorWithPayload,
+  ActionCreatorWithPreparedPayload,
+  ActionCreatorWithoutPayload,
+  PayloadAction,
+  PayloadActionCreator,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import { createAction } from '@reduxjs/toolkit'
+
+describe('type tests', () => {
+  describe('PayloadAction', () => {
+    test('PayloadAction has type parameter for the payload.', () => {
+      const action: PayloadAction<number> = { type: '', payload: 5 }
+
+      expectTypeOf(action.payload).toBeNumber()
+
+      expectTypeOf(action.payload).not.toBeString()
+    })
+
+    test('PayloadAction type parameter is required.', () => {
+      expectTypeOf({ type: '', payload: 5 }).not.toMatchTypeOf<PayloadAction>()
+    })
+
+    test('PayloadAction has a string type tag.', () => {
+      expectTypeOf({ type: '', payload: 5 }).toEqualTypeOf<
+        PayloadAction<number>
+      >()
+
+      expectTypeOf({ type: 1, payload: 5 }).not.toMatchTypeOf<PayloadAction>()
+    })
+
+    test('PayloadAction is compatible with Action<string>', () => {
+      const action: PayloadAction<number> = { type: '', payload: 5 }
+
+      expectTypeOf(action).toMatchTypeOf<Action<string>>()
+    })
+  })
+
+  describe('PayloadActionCreator', () => {
+    test('PayloadActionCreator returns correctly typed PayloadAction depending on whether a payload is passed.', () => {
+      const actionCreator = Object.assign(
+        (payload?: number) => ({
+          type: 'action',
+          payload,
+        }),
+        { type: 'action' },
+      ) as PayloadActionCreator<number | undefined>
+
+      expectTypeOf(actionCreator(1)).toEqualTypeOf<
+        PayloadAction<number | undefined>
+      >()
+
+      expectTypeOf(actionCreator()).toEqualTypeOf<
+        PayloadAction<number | undefined>
+      >()
+
+      expectTypeOf(actionCreator(undefined)).toEqualTypeOf<
+        PayloadAction<number | undefined>
+      >()
+
+      expectTypeOf(actionCreator()).not.toMatchTypeOf<PayloadAction<number>>()
+
+      expectTypeOf(actionCreator(1)).not.toMatchTypeOf<
+        PayloadAction<undefined>
+      >()
+    })
+
+    test('PayloadActionCreator is compatible with ActionCreator.', () => {
+      const payloadActionCreator = Object.assign(
+        (payload?: number) => ({
+          type: 'action',
+          payload,
+        }),
+        { type: 'action' },
+      ) as PayloadActionCreator
+
+      expectTypeOf(payloadActionCreator).toMatchTypeOf<
+        ActionCreator<UnknownAction>
+      >()
+
+      const payloadActionCreator2 = Object.assign(
+        (payload?: number) => ({
+          type: 'action',
+          payload: payload || 1,
+        }),
+        { type: 'action' },
+      ) as PayloadActionCreator<number>
+
+      expectTypeOf(payloadActionCreator2).toMatchTypeOf<
+        ActionCreator<PayloadAction<number>>
+      >()
+    })
+  })
+
+  test('createAction() has type parameter for the action payload.', () => {
+    const increment = createAction<number, 'increment'>('increment')
+
+    expectTypeOf(increment).parameter(0).toBeNumber()
+
+    expectTypeOf(increment).parameter(0).not.toBeString()
+  })
+
+  test('createAction() type parameter is required, not inferred (defaults to `void`).', () => {
+    const increment = createAction('increment')
+
+    expectTypeOf(increment).parameter(0).not.toBeNumber()
+
+    expectTypeOf(increment().payload).not.toBeNumber()
+  })
+
+  test('createAction().type is a string literal.', () => {
+    const increment = createAction<number, 'increment'>('increment')
+
+    expectTypeOf(increment(1).type).toBeString()
+
+    expectTypeOf(increment(1).type).toEqualTypeOf<'increment'>()
+
+    expectTypeOf(increment(1).type).not.toMatchTypeOf<'other'>()
+
+    expectTypeOf(increment(1).type).not.toBeNumber()
+  })
+
+  test('type still present when using prepareAction', () => {
+    const strLenAction = createAction('strLen', (payload: string) => ({
+      payload: payload.length,
+    }))
+
+    expectTypeOf(strLenAction('test').type).toBeString()
+  })
+
+  test('changing payload type with prepareAction', () => {
+    const strLenAction = createAction('strLen', (payload: string) => ({
+      payload: payload.length,
+    }))
+
+    expectTypeOf(strLenAction('test').payload).toBeNumber()
+
+    expectTypeOf(strLenAction('test').payload).not.toBeString()
+
+    expectTypeOf(strLenAction('test')).not.toHaveProperty('error')
+  })
+
+  test('adding metadata with prepareAction', () => {
+    const strLenMetaAction = createAction('strLenMeta', (payload: string) => ({
+      payload,
+      meta: payload.length,
+    }))
+
+    expectTypeOf(strLenMetaAction('test').meta).toBeNumber()
+
+    expectTypeOf(strLenMetaAction('test').meta).not.toBeString()
+
+    expectTypeOf(strLenMetaAction('test')).not.toHaveProperty('error')
+  })
+
+  test('adding boolean error with prepareAction', () => {
+    const boolErrorAction = createAction('boolError', (payload: string) => ({
+      payload,
+      error: true,
+    }))
+
+    expectTypeOf(boolErrorAction('test').error).toBeBoolean()
+
+    expectTypeOf(boolErrorAction('test').error).not.toBeString()
+  })
+
+  test('adding string error with prepareAction', () => {
+    const strErrorAction = createAction('strError', (payload: string) => ({
+      payload,
+      error: 'this is an error',
+    }))
+
+    expectTypeOf(strErrorAction('test').error).toBeString()
+
+    expectTypeOf(strErrorAction('test').error).not.toBeBoolean()
+  })
+
+  test('regression test for https://github.com/reduxjs/redux-toolkit/issues/214', () => {
+    const action = createAction<{ input?: string }>('ACTION')
+
+    expectTypeOf(action({ input: '' }).payload.input).toEqualTypeOf<
+      string | undefined
+    >()
+
+    expectTypeOf(action({ input: '' }).payload.input).not.toBeNumber()
+
+    expectTypeOf(action).parameter(0).not.toMatchTypeOf({ input: 3 })
+  })
+
+  test('regression test for https://github.com/reduxjs/redux-toolkit/issues/224', () => {
+    const oops = createAction('oops', (x: any) => ({
+      payload: x,
+      error: x,
+      meta: x,
+    }))
+
+    expectTypeOf(oops('').payload).toBeAny()
+
+    expectTypeOf(oops('').error).toBeAny()
+
+    expectTypeOf(oops('').meta).toBeAny()
+  })
+
+  describe('createAction.match()', () => {
+    test('simple use case', () => {
+      const actionCreator = createAction<string, 'test'>('test')
+
+      const x: Action<string> = {} as any
+
+      if (actionCreator.match(x)) {
+        expectTypeOf(x.type).toEqualTypeOf<'test'>()
+
+        expectTypeOf(x.payload).toBeString()
+      } else {
+        expectTypeOf(x.type).not.toMatchTypeOf<'test'>()
+
+        expectTypeOf(x).not.toHaveProperty('payload')
+      }
+    })
+
+    test('special case: optional argument', () => {
+      const actionCreator = createAction<string | undefined, 'test'>('test')
+
+      const x: Action<string> = {} as any
+
+      if (actionCreator.match(x)) {
+        expectTypeOf(x.type).toEqualTypeOf<'test'>()
+
+        expectTypeOf(x.payload).toEqualTypeOf<string | undefined>()
+      }
+    })
+
+    test('special case: without argument', () => {
+      const actionCreator = createAction('test')
+
+      const x: Action<string> = {} as any
+
+      if (actionCreator.match(x)) {
+        expectTypeOf(x.type).toEqualTypeOf<'test'>()
+
+        expectTypeOf(x.payload).not.toMatchTypeOf<{}>()
+      }
+    })
+
+    test('special case: with prepareAction', () => {
+      const actionCreator = createAction('test', () => ({
+        payload: '',
+        meta: '',
+        error: false,
+      }))
+
+      const x: Action<string> = {} as any
+
+      if (actionCreator.match(x)) {
+        expectTypeOf(x.type).toEqualTypeOf<'test'>()
+
+        expectTypeOf(x.payload).toBeString()
+
+        expectTypeOf(x.meta).toBeString()
+
+        expectTypeOf(x.error).toBeBoolean()
+
+        expectTypeOf(x.payload).not.toBeNumber()
+
+        expectTypeOf(x.meta).not.toBeNumber()
+
+        expectTypeOf(x.error).not.toBeNumber()
+      }
+    })
+    test('potential use: as array filter', () => {
+      const actionCreator = createAction<string, 'test'>('test')
+
+      const x: Action<string>[] = []
+
+      expectTypeOf(x.filter(actionCreator.match)).toEqualTypeOf<
+        PayloadAction<string, 'test'>[]
+      >()
+    })
+  })
+
+  test('ActionCreatorWithOptionalPayload', () => {
+    expectTypeOf(createAction<string | undefined>('')).toEqualTypeOf<
+      ActionCreatorWithOptionalPayload<string | undefined>
+    >()
+
+    expectTypeOf(
+      createAction<void>(''),
+    ).toEqualTypeOf<ActionCreatorWithoutPayload>()
+
+    assertType<ActionCreatorWithNonInferrablePayload>(createAction(''))
+
+    expectTypeOf(createAction<string>('')).toEqualTypeOf<
+      ActionCreatorWithPayload<string>
+    >()
+
+    expectTypeOf(
+      createAction('', (_: 0) => ({
+        payload: 1 as 1,
+        error: 2 as 2,
+        meta: 3 as 3,
+      })),
+    ).toEqualTypeOf<ActionCreatorWithPreparedPayload<[0], 1, '', 2, 3>>()
+
+    const anyCreator = createAction<any>('')
+
+    expectTypeOf(anyCreator).toEqualTypeOf<ActionCreatorWithPayload<any>>()
+
+    expectTypeOf(anyCreator({}).payload).toBeAny()
+  })
+
+  test("Verify action creators should not be passed directly as arguments to React event handlers if there shouldn't be a payload", () => {
+    const emptyAction = createAction<void>('empty/action')
+
+    function TestComponent() {
+      // This typically leads to an error like:
+      //  // A non-serializable value was detected in an action, in the path: `payload`.
+      // @ts-expect-error Should error because `void` and `MouseEvent` aren't compatible
+      return <button onClick={emptyAction}>+</button>
+    }
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createAction.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createAction.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createAction.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,148 @@
+import { createAction, isActionCreator } from '@reduxjs/toolkit'
+
+describe('createAction', () => {
+  it('should create an action', () => {
+    const actionCreator = createAction<string>('A_TYPE')
+    expect(actionCreator('something')).toEqual({
+      type: 'A_TYPE',
+      payload: 'something',
+    })
+  })
+
+  describe('when stringifying action', () => {
+    it('should return the action type', () => {
+      const actionCreator = createAction('A_TYPE')
+      expect(`${actionCreator}`).toEqual('A_TYPE')
+    })
+  })
+
+  describe('when passing a prepareAction method only returning a payload', () => {
+    it('should use the payload returned from the prepareAction method', () => {
+      const actionCreator = createAction('A_TYPE', (a: number) => ({
+        payload: a * 2,
+      }))
+      expect(actionCreator(5).payload).toBe(10)
+    })
+    it('should not have a meta attribute on the resulting Action', () => {
+      const actionCreator = createAction('A_TYPE', (a: number) => ({
+        payload: a * 2,
+      }))
+      expect('meta' in actionCreator(5)).toBeFalsy()
+    })
+  })
+
+  describe('when passing a prepareAction method returning a payload and meta', () => {
+    it('should use the payload returned from the prepareAction method', () => {
+      const actionCreator = createAction('A_TYPE', (a: number) => ({
+        payload: a * 2,
+        meta: a / 2,
+      }))
+      expect(actionCreator(5).payload).toBe(10)
+    })
+    it('should use the meta returned from the prepareAction method', () => {
+      const actionCreator = createAction('A_TYPE', (a: number) => ({
+        payload: a * 2,
+        meta: a / 2,
+      }))
+      expect(actionCreator(10).meta).toBe(5)
+    })
+  })
+
+  describe('when passing a prepareAction method returning a payload and error', () => {
+    it('should use the payload returned from the prepareAction method', () => {
+      const actionCreator = createAction('A_TYPE', (a: number) => ({
+        payload: a * 2,
+        error: true,
+      }))
+      expect(actionCreator(5).payload).toBe(10)
+    })
+    it('should use the error returned from the prepareAction method', () => {
+      const actionCreator = createAction('A_TYPE', (a: number) => ({
+        payload: a * 2,
+        error: true,
+      }))
+      expect(actionCreator(10).error).toBe(true)
+    })
+  })
+
+  describe('when passing a prepareAction method returning a payload, meta and error', () => {
+    it('should use the payload returned from the prepareAction method', () => {
+      const actionCreator = createAction('A_TYPE', (a: number) => ({
+        payload: a * 2,
+        meta: a / 2,
+        error: true,
+      }))
+      expect(actionCreator(5).payload).toBe(10)
+    })
+    it('should use the error returned from the prepareAction method', () => {
+      const actionCreator = createAction('A_TYPE', (a: number) => ({
+        payload: a * 2,
+        meta: a / 2,
+        error: true,
+      }))
+      expect(actionCreator(10).error).toBe(true)
+    })
+    it('should use the meta returned from the prepareAction method', () => {
+      const actionCreator = createAction('A_TYPE', (a: number) => ({
+        payload: a * 2,
+        meta: a / 2,
+        error: true,
+      }))
+      expect(actionCreator(10).meta).toBe(5)
+    })
+  })
+
+  describe('when passing a prepareAction that accepts multiple arguments', () => {
+    it('should pass all arguments of the resulting actionCreator to prepareAction', () => {
+      const actionCreator = createAction(
+        'A_TYPE',
+        (a: string, b: string, c: string) => ({
+          payload: a + b + c,
+        }),
+      )
+      expect(actionCreator('1', '2', '3').payload).toBe('123')
+    })
+  })
+
+  describe('actionCreator.match', () => {
+    test('should return true for actions generated by own actionCreator', () => {
+      const actionCreator = createAction('test')
+      expect(actionCreator.match(actionCreator())).toBe(true)
+    })
+
+    test('should return true for matching actions', () => {
+      const actionCreator = createAction('test')
+      expect(actionCreator.match({ type: 'test' })).toBe(true)
+    })
+
+    test('should return false for other actions', () => {
+      const actionCreator = createAction('test')
+      expect(actionCreator.match({ type: 'test-abc' })).toBe(false)
+    })
+  })
+})
+
+const actionCreator = createAction('anAction')
+
+class Action {
+  type = 'totally an action'
+}
+
+describe('isActionCreator', () => {
+  it('should only return true for action creators', () => {
+    expect(isActionCreator(actionCreator)).toBe(true)
+    const notActionCreators = [
+      { type: 'an action' },
+      { type: 'more props', extra: true },
+      actionCreator(),
+      Promise.resolve({ type: 'an action' }),
+      new Action(),
+      false,
+      'a string',
+      false,
+    ]
+    for (const notActionCreator of notActionCreators) {
+      expect(isActionCreator(notActionCreator)).toBe(false)
+    }
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createAsyncThunk.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createAsyncThunk.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createAsyncThunk.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,899 @@
+import type {
+  AsyncThunk,
+  SerializedError,
+  ThunkDispatch,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import {
+  configureStore,
+  createAsyncThunk,
+  createReducer,
+  createSlice,
+  unwrapResult,
+} from '@reduxjs/toolkit'
+
+import type { TSVersion } from '@phryneas/ts-version'
+import type { AxiosError } from 'axios'
+import apiRequest from 'axios'
+import type { AsyncThunkDispatchConfig } from '@internal/createAsyncThunk'
+
+const defaultDispatch = (() => {}) as ThunkDispatch<{}, any, UnknownAction>
+const unknownAction = { type: 'foo' } as UnknownAction
+
+describe('type tests', () => {
+  test('basic usage', async () => {
+    const asyncThunk = createAsyncThunk('test', (id: number) =>
+      Promise.resolve(id * 2),
+    )
+
+    const reducer = createReducer({}, (builder) =>
+      builder
+        .addCase(asyncThunk.pending, (_, action) => {
+          expectTypeOf(action).toEqualTypeOf<
+            ReturnType<(typeof asyncThunk)['pending']>
+          >()
+        })
+
+        .addCase(asyncThunk.fulfilled, (_, action) => {
+          expectTypeOf(action).toEqualTypeOf<
+            ReturnType<(typeof asyncThunk)['fulfilled']>
+          >()
+
+          expectTypeOf(action.payload).toBeNumber()
+        })
+
+        .addCase(asyncThunk.rejected, (_, action) => {
+          expectTypeOf(action).toEqualTypeOf<
+            ReturnType<(typeof asyncThunk)['rejected']>
+          >()
+
+          expectTypeOf(action.error).toMatchTypeOf<Partial<Error> | undefined>()
+        }),
+    )
+
+    const promise = defaultDispatch(asyncThunk(3))
+
+    expectTypeOf(promise.requestId).toBeString()
+
+    expectTypeOf(promise.arg).toBeNumber()
+
+    expectTypeOf(promise.abort).toEqualTypeOf<(reason?: string) => void>()
+
+    const result = await promise
+
+    if (asyncThunk.fulfilled.match(result)) {
+      expectTypeOf(result).toEqualTypeOf<
+        ReturnType<(typeof asyncThunk)['fulfilled']>
+      >()
+    } else {
+      expectTypeOf(result).toEqualTypeOf<
+        ReturnType<(typeof asyncThunk)['rejected']>
+      >()
+    }
+
+    promise
+      .then(unwrapResult)
+      .then((result) => {
+        expectTypeOf(result).toBeNumber()
+
+        expectTypeOf(result).not.toMatchTypeOf<Error>()
+      })
+      .catch((error) => {
+        // catch is always any-typed, nothing we can do here
+        expectTypeOf(error).toBeAny()
+      })
+  })
+
+  test('More complex usage of thunk args', () => {
+    interface BookModel {
+      id: string
+      title: string
+    }
+
+    type BooksState = BookModel[]
+
+    const fakeBooks: BookModel[] = [
+      { id: 'b', title: 'Second' },
+      { id: 'a', title: 'First' },
+    ]
+
+    const correctDispatch = (() => {}) as ThunkDispatch<
+      BookModel[],
+      { userAPI: Function },
+      UnknownAction
+    >
+
+    // Verify that the the first type args to createAsyncThunk line up right
+    const fetchBooksTAC = createAsyncThunk<
+      BookModel[],
+      number,
+      {
+        state: BooksState
+        extra: { userAPI: Function }
+      }
+    >(
+      'books/fetch',
+      async (arg, { getState, dispatch, extra, requestId, signal }) => {
+        const state = getState()
+
+        expectTypeOf(arg).toBeNumber()
+
+        expectTypeOf(state).toEqualTypeOf<BookModel[]>()
+
+        expectTypeOf(extra).toEqualTypeOf<{ userAPI: Function }>()
+
+        return fakeBooks
+      },
+    )
+
+    correctDispatch(fetchBooksTAC(1))
+    // @ts-expect-error
+    defaultDispatch(fetchBooksTAC(1))
+  })
+
+  test('returning a rejected action from the promise creator is possible', async () => {
+    type ReturnValue = { data: 'success' }
+    type RejectValue = { data: 'error' }
+
+    const fetchBooksTAC = createAsyncThunk<
+      ReturnValue,
+      number,
+      {
+        rejectValue: RejectValue
+      }
+    >('books/fetch', async (arg, { rejectWithValue }) => {
+      return rejectWithValue({ data: 'error' })
+    })
+
+    const returned = await defaultDispatch(fetchBooksTAC(1))
+    if (fetchBooksTAC.rejected.match(returned)) {
+      expectTypeOf(returned.payload).toEqualTypeOf<undefined | RejectValue>()
+
+      expectTypeOf(returned.payload).toBeNullable()
+    } else {
+      expectTypeOf(returned.payload).toEqualTypeOf<ReturnValue>()
+    }
+
+    expectTypeOf(unwrapResult(returned)).toEqualTypeOf<ReturnValue>()
+
+    expectTypeOf(unwrapResult(returned)).not.toMatchTypeOf<RejectValue>()
+  })
+
+  test('regression #1156: union return values fall back to allowing only single member', () => {
+    const fn = createAsyncThunk('session/isAdmin', async () => {
+      const response: boolean = false
+      return response
+    })
+  })
+
+  test('Should handle reject with value within a try catch block. Note: this is a sample code taken from #1605', () => {
+    type ResultType = {
+      text: string
+    }
+    const demoPromise = async (): Promise<ResultType> =>
+      new Promise((resolve, _) => resolve({ text: '' }))
+    const thunk = createAsyncThunk('thunk', async (args, thunkAPI) => {
+      try {
+        const result = await demoPromise()
+        return result
+      } catch (error) {
+        return thunkAPI.rejectWithValue(error)
+      }
+    })
+    createReducer({}, (builder) =>
+      builder.addCase(thunk.fulfilled, (s, action) => {
+        expectTypeOf(action.payload).toEqualTypeOf<ResultType>()
+      }),
+    )
+  })
+
+  test('reject with value', () => {
+    interface Item {
+      name: string
+    }
+
+    interface ErrorFromServer {
+      error: string
+    }
+
+    interface CallsResponse {
+      data: Item[]
+    }
+
+    const fetchLiveCallsError = createAsyncThunk<
+      Item[],
+      string,
+      {
+        rejectValue: ErrorFromServer
+      }
+    >('calls/fetchLiveCalls', async (organizationId, { rejectWithValue }) => {
+      try {
+        const result = await apiRequest.get<CallsResponse>(
+          `organizations/${organizationId}/calls/live/iwill404`,
+        )
+        return result.data.data
+      } catch (err) {
+        const error: AxiosError<ErrorFromServer> = err as any // cast for access to AxiosError properties
+        if (!error.response) {
+          // let it be handled as any other unknown error
+          throw err
+        }
+        return rejectWithValue(error.response && error.response.data)
+      }
+    })
+
+    defaultDispatch(fetchLiveCallsError('asd')).then((result) => {
+      if (fetchLiveCallsError.fulfilled.match(result)) {
+        //success
+        expectTypeOf(result).toEqualTypeOf<
+          ReturnType<(typeof fetchLiveCallsError)['fulfilled']>
+        >()
+
+        expectTypeOf(result.payload).toEqualTypeOf<Item[]>()
+      } else {
+        expectTypeOf(result).toEqualTypeOf<
+          ReturnType<(typeof fetchLiveCallsError)['rejected']>
+        >()
+
+        if (result.payload) {
+          // rejected with value
+          expectTypeOf(result.payload).toEqualTypeOf<ErrorFromServer>()
+        } else {
+          // rejected by throw
+          expectTypeOf(result.payload).toBeUndefined()
+
+          expectTypeOf(result.error).toEqualTypeOf<SerializedError>()
+
+          expectTypeOf(result.error).not.toBeAny()
+        }
+      }
+      defaultDispatch(fetchLiveCallsError('asd'))
+        .then((result) => {
+          expectTypeOf(result.payload).toEqualTypeOf<
+            Item[] | ErrorFromServer | undefined
+          >()
+
+          return result
+        })
+        .then(unwrapResult)
+        .then((unwrapped) => {
+          expectTypeOf(unwrapped).toEqualTypeOf<Item[]>()
+
+          expectTypeOf(unwrapResult).parameter(0).not.toMatchTypeOf(unwrapped)
+        })
+    })
+  })
+
+  describe('payloadCreator first argument type has impact on asyncThunk argument', () => {
+    test('asyncThunk has no argument', () => {
+      const asyncThunk = createAsyncThunk('test', () => 0)
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<() => any>()
+
+      expectTypeOf(asyncThunk).parameters.toEqualTypeOf<
+        [undefined?, AsyncThunkDispatchConfig?]
+      >()
+
+      expectTypeOf(asyncThunk).returns.toBeFunction()
+    })
+
+    test('one argument, specified as undefined: asyncThunk has no argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: undefined) => 0)
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<() => any>()
+
+      expectTypeOf(asyncThunk).parameters.toEqualTypeOf<
+        [undefined?, AsyncThunkDispatchConfig?]
+      >()
+    })
+
+    test('one argument, specified as void: asyncThunk has no argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: void) => 0)
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<() => any>()
+    })
+
+    test('one argument, specified as optional number: asyncThunk has optional number argument', () => {
+      // this test will fail with strictNullChecks: false, that is to be expected
+      // in that case, we have to forbid this behavior or it will make arguments optional everywhere
+      const asyncThunk = createAsyncThunk('test', (arg?: number) => 0)
+
+      // Per https://github.com/reduxjs/redux-toolkit/issues/3758#issuecomment-1742152774 , this is a bug in
+      // TS 5.1 and 5.2, that is fixed in 5.3. Conditionally run the TS assertion here.
+      type IsTS51Or52 = TSVersion.Major extends 5
+        ? TSVersion.Minor extends 1 | 2
+          ? true
+          : false
+        : false
+
+      type expectedType = IsTS51Or52 extends true
+        ? (arg: number) => any
+        : (arg?: number) => any
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<expectedType>()
+
+      // We _should_ be able to call this with no arguments, but we run into that error in 5.1 and 5.2.
+      // Disabling this for now.
+      // asyncThunk()
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameters.not.toMatchTypeOf<[string]>()
+    })
+
+    test('one argument, specified as number|undefined: asyncThunk has optional number argument', () => {
+      // this test will fail with strictNullChecks: false, that is to be expected
+      // in that case, we have to forbid this behavior or it will make arguments optional everywhere
+      const asyncThunk = createAsyncThunk(
+        'test',
+        (arg: number | undefined) => 0,
+      )
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<(arg?: number) => any>()
+
+      expectTypeOf(asyncThunk).toBeCallableWith()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(undefined)
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameters.not.toMatchTypeOf<[string]>()
+    })
+
+    test('one argument, specified as number|void: asyncThunk has optional number argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: number | void) => 0)
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<(arg?: number) => any>()
+
+      expectTypeOf(asyncThunk).toBeCallableWith()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(undefined)
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameters.not.toMatchTypeOf<[string]>()
+    })
+
+    test('one argument, specified as any: asyncThunk has required any argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: any) => 0)
+
+      expectTypeOf(asyncThunk).parameter(0).toBeAny()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameters.not.toMatchTypeOf<[]>()
+    })
+
+    test('one argument, specified as unknown: asyncThunk has required unknown argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: unknown) => 0)
+
+      expectTypeOf(asyncThunk).parameter(0).toBeUnknown()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameters.not.toMatchTypeOf<[]>()
+    })
+
+    test('one argument, specified as number: asyncThunk has required number argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: number) => 0)
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<(arg: number) => any>()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameters.not.toMatchTypeOf<[]>()
+    })
+
+    test('two arguments, first specified as undefined: asyncThunk has no argument', () => {
+      const asyncThunk = createAsyncThunk(
+        'test',
+        (arg: undefined, thunkApi) => 0,
+      )
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<() => any>()
+
+      expectTypeOf(asyncThunk).toBeCallableWith()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(undefined)
+
+      // cannot be called with an argument
+      expectTypeOf(asyncThunk).parameter(0).not.toBeAny()
+
+      expectTypeOf(asyncThunk).parameters.toEqualTypeOf<
+        [undefined?, AsyncThunkDispatchConfig?]
+      >()
+    })
+
+    test('two arguments, first specified as void: asyncThunk has no argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: void, thunkApi) => 0)
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<() => any>()
+
+      expectTypeOf(asyncThunk).toBeCallableWith()
+
+      expectTypeOf(asyncThunk).parameter(0).toBeVoid()
+
+      // cannot be called with an argument
+      expectTypeOf(asyncThunk).parameter(0).not.toBeAny()
+
+      expectTypeOf(asyncThunk).parameters.toEqualTypeOf<
+        [undefined?, AsyncThunkDispatchConfig?]
+      >()
+    })
+
+    test('two arguments, first specified as number|undefined: asyncThunk has optional number argument', () => {
+      // this test will fail with strictNullChecks: false, that is to be expected
+      // in that case, we have to forbid this behavior or it will make arguments optional everywhere
+      const asyncThunk = createAsyncThunk(
+        'test',
+        (arg: number | undefined, thunkApi) => 0,
+      )
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<(arg?: number) => any>()
+
+      expectTypeOf(asyncThunk).toBeCallableWith()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(undefined)
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameter(0).not.toBeString()
+    })
+
+    test('two arguments, first specified as number|void: asyncThunk has optional number argument', () => {
+      const asyncThunk = createAsyncThunk(
+        'test',
+        (arg: number | void, thunkApi) => 0,
+      )
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<(arg?: number) => any>()
+
+      expectTypeOf(asyncThunk).toBeCallableWith()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(undefined)
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameter(0).not.toBeString()
+    })
+
+    test('two arguments, first specified as any: asyncThunk has required any argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: any, thunkApi) => 0)
+
+      expectTypeOf(asyncThunk).parameter(0).toBeAny()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameters.not.toMatchTypeOf<[]>()
+    })
+
+    test('two arguments, first specified as unknown: asyncThunk has required unknown argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: unknown, thunkApi) => 0)
+
+      expectTypeOf(asyncThunk).parameter(0).toBeUnknown()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameters.not.toMatchTypeOf<[]>()
+    })
+
+    test('two arguments, first specified as number: asyncThunk has required number argument', () => {
+      const asyncThunk = createAsyncThunk('test', (arg: number, thunkApi) => 0)
+
+      expectTypeOf(asyncThunk).toMatchTypeOf<(arg: number) => any>()
+
+      expectTypeOf(asyncThunk).parameter(0).toBeNumber()
+
+      expectTypeOf(asyncThunk).toBeCallableWith(5)
+
+      expectTypeOf(asyncThunk).parameters.not.toMatchTypeOf<[]>()
+    })
+  })
+
+  test('createAsyncThunk without generics', () => {
+    const thunk = createAsyncThunk('test', () => {
+      return 'ret' as const
+    })
+
+    expectTypeOf(thunk).toEqualTypeOf<AsyncThunk<'ret', void, {}>>()
+  })
+
+  test('createAsyncThunk without generics, accessing `api` does not break return type', () => {
+    const thunk = createAsyncThunk('test', (_: void, api) => {
+      return 'ret' as const
+    })
+
+    expectTypeOf(thunk).toEqualTypeOf<AsyncThunk<'ret', void, {}>>()
+  })
+
+  test('createAsyncThunk rejectWithValue without generics: Expect correct return type', () => {
+    const asyncThunk = createAsyncThunk(
+      'test',
+      (_: void, { rejectWithValue }) => {
+        try {
+          return Promise.resolve(true)
+        } catch (e) {
+          return rejectWithValue(e)
+        }
+      },
+    )
+
+    defaultDispatch(asyncThunk())
+      .then((result) => {
+        if (asyncThunk.fulfilled.match(result)) {
+          expectTypeOf(result).toEqualTypeOf<
+            ReturnType<(typeof asyncThunk)['fulfilled']>
+          >()
+
+          expectTypeOf(result.payload).toBeBoolean()
+
+          expectTypeOf(result).not.toHaveProperty('error')
+        } else {
+          expectTypeOf(result).toEqualTypeOf<
+            ReturnType<(typeof asyncThunk)['rejected']>
+          >()
+
+          expectTypeOf(result.error).toEqualTypeOf<SerializedError>()
+
+          expectTypeOf(result.payload).toBeUnknown()
+        }
+
+        return result
+      })
+      .then(unwrapResult)
+      .then((unwrapped) => {
+        expectTypeOf(unwrapped).toBeBoolean()
+      })
+  })
+
+  test('createAsyncThunk with generics', () => {
+    type Funky = { somethingElse: 'Funky!' }
+    function funkySerializeError(err: any): Funky {
+      return { somethingElse: 'Funky!' }
+    }
+
+    // has to stay on one line or type tests fail in older TS versions
+    // prettier-ignore
+    // @ts-expect-error
+    const shouldFail = createAsyncThunk('without generics', () => {}, { serializeError: funkySerializeError })
+
+    const shouldWork = createAsyncThunk<
+      any,
+      void,
+      { serializedErrorType: Funky }
+    >('with generics', () => {}, {
+      serializeError: funkySerializeError,
+    })
+
+    if (shouldWork.rejected.match(unknownAction)) {
+      expectTypeOf(unknownAction.error).toEqualTypeOf<Funky>()
+    }
+  })
+
+  test('`idGenerator` option takes no arguments, and returns a string', () => {
+    const returnsNumWithArgs = (foo: any) => 100
+    // has to stay on one line or type tests fail in older TS versions
+    // prettier-ignore
+    // @ts-expect-error
+    const shouldFailNumWithArgs = createAsyncThunk('foo', () => {}, { idGenerator: returnsNumWithArgs })
+
+    const returnsNumWithoutArgs = () => 100
+    // prettier-ignore
+    // @ts-expect-error
+    const shouldFailNumWithoutArgs = createAsyncThunk('foo', () => {}, { idGenerator: returnsNumWithoutArgs })
+
+    const returnsStrWithNumberArg = (foo: number) => 'foo'
+    // prettier-ignore
+    // @ts-expect-error
+    const shouldFailWrongArgs = createAsyncThunk('foo', (arg: string) => {}, { idGenerator: returnsStrWithNumberArg })
+
+    const returnsStrWithStringArg = (foo: string) => 'foo'
+    const shoulducceedCorrectArgs = createAsyncThunk(
+      'foo',
+      (arg: string) => {},
+      {
+        idGenerator: returnsStrWithStringArg,
+      },
+    )
+
+    const returnsStrWithoutArgs = () => 'foo'
+    const shouldSucceed = createAsyncThunk('foo', () => {}, {
+      idGenerator: returnsStrWithoutArgs,
+    })
+  })
+
+  test('fulfillWithValue should infer return value', () => {
+    // https://github.com/reduxjs/redux-toolkit/issues/2886
+
+    const initialState = {
+      loading: false,
+      obj: { magic: '' },
+    }
+
+    const getObj = createAsyncThunk(
+      'slice/getObj',
+      async (_: any, { fulfillWithValue, rejectWithValue }) => {
+        try {
+          return fulfillWithValue({ magic: 'object' })
+        } catch (rejected: any) {
+          return rejectWithValue(rejected?.response?.error || rejected)
+        }
+      },
+    )
+
+    createSlice({
+      name: 'slice',
+      initialState,
+      reducers: {},
+      extraReducers: (builder) => {
+        builder.addCase(getObj.fulfilled, (state, action) => {
+          expectTypeOf(action.payload).toEqualTypeOf<{ magic: string }>()
+        })
+      },
+    })
+  })
+
+  test('meta return values', () => {
+    // return values
+    createAsyncThunk<'ret', void, {}>('test', (_, api) => 'ret' as const)
+    createAsyncThunk<'ret', void, {}>('test', async (_, api) => 'ret' as const)
+    createAsyncThunk<'ret', void, { fulfilledMeta: string }>('test', (_, api) =>
+      api.fulfillWithValue('ret' as const, ''),
+    )
+    createAsyncThunk<'ret', void, { fulfilledMeta: string }>(
+      'test',
+      async (_, api) => api.fulfillWithValue('ret' as const, ''),
+    )
+    createAsyncThunk<'ret', void, { fulfilledMeta: string }>(
+      'test',
+      // @ts-expect-error has to be a fulfilledWithValue call
+      (_, api) => 'ret' as const,
+    )
+    createAsyncThunk<'ret', void, { fulfilledMeta: string }>(
+      'test',
+      // @ts-expect-error has to be a fulfilledWithValue call
+      async (_, api) => 'ret' as const,
+    )
+    createAsyncThunk<'ret', void, { fulfilledMeta: string }>(
+      'test', // @ts-expect-error should only allow returning with 'test'
+      (_, api) => api.fulfillWithValue(5, ''),
+    )
+    createAsyncThunk<'ret', void, { fulfilledMeta: string }>(
+      'test', // @ts-expect-error should only allow returning with 'test'
+      async (_, api) => api.fulfillWithValue(5, ''),
+    )
+
+    // reject values
+    createAsyncThunk<'ret', void, { rejectValue: string }>('test', (_, api) =>
+      api.rejectWithValue('ret'),
+    )
+    createAsyncThunk<'ret', void, { rejectValue: string }>(
+      'test',
+      async (_, api) => api.rejectWithValue('ret'),
+    )
+    createAsyncThunk<
+      'ret',
+      void,
+      { rejectValue: string; rejectedMeta: number }
+    >('test', (_, api) => api.rejectWithValue('ret', 5))
+    createAsyncThunk<
+      'ret',
+      void,
+      { rejectValue: string; rejectedMeta: number }
+    >('test', async (_, api) => api.rejectWithValue('ret', 5))
+    createAsyncThunk<
+      'ret',
+      void,
+      { rejectValue: string; rejectedMeta: number }
+    >('test', (_, api) => api.rejectWithValue('ret', 5))
+    createAsyncThunk<
+      'ret',
+      void,
+      { rejectValue: string; rejectedMeta: number }
+    >(
+      'test',
+      // @ts-expect-error wrong rejectedMeta type
+      (_, api) => api.rejectWithValue('ret', ''),
+    )
+    createAsyncThunk<
+      'ret',
+      void,
+      { rejectValue: string; rejectedMeta: number }
+    >(
+      'test',
+      // @ts-expect-error wrong rejectedMeta type
+      async (_, api) => api.rejectWithValue('ret', ''),
+    )
+    createAsyncThunk<
+      'ret',
+      void,
+      { rejectValue: string; rejectedMeta: number }
+    >(
+      'test',
+      // @ts-expect-error wrong rejectValue type
+      (_, api) => api.rejectWithValue(5, ''),
+    )
+    createAsyncThunk<
+      'ret',
+      void,
+      { rejectValue: string; rejectedMeta: number }
+    >(
+      'test',
+      // @ts-expect-error wrong rejectValue type
+      async (_, api) => api.rejectWithValue(5, ''),
+    )
+  })
+
+  test('usage with config override generic', () => {
+    const typedCAT = createAsyncThunk.withTypes<{
+      state: RootState
+      dispatch: AppDispatch
+      rejectValue: string
+      extra: { s: string; n: number }
+    }>()
+
+    // inferred usage
+    const thunk = typedCAT('foo', (arg: number, api) => {
+      // correct getState Type
+      const test1: number = api.getState().foo.value
+      // correct dispatch type
+      const test2: number = api.dispatch((dispatch, getState) => {
+        expectTypeOf(dispatch).toEqualTypeOf<
+          ThunkDispatch<{ foo: { value: number } }, undefined, UnknownAction>
+        >()
+
+        expectTypeOf(getState).toEqualTypeOf<() => { foo: { value: number } }>()
+
+        return getState().foo.value
+      })
+
+      // correct extra type
+      const { s, n } = api.extra
+
+      expectTypeOf(s).toBeString()
+
+      expectTypeOf(n).toBeNumber()
+
+      if (1 < 2)
+        // @ts-expect-error
+        return api.rejectWithValue(5)
+      if (1 < 2) return api.rejectWithValue('test')
+      return test1 + test2
+    })
+
+    // usage with two generics
+    const thunk2 = typedCAT<number, string>('foo', (arg, api) => {
+      expectTypeOf(arg).toBeString()
+
+      // correct getState Type
+      const test1: number = api.getState().foo.value
+      // correct dispatch type
+      const test2: number = api.dispatch((dispatch, getState) => {
+        expectTypeOf(dispatch).toEqualTypeOf<
+          ThunkDispatch<{ foo: { value: number } }, undefined, UnknownAction>
+        >()
+
+        expectTypeOf(getState).toEqualTypeOf<() => { foo: { value: number } }>()
+
+        return getState().foo.value
+      })
+      // correct extra type
+      const { s, n } = api.extra
+
+      expectTypeOf(s).toBeString()
+
+      expectTypeOf(n).toBeNumber()
+
+      if (1 < 2) expectTypeOf(api.rejectWithValue).toBeCallableWith('test')
+
+      expectTypeOf(api.rejectWithValue).parameter(0).not.toBeNumber()
+
+      expectTypeOf(api.rejectWithValue).parameters.toEqualTypeOf<[string]>()
+
+      return api.rejectWithValue('test')
+    })
+
+    // usage with config override generic
+    const thunk3 = typedCAT<number, string, { rejectValue: number }>(
+      'foo',
+      (arg, api) => {
+        expectTypeOf(arg).toBeString()
+
+        // correct getState Type
+        const test1: number = api.getState().foo.value
+        // correct dispatch type
+        const test2: number = api.dispatch((dispatch, getState) => {
+          expectTypeOf(dispatch).toEqualTypeOf<
+            ThunkDispatch<{ foo: { value: number } }, undefined, UnknownAction>
+          >()
+
+          expectTypeOf(getState).toEqualTypeOf<
+            () => { foo: { value: number } }
+          >()
+
+          return getState().foo.value
+        })
+        // correct extra type
+        const { s, n } = api.extra
+
+        expectTypeOf(s).toBeString()
+
+        expectTypeOf(n).toBeNumber()
+
+        if (1 < 2) return api.rejectWithValue(5)
+        if (1 < 2) expectTypeOf(api.rejectWithValue).toBeCallableWith(5)
+
+        expectTypeOf(api.rejectWithValue).parameter(0).not.toBeString()
+
+        expectTypeOf(api.rejectWithValue).parameters.toEqualTypeOf<[number]>()
+
+        return api.rejectWithValue(5)
+      },
+    )
+
+    const slice = createSlice({
+      name: 'foo',
+      initialState: { value: 0 },
+      reducers: {},
+      extraReducers(builder) {
+        builder
+          .addCase(thunk.fulfilled, (state, action) => {
+            state.value += action.payload
+          })
+          .addCase(thunk.rejected, (state, action) => {
+            expectTypeOf(action.payload).toEqualTypeOf<string | undefined>()
+          })
+          .addCase(thunk2.fulfilled, (state, action) => {
+            state.value += action.payload
+          })
+          .addCase(thunk2.rejected, (state, action) => {
+            expectTypeOf(action.payload).toEqualTypeOf<string | undefined>()
+          })
+          .addCase(thunk3.fulfilled, (state, action) => {
+            state.value += action.payload
+          })
+          .addCase(thunk3.rejected, (state, action) => {
+            expectTypeOf(action.payload).toEqualTypeOf<number | undefined>()
+          })
+      },
+    })
+
+    const store = configureStore({
+      reducer: {
+        foo: slice.reducer,
+      },
+    })
+
+    type RootState = ReturnType<typeof store.getState>
+    type AppDispatch = typeof store.dispatch
+  })
+
+  test('rejectedMeta', async () => {
+    const getNewStore = () =>
+      configureStore({
+        reducer(actions = [], action) {
+          return [...actions, action]
+        },
+      })
+
+    const store = getNewStore()
+
+    const fulfilledThunk = createAsyncThunk<
+      string,
+      string,
+      { rejectedMeta: { extraProp: string } }
+    >('test', (arg: string, { rejectWithValue }) => {
+      return rejectWithValue('damn!', { extraProp: 'baz' })
+    })
+
+    const promise = store.dispatch(fulfilledThunk('testArg'))
+
+    const ret = await promise
+
+    if (ret.meta.requestStatus === 'rejected' && ret.meta.rejectedWithValue) {
+      expectTypeOf(ret.meta.extraProp).toBeString()
+    } else {
+      // could be caused by a `throw`, `abort()` or `condition` - no `rejectedMeta` in that case
+      expectTypeOf(ret.meta).not.toHaveProperty('extraProp')
+    }
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createAsyncThunk.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createAsyncThunk.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createAsyncThunk.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1045 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import { delay, promiseWithResolvers } from '@internal/utils'
+import type { CreateAsyncThunkFunction, UnknownAction } from '@reduxjs/toolkit'
+import {
+  configureStore,
+  createAsyncThunk,
+  createReducer,
+  miniSerializeError,
+  unwrapResult,
+} from '@reduxjs/toolkit'
+
+declare global {
+  interface Window {
+    AbortController: AbortController
+  }
+}
+
+describe('createAsyncThunk', () => {
+  it('creates the action types', () => {
+    const thunkActionCreator = createAsyncThunk('testType', async () => 42)
+
+    expect(thunkActionCreator.fulfilled.type).toBe('testType/fulfilled')
+    expect(thunkActionCreator.pending.type).toBe('testType/pending')
+    expect(thunkActionCreator.rejected.type).toBe('testType/rejected')
+  })
+
+  it('exposes the typePrefix it was created with', () => {
+    const thunkActionCreator = createAsyncThunk('testType', async () => 42)
+
+    expect(thunkActionCreator.typePrefix).toBe('testType')
+  })
+
+  it('includes a settled matcher', () => {
+    const thunkActionCreator = createAsyncThunk('testType', async () => 42)
+    expect(thunkActionCreator.settled).toEqual(expect.any(Function))
+    expect(thunkActionCreator.settled(thunkActionCreator.pending(''))).toBe(
+      false,
+    )
+    expect(
+      thunkActionCreator.settled(thunkActionCreator.rejected(null, '')),
+    ).toBe(true)
+    expect(
+      thunkActionCreator.settled(thunkActionCreator.fulfilled(42, '')),
+    ).toBe(true)
+  })
+
+  it('works without passing arguments to the payload creator', async () => {
+    const thunkActionCreator = createAsyncThunk('testType', async () => 42)
+
+    let timesReducerCalled = 0
+
+    const reducer = () => {
+      timesReducerCalled++
+    }
+
+    const store = configureStore({
+      reducer,
+    })
+
+    // reset from however many times the store called it
+    timesReducerCalled = 0
+
+    await store.dispatch(thunkActionCreator())
+
+    expect(timesReducerCalled).toBe(2)
+  })
+
+  it('accepts arguments and dispatches the actions on resolve', async () => {
+    const dispatch = vi.fn()
+
+    let passedArg: any
+
+    const result = 42
+    const args = 123
+    let generatedRequestId = ''
+
+    const thunkActionCreator = createAsyncThunk(
+      'testType',
+      async (arg: number, { requestId }) => {
+        passedArg = arg
+        generatedRequestId = requestId
+        return result
+      },
+    )
+
+    const thunkFunction = thunkActionCreator(args)
+
+    const thunkPromise = thunkFunction(dispatch, () => {}, undefined)
+
+    expect(thunkPromise.requestId).toBe(generatedRequestId)
+    expect(thunkPromise.arg).toBe(args)
+
+    await thunkPromise
+
+    expect(passedArg).toBe(args)
+
+    expect(dispatch).toHaveBeenNthCalledWith(
+      1,
+      thunkActionCreator.pending(generatedRequestId, args),
+    )
+
+    expect(dispatch).toHaveBeenNthCalledWith(
+      2,
+      thunkActionCreator.fulfilled(result, generatedRequestId, args),
+    )
+  })
+
+  it('accepts arguments and dispatches the actions on reject', async () => {
+    const dispatch = vi.fn()
+
+    const args = 123
+    let generatedRequestId = ''
+
+    const error = new Error('Panic!')
+
+    const thunkActionCreator = createAsyncThunk(
+      'testType',
+      async (args: number, { requestId }) => {
+        generatedRequestId = requestId
+        throw error
+      },
+    )
+
+    const thunkFunction = thunkActionCreator(args)
+
+    try {
+      await thunkFunction(dispatch, () => {}, undefined)
+    } catch (e) {}
+
+    expect(dispatch).toHaveBeenNthCalledWith(
+      1,
+      thunkActionCreator.pending(generatedRequestId, args),
+    )
+
+    expect(dispatch).toHaveBeenCalledTimes(2)
+
+    // Have to check the bits of the action separately since the error was processed
+    const errorAction = dispatch.mock.calls[1][0]
+    expect(errorAction.error).toEqual(miniSerializeError(error))
+    expect(errorAction.meta.requestId).toBe(generatedRequestId)
+    expect(errorAction.meta.arg).toBe(args)
+  })
+
+  it('dispatches an empty error when throwing a random object without serializedError properties', async () => {
+    const dispatch = vi.fn()
+
+    const args = 123
+    let generatedRequestId = ''
+
+    const errorObject = { wny: 'dothis' }
+
+    const thunkActionCreator = createAsyncThunk(
+      'testType',
+      async (args: number, { requestId }) => {
+        generatedRequestId = requestId
+        throw errorObject
+      },
+    )
+
+    const thunkFunction = thunkActionCreator(args)
+
+    try {
+      await thunkFunction(dispatch, () => {}, undefined)
+    } catch (e) {}
+
+    expect(dispatch).toHaveBeenNthCalledWith(
+      1,
+      thunkActionCreator.pending(generatedRequestId, args),
+    )
+
+    expect(dispatch).toHaveBeenCalledTimes(2)
+
+    const errorAction = dispatch.mock.calls[1][0]
+    expect(errorAction.error).toEqual({})
+    expect(errorAction.meta.requestId).toBe(generatedRequestId)
+    expect(errorAction.meta.arg).toBe(args)
+  })
+
+  it('dispatches an action with a formatted error when throwing an object with known error keys', async () => {
+    const dispatch = vi.fn()
+
+    const args = 123
+    let generatedRequestId = ''
+
+    const errorObject = {
+      name: 'Custom thrown error',
+      message: 'This is not necessary',
+      code: '400',
+    }
+
+    const thunkActionCreator = createAsyncThunk(
+      'testType',
+      async (args: number, { requestId }) => {
+        generatedRequestId = requestId
+        throw errorObject
+      },
+    )
+
+    const thunkFunction = thunkActionCreator(args)
+
+    try {
+      await thunkFunction(dispatch, () => {}, undefined)
+    } catch (e) {}
+
+    expect(dispatch).toHaveBeenNthCalledWith(
+      1,
+      thunkActionCreator.pending(generatedRequestId, args),
+    )
+
+    expect(dispatch).toHaveBeenCalledTimes(2)
+
+    // Have to check the bits of the action separately since the error was processed
+    const errorAction = dispatch.mock.calls[1][0]
+    expect(errorAction.error).toEqual(miniSerializeError(errorObject))
+    expect(Object.keys(errorAction.error)).not.toContain('stack')
+    expect(errorAction.meta.requestId).toBe(generatedRequestId)
+    expect(errorAction.meta.arg).toBe(args)
+  })
+
+  it('dispatches a rejected action with a customized payload when a user returns rejectWithValue()', async () => {
+    const dispatch = vi.fn()
+
+    const args = 123
+    let generatedRequestId = ''
+
+    const errorPayload = {
+      errorMessage:
+        'I am a fake server-provided 400 payload with validation details',
+      errors: [
+        { field_one: 'Must be a string' },
+        { field_two: 'Must be a number' },
+      ],
+    }
+
+    const thunkActionCreator = createAsyncThunk(
+      'testType',
+      async (args: number, { requestId, rejectWithValue }) => {
+        generatedRequestId = requestId
+
+        return rejectWithValue(errorPayload)
+      },
+    )
+
+    const thunkFunction = thunkActionCreator(args)
+
+    try {
+      await thunkFunction(dispatch, () => {}, undefined)
+    } catch (e) {}
+
+    expect(dispatch).toHaveBeenNthCalledWith(
+      1,
+      thunkActionCreator.pending(generatedRequestId, args),
+    )
+
+    expect(dispatch).toHaveBeenCalledTimes(2)
+
+    // Have to check the bits of the action separately since the error was processed
+    const errorAction = dispatch.mock.calls[1][0]
+
+    expect(errorAction.error.message).toEqual('Rejected')
+    expect(errorAction.payload).toBe(errorPayload)
+    expect(errorAction.meta.arg).toBe(args)
+  })
+
+  it('dispatches a rejected action with a customized payload when a user throws rejectWithValue()', async () => {
+    const dispatch = vi.fn()
+
+    const args = 123
+    let generatedRequestId = ''
+
+    const errorPayload = {
+      errorMessage:
+        'I am a fake server-provided 400 payload with validation details',
+      errors: [
+        { field_one: 'Must be a string' },
+        { field_two: 'Must be a number' },
+      ],
+    }
+
+    const thunkActionCreator = createAsyncThunk(
+      'testType',
+      async (args: number, { requestId, rejectWithValue }) => {
+        generatedRequestId = requestId
+
+        throw rejectWithValue(errorPayload)
+      },
+    )
+
+    const thunkFunction = thunkActionCreator(args)
+
+    try {
+      await thunkFunction(dispatch, () => {}, undefined)
+    } catch (e) {}
+
+    expect(dispatch).toHaveBeenNthCalledWith(
+      1,
+      thunkActionCreator.pending(generatedRequestId, args),
+    )
+
+    expect(dispatch).toHaveBeenCalledTimes(2)
+
+    // Have to check the bits of the action separately since the error was processed
+    const errorAction = dispatch.mock.calls[1][0]
+
+    expect(errorAction.error.message).toEqual('Rejected')
+    expect(errorAction.payload).toBe(errorPayload)
+    expect(errorAction.meta.arg).toBe(args)
+  })
+
+  it('dispatches a rejected action with a miniSerializeError when rejectWithValue conditions are not satisfied', async () => {
+    const dispatch = vi.fn()
+
+    const args = 123
+    let generatedRequestId = ''
+
+    const error = new Error('Panic!')
+
+    const errorPayload = {
+      errorMessage:
+        'I am a fake server-provided 400 payload with validation details',
+      errors: [
+        { field_one: 'Must be a string' },
+        { field_two: 'Must be a number' },
+      ],
+    }
+
+    const thunkActionCreator = createAsyncThunk(
+      'testType',
+      async (args: number, { requestId, rejectWithValue }) => {
+        generatedRequestId = requestId
+
+        try {
+          throw error
+        } catch (err) {
+          if (!(err as any).response) {
+            throw err
+          }
+          return rejectWithValue(errorPayload)
+        }
+      },
+    )
+
+    const thunkFunction = thunkActionCreator(args)
+
+    try {
+      await thunkFunction(dispatch, () => {}, undefined)
+    } catch (e) {}
+
+    expect(dispatch).toHaveBeenNthCalledWith(
+      1,
+      thunkActionCreator.pending(generatedRequestId, args),
+    )
+
+    expect(dispatch).toHaveBeenCalledTimes(2)
+
+    // Have to check the bits of the action separately since the error was processed
+    const errorAction = dispatch.mock.calls[1][0]
+    expect(errorAction.error).toEqual(miniSerializeError(error))
+    expect(errorAction.payload).toEqual(undefined)
+    expect(errorAction.meta.requestId).toBe(generatedRequestId)
+    expect(errorAction.meta.arg).toBe(args)
+  })
+})
+
+describe('createAsyncThunk with abortController', () => {
+  const asyncThunk = createAsyncThunk(
+    'test',
+    function abortablePayloadCreator(_: any, { signal }) {
+      return new Promise((resolve, reject) => {
+        if (signal.aborted) {
+          reject(
+            new DOMException(
+              'This should never be reached as it should already be handled.',
+              'AbortError',
+            ),
+          )
+        }
+        signal.addEventListener('abort', () => {
+          reject(new DOMException('Was aborted while running', 'AbortError'))
+        })
+        setTimeout(resolve, 100)
+      })
+    },
+  )
+
+  let store = configureStore({
+    reducer(store: UnknownAction[] = []) {
+      return store
+    },
+  })
+
+  beforeEach(() => {
+    store = configureStore({
+      reducer(store: UnknownAction[] = [], action) {
+        return [...store, action]
+      },
+    })
+  })
+
+  test('normal usage', async () => {
+    await store.dispatch(asyncThunk({}))
+    expect(store.getState()).toEqual([
+      expect.any(Object),
+      expect.objectContaining({ type: 'test/pending' }),
+      expect.objectContaining({ type: 'test/fulfilled' }),
+    ])
+  })
+
+  test('abort after dispatch', async () => {
+    const promise = store.dispatch(asyncThunk({}))
+    promise.abort('AbortReason')
+    const result = await promise
+    const expectedAbortedAction = {
+      type: 'test/rejected',
+      error: {
+        message: 'AbortReason',
+        name: 'AbortError',
+      },
+      meta: { aborted: true, requestId: promise.requestId },
+    }
+
+    // abortedAction with reason is dispatched after test/pending is dispatched
+    expect(store.getState()).toMatchObject([
+      {},
+      { type: 'test/pending' },
+      expectedAbortedAction,
+    ])
+
+    // same abortedAction is returned, but with the AbortError from the abortablePayloadCreator
+    expect(result).toMatchObject(expectedAbortedAction)
+
+    // calling unwrapResult on the returned object re-throws the error from the abortablePayloadCreator
+    expect(() => unwrapResult(result)).toThrowError(
+      expect.objectContaining(expectedAbortedAction.error),
+    )
+  })
+
+  test('even when the payloadCreator does not directly support the signal, no further actions are dispatched', async () => {
+    const unawareAsyncThunk = createAsyncThunk('unaware', async () => {
+      await new Promise((resolve) => setTimeout(resolve, 100))
+      return 'finished'
+    })
+
+    const promise = store.dispatch(unawareAsyncThunk())
+    promise.abort('AbortReason')
+    const result = await promise
+
+    const expectedAbortedAction = {
+      type: 'unaware/rejected',
+      error: {
+        message: 'AbortReason',
+        name: 'AbortError',
+      },
+    }
+
+    // abortedAction with reason is dispatched after test/pending is dispatched
+    expect(store.getState()).toEqual([
+      expect.any(Object),
+      expect.objectContaining({ type: 'unaware/pending' }),
+      expect.objectContaining(expectedAbortedAction),
+    ])
+
+    // same abortedAction is returned, but with the AbortError from the abortablePayloadCreator
+    expect(result).toMatchObject(expectedAbortedAction)
+
+    // calling unwrapResult on the returned object re-throws the error from the abortablePayloadCreator
+    expect(() => unwrapResult(result)).toThrowError(
+      expect.objectContaining(expectedAbortedAction.error),
+    )
+  })
+
+  test('dispatch(asyncThunk) returns on abort and does not wait for the promiseProvider to finish', async () => {
+    let running = false
+    const longRunningAsyncThunk = createAsyncThunk('longRunning', async () => {
+      running = true
+      await new Promise((resolve) => setTimeout(resolve, 30000))
+      running = false
+    })
+
+    const promise = store.dispatch(longRunningAsyncThunk())
+    expect(running).toBeTruthy()
+    promise.abort()
+    const result = await promise
+    expect(running).toBeTruthy()
+    expect(result).toMatchObject({
+      type: 'longRunning/rejected',
+      error: { message: 'Aborted', name: 'AbortError' },
+      meta: { aborted: true },
+    })
+  })
+
+  describe('behavior with missing AbortController', () => {
+    let keepAbortController: (typeof window)['AbortController']
+    let freshlyLoadedModule: typeof import('../createAsyncThunk')
+
+    beforeEach(async () => {
+      keepAbortController = window.AbortController
+      delete (window as any).AbortController
+      vi.resetModules()
+      freshlyLoadedModule = await import('../createAsyncThunk')
+      vi.stubEnv('NODE_ENV', 'development')
+    })
+
+    afterEach(() => {
+      vi.unstubAllEnvs()
+      vi.clearAllMocks()
+      vi.stubGlobal('AbortController', keepAbortController)
+      vi.resetModules()
+    })
+
+    test('calling a thunk made with createAsyncThunk should fail if no global abortController is not available', async () => {
+      const longRunningAsyncThunk = freshlyLoadedModule.createAsyncThunk(
+        'longRunning',
+        async () => {
+          await new Promise((resolve) => setTimeout(resolve, 30000))
+        },
+      )
+
+      expect(longRunningAsyncThunk()).toThrow('AbortController is not defined')
+    })
+  })
+})
+
+test('non-serializable arguments are ignored by serializableStateInvariantMiddleware', async () => {
+  const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+  const nonSerializableValue = new Map()
+  const asyncThunk = createAsyncThunk('test', (arg: Map<any, any>) => {})
+
+  configureStore({
+    reducer: () => 0,
+  }).dispatch(asyncThunk(nonSerializableValue))
+
+  expect(consoleErrorSpy).not.toHaveBeenCalled()
+
+  consoleErrorSpy.mockRestore()
+})
+
+describe('conditional skipping of asyncThunks', () => {
+  const arg = {}
+  const getState = vi.fn(() => ({}))
+  const dispatch = vi.fn((x: any) => x)
+  const payloadCreator = vi.fn((x: typeof arg) => 10)
+  const condition = vi.fn(() => false)
+  const extra = {}
+
+  beforeEach(() => {
+    getState.mockClear()
+    dispatch.mockClear()
+    payloadCreator.mockClear()
+    condition.mockClear()
+  })
+
+  test('returning false from condition skips payloadCreator and returns a rejected action', async () => {
+    const asyncThunk = createAsyncThunk('test', payloadCreator, { condition })
+    const result = await asyncThunk(arg)(dispatch, getState, extra)
+
+    expect(condition).toHaveBeenCalled()
+    expect(payloadCreator).not.toHaveBeenCalled()
+    expect(asyncThunk.rejected.match(result)).toBe(true)
+    expect((result as any).meta.condition).toBe(true)
+  })
+
+  test('return falsy from condition does not skip payload creator', async () => {
+    // Override TS's expectation that this is a boolean
+    condition.mockReturnValueOnce(undefined as unknown as boolean)
+    const asyncThunk = createAsyncThunk('test', payloadCreator, { condition })
+    const result = await asyncThunk(arg)(dispatch, getState, extra)
+
+    expect(condition).toHaveBeenCalled()
+    expect(payloadCreator).toHaveBeenCalled()
+    expect(asyncThunk.fulfilled.match(result)).toBe(true)
+    expect(result.payload).toBe(10)
+  })
+
+  test('returning true from condition executes payloadCreator', async () => {
+    condition.mockReturnValueOnce(true)
+    const asyncThunk = createAsyncThunk('test', payloadCreator, { condition })
+    const result = await asyncThunk(arg)(dispatch, getState, extra)
+
+    expect(condition).toHaveBeenCalled()
+    expect(payloadCreator).toHaveBeenCalled()
+    expect(asyncThunk.fulfilled.match(result)).toBe(true)
+    expect(result.payload).toBe(10)
+  })
+
+  test('condition is called with arg, getState and extra', async () => {
+    const asyncThunk = createAsyncThunk('test', payloadCreator, { condition })
+    await asyncThunk(arg)(dispatch, getState, extra)
+
+    expect(condition).toHaveBeenCalledOnce()
+    expect(condition).toHaveBeenLastCalledWith(
+      arg,
+      expect.objectContaining({ getState, extra }),
+    )
+  })
+
+  test('pending is dispatched synchronously if condition is synchronous', async () => {
+    const condition = () => true
+    const asyncThunk = createAsyncThunk('test', payloadCreator, { condition })
+    const thunkCallPromise = asyncThunk(arg)(dispatch, getState, extra)
+    expect(dispatch).toHaveBeenCalledOnce()
+    await thunkCallPromise
+    expect(dispatch).toHaveBeenCalledTimes(2)
+  })
+
+  test('async condition', async () => {
+    const condition = () => Promise.resolve(false)
+    const asyncThunk = createAsyncThunk('test', payloadCreator, { condition })
+    await asyncThunk(arg)(dispatch, getState, extra)
+    expect(dispatch).not.toHaveBeenCalled()
+  })
+
+  test('async condition with rejected promise', async () => {
+    const condition = () => Promise.reject()
+    const asyncThunk = createAsyncThunk('test', payloadCreator, { condition })
+    await asyncThunk(arg)(dispatch, getState, extra)
+    expect(dispatch).toHaveBeenCalledOnce()
+    expect(dispatch).toHaveBeenLastCalledWith(
+      expect.objectContaining({ type: 'test/rejected' }),
+    )
+  })
+
+  test('async condition with AbortController signal first', async () => {
+    const condition = async () => {
+      await delay(25)
+      return true
+    }
+    const asyncThunk = createAsyncThunk('test', payloadCreator, { condition })
+
+    try {
+      const thunkPromise = asyncThunk(arg)(dispatch, getState, extra)
+      thunkPromise.abort()
+      await thunkPromise
+    } catch (err) {}
+    expect(dispatch).not.toHaveBeenCalled()
+  })
+
+  test('rejected action is not dispatched by default', async () => {
+    const asyncThunk = createAsyncThunk('test', payloadCreator, { condition })
+    await asyncThunk(arg)(dispatch, getState, extra)
+
+    expect(dispatch).not.toHaveBeenCalled()
+  })
+
+  test('does not fail when attempting to abort a canceled promise', async () => {
+    const asyncPayloadCreator = vi.fn(async (x: typeof arg) => {
+      await delay(200)
+      return 10
+    })
+
+    const asyncThunk = createAsyncThunk('test', asyncPayloadCreator, {
+      condition,
+    })
+    const promise = asyncThunk(arg)(dispatch, getState, extra)
+    promise.abort(
+      `If the promise was 1. somehow canceled, 2. in a 'started' state and 3. we attempted to abort, this would crash the tests`,
+    )
+  })
+
+  test('rejected action can be dispatched via option', async () => {
+    const asyncThunk = createAsyncThunk('test', payloadCreator, {
+      condition,
+      dispatchConditionRejection: true,
+    })
+    await asyncThunk(arg)(dispatch, getState, extra)
+
+    expect(dispatch).toHaveBeenCalledOnce()
+    expect(dispatch).toHaveBeenLastCalledWith(
+      expect.objectContaining({
+        error: {
+          message: 'Aborted due to condition callback returning false.',
+          name: 'ConditionError',
+        },
+        meta: {
+          aborted: false,
+          arg,
+          rejectedWithValue: false,
+          condition: true,
+          requestId: expect.stringContaining(''),
+          requestStatus: 'rejected',
+        },
+        payload: undefined,
+        type: 'test/rejected',
+      }),
+    )
+  })
+})
+
+test('serializeError implementation', async () => {
+  function serializeError() {
+    return 'serialized!'
+  }
+  const errorObject = 'something else!'
+
+  const store = configureStore({
+    reducer: (state = [], action) => [...state, action],
+  })
+
+  const asyncThunk = createAsyncThunk<
+    unknown,
+    void,
+    { serializedErrorType: string }
+  >('test', () => Promise.reject(errorObject), { serializeError })
+  const rejected = await store.dispatch(asyncThunk())
+  if (!asyncThunk.rejected.match(rejected)) {
+    throw new Error()
+  }
+
+  const expectation = {
+    type: 'test/rejected',
+    payload: undefined,
+    error: 'serialized!',
+    meta: expect.any(Object),
+  }
+  expect(rejected).toEqual(expectation)
+  expect(store.getState()[2]).toEqual(expectation)
+  expect(rejected.error).not.toEqual(miniSerializeError(errorObject))
+})
+
+describe('unwrapResult', () => {
+  const getState = vi.fn(() => ({}))
+  const dispatch = vi.fn((x: any) => x)
+  const extra = {}
+  test('fulfilled case', async () => {
+    const asyncThunk = createAsyncThunk('test', () => {
+      return 'fulfilled!' as const
+    })
+
+    const unwrapPromise = asyncThunk()(dispatch, getState, extra).then(
+      unwrapResult,
+    )
+
+    await expect(unwrapPromise).resolves.toBe('fulfilled!')
+
+    const unwrapPromise2 = asyncThunk()(dispatch, getState, extra)
+    const res = await unwrapPromise2.unwrap()
+    expect(res).toBe('fulfilled!')
+  })
+  test('error case', async () => {
+    const error = new Error('Panic!')
+    const asyncThunk = createAsyncThunk('test', () => {
+      throw error
+    })
+
+    const unwrapPromise = asyncThunk()(dispatch, getState, extra).then(
+      unwrapResult,
+    )
+
+    await expect(unwrapPromise).rejects.toEqual(miniSerializeError(error))
+
+    const unwrapPromise2 = asyncThunk()(dispatch, getState, extra)
+    await expect(unwrapPromise2.unwrap()).rejects.toEqual(
+      miniSerializeError(error),
+    )
+  })
+  test('rejectWithValue case', async () => {
+    const asyncThunk = createAsyncThunk('test', (_, { rejectWithValue }) => {
+      return rejectWithValue('rejectWithValue!')
+    })
+
+    const unwrapPromise = asyncThunk()(dispatch, getState, extra).then(
+      unwrapResult,
+    )
+
+    await expect(unwrapPromise).rejects.toBe('rejectWithValue!')
+
+    const unwrapPromise2 = asyncThunk()(dispatch, getState, extra)
+    await expect(unwrapPromise2.unwrap()).rejects.toBe('rejectWithValue!')
+  })
+})
+
+describe('idGenerator option', () => {
+  const getState = () => ({})
+  const dispatch = (x: any) => x
+  const extra = {}
+
+  test('idGenerator implementation - can customizes how request IDs are generated', async () => {
+    function makeFakeIdGenerator() {
+      let id = 0
+      return vi.fn(() => {
+        id++
+        return `fake-random-id-${id}`
+      })
+    }
+
+    let generatedRequestId = ''
+
+    const idGenerator = makeFakeIdGenerator()
+    const asyncThunk = createAsyncThunk(
+      'test',
+      async (args: void, { requestId }) => {
+        generatedRequestId = requestId
+      },
+      { idGenerator },
+    )
+
+    // dispatching the thunks should be using the custom id generator
+    const promise0 = asyncThunk()(dispatch, getState, extra)
+    expect(generatedRequestId).toEqual('fake-random-id-1')
+    expect(promise0.requestId).toEqual('fake-random-id-1')
+    expect((await promise0).meta.requestId).toEqual('fake-random-id-1')
+
+    const promise1 = asyncThunk()(dispatch, getState, extra)
+    expect(generatedRequestId).toEqual('fake-random-id-2')
+    expect(promise1.requestId).toEqual('fake-random-id-2')
+    expect((await promise1).meta.requestId).toEqual('fake-random-id-2')
+
+    const promise2 = asyncThunk()(dispatch, getState, extra)
+    expect(generatedRequestId).toEqual('fake-random-id-3')
+    expect(promise2.requestId).toEqual('fake-random-id-3')
+    expect((await promise2).meta.requestId).toEqual('fake-random-id-3')
+
+    generatedRequestId = ''
+    const defaultAsyncThunk = createAsyncThunk(
+      'test',
+      async (args: void, { requestId }) => {
+        generatedRequestId = requestId
+      },
+    )
+    // dispatching the default options thunk should still generate an id,
+    // but not using the custom id generator
+    const promise3 = defaultAsyncThunk()(dispatch, getState, extra)
+    expect(generatedRequestId).toEqual(promise3.requestId)
+    expect(promise3.requestId).not.toEqual('')
+    expect(promise3.requestId).not.toEqual(
+      expect.stringContaining('fake-random-id'),
+    )
+    expect((await promise3).meta.requestId).not.toEqual(
+      expect.stringContaining('fake-fandom-id'),
+    )
+  })
+
+  test('idGenerator should be called with thunkArg', async () => {
+    const customIdGenerator = vi.fn((seed) => `fake-unique-random-id-${seed}`)
+    let generatedRequestId = ''
+    const asyncThunk = createAsyncThunk(
+      'test',
+      async (args: any, { requestId }) => {
+        generatedRequestId = requestId
+      },
+      { idGenerator: customIdGenerator },
+    )
+
+    const thunkArg = 1
+    const expected = 'fake-unique-random-id-1'
+    const asyncThunkPromise = asyncThunk(thunkArg)(dispatch, getState, extra)
+
+    expect(customIdGenerator).toHaveBeenCalledWith(thunkArg)
+    expect(asyncThunkPromise.requestId).toEqual(expected)
+    expect((await asyncThunkPromise).meta.requestId).toEqual(expected)
+  })
+})
+
+test('`condition` will see state changes from a synchronously invoked asyncThunk', () => {
+  type State = ReturnType<typeof store.getState>
+  const onStart = vi.fn()
+  const asyncThunk = createAsyncThunk<
+    void,
+    { force?: boolean },
+    { state: State }
+  >('test', onStart, {
+    condition({ force }, { getState }) {
+      return force || !getState().started
+    },
+  })
+  const store = configureStore({
+    reducer: createReducer({ started: false }, (builder) => {
+      builder.addCase(asyncThunk.pending, (state) => {
+        state.started = true
+      })
+    }),
+  })
+
+  store.dispatch(asyncThunk({ force: false }))
+  expect(onStart).toHaveBeenCalledOnce()
+  store.dispatch(asyncThunk({ force: false }))
+  expect(onStart).toHaveBeenCalledOnce()
+  store.dispatch(asyncThunk({ force: true }))
+  expect(onStart).toHaveBeenCalledTimes(2)
+})
+
+const getNewStore = () =>
+  configureStore({
+    reducer(actions: UnknownAction[] = [], action) {
+      return [...actions, action]
+    },
+  })
+
+describe('meta', () => {
+  let store = getNewStore()
+
+  beforeEach(() => {
+    store = getNewStore()
+  })
+
+  test('pendingMeta', () => {
+    const pendingThunk = createAsyncThunk('test', (arg: string) => {}, {
+      getPendingMeta({ arg, requestId }) {
+        expect(arg).toBe('testArg')
+        expect(requestId).toEqual(expect.any(String))
+        return { extraProp: 'foo' }
+      },
+    })
+    const ret = store.dispatch(pendingThunk('testArg'))
+    expect(store.getState()[1]).toEqual({
+      meta: {
+        arg: 'testArg',
+        extraProp: 'foo',
+        requestId: ret.requestId,
+        requestStatus: 'pending',
+      },
+      payload: undefined,
+      type: 'test/pending',
+    })
+  })
+
+  test('fulfilledMeta', async () => {
+    const fulfilledThunk = createAsyncThunk<
+      string,
+      string,
+      { fulfilledMeta: { extraProp: string } }
+    >('test', (arg: string, { fulfillWithValue }) => {
+      return fulfillWithValue('hooray!', { extraProp: 'bar' })
+    })
+    const ret = store.dispatch(fulfilledThunk('testArg'))
+    expect(await ret).toEqual({
+      meta: {
+        arg: 'testArg',
+        extraProp: 'bar',
+        requestId: ret.requestId,
+        requestStatus: 'fulfilled',
+      },
+      payload: 'hooray!',
+      type: 'test/fulfilled',
+    })
+  })
+
+  test('rejectedMeta', async () => {
+    const fulfilledThunk = createAsyncThunk<
+      string,
+      string,
+      { rejectedMeta: { extraProp: string } }
+    >('test', (arg: string, { rejectWithValue }) => {
+      return rejectWithValue('damn!', { extraProp: 'baz' })
+    })
+    const promise = store.dispatch(fulfilledThunk('testArg'))
+    const ret = await promise
+    expect(ret).toEqual({
+      meta: {
+        arg: 'testArg',
+        extraProp: 'baz',
+        requestId: promise.requestId,
+        requestStatus: 'rejected',
+        rejectedWithValue: true,
+        aborted: false,
+        condition: false,
+      },
+      error: { message: 'Rejected' },
+      payload: 'damn!',
+      type: 'test/rejected',
+    })
+
+    if (ret.meta.requestStatus === 'rejected' && ret.meta.rejectedWithValue) {
+    } else {
+      // could be caused by a `throw`, `abort()` or `condition` - no `rejectedMeta` in that case
+      // @ts-expect-error
+      ret.meta.extraProp
+    }
+  })
+
+  test('typed createAsyncThunk.withTypes', () => {
+    const typedCAT = createAsyncThunk.withTypes<{
+      state: { s: string }
+      rejectValue: string
+      extra: { s: string; n: number }
+    }>()
+    const thunk = typedCAT('a', () => 'b')
+    const expectFunction = expect.any(Function)
+    expect(thunk.fulfilled).toEqual(expectFunction)
+    expect(thunk.pending).toEqual(expectFunction)
+    expect(thunk.rejected).toEqual(expectFunction)
+    expect(thunk.settled).toEqual(expectFunction)
+    expect(thunk.fulfilled.type).toBe('a/fulfilled')
+  })
+  test('createAsyncThunkWrapper using CreateAsyncThunkFunction', async () => {
+    const customSerializeError = () => 'serialized!'
+    const createAppAsyncThunk: CreateAsyncThunkFunction<{
+      serializedErrorType: ReturnType<typeof customSerializeError>
+    }> = (prefix: string, payloadCreator: any, options: any) =>
+      createAsyncThunk(prefix, payloadCreator, {
+        ...options,
+        serializeError: customSerializeError,
+      }) as any
+
+    const asyncThunk = createAppAsyncThunk('test', async () => {
+      throw new Error('Panic!')
+    })
+
+    const promise = store.dispatch(asyncThunk())
+    const result = await promise
+    if (!asyncThunk.rejected.match(result)) {
+      throw new Error('should have thrown')
+    }
+    expect(result.error).toEqual('serialized!')
+  })
+})
+
+describe('dispatch config', () => {
+  let store = getNewStore()
+
+  beforeEach(() => {
+    store = getNewStore()
+  })
+  test('accepts external signal', async () => {
+    const asyncThunk = createAsyncThunk('test', async (_: void, { signal }) => {
+      signal.throwIfAborted()
+      const { promise, reject } = promiseWithResolvers<never>()
+      signal.addEventListener('abort', () => reject(signal.reason))
+      return promise
+    })
+
+    const abortController = new AbortController()
+    const promise = store.dispatch(
+      asyncThunk(undefined, { signal: abortController.signal }),
+    )
+    abortController.abort()
+    await expect(promise.unwrap()).rejects.toThrow(
+      'External signal was aborted',
+    )
+  })
+  test('handles already aborted external signal', async () => {
+    const asyncThunk = createAsyncThunk('test', async (_: void, { signal }) => {
+      signal.throwIfAborted()
+      const { promise, reject } = promiseWithResolvers<never>()
+      signal.addEventListener('abort', () => reject(signal.reason))
+      return promise
+    })
+
+    const signal = AbortSignal.abort()
+    const promise = store.dispatch(asyncThunk(undefined, { signal }))
+    await expect(promise.unwrap()).rejects.toThrow(
+      'Aborted due to condition callback returning false.',
+    )
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createDraftSafeSelector.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createDraftSafeSelector.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createDraftSafeSelector.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+import { createDraftSafeSelector, createSelector } from '@reduxjs/toolkit'
+import { produce } from 'immer'
+
+type State = { value: number }
+const selectSelf = (state: State) => state
+
+test('handles normal values correctly', () => {
+  const unsafeSelector = createSelector(selectSelf, (x) => x.value)
+  const draftSafeSelector = createDraftSafeSelector(selectSelf, (x) => x.value)
+
+  let state = { value: 1 }
+  expect(unsafeSelector(state)).toBe(1)
+  expect(draftSafeSelector(state)).toBe(1)
+  expect(draftSafeSelector).toHaveProperty('resultFunc')
+  expect(draftSafeSelector).toHaveProperty('memoizedResultFunc')
+  expect(draftSafeSelector).toHaveProperty('lastResult')
+  expect(draftSafeSelector).toHaveProperty('dependencies')
+  expect(draftSafeSelector).toHaveProperty('recomputations')
+  expect(draftSafeSelector).toHaveProperty('resetRecomputations')
+  expect(draftSafeSelector).toHaveProperty('clearCache')
+
+  state = { value: 2 }
+  expect(unsafeSelector(state)).toBe(2)
+  expect(draftSafeSelector(state)).toBe(2)
+})
+
+test('handles drafts correctly', () => {
+  const unsafeSelector = createSelector(selectSelf, (state) => state.value)
+  const draftSafeSelector = createDraftSafeSelector(
+    selectSelf,
+    (state) => state.value,
+  )
+
+  produce({ value: 1 }, (state) => {
+    expect(unsafeSelector(state)).toBe(1)
+    expect(draftSafeSelector(state)).toBe(1)
+
+    state.value = 2
+
+    expect(unsafeSelector(state)).toBe(1)
+    expect(draftSafeSelector(state)).toBe(2)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createDraftSafeSelector.withTypes.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createDraftSafeSelector.withTypes.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createDraftSafeSelector.withTypes.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+import { createDraftSafeSelector } from '@reduxjs/toolkit'
+
+interface Todo {
+  id: number
+  completed: boolean
+}
+
+interface Alert {
+  id: number
+  read: boolean
+}
+
+interface RootState {
+  todos: Todo[]
+  alerts: Alert[]
+}
+
+const rootState: RootState = {
+  todos: [
+    { id: 0, completed: false },
+    { id: 1, completed: false },
+  ],
+  alerts: [
+    { id: 0, read: false },
+    { id: 1, read: false },
+  ],
+}
+
+describe(createDraftSafeSelector.withTypes, () => {
+  const createTypedDraftSafeSelector =
+    createDraftSafeSelector.withTypes<RootState>()
+
+  test('should return createDraftSafeSelector', () => {
+    expect(createTypedDraftSafeSelector.withTypes).toEqual(expect.any(Function))
+
+    expect(createTypedDraftSafeSelector.withTypes().withTypes).toEqual(
+      expect.any(Function),
+    )
+
+    expect(createTypedDraftSafeSelector).toBe(createDraftSafeSelector)
+
+    const selectTodoIds = createTypedDraftSafeSelector(
+      [(state) => state.todos],
+      (todos) => todos.map(({ id }) => id),
+    )
+
+    expect(selectTodoIds(rootState)).to.be.an('array').that.is.not.empty
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createEntityAdapter.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createEntityAdapter.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createEntityAdapter.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,161 @@
+import type {
+  ActionCreatorWithPayload,
+  ActionCreatorWithoutPayload,
+  EntityAdapter,
+  EntityId,
+  EntityStateAdapter,
+  Update,
+} from '@reduxjs/toolkit'
+import { createEntityAdapter, createSlice } from '@reduxjs/toolkit'
+
+function extractReducers<T, Id extends EntityId>(
+  adapter: EntityAdapter<T, Id>,
+): EntityStateAdapter<T, Id> {
+  const { selectId, sortComparer, getInitialState, getSelectors, ...rest } =
+    adapter
+  return rest
+}
+
+describe('type tests', () => {
+  test('should be usable in a slice, with all the "reducer-like" functions', () => {
+    type Id = string & { readonly __tag: unique symbol }
+    type Entity = {
+      id: Id
+    }
+    const adapter = createEntityAdapter<Entity>()
+    const slice = createSlice({
+      name: 'test',
+      initialState: adapter.getInitialState(),
+      reducers: {
+        ...extractReducers(adapter),
+      },
+    })
+
+    expectTypeOf(slice.actions.addOne).toMatchTypeOf<
+      ActionCreatorWithPayload<Entity>
+    >()
+
+    expectTypeOf(slice.actions.addMany).toMatchTypeOf<
+      ActionCreatorWithPayload<ReadonlyArray<Entity> | Record<string, Entity>>
+    >()
+
+    expectTypeOf(slice.actions.setAll).toMatchTypeOf<
+      ActionCreatorWithPayload<ReadonlyArray<Entity> | Record<string, Entity>>
+    >()
+
+    expectTypeOf(slice.actions.removeOne).toMatchTypeOf<
+      ActionCreatorWithPayload<Id>
+    >()
+
+    expectTypeOf(slice.actions.addMany).not.toMatchTypeOf<
+      ActionCreatorWithPayload<Entity[] | Record<string, Entity>>
+    >()
+
+    expectTypeOf(slice.actions.setAll).not.toMatchTypeOf<
+      ActionCreatorWithPayload<ReadonlyArray<Id>>
+    >()
+
+    expectTypeOf(slice.actions.removeOne).toMatchTypeOf<
+      ActionCreatorWithPayload<Id>
+    >()
+
+    expectTypeOf(slice.actions.removeMany).toMatchTypeOf<
+      ActionCreatorWithPayload<ReadonlyArray<Id>>
+    >()
+
+    expectTypeOf(slice.actions.removeMany).not.toMatchTypeOf<
+      ActionCreatorWithPayload<EntityId[]>
+    >()
+
+    expectTypeOf(
+      slice.actions.removeAll,
+    ).toMatchTypeOf<ActionCreatorWithoutPayload>()
+
+    expectTypeOf(slice.actions.updateOne).toMatchTypeOf<
+      ActionCreatorWithPayload<Update<Entity, Id>>
+    >()
+
+    expectTypeOf(slice.actions.updateMany).not.toMatchTypeOf<
+      ActionCreatorWithPayload<Update<Entity, Id>[]>
+    >()
+
+    expectTypeOf(slice.actions.upsertOne).toMatchTypeOf<
+      ActionCreatorWithPayload<Entity>
+    >()
+
+    expectTypeOf(slice.actions.updateMany).toMatchTypeOf<
+      ActionCreatorWithPayload<ReadonlyArray<Update<Entity, Id>>>
+    >()
+
+    expectTypeOf(slice.actions.upsertOne).toMatchTypeOf<
+      ActionCreatorWithPayload<Entity>
+    >()
+
+    expectTypeOf(slice.actions.upsertMany).toMatchTypeOf<
+      ActionCreatorWithPayload<ReadonlyArray<Entity> | Record<string, Entity>>
+    >()
+
+    expectTypeOf(slice.actions.upsertMany).not.toMatchTypeOf<
+      ActionCreatorWithPayload<Entity[] | Record<string, Entity>>
+    >()
+  })
+
+  test('should not be able to mix with a different EntityAdapter', () => {
+    type Entity = {
+      id: EntityId
+      value: string
+    }
+    type Entity2 = {
+      id: EntityId
+      value2: string
+    }
+    const adapter = createEntityAdapter<Entity>()
+    const adapter2 = createEntityAdapter<Entity2>()
+    createSlice({
+      name: 'test',
+      initialState: adapter.getInitialState(),
+      reducers: {
+        addOne: adapter.addOne,
+        // @ts-expect-error
+        addOne2: adapter2.addOne,
+      },
+    })
+  })
+
+  test('should be usable in a slice with extra properties', () => {
+    type Entity = { id: EntityId; value: string }
+    const adapter = createEntityAdapter<Entity>()
+    createSlice({
+      name: 'test',
+      initialState: adapter.getInitialState({ extraData: 'test' }),
+      reducers: {
+        addOne: adapter.addOne,
+      },
+    })
+  })
+
+  test('should not be usable in a slice with an unfitting state', () => {
+    type Entity = { id: EntityId; value: string }
+    const adapter = createEntityAdapter<Entity>()
+    createSlice({
+      name: 'test',
+      initialState: { somethingElse: '' },
+      reducers: {
+        // @ts-expect-error
+        addOne: adapter.addOne,
+      },
+    })
+  })
+
+  test('should not be able to create an adapter unless the type has an Id or an idSelector is provided', () => {
+    type Entity = {
+      value: string
+    }
+    // @ts-expect-error
+    const adapter = createEntityAdapter<Entity>()
+    const adapter2: EntityAdapter<Entity, Entity['value']> =
+      createEntityAdapter({
+        selectId: (e: Entity) => e.value,
+      })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createReducer.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createReducer.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createReducer.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+import type { ActionReducerMapBuilder, Reducer } from '@reduxjs/toolkit'
+import { createAction, createReducer } from '@reduxjs/toolkit'
+
+describe('type tests', () => {
+  test('createReducer() infers type of returned reducer.', () => {
+    const incrementHandler = (
+      state: number,
+      action: { type: 'increment'; payload: number },
+    ) => state + 1
+
+    const decrementHandler = (
+      state: number,
+      action: { type: 'decrement'; payload: number },
+    ) => state - 1
+
+    const reducer = createReducer(0 as number, (builder) => {
+      builder
+        .addCase('increment', incrementHandler)
+        .addCase('decrement', decrementHandler)
+    })
+
+    expectTypeOf(reducer).toMatchTypeOf<Reducer<number>>()
+
+    expectTypeOf(reducer).not.toMatchTypeOf<Reducer<string>>()
+  })
+
+  test('createReducer() state type can be specified explicitly.', () => {
+    const incrementHandler = (
+      state: number,
+      action: { type: 'increment'; payload: number },
+    ) => state + action.payload
+
+    const decrementHandler = (
+      state: number,
+      action: { type: 'decrement'; payload: number },
+    ) => state - action.payload
+
+    createReducer(0 as number, (builder) => {
+      builder
+        .addCase('increment', incrementHandler)
+        .addCase('decrement', decrementHandler)
+    })
+
+    // @ts-expect-error
+    createReducer<string>(0 as number, (builder) => {
+      expectTypeOf(builder.addCase)
+        .parameter(1)
+        .not.toMatchTypeOf(incrementHandler)
+
+      expectTypeOf(builder.addCase)
+        .parameter(1)
+        .not.toMatchTypeOf(decrementHandler)
+    })
+  })
+
+  test('createReducer() ensures state type is mutable within a case reducer.', () => {
+    const initialState: { readonly counter: number } = { counter: 0 }
+
+    createReducer(initialState, (builder) => {
+      builder.addCase('increment', (state) => {
+        state.counter += 1
+      })
+    })
+  })
+
+  test('builder callback for actionMap', () => {
+    const increment = createAction<number, 'increment'>('increment')
+
+    const reducer = createReducer(0, (builder) =>
+      expectTypeOf(builder).toEqualTypeOf<ActionReducerMapBuilder<number>>(),
+    )
+
+    expectTypeOf(reducer(0, increment(5))).toBeNumber()
+
+    expectTypeOf(reducer(0, increment(5))).not.toBeString()
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createReducer.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createReducer.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createReducer.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,639 @@
+import type {
+  CaseReducer,
+  Draft,
+  PayloadAction,
+  Reducer,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import {
+  createAction,
+  createNextState,
+  createReducer,
+  isPlainObject,
+} from '@reduxjs/toolkit'
+
+interface Todo {
+  text: string
+  completed?: boolean
+}
+
+interface AddTodoPayload {
+  newTodo: Todo
+}
+
+interface ToggleTodoPayload {
+  index: number
+}
+
+type TodoState = Todo[]
+type TodosReducer = Reducer<TodoState, PayloadAction<any>>
+type AddTodoReducer = CaseReducer<
+  TodoState,
+  PayloadAction<AddTodoPayload, 'ADD_TODO'>
+>
+
+type ToggleTodoReducer = CaseReducer<
+  TodoState,
+  PayloadAction<ToggleTodoPayload, 'TOGGLE_TODO'>
+>
+
+type CreateReducer = typeof createReducer
+
+describe('createReducer', () => {
+  describe('given impure reducers with immer', () => {
+    const addTodo: AddTodoReducer = (state, action) => {
+      const { newTodo } = action.payload
+
+      // Can safely call state.push() here
+      state.push({ ...newTodo, completed: false })
+    }
+
+    const toggleTodo: ToggleTodoReducer = (state, action) => {
+      const { index } = action.payload
+
+      const todo = state[index]
+      // Can directly modify the todo object
+      todo.completed = !todo.completed
+    }
+
+    const todosReducer = createReducer([] as TodoState, (builder) => {
+      builder.addCase('ADD_TODO', addTodo).addCase('TOGGLE_TODO', toggleTodo)
+    })
+
+    behavesLikeReducer(todosReducer)
+  })
+
+  describe('Deprecation warnings', () => {
+    beforeEach(() => {
+      vi.resetModules()
+    })
+
+    afterEach(() => {
+      vi.unstubAllEnvs()
+    })
+
+    it('Throws an error if the legacy object notation is used', async () => {
+      const { createReducer } = await import('../createReducer')
+      const wrapper = () => {
+        const dummyReducer = (createReducer as CreateReducer)(
+          [] as TodoState,
+          // @ts-ignore
+          {},
+        )
+      }
+
+      expect(wrapper).toThrowError(
+        /The object notation for `createReducer` has been removed/,
+      )
+
+      expect(wrapper).toThrowError(
+        /The object notation for `createReducer` has been removed/,
+      )
+    })
+
+    it('Crashes in production', async () => {
+      vi.stubEnv('NODE_ENV', 'production')
+      const { createReducer } = await import('../createReducer')
+      const wrapper = () => {
+        const dummyReducer = (createReducer as CreateReducer)(
+          [] as TodoState,
+          // @ts-ignore
+          {},
+        )
+      }
+
+      expect(wrapper).toThrowError()
+    })
+  })
+
+  describe('Immer in a production environment', () => {
+    beforeEach(() => {
+      vi.resetModules()
+      vi.stubEnv('NODE_ENV', 'production')
+    })
+
+    afterEach(() => {
+      vi.unstubAllEnvs()
+    })
+
+    test('Freezes data in production', async () => {
+      const { createReducer } = await import('../createReducer')
+      const addTodo: AddTodoReducer = (state, action) => {
+        const { newTodo } = action.payload
+        state.push({ ...newTodo, completed: false })
+      }
+
+      const toggleTodo: ToggleTodoReducer = (state, action) => {
+        const { index } = action.payload
+        const todo = state[index]
+        todo.completed = !todo.completed
+      }
+
+      const todosReducer = createReducer([] as TodoState, (builder) => {
+        builder.addCase('ADD_TODO', addTodo).addCase('TOGGLE_TODO', toggleTodo)
+      })
+
+      const result = todosReducer([], {
+        type: 'ADD_TODO',
+        payload: { text: 'Buy milk' },
+      })
+
+      const mutateStateOutsideReducer = () => (result[0].text = 'edited')
+      expect(mutateStateOutsideReducer).toThrowError(
+        'Cannot add property text, object is not extensible',
+      )
+    })
+
+    test('Freezes initial state', () => {
+      const initialState = [{ text: 'Buy milk' }]
+      const todosReducer = createReducer(initialState, () => {})
+      const frozenInitialState = todosReducer(undefined, { type: 'dummy' })
+
+      const mutateStateOutsideReducer = () =>
+        (frozenInitialState[0].text = 'edited')
+      expect(mutateStateOutsideReducer).toThrowError(
+        /Cannot assign to read only property/,
+      )
+    })
+    test('does not throw error if initial state is not draftable', () => {
+      expect(() =>
+        createReducer(new URLSearchParams(), () => {}),
+      ).not.toThrowError()
+    })
+  })
+
+  describe('given pure reducers with immutable updates', () => {
+    const addTodo: AddTodoReducer = (state, action) => {
+      const { newTodo } = action.payload
+
+      // Updates the state immutably without relying on immer
+      return state.concat({ ...newTodo, completed: false })
+    }
+
+    const toggleTodo: ToggleTodoReducer = (state, action) => {
+      const { index } = action.payload
+
+      // Updates the todo object immutably withot relying on immer
+      return state.map((todo, i) => {
+        if (i !== index) return todo
+        return { ...todo, completed: !todo.completed }
+      })
+    }
+
+    const todosReducer = createReducer([] as TodoState, (builder) => {
+      builder.addCase('ADD_TODO', addTodo).addCase('TOGGLE_TODO', toggleTodo)
+    })
+
+    behavesLikeReducer(todosReducer)
+  })
+
+  describe('Accepts a lazy state init function to generate initial state', () => {
+    const addTodo: AddTodoReducer = (state, action) => {
+      const { newTodo } = action.payload
+      state.push({ ...newTodo, completed: false })
+    }
+
+    const toggleTodo: ToggleTodoReducer = (state, action) => {
+      const { index } = action.payload
+      const todo = state[index]
+      todo.completed = !todo.completed
+    }
+
+    const lazyStateInit = () => [] as TodoState
+
+    const todosReducer = createReducer([] as TodoState, (builder) => {
+      builder.addCase('ADD_TODO', addTodo).addCase('TOGGLE_TODO', toggleTodo)
+    })
+
+    behavesLikeReducer(todosReducer)
+
+    it('Should only call the init function when `undefined` state is passed in', () => {
+      const spy = vi.fn().mockReturnValue(42)
+
+      const dummyReducer = createReducer(spy, () => {})
+      expect(spy).not.toHaveBeenCalled()
+
+      dummyReducer(123, { type: 'dummy' })
+      expect(spy).not.toHaveBeenCalled()
+
+      const initialState = dummyReducer(undefined, { type: 'dummy' })
+      expect(spy).toHaveBeenCalledOnce()
+    })
+  })
+
+  describe('given draft state from immer', () => {
+    const addTodo: AddTodoReducer = (state, action) => {
+      const { newTodo } = action.payload
+
+      // Can safely call state.push() here
+      state.push({ ...newTodo, completed: false })
+    }
+
+    const toggleTodo: ToggleTodoReducer = (state, action) => {
+      const { index } = action.payload
+
+      const todo = state[index]
+      // Can directly modify the todo object
+      todo.completed = !todo.completed
+    }
+
+    const todosReducer = createReducer([] as TodoState, (builder) => {
+      builder.addCase('ADD_TODO', addTodo).addCase('TOGGLE_TODO', toggleTodo)
+    })
+
+    const wrappedReducer: TodosReducer = (state = [], action) => {
+      return createNextState(state, (draft: Draft<TodoState>) => {
+        todosReducer(draft, action)
+      })
+    }
+
+    behavesLikeReducer(wrappedReducer)
+  })
+
+  describe('builder callback for actionMap', () => {
+    const increment = createAction<number, 'increment'>('increment')
+    const decrement = createAction<number, 'decrement'>('decrement')
+
+    test('can be used with ActionCreators', () => {
+      const reducer = createReducer(0, (builder) =>
+        builder
+          .addCase(increment, (state, action) => state + action.payload)
+          .addCase(decrement, (state, action) => state - action.payload),
+      )
+      expect(reducer(0, increment(5))).toBe(5)
+      expect(reducer(5, decrement(5))).toBe(0)
+    })
+    test('can be used with string types', () => {
+      const reducer = createReducer(0, (builder) =>
+        builder
+          .addCase(
+            'increment',
+            (state, action: { type: 'increment'; payload: number }) =>
+              state + action.payload,
+          )
+          .addCase(
+            'decrement',
+            (state, action: { type: 'decrement'; payload: number }) =>
+              state - action.payload,
+          ),
+      )
+      expect(reducer(0, increment(5))).toBe(5)
+      expect(reducer(5, decrement(5))).toBe(0)
+    })
+    test('can be used with ActionCreators and string types combined', () => {
+      const reducer = createReducer(0, (builder) =>
+        builder
+          .addCase(increment, (state, action) => state + action.payload)
+          .addCase(
+            'decrement',
+            (state, action: { type: 'decrement'; payload: number }) =>
+              state - action.payload,
+          ),
+      )
+      expect(reducer(0, increment(5))).toBe(5)
+      expect(reducer(5, decrement(5))).toBe(0)
+    })
+    test('will throw an error when returning undefined from a non-draftable state', () => {
+      const reducer = createReducer(0, (builder) =>
+        builder.addCase(
+          'decrement',
+          (state, action: { type: 'decrement'; payload: number }) => {},
+        ),
+      )
+      expect(() => reducer(5, decrement(5))).toThrowErrorMatchingInlineSnapshot(
+        `[Error: A case reducer on a non-draftable value must not return undefined]`,
+      )
+    })
+    test('allows you to return undefined if the state was null, thus skipping an update', () => {
+      const reducer = createReducer(null as number | null, (builder) =>
+        builder.addCase(
+          'decrement',
+          (state, action: { type: 'decrement'; payload: number }) => {
+            if (typeof state === 'number') {
+              return state - action.payload
+            }
+            return undefined
+          },
+        ),
+      )
+      expect(reducer(0, decrement(5))).toBe(-5)
+      expect(reducer(null, decrement(5))).toBe(null)
+    })
+    test('allows you to return null', () => {
+      const reducer = createReducer(0 as number | null, (builder) =>
+        builder.addCase(
+          'decrement',
+          (state, action: { type: 'decrement'; payload: number }) => {
+            return null
+          },
+        ),
+      )
+      expect(reducer(5, decrement(5))).toBe(null)
+    })
+    test('allows you to return 0', () => {
+      const reducer = createReducer(0, (builder) =>
+        builder.addCase(
+          'decrement',
+          (state, action: { type: 'decrement'; payload: number }) =>
+            state - action.payload,
+        ),
+      )
+      expect(reducer(5, decrement(5))).toBe(0)
+    })
+    test('will throw if the same type is used twice', () => {
+      expect(() =>
+        createReducer(0, (builder) =>
+          builder
+            .addCase(increment, (state, action) => state + action.payload)
+            .addCase(increment, (state, action) => state + action.payload)
+            .addCase(decrement, (state, action) => state - action.payload),
+        ),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: \`builder.addCase\` cannot be called with two reducers for the same action type 'increment']`,
+      )
+      expect(() =>
+        createReducer(0, (builder) =>
+          builder
+            .addCase(increment, (state, action) => state + action.payload)
+            .addCase('increment', (state) => state + 1)
+            .addCase(decrement, (state, action) => state - action.payload),
+        ),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: \`builder.addCase\` cannot be called with two reducers for the same action type 'increment']`,
+      )
+    })
+
+    test('will throw if an empty type is used', () => {
+      const customActionCreator = (payload: number) => ({
+        type: 'custom_action',
+        payload,
+      })
+      customActionCreator.type = ''
+      expect(() =>
+        createReducer(0, (builder) =>
+          builder.addCase(
+            customActionCreator,
+            (state, action) => state + action.payload,
+          ),
+        ),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: \`builder.addCase\` cannot be called with an empty action type]`,
+      )
+    })
+  })
+
+  describe('builder "addMatcher" method', () => {
+    const prepareNumberAction = (payload: number) => ({
+      payload,
+      meta: { type: 'number_action' },
+    })
+    const prepareStringAction = (payload: string) => ({
+      payload,
+      meta: { type: 'string_action' },
+    })
+
+    const numberActionMatcher = (
+      a: UnknownAction,
+    ): a is PayloadAction<number> =>
+      isPlainObject(a.meta) &&
+      'type' in a.meta &&
+      (a.meta as Record<'type', unknown>).type === 'number_action'
+
+    const stringActionMatcher = (
+      a: UnknownAction,
+    ): a is PayloadAction<string> =>
+      isPlainObject(a.meta) &&
+      'type' in a.meta &&
+      (a.meta as Record<'type', unknown>).type === 'string_action'
+
+    const incrementBy = createAction('increment', prepareNumberAction)
+    const decrementBy = createAction('decrement', prepareNumberAction)
+    const concatWith = createAction('concat', prepareStringAction)
+
+    const initialState = { numberActions: 0, stringActions: 0 }
+
+    test('uses the reducer of matching actionMatchers', () => {
+      const reducer = createReducer(initialState, (builder) =>
+        builder
+          .addMatcher(numberActionMatcher, (state) => {
+            state.numberActions += 1
+          })
+          .addMatcher(stringActionMatcher, (state) => {
+            state.stringActions += 1
+          }),
+      )
+      expect(reducer(undefined, incrementBy(1))).toEqual({
+        numberActions: 1,
+        stringActions: 0,
+      })
+      expect(reducer(undefined, decrementBy(1))).toEqual({
+        numberActions: 1,
+        stringActions: 0,
+      })
+      expect(reducer(undefined, concatWith('foo'))).toEqual({
+        numberActions: 0,
+        stringActions: 1,
+      })
+    })
+    test('falls back to defaultCase', () => {
+      const reducer = createReducer(initialState, (builder) =>
+        builder
+          .addCase(concatWith, (state) => {
+            state.stringActions += 1
+          })
+          .addMatcher(numberActionMatcher, (state) => {
+            state.numberActions += 1
+          })
+          .addDefaultCase((state) => {
+            state.numberActions = -1
+            state.stringActions = -1
+          }),
+      )
+      expect(reducer(undefined, { type: 'somethingElse' })).toEqual({
+        numberActions: -1,
+        stringActions: -1,
+      })
+    })
+    test('runs reducer cases followed by all matching actionMatchers', () => {
+      const reducer = createReducer(initialState, (builder) =>
+        builder
+          .addCase(incrementBy, (state) => {
+            state.numberActions = state.numberActions * 10 + 1
+          })
+          .addMatcher(numberActionMatcher, (state) => {
+            state.numberActions = state.numberActions * 10 + 2
+          })
+          .addMatcher(stringActionMatcher, (state) => {
+            state.stringActions = state.stringActions * 10 + 1
+          })
+          .addMatcher(numberActionMatcher, (state) => {
+            state.numberActions = state.numberActions * 10 + 3
+          }),
+      )
+      expect(reducer(undefined, incrementBy(1))).toEqual({
+        numberActions: 123,
+        stringActions: 0,
+      })
+      expect(reducer(undefined, decrementBy(1))).toEqual({
+        numberActions: 23,
+        stringActions: 0,
+      })
+      expect(reducer(undefined, concatWith('foo'))).toEqual({
+        numberActions: 0,
+        stringActions: 1,
+      })
+    })
+    test('works with `actionCreator.match`', () => {
+      const reducer = createReducer(initialState, (builder) =>
+        builder.addMatcher(incrementBy.match, (state) => {
+          state.numberActions += 100
+        }),
+      )
+      expect(reducer(undefined, incrementBy(1))).toEqual({
+        numberActions: 100,
+        stringActions: 0,
+      })
+    })
+    test('calling addCase, addMatcher and addDefaultCase in a nonsensical order should result in an error in development mode', () => {
+      expect(() =>
+        createReducer(initialState, (builder: any) =>
+          builder
+            .addMatcher(numberActionMatcher, () => {})
+            .addCase(incrementBy, () => {}),
+        ),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: \`builder.addCase\` should only be called before calling \`builder.addMatcher\`]`,
+      )
+      expect(() =>
+        createReducer(initialState, (builder: any) =>
+          builder.addDefaultCase(() => {}).addCase(incrementBy, () => {}),
+        ),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: \`builder.addCase\` should only be called before calling \`builder.addDefaultCase\`]`,
+      )
+      expect(() =>
+        createReducer(initialState, (builder: any) =>
+          builder
+            .addDefaultCase(() => {})
+            .addMatcher(numberActionMatcher, () => {}),
+        ),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: \`builder.addMatcher\` should only be called before calling \`builder.addDefaultCase\`]`,
+      )
+      expect(() =>
+        createReducer(initialState, (builder: any) =>
+          builder.addDefaultCase(() => {}).addDefaultCase(() => {}),
+        ),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: \`builder.addDefaultCase\` can only be called once]`,
+      )
+    })
+  })
+})
+
+function behavesLikeReducer(todosReducer: TodosReducer) {
+  it('should handle initial state', () => {
+    const initialAction = { type: '', payload: undefined }
+    expect(todosReducer(undefined, initialAction)).toEqual([])
+  })
+
+  it('should handle ADD_TODO', () => {
+    expect(
+      todosReducer([], {
+        type: 'ADD_TODO',
+        payload: { newTodo: { text: 'Run the tests' } },
+      }),
+    ).toEqual([
+      {
+        text: 'Run the tests',
+        completed: false,
+      },
+    ])
+
+    expect(
+      todosReducer(
+        [
+          {
+            text: 'Run the tests',
+            completed: false,
+          },
+        ],
+        {
+          type: 'ADD_TODO',
+          payload: { newTodo: { text: 'Use Redux' } },
+        },
+      ),
+    ).toEqual([
+      {
+        text: 'Run the tests',
+        completed: false,
+      },
+      {
+        text: 'Use Redux',
+        completed: false,
+      },
+    ])
+
+    expect(
+      todosReducer(
+        [
+          {
+            text: 'Run the tests',
+            completed: false,
+          },
+          {
+            text: 'Use Redux',
+            completed: false,
+          },
+        ],
+        {
+          type: 'ADD_TODO',
+          payload: { newTodo: { text: 'Fix the tests' } },
+        },
+      ),
+    ).toEqual([
+      {
+        text: 'Run the tests',
+        completed: false,
+      },
+      {
+        text: 'Use Redux',
+        completed: false,
+      },
+      {
+        text: 'Fix the tests',
+        completed: false,
+      },
+    ])
+  })
+
+  it('should handle TOGGLE_TODO', () => {
+    expect(
+      todosReducer(
+        [
+          {
+            text: 'Run the tests',
+            completed: false,
+          },
+          {
+            text: 'Use Redux',
+            completed: false,
+          },
+        ],
+        {
+          type: 'TOGGLE_TODO',
+          payload: { index: 0 },
+        },
+      ),
+    ).toEqual([
+      {
+        text: 'Run the tests',
+        completed: true,
+      },
+      {
+        text: 'Use Redux',
+        completed: false,
+      },
+    ])
+  })
+}
Index: node_modules/@reduxjs/toolkit/src/tests/createSlice.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createSlice.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createSlice.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,995 @@
+import type {
+  Action,
+  ActionCreatorWithNonInferrablePayload,
+  ActionCreatorWithOptionalPayload,
+  ActionCreatorWithPayload,
+  ActionCreatorWithPreparedPayload,
+  ActionCreatorWithoutPayload,
+  ActionReducerMapBuilder,
+  AsyncThunk,
+  CaseReducer,
+  PayloadAction,
+  PayloadActionCreator,
+  Reducer,
+  ReducerCreators,
+  SerializedError,
+  SliceCaseReducers,
+  ThunkDispatch,
+  UnknownAction,
+  ValidateSliceCaseReducers,
+} from '@reduxjs/toolkit'
+import {
+  asyncThunkCreator,
+  buildCreateSlice,
+  configureStore,
+  createAction,
+  createAsyncThunk,
+  createSlice,
+  isRejected,
+} from '@reduxjs/toolkit'
+import { castDraft } from 'immer'
+
+describe('type tests', () => {
+  const counterSlice = createSlice({
+    name: 'counter',
+    initialState: 0,
+    reducers: {
+      increment: (state: number, action) => state + action.payload,
+      decrement: (state: number, action) => state - action.payload,
+    },
+  })
+
+  test('Slice name is strongly typed.', () => {
+    const uiSlice = createSlice({
+      name: 'ui',
+      initialState: 0,
+      reducers: {
+        goToNext: (state: number, action) => state + action.payload,
+        goToPrevious: (state: number, action) => state - action.payload,
+      },
+    })
+
+    const actionCreators = {
+      [counterSlice.name]: { ...counterSlice.actions },
+      [uiSlice.name]: { ...uiSlice.actions },
+    }
+
+    expectTypeOf(counterSlice.actions).toEqualTypeOf(actionCreators.counter)
+
+    expectTypeOf(uiSlice.actions).toEqualTypeOf(actionCreators.ui)
+
+    expectTypeOf(actionCreators).not.toHaveProperty('anyKey')
+  })
+
+  test("createSlice() infers the returned slice's type.", () => {
+    const firstAction = createAction<{ count: number }>('FIRST_ACTION')
+
+    const slice = createSlice({
+      name: 'counter',
+      initialState: 0,
+      reducers: {
+        increment: (state: number, action) => state + action.payload,
+        decrement: (state: number, action) => state - action.payload,
+      },
+      extraReducers: (builder) => {
+        builder.addCase(
+          firstAction,
+          (state, action) => state + action.payload.count,
+        )
+      },
+    })
+
+    test('Reducer', () => {
+      expectTypeOf(slice.reducer).toMatchTypeOf<
+        Reducer<number, PayloadAction>
+      >()
+
+      expectTypeOf(slice.reducer).not.toMatchTypeOf<
+        Reducer<string, PayloadAction>
+      >()
+    })
+
+    test('Actions', () => {
+      slice.actions.increment(1)
+      slice.actions.decrement(1)
+
+      expectTypeOf(slice.actions).not.toHaveProperty('other')
+    })
+  })
+
+  test('Slice action creator types are inferred.', () => {
+    const counter = createSlice({
+      name: 'counter',
+      initialState: 0,
+      reducers: {
+        increment: (state) => state + 1,
+        decrement: (
+          state,
+          { payload = 1 }: PayloadAction<number | undefined>,
+        ) => state - payload,
+        multiply: (state, { payload }: PayloadAction<number | number[]>) =>
+          Array.isArray(payload)
+            ? payload.reduce((acc, val) => acc * val, state)
+            : state * payload,
+        addTwo: {
+          reducer: (s, { payload }: PayloadAction<number>) => s + payload,
+          prepare: (a: number, b: number) => ({
+            payload: a + b,
+          }),
+        },
+      },
+    })
+
+    expectTypeOf(
+      counter.actions.increment,
+    ).toMatchTypeOf<ActionCreatorWithoutPayload>()
+
+    counter.actions.increment()
+
+    expectTypeOf(counter.actions.decrement).toMatchTypeOf<
+      ActionCreatorWithOptionalPayload<number | undefined>
+    >()
+
+    counter.actions.decrement()
+    counter.actions.decrement(2)
+
+    expectTypeOf(counter.actions.multiply).toMatchTypeOf<
+      ActionCreatorWithPayload<number | number[]>
+    >()
+
+    counter.actions.multiply(2)
+    counter.actions.multiply([2, 3, 4])
+
+    expectTypeOf(counter.actions.addTwo).toMatchTypeOf<
+      ActionCreatorWithPreparedPayload<[number, number], number>
+    >()
+
+    counter.actions.addTwo(1, 2)
+
+    expectTypeOf(counter.actions.multiply).parameters.not.toMatchTypeOf<[]>()
+
+    expectTypeOf(counter.actions.multiply).parameter(0).not.toBeString()
+
+    expectTypeOf(counter.actions.addTwo).parameters.not.toMatchTypeOf<
+      [number]
+    >()
+
+    expectTypeOf(counter.actions.addTwo).parameters.toEqualTypeOf<
+      [number, number]
+    >()
+  })
+
+  test('Slice action creator types properties are strongly typed', () => {
+    const counter = createSlice({
+      name: 'counter',
+      initialState: 0,
+      reducers: {
+        increment: (state) => state + 1,
+        decrement: (state) => state - 1,
+        multiply: (state, { payload }: PayloadAction<number | number[]>) =>
+          Array.isArray(payload)
+            ? payload.reduce((acc, val) => acc * val, state)
+            : state * payload,
+      },
+    })
+
+    expectTypeOf(
+      counter.actions.increment.type,
+    ).toEqualTypeOf<'counter/increment'>()
+
+    expectTypeOf(
+      counter.actions.increment().type,
+    ).toEqualTypeOf<'counter/increment'>()
+
+    expectTypeOf(
+      counter.actions.decrement.type,
+    ).toEqualTypeOf<'counter/decrement'>()
+
+    expectTypeOf(
+      counter.actions.decrement().type,
+    ).toEqualTypeOf<'counter/decrement'>()
+
+    expectTypeOf(
+      counter.actions.multiply.type,
+    ).toEqualTypeOf<'counter/multiply'>()
+
+    expectTypeOf(
+      counter.actions.multiply(1).type,
+    ).toEqualTypeOf<'counter/multiply'>()
+
+    expectTypeOf(
+      counter.actions.increment.type,
+    ).not.toMatchTypeOf<'increment'>()
+  })
+
+  test('Slice action creator types are inferred for enhanced reducers.', () => {
+    const counter = createSlice({
+      name: 'test',
+      initialState: { counter: 0, concat: '' },
+      reducers: {
+        incrementByStrLen: {
+          reducer: (state, action: PayloadAction<number>) => {
+            state.counter += action.payload
+          },
+          prepare: (payload: string) => ({
+            payload: payload.length,
+          }),
+        },
+        concatMetaStrLen: {
+          reducer: (state, action: PayloadAction<string>) => {
+            state.concat += action.payload
+          },
+          prepare: (payload: string) => ({
+            payload,
+            meta: payload.length,
+          }),
+        },
+      },
+    })
+
+    expectTypeOf(
+      counter.actions.incrementByStrLen('test').type,
+    ).toEqualTypeOf<'test/incrementByStrLen'>()
+
+    expectTypeOf(counter.actions.incrementByStrLen('test').payload).toBeNumber()
+
+    expectTypeOf(counter.actions.concatMetaStrLen('test').payload).toBeString()
+
+    expectTypeOf(counter.actions.concatMetaStrLen('test').meta).toBeNumber()
+
+    expectTypeOf(
+      counter.actions.incrementByStrLen('test').payload,
+    ).not.toBeString()
+
+    expectTypeOf(counter.actions.concatMetaStrLen('test').meta).not.toBeString()
+  })
+
+  test('access meta and error from reducer', () => {
+    const counter = createSlice({
+      name: 'test',
+      initialState: { counter: 0, concat: '' },
+      reducers: {
+        // case: meta and error not used in reducer
+        testDefaultMetaAndError: {
+          reducer(_, action: PayloadAction<number, string>) {},
+          prepare: (payload: number) => ({
+            payload,
+            meta: 'meta' as 'meta',
+            error: 'error' as 'error',
+          }),
+        },
+        // case: meta and error marked as "unknown" in reducer
+        testUnknownMetaAndError: {
+          reducer(
+            _,
+            action: PayloadAction<number, string, unknown, unknown>,
+          ) {},
+          prepare: (payload: number) => ({
+            payload,
+            meta: 'meta' as 'meta',
+            error: 'error' as 'error',
+          }),
+        },
+        // case: meta and error are typed in the reducer as returned by prepare
+        testMetaAndError: {
+          reducer(_, action: PayloadAction<number, string, 'meta', 'error'>) {},
+          prepare: (payload: number) => ({
+            payload,
+            meta: 'meta' as 'meta',
+            error: 'error' as 'error',
+          }),
+        },
+        // case: meta is typed differently in the reducer than returned from prepare
+        testErroneousMeta: {
+          reducer(_, action: PayloadAction<number, string, 'meta', 'error'>) {},
+          // @ts-expect-error
+          prepare: (payload: number) => ({
+            payload,
+            meta: 1,
+            error: 'error' as 'error',
+          }),
+        },
+        // case: error is typed differently in the reducer than returned from prepare
+        testErroneousError: {
+          reducer(_, action: PayloadAction<number, string, 'meta', 'error'>) {},
+          // @ts-expect-error
+          prepare: (payload: number) => ({
+            payload,
+            meta: 'meta' as 'meta',
+            error: 1,
+          }),
+        },
+      },
+    })
+  })
+
+  test('returned case reducer has the correct type', () => {
+    const counter = createSlice({
+      name: 'counter',
+      initialState: 0,
+      reducers: {
+        increment(state, action: PayloadAction<number>) {
+          return state + action.payload
+        },
+        decrement: {
+          reducer(state, action: PayloadAction<number>) {
+            return state - action.payload
+          },
+          prepare(amount: number) {
+            return { payload: amount }
+          },
+        },
+      },
+    })
+
+    test('Should match positively', () => {
+      expectTypeOf(counter.caseReducers.increment).toMatchTypeOf<
+        (state: number, action: PayloadAction<number>) => number | void
+      >()
+    })
+
+    test('Should match positively for reducers with prepare callback', () => {
+      expectTypeOf(counter.caseReducers.decrement).toMatchTypeOf<
+        (state: number, action: PayloadAction<number>) => number | void
+      >()
+    })
+
+    test("Should not mismatch the payload if it's a simple reducer", () => {
+      expectTypeOf(counter.caseReducers.increment).not.toMatchTypeOf<
+        (state: number, action: PayloadAction<string>) => number | void
+      >()
+    })
+
+    test("Should not mismatch the payload if it's a reducer with a prepare callback", () => {
+      expectTypeOf(counter.caseReducers.decrement).not.toMatchTypeOf<
+        (state: number, action: PayloadAction<string>) => number | void
+      >()
+    })
+
+    test("Should not include entries that don't exist", () => {
+      expectTypeOf(counter.caseReducers).not.toHaveProperty(
+        'someThingNonExistent',
+      )
+    })
+  })
+
+  test('prepared payload does not match action payload - should cause an error.', () => {
+    const counter = createSlice({
+      name: 'counter',
+      initialState: { counter: 0 },
+      reducers: {
+        increment: {
+          reducer(state, action: PayloadAction<string>) {
+            state.counter += action.payload.length
+          },
+          // @ts-expect-error
+          prepare(x: string) {
+            return {
+              payload: 6,
+            }
+          },
+        },
+      },
+    })
+  })
+
+  test('if no Payload Type is specified, accept any payload', () => {
+    // see https://github.com/reduxjs/redux-toolkit/issues/165
+
+    const initialState = {
+      name: null,
+    }
+
+    const mySlice = createSlice({
+      name: 'name',
+      initialState,
+      reducers: {
+        setName: (state, action) => {
+          state.name = action.payload
+        },
+      },
+    })
+
+    expectTypeOf(
+      mySlice.actions.setName,
+    ).toMatchTypeOf<ActionCreatorWithNonInferrablePayload>()
+
+    const x = mySlice.actions.setName
+
+    mySlice.actions.setName(null)
+    mySlice.actions.setName('asd')
+    mySlice.actions.setName(5)
+  })
+
+  test('actions.x.match()', () => {
+    const mySlice = createSlice({
+      name: 'name',
+      initialState: { name: 'test' },
+      reducers: {
+        setName: (state, action: PayloadAction<string>) => {
+          state.name = action.payload
+        },
+      },
+    })
+
+    const x: Action<string> = {} as any
+    if (mySlice.actions.setName.match(x)) {
+      expectTypeOf(x.type).toEqualTypeOf<'name/setName'>()
+
+      expectTypeOf(x.payload).toBeString()
+    } else {
+      expectTypeOf(x.type).not.toMatchTypeOf<'name/setName'>()
+
+      expectTypeOf(x).not.toHaveProperty('payload')
+    }
+  })
+
+  test('builder callback for extraReducers', () => {
+    createSlice({
+      name: 'test',
+      initialState: 0,
+      reducers: {},
+      extraReducers: (builder) => {
+        expectTypeOf(builder).toEqualTypeOf<ActionReducerMapBuilder<number>>()
+      },
+    })
+  })
+
+  test('wrapping createSlice should be possible', () => {
+    interface GenericState<T> {
+      data?: T
+      status: 'loading' | 'finished' | 'error'
+    }
+
+    const createGenericSlice = <
+      T,
+      Reducers extends SliceCaseReducers<GenericState<T>>,
+    >({
+      name = '',
+      initialState,
+      reducers,
+    }: {
+      name: string
+      initialState: GenericState<T>
+      reducers: ValidateSliceCaseReducers<GenericState<T>, Reducers>
+    }) => {
+      return createSlice({
+        name,
+        initialState,
+        reducers: {
+          start(state) {
+            state.status = 'loading'
+          },
+          success(state: GenericState<T>, action: PayloadAction<T>) {
+            state.data = action.payload
+            state.status = 'finished'
+          },
+          ...reducers,
+        },
+      })
+    }
+
+    const wrappedSlice = createGenericSlice({
+      name: 'test',
+      initialState: { status: 'loading' } as GenericState<string>,
+      reducers: {
+        magic(state) {
+          expectTypeOf(state).toEqualTypeOf<GenericState<string>>()
+
+          expectTypeOf(state).not.toMatchTypeOf<GenericState<number>>()
+
+          state.status = 'finished'
+          state.data = 'hocus pocus'
+        },
+      },
+    })
+
+    expectTypeOf(wrappedSlice.actions.success).toMatchTypeOf<
+      ActionCreatorWithPayload<string>
+    >()
+
+    expectTypeOf(wrappedSlice.actions.magic).toMatchTypeOf<
+      ActionCreatorWithoutPayload<string>
+    >()
+  })
+
+  test('extraReducers', () => {
+    interface GenericState<T> {
+      data: T | null
+    }
+
+    function createDataSlice<
+      T,
+      Reducers extends SliceCaseReducers<GenericState<T>>,
+    >(
+      name: string,
+      reducers: ValidateSliceCaseReducers<GenericState<T>, Reducers>,
+      initialState: GenericState<T>,
+    ) {
+      const doNothing = createAction<undefined>('doNothing')
+      const setData = createAction<T>('setData')
+
+      const slice = createSlice({
+        name,
+        initialState,
+        reducers,
+        extraReducers: (builder) => {
+          builder.addCase(doNothing, (state) => {
+            return { ...state }
+          })
+          builder.addCase(setData, (state, { payload }) => {
+            return {
+              ...state,
+              data: payload,
+            }
+          })
+        },
+      })
+      return { doNothing, setData, slice }
+    }
+  })
+
+  test('slice selectors', () => {
+    const sliceWithoutSelectors = createSlice({
+      name: '',
+      initialState: '',
+      reducers: {},
+    })
+
+    expectTypeOf(sliceWithoutSelectors.selectors).not.toHaveProperty('foo')
+
+    const sliceWithSelectors = createSlice({
+      name: 'counter',
+      initialState: { value: 0 },
+      reducers: {
+        increment: (state) => {
+          state.value += 1
+        },
+      },
+      selectors: {
+        selectValue: (state) => state.value,
+        selectMultiply: (state, multiplier: number) => state.value * multiplier,
+        selectToFixed: Object.assign(
+          (state: { value: number }) => state.value.toFixed(2),
+          { static: true },
+        ),
+      },
+    })
+
+    const rootState = {
+      [sliceWithSelectors.reducerPath]: sliceWithSelectors.getInitialState(),
+    }
+
+    const { selectValue, selectMultiply, selectToFixed } =
+      sliceWithSelectors.selectors
+
+    expectTypeOf(selectValue(rootState)).toBeNumber()
+
+    expectTypeOf(selectMultiply(rootState, 2)).toBeNumber()
+
+    expectTypeOf(selectToFixed(rootState)).toBeString()
+
+    expectTypeOf(selectToFixed.unwrapped.static).toBeBoolean()
+
+    const nestedState = {
+      nested: rootState,
+    }
+
+    const nestedSelectors = sliceWithSelectors.getSelectors(
+      (rootState: typeof nestedState) => rootState.nested.counter,
+    )
+
+    expectTypeOf(nestedSelectors.selectValue(nestedState)).toBeNumber()
+
+    expectTypeOf(nestedSelectors.selectMultiply(nestedState, 2)).toBeNumber()
+
+    expectTypeOf(nestedSelectors.selectToFixed(nestedState)).toBeString()
+  })
+
+  test('reducer callback', () => {
+    interface TestState {
+      foo: string
+    }
+
+    interface TestArg {
+      test: string
+    }
+
+    interface TestReturned {
+      payload: string
+    }
+
+    interface TestReject {
+      cause: string
+    }
+
+    const slice = createSlice({
+      name: 'test',
+      initialState: {} as TestState,
+      reducers: (create) => {
+        const preTypedAsyncThunk = create.asyncThunk.withTypes<{
+          rejectValue: TestReject
+        }>()
+
+        // @ts-expect-error
+        create.asyncThunk<any, any, { state: StoreState }>(() => {})
+
+        // @ts-expect-error
+        create.asyncThunk.withTypes<{
+          rejectValue: string
+          dispatch: StoreDispatch
+        }>()
+
+        return {
+          normalReducer: create.reducer<string>((state, action) => {
+            expectTypeOf(state).toEqualTypeOf<TestState>()
+
+            expectTypeOf(action.payload).toBeString()
+          }),
+          optionalReducer: create.reducer<string | undefined>(
+            (state, action) => {
+              expectTypeOf(state).toEqualTypeOf<TestState>()
+
+              expectTypeOf(action.payload).toEqualTypeOf<string | undefined>()
+            },
+          ),
+          noActionReducer: create.reducer((state) => {
+            expectTypeOf(state).toEqualTypeOf<TestState>()
+          }),
+          preparedReducer: create.preparedReducer(
+            (payload: string) => ({
+              payload,
+              meta: 'meta' as const,
+              error: 'error' as const,
+            }),
+            (state, action) => {
+              expectTypeOf(state).toEqualTypeOf<TestState>()
+
+              expectTypeOf(action.payload).toBeString()
+
+              expectTypeOf(action.meta).toEqualTypeOf<'meta'>()
+
+              expectTypeOf(action.error).toEqualTypeOf<'error'>()
+            },
+          ),
+          testInferVoid: create.asyncThunk(() => {}, {
+            pending(state, action) {
+              expectTypeOf(state).toEqualTypeOf<TestState>()
+
+              expectTypeOf(action.meta.arg).toBeVoid()
+            },
+            fulfilled(state, action) {
+              expectTypeOf(state).toEqualTypeOf<TestState>()
+
+              expectTypeOf(action.meta.arg).toBeVoid()
+
+              expectTypeOf(action.payload).toBeVoid()
+            },
+            rejected(state, action) {
+              expectTypeOf(state).toEqualTypeOf<TestState>()
+
+              expectTypeOf(action.meta.arg).toBeVoid()
+
+              expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+            },
+            settled(state, action) {
+              expectTypeOf(state).toEqualTypeOf<TestState>()
+
+              expectTypeOf(action.meta.arg).toBeVoid()
+
+              if (isRejected(action)) {
+                expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+              } else {
+                expectTypeOf(action.payload).toBeVoid()
+              }
+            },
+          }),
+          testInfer: create.asyncThunk(
+            function payloadCreator(arg: TestArg, api) {
+              return Promise.resolve<TestReturned>({ payload: 'foo' })
+            },
+            {
+              pending(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+              },
+              fulfilled(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+
+                expectTypeOf(action.payload).toEqualTypeOf<TestReturned>()
+              },
+              rejected(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+
+                expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+              },
+              settled(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+
+                if (isRejected(action)) {
+                  expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+                } else {
+                  expectTypeOf(action.payload).toEqualTypeOf<TestReturned>()
+                }
+              },
+            },
+          ),
+          testExplicitType: create.asyncThunk<
+            TestReturned,
+            TestArg,
+            {
+              rejectValue: TestReject
+            }
+          >(
+            function payloadCreator(arg, api) {
+              // here would be a circular reference
+              expectTypeOf(api.getState()).toBeUnknown()
+              // here would be a circular reference
+              expectTypeOf(api.dispatch).toMatchTypeOf<
+                ThunkDispatch<any, any, any>
+              >()
+
+              // so you need to cast inside instead
+              const getState = api.getState as () => StoreState
+              const dispatch = api.dispatch as StoreDispatch
+
+              expectTypeOf(arg).toEqualTypeOf<TestArg>()
+
+              expectTypeOf(api.rejectWithValue).toMatchTypeOf<
+                (value: TestReject) => any
+              >()
+
+              return Promise.resolve({ payload: 'foo' })
+            },
+            {
+              pending(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+              },
+              fulfilled(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+
+                expectTypeOf(action.payload).toEqualTypeOf<TestReturned>()
+              },
+              rejected(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+
+                expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+
+                expectTypeOf(action.payload).toEqualTypeOf<
+                  TestReject | undefined
+                >()
+              },
+              settled(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+
+                if (isRejected(action)) {
+                  expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+
+                  expectTypeOf(action.payload).toEqualTypeOf<
+                    TestReject | undefined
+                  >()
+                } else {
+                  expectTypeOf(action.payload).toEqualTypeOf<TestReturned>()
+                }
+              },
+            },
+          ),
+          testPreTyped: preTypedAsyncThunk(
+            function payloadCreator(arg: TestArg, api) {
+              expectTypeOf(api.rejectWithValue).toMatchTypeOf<
+                (value: TestReject) => any
+              >()
+
+              return Promise.resolve<TestReturned>({ payload: 'foo' })
+            },
+            {
+              pending(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+              },
+              fulfilled(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+
+                expectTypeOf(action.payload).toEqualTypeOf<TestReturned>()
+              },
+              rejected(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+
+                expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+
+                expectTypeOf(action.payload).toEqualTypeOf<
+                  TestReject | undefined
+                >()
+              },
+              settled(state, action) {
+                expectTypeOf(state).toEqualTypeOf<TestState>()
+
+                expectTypeOf(action.meta.arg).toEqualTypeOf<TestArg>()
+
+                if (isRejected(action)) {
+                  expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+
+                  expectTypeOf(action.payload).toEqualTypeOf<
+                    TestReject | undefined
+                  >()
+                } else {
+                  expectTypeOf(action.payload).toEqualTypeOf<TestReturned>()
+                }
+              },
+            },
+          ),
+        }
+      },
+    })
+
+    const store = configureStore({ reducer: { test: slice.reducer } })
+
+    type StoreState = ReturnType<typeof store.getState>
+
+    type StoreDispatch = typeof store.dispatch
+
+    expectTypeOf(slice.actions.normalReducer).toMatchTypeOf<
+      PayloadActionCreator<string>
+    >()
+
+    expectTypeOf(slice.actions.normalReducer).toBeCallableWith('')
+
+    expectTypeOf(slice.actions.normalReducer).parameters.not.toMatchTypeOf<[]>()
+
+    expectTypeOf(slice.actions.normalReducer).parameters.not.toMatchTypeOf<
+      [number]
+    >()
+
+    expectTypeOf(slice.actions.optionalReducer).toMatchTypeOf<
+      ActionCreatorWithOptionalPayload<string | undefined>
+    >()
+
+    expectTypeOf(slice.actions.optionalReducer).toBeCallableWith()
+
+    expectTypeOf(slice.actions.optionalReducer).toBeCallableWith('')
+
+    expectTypeOf(slice.actions.optionalReducer).parameter(0).not.toBeNumber()
+
+    expectTypeOf(
+      slice.actions.noActionReducer,
+    ).toMatchTypeOf<ActionCreatorWithoutPayload>()
+
+    expectTypeOf(slice.actions.noActionReducer).toBeCallableWith()
+
+    expectTypeOf(slice.actions.noActionReducer).parameter(0).not.toBeString()
+
+    expectTypeOf(slice.actions.preparedReducer).toEqualTypeOf<
+      ActionCreatorWithPreparedPayload<
+        [string],
+        string,
+        'test/preparedReducer',
+        'error',
+        'meta'
+      >
+    >()
+
+    expectTypeOf(slice.actions.testInferVoid).toEqualTypeOf<
+      AsyncThunk<void, void, {}>
+    >()
+
+    expectTypeOf(slice.actions.testInferVoid).toBeCallableWith()
+
+    expectTypeOf(slice.actions.testInfer).toEqualTypeOf<
+      AsyncThunk<TestReturned, TestArg, {}>
+    >()
+
+    expectTypeOf(slice.actions.testExplicitType).toEqualTypeOf<
+      AsyncThunk<TestReturned, TestArg, { rejectValue: TestReject }>
+    >()
+
+    type TestInferThunk = AsyncThunk<TestReturned, TestArg, {}>
+
+    expectTypeOf(slice.caseReducers.testInfer.pending).toEqualTypeOf<
+      CaseReducer<TestState, ReturnType<TestInferThunk['pending']>>
+    >()
+
+    expectTypeOf(slice.caseReducers.testInfer.fulfilled).toEqualTypeOf<
+      CaseReducer<TestState, ReturnType<TestInferThunk['fulfilled']>>
+    >()
+
+    expectTypeOf(slice.caseReducers.testInfer.rejected).toEqualTypeOf<
+      CaseReducer<TestState, ReturnType<TestInferThunk['rejected']>>
+    >()
+  })
+
+  test('wrapping createSlice should be possible, with callback', () => {
+    interface GenericState<T> {
+      data?: T
+      status: 'loading' | 'finished' | 'error'
+    }
+
+    const createGenericSlice = <
+      T,
+      Reducers extends SliceCaseReducers<GenericState<T>>,
+    >({
+      name = '',
+      initialState,
+      reducers,
+    }: {
+      name: string
+      initialState: GenericState<T>
+      reducers: (create: ReducerCreators<GenericState<T>>) => Reducers
+    }) => {
+      return createSlice({
+        name,
+        initialState,
+        reducers: (create) => ({
+          start: create.reducer((state) => {
+            state.status = 'loading'
+          }),
+          success: create.reducer<T>((state, action) => {
+            state.data = castDraft(action.payload)
+            state.status = 'finished'
+          }),
+          ...reducers(create),
+        }),
+      })
+    }
+
+    const wrappedSlice = createGenericSlice({
+      name: 'test',
+      initialState: { status: 'loading' } as GenericState<string>,
+      reducers: (create) => ({
+        magic: create.reducer((state) => {
+          expectTypeOf(state).toEqualTypeOf<GenericState<string>>()
+
+          expectTypeOf(state).not.toMatchTypeOf<GenericState<number>>()
+
+          state.status = 'finished'
+          state.data = 'hocus pocus'
+        }),
+      }),
+    })
+
+    expectTypeOf(wrappedSlice.actions.success).toMatchTypeOf<
+      ActionCreatorWithPayload<string>
+    >()
+
+    expectTypeOf(wrappedSlice.actions.magic).toMatchTypeOf<
+      ActionCreatorWithoutPayload<string>
+    >()
+  })
+
+  test('selectSlice', () => {
+    expectTypeOf(counterSlice.selectSlice({ counter: 0 })).toBeNumber()
+
+    // We use `not.toEqualTypeOf` instead of `not.toMatchTypeOf`
+    // because `toMatchTypeOf` allows missing properties
+    expectTypeOf(counterSlice.selectSlice).parameter(0).not.toEqualTypeOf<{}>()
+  })
+
+  test('buildCreateSlice', () => {
+    expectTypeOf(buildCreateSlice()).toEqualTypeOf(createSlice)
+
+    buildCreateSlice({
+      // @ts-expect-error not possible to recreate shape because symbol is not exported
+      creators: { asyncThunk: { [Symbol()]: createAsyncThunk } },
+    })
+    buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/createSlice.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/createSlice.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/createSlice.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,934 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import type { PayloadAction, WithSlice } from '@reduxjs/toolkit'
+import {
+  asyncThunkCreator,
+  buildCreateSlice,
+  combineSlices,
+  configureStore,
+  createAction,
+  createSlice,
+} from '@reduxjs/toolkit'
+
+type CreateSlice = typeof createSlice
+
+describe('createSlice', () => {
+  const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+  beforeEach(() => {
+    vi.clearAllMocks()
+  })
+
+  afterAll(() => {
+    vi.restoreAllMocks()
+  })
+
+  describe('when slice is undefined', () => {
+    it('should throw an error', () => {
+      expect(() =>
+        // @ts-ignore
+        createSlice({
+          reducers: {
+            increment: (state) => state + 1,
+            multiply: (state, action: PayloadAction<number>) =>
+              state * action.payload,
+          },
+          initialState: 0,
+        }),
+      ).toThrowError()
+    })
+  })
+
+  describe('when slice is an empty string', () => {
+    it('should throw an error', () => {
+      expect(() =>
+        createSlice({
+          name: '',
+          reducers: {
+            increment: (state) => state + 1,
+            multiply: (state, action: PayloadAction<number>) =>
+              state * action.payload,
+          },
+          initialState: 0,
+        }),
+      ).toThrowError()
+    })
+  })
+
+  describe('when initial state is undefined', () => {
+    beforeEach(() => {
+      vi.stubEnv('NODE_ENV', 'development')
+    })
+
+    afterEach(() => {
+      vi.unstubAllEnvs()
+    })
+
+    it('should throw an error', () => {
+      createSlice({
+        name: 'test',
+        reducers: {},
+        initialState: undefined,
+      })
+
+      expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        'You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`',
+      )
+    })
+  })
+
+  describe('when passing slice', () => {
+    const { actions, reducer, caseReducers } = createSlice({
+      reducers: {
+        increment: (state) => state + 1,
+      },
+      initialState: 0,
+      name: 'cool',
+    })
+
+    it('should create increment action', () => {
+      expect(actions.hasOwnProperty('increment')).toBe(true)
+    })
+
+    it('should have the correct action for increment', () => {
+      expect(actions.increment()).toEqual({
+        type: 'cool/increment',
+        payload: undefined,
+      })
+    })
+
+    it('should return the correct value from reducer', () => {
+      expect(reducer(undefined, actions.increment())).toEqual(1)
+    })
+
+    it('should include the generated case reducers', () => {
+      expect(caseReducers).toBeTruthy()
+      expect(caseReducers.increment).toBeTruthy()
+      expect(typeof caseReducers.increment).toBe('function')
+    })
+
+    it('getInitialState should return the state', () => {
+      const initialState = 42
+      const slice = createSlice({
+        name: 'counter',
+        initialState,
+        reducers: {},
+      })
+
+      expect(slice.getInitialState()).toBe(initialState)
+    })
+
+    it('should allow non-draftable initial state', () => {
+      expect(() =>
+        createSlice({
+          name: 'params',
+          initialState: new URLSearchParams(),
+          reducers: {},
+        }),
+      ).not.toThrowError()
+    })
+  })
+
+  describe('when initialState is a function', () => {
+    const initialState = () => ({ user: '' })
+
+    const { actions, reducer } = createSlice({
+      reducers: {
+        setUserName: (state, action) => {
+          state.user = action.payload
+        },
+      },
+      initialState,
+      name: 'user',
+    })
+
+    it('should set the username', () => {
+      expect(reducer(undefined, actions.setUserName('eric'))).toEqual({
+        user: 'eric',
+      })
+    })
+
+    it('getInitialState should return the state', () => {
+      const initialState = () => 42
+      const slice = createSlice({
+        name: 'counter',
+        initialState,
+        reducers: {},
+      })
+
+      expect(slice.getInitialState()).toBe(42)
+    })
+
+    it('should allow non-draftable initial state', () => {
+      expect(() =>
+        createSlice({
+          name: 'params',
+          initialState: () => new URLSearchParams(),
+          reducers: {},
+        }),
+      ).not.toThrowError()
+    })
+  })
+
+  describe('when mutating state object', () => {
+    const initialState = { user: '' }
+
+    const { actions, reducer } = createSlice({
+      reducers: {
+        setUserName: (state, action) => {
+          state.user = action.payload
+        },
+      },
+      initialState,
+      name: 'user',
+    })
+
+    it('should set the username', () => {
+      expect(reducer(initialState, actions.setUserName('eric'))).toEqual({
+        user: 'eric',
+      })
+    })
+  })
+
+  describe('when passing extra reducers', () => {
+    const addMore = createAction<{ amount: number }>('ADD_MORE')
+
+    const { reducer } = createSlice({
+      name: 'test',
+      reducers: {
+        increment: (state) => state + 1,
+        multiply: (state, action) => state * action.payload,
+      },
+      extraReducers: (builder) => {
+        builder.addCase(
+          addMore,
+          (state, action) => state + action.payload.amount,
+        )
+      },
+
+      initialState: 0,
+    })
+
+    it('should call extra reducers when their actions are dispatched', () => {
+      const result = reducer(10, addMore({ amount: 5 }))
+
+      expect(result).toBe(15)
+    })
+
+    describe('builder callback for extraReducers', () => {
+      const increment = createAction<number, 'increment'>('increment')
+
+      test('can be used with actionCreators', () => {
+        const slice = createSlice({
+          name: 'counter',
+          initialState: 0,
+          reducers: {},
+          extraReducers: (builder) =>
+            builder.addCase(
+              increment,
+              (state, action) => state + action.payload,
+            ),
+        })
+        expect(slice.reducer(0, increment(5))).toBe(5)
+      })
+
+      test('can be used with string action types', () => {
+        const slice = createSlice({
+          name: 'counter',
+          initialState: 0,
+          reducers: {},
+          extraReducers: (builder) =>
+            builder.addCase(
+              'increment',
+              (state, action: { type: 'increment'; payload: number }) =>
+                state + action.payload,
+            ),
+        })
+        expect(slice.reducer(0, increment(5))).toBe(5)
+      })
+
+      test('prevents the same action type from being specified twice', () => {
+        expect(() => {
+          const slice = createSlice({
+            name: 'counter',
+            initialState: 0,
+            reducers: {},
+            extraReducers: (builder) =>
+              builder
+                .addCase('increment', (state) => state + 1)
+                .addCase('increment', (state) => state + 1),
+          })
+          slice.reducer(undefined, { type: 'unrelated' })
+        }).toThrowErrorMatchingInlineSnapshot(
+          `[Error: \`builder.addCase\` cannot be called with two reducers for the same action type 'increment']`,
+        )
+      })
+
+      test('can be used with addMatcher and type guard functions', () => {
+        const slice = createSlice({
+          name: 'counter',
+          initialState: 0,
+          reducers: {},
+          extraReducers: (builder) =>
+            builder.addMatcher(
+              increment.match,
+              (state, action: { type: 'increment'; payload: number }) =>
+                state + action.payload,
+            ),
+        })
+        expect(slice.reducer(0, increment(5))).toBe(5)
+      })
+
+      test('can be used with addDefaultCase', () => {
+        const slice = createSlice({
+          name: 'counter',
+          initialState: 0,
+          reducers: {},
+          extraReducers: (builder) =>
+            builder.addDefaultCase(
+              (state, action) =>
+                state + (action as PayloadAction<number>).payload,
+            ),
+        })
+        expect(slice.reducer(0, increment(5))).toBe(5)
+      })
+
+      // for further tests, see the test of createReducer that goes way more into depth on this
+    })
+  })
+
+  describe('behavior with enhanced case reducers', () => {
+    it('should pass all arguments to the prepare function', () => {
+      const prepare = vi.fn((payload, somethingElse) => ({ payload }))
+
+      const testSlice = createSlice({
+        name: 'test',
+        initialState: 0,
+        reducers: {
+          testReducer: {
+            reducer: (s) => s,
+            prepare,
+          },
+        },
+      })
+
+      expect(testSlice.actions.testReducer('a', 1)).toEqual({
+        type: 'test/testReducer',
+        payload: 'a',
+      })
+      expect(prepare).toHaveBeenCalledWith('a', 1)
+    })
+
+    it('should call the reducer function', () => {
+      const reducer = vi.fn(() => 5)
+
+      const testSlice = createSlice({
+        name: 'test',
+        initialState: 0,
+        reducers: {
+          testReducer: {
+            reducer,
+            prepare: (payload: any) => ({ payload }),
+          },
+        },
+      })
+
+      testSlice.reducer(0, testSlice.actions.testReducer('testPayload'))
+      expect(reducer).toHaveBeenCalledWith(
+        0,
+        expect.objectContaining({ payload: 'testPayload' }),
+      )
+    })
+  })
+
+  describe('circularity', () => {
+    test('extraReducers can reference each other circularly', () => {
+      const first = createSlice({
+        name: 'first',
+        initialState: 'firstInitial',
+        reducers: {
+          something() {
+            return 'firstSomething'
+          },
+        },
+        extraReducers(builder) {
+          // eslint-disable-next-line @typescript-eslint/no-use-before-define
+          builder.addCase(second.actions.other, () => {
+            return 'firstOther'
+          })
+        },
+      })
+      const second = createSlice({
+        name: 'second',
+        initialState: 'secondInitial',
+        reducers: {
+          other() {
+            return 'secondOther'
+          },
+        },
+        extraReducers(builder) {
+          builder.addCase(first.actions.something, () => {
+            return 'secondSomething'
+          })
+        },
+      })
+
+      expect(first.reducer(undefined, { type: 'unrelated' })).toBe(
+        'firstInitial',
+      )
+      expect(first.reducer(undefined, first.actions.something())).toBe(
+        'firstSomething',
+      )
+      expect(first.reducer(undefined, second.actions.other())).toBe(
+        'firstOther',
+      )
+
+      expect(second.reducer(undefined, { type: 'unrelated' })).toBe(
+        'secondInitial',
+      )
+      expect(second.reducer(undefined, first.actions.something())).toBe(
+        'secondSomething',
+      )
+      expect(second.reducer(undefined, second.actions.other())).toBe(
+        'secondOther',
+      )
+    })
+  })
+
+  describe('Deprecation warnings', () => {
+    beforeEach(() => {
+      vi.resetModules()
+    })
+
+    afterEach(() => {
+      vi.unstubAllEnvs()
+    })
+
+    // NOTE: This needs to be in front of the later `createReducer` call to check the one-time warning
+    it('Throws an error if the legacy object notation is used', async () => {
+      const { createSlice } = await import('../createSlice')
+
+      let dummySlice = (createSlice as CreateSlice)({
+        name: 'dummy',
+        initialState: [],
+        reducers: {},
+        extraReducers: {
+          // @ts-ignore
+          a: () => [],
+        },
+      })
+      let reducer: any
+      // Have to trigger the lazy creation
+      const wrapper = () => {
+        reducer = dummySlice.reducer
+        reducer(undefined, { type: 'dummy' })
+      }
+
+      expect(wrapper).toThrowError(
+        /The object notation for `createSlice.extraReducers` has been removed/,
+      )
+
+      dummySlice = (createSlice as CreateSlice)({
+        name: 'dummy',
+        initialState: [],
+        reducers: {},
+        extraReducers: {
+          // @ts-ignore
+          a: () => [],
+        },
+      })
+      expect(wrapper).toThrowError(
+        /The object notation for `createSlice.extraReducers` has been removed/,
+      )
+    })
+
+    // TODO Determine final production behavior here
+    it.todo('Crashes in production', () => {
+      vi.stubEnv('NODE_ENV', 'production')
+
+      const { createSlice } = require('../createSlice')
+
+      const dummySlice = (createSlice as CreateSlice)({
+        name: 'dummy',
+        initialState: [],
+        reducers: {},
+        // @ts-ignore
+        extraReducers: {},
+      })
+      const wrapper = () => {
+        const { reducer } = dummySlice
+        reducer(undefined, { type: 'dummy' })
+      }
+
+      expect(wrapper).toThrowError(
+        /The object notation for `createSlice.extraReducers` has been removed/,
+      )
+
+      vi.unstubAllEnvs()
+    })
+  })
+  describe('slice selectors', () => {
+    const slice = createSlice({
+      name: 'counter',
+      initialState: 42,
+      reducers: {},
+      selectors: {
+        selectSlice: (state) => state,
+        selectMultiple: Object.assign(
+          (state: number, multiplier: number) => state * multiplier,
+          { test: 0 },
+        ),
+      },
+    })
+    it('expects reducer under slice.reducerPath if no selectState callback passed', () => {
+      const testState = {
+        [slice.reducerPath]: slice.getInitialState(),
+      }
+      const { selectSlice, selectMultiple } = slice.selectors
+      expect(selectSlice(testState)).toBe(slice.getInitialState())
+      expect(selectMultiple(testState, 2)).toBe(slice.getInitialState() * 2)
+    })
+    it('allows passing a selector for a custom location', () => {
+      const customState = {
+        number: slice.getInitialState(),
+      }
+      const { selectSlice, selectMultiple } = slice.getSelectors(
+        (state: typeof customState) => state.number,
+      )
+      expect(selectSlice(customState)).toBe(slice.getInitialState())
+      expect(selectMultiple(customState, 2)).toBe(slice.getInitialState() * 2)
+    })
+    it('allows accessing properties on the selector', () => {
+      expect(slice.selectors.selectMultiple.unwrapped.test).toBe(0)
+    })
+    it('has selectSlice attached to slice, which can go without this', () => {
+      const slice = createSlice({
+        name: 'counter',
+        initialState: 42,
+        reducers: {},
+      })
+      const { selectSlice } = slice
+      expect(() => selectSlice({ counter: 42 })).not.toThrow()
+      expect(selectSlice({ counter: 42 })).toBe(42)
+    })
+  })
+  describe('slice injections', () => {
+    it('uses injectInto to inject slice into combined reducer', () => {
+      const slice = createSlice({
+        name: 'counter',
+        initialState: 42,
+        reducers: {
+          increment: (state) => ++state,
+        },
+        selectors: {
+          selectMultiple: (state, multiplier: number) => state * multiplier,
+        },
+      })
+
+      const { increment } = slice.actions
+
+      const combinedReducer = combineSlices({
+        static: slice.reducer,
+      }).withLazyLoadedSlices<WithSlice<typeof slice>>()
+
+      const uninjectedState = combinedReducer(undefined, increment())
+
+      expect(uninjectedState.counter).toBe(undefined)
+
+      const injectedSlice = slice.injectInto(combinedReducer)
+
+      // selector returns initial state if undefined in real state
+      expect(injectedSlice.selectSlice(uninjectedState)).toBe(
+        slice.getInitialState(),
+      )
+      expect(injectedSlice.selectors.selectMultiple({}, 1)).toBe(
+        slice.getInitialState(),
+      )
+      expect(injectedSlice.getSelectors().selectMultiple(undefined, 1)).toBe(
+        slice.getInitialState(),
+      )
+
+      const injectedState = combinedReducer(undefined, increment())
+
+      expect(injectedSlice.selectSlice(injectedState)).toBe(
+        slice.getInitialState() + 1,
+      )
+      expect(injectedSlice.selectors.selectMultiple(injectedState, 1)).toBe(
+        slice.getInitialState() + 1,
+      )
+    })
+    it('allows providing a custom name to inject under', () => {
+      const slice = createSlice({
+        name: 'counter',
+        reducerPath: 'injected',
+        initialState: 42,
+        reducers: {
+          increment: (state) => ++state,
+        },
+        selectors: {
+          selectMultiple: (state, multiplier: number) => state * multiplier,
+        },
+      })
+
+      const { increment } = slice.actions
+
+      const combinedReducer = combineSlices({
+        static: slice.reducer,
+      }).withLazyLoadedSlices<WithSlice<typeof slice> & { injected2: number }>()
+
+      const uninjectedState = combinedReducer(undefined, increment())
+
+      expect(uninjectedState.injected).toBe(undefined)
+
+      const injected = slice.injectInto(combinedReducer)
+
+      const injectedState = combinedReducer(undefined, increment())
+
+      expect(injected.selectSlice(injectedState)).toBe(
+        slice.getInitialState() + 1,
+      )
+      expect(injected.selectors.selectMultiple(injectedState, 2)).toBe(
+        (slice.getInitialState() + 1) * 2,
+      )
+
+      const injected2 = slice.injectInto(combinedReducer, {
+        reducerPath: 'injected2',
+      })
+
+      const injected2State = combinedReducer(undefined, increment())
+
+      expect(injected2.selectSlice(injected2State)).toBe(
+        slice.getInitialState() + 1,
+      )
+      expect(injected2.selectors.selectMultiple(injected2State, 2)).toBe(
+        (slice.getInitialState() + 1) * 2,
+      )
+    })
+    it('avoids incorrectly caching selectors', () => {
+      const slice = createSlice({
+        name: 'counter',
+        reducerPath: 'injected',
+        initialState: 42,
+        reducers: {
+          increment: (state) => ++state,
+        },
+        selectors: {
+          selectMultiple: (state, multiplier: number) => state * multiplier,
+        },
+      })
+      expect(slice.getSelectors()).toBe(slice.getSelectors())
+      const combinedReducer = combineSlices({
+        static: slice.reducer,
+      }).withLazyLoadedSlices<WithSlice<typeof slice>>()
+
+      const injected = slice.injectInto(combinedReducer)
+
+      expect(injected.getSelectors()).not.toBe(slice.getSelectors())
+
+      expect(injected.getSelectors().selectMultiple(undefined, 1)).toBe(42)
+
+      expect(() =>
+        // @ts-expect-error
+        slice.getSelectors().selectMultiple(undefined, 1),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: selectState returned undefined for an uninjected slice reducer]`,
+      )
+
+      const injected2 = slice.injectInto(combinedReducer, {
+        reducerPath: 'other',
+      })
+
+      // can use same cache for localised selectors
+      expect(injected.getSelectors()).toBe(injected2.getSelectors())
+      // these should be different
+      expect(injected.selectors).not.toBe(injected2.selectors)
+    })
+    it('caches initial states for selectors', () => {
+      const slice = createSlice({
+        name: 'counter',
+        initialState: () => ({ value: 0 }),
+        reducers: {},
+        selectors: {
+          selectObj: (state) => state,
+        },
+      })
+      // not cached
+      expect(slice.getInitialState()).not.toBe(slice.getInitialState())
+      expect(slice.reducer(undefined, { type: 'dummy' })).not.toBe(
+        slice.reducer(undefined, { type: 'dummy' }),
+      )
+
+      const combinedReducer = combineSlices({
+        static: slice.reducer,
+      }).withLazyLoadedSlices<WithSlice<typeof slice>>()
+
+      const injected = slice.injectInto(combinedReducer)
+
+      // still not cached
+      expect(injected.getInitialState()).not.toBe(injected.getInitialState())
+      expect(injected.reducer(undefined, { type: 'dummy' })).not.toBe(
+        injected.reducer(undefined, { type: 'dummy' }),
+      )
+      // cached
+      expect(injected.selectSlice({})).toBe(injected.selectSlice({}))
+      expect(injected.selectors.selectObj({})).toBe(
+        injected.selectors.selectObj({}),
+      )
+    })
+  })
+  describe('reducers definition with asyncThunks', () => {
+    it('is disabled by default', () => {
+      expect(() =>
+        createSlice({
+          name: 'test',
+          initialState: [] as any[],
+          reducers: (create) => ({ thunk: create.asyncThunk(() => {}) }),
+        }),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: Cannot use \`create.asyncThunk\` in the built-in \`createSlice\`. Use \`buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })\` to create a customised version of \`createSlice\`.]`,
+      )
+    })
+    const createAppSlice = buildCreateSlice({
+      creators: { asyncThunk: asyncThunkCreator },
+    })
+    function pending(state: any[], action: any) {
+      state.push(['pendingReducer', action])
+    }
+    function fulfilled(state: any[], action: any) {
+      state.push(['fulfilledReducer', action])
+    }
+    function rejected(state: any[], action: any) {
+      state.push(['rejectedReducer', action])
+    }
+    function settled(state: any[], action: any) {
+      state.push(['settledReducer', action])
+    }
+
+    test('successful thunk', async () => {
+      const slice = createAppSlice({
+        name: 'test',
+        initialState: [] as any[],
+        reducers: (create) => ({
+          thunkReducers: create.asyncThunk(
+            function payloadCreator(arg: string, api) {
+              return Promise.resolve('resolved payload')
+            },
+            { pending, fulfilled, rejected, settled },
+          ),
+        }),
+      })
+
+      const store = configureStore({
+        reducer: slice.reducer,
+      })
+      await store.dispatch(slice.actions.thunkReducers('test'))
+      expect(store.getState()).toMatchObject([
+        [
+          'pendingReducer',
+          {
+            type: 'test/thunkReducers/pending',
+            payload: undefined,
+          },
+        ],
+        [
+          'fulfilledReducer',
+          {
+            type: 'test/thunkReducers/fulfilled',
+            payload: 'resolved payload',
+          },
+        ],
+        [
+          'settledReducer',
+          {
+            type: 'test/thunkReducers/fulfilled',
+            payload: 'resolved payload',
+          },
+        ],
+      ])
+    })
+
+    test('rejected thunk', async () => {
+      const slice = createAppSlice({
+        name: 'test',
+        initialState: [] as any[],
+        reducers: (create) => ({
+          thunkReducers: create.asyncThunk(
+            // payloadCreator isn't allowed to return never
+            function payloadCreator(arg: string, api): any {
+              throw new Error('')
+            },
+            { pending, fulfilled, rejected, settled },
+          ),
+        }),
+      })
+
+      const store = configureStore({
+        reducer: slice.reducer,
+      })
+      await store.dispatch(slice.actions.thunkReducers('test'))
+      expect(store.getState()).toMatchObject([
+        [
+          'pendingReducer',
+          {
+            type: 'test/thunkReducers/pending',
+            payload: undefined,
+          },
+        ],
+        [
+          'rejectedReducer',
+          {
+            type: 'test/thunkReducers/rejected',
+            payload: undefined,
+          },
+        ],
+        [
+          'settledReducer',
+          {
+            type: 'test/thunkReducers/rejected',
+            payload: undefined,
+          },
+        ],
+      ])
+    })
+
+    test('with options', async () => {
+      const slice = createAppSlice({
+        name: 'test',
+        initialState: [] as any[],
+        reducers: (create) => ({
+          thunkReducers: create.asyncThunk(
+            function payloadCreator(arg: string, api) {
+              return 'should not call this'
+            },
+            {
+              options: {
+                condition() {
+                  return false
+                },
+                dispatchConditionRejection: true,
+              },
+              pending,
+              fulfilled,
+              rejected,
+              settled,
+            },
+          ),
+        }),
+      })
+
+      const store = configureStore({
+        reducer: slice.reducer,
+      })
+      await store.dispatch(slice.actions.thunkReducers('test'))
+      expect(store.getState()).toMatchObject([
+        [
+          'rejectedReducer',
+          {
+            type: 'test/thunkReducers/rejected',
+            payload: undefined,
+            meta: { condition: true },
+          },
+        ],
+        [
+          'settledReducer',
+          {
+            type: 'test/thunkReducers/rejected',
+            payload: undefined,
+            meta: { condition: true },
+          },
+        ],
+      ])
+    })
+
+    test('has caseReducers for the asyncThunk', async () => {
+      const slice = createAppSlice({
+        name: 'test',
+        initialState: [],
+        reducers: (create) => ({
+          thunkReducers: create.asyncThunk(
+            function payloadCreator(arg, api) {
+              return Promise.resolve('resolved payload')
+            },
+            { pending, fulfilled, settled },
+          ),
+        }),
+      })
+
+      expect(slice.caseReducers.thunkReducers.pending).toBe(pending)
+      expect(slice.caseReducers.thunkReducers.fulfilled).toBe(fulfilled)
+      expect(slice.caseReducers.thunkReducers.settled).toBe(settled)
+      // even though it is not defined above, this should at least be a no-op function to match the TypeScript typings
+      // and should be callable as a reducer even if it does nothing
+      expect(() =>
+        slice.caseReducers.thunkReducers.rejected(
+          [],
+          slice.actions.thunkReducers.rejected(
+            new Error('test'),
+            'fakeRequestId',
+          ),
+        ),
+      ).not.toThrow()
+    })
+
+    test('can define reducer with prepare statement using create.preparedReducer', async () => {
+      const slice = createSlice({
+        name: 'test',
+        initialState: [] as any[],
+        reducers: (create) => ({
+          prepared: create.preparedReducer(
+            (p: string, m: number, e: { message: string }) => ({
+              payload: p,
+              meta: m,
+              error: e,
+            }),
+            (state, action) => {
+              state.push(action)
+            },
+          ),
+        }),
+      })
+
+      expect(
+        slice.reducer(
+          [],
+          slice.actions.prepared('test', 1, { message: 'err' }),
+        ),
+      ).toMatchInlineSnapshot(`
+        [
+          {
+            "error": {
+              "message": "err",
+            },
+            "meta": 1,
+            "payload": "test",
+            "type": "test/prepared",
+          },
+        ]
+      `)
+    })
+
+    test('throws an error when invoked with a normal `prepare` object that has not gone through a `create.preparedReducer` call', async () => {
+      expect(() =>
+        createSlice({
+          name: 'test',
+          initialState: [] as any[],
+          reducers: (create) => ({
+            prepared: {
+              prepare: (p: string, m: number, e: { message: string }) => ({
+                payload: p,
+                meta: m,
+                error: e,
+              }),
+              reducer: (state, action) => {
+                state.push(action)
+              },
+            },
+          }),
+        }),
+      ).toThrowErrorMatchingInlineSnapshot(
+        `[Error: Please use the \`create.preparedReducer\` notation for prepared action creators with the \`create\` notation.]`,
+      )
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/getDefaultEnhancers.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/getDefaultEnhancers.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/getDefaultEnhancers.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,143 @@
+import type { StoreEnhancer } from '@reduxjs/toolkit'
+import { configureStore } from '@reduxjs/toolkit'
+
+declare const enhancer1: StoreEnhancer<
+  {
+    has1: true
+  },
+  { stateHas1: true }
+>
+
+declare const enhancer2: StoreEnhancer<
+  {
+    has2: true
+  },
+  { stateHas2: true }
+>
+
+describe('type tests', () => {
+  test('prepend single element', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      enhancers: (gDE) => gDE().prepend(enhancer1),
+    })
+
+    expectTypeOf(store.has1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
+
+    expectTypeOf(store).not.toHaveProperty('has2')
+
+    expectTypeOf(store.getState()).not.toHaveProperty('stateHas2')
+  })
+
+  test('prepend multiple (rest)', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      enhancers: (gDE) => gDE().prepend(enhancer1, enhancer2),
+    })
+
+    expectTypeOf(store.has1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.has2).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
+
+    expectTypeOf(store).not.toHaveProperty('has3')
+
+    expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
+  })
+
+  test('prepend multiple (array notation)', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      enhancers: (gDE) => gDE().prepend([enhancer1, enhancer2] as const),
+    })
+
+    expectTypeOf(store.has1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.has2).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
+
+    expectTypeOf(store).not.toHaveProperty('has3')
+
+    expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
+  })
+
+  test('concat single element', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      enhancers: (gDE) => gDE().concat(enhancer1),
+    })
+
+    expectTypeOf(store.has1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
+
+    expectTypeOf(store).not.toHaveProperty('has2')
+
+    expectTypeOf(store.getState()).not.toHaveProperty('stateHas2')
+  })
+
+  test('prepend multiple (rest)', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      enhancers: (gDE) => gDE().concat(enhancer1, enhancer2),
+    })
+
+    expectTypeOf(store.has1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.has2).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
+
+    expectTypeOf(store).not.toHaveProperty('has3')
+
+    expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
+  })
+
+  test('concat multiple (array notation)', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      enhancers: (gDE) => gDE().concat([enhancer1, enhancer2] as const),
+    })
+
+    expectTypeOf(store.has1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.has2).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
+
+    expectTypeOf(store).not.toHaveProperty('has3')
+
+    expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
+  })
+
+  test('concat and prepend', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      enhancers: (gDE) => gDE().concat(enhancer1).prepend(enhancer2),
+    })
+
+    expectTypeOf(store.has1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
+
+    expectTypeOf(store.has2).toEqualTypeOf<true>()
+
+    expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
+
+    expectTypeOf(store).not.toHaveProperty('has3')
+
+    expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/getDefaultMiddleware.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/getDefaultMiddleware.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/getDefaultMiddleware.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,199 @@
+import { buildGetDefaultMiddleware } from '@internal/getDefaultMiddleware'
+import type {
+  Action,
+  Dispatch,
+  Middleware,
+  ThunkAction,
+  ThunkDispatch,
+  ThunkMiddleware,
+  Tuple,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import { configureStore } from '@reduxjs/toolkit'
+
+declare const middleware1: Middleware<{
+  (_: string): number
+}>
+
+declare const middleware2: Middleware<{
+  (_: number): string
+}>
+
+type ThunkReturn = Promise<'thunk'>
+declare const thunkCreator: () => () => ThunkReturn
+
+const getDefaultMiddleware = buildGetDefaultMiddleware()
+
+describe('type tests', () => {
+  test('prepend single element', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      middleware: (gDM) => gDM().prepend(middleware1),
+    })
+
+    expectTypeOf(store.dispatch('foo')).toBeNumber()
+
+    expectTypeOf(store.dispatch(thunkCreator())).toEqualTypeOf<ThunkReturn>()
+
+    expectTypeOf(store.dispatch('foo')).not.toBeString()
+  })
+
+  test('prepend multiple (rest)', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      middleware: (gDM) => gDM().prepend(middleware1, middleware2),
+    })
+
+    expectTypeOf(store.dispatch('foo')).toBeNumber()
+
+    expectTypeOf(store.dispatch(5)).toBeString()
+
+    expectTypeOf(store.dispatch(thunkCreator())).toEqualTypeOf<ThunkReturn>()
+
+    expectTypeOf(store.dispatch('foo')).not.toBeString()
+  })
+
+  test('prepend multiple (array notation)', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      middleware: (gDM) => gDM().prepend([middleware1, middleware2] as const),
+    })
+
+    expectTypeOf(store.dispatch('foo')).toBeNumber()
+
+    expectTypeOf(store.dispatch(5)).toBeString()
+
+    expectTypeOf(store.dispatch(thunkCreator())).toEqualTypeOf<ThunkReturn>()
+
+    expectTypeOf(store.dispatch('foo')).not.toBeString()
+  })
+
+  test('concat single element', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      middleware: (gDM) => gDM().concat(middleware1),
+    })
+
+    expectTypeOf(store.dispatch('foo')).toBeNumber()
+
+    expectTypeOf(store.dispatch(thunkCreator())).toEqualTypeOf<ThunkReturn>()
+
+    expectTypeOf(store.dispatch('foo')).not.toBeString()
+  })
+
+  test('prepend multiple (rest)', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      middleware: (gDM) => gDM().concat(middleware1, middleware2),
+    })
+
+    expectTypeOf(store.dispatch('foo')).toBeNumber()
+
+    expectTypeOf(store.dispatch(5)).toBeString()
+
+    expectTypeOf(store.dispatch(thunkCreator())).toEqualTypeOf<ThunkReturn>()
+
+    expectTypeOf(store.dispatch('foo')).not.toBeString()
+  })
+
+  test('concat multiple (array notation)', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      middleware: (gDM) => gDM().concat([middleware1, middleware2] as const),
+    })
+
+    expectTypeOf(store.dispatch('foo')).toBeNumber()
+
+    expectTypeOf(store.dispatch(5)).toBeString()
+
+    expectTypeOf(store.dispatch(thunkCreator())).toEqualTypeOf<ThunkReturn>()
+
+    expectTypeOf(store.dispatch('foo')).not.toBeString()
+  })
+
+  test('concat and prepend', () => {
+    const store = configureStore({
+      reducer: () => 0,
+      middleware: (gDM) => gDM().concat(middleware1).prepend(middleware2),
+    })
+
+    expectTypeOf(store.dispatch('foo')).toBeNumber()
+
+    expectTypeOf(store.dispatch(5)).toBeString()
+
+    expectTypeOf(store.dispatch(thunkCreator())).toEqualTypeOf<ThunkReturn>()
+
+    expectTypeOf(store.dispatch('foo')).not.toBeString()
+  })
+
+  test('allows passing options to thunk', () => {
+    const extraArgument = 42 as const
+
+    const m2 = getDefaultMiddleware({
+      thunk: false,
+    })
+
+    expectTypeOf(m2).toMatchTypeOf<Tuple<[]>>()
+
+    const dummyMiddleware: Middleware<
+      {
+        (action: Action<'actionListenerMiddleware/add'>): () => void
+      },
+      { counter: number }
+    > = (storeApi) => (next) => (action) => {
+      return next(action)
+    }
+
+    const dummyMiddleware2: Middleware<{}, { counter: number }> =
+      (storeApi) => (next) => (action) => {}
+
+    const testThunk: ThunkAction<
+      void,
+      { counter: number },
+      number,
+      UnknownAction
+    > = (dispatch, getState, extraArg) => {
+      expect(extraArg).toBe(extraArgument)
+    }
+
+    const reducer = () => ({ counter: 123 })
+
+    const store = configureStore({
+      reducer,
+      middleware: (gDM) => {
+        const middleware = gDM({
+          thunk: { extraArgument },
+          immutableCheck: false,
+          serializableCheck: false,
+          actionCreatorCheck: false,
+        })
+
+        const m3 = middleware.concat(dummyMiddleware, dummyMiddleware2)
+
+        expectTypeOf(m3).toMatchTypeOf<
+          Tuple<
+            [
+              ThunkMiddleware<any, UnknownAction, 42>,
+              Middleware<
+                (action: Action<'actionListenerMiddleware/add'>) => () => void,
+                {
+                  counter: number
+                },
+                Dispatch<UnknownAction>
+              >,
+              Middleware<{}, any, Dispatch<UnknownAction>>,
+            ]
+          >
+        >()
+
+        return m3
+      },
+    })
+
+    expectTypeOf(store.dispatch).toMatchTypeOf<
+      ThunkDispatch<any, 42, UnknownAction> & Dispatch<UnknownAction>
+    >()
+
+    store.dispatch(testThunk)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/getDefaultMiddleware.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/getDefaultMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/getDefaultMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,317 @@
+import { Tuple } from '@internal/utils'
+import type {
+  Action,
+  Middleware,
+  ThunkAction,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import { configureStore } from '@reduxjs/toolkit'
+import { thunk } from 'redux-thunk'
+import { vi } from 'vitest'
+
+import { buildGetDefaultMiddleware } from '@internal/getDefaultMiddleware'
+
+const getDefaultMiddleware = buildGetDefaultMiddleware()
+
+describe('getDefaultMiddleware', () => {
+  afterEach(() => {
+    vi.unstubAllEnvs()
+  })
+
+  describe('Production behavior', () => {
+    beforeEach(() => {
+      vi.resetModules()
+    })
+
+    it('returns an array with only redux-thunk in production', async () => {
+      vi.stubEnv('NODE_ENV', 'production')
+
+      const { thunk } = await import('redux-thunk')
+      const { buildGetDefaultMiddleware } = await import(
+        '@internal/getDefaultMiddleware'
+      )
+
+      const middleware = buildGetDefaultMiddleware()()
+      expect(middleware).toContain(thunk)
+      expect(middleware.length).toBe(1)
+    })
+  })
+
+  it('returns an array with additional middleware in development', () => {
+    const middleware = getDefaultMiddleware()
+    expect(middleware).toContain(thunk)
+    expect(middleware.length).toBeGreaterThan(1)
+  })
+
+  const defaultMiddleware = getDefaultMiddleware()
+
+  it('removes the thunk middleware if disabled', () => {
+    const middleware = getDefaultMiddleware({ thunk: false })
+    // @ts-ignore
+    expect(middleware.includes(thunk)).toBe(false)
+    expect(middleware.length).toBe(defaultMiddleware.length - 1)
+  })
+
+  it('removes the immutable middleware if disabled', () => {
+    const middleware = getDefaultMiddleware({ immutableCheck: false })
+    expect(middleware.length).toBe(defaultMiddleware.length - 1)
+  })
+
+  it('removes the serializable middleware if disabled', () => {
+    const middleware = getDefaultMiddleware({ serializableCheck: false })
+    expect(middleware.length).toBe(defaultMiddleware.length - 1)
+  })
+
+  it('removes the action creator middleware if disabled', () => {
+    const middleware = getDefaultMiddleware({ actionCreatorCheck: false })
+    expect(middleware.length).toBe(defaultMiddleware.length - 1)
+  })
+
+  it('allows passing options to thunk', () => {
+    const extraArgument = 42 as const
+
+    const m2 = getDefaultMiddleware({
+      thunk: false,
+    })
+
+    const dummyMiddleware: Middleware<
+      {
+        (action: Action<'actionListenerMiddleware/add'>): () => void
+      },
+      { counter: number }
+    > = (storeApi) => (next) => (action) => {
+      return next(action)
+    }
+
+    const dummyMiddleware2: Middleware<{}, { counter: number }> =
+      (storeApi) => (next) => (action) => {}
+
+    const testThunk: ThunkAction<
+      void,
+      { counter: number },
+      number,
+      UnknownAction
+    > = (dispatch, getState, extraArg) => {
+      expect(extraArg).toBe(extraArgument)
+    }
+
+    const reducer = () => ({ counter: 123 })
+
+    const store = configureStore({
+      reducer,
+      middleware: (gDM) => {
+        const middleware = gDM({
+          thunk: { extraArgument },
+          immutableCheck: false,
+          serializableCheck: false,
+          actionCreatorCheck: false,
+        })
+
+        const m3 = middleware.concat(dummyMiddleware, dummyMiddleware2)
+
+        return m3
+      },
+    })
+
+    store.dispatch(testThunk)
+  })
+
+  it('allows passing options to immutableCheck', () => {
+    let immutableCheckWasCalled = false
+
+    const middleware = () =>
+      getDefaultMiddleware({
+        thunk: false,
+        immutableCheck: {
+          isImmutable: () => {
+            immutableCheckWasCalled = true
+            return true
+          },
+        },
+        serializableCheck: false,
+        actionCreatorCheck: false,
+      })
+
+    const reducer = () => ({})
+
+    const store = configureStore({
+      reducer,
+      middleware,
+    })
+
+    expect(immutableCheckWasCalled).toBe(true)
+  })
+
+  it('allows passing options to serializableCheck', () => {
+    let serializableCheckWasCalled = false
+
+    const middleware = () =>
+      getDefaultMiddleware({
+        thunk: false,
+        immutableCheck: false,
+        serializableCheck: {
+          isSerializable: () => {
+            serializableCheckWasCalled = true
+            return true
+          },
+        },
+        actionCreatorCheck: false,
+      })
+
+    const reducer = () => ({})
+
+    const store = configureStore({
+      reducer,
+      middleware,
+    })
+
+    store.dispatch({ type: 'TEST_ACTION' })
+
+    expect(serializableCheckWasCalled).toBe(true)
+  })
+})
+
+it('allows passing options to actionCreatorCheck', () => {
+  let actionCreatorCheckWasCalled = false
+
+  const middleware = () =>
+    getDefaultMiddleware({
+      thunk: false,
+      immutableCheck: false,
+      serializableCheck: false,
+      actionCreatorCheck: {
+        isActionCreator: (action: unknown): action is Function => {
+          actionCreatorCheckWasCalled = true
+          return false
+        },
+      },
+    })
+
+  const reducer = () => ({})
+
+  const store = configureStore({
+    reducer,
+    middleware,
+  })
+
+  store.dispatch({ type: 'TEST_ACTION' })
+
+  expect(actionCreatorCheckWasCalled).toBe(true)
+})
+
+describe('Tuple functionality', () => {
+  const middleware1: Middleware = () => (next) => (action) => next(action)
+  const middleware2: Middleware = () => (next) => (action) => next(action)
+  const defaultMiddleware = getDefaultMiddleware()
+  const originalDefaultMiddleware = [...defaultMiddleware]
+
+  test('allows to prepend a single value', () => {
+    const prepended = defaultMiddleware.prepend(middleware1)
+
+    // value is prepended
+    expect(prepended).toEqual([middleware1, ...defaultMiddleware])
+    // returned value is of correct type
+    expect(prepended).toBeInstanceOf(Tuple)
+    // prepended is a new array
+    expect(prepended).not.toEqual(defaultMiddleware)
+    // defaultMiddleware is not modified
+    expect(defaultMiddleware).toEqual(originalDefaultMiddleware)
+  })
+
+  test('allows to prepend multiple values (array as first argument)', () => {
+    const prepended = defaultMiddleware.prepend([middleware1, middleware2])
+
+    // value is prepended
+    expect(prepended).toEqual([middleware1, middleware2, ...defaultMiddleware])
+    // returned value is of correct type
+    expect(prepended).toBeInstanceOf(Tuple)
+    // prepended is a new array
+    expect(prepended).not.toEqual(defaultMiddleware)
+    // defaultMiddleware is not modified
+    expect(defaultMiddleware).toEqual(originalDefaultMiddleware)
+  })
+
+  test('allows to prepend multiple values (rest)', () => {
+    const prepended = defaultMiddleware.prepend(middleware1, middleware2)
+
+    // value is prepended
+    expect(prepended).toEqual([middleware1, middleware2, ...defaultMiddleware])
+    // returned value is of correct type
+    expect(prepended).toBeInstanceOf(Tuple)
+    // prepended is a new array
+    expect(prepended).not.toEqual(defaultMiddleware)
+    // defaultMiddleware is not modified
+    expect(defaultMiddleware).toEqual(originalDefaultMiddleware)
+  })
+
+  test('allows to concat a single value', () => {
+    const concatenated = defaultMiddleware.concat(middleware1)
+
+    // value is concatenated
+    expect(concatenated).toEqual([...defaultMiddleware, middleware1])
+    // returned value is of correct type
+    expect(concatenated).toBeInstanceOf(Tuple)
+    // concatenated is a new array
+    expect(concatenated).not.toEqual(defaultMiddleware)
+    // defaultMiddleware is not modified
+    expect(defaultMiddleware).toEqual(originalDefaultMiddleware)
+  })
+
+  test('allows to concat multiple values (array as first argument)', () => {
+    const concatenated = defaultMiddleware.concat([middleware1, middleware2])
+
+    // value is concatenated
+    expect(concatenated).toEqual([
+      ...defaultMiddleware,
+      middleware1,
+      middleware2,
+    ])
+    // returned value is of correct type
+    expect(concatenated).toBeInstanceOf(Tuple)
+    // concatenated is a new array
+    expect(concatenated).not.toEqual(defaultMiddleware)
+    // defaultMiddleware is not modified
+    expect(defaultMiddleware).toEqual(originalDefaultMiddleware)
+  })
+
+  test('allows to concat multiple values (rest)', () => {
+    const concatenated = defaultMiddleware.concat(middleware1, middleware2)
+
+    // value is concatenated
+    expect(concatenated).toEqual([
+      ...defaultMiddleware,
+      middleware1,
+      middleware2,
+    ])
+    // returned value is of correct type
+    expect(concatenated).toBeInstanceOf(Tuple)
+    // concatenated is a new array
+    expect(concatenated).not.toEqual(defaultMiddleware)
+    // defaultMiddleware is not modified
+    expect(defaultMiddleware).toEqual(originalDefaultMiddleware)
+  })
+
+  test('allows to concat and then prepend', () => {
+    const concatenated = defaultMiddleware
+      .concat(middleware1)
+      .prepend(middleware2)
+
+    expect(concatenated).toEqual([
+      middleware2,
+      ...defaultMiddleware,
+      middleware1,
+    ])
+  })
+
+  test('allows to prepend and then concat', () => {
+    const concatenated = defaultMiddleware
+      .prepend(middleware2)
+      .concat(middleware1)
+
+    expect(concatenated).toEqual([
+      middleware2,
+      ...defaultMiddleware,
+      middleware1,
+    ])
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/immutableStateInvariantMiddleware.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/immutableStateInvariantMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/immutableStateInvariantMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,506 @@
+import { trackForMutations } from '@internal/immutableStateInvariantMiddleware'
+import { noop } from '@internal/listenerMiddleware/utils'
+import type {
+  ImmutableStateInvariantMiddlewareOptions,
+  Middleware,
+  MiddlewareAPI,
+  Store,
+} from '@reduxjs/toolkit'
+import {
+  createImmutableStateInvariantMiddleware,
+  isImmutableDefault,
+} from '@reduxjs/toolkit'
+
+type MWNext = Parameters<ReturnType<Middleware>>[0]
+
+describe('createImmutableStateInvariantMiddleware', () => {
+  let state: { foo: { bar: number[]; baz: string } }
+  const getState: Store['getState'] = () => state
+
+  function middleware(options: ImmutableStateInvariantMiddlewareOptions = {}) {
+    return createImmutableStateInvariantMiddleware(options)({
+      getState,
+    } as MiddlewareAPI)
+  }
+
+  beforeEach(() => {
+    state = { foo: { bar: [2, 3, 4], baz: 'baz' } }
+  })
+
+  it('sends the action through the middleware chain', () => {
+    const next: MWNext = vi.fn()
+    const dispatch = middleware()(next)
+    dispatch({ type: 'SOME_ACTION' })
+
+    expect(next).toHaveBeenCalledWith({
+      type: 'SOME_ACTION',
+    })
+  })
+
+  it('throws if mutating inside the dispatch', () => {
+    const next: MWNext = (action) => {
+      state.foo.bar.push(5)
+      return action
+    }
+
+    const dispatch = middleware()(next)
+
+    expect(() => {
+      dispatch({ type: 'SOME_ACTION' })
+    }).toThrow(new RegExp('foo\\.bar\\.3'))
+  })
+
+  it('throws if mutating between dispatches', () => {
+    const next: MWNext = (action) => action
+
+    const dispatch = middleware()(next)
+
+    dispatch({ type: 'SOME_ACTION' })
+    state.foo.bar.push(5)
+    expect(() => {
+      dispatch({ type: 'SOME_OTHER_ACTION' })
+    }).toThrow(new RegExp('foo\\.bar\\.3'))
+  })
+
+  it('does not throw if not mutating inside the dispatch', () => {
+    const next: MWNext = (action) => {
+      state = { ...state, foo: { ...state.foo, baz: 'changed!' } }
+      return action
+    }
+
+    const dispatch = middleware()(next)
+
+    expect(() => {
+      dispatch({ type: 'SOME_ACTION' })
+    }).not.toThrow()
+  })
+
+  it('does not throw if not mutating between dispatches', () => {
+    const next: MWNext = (action) => action
+
+    const dispatch = middleware()(next)
+
+    dispatch({ type: 'SOME_ACTION' })
+    state = { ...state, foo: { ...state.foo, baz: 'changed!' } }
+    expect(() => {
+      dispatch({ type: 'SOME_OTHER_ACTION' })
+    }).not.toThrow()
+  })
+
+  it('works correctly with circular references', () => {
+    const next: MWNext = (action) => action
+
+    const dispatch = middleware()(next)
+
+    let x: any = {}
+    let y: any = {}
+    x.y = y
+    y.x = x
+
+    expect(() => {
+      dispatch({ type: 'SOME_ACTION', x })
+    }).not.toThrow()
+  })
+
+  it('respects "isImmutable" option', function () {
+    const isImmutable = (value: any) => true
+    const next: MWNext = (action) => {
+      state.foo.bar.push(5)
+      return action
+    }
+
+    const dispatch = middleware({ isImmutable })(next)
+
+    expect(() => {
+      dispatch({ type: 'SOME_ACTION' })
+    }).not.toThrow()
+  })
+
+  it('respects "ignoredPaths" option', () => {
+    const next: MWNext = (action) => {
+      state.foo.bar.push(5)
+      return action
+    }
+
+    const dispatch1 = middleware({ ignoredPaths: ['foo.bar'] })(next)
+
+    expect(() => {
+      dispatch1({ type: 'SOME_ACTION' })
+    }).not.toThrow()
+
+    const dispatch2 = middleware({ ignoredPaths: [/^foo/] })(next)
+
+    expect(() => {
+      dispatch2({ type: 'SOME_ACTION' })
+    }).not.toThrow()
+  })
+
+  it('Should print a warning if execution takes too long', () => {
+    state.foo.bar = new Array(10000).fill({ value: 'more' })
+
+    const next: MWNext = (action) => action
+
+    const dispatch = middleware({ warnAfter: 4 })(next)
+
+    const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(noop)
+
+    try {
+      dispatch({ type: 'SOME_ACTION' })
+
+      expect(consoleWarnSpy).toHaveBeenCalledOnce()
+
+      expect(consoleWarnSpy).toHaveBeenLastCalledWith(
+        expect.stringMatching(
+          /^ImmutableStateInvariantMiddleware took \d*ms, which is more than the warning threshold of 4ms./,
+        ),
+      )
+    } finally {
+      consoleWarnSpy.mockRestore()
+    }
+  })
+
+  it('Should not print a warning if "next" takes too long', () => {
+    const next: MWNext = (action) => {
+      const started = Date.now()
+      while (Date.now() - started < 8) {}
+      return action
+    }
+
+    const dispatch = middleware({ warnAfter: 4 })(next)
+
+    const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(noop)
+
+    try {
+      dispatch({ type: 'SOME_ACTION' })
+
+      expect(consoleWarnSpy).not.toHaveBeenCalled()
+    } finally {
+      consoleWarnSpy.mockRestore()
+    }
+  })
+})
+
+describe('trackForMutations', () => {
+  function testCasesForMutation(spec: any) {
+    it('returns true and the mutated path', () => {
+      const state = spec.getState()
+      const options = spec.middlewareOptions || {}
+      const { isImmutable = isImmutableDefault, ignoredPaths } = options
+      const tracker = trackForMutations(isImmutable, ignoredPaths, state)
+      const newState = spec.fn(state)
+
+      expect(tracker.detectMutations()).toEqual({
+        wasMutated: true,
+        path: spec.path.join('.'),
+      })
+    })
+  }
+
+  function testCasesForNonMutation(spec: any) {
+    it('returns false', () => {
+      const state = spec.getState()
+      const options = spec.middlewareOptions || {}
+      const { isImmutable = isImmutableDefault, ignoredPaths } = options
+      const tracker = trackForMutations(isImmutable, ignoredPaths, state)
+      const newState = spec.fn(state)
+
+      expect(tracker.detectMutations()).toEqual({ wasMutated: false })
+    })
+  }
+
+  interface TestConfig {
+    getState: Store['getState']
+    fn: (s: any) => typeof s | object
+    middlewareOptions?: ImmutableStateInvariantMiddlewareOptions
+    path?: string[]
+  }
+
+  const mutations: Record<string, TestConfig> = {
+    'adding to nested array': {
+      getState: () => ({
+        foo: {
+          bar: [2, 3, 4],
+          baz: 'baz',
+        },
+        stuff: [],
+      }),
+      fn: (s) => {
+        s.foo.bar.push(5)
+        return s
+      },
+      path: ['foo', 'bar', '3'],
+    },
+    'adding to nested array and setting new root object': {
+      getState: () => ({
+        foo: {
+          bar: [2, 3, 4],
+          baz: 'baz',
+        },
+        stuff: [],
+      }),
+      fn: (s) => {
+        s.foo.bar.push(5)
+        return { ...s }
+      },
+      path: ['foo', 'bar', '3'],
+    },
+    'changing nested string': {
+      getState: () => ({
+        foo: {
+          bar: [2, 3, 4],
+          baz: 'baz',
+        },
+        stuff: [],
+      }),
+      fn: (s) => {
+        s.foo.baz = 'changed!'
+        return s
+      },
+      path: ['foo', 'baz'],
+    },
+    'removing nested state': {
+      getState: () => ({
+        foo: {
+          bar: [2, 3, 4],
+          baz: 'baz',
+        },
+        stuff: [],
+      }),
+      fn: (s) => {
+        delete s.foo
+        return s
+      },
+      path: ['foo'],
+    },
+    'adding to array': {
+      getState: () => ({
+        foo: {
+          bar: [2, 3, 4],
+          baz: 'baz',
+        },
+        stuff: [],
+      }),
+      fn: (s) => {
+        s.stuff.push(1)
+        return s
+      },
+      path: ['stuff', '0'],
+    },
+    'adding object to array': {
+      getState: () => ({
+        stuff: [],
+      }),
+      fn: (s) => {
+        s.stuff.push({ foo: 1, bar: 2 })
+        return s
+      },
+      path: ['stuff', '0'],
+    },
+    'mutating previous state and returning new state': {
+      getState: () => ({ counter: 0 }),
+      fn: (s) => {
+        s.mutation = true
+        return { ...s, counter: s.counter + 1 }
+      },
+      path: ['mutation'],
+    },
+    'mutating previous state with non immutable type and returning new state': {
+      getState: () => ({ counter: 0 }),
+      fn: (s) => {
+        s.mutation = [1, 2, 3]
+        return { ...s, counter: s.counter + 1 }
+      },
+      path: ['mutation'],
+    },
+    'mutating previous state with non immutable type and returning new state without that property':
+      {
+        getState: () => ({ counter: 0 }),
+        fn: (s) => {
+          s.mutation = [1, 2, 3]
+          return { counter: s.counter + 1 }
+        },
+        path: ['mutation'],
+      },
+    'mutating previous state with non immutable type and returning new simple state':
+      {
+        getState: () => ({ counter: 0 }),
+        fn: (s) => {
+          s.mutation = [1, 2, 3]
+          return 1
+        },
+        path: ['mutation'],
+      },
+    'mutating previous state by deleting property and returning new state without that property':
+      {
+        getState: () => ({ counter: 0, toBeDeleted: true }),
+        fn: (s) => {
+          delete s.toBeDeleted
+          return { counter: s.counter + 1 }
+        },
+        path: ['toBeDeleted'],
+      },
+    'mutating previous state by deleting nested property': {
+      getState: () => ({ nested: { counter: 0, toBeDeleted: true }, foo: 1 }),
+      fn: (s) => {
+        delete s.nested.toBeDeleted
+        return { nested: { counter: s.counter + 1 } }
+      },
+      path: ['nested', 'toBeDeleted'],
+    },
+    'update reference': {
+      getState: () => ({ foo: {} }),
+      fn: (s) => {
+        s.foo = {}
+        return s
+      },
+      path: ['foo'],
+    },
+    'cannot ignore root state': {
+      getState: () => ({ foo: {} }),
+      fn: (s) => {
+        s.foo = {}
+        return s
+      },
+      middlewareOptions: {
+        ignoredPaths: [''],
+      },
+      path: ['foo'],
+    },
+    'catching state mutation in non-ignored branch': {
+      getState: () => ({
+        foo: {
+          bar: [1, 2],
+        },
+        boo: {
+          yah: [1, 2],
+        },
+      }),
+      fn: (s) => {
+        s.foo.bar.push(3)
+        s.boo.yah.push(3)
+        return s
+      },
+      middlewareOptions: {
+        ignoredPaths: ['foo'],
+      },
+      path: ['boo', 'yah', '2'],
+    },
+  }
+
+  Object.keys(mutations).forEach((mutationDesc) => {
+    describe(mutationDesc, () => {
+      testCasesForMutation(mutations[mutationDesc])
+    })
+  })
+
+  const nonMutations: Record<string, TestConfig> = {
+    'not doing anything': {
+      getState: () => ({ a: 1, b: 2 }),
+      fn: (s) => s,
+    },
+    'from undefined to something': {
+      getState: () => undefined,
+      fn: (s) => ({ foo: 'bar' }),
+    },
+    'returning same state': {
+      getState: () => ({
+        foo: {
+          bar: [2, 3, 4],
+          baz: 'baz',
+        },
+        stuff: [],
+      }),
+      fn: (s) => s,
+    },
+    'returning a new state object with nested new string': {
+      getState: () => ({
+        foo: {
+          bar: [2, 3, 4],
+          baz: 'baz',
+        },
+        stuff: [],
+      }),
+      fn: (s) => {
+        return { ...s, foo: { ...s.foo, baz: 'changed!' } }
+      },
+    },
+    'returning a new state object with nested new array': {
+      getState: () => ({
+        foo: {
+          bar: [2, 3, 4],
+          baz: 'baz',
+        },
+        stuff: [],
+      }),
+      fn: (s) => {
+        return { ...s, foo: { ...s.foo, bar: [...s.foo.bar, 5] } }
+      },
+    },
+    'removing nested state': {
+      getState: () => ({
+        foo: {
+          bar: [2, 3, 4],
+          baz: 'baz',
+        },
+        stuff: [],
+      }),
+      fn: (s) => {
+        return { ...s, foo: {} }
+      },
+    },
+    'having a NaN in the state': {
+      getState: () => ({ a: NaN, b: Number.NaN }),
+      fn: (s) => s,
+    },
+    'ignoring branches from mutation detection': {
+      getState: () => ({
+        foo: {
+          bar: 'bar',
+        },
+      }),
+      fn: (s) => {
+        s.foo.bar = 'baz'
+        return s
+      },
+      middlewareOptions: {
+        ignoredPaths: ['foo'],
+      },
+    },
+    'ignoring nested branches from mutation detection': {
+      getState: () => ({
+        foo: {
+          bar: [1, 2],
+          boo: {
+            yah: [1, 2],
+          },
+        },
+      }),
+      fn: (s) => {
+        s.foo.bar.push(3)
+        s.foo.boo.yah.push(3)
+        return s
+      },
+      middlewareOptions: {
+        ignoredPaths: ['foo.bar', 'foo.boo.yah'],
+      },
+    },
+    'ignoring nested array indices from mutation detection': {
+      getState: () => ({
+        stuff: [{ a: 1 }, { a: 2 }],
+      }),
+      fn: (s) => {
+        s.stuff[1].a = 3
+        return s
+      },
+      middlewareOptions: {
+        ignoredPaths: ['stuff.1'],
+      },
+    },
+  }
+
+  Object.keys(nonMutations).forEach((nonMutationDesc) => {
+    describe(nonMutationDesc, () => {
+      testCasesForNonMutation(nonMutations[nonMutationDesc])
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/mapBuilders.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/mapBuilders.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/mapBuilders.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,268 @@
+import type { SerializedError } from '@internal/createAsyncThunk'
+import { createAsyncThunk } from '@internal/createAsyncThunk'
+import { executeReducerBuilderCallback } from '@internal/mapBuilders'
+import type { UnknownAction } from '@reduxjs/toolkit'
+import { createAction } from '@reduxjs/toolkit'
+
+describe('type tests', () => {
+  test('builder callback for actionMap', () => {
+    const increment = createAction<number, 'increment'>('increment')
+
+    const decrement = createAction<number, 'decrement'>('decrement')
+
+    executeReducerBuilderCallback<number>((builder) => {
+      builder.addCase(increment, (state, action) => {
+        expectTypeOf(state).toBeNumber()
+
+        expectTypeOf(action).toEqualTypeOf<{
+          type: 'increment'
+          payload: number
+        }>()
+
+        expectTypeOf(state).not.toBeString()
+
+        expectTypeOf(action).not.toMatchTypeOf<{
+          type: 'increment'
+          payload: string
+        }>()
+
+        expectTypeOf(action).not.toMatchTypeOf<{
+          type: 'decrement'
+          payload: number
+        }>()
+      })
+
+      builder.addCase('increment', (state, action) => {
+        expectTypeOf(state).toBeNumber()
+
+        expectTypeOf(action).toEqualTypeOf<{ type: 'increment' }>()
+
+        expectTypeOf(state).not.toBeString()
+
+        expectTypeOf(action).not.toMatchTypeOf<{ type: 'decrement' }>()
+
+        // this cannot be inferred and has to be manually specified
+        expectTypeOf(action).not.toMatchTypeOf<{
+          type: 'increment'
+          payload: number
+        }>()
+      })
+
+      builder.addCase(
+        increment,
+        (state, action: ReturnType<typeof increment>) => state,
+      )
+
+      // @ts-expect-error
+      builder.addCase(
+        increment,
+        (state, action: ReturnType<typeof decrement>) => state,
+      )
+
+      builder.addCase(
+        'increment',
+        (state, action: ReturnType<typeof increment>) => state,
+      )
+
+      // @ts-expect-error
+      builder.addCase(
+        'decrement',
+        (state, action: ReturnType<typeof increment>) => state,
+      )
+
+      // action type is inferred
+      builder.addMatcher(increment.match, (state, action) => {
+        expectTypeOf(action).toEqualTypeOf<ReturnType<typeof increment>>()
+      })
+
+      test('action type is inferred when type predicate lacks `type` property', () => {
+        type PredicateWithoutTypeProperty = {
+          payload: number
+        }
+
+        builder.addMatcher(
+          (action): action is PredicateWithoutTypeProperty => true,
+          (state, action) => {
+            expectTypeOf(action).toMatchTypeOf<PredicateWithoutTypeProperty>()
+
+            expectTypeOf(action).toMatchTypeOf<UnknownAction>()
+          },
+        )
+      })
+
+      // action type defaults to UnknownAction if no type predicate matcher is passed
+      builder.addMatcher(
+        () => true,
+        (state, action) => {
+          expectTypeOf(action).toMatchTypeOf<UnknownAction>()
+        },
+      )
+
+      // with a boolean checker, action can also be typed by type argument
+      builder.addMatcher<{ foo: boolean }>(
+        () => true,
+        (state, action) => {
+          expectTypeOf(action).toMatchTypeOf<{ foo: boolean }>()
+
+          expectTypeOf(action).toMatchTypeOf<UnknownAction>()
+        },
+      )
+
+      // addCase().addMatcher() is possible, action type inferred correctly
+      builder
+        .addCase(
+          'increment',
+          (state, action: ReturnType<typeof increment>) => state,
+        )
+        .addMatcher(decrement.match, (state, action) => {
+          expectTypeOf(action).toEqualTypeOf<ReturnType<typeof decrement>>()
+        })
+
+      // addCase().addDefaultCase() is possible, action type is UnknownAction
+      builder
+        .addCase(
+          'increment',
+          (state, action: ReturnType<typeof increment>) => state,
+        )
+        .addDefaultCase((state, action) => {
+          expectTypeOf(action).toMatchTypeOf<UnknownAction>()
+        })
+
+      test('addMatcher() should prevent further calls to addCase()', () => {
+        const b = builder.addMatcher(increment.match, () => {})
+
+        expectTypeOf(b).not.toHaveProperty('addCase')
+
+        expectTypeOf(b.addMatcher).toBeCallableWith(increment.match, () => {})
+
+        expectTypeOf(b.addDefaultCase).toBeCallableWith(() => {})
+      })
+
+      test('addDefaultCase() should prevent further calls to addCase(), addMatcher() and addDefaultCase', () => {
+        const b = builder.addDefaultCase(() => {})
+
+        expectTypeOf(b).not.toHaveProperty('addCase')
+
+        expectTypeOf(b).not.toHaveProperty('addMatcher')
+
+        expectTypeOf(b).not.toHaveProperty('addDefaultCase')
+      })
+
+      describe('`createAsyncThunk` actions work with `mapBuilder`', () => {
+        test('case 1: normal `createAsyncThunk`', () => {
+          const thunk = createAsyncThunk('test', () => {
+            return 'ret' as const
+          })
+          builder.addCase(thunk.pending, (_, action) => {
+            expectTypeOf(action).toMatchTypeOf<{
+              payload: undefined
+              meta: {
+                arg: void
+                requestId: string
+                requestStatus: 'pending'
+              }
+            }>()
+          })
+
+          builder.addCase(thunk.rejected, (_, action) => {
+            expectTypeOf(action).toMatchTypeOf<{
+              payload: unknown
+              error: SerializedError
+              meta: {
+                arg: void
+                requestId: string
+                requestStatus: 'rejected'
+                aborted: boolean
+                condition: boolean
+                rejectedWithValue: boolean
+              }
+            }>()
+          })
+          builder.addCase(thunk.fulfilled, (_, action) => {
+            expectTypeOf(action).toMatchTypeOf<{
+              payload: 'ret'
+              meta: {
+                arg: void
+                requestId: string
+                requestStatus: 'fulfilled'
+              }
+            }>()
+          })
+        })
+      })
+
+      test('case 2: `createAsyncThunk` with `meta`', () => {
+        const thunk = createAsyncThunk<
+          'ret',
+          void,
+          {
+            pendingMeta: { startedTimeStamp: number }
+            fulfilledMeta: {
+              fulfilledTimeStamp: number
+              baseQueryMeta: 'meta!'
+            }
+            rejectedMeta: {
+              baseQueryMeta: 'meta!'
+            }
+          }
+        >(
+          'test',
+          (_, api) => {
+            return api.fulfillWithValue('ret' as const, {
+              fulfilledTimeStamp: 5,
+              baseQueryMeta: 'meta!',
+            })
+          },
+          {
+            getPendingMeta() {
+              return { startedTimeStamp: 0 }
+            },
+          },
+        )
+
+        builder.addCase(thunk.pending, (_, action) => {
+          expectTypeOf(action).toMatchTypeOf<{
+            payload: undefined
+            meta: {
+              arg: void
+              requestId: string
+              requestStatus: 'pending'
+              startedTimeStamp: number
+            }
+          }>()
+        })
+
+        builder.addCase(thunk.rejected, (_, action) => {
+          expectTypeOf(action).toMatchTypeOf<{
+            payload: unknown
+            error: SerializedError
+            meta: {
+              arg: void
+              requestId: string
+              requestStatus: 'rejected'
+              aborted: boolean
+              condition: boolean
+              rejectedWithValue: boolean
+              baseQueryMeta?: 'meta!'
+            }
+          }>()
+
+          if (action.meta.rejectedWithValue) {
+            expectTypeOf(action.meta.baseQueryMeta).toEqualTypeOf<'meta!'>()
+          }
+        })
+        builder.addCase(thunk.fulfilled, (_, action) => {
+          expectTypeOf(action).toMatchTypeOf<{
+            payload: 'ret'
+            meta: {
+              arg: void
+              requestId: string
+              requestStatus: 'fulfilled'
+              baseQueryMeta: 'meta!'
+            }
+          }>()
+        })
+      })
+    })
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/matchers.test-d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/matchers.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/matchers.test-d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,296 @@
+import type { UnknownAction } from 'redux'
+import type { SerializedError } from '../../src'
+import {
+  createAction,
+  createAsyncThunk,
+  isAllOf,
+  isAnyOf,
+  isAsyncThunkAction,
+  isFulfilled,
+  isPending,
+  isRejected,
+  isRejectedWithValue,
+} from '../../src'
+
+const action: UnknownAction = { type: 'foo' }
+
+describe('type tests', () => {
+  describe('isAnyOf', () => {
+    test('isAnyOf correctly narrows types when used with action creators', () => {
+      const actionA = createAction('a', () => {
+        return {
+          payload: {
+            prop1: 1,
+            prop3: 2,
+          },
+        }
+      })
+
+      const actionB = createAction('b', () => {
+        return {
+          payload: {
+            prop1: 1,
+            prop2: 2,
+          },
+        }
+      })
+
+      if (isAnyOf(actionA, actionB)(action)) {
+        expectTypeOf(action.payload).toHaveProperty('prop1')
+
+        expectTypeOf(action.payload).not.toHaveProperty('prop2')
+
+        expectTypeOf(action.payload).not.toHaveProperty('prop3')
+      }
+    })
+
+    test('isAnyOf correctly narrows types when used with async thunks', () => {
+      const asyncThunk1 = createAsyncThunk<{ prop1: number; prop3: number }>(
+        'asyncThunk1',
+
+        async () => {
+          return {
+            prop1: 1,
+            prop3: 3,
+          }
+        },
+      )
+
+      const asyncThunk2 = createAsyncThunk<{ prop1: number; prop2: number }>(
+        'asyncThunk2',
+
+        async () => {
+          return {
+            prop1: 1,
+            prop2: 2,
+          }
+        },
+      )
+
+      if (isAnyOf(asyncThunk1.fulfilled, asyncThunk2.fulfilled)(action)) {
+        expectTypeOf(action.payload).toHaveProperty('prop1')
+
+        expectTypeOf(action.payload).not.toHaveProperty('prop2')
+
+        expectTypeOf(action.payload).not.toHaveProperty('prop3')
+      }
+    })
+
+    test('isAnyOf correctly narrows types when used with type guards', () => {
+      interface ActionA {
+        type: 'a'
+        payload: {
+          prop1: 1
+          prop3: 2
+        }
+      }
+
+      interface ActionB {
+        type: 'b'
+        payload: {
+          prop1: 1
+          prop2: 2
+        }
+      }
+
+      const guardA = (v: any): v is ActionA => {
+        return v.type === 'a'
+      }
+
+      const guardB = (v: any): v is ActionB => {
+        return v.type === 'b'
+      }
+
+      if (isAnyOf(guardA, guardB)(action)) {
+        expectTypeOf(action.payload).toHaveProperty('prop1')
+
+        expectTypeOf(action.payload).not.toHaveProperty('prop2')
+
+        expectTypeOf(action.payload).not.toHaveProperty('prop3')
+      }
+    })
+  })
+
+  describe('isAllOf', () => {
+    interface SpecialAction {
+      payload: {
+        special: boolean
+      }
+    }
+
+    const isSpecialAction = (v: any): v is SpecialAction => {
+      return v.meta.isSpecial
+    }
+
+    test('isAllOf correctly narrows types when used with action creators and type guards', () => {
+      const actionA = createAction('a', () => {
+        return {
+          payload: {
+            prop1: 1,
+            prop3: 2,
+          },
+        }
+      })
+
+      if (isAllOf(actionA, isSpecialAction)(action)) {
+        expectTypeOf(action.payload).toHaveProperty('prop1')
+
+        expectTypeOf(action.payload).not.toHaveProperty('prop2')
+
+        expectTypeOf(action.payload).toHaveProperty('prop3')
+
+        expectTypeOf(action.payload).toHaveProperty('special')
+      }
+    })
+
+    test('isAllOf correctly narrows types when used with async thunks and type guards', () => {
+      const asyncThunk1 = createAsyncThunk<{ prop1: number; prop3: number }>(
+        'asyncThunk1',
+
+        async () => {
+          return {
+            prop1: 1,
+            prop3: 3,
+          }
+        },
+      )
+
+      if (isAllOf(asyncThunk1.fulfilled, isSpecialAction)(action)) {
+        expectTypeOf(action.payload).toHaveProperty('prop1')
+
+        expectTypeOf(action.payload).not.toHaveProperty('prop2')
+
+        expectTypeOf(action.payload).toHaveProperty('prop3')
+
+        expectTypeOf(action.payload).toHaveProperty('special')
+      }
+    })
+
+    test('isAnyOf correctly narrows types when used with type guards', () => {
+      interface ActionA {
+        type: 'a'
+        payload: {
+          prop1: 1
+          prop3: 2
+        }
+      }
+
+      const guardA = (v: any): v is ActionA => {
+        return v.type === 'a'
+      }
+
+      if (isAllOf(guardA, isSpecialAction)(action)) {
+        expectTypeOf(action.payload).toHaveProperty('prop1')
+
+        expectTypeOf(action.payload).not.toHaveProperty('prop2')
+
+        expectTypeOf(action.payload).toHaveProperty('prop3')
+
+        expectTypeOf(action.payload).toHaveProperty('special')
+      }
+    })
+
+    test('isPending correctly narrows types', () => {
+      if (isPending(action)) {
+        expectTypeOf(action.payload).toBeUndefined()
+
+        expectTypeOf(action).not.toHaveProperty('error')
+      }
+
+      const thunk = createAsyncThunk<string>('a', () => 'result')
+
+      if (isPending(thunk)(action)) {
+        expectTypeOf(action.payload).toBeUndefined()
+
+        expectTypeOf(action).not.toHaveProperty('error')
+      }
+    })
+
+    test('isRejected correctly narrows types', () => {
+      if (isRejected(action)) {
+        // might be there if rejected with payload
+        expectTypeOf(action.payload).toBeUnknown()
+
+        expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+      }
+
+      const thunk = createAsyncThunk<string>('a', () => 'result')
+
+      if (isRejected(thunk)(action)) {
+        // might be there if rejected with payload
+        expectTypeOf(action.payload).toBeUnknown()
+
+        expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+      }
+    })
+
+    test('isFulfilled correctly narrows types', () => {
+      if (isFulfilled(action)) {
+        expectTypeOf(action.payload).toBeUnknown()
+
+        expectTypeOf(action).not.toHaveProperty('error')
+      }
+
+      const thunk = createAsyncThunk<string>('a', () => 'result')
+      if (isFulfilled(thunk)(action)) {
+        expectTypeOf(action.payload).toBeString()
+
+        expectTypeOf(action).not.toHaveProperty('error')
+      }
+    })
+
+    test('isAsyncThunkAction correctly narrows types', () => {
+      if (isAsyncThunkAction(action)) {
+        expectTypeOf(action.payload).toBeUnknown()
+
+        // do not expect an error property because pending/fulfilled lack it
+        expectTypeOf(action).not.toHaveProperty('error')
+      }
+
+      const thunk = createAsyncThunk<string>('a', () => 'result')
+      if (isAsyncThunkAction(thunk)(action)) {
+        // we should expect the payload to be available, but of unknown type because the action may be pending/rejected
+        expectTypeOf(action.payload).toBeUnknown()
+
+        // do not expect an error property because pending/fulfilled lack it
+        expectTypeOf(action).not.toHaveProperty('error')
+      }
+    })
+
+    test('isRejectedWithValue correctly narrows types', () => {
+      if (isRejectedWithValue(action)) {
+        expectTypeOf(action.payload).toBeUnknown()
+
+        expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+      }
+
+      const thunk = createAsyncThunk<
+        string,
+        void,
+        { rejectValue: { message: string } }
+      >('a', () => 'result')
+      if (isRejectedWithValue(thunk)(action)) {
+        expectTypeOf(action.payload).toEqualTypeOf({ message: '' as string })
+
+        expectTypeOf(action.error).toEqualTypeOf<SerializedError>()
+      }
+    })
+  })
+
+  test('matchersAcceptSpreadArguments', () => {
+    const thunk1 = createAsyncThunk('a', () => 'a')
+    const thunk2 = createAsyncThunk('b', () => 'b')
+    const interestingThunks = [thunk1, thunk2]
+    const interestingPendingThunks = interestingThunks.map(
+      (thunk) => thunk.pending,
+    )
+    const interestingFulfilledThunks = interestingThunks.map(
+      (thunk) => thunk.fulfilled,
+    )
+
+    const isLoading = isAnyOf(...interestingPendingThunks)
+    const isNotLoading = isAnyOf(...interestingFulfilledThunks)
+
+    const isAllLoading = isAllOf(...interestingPendingThunks)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/matchers.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/matchers.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/matchers.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,461 @@
+import { vi } from 'vitest'
+import type { ThunkAction, UnknownAction } from '@reduxjs/toolkit'
+import {
+  isAllOf,
+  isAnyOf,
+  isAsyncThunkAction,
+  isFulfilled,
+  isPending,
+  isRejected,
+  isRejectedWithValue,
+  createAction,
+  createAsyncThunk,
+  createReducer,
+} from '@reduxjs/toolkit'
+
+const thunk: ThunkAction<any, any, any, UnknownAction> = () => {}
+
+describe('isAnyOf', () => {
+  it('returns true only if any matchers match (match function)', () => {
+    const actionA = createAction<string>('a')
+    const actionB = createAction<number>('b')
+
+    const trueAction = {
+      type: 'a',
+      payload: 'payload',
+    }
+
+    expect(isAnyOf(actionA, actionB)(trueAction)).toEqual(true)
+
+    const falseAction = {
+      type: 'c',
+      payload: 'payload',
+    }
+
+    expect(isAnyOf(actionA, actionB)(falseAction)).toEqual(false)
+  })
+
+  it('returns true only if any type guards match', () => {
+    const actionA = createAction<string>('a')
+    const actionB = createAction<number>('b')
+
+    const isActionA = actionA.match
+    const isActionB = actionB.match
+
+    const trueAction = {
+      type: 'a',
+      payload: 'payload',
+    }
+
+    expect(isAnyOf(isActionA, isActionB)(trueAction)).toEqual(true)
+
+    const falseAction = {
+      type: 'c',
+      payload: 'payload',
+    }
+
+    expect(isAnyOf(isActionA, isActionB)(falseAction)).toEqual(false)
+  })
+
+  it('returns true only if any matchers match (thunk action creators)', () => {
+    const thunkA = createAsyncThunk<string>('a', () => {
+      return 'noop'
+    })
+    const thunkB = createAsyncThunk<number>('b', () => {
+      return 0
+    })
+
+    const action = thunkA.fulfilled('fakeRequestId', 'test')
+
+    expect(isAnyOf(thunkA.fulfilled, thunkB.fulfilled)(action)).toEqual(true)
+
+    expect(
+      isAnyOf(thunkA.pending, thunkA.rejected, thunkB.fulfilled)(action),
+    ).toEqual(false)
+  })
+
+  it('works with reducers', () => {
+    const actionA = createAction<string>('a')
+    const actionB = createAction<number>('b')
+
+    const trueAction = {
+      type: 'a',
+      payload: 'payload',
+    }
+
+    const initialState = { value: false }
+
+    const reducer = createReducer(initialState, (builder) => {
+      builder.addMatcher(isAnyOf(actionA, actionB), (state) => {
+        return { ...state, value: true }
+      })
+    })
+
+    expect(reducer(initialState, trueAction)).toEqual({ value: true })
+
+    const falseAction = {
+      type: 'c',
+      payload: 'payload',
+    }
+
+    expect(reducer(initialState, falseAction)).toEqual(initialState)
+  })
+})
+
+describe('isAllOf', () => {
+  it('returns true only if all matchers match', () => {
+    const actionA = createAction<string>('a')
+
+    interface SpecialAction {
+      payload: 'SPECIAL'
+    }
+
+    const isActionSpecial = (action: any): action is SpecialAction => {
+      return action.payload === 'SPECIAL'
+    }
+
+    const trueAction = {
+      type: 'a',
+      payload: 'SPECIAL',
+    }
+
+    expect(isAllOf(actionA, isActionSpecial)(trueAction)).toEqual(true)
+
+    const falseAction = {
+      type: 'a',
+      payload: 'ORDINARY',
+    }
+
+    expect(isAllOf(actionA, isActionSpecial)(falseAction)).toEqual(false)
+
+    const thunkA = createAsyncThunk<string>('a', () => 'result')
+
+    const specialThunkAction = thunkA.fulfilled('SPECIAL', 'fakeRequestId')
+
+    expect(isAllOf(thunkA.fulfilled, isActionSpecial)(specialThunkAction)).toBe(
+      true,
+    )
+
+    const ordinaryThunkAction = thunkA.fulfilled('ORDINARY', 'fakeRequestId')
+
+    expect(
+      isAllOf(thunkA.fulfilled, isActionSpecial)(ordinaryThunkAction),
+    ).toBe(false)
+  })
+})
+
+describe('isPending', () => {
+  test('should return false for a regular action', () => {
+    const action = createAction<string>('action/type')('testPayload')
+
+    expect(isPending()(action)).toBe(false)
+    expect(isPending(action)).toBe(false)
+    expect(isPending(thunk)).toBe(false)
+  })
+
+  test('should return true only for pending async thunk actions', () => {
+    const thunk = createAsyncThunk<string>('a', () => 'result')
+
+    const pendingAction = thunk.pending('fakeRequestId')
+    expect(isPending()(pendingAction)).toBe(true)
+    expect(isPending(pendingAction)).toBe(true)
+
+    const rejectedAction = thunk.rejected(
+      new Error('rejected'),
+      'fakeRequestId',
+    )
+    expect(isPending()(rejectedAction)).toBe(false)
+
+    const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+    expect(isPending()(fulfilledAction)).toBe(false)
+  })
+
+  test('should return true only for thunks provided as arguments', () => {
+    const thunkA = createAsyncThunk<string>('a', () => 'result')
+    const thunkB = createAsyncThunk<string>('b', () => 'result')
+    const thunkC = createAsyncThunk<string>('c', () => 'result')
+
+    const matchAC = isPending(thunkA, thunkC)
+    const matchB = isPending(thunkB)
+
+    function testPendingAction(
+      thunk: typeof thunkA | typeof thunkB | typeof thunkC,
+      expected: boolean,
+    ) {
+      const pendingAction = thunk.pending('fakeRequestId')
+      expect(matchAC(pendingAction)).toBe(expected)
+      expect(matchB(pendingAction)).toBe(!expected)
+
+      const rejectedAction = thunk.rejected(
+        new Error('rejected'),
+        'fakeRequestId',
+      )
+      expect(matchAC(rejectedAction)).toBe(false)
+
+      const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+      expect(matchAC(fulfilledAction)).toBe(false)
+    }
+
+    testPendingAction(thunkA, true)
+    testPendingAction(thunkC, true)
+    testPendingAction(thunkB, false)
+  })
+})
+
+describe('isRejected', () => {
+  test('should return false for a regular action', () => {
+    const action = createAction<string>('action/type')('testPayload')
+
+    expect(isRejected()(action)).toBe(false)
+    expect(isRejected(action)).toBe(false)
+    expect(isRejected(thunk)).toBe(false)
+  })
+
+  test('should return true only for rejected async thunk actions', () => {
+    const thunk = createAsyncThunk<string>('a', () => 'result')
+
+    const pendingAction = thunk.pending('fakeRequestId')
+    expect(isRejected()(pendingAction)).toBe(false)
+
+    const rejectedAction = thunk.rejected(
+      new Error('rejected'),
+      'fakeRequestId',
+    )
+    expect(isRejected()(rejectedAction)).toBe(true)
+    expect(isRejected(rejectedAction)).toBe(true)
+
+    const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+    expect(isRejected()(fulfilledAction)).toBe(false)
+  })
+
+  test('should return true only for thunks provided as arguments', () => {
+    const thunkA = createAsyncThunk<string>('a', () => 'result')
+    const thunkB = createAsyncThunk<string>('b', () => 'result')
+    const thunkC = createAsyncThunk<string>('c', () => 'result')
+
+    const matchAC = isRejected(thunkA, thunkC)
+    const matchB = isRejected(thunkB)
+
+    function testRejectedAction(
+      thunk: typeof thunkA | typeof thunkB | typeof thunkC,
+      expected: boolean,
+    ) {
+      const pendingAction = thunk.pending('fakeRequestId')
+      expect(matchAC(pendingAction)).toBe(false)
+
+      const rejectedAction = thunk.rejected(
+        new Error('rejected'),
+        'fakeRequestId',
+      )
+      expect(matchAC(rejectedAction)).toBe(expected)
+      expect(matchB(rejectedAction)).toBe(!expected)
+
+      const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+      expect(matchAC(fulfilledAction)).toBe(false)
+    }
+
+    testRejectedAction(thunkA, true)
+    testRejectedAction(thunkC, true)
+    testRejectedAction(thunkB, false)
+  })
+})
+
+describe('isRejectedWithValue', () => {
+  test('should return false for a regular action', () => {
+    const action = createAction<string>('action/type')('testPayload')
+
+    expect(isRejectedWithValue()(action)).toBe(false)
+    expect(isRejectedWithValue(action)).toBe(false)
+    expect(isRejectedWithValue(thunk)).toBe(false)
+  })
+
+  test('should return true only for rejected-with-value async thunk actions', async () => {
+    const thunk = createAsyncThunk<string>('a', (_, { rejectWithValue }) => {
+      return rejectWithValue('rejectWithValue!')
+    })
+
+    const pendingAction = thunk.pending('fakeRequestId')
+    expect(isRejectedWithValue()(pendingAction)).toBe(false)
+
+    const rejectedAction = thunk.rejected(
+      new Error('rejected'),
+      'fakeRequestId',
+    )
+    expect(isRejectedWithValue()(rejectedAction)).toBe(false)
+
+    const getState = vi.fn(() => ({}))
+    const dispatch = vi.fn((x: any) => x)
+    const extra = {}
+
+    // note: doesn't throw because we don't unwrap it
+    const rejectedWithValueAction = await thunk()(dispatch, getState, extra)
+
+    expect(isRejectedWithValue()(rejectedWithValueAction)).toBe(true)
+
+    const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+    expect(isRejectedWithValue()(fulfilledAction)).toBe(false)
+  })
+
+  test('should return true only for thunks provided as arguments', async () => {
+    const payloadCreator = (_: any, { rejectWithValue }: any) => {
+      return rejectWithValue('rejectWithValue!')
+    }
+
+    const thunkA = createAsyncThunk<string>('a', payloadCreator)
+    const thunkB = createAsyncThunk<string>('b', payloadCreator)
+    const thunkC = createAsyncThunk<string>('c', payloadCreator)
+
+    const matchAC = isRejectedWithValue(thunkA, thunkC)
+    const matchB = isRejectedWithValue(thunkB)
+
+    async function testRejectedAction(
+      thunk: typeof thunkA | typeof thunkB | typeof thunkC,
+      expected: boolean,
+    ) {
+      const pendingAction = thunk.pending('fakeRequestId')
+      expect(matchAC(pendingAction)).toBe(false)
+
+      const rejectedAction = thunk.rejected(
+        new Error('rejected'),
+        'fakeRequestId',
+      )
+      // rejected-with-value is a narrower requirement than rejected
+      expect(matchAC(rejectedAction)).toBe(false)
+
+      const getState = vi.fn(() => ({}))
+      const dispatch = vi.fn((x: any) => x)
+      const extra = {}
+
+      // note: doesn't throw because we don't unwrap it
+      const rejectedWithValueAction = await thunk()(dispatch, getState, extra)
+
+      expect(matchAC(rejectedWithValueAction)).toBe(expected)
+      expect(matchB(rejectedWithValueAction)).toBe(!expected)
+
+      const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+      expect(matchAC(fulfilledAction)).toBe(false)
+    }
+
+    await testRejectedAction(thunkA, true)
+    await testRejectedAction(thunkC, true)
+    await testRejectedAction(thunkB, false)
+  })
+})
+
+describe('isFulfilled', () => {
+  test('should return false for a regular action', () => {
+    const action = createAction<string>('action/type')('testPayload')
+
+    expect(isFulfilled()(action)).toBe(false)
+    expect(isFulfilled(action)).toBe(false)
+    expect(isFulfilled(thunk)).toBe(false)
+  })
+
+  test('should return true only for fulfilled async thunk actions', () => {
+    const thunk = createAsyncThunk<string>('a', () => 'result')
+
+    const pendingAction = thunk.pending('fakeRequestId')
+    expect(isFulfilled()(pendingAction)).toBe(false)
+
+    const rejectedAction = thunk.rejected(
+      new Error('rejected'),
+      'fakeRequestId',
+    )
+    expect(isFulfilled()(rejectedAction)).toBe(false)
+
+    const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+    expect(isFulfilled()(fulfilledAction)).toBe(true)
+    expect(isFulfilled(fulfilledAction)).toBe(true)
+  })
+
+  test('should return true only for thunks provided as arguments', () => {
+    const thunkA = createAsyncThunk<string>('a', () => 'result')
+    const thunkB = createAsyncThunk<string>('b', () => 'result')
+    const thunkC = createAsyncThunk<string>('c', () => 'result')
+
+    const matchAC = isFulfilled(thunkA, thunkC)
+    const matchB = isFulfilled(thunkB)
+
+    function testFulfilledAction(
+      thunk: typeof thunkA | typeof thunkB | typeof thunkC,
+      expected: boolean,
+    ) {
+      const pendingAction = thunk.pending('fakeRequestId')
+      expect(matchAC(pendingAction)).toBe(false)
+
+      const rejectedAction = thunk.rejected(
+        new Error('rejected'),
+        'fakeRequestId',
+      )
+      expect(matchAC(rejectedAction)).toBe(false)
+
+      const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+      expect(matchAC(fulfilledAction)).toBe(expected)
+      expect(matchB(fulfilledAction)).toBe(!expected)
+    }
+
+    testFulfilledAction(thunkA, true)
+    testFulfilledAction(thunkC, true)
+    testFulfilledAction(thunkB, false)
+  })
+})
+
+describe('isAsyncThunkAction', () => {
+  test('should return false for a regular action', () => {
+    const action = createAction<string>('action/type')('testPayload')
+
+    expect(isAsyncThunkAction()(action)).toBe(false)
+    expect(isAsyncThunkAction(action)).toBe(false)
+    expect(isAsyncThunkAction(thunk)).toBe(false)
+  })
+
+  test('should return true for any async thunk action if no arguments were provided', () => {
+    const thunk = createAsyncThunk<string>('a', () => 'result')
+    const matcher = isAsyncThunkAction()
+
+    const pendingAction = thunk.pending('fakeRequestId')
+    expect(matcher(pendingAction)).toBe(true)
+
+    const rejectedAction = thunk.rejected(
+      new Error('rejected'),
+      'fakeRequestId',
+    )
+    expect(matcher(rejectedAction)).toBe(true)
+
+    const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+    expect(matcher(fulfilledAction)).toBe(true)
+  })
+
+  test('should return true only for thunks provided as arguments', () => {
+    const thunkA = createAsyncThunk<string>('a', () => 'result')
+    const thunkB = createAsyncThunk<string>('b', () => 'result')
+    const thunkC = createAsyncThunk<string>('c', () => 'result')
+
+    const matchAC = isAsyncThunkAction(thunkA, thunkC)
+    const matchB = isAsyncThunkAction(thunkB)
+
+    function testAllActions(
+      thunk: typeof thunkA | typeof thunkB | typeof thunkC,
+      expected: boolean,
+    ) {
+      const pendingAction = thunk.pending('fakeRequestId')
+      expect(matchAC(pendingAction)).toBe(expected)
+      expect(matchB(pendingAction)).toBe(!expected)
+
+      const rejectedAction = thunk.rejected(
+        new Error('rejected'),
+        'fakeRequestId',
+      )
+      expect(matchAC(rejectedAction)).toBe(expected)
+      expect(matchB(rejectedAction)).toBe(!expected)
+
+      const fulfilledAction = thunk.fulfilled('result', 'fakeRequestId')
+      expect(matchAC(fulfilledAction)).toBe(expected)
+      expect(matchB(fulfilledAction)).toBe(!expected)
+    }
+
+    testAllActions(thunkA, true)
+    testAllActions(thunkC, true)
+    testAllActions(thunkB, false)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/serializableStateInvariantMiddleware.test.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/serializableStateInvariantMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/serializableStateInvariantMiddleware.test.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,663 @@
+import { noop } from '@internal/listenerMiddleware/utils'
+import { isNestedFrozen } from '@internal/serializableStateInvariantMiddleware'
+import type { Reducer } from '@reduxjs/toolkit'
+import {
+  configureStore,
+  createNextState,
+  createSerializableStateInvariantMiddleware,
+  findNonSerializableValue,
+  isPlain,
+  Tuple,
+} from '@reduxjs/toolkit'
+
+// Mocking console
+const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(noop)
+
+const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(noop)
+
+afterEach(() => {
+  vi.clearAllMocks()
+})
+
+afterAll(() => {
+  vi.restoreAllMocks()
+})
+
+describe('findNonSerializableValue', () => {
+  it('Should return false if no matching values are found', () => {
+    const obj = {
+      a: 42,
+      b: {
+        b1: 'test',
+      },
+      c: [99, { d: 123 }],
+    }
+
+    const result = findNonSerializableValue(obj)
+
+    expect(result).toBe(false)
+  })
+
+  it('Should return a keypath and the value if it finds a non-serializable value', () => {
+    function testFunction() {}
+
+    const obj = {
+      a: 42,
+      b: {
+        b1: testFunction,
+      },
+      c: [99, { d: 123 }],
+    }
+
+    const result = findNonSerializableValue(obj)
+
+    expect(result).toEqual({ keyPath: 'b.b1', value: testFunction })
+  })
+
+  it('Should return the first non-serializable value it finds', () => {
+    const map = new Map()
+    const symbol = Symbol.for('testSymbol')
+
+    const obj = {
+      a: 42,
+      b: {
+        b1: 1,
+      },
+      c: [99, { d: 123 }, map, symbol, 'test'],
+      d: symbol,
+    }
+
+    const result = findNonSerializableValue(obj)
+
+    expect(result).toEqual({ keyPath: 'c.2', value: map })
+  })
+
+  it('Should return a specific value if the root object is non-serializable', () => {
+    const value = new Map()
+    const result = findNonSerializableValue(value)
+
+    expect(result).toEqual({ keyPath: '<root>', value })
+  })
+
+  it('Should accept null as a valid value', () => {
+    const obj = {
+      a: 42,
+      b: {
+        b1: 1,
+      },
+      c: null,
+    }
+
+    const result = findNonSerializableValue(obj)
+
+    expect(result).toEqual(false)
+  })
+})
+
+describe('serializableStateInvariantMiddleware', () => {
+  it('Should log an error when a non-serializable action is dispatched', () => {
+    const reducer: Reducer = (state = 0, _action) => state + 1
+
+    const serializableStateInvariantMiddleware =
+      createSerializableStateInvariantMiddleware()
+
+    const store = configureStore({
+      reducer,
+      middleware: () => new Tuple(serializableStateInvariantMiddleware),
+    })
+
+    const symbol = Symbol.for('SOME_CONSTANT')
+    const dispatchedAction = { type: 'an-action', payload: symbol }
+
+    store.dispatch(dispatchedAction)
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `A non-serializable value was detected in an action, in the path: \`payload\`. Value:`,
+      symbol,
+      `\nTake a look at the logic that dispatched this action: `,
+      dispatchedAction,
+      `\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)`,
+      `\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)`,
+    )
+  })
+
+  it('Should log an error when a non-serializable value is in state', () => {
+    const ACTION_TYPE = 'TEST_ACTION'
+
+    const initialState = {
+      a: 0,
+    }
+
+    const badValue = new Map()
+
+    const reducer: Reducer = (state = initialState, action) => {
+      switch (action.type) {
+        case ACTION_TYPE: {
+          return {
+            a: badValue,
+          }
+        }
+        default:
+          return state
+      }
+    }
+
+    const serializableStateInvariantMiddleware =
+      createSerializableStateInvariantMiddleware()
+
+    const store = configureStore({
+      reducer: {
+        testSlice: reducer,
+      },
+      middleware: () => new Tuple(serializableStateInvariantMiddleware),
+    })
+
+    store.dispatch({ type: ACTION_TYPE })
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `A non-serializable value was detected in the state, in the path: \`testSlice.a\`. Value:`,
+      badValue,
+      `\nTake a look at the reducer(s) handling this action type: TEST_ACTION.
+(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`,
+    )
+  })
+
+  describe('consumer tolerated structures', () => {
+    const nonSerializableValue = new Map()
+
+    const nestedSerializableObjectWithBadValue = {
+      isSerializable: true,
+      entries: (): [string, any][] => [
+        ['good-string', 'Good!'],
+        ['good-number', 1337],
+        ['bad-map-instance', nonSerializableValue],
+      ],
+    }
+
+    const serializableObject = {
+      isSerializable: true,
+      entries: (): [string, any][] => [
+        ['first', 1],
+        ['second', 'B!'],
+        ['third', nestedSerializableObjectWithBadValue],
+      ],
+    }
+
+    it('Should log an error when a non-serializable value is nested in state', () => {
+      const ACTION_TYPE = 'TEST_ACTION'
+
+      const initialState = {
+        a: 0,
+      }
+
+      const reducer: Reducer = (state = initialState, action) => {
+        switch (action.type) {
+          case ACTION_TYPE: {
+            return {
+              a: serializableObject,
+            }
+          }
+          default:
+            return state
+        }
+      }
+
+      // use default options
+      const serializableStateInvariantMiddleware =
+        createSerializableStateInvariantMiddleware()
+
+      const store = configureStore({
+        reducer: {
+          testSlice: reducer,
+        },
+        middleware: () => new Tuple(serializableStateInvariantMiddleware),
+      })
+
+      store.dispatch({ type: ACTION_TYPE })
+
+      expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+      // since default options are used, the `entries` function in `serializableObject` will cause the error
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        `A non-serializable value was detected in the state, in the path: \`testSlice.a.entries\`. Value:`,
+        serializableObject.entries,
+        `\nTake a look at the reducer(s) handling this action type: TEST_ACTION.
+(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`,
+      )
+    })
+
+    it('Should use consumer supplied isSerializable and getEntries options to tolerate certain structures', () => {
+      const ACTION_TYPE = 'TEST_ACTION'
+
+      const initialState = {
+        a: 0,
+      }
+
+      const isSerializable = (val: any): boolean =>
+        val.isSerializable || isPlain(val)
+      const getEntries = (val: any): [string, any][] =>
+        val.isSerializable ? val.entries() : Object.entries(val)
+
+      const reducer: Reducer = (state = initialState, action) => {
+        switch (action.type) {
+          case ACTION_TYPE: {
+            return {
+              a: serializableObject,
+            }
+          }
+          default:
+            return state
+        }
+      }
+
+      const serializableStateInvariantMiddleware =
+        createSerializableStateInvariantMiddleware({
+          isSerializable,
+          getEntries,
+        })
+
+      const store = configureStore({
+        reducer: {
+          testSlice: reducer,
+        },
+        middleware: () => new Tuple(serializableStateInvariantMiddleware),
+      })
+
+      store.dispatch({ type: ACTION_TYPE })
+
+      expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+      // error reported is from a nested class instance, rather than the `entries` function `serializableObject`
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        `A non-serializable value was detected in the state, in the path: \`testSlice.a.third.bad-map-instance\`. Value:`,
+        nonSerializableValue,
+        `\nTake a look at the reducer(s) handling this action type: TEST_ACTION.
+(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`,
+      )
+    })
+  })
+
+  it('Should use the supplied isSerializable function to determine serializability', () => {
+    const ACTION_TYPE = 'TEST_ACTION'
+
+    const initialState = {
+      a: 0,
+    }
+
+    const badValue = new Map()
+
+    const reducer: Reducer = (state = initialState, action) => {
+      switch (action.type) {
+        case ACTION_TYPE: {
+          return {
+            a: badValue,
+          }
+        }
+        default:
+          return state
+      }
+    }
+
+    const serializableStateInvariantMiddleware =
+      createSerializableStateInvariantMiddleware({
+        isSerializable: () => true,
+      })
+
+    const store = configureStore({
+      reducer: {
+        testSlice: reducer,
+      },
+      middleware: () => new Tuple(serializableStateInvariantMiddleware),
+    })
+
+    store.dispatch({ type: ACTION_TYPE })
+
+    // Supplied 'isSerializable' considers all values serializable, hence
+    // no error logging is expected:
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+  })
+
+  it('should not check serializability for ignored action types', () => {
+    let numTimesCalled = 0
+
+    const serializableStateMiddleware =
+      createSerializableStateInvariantMiddleware({
+        isSerializable: () => {
+          numTimesCalled++
+          return true
+        },
+        ignoredActions: ['IGNORE_ME'],
+      })
+
+    const store = configureStore({
+      reducer: () => ({}),
+      middleware: () => new Tuple(serializableStateMiddleware),
+    })
+
+    expect(numTimesCalled).toBe(0)
+
+    store.dispatch({ type: 'IGNORE_ME' })
+
+    // The state check only calls `isSerializable` once
+    expect(numTimesCalled).toBe(1)
+
+    store.dispatch({ type: 'ANY_OTHER_ACTION' })
+
+    // Action checks call `isSerializable` 2+ times when enabled
+    expect(numTimesCalled).toBeGreaterThanOrEqual(3)
+  })
+
+  describe('ignored action paths', () => {
+    function reducer() {
+      return 0
+    }
+    const nonSerializableValue = new Map()
+
+    it('default value: meta.arg', () => {
+      configureStore({
+        reducer,
+        middleware: () =>
+          new Tuple(createSerializableStateInvariantMiddleware()),
+      }).dispatch({ type: 'test', meta: { arg: nonSerializableValue } })
+
+      expect(consoleErrorSpy).not.toHaveBeenCalled()
+    })
+
+    it('default value can be overridden', () => {
+      configureStore({
+        reducer,
+        middleware: () =>
+          new Tuple(
+            createSerializableStateInvariantMiddleware({
+              ignoredActionPaths: [],
+            }),
+          ),
+      }).dispatch({ type: 'test', meta: { arg: nonSerializableValue } })
+
+      expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+      expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+        `A non-serializable value was detected in an action, in the path: \`meta.arg\`. Value:`,
+        nonSerializableValue,
+        `\nTake a look at the logic that dispatched this action: `,
+        { type: 'test', meta: { arg: nonSerializableValue } },
+        `\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)`,
+        `\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)`,
+      )
+    })
+
+    it('can specify (multiple) different values', () => {
+      configureStore({
+        reducer,
+        middleware: () =>
+          new Tuple(
+            createSerializableStateInvariantMiddleware({
+              ignoredActionPaths: ['payload', 'meta.arg'],
+            }),
+          ),
+      }).dispatch({
+        type: 'test',
+        payload: { arg: nonSerializableValue },
+        meta: { arg: nonSerializableValue },
+      })
+
+      expect(consoleErrorSpy).not.toHaveBeenCalled()
+    })
+
+    it('can specify regexp', () => {
+      configureStore({
+        reducer,
+        middleware: () =>
+          new Tuple(
+            createSerializableStateInvariantMiddleware({
+              ignoredActionPaths: [/^payload\..*$/],
+            }),
+          ),
+      }).dispatch({
+        type: 'test',
+        payload: { arg: nonSerializableValue },
+      })
+
+      expect(consoleErrorSpy).not.toHaveBeenCalled()
+    })
+  })
+
+  it('allows ignoring actions entirely', () => {
+    let numTimesCalled = 0
+
+    const serializableStateMiddleware =
+      createSerializableStateInvariantMiddleware({
+        isSerializable: () => {
+          numTimesCalled++
+          return true
+        },
+        ignoreActions: true,
+      })
+
+    const store = configureStore({
+      reducer: () => ({}),
+      middleware: () => new Tuple(serializableStateMiddleware),
+    })
+
+    expect(numTimesCalled).toBe(0)
+
+    store.dispatch({ type: 'THIS_DOESNT_MATTER' })
+
+    // `isSerializable` is called once for a state check
+    expect(numTimesCalled).toBe(1)
+
+    store.dispatch({ type: 'THIS_DOESNT_MATTER_AGAIN' })
+
+    expect(numTimesCalled).toBe(2)
+  })
+
+  it('should not check serializability for ignored slice names', () => {
+    const ACTION_TYPE = 'TEST_ACTION'
+
+    const initialState = {
+      a: 0,
+    }
+
+    const badValue = new Map()
+
+    const reducer: Reducer = (state = initialState, action) => {
+      switch (action.type) {
+        case ACTION_TYPE: {
+          return {
+            a: badValue,
+            b: {
+              c: badValue,
+              d: badValue,
+            },
+            e: { f: badValue },
+            g: {
+              h: badValue,
+              i: badValue,
+            },
+          }
+        }
+        default:
+          return state
+      }
+    }
+
+    const serializableStateInvariantMiddleware =
+      createSerializableStateInvariantMiddleware({
+        ignoredPaths: [
+          // Test for ignoring a single value
+          'testSlice.a',
+          // Test for ignoring a single nested value
+          'testSlice.b.c',
+          // Test for ignoring an object and its children
+          'testSlice.e',
+          // Test for ignoring based on RegExp
+          /^testSlice\.g\..*$/,
+        ],
+      })
+
+    const store = configureStore({
+      reducer: {
+        testSlice: reducer,
+      },
+      middleware: () => new Tuple(serializableStateInvariantMiddleware),
+    })
+
+    store.dispatch({ type: ACTION_TYPE })
+
+    expect(consoleErrorSpy).toHaveBeenCalledOnce()
+
+    // testSlice.b.d was not covered in ignoredPaths, so will still log the error
+    expect(consoleErrorSpy).toHaveBeenLastCalledWith(
+      `A non-serializable value was detected in the state, in the path: \`testSlice.b.d\`. Value:`,
+      badValue,
+      `\nTake a look at the reducer(s) handling this action type: TEST_ACTION.
+(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`,
+    )
+  })
+
+  it('allows ignoring state entirely', () => {
+    const badValue = new Map()
+    let numTimesCalled = 0
+    const reducer = () => badValue
+    const store = configureStore({
+      reducer,
+      middleware: () =>
+        new Tuple(
+          createSerializableStateInvariantMiddleware({
+            isSerializable: () => {
+              numTimesCalled++
+              return true
+            },
+            ignoreState: true,
+          }),
+        ),
+    })
+
+    expect(numTimesCalled).toBe(0)
+
+    store.dispatch({ type: 'test' })
+
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+
+    // Should be called twice for the action - there is an initial check for early returns, then a second and potentially 3rd for nested properties
+    expect(numTimesCalled).toBe(2)
+  })
+
+  it('never calls isSerializable if both ignoreState and ignoreActions are true', () => {
+    const badValue = new Map()
+    let numTimesCalled = 0
+    const reducer = () => badValue
+    const store = configureStore({
+      reducer,
+      middleware: () =>
+        new Tuple(
+          createSerializableStateInvariantMiddleware({
+            isSerializable: () => {
+              numTimesCalled++
+              return true
+            },
+            ignoreState: true,
+            ignoreActions: true,
+          }),
+        ),
+    })
+
+    expect(numTimesCalled).toBe(0)
+
+    store.dispatch({ type: 'TEST', payload: new Date() })
+    store.dispatch({ type: 'OTHER_THING' })
+
+    expect(numTimesCalled).toBe(0)
+  })
+
+  it('Should print a warning if execution takes too long', () => {
+    const reducer: Reducer = (state = 42, action) => {
+      return state
+    }
+
+    const serializableStateInvariantMiddleware =
+      createSerializableStateInvariantMiddleware({ warnAfter: 4 })
+
+    const store = configureStore({
+      reducer: {
+        testSlice: reducer,
+      },
+      middleware: () => new Tuple(serializableStateInvariantMiddleware),
+    })
+
+    store.dispatch({
+      type: 'SOME_ACTION',
+      payload: new Array(10_000).fill({ value: 'more' }),
+    })
+
+    expect(consoleWarnSpy).toHaveBeenCalledOnce()
+
+    expect(consoleWarnSpy).toHaveBeenLastCalledWith(
+      expect.stringMatching(
+        /^SerializableStateInvariantMiddleware took \d*ms, which is more than the warning threshold of 4ms./,
+      ),
+    )
+  })
+
+  it('Should not print a warning if "reducer" takes too long', () => {
+    const reducer: Reducer = (state = 42, action) => {
+      const started = Date.now()
+      while (Date.now() - started < 8) {}
+      return state
+    }
+
+    const serializableStateInvariantMiddleware =
+      createSerializableStateInvariantMiddleware({ warnAfter: 4 })
+
+    const store = configureStore({
+      reducer: {
+        testSlice: reducer,
+      },
+      middleware: () => new Tuple(serializableStateInvariantMiddleware),
+    })
+
+    store.dispatch({ type: 'SOME_ACTION' })
+
+    expect(consoleErrorSpy).not.toHaveBeenCalled()
+  })
+
+  it('Should cache its results', () => {
+    let numPlainChecks = 0
+    const countPlainChecks = (x: any) => {
+      numPlainChecks++
+      return isPlain(x)
+    }
+
+    const serializableStateInvariantMiddleware =
+      createSerializableStateInvariantMiddleware({
+        isSerializable: countPlainChecks,
+      })
+
+    const store = configureStore({
+      reducer: (state = [], action) => {
+        if (action.type === 'SET_STATE') return action.payload
+        return state
+      },
+      middleware: () => new Tuple(serializableStateInvariantMiddleware),
+    })
+
+    const state = createNextState([], () =>
+      new Array(50).fill(0).map((x, i) => ({ i })),
+    )
+    expect(isNestedFrozen(state)).toBe(true)
+
+    store.dispatch({
+      type: 'SET_STATE',
+      payload: state,
+    })
+    expect(numPlainChecks).toBeGreaterThan(state.length)
+
+    numPlainChecks = 0
+    store.dispatch({ type: 'NOOP' })
+    expect(numPlainChecks).toBeLessThan(10)
+  })
+})
Index: node_modules/@reduxjs/toolkit/src/tests/utils/CustomMatchers.d.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/utils/CustomMatchers.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/utils/CustomMatchers.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import type { Assertion, AsymmetricMatchersContaining } from 'vitest'
+
+interface CustomMatchers<R = unknown> {
+  toMatchSequence(...matchers: Array<(arg: any) => boolean>): R
+}
+
+declare module 'vitest' {
+  interface Assertion<T = any> extends CustomMatchers<T> {}
+  interface AsymmetricMatchersContaining extends CustomMatchers {}
+}
+
+declare global {
+  namespace jest {
+    interface Matchers<R> extends CustomMatchers<R> {}
+  }
+}
Index: node_modules/@reduxjs/toolkit/src/tests/utils/helpers.tsx
===================================================================
--- node_modules/@reduxjs/toolkit/src/tests/utils/helpers.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tests/utils/helpers.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,217 @@
+import type {
+  EnhancedStore,
+  Middleware,
+  Reducer,
+  Store,
+  UnknownAction,
+} from '@reduxjs/toolkit'
+import { configureStore } from '@reduxjs/toolkit'
+import { setupListeners } from '@reduxjs/toolkit/query'
+import { useCallback, useEffect, useRef } from 'react'
+
+import { Provider } from 'react-redux'
+
+import { act, cleanup } from '@testing-library/react'
+
+export const ANY = 0 as any
+
+export const DEFAULT_DELAY_MS = 150
+
+export const getSerializedHeaders = (headers: Headers = new Headers()) => {
+  const result: Record<string, string> = {}
+  headers.forEach((val, key) => {
+    result[key] = val
+  })
+  return result
+}
+
+export async function waitMs(time = DEFAULT_DELAY_MS) {
+  const now = Date.now()
+  while (Date.now() < now + time) {
+    await new Promise((res) => process.nextTick(res))
+  }
+}
+
+export function waitForFakeTimer(time = DEFAULT_DELAY_MS) {
+  return new Promise((resolve) => setTimeout(resolve, time))
+}
+
+export function withProvider(store: Store<any>) {
+  return function Wrapper({ children }: any) {
+    return <Provider store={store}>{children}</Provider>
+  }
+}
+
+export const hookWaitFor = async (cb: () => void, time = 2000) => {
+  const startedAt = Date.now()
+
+  while (true) {
+    try {
+      cb()
+      return true
+    } catch (e) {
+      if (Date.now() > startedAt + time) {
+        throw e
+      }
+      await act(async () => {
+        await waitMs(2)
+      })
+    }
+  }
+}
+export const fakeTimerWaitFor = async (cb: () => void, time = 2000) => {
+  const startedAt = Date.now()
+
+  while (true) {
+    try {
+      cb()
+      return true
+    } catch (e) {
+      if (Date.now() > startedAt + time) {
+        throw e
+      }
+      await act(async () => {
+        await vi.advanceTimersByTimeAsync(2)
+      })
+    }
+  }
+}
+
+export const useRenderCounter = () => {
+  const countRef = useRef(0)
+
+  useEffect(() => {
+    countRef.current += 1
+  })
+
+  useEffect(() => {
+    return () => {
+      countRef.current = 0
+    }
+  }, [])
+
+  return useCallback(() => countRef.current, [])
+}
+
+expect.extend({
+  toMatchSequence(
+    _actions: UnknownAction[],
+    ...matchers: Array<(arg: any) => boolean>
+  ) {
+    const actions = _actions.concat()
+    actions.shift() // remove INIT
+
+    for (let i = 0; i < matchers.length; i++) {
+      if (!matchers[i](actions[i])) {
+        return {
+          message: () =>
+            `Action ${actions[i].type} does not match sequence at position ${i}.
+All actions:
+${actions.map((a) => a.type).join('\n')}`,
+          pass: false,
+        }
+      }
+    }
+    return {
+      message: () => `All actions match the sequence.`,
+      pass: true,
+    }
+  },
+})
+
+export const actionsReducer = {
+  actions: (state: UnknownAction[] = [], action: UnknownAction) => {
+    // As of 2.0-beta.4, we are going to ignore all `subscriptionsUpdated` actions in tests
+    if (action.type.includes('subscriptionsUpdated')) {
+      return state
+    }
+
+    return [...state, action]
+  },
+}
+
+export function setupApiStore<
+  A extends {
+    reducerPath: 'api'
+    reducer: Reducer<any, any>
+    middleware: Middleware
+    util: { resetApiState(): any }
+  },
+  R extends Record<string, Reducer<any, any>> = Record<never, never>,
+>(
+  api: A,
+  extraReducers?: R,
+  options: {
+    withoutListeners?: boolean
+    withoutTestLifecycles?: boolean
+    middleware?: {
+      prepend?: Middleware[]
+      concat?: Middleware[]
+    }
+  } = {},
+) {
+  const { middleware } = options
+  const getStore = () =>
+    configureStore({
+      reducer: { api: api.reducer, ...extraReducers },
+      middleware: (gdm) => {
+        const tempMiddleware = gdm({
+          serializableCheck: false,
+          immutableCheck: false,
+        }).concat(api.middleware)
+
+        return tempMiddleware
+          .concat(middleware?.concat ?? [])
+          .prepend(middleware?.prepend ?? []) as typeof tempMiddleware
+      },
+      enhancers: (gde) =>
+        gde({
+          autoBatch: false,
+        }),
+    })
+
+  type State = {
+    api: ReturnType<A['reducer']>
+  } & {
+    [K in keyof R]: ReturnType<R[K]>
+  }
+  type StoreType = EnhancedStore<
+    {
+      api: ReturnType<A['reducer']>
+    } & {
+      [K in keyof R]: ReturnType<R[K]>
+    },
+    UnknownAction,
+    ReturnType<typeof getStore> extends EnhancedStore<any, any, infer M>
+      ? M
+      : never
+  >
+
+  const initialStore = getStore() as StoreType
+  const refObj = {
+    api,
+    store: initialStore,
+    wrapper: withProvider(initialStore),
+  }
+  let cleanupListeners: () => void
+
+  if (!options.withoutTestLifecycles) {
+    beforeEach(() => {
+      const store = getStore() as StoreType
+      refObj.store = store
+      refObj.wrapper = withProvider(store)
+      if (!options.withoutListeners) {
+        cleanupListeners = setupListeners(store.dispatch)
+      }
+    })
+    afterEach(() => {
+      cleanup()
+      if (!options.withoutListeners) {
+        cleanupListeners()
+      }
+      refObj.store.dispatch(api.util.resetApiState())
+    })
+  }
+
+  return refObj
+}
Index: node_modules/@reduxjs/toolkit/src/tsHelpers.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/tsHelpers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/tsHelpers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,223 @@
+import type { Middleware, StoreEnhancer } from 'redux'
+import type { Tuple } from './utils'
+
+export function safeAssign<T extends object>(
+  target: T,
+  ...args: Array<Partial<NoInfer<T>>>
+) {
+  Object.assign(target, ...args)
+}
+
+/**
+ * return True if T is `any`, otherwise return False
+ * taken from https://github.com/joonhocho/tsdef
+ *
+ * @internal
+ */
+export type IsAny<T, True, False = never> =
+  // test if we are going the left AND right path in the condition
+  true | false extends (T extends never ? true : false) ? True : False
+
+export type CastAny<T, CastTo> = IsAny<T, CastTo, T>
+
+/**
+ * return True if T is `unknown`, otherwise return False
+ * taken from https://github.com/joonhocho/tsdef
+ *
+ * @internal
+ */
+export type IsUnknown<T, True, False = never> = unknown extends T
+  ? IsAny<T, False, True>
+  : False
+
+export type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>
+
+/**
+ * @internal
+ */
+export type IfMaybeUndefined<P, True, False> = [undefined] extends [P]
+  ? True
+  : False
+
+/**
+ * @internal
+ */
+export type IfVoid<P, True, False> = [void] extends [P] ? True : False
+
+/**
+ * @internal
+ */
+export type IsEmptyObj<T, True, False = never> = T extends any
+  ? keyof T extends never
+    ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>>
+    : False
+  : never
+
+/**
+ * returns True if TS version is above 3.5, False if below.
+ * uses feature detection to detect TS version >= 3.5
+ * * versions below 3.5 will return `{}` for unresolvable interference
+ * * versions above will return `unknown`
+ *
+ * @internal
+ */
+export type AtLeastTS35<True, False> = [True, False][IsUnknown<
+  ReturnType<<T>() => T>,
+  0,
+  1
+>]
+
+/**
+ * @internal
+ */
+export type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<
+  IsUnknown<T, True, False>,
+  IsEmptyObj<T, True, IsUnknown<T, True, False>>
+>
+
+/**
+ * Convert a Union type `(A|B)` to an intersection type `(A&B)`
+ */
+export type UnionToIntersection<U> = (
+  U extends any ? (k: U) => void : never
+) extends (k: infer I) => void
+  ? I
+  : never
+
+// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified
+export type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [
+  infer Head,
+  ...infer Tail,
+]
+  ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]>
+  : Acc
+
+type ExtractDispatchFromMiddlewareTuple<
+  MiddlewareTuple extends readonly any[],
+  Acc extends {},
+> = MiddlewareTuple extends [infer Head, ...infer Tail]
+  ? ExtractDispatchFromMiddlewareTuple<
+      Tail,
+      Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})
+    >
+  : Acc
+
+export type ExtractDispatchExtensions<M> =
+  M extends Tuple<infer MiddlewareTuple>
+    ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}>
+    : M extends ReadonlyArray<Middleware>
+      ? ExtractDispatchFromMiddlewareTuple<[...M], {}>
+      : never
+
+type ExtractStoreExtensionsFromEnhancerTuple<
+  EnhancerTuple extends readonly any[],
+  Acc extends {},
+> = EnhancerTuple extends [infer Head, ...infer Tail]
+  ? ExtractStoreExtensionsFromEnhancerTuple<
+      Tail,
+      Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})
+    >
+  : Acc
+
+export type ExtractStoreExtensions<E> =
+  E extends Tuple<infer EnhancerTuple>
+    ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}>
+    : E extends ReadonlyArray<StoreEnhancer>
+      ? UnionToIntersection<
+          E[number] extends StoreEnhancer<infer Ext>
+            ? Ext extends {}
+              ? IsAny<Ext, {}, Ext>
+              : {}
+            : {}
+        >
+      : never
+
+type ExtractStateExtensionsFromEnhancerTuple<
+  EnhancerTuple extends readonly any[],
+  Acc extends {},
+> = EnhancerTuple extends [infer Head, ...infer Tail]
+  ? ExtractStateExtensionsFromEnhancerTuple<
+      Tail,
+      Acc &
+        (Head extends StoreEnhancer<any, infer StateExt>
+          ? IsAny<StateExt, {}, StateExt>
+          : {})
+    >
+  : Acc
+
+export type ExtractStateExtensions<E> =
+  E extends Tuple<infer EnhancerTuple>
+    ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}>
+    : E extends ReadonlyArray<StoreEnhancer>
+      ? UnionToIntersection<
+          E[number] extends StoreEnhancer<any, infer StateExt>
+            ? StateExt extends {}
+              ? IsAny<StateExt, {}, StateExt>
+              : {}
+            : {}
+        >
+      : never
+
+/**
+ * Helper type. Passes T out again, but boxes it in a way that it cannot
+ * "widen" the type by accident if it is a generic that should be inferred
+ * from elsewhere.
+ *
+ * @internal
+ */
+export type NoInfer<T> = [T][T extends any ? 0 : never]
+
+export type NonUndefined<T> = T extends undefined ? never : T
+
+export type WithRequiredProp<T, K extends keyof T> = Omit<T, K> &
+  Required<Pick<T, K>>
+
+export type WithOptionalProp<T, K extends keyof T> = Omit<T, K> &
+  Partial<Pick<T, K>>
+
+export interface TypeGuard<T> {
+  (value: any): value is T
+}
+
+export interface HasMatchFunction<T> {
+  match: TypeGuard<T>
+}
+
+export const hasMatchFunction = <T>(
+  v: Matcher<T>,
+): v is HasMatchFunction<T> => {
+  return v && typeof (v as HasMatchFunction<T>).match === 'function'
+}
+
+/** @public */
+export type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>
+
+/** @public */
+export type ActionFromMatcher<M extends Matcher<any>> =
+  M extends Matcher<infer T> ? T : never
+
+export type Id<T> = { [K in keyof T]: T[K] } & {}
+
+export type Tail<T extends any[]> = T extends [any, ...infer Tail]
+  ? Tail
+  : never
+
+export type UnknownIfNonSpecific<T> = {} extends T ? unknown : T
+
+/**
+ * A Promise that will never reject.
+ * @see https://github.com/reduxjs/redux-toolkit/issues/4101
+ */
+export type SafePromise<T> = Promise<T> & {
+  __linterBrands: 'SafePromise'
+}
+
+/**
+ * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).
+ */
+export function asSafePromise<Resolved, Rejected>(
+  promise: Promise<Resolved>,
+  fallback: (error: unknown) => Rejected,
+) {
+  return promise.catch(fallback) as SafePromise<Resolved | Rejected>
+}
Index: node_modules/@reduxjs/toolkit/src/uncheckedindexed.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/uncheckedindexed.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/uncheckedindexed.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+// inlined from https://github.com/EskiMojo14/uncheckedindexed
+// relies on remaining as a TS file, not .d.ts
+type IfMaybeUndefined<T, True, False> = [undefined] extends [T] ? True : False
+
+const testAccess = ({} as Record<string, 0>)['a']
+
+export type IfUncheckedIndexedAccess<True, False> = IfMaybeUndefined<
+  typeof testAccess,
+  True,
+  False
+>
+
+export type UncheckedIndexedAccess<T> = IfUncheckedIndexedAccess<
+  T | undefined,
+  T
+>
Index: node_modules/@reduxjs/toolkit/src/utils.ts
===================================================================
--- node_modules/@reduxjs/toolkit/src/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@reduxjs/toolkit/src/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,125 @@
+import { produce as createNextState, isDraftable } from 'immer'
+
+export function getTimeMeasureUtils(maxDelay: number, fnName: string) {
+  let elapsed = 0
+  return {
+    measureTime<T>(fn: () => T): T {
+      const started = Date.now()
+      try {
+        return fn()
+      } finally {
+        const finished = Date.now()
+        elapsed += finished - started
+      }
+    },
+    warnIfExceeded() {
+      if (elapsed > maxDelay) {
+        console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. 
+If your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.
+It is disabled in production builds, so you don't need to worry about that.`)
+      }
+    },
+  }
+}
+
+export function delay(ms: number) {
+  return new Promise((resolve) => setTimeout(resolve, ms))
+}
+
+export class Tuple<Items extends ReadonlyArray<unknown> = []> extends Array<
+  Items[number]
+> {
+  constructor(length: number)
+  constructor(...items: Items)
+  constructor(...items: any[]) {
+    super(...items)
+    Object.setPrototypeOf(this, Tuple.prototype)
+  }
+
+  static override get [Symbol.species]() {
+    return Tuple as any
+  }
+
+  override concat<AdditionalItems extends ReadonlyArray<unknown>>(
+    items: Tuple<AdditionalItems>,
+  ): Tuple<[...Items, ...AdditionalItems]>
+  override concat<AdditionalItems extends ReadonlyArray<unknown>>(
+    items: AdditionalItems,
+  ): Tuple<[...Items, ...AdditionalItems]>
+  override concat<AdditionalItems extends ReadonlyArray<unknown>>(
+    ...items: AdditionalItems
+  ): Tuple<[...Items, ...AdditionalItems]>
+  override concat(...arr: any[]) {
+    return super.concat.apply(this, arr)
+  }
+
+  prepend<AdditionalItems extends ReadonlyArray<unknown>>(
+    items: Tuple<AdditionalItems>,
+  ): Tuple<[...AdditionalItems, ...Items]>
+  prepend<AdditionalItems extends ReadonlyArray<unknown>>(
+    items: AdditionalItems,
+  ): Tuple<[...AdditionalItems, ...Items]>
+  prepend<AdditionalItems extends ReadonlyArray<unknown>>(
+    ...items: AdditionalItems
+  ): Tuple<[...AdditionalItems, ...Items]>
+  prepend(...arr: any[]) {
+    if (arr.length === 1 && Array.isArray(arr[0])) {
+      return new Tuple(...arr[0].concat(this))
+    }
+    return new Tuple(...arr.concat(this))
+  }
+}
+
+export function freezeDraftable<T>(val: T) {
+  return isDraftable(val) ? createNextState(val, () => {}) : val
+}
+
+export function getOrInsert<K extends object, V>(
+  map: WeakMap<K, V>,
+  key: K,
+  value: V,
+): V
+export function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V
+export function getOrInsert<K extends object, V>(
+  map: Map<K, V> | WeakMap<K, V>,
+  key: K,
+  value: V,
+): V {
+  if (map.has(key)) return map.get(key) as V
+
+  return map.set(key, value).get(key) as V
+}
+
+export function getOrInsertComputed<K extends object, V>(
+  map: WeakMap<K, V>,
+  key: K,
+  compute: (key: K) => V,
+): V
+export function getOrInsertComputed<K, V>(
+  map: Map<K, V>,
+  key: K,
+  compute: (key: K) => V,
+): V
+export function getOrInsertComputed<K extends object, V>(
+  map: Map<K, V> | WeakMap<K, V>,
+  key: K,
+  compute: (key: K) => V,
+): V {
+  if (map.has(key)) return map.get(key) as V
+
+  return map.set(key, compute(key)).get(key) as V
+}
+
+export function promiseWithResolvers<T>(): {
+  promise: Promise<T>
+  resolve: (value: T | PromiseLike<T>) => void
+  reject: (reason?: any) => void
+} {
+  let resolve: any
+  let reject: any
+  const promise = new Promise<T>((res, rej) => {
+    resolve = res
+    reject = rej
+  })
+  return { promise, resolve, reject }
+}
Index: node_modules/@standard-schema/spec/LICENSE
===================================================================
--- node_modules/@standard-schema/spec/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/spec/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Colin McDonnell
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/@standard-schema/spec/README.md
===================================================================
--- node_modules/@standard-schema/spec/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/spec/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,279 @@
+<h1 align="center">
+  <img alt="Standard Schema fire logo" loading="lazy" width="50" height="50" decoding="async" data-nimg="1" style="color:transparent" src="https://standardschema.dev/favicon.svg">
+  </br>
+  Standard Schema</h1>
+<p align="center">
+  A common interface for TypeScript validation libraries
+  <br/>
+  <a href="https://standardschema.dev">standardschema.dev</a>
+</p>
+<br/>
+
+<!-- start -->
+
+Standard Schema is a common interface designed to be implemented by JavaScript and TypeScript schema libraries.
+
+The goal is to make it easier for ecosystem tools to accept user-defined type validators, without needing to write custom logic or adapters for each supported library. And since Standard Schema is a specification, they can do so with no additional runtime dependencies. Integrate once, validate anywhere.
+
+## Who designed it?
+
+The spec was designed by the creators of Zod, Valibot, and ArkType. Recent versions of these libraries already implement the spec (see the [full list of compatible libraries](#what-schema-libraries-implement-the-spec) below).
+
+## The interface
+
+The specification consists of a single TypeScript interface `StandardSchemaV1` to be implemented by any schema library wishing to be spec-compliant.
+
+This interface can be found below in its entirety. Libraries wishing to implement the spec can copy/paste the code block below into their codebase. It's also available at `@standard-schema/spec` on [npm](https://www.npmjs.com/package/@standard-schema/spec) and [JSR](https://jsr.io/@standard-schema/spec). There will be zero changes without a major version bump.
+
+```ts
+/** The Standard Schema interface. */
+export interface StandardSchemaV1<Input = unknown, Output = Input> {
+  /** The Standard Schema properties. */
+  readonly '~standard': StandardSchemaV1.Props<Input, Output>;
+}
+
+export declare namespace StandardSchemaV1 {
+  /** The Standard Schema properties interface. */
+  export interface Props<Input = unknown, Output = Input> {
+    /** The version number of the standard. */
+    readonly version: 1;
+    /** The vendor name of the schema library. */
+    readonly vendor: string;
+    /** Validates unknown input values. */
+    readonly validate: (
+      value: unknown
+    ) => Result<Output> | Promise<Result<Output>>;
+    /** Inferred types associated with the schema. */
+    readonly types?: Types<Input, Output> | undefined;
+  }
+
+  /** The result interface of the validate function. */
+  export type Result<Output> = SuccessResult<Output> | FailureResult;
+
+  /** The result interface if validation succeeds. */
+  export interface SuccessResult<Output> {
+    /** The typed output value. */
+    readonly value: Output;
+    /** The non-existent issues. */
+    readonly issues?: undefined;
+  }
+
+  /** The result interface if validation fails. */
+  export interface FailureResult {
+    /** The issues of failed validation. */
+    readonly issues: ReadonlyArray<Issue>;
+  }
+
+  /** The issue interface of the failure output. */
+  export interface Issue {
+    /** The error message of the issue. */
+    readonly message: string;
+    /** The path of the issue, if any. */
+    readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
+  }
+
+  /** The path segment interface of the issue. */
+  export interface PathSegment {
+    /** The key representing a path segment. */
+    readonly key: PropertyKey;
+  }
+
+  /** The Standard Schema types interface. */
+  export interface Types<Input = unknown, Output = Input> {
+    /** The input type of the schema. */
+    readonly input: Input;
+    /** The output type of the schema. */
+    readonly output: Output;
+  }
+
+  /** Infers the input type of a Standard Schema. */
+  export type InferInput<Schema extends StandardSchemaV1> = NonNullable<
+    Schema['~standard']['types']
+  >['input'];
+
+  /** Infers the output type of a Standard Schema. */
+  export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<
+    Schema['~standard']['types']
+  >['output'];
+}
+```
+
+## Design goals
+
+The specification meets a few primary design objectives:
+
+- **Support runtime validation.** Given a Standard Schema compatible validator, you should be able to validate data with it (duh). Any validation errors should be presented in a standardized format.
+- **Support static type inference.** For TypeScript libraries that do type inference, the specification provides a standard way for them to "advertise" their inferred type, so it can be extracted and used by external tools.
+- **Minimal.** It should be easy for libraries to implement this spec in a few lines of code that call their existing functions/methods.
+- **Avoid API conflicts.** The entire spec is tucked inside a single object property called `~standard`, which avoids potential naming conflicts with the API surface of existing libraries.
+- **Do no harm to DX.** The `~standard` property is tilde-prefixed to [de-prioritize it in autocompletion](https://x.com/colinhacks/status/1816860780459073933). By contrast, an underscore-prefixed property would show up before properties/methods with alphanumeric names.
+
+## What schema libraries implement the spec?
+
+These are the libraries that have already implemented the Standard Schema interface. (If you maintain a library that implements the spec, [create a PR](https://github.com/standard-schema/standard-schema/compare) to add yourself!)
+
+| Implementer | Version(s) | Docs                                                                       |
+| ----------- | ---------- | -------------------------------------------------------------------------- |
+| Zod         | 3.24.0+    | [zod.dev](https://zod.dev/)                                                |
+| Valibot     | v1.0+      | [valibot.dev](https://valibot.dev/)                                        |
+| ArkType     | v2.0+      | [arktype.io](https://arktype.io/)                                          |
+| Arri Schema | v0.71.0+   | [github.com/modiimedia/arri](https://github.com/modiimedia/arri)           |
+| TypeMap     | v0.8.0+    | [github.com/sinclairzx81/typemap](https://github.com/sinclairzx81/typemap) |
+
+## What tools / frameworks accept spec-compliant schemas?
+
+The following tools accept user-defined schemas conforming to the Standard Schema spec. (If you maintain a tool that supports Standard Schemas, [create a PR](https://github.com/standard-schema/standard-schema/compare) to add yourself!)
+
+| Integrator                                              | Description                                                                                                                  | Link                                                                   |
+| ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| [tRPC](https://trpc.io)                                 | 🧙‍♀️ Move fast and break nothing. End-to-end typesafe APIs made easy                                                           | [PR](https://github.com/trpc/trpc/pull/6079)                           |
+| [TanStack Form](https://github.com/TanStack/form)       | 🤖 Headless, performant, and type-safe form state management for TS/JS, React, Vue, Angular, Solid, and Lit                  | [PR](https://github.com/TanStack/form/issues/1015)                     |
+| [TanStack Router](https://github.com/tanstack/router)   | A fully type-safe React router with built-in data fetching, stale-while revalidate caching and first-class search-param APIs | [PR](https://github.com/TanStack/router/pull/2602)                     |
+| [Hono Middleware 🚧](https://hono.dev)                  | Fast, lightweight server, built on Web Standards                                                                             | [PR](https://github.com/honojs/middleware/pull/887)                    |
+| [Qwik 🚧](https://github.com/QwikDev/qwik)              | Instant-loading web apps, without effort                                                                                     | [PR](https://github.com/QwikDev/qwik/pull/7281)                        |
+| [UploadThing](https://github.com/pingdotgg/uploadthing) | File uploads for modern web devs                                                                                             | [Docs](https://docs.uploadthing.com/file-routes#input)                 |
+| [T3 Env](https://github.com/t3-oss/t3-env)              | Framework agnostic validation for type-safe environment variables                                                            | [PR](https://github.com/t3-oss/t3-env/pull/299)                        |
+| [OpenAuth](https://github.com/openauthjs/openauth)      | Universal, standards-based auth provider                                                                                     | [Docs](https://openauth.js.org/docs/#server)                           |
+| [renoun](https://www.renoun.dev/)                       | The Documentation Toolkit for React                                                                                          | [Docs](https://www.renoun.dev/utilities/file-system#schema-validation) |
+| [Formwerk](https://github.com/formwerkjs/formwerk)      | A Vue.js Framework for building high-quality, accessible, delightful forms.                                                  | [PR](https://github.com/formwerkjs/formwerk/pull/68)                   |
+| [GQLoom](https://github.com/modevol-com/gqloom)         | Weave GraphQL schema and resolvers using Standard Schema                                                                     | [PR](https://github.com/modevol-com/gqloom/pull/7)                     |
+| [Nuxt UI (v3)](https://github.com/nuxt/ui)              | A UI Library for modern web apps, powered by Vue & Tailwind CSS                                                              | [PR](https://github.com/nuxt/ui/pull/2303)                             |
+| [oRPC](https://github.com/unnoq/orpc)                   | Typesafe APIs made simple 🪄                                                                                                 | [PR](https://github.com/unnoq/orpc/pull/50)                            |
+| [Regle](https://github.com/victorgarciaesgi/regle)      | Type-safe model-based form validation library for Vue.js                                                                     | [PR](https://github.com/victorgarciaesgi/regle/pull/46)                |
+
+## How can my schema library implement the spec?
+
+Schemas libraries that want to support Standard Schema must implement the `StandardSchemaV1` interface. Start by copying the specification file above into your library. It consists of types only.
+
+Then implement the spec by adding the `~standard` property to your validator objects/instances. We recommend using `extends` / `implements` to ensure static agreement with the interface. It doesn't matter whether your schema library returns plain objects, functions, or class instances. The only thing that matters is that the `~standard` property is defined somehow.
+
+Here's a simple worked example of a string validator that implements the spec.
+
+```ts
+import type {StandardSchemaV1} from '@standard-schema/spec';
+
+// Step 1: Define the schema interface
+interface StringSchema extends StandardSchemaV1<string> {
+  type: 'string';
+  message: string;
+}
+
+// Step 2: Implement the schema interface
+function string(message: string = 'Invalid type'): StringSchema {
+  return {
+    type: 'string',
+    message,
+    '~standard': {
+      version: 1,
+      vendor: 'valizod',
+      validate(value) {
+        return typeof value === 'string' ? {value} : {issues: [{message}]};
+      },
+    },
+  };
+}
+```
+
+We recommend defining the `~standard.validate()` function in terms of your library's existing validation functions/methods. Ideally implementing the spec only requires a handful of lines of code.
+
+Avoid returning `Promise` from `~standard.validate()` unless absolutely necessary. Some third-party libraries may not support async validation.
+
+## How do I accept Standard Schemas in my library?
+
+Third-party libraries and frameworks can leverage the Standard Schema spec to accept user-defined schemas in a type-safe way.
+
+To get started, copy and paste the specification file into your project. Alternatively (if you are okay with the extra dependency), you can install the `@standard-schema/spec` package from [npm](https://www.npmjs.com/package/@standard-schema/spec) or [JSR](https://jsr.io/@standard-schema/spec) as a dependency. _It is not recommended to install as a dev dependency, see the [associated FAQ](#can-i-add-it-as-a-dev-dependency) for details_.
+
+```sh
+npm install @standard-schema/spec       # npm
+yarn add @standard-schema/spec          # yarn
+pnpm add @standard-schema/spec          # pnpm
+bun add @standard-schema/spec           # bun
+deno add jsr:@standard-schema/spec      # deno
+```
+
+Here's is an simple example of a generic function that accepts an arbitrary spec-compliant validator and uses it to parse some data.
+
+```ts
+import type {StandardSchemaV1} from '@standard-schema/spec';
+
+export async function standardValidate<T extends StandardSchemaV1>(
+  schema: T,
+  input: StandardSchemaV1.InferInput<T>
+): Promise<StandardSchemaV1.InferOutput<T>> {
+  let result = schema['~standard'].validate(input);
+  if (result instanceof Promise) result = await result;
+
+  // if the `issues` field exists, the validation failed
+  if (result.issues) {
+    throw new Error(JSON.stringify(result.issues, null, 2));
+  }
+
+  return result.value;
+}
+```
+
+This concise function can accept inputs from any spec-compliant schema library.
+
+```ts
+import * as z from 'zod';
+import * as v from 'valibot';
+import {type} from 'arktype';
+
+const zodResult = await standardValidate(z.string(), 'hello');
+const valibotResult = await standardValidate(v.string(), 'hello');
+const arktypeResult = await standardValidate(type('string'), 'hello');
+```
+
+## FAQ
+
+These are the most frequently asked questions about Standard Schema. If your question is not listed, feel free to create an issue.
+
+### Do I need to add `@standard-schema/spec` as a dependency?
+
+No. The `@standard-schema/spec` package is completely optional. You can just copy and paste the types into your project. We guarantee no breaking changes without a major version bump.
+
+If you don't mind additional dependencies, you can add `@standard-schema/spec` as a dependency and consume it with `import type`. The `@standard-schema/spec` package contains no runtime code and only exports types.
+
+### Can I add it as a dev dependency?
+
+Despite being types-only, you should _not_ install `@standard-schema/spec` as a dev dependency. By accepting Standard Schemas as part of your public API, the Standard Schema interface becomes a part of your library's public API. As such, it _must_ be available whenever/wherever your library gets installed, even in production installs. For this to happen, it must be installed as a regular dependency.
+
+### Why did you prefix the `~standard` property with `~`?
+
+The goal of prefixing the key with `~` is to both avoid conflicts with existing API surfaces and to de-prioritize these keys in auto-complete. The `~` character is one of the few ASCII characters that occurs after `A-Za-z0-9` lexicographically, so VS Code puts these suggestions at the bottom of the list.
+
+![Screenshot showing the de-prioritization of the `~` prefix keys in VS Code.](https://github.com/standard-schema/standard-schema/assets/3084745/5dfc0219-7531-481e-9691-cff5bc471378)
+
+### Why not use a symbol key?
+
+In TypeScript, using a plain `Symbol` inline as a key always collapses to a simple `symbol` type. This would cause conflicts with other schema properties that use symbols.
+
+```ts
+const object = {
+  [Symbol.for('~output')]: 'some data',
+};
+// { [k: symbol]: string }
+```
+
+Unique symbols can also be declared in a "nominal" way that won't collapse. In this case the symbol key is sorted alphabetically in autocomplete according to the symbol's variable name.
+
+![Screenshot showing the prioritization of external symbols in VS Code](https://github.com/standard-schema/standard-schema/assets/3084745/82c47820-90c3-4163-a838-858b987a6bea)
+
+Thus, these symbol keys don't get sorted to the bottom of the autocomplete list, unlike tilde-prefixed string keys.
+
+### How to only allow synchronous validation?
+
+The `~validate` function might return a synchronous value _or_ a `Promise`. If you only accept synchronous validation, you can simply throw an error if the returned value is an instance of `Promise`. Libraries are encouraged to preferentially use synchronous validation whenever possible.
+
+```ts
+import type {StandardSchemaV1} from '@standard-schema/spec';
+
+function validateInput(schema: StandardSchemaV1, data: unknown) {
+  const result = schema['~standard'].validate(data);
+  if (result instanceof Promise) {
+    throw new TypeError('Schema validation must be synchronous');
+  }
+  // ...
+}
+```
Index: node_modules/@standard-schema/spec/dist/index.cjs
===================================================================
--- node_modules/@standard-schema/spec/dist/index.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/spec/dist/index.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var src_exports = {};
+module.exports = __toCommonJS(src_exports);
Index: node_modules/@standard-schema/spec/dist/index.d.cts
===================================================================
--- node_modules/@standard-schema/spec/dist/index.d.cts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/spec/dist/index.d.cts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+/** The Standard Schema interface. */
+interface StandardSchemaV1<Input = unknown, Output = Input> {
+    /** The Standard Schema properties. */
+    readonly "~standard": StandardSchemaV1.Props<Input, Output>;
+}
+declare namespace StandardSchemaV1 {
+    /** The Standard Schema properties interface. */
+    export interface Props<Input = unknown, Output = Input> {
+        /** The version number of the standard. */
+        readonly version: 1;
+        /** The vendor name of the schema library. */
+        readonly vendor: string;
+        /** Validates unknown input values. */
+        readonly validate: (value: unknown) => Result<Output> | Promise<Result<Output>>;
+        /** Inferred types associated with the schema. */
+        readonly types?: Types<Input, Output> | undefined;
+    }
+    /** The result interface of the validate function. */
+    export type Result<Output> = SuccessResult<Output> | FailureResult;
+    /** The result interface if validation succeeds. */
+    export interface SuccessResult<Output> {
+        /** The typed output value. */
+        readonly value: Output;
+        /** The non-existent issues. */
+        readonly issues?: undefined;
+    }
+    /** The result interface if validation fails. */
+    export interface FailureResult {
+        /** The issues of failed validation. */
+        readonly issues: ReadonlyArray<Issue>;
+    }
+    /** The issue interface of the failure output. */
+    export interface Issue {
+        /** The error message of the issue. */
+        readonly message: string;
+        /** The path of the issue, if any. */
+        readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
+    }
+    /** The path segment interface of the issue. */
+    export interface PathSegment {
+        /** The key representing a path segment. */
+        readonly key: PropertyKey;
+    }
+    /** The Standard Schema types interface. */
+    export interface Types<Input = unknown, Output = Input> {
+        /** The input type of the schema. */
+        readonly input: Input;
+        /** The output type of the schema. */
+        readonly output: Output;
+    }
+    /** Infers the input type of a Standard Schema. */
+    export type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["input"];
+    /** Infers the output type of a Standard Schema. */
+    export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["output"];
+    export {  };
+}
+
+export { StandardSchemaV1 };
Index: node_modules/@standard-schema/spec/dist/index.d.ts
===================================================================
--- node_modules/@standard-schema/spec/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/spec/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+/** The Standard Schema interface. */
+interface StandardSchemaV1<Input = unknown, Output = Input> {
+    /** The Standard Schema properties. */
+    readonly "~standard": StandardSchemaV1.Props<Input, Output>;
+}
+declare namespace StandardSchemaV1 {
+    /** The Standard Schema properties interface. */
+    export interface Props<Input = unknown, Output = Input> {
+        /** The version number of the standard. */
+        readonly version: 1;
+        /** The vendor name of the schema library. */
+        readonly vendor: string;
+        /** Validates unknown input values. */
+        readonly validate: (value: unknown) => Result<Output> | Promise<Result<Output>>;
+        /** Inferred types associated with the schema. */
+        readonly types?: Types<Input, Output> | undefined;
+    }
+    /** The result interface of the validate function. */
+    export type Result<Output> = SuccessResult<Output> | FailureResult;
+    /** The result interface if validation succeeds. */
+    export interface SuccessResult<Output> {
+        /** The typed output value. */
+        readonly value: Output;
+        /** The non-existent issues. */
+        readonly issues?: undefined;
+    }
+    /** The result interface if validation fails. */
+    export interface FailureResult {
+        /** The issues of failed validation. */
+        readonly issues: ReadonlyArray<Issue>;
+    }
+    /** The issue interface of the failure output. */
+    export interface Issue {
+        /** The error message of the issue. */
+        readonly message: string;
+        /** The path of the issue, if any. */
+        readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
+    }
+    /** The path segment interface of the issue. */
+    export interface PathSegment {
+        /** The key representing a path segment. */
+        readonly key: PropertyKey;
+    }
+    /** The Standard Schema types interface. */
+    export interface Types<Input = unknown, Output = Input> {
+        /** The input type of the schema. */
+        readonly input: Input;
+        /** The output type of the schema. */
+        readonly output: Output;
+    }
+    /** Infers the input type of a Standard Schema. */
+    export type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["input"];
+    /** Infers the output type of a Standard Schema. */
+    export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["output"];
+    export {  };
+}
+
+export { StandardSchemaV1 };
Index: node_modules/@standard-schema/spec/package.json
===================================================================
--- node_modules/@standard-schema/spec/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/spec/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+{
+  "name": "@standard-schema/spec",
+  "description": "A standard interface for TypeScript schema validation libraries",
+  "version": "1.0.0",
+  "license": "MIT",
+  "author": "Colin McDonnell",
+  "homepage": "https://standardschema.dev",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/standard-schema/standard-schema"
+  },
+  "keywords": [
+    "typescript",
+    "schema",
+    "validation",
+    "standard",
+    "interface"
+  ],
+  "type": "module",
+  "main": "./dist/index.js",
+  "types": "./dist/index.d.ts",
+  "exports": {
+    ".": {
+      "import": {
+        "types": "./dist/index.d.ts",
+        "default": "./dist/index.js"
+      },
+      "require": {
+        "types": "./dist/index.d.cts",
+        "default": "./dist/index.cjs"
+      }
+    }
+  },
+  "sideEffects": false,
+  "files": [
+    "dist"
+  ],
+  "publishConfig": {
+    "access": "public"
+  },
+  "devDependencies": {
+    "tsup": "^8.3.0",
+    "typescript": "^5.6.2"
+  },
+  "scripts": {
+    "lint": "pnpm biome lint ./src",
+    "format": "pnpm biome format --write ./src",
+    "check": "pnpm biome check ./src",
+    "build": "tsup"
+  }
+}
Index: node_modules/@standard-schema/utils/LICENSE
===================================================================
--- node_modules/@standard-schema/utils/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/utils/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Fabian Hiller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/@standard-schema/utils/README.md
===================================================================
--- node_modules/@standard-schema/utils/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/utils/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+# Standard Schema Utils
+
+There are two common tasks that third-party libraries perform after validation fails. The first is to flatten the issues by creating a dot path to more easily associate the issues with the input data. This is commonly used in form libraries. The second is to throw an error that contains all the issue information. To simplify both tasks, Standard Schema also ships a utils package that provides a `getDotPath` function and a `SchemaError` class.
+
+```sh
+npm install @standard-schema/utils   # npm
+yarn add @standard-schema/utils      # yarn
+pnpm add @standard-schema/utils      # pnpm
+bun add @standard-schema/utils       # bun
+deno add jsr:@standard-schema/utils  # deno
+```
+
+## Get Dot Path
+
+To generate a dot path, simply pass an issue to the `getDotPath` function. If the issue does not contain a path or the path contains a key that is not of type `string` or `number`, the function returns `null`.
+
+```ts
+import type { StandardSchemaV1 } from "@standard-schema/spec";
+import { getDotPath } from "@standard-schema/utils";
+
+async function getFormErrors(schema: StandardSchemaV1, data: unknown) {
+  const result = await schema["~standard"].validate(data);
+  const formErrors: string[] = [];
+  const fieldErrors: Record<string, string[]> = {};
+  if (result.issues) {
+    for (const issue of result.issues) {
+      const dotPath = getDotPath(issue);
+      if (dotPath) {
+        if (fieldErrors[dotPath]) {
+          fieldErrors[dotPath].push(issue.message);
+        } else {
+          fieldErrors[dotPath] = [issue.message];
+        }
+      } else {
+        formErrors.push(issue.message);
+      }
+    }
+  }
+  return { formErrors, fieldErrors };
+}
+```
+
+## Schema Error
+
+To throw an error that contains all issue information, simply pass the issues of the failed schema validation to the `SchemaError` class. The `SchemaError` class extends the `Error` class with an `issues` property that contains all the issues.
+
+```ts
+import type { StandardSchemaV1 } from "@standard-schema/spec";
+import { SchemaError } from "@standard-schema/utils";
+
+async function validateInput<TSchema extends StandardSchemaV1>(
+  schema: TSchema,
+  data: unknown,
+): Promise<StandardSchemaV1.InferOutput<TSchema>> {
+  const result = await schema["~standard"].validate(data);
+  if (result.issues) {
+    throw new SchemaError(result.issues);
+  }
+  return result.value;
+}
+```
Index: node_modules/@standard-schema/utils/dist/index.cjs
===================================================================
--- node_modules/@standard-schema/utils/dist/index.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/utils/dist/index.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var src_exports = {};
+__export(src_exports, {
+  SchemaError: () => SchemaError,
+  getDotPath: () => getDotPath
+});
+module.exports = __toCommonJS(src_exports);
+
+// src/getDotPath/getDotPath.ts
+function getDotPath(issue) {
+  if (issue.path?.length) {
+    let dotPath = "";
+    for (const item of issue.path) {
+      const key = typeof item === "object" ? item.key : item;
+      if (typeof key === "string" || typeof key === "number") {
+        if (dotPath) {
+          dotPath += `.${key}`;
+        } else {
+          dotPath += key;
+        }
+      } else {
+        return null;
+      }
+    }
+    return dotPath;
+  }
+  return null;
+}
+
+// src/SchemaError/SchemaError.ts
+var SchemaError = class extends Error {
+  /**
+   * The schema issues.
+   */
+  issues;
+  /**
+   * Creates a schema error with useful information.
+   *
+   * @param issues The schema issues.
+   */
+  constructor(issues) {
+    super(issues[0].message);
+    this.name = "SchemaError";
+    this.issues = issues;
+  }
+};
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  SchemaError,
+  getDotPath
+});
Index: node_modules/@standard-schema/utils/dist/index.d.cts
===================================================================
--- node_modules/@standard-schema/utils/dist/index.d.cts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/utils/dist/index.d.cts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import { StandardSchemaV1 } from '@standard-schema/spec';
+
+/**
+ * Creates and returns the dot path of an issue if possible.
+ *
+ * @param issue The issue to get the dot path from.
+ *
+ * @returns The dot path or null.
+ */
+declare function getDotPath(issue: StandardSchemaV1.Issue): string | null;
+
+/**
+ * A schema error with useful information.
+ */
+declare class SchemaError extends Error {
+    /**
+     * The schema issues.
+     */
+    readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;
+    /**
+     * Creates a schema error with useful information.
+     *
+     * @param issues The schema issues.
+     */
+    constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>);
+}
+
+export { SchemaError, getDotPath };
Index: node_modules/@standard-schema/utils/dist/index.d.ts
===================================================================
--- node_modules/@standard-schema/utils/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/utils/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import { StandardSchemaV1 } from '@standard-schema/spec';
+
+/**
+ * Creates and returns the dot path of an issue if possible.
+ *
+ * @param issue The issue to get the dot path from.
+ *
+ * @returns The dot path or null.
+ */
+declare function getDotPath(issue: StandardSchemaV1.Issue): string | null;
+
+/**
+ * A schema error with useful information.
+ */
+declare class SchemaError extends Error {
+    /**
+     * The schema issues.
+     */
+    readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;
+    /**
+     * Creates a schema error with useful information.
+     *
+     * @param issues The schema issues.
+     */
+    constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>);
+}
+
+export { SchemaError, getDotPath };
Index: node_modules/@standard-schema/utils/dist/index.js
===================================================================
--- node_modules/@standard-schema/utils/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/utils/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+// src/getDotPath/getDotPath.ts
+function getDotPath(issue) {
+  if (issue.path?.length) {
+    let dotPath = "";
+    for (const item of issue.path) {
+      const key = typeof item === "object" ? item.key : item;
+      if (typeof key === "string" || typeof key === "number") {
+        if (dotPath) {
+          dotPath += `.${key}`;
+        } else {
+          dotPath += key;
+        }
+      } else {
+        return null;
+      }
+    }
+    return dotPath;
+  }
+  return null;
+}
+
+// src/SchemaError/SchemaError.ts
+var SchemaError = class extends Error {
+  /**
+   * The schema issues.
+   */
+  issues;
+  /**
+   * Creates a schema error with useful information.
+   *
+   * @param issues The schema issues.
+   */
+  constructor(issues) {
+    super(issues[0].message);
+    this.name = "SchemaError";
+    this.issues = issues;
+  }
+};
+export {
+  SchemaError,
+  getDotPath
+};
Index: node_modules/@standard-schema/utils/package.json
===================================================================
--- node_modules/@standard-schema/utils/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@standard-schema/utils/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+{
+  "name": "@standard-schema/utils",
+  "description": "The official runtime utils for Standard Schema",
+  "version": "0.3.0",
+  "license": "MIT",
+  "author": "Fabian Hiller",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/standard-schema/standard-schema"
+  },
+  "keywords": [
+    "standard",
+    "schema",
+    "utils"
+  ],
+  "type": "module",
+  "main": "./dist/index.js",
+  "types": "./dist/index.d.ts",
+  "exports": {
+    ".": {
+      "import": {
+        "types": "./dist/index.d.ts",
+        "default": "./dist/index.js"
+      },
+      "require": {
+        "types": "./dist/index.d.cts",
+        "default": "./dist/index.cjs"
+      }
+    }
+  },
+  "sideEffects": false,
+  "files": [
+    "dist"
+  ],
+  "publishConfig": {
+    "access": "public"
+  },
+  "devDependencies": {
+    "@standard-schema/spec": "npm:@jsr/standard-schema__spec@1.0.0-beta.4",
+    "@vitest/coverage-v8": "2.1.2",
+    "tsup": "^8.3.0",
+    "typescript": "^5.6.2",
+    "vite": "^5.4.8",
+    "vitest": "^2.1.2"
+  },
+  "scripts": {
+    "test": "vitest",
+    "coverage": "vitest run --coverage --isolate",
+    "lint": "pnpm biome lint ./src",
+    "format": "pnpm biome format --write ./src",
+    "check": "pnpm biome check ./src",
+    "build": "tsup"
+  }
+}
Index: node_modules/@types/d3-array/LICENSE
===================================================================
--- node_modules/@types/d3-array/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-array/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/d3-array/README.md
===================================================================
--- node_modules/@types/d3-array/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-array/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/d3-array`
+
+# Summary
+This package contains type definitions for d3-array (https://github.com/d3/d3-array).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-array.
+
+### Additional Details
+ * Last updated: Tue, 07 Nov 2023 15:11:36 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [Alex Ford](https://github.com/gustavderdrache), [Boris Yankov](https://github.com/borisyankov), [Tom Wanzek](https://github.com/tomwanzek), [denisname](https://github.com/denisname), [Hugues Stefanski](https://github.com/ledragon), [Nathan Bierema](https://github.com/Methuselah96), and [Fil](https://github.com/Fil).
Index: node_modules/@types/d3-array/index.d.ts
===================================================================
--- node_modules/@types/d3-array/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-array/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1087 @@
+// Last module patch version validated against: 3.2.4
+
+// --------------------------------------------------------------------------
+// Shared Types and Interfaces
+// --------------------------------------------------------------------------
+
+/**
+ * Administrivia: JavaScript primitive types and Date
+ */
+export type Primitive = number | string | boolean | Date;
+
+/**
+ * Administrivia: anything with a valueOf(): number method is comparable, so we allow it in numeric operations
+ */
+export interface Numeric {
+    valueOf(): number;
+}
+
+/**
+ * Administrivia: a matrix of numeric values.
+ * If height is not specified, it is inferred from the given width and data.length.
+ */
+export interface Matrix {
+    data: ArrayLike<number>;
+    width: number;
+    height?: number;
+}
+
+/**
+ * Represents a nested/recursive InternMap type
+ *
+ * The first generic "TObject" refers to the type of the data object that is available in the accessor functions.
+ * The second generic "TReduce" refers to the type of the data available at the deepest level (the result data).
+ * The third generic "TKeys" refers to the type of the keys at each level of the nestes InternMap.
+ */
+export type NestedInternMap<TObject, TReduce, TKeys extends unknown[]> = TKeys extends [infer TFirst, ...infer TRest]
+    ? InternMap<TFirst, NestedInternMap<TObject, TReduce, TRest>>
+    : TReduce;
+
+/**
+ * Represents a nested/recursive Array type
+ *
+ * The first generic "TObject" refers to the type of the data object that is available in the accessor functions.
+ * The second generic "TReduce" refers to the type of the data available at the deepest level (the result data).
+ * The third generic "TKeys" refers to the type of the keys at each level of the nestes Array.
+ */
+export type NestedArray<TObject, TReduce, TKeys extends unknown[]> = TKeys extends [infer TFirst, ...infer TRest]
+    ? Array<[TFirst, NestedArray<TObject, TReduce, TRest>]>
+    : TReduce;
+
+// --------------------------------------------------------------------------------------
+// Statistics
+// --------------------------------------------------------------------------------------
+
+/**
+ * Return the minimum value in the array using natural order.
+ */
+export function min(iterable: Iterable<string>): string | undefined;
+
+/**
+ * Return the minimum value in the array using natural order.
+ */
+export function min<T extends Numeric>(iterable: Iterable<T>): T | undefined;
+/**
+ * Return the minimum value in the array using natural order.
+ */
+export function min<T>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => string | undefined | null,
+): string | undefined;
+/**
+ * Return the minimum value in the array using natural order.
+ */
+export function min<T, U extends Numeric>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => U | undefined | null,
+): U | undefined;
+
+/**
+ * Return the index of the minimum value in the array using natural order.
+ */
+export function minIndex(iterable: Iterable<unknown>): number;
+/**
+ * Return the index of the minimum value in the array using natural order and a projection function to map values.
+ */
+export function minIndex<TDatum>(
+    iterable: Iterable<TDatum>,
+    accessor: (datum: TDatum, index: number, array: Iterable<TDatum>) => unknown,
+): number;
+/**
+ * Return the index of the minimum value in the array using natural order.
+ */
+export function minIndex(iterable: Iterable<unknown>): number;
+
+/**
+ * Return the maximum value in the array of strings using natural order.
+ */
+export function max(iterable: Iterable<string>): string | undefined;
+/**
+ * Return the maximum value in the array of numbers using natural order.
+ */
+export function max<T extends Numeric>(iterable: Iterable<T>): T | undefined;
+/**
+ * Return the maximum value in the array using natural order and a projection function to map values to strings.
+ */
+export function max<T>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => string | undefined | null,
+): string | undefined;
+/**
+ * Return the maximum value in the array using natural order and a projection function to map values to easily-sorted values.
+ */
+export function max<T, U extends Numeric>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => U | undefined | null,
+): U | undefined;
+
+/**
+ * Return the index of the maximum value in the array using natural order.
+ */
+export function maxIndex(iterable: Iterable<unknown>): number;
+/**
+ * Return the index of the maximum value in the array using natural order and a projection function to map values.
+ */
+export function maxIndex<TDatum>(
+    iterable: Iterable<TDatum>,
+    accessor: (datum: TDatum, index: number, array: Iterable<TDatum>) => unknown,
+): number;
+
+/**
+ * Return the min and max simultaneously.
+ */
+export function extent(iterable: Iterable<string>): [string, string] | [undefined, undefined];
+/**
+ * Return the min and max simultaneously.
+ */
+export function extent<T extends Numeric>(iterable: Iterable<T>): [T, T] | [undefined, undefined];
+/**
+ * Return the min and max simultaneously.
+ */
+export function extent<T>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => string | undefined | null,
+): [string, string] | [undefined, undefined];
+/**
+ * Return the min and max simultaneously.
+ */
+export function extent<T, U extends Numeric>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => U | undefined | null,
+): [U, U] | [undefined, undefined];
+
+/**
+ * Returns the mode of the given iterable, i.e. the value which appears the most often.
+ * In case of equality, returns the first of the relevant values.
+ * If the iterable contains no comparable values, returns undefined.
+ * An optional accessor function may be specified, which is equivalent to calling Array.from before computing the mode.
+ * This method ignores undefined, null and NaN values; this is useful for ignoring missing data.
+ */
+export function mode(iterable: Iterable<Numeric | undefined | null>): number;
+/**
+ * Returns the mode of the given iterable, i.e. the value which appears the most often.
+ * In case of equality, returns the first of the relevant values.
+ * If the iterable contains no comparable values, returns undefined.
+ * An optional accessor function may be specified, which is equivalent to calling Array.from before computing the mode.
+ * This method ignores undefined, null and NaN values; this is useful for ignoring missing data.
+ */
+export function mode<T>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => number | undefined | null,
+): number;
+
+/**
+ * Compute the sum of an array of numbers.
+ */
+export function sum(iterable: Iterable<Numeric | undefined | null>): number;
+/**
+ * Compute the sum of an array, using the given accessor to convert values to numbers.
+ */
+export function sum<T>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => number | undefined | null,
+): number;
+
+/**
+ * Return the mean of an array of numbers
+ */
+export function mean(iterable: Iterable<Numeric | undefined | null>): number | undefined;
+/**
+ * Return the mean of an array of numbers
+ */
+export function mean<T>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => number | undefined | null,
+): number | undefined;
+
+/**
+ * Return the median of an array of numbers
+ */
+export function median(iterable: Iterable<Numeric | undefined | null>): number | undefined;
+/**
+ * Return the median of an array of numbers
+ */
+export function median<T>(
+    iterable: Iterable<T>,
+    accessor: (element: T, i: number, array: Iterable<T>) => number | undefined | null,
+): number | undefined;
+
+/**
+ * Like median, but returns the index of the element to the left of the median.
+ */
+export function medianIndex(iterable: Iterable<Numeric | undefined | null>): number;
+/**
+ * Like median, but returns the index of the element to the left of the median.
+ */
+export function medianIndex<T>(
+    iterable: Iterable<T>,
+    accessor: (element: T, i: number, array: Iterable<T>) => number | undefined | null,
+): number;
+
+/**
+ * Returns the cumulative sum of the given iterable of numbers, as a Float64Array of the same length.
+ * If the iterable contains no numbers, returns zeros.
+ * An optional accessor function may be specified, which is equivalent to calling Array.from before computing the cumulative sum.
+ * This method ignores undefined and NaN values; this is useful for ignoring missing data.
+ */
+export function cumsum(iterable: Iterable<Numeric | undefined | null>): Float64Array;
+/**
+ * Returns the cumulative sum of the given iterable of numbers, as a Float64Array of the same length.
+ * If the iterable contains no numbers, returns zeros.
+ * An optional accessor function may be specified, which is equivalent to calling Array.from before computing the cumulative sum.
+ * This method ignores undefined and NaN values; this is useful for ignoring missing data.
+ */
+export function cumsum<T>(
+    iterable: Iterable<T>,
+    accessor: (element: T, i: number, array: Iterable<T>) => number | undefined | null,
+): Float64Array;
+
+/**
+ * Returns the p-quantile of the given iterable of numbers, where p is a number in the range [0, 1].
+ *
+ * An optional accessor function may be specified, which is equivalent to calling array.map(accessor) before computing the quantile.
+ */
+export function quantile(iterable: Iterable<Numeric | undefined | null>, p: number): number | undefined;
+/**
+ * Returns the p-quantile of the given iterable of numbers, where p is a number in the range [0, 1].
+ *
+ * An optional accessor function may be specified, which is equivalent to calling array.map(accessor) before computing the quantile.
+ */
+export function quantile<T>(
+    iterable: Iterable<T>,
+    p: number,
+    accessor: (element: T, i: number, array: Iterable<T>) => number | undefined | null,
+): number | undefined;
+
+/**
+ * Similar to quantile, but returns the index to the left of p.
+ */
+export function quantileIndex(iterable: Iterable<Numeric | undefined | null>, p: number): number;
+/**
+ * Similar to quantile, but returns the index to the left of p.
+ */
+export function quantileIndex<T>(
+    iterable: Iterable<T>,
+    p: number,
+    accessor: (element: T, i: number, array: Iterable<T>) => number | undefined | null,
+): number;
+
+/**
+ * Similar to quantile, but expects the input to be a sorted array of values.
+ * In contrast with quantile, the accessor is only called on the elements needed to compute the quantile.
+ */
+export function quantileSorted(
+    array: Array<Numeric | undefined | null>,
+    p: number,
+): number | undefined;
+/**
+ * Similar to quantile, but expects the input to be a sorted array of values.
+ * In contrast with quantile, the accessor is only called on the elements needed to compute the quantile.
+ */
+export function quantileSorted<T>(
+    array: T[],
+    p: number,
+    accessor: (element: T, i: number, array: T[]) => number | undefined | null,
+): number | undefined;
+
+/**
+ * Returns an array with the rank of each value in the iterable, i.e. the zero-based index of the value when the iterable is sorted.
+ * Nullish values are sorted to the end and ranked NaN.
+ * An optional comparator or accessor function may be specified; the latter is equivalent to calling array.map(accessor) before computing the ranks.
+ * If comparator is not specified, it defaults to ascending.
+ * Ties (equivalent values) all get the same rank, defined as the first time the value is found.
+ */
+export function rank(iterable: Iterable<Numeric | undefined | null>): Float64Array;
+/**
+ * Returns an array with the rank of each value in the iterable, i.e. the zero-based index of the value when the iterable is sorted.
+ * Nullish values are sorted to the end and ranked NaN.
+ * An optional comparator or accessor function may be specified; the latter is equivalent to calling array.map(accessor) before computing the ranks.
+ * If comparator is not specified, it defaults to ascending.
+ * Ties (equivalent values) all get the same rank, defined as the first time the value is found.
+ */
+export function rank<T>(
+    iterable: Iterable<T>,
+    accessorOrComparator:
+        | ((datum: T, index: number, array: Iterable<T>) => number | undefined | null)
+        | ((a: T, b: T) => number | undefined | null),
+): Float64Array;
+
+/**
+ * Returns an unbiased estimator of the population variance of the given iterable of numbers using Welford’s algorithm.
+ * If the iterable has fewer than two numbers, returns undefined.
+ * An optional accessor function may be specified, which is equivalent to calling Array.from before computing the variance.
+ * This method ignores undefined and NaN values; this is useful for ignoring missing data.
+ */
+export function variance(iterable: Iterable<Numeric | undefined | null>): number | undefined;
+/**
+ * Returns an unbiased estimator of the population variance of the given iterable of numbers using Welford’s algorithm.
+ * If the iterable has fewer than two numbers, returns undefined.
+ * An optional accessor function may be specified, which is equivalent to calling Array.from before computing the variance.
+ * This method ignores undefined and NaN values; this is useful for ignoring missing data.
+ */
+export function variance<T>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => number | undefined | null,
+): number | undefined;
+
+/**
+ * Compute the standard deviation, defined as the square root of the bias-corrected variance, of the given array of numbers.
+ */
+export function deviation(iterable: Iterable<Numeric | undefined | null>): number | undefined;
+/**
+ * Compute the standard deviation, defined as the square root of the bias-corrected variance, of the given array,
+ * using the given accessor to convert values to numbers.
+ */
+export function deviation<T>(
+    iterable: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => number | undefined | null,
+): number | undefined;
+
+/**
+ * Returns a full precision summation of the given values.
+ * Although slower, d3.fsum can replace d3.sum wherever greater precision is needed. Uses d3.Adder.
+ */
+export function fsum(values: Iterable<Numeric | undefined | null>): number;
+/**
+ * Returns a full precision summation of the given values.
+ * Although slower, d3.fsum can replace d3.sum wherever greater precision is needed. Uses d3.Adder.
+ */
+export function fsum<T>(
+    values: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => number | undefined | null,
+): number;
+
+/**
+ * Returns a full precision cumulative sum of the given values.
+ * Although slower, d3.fcumsum can replace d3.cumsum when greater precision is needed. Uses d3.Adder.
+ */
+export function fcumsum(values: Iterable<Numeric | undefined | null>): Float64Array;
+/**
+ * Returns a full precision cumulative sum of the given values.
+ * Although slower, d3.fcumsum can replace d3.cumsum when greater precision is needed. Uses d3.Adder.
+ */
+export function fcumsum<T>(
+    values: Iterable<T>,
+    accessor: (datum: T, index: number, array: Iterable<T>) => number | undefined | null,
+): Float64Array;
+
+export class Adder {
+    /**
+     * Creates a full precision adder for IEEE 754 floating point numbers, setting its initial value to 0.
+     */
+    constructor();
+
+    /**
+     * Adds the specified number to the adder’s current value and returns the adder.
+     */
+    add(number: number): Adder;
+
+    /**
+     * Returns the IEEE 754 double precision representation of the adder’s current value.
+     * Most useful as the short-hand notation +adder.
+     */
+    valueOf(): number;
+}
+
+// --------------------------------------------------------------------------------------
+// Search
+// --------------------------------------------------------------------------------------
+
+/**
+ * Returns the least element of the specified iterable according to the specified comparator.
+ * If comparator is not specified, it defaults to ascending.
+ */
+export function least<T>(iterable: Iterable<T>, comparator?: (a: T, b: T) => number): T | undefined;
+/**
+ * Returns the least element of the specified iterable according to the specified accessor.
+ */
+export function least<T>(iterable: Iterable<T>, accessor: (a: T) => unknown): T | undefined;
+
+/**
+ * Returns the index of the least element of the specified iterable according to the specified comparator.
+ */
+export function leastIndex(iterable: Iterable<unknown>): number | undefined;
+/**
+ * Returns the index of the least element of the specified iterable according to the specified comparator.
+ */
+export function leastIndex<T>(iterable: Iterable<T>, comparator: (a: T, b: T) => number): number | undefined;
+/**
+ * Returns the index of the least element of the specified iterable according to the specified accessor.
+ */
+// tslint:disable-next-line:unified-signatures
+export function leastIndex<T>(iterable: Iterable<T>, accessor: (a: T) => unknown): number | undefined;
+
+/**
+ * Returns the greatest element of the specified iterable according to the specified comparator or accessor.
+ * If the given iterable contains no comparable elements (i.e., the comparator returns NaN when comparing each element to itself), returns undefined.
+ * If comparator is not specified, it defaults to ascending.
+ */
+export function greatest<T>(iterable: Iterable<T>, comparator?: (a: T, b: T) => number): T | undefined;
+/**
+ * Returns the greatest element of the specified iterable according to the specified comparator or accessor.
+ * If the given iterable contains no comparable elements (i.e., the comparator returns NaN when comparing each element to itself), returns undefined.
+ * If comparator is not specified, it defaults to ascending.
+ */
+export function greatest<T>(iterable: Iterable<T>, accessor: (a: T) => unknown): T | undefined;
+
+/**
+ * Returns the index of the greatest element of the specified iterable according to the specified comparator or accessor.
+ * If the given iterable contains no comparable elements (i.e., the comparator returns NaN when comparing each element to itself), returns -1.
+ * If comparator is not specified, it defaults to ascending.
+ */
+export function greatestIndex(iterable: Iterable<unknown>): number | undefined;
+/**
+ * Returns the index of the greatest element of the specified iterable according to the specified comparator or accessor.
+ * If the given iterable contains no comparable elements (i.e., the comparator returns NaN when comparing each element to itself), returns -1.
+ * If comparator is not specified, it defaults to ascending.
+ */
+export function greatestIndex<T>(iterable: Iterable<T>, comparator: (a: T, b: T) => number): number | undefined;
+/**
+ * Returns the index of the greatest element of the specified iterable according to the specified comparator or accessor.
+ * If the given iterable contains no comparable elements (i.e., the comparator returns NaN when comparing each element to itself), returns -1.
+ * If comparator is not specified, it defaults to ascending.
+ */
+// tslint:disable-next-line:unified-signatures
+export function greatestIndex<T>(iterable: Iterable<T>, accessor: (a: T) => unknown): number | undefined;
+
+export function bisectLeft(array: ArrayLike<number>, x: number, lo?: number, hi?: number): number;
+export function bisectLeft(array: ArrayLike<string>, x: string, lo?: number, hi?: number): number;
+export function bisectLeft(array: ArrayLike<Date>, x: Date, lo?: number, hi?: number): number;
+
+export function bisectRight(array: ArrayLike<number>, x: number, lo?: number, hi?: number): number;
+export function bisectRight(array: ArrayLike<string>, x: string, lo?: number, hi?: number): number;
+export function bisectRight(array: ArrayLike<Date>, x: Date, lo?: number, hi?: number): number;
+
+export function bisectCenter(array: ArrayLike<number>, x: number, lo?: number, hi?: number): number;
+export function bisectCenter(array: ArrayLike<string>, x: string, lo?: number, hi?: number): number;
+export function bisectCenter(array: ArrayLike<Date>, x: Date, lo?: number, hi?: number): number;
+
+export const bisect: typeof bisectRight;
+
+export interface Bisector<T, U> {
+    left(array: ArrayLike<T>, x: U, lo?: number, hi?: number): number;
+    right(array: ArrayLike<T>, x: U, lo?: number, hi?: number): number;
+    center(array: ArrayLike<T>, x: U, lo?: number, hi?: number): number;
+}
+
+export function bisector<T, U>(comparator: (a: T, b: U) => number): Bisector<T, U>;
+// tslint:disable-next-line:unified-signatures
+export function bisector<T, U>(accessor: (x: T) => U): Bisector<T, U>;
+
+/**
+ * Rearranges items so that all items in the [left, k] are the smallest. The k-th element will have the (k - left + 1)-th smallest value in [left, right].
+ *
+ * @param array The array to partially sort (in place).
+ * @param k The middle index for partial sorting.
+ * @param left The left index of the range to sort.
+ * @param right The right index.
+ * @param compare The compare function.
+ */
+export function quickselect<T>(
+    array: ArrayLike<T>,
+    k: number,
+    left?: number,
+    right?: number,
+    compare?: (a: Primitive | undefined, b: Primitive | undefined) => number,
+): T[];
+
+// NB. this is limited to primitive values due to D3's use of the <, >, and >= operators. Results get weird for object instances.
+/**
+ * Compares two primitive values for sorting (in ascending order).
+ */
+export function ascending(a: Primitive | undefined, b: Primitive | undefined): number;
+
+// NB. this is limited to primitive values due to D3's use of the <, >, and >= operators. Results get weird for object instances.
+/**
+ * Compares two primitive values for sorting (in descending order).
+ */
+export function descending(a: Primitive | undefined, b: Primitive | undefined): number;
+
+// --------------------------------------------------------------------------------------
+// Transformations
+// --------------------------------------------------------------------------------------
+
+/**
+ * Groups the specified iterable of values into an InternMap from key to array of value.
+ *
+ * @param iterable The iterable to group.
+ * @param keys The key functions.
+ */
+export function group<TObject, TKeys extends unknown[]>(
+    iterable: Iterable<TObject>,
+    ...keys: {
+        [Index in keyof TKeys]: (value: TObject, index: number, values: TObject[]) => TKeys[Index];
+    }
+): NestedInternMap<TObject, TObject[], TKeys>;
+
+/**
+ * Equivalent to group, but returns nested arrays instead of nested maps.
+ *
+ * @param iterable The iterable to group.
+ * @param keys The key functions.
+ */
+export function groups<TObject, TKeys extends unknown[]>(
+    iterable: Iterable<TObject>,
+    ...keys: {
+        [Index in keyof TKeys]: (value: TObject, index: number, values: TObject[]) => TKeys[Index];
+    }
+): NestedArray<TObject, TObject[], TKeys>;
+
+/**
+ * Equivalent to group, but returns a flat array of [key0, key1, …, values] instead of nested maps.
+ *
+ * @param iterable The iterable to group.
+ * @param keys The key functions.
+ */
+export function flatGroup<TObject, TKeys extends unknown[]>(
+    iterable: Iterable<TObject>,
+    ...keys: {
+        [Index in keyof TKeys]: (value: TObject, index: number, values: TObject[]) => TKeys[Index];
+    }
+): Array<[...TKeys, TObject[]]>;
+
+/**
+ * Equivalent to group but returns a unique value per compound key instead of an array, throwing if the key is not unique.
+ *
+ * @param iterable The iterable to group.
+ * @param key The key functions.
+ */
+export function index<TObject, TKeys extends unknown[]>(
+    iterable: Iterable<TObject>,
+    ...keys: {
+        [Index in keyof TKeys]: (value: TObject, index: number, values: TObject[]) => TKeys[Index];
+    }
+): NestedInternMap<TObject, TObject, TKeys>;
+
+/**
+ * Equivalent to index, but returns nested arrays instead of nested maps.
+ *
+ * @param iterable The iterable to group.
+ * @param keys The key functions.
+ */
+export function indexes<TObject, TKeys extends unknown[]>(
+    iterable: Iterable<TObject>,
+    ...keys: {
+        [Index in keyof TKeys]: (value: TObject, index: number, values: TObject[]) => TKeys[Index];
+    }
+): NestedArray<TObject, TObject, TKeys>;
+
+/**
+ * Groups and reduces the specified array of values into an InternMap from key to value.
+ *
+ * @param iterable The iterable to group.
+ * @param reduce The reduce function.
+ * @param keys The key functions.
+ */
+export function rollup<TObject, TReduce, TKeys extends unknown[]>(
+    iterable: Iterable<TObject>,
+    reduce: (values: TObject[]) => TReduce,
+    ...keys: {
+        [Index in keyof TKeys]: (value: TObject, index: number, values: TObject[]) => TKeys[Index];
+    }
+): NestedInternMap<TObject, TReduce, TKeys>;
+
+/**
+ * Equivalent to rollup, but returns nested arrays instead of nested maps.
+ *
+ * @param iterable The iterable to group.
+ * @param reduce The reduce function.
+ * @param keys The key functions.
+ */
+export function rollups<TObject, TReduce, TKeys extends unknown[]>(
+    iterable: Iterable<TObject>,
+    reduce: (values: TObject[]) => TReduce,
+    ...keys: {
+        [Index in keyof TKeys]: (value: TObject, index: number, values: TObject[]) => TKeys[Index];
+    }
+): NestedArray<TObject, TReduce, TKeys>;
+
+/**
+ * Equivalent to rollup, but returns a flat array of [key0, key1, …, value] instead of nested maps.
+ *
+ * @param iterable The iterable to group.
+ * @param reduce The reduce function.
+ * @param keys The key functions.
+ */
+export function flatRollup<TObject, TReduce, TKeys extends unknown[]>(
+    iterable: Iterable<TObject>,
+    reduce: (values: TObject[]) => TReduce,
+    ...keys: {
+        [Index in keyof TKeys]: (value: TObject, index: number, values: TObject[]) => TKeys[Index];
+    }
+): Array<[...TKeys, TReduce]>;
+
+/**
+ * Groups the specified iterable of elements according to the specified key function, sorts the groups according to the specified comparator, and then returns an array of keys in sorted order.
+ * The comparator will be asked to compare two groups a and b and should return a negative value if a should be before b, a positive value if a should be after b, or zero for a partial ordering.
+ */
+export function groupSort<TObject, TKey>(
+    iterable: Iterable<TObject>,
+    comparator: (a: TObject[], b: TObject[]) => number,
+    key: (value: TObject) => TKey,
+): TKey[];
+/**
+ * Groups the specified iterable of elements according to the specified key function, sorts the groups according to the specified accessor, and then returns an array of keys in sorted order.
+ */
+export function groupSort<TObject, TKey>(
+    iterable: Iterable<TObject>,
+    // tslint:disable-next-line:unified-signatures
+    accessor: (value: TObject[]) => unknown,
+    key: (value: TObject) => TKey,
+): TKey[];
+
+/**
+ * Returns the number of valid number values (i.e., not null, NaN, or undefined) in the specified iterable; accepts an accessor.
+ *
+ * @param iterable Input array.
+ */
+export function count(iterable: Iterable<unknown>): number;
+/**
+ * Returns the number of valid number values (i.e., not null, NaN, or undefined) in the specified iterable; accepts an accessor.
+ *
+ * @param iterable Input array.
+ * @param accessor Accessor method.
+ */
+export function count<TObject>(
+    iterable: Iterable<TObject>,
+    accessor: (a: TObject, b: TObject) => number | null | undefined,
+): number;
+
+/**
+ * Returns the Cartesian product of the two arrays a and b.
+ * For each element i in the specified array a and each element j in the specified array b, in order,
+ * it creates a two-element array for each pair.
+ *
+ * @param a First input array.
+ * @param b Second input array.
+ */
+export function cross<S, T>(a: Iterable<S>, b: Iterable<T>): Array<[S, T]>;
+
+/**
+ * Returns the Cartesian product of the two arrays a and b.
+ * For each element i in the specified array a and each element j in the specified array b, in order,
+ * invokes the specified reducer function passing the element i and element j.
+ *
+ * @param a First input array.
+ * @param b Second input array.
+ * @param reducer A reducer function taking as input an element from "a" and "b" and returning a reduced value.
+ */
+export function cross<S, T, U>(a: Iterable<S>, b: Iterable<T>, reducer: (a: S, b: T) => U): U[];
+
+/**
+ * Merges the specified arrays into a single array.
+ */
+export function merge<T>(iterables: Iterable<Iterable<T>>): T[];
+
+/**
+ * For each adjacent pair of elements in the specified array, returns a new array of tuples of elements i and i - 1.
+ * Returns the empty array if the input array has fewer than two elements.
+ *
+ * @param iterable Array of input elements
+ */
+export function pairs<T>(iterable: Iterable<T>): Array<[T, T]>;
+/**
+ * For each adjacent pair of elements in the specified array, in order, invokes the specified reducer function passing the element i and element i - 1.
+ * Returns the resulting array of pair-wise reduced elements.
+ * Returns the empty array if the input array has fewer than two elements.
+ *
+ * @param iterable Array of input elements
+ * @param reducer A reducer function taking as input to adjacent elements of the input array and returning a reduced value.
+ */
+export function pairs<T, U>(iterable: Iterable<T>, reducer: (a: T, b: T) => U): U[];
+
+/**
+ * Returns a permutation of the specified source object (or array) using the specified iterable of keys.
+ * The returned array contains the corresponding property of the source object for each key in keys, in order.
+ * For example, `permute(["a", "b", "c"], [1, 2, 0]) // ["b", "c", "a"]`
+ *
+ * It is acceptable to have more keys than source elements, and for keys to be duplicated or omitted.
+ */
+export function permute<T>(source: { [key: number]: T }, keys: Iterable<number>): T[];
+/**
+ * Extract the values from an object into an array with a stable order. For example:
+ * `var object = {yield: 27, year: 1931, site: "University Farm"};`
+ * `d3.permute(object, ["site", "yield"]); // ["University Farm", 27]`
+ */
+export function permute<T, K extends keyof T>(source: T, keys: Iterable<K>): Array<T[K]>;
+
+/**
+ * Randomizes the order of the specified array using the Fisher–Yates shuffle.
+ */
+export function shuffle<T>(array: T[], lo?: number, hi?: number): T[];
+export function shuffle(array: Int8Array, lo?: number, hi?: number): Int8Array;
+export function shuffle(array: Uint8Array, lo?: number, hi?: number): Uint8Array;
+export function shuffle(array: Uint8ClampedArray, lo?: number, hi?: number): Uint8ClampedArray;
+export function shuffle(array: Int16Array, lo?: number, hi?: number): Int16Array;
+export function shuffle(array: Uint16Array, lo?: number, hi?: number): Uint16Array;
+export function shuffle(array: Int32Array, lo?: number, hi?: number): Int32Array;
+export function shuffle(array: Uint32Array, lo?: number, hi?: number): Uint32Array;
+export function shuffle(array: Float32Array, lo?: number, hi?: number): Float32Array;
+export function shuffle(array: Float64Array, lo?: number, hi?: number): Float64Array;
+
+/**
+ * Returns a shuffle function given the specified random source.
+ */
+export function shuffler(random: () => number): typeof shuffle;
+
+/**
+ * Generate an array of approximately count + 1 uniformly-spaced, nicely-rounded values between start and stop (inclusive).
+ * Each value is a power of ten multiplied by 1, 2 or 5. See also d3.tickIncrement, d3.tickStep and linear.ticks.
+ *
+ * Ticks are inclusive in the sense that they may include the specified start and stop values if (and only if) they are exact,
+ * nicely-rounded values consistent with the inferred step. More formally, each returned tick t satisfies start ≤ t and t ≤ stop.
+ *
+ * @param start Start value for ticks
+ * @param stop Stop value for ticks
+ * @param count count + 1 is the approximate number of ticks to be returned by d3.ticks.
+ */
+export function ticks(start: number, stop: number, count: number): number[];
+
+/**
+ * Returns the difference between adjacent tick values if the same arguments were passed to d3.ticks:
+ * a nicely-rounded value that is a power of ten multiplied by 1, 2 or 5.
+ *
+ * Like d3.tickStep, except requires that start is always less than or equal to stop, and if the tick step for the given start,
+ * stop and count would be less than one, returns the negative inverse tick step instead.
+ *
+ * This method is always guaranteed to return an integer, and is used by d3.ticks to avoid guarantee that the returned tick values
+ * are represented as precisely as possible in IEEE 754 floating point.
+ *
+ * @param start Start value for ticks
+ * @param stop Stop value for ticks
+ * @param count count + 1 is the approximate number of ticks to be returned by d3.ticks.
+ */
+export function tickIncrement(start: number, stop: number, count: number): number;
+
+/**
+ * Returns the difference between adjacent tick values if the same arguments were passed to d3.ticks:
+ * a nicely-rounded value that is a power of ten multiplied by 1, 2 or 5.
+ *
+ * Note that due to the limited precision of IEEE 754 floating point, the returned value may not be exact decimals;
+ * use d3-format to format numbers for human consumption.
+ *
+ * @param start Start value for ticks
+ * @param stop Stop value for ticks
+ * @param count count + 1 is the approximate number of ticks to be returned by d3.ticks.
+ */
+export function tickStep(start: number, stop: number, count: number): number;
+
+/**
+ * Returns a new interval [niceStart, niceStop] covering the given interval [start, stop] and where niceStart and niceStop are guaranteed to align with the corresponding tick step.
+ * Like d3.tickIncrement, this requires that start is less than or equal to stop.
+ *
+ * @param start Start value for ticks
+ * @param stop Stop value for ticks
+ * @param count count + 1 is the approximate number of ticks to be returned by d3.ticks.
+ */
+export function nice(start: number, stop: number, count: number): [number, number];
+
+/**
+ * Generates a 0-based numeric sequence. The output range does not include 'stop'.
+ */
+export function range(stop: number): number[];
+/**
+ * Generates a numeric sequence starting from the given start and stop values. 'step' defaults to 1. The output range does not include 'stop'.
+ */
+// tslint:disable-next-line:unified-signatures
+export function range(start: number, stop: number, step?: number): number[];
+
+/**
+ * Transpose a matrix provided in Array of Arrays format.
+ */
+export function transpose<T>(matrix: ArrayLike<ArrayLike<T>>): T[][];
+
+/**
+ * Returns an array of arrays, where the ith array contains the ith element from each of the argument arrays.
+ * The returned array is truncated in length to the shortest array in arrays. If arrays contains only a single array, the returned array
+ * contains one-element arrays. With no arguments, the returned array is empty.
+ */
+export function zip<T>(...arrays: Array<ArrayLike<T>>): T[][];
+
+// --------------------------------------------------------------------------------------
+// Blur
+// --------------------------------------------------------------------------------------
+
+/**
+ * Blurs an array of data in-place by applying three iterations of a moving average transform (box filter)
+ * for a fast approximation of a Gaussian kernel of the given radius, a non-negative number.
+ * Returns the given data.
+ */
+export function blur(data: ArrayLike<number>, radius: number): ArrayLike<number>;
+
+/**
+ * Blurs a matrix of the given width and height in-place by applying a horizontal blur of radius rx
+ * and a vertical blur of radius ry (which defaults to rx).
+ * The matrix values data are stored in a flat (one-dimensional) array.
+ * If height is not specified, it is inferred from the given width and data.length.
+ * Returns the blurred matrix {data, width, height}.
+ */
+export function blur2(data: Matrix, rx: number, ry?: number): Matrix;
+
+/**
+ * Blurs the given ImageData in-place, blurring each of the RGBA layers independently by applying an horizontal blur of radius rx
+ * and a vertical blur of radius ry (which defaults to rx).
+ * Returns the blurred ImageData.
+ */
+export function blurImage(imageData: ImageData, rx: number, ry?: number): ImageData;
+
+// --------------------------------------------------------------------------------------
+// Iterables
+// --------------------------------------------------------------------------------------
+
+/**
+ * Returns true if the given test function returns true for every value in the given iterable.
+ * This method returns as soon as test returns a non-truthy value or all values are iterated over.
+ * Equivalent to array.every.
+ */
+export function every<T>(
+    iterable: Iterable<T>,
+    test: (value: T, index: number, iterable: Iterable<T>) => unknown,
+): boolean;
+
+/**
+ * Returns true if the given test function returns true for any value in the given iterable.
+ * This method returns as soon as test returns a truthy value or all values are iterated over.
+ * Equivalent to array.some.
+ */
+export function some<T>(
+    iterable: Iterable<T>,
+    test: (value: T, index: number, iterable: Iterable<T>) => unknown,
+): boolean;
+
+/**
+ * Returns a new array containing the values from iterable, in order, for which the given test function returns true.
+ * Equivalent to array.filter.
+ */
+export function filter<T>(
+    iterable: Iterable<T>,
+    test: (value: T, index: number, iterable: Iterable<T>) => unknown,
+): T[];
+
+/**
+ * Returns a new array containing the mapped values from iterable, in order, as defined by given mapper function.
+ * Equivalent to array.map and Array.from.
+ */
+export function map<T, U>(iterable: Iterable<T>, mapper: (value: T, index: number, iterable: Iterable<T>) => U): U[];
+
+/**
+ * Returns the reduced value defined by given reducer function, which is repeatedly invoked for each value in iterable, being passed the current reduced value and the next value.
+ * Equivalent to array.reduce.
+ */
+export function reduce<T>(
+    iterable: Iterable<T>,
+    reducer: (previousValue: T, currentValue: T, currentIndex: number, iterable: Iterable<T>) => T,
+    initialValue?: T,
+): T;
+/**
+ * Returns the reduced value defined by given reducer function, which is repeatedly invoked for each value in iterable, being passed the current reduced value and the next value.
+ * Equivalent to array.reduce.
+ */
+export function reduce<T, U>(
+    iterable: Iterable<T>,
+    reducer: (previousValue: U, currentValue: T, currentIndex: number, iterable: Iterable<T>) => U,
+    initialValue: U,
+): U;
+
+/**
+ * Returns an array containing the values in the given iterable in reverse order.
+ * Equivalent to array.reverse, except that it does not mutate the given iterable.
+ */
+export function reverse<T>(iterable: Iterable<T>): T[];
+
+/**
+ * Returns an array containing the values in the given iterable in the sorted order defined by the given comparator function.
+ * If comparator is not specified, it defaults to d3.ascending.
+ * Equivalent to array.sort, except that it does not mutate the given iterable, and the comparator defaults to natural order instead of lexicographic order.
+ */
+export function sort<T>(iterable: Iterable<T>, comparator?: (a: T, b: T) => number): T[];
+/**
+ * Returns an array containing the values in the given iterable in the sorted order defined by the given accessor function.
+ * This is equivalent to a comparator using natural order.
+ * The accessor is only invoked once per element, and thus may be nondeterministic.
+ * Multiple accessors may be specified to break ties.
+ */
+export function sort<T>(iterable: Iterable<T>, ...accessors: Array<(a: T) => unknown>): T[];
+
+// --------------------------------------------------------------------------------------
+// Sets
+// --------------------------------------------------------------------------------------
+
+/**
+ * Returns a new InternSet containing every value in iterable that is not in any of the others iterables.
+ */
+export function difference<T>(iterable: Iterable<T>, ...others: Array<Iterable<T>>): InternSet<T>;
+
+/**
+ * Returns a new InternSet containing every (distinct) value that appears in any of the given iterables.
+ * The order of values in the returned set is based on their first occurrence in the given iterables.
+ */
+export function union<T>(...iterables: Array<Iterable<T>>): InternSet<T>;
+
+/**
+ * Returns a new InternSet containing every (distinct) value that appears in all of the given iterables.
+ * The order of values in the returned set is based on their first occurrence in the given iterables.
+ */
+export function intersection<T>(...iterables: Array<Iterable<T>>): InternSet<T>;
+
+/**
+ * Returns true if a is a superset of b: if every value in the given iterable b is also in the given iterable a.
+ */
+export function superset<T>(a: Iterable<T>, b: Iterable<T>): boolean;
+
+/**
+ * Returns true if a is a subset of b: if every value in the given iterable a is also in the given iterable b.
+ */
+export function subset<T>(a: Iterable<T>, b: Iterable<T>): boolean;
+
+/**
+ * Returns true if a and b are disjoint: if a and b contain no shared value.
+ */
+export function disjoint<T>(a: Iterable<T>, b: Iterable<T>): boolean;
+
+// --------------------------------------------------------------------------------------
+// Bins
+// --------------------------------------------------------------------------------------
+
+export interface Bin<Datum, Value extends number | Date | undefined> extends Array<Datum> {
+    x0: Value | undefined;
+    x1: Value | undefined;
+}
+
+/**
+ * Type definition for threshold generator which returns the count of recommended thresholds
+ */
+export type ThresholdCountGenerator<Value extends number | undefined = number | undefined> = (
+    values: ArrayLike<Value>,
+    min: number,
+    max: number,
+) => number;
+
+/**
+ * Type definition for threshold generator which returns an array of recommended numbers thresholds
+ */
+export type ThresholdNumberArrayGenerator<Value extends number | undefined> = (
+    values: ArrayLike<Value>,
+    min: number,
+    max: number,
+) => Value[];
+
+/**
+ * Type definition for threshold generator which returns an array of recommended dates thresholds
+ */
+export type ThresholdDateArrayGenerator<Value extends Date | undefined> = (
+    values: ArrayLike<Value>,
+    min: Date,
+    max: Date,
+) => Value[];
+
+export interface HistogramCommon<Datum, Value extends number | Date | undefined> {
+    (data: ArrayLike<Datum>): Array<Bin<Datum, Value>>;
+
+    value(): (d: Datum, i: number, data: ArrayLike<Datum>) => Value;
+    value(valueAccessor: (d: Datum, i: number, data: ArrayLike<Datum>) => Value): this;
+}
+
+export interface HistogramGeneratorDate<Datum, Value extends Date | undefined> extends HistogramCommon<Datum, Date> {
+    domain(): (values: ArrayLike<Value>) => [Date, Date];
+    domain(domain: [Date, Date] | ((values: ArrayLike<Value>) => [Date, Date])): this;
+
+    thresholds(): ThresholdDateArrayGenerator<Value>;
+    /**
+     * Set the array of values to be used as thresholds in determining the bins.
+     *
+     * Any threshold values outside the domain are ignored. The first bin.x0 is always equal to the minimum domain value,
+     * and the last bin.x1 is always equal to the maximum domain value.
+     *
+     * @param thresholds Either an array of threshold values used for binning. The elements must
+     * be of the same type as the materialized values of the histogram.
+     * Or a function which accepts as arguments the array of materialized values, and
+     * optionally the domain minimum and maximum. The function calculates and returns the array of values to be used as
+     * thresholds in determining the bins.
+     */
+    thresholds(thresholds: ArrayLike<Value> | ThresholdDateArrayGenerator<Value>): this;
+}
+
+export interface HistogramGeneratorNumber<Datum, Value extends number | undefined>
+    extends HistogramCommon<Datum, Value>
+{
+    domain(): (values: Iterable<Value>) => [number, number] | [undefined, undefined];
+    domain(domain: [number, number] | ((values: Iterable<Value>) => [number, number] | [undefined, undefined])): this;
+
+    thresholds(): ThresholdCountGenerator<Value> | ThresholdNumberArrayGenerator<Value>;
+    /**
+     * Divide the domain uniformly into approximately count bins. IMPORTANT: This threshold
+     * setting approach only works, when the materialized values are numbers!
+     *
+     * Any threshold values outside the domain are ignored. The first bin.x0 is always equal to the minimum domain value,
+     * and the last bin.x1 is always equal to the maximum domain value.
+     *
+     * @param count Either the desired number of uniform bins or a function which accepts as arguments the array of
+     * materialized values, and optionally the domain minimum and maximum. The function calculates and returns the
+     * suggested number of bins.
+     */
+    thresholds(count: number | ThresholdCountGenerator<Value>): this;
+    /**
+     * Set the array of values to be used as thresholds in determining the bins.
+     *
+     * Any threshold values outside the domain are ignored. The first bin.x0 is always equal to the minimum domain value,
+     * and the last bin.x1 is always equal to the maximum domain value.
+     *
+     * @param thresholds Either an array of threshold values used for binning. The elements must
+     * be of the same type as the materialized values of the histogram.
+     * Or a function which accepts as arguments the array of materialized values, and
+     * optionally the domain minimum and maximum. The function calculates and returns the array of values to be used as
+     * thresholds in determining the bins.
+     */
+    // tslint:disable-next-line:unified-signatures
+    thresholds(thresholds: ArrayLike<Value> | ThresholdNumberArrayGenerator<Value>): this;
+}
+
+/**
+ * @deprecated Use bin instead.
+ */
+export function histogram(): HistogramGeneratorNumber<number, number>;
+
+/**
+ * @deprecated Use bin instead.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function histogram<Datum, Value extends number | undefined>(): HistogramGeneratorNumber<Datum, Value>;
+
+/**
+ * @deprecated Use bin instead.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function histogram<Datum, Value extends Date | undefined>(): HistogramGeneratorDate<Datum, Value>;
+
+export function bin(): HistogramGeneratorNumber<number, number>;
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function bin<Datum, Value extends number | undefined>(): HistogramGeneratorNumber<Datum, Value>;
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function bin<Datum, Value extends Date | undefined>(): HistogramGeneratorDate<Datum, Value>;
+
+// --------------------------------------------------------------------------------------
+// Histogram Thresholds
+// --------------------------------------------------------------------------------------
+
+export function thresholdFreedmanDiaconis(values: ArrayLike<number | undefined>, min: number, max: number): number; // of type ThresholdCountGenerator
+
+export function thresholdScott(values: ArrayLike<number | undefined>, min: number, max: number): number; // of type ThresholdCountGenerator
+
+export function thresholdSturges(values: ArrayLike<number | undefined>): number; // of type ThresholdCountGenerator
+
+// --------------------------------------------------------------------------------------
+// Interning
+// --------------------------------------------------------------------------------------
+
+/**
+ * The InternMap class extends the native JavaScript Map class, allowing Dates and other non-primitive keys by bypassing the SameValueZero algorithm when determining key equality.
+ */
+export class InternMap<K = any, V = any> extends Map<K, V> {
+}
+
+/**
+ * The InternSet class extends the native JavaScript Set class, allowing Dates and other non-primitive keys by bypassing the SameValueZero algorithm when determining key equality.
+ */
+export class InternSet<T = any> extends Set<T> {
+}
Index: node_modules/@types/d3-array/package.json
===================================================================
--- node_modules/@types/d3-array/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-array/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+{
+    "name": "@types/d3-array",
+    "version": "3.2.1",
+    "description": "TypeScript definitions for d3-array",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-array",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "Alex Ford",
+            "githubUsername": "gustavderdrache",
+            "url": "https://github.com/gustavderdrache"
+        },
+        {
+            "name": "Boris Yankov",
+            "githubUsername": "borisyankov",
+            "url": "https://github.com/borisyankov"
+        },
+        {
+            "name": "Tom Wanzek",
+            "githubUsername": "tomwanzek",
+            "url": "https://github.com/tomwanzek"
+        },
+        {
+            "name": "denisname",
+            "githubUsername": "denisname",
+            "url": "https://github.com/denisname"
+        },
+        {
+            "name": "Hugues Stefanski",
+            "githubUsername": "ledragon",
+            "url": "https://github.com/ledragon"
+        },
+        {
+            "name": "Nathan Bierema",
+            "githubUsername": "Methuselah96",
+            "url": "https://github.com/Methuselah96"
+        },
+        {
+            "name": "Fil",
+            "githubUsername": "Fil",
+            "url": "https://github.com/Fil"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/d3-array"
+    },
+    "scripts": {},
+    "dependencies": {},
+    "typesPublisherContentHash": "b50eff598f27d034f8e6ff5b0f00103f3ba911073f16fe68999f19bc15ee6fc2",
+    "typeScriptVersion": "4.5"
+}
Index: node_modules/@types/d3-color/LICENSE
===================================================================
--- node_modules/@types/d3-color/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-color/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/d3-color/README.md
===================================================================
--- node_modules/@types/d3-color/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-color/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/d3-color`
+
+# Summary
+This package contains type definitions for d3-color (https://github.com/d3/d3-color/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-color.
+
+### Additional Details
+ * Last updated: Tue, 07 Nov 2023 15:11:36 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [Tom Wanzek](https://github.com/tomwanzek), [Alex Ford](https://github.com/gustavderdrache), [Boris Yankov](https://github.com/borisyankov), [denisname](https://github.com/denisname), [Hugues Stefanski](https://github.com/ledragon), [Nathan Bierema](https://github.com/Methuselah96), and [Fil](https://github.com/Fil).
Index: node_modules/@types/d3-color/index.d.ts
===================================================================
--- node_modules/@types/d3-color/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-color/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,669 @@
+// Last module patch version validated against: 3.1.0
+
+// ---------------------------------------------------------------------------
+// Shared Type Definitions and Interfaces
+// ---------------------------------------------------------------------------
+
+/**
+ * Type allowing for color objects from a specified color space
+ */
+export type ColorSpaceObject = RGBColor | HSLColor | LabColor | HCLColor | CubehelixColor;
+
+/**
+ * A helper interface of methods common to color objects (including colors defined outside the d3-color standard module,
+ * e.g. in d3-hsv). This interface
+ */
+export interface ColorCommonInstance {
+    /**
+     * Returns true if and only if the color is displayable on standard hardware.
+     * For example, this returns false for an RGB color if any channel value is less than zero or greater than 255, or if the opacity is not in the range [0, 1].
+     */
+    displayable(): boolean;
+    /**
+     * Returns a string representing this color according to the CSS Object Model specification,
+     * such as rgb(247, 234, 186) or rgba(247, 234, 186, 0.2).
+     * If this color is not displayable, a suitable displayable color is returned instead.
+     * For example, RGB channel values greater than 255 are clamped to 255.
+     */
+    toString(): string;
+    /**
+     * Returns a brighter copy of this color. If k is specified, it controls how much brighter the returned color should be.
+     * If k is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.
+     *
+     * @param k A color space dependent number to determine, how much brighter the returned color should be.
+     */
+    brighter(k?: number): this;
+    /**
+     * Returns a darker copy of this color. If k is specified, it controls how much darker the returned color should be.
+     * If k is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.
+     *
+     * @param k A color space dependent number to determine, how much darker the returned color should be.
+     */
+    darker(k?: number): this;
+    /**
+     * Returns the RGB equivalent of this color. For RGB colors, that’s "this".
+     */
+    rgb(): RGBColor;
+    /**
+     * Returns a hexadecimal string representing this color.
+     * If this color is not displayable, a suitable displayable color is returned instead.
+     * For example, RGB channel values greater than 255 are clamped to 255.
+     */
+    hex(): string;
+}
+
+/**
+ * A Color object which serves as a base class for
+ * colorspace-specific sub-class implementations.
+ */
+export interface Color {
+    /**
+     * Returns true if and only if the color is displayable on standard hardware.
+     * For example, this returns false for an RGB color if any channel value is less than zero or greater than 255, or if the opacity is not in the range [0, 1].
+     */
+    displayable(): boolean; // Note: While this method is used in prototyping for colors of specific colorspaces, it should not be called directly, as 'this.rgb' would not be implemented on Color
+    /**
+     * Returns a string representing this color according to the CSS Object Model specification,
+     * such as rgb(247, 234, 186) or rgba(247, 234, 186, 0.2).
+     * If this color is not displayable, a suitable displayable color is returned instead.
+     * For example, RGB channel values greater than 255 are clamped to 255.
+     */
+    toString(): string; // Note: While this method is used in prototyping for colors of specific colorspaces, it should not be called directly, as 'this.rgb' would not be implemented on Color
+    /**
+     * Returns a hexadecimal string representing this color in RGB space, such as #f7eaba.
+     * If this color is not displayable, a suitable displayable color is returned instead.
+     * For example, RGB channel values greater than 255 are clamped to 255.
+     */
+    formatHex(): string;
+    /**
+     * Returns a hexadecimal string representing this color in RGBA space, such as #f7eaba90.
+     * If this color is not displayable, a suitable displayable color is returned instead.
+     * For example, RGB channel values greater than 255 are clamped to 255.
+     */
+    formatHex8(): string;
+    /**
+     * Returns a string representing this color according to the CSS Color Module Level 3 specification, such as hsl(257, 50%, 80%) or hsla(257, 50%, 80%, 0.2).
+     * If this color is not displayable, a suitable displayable color is returned instead by clamping S and L channel values to the interval [0, 100].
+     */
+    formatHsl(): string;
+    /**
+     * Returns a string representing this color according to the CSS Object Model specification, such as rgb(247, 234, 186) or rgba(247, 234, 186, 0.2).
+     * If this color is not displayable, a suitable displayable color is returned instead by clamping RGB channel values to the interval [0, 255].
+     */
+    formatRgb(): string;
+    /**
+     * @deprecated Use color.formatHex.
+     */
+    hex(): string;
+}
+
+/**
+ * A Color factory object, which may also be used with instanceof to test if an object is a color instance.
+ */
+export interface ColorFactory extends Function {
+    /**
+     * Parses the specified CSS Color Module Level 3 specifier string, returning an RGB or HSL color.
+     * If the specifier was not valid, null is returned.
+     *
+     * @param cssColorSpecifier A CSS Color Module Level 3 specifier string.
+     */
+    (cssColorSpecifier: string): RGBColor | HSLColor | null;
+    /**
+     * Converts the provided color instance and returns an RGB or HSL color.
+     *
+     * @param color A permissible color space instance.
+     */
+    (color: ColorSpaceObject | ColorCommonInstance): RGBColor | HSLColor;
+    /**
+     * Prototype of the factory, which can be used for instanceof testing
+     */
+    readonly prototype: Color;
+}
+
+/**
+ * An RGB color object.
+ */
+export interface RGBColor extends Color {
+    /**
+     * Value of red channel
+     */
+    r: number;
+    /**
+     * Value of green channel
+     */
+    g: number;
+    /**
+     * Value of blue channel
+     */
+    b: number;
+    /**
+     * Opacity value
+     */
+    opacity: number;
+    /**
+     * Returns a brighter copy of this color. If k is specified, it controls how much brighter the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much brighter the returned color should be.
+     */
+    brighter(k?: number): this;
+    /**
+     * Returns a darker copy of this color. If k is specified, it controls how much darker the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much darker the returned color should be.
+     */
+    darker(k?: number): this;
+    /**
+     * Returns the RGB equivalent of this color.
+     */
+    rgb(): this;
+    /**
+     * Returns a copy of this color.
+     *
+     * @param values If values is specified, any enumerable own properties of values are assigned to the new returned color.
+     */
+    copy(
+        values?: {
+            r?: number | undefined;
+            g?: number | undefined;
+            b?: number | undefined;
+            opacity?: number | undefined;
+        },
+    ): this;
+    /**
+     * Returns a new RGB color where the r, g, and b channels are clamped to the range [0, 255] and rounded to the nearest integer value,
+     * and the opacity is clamped to the range [0, 1].
+     */
+    clamp(): this;
+}
+
+/**
+ * An RGB color factory object, which may also be used with instanceof to test if an object
+ * is an RGB color instance.
+ */
+export interface RGBColorFactory extends Function {
+    /**
+     * Constructs a new RGB color based on the specified channel values and opacity.
+     *
+     * @param r Red channel value.
+     * @param g Green channel value.
+     * @param b Blue channel value.
+     * @param opacity Optional opacity value, defaults to 1.
+     */
+    (r: number, g: number, b: number, opacity?: number): RGBColor;
+    /**
+     * Parses the specified CSS Color Module Level 3 specifier string, returning an RGB color.
+     * If the specifier was not valid, null is returned.
+     *
+     * @param cssColorSpecifier A CSS Color Module Level 3 specifier string.
+     */
+    (cssColorSpecifier: string): RGBColor;
+    /**
+     * Converts the provided color instance and returns an RGB color. The color instance is converted to the RGB color space using color.rgb.
+     * Note that unlike color.rgb this method always returns a new instance, even if color is already an RGB color.
+     *
+     * @param color A permissible color space instance.
+     */
+    // tslint:disable-next-line:unified-signatures
+    (color: ColorSpaceObject | ColorCommonInstance): RGBColor;
+    /**
+     * Prototype of the factory, which can be used for instanceof testing
+     */
+    readonly prototype: RGBColor;
+}
+
+/**
+ * An HSL color object.
+ */
+export interface HSLColor extends Color {
+    /**
+     * Hue channel value.
+     */
+    h: number;
+    /**
+     * Saturation channel value.
+     */
+    s: number;
+    /**
+     * Lightness channel value.
+     */
+    l: number;
+    /**
+     * Opacity value.
+     */
+    opacity: number;
+    /**
+     * Returns a brighter copy of this color. If k is specified, it controls how much brighter the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much brighter the returned color should be.
+     */
+    brighter(k?: number): this;
+    /**
+     * Returns a darker copy of this color. If k is specified, it controls how much darker the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much darker the returned color should be.
+     */
+    darker(k?: number): this;
+    /**
+     * Returns the RGB color equivalent of this color.
+     */
+    rgb(): RGBColor;
+    /**
+     * Returns a copy of this color.
+     *
+     * @param values If values is specified, any enumerable own properties of values are assigned to the new returned color.
+     */
+    copy(
+        values?: {
+            h?: number | undefined;
+            s?: number | undefined;
+            l?: number | undefined;
+            opacity?: number | undefined;
+        },
+    ): this;
+    /**
+     * Returns a new HSL color where the h channel is clamped to the range [0, 360), and the s, l, and opacity channels are clamped to the range [0, 1].
+     */
+    clamp(): this;
+}
+
+/**
+ * An HSL color factory object, which may also be used with instanceof to test if an object
+ * is an HSL color instance.
+ */
+export interface HSLColorFactory extends Function {
+    /**
+     * Constructs a new HSL color based on the specified channel values and opacity.
+     *
+     * @param h Hue channel value.
+     * @param s Saturation channel value.
+     * @param l Lightness channel value.
+     * @param opacity Optional opacity value, defaults to 1.
+     */
+    (h: number, s: number, l: number, opacity?: number): HSLColor;
+    /**
+     * Parses the specified CSS Color Module Level 3 specifier string, returning an HSL color.
+     * If the specifier was not valid, null is returned.
+     *
+     * @param cssColorSpecifier A CSS Color Module Level 3 specifier string.
+     */
+    (cssColorSpecifier: string): HSLColor;
+    /**
+     * Converts the provided color instance and returns an HSL color.
+     * The color instance is converted to the RGB color space using color.rgb and then converted to HSL.
+     * (Colors already in the HSL color space skip the conversion to RGB.)
+     *
+     * @param color A permissible color space instance.
+     */
+    // tslint:disable-next-line:unified-signatures
+    (color: ColorSpaceObject | ColorCommonInstance): HSLColor;
+    /**
+     * Prototype of the factory, which can be used for instanceof testing
+     */
+    readonly prototype: HSLColor;
+}
+
+/**
+ * A Lab (CIELAB) color object.
+ */
+export interface LabColor extends Color {
+    /**
+     * Lightness typically in the range [0, 100].
+     */
+    l: number;
+    /**
+     * Position between red/magenta and green typically in [-160, +160].
+     */
+    a: number;
+    /**
+     * Position between yellow and blue typically in [-160, +160].
+     */
+    b: number;
+    /**
+     * Opacity value
+     */
+    opacity: number;
+    /**
+     * Returns a brighter copy of this color. If k is specified, it controls how much brighter the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much brighter the returned color should be.
+     */
+    brighter(k?: number): this;
+    /**
+     * Returns a darker copy of this color. If k is specified, it controls how much darker the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much darker the returned color should be.
+     */
+    darker(k?: number): this;
+    /**
+     * Returns the RGB color equivalent of this color.
+     */
+    rgb(): RGBColor;
+    /**
+     * Returns a copy of this color.
+     *
+     * @param values If values is specified, any enumerable own properties of values are assigned to the new returned color.
+     */
+    copy(
+        values?: {
+            l?: number | undefined;
+            a?: number | undefined;
+            b?: number | undefined;
+            opacity?: number | undefined;
+        },
+    ): this;
+}
+
+/**
+ * A Lab (CIELAB) color factory object, which may also be used with instanceof to test if an object
+ * is a Lab color instance.
+ */
+export interface LabColorFactory extends Function {
+    /**
+     * Constructs a new CIELAB color based on the specified channel values and opacity.
+     *
+     * @param l Lightness typically in the range [0, 100].
+     * @param a Position between red/magenta and green typically in [-160, +160].
+     * @param b Position between yellow and blue typically in [-160, +160].
+     * @param opacity Optional opacity value, defaults to 1.
+     */
+    (l: number, a: number, b: number, opacity?: number): LabColor;
+    /**
+     * Parses the specified CSS Color Module Level 3 specifier string, returning a Lab color.
+     * If the specifier was not valid, null is returned.
+     *
+     * @param cssColorSpecifier A CSS Color Module Level 3 specifier string.
+     */
+    (cssColorSpecifier: string): LabColor;
+    /**
+     * Converts the provided color instance and returns a Lab color.
+     * The color instance is converted to the RGB color space using color.rgb and then converted to CIELAB.
+     * (Colors already in the Lab color space skip the conversion to RGB,
+     * and colors in the HCL color space are converted directly to CIELAB.)
+     *
+     * @param color A permissible color space instance.
+     */
+    // tslint:disable-next-line:unified-signatures
+    (color: ColorSpaceObject | ColorCommonInstance): LabColor;
+    /**
+     * Prototype of the factory, which can be used for instanceof testing
+     */
+    readonly prototype: LabColor;
+}
+
+/**
+ * A gray color factory for Lab (CIELAB) colors.
+ */
+export type GrayColorFactory =
+    /**
+     * Constructs a new CIELAB color with the specified l value and a = b = 0.
+     *
+     * @param l Lightness typically in the range [0, 100].
+     * @param opacity Optional opacity value, defaults to 1.
+     */
+    (l: number, opacity?: number) => LabColor;
+
+/**
+ * An HCL (CIELCH) color object.
+ */
+export interface HCLColor extends Color {
+    /**
+     * Hue channel value typically in [0, 360).
+     */
+    h: number;
+    /**
+     * Chroma channel value typically in [0, 230].
+     */
+    c: number;
+    /**
+     * Luminance channel value typically in the range [0, 100].
+     */
+    l: number;
+    /**
+     * Opacity value
+     */
+    opacity: number;
+    /**
+     * Returns a brighter copy of this color. If k is specified, it controls how much brighter the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much brighter the returned color should be.
+     */
+    brighter(k?: number): this;
+    /**
+     * Returns a darker copy of this color. If k is specified, it controls how much darker the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much darker the returned color should be.
+     */
+    darker(k?: number): this;
+    /**
+     * Returns the RGB color equivalent of this color.
+     */
+    rgb(): RGBColor;
+    /**
+     * Returns a copy of this color.
+     *
+     * @param values If values is specified, any enumerable own properties of values are assigned to the new returned color.
+     */
+    copy(
+        values?: {
+            h?: number | undefined;
+            c?: number | undefined;
+            l?: number | undefined;
+            opacity?: number | undefined;
+        },
+    ): this;
+}
+
+/**
+ * An HCL (CIELCH) color factory object, which may also be used with instanceof to test if an object
+ * is an HCL color instance.
+ */
+export interface HCLColorFactory extends Function {
+    /**
+     * Constructs a new HCL color based on the specified channel values and opacity.
+     *
+     * @param h Hue channel value typically in [0, 360).
+     * @param c Chroma channel value typically in [0, 230].
+     * @param l Luminance channel value typically in the range [0, 100].
+     * @param opacity Optional opacity value, defaults to 1.
+     */
+    (h: number, c: number, l: number, opacity?: number): HCLColor;
+    /**
+     * Parses the specified CSS Color Module Level 3 specifier string, returning an HCL color.
+     * If the specifier was not valid, null is returned.
+     *
+     * @param cssColorSpecifier A CSS Color Module Level 3 specifier string.
+     */
+    (cssColorSpecifier: string): HCLColor;
+    /**
+     * Converts the provided color instance and returns an HCL color.
+     * The color instance is converted to the RGB color space using color.rgb and then converted to HCL.
+     * (Colors already in the HCL color space skip the conversion to RGB,
+     * and colors in the Lab color space are converted directly to HCL.)
+     *
+     * @param color A permissible color space instance.
+     */
+    // tslint:disable-next-line:unified-signatures
+    (color: ColorSpaceObject | ColorCommonInstance): HCLColor;
+    /**
+     * Prototype of the factory, which can be used for instanceof testing
+     */
+    readonly prototype: HCLColor;
+}
+
+/**
+ * An LCH (CIELCH) color factory function to create an HCL color object.
+ */
+export interface LCHColorFactory {
+    /**
+     * Constructs a new HCL color based on the specified channel values and opacity.
+     *
+     * @param l Luminance channel value typically in the range [0, 100].
+     * @param c Chroma channel value typically in [0, 230].
+     * @param h Hue channel value typically in [0, 360).
+     * @param opacity Optional opacity value, defaults to 1.
+     */
+    (l: number, c: number, h: number, opacity?: number): HCLColor;
+    /**
+     * Parses the specified CSS Color Module Level 3 specifier string, returning an HCL color.
+     * If the specifier was not valid, null is returned.
+     *
+     * @param cssColorSpecifier A CSS color Module Level 3 specifier string.
+     */
+    (cssColorSpecifier: string): HCLColor;
+    /**
+     * Converts the provided color instance and returns an HCL color.
+     * The color instance is converted to the RGB color space using color.rgb and then converted to HCL.
+     * (Colors already in the HCL color space skip the conversion to RGB,
+     * and colors in the Lab color space are converted directly to HCL.)
+     *
+     * @param color A permissible color space instance.
+     */
+    // tslint:disable-next-line:unified-signatures
+    (color: ColorSpaceObject | ColorCommonInstance): HCLColor;
+}
+
+/**
+ * Dave Green’s Cubehelix color object.
+ */
+export interface CubehelixColor extends Color {
+    /**
+     * Hue channel value.
+     */
+    h: number;
+    /**
+     * Saturation channel value.
+     */
+    s: number;
+    /**
+     * Lightness channel value.
+     */
+    l: number;
+    /**
+     * Opacity value.
+     */
+    opacity: number;
+    /**
+     * Returns a brighter copy of this color. If k is specified, it controls how much brighter the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much brighter the returned color should be.
+     */
+    brighter(k?: number): this;
+    /**
+     * Returns a darker copy of this color. If k is specified, it controls how much darker the returned color should be.
+     * If k is not specified, it defaults to 1.
+     *
+     * @param k A color space dependent number to determine, how much darker the returned color should be.
+     */
+    darker(k?: number): this;
+    /**
+     * Returns the RGB color equivalent of this color.
+     */
+    rgb(): RGBColor;
+    /**
+     * Returns a copy of this color.
+     *
+     * @param values If values is specified, any enumerable own properties of values are assigned to the new returned color.
+     */
+    copy(
+        values?: {
+            h?: number | undefined;
+            s?: number | undefined;
+            l?: number | undefined;
+            opacity?: number | undefined;
+        },
+    ): this;
+}
+
+/**
+ * A color factory object for Dave Green's Cubehelix colors, which may also be used with instanceof to test if an object
+ * is a Cubehelix color instance.
+ */
+export interface CubehelixColorFactory extends Function {
+    /**
+     * Constructs a new Cubehelix color based on the specified channel values and opacity.
+     *
+     * @param h Hue channel value.
+     * @param s Saturation channel value.
+     * @param l Lightness channel value.
+     * @param opacity Optional opacity value, defaults to 1.
+     */
+    (h: number, s: number, l: number, opacity?: number): CubehelixColor;
+    /**
+     * Parses the specified CSS Color Module Level 3 specifier string, returning an Cubehelix color.
+     * If the specifier was not valid, null is returned.
+     *
+     * @param cssColorSpecifier A CSS Color Module Level 3 specifier string.
+     */
+    (cssColorSpecifier: string): CubehelixColor;
+    /**
+     * Converts the provided color instance and returns a Cubehelix color.
+     * The color instance is specified, it is converted to the RGB color space using color.rgb and then converted to Cubehelix.
+     * (Colors already in the Cubehelix color space skip the conversion to RGB.)
+     *
+     * @param color A permissible color space instance.
+     */
+    // tslint:disable-next-line:unified-signatures
+    (color: ColorSpaceObject | ColorCommonInstance): CubehelixColor;
+    /**
+     * Prototype of the factory, which can be used for instanceof testing
+     */
+    readonly prototype: CubehelixColor;
+}
+
+// --------------------------------------------------------------------------
+// Color object factories
+// --------------------------------------------------------------------------
+
+/**
+ * A Color factory object, which may also be used with instanceof to test if an object is a color instance.
+ */
+export const color: ColorFactory;
+
+/**
+ * An RGB color factory object, which may also be used with instanceof to test if an object
+ * is an RGB color instance.
+ */
+export const rgb: RGBColorFactory;
+
+/**
+ * An HSL color factory object, which may also be used with instanceof to test if an object
+ * is an HSL color instance.
+ */
+export const hsl: HSLColorFactory;
+
+/**
+ * A Lab (CIELAB) color factory object, which may also be used with instanceof to test if an object
+ * is a Lab color instance.
+ */
+export const lab: LabColorFactory;
+
+/**
+ * A gray color factory for Lab (CIELAB) colors.
+ */
+export const gray: GrayColorFactory;
+
+/**
+ * An HCL (CIELCH) color factory object, which may also be used with instanceof to test if an object
+ * is an HCL color instance.
+ */
+export const hcl: HCLColorFactory;
+
+/**
+ * An LCH (CIELCH) color factory function to create an HCL color object.
+ */
+export const lch: LCHColorFactory;
+
+/**
+ * A color factory object for Dave Green's Cubehelix colors, which may also be used with instanceof to test if an object
+ * is a Cubehelix color instance.
+ */
+export const cubehelix: CubehelixColorFactory;
Index: node_modules/@types/d3-color/package.json
===================================================================
--- node_modules/@types/d3-color/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-color/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+{
+    "name": "@types/d3-color",
+    "version": "3.1.3",
+    "description": "TypeScript definitions for d3-color",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-color",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "Tom Wanzek",
+            "githubUsername": "tomwanzek",
+            "url": "https://github.com/tomwanzek"
+        },
+        {
+            "name": "Alex Ford",
+            "githubUsername": "gustavderdrache",
+            "url": "https://github.com/gustavderdrache"
+        },
+        {
+            "name": "Boris Yankov",
+            "githubUsername": "borisyankov",
+            "url": "https://github.com/borisyankov"
+        },
+        {
+            "name": "denisname",
+            "githubUsername": "denisname",
+            "url": "https://github.com/denisname"
+        },
+        {
+            "name": "Hugues Stefanski",
+            "githubUsername": "ledragon",
+            "url": "https://github.com/ledragon"
+        },
+        {
+            "name": "Nathan Bierema",
+            "githubUsername": "Methuselah96",
+            "url": "https://github.com/Methuselah96"
+        },
+        {
+            "name": "Fil",
+            "githubUsername": "Fil",
+            "url": "https://github.com/Fil"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/d3-color"
+    },
+    "scripts": {},
+    "dependencies": {},
+    "typesPublisherContentHash": "89cf9357324cddaa31cfb539b1c33d118648ed55319f2a0d26f24b004975a947",
+    "typeScriptVersion": "4.5"
+}
Index: node_modules/@types/d3-ease/LICENSE
===================================================================
--- node_modules/@types/d3-ease/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-ease/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/d3-ease/README.md
===================================================================
--- node_modules/@types/d3-ease/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-ease/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/d3-ease`
+
+# Summary
+This package contains type definitions for d3-ease (https://github.com/d3/d3-ease/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-ease.
+
+### Additional Details
+ * Last updated: Tue, 07 Nov 2023 15:11:36 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [Tom Wanzek](https://github.com/tomwanzek), [Alex Ford](https://github.com/gustavderdrache), [Boris Yankov](https://github.com/borisyankov), and [Nathan Bierema](https://github.com/Methuselah96).
Index: node_modules/@types/d3-ease/index.d.ts
===================================================================
--- node_modules/@types/d3-ease/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-ease/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,316 @@
+// Last module patch version validated against: 3.0.1
+
+// --------------------------------------------------------------------------
+// Easing Functions
+// --------------------------------------------------------------------------
+
+/**
+ * Linear easing; the identity function; linear(t) returns t.
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeLinear(normalizedTime: number): number;
+
+/**
+ * Symmetric quadratic easing; scales quadIn for t in [0, 0.5] and quadOut for t in [0.5, 1]. Also equivalent to poly.exponent(2).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeQuad(normalizedTime: number): number;
+
+/**
+ * Quadratic easing; equivalent to polyIn.exponent(2).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeQuadIn(normalizedTime: number): number;
+
+/**
+ * Reverse quadratic easing; equivalent to 1 - quadIn(1 - t). Also equivalent to polyOut.exponent(2).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeQuadOut(normalizedTime: number): number;
+
+/**
+ * Symmetric quadratic easing; scales quadIn for t in [0, 0.5] and quadOut for t in [0.5, 1]. Also equivalent to poly.exponent(2).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeQuadInOut(normalizedTime: number): number;
+
+/**
+ * Symmetric cubic easing; scales cubicIn for t in [0, 0.5] and cubicOut for t in [0.5, 1]. Also equivalent to poly.exponent(3).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeCubic(normalizedTime: number): number;
+
+/**
+ * Cubic easing; equivalent to polyIn.exponent(3).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeCubicIn(normalizedTime: number): number;
+
+/**
+ * Reverse cubic easing; equivalent to 1 - cubicIn(1 - t). Also equivalent to polyOut.exponent(3).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeCubicOut(normalizedTime: number): number;
+
+/**
+ * Symmetric cubic easing; scales cubicIn for t in [0, 0.5] and cubicOut for t in [0.5, 1]. Also equivalent to poly.exponent(3).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeCubicInOut(normalizedTime: number): number;
+
+/**
+ * Polynomial easing function factory
+ */
+export interface PolynomialEasingFactory {
+    /**
+     * Calculate eased time.
+     * @param normalizedTime Normalized time typically in the range [0, 1]
+     */
+    (normalizedTime: number): number;
+    /**
+     * Returns a new polynomial easing with the specified exponent e.
+     * If the exponent is not specified, it defaults to 3, equivalent to cubic.
+     *
+     * @param e Exponent for polynomial easing.
+     */
+    exponent(e: number): PolynomialEasingFactory;
+}
+
+/**
+ * Symmetric polynomial easing/easing factory; scales polyIn for t in [0, 0.5] and polyOut for t in [0.5, 1].
+ * If the exponent is not specified, it defaults to 3, equivalent to cubic.
+ */
+export const easePoly: PolynomialEasingFactory;
+/**
+ * Polynomial easing/easing factory; raises t to the specified exponent.
+ * If the exponent is not specified, it defaults to 3, equivalent to cubicIn.
+ */
+export const easePolyIn: PolynomialEasingFactory;
+
+/**
+ * Reverse polynomial easing/easing factory; equivalent to 1 - polyIn(1 - t).
+ * If the exponent is not specified, it defaults to 3, equivalent to cubicOut.
+ */
+export const easePolyOut: PolynomialEasingFactory;
+
+/**
+ * Symmetric polynomial easing/easing factory; scales polyIn for t in [0, 0.5] and polyOut for t in [0.5, 1].
+ * If the exponent is not specified, it defaults to 3, equivalent to cubic.
+ */
+export const easePolyInOut: PolynomialEasingFactory;
+
+/**
+ * Symmetric sinusoidal easing; scales sinIn for t in [0, 0.5] and sinOut for t in [0.5, 1].
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeSin(normalizedTime: number): number;
+
+/**
+ * Sinusoidal easing; returns sin(t).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeSinIn(normalizedTime: number): number;
+
+/**
+ * Reverse sinusoidal easing; equivalent to 1 - sinIn(1 - t).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeSinOut(normalizedTime: number): number;
+
+/**
+ * Symmetric sinusoidal easing; scales sinIn for t in [0, 0.5] and sinOut for t in [0.5, 1].
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeSinInOut(normalizedTime: number): number;
+
+/**
+ * Symmetric exponential easing; scales expIn for t in [0, 0.5] and expOut for t in [0.5, 1].
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeExp(normalizedTime: number): number;
+
+/**
+ * Exponential easing; raises 2 to the exponent 10 * (t - 1).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeExpIn(normalizedTime: number): number;
+
+/**
+ * Reverse exponential easing; equivalent to 1 - expIn(1 - t).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeExpOut(normalizedTime: number): number;
+
+/**
+ * Symmetric exponential easing; scales expIn for t in [0, 0.5] and expOut for t in [0.5, 1].
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeExpInOut(normalizedTime: number): number;
+
+/**
+ * Symmetric circular easing; scales circleIn for t in [0, 0.5] and circleOut for t in [0.5, 1].
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeCircle(normalizedTime: number): number;
+
+/**
+ * Circular easing.
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeCircleIn(normalizedTime: number): number;
+
+/**
+ * Reverse circular easing; equivalent to 1 - circleIn(1 - t).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeCircleOut(normalizedTime: number): number;
+
+/**
+ * Symmetric circular easing; scales circleIn for t in [0, 0.5] and circleOut for t in [0.5, 1].
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeCircleInOut(normalizedTime: number): number;
+
+/**
+ * Reverse bounce easing; equivalent to 1 - bounceIn(1 - t).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeBounce(normalizedTime: number): number;
+
+/**
+ * Bounce easing, like a rubber ball.
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeBounceIn(normalizedTime: number): number;
+
+/**
+ * Reverse bounce easing; equivalent to 1 - bounceIn(1 - t).
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeBounceOut(normalizedTime: number): number;
+
+/**
+ * Symmetric bounce easing; scales bounceIn for t in [0, 0.5] and bounceOut for t in [0.5, 1].
+ *
+ * @param normalizedTime Normalized time typically in the range [0, 1]
+ */
+export function easeBounceInOut(normalizedTime: number): number;
+
+/**
+ * Anticipatory easing function factory
+ */
+export interface BackEasingFactory {
+    /**
+     * Calculate eased time.
+     * @param normalizedTime Normalized time typically in the range [0, 1]
+     */
+    (normalizedTime: number): number;
+    /**
+     * Returns a new back easing with the specified overshoot s.
+     * The degree of overshoot is configurable; if not specified, it defaults to 1.70158.
+     *
+     * @param s Overshoot parameter
+     */
+    overshoot(s: number): BackEasingFactory;
+}
+
+/**
+ * Symmetric anticipatory easing; scales backIn for t in [0, 0.5] and backOut for t in [0.5, 1].
+ * The degree of overshoot is configurable; it not specified, it defaults to 1.70158.
+ */
+export const easeBack: BackEasingFactory;
+
+/**
+ * Anticipatory easing, like a dancer bending their knees before jumping off the floor.
+ * The degree of overshoot is configurable; it not specified, it defaults to 1.70158.
+ */
+export const easeBackIn: BackEasingFactory;
+
+/**
+ * Reverse anticipatory easing; equivalent to 1 - backIn(1 - t).
+ * The degree of overshoot is configurable; it not specified, it defaults to 1.70158.
+ */
+export const easeBackOut: BackEasingFactory;
+
+/**
+ * Symmetric anticipatory easing; scales backIn for t in [0, 0.5] and backOut for t in [0.5, 1].
+ * The degree of overshoot is configurable; it not specified, it defaults to 1.70158.
+ */
+export const easeBackInOut: BackEasingFactory;
+
+/**
+ * Elastic easing function factory
+ */
+export interface ElasticEasingFactory {
+    /**
+     * Calculate eased time.
+     * @param normalizedTime Normalized time typically in the range [0, 1]
+     */
+    (normalizedTime: number): number;
+    /**
+     * Returns a new elastic easing with the specified amplitude a.
+     * Defaults to 1,if not specified.
+     *
+     * @param a Amplitude for elastic easing.
+     */
+    amplitude(a: number): ElasticEasingFactory;
+    /**
+     * Returns a new elastic easing with the specified amplitude a.
+     * Defaults to 0.3,if not specified.
+     *
+     * @param p Period for elastic easing.
+     */
+    period(p: number): ElasticEasingFactory;
+}
+
+/**
+ * Reverse elastic easing; equivalent to 1 - elasticIn(1 - t).
+ * The amplitude and period of the oscillation are configurable;
+ * if not specified, they default to 1 and 0.3, respectively.
+ */
+export const easeElastic: ElasticEasingFactory;
+
+/**
+ * Elastic easing, like a rubber band.
+ * The amplitude and period of the oscillation are configurable;
+ * if not specified, they default to 1 and 0.3, respectively.
+ */
+export const easeElasticIn: ElasticEasingFactory;
+
+/**
+ * Reverse elastic easing; equivalent to 1 - elasticIn(1 - t).
+ * The amplitude and period of the oscillation are configurable;
+ * if not specified, they default to 1 and 0.3, respectively.
+ */
+export const easeElasticOut: ElasticEasingFactory;
+
+/**
+ * Symmetric elastic easing; scales elasticIn for t in [0, 0.5] and elasticOut for t in [0.5, 1].
+ * The amplitude and period of the oscillation are configurable;
+ * if not specified, they default to 1 and 0.3, respectively.
+ */
+export const easeElasticInOut: ElasticEasingFactory;
Index: node_modules/@types/d3-ease/package.json
===================================================================
--- node_modules/@types/d3-ease/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-ease/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+{
+    "name": "@types/d3-ease",
+    "version": "3.0.2",
+    "description": "TypeScript definitions for d3-ease",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-ease",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "Tom Wanzek",
+            "githubUsername": "tomwanzek",
+            "url": "https://github.com/tomwanzek"
+        },
+        {
+            "name": "Alex Ford",
+            "githubUsername": "gustavderdrache",
+            "url": "https://github.com/gustavderdrache"
+        },
+        {
+            "name": "Boris Yankov",
+            "githubUsername": "borisyankov",
+            "url": "https://github.com/borisyankov"
+        },
+        {
+            "name": "Nathan Bierema",
+            "githubUsername": "Methuselah96",
+            "url": "https://github.com/Methuselah96"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/d3-ease"
+    },
+    "scripts": {},
+    "dependencies": {},
+    "typesPublisherContentHash": "2995c518f8de4fa6f2abb2f13065cb4fe65acaea9422f9883b24414ef50cd1ab",
+    "typeScriptVersion": "4.5"
+}
Index: node_modules/@types/d3-interpolate/LICENSE
===================================================================
--- node_modules/@types/d3-interpolate/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-interpolate/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/d3-interpolate/README.md
===================================================================
--- node_modules/@types/d3-interpolate/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-interpolate/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/d3-interpolate`
+
+# Summary
+This package contains type definitions for d3-interpolate (https://github.com/d3/d3-interpolate/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-interpolate.
+
+### Additional Details
+ * Last updated: Tue, 07 Nov 2023 15:11:37 GMT
+ * Dependencies: [@types/d3-color](https://npmjs.com/package/@types/d3-color)
+
+# Credits
+These definitions were written by [Tom Wanzek](https://github.com/tomwanzek), [Alex Ford](https://github.com/gustavderdrache), [Boris Yankov](https://github.com/borisyankov), [denisname](https://github.com/denisname), and [Nathan Bierema](https://github.com/Methuselah96).
Index: node_modules/@types/d3-interpolate/index.d.ts
===================================================================
--- node_modules/@types/d3-interpolate/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-interpolate/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,387 @@
+// Last module patch version validated against: 3.0.1
+
+import { ColorCommonInstance } from "d3-color";
+
+// ---------------------------------------------------------------------------
+// Shared Type Definitions and Interfaces
+// ---------------------------------------------------------------------------
+
+export interface ZoomInterpolator extends Function {
+    (t: number): ZoomView;
+    /**
+     * Recommended duration of zoom transition in milliseconds.
+     */
+    duration: number;
+
+    /**
+     * Given a zoom interpolator, returns a new zoom interpolator using the specified curvature rho.
+     * When rho is close to 0, the interpolator is almost linear.
+     * The default curvature is sqrt(2).
+     * @param rho
+     */
+    rho(rho: number): this;
+}
+
+export interface ColorGammaInterpolationFactory extends Function {
+    (a: string | ColorCommonInstance, b: string | ColorCommonInstance): (t: number) => string;
+    /**
+     * Returns a new interpolator factory of the same type using the specified *gamma*.
+     * For example, to interpolate from purple to orange with a gamma of 2.2 in RGB space: `d3.interpolateRgb.gamma(2.2)("purple", "orange")`.
+     * See Eric Brasseur’s article, [Gamma error in picture scaling](https://web.archive.org/web/20160112115812/http://www.4p8.com/eric.brasseur/gamma.html), for more on gamma correction.
+     */
+    gamma(g: number): ColorGammaInterpolationFactory;
+}
+
+/**
+ * Type zoomView is used to represent a numeric array with three elements.
+ * In order of appearance the elements correspond to:
+ * - cx: *x*-coordinate of the center of the viewport
+ * - cy: *y*-coordinate of the center of the viewport
+ * - width: size of the viewport
+ */
+export type ZoomView = [number, number, number];
+
+export type TypedArray =
+    | Int8Array
+    | Uint8Array
+    | Int16Array
+    | Uint16Array
+    | Int32Array
+    | Uint32Array
+    | Uint8ClampedArray
+    | Float32Array
+    | Float64Array;
+
+export type NumberArray = TypedArray | DataView;
+
+// ---------------------------------------------------------------------------
+// Interpolation Function Factories
+// ---------------------------------------------------------------------------
+
+/**
+ * Returns an `null` constant interpolator.
+ */
+export function interpolate(a: any, b: null): (t: number) => null;
+/**
+ * Returns an boolean constant interpolator of value `b`.
+ */
+export function interpolate(a: any, b: boolean): (t: number) => boolean;
+/**
+ * Returns a `interpolateRgb` interpolator.
+ */
+export function interpolate(a: string | ColorCommonInstance, b: ColorCommonInstance): (t: number) => string;
+/**
+ * Returns a `interpolateDate` interpolator.
+ */
+export function interpolate(a: Date, b: Date): (t: number) => Date;
+/**
+ * Returns a `interpolateNumber` interpolator.
+ */
+export function interpolate(
+    a: number | { valueOf(): number },
+    b: number | { valueOf(): number },
+): (t: number) => number;
+/**
+ * Returns a `interpolateNumberArray` interpolator.
+ */
+export function interpolate<T extends NumberArray>(a: NumberArray | number[], b: T): (t: number) => T;
+/**
+ * Returns a `interpolateString` interpolator. If `b` is a string coercible to a color use use `interpolateRgb`.
+ */
+export function interpolate(a: string | { toString(): string }, b: string): (t: number) => string;
+/**
+ * Returns a `interpolateArray` interpolator.
+ */
+export function interpolate<U extends any[]>(a: any[], b: U): (t: number) => U;
+/**
+ * Returns a `interpolateObject` interpolator.
+ */
+export function interpolate<U extends object>(a: any, b: U): (t: number) => U;
+
+/**
+ * Returns an interpolator between the two numbers `a` and `b`.
+ * The returned interpolator is equivalent to: `(t) => a * (1 - t) + b * t`.
+ */
+export function interpolateNumber(
+    a: number | { valueOf(): number },
+    b: number | { valueOf(): number },
+): (t: number) => number;
+
+/**
+ * Returns an interpolator between the two numbers `a` and `b`; the interpolator is similar to `interpolateNumber`,
+ * except it will round the resulting value to the nearest integer.
+ */
+export function interpolateRound(
+    a: number | { valueOf(): number },
+    b: number | { valueOf(): number },
+): (t: number) => number;
+
+/**
+ * Returns an interpolator between the two strings `a` and `b`.
+ * The string interpolator finds numbers embedded in `a` and `b`, where each number is of the form understood by JavaScript.
+ * A few examples of numbers that will be detected within a string: `-1`, `42`, `3.14159`, and `6.0221413e+23`.
+ *
+ * For each number embedded in `b`, the interpolator will attempt to find a corresponding number in `a`.
+ * If a corresponding number is found, a numeric interpolator is created using `interpolateNumber`.
+ * The remaining parts of the string `b` are used as a template.
+ *
+ * For example, if `a` is `"300 12px sans-serif"`, and `b` is `"500 36px Comic-Sans"`, two embedded numbers are found.
+ * The remaining static parts (of string `b`) are a space between the two numbers (`" "`), and the suffix (`"px Comic-Sans"`).
+ * The result of the interpolator at `t` = 0.5 is `"400 24px Comic-Sans"`.
+ */
+export function interpolateString(
+    a: string | { toString(): string },
+    b: string | { toString(): string },
+): (t: number) => string;
+
+/**
+ * Returns an interpolator between the two dates `a` and `b`.
+ *
+ * Note: *no defensive copy* of the returned date is created; the same Date instance is returned for every evaluation of the interpolator.
+ * No copy is made for performance reasons; interpolators are often part of the inner loop of animated transitions.
+ */
+export function interpolateDate(a: Date, b: Date): (t: number) => Date;
+
+export type ArrayInterpolator<A extends any[]> = (t: number) => A;
+
+/**
+ * Returns an interpolator between the two arrays `a` and `b`. Internally, an array template is created that is the same length in `b`.
+ * For each element in `b`, if there exists a corresponding element in `a`, a generic interpolator is created for the two elements using `interpolate`.
+ * If there is no such element, the static value from `b` is used in the template.
+ * Then, for the given parameter `t`, the template’s embedded interpolators are evaluated. The updated array template is then returned.
+ *
+ * For example, if `a` is the array `[0, 1]` and `b` is the array `[1, 10, 100]`, then the result of the interpolator for `t = 0.5` is the array `[0.5, 5.5, 100]`.
+ *
+ * Note: *no defensive copy* of the template array is created; modifications of the returned array may adversely affect subsequent evaluation of the interpolator.
+ * No copy is made for performance reasons; interpolators are often part of the inner loop of animated transitions.
+ */
+export function interpolateArray<A extends any[]>(a: any[], b: A): ArrayInterpolator<A>;
+/**
+ * interpolateNumberArray is called
+ */
+export function interpolateArray<T extends NumberArray>(a: NumberArray | number[], b: T): (t: number) => T;
+
+/**
+ * Returns an interpolator between the two arrays of numbers a and b.
+ * Internally, an array template is created that is the same type and length as b.
+ * For each element in b, if there exists a corresponding element in a, the values are directly interpolated in the array template.
+ * If there is no such element, the static value from b is copied.
+ * The updated array template is then returned.
+ *
+ * Note: For performance reasons, no defensive copy is made of the template array and the arguments a and b; modifications of these arrays may affect subsequent evaluation of the interpolator.
+ */
+export function interpolateNumberArray<T extends NumberArray | number[]>(
+    a: NumberArray | number[],
+    b: T,
+): (t: number) => T;
+
+/**
+ * Returns an interpolator between the two objects `a` and `b`. Internally, an object template is created that has the same properties as `b`.
+ * For each property in `b`, if there exists a corresponding property in `a`, a generic interpolator is created for the two elements using `interpolate`.
+ * If there is no such property, the static value from `b` is used in the template.
+ * Then, for the given parameter `t`, the template's embedded interpolators are evaluated and the updated object template is then returned.
+ *
+ * For example, if `a` is the object `{x: 0, y: 1}` and `b` is the object `{x: 1, y: 10, z: 100}`, the result of the interpolator for `t = 0.5` is the object `{x: 0.5, y: 5.5, z: 100}`.
+ *
+ * Note: *no defensive copy* of the template object is created; modifications of the returned object may adversely affect subsequent evaluation of the interpolator.
+ * No copy is made for performance reasons; interpolators are often part of the inner loop of animated transitions.
+ */
+export function interpolateObject<U extends object>(a: any, b: U): (t: number) => U;
+
+/**
+ * Returns an interpolator between the two 2D CSS transforms represented by `a` and `b`.
+ * Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated.
+ * This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).
+ */
+export function interpolateTransformCss(a: string, b: string): (t: number) => string;
+
+/**
+ * Returns an interpolator between the two 2D SVG transforms represented by `a` and `b`.
+ * Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated.
+ * This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).
+ */
+export function interpolateTransformSvg(a: string, b: string): (t: number) => string;
+
+/**
+ * Returns an interpolator between the two views `a` and `b` of a two-dimensional plane,
+ * based on [“Smooth and efficient zooming and panning”](http://www.win.tue.nl/~vanwijk/zoompan.pdf).
+ * Each view is defined as an array of three numbers: *cx*, *cy* and *width*.
+ * The first two coordinates *cx*, *cy* represent the center of the viewport; the last coordinate *width* represents the size of the viewport.
+ *
+ * The returned interpolator exposes a *duration* property which encodes the recommended transition duration in milliseconds.
+ * This duration is based on the path length of the curved trajectory through *x,y* space.
+ * If you want to a slower or faster transition, multiply this by an arbitrary scale factor (*V* as described in the original paper).
+ */
+export function interpolateZoom(a: ZoomView, b: ZoomView): ZoomInterpolator;
+
+/**
+ * Returns a discrete interpolator for the given array of values. The returned interpolator maps `t` in `[0, 1 / n)` to values[0],
+ * `t` in `[1 / n, 2 / n)` to `values[1]`, and so on, where `n = values.length`. In effect, this is a lightweight quantize scale with a fixed domain of [0, 1].
+ */
+export function interpolateDiscrete<T>(values: T[]): (t: number) => T;
+
+// Sampling ------------------------------------------------------------------
+
+/**
+ * Returns `n` uniformly-spaced samples from the specified `interpolator`, where `n` is an integer greater than one.
+ * The first sample is always at `t = 0`, and the last sample is always at `t = 1`.
+ * This can be useful in generating a fixed number of samples from a given interpolator,
+ * such as to derive the range of a [quantize scale](https://github.com/d3/d3-scale#quantize-scales) from a [continuous interpolator](https://github.com/d3/d3-scale#interpolateWarm).
+ *
+ * Caution: this method will not work with interpolators that do not return defensive copies of their output,
+ * such as `d3.interpolateArray`, `d3.interpolateDate` and `d3.interpolateObject`. For those interpolators, you must wrap the interpolator and create a copy for each returned value.
+ */
+export function quantize<T>(interpolator: (t: number) => T, n: number): T[];
+
+// Color Spaces
+
+/**
+ * Returns an RGB color space interpolator between the two colors `a` and `b` with a configurable gamma. If the gamma is not specified, it defaults to 1.0.
+ * The colors `a` and `b` need not be in RGB; they will be converted to RGB using [`d3.rgb`](https://github.com/d3/d3-color#rgb). The return value of the interpolator is an RGB string.
+ */
+export const interpolateRgb: ColorGammaInterpolationFactory;
+
+/**
+ * Returns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to RGB color space.
+ * Implicit control points are generated such that the interpolator returns `colors[0]` at `t = 0` and `colors[colors.length - 1]` at `t = 1`.
+ * Opacity interpolation is not currently supported. See also `d3.interpolateBasis`, and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.
+ */
+export function interpolateRgbBasis(colors: Array<string | ColorCommonInstance>): (t: number) => string;
+
+/**
+ * Returns a uniform nonrational B-spline interpolator through the specified array of colors, which are converted to RGB color space.
+ * The control points are implicitly repeated such that the resulting spline has cyclical C² continuity when repeated around `t` in [0,1];
+ * this is useful, for example, to create cyclical color scales. Opacity interpolation is not currently supported.
+ * See also `d3.interpolateBasisClosed, and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.
+ */
+export function interpolateRgbBasisClosed(colors: Array<string | ColorCommonInstance>): (t: number) => string;
+
+/**
+ * Returns an HSL color space interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in HSL;
+ * they will be converted to HSL using `d3.hsl`. If either color’s hue or saturation is NaN, the opposing color’s channel value is used.
+ * The shortest path between hues is used. The return value of the interpolator is an RGB string.
+ */
+export function interpolateHsl(a: string | ColorCommonInstance, b: string | ColorCommonInstance): (t: number) => string;
+
+/**
+ * Like `interpolateHsl`, but does not use the shortest path between hues.
+ */
+export function interpolateHslLong(
+    a: string | ColorCommonInstance,
+    b: string | ColorCommonInstance,
+): (t: number) => string;
+
+/**
+ * Returns a Lab color space interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in Lab;
+ * they will be converted to Lab using `d3.lab`. The return value of the interpolator is an RGB string.
+ */
+export function interpolateLab(a: string | ColorCommonInstance, b: string | ColorCommonInstance): (t: number) => string;
+
+/**
+ * Returns an HCL color space interpolator between the two colors `a` and `b`. The colors `a` and `b` need not be in HCL;
+ * they will be converted to HCL using `d3.hcl`. If either color’s hue or chroma is NaN, the opposing color’s channel value is used.
+ * The shortest path between hues is used. The return value of the interpolator is an RGB string.
+ */
+export function interpolateHcl(a: string | ColorCommonInstance, b: string | ColorCommonInstance): (t: number) => string;
+
+/**
+ * Like `interpolateHcl`, but does not use the shortest path between hues.
+ */
+export function interpolateHclLong(
+    a: string | ColorCommonInstance,
+    b: string | ColorCommonInstance,
+): (t: number) => string;
+
+/**
+ * Returns a Cubehelix color space interpolator between the two colors `a` and `b` using a configurable `gamma`.
+ * If the gamma is not specified, it defaults to 1.0. The colors `a` and `b` need not be in Cubehelix;
+ * they will be converted to Cubehelix using [`d3.cubehelix`](https://github.com/d3/d3-color#cubehelix).
+ * If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.
+ */
+export const interpolateCubehelix: ColorGammaInterpolationFactory;
+
+/**
+ * Like `interpolateCubehelix`, but does not use the shortest path between hues.
+ */
+export const interpolateCubehelixLong: ColorGammaInterpolationFactory;
+
+/**
+ * Returns an interpolator between the two hue angles `a` and `b`. If either hue is NaN, the opposing value is used.
+ * The shortest path between hues is used. The return value of the interpolator is a number in `[0, 360)`.
+ */
+export function interpolateHue(a: number, b: number): (t: number) => number;
+
+// Splines -------------------------------------------------------------------
+
+/**
+ * Returns a uniform nonrational B-spline interpolator through the specified array of `values`, which must be numbers.
+ * Implicit control points are generated such that the interpolator returns `values[0]` at `t` = 0 and `values[values.length - 1]` at `t` = 1.
+ * See also [`d3.curveBasis`](https://github.com/d3/d3-shape#curveBasis).
+ */
+export function interpolateBasis(splineNodes: number[]): (t: number) => number;
+
+/**
+ * Returns a uniform nonrational B-spline interpolator through the specified array of `values`, which must be numbers.
+ * The control points are implicitly repeated such that the resulting one-dimensional spline has cyclical C² continuity when repeated around `t` in [0,1].
+ * See also [`d3.curveBasisClosed`](https://github.com/d3/d3-shape#curveBasisClosed).
+ */
+export function interpolateBasisClosed(splineNodes: number[]): (t: number) => number;
+
+// Piecewise -----------------------------------------------------------------
+
+/**
+ * Returns a piecewise zoom interpolator, composing zoom interpolators for each adjacent pair of zoom view.
+ * The returned interpolator maps `t` in `[0, 1 / (n - 1)]` to `interpolate(values[0], values[1])`, `t` in `[1 / (n - 1), 2 / (n - 1)]` to `interpolate(values[1], values[2])`,
+ * and so on, where `n = values.length`. In effect, this is a lightweight linear scale.
+ * For example, to blend through three different zoom views: `d3.piecewise(d3.interpolateZoom, [[0, 0, 1], [0, 0, 10], [0, 0, 15]])`.
+ *
+ * interpolate defaults to d3.interpolate.
+ */
+export function piecewise(values: ZoomView[]): ZoomInterpolator;
+/**
+ * Returns a piecewise zoom interpolator, composing zoom interpolators for each adjacent pair of zoom view.
+ * The returned interpolator maps `t` in `[0, 1 / (n - 1)]` to `interpolate(values[0], values[1])`, `t` in `[1 / (n - 1), 2 / (n - 1)]` to `interpolate(values[1], values[2])`,
+ * and so on, where `n = values.length`. In effect, this is a lightweight linear scale.
+ * For example, to blend through three different zoom views: `d3.piecewise(d3.interpolateZoom, [[0, 0, 1], [0, 0, 10], [0, 0, 15]])`.
+ */
+export function piecewise(
+    interpolate: (a: ZoomView, b: ZoomView) => ZoomInterpolator,
+    values: ZoomView[],
+): ZoomInterpolator;
+
+/**
+ * Returns a piecewise array interpolator, composing array interpolators for each adjacent pair of arrays.
+ * The returned interpolator maps `t` in `[0, 1 / (n - 1)]` to `interpolate(values[0], values[1])`, `t` in `[1 / (n - 1), 2 / (n - 1)]` to `interpolate(values[1], values[2])`,
+ * and so on, where `n = values.length`. In effect, this is a lightweight linear scale.
+ * For example, to blend through three different arrays: `d3.piecewise(d3.interpolateArray, [[0, 0, 1], [0, 0, 10], [0, 0, 15]])`.
+ *
+ * interpolate defaults to d3.interpolate.
+ */
+export function piecewise<A extends any[]>(values: A[]): ArrayInterpolator<A>;
+/**
+ * Returns a piecewise array interpolator, composing array interpolators for each adjacent pair of arrays.
+ * The returned interpolator maps `t` in `[0, 1 / (n - 1)]` to `interpolate(values[0], values[1])`, `t` in `[1 / (n - 1), 2 / (n - 1)]` to `interpolate(values[1], values[2])`,
+ * and so on, where `n = values.length`. In effect, this is a lightweight linear scale.
+ * For example, to blend through three different arrays: `d3.piecewise(d3.interpolateArray, [[0, 0, 1], [0, 0, 10], [0, 0, 15]])`.
+ */
+export function piecewise<A extends any[]>(
+    interpolate: (a: any[], b: A) => ArrayInterpolator<A>,
+    values: A[],
+): ArrayInterpolator<A>;
+
+/**
+ * Returns a piecewise interpolator, composing interpolators for each adjacent pair of values.
+ * The returned interpolator maps `t` in `[0, 1 / (n - 1)]` to `interpolate(values[0], values[1])`, `t` in `[1 / (n - 1), 2 / (n - 1)]` to `interpolate(values[1], values[2])`,
+ * and so on, where `n = values.length`. In effect, this is a lightweight linear scale.
+ * For example, to blend through red, green and blue: `d3.piecewise(d3.interpolateRgb.gamma(2.2), ["red", "green", "blue"])`.
+ *
+ * interpolate defaults to d3.interpolate.
+ */
+export function piecewise(values: unknown[]): (t: number) => any;
+/**
+ * Returns a piecewise interpolator, composing interpolators for each adjacent pair of values.
+ * The returned interpolator maps `t` in `[0, 1 / (n - 1)]` to `interpolate(values[0], values[1])`, `t` in `[1 / (n - 1), 2 / (n - 1)]` to `interpolate(values[1], values[2])`,
+ * and so on, where `n = values.length`. In effect, this is a lightweight linear scale.
+ * For example, to blend through red, green and blue: `d3.piecewise(d3.interpolateRgb.gamma(2.2), ["red", "green", "blue"])`.
+ */
+export function piecewise<TData>(interpolate: (a: TData, b: TData) => unknown, values: TData[]): (t: number) => any;
Index: node_modules/@types/d3-interpolate/package.json
===================================================================
--- node_modules/@types/d3-interpolate/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-interpolate/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+{
+    "name": "@types/d3-interpolate",
+    "version": "3.0.4",
+    "description": "TypeScript definitions for d3-interpolate",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-interpolate",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "Tom Wanzek",
+            "githubUsername": "tomwanzek",
+            "url": "https://github.com/tomwanzek"
+        },
+        {
+            "name": "Alex Ford",
+            "githubUsername": "gustavderdrache",
+            "url": "https://github.com/gustavderdrache"
+        },
+        {
+            "name": "Boris Yankov",
+            "githubUsername": "borisyankov",
+            "url": "https://github.com/borisyankov"
+        },
+        {
+            "name": "denisname",
+            "githubUsername": "denisname",
+            "url": "https://github.com/denisname"
+        },
+        {
+            "name": "Nathan Bierema",
+            "githubUsername": "Methuselah96",
+            "url": "https://github.com/Methuselah96"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/d3-interpolate"
+    },
+    "scripts": {},
+    "dependencies": {
+        "@types/d3-color": "*"
+    },
+    "typesPublisherContentHash": "d315fc677144695b44f1447ef7429c9ff248886716c2e9f742d031abcb319115",
+    "typeScriptVersion": "4.5"
+}
Index: node_modules/@types/d3-path/LICENSE
===================================================================
--- node_modules/@types/d3-path/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-path/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/d3-path/README.md
===================================================================
--- node_modules/@types/d3-path/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-path/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/d3-path`
+
+# Summary
+This package contains type definitions for d3-path (https://github.com/d3/d3-path/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-path.
+
+### Additional Details
+ * Last updated: Tue, 04 Feb 2025 22:02:37 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [Tom Wanzek](https://github.com/tomwanzek), [Alex Ford](https://github.com/gustavderdrache), [Boris Yankov](https://github.com/borisyankov), and [Nathan Bierema](https://github.com/Methuselah96).
Index: node_modules/@types/d3-path/index.d.ts
===================================================================
--- node_modules/@types/d3-path/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-path/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,108 @@
+// Last module patch version validated against: 3.1.0
+
+/**
+ * A D3 path serializer implementing CanvasPathMethods
+ */
+export interface Path {
+    /**
+     * Move to the specified point ⟨x, y⟩. Equivalent to context.moveTo and SVG’s “moveto” command.
+     *
+     * @param x x-Coordinate of point to move to
+     * @param y y-Coordinate of point to move to
+     */
+    moveTo(x: number, y: number): void;
+
+    /**
+     * Ends the current subpath and causes an automatic straight line to be drawn from the current point to the initial point of the current subpath.
+     * Equivalent to context.closePath and SVG’s “closepath” command.
+     */
+    closePath(): void;
+
+    /**
+     * Draws a straight line from the current point to the specified point ⟨x, y⟩.
+     * Equivalent to context.lineTo and SVG’s “lineto” command.
+     *
+     * @param x x-Coordinate of point to draw the line to
+     * @param y y-Coordinate of point to draw the line to
+     */
+    lineTo(x: number, y: number): void;
+
+    /**
+     * Draws a quadratic Bézier segment from the current point to the specified point ⟨x, y⟩, with the specified control point ⟨cpx, cpy⟩.
+     * Equivalent to context.quadraticCurveTo and SVG’s quadratic Bézier curve commands.
+     *
+     * @param cpx x-Coordinate of the control point for the quadratic Bézier curve
+     * @param cpy y-Coordinate of the control point for the quadratic Bézier curve
+     * @param x x-Coordinate of point to draw the curve to
+     * @param y y-Coordinate of point to draw the curve to
+     */
+    quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
+
+    /**
+     * Draws a cubic Bézier segment from the current point to the specified point ⟨x, y⟩, with the specified control points ⟨cpx1, cpy1⟩ and ⟨cpx2, cpy2⟩.
+     * Equivalent to context.bezierCurveTo and SVG’s cubic Bézier curve commands.
+     *
+     * @param cpx1 x-Coordinate of the first control point for the Bézier curve
+     * @param cpy1 y-Coordinate of the first control point for the Bézier curve
+     * @param cpx2 x-Coordinate of the second control point for the Bézier curve
+     * @param cpy2 y-Coordinate of the second control point for the Bézier curve
+     * @param x x-Coordinate of point to draw the curve to
+     * @param y y-Coordinate of point to draw the curve to
+     */
+    bezierCurveTo(cpx1: number, cpy1: number, cpx2: number, cpy2: number, x: number, y: number): void;
+
+    /**
+     * Draws a circular arc segment with the specified radius that starts tangent to the line between the current point and the specified point ⟨x1, y1⟩
+     * and ends tangent to the line between the specified points ⟨x1, y1⟩ and ⟨x2, y2⟩. If the first tangent point is not equal to the current point,
+     * a straight line is drawn between the current point and the first tangent point. Equivalent to context.arcTo and uses SVG’s elliptical arc curve commands.
+     *
+     * @param x1 x-Coordinate of the first tangent point
+     * @param y1 y-Coordinate of the first tangent point
+     * @param x2 x-Coordinate of the second tangent point
+     * @param y2 y-Coordinate of the second tangent point
+     * @param radius  Radius of the arc segment
+     */
+    arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
+
+    /**
+     * Draws a circular arc segment with the specified center ⟨x, y⟩, radius, startAngle and endAngle. If anticlockwise is true,
+     * the arc is drawn in the anticlockwise direction; otherwise, it is drawn in the clockwise direction.
+     * If the current point is not equal to the starting point of the arc, a straight line is drawn from the current point to the start of the arc.
+     * Equivalent to context.arc and uses SVG’s elliptical arc curve commands.
+     *
+     * @param x x-Coordinate of the center point of the arc segment
+     * @param y y-Coordinate of the center point of the arc segment
+     * @param radius Radius of the arc segment
+     * @param startAngle Start angle of arc segment
+     * @param endAngle End angle of arc segment
+     * @param anticlockwise Flag indicating directionality (true = anti-clockwise, false = clockwise)
+     */
+    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
+
+    /**
+     * Creates a new subpath containing just the four points ⟨x, y⟩, ⟨x + w, y⟩, ⟨x + w, y + h⟩, ⟨x, y + h⟩,
+     * with those four points connected by straight lines, and then marks the subpath as closed. Equivalent to context.rect and uses SVG’s “lineto” commands.
+     *
+     * @param x x-Coordinate of starting point for drawing the rectangle
+     * @param y y-Coordinate of starting point for drawing the rectangle
+     * @param w Width of rectangle
+     * @param h Height of rectangle
+     */
+    rect(x: number, y: number, w: number, h: number): void;
+
+    /**
+     * Returns the string representation of this path according to SVG’s path data specification.
+     */
+    toString(): string;
+}
+
+/**
+ * Construct a D3 Path serializer
+ */
+export function path(): Path;
+
+/**
+ * Like {@link path}, except limits the digits after the decimal to the specified number of digits.
+ * Useful for reducing the size of generated SVG path data.
+ */
+export function pathRound(digits?: number): Path;
Index: node_modules/@types/d3-path/package.json
===================================================================
--- node_modules/@types/d3-path/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-path/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+{
+    "name": "@types/d3-path",
+    "version": "3.1.1",
+    "description": "TypeScript definitions for d3-path",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-path",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "Tom Wanzek",
+            "githubUsername": "tomwanzek",
+            "url": "https://github.com/tomwanzek"
+        },
+        {
+            "name": "Alex Ford",
+            "githubUsername": "gustavderdrache",
+            "url": "https://github.com/gustavderdrache"
+        },
+        {
+            "name": "Boris Yankov",
+            "githubUsername": "borisyankov",
+            "url": "https://github.com/borisyankov"
+        },
+        {
+            "name": "Nathan Bierema",
+            "githubUsername": "Methuselah96",
+            "url": "https://github.com/Methuselah96"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/d3-path"
+    },
+    "scripts": {},
+    "dependencies": {},
+    "peerDependencies": {},
+    "typesPublisherContentHash": "a49fc946781c1138c0dd932ed2a34ea60587bcc0b39790e4eb9a51cb32aaa90b",
+    "typeScriptVersion": "5.0"
+}
Index: node_modules/@types/d3-scale/LICENSE
===================================================================
--- node_modules/@types/d3-scale/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-scale/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/d3-scale/README.md
===================================================================
--- node_modules/@types/d3-scale/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-scale/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/d3-scale`
+
+# Summary
+This package contains type definitions for d3-scale (https://github.com/d3/d3-scale/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-scale.
+
+### Additional Details
+ * Last updated: Wed, 05 Feb 2025 00:46:59 GMT
+ * Dependencies: [@types/d3-time](https://npmjs.com/package/@types/d3-time)
+
+# Credits
+These definitions were written by [Tom Wanzek](https://github.com/tomwanzek), [Alex Ford](https://github.com/gustavderdrache), [Boris Yankov](https://github.com/borisyankov), [denisname](https://github.com/denisname), [rulonder](https://github.com/rulonder), and [Nathan Bierema](https://github.com/Methuselah96).
Index: node_modules/@types/d3-scale/index.d.ts
===================================================================
--- node_modules/@types/d3-scale/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-scale/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2669 @@
+// Last module patch version validated against: 4.0.2
+
+import { CountableTimeInterval, TimeInterval } from "d3-time";
+
+// -------------------------------------------------------------------------------
+// Shared Types and Interfaces
+// -------------------------------------------------------------------------------
+
+/**
+ * An Interpolator factory returns an interpolator function.
+ *
+ * The first generic corresponds to the data type of the interpolation boundaries.
+ * The second generic corresponds to the data type of the return type of the interpolator.
+ */
+export interface InterpolatorFactory<T, U> {
+    /**
+     * Construct a new interpolator function, based on the provided interpolation boundaries.
+     *
+     * @param a Start boundary of the interpolation interval.
+     * @param b End boundary of the interpolation interval.
+     */
+    (a: T, b: T): (t: number) => U;
+}
+
+export type NumberValue = number | { valueOf(): number };
+
+export type UnknownReturnType<Unknown, DefaultUnknown> = [Unknown] extends [never] ? DefaultUnknown : Unknown;
+
+/**
+ * A helper interface for a continuous scale defined over a numeric domain.
+ */
+export interface ScaleContinuousNumeric<Range, Output, Unknown = never> {
+    /**
+     * Given a value from the domain, returns the corresponding value from the range, subject to interpolation, if any.
+     *
+     * If the given value is outside the domain, and clamping is not enabled, the mapping may be extrapolated such that the returned value is outside the range.
+     *
+     * Note: The interpolation function applied by the scale may change the output type from the range type as part of the interpolation.
+     *
+     * @param value A numeric value from the domain.
+     */
+    (value: NumberValue): Output | Unknown;
+
+    /**
+     * Given a value from the range, returns the corresponding value from the domain. Inversion is useful for interaction,
+     * say to determine the data value corresponding to the position of the mouse.
+     *
+     * If the given value is outside the range, and clamping is not enabled, the mapping may be extrapolated such that the returned value is outside the domain.
+     *
+     * IMPORTANT: This method is only supported if the range is numeric. If the range is not numeric, returns NaN.
+     *
+     * For a valid value y in the range, continuous(continuous.invert(y)) approximately equals y;
+     * similarly, for a valid value x in the domain, continuous.invert(continuous(x)) approximately equals x.
+     * The scale and its inverse may not be exact due to the limitations of floating point precision.
+     *
+     * @param value A numeric value from the range.
+     */
+    invert(value: NumberValue): number;
+
+    /**
+     * Returns a copy of the scale’s current domain.
+     */
+    domain(): number[];
+    /**
+     * Sets the scale’s domain to the specified array of numbers. The array must contain two or more elements.
+     * If the elements in the given array are not numbers, they will be coerced to numbers
+     *
+     * Although continuous scales typically have two values each in their domain and range, specifying more than two values produces a piecewise scale.
+     *
+     * Internally, a piecewise scale performs a binary search for the range interpolator corresponding to the given domain value.
+     * Thus, the domain must be in ascending or descending order. If the domain and range have different lengths N and M, only the first min(N,M) elements in each are observed.
+     *
+     * @param domain Array of numeric domain values.
+     */
+    domain(domain: Iterable<NumberValue>): this;
+
+    /**
+     * Returns a copy of the scale’s current range.
+     */
+    range(): Range[];
+    /**
+     * Sets the scale’s range to the specified array of values.
+     *
+     * The array must contain two or more elements. Unlike the domain, elements in the given array need not be numbers;
+     * any value that is supported by the underlying interpolator will work, though note that numeric ranges are required for invert.
+     *
+     * @param range Array of range values.
+     */
+    range(range: Iterable<Range>): this;
+
+    /**
+     * Sets the scale’s range to the specified array of values while also setting the scale’s interpolator to interpolateRound.
+     *
+     * The rounding interpolator is sometimes useful for avoiding antialiasing artifacts,
+     * though also consider the shape-rendering “crispEdges” styles. Note that this interpolator can only be used with numeric ranges.
+     *
+     * The array must contain two or more elements. Unlike the domain, elements in the given array need not be numbers;
+     * any value that is supported by the underlying interpolator will work, though note that numeric ranges are required for invert.
+     *
+     * @param range Array of range values.
+     */
+    rangeRound(range: Iterable<NumberValue>): this;
+
+    /**
+     * Returns whether or not the scale currently clamps values to within the range.
+     */
+    clamp(): boolean;
+    /**
+     * Enables or disables clamping, respectively. If clamping is disabled and the scale is passed a value outside the domain,
+     * the scale may return a value outside the range through extrapolation.
+     *
+     * If clamping is enabled, the return value of the scale is always within the scale’s range. Clamping similarly applies to the "invert" method.
+     *
+     * @param clamp A flag to enable (true) or disable (false) clamping.
+     */
+    clamp(clamp: boolean): this;
+
+    /**
+     * Returns approximately count representative values from the scale’s domain.
+     *
+     * If count is not specified, it defaults to 10.
+     *
+     * The returned tick values are uniformly spaced, have human-readable values (such as multiples of powers of 10),
+     * and are guaranteed to be within the extent of the domain. Ticks are often used to display reference lines, or tick marks, in conjunction with the visualized data.
+     * The specified count is only a hint; the scale may return more or fewer values depending on the domain. See also d3-array’s ticks.
+     *
+     * @param count Optional approximate number of ticks to be returned. If count is not specified, it defaults to 10.
+     */
+    ticks(count?: number): number[];
+
+    /**
+     * Returns a number format function suitable for displaying a tick value, automatically computing the appropriate precision based on the fixed interval between tick values.
+     * The specified count should have the same value as the count that is used to generate the tick values.
+     *
+     * @param count Approximate number of ticks to be used when calculating precision for the number format function.
+     * @param specifier An optional valid format specifier string which allows a custom format where the precision of the format is automatically set by the scale as appropriate for the tick interval.
+     * If specifier uses the format type "s", the scale will return a SI-prefix format based on the largest value in the domain.
+     * If the specifier already specifies a precision, this method is equivalent to locale.format.
+     */
+    tickFormat(count?: number, specifier?: string): (d: NumberValue) => string;
+
+    /**
+     * Extends the domain so that it starts and ends on nice round values.
+     * This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value.
+     * An optional tick count argument allows greater control over the step size used to extend the bounds,
+     * guaranteeing that the returned ticks will exactly cover the domain.
+     * Nicing is useful if the domain is computed from data, say using extent, and may be irregular.
+     * For example, for a domain of [0.201479…, 0.996679…], a nice domain might be [0.2, 1.0].
+     * If the domain has more than two values, nicing the domain only affects the first and last value.
+     *
+     * Nicing a scale only modifies the current domain; it does not automatically nice domains that are subsequently set using continuous.domain.
+     * You must re-nice the scale after setting the new domain, if desired.
+     *
+     * @param count An optional number of ticks expected to be used.
+     */
+    nice(count?: number): this;
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+}
+
+/**
+ * Returns a number format function suitable for displaying a tick value,
+ * automatically computing the appropriate precision based on the fixed interval between tick values, as determined by d3.tickStep.
+ *
+ * @param start Start
+ * @param stop Stop
+ * @param count Approximate number of ticks to be used when calculating precision for the number format function.
+ * @param specifier An optional specifier allows a custom format where the precision of the format is automatically set by the scale as appropriate for the tick interval.
+ * If specifier uses the format type s, the scale will return a SI-prefix format based on the larger absolute value of start and stop.
+ * If the specifier already specifies a precision, this method is equivalent to locale.format.
+ */
+export function tickFormat(start: number, stop: number, count: number, specifier?: string): (d: NumberValue) => string;
+
+// -------------------------------------------------------------------------------
+// Linear Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * A linear continuous scale defined over a numeric domain.
+ *
+ * Continuous scales map a continuous, quantitative input domain to a continuous output range.
+ * Each range value y can be expressed as a function of the domain value x: y = mx + b.
+ *
+ * If the range is also numeric, the mapping may be inverted.
+ *
+ * Note that the data types of the range and output of the scale must be compatible with the interpolator applied by the scale.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ *
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ *
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ */
+export interface ScaleLinear<Range, Output, Unknown = never> extends ScaleContinuousNumeric<Range, Output, Unknown> {
+    /**
+     * Returns the scale’s current interpolator factory, which defaults to interpolate.
+     */
+    interpolate(): InterpolatorFactory<any, any>;
+
+    /**
+     * Sets the scale’s range interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range;
+     * these interpolators then map a normalized domain parameter t in [0, 1] to the corresponding value in the range.
+     *
+     * Note: the default interpolator may reuse return values. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place.
+     * If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance);
+     * however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.
+     *
+     * As part of the interpolation process the interpolated value from the range may be converted to a corresponding output value.
+     *
+     * @param interpolate An interpolation factory. The generics for Range and Output of the scale must correspond to the interpolation factory applied to the scale.
+     */
+    interpolate(interpolate: InterpolatorFactory<Range, Output>): this;
+    /**
+     * Sets the scale’s range interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range;
+     * these interpolators then map a normalized domain parameter t in [0, 1] to the corresponding value in the range.
+     *
+     * Note: the default interpolator may reuse return values. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place.
+     * If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance);
+     * however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.
+     *
+     * As part of the interpolation process the interpolated value from the range may be converted to a corresponding output value.
+     *
+     * The generic "NewOutput" can be used to change the scale to have a different output element type corresponding to the new interpolation factory.
+     *
+     * @param interpolate An interpolation factory. The generics for Range and Output of the scale must correspond to the interpolation factory applied to the scale.
+     */
+    interpolate<NewOutput>(interpolate: InterpolatorFactory<Range, NewOutput>): ScaleLinear<Range, NewOutput, Unknown>;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleLinear<Range, Output, NewUnknown>;
+}
+
+/**
+ * Constructs a new continuous scale with the specified range, the default interpolator and clamping disabled.
+ * The domain defaults to [0, 1].
+ * If range is not specified, it defaults to [0, 1].
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleLinear<Range = number, Output = Range, Unknown = never>(
+    range?: Iterable<Range>,
+): ScaleLinear<Range, Output, Unknown>;
+/**
+ * Constructs a new continuous scale with the specified domain and range, the default interpolator and clamping disabled.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param domain Array of numeric domain values.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleLinear<Range, Output = Range, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    range: Iterable<Range>,
+): ScaleLinear<Range, Output, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Power Scale Factories
+// -------------------------------------------------------------------------------
+
+/**
+ * A continuous power scale defined over a numeric domain.
+ *
+ * Continuous scales map a continuous, quantitative input domain to a continuous output range.
+ *
+ * Each range value y can be expressed as a function of the domain value x: y = mx^k + b, where k is the exponent value.
+ * Power scales also support negative domain values, in which case the input value and the resulting output value are multiplied by -1.
+ *
+ * If the range is also numeric, the mapping may be inverted.
+ *
+ * Note that the data types of the range and output of the scale must be compatible with the interpolator applied by the scale.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ *
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ *
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ */
+export interface ScalePower<Range, Output, Unknown = never> extends ScaleContinuousNumeric<Range, Output, Unknown> {
+    /**
+     * Returns the scale’s current interpolator factory, which defaults to interpolate.
+     */
+    interpolate(): InterpolatorFactory<any, any>;
+
+    /**
+     * Sets the scale’s range interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range;
+     * these interpolators then map a normalized domain parameter t in [0, 1] to the corresponding value in the range.
+     *
+     * Note: the default interpolator may reuse return values. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place.
+     * If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance);
+     * however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.
+     *
+     * As part of the interpolation process the interpolated value from the range may be converted to a corresponding output value.
+     *
+     * @param interpolate An interpolation factory. The generics for Range and Output of the scale must correspond to the interpolation factory applied to the scale.
+     */
+    interpolate(interpolate: InterpolatorFactory<Range, Output>): this;
+    /**
+     * Sets the scale’s range interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range;
+     * these interpolators then map a normalized domain parameter t in [0, 1] to the corresponding value in the range.
+     *
+     * Note: the default interpolator may reuse return values. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place.
+     * If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance);
+     * however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.
+     *
+     * As part of the interpolation process the interpolated value from the range may be converted to a corresponding output value.
+     *
+     * The generic "NewOutput" can be used to change the scale to have a different output element type corresponding to the new interpolation factory.
+     *
+     * @param interpolate An interpolation factory. The generics for Range and Output of the scale must correspond to the interpolation factory applied to the scale.
+     */
+    interpolate<NewOutput>(interpolate: InterpolatorFactory<Range, NewOutput>): ScalePower<Range, NewOutput, Unknown>;
+
+    /**
+     * If exponent is not specified, returns the current exponent, which defaults to 1.
+     * (Note that this is effectively a linear scale until you set a different exponent.)
+     */
+    exponent(): number;
+    /**
+     * Sets the current exponent to the given numeric value.
+     * (Note that this is effectively a linear scale until you set a different exponent.)
+     */
+    exponent(exponent: number): this;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScalePower<Range, Output, NewUnknown>;
+}
+
+/**
+ * Constructs a new continuous scale with the specified range, the exponent 1, the default interpolator and clamping disabled.
+ * The domain defaults to [0, 1].
+ * If range is not specified, it defaults to [0, 1].
+ * (Note that this is effectively a linear scale until you set a different exponent.)
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scalePow<Range = number, Output = Range, Unknown = never>(
+    range?: Iterable<Range>,
+): ScalePower<Range, Output, Unknown>;
+/**
+ * Constructs a new continuous scale with the specified domain and range, the exponent 1, the default interpolator and clamping disabled.
+ * (Note that this is effectively a linear scale until you set a different exponent.)
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param domain Array of numeric domain values.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scalePow<Range, Output = Range, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    range: Iterable<Range>,
+): ScalePower<Range, Output, Unknown>;
+
+/**
+ * Constructs a new continuous power scale with the specified range, the exponent 0.5, the default interpolator and clamping disabled.
+ * The domain defaults to [0, 1].
+ * If range is not specified, it defaults to [0, 1].
+ * This is a convenience method equivalent to d3.scalePow().exponent(0.5).
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSqrt<Range = number, Output = Range, Unknown = never>(
+    range?: Iterable<Range>,
+): ScalePower<Range, Output, Unknown>;
+/**
+ * Constructs a new continuous power scale with the specified domain and range, the exponent 0.5, the default interpolator and clamping disabled.
+ * This is a convenience method equivalent to d3.scalePow().exponent(0.5).
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param domain Array of numeric domain values.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSqrt<Range, Output = Range, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    range: Iterable<Range>,
+): ScalePower<Range, Output, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Logarithmic Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * A continuous logarithmic scale defined over a numeric domain.
+ *
+ * Continuous scales map a continuous, quantitative input domain to a continuous output range.
+ *
+ * The mapping to the range value y can be expressed as a function of the domain value x: y = m log(x) + b.
+ *
+ * As log(0) = -∞, a log scale domain must be strictly-positive or strictly-negative; the domain must not include or cross zero.
+ * A log scale with a positive domain has a well-defined behavior for positive values, and a log scale with a negative domain has a well-defined behavior for negative values.
+ * (For a negative domain, input and output values are implicitly multiplied by -1.)
+ * The behavior of the scale is undefined if you pass a negative value to a log scale with a positive domain or vice versa.
+ *
+ * If the range is also numeric, the mapping may be inverted.
+ *
+ * Note that the data types of the range and output of the scale must be compatible with the interpolator applied by the scale.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ *
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ *
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ */
+export interface ScaleLogarithmic<Range, Output, Unknown = never>
+    extends ScaleContinuousNumeric<Range, Output, Unknown>
+{
+    /**
+     * Returns a copy of the scale’s current domain.
+     */
+    domain(): number[];
+    /**
+     * Sets the scale’s domain to the specified array of numbers. The array must contain two or more elements.
+     * If the elements in the given array are not numbers, they will be coerced to numbers
+     *
+     * As log(0) = -∞, a log scale domain must be strictly-positive or strictly-negative; the domain must not include or cross zero.
+     * A log scale with a positive domain has a well-defined behavior for positive values, and a log scale with a negative domain has a well-defined behavior for negative values.
+     * (For a negative domain, input and output values are implicitly multiplied by -1.)
+     * The behavior of the scale is undefined if you pass a negative value to a log scale with a positive domain or vice versa.
+     *
+     * Although continuous scales typically have two values each in their domain and range, specifying more than two values produces a piecewise scale.
+     *
+     * Internally, a piecewise scale performs a binary search for the range interpolator corresponding to the given domain value.
+     * Thus, the domain must be in ascending or descending order. If the domain and range have different lengths N and M, only the first min(N,M) elements in each are observed.
+     *
+     * @param domain Array of numeric domain values.
+     */
+    domain(domain: Iterable<NumberValue>): this;
+
+    /**
+     * Returns the scale’s current interpolator factory, which defaults to interpolate.
+     */
+    interpolate(): InterpolatorFactory<any, any>;
+
+    /**
+     * Sets the scale’s range interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range;
+     * these interpolators then map a normalized domain parameter t in [0, 1] to the corresponding value in the range.
+     *
+     * Note: the default interpolator may reuse return values. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place.
+     * If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance);
+     * however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.
+     *
+     * As part of the interpolation process the interpolated value from the range may be converted to a corresponding output value.
+     *
+     * @param interpolate An interpolation factory. The generics for Range and Output of the scale must correspond to the interpolation factory applied to the scale.
+     */
+    interpolate(interpolate: InterpolatorFactory<Range, Output>): this;
+    /**
+     * Sets the scale’s range interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range;
+     * these interpolators then map a normalized domain parameter t in [0, 1] to the corresponding value in the range.
+     *
+     * Note: the default interpolator may reuse return values. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place.
+     * If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance);
+     * however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.
+     *
+     * As part of the interpolation process the interpolated value from the range may be converted to a corresponding output value.
+     *
+     * The generic "NewOutput" can be used to change the scale to have a different output element type corresponding to the new interpolation factory.
+     *
+     * @param interpolate An interpolation factory. The generics for Range and Output of the scale must correspond to the interpolation factory applied to the scale.
+     */
+    interpolate<NewOutput>(
+        interpolate: InterpolatorFactory<Range, NewOutput>,
+    ): ScaleLogarithmic<Range, NewOutput, Unknown>;
+
+    /**
+     * Returns approximately count representative values from the scale’s domain.
+     *
+     * If count is not specified, it defaults to 10.
+     *
+     * If the base is an integer, the returned ticks are uniformly spaced within each integer power of base; otherwise, one tick per power of base is returned.
+     * The returned ticks are guaranteed to be within the extent of the domain. If the orders of magnitude in the domain is greater than count, then at most one tick per power is returned.
+     * Otherwise, the tick values are unfiltered, but note that you can use log.tickFormat to filter the display of tick labels.
+     *
+     * @param count Optional approximate number of ticks to be returned. If count is not specified, it defaults to 10.
+     */
+    ticks(count?: number): number[];
+
+    /**
+     * Returns a number format function suitable for displaying a tick value, automatically computing the appropriate precision based on the fixed interval between tick values.
+     *
+     * The specified count typically has the same value as the count that is used to generate the tick values.
+     * If there are too many ticks, the formatter may return the empty string for some of the tick labels;
+     * however, note that the ticks are still shown.
+     * To disable filtering, specify a count of Infinity. When specifying a count, you may also provide a format specifier or format function.
+     * For example, to get a tick formatter that will display 20 ticks of a currency, say log.tickFormat(20, "$,f").
+     * If the specifier does not have a defined precision, the precision will be set automatically by the scale, returning the appropriate format.
+     * This provides a convenient way of specifying a format whose precision will be automatically set by the scale.
+     *
+     * @param count Approximate number of ticks to be used when calculating precision for the number format function.
+     * @param specifier An optional valid format specifier string which allows a custom format where the precision of the format is automatically set by the scale as appropriate for the tick interval.
+     * For example, to get a tick formatter that will display 20 ticks of a currency, say log.tickFormat(20, "$,f").
+     * If the specifier does not have a defined precision, the precision will be set automatically by the scale, returning the appropriate format.
+     * This provides a convenient way of specifying a format whose precision will be automatically set by the scale.
+     */
+    tickFormat(count?: number, specifier?: string): (d: NumberValue) => string;
+
+    /**
+     * Extends the domain to integer powers of base. For example, for a domain of [0.201479…, 0.996679…], and base 10, the nice domain is [0.1, 1].
+     * If the domain has more than two values, nicing the domain only affects the first and last value.
+     *
+     * Nicing a scale only modifies the current domain; it does not automatically nice domains that are subsequently set using continuous.domain.
+     * You must re-nice the scale after setting the new domain, if desired.
+     */
+    nice(): this;
+
+    /**
+     * Returns the current base, which defaults to 10.
+     */
+    base(): number;
+    /**
+     * Sets the base for this logarithmic scale to the specified value.
+     */
+    base(base: number): this;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleLogarithmic<Range, Output, NewUnknown>;
+}
+
+/**
+ * Constructs a new continuous scale with the specified range, the base 10, the default interpolator and clamping disabled.
+ * The domain defaults to [1, 10].
+ * If range is not specified, it defaults to [0, 1].
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleLog<Range = number, Output = Range, Unknown = never>(
+    range?: Iterable<Range>,
+): ScaleLogarithmic<Range, Output, Unknown>;
+/**
+ * Constructs a new continuous scale with the specified domain and range, the base 10, the default interpolator and clamping disabled.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param domain Array of numeric domain values.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleLog<Range, Output = Range, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    range: Iterable<Range>,
+): ScaleLogarithmic<Range, Output, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Symlog Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * A bi-symmetric log transformation for wide-range data by Webber scale defined over a numeric domain.
+ *
+ * Continuous scales map a continuous, quantitative input domain to a continuous output range.
+ *
+ * See “A bi-symmetric log transformation for wide-range data” by Webber for more
+ *
+ * If the range is also numeric, the mapping may be inverted.
+ *
+ * Note that the data types of the range and output of the scale must be compatible with the interpolator applied by the scale.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ *
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ *
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ */
+export interface ScaleSymLog<Range, Output, Unknown = never> extends ScaleContinuousNumeric<Range, Output, Unknown> {
+    /**
+     * Returns a number format function suitable for displaying a tick value, automatically computing the appropriate precision based on the fixed interval between tick values.
+     *
+     * The specified count typically has the same value as the count that is used to generate the tick values.
+     * If there are too many ticks, the formatter may return the empty string for some of the tick labels;
+     * however, note that the ticks are still shown.
+     * To disable filtering, specify a count of Infinity. When specifying a count, you may also provide a format specifier or format function.
+     * For example, to get a tick formatter that will display 20 ticks of a currency, say log.tickFormat(20, "$,f").
+     * If the specifier does not have a defined precision, the precision will be set automatically by the scale, returning the appropriate format.
+     * This provides a convenient way of specifying a format whose precision will be automatically set by the scale.
+     *
+     * @param count Approximate number of ticks to be used when calculating precision for the number format function.
+     * @param specifier An optional valid format specifier string which allows a custom format where the precision of the format is automatically set by the scale as appropriate for the tick interval.
+     * For example, to get a tick formatter that will display 20 ticks of a currency, say log.tickFormat(20, "$,f").
+     * If the specifier does not have a defined precision, the precision will be set automatically by the scale, returning the appropriate format.
+     * This provides a convenient way of specifying a format whose precision will be automatically set by the scale.
+     */
+    tickFormat(count?: number, specifier?: string): (d: NumberValue) => string;
+    /**
+     * Returns the current constant, which defaults to 1.
+     */
+    constant(): number;
+    /**
+     * Sets the symlog constant to the specified number and returns this scale;
+     * otherwise returns the current value of the symlog constant, which defaults to 1. See “A bi-symmetric log transformation for wide-range data” by Webber for more.
+     */
+    constant(constant: number): this;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleSymLog<Range, Output, NewUnknown>;
+}
+
+/**
+ * Constructs a new continuous scale with the specified range, the constant 1, the default interpolator and clamping disabled.
+ * The domain defaults to [0, 1].
+ * If range is not specified, it defaults to [0, 1].
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSymlog<Range = number, Output = Range, Unknown = never>(
+    range?: Iterable<Range>,
+): ScaleSymLog<Range, Output, Unknown>;
+/**
+ * Constructs a new continuous scale with the specified domain and range, the constant 1, the default interpolator and clamping disabled.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param domain Array of numeric domain values.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSymlog<Range, Output = Range, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    range: Iterable<Range>,
+): ScaleSymLog<Range, Output, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Identity Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * Identity scales are a special case of linear scales where the domain and range are identical; the scale and its invert method are thus the identity function.
+ * These scales are occasionally useful when working with pixel coordinates, say in conjunction with an axis.
+ *
+ * The generic corresponds to the data type of the unknown value.
+ */
+export interface ScaleIdentity<Unknown = never> {
+    /**
+     * Given a value from the domain, returns the corresponding value from the range, subject to interpolation, if any.
+     *
+     * If the given value is outside the domain, and clamping is not enabled, the mapping may be extrapolated such that the returned value is outside the range.
+     *
+     * Note: The interpolation function applied by the scale may change the output type from the range type as part of the interpolation.
+     *
+     * @param value A numeric value from the domain.
+     */
+    (value: NumberValue): number | Unknown;
+
+    /**
+     * Given a value from the range, returns the corresponding value from the domain. Inversion is useful for interaction,
+     * say to determine the data value corresponding to the position of the mouse.
+     *
+     * If the given value is outside the range, and clamping is not enabled, the mapping may be extrapolated such that the returned value is outside the domain.
+     *
+     * IMPORTANT: This method is only supported if the range is numeric. If the range is not numeric, returns NaN.
+     *
+     * For a valid value y in the range, continuous(continuous.invert(y)) approximately equals y;
+     * similarly, for a valid value x in the domain, continuous.invert(continuous(x)) approximately equals x.
+     * The scale and its inverse may not be exact due to the limitations of floating point precision.
+     *
+     * @param value A numeric value from the range.
+     */
+    invert(value: NumberValue): number;
+
+    /**
+     * Returns a copy of the scale’s current domain.
+     */
+    domain(): number[];
+    /**
+     * Sets the scale’s domain to the specified array of numbers. The array must contain two or more elements.
+     * If the elements in the given array are not numbers, they will be coerced to numbers
+     *
+     * Although continuous scales typically have two values each in their domain and range, specifying more than two values produces a piecewise scale.
+     *
+     * Internally, a piecewise scale performs a binary search for the range interpolator corresponding to the given domain value.
+     * Thus, the domain must be in ascending or descending order. If the domain and range have different lengths N and M, only the first min(N,M) elements in each are observed.
+     *
+     * @param domain Array of numeric domain values.
+     */
+    domain(domain: Iterable<NumberValue>): this;
+
+    /**
+     * Returns a copy of the scale’s current range.
+     */
+    range(): number[];
+    /**
+     * Sets the scale’s range to the specified array of values.
+     *
+     * The array must contain two or more elements. Unlike the domain, elements in the given array need not be numbers;
+     * any value that is supported by the underlying interpolator will work, though note that numeric ranges are required for invert.
+     *
+     * @param range Array of range values.
+     */
+    range(range: Iterable<NumberValue>): this;
+
+    /**
+     * Returns approximately count representative values from the scale’s domain.
+     *
+     * If count is not specified, it defaults to 10.
+     *
+     * The returned tick values are uniformly spaced, have human-readable values (such as multiples of powers of 10),
+     * and are guaranteed to be within the extent of the domain. Ticks are often used to display reference lines, or tick marks, in conjunction with the visualized data.
+     * The specified count is only a hint; the scale may return more or fewer values depending on the domain. See also d3-array’s ticks.
+     *
+     * @param count Optional approximate number of ticks to be returned. If count is not specified, it defaults to 10.
+     */
+    ticks(count?: number): number[];
+
+    /**
+     * Returns a number format function suitable for displaying a tick value, automatically computing the appropriate precision based on the fixed interval between tick values.
+     * The specified count should have the same value as the count that is used to generate the tick values.
+     *
+     * @param count Approximate number of ticks to be used when calculating precision for the number format function.
+     * @param specifier An optional valid format specifier string which allows a custom format where the precision of the format is automatically set by the scale as appropriate for the tick interval.
+     * If specifier uses the format type "s", the scale will return a SI-prefix format based on the largest value in the domain.
+     * If the specifier already specifies a precision, this method is equivalent to locale.format.
+     */
+    tickFormat(count?: number, specifier?: string): (d: NumberValue) => string;
+
+    /**
+     * Extends the domain so that it starts and ends on nice round values.
+     * This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value.
+     * An optional tick count argument allows greater control over the step size used to extend the bounds,
+     * guaranteeing that the returned ticks will exactly cover the domain.
+     * Nicing is useful if the domain is computed from data, say using extent, and may be irregular.
+     * For example, for a domain of [0.201479…, 0.996679…], a nice domain might be [0.2, 1.0].
+     * If the domain has more than two values, nicing the domain only affects the first and last value.
+     *
+     * Nicing a scale only modifies the current domain; it does not automatically nice domains that are subsequently set using continuous.domain.
+     * You must re-nice the scale after setting the new domain, if desired.
+     *
+     * @param count An optional number of ticks expected to be used.
+     */
+    nice(count?: number): this;
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleIdentity<NewUnknown>;
+}
+
+/**
+ * Constructs a new identity scale with the specified domain and range.
+ * If range is not specified, it defaults to [0, 1].
+ *
+ * The generic corresponds to the data type of the unknown value.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleIdentity<Unknown = never>(range?: Iterable<NumberValue>): ScaleIdentity<Unknown>;
+
+// -------------------------------------------------------------------------------
+// Radial Scale Factory
+// -------------------------------------------------------------------------------
+
+export interface ScaleRadial<Range, Output, Unknown = never> extends ScaleContinuousNumeric<Range, Output, Unknown> {
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleRadial<Range, Output, NewUnknown>;
+}
+
+/**
+ * Constructs a new radial scale with the specified range.
+ * The domain defaults to [0, 1].
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * @param range Iterable of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleRadial<Range = number, Unknown = never>(
+    range?: Iterable<Range>,
+): ScaleRadial<Range, Range, Unknown>;
+/**
+ * Constructs a new radial scale with the specified domain and range.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * @param domain Iterable of numeric domain values.
+ * @param range Iterable of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleRadial<Range, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    range: Iterable<Range>,
+): ScaleRadial<Range, Range, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Time Scale Factories
+// -------------------------------------------------------------------------------
+
+/**
+ * A linear scale defined over a temporal domain.
+ *
+ * Time scales implement ticks based on calendar intervals, taking the pain out of generating axes for temporal domains.
+ *
+ * If the range is numeric, the mapping may be inverted to return a date.
+ *
+ * Note that the data types of the range and output of the scale must be compatible with the interpolator applied by the scale.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ *
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ *
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ */
+export interface ScaleTime<Range, Output, Unknown = never> {
+    /**
+     * Given a value from the domain, returns the corresponding value from the range, subject to interpolation, if any.
+     *
+     * If the given value is outside the domain, and clamping is not enabled, the mapping may be extrapolated such that the returned value is outside the range.
+     *
+     * Note: The interpolation function applied by the scale may change the output type from the range type as part of the interpolation.
+     *
+     * @param value A temporal value from the domain. If the value is not a Date, it will be coerced to Date.
+     */
+    (value: Date | NumberValue): Output | Unknown;
+
+    /**
+     * Given a value from the range, returns the corresponding value from the domain. Inversion is useful for interaction,
+     * say to determine the data value corresponding to the position of the mouse.
+     *
+     * If the given value is outside the range, and clamping is not enabled, the mapping may be extrapolated such that the returned value is outside the domain.
+     *
+     * IMPORTANT: This method is only supported if the range is numeric. If the range is not numeric, returns Invalid Date.
+     *
+     * For a valid value y in the range, time(time.invert(y)) equals y; similarly, for a valid value x in the domain, time.invert(time(x)) equals x.
+     * The invert method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.
+     *
+     * @param value A numeric value from the range.
+     */
+    invert(value: NumberValue): Date;
+
+    /**
+     * Returns a copy of the scale’s current domain.
+     */
+    domain(): Date[];
+
+    /**
+     * Sets the scale’s domain to the specified array of temporal domain values. The array must contain two or more elements.
+     * If the elements in the given array are not dates, they will be coerced to dates.
+     *
+     * Although continuous scales typically have two values each in their domain and range, specifying more than two values produces a piecewise scale.
+     *
+     * Internally, a piecewise scale performs a binary search for the range interpolator corresponding to the given domain value.
+     * Thus, the domain must be in ascending or descending order. If the domain and range have different lengths N and M, only the first min(N,M) elements in each are observed.
+     *
+     * @param domain Array of temporal domain values. Numeric values will be coerced to dates.
+     */
+    domain(domain: Iterable<Date | NumberValue>): this;
+
+    /**
+     * Returns a copy of the scale’s current range.
+     */
+    range(): Range[];
+    /**
+     * Sets the scale’s range to the specified array of values.
+     *
+     * The array must contain two or more elements. Unlike the domain, elements in the given array need not be temporal domain values;
+     * any value that is supported by the underlying interpolator will work, though note that numeric ranges are required for invert.
+     *
+     * @param range Array of range values.
+     */
+    range(range: Iterable<Range>): this;
+
+    /**
+     * Sets the scale’s range to the specified array of values while also setting the scale’s interpolator to interpolateRound.
+     *
+     * The rounding interpolator is sometimes useful for avoiding antialiasing artifacts,
+     * though also consider the shape-rendering “crispEdges” styles. Note that this interpolator can only be used with numeric ranges.
+     *
+     * The array must contain two or more elements. Unlike the domain, elements in the given array need not be temporal domain values;
+     * any value that is supported by the underlying interpolator will work, though note that numeric ranges are required for invert.
+     *
+     * @param range Array of range values.
+     */
+    rangeRound(range: Iterable<NumberValue>): this;
+
+    /**
+     * Returns whether or not the scale currently clamps values to within the range.
+     */
+    clamp(): boolean;
+    /**
+     * Enables or disables clamping, respectively. If clamping is disabled and the scale is passed a value outside the domain,
+     * the scale may return a value outside the range through extrapolation.
+     *
+     * If clamping is enabled, the return value of the scale is always within the scale’s range. Clamping similarly applies to the "invert" method.
+     *
+     * @param clamp A flag to enable (true) or disable (false) clamping.
+     */
+    clamp(clamp: boolean): this;
+
+    /**
+     * Returns the scale’s current interpolator factory, which defaults to interpolate.
+     */
+    interpolate(): InterpolatorFactory<any, any>;
+
+    /**
+     * Sets the scale’s range interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range;
+     * these interpolators then map a normalized domain parameter t in [0, 1] to the corresponding value in the range.
+     *
+     * Note: the default interpolator may reuse return values. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place.
+     * If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance);
+     * however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.
+     *
+     * As part of the interpolation process the interpolated value from the range may be converted to a corresponding output value.
+     *
+     * @param interpolate An interpolation factory. The generics for Range and Output of the scale must correspond to the interpolation factory applied to the scale.
+     */
+    interpolate(interpolate: InterpolatorFactory<Range, Output>): this;
+    /**
+     * Sets the scale’s range interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range;
+     * these interpolators then map a normalized domain parameter t in [0, 1] to the corresponding value in the range.
+     *
+     * Note: the default interpolator may reuse return values. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place.
+     * If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance);
+     * however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.
+     *
+     * As part of the interpolation process the interpolated value from the range may be converted to a corresponding output value.
+     *
+     * The generic "NewOutput" can be used to change the scale to have a different output element type corresponding to the new interpolation factory.
+     *
+     * @param interpolate An interpolation factory. The generics for Range and Output of the scale must correspond to the interpolation factory applied to the scale.
+     */
+    interpolate<NewOutput>(interpolate: InterpolatorFactory<Range, NewOutput>): ScaleTime<Range, NewOutput, Unknown>;
+
+    /**
+     * Returns representative dates from the scale’s domain. The returned tick values are uniformly-spaced (mostly),
+     * have sensible values (such as every day at midnight), and are guaranteed to be within the extent of the domain.
+     * Ticks are often used to display reference lines, or tick marks, in conjunction with the visualized data.
+     *
+     * An optional count may be specified to affect how many ticks are generated. If count is not specified, it defaults to 10.
+     * The specified count is only a hint; the scale may return more or fewer values depending on the domain.
+     *
+     * @param count Expected number of ticks.
+     */
+    ticks(count?: number): Date[];
+    /**
+     * Returns representative dates from the scale’s domain. The returned tick values are uniformly-spaced (mostly),
+     * have sensible values (such as every day at midnight), and are guaranteed to be within the extent of the domain.
+     * Ticks are often used to display reference lines, or tick marks, in conjunction with the visualized data.
+     *
+     * The specified time interval controls the ticks generated and returned. To prune the generated ticks for a given time interval,
+     * use interval.every(...) or interval.filter(...).
+     *
+     * @param interval A time interval to specify the expected ticks.
+     */
+    ticks(interval: TimeInterval): Date[];
+
+    /**
+     * Returns a time format function suitable for displaying tick values.
+     *
+     * The default multi-scale time format chooses a human-readable representation based on the specified date as follows:
+     *
+     *  - %Y - for year boundaries, such as 2011.
+     *  - %B - for month boundaries, such as February.
+     *  - %b %d - for week boundaries, such as Feb 06.
+     *  - %a %d - for day boundaries, such as Mon 07.
+     *  - %I %p - for hour boundaries, such as 01 AM.
+     *  - %I:%M - for minute boundaries, such as 01:23.
+     *  - :%S - for second boundaries, such as :45.
+     *  - .%L - milliseconds for all other times, such as .012.
+     *
+     * Although somewhat unusual, this default behavior has the benefit of providing both local and global context:
+     * for example, formatting a sequence of ticks as [11 PM, Mon 07, 01 AM] reveals information about hours, dates, and day simultaneously,
+     * rather than just the hours [11 PM, 12 AM, 01 AM].
+     *
+     * The specified count is currently ignored, but is accepted for consistency with other scales such as continuous.tickFormat.
+     *
+     * @param count Expected number of ticks. (Currently ignored)
+     * @param specifier An optional valid date format specifier string (see d3-time-format).
+     */
+    tickFormat(count?: number, specifier?: string): (d: Date) => string;
+    /**
+     * Returns a time format function suitable for displaying tick values.
+     *
+     * The specified time interval is currently ignored, but is accepted for consistency with other scales such as continuous.tickFormat.
+     *
+     * @param interval A time interval to specify the expected ticks. (Currently ignored)
+     * @param specifier An optional valid date format specifier string (see d3-time-format).
+     */
+    tickFormat(interval: TimeInterval, specifier?: string): (d: Date) => string;
+
+    /**
+     * Extends the domain so that it starts and ends on nice round values.
+     * This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value.
+     *
+     * An optional count argument allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.
+     *
+     * Nicing is useful if the domain is computed from data, say using extent, and may be irregular.
+     * For example, for a domain of [2009-07-13T00:02, 2009-07-13T23:48], the nice domain is [2009-07-13, 2009-07-14].
+     * If the domain has more than two values, nicing the domain only affects the first and last value.
+     *
+     * @param count Expected number of ticks.
+     */
+    nice(count?: number): this;
+    /**
+     * Extends the domain so that it starts and ends on nice round values.
+     * This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value.
+     *
+     * A time interval may be specified to explicitly set the ticks.
+     * If an interval is specified, an optional step may also be specified to skip some ticks.
+     * For example, time.nice(d3.timeSecond.every(10)) will extend the domain to an even ten seconds (0, 10, 20, etc.).
+     * See time.ticks and interval.every for further detail.
+     *
+     * Nicing is useful if the domain is computed from data, say using extent, and may be irregular.
+     * For example, for a domain of [2009-07-13T00:02, 2009-07-13T23:48], the nice domain is [2009-07-13, 2009-07-14].
+     * If the domain has more than two values, nicing the domain only affects the first and last value.
+     *
+     * @param interval A time interval to specify the expected ticks.
+     */
+    nice(interval: CountableTimeInterval): this;
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleTime<Range, Output, NewUnknown>;
+}
+
+/**
+ * Constructs a new time scale with the specified range, the default interpolator and clamping disabled.
+ * The domain defaults to [2000-01-01, 2000-01-02].
+ * If range is not specified, it defaults to [0, 1].
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleTime<Range = number, Output = Range, Unknown = never>(
+    range?: Iterable<Range>,
+): ScaleTime<Range, Output, Unknown>;
+/**
+ * Constructs a new time scale with the specified domain and range, the default interpolator and clamping disabled.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param domain Array of temporal domain values. Numeric values will be coerced to dates.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleTime<Range, Output = Range, Unknown = never>(
+    domain: Iterable<Date | NumberValue>,
+    range: Iterable<Range>,
+): ScaleTime<Range, Output, Unknown>;
+
+/**
+ * Constructs a new time scale using Coordinated Universal Time (UTC) with the specified range, the default interpolator and clamping disabled.
+ * The domain defaults to [2000-01-01, 2000-01-02].
+ * If range is not specified, it defaults to [0, 1].
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleUtc<Range = number, Output = Range, Unknown = never>(
+    range?: Iterable<Range>,
+): ScaleTime<Range, Output, Unknown>;
+/**
+ * Constructs a new time scale using Coordinated Universal Time (UTC) with the specified domain and range, the default interpolator and clamping disabled.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the output elements generated by the scale.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and
+ * convert the interpolated range element to a corresponding output element.
+ *
+ * The range must be set in accordance with the range element type.
+ *
+ * The interpolator factory may be set using the interpolate(...) method of the scale.
+ *
+ * @param domain Array of temporal domain values. Numeric values will be coerced to dates.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleUtc<Range, Output = Range, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    range: Iterable<Range>,
+): ScaleTime<Range, Output, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Sequential Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * Sequential scales are similar to continuous scales in that they map a continuous, numeric input domain to a continuous output range.
+ * However, unlike continuous scales, the input domain and output range of a sequential scale always has exactly two elements,
+ * and the output range is typically specified as an interpolator rather than an array of values.
+ * These scales do not expose invert and interpolate methods.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ *
+ * The second generic corresponds to the data type of the unknown value.
+ */
+export interface ScaleSequentialBase<Output, Unknown = never> {
+    /**
+     * Given a value from the domain, returns the corresponding value from the output range, subject to interpolation.
+     *
+     * If the given value is outside the domain, and clamping is not enabled, the mapping may be extrapolated such that the returned value is outside the range.
+     *
+     * @param value A numeric value from the domain.
+     */
+    (value: NumberValue): Output | Unknown;
+
+    /**
+     * Returns a copy of the scale’s current domain.
+     */
+    domain(): [number, number];
+    /**
+     * Sets the scale’s domain to the specified array of numbers. The array must contain exactly two elements.
+     * If the elements in the given array are not numbers, they will be coerced to numbers
+     *
+     * @param domain A two-element array of numeric domain values.
+     */
+    domain(domain: Iterable<NumberValue>): this;
+
+    /**
+     * Returns whether or not the scale currently clamps values to within the range.
+     */
+    clamp(): boolean;
+    /**
+     * Enables or disables clamping, respectively. If clamping is disabled and the scale is passed a value outside the domain,
+     * the scale may return a value outside the range through extrapolation.
+     *
+     * If clamping is enabled, the return value of the scale is always within the scale’s range. Clamping similarly applies to the "invert" method.
+     *
+     * @param clamp A flag to enable (true) or disable (false) clamping.
+     */
+    clamp(clamp: boolean): this;
+
+    /**
+     * See continuous.range.
+     */
+    range(): [Output, Output];
+    /**
+     * See continuous.range.
+     * The given two-element array is converted to an interpolator function using d3.interpolate.
+     *
+     * @param range Range values.
+     */
+    range(range: Iterable<Output>): this;
+
+    /**
+     * See continuous.rangeRound.
+     * If range is specified, implicitly uses d3.interpolateRound as the interpolator.
+     *
+     * @param range Range values.
+     */
+    rangeRound(range: Iterable<NumberValue>): this;
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+}
+
+export interface ScaleSequential<Output, Unknown = never> extends ScaleSequentialBase<Output, Unknown> {
+    /**
+     * Returns the current interpolator underlying the scale.
+     */
+    interpolator(): (t: number) => Output;
+    /**
+     * Sets the scale’s interpolator to the specified function.
+     *
+     * @param interpolator An interpolator function mapping a value from the [0, 1] interval to an output value.
+     */
+    interpolator(interpolator: (t: number) => Output): this;
+    /**
+     * Sets the scale’s interpolator to the specified function.
+     *
+     * The generic corresponds to a the new output type of the scale. The output type of the scale is determined by the output type of the interpolator function.
+     *
+     * @param interpolator An interpolator function mapping a value from the [0, 1] interval to an output value.
+     */
+    interpolator<NewOutput>(interpolator: (t: number) => NewOutput): ScaleSequential<NewOutput, Unknown>;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleSequential<Output, NewUnknown>;
+}
+
+/**
+ * Constructs a new sequential scale with the specified interpolator function or array.
+ * The domain defaults to [0, 1].
+ * If interpolator is not specified, it defaults to the identity function.
+ * When the scale is applied, the interpolator will be invoked with a value typically in the range [0, 1], where 0 represents the minimum value and 1 represents the maximum value.
+ *
+ * If interpolator is an array, it represents the scale’s two-element output range and is converted to an interpolator function using d3.interpolate.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The interpolator function or array to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequential<Output = number, Unknown = never>(
+    interpolator?: ((t: number) => Output) | Iterable<Output>,
+): ScaleSequential<Output, Unknown>;
+/**
+ * Constructs a new sequential scale with the specified domain and interpolator function or array.
+ * When the scale is applied, the interpolator will be invoked with a value typically in the range [0, 1], where 0 represents the minimum value and 1 represents the maximum value.
+ *
+ * If interpolator is an array, it represents the scale’s two-element output range and is converted to an interpolator function using d3.interpolate.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain A two-element array of numeric domain values.
+ * @param interpolator The interpolator function or array to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequential<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: ((t: number) => Output) | Iterable<Output>,
+): ScaleSequential<Output, Unknown>;
+
+/**
+ * A sequential scale with a logarithmic transform, analogous to a log scale.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialLog<Output = number, Unknown = never>(
+    interpolator?: (t: number) => Output,
+): ScaleSequential<Output, Unknown>;
+/**
+ * A sequential scale with a logarithmic transform, analogous to a log scale.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain A two-element array of numeric domain values.
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialLog<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: (t: number) => Output,
+): ScaleSequential<Output, Unknown>;
+
+/**
+ * A sequential scale with a exponential transform, analogous to a power scale.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialPow<Output = number, Unknown = never>(
+    interpolator?: (t: number) => Output,
+): ScaleSequential<Output, Unknown>;
+/**
+ * A sequential scale with a exponential transform, analogous to a power scale.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain A two-element array of numeric domain values.
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialPow<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: (t: number) => Output,
+): ScaleSequential<Output, Unknown>;
+
+/**
+ * A sequential scale with a square-root transform, analogous to a d3.scaleSqrt.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second third generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialSqrt<Output = number, Unknown = never>(
+    interpolator?: (t: number) => Output,
+): ScaleSequential<Output, Unknown>;
+/**
+ * A sequential scale with a square-root transform, analogous to a d3.scaleSqrt.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain A two-element array of numeric domain values.
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialSqrt<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: (t: number) => Output,
+): ScaleSequential<Output, Unknown>;
+
+/**
+ * A sequential scale with a symmetric logarithmic transform, analogous to a symlog scale.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialSymlog<Output = number, Unknown = never>(
+    interpolator?: (t: number) => Output,
+): ScaleSequential<Output, Unknown>;
+/**
+ * A sequential scale with a symmetric logarithmic transform, analogous to a symlog scale.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain A two-element array of numeric domain values.
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialSymlog<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: (t: number) => Output,
+): ScaleSequential<Output, Unknown>;
+
+export interface ScaleSequentialQuantile<Output, Unknown = never> extends ScaleSequentialBase<Output, Unknown> {
+    /**
+     * Returns an array of n + 1 quantiles.
+     * For example, if n = 4, returns an array of five numbers: the minimum value, the first quartile, the median, the third quartile, and the maximum.
+     */
+    quantiles(): number[];
+
+    /**
+     * Returns the current interpolator underlying the scale.
+     */
+    interpolator(): (t: number) => Output;
+    /**
+     * Sets the scale’s interpolator to the specified function.
+     *
+     * @param interpolator An interpolator function mapping a value from the [0, 1] interval to an output value.
+     */
+    interpolator(interpolator: (t: number) => Output): this;
+    /**
+     * Sets the scale’s interpolator to the specified function.
+     *
+     * The generic corresponds to a the new output type of the scale. The output type of the scale is determined by the output type of the interpolator function.
+     *
+     * @param interpolator An interpolator function mapping a value from the [0, 1] interval to an output value.
+     */
+    interpolator<NewOutput>(interpolator: (t: number) => NewOutput): ScaleSequentialQuantile<NewOutput, Unknown>;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleSequentialQuantile<Output, NewUnknown>;
+}
+
+/**
+ * A sequential scale using a p-quantile transform, analogous to a quantile scale.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialQuantile<Output = number, Unknown = never>(
+    interpolator?: (t: number) => Output,
+): ScaleSequentialQuantile<Output, Unknown>;
+/**
+ * A sequential scale using a p-quantile transform, analogous to a quantile scale.
+ *
+ * The first generic corresponds to the data type of the output of the interpolator underlying the scale.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain A two-element array of numeric domain values.
+ * @param interpolator The interpolator function to be used with the scale.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleSequentialQuantile<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: (t: number) => Output,
+): ScaleSequentialQuantile<Output, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Diverging Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * Diverging scales, like sequential scales, are similar to continuous scales in that they map a continuous, numeric input domain to a continuous output range.
+ * However, unlike continuous scales, the input domain and output range of a diverging scale always has exactly three elements,
+ * and the output range is typically specified as an interpolator rather than an array of values.
+ * These scales do not expose invert and interpolate methods.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ *
+ * The second generic corresponds to the data type of the unknown value.
+ */
+export interface ScaleDiverging<Output, Unknown = never> {
+    /**
+     * Given a value from the domain, returns the corresponding value subject to interpolation.
+     *
+     * If the given value is outside the domain, and clamping is not enabled, the mapping may be extrapolated such that the returned value is outside the range.
+     *
+     * @param value A numeric value from the domain.
+     */
+    (value: NumberValue): Output | Unknown;
+
+    /**
+     * Returns a copy of the scale’s current domain.
+     */
+    domain(): [number, number, number];
+    /**
+     * Sets the scale’s domain to the specified array of numbers.
+     * The domain must be numeric and must contain exactly three values. The default domain is [0, 0.5, 1].
+     * If the elements in the given array are not numbers, they will be coerced to numbers
+     *
+     * @param domain Array of three numeric domain values.
+     */
+    domain(domain: Iterable<NumberValue>): this;
+
+    /**
+     * Returns whether or not the scale currently clamps values to within the range.
+     */
+    clamp(): boolean;
+    /**
+     * Enables or disables clamping, respectively. If clamping is disabled and the scale is passed a value outside the domain,
+     * the scale may return a value outside the range through extrapolation.
+     *
+     * If clamping is enabled, the return value of the scale is always within the interpolator scale’s range.
+     *
+     * @param clamp A flag to enable (true) or disable (false) clamping.
+     */
+    clamp(clamp: boolean): this;
+
+    /**
+     * Returns the scale’s current interpolator.
+     */
+    interpolator(): (t: number) => Output;
+    /**
+     * Sets the scale’s interpolator to the specified function.
+     *
+     * @param interpolator The scale’s interpolator.
+     */
+    interpolator(interpolator?: (t: number) => Output): this;
+
+    /**
+     * See continuous.range.
+     */
+    range(): [Output, Output, Output];
+    /**
+     * See continuous.range.
+     * The given two-element array is converted to an interpolator function using d3.interpolate and d3.piecewise.
+     *
+     * @param range Range values.
+     */
+    range(range: Iterable<Output>): this;
+
+    /**
+     * See continuous.rangeRound.
+     * If range is specified, implicitly uses d3.interpolateRound as the interpolator.
+     *
+     * @param range Range values.
+     */
+    rangeRound(range: Iterable<NumberValue>): this;
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleDiverging<Output, NewUnknown>;
+}
+
+/**
+ * Constructs a new diverging scale with the specified interpolator function or array.
+ * The domain defaults to [0, 0.5, 1].
+ * If interpolator is not specified, it defaults to the identity function.
+ * When the scale is applied, the interpolator will be invoked with a value typically in the range [0, 1],
+ * where 0 represents the extreme negative value, 0.5 represents the neutral value, and 1 represents the extreme positive value.
+ *
+ * If interpolator is an array, it represents the scale’s three-element output range and is converted to an interpolator function using d3.interpolate and d3.piecewise.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The scale’s interpolator function or array.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDiverging<Output = number, Unknown = never>(
+    interpolator?: ((t: number) => Output) | Iterable<Output>,
+): ScaleDiverging<Output, Unknown>;
+/**
+ * Constructs a new diverging scale with the specified domain and interpolator function or array.
+ * When the scale is applied, the interpolator will be invoked with a value typically in the range [0, 1],
+ * where 0 represents the extreme negative value, 0.5 represents the neutral value, and 1 represents the extreme positive value.
+ *
+ * If interpolator is an array, it represents the scale’s three-element output range and is converted to an interpolator function using d3.interpolate and d3.piecewise.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain Array of three numeric domain values.
+ * @param interpolator The scale’s interpolator function or array.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDiverging<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: ((t: number) => Output) | Iterable<Output>,
+): ScaleDiverging<Output, Unknown>;
+
+/**
+ * A diverging scale with a logarithmic transform, analogous to a log scale.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The scale’s interpolator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDivergingLog<Output = number, Unknown = never>(
+    interpolator?: (t: number) => Output,
+): ScaleDiverging<Output, Unknown>;
+/**
+ * A diverging scale with a logarithmic transform, analogous to a log scale.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain Array of three numeric domain values.
+ * @param interpolator The scale’s interpolator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDivergingLog<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: (t: number) => Output,
+): ScaleDiverging<Output, Unknown>;
+
+/**
+ * A diverging scale with a exponential transform, analogous to a power scale.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The scale’s interpolator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDivergingPow<Output = number, Unknown = never>(
+    interpolator?: (t: number) => Output,
+): ScaleDiverging<Output, Unknown>;
+/**
+ * A diverging scale with a exponential transform, analogous to a power scale.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain Array of three numeric domain values.
+ * @param interpolator The scale’s interpolator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDivergingPow<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: (t: number) => Output,
+): ScaleDiverging<Output, Unknown>;
+
+/**
+ * A diverging scale with a square-root transform, analogous to a d3.scaleSqrt.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The scale’s interpolator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDivergingSqrt<Output = number, Unknown = never>(
+    interpolator?: (t: number) => Output,
+): ScaleDiverging<Output, Unknown>;
+/**
+ * A diverging scale with a square-root transform, analogous to a d3.scaleSqrt.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain Array of three numeric domain values.
+ * @param interpolator The scale’s interpolator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDivergingSqrt<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: (t: number) => Output,
+): ScaleDiverging<Output, Unknown>;
+
+/**
+ * A diverging scale with a symmetric logarithmic transform, analogous to a symlog scale.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param interpolator The scale’s interpolator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDivergingSymlog<Output = number, Unknown = never>(
+    interpolator?: (t: number) => Output,
+): ScaleDiverging<Output, Unknown>;
+/**
+ * A diverging scale with a symmetric logarithmic transform, analogous to a symlog scale.
+ *
+ * The first generic corresponds to the data type of the interpolator return type.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain Array of three numeric domain values.
+ * @param interpolator The scale’s interpolator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleDivergingSymlog<Output, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    interpolator: (t: number) => Output,
+): ScaleDiverging<Output, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Quantize Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * Quantize scales are similar to linear scales, except they use a discrete rather than continuous range.
+ * The continuous input domain is divided into uniform segments based on the number of values in (i.e., the cardinality of) the output range.
+ *
+ * Each range value y can be expressed as a quantized linear function of the domain value x: y = m round(x) + b.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ *
+ * The second generic corresponds to the data type of the unknown value.
+ */
+export interface ScaleQuantize<Range, Unknown = never> {
+    /**
+     * Given a value in the input domain, returns the corresponding value in the output range.
+     */
+    (value: NumberValue): Range | Unknown;
+    /**
+     * Returns the extent of values in the domain [x0, x1] for the corresponding value in the range: the inverse of quantize.
+     * This method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.
+     *
+     * If an invalid range value is entered, returns [NaN, NaN].
+     *
+     * @param value A value from the range.
+     */
+    invertExtent(value: Range): [number, number];
+
+    /**
+     * Returns the scale’s current domain.
+     */
+    domain(): [number, number];
+
+    /**
+     * Sets the scale’s domain to the specified two-element array of numbers.
+     * If the elements in the given array are not numbers, they will be coerced to numbers.
+     *
+     * @param domain A two-element array of numeric values defining the domain.
+     */
+    domain(domain: Iterable<NumberValue>): this;
+
+    /**
+     * Returns the scale’s current range.
+     */
+    range(): Range[];
+    /**
+     * Sets the scale’s range to the specified array of values. The array may contain any number of discrete values.
+     *
+     * @param range Array of range values.
+     */
+    range(range: Iterable<Range>): this;
+
+    /**
+     * Returns approximately count representative values from the scale’s domain.
+     *
+     * If count is not specified, it defaults to 10.
+     *
+     * The returned tick values are uniformly spaced, have human-readable values (such as multiples of powers of 10),
+     * and are guaranteed to be within the extent of the domain. Ticks are often used to display reference lines, or tick marks, in conjunction with the visualized data.
+     * The specified count is only a hint; the scale may return more or fewer values depending on the domain. See also d3-array’s ticks.
+     *
+     * @param count Optional approximate number of ticks to be returned. If count is not specified, it defaults to 10.
+     */
+    ticks(count?: number): number[];
+
+    /**
+     * Returns a number format function suitable for displaying a tick value, automatically computing the appropriate precision based on the fixed interval between tick values.
+     * The specified count should have the same value as the count that is used to generate the tick values.
+     *
+     * @param count Approximate number of ticks to be used when calculating precision for the number format function.
+     * @param specifier An optional valid format specifier string which allows a custom format where the precision of the format is automatically set by the scale as appropriate for the tick interval.
+     * If specifier uses the format type "s", the scale will return a SI-prefix format based on the largest value in the domain.
+     * If the specifier already specifies a precision, this method is equivalent to locale.format.
+     */
+    tickFormat(count?: number, specifier?: string): (d: NumberValue) => string;
+
+    /**
+     * Extends the domain so that it starts and ends on nice round values.
+     * This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value.
+     *
+     * Nicing is useful if the domain is computed from data, say using extent, and may be irregular.
+     * For example, for a domain of [0.201479…, 0.996679…], a nice domain might be [0.2, 1.0].
+     *
+     * Nicing a scale only modifies the current domain; it does not automatically nice domains that are subsequently set using continuous.domain.
+     * You must re-nice the scale after setting the new domain, if desired.
+     *
+     * @param count An optional number of ticks expected to be used.
+     */
+    nice(count?: number): this;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleQuantize<Range, NewUnknown>;
+
+    /**
+     * Returns the array of computed thresholds within the domain.
+     */
+    thresholds(): number[];
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+}
+
+/**
+ * Constructs a new quantize scale with the specified range.
+ * The domain defaults to [0, 1].
+ * If range is not specified, it defaults to [0, 1].
+ * Thus, the default quantize scale is equivalent to the Math.round function.
+ *
+ * The range must be set corresponding to the type of the range elements.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleQuantize<Range = number, Unknown = never>(range?: Iterable<Range>): ScaleQuantize<Range, Unknown>;
+/**
+ * Constructs a new quantize scale with the specified domain and range.
+ * Thus, the default quantize scale is equivalent to the Math.round function.
+ *
+ * The range must be set corresponding to the type of the range elements.
+ *
+ * The first generic corresponds to the data type of the range elements.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain A two-element array of numeric values defining the domain.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleQuantize<Range, Unknown = never>(
+    domain: Iterable<NumberValue>,
+    range: Iterable<Range>,
+): ScaleQuantize<Range, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Quantile Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * Quantile scales map a sampled input domain to a discrete range.
+ * The domain is considered continuous and thus the scale will accept any reasonable input value;
+ * however, the domain is specified as a discrete set of sample values.
+ * The number of values in (the cardinality of) the output range determines the number of quantiles that will be computed from the domain.
+ * To compute the quantiles, the domain is sorted, and treated as a population of discrete values; see d3-array’s quantile.
+ *
+ * The first generic corresponds to the data type of range elements.
+ *
+ * The second generic corresponds to the data type of the unknown value.
+ */
+export interface ScaleQuantile<Range, Unknown = never> {
+    /**
+     * Given a value in the input domain, returns the corresponding value in the output range.
+     *
+     * @param value A numeric value in the input domain.
+     */
+    (value: NumberValue): Range | Unknown;
+
+    /**
+     * Returns the extent of values in the domain [x0, x1] for the corresponding value in the range: the inverse of quantile.
+     * This method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.
+     *
+     * @param value A value from the range.
+     */
+    invertExtent(value: Range): [number, number];
+
+    /**
+     * Returns the scale’s current domain.
+     */
+    domain(): number[];
+    /**
+     * Sets the domain of the quantile scale to the specified set of discrete numeric values.
+     * The array must not be empty, and must contain at least one numeric value; NaN, null and undefined values are ignored and not considered part of the sample population.
+     *
+     * If the elements in the given array are not numbers, they will be coerced to numbers. A copy of the input array is sorted and stored internally.
+     *
+     * @param domain Array of domain values.
+     */
+    domain(domain: Iterable<NumberValue | null | undefined>): this;
+
+    /**
+     * Returns the current range.
+     */
+    range(): Range[];
+    /**
+     * Sets the discrete values in the range. The array must not be empty.
+     * The number of values in (the cardinality, or length, of) the range array determines the number of quantiles that are computed.
+     *
+     * For example, to compute quartiles, range must be an array of four elements such as [0, 1, 2, 3].
+     *
+     * @param range Array of range values.
+     */
+    range(range: Iterable<Range>): this;
+
+    /**
+     * Returns the quantile thresholds. If the range contains n discrete values, the returned array will contain n - 1 thresholds.
+     * Values less than the first threshold are considered in the first quantile;
+     * values greater than or equal to the first threshold but less than the second threshold are in the second quantile, and so on.
+     * Internally, the thresholds array is used with bisect to find the output quantile associated with the given input value.
+     */
+    quantiles(): number[];
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleQuantile<Range, NewUnknown>;
+}
+
+/**
+ * Constructs a new quantile scale with the specified range.
+ * The domain defaults to the empty array.
+ * If range is not specified, it defaults to the empty array.
+ * The quantile scale is invalid until both a domain and range are specified.
+ *
+ * The first generic corresponds to the data type of range elements.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleQuantile<Range = number, Unknown = never>(range?: Iterable<Range>): ScaleQuantile<Range, Unknown>;
+/**
+ * Constructs a new quantile scale with the specified domain and range.
+ * The quantile scale is invalid until both a domain and range are specified.
+ *
+ * The first generic corresponds to the data type of range elements.
+ * The second generic corresponds to the data type of the unknown value.
+ *
+ * @param domain Array of domain values.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleQuantile<Range, Unknown = never>(
+    domain: Iterable<NumberValue | null | undefined>,
+    range: Iterable<Range>,
+): ScaleQuantile<Range, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Threshold Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * Threshold scales are similar to quantize scales, except they allow you to map arbitrary subsets of the domain to discrete values in the range.
+ * The input domain is still continuous, and divided into slices based on a set of threshold values.
+ *
+ * If the number of values in the scale’s range is N+1, the number of values in the scale’s domain must be N.
+ * If there are fewer than N elements in the domain, the additional values in the range are ignored.
+ * If there are more than N elements in the domain, the scale may return undefined for some inputs.
+ *
+ * The first generic corresponds to the data type of domain values.
+ * The second generic corresponds to the data type of range values.
+ * The third generic corresponds to the data type of the unknown value.
+ */
+export interface ScaleThreshold<Domain extends number | string | Date, Range, Unknown = never> {
+    /**
+     * Given a value in the input domain, returns the corresponding value in the output range.
+     *
+     * @param value A domain value.
+     */
+    (value: Domain): Range | Unknown;
+
+    /**
+     * Returns the extent of values in the domain [x0, x1] for the corresponding value in the range, representing the inverse mapping from range to domain.
+     * This method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.
+     *
+     * @param value A range value.
+     */
+    invertExtent(value: Range): [Domain | undefined, Domain | undefined];
+
+    /**
+     * Returns the scale’s current domain.
+     */
+    domain(): Domain[];
+    /**
+     * Sets the scale’s domain to the specified array of values. The values must be in sorted ascending order, or the behavior of the scale is undefined.
+     * The values are typically numbers, but any naturally ordered values (such as strings) will work; a threshold scale can be used to encode any type that is ordered.
+     * If the number of values in the scale’s range is N+1, the number of values in the scale’s domain must be N.
+     * If there are fewer than N elements in the domain, the additional values in the range are ignored.
+     * If there are more than N elements in the domain, the scale may return undefined for some inputs.
+     *
+     * @param domain Array of domain values.
+     */
+    domain(domain: Iterable<Domain>): this;
+
+    /**
+     * Returns the scale’s current range.
+     */
+    range(): Range[];
+    /**
+     * Sets the scale’s range to the specified array of values. If the number of values in the scale’s domain is N, the number of values in the scale’s range must be N+1.
+     * If there are fewer than N+1 elements in the range, the scale may return undefined for some inputs.
+     * If there are more than N+1 elements in the range, the additional values are ignored.
+     *
+     * @param range Array of range values.
+     */
+    range(range: Iterable<Range>): this;
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+
+    /**
+     * Returns the current unknown value, which defaults to undefined.
+     */
+    unknown(): UnknownReturnType<Unknown, undefined>;
+    /**
+     * Sets the output value of the scale for undefined (or NaN) input values and returns this scale.
+     *
+     * @param value The output value of the scale for undefined (or NaN) input values.
+     */
+    unknown<NewUnknown>(value: NewUnknown): ScaleThreshold<Domain, Range, NewUnknown>;
+}
+
+/**
+ * Constructs a new threshold scale with the specified range.
+ * The domain defaults to [0.5].
+ * If range is not specified, it defaults to [0, 1].
+ * Thus, the default threshold scale is equivalent to the Math.round function for numbers; for example threshold(0.49) returns 0, and threshold(0.51) returns 1.
+ *
+ * The first generic corresponds to the data type of domain values.
+ * The second generic corresponds to the data type of range values.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleThreshold<Domain extends number | string | Date = number, Range = number, Unknown = never>(
+    range?: Iterable<Range>,
+): ScaleThreshold<Domain, Range, Unknown>;
+/**
+ * Constructs a new threshold scale with the specified domain and range.
+ * Thus, the default threshold scale is equivalent to the Math.round function for numbers; for example threshold(0.49) returns 0, and threshold(0.51) returns 1.
+ *
+ * The first generic corresponds to the data type of domain values.
+ * The second generic corresponds to the data type of range values.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * @param domain Array of domain values.
+ * @param range Array of range values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleThreshold<Domain extends number | string | Date, Range, Unknown = never>(
+    domain: Iterable<Domain>,
+    range: Iterable<Range>,
+): ScaleThreshold<Domain, Range, Unknown>;
+
+// -------------------------------------------------------------------------------
+// Ordinal Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * Unlike continuous scales, ordinal scales have a discrete domain and range. For example, an ordinal scale might map a set of named categories to a set of colors,
+ * or determine the horizontal positions of columns in a column chart.
+ *
+ * The first element in the domain will be mapped to the first element in range, the second domain value to the second range value, and so on.
+ * If there are fewer elements in the range than in the domain, the scale will reuse values from the start of the range.
+ *
+ * The first generic corresponds to the data type of domain values.
+ * The second generic corresponds to the data type of range values.
+ * The third generic corresponds to the data type of the unknown value.
+ */
+export interface ScaleOrdinal<Domain extends { toString(): string }, Range, Unknown = never> {
+    /**
+     * Given a value in the input domain, returns the corresponding value in the output range.
+     * If the given value is not in the scale’s domain, returns the unknown; or, if the unknown value is implicit (the default),
+     * then the value is implicitly added to the domain and the next-available value in the range is assigned to value,
+     * such that this and subsequent invocations of the scale given the same input value return the same output value.
+     *
+     * @param x A value from the domain.
+     */
+    (x: Domain): Range | Unknown;
+
+    /**
+     * Returns the scale's current domain.
+     */
+    domain(): Domain[];
+    /**
+     * Sets the domain to the specified array of values.
+     *
+     * The first element in domain will be mapped to the first element in the range,
+     * the second domain value to the second range value, and so on.
+     *
+     * Domain values are stored internally in an InternMap from primitive value to index; the resulting index is then used to retrieve a value from the range.
+     * Thus, an ordinal scale’s values must be coercible to a primitive value, and the primitive domain value uniquely identifies the corresponding range value.
+     *
+     * Setting the domain on an ordinal scale is optional if the unknown value is implicit (the default).
+     * In this case, the domain will be inferred implicitly from usage by assigning each unique value passed to the scale a new value from the range.
+     * Note that an explicit domain is recommended to ensure deterministic behavior, as inferring the domain from usage will be dependent on ordering.
+     *
+     * @param domain Array of domain values.
+     */
+    domain(domain: Iterable<Domain>): this;
+
+    /**
+     * Returns the scale's current range.
+     */
+    range(): Range[];
+    /**
+     * Sets the range of the ordinal scale to the specified array of values.
+     *
+     * The first element in the domain will be mapped to the first element in range, the second domain value to the second range value, and so on.
+     *
+     * If there are fewer elements in the range than in the domain, the scale will reuse values from the start of the range.
+     *
+     * @param range Array of range values.
+     */
+    range(range: Iterable<Range>): this;
+
+    /**
+     * Returns the current unknown value, which defaults to "implicit".
+     */
+    unknown(): UnknownReturnType<Unknown, { name: "implicit" }>;
+    /**
+     * Sets the output value of the scale for unknown input values and returns this scale.
+     * The implicit value enables implicit domain construction. scaleImplicit can be used as a convenience to set the implicit value.
+     *
+     * @param value Unknown value to be used or scaleImplicit to set implicit scale generation.
+     */
+    unknown<NewUnknown>(
+        value: NewUnknown,
+    ): NewUnknown extends { name: "implicit" } ? ScaleOrdinal<Domain, Range>
+        : ScaleOrdinal<Domain, Range, NewUnknown>;
+
+    /**
+     * Returns an exact copy of this ordinal scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+}
+
+/**
+ * Constructs a new ordinal scale with the specified range.
+ * The domain defaults to the empty array.
+ * If range is not specified, it defaults to the empty array; an ordinal scale always returns undefined until a non-empty range is defined.
+ *
+ * The generic corresponds to the data type of range elements.
+ *
+ * @param range An optional array of range values to initialize the scale with.
+ */
+export function scaleOrdinal<Range>(range?: Iterable<Range>): ScaleOrdinal<string, Range>;
+/**
+ * Constructs a new ordinal scale with the specified range.
+ * The domain defaults to the empty array.
+ * If range is not specified, it defaults to the empty array; an ordinal scale always returns undefined until a non-empty range is defined.
+ *
+ * The first generic corresponds to the data type of domain elements.
+ * The second generic corresponds to the data type of range elements.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * @param range An optional array of range values to initialize the scale with.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleOrdinal<Domain extends { toString(): string }, Range, Unknown = never>(
+    range?: Iterable<Range>,
+): ScaleOrdinal<Domain, Range, Unknown>;
+/**
+ * Constructs a new ordinal scale with the specified domain and range.
+ *
+ * The first generic corresponds to the data type of domain elements.
+ * The second generic corresponds to the data type of range elements.
+ * The third generic corresponds to the data type of the unknown value.
+ *
+ * @param domain Array of domain values.
+ * @param range An optional array of range values to initialize the scale with.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleOrdinal<Domain extends { toString(): string }, Range, Unknown = never>(
+    domain: Iterable<Domain>,
+    range: Iterable<Range>,
+): ScaleOrdinal<Domain, Range, Unknown>;
+
+/**
+ * A special value for ordinal.unknown that enables implicit domain construction: unknown values are implicitly added to the domain.
+ */
+export const scaleImplicit: { name: "implicit" };
+
+// -------------------------------------------------------------------------------
+// Band Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * Band scales are like ordinal scales except the output range is continuous and numeric.
+ * Discrete output values are automatically computed by the scale by dividing the continuous range into uniform bands.
+ * Band scales are typically used for bar charts with an ordinal or categorical dimension.
+ * The unknown value of a band scale is effectively undefined: they do not allow implicit domain construction.
+ *
+ * The generic corresponds to the data type of domain elements.
+ */
+export interface ScaleBand<Domain extends { toString(): string }> {
+    /**
+     * Given a value in the input domain, returns the start of the corresponding band derived from the output range.
+     * If the given value is not in the scale’s domain, returns undefined.
+     *
+     * @param x  A value from the domain.
+     */
+    (x: Domain): number | undefined;
+
+    /**
+     * Returns to scale's current domain
+     */
+    domain(): Domain[];
+    /**
+     * Sets the domain to the specified array of values. The first element in domain will be mapped to the first band, the second domain value to the second band, and so on.
+     * Domain values are stored internally in an InternMap from primitive value to index; the resulting index is then used to determine the band.
+     * Thus, a band scale’s values must be coercible to a primitive value, and the primitive domain value uniquely identifies the corresponding band.
+     *
+     * @param domain Array of domain values.
+     */
+    domain(domain: Iterable<Domain>): this;
+
+    /**
+     * Returns the scale’s current range, which defaults to [0, 1].
+     */
+    range(): [number, number];
+    /**
+     * Sets the scale’s range to the specified two-element array of numbers. If the elements in the given array are not numbers, they will be coerced to numbers.
+     * The default range is [0, 1].
+     *
+     * @param range A two-element array of numeric values.
+     */
+    range(range: Iterable<NumberValue>): this;
+
+    /**
+     * Sets the scale’s range to the specified two-element array of numbers while also enabling rounding.
+     * If the elements in the given array are not numbers, they will be coerced to numbers.
+     *
+     * Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the shape-rendering “crispEdges” styles.
+     *
+     * @param range A two-element array of numeric values.
+     */
+    rangeRound(range: Iterable<NumberValue>): this;
+
+    /**
+     * Returns the current rounding status for the scale: enabled (= true) or disabled (= false).
+     */
+    round(): boolean;
+    /**
+     * Enables or disables rounding accordingly. If rounding is enabled, the start and stop of each band will be integers.
+     * Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the shape-rendering “crispEdges” styles.
+     * Note that if the width of the domain is not a multiple of the cardinality of the range, there may be leftover unused space, even without padding!
+     * Use band.align to specify how the leftover space is distributed.
+     *
+     * @param round Enable rounding (= true), disable rounding (= false).
+     */
+    round(round: boolean): this;
+
+    /**
+     * Returns the current inner padding which defaults to 0.
+     */
+    paddingInner(): number;
+    /**
+     * Sets the inner padding to the specified value which must be in the range [0, 1].
+     * The inner padding determines the ratio of the range that is reserved for blank space between bands.
+     *
+     * The default setting is 0.
+     *
+     * @param padding Value for inner padding in [0, 1] interval.
+     */
+    paddingInner(padding: number): this;
+
+    /**
+     * Returns the current outer padding which defaults to 0.
+     */
+    paddingOuter(): number;
+    /**
+     * Sets the outer padding to the specified value which must be in the range [0, 1].
+     * The outer padding determines the ratio of the range that is reserved for blank space before the first band and after the last band.
+     *
+     * The default setting is 0.
+     *
+     * @param padding Value for outer padding in [0, 1] interval.
+     */
+    paddingOuter(padding: number): this;
+
+    /**
+     * Returns the inner padding.
+     */
+    padding(): number;
+    /**
+     * A convenience method for setting the inner and outer padding to the same padding value.
+     *
+     * @param padding Value for inner and outer padding in [0, 1] interval.
+     */
+    padding(padding: number): this;
+
+    /**
+     * Returns the current alignment which defaults to 0.5.
+     */
+    align(): number;
+    /**
+     * Sets the alignment to the specified value which must be in the range [0, 1].
+     *
+     * The default is 0.5.
+     *
+     * The alignment determines how any leftover unused space in the range is distributed.
+     * A value of 0.5 indicates that the outer patter should be equally distributed before the first band and after the last band;
+     * i.e., the bands should be centered within the range. A value of 0 or 1 may be used to shift the bands to one side, say to position them adjacent to an axis.
+     *
+     * @param align Value for alignment setting in [0, 1] interval.
+     */
+    align(align: number): this;
+
+    /**
+     * Returns the width of each band.
+     */
+    bandwidth(): number;
+
+    /**
+     * Returns the distance between the starts of adjacent bands.
+     */
+    step(): number;
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+}
+
+/**
+ * Constructs a new band scale with the specified range, no padding, no rounding and center alignment.
+ * The domain defaults to the empty domain.
+ * If range is not specified, it defaults to the unit range [0, 1].
+ *
+ * The generic corresponds to the data type of domain elements.
+ *
+ * @param range A two-element array of numeric values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scaleBand<Domain extends { toString(): string } = string>(
+    range?: Iterable<NumberValue>,
+): ScaleBand<Domain>;
+/**
+ * Constructs a new band scale with the specified domain and range, no padding, no rounding and center alignment.
+ *
+ * The generic corresponds to the data type of domain elements.
+ *
+ * @param domain Array of domain values.
+ * @param range A two-element array of numeric values.
+ */
+export function scaleBand<Domain extends { toString(): string }>(
+    domain: Iterable<Domain>,
+    range: Iterable<NumberValue>,
+): ScaleBand<Domain>;
+
+// -------------------------------------------------------------------------------
+// Point Scale Factory
+// -------------------------------------------------------------------------------
+
+/**
+ * Point scales are a variant of band scales with the bandwidth fixed to zero.
+ * Point scales are typically used for scatterplots with an ordinal or categorical dimension.
+ * The unknown value of a point scale is always undefined: they do not allow implicit domain construction.
+ *
+ * The generic corresponds to the data type of domain elements.
+ */
+export interface ScalePoint<Domain extends { toString(): string }> {
+    /**
+     * Given a value in the input domain, returns the corresponding point derived from the output range.
+     * If the given value is not in the scale’s domain, returns undefined.
+     *
+     * @param x  A value from the domain.
+     */
+    (x: Domain): number | undefined;
+
+    /**
+     * Returns the scale's current domain.
+     */
+    domain(): Domain[];
+    /**
+     * Sets the domain to the specified array of values. The first element in domain will be mapped to the first point, the second domain value to the second point, and so on.
+     * Domain values are stored internally in an InternMap from primitive value to index; the resulting index is then used to determine the point.
+     * Thus, a point scale’s values must be coercible to a primitive value, and the primitive domain value uniquely identifies the corresponding point.
+     *
+     * @param domain Array of domain values.
+     */
+    domain(domain: Iterable<Domain>): this;
+
+    /**
+     * Returns the scale’s current range, which defaults to [0, 1].
+     */
+    range(): [number, number];
+    /**
+     * Sets the scale’s range to the specified two-element array of numbers.
+     * If the elements in the given array are not numbers, they will be coerced to numbers.
+     * The default range is [0, 1].
+     *
+     * @param range A two-element array of numeric values.
+     */
+    range(range: Iterable<NumberValue>): this;
+
+    /**
+     * Sets the scale’s range to the specified two-element array of numbers while also enabling rounding.
+     * If the elements in the given array are not numbers, they will be coerced to numbers.
+     *
+     * Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the shape-rendering “crispEdges” styles.
+     *
+     * @param range A two-element array of numeric values.
+     */
+    rangeRound(range: Iterable<NumberValue>): this;
+
+    /**
+     * Returns the current rounding status for the scale: enabled (= true) or disabled (= false).
+     */
+    round(): boolean;
+    /**
+     * Enables or disables rounding accordingly. If rounding is enabled, the position of each point will be integers.
+     * Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the shape-rendering “crispEdges” styles.
+     * Note that if the width of the domain is not a multiple of the cardinality of the range, there may be leftover unused space, even without padding!
+     * Use point.align to specify how the leftover space is distributed.
+     *
+     * @param round Enable rounding (= true), disable rounding (= false).
+     */
+    round(round: boolean): this;
+
+    /**
+     * Returns the current outer padding which defaults to 0.
+     * The outer padding determines the ratio of the range that is reserved for blank space
+     * before the first point and after the last point.
+     */
+    padding(): number;
+    /**
+     * Sets the outer padding to the specified value which must be in the range [0, 1].
+     * The outer padding determines the ratio of the range that is reserved for blank space
+     * before the first point and after the last point.
+     *
+     * The default is 0.
+     *
+     * @param padding Value for outer padding in [0, 1] interval.
+     */
+    padding(padding: number): this;
+
+    /**
+     * Returns the current alignment which defaults to 0.5.
+     */
+    align(): number;
+    /**
+     * Sets the alignment to the specified value which must be in the range [0, 1].
+     *
+     * The alignment determines how any leftover unused space in the range is distributed.
+     * A value of 0.5 indicates that the leftover space should be equally distributed before the first point and after the last point;
+     * i.e., the points should be centered within the range. A value of 0 or 1 may be used to shift the points to one side, say to position them adjacent to an axis.
+     *
+     * The default value is 0.5.
+     *
+     * @param align Value for alignment setting in [0, 1] interval.
+     */
+    align(align: number): this;
+
+    /**
+     * Return 0.
+     */
+    bandwidth(): number;
+
+    /**
+     * Returns the distance between the starts of adjacent points.
+     */
+    step(): number;
+
+    /**
+     * Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+     */
+    copy(): this;
+}
+
+/**
+ * Constructs a new point scale with the specified range, no padding, no rounding and center alignment.
+ * The domain defaults to the empty domain.
+ * If range is not specified, it defaults to the unit range [0, 1].
+ *
+ * The generic corresponds to the data type of domain elements.
+ *
+ * @param range A two-element array of numeric values.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function scalePoint<Domain extends { toString(): string } = string>(
+    range?: Iterable<NumberValue>,
+): ScalePoint<Domain>;
+/**
+ * Constructs a new point scale with the specified domain and range, no padding, no rounding and center alignment.
+ * The domain defaults to the empty domain.
+ *
+ * The generic corresponds to the data type of domain elements.
+ *
+ * @param domain Array of domain values.
+ * @param range A two-element array of numeric values.
+ */
+export function scalePoint<Domain extends { toString(): string }>(
+    domain: Iterable<Domain>,
+    range: Iterable<NumberValue>,
+): ScalePoint<Domain>;
Index: node_modules/@types/d3-scale/package.json
===================================================================
--- node_modules/@types/d3-scale/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-scale/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+{
+    "name": "@types/d3-scale",
+    "version": "4.0.9",
+    "description": "TypeScript definitions for d3-scale",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-scale",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "Tom Wanzek",
+            "githubUsername": "tomwanzek",
+            "url": "https://github.com/tomwanzek"
+        },
+        {
+            "name": "Alex Ford",
+            "githubUsername": "gustavderdrache",
+            "url": "https://github.com/gustavderdrache"
+        },
+        {
+            "name": "Boris Yankov",
+            "githubUsername": "borisyankov",
+            "url": "https://github.com/borisyankov"
+        },
+        {
+            "name": "denisname",
+            "githubUsername": "denisname",
+            "url": "https://github.com/denisname"
+        },
+        {
+            "name": "rulonder",
+            "githubUsername": "rulonder",
+            "url": "https://github.com/rulonder"
+        },
+        {
+            "name": "Nathan Bierema",
+            "githubUsername": "Methuselah96",
+            "url": "https://github.com/Methuselah96"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/d3-scale"
+    },
+    "scripts": {},
+    "dependencies": {
+        "@types/d3-time": "*"
+    },
+    "peerDependencies": {},
+    "typesPublisherContentHash": "c7eb4d63d0dfb659f0f8e359a4de33ed1f690bdea8051641bffa941f06a92f4d",
+    "typeScriptVersion": "5.0"
+}
Index: node_modules/@types/d3-shape/LICENSE
===================================================================
--- node_modules/@types/d3-shape/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-shape/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/d3-shape/README.md
===================================================================
--- node_modules/@types/d3-shape/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-shape/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/d3-shape`
+
+# Summary
+This package contains type definitions for d3-shape (https://github.com/d3/d3-shape/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-shape.
+
+### Additional Details
+ * Last updated: Mon, 06 Jan 2025 00:46:49 GMT
+ * Dependencies: [@types/d3-path](https://npmjs.com/package/@types/d3-path)
+
+# Credits
+These definitions were written by [Tom Wanzek](https://github.com/tomwanzek), [Alex Ford](https://github.com/gustavderdrache), [Boris Yankov](https://github.com/borisyankov), [denisname](https://github.com/denisname), [Nathan Bierema](https://github.com/Methuselah96), and [Fil](https://github.com/Fil).
Index: node_modules/@types/d3-shape/index.d.ts
===================================================================
--- node_modules/@types/d3-shape/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-shape/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2680 @@
+// Last module patch version validated against: 3.1.0
+
+import { Path } from "d3-path";
+
+declare global {
+    interface CanvasRenderingContext2D {} // eslint-disable-line @typescript-eslint/no-empty-interface
+}
+
+// -----------------------------------------------------------------------------------
+// Shared Types and Interfaces
+// -----------------------------------------------------------------------------------
+
+/**
+ * @deprecated
+ * This interface is used to bridge the gap between two incompatible versions of TypeScript (see [#25944](https://github.com/Microsoft/TypeScript/pull/25944)).
+ * Use `CanvasPathMethods` instead with TS <= 3.0 and `CanvasPath` with TS >= 3.1.
+ */
+export interface CanvasPath_D3Shape {
+    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
+    arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
+    bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
+    closePath(): void;
+    ellipse(
+        x: number,
+        y: number,
+        radiusX: number,
+        radiusY: number,
+        rotation: number,
+        startAngle: number,
+        endAngle: number,
+        anticlockwise?: boolean,
+    ): void;
+    lineTo(x: number, y: number): void;
+    moveTo(x: number, y: number): void;
+    quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
+    rect(x: number, y: number, w: number, h: number): void;
+}
+
+// -----------------------------------------------------------------------------------
+// Arc Generator
+// -----------------------------------------------------------------------------------
+
+/**
+ * Interface corresponding to the minimum data type assumed by the accessor functions of the Arc generator.
+ */
+export interface DefaultArcObject {
+    /**
+     * Inner radius of arc.
+     */
+    innerRadius: number;
+    /**
+     * Outer radius of arc.
+     */
+    outerRadius: number;
+    /**
+     * Start angle of arc. The angle is specified in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     */
+    startAngle: number;
+    /**
+     * End angle of arc. The angle is specified in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     */
+    endAngle: number;
+    /**
+     * Optional. Pad angle of arc in radians.
+     */
+    padAngle?: number | undefined;
+}
+
+/**
+ * The arc generator produces a circular or annular sector, as in a pie or donut chart.
+ *
+ * If the difference between the start and end angles (the angular span) is greater than τ, the arc generator will produce a complete circle or annulus.
+ * If it is less than τ, arcs may have rounded corners and angular padding. Arcs are always centered at ⟨0,0⟩; use a transform (see: SVG, Canvas) to move the arc to a different position.
+ *
+ * See also the pie generator, which computes the necessary angles to represent an array of data as a pie or donut chart; these angles can then be passed to an arc generator.
+ *
+ * The first generic corresponds to the type of the "this" context within which the arc generator and its accessor functions will be invoked.
+ *
+ * The second generic corresponds to the datum type for which the arc is to be generated.
+ */
+export interface Arc<This, Datum> {
+    /**
+     * Generates an arc for the given arguments.
+     *
+     * IMPORTANT: If the rendering context of the arc generator is null,
+     * then the arc is returned as a path data string.
+     *
+     * The "this" context within which this function is invoked, will be the context within which the accessor methods of the generator are invoked.
+     * All arguments passed into this function, will be passed to the accessor functions of the generator.
+     *
+     * @param d The datum for which the arc is to be generated.
+     */
+    (this: This, d: Datum, ...args: any[]): string | null;
+    /**
+     * Generates an arc for the given arguments.
+     *
+     * IMPORTANT: If the arc generator has been configured with a rendering context,
+     * then the arc is rendered to this context as a sequence of path method calls and this function returns void.
+     *
+     * The "this" context within which this function is invoked, will be the context within which the accessor methods of the generator are invoked.
+     * All arguments passed into this function, will be passed to the accessor functions of the generator.
+     *
+     * @param d The datum for which the arc is to be generated.
+     */
+    (this: This, d: Datum, ...args: any[]): void;
+
+    /**
+     * Computes the midpoint [x, y] of the center line of the arc that would be generated by the given arguments.
+     *
+     * To be consistent with the generated arc, the accessors must be deterministic, i.e., return the same value given the same arguments.
+     * The midpoint is defined as (startAngle + endAngle) / 2 and (innerRadius + outerRadius) / 2.
+     *
+     * Note that this is not the geometric center of the arc, which may be outside the arc;
+     * this method is merely a convenience for positioning labels.
+     *
+     * The method is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that are passed into the arc generator.
+     *
+     * @param d The datum for which the arc is to be generated.
+     */
+    centroid(d: Datum, ...args: any[]): [number, number];
+
+    /**
+     * Returns the current inner radius accessor, which defaults to a function returning the innerRadius property
+     * of the first argument passed into it.
+     */
+    innerRadius(): (this: This, d: Datum, ...args: any[]) => number;
+    /**
+     * Sets the inner radius to the specified number and returns this arc generator.
+     *
+     * Specifying the inner radius as a function is useful for constructing a stacked polar bar chart, often in conjunction with a sqrt scale.
+     * More commonly, a constant inner radius is used for a donut or pie chart. If the outer radius is smaller than the inner radius, the inner and outer radii are swapped.
+     * A negative value is treated as zero.
+     *
+     * @param radius Constant radius.
+     */
+    innerRadius(radius: number): this;
+    /**
+     * Sets the inner radius to the specified function and returns this arc generator.
+     *
+     * Specifying the inner radius as a function is useful for constructing a stacked polar bar chart, often in conjunction with a sqrt scale.
+     * More commonly, a constant inner radius is used for a donut or pie chart. If the outer radius is smaller than the inner radius, the inner and outer radii are swapped.
+     * A negative value is treated as zero.
+     *
+     * @param radius An accessor function returning a number to be used as a radius. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the arc generator.
+     */
+    innerRadius(radius: (this: This, d: Datum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current outer radius accessor, which defaults to a function returning the outerRadius property
+     * of the first argument passed into it.
+     */
+    outerRadius(): (this: This, d: Datum, ...args: any[]) => number;
+    /**
+     * Sets the outer radius to the specified number and returns this arc generator.
+     *
+     * Specifying the outer radius as a function is useful for constructing a coxcomb or polar bar chart,
+     * often in conjunction with a sqrt scale. More commonly, a constant outer radius is used for a pie or donut chart.
+     * If the outer radius is smaller than the inner radius, the inner and outer radii are swapped.
+     * A negative value is treated as zero.
+     *
+     * @param radius Constant radius.
+     */
+    outerRadius(radius: number): this;
+    /**
+     * Sets the outer radius to the specified function and returns this arc generator.
+     *
+     * Specifying the outer radius as a function is useful for constructing a coxcomb or polar bar chart,
+     * often in conjunction with a sqrt scale. More commonly, a constant outer radius is used for a pie or donut chart.
+     * If the outer radius is smaller than the inner radius, the inner and outer radii are swapped.
+     * A negative value is treated as zero.
+     *
+     * @param radius An accessor function returning a number to be used as a radius. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the arc generator.
+     */
+    outerRadius(radius: (this: This, d: Datum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current corner radius accessor, which defaults to a function returning a constant value of zero.
+     */
+    cornerRadius(): (this: This, d: Datum, ...args: any[]) => number;
+    /**
+     * Sets the corner radius to the specified number and returns this arc generator.
+     *
+     * If the corner radius is greater than zero, the corners of the arc are rounded using circles of the given radius.
+     * For a circular sector, the two outer corners are rounded; for an annular sector, all four corners are rounded.
+     *
+     * The corner radius may not be larger than (outerRadius - innerRadius) / 2.
+     * In addition, for arcs whose angular span is less than π, the corner radius may be reduced as two adjacent rounded corners intersect.
+     * This is occurs more often with the inner corners.
+     *
+     * @param radius Constant radius.
+     */
+    cornerRadius(radius: number): this;
+    /**
+     * Sets the corner radius to the specified function and returns this arc generator.
+     *
+     * The corner radius may not be larger than (outerRadius - innerRadius) / 2.
+     * In addition, for arcs whose angular span is less than π, the corner radius may be reduced as two adjacent rounded corners intersect.
+     * This is occurs more often with the inner corners.
+     *
+     * @param radius An accessor function returning a number to be used as a radius. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the arc generator.
+     */
+    cornerRadius(radius: (this: This, d: Datum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current start angle accessor, which defaults to a function returning the startAngle property
+     * of the first argument passed into it.
+     */
+    startAngle(): (this: This, d: Datum, ...args: any[]) => number;
+    /**
+     * Sets the start angle to the specified number and returns this arc generator.
+     *
+     * The angle is specified in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     * If |endAngle - startAngle| ≥ τ, a complete circle or annulus is generated rather than a sector.
+     *
+     * @param angle Constant angle in radians.
+     */
+    startAngle(angle: number): this;
+    /**
+     * Sets the start angle to the specified function and returns this arc generator.
+     *
+     * The angle is specified in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     * If |endAngle - startAngle| ≥ τ, a complete circle or annulus is generated rather than a sector.
+     *
+     * @param angle An accessor function returning a number in radians to be used as an angle. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the arc generator.
+     */
+    startAngle(angle: (this: This, d: Datum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current end angle accessor, which defaults to a function returning the endAngle property
+     * of the first argument passed into it.
+     */
+    endAngle(): (this: This, d: Datum, ...args: any[]) => number;
+    /**
+     * Sets the end angle to the specified number and returns this arc generator.
+     *
+     * The angle is specified in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     * If |endAngle - startAngle| ≥ τ, a complete circle or annulus is generated rather than a sector.
+     *
+     * @param angle Constant angle in radians.
+     */
+    endAngle(angle: number): this;
+    /**
+     * Sets the end angle to the specified function and returns this arc generator.
+     *
+     * The angle is specified in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     * If |endAngle - startAngle| ≥ τ, a complete circle or annulus is generated rather than a sector.
+     *
+     * @param angle An accessor function returning a number in radians to be used as an angle. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the arc generator.
+     */
+    endAngle(angle: (this: This, d: Datum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current pad angle accessor, which defaults to a function returning the padAngle property
+     * of the first argument passed into it, or false if no data are passed in or the property is not defined.
+     */
+    padAngle(): (this: This, d: Datum, ...args: any[]) => number | undefined;
+    /**
+     * Sets the pad angle to the specified number and returns this arc generator.
+     *
+     * The pad angle is converted to a fixed linear distance separating adjacent arcs, defined as padRadius * padAngle. This distance is subtracted equally from the start and end of the arc.
+     * If the arc forms a complete circle or annulus, as when |endAngle - startAngle| ≥ τ, the pad angle is ignored. If the inner radius or angular span is small relative to the pad angle,
+     * it may not be possible to maintain parallel edges between adjacent arcs. In this case, the inner edge of the arc may collapse to a point, similar to a circular sector.
+     * For this reason, padding is typically only applied to annular sectors (i.e., when innerRadius is positive).
+     *
+     * The recommended minimum inner radius when using padding is outerRadius * padAngle / sin(θ), where θ is the angular span of the smallest arc before padding.
+     * For example, if the outer radius is 200 pixels and the pad angle is 0.02 radians, a reasonable θ is 0.04 radians, and a reasonable inner radius is 100 pixels.
+     *
+     * Often, the pad angle is not set directly on the arc generator, but is instead computed by the pie generator so as to ensure that the area of padded arcs is proportional to their value;
+     * see pie.padAngle. See the pie padding animation for illustration.
+     * If you apply a constant pad angle to the arc generator directly, it tends to subtract disproportionately from smaller arcs, introducing distortion.
+     *
+     * @param angle Constant angle in radians.
+     */
+    padAngle(angle: number | undefined): this;
+    /**
+     * Sets the pad angle to the specified function and returns this arc generator.
+     *
+     * The pad angle is converted to a fixed linear distance separating adjacent arcs, defined as padRadius * padAngle. This distance is subtracted equally from the start and end of the arc.
+     * If the arc forms a complete circle or annulus, as when |endAngle - startAngle| ≥ τ, the pad angle is ignored. If the inner radius or angular span is small relative to the pad angle,
+     * it may not be possible to maintain parallel edges between adjacent arcs. In this case, the inner edge of the arc may collapse to a point, similar to a circular sector.
+     * For this reason, padding is typically only applied to annular sectors (i.e., when innerRadius is positive).
+     *
+     * The recommended minimum inner radius when using padding is outerRadius * padAngle / sin(θ), where θ is the angular span of the smallest arc before padding.
+     * For example, if the outer radius is 200 pixels and the pad angle is 0.02 radians, a reasonable θ is 0.04 radians, and a reasonable inner radius is 100 pixels.
+     *
+     * Often, the pad angle is not set directly on the arc generator, but is instead computed by the pie generator so as to ensure that the area of padded arcs is proportional to their value;
+     * see pie.padAngle. See the pie padding animation for illustration.
+     * If you apply a constant pad angle to the arc generator directly, it tends to subtract disproportionately from smaller arcs, introducing distortion.
+     *
+     * @param angle An accessor function returning a number in radians to be used as an angle. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the arc generator.
+     */
+    padAngle(angle: (this: This, d: Datum, ...args: any[]) => number | undefined): this;
+
+    /**
+     * Returns the current pad radius accessor, which defaults to null, indicating that the pad radius should be automatically computed as sqrt(innerRadius * innerRadius + outerRadius * outerRadius).
+     */
+    padRadius(): ((this: This, d: Datum, ...args: any[]) => number) | null;
+    /**
+     * Sets the pad radius to the specified function or number and returns this arc generator.
+     * The pad radius determines the fixed linear distance separating adjacent arcs, defined as padRadius * padAngle.
+     */
+    padRadius(radius: null | number | ((this: This, d: Datum, ...args: any[]) => number)): this;
+
+    /**
+     * Returns the current rendering context, which defaults to null.
+     */
+    context(): CanvasRenderingContext2D | null;
+    /**
+     * Sets the context and returns this arc generator.
+     * If context is not specified, returns the current context, which defaults to null.
+     */
+    context(context: CanvasRenderingContext2D | null): this;
+}
+
+/**
+ * Constructs a new arc generator with the default settings.
+ *
+ * Ensure that the accessors used with the arc generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ */
+export function arc(): Arc<any, DefaultArcObject>;
+/**
+ * Constructs a new arc generator with the default settings.
+ *
+ * Ensure that the accessors used with the arc generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ *
+ * The generic corresponds to the datum type representing a arc.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function arc<Datum>(): Arc<any, Datum>;
+/**
+ * Constructs a new arc generator with the default settings.
+ *
+ * Ensure that the accessors used with the arc generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ *
+ * The first generic corresponds to the type of the "this" context within which the arc generator and its accessor functions will be invoked.
+ *
+ * The second generic corresponds to the datum type representing a arc.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function arc<This, Datum>(): Arc<This, Datum>;
+
+// -----------------------------------------------------------------------------------
+// Pie Generator
+// -----------------------------------------------------------------------------------
+
+/**
+ * Element of the Arc Datums Array created by invoking the Pie generator.
+ *
+ * The generic refers to the data type of an element in the input array passed into the Pie generator.
+ */
+export interface PieArcDatum<T> {
+    /**
+     * The input datum; the corresponding element in the input data array of the Pie generator.
+     */
+    data: T;
+    /**
+     * The numeric value of the arc.
+     */
+    value: number;
+    /**
+     * The zero-based sorted index of the arc.
+     */
+    index: number;
+    /**
+     * The start angle of the arc.
+     * If the pie generator was configured to be used for the arc generator,
+     * then the units are in radians with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     */
+    startAngle: number;
+    /**
+     * The end angle of the arc.
+     * If the pie generator was configured to be used for the arc generator,
+     * then the units are in radians with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     */
+    endAngle: number;
+    /**
+     * The pad angle of the arc. If the pie generator was configured to be used for the arc generator, than the units are in radians.
+     */
+    padAngle: number;
+}
+
+/**
+ * The pie generator does not produce a shape directly, but instead computes the necessary angles to represent a tabular dataset as a pie or donut chart;
+ * these angles can then be passed to an arc generator.
+ *
+ * The first generic corresponds to the type of the "this" context within which the pie generator and its accessor functions will be invoked.
+ *
+ * The second generic refers to the data type of an element in the input array passed into the Pie generator.
+ */
+export interface Pie<This, Datum> {
+    /**
+     * Generates a pie for the given array of data, returning an array of objects representing each datum’s arc angles.
+     * Any additional arguments are arbitrary; they are simply propagated to the pie generator’s accessor functions along with the this object.
+     * The length of the returned array is the same as data, and each element i in the returned array corresponds to the element i in the input data.
+     *
+     * This representation is designed to work with the arc generator’s default startAngle, endAngle and padAngle accessors.
+     * The angular units are arbitrary, but if you plan to use the pie generator in conjunction with an arc generator,
+     * you should specify angles in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     *
+     * @param data Array of data elements.
+     */
+    (this: This, data: Datum[], ...args: any[]): Array<PieArcDatum<Datum>>;
+
+    /**
+     * Returns the current value accessor, which defaults to a function returning the first argument passed into it.
+     * The default value accessor assumes that the input data are numbers, or that they are coercible to numbers using valueOf.
+     */
+    value(): (d: Datum, i: number, data: Datum[]) => number;
+    /**
+     * Sets the value accessor to use the specified constant number and returns this pie generator.
+     *
+     * @param value Constant value to be used.
+     */
+    value(value: number): this;
+    /**
+     * Sets the value accessor to use the specified function and returns this pie generator.
+     *
+     * When a pie is generated, the value accessor will be invoked for each element in the input data array.
+     * The default value accessor assumes that the input data are numbers, or that they are coercible to numbers using valueOf.
+     * If your data are not simply numbers, then you should specify an accessor that returns the corresponding numeric value for a given datum.
+     *
+     * @param value A value accessor function, which is invoked for each element in the input data array, being passed the element d, the index i, and the array data as three arguments.
+     * It returns a numeric value.
+     */
+    value(value: (d: Datum, i: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current data comparator, which defaults to null.
+     */
+    sort(): ((a: Datum, b: Datum) => number) | null;
+    /**
+     * Sets the data comparator to the specified function and returns this pie generator.
+     *
+     * If both the data comparator and the value comparator are null, then arcs are positioned in the original input order.
+     * Otherwise, the data is sorted according to the data comparator, and the resulting order is used. Setting the data comparator implicitly sets the value comparator to null.
+     *
+     * Sorting does not affect the order of the generated arc array which is always in the same order as the input data array; it merely affects the computed angles of each arc.
+     * The first arc starts at the start angle and the last arc ends at the end angle.
+     *
+     * @param comparator A compare function takes two arguments a and b, each elements from the input data array.
+     * If the arc for a should be before the arc for b, then the comparator must return a number less than zero;
+     * if the arc for a should be after the arc for b, then the comparator must return a number greater than zero;
+     * returning zero means that the relative order of a and b is unspecified.
+     */
+    sort(comparator: (a: Datum, b: Datum) => number): this;
+    /**
+     * Sets the data comparator to null and returns this pie generator.
+     *
+     * If both the data comparator and the value comparator are null, then arcs are positioned in the original input order.
+     *
+     * @param comparator null, to set the pie generator to use the original input order or use the sortValues comparator, if any.
+     */
+    sort(comparator: null): this;
+
+    /**
+     * Returns the current value comparator, which defaults to descending value.
+     */
+    sortValues(): ((a: number, b: number) => number) | null;
+    /**
+     * Sets the value comparator to the specified function and returns this pie generator.
+     *
+     * If both the data comparator and the value comparator are null, then arcs are positioned in the original input order.
+     * Otherwise, the data is sorted according to the data comparator, and the resulting order is used.
+     * Setting the value comparator implicitly sets the data comparator to null.
+     *
+     * The value comparator is similar to the data comparator, except the two arguments a and b are values derived from the input data array using the value accessor, not the data elements.
+     * If the arc for a should be before the arc for b, then the comparator must return a number less than zero;
+     * if the arc for a should be after the arc for b, then the comparator must return a number greater than zero;
+     * returning zero means that the relative order of a and b is unspecified.
+     */
+    sortValues(comparator: ((a: number, b: number) => number) | null): this;
+
+    /**
+     * Returns the current start angle accessor, which defaults to a function returning a constant zero.
+     */
+    startAngle(): (this: This, data: Datum[], ...args: any[]) => number;
+    /**
+     * Sets the overall start angle of the pie to the specified number and returns this pie generator.
+     *
+     * The default start angle is zero.
+     *
+     * The start angle here means the overall start angle of the pie, i.e., the start angle of the first arc.
+     * The start angle accessor is invoked once, being passed the same arguments and this context as the pie generator.
+     * The units of angle are arbitrary, but if you plan to use the pie generator in conjunction with an arc generator,
+     * you should specify an angle in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     *
+     * @param angle A constant angle.
+     */
+    startAngle(angle: number): this;
+    /**
+     * Sets the overall start angle of the pie to the specified function and returns this pie generator.
+     *
+     * The default start angle is zero.
+     *
+     * The start angle here means the overall start angle of the pie, i.e., the start angle of the first arc.
+     * The start angle accessor is invoked once, being passed the same arguments and this context as the pie generator.
+     * The units of angle are arbitrary, but if you plan to use the pie generator in conjunction with an arc generator,
+     * you should specify an angle in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     *
+     * @param angle An angle accessor function, which is invoked once, being passed the same arguments and this context as the pie generator.
+     */
+    startAngle(angle: (this: This, data: Datum[], ...args: any[]) => number): this;
+
+    /**
+     * Returns the current end angle accessor, which defaults to a function returning a constant 2*pi.
+     */
+    endAngle(): (this: This, data: Datum[], ...args: any[]) => number;
+    /**
+     * Sets the overall end angle of the pie to the specified number and returns this pie generator.
+     *
+     * The default end angle is 2*pi.
+     *
+     * The end angle here means the overall end angle of the pie, i.e., the end angle of the last arc.
+     * The units of angle are arbitrary, but if you plan to use the pie generator in conjunction with an arc generator,
+     * you should specify an angle in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     *
+     * The value of the end angle is constrained to startAngle ± τ, such that |endAngle - startAngle| ≤ τ.
+     *
+     * @param angle A constant angle.
+     */
+    endAngle(angle: number): this;
+    /**
+     * Sets the overall end angle of the pie to the specified function and returns this pie generator.
+     *
+     * The default end angle is 2*pi.
+     *
+     * The end angle here means the overall end angle of the pie, i.e., the end angle of the last arc.
+     * The end angle accessor is invoked once, being passed the same arguments and this context as the pie generator.
+     * The units of angle are arbitrary, but if you plan to use the pie generator in conjunction with an arc generator,
+     * you should specify an angle in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+     *
+     * The value of the end angle is constrained to startAngle ± τ, such that |endAngle - startAngle| ≤ τ.
+     *
+     * @param angle An angle accessor function, which is invoked once, being passed the same arguments and this context as the pie generator.
+     */
+    endAngle(angle: (this: This, data: Datum[], ...args: any[]) => number): this;
+
+    /**
+     * Returns the current pad angle accessor, which defaults to a function returning a constant zero.
+     */
+    padAngle(): (this: This, data: Datum[], ...args: any[]) => number;
+    /**
+     * Sets the pad angle to the specified number and returns this pie generator.
+     *
+     * The pad angle here means the angular separation between each adjacent arc.
+     * The total amount of padding reserved is the specified angle times the number of elements in the input data array, and at most |endAngle - startAngle|;
+     * the remaining space is then divided proportionally by value such that the relative area of each arc is preserved.
+     * The units of angle are arbitrary, but if you plan to use the pie generator in conjunction with an arc generator, you should specify an angle in radians.
+     *
+     * @param angle A constant angle.
+     */
+    padAngle(angle: number): this;
+    /**
+     * Sets the pad angle to the specified function and returns this pie generator.
+     *
+     * The pad angle here means the angular separation between each adjacent arc.
+     * The total amount of padding reserved is the specified angle times the number of elements in the input data array, and at most |endAngle - startAngle|;
+     * the remaining space is then divided proportionally by value such that the relative area of each arc is preserved.
+     * The pad angle accessor is invoked once, being passed the same arguments and this context as the pie generator.
+     * The units of angle are arbitrary, but if you plan to use the pie generator in conjunction with an arc generator, you should specify an angle in radians.
+     *
+     * @param angle An angle accessor function, which is invoked once, being passed the same arguments and this context as the pie generator.
+     */
+    padAngle(angle: (this: This, data: Datum[], ...args: any[]) => number): this;
+}
+
+/**
+ * Constructs a new pie generator with the default settings.
+ *
+ * Ensure that the accessors used with the pie generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ */
+export function pie(): Pie<any, number | { valueOf(): number }>;
+/**
+ * Constructs a new pie generator with the default settings.
+ *
+ * Ensure that the accessors used with the pie generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ *
+ * The generic refers to the data type of an element in the input array passed into the Pie generator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function pie<Datum>(): Pie<any, Datum>;
+/**
+ * Constructs a new pie generator with the default settings.
+ *
+ * Ensure that the accessors used with the pie generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ *
+ * The first generic corresponds to the type of the "this" context within which the pie generator and its accessor functions will be invoked.
+ *
+ * The second generic refers to the data type of an element in the input array passed into the Pie generator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function pie<This, Datum>(): Pie<This, Datum>;
+
+// -----------------------------------------------------------------------------------
+// Line Generators
+// -----------------------------------------------------------------------------------
+
+/**
+ * The line generator produces a spline or polyline, as in a line chart.
+ * Lines also appear in many other visualization types, such as the links in hierarchical edge bundling.
+ *
+ * The generic refers to the data type of an element in the input array passed into the line generator.
+ */
+export interface Line<Datum> {
+    /**
+     * Generates a line for the given array of data. Depending on this line generator’s associated curve,
+     * the given input data may need to be sorted by x-value before being passed to the line generator.
+     *
+     * IMPORTANT: If the rendering context of the line generator is null,
+     * then the line is returned as a path data string.
+     *
+     * @param data Array of data elements.
+     */
+    (data: Iterable<Datum> | Datum[]): string | null;
+    /**
+     * Generates a line for the given array of data. Depending on this line generator’s associated curve,
+     * the given input data may need to be sorted by x-value before being passed to the line generator.
+     *
+     * IMPORTANT: If the line generator has been configured with a rendering context,
+     * then the line is rendered to this context as a sequence of path method calls and this function returns void.
+     *
+     * @param data Array of data elements.
+     */
+    (data: Iterable<Datum> | Datum[]): void;
+
+    /**
+     * Returns the current x-coordinate accessor function, which defaults to a function returning first element of a two-element array of numbers.
+     */
+    x(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets the x accessor to the specified number and returns this line generator.
+     *
+     * @param x A constant x-coordinate value.
+     */
+    x(x: number): this;
+    /**
+     * Sets the x accessor to the specified function and returns this line generator.
+     *
+     * When a line is generated, the x accessor will be invoked for each defined element in the input data array.
+     *
+     * The default x accessor assumes that the input data are two-element arrays of numbers. If your data are in a different format, or if you wish to transform the data before rendering,
+     * then you should specify a custom accessor.
+     *
+     * @param x A coordinate accessor function which returns the x-coordinate value. The x accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    x(x: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current y-coordinate accessor function, which defaults to a function returning second element of a two-element array of numbers.
+     */
+    y(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets the y accessor to the specified number and returns this line generator.
+     *
+     * @param y A constant y-coordinate value.
+     */
+    y(y: number): this;
+    /**
+     * Sets the y accessor to the specified function and returns this line generator.
+     *
+     * When a line is generated, the y accessor will be invoked for each defined element in the input data array.
+     *
+     * The default y accessor assumes that the input data are two-element arrays of numbers. If your data are in a different format, or if you wish to transform the data before rendering,
+     * then you should specify a custom accessor.
+     *
+     * @param y A coordinate accessor function which returns the y-coordinate value. The y accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    y(y: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current defined accessor, which defaults to a function returning a constant boolean value of true.
+     */
+    defined(): (d: Datum, index: number, data: Datum[]) => boolean;
+    /**
+     * Sets the defined accessor to the specified boolean and returns this line generator.
+     *
+     * The default accessor for defined returns a constant boolean value of true, thus assumes that the input data is always defined.
+     *
+     * When a line is generated, the defined accessor will be invoked for each element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     * If the given element is defined (i.e., if the defined accessor returns a truthy value for this element),
+     * the x and y accessors will subsequently be evaluated and the point will be added to the current line segment.
+     * Otherwise, the element will be skipped, the current line segment will be ended, and a new line segment will be generated for the next defined point.
+     * As a result, the generated line may have several discrete segments.
+     *
+     * Note that if a line segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps.
+     * In addition, some curves such as curveCardinalOpen only render a visible segment if it contains multiple points.
+     *
+     * @param defined A boolean constant.
+     */
+    defined(defined: boolean): this;
+    /**
+     * Sets the defined accessor to the specified function and returns this line generator.
+     *
+     * The default accessor for defined returns a constant boolean value of true, thus assumes that the input data is always defined.
+     *
+     * When a line is generated, the defined accessor will be invoked for each element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     * If the given element is defined (i.e., if the defined accessor returns a truthy value for this element),
+     * the x and y accessors will subsequently be evaluated and the point will be added to the current line segment.
+     * Otherwise, the element will be skipped, the current line segment will be ended, and a new line segment will be generated for the next defined point.
+     * As a result, the generated line may have several discrete segments.
+     *
+     * Note that if a line segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps.
+     * In addition, some curves such as curveCardinalOpen only render a visible segment if it contains multiple points.
+     *
+     * @param defined An accessor function which returns a boolean value. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    defined(defined: (d: Datum, index: number, data: Datum[]) => boolean): this;
+
+    /**
+     * Returns the current curve factory, which defaults to curveLinear.
+     */
+    curve(): CurveFactory | CurveFactoryLineOnly;
+    /**
+     * Returns the current curve factory, which defaults to curveLinear.
+     *
+     * The generic allows to cast the curve factory to a specific type, if known.
+     */
+    // eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+    curve<C extends CurveFactory | CurveFactoryLineOnly>(): C;
+    /**
+     * Sets the curve factory and returns this line generator.
+     *
+     * @param curve A valid curve factory.
+     */
+    curve(curve: CurveFactory | CurveFactoryLineOnly): this;
+
+    /**
+     * Returns the current rendering context, which defaults to null.
+     */
+    context(): CanvasRenderingContext2D | null;
+    /**
+     * Sets the context and returns this line generator.
+     */
+    context(context: CanvasRenderingContext2D | null): this;
+}
+
+/**
+ * Constructs a new line generator with the default settings.
+ *
+ * If x or y are specified, sets the corresponding accessors to the specified function or number and returns this line generator.
+ *
+ * The generic refers to the data type of an element in the input array passed into the line generator.
+ *
+ * @param x Sets the x accessor
+ * @param y Sets the y accessor
+ */
+export function line<Datum = [number, number]>(
+    x?: number | ((d: Datum, index: number, data: Datum[]) => number),
+    y?: number | ((d: Datum, index: number, data: Datum[]) => number),
+): Line<Datum>;
+
+/**
+ * The radial line generator produces a spline or polyline, as in a line chart.
+ *
+ * A radial line generator is equivalent to the standard Cartesian line generator,
+ * except the x and y accessors are replaced with angle and radius accessors.
+ * Radial lines are always positioned relative to ⟨0,0⟩; use a transform (see: SVG, Canvas) to change the origin.
+ *
+ * The generic refers to the data type of an element in the input array passed into the line generator.
+ */
+export interface LineRadial<Datum> {
+    /**
+     * Generates a radial line for the given array of data. Depending on this radial line generator’s associated curve,
+     * the given input data may need to be sorted by x-value before being passed to the line generator.
+     *
+     * IMPORTANT: If the rendering context of the radial line generator is null,
+     * then the radial line is returned as a path data string.
+     *
+     * @param data Array of data elements.
+     */
+    (data: Iterable<Datum> | Datum[]): string | null;
+    /**
+     * Generates a radial line for the given array of data. Depending on this radial line generator’s associated curve,
+     * the given input data may need to be sorted by x-value before being passed to the radial line generator.
+     *
+     * IMPORTANT: If the radial line generator has been configured with a rendering context,
+     * then the radial line is rendered to this context as a sequence of path method calls and this function returns void.
+     *
+     * @param data Array of data elements.
+     */
+    (data: Iterable<Datum> | Datum[]): void;
+
+    /**
+     * Returns the current angle accessor function, which defaults to a function returning first element of a two-element array of numbers.
+     */
+    angle(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets the angle accessor to the specified number and returns this radial line generator.
+     *
+     * @param angle A constant angle value in radians, with 0 at -y (12 o’clock).
+     */
+    angle(angle: number): this;
+    /**
+     * Sets the angle accessor to the specified function and returns this radial line generator.
+     *
+     * When a radial line is generated, the angle accessor will be invoked for each defined element in the input data array.
+     *
+     * The default angle accessor assumes that the input data are two-element arrays of numbers. If your data are in a different format, or if you wish to transform the data before rendering,
+     * then you should specify a custom accessor.
+     *
+     * @param angle An angle accessor function which returns the angle value in radians, with 0 at -y (12 o’clock). The angle accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    angle(angle: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current radius accessor function, which defaults to a function returning second element of a two-element array of numbers.
+     */
+    radius(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets the radius accessor to the specified number and returns this radial line generator.
+     *
+     * @param radius A constant radius value.
+     */
+    radius(radius: number): this;
+    /**
+     * Sets the radius accessor to the specified function and returns this radial line generator.
+     *
+     * When a radial line is generated, the radius accessor will be invoked for each defined element in the input data array.
+     *
+     * The default radius accessor assumes that the input data are two-element arrays of numbers. If your data are in a different format, or if you wish to transform the data before rendering,
+     * then you should specify a custom accessor.
+     *
+     * @param radius A radius accessor function which returns the radius value. The radius accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    radius(radius: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current defined accessor, which defaults to a function returning a constant boolean value of true.
+     */
+    defined(): (d: Datum, index: number, data: Datum[]) => boolean;
+    /**
+     * Sets the defined accessor to the specified boolean and returns this radial line generator.
+     *
+     * The default accessor for defined returns a constant boolean value of true, thus assumes that the input data is always defined.
+     *
+     * When a radial line is generated, the defined accessor will be invoked for each element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     * If the given element is defined (i.e., if the defined accessor returns a truthy value for this element),
+     * the angle and radius accessors will subsequently be evaluated and the point will be added to the current radial line segment.
+     * Otherwise, the element will be skipped, the current radial line segment will be ended, and a new radial line segment will be generated for the next defined point.
+     * As a result, the generated radial line may have several discrete segments.
+     *
+     * Note that if a radial line segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps.
+     * In addition, some curves such as curveCardinalOpen only render a visible segment if it contains multiple points.
+     *
+     * @param defined A boolean constant.
+     */
+    defined(defined: boolean): this;
+    /**
+     * Sets the defined accessor to the specified function and returns this radial line generator.
+     *
+     * The default accessor for defined returns a constant boolean value of true, thus assumes that the input data is always defined.
+     *
+     * When a radial line is generated, the defined accessor will be invoked for each element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     * If the given element is defined (i.e., if the defined accessor returns a truthy value for this element),
+     * the angle and radius accessors will subsequently be evaluated and the point will be added to the current radial line segment.
+     * Otherwise, the element will be skipped, the current radial line segment will be ended, and a new radial line segment will be generated for the next defined point.
+     * As a result, the generated radial line may have several discrete segments.
+     *
+     * Note that if a radial line segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps.
+     * In addition, some curves such as curveCardinalOpen only render a visible segment if it contains multiple points.
+     *
+     * @param defined An accessor function which returns a boolean value. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    defined(defined: (d: Datum, index: number, data: Datum[]) => boolean): this;
+
+    /**
+     * Returns the current curve factory, which defaults to curveLinear.
+     */
+    curve(): CurveFactory | CurveFactoryLineOnly;
+    /**
+     * Returns the current curve factory, which defaults to curveLinear.
+     *
+     * The generic allows to cast the curve factory to a specific type, if known.
+     */
+    // eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+    curve<C extends CurveFactory | CurveFactoryLineOnly>(): C;
+    /**
+     * Sets the curve factory and returns this radial line generator.
+     *
+     * Note that curveMonotoneX or curveMonotoneY are not recommended for radial lines because they assume that the data is monotonic in x or y,
+     * which is typically untrue of radial lines.
+     *
+     * @param curve A valid curve factory.
+     */
+    curve(curve: CurveFactory | CurveFactoryLineOnly): this;
+
+    /**
+     * Returns the current rendering context, which defaults to null.
+     */
+    context(): CanvasRenderingContext2D | null;
+    /**
+     * Equivalent to line.context.
+     */
+    context(context: CanvasRenderingContext2D | null): this;
+}
+
+/**
+ * Constructs a new radial line generator with the default settings.
+ *
+ * Ensure that the accessors used with the radial line generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ */
+export function lineRadial(): LineRadial<[number, number]>;
+/**
+ * Constructs a new radial line generator with the default settings.
+ *
+ * Ensure that the accessors used with the radial line generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ *
+ * The generic refers to the data type of an element in the input array passed into the radial line generator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function lineRadial<Datum>(): LineRadial<Datum>;
+
+/**
+ * @deprecated Use LineRadial<Datum>
+ */
+export type RadialLine<Datum> = LineRadial<Datum>;
+
+/**
+ * @deprecated Use lineRadial()
+ */
+export function radialLine(): RadialLine<[number, number]>;
+/**
+ * @deprecated Use lineRadial<Datum>()
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function radialLine<Datum>(): RadialLine<Datum>;
+
+// -----------------------------------------------------------------------------------
+// Area Generators
+// -----------------------------------------------------------------------------------
+
+/**
+ * The area generator produces an area, as in an area chart. An area is defined by two bounding lines, either splines or polylines.
+ * Typically, the two lines share the same x-values (x0 = x1), differing only in y-value (y0 and y1); most commonly, y0 is defined as a constant representing zero.
+ * The first line (the topline) is defined by x1 and y1 and is rendered first; the second line (the baseline) is defined by x0 and y0 and is rendered second, with the points in reverse order.
+ * With a curveLinear curve, this produces a clockwise polygon.
+ *
+ * The generic refers to the data type of an element in the input array passed into the area generator.
+ */
+export interface Area<Datum> {
+    /**
+     * Generates an area for the given array of data. Depending on this area generator’s associated curve,
+     * the given input data may need to be sorted by x-value before being passed to the area generator.
+     *
+     * IMPORTANT: If the rendering context of the area generator is null,
+     * then the area is returned as a path data string.
+     *
+     * @param data Array of data elements.
+     */
+    (data: Iterable<Datum> | Datum[]): string | null;
+    /**
+     * Generates an area for the given array of data. Depending on this area generator’s associated curve,
+     * the given input data may need to be sorted by x-value before being passed to the area generator.
+     *
+     * IMPORTANT: If the area generator has been configured with a rendering context,
+     * then the area is rendered to this context as a sequence of path method calls and this function returns void.
+     *
+     * @param data Array of data elements.
+     */
+    (data: Iterable<Datum> | Datum[]): void;
+
+    /**
+     * Returns the current x0 accessor. The default x0 accessor is a function returning the first element of a
+     * two-element array of numbers.
+     */
+    x(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets x0 to a constant number x and x1 to null and returns this area generator.
+     *
+     * Setting x1 to null indicates that the previously-computed x0 value should be reused for the x1 value.
+     *
+     * @param x A constant value to be used for x0.
+     */
+    x(x: number): this;
+    /**
+     * Sets x0 to the specified function x and x1 to null and returns this area generator.
+     *
+     * The default x0 accessor assumes that the input data are two-element arrays of numbers and returns the first element.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param x An accessor function returning a value to be used for x0. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    x(x: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current x0 accessor. The default x0 accessor is a function returning the first element of a
+     * two-element array of numbers.
+     */
+    x0(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets x0 to a constant number and returns this area generator.
+     *
+     * @param x A constant value.
+     */
+    x0(x: number): this;
+    /**
+     * Sets x0 to the specified function and returns this area generator.
+     *
+     * The default x0 accessor assumes that the input data are two-element arrays of numbers and returns the first element.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param x An accessor function returning a value to be used for x0. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    x0(x: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current x1 accessor, which defaults to null, indicating that the previously-computed x0 value should be reused for the x1 value.
+     */
+    x1(): ((d: Datum, index: number, data: Datum[]) => number) | null;
+    /**
+     * Sets the x1 accessor to the specified number and returns this area generator.
+     */
+    x1(x: null | number): this;
+    /**
+     * Sets x1 to the specified function and returns this area generator.
+     *
+     * The default x1 accessor is null, indicating that the previously-computed x0 value should be reused for the x1 value.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param x An accessor function returning a value to be used for x1. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    x1(x: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current y0 accessor. The default y0 accessor is a function returning a constant value of zero.
+     */
+    y(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets y0 to a constant number y and y1 to null and returns this area generator.
+     *
+     * Setting y1 to null indicates that the previously-computed y0 value should be reused for the y1 value.
+     *
+     * @param y A constant value to be used for y0.
+     */
+    y(y: number): this;
+    /**
+     * Sets y0 to the accessor function y and y1 to null and returns this area generator.
+     *
+     * The default y0 accessor returns a constant value of zero.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param y An accessor function returning a value to be used for y0. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    y(y: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current y0 accessor. The default y0 accessor is a function a constant value of zero.
+     */
+    y0(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets y0 to a constant number and returns this area generator.
+     *
+     * @param y A constant value.
+     */
+    y0(y: number): this;
+    /**
+     * Sets y0 to the specified function and returns this area generator.
+     *
+     * The default y0 accessor is a function which returns a constant value of zero.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param y An accessor function returning a value to be used for y0. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    y0(y: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current y1 accessor or null. The default y1 accessor is a function returning the second element of a
+     * two-element array of numbers.
+     *
+     * If the y1 accessor is null, the previously-computed y0 value is reused for the y1 value.
+     */
+    y1(): ((d: Datum, index: number, data: Datum[]) => number) | null;
+    /**
+     * sets the y1 accessor to the specified number and returns this area generator.
+     */
+    y1(y: null | number): this;
+    /**
+     * Sets y1 to the specified function and returns this area generator.
+     *
+     * The default y1 accessor assumes that the input data are two-element arrays of numbers and returns the second element.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param y An accessor function returning a value to be used for y1. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    y1(y: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current defined accessor, which defaults to a function returning a constant boolean value of true.
+     */
+    defined(): (d: Datum, index: number, data: Datum[]) => boolean;
+    /**
+     * Sets the defined accessor to the specified boolean and returns this area generator.
+     *
+     * The default accessor for defined returns a constant boolean value of true, thus assumes that the input data is always defined.
+     * When an area is generated, the defined accessor will be invoked for each element in the input data array, being passed the element d, the index i, and the array data as three arguments.
+     * If the given element is defined (i.e., if the defined accessor returns a truthy value for this element),
+     * the x0, x1, y0 and y1 accessors will subsequently be evaluated and the point will be added to the current area segment.
+     * Otherwise, the element will be skipped, the current area segment will be ended, and a new area segment will be generated for the next defined point.
+     * As a result, the generated area may have several discrete segments.
+     *
+     * Note that if an area segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps.
+     * In addition, some curves such as curveCardinalOpen only render a visible segment if it contains multiple points.
+     *
+     * @param defined A boolean constant.
+     */
+    defined(defined: boolean): this;
+    /**
+     * Sets the defined accessor to the specified function and returns this area generator.
+     *
+     * The default accessor for defined returns a constant boolean value of true, thus assumes that the input data is always defined.
+     *
+     * The default accessor for defined returns a constant boolean value of true, thus assumes that the input data is always defined.
+     * When an area is generated, the defined accessor will be invoked for each element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     * If the given element is defined (i.e., if the defined accessor returns a truthy value for this element),
+     * the x0, x1, y0 and y1 accessors will subsequently be evaluated and the point will be added to the current area segment.
+     * Otherwise, the element will be skipped, the current area segment will be ended, and a new area segment will be generated for the next defined point.
+     * As a result, the generated area may have several discrete segments.
+     *
+     * Note that if an area segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps.
+     * In addition, some curves such as curveCardinalOpen only render a visible segment if it contains multiple points.
+     *
+     * @param defined An accessor function which returns a boolean value. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    defined(defined: (d: Datum, index: number, data: Datum[]) => boolean): this;
+
+    /**
+     * Returns the current curve factory, which defaults to curveLinear.
+     */
+    curve(): CurveFactory;
+    /**
+     * Returns the current curve factory, which defaults to curveLinear.
+     *
+     * The generic allows to cast the curve factory to a specific type, if known.
+     */
+    // eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+    curve<C extends CurveFactory>(): C;
+    /**
+     * Sets the curve factory and returns this area generator.
+     *
+     * @param curve A valid curve factory.
+     */
+    curve(curve: CurveFactory): this;
+
+    /**
+     * Returns the current rendering context, which defaults to null.
+     */
+    context(): CanvasRenderingContext2D | null;
+    /**
+     * Sets the context and returns this area generator.
+     */
+    context(context: CanvasRenderingContext2D | null): this;
+
+    /**
+     * Returns a new line generator that has this area generator’s current defined accessor, curve and context.
+     * The line’s x-accessor is this area’s x0-accessor, and the line’s y-accessor is this area’s y0-accessor.
+     */
+    lineX0(): Line<Datum>;
+    /**
+     * Returns a new line generator that has this area generator’s current defined accessor, curve and context.
+     * The line’s x-accessor is this area’s x0-accessor, and the line’s y-accessor is this area’s y0-accessor.
+     */
+    lineY0(): Line<Datum>;
+
+    /**
+     * Returns a new line generator that has this area generator’s current defined accessor, curve and context.
+     * The line’s x-accessor is this area’s x1-accessor, and the line’s y-accessor is this area’s y0-accessor.
+     */
+    lineX1(): Line<Datum>;
+    /**
+     * Returns a new line generator that has this area generator’s current defined accessor, curve and context.
+     * The line’s x-accessor is this area’s x0-accessor, and the line’s y-accessor is this area’s y1-accessor.
+     */
+    lineY1(): Line<Datum>;
+}
+
+/**
+ * Constructs a new area generator with the default settings.
+ *
+ * If x, y0 or y1 are specified, sets the corresponding accessors to the specified function or number and returns this area generator.
+ *
+ * The generic refers to the data type of an element in the input array passed into the area generator.
+ *
+ * @param x Sets the x accessor.
+ * @param y0 Sets the y0 accessor.
+ * @param y1 Sets the y1 accessor.
+ */
+export function area<Datum = [number, number]>(
+    x?: number | ((d: Datum, index: number, data: Datum[]) => number),
+    y0?: number | ((d: Datum, index: number, data: Datum[]) => number),
+    y1?: number | ((d: Datum, index: number, data: Datum[]) => number),
+): Area<Datum>;
+
+/**
+ * A radial area generator.
+ *
+ * A radial area generator is equivalent to the standard Cartesian area generator,
+ * except the x and y accessors are replaced with angle and radius accessors.
+ * Radial areas are always positioned relative to ⟨0,0⟩; use a transform (see: SVG, Canvas) to change the origin.
+ *
+ * The generic refers to the data type of an element in the input array passed into the area generator.
+ */
+export interface AreaRadial<Datum> {
+    /**
+     * Generates a radial area for the given array of data.
+     *
+     * IMPORTANT: If the rendering context of the radial area generator is null,
+     * then the radial area is returned as a path data string.
+     *
+     * @param data Array of data elements.
+     */
+    (data: Iterable<Datum> | Datum[]): string | null;
+    /**
+     * Generates a radial area for the given array of data.
+     *
+     * IMPORTANT: If the radial area generator has been configured with a rendering context,
+     * then the radial area is rendered to this context as a sequence of path method calls and this function returns void.
+     *
+     * @param data Array of data elements.
+     */
+    (data: Iterable<Datum> | Datum[]): void;
+
+    /**
+     * Returns the current startAngle accessor. The default startAngle accessor is a function returning the first element of a
+     * two-element array of numbers.
+     */
+    angle(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets startAngle to a constant number angle and endAngle to null and returns this radial area generator.
+     *
+     * Setting endAngle to null indicates that the previously-computed startAngle value should be reused for the endAngle value.
+     *
+     * @param angle A constant value in radians with 0 at -y (12 o’clock).
+     */
+    angle(angle: number): this;
+    /**
+     * Sets startAngle to the specified function angle and endAngle to null and returns this radial area generator.
+     *
+     * The default startAngle accessor assumes that the input data are two-element arrays of numbers and returns the first element.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param angle An accessor function returning a value to be used for startAngle in radians with 0 at -y (12 o’clock).
+     * The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    angle(angle: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current startAngle accessor. The default startAngle accessor is a function returning the first element of a
+     * two-element array of numbers.
+     */
+    startAngle(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets startAngle to a constant number and returns this radial area generator.
+     *
+     * @param angle A constant value in radians with 0 at -y (12 o’clock).
+     */
+    startAngle(angle: number): this;
+    /**
+     * Sets startAngle to the specified function and returns this radial area generator.
+     *
+     * The default startAngle accessor assumes that the input data are two-element arrays of numbers and returns the first element.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param angle An accessor function returning a value to be used for startAngle in radians with 0 at -y (12 o’clock).
+     * The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    startAngle(angle: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current endAngle accessor, which defaults to null, indicating that the previously-computed startAngle value should be reused for the endAngle value.
+     */
+    endAngle(): ((d: Datum, index: number, data: Datum[]) => number) | null;
+    /**
+     * Equivalent to area.x1, except the accessor returns the angle in radians, with 0 at -y (12 o’clock).
+     * Note: typically angle is used instead of setting separate start and end angles.
+     */
+    endAngle(angle: null | number): this;
+    /**
+     * Sets endAngle to the specified function and returns this radial area generator.
+     *
+     * The default endAngle accessor is null, indicating that the previously-computed startAngle value should be reused for the endAngle value.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param angle An accessor function returning a value to be used for endAngle in radians with 0 at -y (12 o’clock).
+     * The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    endAngle(angle: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current innerRadius accessor. The default innerRadius accessor is a function returning a constant value of zero.
+     */
+    radius(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets innerRadius to a constant number radius and outerRadius to null and returns this radial area generator.
+     *
+     * Setting outerRadius to null indicates that the previously-computed innerRadius value should be reused for the outerRadius value.
+     *
+     * @param radius A constant value to be used for innerRadius.
+     */
+    radius(radius: number): this;
+    /**
+     * Sets innerRadius to the accessor function radius and outerRadius to null and returns this radial area generator.
+     *
+     * The default innerRadius accessor returns a constant value of zero.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param radius An accessor function returning a value to be used for innerRadius. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    radius(radius: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current innerRadius accessor. The default innerRadius accessor is a function a constant value of zero.
+     */
+    innerRadius(): (d: Datum, index: number, data: Datum[]) => number;
+    /**
+     * Sets innerRadius to a constant number and returns this radial area generator.
+     *
+     * @param radius A constant value.
+     */
+    innerRadius(radius: number): this;
+    /**
+     * Sets innerRadius to the specified function and returns this radial area generator.
+     *
+     * The default innerRadius accessor is a function which returns a constant value of zero.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param radius An accessor function returning a value to be used for innerRadius. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    innerRadius(radius: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current outerRadius accessor or null. The default outerRadius accessor is a function returning the second element of a
+     * two-element array of numbers.
+     *
+     * If the outerRadius accessor is null, the previously-computed innerRadius value is reused for the outerRadius value.
+     */
+    outerRadius(): ((d: Datum, index: number, data: Datum[]) => number) | null;
+    /**
+     * Equivalent to area.y1, except the accessor returns the radius: the distance from the origin ⟨0,0⟩.
+     */
+    outerRadius(radius: null | number): this;
+    /**
+     * Sets outerRadius to the specified function and returns this radial area generator.
+     *
+     * The default outerRadius accessor assumes that the input data are two-element arrays of numbers and returns the second element.
+     * If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor.
+     *
+     * @param radius An accessor function returning a value to be used for outerRadius. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    outerRadius(radius: (d: Datum, index: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current defined accessor, which defaults to a function returning a constant boolean value of true.
+     */
+    defined(): (d: Datum, index: number, data: Datum[]) => boolean;
+    /**
+     * Sets the defined accessor to the specified boolean and returns this radial area generator.
+     *
+     * The default accessor for defined returns a constant boolean value of true, thus assumes that the input data is always defined.
+     *
+     * When a radial area is generated, the defined accessor will be invoked for each element in the input data array, being passed the element d, the index i, and the array data as three arguments.
+     * If the given element is defined (i.e., if the defined accessor returns a truthy value for this element),
+     * the startAngle, endAngle, innerRadius and outerRadius accessors will subsequently be evaluated and the point will be added to the current area segment.
+     *
+     * Otherwise, the element will be skipped, the current area segment will be ended, and a new area segment will be generated for the next defined point.
+     * As a result, the generated area may have several discrete segments.
+     *
+     * Note that if an area segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps.
+     * In addition, some curves such as curveCardinalOpen only render a visible segment if it contains multiple points.
+     *
+     * @param defined A boolean constant.
+     */
+    defined(defined: boolean): this;
+    /**
+     * Sets the defined accessor to the specified function and returns this radial area generator.
+     *
+     * The default accessor for defined returns a constant boolean value of true, thus assumes that the input data is always defined.
+     *
+     * When a radial area is generated, the defined accessor will be invoked for each element in the input data array, being passed the element d, the index i, and the array data as three arguments.
+     * If the given element is defined (i.e., if the defined accessor returns a truthy value for this element),
+     * the startAngle, endAngle, innerRadius and outerRadius accessors will subsequently be evaluated and the point will be added to the current area segment.
+     *
+     * Otherwise, the element will be skipped, the current area segment will be ended, and a new area segment will be generated for the next defined point.
+     * As a result, the generated area may have several discrete segments.
+     *
+     * Note that if an area segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps.
+     * In addition, some curves such as curveCardinalOpen only render a visible segment if it contains multiple points.
+     *
+     * @param defined An accessor function which returns a boolean value. The accessor will be invoked for each defined element in the input data array,
+     * being passed the element d, the index i, and the array data as three arguments.
+     */
+    defined(defined: (d: Datum, index: number, data: Datum[]) => boolean): this;
+
+    /**
+     * Returns the current curve factory, which defaults to curveLinear.
+     */
+    curve(): CurveFactory;
+    /**
+     * Returns the current curve factory, which defaults to curveLinear.
+     *
+     * The generic allows to cast the curve factory to a specific type, if known.
+     */
+    // eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+    curve<C extends CurveFactory>(): C;
+    /**
+     * Sets the curve factory and returns this radial area generator.
+     *
+     * Note that curveMonotoneX or curveMonotoneY are not recommended for radial areas because they assume that the data is monotonic in x or y, which is typically untrue of radial areas.
+     *
+     * @param curve A valid curve factory.
+     */
+    curve(curve: CurveFactory): this;
+
+    /**
+     * Returns the current rendering context, which defaults to null.
+     */
+    context(): CanvasRenderingContext2D | null;
+    /**
+     * Equivalent to line.context.
+     */
+    context(context: CanvasRenderingContext2D | null): this;
+
+    /**
+     * Returns a new radial line generator that has this radial area generator’s current defined accessor, curve and context.
+     * The line’s angle accessor is this area’s start angle accessor, and the line’s radius accessor is this area’s inner radius accessor.
+     */
+    lineStartAngle(): LineRadial<Datum>;
+
+    /**
+     * Returns a new radial line generator that has this radial area generator’s current defined accessor, curve and context.
+     * The line’s angle accessor is this area’s start angle accessor, and the line’s radius accessor is this area’s inner radius accessor.
+     */
+    lineInnerRadius(): LineRadial<Datum>;
+
+    /**
+     * Returns a new radial line generator that has this radial area generator’s current defined accessor, curve and context.
+     * The line’s angle accessor is this area’s end angle accessor, and the line’s radius accessor is this area’s inner radius accessor.
+     */
+    lineEndAngle(): LineRadial<Datum>;
+
+    /**
+     * Returns a new radial line generator that has this radial area generator’s current defined accessor, curve and context.
+     * The line’s angle accessor is this area’s start angle accessor, and the line’s radius accessor is this area’s outer radius accessor.
+     */
+    lineOuterRadius(): LineRadial<Datum>;
+}
+
+/**
+ * Constructs a new radial area generator with the default settings.
+ *
+ * Ensure that the accessors used with the area generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ */
+export function areaRadial(): AreaRadial<[number, number]>;
+/**
+ * Constructs a new radial area generator with the default settings.
+ *
+ * Ensure that the accessors used with the area generator correspond to the arguments passed into them,
+ * or set them to constants as appropriate.
+ *
+ * The generic refers to the data type of an element in the input array passed into the radial area generator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function areaRadial<Datum>(): AreaRadial<Datum>;
+
+/**
+ * @deprecated Use AreaRadial interface
+ */
+export type RadialArea<Datum> = AreaRadial<Datum>;
+
+/**
+ * @deprecated Use areaRadial()
+ */
+export function radialArea(): RadialArea<[number, number]>;
+/**
+ * @deprecated Use areaRadial<Datum>()
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function radialArea<Datum>(): RadialArea<Datum>;
+
+// -----------------------------------------------------------------------------------
+// Curve Factories
+// -----------------------------------------------------------------------------------
+
+/**
+ * A minimal interface for a curve generator which supports only the rendering of lines.
+ * Methods for related to the rendering of areas are not implemented in this minimal interface.
+ *
+ * While lines are defined as a sequence of two-dimensional [x, y] points,
+ * there remains the task of transforming this discrete representation into a continuous shape: i.e., how to interpolate between the points.
+ * A curve generator serves this purpose.
+ *
+ * Curves are typically not constructed or used directly, instead being passed to line.curve.
+ */
+export interface CurveGeneratorLineOnly {
+    /**
+     * Indicates the start of a new line segment. Zero or more points will follow.
+     */
+    lineStart(): void;
+    /**
+     * Indicates the end of the current line segment.
+     */
+    lineEnd(): void;
+    /**
+     * Indicates a new point in the current line segment with the given x- and y-values.
+     */
+    point(x: number, y: number): void;
+}
+
+/**
+ * A factory for curve generators addressing only lines, but not areas.
+ */
+export type CurveFactoryLineOnly =
+    /**
+     * Returns a "lines only" curve generator which renders to the specified context.
+     *
+     * @param context A rendering context.
+     */
+    (context: CanvasRenderingContext2D | Path) => CurveGeneratorLineOnly;
+
+/**
+ * A minimal interface for a curve generator which supports the rendering of lines and areas.
+ *
+ * While lines are defined as a sequence of two-dimensional [x, y] points,
+ * and areas are similarly defined by a topline and a baseline,
+ * there remains the task of transforming this discrete representation into a continuous shape: i.e., how to interpolate between the points.
+ * A curve generator serves this purpose.
+ *
+ * Curves are typically not constructed or used directly, instead being passed to line.curve and area.curve.
+ */
+export interface CurveGenerator extends CurveGeneratorLineOnly {
+    /**
+     * Indicates the start of a new area segment.
+     * Each area segment consists of exactly two line segments: the topline, followed by the baseline, with the baseline points in reverse order.
+     */
+    areaStart(): void;
+    /**
+     * Indicates the end of the current area segment.
+     */
+    areaEnd(): void;
+}
+
+/**
+ * A factory for curve generators addressing both lines and areas.
+ */
+export type CurveFactory =
+    /**
+     * Returns a curve generator which renders to the specified context.
+     *
+     * @param context A rendering context.
+     */
+    (context: CanvasRenderingContext2D | Path) => CurveGenerator;
+
+/**
+ * A curve factory for cubic basis spline generators.
+ *
+ * The curve generators produce a cubic basis spline using the specified control points.
+ * The first and last points are triplicated such that the spline starts at the first point and ends at the last point,
+ * and is tangent to the line between the first and second points, and to the line between the penultimate and last points.
+ */
+export const curveBasis: CurveFactory;
+
+/**
+ * A curve factory for closed cubic basis spline generators.
+ *
+ * The curve generators produce a closed cubic basis spline using the specified control points.
+ * When a line segment ends, the first three control points are repeated, producing a closed loop with C2 continuity.
+ */
+export const curveBasisClosed: CurveFactory;
+
+/**
+ * A curve factory for open cubic basis spline generators.
+ *
+ * The curve generators produce a cubic basis spline using the specified control points.
+ * Unlike basis, the first and last points are not repeated, and thus the curve typically does not intersect these points.
+ */
+export const curveBasisOpen: CurveFactory;
+
+/**
+ * Produces a Bézier curve between each pair of points, with horizontal tangents at each point.
+ */
+export const curveBumpX: CurveFactory;
+
+/**
+ * Produces a Bézier curve between each pair of points, with vertical tangents at each point.
+ */
+export const curveBumpY: CurveFactory;
+
+/**
+ * A curve factory for straightened cubic basis spline generators.
+ *
+ * The curve generators produce a straightened cubic basis spline using the specified control points,
+ * with the spline straightened according to the curve’s beta, which defaults to 0.85.
+ * This curve is typically used in hierarchical edge bundling to disambiguate connections,
+ * as proposed by Danny Holten in Hierarchical Edge Bundles: Visualization of Adjacency Relations in Hierarchical Data.
+ *
+ * This curve does not implement curve.areaStart and curve.areaEnd; it is intended to work with d3.line, not d3.area.
+ */
+export interface CurveBundleFactory extends CurveFactoryLineOnly {
+    /**
+     * Returns a bundle curve factory with the specified beta in the range [0, 1], representing the bundle strength.
+     * If beta equals zero, a straight line between the first and last point is produced; if beta equals one,
+     * a standard basis spline is produced.
+     *
+     * @param beta A constant value in the [0, 1] interval.
+     */
+    beta(beta: number): this;
+}
+
+/**
+ * A curve factory for straightened cubic basis spline generators.
+ *
+ * The curve generators produce a straightened cubic basis spline using the specified control points,
+ * with the spline straightened according to the curve’s beta, which defaults to 0.85.
+ * This curve is typically used in hierarchical edge bundling to disambiguate connections,
+ * as proposed by Danny Holten in Hierarchical Edge Bundles: Visualization of Adjacency Relations in Hierarchical Data.
+ *
+ * This curve does not implement curve.areaStart and curve.areaEnd; it is intended to work with d3.line, not d3.area.
+ */
+export const curveBundle: CurveBundleFactory;
+
+/**
+ * A curve factory for cubic cardinal spline generators.
+ */
+export interface CurveCardinalFactory extends CurveFactory {
+    /**
+     * Returns a cardinal curve factory with the specified tension in the range [0, 1].
+     * The tension determines the length of the tangents: a tension of one yields all zero tangents, equivalent to curveLinear; a tension of zero produces a uniform Catmull–Rom spline.
+     *
+     * @param tension A constant in the [0, 1] interval.
+     */
+    tension(tension: number): this;
+}
+
+/**
+ * A curve factory for cubic cardinal spline generators.
+ *
+ * The curve generators produce a cubic cardinal spline using the specified control points, with one-sided differences used for the first and last piece.
+ * The default tension is 0.
+ */
+export const curveCardinal: CurveCardinalFactory;
+
+/**
+ * A curve factory for closed cubic cardinal spline generators.
+ *
+ * The curve generators produce closed cubic cardinal spline using the specified control points.
+ * When a line segment ends, the first three control points are repeated, producing a closed loop.
+ * The default tension is 0.
+ */
+export const curveCardinalClosed: CurveCardinalFactory;
+
+/**
+ * A curve factory for open cubic cardinal spline generators.
+ *
+ * The curve generators produce a cubic cardinal spline using the specified control points.
+ * Unlike curveCardinal, one-sided differences are not used for the first and last piece,
+ * and thus the curve starts at the second point and ends at the penultimate point.
+ * The default tension is 0.
+ */
+export const curveCardinalOpen: CurveCardinalFactory;
+
+/**
+ * A curve factory for cubic Catmull–Rom spline generators.
+ */
+export interface CurveCatmullRomFactory extends CurveFactory {
+    /**
+     * Returns a cubic Catmull–Rom curve factory with the specified alpha in the range [0, 1].
+     * If alpha is zero, produces a uniform spline, equivalent to curveCardinal with a tension of zero;
+     * if alpha is one, produces a chordal spline; if alpha is 0.5, produces a centripetal spline.
+     * Centripetal splines are recommended to avoid self-intersections and overshoot.
+     *
+     * @param alpha A constant in the [0, 1] interval.
+     */
+    alpha(alpha: number): this;
+}
+
+/**
+ * A curve factory for cubic Catmull–Rom spline generators.
+ *
+ * The curve generators produce a cubic Catmull–Rom spline using the specified control points and the parameter alpha,
+ * which defaults to 0.5, as proposed by Yuksel et al. in On the Parameterization of Catmull–Rom Curves,
+ * with one-sided differences used for the first and last piece.
+ */
+export const curveCatmullRom: CurveCatmullRomFactory;
+
+/**
+ * A curve factory for cubic Catmull–Rom spline generators.
+ *
+ * The curve generators produce a closed cubic Catmull–Rom spline using the specified control points and the parameter alpha,
+ * which defaults to 0.5, as proposed by Yuksel et al. When a line segment ends,
+ * the first three control points are repeated, producing a closed loop.
+ */
+export const curveCatmullRomClosed: CurveCatmullRomFactory;
+
+/**
+ * A curve factory for cubic Catmull–Rom spline generators.
+ *
+ * The curve generators produce a cubic Catmull–Rom spline using the specified control points and the parameter alpha,
+ * which defaults to 0.5, as proposed by Yuksel et al. Unlike curveCatmullRom, one-sided differences are not used for the first and last piece,
+ * and thus the curve starts at the second point and ends at the penultimate point.
+ */
+export const curveCatmullRomOpen: CurveCatmullRomFactory;
+
+/**
+ * A curve factory for polyline generators.
+ *
+ * The curve generators produce a polyline through the specified points.
+ */
+export const curveLinear: CurveFactory;
+
+/**
+ * A curve factory for closed polyline generators.
+ *
+ * The curve generators produce a closed polyline through the specified points by repeating the first point when the line segment ends.
+ */
+export const curveLinearClosed: CurveFactory;
+
+/**
+ * A curve factory for cubic spline generators preserving monotonicity in y.
+ *
+ * The curve generators produce a cubic spline that preserves monotonicity in y, assuming monotonicity in x, as proposed by Steffen in A simple method for monotonic interpolation in one dimension:
+ * “a smooth curve with continuous first-order derivatives that passes through any given set of data points without spurious oscillations.
+ * Local extrema can occur only at grid points where they are given by the data, but not in between two adjacent grid points.”
+ */
+export const curveMonotoneX: CurveFactory;
+
+/**
+ * A curve factory for cubic spline generators preserving monotonicity in x.
+ *
+ * The curve generators produce a cubic spline that preserves monotonicity in x, assuming monotonicity in y, as proposed by Steffen in A simple method for monotonic interpolation in one dimension:
+ * “a smooth curve with continuous first-order derivatives that passes through any given set of data points without spurious oscillations.
+ * Local extrema can occur only at grid points where they are given by the data, but not in between two adjacent grid points.”
+ */
+export const curveMonotoneY: CurveFactory;
+
+/**
+ * A curve factory for natural cubic spline generators.
+ *
+ * The curve generators produce a natural cubic spline with the second derivative of the spline set to zero at the endpoints.
+ */
+export const curveNatural: CurveFactory;
+
+/**
+ * A curve factory for step function (midpoint) generators.
+ *
+ * The curve generators produce a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines.
+ * The y-value changes at the midpoint of each pair of adjacent x-values.
+ */
+export const curveStep: CurveFactory;
+
+/**
+ * A curve factory for step function (after) generators.
+ *
+ * The curve generators produce a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines.
+ * The y-value changes after the x-value.
+ */
+export const curveStepAfter: CurveFactory;
+
+/**
+ * A curve factory for step function (before) generators.
+ *
+ * The curve generators produce a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines.
+ * The y-value changes before the x-value.
+ */
+export const curveStepBefore: CurveFactory;
+
+// -----------------------------------------------------------------------------------
+// LINKS
+// -----------------------------------------------------------------------------------
+
+/**
+ * An interface describing the default Link Data structure expected
+ * by the Link and LinkRadial generators.
+ */
+export interface DefaultLinkObject {
+    /**
+     * Source node of the link.
+     *
+     * For a link in a Cartesian coordinate system, the two element array contains
+     * the coordinates [x, y].
+     *
+     * For a radial link, the two element array contains
+     * the coordinates [angle, radius]. The angle is stated in radians, with 0 at -y (12 o’clock).
+     * The radius measures the distance from the origin ⟨0,0⟩.
+     */
+    source: [number, number];
+    /**
+     * Target node of the link.
+     *
+     * For a link in a Cartesian coordinate system, the two element array contains
+     * the coordinates [x, y].
+     *
+     * For a radial link, the two element array contains
+     * the coordinates [angle, radius]. The angle is stated in radians, with 0 at -y (12 o’clock).
+     * The radius measures the distance from the origin ⟨0,0⟩.
+     */
+    target: [number, number];
+}
+
+/**
+ * A link generator for a Cartesian coordinate system. The link shape generates a smooth cubic Bézier curve from a
+ * source point to a target point. The tangents of the curve at the start and end are either vertical, horizontal.
+ *
+ * The first generic corresponds to the type of the "this" context within which the link generator and its accessor functions will be invoked.
+ *
+ * The second generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The third generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+export interface Link<This, LinkDatum, NodeDatum> {
+    /**
+     * Generates a link for the given arguments.
+     *
+     * IMPORTANT: If the rendering context of the link generator is null,
+     * then the link is returned as a path data string.
+     *
+     * The "this" context within which this function is invoked, will be the context within which the accessor methods of the generator are invoked.
+     * All arguments passed into this function, will be passed to the accessor functions of the generator.
+     *
+     * @param d The datum for which the link is to be generated.
+     */
+    (this: This, d: LinkDatum, ...args: any[]): string | null;
+    /**
+     * Generates an link for the given arguments.
+     *
+     * IMPORTANT: If the link generator has been configured with a rendering context,
+     * then the link is rendered to this context as a sequence of path method calls and this function returns void.
+     *
+     * The "this" context within which this function is invoked, will be the context within which the accessor methods of the generator are invoked.
+     * All arguments passed into this function, will be passed to the accessor functions of the generator.
+     *
+     * @param d The datum for which the link is to be generated.
+     */
+    (this: This, d: LinkDatum, ...args: any[]): void;
+
+    /**
+     * Returns the current source node accessor function.
+     * The default source accessor function returns a two element array [x, y].
+     */
+    source(): (this: This, d: LinkDatum, ...args: any[]) => NodeDatum;
+    /**
+     * Sets the source accessor to the specified function and returns this link generator.
+     *
+     * @param source Source node accessor function. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the link generator. The default target accessor function returns a two element array [x, y].
+     */
+    source(source: (this: This, d: LinkDatum, ...args: any[]) => NodeDatum): this;
+
+    /**
+     * Returns the current target node accessor function.
+     * The default target accessor function returns a two element array [x, y].
+     */
+    target(): (this: This, d: LinkDatum, ...args: any[]) => NodeDatum;
+    /**
+     * Sets the target accessor to the specified function and returns this link generator.
+     *
+     * @param target Target node accessor function. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the link generator. The default target accessor function returns a two element array [x, y].
+     */
+    target(target: (this: This, d: LinkDatum, ...args: any[]) => NodeDatum): this;
+
+    /**
+     * Returns the current x-accessor, which defaults to a function accepting an number array
+     * as its argument an returning the first element of the array.
+     */
+    x(): (this: This, node: NodeDatum, ...args: any[]) => number;
+    /**
+     * Sets the x-accessor to the specified function and returns this link generator.
+     *
+     * @param x x-coordinate accessor function. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives as its first argument a node object followed by all additional arguments that were passed into the link generator.
+     */
+    x(x: (this: This, node: NodeDatum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current y-accessor, which defaults to a function accepting an number array
+     * as its argument an returning the second element of the array.
+     */
+    y(): (this: This, node: NodeDatum, ...args: any[]) => number;
+    /**
+     * Sets the y-accessor to the specified function and returns this link generator.
+     *
+     * @param y y-coordinate accessor function. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives as its first argument a node object followed by all additional arguments that were passed into the link generator.
+     */
+    y(y: (this: This, node: NodeDatum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current rendering context, which defaults to null.
+     */
+    context(): CanvasRenderingContext2D | null;
+    /**
+     * Sets the context and returns this link generator.
+     */
+    context(context: CanvasRenderingContext2D | null): this;
+}
+
+/**
+ * Returns a new link generator using the specified curve. For example, to visualize links in a tree diagram rooted on the top edge of the display
+ *
+ * With the default settings the link generator accepts a link object conforming to the DefaultLinkObject interface.
+ */
+export function link(curve: CurveFactory): Link<any, DefaultLinkObject, [number, number]>;
+/**
+ * Returns a new link generator using the specified curve. For example, to visualize links in a tree diagram rooted on the top edge of the display
+ *
+ * Important: Ensure that the accessor functions are configured to work with the link and node datum types
+ * specified in the generics.
+ *
+ * The first generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The second generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function link<LinkDatum, NodeDatum>(curve: CurveFactory): Link<any, LinkDatum, NodeDatum>;
+/**
+ * Returns a new link generator using the specified curve. For example, to visualize links in a tree diagram rooted on the top edge of the display
+ *
+ * Important: Ensure that the accessor functions are configured to work with the link and node datum types
+ * specified in the generics.
+ *
+ * The first generic corresponds to the type of the "this" context within which the link generator and its accessor functions will be invoked.
+ *
+ * The second generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The third generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function link<This, LinkDatum, NodeDatum>(curve: CurveFactory): Link<This, LinkDatum, NodeDatum>;
+
+/**
+ * Shorthand for d3.link with d3.curveBumpX; suitable for visualizing links in a tree diagram rooted on the left edge of the display.
+ *
+ * With the default settings the link generator accepts a link object conforming to the DefaultLinkObject interface.
+ */
+export function linkHorizontal(): Link<any, DefaultLinkObject, [number, number]>;
+/**
+ * Shorthand for d3.link with d3.curveBumpX; suitable for visualizing links in a tree diagram rooted on the left edge of the display.
+ *
+ * Important: Ensure that the accessor functions are configured to work with the link and node datum types
+ * specified in the generics.
+ *
+ * The first generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The second generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function linkHorizontal<LinkDatum, NodeDatum>(): Link<any, LinkDatum, NodeDatum>;
+/**
+ * Shorthand for d3.link with d3.curveBumpX; suitable for visualizing links in a tree diagram rooted on the left edge of the display.
+ *
+ * Important: Ensure that the accessor functions are configured to work with the link and node datum types
+ * specified in the generics.
+ *
+ * The first generic corresponds to the type of the "this" context within which the link generator and its accessor functions will be invoked.
+ *
+ * The second generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The third generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function linkHorizontal<This, LinkDatum, NodeDatum>(): Link<This, LinkDatum, NodeDatum>;
+
+/**
+ * Shorthand for d3.link with d3.curveBumpX; suitable for visualizing links in a tree diagram rooted on the left edge of the display.
+ *
+ * With the default settings the link generator accepts a link object conforming to the DefaultLinkObject interface.
+ */
+export function linkVertical(): Link<any, DefaultLinkObject, [number, number]>;
+/**
+ * Shorthand for d3.link with d3.curveBumpY; suitable for visualizing links in a tree diagram rooted on the top edge of the display.
+ *
+ * Important: Ensure that the accessor functions are configured to work with the link and node datum types
+ * specified in the generics.
+ *
+ * The first generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The second generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function linkVertical<LinkDatum, NodeDatum>(): Link<any, LinkDatum, NodeDatum>;
+/**
+ * Shorthand for d3.link with d3.curveBumpY; suitable for visualizing links in a tree diagram rooted on the top edge of the display.
+ *
+ * Important: Ensure that the accessor functions are configured to work with the link and node datum types
+ * specified in the generics.
+ *
+ * The first generic corresponds to the type of the "this" context within which the link generator and its accessor functions will be invoked.
+ *
+ * The second generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The third generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function linkVertical<This, LinkDatum, NodeDatum>(): Link<This, LinkDatum, NodeDatum>;
+
+/**
+ * Shorthand for d3.link with d3.curveBumpY; suitable for visualizing links in a tree diagram rooted on the top edge of the display.
+ *
+ * The first generic corresponds to the type of the "this" context within which the radial link generator and its accessor functions will be invoked.
+ *
+ * The second generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The third generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+export interface LinkRadial<This, LinkDatum, NodeDatum> {
+    /**
+     * Generates a radial link for the given arguments.
+     *
+     * IMPORTANT: If the rendering context of the radial link generator is null,
+     * then the link is returned as a path data string.
+     *
+     * The "this" context within which this function is invoked, will be the context within which the accessor methods of the generator are invoked.
+     * All arguments passed into this function, will be passed to the accessor functions of the generator.
+     *
+     * @param d The datum for which the link is to be generated.
+     */
+    (this: This, d: LinkDatum, ...args: any[]): string | null;
+    /**
+     * Generates an link for the given arguments.
+     *
+     * IMPORTANT: If the radial link generator has been configured with a rendering context,
+     * then the link is rendered to this context as a sequence of path method calls and this function returns void.
+     *
+     * The "this" context within which this function is invoked, will be the context within which the accessor methods of the generator are invoked.
+     * All arguments passed into this function, will be passed to the accessor functions of the generator.
+     *
+     * @param d The datum for which the link is to be generated.
+     */
+    (this: This, d: LinkDatum, ...args: any[]): void;
+
+    /**
+     * Returns the current source node accessor function.
+     * The default source accessor function returns a two element array [x, y].
+     */
+    source(): (this: This, d: LinkDatum, ...args: any[]) => NodeDatum;
+    /**
+     * Sets the source accessor to the specified function and returns this radial link generator.
+     *
+     * @param source Source node accessor function. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the radial link generator. The default target accessor function returns a two element array [x, y].
+     */
+    source(source: (this: This, d: LinkDatum, ...args: any[]) => NodeDatum): this;
+
+    /**
+     * Returns the current target node accessor function.
+     * The default target accessor function returns a two element array [x, y].
+     */
+    target(): (this: This, d: LinkDatum, ...args: any[]) => NodeDatum;
+    /**
+     * Sets the target accessor to the specified function and returns this radial link generator.
+     *
+     * @param target Target node accessor function. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the radial link generator. The default target accessor function returns a two element array [x, y].
+     */
+    target(target: (this: This, d: LinkDatum, ...args: any[]) => NodeDatum): this;
+
+    /**
+     * Returns the current angle accessor, which defaults to a function accepting an number array
+     * as its argument an returning the first element of the array.
+     */
+    angle(): (this: This, node: NodeDatum, ...args: any[]) => number;
+    /**
+     * Sets the angle accessor to the specified function and returns this radial link generator.
+     * The angle is stated in radians, with 0 at -y (12 o’clock).
+     *
+     * @param angle Angle accessor function. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives as its first argument a node object followed by all additional arguments that were passed into the radial link generator.
+     */
+    angle(angle: (this: This, node: NodeDatum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current radius accessor, which defaults to a function accepting an number array
+     * as its argument an returning the second element of the array.
+     */
+    radius(): (this: This, node: NodeDatum, ...args: any[]) => number;
+    /**
+     * Sets the radius accessor to the specified function and returns this radial link generator.
+     * The radius is measured as the distance from the origin ⟨0,0⟩.
+     *
+     * @param radius Radius accessor function. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives as its first argument a node object followed by all additional arguments that were passed into the radial link generator.
+     */
+    radius(radius: (this: This, node: NodeDatum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current rendering context, which defaults to null.
+     */
+    context(): CanvasRenderingContext2D | null;
+    /**
+     * Sets the context and returns this link generator.
+     */
+    context(context: CanvasRenderingContext2D | null): this;
+}
+
+/**
+ * @deprecated Use LinkRadial interface
+ */
+export type RadialLink<This, LinkDatum, NodeDatum> = LinkRadial<This, LinkDatum, NodeDatum>;
+
+/**
+ * Constructs a new default link generator with radial tangents, for example, to visualize links in a tree diagram
+ * rooted in the center of the display.
+ *
+ * With the default settings the link generator accepts a link object conforming to the DefaultLinkObject interface.
+ */
+export function linkRadial(): LinkRadial<any, DefaultLinkObject, [number, number]>;
+/**
+ * Constructs a new link generator with radial tangents, for example, to visualize links in a tree diagram
+ * rooted in the center of the display.
+ *
+ * Important: Ensure that the accessor functions are configured to work with the link and node datum types
+ * specified in the generics.
+ *
+ * The first generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The second generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function linkRadial<LinkDatum, NodeDatum>(): LinkRadial<any, LinkDatum, NodeDatum>;
+/**
+ * Constructs a new link generator with radial tangents, for example, to visualize links in a tree diagram
+ * rooted in the center of the display.
+ *
+ * Important: Ensure that the accessor functions are configured to work with the link and node datum types
+ * specified in the generics.
+ *
+ * The first generic corresponds to the type of the "this" context within which the link generator and its accessor functions will be invoked.
+ *
+ * The second generic corresponds to the datum type of the link object for which the link is to be generated.
+ *
+ * The third generic corresponds to the datum type of the source/target node contained in the link object.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function linkRadial<This, LinkDatum, NodeDatum>(): LinkRadial<This, LinkDatum, NodeDatum>;
+
+// -----------------------------------------------------------------------------------
+// SYMBOLS
+// -----------------------------------------------------------------------------------
+
+/**
+ * A Symbol Type.
+ *
+ * Symbol types are typically not used directly, instead being passed to symbol.type.
+ * However, you can define your own symbol type implementation should none of the built-in types satisfy your needs using the following interface.
+ * You can also use this low-level interface with a built-in symbol type as an alternative to the symbol generator.
+ */
+export interface SymbolType {
+    /**
+     * Renders this symbol type to the specified context with the specified size in square pixels. The context implements the CanvasPath interface.
+     * (Note that this is a subset of the CanvasRenderingContext2D interface!)
+     *
+     * @param context A rendering context implementing CanvasPath.
+     * @param size Size of the symbol to draw.
+     */
+    draw(context: CanvasPath_D3Shape, size: number): void;
+}
+
+/**
+ * A symbol generator.
+ *
+ * Symbols provide a categorical shape encoding as is commonly used in scatterplots. Symbols are always centered at ⟨0,0⟩;
+ * use a transform (see: SVG, Canvas) to move the arc to a different position.
+ *
+ * The first generic corresponds to the "this" context within which the symbol generator is invoked.
+ * The second generic corresponds to the data type of the datum underlying the symbol.
+ */
+export interface Symbol<This, Datum> {
+    /**
+     * Generates a symbol for the given arguments.
+     *
+     * IMPORTANT: If the rendering context of the symbol generator is null,
+     * then the symbol is returned as a path data string.
+     *
+     * The "this" context within which this function is invoked, will be the context within which the accessor methods of the generator are invoked.
+     * All arguments passed into this function, will be passed to the accessor functions of the generator.
+     *
+     * For example, with the default settings, no arguments are needed to produce a circle with area 64 square pixels.
+     *
+     * @param d The datum for which the symbol is to be generated.
+     */
+    (this: This, d?: Datum, ...args: any[]): string | null;
+    /**
+     * Generates an symbol for the given arguments.
+     *
+     * IMPORTANT: If the symbol generator has been configured with a rendering context,
+     * then the symbol is rendered to this context as a sequence of path method calls and this function returns void.
+     *
+     * The "this" context within which this function is invoked, will be the context within which the accessor methods of the generator are invoked.
+     * All arguments passed into this function, will be passed to the accessor functions of the generator.
+     *
+     * For example, with the default settings, no arguments are needed to produce a circle with area 64 square pixels.
+     *
+     * @param d The datum for which the symbol is to be generated.
+     */
+    (this: This, d?: Datum, ...args: any[]): void;
+    /**
+     * Returns the current size accessor, which defaults to a function returning a constant value of 64.
+     */
+    size(): (this: This, d: Datum, ...args: any[]) => number;
+    /**
+     * Sets the size to the specified number and returns this symbol generator.
+     *
+     * @param size A fixed size (area in square pixels).
+     */
+    size(size: number): this;
+    /**
+     * Sets the size to the specified function and returns this symbol generator.
+     *
+     * Specifying the size as a function is useful for constructing a scatterplot with a size encoding.
+     * If you wish to scale the symbol to fit a given bounding box, rather than by area, try SVG’s getBBox.
+     *
+     * @param size An accessor function returning a number to be used as a symbol size. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the symbol generator.
+     */
+    size(size: (this: This, d: Datum, ...args: any[]) => number): this;
+
+    /**
+     * Returns the current symbol type accessor, which defaults to a function returning the circle symbol type.
+     */
+    type(): (this: This, d: Datum, ...args: any[]) => SymbolType;
+    /**
+     * Sets the symbol type to the specified symbol type and returns this symbol generator.
+     *
+     * @param type A constant symbol type.
+     */
+    type(type: SymbolType): this;
+    /**
+     * Sets the symbol type to the specified function and returns this symbol generator.
+     *
+     * @param type An accessor function returning a symbol type. The accessor function is invoked in the same "this" context as the generator was invoked in and
+     * receives the same arguments that were passed into the symbol generator. See symbols for the set of built-in symbol types.
+     * To implement a custom symbol type, return an object that implements symbolType.draw.
+     */
+    type(type: (this: This, d: Datum, ...args: any[]) => SymbolType): this;
+
+    /**
+     * Returns the current rendering context, which defaults to null.
+     */
+    context(): CanvasRenderingContext2D | null;
+    /**
+     * Sets the context and returns this symbol generator.
+     */
+    context(context: CanvasRenderingContext2D | null): this;
+}
+
+/**
+ * Constructs a new symbol generator of the specified type and size.
+ * If not specified, type defaults to a circle, and size defaults to 64.
+ *
+ * The first generic corresponds to the "this" context within which the symbol generator is invoked.
+ * The second generic corresponds to the data type of the datum underlying the symbol.
+ *
+ * @param type The specified type.
+ * @param size The specified size.
+ */
+export function symbol<Datum = any>(
+    type?: SymbolType | ((this: any, d: Datum, ...args: any[]) => SymbolType),
+    size?: number | ((this: any, d: Datum, ...args: any[]) => number),
+): Symbol<any, Datum>;
+
+/**
+ * Constructs a new symbol generator of the specified type and size.
+ * If not specified, type defaults to a circle, and size defaults to 64.
+ *
+ * The first generic corresponds to the "this" context within which the symbol generator is invoked.
+ * The second generic corresponds to the data type of the datum underlying the symbol.
+ *
+ * @param type The specified type.
+ * @param size The specified size.
+ */
+export function symbol<This, Datum>(
+    type?: SymbolType | ((this: This, d: Datum, ...args: any[]) => SymbolType),
+    size?: number | ((this: This, d: Datum, ...args: any[]) => number),
+): Symbol<This, Datum>;
+
+/**
+ * An array containing a set of symbol types designed for filling: circle, cross, diamond, square, star, triangle, and wye.
+ * Useful for constructing the range of an ordinal scale should you wish to use a shape encoding for categorical data.
+ */
+export const symbolsFill: SymbolType[];
+
+/**
+ * An array containing a set of symbol types designed for stroking: circle, plus, x, triangle2, asterisk, square2, and diamond2.
+ * Useful for constructing the range of an ordinal scale should you wish to use a shape encoding for categorical data.
+ */
+export const symbolsStroke: SymbolType[];
+
+/**
+ * @deprecated Use symbolsFill
+ */
+export const symbols: SymbolType[];
+
+/**
+ * The asterisk symbol type; intended for stroking.
+ */
+export const symbolAsterisk: SymbolType;
+
+/**
+ * The circle symbol type; intended for either filling or stroking.
+ */
+export const symbolCircle: SymbolType;
+
+/**
+ * The Greek cross symbol type, with arms of equal length; intended for filling.
+ */
+export const symbolCross: SymbolType;
+
+/**
+ * The rhombus symbol type; intended for filling.
+ */
+export const symbolDiamond: SymbolType;
+
+/**
+ * The rotated square symbol type; intended for stroking.
+ */
+export const symbolDiamond2: SymbolType;
+
+/**
+ * The plus symbol type; intended for stroking.
+ */
+export const symbolPlus: SymbolType;
+
+/**
+ * The square symbol type; intended for filling.
+ */
+export const symbolSquare: SymbolType;
+
+/**
+ * The square2 symbol type; intended for stroking.
+ */
+export const symbolSquare2: SymbolType;
+
+/**
+ * The pentagonal star (pentagram) symbol type; intended for filling.
+ */
+export const symbolStar: SymbolType;
+
+/**
+ * The up-pointing triangle symbol type; intended for filling.
+ */
+export const symbolTriangle: SymbolType;
+
+/**
+ * The up-pointing triangle symbol type; intended for stroking.
+ */
+export const symbolTriangle2: SymbolType;
+
+/**
+ * The Y-shape symbol type; intended for filling.
+ */
+export const symbolWye: SymbolType;
+
+/**
+ * The X-shape symbol type; intended for stroking.
+ */
+export const symbolX: SymbolType;
+
+/**
+ * The X-shape symbol type; intended for stroking.
+ */
+export const symbolTimes: SymbolType;
+
+// -----------------------------------------------------------------------------------
+// pointRadial
+// -----------------------------------------------------------------------------------
+
+/**
+ * Returns the point [x, y] for the given angle and the given radius.
+ * @param angle Angle in radians, with 0 at -y (12 o’clock) and positive angles proceeding clockwise.
+ * @param radius Radius.
+ */
+export function pointRadial(angle: number, radius: number): [number, number];
+
+// -----------------------------------------------------------------------------------
+// STACKS
+// -----------------------------------------------------------------------------------
+
+/**
+ * Each series point j in a stack chart corresponds to the jth element in the input data.
+ * Each point is represented as an array [y0, y1] where y0 is the lower value (baseline) and y1 is the upper value (topline);
+ * the difference between y0 and y1 corresponds to the computed value for this point.
+ *
+ * SeriesPoint is a [number, number] two-element Array with added data and index properties
+ * related to the data element which formed the basis for theSeriesPoint.
+ */
+export interface SeriesPoint<Datum> extends Array<number> {
+    /**
+     * Corresponds to y0, the lower value (baseline).
+     */
+    0: number;
+    /**
+     * Corresponds to y1, the upper value (topline).
+     */
+    1: number;
+    /**
+     * The data element underlying the series point.
+     */
+    data: Datum;
+}
+
+/**
+ * The series are determined by the keys accessor; each series i in the returned array corresponds to the ith key.
+ * Each series is an array of points, where each point j corresponds to the jth element in the input data.
+ *
+ * The key for each series is available as series.key, and the index as series.index.
+ */
+export interface Series<Datum, Key> extends Array<SeriesPoint<Datum>> {
+    /**
+     * Key of the series.
+     */
+    key: Key;
+    /**
+     * Index of the series in the series array returned by stack generator.
+     */
+    index: number;
+}
+
+/**
+ * A stack generator.
+ *
+ * Some shape types can be stacked, placing one shape adjacent to another.
+ * For example, a bar chart of monthly sales might be broken down into a multi-series bar chart by product category, stacking bars vertically.
+ * This is equivalent to subdividing a bar chart by an ordinal dimension (such as product category) and applying a color encoding.
+ *
+ * Stacked charts can show overall value and per-category value simultaneously; however, it is typically harder to compare across categories, as only the bottom layer of the stack is aligned.
+ * So, chose the stack order carefully, and consider a streamgraph. (See also grouped charts.)
+ *
+ * Like the pie generator, the stack generator does not produce a shape directly. Instead it computes positions which you can then pass to an area generator or use directly, say to position bars.
+ *
+ * The first generic corresponds to the "this" context in which the stack generator and its accessor functions are invoked.
+ *
+ * The second generic corresponds to the data type of an element in the data array passed into the stack generator.
+ *
+ * The third generic corresponds to the data type of key used to identify a series.
+ */
+export interface Stack<This, Datum, Key> {
+    /**
+     * Generates a stack for the given array of data, returning an array representing each series.
+     * The resulting array has one element per series. Each series in then typically passed to an area generator to render an area chart,
+     * or used to construct rectangles for a bar chart.
+     *
+     * Any additional arguments are arbitrary; they are simply propagated to the generator’s accessor functions along with the this object.
+     *
+     * @param data Array of data elements.
+     */
+    (data: Iterable<Datum>, ...args: any[]): Array<Series<Datum, Key>>;
+
+    /**
+     * Returns the current keys accessor, which defaults to the empty array.
+     */
+    keys(): (this: This, data: Datum[], ...args: any[]) => Key[];
+    /**
+     * Sets the keys accessor to the specified function or array and returns this stack generator.
+     * A series (layer) is generated for each key.
+     * Keys are typically strings, but they may be arbitrary values.
+     * The series’ key is passed to the value accessor, along with each data point, to compute the point’s value.
+     */
+    keys(keys: Iterable<Key> | ((this: This, data: Datum[], ...args: any[]) => Key[])): this;
+
+    /**
+     * Returns the current value accessor, which defaults to a function return the property corresponding to the relevant key from the data element.
+     *
+     * Thus, by default the stack generator assumes that the input data is an array of objects, with each object exposing named properties with numeric values; see stack for an example.
+     */
+    value(): (d: Datum, key: Key, i: number, data: Datum[]) => number;
+    /**
+     * Sets the value accessor to the specified number and returns this stack generator.
+     *
+     * @param value A constant value.
+     */
+    value(value: number): this;
+    /**
+     * Sets the value accessor to the specified function and returns this stack generator.
+     *
+     * @param value A value accessor function which returns the numeric value for a given data element and key combination. The accessor function is invoked for each data element and key being passed
+     * the datum, the key, index of the data element in the input data array, and the complete data array.
+     */
+    value(value: (d: Datum, key: Key, i: number, data: Datum[]) => number): this;
+
+    /**
+     * Returns the current order accessor, which defaults to stackOrderNone; this uses the order given by the key accessor.
+     */
+    order(): (series: Series<Datum, Key>) => Iterable<number>;
+    /**
+     * Sets the order accessor to the specified array and returns this stack generator.
+     */
+    order(order: null | Iterable<number>): this;
+    /**
+     * Sets the order accessor to the specified function and returns this stack generator.
+     *
+     * The stack order is computed prior to the offset; thus, the lower value for all points is zero at the time the order is computed.
+     * The index attribute for each series is also not set until after the order is computed.
+     *
+     * See stack orders for the built-in orders.
+     *
+     * @param order A function returning a sort order array. It is passed the generated series array and must return an array of numeric indexes representing the stack order.
+     */
+    order(order: (series: Series<Datum, Key>) => Iterable<number>): this;
+
+    /**
+     * Returns the current offset accessor, which defaults to stackOffsetNone; this uses a zero baseline.
+     */
+    offset(): (series: Series<Datum, Key>, order: number[]) => void;
+    /**
+     * Reset the offset to use stackOffsetNone; this uses a zero baseline.
+     *
+     * @param offset null to set to the default stackOffsetNone.
+     */
+    offset(offset: null): this;
+    /**
+     * Sets the offset accessor to the specified function and returns this stack generator.
+     *
+     * @param offset A function which is passed the generated series array and the order index array;
+     *               it is then responsible for updating the lower and upper values in the series array.
+     */
+    offset(offset: (series: Series<Datum, Key>, order: number[]) => void): this;
+}
+
+/**
+ * Constructs a new stack generator with the default settings.
+ *
+ * Ensure that the accessors used with the stack generator correspond to the arguments passed into them.
+ */
+export function stack(): Stack<any, { [key: string]: number }, string>;
+/**
+ * Constructs a new stack generator with the default settings.
+ *
+ * Ensure that the accessors used with the stack generator correspond to the arguments passed into them.
+ *
+ * The generic corresponds to the data type of an element in the data array passed into the stack generator.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function stack<Datum>(): Stack<any, Datum, string>;
+/**
+ * Constructs a new stack generator with the default settings.
+ *
+ * Ensure that the accessors used with the stack generator correspond to the arguments passed into them.
+ *
+ * The first generic corresponds to the data type of an element in the data array passed into the stack generator.
+ *
+ * The second generic corresponds to the data type of key used to identify a series.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function stack<Datum, Key>(): Stack<any, Datum, Key>;
+/**
+ * Constructs a new stack generator with the default settings.
+ *
+ * Ensure that the accessors used with the stack generator correspond to the arguments passed into them.
+ *
+ * The first generic corresponds to the "this" context in which the stack generator and its accessor functions are invoked.
+ *
+ * The second generic corresponds to the data type of an element in the data array passed into the stack generator.
+ *
+ * The third generic corresponds to the data type of key used to identify a series.
+ */
+// eslint-disable-next-line @definitelytyped/no-unnecessary-generics
+export function stack<This, Datum, Key>(): Stack<This, Datum, Key>;
+
+/**
+ * Returns a series order such that the earliest series (according to the maximum value) is at the bottom.
+ *
+ * @param series A series generated by a stack generator.
+ */
+export function stackOrderAppearance(series: Series<any, any>): number[];
+
+/**
+ * Returns a series order such that the smallest series (according to the sum of values) is at the bottom.
+ *
+ * @param series A series generated by a stack generator.
+ */
+export function stackOrderAscending(series: Series<any, any>): number[];
+
+/**
+ * Returns a series order such that the largest series (according to the sum of values) is at the bottom.
+ *
+ * @param series A series generated by a stack generator.
+ */
+export function stackOrderDescending(series: Series<any, any>): number[];
+
+/**
+ * Returns a series order such that the larger series (according to the sum of values) are on the inside and the smaller series are on the outside.
+ * This order is recommended for streamgraphs in conjunction with the wiggle offset. See Stacked Graphs—Geometry & Aesthetics by Byron & Wattenberg for more information.
+ *
+ * @param series A series generated by a stack generator.
+ */
+export function stackOrderInsideOut(series: Series<any, any>): number[];
+
+/**
+ * Returns the given series order [0, 1, … n - 1] where n is the number of elements in series. Thus, the stack order is given by the key accessor.
+ *
+ * @param series A series generated by a stack generator.
+ */
+export function stackOrderNone(series: Series<any, any>): number[];
+
+/**
+ * Returns the reverse of the given series order [n - 1, n - 2, … 0] where n is the number of elements in series. Thus, the stack order is given by the reverse of the key accessor.
+ *
+ * @param series A series generated by a stack generator.
+ */
+export function stackOrderReverse(series: Series<any, any>): number[];
+
+/**
+ * Applies a zero baseline and normalizes the values for each point such that the topline is always one.
+ *
+ * @param series A series generated by a stack generator.
+ * @param order An array of numeric indexes representing the stack order.
+ */
+export function stackOffsetExpand(series: Series<any, any>, order: Iterable<number>): void;
+
+/**
+ * Positive values are stacked above zero, while negative values are stacked below zero.
+ *
+ * @param series A series generated by a stack generator.
+ * @param order An array of numeric indexes representing the stack order.
+ */
+export function stackOffsetDiverging(series: Series<any, any>, order: Iterable<number>): void;
+
+/**
+ * Applies a zero baseline.
+ *
+ * @param series A series generated by a stack generator.
+ * @param order An array of numeric indexes representing the stack order.
+ */
+export function stackOffsetNone(series: Series<any, any>, order: Iterable<number>): void;
+
+/**
+ * Shifts the baseline down such that the center of the streamgraph is always at zero.
+ *
+ * @param series A series generated by a stack generator.
+ * @param order An array of numeric indexes representing the stack order.
+ */
+export function stackOffsetSilhouette(series: Series<any, any>, order: Iterable<number>): void;
+
+/**
+ * Shifts the baseline so as to minimize the weighted wiggle of layers. This offset is recommended for streamgraphs in conjunction with the inside-out order.
+ * See Stacked Graphs—Geometry & Aesthetics by Bryon & Wattenberg for more information.
+ *
+ * @param series A series generated by a stack generator.
+ * @param order An array of numeric indexes representing the stack order.
+ */
+export function stackOffsetWiggle(series: Series<any, any>, order: Iterable<number>): void;
Index: node_modules/@types/d3-shape/package.json
===================================================================
--- node_modules/@types/d3-shape/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-shape/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+{
+    "name": "@types/d3-shape",
+    "version": "3.1.7",
+    "description": "TypeScript definitions for d3-shape",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-shape",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "Tom Wanzek",
+            "githubUsername": "tomwanzek",
+            "url": "https://github.com/tomwanzek"
+        },
+        {
+            "name": "Alex Ford",
+            "githubUsername": "gustavderdrache",
+            "url": "https://github.com/gustavderdrache"
+        },
+        {
+            "name": "Boris Yankov",
+            "githubUsername": "borisyankov",
+            "url": "https://github.com/borisyankov"
+        },
+        {
+            "name": "denisname",
+            "githubUsername": "denisname",
+            "url": "https://github.com/denisname"
+        },
+        {
+            "name": "Nathan Bierema",
+            "githubUsername": "Methuselah96",
+            "url": "https://github.com/Methuselah96"
+        },
+        {
+            "name": "Fil",
+            "githubUsername": "Fil",
+            "url": "https://github.com/Fil"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/d3-shape"
+    },
+    "scripts": {},
+    "dependencies": {
+        "@types/d3-path": "*"
+    },
+    "peerDependencies": {},
+    "typesPublisherContentHash": "799d9815b06c799db603989ab56ae5a207ba179664cd07cbc5d754a2e542d4ca",
+    "typeScriptVersion": "5.0"
+}
Index: node_modules/@types/d3-time/LICENSE
===================================================================
--- node_modules/@types/d3-time/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-time/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/d3-time/README.md
===================================================================
--- node_modules/@types/d3-time/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-time/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/d3-time`
+
+# Summary
+This package contains type definitions for d3-time (https://github.com/d3/d3-time/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-time.
+
+### Additional Details
+ * Last updated: Mon, 25 Nov 2024 10:02:27 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [Tom Wanzek](https://github.com/tomwanzek), [Alex Ford](https://github.com/gustavderdrache), [Boris Yankov](https://github.com/borisyankov), [denisname](https://github.com/denisname), and [Nathan Bierema](https://github.com/Methuselah96).
Index: node_modules/@types/d3-time/index.d.ts
===================================================================
--- node_modules/@types/d3-time/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-time/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,697 @@
+// Last module patch version validated against: 3.0.0
+
+// ---------------------------------------------------------------
+// Interfaces
+// ---------------------------------------------------------------
+
+/**
+ * A D3 Time Interval
+ */
+export interface TimeInterval {
+    /**
+     * Returns a new date representing the latest interval boundary date before or equal to date.
+     * Equivalent to interval.floor, except it date is not specified, it defaults to the current time.
+     * For example, d3.timeYear(date) and d3.timeYear.floor(date) are equivalent.
+     *
+     * For example, timeDay(date) typically returns 12:00 AM local time on the given date.
+     *
+     * This function is idempotent: if the specified date is already floored to the current interval,
+     * a new date with an identical time is returned.
+     * Furthermore, the returned date is the minimum expressible value of the associated interval,
+     * such that interval.floor(interval.floor(date) - 1) returns the preceding interval boundary date.
+     *
+     * Note that the == and === operators do not compare by value with Date objects,
+     * and thus you cannot use them to tell whether the specified date has already been floored.
+     * Instead, coerce to a number and then compare.
+     *
+     * This is more reliable than testing whether the time is 12:00 AM, as in some time zones midnight may not exist due to daylight saving.
+     *
+     * @param date A date object.
+     */
+    (date?: Date): Date;
+
+    /**
+     * Returns a new date representing the latest interval boundary date before or equal to date.
+     *
+     * For example, timeDay.floor(date) typically returns 12:00 AM local time on the given date.
+     *
+     * This method is idempotent: if the specified date is already floored to the current interval,
+     * a new date with an identical time is returned.
+     * Furthermore, the returned date is the minimum expressible value of the associated interval,
+     * such that interval.floor(interval.floor(date) - 1) returns the preceding interval boundary date.
+     *
+     * Note that the == and === operators do not compare by value with Date objects,
+     * and thus you cannot use them to tell whether the specified date has already been floored.
+     * Instead, coerce to a number and then compare.
+     *
+     * This is more reliable than testing whether the time is 12:00 AM, as in some time zones midnight may not exist due to daylight saving.
+     *
+     * @param date A date object.
+     */
+    floor(date: Date): Date;
+
+    /**
+     * Returns a new date representing the closest interval boundary date to date.
+     *
+     * For example, timeDay.round(date) typically returns 12:00 AM local time on the given date if it is on or before noon,
+     * and 12:00 AM of the following day if it is after noon.
+     *
+     * This method is idempotent: if the specified date is already rounded to the current interval, a new date with an identical time is returned.
+     *
+     * @param date A date object.
+     */
+    round(date: Date): Date;
+
+    /**
+     * Returns a new date representing the earliest interval boundary date after or equal to date.
+     *
+     * For example, timeDay.ceil(date) typically returns 12:00 AM local time on the date following the given date.
+     *
+     * This method is idempotent: if the specified date is already ceilinged to the current interval,
+     * a new date with an identical time is returned. Furthermore,
+     * the returned date is the maximum expressible value of the associated interval,
+     * such that interval.ceil(interval.ceil(date) + 1) returns the following interval boundary date.
+     *
+     * @param date A date object.
+     */
+    ceil(date: Date): Date;
+
+    /**
+     * Returns a new date equal to date plus step intervals.
+     *
+     * If step is not specified it defaults to 1.
+     *
+     * This method does not round the specified date to the interval. For example, if date is today at 5:34 PM,
+     * then timeDay.offset(date, 1) returns 5:34 PM tomorrow (even if daylight saving changes!).
+     *
+     * @param date A date object.
+     * @param step An optional number of steps to apply when calculating the offset date.
+     * If step is negative, then the returned date will be before the specified date;
+     * if step is zero, then a copy of the specified date is returned; if step is not an integer, it is floored.
+     */
+    offset(date: Date, step?: number): Date;
+
+    /**
+     * Returns an array of dates representing every interval boundary after or equal to start (inclusive) and before stop (exclusive).
+     *
+     * If step is specified, then every step-th boundary will be returned; for example,
+     * for the timeDay interval a step of 2 will return every other day.
+     * If step is not an integer, it is floored.
+     *
+     * The first date in the returned array is the earliest boundary after or equal to start;
+     * subsequent dates are offset by step intervals and floored.
+     * Thus, two overlapping ranges may be inconsistent.
+     *
+     * To make ranges consistent when a step is specified, use CountableInterval.every instead.
+     *
+     * @param start A start date object for the range.
+     * @param stop A stop date object for the range.
+     * @param step An optional number of steps to apply when calculating the dates in the range.
+     */
+    range(start: Date, stop: Date, step?: number): Date[];
+
+    /**
+     * Returns a new interval that is a filtered subset of this interval using the specified test function.
+     *
+     * @param test A test function which is passed a date and should return true if and only if
+     * the specified date should be considered part of the interval.
+     */
+    filter(test: (date: Date) => boolean): TimeInterval;
+}
+
+/**
+ * A D3 Countable Time Interval
+ */
+export interface CountableTimeInterval extends TimeInterval {
+    /**
+     * Returns the number of interval boundaries after start (exclusive) and before or equal to end (inclusive).
+     *
+     * Note that this behavior is slightly different than interval.range,
+     * because its purpose is to return the zero-based number of the specified end date relative to the specified start date.
+     *
+     * @param start A start date object.
+     * @param end An end date object.
+     */
+    count(start: Date, end: Date): number;
+    /**
+     * Returns a filtered view of this interval representing every stepth date.
+     *
+     * The meaning of step is dependent on this interval’s parent interval as defined by the field function.
+     *
+     * For example, timeMinute.every(15) returns an interval representing every fifteen minutes,
+     * starting on the hour: :00, :15, :30, :45, etc. Note that for some intervals,
+     * the resulting dates may not be uniformly-spaced;
+     * timeDay’s parent interval is timeMonth, and thus the interval number resets at the start of each month.
+     *
+     * If step is not valid, returns null. If step is one, returns this interval.
+     *
+     * This method can be used in conjunction with interval.range to ensure that two overlapping ranges are consistent.
+     *
+     * The returned filtered interval does not support interval.count. See also interval.filter.
+     *
+     * @param step Number of steps.
+     */
+    every(step: number): TimeInterval | null;
+}
+
+// ---------------------------------------------------------------
+// Custom (Countable)Interval Factories
+// ---------------------------------------------------------------
+
+/**
+ * Constructs a new custom interval given the specified floor and offset functions.
+ *
+ * The returned custom interval is not countable, i.e. does not expose the methods "count(..)" and "every(...)".
+ *
+ * @param floor A floor function which takes a single date as an argument and rounds it down to the nearest interval boundary.
+ * @param offset An offset function which takes a date and an integer step as arguments and advances
+ * the specified date by the specified number of boundaries; the step may be positive, negative or zero.
+ */
+export function timeInterval(
+    floor: (date: Date) => void,
+    offset: (date: Date, step: number) => void,
+): TimeInterval;
+/**
+ * Constructs a new custom interval given the specified floor, offset and count functions.
+ *
+ * The returned custom interval is countable and exposes the methods "count(..)" and "every(...)".
+ *
+ * Note: due to an internal optimization, the specified count function must not invoke interval.count on other time intervals.
+ *
+ * @param floor A floor function which takes a single date as an argument and rounds it down to the nearest interval boundary.
+ * @param offset An offset function which takes a date and an integer step as arguments and advances
+ * the specified date by the specified number of boundaries; the step may be positive, negative or zero.
+ * @param count A count function which takes a start date and an end date, already floored to the current interval,
+ * and returns the number of boundaries between the start (exclusive) and end (inclusive).
+ * Note: due to an internal optimization, the specified count function must not invoke interval.count on other time intervals.
+ * @param field An optional field function which takes a date, already floored to the current interval,
+ * and returns the field value of the specified date,
+ * corresponding to the number of boundaries between this date (exclusive) and the latest previous parent boundary.
+ * For example, for the timeDay interval, this returns the number of days since the start of the month.
+ * If a field function is not specified, it defaults to counting the number of interval boundaries since
+ * the UNIX epoch of January 1, 1970 UTC. The field function defines the behavior of interval.every.
+ */
+export function timeInterval(
+    floor: (date: Date) => void,
+    offset: (date: Date, step: number) => void,
+    count: (start: Date, end: Date) => number,
+    field?: (date: Date) => number,
+): CountableTimeInterval;
+
+// ---------------------------------------------------------------
+// Built-In Factories and Date Array Creators
+// ---------------------------------------------------------------
+
+// local time ----------------------------------------------------------
+
+/**
+ * Milliseconds Interval in Local Time; the shortest available time unit.
+ */
+export const timeMillisecond: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeMillisecond.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeMilliseconds(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Seconds Interval in Local Time; seconds (e.g., 01:23:45.0000 AM); 1,000 milliseconds.
+ */
+export const timeSecond: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeSecond.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeSeconds(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Minutes Interval in Local Time; minutes (e.g., 01:02:00 AM); 60 seconds. Note that ECMAScript ignores leap seconds.
+ */
+export const timeMinute: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeMinute.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeMinutes(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Hours Interval in Local Time; Hours (e.g., 01:00 AM); 60 minutes.
+ *
+ * Note that advancing time by one hour in local time can return the same hour or skip an hour due to daylight saving.
+ */
+export const timeHour: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeHour.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeHours(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Days Interval in Local Time; days (e.g., February 7, 2012 at 12:00 AM); typically 24 hours.
+ * Days in local time may range from 23 to 25 hours due to daylight saving.
+ */
+export const timeDay: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeDay.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeDays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval in Local Time. Alias for sunday; 7 days and typically 168 hours.
+ *
+ * Weeks in local time may range from 167 to 169 hours due on daylight saving.
+ */
+export const timeWeek: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeWeek.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeWeeks(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Sunday-based weeks in Local Time (e.g., February 5, 2012 at 12:00 AM).
+ * 7 days and typically 168 hours.
+ *
+ * Weeks in local time may range from 167 to 169 hours due on daylight saving.
+ */
+export const timeSunday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeSunday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeSundays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Monday-based weeks in Local Time (e.g., February 6, 2012 at 12:00 AM).
+ * 7 days and typically 168 hours.
+ *
+ * Weeks in local time may range from 167 to 169 hours due on daylight saving.
+ */
+export const timeMonday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeMonday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeMondays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Tuesday-based weeks in Local Time (e.g., February 7, 2012 at 12:00 AM).
+ * 7 days and typically 168 hours.
+ *
+ * Weeks in local time may range from 167 to 169 hours due on daylight saving.
+ */
+export const timeTuesday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeTuesday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeTuesdays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Wednesday-based weeks in Local Time (e.g., February 8, 2012 at 12:00 AM).
+ * 7 days and typically 168 hours.
+ *
+ * Weeks in local time may range from 167 to 169 hours due on daylight saving.
+ */
+export const timeWednesday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeWednesday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeWednesdays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Thursday-based weeks in Local Time (e.g., February 9, 2012 at 12:00 AM).
+ * 7 days and typically 168 hours.
+ *
+ * Weeks in local time may range from 167 to 169 hours due on daylight saving.
+ */
+export const timeThursday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeThursday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeThursdays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Friday-based weeks in Local Time (e.g., February 10, 2012 at 12:00 AM).
+ * 7 days and typically 168 hours.
+ *
+ * Weeks in local time may range from 167 to 169 hours due on daylight saving.
+ */
+export const timeFriday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeFriday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeFridays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Saturday-based weeks in Local Time (e.g., February 11, 2012 at 12:00 AM).
+ * 7 days and typically 168 hours.
+ *
+ * Weeks in local time may range from 167 to 169 hours due on daylight saving.
+ */
+export const timeSaturday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeSaturday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeSaturdays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Month Interval in Local Time; months (e.g., February 1, 2012 at 12:00 AM); ranges from 28 to 31 days.
+ */
+export const timeMonth: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeMonth.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeMonths(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Year Interval in Local Time; years (e.g., January 1, 2012 at 12:00 AM); ranges from 365 to 366 days.
+ */
+export const timeYear: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for timeYear.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function timeYears(start: Date, stop: Date, step?: number): Date[];
+
+// utc Coordinated Universal Time ----------------------------------------------------------
+
+/**
+ * Milliseconds Interval in Coordinated Universal Time (UTC); the shortest available time unit.
+ */
+export const utcMillisecond: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcMillisecond.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcMilliseconds(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Seconds Interval in Coordinated Universal Time (UTC); seconds (e.g., 01:23:45.0000 AM); 1,000 milliseconds.
+ */
+export const utcSecond: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcSecond.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcSeconds(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Minutes Interval in Coordinated Universal Time (UTC); minutes (e.g., 01:02:00 AM); 60 seconds.
+ * Note that ECMAScript ignores leap seconds.
+ */
+export const utcMinute: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcMinute.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcMinutes(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Hours Interval in Coordinated Universal Time (UTC); Hours (e.g., 01:00 AM); 60 minutes.
+ */
+export const utcHour: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcHour.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcHours(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Days Interval in Coordinated Universal Time (UTC); days (e.g., February 7, 2012 at 12:00 AM); 24 hours.
+ */
+export const utcDay: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcDay.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcDays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval in Local Time. Alias for sunday; 7 days and 168 hours.
+ */
+export const utcWeek: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcWeek.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcWeeks(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Sunday-based weeks in Coordinated Universal Time (UTC) (e.g., February 5, 2012 at 12:00 AM).
+ * 7 days and 168 hours.
+ */
+export const utcSunday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcSunday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcSundays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Monday-based weeks in Coordinated Universal Time (UTC) (e.g., February 6, 2012 at 12:00 AM).
+ * 7 days and 168 hours.
+ */
+export const utcMonday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcMonday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcMondays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Tuesday-based weeks in Coordinated Universal Time (UTC) (e.g., February 7, 2012 at 12:00 AM).
+ * 7 days and 168 hours.
+ */
+export const utcTuesday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcTuesday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcTuesdays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Wednesday-based weeks in Coordinated Universal Time (UTC) (e.g., February 8, 2012 at 12:00 AM).
+ * 7 days and 168 hours.
+ */
+export const utcWednesday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcWednesday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcWednesdays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Thursday-based weeks in Coordinated Universal Time (UTC) (e.g., February 9, 2012 at 12:00 AM).
+ * 7 days and 168 hours.
+ */
+export const utcThursday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcThursday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcThursdays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Friday-based weeks in Coordinated Universal Time (UTC) (e.g., February 10, 2012 at 12:00 AM).
+ * 7 days and 168 hours.
+ */
+export const utcFriday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcFriday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcFridays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Week Interval for Saturday-based weeks in Coordinated Universal Time (UTC) (e.g., February 11, 2012 at 12:00 AM).
+ * 7 days and 168 hours.
+ */
+export const utcSaturday: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcSaturday.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcSaturdays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Month Interval in Coordinated Universal Time (UTC); months (e.g., February 1, 2012 at 12:00 AM); ranges from 28 to 31 days.
+ */
+export const utcMonth: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcMonth.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcMonths(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Year Interval in Coordinated Universal Time (UTC); years (e.g., January 1, 2012 at 12:00 AM); ranges from 365 to 366 days.
+ */
+export const utcYear: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for utcYear.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function utcYears(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Like d3.utcDay, except it counts days since the UNIX epoch (January 1, 1970) such that interval.every returns uniformly-spaced dates rather than varying based on day-of-month.
+ */
+export const unixDay: CountableTimeInterval;
+
+/**
+ * This is a convenience alias for unixDay.range(...).
+ *
+ * @param start A start date object for the range.
+ * @param stop A stop date object for the range.
+ * @param step An optional number of steps to apply when calculating the dates in the range.
+ */
+export function unixDays(start: Date, stop: Date, step?: number): Date[];
+
+/**
+ * Equivalent to d3.utcTicks, but in local time.
+ */
+export function timeTicks(start: Date, stop: Date, count: number): Date[];
+
+/**
+ * Returns the time interval that would be used by d3.timeTicks given the same arguments.
+ */
+export function timeTickInterval(start: Date, stop: Date, count: number): TimeInterval | null;
+
+/**
+ * Returns an array of approximately count dates at regular intervals between start and stop (inclusive).
+ * If stop is before start, dates are returned in reverse chronological order; otherwise dates are returned in chronological order.
+ */
+export function utcTicks(start: Date, stop: Date, count: number): Date[];
+
+/**
+ * Returns the time interval that would be used by d3.utcTicks given the same arguments.
+ * If there is no associated interval, such as when start or stop is invalid, returns null.
+ */
+export function utcTickInterval(start: Date, stop: Date, count: number): TimeInterval | null;
Index: node_modules/@types/d3-time/package.json
===================================================================
--- node_modules/@types/d3-time/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-time/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+{
+    "name": "@types/d3-time",
+    "version": "3.0.4",
+    "description": "TypeScript definitions for d3-time",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-time",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "Tom Wanzek",
+            "githubUsername": "tomwanzek",
+            "url": "https://github.com/tomwanzek"
+        },
+        {
+            "name": "Alex Ford",
+            "githubUsername": "gustavderdrache",
+            "url": "https://github.com/gustavderdrache"
+        },
+        {
+            "name": "Boris Yankov",
+            "githubUsername": "borisyankov",
+            "url": "https://github.com/borisyankov"
+        },
+        {
+            "name": "denisname",
+            "githubUsername": "denisname",
+            "url": "https://github.com/denisname"
+        },
+        {
+            "name": "Nathan Bierema",
+            "githubUsername": "Methuselah96",
+            "url": "https://github.com/Methuselah96"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/d3-time"
+    },
+    "scripts": {},
+    "dependencies": {},
+    "peerDependencies": {},
+    "typesPublisherContentHash": "995c6a7a1f21328f5dceb32804c5f3d92ab20a98694246d9c8f213f4eef298ed",
+    "typeScriptVersion": "4.9"
+}
Index: node_modules/@types/d3-timer/LICENSE
===================================================================
--- node_modules/@types/d3-timer/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-timer/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/d3-timer/README.md
===================================================================
--- node_modules/@types/d3-timer/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-timer/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/d3-timer`
+
+# Summary
+This package contains type definitions for d3-timer (https://github.com/d3/d3-timer/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-timer.
+
+### Additional Details
+ * Last updated: Tue, 07 Nov 2023 15:11:37 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [Tom Wanzek](https://github.com/tomwanzek), [Alex Ford](https://github.com/gustavderdrache), [Boris Yankov](https://github.com/borisyankov), [denisname](https://github.com/denisname), and [Nathan Bierema](https://github.com/Methuselah96).
Index: node_modules/@types/d3-timer/index.d.ts
===================================================================
--- node_modules/@types/d3-timer/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-timer/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+// Last module patch version validated against: 3.0.1
+
+/**
+ * Returns the current time as defined by performance.now if available, and Date.now if not.
+ * The current time is updated at the start of a frame; it is thus consistent during the frame, and any timers scheduled during the same frame will be synchronized.
+ * If this method is called outside of a frame, such as in response to a user event, the current time is calculated and then fixed until the next frame,
+ * again ensuring consistent timing during event handling.
+ */
+export function now(): number;
+
+export interface Timer {
+    /**
+     * Restart a timer with the specified callback and optional delay and time.
+     * This is equivalent to stopping this timer and creating a new timer with the specified arguments,
+     * although this timer retains the original invocation priority.
+     *
+     * @param callback A callback function to be invoked and passed in the apparent
+     * elapsed time since the timer became active in milliseconds.
+     * @param delay An optional numeric delay in milliseconds (default = 0) relative to time.
+     * @param time An optional time in milliseconds relative to which the delay is calculated (default = now).
+     */
+    restart(callbackFn: (elapsed: number) => void, delay?: number, time?: number): void;
+
+    /**
+     * Stop the timer.
+     */
+    stop(): void;
+}
+
+/**
+ * Schedules and returns a new timer, invoking the specified callback repeatedly until the timer is stopped.
+ * The callback is passed the (apparent) elapsed time since the timer became active.
+ *
+ * @param callback A callback function to be invoked and passed in the apparent
+ * elapsed time since the timer became active in milliseconds.
+ * @param delay An optional numeric delay in milliseconds (default = 0) relative to time.
+ * @param time An optional time in milliseconds relative to which the delay is calculated (default = now).
+ */
+export function timer(callback: (elapsed: number) => void, delay?: number, time?: number): Timer;
+
+/**
+ * Immediately invoke any eligible timer callbacks.
+ */
+export function timerFlush(): void;
+
+/**
+ * Schedules and returns a new timer, invoking the specified callback. The timer is stopped automatically
+ * on its first callback. The callback is passed the (apparent) elapsed time since the timer became active.
+ *
+ * @param callback A callback function to be invoked and passed in the apparent
+ * elapsed time since the timer became active in milliseconds.
+ * @param delay An optional numeric delay in milliseconds (default = 0) relative to time.
+ * @param time An optional time in milliseconds relative to which the delay is calculated (default = now).
+ */
+export function timeout(callback: (elapsed: number) => void, delay?: number, time?: number): Timer;
+
+/**
+ * Schedules and returns a new timer, invoking the specified callback repeatedly every 'delay' milliseconds
+ * until the timer is stopped.
+ * The callback is passed the (apparent) elapsed time since the timer became active.
+ *
+ * @param callback A callback function to be invoked and passed in the apparent
+ * elapsed time since the timer became active in milliseconds.
+ * @param delay An optional numeric delay in milliseconds between repeat invocations of the callback.
+ * If not specified, the interval timer behaves like the regular timer.
+ * @param time An optional time in milliseconds relative to which the initial delay is calculated (default = now).
+ */
+export function interval(callback: (elapsed: number) => void, delay?: number, time?: number): Timer;
Index: node_modules/@types/d3-timer/package.json
===================================================================
--- node_modules/@types/d3-timer/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/d3-timer/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+{
+    "name": "@types/d3-timer",
+    "version": "3.0.2",
+    "description": "TypeScript definitions for d3-timer",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3-timer",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "Tom Wanzek",
+            "githubUsername": "tomwanzek",
+            "url": "https://github.com/tomwanzek"
+        },
+        {
+            "name": "Alex Ford",
+            "githubUsername": "gustavderdrache",
+            "url": "https://github.com/gustavderdrache"
+        },
+        {
+            "name": "Boris Yankov",
+            "githubUsername": "borisyankov",
+            "url": "https://github.com/borisyankov"
+        },
+        {
+            "name": "denisname",
+            "githubUsername": "denisname",
+            "url": "https://github.com/denisname"
+        },
+        {
+            "name": "Nathan Bierema",
+            "githubUsername": "Methuselah96",
+            "url": "https://github.com/Methuselah96"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/d3-timer"
+    },
+    "scripts": {},
+    "dependencies": {},
+    "typesPublisherContentHash": "a51fc6981e6d12715fd052f7e598dd291c354465025cbb33ece1895bdab4109c",
+    "typeScriptVersion": "4.5"
+}
Index: node_modules/@types/use-sync-external-store/LICENSE
===================================================================
--- node_modules/@types/use-sync-external-store/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/use-sync-external-store/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
Index: node_modules/@types/use-sync-external-store/README.md
===================================================================
--- node_modules/@types/use-sync-external-store/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/use-sync-external-store/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/use-sync-external-store`
+
+# Summary
+This package contains type definitions for use-sync-external-store (https://github.com/facebook/react#readme).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/use-sync-external-store.
+
+### Additional Details
+ * Last updated: Tue, 07 Nov 2023 15:11:36 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [eps1lon](https://github.com/eps1lon), and [Mark Erikson](https://github.com/markerikson).
Index: node_modules/@types/use-sync-external-store/index.d.ts
===================================================================
--- node_modules/@types/use-sync-external-store/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/use-sync-external-store/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export function useSyncExternalStore<Snapshot>(
+    subscribe: (onStoreChange: () => void) => () => void,
+    getSnapshot: () => Snapshot,
+    getServerSnapshot?: () => Snapshot,
+): Snapshot;
Index: node_modules/@types/use-sync-external-store/package.json
===================================================================
--- node_modules/@types/use-sync-external-store/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/use-sync-external-store/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+{
+    "name": "@types/use-sync-external-store",
+    "version": "0.0.6",
+    "description": "TypeScript definitions for use-sync-external-store",
+    "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/use-sync-external-store",
+    "license": "MIT",
+    "contributors": [
+        {
+            "name": "eps1lon",
+            "githubUsername": "eps1lon",
+            "url": "https://github.com/eps1lon"
+        },
+        {
+            "name": "Mark Erikson",
+            "githubUsername": "markerikson",
+            "url": "https://github.com/markerikson"
+        }
+    ],
+    "main": "",
+    "types": "index.d.ts",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+        "directory": "types/use-sync-external-store"
+    },
+    "scripts": {},
+    "dependencies": {},
+    "typesPublisherContentHash": "c048e9b12d49a82481404fb3bc099a0aa28adff9fc0d9755b69bbc54901ea2fb",
+    "typeScriptVersion": "4.5"
+}
Index: node_modules/@types/use-sync-external-store/shim/index.d.ts
===================================================================
--- node_modules/@types/use-sync-external-store/shim/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/use-sync-external-store/shim/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from "../";
Index: node_modules/@types/use-sync-external-store/shim/with-selector.d.ts
===================================================================
--- node_modules/@types/use-sync-external-store/shim/with-selector.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/use-sync-external-store/shim/with-selector.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from "../with-selector";
Index: node_modules/@types/use-sync-external-store/with-selector.d.ts
===================================================================
--- node_modules/@types/use-sync-external-store/with-selector.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@types/use-sync-external-store/with-selector.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+export function useSyncExternalStoreWithSelector<Snapshot, Selection>(
+    subscribe: (onStoreChange: () => void) => () => void,
+    getSnapshot: () => Snapshot,
+    getServerSnapshot: undefined | null | (() => Snapshot),
+    selector: (snapshot: Snapshot) => Selection,
+    isEqual?: (a: Selection, b: Selection) => boolean,
+): Selection;
Index: node_modules/@wojtekmaj/date-utils/LICENSE
===================================================================
--- node_modules/@wojtekmaj/date-utils/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019–2023 Wojciech Maj
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/@wojtekmaj/date-utils/README.md
===================================================================
--- node_modules/@wojtekmaj/date-utils/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,646 @@
+[![npm](https://img.shields.io/npm/v/@wojtekmaj/date-utils.svg)](https://www.npmjs.com/package/@wojtekmaj/date-utils) ![downloads](https://img.shields.io/npm/dt/@wojtekmaj/date-utils.svg) [![CI](https://github.com/wojtekmaj/date-utils/workflows/CI/badge.svg)](https://github.com/wojtekmaj/date-utils/actions)
+
+# Date-Utils
+
+A collection of date-related utilities.
+
+## tl;dr
+
+- Install by executing `npm install @wojtekmaj/date-utils` or `yarn add @wojtekmaj/date-utils`.
+- Import by adding `import * as dateUtils from '@wojtekmaj/date-utils'`.
+- Do stuff with it!
+  ```ts
+  const now = new Date();
+  const startOfCentury = getCenturyStart(now);
+  ```
+
+## User guide
+
+### General getters
+
+#### `getYear()`
+
+Gets year from a given date.
+
+##### Sample usage
+
+```ts
+import { getYear } from '@wojtekmaj/date-utils';
+
+getYear(new Date(2019, 0, 1)); // 2019
+```
+
+#### `getMonth()`
+
+Gets month index from a given date. For example, returns 0 for January, 1 for February and so on.
+
+##### Sample usage
+
+```ts
+import { getMonth } from '@wojtekmaj/date-utils';
+
+getMonth(new Date(2019, 0, 1)); // 0
+```
+
+#### `getMonthHuman()`
+
+Gets human-readable month number from a given date. For example, returns 1 for January, 2 for February and so on.
+
+##### Sample usage
+
+```ts
+import { getMonthHuman } from '@wojtekmaj/date-utils';
+
+getMonthHuman(new Date(2019, 0, 1)); // 1
+```
+
+#### `getDate()`
+
+Gets day of the month from a given date.
+
+##### Sample usage
+
+```ts
+import { getDate } from '@wojtekmaj/date-utils';
+
+getDate(new Date(2019, 0, 15)); // 15
+```
+
+#### `getHours()`
+
+Gets hours from a given date or string.
+
+##### Sample usage
+
+```ts
+import { getHours } from '@wojtekmaj/date-utils';
+
+getHours(new Date(2019, 0, 15, 22, 41, 56)); // 22
+getHours('22:41'); // 22
+getHours('22:41:56'); // 22
+```
+
+#### `getMinutes()`
+
+Gets minutes from a given date or string.
+
+##### Sample usage
+
+```ts
+import { getMinutes } from '@wojtekmaj/date-utils';
+
+getMinutes(new Date(2019, 0, 15, 22, 41, 56)); // 41
+getMinutes('22:41'); // 41
+getMinutes('22:41:56'); // 41
+```
+
+#### `getSeconds()`
+
+Gets seconds from a given date or string.
+
+##### Sample usage
+
+```ts
+import { getSeconds } from '@wojtekmaj/date-utils';
+
+getSeconds(new Date(2019, 0, 15, 22, 41, 56)); // 56
+getSeconds('22:41'); // 0
+getSeconds('22:41:56'); // 56
+getSeconds('22:41:56.321'); // 56
+```
+
+#### `getMilliseconds()`
+
+Gets milliseconds from a given date or string.
+
+##### Sample usage
+
+```ts
+import { getMilliseconds } from '@wojtekmaj/date-utils';
+
+getMilliseconds(new Date(2019, 0, 15, 22, 41, 56, 321)); // 321
+getMilliseconds('22:41'); // 0
+getMilliseconds('22:41:56'); // 0
+getMilliseconds('22:41:56.321'); // 321
+```
+
+### Century-related getters
+
+#### `getCenturyStart()`
+
+Gets century start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getCenturyStart } from '@wojtekmaj/date-utils';
+
+getCenturyStart(new Date(2019, 0, 1)); // new Date(2001, 0, 1)
+```
+
+#### `getCenturyEnd()`
+
+Gets century start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getCenturyEnd } from '@wojtekmaj/date-utils';
+
+getCenturyEnd(new Date(2019, 0, 1)); // new Date(2100, 12, 31, 23, 59, 999)
+```
+
+#### `getPreviousCenturyStart()`
+
+Gets previous century start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousCenturyStart } from '@wojtekmaj/date-utils';
+
+getPreviousCenturyStart(new Date(2019, 0, 1)); // new Date(1901, 0, 1)
+```
+
+#### `getPreviousCenturyEnd()`
+
+Gets century start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousCenturyEnd } from '@wojtekmaj/date-utils';
+
+getPreviousCenturyEnd(new Date(2019, 0, 1)); // new Date(2000, 12, 31, 23, 59, 999)
+```
+
+#### `getNextCenturyStart()`
+
+Gets next century start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextCenturyStart } from '@wojtekmaj/date-utils';
+
+getNextCenturyStart(new Date(2019, 0, 1)); // new Date(2101, 0, 1)
+```
+
+#### `getNextCenturyEnd()`
+
+Gets next century start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextCenturyEnd } from '@wojtekmaj/date-utils';
+
+getNextCenturyEnd(new Date(2019, 0, 1)); // new Date(2200, 12, 31, 23, 59, 999)
+```
+
+#### `getCenturyRange()`
+
+Gets century start and end dates from a given date. Returns an array of values equal to the ones returned by `getCenturyStart()` and `getCenturyEnd()`.
+
+##### Sample usage
+
+```ts
+import { getCenturyRange } from '@wojtekmaj/date-utils';
+
+getCenturyRange(new Date(2019, 0, 1)); // [new Date(2001, 0, 1), new Date(2100, 12, 31, 23, 59, 999)
+```
+
+### Decade-related getters
+
+#### `getDecadeStart()`
+
+Gets decade start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getDecadeStart } from '@wojtekmaj/date-utils';
+
+getDecadeStart(new Date(2019, 0, 1)); // new Date(2011, 0, 1)
+```
+
+#### `getDecadeEnd()`
+
+Gets decade start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getDecadeEnd } from '@wojtekmaj/date-utils';
+
+getDecadeEnd(new Date(2019, 0, 1)); // new Date(2020, 12, 31, 23, 59, 999)
+```
+
+#### `getPreviousDecadeStart()`
+
+Gets previous decade start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousDecadeStart } from '@wojtekmaj/date-utils';
+
+getPreviousDecadeStart(new Date(2019, 0, 1)); // new Date(2001, 0, 1)
+```
+
+#### `getPreviousDecadeEnd()`
+
+Gets decade start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousDecadeEnd } from '@wojtekmaj/date-utils';
+
+getPreviousDecadeEnd(new Date(2019, 0, 1)); // new Date(2010, 12, 31, 23, 59, 999)
+```
+
+#### `getNextDecadeStart()`
+
+Gets next decade start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextDecadeStart } from '@wojtekmaj/date-utils';
+
+getNextDecadeStart(new Date(2019, 0, 1)); // new Date(2021, 0, 1)
+```
+
+#### `getNextDecadeEnd()`
+
+Gets next decade start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextDecadeEnd } from '@wojtekmaj/date-utils';
+
+getNextDecadeEnd(new Date(2019, 0, 1)); // new Date(2030, 12, 31, 23, 59, 999)
+```
+
+#### `getDecadeRange()`
+
+Gets decade start and end dates from a given date. Returns an array of values equal to the ones returned by `getDecadeStart()` and `getDecadeEnd()`.
+
+##### Sample usage
+
+```ts
+import { getDecadeRange } from '@wojtekmaj/date-utils';
+
+getDecadeRange(new Date(2019, 0, 1)); // [new Date(2011, 0, 1), new Date(2020, 12, 31, 23, 59, 999)
+```
+
+### Year-related getters
+
+#### `getYearStart()`
+
+Gets year start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getYearStart } from '@wojtekmaj/date-utils';
+
+getYearStart(new Date(2019, 6, 1)); // new Date(2019, 0, 1)
+```
+
+#### `getYearEnd()`
+
+Gets year start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getYearEnd } from '@wojtekmaj/date-utils';
+
+getYearEnd(new Date(2019, 6, 1)); // new Date(2019, 12, 31, 23, 59, 999)
+```
+
+#### `getPreviousYearStart()`
+
+Gets previous year start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousYearStart } from '@wojtekmaj/date-utils';
+
+getPreviousYearStart(new Date(2019, 6, 1)); // new Date(2018, 0, 1)
+```
+
+#### `getPreviousYearEnd()`
+
+Gets year start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousYearEnd } from '@wojtekmaj/date-utils';
+
+getPreviousYearEnd(new Date(2019, 6, 1)); // new Date(2018, 12, 31, 23, 59, 999)
+```
+
+#### `getNextYearStart()`
+
+Gets next year start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextYearStart } from '@wojtekmaj/date-utils';
+
+getNextYearStart(new Date(2019, 6, 1)); // new Date(2020, 0, 1)
+```
+
+#### `getNextYearEnd()`
+
+Gets next year start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextYearEnd } from '@wojtekmaj/date-utils';
+
+getNextYearEnd(new Date(2019, 6, 1)); // new Date(2020, 12, 31, 23, 59, 999)
+```
+
+#### `getYearRange()`
+
+Gets year start and end dates from a given date. Returns an array of values equal to the ones returned by `getYearStart()` and `getYearEnd()`.
+
+##### Sample usage
+
+```ts
+import { getYearRange } from '@wojtekmaj/date-utils';
+
+getYearRange(new Date(2019, 6, 1)); // [new Date(2019, 0, 1), new Date(2019, 12, 31, 23, 59, 999)
+```
+
+### Month-related getters
+
+#### `getMonthStart()`
+
+Gets month start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getMonthStart } from '@wojtekmaj/date-utils';
+
+getMonthStart(new Date(2019, 6, 15)); // new Date(2019, 6, 1)
+```
+
+#### `getMonthEnd()`
+
+Gets month start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getMonthEnd } from '@wojtekmaj/date-utils';
+
+getMonthEnd(new Date(2019, 6, 15)); // new Date(2019, 6, 31, 23, 59, 999)
+```
+
+#### `getPreviousMonthStart()`
+
+Gets previous month start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousMonthStart } from '@wojtekmaj/date-utils';
+
+getPreviousMonthStart(new Date(2019, 6, 15)); // new Date(2019, 5, 1)
+```
+
+#### `getPreviousMonthEnd()`
+
+Gets month start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousMonthEnd } from '@wojtekmaj/date-utils';
+
+getPreviousMonthEnd(new Date(2019, 6, 15)); // new Date(2019, 5, 30, 23, 59, 999)
+```
+
+#### `getNextMonthStart()`
+
+Gets next month start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextMonthStart } from '@wojtekmaj/date-utils';
+
+getNextMonthStart(new Date(2019, 6, 15)); // new Date(2019, 7, 1)
+```
+
+#### `getNextMonthEnd()`
+
+Gets next month start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextMonthEnd } from '@wojtekmaj/date-utils';
+
+getNextMonthEnd(new Date(2019, 6, 15)); // new Date(2019, 7, 31, 23, 59, 999)
+```
+
+#### `getMonthRange()`
+
+Gets month start and end dates from a given date. Returns an array of values equal to the ones returned by `getMonthStart()` and `getMonthEnd()`.
+
+##### Sample usage
+
+```ts
+import { getMonthRange } from '@wojtekmaj/date-utils';
+
+getMonthRange(new Date(2019, 6, 15)); // [new Date(2019, 6, 1), new Date(2019, 6, 31, 23, 59, 999)
+```
+
+### Day-related getters
+
+#### `getDayStart()`
+
+Gets day start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getDayStart } from '@wojtekmaj/date-utils';
+
+getDayStart(new Date(2019, 6, 15, 12)); // new Date(2019, 6, 15)
+```
+
+#### `getDayEnd()`
+
+Gets day start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getDayEnd } from '@wojtekmaj/date-utils';
+
+getDayEnd(new Date(2019, 6, 15, 12)); // new Date(2019, 6, 15, 23, 59, 999)
+```
+
+#### `getPreviousDayStart()`
+
+Gets previous day start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousDayStart } from '@wojtekmaj/date-utils';
+
+getPreviousDayStart(new Date(2019, 6, 15, 12)); // new Date(2019, 6, 14)
+```
+
+#### `getPreviousDayEnd()`
+
+Gets day start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getPreviousDayEnd } from '@wojtekmaj/date-utils';
+
+getPreviousDayEnd(new Date(2019, 6, 15, 12)); // new Date(2019, 6, 14, 23, 59, 999)
+```
+
+#### `getNextDayStart()`
+
+Gets next day start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextDayStart } from '@wojtekmaj/date-utils';
+
+getNextDayStart(new Date(2019, 6, 15, 12)); // new Date(2019, 6, 16)
+```
+
+#### `getNextDayEnd()`
+
+Gets next day start date from a given date.
+
+##### Sample usage
+
+```ts
+import { getNextDayEnd } from '@wojtekmaj/date-utils';
+
+getNextDayEnd(new Date(2019, 6, 15, 12)); // new Date(2019, 6, 16, 23, 59, 999)
+```
+
+#### `getDayRange()`
+
+Gets day start and end dates from a given date. Returns an array of values equal to the ones returned by `getDayStart()` and `getDayEnd()`.
+
+##### Sample usage
+
+```ts
+import { getDayRange } from '@wojtekmaj/date-utils';
+
+getDayRange(new Date(2019, 6, 15, 12)); // [new Date(2019, 6, 15), new Date(2019, 6, 15, 23, 59, 999)
+```
+
+### Other
+
+#### `getDaysInMonth()`
+
+Gets number of days in a month from a given date.
+
+##### Sample usage
+
+```ts
+import { getDaysInMonth } from '@wojtekmaj/date-utils';
+
+getDaysInMonth(new Date(2019, 0, 15)); // 31
+```
+
+#### `getHoursMinutes()`
+
+Returns local hours and minutes (hh:mm).
+
+##### Sample usage
+
+```ts
+import { getHoursMinutes } from '@wojtekmaj/date-utils';
+
+getHoursMinutes(new Date(2019, 0, 15, 16, 4)); // "16:04"
+```
+
+#### `getHoursMinutesSeconds()`
+
+Returns local hours, minutes and seconds (hh:mm:ss).
+
+##### Sample usage
+
+```ts
+import { getHoursMinutesSeconds } from '@wojtekmaj/date-utils';
+
+getHoursMinutesSeconds(new Date(2019, 0, 15, 16, 4, 41)); // "16:04:41"
+```
+
+#### `getISOLocalMonth()`
+
+Returns local month in ISO-like format (YYYY-MM).
+
+##### Sample usage
+
+```ts
+import { getISOLocalMonth } from '@wojtekmaj/date-utils';
+
+getISOLocalMonth(new Date(2019, 0, 15)); // "2019-01"
+```
+
+#### `getISOLocalDate()`
+
+Returns local date in ISO-like format (YYYY-MM-DD).
+
+##### Sample usage
+
+```ts
+import { getISOLocalDate } from '@wojtekmaj/date-utils';
+
+getISOLocalDate(new Date(2019, 0, 15)); // "2019-01-15"
+```
+
+#### `getISOLocalDateTime()`
+
+Returns local date & time in ISO-like format (YYYY-MM-DDThh:mm:ss).
+
+##### Sample usage
+
+```ts
+import { getISOLocalDateTime } from '@wojtekmaj/date-utils';
+
+getISOLocalDateTime(new Date(2019, 0, 15, 16, 4, 41)); // "2019-01-15T16:04:41"
+```
+
+## License
+
+The MIT License.
+
+## Author
+
+<table>
+  <tr>
+    <td >
+      <img src="https://avatars.githubusercontent.com/u/5426427?v=4&s=128" width="64" height="64" alt="Wojciech Maj">
+    </td>
+    <td>
+      <a href="https://github.com/wojtekmaj">Wojciech Maj</a>
+    </td>
+  </tr>
+</table>
Index: node_modules/@wojtekmaj/date-utils/dist/cjs/index.d.ts
===================================================================
--- node_modules/@wojtekmaj/date-utils/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,360 @@
+type DateLike = Date | number | string;
+/**
+ * Simple getters - getting a property of a given point in time
+ */
+/**
+ * Gets year from a given date.
+ *
+ * @param {DateLike} date Date to get year from
+ * @returns {number} Year
+ */
+export declare function getYear(date: DateLike): number;
+/**
+ * Gets month from a given date.
+ *
+ * @param {Date} date Date to get month from
+ * @returns {number} Month
+ */
+export declare function getMonth(date: Date): number;
+/**
+ * Gets human-readable month from a given date.
+ *
+ * @param {Date} date Date to get human-readable month from
+ * @returns {number} Human-readable month
+ */
+export declare function getMonthHuman(date: Date): number;
+/**
+ * Gets day of the month from a given date.
+ *
+ * @param {Date} date Date to get day of the month from
+ * @returns {number} Day of the month
+ */
+export declare function getDate(date: Date): number;
+/**
+ * Gets hours from a given date.
+ *
+ * @param {Date | string} date Date to get hours from
+ * @returns {number} Hours
+ */
+export declare function getHours(date: Date | string): number;
+/**
+ * Gets minutes from a given date.
+ *
+ * @param {Date | string} date Date to get minutes from
+ * @returns {number} Minutes
+ */
+export declare function getMinutes(date: Date | string): number;
+/**
+ * Gets seconds from a given date.
+ *
+ * @param {Date | string} date Date to get seconds from
+ * @returns {number} Seconds
+ */
+export declare function getSeconds(date: Date | string): number;
+/**
+ * Gets milliseconds from a given date.
+ *
+ * @param {Date | string} date Date to get milliseconds from
+ * @returns {number} Milliseconds
+ */
+export declare function getMilliseconds(date: Date | string): number;
+/**
+ * Century
+ */
+/**
+ * Gets century start date from a given date.
+ *
+ * @param {DateLike} date Date to get century start from
+ * @returns {Date} Century start date
+ */
+export declare function getCenturyStart(date: DateLike): Date;
+/**
+ * Gets previous century start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century start from
+ * @returns {Date} Previous century start date
+ */
+export declare const getPreviousCenturyStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next century start date from a given date.
+ *
+ * @param {DateLike} date Date to get next century start from
+ * @returns {Date} Next century start date
+ */
+export declare const getNextCenturyStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets century end date from a given date.
+ *
+ * @param {DateLike} date Date to get century end from
+ * @returns {Date} Century end date
+ */
+export declare const getCenturyEnd: (date: DateLike) => Date;
+/**
+ * Gets previous century end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century end from
+ * @returns {Date} Previous century end date
+ */
+export declare const getPreviousCenturyEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next century end date from a given date.
+ *
+ * @param {DateLike} date Date to get next century end from
+ * @returns {Date} Next century end date
+ */
+export declare const getNextCenturyEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets century start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get century start and end from
+ * @returns {[Date, Date]} Century start and end dates
+ */
+export declare const getCenturyRange: (date: DateLike) => [Date, Date];
+/**
+ * Decade
+ */
+/**
+ * Gets decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get decade start from
+ * @returns {Date} Decade start date
+ */
+export declare function getDecadeStart(date: DateLike): Date;
+/**
+ * Gets previous decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade start from
+ * @returns {Date} Previous decade start date
+ */
+export declare const getPreviousDecadeStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade start from
+ * @returns {Date} Next decade start date
+ */
+export declare const getNextDecadeStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get decade end from
+ * @returns {Date} Decade end date
+ */
+export declare const getDecadeEnd: (date: DateLike) => Date;
+/**
+ * Gets previous decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade end from
+ * @returns {Date} Previous decade end date
+ */
+export declare const getPreviousDecadeEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade end from
+ * @returns {Date} Next decade end date
+ */
+export declare const getNextDecadeEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets decade start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get decade start and end from
+ * @returns {[Date, Date]} Decade start and end dates
+ */
+export declare const getDecadeRange: (date: DateLike) => [Date, Date];
+/**
+ * Year
+ */
+/**
+ * Gets year start date from a given date.
+ *
+ * @param {DateLike} date Date to get year start from
+ * @returns {Date} Year start date
+ */
+export declare function getYearStart(date: DateLike): Date;
+/**
+ * Gets previous year start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year start from
+ * @returns {Date} Previous year start date
+ */
+export declare const getPreviousYearStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next year start date from a given date.
+ *
+ * @param {DateLike} date Date to get next year start from
+ * @returns {Date} Next year start date
+ */
+export declare const getNextYearStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets year end date from a given date.
+ *
+ * @param {DateLike} date Date to get year end from
+ * @returns {Date} Year end date
+ */
+export declare const getYearEnd: (date: DateLike) => Date;
+/**
+ * Gets previous year end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year end from
+ * @returns {Date} Previous year end date
+ */
+export declare const getPreviousYearEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next year end date from a given date.
+ *
+ * @param {DateLike} date Date to get next year end from
+ * @returns {Date} Next year end date
+ */
+export declare const getNextYearEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets year start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get year start and end from
+ * @returns {[Date, Date]} Year start and end dates
+ */
+export declare const getYearRange: (date: DateLike) => [Date, Date];
+/**
+ * Gets month start date from a given date.
+ *
+ * @param {DateLike} date Date to get month start from
+ * @returns {Date} Month start date
+ */
+export declare function getMonthStart(date: Date): Date;
+/**
+ * Gets previous month start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month start from
+ * @returns {Date} Previous month start date
+ */
+export declare const getPreviousMonthStart: (date: Date, offset?: number) => Date;
+/**
+ * Gets next month start date from a given date.
+ *
+ * @param {DateLike} date Date to get next month start from
+ * @returns {Date} Next month start date
+ */
+export declare const getNextMonthStart: (date: Date, offset?: number) => Date;
+/**
+ * Gets month end date from a given date.
+ *
+ * @param {DateLike} date Date to get month end from
+ * @returns {Date} Month end date
+ */
+export declare const getMonthEnd: (date: Date) => Date;
+/**
+ * Gets previous month end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month end from
+ * @returns {Date} Previous month end date
+ */
+export declare const getPreviousMonthEnd: (date: Date, offset?: number) => Date;
+/**
+ * Gets next month end date from a given date.
+ *
+ * @param {DateLike} date Date to get next month end from
+ * @returns {Date} Next month end date
+ */
+export declare const getNextMonthEnd: (date: Date, offset?: number) => Date;
+/**
+ * Gets month start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get month start and end from
+ * @returns {[Date, Date]} Month start and end dates
+ */
+export declare const getMonthRange: (date: Date) => [Date, Date];
+/**
+ * Gets day start date from a given date.
+ *
+ * @param {DateLike} date Date to get day start from
+ * @returns {Date} Day start date
+ */
+export declare function getDayStart(date: Date): Date;
+/**
+ * Gets previous day start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day start from
+ * @returns {Date} Previous day start date
+ */
+export declare const getPreviousDayStart: (date: Date, offset?: number) => Date;
+/**
+ * Gets next day start date from a given date.
+ *
+ * @param {DateLike} date Date to get next day start from
+ * @returns {Date} Next day start date
+ */
+export declare const getNextDayStart: (date: Date, offset?: number) => Date;
+/**
+ * Gets day end date from a given date.
+ *
+ * @param {DateLike} date Date to get day end from
+ * @returns {Date} Day end date
+ */
+export declare const getDayEnd: (date: Date) => Date;
+/**
+ * Gets previous day end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day end from
+ * @returns {Date} Previous day end date
+ */
+export declare const getPreviousDayEnd: (date: Date, offset?: number) => Date;
+/**
+ * Gets next day end date from a given date.
+ *
+ * @param {DateLike} date Date to get next day end from
+ * @returns {Date} Next day end date
+ */
+export declare const getNextDayEnd: (date: Date, offset?: number) => Date;
+/**
+ * Gets day start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get day start and end from
+ * @returns {[Date, Date]} Day start and end dates
+ */
+export declare const getDayRange: (date: Date) => [Date, Date];
+/**
+ * Other
+ */
+/**
+ * Returns a number of days in a month of a given date.
+ *
+ * @param {Date} date Date
+ * @returns {number} Number of days in a month
+ */
+export declare function getDaysInMonth(date: Date): number;
+/**
+ * Returns local hours and minutes (hh:mm).
+ *
+ * @param {Date | string} date Date to get hours and minutes from
+ * @returns {string} Local hours and minutes
+ */
+export declare function getHoursMinutes(date: Date | string): string;
+/**
+ * Returns local hours, minutes and seconds (hh:mm:ss).
+ *
+ * @param {Date | string} date Date to get hours, minutes and seconds from
+ * @returns {string} Local hours, minutes and seconds
+ */
+export declare function getHoursMinutesSeconds(date: Date | string): string;
+/**
+ * Returns local month in ISO-like format (YYYY-MM).
+ *
+ * @param {Date} date Date to get month in ISO-like format from
+ * @returns {string} Local month in ISO-like format
+ */
+export declare function getISOLocalMonth(date: Date): string;
+/**
+ * Returns local date in ISO-like format (YYYY-MM-DD).
+ *
+ * @param {Date} date Date to get date in ISO-like format from
+ * @returns {string} Local date in ISO-like format
+ */
+export declare function getISOLocalDate(date: Date): string;
+/**
+ * Returns local date & time in ISO-like format (YYYY-MM-DDThh:mm:ss).
+ *
+ * @param {Date} date Date to get date & time in ISO-like format from
+ * @returns {string} Local date & time in ISO-like format
+ */
+export declare function getISOLocalDateTime(date: Date): string;
+export {};
Index: node_modules/@wojtekmaj/date-utils/dist/cjs/index.js
===================================================================
--- node_modules/@wojtekmaj/date-utils/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,584 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getISOLocalDateTime = exports.getISOLocalDate = exports.getISOLocalMonth = exports.getHoursMinutesSeconds = exports.getHoursMinutes = exports.getDaysInMonth = exports.getDayRange = exports.getNextDayEnd = exports.getPreviousDayEnd = exports.getDayEnd = exports.getNextDayStart = exports.getPreviousDayStart = exports.getDayStart = exports.getMonthRange = exports.getNextMonthEnd = exports.getPreviousMonthEnd = exports.getMonthEnd = exports.getNextMonthStart = exports.getPreviousMonthStart = exports.getMonthStart = exports.getYearRange = exports.getNextYearEnd = exports.getPreviousYearEnd = exports.getYearEnd = exports.getNextYearStart = exports.getPreviousYearStart = exports.getYearStart = exports.getDecadeRange = exports.getNextDecadeEnd = exports.getPreviousDecadeEnd = exports.getDecadeEnd = exports.getNextDecadeStart = exports.getPreviousDecadeStart = exports.getDecadeStart = exports.getCenturyRange = exports.getNextCenturyEnd = exports.getPreviousCenturyEnd = exports.getCenturyEnd = exports.getNextCenturyStart = exports.getPreviousCenturyStart = exports.getCenturyStart = exports.getMilliseconds = exports.getSeconds = exports.getMinutes = exports.getHours = exports.getDate = exports.getMonthHuman = exports.getMonth = exports.getYear = void 0;
+/**
+ * Utils
+ */
+function makeGetEdgeOfNeighbor(getPeriod, getEdgeOfPeriod, defaultOffset) {
+    return function makeGetEdgeOfNeighborInternal(date, offset) {
+        if (offset === void 0) { offset = defaultOffset; }
+        var previousPeriod = getPeriod(date) + offset;
+        return getEdgeOfPeriod(previousPeriod);
+    };
+}
+function makeGetEnd(getBeginOfNextPeriod) {
+    return function makeGetEndInternal(date) {
+        return new Date(getBeginOfNextPeriod(date).getTime() - 1);
+    };
+}
+function makeGetRange(getStart, getEnd) {
+    return function makeGetRangeInternal(date) {
+        return [getStart(date), getEnd(date)];
+    };
+}
+/**
+ * Simple getters - getting a property of a given point in time
+ */
+/**
+ * Gets year from a given date.
+ *
+ * @param {DateLike} date Date to get year from
+ * @returns {number} Year
+ */
+function getYear(date) {
+    if (date instanceof Date) {
+        return date.getFullYear();
+    }
+    if (typeof date === 'number') {
+        return date;
+    }
+    var year = parseInt(date, 10);
+    if (typeof date === 'string' && !isNaN(year)) {
+        return year;
+    }
+    throw new Error("Failed to get year from date: ".concat(date, "."));
+}
+exports.getYear = getYear;
+/**
+ * Gets month from a given date.
+ *
+ * @param {Date} date Date to get month from
+ * @returns {number} Month
+ */
+function getMonth(date) {
+    if (date instanceof Date) {
+        return date.getMonth();
+    }
+    throw new Error("Failed to get month from date: ".concat(date, "."));
+}
+exports.getMonth = getMonth;
+/**
+ * Gets human-readable month from a given date.
+ *
+ * @param {Date} date Date to get human-readable month from
+ * @returns {number} Human-readable month
+ */
+function getMonthHuman(date) {
+    if (date instanceof Date) {
+        return date.getMonth() + 1;
+    }
+    throw new Error("Failed to get human-readable month from date: ".concat(date, "."));
+}
+exports.getMonthHuman = getMonthHuman;
+/**
+ * Gets day of the month from a given date.
+ *
+ * @param {Date} date Date to get day of the month from
+ * @returns {number} Day of the month
+ */
+function getDate(date) {
+    if (date instanceof Date) {
+        return date.getDate();
+    }
+    throw new Error("Failed to get year from date: ".concat(date, "."));
+}
+exports.getDate = getDate;
+/**
+ * Gets hours from a given date.
+ *
+ * @param {Date | string} date Date to get hours from
+ * @returns {number} Hours
+ */
+function getHours(date) {
+    if (date instanceof Date) {
+        return date.getHours();
+    }
+    if (typeof date === 'string') {
+        var datePieces = date.split(':');
+        if (datePieces.length >= 2) {
+            var hoursString = datePieces[0];
+            if (hoursString) {
+                var hours = parseInt(hoursString, 10);
+                if (!isNaN(hours)) {
+                    return hours;
+                }
+            }
+        }
+    }
+    throw new Error("Failed to get hours from date: ".concat(date, "."));
+}
+exports.getHours = getHours;
+/**
+ * Gets minutes from a given date.
+ *
+ * @param {Date | string} date Date to get minutes from
+ * @returns {number} Minutes
+ */
+function getMinutes(date) {
+    if (date instanceof Date) {
+        return date.getMinutes();
+    }
+    if (typeof date === 'string') {
+        var datePieces = date.split(':');
+        if (datePieces.length >= 2) {
+            var minutesString = datePieces[1] || '0';
+            var minutes = parseInt(minutesString, 10);
+            if (!isNaN(minutes)) {
+                return minutes;
+            }
+        }
+    }
+    throw new Error("Failed to get minutes from date: ".concat(date, "."));
+}
+exports.getMinutes = getMinutes;
+/**
+ * Gets seconds from a given date.
+ *
+ * @param {Date | string} date Date to get seconds from
+ * @returns {number} Seconds
+ */
+function getSeconds(date) {
+    if (date instanceof Date) {
+        return date.getSeconds();
+    }
+    if (typeof date === 'string') {
+        var datePieces = date.split(':');
+        if (datePieces.length >= 2) {
+            var secondsWithMillisecondsString = datePieces[2] || '0';
+            var seconds = parseInt(secondsWithMillisecondsString, 10);
+            if (!isNaN(seconds)) {
+                return seconds;
+            }
+        }
+    }
+    throw new Error("Failed to get seconds from date: ".concat(date, "."));
+}
+exports.getSeconds = getSeconds;
+/**
+ * Gets milliseconds from a given date.
+ *
+ * @param {Date | string} date Date to get milliseconds from
+ * @returns {number} Milliseconds
+ */
+function getMilliseconds(date) {
+    if (date instanceof Date) {
+        return date.getMilliseconds();
+    }
+    if (typeof date === 'string') {
+        var datePieces = date.split(':');
+        if (datePieces.length >= 2) {
+            var secondsWithMillisecondsString = datePieces[2] || '0';
+            var millisecondsString = secondsWithMillisecondsString.split('.')[1] || '0';
+            var milliseconds = parseInt(millisecondsString, 10);
+            if (!isNaN(milliseconds)) {
+                return milliseconds;
+            }
+        }
+    }
+    throw new Error("Failed to get seconds from date: ".concat(date, "."));
+}
+exports.getMilliseconds = getMilliseconds;
+/**
+ * Century
+ */
+/**
+ * Gets century start date from a given date.
+ *
+ * @param {DateLike} date Date to get century start from
+ * @returns {Date} Century start date
+ */
+function getCenturyStart(date) {
+    var year = getYear(date);
+    var centuryStartYear = year + ((-year + 1) % 100);
+    var centuryStartDate = new Date();
+    centuryStartDate.setFullYear(centuryStartYear, 0, 1);
+    centuryStartDate.setHours(0, 0, 0, 0);
+    return centuryStartDate;
+}
+exports.getCenturyStart = getCenturyStart;
+/**
+ * Gets previous century start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century start from
+ * @returns {Date} Previous century start date
+ */
+exports.getPreviousCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, -100);
+/**
+ * Gets next century start date from a given date.
+ *
+ * @param {DateLike} date Date to get next century start from
+ * @returns {Date} Next century start date
+ */
+exports.getNextCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, 100);
+/**
+ * Gets century end date from a given date.
+ *
+ * @param {DateLike} date Date to get century end from
+ * @returns {Date} Century end date
+ */
+exports.getCenturyEnd = makeGetEnd(exports.getNextCenturyStart);
+/**
+ * Gets previous century end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century end from
+ * @returns {Date} Previous century end date
+ */
+exports.getPreviousCenturyEnd = makeGetEdgeOfNeighbor(getYear, exports.getCenturyEnd, -100);
+/**
+ * Gets next century end date from a given date.
+ *
+ * @param {DateLike} date Date to get next century end from
+ * @returns {Date} Next century end date
+ */
+exports.getNextCenturyEnd = makeGetEdgeOfNeighbor(getYear, exports.getCenturyEnd, 100);
+/**
+ * Gets century start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get century start and end from
+ * @returns {[Date, Date]} Century start and end dates
+ */
+exports.getCenturyRange = makeGetRange(getCenturyStart, exports.getCenturyEnd);
+/**
+ * Decade
+ */
+/**
+ * Gets decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get decade start from
+ * @returns {Date} Decade start date
+ */
+function getDecadeStart(date) {
+    var year = getYear(date);
+    var decadeStartYear = year + ((-year + 1) % 10);
+    var decadeStartDate = new Date();
+    decadeStartDate.setFullYear(decadeStartYear, 0, 1);
+    decadeStartDate.setHours(0, 0, 0, 0);
+    return decadeStartDate;
+}
+exports.getDecadeStart = getDecadeStart;
+/**
+ * Gets previous decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade start from
+ * @returns {Date} Previous decade start date
+ */
+exports.getPreviousDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, -10);
+/**
+ * Gets next decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade start from
+ * @returns {Date} Next decade start date
+ */
+exports.getNextDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, 10);
+/**
+ * Gets decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get decade end from
+ * @returns {Date} Decade end date
+ */
+exports.getDecadeEnd = makeGetEnd(exports.getNextDecadeStart);
+/**
+ * Gets previous decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade end from
+ * @returns {Date} Previous decade end date
+ */
+exports.getPreviousDecadeEnd = makeGetEdgeOfNeighbor(getYear, exports.getDecadeEnd, -10);
+/**
+ * Gets next decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade end from
+ * @returns {Date} Next decade end date
+ */
+exports.getNextDecadeEnd = makeGetEdgeOfNeighbor(getYear, exports.getDecadeEnd, 10);
+/**
+ * Gets decade start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get decade start and end from
+ * @returns {[Date, Date]} Decade start and end dates
+ */
+exports.getDecadeRange = makeGetRange(getDecadeStart, exports.getDecadeEnd);
+/**
+ * Year
+ */
+/**
+ * Gets year start date from a given date.
+ *
+ * @param {DateLike} date Date to get year start from
+ * @returns {Date} Year start date
+ */
+function getYearStart(date) {
+    var year = getYear(date);
+    var yearStartDate = new Date();
+    yearStartDate.setFullYear(year, 0, 1);
+    yearStartDate.setHours(0, 0, 0, 0);
+    return yearStartDate;
+}
+exports.getYearStart = getYearStart;
+/**
+ * Gets previous year start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year start from
+ * @returns {Date} Previous year start date
+ */
+exports.getPreviousYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, -1);
+/**
+ * Gets next year start date from a given date.
+ *
+ * @param {DateLike} date Date to get next year start from
+ * @returns {Date} Next year start date
+ */
+exports.getNextYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, 1);
+/**
+ * Gets year end date from a given date.
+ *
+ * @param {DateLike} date Date to get year end from
+ * @returns {Date} Year end date
+ */
+exports.getYearEnd = makeGetEnd(exports.getNextYearStart);
+/**
+ * Gets previous year end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year end from
+ * @returns {Date} Previous year end date
+ */
+exports.getPreviousYearEnd = makeGetEdgeOfNeighbor(getYear, exports.getYearEnd, -1);
+/**
+ * Gets next year end date from a given date.
+ *
+ * @param {DateLike} date Date to get next year end from
+ * @returns {Date} Next year end date
+ */
+exports.getNextYearEnd = makeGetEdgeOfNeighbor(getYear, exports.getYearEnd, 1);
+/**
+ * Gets year start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get year start and end from
+ * @returns {[Date, Date]} Year start and end dates
+ */
+exports.getYearRange = makeGetRange(getYearStart, exports.getYearEnd);
+/**
+ * Month
+ */
+function makeGetEdgeOfNeighborMonth(getEdgeOfPeriod, defaultOffset) {
+    return function makeGetEdgeOfNeighborMonthInternal(date, offset) {
+        if (offset === void 0) { offset = defaultOffset; }
+        var year = getYear(date);
+        var month = getMonth(date) + offset;
+        var previousPeriod = new Date();
+        previousPeriod.setFullYear(year, month, 1);
+        previousPeriod.setHours(0, 0, 0, 0);
+        return getEdgeOfPeriod(previousPeriod);
+    };
+}
+/**
+ * Gets month start date from a given date.
+ *
+ * @param {DateLike} date Date to get month start from
+ * @returns {Date} Month start date
+ */
+function getMonthStart(date) {
+    var year = getYear(date);
+    var month = getMonth(date);
+    var monthStartDate = new Date();
+    monthStartDate.setFullYear(year, month, 1);
+    monthStartDate.setHours(0, 0, 0, 0);
+    return monthStartDate;
+}
+exports.getMonthStart = getMonthStart;
+/**
+ * Gets previous month start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month start from
+ * @returns {Date} Previous month start date
+ */
+exports.getPreviousMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, -1);
+/**
+ * Gets next month start date from a given date.
+ *
+ * @param {DateLike} date Date to get next month start from
+ * @returns {Date} Next month start date
+ */
+exports.getNextMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, 1);
+/**
+ * Gets month end date from a given date.
+ *
+ * @param {DateLike} date Date to get month end from
+ * @returns {Date} Month end date
+ */
+exports.getMonthEnd = makeGetEnd(exports.getNextMonthStart);
+/**
+ * Gets previous month end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month end from
+ * @returns {Date} Previous month end date
+ */
+exports.getPreviousMonthEnd = makeGetEdgeOfNeighborMonth(exports.getMonthEnd, -1);
+/**
+ * Gets next month end date from a given date.
+ *
+ * @param {DateLike} date Date to get next month end from
+ * @returns {Date} Next month end date
+ */
+exports.getNextMonthEnd = makeGetEdgeOfNeighborMonth(exports.getMonthEnd, 1);
+/**
+ * Gets month start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get month start and end from
+ * @returns {[Date, Date]} Month start and end dates
+ */
+exports.getMonthRange = makeGetRange(getMonthStart, exports.getMonthEnd);
+/**
+ * Day
+ */
+function makeGetEdgeOfNeighborDay(getEdgeOfPeriod, defaultOffset) {
+    return function makeGetEdgeOfNeighborDayInternal(date, offset) {
+        if (offset === void 0) { offset = defaultOffset; }
+        var year = getYear(date);
+        var month = getMonth(date);
+        var day = getDate(date) + offset;
+        var previousPeriod = new Date();
+        previousPeriod.setFullYear(year, month, day);
+        previousPeriod.setHours(0, 0, 0, 0);
+        return getEdgeOfPeriod(previousPeriod);
+    };
+}
+/**
+ * Gets day start date from a given date.
+ *
+ * @param {DateLike} date Date to get day start from
+ * @returns {Date} Day start date
+ */
+function getDayStart(date) {
+    var year = getYear(date);
+    var month = getMonth(date);
+    var day = getDate(date);
+    var dayStartDate = new Date();
+    dayStartDate.setFullYear(year, month, day);
+    dayStartDate.setHours(0, 0, 0, 0);
+    return dayStartDate;
+}
+exports.getDayStart = getDayStart;
+/**
+ * Gets previous day start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day start from
+ * @returns {Date} Previous day start date
+ */
+exports.getPreviousDayStart = makeGetEdgeOfNeighborDay(getDayStart, -1);
+/**
+ * Gets next day start date from a given date.
+ *
+ * @param {DateLike} date Date to get next day start from
+ * @returns {Date} Next day start date
+ */
+exports.getNextDayStart = makeGetEdgeOfNeighborDay(getDayStart, 1);
+/**
+ * Gets day end date from a given date.
+ *
+ * @param {DateLike} date Date to get day end from
+ * @returns {Date} Day end date
+ */
+exports.getDayEnd = makeGetEnd(exports.getNextDayStart);
+/**
+ * Gets previous day end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day end from
+ * @returns {Date} Previous day end date
+ */
+exports.getPreviousDayEnd = makeGetEdgeOfNeighborDay(exports.getDayEnd, -1);
+/**
+ * Gets next day end date from a given date.
+ *
+ * @param {DateLike} date Date to get next day end from
+ * @returns {Date} Next day end date
+ */
+exports.getNextDayEnd = makeGetEdgeOfNeighborDay(exports.getDayEnd, 1);
+/**
+ * Gets day start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get day start and end from
+ * @returns {[Date, Date]} Day start and end dates
+ */
+exports.getDayRange = makeGetRange(getDayStart, exports.getDayEnd);
+/**
+ * Other
+ */
+/**
+ * Returns a number of days in a month of a given date.
+ *
+ * @param {Date} date Date
+ * @returns {number} Number of days in a month
+ */
+function getDaysInMonth(date) {
+    return getDate((0, exports.getMonthEnd)(date));
+}
+exports.getDaysInMonth = getDaysInMonth;
+function padStart(num, val) {
+    if (val === void 0) { val = 2; }
+    var numStr = "".concat(num);
+    if (numStr.length >= val) {
+        return num;
+    }
+    return "0000".concat(numStr).slice(-val);
+}
+/**
+ * Returns local hours and minutes (hh:mm).
+ *
+ * @param {Date | string} date Date to get hours and minutes from
+ * @returns {string} Local hours and minutes
+ */
+function getHoursMinutes(date) {
+    var hours = padStart(getHours(date));
+    var minutes = padStart(getMinutes(date));
+    return "".concat(hours, ":").concat(minutes);
+}
+exports.getHoursMinutes = getHoursMinutes;
+/**
+ * Returns local hours, minutes and seconds (hh:mm:ss).
+ *
+ * @param {Date | string} date Date to get hours, minutes and seconds from
+ * @returns {string} Local hours, minutes and seconds
+ */
+function getHoursMinutesSeconds(date) {
+    var hours = padStart(getHours(date));
+    var minutes = padStart(getMinutes(date));
+    var seconds = padStart(getSeconds(date));
+    return "".concat(hours, ":").concat(minutes, ":").concat(seconds);
+}
+exports.getHoursMinutesSeconds = getHoursMinutesSeconds;
+/**
+ * Returns local month in ISO-like format (YYYY-MM).
+ *
+ * @param {Date} date Date to get month in ISO-like format from
+ * @returns {string} Local month in ISO-like format
+ */
+function getISOLocalMonth(date) {
+    var year = padStart(getYear(date), 4);
+    var month = padStart(getMonthHuman(date));
+    return "".concat(year, "-").concat(month);
+}
+exports.getISOLocalMonth = getISOLocalMonth;
+/**
+ * Returns local date in ISO-like format (YYYY-MM-DD).
+ *
+ * @param {Date} date Date to get date in ISO-like format from
+ * @returns {string} Local date in ISO-like format
+ */
+function getISOLocalDate(date) {
+    var year = padStart(getYear(date), 4);
+    var month = padStart(getMonthHuman(date));
+    var day = padStart(getDate(date));
+    return "".concat(year, "-").concat(month, "-").concat(day);
+}
+exports.getISOLocalDate = getISOLocalDate;
+/**
+ * Returns local date & time in ISO-like format (YYYY-MM-DDThh:mm:ss).
+ *
+ * @param {Date} date Date to get date & time in ISO-like format from
+ * @returns {string} Local date & time in ISO-like format
+ */
+function getISOLocalDateTime(date) {
+    return "".concat(getISOLocalDate(date), "T").concat(getHoursMinutesSeconds(date));
+}
+exports.getISOLocalDateTime = getISOLocalDateTime;
Index: node_modules/@wojtekmaj/date-utils/dist/cjs/package.json
===================================================================
--- node_modules/@wojtekmaj/date-utils/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
Index: node_modules/@wojtekmaj/date-utils/dist/esm/index.d.ts
===================================================================
--- node_modules/@wojtekmaj/date-utils/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,360 @@
+type DateLike = Date | number | string;
+/**
+ * Simple getters - getting a property of a given point in time
+ */
+/**
+ * Gets year from a given date.
+ *
+ * @param {DateLike} date Date to get year from
+ * @returns {number} Year
+ */
+export declare function getYear(date: DateLike): number;
+/**
+ * Gets month from a given date.
+ *
+ * @param {Date} date Date to get month from
+ * @returns {number} Month
+ */
+export declare function getMonth(date: Date): number;
+/**
+ * Gets human-readable month from a given date.
+ *
+ * @param {Date} date Date to get human-readable month from
+ * @returns {number} Human-readable month
+ */
+export declare function getMonthHuman(date: Date): number;
+/**
+ * Gets day of the month from a given date.
+ *
+ * @param {Date} date Date to get day of the month from
+ * @returns {number} Day of the month
+ */
+export declare function getDate(date: Date): number;
+/**
+ * Gets hours from a given date.
+ *
+ * @param {Date | string} date Date to get hours from
+ * @returns {number} Hours
+ */
+export declare function getHours(date: Date | string): number;
+/**
+ * Gets minutes from a given date.
+ *
+ * @param {Date | string} date Date to get minutes from
+ * @returns {number} Minutes
+ */
+export declare function getMinutes(date: Date | string): number;
+/**
+ * Gets seconds from a given date.
+ *
+ * @param {Date | string} date Date to get seconds from
+ * @returns {number} Seconds
+ */
+export declare function getSeconds(date: Date | string): number;
+/**
+ * Gets milliseconds from a given date.
+ *
+ * @param {Date | string} date Date to get milliseconds from
+ * @returns {number} Milliseconds
+ */
+export declare function getMilliseconds(date: Date | string): number;
+/**
+ * Century
+ */
+/**
+ * Gets century start date from a given date.
+ *
+ * @param {DateLike} date Date to get century start from
+ * @returns {Date} Century start date
+ */
+export declare function getCenturyStart(date: DateLike): Date;
+/**
+ * Gets previous century start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century start from
+ * @returns {Date} Previous century start date
+ */
+export declare const getPreviousCenturyStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next century start date from a given date.
+ *
+ * @param {DateLike} date Date to get next century start from
+ * @returns {Date} Next century start date
+ */
+export declare const getNextCenturyStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets century end date from a given date.
+ *
+ * @param {DateLike} date Date to get century end from
+ * @returns {Date} Century end date
+ */
+export declare const getCenturyEnd: (date: DateLike) => Date;
+/**
+ * Gets previous century end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century end from
+ * @returns {Date} Previous century end date
+ */
+export declare const getPreviousCenturyEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next century end date from a given date.
+ *
+ * @param {DateLike} date Date to get next century end from
+ * @returns {Date} Next century end date
+ */
+export declare const getNextCenturyEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets century start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get century start and end from
+ * @returns {[Date, Date]} Century start and end dates
+ */
+export declare const getCenturyRange: (date: DateLike) => [Date, Date];
+/**
+ * Decade
+ */
+/**
+ * Gets decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get decade start from
+ * @returns {Date} Decade start date
+ */
+export declare function getDecadeStart(date: DateLike): Date;
+/**
+ * Gets previous decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade start from
+ * @returns {Date} Previous decade start date
+ */
+export declare const getPreviousDecadeStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade start from
+ * @returns {Date} Next decade start date
+ */
+export declare const getNextDecadeStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get decade end from
+ * @returns {Date} Decade end date
+ */
+export declare const getDecadeEnd: (date: DateLike) => Date;
+/**
+ * Gets previous decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade end from
+ * @returns {Date} Previous decade end date
+ */
+export declare const getPreviousDecadeEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade end from
+ * @returns {Date} Next decade end date
+ */
+export declare const getNextDecadeEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets decade start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get decade start and end from
+ * @returns {[Date, Date]} Decade start and end dates
+ */
+export declare const getDecadeRange: (date: DateLike) => [Date, Date];
+/**
+ * Year
+ */
+/**
+ * Gets year start date from a given date.
+ *
+ * @param {DateLike} date Date to get year start from
+ * @returns {Date} Year start date
+ */
+export declare function getYearStart(date: DateLike): Date;
+/**
+ * Gets previous year start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year start from
+ * @returns {Date} Previous year start date
+ */
+export declare const getPreviousYearStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next year start date from a given date.
+ *
+ * @param {DateLike} date Date to get next year start from
+ * @returns {Date} Next year start date
+ */
+export declare const getNextYearStart: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets year end date from a given date.
+ *
+ * @param {DateLike} date Date to get year end from
+ * @returns {Date} Year end date
+ */
+export declare const getYearEnd: (date: DateLike) => Date;
+/**
+ * Gets previous year end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year end from
+ * @returns {Date} Previous year end date
+ */
+export declare const getPreviousYearEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets next year end date from a given date.
+ *
+ * @param {DateLike} date Date to get next year end from
+ * @returns {Date} Next year end date
+ */
+export declare const getNextYearEnd: (date: DateLike, offset?: number) => Date;
+/**
+ * Gets year start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get year start and end from
+ * @returns {[Date, Date]} Year start and end dates
+ */
+export declare const getYearRange: (date: DateLike) => [Date, Date];
+/**
+ * Gets month start date from a given date.
+ *
+ * @param {DateLike} date Date to get month start from
+ * @returns {Date} Month start date
+ */
+export declare function getMonthStart(date: Date): Date;
+/**
+ * Gets previous month start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month start from
+ * @returns {Date} Previous month start date
+ */
+export declare const getPreviousMonthStart: (date: Date, offset?: number) => Date;
+/**
+ * Gets next month start date from a given date.
+ *
+ * @param {DateLike} date Date to get next month start from
+ * @returns {Date} Next month start date
+ */
+export declare const getNextMonthStart: (date: Date, offset?: number) => Date;
+/**
+ * Gets month end date from a given date.
+ *
+ * @param {DateLike} date Date to get month end from
+ * @returns {Date} Month end date
+ */
+export declare const getMonthEnd: (date: Date) => Date;
+/**
+ * Gets previous month end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month end from
+ * @returns {Date} Previous month end date
+ */
+export declare const getPreviousMonthEnd: (date: Date, offset?: number) => Date;
+/**
+ * Gets next month end date from a given date.
+ *
+ * @param {DateLike} date Date to get next month end from
+ * @returns {Date} Next month end date
+ */
+export declare const getNextMonthEnd: (date: Date, offset?: number) => Date;
+/**
+ * Gets month start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get month start and end from
+ * @returns {[Date, Date]} Month start and end dates
+ */
+export declare const getMonthRange: (date: Date) => [Date, Date];
+/**
+ * Gets day start date from a given date.
+ *
+ * @param {DateLike} date Date to get day start from
+ * @returns {Date} Day start date
+ */
+export declare function getDayStart(date: Date): Date;
+/**
+ * Gets previous day start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day start from
+ * @returns {Date} Previous day start date
+ */
+export declare const getPreviousDayStart: (date: Date, offset?: number) => Date;
+/**
+ * Gets next day start date from a given date.
+ *
+ * @param {DateLike} date Date to get next day start from
+ * @returns {Date} Next day start date
+ */
+export declare const getNextDayStart: (date: Date, offset?: number) => Date;
+/**
+ * Gets day end date from a given date.
+ *
+ * @param {DateLike} date Date to get day end from
+ * @returns {Date} Day end date
+ */
+export declare const getDayEnd: (date: Date) => Date;
+/**
+ * Gets previous day end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day end from
+ * @returns {Date} Previous day end date
+ */
+export declare const getPreviousDayEnd: (date: Date, offset?: number) => Date;
+/**
+ * Gets next day end date from a given date.
+ *
+ * @param {DateLike} date Date to get next day end from
+ * @returns {Date} Next day end date
+ */
+export declare const getNextDayEnd: (date: Date, offset?: number) => Date;
+/**
+ * Gets day start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get day start and end from
+ * @returns {[Date, Date]} Day start and end dates
+ */
+export declare const getDayRange: (date: Date) => [Date, Date];
+/**
+ * Other
+ */
+/**
+ * Returns a number of days in a month of a given date.
+ *
+ * @param {Date} date Date
+ * @returns {number} Number of days in a month
+ */
+export declare function getDaysInMonth(date: Date): number;
+/**
+ * Returns local hours and minutes (hh:mm).
+ *
+ * @param {Date | string} date Date to get hours and minutes from
+ * @returns {string} Local hours and minutes
+ */
+export declare function getHoursMinutes(date: Date | string): string;
+/**
+ * Returns local hours, minutes and seconds (hh:mm:ss).
+ *
+ * @param {Date | string} date Date to get hours, minutes and seconds from
+ * @returns {string} Local hours, minutes and seconds
+ */
+export declare function getHoursMinutesSeconds(date: Date | string): string;
+/**
+ * Returns local month in ISO-like format (YYYY-MM).
+ *
+ * @param {Date} date Date to get month in ISO-like format from
+ * @returns {string} Local month in ISO-like format
+ */
+export declare function getISOLocalMonth(date: Date): string;
+/**
+ * Returns local date in ISO-like format (YYYY-MM-DD).
+ *
+ * @param {Date} date Date to get date in ISO-like format from
+ * @returns {string} Local date in ISO-like format
+ */
+export declare function getISOLocalDate(date: Date): string;
+/**
+ * Returns local date & time in ISO-like format (YYYY-MM-DDThh:mm:ss).
+ *
+ * @param {Date} date Date to get date & time in ISO-like format from
+ * @returns {string} Local date & time in ISO-like format
+ */
+export declare function getISOLocalDateTime(date: Date): string;
+export {};
Index: node_modules/@wojtekmaj/date-utils/dist/esm/index.js
===================================================================
--- node_modules/@wojtekmaj/date-utils/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,562 @@
+/**
+ * Utils
+ */
+function makeGetEdgeOfNeighbor(getPeriod, getEdgeOfPeriod, defaultOffset) {
+    return function makeGetEdgeOfNeighborInternal(date, offset) {
+        if (offset === void 0) { offset = defaultOffset; }
+        var previousPeriod = getPeriod(date) + offset;
+        return getEdgeOfPeriod(previousPeriod);
+    };
+}
+function makeGetEnd(getBeginOfNextPeriod) {
+    return function makeGetEndInternal(date) {
+        return new Date(getBeginOfNextPeriod(date).getTime() - 1);
+    };
+}
+function makeGetRange(getStart, getEnd) {
+    return function makeGetRangeInternal(date) {
+        return [getStart(date), getEnd(date)];
+    };
+}
+/**
+ * Simple getters - getting a property of a given point in time
+ */
+/**
+ * Gets year from a given date.
+ *
+ * @param {DateLike} date Date to get year from
+ * @returns {number} Year
+ */
+export function getYear(date) {
+    if (date instanceof Date) {
+        return date.getFullYear();
+    }
+    if (typeof date === 'number') {
+        return date;
+    }
+    var year = parseInt(date, 10);
+    if (typeof date === 'string' && !isNaN(year)) {
+        return year;
+    }
+    throw new Error("Failed to get year from date: ".concat(date, "."));
+}
+/**
+ * Gets month from a given date.
+ *
+ * @param {Date} date Date to get month from
+ * @returns {number} Month
+ */
+export function getMonth(date) {
+    if (date instanceof Date) {
+        return date.getMonth();
+    }
+    throw new Error("Failed to get month from date: ".concat(date, "."));
+}
+/**
+ * Gets human-readable month from a given date.
+ *
+ * @param {Date} date Date to get human-readable month from
+ * @returns {number} Human-readable month
+ */
+export function getMonthHuman(date) {
+    if (date instanceof Date) {
+        return date.getMonth() + 1;
+    }
+    throw new Error("Failed to get human-readable month from date: ".concat(date, "."));
+}
+/**
+ * Gets day of the month from a given date.
+ *
+ * @param {Date} date Date to get day of the month from
+ * @returns {number} Day of the month
+ */
+export function getDate(date) {
+    if (date instanceof Date) {
+        return date.getDate();
+    }
+    throw new Error("Failed to get year from date: ".concat(date, "."));
+}
+/**
+ * Gets hours from a given date.
+ *
+ * @param {Date | string} date Date to get hours from
+ * @returns {number} Hours
+ */
+export function getHours(date) {
+    if (date instanceof Date) {
+        return date.getHours();
+    }
+    if (typeof date === 'string') {
+        var datePieces = date.split(':');
+        if (datePieces.length >= 2) {
+            var hoursString = datePieces[0];
+            if (hoursString) {
+                var hours = parseInt(hoursString, 10);
+                if (!isNaN(hours)) {
+                    return hours;
+                }
+            }
+        }
+    }
+    throw new Error("Failed to get hours from date: ".concat(date, "."));
+}
+/**
+ * Gets minutes from a given date.
+ *
+ * @param {Date | string} date Date to get minutes from
+ * @returns {number} Minutes
+ */
+export function getMinutes(date) {
+    if (date instanceof Date) {
+        return date.getMinutes();
+    }
+    if (typeof date === 'string') {
+        var datePieces = date.split(':');
+        if (datePieces.length >= 2) {
+            var minutesString = datePieces[1] || '0';
+            var minutes = parseInt(minutesString, 10);
+            if (!isNaN(minutes)) {
+                return minutes;
+            }
+        }
+    }
+    throw new Error("Failed to get minutes from date: ".concat(date, "."));
+}
+/**
+ * Gets seconds from a given date.
+ *
+ * @param {Date | string} date Date to get seconds from
+ * @returns {number} Seconds
+ */
+export function getSeconds(date) {
+    if (date instanceof Date) {
+        return date.getSeconds();
+    }
+    if (typeof date === 'string') {
+        var datePieces = date.split(':');
+        if (datePieces.length >= 2) {
+            var secondsWithMillisecondsString = datePieces[2] || '0';
+            var seconds = parseInt(secondsWithMillisecondsString, 10);
+            if (!isNaN(seconds)) {
+                return seconds;
+            }
+        }
+    }
+    throw new Error("Failed to get seconds from date: ".concat(date, "."));
+}
+/**
+ * Gets milliseconds from a given date.
+ *
+ * @param {Date | string} date Date to get milliseconds from
+ * @returns {number} Milliseconds
+ */
+export function getMilliseconds(date) {
+    if (date instanceof Date) {
+        return date.getMilliseconds();
+    }
+    if (typeof date === 'string') {
+        var datePieces = date.split(':');
+        if (datePieces.length >= 2) {
+            var secondsWithMillisecondsString = datePieces[2] || '0';
+            var millisecondsString = secondsWithMillisecondsString.split('.')[1] || '0';
+            var milliseconds = parseInt(millisecondsString, 10);
+            if (!isNaN(milliseconds)) {
+                return milliseconds;
+            }
+        }
+    }
+    throw new Error("Failed to get seconds from date: ".concat(date, "."));
+}
+/**
+ * Century
+ */
+/**
+ * Gets century start date from a given date.
+ *
+ * @param {DateLike} date Date to get century start from
+ * @returns {Date} Century start date
+ */
+export function getCenturyStart(date) {
+    var year = getYear(date);
+    var centuryStartYear = year + ((-year + 1) % 100);
+    var centuryStartDate = new Date();
+    centuryStartDate.setFullYear(centuryStartYear, 0, 1);
+    centuryStartDate.setHours(0, 0, 0, 0);
+    return centuryStartDate;
+}
+/**
+ * Gets previous century start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century start from
+ * @returns {Date} Previous century start date
+ */
+export var getPreviousCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, -100);
+/**
+ * Gets next century start date from a given date.
+ *
+ * @param {DateLike} date Date to get next century start from
+ * @returns {Date} Next century start date
+ */
+export var getNextCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, 100);
+/**
+ * Gets century end date from a given date.
+ *
+ * @param {DateLike} date Date to get century end from
+ * @returns {Date} Century end date
+ */
+export var getCenturyEnd = makeGetEnd(getNextCenturyStart);
+/**
+ * Gets previous century end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century end from
+ * @returns {Date} Previous century end date
+ */
+export var getPreviousCenturyEnd = makeGetEdgeOfNeighbor(getYear, getCenturyEnd, -100);
+/**
+ * Gets next century end date from a given date.
+ *
+ * @param {DateLike} date Date to get next century end from
+ * @returns {Date} Next century end date
+ */
+export var getNextCenturyEnd = makeGetEdgeOfNeighbor(getYear, getCenturyEnd, 100);
+/**
+ * Gets century start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get century start and end from
+ * @returns {[Date, Date]} Century start and end dates
+ */
+export var getCenturyRange = makeGetRange(getCenturyStart, getCenturyEnd);
+/**
+ * Decade
+ */
+/**
+ * Gets decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get decade start from
+ * @returns {Date} Decade start date
+ */
+export function getDecadeStart(date) {
+    var year = getYear(date);
+    var decadeStartYear = year + ((-year + 1) % 10);
+    var decadeStartDate = new Date();
+    decadeStartDate.setFullYear(decadeStartYear, 0, 1);
+    decadeStartDate.setHours(0, 0, 0, 0);
+    return decadeStartDate;
+}
+/**
+ * Gets previous decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade start from
+ * @returns {Date} Previous decade start date
+ */
+export var getPreviousDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, -10);
+/**
+ * Gets next decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade start from
+ * @returns {Date} Next decade start date
+ */
+export var getNextDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, 10);
+/**
+ * Gets decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get decade end from
+ * @returns {Date} Decade end date
+ */
+export var getDecadeEnd = makeGetEnd(getNextDecadeStart);
+/**
+ * Gets previous decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade end from
+ * @returns {Date} Previous decade end date
+ */
+export var getPreviousDecadeEnd = makeGetEdgeOfNeighbor(getYear, getDecadeEnd, -10);
+/**
+ * Gets next decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade end from
+ * @returns {Date} Next decade end date
+ */
+export var getNextDecadeEnd = makeGetEdgeOfNeighbor(getYear, getDecadeEnd, 10);
+/**
+ * Gets decade start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get decade start and end from
+ * @returns {[Date, Date]} Decade start and end dates
+ */
+export var getDecadeRange = makeGetRange(getDecadeStart, getDecadeEnd);
+/**
+ * Year
+ */
+/**
+ * Gets year start date from a given date.
+ *
+ * @param {DateLike} date Date to get year start from
+ * @returns {Date} Year start date
+ */
+export function getYearStart(date) {
+    var year = getYear(date);
+    var yearStartDate = new Date();
+    yearStartDate.setFullYear(year, 0, 1);
+    yearStartDate.setHours(0, 0, 0, 0);
+    return yearStartDate;
+}
+/**
+ * Gets previous year start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year start from
+ * @returns {Date} Previous year start date
+ */
+export var getPreviousYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, -1);
+/**
+ * Gets next year start date from a given date.
+ *
+ * @param {DateLike} date Date to get next year start from
+ * @returns {Date} Next year start date
+ */
+export var getNextYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, 1);
+/**
+ * Gets year end date from a given date.
+ *
+ * @param {DateLike} date Date to get year end from
+ * @returns {Date} Year end date
+ */
+export var getYearEnd = makeGetEnd(getNextYearStart);
+/**
+ * Gets previous year end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year end from
+ * @returns {Date} Previous year end date
+ */
+export var getPreviousYearEnd = makeGetEdgeOfNeighbor(getYear, getYearEnd, -1);
+/**
+ * Gets next year end date from a given date.
+ *
+ * @param {DateLike} date Date to get next year end from
+ * @returns {Date} Next year end date
+ */
+export var getNextYearEnd = makeGetEdgeOfNeighbor(getYear, getYearEnd, 1);
+/**
+ * Gets year start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get year start and end from
+ * @returns {[Date, Date]} Year start and end dates
+ */
+export var getYearRange = makeGetRange(getYearStart, getYearEnd);
+/**
+ * Month
+ */
+function makeGetEdgeOfNeighborMonth(getEdgeOfPeriod, defaultOffset) {
+    return function makeGetEdgeOfNeighborMonthInternal(date, offset) {
+        if (offset === void 0) { offset = defaultOffset; }
+        var year = getYear(date);
+        var month = getMonth(date) + offset;
+        var previousPeriod = new Date();
+        previousPeriod.setFullYear(year, month, 1);
+        previousPeriod.setHours(0, 0, 0, 0);
+        return getEdgeOfPeriod(previousPeriod);
+    };
+}
+/**
+ * Gets month start date from a given date.
+ *
+ * @param {DateLike} date Date to get month start from
+ * @returns {Date} Month start date
+ */
+export function getMonthStart(date) {
+    var year = getYear(date);
+    var month = getMonth(date);
+    var monthStartDate = new Date();
+    monthStartDate.setFullYear(year, month, 1);
+    monthStartDate.setHours(0, 0, 0, 0);
+    return monthStartDate;
+}
+/**
+ * Gets previous month start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month start from
+ * @returns {Date} Previous month start date
+ */
+export var getPreviousMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, -1);
+/**
+ * Gets next month start date from a given date.
+ *
+ * @param {DateLike} date Date to get next month start from
+ * @returns {Date} Next month start date
+ */
+export var getNextMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, 1);
+/**
+ * Gets month end date from a given date.
+ *
+ * @param {DateLike} date Date to get month end from
+ * @returns {Date} Month end date
+ */
+export var getMonthEnd = makeGetEnd(getNextMonthStart);
+/**
+ * Gets previous month end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month end from
+ * @returns {Date} Previous month end date
+ */
+export var getPreviousMonthEnd = makeGetEdgeOfNeighborMonth(getMonthEnd, -1);
+/**
+ * Gets next month end date from a given date.
+ *
+ * @param {DateLike} date Date to get next month end from
+ * @returns {Date} Next month end date
+ */
+export var getNextMonthEnd = makeGetEdgeOfNeighborMonth(getMonthEnd, 1);
+/**
+ * Gets month start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get month start and end from
+ * @returns {[Date, Date]} Month start and end dates
+ */
+export var getMonthRange = makeGetRange(getMonthStart, getMonthEnd);
+/**
+ * Day
+ */
+function makeGetEdgeOfNeighborDay(getEdgeOfPeriod, defaultOffset) {
+    return function makeGetEdgeOfNeighborDayInternal(date, offset) {
+        if (offset === void 0) { offset = defaultOffset; }
+        var year = getYear(date);
+        var month = getMonth(date);
+        var day = getDate(date) + offset;
+        var previousPeriod = new Date();
+        previousPeriod.setFullYear(year, month, day);
+        previousPeriod.setHours(0, 0, 0, 0);
+        return getEdgeOfPeriod(previousPeriod);
+    };
+}
+/**
+ * Gets day start date from a given date.
+ *
+ * @param {DateLike} date Date to get day start from
+ * @returns {Date} Day start date
+ */
+export function getDayStart(date) {
+    var year = getYear(date);
+    var month = getMonth(date);
+    var day = getDate(date);
+    var dayStartDate = new Date();
+    dayStartDate.setFullYear(year, month, day);
+    dayStartDate.setHours(0, 0, 0, 0);
+    return dayStartDate;
+}
+/**
+ * Gets previous day start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day start from
+ * @returns {Date} Previous day start date
+ */
+export var getPreviousDayStart = makeGetEdgeOfNeighborDay(getDayStart, -1);
+/**
+ * Gets next day start date from a given date.
+ *
+ * @param {DateLike} date Date to get next day start from
+ * @returns {Date} Next day start date
+ */
+export var getNextDayStart = makeGetEdgeOfNeighborDay(getDayStart, 1);
+/**
+ * Gets day end date from a given date.
+ *
+ * @param {DateLike} date Date to get day end from
+ * @returns {Date} Day end date
+ */
+export var getDayEnd = makeGetEnd(getNextDayStart);
+/**
+ * Gets previous day end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day end from
+ * @returns {Date} Previous day end date
+ */
+export var getPreviousDayEnd = makeGetEdgeOfNeighborDay(getDayEnd, -1);
+/**
+ * Gets next day end date from a given date.
+ *
+ * @param {DateLike} date Date to get next day end from
+ * @returns {Date} Next day end date
+ */
+export var getNextDayEnd = makeGetEdgeOfNeighborDay(getDayEnd, 1);
+/**
+ * Gets day start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get day start and end from
+ * @returns {[Date, Date]} Day start and end dates
+ */
+export var getDayRange = makeGetRange(getDayStart, getDayEnd);
+/**
+ * Other
+ */
+/**
+ * Returns a number of days in a month of a given date.
+ *
+ * @param {Date} date Date
+ * @returns {number} Number of days in a month
+ */
+export function getDaysInMonth(date) {
+    return getDate(getMonthEnd(date));
+}
+function padStart(num, val) {
+    if (val === void 0) { val = 2; }
+    var numStr = "".concat(num);
+    if (numStr.length >= val) {
+        return num;
+    }
+    return "0000".concat(numStr).slice(-val);
+}
+/**
+ * Returns local hours and minutes (hh:mm).
+ *
+ * @param {Date | string} date Date to get hours and minutes from
+ * @returns {string} Local hours and minutes
+ */
+export function getHoursMinutes(date) {
+    var hours = padStart(getHours(date));
+    var minutes = padStart(getMinutes(date));
+    return "".concat(hours, ":").concat(minutes);
+}
+/**
+ * Returns local hours, minutes and seconds (hh:mm:ss).
+ *
+ * @param {Date | string} date Date to get hours, minutes and seconds from
+ * @returns {string} Local hours, minutes and seconds
+ */
+export function getHoursMinutesSeconds(date) {
+    var hours = padStart(getHours(date));
+    var minutes = padStart(getMinutes(date));
+    var seconds = padStart(getSeconds(date));
+    return "".concat(hours, ":").concat(minutes, ":").concat(seconds);
+}
+/**
+ * Returns local month in ISO-like format (YYYY-MM).
+ *
+ * @param {Date} date Date to get month in ISO-like format from
+ * @returns {string} Local month in ISO-like format
+ */
+export function getISOLocalMonth(date) {
+    var year = padStart(getYear(date), 4);
+    var month = padStart(getMonthHuman(date));
+    return "".concat(year, "-").concat(month);
+}
+/**
+ * Returns local date in ISO-like format (YYYY-MM-DD).
+ *
+ * @param {Date} date Date to get date in ISO-like format from
+ * @returns {string} Local date in ISO-like format
+ */
+export function getISOLocalDate(date) {
+    var year = padStart(getYear(date), 4);
+    var month = padStart(getMonthHuman(date));
+    var day = padStart(getDate(date));
+    return "".concat(year, "-").concat(month, "-").concat(day);
+}
+/**
+ * Returns local date & time in ISO-like format (YYYY-MM-DDThh:mm:ss).
+ *
+ * @param {Date} date Date to get date & time in ISO-like format from
+ * @returns {string} Local date & time in ISO-like format
+ */
+export function getISOLocalDateTime(date) {
+    return "".concat(getISOLocalDate(date), "T").concat(getHoursMinutesSeconds(date));
+}
Index: node_modules/@wojtekmaj/date-utils/package.json
===================================================================
--- node_modules/@wojtekmaj/date-utils/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+{
+  "name": "@wojtekmaj/date-utils",
+  "version": "1.5.1",
+  "description": "A collection of date-related utilities.",
+  "type": "module",
+  "sideEffects": false,
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/esm/index.js",
+  "source": "./src/index.ts",
+  "types": "./dist/cjs/index.d.ts",
+  "exports": {
+    "import": "./dist/esm/index.js",
+    "require": "./dist/cjs/index.js"
+  },
+  "scripts": {
+    "build": "yarn build-esm && yarn build-cjs && yarn build-cjs-package",
+    "build-esm": "tsc --project tsconfig.build.json --outDir dist/esm",
+    "build-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs --verbatimModuleSyntax false",
+    "build-cjs-package": "echo '{\n  \"type\": \"commonjs\"\n}' > dist/cjs/package.json",
+    "clean": "rimraf dist",
+    "lint": "eslint .",
+    "prepack": "yarn clean && yarn build",
+    "prettier": "prettier --check . --cache",
+    "test": "yarn lint && yarn tsc && yarn prettier && yarn unit",
+    "tsc": "tsc --noEmit",
+    "unit": "vitest"
+  },
+  "keywords": [
+    "date",
+    "utils"
+  ],
+  "author": {
+    "name": "Wojciech Maj",
+    "email": "kontakt@wojtekmaj.pl"
+  },
+  "license": "MIT",
+  "devDependencies": {
+    "eslint": "^8.26.0",
+    "eslint-config-wojtekmaj": "^0.9.0",
+    "husky": "^8.0.0",
+    "lint-staged": "^14.0.0",
+    "prettier": "^3.0.0",
+    "rimraf": "^3.0.0",
+    "typescript": "^5.0.0",
+    "vitest": "^0.34.0"
+  },
+  "publishConfig": {
+    "access": "public",
+    "provenance": true
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/wojtekmaj/date-utils.git"
+  },
+  "funding": "https://github.com/wojtekmaj/date-utils?sponsor=1",
+  "packageManager": "yarn@3.1.0"
+}
Index: node_modules/@wojtekmaj/date-utils/src/index.spec.ts
===================================================================
--- node_modules/@wojtekmaj/date-utils/src/index.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/src/index.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1051 @@
+import { describe, expect, it } from 'vitest';
+import {
+  getYear,
+  getMonth,
+  getMonthHuman,
+  getDate,
+  getHours,
+  getMinutes,
+  getSeconds,
+  getMilliseconds,
+  getCenturyStart,
+  getPreviousCenturyStart,
+  getNextCenturyStart,
+  getCenturyEnd,
+  getPreviousCenturyEnd,
+  getNextCenturyEnd,
+  getCenturyRange,
+  getDecadeStart,
+  getPreviousDecadeStart,
+  getNextDecadeStart,
+  getDecadeEnd,
+  getPreviousDecadeEnd,
+  getNextDecadeEnd,
+  getDecadeRange,
+  getYearStart,
+  getPreviousYearStart,
+  getNextYearStart,
+  getYearEnd,
+  getPreviousYearEnd,
+  getNextYearEnd,
+  getYearRange,
+  getMonthStart,
+  getPreviousMonthStart,
+  getNextMonthStart,
+  getMonthEnd,
+  getPreviousMonthEnd,
+  getNextMonthEnd,
+  getMonthRange,
+  getDayStart,
+  getPreviousDayStart,
+  getNextDayStart,
+  getDayEnd,
+  getPreviousDayEnd,
+  getNextDayEnd,
+  getDayRange,
+  getDaysInMonth,
+  getHoursMinutes,
+  getHoursMinutesSeconds,
+  getISOLocalMonth,
+  getISOLocalDate,
+  getISOLocalDateTime,
+} from './index.js';
+
+type DateLike = Date | number | string;
+
+function testThrow(fn: ((arg: Date) => void) | ((arg: DateLike) => void)) {
+  it('throws an error when given nonsense data', () => {
+    const text = 'wololo';
+    const flag = true;
+
+    // @ts-expect-error-next-line
+    expect(() => fn(text)).toThrow();
+    // @ts-expect-error-next-line
+    expect(() => fn(flag)).toThrow();
+    // @ts-expect-error-next-line
+    expect(() => fn()).toThrow();
+  });
+}
+
+/**
+ * Simple getters
+ */
+
+describe('getYear()', () => {
+  it('returns proper year for a given date', () => {
+    const date = new Date(2019, 0, 1);
+
+    const year = getYear(date);
+
+    expect(year).toBe(2019);
+  });
+
+  it('returns proper year for a given number', () => {
+    const date = 2019;
+
+    const year = getYear(date);
+
+    expect(year).toBe(2019);
+  });
+
+  it('returns proper year for a given string', () => {
+    const date = '2019';
+
+    const year = getYear(date);
+
+    expect(year).toBe(2019);
+  });
+
+  testThrow(getYear);
+});
+
+describe('getMonth()', () => {
+  it('returns proper month', () => {
+    const date = new Date(2019, 0, 1);
+
+    const result = getMonth(date);
+
+    expect(result).toBe(0);
+  });
+
+  testThrow(getMonth);
+});
+
+describe('getMonthHuman()', () => {
+  it('returns proper human-readable month', () => {
+    const date = new Date(2019, 0, 1);
+
+    const result = getMonthHuman(date);
+
+    expect(result).toBe(1);
+  });
+
+  testThrow(getMonthHuman);
+});
+
+describe('getDate()', () => {
+  it('returns proper date', () => {
+    const date = new Date(2019, 0, 1);
+
+    const result = getDate(date);
+
+    expect(result).toBe(1);
+  });
+
+  testThrow(getDate);
+});
+
+describe('getHours()', () => {
+  it('returns proper hours from Date', () => {
+    const date = new Date(2019, 0, 1, 22, 41, 56);
+
+    const result = getHours(date);
+
+    expect(result).toBe(22);
+  });
+
+  it('returns proper hours from string', () => {
+    const date = '22:41:56';
+
+    const result = getHours(date);
+
+    expect(result).toBe(22);
+  });
+
+  testThrow(getHours);
+});
+
+describe('getMinutes()', () => {
+  it('returns proper minutes from Date', () => {
+    const date = new Date(2019, 0, 1, 22, 41, 56);
+
+    const result = getMinutes(date);
+
+    expect(result).toBe(41);
+  });
+
+  it('returns proper minutes from string', () => {
+    const date = '22:41:56';
+
+    const result = getMinutes(date);
+
+    expect(result).toBe(41);
+  });
+
+  testThrow(getMinutes);
+});
+
+describe('getSeconds()', () => {
+  it('returns proper seconds from Date', () => {
+    const date = new Date(2019, 0, 1, 22, 41, 56);
+
+    const result = getSeconds(date);
+
+    expect(result).toBe(56);
+  });
+
+  it('returns proper seconds from string', () => {
+    const date = '22:41:56';
+
+    const result = getSeconds(date);
+
+    expect(result).toBe(56);
+  });
+
+  it('returns proper seconds from string without seconds', () => {
+    const date = '22:41';
+
+    const result = getSeconds(date);
+
+    expect(result).toBe(0);
+  });
+
+  it('returns proper seconds from string with milliseconds', () => {
+    const date = '22:41:56.321';
+
+    const result = getSeconds(date);
+
+    expect(result).toBe(56);
+  });
+
+  testThrow(getSeconds);
+});
+
+describe('getMilliseconds()', () => {
+  it('returns proper milliseconds from Date', () => {
+    const date = new Date(2019, 0, 1, 22, 41, 56, 321);
+
+    const result = getMilliseconds(date);
+
+    expect(result).toBe(321);
+  });
+
+  it('returns proper millieconds from string', () => {
+    const date = '22:41:56.321';
+
+    const result = getMilliseconds(date);
+
+    expect(result).toBe(321);
+  });
+
+  it('returns proper milliseconds from string without milliseconds', () => {
+    const date = '22:41:56';
+
+    const result = getMilliseconds(date);
+
+    expect(result).toBe(0);
+  });
+
+  it('returns proper milliseconds from string without seconds', () => {
+    const date = '22:41';
+
+    const result = getMilliseconds(date);
+
+    expect(result).toBe(0);
+  });
+
+  testThrow(getMilliseconds);
+});
+
+/**
+ * Century
+ */
+
+describe('getCenturyStart()', () => {
+  it('returns proper start of the century', () => {
+    const date = new Date(2019, 0, 1);
+    const centuryStartDate = new Date(2001, 0, 1);
+
+    const result = getCenturyStart(date);
+
+    expect(result).toEqual(centuryStartDate);
+  });
+
+  it('returns proper start of the century for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 0, 1);
+    date.setHours(0, 0, 0, 0);
+    const centuryStartDate = new Date();
+    centuryStartDate.setFullYear(1, 0, 1);
+    centuryStartDate.setHours(0, 0, 0, 0);
+
+    const result = getCenturyStart(date);
+
+    expect(result).toEqual(centuryStartDate);
+  });
+
+  testThrow(getCenturyStart);
+});
+
+describe('getPreviousCenturyStart()', () => {
+  it('returns proper start of the previous century', () => {
+    const date = new Date(2019, 0, 1);
+    const previousCenturyStartDate = new Date(1901, 0, 1);
+
+    const result = getPreviousCenturyStart(date);
+
+    expect(result).toEqual(previousCenturyStartDate);
+  });
+
+  testThrow(getPreviousCenturyStart);
+});
+
+describe('getNextCenturyStart()', () => {
+  it('returns proper start of the next century', () => {
+    const date = new Date(2019, 0, 1);
+    const nextCenturyStartDate = new Date(2101, 0, 1);
+
+    const result = getNextCenturyStart(date);
+
+    expect(result).toEqual(nextCenturyStartDate);
+  });
+
+  testThrow(getNextCenturyStart);
+});
+
+describe('getCenturyEnd()', () => {
+  it('returns proper end of the century', () => {
+    const date = new Date(2019, 0, 1);
+    const centuryEndDate = new Date(2100, 11, 31, 23, 59, 59, 999);
+
+    const result = getCenturyEnd(date);
+
+    expect(result).toEqual(centuryEndDate);
+  });
+
+  it('returns proper end of the century for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 0, 1);
+    date.setHours(0, 0, 0, 0);
+    const centuryEndDate = new Date();
+    centuryEndDate.setFullYear(100, 11, 31);
+    centuryEndDate.setHours(23, 59, 59, 999);
+
+    const result = getCenturyEnd(date);
+
+    expect(result).toEqual(centuryEndDate);
+  });
+
+  testThrow(getCenturyEnd);
+});
+
+describe('getPreviousCenturyEnd()', () => {
+  it('returns proper end of the previous century', () => {
+    const date = new Date(2019, 0, 1);
+    const previousCenturyEndDate = new Date(2000, 11, 31, 23, 59, 59, 999);
+
+    const result = getPreviousCenturyEnd(date);
+
+    expect(result).toEqual(previousCenturyEndDate);
+  });
+
+  testThrow(getPreviousCenturyEnd);
+});
+
+describe('getNextCenturyEnd()', () => {
+  it('returns proper end of the next century', () => {
+    const date = new Date(2019, 0, 1);
+    const nextCenturyEndDate = new Date(2200, 11, 31, 23, 59, 59, 999);
+
+    const result = getNextCenturyEnd(date);
+
+    expect(result).toEqual(nextCenturyEndDate);
+  });
+
+  testThrow(getNextCenturyEnd);
+});
+
+describe('getCenturyRange()', () => {
+  it('returns proper century date range', () => {
+    const date = new Date(2019, 0, 1);
+    const centuryStartDate = new Date(2001, 0, 1);
+    const centuryEndDate = new Date(2100, 11, 31, 23, 59, 59, 999);
+
+    const result = getCenturyRange(date);
+
+    expect(result).toHaveLength(2);
+    expect(result).toEqual([centuryStartDate, centuryEndDate]);
+  });
+
+  testThrow(getCenturyRange);
+});
+
+/**
+ * Decade
+ */
+
+describe('getDecadeStart()', () => {
+  it('returns proper start of the decade', () => {
+    const date = new Date(2019, 0, 1);
+    const decadeStartDate = new Date(2011, 0, 1);
+
+    const result = getDecadeStart(date);
+
+    expect(result).toEqual(decadeStartDate);
+  });
+
+  it('returns proper start of the decade for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 0, 1);
+    date.setHours(0, 0, 0, 0);
+    const decadeStartDate = new Date();
+    decadeStartDate.setFullYear(11, 0, 1);
+    decadeStartDate.setHours(0, 0, 0, 0);
+
+    const result = getDecadeStart(date);
+
+    expect(result).toEqual(decadeStartDate);
+  });
+
+  testThrow(getDecadeStart);
+});
+
+describe('getPreviousDecadeStart()', () => {
+  it('returns proper start of the previous decade', () => {
+    const date = new Date(2019, 0, 1);
+    const previousDecadeStartDate = new Date(2001, 0, 1);
+
+    const result = getPreviousDecadeStart(date);
+
+    expect(result).toEqual(previousDecadeStartDate);
+  });
+
+  testThrow(getPreviousDecadeStart);
+});
+
+describe('getNextDecadeStart()', () => {
+  it('returns proper start of the next decade', () => {
+    const date = new Date(2019, 0, 1);
+    const nextDecadeStartDate = new Date(2021, 0, 1);
+
+    const result = getNextDecadeStart(date);
+
+    expect(result).toEqual(nextDecadeStartDate);
+  });
+
+  testThrow(getNextDecadeStart);
+});
+
+describe('getDecadeEnd()', () => {
+  it('returns proper end of the decade', () => {
+    const date = new Date(2019, 0, 1);
+    const decadeEndDate = new Date(2020, 11, 31, 23, 59, 59, 999);
+
+    const result = getDecadeEnd(date);
+
+    expect(result).toEqual(decadeEndDate);
+  });
+
+  it('returns proper end of the decade for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 0, 1);
+    date.setHours(0, 0, 0, 0);
+    const decadeEndDate = new Date();
+    decadeEndDate.setFullYear(20, 11, 31);
+    decadeEndDate.setHours(23, 59, 59, 999);
+
+    const result = getDecadeEnd(date);
+
+    expect(result).toEqual(decadeEndDate);
+  });
+
+  testThrow(getDecadeEnd);
+});
+
+describe('getPreviousDecadeEnd()', () => {
+  it('returns proper end of the previous decade', () => {
+    const date = new Date(2019, 0, 1);
+    const previousDecadeEndDate = new Date(2010, 11, 31, 23, 59, 59, 999);
+
+    const result = getPreviousDecadeEnd(date);
+
+    expect(result).toEqual(previousDecadeEndDate);
+  });
+
+  testThrow(getPreviousDecadeEnd);
+});
+
+describe('getNextDecadeEnd()', () => {
+  it('returns proper end of the next decade', () => {
+    const date = new Date(2019, 0, 1);
+    const nextDecadeEndDate = new Date(2030, 11, 31, 23, 59, 59, 999);
+
+    const result = getNextDecadeEnd(date);
+
+    expect(result).toEqual(nextDecadeEndDate);
+  });
+
+  testThrow(getNextDecadeEnd);
+});
+
+describe('getDecadeRange()', () => {
+  it('returns proper decade date range', () => {
+    const date = new Date(2019, 0, 1);
+    const decadeStartDate = new Date(2011, 0, 1);
+    const decadeEndDate = new Date(2020, 11, 31, 23, 59, 59, 999);
+
+    const result = getDecadeRange(date);
+
+    expect(result).toHaveLength(2);
+    expect(result).toEqual([decadeStartDate, decadeEndDate]);
+  });
+
+  testThrow(getDecadeRange);
+});
+
+/**
+ * Year
+ */
+
+describe('getYearStart()', () => {
+  it('returns proper start of the year', () => {
+    const date = new Date(2019, 6, 1);
+    const yearStartDate = new Date(2019, 0, 1);
+
+    const result = getYearStart(date);
+
+    expect(result).toEqual(yearStartDate);
+  });
+
+  it('returns proper start of the year for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 6, 1);
+    date.setHours(0, 0, 0, 0);
+    const yearStartDate = new Date();
+    yearStartDate.setFullYear(19, 0, 1);
+    yearStartDate.setHours(0, 0, 0, 0);
+
+    const result = getYearStart(date);
+
+    expect(result).toEqual(yearStartDate);
+  });
+
+  testThrow(getYearStart);
+});
+
+describe('getPreviousYearStart()', () => {
+  it('returns proper start of the previous year', () => {
+    const date = new Date(2019, 6, 1);
+    const previousYearStartDate = new Date(2018, 0, 1);
+
+    const result = getPreviousYearStart(date);
+
+    expect(result).toEqual(previousYearStartDate);
+  });
+
+  testThrow(getPreviousYearStart);
+});
+
+describe('getNextYearStart()', () => {
+  it('returns proper start of the next year', () => {
+    const date = new Date(2019, 6, 1);
+    const nextYearStartDate = new Date(2020, 0, 1);
+
+    const result = getNextYearStart(date);
+
+    expect(result).toEqual(nextYearStartDate);
+  });
+
+  testThrow(getNextYearStart);
+});
+
+describe('getYearEnd()', () => {
+  it('returns proper end of the year', () => {
+    const date = new Date(2019, 6, 1);
+    const yearEndDate = new Date(2019, 11, 31, 23, 59, 59, 999);
+
+    const result = getYearEnd(date);
+
+    expect(result).toEqual(yearEndDate);
+  });
+
+  it('returns proper end of the year for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 0, 1);
+    date.setHours(0, 0, 0, 0);
+    const yearEndDate = new Date();
+    yearEndDate.setFullYear(19, 11, 31);
+    yearEndDate.setHours(23, 59, 59, 999);
+
+    const result = getYearEnd(date);
+
+    expect(result).toEqual(yearEndDate);
+  });
+
+  testThrow(getYearEnd);
+});
+
+describe('getPreviousYearEnd()', () => {
+  it('returns proper end of the previous year', () => {
+    const date = new Date(2019, 6, 1);
+    const previousYearEndDate = new Date(2018, 11, 31, 23, 59, 59, 999);
+
+    const result = getPreviousYearEnd(date);
+
+    expect(result).toEqual(previousYearEndDate);
+  });
+
+  testThrow(getPreviousYearEnd);
+});
+
+describe('getNextYearEnd()', () => {
+  it('returns proper end of the next year', () => {
+    const date = new Date(2019, 6, 1);
+    const nextYearEndDate = new Date(2020, 11, 31, 23, 59, 59, 999);
+
+    const result = getNextYearEnd(date);
+
+    expect(result).toEqual(nextYearEndDate);
+  });
+
+  testThrow(getNextYearEnd);
+});
+
+describe('getYearRange()', () => {
+  it('returns proper year date range', () => {
+    const date = new Date(2019, 6, 1);
+    const yearStartDate = new Date(2019, 0, 1);
+    const yearEndDate = new Date(2019, 11, 31, 23, 59, 59, 999);
+
+    const result = getYearRange(date);
+
+    expect(result).toHaveLength(2);
+    expect(result).toEqual([yearStartDate, yearEndDate]);
+  });
+
+  testThrow(getYearRange);
+});
+
+/**
+ * Month
+ */
+
+describe('getMonthStart()', () => {
+  it('returns proper start of the month', () => {
+    const date = new Date(2019, 6, 15);
+    const monthStartDate = new Date(2019, 6, 1);
+
+    const result = getMonthStart(date);
+
+    expect(result).toEqual(monthStartDate);
+  });
+
+  it('returns proper start of the month for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 6, 15);
+    date.setHours(0, 0, 0, 0);
+    const monthStartDate = new Date();
+    monthStartDate.setFullYear(19, 6, 1);
+    monthStartDate.setHours(0, 0, 0, 0);
+
+    const result = getMonthStart(date);
+
+    expect(result).toEqual(monthStartDate);
+  });
+
+  testThrow(getMonthStart);
+});
+
+describe('getPreviousMonthStart()', () => {
+  it('returns proper start of the previous month', () => {
+    const date = new Date(2019, 6, 15);
+    const previousMonthStartDate = new Date(2019, 5, 1);
+
+    const result = getPreviousMonthStart(date);
+
+    expect(result).toEqual(previousMonthStartDate);
+  });
+
+  testThrow(getPreviousMonthStart);
+});
+
+describe('getNextMonthStart()', () => {
+  it('returns proper start of the next month', () => {
+    const date = new Date(2019, 6, 15);
+    const nextMonthStartDate = new Date(2019, 7, 1);
+
+    const result = getNextMonthStart(date);
+
+    expect(result).toEqual(nextMonthStartDate);
+  });
+
+  testThrow(getNextMonthStart);
+});
+
+describe('getMonthEnd()', () => {
+  it('returns proper end of the month', () => {
+    const date = new Date(2019, 6, 15);
+    const monthEndDate = new Date(2019, 6, 31, 23, 59, 59, 999);
+
+    const result = getMonthEnd(date);
+
+    expect(result).toEqual(monthEndDate);
+  });
+
+  it('returns proper end of the month for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 6, 15);
+    date.setHours(0, 0, 0, 0);
+    const monthEndDate = new Date();
+    monthEndDate.setFullYear(19, 6, 31);
+    monthEndDate.setHours(23, 59, 59, 999);
+
+    const result = getMonthEnd(date);
+
+    expect(result).toEqual(monthEndDate);
+  });
+
+  testThrow(getMonthEnd);
+});
+
+describe('getPreviousMonthEnd()', () => {
+  it('returns proper end of the previous month', () => {
+    const date = new Date(2019, 6, 15);
+    const previousMonthEndDate = new Date(2019, 5, 30, 23, 59, 59, 999);
+
+    const result = getPreviousMonthEnd(date);
+
+    expect(result).toEqual(previousMonthEndDate);
+  });
+
+  testThrow(getPreviousMonthEnd);
+});
+
+describe('getNextMonthEnd()', () => {
+  it('returns proper end of the next month', () => {
+    const date = new Date(2019, 6, 15);
+    const nextMonthEndDate = new Date(2019, 7, 31, 23, 59, 59, 999);
+
+    const result = getNextMonthEnd(date);
+
+    expect(result).toEqual(nextMonthEndDate);
+  });
+
+  testThrow(getNextMonthEnd);
+});
+
+describe('getMonthRange()', () => {
+  it('returns proper month date range', () => {
+    const date = new Date(2019, 6, 15);
+    const monthStartDate = new Date(2019, 6, 1);
+    const monthEndDate = new Date(2019, 6, 31, 23, 59, 59, 999);
+
+    const result = getMonthRange(date);
+
+    expect(result).toHaveLength(2);
+    expect(result).toEqual([monthStartDate, monthEndDate]);
+  });
+
+  testThrow(getMonthRange);
+});
+
+/**
+ * Day
+ */
+
+describe('getDayStart()', () => {
+  it('returns proper beginning of the day', () => {
+    const date = new Date(2019, 6, 15, 12);
+    const dayStartDate = new Date(2019, 6, 15);
+
+    const result = getDayStart(date);
+
+    expect(result).toEqual(dayStartDate);
+  });
+
+  it('returns proper beginning of the day for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 6, 15);
+    date.setHours(0, 0, 0, 0);
+    const dayStartDate = new Date();
+    dayStartDate.setFullYear(19, 6, 15);
+    dayStartDate.setHours(0, 0, 0, 0);
+
+    const result = getDayStart(date);
+
+    expect(result).toEqual(dayStartDate);
+  });
+
+  testThrow(getDayStart);
+});
+
+describe('getPreviousDayStart()', () => {
+  it('returns proper start of the previous day', () => {
+    const date = new Date(2019, 6, 15, 12);
+    const previousDayStartDate = new Date(2019, 6, 14);
+
+    const result = getPreviousDayStart(date);
+
+    expect(result).toEqual(previousDayStartDate);
+  });
+
+  testThrow(getPreviousDayStart);
+});
+
+describe('getNextDayStart()', () => {
+  it('returns proper start of the next day', () => {
+    const date = new Date(2019, 6, 15, 12);
+    const nextDayStartDate = new Date(2019, 6, 16);
+
+    const result = getNextDayStart(date);
+
+    expect(result).toEqual(nextDayStartDate);
+  });
+
+  testThrow(getNextDayStart);
+});
+
+describe('getDayEnd()', () => {
+  it('returns proper end of the day', () => {
+    const date = new Date(2019, 6, 15, 12);
+    const dayEndDate = new Date(2019, 6, 15, 23, 59, 59, 999);
+
+    const result = getDayEnd(date);
+
+    expect(result).toEqual(dayEndDate);
+  });
+
+  it('returns proper end of the day for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 6, 15);
+    date.setHours(0, 0, 0, 0);
+    const dayEndDate = new Date();
+    dayEndDate.setFullYear(19, 6, 15);
+    dayEndDate.setHours(23, 59, 59, 999);
+
+    const result = getDayEnd(date);
+
+    expect(result).toEqual(dayEndDate);
+  });
+
+  testThrow(getDayEnd);
+});
+
+describe('getPreviousDayEnd()', () => {
+  it('returns proper end of the previous day', () => {
+    const date = new Date(2019, 6, 15, 12);
+    const previousDayEndDate = new Date(2019, 6, 14, 23, 59, 59, 999);
+
+    const result = getPreviousDayEnd(date);
+
+    expect(result).toEqual(previousDayEndDate);
+  });
+
+  testThrow(getPreviousDayEnd);
+});
+
+describe('getNextDayEnd()', () => {
+  it('returns proper end of the next day', () => {
+    const date = new Date(2019, 6, 15, 12);
+    const nextDayEndDate = new Date(2019, 6, 16, 23, 59, 59, 999);
+
+    const result = getNextDayEnd(date);
+
+    expect(result).toEqual(nextDayEndDate);
+  });
+
+  testThrow(getNextDayEnd);
+});
+
+describe('getDayRange', () => {
+  it('returns proper day date range', () => {
+    const date = new Date(2019, 6, 15, 12);
+    const dayStartDate = new Date(2019, 6, 15);
+    const dayEndDate = new Date(2019, 6, 15, 23, 59, 59, 999);
+
+    const result = getDayRange(date);
+
+    expect(result).toHaveLength(2);
+    expect(result).toEqual([dayStartDate, dayEndDate]);
+  });
+
+  testThrow(getDayRange);
+});
+
+/**
+ * Other
+ */
+
+describe('getDaysInMonth()', () => {
+  it('returns proper number of days in a month', () => {
+    const date1 = new Date(2019, 0, 1);
+    const date2 = new Date(2019, 1, 1);
+    const date3 = new Date(2019, 2, 1);
+
+    const result1 = getDaysInMonth(date1);
+    const result2 = getDaysInMonth(date2);
+    const result3 = getDaysInMonth(date3);
+
+    expect(result1).toBe(31);
+    expect(result2).toBe(28);
+    expect(result3).toBe(31);
+  });
+
+  testThrow(getDaysInMonth);
+});
+
+describe('getHoursMinutes', () => {
+  it('returns proper hour and minute for a given date', () => {
+    const date = new Date(2017, 0, 1, 16, 4);
+
+    const hoursMinutes = getHoursMinutes(date);
+
+    expect(hoursMinutes).toBe('16:04');
+  });
+
+  it('returns proper hour and minute for a given string of hour and minute', () => {
+    const date = '16:04';
+
+    const hoursMinutes = getHoursMinutes(date);
+
+    expect(hoursMinutes).toBe('16:04');
+  });
+
+  it('returns proper hour and minute for a given string of hour, minute and second', () => {
+    const date = '16:04:08';
+
+    const hoursMinutes = getHoursMinutes(date);
+
+    expect(hoursMinutes).toBe('16:04');
+  });
+
+  it('throws an error when given nonsense data', () => {
+    const text = 'wololo';
+    const flag = true;
+
+    expect(() => getHoursMinutes(text)).toThrow();
+    // @ts-expect-error-next-line
+    expect(() => getHoursMinutes(flag)).toThrow();
+  });
+});
+
+describe('getHoursMinutesSeconds', () => {
+  it('returns proper hour, minute and second for a given date', () => {
+    const date = new Date(2017, 0, 1, 16, 4, 41);
+
+    const hoursMinutesSeconds = getHoursMinutesSeconds(date);
+
+    expect(hoursMinutesSeconds).toBe('16:04:41');
+  });
+
+  it('returns proper hour, minute and second for a given string of hour and minute', () => {
+    const date = '16:04';
+
+    const hoursMinutesSeconds = getHoursMinutesSeconds(date);
+
+    expect(hoursMinutesSeconds).toBe('16:04:00');
+  });
+
+  it('returns proper hour, minute and second for a given string of hour, minute and second', () => {
+    const date = '16:04:08';
+
+    const hoursMinutesSeconds = getHoursMinutesSeconds(date);
+
+    expect(hoursMinutesSeconds).toBe('16:04:08');
+  });
+
+  it('throws an error when given nonsense data', () => {
+    const text = 'wololo';
+    const flag = true;
+
+    expect(() => getHoursMinutesSeconds(text)).toThrow();
+    // @ts-expect-error-next-line
+    expect(() => getHoursMinutesSeconds(flag)).toThrow();
+  });
+});
+
+describe('getISOLocalMonth()', () => {
+  it('returns proper ISO month', () => {
+    const date = new Date(2019, 0, 1);
+
+    const ISOMonth = getISOLocalMonth(date);
+
+    expect(ISOMonth).toBe('2019-01');
+  });
+
+  it('returns proper ISO date for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 0, 1);
+    date.setHours(0, 0, 0, 0);
+
+    const ISODate = getISOLocalMonth(date);
+
+    expect(ISODate).toBe('0019-01');
+  });
+
+  it('returns proper ISO date for year > 9999', () => {
+    const date = new Date();
+    date.setFullYear(12345, 0, 1);
+    date.setHours(0, 0, 0, 0);
+
+    const ISODate = getISOLocalMonth(date);
+
+    expect(ISODate).toBe('12345-01');
+  });
+
+  testThrow(getISOLocalMonth);
+});
+
+describe('getISOLocalDate()', () => {
+  it('returns proper ISO date', () => {
+    const date = new Date(2019, 0, 1);
+
+    const ISODate = getISOLocalDate(date);
+
+    expect(ISODate).toBe('2019-01-01');
+  });
+
+  it('returns proper ISO date for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 0, 1);
+    date.setHours(0, 0, 0, 0);
+
+    const ISODate = getISOLocalDate(date);
+
+    expect(ISODate).toBe('0019-01-01');
+  });
+
+  it('returns proper ISO date for year > 9999', () => {
+    const date = new Date();
+    date.setFullYear(12345, 0, 1);
+    date.setHours(0, 0, 0, 0);
+
+    const ISODate = getISOLocalDate(date);
+
+    expect(ISODate).toBe('12345-01-01');
+  });
+
+  testThrow(getISOLocalDate);
+});
+
+describe('getISOLocalDateTime()', () => {
+  it('returns proper ISO date and time', () => {
+    const date = new Date(2017, 0, 1, 16, 4, 41);
+
+    const ISODate = getISOLocalDateTime(date);
+
+    expect(ISODate).toBe('2017-01-01T16:04:41');
+  });
+
+  it('returns proper ISO date for year < 100', () => {
+    const date = new Date();
+    date.setFullYear(19, 0, 1);
+    date.setHours(16, 4, 41, 0);
+
+    const ISODate = getISOLocalDateTime(date);
+
+    expect(ISODate).toBe('0019-01-01T16:04:41');
+  });
+
+  it('returns proper ISO date for year > 9999', () => {
+    const date = new Date();
+    date.setFullYear(12345, 0, 1);
+    date.setHours(16, 4, 41, 0);
+
+    const ISODate = getISOLocalDateTime(date);
+
+    expect(ISODate).toBe('12345-01-01T16:04:41');
+  });
+
+  testThrow(getISOLocalDateTime);
+});
Index: node_modules/@wojtekmaj/date-utils/src/index.ts
===================================================================
--- node_modules/@wojtekmaj/date-utils/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/@wojtekmaj/date-utils/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,656 @@
+type DateLike = Date | number | string;
+
+/**
+ * Utils
+ */
+
+function makeGetEdgeOfNeighbor<T>(
+  getPeriod: (date: T) => number,
+  getEdgeOfPeriod: (date: number) => Date,
+  defaultOffset: number,
+) {
+  return function makeGetEdgeOfNeighborInternal(date: T, offset: number = defaultOffset) {
+    const previousPeriod = getPeriod(date) + offset;
+    return getEdgeOfPeriod(previousPeriod);
+  };
+}
+
+function makeGetEnd<T>(getBeginOfNextPeriod: (date: T) => Date) {
+  return function makeGetEndInternal(date: T) {
+    return new Date(getBeginOfNextPeriod(date).getTime() - 1);
+  };
+}
+
+function makeGetRange<T>(getStart: (date: T) => Date, getEnd: (date: T) => Date) {
+  return function makeGetRangeInternal(date: T): [Date, Date] {
+    return [getStart(date), getEnd(date)];
+  };
+}
+
+/**
+ * Simple getters - getting a property of a given point in time
+ */
+
+/**
+ * Gets year from a given date.
+ *
+ * @param {DateLike} date Date to get year from
+ * @returns {number} Year
+ */
+export function getYear(date: DateLike): number {
+  if (date instanceof Date) {
+    return date.getFullYear();
+  }
+
+  if (typeof date === 'number') {
+    return date;
+  }
+
+  const year = parseInt(date, 10);
+
+  if (typeof date === 'string' && !isNaN(year)) {
+    return year;
+  }
+
+  throw new Error(`Failed to get year from date: ${date}.`);
+}
+
+/**
+ * Gets month from a given date.
+ *
+ * @param {Date} date Date to get month from
+ * @returns {number} Month
+ */
+export function getMonth(date: Date): number {
+  if (date instanceof Date) {
+    return date.getMonth();
+  }
+
+  throw new Error(`Failed to get month from date: ${date}.`);
+}
+
+/**
+ * Gets human-readable month from a given date.
+ *
+ * @param {Date} date Date to get human-readable month from
+ * @returns {number} Human-readable month
+ */
+export function getMonthHuman(date: Date): number {
+  if (date instanceof Date) {
+    return date.getMonth() + 1;
+  }
+
+  throw new Error(`Failed to get human-readable month from date: ${date}.`);
+}
+
+/**
+ * Gets day of the month from a given date.
+ *
+ * @param {Date} date Date to get day of the month from
+ * @returns {number} Day of the month
+ */
+export function getDate(date: Date): number {
+  if (date instanceof Date) {
+    return date.getDate();
+  }
+
+  throw new Error(`Failed to get year from date: ${date}.`);
+}
+
+/**
+ * Gets hours from a given date.
+ *
+ * @param {Date | string} date Date to get hours from
+ * @returns {number} Hours
+ */
+export function getHours(date: Date | string): number {
+  if (date instanceof Date) {
+    return date.getHours();
+  }
+
+  if (typeof date === 'string') {
+    const datePieces = date.split(':');
+
+    if (datePieces.length >= 2) {
+      const hoursString = datePieces[0];
+
+      if (hoursString) {
+        const hours = parseInt(hoursString, 10);
+
+        if (!isNaN(hours)) {
+          return hours;
+        }
+      }
+    }
+  }
+
+  throw new Error(`Failed to get hours from date: ${date}.`);
+}
+
+/**
+ * Gets minutes from a given date.
+ *
+ * @param {Date | string} date Date to get minutes from
+ * @returns {number} Minutes
+ */
+export function getMinutes(date: Date | string): number {
+  if (date instanceof Date) {
+    return date.getMinutes();
+  }
+
+  if (typeof date === 'string') {
+    const datePieces = date.split(':');
+
+    if (datePieces.length >= 2) {
+      const minutesString = datePieces[1] || '0';
+      const minutes = parseInt(minutesString, 10);
+
+      if (!isNaN(minutes)) {
+        return minutes;
+      }
+    }
+  }
+
+  throw new Error(`Failed to get minutes from date: ${date}.`);
+}
+
+/**
+ * Gets seconds from a given date.
+ *
+ * @param {Date | string} date Date to get seconds from
+ * @returns {number} Seconds
+ */
+export function getSeconds(date: Date | string): number {
+  if (date instanceof Date) {
+    return date.getSeconds();
+  }
+
+  if (typeof date === 'string') {
+    const datePieces = date.split(':');
+
+    if (datePieces.length >= 2) {
+      const secondsWithMillisecondsString = datePieces[2] || '0';
+      const seconds = parseInt(secondsWithMillisecondsString, 10);
+
+      if (!isNaN(seconds)) {
+        return seconds;
+      }
+    }
+  }
+
+  throw new Error(`Failed to get seconds from date: ${date}.`);
+}
+
+/**
+ * Gets milliseconds from a given date.
+ *
+ * @param {Date | string} date Date to get milliseconds from
+ * @returns {number} Milliseconds
+ */
+export function getMilliseconds(date: Date | string): number {
+  if (date instanceof Date) {
+    return date.getMilliseconds();
+  }
+
+  if (typeof date === 'string') {
+    const datePieces = date.split(':');
+
+    if (datePieces.length >= 2) {
+      const secondsWithMillisecondsString = datePieces[2] || '0';
+      const millisecondsString = secondsWithMillisecondsString.split('.')[1] || '0';
+      const milliseconds = parseInt(millisecondsString, 10);
+
+      if (!isNaN(milliseconds)) {
+        return milliseconds;
+      }
+    }
+  }
+
+  throw new Error(`Failed to get seconds from date: ${date}.`);
+}
+
+/**
+ * Century
+ */
+
+/**
+ * Gets century start date from a given date.
+ *
+ * @param {DateLike} date Date to get century start from
+ * @returns {Date} Century start date
+ */
+export function getCenturyStart(date: DateLike): Date {
+  const year = getYear(date);
+  const centuryStartYear = year + ((-year + 1) % 100);
+  const centuryStartDate = new Date();
+  centuryStartDate.setFullYear(centuryStartYear, 0, 1);
+  centuryStartDate.setHours(0, 0, 0, 0);
+  return centuryStartDate;
+}
+
+/**
+ * Gets previous century start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century start from
+ * @returns {Date} Previous century start date
+ */
+export const getPreviousCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, -100);
+
+/**
+ * Gets next century start date from a given date.
+ *
+ * @param {DateLike} date Date to get next century start from
+ * @returns {Date} Next century start date
+ */
+export const getNextCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, 100);
+
+/**
+ * Gets century end date from a given date.
+ *
+ * @param {DateLike} date Date to get century end from
+ * @returns {Date} Century end date
+ */
+export const getCenturyEnd = makeGetEnd(getNextCenturyStart);
+
+/**
+ * Gets previous century end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous century end from
+ * @returns {Date} Previous century end date
+ */
+export const getPreviousCenturyEnd = makeGetEdgeOfNeighbor(getYear, getCenturyEnd, -100);
+
+/**
+ * Gets next century end date from a given date.
+ *
+ * @param {DateLike} date Date to get next century end from
+ * @returns {Date} Next century end date
+ */
+export const getNextCenturyEnd = makeGetEdgeOfNeighbor(getYear, getCenturyEnd, 100);
+
+/**
+ * Gets century start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get century start and end from
+ * @returns {[Date, Date]} Century start and end dates
+ */
+export const getCenturyRange = makeGetRange(getCenturyStart, getCenturyEnd);
+
+/**
+ * Decade
+ */
+
+/**
+ * Gets decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get decade start from
+ * @returns {Date} Decade start date
+ */
+export function getDecadeStart(date: DateLike): Date {
+  const year = getYear(date);
+  const decadeStartYear = year + ((-year + 1) % 10);
+  const decadeStartDate = new Date();
+  decadeStartDate.setFullYear(decadeStartYear, 0, 1);
+  decadeStartDate.setHours(0, 0, 0, 0);
+  return decadeStartDate;
+}
+
+/**
+ * Gets previous decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade start from
+ * @returns {Date} Previous decade start date
+ */
+export const getPreviousDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, -10);
+
+/**
+ * Gets next decade start date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade start from
+ * @returns {Date} Next decade start date
+ */
+export const getNextDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, 10);
+
+/**
+ * Gets decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get decade end from
+ * @returns {Date} Decade end date
+ */
+export const getDecadeEnd = makeGetEnd(getNextDecadeStart);
+
+/**
+ * Gets previous decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous decade end from
+ * @returns {Date} Previous decade end date
+ */
+export const getPreviousDecadeEnd = makeGetEdgeOfNeighbor(getYear, getDecadeEnd, -10);
+
+/**
+ * Gets next decade end date from a given date.
+ *
+ * @param {DateLike} date Date to get next decade end from
+ * @returns {Date} Next decade end date
+ */
+export const getNextDecadeEnd = makeGetEdgeOfNeighbor(getYear, getDecadeEnd, 10);
+
+/**
+ * Gets decade start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get decade start and end from
+ * @returns {[Date, Date]} Decade start and end dates
+ */
+export const getDecadeRange = makeGetRange(getDecadeStart, getDecadeEnd);
+
+/**
+ * Year
+ */
+
+/**
+ * Gets year start date from a given date.
+ *
+ * @param {DateLike} date Date to get year start from
+ * @returns {Date} Year start date
+ */
+export function getYearStart(date: DateLike): Date {
+  const year = getYear(date);
+  const yearStartDate = new Date();
+  yearStartDate.setFullYear(year, 0, 1);
+  yearStartDate.setHours(0, 0, 0, 0);
+  return yearStartDate;
+}
+
+/**
+ * Gets previous year start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year start from
+ * @returns {Date} Previous year start date
+ */
+export const getPreviousYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, -1);
+
+/**
+ * Gets next year start date from a given date.
+ *
+ * @param {DateLike} date Date to get next year start from
+ * @returns {Date} Next year start date
+ */
+export const getNextYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, 1);
+
+/**
+ * Gets year end date from a given date.
+ *
+ * @param {DateLike} date Date to get year end from
+ * @returns {Date} Year end date
+ */
+export const getYearEnd = makeGetEnd(getNextYearStart);
+
+/**
+ * Gets previous year end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous year end from
+ * @returns {Date} Previous year end date
+ */
+export const getPreviousYearEnd = makeGetEdgeOfNeighbor(getYear, getYearEnd, -1);
+
+/**
+ * Gets next year end date from a given date.
+ *
+ * @param {DateLike} date Date to get next year end from
+ * @returns {Date} Next year end date
+ */
+export const getNextYearEnd = makeGetEdgeOfNeighbor(getYear, getYearEnd, 1);
+
+/**
+ * Gets year start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get year start and end from
+ * @returns {[Date, Date]} Year start and end dates
+ */
+export const getYearRange = makeGetRange(getYearStart, getYearEnd);
+
+/**
+ * Month
+ */
+
+function makeGetEdgeOfNeighborMonth(getEdgeOfPeriod: (date: Date) => Date, defaultOffset: number) {
+  return function makeGetEdgeOfNeighborMonthInternal(date: Date, offset: number = defaultOffset) {
+    const year = getYear(date);
+    const month = getMonth(date) + offset;
+    const previousPeriod = new Date();
+    previousPeriod.setFullYear(year, month, 1);
+    previousPeriod.setHours(0, 0, 0, 0);
+    return getEdgeOfPeriod(previousPeriod);
+  };
+}
+
+/**
+ * Gets month start date from a given date.
+ *
+ * @param {DateLike} date Date to get month start from
+ * @returns {Date} Month start date
+ */
+export function getMonthStart(date: Date): Date {
+  const year = getYear(date);
+  const month = getMonth(date);
+  const monthStartDate = new Date();
+  monthStartDate.setFullYear(year, month, 1);
+  monthStartDate.setHours(0, 0, 0, 0);
+  return monthStartDate;
+}
+
+/**
+ * Gets previous month start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month start from
+ * @returns {Date} Previous month start date
+ */
+export const getPreviousMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, -1);
+
+/**
+ * Gets next month start date from a given date.
+ *
+ * @param {DateLike} date Date to get next month start from
+ * @returns {Date} Next month start date
+ */
+export const getNextMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, 1);
+
+/**
+ * Gets month end date from a given date.
+ *
+ * @param {DateLike} date Date to get month end from
+ * @returns {Date} Month end date
+ */
+export const getMonthEnd = makeGetEnd(getNextMonthStart);
+
+/**
+ * Gets previous month end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous month end from
+ * @returns {Date} Previous month end date
+ */
+export const getPreviousMonthEnd = makeGetEdgeOfNeighborMonth(getMonthEnd, -1);
+
+/**
+ * Gets next month end date from a given date.
+ *
+ * @param {DateLike} date Date to get next month end from
+ * @returns {Date} Next month end date
+ */
+export const getNextMonthEnd = makeGetEdgeOfNeighborMonth(getMonthEnd, 1);
+
+/**
+ * Gets month start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get month start and end from
+ * @returns {[Date, Date]} Month start and end dates
+ */
+export const getMonthRange = makeGetRange(getMonthStart, getMonthEnd);
+
+/**
+ * Day
+ */
+
+function makeGetEdgeOfNeighborDay(getEdgeOfPeriod: (date: Date) => Date, defaultOffset: number) {
+  return function makeGetEdgeOfNeighborDayInternal(date: Date, offset: number = defaultOffset) {
+    const year = getYear(date);
+    const month = getMonth(date);
+    const day = getDate(date) + offset;
+    const previousPeriod = new Date();
+    previousPeriod.setFullYear(year, month, day);
+    previousPeriod.setHours(0, 0, 0, 0);
+    return getEdgeOfPeriod(previousPeriod);
+  };
+}
+
+/**
+ * Gets day start date from a given date.
+ *
+ * @param {DateLike} date Date to get day start from
+ * @returns {Date} Day start date
+ */
+export function getDayStart(date: Date): Date {
+  const year = getYear(date);
+  const month = getMonth(date);
+  const day = getDate(date);
+  const dayStartDate = new Date();
+  dayStartDate.setFullYear(year, month, day);
+  dayStartDate.setHours(0, 0, 0, 0);
+  return dayStartDate;
+}
+
+/**
+ * Gets previous day start date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day start from
+ * @returns {Date} Previous day start date
+ */
+export const getPreviousDayStart = makeGetEdgeOfNeighborDay(getDayStart, -1);
+
+/**
+ * Gets next day start date from a given date.
+ *
+ * @param {DateLike} date Date to get next day start from
+ * @returns {Date} Next day start date
+ */
+export const getNextDayStart = makeGetEdgeOfNeighborDay(getDayStart, 1);
+
+/**
+ * Gets day end date from a given date.
+ *
+ * @param {DateLike} date Date to get day end from
+ * @returns {Date} Day end date
+ */
+export const getDayEnd = makeGetEnd(getNextDayStart);
+
+/**
+ * Gets previous day end date from a given date.
+ *
+ * @param {DateLike} date Date to get previous day end from
+ * @returns {Date} Previous day end date
+ */
+export const getPreviousDayEnd = makeGetEdgeOfNeighborDay(getDayEnd, -1);
+
+/**
+ * Gets next day end date from a given date.
+ *
+ * @param {DateLike} date Date to get next day end from
+ * @returns {Date} Next day end date
+ */
+export const getNextDayEnd = makeGetEdgeOfNeighborDay(getDayEnd, 1);
+
+/**
+ * Gets day start and end dates from a given date.
+ *
+ * @param {DateLike} date Date to get day start and end from
+ * @returns {[Date, Date]} Day start and end dates
+ */
+export const getDayRange = makeGetRange(getDayStart, getDayEnd);
+
+/**
+ * Other
+ */
+
+/**
+ * Returns a number of days in a month of a given date.
+ *
+ * @param {Date} date Date
+ * @returns {number} Number of days in a month
+ */
+export function getDaysInMonth(date: Date): number {
+  return getDate(getMonthEnd(date));
+}
+
+function padStart(num: string | number, val = 2) {
+  const numStr = `${num}`;
+
+  if (numStr.length >= val) {
+    return num;
+  }
+
+  return `0000${numStr}`.slice(-val);
+}
+
+/**
+ * Returns local hours and minutes (hh:mm).
+ *
+ * @param {Date | string} date Date to get hours and minutes from
+ * @returns {string} Local hours and minutes
+ */
+export function getHoursMinutes(date: Date | string): string {
+  const hours = padStart(getHours(date));
+  const minutes = padStart(getMinutes(date));
+
+  return `${hours}:${minutes}`;
+}
+
+/**
+ * Returns local hours, minutes and seconds (hh:mm:ss).
+ *
+ * @param {Date | string} date Date to get hours, minutes and seconds from
+ * @returns {string} Local hours, minutes and seconds
+ */
+export function getHoursMinutesSeconds(date: Date | string): string {
+  const hours = padStart(getHours(date));
+  const minutes = padStart(getMinutes(date));
+  const seconds = padStart(getSeconds(date));
+
+  return `${hours}:${minutes}:${seconds}`;
+}
+
+/**
+ * Returns local month in ISO-like format (YYYY-MM).
+ *
+ * @param {Date} date Date to get month in ISO-like format from
+ * @returns {string} Local month in ISO-like format
+ */
+export function getISOLocalMonth(date: Date): string {
+  const year = padStart(getYear(date), 4);
+  const month = padStart(getMonthHuman(date));
+
+  return `${year}-${month}`;
+}
+
+/**
+ * Returns local date in ISO-like format (YYYY-MM-DD).
+ *
+ * @param {Date} date Date to get date in ISO-like format from
+ * @returns {string} Local date in ISO-like format
+ */
+export function getISOLocalDate(date: Date): string {
+  const year = padStart(getYear(date), 4);
+  const month = padStart(getMonthHuman(date));
+  const day = padStart(getDate(date));
+
+  return `${year}-${month}-${day}`;
+}
+
+/**
+ * Returns local date & time in ISO-like format (YYYY-MM-DDThh:mm:ss).
+ *
+ * @param {Date} date Date to get date & time in ISO-like format from
+ * @returns {string} Local date & time in ISO-like format
+ */
+export function getISOLocalDateTime(date: Date): string {
+  return `${getISOLocalDate(date)}T${getHoursMinutesSeconds(date)}`;
+}
Index: node_modules/chart.js/LICENSE.md
===================================================================
--- node_modules/chart.js/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2024 Chart.js Contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: node_modules/chart.js/README.md
===================================================================
--- node_modules/chart.js/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+<p align="center">
+  <a href="https://www.chartjs.org/" target="_blank">
+    <img src="https://www.chartjs.org/media/logo-title.svg" alt="https://www.chartjs.org/"><br/>
+  </a>
+    Simple yet flexible JavaScript charting for designers & developers
+</p>
+
+<p align="center">
+    <a href="https://www.chartjs.org/docs/latest/getting-started/installation.html"><img src="https://img.shields.io/github/release/chartjs/Chart.js.svg?style=flat-square&maxAge=600" alt="Downloads"></a>
+    <a href="https://github.com/chartjs/Chart.js/actions?query=workflow%3ACI+branch%3Amaster"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/chartjs/Chart.js/ci.yml?branch=master&style=flat-square"></a>
+    <a href="https://coveralls.io/github/chartjs/Chart.js?branch=master"><img src="https://img.shields.io/coveralls/chartjs/Chart.js.svg?style=flat-square&maxAge=600" alt="Coverage"></a>
+    <a href="https://github.com/chartjs/awesome"><img src="https://awesome.re/badge-flat2.svg" alt="Awesome"></a>
+    <a href="https://discord.gg/HxEguTK6av"><img src="https://img.shields.io/badge/discord-chartjs-blue?style=flat-square&maxAge=3600" alt="Discord"></a>
+</p>
+
+## Documentation
+
+All the links point to the new version 4 of the lib.
+
+* [Introduction](https://www.chartjs.org/docs/latest/)
+* [Getting Started](https://www.chartjs.org/docs/latest/getting-started/index)
+* [General](https://www.chartjs.org/docs/latest/general/data-structures)
+* [Configuration](https://www.chartjs.org/docs/latest/configuration/index)
+* [Charts](https://www.chartjs.org/docs/latest/charts/line)
+* [Axes](https://www.chartjs.org/docs/latest/axes/index)
+* [Developers](https://www.chartjs.org/docs/latest/developers/index)
+* [Popular Extensions](https://github.com/chartjs/awesome)
+* [Samples](https://www.chartjs.org/samples/)
+
+In case you are looking for an older version of the docs, you will have to specify the specific version in the url like this: [https://www.chartjs.org/docs/2.9.4/](https://www.chartjs.org/docs/2.9.4/)
+
+## Contributing
+
+Instructions on building and testing Chart.js can be found in [the documentation](https://www.chartjs.org/docs/master/developers/contributing.html#building-and-testing). Before submitting an issue or a pull request, please take a moment to look over the [contributing guidelines](https://www.chartjs.org/docs/master/developers/contributing) first. For support, please post questions on [Stack Overflow](https://stackoverflow.com/questions/tagged/chart.js) with the `chart.js` tag.
+
+## License
+
+Chart.js is available under the [MIT license](LICENSE.md).
Index: node_modules/chart.js/auto/auto.cjs
===================================================================
--- node_modules/chart.js/auto/auto.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/auto/auto.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+const chartjs = require('../dist/chart.cjs');
+const {Chart, registerables} = chartjs;
+
+Chart.register(...registerables);
+
+module.exports = Object.assign(Chart, chartjs);
Index: node_modules/chart.js/auto/auto.d.ts
===================================================================
--- node_modules/chart.js/auto/auto.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/auto/auto.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import {Chart} from '../dist/types.js';
+
+export * from '../dist/types.js';
+export default Chart;
Index: node_modules/chart.js/auto/auto.js
===================================================================
--- node_modules/chart.js/auto/auto.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/auto/auto.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import {Chart, registerables} from '../dist/chart.js';
+
+Chart.register(...registerables);
+
+export * from '../dist/chart.js';
+export default Chart;
Index: node_modules/chart.js/auto/package.json
===================================================================
--- node_modules/chart.js/auto/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/auto/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+{
+    "name": "chart.js-auto",
+    "private": true,
+    "description": "Auto registering package. Exists to support bundlers without exports support such as webpack 4.",
+    "type": "module",
+    "main": "./auto.cjs",
+    "module": "./auto.js",
+    "exports": {
+        "types": "./auto.d.ts",
+        "import": "./auto.js",
+        "require": "./auto.cjs"
+    },
+    "types": "./auto.d.ts"
+}
Index: node_modules/chart.js/dist/chart.cjs
===================================================================
--- node_modules/chart.js/dist/chart.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chart.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11638 @@
+/*!
+ * Chart.js v4.5.0
+ * https://www.chartjs.org
+ * (c) 2025 Chart.js Contributors
+ * Released under the MIT License
+ */
+'use strict';
+
+var helpers_dataset = require('./chunks/helpers.dataset.cjs');
+require('@kurkle/color');
+
+class Animator {
+    constructor(){
+        this._request = null;
+        this._charts = new Map();
+        this._running = false;
+        this._lastDate = undefined;
+    }
+ _notify(chart, anims, date, type) {
+        const callbacks = anims.listeners[type];
+        const numSteps = anims.duration;
+        callbacks.forEach((fn)=>fn({
+                chart,
+                initial: anims.initial,
+                numSteps,
+                currentStep: Math.min(date - anims.start, numSteps)
+            }));
+    }
+ _refresh() {
+        if (this._request) {
+            return;
+        }
+        this._running = true;
+        this._request = helpers_dataset.requestAnimFrame.call(window, ()=>{
+            this._update();
+            this._request = null;
+            if (this._running) {
+                this._refresh();
+            }
+        });
+    }
+ _update(date = Date.now()) {
+        let remaining = 0;
+        this._charts.forEach((anims, chart)=>{
+            if (!anims.running || !anims.items.length) {
+                return;
+            }
+            const items = anims.items;
+            let i = items.length - 1;
+            let draw = false;
+            let item;
+            for(; i >= 0; --i){
+                item = items[i];
+                if (item._active) {
+                    if (item._total > anims.duration) {
+                        anims.duration = item._total;
+                    }
+                    item.tick(date);
+                    draw = true;
+                } else {
+                    items[i] = items[items.length - 1];
+                    items.pop();
+                }
+            }
+            if (draw) {
+                chart.draw();
+                this._notify(chart, anims, date, 'progress');
+            }
+            if (!items.length) {
+                anims.running = false;
+                this._notify(chart, anims, date, 'complete');
+                anims.initial = false;
+            }
+            remaining += items.length;
+        });
+        this._lastDate = date;
+        if (remaining === 0) {
+            this._running = false;
+        }
+    }
+ _getAnims(chart) {
+        const charts = this._charts;
+        let anims = charts.get(chart);
+        if (!anims) {
+            anims = {
+                running: false,
+                initial: true,
+                items: [],
+                listeners: {
+                    complete: [],
+                    progress: []
+                }
+            };
+            charts.set(chart, anims);
+        }
+        return anims;
+    }
+ listen(chart, event, cb) {
+        this._getAnims(chart).listeners[event].push(cb);
+    }
+ add(chart, items) {
+        if (!items || !items.length) {
+            return;
+        }
+        this._getAnims(chart).items.push(...items);
+    }
+ has(chart) {
+        return this._getAnims(chart).items.length > 0;
+    }
+ start(chart) {
+        const anims = this._charts.get(chart);
+        if (!anims) {
+            return;
+        }
+        anims.running = true;
+        anims.start = Date.now();
+        anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);
+        this._refresh();
+    }
+    running(chart) {
+        if (!this._running) {
+            return false;
+        }
+        const anims = this._charts.get(chart);
+        if (!anims || !anims.running || !anims.items.length) {
+            return false;
+        }
+        return true;
+    }
+ stop(chart) {
+        const anims = this._charts.get(chart);
+        if (!anims || !anims.items.length) {
+            return;
+        }
+        const items = anims.items;
+        let i = items.length - 1;
+        for(; i >= 0; --i){
+            items[i].cancel();
+        }
+        anims.items = [];
+        this._notify(chart, anims, Date.now(), 'complete');
+    }
+ remove(chart) {
+        return this._charts.delete(chart);
+    }
+}
+var animator = /* #__PURE__ */ new Animator();
+
+const transparent = 'transparent';
+const interpolators = {
+    boolean (from, to, factor) {
+        return factor > 0.5 ? to : from;
+    },
+ color (from, to, factor) {
+        const c0 = helpers_dataset.color(from || transparent);
+        const c1 = c0.valid && helpers_dataset.color(to || transparent);
+        return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;
+    },
+    number (from, to, factor) {
+        return from + (to - from) * factor;
+    }
+};
+class Animation {
+    constructor(cfg, target, prop, to){
+        const currentValue = target[prop];
+        to = helpers_dataset.resolve([
+            cfg.to,
+            to,
+            currentValue,
+            cfg.from
+        ]);
+        const from = helpers_dataset.resolve([
+            cfg.from,
+            currentValue,
+            to
+        ]);
+        this._active = true;
+        this._fn = cfg.fn || interpolators[cfg.type || typeof from];
+        this._easing = helpers_dataset.effects[cfg.easing] || helpers_dataset.effects.linear;
+        this._start = Math.floor(Date.now() + (cfg.delay || 0));
+        this._duration = this._total = Math.floor(cfg.duration);
+        this._loop = !!cfg.loop;
+        this._target = target;
+        this._prop = prop;
+        this._from = from;
+        this._to = to;
+        this._promises = undefined;
+    }
+    active() {
+        return this._active;
+    }
+    update(cfg, to, date) {
+        if (this._active) {
+            this._notify(false);
+            const currentValue = this._target[this._prop];
+            const elapsed = date - this._start;
+            const remain = this._duration - elapsed;
+            this._start = date;
+            this._duration = Math.floor(Math.max(remain, cfg.duration));
+            this._total += elapsed;
+            this._loop = !!cfg.loop;
+            this._to = helpers_dataset.resolve([
+                cfg.to,
+                to,
+                currentValue,
+                cfg.from
+            ]);
+            this._from = helpers_dataset.resolve([
+                cfg.from,
+                currentValue,
+                to
+            ]);
+        }
+    }
+    cancel() {
+        if (this._active) {
+            this.tick(Date.now());
+            this._active = false;
+            this._notify(false);
+        }
+    }
+    tick(date) {
+        const elapsed = date - this._start;
+        const duration = this._duration;
+        const prop = this._prop;
+        const from = this._from;
+        const loop = this._loop;
+        const to = this._to;
+        let factor;
+        this._active = from !== to && (loop || elapsed < duration);
+        if (!this._active) {
+            this._target[prop] = to;
+            this._notify(true);
+            return;
+        }
+        if (elapsed < 0) {
+            this._target[prop] = from;
+            return;
+        }
+        factor = elapsed / duration % 2;
+        factor = loop && factor > 1 ? 2 - factor : factor;
+        factor = this._easing(Math.min(1, Math.max(0, factor)));
+        this._target[prop] = this._fn(from, to, factor);
+    }
+    wait() {
+        const promises = this._promises || (this._promises = []);
+        return new Promise((res, rej)=>{
+            promises.push({
+                res,
+                rej
+            });
+        });
+    }
+    _notify(resolved) {
+        const method = resolved ? 'res' : 'rej';
+        const promises = this._promises || [];
+        for(let i = 0; i < promises.length; i++){
+            promises[i][method]();
+        }
+    }
+}
+
+class Animations {
+    constructor(chart, config){
+        this._chart = chart;
+        this._properties = new Map();
+        this.configure(config);
+    }
+    configure(config) {
+        if (!helpers_dataset.isObject(config)) {
+            return;
+        }
+        const animationOptions = Object.keys(helpers_dataset.defaults.animation);
+        const animatedProps = this._properties;
+        Object.getOwnPropertyNames(config).forEach((key)=>{
+            const cfg = config[key];
+            if (!helpers_dataset.isObject(cfg)) {
+                return;
+            }
+            const resolved = {};
+            for (const option of animationOptions){
+                resolved[option] = cfg[option];
+            }
+            (helpers_dataset.isArray(cfg.properties) && cfg.properties || [
+                key
+            ]).forEach((prop)=>{
+                if (prop === key || !animatedProps.has(prop)) {
+                    animatedProps.set(prop, resolved);
+                }
+            });
+        });
+    }
+ _animateOptions(target, values) {
+        const newOptions = values.options;
+        const options = resolveTargetOptions(target, newOptions);
+        if (!options) {
+            return [];
+        }
+        const animations = this._createAnimations(options, newOptions);
+        if (newOptions.$shared) {
+            awaitAll(target.options.$animations, newOptions).then(()=>{
+                target.options = newOptions;
+            }, ()=>{
+            });
+        }
+        return animations;
+    }
+ _createAnimations(target, values) {
+        const animatedProps = this._properties;
+        const animations = [];
+        const running = target.$animations || (target.$animations = {});
+        const props = Object.keys(values);
+        const date = Date.now();
+        let i;
+        for(i = props.length - 1; i >= 0; --i){
+            const prop = props[i];
+            if (prop.charAt(0) === '$') {
+                continue;
+            }
+            if (prop === 'options') {
+                animations.push(...this._animateOptions(target, values));
+                continue;
+            }
+            const value = values[prop];
+            let animation = running[prop];
+            const cfg = animatedProps.get(prop);
+            if (animation) {
+                if (cfg && animation.active()) {
+                    animation.update(cfg, value, date);
+                    continue;
+                } else {
+                    animation.cancel();
+                }
+            }
+            if (!cfg || !cfg.duration) {
+                target[prop] = value;
+                continue;
+            }
+            running[prop] = animation = new Animation(cfg, target, prop, value);
+            animations.push(animation);
+        }
+        return animations;
+    }
+ update(target, values) {
+        if (this._properties.size === 0) {
+            Object.assign(target, values);
+            return;
+        }
+        const animations = this._createAnimations(target, values);
+        if (animations.length) {
+            animator.add(this._chart, animations);
+            return true;
+        }
+    }
+}
+function awaitAll(animations, properties) {
+    const running = [];
+    const keys = Object.keys(properties);
+    for(let i = 0; i < keys.length; i++){
+        const anim = animations[keys[i]];
+        if (anim && anim.active()) {
+            running.push(anim.wait());
+        }
+    }
+    return Promise.all(running);
+}
+function resolveTargetOptions(target, newOptions) {
+    if (!newOptions) {
+        return;
+    }
+    let options = target.options;
+    if (!options) {
+        target.options = newOptions;
+        return;
+    }
+    if (options.$shared) {
+        target.options = options = Object.assign({}, options, {
+            $shared: false,
+            $animations: {}
+        });
+    }
+    return options;
+}
+
+function scaleClip(scale, allowedOverflow) {
+    const opts = scale && scale.options || {};
+    const reverse = opts.reverse;
+    const min = opts.min === undefined ? allowedOverflow : 0;
+    const max = opts.max === undefined ? allowedOverflow : 0;
+    return {
+        start: reverse ? max : min,
+        end: reverse ? min : max
+    };
+}
+function defaultClip(xScale, yScale, allowedOverflow) {
+    if (allowedOverflow === false) {
+        return false;
+    }
+    const x = scaleClip(xScale, allowedOverflow);
+    const y = scaleClip(yScale, allowedOverflow);
+    return {
+        top: y.end,
+        right: x.end,
+        bottom: y.start,
+        left: x.start
+    };
+}
+function toClip(value) {
+    let t, r, b, l;
+    if (helpers_dataset.isObject(value)) {
+        t = value.top;
+        r = value.right;
+        b = value.bottom;
+        l = value.left;
+    } else {
+        t = r = b = l = value;
+    }
+    return {
+        top: t,
+        right: r,
+        bottom: b,
+        left: l,
+        disabled: value === false
+    };
+}
+function getSortedDatasetIndices(chart, filterVisible) {
+    const keys = [];
+    const metasets = chart._getSortedDatasetMetas(filterVisible);
+    let i, ilen;
+    for(i = 0, ilen = metasets.length; i < ilen; ++i){
+        keys.push(metasets[i].index);
+    }
+    return keys;
+}
+function applyStack(stack, value, dsIndex, options = {}) {
+    const keys = stack.keys;
+    const singleMode = options.mode === 'single';
+    let i, ilen, datasetIndex, otherValue;
+    if (value === null) {
+        return;
+    }
+    let found = false;
+    for(i = 0, ilen = keys.length; i < ilen; ++i){
+        datasetIndex = +keys[i];
+        if (datasetIndex === dsIndex) {
+            found = true;
+            if (options.all) {
+                continue;
+            }
+            break;
+        }
+        otherValue = stack.values[datasetIndex];
+        if (helpers_dataset.isNumberFinite(otherValue) && (singleMode || value === 0 || helpers_dataset.sign(value) === helpers_dataset.sign(otherValue))) {
+            value += otherValue;
+        }
+    }
+    if (!found && !options.all) {
+        return 0;
+    }
+    return value;
+}
+function convertObjectDataToArray(data, meta) {
+    const { iScale , vScale  } = meta;
+    const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';
+    const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';
+    const keys = Object.keys(data);
+    const adata = new Array(keys.length);
+    let i, ilen, key;
+    for(i = 0, ilen = keys.length; i < ilen; ++i){
+        key = keys[i];
+        adata[i] = {
+            [iAxisKey]: key,
+            [vAxisKey]: data[key]
+        };
+    }
+    return adata;
+}
+function isStacked(scale, meta) {
+    const stacked = scale && scale.options.stacked;
+    return stacked || stacked === undefined && meta.stack !== undefined;
+}
+function getStackKey(indexScale, valueScale, meta) {
+    return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;
+}
+function getUserBounds(scale) {
+    const { min , max , minDefined , maxDefined  } = scale.getUserBounds();
+    return {
+        min: minDefined ? min : Number.NEGATIVE_INFINITY,
+        max: maxDefined ? max : Number.POSITIVE_INFINITY
+    };
+}
+function getOrCreateStack(stacks, stackKey, indexValue) {
+    const subStack = stacks[stackKey] || (stacks[stackKey] = {});
+    return subStack[indexValue] || (subStack[indexValue] = {});
+}
+function getLastIndexInStack(stack, vScale, positive, type) {
+    for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){
+        const value = stack[meta.index];
+        if (positive && value > 0 || !positive && value < 0) {
+            return meta.index;
+        }
+    }
+    return null;
+}
+function updateStacks(controller, parsed) {
+    const { chart , _cachedMeta: meta  } = controller;
+    const stacks = chart._stacks || (chart._stacks = {});
+    const { iScale , vScale , index: datasetIndex  } = meta;
+    const iAxis = iScale.axis;
+    const vAxis = vScale.axis;
+    const key = getStackKey(iScale, vScale, meta);
+    const ilen = parsed.length;
+    let stack;
+    for(let i = 0; i < ilen; ++i){
+        const item = parsed[i];
+        const { [iAxis]: index , [vAxis]: value  } = item;
+        const itemStacks = item._stacks || (item._stacks = {});
+        stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
+        stack[datasetIndex] = value;
+        stack._top = getLastIndexInStack(stack, vScale, true, meta.type);
+        stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);
+        const visualValues = stack._visualValues || (stack._visualValues = {});
+        visualValues[datasetIndex] = value;
+    }
+}
+function getFirstScaleId(chart, axis) {
+    const scales = chart.scales;
+    return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();
+}
+function createDatasetContext(parent, index) {
+    return helpers_dataset.createContext(parent, {
+        active: false,
+        dataset: undefined,
+        datasetIndex: index,
+        index,
+        mode: 'default',
+        type: 'dataset'
+    });
+}
+function createDataContext(parent, index, element) {
+    return helpers_dataset.createContext(parent, {
+        active: false,
+        dataIndex: index,
+        parsed: undefined,
+        raw: undefined,
+        element,
+        index,
+        mode: 'default',
+        type: 'data'
+    });
+}
+function clearStacks(meta, items) {
+    const datasetIndex = meta.controller.index;
+    const axis = meta.vScale && meta.vScale.axis;
+    if (!axis) {
+        return;
+    }
+    items = items || meta._parsed;
+    for (const parsed of items){
+        const stacks = parsed._stacks;
+        if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {
+            return;
+        }
+        delete stacks[axis][datasetIndex];
+        if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {
+            delete stacks[axis]._visualValues[datasetIndex];
+        }
+    }
+}
+const isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';
+const cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);
+const createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {
+        keys: getSortedDatasetIndices(chart, true),
+        values: null
+    };
+class DatasetController {
+ static defaults = {};
+ static datasetElementType = null;
+ static dataElementType = null;
+ constructor(chart, datasetIndex){
+        this.chart = chart;
+        this._ctx = chart.ctx;
+        this.index = datasetIndex;
+        this._cachedDataOpts = {};
+        this._cachedMeta = this.getMeta();
+        this._type = this._cachedMeta.type;
+        this.options = undefined;
+         this._parsing = false;
+        this._data = undefined;
+        this._objectData = undefined;
+        this._sharedOptions = undefined;
+        this._drawStart = undefined;
+        this._drawCount = undefined;
+        this.enableOptionSharing = false;
+        this.supportsDecimation = false;
+        this.$context = undefined;
+        this._syncList = [];
+        this.datasetElementType = new.target.datasetElementType;
+        this.dataElementType = new.target.dataElementType;
+        this.initialize();
+    }
+    initialize() {
+        const meta = this._cachedMeta;
+        this.configure();
+        this.linkScales();
+        meta._stacked = isStacked(meta.vScale, meta);
+        this.addElements();
+        if (this.options.fill && !this.chart.isPluginEnabled('filler')) {
+            console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options");
+        }
+    }
+    updateIndex(datasetIndex) {
+        if (this.index !== datasetIndex) {
+            clearStacks(this._cachedMeta);
+        }
+        this.index = datasetIndex;
+    }
+    linkScales() {
+        const chart = this.chart;
+        const meta = this._cachedMeta;
+        const dataset = this.getDataset();
+        const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;
+        const xid = meta.xAxisID = helpers_dataset.valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));
+        const yid = meta.yAxisID = helpers_dataset.valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));
+        const rid = meta.rAxisID = helpers_dataset.valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));
+        const indexAxis = meta.indexAxis;
+        const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);
+        const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);
+        meta.xScale = this.getScaleForId(xid);
+        meta.yScale = this.getScaleForId(yid);
+        meta.rScale = this.getScaleForId(rid);
+        meta.iScale = this.getScaleForId(iid);
+        meta.vScale = this.getScaleForId(vid);
+    }
+    getDataset() {
+        return this.chart.data.datasets[this.index];
+    }
+    getMeta() {
+        return this.chart.getDatasetMeta(this.index);
+    }
+ getScaleForId(scaleID) {
+        return this.chart.scales[scaleID];
+    }
+ _getOtherScale(scale) {
+        const meta = this._cachedMeta;
+        return scale === meta.iScale ? meta.vScale : meta.iScale;
+    }
+    reset() {
+        this._update('reset');
+    }
+ _destroy() {
+        const meta = this._cachedMeta;
+        if (this._data) {
+            helpers_dataset.unlistenArrayEvents(this._data, this);
+        }
+        if (meta._stacked) {
+            clearStacks(meta);
+        }
+    }
+ _dataCheck() {
+        const dataset = this.getDataset();
+        const data = dataset.data || (dataset.data = []);
+        const _data = this._data;
+        if (helpers_dataset.isObject(data)) {
+            const meta = this._cachedMeta;
+            this._data = convertObjectDataToArray(data, meta);
+        } else if (_data !== data) {
+            if (_data) {
+                helpers_dataset.unlistenArrayEvents(_data, this);
+                const meta = this._cachedMeta;
+                clearStacks(meta);
+                meta._parsed = [];
+            }
+            if (data && Object.isExtensible(data)) {
+                helpers_dataset.listenArrayEvents(data, this);
+            }
+            this._syncList = [];
+            this._data = data;
+        }
+    }
+    addElements() {
+        const meta = this._cachedMeta;
+        this._dataCheck();
+        if (this.datasetElementType) {
+            meta.dataset = new this.datasetElementType();
+        }
+    }
+    buildOrUpdateElements(resetNewElements) {
+        const meta = this._cachedMeta;
+        const dataset = this.getDataset();
+        let stackChanged = false;
+        this._dataCheck();
+        const oldStacked = meta._stacked;
+        meta._stacked = isStacked(meta.vScale, meta);
+        if (meta.stack !== dataset.stack) {
+            stackChanged = true;
+            clearStacks(meta);
+            meta.stack = dataset.stack;
+        }
+        this._resyncElements(resetNewElements);
+        if (stackChanged || oldStacked !== meta._stacked) {
+            updateStacks(this, meta._parsed);
+            meta._stacked = isStacked(meta.vScale, meta);
+        }
+    }
+ configure() {
+        const config = this.chart.config;
+        const scopeKeys = config.datasetScopeKeys(this._type);
+        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);
+        this.options = config.createResolver(scopes, this.getContext());
+        this._parsing = this.options.parsing;
+        this._cachedDataOpts = {};
+    }
+ parse(start, count) {
+        const { _cachedMeta: meta , _data: data  } = this;
+        const { iScale , _stacked  } = meta;
+        const iAxis = iScale.axis;
+        let sorted = start === 0 && count === data.length ? true : meta._sorted;
+        let prev = start > 0 && meta._parsed[start - 1];
+        let i, cur, parsed;
+        if (this._parsing === false) {
+            meta._parsed = data;
+            meta._sorted = true;
+            parsed = data;
+        } else {
+            if (helpers_dataset.isArray(data[start])) {
+                parsed = this.parseArrayData(meta, data, start, count);
+            } else if (helpers_dataset.isObject(data[start])) {
+                parsed = this.parseObjectData(meta, data, start, count);
+            } else {
+                parsed = this.parsePrimitiveData(meta, data, start, count);
+            }
+            const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];
+            for(i = 0; i < count; ++i){
+                meta._parsed[i + start] = cur = parsed[i];
+                if (sorted) {
+                    if (isNotInOrderComparedToPrev()) {
+                        sorted = false;
+                    }
+                    prev = cur;
+                }
+            }
+            meta._sorted = sorted;
+        }
+        if (_stacked) {
+            updateStacks(this, parsed);
+        }
+    }
+ parsePrimitiveData(meta, data, start, count) {
+        const { iScale , vScale  } = meta;
+        const iAxis = iScale.axis;
+        const vAxis = vScale.axis;
+        const labels = iScale.getLabels();
+        const singleScale = iScale === vScale;
+        const parsed = new Array(count);
+        let i, ilen, index;
+        for(i = 0, ilen = count; i < ilen; ++i){
+            index = i + start;
+            parsed[i] = {
+                [iAxis]: singleScale || iScale.parse(labels[index], index),
+                [vAxis]: vScale.parse(data[index], index)
+            };
+        }
+        return parsed;
+    }
+ parseArrayData(meta, data, start, count) {
+        const { xScale , yScale  } = meta;
+        const parsed = new Array(count);
+        let i, ilen, index, item;
+        for(i = 0, ilen = count; i < ilen; ++i){
+            index = i + start;
+            item = data[index];
+            parsed[i] = {
+                x: xScale.parse(item[0], index),
+                y: yScale.parse(item[1], index)
+            };
+        }
+        return parsed;
+    }
+ parseObjectData(meta, data, start, count) {
+        const { xScale , yScale  } = meta;
+        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;
+        const parsed = new Array(count);
+        let i, ilen, index, item;
+        for(i = 0, ilen = count; i < ilen; ++i){
+            index = i + start;
+            item = data[index];
+            parsed[i] = {
+                x: xScale.parse(helpers_dataset.resolveObjectKey(item, xAxisKey), index),
+                y: yScale.parse(helpers_dataset.resolveObjectKey(item, yAxisKey), index)
+            };
+        }
+        return parsed;
+    }
+ getParsed(index) {
+        return this._cachedMeta._parsed[index];
+    }
+ getDataElement(index) {
+        return this._cachedMeta.data[index];
+    }
+ applyStack(scale, parsed, mode) {
+        const chart = this.chart;
+        const meta = this._cachedMeta;
+        const value = parsed[scale.axis];
+        const stack = {
+            keys: getSortedDatasetIndices(chart, true),
+            values: parsed._stacks[scale.axis]._visualValues
+        };
+        return applyStack(stack, value, meta.index, {
+            mode
+        });
+    }
+ updateRangeFromParsed(range, scale, parsed, stack) {
+        const parsedValue = parsed[scale.axis];
+        let value = parsedValue === null ? NaN : parsedValue;
+        const values = stack && parsed._stacks[scale.axis];
+        if (stack && values) {
+            stack.values = values;
+            value = applyStack(stack, parsedValue, this._cachedMeta.index);
+        }
+        range.min = Math.min(range.min, value);
+        range.max = Math.max(range.max, value);
+    }
+ getMinMax(scale, canStack) {
+        const meta = this._cachedMeta;
+        const _parsed = meta._parsed;
+        const sorted = meta._sorted && scale === meta.iScale;
+        const ilen = _parsed.length;
+        const otherScale = this._getOtherScale(scale);
+        const stack = createStack(canStack, meta, this.chart);
+        const range = {
+            min: Number.POSITIVE_INFINITY,
+            max: Number.NEGATIVE_INFINITY
+        };
+        const { min: otherMin , max: otherMax  } = getUserBounds(otherScale);
+        let i, parsed;
+        function _skip() {
+            parsed = _parsed[i];
+            const otherValue = parsed[otherScale.axis];
+            return !helpers_dataset.isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;
+        }
+        for(i = 0; i < ilen; ++i){
+            if (_skip()) {
+                continue;
+            }
+            this.updateRangeFromParsed(range, scale, parsed, stack);
+            if (sorted) {
+                break;
+            }
+        }
+        if (sorted) {
+            for(i = ilen - 1; i >= 0; --i){
+                if (_skip()) {
+                    continue;
+                }
+                this.updateRangeFromParsed(range, scale, parsed, stack);
+                break;
+            }
+        }
+        return range;
+    }
+    getAllParsedValues(scale) {
+        const parsed = this._cachedMeta._parsed;
+        const values = [];
+        let i, ilen, value;
+        for(i = 0, ilen = parsed.length; i < ilen; ++i){
+            value = parsed[i][scale.axis];
+            if (helpers_dataset.isNumberFinite(value)) {
+                values.push(value);
+            }
+        }
+        return values;
+    }
+ getMaxOverflow() {
+        return false;
+    }
+ getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const iScale = meta.iScale;
+        const vScale = meta.vScale;
+        const parsed = this.getParsed(index);
+        return {
+            label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',
+            value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''
+        };
+    }
+ _update(mode) {
+        const meta = this._cachedMeta;
+        this.update(mode || 'default');
+        meta._clip = toClip(helpers_dataset.valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));
+    }
+ update(mode) {}
+    draw() {
+        const ctx = this._ctx;
+        const chart = this.chart;
+        const meta = this._cachedMeta;
+        const elements = meta.data || [];
+        const area = chart.chartArea;
+        const active = [];
+        const start = this._drawStart || 0;
+        const count = this._drawCount || elements.length - start;
+        const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;
+        let i;
+        if (meta.dataset) {
+            meta.dataset.draw(ctx, area, start, count);
+        }
+        for(i = start; i < start + count; ++i){
+            const element = elements[i];
+            if (element.hidden) {
+                continue;
+            }
+            if (element.active && drawActiveElementsOnTop) {
+                active.push(element);
+            } else {
+                element.draw(ctx, area);
+            }
+        }
+        for(i = 0; i < active.length; ++i){
+            active[i].draw(ctx, area);
+        }
+    }
+ getStyle(index, active) {
+        const mode = active ? 'active' : 'default';
+        return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);
+    }
+ getContext(index, active, mode) {
+        const dataset = this.getDataset();
+        let context;
+        if (index >= 0 && index < this._cachedMeta.data.length) {
+            const element = this._cachedMeta.data[index];
+            context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));
+            context.parsed = this.getParsed(index);
+            context.raw = dataset.data[index];
+            context.index = context.dataIndex = index;
+        } else {
+            context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));
+            context.dataset = dataset;
+            context.index = context.datasetIndex = this.index;
+        }
+        context.active = !!active;
+        context.mode = mode;
+        return context;
+    }
+ resolveDatasetElementOptions(mode) {
+        return this._resolveElementOptions(this.datasetElementType.id, mode);
+    }
+ resolveDataElementOptions(index, mode) {
+        return this._resolveElementOptions(this.dataElementType.id, mode, index);
+    }
+ _resolveElementOptions(elementType, mode = 'default', index) {
+        const active = mode === 'active';
+        const cache = this._cachedDataOpts;
+        const cacheKey = elementType + '-' + mode;
+        const cached = cache[cacheKey];
+        const sharing = this.enableOptionSharing && helpers_dataset.defined(index);
+        if (cached) {
+            return cloneIfNotShared(cached, sharing);
+        }
+        const config = this.chart.config;
+        const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);
+        const prefixes = active ? [
+            `${elementType}Hover`,
+            'hover',
+            elementType,
+            ''
+        ] : [
+            elementType,
+            ''
+        ];
+        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
+        const names = Object.keys(helpers_dataset.defaults.elements[elementType]);
+        const context = ()=>this.getContext(index, active, mode);
+        const values = config.resolveNamedOptions(scopes, names, context, prefixes);
+        if (values.$shared) {
+            values.$shared = sharing;
+            cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));
+        }
+        return values;
+    }
+ _resolveAnimations(index, transition, active) {
+        const chart = this.chart;
+        const cache = this._cachedDataOpts;
+        const cacheKey = `animation-${transition}`;
+        const cached = cache[cacheKey];
+        if (cached) {
+            return cached;
+        }
+        let options;
+        if (chart.options.animation !== false) {
+            const config = this.chart.config;
+            const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);
+            const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
+            options = config.createResolver(scopes, this.getContext(index, active, transition));
+        }
+        const animations = new Animations(chart, options && options.animations);
+        if (options && options._cacheable) {
+            cache[cacheKey] = Object.freeze(animations);
+        }
+        return animations;
+    }
+ getSharedOptions(options) {
+        if (!options.$shared) {
+            return;
+        }
+        return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));
+    }
+ includeOptions(mode, sharedOptions) {
+        return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;
+    }
+ _getSharedOptions(start, mode) {
+        const firstOpts = this.resolveDataElementOptions(start, mode);
+        const previouslySharedOptions = this._sharedOptions;
+        const sharedOptions = this.getSharedOptions(firstOpts);
+        const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;
+        this.updateSharedOptions(sharedOptions, mode, firstOpts);
+        return {
+            sharedOptions,
+            includeOptions
+        };
+    }
+ updateElement(element, index, properties, mode) {
+        if (isDirectUpdateMode(mode)) {
+            Object.assign(element, properties);
+        } else {
+            this._resolveAnimations(index, mode).update(element, properties);
+        }
+    }
+ updateSharedOptions(sharedOptions, mode, newOptions) {
+        if (sharedOptions && !isDirectUpdateMode(mode)) {
+            this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);
+        }
+    }
+ _setStyle(element, index, mode, active) {
+        element.active = active;
+        const options = this.getStyle(index, active);
+        this._resolveAnimations(index, mode, active).update(element, {
+            options: !active && this.getSharedOptions(options) || options
+        });
+    }
+    removeHoverStyle(element, datasetIndex, index) {
+        this._setStyle(element, index, 'active', false);
+    }
+    setHoverStyle(element, datasetIndex, index) {
+        this._setStyle(element, index, 'active', true);
+    }
+ _removeDatasetHoverStyle() {
+        const element = this._cachedMeta.dataset;
+        if (element) {
+            this._setStyle(element, undefined, 'active', false);
+        }
+    }
+ _setDatasetHoverStyle() {
+        const element = this._cachedMeta.dataset;
+        if (element) {
+            this._setStyle(element, undefined, 'active', true);
+        }
+    }
+ _resyncElements(resetNewElements) {
+        const data = this._data;
+        const elements = this._cachedMeta.data;
+        for (const [method, arg1, arg2] of this._syncList){
+            this[method](arg1, arg2);
+        }
+        this._syncList = [];
+        const numMeta = elements.length;
+        const numData = data.length;
+        const count = Math.min(numData, numMeta);
+        if (count) {
+            this.parse(0, count);
+        }
+        if (numData > numMeta) {
+            this._insertElements(numMeta, numData - numMeta, resetNewElements);
+        } else if (numData < numMeta) {
+            this._removeElements(numData, numMeta - numData);
+        }
+    }
+ _insertElements(start, count, resetNewElements = true) {
+        const meta = this._cachedMeta;
+        const data = meta.data;
+        const end = start + count;
+        let i;
+        const move = (arr)=>{
+            arr.length += count;
+            for(i = arr.length - 1; i >= end; i--){
+                arr[i] = arr[i - count];
+            }
+        };
+        move(data);
+        for(i = start; i < end; ++i){
+            data[i] = new this.dataElementType();
+        }
+        if (this._parsing) {
+            move(meta._parsed);
+        }
+        this.parse(start, count);
+        if (resetNewElements) {
+            this.updateElements(data, start, count, 'reset');
+        }
+    }
+    updateElements(element, start, count, mode) {}
+ _removeElements(start, count) {
+        const meta = this._cachedMeta;
+        if (this._parsing) {
+            const removed = meta._parsed.splice(start, count);
+            if (meta._stacked) {
+                clearStacks(meta, removed);
+            }
+        }
+        meta.data.splice(start, count);
+    }
+ _sync(args) {
+        if (this._parsing) {
+            this._syncList.push(args);
+        } else {
+            const [method, arg1, arg2] = args;
+            this[method](arg1, arg2);
+        }
+        this.chart._dataChanges.push([
+            this.index,
+            ...args
+        ]);
+    }
+    _onDataPush() {
+        const count = arguments.length;
+        this._sync([
+            '_insertElements',
+            this.getDataset().data.length - count,
+            count
+        ]);
+    }
+    _onDataPop() {
+        this._sync([
+            '_removeElements',
+            this._cachedMeta.data.length - 1,
+            1
+        ]);
+    }
+    _onDataShift() {
+        this._sync([
+            '_removeElements',
+            0,
+            1
+        ]);
+    }
+    _onDataSplice(start, count) {
+        if (count) {
+            this._sync([
+                '_removeElements',
+                start,
+                count
+            ]);
+        }
+        const newCount = arguments.length - 2;
+        if (newCount) {
+            this._sync([
+                '_insertElements',
+                start,
+                newCount
+            ]);
+        }
+    }
+    _onDataUnshift() {
+        this._sync([
+            '_insertElements',
+            0,
+            arguments.length
+        ]);
+    }
+}
+
+function getAllScaleValues(scale, type) {
+    if (!scale._cache.$bar) {
+        const visibleMetas = scale.getMatchingVisibleMetas(type);
+        let values = [];
+        for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){
+            values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));
+        }
+        scale._cache.$bar = helpers_dataset._arrayUnique(values.sort((a, b)=>a - b));
+    }
+    return scale._cache.$bar;
+}
+ function computeMinSampleSize(meta) {
+    const scale = meta.iScale;
+    const values = getAllScaleValues(scale, meta.type);
+    let min = scale._length;
+    let i, ilen, curr, prev;
+    const updateMinAndPrev = ()=>{
+        if (curr === 32767 || curr === -32768) {
+            return;
+        }
+        if (helpers_dataset.defined(prev)) {
+            min = Math.min(min, Math.abs(curr - prev) || min);
+        }
+        prev = curr;
+    };
+    for(i = 0, ilen = values.length; i < ilen; ++i){
+        curr = scale.getPixelForValue(values[i]);
+        updateMinAndPrev();
+    }
+    prev = undefined;
+    for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){
+        curr = scale.getPixelForTick(i);
+        updateMinAndPrev();
+    }
+    return min;
+}
+ function computeFitCategoryTraits(index, ruler, options, stackCount) {
+    const thickness = options.barThickness;
+    let size, ratio;
+    if (helpers_dataset.isNullOrUndef(thickness)) {
+        size = ruler.min * options.categoryPercentage;
+        ratio = options.barPercentage;
+    } else {
+        size = thickness * stackCount;
+        ratio = 1;
+    }
+    return {
+        chunk: size / stackCount,
+        ratio,
+        start: ruler.pixels[index] - size / 2
+    };
+}
+ function computeFlexCategoryTraits(index, ruler, options, stackCount) {
+    const pixels = ruler.pixels;
+    const curr = pixels[index];
+    let prev = index > 0 ? pixels[index - 1] : null;
+    let next = index < pixels.length - 1 ? pixels[index + 1] : null;
+    const percent = options.categoryPercentage;
+    if (prev === null) {
+        prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
+    }
+    if (next === null) {
+        next = curr + curr - prev;
+    }
+    const start = curr - (curr - Math.min(prev, next)) / 2 * percent;
+    const size = Math.abs(next - prev) / 2 * percent;
+    return {
+        chunk: size / stackCount,
+        ratio: options.barPercentage,
+        start
+    };
+}
+function parseFloatBar(entry, item, vScale, i) {
+    const startValue = vScale.parse(entry[0], i);
+    const endValue = vScale.parse(entry[1], i);
+    const min = Math.min(startValue, endValue);
+    const max = Math.max(startValue, endValue);
+    let barStart = min;
+    let barEnd = max;
+    if (Math.abs(min) > Math.abs(max)) {
+        barStart = max;
+        barEnd = min;
+    }
+    item[vScale.axis] = barEnd;
+    item._custom = {
+        barStart,
+        barEnd,
+        start: startValue,
+        end: endValue,
+        min,
+        max
+    };
+}
+function parseValue(entry, item, vScale, i) {
+    if (helpers_dataset.isArray(entry)) {
+        parseFloatBar(entry, item, vScale, i);
+    } else {
+        item[vScale.axis] = vScale.parse(entry, i);
+    }
+    return item;
+}
+function parseArrayOrPrimitive(meta, data, start, count) {
+    const iScale = meta.iScale;
+    const vScale = meta.vScale;
+    const labels = iScale.getLabels();
+    const singleScale = iScale === vScale;
+    const parsed = [];
+    let i, ilen, item, entry;
+    for(i = start, ilen = start + count; i < ilen; ++i){
+        entry = data[i];
+        item = {};
+        item[iScale.axis] = singleScale || iScale.parse(labels[i], i);
+        parsed.push(parseValue(entry, item, vScale, i));
+    }
+    return parsed;
+}
+function isFloatBar(custom) {
+    return custom && custom.barStart !== undefined && custom.barEnd !== undefined;
+}
+function barSign(size, vScale, actualBase) {
+    if (size !== 0) {
+        return helpers_dataset.sign(size);
+    }
+    return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);
+}
+function borderProps(properties) {
+    let reverse, start, end, top, bottom;
+    if (properties.horizontal) {
+        reverse = properties.base > properties.x;
+        start = 'left';
+        end = 'right';
+    } else {
+        reverse = properties.base < properties.y;
+        start = 'bottom';
+        end = 'top';
+    }
+    if (reverse) {
+        top = 'end';
+        bottom = 'start';
+    } else {
+        top = 'start';
+        bottom = 'end';
+    }
+    return {
+        start,
+        end,
+        reverse,
+        top,
+        bottom
+    };
+}
+function setBorderSkipped(properties, options, stack, index) {
+    let edge = options.borderSkipped;
+    const res = {};
+    if (!edge) {
+        properties.borderSkipped = res;
+        return;
+    }
+    if (edge === true) {
+        properties.borderSkipped = {
+            top: true,
+            right: true,
+            bottom: true,
+            left: true
+        };
+        return;
+    }
+    const { start , end , reverse , top , bottom  } = borderProps(properties);
+    if (edge === 'middle' && stack) {
+        properties.enableBorderRadius = true;
+        if ((stack._top || 0) === index) {
+            edge = top;
+        } else if ((stack._bottom || 0) === index) {
+            edge = bottom;
+        } else {
+            res[parseEdge(bottom, start, end, reverse)] = true;
+            edge = top;
+        }
+    }
+    res[parseEdge(edge, start, end, reverse)] = true;
+    properties.borderSkipped = res;
+}
+function parseEdge(edge, a, b, reverse) {
+    if (reverse) {
+        edge = swap(edge, a, b);
+        edge = startEnd(edge, b, a);
+    } else {
+        edge = startEnd(edge, a, b);
+    }
+    return edge;
+}
+function swap(orig, v1, v2) {
+    return orig === v1 ? v2 : orig === v2 ? v1 : orig;
+}
+function startEnd(v, start, end) {
+    return v === 'start' ? start : v === 'end' ? end : v;
+}
+function setInflateAmount(properties, { inflateAmount  }, ratio) {
+    properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;
+}
+class BarController extends DatasetController {
+    static id = 'bar';
+ static defaults = {
+        datasetElementType: false,
+        dataElementType: 'bar',
+        categoryPercentage: 0.8,
+        barPercentage: 0.9,
+        grouped: true,
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'x',
+                    'y',
+                    'base',
+                    'width',
+                    'height'
+                ]
+            }
+        }
+    };
+ static overrides = {
+        scales: {
+            _index_: {
+                type: 'category',
+                offset: true,
+                grid: {
+                    offset: true
+                }
+            },
+            _value_: {
+                type: 'linear',
+                beginAtZero: true
+            }
+        }
+    };
+ parsePrimitiveData(meta, data, start, count) {
+        return parseArrayOrPrimitive(meta, data, start, count);
+    }
+ parseArrayData(meta, data, start, count) {
+        return parseArrayOrPrimitive(meta, data, start, count);
+    }
+ parseObjectData(meta, data, start, count) {
+        const { iScale , vScale  } = meta;
+        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;
+        const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;
+        const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;
+        const parsed = [];
+        let i, ilen, item, obj;
+        for(i = start, ilen = start + count; i < ilen; ++i){
+            obj = data[i];
+            item = {};
+            item[iScale.axis] = iScale.parse(helpers_dataset.resolveObjectKey(obj, iAxisKey), i);
+            parsed.push(parseValue(helpers_dataset.resolveObjectKey(obj, vAxisKey), item, vScale, i));
+        }
+        return parsed;
+    }
+ updateRangeFromParsed(range, scale, parsed, stack) {
+        super.updateRangeFromParsed(range, scale, parsed, stack);
+        const custom = parsed._custom;
+        if (custom && scale === this._cachedMeta.vScale) {
+            range.min = Math.min(range.min, custom.min);
+            range.max = Math.max(range.max, custom.max);
+        }
+    }
+ getMaxOverflow() {
+        return 0;
+    }
+ getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const { iScale , vScale  } = meta;
+        const parsed = this.getParsed(index);
+        const custom = parsed._custom;
+        const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);
+        return {
+            label: '' + iScale.getLabelForValue(parsed[iScale.axis]),
+            value
+        };
+    }
+    initialize() {
+        this.enableOptionSharing = true;
+        super.initialize();
+        const meta = this._cachedMeta;
+        meta.stack = this.getDataset().stack;
+    }
+    update(mode) {
+        const meta = this._cachedMeta;
+        this.updateElements(meta.data, 0, meta.data.length, mode);
+    }
+    updateElements(bars, start, count, mode) {
+        const reset = mode === 'reset';
+        const { index , _cachedMeta: { vScale  }  } = this;
+        const base = vScale.getBasePixel();
+        const horizontal = vScale.isHorizontal();
+        const ruler = this._getRuler();
+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);
+        for(let i = start; i < start + count; i++){
+            const parsed = this.getParsed(i);
+            const vpixels = reset || helpers_dataset.isNullOrUndef(parsed[vScale.axis]) ? {
+                base,
+                head: base
+            } : this._calculateBarValuePixels(i);
+            const ipixels = this._calculateBarIndexPixels(i, ruler);
+            const stack = (parsed._stacks || {})[vScale.axis];
+            const properties = {
+                horizontal,
+                base: vpixels.base,
+                enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,
+                x: horizontal ? vpixels.head : ipixels.center,
+                y: horizontal ? ipixels.center : vpixels.head,
+                height: horizontal ? ipixels.size : Math.abs(vpixels.size),
+                width: horizontal ? Math.abs(vpixels.size) : ipixels.size
+            };
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);
+            }
+            const options = properties.options || bars[i].options;
+            setBorderSkipped(properties, options, stack, index);
+            setInflateAmount(properties, options, ruler.ratio);
+            this.updateElement(bars[i], i, properties, mode);
+        }
+    }
+ _getStacks(last, dataIndex) {
+        const { iScale  } = this._cachedMeta;
+        const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);
+        const stacked = iScale.options.stacked;
+        const stacks = [];
+        const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);
+        const iScaleValue = currentParsed && currentParsed[iScale.axis];
+        const skipNull = (meta)=>{
+            const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);
+            const val = parsed && parsed[meta.vScale.axis];
+            if (helpers_dataset.isNullOrUndef(val) || isNaN(val)) {
+                return true;
+            }
+        };
+        for (const meta of metasets){
+            if (dataIndex !== undefined && skipNull(meta)) {
+                continue;
+            }
+            if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {
+                stacks.push(meta.stack);
+            }
+            if (meta.index === last) {
+                break;
+            }
+        }
+        if (!stacks.length) {
+            stacks.push(undefined);
+        }
+        return stacks;
+    }
+ _getStackCount(index) {
+        return this._getStacks(undefined, index).length;
+    }
+    _getAxisCount() {
+        return this._getAxis().length;
+    }
+    getFirstScaleIdForIndexAxis() {
+        const scales = this.chart.scales;
+        const indexScaleId = this.chart.options.indexAxis;
+        return Object.keys(scales).filter((key)=>scales[key].axis === indexScaleId).shift();
+    }
+    _getAxis() {
+        const axis = {};
+        const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();
+        for (const dataset of this.chart.data.datasets){
+            axis[helpers_dataset.valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;
+        }
+        return Object.keys(axis);
+    }
+ _getStackIndex(datasetIndex, name, dataIndex) {
+        const stacks = this._getStacks(datasetIndex, dataIndex);
+        const index = name !== undefined ? stacks.indexOf(name) : -1;
+        return index === -1 ? stacks.length - 1 : index;
+    }
+ _getRuler() {
+        const opts = this.options;
+        const meta = this._cachedMeta;
+        const iScale = meta.iScale;
+        const pixels = [];
+        let i, ilen;
+        for(i = 0, ilen = meta.data.length; i < ilen; ++i){
+            pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));
+        }
+        const barThickness = opts.barThickness;
+        const min = barThickness || computeMinSampleSize(meta);
+        return {
+            min,
+            pixels,
+            start: iScale._startPixel,
+            end: iScale._endPixel,
+            stackCount: this._getStackCount(),
+            scale: iScale,
+            grouped: opts.grouped,
+            ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage
+        };
+    }
+ _calculateBarValuePixels(index) {
+        const { _cachedMeta: { vScale , _stacked , index: datasetIndex  } , options: { base: baseValue , minBarLength  }  } = this;
+        const actualBase = baseValue || 0;
+        const parsed = this.getParsed(index);
+        const custom = parsed._custom;
+        const floating = isFloatBar(custom);
+        let value = parsed[vScale.axis];
+        let start = 0;
+        let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;
+        let head, size;
+        if (length !== value) {
+            start = length - value;
+            length = value;
+        }
+        if (floating) {
+            value = custom.barStart;
+            length = custom.barEnd - custom.barStart;
+            if (value !== 0 && helpers_dataset.sign(value) !== helpers_dataset.sign(custom.barEnd)) {
+                start = 0;
+            }
+            start += value;
+        }
+        const startValue = !helpers_dataset.isNullOrUndef(baseValue) && !floating ? baseValue : start;
+        let base = vScale.getPixelForValue(startValue);
+        if (this.chart.getDataVisibility(index)) {
+            head = vScale.getPixelForValue(start + length);
+        } else {
+            head = base;
+        }
+        size = head - base;
+        if (Math.abs(size) < minBarLength) {
+            size = barSign(size, vScale, actualBase) * minBarLength;
+            if (value === actualBase) {
+                base -= size / 2;
+            }
+            const startPixel = vScale.getPixelForDecimal(0);
+            const endPixel = vScale.getPixelForDecimal(1);
+            const min = Math.min(startPixel, endPixel);
+            const max = Math.max(startPixel, endPixel);
+            base = Math.max(Math.min(base, max), min);
+            head = base + size;
+            if (_stacked && !floating) {
+                parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);
+            }
+        }
+        if (base === vScale.getPixelForValue(actualBase)) {
+            const halfGrid = helpers_dataset.sign(size) * vScale.getLineWidthForValue(actualBase) / 2;
+            base += halfGrid;
+            size -= halfGrid;
+        }
+        return {
+            size,
+            base,
+            head,
+            center: head + size / 2
+        };
+    }
+ _calculateBarIndexPixels(index, ruler) {
+        const scale = ruler.scale;
+        const options = this.options;
+        const skipNull = options.skipNull;
+        const maxBarThickness = helpers_dataset.valueOrDefault(options.maxBarThickness, Infinity);
+        let center, size;
+        const axisCount = this._getAxisCount();
+        if (ruler.grouped) {
+            const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;
+            const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);
+            const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;
+            const axisNumber = this._getAxis().indexOf(helpers_dataset.valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));
+            const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;
+            center = range.start + range.chunk * stackIndex + range.chunk / 2;
+            size = Math.min(maxBarThickness, range.chunk * range.ratio);
+        } else {
+            center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);
+            size = Math.min(maxBarThickness, ruler.min * ruler.ratio);
+        }
+        return {
+            base: center - size / 2,
+            head: center + size / 2,
+            center,
+            size
+        };
+    }
+    draw() {
+        const meta = this._cachedMeta;
+        const vScale = meta.vScale;
+        const rects = meta.data;
+        const ilen = rects.length;
+        let i = 0;
+        for(; i < ilen; ++i){
+            if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {
+                rects[i].draw(this._ctx);
+            }
+        }
+    }
+}
+
+class BubbleController extends DatasetController {
+    static id = 'bubble';
+ static defaults = {
+        datasetElementType: false,
+        dataElementType: 'point',
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'x',
+                    'y',
+                    'borderWidth',
+                    'radius'
+                ]
+            }
+        }
+    };
+ static overrides = {
+        scales: {
+            x: {
+                type: 'linear'
+            },
+            y: {
+                type: 'linear'
+            }
+        }
+    };
+    initialize() {
+        this.enableOptionSharing = true;
+        super.initialize();
+    }
+ parsePrimitiveData(meta, data, start, count) {
+        const parsed = super.parsePrimitiveData(meta, data, start, count);
+        for(let i = 0; i < parsed.length; i++){
+            parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;
+        }
+        return parsed;
+    }
+ parseArrayData(meta, data, start, count) {
+        const parsed = super.parseArrayData(meta, data, start, count);
+        for(let i = 0; i < parsed.length; i++){
+            const item = data[start + i];
+            parsed[i]._custom = helpers_dataset.valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);
+        }
+        return parsed;
+    }
+ parseObjectData(meta, data, start, count) {
+        const parsed = super.parseObjectData(meta, data, start, count);
+        for(let i = 0; i < parsed.length; i++){
+            const item = data[start + i];
+            parsed[i]._custom = helpers_dataset.valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);
+        }
+        return parsed;
+    }
+ getMaxOverflow() {
+        const data = this._cachedMeta.data;
+        let max = 0;
+        for(let i = data.length - 1; i >= 0; --i){
+            max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);
+        }
+        return max > 0 && max;
+    }
+ getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const labels = this.chart.data.labels || [];
+        const { xScale , yScale  } = meta;
+        const parsed = this.getParsed(index);
+        const x = xScale.getLabelForValue(parsed.x);
+        const y = yScale.getLabelForValue(parsed.y);
+        const r = parsed._custom;
+        return {
+            label: labels[index] || '',
+            value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'
+        };
+    }
+    update(mode) {
+        const points = this._cachedMeta.data;
+        this.updateElements(points, 0, points.length, mode);
+    }
+    updateElements(points, start, count, mode) {
+        const reset = mode === 'reset';
+        const { iScale , vScale  } = this._cachedMeta;
+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);
+        const iAxis = iScale.axis;
+        const vAxis = vScale.axis;
+        for(let i = start; i < start + count; i++){
+            const point = points[i];
+            const parsed = !reset && this.getParsed(i);
+            const properties = {};
+            const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);
+            const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);
+            properties.skip = isNaN(iPixel) || isNaN(vPixel);
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+                if (reset) {
+                    properties.options.radius = 0;
+                }
+            }
+            this.updateElement(point, i, properties, mode);
+        }
+    }
+ resolveDataElementOptions(index, mode) {
+        const parsed = this.getParsed(index);
+        let values = super.resolveDataElementOptions(index, mode);
+        if (values.$shared) {
+            values = Object.assign({}, values, {
+                $shared: false
+            });
+        }
+        const radius = values.radius;
+        if (mode !== 'active') {
+            values.radius = 0;
+        }
+        values.radius += helpers_dataset.valueOrDefault(parsed && parsed._custom, radius);
+        return values;
+    }
+}
+
+function getRatioAndOffset(rotation, circumference, cutout) {
+    let ratioX = 1;
+    let ratioY = 1;
+    let offsetX = 0;
+    let offsetY = 0;
+    if (circumference < helpers_dataset.TAU) {
+        const startAngle = rotation;
+        const endAngle = startAngle + circumference;
+        const startX = Math.cos(startAngle);
+        const startY = Math.sin(startAngle);
+        const endX = Math.cos(endAngle);
+        const endY = Math.sin(endAngle);
+        const calcMax = (angle, a, b)=>helpers_dataset._angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);
+        const calcMin = (angle, a, b)=>helpers_dataset._angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);
+        const maxX = calcMax(0, startX, endX);
+        const maxY = calcMax(helpers_dataset.HALF_PI, startY, endY);
+        const minX = calcMin(helpers_dataset.PI, startX, endX);
+        const minY = calcMin(helpers_dataset.PI + helpers_dataset.HALF_PI, startY, endY);
+        ratioX = (maxX - minX) / 2;
+        ratioY = (maxY - minY) / 2;
+        offsetX = -(maxX + minX) / 2;
+        offsetY = -(maxY + minY) / 2;
+    }
+    return {
+        ratioX,
+        ratioY,
+        offsetX,
+        offsetY
+    };
+}
+class DoughnutController extends DatasetController {
+    static id = 'doughnut';
+ static defaults = {
+        datasetElementType: false,
+        dataElementType: 'arc',
+        animation: {
+            animateRotate: true,
+            animateScale: false
+        },
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'circumference',
+                    'endAngle',
+                    'innerRadius',
+                    'outerRadius',
+                    'startAngle',
+                    'x',
+                    'y',
+                    'offset',
+                    'borderWidth',
+                    'spacing'
+                ]
+            }
+        },
+        cutout: '50%',
+        rotation: 0,
+        circumference: 360,
+        radius: '100%',
+        spacing: 0,
+        indexAxis: 'r'
+    };
+    static descriptors = {
+        _scriptable: (name)=>name !== 'spacing',
+        _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')
+    };
+ static overrides = {
+        aspectRatio: 1,
+        plugins: {
+            legend: {
+                labels: {
+                    generateLabels (chart) {
+                        const data = chart.data;
+                        if (data.labels.length && data.datasets.length) {
+                            const { labels: { pointStyle , color  }  } = chart.legend.options;
+                            return data.labels.map((label, i)=>{
+                                const meta = chart.getDatasetMeta(0);
+                                const style = meta.controller.getStyle(i);
+                                return {
+                                    text: label,
+                                    fillStyle: style.backgroundColor,
+                                    strokeStyle: style.borderColor,
+                                    fontColor: color,
+                                    lineWidth: style.borderWidth,
+                                    pointStyle: pointStyle,
+                                    hidden: !chart.getDataVisibility(i),
+                                    index: i
+                                };
+                            });
+                        }
+                        return [];
+                    }
+                },
+                onClick (e, legendItem, legend) {
+                    legend.chart.toggleDataVisibility(legendItem.index);
+                    legend.chart.update();
+                }
+            }
+        }
+    };
+    constructor(chart, datasetIndex){
+        super(chart, datasetIndex);
+        this.enableOptionSharing = true;
+        this.innerRadius = undefined;
+        this.outerRadius = undefined;
+        this.offsetX = undefined;
+        this.offsetY = undefined;
+    }
+    linkScales() {}
+ parse(start, count) {
+        const data = this.getDataset().data;
+        const meta = this._cachedMeta;
+        if (this._parsing === false) {
+            meta._parsed = data;
+        } else {
+            let getter = (i)=>+data[i];
+            if (helpers_dataset.isObject(data[start])) {
+                const { key ='value'  } = this._parsing;
+                getter = (i)=>+helpers_dataset.resolveObjectKey(data[i], key);
+            }
+            let i, ilen;
+            for(i = start, ilen = start + count; i < ilen; ++i){
+                meta._parsed[i] = getter(i);
+            }
+        }
+    }
+ _getRotation() {
+        return helpers_dataset.toRadians(this.options.rotation - 90);
+    }
+ _getCircumference() {
+        return helpers_dataset.toRadians(this.options.circumference);
+    }
+ _getRotationExtents() {
+        let min = helpers_dataset.TAU;
+        let max = -helpers_dataset.TAU;
+        for(let i = 0; i < this.chart.data.datasets.length; ++i){
+            if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {
+                const controller = this.chart.getDatasetMeta(i).controller;
+                const rotation = controller._getRotation();
+                const circumference = controller._getCircumference();
+                min = Math.min(min, rotation);
+                max = Math.max(max, rotation + circumference);
+            }
+        }
+        return {
+            rotation: min,
+            circumference: max - min
+        };
+    }
+ update(mode) {
+        const chart = this.chart;
+        const { chartArea  } = chart;
+        const meta = this._cachedMeta;
+        const arcs = meta.data;
+        const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;
+        const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);
+        const cutout = Math.min(helpers_dataset.toPercentage(this.options.cutout, maxSize), 1);
+        const chartWeight = this._getRingWeight(this.index);
+        const { circumference , rotation  } = this._getRotationExtents();
+        const { ratioX , ratioY , offsetX , offsetY  } = getRatioAndOffset(rotation, circumference, cutout);
+        const maxWidth = (chartArea.width - spacing) / ratioX;
+        const maxHeight = (chartArea.height - spacing) / ratioY;
+        const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);
+        const outerRadius = helpers_dataset.toDimension(this.options.radius, maxRadius);
+        const innerRadius = Math.max(outerRadius * cutout, 0);
+        const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();
+        this.offsetX = offsetX * outerRadius;
+        this.offsetY = offsetY * outerRadius;
+        meta.total = this.calculateTotal();
+        this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);
+        this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);
+        this.updateElements(arcs, 0, arcs.length, mode);
+    }
+ _circumference(i, reset) {
+        const opts = this.options;
+        const meta = this._cachedMeta;
+        const circumference = this._getCircumference();
+        if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {
+            return 0;
+        }
+        return this.calculateCircumference(meta._parsed[i] * circumference / helpers_dataset.TAU);
+    }
+    updateElements(arcs, start, count, mode) {
+        const reset = mode === 'reset';
+        const chart = this.chart;
+        const chartArea = chart.chartArea;
+        const opts = chart.options;
+        const animationOpts = opts.animation;
+        const centerX = (chartArea.left + chartArea.right) / 2;
+        const centerY = (chartArea.top + chartArea.bottom) / 2;
+        const animateScale = reset && animationOpts.animateScale;
+        const innerRadius = animateScale ? 0 : this.innerRadius;
+        const outerRadius = animateScale ? 0 : this.outerRadius;
+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);
+        let startAngle = this._getRotation();
+        let i;
+        for(i = 0; i < start; ++i){
+            startAngle += this._circumference(i, reset);
+        }
+        for(i = start; i < start + count; ++i){
+            const circumference = this._circumference(i, reset);
+            const arc = arcs[i];
+            const properties = {
+                x: centerX + this.offsetX,
+                y: centerY + this.offsetY,
+                startAngle,
+                endAngle: startAngle + circumference,
+                circumference,
+                outerRadius,
+                innerRadius
+            };
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);
+            }
+            startAngle += circumference;
+            this.updateElement(arc, i, properties, mode);
+        }
+    }
+    calculateTotal() {
+        const meta = this._cachedMeta;
+        const metaData = meta.data;
+        let total = 0;
+        let i;
+        for(i = 0; i < metaData.length; i++){
+            const value = meta._parsed[i];
+            if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {
+                total += Math.abs(value);
+            }
+        }
+        return total;
+    }
+    calculateCircumference(value) {
+        const total = this._cachedMeta.total;
+        if (total > 0 && !isNaN(value)) {
+            return helpers_dataset.TAU * (Math.abs(value) / total);
+        }
+        return 0;
+    }
+    getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const chart = this.chart;
+        const labels = chart.data.labels || [];
+        const value = helpers_dataset.formatNumber(meta._parsed[index], chart.options.locale);
+        return {
+            label: labels[index] || '',
+            value
+        };
+    }
+    getMaxBorderWidth(arcs) {
+        let max = 0;
+        const chart = this.chart;
+        let i, ilen, meta, controller, options;
+        if (!arcs) {
+            for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){
+                if (chart.isDatasetVisible(i)) {
+                    meta = chart.getDatasetMeta(i);
+                    arcs = meta.data;
+                    controller = meta.controller;
+                    break;
+                }
+            }
+        }
+        if (!arcs) {
+            return 0;
+        }
+        for(i = 0, ilen = arcs.length; i < ilen; ++i){
+            options = controller.resolveDataElementOptions(i);
+            if (options.borderAlign !== 'inner') {
+                max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);
+            }
+        }
+        return max;
+    }
+    getMaxOffset(arcs) {
+        let max = 0;
+        for(let i = 0, ilen = arcs.length; i < ilen; ++i){
+            const options = this.resolveDataElementOptions(i);
+            max = Math.max(max, options.offset || 0, options.hoverOffset || 0);
+        }
+        return max;
+    }
+ _getRingWeightOffset(datasetIndex) {
+        let ringWeightOffset = 0;
+        for(let i = 0; i < datasetIndex; ++i){
+            if (this.chart.isDatasetVisible(i)) {
+                ringWeightOffset += this._getRingWeight(i);
+            }
+        }
+        return ringWeightOffset;
+    }
+ _getRingWeight(datasetIndex) {
+        return Math.max(helpers_dataset.valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);
+    }
+ _getVisibleDatasetWeightTotal() {
+        return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
+    }
+}
+
+class LineController extends DatasetController {
+    static id = 'line';
+ static defaults = {
+        datasetElementType: 'line',
+        dataElementType: 'point',
+        showLine: true,
+        spanGaps: false
+    };
+ static overrides = {
+        scales: {
+            _index_: {
+                type: 'category'
+            },
+            _value_: {
+                type: 'linear'
+            }
+        }
+    };
+    initialize() {
+        this.enableOptionSharing = true;
+        this.supportsDecimation = true;
+        super.initialize();
+    }
+    update(mode) {
+        const meta = this._cachedMeta;
+        const { dataset: line , data: points = [] , _dataset  } = meta;
+        const animationsDisabled = this.chart._animationsDisabled;
+        let { start , count  } = helpers_dataset._getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);
+        this._drawStart = start;
+        this._drawCount = count;
+        if (helpers_dataset._scaleRangesChanged(meta)) {
+            start = 0;
+            count = points.length;
+        }
+        line._chart = this.chart;
+        line._datasetIndex = this.index;
+        line._decimated = !!_dataset._decimated;
+        line.points = points;
+        const options = this.resolveDatasetElementOptions(mode);
+        if (!this.options.showLine) {
+            options.borderWidth = 0;
+        }
+        options.segment = this.options.segment;
+        this.updateElement(line, undefined, {
+            animated: !animationsDisabled,
+            options
+        }, mode);
+        this.updateElements(points, start, count, mode);
+    }
+    updateElements(points, start, count, mode) {
+        const reset = mode === 'reset';
+        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;
+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);
+        const iAxis = iScale.axis;
+        const vAxis = vScale.axis;
+        const { spanGaps , segment  } = this.options;
+        const maxGapLength = helpers_dataset.isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;
+        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';
+        const end = start + count;
+        const pointsCount = points.length;
+        let prevParsed = start > 0 && this.getParsed(start - 1);
+        for(let i = 0; i < pointsCount; ++i){
+            const point = points[i];
+            const properties = directUpdate ? point : {};
+            if (i < start || i >= end) {
+                properties.skip = true;
+                continue;
+            }
+            const parsed = this.getParsed(i);
+            const nullData = helpers_dataset.isNullOrUndef(parsed[vAxis]);
+            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);
+            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);
+            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;
+            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;
+            if (segment) {
+                properties.parsed = parsed;
+                properties.raw = _dataset.data[i];
+            }
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+            }
+            if (!directUpdate) {
+                this.updateElement(point, i, properties, mode);
+            }
+            prevParsed = parsed;
+        }
+    }
+ getMaxOverflow() {
+        const meta = this._cachedMeta;
+        const dataset = meta.dataset;
+        const border = dataset.options && dataset.options.borderWidth || 0;
+        const data = meta.data || [];
+        if (!data.length) {
+            return border;
+        }
+        const firstPoint = data[0].size(this.resolveDataElementOptions(0));
+        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));
+        return Math.max(border, firstPoint, lastPoint) / 2;
+    }
+    draw() {
+        const meta = this._cachedMeta;
+        meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);
+        super.draw();
+    }
+}
+
+class PolarAreaController extends DatasetController {
+    static id = 'polarArea';
+ static defaults = {
+        dataElementType: 'arc',
+        animation: {
+            animateRotate: true,
+            animateScale: true
+        },
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'x',
+                    'y',
+                    'startAngle',
+                    'endAngle',
+                    'innerRadius',
+                    'outerRadius'
+                ]
+            }
+        },
+        indexAxis: 'r',
+        startAngle: 0
+    };
+ static overrides = {
+        aspectRatio: 1,
+        plugins: {
+            legend: {
+                labels: {
+                    generateLabels (chart) {
+                        const data = chart.data;
+                        if (data.labels.length && data.datasets.length) {
+                            const { labels: { pointStyle , color  }  } = chart.legend.options;
+                            return data.labels.map((label, i)=>{
+                                const meta = chart.getDatasetMeta(0);
+                                const style = meta.controller.getStyle(i);
+                                return {
+                                    text: label,
+                                    fillStyle: style.backgroundColor,
+                                    strokeStyle: style.borderColor,
+                                    fontColor: color,
+                                    lineWidth: style.borderWidth,
+                                    pointStyle: pointStyle,
+                                    hidden: !chart.getDataVisibility(i),
+                                    index: i
+                                };
+                            });
+                        }
+                        return [];
+                    }
+                },
+                onClick (e, legendItem, legend) {
+                    legend.chart.toggleDataVisibility(legendItem.index);
+                    legend.chart.update();
+                }
+            }
+        },
+        scales: {
+            r: {
+                type: 'radialLinear',
+                angleLines: {
+                    display: false
+                },
+                beginAtZero: true,
+                grid: {
+                    circular: true
+                },
+                pointLabels: {
+                    display: false
+                },
+                startAngle: 0
+            }
+        }
+    };
+    constructor(chart, datasetIndex){
+        super(chart, datasetIndex);
+        this.innerRadius = undefined;
+        this.outerRadius = undefined;
+    }
+    getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const chart = this.chart;
+        const labels = chart.data.labels || [];
+        const value = helpers_dataset.formatNumber(meta._parsed[index].r, chart.options.locale);
+        return {
+            label: labels[index] || '',
+            value
+        };
+    }
+    parseObjectData(meta, data, start, count) {
+        return helpers_dataset._parseObjectDataRadialScale.bind(this)(meta, data, start, count);
+    }
+    update(mode) {
+        const arcs = this._cachedMeta.data;
+        this._updateRadius();
+        this.updateElements(arcs, 0, arcs.length, mode);
+    }
+ getMinMax() {
+        const meta = this._cachedMeta;
+        const range = {
+            min: Number.POSITIVE_INFINITY,
+            max: Number.NEGATIVE_INFINITY
+        };
+        meta.data.forEach((element, index)=>{
+            const parsed = this.getParsed(index).r;
+            if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {
+                if (parsed < range.min) {
+                    range.min = parsed;
+                }
+                if (parsed > range.max) {
+                    range.max = parsed;
+                }
+            }
+        });
+        return range;
+    }
+ _updateRadius() {
+        const chart = this.chart;
+        const chartArea = chart.chartArea;
+        const opts = chart.options;
+        const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
+        const outerRadius = Math.max(minSize / 2, 0);
+        const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);
+        const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();
+        this.outerRadius = outerRadius - radiusLength * this.index;
+        this.innerRadius = this.outerRadius - radiusLength;
+    }
+    updateElements(arcs, start, count, mode) {
+        const reset = mode === 'reset';
+        const chart = this.chart;
+        const opts = chart.options;
+        const animationOpts = opts.animation;
+        const scale = this._cachedMeta.rScale;
+        const centerX = scale.xCenter;
+        const centerY = scale.yCenter;
+        const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * helpers_dataset.PI;
+        let angle = datasetStartAngle;
+        let i;
+        const defaultAngle = 360 / this.countVisibleElements();
+        for(i = 0; i < start; ++i){
+            angle += this._computeAngle(i, mode, defaultAngle);
+        }
+        for(i = start; i < start + count; i++){
+            const arc = arcs[i];
+            let startAngle = angle;
+            let endAngle = angle + this._computeAngle(i, mode, defaultAngle);
+            let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;
+            angle = endAngle;
+            if (reset) {
+                if (animationOpts.animateScale) {
+                    outerRadius = 0;
+                }
+                if (animationOpts.animateRotate) {
+                    startAngle = endAngle = datasetStartAngle;
+                }
+            }
+            const properties = {
+                x: centerX,
+                y: centerY,
+                innerRadius: 0,
+                outerRadius,
+                startAngle,
+                endAngle,
+                options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)
+            };
+            this.updateElement(arc, i, properties, mode);
+        }
+    }
+    countVisibleElements() {
+        const meta = this._cachedMeta;
+        let count = 0;
+        meta.data.forEach((element, index)=>{
+            if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {
+                count++;
+            }
+        });
+        return count;
+    }
+ _computeAngle(index, mode, defaultAngle) {
+        return this.chart.getDataVisibility(index) ? helpers_dataset.toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;
+    }
+}
+
+class PieController extends DoughnutController {
+    static id = 'pie';
+ static defaults = {
+        cutout: 0,
+        rotation: 0,
+        circumference: 360,
+        radius: '100%'
+    };
+}
+
+class RadarController extends DatasetController {
+    static id = 'radar';
+ static defaults = {
+        datasetElementType: 'line',
+        dataElementType: 'point',
+        indexAxis: 'r',
+        showLine: true,
+        elements: {
+            line: {
+                fill: 'start'
+            }
+        }
+    };
+ static overrides = {
+        aspectRatio: 1,
+        scales: {
+            r: {
+                type: 'radialLinear'
+            }
+        }
+    };
+ getLabelAndValue(index) {
+        const vScale = this._cachedMeta.vScale;
+        const parsed = this.getParsed(index);
+        return {
+            label: vScale.getLabels()[index],
+            value: '' + vScale.getLabelForValue(parsed[vScale.axis])
+        };
+    }
+    parseObjectData(meta, data, start, count) {
+        return helpers_dataset._parseObjectDataRadialScale.bind(this)(meta, data, start, count);
+    }
+    update(mode) {
+        const meta = this._cachedMeta;
+        const line = meta.dataset;
+        const points = meta.data || [];
+        const labels = meta.iScale.getLabels();
+        line.points = points;
+        if (mode !== 'resize') {
+            const options = this.resolveDatasetElementOptions(mode);
+            if (!this.options.showLine) {
+                options.borderWidth = 0;
+            }
+            const properties = {
+                _loop: true,
+                _fullLoop: labels.length === points.length,
+                options
+            };
+            this.updateElement(line, undefined, properties, mode);
+        }
+        this.updateElements(points, 0, points.length, mode);
+    }
+    updateElements(points, start, count, mode) {
+        const scale = this._cachedMeta.rScale;
+        const reset = mode === 'reset';
+        for(let i = start; i < start + count; i++){
+            const point = points[i];
+            const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+            const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);
+            const x = reset ? scale.xCenter : pointPosition.x;
+            const y = reset ? scale.yCenter : pointPosition.y;
+            const properties = {
+                x,
+                y,
+                angle: pointPosition.angle,
+                skip: isNaN(x) || isNaN(y),
+                options
+            };
+            this.updateElement(point, i, properties, mode);
+        }
+    }
+}
+
+class ScatterController extends DatasetController {
+    static id = 'scatter';
+ static defaults = {
+        datasetElementType: false,
+        dataElementType: 'point',
+        showLine: false,
+        fill: false
+    };
+ static overrides = {
+        interaction: {
+            mode: 'point'
+        },
+        scales: {
+            x: {
+                type: 'linear'
+            },
+            y: {
+                type: 'linear'
+            }
+        }
+    };
+ getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const labels = this.chart.data.labels || [];
+        const { xScale , yScale  } = meta;
+        const parsed = this.getParsed(index);
+        const x = xScale.getLabelForValue(parsed.x);
+        const y = yScale.getLabelForValue(parsed.y);
+        return {
+            label: labels[index] || '',
+            value: '(' + x + ', ' + y + ')'
+        };
+    }
+    update(mode) {
+        const meta = this._cachedMeta;
+        const { data: points = []  } = meta;
+        const animationsDisabled = this.chart._animationsDisabled;
+        let { start , count  } = helpers_dataset._getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);
+        this._drawStart = start;
+        this._drawCount = count;
+        if (helpers_dataset._scaleRangesChanged(meta)) {
+            start = 0;
+            count = points.length;
+        }
+        if (this.options.showLine) {
+            if (!this.datasetElementType) {
+                this.addElements();
+            }
+            const { dataset: line , _dataset  } = meta;
+            line._chart = this.chart;
+            line._datasetIndex = this.index;
+            line._decimated = !!_dataset._decimated;
+            line.points = points;
+            const options = this.resolveDatasetElementOptions(mode);
+            options.segment = this.options.segment;
+            this.updateElement(line, undefined, {
+                animated: !animationsDisabled,
+                options
+            }, mode);
+        } else if (this.datasetElementType) {
+            delete meta.dataset;
+            this.datasetElementType = false;
+        }
+        this.updateElements(points, start, count, mode);
+    }
+    addElements() {
+        const { showLine  } = this.options;
+        if (!this.datasetElementType && showLine) {
+            this.datasetElementType = this.chart.registry.getElement('line');
+        }
+        super.addElements();
+    }
+    updateElements(points, start, count, mode) {
+        const reset = mode === 'reset';
+        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;
+        const firstOpts = this.resolveDataElementOptions(start, mode);
+        const sharedOptions = this.getSharedOptions(firstOpts);
+        const includeOptions = this.includeOptions(mode, sharedOptions);
+        const iAxis = iScale.axis;
+        const vAxis = vScale.axis;
+        const { spanGaps , segment  } = this.options;
+        const maxGapLength = helpers_dataset.isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;
+        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';
+        let prevParsed = start > 0 && this.getParsed(start - 1);
+        for(let i = start; i < start + count; ++i){
+            const point = points[i];
+            const parsed = this.getParsed(i);
+            const properties = directUpdate ? point : {};
+            const nullData = helpers_dataset.isNullOrUndef(parsed[vAxis]);
+            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);
+            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);
+            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;
+            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;
+            if (segment) {
+                properties.parsed = parsed;
+                properties.raw = _dataset.data[i];
+            }
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+            }
+            if (!directUpdate) {
+                this.updateElement(point, i, properties, mode);
+            }
+            prevParsed = parsed;
+        }
+        this.updateSharedOptions(sharedOptions, mode, firstOpts);
+    }
+ getMaxOverflow() {
+        const meta = this._cachedMeta;
+        const data = meta.data || [];
+        if (!this.options.showLine) {
+            let max = 0;
+            for(let i = data.length - 1; i >= 0; --i){
+                max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);
+            }
+            return max > 0 && max;
+        }
+        const dataset = meta.dataset;
+        const border = dataset.options && dataset.options.borderWidth || 0;
+        if (!data.length) {
+            return border;
+        }
+        const firstPoint = data[0].size(this.resolveDataElementOptions(0));
+        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));
+        return Math.max(border, firstPoint, lastPoint) / 2;
+    }
+}
+
+var controllers = /*#__PURE__*/Object.freeze({
+__proto__: null,
+BarController: BarController,
+BubbleController: BubbleController,
+DoughnutController: DoughnutController,
+LineController: LineController,
+PieController: PieController,
+PolarAreaController: PolarAreaController,
+RadarController: RadarController,
+ScatterController: ScatterController
+});
+
+/**
+ * @namespace Chart._adapters
+ * @since 2.8.0
+ * @private
+ */ function abstract() {
+    throw new Error('This method is not implemented: Check that a complete date adapter is provided.');
+}
+/**
+ * Date adapter (current used by the time scale)
+ * @namespace Chart._adapters._date
+ * @memberof Chart._adapters
+ * @private
+ */ class DateAdapterBase {
+    /**
+   * Override default date adapter methods.
+   * Accepts type parameter to define options type.
+   * @example
+   * Chart._adapters._date.override<{myAdapterOption: string}>({
+   *   init() {
+   *     console.log(this.options.myAdapterOption);
+   *   }
+   * })
+   */ static override(members) {
+        Object.assign(DateAdapterBase.prototype, members);
+    }
+    options;
+    constructor(options){
+        this.options = options || {};
+    }
+    // eslint-disable-next-line @typescript-eslint/no-empty-function
+    init() {}
+    formats() {
+        return abstract();
+    }
+    parse() {
+        return abstract();
+    }
+    format() {
+        return abstract();
+    }
+    add() {
+        return abstract();
+    }
+    diff() {
+        return abstract();
+    }
+    startOf() {
+        return abstract();
+    }
+    endOf() {
+        return abstract();
+    }
+}
+var adapters = {
+    _date: DateAdapterBase
+};
+
+function binarySearch(metaset, axis, value, intersect) {
+    const { controller , data , _sorted  } = metaset;
+    const iScale = controller._cachedMeta.iScale;
+    const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;
+    if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {
+        const lookupMethod = iScale._reversePixels ? helpers_dataset._rlookupByKey : helpers_dataset._lookupByKey;
+        if (!intersect) {
+            const result = lookupMethod(data, axis, value);
+            if (spanGaps) {
+                const { vScale  } = controller._cachedMeta;
+                const { _parsed  } = metaset;
+                const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!helpers_dataset.isNullOrUndef(point[vScale.axis]));
+                result.lo -= Math.max(0, distanceToDefinedLo);
+                const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!helpers_dataset.isNullOrUndef(point[vScale.axis]));
+                result.hi += Math.max(0, distanceToDefinedHi);
+            }
+            return result;
+        } else if (controller._sharedOptions) {
+            const el = data[0];
+            const range = typeof el.getRange === 'function' && el.getRange(axis);
+            if (range) {
+                const start = lookupMethod(data, axis, value - range);
+                const end = lookupMethod(data, axis, value + range);
+                return {
+                    lo: start.lo,
+                    hi: end.hi
+                };
+            }
+        }
+    }
+    return {
+        lo: 0,
+        hi: data.length - 1
+    };
+}
+ function evaluateInteractionItems(chart, axis, position, handler, intersect) {
+    const metasets = chart.getSortedVisibleDatasetMetas();
+    const value = position[axis];
+    for(let i = 0, ilen = metasets.length; i < ilen; ++i){
+        const { index , data  } = metasets[i];
+        const { lo , hi  } = binarySearch(metasets[i], axis, value, intersect);
+        for(let j = lo; j <= hi; ++j){
+            const element = data[j];
+            if (!element.skip) {
+                handler(element, index, j);
+            }
+        }
+    }
+}
+ function getDistanceMetricForAxis(axis) {
+    const useX = axis.indexOf('x') !== -1;
+    const useY = axis.indexOf('y') !== -1;
+    return function(pt1, pt2) {
+        const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
+        const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
+        return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
+    };
+}
+ function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {
+    const items = [];
+    if (!includeInvisible && !chart.isPointInArea(position)) {
+        return items;
+    }
+    const evaluationFunc = function(element, datasetIndex, index) {
+        if (!includeInvisible && !helpers_dataset._isPointInArea(element, chart.chartArea, 0)) {
+            return;
+        }
+        if (element.inRange(position.x, position.y, useFinalPosition)) {
+            items.push({
+                element,
+                datasetIndex,
+                index
+            });
+        }
+    };
+    evaluateInteractionItems(chart, axis, position, evaluationFunc, true);
+    return items;
+}
+ function getNearestRadialItems(chart, position, axis, useFinalPosition) {
+    let items = [];
+    function evaluationFunc(element, datasetIndex, index) {
+        const { startAngle , endAngle  } = element.getProps([
+            'startAngle',
+            'endAngle'
+        ], useFinalPosition);
+        const { angle  } = helpers_dataset.getAngleFromPoint(element, {
+            x: position.x,
+            y: position.y
+        });
+        if (helpers_dataset._angleBetween(angle, startAngle, endAngle)) {
+            items.push({
+                element,
+                datasetIndex,
+                index
+            });
+        }
+    }
+    evaluateInteractionItems(chart, axis, position, evaluationFunc);
+    return items;
+}
+ function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
+    let items = [];
+    const distanceMetric = getDistanceMetricForAxis(axis);
+    let minDistance = Number.POSITIVE_INFINITY;
+    function evaluationFunc(element, datasetIndex, index) {
+        const inRange = element.inRange(position.x, position.y, useFinalPosition);
+        if (intersect && !inRange) {
+            return;
+        }
+        const center = element.getCenterPoint(useFinalPosition);
+        const pointInArea = !!includeInvisible || chart.isPointInArea(center);
+        if (!pointInArea && !inRange) {
+            return;
+        }
+        const distance = distanceMetric(position, center);
+        if (distance < minDistance) {
+            items = [
+                {
+                    element,
+                    datasetIndex,
+                    index
+                }
+            ];
+            minDistance = distance;
+        } else if (distance === minDistance) {
+            items.push({
+                element,
+                datasetIndex,
+                index
+            });
+        }
+    }
+    evaluateInteractionItems(chart, axis, position, evaluationFunc);
+    return items;
+}
+ function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
+    if (!includeInvisible && !chart.isPointInArea(position)) {
+        return [];
+    }
+    return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);
+}
+ function getAxisItems(chart, position, axis, intersect, useFinalPosition) {
+    const items = [];
+    const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';
+    let intersectsItem = false;
+    evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{
+        if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {
+            items.push({
+                element,
+                datasetIndex,
+                index
+            });
+            intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);
+        }
+    });
+    if (intersect && !intersectsItem) {
+        return [];
+    }
+    return items;
+}
+ var Interaction = {
+    evaluateInteractionItems,
+    modes: {
+ index (chart, e, options, useFinalPosition) {
+            const position = helpers_dataset.getRelativePosition(e, chart);
+            const axis = options.axis || 'x';
+            const includeInvisible = options.includeInvisible || false;
+            const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
+            const elements = [];
+            if (!items.length) {
+                return [];
+            }
+            chart.getSortedVisibleDatasetMetas().forEach((meta)=>{
+                const index = items[0].index;
+                const element = meta.data[index];
+                if (element && !element.skip) {
+                    elements.push({
+                        element,
+                        datasetIndex: meta.index,
+                        index
+                    });
+                }
+            });
+            return elements;
+        },
+ dataset (chart, e, options, useFinalPosition) {
+            const position = helpers_dataset.getRelativePosition(e, chart);
+            const axis = options.axis || 'xy';
+            const includeInvisible = options.includeInvisible || false;
+            let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
+            if (items.length > 0) {
+                const datasetIndex = items[0].datasetIndex;
+                const data = chart.getDatasetMeta(datasetIndex).data;
+                items = [];
+                for(let i = 0; i < data.length; ++i){
+                    items.push({
+                        element: data[i],
+                        datasetIndex,
+                        index: i
+                    });
+                }
+            }
+            return items;
+        },
+ point (chart, e, options, useFinalPosition) {
+            const position = helpers_dataset.getRelativePosition(e, chart);
+            const axis = options.axis || 'xy';
+            const includeInvisible = options.includeInvisible || false;
+            return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);
+        },
+ nearest (chart, e, options, useFinalPosition) {
+            const position = helpers_dataset.getRelativePosition(e, chart);
+            const axis = options.axis || 'xy';
+            const includeInvisible = options.includeInvisible || false;
+            return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);
+        },
+ x (chart, e, options, useFinalPosition) {
+            const position = helpers_dataset.getRelativePosition(e, chart);
+            return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);
+        },
+ y (chart, e, options, useFinalPosition) {
+            const position = helpers_dataset.getRelativePosition(e, chart);
+            return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);
+        }
+    }
+};
+
+const STATIC_POSITIONS = [
+    'left',
+    'top',
+    'right',
+    'bottom'
+];
+function filterByPosition(array, position) {
+    return array.filter((v)=>v.pos === position);
+}
+function filterDynamicPositionByAxis(array, axis) {
+    return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);
+}
+function sortByWeight(array, reverse) {
+    return array.sort((a, b)=>{
+        const v0 = reverse ? b : a;
+        const v1 = reverse ? a : b;
+        return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;
+    });
+}
+function wrapBoxes(boxes) {
+    const layoutBoxes = [];
+    let i, ilen, box, pos, stack, stackWeight;
+    for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){
+        box = boxes[i];
+        ({ position: pos , options: { stack , stackWeight =1  }  } = box);
+        layoutBoxes.push({
+            index: i,
+            box,
+            pos,
+            horizontal: box.isHorizontal(),
+            weight: box.weight,
+            stack: stack && pos + stack,
+            stackWeight
+        });
+    }
+    return layoutBoxes;
+}
+function buildStacks(layouts) {
+    const stacks = {};
+    for (const wrap of layouts){
+        const { stack , pos , stackWeight  } = wrap;
+        if (!stack || !STATIC_POSITIONS.includes(pos)) {
+            continue;
+        }
+        const _stack = stacks[stack] || (stacks[stack] = {
+            count: 0,
+            placed: 0,
+            weight: 0,
+            size: 0
+        });
+        _stack.count++;
+        _stack.weight += stackWeight;
+    }
+    return stacks;
+}
+ function setLayoutDims(layouts, params) {
+    const stacks = buildStacks(layouts);
+    const { vBoxMaxWidth , hBoxMaxHeight  } = params;
+    let i, ilen, layout;
+    for(i = 0, ilen = layouts.length; i < ilen; ++i){
+        layout = layouts[i];
+        const { fullSize  } = layout.box;
+        const stack = stacks[layout.stack];
+        const factor = stack && layout.stackWeight / stack.weight;
+        if (layout.horizontal) {
+            layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;
+            layout.height = hBoxMaxHeight;
+        } else {
+            layout.width = vBoxMaxWidth;
+            layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;
+        }
+    }
+    return stacks;
+}
+function buildLayoutBoxes(boxes) {
+    const layoutBoxes = wrapBoxes(boxes);
+    const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);
+    const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);
+    const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));
+    const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);
+    const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));
+    const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');
+    const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');
+    return {
+        fullSize,
+        leftAndTop: left.concat(top),
+        rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),
+        chartArea: filterByPosition(layoutBoxes, 'chartArea'),
+        vertical: left.concat(right).concat(centerVertical),
+        horizontal: top.concat(bottom).concat(centerHorizontal)
+    };
+}
+function getCombinedMax(maxPadding, chartArea, a, b) {
+    return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);
+}
+function updateMaxPadding(maxPadding, boxPadding) {
+    maxPadding.top = Math.max(maxPadding.top, boxPadding.top);
+    maxPadding.left = Math.max(maxPadding.left, boxPadding.left);
+    maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);
+    maxPadding.right = Math.max(maxPadding.right, boxPadding.right);
+}
+function updateDims(chartArea, params, layout, stacks) {
+    const { pos , box  } = layout;
+    const maxPadding = chartArea.maxPadding;
+    if (!helpers_dataset.isObject(pos)) {
+        if (layout.size) {
+            chartArea[pos] -= layout.size;
+        }
+        const stack = stacks[layout.stack] || {
+            size: 0,
+            count: 1
+        };
+        stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);
+        layout.size = stack.size / stack.count;
+        chartArea[pos] += layout.size;
+    }
+    if (box.getPadding) {
+        updateMaxPadding(maxPadding, box.getPadding());
+    }
+    const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));
+    const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));
+    const widthChanged = newWidth !== chartArea.w;
+    const heightChanged = newHeight !== chartArea.h;
+    chartArea.w = newWidth;
+    chartArea.h = newHeight;
+    return layout.horizontal ? {
+        same: widthChanged,
+        other: heightChanged
+    } : {
+        same: heightChanged,
+        other: widthChanged
+    };
+}
+function handleMaxPadding(chartArea) {
+    const maxPadding = chartArea.maxPadding;
+    function updatePos(pos) {
+        const change = Math.max(maxPadding[pos] - chartArea[pos], 0);
+        chartArea[pos] += change;
+        return change;
+    }
+    chartArea.y += updatePos('top');
+    chartArea.x += updatePos('left');
+    updatePos('right');
+    updatePos('bottom');
+}
+function getMargins(horizontal, chartArea) {
+    const maxPadding = chartArea.maxPadding;
+    function marginForPositions(positions) {
+        const margin = {
+            left: 0,
+            top: 0,
+            right: 0,
+            bottom: 0
+        };
+        positions.forEach((pos)=>{
+            margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);
+        });
+        return margin;
+    }
+    return horizontal ? marginForPositions([
+        'left',
+        'right'
+    ]) : marginForPositions([
+        'top',
+        'bottom'
+    ]);
+}
+function fitBoxes(boxes, chartArea, params, stacks) {
+    const refitBoxes = [];
+    let i, ilen, layout, box, refit, changed;
+    for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){
+        layout = boxes[i];
+        box = layout.box;
+        box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));
+        const { same , other  } = updateDims(chartArea, params, layout, stacks);
+        refit |= same && refitBoxes.length;
+        changed = changed || other;
+        if (!box.fullSize) {
+            refitBoxes.push(layout);
+        }
+    }
+    return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;
+}
+function setBoxDims(box, left, top, width, height) {
+    box.top = top;
+    box.left = left;
+    box.right = left + width;
+    box.bottom = top + height;
+    box.width = width;
+    box.height = height;
+}
+function placeBoxes(boxes, chartArea, params, stacks) {
+    const userPadding = params.padding;
+    let { x , y  } = chartArea;
+    for (const layout of boxes){
+        const box = layout.box;
+        const stack = stacks[layout.stack] || {
+            count: 1,
+            placed: 0,
+            weight: 1
+        };
+        const weight = layout.stackWeight / stack.weight || 1;
+        if (layout.horizontal) {
+            const width = chartArea.w * weight;
+            const height = stack.size || box.height;
+            if (helpers_dataset.defined(stack.start)) {
+                y = stack.start;
+            }
+            if (box.fullSize) {
+                setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);
+            } else {
+                setBoxDims(box, chartArea.left + stack.placed, y, width, height);
+            }
+            stack.start = y;
+            stack.placed += width;
+            y = box.bottom;
+        } else {
+            const height = chartArea.h * weight;
+            const width = stack.size || box.width;
+            if (helpers_dataset.defined(stack.start)) {
+                x = stack.start;
+            }
+            if (box.fullSize) {
+                setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);
+            } else {
+                setBoxDims(box, x, chartArea.top + stack.placed, width, height);
+            }
+            stack.start = x;
+            stack.placed += height;
+            x = box.right;
+        }
+    }
+    chartArea.x = x;
+    chartArea.y = y;
+}
+var layouts = {
+ addBox (chart, item) {
+        if (!chart.boxes) {
+            chart.boxes = [];
+        }
+        item.fullSize = item.fullSize || false;
+        item.position = item.position || 'top';
+        item.weight = item.weight || 0;
+        item._layers = item._layers || function() {
+            return [
+                {
+                    z: 0,
+                    draw (chartArea) {
+                        item.draw(chartArea);
+                    }
+                }
+            ];
+        };
+        chart.boxes.push(item);
+    },
+ removeBox (chart, layoutItem) {
+        const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;
+        if (index !== -1) {
+            chart.boxes.splice(index, 1);
+        }
+    },
+ configure (chart, item, options) {
+        item.fullSize = options.fullSize;
+        item.position = options.position;
+        item.weight = options.weight;
+    },
+ update (chart, width, height, minPadding) {
+        if (!chart) {
+            return;
+        }
+        const padding = helpers_dataset.toPadding(chart.options.layout.padding);
+        const availableWidth = Math.max(width - padding.width, 0);
+        const availableHeight = Math.max(height - padding.height, 0);
+        const boxes = buildLayoutBoxes(chart.boxes);
+        const verticalBoxes = boxes.vertical;
+        const horizontalBoxes = boxes.horizontal;
+        helpers_dataset.each(chart.boxes, (box)=>{
+            if (typeof box.beforeLayout === 'function') {
+                box.beforeLayout();
+            }
+        });
+        const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;
+        const params = Object.freeze({
+            outerWidth: width,
+            outerHeight: height,
+            padding,
+            availableWidth,
+            availableHeight,
+            vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,
+            hBoxMaxHeight: availableHeight / 2
+        });
+        const maxPadding = Object.assign({}, padding);
+        updateMaxPadding(maxPadding, helpers_dataset.toPadding(minPadding));
+        const chartArea = Object.assign({
+            maxPadding,
+            w: availableWidth,
+            h: availableHeight,
+            x: padding.left,
+            y: padding.top
+        }, padding);
+        const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
+        fitBoxes(boxes.fullSize, chartArea, params, stacks);
+        fitBoxes(verticalBoxes, chartArea, params, stacks);
+        if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {
+            fitBoxes(verticalBoxes, chartArea, params, stacks);
+        }
+        handleMaxPadding(chartArea);
+        placeBoxes(boxes.leftAndTop, chartArea, params, stacks);
+        chartArea.x += chartArea.w;
+        chartArea.y += chartArea.h;
+        placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);
+        chart.chartArea = {
+            left: chartArea.left,
+            top: chartArea.top,
+            right: chartArea.left + chartArea.w,
+            bottom: chartArea.top + chartArea.h,
+            height: chartArea.h,
+            width: chartArea.w
+        };
+        helpers_dataset.each(boxes.chartArea, (layout)=>{
+            const box = layout.box;
+            Object.assign(box, chart.chartArea);
+            box.update(chartArea.w, chartArea.h, {
+                left: 0,
+                top: 0,
+                right: 0,
+                bottom: 0
+            });
+        });
+    }
+};
+
+class BasePlatform {
+ acquireContext(canvas, aspectRatio) {}
+ releaseContext(context) {
+        return false;
+    }
+ addEventListener(chart, type, listener) {}
+ removeEventListener(chart, type, listener) {}
+ getDevicePixelRatio() {
+        return 1;
+    }
+ getMaximumSize(element, width, height, aspectRatio) {
+        width = Math.max(0, width || element.width);
+        height = height || element.height;
+        return {
+            width,
+            height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)
+        };
+    }
+ isAttached(canvas) {
+        return true;
+    }
+ updateConfig(config) {
+    }
+}
+
+class BasicPlatform extends BasePlatform {
+    acquireContext(item) {
+        return item && item.getContext && item.getContext('2d') || null;
+    }
+    updateConfig(config) {
+        config.options.animation = false;
+    }
+}
+
+const EXPANDO_KEY = '$chartjs';
+ const EVENT_TYPES = {
+    touchstart: 'mousedown',
+    touchmove: 'mousemove',
+    touchend: 'mouseup',
+    pointerenter: 'mouseenter',
+    pointerdown: 'mousedown',
+    pointermove: 'mousemove',
+    pointerup: 'mouseup',
+    pointerleave: 'mouseout',
+    pointerout: 'mouseout'
+};
+const isNullOrEmpty = (value)=>value === null || value === '';
+ function initCanvas(canvas, aspectRatio) {
+    const style = canvas.style;
+    const renderHeight = canvas.getAttribute('height');
+    const renderWidth = canvas.getAttribute('width');
+    canvas[EXPANDO_KEY] = {
+        initial: {
+            height: renderHeight,
+            width: renderWidth,
+            style: {
+                display: style.display,
+                height: style.height,
+                width: style.width
+            }
+        }
+    };
+    style.display = style.display || 'block';
+    style.boxSizing = style.boxSizing || 'border-box';
+    if (isNullOrEmpty(renderWidth)) {
+        const displayWidth = helpers_dataset.readUsedSize(canvas, 'width');
+        if (displayWidth !== undefined) {
+            canvas.width = displayWidth;
+        }
+    }
+    if (isNullOrEmpty(renderHeight)) {
+        if (canvas.style.height === '') {
+            canvas.height = canvas.width / (aspectRatio || 2);
+        } else {
+            const displayHeight = helpers_dataset.readUsedSize(canvas, 'height');
+            if (displayHeight !== undefined) {
+                canvas.height = displayHeight;
+            }
+        }
+    }
+    return canvas;
+}
+const eventListenerOptions = helpers_dataset.supportsEventListenerOptions ? {
+    passive: true
+} : false;
+function addListener(node, type, listener) {
+    if (node) {
+        node.addEventListener(type, listener, eventListenerOptions);
+    }
+}
+function removeListener(chart, type, listener) {
+    if (chart && chart.canvas) {
+        chart.canvas.removeEventListener(type, listener, eventListenerOptions);
+    }
+}
+function fromNativeEvent(event, chart) {
+    const type = EVENT_TYPES[event.type] || event.type;
+    const { x , y  } = helpers_dataset.getRelativePosition(event, chart);
+    return {
+        type,
+        chart,
+        native: event,
+        x: x !== undefined ? x : null,
+        y: y !== undefined ? y : null
+    };
+}
+function nodeListContains(nodeList, canvas) {
+    for (const node of nodeList){
+        if (node === canvas || node.contains(canvas)) {
+            return true;
+        }
+    }
+}
+function createAttachObserver(chart, type, listener) {
+    const canvas = chart.canvas;
+    const observer = new MutationObserver((entries)=>{
+        let trigger = false;
+        for (const entry of entries){
+            trigger = trigger || nodeListContains(entry.addedNodes, canvas);
+            trigger = trigger && !nodeListContains(entry.removedNodes, canvas);
+        }
+        if (trigger) {
+            listener();
+        }
+    });
+    observer.observe(document, {
+        childList: true,
+        subtree: true
+    });
+    return observer;
+}
+function createDetachObserver(chart, type, listener) {
+    const canvas = chart.canvas;
+    const observer = new MutationObserver((entries)=>{
+        let trigger = false;
+        for (const entry of entries){
+            trigger = trigger || nodeListContains(entry.removedNodes, canvas);
+            trigger = trigger && !nodeListContains(entry.addedNodes, canvas);
+        }
+        if (trigger) {
+            listener();
+        }
+    });
+    observer.observe(document, {
+        childList: true,
+        subtree: true
+    });
+    return observer;
+}
+const drpListeningCharts = new Map();
+let oldDevicePixelRatio = 0;
+function onWindowResize() {
+    const dpr = window.devicePixelRatio;
+    if (dpr === oldDevicePixelRatio) {
+        return;
+    }
+    oldDevicePixelRatio = dpr;
+    drpListeningCharts.forEach((resize, chart)=>{
+        if (chart.currentDevicePixelRatio !== dpr) {
+            resize();
+        }
+    });
+}
+function listenDevicePixelRatioChanges(chart, resize) {
+    if (!drpListeningCharts.size) {
+        window.addEventListener('resize', onWindowResize);
+    }
+    drpListeningCharts.set(chart, resize);
+}
+function unlistenDevicePixelRatioChanges(chart) {
+    drpListeningCharts.delete(chart);
+    if (!drpListeningCharts.size) {
+        window.removeEventListener('resize', onWindowResize);
+    }
+}
+function createResizeObserver(chart, type, listener) {
+    const canvas = chart.canvas;
+    const container = canvas && helpers_dataset._getParentNode(canvas);
+    if (!container) {
+        return;
+    }
+    const resize = helpers_dataset.throttled((width, height)=>{
+        const w = container.clientWidth;
+        listener(width, height);
+        if (w < container.clientWidth) {
+            listener();
+        }
+    }, window);
+    const observer = new ResizeObserver((entries)=>{
+        const entry = entries[0];
+        const width = entry.contentRect.width;
+        const height = entry.contentRect.height;
+        if (width === 0 && height === 0) {
+            return;
+        }
+        resize(width, height);
+    });
+    observer.observe(container);
+    listenDevicePixelRatioChanges(chart, resize);
+    return observer;
+}
+function releaseObserver(chart, type, observer) {
+    if (observer) {
+        observer.disconnect();
+    }
+    if (type === 'resize') {
+        unlistenDevicePixelRatioChanges(chart);
+    }
+}
+function createProxyAndListen(chart, type, listener) {
+    const canvas = chart.canvas;
+    const proxy = helpers_dataset.throttled((event)=>{
+        if (chart.ctx !== null) {
+            listener(fromNativeEvent(event, chart));
+        }
+    }, chart);
+    addListener(canvas, type, proxy);
+    return proxy;
+}
+ class DomPlatform extends BasePlatform {
+ acquireContext(canvas, aspectRatio) {
+        const context = canvas && canvas.getContext && canvas.getContext('2d');
+        if (context && context.canvas === canvas) {
+            initCanvas(canvas, aspectRatio);
+            return context;
+        }
+        return null;
+    }
+ releaseContext(context) {
+        const canvas = context.canvas;
+        if (!canvas[EXPANDO_KEY]) {
+            return false;
+        }
+        const initial = canvas[EXPANDO_KEY].initial;
+        [
+            'height',
+            'width'
+        ].forEach((prop)=>{
+            const value = initial[prop];
+            if (helpers_dataset.isNullOrUndef(value)) {
+                canvas.removeAttribute(prop);
+            } else {
+                canvas.setAttribute(prop, value);
+            }
+        });
+        const style = initial.style || {};
+        Object.keys(style).forEach((key)=>{
+            canvas.style[key] = style[key];
+        });
+        canvas.width = canvas.width;
+        delete canvas[EXPANDO_KEY];
+        return true;
+    }
+ addEventListener(chart, type, listener) {
+        this.removeEventListener(chart, type);
+        const proxies = chart.$proxies || (chart.$proxies = {});
+        const handlers = {
+            attach: createAttachObserver,
+            detach: createDetachObserver,
+            resize: createResizeObserver
+        };
+        const handler = handlers[type] || createProxyAndListen;
+        proxies[type] = handler(chart, type, listener);
+    }
+ removeEventListener(chart, type) {
+        const proxies = chart.$proxies || (chart.$proxies = {});
+        const proxy = proxies[type];
+        if (!proxy) {
+            return;
+        }
+        const handlers = {
+            attach: releaseObserver,
+            detach: releaseObserver,
+            resize: releaseObserver
+        };
+        const handler = handlers[type] || removeListener;
+        handler(chart, type, proxy);
+        proxies[type] = undefined;
+    }
+    getDevicePixelRatio() {
+        return window.devicePixelRatio;
+    }
+ getMaximumSize(canvas, width, height, aspectRatio) {
+        return helpers_dataset.getMaximumSize(canvas, width, height, aspectRatio);
+    }
+ isAttached(canvas) {
+        const container = canvas && helpers_dataset._getParentNode(canvas);
+        return !!(container && container.isConnected);
+    }
+}
+
+function _detectPlatform(canvas) {
+    if (!helpers_dataset._isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {
+        return BasicPlatform;
+    }
+    return DomPlatform;
+}
+
+class Element {
+    static defaults = {};
+    static defaultRoutes = undefined;
+    x;
+    y;
+    active = false;
+    options;
+    $animations;
+    tooltipPosition(useFinalPosition) {
+        const { x , y  } = this.getProps([
+            'x',
+            'y'
+        ], useFinalPosition);
+        return {
+            x,
+            y
+        };
+    }
+    hasValue() {
+        return helpers_dataset.isNumber(this.x) && helpers_dataset.isNumber(this.y);
+    }
+    getProps(props, final) {
+        const anims = this.$animations;
+        if (!final || !anims) {
+            // let's not create an object, if not needed
+            return this;
+        }
+        const ret = {};
+        props.forEach((prop)=>{
+            ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];
+        });
+        return ret;
+    }
+}
+
+function autoSkip(scale, ticks) {
+    const tickOpts = scale.options.ticks;
+    const determinedMaxTicks = determineMaxTicks(scale);
+    const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);
+    const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];
+    const numMajorIndices = majorIndices.length;
+    const first = majorIndices[0];
+    const last = majorIndices[numMajorIndices - 1];
+    const newTicks = [];
+    if (numMajorIndices > ticksLimit) {
+        skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);
+        return newTicks;
+    }
+    const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);
+    if (numMajorIndices > 0) {
+        let i, ilen;
+        const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;
+        skip(ticks, newTicks, spacing, helpers_dataset.isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);
+        for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){
+            skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);
+        }
+        skip(ticks, newTicks, spacing, last, helpers_dataset.isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);
+        return newTicks;
+    }
+    skip(ticks, newTicks, spacing);
+    return newTicks;
+}
+function determineMaxTicks(scale) {
+    const offset = scale.options.offset;
+    const tickLength = scale._tickSize();
+    const maxScale = scale._length / tickLength + (offset ? 0 : 1);
+    const maxChart = scale._maxLength / tickLength;
+    return Math.floor(Math.min(maxScale, maxChart));
+}
+ function calculateSpacing(majorIndices, ticks, ticksLimit) {
+    const evenMajorSpacing = getEvenSpacing(majorIndices);
+    const spacing = ticks.length / ticksLimit;
+    if (!evenMajorSpacing) {
+        return Math.max(spacing, 1);
+    }
+    const factors = helpers_dataset._factorize(evenMajorSpacing);
+    for(let i = 0, ilen = factors.length - 1; i < ilen; i++){
+        const factor = factors[i];
+        if (factor > spacing) {
+            return factor;
+        }
+    }
+    return Math.max(spacing, 1);
+}
+ function getMajorIndices(ticks) {
+    const result = [];
+    let i, ilen;
+    for(i = 0, ilen = ticks.length; i < ilen; i++){
+        if (ticks[i].major) {
+            result.push(i);
+        }
+    }
+    return result;
+}
+ function skipMajors(ticks, newTicks, majorIndices, spacing) {
+    let count = 0;
+    let next = majorIndices[0];
+    let i;
+    spacing = Math.ceil(spacing);
+    for(i = 0; i < ticks.length; i++){
+        if (i === next) {
+            newTicks.push(ticks[i]);
+            count++;
+            next = majorIndices[count * spacing];
+        }
+    }
+}
+ function skip(ticks, newTicks, spacing, majorStart, majorEnd) {
+    const start = helpers_dataset.valueOrDefault(majorStart, 0);
+    const end = Math.min(helpers_dataset.valueOrDefault(majorEnd, ticks.length), ticks.length);
+    let count = 0;
+    let length, i, next;
+    spacing = Math.ceil(spacing);
+    if (majorEnd) {
+        length = majorEnd - majorStart;
+        spacing = length / Math.floor(length / spacing);
+    }
+    next = start;
+    while(next < 0){
+        count++;
+        next = Math.round(start + count * spacing);
+    }
+    for(i = Math.max(start, 0); i < end; i++){
+        if (i === next) {
+            newTicks.push(ticks[i]);
+            count++;
+            next = Math.round(start + count * spacing);
+        }
+    }
+}
+ function getEvenSpacing(arr) {
+    const len = arr.length;
+    let i, diff;
+    if (len < 2) {
+        return false;
+    }
+    for(diff = arr[0], i = 1; i < len; ++i){
+        if (arr[i] - arr[i - 1] !== diff) {
+            return false;
+        }
+    }
+    return diff;
+}
+
+const reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;
+const offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;
+const getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);
+ function sample(arr, numItems) {
+    const result = [];
+    const increment = arr.length / numItems;
+    const len = arr.length;
+    let i = 0;
+    for(; i < len; i += increment){
+        result.push(arr[Math.floor(i)]);
+    }
+    return result;
+}
+ function getPixelForGridLine(scale, index, offsetGridLines) {
+    const length = scale.ticks.length;
+    const validIndex = Math.min(index, length - 1);
+    const start = scale._startPixel;
+    const end = scale._endPixel;
+    const epsilon = 1e-6;
+    let lineValue = scale.getPixelForTick(validIndex);
+    let offset;
+    if (offsetGridLines) {
+        if (length === 1) {
+            offset = Math.max(lineValue - start, end - lineValue);
+        } else if (index === 0) {
+            offset = (scale.getPixelForTick(1) - lineValue) / 2;
+        } else {
+            offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;
+        }
+        lineValue += validIndex < index ? offset : -offset;
+        if (lineValue < start - epsilon || lineValue > end + epsilon) {
+            return;
+        }
+    }
+    return lineValue;
+}
+ function garbageCollect(caches, length) {
+    helpers_dataset.each(caches, (cache)=>{
+        const gc = cache.gc;
+        const gcLen = gc.length / 2;
+        let i;
+        if (gcLen > length) {
+            for(i = 0; i < gcLen; ++i){
+                delete cache.data[gc[i]];
+            }
+            gc.splice(0, gcLen);
+        }
+    });
+}
+ function getTickMarkLength(options) {
+    return options.drawTicks ? options.tickLength : 0;
+}
+ function getTitleHeight(options, fallback) {
+    if (!options.display) {
+        return 0;
+    }
+    const font = helpers_dataset.toFont(options.font, fallback);
+    const padding = helpers_dataset.toPadding(options.padding);
+    const lines = helpers_dataset.isArray(options.text) ? options.text.length : 1;
+    return lines * font.lineHeight + padding.height;
+}
+function createScaleContext(parent, scale) {
+    return helpers_dataset.createContext(parent, {
+        scale,
+        type: 'scale'
+    });
+}
+function createTickContext(parent, index, tick) {
+    return helpers_dataset.createContext(parent, {
+        tick,
+        index,
+        type: 'tick'
+    });
+}
+function titleAlign(align, position, reverse) {
+     let ret = helpers_dataset._toLeftRightCenter(align);
+    if (reverse && position !== 'right' || !reverse && position === 'right') {
+        ret = reverseAlign(ret);
+    }
+    return ret;
+}
+function titleArgs(scale, offset, position, align) {
+    const { top , left , bottom , right , chart  } = scale;
+    const { chartArea , scales  } = chart;
+    let rotation = 0;
+    let maxWidth, titleX, titleY;
+    const height = bottom - top;
+    const width = right - left;
+    if (scale.isHorizontal()) {
+        titleX = helpers_dataset._alignStartEnd(align, left, right);
+        if (helpers_dataset.isObject(position)) {
+            const positionAxisID = Object.keys(position)[0];
+            const value = position[positionAxisID];
+            titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;
+        } else if (position === 'center') {
+            titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;
+        } else {
+            titleY = offsetFromEdge(scale, position, offset);
+        }
+        maxWidth = right - left;
+    } else {
+        if (helpers_dataset.isObject(position)) {
+            const positionAxisID = Object.keys(position)[0];
+            const value = position[positionAxisID];
+            titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;
+        } else if (position === 'center') {
+            titleX = (chartArea.left + chartArea.right) / 2 - width + offset;
+        } else {
+            titleX = offsetFromEdge(scale, position, offset);
+        }
+        titleY = helpers_dataset._alignStartEnd(align, bottom, top);
+        rotation = position === 'left' ? -helpers_dataset.HALF_PI : helpers_dataset.HALF_PI;
+    }
+    return {
+        titleX,
+        titleY,
+        maxWidth,
+        rotation
+    };
+}
+class Scale extends Element {
+    constructor(cfg){
+        super();
+         this.id = cfg.id;
+         this.type = cfg.type;
+         this.options = undefined;
+         this.ctx = cfg.ctx;
+         this.chart = cfg.chart;
+         this.top = undefined;
+         this.bottom = undefined;
+         this.left = undefined;
+         this.right = undefined;
+         this.width = undefined;
+         this.height = undefined;
+        this._margins = {
+            left: 0,
+            right: 0,
+            top: 0,
+            bottom: 0
+        };
+         this.maxWidth = undefined;
+         this.maxHeight = undefined;
+         this.paddingTop = undefined;
+         this.paddingBottom = undefined;
+         this.paddingLeft = undefined;
+         this.paddingRight = undefined;
+         this.axis = undefined;
+         this.labelRotation = undefined;
+        this.min = undefined;
+        this.max = undefined;
+        this._range = undefined;
+         this.ticks = [];
+         this._gridLineItems = null;
+         this._labelItems = null;
+         this._labelSizes = null;
+        this._length = 0;
+        this._maxLength = 0;
+        this._longestTextCache = {};
+         this._startPixel = undefined;
+         this._endPixel = undefined;
+        this._reversePixels = false;
+        this._userMax = undefined;
+        this._userMin = undefined;
+        this._suggestedMax = undefined;
+        this._suggestedMin = undefined;
+        this._ticksLength = 0;
+        this._borderValue = 0;
+        this._cache = {};
+        this._dataLimitsCached = false;
+        this.$context = undefined;
+    }
+ init(options) {
+        this.options = options.setContext(this.getContext());
+        this.axis = options.axis;
+        this._userMin = this.parse(options.min);
+        this._userMax = this.parse(options.max);
+        this._suggestedMin = this.parse(options.suggestedMin);
+        this._suggestedMax = this.parse(options.suggestedMax);
+    }
+ parse(raw, index) {
+        return raw;
+    }
+ getUserBounds() {
+        let { _userMin , _userMax , _suggestedMin , _suggestedMax  } = this;
+        _userMin = helpers_dataset.finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);
+        _userMax = helpers_dataset.finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);
+        _suggestedMin = helpers_dataset.finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);
+        _suggestedMax = helpers_dataset.finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);
+        return {
+            min: helpers_dataset.finiteOrDefault(_userMin, _suggestedMin),
+            max: helpers_dataset.finiteOrDefault(_userMax, _suggestedMax),
+            minDefined: helpers_dataset.isNumberFinite(_userMin),
+            maxDefined: helpers_dataset.isNumberFinite(_userMax)
+        };
+    }
+ getMinMax(canStack) {
+        let { min , max , minDefined , maxDefined  } = this.getUserBounds();
+        let range;
+        if (minDefined && maxDefined) {
+            return {
+                min,
+                max
+            };
+        }
+        const metas = this.getMatchingVisibleMetas();
+        for(let i = 0, ilen = metas.length; i < ilen; ++i){
+            range = metas[i].controller.getMinMax(this, canStack);
+            if (!minDefined) {
+                min = Math.min(min, range.min);
+            }
+            if (!maxDefined) {
+                max = Math.max(max, range.max);
+            }
+        }
+        min = maxDefined && min > max ? max : min;
+        max = minDefined && min > max ? min : max;
+        return {
+            min: helpers_dataset.finiteOrDefault(min, helpers_dataset.finiteOrDefault(max, min)),
+            max: helpers_dataset.finiteOrDefault(max, helpers_dataset.finiteOrDefault(min, max))
+        };
+    }
+ getPadding() {
+        return {
+            left: this.paddingLeft || 0,
+            top: this.paddingTop || 0,
+            right: this.paddingRight || 0,
+            bottom: this.paddingBottom || 0
+        };
+    }
+ getTicks() {
+        return this.ticks;
+    }
+ getLabels() {
+        const data = this.chart.data;
+        return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];
+    }
+ getLabelItems(chartArea = this.chart.chartArea) {
+        const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));
+        return items;
+    }
+    beforeLayout() {
+        this._cache = {};
+        this._dataLimitsCached = false;
+    }
+    beforeUpdate() {
+        helpers_dataset.callback(this.options.beforeUpdate, [
+            this
+        ]);
+    }
+ update(maxWidth, maxHeight, margins) {
+        const { beginAtZero , grace , ticks: tickOpts  } = this.options;
+        const sampleSize = tickOpts.sampleSize;
+        this.beforeUpdate();
+        this.maxWidth = maxWidth;
+        this.maxHeight = maxHeight;
+        this._margins = margins = Object.assign({
+            left: 0,
+            right: 0,
+            top: 0,
+            bottom: 0
+        }, margins);
+        this.ticks = null;
+        this._labelSizes = null;
+        this._gridLineItems = null;
+        this._labelItems = null;
+        this.beforeSetDimensions();
+        this.setDimensions();
+        this.afterSetDimensions();
+        this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;
+        if (!this._dataLimitsCached) {
+            this.beforeDataLimits();
+            this.determineDataLimits();
+            this.afterDataLimits();
+            this._range = helpers_dataset._addGrace(this, grace, beginAtZero);
+            this._dataLimitsCached = true;
+        }
+        this.beforeBuildTicks();
+        this.ticks = this.buildTicks() || [];
+        this.afterBuildTicks();
+        const samplingEnabled = sampleSize < this.ticks.length;
+        this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);
+        this.configure();
+        this.beforeCalculateLabelRotation();
+        this.calculateLabelRotation();
+        this.afterCalculateLabelRotation();
+        if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {
+            this.ticks = autoSkip(this, this.ticks);
+            this._labelSizes = null;
+            this.afterAutoSkip();
+        }
+        if (samplingEnabled) {
+            this._convertTicksToLabels(this.ticks);
+        }
+        this.beforeFit();
+        this.fit();
+        this.afterFit();
+        this.afterUpdate();
+    }
+ configure() {
+        let reversePixels = this.options.reverse;
+        let startPixel, endPixel;
+        if (this.isHorizontal()) {
+            startPixel = this.left;
+            endPixel = this.right;
+        } else {
+            startPixel = this.top;
+            endPixel = this.bottom;
+            reversePixels = !reversePixels;
+        }
+        this._startPixel = startPixel;
+        this._endPixel = endPixel;
+        this._reversePixels = reversePixels;
+        this._length = endPixel - startPixel;
+        this._alignToPixels = this.options.alignToPixels;
+    }
+    afterUpdate() {
+        helpers_dataset.callback(this.options.afterUpdate, [
+            this
+        ]);
+    }
+    beforeSetDimensions() {
+        helpers_dataset.callback(this.options.beforeSetDimensions, [
+            this
+        ]);
+    }
+    setDimensions() {
+        if (this.isHorizontal()) {
+            this.width = this.maxWidth;
+            this.left = 0;
+            this.right = this.width;
+        } else {
+            this.height = this.maxHeight;
+            this.top = 0;
+            this.bottom = this.height;
+        }
+        this.paddingLeft = 0;
+        this.paddingTop = 0;
+        this.paddingRight = 0;
+        this.paddingBottom = 0;
+    }
+    afterSetDimensions() {
+        helpers_dataset.callback(this.options.afterSetDimensions, [
+            this
+        ]);
+    }
+    _callHooks(name) {
+        this.chart.notifyPlugins(name, this.getContext());
+        helpers_dataset.callback(this.options[name], [
+            this
+        ]);
+    }
+    beforeDataLimits() {
+        this._callHooks('beforeDataLimits');
+    }
+    determineDataLimits() {}
+    afterDataLimits() {
+        this._callHooks('afterDataLimits');
+    }
+    beforeBuildTicks() {
+        this._callHooks('beforeBuildTicks');
+    }
+ buildTicks() {
+        return [];
+    }
+    afterBuildTicks() {
+        this._callHooks('afterBuildTicks');
+    }
+    beforeTickToLabelConversion() {
+        helpers_dataset.callback(this.options.beforeTickToLabelConversion, [
+            this
+        ]);
+    }
+ generateTickLabels(ticks) {
+        const tickOpts = this.options.ticks;
+        let i, ilen, tick;
+        for(i = 0, ilen = ticks.length; i < ilen; i++){
+            tick = ticks[i];
+            tick.label = helpers_dataset.callback(tickOpts.callback, [
+                tick.value,
+                i,
+                ticks
+            ], this);
+        }
+    }
+    afterTickToLabelConversion() {
+        helpers_dataset.callback(this.options.afterTickToLabelConversion, [
+            this
+        ]);
+    }
+    beforeCalculateLabelRotation() {
+        helpers_dataset.callback(this.options.beforeCalculateLabelRotation, [
+            this
+        ]);
+    }
+    calculateLabelRotation() {
+        const options = this.options;
+        const tickOpts = options.ticks;
+        const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);
+        const minRotation = tickOpts.minRotation || 0;
+        const maxRotation = tickOpts.maxRotation;
+        let labelRotation = minRotation;
+        let tickWidth, maxHeight, maxLabelDiagonal;
+        if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {
+            this.labelRotation = minRotation;
+            return;
+        }
+        const labelSizes = this._getLabelSizes();
+        const maxLabelWidth = labelSizes.widest.width;
+        const maxLabelHeight = labelSizes.highest.height;
+        const maxWidth = helpers_dataset._limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);
+        tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);
+        if (maxLabelWidth + 6 > tickWidth) {
+            tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));
+            maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);
+            maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);
+            labelRotation = helpers_dataset.toDegrees(Math.min(Math.asin(helpers_dataset._limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(helpers_dataset._limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(helpers_dataset._limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));
+            labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));
+        }
+        this.labelRotation = labelRotation;
+    }
+    afterCalculateLabelRotation() {
+        helpers_dataset.callback(this.options.afterCalculateLabelRotation, [
+            this
+        ]);
+    }
+    afterAutoSkip() {}
+    beforeFit() {
+        helpers_dataset.callback(this.options.beforeFit, [
+            this
+        ]);
+    }
+    fit() {
+        const minSize = {
+            width: 0,
+            height: 0
+        };
+        const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts  }  } = this;
+        const display = this._isVisible();
+        const isHorizontal = this.isHorizontal();
+        if (display) {
+            const titleHeight = getTitleHeight(titleOpts, chart.options.font);
+            if (isHorizontal) {
+                minSize.width = this.maxWidth;
+                minSize.height = getTickMarkLength(gridOpts) + titleHeight;
+            } else {
+                minSize.height = this.maxHeight;
+                minSize.width = getTickMarkLength(gridOpts) + titleHeight;
+            }
+            if (tickOpts.display && this.ticks.length) {
+                const { first , last , widest , highest  } = this._getLabelSizes();
+                const tickPadding = tickOpts.padding * 2;
+                const angleRadians = helpers_dataset.toRadians(this.labelRotation);
+                const cos = Math.cos(angleRadians);
+                const sin = Math.sin(angleRadians);
+                if (isHorizontal) {
+                    const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;
+                    minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);
+                } else {
+                    const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;
+                    minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);
+                }
+                this._calculatePadding(first, last, sin, cos);
+            }
+        }
+        this._handleMargins();
+        if (isHorizontal) {
+            this.width = this._length = chart.width - this._margins.left - this._margins.right;
+            this.height = minSize.height;
+        } else {
+            this.width = minSize.width;
+            this.height = this._length = chart.height - this._margins.top - this._margins.bottom;
+        }
+    }
+    _calculatePadding(first, last, sin, cos) {
+        const { ticks: { align , padding  } , position  } = this.options;
+        const isRotated = this.labelRotation !== 0;
+        const labelsBelowTicks = position !== 'top' && this.axis === 'x';
+        if (this.isHorizontal()) {
+            const offsetLeft = this.getPixelForTick(0) - this.left;
+            const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);
+            let paddingLeft = 0;
+            let paddingRight = 0;
+            if (isRotated) {
+                if (labelsBelowTicks) {
+                    paddingLeft = cos * first.width;
+                    paddingRight = sin * last.height;
+                } else {
+                    paddingLeft = sin * first.height;
+                    paddingRight = cos * last.width;
+                }
+            } else if (align === 'start') {
+                paddingRight = last.width;
+            } else if (align === 'end') {
+                paddingLeft = first.width;
+            } else if (align !== 'inner') {
+                paddingLeft = first.width / 2;
+                paddingRight = last.width / 2;
+            }
+            this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);
+            this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);
+        } else {
+            let paddingTop = last.height / 2;
+            let paddingBottom = first.height / 2;
+            if (align === 'start') {
+                paddingTop = 0;
+                paddingBottom = first.height;
+            } else if (align === 'end') {
+                paddingTop = last.height;
+                paddingBottom = 0;
+            }
+            this.paddingTop = paddingTop + padding;
+            this.paddingBottom = paddingBottom + padding;
+        }
+    }
+ _handleMargins() {
+        if (this._margins) {
+            this._margins.left = Math.max(this.paddingLeft, this._margins.left);
+            this._margins.top = Math.max(this.paddingTop, this._margins.top);
+            this._margins.right = Math.max(this.paddingRight, this._margins.right);
+            this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);
+        }
+    }
+    afterFit() {
+        helpers_dataset.callback(this.options.afterFit, [
+            this
+        ]);
+    }
+ isHorizontal() {
+        const { axis , position  } = this.options;
+        return position === 'top' || position === 'bottom' || axis === 'x';
+    }
+ isFullSize() {
+        return this.options.fullSize;
+    }
+ _convertTicksToLabels(ticks) {
+        this.beforeTickToLabelConversion();
+        this.generateTickLabels(ticks);
+        let i, ilen;
+        for(i = 0, ilen = ticks.length; i < ilen; i++){
+            if (helpers_dataset.isNullOrUndef(ticks[i].label)) {
+                ticks.splice(i, 1);
+                ilen--;
+                i--;
+            }
+        }
+        this.afterTickToLabelConversion();
+    }
+ _getLabelSizes() {
+        let labelSizes = this._labelSizes;
+        if (!labelSizes) {
+            const sampleSize = this.options.ticks.sampleSize;
+            let ticks = this.ticks;
+            if (sampleSize < ticks.length) {
+                ticks = sample(ticks, sampleSize);
+            }
+            this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);
+        }
+        return labelSizes;
+    }
+ _computeLabelSizes(ticks, length, maxTicksLimit) {
+        const { ctx , _longestTextCache: caches  } = this;
+        const widths = [];
+        const heights = [];
+        const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));
+        let widestLabelSize = 0;
+        let highestLabelSize = 0;
+        let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;
+        for(i = 0; i < length; i += increment){
+            label = ticks[i].label;
+            tickFont = this._resolveTickFontOptions(i);
+            ctx.font = fontString = tickFont.string;
+            cache = caches[fontString] = caches[fontString] || {
+                data: {},
+                gc: []
+            };
+            lineHeight = tickFont.lineHeight;
+            width = height = 0;
+            if (!helpers_dataset.isNullOrUndef(label) && !helpers_dataset.isArray(label)) {
+                width = helpers_dataset._measureText(ctx, cache.data, cache.gc, width, label);
+                height = lineHeight;
+            } else if (helpers_dataset.isArray(label)) {
+                for(j = 0, jlen = label.length; j < jlen; ++j){
+                    nestedLabel =  label[j];
+                    if (!helpers_dataset.isNullOrUndef(nestedLabel) && !helpers_dataset.isArray(nestedLabel)) {
+                        width = helpers_dataset._measureText(ctx, cache.data, cache.gc, width, nestedLabel);
+                        height += lineHeight;
+                    }
+                }
+            }
+            widths.push(width);
+            heights.push(height);
+            widestLabelSize = Math.max(width, widestLabelSize);
+            highestLabelSize = Math.max(height, highestLabelSize);
+        }
+        garbageCollect(caches, length);
+        const widest = widths.indexOf(widestLabelSize);
+        const highest = heights.indexOf(highestLabelSize);
+        const valueAt = (idx)=>({
+                width: widths[idx] || 0,
+                height: heights[idx] || 0
+            });
+        return {
+            first: valueAt(0),
+            last: valueAt(length - 1),
+            widest: valueAt(widest),
+            highest: valueAt(highest),
+            widths,
+            heights
+        };
+    }
+ getLabelForValue(value) {
+        return value;
+    }
+ getPixelForValue(value, index) {
+        return NaN;
+    }
+ getValueForPixel(pixel) {}
+ getPixelForTick(index) {
+        const ticks = this.ticks;
+        if (index < 0 || index > ticks.length - 1) {
+            return null;
+        }
+        return this.getPixelForValue(ticks[index].value);
+    }
+ getPixelForDecimal(decimal) {
+        if (this._reversePixels) {
+            decimal = 1 - decimal;
+        }
+        const pixel = this._startPixel + decimal * this._length;
+        return helpers_dataset._int16Range(this._alignToPixels ? helpers_dataset._alignPixel(this.chart, pixel, 0) : pixel);
+    }
+ getDecimalForPixel(pixel) {
+        const decimal = (pixel - this._startPixel) / this._length;
+        return this._reversePixels ? 1 - decimal : decimal;
+    }
+ getBasePixel() {
+        return this.getPixelForValue(this.getBaseValue());
+    }
+ getBaseValue() {
+        const { min , max  } = this;
+        return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;
+    }
+ getContext(index) {
+        const ticks = this.ticks || [];
+        if (index >= 0 && index < ticks.length) {
+            const tick = ticks[index];
+            return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));
+        }
+        return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));
+    }
+ _tickSize() {
+        const optionTicks = this.options.ticks;
+        const rot = helpers_dataset.toRadians(this.labelRotation);
+        const cos = Math.abs(Math.cos(rot));
+        const sin = Math.abs(Math.sin(rot));
+        const labelSizes = this._getLabelSizes();
+        const padding = optionTicks.autoSkipPadding || 0;
+        const w = labelSizes ? labelSizes.widest.width + padding : 0;
+        const h = labelSizes ? labelSizes.highest.height + padding : 0;
+        return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;
+    }
+ _isVisible() {
+        const display = this.options.display;
+        if (display !== 'auto') {
+            return !!display;
+        }
+        return this.getMatchingVisibleMetas().length > 0;
+    }
+ _computeGridLineItems(chartArea) {
+        const axis = this.axis;
+        const chart = this.chart;
+        const options = this.options;
+        const { grid , position , border  } = options;
+        const offset = grid.offset;
+        const isHorizontal = this.isHorizontal();
+        const ticks = this.ticks;
+        const ticksLength = ticks.length + (offset ? 1 : 0);
+        const tl = getTickMarkLength(grid);
+        const items = [];
+        const borderOpts = border.setContext(this.getContext());
+        const axisWidth = borderOpts.display ? borderOpts.width : 0;
+        const axisHalfWidth = axisWidth / 2;
+        const alignBorderValue = function(pixel) {
+            return helpers_dataset._alignPixel(chart, pixel, axisWidth);
+        };
+        let borderValue, i, lineValue, alignedLineValue;
+        let tx1, ty1, tx2, ty2, x1, y1, x2, y2;
+        if (position === 'top') {
+            borderValue = alignBorderValue(this.bottom);
+            ty1 = this.bottom - tl;
+            ty2 = borderValue - axisHalfWidth;
+            y1 = alignBorderValue(chartArea.top) + axisHalfWidth;
+            y2 = chartArea.bottom;
+        } else if (position === 'bottom') {
+            borderValue = alignBorderValue(this.top);
+            y1 = chartArea.top;
+            y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;
+            ty1 = borderValue + axisHalfWidth;
+            ty2 = this.top + tl;
+        } else if (position === 'left') {
+            borderValue = alignBorderValue(this.right);
+            tx1 = this.right - tl;
+            tx2 = borderValue - axisHalfWidth;
+            x1 = alignBorderValue(chartArea.left) + axisHalfWidth;
+            x2 = chartArea.right;
+        } else if (position === 'right') {
+            borderValue = alignBorderValue(this.left);
+            x1 = chartArea.left;
+            x2 = alignBorderValue(chartArea.right) - axisHalfWidth;
+            tx1 = borderValue + axisHalfWidth;
+            tx2 = this.left + tl;
+        } else if (axis === 'x') {
+            if (position === 'center') {
+                borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);
+            } else if (helpers_dataset.isObject(position)) {
+                const positionAxisID = Object.keys(position)[0];
+                const value = position[positionAxisID];
+                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
+            }
+            y1 = chartArea.top;
+            y2 = chartArea.bottom;
+            ty1 = borderValue + axisHalfWidth;
+            ty2 = ty1 + tl;
+        } else if (axis === 'y') {
+            if (position === 'center') {
+                borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);
+            } else if (helpers_dataset.isObject(position)) {
+                const positionAxisID = Object.keys(position)[0];
+                const value = position[positionAxisID];
+                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
+            }
+            tx1 = borderValue - axisHalfWidth;
+            tx2 = tx1 - tl;
+            x1 = chartArea.left;
+            x2 = chartArea.right;
+        }
+        const limit = helpers_dataset.valueOrDefault(options.ticks.maxTicksLimit, ticksLength);
+        const step = Math.max(1, Math.ceil(ticksLength / limit));
+        for(i = 0; i < ticksLength; i += step){
+            const context = this.getContext(i);
+            const optsAtIndex = grid.setContext(context);
+            const optsAtIndexBorder = border.setContext(context);
+            const lineWidth = optsAtIndex.lineWidth;
+            const lineColor = optsAtIndex.color;
+            const borderDash = optsAtIndexBorder.dash || [];
+            const borderDashOffset = optsAtIndexBorder.dashOffset;
+            const tickWidth = optsAtIndex.tickWidth;
+            const tickColor = optsAtIndex.tickColor;
+            const tickBorderDash = optsAtIndex.tickBorderDash || [];
+            const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;
+            lineValue = getPixelForGridLine(this, i, offset);
+            if (lineValue === undefined) {
+                continue;
+            }
+            alignedLineValue = helpers_dataset._alignPixel(chart, lineValue, lineWidth);
+            if (isHorizontal) {
+                tx1 = tx2 = x1 = x2 = alignedLineValue;
+            } else {
+                ty1 = ty2 = y1 = y2 = alignedLineValue;
+            }
+            items.push({
+                tx1,
+                ty1,
+                tx2,
+                ty2,
+                x1,
+                y1,
+                x2,
+                y2,
+                width: lineWidth,
+                color: lineColor,
+                borderDash,
+                borderDashOffset,
+                tickWidth,
+                tickColor,
+                tickBorderDash,
+                tickBorderDashOffset
+            });
+        }
+        this._ticksLength = ticksLength;
+        this._borderValue = borderValue;
+        return items;
+    }
+ _computeLabelItems(chartArea) {
+        const axis = this.axis;
+        const options = this.options;
+        const { position , ticks: optionTicks  } = options;
+        const isHorizontal = this.isHorizontal();
+        const ticks = this.ticks;
+        const { align , crossAlign , padding , mirror  } = optionTicks;
+        const tl = getTickMarkLength(options.grid);
+        const tickAndPadding = tl + padding;
+        const hTickAndPadding = mirror ? -padding : tickAndPadding;
+        const rotation = -helpers_dataset.toRadians(this.labelRotation);
+        const items = [];
+        let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;
+        let textBaseline = 'middle';
+        if (position === 'top') {
+            y = this.bottom - hTickAndPadding;
+            textAlign = this._getXAxisLabelAlignment();
+        } else if (position === 'bottom') {
+            y = this.top + hTickAndPadding;
+            textAlign = this._getXAxisLabelAlignment();
+        } else if (position === 'left') {
+            const ret = this._getYAxisLabelAlignment(tl);
+            textAlign = ret.textAlign;
+            x = ret.x;
+        } else if (position === 'right') {
+            const ret = this._getYAxisLabelAlignment(tl);
+            textAlign = ret.textAlign;
+            x = ret.x;
+        } else if (axis === 'x') {
+            if (position === 'center') {
+                y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;
+            } else if (helpers_dataset.isObject(position)) {
+                const positionAxisID = Object.keys(position)[0];
+                const value = position[positionAxisID];
+                y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;
+            }
+            textAlign = this._getXAxisLabelAlignment();
+        } else if (axis === 'y') {
+            if (position === 'center') {
+                x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;
+            } else if (helpers_dataset.isObject(position)) {
+                const positionAxisID = Object.keys(position)[0];
+                const value = position[positionAxisID];
+                x = this.chart.scales[positionAxisID].getPixelForValue(value);
+            }
+            textAlign = this._getYAxisLabelAlignment(tl).textAlign;
+        }
+        if (axis === 'y') {
+            if (align === 'start') {
+                textBaseline = 'top';
+            } else if (align === 'end') {
+                textBaseline = 'bottom';
+            }
+        }
+        const labelSizes = this._getLabelSizes();
+        for(i = 0, ilen = ticks.length; i < ilen; ++i){
+            tick = ticks[i];
+            label = tick.label;
+            const optsAtIndex = optionTicks.setContext(this.getContext(i));
+            pixel = this.getPixelForTick(i) + optionTicks.labelOffset;
+            font = this._resolveTickFontOptions(i);
+            lineHeight = font.lineHeight;
+            lineCount = helpers_dataset.isArray(label) ? label.length : 1;
+            const halfCount = lineCount / 2;
+            const color = optsAtIndex.color;
+            const strokeColor = optsAtIndex.textStrokeColor;
+            const strokeWidth = optsAtIndex.textStrokeWidth;
+            let tickTextAlign = textAlign;
+            if (isHorizontal) {
+                x = pixel;
+                if (textAlign === 'inner') {
+                    if (i === ilen - 1) {
+                        tickTextAlign = !this.options.reverse ? 'right' : 'left';
+                    } else if (i === 0) {
+                        tickTextAlign = !this.options.reverse ? 'left' : 'right';
+                    } else {
+                        tickTextAlign = 'center';
+                    }
+                }
+                if (position === 'top') {
+                    if (crossAlign === 'near' || rotation !== 0) {
+                        textOffset = -lineCount * lineHeight + lineHeight / 2;
+                    } else if (crossAlign === 'center') {
+                        textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;
+                    } else {
+                        textOffset = -labelSizes.highest.height + lineHeight / 2;
+                    }
+                } else {
+                    if (crossAlign === 'near' || rotation !== 0) {
+                        textOffset = lineHeight / 2;
+                    } else if (crossAlign === 'center') {
+                        textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;
+                    } else {
+                        textOffset = labelSizes.highest.height - lineCount * lineHeight;
+                    }
+                }
+                if (mirror) {
+                    textOffset *= -1;
+                }
+                if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {
+                    x += lineHeight / 2 * Math.sin(rotation);
+                }
+            } else {
+                y = pixel;
+                textOffset = (1 - lineCount) * lineHeight / 2;
+            }
+            let backdrop;
+            if (optsAtIndex.showLabelBackdrop) {
+                const labelPadding = helpers_dataset.toPadding(optsAtIndex.backdropPadding);
+                const height = labelSizes.heights[i];
+                const width = labelSizes.widths[i];
+                let top = textOffset - labelPadding.top;
+                let left = 0 - labelPadding.left;
+                switch(textBaseline){
+                    case 'middle':
+                        top -= height / 2;
+                        break;
+                    case 'bottom':
+                        top -= height;
+                        break;
+                }
+                switch(textAlign){
+                    case 'center':
+                        left -= width / 2;
+                        break;
+                    case 'right':
+                        left -= width;
+                        break;
+                    case 'inner':
+                        if (i === ilen - 1) {
+                            left -= width;
+                        } else if (i > 0) {
+                            left -= width / 2;
+                        }
+                        break;
+                }
+                backdrop = {
+                    left,
+                    top,
+                    width: width + labelPadding.width,
+                    height: height + labelPadding.height,
+                    color: optsAtIndex.backdropColor
+                };
+            }
+            items.push({
+                label,
+                font,
+                textOffset,
+                options: {
+                    rotation,
+                    color,
+                    strokeColor,
+                    strokeWidth,
+                    textAlign: tickTextAlign,
+                    textBaseline,
+                    translation: [
+                        x,
+                        y
+                    ],
+                    backdrop
+                }
+            });
+        }
+        return items;
+    }
+    _getXAxisLabelAlignment() {
+        const { position , ticks  } = this.options;
+        const rotation = -helpers_dataset.toRadians(this.labelRotation);
+        if (rotation) {
+            return position === 'top' ? 'left' : 'right';
+        }
+        let align = 'center';
+        if (ticks.align === 'start') {
+            align = 'left';
+        } else if (ticks.align === 'end') {
+            align = 'right';
+        } else if (ticks.align === 'inner') {
+            align = 'inner';
+        }
+        return align;
+    }
+    _getYAxisLabelAlignment(tl) {
+        const { position , ticks: { crossAlign , mirror , padding  }  } = this.options;
+        const labelSizes = this._getLabelSizes();
+        const tickAndPadding = tl + padding;
+        const widest = labelSizes.widest.width;
+        let textAlign;
+        let x;
+        if (position === 'left') {
+            if (mirror) {
+                x = this.right + padding;
+                if (crossAlign === 'near') {
+                    textAlign = 'left';
+                } else if (crossAlign === 'center') {
+                    textAlign = 'center';
+                    x += widest / 2;
+                } else {
+                    textAlign = 'right';
+                    x += widest;
+                }
+            } else {
+                x = this.right - tickAndPadding;
+                if (crossAlign === 'near') {
+                    textAlign = 'right';
+                } else if (crossAlign === 'center') {
+                    textAlign = 'center';
+                    x -= widest / 2;
+                } else {
+                    textAlign = 'left';
+                    x = this.left;
+                }
+            }
+        } else if (position === 'right') {
+            if (mirror) {
+                x = this.left + padding;
+                if (crossAlign === 'near') {
+                    textAlign = 'right';
+                } else if (crossAlign === 'center') {
+                    textAlign = 'center';
+                    x -= widest / 2;
+                } else {
+                    textAlign = 'left';
+                    x -= widest;
+                }
+            } else {
+                x = this.left + tickAndPadding;
+                if (crossAlign === 'near') {
+                    textAlign = 'left';
+                } else if (crossAlign === 'center') {
+                    textAlign = 'center';
+                    x += widest / 2;
+                } else {
+                    textAlign = 'right';
+                    x = this.right;
+                }
+            }
+        } else {
+            textAlign = 'right';
+        }
+        return {
+            textAlign,
+            x
+        };
+    }
+ _computeLabelArea() {
+        if (this.options.ticks.mirror) {
+            return;
+        }
+        const chart = this.chart;
+        const position = this.options.position;
+        if (position === 'left' || position === 'right') {
+            return {
+                top: 0,
+                left: this.left,
+                bottom: chart.height,
+                right: this.right
+            };
+        }
+        if (position === 'top' || position === 'bottom') {
+            return {
+                top: this.top,
+                left: 0,
+                bottom: this.bottom,
+                right: chart.width
+            };
+        }
+    }
+ drawBackground() {
+        const { ctx , options: { backgroundColor  } , left , top , width , height  } = this;
+        if (backgroundColor) {
+            ctx.save();
+            ctx.fillStyle = backgroundColor;
+            ctx.fillRect(left, top, width, height);
+            ctx.restore();
+        }
+    }
+    getLineWidthForValue(value) {
+        const grid = this.options.grid;
+        if (!this._isVisible() || !grid.display) {
+            return 0;
+        }
+        const ticks = this.ticks;
+        const index = ticks.findIndex((t)=>t.value === value);
+        if (index >= 0) {
+            const opts = grid.setContext(this.getContext(index));
+            return opts.lineWidth;
+        }
+        return 0;
+    }
+ drawGrid(chartArea) {
+        const grid = this.options.grid;
+        const ctx = this.ctx;
+        const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));
+        let i, ilen;
+        const drawLine = (p1, p2, style)=>{
+            if (!style.width || !style.color) {
+                return;
+            }
+            ctx.save();
+            ctx.lineWidth = style.width;
+            ctx.strokeStyle = style.color;
+            ctx.setLineDash(style.borderDash || []);
+            ctx.lineDashOffset = style.borderDashOffset;
+            ctx.beginPath();
+            ctx.moveTo(p1.x, p1.y);
+            ctx.lineTo(p2.x, p2.y);
+            ctx.stroke();
+            ctx.restore();
+        };
+        if (grid.display) {
+            for(i = 0, ilen = items.length; i < ilen; ++i){
+                const item = items[i];
+                if (grid.drawOnChartArea) {
+                    drawLine({
+                        x: item.x1,
+                        y: item.y1
+                    }, {
+                        x: item.x2,
+                        y: item.y2
+                    }, item);
+                }
+                if (grid.drawTicks) {
+                    drawLine({
+                        x: item.tx1,
+                        y: item.ty1
+                    }, {
+                        x: item.tx2,
+                        y: item.ty2
+                    }, {
+                        color: item.tickColor,
+                        width: item.tickWidth,
+                        borderDash: item.tickBorderDash,
+                        borderDashOffset: item.tickBorderDashOffset
+                    });
+                }
+            }
+        }
+    }
+ drawBorder() {
+        const { chart , ctx , options: { border , grid  }  } = this;
+        const borderOpts = border.setContext(this.getContext());
+        const axisWidth = border.display ? borderOpts.width : 0;
+        if (!axisWidth) {
+            return;
+        }
+        const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;
+        const borderValue = this._borderValue;
+        let x1, x2, y1, y2;
+        if (this.isHorizontal()) {
+            x1 = helpers_dataset._alignPixel(chart, this.left, axisWidth) - axisWidth / 2;
+            x2 = helpers_dataset._alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;
+            y1 = y2 = borderValue;
+        } else {
+            y1 = helpers_dataset._alignPixel(chart, this.top, axisWidth) - axisWidth / 2;
+            y2 = helpers_dataset._alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;
+            x1 = x2 = borderValue;
+        }
+        ctx.save();
+        ctx.lineWidth = borderOpts.width;
+        ctx.strokeStyle = borderOpts.color;
+        ctx.beginPath();
+        ctx.moveTo(x1, y1);
+        ctx.lineTo(x2, y2);
+        ctx.stroke();
+        ctx.restore();
+    }
+ drawLabels(chartArea) {
+        const optionTicks = this.options.ticks;
+        if (!optionTicks.display) {
+            return;
+        }
+        const ctx = this.ctx;
+        const area = this._computeLabelArea();
+        if (area) {
+            helpers_dataset.clipArea(ctx, area);
+        }
+        const items = this.getLabelItems(chartArea);
+        for (const item of items){
+            const renderTextOptions = item.options;
+            const tickFont = item.font;
+            const label = item.label;
+            const y = item.textOffset;
+            helpers_dataset.renderText(ctx, label, 0, y, tickFont, renderTextOptions);
+        }
+        if (area) {
+            helpers_dataset.unclipArea(ctx);
+        }
+    }
+ drawTitle() {
+        const { ctx , options: { position , title , reverse  }  } = this;
+        if (!title.display) {
+            return;
+        }
+        const font = helpers_dataset.toFont(title.font);
+        const padding = helpers_dataset.toPadding(title.padding);
+        const align = title.align;
+        let offset = font.lineHeight / 2;
+        if (position === 'bottom' || position === 'center' || helpers_dataset.isObject(position)) {
+            offset += padding.bottom;
+            if (helpers_dataset.isArray(title.text)) {
+                offset += font.lineHeight * (title.text.length - 1);
+            }
+        } else {
+            offset += padding.top;
+        }
+        const { titleX , titleY , maxWidth , rotation  } = titleArgs(this, offset, position, align);
+        helpers_dataset.renderText(ctx, title.text, 0, 0, font, {
+            color: title.color,
+            maxWidth,
+            rotation,
+            textAlign: titleAlign(align, position, reverse),
+            textBaseline: 'middle',
+            translation: [
+                titleX,
+                titleY
+            ]
+        });
+    }
+    draw(chartArea) {
+        if (!this._isVisible()) {
+            return;
+        }
+        this.drawBackground();
+        this.drawGrid(chartArea);
+        this.drawBorder();
+        this.drawTitle();
+        this.drawLabels(chartArea);
+    }
+ _layers() {
+        const opts = this.options;
+        const tz = opts.ticks && opts.ticks.z || 0;
+        const gz = helpers_dataset.valueOrDefault(opts.grid && opts.grid.z, -1);
+        const bz = helpers_dataset.valueOrDefault(opts.border && opts.border.z, 0);
+        if (!this._isVisible() || this.draw !== Scale.prototype.draw) {
+            return [
+                {
+                    z: tz,
+                    draw: (chartArea)=>{
+                        this.draw(chartArea);
+                    }
+                }
+            ];
+        }
+        return [
+            {
+                z: gz,
+                draw: (chartArea)=>{
+                    this.drawBackground();
+                    this.drawGrid(chartArea);
+                    this.drawTitle();
+                }
+            },
+            {
+                z: bz,
+                draw: ()=>{
+                    this.drawBorder();
+                }
+            },
+            {
+                z: tz,
+                draw: (chartArea)=>{
+                    this.drawLabels(chartArea);
+                }
+            }
+        ];
+    }
+ getMatchingVisibleMetas(type) {
+        const metas = this.chart.getSortedVisibleDatasetMetas();
+        const axisID = this.axis + 'AxisID';
+        const result = [];
+        let i, ilen;
+        for(i = 0, ilen = metas.length; i < ilen; ++i){
+            const meta = metas[i];
+            if (meta[axisID] === this.id && (!type || meta.type === type)) {
+                result.push(meta);
+            }
+        }
+        return result;
+    }
+ _resolveTickFontOptions(index) {
+        const opts = this.options.ticks.setContext(this.getContext(index));
+        return helpers_dataset.toFont(opts.font);
+    }
+ _maxDigits() {
+        const fontSize = this._resolveTickFontOptions(0).lineHeight;
+        return (this.isHorizontal() ? this.width : this.height) / fontSize;
+    }
+}
+
+class TypedRegistry {
+    constructor(type, scope, override){
+        this.type = type;
+        this.scope = scope;
+        this.override = override;
+        this.items = Object.create(null);
+    }
+    isForType(type) {
+        return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);
+    }
+ register(item) {
+        const proto = Object.getPrototypeOf(item);
+        let parentScope;
+        if (isIChartComponent(proto)) {
+            parentScope = this.register(proto);
+        }
+        const items = this.items;
+        const id = item.id;
+        const scope = this.scope + '.' + id;
+        if (!id) {
+            throw new Error('class does not have id: ' + item);
+        }
+        if (id in items) {
+            return scope;
+        }
+        items[id] = item;
+        registerDefaults(item, scope, parentScope);
+        if (this.override) {
+            helpers_dataset.defaults.override(item.id, item.overrides);
+        }
+        return scope;
+    }
+ get(id) {
+        return this.items[id];
+    }
+ unregister(item) {
+        const items = this.items;
+        const id = item.id;
+        const scope = this.scope;
+        if (id in items) {
+            delete items[id];
+        }
+        if (scope && id in helpers_dataset.defaults[scope]) {
+            delete helpers_dataset.defaults[scope][id];
+            if (this.override) {
+                delete helpers_dataset.overrides[id];
+            }
+        }
+    }
+}
+function registerDefaults(item, scope, parentScope) {
+    const itemDefaults = helpers_dataset.merge(Object.create(null), [
+        parentScope ? helpers_dataset.defaults.get(parentScope) : {},
+        helpers_dataset.defaults.get(scope),
+        item.defaults
+    ]);
+    helpers_dataset.defaults.set(scope, itemDefaults);
+    if (item.defaultRoutes) {
+        routeDefaults(scope, item.defaultRoutes);
+    }
+    if (item.descriptors) {
+        helpers_dataset.defaults.describe(scope, item.descriptors);
+    }
+}
+function routeDefaults(scope, routes) {
+    Object.keys(routes).forEach((property)=>{
+        const propertyParts = property.split('.');
+        const sourceName = propertyParts.pop();
+        const sourceScope = [
+            scope
+        ].concat(propertyParts).join('.');
+        const parts = routes[property].split('.');
+        const targetName = parts.pop();
+        const targetScope = parts.join('.');
+        helpers_dataset.defaults.route(sourceScope, sourceName, targetScope, targetName);
+    });
+}
+function isIChartComponent(proto) {
+    return 'id' in proto && 'defaults' in proto;
+}
+
+class Registry {
+    constructor(){
+        this.controllers = new TypedRegistry(DatasetController, 'datasets', true);
+        this.elements = new TypedRegistry(Element, 'elements');
+        this.plugins = new TypedRegistry(Object, 'plugins');
+        this.scales = new TypedRegistry(Scale, 'scales');
+        this._typedRegistries = [
+            this.controllers,
+            this.scales,
+            this.elements
+        ];
+    }
+ add(...args) {
+        this._each('register', args);
+    }
+    remove(...args) {
+        this._each('unregister', args);
+    }
+ addControllers(...args) {
+        this._each('register', args, this.controllers);
+    }
+ addElements(...args) {
+        this._each('register', args, this.elements);
+    }
+ addPlugins(...args) {
+        this._each('register', args, this.plugins);
+    }
+ addScales(...args) {
+        this._each('register', args, this.scales);
+    }
+ getController(id) {
+        return this._get(id, this.controllers, 'controller');
+    }
+ getElement(id) {
+        return this._get(id, this.elements, 'element');
+    }
+ getPlugin(id) {
+        return this._get(id, this.plugins, 'plugin');
+    }
+ getScale(id) {
+        return this._get(id, this.scales, 'scale');
+    }
+ removeControllers(...args) {
+        this._each('unregister', args, this.controllers);
+    }
+ removeElements(...args) {
+        this._each('unregister', args, this.elements);
+    }
+ removePlugins(...args) {
+        this._each('unregister', args, this.plugins);
+    }
+ removeScales(...args) {
+        this._each('unregister', args, this.scales);
+    }
+ _each(method, args, typedRegistry) {
+        [
+            ...args
+        ].forEach((arg)=>{
+            const reg = typedRegistry || this._getRegistryForType(arg);
+            if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {
+                this._exec(method, reg, arg);
+            } else {
+                helpers_dataset.each(arg, (item)=>{
+                    const itemReg = typedRegistry || this._getRegistryForType(item);
+                    this._exec(method, itemReg, item);
+                });
+            }
+        });
+    }
+ _exec(method, registry, component) {
+        const camelMethod = helpers_dataset._capitalize(method);
+        helpers_dataset.callback(component['before' + camelMethod], [], component);
+        registry[method](component);
+        helpers_dataset.callback(component['after' + camelMethod], [], component);
+    }
+ _getRegistryForType(type) {
+        for(let i = 0; i < this._typedRegistries.length; i++){
+            const reg = this._typedRegistries[i];
+            if (reg.isForType(type)) {
+                return reg;
+            }
+        }
+        return this.plugins;
+    }
+ _get(id, typedRegistry, type) {
+        const item = typedRegistry.get(id);
+        if (item === undefined) {
+            throw new Error('"' + id + '" is not a registered ' + type + '.');
+        }
+        return item;
+    }
+}
+var registry = /* #__PURE__ */ new Registry();
+
+class PluginService {
+    constructor(){
+        this._init = [];
+    }
+ notify(chart, hook, args, filter) {
+        if (hook === 'beforeInit') {
+            this._init = this._createDescriptors(chart, true);
+            this._notify(this._init, chart, 'install');
+        }
+        const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);
+        const result = this._notify(descriptors, chart, hook, args);
+        if (hook === 'afterDestroy') {
+            this._notify(descriptors, chart, 'stop');
+            this._notify(this._init, chart, 'uninstall');
+        }
+        return result;
+    }
+ _notify(descriptors, chart, hook, args) {
+        args = args || {};
+        for (const descriptor of descriptors){
+            const plugin = descriptor.plugin;
+            const method = plugin[hook];
+            const params = [
+                chart,
+                args,
+                descriptor.options
+            ];
+            if (helpers_dataset.callback(method, params, plugin) === false && args.cancelable) {
+                return false;
+            }
+        }
+        return true;
+    }
+    invalidate() {
+        if (!helpers_dataset.isNullOrUndef(this._cache)) {
+            this._oldCache = this._cache;
+            this._cache = undefined;
+        }
+    }
+ _descriptors(chart) {
+        if (this._cache) {
+            return this._cache;
+        }
+        const descriptors = this._cache = this._createDescriptors(chart);
+        this._notifyStateChanges(chart);
+        return descriptors;
+    }
+    _createDescriptors(chart, all) {
+        const config = chart && chart.config;
+        const options = helpers_dataset.valueOrDefault(config.options && config.options.plugins, {});
+        const plugins = allPlugins(config);
+        return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);
+    }
+ _notifyStateChanges(chart) {
+        const previousDescriptors = this._oldCache || [];
+        const descriptors = this._cache;
+        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));
+        this._notify(diff(previousDescriptors, descriptors), chart, 'stop');
+        this._notify(diff(descriptors, previousDescriptors), chart, 'start');
+    }
+}
+ function allPlugins(config) {
+    const localIds = {};
+    const plugins = [];
+    const keys = Object.keys(registry.plugins.items);
+    for(let i = 0; i < keys.length; i++){
+        plugins.push(registry.getPlugin(keys[i]));
+    }
+    const local = config.plugins || [];
+    for(let i = 0; i < local.length; i++){
+        const plugin = local[i];
+        if (plugins.indexOf(plugin) === -1) {
+            plugins.push(plugin);
+            localIds[plugin.id] = true;
+        }
+    }
+    return {
+        plugins,
+        localIds
+    };
+}
+function getOpts(options, all) {
+    if (!all && options === false) {
+        return null;
+    }
+    if (options === true) {
+        return {};
+    }
+    return options;
+}
+function createDescriptors(chart, { plugins , localIds  }, options, all) {
+    const result = [];
+    const context = chart.getContext();
+    for (const plugin of plugins){
+        const id = plugin.id;
+        const opts = getOpts(options[id], all);
+        if (opts === null) {
+            continue;
+        }
+        result.push({
+            plugin,
+            options: pluginOpts(chart.config, {
+                plugin,
+                local: localIds[id]
+            }, opts, context)
+        });
+    }
+    return result;
+}
+function pluginOpts(config, { plugin , local  }, opts, context) {
+    const keys = config.pluginScopeKeys(plugin);
+    const scopes = config.getOptionScopes(opts, keys);
+    if (local && plugin.defaults) {
+        scopes.push(plugin.defaults);
+    }
+    return config.createResolver(scopes, context, [
+        ''
+    ], {
+        scriptable: false,
+        indexable: false,
+        allKeys: true
+    });
+}
+
+function getIndexAxis(type, options) {
+    const datasetDefaults = helpers_dataset.defaults.datasets[type] || {};
+    const datasetOptions = (options.datasets || {})[type] || {};
+    return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';
+}
+function getAxisFromDefaultScaleID(id, indexAxis) {
+    let axis = id;
+    if (id === '_index_') {
+        axis = indexAxis;
+    } else if (id === '_value_') {
+        axis = indexAxis === 'x' ? 'y' : 'x';
+    }
+    return axis;
+}
+function getDefaultScaleIDFromAxis(axis, indexAxis) {
+    return axis === indexAxis ? '_index_' : '_value_';
+}
+function idMatchesAxis(id) {
+    if (id === 'x' || id === 'y' || id === 'r') {
+        return id;
+    }
+}
+function axisFromPosition(position) {
+    if (position === 'top' || position === 'bottom') {
+        return 'x';
+    }
+    if (position === 'left' || position === 'right') {
+        return 'y';
+    }
+}
+function determineAxis(id, ...scaleOptions) {
+    if (idMatchesAxis(id)) {
+        return id;
+    }
+    for (const opts of scaleOptions){
+        const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());
+        if (axis) {
+            return axis;
+        }
+    }
+    throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);
+}
+function getAxisFromDataset(id, axis, dataset) {
+    if (dataset[axis + 'AxisID'] === id) {
+        return {
+            axis
+        };
+    }
+}
+function retrieveAxisFromDatasets(id, config) {
+    if (config.data && config.data.datasets) {
+        const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);
+        if (boundDs.length) {
+            return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);
+        }
+    }
+    return {};
+}
+function mergeScaleConfig(config, options) {
+    const chartDefaults = helpers_dataset.overrides[config.type] || {
+        scales: {}
+    };
+    const configScales = options.scales || {};
+    const chartIndexAxis = getIndexAxis(config.type, options);
+    const scales = Object.create(null);
+    Object.keys(configScales).forEach((id)=>{
+        const scaleConf = configScales[id];
+        if (!helpers_dataset.isObject(scaleConf)) {
+            return console.error(`Invalid scale configuration for scale: ${id}`);
+        }
+        if (scaleConf._proxy) {
+            return console.warn(`Ignoring resolver passed as options for scale: ${id}`);
+        }
+        const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), helpers_dataset.defaults.scales[scaleConf.type]);
+        const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);
+        const defaultScaleOptions = chartDefaults.scales || {};
+        scales[id] = helpers_dataset.mergeIf(Object.create(null), [
+            {
+                axis
+            },
+            scaleConf,
+            defaultScaleOptions[axis],
+            defaultScaleOptions[defaultId]
+        ]);
+    });
+    config.data.datasets.forEach((dataset)=>{
+        const type = dataset.type || config.type;
+        const indexAxis = dataset.indexAxis || getIndexAxis(type, options);
+        const datasetDefaults = helpers_dataset.overrides[type] || {};
+        const defaultScaleOptions = datasetDefaults.scales || {};
+        Object.keys(defaultScaleOptions).forEach((defaultID)=>{
+            const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);
+            const id = dataset[axis + 'AxisID'] || axis;
+            scales[id] = scales[id] || Object.create(null);
+            helpers_dataset.mergeIf(scales[id], [
+                {
+                    axis
+                },
+                configScales[id],
+                defaultScaleOptions[defaultID]
+            ]);
+        });
+    });
+    Object.keys(scales).forEach((key)=>{
+        const scale = scales[key];
+        helpers_dataset.mergeIf(scale, [
+            helpers_dataset.defaults.scales[scale.type],
+            helpers_dataset.defaults.scale
+        ]);
+    });
+    return scales;
+}
+function initOptions(config) {
+    const options = config.options || (config.options = {});
+    options.plugins = helpers_dataset.valueOrDefault(options.plugins, {});
+    options.scales = mergeScaleConfig(config, options);
+}
+function initData(data) {
+    data = data || {};
+    data.datasets = data.datasets || [];
+    data.labels = data.labels || [];
+    return data;
+}
+function initConfig(config) {
+    config = config || {};
+    config.data = initData(config.data);
+    initOptions(config);
+    return config;
+}
+const keyCache = new Map();
+const keysCached = new Set();
+function cachedKeys(cacheKey, generate) {
+    let keys = keyCache.get(cacheKey);
+    if (!keys) {
+        keys = generate();
+        keyCache.set(cacheKey, keys);
+        keysCached.add(keys);
+    }
+    return keys;
+}
+const addIfFound = (set, obj, key)=>{
+    const opts = helpers_dataset.resolveObjectKey(obj, key);
+    if (opts !== undefined) {
+        set.add(opts);
+    }
+};
+class Config {
+    constructor(config){
+        this._config = initConfig(config);
+        this._scopeCache = new Map();
+        this._resolverCache = new Map();
+    }
+    get platform() {
+        return this._config.platform;
+    }
+    get type() {
+        return this._config.type;
+    }
+    set type(type) {
+        this._config.type = type;
+    }
+    get data() {
+        return this._config.data;
+    }
+    set data(data) {
+        this._config.data = initData(data);
+    }
+    get options() {
+        return this._config.options;
+    }
+    set options(options) {
+        this._config.options = options;
+    }
+    get plugins() {
+        return this._config.plugins;
+    }
+    update() {
+        const config = this._config;
+        this.clearCache();
+        initOptions(config);
+    }
+    clearCache() {
+        this._scopeCache.clear();
+        this._resolverCache.clear();
+    }
+ datasetScopeKeys(datasetType) {
+        return cachedKeys(datasetType, ()=>[
+                [
+                    `datasets.${datasetType}`,
+                    ''
+                ]
+            ]);
+    }
+ datasetAnimationScopeKeys(datasetType, transition) {
+        return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[
+                [
+                    `datasets.${datasetType}.transitions.${transition}`,
+                    `transitions.${transition}`
+                ],
+                [
+                    `datasets.${datasetType}`,
+                    ''
+                ]
+            ]);
+    }
+ datasetElementScopeKeys(datasetType, elementType) {
+        return cachedKeys(`${datasetType}-${elementType}`, ()=>[
+                [
+                    `datasets.${datasetType}.elements.${elementType}`,
+                    `datasets.${datasetType}`,
+                    `elements.${elementType}`,
+                    ''
+                ]
+            ]);
+    }
+ pluginScopeKeys(plugin) {
+        const id = plugin.id;
+        const type = this.type;
+        return cachedKeys(`${type}-plugin-${id}`, ()=>[
+                [
+                    `plugins.${id}`,
+                    ...plugin.additionalOptionScopes || []
+                ]
+            ]);
+    }
+ _cachedScopes(mainScope, resetCache) {
+        const _scopeCache = this._scopeCache;
+        let cache = _scopeCache.get(mainScope);
+        if (!cache || resetCache) {
+            cache = new Map();
+            _scopeCache.set(mainScope, cache);
+        }
+        return cache;
+    }
+ getOptionScopes(mainScope, keyLists, resetCache) {
+        const { options , type  } = this;
+        const cache = this._cachedScopes(mainScope, resetCache);
+        const cached = cache.get(keyLists);
+        if (cached) {
+            return cached;
+        }
+        const scopes = new Set();
+        keyLists.forEach((keys)=>{
+            if (mainScope) {
+                scopes.add(mainScope);
+                keys.forEach((key)=>addIfFound(scopes, mainScope, key));
+            }
+            keys.forEach((key)=>addIfFound(scopes, options, key));
+            keys.forEach((key)=>addIfFound(scopes, helpers_dataset.overrides[type] || {}, key));
+            keys.forEach((key)=>addIfFound(scopes, helpers_dataset.defaults, key));
+            keys.forEach((key)=>addIfFound(scopes, helpers_dataset.descriptors, key));
+        });
+        const array = Array.from(scopes);
+        if (array.length === 0) {
+            array.push(Object.create(null));
+        }
+        if (keysCached.has(keyLists)) {
+            cache.set(keyLists, array);
+        }
+        return array;
+    }
+ chartOptionScopes() {
+        const { options , type  } = this;
+        return [
+            options,
+            helpers_dataset.overrides[type] || {},
+            helpers_dataset.defaults.datasets[type] || {},
+            {
+                type
+            },
+            helpers_dataset.defaults,
+            helpers_dataset.descriptors
+        ];
+    }
+ resolveNamedOptions(scopes, names, context, prefixes = [
+        ''
+    ]) {
+        const result = {
+            $shared: true
+        };
+        const { resolver , subPrefixes  } = getResolver(this._resolverCache, scopes, prefixes);
+        let options = resolver;
+        if (needContext(resolver, names)) {
+            result.$shared = false;
+            context = helpers_dataset.isFunction(context) ? context() : context;
+            const subResolver = this.createResolver(scopes, context, subPrefixes);
+            options = helpers_dataset._attachContext(resolver, context, subResolver);
+        }
+        for (const prop of names){
+            result[prop] = options[prop];
+        }
+        return result;
+    }
+ createResolver(scopes, context, prefixes = [
+        ''
+    ], descriptorDefaults) {
+        const { resolver  } = getResolver(this._resolverCache, scopes, prefixes);
+        return helpers_dataset.isObject(context) ? helpers_dataset._attachContext(resolver, context, undefined, descriptorDefaults) : resolver;
+    }
+}
+function getResolver(resolverCache, scopes, prefixes) {
+    let cache = resolverCache.get(scopes);
+    if (!cache) {
+        cache = new Map();
+        resolverCache.set(scopes, cache);
+    }
+    const cacheKey = prefixes.join();
+    let cached = cache.get(cacheKey);
+    if (!cached) {
+        const resolver = helpers_dataset._createResolver(scopes, prefixes);
+        cached = {
+            resolver,
+            subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))
+        };
+        cache.set(cacheKey, cached);
+    }
+    return cached;
+}
+const hasFunction = (value)=>helpers_dataset.isObject(value) && Object.getOwnPropertyNames(value).some((key)=>helpers_dataset.isFunction(value[key]));
+function needContext(proxy, names) {
+    const { isScriptable , isIndexable  } = helpers_dataset._descriptors(proxy);
+    for (const prop of names){
+        const scriptable = isScriptable(prop);
+        const indexable = isIndexable(prop);
+        const value = (indexable || scriptable) && proxy[prop];
+        if (scriptable && (helpers_dataset.isFunction(value) || hasFunction(value)) || indexable && helpers_dataset.isArray(value)) {
+            return true;
+        }
+    }
+    return false;
+}
+
+var version = "4.5.0";
+
+const KNOWN_POSITIONS = [
+    'top',
+    'bottom',
+    'left',
+    'right',
+    'chartArea'
+];
+function positionIsHorizontal(position, axis) {
+    return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';
+}
+function compare2Level(l1, l2) {
+    return function(a, b) {
+        return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];
+    };
+}
+function onAnimationsComplete(context) {
+    const chart = context.chart;
+    const animationOptions = chart.options.animation;
+    chart.notifyPlugins('afterRender');
+    helpers_dataset.callback(animationOptions && animationOptions.onComplete, [
+        context
+    ], chart);
+}
+function onAnimationProgress(context) {
+    const chart = context.chart;
+    const animationOptions = chart.options.animation;
+    helpers_dataset.callback(animationOptions && animationOptions.onProgress, [
+        context
+    ], chart);
+}
+ function getCanvas(item) {
+    if (helpers_dataset._isDomSupported() && typeof item === 'string') {
+        item = document.getElementById(item);
+    } else if (item && item.length) {
+        item = item[0];
+    }
+    if (item && item.canvas) {
+        item = item.canvas;
+    }
+    return item;
+}
+const instances = {};
+const getChart = (key)=>{
+    const canvas = getCanvas(key);
+    return Object.values(instances).filter((c)=>c.canvas === canvas).pop();
+};
+function moveNumericKeys(obj, start, move) {
+    const keys = Object.keys(obj);
+    for (const key of keys){
+        const intKey = +key;
+        if (intKey >= start) {
+            const value = obj[key];
+            delete obj[key];
+            if (move > 0 || intKey > start) {
+                obj[intKey + move] = value;
+            }
+        }
+    }
+}
+ function determineLastEvent(e, lastEvent, inChartArea, isClick) {
+    if (!inChartArea || e.type === 'mouseout') {
+        return null;
+    }
+    if (isClick) {
+        return lastEvent;
+    }
+    return e;
+}
+class Chart {
+    static defaults = helpers_dataset.defaults;
+    static instances = instances;
+    static overrides = helpers_dataset.overrides;
+    static registry = registry;
+    static version = version;
+    static getChart = getChart;
+    static register(...items) {
+        registry.add(...items);
+        invalidatePlugins();
+    }
+    static unregister(...items) {
+        registry.remove(...items);
+        invalidatePlugins();
+    }
+    constructor(item, userConfig){
+        const config = this.config = new Config(userConfig);
+        const initialCanvas = getCanvas(item);
+        const existingChart = getChart(initialCanvas);
+        if (existingChart) {
+            throw new Error('Canvas is already in use. Chart with ID \'' + existingChart.id + '\'' + ' must be destroyed before the canvas with ID \'' + existingChart.canvas.id + '\' can be reused.');
+        }
+        const options = config.createResolver(config.chartOptionScopes(), this.getContext());
+        this.platform = new (config.platform || _detectPlatform(initialCanvas))();
+        this.platform.updateConfig(config);
+        const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);
+        const canvas = context && context.canvas;
+        const height = canvas && canvas.height;
+        const width = canvas && canvas.width;
+        this.id = helpers_dataset.uid();
+        this.ctx = context;
+        this.canvas = canvas;
+        this.width = width;
+        this.height = height;
+        this._options = options;
+        this._aspectRatio = this.aspectRatio;
+        this._layers = [];
+        this._metasets = [];
+        this._stacks = undefined;
+        this.boxes = [];
+        this.currentDevicePixelRatio = undefined;
+        this.chartArea = undefined;
+        this._active = [];
+        this._lastEvent = undefined;
+        this._listeners = {};
+         this._responsiveListeners = undefined;
+        this._sortedMetasets = [];
+        this.scales = {};
+        this._plugins = new PluginService();
+        this.$proxies = {};
+        this._hiddenIndices = {};
+        this.attached = false;
+        this._animationsDisabled = undefined;
+        this.$context = undefined;
+        this._doResize = helpers_dataset.debounce((mode)=>this.update(mode), options.resizeDelay || 0);
+        this._dataChanges = [];
+        instances[this.id] = this;
+        if (!context || !canvas) {
+            console.error("Failed to create chart: can't acquire context from the given item");
+            return;
+        }
+        animator.listen(this, 'complete', onAnimationsComplete);
+        animator.listen(this, 'progress', onAnimationProgress);
+        this._initialize();
+        if (this.attached) {
+            this.update();
+        }
+    }
+    get aspectRatio() {
+        const { options: { aspectRatio , maintainAspectRatio  } , width , height , _aspectRatio  } = this;
+        if (!helpers_dataset.isNullOrUndef(aspectRatio)) {
+            return aspectRatio;
+        }
+        if (maintainAspectRatio && _aspectRatio) {
+            return _aspectRatio;
+        }
+        return height ? width / height : null;
+    }
+    get data() {
+        return this.config.data;
+    }
+    set data(data) {
+        this.config.data = data;
+    }
+    get options() {
+        return this._options;
+    }
+    set options(options) {
+        this.config.options = options;
+    }
+    get registry() {
+        return registry;
+    }
+ _initialize() {
+        this.notifyPlugins('beforeInit');
+        if (this.options.responsive) {
+            this.resize();
+        } else {
+            helpers_dataset.retinaScale(this, this.options.devicePixelRatio);
+        }
+        this.bindEvents();
+        this.notifyPlugins('afterInit');
+        return this;
+    }
+    clear() {
+        helpers_dataset.clearCanvas(this.canvas, this.ctx);
+        return this;
+    }
+    stop() {
+        animator.stop(this);
+        return this;
+    }
+ resize(width, height) {
+        if (!animator.running(this)) {
+            this._resize(width, height);
+        } else {
+            this._resizeBeforeDraw = {
+                width,
+                height
+            };
+        }
+    }
+    _resize(width, height) {
+        const options = this.options;
+        const canvas = this.canvas;
+        const aspectRatio = options.maintainAspectRatio && this.aspectRatio;
+        const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);
+        const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();
+        const mode = this.width ? 'resize' : 'attach';
+        this.width = newSize.width;
+        this.height = newSize.height;
+        this._aspectRatio = this.aspectRatio;
+        if (!helpers_dataset.retinaScale(this, newRatio, true)) {
+            return;
+        }
+        this.notifyPlugins('resize', {
+            size: newSize
+        });
+        helpers_dataset.callback(options.onResize, [
+            this,
+            newSize
+        ], this);
+        if (this.attached) {
+            if (this._doResize(mode)) {
+                this.render();
+            }
+        }
+    }
+    ensureScalesHaveIDs() {
+        const options = this.options;
+        const scalesOptions = options.scales || {};
+        helpers_dataset.each(scalesOptions, (axisOptions, axisID)=>{
+            axisOptions.id = axisID;
+        });
+    }
+ buildOrUpdateScales() {
+        const options = this.options;
+        const scaleOpts = options.scales;
+        const scales = this.scales;
+        const updated = Object.keys(scales).reduce((obj, id)=>{
+            obj[id] = false;
+            return obj;
+        }, {});
+        let items = [];
+        if (scaleOpts) {
+            items = items.concat(Object.keys(scaleOpts).map((id)=>{
+                const scaleOptions = scaleOpts[id];
+                const axis = determineAxis(id, scaleOptions);
+                const isRadial = axis === 'r';
+                const isHorizontal = axis === 'x';
+                return {
+                    options: scaleOptions,
+                    dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',
+                    dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'
+                };
+            }));
+        }
+        helpers_dataset.each(items, (item)=>{
+            const scaleOptions = item.options;
+            const id = scaleOptions.id;
+            const axis = determineAxis(id, scaleOptions);
+            const scaleType = helpers_dataset.valueOrDefault(scaleOptions.type, item.dtype);
+            if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {
+                scaleOptions.position = item.dposition;
+            }
+            updated[id] = true;
+            let scale = null;
+            if (id in scales && scales[id].type === scaleType) {
+                scale = scales[id];
+            } else {
+                const scaleClass = registry.getScale(scaleType);
+                scale = new scaleClass({
+                    id,
+                    type: scaleType,
+                    ctx: this.ctx,
+                    chart: this
+                });
+                scales[scale.id] = scale;
+            }
+            scale.init(scaleOptions, options);
+        });
+        helpers_dataset.each(updated, (hasUpdated, id)=>{
+            if (!hasUpdated) {
+                delete scales[id];
+            }
+        });
+        helpers_dataset.each(scales, (scale)=>{
+            layouts.configure(this, scale, scale.options);
+            layouts.addBox(this, scale);
+        });
+    }
+ _updateMetasets() {
+        const metasets = this._metasets;
+        const numData = this.data.datasets.length;
+        const numMeta = metasets.length;
+        metasets.sort((a, b)=>a.index - b.index);
+        if (numMeta > numData) {
+            for(let i = numData; i < numMeta; ++i){
+                this._destroyDatasetMeta(i);
+            }
+            metasets.splice(numData, numMeta - numData);
+        }
+        this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));
+    }
+ _removeUnreferencedMetasets() {
+        const { _metasets: metasets , data: { datasets  }  } = this;
+        if (metasets.length > datasets.length) {
+            delete this._stacks;
+        }
+        metasets.forEach((meta, index)=>{
+            if (datasets.filter((x)=>x === meta._dataset).length === 0) {
+                this._destroyDatasetMeta(index);
+            }
+        });
+    }
+    buildOrUpdateControllers() {
+        const newControllers = [];
+        const datasets = this.data.datasets;
+        let i, ilen;
+        this._removeUnreferencedMetasets();
+        for(i = 0, ilen = datasets.length; i < ilen; i++){
+            const dataset = datasets[i];
+            let meta = this.getDatasetMeta(i);
+            const type = dataset.type || this.config.type;
+            if (meta.type && meta.type !== type) {
+                this._destroyDatasetMeta(i);
+                meta = this.getDatasetMeta(i);
+            }
+            meta.type = type;
+            meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);
+            meta.order = dataset.order || 0;
+            meta.index = i;
+            meta.label = '' + dataset.label;
+            meta.visible = this.isDatasetVisible(i);
+            if (meta.controller) {
+                meta.controller.updateIndex(i);
+                meta.controller.linkScales();
+            } else {
+                const ControllerClass = registry.getController(type);
+                const { datasetElementType , dataElementType  } = helpers_dataset.defaults.datasets[type];
+                Object.assign(ControllerClass, {
+                    dataElementType: registry.getElement(dataElementType),
+                    datasetElementType: datasetElementType && registry.getElement(datasetElementType)
+                });
+                meta.controller = new ControllerClass(this, i);
+                newControllers.push(meta.controller);
+            }
+        }
+        this._updateMetasets();
+        return newControllers;
+    }
+ _resetElements() {
+        helpers_dataset.each(this.data.datasets, (dataset, datasetIndex)=>{
+            this.getDatasetMeta(datasetIndex).controller.reset();
+        }, this);
+    }
+ reset() {
+        this._resetElements();
+        this.notifyPlugins('reset');
+    }
+    update(mode) {
+        const config = this.config;
+        config.update();
+        const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());
+        const animsDisabled = this._animationsDisabled = !options.animation;
+        this._updateScales();
+        this._checkEventBindings();
+        this._updateHiddenIndices();
+        this._plugins.invalidate();
+        if (this.notifyPlugins('beforeUpdate', {
+            mode,
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        const newControllers = this.buildOrUpdateControllers();
+        this.notifyPlugins('beforeElementsUpdate');
+        let minPadding = 0;
+        for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){
+            const { controller  } = this.getDatasetMeta(i);
+            const reset = !animsDisabled && newControllers.indexOf(controller) === -1;
+            controller.buildOrUpdateElements(reset);
+            minPadding = Math.max(+controller.getMaxOverflow(), minPadding);
+        }
+        minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;
+        this._updateLayout(minPadding);
+        if (!animsDisabled) {
+            helpers_dataset.each(newControllers, (controller)=>{
+                controller.reset();
+            });
+        }
+        this._updateDatasets(mode);
+        this.notifyPlugins('afterUpdate', {
+            mode
+        });
+        this._layers.sort(compare2Level('z', '_idx'));
+        const { _active , _lastEvent  } = this;
+        if (_lastEvent) {
+            this._eventHandler(_lastEvent, true);
+        } else if (_active.length) {
+            this._updateHoverStyles(_active, _active, true);
+        }
+        this.render();
+    }
+ _updateScales() {
+        helpers_dataset.each(this.scales, (scale)=>{
+            layouts.removeBox(this, scale);
+        });
+        this.ensureScalesHaveIDs();
+        this.buildOrUpdateScales();
+    }
+ _checkEventBindings() {
+        const options = this.options;
+        const existingEvents = new Set(Object.keys(this._listeners));
+        const newEvents = new Set(options.events);
+        if (!helpers_dataset.setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {
+            this.unbindEvents();
+            this.bindEvents();
+        }
+    }
+ _updateHiddenIndices() {
+        const { _hiddenIndices  } = this;
+        const changes = this._getUniformDataChanges() || [];
+        for (const { method , start , count  } of changes){
+            const move = method === '_removeElements' ? -count : count;
+            moveNumericKeys(_hiddenIndices, start, move);
+        }
+    }
+ _getUniformDataChanges() {
+        const _dataChanges = this._dataChanges;
+        if (!_dataChanges || !_dataChanges.length) {
+            return;
+        }
+        this._dataChanges = [];
+        const datasetCount = this.data.datasets.length;
+        const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));
+        const changeSet = makeSet(0);
+        for(let i = 1; i < datasetCount; i++){
+            if (!helpers_dataset.setsEqual(changeSet, makeSet(i))) {
+                return;
+            }
+        }
+        return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({
+                method: a[1],
+                start: +a[2],
+                count: +a[3]
+            }));
+    }
+ _updateLayout(minPadding) {
+        if (this.notifyPlugins('beforeLayout', {
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        layouts.update(this, this.width, this.height, minPadding);
+        const area = this.chartArea;
+        const noArea = area.width <= 0 || area.height <= 0;
+        this._layers = [];
+        helpers_dataset.each(this.boxes, (box)=>{
+            if (noArea && box.position === 'chartArea') {
+                return;
+            }
+            if (box.configure) {
+                box.configure();
+            }
+            this._layers.push(...box._layers());
+        }, this);
+        this._layers.forEach((item, index)=>{
+            item._idx = index;
+        });
+        this.notifyPlugins('afterLayout');
+    }
+ _updateDatasets(mode) {
+        if (this.notifyPlugins('beforeDatasetsUpdate', {
+            mode,
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){
+            this.getDatasetMeta(i).controller.configure();
+        }
+        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){
+            this._updateDataset(i, helpers_dataset.isFunction(mode) ? mode({
+                datasetIndex: i
+            }) : mode);
+        }
+        this.notifyPlugins('afterDatasetsUpdate', {
+            mode
+        });
+    }
+ _updateDataset(index, mode) {
+        const meta = this.getDatasetMeta(index);
+        const args = {
+            meta,
+            index,
+            mode,
+            cancelable: true
+        };
+        if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {
+            return;
+        }
+        meta.controller._update(mode);
+        args.cancelable = false;
+        this.notifyPlugins('afterDatasetUpdate', args);
+    }
+    render() {
+        if (this.notifyPlugins('beforeRender', {
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        if (animator.has(this)) {
+            if (this.attached && !animator.running(this)) {
+                animator.start(this);
+            }
+        } else {
+            this.draw();
+            onAnimationsComplete({
+                chart: this
+            });
+        }
+    }
+    draw() {
+        let i;
+        if (this._resizeBeforeDraw) {
+            const { width , height  } = this._resizeBeforeDraw;
+            this._resizeBeforeDraw = null;
+            this._resize(width, height);
+        }
+        this.clear();
+        if (this.width <= 0 || this.height <= 0) {
+            return;
+        }
+        if (this.notifyPlugins('beforeDraw', {
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        const layers = this._layers;
+        for(i = 0; i < layers.length && layers[i].z <= 0; ++i){
+            layers[i].draw(this.chartArea);
+        }
+        this._drawDatasets();
+        for(; i < layers.length; ++i){
+            layers[i].draw(this.chartArea);
+        }
+        this.notifyPlugins('afterDraw');
+    }
+ _getSortedDatasetMetas(filterVisible) {
+        const metasets = this._sortedMetasets;
+        const result = [];
+        let i, ilen;
+        for(i = 0, ilen = metasets.length; i < ilen; ++i){
+            const meta = metasets[i];
+            if (!filterVisible || meta.visible) {
+                result.push(meta);
+            }
+        }
+        return result;
+    }
+ getSortedVisibleDatasetMetas() {
+        return this._getSortedDatasetMetas(true);
+    }
+ _drawDatasets() {
+        if (this.notifyPlugins('beforeDatasetsDraw', {
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        const metasets = this.getSortedVisibleDatasetMetas();
+        for(let i = metasets.length - 1; i >= 0; --i){
+            this._drawDataset(metasets[i]);
+        }
+        this.notifyPlugins('afterDatasetsDraw');
+    }
+ _drawDataset(meta) {
+        const ctx = this.ctx;
+        const args = {
+            meta,
+            index: meta.index,
+            cancelable: true
+        };
+        const clip = helpers_dataset.getDatasetClipArea(this, meta);
+        if (this.notifyPlugins('beforeDatasetDraw', args) === false) {
+            return;
+        }
+        if (clip) {
+            helpers_dataset.clipArea(ctx, clip);
+        }
+        meta.controller.draw();
+        if (clip) {
+            helpers_dataset.unclipArea(ctx);
+        }
+        args.cancelable = false;
+        this.notifyPlugins('afterDatasetDraw', args);
+    }
+ isPointInArea(point) {
+        return helpers_dataset._isPointInArea(point, this.chartArea, this._minPadding);
+    }
+    getElementsAtEventForMode(e, mode, options, useFinalPosition) {
+        const method = Interaction.modes[mode];
+        if (typeof method === 'function') {
+            return method(this, e, options, useFinalPosition);
+        }
+        return [];
+    }
+    getDatasetMeta(datasetIndex) {
+        const dataset = this.data.datasets[datasetIndex];
+        const metasets = this._metasets;
+        let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();
+        if (!meta) {
+            meta = {
+                type: null,
+                data: [],
+                dataset: null,
+                controller: null,
+                hidden: null,
+                xAxisID: null,
+                yAxisID: null,
+                order: dataset && dataset.order || 0,
+                index: datasetIndex,
+                _dataset: dataset,
+                _parsed: [],
+                _sorted: false
+            };
+            metasets.push(meta);
+        }
+        return meta;
+    }
+    getContext() {
+        return this.$context || (this.$context = helpers_dataset.createContext(null, {
+            chart: this,
+            type: 'chart'
+        }));
+    }
+    getVisibleDatasetCount() {
+        return this.getSortedVisibleDatasetMetas().length;
+    }
+    isDatasetVisible(datasetIndex) {
+        const dataset = this.data.datasets[datasetIndex];
+        if (!dataset) {
+            return false;
+        }
+        const meta = this.getDatasetMeta(datasetIndex);
+        return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;
+    }
+    setDatasetVisibility(datasetIndex, visible) {
+        const meta = this.getDatasetMeta(datasetIndex);
+        meta.hidden = !visible;
+    }
+    toggleDataVisibility(index) {
+        this._hiddenIndices[index] = !this._hiddenIndices[index];
+    }
+    getDataVisibility(index) {
+        return !this._hiddenIndices[index];
+    }
+ _updateVisibility(datasetIndex, dataIndex, visible) {
+        const mode = visible ? 'show' : 'hide';
+        const meta = this.getDatasetMeta(datasetIndex);
+        const anims = meta.controller._resolveAnimations(undefined, mode);
+        if (helpers_dataset.defined(dataIndex)) {
+            meta.data[dataIndex].hidden = !visible;
+            this.update();
+        } else {
+            this.setDatasetVisibility(datasetIndex, visible);
+            anims.update(meta, {
+                visible
+            });
+            this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);
+        }
+    }
+    hide(datasetIndex, dataIndex) {
+        this._updateVisibility(datasetIndex, dataIndex, false);
+    }
+    show(datasetIndex, dataIndex) {
+        this._updateVisibility(datasetIndex, dataIndex, true);
+    }
+ _destroyDatasetMeta(datasetIndex) {
+        const meta = this._metasets[datasetIndex];
+        if (meta && meta.controller) {
+            meta.controller._destroy();
+        }
+        delete this._metasets[datasetIndex];
+    }
+    _stop() {
+        let i, ilen;
+        this.stop();
+        animator.remove(this);
+        for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){
+            this._destroyDatasetMeta(i);
+        }
+    }
+    destroy() {
+        this.notifyPlugins('beforeDestroy');
+        const { canvas , ctx  } = this;
+        this._stop();
+        this.config.clearCache();
+        if (canvas) {
+            this.unbindEvents();
+            helpers_dataset.clearCanvas(canvas, ctx);
+            this.platform.releaseContext(ctx);
+            this.canvas = null;
+            this.ctx = null;
+        }
+        delete instances[this.id];
+        this.notifyPlugins('afterDestroy');
+    }
+    toBase64Image(...args) {
+        return this.canvas.toDataURL(...args);
+    }
+ bindEvents() {
+        this.bindUserEvents();
+        if (this.options.responsive) {
+            this.bindResponsiveEvents();
+        } else {
+            this.attached = true;
+        }
+    }
+ bindUserEvents() {
+        const listeners = this._listeners;
+        const platform = this.platform;
+        const _add = (type, listener)=>{
+            platform.addEventListener(this, type, listener);
+            listeners[type] = listener;
+        };
+        const listener = (e, x, y)=>{
+            e.offsetX = x;
+            e.offsetY = y;
+            this._eventHandler(e);
+        };
+        helpers_dataset.each(this.options.events, (type)=>_add(type, listener));
+    }
+ bindResponsiveEvents() {
+        if (!this._responsiveListeners) {
+            this._responsiveListeners = {};
+        }
+        const listeners = this._responsiveListeners;
+        const platform = this.platform;
+        const _add = (type, listener)=>{
+            platform.addEventListener(this, type, listener);
+            listeners[type] = listener;
+        };
+        const _remove = (type, listener)=>{
+            if (listeners[type]) {
+                platform.removeEventListener(this, type, listener);
+                delete listeners[type];
+            }
+        };
+        const listener = (width, height)=>{
+            if (this.canvas) {
+                this.resize(width, height);
+            }
+        };
+        let detached;
+        const attached = ()=>{
+            _remove('attach', attached);
+            this.attached = true;
+            this.resize();
+            _add('resize', listener);
+            _add('detach', detached);
+        };
+        detached = ()=>{
+            this.attached = false;
+            _remove('resize', listener);
+            this._stop();
+            this._resize(0, 0);
+            _add('attach', attached);
+        };
+        if (platform.isAttached(this.canvas)) {
+            attached();
+        } else {
+            detached();
+        }
+    }
+ unbindEvents() {
+        helpers_dataset.each(this._listeners, (listener, type)=>{
+            this.platform.removeEventListener(this, type, listener);
+        });
+        this._listeners = {};
+        helpers_dataset.each(this._responsiveListeners, (listener, type)=>{
+            this.platform.removeEventListener(this, type, listener);
+        });
+        this._responsiveListeners = undefined;
+    }
+    updateHoverStyle(items, mode, enabled) {
+        const prefix = enabled ? 'set' : 'remove';
+        let meta, item, i, ilen;
+        if (mode === 'dataset') {
+            meta = this.getDatasetMeta(items[0].datasetIndex);
+            meta.controller['_' + prefix + 'DatasetHoverStyle']();
+        }
+        for(i = 0, ilen = items.length; i < ilen; ++i){
+            item = items[i];
+            const controller = item && this.getDatasetMeta(item.datasetIndex).controller;
+            if (controller) {
+                controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);
+            }
+        }
+    }
+ getActiveElements() {
+        return this._active || [];
+    }
+ setActiveElements(activeElements) {
+        const lastActive = this._active || [];
+        const active = activeElements.map(({ datasetIndex , index  })=>{
+            const meta = this.getDatasetMeta(datasetIndex);
+            if (!meta) {
+                throw new Error('No dataset found at index ' + datasetIndex);
+            }
+            return {
+                datasetIndex,
+                element: meta.data[index],
+                index
+            };
+        });
+        const changed = !helpers_dataset._elementsEqual(active, lastActive);
+        if (changed) {
+            this._active = active;
+            this._lastEvent = null;
+            this._updateHoverStyles(active, lastActive);
+        }
+    }
+ notifyPlugins(hook, args, filter) {
+        return this._plugins.notify(this, hook, args, filter);
+    }
+ isPluginEnabled(pluginId) {
+        return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;
+    }
+ _updateHoverStyles(active, lastActive, replay) {
+        const hoverOptions = this.options.hover;
+        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));
+        const deactivated = diff(lastActive, active);
+        const activated = replay ? active : diff(active, lastActive);
+        if (deactivated.length) {
+            this.updateHoverStyle(deactivated, hoverOptions.mode, false);
+        }
+        if (activated.length && hoverOptions.mode) {
+            this.updateHoverStyle(activated, hoverOptions.mode, true);
+        }
+    }
+ _eventHandler(e, replay) {
+        const args = {
+            event: e,
+            replay,
+            cancelable: true,
+            inChartArea: this.isPointInArea(e)
+        };
+        const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);
+        if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {
+            return;
+        }
+        const changed = this._handleEvent(e, replay, args.inChartArea);
+        args.cancelable = false;
+        this.notifyPlugins('afterEvent', args, eventFilter);
+        if (changed || args.changed) {
+            this.render();
+        }
+        return this;
+    }
+ _handleEvent(e, replay, inChartArea) {
+        const { _active: lastActive = [] , options  } = this;
+        const useFinalPosition = replay;
+        const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);
+        const isClick = helpers_dataset._isClickEvent(e);
+        const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);
+        if (inChartArea) {
+            this._lastEvent = null;
+            helpers_dataset.callback(options.onHover, [
+                e,
+                active,
+                this
+            ], this);
+            if (isClick) {
+                helpers_dataset.callback(options.onClick, [
+                    e,
+                    active,
+                    this
+                ], this);
+            }
+        }
+        const changed = !helpers_dataset._elementsEqual(active, lastActive);
+        if (changed || replay) {
+            this._active = active;
+            this._updateHoverStyles(active, lastActive, replay);
+        }
+        this._lastEvent = lastEvent;
+        return changed;
+    }
+ _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {
+        if (e.type === 'mouseout') {
+            return [];
+        }
+        if (!inChartArea) {
+            return lastActive;
+        }
+        const hoverOptions = this.options.hover;
+        return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);
+    }
+}
+function invalidatePlugins() {
+    return helpers_dataset.each(Chart.instances, (chart)=>chart._plugins.invalidate());
+}
+
+function clipSelf(ctx, element, endAngle) {
+    const { startAngle , x , y , outerRadius , innerRadius , options  } = element;
+    const { borderWidth , borderJoinStyle  } = options;
+    const outerAngleClip = Math.min(borderWidth / outerRadius, helpers_dataset._normalizeAngle(startAngle - endAngle));
+    ctx.beginPath();
+    ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);
+    if (innerRadius > 0) {
+        const innerAngleClip = Math.min(borderWidth / innerRadius, helpers_dataset._normalizeAngle(startAngle - endAngle));
+        ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);
+    } else {
+        const clipWidth = Math.min(borderWidth / 2, outerRadius * helpers_dataset._normalizeAngle(startAngle - endAngle));
+        if (borderJoinStyle === 'round') {
+            ctx.arc(x, y, clipWidth, endAngle - helpers_dataset.PI / 2, startAngle + helpers_dataset.PI / 2, true);
+        } else if (borderJoinStyle === 'bevel') {
+            const r = 2 * clipWidth * clipWidth;
+            const endX = -r * Math.cos(endAngle + helpers_dataset.PI / 2) + x;
+            const endY = -r * Math.sin(endAngle + helpers_dataset.PI / 2) + y;
+            const startX = r * Math.cos(startAngle + helpers_dataset.PI / 2) + x;
+            const startY = r * Math.sin(startAngle + helpers_dataset.PI / 2) + y;
+            ctx.lineTo(endX, endY);
+            ctx.lineTo(startX, startY);
+        }
+    }
+    ctx.closePath();
+    ctx.moveTo(0, 0);
+    ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
+    ctx.clip('evenodd');
+}
+function clipArc(ctx, element, endAngle) {
+    const { startAngle , pixelMargin , x , y , outerRadius , innerRadius  } = element;
+    let angleMargin = pixelMargin / outerRadius;
+    // Draw an inner border by clipping the arc and drawing a double-width border
+    // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders
+    ctx.beginPath();
+    ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);
+    if (innerRadius > pixelMargin) {
+        angleMargin = pixelMargin / innerRadius;
+        ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);
+    } else {
+        ctx.arc(x, y, pixelMargin, endAngle + helpers_dataset.HALF_PI, startAngle - helpers_dataset.HALF_PI);
+    }
+    ctx.closePath();
+    ctx.clip();
+}
+function toRadiusCorners(value) {
+    return helpers_dataset._readValueToProps(value, [
+        'outerStart',
+        'outerEnd',
+        'innerStart',
+        'innerEnd'
+    ]);
+}
+/**
+ * Parse border radius from the provided options
+ */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {
+    const o = toRadiusCorners(arc.options.borderRadius);
+    const halfThickness = (outerRadius - innerRadius) / 2;
+    const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);
+    // Outer limits are complicated. We want to compute the available angular distance at
+    // a radius of outerRadius - borderRadius because for small angular distances, this term limits.
+    // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.
+    //
+    // If the borderRadius is large, that value can become negative.
+    // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius
+    // we know that the thickness term will dominate and compute the limits at that point
+    const computeOuterLimit = (val)=>{
+        const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;
+        return helpers_dataset._limitValue(val, 0, Math.min(halfThickness, outerArcLimit));
+    };
+    return {
+        outerStart: computeOuterLimit(o.outerStart),
+        outerEnd: computeOuterLimit(o.outerEnd),
+        innerStart: helpers_dataset._limitValue(o.innerStart, 0, innerLimit),
+        innerEnd: helpers_dataset._limitValue(o.innerEnd, 0, innerLimit)
+    };
+}
+/**
+ * Convert (r, 𝜃) to (x, y)
+ */ function rThetaToXY(r, theta, x, y) {
+    return {
+        x: x + r * Math.cos(theta),
+        y: y + r * Math.sin(theta)
+    };
+}
+/**
+ * Path the arc, respecting border radius by separating into left and right halves.
+ *
+ *   Start      End
+ *
+ *    1--->a--->2    Outer
+ *   /           \
+ *   8           3
+ *   |           |
+ *   |           |
+ *   7           4
+ *   \           /
+ *    6<---b<---5    Inner
+ */ function pathArc(ctx, element, offset, spacing, end, circular) {
+    const { x , y , startAngle: start , pixelMargin , innerRadius: innerR  } = element;
+    const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);
+    const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;
+    let spacingOffset = 0;
+    const alpha = end - start;
+    if (spacing) {
+        // When spacing is present, it is the same for all items
+        // So we adjust the start and end angle of the arc such that
+        // the distance is the same as it would be without the spacing
+        const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;
+        const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;
+        const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;
+        const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;
+        spacingOffset = (alpha - adjustedAngle) / 2;
+    }
+    const beta = Math.max(0.001, alpha * outerRadius - offset / helpers_dataset.PI) / outerRadius;
+    const angleOffset = (alpha - beta) / 2;
+    const startAngle = start + angleOffset + spacingOffset;
+    const endAngle = end - angleOffset - spacingOffset;
+    const { outerStart , outerEnd , innerStart , innerEnd  } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);
+    const outerStartAdjustedRadius = outerRadius - outerStart;
+    const outerEndAdjustedRadius = outerRadius - outerEnd;
+    const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;
+    const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;
+    const innerStartAdjustedRadius = innerRadius + innerStart;
+    const innerEndAdjustedRadius = innerRadius + innerEnd;
+    const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;
+    const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;
+    ctx.beginPath();
+    if (circular) {
+        // The first arc segments from point 1 to point a to point 2
+        const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;
+        ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);
+        ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);
+        // The corner segment from point 2 to point 3
+        if (outerEnd > 0) {
+            const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);
+            ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + helpers_dataset.HALF_PI);
+        }
+        // The line from point 3 to point 4
+        const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);
+        ctx.lineTo(p4.x, p4.y);
+        // The corner segment from point 4 to point 5
+        if (innerEnd > 0) {
+            const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
+            ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + helpers_dataset.HALF_PI, innerEndAdjustedAngle + Math.PI);
+        }
+        // The inner arc from point 5 to point b to point 6
+        const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;
+        ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);
+        ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);
+        // The corner segment from point 6 to point 7
+        if (innerStart > 0) {
+            const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
+            ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - helpers_dataset.HALF_PI);
+        }
+        // The line from point 7 to point 8
+        const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);
+        ctx.lineTo(p8.x, p8.y);
+        // The corner segment from point 8 to point 1
+        if (outerStart > 0) {
+            const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
+            ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - helpers_dataset.HALF_PI, outerStartAdjustedAngle);
+        }
+    } else {
+        ctx.moveTo(x, y);
+        const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;
+        const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;
+        ctx.lineTo(outerStartX, outerStartY);
+        const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;
+        const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;
+        ctx.lineTo(outerEndX, outerEndY);
+    }
+    ctx.closePath();
+}
+function drawArc(ctx, element, offset, spacing, circular) {
+    const { fullCircles , startAngle , circumference  } = element;
+    let endAngle = element.endAngle;
+    if (fullCircles) {
+        pathArc(ctx, element, offset, spacing, endAngle, circular);
+        for(let i = 0; i < fullCircles; ++i){
+            ctx.fill();
+        }
+        if (!isNaN(circumference)) {
+            endAngle = startAngle + (circumference % helpers_dataset.TAU || helpers_dataset.TAU);
+        }
+    }
+    pathArc(ctx, element, offset, spacing, endAngle, circular);
+    ctx.fill();
+    return endAngle;
+}
+function drawBorder(ctx, element, offset, spacing, circular) {
+    const { fullCircles , startAngle , circumference , options  } = element;
+    const { borderWidth , borderJoinStyle , borderDash , borderDashOffset , borderRadius  } = options;
+    const inner = options.borderAlign === 'inner';
+    if (!borderWidth) {
+        return;
+    }
+    ctx.setLineDash(borderDash || []);
+    ctx.lineDashOffset = borderDashOffset;
+    if (inner) {
+        ctx.lineWidth = borderWidth * 2;
+        ctx.lineJoin = borderJoinStyle || 'round';
+    } else {
+        ctx.lineWidth = borderWidth;
+        ctx.lineJoin = borderJoinStyle || 'bevel';
+    }
+    let endAngle = element.endAngle;
+    if (fullCircles) {
+        pathArc(ctx, element, offset, spacing, endAngle, circular);
+        for(let i = 0; i < fullCircles; ++i){
+            ctx.stroke();
+        }
+        if (!isNaN(circumference)) {
+            endAngle = startAngle + (circumference % helpers_dataset.TAU || helpers_dataset.TAU);
+        }
+    }
+    if (inner) {
+        clipArc(ctx, element, endAngle);
+    }
+    if (options.selfJoin && endAngle - startAngle >= helpers_dataset.PI && borderRadius === 0 && borderJoinStyle !== 'miter') {
+        clipSelf(ctx, element, endAngle);
+    }
+    if (!fullCircles) {
+        pathArc(ctx, element, offset, spacing, endAngle, circular);
+        ctx.stroke();
+    }
+}
+class ArcElement extends Element {
+    static id = 'arc';
+    static defaults = {
+        borderAlign: 'center',
+        borderColor: '#fff',
+        borderDash: [],
+        borderDashOffset: 0,
+        borderJoinStyle: undefined,
+        borderRadius: 0,
+        borderWidth: 2,
+        offset: 0,
+        spacing: 0,
+        angle: undefined,
+        circular: true,
+        selfJoin: false
+    };
+    static defaultRoutes = {
+        backgroundColor: 'backgroundColor'
+    };
+    static descriptors = {
+        _scriptable: true,
+        _indexable: (name)=>name !== 'borderDash'
+    };
+    circumference;
+    endAngle;
+    fullCircles;
+    innerRadius;
+    outerRadius;
+    pixelMargin;
+    startAngle;
+    constructor(cfg){
+        super();
+        this.options = undefined;
+        this.circumference = undefined;
+        this.startAngle = undefined;
+        this.endAngle = undefined;
+        this.innerRadius = undefined;
+        this.outerRadius = undefined;
+        this.pixelMargin = 0;
+        this.fullCircles = 0;
+        if (cfg) {
+            Object.assign(this, cfg);
+        }
+    }
+    inRange(chartX, chartY, useFinalPosition) {
+        const point = this.getProps([
+            'x',
+            'y'
+        ], useFinalPosition);
+        const { angle , distance  } = helpers_dataset.getAngleFromPoint(point, {
+            x: chartX,
+            y: chartY
+        });
+        const { startAngle , endAngle , innerRadius , outerRadius , circumference  } = this.getProps([
+            'startAngle',
+            'endAngle',
+            'innerRadius',
+            'outerRadius',
+            'circumference'
+        ], useFinalPosition);
+        const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;
+        const _circumference = helpers_dataset.valueOrDefault(circumference, endAngle - startAngle);
+        const nonZeroBetween = helpers_dataset._angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;
+        const betweenAngles = _circumference >= helpers_dataset.TAU || nonZeroBetween;
+        const withinRadius = helpers_dataset._isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);
+        return betweenAngles && withinRadius;
+    }
+    getCenterPoint(useFinalPosition) {
+        const { x , y , startAngle , endAngle , innerRadius , outerRadius  } = this.getProps([
+            'x',
+            'y',
+            'startAngle',
+            'endAngle',
+            'innerRadius',
+            'outerRadius'
+        ], useFinalPosition);
+        const { offset , spacing  } = this.options;
+        const halfAngle = (startAngle + endAngle) / 2;
+        const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;
+        return {
+            x: x + Math.cos(halfAngle) * halfRadius,
+            y: y + Math.sin(halfAngle) * halfRadius
+        };
+    }
+    tooltipPosition(useFinalPosition) {
+        return this.getCenterPoint(useFinalPosition);
+    }
+    draw(ctx) {
+        const { options , circumference  } = this;
+        const offset = (options.offset || 0) / 4;
+        const spacing = (options.spacing || 0) / 2;
+        const circular = options.circular;
+        this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;
+        this.fullCircles = circumference > helpers_dataset.TAU ? Math.floor(circumference / helpers_dataset.TAU) : 0;
+        if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {
+            return;
+        }
+        ctx.save();
+        const halfAngle = (this.startAngle + this.endAngle) / 2;
+        ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);
+        const fix = 1 - Math.sin(Math.min(helpers_dataset.PI, circumference || 0));
+        const radiusOffset = offset * fix;
+        ctx.fillStyle = options.backgroundColor;
+        ctx.strokeStyle = options.borderColor;
+        drawArc(ctx, this, radiusOffset, spacing, circular);
+        drawBorder(ctx, this, radiusOffset, spacing, circular);
+        ctx.restore();
+    }
+}
+
+function setStyle(ctx, options, style = options) {
+    ctx.lineCap = helpers_dataset.valueOrDefault(style.borderCapStyle, options.borderCapStyle);
+    ctx.setLineDash(helpers_dataset.valueOrDefault(style.borderDash, options.borderDash));
+    ctx.lineDashOffset = helpers_dataset.valueOrDefault(style.borderDashOffset, options.borderDashOffset);
+    ctx.lineJoin = helpers_dataset.valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);
+    ctx.lineWidth = helpers_dataset.valueOrDefault(style.borderWidth, options.borderWidth);
+    ctx.strokeStyle = helpers_dataset.valueOrDefault(style.borderColor, options.borderColor);
+}
+function lineTo(ctx, previous, target) {
+    ctx.lineTo(target.x, target.y);
+}
+ function getLineMethod(options) {
+    if (options.stepped) {
+        return helpers_dataset._steppedLineTo;
+    }
+    if (options.tension || options.cubicInterpolationMode === 'monotone') {
+        return helpers_dataset._bezierCurveTo;
+    }
+    return lineTo;
+}
+function pathVars(points, segment, params = {}) {
+    const count = points.length;
+    const { start: paramsStart = 0 , end: paramsEnd = count - 1  } = params;
+    const { start: segmentStart , end: segmentEnd  } = segment;
+    const start = Math.max(paramsStart, segmentStart);
+    const end = Math.min(paramsEnd, segmentEnd);
+    const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;
+    return {
+        count,
+        start,
+        loop: segment.loop,
+        ilen: end < start && !outside ? count + end - start : end - start
+    };
+}
+ function pathSegment(ctx, line, segment, params) {
+    const { points , options  } = line;
+    const { count , start , loop , ilen  } = pathVars(points, segment, params);
+    const lineMethod = getLineMethod(options);
+    let { move =true , reverse  } = params || {};
+    let i, point, prev;
+    for(i = 0; i <= ilen; ++i){
+        point = points[(start + (reverse ? ilen - i : i)) % count];
+        if (point.skip) {
+            continue;
+        } else if (move) {
+            ctx.moveTo(point.x, point.y);
+            move = false;
+        } else {
+            lineMethod(ctx, prev, point, reverse, options.stepped);
+        }
+        prev = point;
+    }
+    if (loop) {
+        point = points[(start + (reverse ? ilen : 0)) % count];
+        lineMethod(ctx, prev, point, reverse, options.stepped);
+    }
+    return !!loop;
+}
+ function fastPathSegment(ctx, line, segment, params) {
+    const points = line.points;
+    const { count , start , ilen  } = pathVars(points, segment, params);
+    const { move =true , reverse  } = params || {};
+    let avgX = 0;
+    let countX = 0;
+    let i, point, prevX, minY, maxY, lastY;
+    const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;
+    const drawX = ()=>{
+        if (minY !== maxY) {
+            ctx.lineTo(avgX, maxY);
+            ctx.lineTo(avgX, minY);
+            ctx.lineTo(avgX, lastY);
+        }
+    };
+    if (move) {
+        point = points[pointIndex(0)];
+        ctx.moveTo(point.x, point.y);
+    }
+    for(i = 0; i <= ilen; ++i){
+        point = points[pointIndex(i)];
+        if (point.skip) {
+            continue;
+        }
+        const x = point.x;
+        const y = point.y;
+        const truncX = x | 0;
+        if (truncX === prevX) {
+            if (y < minY) {
+                minY = y;
+            } else if (y > maxY) {
+                maxY = y;
+            }
+            avgX = (countX * avgX + x) / ++countX;
+        } else {
+            drawX();
+            ctx.lineTo(x, y);
+            prevX = truncX;
+            countX = 0;
+            minY = maxY = y;
+        }
+        lastY = y;
+    }
+    drawX();
+}
+ function _getSegmentMethod(line) {
+    const opts = line.options;
+    const borderDash = opts.borderDash && opts.borderDash.length;
+    const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;
+    return useFastPath ? fastPathSegment : pathSegment;
+}
+ function _getInterpolationMethod(options) {
+    if (options.stepped) {
+        return helpers_dataset._steppedInterpolation;
+    }
+    if (options.tension || options.cubicInterpolationMode === 'monotone') {
+        return helpers_dataset._bezierInterpolation;
+    }
+    return helpers_dataset._pointInLine;
+}
+function strokePathWithCache(ctx, line, start, count) {
+    let path = line._path;
+    if (!path) {
+        path = line._path = new Path2D();
+        if (line.path(path, start, count)) {
+            path.closePath();
+        }
+    }
+    setStyle(ctx, line.options);
+    ctx.stroke(path);
+}
+function strokePathDirect(ctx, line, start, count) {
+    const { segments , options  } = line;
+    const segmentMethod = _getSegmentMethod(line);
+    for (const segment of segments){
+        setStyle(ctx, options, segment.style);
+        ctx.beginPath();
+        if (segmentMethod(ctx, line, segment, {
+            start,
+            end: start + count - 1
+        })) {
+            ctx.closePath();
+        }
+        ctx.stroke();
+    }
+}
+const usePath2D = typeof Path2D === 'function';
+function draw(ctx, line, start, count) {
+    if (usePath2D && !line.options.segment) {
+        strokePathWithCache(ctx, line, start, count);
+    } else {
+        strokePathDirect(ctx, line, start, count);
+    }
+}
+class LineElement extends Element {
+    static id = 'line';
+ static defaults = {
+        borderCapStyle: 'butt',
+        borderDash: [],
+        borderDashOffset: 0,
+        borderJoinStyle: 'miter',
+        borderWidth: 3,
+        capBezierPoints: true,
+        cubicInterpolationMode: 'default',
+        fill: false,
+        spanGaps: false,
+        stepped: false,
+        tension: 0
+    };
+ static defaultRoutes = {
+        backgroundColor: 'backgroundColor',
+        borderColor: 'borderColor'
+    };
+    static descriptors = {
+        _scriptable: true,
+        _indexable: (name)=>name !== 'borderDash' && name !== 'fill'
+    };
+    constructor(cfg){
+        super();
+        this.animated = true;
+        this.options = undefined;
+        this._chart = undefined;
+        this._loop = undefined;
+        this._fullLoop = undefined;
+        this._path = undefined;
+        this._points = undefined;
+        this._segments = undefined;
+        this._decimated = false;
+        this._pointsUpdated = false;
+        this._datasetIndex = undefined;
+        if (cfg) {
+            Object.assign(this, cfg);
+        }
+    }
+    updateControlPoints(chartArea, indexAxis) {
+        const options = this.options;
+        if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {
+            const loop = options.spanGaps ? this._loop : this._fullLoop;
+            helpers_dataset._updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);
+            this._pointsUpdated = true;
+        }
+    }
+    set points(points) {
+        this._points = points;
+        delete this._segments;
+        delete this._path;
+        this._pointsUpdated = false;
+    }
+    get points() {
+        return this._points;
+    }
+    get segments() {
+        return this._segments || (this._segments = helpers_dataset._computeSegments(this, this.options.segment));
+    }
+ first() {
+        const segments = this.segments;
+        const points = this.points;
+        return segments.length && points[segments[0].start];
+    }
+ last() {
+        const segments = this.segments;
+        const points = this.points;
+        const count = segments.length;
+        return count && points[segments[count - 1].end];
+    }
+ interpolate(point, property) {
+        const options = this.options;
+        const value = point[property];
+        const points = this.points;
+        const segments = helpers_dataset._boundSegments(this, {
+            property,
+            start: value,
+            end: value
+        });
+        if (!segments.length) {
+            return;
+        }
+        const result = [];
+        const _interpolate = _getInterpolationMethod(options);
+        let i, ilen;
+        for(i = 0, ilen = segments.length; i < ilen; ++i){
+            const { start , end  } = segments[i];
+            const p1 = points[start];
+            const p2 = points[end];
+            if (p1 === p2) {
+                result.push(p1);
+                continue;
+            }
+            const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));
+            const interpolated = _interpolate(p1, p2, t, options.stepped);
+            interpolated[property] = point[property];
+            result.push(interpolated);
+        }
+        return result.length === 1 ? result[0] : result;
+    }
+ pathSegment(ctx, segment, params) {
+        const segmentMethod = _getSegmentMethod(this);
+        return segmentMethod(ctx, this, segment, params);
+    }
+ path(ctx, start, count) {
+        const segments = this.segments;
+        const segmentMethod = _getSegmentMethod(this);
+        let loop = this._loop;
+        start = start || 0;
+        count = count || this.points.length - start;
+        for (const segment of segments){
+            loop &= segmentMethod(ctx, this, segment, {
+                start,
+                end: start + count - 1
+            });
+        }
+        return !!loop;
+    }
+ draw(ctx, chartArea, start, count) {
+        const options = this.options || {};
+        const points = this.points || [];
+        if (points.length && options.borderWidth) {
+            ctx.save();
+            draw(ctx, this, start, count);
+            ctx.restore();
+        }
+        if (this.animated) {
+            this._pointsUpdated = false;
+            this._path = undefined;
+        }
+    }
+}
+
+function inRange$1(el, pos, axis, useFinalPosition) {
+    const options = el.options;
+    const { [axis]: value  } = el.getProps([
+        axis
+    ], useFinalPosition);
+    return Math.abs(pos - value) < options.radius + options.hitRadius;
+}
+class PointElement extends Element {
+    static id = 'point';
+    parsed;
+    skip;
+    stop;
+    /**
+   * @type {any}
+   */ static defaults = {
+        borderWidth: 1,
+        hitRadius: 1,
+        hoverBorderWidth: 1,
+        hoverRadius: 4,
+        pointStyle: 'circle',
+        radius: 3,
+        rotation: 0
+    };
+    /**
+   * @type {any}
+   */ static defaultRoutes = {
+        backgroundColor: 'backgroundColor',
+        borderColor: 'borderColor'
+    };
+    constructor(cfg){
+        super();
+        this.options = undefined;
+        this.parsed = undefined;
+        this.skip = undefined;
+        this.stop = undefined;
+        if (cfg) {
+            Object.assign(this, cfg);
+        }
+    }
+    inRange(mouseX, mouseY, useFinalPosition) {
+        const options = this.options;
+        const { x , y  } = this.getProps([
+            'x',
+            'y'
+        ], useFinalPosition);
+        return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);
+    }
+    inXRange(mouseX, useFinalPosition) {
+        return inRange$1(this, mouseX, 'x', useFinalPosition);
+    }
+    inYRange(mouseY, useFinalPosition) {
+        return inRange$1(this, mouseY, 'y', useFinalPosition);
+    }
+    getCenterPoint(useFinalPosition) {
+        const { x , y  } = this.getProps([
+            'x',
+            'y'
+        ], useFinalPosition);
+        return {
+            x,
+            y
+        };
+    }
+    size(options) {
+        options = options || this.options || {};
+        let radius = options.radius || 0;
+        radius = Math.max(radius, radius && options.hoverRadius || 0);
+        const borderWidth = radius && options.borderWidth || 0;
+        return (radius + borderWidth) * 2;
+    }
+    draw(ctx, area) {
+        const options = this.options;
+        if (this.skip || options.radius < 0.1 || !helpers_dataset._isPointInArea(this, area, this.size(options) / 2)) {
+            return;
+        }
+        ctx.strokeStyle = options.borderColor;
+        ctx.lineWidth = options.borderWidth;
+        ctx.fillStyle = options.backgroundColor;
+        helpers_dataset.drawPoint(ctx, options, this.x, this.y);
+    }
+    getRange() {
+        const options = this.options || {};
+        // @ts-expect-error Fallbacks should never be hit in practice
+        return options.radius + options.hitRadius;
+    }
+}
+
+function getBarBounds(bar, useFinalPosition) {
+    const { x , y , base , width , height  } =  bar.getProps([
+        'x',
+        'y',
+        'base',
+        'width',
+        'height'
+    ], useFinalPosition);
+    let left, right, top, bottom, half;
+    if (bar.horizontal) {
+        half = height / 2;
+        left = Math.min(x, base);
+        right = Math.max(x, base);
+        top = y - half;
+        bottom = y + half;
+    } else {
+        half = width / 2;
+        left = x - half;
+        right = x + half;
+        top = Math.min(y, base);
+        bottom = Math.max(y, base);
+    }
+    return {
+        left,
+        top,
+        right,
+        bottom
+    };
+}
+function skipOrLimit(skip, value, min, max) {
+    return skip ? 0 : helpers_dataset._limitValue(value, min, max);
+}
+function parseBorderWidth(bar, maxW, maxH) {
+    const value = bar.options.borderWidth;
+    const skip = bar.borderSkipped;
+    const o = helpers_dataset.toTRBL(value);
+    return {
+        t: skipOrLimit(skip.top, o.top, 0, maxH),
+        r: skipOrLimit(skip.right, o.right, 0, maxW),
+        b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),
+        l: skipOrLimit(skip.left, o.left, 0, maxW)
+    };
+}
+function parseBorderRadius(bar, maxW, maxH) {
+    const { enableBorderRadius  } = bar.getProps([
+        'enableBorderRadius'
+    ]);
+    const value = bar.options.borderRadius;
+    const o = helpers_dataset.toTRBLCorners(value);
+    const maxR = Math.min(maxW, maxH);
+    const skip = bar.borderSkipped;
+    const enableBorder = enableBorderRadius || helpers_dataset.isObject(value);
+    return {
+        topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),
+        topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),
+        bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),
+        bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)
+    };
+}
+function boundingRects(bar) {
+    const bounds = getBarBounds(bar);
+    const width = bounds.right - bounds.left;
+    const height = bounds.bottom - bounds.top;
+    const border = parseBorderWidth(bar, width / 2, height / 2);
+    const radius = parseBorderRadius(bar, width / 2, height / 2);
+    return {
+        outer: {
+            x: bounds.left,
+            y: bounds.top,
+            w: width,
+            h: height,
+            radius
+        },
+        inner: {
+            x: bounds.left + border.l,
+            y: bounds.top + border.t,
+            w: width - border.l - border.r,
+            h: height - border.t - border.b,
+            radius: {
+                topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),
+                topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),
+                bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),
+                bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))
+            }
+        }
+    };
+}
+function inRange(bar, x, y, useFinalPosition) {
+    const skipX = x === null;
+    const skipY = y === null;
+    const skipBoth = skipX && skipY;
+    const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);
+    return bounds && (skipX || helpers_dataset._isBetween(x, bounds.left, bounds.right)) && (skipY || helpers_dataset._isBetween(y, bounds.top, bounds.bottom));
+}
+function hasRadius(radius) {
+    return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;
+}
+ function addNormalRectPath(ctx, rect) {
+    ctx.rect(rect.x, rect.y, rect.w, rect.h);
+}
+function inflateRect(rect, amount, refRect = {}) {
+    const x = rect.x !== refRect.x ? -amount : 0;
+    const y = rect.y !== refRect.y ? -amount : 0;
+    const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;
+    const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;
+    return {
+        x: rect.x + x,
+        y: rect.y + y,
+        w: rect.w + w,
+        h: rect.h + h,
+        radius: rect.radius
+    };
+}
+class BarElement extends Element {
+    static id = 'bar';
+ static defaults = {
+        borderSkipped: 'start',
+        borderWidth: 0,
+        borderRadius: 0,
+        inflateAmount: 'auto',
+        pointStyle: undefined
+    };
+ static defaultRoutes = {
+        backgroundColor: 'backgroundColor',
+        borderColor: 'borderColor'
+    };
+    constructor(cfg){
+        super();
+        this.options = undefined;
+        this.horizontal = undefined;
+        this.base = undefined;
+        this.width = undefined;
+        this.height = undefined;
+        this.inflateAmount = undefined;
+        if (cfg) {
+            Object.assign(this, cfg);
+        }
+    }
+    draw(ctx) {
+        const { inflateAmount , options: { borderColor , backgroundColor  }  } = this;
+        const { inner , outer  } = boundingRects(this);
+        const addRectPath = hasRadius(outer.radius) ? helpers_dataset.addRoundedRectPath : addNormalRectPath;
+        ctx.save();
+        if (outer.w !== inner.w || outer.h !== inner.h) {
+            ctx.beginPath();
+            addRectPath(ctx, inflateRect(outer, inflateAmount, inner));
+            ctx.clip();
+            addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));
+            ctx.fillStyle = borderColor;
+            ctx.fill('evenodd');
+        }
+        ctx.beginPath();
+        addRectPath(ctx, inflateRect(inner, inflateAmount));
+        ctx.fillStyle = backgroundColor;
+        ctx.fill();
+        ctx.restore();
+    }
+    inRange(mouseX, mouseY, useFinalPosition) {
+        return inRange(this, mouseX, mouseY, useFinalPosition);
+    }
+    inXRange(mouseX, useFinalPosition) {
+        return inRange(this, mouseX, null, useFinalPosition);
+    }
+    inYRange(mouseY, useFinalPosition) {
+        return inRange(this, null, mouseY, useFinalPosition);
+    }
+    getCenterPoint(useFinalPosition) {
+        const { x , y , base , horizontal  } =  this.getProps([
+            'x',
+            'y',
+            'base',
+            'horizontal'
+        ], useFinalPosition);
+        return {
+            x: horizontal ? (x + base) / 2 : x,
+            y: horizontal ? y : (y + base) / 2
+        };
+    }
+    getRange(axis) {
+        return axis === 'x' ? this.width / 2 : this.height / 2;
+    }
+}
+
+var elements = /*#__PURE__*/Object.freeze({
+__proto__: null,
+ArcElement: ArcElement,
+BarElement: BarElement,
+LineElement: LineElement,
+PointElement: PointElement
+});
+
+const BORDER_COLORS = [
+    'rgb(54, 162, 235)',
+    'rgb(255, 99, 132)',
+    'rgb(255, 159, 64)',
+    'rgb(255, 205, 86)',
+    'rgb(75, 192, 192)',
+    'rgb(153, 102, 255)',
+    'rgb(201, 203, 207)' // grey
+];
+// Border colors with 50% transparency
+const BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));
+function getBorderColor(i) {
+    return BORDER_COLORS[i % BORDER_COLORS.length];
+}
+function getBackgroundColor(i) {
+    return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];
+}
+function colorizeDefaultDataset(dataset, i) {
+    dataset.borderColor = getBorderColor(i);
+    dataset.backgroundColor = getBackgroundColor(i);
+    return ++i;
+}
+function colorizeDoughnutDataset(dataset, i) {
+    dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));
+    return i;
+}
+function colorizePolarAreaDataset(dataset, i) {
+    dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));
+    return i;
+}
+function getColorizer(chart) {
+    let i = 0;
+    return (dataset, datasetIndex)=>{
+        const controller = chart.getDatasetMeta(datasetIndex).controller;
+        if (controller instanceof DoughnutController) {
+            i = colorizeDoughnutDataset(dataset, i);
+        } else if (controller instanceof PolarAreaController) {
+            i = colorizePolarAreaDataset(dataset, i);
+        } else if (controller) {
+            i = colorizeDefaultDataset(dataset, i);
+        }
+    };
+}
+function containsColorsDefinitions(descriptors) {
+    let k;
+    for(k in descriptors){
+        if (descriptors[k].borderColor || descriptors[k].backgroundColor) {
+            return true;
+        }
+    }
+    return false;
+}
+function containsColorsDefinition(descriptor) {
+    return descriptor && (descriptor.borderColor || descriptor.backgroundColor);
+}
+function containsDefaultColorsDefenitions() {
+    return helpers_dataset.defaults.borderColor !== 'rgba(0,0,0,0.1)' || helpers_dataset.defaults.backgroundColor !== 'rgba(0,0,0,0.1)';
+}
+var plugin_colors = {
+    id: 'colors',
+    defaults: {
+        enabled: true,
+        forceOverride: false
+    },
+    beforeLayout (chart, _args, options) {
+        if (!options.enabled) {
+            return;
+        }
+        const { data: { datasets  } , options: chartOptions  } = chart.config;
+        const { elements  } = chartOptions;
+        const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();
+        if (!options.forceOverride && containsColorDefenition) {
+            return;
+        }
+        const colorizer = getColorizer(chart);
+        datasets.forEach(colorizer);
+    }
+};
+
+function lttbDecimation(data, start, count, availableWidth, options) {
+ const samples = options.samples || availableWidth;
+    if (samples >= count) {
+        return data.slice(start, start + count);
+    }
+    const decimated = [];
+    const bucketWidth = (count - 2) / (samples - 2);
+    let sampledIndex = 0;
+    const endIndex = start + count - 1;
+    let a = start;
+    let i, maxAreaPoint, maxArea, area, nextA;
+    decimated[sampledIndex++] = data[a];
+    for(i = 0; i < samples - 2; i++){
+        let avgX = 0;
+        let avgY = 0;
+        let j;
+        const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;
+        const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;
+        const avgRangeLength = avgRangeEnd - avgRangeStart;
+        for(j = avgRangeStart; j < avgRangeEnd; j++){
+            avgX += data[j].x;
+            avgY += data[j].y;
+        }
+        avgX /= avgRangeLength;
+        avgY /= avgRangeLength;
+        const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;
+        const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;
+        const { x: pointAx , y: pointAy  } = data[a];
+        maxArea = area = -1;
+        for(j = rangeOffs; j < rangeTo; j++){
+            area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));
+            if (area > maxArea) {
+                maxArea = area;
+                maxAreaPoint = data[j];
+                nextA = j;
+            }
+        }
+        decimated[sampledIndex++] = maxAreaPoint;
+        a = nextA;
+    }
+    decimated[sampledIndex++] = data[endIndex];
+    return decimated;
+}
+function minMaxDecimation(data, start, count, availableWidth) {
+    let avgX = 0;
+    let countX = 0;
+    let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;
+    const decimated = [];
+    const endIndex = start + count - 1;
+    const xMin = data[start].x;
+    const xMax = data[endIndex].x;
+    const dx = xMax - xMin;
+    for(i = start; i < start + count; ++i){
+        point = data[i];
+        x = (point.x - xMin) / dx * availableWidth;
+        y = point.y;
+        const truncX = x | 0;
+        if (truncX === prevX) {
+            if (y < minY) {
+                minY = y;
+                minIndex = i;
+            } else if (y > maxY) {
+                maxY = y;
+                maxIndex = i;
+            }
+            avgX = (countX * avgX + point.x) / ++countX;
+        } else {
+            const lastIndex = i - 1;
+            if (!helpers_dataset.isNullOrUndef(minIndex) && !helpers_dataset.isNullOrUndef(maxIndex)) {
+                const intermediateIndex1 = Math.min(minIndex, maxIndex);
+                const intermediateIndex2 = Math.max(minIndex, maxIndex);
+                if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {
+                    decimated.push({
+                        ...data[intermediateIndex1],
+                        x: avgX
+                    });
+                }
+                if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {
+                    decimated.push({
+                        ...data[intermediateIndex2],
+                        x: avgX
+                    });
+                }
+            }
+            if (i > 0 && lastIndex !== startIndex) {
+                decimated.push(data[lastIndex]);
+            }
+            decimated.push(point);
+            prevX = truncX;
+            countX = 0;
+            minY = maxY = y;
+            minIndex = maxIndex = startIndex = i;
+        }
+    }
+    return decimated;
+}
+function cleanDecimatedDataset(dataset) {
+    if (dataset._decimated) {
+        const data = dataset._data;
+        delete dataset._decimated;
+        delete dataset._data;
+        Object.defineProperty(dataset, 'data', {
+            configurable: true,
+            enumerable: true,
+            writable: true,
+            value: data
+        });
+    }
+}
+function cleanDecimatedData(chart) {
+    chart.data.datasets.forEach((dataset)=>{
+        cleanDecimatedDataset(dataset);
+    });
+}
+function getStartAndCountOfVisiblePointsSimplified(meta, points) {
+    const pointCount = points.length;
+    let start = 0;
+    let count;
+    const { iScale  } = meta;
+    const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();
+    if (minDefined) {
+        start = helpers_dataset._limitValue(helpers_dataset._lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);
+    }
+    if (maxDefined) {
+        count = helpers_dataset._limitValue(helpers_dataset._lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;
+    } else {
+        count = pointCount - start;
+    }
+    return {
+        start,
+        count
+    };
+}
+var plugin_decimation = {
+    id: 'decimation',
+    defaults: {
+        algorithm: 'min-max',
+        enabled: false
+    },
+    beforeElementsUpdate: (chart, args, options)=>{
+        if (!options.enabled) {
+            cleanDecimatedData(chart);
+            return;
+        }
+        const availableWidth = chart.width;
+        chart.data.datasets.forEach((dataset, datasetIndex)=>{
+            const { _data , indexAxis  } = dataset;
+            const meta = chart.getDatasetMeta(datasetIndex);
+            const data = _data || dataset.data;
+            if (helpers_dataset.resolve([
+                indexAxis,
+                chart.options.indexAxis
+            ]) === 'y') {
+                return;
+            }
+            if (!meta.controller.supportsDecimation) {
+                return;
+            }
+            const xAxis = chart.scales[meta.xAxisID];
+            if (xAxis.type !== 'linear' && xAxis.type !== 'time') {
+                return;
+            }
+            if (chart.options.parsing) {
+                return;
+            }
+            let { start , count  } = getStartAndCountOfVisiblePointsSimplified(meta, data);
+            const threshold = options.threshold || 4 * availableWidth;
+            if (count <= threshold) {
+                cleanDecimatedDataset(dataset);
+                return;
+            }
+            if (helpers_dataset.isNullOrUndef(_data)) {
+                dataset._data = data;
+                delete dataset.data;
+                Object.defineProperty(dataset, 'data', {
+                    configurable: true,
+                    enumerable: true,
+                    get: function() {
+                        return this._decimated;
+                    },
+                    set: function(d) {
+                        this._data = d;
+                    }
+                });
+            }
+            let decimated;
+            switch(options.algorithm){
+                case 'lttb':
+                    decimated = lttbDecimation(data, start, count, availableWidth, options);
+                    break;
+                case 'min-max':
+                    decimated = minMaxDecimation(data, start, count, availableWidth);
+                    break;
+                default:
+                    throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);
+            }
+            dataset._decimated = decimated;
+        });
+    },
+    destroy (chart) {
+        cleanDecimatedData(chart);
+    }
+};
+
+function _segments(line, target, property) {
+    const segments = line.segments;
+    const points = line.points;
+    const tpoints = target.points;
+    const parts = [];
+    for (const segment of segments){
+        let { start , end  } = segment;
+        end = _findSegmentEnd(start, end, points);
+        const bounds = _getBounds(property, points[start], points[end], segment.loop);
+        if (!target.segments) {
+            parts.push({
+                source: segment,
+                target: bounds,
+                start: points[start],
+                end: points[end]
+            });
+            continue;
+        }
+        const targetSegments = helpers_dataset._boundSegments(target, bounds);
+        for (const tgt of targetSegments){
+            const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);
+            const fillSources = helpers_dataset._boundSegment(segment, points, subBounds);
+            for (const fillSource of fillSources){
+                parts.push({
+                    source: fillSource,
+                    target: tgt,
+                    start: {
+                        [property]: _getEdge(bounds, subBounds, 'start', Math.max)
+                    },
+                    end: {
+                        [property]: _getEdge(bounds, subBounds, 'end', Math.min)
+                    }
+                });
+            }
+        }
+    }
+    return parts;
+}
+function _getBounds(property, first, last, loop) {
+    if (loop) {
+        return;
+    }
+    let start = first[property];
+    let end = last[property];
+    if (property === 'angle') {
+        start = helpers_dataset._normalizeAngle(start);
+        end = helpers_dataset._normalizeAngle(end);
+    }
+    return {
+        property,
+        start,
+        end
+    };
+}
+function _pointsFromSegments(boundary, line) {
+    const { x =null , y =null  } = boundary || {};
+    const linePoints = line.points;
+    const points = [];
+    line.segments.forEach(({ start , end  })=>{
+        end = _findSegmentEnd(start, end, linePoints);
+        const first = linePoints[start];
+        const last = linePoints[end];
+        if (y !== null) {
+            points.push({
+                x: first.x,
+                y
+            });
+            points.push({
+                x: last.x,
+                y
+            });
+        } else if (x !== null) {
+            points.push({
+                x,
+                y: first.y
+            });
+            points.push({
+                x,
+                y: last.y
+            });
+        }
+    });
+    return points;
+}
+function _findSegmentEnd(start, end, points) {
+    for(; end > start; end--){
+        const point = points[end];
+        if (!isNaN(point.x) && !isNaN(point.y)) {
+            break;
+        }
+    }
+    return end;
+}
+function _getEdge(a, b, prop, fn) {
+    if (a && b) {
+        return fn(a[prop], b[prop]);
+    }
+    return a ? a[prop] : b ? b[prop] : 0;
+}
+
+function _createBoundaryLine(boundary, line) {
+    let points = [];
+    let _loop = false;
+    if (helpers_dataset.isArray(boundary)) {
+        _loop = true;
+        points = boundary;
+    } else {
+        points = _pointsFromSegments(boundary, line);
+    }
+    return points.length ? new LineElement({
+        points,
+        options: {
+            tension: 0
+        },
+        _loop,
+        _fullLoop: _loop
+    }) : null;
+}
+function _shouldApplyFill(source) {
+    return source && source.fill !== false;
+}
+
+function _resolveTarget(sources, index, propagate) {
+    const source = sources[index];
+    let fill = source.fill;
+    const visited = [
+        index
+    ];
+    let target;
+    if (!propagate) {
+        return fill;
+    }
+    while(fill !== false && visited.indexOf(fill) === -1){
+        if (!helpers_dataset.isNumberFinite(fill)) {
+            return fill;
+        }
+        target = sources[fill];
+        if (!target) {
+            return false;
+        }
+        if (target.visible) {
+            return fill;
+        }
+        visited.push(fill);
+        fill = target.fill;
+    }
+    return false;
+}
+ function _decodeFill(line, index, count) {
+     const fill = parseFillOption(line);
+    if (helpers_dataset.isObject(fill)) {
+        return isNaN(fill.value) ? false : fill;
+    }
+    let target = parseFloat(fill);
+    if (helpers_dataset.isNumberFinite(target) && Math.floor(target) === target) {
+        return decodeTargetIndex(fill[0], index, target, count);
+    }
+    return [
+        'origin',
+        'start',
+        'end',
+        'stack',
+        'shape'
+    ].indexOf(fill) >= 0 && fill;
+}
+function decodeTargetIndex(firstCh, index, target, count) {
+    if (firstCh === '-' || firstCh === '+') {
+        target = index + target;
+    }
+    if (target === index || target < 0 || target >= count) {
+        return false;
+    }
+    return target;
+}
+ function _getTargetPixel(fill, scale) {
+    let pixel = null;
+    if (fill === 'start') {
+        pixel = scale.bottom;
+    } else if (fill === 'end') {
+        pixel = scale.top;
+    } else if (helpers_dataset.isObject(fill)) {
+        pixel = scale.getPixelForValue(fill.value);
+    } else if (scale.getBasePixel) {
+        pixel = scale.getBasePixel();
+    }
+    return pixel;
+}
+ function _getTargetValue(fill, scale, startValue) {
+    let value;
+    if (fill === 'start') {
+        value = startValue;
+    } else if (fill === 'end') {
+        value = scale.options.reverse ? scale.min : scale.max;
+    } else if (helpers_dataset.isObject(fill)) {
+        value = fill.value;
+    } else {
+        value = scale.getBaseValue();
+    }
+    return value;
+}
+ function parseFillOption(line) {
+    const options = line.options;
+    const fillOption = options.fill;
+    let fill = helpers_dataset.valueOrDefault(fillOption && fillOption.target, fillOption);
+    if (fill === undefined) {
+        fill = !!options.backgroundColor;
+    }
+    if (fill === false || fill === null) {
+        return false;
+    }
+    if (fill === true) {
+        return 'origin';
+    }
+    return fill;
+}
+
+function _buildStackLine(source) {
+    const { scale , index , line  } = source;
+    const points = [];
+    const segments = line.segments;
+    const sourcePoints = line.points;
+    const linesBelow = getLinesBelow(scale, index);
+    linesBelow.push(_createBoundaryLine({
+        x: null,
+        y: scale.bottom
+    }, line));
+    for(let i = 0; i < segments.length; i++){
+        const segment = segments[i];
+        for(let j = segment.start; j <= segment.end; j++){
+            addPointsBelow(points, sourcePoints[j], linesBelow);
+        }
+    }
+    return new LineElement({
+        points,
+        options: {}
+    });
+}
+ function getLinesBelow(scale, index) {
+    const below = [];
+    const metas = scale.getMatchingVisibleMetas('line');
+    for(let i = 0; i < metas.length; i++){
+        const meta = metas[i];
+        if (meta.index === index) {
+            break;
+        }
+        if (!meta.hidden) {
+            below.unshift(meta.dataset);
+        }
+    }
+    return below;
+}
+ function addPointsBelow(points, sourcePoint, linesBelow) {
+    const postponed = [];
+    for(let j = 0; j < linesBelow.length; j++){
+        const line = linesBelow[j];
+        const { first , last , point  } = findPoint(line, sourcePoint, 'x');
+        if (!point || first && last) {
+            continue;
+        }
+        if (first) {
+            postponed.unshift(point);
+        } else {
+            points.push(point);
+            if (!last) {
+                break;
+            }
+        }
+    }
+    points.push(...postponed);
+}
+ function findPoint(line, sourcePoint, property) {
+    const point = line.interpolate(sourcePoint, property);
+    if (!point) {
+        return {};
+    }
+    const pointValue = point[property];
+    const segments = line.segments;
+    const linePoints = line.points;
+    let first = false;
+    let last = false;
+    for(let i = 0; i < segments.length; i++){
+        const segment = segments[i];
+        const firstValue = linePoints[segment.start][property];
+        const lastValue = linePoints[segment.end][property];
+        if (helpers_dataset._isBetween(pointValue, firstValue, lastValue)) {
+            first = pointValue === firstValue;
+            last = pointValue === lastValue;
+            break;
+        }
+    }
+    return {
+        first,
+        last,
+        point
+    };
+}
+
+class simpleArc {
+    constructor(opts){
+        this.x = opts.x;
+        this.y = opts.y;
+        this.radius = opts.radius;
+    }
+    pathSegment(ctx, bounds, opts) {
+        const { x , y , radius  } = this;
+        bounds = bounds || {
+            start: 0,
+            end: helpers_dataset.TAU
+        };
+        ctx.arc(x, y, radius, bounds.end, bounds.start, true);
+        return !opts.bounds;
+    }
+    interpolate(point) {
+        const { x , y , radius  } = this;
+        const angle = point.angle;
+        return {
+            x: x + Math.cos(angle) * radius,
+            y: y + Math.sin(angle) * radius,
+            angle
+        };
+    }
+}
+
+function _getTarget(source) {
+    const { chart , fill , line  } = source;
+    if (helpers_dataset.isNumberFinite(fill)) {
+        return getLineByIndex(chart, fill);
+    }
+    if (fill === 'stack') {
+        return _buildStackLine(source);
+    }
+    if (fill === 'shape') {
+        return true;
+    }
+    const boundary = computeBoundary(source);
+    if (boundary instanceof simpleArc) {
+        return boundary;
+    }
+    return _createBoundaryLine(boundary, line);
+}
+ function getLineByIndex(chart, index) {
+    const meta = chart.getDatasetMeta(index);
+    const visible = meta && chart.isDatasetVisible(index);
+    return visible ? meta.dataset : null;
+}
+function computeBoundary(source) {
+    const scale = source.scale || {};
+    if (scale.getPointPositionForValue) {
+        return computeCircularBoundary(source);
+    }
+    return computeLinearBoundary(source);
+}
+function computeLinearBoundary(source) {
+    const { scale ={} , fill  } = source;
+    const pixel = _getTargetPixel(fill, scale);
+    if (helpers_dataset.isNumberFinite(pixel)) {
+        const horizontal = scale.isHorizontal();
+        return {
+            x: horizontal ? pixel : null,
+            y: horizontal ? null : pixel
+        };
+    }
+    return null;
+}
+function computeCircularBoundary(source) {
+    const { scale , fill  } = source;
+    const options = scale.options;
+    const length = scale.getLabels().length;
+    const start = options.reverse ? scale.max : scale.min;
+    const value = _getTargetValue(fill, scale, start);
+    const target = [];
+    if (options.grid.circular) {
+        const center = scale.getPointPositionForValue(0, start);
+        return new simpleArc({
+            x: center.x,
+            y: center.y,
+            radius: scale.getDistanceFromCenterForValue(value)
+        });
+    }
+    for(let i = 0; i < length; ++i){
+        target.push(scale.getPointPositionForValue(i, value));
+    }
+    return target;
+}
+
+function _drawfill(ctx, source, area) {
+    const target = _getTarget(source);
+    const { chart , index , line , scale , axis  } = source;
+    const lineOpts = line.options;
+    const fillOption = lineOpts.fill;
+    const color = lineOpts.backgroundColor;
+    const { above =color , below =color  } = fillOption || {};
+    const meta = chart.getDatasetMeta(index);
+    const clip = helpers_dataset.getDatasetClipArea(chart, meta);
+    if (target && line.points.length) {
+        helpers_dataset.clipArea(ctx, area);
+        doFill(ctx, {
+            line,
+            target,
+            above,
+            below,
+            area,
+            scale,
+            axis,
+            clip
+        });
+        helpers_dataset.unclipArea(ctx);
+    }
+}
+function doFill(ctx, cfg) {
+    const { line , target , above , below , area , scale , clip  } = cfg;
+    const property = line._loop ? 'angle' : cfg.axis;
+    ctx.save();
+    let fillColor = below;
+    if (below !== above) {
+        if (property === 'x') {
+            clipVertical(ctx, target, area.top);
+            fill(ctx, {
+                line,
+                target,
+                color: above,
+                scale,
+                property,
+                clip
+            });
+            ctx.restore();
+            ctx.save();
+            clipVertical(ctx, target, area.bottom);
+        } else if (property === 'y') {
+            clipHorizontal(ctx, target, area.left);
+            fill(ctx, {
+                line,
+                target,
+                color: below,
+                scale,
+                property,
+                clip
+            });
+            ctx.restore();
+            ctx.save();
+            clipHorizontal(ctx, target, area.right);
+            fillColor = above;
+        }
+    }
+    fill(ctx, {
+        line,
+        target,
+        color: fillColor,
+        scale,
+        property,
+        clip
+    });
+    ctx.restore();
+}
+function clipVertical(ctx, target, clipY) {
+    const { segments , points  } = target;
+    let first = true;
+    let lineLoop = false;
+    ctx.beginPath();
+    for (const segment of segments){
+        const { start , end  } = segment;
+        const firstPoint = points[start];
+        const lastPoint = points[_findSegmentEnd(start, end, points)];
+        if (first) {
+            ctx.moveTo(firstPoint.x, firstPoint.y);
+            first = false;
+        } else {
+            ctx.lineTo(firstPoint.x, clipY);
+            ctx.lineTo(firstPoint.x, firstPoint.y);
+        }
+        lineLoop = !!target.pathSegment(ctx, segment, {
+            move: lineLoop
+        });
+        if (lineLoop) {
+            ctx.closePath();
+        } else {
+            ctx.lineTo(lastPoint.x, clipY);
+        }
+    }
+    ctx.lineTo(target.first().x, clipY);
+    ctx.closePath();
+    ctx.clip();
+}
+function clipHorizontal(ctx, target, clipX) {
+    const { segments , points  } = target;
+    let first = true;
+    let lineLoop = false;
+    ctx.beginPath();
+    for (const segment of segments){
+        const { start , end  } = segment;
+        const firstPoint = points[start];
+        const lastPoint = points[_findSegmentEnd(start, end, points)];
+        if (first) {
+            ctx.moveTo(firstPoint.x, firstPoint.y);
+            first = false;
+        } else {
+            ctx.lineTo(clipX, firstPoint.y);
+            ctx.lineTo(firstPoint.x, firstPoint.y);
+        }
+        lineLoop = !!target.pathSegment(ctx, segment, {
+            move: lineLoop
+        });
+        if (lineLoop) {
+            ctx.closePath();
+        } else {
+            ctx.lineTo(clipX, lastPoint.y);
+        }
+    }
+    ctx.lineTo(clipX, target.first().y);
+    ctx.closePath();
+    ctx.clip();
+}
+function fill(ctx, cfg) {
+    const { line , target , property , color , scale , clip  } = cfg;
+    const segments = _segments(line, target, property);
+    for (const { source: src , target: tgt , start , end  } of segments){
+        const { style: { backgroundColor =color  } = {}  } = src;
+        const notShape = target !== true;
+        ctx.save();
+        ctx.fillStyle = backgroundColor;
+        clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));
+        ctx.beginPath();
+        const lineLoop = !!line.pathSegment(ctx, src);
+        let loop;
+        if (notShape) {
+            if (lineLoop) {
+                ctx.closePath();
+            } else {
+                interpolatedLineTo(ctx, target, end, property);
+            }
+            const targetLoop = !!target.pathSegment(ctx, tgt, {
+                move: lineLoop,
+                reverse: true
+            });
+            loop = lineLoop && targetLoop;
+            if (!loop) {
+                interpolatedLineTo(ctx, target, start, property);
+            }
+        }
+        ctx.closePath();
+        ctx.fill(loop ? 'evenodd' : 'nonzero');
+        ctx.restore();
+    }
+}
+function clipBounds(ctx, scale, clip, bounds) {
+    const chartArea = scale.chart.chartArea;
+    const { property , start , end  } = bounds || {};
+    if (property === 'x' || property === 'y') {
+        let left, top, right, bottom;
+        if (property === 'x') {
+            left = start;
+            top = chartArea.top;
+            right = end;
+            bottom = chartArea.bottom;
+        } else {
+            left = chartArea.left;
+            top = start;
+            right = chartArea.right;
+            bottom = end;
+        }
+        ctx.beginPath();
+        if (clip) {
+            left = Math.max(left, clip.left);
+            right = Math.min(right, clip.right);
+            top = Math.max(top, clip.top);
+            bottom = Math.min(bottom, clip.bottom);
+        }
+        ctx.rect(left, top, right - left, bottom - top);
+        ctx.clip();
+    }
+}
+function interpolatedLineTo(ctx, target, point, property) {
+    const interpolatedPoint = target.interpolate(point, property);
+    if (interpolatedPoint) {
+        ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);
+    }
+}
+
+var index = {
+    id: 'filler',
+    afterDatasetsUpdate (chart, _args, options) {
+        const count = (chart.data.datasets || []).length;
+        const sources = [];
+        let meta, i, line, source;
+        for(i = 0; i < count; ++i){
+            meta = chart.getDatasetMeta(i);
+            line = meta.dataset;
+            source = null;
+            if (line && line.options && line instanceof LineElement) {
+                source = {
+                    visible: chart.isDatasetVisible(i),
+                    index: i,
+                    fill: _decodeFill(line, i, count),
+                    chart,
+                    axis: meta.controller.options.indexAxis,
+                    scale: meta.vScale,
+                    line
+                };
+            }
+            meta.$filler = source;
+            sources.push(source);
+        }
+        for(i = 0; i < count; ++i){
+            source = sources[i];
+            if (!source || source.fill === false) {
+                continue;
+            }
+            source.fill = _resolveTarget(sources, i, options.propagate);
+        }
+    },
+    beforeDraw (chart, _args, options) {
+        const draw = options.drawTime === 'beforeDraw';
+        const metasets = chart.getSortedVisibleDatasetMetas();
+        const area = chart.chartArea;
+        for(let i = metasets.length - 1; i >= 0; --i){
+            const source = metasets[i].$filler;
+            if (!source) {
+                continue;
+            }
+            source.line.updateControlPoints(area, source.axis);
+            if (draw && source.fill) {
+                _drawfill(chart.ctx, source, area);
+            }
+        }
+    },
+    beforeDatasetsDraw (chart, _args, options) {
+        if (options.drawTime !== 'beforeDatasetsDraw') {
+            return;
+        }
+        const metasets = chart.getSortedVisibleDatasetMetas();
+        for(let i = metasets.length - 1; i >= 0; --i){
+            const source = metasets[i].$filler;
+            if (_shouldApplyFill(source)) {
+                _drawfill(chart.ctx, source, chart.chartArea);
+            }
+        }
+    },
+    beforeDatasetDraw (chart, args, options) {
+        const source = args.meta.$filler;
+        if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {
+            return;
+        }
+        _drawfill(chart.ctx, source, chart.chartArea);
+    },
+    defaults: {
+        propagate: true,
+        drawTime: 'beforeDatasetDraw'
+    }
+};
+
+const getBoxSize = (labelOpts, fontSize)=>{
+    let { boxHeight =fontSize , boxWidth =fontSize  } = labelOpts;
+    if (labelOpts.usePointStyle) {
+        boxHeight = Math.min(boxHeight, fontSize);
+        boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);
+    }
+    return {
+        boxWidth,
+        boxHeight,
+        itemHeight: Math.max(fontSize, boxHeight)
+    };
+};
+const itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;
+class Legend extends Element {
+ constructor(config){
+        super();
+        this._added = false;
+        this.legendHitBoxes = [];
+ this._hoveredItem = null;
+        this.doughnutMode = false;
+        this.chart = config.chart;
+        this.options = config.options;
+        this.ctx = config.ctx;
+        this.legendItems = undefined;
+        this.columnSizes = undefined;
+        this.lineWidths = undefined;
+        this.maxHeight = undefined;
+        this.maxWidth = undefined;
+        this.top = undefined;
+        this.bottom = undefined;
+        this.left = undefined;
+        this.right = undefined;
+        this.height = undefined;
+        this.width = undefined;
+        this._margins = undefined;
+        this.position = undefined;
+        this.weight = undefined;
+        this.fullSize = undefined;
+    }
+    update(maxWidth, maxHeight, margins) {
+        this.maxWidth = maxWidth;
+        this.maxHeight = maxHeight;
+        this._margins = margins;
+        this.setDimensions();
+        this.buildLabels();
+        this.fit();
+    }
+    setDimensions() {
+        if (this.isHorizontal()) {
+            this.width = this.maxWidth;
+            this.left = this._margins.left;
+            this.right = this.width;
+        } else {
+            this.height = this.maxHeight;
+            this.top = this._margins.top;
+            this.bottom = this.height;
+        }
+    }
+    buildLabels() {
+        const labelOpts = this.options.labels || {};
+        let legendItems = helpers_dataset.callback(labelOpts.generateLabels, [
+            this.chart
+        ], this) || [];
+        if (labelOpts.filter) {
+            legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));
+        }
+        if (labelOpts.sort) {
+            legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));
+        }
+        if (this.options.reverse) {
+            legendItems.reverse();
+        }
+        this.legendItems = legendItems;
+    }
+    fit() {
+        const { options , ctx  } = this;
+        if (!options.display) {
+            this.width = this.height = 0;
+            return;
+        }
+        const labelOpts = options.labels;
+        const labelFont = helpers_dataset.toFont(labelOpts.font);
+        const fontSize = labelFont.size;
+        const titleHeight = this._computeTitleHeight();
+        const { boxWidth , itemHeight  } = getBoxSize(labelOpts, fontSize);
+        let width, height;
+        ctx.font = labelFont.string;
+        if (this.isHorizontal()) {
+            width = this.maxWidth;
+            height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;
+        } else {
+            height = this.maxHeight;
+            width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;
+        }
+        this.width = Math.min(width, options.maxWidth || this.maxWidth);
+        this.height = Math.min(height, options.maxHeight || this.maxHeight);
+    }
+ _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {
+        const { ctx , maxWidth , options: { labels: { padding  }  }  } = this;
+        const hitboxes = this.legendHitBoxes = [];
+        const lineWidths = this.lineWidths = [
+            0
+        ];
+        const lineHeight = itemHeight + padding;
+        let totalHeight = titleHeight;
+        ctx.textAlign = 'left';
+        ctx.textBaseline = 'middle';
+        let row = -1;
+        let top = -lineHeight;
+        this.legendItems.forEach((legendItem, i)=>{
+            const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;
+            if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {
+                totalHeight += lineHeight;
+                lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;
+                top += lineHeight;
+                row++;
+            }
+            hitboxes[i] = {
+                left: 0,
+                top,
+                row,
+                width: itemWidth,
+                height: itemHeight
+            };
+            lineWidths[lineWidths.length - 1] += itemWidth + padding;
+        });
+        return totalHeight;
+    }
+    _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {
+        const { ctx , maxHeight , options: { labels: { padding  }  }  } = this;
+        const hitboxes = this.legendHitBoxes = [];
+        const columnSizes = this.columnSizes = [];
+        const heightLimit = maxHeight - titleHeight;
+        let totalWidth = padding;
+        let currentColWidth = 0;
+        let currentColHeight = 0;
+        let left = 0;
+        let col = 0;
+        this.legendItems.forEach((legendItem, i)=>{
+            const { itemWidth , itemHeight  } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);
+            if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {
+                totalWidth += currentColWidth + padding;
+                columnSizes.push({
+                    width: currentColWidth,
+                    height: currentColHeight
+                });
+                left += currentColWidth + padding;
+                col++;
+                currentColWidth = currentColHeight = 0;
+            }
+            hitboxes[i] = {
+                left,
+                top: currentColHeight,
+                col,
+                width: itemWidth,
+                height: itemHeight
+            };
+            currentColWidth = Math.max(currentColWidth, itemWidth);
+            currentColHeight += itemHeight + padding;
+        });
+        totalWidth += currentColWidth;
+        columnSizes.push({
+            width: currentColWidth,
+            height: currentColHeight
+        });
+        return totalWidth;
+    }
+    adjustHitBoxes() {
+        if (!this.options.display) {
+            return;
+        }
+        const titleHeight = this._computeTitleHeight();
+        const { legendHitBoxes: hitboxes , options: { align , labels: { padding  } , rtl  }  } = this;
+        const rtlHelper = helpers_dataset.getRtlAdapter(rtl, this.left, this.width);
+        if (this.isHorizontal()) {
+            let row = 0;
+            let left = helpers_dataset._alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
+            for (const hitbox of hitboxes){
+                if (row !== hitbox.row) {
+                    row = hitbox.row;
+                    left = helpers_dataset._alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
+                }
+                hitbox.top += this.top + titleHeight + padding;
+                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);
+                left += hitbox.width + padding;
+            }
+        } else {
+            let col = 0;
+            let top = helpers_dataset._alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
+            for (const hitbox of hitboxes){
+                if (hitbox.col !== col) {
+                    col = hitbox.col;
+                    top = helpers_dataset._alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
+                }
+                hitbox.top = top;
+                hitbox.left += this.left + padding;
+                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);
+                top += hitbox.height + padding;
+            }
+        }
+    }
+    isHorizontal() {
+        return this.options.position === 'top' || this.options.position === 'bottom';
+    }
+    draw() {
+        if (this.options.display) {
+            const ctx = this.ctx;
+            helpers_dataset.clipArea(ctx, this);
+            this._draw();
+            helpers_dataset.unclipArea(ctx);
+        }
+    }
+ _draw() {
+        const { options: opts , columnSizes , lineWidths , ctx  } = this;
+        const { align , labels: labelOpts  } = opts;
+        const defaultColor = helpers_dataset.defaults.color;
+        const rtlHelper = helpers_dataset.getRtlAdapter(opts.rtl, this.left, this.width);
+        const labelFont = helpers_dataset.toFont(labelOpts.font);
+        const { padding  } = labelOpts;
+        const fontSize = labelFont.size;
+        const halfFontSize = fontSize / 2;
+        let cursor;
+        this.drawTitle();
+        ctx.textAlign = rtlHelper.textAlign('left');
+        ctx.textBaseline = 'middle';
+        ctx.lineWidth = 0.5;
+        ctx.font = labelFont.string;
+        const { boxWidth , boxHeight , itemHeight  } = getBoxSize(labelOpts, fontSize);
+        const drawLegendBox = function(x, y, legendItem) {
+            if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {
+                return;
+            }
+            ctx.save();
+            const lineWidth = helpers_dataset.valueOrDefault(legendItem.lineWidth, 1);
+            ctx.fillStyle = helpers_dataset.valueOrDefault(legendItem.fillStyle, defaultColor);
+            ctx.lineCap = helpers_dataset.valueOrDefault(legendItem.lineCap, 'butt');
+            ctx.lineDashOffset = helpers_dataset.valueOrDefault(legendItem.lineDashOffset, 0);
+            ctx.lineJoin = helpers_dataset.valueOrDefault(legendItem.lineJoin, 'miter');
+            ctx.lineWidth = lineWidth;
+            ctx.strokeStyle = helpers_dataset.valueOrDefault(legendItem.strokeStyle, defaultColor);
+            ctx.setLineDash(helpers_dataset.valueOrDefault(legendItem.lineDash, []));
+            if (labelOpts.usePointStyle) {
+                const drawOptions = {
+                    radius: boxHeight * Math.SQRT2 / 2,
+                    pointStyle: legendItem.pointStyle,
+                    rotation: legendItem.rotation,
+                    borderWidth: lineWidth
+                };
+                const centerX = rtlHelper.xPlus(x, boxWidth / 2);
+                const centerY = y + halfFontSize;
+                helpers_dataset.drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);
+            } else {
+                const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);
+                const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);
+                const borderRadius = helpers_dataset.toTRBLCorners(legendItem.borderRadius);
+                ctx.beginPath();
+                if (Object.values(borderRadius).some((v)=>v !== 0)) {
+                    helpers_dataset.addRoundedRectPath(ctx, {
+                        x: xBoxLeft,
+                        y: yBoxTop,
+                        w: boxWidth,
+                        h: boxHeight,
+                        radius: borderRadius
+                    });
+                } else {
+                    ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);
+                }
+                ctx.fill();
+                if (lineWidth !== 0) {
+                    ctx.stroke();
+                }
+            }
+            ctx.restore();
+        };
+        const fillText = function(x, y, legendItem) {
+            helpers_dataset.renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {
+                strikethrough: legendItem.hidden,
+                textAlign: rtlHelper.textAlign(legendItem.textAlign)
+            });
+        };
+        const isHorizontal = this.isHorizontal();
+        const titleHeight = this._computeTitleHeight();
+        if (isHorizontal) {
+            cursor = {
+                x: helpers_dataset._alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),
+                y: this.top + padding + titleHeight,
+                line: 0
+            };
+        } else {
+            cursor = {
+                x: this.left + padding,
+                y: helpers_dataset._alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),
+                line: 0
+            };
+        }
+        helpers_dataset.overrideTextDirection(this.ctx, opts.textDirection);
+        const lineHeight = itemHeight + padding;
+        this.legendItems.forEach((legendItem, i)=>{
+            ctx.strokeStyle = legendItem.fontColor;
+            ctx.fillStyle = legendItem.fontColor;
+            const textWidth = ctx.measureText(legendItem.text).width;
+            const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));
+            const width = boxWidth + halfFontSize + textWidth;
+            let x = cursor.x;
+            let y = cursor.y;
+            rtlHelper.setWidth(this.width);
+            if (isHorizontal) {
+                if (i > 0 && x + width + padding > this.right) {
+                    y = cursor.y += lineHeight;
+                    cursor.line++;
+                    x = cursor.x = helpers_dataset._alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);
+                }
+            } else if (i > 0 && y + lineHeight > this.bottom) {
+                x = cursor.x = x + columnSizes[cursor.line].width + padding;
+                cursor.line++;
+                y = cursor.y = helpers_dataset._alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);
+            }
+            const realX = rtlHelper.x(x);
+            drawLegendBox(realX, y, legendItem);
+            x = helpers_dataset._textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);
+            fillText(rtlHelper.x(x), y, legendItem);
+            if (isHorizontal) {
+                cursor.x += width + padding;
+            } else if (typeof legendItem.text !== 'string') {
+                const fontLineHeight = labelFont.lineHeight;
+                cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;
+            } else {
+                cursor.y += lineHeight;
+            }
+        });
+        helpers_dataset.restoreTextDirection(this.ctx, opts.textDirection);
+    }
+ drawTitle() {
+        const opts = this.options;
+        const titleOpts = opts.title;
+        const titleFont = helpers_dataset.toFont(titleOpts.font);
+        const titlePadding = helpers_dataset.toPadding(titleOpts.padding);
+        if (!titleOpts.display) {
+            return;
+        }
+        const rtlHelper = helpers_dataset.getRtlAdapter(opts.rtl, this.left, this.width);
+        const ctx = this.ctx;
+        const position = titleOpts.position;
+        const halfFontSize = titleFont.size / 2;
+        const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;
+        let y;
+        let left = this.left;
+        let maxWidth = this.width;
+        if (this.isHorizontal()) {
+            maxWidth = Math.max(...this.lineWidths);
+            y = this.top + topPaddingPlusHalfFontSize;
+            left = helpers_dataset._alignStartEnd(opts.align, left, this.right - maxWidth);
+        } else {
+            const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);
+            y = topPaddingPlusHalfFontSize + helpers_dataset._alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());
+        }
+        const x = helpers_dataset._alignStartEnd(position, left, left + maxWidth);
+        ctx.textAlign = rtlHelper.textAlign(helpers_dataset._toLeftRightCenter(position));
+        ctx.textBaseline = 'middle';
+        ctx.strokeStyle = titleOpts.color;
+        ctx.fillStyle = titleOpts.color;
+        ctx.font = titleFont.string;
+        helpers_dataset.renderText(ctx, titleOpts.text, x, y, titleFont);
+    }
+ _computeTitleHeight() {
+        const titleOpts = this.options.title;
+        const titleFont = helpers_dataset.toFont(titleOpts.font);
+        const titlePadding = helpers_dataset.toPadding(titleOpts.padding);
+        return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;
+    }
+ _getLegendItemAt(x, y) {
+        let i, hitBox, lh;
+        if (helpers_dataset._isBetween(x, this.left, this.right) && helpers_dataset._isBetween(y, this.top, this.bottom)) {
+            lh = this.legendHitBoxes;
+            for(i = 0; i < lh.length; ++i){
+                hitBox = lh[i];
+                if (helpers_dataset._isBetween(x, hitBox.left, hitBox.left + hitBox.width) && helpers_dataset._isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {
+                    return this.legendItems[i];
+                }
+            }
+        }
+        return null;
+    }
+ handleEvent(e) {
+        const opts = this.options;
+        if (!isListened(e.type, opts)) {
+            return;
+        }
+        const hoveredItem = this._getLegendItemAt(e.x, e.y);
+        if (e.type === 'mousemove' || e.type === 'mouseout') {
+            const previous = this._hoveredItem;
+            const sameItem = itemsEqual(previous, hoveredItem);
+            if (previous && !sameItem) {
+                helpers_dataset.callback(opts.onLeave, [
+                    e,
+                    previous,
+                    this
+                ], this);
+            }
+            this._hoveredItem = hoveredItem;
+            if (hoveredItem && !sameItem) {
+                helpers_dataset.callback(opts.onHover, [
+                    e,
+                    hoveredItem,
+                    this
+                ], this);
+            }
+        } else if (hoveredItem) {
+            helpers_dataset.callback(opts.onClick, [
+                e,
+                hoveredItem,
+                this
+            ], this);
+        }
+    }
+}
+function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {
+    const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);
+    const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);
+    return {
+        itemWidth,
+        itemHeight
+    };
+}
+function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {
+    let legendItemText = legendItem.text;
+    if (legendItemText && typeof legendItemText !== 'string') {
+        legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);
+    }
+    return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;
+}
+function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {
+    let itemHeight = _itemHeight;
+    if (typeof legendItem.text !== 'string') {
+        itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);
+    }
+    return itemHeight;
+}
+function calculateLegendItemHeight(legendItem, fontLineHeight) {
+    const labelHeight = legendItem.text ? legendItem.text.length : 0;
+    return fontLineHeight * labelHeight;
+}
+function isListened(type, opts) {
+    if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {
+        return true;
+    }
+    if (opts.onClick && (type === 'click' || type === 'mouseup')) {
+        return true;
+    }
+    return false;
+}
+var plugin_legend = {
+    id: 'legend',
+ _element: Legend,
+    start (chart, _args, options) {
+        const legend = chart.legend = new Legend({
+            ctx: chart.ctx,
+            options,
+            chart
+        });
+        layouts.configure(chart, legend, options);
+        layouts.addBox(chart, legend);
+    },
+    stop (chart) {
+        layouts.removeBox(chart, chart.legend);
+        delete chart.legend;
+    },
+    beforeUpdate (chart, _args, options) {
+        const legend = chart.legend;
+        layouts.configure(chart, legend, options);
+        legend.options = options;
+    },
+    afterUpdate (chart) {
+        const legend = chart.legend;
+        legend.buildLabels();
+        legend.adjustHitBoxes();
+    },
+    afterEvent (chart, args) {
+        if (!args.replay) {
+            chart.legend.handleEvent(args.event);
+        }
+    },
+    defaults: {
+        display: true,
+        position: 'top',
+        align: 'center',
+        fullSize: true,
+        reverse: false,
+        weight: 1000,
+        onClick (e, legendItem, legend) {
+            const index = legendItem.datasetIndex;
+            const ci = legend.chart;
+            if (ci.isDatasetVisible(index)) {
+                ci.hide(index);
+                legendItem.hidden = true;
+            } else {
+                ci.show(index);
+                legendItem.hidden = false;
+            }
+        },
+        onHover: null,
+        onLeave: null,
+        labels: {
+            color: (ctx)=>ctx.chart.options.color,
+            boxWidth: 40,
+            padding: 10,
+            generateLabels (chart) {
+                const datasets = chart.data.datasets;
+                const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;
+                return chart._getSortedDatasetMetas().map((meta)=>{
+                    const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);
+                    const borderWidth = helpers_dataset.toPadding(style.borderWidth);
+                    return {
+                        text: datasets[meta.index].label,
+                        fillStyle: style.backgroundColor,
+                        fontColor: color,
+                        hidden: !meta.visible,
+                        lineCap: style.borderCapStyle,
+                        lineDash: style.borderDash,
+                        lineDashOffset: style.borderDashOffset,
+                        lineJoin: style.borderJoinStyle,
+                        lineWidth: (borderWidth.width + borderWidth.height) / 4,
+                        strokeStyle: style.borderColor,
+                        pointStyle: pointStyle || style.pointStyle,
+                        rotation: style.rotation,
+                        textAlign: textAlign || style.textAlign,
+                        borderRadius: useBorderRadius && (borderRadius || style.borderRadius),
+                        datasetIndex: meta.index
+                    };
+                }, this);
+            }
+        },
+        title: {
+            color: (ctx)=>ctx.chart.options.color,
+            display: false,
+            position: 'center',
+            text: ''
+        }
+    },
+    descriptors: {
+        _scriptable: (name)=>!name.startsWith('on'),
+        labels: {
+            _scriptable: (name)=>![
+                    'generateLabels',
+                    'filter',
+                    'sort'
+                ].includes(name)
+        }
+    }
+};
+
+class Title extends Element {
+ constructor(config){
+        super();
+        this.chart = config.chart;
+        this.options = config.options;
+        this.ctx = config.ctx;
+        this._padding = undefined;
+        this.top = undefined;
+        this.bottom = undefined;
+        this.left = undefined;
+        this.right = undefined;
+        this.width = undefined;
+        this.height = undefined;
+        this.position = undefined;
+        this.weight = undefined;
+        this.fullSize = undefined;
+    }
+    update(maxWidth, maxHeight) {
+        const opts = this.options;
+        this.left = 0;
+        this.top = 0;
+        if (!opts.display) {
+            this.width = this.height = this.right = this.bottom = 0;
+            return;
+        }
+        this.width = this.right = maxWidth;
+        this.height = this.bottom = maxHeight;
+        const lineCount = helpers_dataset.isArray(opts.text) ? opts.text.length : 1;
+        this._padding = helpers_dataset.toPadding(opts.padding);
+        const textSize = lineCount * helpers_dataset.toFont(opts.font).lineHeight + this._padding.height;
+        if (this.isHorizontal()) {
+            this.height = textSize;
+        } else {
+            this.width = textSize;
+        }
+    }
+    isHorizontal() {
+        const pos = this.options.position;
+        return pos === 'top' || pos === 'bottom';
+    }
+    _drawArgs(offset) {
+        const { top , left , bottom , right , options  } = this;
+        const align = options.align;
+        let rotation = 0;
+        let maxWidth, titleX, titleY;
+        if (this.isHorizontal()) {
+            titleX = helpers_dataset._alignStartEnd(align, left, right);
+            titleY = top + offset;
+            maxWidth = right - left;
+        } else {
+            if (options.position === 'left') {
+                titleX = left + offset;
+                titleY = helpers_dataset._alignStartEnd(align, bottom, top);
+                rotation = helpers_dataset.PI * -0.5;
+            } else {
+                titleX = right - offset;
+                titleY = helpers_dataset._alignStartEnd(align, top, bottom);
+                rotation = helpers_dataset.PI * 0.5;
+            }
+            maxWidth = bottom - top;
+        }
+        return {
+            titleX,
+            titleY,
+            maxWidth,
+            rotation
+        };
+    }
+    draw() {
+        const ctx = this.ctx;
+        const opts = this.options;
+        if (!opts.display) {
+            return;
+        }
+        const fontOpts = helpers_dataset.toFont(opts.font);
+        const lineHeight = fontOpts.lineHeight;
+        const offset = lineHeight / 2 + this._padding.top;
+        const { titleX , titleY , maxWidth , rotation  } = this._drawArgs(offset);
+        helpers_dataset.renderText(ctx, opts.text, 0, 0, fontOpts, {
+            color: opts.color,
+            maxWidth,
+            rotation,
+            textAlign: helpers_dataset._toLeftRightCenter(opts.align),
+            textBaseline: 'middle',
+            translation: [
+                titleX,
+                titleY
+            ]
+        });
+    }
+}
+function createTitle(chart, titleOpts) {
+    const title = new Title({
+        ctx: chart.ctx,
+        options: titleOpts,
+        chart
+    });
+    layouts.configure(chart, title, titleOpts);
+    layouts.addBox(chart, title);
+    chart.titleBlock = title;
+}
+var plugin_title = {
+    id: 'title',
+ _element: Title,
+    start (chart, _args, options) {
+        createTitle(chart, options);
+    },
+    stop (chart) {
+        const titleBlock = chart.titleBlock;
+        layouts.removeBox(chart, titleBlock);
+        delete chart.titleBlock;
+    },
+    beforeUpdate (chart, _args, options) {
+        const title = chart.titleBlock;
+        layouts.configure(chart, title, options);
+        title.options = options;
+    },
+    defaults: {
+        align: 'center',
+        display: false,
+        font: {
+            weight: 'bold'
+        },
+        fullSize: true,
+        padding: 10,
+        position: 'top',
+        text: '',
+        weight: 2000
+    },
+    defaultRoutes: {
+        color: 'color'
+    },
+    descriptors: {
+        _scriptable: true,
+        _indexable: false
+    }
+};
+
+const map = new WeakMap();
+var plugin_subtitle = {
+    id: 'subtitle',
+    start (chart, _args, options) {
+        const title = new Title({
+            ctx: chart.ctx,
+            options,
+            chart
+        });
+        layouts.configure(chart, title, options);
+        layouts.addBox(chart, title);
+        map.set(chart, title);
+    },
+    stop (chart) {
+        layouts.removeBox(chart, map.get(chart));
+        map.delete(chart);
+    },
+    beforeUpdate (chart, _args, options) {
+        const title = map.get(chart);
+        layouts.configure(chart, title, options);
+        title.options = options;
+    },
+    defaults: {
+        align: 'center',
+        display: false,
+        font: {
+            weight: 'normal'
+        },
+        fullSize: true,
+        padding: 0,
+        position: 'top',
+        text: '',
+        weight: 1500
+    },
+    defaultRoutes: {
+        color: 'color'
+    },
+    descriptors: {
+        _scriptable: true,
+        _indexable: false
+    }
+};
+
+const positioners = {
+ average (items) {
+        if (!items.length) {
+            return false;
+        }
+        let i, len;
+        let xSet = new Set();
+        let y = 0;
+        let count = 0;
+        for(i = 0, len = items.length; i < len; ++i){
+            const el = items[i].element;
+            if (el && el.hasValue()) {
+                const pos = el.tooltipPosition();
+                xSet.add(pos.x);
+                y += pos.y;
+                ++count;
+            }
+        }
+        if (count === 0 || xSet.size === 0) {
+            return false;
+        }
+        const xAverage = [
+            ...xSet
+        ].reduce((a, b)=>a + b) / xSet.size;
+        return {
+            x: xAverage,
+            y: y / count
+        };
+    },
+ nearest (items, eventPosition) {
+        if (!items.length) {
+            return false;
+        }
+        let x = eventPosition.x;
+        let y = eventPosition.y;
+        let minDistance = Number.POSITIVE_INFINITY;
+        let i, len, nearestElement;
+        for(i = 0, len = items.length; i < len; ++i){
+            const el = items[i].element;
+            if (el && el.hasValue()) {
+                const center = el.getCenterPoint();
+                const d = helpers_dataset.distanceBetweenPoints(eventPosition, center);
+                if (d < minDistance) {
+                    minDistance = d;
+                    nearestElement = el;
+                }
+            }
+        }
+        if (nearestElement) {
+            const tp = nearestElement.tooltipPosition();
+            x = tp.x;
+            y = tp.y;
+        }
+        return {
+            x,
+            y
+        };
+    }
+};
+function pushOrConcat(base, toPush) {
+    if (toPush) {
+        if (helpers_dataset.isArray(toPush)) {
+            Array.prototype.push.apply(base, toPush);
+        } else {
+            base.push(toPush);
+        }
+    }
+    return base;
+}
+ function splitNewlines(str) {
+    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\n') > -1) {
+        return str.split('\n');
+    }
+    return str;
+}
+ function createTooltipItem(chart, item) {
+    const { element , datasetIndex , index  } = item;
+    const controller = chart.getDatasetMeta(datasetIndex).controller;
+    const { label , value  } = controller.getLabelAndValue(index);
+    return {
+        chart,
+        label,
+        parsed: controller.getParsed(index),
+        raw: chart.data.datasets[datasetIndex].data[index],
+        formattedValue: value,
+        dataset: controller.getDataset(),
+        dataIndex: index,
+        datasetIndex,
+        element
+    };
+}
+ function getTooltipSize(tooltip, options) {
+    const ctx = tooltip.chart.ctx;
+    const { body , footer , title  } = tooltip;
+    const { boxWidth , boxHeight  } = options;
+    const bodyFont = helpers_dataset.toFont(options.bodyFont);
+    const titleFont = helpers_dataset.toFont(options.titleFont);
+    const footerFont = helpers_dataset.toFont(options.footerFont);
+    const titleLineCount = title.length;
+    const footerLineCount = footer.length;
+    const bodyLineItemCount = body.length;
+    const padding = helpers_dataset.toPadding(options.padding);
+    let height = padding.height;
+    let width = 0;
+    let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);
+    combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;
+    if (titleLineCount) {
+        height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;
+    }
+    if (combinedBodyLength) {
+        const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;
+        height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;
+    }
+    if (footerLineCount) {
+        height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;
+    }
+    let widthPadding = 0;
+    const maxLineWidth = function(line) {
+        width = Math.max(width, ctx.measureText(line).width + widthPadding);
+    };
+    ctx.save();
+    ctx.font = titleFont.string;
+    helpers_dataset.each(tooltip.title, maxLineWidth);
+    ctx.font = bodyFont.string;
+    helpers_dataset.each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);
+    widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;
+    helpers_dataset.each(body, (bodyItem)=>{
+        helpers_dataset.each(bodyItem.before, maxLineWidth);
+        helpers_dataset.each(bodyItem.lines, maxLineWidth);
+        helpers_dataset.each(bodyItem.after, maxLineWidth);
+    });
+    widthPadding = 0;
+    ctx.font = footerFont.string;
+    helpers_dataset.each(tooltip.footer, maxLineWidth);
+    ctx.restore();
+    width += padding.width;
+    return {
+        width,
+        height
+    };
+}
+function determineYAlign(chart, size) {
+    const { y , height  } = size;
+    if (y < height / 2) {
+        return 'top';
+    } else if (y > chart.height - height / 2) {
+        return 'bottom';
+    }
+    return 'center';
+}
+function doesNotFitWithAlign(xAlign, chart, options, size) {
+    const { x , width  } = size;
+    const caret = options.caretSize + options.caretPadding;
+    if (xAlign === 'left' && x + width + caret > chart.width) {
+        return true;
+    }
+    if (xAlign === 'right' && x - width - caret < 0) {
+        return true;
+    }
+}
+function determineXAlign(chart, options, size, yAlign) {
+    const { x , width  } = size;
+    const { width: chartWidth , chartArea: { left , right  }  } = chart;
+    let xAlign = 'center';
+    if (yAlign === 'center') {
+        xAlign = x <= (left + right) / 2 ? 'left' : 'right';
+    } else if (x <= width / 2) {
+        xAlign = 'left';
+    } else if (x >= chartWidth - width / 2) {
+        xAlign = 'right';
+    }
+    if (doesNotFitWithAlign(xAlign, chart, options, size)) {
+        xAlign = 'center';
+    }
+    return xAlign;
+}
+ function determineAlignment(chart, options, size) {
+    const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);
+    return {
+        xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),
+        yAlign
+    };
+}
+function alignX(size, xAlign) {
+    let { x , width  } = size;
+    if (xAlign === 'right') {
+        x -= width;
+    } else if (xAlign === 'center') {
+        x -= width / 2;
+    }
+    return x;
+}
+function alignY(size, yAlign, paddingAndSize) {
+    let { y , height  } = size;
+    if (yAlign === 'top') {
+        y += paddingAndSize;
+    } else if (yAlign === 'bottom') {
+        y -= height + paddingAndSize;
+    } else {
+        y -= height / 2;
+    }
+    return y;
+}
+ function getBackgroundPoint(options, size, alignment, chart) {
+    const { caretSize , caretPadding , cornerRadius  } = options;
+    const { xAlign , yAlign  } = alignment;
+    const paddingAndSize = caretSize + caretPadding;
+    const { topLeft , topRight , bottomLeft , bottomRight  } = helpers_dataset.toTRBLCorners(cornerRadius);
+    let x = alignX(size, xAlign);
+    const y = alignY(size, yAlign, paddingAndSize);
+    if (yAlign === 'center') {
+        if (xAlign === 'left') {
+            x += paddingAndSize;
+        } else if (xAlign === 'right') {
+            x -= paddingAndSize;
+        }
+    } else if (xAlign === 'left') {
+        x -= Math.max(topLeft, bottomLeft) + caretSize;
+    } else if (xAlign === 'right') {
+        x += Math.max(topRight, bottomRight) + caretSize;
+    }
+    return {
+        x: helpers_dataset._limitValue(x, 0, chart.width - size.width),
+        y: helpers_dataset._limitValue(y, 0, chart.height - size.height)
+    };
+}
+function getAlignedX(tooltip, align, options) {
+    const padding = helpers_dataset.toPadding(options.padding);
+    return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;
+}
+ function getBeforeAfterBodyLines(callback) {
+    return pushOrConcat([], splitNewlines(callback));
+}
+function createTooltipContext(parent, tooltip, tooltipItems) {
+    return helpers_dataset.createContext(parent, {
+        tooltip,
+        tooltipItems,
+        type: 'tooltip'
+    });
+}
+function overrideCallbacks(callbacks, context) {
+    const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;
+    return override ? callbacks.override(override) : callbacks;
+}
+const defaultCallbacks = {
+    beforeTitle: helpers_dataset.noop,
+    title (tooltipItems) {
+        if (tooltipItems.length > 0) {
+            const item = tooltipItems[0];
+            const labels = item.chart.data.labels;
+            const labelCount = labels ? labels.length : 0;
+            if (this && this.options && this.options.mode === 'dataset') {
+                return item.dataset.label || '';
+            } else if (item.label) {
+                return item.label;
+            } else if (labelCount > 0 && item.dataIndex < labelCount) {
+                return labels[item.dataIndex];
+            }
+        }
+        return '';
+    },
+    afterTitle: helpers_dataset.noop,
+    beforeBody: helpers_dataset.noop,
+    beforeLabel: helpers_dataset.noop,
+    label (tooltipItem) {
+        if (this && this.options && this.options.mode === 'dataset') {
+            return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;
+        }
+        let label = tooltipItem.dataset.label || '';
+        if (label) {
+            label += ': ';
+        }
+        const value = tooltipItem.formattedValue;
+        if (!helpers_dataset.isNullOrUndef(value)) {
+            label += value;
+        }
+        return label;
+    },
+    labelColor (tooltipItem) {
+        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
+        const options = meta.controller.getStyle(tooltipItem.dataIndex);
+        return {
+            borderColor: options.borderColor,
+            backgroundColor: options.backgroundColor,
+            borderWidth: options.borderWidth,
+            borderDash: options.borderDash,
+            borderDashOffset: options.borderDashOffset,
+            borderRadius: 0
+        };
+    },
+    labelTextColor () {
+        return this.options.bodyColor;
+    },
+    labelPointStyle (tooltipItem) {
+        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
+        const options = meta.controller.getStyle(tooltipItem.dataIndex);
+        return {
+            pointStyle: options.pointStyle,
+            rotation: options.rotation
+        };
+    },
+    afterLabel: helpers_dataset.noop,
+    afterBody: helpers_dataset.noop,
+    beforeFooter: helpers_dataset.noop,
+    footer: helpers_dataset.noop,
+    afterFooter: helpers_dataset.noop
+};
+ function invokeCallbackWithFallback(callbacks, name, ctx, arg) {
+    const result = callbacks[name].call(ctx, arg);
+    if (typeof result === 'undefined') {
+        return defaultCallbacks[name].call(ctx, arg);
+    }
+    return result;
+}
+class Tooltip extends Element {
+ static positioners = positioners;
+    constructor(config){
+        super();
+        this.opacity = 0;
+        this._active = [];
+        this._eventPosition = undefined;
+        this._size = undefined;
+        this._cachedAnimations = undefined;
+        this._tooltipItems = [];
+        this.$animations = undefined;
+        this.$context = undefined;
+        this.chart = config.chart;
+        this.options = config.options;
+        this.dataPoints = undefined;
+        this.title = undefined;
+        this.beforeBody = undefined;
+        this.body = undefined;
+        this.afterBody = undefined;
+        this.footer = undefined;
+        this.xAlign = undefined;
+        this.yAlign = undefined;
+        this.x = undefined;
+        this.y = undefined;
+        this.height = undefined;
+        this.width = undefined;
+        this.caretX = undefined;
+        this.caretY = undefined;
+        this.labelColors = undefined;
+        this.labelPointStyles = undefined;
+        this.labelTextColors = undefined;
+    }
+    initialize(options) {
+        this.options = options;
+        this._cachedAnimations = undefined;
+        this.$context = undefined;
+    }
+ _resolveAnimations() {
+        const cached = this._cachedAnimations;
+        if (cached) {
+            return cached;
+        }
+        const chart = this.chart;
+        const options = this.options.setContext(this.getContext());
+        const opts = options.enabled && chart.options.animation && options.animations;
+        const animations = new Animations(this.chart, opts);
+        if (opts._cacheable) {
+            this._cachedAnimations = Object.freeze(animations);
+        }
+        return animations;
+    }
+ getContext() {
+        return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));
+    }
+    getTitle(context, options) {
+        const { callbacks  } = options;
+        const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);
+        const title = invokeCallbackWithFallback(callbacks, 'title', this, context);
+        const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);
+        let lines = [];
+        lines = pushOrConcat(lines, splitNewlines(beforeTitle));
+        lines = pushOrConcat(lines, splitNewlines(title));
+        lines = pushOrConcat(lines, splitNewlines(afterTitle));
+        return lines;
+    }
+    getBeforeBody(tooltipItems, options) {
+        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));
+    }
+    getBody(tooltipItems, options) {
+        const { callbacks  } = options;
+        const bodyItems = [];
+        helpers_dataset.each(tooltipItems, (context)=>{
+            const bodyItem = {
+                before: [],
+                lines: [],
+                after: []
+            };
+            const scoped = overrideCallbacks(callbacks, context);
+            pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));
+            pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));
+            pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));
+            bodyItems.push(bodyItem);
+        });
+        return bodyItems;
+    }
+    getAfterBody(tooltipItems, options) {
+        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));
+    }
+    getFooter(tooltipItems, options) {
+        const { callbacks  } = options;
+        const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);
+        const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);
+        const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);
+        let lines = [];
+        lines = pushOrConcat(lines, splitNewlines(beforeFooter));
+        lines = pushOrConcat(lines, splitNewlines(footer));
+        lines = pushOrConcat(lines, splitNewlines(afterFooter));
+        return lines;
+    }
+ _createItems(options) {
+        const active = this._active;
+        const data = this.chart.data;
+        const labelColors = [];
+        const labelPointStyles = [];
+        const labelTextColors = [];
+        let tooltipItems = [];
+        let i, len;
+        for(i = 0, len = active.length; i < len; ++i){
+            tooltipItems.push(createTooltipItem(this.chart, active[i]));
+        }
+        if (options.filter) {
+            tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));
+        }
+        if (options.itemSort) {
+            tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));
+        }
+        helpers_dataset.each(tooltipItems, (context)=>{
+            const scoped = overrideCallbacks(options.callbacks, context);
+            labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));
+            labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));
+            labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));
+        });
+        this.labelColors = labelColors;
+        this.labelPointStyles = labelPointStyles;
+        this.labelTextColors = labelTextColors;
+        this.dataPoints = tooltipItems;
+        return tooltipItems;
+    }
+    update(changed, replay) {
+        const options = this.options.setContext(this.getContext());
+        const active = this._active;
+        let properties;
+        let tooltipItems = [];
+        if (!active.length) {
+            if (this.opacity !== 0) {
+                properties = {
+                    opacity: 0
+                };
+            }
+        } else {
+            const position = positioners[options.position].call(this, active, this._eventPosition);
+            tooltipItems = this._createItems(options);
+            this.title = this.getTitle(tooltipItems, options);
+            this.beforeBody = this.getBeforeBody(tooltipItems, options);
+            this.body = this.getBody(tooltipItems, options);
+            this.afterBody = this.getAfterBody(tooltipItems, options);
+            this.footer = this.getFooter(tooltipItems, options);
+            const size = this._size = getTooltipSize(this, options);
+            const positionAndSize = Object.assign({}, position, size);
+            const alignment = determineAlignment(this.chart, options, positionAndSize);
+            const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);
+            this.xAlign = alignment.xAlign;
+            this.yAlign = alignment.yAlign;
+            properties = {
+                opacity: 1,
+                x: backgroundPoint.x,
+                y: backgroundPoint.y,
+                width: size.width,
+                height: size.height,
+                caretX: position.x,
+                caretY: position.y
+            };
+        }
+        this._tooltipItems = tooltipItems;
+        this.$context = undefined;
+        if (properties) {
+            this._resolveAnimations().update(this, properties);
+        }
+        if (changed && options.external) {
+            options.external.call(this, {
+                chart: this.chart,
+                tooltip: this,
+                replay
+            });
+        }
+    }
+    drawCaret(tooltipPoint, ctx, size, options) {
+        const caretPosition = this.getCaretPosition(tooltipPoint, size, options);
+        ctx.lineTo(caretPosition.x1, caretPosition.y1);
+        ctx.lineTo(caretPosition.x2, caretPosition.y2);
+        ctx.lineTo(caretPosition.x3, caretPosition.y3);
+    }
+    getCaretPosition(tooltipPoint, size, options) {
+        const { xAlign , yAlign  } = this;
+        const { caretSize , cornerRadius  } = options;
+        const { topLeft , topRight , bottomLeft , bottomRight  } = helpers_dataset.toTRBLCorners(cornerRadius);
+        const { x: ptX , y: ptY  } = tooltipPoint;
+        const { width , height  } = size;
+        let x1, x2, x3, y1, y2, y3;
+        if (yAlign === 'center') {
+            y2 = ptY + height / 2;
+            if (xAlign === 'left') {
+                x1 = ptX;
+                x2 = x1 - caretSize;
+                y1 = y2 + caretSize;
+                y3 = y2 - caretSize;
+            } else {
+                x1 = ptX + width;
+                x2 = x1 + caretSize;
+                y1 = y2 - caretSize;
+                y3 = y2 + caretSize;
+            }
+            x3 = x1;
+        } else {
+            if (xAlign === 'left') {
+                x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;
+            } else if (xAlign === 'right') {
+                x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;
+            } else {
+                x2 = this.caretX;
+            }
+            if (yAlign === 'top') {
+                y1 = ptY;
+                y2 = y1 - caretSize;
+                x1 = x2 - caretSize;
+                x3 = x2 + caretSize;
+            } else {
+                y1 = ptY + height;
+                y2 = y1 + caretSize;
+                x1 = x2 + caretSize;
+                x3 = x2 - caretSize;
+            }
+            y3 = y1;
+        }
+        return {
+            x1,
+            x2,
+            x3,
+            y1,
+            y2,
+            y3
+        };
+    }
+    drawTitle(pt, ctx, options) {
+        const title = this.title;
+        const length = title.length;
+        let titleFont, titleSpacing, i;
+        if (length) {
+            const rtlHelper = helpers_dataset.getRtlAdapter(options.rtl, this.x, this.width);
+            pt.x = getAlignedX(this, options.titleAlign, options);
+            ctx.textAlign = rtlHelper.textAlign(options.titleAlign);
+            ctx.textBaseline = 'middle';
+            titleFont = helpers_dataset.toFont(options.titleFont);
+            titleSpacing = options.titleSpacing;
+            ctx.fillStyle = options.titleColor;
+            ctx.font = titleFont.string;
+            for(i = 0; i < length; ++i){
+                ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);
+                pt.y += titleFont.lineHeight + titleSpacing;
+                if (i + 1 === length) {
+                    pt.y += options.titleMarginBottom - titleSpacing;
+                }
+            }
+        }
+    }
+ _drawColorBox(ctx, pt, i, rtlHelper, options) {
+        const labelColor = this.labelColors[i];
+        const labelPointStyle = this.labelPointStyles[i];
+        const { boxHeight , boxWidth  } = options;
+        const bodyFont = helpers_dataset.toFont(options.bodyFont);
+        const colorX = getAlignedX(this, 'left', options);
+        const rtlColorX = rtlHelper.x(colorX);
+        const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;
+        const colorY = pt.y + yOffSet;
+        if (options.usePointStyle) {
+            const drawOptions = {
+                radius: Math.min(boxWidth, boxHeight) / 2,
+                pointStyle: labelPointStyle.pointStyle,
+                rotation: labelPointStyle.rotation,
+                borderWidth: 1
+            };
+            const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;
+            const centerY = colorY + boxHeight / 2;
+            ctx.strokeStyle = options.multiKeyBackground;
+            ctx.fillStyle = options.multiKeyBackground;
+            helpers_dataset.drawPoint(ctx, drawOptions, centerX, centerY);
+            ctx.strokeStyle = labelColor.borderColor;
+            ctx.fillStyle = labelColor.backgroundColor;
+            helpers_dataset.drawPoint(ctx, drawOptions, centerX, centerY);
+        } else {
+            ctx.lineWidth = helpers_dataset.isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;
+            ctx.strokeStyle = labelColor.borderColor;
+            ctx.setLineDash(labelColor.borderDash || []);
+            ctx.lineDashOffset = labelColor.borderDashOffset || 0;
+            const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);
+            const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);
+            const borderRadius = helpers_dataset.toTRBLCorners(labelColor.borderRadius);
+            if (Object.values(borderRadius).some((v)=>v !== 0)) {
+                ctx.beginPath();
+                ctx.fillStyle = options.multiKeyBackground;
+                helpers_dataset.addRoundedRectPath(ctx, {
+                    x: outerX,
+                    y: colorY,
+                    w: boxWidth,
+                    h: boxHeight,
+                    radius: borderRadius
+                });
+                ctx.fill();
+                ctx.stroke();
+                ctx.fillStyle = labelColor.backgroundColor;
+                ctx.beginPath();
+                helpers_dataset.addRoundedRectPath(ctx, {
+                    x: innerX,
+                    y: colorY + 1,
+                    w: boxWidth - 2,
+                    h: boxHeight - 2,
+                    radius: borderRadius
+                });
+                ctx.fill();
+            } else {
+                ctx.fillStyle = options.multiKeyBackground;
+                ctx.fillRect(outerX, colorY, boxWidth, boxHeight);
+                ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);
+                ctx.fillStyle = labelColor.backgroundColor;
+                ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);
+            }
+        }
+        ctx.fillStyle = this.labelTextColors[i];
+    }
+    drawBody(pt, ctx, options) {
+        const { body  } = this;
+        const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding  } = options;
+        const bodyFont = helpers_dataset.toFont(options.bodyFont);
+        let bodyLineHeight = bodyFont.lineHeight;
+        let xLinePadding = 0;
+        const rtlHelper = helpers_dataset.getRtlAdapter(options.rtl, this.x, this.width);
+        const fillLineOfText = function(line) {
+            ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);
+            pt.y += bodyLineHeight + bodySpacing;
+        };
+        const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);
+        let bodyItem, textColor, lines, i, j, ilen, jlen;
+        ctx.textAlign = bodyAlign;
+        ctx.textBaseline = 'middle';
+        ctx.font = bodyFont.string;
+        pt.x = getAlignedX(this, bodyAlignForCalculation, options);
+        ctx.fillStyle = options.bodyColor;
+        helpers_dataset.each(this.beforeBody, fillLineOfText);
+        xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;
+        for(i = 0, ilen = body.length; i < ilen; ++i){
+            bodyItem = body[i];
+            textColor = this.labelTextColors[i];
+            ctx.fillStyle = textColor;
+            helpers_dataset.each(bodyItem.before, fillLineOfText);
+            lines = bodyItem.lines;
+            if (displayColors && lines.length) {
+                this._drawColorBox(ctx, pt, i, rtlHelper, options);
+                bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);
+            }
+            for(j = 0, jlen = lines.length; j < jlen; ++j){
+                fillLineOfText(lines[j]);
+                bodyLineHeight = bodyFont.lineHeight;
+            }
+            helpers_dataset.each(bodyItem.after, fillLineOfText);
+        }
+        xLinePadding = 0;
+        bodyLineHeight = bodyFont.lineHeight;
+        helpers_dataset.each(this.afterBody, fillLineOfText);
+        pt.y -= bodySpacing;
+    }
+    drawFooter(pt, ctx, options) {
+        const footer = this.footer;
+        const length = footer.length;
+        let footerFont, i;
+        if (length) {
+            const rtlHelper = helpers_dataset.getRtlAdapter(options.rtl, this.x, this.width);
+            pt.x = getAlignedX(this, options.footerAlign, options);
+            pt.y += options.footerMarginTop;
+            ctx.textAlign = rtlHelper.textAlign(options.footerAlign);
+            ctx.textBaseline = 'middle';
+            footerFont = helpers_dataset.toFont(options.footerFont);
+            ctx.fillStyle = options.footerColor;
+            ctx.font = footerFont.string;
+            for(i = 0; i < length; ++i){
+                ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);
+                pt.y += footerFont.lineHeight + options.footerSpacing;
+            }
+        }
+    }
+    drawBackground(pt, ctx, tooltipSize, options) {
+        const { xAlign , yAlign  } = this;
+        const { x , y  } = pt;
+        const { width , height  } = tooltipSize;
+        const { topLeft , topRight , bottomLeft , bottomRight  } = helpers_dataset.toTRBLCorners(options.cornerRadius);
+        ctx.fillStyle = options.backgroundColor;
+        ctx.strokeStyle = options.borderColor;
+        ctx.lineWidth = options.borderWidth;
+        ctx.beginPath();
+        ctx.moveTo(x + topLeft, y);
+        if (yAlign === 'top') {
+            this.drawCaret(pt, ctx, tooltipSize, options);
+        }
+        ctx.lineTo(x + width - topRight, y);
+        ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);
+        if (yAlign === 'center' && xAlign === 'right') {
+            this.drawCaret(pt, ctx, tooltipSize, options);
+        }
+        ctx.lineTo(x + width, y + height - bottomRight);
+        ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);
+        if (yAlign === 'bottom') {
+            this.drawCaret(pt, ctx, tooltipSize, options);
+        }
+        ctx.lineTo(x + bottomLeft, y + height);
+        ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);
+        if (yAlign === 'center' && xAlign === 'left') {
+            this.drawCaret(pt, ctx, tooltipSize, options);
+        }
+        ctx.lineTo(x, y + topLeft);
+        ctx.quadraticCurveTo(x, y, x + topLeft, y);
+        ctx.closePath();
+        ctx.fill();
+        if (options.borderWidth > 0) {
+            ctx.stroke();
+        }
+    }
+ _updateAnimationTarget(options) {
+        const chart = this.chart;
+        const anims = this.$animations;
+        const animX = anims && anims.x;
+        const animY = anims && anims.y;
+        if (animX || animY) {
+            const position = positioners[options.position].call(this, this._active, this._eventPosition);
+            if (!position) {
+                return;
+            }
+            const size = this._size = getTooltipSize(this, options);
+            const positionAndSize = Object.assign({}, position, this._size);
+            const alignment = determineAlignment(chart, options, positionAndSize);
+            const point = getBackgroundPoint(options, positionAndSize, alignment, chart);
+            if (animX._to !== point.x || animY._to !== point.y) {
+                this.xAlign = alignment.xAlign;
+                this.yAlign = alignment.yAlign;
+                this.width = size.width;
+                this.height = size.height;
+                this.caretX = position.x;
+                this.caretY = position.y;
+                this._resolveAnimations().update(this, point);
+            }
+        }
+    }
+ _willRender() {
+        return !!this.opacity;
+    }
+    draw(ctx) {
+        const options = this.options.setContext(this.getContext());
+        let opacity = this.opacity;
+        if (!opacity) {
+            return;
+        }
+        this._updateAnimationTarget(options);
+        const tooltipSize = {
+            width: this.width,
+            height: this.height
+        };
+        const pt = {
+            x: this.x,
+            y: this.y
+        };
+        opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;
+        const padding = helpers_dataset.toPadding(options.padding);
+        const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;
+        if (options.enabled && hasTooltipContent) {
+            ctx.save();
+            ctx.globalAlpha = opacity;
+            this.drawBackground(pt, ctx, tooltipSize, options);
+            helpers_dataset.overrideTextDirection(ctx, options.textDirection);
+            pt.y += padding.top;
+            this.drawTitle(pt, ctx, options);
+            this.drawBody(pt, ctx, options);
+            this.drawFooter(pt, ctx, options);
+            helpers_dataset.restoreTextDirection(ctx, options.textDirection);
+            ctx.restore();
+        }
+    }
+ getActiveElements() {
+        return this._active || [];
+    }
+ setActiveElements(activeElements, eventPosition) {
+        const lastActive = this._active;
+        const active = activeElements.map(({ datasetIndex , index  })=>{
+            const meta = this.chart.getDatasetMeta(datasetIndex);
+            if (!meta) {
+                throw new Error('Cannot find a dataset at index ' + datasetIndex);
+            }
+            return {
+                datasetIndex,
+                element: meta.data[index],
+                index
+            };
+        });
+        const changed = !helpers_dataset._elementsEqual(lastActive, active);
+        const positionChanged = this._positionChanged(active, eventPosition);
+        if (changed || positionChanged) {
+            this._active = active;
+            this._eventPosition = eventPosition;
+            this._ignoreReplayEvents = true;
+            this.update(true);
+        }
+    }
+ handleEvent(e, replay, inChartArea = true) {
+        if (replay && this._ignoreReplayEvents) {
+            return false;
+        }
+        this._ignoreReplayEvents = false;
+        const options = this.options;
+        const lastActive = this._active || [];
+        const active = this._getActiveElements(e, lastActive, replay, inChartArea);
+        const positionChanged = this._positionChanged(active, e);
+        const changed = replay || !helpers_dataset._elementsEqual(active, lastActive) || positionChanged;
+        if (changed) {
+            this._active = active;
+            if (options.enabled || options.external) {
+                this._eventPosition = {
+                    x: e.x,
+                    y: e.y
+                };
+                this.update(true, replay);
+            }
+        }
+        return changed;
+    }
+ _getActiveElements(e, lastActive, replay, inChartArea) {
+        const options = this.options;
+        if (e.type === 'mouseout') {
+            return [];
+        }
+        if (!inChartArea) {
+            return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);
+        }
+        const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);
+        if (options.reverse) {
+            active.reverse();
+        }
+        return active;
+    }
+ _positionChanged(active, e) {
+        const { caretX , caretY , options  } = this;
+        const position = positioners[options.position].call(this, active, e);
+        return position !== false && (caretX !== position.x || caretY !== position.y);
+    }
+}
+var plugin_tooltip = {
+    id: 'tooltip',
+    _element: Tooltip,
+    positioners,
+    afterInit (chart, _args, options) {
+        if (options) {
+            chart.tooltip = new Tooltip({
+                chart,
+                options
+            });
+        }
+    },
+    beforeUpdate (chart, _args, options) {
+        if (chart.tooltip) {
+            chart.tooltip.initialize(options);
+        }
+    },
+    reset (chart, _args, options) {
+        if (chart.tooltip) {
+            chart.tooltip.initialize(options);
+        }
+    },
+    afterDraw (chart) {
+        const tooltip = chart.tooltip;
+        if (tooltip && tooltip._willRender()) {
+            const args = {
+                tooltip
+            };
+            if (chart.notifyPlugins('beforeTooltipDraw', {
+                ...args,
+                cancelable: true
+            }) === false) {
+                return;
+            }
+            tooltip.draw(chart.ctx);
+            chart.notifyPlugins('afterTooltipDraw', args);
+        }
+    },
+    afterEvent (chart, args) {
+        if (chart.tooltip) {
+            const useFinalPosition = args.replay;
+            if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {
+                args.changed = true;
+            }
+        }
+    },
+    defaults: {
+        enabled: true,
+        external: null,
+        position: 'average',
+        backgroundColor: 'rgba(0,0,0,0.8)',
+        titleColor: '#fff',
+        titleFont: {
+            weight: 'bold'
+        },
+        titleSpacing: 2,
+        titleMarginBottom: 6,
+        titleAlign: 'left',
+        bodyColor: '#fff',
+        bodySpacing: 2,
+        bodyFont: {},
+        bodyAlign: 'left',
+        footerColor: '#fff',
+        footerSpacing: 2,
+        footerMarginTop: 6,
+        footerFont: {
+            weight: 'bold'
+        },
+        footerAlign: 'left',
+        padding: 6,
+        caretPadding: 2,
+        caretSize: 5,
+        cornerRadius: 6,
+        boxHeight: (ctx, opts)=>opts.bodyFont.size,
+        boxWidth: (ctx, opts)=>opts.bodyFont.size,
+        multiKeyBackground: '#fff',
+        displayColors: true,
+        boxPadding: 0,
+        borderColor: 'rgba(0,0,0,0)',
+        borderWidth: 0,
+        animation: {
+            duration: 400,
+            easing: 'easeOutQuart'
+        },
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'x',
+                    'y',
+                    'width',
+                    'height',
+                    'caretX',
+                    'caretY'
+                ]
+            },
+            opacity: {
+                easing: 'linear',
+                duration: 200
+            }
+        },
+        callbacks: defaultCallbacks
+    },
+    defaultRoutes: {
+        bodyFont: 'font',
+        footerFont: 'font',
+        titleFont: 'font'
+    },
+    descriptors: {
+        _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',
+        _indexable: false,
+        callbacks: {
+            _scriptable: false,
+            _indexable: false
+        },
+        animation: {
+            _fallback: false
+        },
+        animations: {
+            _fallback: 'animation'
+        }
+    },
+    additionalOptionScopes: [
+        'interaction'
+    ]
+};
+
+var plugins = /*#__PURE__*/Object.freeze({
+__proto__: null,
+Colors: plugin_colors,
+Decimation: plugin_decimation,
+Filler: index,
+Legend: plugin_legend,
+SubTitle: plugin_subtitle,
+Title: plugin_title,
+Tooltip: plugin_tooltip
+});
+
+const addIfString = (labels, raw, index, addedLabels)=>{
+    if (typeof raw === 'string') {
+        index = labels.push(raw) - 1;
+        addedLabels.unshift({
+            index,
+            label: raw
+        });
+    } else if (isNaN(raw)) {
+        index = null;
+    }
+    return index;
+};
+function findOrAddLabel(labels, raw, index, addedLabels) {
+    const first = labels.indexOf(raw);
+    if (first === -1) {
+        return addIfString(labels, raw, index, addedLabels);
+    }
+    const last = labels.lastIndexOf(raw);
+    return first !== last ? index : first;
+}
+const validIndex = (index, max)=>index === null ? null : helpers_dataset._limitValue(Math.round(index), 0, max);
+function _getLabelForValue(value) {
+    const labels = this.getLabels();
+    if (value >= 0 && value < labels.length) {
+        return labels[value];
+    }
+    return value;
+}
+class CategoryScale extends Scale {
+    static id = 'category';
+ static defaults = {
+        ticks: {
+            callback: _getLabelForValue
+        }
+    };
+    constructor(cfg){
+        super(cfg);
+         this._startValue = undefined;
+        this._valueRange = 0;
+        this._addedLabels = [];
+    }
+    init(scaleOptions) {
+        const added = this._addedLabels;
+        if (added.length) {
+            const labels = this.getLabels();
+            for (const { index , label  } of added){
+                if (labels[index] === label) {
+                    labels.splice(index, 1);
+                }
+            }
+            this._addedLabels = [];
+        }
+        super.init(scaleOptions);
+    }
+    parse(raw, index) {
+        if (helpers_dataset.isNullOrUndef(raw)) {
+            return null;
+        }
+        const labels = this.getLabels();
+        index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, helpers_dataset.valueOrDefault(index, raw), this._addedLabels);
+        return validIndex(index, labels.length - 1);
+    }
+    determineDataLimits() {
+        const { minDefined , maxDefined  } = this.getUserBounds();
+        let { min , max  } = this.getMinMax(true);
+        if (this.options.bounds === 'ticks') {
+            if (!minDefined) {
+                min = 0;
+            }
+            if (!maxDefined) {
+                max = this.getLabels().length - 1;
+            }
+        }
+        this.min = min;
+        this.max = max;
+    }
+    buildTicks() {
+        const min = this.min;
+        const max = this.max;
+        const offset = this.options.offset;
+        const ticks = [];
+        let labels = this.getLabels();
+        labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);
+        this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);
+        this._startValue = this.min - (offset ? 0.5 : 0);
+        for(let value = min; value <= max; value++){
+            ticks.push({
+                value
+            });
+        }
+        return ticks;
+    }
+    getLabelForValue(value) {
+        return _getLabelForValue.call(this, value);
+    }
+ configure() {
+        super.configure();
+        if (!this.isHorizontal()) {
+            this._reversePixels = !this._reversePixels;
+        }
+    }
+    getPixelForValue(value) {
+        if (typeof value !== 'number') {
+            value = this.parse(value);
+        }
+        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
+    }
+    getPixelForTick(index) {
+        const ticks = this.ticks;
+        if (index < 0 || index > ticks.length - 1) {
+            return null;
+        }
+        return this.getPixelForValue(ticks[index].value);
+    }
+    getValueForPixel(pixel) {
+        return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);
+    }
+    getBasePixel() {
+        return this.bottom;
+    }
+}
+
+function generateTicks$1(generationOptions, dataRange) {
+    const ticks = [];
+    const MIN_SPACING = 1e-14;
+    const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds  } = generationOptions;
+    const unit = step || 1;
+    const maxSpaces = maxTicks - 1;
+    const { min: rmin , max: rmax  } = dataRange;
+    const minDefined = !helpers_dataset.isNullOrUndef(min);
+    const maxDefined = !helpers_dataset.isNullOrUndef(max);
+    const countDefined = !helpers_dataset.isNullOrUndef(count);
+    const minSpacing = (rmax - rmin) / (maxDigits + 1);
+    let spacing = helpers_dataset.niceNum((rmax - rmin) / maxSpaces / unit) * unit;
+    let factor, niceMin, niceMax, numSpaces;
+    if (spacing < MIN_SPACING && !minDefined && !maxDefined) {
+        return [
+            {
+                value: rmin
+            },
+            {
+                value: rmax
+            }
+        ];
+    }
+    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);
+    if (numSpaces > maxSpaces) {
+        spacing = helpers_dataset.niceNum(numSpaces * spacing / maxSpaces / unit) * unit;
+    }
+    if (!helpers_dataset.isNullOrUndef(precision)) {
+        factor = Math.pow(10, precision);
+        spacing = Math.ceil(spacing * factor) / factor;
+    }
+    if (bounds === 'ticks') {
+        niceMin = Math.floor(rmin / spacing) * spacing;
+        niceMax = Math.ceil(rmax / spacing) * spacing;
+    } else {
+        niceMin = rmin;
+        niceMax = rmax;
+    }
+    if (minDefined && maxDefined && step && helpers_dataset.almostWhole((max - min) / step, spacing / 1000)) {
+        numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));
+        spacing = (max - min) / numSpaces;
+        niceMin = min;
+        niceMax = max;
+    } else if (countDefined) {
+        niceMin = minDefined ? min : niceMin;
+        niceMax = maxDefined ? max : niceMax;
+        numSpaces = count - 1;
+        spacing = (niceMax - niceMin) / numSpaces;
+    } else {
+        numSpaces = (niceMax - niceMin) / spacing;
+        if (helpers_dataset.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {
+            numSpaces = Math.round(numSpaces);
+        } else {
+            numSpaces = Math.ceil(numSpaces);
+        }
+    }
+    const decimalPlaces = Math.max(helpers_dataset._decimalPlaces(spacing), helpers_dataset._decimalPlaces(niceMin));
+    factor = Math.pow(10, helpers_dataset.isNullOrUndef(precision) ? decimalPlaces : precision);
+    niceMin = Math.round(niceMin * factor) / factor;
+    niceMax = Math.round(niceMax * factor) / factor;
+    let j = 0;
+    if (minDefined) {
+        if (includeBounds && niceMin !== min) {
+            ticks.push({
+                value: min
+            });
+            if (niceMin < min) {
+                j++;
+            }
+            if (helpers_dataset.almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {
+                j++;
+            }
+        } else if (niceMin < min) {
+            j++;
+        }
+    }
+    for(; j < numSpaces; ++j){
+        const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;
+        if (maxDefined && tickValue > max) {
+            break;
+        }
+        ticks.push({
+            value: tickValue
+        });
+    }
+    if (maxDefined && includeBounds && niceMax !== max) {
+        if (ticks.length && helpers_dataset.almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {
+            ticks[ticks.length - 1].value = max;
+        } else {
+            ticks.push({
+                value: max
+            });
+        }
+    } else if (!maxDefined || niceMax === max) {
+        ticks.push({
+            value: niceMax
+        });
+    }
+    return ticks;
+}
+function relativeLabelSize(value, minSpacing, { horizontal , minRotation  }) {
+    const rad = helpers_dataset.toRadians(minRotation);
+    const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;
+    const length = 0.75 * minSpacing * ('' + value).length;
+    return Math.min(minSpacing / ratio, length);
+}
+class LinearScaleBase extends Scale {
+    constructor(cfg){
+        super(cfg);
+         this.start = undefined;
+         this.end = undefined;
+         this._startValue = undefined;
+         this._endValue = undefined;
+        this._valueRange = 0;
+    }
+    parse(raw, index) {
+        if (helpers_dataset.isNullOrUndef(raw)) {
+            return null;
+        }
+        if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {
+            return null;
+        }
+        return +raw;
+    }
+    handleTickRangeOptions() {
+        const { beginAtZero  } = this.options;
+        const { minDefined , maxDefined  } = this.getUserBounds();
+        let { min , max  } = this;
+        const setMin = (v)=>min = minDefined ? min : v;
+        const setMax = (v)=>max = maxDefined ? max : v;
+        if (beginAtZero) {
+            const minSign = helpers_dataset.sign(min);
+            const maxSign = helpers_dataset.sign(max);
+            if (minSign < 0 && maxSign < 0) {
+                setMax(0);
+            } else if (minSign > 0 && maxSign > 0) {
+                setMin(0);
+            }
+        }
+        if (min === max) {
+            let offset = max === 0 ? 1 : Math.abs(max * 0.05);
+            setMax(max + offset);
+            if (!beginAtZero) {
+                setMin(min - offset);
+            }
+        }
+        this.min = min;
+        this.max = max;
+    }
+    getTickLimit() {
+        const tickOpts = this.options.ticks;
+        let { maxTicksLimit , stepSize  } = tickOpts;
+        let maxTicks;
+        if (stepSize) {
+            maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;
+            if (maxTicks > 1000) {
+                console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);
+                maxTicks = 1000;
+            }
+        } else {
+            maxTicks = this.computeTickLimit();
+            maxTicksLimit = maxTicksLimit || 11;
+        }
+        if (maxTicksLimit) {
+            maxTicks = Math.min(maxTicksLimit, maxTicks);
+        }
+        return maxTicks;
+    }
+ computeTickLimit() {
+        return Number.POSITIVE_INFINITY;
+    }
+    buildTicks() {
+        const opts = this.options;
+        const tickOpts = opts.ticks;
+        let maxTicks = this.getTickLimit();
+        maxTicks = Math.max(2, maxTicks);
+        const numericGeneratorOptions = {
+            maxTicks,
+            bounds: opts.bounds,
+            min: opts.min,
+            max: opts.max,
+            precision: tickOpts.precision,
+            step: tickOpts.stepSize,
+            count: tickOpts.count,
+            maxDigits: this._maxDigits(),
+            horizontal: this.isHorizontal(),
+            minRotation: tickOpts.minRotation || 0,
+            includeBounds: tickOpts.includeBounds !== false
+        };
+        const dataRange = this._range || this;
+        const ticks = generateTicks$1(numericGeneratorOptions, dataRange);
+        if (opts.bounds === 'ticks') {
+            helpers_dataset._setMinAndMaxByKey(ticks, this, 'value');
+        }
+        if (opts.reverse) {
+            ticks.reverse();
+            this.start = this.max;
+            this.end = this.min;
+        } else {
+            this.start = this.min;
+            this.end = this.max;
+        }
+        return ticks;
+    }
+ configure() {
+        const ticks = this.ticks;
+        let start = this.min;
+        let end = this.max;
+        super.configure();
+        if (this.options.offset && ticks.length) {
+            const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;
+            start -= offset;
+            end += offset;
+        }
+        this._startValue = start;
+        this._endValue = end;
+        this._valueRange = end - start;
+    }
+    getLabelForValue(value) {
+        return helpers_dataset.formatNumber(value, this.chart.options.locale, this.options.ticks.format);
+    }
+}
+
+class LinearScale extends LinearScaleBase {
+    static id = 'linear';
+ static defaults = {
+        ticks: {
+            callback: helpers_dataset.Ticks.formatters.numeric
+        }
+    };
+    determineDataLimits() {
+        const { min , max  } = this.getMinMax(true);
+        this.min = helpers_dataset.isNumberFinite(min) ? min : 0;
+        this.max = helpers_dataset.isNumberFinite(max) ? max : 1;
+        this.handleTickRangeOptions();
+    }
+ computeTickLimit() {
+        const horizontal = this.isHorizontal();
+        const length = horizontal ? this.width : this.height;
+        const minRotation = helpers_dataset.toRadians(this.options.ticks.minRotation);
+        const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;
+        const tickFont = this._resolveTickFontOptions(0);
+        return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));
+    }
+    getPixelForValue(value) {
+        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
+    }
+    getValueForPixel(pixel) {
+        return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;
+    }
+}
+
+const log10Floor = (v)=>Math.floor(helpers_dataset.log10(v));
+const changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);
+function isMajor(tickVal) {
+    const remain = tickVal / Math.pow(10, log10Floor(tickVal));
+    return remain === 1;
+}
+function steps(min, max, rangeExp) {
+    const rangeStep = Math.pow(10, rangeExp);
+    const start = Math.floor(min / rangeStep);
+    const end = Math.ceil(max / rangeStep);
+    return end - start;
+}
+function startExp(min, max) {
+    const range = max - min;
+    let rangeExp = log10Floor(range);
+    while(steps(min, max, rangeExp) > 10){
+        rangeExp++;
+    }
+    while(steps(min, max, rangeExp) < 10){
+        rangeExp--;
+    }
+    return Math.min(rangeExp, log10Floor(min));
+}
+ function generateTicks(generationOptions, { min , max  }) {
+    min = helpers_dataset.finiteOrDefault(generationOptions.min, min);
+    const ticks = [];
+    const minExp = log10Floor(min);
+    let exp = startExp(min, max);
+    let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;
+    const stepSize = Math.pow(10, exp);
+    const base = minExp > exp ? Math.pow(10, minExp) : 0;
+    const start = Math.round((min - base) * precision) / precision;
+    const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;
+    let significand = Math.floor((start - offset) / Math.pow(10, exp));
+    let value = helpers_dataset.finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);
+    while(value < max){
+        ticks.push({
+            value,
+            major: isMajor(value),
+            significand
+        });
+        if (significand >= 10) {
+            significand = significand < 15 ? 15 : 20;
+        } else {
+            significand++;
+        }
+        if (significand >= 20) {
+            exp++;
+            significand = 2;
+            precision = exp >= 0 ? 1 : precision;
+        }
+        value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;
+    }
+    const lastTick = helpers_dataset.finiteOrDefault(generationOptions.max, value);
+    ticks.push({
+        value: lastTick,
+        major: isMajor(lastTick),
+        significand
+    });
+    return ticks;
+}
+class LogarithmicScale extends Scale {
+    static id = 'logarithmic';
+ static defaults = {
+        ticks: {
+            callback: helpers_dataset.Ticks.formatters.logarithmic,
+            major: {
+                enabled: true
+            }
+        }
+    };
+    constructor(cfg){
+        super(cfg);
+         this.start = undefined;
+         this.end = undefined;
+         this._startValue = undefined;
+        this._valueRange = 0;
+    }
+    parse(raw, index) {
+        const value = LinearScaleBase.prototype.parse.apply(this, [
+            raw,
+            index
+        ]);
+        if (value === 0) {
+            this._zero = true;
+            return undefined;
+        }
+        return helpers_dataset.isNumberFinite(value) && value > 0 ? value : null;
+    }
+    determineDataLimits() {
+        const { min , max  } = this.getMinMax(true);
+        this.min = helpers_dataset.isNumberFinite(min) ? Math.max(0, min) : null;
+        this.max = helpers_dataset.isNumberFinite(max) ? Math.max(0, max) : null;
+        if (this.options.beginAtZero) {
+            this._zero = true;
+        }
+        if (this._zero && this.min !== this._suggestedMin && !helpers_dataset.isNumberFinite(this._userMin)) {
+            this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);
+        }
+        this.handleTickRangeOptions();
+    }
+    handleTickRangeOptions() {
+        const { minDefined , maxDefined  } = this.getUserBounds();
+        let min = this.min;
+        let max = this.max;
+        const setMin = (v)=>min = minDefined ? min : v;
+        const setMax = (v)=>max = maxDefined ? max : v;
+        if (min === max) {
+            if (min <= 0) {
+                setMin(1);
+                setMax(10);
+            } else {
+                setMin(changeExponent(min, -1));
+                setMax(changeExponent(max, +1));
+            }
+        }
+        if (min <= 0) {
+            setMin(changeExponent(max, -1));
+        }
+        if (max <= 0) {
+            setMax(changeExponent(min, +1));
+        }
+        this.min = min;
+        this.max = max;
+    }
+    buildTicks() {
+        const opts = this.options;
+        const generationOptions = {
+            min: this._userMin,
+            max: this._userMax
+        };
+        const ticks = generateTicks(generationOptions, this);
+        if (opts.bounds === 'ticks') {
+            helpers_dataset._setMinAndMaxByKey(ticks, this, 'value');
+        }
+        if (opts.reverse) {
+            ticks.reverse();
+            this.start = this.max;
+            this.end = this.min;
+        } else {
+            this.start = this.min;
+            this.end = this.max;
+        }
+        return ticks;
+    }
+ getLabelForValue(value) {
+        return value === undefined ? '0' : helpers_dataset.formatNumber(value, this.chart.options.locale, this.options.ticks.format);
+    }
+ configure() {
+        const start = this.min;
+        super.configure();
+        this._startValue = helpers_dataset.log10(start);
+        this._valueRange = helpers_dataset.log10(this.max) - helpers_dataset.log10(start);
+    }
+    getPixelForValue(value) {
+        if (value === undefined || value === 0) {
+            value = this.min;
+        }
+        if (value === null || isNaN(value)) {
+            return NaN;
+        }
+        return this.getPixelForDecimal(value === this.min ? 0 : (helpers_dataset.log10(value) - this._startValue) / this._valueRange);
+    }
+    getValueForPixel(pixel) {
+        const decimal = this.getDecimalForPixel(pixel);
+        return Math.pow(10, this._startValue + decimal * this._valueRange);
+    }
+}
+
+function getTickBackdropHeight(opts) {
+    const tickOpts = opts.ticks;
+    if (tickOpts.display && opts.display) {
+        const padding = helpers_dataset.toPadding(tickOpts.backdropPadding);
+        return helpers_dataset.valueOrDefault(tickOpts.font && tickOpts.font.size, helpers_dataset.defaults.font.size) + padding.height;
+    }
+    return 0;
+}
+function measureLabelSize(ctx, font, label) {
+    label = helpers_dataset.isArray(label) ? label : [
+        label
+    ];
+    return {
+        w: helpers_dataset._longestText(ctx, font.string, label),
+        h: label.length * font.lineHeight
+    };
+}
+function determineLimits(angle, pos, size, min, max) {
+    if (angle === min || angle === max) {
+        return {
+            start: pos - size / 2,
+            end: pos + size / 2
+        };
+    } else if (angle < min || angle > max) {
+        return {
+            start: pos - size,
+            end: pos
+        };
+    }
+    return {
+        start: pos,
+        end: pos + size
+    };
+}
+ function fitWithPointLabels(scale) {
+    const orig = {
+        l: scale.left + scale._padding.left,
+        r: scale.right - scale._padding.right,
+        t: scale.top + scale._padding.top,
+        b: scale.bottom - scale._padding.bottom
+    };
+    const limits = Object.assign({}, orig);
+    const labelSizes = [];
+    const padding = [];
+    const valueCount = scale._pointLabels.length;
+    const pointLabelOpts = scale.options.pointLabels;
+    const additionalAngle = pointLabelOpts.centerPointLabels ? helpers_dataset.PI / valueCount : 0;
+    for(let i = 0; i < valueCount; i++){
+        const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));
+        padding[i] = opts.padding;
+        const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);
+        const plFont = helpers_dataset.toFont(opts.font);
+        const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);
+        labelSizes[i] = textSize;
+        const angleRadians = helpers_dataset._normalizeAngle(scale.getIndexAngle(i) + additionalAngle);
+        const angle = Math.round(helpers_dataset.toDegrees(angleRadians));
+        const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
+        const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
+        updateLimits(limits, orig, angleRadians, hLimits, vLimits);
+    }
+    scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);
+    scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);
+}
+function updateLimits(limits, orig, angle, hLimits, vLimits) {
+    const sin = Math.abs(Math.sin(angle));
+    const cos = Math.abs(Math.cos(angle));
+    let x = 0;
+    let y = 0;
+    if (hLimits.start < orig.l) {
+        x = (orig.l - hLimits.start) / sin;
+        limits.l = Math.min(limits.l, orig.l - x);
+    } else if (hLimits.end > orig.r) {
+        x = (hLimits.end - orig.r) / sin;
+        limits.r = Math.max(limits.r, orig.r + x);
+    }
+    if (vLimits.start < orig.t) {
+        y = (orig.t - vLimits.start) / cos;
+        limits.t = Math.min(limits.t, orig.t - y);
+    } else if (vLimits.end > orig.b) {
+        y = (vLimits.end - orig.b) / cos;
+        limits.b = Math.max(limits.b, orig.b + y);
+    }
+}
+function createPointLabelItem(scale, index, itemOpts) {
+    const outerDistance = scale.drawingArea;
+    const { extra , additionalAngle , padding , size  } = itemOpts;
+    const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);
+    const angle = Math.round(helpers_dataset.toDegrees(helpers_dataset._normalizeAngle(pointLabelPosition.angle + helpers_dataset.HALF_PI)));
+    const y = yForAngle(pointLabelPosition.y, size.h, angle);
+    const textAlign = getTextAlignForAngle(angle);
+    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);
+    return {
+        visible: true,
+        x: pointLabelPosition.x,
+        y,
+        textAlign,
+        left,
+        top: y,
+        right: left + size.w,
+        bottom: y + size.h
+    };
+}
+function isNotOverlapped(item, area) {
+    if (!area) {
+        return true;
+    }
+    const { left , top , right , bottom  } = item;
+    const apexesInArea = helpers_dataset._isPointInArea({
+        x: left,
+        y: top
+    }, area) || helpers_dataset._isPointInArea({
+        x: left,
+        y: bottom
+    }, area) || helpers_dataset._isPointInArea({
+        x: right,
+        y: top
+    }, area) || helpers_dataset._isPointInArea({
+        x: right,
+        y: bottom
+    }, area);
+    return !apexesInArea;
+}
+function buildPointLabelItems(scale, labelSizes, padding) {
+    const items = [];
+    const valueCount = scale._pointLabels.length;
+    const opts = scale.options;
+    const { centerPointLabels , display  } = opts.pointLabels;
+    const itemOpts = {
+        extra: getTickBackdropHeight(opts) / 2,
+        additionalAngle: centerPointLabels ? helpers_dataset.PI / valueCount : 0
+    };
+    let area;
+    for(let i = 0; i < valueCount; i++){
+        itemOpts.padding = padding[i];
+        itemOpts.size = labelSizes[i];
+        const item = createPointLabelItem(scale, i, itemOpts);
+        items.push(item);
+        if (display === 'auto') {
+            item.visible = isNotOverlapped(item, area);
+            if (item.visible) {
+                area = item;
+            }
+        }
+    }
+    return items;
+}
+function getTextAlignForAngle(angle) {
+    if (angle === 0 || angle === 180) {
+        return 'center';
+    } else if (angle < 180) {
+        return 'left';
+    }
+    return 'right';
+}
+function leftForTextAlign(x, w, align) {
+    if (align === 'right') {
+        x -= w;
+    } else if (align === 'center') {
+        x -= w / 2;
+    }
+    return x;
+}
+function yForAngle(y, h, angle) {
+    if (angle === 90 || angle === 270) {
+        y -= h / 2;
+    } else if (angle > 270 || angle < 90) {
+        y -= h;
+    }
+    return y;
+}
+function drawPointLabelBox(ctx, opts, item) {
+    const { left , top , right , bottom  } = item;
+    const { backdropColor  } = opts;
+    if (!helpers_dataset.isNullOrUndef(backdropColor)) {
+        const borderRadius = helpers_dataset.toTRBLCorners(opts.borderRadius);
+        const padding = helpers_dataset.toPadding(opts.backdropPadding);
+        ctx.fillStyle = backdropColor;
+        const backdropLeft = left - padding.left;
+        const backdropTop = top - padding.top;
+        const backdropWidth = right - left + padding.width;
+        const backdropHeight = bottom - top + padding.height;
+        if (Object.values(borderRadius).some((v)=>v !== 0)) {
+            ctx.beginPath();
+            helpers_dataset.addRoundedRectPath(ctx, {
+                x: backdropLeft,
+                y: backdropTop,
+                w: backdropWidth,
+                h: backdropHeight,
+                radius: borderRadius
+            });
+            ctx.fill();
+        } else {
+            ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);
+        }
+    }
+}
+function drawPointLabels(scale, labelCount) {
+    const { ctx , options: { pointLabels  }  } = scale;
+    for(let i = labelCount - 1; i >= 0; i--){
+        const item = scale._pointLabelItems[i];
+        if (!item.visible) {
+            continue;
+        }
+        const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));
+        drawPointLabelBox(ctx, optsAtIndex, item);
+        const plFont = helpers_dataset.toFont(optsAtIndex.font);
+        const { x , y , textAlign  } = item;
+        helpers_dataset.renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {
+            color: optsAtIndex.color,
+            textAlign: textAlign,
+            textBaseline: 'middle'
+        });
+    }
+}
+function pathRadiusLine(scale, radius, circular, labelCount) {
+    const { ctx  } = scale;
+    if (circular) {
+        ctx.arc(scale.xCenter, scale.yCenter, radius, 0, helpers_dataset.TAU);
+    } else {
+        let pointPosition = scale.getPointPosition(0, radius);
+        ctx.moveTo(pointPosition.x, pointPosition.y);
+        for(let i = 1; i < labelCount; i++){
+            pointPosition = scale.getPointPosition(i, radius);
+            ctx.lineTo(pointPosition.x, pointPosition.y);
+        }
+    }
+}
+function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {
+    const ctx = scale.ctx;
+    const circular = gridLineOpts.circular;
+    const { color , lineWidth  } = gridLineOpts;
+    if (!circular && !labelCount || !color || !lineWidth || radius < 0) {
+        return;
+    }
+    ctx.save();
+    ctx.strokeStyle = color;
+    ctx.lineWidth = lineWidth;
+    ctx.setLineDash(borderOpts.dash || []);
+    ctx.lineDashOffset = borderOpts.dashOffset;
+    ctx.beginPath();
+    pathRadiusLine(scale, radius, circular, labelCount);
+    ctx.closePath();
+    ctx.stroke();
+    ctx.restore();
+}
+function createPointLabelContext(parent, index, label) {
+    return helpers_dataset.createContext(parent, {
+        label,
+        index,
+        type: 'pointLabel'
+    });
+}
+class RadialLinearScale extends LinearScaleBase {
+    static id = 'radialLinear';
+ static defaults = {
+        display: true,
+        animate: true,
+        position: 'chartArea',
+        angleLines: {
+            display: true,
+            lineWidth: 1,
+            borderDash: [],
+            borderDashOffset: 0.0
+        },
+        grid: {
+            circular: false
+        },
+        startAngle: 0,
+        ticks: {
+            showLabelBackdrop: true,
+            callback: helpers_dataset.Ticks.formatters.numeric
+        },
+        pointLabels: {
+            backdropColor: undefined,
+            backdropPadding: 2,
+            display: true,
+            font: {
+                size: 10
+            },
+            callback (label) {
+                return label;
+            },
+            padding: 5,
+            centerPointLabels: false
+        }
+    };
+    static defaultRoutes = {
+        'angleLines.color': 'borderColor',
+        'pointLabels.color': 'color',
+        'ticks.color': 'color'
+    };
+    static descriptors = {
+        angleLines: {
+            _fallback: 'grid'
+        }
+    };
+    constructor(cfg){
+        super(cfg);
+         this.xCenter = undefined;
+         this.yCenter = undefined;
+         this.drawingArea = undefined;
+         this._pointLabels = [];
+        this._pointLabelItems = [];
+    }
+    setDimensions() {
+        const padding = this._padding = helpers_dataset.toPadding(getTickBackdropHeight(this.options) / 2);
+        const w = this.width = this.maxWidth - padding.width;
+        const h = this.height = this.maxHeight - padding.height;
+        this.xCenter = Math.floor(this.left + w / 2 + padding.left);
+        this.yCenter = Math.floor(this.top + h / 2 + padding.top);
+        this.drawingArea = Math.floor(Math.min(w, h) / 2);
+    }
+    determineDataLimits() {
+        const { min , max  } = this.getMinMax(false);
+        this.min = helpers_dataset.isNumberFinite(min) && !isNaN(min) ? min : 0;
+        this.max = helpers_dataset.isNumberFinite(max) && !isNaN(max) ? max : 0;
+        this.handleTickRangeOptions();
+    }
+ computeTickLimit() {
+        return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));
+    }
+    generateTickLabels(ticks) {
+        LinearScaleBase.prototype.generateTickLabels.call(this, ticks);
+        this._pointLabels = this.getLabels().map((value, index)=>{
+            const label = helpers_dataset.callback(this.options.pointLabels.callback, [
+                value,
+                index
+            ], this);
+            return label || label === 0 ? label : '';
+        }).filter((v, i)=>this.chart.getDataVisibility(i));
+    }
+    fit() {
+        const opts = this.options;
+        if (opts.display && opts.pointLabels.display) {
+            fitWithPointLabels(this);
+        } else {
+            this.setCenterPoint(0, 0, 0, 0);
+        }
+    }
+    setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {
+        this.xCenter += Math.floor((leftMovement - rightMovement) / 2);
+        this.yCenter += Math.floor((topMovement - bottomMovement) / 2);
+        this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));
+    }
+    getIndexAngle(index) {
+        const angleMultiplier = helpers_dataset.TAU / (this._pointLabels.length || 1);
+        const startAngle = this.options.startAngle || 0;
+        return helpers_dataset._normalizeAngle(index * angleMultiplier + helpers_dataset.toRadians(startAngle));
+    }
+    getDistanceFromCenterForValue(value) {
+        if (helpers_dataset.isNullOrUndef(value)) {
+            return NaN;
+        }
+        const scalingFactor = this.drawingArea / (this.max - this.min);
+        if (this.options.reverse) {
+            return (this.max - value) * scalingFactor;
+        }
+        return (value - this.min) * scalingFactor;
+    }
+    getValueForDistanceFromCenter(distance) {
+        if (helpers_dataset.isNullOrUndef(distance)) {
+            return NaN;
+        }
+        const scaledDistance = distance / (this.drawingArea / (this.max - this.min));
+        return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;
+    }
+    getPointLabelContext(index) {
+        const pointLabels = this._pointLabels || [];
+        if (index >= 0 && index < pointLabels.length) {
+            const pointLabel = pointLabels[index];
+            return createPointLabelContext(this.getContext(), index, pointLabel);
+        }
+    }
+    getPointPosition(index, distanceFromCenter, additionalAngle = 0) {
+        const angle = this.getIndexAngle(index) - helpers_dataset.HALF_PI + additionalAngle;
+        return {
+            x: Math.cos(angle) * distanceFromCenter + this.xCenter,
+            y: Math.sin(angle) * distanceFromCenter + this.yCenter,
+            angle
+        };
+    }
+    getPointPositionForValue(index, value) {
+        return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
+    }
+    getBasePosition(index) {
+        return this.getPointPositionForValue(index || 0, this.getBaseValue());
+    }
+    getPointLabelPosition(index) {
+        const { left , top , right , bottom  } = this._pointLabelItems[index];
+        return {
+            left,
+            top,
+            right,
+            bottom
+        };
+    }
+ drawBackground() {
+        const { backgroundColor , grid: { circular  }  } = this.options;
+        if (backgroundColor) {
+            const ctx = this.ctx;
+            ctx.save();
+            ctx.beginPath();
+            pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);
+            ctx.closePath();
+            ctx.fillStyle = backgroundColor;
+            ctx.fill();
+            ctx.restore();
+        }
+    }
+ drawGrid() {
+        const ctx = this.ctx;
+        const opts = this.options;
+        const { angleLines , grid , border  } = opts;
+        const labelCount = this._pointLabels.length;
+        let i, offset, position;
+        if (opts.pointLabels.display) {
+            drawPointLabels(this, labelCount);
+        }
+        if (grid.display) {
+            this.ticks.forEach((tick, index)=>{
+                if (index !== 0 || index === 0 && this.min < 0) {
+                    offset = this.getDistanceFromCenterForValue(tick.value);
+                    const context = this.getContext(index);
+                    const optsAtIndex = grid.setContext(context);
+                    const optsAtIndexBorder = border.setContext(context);
+                    drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);
+                }
+            });
+        }
+        if (angleLines.display) {
+            ctx.save();
+            for(i = labelCount - 1; i >= 0; i--){
+                const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));
+                const { color , lineWidth  } = optsAtIndex;
+                if (!lineWidth || !color) {
+                    continue;
+                }
+                ctx.lineWidth = lineWidth;
+                ctx.strokeStyle = color;
+                ctx.setLineDash(optsAtIndex.borderDash);
+                ctx.lineDashOffset = optsAtIndex.borderDashOffset;
+                offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);
+                position = this.getPointPosition(i, offset);
+                ctx.beginPath();
+                ctx.moveTo(this.xCenter, this.yCenter);
+                ctx.lineTo(position.x, position.y);
+                ctx.stroke();
+            }
+            ctx.restore();
+        }
+    }
+ drawBorder() {}
+ drawLabels() {
+        const ctx = this.ctx;
+        const opts = this.options;
+        const tickOpts = opts.ticks;
+        if (!tickOpts.display) {
+            return;
+        }
+        const startAngle = this.getIndexAngle(0);
+        let offset, width;
+        ctx.save();
+        ctx.translate(this.xCenter, this.yCenter);
+        ctx.rotate(startAngle);
+        ctx.textAlign = 'center';
+        ctx.textBaseline = 'middle';
+        this.ticks.forEach((tick, index)=>{
+            if (index === 0 && this.min >= 0 && !opts.reverse) {
+                return;
+            }
+            const optsAtIndex = tickOpts.setContext(this.getContext(index));
+            const tickFont = helpers_dataset.toFont(optsAtIndex.font);
+            offset = this.getDistanceFromCenterForValue(this.ticks[index].value);
+            if (optsAtIndex.showLabelBackdrop) {
+                ctx.font = tickFont.string;
+                width = ctx.measureText(tick.label).width;
+                ctx.fillStyle = optsAtIndex.backdropColor;
+                const padding = helpers_dataset.toPadding(optsAtIndex.backdropPadding);
+                ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);
+            }
+            helpers_dataset.renderText(ctx, tick.label, 0, -offset, tickFont, {
+                color: optsAtIndex.color,
+                strokeColor: optsAtIndex.textStrokeColor,
+                strokeWidth: optsAtIndex.textStrokeWidth
+            });
+        });
+        ctx.restore();
+    }
+ drawTitle() {}
+}
+
+const INTERVALS = {
+    millisecond: {
+        common: true,
+        size: 1,
+        steps: 1000
+    },
+    second: {
+        common: true,
+        size: 1000,
+        steps: 60
+    },
+    minute: {
+        common: true,
+        size: 60000,
+        steps: 60
+    },
+    hour: {
+        common: true,
+        size: 3600000,
+        steps: 24
+    },
+    day: {
+        common: true,
+        size: 86400000,
+        steps: 30
+    },
+    week: {
+        common: false,
+        size: 604800000,
+        steps: 4
+    },
+    month: {
+        common: true,
+        size: 2.628e9,
+        steps: 12
+    },
+    quarter: {
+        common: false,
+        size: 7.884e9,
+        steps: 4
+    },
+    year: {
+        common: true,
+        size: 3.154e10
+    }
+};
+ const UNITS =  /* #__PURE__ */ Object.keys(INTERVALS);
+ function sorter(a, b) {
+    return a - b;
+}
+ function parse(scale, input) {
+    if (helpers_dataset.isNullOrUndef(input)) {
+        return null;
+    }
+    const adapter = scale._adapter;
+    const { parser , round , isoWeekday  } = scale._parseOpts;
+    let value = input;
+    if (typeof parser === 'function') {
+        value = parser(value);
+    }
+    if (!helpers_dataset.isNumberFinite(value)) {
+        value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);
+    }
+    if (value === null) {
+        return null;
+    }
+    if (round) {
+        value = round === 'week' && (helpers_dataset.isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);
+    }
+    return +value;
+}
+ function determineUnitForAutoTicks(minUnit, min, max, capacity) {
+    const ilen = UNITS.length;
+    for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){
+        const interval = INTERVALS[UNITS[i]];
+        const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;
+        if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {
+            return UNITS[i];
+        }
+    }
+    return UNITS[ilen - 1];
+}
+ function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {
+    for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){
+        const unit = UNITS[i];
+        if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {
+            return unit;
+        }
+    }
+    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];
+}
+ function determineMajorUnit(unit) {
+    for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){
+        if (INTERVALS[UNITS[i]].common) {
+            return UNITS[i];
+        }
+    }
+}
+ function addTick(ticks, time, timestamps) {
+    if (!timestamps) {
+        ticks[time] = true;
+    } else if (timestamps.length) {
+        const { lo , hi  } = helpers_dataset._lookup(timestamps, time);
+        const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];
+        ticks[timestamp] = true;
+    }
+}
+ function setMajorTicks(scale, ticks, map, majorUnit) {
+    const adapter = scale._adapter;
+    const first = +adapter.startOf(ticks[0].value, majorUnit);
+    const last = ticks[ticks.length - 1].value;
+    let major, index;
+    for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){
+        index = map[major];
+        if (index >= 0) {
+            ticks[index].major = true;
+        }
+    }
+    return ticks;
+}
+ function ticksFromTimestamps(scale, values, majorUnit) {
+    const ticks = [];
+     const map = {};
+    const ilen = values.length;
+    let i, value;
+    for(i = 0; i < ilen; ++i){
+        value = values[i];
+        map[value] = i;
+        ticks.push({
+            value,
+            major: false
+        });
+    }
+    return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);
+}
+class TimeScale extends Scale {
+    static id = 'time';
+ static defaults = {
+ bounds: 'data',
+        adapters: {},
+        time: {
+            parser: false,
+            unit: false,
+            round: false,
+            isoWeekday: false,
+            minUnit: 'millisecond',
+            displayFormats: {}
+        },
+        ticks: {
+ source: 'auto',
+            callback: false,
+            major: {
+                enabled: false
+            }
+        }
+    };
+ constructor(props){
+        super(props);
+         this._cache = {
+            data: [],
+            labels: [],
+            all: []
+        };
+         this._unit = 'day';
+         this._majorUnit = undefined;
+        this._offsets = {};
+        this._normalized = false;
+        this._parseOpts = undefined;
+    }
+    init(scaleOpts, opts = {}) {
+        const time = scaleOpts.time || (scaleOpts.time = {});
+         const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);
+        adapter.init(opts);
+        helpers_dataset.mergeIf(time.displayFormats, adapter.formats());
+        this._parseOpts = {
+            parser: time.parser,
+            round: time.round,
+            isoWeekday: time.isoWeekday
+        };
+        super.init(scaleOpts);
+        this._normalized = opts.normalized;
+    }
+ parse(raw, index) {
+        if (raw === undefined) {
+            return null;
+        }
+        return parse(this, raw);
+    }
+    beforeLayout() {
+        super.beforeLayout();
+        this._cache = {
+            data: [],
+            labels: [],
+            all: []
+        };
+    }
+    determineDataLimits() {
+        const options = this.options;
+        const adapter = this._adapter;
+        const unit = options.time.unit || 'day';
+        let { min , max , minDefined , maxDefined  } = this.getUserBounds();
+ function _applyBounds(bounds) {
+            if (!minDefined && !isNaN(bounds.min)) {
+                min = Math.min(min, bounds.min);
+            }
+            if (!maxDefined && !isNaN(bounds.max)) {
+                max = Math.max(max, bounds.max);
+            }
+        }
+        if (!minDefined || !maxDefined) {
+            _applyBounds(this._getLabelBounds());
+            if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {
+                _applyBounds(this.getMinMax(false));
+            }
+        }
+        min = helpers_dataset.isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);
+        max = helpers_dataset.isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;
+        this.min = Math.min(min, max - 1);
+        this.max = Math.max(min + 1, max);
+    }
+ _getLabelBounds() {
+        const arr = this.getLabelTimestamps();
+        let min = Number.POSITIVE_INFINITY;
+        let max = Number.NEGATIVE_INFINITY;
+        if (arr.length) {
+            min = arr[0];
+            max = arr[arr.length - 1];
+        }
+        return {
+            min,
+            max
+        };
+    }
+ buildTicks() {
+        const options = this.options;
+        const timeOpts = options.time;
+        const tickOpts = options.ticks;
+        const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();
+        if (options.bounds === 'ticks' && timestamps.length) {
+            this.min = this._userMin || timestamps[0];
+            this.max = this._userMax || timestamps[timestamps.length - 1];
+        }
+        const min = this.min;
+        const max = this.max;
+        const ticks = helpers_dataset._filterBetween(timestamps, min, max);
+        this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));
+        this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);
+        this.initOffsets(timestamps);
+        if (options.reverse) {
+            ticks.reverse();
+        }
+        return ticksFromTimestamps(this, ticks, this._majorUnit);
+    }
+    afterAutoSkip() {
+        if (this.options.offsetAfterAutoskip) {
+            this.initOffsets(this.ticks.map((tick)=>+tick.value));
+        }
+    }
+ initOffsets(timestamps = []) {
+        let start = 0;
+        let end = 0;
+        let first, last;
+        if (this.options.offset && timestamps.length) {
+            first = this.getDecimalForValue(timestamps[0]);
+            if (timestamps.length === 1) {
+                start = 1 - first;
+            } else {
+                start = (this.getDecimalForValue(timestamps[1]) - first) / 2;
+            }
+            last = this.getDecimalForValue(timestamps[timestamps.length - 1]);
+            if (timestamps.length === 1) {
+                end = last;
+            } else {
+                end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;
+            }
+        }
+        const limit = timestamps.length < 3 ? 0.5 : 0.25;
+        start = helpers_dataset._limitValue(start, 0, limit);
+        end = helpers_dataset._limitValue(end, 0, limit);
+        this._offsets = {
+            start,
+            end,
+            factor: 1 / (start + 1 + end)
+        };
+    }
+ _generate() {
+        const adapter = this._adapter;
+        const min = this.min;
+        const max = this.max;
+        const options = this.options;
+        const timeOpts = options.time;
+        const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));
+        const stepSize = helpers_dataset.valueOrDefault(options.ticks.stepSize, 1);
+        const weekday = minor === 'week' ? timeOpts.isoWeekday : false;
+        const hasWeekday = helpers_dataset.isNumber(weekday) || weekday === true;
+        const ticks = {};
+        let first = min;
+        let time, count;
+        if (hasWeekday) {
+            first = +adapter.startOf(first, 'isoWeek', weekday);
+        }
+        first = +adapter.startOf(first, hasWeekday ? 'day' : minor);
+        if (adapter.diff(max, min, minor) > 100000 * stepSize) {
+            throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);
+        }
+        const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();
+        for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){
+            addTick(ticks, time, timestamps);
+        }
+        if (time === max || options.bounds === 'ticks' || count === 1) {
+            addTick(ticks, time, timestamps);
+        }
+        return Object.keys(ticks).sort(sorter).map((x)=>+x);
+    }
+ getLabelForValue(value) {
+        const adapter = this._adapter;
+        const timeOpts = this.options.time;
+        if (timeOpts.tooltipFormat) {
+            return adapter.format(value, timeOpts.tooltipFormat);
+        }
+        return adapter.format(value, timeOpts.displayFormats.datetime);
+    }
+ format(value, format) {
+        const options = this.options;
+        const formats = options.time.displayFormats;
+        const unit = this._unit;
+        const fmt = format || formats[unit];
+        return this._adapter.format(value, fmt);
+    }
+ _tickFormatFunction(time, index, ticks, format) {
+        const options = this.options;
+        const formatter = options.ticks.callback;
+        if (formatter) {
+            return helpers_dataset.callback(formatter, [
+                time,
+                index,
+                ticks
+            ], this);
+        }
+        const formats = options.time.displayFormats;
+        const unit = this._unit;
+        const majorUnit = this._majorUnit;
+        const minorFormat = unit && formats[unit];
+        const majorFormat = majorUnit && formats[majorUnit];
+        const tick = ticks[index];
+        const major = majorUnit && majorFormat && tick && tick.major;
+        return this._adapter.format(time, format || (major ? majorFormat : minorFormat));
+    }
+ generateTickLabels(ticks) {
+        let i, ilen, tick;
+        for(i = 0, ilen = ticks.length; i < ilen; ++i){
+            tick = ticks[i];
+            tick.label = this._tickFormatFunction(tick.value, i, ticks);
+        }
+    }
+ getDecimalForValue(value) {
+        return value === null ? NaN : (value - this.min) / (this.max - this.min);
+    }
+ getPixelForValue(value) {
+        const offsets = this._offsets;
+        const pos = this.getDecimalForValue(value);
+        return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);
+    }
+ getValueForPixel(pixel) {
+        const offsets = this._offsets;
+        const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
+        return this.min + pos * (this.max - this.min);
+    }
+ _getLabelSize(label) {
+        const ticksOpts = this.options.ticks;
+        const tickLabelWidth = this.ctx.measureText(label).width;
+        const angle = helpers_dataset.toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
+        const cosRotation = Math.cos(angle);
+        const sinRotation = Math.sin(angle);
+        const tickFontSize = this._resolveTickFontOptions(0).size;
+        return {
+            w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,
+            h: tickLabelWidth * sinRotation + tickFontSize * cosRotation
+        };
+    }
+ _getLabelCapacity(exampleTime) {
+        const timeOpts = this.options.time;
+        const displayFormats = timeOpts.displayFormats;
+        const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
+        const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [
+            exampleTime
+        ], this._majorUnit), format);
+        const size = this._getLabelSize(exampleLabel);
+        const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;
+        return capacity > 0 ? capacity : 1;
+    }
+ getDataTimestamps() {
+        let timestamps = this._cache.data || [];
+        let i, ilen;
+        if (timestamps.length) {
+            return timestamps;
+        }
+        const metas = this.getMatchingVisibleMetas();
+        if (this._normalized && metas.length) {
+            return this._cache.data = metas[0].controller.getAllParsedValues(this);
+        }
+        for(i = 0, ilen = metas.length; i < ilen; ++i){
+            timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));
+        }
+        return this._cache.data = this.normalize(timestamps);
+    }
+ getLabelTimestamps() {
+        const timestamps = this._cache.labels || [];
+        let i, ilen;
+        if (timestamps.length) {
+            return timestamps;
+        }
+        const labels = this.getLabels();
+        for(i = 0, ilen = labels.length; i < ilen; ++i){
+            timestamps.push(parse(this, labels[i]));
+        }
+        return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);
+    }
+ normalize(values) {
+        return helpers_dataset._arrayUnique(values.sort(sorter));
+    }
+}
+
+function interpolate(table, val, reverse) {
+    let lo = 0;
+    let hi = table.length - 1;
+    let prevSource, nextSource, prevTarget, nextTarget;
+    if (reverse) {
+        if (val >= table[lo].pos && val <= table[hi].pos) {
+            ({ lo , hi  } = helpers_dataset._lookupByKey(table, 'pos', val));
+        }
+        ({ pos: prevSource , time: prevTarget  } = table[lo]);
+        ({ pos: nextSource , time: nextTarget  } = table[hi]);
+    } else {
+        if (val >= table[lo].time && val <= table[hi].time) {
+            ({ lo , hi  } = helpers_dataset._lookupByKey(table, 'time', val));
+        }
+        ({ time: prevSource , pos: prevTarget  } = table[lo]);
+        ({ time: nextSource , pos: nextTarget  } = table[hi]);
+    }
+    const span = nextSource - prevSource;
+    return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;
+}
+class TimeSeriesScale extends TimeScale {
+    static id = 'timeseries';
+ static defaults = TimeScale.defaults;
+ constructor(props){
+        super(props);
+         this._table = [];
+         this._minPos = undefined;
+         this._tableRange = undefined;
+    }
+ initOffsets() {
+        const timestamps = this._getTimestampsForTable();
+        const table = this._table = this.buildLookupTable(timestamps);
+        this._minPos = interpolate(table, this.min);
+        this._tableRange = interpolate(table, this.max) - this._minPos;
+        super.initOffsets(timestamps);
+    }
+ buildLookupTable(timestamps) {
+        const { min , max  } = this;
+        const items = [];
+        const table = [];
+        let i, ilen, prev, curr, next;
+        for(i = 0, ilen = timestamps.length; i < ilen; ++i){
+            curr = timestamps[i];
+            if (curr >= min && curr <= max) {
+                items.push(curr);
+            }
+        }
+        if (items.length < 2) {
+            return [
+                {
+                    time: min,
+                    pos: 0
+                },
+                {
+                    time: max,
+                    pos: 1
+                }
+            ];
+        }
+        for(i = 0, ilen = items.length; i < ilen; ++i){
+            next = items[i + 1];
+            prev = items[i - 1];
+            curr = items[i];
+            if (Math.round((next + prev) / 2) !== curr) {
+                table.push({
+                    time: curr,
+                    pos: i / (ilen - 1)
+                });
+            }
+        }
+        return table;
+    }
+ _generate() {
+        const min = this.min;
+        const max = this.max;
+        let timestamps = super.getDataTimestamps();
+        if (!timestamps.includes(min) || !timestamps.length) {
+            timestamps.splice(0, 0, min);
+        }
+        if (!timestamps.includes(max) || timestamps.length === 1) {
+            timestamps.push(max);
+        }
+        return timestamps.sort((a, b)=>a - b);
+    }
+ _getTimestampsForTable() {
+        let timestamps = this._cache.all || [];
+        if (timestamps.length) {
+            return timestamps;
+        }
+        const data = this.getDataTimestamps();
+        const label = this.getLabelTimestamps();
+        if (data.length && label.length) {
+            timestamps = this.normalize(data.concat(label));
+        } else {
+            timestamps = data.length ? data : label;
+        }
+        timestamps = this._cache.all = timestamps;
+        return timestamps;
+    }
+ getDecimalForValue(value) {
+        return (interpolate(this._table, value) - this._minPos) / this._tableRange;
+    }
+ getValueForPixel(pixel) {
+        const offsets = this._offsets;
+        const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
+        return interpolate(this._table, decimal * this._tableRange + this._minPos, true);
+    }
+}
+
+var scales = /*#__PURE__*/Object.freeze({
+__proto__: null,
+CategoryScale: CategoryScale,
+LinearScale: LinearScale,
+LogarithmicScale: LogarithmicScale,
+RadialLinearScale: RadialLinearScale,
+TimeScale: TimeScale,
+TimeSeriesScale: TimeSeriesScale
+});
+
+const registerables = [
+    controllers,
+    elements,
+    plugins,
+    scales
+];
+
+exports.Ticks = helpers_dataset.Ticks;
+exports.defaults = helpers_dataset.defaults;
+exports.Animation = Animation;
+exports.Animations = Animations;
+exports.ArcElement = ArcElement;
+exports.BarController = BarController;
+exports.BarElement = BarElement;
+exports.BasePlatform = BasePlatform;
+exports.BasicPlatform = BasicPlatform;
+exports.BubbleController = BubbleController;
+exports.CategoryScale = CategoryScale;
+exports.Chart = Chart;
+exports.Colors = plugin_colors;
+exports.DatasetController = DatasetController;
+exports.Decimation = plugin_decimation;
+exports.DomPlatform = DomPlatform;
+exports.DoughnutController = DoughnutController;
+exports.Element = Element;
+exports.Filler = index;
+exports.Interaction = Interaction;
+exports.Legend = plugin_legend;
+exports.LineController = LineController;
+exports.LineElement = LineElement;
+exports.LinearScale = LinearScale;
+exports.LogarithmicScale = LogarithmicScale;
+exports.PieController = PieController;
+exports.PointElement = PointElement;
+exports.PolarAreaController = PolarAreaController;
+exports.RadarController = RadarController;
+exports.RadialLinearScale = RadialLinearScale;
+exports.Scale = Scale;
+exports.ScatterController = ScatterController;
+exports.SubTitle = plugin_subtitle;
+exports.TimeScale = TimeScale;
+exports.TimeSeriesScale = TimeSeriesScale;
+exports.Title = plugin_title;
+exports.Tooltip = plugin_tooltip;
+exports._adapters = adapters;
+exports._detectPlatform = _detectPlatform;
+exports.animator = animator;
+exports.controllers = controllers;
+exports.elements = elements;
+exports.layouts = layouts;
+exports.plugins = plugins;
+exports.registerables = registerables;
+exports.registry = registry;
+exports.scales = scales;
+//# sourceMappingURL=chart.cjs.map
Index: node_modules/chart.js/dist/chart.cjs.map
===================================================================
--- node_modules/chart.js/dist/chart.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chart.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"chart.cjs","sources":["../src/core/core.animator.js","../src/core/core.animation.js","../src/core/core.animations.js","../src/core/core.datasetController.js","../src/controllers/controller.bar.js","../src/controllers/controller.bubble.js","../src/controllers/controller.doughnut.js","../src/controllers/controller.line.js","../src/controllers/controller.polarArea.js","../src/controllers/controller.pie.js","../src/controllers/controller.radar.js","../src/controllers/controller.scatter.js","../src/core/core.adapters.ts","../src/core/core.interaction.js","../src/core/core.layouts.js","../src/platform/platform.base.js","../src/platform/platform.basic.js","../src/platform/platform.dom.js","../src/platform/index.js","../src/core/core.element.ts","../src/core/core.scale.autoskip.js","../src/core/core.scale.js","../src/core/core.typedRegistry.js","../src/core/core.registry.js","../src/core/core.plugins.js","../src/core/core.config.js","../src/core/core.controller.js","../src/elements/element.arc.ts","../src/elements/element.line.js","../src/elements/element.point.ts","../src/elements/element.bar.js","../src/plugins/plugin.colors.ts","../src/plugins/plugin.decimation.js","../src/plugins/plugin.filler/filler.segment.js","../src/plugins/plugin.filler/filler.helper.js","../src/plugins/plugin.filler/filler.options.js","../src/plugins/plugin.filler/filler.target.stack.js","../src/plugins/plugin.filler/simpleArc.js","../src/plugins/plugin.filler/filler.target.js","../src/plugins/plugin.filler/filler.drawing.js","../src/plugins/plugin.filler/index.js","../src/plugins/plugin.legend.js","../src/plugins/plugin.title.js","../src/plugins/plugin.subtitle.js","../src/plugins/plugin.tooltip.js","../src/scales/scale.category.js","../src/scales/scale.linearbase.js","../src/scales/scale.linear.js","../src/scales/scale.logarithmic.js","../src/scales/scale.radialLinear.js","../src/scales/scale.time.js","../src/scales/scale.timeseries.js","../src/index.ts"],"sourcesContent":["import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n\n  /**\n\t * @private\n\t */\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _update(date = Date.now()) {\n    let remaining = 0;\n\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n\n      for (; i >= 0; --i) {\n        item = items[i];\n\n        if (item._active) {\n          if (item._total > anims.duration) {\n            // if the animation has been updated and its duration prolonged,\n            // update to total duration of current animations run (for progress event)\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          // Remove the item by replacing it with last item and removing the last\n          // A lot faster than splice.\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n\n      remaining += items.length;\n    });\n\n    this._lastDate = date;\n\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n\n  /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n\n  /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n\n  /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n\n  /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  /**\n   * @param {string} from\n   * @param {string} to\n   * @param {number} factor\n   */\n  color(from, to, factor) {\n    const c0 = helpersColor(from || transparent);\n    const c1 = c0.valid && helpersColor(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nexport default class Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n\n  active() {\n    return this._active;\n  }\n\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n\n  cancel() {\n    if (this._active) {\n      // update current evaluated value, for smoother animations\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n\n    this._active = from !== to && (loop || (elapsed < duration));\n\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n    this._target[prop] = this._fn(from, to, factor);\n  }\n\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n\n    const animationOptions = Object.keys(defaults.animation);\n    const animatedProps = this._properties;\n\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n\n  /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      // Going to shared options:\n      // After all animations are done, assign the shared options object to the element\n      // So any new updates to the shared options are observed\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n        // rejected, noop\n      });\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @private\n\t */\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n\n      if (animation) {\n        if (cfg && animation.active()) {\n          // There is an existing active animation, let's update that\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        // not animated, set directly to new value\n        target[prop] = value;\n        continue;\n      }\n\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n\n\n  /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n  update(target, values) {\n    if (this._properties.size === 0) {\n      // Nothing is animated, just apply the new values.\n      Object.assign(target, values);\n      return;\n    }\n\n    const animations = this._createAnimations(target, values);\n\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\n\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  // @ts-ignore\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    // Going from shared options to distinct one:\n    // Create new options object containing the old shared values and start updating that.\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\n\nfunction toClip(value) {\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  let found = false;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      found = true;\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n\n  if (!found && !options.all) {\n    return 0;\n  }\n\n  return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n  const {iScale, vScale} = meta;\n  const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n  const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      [iAxisKey]: key,\n      [vAxisKey]: data[key]\n    };\n  }\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n    const visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\n\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  // Not using meta.index here, because it might be already updated if the dataset changed location\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n    if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n      delete stacks[axis]._visualValues[datasetIndex];\n    }\n  }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n  /**\n   * @type {any}\n   */\n  static defaults = {};\n\n  /**\n   * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n   */\n  static datasetElementType = null;\n\n  /**\n   * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n   */\n  static dataElementType = null;\n\n  /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    /** @type {boolean | object} */\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.datasetElementType = new.target.datasetElementType;\n    this.dataElementType = new.target.dataElementType;\n\n    this.initialize();\n  }\n\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n\n    if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n      console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n    }\n  }\n\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n\n  /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n\n  /**\n\t * @private\n\t */\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n\n  reset() {\n    this._update('reset');\n  }\n\n  /**\n\t * @private\n\t */\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n\n    // In order to correctly handle data addition/deletion animation (and thus simulate\n    // real-time charts), we need to monitor these data modifications and synchronize\n    // the internal metadata accordingly.\n\n    if (isObject(data)) {\n      const meta = this._cachedMeta;\n      this._data = convertObjectDataToArray(data, meta);\n    } else if (_data !== data) {\n      if (_data) {\n        // This case happens when the user replaced the data array instance.\n        unlistenArrayEvents(_data, this);\n        // Discard old parsed data and stacks\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n\n  addElements() {\n    const meta = this._cachedMeta;\n\n    this._dataCheck();\n\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n\n    this._dataCheck();\n\n    // make sure cached _stacked status is current\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n\n    // detect change in stack option\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      // remove values from old stack\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n\n    // Re-sync meta data in case the user replaced the data array or if we missed\n    // any updates and so make sure that we handle number of datapoints changing.\n    this._resyncElements(resetNewElements);\n\n    // if stack changed, update stack values for the whole dataset\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n      meta._stacked = isStacked(meta.vScale, meta);\n    }\n  }\n\n  /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n\n  /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]._visualValues\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        // if the data is sorted, we don't need to check further from this end of array\n        break;\n      }\n    }\n    if (sorted) {\n      // in the sorted case, find first non-skipped value from other end of array\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return false;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {} // eslint-disable-line no-unused-vars\n\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n\n  /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n\n  /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    // context is provided as a function, and is called only if needed,\n    // so we don't create a context for each element if not needed.\n    const context = () => this.getContext(index, active, mode);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n    if (values.$shared) {\n      // `$shared` indicates this set of options can be shared between multiple elements.\n      // Sharing is used to reduce number of properties to change during animation.\n      values.$shared = sharing;\n\n      // We cache options by `mode`, which can be 'active' for example. This enables us\n      // to have the 'active' element options and 'default' options to switch between\n      // when interacting.\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n\n    return values;\n  }\n\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n\n  /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n\n  /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n\n  /**\n   * @todo v4, rename to getSharedOptions and remove excess functions\n   */\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n\n  /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n\n  /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      // When going from active to inactive, we need to update to the shared options.\n      // This way the once hovered element will end up with the same original shared options instance, after animation.\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n\n  /**\n\t * @private\n\t */\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n\n    // Apply changes detected through array listeners\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n\n    if (count) {\n      // TODO: It is not optimal to always parse the old data\n      // This is done because we are not detecting direct assignments:\n      // chart.data.datasets[0].data[5] = 10;\n      // chart.data.datasets[0].data[5].y = 10;\n      this.parse(0, count);\n    }\n\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n\n  updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @private\n\t */\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n\n  /**\n\t * @private\n   */\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n  _arrayUnique, isArray, isNullOrUndef,\n  valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      // Ignore truncated pixels\n      return;\n    }\n    if (defined(prev)) {\n      // curr - prev === 0 is ignored\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n\n  return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    // When bar thickness is enforced, category and bar percentages are ignored.\n    // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n    // and deprecate barPercentage since this value is ignored when thickness is absolute.\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n\n  if (prev === null) {\n    // first data: its size is double based on the next point or,\n    // if it's also the last data, we use the scale size.\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    // last data: its size is also double based on the previous point.\n    next = curr + curr - prev;\n  }\n\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  // Store `barEnd` (furthest away from origin) as parsed value,\n  // to make stacking straight forward\n  item[vScale.axis] = barEnd;\n\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\n\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\n\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'bar',\n\n    categoryPercentage: 0.8,\n    barPercentage: 0.9,\n    grouped: true,\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'base', 'width', 'height']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n        offset: true,\n        grid: {\n          offset: true\n        }\n      },\n      _value_: {\n        type: 'linear',\n        beginAtZero: true,\n      }\n    }\n  };\n\n\n  /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      // float bar: only one end of the bar is considered by `super`\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n\n  initialize() {\n    this.enableOptionSharing = true;\n\n    super.initialize();\n\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n\n  /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n    const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n    const skipNull = (meta) => {\n      const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n      const val = parsed && parsed[meta.vScale.axis];\n\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n\n      // stacked   | meta.stack\n      //           | found | not found | undefined\n      // false     |   x   |     x     |     x\n      // true      |       |     x     |\n      // undefined |       |     x     |     x\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n\n    // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n    // stack where possible invisible bars will be located.\n    // https://github.com/chartjs/Chart.js/issues/6368\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n\n    return stacks;\n  }\n\n  /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n\n  _getAxisCount() {\n    return this._getAxis().length;\n  }\n\n  getFirstScaleIdForIndexAxis() {\n    const scales = this.chart.scales;\n    const indexScaleId = this.chart.options.indexAxis;\n    return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n  }\n\n  _getAxis() {\n    const axis = {};\n    const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n    for (const dataset of this.chart.data.datasets) {\n      axis[valueOrDefault(\n        this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n      )] = true;\n    }\n    return Object.keys(axis);\n  }\n\n  /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n   * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1; // indexOf returns -1 if element is not present\n\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      // bar thickness ratio used for non-grouped bars\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n\n  /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      // bars crossing origin are not stacked\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      // When not visible, no height\n      head = base;\n    }\n\n    size = head - base;\n\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n\n      if (_stacked && !floating) {\n        // visual data coordinates after applying minBarLength\n        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n      }\n    }\n\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    const axisCount = this._getAxisCount();\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n      const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n      const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      // For non-grouped bar charts, exact pixel values are used\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n\n\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n  static id = 'bubble';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'borderWidth', 'radius']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n\n  update(mode) {\n    const points = this._cachedMeta.data;\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n\n    // In case values were cached (and thus frozen), we need to clone the values\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n\n    // Custom radius resolution\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n    return values;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n  static id = 'doughnut';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'arc',\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n      },\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutout: '50%',\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%',\n\n    // Spacing between arcs\n    spacing: 0,\n\n    indexAxis: 'r',\n  };\n\n  static descriptors = {\n    _scriptable: (name) => name !== 'spacing',\n    _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    // Need to override these to give a nice default\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n\n  linkScales() {}\n\n  /**\n\t * Override data parsing, since we are not using scales\n\t */\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n\n  /**\n\t * @private\n\t */\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n\n  /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n\n    // Compute the maximal rotation & circumference limits.\n    // If we only consider our dataset, this can cause problems when two datasets\n    // are both less than a circle with different rotations (starting angles)\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n\n    meta.total = this.calculateTotal();\n\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @private\n   */\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n\n    return total;\n  }\n\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n\n    if (!arcs) {\n      // Find the outmost visible dataset\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n\n    if (!arcs) {\n      return 0;\n    }\n\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n\n  getMaxOffset(arcs) {\n    let max = 0;\n\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n\n  /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n\n    return ringWeightOffset;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n\n  /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n\n    showLine: true,\n    spanGaps: false,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n      },\n      _value_: {\n        type: 'linear',\n      },\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    // Update Line\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    const end = start + count;\n    const pointsCount = points.length;\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = 0; i < pointsCount; ++i) {\n      const point = points[i];\n      const properties = directUpdate ? point : {};\n\n      if (i < start || i >= end) {\n        properties.skip = true;\n        continue;\n      }\n\n      const parsed = this.getParsed(i);\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n  static id = 'polarArea';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    dataElementType: 'arc',\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n      },\n    },\n    indexAxis: 'r',\n    startAngle: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    },\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n        angleLines: {\n          display: false\n        },\n        beginAtZero: true,\n        grid: {\n          circular: true\n        },\n        pointLabels: {\n          display: false\n        },\n        startAngle: 0\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @protected\n   */\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n\n    return range;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n\n    const defaultAngle = 360 / this.countVisibleElements();\n\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n\n    return count;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n  static id = 'pie';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    // The percentage of the chart that we cut out of the middle.\n    cutout: 0,\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%'\n  };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n  static id = 'radar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n    indexAxis: 'r',\n    showLine: true,\n    elements: {\n      line: {\n        fill: 'start'\n      }\n    },\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n\n    // Update Line\n    line.points = points;\n    // In resize mode only point locations change, so no need to set the points or options.\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n\n      this.updateElement(line, undefined, properties, mode);\n    }\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n  static id = 'scatter';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n    showLine: false,\n    fill: false\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n\n    interaction: {\n      mode: 'point'\n    },\n\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + ')'\n    };\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    if (this.options.showLine) {\n\n      // https://github.com/chartjs/Chart.js/issues/11333\n      if (!this.datasetElementType) {\n        this.addElements();\n      }\n      const {dataset: line, _dataset} = meta;\n\n      // Update Line\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    } else if (this.datasetElementType) {\n      // https://github.com/chartjs/Chart.js/issues/11333\n      delete meta.dataset;\n      this.datasetElementType = false;\n    }\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  addElements() {\n    const {showLine} = this.options;\n\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = this.chart.registry.getElement('line');\n    }\n\n    super.addElements();\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n\n    if (!data.length) {\n      return border;\n    }\n\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n  readonly options: T;\n  /**\n   * Will called with chart options after adapter creation.\n   */\n  init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n  /**\n   * Returns a map of time formats for the supported formatting units defined\n   * in Unit as well as 'datetime' representing a detailed date/time string.\n   */\n  formats(this: DateAdapter<T>): Record<TimeUnit | 'datetime', string>;\n  /**\n   * Parses the given `value` and return the associated timestamp.\n   * @param value - the value to parse (usually comes from the data)\n   * @param [format] - the expected data format\n   */\n  parse(this: DateAdapter<T>, value: unknown, format?: string): number | null;\n  /**\n   * Returns the formatted date in the specified `format` for a given `timestamp`.\n   * @param timestamp - the timestamp to format\n   * @param format - the date/time token\n   */\n  format(this: DateAdapter<T>, timestamp: number, format: string): string;\n  /**\n   * Adds the specified `amount` of `unit` to the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param amount - the amount to add\n   * @param unit - the unit as string\n   */\n  add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n  /**\n   * Returns the number of `unit` between the given timestamps.\n   * @param a - the input timestamp (reference)\n   * @param b - the timestamp to subtract\n   * @param unit - the unit as string\n   */\n  diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n  /**\n   * Returns start of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   * @param [weekday] - the ISO day of the week with 1 being Monday\n   * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n   */\n  startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n  /**\n   * Returns end of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   */\n  endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract<T = void>(): T {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n  /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */\n  static override<T extends AnyObject = AnyObject>(\n    members: Partial<Omit<DateAdapter<T>, 'options'>>\n  ) {\n    Object.assign(DateAdapterBase.prototype, members);\n  }\n\n  readonly options: AnyObject;\n\n  constructor(options?: AnyObject) {\n    this.options = options || {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  init() {}\n\n  formats(): Record<TimeUnit | 'datetime', string> {\n    return abstract();\n  }\n\n  parse(): number | null {\n    return abstract();\n  }\n\n  format(): string {\n    return abstract();\n  }\n\n  add(): number {\n    return abstract();\n  }\n\n  diff(): number {\n    return abstract();\n  }\n\n  startOf(): number {\n    return abstract();\n  }\n\n  endOf(): number {\n    return abstract();\n  }\n}\n\nexport default {\n  _date: DateAdapterBase as {\n    new (options?: AnyObject): DateAdapter;\n    override<T extends AnyObject = AnyObject>(\n      members: Partial<Omit<DateAdapter<T>, 'options'>>\n    ): void;\n  }\n};\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      const result = lookupMethod(data, axis, value);\n      if (spanGaps) {\n        const {vScale} = controller._cachedMeta;\n        const {_parsed} = metaset;\n\n        const distanceToDefinedLo = (_parsed\n          .slice(0, result.lo + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.lo -= Math.max(0, distanceToDefinedLo);\n\n        const distanceToDefinedHi = (_parsed\n          .slice(result.hi)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.hi += Math.max(0, distanceToDefinedHi);\n      }\n      return result;\n    } else if (controller._sharedOptions) {\n      // _sharedOptions indicates that each element has equal options -> equal proportions\n      // So we can do a ranged binary search based on the range of first element and\n      // be confident to get the full range of indices that can intersect with the value.\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  // Default to all elements, when binary search can not be used.\n  return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      // Can have multiple items at the same distance in which case we sort by size\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  // If we want to trigger on an intersect and we don't have any items\n  // that intersect the position, return nothing\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n  // Part of the public API to facilitate developers creating their own modes\n  evaluateInteractionItems,\n\n  // Helper function for different modes\n  modes: {\n    /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      // Default axis for index mode is 'x' to match old behaviour\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n\n        // don't count items that are skipped (null data)\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n\n      return elements;\n    },\n\n    /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n\n      return items;\n    },\n\n    /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n\n    /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n\n  // dynamically placed boxes size is not considered\n  if (!isObject(pos)) {\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n\n  // return booleans on the changes per direction\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n    // Dimensions changed and there were non full width boxes before this\n    // -> we have to refit those\n    refit |= same && refitBoxes.length;\n\n    // Chart area changed in the opposite direction\n    changed = changed || other;\n\n    if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n      refitBoxes.push(layout);\n    }\n  }\n\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] -  Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n  /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    // initialize item with default values\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    // @ts-ignore\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n\n  /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n\n  /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n\n  /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n   * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n\n    // Before any changes are made, notify boxes that an update is about to being\n    // This is used to clear any cached data (e.g. scale limits)\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n\n    // Essentially we now have any number of boxes on each of the 4 sides.\n    // Our canvas looks like the following.\n    // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n    // B1 is the bottom axis\n    // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n    // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n    // an error will be thrown.\n    //\n    // |----------------------------------------------------|\n    // |                  T1 (Full Width)                   |\n    // |----------------------------------------------------|\n    // |    |    |                 T2                  |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    | C1 |                           | C2 |    |\n    // |    |    |----|                           |----|    |\n    // |    |    |                                     |    |\n    // | L1 | L2 |           ChartArea (C0)            | R1 |\n    // |    |    |                                     |    |\n    // |    |    |----|                           |----|    |\n    // |    |    | C3 |                           | C4 |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    |                 B1                  |    |\n    // |----------------------------------------------------|\n    // |                  B2 (Full Width)                   |\n    // |----------------------------------------------------|\n    //\n\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n    // First fit the fullSize boxes, to reduce probability of re-fitting.\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n    // Then fit vertical boxes\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    // Then fit horizontal boxes\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      // if the area changed, re-fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n\n    // Finally place the boxes to correct coordinates\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n    // Move to opposite side of chart\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n\n    // Finally update boxes in chartArea (radial scale for example)\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n  /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n  acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n  releaseContext(context) { // eslint-disable-line no-unused-vars\n    return false;\n  }\n\n  /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n  addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n  removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n  getDevicePixelRatio() {\n    return 1;\n  }\n\n  /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n  isAttached(canvas) { // eslint-disable-line no-unused-vars\n    return true;\n  }\n\n  /**\n   * Updates config with platform specific requirements\n   * @param {import('../core/core.config.js').default} config\n   */\n  updateConfig(config) { // eslint-disable-line no-unused-vars\n    // no-op\n  }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n\n  // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n  // returns null or '' if no explicit value has been set to the canvas attribute.\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n\n  // Chart.js modifies some canvas values that we want to restore on destroy\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n\n  // Force canvas to display as block to avoid extra space caused by inline\n  // elements, which would interfere with the responsive resize process.\n  // https://github.com/chartjs/Chart.js/issues/2538\n  style.display = style.display || 'block';\n  // Include possible borders in the size\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      // If no explicit render height and style height, let's apply the aspect ratio,\n      // which one can be specified by the user but also by charts as default option\n      // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n  if (node) {\n    node.addEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction removeListener(chart, type, listener) {\n  if (chart && chart.canvas) {\n    chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      // If the container size shrank during chart resize, let's assume\n      // scrollbar appeared. So we resize again with the scrollbar visible -\n      // effectively making chart smaller and the scrollbar hidden again.\n      // Because we are inside `throttled`, and currently `ticking`, scroll\n      // events are ignored during this whole 2 resize process.\n      // If we assumed wrong and something else happened, we are resizing\n      // twice in a frame (potential performance issue)\n      listener();\n    }\n  }, window);\n\n  // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    // When its container's display is set to 'none' the callback will be called with a\n    // size of (0, 0), which will cause the chart to lose its original height, so skip\n    // resizing in such case.\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    // This case can occur if the chart is destroyed while waiting\n    // for the throttled function to occur. We prevent crashes by checking\n    // for a destroyed chart\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n\n  addListener(canvas, type, proxy);\n\n  return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n  acquireContext(canvas, aspectRatio) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n    // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n    // inside an iframe or when running in a protected environment. We could guess the\n    // types from their toString() value but let's keep things flexible and assume it's\n    // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n    // https://github.com/chartjs/Chart.js/issues/3887\n    // https://github.com/chartjs/Chart.js/issues/4102\n    // https://github.com/chartjs/Chart.js/issues/4152\n    if (context && context.canvas === canvas) {\n      // Load platform resources on first chart creation, to make it possible to\n      // import the library before setting platform options.\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n\n    return null;\n  }\n\n  /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n\n    // The canvas render size might have been changed (and thus the state stack discarded),\n    // we can't use save() and restore() to restore the initial state. So make sure that at\n    // least the canvas context is reset to the default state by setting the canvas width.\n    // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n    // eslint-disable-next-line no-self-assign\n    canvas.width = canvas.width;\n\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n\n  /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n  addEventListener(chart, type, listener) {\n    // Can have only one listener per type, so make sure previous is removed\n    this.removeEventListener(chart, type);\n\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n\n    if (!proxy) {\n      return;\n    }\n\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n  isAttached(canvas) {\n    const container = canvas && _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n  static defaults = {};\n  static defaultRoutes = undefined;\n\n  x: number;\n  y: number;\n  active = false;\n  options: O;\n  $animations: Record<keyof T, Animation>;\n\n  tooltipPosition(useFinalPosition: boolean): Point {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y} as Point;\n  }\n\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n\n  /**\n   * Gets the current or final value of each prop. Can return extra properties (whole object).\n   * @param props - properties to get\n   * @param [final] - get the final value (animation target)\n   */\n  getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n  getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n  getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      // let's not create an object, if not needed\n      return this as Record<string, unknown>;\n    }\n    const ret: Record<string, unknown> = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n    });\n    return ret;\n  }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const determinedMaxTicks = determineMaxTicks(scale);\n  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n\n  // If there are too many major ticks to display them all\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n\n  // If the major ticks are evenly spaced apart, place the minor ticks\n  // so that they divide the major ticks into even chunks\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n\n  next = start;\n\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n\n  if (len < 2) {\n    return false;\n  }\n\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n\n    // Return undefined if the pixel is out of the range\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n\n  return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  /** @type {CanvasTextAlign} */\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n  // eslint-disable-next-line max-statements\n  constructor(cfg) {\n    super();\n\n    /** @type {string} */\n    this.id = cfg.id;\n    /** @type {string} */\n    this.type = cfg.type;\n    /** @type {any} */\n    this.options = undefined;\n    /** @type {CanvasRenderingContext2D} */\n    this.ctx = cfg.ctx;\n    /** @type {Chart} */\n    this.chart = cfg.chart;\n\n    // implements box\n    /** @type {number} */\n    this.top = undefined;\n    /** @type {number} */\n    this.bottom = undefined;\n    /** @type {number} */\n    this.left = undefined;\n    /** @type {number} */\n    this.right = undefined;\n    /** @type {number} */\n    this.width = undefined;\n    /** @type {number} */\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    /** @type {number} */\n    this.maxWidth = undefined;\n    /** @type {number} */\n    this.maxHeight = undefined;\n    /** @type {number} */\n    this.paddingTop = undefined;\n    /** @type {number} */\n    this.paddingBottom = undefined;\n    /** @type {number} */\n    this.paddingLeft = undefined;\n    /** @type {number} */\n    this.paddingRight = undefined;\n\n    // scale-specific properties\n    /** @type {string=} */\n    this.axis = undefined;\n    /** @type {number=} */\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    /** @type {Tick[]} */\n    this.ticks = [];\n    /** @type {object[]|null} */\n    this._gridLineItems = null;\n    /** @type {object[]|null} */\n    this._labelItems = null;\n    /** @type {object|null} */\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    /** @type {number} */\n    this._startPixel = undefined;\n    /** @type {number} */\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n  init(options) {\n    this.options = options.setContext(this.getContext());\n\n    this.axis = options.axis;\n\n    // parse min/max value, so we can properly determine min/max for other scales\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n\n  /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    return raw;\n  }\n\n  /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isFinite(_userMin),\n      maxDefined: isFinite(_userMax)\n    };\n  }\n\n  /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n\n    // Make sure min <= max when only min or max is defined by user and the data is outside that range\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n\n  /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n\n  /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n  getTicks() {\n    return this.ticks;\n  }\n\n  /**\n\t * @return {string[]}\n\t */\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n\n  /**\n   * @return {import('../types.js').LabelItem[]}\n   */\n  getLabelItems(chartArea = this.chart.chartArea) {\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    return items;\n  }\n\n  // When a new layout is created, reset the data limits cache\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n\n  // These methods are ordered by lifecycle. Utilities then follow.\n  // Any function defined here is inherited by all scale types.\n  // Any function can be extended by the scale type\n\n  beforeUpdate() {\n    call(this.options.beforeUpdate, [this]);\n  }\n\n  /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t *   This space comes from two sources:\n\t *     - padding - space that's required to show the labels at the edges of the scale\n\t *     - thickness of scales or legends in another orientation\n\t */\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n\n    // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n    this.beforeUpdate();\n\n    // Absorb the master measurements\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n\n    // Dimensions\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n\n    // Data min/max\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n\n    this.beforeBuildTicks();\n\n    this.ticks = this.buildTicks() || [];\n\n    // Allow modification of ticks in callback.\n    this.afterBuildTicks();\n\n    // Compute tick rotation and fit using a sampled subset of labels\n    // We generally don't need to compute the size of every single label for determining scale size\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n    // configure is called twice, once here, once from core.controller.updateLayout.\n    // Here we haven't been positioned yet, but dimensions are correct.\n    // Variables set in configure are needed for calculateLabelRotation, and\n    // it's ok that coordinates are not correct there, only dimensions matter.\n    this.configure();\n\n    // Tick Rotation\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n    this.afterCalculateLabelRotation();\n\n    // Auto-skip\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n\n    if (samplingEnabled) {\n      // Generate labels using all non-skipped ticks\n      this._convertTicksToLabels(this.ticks);\n    }\n\n    this.beforeFit();\n    this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n    this.afterFit();\n\n    // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n    this.afterUpdate();\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      // by default vertical scales are from bottom to top, so pixels are reversed\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n\n  afterUpdate() {\n    call(this.options.afterUpdate, [this]);\n  }\n\n  //\n\n  beforeSetDimensions() {\n    call(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    if (this.isHorizontal()) {\n      // Reset position before calculating rotation\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n\n      // Reset position before calculating rotation\n      this.top = 0;\n      this.bottom = this.height;\n    }\n\n    // Reset padding\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    call(this.options.afterSetDimensions, [this]);\n  }\n\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    call(this.options[name], [this]);\n  }\n\n  // Data limits\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n\n  //\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  /**\n\t * @return {object[]} the ticks\n\t */\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n\n  beforeTickToLabelConversion() {\n    call(this.options.beforeTickToLabelConversion, [this]);\n  }\n  /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    call(this.options.afterTickToLabelConversion, [this]);\n  }\n\n  //\n\n  beforeCalculateLabelRotation() {\n    call(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n\n    // Estimate the width of each grid based on the canvas width, the maximum\n    // label width and the number of tick intervals\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n    // Allow 3 pixels x2 padding either side for label readability\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    call(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n\n  //\n\n  beforeFit() {\n    call(this.options.beforeFit, [this]);\n  }\n  fit() {\n    // Reset\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight; // fill all the height\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n\n        if (isHorizontal) {\n        // A horizontal axis is more constrained by the height.\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n        // A vertical axis is more constrained by the width. Labels are the\n        // dominant factor here, so get that length first and account for padding\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n\n    this._handleMargins();\n\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n\n      // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n      // which means that the right padding is dominated by the font height\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n\n      // Adjust padding taking into account changes in offsets\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n\n  /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n\n  afterFit() {\n    call(this.options.afterFit, [this]);\n  }\n\n  // Shared Methods\n  /**\n\t * @return {boolean}\n\t */\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  /**\n\t * @return {boolean}\n\t */\n  isFullSize() {\n    return this.options.fullSize;\n  }\n\n  /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n\n    this.generateTickLabels(ticks);\n\n    // Ticks should be skipped when callback returns null or undef, so lets remove those.\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n\n    this.afterTickToLabelConversion();\n  }\n\n  /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n    }\n\n    return labelSizes;\n  }\n\n  /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _computeLabelSizes(ticks, length, maxTicksLimit) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n    for (i = 0; i < length; i += increment) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = /** @type {string} */ (label[j]);\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n\n  /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value;\n  }\n\n  /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n  getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n    return NaN;\n  }\n\n  /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n  getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n\n  /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n\n  /**\n\t * @return {number}\n\t */\n  getBaseValue() {\n    const {min, max} = this;\n\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index) {\n    const ticks = this.ticks || [];\n\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n\n  /**\n\t * @return {number}\n\t * @private\n\t */\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n\n    // Calculate space needed by label in axis direction.\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n    // Calculate space needed for 1 tick in axis direction.\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n\n  /**\n\t * @return {boolean}\n\t * @private\n\t */\n  _isVisible() {\n    const display = this.options.display;\n\n    if (display !== 'auto') {\n      return !!display;\n    }\n\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position, border} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = borderOpts.display ? borderOpts.width : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const context = this.getContext(i);\n      const optsAtIndex = grid.setContext(context);\n      const optsAtIndexBorder = border.setContext(context);\n\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndexBorder.dash || [];\n      const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n      lineValue = getPixelForGridLine(this, i, offset);\n\n      // Skip if the pixel is out of the range\n      if (lineValue === undefined) {\n        continue;\n      }\n\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n\n    return items;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n\n      if (isHorizontal) {\n        x = pixel;\n\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n          x += (lineHeight / 2) * Math.sin(rotation);\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n\n      let backdrop;\n\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n\n        let top = textOffset - labelPadding.top;\n        let left = 0 - labelPadding.left;\n\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        default:\n          break;\n        }\n\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        case 'inner':\n          if (i === ilen - 1) {\n            left -= width;\n          } else if (i > 0) {\n            left -= width / 2;\n          }\n          break;\n        default:\n          break;\n        }\n\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n\n          color: optsAtIndex.backdropColor,\n        };\n      }\n\n      items.push({\n        label,\n        font,\n        textOffset,\n        options: {\n          rotation,\n          color,\n          strokeColor,\n          strokeWidth,\n          textAlign: tickTextAlign,\n          textBaseline,\n          translation: [x, y],\n          backdrop,\n        }\n      });\n    }\n\n    return items;\n  }\n\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n\n    let align = 'center';\n\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n\n    return align;\n  }\n\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n\n    let textAlign;\n    let x;\n\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n\n    return {textAlign, x};\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n\n    const chart = this.chart;\n    const position = this.options.position;\n\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n\n  /**\n   * @protected\n   */\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {\n    const {chart, ctx, options: {border, grid}} = this;\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = border.display ? borderOpts.width : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.width;\n    ctx.strokeStyle = borderOpts.color;\n\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n\n    if (!optionTicks.display) {\n      return;\n    }\n\n    const ctx = this.ctx;\n\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n\n    const items = this.getLabelItems(chartArea);\n    for (const item of items) {\n      const renderTextOptions = item.options;\n      const tickFont = item.font;\n      const label = item.label;\n      const y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n    }\n\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n\n    if (!title.display) {\n      return;\n    }\n\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n\n  /**\n\t * @return {object[]}\n\t * @private\n\t */\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      // backward compatibility: draw has been overridden by custom scale\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: bz,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n\n  /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n\n  /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n\n  /**\n   * @protected\n   */\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n\n    if (isIChartComponent(proto)) {\n      // Make sure the parent is registered and note the scope where its defaults are.\n      parentScope = this.register(proto);\n    }\n\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n\n    if (id in items) {\n      // already registered\n      return scope;\n    }\n\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n\n    return scope;\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n  get(id) {\n    return this.items[id];\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t */\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n\n    if (id in items) {\n      delete items[id];\n    }\n\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n  // Inherit the parent's defaults and keep existing defaults\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n\n  defaults.set(scope, itemDefaults);\n\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\n\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\n\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    // Order is important, Scale has Element in prototype chain,\n    // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  add(...args) {\n    this._each('register', args);\n  }\n\n  remove(...args) {\n    this._each('unregister', args);\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n\n  /**\n\t * @private\n\t */\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        // Handle loopable args\n        // Use case:\n        //  import * as plugins from './plugins.js';\n        //  Chart.register(plugins);\n        each(arg, item => {\n          // If there are mixed types in the loopable, make sure those are\n          // registered in correct registry\n          // Use case: (treemap exporting controller, elements etc)\n          //  import * as treemap from 'chartjs-chart-treemap.js';\n          //  Chart.register(treemap);\n\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n    registry[method](component);\n    call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n  }\n\n  /**\n\t * @private\n\t */\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    // plugins is the fallback registry\n    return this.plugins;\n  }\n\n  /**\n\t * @private\n\t */\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n  constructor() {\n    this._init = [];\n  }\n\n  /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n   * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callCallback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  invalidate() {\n    // When plugins are registered, there is the possibility of a double\n    // invalidate situation. In this case, we only want to invalidate once.\n    // If we invalidate multiple times, the `_oldCache` is lost and all of the\n    // plugins are restarted without being correctly stopped.\n    // See https://github.com/chartjs/Chart.js/issues/8147\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n\n    const descriptors = this._cache = this._createDescriptors(chart);\n\n    this._notifyStateChanges(chart);\n\n    return descriptors;\n  }\n\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    // options === false => all plugins are disabled\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    // make sure plugin defaults are in scopes for local (not registered) plugins\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    // These are just defaults that plugins can override\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n  if (id === 'x' || id === 'y' || id === 'r') {\n    return id;\n  }\n}\n\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n  for (const opts of scaleOptions) {\n    const axis = opts.axis\n      || axisFromPosition(opts.position)\n      || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n    if (axis) {\n      return axis;\n    }\n  }\n  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {axis};\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const scales = Object.create(null);\n\n  // First figure out first scale id's per axis.\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n\n  // Then merge dataset defaults to scale configs\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n\n  // apply scale defaults, if not overridden by dataset defaults\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n\n  return scales;\n}\n\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\n\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n\n  initOptions(config);\n\n  return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nexport default class Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  get platform() {\n    return this._config.platform;\n  }\n\n  get type() {\n    return this._config.type;\n  }\n\n  set type(type) {\n    this._config.type = type;\n  }\n\n  get data() {\n    return this._config.data;\n  }\n\n  set data(data) {\n    this._config.data = initData(data);\n  }\n\n  get options() {\n    return this._config.options;\n  }\n\n  set options(options) {\n    this._config.options = options;\n  }\n\n  get plugins() {\n    return this._config.plugins;\n  }\n\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @return {string[][]}\n   */\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset animation options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @param {string} transition\n   * @return {string[][]}\n   */\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        // The following are used for looking up the `animations` and `animation` keys\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving element options that belong\n   * to an dataset. These keys do not include the dataset itself, because it\n   * is not under options.\n   * @param {string} datasetType\n   * @param {string} elementType\n   * @return {string[][]}\n   */\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving plugin options.\n   * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n   * @return {string[][]}\n   */\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n\n  /**\n   * @private\n   */\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n\n  /**\n   * Resolves the objects from options and defaults for option value resolution.\n   * @param {object} mainScope - The main scope object for options\n   * @param {string[][]} keyLists - The arrays of keys in resolution order\n   * @param {boolean} [resetCache] - reset the cache for this mainScope\n   */\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n\n    const scopes = new Set();\n\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n\n  /**\n   * Returns the option scopes for resolving chart options\n   * @return {object[]}\n   */\n  chartOptionScopes() {\n    const {options, type} = this;\n\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {string[]} names\n   * @param {function|object} context\n   * @param {string[]} [prefixes]\n   * @return {object}\n   */\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      // subResolver is passed to scriptable options. It should not resolve to hover options.\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {object} [context]\n   * @param {string[]} [prefixes]\n   * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n   */\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\n\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n\n  chart.notifyPlugins('afterRender');\n  callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    // Support for array based queries (such as jQuery)\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    // Support for any object associated to a canvas (including a context2d)\n    item = item.canvas;\n  }\n  return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\n\nclass Chart {\n\n  static defaults = defaults;\n  static instances = instances;\n  static overrides = overrides;\n  static registry = registry;\n  static version = version;\n  static getChart = getChart;\n\n  static register(...items) {\n    registry.add(...items);\n    invalidatePlugins();\n  }\n\n  static unregister(...items) {\n    registry.remove(...items);\n    invalidatePlugins();\n  }\n\n  // eslint-disable-next-line max-statements\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    // Store the previously used aspect ratio to determine if a resize\n    // is needed during updates. Do this after _options is set since\n    // aspectRatio uses a getter\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    /** @type {?{attach?: function, detach?: function, resize?: function}} */\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n\n    // Add the chart instance to the global namespace\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\n      // The given item is not a compatible context2d element, let's return before finalizing\n      // the chart initialization but after setting basic chart / controller properties that\n      // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n      // https://github.com/chartjs/Chart.js/issues/2807\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      // If aspectRatio is defined in options, use that.\n      return aspectRatio;\n    }\n\n    if (maintainAspectRatio && _aspectRatio) {\n      // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n      return _aspectRatio;\n    }\n\n    // Calculate\n    return height ? width / height : null;\n  }\n\n  get data() {\n    return this.config.data;\n  }\n\n  set data(data) {\n    this.config.data = data;\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  set options(options) {\n    this.config.options = options;\n  }\n\n  get registry() {\n    return registry;\n  }\n\n  /**\n\t * @private\n\t */\n  _initialize() {\n    // Before init plugin notification\n    this.notifyPlugins('beforeInit');\n\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n\n    this.bindEvents();\n\n    // After init plugin notification\n    this.notifyPlugins('afterInit');\n\n    return this;\n  }\n\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n\n  /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n\n    this.notifyPlugins('resize', {size: newSize});\n\n    callCallback(options.onResize, [this, newSize], this);\n\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        // The resize update is delayed, only draw without updating.\n        this.render();\n      }\n    }\n  }\n\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n\n  /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n\n      scale.init(scaleOptions, options);\n    });\n    // clear up discarded scales\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n\n  /**\n\t * @private\n\t */\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n\n    this._removeUnreferencedMetasets();\n\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n\n    this._updateMetasets();\n    return newControllers;\n  }\n\n  /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n\n  /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n\n  update(mode) {\n    const config = this.config;\n\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n\n    // plugins options references might have change, let's invalidate the cache\n    // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n    this._plugins.invalidate();\n\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    // Make sure dataset controllers are updated and new controllers are reset\n    const newControllers = this.buildOrUpdateControllers();\n\n    this.notifyPlugins('beforeElementsUpdate');\n\n    // Make sure all dataset controllers have correct meta data counts\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      // New controllers will be reset after the layout pass, so we only want to modify\n      // elements added to new datasets\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n\n    // Only reset the controllers if we have animations\n    if (!animsDisabled) {\n      // Can only reset the new controllers after the scales have been updated\n      // Reset is done to get the starting point for the initial animation\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n\n    this._updateDatasets(mode);\n\n    // Do this before render so that any plugins that need final scale updates can use it\n    this.notifyPlugins('afterUpdate', {mode});\n\n    this._layers.sort(compare2Level('z', '_idx'));\n\n    // Replay last event from before update, or set hover styles on active elements\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n\n  /**\n   * @private\n   */\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      // The configured events have changed. Rebind.\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n\n  /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n\n    layouts.update(this, this.width, this.height, minPadding);\n\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n        return;\n      }\n\n      // configure is called twice, once in core.scale.update and once here.\n      // Here the boxes are fully updated and at their final positions.\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n\n    this.notifyPlugins('afterLayout');\n  }\n\n  /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n\n  /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n\n    meta.controller._update(mode);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      // Unset pending resize request now to avoid possible recursion within _resize\n      this._resizeBeforeDraw = null;\n      this._resize(width, height);\n    }\n    this.clear();\n\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n    // currently be part of layers. Instead, we draw\n    // layers <= 0 before(default, backward compat), and the rest after\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this._drawDatasets();\n\n    // Rest of layers\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this.notifyPlugins('afterDraw');\n  }\n\n  /**\n\t * @private\n\t */\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n\n  /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n\n  /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    // @ts-expect-error\n    const clip = getDatasetClipArea(this, meta);\n\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n\n    if (clip) {\n      clipArea(ctx, clip);\n    }\n\n    meta.controller.draw();\n\n    if (clip) {\n      unclipArea(ctx);\n    }\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n\n  /**\n   * Checks whether the given point is in the chart area.\n   * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n   * @returns {boolean}\n   */\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n\n    return [];\n  }\n\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\t\t\t// See isDatasetVisible() comment\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n\n    return meta;\n  }\n\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n\n    const meta = this.getDatasetMeta(datasetIndex);\n\n    // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n    // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n\n  /**\n\t * @private\n\t */\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n\n  /**\n\t * @private\n\t */\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n\n    this._stop();\n    this.config.clearCache();\n\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n\n    delete instances[this.id];\n\n    this.notifyPlugins('afterDestroy');\n  }\n\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n\n  /**\n\t * @private\n\t */\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n\n  /**\n   * @private\n   */\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n\n    each(this.options.events, (type) => _add(type, listener));\n  }\n\n  /**\n   * @private\n   */\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n\n    let detached; // eslint-disable-line prefer-const\n    const attached = () => {\n      _remove('attach', attached);\n\n      this.attached = true;\n      this.resize();\n\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n\n    detached = () => {\n      this.attached = false;\n\n      _remove('resize', listener);\n\n      // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n      this._stop();\n      this._resize(0, 0);\n\n      _add('attach', attached);\n    };\n\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n\n  /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n\n    if (changed) {\n      this._active = active;\n      // Make sure we don't use the previous mouse event to override the active elements in update.\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n\n  /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n   * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n\n  /**\n   * Check if a plugin with the specific ID is registered and enabled\n   * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n   * @returns {boolean}\n   */\n  isPluginEnabled(pluginId) {\n    return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n\n    if (changed || args.changed) {\n      this.render();\n    }\n\n    return this;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n   * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n\n    // If the event is replayed from `update`, we should evaluate with the final positions.\n    //\n    // The `replay`:\n    // It's the last event (excluding click) that has occurred before `update`.\n    // So mouse has not moved. It's also over the chart, because there is a `replay`.\n    //\n    // The why:\n    // If animations are active, the elements haven't moved yet compared to state before update.\n    // But if they will, we are activating the elements that would be active, if this check\n    // was done after the animations have completed. => \"final positions\".\n    // If there is no animations, the \"final\" and \"current\" positions are equal.\n    // This is done so we do not have to evaluate the active elements each animation frame\n    // - it would be expensive.\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n    if (inChartArea) {\n      // Set _lastEvent to null while we are processing the event handlers.\n      // This prevents recursion if the handler calls chart.update()\n      this._lastEvent = null;\n\n      // Invoke onHover hook\n      callCallback(options.onHover, [e, active, this], this);\n\n      if (isClick) {\n        callCallback(options.onClick, [e, active, this], this);\n      }\n    }\n\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n\n    this._lastEvent = lastEvent;\n\n    return changed;\n  }\n\n  /**\n   * @param {ChartEvent} e - The event\n   * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n   * @param {boolean} inChartArea - Is the event inside chartArea\n   * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n   * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n   * @pravate\n   */\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n  return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n  if (innerRadius > 0) {\n    const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n    ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n  } else {\n    const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n    if (borderJoinStyle === 'round') {\n      ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n    } else if (borderJoinStyle === 'bevel') {\n      const r = 2 * clipWidth * clipWidth;\n      const endX = -r * Math.cos(endAngle + PI / 2) + x;\n      const endY = -r * Math.sin(endAngle + PI / 2) + y;\n      const startX = r * Math.cos(startAngle + PI / 2) + x;\n      const startY = r * Math.sin(startAngle + PI / 2) + y;\n      ctx.lineTo(endX, endY);\n      ctx.lineTo(startX, startY);\n    }\n  }\n  ctx.closePath();\n\n  ctx.moveTo(0, 0);\n  ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n  ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n\n  // Draw an inner border by clipping the arc and drawing a double-width border\n  // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n  // Outer limits are complicated. We want to compute the available angular distance at\n  // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n  // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n  //\n  // If the borderRadius is large, that value can become negative.\n  // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n  // we know that the thickness term will dominate and compute the limits at that point\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */\nfunction pathArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  end: number,\n  circular: boolean,\n) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n  let spacingOffset = 0;\n  const alpha = end - start;\n\n  if (spacing) {\n    // When spacing is present, it is the same for all items\n    // So we adjust the start and end angle of the arc such that\n    // the distance is the same as it would be without the spacing\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n    // The corner segment from point 2 to point 3\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n\n    // The line from point 3 to point 4\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n\n    // The corner segment from point 4 to point 5\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n\n    // The inner arc from point 5 to point b to point 6\n    const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n    // The corner segment from point 6 to point 7\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n\n    // The line from point 7 to point 8\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n\n    // The corner segment from point 8 to point 1\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference, options} = element;\n  const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n  const inner = options.borderAlign === 'inner';\n\n  if (!borderWidth) {\n    return;\n  }\n\n  ctx.setLineDash(borderDash || []);\n  ctx.lineDashOffset = borderDashOffset;\n\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n\n  if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n    clipSelf(ctx, element, endAngle);\n  }\n\n  if (!fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.stroke();\n  }\n}\n\nexport interface ArcProps extends Point {\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n  circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n  static id = 'arc';\n\n  static defaults = {\n    borderAlign: 'center',\n    borderColor: '#fff',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: undefined,\n    borderRadius: 0,\n    borderWidth: 2,\n    offset: 0,\n    spacing: 0,\n    angle: undefined,\n    circular: true,\n    selfJoin: false,\n  };\n\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor'\n  };\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash'\n  };\n\n  circumference: number;\n  endAngle: number;\n  fullCircles: number;\n  innerRadius: number;\n  outerRadius: number;\n  pixelMargin: number;\n  startAngle: number;\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n    const betweenAngles = _circumference >= TAU || nonZeroBetween;\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n    return (betweenAngles && withinRadius);\n  }\n\n  getCenterPoint(useFinalPosition: boolean) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius'\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n\n  tooltipPosition(useFinalPosition: boolean) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n\n  draw(ctx: CanvasRenderingContext2D) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 4;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n\n    ctx.save();\n\n    const halfAngle = (this.startAngle + this.endAngle) / 2;\n    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n    const radiusOffset = offset * fix;\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n\n    drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n    ctx.restore();\n  }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n\n  return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  // eslint-disable-next-line prefer-const\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n\n    prev = point;\n  }\n\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n\n  return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      // Draw line to maxY and minY, using the average x-coordinate\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      // Line to y-value of last point in group. So the line continues\n      // from correct position. Not using move, to have solid path.\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    }\n\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0; // truncated x-coordinate\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      // Draw line to next x-position, using the first (or only)\n      // y-value in that group\n      ctx.lineTo(x, y);\n\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    // Keep track of the last y-value in group\n    lastY = y;\n  }\n  drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n\n  return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\n\nexport default class LineElement extends Element {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderCapStyle: 'butt',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 3,\n    capBezierPoints: true,\n    cubicInterpolationMode: 'default',\n    fill: false,\n    spanGaps: false,\n    stepped: false,\n    tension: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n  };\n\n\n  constructor(cfg) {\n    super();\n\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n\n  get points() {\n    return this._points;\n  }\n\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n\n  /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n\n  /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n\n  /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n\n    if (!segments.length) {\n      return;\n    }\n\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n\n  /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n\n  /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n\n    start = start || 0;\n    count = count || (this.points.length - start);\n\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n\n  /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n\n    if (points.length && options.borderWidth) {\n      ctx.save();\n\n      draw(ctx, this, start, count);\n\n      ctx.restore();\n    }\n\n    if (this.animated) {\n      // When line is animated, the control points and path are not cached.\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n  CartesianParsedData,\n  ChartArea,\n  Point,\n  PointHoverOptions,\n  PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n  static id = 'point';\n\n  parsed: CartesianParsedData;\n  skip?: boolean;\n  stop?: boolean;\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderWidth: 1,\n    hitRadius: 1,\n    hoverBorderWidth: 1,\n    hoverRadius: 4,\n    pointStyle: 'circle',\n    radius: 3,\n    rotation: 0\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n\n  inXRange(mouseX: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseX, 'x', useFinalPosition);\n  }\n\n  inYRange(mouseY: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseY, 'y', useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition?: boolean) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n\n  size(options?: Partial<PointOptions & PointHoverOptions>) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n\n  draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n    const options = this.options;\n\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n\n  getRange() {\n    const options = this.options || {};\n    // @ts-expect-error Fallbacks should never be hit in practice\n    return options.radius + options.hitRadius;\n  }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n  let left, right, top, bottom, half;\n\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n\n  return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n\n  // If the value is an object, assume the user knows what they are doing\n  // and apply as directed.\n  const enableBorder = enableBorderRadius || isObject(value);\n\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\n\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\n\nexport default class BarElement extends Element {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderSkipped: 'start',\n    borderWidth: 0,\n    borderRadius: 0,\n    inflateAmount: 'auto',\n    pointStyle: undefined\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n","import {DoughnutController, PolarAreaController, defaults} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n  enabled?: boolean;\n  forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n  backgroundColor?: unknown;\n  borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n  'rgb(54, 162, 235)', // blue\n  'rgb(255, 99, 132)', // red\n  'rgb(255, 159, 64)', // orange\n  'rgb(255, 205, 86)', // yellow\n  'rgb(75, 192, 192)', // green\n  'rgb(153, 102, 255)', // purple\n  'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n  return i;\n}\n\nfunction getColorizer(chart: Chart) {\n  let i = 0;\n\n  return (dataset: ChartDataset, datasetIndex: number) => {\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n    if (controller instanceof DoughnutController) {\n      i = colorizeDoughnutDataset(dataset, i);\n    } else if (controller instanceof PolarAreaController) {\n      i = colorizePolarAreaDataset(dataset, i);\n    } else if (controller) {\n      i = colorizeDefaultDataset(dataset, i);\n    }\n  };\n}\n\nfunction containsColorsDefinitions(\n  descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n  let k: number | string;\n\n  for (k in descriptors) {\n    if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction containsColorsDefinition(\n  descriptor: ColorsDescriptor\n) {\n  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nfunction containsDefaultColorsDefenitions() {\n  return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\n\nexport default {\n  id: 'colors',\n\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  } as ColorsPluginOptions,\n\n  beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n    if (!options.enabled) {\n      return;\n    }\n\n    const {\n      data: {datasets},\n      options: chartOptions\n    } = chart.config;\n    const {elements} = chartOptions;\n\n    const containsColorDefenition = (\n      containsColorsDefinitions(datasets) ||\n      containsColorsDefinition(chartOptions) ||\n      (elements && containsColorsDefinitions(elements)) ||\n      containsDefaultColorsDefenitions());\n\n    if (!options.forceOverride && containsColorDefenition) {\n      return;\n    }\n\n    const colorizer = getColorizer(chart);\n\n    datasets.forEach(colorizer);\n  }\n};\n","import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  /**\n   * Implementation of the Largest Triangle Three Buckets algorithm.\n   *\n   * This implementation is based on the original implementation by Sveinn Steinarsson\n   * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n   *\n   * The original implementation is MIT licensed.\n   */\n  const samples = options.samples || availableWidth;\n  // There are less points than the threshold, returning the whole array\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  const decimated = [];\n\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  // Starting from offset\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n\n    // Adding offset\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n\n    // Adding offset\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n\n    // Note that this is changed from the original algorithm which initializes these\n    // values to 1. The reason for this change is that if the area is small, nextA\n    // would never be set and thus a crash would occur in the next loop as `a` would become\n    // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n    // initializing with a negative number is the correct solution.\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n\n  // Include the last point\n  decimated[sampledIndex++] = data[endIndex];\n\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      // Use point.x here because we're computing the average data `x` value\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      // Push up to 4 points, 3 for the last interval and the first point for this interval\n      const lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        // The interval is defined by 4 points: start, min, max, end.\n        // The starting point is already considered at this point, so we need to determine which\n        // of the other points to add. We need to sort these points to ensure the decimated data\n        // is still sorted and then ensure there are no duplicates.\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n\n      // lastIndex === startIndex will occur when a range has only 1 point which could\n      // happen with very uneven data\n      if (i > 0 && lastIndex !== startIndex) {\n        // Last point in the previous interval\n        decimated.push(data[lastIndex]);\n      }\n\n      // Start of the new interval\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n\n  return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: data,\n    });\n  }\n}\n\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count;\n\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n\n  return {start, count};\n}\n\nexport default {\n  id: 'decimation',\n\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    // Assume the entire chart is available to show a few more points than needed\n    const availableWidth = chart.width;\n\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        // Decimation is only supported for lines that have an X indexAxis\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        // Only line datasets are supported\n        return;\n      }\n\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        // Only linear interpolation is supported\n        return;\n      }\n\n      if (chart.options.parsing) {\n        // Plugin only supports data that does not need parsing\n        return;\n      }\n\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        // No decimation is required until we are above this threshold\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        // First time we are seeing this dataset\n        // We override the 'data' property with a setter that stores the\n        // raw data in _data, but reads the decimated data from _decimated\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      // Point the chart to the decimated data\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n    if (!target.segments) {\n      // Special case for boundary not supporting `segments` (simpleArc)\n      // Bounds are provided as `target` for partial circle, or undefined for full circle\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n\n    // Get all segments from `target` that intersect the bounds of current segment of `line`\n    const targetSegments = _boundSegments(target, bounds);\n\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    // @ts-ignore\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n\n    if (target.visible) {\n      return fill;\n    }\n\n    visited.push(fill);\n    fill = target.fill;\n  }\n\n  return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n  /** @type {string | {value: number}} */\n  const fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  let target = parseFloat(fill);\n\n  if (isFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n\n  return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n  let value;\n\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n\n  if (fill === false || fill === null) {\n    return false;\n  }\n\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      // First point of a segment -> need to add another point before this,\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        // In the middle of a segment, no need to add more points.\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n  const {chart, fill, line} = source;\n\n  if (isFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n\n  if (fill === 'shape') {\n    return true;\n  }\n\n  const boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n\n  if (isFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\n","import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {chart, index, line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  const meta = chart.getDatasetMeta(index);\n  const clip = getDatasetClipArea(chart, meta);\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale, clip} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n\n  ctx.save();\n\n  let fillColor = below;\n  if (below !== above) {\n    if (property === 'x') {\n      clipVertical(ctx, target, area.top);\n      fill(ctx, {line, target, color: above, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipVertical(ctx, target, area.bottom);\n    } else if (property === 'y') {\n      clipHorizontal(ctx, target, area.left);\n      fill(ctx, {line, target, color: below, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipHorizontal(ctx, target, area.right);\n      fillColor = above;\n    }\n  }\n  fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(clipX, firstPoint.y);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(clipX, lastPoint.y);\n    }\n  }\n\n  ctx.lineTo(clipX, target.first().y);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale, clip} = cfg;\n  const segments = _segments(line, target, property);\n\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n\n    clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n    ctx.beginPath();\n\n    const lineLoop = !!line.pathSegment(ctx, src);\n\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n    ctx.restore();\n  }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n  const chartArea = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n\n  if (property === 'x' || property === 'y') {\n    let left, top, right, bottom;\n\n    if (property === 'x') {\n      left = start;\n      top = chartArea.top;\n      right = end;\n      bottom = chartArea.bottom;\n    } else {\n      left = chartArea.left;\n      top = start;\n      right = chartArea.right;\n      bottom = end;\n    }\n\n    ctx.beginPath();\n\n    if (clip) {\n      left = Math.max(left, clip.left);\n      right = Math.min(right, clip.right);\n      top = Math.max(top, clip.top);\n      bottom = Math.min(bottom, clip.bottom);\n    }\n\n    ctx.rect(left, top, right - left, bottom - top);\n    ctx.clip();\n  }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n  id: 'filler',\n\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n\n      meta.$filler = source;\n      sources.push(source);\n    }\n\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n  _isBetween,\n  callback as call,\n  clipArea,\n  getRtlAdapter,\n  overrideTextDirection,\n  restoreTextDirection,\n  toFont,\n  toPadding,\n  unclipArea,\n  valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this._added = false;\n\n    // Contains hit boxes for each dataset (in dataset order)\n    this.legendHitBoxes = [];\n\n    /**\n \t\t * @private\n \t\t */\n    this._hoveredItem = null;\n\n    // Are we in doughnut mode which has a different data type\n    this.doughnutMode = false;\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n\n    this.legendItems = legendItems;\n  }\n\n  fit() {\n    const {options, ctx} = this;\n\n    // The legend may not be displayed for a variety of reasons including\n    // the fact that the defaults got set to `false`.\n    // When the legend is not displayed, there are no guarantees that the options\n    // are correctly formatted so we need to bail out as early as possible.\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    let width, height;\n\n    ctx.font = labelFont.string;\n\n    if (this.isHorizontal()) {\n      width = this.maxWidth; // fill all the width\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight; // fill all the height\n      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n    }\n\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n\n  /**\n\t * @private\n\t */\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n\n    return totalHeight;\n  }\n\n  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n\n    let left = 0;\n    let col = 0;\n\n    this.legendItems.forEach((legendItem, i) => {\n      const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n      // If too tall, go to new column\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n\n      // Store the hitbox width and height here. Final position will be updated in `draw`\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n      // Get max width\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n    return totalWidth;\n  }\n\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n\n      this._draw();\n\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n\n    this.drawTitle();\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    // current position\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n\n      // Set the ctx for the box\n      ctx.save();\n\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n      if (labelOpts.usePointStyle) {\n        // Recalculate x and y for drawPoint() because its expecting\n        // x and y to be center of figure (instead of top left)\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n\n        // Draw pointStyle as legend symbol\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        // Draw box as legend symbol\n        // Adjust position when boxHeight < fontSize (want it centered)\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n        ctx.beginPath();\n\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n\n      ctx.restore();\n    };\n\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n\n    // Horizontal\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n\n    overrideTextDirection(this.ctx, opts.textDirection);\n\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n      ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n\n      rtlHelper.setWidth(this.width);\n\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n\n      const realX = rtlHelper.x(x);\n\n      drawLegendBox(realX, y, legendItem);\n\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n      // Fill the actual label\n      fillText(rtlHelper.x(x), y, legendItem);\n\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else if (typeof legendItem.text !== 'string') {\n        const fontLineHeight = labelFont.lineHeight;\n        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n\n    if (!titleOpts.display) {\n      return;\n    }\n\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n\n    // These defaults are used when the legend is vertical.\n    // When horizontal, they are computed below.\n    let left = this.left;\n    let maxWidth = this.width;\n\n    if (this.isHorizontal()) {\n      // Move left / right so that the title is above the legend lines\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      // Move down so that the title is above the legend stack in every alignment\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n\n    // Now that we know the left edge of the inner legend box, compute the correct\n    // X coordinate from the title alignment\n    const x = _alignStartEnd(position, left, left + maxWidth);\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n\n  /**\n\t * @private\n\t */\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      // See if we are touching one of the dataset boxes\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          // Touching an element\n          return this.legendItems[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n\n    // Chart event already has relative position in it\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        call(opts.onLeave, [e, previous, this], this);\n      }\n\n      this._hoveredItem = hoveredItem;\n\n      if (hoveredItem && !sameItem) {\n        call(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      call(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  let legendItemText = legendItem.text;\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n  }\n  return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  let itemHeight = _itemHeight;\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  const labelHeight = legendItem.text ? legendItem.text.length : 0;\n  return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\n\nexport default {\n  id: 'legend',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Legend,\n\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n\n  // During the beforeUpdate step, the layout configuration needs to run\n  // This ensures that if the legend position changes (via an option update)\n  // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n\n  // The labels need to be built after datasets are updated to ensure that colors\n  // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n\n\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n\n    // a callback that will handle\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n\n    onHover: null,\n    onLeave: null,\n\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      // Generates labels shown in the legend\n      // Valid properties to return:\n      // text : text to display\n      // fillStyle : fill of coloured box\n      // strokeStyle: stroke of coloured box\n      // hidden : if this legend item refers to a hidden item\n      // lineCap : cap style for line\n      // lineDash\n      // lineDashOffset :\n      // lineJoin :\n      // lineWidth :\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n            // Below is extra data used for toggling the datasets\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n","import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n\n    this.left = 0;\n    this.top = 0;\n\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n\n    if (!opts.display) {\n      return;\n    }\n\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\n\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nexport default {\n  id: 'title',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Title,\n\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000         // by default greater than legend (1000) to be above\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n  id: 'subtitle',\n\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500         // by default greater than legend (1000) and smaller than title (2000)\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n  /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    let i, len;\n    let xSet = new Set();\n    let y = 0;\n    let count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        xSet.add(pos.x);\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n    if (count === 0 || xSet.size === 0) {\n      return false;\n    }\n\n    const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n    return {\n      x: xAverage,\n      y: y / count\n    };\n  },\n\n  /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x,\n      y\n    };\n  }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      // base = base.concat(toPush);\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n\n  // Count of all lines in the body\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    // Body lines may include some extra height depending on boxHeight\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  // Title width\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n\n  // Body width\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n  // Body lines may include some extra width due to the color box\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n\n  // Reset back to 0\n  widthPadding = 0;\n\n  // Footer width\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n\n  ctx.restore();\n\n  // Add padding\n  width += padding.width;\n\n  return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n\n  return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  // eslint-disable-next-line prefer-const\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n  // Args are: (tooltipItems, data)\n  beforeTitle: noop,\n  title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      const item = tooltipItems[0];\n      const labels = item.chart.data.labels;\n      const labelCount = labels ? labels.length : 0;\n\n      if (this && this.options && this.options.mode === 'dataset') {\n        return item.dataset.label || '';\n      } else if (item.label) {\n        return item.label;\n      } else if (labelCount > 0 && item.dataIndex < labelCount) {\n        return labels[item.dataIndex];\n      }\n    }\n\n    return '';\n  },\n  afterTitle: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeBody: noop,\n\n  // Args are: (tooltipItem, data)\n  beforeLabel: noop,\n  label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    let label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n    const value = tooltipItem.formattedValue;\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n    return label;\n  },\n  labelColor(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      borderColor: options.borderColor,\n      backgroundColor: options.backgroundColor,\n      borderWidth: options.borderWidth,\n      borderDash: options.borderDash,\n      borderDashOffset: options.borderDashOffset,\n      borderRadius: 0,\n    };\n  },\n  labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation,\n    };\n  },\n  afterLabel: noop,\n\n  // Args are: (tooltipItems, data)\n  afterBody: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  const result = callbacks[name].call(ctx, arg);\n\n  if (typeof result === 'undefined') {\n    return defaultCallbacks[name].call(ctx, arg);\n  }\n\n  return result;\n}\n\nexport class Tooltip extends Element {\n\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n  static positioners = positioners;\n\n  constructor(config) {\n    super();\n\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n    // and `labelTextColors` to create a single variable\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n\n    if (cached) {\n      return cached;\n    }\n\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n\n  getTitle(context, options) {\n    const {callbacks} = options;\n\n    const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n    const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n    const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n    return lines;\n  }\n\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n    );\n  }\n\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n      bodyItems.push(bodyItem);\n    });\n\n    return bodyItems;\n  }\n\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n    );\n  }\n\n  // Get the footer and beforeFooter and afterFooter lines\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n\n    const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n    const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n    const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n    return lines;\n  }\n\n  /**\n\t * @private\n\t */\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n\n    // If the user provided a filter function, use it to modify the tooltip items\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n\n    // If the user provided a sorting function, use it to modify the tooltip items\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n\n    // Determine colors for boxes\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n      labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n      labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n    });\n\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n\n        // Left draws bottom -> top, this y1 is on the bottom\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n\n        // Right draws top -> bottom, thus y1 is on the top\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n\n        // Top draws left -> right, thus x1 is on the left\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n\n        // Bottom draws right -> left, thus x1 is on the right\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.titleAlign, options);\n\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n        }\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColor = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      // Recalculate x and y for drawPoint() because its expecting\n      // x and y to be center of figure (instead of top left)\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n\n      // Fill the point with white so that colours merge nicely if the opacity is < 1\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n\n      // Draw the point\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.fillStyle = labelColor.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      // Border\n      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.setLineDash(labelColor.borderDash || []);\n      ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n      // Fill a white rect so that colours merge nicely if the opacity is < 1\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        // Normal rect\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n\n    // restore fillStyle\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n    // Before body lines\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n\n    // Draw body lines now\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n\n      lines = bodyItem.lines;\n      // Draw Legend-like boxes if needed\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        // Reset for any lines that don't include colorbox\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n\n      each(bodyItem.after, fillLineOfText);\n    }\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n\n    // After body lines\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n\n      footerFont = toFont(options.footerFont);\n\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n\n    ctx.fill();\n\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n\n  /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n\n  /**\n   * Determine if the tooltip will draw anything\n   * @returns {boolean} True if the tooltip will render\n   */\n  _willRender() {\n    return !!this.opacity;\n  }\n\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n\n    if (!opacity) {\n      return;\n    }\n\n    this._updateAnimationTarget(options);\n\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n\n    // IE11/Edge does not like very small opacities, so snap to 0\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n    const padding = toPadding(options.padding);\n\n    // Truthy/falsey value for empty tooltip\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n\n      // Draw Background\n      this.drawBackground(pt, ctx, tooltipSize, options);\n\n      overrideTextDirection(ctx, options.textDirection);\n\n      pt.y += padding.top;\n\n      // Titles\n      this.drawTitle(pt, ctx, options);\n\n      // Body\n      this.drawBody(pt, ctx, options);\n\n      // Footer\n      this.drawFooter(pt, ctx, options);\n\n      restoreTextDirection(ctx, options.textDirection);\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n    // When there are multiple items shown, but the tooltip position is nearest mode\n    // an update may need to be made because our position may have changed even though\n    // the items are the same as before.\n    const positionChanged = this._positionChanged(active, e);\n\n    // Remember Last Actives\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n    // Only handle target event on tooltip change\n    if (changed) {\n      this._active = active;\n\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n\n        this.update(true, replay);\n      }\n    }\n\n    return changed;\n  }\n\n  /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      // But make sure that active elements are still valid.\n      return lastActive.filter(i =>\n        this.chart.data.datasets[i.datasetIndex] &&\n        this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n      );\n    }\n\n    // Find Active Elements for tooltips\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n    if (options.reverse) {\n      active.reverse();\n    }\n\n    return active;\n  }\n\n  /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\n\nexport default {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      // If the event is replayed from `update`, we should evaluate with the final positions.\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        // notify chart about the change, so it will render\n        args.changed = true;\n      }\n    }\n  },\n\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: defaultCallbacks\n  },\n\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n\n  // Resolve additionally from `interaction` options and defaults.\n  additionalOptionScopes: ['interaction']\n};\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n  const labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n  return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n  static id = 'category';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: _getLabelForValue\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n\n    // If we are viewing some subset of labels, slice the original array\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n\n  getLabelForValue(value) {\n    return _getLabelForValue.call(this, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    super.configure();\n\n    if (!this.isHorizontal()) {\n      // For backward compatibility, vertical category scale reverse is inverted.\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n\n  // Used to get data value locations. Value can either be an index or a numerical value\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  // Must override base implementation because it calls getPixelForValue\n  // and category scale can have duplicate values\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n\n  getBasePixel() {\n    return this.bottom;\n  }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n *    if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n *    Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n *    spacing = (max - min) / count\n *    Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n *    spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n  const ticks = [];\n  // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n  // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n  // for details.\n\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n\n  // Beyond MIN_SPACING floating point numbers being to lose precision\n  // such that we can't do the math necessary to generate ticks\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\n    // If the user specified a precision, round to that number of decimal places\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n    // spacing = step;\n    // numSpaces = (max - min) / spacing;\n    // Note that we round here to handle the case where almostWhole translated an FP error\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n    // Sometimes these are no-ops, but it makes the code a lot clearer\n    // and when a user defined range is specified, we want the correct ticks\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    // Case 4\n    numSpaces = (niceMax - niceMin) / spacing;\n\n    // If very close to our rounded value, use it.\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n\n  // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n  // until this point\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n\n      if (niceMin < min) {\n        j++; // Skip niceMin\n      }\n      // If the next nice tick is close to min, skip it\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n\n  for (; j < numSpaces; ++j) {\n    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n    ticks.push({value: tickValue});\n  }\n\n  if (maxDefined && includeBounds && niceMax !== max) {\n    // If the previous tick is too close to max, replace it with max, else add max\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    /** @type {number} */\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n\n    return +raw;\n  }\n\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n\n    if (min === max) {\n      let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n      setMax(max + offset);\n\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    // eslint-disable-next-line prefer-const\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n\n    return maxTicks;\n  }\n\n  /**\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    // Figure out what the max number of ticks we can support it is based on the size of\n    // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n    // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n    // the graph. Make sure we always have at least 2 ticks\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n\n    super.configure();\n\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n  static id = 'linear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.numeric\n    }\n  };\n\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? min : 0;\n    this.max = isFinite(max) ? max : 1;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n\n  // Utils\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  const rangeStep = Math.pow(10, rangeExp);\n  const start = Math.floor(min / rangeStep);\n  const end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  const range = max - min;\n  let rangeExp = log10Floor(range);\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n  return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n  min = finiteOrDefault(generationOptions.min, min);\n  const ticks = [];\n  const minExp = log10Floor(min);\n  let exp = startExp(min, max);\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  const stepSize = Math.pow(10, exp);\n  const base = minExp > exp ? Math.pow(10, minExp) : 0;\n  const start = Math.round((min - base) * precision) / precision;\n  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  let significand = Math.floor((start - offset) / Math.pow(10, exp));\n  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n  while (value < max) {\n    ticks.push({value, major: isMajor(value), significand});\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n  const lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n  return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n  static id = 'logarithmic';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.logarithmic,\n      major: {\n        enabled: true\n      }\n    }\n  };\n\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isFinite(value) && value > 0 ? value : null;\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? Math.max(0, min) : null;\n    this.max = isFinite(max) ? Math.max(0, max) : null;\n\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n\n    // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n    // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n    if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n    }\n\n    this.handleTickRangeOptions();\n  }\n\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (min === max) {\n      if (min <= 0) { // includes null\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(changeExponent(min, -1));\n        setMax(changeExponent(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(changeExponent(max, -1));\n    }\n    if (max <= 0) {\n\n      setMax(changeExponent(min, +1));\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const start = this.min;\n\n    super.configure();\n\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n  // Right, this is really confusing and there is a lot of maths going on here\n  // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n  //\n  // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n  //\n  // Solution:\n  //\n  // We assume the radius of the polygon is half the size of the canvas at first\n  // at each index we check if the text overlaps.\n  //\n  // Where it does, we store that angle and that index.\n  //\n  // After finding the largest index and angle we calculate how much we need to remove\n  // from the shape radius to move the point inwards by that x.\n  //\n  // We average the left and right distances to get the maximum shape radius that can fit in the box\n  // along with labels.\n  //\n  // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n  // on each side, removing that from the size, halving it and adding the left x protrusion width.\n  //\n  // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n  // and position it in the most space efficient manner\n  //\n  // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n  // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n  // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n\n  // Now that text size is determined, compute the full positions\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n  const outerDistance = scale.drawingArea;\n  const {extra, additionalAngle, padding, size} = itemOpts;\n  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  const y = yForAngle(pointLabelPosition.y, size.h, angle);\n  const textAlign = getTextAlignForAngle(angle);\n  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    // if to draw or overlapped\n    visible: true,\n\n    // Text position\n    x: pointLabelPosition.x,\n    y,\n\n    // Text rendering data\n    textAlign,\n\n    // Bounding box\n    left,\n    top: y,\n    right: left + size.w,\n    bottom: y + size.h\n  };\n}\n\nfunction isNotOverlapped(item, area) {\n  if (!area) {\n    return true;\n  }\n  const {left, top, right, bottom} = item;\n  const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n    _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const {centerPointLabels, display} = opts.pointLabels;\n  const itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  let area;\n\n  for (let i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n\n    const item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n      if (item.visible) {\n        area = item;\n      }\n    }\n  }\n  return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\n\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  const {left, top, right, bottom} = item;\n  const {backdropColor} = opts;\n\n  if (!isNullOrUndef(backdropColor)) {\n    const borderRadius = toTRBLCorners(opts.borderRadius);\n    const padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n\n    const backdropLeft = left - padding.left;\n    const backdropTop = top - padding.top;\n    const backdropWidth = right - left + padding.width;\n    const backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(v => v !== 0)) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {\n        x: backdropLeft,\n        y: backdropTop,\n        w: backdropWidth,\n        h: backdropHeight,\n        radius: borderRadius,\n      });\n      ctx.fill();\n    } else {\n      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n    }\n  }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const item = scale._pointLabelItems[i];\n    if (!item.visible) {\n      // overlapping\n      continue;\n    }\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign} = item;\n\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    // Draw circular arcs between the points\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    // Draw straight lines connecting each index\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n\n  const {color, lineWidth} = gridLineOpts;\n\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(borderOpts.dash || []);\n  ctx.lineDashOffset = borderOpts.dashOffset;\n\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n  static id = 'radialLinear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    display: true,\n\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n\n    angleLines: {\n      display: true,\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n\n    grid: {\n      circular: false\n    },\n\n    startAngle: 0,\n\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n\n      callback: Ticks.formatters.numeric\n    },\n\n    pointLabels: {\n      backdropColor: undefined,\n\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPadding: 2,\n\n      // Boolean - if true, show point labels\n      display: true,\n\n      // Number - Point label font size in pixels\n      font: {\n        size: 10\n      },\n\n      // Function - Used to convert point labels\n      callback(label) {\n        return label;\n      },\n\n      // Number - Additionl padding between scale and pointLabel\n      padding: 5,\n\n      // Boolean - if true, center point labels to slices in polar chart\n      centerPointLabels: false\n    }\n  };\n\n  static defaultRoutes = {\n    'angleLines.color': 'borderColor',\n    'pointLabels.color': 'color',\n    'ticks.color': 'color'\n  };\n\n  static descriptors = {\n    angleLines: {\n      _fallback: 'grid'\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.xCenter = undefined;\n    /** @type {number} */\n    this.yCenter = undefined;\n    /** @type {number} */\n    this.drawingArea = undefined;\n    /** @type {string[]} */\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n\n    this.min = isFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n    // Point labels\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n\n  fit() {\n    const opts = this.options;\n\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n\n    // Take into account half font size + the yPadding of the top value\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid, border} = opts;\n    const labelCount = this._pointLabels.length;\n\n    let i, offset, position;\n\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0 || (index === 0 && this.min < 0)) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const context = this.getContext(index);\n          const optsAtIndex = grid.setContext(context);\n          const optsAtIndexBorder = border.setContext(context);\n\n          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n        }\n      });\n    }\n\n    if (angleLines.display) {\n      ctx.save();\n\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n\n        if (!lineWidth || !color) {\n          continue;\n        }\n\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n        offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {}\n\n  /**\n\t * @protected\n\t */\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    if (!tickOpts.display) {\n      return;\n    }\n\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n\n    this.ticks.forEach((tick, index) => {\n      if ((index === 0 && this.min >= 0) && !opts.reverse) {\n        return;\n      }\n\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n        strokeColor: optsAtIndex.textStrokeColor,\n        strokeWidth: optsAtIndex.textStrokeWidth,\n      });\n    });\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n  return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  // Only parse if it's not a timestamp already\n  if (!isFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n\n  return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  /** @type {Object<number,object>} */\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n\n  // We set the major ticks separately from the above loop because calling startOf for every tick\n  // is expensive when there is a large number of ticks\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n  static id = 'time';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n\n    adapters: {},\n    time: {\n      parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n      unit: false, // false == automatic or override with week, month, year, etc.\n      round: false, // none, or override with week, month, year, etc.\n      isoWeekday: false, // override week start day\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n\n      callback: false,\n\n      major: {\n        enabled: false\n      }\n    }\n  };\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {{data: number[], labels: number[], all: number[]}} */\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n\n    /** @type {Unit} */\n    this._unit = 'day';\n    /** @type {Unit=} */\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n\n  init(scaleOpts, opts = {}) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    /** @type {DateAdapter} */\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n    adapter.init(opts);\n\n    // Backward compatibility: before introducing adapter, `displayFormats` was\n    // supposed to contain *all* unit/string pairs but this can't be resolved\n    // when loading the scale (adapters are loaded afterward), so let's populate\n    // missing formats on update\n    mergeIf(time.displayFormats, adapter.formats());\n\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n\n    super.init(scaleOpts);\n\n    this._normalized = opts.normalized;\n  }\n\n  /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n    /**\n\t\t * @param {object} bounds\n\t\t */\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n\n    // If we have user provided `min` and `max` labels / data bounds can be ignored\n    if (!minDefined || !maxDefined) {\n      // Labels are always considered, when user did not force bounds\n      _applyBounds(this._getLabelBounds());\n\n      // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n      // data bounds are ignored (and don't need to be determined)\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n\n    min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n    // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n\n  /**\n\t * @private\n\t */\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n\n  /**\n\t * @return {object[]}\n\t */\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n\n    const min = this.min;\n    const max = this.max;\n\n    const ticks = _filterBetween(timestamps, min, max);\n\n    // PRIVATE\n    // determineUnitForFormatting relies on the number of ticks so we don't use it when\n    // autoSkip is enabled because we don't yet know what the final number of ticks will be\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n\n    if (options.reverse) {\n      ticks.reverse();\n    }\n\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n\n  afterAutoSkip() {\n    // Offsets for bar charts need to be handled with the auto skipped\n    // ticks. Once ticks have been skipped, we re-compute the offsets.\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n\n  /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n  initOffsets(timestamps = []) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n\n  /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    // @ts-ignore\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n\n    // For 'week' unit, handle the first day of week option\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n\n    // @ts-ignore\n    return Object.keys(ticks).sort(sorter).map(x => +x);\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n\n  /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n  format(value, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const fmt = format || formats[unit];\n    return this._adapter.format(value, fmt);\n  }\n\n  /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formatter = options.ticks.callback;\n\n    if (formatter) {\n      return call(formatter, [time, index, ticks], this);\n    }\n\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n\n    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n  }\n\n  /**\n\t * @param {object[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n\n  /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n\n  /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n\n    // pick the longest format (milliseconds) for guesstimation\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    // subtract 1 - if offset then there's one less label than tick\n    // if not offset then one half label padding is added to each end leaving room for one less label\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n\n    return (this._cache.data = this.normalize(timestamps));\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n\n  /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n  normalize(values) {\n    // It seems to be somewhat faster to do sorting first\n    return _arrayUnique(values.sort(sorter));\n  }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n  static id = 'timeseries';\n\n  /**\n   * @type {any}\n   */\n  static defaults = TimeScale.defaults;\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {object[]} */\n    this._table = [];\n    /** @type {number} */\n    this._minPos = undefined;\n    /** @type {number} */\n    this._tableRange = undefined;\n  }\n\n  /**\n\t * @protected\n\t */\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n\n  /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n\n    if (items.length < 2) {\n      // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n\n  /**\n    * Generates all timestamps defined in the data.\n    * Important: this method can return ticks outside the min and max range, it's the\n    * responsibility of the calling code to clamp values if needed.\n    * @protected\n    */\n  _generate() {\n    const min = this.min;\n    const max = this.max;\n    let timestamps = super.getDataTimestamps();\n    if (!timestamps.includes(min) || !timestamps.length) {\n      timestamps.splice(0, 0, min);\n    }\n    if (!timestamps.includes(max) || timestamps.length === 1) {\n      timestamps.push(max);\n    }\n    return timestamps.sort((a, b) => a - b);\n  }\n\n  /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      // If combining labels and data (data might not contain all labels),\n      // we need to recheck uniqueness and sort\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n\n    return timestamps;\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\n\nexport default TimeSeriesScale;\n","export * from './controllers/index.js';\nexport * from './core/index.js';\nexport * from './elements/index.js';\nexport * from './platform/index.js';\nexport * from './plugins/index.js';\nexport * from './scales/index.js';\n\nimport * as controllers from './controllers/index.js';\nimport * as elements from './elements/index.js';\nimport * as plugins from './plugins/index.js';\nimport * as scales from './scales/index.js';\n\nexport {\n  controllers,\n  elements,\n  plugins,\n  scales,\n};\n\nexport const registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n"],"names":["Animator","constructor","_request","_charts","Map","_running","_lastDate","undefined","_notify","chart","anims","date","type","callbacks","listeners","numSteps","duration","forEach","fn","initial","currentStep","Math","min","start","_refresh","requestAnimFrame","call","window","_update","Date","now","remaining","running","items","length","i","draw","item","_active","_total","tick","pop","_getAnims","charts","get","complete","progress","set","listen","event","cb","push","add","has","reduce","acc","cur","max","_duration","stop","cancel","remove","delete","transparent","interpolators","boolean","from","to","factor","color","c0","helpersColor","c1","valid","mix","hexString","number","Animation","cfg","target","prop","currentValue","resolve","_fn","_easing","effects","easing","linear","_start","floor","delay","_loop","loop","_target","_prop","_from","_to","_promises","active","update","elapsed","remain","wait","promises","Promise","res","rej","resolved","method","Animations","config","_chart","_properties","configure","isObject","animationOptions","Object","keys","defaults","animation","animatedProps","getOwnPropertyNames","key","option","isArray","properties","_animateOptions","values","newOptions","options","resolveTargetOptions","animations","_createAnimations","$shared","awaitAll","$animations","then","props","charAt","value","size","assign","animator","anim","all","scaleClip","scale","allowedOverflow","opts","reverse","end","defaultClip","xScale","yScale","x","y","top","right","bottom","left","toClip","t","r","b","l","disabled","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","ilen","index","applyStack","stack","dsIndex","singleMode","mode","datasetIndex","otherValue","found","isFinite","sign","convertObjectDataToArray","data","meta","iScale","vScale","iAxisKey","axis","vAxisKey","adata","Array","isStacked","stacked","getStackKey","indexScale","valueScale","id","getUserBounds","minDefined","maxDefined","Number","NEGATIVE_INFINITY","POSITIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iAxis","vAxis","itemStacks","_top","_bottom","visualValues","_visualValues","getFirstScaleId","scales","filter","shift","createDatasetContext","parent","createContext","dataset","createDataContext","element","dataIndex","raw","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","hidden","_stacked","DatasetController","datasetElementType","dataElementType","_ctx","ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","initialize","linkScales","addElements","fill","isPluginEnabled","console","warn","updateIndex","getDataset","chooseId","xid","xAxisID","valueOrDefault","yid","yAxisID","rid","rAxisID","indexAxis","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","datasets","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","unlistenArrayEvents","_dataCheck","isExtensible","listenArrayEvents","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","scopes","getOptionScopes","createResolver","getContext","parsing","parse","count","sorted","_sorted","prev","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","resolveObjectKey","getParsed","getDataElement","updateRangeFromParsed","range","parsedValue","NaN","getMinMax","otherScale","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","clip","elements","area","chartArea","drawActiveElementsOnTop","getStyle","resolveDatasetElementOptions","resolveDataElementOptions","context","_resolveElementOptions","elementType","cache","cacheKey","sharing","defined","datasetElementScopeKeys","prefixes","names","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","_cacheable","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","arr","updateElements","removed","splice","_sync","args","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","getAllScaleValues","_cache","$bar","visibleMetas","concat","_arrayUnique","sort","a","computeMinSampleSize","_length","curr","updateMinAndPrev","abs","getPixelForValue","ticks","getPixelForTick","computeFitCategoryTraits","ruler","stackCount","thickness","barThickness","ratio","isNullOrUndef","categoryPercentage","barPercentage","chunk","pixels","computeFlexCategoryTraits","next","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","_custom","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","isHorizontal","borderProps","horizontal","base","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","swap","startEnd","orig","v1","v2","v","setInflateAmount","inflateAmount","BarController","grouped","numbers","overrides","_index_","offset","grid","_value_","beginAtZero","obj","bars","getBasePixel","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","height","width","_getStacks","last","currentParsed","iScaleValue","skipNull","find","val","isNaN","indexOf","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","name","_startPixel","_endPixel","baseValue","minBarLength","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","axisCount","axisID","axisNumber","stackIndex","rects","BubbleController","radius","points","point","iPixel","vPixel","skip","getRatioAndOffset","rotation","circumference","cutout","ratioX","ratioY","offsetX","offsetY","TAU","startAngle","endAngle","startX","cos","startY","sin","endX","endY","calcMax","angle","_angleBetween","calcMin","maxX","maxY","HALF_PI","minX","PI","minY","DoughnutController","animateRotate","animateScale","spacing","descriptors","_scriptable","_indexable","startsWith","aspectRatio","plugins","legend","generateLabels","pointStyle","map","style","text","fillStyle","backgroundColor","strokeStyle","borderColor","fontColor","lineWidth","borderWidth","onClick","e","legendItem","toggleDataVisibility","innerRadius","outerRadius","getter","_getRotation","toRadians","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","maxSize","toPercentage","chartWeight","_getRingWeight","maxWidth","maxHeight","maxRadius","toDimension","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerX","centerY","arc","metaData","formatNumber","locale","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","weight","LineController","showLine","spanGaps","line","_dataset","animationsDisabled","_getStartAndCountOfVisiblePoints","_scaleRangesChanged","_datasetIndex","_decimated","segment","animated","maxGapLength","isNumber","directUpdate","pointsCount","prevParsed","nullData","border","firstPoint","lastPoint","updateControlPoints","PolarAreaController","angleLines","display","circular","pointLabels","_parseObjectDataRadialScale","bind","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","interaction","registry","getElement","abstract","Error","DateAdapterBase","override","members","prototype","init","formats","format","diff","startOf","endOf","_date","binarySearch","metaset","intersect","lookupMethod","_reversePixels","_rlookupByKey","_lookupByKey","result","distanceToDefinedLo","slice","lo","findIndex","distanceToDefinedHi","hi","el","getRange","evaluateInteractionItems","position","handler","getSortedVisibleDatasetMetas","j","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","sqrt","pow","getIntersectItems","useFinalPosition","includeInvisible","isPointInArea","evaluationFunc","_isPointInArea","inRange","getNearestRadialItems","getProps","getAngleFromPoint","getNearestCartesianItems","distanceMetric","minDistance","getCenterPoint","pointInArea","distance","getNearestItems","getAxisItems","rangeMethod","intersectsItem","modes","getRelativePosition","nearest","STATIC_POSITIONS","filterByPosition","array","pos","filterDynamicPositionByAxis","box","sortByWeight","v0","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","includes","_stack","placed","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","buildLayoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","w","heightChanged","h","same","other","handleMaxPadding","updatePos","change","getMargins","marginForPositions","positions","margin","fitBoxes","refitBoxes","refit","changed","setBoxDims","placeBoxes","userPadding","padding","addBox","_layers","z","removeBox","layoutItem","minPadding","toPadding","verticalBoxes","horizontalBoxes","each","beforeLayout","visibleVerticalBoxCount","BasePlatform","acquireContext","canvas","releaseContext","addEventListener","listener","removeEventListener","getDevicePixelRatio","getMaximumSize","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","initCanvas","renderHeight","getAttribute","renderWidth","boxSizing","displayWidth","readUsedSize","displayHeight","eventListenerOptions","supportsEventListenerOptions","passive","addListener","node","removeListener","fromNativeEvent","native","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","document","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","devicePixelRatio","resize","currentDevicePixelRatio","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","container","_getParentNode","throttled","clientWidth","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","proxy","DomPlatform","removeAttribute","setAttribute","proxies","$proxies","handlers","attach","detach","isConnected","_detectPlatform","_isDomSupported","OffscreenCanvas","Element","defaultRoutes","tooltipPosition","hasValue","final","ret","autoSkip","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","major","enabled","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","round","tickLength","_tickSize","maxScale","maxChart","_maxLength","evenMajorSpacing","getEvenSpacing","factors","_factorize","ceil","majorStart","majorEnd","len","reverseAlign","align","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","epsilon","lineValue","garbageCollect","caches","gc","gcLen","getTickMarkLength","drawTicks","getTitleHeight","fallback","font","toFont","lines","lineHeight","createScaleContext","createTickContext","titleAlign","_toLeftRightCenter","titleArgs","titleX","titleY","_alignStartEnd","positionAxisID","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","setContext","suggestedMin","suggestedMax","finiteOrDefault","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","margins","grace","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","source","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","callback","afterTickToLabelConversion","numTicks","minRotation","maxRotation","tickWidth","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","_limitValue","title","toDegrees","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","mirror","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","widths","heights","widestLabelSize","highestLabelSize","jlen","tickFont","fontString","nestedLabel","_resolveTickFontOptions","string","_measureText","valueAt","idx","pixel","decimal","_int16Range","_alignPixel","getDecimalForPixel","getBaseValue","optionTicks","rot","autoSkipPadding","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","borderDash","dash","borderDashOffset","dashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","_getXAxisLabelAlignment","_getYAxisLabelAlignment","labelOffset","halfCount","strokeColor","textStrokeColor","strokeWidth","textStrokeWidth","tickTextAlign","showLabelBackdrop","backdrop","labelPadding","backdropPadding","backdropColor","translation","_computeLabelArea","drawBackground","save","fillRect","restore","drawGrid","drawLine","p1","p2","setLineDash","lineDashOffset","beginPath","moveTo","lineTo","stroke","drawOnChartArea","drawBorder","lastLineWidth","drawLabels","clipArea","renderTextOptions","renderText","unclipArea","drawTitle","tz","gz","bz","_maxDigits","fontSize","TypedRegistry","scope","create","isForType","isPrototypeOf","register","proto","getPrototypeOf","parentScope","isIChartComponent","registerDefaults","unregister","itemDefaults","merge","routeDefaults","describe","routes","property","propertyParts","split","sourceName","sourceScope","join","parts","targetName","targetScope","route","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","_capitalize","PluginService","_init","notify","hook","_createDescriptors","_descriptors","descriptor","plugin","callCallback","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","createDescriptors","previousDescriptors","some","localIds","local","getOpts","pluginOpts","pluginScopeKeys","scriptable","indexable","allKeys","getIndexAxis","datasetDefaults","datasetOptions","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","toLowerCase","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","d","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","error","_proxy","defaultId","defaultScaleOptions","mergeIf","defaultID","initOptions","initData","initConfig","keyCache","keysCached","Set","cachedKeys","generate","addIfFound","Config","_config","_scopeCache","_resolverCache","platform","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","resolver","subPrefixes","getResolver","needContext","isFunction","subResolver","_attachContext","descriptorDefaults","resolverCache","_createResolver","p","hasFunction","isScriptable","isIndexable","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","c","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","version","invalidatePlugins","userConfig","initialCanvas","existingChart","uid","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","debounce","resizeDelay","_initialize","maintainAspectRatio","responsive","retinaScale","bindEvents","clearCanvas","_resize","_resizeBeforeDraw","newSize","newRatio","onResize","render","ensureScalesHaveIDs","scalesOptions","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","scaleClass","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","visible","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","autoPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","events","setsEqual","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getDatasetClipArea","getElementsAtEventForMode","Interaction","setDatasetVisibility","_updateVisibility","hide","show","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","prefix","getActiveElements","setActiveElements","activeElements","lastActive","_elementsEqual","pluginId","replay","hoverOptions","hover","deactivated","activated","eventFilter","_handleEvent","_getActiveElements","_isClickEvent","onHover","clipSelf","borderJoinStyle","outerAngleClip","_normalizeAngle","innerAngleClip","clipWidth","closePath","rect","clipArc","pixelMargin","angleMargin","toRadiusCorners","_readValueToProps","parseBorderRadius","angleDelta","o","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","inner","lineJoin","selfJoin","ArcElement","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","_isBetween","halfAngle","halfRadius","translate","fix","radiusOffset","setStyle","lineCap","borderCapStyle","previous","getLineMethod","stepped","_steppedLineTo","tension","cubicInterpolationMode","_bezierCurveTo","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","useFastPath","_getInterpolationMethod","_steppedInterpolation","_bezierInterpolation","_pointInLine","strokePathWithCache","path","_path","Path2D","strokePathDirect","segments","segmentMethod","usePath2D","LineElement","capBezierPoints","_points","_segments","_pointsUpdated","_updateBezierControlPoints","_computeSegments","interpolate","_boundSegments","_interpolate","interpolated","hitRadius","PointElement","hoverRadius","mouseX","mouseY","inXRange","inYRange","drawPoint","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","toTRBL","toTRBLCorners","maxR","enableBorder","topLeft","topRight","bottomLeft","bottomRight","boundingRects","bounds","outer","skipX","skipY","skipBoth","hasRadius","addNormalRectPath","inflateRect","amount","refRect","BarElement","addRectPath","addRoundedRectPath","BORDER_COLORS","BACKGROUND_COLORS","replace","getBorderColor","getBackgroundColor","colorizeDefaultDataset","colorizeDoughnutDataset","colorizePolarAreaDataset","getColorizer","containsColorsDefinitions","k","containsColorsDefinition","containsDefaultColorsDefenitions","forceOverride","_args","chartOptions","containsColorDefenition","colorizer","lttbDecimation","samples","decimated","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minMaxDecimation","minIndex","maxIndex","startIndex","xMin","xMax","dx","lastIndex","intermediateIndex1","intermediateIndex2","cleanDecimatedDataset","defineProperty","configurable","enumerable","writable","cleanDecimatedData","getStartAndCountOfVisiblePointsSimplified","pointCount","algorithm","beforeElementsUpdate","xAxis","threshold","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","_boundSegment","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_shouldApplyFill","_resolveTarget","sources","propagate","visited","_decodeFill","parseFillOption","parseFloat","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","unshift","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","fillColor","clipVertical","clipHorizontal","clipY","lineLoop","clipX","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","itemsEqual","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","itemWidth","measureText","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","adjustHitBoxes","rtl","rtlHelper","getRtlAdapter","hitbox","leftForLtr","_draw","defaultColor","halfFontSize","cursor","drawLegendBox","lineDash","drawOptions","SQRT2","xPlus","drawPointLegend","yBoxTop","xBoxLeft","fillText","strikethrough","overrideTextDirection","textDirection","textWidth","setWidth","realX","_textX","fontLineHeight","calculateLegendItemHeight","restoreTextDirection","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","isListened","hoveredItem","sameItem","onLeave","calculateItemWidth","calculateItemHeight","legendItemText","_element","afterEvent","ci","useBorderRadius","Title","_padding","textSize","_drawArgs","fontOpts","createTitle","titleBlock","WeakMap","positioners","average","xSet","xAverage","eventPosition","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","apply","splitNewlines","str","String","createTooltipItem","formattedValue","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodyLineHeight","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","caretSize","caretPadding","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","cornerRadius","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","beforeTitle","noop","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","pt","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","afterInit","afterDraw","_fallback","addIfString","addedLabels","findOrAddLabel","lastIndexOf","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks","generationOptions","dataRange","MIN_SPACING","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceNum","niceMin","niceMax","numSpaces","almostWhole","almostEquals","decimalPlaces","_decimalPlaces","relativeLabelSize","tickValue","rad","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","numericGeneratorOptions","_setMinAndMaxByKey","LinearScale","Ticks","formatters","numeric","log10Floor","log10","changeExponent","m","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","minExp","exp","significand","lastTick","LogarithmicScale","logarithmic","_zero","getTickBackdropHeight","measureLabelSize","_longestText","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","hLimits","vLimits","updateLimits","setCenterPoint","_pointLabelItems","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","apexesInArea","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","animate","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","distanceFromCenter","getBasePosition","getPointLabelPosition","rotate","INTERVALS","millisecond","common","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","input","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","_lookup","timestamp","setMajorTicks","majorUnit","ticksFromTimestamps","TimeScale","adapters","displayFormats","_unit","_majorUnit","_offsets","_normalized","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","minor","weekday","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","formatter","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","normalize","table","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables"],"mappings":"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"}
Index: node_modules/chart.js/dist/chart.js
===================================================================
--- node_modules/chart.js/dist/chart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11590 @@
+/*!
+ * Chart.js v4.5.0
+ * https://www.chartjs.org
+ * (c) 2025 Chart.js Contributors
+ * Released under the MIT License
+ */
+import { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as getDatasetClipArea, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _normalizeAngle, am as _readValueToProps, an as _updateBezierControlPoints, ao as _computeSegments, ap as _boundSegments, aq as _steppedInterpolation, ar as _bezierInterpolation, as as _pointInLine, at as _steppedLineTo, au as _bezierCurveTo, av as drawPoint, aw as addRoundedRectPath, ax as toTRBL, ay as toTRBLCorners, az as _boundSegment, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as distanceBetweenPoints, aG as noop, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as Ticks, aN as log10, aO as _longestText, aP as _filterBetween, aQ as _lookup } from './chunks/helpers.dataset.js';
+import '@kurkle/color';
+
+class Animator {
+    constructor(){
+        this._request = null;
+        this._charts = new Map();
+        this._running = false;
+        this._lastDate = undefined;
+    }
+ _notify(chart, anims, date, type) {
+        const callbacks = anims.listeners[type];
+        const numSteps = anims.duration;
+        callbacks.forEach((fn)=>fn({
+                chart,
+                initial: anims.initial,
+                numSteps,
+                currentStep: Math.min(date - anims.start, numSteps)
+            }));
+    }
+ _refresh() {
+        if (this._request) {
+            return;
+        }
+        this._running = true;
+        this._request = requestAnimFrame.call(window, ()=>{
+            this._update();
+            this._request = null;
+            if (this._running) {
+                this._refresh();
+            }
+        });
+    }
+ _update(date = Date.now()) {
+        let remaining = 0;
+        this._charts.forEach((anims, chart)=>{
+            if (!anims.running || !anims.items.length) {
+                return;
+            }
+            const items = anims.items;
+            let i = items.length - 1;
+            let draw = false;
+            let item;
+            for(; i >= 0; --i){
+                item = items[i];
+                if (item._active) {
+                    if (item._total > anims.duration) {
+                        anims.duration = item._total;
+                    }
+                    item.tick(date);
+                    draw = true;
+                } else {
+                    items[i] = items[items.length - 1];
+                    items.pop();
+                }
+            }
+            if (draw) {
+                chart.draw();
+                this._notify(chart, anims, date, 'progress');
+            }
+            if (!items.length) {
+                anims.running = false;
+                this._notify(chart, anims, date, 'complete');
+                anims.initial = false;
+            }
+            remaining += items.length;
+        });
+        this._lastDate = date;
+        if (remaining === 0) {
+            this._running = false;
+        }
+    }
+ _getAnims(chart) {
+        const charts = this._charts;
+        let anims = charts.get(chart);
+        if (!anims) {
+            anims = {
+                running: false,
+                initial: true,
+                items: [],
+                listeners: {
+                    complete: [],
+                    progress: []
+                }
+            };
+            charts.set(chart, anims);
+        }
+        return anims;
+    }
+ listen(chart, event, cb) {
+        this._getAnims(chart).listeners[event].push(cb);
+    }
+ add(chart, items) {
+        if (!items || !items.length) {
+            return;
+        }
+        this._getAnims(chart).items.push(...items);
+    }
+ has(chart) {
+        return this._getAnims(chart).items.length > 0;
+    }
+ start(chart) {
+        const anims = this._charts.get(chart);
+        if (!anims) {
+            return;
+        }
+        anims.running = true;
+        anims.start = Date.now();
+        anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);
+        this._refresh();
+    }
+    running(chart) {
+        if (!this._running) {
+            return false;
+        }
+        const anims = this._charts.get(chart);
+        if (!anims || !anims.running || !anims.items.length) {
+            return false;
+        }
+        return true;
+    }
+ stop(chart) {
+        const anims = this._charts.get(chart);
+        if (!anims || !anims.items.length) {
+            return;
+        }
+        const items = anims.items;
+        let i = items.length - 1;
+        for(; i >= 0; --i){
+            items[i].cancel();
+        }
+        anims.items = [];
+        this._notify(chart, anims, Date.now(), 'complete');
+    }
+ remove(chart) {
+        return this._charts.delete(chart);
+    }
+}
+var animator = /* #__PURE__ */ new Animator();
+
+const transparent = 'transparent';
+const interpolators = {
+    boolean (from, to, factor) {
+        return factor > 0.5 ? to : from;
+    },
+ color (from, to, factor) {
+        const c0 = color(from || transparent);
+        const c1 = c0.valid && color(to || transparent);
+        return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;
+    },
+    number (from, to, factor) {
+        return from + (to - from) * factor;
+    }
+};
+class Animation {
+    constructor(cfg, target, prop, to){
+        const currentValue = target[prop];
+        to = resolve([
+            cfg.to,
+            to,
+            currentValue,
+            cfg.from
+        ]);
+        const from = resolve([
+            cfg.from,
+            currentValue,
+            to
+        ]);
+        this._active = true;
+        this._fn = cfg.fn || interpolators[cfg.type || typeof from];
+        this._easing = effects[cfg.easing] || effects.linear;
+        this._start = Math.floor(Date.now() + (cfg.delay || 0));
+        this._duration = this._total = Math.floor(cfg.duration);
+        this._loop = !!cfg.loop;
+        this._target = target;
+        this._prop = prop;
+        this._from = from;
+        this._to = to;
+        this._promises = undefined;
+    }
+    active() {
+        return this._active;
+    }
+    update(cfg, to, date) {
+        if (this._active) {
+            this._notify(false);
+            const currentValue = this._target[this._prop];
+            const elapsed = date - this._start;
+            const remain = this._duration - elapsed;
+            this._start = date;
+            this._duration = Math.floor(Math.max(remain, cfg.duration));
+            this._total += elapsed;
+            this._loop = !!cfg.loop;
+            this._to = resolve([
+                cfg.to,
+                to,
+                currentValue,
+                cfg.from
+            ]);
+            this._from = resolve([
+                cfg.from,
+                currentValue,
+                to
+            ]);
+        }
+    }
+    cancel() {
+        if (this._active) {
+            this.tick(Date.now());
+            this._active = false;
+            this._notify(false);
+        }
+    }
+    tick(date) {
+        const elapsed = date - this._start;
+        const duration = this._duration;
+        const prop = this._prop;
+        const from = this._from;
+        const loop = this._loop;
+        const to = this._to;
+        let factor;
+        this._active = from !== to && (loop || elapsed < duration);
+        if (!this._active) {
+            this._target[prop] = to;
+            this._notify(true);
+            return;
+        }
+        if (elapsed < 0) {
+            this._target[prop] = from;
+            return;
+        }
+        factor = elapsed / duration % 2;
+        factor = loop && factor > 1 ? 2 - factor : factor;
+        factor = this._easing(Math.min(1, Math.max(0, factor)));
+        this._target[prop] = this._fn(from, to, factor);
+    }
+    wait() {
+        const promises = this._promises || (this._promises = []);
+        return new Promise((res, rej)=>{
+            promises.push({
+                res,
+                rej
+            });
+        });
+    }
+    _notify(resolved) {
+        const method = resolved ? 'res' : 'rej';
+        const promises = this._promises || [];
+        for(let i = 0; i < promises.length; i++){
+            promises[i][method]();
+        }
+    }
+}
+
+class Animations {
+    constructor(chart, config){
+        this._chart = chart;
+        this._properties = new Map();
+        this.configure(config);
+    }
+    configure(config) {
+        if (!isObject(config)) {
+            return;
+        }
+        const animationOptions = Object.keys(defaults.animation);
+        const animatedProps = this._properties;
+        Object.getOwnPropertyNames(config).forEach((key)=>{
+            const cfg = config[key];
+            if (!isObject(cfg)) {
+                return;
+            }
+            const resolved = {};
+            for (const option of animationOptions){
+                resolved[option] = cfg[option];
+            }
+            (isArray(cfg.properties) && cfg.properties || [
+                key
+            ]).forEach((prop)=>{
+                if (prop === key || !animatedProps.has(prop)) {
+                    animatedProps.set(prop, resolved);
+                }
+            });
+        });
+    }
+ _animateOptions(target, values) {
+        const newOptions = values.options;
+        const options = resolveTargetOptions(target, newOptions);
+        if (!options) {
+            return [];
+        }
+        const animations = this._createAnimations(options, newOptions);
+        if (newOptions.$shared) {
+            awaitAll(target.options.$animations, newOptions).then(()=>{
+                target.options = newOptions;
+            }, ()=>{
+            });
+        }
+        return animations;
+    }
+ _createAnimations(target, values) {
+        const animatedProps = this._properties;
+        const animations = [];
+        const running = target.$animations || (target.$animations = {});
+        const props = Object.keys(values);
+        const date = Date.now();
+        let i;
+        for(i = props.length - 1; i >= 0; --i){
+            const prop = props[i];
+            if (prop.charAt(0) === '$') {
+                continue;
+            }
+            if (prop === 'options') {
+                animations.push(...this._animateOptions(target, values));
+                continue;
+            }
+            const value = values[prop];
+            let animation = running[prop];
+            const cfg = animatedProps.get(prop);
+            if (animation) {
+                if (cfg && animation.active()) {
+                    animation.update(cfg, value, date);
+                    continue;
+                } else {
+                    animation.cancel();
+                }
+            }
+            if (!cfg || !cfg.duration) {
+                target[prop] = value;
+                continue;
+            }
+            running[prop] = animation = new Animation(cfg, target, prop, value);
+            animations.push(animation);
+        }
+        return animations;
+    }
+ update(target, values) {
+        if (this._properties.size === 0) {
+            Object.assign(target, values);
+            return;
+        }
+        const animations = this._createAnimations(target, values);
+        if (animations.length) {
+            animator.add(this._chart, animations);
+            return true;
+        }
+    }
+}
+function awaitAll(animations, properties) {
+    const running = [];
+    const keys = Object.keys(properties);
+    for(let i = 0; i < keys.length; i++){
+        const anim = animations[keys[i]];
+        if (anim && anim.active()) {
+            running.push(anim.wait());
+        }
+    }
+    return Promise.all(running);
+}
+function resolveTargetOptions(target, newOptions) {
+    if (!newOptions) {
+        return;
+    }
+    let options = target.options;
+    if (!options) {
+        target.options = newOptions;
+        return;
+    }
+    if (options.$shared) {
+        target.options = options = Object.assign({}, options, {
+            $shared: false,
+            $animations: {}
+        });
+    }
+    return options;
+}
+
+function scaleClip(scale, allowedOverflow) {
+    const opts = scale && scale.options || {};
+    const reverse = opts.reverse;
+    const min = opts.min === undefined ? allowedOverflow : 0;
+    const max = opts.max === undefined ? allowedOverflow : 0;
+    return {
+        start: reverse ? max : min,
+        end: reverse ? min : max
+    };
+}
+function defaultClip(xScale, yScale, allowedOverflow) {
+    if (allowedOverflow === false) {
+        return false;
+    }
+    const x = scaleClip(xScale, allowedOverflow);
+    const y = scaleClip(yScale, allowedOverflow);
+    return {
+        top: y.end,
+        right: x.end,
+        bottom: y.start,
+        left: x.start
+    };
+}
+function toClip(value) {
+    let t, r, b, l;
+    if (isObject(value)) {
+        t = value.top;
+        r = value.right;
+        b = value.bottom;
+        l = value.left;
+    } else {
+        t = r = b = l = value;
+    }
+    return {
+        top: t,
+        right: r,
+        bottom: b,
+        left: l,
+        disabled: value === false
+    };
+}
+function getSortedDatasetIndices(chart, filterVisible) {
+    const keys = [];
+    const metasets = chart._getSortedDatasetMetas(filterVisible);
+    let i, ilen;
+    for(i = 0, ilen = metasets.length; i < ilen; ++i){
+        keys.push(metasets[i].index);
+    }
+    return keys;
+}
+function applyStack(stack, value, dsIndex, options = {}) {
+    const keys = stack.keys;
+    const singleMode = options.mode === 'single';
+    let i, ilen, datasetIndex, otherValue;
+    if (value === null) {
+        return;
+    }
+    let found = false;
+    for(i = 0, ilen = keys.length; i < ilen; ++i){
+        datasetIndex = +keys[i];
+        if (datasetIndex === dsIndex) {
+            found = true;
+            if (options.all) {
+                continue;
+            }
+            break;
+        }
+        otherValue = stack.values[datasetIndex];
+        if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {
+            value += otherValue;
+        }
+    }
+    if (!found && !options.all) {
+        return 0;
+    }
+    return value;
+}
+function convertObjectDataToArray(data, meta) {
+    const { iScale , vScale  } = meta;
+    const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';
+    const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';
+    const keys = Object.keys(data);
+    const adata = new Array(keys.length);
+    let i, ilen, key;
+    for(i = 0, ilen = keys.length; i < ilen; ++i){
+        key = keys[i];
+        adata[i] = {
+            [iAxisKey]: key,
+            [vAxisKey]: data[key]
+        };
+    }
+    return adata;
+}
+function isStacked(scale, meta) {
+    const stacked = scale && scale.options.stacked;
+    return stacked || stacked === undefined && meta.stack !== undefined;
+}
+function getStackKey(indexScale, valueScale, meta) {
+    return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;
+}
+function getUserBounds(scale) {
+    const { min , max , minDefined , maxDefined  } = scale.getUserBounds();
+    return {
+        min: minDefined ? min : Number.NEGATIVE_INFINITY,
+        max: maxDefined ? max : Number.POSITIVE_INFINITY
+    };
+}
+function getOrCreateStack(stacks, stackKey, indexValue) {
+    const subStack = stacks[stackKey] || (stacks[stackKey] = {});
+    return subStack[indexValue] || (subStack[indexValue] = {});
+}
+function getLastIndexInStack(stack, vScale, positive, type) {
+    for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){
+        const value = stack[meta.index];
+        if (positive && value > 0 || !positive && value < 0) {
+            return meta.index;
+        }
+    }
+    return null;
+}
+function updateStacks(controller, parsed) {
+    const { chart , _cachedMeta: meta  } = controller;
+    const stacks = chart._stacks || (chart._stacks = {});
+    const { iScale , vScale , index: datasetIndex  } = meta;
+    const iAxis = iScale.axis;
+    const vAxis = vScale.axis;
+    const key = getStackKey(iScale, vScale, meta);
+    const ilen = parsed.length;
+    let stack;
+    for(let i = 0; i < ilen; ++i){
+        const item = parsed[i];
+        const { [iAxis]: index , [vAxis]: value  } = item;
+        const itemStacks = item._stacks || (item._stacks = {});
+        stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
+        stack[datasetIndex] = value;
+        stack._top = getLastIndexInStack(stack, vScale, true, meta.type);
+        stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);
+        const visualValues = stack._visualValues || (stack._visualValues = {});
+        visualValues[datasetIndex] = value;
+    }
+}
+function getFirstScaleId(chart, axis) {
+    const scales = chart.scales;
+    return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();
+}
+function createDatasetContext(parent, index) {
+    return createContext(parent, {
+        active: false,
+        dataset: undefined,
+        datasetIndex: index,
+        index,
+        mode: 'default',
+        type: 'dataset'
+    });
+}
+function createDataContext(parent, index, element) {
+    return createContext(parent, {
+        active: false,
+        dataIndex: index,
+        parsed: undefined,
+        raw: undefined,
+        element,
+        index,
+        mode: 'default',
+        type: 'data'
+    });
+}
+function clearStacks(meta, items) {
+    const datasetIndex = meta.controller.index;
+    const axis = meta.vScale && meta.vScale.axis;
+    if (!axis) {
+        return;
+    }
+    items = items || meta._parsed;
+    for (const parsed of items){
+        const stacks = parsed._stacks;
+        if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {
+            return;
+        }
+        delete stacks[axis][datasetIndex];
+        if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {
+            delete stacks[axis]._visualValues[datasetIndex];
+        }
+    }
+}
+const isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';
+const cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);
+const createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {
+        keys: getSortedDatasetIndices(chart, true),
+        values: null
+    };
+class DatasetController {
+ static defaults = {};
+ static datasetElementType = null;
+ static dataElementType = null;
+ constructor(chart, datasetIndex){
+        this.chart = chart;
+        this._ctx = chart.ctx;
+        this.index = datasetIndex;
+        this._cachedDataOpts = {};
+        this._cachedMeta = this.getMeta();
+        this._type = this._cachedMeta.type;
+        this.options = undefined;
+         this._parsing = false;
+        this._data = undefined;
+        this._objectData = undefined;
+        this._sharedOptions = undefined;
+        this._drawStart = undefined;
+        this._drawCount = undefined;
+        this.enableOptionSharing = false;
+        this.supportsDecimation = false;
+        this.$context = undefined;
+        this._syncList = [];
+        this.datasetElementType = new.target.datasetElementType;
+        this.dataElementType = new.target.dataElementType;
+        this.initialize();
+    }
+    initialize() {
+        const meta = this._cachedMeta;
+        this.configure();
+        this.linkScales();
+        meta._stacked = isStacked(meta.vScale, meta);
+        this.addElements();
+        if (this.options.fill && !this.chart.isPluginEnabled('filler')) {
+            console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options");
+        }
+    }
+    updateIndex(datasetIndex) {
+        if (this.index !== datasetIndex) {
+            clearStacks(this._cachedMeta);
+        }
+        this.index = datasetIndex;
+    }
+    linkScales() {
+        const chart = this.chart;
+        const meta = this._cachedMeta;
+        const dataset = this.getDataset();
+        const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;
+        const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));
+        const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));
+        const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));
+        const indexAxis = meta.indexAxis;
+        const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);
+        const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);
+        meta.xScale = this.getScaleForId(xid);
+        meta.yScale = this.getScaleForId(yid);
+        meta.rScale = this.getScaleForId(rid);
+        meta.iScale = this.getScaleForId(iid);
+        meta.vScale = this.getScaleForId(vid);
+    }
+    getDataset() {
+        return this.chart.data.datasets[this.index];
+    }
+    getMeta() {
+        return this.chart.getDatasetMeta(this.index);
+    }
+ getScaleForId(scaleID) {
+        return this.chart.scales[scaleID];
+    }
+ _getOtherScale(scale) {
+        const meta = this._cachedMeta;
+        return scale === meta.iScale ? meta.vScale : meta.iScale;
+    }
+    reset() {
+        this._update('reset');
+    }
+ _destroy() {
+        const meta = this._cachedMeta;
+        if (this._data) {
+            unlistenArrayEvents(this._data, this);
+        }
+        if (meta._stacked) {
+            clearStacks(meta);
+        }
+    }
+ _dataCheck() {
+        const dataset = this.getDataset();
+        const data = dataset.data || (dataset.data = []);
+        const _data = this._data;
+        if (isObject(data)) {
+            const meta = this._cachedMeta;
+            this._data = convertObjectDataToArray(data, meta);
+        } else if (_data !== data) {
+            if (_data) {
+                unlistenArrayEvents(_data, this);
+                const meta = this._cachedMeta;
+                clearStacks(meta);
+                meta._parsed = [];
+            }
+            if (data && Object.isExtensible(data)) {
+                listenArrayEvents(data, this);
+            }
+            this._syncList = [];
+            this._data = data;
+        }
+    }
+    addElements() {
+        const meta = this._cachedMeta;
+        this._dataCheck();
+        if (this.datasetElementType) {
+            meta.dataset = new this.datasetElementType();
+        }
+    }
+    buildOrUpdateElements(resetNewElements) {
+        const meta = this._cachedMeta;
+        const dataset = this.getDataset();
+        let stackChanged = false;
+        this._dataCheck();
+        const oldStacked = meta._stacked;
+        meta._stacked = isStacked(meta.vScale, meta);
+        if (meta.stack !== dataset.stack) {
+            stackChanged = true;
+            clearStacks(meta);
+            meta.stack = dataset.stack;
+        }
+        this._resyncElements(resetNewElements);
+        if (stackChanged || oldStacked !== meta._stacked) {
+            updateStacks(this, meta._parsed);
+            meta._stacked = isStacked(meta.vScale, meta);
+        }
+    }
+ configure() {
+        const config = this.chart.config;
+        const scopeKeys = config.datasetScopeKeys(this._type);
+        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);
+        this.options = config.createResolver(scopes, this.getContext());
+        this._parsing = this.options.parsing;
+        this._cachedDataOpts = {};
+    }
+ parse(start, count) {
+        const { _cachedMeta: meta , _data: data  } = this;
+        const { iScale , _stacked  } = meta;
+        const iAxis = iScale.axis;
+        let sorted = start === 0 && count === data.length ? true : meta._sorted;
+        let prev = start > 0 && meta._parsed[start - 1];
+        let i, cur, parsed;
+        if (this._parsing === false) {
+            meta._parsed = data;
+            meta._sorted = true;
+            parsed = data;
+        } else {
+            if (isArray(data[start])) {
+                parsed = this.parseArrayData(meta, data, start, count);
+            } else if (isObject(data[start])) {
+                parsed = this.parseObjectData(meta, data, start, count);
+            } else {
+                parsed = this.parsePrimitiveData(meta, data, start, count);
+            }
+            const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];
+            for(i = 0; i < count; ++i){
+                meta._parsed[i + start] = cur = parsed[i];
+                if (sorted) {
+                    if (isNotInOrderComparedToPrev()) {
+                        sorted = false;
+                    }
+                    prev = cur;
+                }
+            }
+            meta._sorted = sorted;
+        }
+        if (_stacked) {
+            updateStacks(this, parsed);
+        }
+    }
+ parsePrimitiveData(meta, data, start, count) {
+        const { iScale , vScale  } = meta;
+        const iAxis = iScale.axis;
+        const vAxis = vScale.axis;
+        const labels = iScale.getLabels();
+        const singleScale = iScale === vScale;
+        const parsed = new Array(count);
+        let i, ilen, index;
+        for(i = 0, ilen = count; i < ilen; ++i){
+            index = i + start;
+            parsed[i] = {
+                [iAxis]: singleScale || iScale.parse(labels[index], index),
+                [vAxis]: vScale.parse(data[index], index)
+            };
+        }
+        return parsed;
+    }
+ parseArrayData(meta, data, start, count) {
+        const { xScale , yScale  } = meta;
+        const parsed = new Array(count);
+        let i, ilen, index, item;
+        for(i = 0, ilen = count; i < ilen; ++i){
+            index = i + start;
+            item = data[index];
+            parsed[i] = {
+                x: xScale.parse(item[0], index),
+                y: yScale.parse(item[1], index)
+            };
+        }
+        return parsed;
+    }
+ parseObjectData(meta, data, start, count) {
+        const { xScale , yScale  } = meta;
+        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;
+        const parsed = new Array(count);
+        let i, ilen, index, item;
+        for(i = 0, ilen = count; i < ilen; ++i){
+            index = i + start;
+            item = data[index];
+            parsed[i] = {
+                x: xScale.parse(resolveObjectKey(item, xAxisKey), index),
+                y: yScale.parse(resolveObjectKey(item, yAxisKey), index)
+            };
+        }
+        return parsed;
+    }
+ getParsed(index) {
+        return this._cachedMeta._parsed[index];
+    }
+ getDataElement(index) {
+        return this._cachedMeta.data[index];
+    }
+ applyStack(scale, parsed, mode) {
+        const chart = this.chart;
+        const meta = this._cachedMeta;
+        const value = parsed[scale.axis];
+        const stack = {
+            keys: getSortedDatasetIndices(chart, true),
+            values: parsed._stacks[scale.axis]._visualValues
+        };
+        return applyStack(stack, value, meta.index, {
+            mode
+        });
+    }
+ updateRangeFromParsed(range, scale, parsed, stack) {
+        const parsedValue = parsed[scale.axis];
+        let value = parsedValue === null ? NaN : parsedValue;
+        const values = stack && parsed._stacks[scale.axis];
+        if (stack && values) {
+            stack.values = values;
+            value = applyStack(stack, parsedValue, this._cachedMeta.index);
+        }
+        range.min = Math.min(range.min, value);
+        range.max = Math.max(range.max, value);
+    }
+ getMinMax(scale, canStack) {
+        const meta = this._cachedMeta;
+        const _parsed = meta._parsed;
+        const sorted = meta._sorted && scale === meta.iScale;
+        const ilen = _parsed.length;
+        const otherScale = this._getOtherScale(scale);
+        const stack = createStack(canStack, meta, this.chart);
+        const range = {
+            min: Number.POSITIVE_INFINITY,
+            max: Number.NEGATIVE_INFINITY
+        };
+        const { min: otherMin , max: otherMax  } = getUserBounds(otherScale);
+        let i, parsed;
+        function _skip() {
+            parsed = _parsed[i];
+            const otherValue = parsed[otherScale.axis];
+            return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;
+        }
+        for(i = 0; i < ilen; ++i){
+            if (_skip()) {
+                continue;
+            }
+            this.updateRangeFromParsed(range, scale, parsed, stack);
+            if (sorted) {
+                break;
+            }
+        }
+        if (sorted) {
+            for(i = ilen - 1; i >= 0; --i){
+                if (_skip()) {
+                    continue;
+                }
+                this.updateRangeFromParsed(range, scale, parsed, stack);
+                break;
+            }
+        }
+        return range;
+    }
+    getAllParsedValues(scale) {
+        const parsed = this._cachedMeta._parsed;
+        const values = [];
+        let i, ilen, value;
+        for(i = 0, ilen = parsed.length; i < ilen; ++i){
+            value = parsed[i][scale.axis];
+            if (isNumberFinite(value)) {
+                values.push(value);
+            }
+        }
+        return values;
+    }
+ getMaxOverflow() {
+        return false;
+    }
+ getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const iScale = meta.iScale;
+        const vScale = meta.vScale;
+        const parsed = this.getParsed(index);
+        return {
+            label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',
+            value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''
+        };
+    }
+ _update(mode) {
+        const meta = this._cachedMeta;
+        this.update(mode || 'default');
+        meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));
+    }
+ update(mode) {}
+    draw() {
+        const ctx = this._ctx;
+        const chart = this.chart;
+        const meta = this._cachedMeta;
+        const elements = meta.data || [];
+        const area = chart.chartArea;
+        const active = [];
+        const start = this._drawStart || 0;
+        const count = this._drawCount || elements.length - start;
+        const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;
+        let i;
+        if (meta.dataset) {
+            meta.dataset.draw(ctx, area, start, count);
+        }
+        for(i = start; i < start + count; ++i){
+            const element = elements[i];
+            if (element.hidden) {
+                continue;
+            }
+            if (element.active && drawActiveElementsOnTop) {
+                active.push(element);
+            } else {
+                element.draw(ctx, area);
+            }
+        }
+        for(i = 0; i < active.length; ++i){
+            active[i].draw(ctx, area);
+        }
+    }
+ getStyle(index, active) {
+        const mode = active ? 'active' : 'default';
+        return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);
+    }
+ getContext(index, active, mode) {
+        const dataset = this.getDataset();
+        let context;
+        if (index >= 0 && index < this._cachedMeta.data.length) {
+            const element = this._cachedMeta.data[index];
+            context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));
+            context.parsed = this.getParsed(index);
+            context.raw = dataset.data[index];
+            context.index = context.dataIndex = index;
+        } else {
+            context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));
+            context.dataset = dataset;
+            context.index = context.datasetIndex = this.index;
+        }
+        context.active = !!active;
+        context.mode = mode;
+        return context;
+    }
+ resolveDatasetElementOptions(mode) {
+        return this._resolveElementOptions(this.datasetElementType.id, mode);
+    }
+ resolveDataElementOptions(index, mode) {
+        return this._resolveElementOptions(this.dataElementType.id, mode, index);
+    }
+ _resolveElementOptions(elementType, mode = 'default', index) {
+        const active = mode === 'active';
+        const cache = this._cachedDataOpts;
+        const cacheKey = elementType + '-' + mode;
+        const cached = cache[cacheKey];
+        const sharing = this.enableOptionSharing && defined(index);
+        if (cached) {
+            return cloneIfNotShared(cached, sharing);
+        }
+        const config = this.chart.config;
+        const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);
+        const prefixes = active ? [
+            `${elementType}Hover`,
+            'hover',
+            elementType,
+            ''
+        ] : [
+            elementType,
+            ''
+        ];
+        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
+        const names = Object.keys(defaults.elements[elementType]);
+        const context = ()=>this.getContext(index, active, mode);
+        const values = config.resolveNamedOptions(scopes, names, context, prefixes);
+        if (values.$shared) {
+            values.$shared = sharing;
+            cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));
+        }
+        return values;
+    }
+ _resolveAnimations(index, transition, active) {
+        const chart = this.chart;
+        const cache = this._cachedDataOpts;
+        const cacheKey = `animation-${transition}`;
+        const cached = cache[cacheKey];
+        if (cached) {
+            return cached;
+        }
+        let options;
+        if (chart.options.animation !== false) {
+            const config = this.chart.config;
+            const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);
+            const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
+            options = config.createResolver(scopes, this.getContext(index, active, transition));
+        }
+        const animations = new Animations(chart, options && options.animations);
+        if (options && options._cacheable) {
+            cache[cacheKey] = Object.freeze(animations);
+        }
+        return animations;
+    }
+ getSharedOptions(options) {
+        if (!options.$shared) {
+            return;
+        }
+        return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));
+    }
+ includeOptions(mode, sharedOptions) {
+        return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;
+    }
+ _getSharedOptions(start, mode) {
+        const firstOpts = this.resolveDataElementOptions(start, mode);
+        const previouslySharedOptions = this._sharedOptions;
+        const sharedOptions = this.getSharedOptions(firstOpts);
+        const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;
+        this.updateSharedOptions(sharedOptions, mode, firstOpts);
+        return {
+            sharedOptions,
+            includeOptions
+        };
+    }
+ updateElement(element, index, properties, mode) {
+        if (isDirectUpdateMode(mode)) {
+            Object.assign(element, properties);
+        } else {
+            this._resolveAnimations(index, mode).update(element, properties);
+        }
+    }
+ updateSharedOptions(sharedOptions, mode, newOptions) {
+        if (sharedOptions && !isDirectUpdateMode(mode)) {
+            this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);
+        }
+    }
+ _setStyle(element, index, mode, active) {
+        element.active = active;
+        const options = this.getStyle(index, active);
+        this._resolveAnimations(index, mode, active).update(element, {
+            options: !active && this.getSharedOptions(options) || options
+        });
+    }
+    removeHoverStyle(element, datasetIndex, index) {
+        this._setStyle(element, index, 'active', false);
+    }
+    setHoverStyle(element, datasetIndex, index) {
+        this._setStyle(element, index, 'active', true);
+    }
+ _removeDatasetHoverStyle() {
+        const element = this._cachedMeta.dataset;
+        if (element) {
+            this._setStyle(element, undefined, 'active', false);
+        }
+    }
+ _setDatasetHoverStyle() {
+        const element = this._cachedMeta.dataset;
+        if (element) {
+            this._setStyle(element, undefined, 'active', true);
+        }
+    }
+ _resyncElements(resetNewElements) {
+        const data = this._data;
+        const elements = this._cachedMeta.data;
+        for (const [method, arg1, arg2] of this._syncList){
+            this[method](arg1, arg2);
+        }
+        this._syncList = [];
+        const numMeta = elements.length;
+        const numData = data.length;
+        const count = Math.min(numData, numMeta);
+        if (count) {
+            this.parse(0, count);
+        }
+        if (numData > numMeta) {
+            this._insertElements(numMeta, numData - numMeta, resetNewElements);
+        } else if (numData < numMeta) {
+            this._removeElements(numData, numMeta - numData);
+        }
+    }
+ _insertElements(start, count, resetNewElements = true) {
+        const meta = this._cachedMeta;
+        const data = meta.data;
+        const end = start + count;
+        let i;
+        const move = (arr)=>{
+            arr.length += count;
+            for(i = arr.length - 1; i >= end; i--){
+                arr[i] = arr[i - count];
+            }
+        };
+        move(data);
+        for(i = start; i < end; ++i){
+            data[i] = new this.dataElementType();
+        }
+        if (this._parsing) {
+            move(meta._parsed);
+        }
+        this.parse(start, count);
+        if (resetNewElements) {
+            this.updateElements(data, start, count, 'reset');
+        }
+    }
+    updateElements(element, start, count, mode) {}
+ _removeElements(start, count) {
+        const meta = this._cachedMeta;
+        if (this._parsing) {
+            const removed = meta._parsed.splice(start, count);
+            if (meta._stacked) {
+                clearStacks(meta, removed);
+            }
+        }
+        meta.data.splice(start, count);
+    }
+ _sync(args) {
+        if (this._parsing) {
+            this._syncList.push(args);
+        } else {
+            const [method, arg1, arg2] = args;
+            this[method](arg1, arg2);
+        }
+        this.chart._dataChanges.push([
+            this.index,
+            ...args
+        ]);
+    }
+    _onDataPush() {
+        const count = arguments.length;
+        this._sync([
+            '_insertElements',
+            this.getDataset().data.length - count,
+            count
+        ]);
+    }
+    _onDataPop() {
+        this._sync([
+            '_removeElements',
+            this._cachedMeta.data.length - 1,
+            1
+        ]);
+    }
+    _onDataShift() {
+        this._sync([
+            '_removeElements',
+            0,
+            1
+        ]);
+    }
+    _onDataSplice(start, count) {
+        if (count) {
+            this._sync([
+                '_removeElements',
+                start,
+                count
+            ]);
+        }
+        const newCount = arguments.length - 2;
+        if (newCount) {
+            this._sync([
+                '_insertElements',
+                start,
+                newCount
+            ]);
+        }
+    }
+    _onDataUnshift() {
+        this._sync([
+            '_insertElements',
+            0,
+            arguments.length
+        ]);
+    }
+}
+
+function getAllScaleValues(scale, type) {
+    if (!scale._cache.$bar) {
+        const visibleMetas = scale.getMatchingVisibleMetas(type);
+        let values = [];
+        for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){
+            values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));
+        }
+        scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));
+    }
+    return scale._cache.$bar;
+}
+ function computeMinSampleSize(meta) {
+    const scale = meta.iScale;
+    const values = getAllScaleValues(scale, meta.type);
+    let min = scale._length;
+    let i, ilen, curr, prev;
+    const updateMinAndPrev = ()=>{
+        if (curr === 32767 || curr === -32768) {
+            return;
+        }
+        if (defined(prev)) {
+            min = Math.min(min, Math.abs(curr - prev) || min);
+        }
+        prev = curr;
+    };
+    for(i = 0, ilen = values.length; i < ilen; ++i){
+        curr = scale.getPixelForValue(values[i]);
+        updateMinAndPrev();
+    }
+    prev = undefined;
+    for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){
+        curr = scale.getPixelForTick(i);
+        updateMinAndPrev();
+    }
+    return min;
+}
+ function computeFitCategoryTraits(index, ruler, options, stackCount) {
+    const thickness = options.barThickness;
+    let size, ratio;
+    if (isNullOrUndef(thickness)) {
+        size = ruler.min * options.categoryPercentage;
+        ratio = options.barPercentage;
+    } else {
+        size = thickness * stackCount;
+        ratio = 1;
+    }
+    return {
+        chunk: size / stackCount,
+        ratio,
+        start: ruler.pixels[index] - size / 2
+    };
+}
+ function computeFlexCategoryTraits(index, ruler, options, stackCount) {
+    const pixels = ruler.pixels;
+    const curr = pixels[index];
+    let prev = index > 0 ? pixels[index - 1] : null;
+    let next = index < pixels.length - 1 ? pixels[index + 1] : null;
+    const percent = options.categoryPercentage;
+    if (prev === null) {
+        prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
+    }
+    if (next === null) {
+        next = curr + curr - prev;
+    }
+    const start = curr - (curr - Math.min(prev, next)) / 2 * percent;
+    const size = Math.abs(next - prev) / 2 * percent;
+    return {
+        chunk: size / stackCount,
+        ratio: options.barPercentage,
+        start
+    };
+}
+function parseFloatBar(entry, item, vScale, i) {
+    const startValue = vScale.parse(entry[0], i);
+    const endValue = vScale.parse(entry[1], i);
+    const min = Math.min(startValue, endValue);
+    const max = Math.max(startValue, endValue);
+    let barStart = min;
+    let barEnd = max;
+    if (Math.abs(min) > Math.abs(max)) {
+        barStart = max;
+        barEnd = min;
+    }
+    item[vScale.axis] = barEnd;
+    item._custom = {
+        barStart,
+        barEnd,
+        start: startValue,
+        end: endValue,
+        min,
+        max
+    };
+}
+function parseValue(entry, item, vScale, i) {
+    if (isArray(entry)) {
+        parseFloatBar(entry, item, vScale, i);
+    } else {
+        item[vScale.axis] = vScale.parse(entry, i);
+    }
+    return item;
+}
+function parseArrayOrPrimitive(meta, data, start, count) {
+    const iScale = meta.iScale;
+    const vScale = meta.vScale;
+    const labels = iScale.getLabels();
+    const singleScale = iScale === vScale;
+    const parsed = [];
+    let i, ilen, item, entry;
+    for(i = start, ilen = start + count; i < ilen; ++i){
+        entry = data[i];
+        item = {};
+        item[iScale.axis] = singleScale || iScale.parse(labels[i], i);
+        parsed.push(parseValue(entry, item, vScale, i));
+    }
+    return parsed;
+}
+function isFloatBar(custom) {
+    return custom && custom.barStart !== undefined && custom.barEnd !== undefined;
+}
+function barSign(size, vScale, actualBase) {
+    if (size !== 0) {
+        return sign(size);
+    }
+    return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);
+}
+function borderProps(properties) {
+    let reverse, start, end, top, bottom;
+    if (properties.horizontal) {
+        reverse = properties.base > properties.x;
+        start = 'left';
+        end = 'right';
+    } else {
+        reverse = properties.base < properties.y;
+        start = 'bottom';
+        end = 'top';
+    }
+    if (reverse) {
+        top = 'end';
+        bottom = 'start';
+    } else {
+        top = 'start';
+        bottom = 'end';
+    }
+    return {
+        start,
+        end,
+        reverse,
+        top,
+        bottom
+    };
+}
+function setBorderSkipped(properties, options, stack, index) {
+    let edge = options.borderSkipped;
+    const res = {};
+    if (!edge) {
+        properties.borderSkipped = res;
+        return;
+    }
+    if (edge === true) {
+        properties.borderSkipped = {
+            top: true,
+            right: true,
+            bottom: true,
+            left: true
+        };
+        return;
+    }
+    const { start , end , reverse , top , bottom  } = borderProps(properties);
+    if (edge === 'middle' && stack) {
+        properties.enableBorderRadius = true;
+        if ((stack._top || 0) === index) {
+            edge = top;
+        } else if ((stack._bottom || 0) === index) {
+            edge = bottom;
+        } else {
+            res[parseEdge(bottom, start, end, reverse)] = true;
+            edge = top;
+        }
+    }
+    res[parseEdge(edge, start, end, reverse)] = true;
+    properties.borderSkipped = res;
+}
+function parseEdge(edge, a, b, reverse) {
+    if (reverse) {
+        edge = swap(edge, a, b);
+        edge = startEnd(edge, b, a);
+    } else {
+        edge = startEnd(edge, a, b);
+    }
+    return edge;
+}
+function swap(orig, v1, v2) {
+    return orig === v1 ? v2 : orig === v2 ? v1 : orig;
+}
+function startEnd(v, start, end) {
+    return v === 'start' ? start : v === 'end' ? end : v;
+}
+function setInflateAmount(properties, { inflateAmount  }, ratio) {
+    properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;
+}
+class BarController extends DatasetController {
+    static id = 'bar';
+ static defaults = {
+        datasetElementType: false,
+        dataElementType: 'bar',
+        categoryPercentage: 0.8,
+        barPercentage: 0.9,
+        grouped: true,
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'x',
+                    'y',
+                    'base',
+                    'width',
+                    'height'
+                ]
+            }
+        }
+    };
+ static overrides = {
+        scales: {
+            _index_: {
+                type: 'category',
+                offset: true,
+                grid: {
+                    offset: true
+                }
+            },
+            _value_: {
+                type: 'linear',
+                beginAtZero: true
+            }
+        }
+    };
+ parsePrimitiveData(meta, data, start, count) {
+        return parseArrayOrPrimitive(meta, data, start, count);
+    }
+ parseArrayData(meta, data, start, count) {
+        return parseArrayOrPrimitive(meta, data, start, count);
+    }
+ parseObjectData(meta, data, start, count) {
+        const { iScale , vScale  } = meta;
+        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;
+        const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;
+        const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;
+        const parsed = [];
+        let i, ilen, item, obj;
+        for(i = start, ilen = start + count; i < ilen; ++i){
+            obj = data[i];
+            item = {};
+            item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);
+            parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));
+        }
+        return parsed;
+    }
+ updateRangeFromParsed(range, scale, parsed, stack) {
+        super.updateRangeFromParsed(range, scale, parsed, stack);
+        const custom = parsed._custom;
+        if (custom && scale === this._cachedMeta.vScale) {
+            range.min = Math.min(range.min, custom.min);
+            range.max = Math.max(range.max, custom.max);
+        }
+    }
+ getMaxOverflow() {
+        return 0;
+    }
+ getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const { iScale , vScale  } = meta;
+        const parsed = this.getParsed(index);
+        const custom = parsed._custom;
+        const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);
+        return {
+            label: '' + iScale.getLabelForValue(parsed[iScale.axis]),
+            value
+        };
+    }
+    initialize() {
+        this.enableOptionSharing = true;
+        super.initialize();
+        const meta = this._cachedMeta;
+        meta.stack = this.getDataset().stack;
+    }
+    update(mode) {
+        const meta = this._cachedMeta;
+        this.updateElements(meta.data, 0, meta.data.length, mode);
+    }
+    updateElements(bars, start, count, mode) {
+        const reset = mode === 'reset';
+        const { index , _cachedMeta: { vScale  }  } = this;
+        const base = vScale.getBasePixel();
+        const horizontal = vScale.isHorizontal();
+        const ruler = this._getRuler();
+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);
+        for(let i = start; i < start + count; i++){
+            const parsed = this.getParsed(i);
+            const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {
+                base,
+                head: base
+            } : this._calculateBarValuePixels(i);
+            const ipixels = this._calculateBarIndexPixels(i, ruler);
+            const stack = (parsed._stacks || {})[vScale.axis];
+            const properties = {
+                horizontal,
+                base: vpixels.base,
+                enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,
+                x: horizontal ? vpixels.head : ipixels.center,
+                y: horizontal ? ipixels.center : vpixels.head,
+                height: horizontal ? ipixels.size : Math.abs(vpixels.size),
+                width: horizontal ? Math.abs(vpixels.size) : ipixels.size
+            };
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);
+            }
+            const options = properties.options || bars[i].options;
+            setBorderSkipped(properties, options, stack, index);
+            setInflateAmount(properties, options, ruler.ratio);
+            this.updateElement(bars[i], i, properties, mode);
+        }
+    }
+ _getStacks(last, dataIndex) {
+        const { iScale  } = this._cachedMeta;
+        const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);
+        const stacked = iScale.options.stacked;
+        const stacks = [];
+        const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);
+        const iScaleValue = currentParsed && currentParsed[iScale.axis];
+        const skipNull = (meta)=>{
+            const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);
+            const val = parsed && parsed[meta.vScale.axis];
+            if (isNullOrUndef(val) || isNaN(val)) {
+                return true;
+            }
+        };
+        for (const meta of metasets){
+            if (dataIndex !== undefined && skipNull(meta)) {
+                continue;
+            }
+            if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {
+                stacks.push(meta.stack);
+            }
+            if (meta.index === last) {
+                break;
+            }
+        }
+        if (!stacks.length) {
+            stacks.push(undefined);
+        }
+        return stacks;
+    }
+ _getStackCount(index) {
+        return this._getStacks(undefined, index).length;
+    }
+    _getAxisCount() {
+        return this._getAxis().length;
+    }
+    getFirstScaleIdForIndexAxis() {
+        const scales = this.chart.scales;
+        const indexScaleId = this.chart.options.indexAxis;
+        return Object.keys(scales).filter((key)=>scales[key].axis === indexScaleId).shift();
+    }
+    _getAxis() {
+        const axis = {};
+        const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();
+        for (const dataset of this.chart.data.datasets){
+            axis[valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;
+        }
+        return Object.keys(axis);
+    }
+ _getStackIndex(datasetIndex, name, dataIndex) {
+        const stacks = this._getStacks(datasetIndex, dataIndex);
+        const index = name !== undefined ? stacks.indexOf(name) : -1;
+        return index === -1 ? stacks.length - 1 : index;
+    }
+ _getRuler() {
+        const opts = this.options;
+        const meta = this._cachedMeta;
+        const iScale = meta.iScale;
+        const pixels = [];
+        let i, ilen;
+        for(i = 0, ilen = meta.data.length; i < ilen; ++i){
+            pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));
+        }
+        const barThickness = opts.barThickness;
+        const min = barThickness || computeMinSampleSize(meta);
+        return {
+            min,
+            pixels,
+            start: iScale._startPixel,
+            end: iScale._endPixel,
+            stackCount: this._getStackCount(),
+            scale: iScale,
+            grouped: opts.grouped,
+            ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage
+        };
+    }
+ _calculateBarValuePixels(index) {
+        const { _cachedMeta: { vScale , _stacked , index: datasetIndex  } , options: { base: baseValue , minBarLength  }  } = this;
+        const actualBase = baseValue || 0;
+        const parsed = this.getParsed(index);
+        const custom = parsed._custom;
+        const floating = isFloatBar(custom);
+        let value = parsed[vScale.axis];
+        let start = 0;
+        let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;
+        let head, size;
+        if (length !== value) {
+            start = length - value;
+            length = value;
+        }
+        if (floating) {
+            value = custom.barStart;
+            length = custom.barEnd - custom.barStart;
+            if (value !== 0 && sign(value) !== sign(custom.barEnd)) {
+                start = 0;
+            }
+            start += value;
+        }
+        const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;
+        let base = vScale.getPixelForValue(startValue);
+        if (this.chart.getDataVisibility(index)) {
+            head = vScale.getPixelForValue(start + length);
+        } else {
+            head = base;
+        }
+        size = head - base;
+        if (Math.abs(size) < minBarLength) {
+            size = barSign(size, vScale, actualBase) * minBarLength;
+            if (value === actualBase) {
+                base -= size / 2;
+            }
+            const startPixel = vScale.getPixelForDecimal(0);
+            const endPixel = vScale.getPixelForDecimal(1);
+            const min = Math.min(startPixel, endPixel);
+            const max = Math.max(startPixel, endPixel);
+            base = Math.max(Math.min(base, max), min);
+            head = base + size;
+            if (_stacked && !floating) {
+                parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);
+            }
+        }
+        if (base === vScale.getPixelForValue(actualBase)) {
+            const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;
+            base += halfGrid;
+            size -= halfGrid;
+        }
+        return {
+            size,
+            base,
+            head,
+            center: head + size / 2
+        };
+    }
+ _calculateBarIndexPixels(index, ruler) {
+        const scale = ruler.scale;
+        const options = this.options;
+        const skipNull = options.skipNull;
+        const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);
+        let center, size;
+        const axisCount = this._getAxisCount();
+        if (ruler.grouped) {
+            const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;
+            const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);
+            const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;
+            const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));
+            const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;
+            center = range.start + range.chunk * stackIndex + range.chunk / 2;
+            size = Math.min(maxBarThickness, range.chunk * range.ratio);
+        } else {
+            center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);
+            size = Math.min(maxBarThickness, ruler.min * ruler.ratio);
+        }
+        return {
+            base: center - size / 2,
+            head: center + size / 2,
+            center,
+            size
+        };
+    }
+    draw() {
+        const meta = this._cachedMeta;
+        const vScale = meta.vScale;
+        const rects = meta.data;
+        const ilen = rects.length;
+        let i = 0;
+        for(; i < ilen; ++i){
+            if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {
+                rects[i].draw(this._ctx);
+            }
+        }
+    }
+}
+
+class BubbleController extends DatasetController {
+    static id = 'bubble';
+ static defaults = {
+        datasetElementType: false,
+        dataElementType: 'point',
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'x',
+                    'y',
+                    'borderWidth',
+                    'radius'
+                ]
+            }
+        }
+    };
+ static overrides = {
+        scales: {
+            x: {
+                type: 'linear'
+            },
+            y: {
+                type: 'linear'
+            }
+        }
+    };
+    initialize() {
+        this.enableOptionSharing = true;
+        super.initialize();
+    }
+ parsePrimitiveData(meta, data, start, count) {
+        const parsed = super.parsePrimitiveData(meta, data, start, count);
+        for(let i = 0; i < parsed.length; i++){
+            parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;
+        }
+        return parsed;
+    }
+ parseArrayData(meta, data, start, count) {
+        const parsed = super.parseArrayData(meta, data, start, count);
+        for(let i = 0; i < parsed.length; i++){
+            const item = data[start + i];
+            parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);
+        }
+        return parsed;
+    }
+ parseObjectData(meta, data, start, count) {
+        const parsed = super.parseObjectData(meta, data, start, count);
+        for(let i = 0; i < parsed.length; i++){
+            const item = data[start + i];
+            parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);
+        }
+        return parsed;
+    }
+ getMaxOverflow() {
+        const data = this._cachedMeta.data;
+        let max = 0;
+        for(let i = data.length - 1; i >= 0; --i){
+            max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);
+        }
+        return max > 0 && max;
+    }
+ getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const labels = this.chart.data.labels || [];
+        const { xScale , yScale  } = meta;
+        const parsed = this.getParsed(index);
+        const x = xScale.getLabelForValue(parsed.x);
+        const y = yScale.getLabelForValue(parsed.y);
+        const r = parsed._custom;
+        return {
+            label: labels[index] || '',
+            value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'
+        };
+    }
+    update(mode) {
+        const points = this._cachedMeta.data;
+        this.updateElements(points, 0, points.length, mode);
+    }
+    updateElements(points, start, count, mode) {
+        const reset = mode === 'reset';
+        const { iScale , vScale  } = this._cachedMeta;
+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);
+        const iAxis = iScale.axis;
+        const vAxis = vScale.axis;
+        for(let i = start; i < start + count; i++){
+            const point = points[i];
+            const parsed = !reset && this.getParsed(i);
+            const properties = {};
+            const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);
+            const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);
+            properties.skip = isNaN(iPixel) || isNaN(vPixel);
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+                if (reset) {
+                    properties.options.radius = 0;
+                }
+            }
+            this.updateElement(point, i, properties, mode);
+        }
+    }
+ resolveDataElementOptions(index, mode) {
+        const parsed = this.getParsed(index);
+        let values = super.resolveDataElementOptions(index, mode);
+        if (values.$shared) {
+            values = Object.assign({}, values, {
+                $shared: false
+            });
+        }
+        const radius = values.radius;
+        if (mode !== 'active') {
+            values.radius = 0;
+        }
+        values.radius += valueOrDefault(parsed && parsed._custom, radius);
+        return values;
+    }
+}
+
+function getRatioAndOffset(rotation, circumference, cutout) {
+    let ratioX = 1;
+    let ratioY = 1;
+    let offsetX = 0;
+    let offsetY = 0;
+    if (circumference < TAU) {
+        const startAngle = rotation;
+        const endAngle = startAngle + circumference;
+        const startX = Math.cos(startAngle);
+        const startY = Math.sin(startAngle);
+        const endX = Math.cos(endAngle);
+        const endY = Math.sin(endAngle);
+        const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);
+        const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);
+        const maxX = calcMax(0, startX, endX);
+        const maxY = calcMax(HALF_PI, startY, endY);
+        const minX = calcMin(PI, startX, endX);
+        const minY = calcMin(PI + HALF_PI, startY, endY);
+        ratioX = (maxX - minX) / 2;
+        ratioY = (maxY - minY) / 2;
+        offsetX = -(maxX + minX) / 2;
+        offsetY = -(maxY + minY) / 2;
+    }
+    return {
+        ratioX,
+        ratioY,
+        offsetX,
+        offsetY
+    };
+}
+class DoughnutController extends DatasetController {
+    static id = 'doughnut';
+ static defaults = {
+        datasetElementType: false,
+        dataElementType: 'arc',
+        animation: {
+            animateRotate: true,
+            animateScale: false
+        },
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'circumference',
+                    'endAngle',
+                    'innerRadius',
+                    'outerRadius',
+                    'startAngle',
+                    'x',
+                    'y',
+                    'offset',
+                    'borderWidth',
+                    'spacing'
+                ]
+            }
+        },
+        cutout: '50%',
+        rotation: 0,
+        circumference: 360,
+        radius: '100%',
+        spacing: 0,
+        indexAxis: 'r'
+    };
+    static descriptors = {
+        _scriptable: (name)=>name !== 'spacing',
+        _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')
+    };
+ static overrides = {
+        aspectRatio: 1,
+        plugins: {
+            legend: {
+                labels: {
+                    generateLabels (chart) {
+                        const data = chart.data;
+                        if (data.labels.length && data.datasets.length) {
+                            const { labels: { pointStyle , color  }  } = chart.legend.options;
+                            return data.labels.map((label, i)=>{
+                                const meta = chart.getDatasetMeta(0);
+                                const style = meta.controller.getStyle(i);
+                                return {
+                                    text: label,
+                                    fillStyle: style.backgroundColor,
+                                    strokeStyle: style.borderColor,
+                                    fontColor: color,
+                                    lineWidth: style.borderWidth,
+                                    pointStyle: pointStyle,
+                                    hidden: !chart.getDataVisibility(i),
+                                    index: i
+                                };
+                            });
+                        }
+                        return [];
+                    }
+                },
+                onClick (e, legendItem, legend) {
+                    legend.chart.toggleDataVisibility(legendItem.index);
+                    legend.chart.update();
+                }
+            }
+        }
+    };
+    constructor(chart, datasetIndex){
+        super(chart, datasetIndex);
+        this.enableOptionSharing = true;
+        this.innerRadius = undefined;
+        this.outerRadius = undefined;
+        this.offsetX = undefined;
+        this.offsetY = undefined;
+    }
+    linkScales() {}
+ parse(start, count) {
+        const data = this.getDataset().data;
+        const meta = this._cachedMeta;
+        if (this._parsing === false) {
+            meta._parsed = data;
+        } else {
+            let getter = (i)=>+data[i];
+            if (isObject(data[start])) {
+                const { key ='value'  } = this._parsing;
+                getter = (i)=>+resolveObjectKey(data[i], key);
+            }
+            let i, ilen;
+            for(i = start, ilen = start + count; i < ilen; ++i){
+                meta._parsed[i] = getter(i);
+            }
+        }
+    }
+ _getRotation() {
+        return toRadians(this.options.rotation - 90);
+    }
+ _getCircumference() {
+        return toRadians(this.options.circumference);
+    }
+ _getRotationExtents() {
+        let min = TAU;
+        let max = -TAU;
+        for(let i = 0; i < this.chart.data.datasets.length; ++i){
+            if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {
+                const controller = this.chart.getDatasetMeta(i).controller;
+                const rotation = controller._getRotation();
+                const circumference = controller._getCircumference();
+                min = Math.min(min, rotation);
+                max = Math.max(max, rotation + circumference);
+            }
+        }
+        return {
+            rotation: min,
+            circumference: max - min
+        };
+    }
+ update(mode) {
+        const chart = this.chart;
+        const { chartArea  } = chart;
+        const meta = this._cachedMeta;
+        const arcs = meta.data;
+        const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;
+        const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);
+        const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);
+        const chartWeight = this._getRingWeight(this.index);
+        const { circumference , rotation  } = this._getRotationExtents();
+        const { ratioX , ratioY , offsetX , offsetY  } = getRatioAndOffset(rotation, circumference, cutout);
+        const maxWidth = (chartArea.width - spacing) / ratioX;
+        const maxHeight = (chartArea.height - spacing) / ratioY;
+        const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);
+        const outerRadius = toDimension(this.options.radius, maxRadius);
+        const innerRadius = Math.max(outerRadius * cutout, 0);
+        const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();
+        this.offsetX = offsetX * outerRadius;
+        this.offsetY = offsetY * outerRadius;
+        meta.total = this.calculateTotal();
+        this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);
+        this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);
+        this.updateElements(arcs, 0, arcs.length, mode);
+    }
+ _circumference(i, reset) {
+        const opts = this.options;
+        const meta = this._cachedMeta;
+        const circumference = this._getCircumference();
+        if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {
+            return 0;
+        }
+        return this.calculateCircumference(meta._parsed[i] * circumference / TAU);
+    }
+    updateElements(arcs, start, count, mode) {
+        const reset = mode === 'reset';
+        const chart = this.chart;
+        const chartArea = chart.chartArea;
+        const opts = chart.options;
+        const animationOpts = opts.animation;
+        const centerX = (chartArea.left + chartArea.right) / 2;
+        const centerY = (chartArea.top + chartArea.bottom) / 2;
+        const animateScale = reset && animationOpts.animateScale;
+        const innerRadius = animateScale ? 0 : this.innerRadius;
+        const outerRadius = animateScale ? 0 : this.outerRadius;
+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);
+        let startAngle = this._getRotation();
+        let i;
+        for(i = 0; i < start; ++i){
+            startAngle += this._circumference(i, reset);
+        }
+        for(i = start; i < start + count; ++i){
+            const circumference = this._circumference(i, reset);
+            const arc = arcs[i];
+            const properties = {
+                x: centerX + this.offsetX,
+                y: centerY + this.offsetY,
+                startAngle,
+                endAngle: startAngle + circumference,
+                circumference,
+                outerRadius,
+                innerRadius
+            };
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);
+            }
+            startAngle += circumference;
+            this.updateElement(arc, i, properties, mode);
+        }
+    }
+    calculateTotal() {
+        const meta = this._cachedMeta;
+        const metaData = meta.data;
+        let total = 0;
+        let i;
+        for(i = 0; i < metaData.length; i++){
+            const value = meta._parsed[i];
+            if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {
+                total += Math.abs(value);
+            }
+        }
+        return total;
+    }
+    calculateCircumference(value) {
+        const total = this._cachedMeta.total;
+        if (total > 0 && !isNaN(value)) {
+            return TAU * (Math.abs(value) / total);
+        }
+        return 0;
+    }
+    getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const chart = this.chart;
+        const labels = chart.data.labels || [];
+        const value = formatNumber(meta._parsed[index], chart.options.locale);
+        return {
+            label: labels[index] || '',
+            value
+        };
+    }
+    getMaxBorderWidth(arcs) {
+        let max = 0;
+        const chart = this.chart;
+        let i, ilen, meta, controller, options;
+        if (!arcs) {
+            for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){
+                if (chart.isDatasetVisible(i)) {
+                    meta = chart.getDatasetMeta(i);
+                    arcs = meta.data;
+                    controller = meta.controller;
+                    break;
+                }
+            }
+        }
+        if (!arcs) {
+            return 0;
+        }
+        for(i = 0, ilen = arcs.length; i < ilen; ++i){
+            options = controller.resolveDataElementOptions(i);
+            if (options.borderAlign !== 'inner') {
+                max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);
+            }
+        }
+        return max;
+    }
+    getMaxOffset(arcs) {
+        let max = 0;
+        for(let i = 0, ilen = arcs.length; i < ilen; ++i){
+            const options = this.resolveDataElementOptions(i);
+            max = Math.max(max, options.offset || 0, options.hoverOffset || 0);
+        }
+        return max;
+    }
+ _getRingWeightOffset(datasetIndex) {
+        let ringWeightOffset = 0;
+        for(let i = 0; i < datasetIndex; ++i){
+            if (this.chart.isDatasetVisible(i)) {
+                ringWeightOffset += this._getRingWeight(i);
+            }
+        }
+        return ringWeightOffset;
+    }
+ _getRingWeight(datasetIndex) {
+        return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);
+    }
+ _getVisibleDatasetWeightTotal() {
+        return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
+    }
+}
+
+class LineController extends DatasetController {
+    static id = 'line';
+ static defaults = {
+        datasetElementType: 'line',
+        dataElementType: 'point',
+        showLine: true,
+        spanGaps: false
+    };
+ static overrides = {
+        scales: {
+            _index_: {
+                type: 'category'
+            },
+            _value_: {
+                type: 'linear'
+            }
+        }
+    };
+    initialize() {
+        this.enableOptionSharing = true;
+        this.supportsDecimation = true;
+        super.initialize();
+    }
+    update(mode) {
+        const meta = this._cachedMeta;
+        const { dataset: line , data: points = [] , _dataset  } = meta;
+        const animationsDisabled = this.chart._animationsDisabled;
+        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);
+        this._drawStart = start;
+        this._drawCount = count;
+        if (_scaleRangesChanged(meta)) {
+            start = 0;
+            count = points.length;
+        }
+        line._chart = this.chart;
+        line._datasetIndex = this.index;
+        line._decimated = !!_dataset._decimated;
+        line.points = points;
+        const options = this.resolveDatasetElementOptions(mode);
+        if (!this.options.showLine) {
+            options.borderWidth = 0;
+        }
+        options.segment = this.options.segment;
+        this.updateElement(line, undefined, {
+            animated: !animationsDisabled,
+            options
+        }, mode);
+        this.updateElements(points, start, count, mode);
+    }
+    updateElements(points, start, count, mode) {
+        const reset = mode === 'reset';
+        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;
+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);
+        const iAxis = iScale.axis;
+        const vAxis = vScale.axis;
+        const { spanGaps , segment  } = this.options;
+        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;
+        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';
+        const end = start + count;
+        const pointsCount = points.length;
+        let prevParsed = start > 0 && this.getParsed(start - 1);
+        for(let i = 0; i < pointsCount; ++i){
+            const point = points[i];
+            const properties = directUpdate ? point : {};
+            if (i < start || i >= end) {
+                properties.skip = true;
+                continue;
+            }
+            const parsed = this.getParsed(i);
+            const nullData = isNullOrUndef(parsed[vAxis]);
+            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);
+            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);
+            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;
+            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;
+            if (segment) {
+                properties.parsed = parsed;
+                properties.raw = _dataset.data[i];
+            }
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+            }
+            if (!directUpdate) {
+                this.updateElement(point, i, properties, mode);
+            }
+            prevParsed = parsed;
+        }
+    }
+ getMaxOverflow() {
+        const meta = this._cachedMeta;
+        const dataset = meta.dataset;
+        const border = dataset.options && dataset.options.borderWidth || 0;
+        const data = meta.data || [];
+        if (!data.length) {
+            return border;
+        }
+        const firstPoint = data[0].size(this.resolveDataElementOptions(0));
+        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));
+        return Math.max(border, firstPoint, lastPoint) / 2;
+    }
+    draw() {
+        const meta = this._cachedMeta;
+        meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);
+        super.draw();
+    }
+}
+
+class PolarAreaController extends DatasetController {
+    static id = 'polarArea';
+ static defaults = {
+        dataElementType: 'arc',
+        animation: {
+            animateRotate: true,
+            animateScale: true
+        },
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'x',
+                    'y',
+                    'startAngle',
+                    'endAngle',
+                    'innerRadius',
+                    'outerRadius'
+                ]
+            }
+        },
+        indexAxis: 'r',
+        startAngle: 0
+    };
+ static overrides = {
+        aspectRatio: 1,
+        plugins: {
+            legend: {
+                labels: {
+                    generateLabels (chart) {
+                        const data = chart.data;
+                        if (data.labels.length && data.datasets.length) {
+                            const { labels: { pointStyle , color  }  } = chart.legend.options;
+                            return data.labels.map((label, i)=>{
+                                const meta = chart.getDatasetMeta(0);
+                                const style = meta.controller.getStyle(i);
+                                return {
+                                    text: label,
+                                    fillStyle: style.backgroundColor,
+                                    strokeStyle: style.borderColor,
+                                    fontColor: color,
+                                    lineWidth: style.borderWidth,
+                                    pointStyle: pointStyle,
+                                    hidden: !chart.getDataVisibility(i),
+                                    index: i
+                                };
+                            });
+                        }
+                        return [];
+                    }
+                },
+                onClick (e, legendItem, legend) {
+                    legend.chart.toggleDataVisibility(legendItem.index);
+                    legend.chart.update();
+                }
+            }
+        },
+        scales: {
+            r: {
+                type: 'radialLinear',
+                angleLines: {
+                    display: false
+                },
+                beginAtZero: true,
+                grid: {
+                    circular: true
+                },
+                pointLabels: {
+                    display: false
+                },
+                startAngle: 0
+            }
+        }
+    };
+    constructor(chart, datasetIndex){
+        super(chart, datasetIndex);
+        this.innerRadius = undefined;
+        this.outerRadius = undefined;
+    }
+    getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const chart = this.chart;
+        const labels = chart.data.labels || [];
+        const value = formatNumber(meta._parsed[index].r, chart.options.locale);
+        return {
+            label: labels[index] || '',
+            value
+        };
+    }
+    parseObjectData(meta, data, start, count) {
+        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);
+    }
+    update(mode) {
+        const arcs = this._cachedMeta.data;
+        this._updateRadius();
+        this.updateElements(arcs, 0, arcs.length, mode);
+    }
+ getMinMax() {
+        const meta = this._cachedMeta;
+        const range = {
+            min: Number.POSITIVE_INFINITY,
+            max: Number.NEGATIVE_INFINITY
+        };
+        meta.data.forEach((element, index)=>{
+            const parsed = this.getParsed(index).r;
+            if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {
+                if (parsed < range.min) {
+                    range.min = parsed;
+                }
+                if (parsed > range.max) {
+                    range.max = parsed;
+                }
+            }
+        });
+        return range;
+    }
+ _updateRadius() {
+        const chart = this.chart;
+        const chartArea = chart.chartArea;
+        const opts = chart.options;
+        const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
+        const outerRadius = Math.max(minSize / 2, 0);
+        const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);
+        const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();
+        this.outerRadius = outerRadius - radiusLength * this.index;
+        this.innerRadius = this.outerRadius - radiusLength;
+    }
+    updateElements(arcs, start, count, mode) {
+        const reset = mode === 'reset';
+        const chart = this.chart;
+        const opts = chart.options;
+        const animationOpts = opts.animation;
+        const scale = this._cachedMeta.rScale;
+        const centerX = scale.xCenter;
+        const centerY = scale.yCenter;
+        const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;
+        let angle = datasetStartAngle;
+        let i;
+        const defaultAngle = 360 / this.countVisibleElements();
+        for(i = 0; i < start; ++i){
+            angle += this._computeAngle(i, mode, defaultAngle);
+        }
+        for(i = start; i < start + count; i++){
+            const arc = arcs[i];
+            let startAngle = angle;
+            let endAngle = angle + this._computeAngle(i, mode, defaultAngle);
+            let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;
+            angle = endAngle;
+            if (reset) {
+                if (animationOpts.animateScale) {
+                    outerRadius = 0;
+                }
+                if (animationOpts.animateRotate) {
+                    startAngle = endAngle = datasetStartAngle;
+                }
+            }
+            const properties = {
+                x: centerX,
+                y: centerY,
+                innerRadius: 0,
+                outerRadius,
+                startAngle,
+                endAngle,
+                options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)
+            };
+            this.updateElement(arc, i, properties, mode);
+        }
+    }
+    countVisibleElements() {
+        const meta = this._cachedMeta;
+        let count = 0;
+        meta.data.forEach((element, index)=>{
+            if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {
+                count++;
+            }
+        });
+        return count;
+    }
+ _computeAngle(index, mode, defaultAngle) {
+        return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;
+    }
+}
+
+class PieController extends DoughnutController {
+    static id = 'pie';
+ static defaults = {
+        cutout: 0,
+        rotation: 0,
+        circumference: 360,
+        radius: '100%'
+    };
+}
+
+class RadarController extends DatasetController {
+    static id = 'radar';
+ static defaults = {
+        datasetElementType: 'line',
+        dataElementType: 'point',
+        indexAxis: 'r',
+        showLine: true,
+        elements: {
+            line: {
+                fill: 'start'
+            }
+        }
+    };
+ static overrides = {
+        aspectRatio: 1,
+        scales: {
+            r: {
+                type: 'radialLinear'
+            }
+        }
+    };
+ getLabelAndValue(index) {
+        const vScale = this._cachedMeta.vScale;
+        const parsed = this.getParsed(index);
+        return {
+            label: vScale.getLabels()[index],
+            value: '' + vScale.getLabelForValue(parsed[vScale.axis])
+        };
+    }
+    parseObjectData(meta, data, start, count) {
+        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);
+    }
+    update(mode) {
+        const meta = this._cachedMeta;
+        const line = meta.dataset;
+        const points = meta.data || [];
+        const labels = meta.iScale.getLabels();
+        line.points = points;
+        if (mode !== 'resize') {
+            const options = this.resolveDatasetElementOptions(mode);
+            if (!this.options.showLine) {
+                options.borderWidth = 0;
+            }
+            const properties = {
+                _loop: true,
+                _fullLoop: labels.length === points.length,
+                options
+            };
+            this.updateElement(line, undefined, properties, mode);
+        }
+        this.updateElements(points, 0, points.length, mode);
+    }
+    updateElements(points, start, count, mode) {
+        const scale = this._cachedMeta.rScale;
+        const reset = mode === 'reset';
+        for(let i = start; i < start + count; i++){
+            const point = points[i];
+            const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+            const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);
+            const x = reset ? scale.xCenter : pointPosition.x;
+            const y = reset ? scale.yCenter : pointPosition.y;
+            const properties = {
+                x,
+                y,
+                angle: pointPosition.angle,
+                skip: isNaN(x) || isNaN(y),
+                options
+            };
+            this.updateElement(point, i, properties, mode);
+        }
+    }
+}
+
+class ScatterController extends DatasetController {
+    static id = 'scatter';
+ static defaults = {
+        datasetElementType: false,
+        dataElementType: 'point',
+        showLine: false,
+        fill: false
+    };
+ static overrides = {
+        interaction: {
+            mode: 'point'
+        },
+        scales: {
+            x: {
+                type: 'linear'
+            },
+            y: {
+                type: 'linear'
+            }
+        }
+    };
+ getLabelAndValue(index) {
+        const meta = this._cachedMeta;
+        const labels = this.chart.data.labels || [];
+        const { xScale , yScale  } = meta;
+        const parsed = this.getParsed(index);
+        const x = xScale.getLabelForValue(parsed.x);
+        const y = yScale.getLabelForValue(parsed.y);
+        return {
+            label: labels[index] || '',
+            value: '(' + x + ', ' + y + ')'
+        };
+    }
+    update(mode) {
+        const meta = this._cachedMeta;
+        const { data: points = []  } = meta;
+        const animationsDisabled = this.chart._animationsDisabled;
+        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);
+        this._drawStart = start;
+        this._drawCount = count;
+        if (_scaleRangesChanged(meta)) {
+            start = 0;
+            count = points.length;
+        }
+        if (this.options.showLine) {
+            if (!this.datasetElementType) {
+                this.addElements();
+            }
+            const { dataset: line , _dataset  } = meta;
+            line._chart = this.chart;
+            line._datasetIndex = this.index;
+            line._decimated = !!_dataset._decimated;
+            line.points = points;
+            const options = this.resolveDatasetElementOptions(mode);
+            options.segment = this.options.segment;
+            this.updateElement(line, undefined, {
+                animated: !animationsDisabled,
+                options
+            }, mode);
+        } else if (this.datasetElementType) {
+            delete meta.dataset;
+            this.datasetElementType = false;
+        }
+        this.updateElements(points, start, count, mode);
+    }
+    addElements() {
+        const { showLine  } = this.options;
+        if (!this.datasetElementType && showLine) {
+            this.datasetElementType = this.chart.registry.getElement('line');
+        }
+        super.addElements();
+    }
+    updateElements(points, start, count, mode) {
+        const reset = mode === 'reset';
+        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;
+        const firstOpts = this.resolveDataElementOptions(start, mode);
+        const sharedOptions = this.getSharedOptions(firstOpts);
+        const includeOptions = this.includeOptions(mode, sharedOptions);
+        const iAxis = iScale.axis;
+        const vAxis = vScale.axis;
+        const { spanGaps , segment  } = this.options;
+        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;
+        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';
+        let prevParsed = start > 0 && this.getParsed(start - 1);
+        for(let i = start; i < start + count; ++i){
+            const point = points[i];
+            const parsed = this.getParsed(i);
+            const properties = directUpdate ? point : {};
+            const nullData = isNullOrUndef(parsed[vAxis]);
+            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);
+            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);
+            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;
+            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;
+            if (segment) {
+                properties.parsed = parsed;
+                properties.raw = _dataset.data[i];
+            }
+            if (includeOptions) {
+                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
+            }
+            if (!directUpdate) {
+                this.updateElement(point, i, properties, mode);
+            }
+            prevParsed = parsed;
+        }
+        this.updateSharedOptions(sharedOptions, mode, firstOpts);
+    }
+ getMaxOverflow() {
+        const meta = this._cachedMeta;
+        const data = meta.data || [];
+        if (!this.options.showLine) {
+            let max = 0;
+            for(let i = data.length - 1; i >= 0; --i){
+                max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);
+            }
+            return max > 0 && max;
+        }
+        const dataset = meta.dataset;
+        const border = dataset.options && dataset.options.borderWidth || 0;
+        if (!data.length) {
+            return border;
+        }
+        const firstPoint = data[0].size(this.resolveDataElementOptions(0));
+        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));
+        return Math.max(border, firstPoint, lastPoint) / 2;
+    }
+}
+
+var controllers = /*#__PURE__*/Object.freeze({
+__proto__: null,
+BarController: BarController,
+BubbleController: BubbleController,
+DoughnutController: DoughnutController,
+LineController: LineController,
+PieController: PieController,
+PolarAreaController: PolarAreaController,
+RadarController: RadarController,
+ScatterController: ScatterController
+});
+
+/**
+ * @namespace Chart._adapters
+ * @since 2.8.0
+ * @private
+ */ function abstract() {
+    throw new Error('This method is not implemented: Check that a complete date adapter is provided.');
+}
+/**
+ * Date adapter (current used by the time scale)
+ * @namespace Chart._adapters._date
+ * @memberof Chart._adapters
+ * @private
+ */ class DateAdapterBase {
+    /**
+   * Override default date adapter methods.
+   * Accepts type parameter to define options type.
+   * @example
+   * Chart._adapters._date.override<{myAdapterOption: string}>({
+   *   init() {
+   *     console.log(this.options.myAdapterOption);
+   *   }
+   * })
+   */ static override(members) {
+        Object.assign(DateAdapterBase.prototype, members);
+    }
+    options;
+    constructor(options){
+        this.options = options || {};
+    }
+    // eslint-disable-next-line @typescript-eslint/no-empty-function
+    init() {}
+    formats() {
+        return abstract();
+    }
+    parse() {
+        return abstract();
+    }
+    format() {
+        return abstract();
+    }
+    add() {
+        return abstract();
+    }
+    diff() {
+        return abstract();
+    }
+    startOf() {
+        return abstract();
+    }
+    endOf() {
+        return abstract();
+    }
+}
+var adapters = {
+    _date: DateAdapterBase
+};
+
+function binarySearch(metaset, axis, value, intersect) {
+    const { controller , data , _sorted  } = metaset;
+    const iScale = controller._cachedMeta.iScale;
+    const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;
+    if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {
+        const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;
+        if (!intersect) {
+            const result = lookupMethod(data, axis, value);
+            if (spanGaps) {
+                const { vScale  } = controller._cachedMeta;
+                const { _parsed  } = metaset;
+                const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
+                result.lo -= Math.max(0, distanceToDefinedLo);
+                const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
+                result.hi += Math.max(0, distanceToDefinedHi);
+            }
+            return result;
+        } else if (controller._sharedOptions) {
+            const el = data[0];
+            const range = typeof el.getRange === 'function' && el.getRange(axis);
+            if (range) {
+                const start = lookupMethod(data, axis, value - range);
+                const end = lookupMethod(data, axis, value + range);
+                return {
+                    lo: start.lo,
+                    hi: end.hi
+                };
+            }
+        }
+    }
+    return {
+        lo: 0,
+        hi: data.length - 1
+    };
+}
+ function evaluateInteractionItems(chart, axis, position, handler, intersect) {
+    const metasets = chart.getSortedVisibleDatasetMetas();
+    const value = position[axis];
+    for(let i = 0, ilen = metasets.length; i < ilen; ++i){
+        const { index , data  } = metasets[i];
+        const { lo , hi  } = binarySearch(metasets[i], axis, value, intersect);
+        for(let j = lo; j <= hi; ++j){
+            const element = data[j];
+            if (!element.skip) {
+                handler(element, index, j);
+            }
+        }
+    }
+}
+ function getDistanceMetricForAxis(axis) {
+    const useX = axis.indexOf('x') !== -1;
+    const useY = axis.indexOf('y') !== -1;
+    return function(pt1, pt2) {
+        const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
+        const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
+        return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
+    };
+}
+ function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {
+    const items = [];
+    if (!includeInvisible && !chart.isPointInArea(position)) {
+        return items;
+    }
+    const evaluationFunc = function(element, datasetIndex, index) {
+        if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {
+            return;
+        }
+        if (element.inRange(position.x, position.y, useFinalPosition)) {
+            items.push({
+                element,
+                datasetIndex,
+                index
+            });
+        }
+    };
+    evaluateInteractionItems(chart, axis, position, evaluationFunc, true);
+    return items;
+}
+ function getNearestRadialItems(chart, position, axis, useFinalPosition) {
+    let items = [];
+    function evaluationFunc(element, datasetIndex, index) {
+        const { startAngle , endAngle  } = element.getProps([
+            'startAngle',
+            'endAngle'
+        ], useFinalPosition);
+        const { angle  } = getAngleFromPoint(element, {
+            x: position.x,
+            y: position.y
+        });
+        if (_angleBetween(angle, startAngle, endAngle)) {
+            items.push({
+                element,
+                datasetIndex,
+                index
+            });
+        }
+    }
+    evaluateInteractionItems(chart, axis, position, evaluationFunc);
+    return items;
+}
+ function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
+    let items = [];
+    const distanceMetric = getDistanceMetricForAxis(axis);
+    let minDistance = Number.POSITIVE_INFINITY;
+    function evaluationFunc(element, datasetIndex, index) {
+        const inRange = element.inRange(position.x, position.y, useFinalPosition);
+        if (intersect && !inRange) {
+            return;
+        }
+        const center = element.getCenterPoint(useFinalPosition);
+        const pointInArea = !!includeInvisible || chart.isPointInArea(center);
+        if (!pointInArea && !inRange) {
+            return;
+        }
+        const distance = distanceMetric(position, center);
+        if (distance < minDistance) {
+            items = [
+                {
+                    element,
+                    datasetIndex,
+                    index
+                }
+            ];
+            minDistance = distance;
+        } else if (distance === minDistance) {
+            items.push({
+                element,
+                datasetIndex,
+                index
+            });
+        }
+    }
+    evaluateInteractionItems(chart, axis, position, evaluationFunc);
+    return items;
+}
+ function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
+    if (!includeInvisible && !chart.isPointInArea(position)) {
+        return [];
+    }
+    return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);
+}
+ function getAxisItems(chart, position, axis, intersect, useFinalPosition) {
+    const items = [];
+    const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';
+    let intersectsItem = false;
+    evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{
+        if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {
+            items.push({
+                element,
+                datasetIndex,
+                index
+            });
+            intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);
+        }
+    });
+    if (intersect && !intersectsItem) {
+        return [];
+    }
+    return items;
+}
+ var Interaction = {
+    evaluateInteractionItems,
+    modes: {
+ index (chart, e, options, useFinalPosition) {
+            const position = getRelativePosition(e, chart);
+            const axis = options.axis || 'x';
+            const includeInvisible = options.includeInvisible || false;
+            const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
+            const elements = [];
+            if (!items.length) {
+                return [];
+            }
+            chart.getSortedVisibleDatasetMetas().forEach((meta)=>{
+                const index = items[0].index;
+                const element = meta.data[index];
+                if (element && !element.skip) {
+                    elements.push({
+                        element,
+                        datasetIndex: meta.index,
+                        index
+                    });
+                }
+            });
+            return elements;
+        },
+ dataset (chart, e, options, useFinalPosition) {
+            const position = getRelativePosition(e, chart);
+            const axis = options.axis || 'xy';
+            const includeInvisible = options.includeInvisible || false;
+            let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
+            if (items.length > 0) {
+                const datasetIndex = items[0].datasetIndex;
+                const data = chart.getDatasetMeta(datasetIndex).data;
+                items = [];
+                for(let i = 0; i < data.length; ++i){
+                    items.push({
+                        element: data[i],
+                        datasetIndex,
+                        index: i
+                    });
+                }
+            }
+            return items;
+        },
+ point (chart, e, options, useFinalPosition) {
+            const position = getRelativePosition(e, chart);
+            const axis = options.axis || 'xy';
+            const includeInvisible = options.includeInvisible || false;
+            return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);
+        },
+ nearest (chart, e, options, useFinalPosition) {
+            const position = getRelativePosition(e, chart);
+            const axis = options.axis || 'xy';
+            const includeInvisible = options.includeInvisible || false;
+            return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);
+        },
+ x (chart, e, options, useFinalPosition) {
+            const position = getRelativePosition(e, chart);
+            return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);
+        },
+ y (chart, e, options, useFinalPosition) {
+            const position = getRelativePosition(e, chart);
+            return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);
+        }
+    }
+};
+
+const STATIC_POSITIONS = [
+    'left',
+    'top',
+    'right',
+    'bottom'
+];
+function filterByPosition(array, position) {
+    return array.filter((v)=>v.pos === position);
+}
+function filterDynamicPositionByAxis(array, axis) {
+    return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);
+}
+function sortByWeight(array, reverse) {
+    return array.sort((a, b)=>{
+        const v0 = reverse ? b : a;
+        const v1 = reverse ? a : b;
+        return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;
+    });
+}
+function wrapBoxes(boxes) {
+    const layoutBoxes = [];
+    let i, ilen, box, pos, stack, stackWeight;
+    for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){
+        box = boxes[i];
+        ({ position: pos , options: { stack , stackWeight =1  }  } = box);
+        layoutBoxes.push({
+            index: i,
+            box,
+            pos,
+            horizontal: box.isHorizontal(),
+            weight: box.weight,
+            stack: stack && pos + stack,
+            stackWeight
+        });
+    }
+    return layoutBoxes;
+}
+function buildStacks(layouts) {
+    const stacks = {};
+    for (const wrap of layouts){
+        const { stack , pos , stackWeight  } = wrap;
+        if (!stack || !STATIC_POSITIONS.includes(pos)) {
+            continue;
+        }
+        const _stack = stacks[stack] || (stacks[stack] = {
+            count: 0,
+            placed: 0,
+            weight: 0,
+            size: 0
+        });
+        _stack.count++;
+        _stack.weight += stackWeight;
+    }
+    return stacks;
+}
+ function setLayoutDims(layouts, params) {
+    const stacks = buildStacks(layouts);
+    const { vBoxMaxWidth , hBoxMaxHeight  } = params;
+    let i, ilen, layout;
+    for(i = 0, ilen = layouts.length; i < ilen; ++i){
+        layout = layouts[i];
+        const { fullSize  } = layout.box;
+        const stack = stacks[layout.stack];
+        const factor = stack && layout.stackWeight / stack.weight;
+        if (layout.horizontal) {
+            layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;
+            layout.height = hBoxMaxHeight;
+        } else {
+            layout.width = vBoxMaxWidth;
+            layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;
+        }
+    }
+    return stacks;
+}
+function buildLayoutBoxes(boxes) {
+    const layoutBoxes = wrapBoxes(boxes);
+    const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);
+    const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);
+    const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));
+    const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);
+    const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));
+    const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');
+    const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');
+    return {
+        fullSize,
+        leftAndTop: left.concat(top),
+        rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),
+        chartArea: filterByPosition(layoutBoxes, 'chartArea'),
+        vertical: left.concat(right).concat(centerVertical),
+        horizontal: top.concat(bottom).concat(centerHorizontal)
+    };
+}
+function getCombinedMax(maxPadding, chartArea, a, b) {
+    return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);
+}
+function updateMaxPadding(maxPadding, boxPadding) {
+    maxPadding.top = Math.max(maxPadding.top, boxPadding.top);
+    maxPadding.left = Math.max(maxPadding.left, boxPadding.left);
+    maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);
+    maxPadding.right = Math.max(maxPadding.right, boxPadding.right);
+}
+function updateDims(chartArea, params, layout, stacks) {
+    const { pos , box  } = layout;
+    const maxPadding = chartArea.maxPadding;
+    if (!isObject(pos)) {
+        if (layout.size) {
+            chartArea[pos] -= layout.size;
+        }
+        const stack = stacks[layout.stack] || {
+            size: 0,
+            count: 1
+        };
+        stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);
+        layout.size = stack.size / stack.count;
+        chartArea[pos] += layout.size;
+    }
+    if (box.getPadding) {
+        updateMaxPadding(maxPadding, box.getPadding());
+    }
+    const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));
+    const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));
+    const widthChanged = newWidth !== chartArea.w;
+    const heightChanged = newHeight !== chartArea.h;
+    chartArea.w = newWidth;
+    chartArea.h = newHeight;
+    return layout.horizontal ? {
+        same: widthChanged,
+        other: heightChanged
+    } : {
+        same: heightChanged,
+        other: widthChanged
+    };
+}
+function handleMaxPadding(chartArea) {
+    const maxPadding = chartArea.maxPadding;
+    function updatePos(pos) {
+        const change = Math.max(maxPadding[pos] - chartArea[pos], 0);
+        chartArea[pos] += change;
+        return change;
+    }
+    chartArea.y += updatePos('top');
+    chartArea.x += updatePos('left');
+    updatePos('right');
+    updatePos('bottom');
+}
+function getMargins(horizontal, chartArea) {
+    const maxPadding = chartArea.maxPadding;
+    function marginForPositions(positions) {
+        const margin = {
+            left: 0,
+            top: 0,
+            right: 0,
+            bottom: 0
+        };
+        positions.forEach((pos)=>{
+            margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);
+        });
+        return margin;
+    }
+    return horizontal ? marginForPositions([
+        'left',
+        'right'
+    ]) : marginForPositions([
+        'top',
+        'bottom'
+    ]);
+}
+function fitBoxes(boxes, chartArea, params, stacks) {
+    const refitBoxes = [];
+    let i, ilen, layout, box, refit, changed;
+    for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){
+        layout = boxes[i];
+        box = layout.box;
+        box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));
+        const { same , other  } = updateDims(chartArea, params, layout, stacks);
+        refit |= same && refitBoxes.length;
+        changed = changed || other;
+        if (!box.fullSize) {
+            refitBoxes.push(layout);
+        }
+    }
+    return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;
+}
+function setBoxDims(box, left, top, width, height) {
+    box.top = top;
+    box.left = left;
+    box.right = left + width;
+    box.bottom = top + height;
+    box.width = width;
+    box.height = height;
+}
+function placeBoxes(boxes, chartArea, params, stacks) {
+    const userPadding = params.padding;
+    let { x , y  } = chartArea;
+    for (const layout of boxes){
+        const box = layout.box;
+        const stack = stacks[layout.stack] || {
+            count: 1,
+            placed: 0,
+            weight: 1
+        };
+        const weight = layout.stackWeight / stack.weight || 1;
+        if (layout.horizontal) {
+            const width = chartArea.w * weight;
+            const height = stack.size || box.height;
+            if (defined(stack.start)) {
+                y = stack.start;
+            }
+            if (box.fullSize) {
+                setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);
+            } else {
+                setBoxDims(box, chartArea.left + stack.placed, y, width, height);
+            }
+            stack.start = y;
+            stack.placed += width;
+            y = box.bottom;
+        } else {
+            const height = chartArea.h * weight;
+            const width = stack.size || box.width;
+            if (defined(stack.start)) {
+                x = stack.start;
+            }
+            if (box.fullSize) {
+                setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);
+            } else {
+                setBoxDims(box, x, chartArea.top + stack.placed, width, height);
+            }
+            stack.start = x;
+            stack.placed += height;
+            x = box.right;
+        }
+    }
+    chartArea.x = x;
+    chartArea.y = y;
+}
+var layouts = {
+ addBox (chart, item) {
+        if (!chart.boxes) {
+            chart.boxes = [];
+        }
+        item.fullSize = item.fullSize || false;
+        item.position = item.position || 'top';
+        item.weight = item.weight || 0;
+        item._layers = item._layers || function() {
+            return [
+                {
+                    z: 0,
+                    draw (chartArea) {
+                        item.draw(chartArea);
+                    }
+                }
+            ];
+        };
+        chart.boxes.push(item);
+    },
+ removeBox (chart, layoutItem) {
+        const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;
+        if (index !== -1) {
+            chart.boxes.splice(index, 1);
+        }
+    },
+ configure (chart, item, options) {
+        item.fullSize = options.fullSize;
+        item.position = options.position;
+        item.weight = options.weight;
+    },
+ update (chart, width, height, minPadding) {
+        if (!chart) {
+            return;
+        }
+        const padding = toPadding(chart.options.layout.padding);
+        const availableWidth = Math.max(width - padding.width, 0);
+        const availableHeight = Math.max(height - padding.height, 0);
+        const boxes = buildLayoutBoxes(chart.boxes);
+        const verticalBoxes = boxes.vertical;
+        const horizontalBoxes = boxes.horizontal;
+        each(chart.boxes, (box)=>{
+            if (typeof box.beforeLayout === 'function') {
+                box.beforeLayout();
+            }
+        });
+        const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;
+        const params = Object.freeze({
+            outerWidth: width,
+            outerHeight: height,
+            padding,
+            availableWidth,
+            availableHeight,
+            vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,
+            hBoxMaxHeight: availableHeight / 2
+        });
+        const maxPadding = Object.assign({}, padding);
+        updateMaxPadding(maxPadding, toPadding(minPadding));
+        const chartArea = Object.assign({
+            maxPadding,
+            w: availableWidth,
+            h: availableHeight,
+            x: padding.left,
+            y: padding.top
+        }, padding);
+        const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
+        fitBoxes(boxes.fullSize, chartArea, params, stacks);
+        fitBoxes(verticalBoxes, chartArea, params, stacks);
+        if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {
+            fitBoxes(verticalBoxes, chartArea, params, stacks);
+        }
+        handleMaxPadding(chartArea);
+        placeBoxes(boxes.leftAndTop, chartArea, params, stacks);
+        chartArea.x += chartArea.w;
+        chartArea.y += chartArea.h;
+        placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);
+        chart.chartArea = {
+            left: chartArea.left,
+            top: chartArea.top,
+            right: chartArea.left + chartArea.w,
+            bottom: chartArea.top + chartArea.h,
+            height: chartArea.h,
+            width: chartArea.w
+        };
+        each(boxes.chartArea, (layout)=>{
+            const box = layout.box;
+            Object.assign(box, chart.chartArea);
+            box.update(chartArea.w, chartArea.h, {
+                left: 0,
+                top: 0,
+                right: 0,
+                bottom: 0
+            });
+        });
+    }
+};
+
+class BasePlatform {
+ acquireContext(canvas, aspectRatio) {}
+ releaseContext(context) {
+        return false;
+    }
+ addEventListener(chart, type, listener) {}
+ removeEventListener(chart, type, listener) {}
+ getDevicePixelRatio() {
+        return 1;
+    }
+ getMaximumSize(element, width, height, aspectRatio) {
+        width = Math.max(0, width || element.width);
+        height = height || element.height;
+        return {
+            width,
+            height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)
+        };
+    }
+ isAttached(canvas) {
+        return true;
+    }
+ updateConfig(config) {
+    }
+}
+
+class BasicPlatform extends BasePlatform {
+    acquireContext(item) {
+        return item && item.getContext && item.getContext('2d') || null;
+    }
+    updateConfig(config) {
+        config.options.animation = false;
+    }
+}
+
+const EXPANDO_KEY = '$chartjs';
+ const EVENT_TYPES = {
+    touchstart: 'mousedown',
+    touchmove: 'mousemove',
+    touchend: 'mouseup',
+    pointerenter: 'mouseenter',
+    pointerdown: 'mousedown',
+    pointermove: 'mousemove',
+    pointerup: 'mouseup',
+    pointerleave: 'mouseout',
+    pointerout: 'mouseout'
+};
+const isNullOrEmpty = (value)=>value === null || value === '';
+ function initCanvas(canvas, aspectRatio) {
+    const style = canvas.style;
+    const renderHeight = canvas.getAttribute('height');
+    const renderWidth = canvas.getAttribute('width');
+    canvas[EXPANDO_KEY] = {
+        initial: {
+            height: renderHeight,
+            width: renderWidth,
+            style: {
+                display: style.display,
+                height: style.height,
+                width: style.width
+            }
+        }
+    };
+    style.display = style.display || 'block';
+    style.boxSizing = style.boxSizing || 'border-box';
+    if (isNullOrEmpty(renderWidth)) {
+        const displayWidth = readUsedSize(canvas, 'width');
+        if (displayWidth !== undefined) {
+            canvas.width = displayWidth;
+        }
+    }
+    if (isNullOrEmpty(renderHeight)) {
+        if (canvas.style.height === '') {
+            canvas.height = canvas.width / (aspectRatio || 2);
+        } else {
+            const displayHeight = readUsedSize(canvas, 'height');
+            if (displayHeight !== undefined) {
+                canvas.height = displayHeight;
+            }
+        }
+    }
+    return canvas;
+}
+const eventListenerOptions = supportsEventListenerOptions ? {
+    passive: true
+} : false;
+function addListener(node, type, listener) {
+    if (node) {
+        node.addEventListener(type, listener, eventListenerOptions);
+    }
+}
+function removeListener(chart, type, listener) {
+    if (chart && chart.canvas) {
+        chart.canvas.removeEventListener(type, listener, eventListenerOptions);
+    }
+}
+function fromNativeEvent(event, chart) {
+    const type = EVENT_TYPES[event.type] || event.type;
+    const { x , y  } = getRelativePosition(event, chart);
+    return {
+        type,
+        chart,
+        native: event,
+        x: x !== undefined ? x : null,
+        y: y !== undefined ? y : null
+    };
+}
+function nodeListContains(nodeList, canvas) {
+    for (const node of nodeList){
+        if (node === canvas || node.contains(canvas)) {
+            return true;
+        }
+    }
+}
+function createAttachObserver(chart, type, listener) {
+    const canvas = chart.canvas;
+    const observer = new MutationObserver((entries)=>{
+        let trigger = false;
+        for (const entry of entries){
+            trigger = trigger || nodeListContains(entry.addedNodes, canvas);
+            trigger = trigger && !nodeListContains(entry.removedNodes, canvas);
+        }
+        if (trigger) {
+            listener();
+        }
+    });
+    observer.observe(document, {
+        childList: true,
+        subtree: true
+    });
+    return observer;
+}
+function createDetachObserver(chart, type, listener) {
+    const canvas = chart.canvas;
+    const observer = new MutationObserver((entries)=>{
+        let trigger = false;
+        for (const entry of entries){
+            trigger = trigger || nodeListContains(entry.removedNodes, canvas);
+            trigger = trigger && !nodeListContains(entry.addedNodes, canvas);
+        }
+        if (trigger) {
+            listener();
+        }
+    });
+    observer.observe(document, {
+        childList: true,
+        subtree: true
+    });
+    return observer;
+}
+const drpListeningCharts = new Map();
+let oldDevicePixelRatio = 0;
+function onWindowResize() {
+    const dpr = window.devicePixelRatio;
+    if (dpr === oldDevicePixelRatio) {
+        return;
+    }
+    oldDevicePixelRatio = dpr;
+    drpListeningCharts.forEach((resize, chart)=>{
+        if (chart.currentDevicePixelRatio !== dpr) {
+            resize();
+        }
+    });
+}
+function listenDevicePixelRatioChanges(chart, resize) {
+    if (!drpListeningCharts.size) {
+        window.addEventListener('resize', onWindowResize);
+    }
+    drpListeningCharts.set(chart, resize);
+}
+function unlistenDevicePixelRatioChanges(chart) {
+    drpListeningCharts.delete(chart);
+    if (!drpListeningCharts.size) {
+        window.removeEventListener('resize', onWindowResize);
+    }
+}
+function createResizeObserver(chart, type, listener) {
+    const canvas = chart.canvas;
+    const container = canvas && _getParentNode(canvas);
+    if (!container) {
+        return;
+    }
+    const resize = throttled((width, height)=>{
+        const w = container.clientWidth;
+        listener(width, height);
+        if (w < container.clientWidth) {
+            listener();
+        }
+    }, window);
+    const observer = new ResizeObserver((entries)=>{
+        const entry = entries[0];
+        const width = entry.contentRect.width;
+        const height = entry.contentRect.height;
+        if (width === 0 && height === 0) {
+            return;
+        }
+        resize(width, height);
+    });
+    observer.observe(container);
+    listenDevicePixelRatioChanges(chart, resize);
+    return observer;
+}
+function releaseObserver(chart, type, observer) {
+    if (observer) {
+        observer.disconnect();
+    }
+    if (type === 'resize') {
+        unlistenDevicePixelRatioChanges(chart);
+    }
+}
+function createProxyAndListen(chart, type, listener) {
+    const canvas = chart.canvas;
+    const proxy = throttled((event)=>{
+        if (chart.ctx !== null) {
+            listener(fromNativeEvent(event, chart));
+        }
+    }, chart);
+    addListener(canvas, type, proxy);
+    return proxy;
+}
+ class DomPlatform extends BasePlatform {
+ acquireContext(canvas, aspectRatio) {
+        const context = canvas && canvas.getContext && canvas.getContext('2d');
+        if (context && context.canvas === canvas) {
+            initCanvas(canvas, aspectRatio);
+            return context;
+        }
+        return null;
+    }
+ releaseContext(context) {
+        const canvas = context.canvas;
+        if (!canvas[EXPANDO_KEY]) {
+            return false;
+        }
+        const initial = canvas[EXPANDO_KEY].initial;
+        [
+            'height',
+            'width'
+        ].forEach((prop)=>{
+            const value = initial[prop];
+            if (isNullOrUndef(value)) {
+                canvas.removeAttribute(prop);
+            } else {
+                canvas.setAttribute(prop, value);
+            }
+        });
+        const style = initial.style || {};
+        Object.keys(style).forEach((key)=>{
+            canvas.style[key] = style[key];
+        });
+        canvas.width = canvas.width;
+        delete canvas[EXPANDO_KEY];
+        return true;
+    }
+ addEventListener(chart, type, listener) {
+        this.removeEventListener(chart, type);
+        const proxies = chart.$proxies || (chart.$proxies = {});
+        const handlers = {
+            attach: createAttachObserver,
+            detach: createDetachObserver,
+            resize: createResizeObserver
+        };
+        const handler = handlers[type] || createProxyAndListen;
+        proxies[type] = handler(chart, type, listener);
+    }
+ removeEventListener(chart, type) {
+        const proxies = chart.$proxies || (chart.$proxies = {});
+        const proxy = proxies[type];
+        if (!proxy) {
+            return;
+        }
+        const handlers = {
+            attach: releaseObserver,
+            detach: releaseObserver,
+            resize: releaseObserver
+        };
+        const handler = handlers[type] || removeListener;
+        handler(chart, type, proxy);
+        proxies[type] = undefined;
+    }
+    getDevicePixelRatio() {
+        return window.devicePixelRatio;
+    }
+ getMaximumSize(canvas, width, height, aspectRatio) {
+        return getMaximumSize(canvas, width, height, aspectRatio);
+    }
+ isAttached(canvas) {
+        const container = canvas && _getParentNode(canvas);
+        return !!(container && container.isConnected);
+    }
+}
+
+function _detectPlatform(canvas) {
+    if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {
+        return BasicPlatform;
+    }
+    return DomPlatform;
+}
+
+class Element {
+    static defaults = {};
+    static defaultRoutes = undefined;
+    x;
+    y;
+    active = false;
+    options;
+    $animations;
+    tooltipPosition(useFinalPosition) {
+        const { x , y  } = this.getProps([
+            'x',
+            'y'
+        ], useFinalPosition);
+        return {
+            x,
+            y
+        };
+    }
+    hasValue() {
+        return isNumber(this.x) && isNumber(this.y);
+    }
+    getProps(props, final) {
+        const anims = this.$animations;
+        if (!final || !anims) {
+            // let's not create an object, if not needed
+            return this;
+        }
+        const ret = {};
+        props.forEach((prop)=>{
+            ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];
+        });
+        return ret;
+    }
+}
+
+function autoSkip(scale, ticks) {
+    const tickOpts = scale.options.ticks;
+    const determinedMaxTicks = determineMaxTicks(scale);
+    const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);
+    const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];
+    const numMajorIndices = majorIndices.length;
+    const first = majorIndices[0];
+    const last = majorIndices[numMajorIndices - 1];
+    const newTicks = [];
+    if (numMajorIndices > ticksLimit) {
+        skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);
+        return newTicks;
+    }
+    const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);
+    if (numMajorIndices > 0) {
+        let i, ilen;
+        const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;
+        skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);
+        for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){
+            skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);
+        }
+        skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);
+        return newTicks;
+    }
+    skip(ticks, newTicks, spacing);
+    return newTicks;
+}
+function determineMaxTicks(scale) {
+    const offset = scale.options.offset;
+    const tickLength = scale._tickSize();
+    const maxScale = scale._length / tickLength + (offset ? 0 : 1);
+    const maxChart = scale._maxLength / tickLength;
+    return Math.floor(Math.min(maxScale, maxChart));
+}
+ function calculateSpacing(majorIndices, ticks, ticksLimit) {
+    const evenMajorSpacing = getEvenSpacing(majorIndices);
+    const spacing = ticks.length / ticksLimit;
+    if (!evenMajorSpacing) {
+        return Math.max(spacing, 1);
+    }
+    const factors = _factorize(evenMajorSpacing);
+    for(let i = 0, ilen = factors.length - 1; i < ilen; i++){
+        const factor = factors[i];
+        if (factor > spacing) {
+            return factor;
+        }
+    }
+    return Math.max(spacing, 1);
+}
+ function getMajorIndices(ticks) {
+    const result = [];
+    let i, ilen;
+    for(i = 0, ilen = ticks.length; i < ilen; i++){
+        if (ticks[i].major) {
+            result.push(i);
+        }
+    }
+    return result;
+}
+ function skipMajors(ticks, newTicks, majorIndices, spacing) {
+    let count = 0;
+    let next = majorIndices[0];
+    let i;
+    spacing = Math.ceil(spacing);
+    for(i = 0; i < ticks.length; i++){
+        if (i === next) {
+            newTicks.push(ticks[i]);
+            count++;
+            next = majorIndices[count * spacing];
+        }
+    }
+}
+ function skip(ticks, newTicks, spacing, majorStart, majorEnd) {
+    const start = valueOrDefault(majorStart, 0);
+    const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);
+    let count = 0;
+    let length, i, next;
+    spacing = Math.ceil(spacing);
+    if (majorEnd) {
+        length = majorEnd - majorStart;
+        spacing = length / Math.floor(length / spacing);
+    }
+    next = start;
+    while(next < 0){
+        count++;
+        next = Math.round(start + count * spacing);
+    }
+    for(i = Math.max(start, 0); i < end; i++){
+        if (i === next) {
+            newTicks.push(ticks[i]);
+            count++;
+            next = Math.round(start + count * spacing);
+        }
+    }
+}
+ function getEvenSpacing(arr) {
+    const len = arr.length;
+    let i, diff;
+    if (len < 2) {
+        return false;
+    }
+    for(diff = arr[0], i = 1; i < len; ++i){
+        if (arr[i] - arr[i - 1] !== diff) {
+            return false;
+        }
+    }
+    return diff;
+}
+
+const reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;
+const offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;
+const getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);
+ function sample(arr, numItems) {
+    const result = [];
+    const increment = arr.length / numItems;
+    const len = arr.length;
+    let i = 0;
+    for(; i < len; i += increment){
+        result.push(arr[Math.floor(i)]);
+    }
+    return result;
+}
+ function getPixelForGridLine(scale, index, offsetGridLines) {
+    const length = scale.ticks.length;
+    const validIndex = Math.min(index, length - 1);
+    const start = scale._startPixel;
+    const end = scale._endPixel;
+    const epsilon = 1e-6;
+    let lineValue = scale.getPixelForTick(validIndex);
+    let offset;
+    if (offsetGridLines) {
+        if (length === 1) {
+            offset = Math.max(lineValue - start, end - lineValue);
+        } else if (index === 0) {
+            offset = (scale.getPixelForTick(1) - lineValue) / 2;
+        } else {
+            offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;
+        }
+        lineValue += validIndex < index ? offset : -offset;
+        if (lineValue < start - epsilon || lineValue > end + epsilon) {
+            return;
+        }
+    }
+    return lineValue;
+}
+ function garbageCollect(caches, length) {
+    each(caches, (cache)=>{
+        const gc = cache.gc;
+        const gcLen = gc.length / 2;
+        let i;
+        if (gcLen > length) {
+            for(i = 0; i < gcLen; ++i){
+                delete cache.data[gc[i]];
+            }
+            gc.splice(0, gcLen);
+        }
+    });
+}
+ function getTickMarkLength(options) {
+    return options.drawTicks ? options.tickLength : 0;
+}
+ function getTitleHeight(options, fallback) {
+    if (!options.display) {
+        return 0;
+    }
+    const font = toFont(options.font, fallback);
+    const padding = toPadding(options.padding);
+    const lines = isArray(options.text) ? options.text.length : 1;
+    return lines * font.lineHeight + padding.height;
+}
+function createScaleContext(parent, scale) {
+    return createContext(parent, {
+        scale,
+        type: 'scale'
+    });
+}
+function createTickContext(parent, index, tick) {
+    return createContext(parent, {
+        tick,
+        index,
+        type: 'tick'
+    });
+}
+function titleAlign(align, position, reverse) {
+     let ret = _toLeftRightCenter(align);
+    if (reverse && position !== 'right' || !reverse && position === 'right') {
+        ret = reverseAlign(ret);
+    }
+    return ret;
+}
+function titleArgs(scale, offset, position, align) {
+    const { top , left , bottom , right , chart  } = scale;
+    const { chartArea , scales  } = chart;
+    let rotation = 0;
+    let maxWidth, titleX, titleY;
+    const height = bottom - top;
+    const width = right - left;
+    if (scale.isHorizontal()) {
+        titleX = _alignStartEnd(align, left, right);
+        if (isObject(position)) {
+            const positionAxisID = Object.keys(position)[0];
+            const value = position[positionAxisID];
+            titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;
+        } else if (position === 'center') {
+            titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;
+        } else {
+            titleY = offsetFromEdge(scale, position, offset);
+        }
+        maxWidth = right - left;
+    } else {
+        if (isObject(position)) {
+            const positionAxisID = Object.keys(position)[0];
+            const value = position[positionAxisID];
+            titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;
+        } else if (position === 'center') {
+            titleX = (chartArea.left + chartArea.right) / 2 - width + offset;
+        } else {
+            titleX = offsetFromEdge(scale, position, offset);
+        }
+        titleY = _alignStartEnd(align, bottom, top);
+        rotation = position === 'left' ? -HALF_PI : HALF_PI;
+    }
+    return {
+        titleX,
+        titleY,
+        maxWidth,
+        rotation
+    };
+}
+class Scale extends Element {
+    constructor(cfg){
+        super();
+         this.id = cfg.id;
+         this.type = cfg.type;
+         this.options = undefined;
+         this.ctx = cfg.ctx;
+         this.chart = cfg.chart;
+         this.top = undefined;
+         this.bottom = undefined;
+         this.left = undefined;
+         this.right = undefined;
+         this.width = undefined;
+         this.height = undefined;
+        this._margins = {
+            left: 0,
+            right: 0,
+            top: 0,
+            bottom: 0
+        };
+         this.maxWidth = undefined;
+         this.maxHeight = undefined;
+         this.paddingTop = undefined;
+         this.paddingBottom = undefined;
+         this.paddingLeft = undefined;
+         this.paddingRight = undefined;
+         this.axis = undefined;
+         this.labelRotation = undefined;
+        this.min = undefined;
+        this.max = undefined;
+        this._range = undefined;
+         this.ticks = [];
+         this._gridLineItems = null;
+         this._labelItems = null;
+         this._labelSizes = null;
+        this._length = 0;
+        this._maxLength = 0;
+        this._longestTextCache = {};
+         this._startPixel = undefined;
+         this._endPixel = undefined;
+        this._reversePixels = false;
+        this._userMax = undefined;
+        this._userMin = undefined;
+        this._suggestedMax = undefined;
+        this._suggestedMin = undefined;
+        this._ticksLength = 0;
+        this._borderValue = 0;
+        this._cache = {};
+        this._dataLimitsCached = false;
+        this.$context = undefined;
+    }
+ init(options) {
+        this.options = options.setContext(this.getContext());
+        this.axis = options.axis;
+        this._userMin = this.parse(options.min);
+        this._userMax = this.parse(options.max);
+        this._suggestedMin = this.parse(options.suggestedMin);
+        this._suggestedMax = this.parse(options.suggestedMax);
+    }
+ parse(raw, index) {
+        return raw;
+    }
+ getUserBounds() {
+        let { _userMin , _userMax , _suggestedMin , _suggestedMax  } = this;
+        _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);
+        _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);
+        _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);
+        _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);
+        return {
+            min: finiteOrDefault(_userMin, _suggestedMin),
+            max: finiteOrDefault(_userMax, _suggestedMax),
+            minDefined: isNumberFinite(_userMin),
+            maxDefined: isNumberFinite(_userMax)
+        };
+    }
+ getMinMax(canStack) {
+        let { min , max , minDefined , maxDefined  } = this.getUserBounds();
+        let range;
+        if (minDefined && maxDefined) {
+            return {
+                min,
+                max
+            };
+        }
+        const metas = this.getMatchingVisibleMetas();
+        for(let i = 0, ilen = metas.length; i < ilen; ++i){
+            range = metas[i].controller.getMinMax(this, canStack);
+            if (!minDefined) {
+                min = Math.min(min, range.min);
+            }
+            if (!maxDefined) {
+                max = Math.max(max, range.max);
+            }
+        }
+        min = maxDefined && min > max ? max : min;
+        max = minDefined && min > max ? min : max;
+        return {
+            min: finiteOrDefault(min, finiteOrDefault(max, min)),
+            max: finiteOrDefault(max, finiteOrDefault(min, max))
+        };
+    }
+ getPadding() {
+        return {
+            left: this.paddingLeft || 0,
+            top: this.paddingTop || 0,
+            right: this.paddingRight || 0,
+            bottom: this.paddingBottom || 0
+        };
+    }
+ getTicks() {
+        return this.ticks;
+    }
+ getLabels() {
+        const data = this.chart.data;
+        return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];
+    }
+ getLabelItems(chartArea = this.chart.chartArea) {
+        const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));
+        return items;
+    }
+    beforeLayout() {
+        this._cache = {};
+        this._dataLimitsCached = false;
+    }
+    beforeUpdate() {
+        callback(this.options.beforeUpdate, [
+            this
+        ]);
+    }
+ update(maxWidth, maxHeight, margins) {
+        const { beginAtZero , grace , ticks: tickOpts  } = this.options;
+        const sampleSize = tickOpts.sampleSize;
+        this.beforeUpdate();
+        this.maxWidth = maxWidth;
+        this.maxHeight = maxHeight;
+        this._margins = margins = Object.assign({
+            left: 0,
+            right: 0,
+            top: 0,
+            bottom: 0
+        }, margins);
+        this.ticks = null;
+        this._labelSizes = null;
+        this._gridLineItems = null;
+        this._labelItems = null;
+        this.beforeSetDimensions();
+        this.setDimensions();
+        this.afterSetDimensions();
+        this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;
+        if (!this._dataLimitsCached) {
+            this.beforeDataLimits();
+            this.determineDataLimits();
+            this.afterDataLimits();
+            this._range = _addGrace(this, grace, beginAtZero);
+            this._dataLimitsCached = true;
+        }
+        this.beforeBuildTicks();
+        this.ticks = this.buildTicks() || [];
+        this.afterBuildTicks();
+        const samplingEnabled = sampleSize < this.ticks.length;
+        this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);
+        this.configure();
+        this.beforeCalculateLabelRotation();
+        this.calculateLabelRotation();
+        this.afterCalculateLabelRotation();
+        if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {
+            this.ticks = autoSkip(this, this.ticks);
+            this._labelSizes = null;
+            this.afterAutoSkip();
+        }
+        if (samplingEnabled) {
+            this._convertTicksToLabels(this.ticks);
+        }
+        this.beforeFit();
+        this.fit();
+        this.afterFit();
+        this.afterUpdate();
+    }
+ configure() {
+        let reversePixels = this.options.reverse;
+        let startPixel, endPixel;
+        if (this.isHorizontal()) {
+            startPixel = this.left;
+            endPixel = this.right;
+        } else {
+            startPixel = this.top;
+            endPixel = this.bottom;
+            reversePixels = !reversePixels;
+        }
+        this._startPixel = startPixel;
+        this._endPixel = endPixel;
+        this._reversePixels = reversePixels;
+        this._length = endPixel - startPixel;
+        this._alignToPixels = this.options.alignToPixels;
+    }
+    afterUpdate() {
+        callback(this.options.afterUpdate, [
+            this
+        ]);
+    }
+    beforeSetDimensions() {
+        callback(this.options.beforeSetDimensions, [
+            this
+        ]);
+    }
+    setDimensions() {
+        if (this.isHorizontal()) {
+            this.width = this.maxWidth;
+            this.left = 0;
+            this.right = this.width;
+        } else {
+            this.height = this.maxHeight;
+            this.top = 0;
+            this.bottom = this.height;
+        }
+        this.paddingLeft = 0;
+        this.paddingTop = 0;
+        this.paddingRight = 0;
+        this.paddingBottom = 0;
+    }
+    afterSetDimensions() {
+        callback(this.options.afterSetDimensions, [
+            this
+        ]);
+    }
+    _callHooks(name) {
+        this.chart.notifyPlugins(name, this.getContext());
+        callback(this.options[name], [
+            this
+        ]);
+    }
+    beforeDataLimits() {
+        this._callHooks('beforeDataLimits');
+    }
+    determineDataLimits() {}
+    afterDataLimits() {
+        this._callHooks('afterDataLimits');
+    }
+    beforeBuildTicks() {
+        this._callHooks('beforeBuildTicks');
+    }
+ buildTicks() {
+        return [];
+    }
+    afterBuildTicks() {
+        this._callHooks('afterBuildTicks');
+    }
+    beforeTickToLabelConversion() {
+        callback(this.options.beforeTickToLabelConversion, [
+            this
+        ]);
+    }
+ generateTickLabels(ticks) {
+        const tickOpts = this.options.ticks;
+        let i, ilen, tick;
+        for(i = 0, ilen = ticks.length; i < ilen; i++){
+            tick = ticks[i];
+            tick.label = callback(tickOpts.callback, [
+                tick.value,
+                i,
+                ticks
+            ], this);
+        }
+    }
+    afterTickToLabelConversion() {
+        callback(this.options.afterTickToLabelConversion, [
+            this
+        ]);
+    }
+    beforeCalculateLabelRotation() {
+        callback(this.options.beforeCalculateLabelRotation, [
+            this
+        ]);
+    }
+    calculateLabelRotation() {
+        const options = this.options;
+        const tickOpts = options.ticks;
+        const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);
+        const minRotation = tickOpts.minRotation || 0;
+        const maxRotation = tickOpts.maxRotation;
+        let labelRotation = minRotation;
+        let tickWidth, maxHeight, maxLabelDiagonal;
+        if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {
+            this.labelRotation = minRotation;
+            return;
+        }
+        const labelSizes = this._getLabelSizes();
+        const maxLabelWidth = labelSizes.widest.width;
+        const maxLabelHeight = labelSizes.highest.height;
+        const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);
+        tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);
+        if (maxLabelWidth + 6 > tickWidth) {
+            tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));
+            maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);
+            maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);
+            labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));
+            labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));
+        }
+        this.labelRotation = labelRotation;
+    }
+    afterCalculateLabelRotation() {
+        callback(this.options.afterCalculateLabelRotation, [
+            this
+        ]);
+    }
+    afterAutoSkip() {}
+    beforeFit() {
+        callback(this.options.beforeFit, [
+            this
+        ]);
+    }
+    fit() {
+        const minSize = {
+            width: 0,
+            height: 0
+        };
+        const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts  }  } = this;
+        const display = this._isVisible();
+        const isHorizontal = this.isHorizontal();
+        if (display) {
+            const titleHeight = getTitleHeight(titleOpts, chart.options.font);
+            if (isHorizontal) {
+                minSize.width = this.maxWidth;
+                minSize.height = getTickMarkLength(gridOpts) + titleHeight;
+            } else {
+                minSize.height = this.maxHeight;
+                minSize.width = getTickMarkLength(gridOpts) + titleHeight;
+            }
+            if (tickOpts.display && this.ticks.length) {
+                const { first , last , widest , highest  } = this._getLabelSizes();
+                const tickPadding = tickOpts.padding * 2;
+                const angleRadians = toRadians(this.labelRotation);
+                const cos = Math.cos(angleRadians);
+                const sin = Math.sin(angleRadians);
+                if (isHorizontal) {
+                    const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;
+                    minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);
+                } else {
+                    const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;
+                    minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);
+                }
+                this._calculatePadding(first, last, sin, cos);
+            }
+        }
+        this._handleMargins();
+        if (isHorizontal) {
+            this.width = this._length = chart.width - this._margins.left - this._margins.right;
+            this.height = minSize.height;
+        } else {
+            this.width = minSize.width;
+            this.height = this._length = chart.height - this._margins.top - this._margins.bottom;
+        }
+    }
+    _calculatePadding(first, last, sin, cos) {
+        const { ticks: { align , padding  } , position  } = this.options;
+        const isRotated = this.labelRotation !== 0;
+        const labelsBelowTicks = position !== 'top' && this.axis === 'x';
+        if (this.isHorizontal()) {
+            const offsetLeft = this.getPixelForTick(0) - this.left;
+            const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);
+            let paddingLeft = 0;
+            let paddingRight = 0;
+            if (isRotated) {
+                if (labelsBelowTicks) {
+                    paddingLeft = cos * first.width;
+                    paddingRight = sin * last.height;
+                } else {
+                    paddingLeft = sin * first.height;
+                    paddingRight = cos * last.width;
+                }
+            } else if (align === 'start') {
+                paddingRight = last.width;
+            } else if (align === 'end') {
+                paddingLeft = first.width;
+            } else if (align !== 'inner') {
+                paddingLeft = first.width / 2;
+                paddingRight = last.width / 2;
+            }
+            this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);
+            this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);
+        } else {
+            let paddingTop = last.height / 2;
+            let paddingBottom = first.height / 2;
+            if (align === 'start') {
+                paddingTop = 0;
+                paddingBottom = first.height;
+            } else if (align === 'end') {
+                paddingTop = last.height;
+                paddingBottom = 0;
+            }
+            this.paddingTop = paddingTop + padding;
+            this.paddingBottom = paddingBottom + padding;
+        }
+    }
+ _handleMargins() {
+        if (this._margins) {
+            this._margins.left = Math.max(this.paddingLeft, this._margins.left);
+            this._margins.top = Math.max(this.paddingTop, this._margins.top);
+            this._margins.right = Math.max(this.paddingRight, this._margins.right);
+            this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);
+        }
+    }
+    afterFit() {
+        callback(this.options.afterFit, [
+            this
+        ]);
+    }
+ isHorizontal() {
+        const { axis , position  } = this.options;
+        return position === 'top' || position === 'bottom' || axis === 'x';
+    }
+ isFullSize() {
+        return this.options.fullSize;
+    }
+ _convertTicksToLabels(ticks) {
+        this.beforeTickToLabelConversion();
+        this.generateTickLabels(ticks);
+        let i, ilen;
+        for(i = 0, ilen = ticks.length; i < ilen; i++){
+            if (isNullOrUndef(ticks[i].label)) {
+                ticks.splice(i, 1);
+                ilen--;
+                i--;
+            }
+        }
+        this.afterTickToLabelConversion();
+    }
+ _getLabelSizes() {
+        let labelSizes = this._labelSizes;
+        if (!labelSizes) {
+            const sampleSize = this.options.ticks.sampleSize;
+            let ticks = this.ticks;
+            if (sampleSize < ticks.length) {
+                ticks = sample(ticks, sampleSize);
+            }
+            this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);
+        }
+        return labelSizes;
+    }
+ _computeLabelSizes(ticks, length, maxTicksLimit) {
+        const { ctx , _longestTextCache: caches  } = this;
+        const widths = [];
+        const heights = [];
+        const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));
+        let widestLabelSize = 0;
+        let highestLabelSize = 0;
+        let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;
+        for(i = 0; i < length; i += increment){
+            label = ticks[i].label;
+            tickFont = this._resolveTickFontOptions(i);
+            ctx.font = fontString = tickFont.string;
+            cache = caches[fontString] = caches[fontString] || {
+                data: {},
+                gc: []
+            };
+            lineHeight = tickFont.lineHeight;
+            width = height = 0;
+            if (!isNullOrUndef(label) && !isArray(label)) {
+                width = _measureText(ctx, cache.data, cache.gc, width, label);
+                height = lineHeight;
+            } else if (isArray(label)) {
+                for(j = 0, jlen = label.length; j < jlen; ++j){
+                    nestedLabel =  label[j];
+                    if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {
+                        width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);
+                        height += lineHeight;
+                    }
+                }
+            }
+            widths.push(width);
+            heights.push(height);
+            widestLabelSize = Math.max(width, widestLabelSize);
+            highestLabelSize = Math.max(height, highestLabelSize);
+        }
+        garbageCollect(caches, length);
+        const widest = widths.indexOf(widestLabelSize);
+        const highest = heights.indexOf(highestLabelSize);
+        const valueAt = (idx)=>({
+                width: widths[idx] || 0,
+                height: heights[idx] || 0
+            });
+        return {
+            first: valueAt(0),
+            last: valueAt(length - 1),
+            widest: valueAt(widest),
+            highest: valueAt(highest),
+            widths,
+            heights
+        };
+    }
+ getLabelForValue(value) {
+        return value;
+    }
+ getPixelForValue(value, index) {
+        return NaN;
+    }
+ getValueForPixel(pixel) {}
+ getPixelForTick(index) {
+        const ticks = this.ticks;
+        if (index < 0 || index > ticks.length - 1) {
+            return null;
+        }
+        return this.getPixelForValue(ticks[index].value);
+    }
+ getPixelForDecimal(decimal) {
+        if (this._reversePixels) {
+            decimal = 1 - decimal;
+        }
+        const pixel = this._startPixel + decimal * this._length;
+        return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);
+    }
+ getDecimalForPixel(pixel) {
+        const decimal = (pixel - this._startPixel) / this._length;
+        return this._reversePixels ? 1 - decimal : decimal;
+    }
+ getBasePixel() {
+        return this.getPixelForValue(this.getBaseValue());
+    }
+ getBaseValue() {
+        const { min , max  } = this;
+        return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;
+    }
+ getContext(index) {
+        const ticks = this.ticks || [];
+        if (index >= 0 && index < ticks.length) {
+            const tick = ticks[index];
+            return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));
+        }
+        return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));
+    }
+ _tickSize() {
+        const optionTicks = this.options.ticks;
+        const rot = toRadians(this.labelRotation);
+        const cos = Math.abs(Math.cos(rot));
+        const sin = Math.abs(Math.sin(rot));
+        const labelSizes = this._getLabelSizes();
+        const padding = optionTicks.autoSkipPadding || 0;
+        const w = labelSizes ? labelSizes.widest.width + padding : 0;
+        const h = labelSizes ? labelSizes.highest.height + padding : 0;
+        return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;
+    }
+ _isVisible() {
+        const display = this.options.display;
+        if (display !== 'auto') {
+            return !!display;
+        }
+        return this.getMatchingVisibleMetas().length > 0;
+    }
+ _computeGridLineItems(chartArea) {
+        const axis = this.axis;
+        const chart = this.chart;
+        const options = this.options;
+        const { grid , position , border  } = options;
+        const offset = grid.offset;
+        const isHorizontal = this.isHorizontal();
+        const ticks = this.ticks;
+        const ticksLength = ticks.length + (offset ? 1 : 0);
+        const tl = getTickMarkLength(grid);
+        const items = [];
+        const borderOpts = border.setContext(this.getContext());
+        const axisWidth = borderOpts.display ? borderOpts.width : 0;
+        const axisHalfWidth = axisWidth / 2;
+        const alignBorderValue = function(pixel) {
+            return _alignPixel(chart, pixel, axisWidth);
+        };
+        let borderValue, i, lineValue, alignedLineValue;
+        let tx1, ty1, tx2, ty2, x1, y1, x2, y2;
+        if (position === 'top') {
+            borderValue = alignBorderValue(this.bottom);
+            ty1 = this.bottom - tl;
+            ty2 = borderValue - axisHalfWidth;
+            y1 = alignBorderValue(chartArea.top) + axisHalfWidth;
+            y2 = chartArea.bottom;
+        } else if (position === 'bottom') {
+            borderValue = alignBorderValue(this.top);
+            y1 = chartArea.top;
+            y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;
+            ty1 = borderValue + axisHalfWidth;
+            ty2 = this.top + tl;
+        } else if (position === 'left') {
+            borderValue = alignBorderValue(this.right);
+            tx1 = this.right - tl;
+            tx2 = borderValue - axisHalfWidth;
+            x1 = alignBorderValue(chartArea.left) + axisHalfWidth;
+            x2 = chartArea.right;
+        } else if (position === 'right') {
+            borderValue = alignBorderValue(this.left);
+            x1 = chartArea.left;
+            x2 = alignBorderValue(chartArea.right) - axisHalfWidth;
+            tx1 = borderValue + axisHalfWidth;
+            tx2 = this.left + tl;
+        } else if (axis === 'x') {
+            if (position === 'center') {
+                borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);
+            } else if (isObject(position)) {
+                const positionAxisID = Object.keys(position)[0];
+                const value = position[positionAxisID];
+                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
+            }
+            y1 = chartArea.top;
+            y2 = chartArea.bottom;
+            ty1 = borderValue + axisHalfWidth;
+            ty2 = ty1 + tl;
+        } else if (axis === 'y') {
+            if (position === 'center') {
+                borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);
+            } else if (isObject(position)) {
+                const positionAxisID = Object.keys(position)[0];
+                const value = position[positionAxisID];
+                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
+            }
+            tx1 = borderValue - axisHalfWidth;
+            tx2 = tx1 - tl;
+            x1 = chartArea.left;
+            x2 = chartArea.right;
+        }
+        const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);
+        const step = Math.max(1, Math.ceil(ticksLength / limit));
+        for(i = 0; i < ticksLength; i += step){
+            const context = this.getContext(i);
+            const optsAtIndex = grid.setContext(context);
+            const optsAtIndexBorder = border.setContext(context);
+            const lineWidth = optsAtIndex.lineWidth;
+            const lineColor = optsAtIndex.color;
+            const borderDash = optsAtIndexBorder.dash || [];
+            const borderDashOffset = optsAtIndexBorder.dashOffset;
+            const tickWidth = optsAtIndex.tickWidth;
+            const tickColor = optsAtIndex.tickColor;
+            const tickBorderDash = optsAtIndex.tickBorderDash || [];
+            const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;
+            lineValue = getPixelForGridLine(this, i, offset);
+            if (lineValue === undefined) {
+                continue;
+            }
+            alignedLineValue = _alignPixel(chart, lineValue, lineWidth);
+            if (isHorizontal) {
+                tx1 = tx2 = x1 = x2 = alignedLineValue;
+            } else {
+                ty1 = ty2 = y1 = y2 = alignedLineValue;
+            }
+            items.push({
+                tx1,
+                ty1,
+                tx2,
+                ty2,
+                x1,
+                y1,
+                x2,
+                y2,
+                width: lineWidth,
+                color: lineColor,
+                borderDash,
+                borderDashOffset,
+                tickWidth,
+                tickColor,
+                tickBorderDash,
+                tickBorderDashOffset
+            });
+        }
+        this._ticksLength = ticksLength;
+        this._borderValue = borderValue;
+        return items;
+    }
+ _computeLabelItems(chartArea) {
+        const axis = this.axis;
+        const options = this.options;
+        const { position , ticks: optionTicks  } = options;
+        const isHorizontal = this.isHorizontal();
+        const ticks = this.ticks;
+        const { align , crossAlign , padding , mirror  } = optionTicks;
+        const tl = getTickMarkLength(options.grid);
+        const tickAndPadding = tl + padding;
+        const hTickAndPadding = mirror ? -padding : tickAndPadding;
+        const rotation = -toRadians(this.labelRotation);
+        const items = [];
+        let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;
+        let textBaseline = 'middle';
+        if (position === 'top') {
+            y = this.bottom - hTickAndPadding;
+            textAlign = this._getXAxisLabelAlignment();
+        } else if (position === 'bottom') {
+            y = this.top + hTickAndPadding;
+            textAlign = this._getXAxisLabelAlignment();
+        } else if (position === 'left') {
+            const ret = this._getYAxisLabelAlignment(tl);
+            textAlign = ret.textAlign;
+            x = ret.x;
+        } else if (position === 'right') {
+            const ret = this._getYAxisLabelAlignment(tl);
+            textAlign = ret.textAlign;
+            x = ret.x;
+        } else if (axis === 'x') {
+            if (position === 'center') {
+                y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;
+            } else if (isObject(position)) {
+                const positionAxisID = Object.keys(position)[0];
+                const value = position[positionAxisID];
+                y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;
+            }
+            textAlign = this._getXAxisLabelAlignment();
+        } else if (axis === 'y') {
+            if (position === 'center') {
+                x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;
+            } else if (isObject(position)) {
+                const positionAxisID = Object.keys(position)[0];
+                const value = position[positionAxisID];
+                x = this.chart.scales[positionAxisID].getPixelForValue(value);
+            }
+            textAlign = this._getYAxisLabelAlignment(tl).textAlign;
+        }
+        if (axis === 'y') {
+            if (align === 'start') {
+                textBaseline = 'top';
+            } else if (align === 'end') {
+                textBaseline = 'bottom';
+            }
+        }
+        const labelSizes = this._getLabelSizes();
+        for(i = 0, ilen = ticks.length; i < ilen; ++i){
+            tick = ticks[i];
+            label = tick.label;
+            const optsAtIndex = optionTicks.setContext(this.getContext(i));
+            pixel = this.getPixelForTick(i) + optionTicks.labelOffset;
+            font = this._resolveTickFontOptions(i);
+            lineHeight = font.lineHeight;
+            lineCount = isArray(label) ? label.length : 1;
+            const halfCount = lineCount / 2;
+            const color = optsAtIndex.color;
+            const strokeColor = optsAtIndex.textStrokeColor;
+            const strokeWidth = optsAtIndex.textStrokeWidth;
+            let tickTextAlign = textAlign;
+            if (isHorizontal) {
+                x = pixel;
+                if (textAlign === 'inner') {
+                    if (i === ilen - 1) {
+                        tickTextAlign = !this.options.reverse ? 'right' : 'left';
+                    } else if (i === 0) {
+                        tickTextAlign = !this.options.reverse ? 'left' : 'right';
+                    } else {
+                        tickTextAlign = 'center';
+                    }
+                }
+                if (position === 'top') {
+                    if (crossAlign === 'near' || rotation !== 0) {
+                        textOffset = -lineCount * lineHeight + lineHeight / 2;
+                    } else if (crossAlign === 'center') {
+                        textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;
+                    } else {
+                        textOffset = -labelSizes.highest.height + lineHeight / 2;
+                    }
+                } else {
+                    if (crossAlign === 'near' || rotation !== 0) {
+                        textOffset = lineHeight / 2;
+                    } else if (crossAlign === 'center') {
+                        textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;
+                    } else {
+                        textOffset = labelSizes.highest.height - lineCount * lineHeight;
+                    }
+                }
+                if (mirror) {
+                    textOffset *= -1;
+                }
+                if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {
+                    x += lineHeight / 2 * Math.sin(rotation);
+                }
+            } else {
+                y = pixel;
+                textOffset = (1 - lineCount) * lineHeight / 2;
+            }
+            let backdrop;
+            if (optsAtIndex.showLabelBackdrop) {
+                const labelPadding = toPadding(optsAtIndex.backdropPadding);
+                const height = labelSizes.heights[i];
+                const width = labelSizes.widths[i];
+                let top = textOffset - labelPadding.top;
+                let left = 0 - labelPadding.left;
+                switch(textBaseline){
+                    case 'middle':
+                        top -= height / 2;
+                        break;
+                    case 'bottom':
+                        top -= height;
+                        break;
+                }
+                switch(textAlign){
+                    case 'center':
+                        left -= width / 2;
+                        break;
+                    case 'right':
+                        left -= width;
+                        break;
+                    case 'inner':
+                        if (i === ilen - 1) {
+                            left -= width;
+                        } else if (i > 0) {
+                            left -= width / 2;
+                        }
+                        break;
+                }
+                backdrop = {
+                    left,
+                    top,
+                    width: width + labelPadding.width,
+                    height: height + labelPadding.height,
+                    color: optsAtIndex.backdropColor
+                };
+            }
+            items.push({
+                label,
+                font,
+                textOffset,
+                options: {
+                    rotation,
+                    color,
+                    strokeColor,
+                    strokeWidth,
+                    textAlign: tickTextAlign,
+                    textBaseline,
+                    translation: [
+                        x,
+                        y
+                    ],
+                    backdrop
+                }
+            });
+        }
+        return items;
+    }
+    _getXAxisLabelAlignment() {
+        const { position , ticks  } = this.options;
+        const rotation = -toRadians(this.labelRotation);
+        if (rotation) {
+            return position === 'top' ? 'left' : 'right';
+        }
+        let align = 'center';
+        if (ticks.align === 'start') {
+            align = 'left';
+        } else if (ticks.align === 'end') {
+            align = 'right';
+        } else if (ticks.align === 'inner') {
+            align = 'inner';
+        }
+        return align;
+    }
+    _getYAxisLabelAlignment(tl) {
+        const { position , ticks: { crossAlign , mirror , padding  }  } = this.options;
+        const labelSizes = this._getLabelSizes();
+        const tickAndPadding = tl + padding;
+        const widest = labelSizes.widest.width;
+        let textAlign;
+        let x;
+        if (position === 'left') {
+            if (mirror) {
+                x = this.right + padding;
+                if (crossAlign === 'near') {
+                    textAlign = 'left';
+                } else if (crossAlign === 'center') {
+                    textAlign = 'center';
+                    x += widest / 2;
+                } else {
+                    textAlign = 'right';
+                    x += widest;
+                }
+            } else {
+                x = this.right - tickAndPadding;
+                if (crossAlign === 'near') {
+                    textAlign = 'right';
+                } else if (crossAlign === 'center') {
+                    textAlign = 'center';
+                    x -= widest / 2;
+                } else {
+                    textAlign = 'left';
+                    x = this.left;
+                }
+            }
+        } else if (position === 'right') {
+            if (mirror) {
+                x = this.left + padding;
+                if (crossAlign === 'near') {
+                    textAlign = 'right';
+                } else if (crossAlign === 'center') {
+                    textAlign = 'center';
+                    x -= widest / 2;
+                } else {
+                    textAlign = 'left';
+                    x -= widest;
+                }
+            } else {
+                x = this.left + tickAndPadding;
+                if (crossAlign === 'near') {
+                    textAlign = 'left';
+                } else if (crossAlign === 'center') {
+                    textAlign = 'center';
+                    x += widest / 2;
+                } else {
+                    textAlign = 'right';
+                    x = this.right;
+                }
+            }
+        } else {
+            textAlign = 'right';
+        }
+        return {
+            textAlign,
+            x
+        };
+    }
+ _computeLabelArea() {
+        if (this.options.ticks.mirror) {
+            return;
+        }
+        const chart = this.chart;
+        const position = this.options.position;
+        if (position === 'left' || position === 'right') {
+            return {
+                top: 0,
+                left: this.left,
+                bottom: chart.height,
+                right: this.right
+            };
+        }
+        if (position === 'top' || position === 'bottom') {
+            return {
+                top: this.top,
+                left: 0,
+                bottom: this.bottom,
+                right: chart.width
+            };
+        }
+    }
+ drawBackground() {
+        const { ctx , options: { backgroundColor  } , left , top , width , height  } = this;
+        if (backgroundColor) {
+            ctx.save();
+            ctx.fillStyle = backgroundColor;
+            ctx.fillRect(left, top, width, height);
+            ctx.restore();
+        }
+    }
+    getLineWidthForValue(value) {
+        const grid = this.options.grid;
+        if (!this._isVisible() || !grid.display) {
+            return 0;
+        }
+        const ticks = this.ticks;
+        const index = ticks.findIndex((t)=>t.value === value);
+        if (index >= 0) {
+            const opts = grid.setContext(this.getContext(index));
+            return opts.lineWidth;
+        }
+        return 0;
+    }
+ drawGrid(chartArea) {
+        const grid = this.options.grid;
+        const ctx = this.ctx;
+        const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));
+        let i, ilen;
+        const drawLine = (p1, p2, style)=>{
+            if (!style.width || !style.color) {
+                return;
+            }
+            ctx.save();
+            ctx.lineWidth = style.width;
+            ctx.strokeStyle = style.color;
+            ctx.setLineDash(style.borderDash || []);
+            ctx.lineDashOffset = style.borderDashOffset;
+            ctx.beginPath();
+            ctx.moveTo(p1.x, p1.y);
+            ctx.lineTo(p2.x, p2.y);
+            ctx.stroke();
+            ctx.restore();
+        };
+        if (grid.display) {
+            for(i = 0, ilen = items.length; i < ilen; ++i){
+                const item = items[i];
+                if (grid.drawOnChartArea) {
+                    drawLine({
+                        x: item.x1,
+                        y: item.y1
+                    }, {
+                        x: item.x2,
+                        y: item.y2
+                    }, item);
+                }
+                if (grid.drawTicks) {
+                    drawLine({
+                        x: item.tx1,
+                        y: item.ty1
+                    }, {
+                        x: item.tx2,
+                        y: item.ty2
+                    }, {
+                        color: item.tickColor,
+                        width: item.tickWidth,
+                        borderDash: item.tickBorderDash,
+                        borderDashOffset: item.tickBorderDashOffset
+                    });
+                }
+            }
+        }
+    }
+ drawBorder() {
+        const { chart , ctx , options: { border , grid  }  } = this;
+        const borderOpts = border.setContext(this.getContext());
+        const axisWidth = border.display ? borderOpts.width : 0;
+        if (!axisWidth) {
+            return;
+        }
+        const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;
+        const borderValue = this._borderValue;
+        let x1, x2, y1, y2;
+        if (this.isHorizontal()) {
+            x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;
+            x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;
+            y1 = y2 = borderValue;
+        } else {
+            y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;
+            y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;
+            x1 = x2 = borderValue;
+        }
+        ctx.save();
+        ctx.lineWidth = borderOpts.width;
+        ctx.strokeStyle = borderOpts.color;
+        ctx.beginPath();
+        ctx.moveTo(x1, y1);
+        ctx.lineTo(x2, y2);
+        ctx.stroke();
+        ctx.restore();
+    }
+ drawLabels(chartArea) {
+        const optionTicks = this.options.ticks;
+        if (!optionTicks.display) {
+            return;
+        }
+        const ctx = this.ctx;
+        const area = this._computeLabelArea();
+        if (area) {
+            clipArea(ctx, area);
+        }
+        const items = this.getLabelItems(chartArea);
+        for (const item of items){
+            const renderTextOptions = item.options;
+            const tickFont = item.font;
+            const label = item.label;
+            const y = item.textOffset;
+            renderText(ctx, label, 0, y, tickFont, renderTextOptions);
+        }
+        if (area) {
+            unclipArea(ctx);
+        }
+    }
+ drawTitle() {
+        const { ctx , options: { position , title , reverse  }  } = this;
+        if (!title.display) {
+            return;
+        }
+        const font = toFont(title.font);
+        const padding = toPadding(title.padding);
+        const align = title.align;
+        let offset = font.lineHeight / 2;
+        if (position === 'bottom' || position === 'center' || isObject(position)) {
+            offset += padding.bottom;
+            if (isArray(title.text)) {
+                offset += font.lineHeight * (title.text.length - 1);
+            }
+        } else {
+            offset += padding.top;
+        }
+        const { titleX , titleY , maxWidth , rotation  } = titleArgs(this, offset, position, align);
+        renderText(ctx, title.text, 0, 0, font, {
+            color: title.color,
+            maxWidth,
+            rotation,
+            textAlign: titleAlign(align, position, reverse),
+            textBaseline: 'middle',
+            translation: [
+                titleX,
+                titleY
+            ]
+        });
+    }
+    draw(chartArea) {
+        if (!this._isVisible()) {
+            return;
+        }
+        this.drawBackground();
+        this.drawGrid(chartArea);
+        this.drawBorder();
+        this.drawTitle();
+        this.drawLabels(chartArea);
+    }
+ _layers() {
+        const opts = this.options;
+        const tz = opts.ticks && opts.ticks.z || 0;
+        const gz = valueOrDefault(opts.grid && opts.grid.z, -1);
+        const bz = valueOrDefault(opts.border && opts.border.z, 0);
+        if (!this._isVisible() || this.draw !== Scale.prototype.draw) {
+            return [
+                {
+                    z: tz,
+                    draw: (chartArea)=>{
+                        this.draw(chartArea);
+                    }
+                }
+            ];
+        }
+        return [
+            {
+                z: gz,
+                draw: (chartArea)=>{
+                    this.drawBackground();
+                    this.drawGrid(chartArea);
+                    this.drawTitle();
+                }
+            },
+            {
+                z: bz,
+                draw: ()=>{
+                    this.drawBorder();
+                }
+            },
+            {
+                z: tz,
+                draw: (chartArea)=>{
+                    this.drawLabels(chartArea);
+                }
+            }
+        ];
+    }
+ getMatchingVisibleMetas(type) {
+        const metas = this.chart.getSortedVisibleDatasetMetas();
+        const axisID = this.axis + 'AxisID';
+        const result = [];
+        let i, ilen;
+        for(i = 0, ilen = metas.length; i < ilen; ++i){
+            const meta = metas[i];
+            if (meta[axisID] === this.id && (!type || meta.type === type)) {
+                result.push(meta);
+            }
+        }
+        return result;
+    }
+ _resolveTickFontOptions(index) {
+        const opts = this.options.ticks.setContext(this.getContext(index));
+        return toFont(opts.font);
+    }
+ _maxDigits() {
+        const fontSize = this._resolveTickFontOptions(0).lineHeight;
+        return (this.isHorizontal() ? this.width : this.height) / fontSize;
+    }
+}
+
+class TypedRegistry {
+    constructor(type, scope, override){
+        this.type = type;
+        this.scope = scope;
+        this.override = override;
+        this.items = Object.create(null);
+    }
+    isForType(type) {
+        return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);
+    }
+ register(item) {
+        const proto = Object.getPrototypeOf(item);
+        let parentScope;
+        if (isIChartComponent(proto)) {
+            parentScope = this.register(proto);
+        }
+        const items = this.items;
+        const id = item.id;
+        const scope = this.scope + '.' + id;
+        if (!id) {
+            throw new Error('class does not have id: ' + item);
+        }
+        if (id in items) {
+            return scope;
+        }
+        items[id] = item;
+        registerDefaults(item, scope, parentScope);
+        if (this.override) {
+            defaults.override(item.id, item.overrides);
+        }
+        return scope;
+    }
+ get(id) {
+        return this.items[id];
+    }
+ unregister(item) {
+        const items = this.items;
+        const id = item.id;
+        const scope = this.scope;
+        if (id in items) {
+            delete items[id];
+        }
+        if (scope && id in defaults[scope]) {
+            delete defaults[scope][id];
+            if (this.override) {
+                delete overrides[id];
+            }
+        }
+    }
+}
+function registerDefaults(item, scope, parentScope) {
+    const itemDefaults = merge(Object.create(null), [
+        parentScope ? defaults.get(parentScope) : {},
+        defaults.get(scope),
+        item.defaults
+    ]);
+    defaults.set(scope, itemDefaults);
+    if (item.defaultRoutes) {
+        routeDefaults(scope, item.defaultRoutes);
+    }
+    if (item.descriptors) {
+        defaults.describe(scope, item.descriptors);
+    }
+}
+function routeDefaults(scope, routes) {
+    Object.keys(routes).forEach((property)=>{
+        const propertyParts = property.split('.');
+        const sourceName = propertyParts.pop();
+        const sourceScope = [
+            scope
+        ].concat(propertyParts).join('.');
+        const parts = routes[property].split('.');
+        const targetName = parts.pop();
+        const targetScope = parts.join('.');
+        defaults.route(sourceScope, sourceName, targetScope, targetName);
+    });
+}
+function isIChartComponent(proto) {
+    return 'id' in proto && 'defaults' in proto;
+}
+
+class Registry {
+    constructor(){
+        this.controllers = new TypedRegistry(DatasetController, 'datasets', true);
+        this.elements = new TypedRegistry(Element, 'elements');
+        this.plugins = new TypedRegistry(Object, 'plugins');
+        this.scales = new TypedRegistry(Scale, 'scales');
+        this._typedRegistries = [
+            this.controllers,
+            this.scales,
+            this.elements
+        ];
+    }
+ add(...args) {
+        this._each('register', args);
+    }
+    remove(...args) {
+        this._each('unregister', args);
+    }
+ addControllers(...args) {
+        this._each('register', args, this.controllers);
+    }
+ addElements(...args) {
+        this._each('register', args, this.elements);
+    }
+ addPlugins(...args) {
+        this._each('register', args, this.plugins);
+    }
+ addScales(...args) {
+        this._each('register', args, this.scales);
+    }
+ getController(id) {
+        return this._get(id, this.controllers, 'controller');
+    }
+ getElement(id) {
+        return this._get(id, this.elements, 'element');
+    }
+ getPlugin(id) {
+        return this._get(id, this.plugins, 'plugin');
+    }
+ getScale(id) {
+        return this._get(id, this.scales, 'scale');
+    }
+ removeControllers(...args) {
+        this._each('unregister', args, this.controllers);
+    }
+ removeElements(...args) {
+        this._each('unregister', args, this.elements);
+    }
+ removePlugins(...args) {
+        this._each('unregister', args, this.plugins);
+    }
+ removeScales(...args) {
+        this._each('unregister', args, this.scales);
+    }
+ _each(method, args, typedRegistry) {
+        [
+            ...args
+        ].forEach((arg)=>{
+            const reg = typedRegistry || this._getRegistryForType(arg);
+            if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {
+                this._exec(method, reg, arg);
+            } else {
+                each(arg, (item)=>{
+                    const itemReg = typedRegistry || this._getRegistryForType(item);
+                    this._exec(method, itemReg, item);
+                });
+            }
+        });
+    }
+ _exec(method, registry, component) {
+        const camelMethod = _capitalize(method);
+        callback(component['before' + camelMethod], [], component);
+        registry[method](component);
+        callback(component['after' + camelMethod], [], component);
+    }
+ _getRegistryForType(type) {
+        for(let i = 0; i < this._typedRegistries.length; i++){
+            const reg = this._typedRegistries[i];
+            if (reg.isForType(type)) {
+                return reg;
+            }
+        }
+        return this.plugins;
+    }
+ _get(id, typedRegistry, type) {
+        const item = typedRegistry.get(id);
+        if (item === undefined) {
+            throw new Error('"' + id + '" is not a registered ' + type + '.');
+        }
+        return item;
+    }
+}
+var registry = /* #__PURE__ */ new Registry();
+
+class PluginService {
+    constructor(){
+        this._init = [];
+    }
+ notify(chart, hook, args, filter) {
+        if (hook === 'beforeInit') {
+            this._init = this._createDescriptors(chart, true);
+            this._notify(this._init, chart, 'install');
+        }
+        const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);
+        const result = this._notify(descriptors, chart, hook, args);
+        if (hook === 'afterDestroy') {
+            this._notify(descriptors, chart, 'stop');
+            this._notify(this._init, chart, 'uninstall');
+        }
+        return result;
+    }
+ _notify(descriptors, chart, hook, args) {
+        args = args || {};
+        for (const descriptor of descriptors){
+            const plugin = descriptor.plugin;
+            const method = plugin[hook];
+            const params = [
+                chart,
+                args,
+                descriptor.options
+            ];
+            if (callback(method, params, plugin) === false && args.cancelable) {
+                return false;
+            }
+        }
+        return true;
+    }
+    invalidate() {
+        if (!isNullOrUndef(this._cache)) {
+            this._oldCache = this._cache;
+            this._cache = undefined;
+        }
+    }
+ _descriptors(chart) {
+        if (this._cache) {
+            return this._cache;
+        }
+        const descriptors = this._cache = this._createDescriptors(chart);
+        this._notifyStateChanges(chart);
+        return descriptors;
+    }
+    _createDescriptors(chart, all) {
+        const config = chart && chart.config;
+        const options = valueOrDefault(config.options && config.options.plugins, {});
+        const plugins = allPlugins(config);
+        return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);
+    }
+ _notifyStateChanges(chart) {
+        const previousDescriptors = this._oldCache || [];
+        const descriptors = this._cache;
+        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));
+        this._notify(diff(previousDescriptors, descriptors), chart, 'stop');
+        this._notify(diff(descriptors, previousDescriptors), chart, 'start');
+    }
+}
+ function allPlugins(config) {
+    const localIds = {};
+    const plugins = [];
+    const keys = Object.keys(registry.plugins.items);
+    for(let i = 0; i < keys.length; i++){
+        plugins.push(registry.getPlugin(keys[i]));
+    }
+    const local = config.plugins || [];
+    for(let i = 0; i < local.length; i++){
+        const plugin = local[i];
+        if (plugins.indexOf(plugin) === -1) {
+            plugins.push(plugin);
+            localIds[plugin.id] = true;
+        }
+    }
+    return {
+        plugins,
+        localIds
+    };
+}
+function getOpts(options, all) {
+    if (!all && options === false) {
+        return null;
+    }
+    if (options === true) {
+        return {};
+    }
+    return options;
+}
+function createDescriptors(chart, { plugins , localIds  }, options, all) {
+    const result = [];
+    const context = chart.getContext();
+    for (const plugin of plugins){
+        const id = plugin.id;
+        const opts = getOpts(options[id], all);
+        if (opts === null) {
+            continue;
+        }
+        result.push({
+            plugin,
+            options: pluginOpts(chart.config, {
+                plugin,
+                local: localIds[id]
+            }, opts, context)
+        });
+    }
+    return result;
+}
+function pluginOpts(config, { plugin , local  }, opts, context) {
+    const keys = config.pluginScopeKeys(plugin);
+    const scopes = config.getOptionScopes(opts, keys);
+    if (local && plugin.defaults) {
+        scopes.push(plugin.defaults);
+    }
+    return config.createResolver(scopes, context, [
+        ''
+    ], {
+        scriptable: false,
+        indexable: false,
+        allKeys: true
+    });
+}
+
+function getIndexAxis(type, options) {
+    const datasetDefaults = defaults.datasets[type] || {};
+    const datasetOptions = (options.datasets || {})[type] || {};
+    return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';
+}
+function getAxisFromDefaultScaleID(id, indexAxis) {
+    let axis = id;
+    if (id === '_index_') {
+        axis = indexAxis;
+    } else if (id === '_value_') {
+        axis = indexAxis === 'x' ? 'y' : 'x';
+    }
+    return axis;
+}
+function getDefaultScaleIDFromAxis(axis, indexAxis) {
+    return axis === indexAxis ? '_index_' : '_value_';
+}
+function idMatchesAxis(id) {
+    if (id === 'x' || id === 'y' || id === 'r') {
+        return id;
+    }
+}
+function axisFromPosition(position) {
+    if (position === 'top' || position === 'bottom') {
+        return 'x';
+    }
+    if (position === 'left' || position === 'right') {
+        return 'y';
+    }
+}
+function determineAxis(id, ...scaleOptions) {
+    if (idMatchesAxis(id)) {
+        return id;
+    }
+    for (const opts of scaleOptions){
+        const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());
+        if (axis) {
+            return axis;
+        }
+    }
+    throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);
+}
+function getAxisFromDataset(id, axis, dataset) {
+    if (dataset[axis + 'AxisID'] === id) {
+        return {
+            axis
+        };
+    }
+}
+function retrieveAxisFromDatasets(id, config) {
+    if (config.data && config.data.datasets) {
+        const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);
+        if (boundDs.length) {
+            return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);
+        }
+    }
+    return {};
+}
+function mergeScaleConfig(config, options) {
+    const chartDefaults = overrides[config.type] || {
+        scales: {}
+    };
+    const configScales = options.scales || {};
+    const chartIndexAxis = getIndexAxis(config.type, options);
+    const scales = Object.create(null);
+    Object.keys(configScales).forEach((id)=>{
+        const scaleConf = configScales[id];
+        if (!isObject(scaleConf)) {
+            return console.error(`Invalid scale configuration for scale: ${id}`);
+        }
+        if (scaleConf._proxy) {
+            return console.warn(`Ignoring resolver passed as options for scale: ${id}`);
+        }
+        const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);
+        const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);
+        const defaultScaleOptions = chartDefaults.scales || {};
+        scales[id] = mergeIf(Object.create(null), [
+            {
+                axis
+            },
+            scaleConf,
+            defaultScaleOptions[axis],
+            defaultScaleOptions[defaultId]
+        ]);
+    });
+    config.data.datasets.forEach((dataset)=>{
+        const type = dataset.type || config.type;
+        const indexAxis = dataset.indexAxis || getIndexAxis(type, options);
+        const datasetDefaults = overrides[type] || {};
+        const defaultScaleOptions = datasetDefaults.scales || {};
+        Object.keys(defaultScaleOptions).forEach((defaultID)=>{
+            const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);
+            const id = dataset[axis + 'AxisID'] || axis;
+            scales[id] = scales[id] || Object.create(null);
+            mergeIf(scales[id], [
+                {
+                    axis
+                },
+                configScales[id],
+                defaultScaleOptions[defaultID]
+            ]);
+        });
+    });
+    Object.keys(scales).forEach((key)=>{
+        const scale = scales[key];
+        mergeIf(scale, [
+            defaults.scales[scale.type],
+            defaults.scale
+        ]);
+    });
+    return scales;
+}
+function initOptions(config) {
+    const options = config.options || (config.options = {});
+    options.plugins = valueOrDefault(options.plugins, {});
+    options.scales = mergeScaleConfig(config, options);
+}
+function initData(data) {
+    data = data || {};
+    data.datasets = data.datasets || [];
+    data.labels = data.labels || [];
+    return data;
+}
+function initConfig(config) {
+    config = config || {};
+    config.data = initData(config.data);
+    initOptions(config);
+    return config;
+}
+const keyCache = new Map();
+const keysCached = new Set();
+function cachedKeys(cacheKey, generate) {
+    let keys = keyCache.get(cacheKey);
+    if (!keys) {
+        keys = generate();
+        keyCache.set(cacheKey, keys);
+        keysCached.add(keys);
+    }
+    return keys;
+}
+const addIfFound = (set, obj, key)=>{
+    const opts = resolveObjectKey(obj, key);
+    if (opts !== undefined) {
+        set.add(opts);
+    }
+};
+class Config {
+    constructor(config){
+        this._config = initConfig(config);
+        this._scopeCache = new Map();
+        this._resolverCache = new Map();
+    }
+    get platform() {
+        return this._config.platform;
+    }
+    get type() {
+        return this._config.type;
+    }
+    set type(type) {
+        this._config.type = type;
+    }
+    get data() {
+        return this._config.data;
+    }
+    set data(data) {
+        this._config.data = initData(data);
+    }
+    get options() {
+        return this._config.options;
+    }
+    set options(options) {
+        this._config.options = options;
+    }
+    get plugins() {
+        return this._config.plugins;
+    }
+    update() {
+        const config = this._config;
+        this.clearCache();
+        initOptions(config);
+    }
+    clearCache() {
+        this._scopeCache.clear();
+        this._resolverCache.clear();
+    }
+ datasetScopeKeys(datasetType) {
+        return cachedKeys(datasetType, ()=>[
+                [
+                    `datasets.${datasetType}`,
+                    ''
+                ]
+            ]);
+    }
+ datasetAnimationScopeKeys(datasetType, transition) {
+        return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[
+                [
+                    `datasets.${datasetType}.transitions.${transition}`,
+                    `transitions.${transition}`
+                ],
+                [
+                    `datasets.${datasetType}`,
+                    ''
+                ]
+            ]);
+    }
+ datasetElementScopeKeys(datasetType, elementType) {
+        return cachedKeys(`${datasetType}-${elementType}`, ()=>[
+                [
+                    `datasets.${datasetType}.elements.${elementType}`,
+                    `datasets.${datasetType}`,
+                    `elements.${elementType}`,
+                    ''
+                ]
+            ]);
+    }
+ pluginScopeKeys(plugin) {
+        const id = plugin.id;
+        const type = this.type;
+        return cachedKeys(`${type}-plugin-${id}`, ()=>[
+                [
+                    `plugins.${id}`,
+                    ...plugin.additionalOptionScopes || []
+                ]
+            ]);
+    }
+ _cachedScopes(mainScope, resetCache) {
+        const _scopeCache = this._scopeCache;
+        let cache = _scopeCache.get(mainScope);
+        if (!cache || resetCache) {
+            cache = new Map();
+            _scopeCache.set(mainScope, cache);
+        }
+        return cache;
+    }
+ getOptionScopes(mainScope, keyLists, resetCache) {
+        const { options , type  } = this;
+        const cache = this._cachedScopes(mainScope, resetCache);
+        const cached = cache.get(keyLists);
+        if (cached) {
+            return cached;
+        }
+        const scopes = new Set();
+        keyLists.forEach((keys)=>{
+            if (mainScope) {
+                scopes.add(mainScope);
+                keys.forEach((key)=>addIfFound(scopes, mainScope, key));
+            }
+            keys.forEach((key)=>addIfFound(scopes, options, key));
+            keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));
+            keys.forEach((key)=>addIfFound(scopes, defaults, key));
+            keys.forEach((key)=>addIfFound(scopes, descriptors, key));
+        });
+        const array = Array.from(scopes);
+        if (array.length === 0) {
+            array.push(Object.create(null));
+        }
+        if (keysCached.has(keyLists)) {
+            cache.set(keyLists, array);
+        }
+        return array;
+    }
+ chartOptionScopes() {
+        const { options , type  } = this;
+        return [
+            options,
+            overrides[type] || {},
+            defaults.datasets[type] || {},
+            {
+                type
+            },
+            defaults,
+            descriptors
+        ];
+    }
+ resolveNamedOptions(scopes, names, context, prefixes = [
+        ''
+    ]) {
+        const result = {
+            $shared: true
+        };
+        const { resolver , subPrefixes  } = getResolver(this._resolverCache, scopes, prefixes);
+        let options = resolver;
+        if (needContext(resolver, names)) {
+            result.$shared = false;
+            context = isFunction(context) ? context() : context;
+            const subResolver = this.createResolver(scopes, context, subPrefixes);
+            options = _attachContext(resolver, context, subResolver);
+        }
+        for (const prop of names){
+            result[prop] = options[prop];
+        }
+        return result;
+    }
+ createResolver(scopes, context, prefixes = [
+        ''
+    ], descriptorDefaults) {
+        const { resolver  } = getResolver(this._resolverCache, scopes, prefixes);
+        return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;
+    }
+}
+function getResolver(resolverCache, scopes, prefixes) {
+    let cache = resolverCache.get(scopes);
+    if (!cache) {
+        cache = new Map();
+        resolverCache.set(scopes, cache);
+    }
+    const cacheKey = prefixes.join();
+    let cached = cache.get(cacheKey);
+    if (!cached) {
+        const resolver = _createResolver(scopes, prefixes);
+        cached = {
+            resolver,
+            subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))
+        };
+        cache.set(cacheKey, cached);
+    }
+    return cached;
+}
+const hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));
+function needContext(proxy, names) {
+    const { isScriptable , isIndexable  } = _descriptors(proxy);
+    for (const prop of names){
+        const scriptable = isScriptable(prop);
+        const indexable = isIndexable(prop);
+        const value = (indexable || scriptable) && proxy[prop];
+        if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {
+            return true;
+        }
+    }
+    return false;
+}
+
+var version = "4.5.0";
+
+const KNOWN_POSITIONS = [
+    'top',
+    'bottom',
+    'left',
+    'right',
+    'chartArea'
+];
+function positionIsHorizontal(position, axis) {
+    return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';
+}
+function compare2Level(l1, l2) {
+    return function(a, b) {
+        return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];
+    };
+}
+function onAnimationsComplete(context) {
+    const chart = context.chart;
+    const animationOptions = chart.options.animation;
+    chart.notifyPlugins('afterRender');
+    callback(animationOptions && animationOptions.onComplete, [
+        context
+    ], chart);
+}
+function onAnimationProgress(context) {
+    const chart = context.chart;
+    const animationOptions = chart.options.animation;
+    callback(animationOptions && animationOptions.onProgress, [
+        context
+    ], chart);
+}
+ function getCanvas(item) {
+    if (_isDomSupported() && typeof item === 'string') {
+        item = document.getElementById(item);
+    } else if (item && item.length) {
+        item = item[0];
+    }
+    if (item && item.canvas) {
+        item = item.canvas;
+    }
+    return item;
+}
+const instances = {};
+const getChart = (key)=>{
+    const canvas = getCanvas(key);
+    return Object.values(instances).filter((c)=>c.canvas === canvas).pop();
+};
+function moveNumericKeys(obj, start, move) {
+    const keys = Object.keys(obj);
+    for (const key of keys){
+        const intKey = +key;
+        if (intKey >= start) {
+            const value = obj[key];
+            delete obj[key];
+            if (move > 0 || intKey > start) {
+                obj[intKey + move] = value;
+            }
+        }
+    }
+}
+ function determineLastEvent(e, lastEvent, inChartArea, isClick) {
+    if (!inChartArea || e.type === 'mouseout') {
+        return null;
+    }
+    if (isClick) {
+        return lastEvent;
+    }
+    return e;
+}
+class Chart {
+    static defaults = defaults;
+    static instances = instances;
+    static overrides = overrides;
+    static registry = registry;
+    static version = version;
+    static getChart = getChart;
+    static register(...items) {
+        registry.add(...items);
+        invalidatePlugins();
+    }
+    static unregister(...items) {
+        registry.remove(...items);
+        invalidatePlugins();
+    }
+    constructor(item, userConfig){
+        const config = this.config = new Config(userConfig);
+        const initialCanvas = getCanvas(item);
+        const existingChart = getChart(initialCanvas);
+        if (existingChart) {
+            throw new Error('Canvas is already in use. Chart with ID \'' + existingChart.id + '\'' + ' must be destroyed before the canvas with ID \'' + existingChart.canvas.id + '\' can be reused.');
+        }
+        const options = config.createResolver(config.chartOptionScopes(), this.getContext());
+        this.platform = new (config.platform || _detectPlatform(initialCanvas))();
+        this.platform.updateConfig(config);
+        const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);
+        const canvas = context && context.canvas;
+        const height = canvas && canvas.height;
+        const width = canvas && canvas.width;
+        this.id = uid();
+        this.ctx = context;
+        this.canvas = canvas;
+        this.width = width;
+        this.height = height;
+        this._options = options;
+        this._aspectRatio = this.aspectRatio;
+        this._layers = [];
+        this._metasets = [];
+        this._stacks = undefined;
+        this.boxes = [];
+        this.currentDevicePixelRatio = undefined;
+        this.chartArea = undefined;
+        this._active = [];
+        this._lastEvent = undefined;
+        this._listeners = {};
+         this._responsiveListeners = undefined;
+        this._sortedMetasets = [];
+        this.scales = {};
+        this._plugins = new PluginService();
+        this.$proxies = {};
+        this._hiddenIndices = {};
+        this.attached = false;
+        this._animationsDisabled = undefined;
+        this.$context = undefined;
+        this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);
+        this._dataChanges = [];
+        instances[this.id] = this;
+        if (!context || !canvas) {
+            console.error("Failed to create chart: can't acquire context from the given item");
+            return;
+        }
+        animator.listen(this, 'complete', onAnimationsComplete);
+        animator.listen(this, 'progress', onAnimationProgress);
+        this._initialize();
+        if (this.attached) {
+            this.update();
+        }
+    }
+    get aspectRatio() {
+        const { options: { aspectRatio , maintainAspectRatio  } , width , height , _aspectRatio  } = this;
+        if (!isNullOrUndef(aspectRatio)) {
+            return aspectRatio;
+        }
+        if (maintainAspectRatio && _aspectRatio) {
+            return _aspectRatio;
+        }
+        return height ? width / height : null;
+    }
+    get data() {
+        return this.config.data;
+    }
+    set data(data) {
+        this.config.data = data;
+    }
+    get options() {
+        return this._options;
+    }
+    set options(options) {
+        this.config.options = options;
+    }
+    get registry() {
+        return registry;
+    }
+ _initialize() {
+        this.notifyPlugins('beforeInit');
+        if (this.options.responsive) {
+            this.resize();
+        } else {
+            retinaScale(this, this.options.devicePixelRatio);
+        }
+        this.bindEvents();
+        this.notifyPlugins('afterInit');
+        return this;
+    }
+    clear() {
+        clearCanvas(this.canvas, this.ctx);
+        return this;
+    }
+    stop() {
+        animator.stop(this);
+        return this;
+    }
+ resize(width, height) {
+        if (!animator.running(this)) {
+            this._resize(width, height);
+        } else {
+            this._resizeBeforeDraw = {
+                width,
+                height
+            };
+        }
+    }
+    _resize(width, height) {
+        const options = this.options;
+        const canvas = this.canvas;
+        const aspectRatio = options.maintainAspectRatio && this.aspectRatio;
+        const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);
+        const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();
+        const mode = this.width ? 'resize' : 'attach';
+        this.width = newSize.width;
+        this.height = newSize.height;
+        this._aspectRatio = this.aspectRatio;
+        if (!retinaScale(this, newRatio, true)) {
+            return;
+        }
+        this.notifyPlugins('resize', {
+            size: newSize
+        });
+        callback(options.onResize, [
+            this,
+            newSize
+        ], this);
+        if (this.attached) {
+            if (this._doResize(mode)) {
+                this.render();
+            }
+        }
+    }
+    ensureScalesHaveIDs() {
+        const options = this.options;
+        const scalesOptions = options.scales || {};
+        each(scalesOptions, (axisOptions, axisID)=>{
+            axisOptions.id = axisID;
+        });
+    }
+ buildOrUpdateScales() {
+        const options = this.options;
+        const scaleOpts = options.scales;
+        const scales = this.scales;
+        const updated = Object.keys(scales).reduce((obj, id)=>{
+            obj[id] = false;
+            return obj;
+        }, {});
+        let items = [];
+        if (scaleOpts) {
+            items = items.concat(Object.keys(scaleOpts).map((id)=>{
+                const scaleOptions = scaleOpts[id];
+                const axis = determineAxis(id, scaleOptions);
+                const isRadial = axis === 'r';
+                const isHorizontal = axis === 'x';
+                return {
+                    options: scaleOptions,
+                    dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',
+                    dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'
+                };
+            }));
+        }
+        each(items, (item)=>{
+            const scaleOptions = item.options;
+            const id = scaleOptions.id;
+            const axis = determineAxis(id, scaleOptions);
+            const scaleType = valueOrDefault(scaleOptions.type, item.dtype);
+            if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {
+                scaleOptions.position = item.dposition;
+            }
+            updated[id] = true;
+            let scale = null;
+            if (id in scales && scales[id].type === scaleType) {
+                scale = scales[id];
+            } else {
+                const scaleClass = registry.getScale(scaleType);
+                scale = new scaleClass({
+                    id,
+                    type: scaleType,
+                    ctx: this.ctx,
+                    chart: this
+                });
+                scales[scale.id] = scale;
+            }
+            scale.init(scaleOptions, options);
+        });
+        each(updated, (hasUpdated, id)=>{
+            if (!hasUpdated) {
+                delete scales[id];
+            }
+        });
+        each(scales, (scale)=>{
+            layouts.configure(this, scale, scale.options);
+            layouts.addBox(this, scale);
+        });
+    }
+ _updateMetasets() {
+        const metasets = this._metasets;
+        const numData = this.data.datasets.length;
+        const numMeta = metasets.length;
+        metasets.sort((a, b)=>a.index - b.index);
+        if (numMeta > numData) {
+            for(let i = numData; i < numMeta; ++i){
+                this._destroyDatasetMeta(i);
+            }
+            metasets.splice(numData, numMeta - numData);
+        }
+        this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));
+    }
+ _removeUnreferencedMetasets() {
+        const { _metasets: metasets , data: { datasets  }  } = this;
+        if (metasets.length > datasets.length) {
+            delete this._stacks;
+        }
+        metasets.forEach((meta, index)=>{
+            if (datasets.filter((x)=>x === meta._dataset).length === 0) {
+                this._destroyDatasetMeta(index);
+            }
+        });
+    }
+    buildOrUpdateControllers() {
+        const newControllers = [];
+        const datasets = this.data.datasets;
+        let i, ilen;
+        this._removeUnreferencedMetasets();
+        for(i = 0, ilen = datasets.length; i < ilen; i++){
+            const dataset = datasets[i];
+            let meta = this.getDatasetMeta(i);
+            const type = dataset.type || this.config.type;
+            if (meta.type && meta.type !== type) {
+                this._destroyDatasetMeta(i);
+                meta = this.getDatasetMeta(i);
+            }
+            meta.type = type;
+            meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);
+            meta.order = dataset.order || 0;
+            meta.index = i;
+            meta.label = '' + dataset.label;
+            meta.visible = this.isDatasetVisible(i);
+            if (meta.controller) {
+                meta.controller.updateIndex(i);
+                meta.controller.linkScales();
+            } else {
+                const ControllerClass = registry.getController(type);
+                const { datasetElementType , dataElementType  } = defaults.datasets[type];
+                Object.assign(ControllerClass, {
+                    dataElementType: registry.getElement(dataElementType),
+                    datasetElementType: datasetElementType && registry.getElement(datasetElementType)
+                });
+                meta.controller = new ControllerClass(this, i);
+                newControllers.push(meta.controller);
+            }
+        }
+        this._updateMetasets();
+        return newControllers;
+    }
+ _resetElements() {
+        each(this.data.datasets, (dataset, datasetIndex)=>{
+            this.getDatasetMeta(datasetIndex).controller.reset();
+        }, this);
+    }
+ reset() {
+        this._resetElements();
+        this.notifyPlugins('reset');
+    }
+    update(mode) {
+        const config = this.config;
+        config.update();
+        const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());
+        const animsDisabled = this._animationsDisabled = !options.animation;
+        this._updateScales();
+        this._checkEventBindings();
+        this._updateHiddenIndices();
+        this._plugins.invalidate();
+        if (this.notifyPlugins('beforeUpdate', {
+            mode,
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        const newControllers = this.buildOrUpdateControllers();
+        this.notifyPlugins('beforeElementsUpdate');
+        let minPadding = 0;
+        for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){
+            const { controller  } = this.getDatasetMeta(i);
+            const reset = !animsDisabled && newControllers.indexOf(controller) === -1;
+            controller.buildOrUpdateElements(reset);
+            minPadding = Math.max(+controller.getMaxOverflow(), minPadding);
+        }
+        minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;
+        this._updateLayout(minPadding);
+        if (!animsDisabled) {
+            each(newControllers, (controller)=>{
+                controller.reset();
+            });
+        }
+        this._updateDatasets(mode);
+        this.notifyPlugins('afterUpdate', {
+            mode
+        });
+        this._layers.sort(compare2Level('z', '_idx'));
+        const { _active , _lastEvent  } = this;
+        if (_lastEvent) {
+            this._eventHandler(_lastEvent, true);
+        } else if (_active.length) {
+            this._updateHoverStyles(_active, _active, true);
+        }
+        this.render();
+    }
+ _updateScales() {
+        each(this.scales, (scale)=>{
+            layouts.removeBox(this, scale);
+        });
+        this.ensureScalesHaveIDs();
+        this.buildOrUpdateScales();
+    }
+ _checkEventBindings() {
+        const options = this.options;
+        const existingEvents = new Set(Object.keys(this._listeners));
+        const newEvents = new Set(options.events);
+        if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {
+            this.unbindEvents();
+            this.bindEvents();
+        }
+    }
+ _updateHiddenIndices() {
+        const { _hiddenIndices  } = this;
+        const changes = this._getUniformDataChanges() || [];
+        for (const { method , start , count  } of changes){
+            const move = method === '_removeElements' ? -count : count;
+            moveNumericKeys(_hiddenIndices, start, move);
+        }
+    }
+ _getUniformDataChanges() {
+        const _dataChanges = this._dataChanges;
+        if (!_dataChanges || !_dataChanges.length) {
+            return;
+        }
+        this._dataChanges = [];
+        const datasetCount = this.data.datasets.length;
+        const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));
+        const changeSet = makeSet(0);
+        for(let i = 1; i < datasetCount; i++){
+            if (!setsEqual(changeSet, makeSet(i))) {
+                return;
+            }
+        }
+        return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({
+                method: a[1],
+                start: +a[2],
+                count: +a[3]
+            }));
+    }
+ _updateLayout(minPadding) {
+        if (this.notifyPlugins('beforeLayout', {
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        layouts.update(this, this.width, this.height, minPadding);
+        const area = this.chartArea;
+        const noArea = area.width <= 0 || area.height <= 0;
+        this._layers = [];
+        each(this.boxes, (box)=>{
+            if (noArea && box.position === 'chartArea') {
+                return;
+            }
+            if (box.configure) {
+                box.configure();
+            }
+            this._layers.push(...box._layers());
+        }, this);
+        this._layers.forEach((item, index)=>{
+            item._idx = index;
+        });
+        this.notifyPlugins('afterLayout');
+    }
+ _updateDatasets(mode) {
+        if (this.notifyPlugins('beforeDatasetsUpdate', {
+            mode,
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){
+            this.getDatasetMeta(i).controller.configure();
+        }
+        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){
+            this._updateDataset(i, isFunction(mode) ? mode({
+                datasetIndex: i
+            }) : mode);
+        }
+        this.notifyPlugins('afterDatasetsUpdate', {
+            mode
+        });
+    }
+ _updateDataset(index, mode) {
+        const meta = this.getDatasetMeta(index);
+        const args = {
+            meta,
+            index,
+            mode,
+            cancelable: true
+        };
+        if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {
+            return;
+        }
+        meta.controller._update(mode);
+        args.cancelable = false;
+        this.notifyPlugins('afterDatasetUpdate', args);
+    }
+    render() {
+        if (this.notifyPlugins('beforeRender', {
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        if (animator.has(this)) {
+            if (this.attached && !animator.running(this)) {
+                animator.start(this);
+            }
+        } else {
+            this.draw();
+            onAnimationsComplete({
+                chart: this
+            });
+        }
+    }
+    draw() {
+        let i;
+        if (this._resizeBeforeDraw) {
+            const { width , height  } = this._resizeBeforeDraw;
+            this._resizeBeforeDraw = null;
+            this._resize(width, height);
+        }
+        this.clear();
+        if (this.width <= 0 || this.height <= 0) {
+            return;
+        }
+        if (this.notifyPlugins('beforeDraw', {
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        const layers = this._layers;
+        for(i = 0; i < layers.length && layers[i].z <= 0; ++i){
+            layers[i].draw(this.chartArea);
+        }
+        this._drawDatasets();
+        for(; i < layers.length; ++i){
+            layers[i].draw(this.chartArea);
+        }
+        this.notifyPlugins('afterDraw');
+    }
+ _getSortedDatasetMetas(filterVisible) {
+        const metasets = this._sortedMetasets;
+        const result = [];
+        let i, ilen;
+        for(i = 0, ilen = metasets.length; i < ilen; ++i){
+            const meta = metasets[i];
+            if (!filterVisible || meta.visible) {
+                result.push(meta);
+            }
+        }
+        return result;
+    }
+ getSortedVisibleDatasetMetas() {
+        return this._getSortedDatasetMetas(true);
+    }
+ _drawDatasets() {
+        if (this.notifyPlugins('beforeDatasetsDraw', {
+            cancelable: true
+        }) === false) {
+            return;
+        }
+        const metasets = this.getSortedVisibleDatasetMetas();
+        for(let i = metasets.length - 1; i >= 0; --i){
+            this._drawDataset(metasets[i]);
+        }
+        this.notifyPlugins('afterDatasetsDraw');
+    }
+ _drawDataset(meta) {
+        const ctx = this.ctx;
+        const args = {
+            meta,
+            index: meta.index,
+            cancelable: true
+        };
+        const clip = getDatasetClipArea(this, meta);
+        if (this.notifyPlugins('beforeDatasetDraw', args) === false) {
+            return;
+        }
+        if (clip) {
+            clipArea(ctx, clip);
+        }
+        meta.controller.draw();
+        if (clip) {
+            unclipArea(ctx);
+        }
+        args.cancelable = false;
+        this.notifyPlugins('afterDatasetDraw', args);
+    }
+ isPointInArea(point) {
+        return _isPointInArea(point, this.chartArea, this._minPadding);
+    }
+    getElementsAtEventForMode(e, mode, options, useFinalPosition) {
+        const method = Interaction.modes[mode];
+        if (typeof method === 'function') {
+            return method(this, e, options, useFinalPosition);
+        }
+        return [];
+    }
+    getDatasetMeta(datasetIndex) {
+        const dataset = this.data.datasets[datasetIndex];
+        const metasets = this._metasets;
+        let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();
+        if (!meta) {
+            meta = {
+                type: null,
+                data: [],
+                dataset: null,
+                controller: null,
+                hidden: null,
+                xAxisID: null,
+                yAxisID: null,
+                order: dataset && dataset.order || 0,
+                index: datasetIndex,
+                _dataset: dataset,
+                _parsed: [],
+                _sorted: false
+            };
+            metasets.push(meta);
+        }
+        return meta;
+    }
+    getContext() {
+        return this.$context || (this.$context = createContext(null, {
+            chart: this,
+            type: 'chart'
+        }));
+    }
+    getVisibleDatasetCount() {
+        return this.getSortedVisibleDatasetMetas().length;
+    }
+    isDatasetVisible(datasetIndex) {
+        const dataset = this.data.datasets[datasetIndex];
+        if (!dataset) {
+            return false;
+        }
+        const meta = this.getDatasetMeta(datasetIndex);
+        return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;
+    }
+    setDatasetVisibility(datasetIndex, visible) {
+        const meta = this.getDatasetMeta(datasetIndex);
+        meta.hidden = !visible;
+    }
+    toggleDataVisibility(index) {
+        this._hiddenIndices[index] = !this._hiddenIndices[index];
+    }
+    getDataVisibility(index) {
+        return !this._hiddenIndices[index];
+    }
+ _updateVisibility(datasetIndex, dataIndex, visible) {
+        const mode = visible ? 'show' : 'hide';
+        const meta = this.getDatasetMeta(datasetIndex);
+        const anims = meta.controller._resolveAnimations(undefined, mode);
+        if (defined(dataIndex)) {
+            meta.data[dataIndex].hidden = !visible;
+            this.update();
+        } else {
+            this.setDatasetVisibility(datasetIndex, visible);
+            anims.update(meta, {
+                visible
+            });
+            this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);
+        }
+    }
+    hide(datasetIndex, dataIndex) {
+        this._updateVisibility(datasetIndex, dataIndex, false);
+    }
+    show(datasetIndex, dataIndex) {
+        this._updateVisibility(datasetIndex, dataIndex, true);
+    }
+ _destroyDatasetMeta(datasetIndex) {
+        const meta = this._metasets[datasetIndex];
+        if (meta && meta.controller) {
+            meta.controller._destroy();
+        }
+        delete this._metasets[datasetIndex];
+    }
+    _stop() {
+        let i, ilen;
+        this.stop();
+        animator.remove(this);
+        for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){
+            this._destroyDatasetMeta(i);
+        }
+    }
+    destroy() {
+        this.notifyPlugins('beforeDestroy');
+        const { canvas , ctx  } = this;
+        this._stop();
+        this.config.clearCache();
+        if (canvas) {
+            this.unbindEvents();
+            clearCanvas(canvas, ctx);
+            this.platform.releaseContext(ctx);
+            this.canvas = null;
+            this.ctx = null;
+        }
+        delete instances[this.id];
+        this.notifyPlugins('afterDestroy');
+    }
+    toBase64Image(...args) {
+        return this.canvas.toDataURL(...args);
+    }
+ bindEvents() {
+        this.bindUserEvents();
+        if (this.options.responsive) {
+            this.bindResponsiveEvents();
+        } else {
+            this.attached = true;
+        }
+    }
+ bindUserEvents() {
+        const listeners = this._listeners;
+        const platform = this.platform;
+        const _add = (type, listener)=>{
+            platform.addEventListener(this, type, listener);
+            listeners[type] = listener;
+        };
+        const listener = (e, x, y)=>{
+            e.offsetX = x;
+            e.offsetY = y;
+            this._eventHandler(e);
+        };
+        each(this.options.events, (type)=>_add(type, listener));
+    }
+ bindResponsiveEvents() {
+        if (!this._responsiveListeners) {
+            this._responsiveListeners = {};
+        }
+        const listeners = this._responsiveListeners;
+        const platform = this.platform;
+        const _add = (type, listener)=>{
+            platform.addEventListener(this, type, listener);
+            listeners[type] = listener;
+        };
+        const _remove = (type, listener)=>{
+            if (listeners[type]) {
+                platform.removeEventListener(this, type, listener);
+                delete listeners[type];
+            }
+        };
+        const listener = (width, height)=>{
+            if (this.canvas) {
+                this.resize(width, height);
+            }
+        };
+        let detached;
+        const attached = ()=>{
+            _remove('attach', attached);
+            this.attached = true;
+            this.resize();
+            _add('resize', listener);
+            _add('detach', detached);
+        };
+        detached = ()=>{
+            this.attached = false;
+            _remove('resize', listener);
+            this._stop();
+            this._resize(0, 0);
+            _add('attach', attached);
+        };
+        if (platform.isAttached(this.canvas)) {
+            attached();
+        } else {
+            detached();
+        }
+    }
+ unbindEvents() {
+        each(this._listeners, (listener, type)=>{
+            this.platform.removeEventListener(this, type, listener);
+        });
+        this._listeners = {};
+        each(this._responsiveListeners, (listener, type)=>{
+            this.platform.removeEventListener(this, type, listener);
+        });
+        this._responsiveListeners = undefined;
+    }
+    updateHoverStyle(items, mode, enabled) {
+        const prefix = enabled ? 'set' : 'remove';
+        let meta, item, i, ilen;
+        if (mode === 'dataset') {
+            meta = this.getDatasetMeta(items[0].datasetIndex);
+            meta.controller['_' + prefix + 'DatasetHoverStyle']();
+        }
+        for(i = 0, ilen = items.length; i < ilen; ++i){
+            item = items[i];
+            const controller = item && this.getDatasetMeta(item.datasetIndex).controller;
+            if (controller) {
+                controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);
+            }
+        }
+    }
+ getActiveElements() {
+        return this._active || [];
+    }
+ setActiveElements(activeElements) {
+        const lastActive = this._active || [];
+        const active = activeElements.map(({ datasetIndex , index  })=>{
+            const meta = this.getDatasetMeta(datasetIndex);
+            if (!meta) {
+                throw new Error('No dataset found at index ' + datasetIndex);
+            }
+            return {
+                datasetIndex,
+                element: meta.data[index],
+                index
+            };
+        });
+        const changed = !_elementsEqual(active, lastActive);
+        if (changed) {
+            this._active = active;
+            this._lastEvent = null;
+            this._updateHoverStyles(active, lastActive);
+        }
+    }
+ notifyPlugins(hook, args, filter) {
+        return this._plugins.notify(this, hook, args, filter);
+    }
+ isPluginEnabled(pluginId) {
+        return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;
+    }
+ _updateHoverStyles(active, lastActive, replay) {
+        const hoverOptions = this.options.hover;
+        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));
+        const deactivated = diff(lastActive, active);
+        const activated = replay ? active : diff(active, lastActive);
+        if (deactivated.length) {
+            this.updateHoverStyle(deactivated, hoverOptions.mode, false);
+        }
+        if (activated.length && hoverOptions.mode) {
+            this.updateHoverStyle(activated, hoverOptions.mode, true);
+        }
+    }
+ _eventHandler(e, replay) {
+        const args = {
+            event: e,
+            replay,
+            cancelable: true,
+            inChartArea: this.isPointInArea(e)
+        };
+        const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);
+        if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {
+            return;
+        }
+        const changed = this._handleEvent(e, replay, args.inChartArea);
+        args.cancelable = false;
+        this.notifyPlugins('afterEvent', args, eventFilter);
+        if (changed || args.changed) {
+            this.render();
+        }
+        return this;
+    }
+ _handleEvent(e, replay, inChartArea) {
+        const { _active: lastActive = [] , options  } = this;
+        const useFinalPosition = replay;
+        const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);
+        const isClick = _isClickEvent(e);
+        const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);
+        if (inChartArea) {
+            this._lastEvent = null;
+            callback(options.onHover, [
+                e,
+                active,
+                this
+            ], this);
+            if (isClick) {
+                callback(options.onClick, [
+                    e,
+                    active,
+                    this
+                ], this);
+            }
+        }
+        const changed = !_elementsEqual(active, lastActive);
+        if (changed || replay) {
+            this._active = active;
+            this._updateHoverStyles(active, lastActive, replay);
+        }
+        this._lastEvent = lastEvent;
+        return changed;
+    }
+ _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {
+        if (e.type === 'mouseout') {
+            return [];
+        }
+        if (!inChartArea) {
+            return lastActive;
+        }
+        const hoverOptions = this.options.hover;
+        return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);
+    }
+}
+function invalidatePlugins() {
+    return each(Chart.instances, (chart)=>chart._plugins.invalidate());
+}
+
+function clipSelf(ctx, element, endAngle) {
+    const { startAngle , x , y , outerRadius , innerRadius , options  } = element;
+    const { borderWidth , borderJoinStyle  } = options;
+    const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));
+    ctx.beginPath();
+    ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);
+    if (innerRadius > 0) {
+        const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));
+        ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);
+    } else {
+        const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));
+        if (borderJoinStyle === 'round') {
+            ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);
+        } else if (borderJoinStyle === 'bevel') {
+            const r = 2 * clipWidth * clipWidth;
+            const endX = -r * Math.cos(endAngle + PI / 2) + x;
+            const endY = -r * Math.sin(endAngle + PI / 2) + y;
+            const startX = r * Math.cos(startAngle + PI / 2) + x;
+            const startY = r * Math.sin(startAngle + PI / 2) + y;
+            ctx.lineTo(endX, endY);
+            ctx.lineTo(startX, startY);
+        }
+    }
+    ctx.closePath();
+    ctx.moveTo(0, 0);
+    ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
+    ctx.clip('evenodd');
+}
+function clipArc(ctx, element, endAngle) {
+    const { startAngle , pixelMargin , x , y , outerRadius , innerRadius  } = element;
+    let angleMargin = pixelMargin / outerRadius;
+    // Draw an inner border by clipping the arc and drawing a double-width border
+    // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders
+    ctx.beginPath();
+    ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);
+    if (innerRadius > pixelMargin) {
+        angleMargin = pixelMargin / innerRadius;
+        ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);
+    } else {
+        ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);
+    }
+    ctx.closePath();
+    ctx.clip();
+}
+function toRadiusCorners(value) {
+    return _readValueToProps(value, [
+        'outerStart',
+        'outerEnd',
+        'innerStart',
+        'innerEnd'
+    ]);
+}
+/**
+ * Parse border radius from the provided options
+ */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {
+    const o = toRadiusCorners(arc.options.borderRadius);
+    const halfThickness = (outerRadius - innerRadius) / 2;
+    const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);
+    // Outer limits are complicated. We want to compute the available angular distance at
+    // a radius of outerRadius - borderRadius because for small angular distances, this term limits.
+    // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.
+    //
+    // If the borderRadius is large, that value can become negative.
+    // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius
+    // we know that the thickness term will dominate and compute the limits at that point
+    const computeOuterLimit = (val)=>{
+        const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;
+        return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));
+    };
+    return {
+        outerStart: computeOuterLimit(o.outerStart),
+        outerEnd: computeOuterLimit(o.outerEnd),
+        innerStart: _limitValue(o.innerStart, 0, innerLimit),
+        innerEnd: _limitValue(o.innerEnd, 0, innerLimit)
+    };
+}
+/**
+ * Convert (r, 𝜃) to (x, y)
+ */ function rThetaToXY(r, theta, x, y) {
+    return {
+        x: x + r * Math.cos(theta),
+        y: y + r * Math.sin(theta)
+    };
+}
+/**
+ * Path the arc, respecting border radius by separating into left and right halves.
+ *
+ *   Start      End
+ *
+ *    1--->a--->2    Outer
+ *   /           \
+ *   8           3
+ *   |           |
+ *   |           |
+ *   7           4
+ *   \           /
+ *    6<---b<---5    Inner
+ */ function pathArc(ctx, element, offset, spacing, end, circular) {
+    const { x , y , startAngle: start , pixelMargin , innerRadius: innerR  } = element;
+    const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);
+    const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;
+    let spacingOffset = 0;
+    const alpha = end - start;
+    if (spacing) {
+        // When spacing is present, it is the same for all items
+        // So we adjust the start and end angle of the arc such that
+        // the distance is the same as it would be without the spacing
+        const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;
+        const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;
+        const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;
+        const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;
+        spacingOffset = (alpha - adjustedAngle) / 2;
+    }
+    const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;
+    const angleOffset = (alpha - beta) / 2;
+    const startAngle = start + angleOffset + spacingOffset;
+    const endAngle = end - angleOffset - spacingOffset;
+    const { outerStart , outerEnd , innerStart , innerEnd  } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);
+    const outerStartAdjustedRadius = outerRadius - outerStart;
+    const outerEndAdjustedRadius = outerRadius - outerEnd;
+    const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;
+    const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;
+    const innerStartAdjustedRadius = innerRadius + innerStart;
+    const innerEndAdjustedRadius = innerRadius + innerEnd;
+    const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;
+    const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;
+    ctx.beginPath();
+    if (circular) {
+        // The first arc segments from point 1 to point a to point 2
+        const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;
+        ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);
+        ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);
+        // The corner segment from point 2 to point 3
+        if (outerEnd > 0) {
+            const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);
+            ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);
+        }
+        // The line from point 3 to point 4
+        const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);
+        ctx.lineTo(p4.x, p4.y);
+        // The corner segment from point 4 to point 5
+        if (innerEnd > 0) {
+            const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
+            ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);
+        }
+        // The inner arc from point 5 to point b to point 6
+        const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;
+        ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);
+        ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);
+        // The corner segment from point 6 to point 7
+        if (innerStart > 0) {
+            const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
+            ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);
+        }
+        // The line from point 7 to point 8
+        const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);
+        ctx.lineTo(p8.x, p8.y);
+        // The corner segment from point 8 to point 1
+        if (outerStart > 0) {
+            const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
+            ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);
+        }
+    } else {
+        ctx.moveTo(x, y);
+        const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;
+        const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;
+        ctx.lineTo(outerStartX, outerStartY);
+        const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;
+        const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;
+        ctx.lineTo(outerEndX, outerEndY);
+    }
+    ctx.closePath();
+}
+function drawArc(ctx, element, offset, spacing, circular) {
+    const { fullCircles , startAngle , circumference  } = element;
+    let endAngle = element.endAngle;
+    if (fullCircles) {
+        pathArc(ctx, element, offset, spacing, endAngle, circular);
+        for(let i = 0; i < fullCircles; ++i){
+            ctx.fill();
+        }
+        if (!isNaN(circumference)) {
+            endAngle = startAngle + (circumference % TAU || TAU);
+        }
+    }
+    pathArc(ctx, element, offset, spacing, endAngle, circular);
+    ctx.fill();
+    return endAngle;
+}
+function drawBorder(ctx, element, offset, spacing, circular) {
+    const { fullCircles , startAngle , circumference , options  } = element;
+    const { borderWidth , borderJoinStyle , borderDash , borderDashOffset , borderRadius  } = options;
+    const inner = options.borderAlign === 'inner';
+    if (!borderWidth) {
+        return;
+    }
+    ctx.setLineDash(borderDash || []);
+    ctx.lineDashOffset = borderDashOffset;
+    if (inner) {
+        ctx.lineWidth = borderWidth * 2;
+        ctx.lineJoin = borderJoinStyle || 'round';
+    } else {
+        ctx.lineWidth = borderWidth;
+        ctx.lineJoin = borderJoinStyle || 'bevel';
+    }
+    let endAngle = element.endAngle;
+    if (fullCircles) {
+        pathArc(ctx, element, offset, spacing, endAngle, circular);
+        for(let i = 0; i < fullCircles; ++i){
+            ctx.stroke();
+        }
+        if (!isNaN(circumference)) {
+            endAngle = startAngle + (circumference % TAU || TAU);
+        }
+    }
+    if (inner) {
+        clipArc(ctx, element, endAngle);
+    }
+    if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {
+        clipSelf(ctx, element, endAngle);
+    }
+    if (!fullCircles) {
+        pathArc(ctx, element, offset, spacing, endAngle, circular);
+        ctx.stroke();
+    }
+}
+class ArcElement extends Element {
+    static id = 'arc';
+    static defaults = {
+        borderAlign: 'center',
+        borderColor: '#fff',
+        borderDash: [],
+        borderDashOffset: 0,
+        borderJoinStyle: undefined,
+        borderRadius: 0,
+        borderWidth: 2,
+        offset: 0,
+        spacing: 0,
+        angle: undefined,
+        circular: true,
+        selfJoin: false
+    };
+    static defaultRoutes = {
+        backgroundColor: 'backgroundColor'
+    };
+    static descriptors = {
+        _scriptable: true,
+        _indexable: (name)=>name !== 'borderDash'
+    };
+    circumference;
+    endAngle;
+    fullCircles;
+    innerRadius;
+    outerRadius;
+    pixelMargin;
+    startAngle;
+    constructor(cfg){
+        super();
+        this.options = undefined;
+        this.circumference = undefined;
+        this.startAngle = undefined;
+        this.endAngle = undefined;
+        this.innerRadius = undefined;
+        this.outerRadius = undefined;
+        this.pixelMargin = 0;
+        this.fullCircles = 0;
+        if (cfg) {
+            Object.assign(this, cfg);
+        }
+    }
+    inRange(chartX, chartY, useFinalPosition) {
+        const point = this.getProps([
+            'x',
+            'y'
+        ], useFinalPosition);
+        const { angle , distance  } = getAngleFromPoint(point, {
+            x: chartX,
+            y: chartY
+        });
+        const { startAngle , endAngle , innerRadius , outerRadius , circumference  } = this.getProps([
+            'startAngle',
+            'endAngle',
+            'innerRadius',
+            'outerRadius',
+            'circumference'
+        ], useFinalPosition);
+        const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;
+        const _circumference = valueOrDefault(circumference, endAngle - startAngle);
+        const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;
+        const betweenAngles = _circumference >= TAU || nonZeroBetween;
+        const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);
+        return betweenAngles && withinRadius;
+    }
+    getCenterPoint(useFinalPosition) {
+        const { x , y , startAngle , endAngle , innerRadius , outerRadius  } = this.getProps([
+            'x',
+            'y',
+            'startAngle',
+            'endAngle',
+            'innerRadius',
+            'outerRadius'
+        ], useFinalPosition);
+        const { offset , spacing  } = this.options;
+        const halfAngle = (startAngle + endAngle) / 2;
+        const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;
+        return {
+            x: x + Math.cos(halfAngle) * halfRadius,
+            y: y + Math.sin(halfAngle) * halfRadius
+        };
+    }
+    tooltipPosition(useFinalPosition) {
+        return this.getCenterPoint(useFinalPosition);
+    }
+    draw(ctx) {
+        const { options , circumference  } = this;
+        const offset = (options.offset || 0) / 4;
+        const spacing = (options.spacing || 0) / 2;
+        const circular = options.circular;
+        this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;
+        this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;
+        if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {
+            return;
+        }
+        ctx.save();
+        const halfAngle = (this.startAngle + this.endAngle) / 2;
+        ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);
+        const fix = 1 - Math.sin(Math.min(PI, circumference || 0));
+        const radiusOffset = offset * fix;
+        ctx.fillStyle = options.backgroundColor;
+        ctx.strokeStyle = options.borderColor;
+        drawArc(ctx, this, radiusOffset, spacing, circular);
+        drawBorder(ctx, this, radiusOffset, spacing, circular);
+        ctx.restore();
+    }
+}
+
+function setStyle(ctx, options, style = options) {
+    ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);
+    ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));
+    ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);
+    ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);
+    ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);
+    ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);
+}
+function lineTo(ctx, previous, target) {
+    ctx.lineTo(target.x, target.y);
+}
+ function getLineMethod(options) {
+    if (options.stepped) {
+        return _steppedLineTo;
+    }
+    if (options.tension || options.cubicInterpolationMode === 'monotone') {
+        return _bezierCurveTo;
+    }
+    return lineTo;
+}
+function pathVars(points, segment, params = {}) {
+    const count = points.length;
+    const { start: paramsStart = 0 , end: paramsEnd = count - 1  } = params;
+    const { start: segmentStart , end: segmentEnd  } = segment;
+    const start = Math.max(paramsStart, segmentStart);
+    const end = Math.min(paramsEnd, segmentEnd);
+    const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;
+    return {
+        count,
+        start,
+        loop: segment.loop,
+        ilen: end < start && !outside ? count + end - start : end - start
+    };
+}
+ function pathSegment(ctx, line, segment, params) {
+    const { points , options  } = line;
+    const { count , start , loop , ilen  } = pathVars(points, segment, params);
+    const lineMethod = getLineMethod(options);
+    let { move =true , reverse  } = params || {};
+    let i, point, prev;
+    for(i = 0; i <= ilen; ++i){
+        point = points[(start + (reverse ? ilen - i : i)) % count];
+        if (point.skip) {
+            continue;
+        } else if (move) {
+            ctx.moveTo(point.x, point.y);
+            move = false;
+        } else {
+            lineMethod(ctx, prev, point, reverse, options.stepped);
+        }
+        prev = point;
+    }
+    if (loop) {
+        point = points[(start + (reverse ? ilen : 0)) % count];
+        lineMethod(ctx, prev, point, reverse, options.stepped);
+    }
+    return !!loop;
+}
+ function fastPathSegment(ctx, line, segment, params) {
+    const points = line.points;
+    const { count , start , ilen  } = pathVars(points, segment, params);
+    const { move =true , reverse  } = params || {};
+    let avgX = 0;
+    let countX = 0;
+    let i, point, prevX, minY, maxY, lastY;
+    const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;
+    const drawX = ()=>{
+        if (minY !== maxY) {
+            ctx.lineTo(avgX, maxY);
+            ctx.lineTo(avgX, minY);
+            ctx.lineTo(avgX, lastY);
+        }
+    };
+    if (move) {
+        point = points[pointIndex(0)];
+        ctx.moveTo(point.x, point.y);
+    }
+    for(i = 0; i <= ilen; ++i){
+        point = points[pointIndex(i)];
+        if (point.skip) {
+            continue;
+        }
+        const x = point.x;
+        const y = point.y;
+        const truncX = x | 0;
+        if (truncX === prevX) {
+            if (y < minY) {
+                minY = y;
+            } else if (y > maxY) {
+                maxY = y;
+            }
+            avgX = (countX * avgX + x) / ++countX;
+        } else {
+            drawX();
+            ctx.lineTo(x, y);
+            prevX = truncX;
+            countX = 0;
+            minY = maxY = y;
+        }
+        lastY = y;
+    }
+    drawX();
+}
+ function _getSegmentMethod(line) {
+    const opts = line.options;
+    const borderDash = opts.borderDash && opts.borderDash.length;
+    const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;
+    return useFastPath ? fastPathSegment : pathSegment;
+}
+ function _getInterpolationMethod(options) {
+    if (options.stepped) {
+        return _steppedInterpolation;
+    }
+    if (options.tension || options.cubicInterpolationMode === 'monotone') {
+        return _bezierInterpolation;
+    }
+    return _pointInLine;
+}
+function strokePathWithCache(ctx, line, start, count) {
+    let path = line._path;
+    if (!path) {
+        path = line._path = new Path2D();
+        if (line.path(path, start, count)) {
+            path.closePath();
+        }
+    }
+    setStyle(ctx, line.options);
+    ctx.stroke(path);
+}
+function strokePathDirect(ctx, line, start, count) {
+    const { segments , options  } = line;
+    const segmentMethod = _getSegmentMethod(line);
+    for (const segment of segments){
+        setStyle(ctx, options, segment.style);
+        ctx.beginPath();
+        if (segmentMethod(ctx, line, segment, {
+            start,
+            end: start + count - 1
+        })) {
+            ctx.closePath();
+        }
+        ctx.stroke();
+    }
+}
+const usePath2D = typeof Path2D === 'function';
+function draw(ctx, line, start, count) {
+    if (usePath2D && !line.options.segment) {
+        strokePathWithCache(ctx, line, start, count);
+    } else {
+        strokePathDirect(ctx, line, start, count);
+    }
+}
+class LineElement extends Element {
+    static id = 'line';
+ static defaults = {
+        borderCapStyle: 'butt',
+        borderDash: [],
+        borderDashOffset: 0,
+        borderJoinStyle: 'miter',
+        borderWidth: 3,
+        capBezierPoints: true,
+        cubicInterpolationMode: 'default',
+        fill: false,
+        spanGaps: false,
+        stepped: false,
+        tension: 0
+    };
+ static defaultRoutes = {
+        backgroundColor: 'backgroundColor',
+        borderColor: 'borderColor'
+    };
+    static descriptors = {
+        _scriptable: true,
+        _indexable: (name)=>name !== 'borderDash' && name !== 'fill'
+    };
+    constructor(cfg){
+        super();
+        this.animated = true;
+        this.options = undefined;
+        this._chart = undefined;
+        this._loop = undefined;
+        this._fullLoop = undefined;
+        this._path = undefined;
+        this._points = undefined;
+        this._segments = undefined;
+        this._decimated = false;
+        this._pointsUpdated = false;
+        this._datasetIndex = undefined;
+        if (cfg) {
+            Object.assign(this, cfg);
+        }
+    }
+    updateControlPoints(chartArea, indexAxis) {
+        const options = this.options;
+        if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {
+            const loop = options.spanGaps ? this._loop : this._fullLoop;
+            _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);
+            this._pointsUpdated = true;
+        }
+    }
+    set points(points) {
+        this._points = points;
+        delete this._segments;
+        delete this._path;
+        this._pointsUpdated = false;
+    }
+    get points() {
+        return this._points;
+    }
+    get segments() {
+        return this._segments || (this._segments = _computeSegments(this, this.options.segment));
+    }
+ first() {
+        const segments = this.segments;
+        const points = this.points;
+        return segments.length && points[segments[0].start];
+    }
+ last() {
+        const segments = this.segments;
+        const points = this.points;
+        const count = segments.length;
+        return count && points[segments[count - 1].end];
+    }
+ interpolate(point, property) {
+        const options = this.options;
+        const value = point[property];
+        const points = this.points;
+        const segments = _boundSegments(this, {
+            property,
+            start: value,
+            end: value
+        });
+        if (!segments.length) {
+            return;
+        }
+        const result = [];
+        const _interpolate = _getInterpolationMethod(options);
+        let i, ilen;
+        for(i = 0, ilen = segments.length; i < ilen; ++i){
+            const { start , end  } = segments[i];
+            const p1 = points[start];
+            const p2 = points[end];
+            if (p1 === p2) {
+                result.push(p1);
+                continue;
+            }
+            const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));
+            const interpolated = _interpolate(p1, p2, t, options.stepped);
+            interpolated[property] = point[property];
+            result.push(interpolated);
+        }
+        return result.length === 1 ? result[0] : result;
+    }
+ pathSegment(ctx, segment, params) {
+        const segmentMethod = _getSegmentMethod(this);
+        return segmentMethod(ctx, this, segment, params);
+    }
+ path(ctx, start, count) {
+        const segments = this.segments;
+        const segmentMethod = _getSegmentMethod(this);
+        let loop = this._loop;
+        start = start || 0;
+        count = count || this.points.length - start;
+        for (const segment of segments){
+            loop &= segmentMethod(ctx, this, segment, {
+                start,
+                end: start + count - 1
+            });
+        }
+        return !!loop;
+    }
+ draw(ctx, chartArea, start, count) {
+        const options = this.options || {};
+        const points = this.points || [];
+        if (points.length && options.borderWidth) {
+            ctx.save();
+            draw(ctx, this, start, count);
+            ctx.restore();
+        }
+        if (this.animated) {
+            this._pointsUpdated = false;
+            this._path = undefined;
+        }
+    }
+}
+
+function inRange$1(el, pos, axis, useFinalPosition) {
+    const options = el.options;
+    const { [axis]: value  } = el.getProps([
+        axis
+    ], useFinalPosition);
+    return Math.abs(pos - value) < options.radius + options.hitRadius;
+}
+class PointElement extends Element {
+    static id = 'point';
+    parsed;
+    skip;
+    stop;
+    /**
+   * @type {any}
+   */ static defaults = {
+        borderWidth: 1,
+        hitRadius: 1,
+        hoverBorderWidth: 1,
+        hoverRadius: 4,
+        pointStyle: 'circle',
+        radius: 3,
+        rotation: 0
+    };
+    /**
+   * @type {any}
+   */ static defaultRoutes = {
+        backgroundColor: 'backgroundColor',
+        borderColor: 'borderColor'
+    };
+    constructor(cfg){
+        super();
+        this.options = undefined;
+        this.parsed = undefined;
+        this.skip = undefined;
+        this.stop = undefined;
+        if (cfg) {
+            Object.assign(this, cfg);
+        }
+    }
+    inRange(mouseX, mouseY, useFinalPosition) {
+        const options = this.options;
+        const { x , y  } = this.getProps([
+            'x',
+            'y'
+        ], useFinalPosition);
+        return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);
+    }
+    inXRange(mouseX, useFinalPosition) {
+        return inRange$1(this, mouseX, 'x', useFinalPosition);
+    }
+    inYRange(mouseY, useFinalPosition) {
+        return inRange$1(this, mouseY, 'y', useFinalPosition);
+    }
+    getCenterPoint(useFinalPosition) {
+        const { x , y  } = this.getProps([
+            'x',
+            'y'
+        ], useFinalPosition);
+        return {
+            x,
+            y
+        };
+    }
+    size(options) {
+        options = options || this.options || {};
+        let radius = options.radius || 0;
+        radius = Math.max(radius, radius && options.hoverRadius || 0);
+        const borderWidth = radius && options.borderWidth || 0;
+        return (radius + borderWidth) * 2;
+    }
+    draw(ctx, area) {
+        const options = this.options;
+        if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {
+            return;
+        }
+        ctx.strokeStyle = options.borderColor;
+        ctx.lineWidth = options.borderWidth;
+        ctx.fillStyle = options.backgroundColor;
+        drawPoint(ctx, options, this.x, this.y);
+    }
+    getRange() {
+        const options = this.options || {};
+        // @ts-expect-error Fallbacks should never be hit in practice
+        return options.radius + options.hitRadius;
+    }
+}
+
+function getBarBounds(bar, useFinalPosition) {
+    const { x , y , base , width , height  } =  bar.getProps([
+        'x',
+        'y',
+        'base',
+        'width',
+        'height'
+    ], useFinalPosition);
+    let left, right, top, bottom, half;
+    if (bar.horizontal) {
+        half = height / 2;
+        left = Math.min(x, base);
+        right = Math.max(x, base);
+        top = y - half;
+        bottom = y + half;
+    } else {
+        half = width / 2;
+        left = x - half;
+        right = x + half;
+        top = Math.min(y, base);
+        bottom = Math.max(y, base);
+    }
+    return {
+        left,
+        top,
+        right,
+        bottom
+    };
+}
+function skipOrLimit(skip, value, min, max) {
+    return skip ? 0 : _limitValue(value, min, max);
+}
+function parseBorderWidth(bar, maxW, maxH) {
+    const value = bar.options.borderWidth;
+    const skip = bar.borderSkipped;
+    const o = toTRBL(value);
+    return {
+        t: skipOrLimit(skip.top, o.top, 0, maxH),
+        r: skipOrLimit(skip.right, o.right, 0, maxW),
+        b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),
+        l: skipOrLimit(skip.left, o.left, 0, maxW)
+    };
+}
+function parseBorderRadius(bar, maxW, maxH) {
+    const { enableBorderRadius  } = bar.getProps([
+        'enableBorderRadius'
+    ]);
+    const value = bar.options.borderRadius;
+    const o = toTRBLCorners(value);
+    const maxR = Math.min(maxW, maxH);
+    const skip = bar.borderSkipped;
+    const enableBorder = enableBorderRadius || isObject(value);
+    return {
+        topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),
+        topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),
+        bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),
+        bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)
+    };
+}
+function boundingRects(bar) {
+    const bounds = getBarBounds(bar);
+    const width = bounds.right - bounds.left;
+    const height = bounds.bottom - bounds.top;
+    const border = parseBorderWidth(bar, width / 2, height / 2);
+    const radius = parseBorderRadius(bar, width / 2, height / 2);
+    return {
+        outer: {
+            x: bounds.left,
+            y: bounds.top,
+            w: width,
+            h: height,
+            radius
+        },
+        inner: {
+            x: bounds.left + border.l,
+            y: bounds.top + border.t,
+            w: width - border.l - border.r,
+            h: height - border.t - border.b,
+            radius: {
+                topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),
+                topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),
+                bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),
+                bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))
+            }
+        }
+    };
+}
+function inRange(bar, x, y, useFinalPosition) {
+    const skipX = x === null;
+    const skipY = y === null;
+    const skipBoth = skipX && skipY;
+    const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);
+    return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));
+}
+function hasRadius(radius) {
+    return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;
+}
+ function addNormalRectPath(ctx, rect) {
+    ctx.rect(rect.x, rect.y, rect.w, rect.h);
+}
+function inflateRect(rect, amount, refRect = {}) {
+    const x = rect.x !== refRect.x ? -amount : 0;
+    const y = rect.y !== refRect.y ? -amount : 0;
+    const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;
+    const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;
+    return {
+        x: rect.x + x,
+        y: rect.y + y,
+        w: rect.w + w,
+        h: rect.h + h,
+        radius: rect.radius
+    };
+}
+class BarElement extends Element {
+    static id = 'bar';
+ static defaults = {
+        borderSkipped: 'start',
+        borderWidth: 0,
+        borderRadius: 0,
+        inflateAmount: 'auto',
+        pointStyle: undefined
+    };
+ static defaultRoutes = {
+        backgroundColor: 'backgroundColor',
+        borderColor: 'borderColor'
+    };
+    constructor(cfg){
+        super();
+        this.options = undefined;
+        this.horizontal = undefined;
+        this.base = undefined;
+        this.width = undefined;
+        this.height = undefined;
+        this.inflateAmount = undefined;
+        if (cfg) {
+            Object.assign(this, cfg);
+        }
+    }
+    draw(ctx) {
+        const { inflateAmount , options: { borderColor , backgroundColor  }  } = this;
+        const { inner , outer  } = boundingRects(this);
+        const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;
+        ctx.save();
+        if (outer.w !== inner.w || outer.h !== inner.h) {
+            ctx.beginPath();
+            addRectPath(ctx, inflateRect(outer, inflateAmount, inner));
+            ctx.clip();
+            addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));
+            ctx.fillStyle = borderColor;
+            ctx.fill('evenodd');
+        }
+        ctx.beginPath();
+        addRectPath(ctx, inflateRect(inner, inflateAmount));
+        ctx.fillStyle = backgroundColor;
+        ctx.fill();
+        ctx.restore();
+    }
+    inRange(mouseX, mouseY, useFinalPosition) {
+        return inRange(this, mouseX, mouseY, useFinalPosition);
+    }
+    inXRange(mouseX, useFinalPosition) {
+        return inRange(this, mouseX, null, useFinalPosition);
+    }
+    inYRange(mouseY, useFinalPosition) {
+        return inRange(this, null, mouseY, useFinalPosition);
+    }
+    getCenterPoint(useFinalPosition) {
+        const { x , y , base , horizontal  } =  this.getProps([
+            'x',
+            'y',
+            'base',
+            'horizontal'
+        ], useFinalPosition);
+        return {
+            x: horizontal ? (x + base) / 2 : x,
+            y: horizontal ? y : (y + base) / 2
+        };
+    }
+    getRange(axis) {
+        return axis === 'x' ? this.width / 2 : this.height / 2;
+    }
+}
+
+var elements = /*#__PURE__*/Object.freeze({
+__proto__: null,
+ArcElement: ArcElement,
+BarElement: BarElement,
+LineElement: LineElement,
+PointElement: PointElement
+});
+
+const BORDER_COLORS = [
+    'rgb(54, 162, 235)',
+    'rgb(255, 99, 132)',
+    'rgb(255, 159, 64)',
+    'rgb(255, 205, 86)',
+    'rgb(75, 192, 192)',
+    'rgb(153, 102, 255)',
+    'rgb(201, 203, 207)' // grey
+];
+// Border colors with 50% transparency
+const BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));
+function getBorderColor(i) {
+    return BORDER_COLORS[i % BORDER_COLORS.length];
+}
+function getBackgroundColor(i) {
+    return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];
+}
+function colorizeDefaultDataset(dataset, i) {
+    dataset.borderColor = getBorderColor(i);
+    dataset.backgroundColor = getBackgroundColor(i);
+    return ++i;
+}
+function colorizeDoughnutDataset(dataset, i) {
+    dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));
+    return i;
+}
+function colorizePolarAreaDataset(dataset, i) {
+    dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));
+    return i;
+}
+function getColorizer(chart) {
+    let i = 0;
+    return (dataset, datasetIndex)=>{
+        const controller = chart.getDatasetMeta(datasetIndex).controller;
+        if (controller instanceof DoughnutController) {
+            i = colorizeDoughnutDataset(dataset, i);
+        } else if (controller instanceof PolarAreaController) {
+            i = colorizePolarAreaDataset(dataset, i);
+        } else if (controller) {
+            i = colorizeDefaultDataset(dataset, i);
+        }
+    };
+}
+function containsColorsDefinitions(descriptors) {
+    let k;
+    for(k in descriptors){
+        if (descriptors[k].borderColor || descriptors[k].backgroundColor) {
+            return true;
+        }
+    }
+    return false;
+}
+function containsColorsDefinition(descriptor) {
+    return descriptor && (descriptor.borderColor || descriptor.backgroundColor);
+}
+function containsDefaultColorsDefenitions() {
+    return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';
+}
+var plugin_colors = {
+    id: 'colors',
+    defaults: {
+        enabled: true,
+        forceOverride: false
+    },
+    beforeLayout (chart, _args, options) {
+        if (!options.enabled) {
+            return;
+        }
+        const { data: { datasets  } , options: chartOptions  } = chart.config;
+        const { elements  } = chartOptions;
+        const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();
+        if (!options.forceOverride && containsColorDefenition) {
+            return;
+        }
+        const colorizer = getColorizer(chart);
+        datasets.forEach(colorizer);
+    }
+};
+
+function lttbDecimation(data, start, count, availableWidth, options) {
+ const samples = options.samples || availableWidth;
+    if (samples >= count) {
+        return data.slice(start, start + count);
+    }
+    const decimated = [];
+    const bucketWidth = (count - 2) / (samples - 2);
+    let sampledIndex = 0;
+    const endIndex = start + count - 1;
+    let a = start;
+    let i, maxAreaPoint, maxArea, area, nextA;
+    decimated[sampledIndex++] = data[a];
+    for(i = 0; i < samples - 2; i++){
+        let avgX = 0;
+        let avgY = 0;
+        let j;
+        const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;
+        const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;
+        const avgRangeLength = avgRangeEnd - avgRangeStart;
+        for(j = avgRangeStart; j < avgRangeEnd; j++){
+            avgX += data[j].x;
+            avgY += data[j].y;
+        }
+        avgX /= avgRangeLength;
+        avgY /= avgRangeLength;
+        const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;
+        const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;
+        const { x: pointAx , y: pointAy  } = data[a];
+        maxArea = area = -1;
+        for(j = rangeOffs; j < rangeTo; j++){
+            area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));
+            if (area > maxArea) {
+                maxArea = area;
+                maxAreaPoint = data[j];
+                nextA = j;
+            }
+        }
+        decimated[sampledIndex++] = maxAreaPoint;
+        a = nextA;
+    }
+    decimated[sampledIndex++] = data[endIndex];
+    return decimated;
+}
+function minMaxDecimation(data, start, count, availableWidth) {
+    let avgX = 0;
+    let countX = 0;
+    let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;
+    const decimated = [];
+    const endIndex = start + count - 1;
+    const xMin = data[start].x;
+    const xMax = data[endIndex].x;
+    const dx = xMax - xMin;
+    for(i = start; i < start + count; ++i){
+        point = data[i];
+        x = (point.x - xMin) / dx * availableWidth;
+        y = point.y;
+        const truncX = x | 0;
+        if (truncX === prevX) {
+            if (y < minY) {
+                minY = y;
+                minIndex = i;
+            } else if (y > maxY) {
+                maxY = y;
+                maxIndex = i;
+            }
+            avgX = (countX * avgX + point.x) / ++countX;
+        } else {
+            const lastIndex = i - 1;
+            if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {
+                const intermediateIndex1 = Math.min(minIndex, maxIndex);
+                const intermediateIndex2 = Math.max(minIndex, maxIndex);
+                if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {
+                    decimated.push({
+                        ...data[intermediateIndex1],
+                        x: avgX
+                    });
+                }
+                if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {
+                    decimated.push({
+                        ...data[intermediateIndex2],
+                        x: avgX
+                    });
+                }
+            }
+            if (i > 0 && lastIndex !== startIndex) {
+                decimated.push(data[lastIndex]);
+            }
+            decimated.push(point);
+            prevX = truncX;
+            countX = 0;
+            minY = maxY = y;
+            minIndex = maxIndex = startIndex = i;
+        }
+    }
+    return decimated;
+}
+function cleanDecimatedDataset(dataset) {
+    if (dataset._decimated) {
+        const data = dataset._data;
+        delete dataset._decimated;
+        delete dataset._data;
+        Object.defineProperty(dataset, 'data', {
+            configurable: true,
+            enumerable: true,
+            writable: true,
+            value: data
+        });
+    }
+}
+function cleanDecimatedData(chart) {
+    chart.data.datasets.forEach((dataset)=>{
+        cleanDecimatedDataset(dataset);
+    });
+}
+function getStartAndCountOfVisiblePointsSimplified(meta, points) {
+    const pointCount = points.length;
+    let start = 0;
+    let count;
+    const { iScale  } = meta;
+    const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();
+    if (minDefined) {
+        start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);
+    }
+    if (maxDefined) {
+        count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;
+    } else {
+        count = pointCount - start;
+    }
+    return {
+        start,
+        count
+    };
+}
+var plugin_decimation = {
+    id: 'decimation',
+    defaults: {
+        algorithm: 'min-max',
+        enabled: false
+    },
+    beforeElementsUpdate: (chart, args, options)=>{
+        if (!options.enabled) {
+            cleanDecimatedData(chart);
+            return;
+        }
+        const availableWidth = chart.width;
+        chart.data.datasets.forEach((dataset, datasetIndex)=>{
+            const { _data , indexAxis  } = dataset;
+            const meta = chart.getDatasetMeta(datasetIndex);
+            const data = _data || dataset.data;
+            if (resolve([
+                indexAxis,
+                chart.options.indexAxis
+            ]) === 'y') {
+                return;
+            }
+            if (!meta.controller.supportsDecimation) {
+                return;
+            }
+            const xAxis = chart.scales[meta.xAxisID];
+            if (xAxis.type !== 'linear' && xAxis.type !== 'time') {
+                return;
+            }
+            if (chart.options.parsing) {
+                return;
+            }
+            let { start , count  } = getStartAndCountOfVisiblePointsSimplified(meta, data);
+            const threshold = options.threshold || 4 * availableWidth;
+            if (count <= threshold) {
+                cleanDecimatedDataset(dataset);
+                return;
+            }
+            if (isNullOrUndef(_data)) {
+                dataset._data = data;
+                delete dataset.data;
+                Object.defineProperty(dataset, 'data', {
+                    configurable: true,
+                    enumerable: true,
+                    get: function() {
+                        return this._decimated;
+                    },
+                    set: function(d) {
+                        this._data = d;
+                    }
+                });
+            }
+            let decimated;
+            switch(options.algorithm){
+                case 'lttb':
+                    decimated = lttbDecimation(data, start, count, availableWidth, options);
+                    break;
+                case 'min-max':
+                    decimated = minMaxDecimation(data, start, count, availableWidth);
+                    break;
+                default:
+                    throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);
+            }
+            dataset._decimated = decimated;
+        });
+    },
+    destroy (chart) {
+        cleanDecimatedData(chart);
+    }
+};
+
+function _segments(line, target, property) {
+    const segments = line.segments;
+    const points = line.points;
+    const tpoints = target.points;
+    const parts = [];
+    for (const segment of segments){
+        let { start , end  } = segment;
+        end = _findSegmentEnd(start, end, points);
+        const bounds = _getBounds(property, points[start], points[end], segment.loop);
+        if (!target.segments) {
+            parts.push({
+                source: segment,
+                target: bounds,
+                start: points[start],
+                end: points[end]
+            });
+            continue;
+        }
+        const targetSegments = _boundSegments(target, bounds);
+        for (const tgt of targetSegments){
+            const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);
+            const fillSources = _boundSegment(segment, points, subBounds);
+            for (const fillSource of fillSources){
+                parts.push({
+                    source: fillSource,
+                    target: tgt,
+                    start: {
+                        [property]: _getEdge(bounds, subBounds, 'start', Math.max)
+                    },
+                    end: {
+                        [property]: _getEdge(bounds, subBounds, 'end', Math.min)
+                    }
+                });
+            }
+        }
+    }
+    return parts;
+}
+function _getBounds(property, first, last, loop) {
+    if (loop) {
+        return;
+    }
+    let start = first[property];
+    let end = last[property];
+    if (property === 'angle') {
+        start = _normalizeAngle(start);
+        end = _normalizeAngle(end);
+    }
+    return {
+        property,
+        start,
+        end
+    };
+}
+function _pointsFromSegments(boundary, line) {
+    const { x =null , y =null  } = boundary || {};
+    const linePoints = line.points;
+    const points = [];
+    line.segments.forEach(({ start , end  })=>{
+        end = _findSegmentEnd(start, end, linePoints);
+        const first = linePoints[start];
+        const last = linePoints[end];
+        if (y !== null) {
+            points.push({
+                x: first.x,
+                y
+            });
+            points.push({
+                x: last.x,
+                y
+            });
+        } else if (x !== null) {
+            points.push({
+                x,
+                y: first.y
+            });
+            points.push({
+                x,
+                y: last.y
+            });
+        }
+    });
+    return points;
+}
+function _findSegmentEnd(start, end, points) {
+    for(; end > start; end--){
+        const point = points[end];
+        if (!isNaN(point.x) && !isNaN(point.y)) {
+            break;
+        }
+    }
+    return end;
+}
+function _getEdge(a, b, prop, fn) {
+    if (a && b) {
+        return fn(a[prop], b[prop]);
+    }
+    return a ? a[prop] : b ? b[prop] : 0;
+}
+
+function _createBoundaryLine(boundary, line) {
+    let points = [];
+    let _loop = false;
+    if (isArray(boundary)) {
+        _loop = true;
+        points = boundary;
+    } else {
+        points = _pointsFromSegments(boundary, line);
+    }
+    return points.length ? new LineElement({
+        points,
+        options: {
+            tension: 0
+        },
+        _loop,
+        _fullLoop: _loop
+    }) : null;
+}
+function _shouldApplyFill(source) {
+    return source && source.fill !== false;
+}
+
+function _resolveTarget(sources, index, propagate) {
+    const source = sources[index];
+    let fill = source.fill;
+    const visited = [
+        index
+    ];
+    let target;
+    if (!propagate) {
+        return fill;
+    }
+    while(fill !== false && visited.indexOf(fill) === -1){
+        if (!isNumberFinite(fill)) {
+            return fill;
+        }
+        target = sources[fill];
+        if (!target) {
+            return false;
+        }
+        if (target.visible) {
+            return fill;
+        }
+        visited.push(fill);
+        fill = target.fill;
+    }
+    return false;
+}
+ function _decodeFill(line, index, count) {
+     const fill = parseFillOption(line);
+    if (isObject(fill)) {
+        return isNaN(fill.value) ? false : fill;
+    }
+    let target = parseFloat(fill);
+    if (isNumberFinite(target) && Math.floor(target) === target) {
+        return decodeTargetIndex(fill[0], index, target, count);
+    }
+    return [
+        'origin',
+        'start',
+        'end',
+        'stack',
+        'shape'
+    ].indexOf(fill) >= 0 && fill;
+}
+function decodeTargetIndex(firstCh, index, target, count) {
+    if (firstCh === '-' || firstCh === '+') {
+        target = index + target;
+    }
+    if (target === index || target < 0 || target >= count) {
+        return false;
+    }
+    return target;
+}
+ function _getTargetPixel(fill, scale) {
+    let pixel = null;
+    if (fill === 'start') {
+        pixel = scale.bottom;
+    } else if (fill === 'end') {
+        pixel = scale.top;
+    } else if (isObject(fill)) {
+        pixel = scale.getPixelForValue(fill.value);
+    } else if (scale.getBasePixel) {
+        pixel = scale.getBasePixel();
+    }
+    return pixel;
+}
+ function _getTargetValue(fill, scale, startValue) {
+    let value;
+    if (fill === 'start') {
+        value = startValue;
+    } else if (fill === 'end') {
+        value = scale.options.reverse ? scale.min : scale.max;
+    } else if (isObject(fill)) {
+        value = fill.value;
+    } else {
+        value = scale.getBaseValue();
+    }
+    return value;
+}
+ function parseFillOption(line) {
+    const options = line.options;
+    const fillOption = options.fill;
+    let fill = valueOrDefault(fillOption && fillOption.target, fillOption);
+    if (fill === undefined) {
+        fill = !!options.backgroundColor;
+    }
+    if (fill === false || fill === null) {
+        return false;
+    }
+    if (fill === true) {
+        return 'origin';
+    }
+    return fill;
+}
+
+function _buildStackLine(source) {
+    const { scale , index , line  } = source;
+    const points = [];
+    const segments = line.segments;
+    const sourcePoints = line.points;
+    const linesBelow = getLinesBelow(scale, index);
+    linesBelow.push(_createBoundaryLine({
+        x: null,
+        y: scale.bottom
+    }, line));
+    for(let i = 0; i < segments.length; i++){
+        const segment = segments[i];
+        for(let j = segment.start; j <= segment.end; j++){
+            addPointsBelow(points, sourcePoints[j], linesBelow);
+        }
+    }
+    return new LineElement({
+        points,
+        options: {}
+    });
+}
+ function getLinesBelow(scale, index) {
+    const below = [];
+    const metas = scale.getMatchingVisibleMetas('line');
+    for(let i = 0; i < metas.length; i++){
+        const meta = metas[i];
+        if (meta.index === index) {
+            break;
+        }
+        if (!meta.hidden) {
+            below.unshift(meta.dataset);
+        }
+    }
+    return below;
+}
+ function addPointsBelow(points, sourcePoint, linesBelow) {
+    const postponed = [];
+    for(let j = 0; j < linesBelow.length; j++){
+        const line = linesBelow[j];
+        const { first , last , point  } = findPoint(line, sourcePoint, 'x');
+        if (!point || first && last) {
+            continue;
+        }
+        if (first) {
+            postponed.unshift(point);
+        } else {
+            points.push(point);
+            if (!last) {
+                break;
+            }
+        }
+    }
+    points.push(...postponed);
+}
+ function findPoint(line, sourcePoint, property) {
+    const point = line.interpolate(sourcePoint, property);
+    if (!point) {
+        return {};
+    }
+    const pointValue = point[property];
+    const segments = line.segments;
+    const linePoints = line.points;
+    let first = false;
+    let last = false;
+    for(let i = 0; i < segments.length; i++){
+        const segment = segments[i];
+        const firstValue = linePoints[segment.start][property];
+        const lastValue = linePoints[segment.end][property];
+        if (_isBetween(pointValue, firstValue, lastValue)) {
+            first = pointValue === firstValue;
+            last = pointValue === lastValue;
+            break;
+        }
+    }
+    return {
+        first,
+        last,
+        point
+    };
+}
+
+class simpleArc {
+    constructor(opts){
+        this.x = opts.x;
+        this.y = opts.y;
+        this.radius = opts.radius;
+    }
+    pathSegment(ctx, bounds, opts) {
+        const { x , y , radius  } = this;
+        bounds = bounds || {
+            start: 0,
+            end: TAU
+        };
+        ctx.arc(x, y, radius, bounds.end, bounds.start, true);
+        return !opts.bounds;
+    }
+    interpolate(point) {
+        const { x , y , radius  } = this;
+        const angle = point.angle;
+        return {
+            x: x + Math.cos(angle) * radius,
+            y: y + Math.sin(angle) * radius,
+            angle
+        };
+    }
+}
+
+function _getTarget(source) {
+    const { chart , fill , line  } = source;
+    if (isNumberFinite(fill)) {
+        return getLineByIndex(chart, fill);
+    }
+    if (fill === 'stack') {
+        return _buildStackLine(source);
+    }
+    if (fill === 'shape') {
+        return true;
+    }
+    const boundary = computeBoundary(source);
+    if (boundary instanceof simpleArc) {
+        return boundary;
+    }
+    return _createBoundaryLine(boundary, line);
+}
+ function getLineByIndex(chart, index) {
+    const meta = chart.getDatasetMeta(index);
+    const visible = meta && chart.isDatasetVisible(index);
+    return visible ? meta.dataset : null;
+}
+function computeBoundary(source) {
+    const scale = source.scale || {};
+    if (scale.getPointPositionForValue) {
+        return computeCircularBoundary(source);
+    }
+    return computeLinearBoundary(source);
+}
+function computeLinearBoundary(source) {
+    const { scale ={} , fill  } = source;
+    const pixel = _getTargetPixel(fill, scale);
+    if (isNumberFinite(pixel)) {
+        const horizontal = scale.isHorizontal();
+        return {
+            x: horizontal ? pixel : null,
+            y: horizontal ? null : pixel
+        };
+    }
+    return null;
+}
+function computeCircularBoundary(source) {
+    const { scale , fill  } = source;
+    const options = scale.options;
+    const length = scale.getLabels().length;
+    const start = options.reverse ? scale.max : scale.min;
+    const value = _getTargetValue(fill, scale, start);
+    const target = [];
+    if (options.grid.circular) {
+        const center = scale.getPointPositionForValue(0, start);
+        return new simpleArc({
+            x: center.x,
+            y: center.y,
+            radius: scale.getDistanceFromCenterForValue(value)
+        });
+    }
+    for(let i = 0; i < length; ++i){
+        target.push(scale.getPointPositionForValue(i, value));
+    }
+    return target;
+}
+
+function _drawfill(ctx, source, area) {
+    const target = _getTarget(source);
+    const { chart , index , line , scale , axis  } = source;
+    const lineOpts = line.options;
+    const fillOption = lineOpts.fill;
+    const color = lineOpts.backgroundColor;
+    const { above =color , below =color  } = fillOption || {};
+    const meta = chart.getDatasetMeta(index);
+    const clip = getDatasetClipArea(chart, meta);
+    if (target && line.points.length) {
+        clipArea(ctx, area);
+        doFill(ctx, {
+            line,
+            target,
+            above,
+            below,
+            area,
+            scale,
+            axis,
+            clip
+        });
+        unclipArea(ctx);
+    }
+}
+function doFill(ctx, cfg) {
+    const { line , target , above , below , area , scale , clip  } = cfg;
+    const property = line._loop ? 'angle' : cfg.axis;
+    ctx.save();
+    let fillColor = below;
+    if (below !== above) {
+        if (property === 'x') {
+            clipVertical(ctx, target, area.top);
+            fill(ctx, {
+                line,
+                target,
+                color: above,
+                scale,
+                property,
+                clip
+            });
+            ctx.restore();
+            ctx.save();
+            clipVertical(ctx, target, area.bottom);
+        } else if (property === 'y') {
+            clipHorizontal(ctx, target, area.left);
+            fill(ctx, {
+                line,
+                target,
+                color: below,
+                scale,
+                property,
+                clip
+            });
+            ctx.restore();
+            ctx.save();
+            clipHorizontal(ctx, target, area.right);
+            fillColor = above;
+        }
+    }
+    fill(ctx, {
+        line,
+        target,
+        color: fillColor,
+        scale,
+        property,
+        clip
+    });
+    ctx.restore();
+}
+function clipVertical(ctx, target, clipY) {
+    const { segments , points  } = target;
+    let first = true;
+    let lineLoop = false;
+    ctx.beginPath();
+    for (const segment of segments){
+        const { start , end  } = segment;
+        const firstPoint = points[start];
+        const lastPoint = points[_findSegmentEnd(start, end, points)];
+        if (first) {
+            ctx.moveTo(firstPoint.x, firstPoint.y);
+            first = false;
+        } else {
+            ctx.lineTo(firstPoint.x, clipY);
+            ctx.lineTo(firstPoint.x, firstPoint.y);
+        }
+        lineLoop = !!target.pathSegment(ctx, segment, {
+            move: lineLoop
+        });
+        if (lineLoop) {
+            ctx.closePath();
+        } else {
+            ctx.lineTo(lastPoint.x, clipY);
+        }
+    }
+    ctx.lineTo(target.first().x, clipY);
+    ctx.closePath();
+    ctx.clip();
+}
+function clipHorizontal(ctx, target, clipX) {
+    const { segments , points  } = target;
+    let first = true;
+    let lineLoop = false;
+    ctx.beginPath();
+    for (const segment of segments){
+        const { start , end  } = segment;
+        const firstPoint = points[start];
+        const lastPoint = points[_findSegmentEnd(start, end, points)];
+        if (first) {
+            ctx.moveTo(firstPoint.x, firstPoint.y);
+            first = false;
+        } else {
+            ctx.lineTo(clipX, firstPoint.y);
+            ctx.lineTo(firstPoint.x, firstPoint.y);
+        }
+        lineLoop = !!target.pathSegment(ctx, segment, {
+            move: lineLoop
+        });
+        if (lineLoop) {
+            ctx.closePath();
+        } else {
+            ctx.lineTo(clipX, lastPoint.y);
+        }
+    }
+    ctx.lineTo(clipX, target.first().y);
+    ctx.closePath();
+    ctx.clip();
+}
+function fill(ctx, cfg) {
+    const { line , target , property , color , scale , clip  } = cfg;
+    const segments = _segments(line, target, property);
+    for (const { source: src , target: tgt , start , end  } of segments){
+        const { style: { backgroundColor =color  } = {}  } = src;
+        const notShape = target !== true;
+        ctx.save();
+        ctx.fillStyle = backgroundColor;
+        clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));
+        ctx.beginPath();
+        const lineLoop = !!line.pathSegment(ctx, src);
+        let loop;
+        if (notShape) {
+            if (lineLoop) {
+                ctx.closePath();
+            } else {
+                interpolatedLineTo(ctx, target, end, property);
+            }
+            const targetLoop = !!target.pathSegment(ctx, tgt, {
+                move: lineLoop,
+                reverse: true
+            });
+            loop = lineLoop && targetLoop;
+            if (!loop) {
+                interpolatedLineTo(ctx, target, start, property);
+            }
+        }
+        ctx.closePath();
+        ctx.fill(loop ? 'evenodd' : 'nonzero');
+        ctx.restore();
+    }
+}
+function clipBounds(ctx, scale, clip, bounds) {
+    const chartArea = scale.chart.chartArea;
+    const { property , start , end  } = bounds || {};
+    if (property === 'x' || property === 'y') {
+        let left, top, right, bottom;
+        if (property === 'x') {
+            left = start;
+            top = chartArea.top;
+            right = end;
+            bottom = chartArea.bottom;
+        } else {
+            left = chartArea.left;
+            top = start;
+            right = chartArea.right;
+            bottom = end;
+        }
+        ctx.beginPath();
+        if (clip) {
+            left = Math.max(left, clip.left);
+            right = Math.min(right, clip.right);
+            top = Math.max(top, clip.top);
+            bottom = Math.min(bottom, clip.bottom);
+        }
+        ctx.rect(left, top, right - left, bottom - top);
+        ctx.clip();
+    }
+}
+function interpolatedLineTo(ctx, target, point, property) {
+    const interpolatedPoint = target.interpolate(point, property);
+    if (interpolatedPoint) {
+        ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);
+    }
+}
+
+var index = {
+    id: 'filler',
+    afterDatasetsUpdate (chart, _args, options) {
+        const count = (chart.data.datasets || []).length;
+        const sources = [];
+        let meta, i, line, source;
+        for(i = 0; i < count; ++i){
+            meta = chart.getDatasetMeta(i);
+            line = meta.dataset;
+            source = null;
+            if (line && line.options && line instanceof LineElement) {
+                source = {
+                    visible: chart.isDatasetVisible(i),
+                    index: i,
+                    fill: _decodeFill(line, i, count),
+                    chart,
+                    axis: meta.controller.options.indexAxis,
+                    scale: meta.vScale,
+                    line
+                };
+            }
+            meta.$filler = source;
+            sources.push(source);
+        }
+        for(i = 0; i < count; ++i){
+            source = sources[i];
+            if (!source || source.fill === false) {
+                continue;
+            }
+            source.fill = _resolveTarget(sources, i, options.propagate);
+        }
+    },
+    beforeDraw (chart, _args, options) {
+        const draw = options.drawTime === 'beforeDraw';
+        const metasets = chart.getSortedVisibleDatasetMetas();
+        const area = chart.chartArea;
+        for(let i = metasets.length - 1; i >= 0; --i){
+            const source = metasets[i].$filler;
+            if (!source) {
+                continue;
+            }
+            source.line.updateControlPoints(area, source.axis);
+            if (draw && source.fill) {
+                _drawfill(chart.ctx, source, area);
+            }
+        }
+    },
+    beforeDatasetsDraw (chart, _args, options) {
+        if (options.drawTime !== 'beforeDatasetsDraw') {
+            return;
+        }
+        const metasets = chart.getSortedVisibleDatasetMetas();
+        for(let i = metasets.length - 1; i >= 0; --i){
+            const source = metasets[i].$filler;
+            if (_shouldApplyFill(source)) {
+                _drawfill(chart.ctx, source, chart.chartArea);
+            }
+        }
+    },
+    beforeDatasetDraw (chart, args, options) {
+        const source = args.meta.$filler;
+        if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {
+            return;
+        }
+        _drawfill(chart.ctx, source, chart.chartArea);
+    },
+    defaults: {
+        propagate: true,
+        drawTime: 'beforeDatasetDraw'
+    }
+};
+
+const getBoxSize = (labelOpts, fontSize)=>{
+    let { boxHeight =fontSize , boxWidth =fontSize  } = labelOpts;
+    if (labelOpts.usePointStyle) {
+        boxHeight = Math.min(boxHeight, fontSize);
+        boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);
+    }
+    return {
+        boxWidth,
+        boxHeight,
+        itemHeight: Math.max(fontSize, boxHeight)
+    };
+};
+const itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;
+class Legend extends Element {
+ constructor(config){
+        super();
+        this._added = false;
+        this.legendHitBoxes = [];
+ this._hoveredItem = null;
+        this.doughnutMode = false;
+        this.chart = config.chart;
+        this.options = config.options;
+        this.ctx = config.ctx;
+        this.legendItems = undefined;
+        this.columnSizes = undefined;
+        this.lineWidths = undefined;
+        this.maxHeight = undefined;
+        this.maxWidth = undefined;
+        this.top = undefined;
+        this.bottom = undefined;
+        this.left = undefined;
+        this.right = undefined;
+        this.height = undefined;
+        this.width = undefined;
+        this._margins = undefined;
+        this.position = undefined;
+        this.weight = undefined;
+        this.fullSize = undefined;
+    }
+    update(maxWidth, maxHeight, margins) {
+        this.maxWidth = maxWidth;
+        this.maxHeight = maxHeight;
+        this._margins = margins;
+        this.setDimensions();
+        this.buildLabels();
+        this.fit();
+    }
+    setDimensions() {
+        if (this.isHorizontal()) {
+            this.width = this.maxWidth;
+            this.left = this._margins.left;
+            this.right = this.width;
+        } else {
+            this.height = this.maxHeight;
+            this.top = this._margins.top;
+            this.bottom = this.height;
+        }
+    }
+    buildLabels() {
+        const labelOpts = this.options.labels || {};
+        let legendItems = callback(labelOpts.generateLabels, [
+            this.chart
+        ], this) || [];
+        if (labelOpts.filter) {
+            legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));
+        }
+        if (labelOpts.sort) {
+            legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));
+        }
+        if (this.options.reverse) {
+            legendItems.reverse();
+        }
+        this.legendItems = legendItems;
+    }
+    fit() {
+        const { options , ctx  } = this;
+        if (!options.display) {
+            this.width = this.height = 0;
+            return;
+        }
+        const labelOpts = options.labels;
+        const labelFont = toFont(labelOpts.font);
+        const fontSize = labelFont.size;
+        const titleHeight = this._computeTitleHeight();
+        const { boxWidth , itemHeight  } = getBoxSize(labelOpts, fontSize);
+        let width, height;
+        ctx.font = labelFont.string;
+        if (this.isHorizontal()) {
+            width = this.maxWidth;
+            height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;
+        } else {
+            height = this.maxHeight;
+            width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;
+        }
+        this.width = Math.min(width, options.maxWidth || this.maxWidth);
+        this.height = Math.min(height, options.maxHeight || this.maxHeight);
+    }
+ _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {
+        const { ctx , maxWidth , options: { labels: { padding  }  }  } = this;
+        const hitboxes = this.legendHitBoxes = [];
+        const lineWidths = this.lineWidths = [
+            0
+        ];
+        const lineHeight = itemHeight + padding;
+        let totalHeight = titleHeight;
+        ctx.textAlign = 'left';
+        ctx.textBaseline = 'middle';
+        let row = -1;
+        let top = -lineHeight;
+        this.legendItems.forEach((legendItem, i)=>{
+            const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;
+            if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {
+                totalHeight += lineHeight;
+                lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;
+                top += lineHeight;
+                row++;
+            }
+            hitboxes[i] = {
+                left: 0,
+                top,
+                row,
+                width: itemWidth,
+                height: itemHeight
+            };
+            lineWidths[lineWidths.length - 1] += itemWidth + padding;
+        });
+        return totalHeight;
+    }
+    _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {
+        const { ctx , maxHeight , options: { labels: { padding  }  }  } = this;
+        const hitboxes = this.legendHitBoxes = [];
+        const columnSizes = this.columnSizes = [];
+        const heightLimit = maxHeight - titleHeight;
+        let totalWidth = padding;
+        let currentColWidth = 0;
+        let currentColHeight = 0;
+        let left = 0;
+        let col = 0;
+        this.legendItems.forEach((legendItem, i)=>{
+            const { itemWidth , itemHeight  } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);
+            if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {
+                totalWidth += currentColWidth + padding;
+                columnSizes.push({
+                    width: currentColWidth,
+                    height: currentColHeight
+                });
+                left += currentColWidth + padding;
+                col++;
+                currentColWidth = currentColHeight = 0;
+            }
+            hitboxes[i] = {
+                left,
+                top: currentColHeight,
+                col,
+                width: itemWidth,
+                height: itemHeight
+            };
+            currentColWidth = Math.max(currentColWidth, itemWidth);
+            currentColHeight += itemHeight + padding;
+        });
+        totalWidth += currentColWidth;
+        columnSizes.push({
+            width: currentColWidth,
+            height: currentColHeight
+        });
+        return totalWidth;
+    }
+    adjustHitBoxes() {
+        if (!this.options.display) {
+            return;
+        }
+        const titleHeight = this._computeTitleHeight();
+        const { legendHitBoxes: hitboxes , options: { align , labels: { padding  } , rtl  }  } = this;
+        const rtlHelper = getRtlAdapter(rtl, this.left, this.width);
+        if (this.isHorizontal()) {
+            let row = 0;
+            let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
+            for (const hitbox of hitboxes){
+                if (row !== hitbox.row) {
+                    row = hitbox.row;
+                    left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);
+                }
+                hitbox.top += this.top + titleHeight + padding;
+                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);
+                left += hitbox.width + padding;
+            }
+        } else {
+            let col = 0;
+            let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
+            for (const hitbox of hitboxes){
+                if (hitbox.col !== col) {
+                    col = hitbox.col;
+                    top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
+                }
+                hitbox.top = top;
+                hitbox.left += this.left + padding;
+                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);
+                top += hitbox.height + padding;
+            }
+        }
+    }
+    isHorizontal() {
+        return this.options.position === 'top' || this.options.position === 'bottom';
+    }
+    draw() {
+        if (this.options.display) {
+            const ctx = this.ctx;
+            clipArea(ctx, this);
+            this._draw();
+            unclipArea(ctx);
+        }
+    }
+ _draw() {
+        const { options: opts , columnSizes , lineWidths , ctx  } = this;
+        const { align , labels: labelOpts  } = opts;
+        const defaultColor = defaults.color;
+        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
+        const labelFont = toFont(labelOpts.font);
+        const { padding  } = labelOpts;
+        const fontSize = labelFont.size;
+        const halfFontSize = fontSize / 2;
+        let cursor;
+        this.drawTitle();
+        ctx.textAlign = rtlHelper.textAlign('left');
+        ctx.textBaseline = 'middle';
+        ctx.lineWidth = 0.5;
+        ctx.font = labelFont.string;
+        const { boxWidth , boxHeight , itemHeight  } = getBoxSize(labelOpts, fontSize);
+        const drawLegendBox = function(x, y, legendItem) {
+            if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {
+                return;
+            }
+            ctx.save();
+            const lineWidth = valueOrDefault(legendItem.lineWidth, 1);
+            ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);
+            ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');
+            ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);
+            ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');
+            ctx.lineWidth = lineWidth;
+            ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);
+            ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));
+            if (labelOpts.usePointStyle) {
+                const drawOptions = {
+                    radius: boxHeight * Math.SQRT2 / 2,
+                    pointStyle: legendItem.pointStyle,
+                    rotation: legendItem.rotation,
+                    borderWidth: lineWidth
+                };
+                const centerX = rtlHelper.xPlus(x, boxWidth / 2);
+                const centerY = y + halfFontSize;
+                drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);
+            } else {
+                const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);
+                const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);
+                const borderRadius = toTRBLCorners(legendItem.borderRadius);
+                ctx.beginPath();
+                if (Object.values(borderRadius).some((v)=>v !== 0)) {
+                    addRoundedRectPath(ctx, {
+                        x: xBoxLeft,
+                        y: yBoxTop,
+                        w: boxWidth,
+                        h: boxHeight,
+                        radius: borderRadius
+                    });
+                } else {
+                    ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);
+                }
+                ctx.fill();
+                if (lineWidth !== 0) {
+                    ctx.stroke();
+                }
+            }
+            ctx.restore();
+        };
+        const fillText = function(x, y, legendItem) {
+            renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {
+                strikethrough: legendItem.hidden,
+                textAlign: rtlHelper.textAlign(legendItem.textAlign)
+            });
+        };
+        const isHorizontal = this.isHorizontal();
+        const titleHeight = this._computeTitleHeight();
+        if (isHorizontal) {
+            cursor = {
+                x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),
+                y: this.top + padding + titleHeight,
+                line: 0
+            };
+        } else {
+            cursor = {
+                x: this.left + padding,
+                y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),
+                line: 0
+            };
+        }
+        overrideTextDirection(this.ctx, opts.textDirection);
+        const lineHeight = itemHeight + padding;
+        this.legendItems.forEach((legendItem, i)=>{
+            ctx.strokeStyle = legendItem.fontColor;
+            ctx.fillStyle = legendItem.fontColor;
+            const textWidth = ctx.measureText(legendItem.text).width;
+            const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));
+            const width = boxWidth + halfFontSize + textWidth;
+            let x = cursor.x;
+            let y = cursor.y;
+            rtlHelper.setWidth(this.width);
+            if (isHorizontal) {
+                if (i > 0 && x + width + padding > this.right) {
+                    y = cursor.y += lineHeight;
+                    cursor.line++;
+                    x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);
+                }
+            } else if (i > 0 && y + lineHeight > this.bottom) {
+                x = cursor.x = x + columnSizes[cursor.line].width + padding;
+                cursor.line++;
+                y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);
+            }
+            const realX = rtlHelper.x(x);
+            drawLegendBox(realX, y, legendItem);
+            x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);
+            fillText(rtlHelper.x(x), y, legendItem);
+            if (isHorizontal) {
+                cursor.x += width + padding;
+            } else if (typeof legendItem.text !== 'string') {
+                const fontLineHeight = labelFont.lineHeight;
+                cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;
+            } else {
+                cursor.y += lineHeight;
+            }
+        });
+        restoreTextDirection(this.ctx, opts.textDirection);
+    }
+ drawTitle() {
+        const opts = this.options;
+        const titleOpts = opts.title;
+        const titleFont = toFont(titleOpts.font);
+        const titlePadding = toPadding(titleOpts.padding);
+        if (!titleOpts.display) {
+            return;
+        }
+        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);
+        const ctx = this.ctx;
+        const position = titleOpts.position;
+        const halfFontSize = titleFont.size / 2;
+        const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;
+        let y;
+        let left = this.left;
+        let maxWidth = this.width;
+        if (this.isHorizontal()) {
+            maxWidth = Math.max(...this.lineWidths);
+            y = this.top + topPaddingPlusHalfFontSize;
+            left = _alignStartEnd(opts.align, left, this.right - maxWidth);
+        } else {
+            const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);
+            y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());
+        }
+        const x = _alignStartEnd(position, left, left + maxWidth);
+        ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));
+        ctx.textBaseline = 'middle';
+        ctx.strokeStyle = titleOpts.color;
+        ctx.fillStyle = titleOpts.color;
+        ctx.font = titleFont.string;
+        renderText(ctx, titleOpts.text, x, y, titleFont);
+    }
+ _computeTitleHeight() {
+        const titleOpts = this.options.title;
+        const titleFont = toFont(titleOpts.font);
+        const titlePadding = toPadding(titleOpts.padding);
+        return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;
+    }
+ _getLegendItemAt(x, y) {
+        let i, hitBox, lh;
+        if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {
+            lh = this.legendHitBoxes;
+            for(i = 0; i < lh.length; ++i){
+                hitBox = lh[i];
+                if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {
+                    return this.legendItems[i];
+                }
+            }
+        }
+        return null;
+    }
+ handleEvent(e) {
+        const opts = this.options;
+        if (!isListened(e.type, opts)) {
+            return;
+        }
+        const hoveredItem = this._getLegendItemAt(e.x, e.y);
+        if (e.type === 'mousemove' || e.type === 'mouseout') {
+            const previous = this._hoveredItem;
+            const sameItem = itemsEqual(previous, hoveredItem);
+            if (previous && !sameItem) {
+                callback(opts.onLeave, [
+                    e,
+                    previous,
+                    this
+                ], this);
+            }
+            this._hoveredItem = hoveredItem;
+            if (hoveredItem && !sameItem) {
+                callback(opts.onHover, [
+                    e,
+                    hoveredItem,
+                    this
+                ], this);
+            }
+        } else if (hoveredItem) {
+            callback(opts.onClick, [
+                e,
+                hoveredItem,
+                this
+            ], this);
+        }
+    }
+}
+function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {
+    const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);
+    const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);
+    return {
+        itemWidth,
+        itemHeight
+    };
+}
+function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {
+    let legendItemText = legendItem.text;
+    if (legendItemText && typeof legendItemText !== 'string') {
+        legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);
+    }
+    return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;
+}
+function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {
+    let itemHeight = _itemHeight;
+    if (typeof legendItem.text !== 'string') {
+        itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);
+    }
+    return itemHeight;
+}
+function calculateLegendItemHeight(legendItem, fontLineHeight) {
+    const labelHeight = legendItem.text ? legendItem.text.length : 0;
+    return fontLineHeight * labelHeight;
+}
+function isListened(type, opts) {
+    if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {
+        return true;
+    }
+    if (opts.onClick && (type === 'click' || type === 'mouseup')) {
+        return true;
+    }
+    return false;
+}
+var plugin_legend = {
+    id: 'legend',
+ _element: Legend,
+    start (chart, _args, options) {
+        const legend = chart.legend = new Legend({
+            ctx: chart.ctx,
+            options,
+            chart
+        });
+        layouts.configure(chart, legend, options);
+        layouts.addBox(chart, legend);
+    },
+    stop (chart) {
+        layouts.removeBox(chart, chart.legend);
+        delete chart.legend;
+    },
+    beforeUpdate (chart, _args, options) {
+        const legend = chart.legend;
+        layouts.configure(chart, legend, options);
+        legend.options = options;
+    },
+    afterUpdate (chart) {
+        const legend = chart.legend;
+        legend.buildLabels();
+        legend.adjustHitBoxes();
+    },
+    afterEvent (chart, args) {
+        if (!args.replay) {
+            chart.legend.handleEvent(args.event);
+        }
+    },
+    defaults: {
+        display: true,
+        position: 'top',
+        align: 'center',
+        fullSize: true,
+        reverse: false,
+        weight: 1000,
+        onClick (e, legendItem, legend) {
+            const index = legendItem.datasetIndex;
+            const ci = legend.chart;
+            if (ci.isDatasetVisible(index)) {
+                ci.hide(index);
+                legendItem.hidden = true;
+            } else {
+                ci.show(index);
+                legendItem.hidden = false;
+            }
+        },
+        onHover: null,
+        onLeave: null,
+        labels: {
+            color: (ctx)=>ctx.chart.options.color,
+            boxWidth: 40,
+            padding: 10,
+            generateLabels (chart) {
+                const datasets = chart.data.datasets;
+                const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;
+                return chart._getSortedDatasetMetas().map((meta)=>{
+                    const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);
+                    const borderWidth = toPadding(style.borderWidth);
+                    return {
+                        text: datasets[meta.index].label,
+                        fillStyle: style.backgroundColor,
+                        fontColor: color,
+                        hidden: !meta.visible,
+                        lineCap: style.borderCapStyle,
+                        lineDash: style.borderDash,
+                        lineDashOffset: style.borderDashOffset,
+                        lineJoin: style.borderJoinStyle,
+                        lineWidth: (borderWidth.width + borderWidth.height) / 4,
+                        strokeStyle: style.borderColor,
+                        pointStyle: pointStyle || style.pointStyle,
+                        rotation: style.rotation,
+                        textAlign: textAlign || style.textAlign,
+                        borderRadius: useBorderRadius && (borderRadius || style.borderRadius),
+                        datasetIndex: meta.index
+                    };
+                }, this);
+            }
+        },
+        title: {
+            color: (ctx)=>ctx.chart.options.color,
+            display: false,
+            position: 'center',
+            text: ''
+        }
+    },
+    descriptors: {
+        _scriptable: (name)=>!name.startsWith('on'),
+        labels: {
+            _scriptable: (name)=>![
+                    'generateLabels',
+                    'filter',
+                    'sort'
+                ].includes(name)
+        }
+    }
+};
+
+class Title extends Element {
+ constructor(config){
+        super();
+        this.chart = config.chart;
+        this.options = config.options;
+        this.ctx = config.ctx;
+        this._padding = undefined;
+        this.top = undefined;
+        this.bottom = undefined;
+        this.left = undefined;
+        this.right = undefined;
+        this.width = undefined;
+        this.height = undefined;
+        this.position = undefined;
+        this.weight = undefined;
+        this.fullSize = undefined;
+    }
+    update(maxWidth, maxHeight) {
+        const opts = this.options;
+        this.left = 0;
+        this.top = 0;
+        if (!opts.display) {
+            this.width = this.height = this.right = this.bottom = 0;
+            return;
+        }
+        this.width = this.right = maxWidth;
+        this.height = this.bottom = maxHeight;
+        const lineCount = isArray(opts.text) ? opts.text.length : 1;
+        this._padding = toPadding(opts.padding);
+        const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;
+        if (this.isHorizontal()) {
+            this.height = textSize;
+        } else {
+            this.width = textSize;
+        }
+    }
+    isHorizontal() {
+        const pos = this.options.position;
+        return pos === 'top' || pos === 'bottom';
+    }
+    _drawArgs(offset) {
+        const { top , left , bottom , right , options  } = this;
+        const align = options.align;
+        let rotation = 0;
+        let maxWidth, titleX, titleY;
+        if (this.isHorizontal()) {
+            titleX = _alignStartEnd(align, left, right);
+            titleY = top + offset;
+            maxWidth = right - left;
+        } else {
+            if (options.position === 'left') {
+                titleX = left + offset;
+                titleY = _alignStartEnd(align, bottom, top);
+                rotation = PI * -0.5;
+            } else {
+                titleX = right - offset;
+                titleY = _alignStartEnd(align, top, bottom);
+                rotation = PI * 0.5;
+            }
+            maxWidth = bottom - top;
+        }
+        return {
+            titleX,
+            titleY,
+            maxWidth,
+            rotation
+        };
+    }
+    draw() {
+        const ctx = this.ctx;
+        const opts = this.options;
+        if (!opts.display) {
+            return;
+        }
+        const fontOpts = toFont(opts.font);
+        const lineHeight = fontOpts.lineHeight;
+        const offset = lineHeight / 2 + this._padding.top;
+        const { titleX , titleY , maxWidth , rotation  } = this._drawArgs(offset);
+        renderText(ctx, opts.text, 0, 0, fontOpts, {
+            color: opts.color,
+            maxWidth,
+            rotation,
+            textAlign: _toLeftRightCenter(opts.align),
+            textBaseline: 'middle',
+            translation: [
+                titleX,
+                titleY
+            ]
+        });
+    }
+}
+function createTitle(chart, titleOpts) {
+    const title = new Title({
+        ctx: chart.ctx,
+        options: titleOpts,
+        chart
+    });
+    layouts.configure(chart, title, titleOpts);
+    layouts.addBox(chart, title);
+    chart.titleBlock = title;
+}
+var plugin_title = {
+    id: 'title',
+ _element: Title,
+    start (chart, _args, options) {
+        createTitle(chart, options);
+    },
+    stop (chart) {
+        const titleBlock = chart.titleBlock;
+        layouts.removeBox(chart, titleBlock);
+        delete chart.titleBlock;
+    },
+    beforeUpdate (chart, _args, options) {
+        const title = chart.titleBlock;
+        layouts.configure(chart, title, options);
+        title.options = options;
+    },
+    defaults: {
+        align: 'center',
+        display: false,
+        font: {
+            weight: 'bold'
+        },
+        fullSize: true,
+        padding: 10,
+        position: 'top',
+        text: '',
+        weight: 2000
+    },
+    defaultRoutes: {
+        color: 'color'
+    },
+    descriptors: {
+        _scriptable: true,
+        _indexable: false
+    }
+};
+
+const map = new WeakMap();
+var plugin_subtitle = {
+    id: 'subtitle',
+    start (chart, _args, options) {
+        const title = new Title({
+            ctx: chart.ctx,
+            options,
+            chart
+        });
+        layouts.configure(chart, title, options);
+        layouts.addBox(chart, title);
+        map.set(chart, title);
+    },
+    stop (chart) {
+        layouts.removeBox(chart, map.get(chart));
+        map.delete(chart);
+    },
+    beforeUpdate (chart, _args, options) {
+        const title = map.get(chart);
+        layouts.configure(chart, title, options);
+        title.options = options;
+    },
+    defaults: {
+        align: 'center',
+        display: false,
+        font: {
+            weight: 'normal'
+        },
+        fullSize: true,
+        padding: 0,
+        position: 'top',
+        text: '',
+        weight: 1500
+    },
+    defaultRoutes: {
+        color: 'color'
+    },
+    descriptors: {
+        _scriptable: true,
+        _indexable: false
+    }
+};
+
+const positioners = {
+ average (items) {
+        if (!items.length) {
+            return false;
+        }
+        let i, len;
+        let xSet = new Set();
+        let y = 0;
+        let count = 0;
+        for(i = 0, len = items.length; i < len; ++i){
+            const el = items[i].element;
+            if (el && el.hasValue()) {
+                const pos = el.tooltipPosition();
+                xSet.add(pos.x);
+                y += pos.y;
+                ++count;
+            }
+        }
+        if (count === 0 || xSet.size === 0) {
+            return false;
+        }
+        const xAverage = [
+            ...xSet
+        ].reduce((a, b)=>a + b) / xSet.size;
+        return {
+            x: xAverage,
+            y: y / count
+        };
+    },
+ nearest (items, eventPosition) {
+        if (!items.length) {
+            return false;
+        }
+        let x = eventPosition.x;
+        let y = eventPosition.y;
+        let minDistance = Number.POSITIVE_INFINITY;
+        let i, len, nearestElement;
+        for(i = 0, len = items.length; i < len; ++i){
+            const el = items[i].element;
+            if (el && el.hasValue()) {
+                const center = el.getCenterPoint();
+                const d = distanceBetweenPoints(eventPosition, center);
+                if (d < minDistance) {
+                    minDistance = d;
+                    nearestElement = el;
+                }
+            }
+        }
+        if (nearestElement) {
+            const tp = nearestElement.tooltipPosition();
+            x = tp.x;
+            y = tp.y;
+        }
+        return {
+            x,
+            y
+        };
+    }
+};
+function pushOrConcat(base, toPush) {
+    if (toPush) {
+        if (isArray(toPush)) {
+            Array.prototype.push.apply(base, toPush);
+        } else {
+            base.push(toPush);
+        }
+    }
+    return base;
+}
+ function splitNewlines(str) {
+    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\n') > -1) {
+        return str.split('\n');
+    }
+    return str;
+}
+ function createTooltipItem(chart, item) {
+    const { element , datasetIndex , index  } = item;
+    const controller = chart.getDatasetMeta(datasetIndex).controller;
+    const { label , value  } = controller.getLabelAndValue(index);
+    return {
+        chart,
+        label,
+        parsed: controller.getParsed(index),
+        raw: chart.data.datasets[datasetIndex].data[index],
+        formattedValue: value,
+        dataset: controller.getDataset(),
+        dataIndex: index,
+        datasetIndex,
+        element
+    };
+}
+ function getTooltipSize(tooltip, options) {
+    const ctx = tooltip.chart.ctx;
+    const { body , footer , title  } = tooltip;
+    const { boxWidth , boxHeight  } = options;
+    const bodyFont = toFont(options.bodyFont);
+    const titleFont = toFont(options.titleFont);
+    const footerFont = toFont(options.footerFont);
+    const titleLineCount = title.length;
+    const footerLineCount = footer.length;
+    const bodyLineItemCount = body.length;
+    const padding = toPadding(options.padding);
+    let height = padding.height;
+    let width = 0;
+    let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);
+    combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;
+    if (titleLineCount) {
+        height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;
+    }
+    if (combinedBodyLength) {
+        const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;
+        height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;
+    }
+    if (footerLineCount) {
+        height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;
+    }
+    let widthPadding = 0;
+    const maxLineWidth = function(line) {
+        width = Math.max(width, ctx.measureText(line).width + widthPadding);
+    };
+    ctx.save();
+    ctx.font = titleFont.string;
+    each(tooltip.title, maxLineWidth);
+    ctx.font = bodyFont.string;
+    each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);
+    widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;
+    each(body, (bodyItem)=>{
+        each(bodyItem.before, maxLineWidth);
+        each(bodyItem.lines, maxLineWidth);
+        each(bodyItem.after, maxLineWidth);
+    });
+    widthPadding = 0;
+    ctx.font = footerFont.string;
+    each(tooltip.footer, maxLineWidth);
+    ctx.restore();
+    width += padding.width;
+    return {
+        width,
+        height
+    };
+}
+function determineYAlign(chart, size) {
+    const { y , height  } = size;
+    if (y < height / 2) {
+        return 'top';
+    } else if (y > chart.height - height / 2) {
+        return 'bottom';
+    }
+    return 'center';
+}
+function doesNotFitWithAlign(xAlign, chart, options, size) {
+    const { x , width  } = size;
+    const caret = options.caretSize + options.caretPadding;
+    if (xAlign === 'left' && x + width + caret > chart.width) {
+        return true;
+    }
+    if (xAlign === 'right' && x - width - caret < 0) {
+        return true;
+    }
+}
+function determineXAlign(chart, options, size, yAlign) {
+    const { x , width  } = size;
+    const { width: chartWidth , chartArea: { left , right  }  } = chart;
+    let xAlign = 'center';
+    if (yAlign === 'center') {
+        xAlign = x <= (left + right) / 2 ? 'left' : 'right';
+    } else if (x <= width / 2) {
+        xAlign = 'left';
+    } else if (x >= chartWidth - width / 2) {
+        xAlign = 'right';
+    }
+    if (doesNotFitWithAlign(xAlign, chart, options, size)) {
+        xAlign = 'center';
+    }
+    return xAlign;
+}
+ function determineAlignment(chart, options, size) {
+    const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);
+    return {
+        xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),
+        yAlign
+    };
+}
+function alignX(size, xAlign) {
+    let { x , width  } = size;
+    if (xAlign === 'right') {
+        x -= width;
+    } else if (xAlign === 'center') {
+        x -= width / 2;
+    }
+    return x;
+}
+function alignY(size, yAlign, paddingAndSize) {
+    let { y , height  } = size;
+    if (yAlign === 'top') {
+        y += paddingAndSize;
+    } else if (yAlign === 'bottom') {
+        y -= height + paddingAndSize;
+    } else {
+        y -= height / 2;
+    }
+    return y;
+}
+ function getBackgroundPoint(options, size, alignment, chart) {
+    const { caretSize , caretPadding , cornerRadius  } = options;
+    const { xAlign , yAlign  } = alignment;
+    const paddingAndSize = caretSize + caretPadding;
+    const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);
+    let x = alignX(size, xAlign);
+    const y = alignY(size, yAlign, paddingAndSize);
+    if (yAlign === 'center') {
+        if (xAlign === 'left') {
+            x += paddingAndSize;
+        } else if (xAlign === 'right') {
+            x -= paddingAndSize;
+        }
+    } else if (xAlign === 'left') {
+        x -= Math.max(topLeft, bottomLeft) + caretSize;
+    } else if (xAlign === 'right') {
+        x += Math.max(topRight, bottomRight) + caretSize;
+    }
+    return {
+        x: _limitValue(x, 0, chart.width - size.width),
+        y: _limitValue(y, 0, chart.height - size.height)
+    };
+}
+function getAlignedX(tooltip, align, options) {
+    const padding = toPadding(options.padding);
+    return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;
+}
+ function getBeforeAfterBodyLines(callback) {
+    return pushOrConcat([], splitNewlines(callback));
+}
+function createTooltipContext(parent, tooltip, tooltipItems) {
+    return createContext(parent, {
+        tooltip,
+        tooltipItems,
+        type: 'tooltip'
+    });
+}
+function overrideCallbacks(callbacks, context) {
+    const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;
+    return override ? callbacks.override(override) : callbacks;
+}
+const defaultCallbacks = {
+    beforeTitle: noop,
+    title (tooltipItems) {
+        if (tooltipItems.length > 0) {
+            const item = tooltipItems[0];
+            const labels = item.chart.data.labels;
+            const labelCount = labels ? labels.length : 0;
+            if (this && this.options && this.options.mode === 'dataset') {
+                return item.dataset.label || '';
+            } else if (item.label) {
+                return item.label;
+            } else if (labelCount > 0 && item.dataIndex < labelCount) {
+                return labels[item.dataIndex];
+            }
+        }
+        return '';
+    },
+    afterTitle: noop,
+    beforeBody: noop,
+    beforeLabel: noop,
+    label (tooltipItem) {
+        if (this && this.options && this.options.mode === 'dataset') {
+            return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;
+        }
+        let label = tooltipItem.dataset.label || '';
+        if (label) {
+            label += ': ';
+        }
+        const value = tooltipItem.formattedValue;
+        if (!isNullOrUndef(value)) {
+            label += value;
+        }
+        return label;
+    },
+    labelColor (tooltipItem) {
+        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
+        const options = meta.controller.getStyle(tooltipItem.dataIndex);
+        return {
+            borderColor: options.borderColor,
+            backgroundColor: options.backgroundColor,
+            borderWidth: options.borderWidth,
+            borderDash: options.borderDash,
+            borderDashOffset: options.borderDashOffset,
+            borderRadius: 0
+        };
+    },
+    labelTextColor () {
+        return this.options.bodyColor;
+    },
+    labelPointStyle (tooltipItem) {
+        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
+        const options = meta.controller.getStyle(tooltipItem.dataIndex);
+        return {
+            pointStyle: options.pointStyle,
+            rotation: options.rotation
+        };
+    },
+    afterLabel: noop,
+    afterBody: noop,
+    beforeFooter: noop,
+    footer: noop,
+    afterFooter: noop
+};
+ function invokeCallbackWithFallback(callbacks, name, ctx, arg) {
+    const result = callbacks[name].call(ctx, arg);
+    if (typeof result === 'undefined') {
+        return defaultCallbacks[name].call(ctx, arg);
+    }
+    return result;
+}
+class Tooltip extends Element {
+ static positioners = positioners;
+    constructor(config){
+        super();
+        this.opacity = 0;
+        this._active = [];
+        this._eventPosition = undefined;
+        this._size = undefined;
+        this._cachedAnimations = undefined;
+        this._tooltipItems = [];
+        this.$animations = undefined;
+        this.$context = undefined;
+        this.chart = config.chart;
+        this.options = config.options;
+        this.dataPoints = undefined;
+        this.title = undefined;
+        this.beforeBody = undefined;
+        this.body = undefined;
+        this.afterBody = undefined;
+        this.footer = undefined;
+        this.xAlign = undefined;
+        this.yAlign = undefined;
+        this.x = undefined;
+        this.y = undefined;
+        this.height = undefined;
+        this.width = undefined;
+        this.caretX = undefined;
+        this.caretY = undefined;
+        this.labelColors = undefined;
+        this.labelPointStyles = undefined;
+        this.labelTextColors = undefined;
+    }
+    initialize(options) {
+        this.options = options;
+        this._cachedAnimations = undefined;
+        this.$context = undefined;
+    }
+ _resolveAnimations() {
+        const cached = this._cachedAnimations;
+        if (cached) {
+            return cached;
+        }
+        const chart = this.chart;
+        const options = this.options.setContext(this.getContext());
+        const opts = options.enabled && chart.options.animation && options.animations;
+        const animations = new Animations(this.chart, opts);
+        if (opts._cacheable) {
+            this._cachedAnimations = Object.freeze(animations);
+        }
+        return animations;
+    }
+ getContext() {
+        return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));
+    }
+    getTitle(context, options) {
+        const { callbacks  } = options;
+        const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);
+        const title = invokeCallbackWithFallback(callbacks, 'title', this, context);
+        const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);
+        let lines = [];
+        lines = pushOrConcat(lines, splitNewlines(beforeTitle));
+        lines = pushOrConcat(lines, splitNewlines(title));
+        lines = pushOrConcat(lines, splitNewlines(afterTitle));
+        return lines;
+    }
+    getBeforeBody(tooltipItems, options) {
+        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));
+    }
+    getBody(tooltipItems, options) {
+        const { callbacks  } = options;
+        const bodyItems = [];
+        each(tooltipItems, (context)=>{
+            const bodyItem = {
+                before: [],
+                lines: [],
+                after: []
+            };
+            const scoped = overrideCallbacks(callbacks, context);
+            pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));
+            pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));
+            pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));
+            bodyItems.push(bodyItem);
+        });
+        return bodyItems;
+    }
+    getAfterBody(tooltipItems, options) {
+        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));
+    }
+    getFooter(tooltipItems, options) {
+        const { callbacks  } = options;
+        const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);
+        const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);
+        const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);
+        let lines = [];
+        lines = pushOrConcat(lines, splitNewlines(beforeFooter));
+        lines = pushOrConcat(lines, splitNewlines(footer));
+        lines = pushOrConcat(lines, splitNewlines(afterFooter));
+        return lines;
+    }
+ _createItems(options) {
+        const active = this._active;
+        const data = this.chart.data;
+        const labelColors = [];
+        const labelPointStyles = [];
+        const labelTextColors = [];
+        let tooltipItems = [];
+        let i, len;
+        for(i = 0, len = active.length; i < len; ++i){
+            tooltipItems.push(createTooltipItem(this.chart, active[i]));
+        }
+        if (options.filter) {
+            tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));
+        }
+        if (options.itemSort) {
+            tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));
+        }
+        each(tooltipItems, (context)=>{
+            const scoped = overrideCallbacks(options.callbacks, context);
+            labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));
+            labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));
+            labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));
+        });
+        this.labelColors = labelColors;
+        this.labelPointStyles = labelPointStyles;
+        this.labelTextColors = labelTextColors;
+        this.dataPoints = tooltipItems;
+        return tooltipItems;
+    }
+    update(changed, replay) {
+        const options = this.options.setContext(this.getContext());
+        const active = this._active;
+        let properties;
+        let tooltipItems = [];
+        if (!active.length) {
+            if (this.opacity !== 0) {
+                properties = {
+                    opacity: 0
+                };
+            }
+        } else {
+            const position = positioners[options.position].call(this, active, this._eventPosition);
+            tooltipItems = this._createItems(options);
+            this.title = this.getTitle(tooltipItems, options);
+            this.beforeBody = this.getBeforeBody(tooltipItems, options);
+            this.body = this.getBody(tooltipItems, options);
+            this.afterBody = this.getAfterBody(tooltipItems, options);
+            this.footer = this.getFooter(tooltipItems, options);
+            const size = this._size = getTooltipSize(this, options);
+            const positionAndSize = Object.assign({}, position, size);
+            const alignment = determineAlignment(this.chart, options, positionAndSize);
+            const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);
+            this.xAlign = alignment.xAlign;
+            this.yAlign = alignment.yAlign;
+            properties = {
+                opacity: 1,
+                x: backgroundPoint.x,
+                y: backgroundPoint.y,
+                width: size.width,
+                height: size.height,
+                caretX: position.x,
+                caretY: position.y
+            };
+        }
+        this._tooltipItems = tooltipItems;
+        this.$context = undefined;
+        if (properties) {
+            this._resolveAnimations().update(this, properties);
+        }
+        if (changed && options.external) {
+            options.external.call(this, {
+                chart: this.chart,
+                tooltip: this,
+                replay
+            });
+        }
+    }
+    drawCaret(tooltipPoint, ctx, size, options) {
+        const caretPosition = this.getCaretPosition(tooltipPoint, size, options);
+        ctx.lineTo(caretPosition.x1, caretPosition.y1);
+        ctx.lineTo(caretPosition.x2, caretPosition.y2);
+        ctx.lineTo(caretPosition.x3, caretPosition.y3);
+    }
+    getCaretPosition(tooltipPoint, size, options) {
+        const { xAlign , yAlign  } = this;
+        const { caretSize , cornerRadius  } = options;
+        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);
+        const { x: ptX , y: ptY  } = tooltipPoint;
+        const { width , height  } = size;
+        let x1, x2, x3, y1, y2, y3;
+        if (yAlign === 'center') {
+            y2 = ptY + height / 2;
+            if (xAlign === 'left') {
+                x1 = ptX;
+                x2 = x1 - caretSize;
+                y1 = y2 + caretSize;
+                y3 = y2 - caretSize;
+            } else {
+                x1 = ptX + width;
+                x2 = x1 + caretSize;
+                y1 = y2 - caretSize;
+                y3 = y2 + caretSize;
+            }
+            x3 = x1;
+        } else {
+            if (xAlign === 'left') {
+                x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;
+            } else if (xAlign === 'right') {
+                x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;
+            } else {
+                x2 = this.caretX;
+            }
+            if (yAlign === 'top') {
+                y1 = ptY;
+                y2 = y1 - caretSize;
+                x1 = x2 - caretSize;
+                x3 = x2 + caretSize;
+            } else {
+                y1 = ptY + height;
+                y2 = y1 + caretSize;
+                x1 = x2 + caretSize;
+                x3 = x2 - caretSize;
+            }
+            y3 = y1;
+        }
+        return {
+            x1,
+            x2,
+            x3,
+            y1,
+            y2,
+            y3
+        };
+    }
+    drawTitle(pt, ctx, options) {
+        const title = this.title;
+        const length = title.length;
+        let titleFont, titleSpacing, i;
+        if (length) {
+            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
+            pt.x = getAlignedX(this, options.titleAlign, options);
+            ctx.textAlign = rtlHelper.textAlign(options.titleAlign);
+            ctx.textBaseline = 'middle';
+            titleFont = toFont(options.titleFont);
+            titleSpacing = options.titleSpacing;
+            ctx.fillStyle = options.titleColor;
+            ctx.font = titleFont.string;
+            for(i = 0; i < length; ++i){
+                ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);
+                pt.y += titleFont.lineHeight + titleSpacing;
+                if (i + 1 === length) {
+                    pt.y += options.titleMarginBottom - titleSpacing;
+                }
+            }
+        }
+    }
+ _drawColorBox(ctx, pt, i, rtlHelper, options) {
+        const labelColor = this.labelColors[i];
+        const labelPointStyle = this.labelPointStyles[i];
+        const { boxHeight , boxWidth  } = options;
+        const bodyFont = toFont(options.bodyFont);
+        const colorX = getAlignedX(this, 'left', options);
+        const rtlColorX = rtlHelper.x(colorX);
+        const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;
+        const colorY = pt.y + yOffSet;
+        if (options.usePointStyle) {
+            const drawOptions = {
+                radius: Math.min(boxWidth, boxHeight) / 2,
+                pointStyle: labelPointStyle.pointStyle,
+                rotation: labelPointStyle.rotation,
+                borderWidth: 1
+            };
+            const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;
+            const centerY = colorY + boxHeight / 2;
+            ctx.strokeStyle = options.multiKeyBackground;
+            ctx.fillStyle = options.multiKeyBackground;
+            drawPoint(ctx, drawOptions, centerX, centerY);
+            ctx.strokeStyle = labelColor.borderColor;
+            ctx.fillStyle = labelColor.backgroundColor;
+            drawPoint(ctx, drawOptions, centerX, centerY);
+        } else {
+            ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;
+            ctx.strokeStyle = labelColor.borderColor;
+            ctx.setLineDash(labelColor.borderDash || []);
+            ctx.lineDashOffset = labelColor.borderDashOffset || 0;
+            const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);
+            const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);
+            const borderRadius = toTRBLCorners(labelColor.borderRadius);
+            if (Object.values(borderRadius).some((v)=>v !== 0)) {
+                ctx.beginPath();
+                ctx.fillStyle = options.multiKeyBackground;
+                addRoundedRectPath(ctx, {
+                    x: outerX,
+                    y: colorY,
+                    w: boxWidth,
+                    h: boxHeight,
+                    radius: borderRadius
+                });
+                ctx.fill();
+                ctx.stroke();
+                ctx.fillStyle = labelColor.backgroundColor;
+                ctx.beginPath();
+                addRoundedRectPath(ctx, {
+                    x: innerX,
+                    y: colorY + 1,
+                    w: boxWidth - 2,
+                    h: boxHeight - 2,
+                    radius: borderRadius
+                });
+                ctx.fill();
+            } else {
+                ctx.fillStyle = options.multiKeyBackground;
+                ctx.fillRect(outerX, colorY, boxWidth, boxHeight);
+                ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);
+                ctx.fillStyle = labelColor.backgroundColor;
+                ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);
+            }
+        }
+        ctx.fillStyle = this.labelTextColors[i];
+    }
+    drawBody(pt, ctx, options) {
+        const { body  } = this;
+        const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding  } = options;
+        const bodyFont = toFont(options.bodyFont);
+        let bodyLineHeight = bodyFont.lineHeight;
+        let xLinePadding = 0;
+        const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
+        const fillLineOfText = function(line) {
+            ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);
+            pt.y += bodyLineHeight + bodySpacing;
+        };
+        const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);
+        let bodyItem, textColor, lines, i, j, ilen, jlen;
+        ctx.textAlign = bodyAlign;
+        ctx.textBaseline = 'middle';
+        ctx.font = bodyFont.string;
+        pt.x = getAlignedX(this, bodyAlignForCalculation, options);
+        ctx.fillStyle = options.bodyColor;
+        each(this.beforeBody, fillLineOfText);
+        xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;
+        for(i = 0, ilen = body.length; i < ilen; ++i){
+            bodyItem = body[i];
+            textColor = this.labelTextColors[i];
+            ctx.fillStyle = textColor;
+            each(bodyItem.before, fillLineOfText);
+            lines = bodyItem.lines;
+            if (displayColors && lines.length) {
+                this._drawColorBox(ctx, pt, i, rtlHelper, options);
+                bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);
+            }
+            for(j = 0, jlen = lines.length; j < jlen; ++j){
+                fillLineOfText(lines[j]);
+                bodyLineHeight = bodyFont.lineHeight;
+            }
+            each(bodyItem.after, fillLineOfText);
+        }
+        xLinePadding = 0;
+        bodyLineHeight = bodyFont.lineHeight;
+        each(this.afterBody, fillLineOfText);
+        pt.y -= bodySpacing;
+    }
+    drawFooter(pt, ctx, options) {
+        const footer = this.footer;
+        const length = footer.length;
+        let footerFont, i;
+        if (length) {
+            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);
+            pt.x = getAlignedX(this, options.footerAlign, options);
+            pt.y += options.footerMarginTop;
+            ctx.textAlign = rtlHelper.textAlign(options.footerAlign);
+            ctx.textBaseline = 'middle';
+            footerFont = toFont(options.footerFont);
+            ctx.fillStyle = options.footerColor;
+            ctx.font = footerFont.string;
+            for(i = 0; i < length; ++i){
+                ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);
+                pt.y += footerFont.lineHeight + options.footerSpacing;
+            }
+        }
+    }
+    drawBackground(pt, ctx, tooltipSize, options) {
+        const { xAlign , yAlign  } = this;
+        const { x , y  } = pt;
+        const { width , height  } = tooltipSize;
+        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(options.cornerRadius);
+        ctx.fillStyle = options.backgroundColor;
+        ctx.strokeStyle = options.borderColor;
+        ctx.lineWidth = options.borderWidth;
+        ctx.beginPath();
+        ctx.moveTo(x + topLeft, y);
+        if (yAlign === 'top') {
+            this.drawCaret(pt, ctx, tooltipSize, options);
+        }
+        ctx.lineTo(x + width - topRight, y);
+        ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);
+        if (yAlign === 'center' && xAlign === 'right') {
+            this.drawCaret(pt, ctx, tooltipSize, options);
+        }
+        ctx.lineTo(x + width, y + height - bottomRight);
+        ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);
+        if (yAlign === 'bottom') {
+            this.drawCaret(pt, ctx, tooltipSize, options);
+        }
+        ctx.lineTo(x + bottomLeft, y + height);
+        ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);
+        if (yAlign === 'center' && xAlign === 'left') {
+            this.drawCaret(pt, ctx, tooltipSize, options);
+        }
+        ctx.lineTo(x, y + topLeft);
+        ctx.quadraticCurveTo(x, y, x + topLeft, y);
+        ctx.closePath();
+        ctx.fill();
+        if (options.borderWidth > 0) {
+            ctx.stroke();
+        }
+    }
+ _updateAnimationTarget(options) {
+        const chart = this.chart;
+        const anims = this.$animations;
+        const animX = anims && anims.x;
+        const animY = anims && anims.y;
+        if (animX || animY) {
+            const position = positioners[options.position].call(this, this._active, this._eventPosition);
+            if (!position) {
+                return;
+            }
+            const size = this._size = getTooltipSize(this, options);
+            const positionAndSize = Object.assign({}, position, this._size);
+            const alignment = determineAlignment(chart, options, positionAndSize);
+            const point = getBackgroundPoint(options, positionAndSize, alignment, chart);
+            if (animX._to !== point.x || animY._to !== point.y) {
+                this.xAlign = alignment.xAlign;
+                this.yAlign = alignment.yAlign;
+                this.width = size.width;
+                this.height = size.height;
+                this.caretX = position.x;
+                this.caretY = position.y;
+                this._resolveAnimations().update(this, point);
+            }
+        }
+    }
+ _willRender() {
+        return !!this.opacity;
+    }
+    draw(ctx) {
+        const options = this.options.setContext(this.getContext());
+        let opacity = this.opacity;
+        if (!opacity) {
+            return;
+        }
+        this._updateAnimationTarget(options);
+        const tooltipSize = {
+            width: this.width,
+            height: this.height
+        };
+        const pt = {
+            x: this.x,
+            y: this.y
+        };
+        opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;
+        const padding = toPadding(options.padding);
+        const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;
+        if (options.enabled && hasTooltipContent) {
+            ctx.save();
+            ctx.globalAlpha = opacity;
+            this.drawBackground(pt, ctx, tooltipSize, options);
+            overrideTextDirection(ctx, options.textDirection);
+            pt.y += padding.top;
+            this.drawTitle(pt, ctx, options);
+            this.drawBody(pt, ctx, options);
+            this.drawFooter(pt, ctx, options);
+            restoreTextDirection(ctx, options.textDirection);
+            ctx.restore();
+        }
+    }
+ getActiveElements() {
+        return this._active || [];
+    }
+ setActiveElements(activeElements, eventPosition) {
+        const lastActive = this._active;
+        const active = activeElements.map(({ datasetIndex , index  })=>{
+            const meta = this.chart.getDatasetMeta(datasetIndex);
+            if (!meta) {
+                throw new Error('Cannot find a dataset at index ' + datasetIndex);
+            }
+            return {
+                datasetIndex,
+                element: meta.data[index],
+                index
+            };
+        });
+        const changed = !_elementsEqual(lastActive, active);
+        const positionChanged = this._positionChanged(active, eventPosition);
+        if (changed || positionChanged) {
+            this._active = active;
+            this._eventPosition = eventPosition;
+            this._ignoreReplayEvents = true;
+            this.update(true);
+        }
+    }
+ handleEvent(e, replay, inChartArea = true) {
+        if (replay && this._ignoreReplayEvents) {
+            return false;
+        }
+        this._ignoreReplayEvents = false;
+        const options = this.options;
+        const lastActive = this._active || [];
+        const active = this._getActiveElements(e, lastActive, replay, inChartArea);
+        const positionChanged = this._positionChanged(active, e);
+        const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;
+        if (changed) {
+            this._active = active;
+            if (options.enabled || options.external) {
+                this._eventPosition = {
+                    x: e.x,
+                    y: e.y
+                };
+                this.update(true, replay);
+            }
+        }
+        return changed;
+    }
+ _getActiveElements(e, lastActive, replay, inChartArea) {
+        const options = this.options;
+        if (e.type === 'mouseout') {
+            return [];
+        }
+        if (!inChartArea) {
+            return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);
+        }
+        const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);
+        if (options.reverse) {
+            active.reverse();
+        }
+        return active;
+    }
+ _positionChanged(active, e) {
+        const { caretX , caretY , options  } = this;
+        const position = positioners[options.position].call(this, active, e);
+        return position !== false && (caretX !== position.x || caretY !== position.y);
+    }
+}
+var plugin_tooltip = {
+    id: 'tooltip',
+    _element: Tooltip,
+    positioners,
+    afterInit (chart, _args, options) {
+        if (options) {
+            chart.tooltip = new Tooltip({
+                chart,
+                options
+            });
+        }
+    },
+    beforeUpdate (chart, _args, options) {
+        if (chart.tooltip) {
+            chart.tooltip.initialize(options);
+        }
+    },
+    reset (chart, _args, options) {
+        if (chart.tooltip) {
+            chart.tooltip.initialize(options);
+        }
+    },
+    afterDraw (chart) {
+        const tooltip = chart.tooltip;
+        if (tooltip && tooltip._willRender()) {
+            const args = {
+                tooltip
+            };
+            if (chart.notifyPlugins('beforeTooltipDraw', {
+                ...args,
+                cancelable: true
+            }) === false) {
+                return;
+            }
+            tooltip.draw(chart.ctx);
+            chart.notifyPlugins('afterTooltipDraw', args);
+        }
+    },
+    afterEvent (chart, args) {
+        if (chart.tooltip) {
+            const useFinalPosition = args.replay;
+            if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {
+                args.changed = true;
+            }
+        }
+    },
+    defaults: {
+        enabled: true,
+        external: null,
+        position: 'average',
+        backgroundColor: 'rgba(0,0,0,0.8)',
+        titleColor: '#fff',
+        titleFont: {
+            weight: 'bold'
+        },
+        titleSpacing: 2,
+        titleMarginBottom: 6,
+        titleAlign: 'left',
+        bodyColor: '#fff',
+        bodySpacing: 2,
+        bodyFont: {},
+        bodyAlign: 'left',
+        footerColor: '#fff',
+        footerSpacing: 2,
+        footerMarginTop: 6,
+        footerFont: {
+            weight: 'bold'
+        },
+        footerAlign: 'left',
+        padding: 6,
+        caretPadding: 2,
+        caretSize: 5,
+        cornerRadius: 6,
+        boxHeight: (ctx, opts)=>opts.bodyFont.size,
+        boxWidth: (ctx, opts)=>opts.bodyFont.size,
+        multiKeyBackground: '#fff',
+        displayColors: true,
+        boxPadding: 0,
+        borderColor: 'rgba(0,0,0,0)',
+        borderWidth: 0,
+        animation: {
+            duration: 400,
+            easing: 'easeOutQuart'
+        },
+        animations: {
+            numbers: {
+                type: 'number',
+                properties: [
+                    'x',
+                    'y',
+                    'width',
+                    'height',
+                    'caretX',
+                    'caretY'
+                ]
+            },
+            opacity: {
+                easing: 'linear',
+                duration: 200
+            }
+        },
+        callbacks: defaultCallbacks
+    },
+    defaultRoutes: {
+        bodyFont: 'font',
+        footerFont: 'font',
+        titleFont: 'font'
+    },
+    descriptors: {
+        _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',
+        _indexable: false,
+        callbacks: {
+            _scriptable: false,
+            _indexable: false
+        },
+        animation: {
+            _fallback: false
+        },
+        animations: {
+            _fallback: 'animation'
+        }
+    },
+    additionalOptionScopes: [
+        'interaction'
+    ]
+};
+
+var plugins = /*#__PURE__*/Object.freeze({
+__proto__: null,
+Colors: plugin_colors,
+Decimation: plugin_decimation,
+Filler: index,
+Legend: plugin_legend,
+SubTitle: plugin_subtitle,
+Title: plugin_title,
+Tooltip: plugin_tooltip
+});
+
+const addIfString = (labels, raw, index, addedLabels)=>{
+    if (typeof raw === 'string') {
+        index = labels.push(raw) - 1;
+        addedLabels.unshift({
+            index,
+            label: raw
+        });
+    } else if (isNaN(raw)) {
+        index = null;
+    }
+    return index;
+};
+function findOrAddLabel(labels, raw, index, addedLabels) {
+    const first = labels.indexOf(raw);
+    if (first === -1) {
+        return addIfString(labels, raw, index, addedLabels);
+    }
+    const last = labels.lastIndexOf(raw);
+    return first !== last ? index : first;
+}
+const validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);
+function _getLabelForValue(value) {
+    const labels = this.getLabels();
+    if (value >= 0 && value < labels.length) {
+        return labels[value];
+    }
+    return value;
+}
+class CategoryScale extends Scale {
+    static id = 'category';
+ static defaults = {
+        ticks: {
+            callback: _getLabelForValue
+        }
+    };
+    constructor(cfg){
+        super(cfg);
+         this._startValue = undefined;
+        this._valueRange = 0;
+        this._addedLabels = [];
+    }
+    init(scaleOptions) {
+        const added = this._addedLabels;
+        if (added.length) {
+            const labels = this.getLabels();
+            for (const { index , label  } of added){
+                if (labels[index] === label) {
+                    labels.splice(index, 1);
+                }
+            }
+            this._addedLabels = [];
+        }
+        super.init(scaleOptions);
+    }
+    parse(raw, index) {
+        if (isNullOrUndef(raw)) {
+            return null;
+        }
+        const labels = this.getLabels();
+        index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);
+        return validIndex(index, labels.length - 1);
+    }
+    determineDataLimits() {
+        const { minDefined , maxDefined  } = this.getUserBounds();
+        let { min , max  } = this.getMinMax(true);
+        if (this.options.bounds === 'ticks') {
+            if (!minDefined) {
+                min = 0;
+            }
+            if (!maxDefined) {
+                max = this.getLabels().length - 1;
+            }
+        }
+        this.min = min;
+        this.max = max;
+    }
+    buildTicks() {
+        const min = this.min;
+        const max = this.max;
+        const offset = this.options.offset;
+        const ticks = [];
+        let labels = this.getLabels();
+        labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);
+        this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);
+        this._startValue = this.min - (offset ? 0.5 : 0);
+        for(let value = min; value <= max; value++){
+            ticks.push({
+                value
+            });
+        }
+        return ticks;
+    }
+    getLabelForValue(value) {
+        return _getLabelForValue.call(this, value);
+    }
+ configure() {
+        super.configure();
+        if (!this.isHorizontal()) {
+            this._reversePixels = !this._reversePixels;
+        }
+    }
+    getPixelForValue(value) {
+        if (typeof value !== 'number') {
+            value = this.parse(value);
+        }
+        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
+    }
+    getPixelForTick(index) {
+        const ticks = this.ticks;
+        if (index < 0 || index > ticks.length - 1) {
+            return null;
+        }
+        return this.getPixelForValue(ticks[index].value);
+    }
+    getValueForPixel(pixel) {
+        return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);
+    }
+    getBasePixel() {
+        return this.bottom;
+    }
+}
+
+function generateTicks$1(generationOptions, dataRange) {
+    const ticks = [];
+    const MIN_SPACING = 1e-14;
+    const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds  } = generationOptions;
+    const unit = step || 1;
+    const maxSpaces = maxTicks - 1;
+    const { min: rmin , max: rmax  } = dataRange;
+    const minDefined = !isNullOrUndef(min);
+    const maxDefined = !isNullOrUndef(max);
+    const countDefined = !isNullOrUndef(count);
+    const minSpacing = (rmax - rmin) / (maxDigits + 1);
+    let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;
+    let factor, niceMin, niceMax, numSpaces;
+    if (spacing < MIN_SPACING && !minDefined && !maxDefined) {
+        return [
+            {
+                value: rmin
+            },
+            {
+                value: rmax
+            }
+        ];
+    }
+    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);
+    if (numSpaces > maxSpaces) {
+        spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;
+    }
+    if (!isNullOrUndef(precision)) {
+        factor = Math.pow(10, precision);
+        spacing = Math.ceil(spacing * factor) / factor;
+    }
+    if (bounds === 'ticks') {
+        niceMin = Math.floor(rmin / spacing) * spacing;
+        niceMax = Math.ceil(rmax / spacing) * spacing;
+    } else {
+        niceMin = rmin;
+        niceMax = rmax;
+    }
+    if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {
+        numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));
+        spacing = (max - min) / numSpaces;
+        niceMin = min;
+        niceMax = max;
+    } else if (countDefined) {
+        niceMin = minDefined ? min : niceMin;
+        niceMax = maxDefined ? max : niceMax;
+        numSpaces = count - 1;
+        spacing = (niceMax - niceMin) / numSpaces;
+    } else {
+        numSpaces = (niceMax - niceMin) / spacing;
+        if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {
+            numSpaces = Math.round(numSpaces);
+        } else {
+            numSpaces = Math.ceil(numSpaces);
+        }
+    }
+    const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));
+    factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);
+    niceMin = Math.round(niceMin * factor) / factor;
+    niceMax = Math.round(niceMax * factor) / factor;
+    let j = 0;
+    if (minDefined) {
+        if (includeBounds && niceMin !== min) {
+            ticks.push({
+                value: min
+            });
+            if (niceMin < min) {
+                j++;
+            }
+            if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {
+                j++;
+            }
+        } else if (niceMin < min) {
+            j++;
+        }
+    }
+    for(; j < numSpaces; ++j){
+        const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;
+        if (maxDefined && tickValue > max) {
+            break;
+        }
+        ticks.push({
+            value: tickValue
+        });
+    }
+    if (maxDefined && includeBounds && niceMax !== max) {
+        if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {
+            ticks[ticks.length - 1].value = max;
+        } else {
+            ticks.push({
+                value: max
+            });
+        }
+    } else if (!maxDefined || niceMax === max) {
+        ticks.push({
+            value: niceMax
+        });
+    }
+    return ticks;
+}
+function relativeLabelSize(value, minSpacing, { horizontal , minRotation  }) {
+    const rad = toRadians(minRotation);
+    const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;
+    const length = 0.75 * minSpacing * ('' + value).length;
+    return Math.min(minSpacing / ratio, length);
+}
+class LinearScaleBase extends Scale {
+    constructor(cfg){
+        super(cfg);
+         this.start = undefined;
+         this.end = undefined;
+         this._startValue = undefined;
+         this._endValue = undefined;
+        this._valueRange = 0;
+    }
+    parse(raw, index) {
+        if (isNullOrUndef(raw)) {
+            return null;
+        }
+        if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {
+            return null;
+        }
+        return +raw;
+    }
+    handleTickRangeOptions() {
+        const { beginAtZero  } = this.options;
+        const { minDefined , maxDefined  } = this.getUserBounds();
+        let { min , max  } = this;
+        const setMin = (v)=>min = minDefined ? min : v;
+        const setMax = (v)=>max = maxDefined ? max : v;
+        if (beginAtZero) {
+            const minSign = sign(min);
+            const maxSign = sign(max);
+            if (minSign < 0 && maxSign < 0) {
+                setMax(0);
+            } else if (minSign > 0 && maxSign > 0) {
+                setMin(0);
+            }
+        }
+        if (min === max) {
+            let offset = max === 0 ? 1 : Math.abs(max * 0.05);
+            setMax(max + offset);
+            if (!beginAtZero) {
+                setMin(min - offset);
+            }
+        }
+        this.min = min;
+        this.max = max;
+    }
+    getTickLimit() {
+        const tickOpts = this.options.ticks;
+        let { maxTicksLimit , stepSize  } = tickOpts;
+        let maxTicks;
+        if (stepSize) {
+            maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;
+            if (maxTicks > 1000) {
+                console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);
+                maxTicks = 1000;
+            }
+        } else {
+            maxTicks = this.computeTickLimit();
+            maxTicksLimit = maxTicksLimit || 11;
+        }
+        if (maxTicksLimit) {
+            maxTicks = Math.min(maxTicksLimit, maxTicks);
+        }
+        return maxTicks;
+    }
+ computeTickLimit() {
+        return Number.POSITIVE_INFINITY;
+    }
+    buildTicks() {
+        const opts = this.options;
+        const tickOpts = opts.ticks;
+        let maxTicks = this.getTickLimit();
+        maxTicks = Math.max(2, maxTicks);
+        const numericGeneratorOptions = {
+            maxTicks,
+            bounds: opts.bounds,
+            min: opts.min,
+            max: opts.max,
+            precision: tickOpts.precision,
+            step: tickOpts.stepSize,
+            count: tickOpts.count,
+            maxDigits: this._maxDigits(),
+            horizontal: this.isHorizontal(),
+            minRotation: tickOpts.minRotation || 0,
+            includeBounds: tickOpts.includeBounds !== false
+        };
+        const dataRange = this._range || this;
+        const ticks = generateTicks$1(numericGeneratorOptions, dataRange);
+        if (opts.bounds === 'ticks') {
+            _setMinAndMaxByKey(ticks, this, 'value');
+        }
+        if (opts.reverse) {
+            ticks.reverse();
+            this.start = this.max;
+            this.end = this.min;
+        } else {
+            this.start = this.min;
+            this.end = this.max;
+        }
+        return ticks;
+    }
+ configure() {
+        const ticks = this.ticks;
+        let start = this.min;
+        let end = this.max;
+        super.configure();
+        if (this.options.offset && ticks.length) {
+            const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;
+            start -= offset;
+            end += offset;
+        }
+        this._startValue = start;
+        this._endValue = end;
+        this._valueRange = end - start;
+    }
+    getLabelForValue(value) {
+        return formatNumber(value, this.chart.options.locale, this.options.ticks.format);
+    }
+}
+
+class LinearScale extends LinearScaleBase {
+    static id = 'linear';
+ static defaults = {
+        ticks: {
+            callback: Ticks.formatters.numeric
+        }
+    };
+    determineDataLimits() {
+        const { min , max  } = this.getMinMax(true);
+        this.min = isNumberFinite(min) ? min : 0;
+        this.max = isNumberFinite(max) ? max : 1;
+        this.handleTickRangeOptions();
+    }
+ computeTickLimit() {
+        const horizontal = this.isHorizontal();
+        const length = horizontal ? this.width : this.height;
+        const minRotation = toRadians(this.options.ticks.minRotation);
+        const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;
+        const tickFont = this._resolveTickFontOptions(0);
+        return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));
+    }
+    getPixelForValue(value) {
+        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
+    }
+    getValueForPixel(pixel) {
+        return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;
+    }
+}
+
+const log10Floor = (v)=>Math.floor(log10(v));
+const changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);
+function isMajor(tickVal) {
+    const remain = tickVal / Math.pow(10, log10Floor(tickVal));
+    return remain === 1;
+}
+function steps(min, max, rangeExp) {
+    const rangeStep = Math.pow(10, rangeExp);
+    const start = Math.floor(min / rangeStep);
+    const end = Math.ceil(max / rangeStep);
+    return end - start;
+}
+function startExp(min, max) {
+    const range = max - min;
+    let rangeExp = log10Floor(range);
+    while(steps(min, max, rangeExp) > 10){
+        rangeExp++;
+    }
+    while(steps(min, max, rangeExp) < 10){
+        rangeExp--;
+    }
+    return Math.min(rangeExp, log10Floor(min));
+}
+ function generateTicks(generationOptions, { min , max  }) {
+    min = finiteOrDefault(generationOptions.min, min);
+    const ticks = [];
+    const minExp = log10Floor(min);
+    let exp = startExp(min, max);
+    let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;
+    const stepSize = Math.pow(10, exp);
+    const base = minExp > exp ? Math.pow(10, minExp) : 0;
+    const start = Math.round((min - base) * precision) / precision;
+    const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;
+    let significand = Math.floor((start - offset) / Math.pow(10, exp));
+    let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);
+    while(value < max){
+        ticks.push({
+            value,
+            major: isMajor(value),
+            significand
+        });
+        if (significand >= 10) {
+            significand = significand < 15 ? 15 : 20;
+        } else {
+            significand++;
+        }
+        if (significand >= 20) {
+            exp++;
+            significand = 2;
+            precision = exp >= 0 ? 1 : precision;
+        }
+        value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;
+    }
+    const lastTick = finiteOrDefault(generationOptions.max, value);
+    ticks.push({
+        value: lastTick,
+        major: isMajor(lastTick),
+        significand
+    });
+    return ticks;
+}
+class LogarithmicScale extends Scale {
+    static id = 'logarithmic';
+ static defaults = {
+        ticks: {
+            callback: Ticks.formatters.logarithmic,
+            major: {
+                enabled: true
+            }
+        }
+    };
+    constructor(cfg){
+        super(cfg);
+         this.start = undefined;
+         this.end = undefined;
+         this._startValue = undefined;
+        this._valueRange = 0;
+    }
+    parse(raw, index) {
+        const value = LinearScaleBase.prototype.parse.apply(this, [
+            raw,
+            index
+        ]);
+        if (value === 0) {
+            this._zero = true;
+            return undefined;
+        }
+        return isNumberFinite(value) && value > 0 ? value : null;
+    }
+    determineDataLimits() {
+        const { min , max  } = this.getMinMax(true);
+        this.min = isNumberFinite(min) ? Math.max(0, min) : null;
+        this.max = isNumberFinite(max) ? Math.max(0, max) : null;
+        if (this.options.beginAtZero) {
+            this._zero = true;
+        }
+        if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {
+            this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);
+        }
+        this.handleTickRangeOptions();
+    }
+    handleTickRangeOptions() {
+        const { minDefined , maxDefined  } = this.getUserBounds();
+        let min = this.min;
+        let max = this.max;
+        const setMin = (v)=>min = minDefined ? min : v;
+        const setMax = (v)=>max = maxDefined ? max : v;
+        if (min === max) {
+            if (min <= 0) {
+                setMin(1);
+                setMax(10);
+            } else {
+                setMin(changeExponent(min, -1));
+                setMax(changeExponent(max, +1));
+            }
+        }
+        if (min <= 0) {
+            setMin(changeExponent(max, -1));
+        }
+        if (max <= 0) {
+            setMax(changeExponent(min, +1));
+        }
+        this.min = min;
+        this.max = max;
+    }
+    buildTicks() {
+        const opts = this.options;
+        const generationOptions = {
+            min: this._userMin,
+            max: this._userMax
+        };
+        const ticks = generateTicks(generationOptions, this);
+        if (opts.bounds === 'ticks') {
+            _setMinAndMaxByKey(ticks, this, 'value');
+        }
+        if (opts.reverse) {
+            ticks.reverse();
+            this.start = this.max;
+            this.end = this.min;
+        } else {
+            this.start = this.min;
+            this.end = this.max;
+        }
+        return ticks;
+    }
+ getLabelForValue(value) {
+        return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);
+    }
+ configure() {
+        const start = this.min;
+        super.configure();
+        this._startValue = log10(start);
+        this._valueRange = log10(this.max) - log10(start);
+    }
+    getPixelForValue(value) {
+        if (value === undefined || value === 0) {
+            value = this.min;
+        }
+        if (value === null || isNaN(value)) {
+            return NaN;
+        }
+        return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);
+    }
+    getValueForPixel(pixel) {
+        const decimal = this.getDecimalForPixel(pixel);
+        return Math.pow(10, this._startValue + decimal * this._valueRange);
+    }
+}
+
+function getTickBackdropHeight(opts) {
+    const tickOpts = opts.ticks;
+    if (tickOpts.display && opts.display) {
+        const padding = toPadding(tickOpts.backdropPadding);
+        return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;
+    }
+    return 0;
+}
+function measureLabelSize(ctx, font, label) {
+    label = isArray(label) ? label : [
+        label
+    ];
+    return {
+        w: _longestText(ctx, font.string, label),
+        h: label.length * font.lineHeight
+    };
+}
+function determineLimits(angle, pos, size, min, max) {
+    if (angle === min || angle === max) {
+        return {
+            start: pos - size / 2,
+            end: pos + size / 2
+        };
+    } else if (angle < min || angle > max) {
+        return {
+            start: pos - size,
+            end: pos
+        };
+    }
+    return {
+        start: pos,
+        end: pos + size
+    };
+}
+ function fitWithPointLabels(scale) {
+    const orig = {
+        l: scale.left + scale._padding.left,
+        r: scale.right - scale._padding.right,
+        t: scale.top + scale._padding.top,
+        b: scale.bottom - scale._padding.bottom
+    };
+    const limits = Object.assign({}, orig);
+    const labelSizes = [];
+    const padding = [];
+    const valueCount = scale._pointLabels.length;
+    const pointLabelOpts = scale.options.pointLabels;
+    const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;
+    for(let i = 0; i < valueCount; i++){
+        const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));
+        padding[i] = opts.padding;
+        const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);
+        const plFont = toFont(opts.font);
+        const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);
+        labelSizes[i] = textSize;
+        const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);
+        const angle = Math.round(toDegrees(angleRadians));
+        const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
+        const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
+        updateLimits(limits, orig, angleRadians, hLimits, vLimits);
+    }
+    scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);
+    scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);
+}
+function updateLimits(limits, orig, angle, hLimits, vLimits) {
+    const sin = Math.abs(Math.sin(angle));
+    const cos = Math.abs(Math.cos(angle));
+    let x = 0;
+    let y = 0;
+    if (hLimits.start < orig.l) {
+        x = (orig.l - hLimits.start) / sin;
+        limits.l = Math.min(limits.l, orig.l - x);
+    } else if (hLimits.end > orig.r) {
+        x = (hLimits.end - orig.r) / sin;
+        limits.r = Math.max(limits.r, orig.r + x);
+    }
+    if (vLimits.start < orig.t) {
+        y = (orig.t - vLimits.start) / cos;
+        limits.t = Math.min(limits.t, orig.t - y);
+    } else if (vLimits.end > orig.b) {
+        y = (vLimits.end - orig.b) / cos;
+        limits.b = Math.max(limits.b, orig.b + y);
+    }
+}
+function createPointLabelItem(scale, index, itemOpts) {
+    const outerDistance = scale.drawingArea;
+    const { extra , additionalAngle , padding , size  } = itemOpts;
+    const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);
+    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));
+    const y = yForAngle(pointLabelPosition.y, size.h, angle);
+    const textAlign = getTextAlignForAngle(angle);
+    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);
+    return {
+        visible: true,
+        x: pointLabelPosition.x,
+        y,
+        textAlign,
+        left,
+        top: y,
+        right: left + size.w,
+        bottom: y + size.h
+    };
+}
+function isNotOverlapped(item, area) {
+    if (!area) {
+        return true;
+    }
+    const { left , top , right , bottom  } = item;
+    const apexesInArea = _isPointInArea({
+        x: left,
+        y: top
+    }, area) || _isPointInArea({
+        x: left,
+        y: bottom
+    }, area) || _isPointInArea({
+        x: right,
+        y: top
+    }, area) || _isPointInArea({
+        x: right,
+        y: bottom
+    }, area);
+    return !apexesInArea;
+}
+function buildPointLabelItems(scale, labelSizes, padding) {
+    const items = [];
+    const valueCount = scale._pointLabels.length;
+    const opts = scale.options;
+    const { centerPointLabels , display  } = opts.pointLabels;
+    const itemOpts = {
+        extra: getTickBackdropHeight(opts) / 2,
+        additionalAngle: centerPointLabels ? PI / valueCount : 0
+    };
+    let area;
+    for(let i = 0; i < valueCount; i++){
+        itemOpts.padding = padding[i];
+        itemOpts.size = labelSizes[i];
+        const item = createPointLabelItem(scale, i, itemOpts);
+        items.push(item);
+        if (display === 'auto') {
+            item.visible = isNotOverlapped(item, area);
+            if (item.visible) {
+                area = item;
+            }
+        }
+    }
+    return items;
+}
+function getTextAlignForAngle(angle) {
+    if (angle === 0 || angle === 180) {
+        return 'center';
+    } else if (angle < 180) {
+        return 'left';
+    }
+    return 'right';
+}
+function leftForTextAlign(x, w, align) {
+    if (align === 'right') {
+        x -= w;
+    } else if (align === 'center') {
+        x -= w / 2;
+    }
+    return x;
+}
+function yForAngle(y, h, angle) {
+    if (angle === 90 || angle === 270) {
+        y -= h / 2;
+    } else if (angle > 270 || angle < 90) {
+        y -= h;
+    }
+    return y;
+}
+function drawPointLabelBox(ctx, opts, item) {
+    const { left , top , right , bottom  } = item;
+    const { backdropColor  } = opts;
+    if (!isNullOrUndef(backdropColor)) {
+        const borderRadius = toTRBLCorners(opts.borderRadius);
+        const padding = toPadding(opts.backdropPadding);
+        ctx.fillStyle = backdropColor;
+        const backdropLeft = left - padding.left;
+        const backdropTop = top - padding.top;
+        const backdropWidth = right - left + padding.width;
+        const backdropHeight = bottom - top + padding.height;
+        if (Object.values(borderRadius).some((v)=>v !== 0)) {
+            ctx.beginPath();
+            addRoundedRectPath(ctx, {
+                x: backdropLeft,
+                y: backdropTop,
+                w: backdropWidth,
+                h: backdropHeight,
+                radius: borderRadius
+            });
+            ctx.fill();
+        } else {
+            ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);
+        }
+    }
+}
+function drawPointLabels(scale, labelCount) {
+    const { ctx , options: { pointLabels  }  } = scale;
+    for(let i = labelCount - 1; i >= 0; i--){
+        const item = scale._pointLabelItems[i];
+        if (!item.visible) {
+            continue;
+        }
+        const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));
+        drawPointLabelBox(ctx, optsAtIndex, item);
+        const plFont = toFont(optsAtIndex.font);
+        const { x , y , textAlign  } = item;
+        renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {
+            color: optsAtIndex.color,
+            textAlign: textAlign,
+            textBaseline: 'middle'
+        });
+    }
+}
+function pathRadiusLine(scale, radius, circular, labelCount) {
+    const { ctx  } = scale;
+    if (circular) {
+        ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);
+    } else {
+        let pointPosition = scale.getPointPosition(0, radius);
+        ctx.moveTo(pointPosition.x, pointPosition.y);
+        for(let i = 1; i < labelCount; i++){
+            pointPosition = scale.getPointPosition(i, radius);
+            ctx.lineTo(pointPosition.x, pointPosition.y);
+        }
+    }
+}
+function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {
+    const ctx = scale.ctx;
+    const circular = gridLineOpts.circular;
+    const { color , lineWidth  } = gridLineOpts;
+    if (!circular && !labelCount || !color || !lineWidth || radius < 0) {
+        return;
+    }
+    ctx.save();
+    ctx.strokeStyle = color;
+    ctx.lineWidth = lineWidth;
+    ctx.setLineDash(borderOpts.dash || []);
+    ctx.lineDashOffset = borderOpts.dashOffset;
+    ctx.beginPath();
+    pathRadiusLine(scale, radius, circular, labelCount);
+    ctx.closePath();
+    ctx.stroke();
+    ctx.restore();
+}
+function createPointLabelContext(parent, index, label) {
+    return createContext(parent, {
+        label,
+        index,
+        type: 'pointLabel'
+    });
+}
+class RadialLinearScale extends LinearScaleBase {
+    static id = 'radialLinear';
+ static defaults = {
+        display: true,
+        animate: true,
+        position: 'chartArea',
+        angleLines: {
+            display: true,
+            lineWidth: 1,
+            borderDash: [],
+            borderDashOffset: 0.0
+        },
+        grid: {
+            circular: false
+        },
+        startAngle: 0,
+        ticks: {
+            showLabelBackdrop: true,
+            callback: Ticks.formatters.numeric
+        },
+        pointLabels: {
+            backdropColor: undefined,
+            backdropPadding: 2,
+            display: true,
+            font: {
+                size: 10
+            },
+            callback (label) {
+                return label;
+            },
+            padding: 5,
+            centerPointLabels: false
+        }
+    };
+    static defaultRoutes = {
+        'angleLines.color': 'borderColor',
+        'pointLabels.color': 'color',
+        'ticks.color': 'color'
+    };
+    static descriptors = {
+        angleLines: {
+            _fallback: 'grid'
+        }
+    };
+    constructor(cfg){
+        super(cfg);
+         this.xCenter = undefined;
+         this.yCenter = undefined;
+         this.drawingArea = undefined;
+         this._pointLabels = [];
+        this._pointLabelItems = [];
+    }
+    setDimensions() {
+        const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);
+        const w = this.width = this.maxWidth - padding.width;
+        const h = this.height = this.maxHeight - padding.height;
+        this.xCenter = Math.floor(this.left + w / 2 + padding.left);
+        this.yCenter = Math.floor(this.top + h / 2 + padding.top);
+        this.drawingArea = Math.floor(Math.min(w, h) / 2);
+    }
+    determineDataLimits() {
+        const { min , max  } = this.getMinMax(false);
+        this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;
+        this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;
+        this.handleTickRangeOptions();
+    }
+ computeTickLimit() {
+        return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));
+    }
+    generateTickLabels(ticks) {
+        LinearScaleBase.prototype.generateTickLabels.call(this, ticks);
+        this._pointLabels = this.getLabels().map((value, index)=>{
+            const label = callback(this.options.pointLabels.callback, [
+                value,
+                index
+            ], this);
+            return label || label === 0 ? label : '';
+        }).filter((v, i)=>this.chart.getDataVisibility(i));
+    }
+    fit() {
+        const opts = this.options;
+        if (opts.display && opts.pointLabels.display) {
+            fitWithPointLabels(this);
+        } else {
+            this.setCenterPoint(0, 0, 0, 0);
+        }
+    }
+    setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {
+        this.xCenter += Math.floor((leftMovement - rightMovement) / 2);
+        this.yCenter += Math.floor((topMovement - bottomMovement) / 2);
+        this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));
+    }
+    getIndexAngle(index) {
+        const angleMultiplier = TAU / (this._pointLabels.length || 1);
+        const startAngle = this.options.startAngle || 0;
+        return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));
+    }
+    getDistanceFromCenterForValue(value) {
+        if (isNullOrUndef(value)) {
+            return NaN;
+        }
+        const scalingFactor = this.drawingArea / (this.max - this.min);
+        if (this.options.reverse) {
+            return (this.max - value) * scalingFactor;
+        }
+        return (value - this.min) * scalingFactor;
+    }
+    getValueForDistanceFromCenter(distance) {
+        if (isNullOrUndef(distance)) {
+            return NaN;
+        }
+        const scaledDistance = distance / (this.drawingArea / (this.max - this.min));
+        return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;
+    }
+    getPointLabelContext(index) {
+        const pointLabels = this._pointLabels || [];
+        if (index >= 0 && index < pointLabels.length) {
+            const pointLabel = pointLabels[index];
+            return createPointLabelContext(this.getContext(), index, pointLabel);
+        }
+    }
+    getPointPosition(index, distanceFromCenter, additionalAngle = 0) {
+        const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;
+        return {
+            x: Math.cos(angle) * distanceFromCenter + this.xCenter,
+            y: Math.sin(angle) * distanceFromCenter + this.yCenter,
+            angle
+        };
+    }
+    getPointPositionForValue(index, value) {
+        return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
+    }
+    getBasePosition(index) {
+        return this.getPointPositionForValue(index || 0, this.getBaseValue());
+    }
+    getPointLabelPosition(index) {
+        const { left , top , right , bottom  } = this._pointLabelItems[index];
+        return {
+            left,
+            top,
+            right,
+            bottom
+        };
+    }
+ drawBackground() {
+        const { backgroundColor , grid: { circular  }  } = this.options;
+        if (backgroundColor) {
+            const ctx = this.ctx;
+            ctx.save();
+            ctx.beginPath();
+            pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);
+            ctx.closePath();
+            ctx.fillStyle = backgroundColor;
+            ctx.fill();
+            ctx.restore();
+        }
+    }
+ drawGrid() {
+        const ctx = this.ctx;
+        const opts = this.options;
+        const { angleLines , grid , border  } = opts;
+        const labelCount = this._pointLabels.length;
+        let i, offset, position;
+        if (opts.pointLabels.display) {
+            drawPointLabels(this, labelCount);
+        }
+        if (grid.display) {
+            this.ticks.forEach((tick, index)=>{
+                if (index !== 0 || index === 0 && this.min < 0) {
+                    offset = this.getDistanceFromCenterForValue(tick.value);
+                    const context = this.getContext(index);
+                    const optsAtIndex = grid.setContext(context);
+                    const optsAtIndexBorder = border.setContext(context);
+                    drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);
+                }
+            });
+        }
+        if (angleLines.display) {
+            ctx.save();
+            for(i = labelCount - 1; i >= 0; i--){
+                const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));
+                const { color , lineWidth  } = optsAtIndex;
+                if (!lineWidth || !color) {
+                    continue;
+                }
+                ctx.lineWidth = lineWidth;
+                ctx.strokeStyle = color;
+                ctx.setLineDash(optsAtIndex.borderDash);
+                ctx.lineDashOffset = optsAtIndex.borderDashOffset;
+                offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);
+                position = this.getPointPosition(i, offset);
+                ctx.beginPath();
+                ctx.moveTo(this.xCenter, this.yCenter);
+                ctx.lineTo(position.x, position.y);
+                ctx.stroke();
+            }
+            ctx.restore();
+        }
+    }
+ drawBorder() {}
+ drawLabels() {
+        const ctx = this.ctx;
+        const opts = this.options;
+        const tickOpts = opts.ticks;
+        if (!tickOpts.display) {
+            return;
+        }
+        const startAngle = this.getIndexAngle(0);
+        let offset, width;
+        ctx.save();
+        ctx.translate(this.xCenter, this.yCenter);
+        ctx.rotate(startAngle);
+        ctx.textAlign = 'center';
+        ctx.textBaseline = 'middle';
+        this.ticks.forEach((tick, index)=>{
+            if (index === 0 && this.min >= 0 && !opts.reverse) {
+                return;
+            }
+            const optsAtIndex = tickOpts.setContext(this.getContext(index));
+            const tickFont = toFont(optsAtIndex.font);
+            offset = this.getDistanceFromCenterForValue(this.ticks[index].value);
+            if (optsAtIndex.showLabelBackdrop) {
+                ctx.font = tickFont.string;
+                width = ctx.measureText(tick.label).width;
+                ctx.fillStyle = optsAtIndex.backdropColor;
+                const padding = toPadding(optsAtIndex.backdropPadding);
+                ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);
+            }
+            renderText(ctx, tick.label, 0, -offset, tickFont, {
+                color: optsAtIndex.color,
+                strokeColor: optsAtIndex.textStrokeColor,
+                strokeWidth: optsAtIndex.textStrokeWidth
+            });
+        });
+        ctx.restore();
+    }
+ drawTitle() {}
+}
+
+const INTERVALS = {
+    millisecond: {
+        common: true,
+        size: 1,
+        steps: 1000
+    },
+    second: {
+        common: true,
+        size: 1000,
+        steps: 60
+    },
+    minute: {
+        common: true,
+        size: 60000,
+        steps: 60
+    },
+    hour: {
+        common: true,
+        size: 3600000,
+        steps: 24
+    },
+    day: {
+        common: true,
+        size: 86400000,
+        steps: 30
+    },
+    week: {
+        common: false,
+        size: 604800000,
+        steps: 4
+    },
+    month: {
+        common: true,
+        size: 2.628e9,
+        steps: 12
+    },
+    quarter: {
+        common: false,
+        size: 7.884e9,
+        steps: 4
+    },
+    year: {
+        common: true,
+        size: 3.154e10
+    }
+};
+ const UNITS =  /* #__PURE__ */ Object.keys(INTERVALS);
+ function sorter(a, b) {
+    return a - b;
+}
+ function parse(scale, input) {
+    if (isNullOrUndef(input)) {
+        return null;
+    }
+    const adapter = scale._adapter;
+    const { parser , round , isoWeekday  } = scale._parseOpts;
+    let value = input;
+    if (typeof parser === 'function') {
+        value = parser(value);
+    }
+    if (!isNumberFinite(value)) {
+        value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);
+    }
+    if (value === null) {
+        return null;
+    }
+    if (round) {
+        value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);
+    }
+    return +value;
+}
+ function determineUnitForAutoTicks(minUnit, min, max, capacity) {
+    const ilen = UNITS.length;
+    for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){
+        const interval = INTERVALS[UNITS[i]];
+        const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;
+        if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {
+            return UNITS[i];
+        }
+    }
+    return UNITS[ilen - 1];
+}
+ function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {
+    for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){
+        const unit = UNITS[i];
+        if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {
+            return unit;
+        }
+    }
+    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];
+}
+ function determineMajorUnit(unit) {
+    for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){
+        if (INTERVALS[UNITS[i]].common) {
+            return UNITS[i];
+        }
+    }
+}
+ function addTick(ticks, time, timestamps) {
+    if (!timestamps) {
+        ticks[time] = true;
+    } else if (timestamps.length) {
+        const { lo , hi  } = _lookup(timestamps, time);
+        const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];
+        ticks[timestamp] = true;
+    }
+}
+ function setMajorTicks(scale, ticks, map, majorUnit) {
+    const adapter = scale._adapter;
+    const first = +adapter.startOf(ticks[0].value, majorUnit);
+    const last = ticks[ticks.length - 1].value;
+    let major, index;
+    for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){
+        index = map[major];
+        if (index >= 0) {
+            ticks[index].major = true;
+        }
+    }
+    return ticks;
+}
+ function ticksFromTimestamps(scale, values, majorUnit) {
+    const ticks = [];
+     const map = {};
+    const ilen = values.length;
+    let i, value;
+    for(i = 0; i < ilen; ++i){
+        value = values[i];
+        map[value] = i;
+        ticks.push({
+            value,
+            major: false
+        });
+    }
+    return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);
+}
+class TimeScale extends Scale {
+    static id = 'time';
+ static defaults = {
+ bounds: 'data',
+        adapters: {},
+        time: {
+            parser: false,
+            unit: false,
+            round: false,
+            isoWeekday: false,
+            minUnit: 'millisecond',
+            displayFormats: {}
+        },
+        ticks: {
+ source: 'auto',
+            callback: false,
+            major: {
+                enabled: false
+            }
+        }
+    };
+ constructor(props){
+        super(props);
+         this._cache = {
+            data: [],
+            labels: [],
+            all: []
+        };
+         this._unit = 'day';
+         this._majorUnit = undefined;
+        this._offsets = {};
+        this._normalized = false;
+        this._parseOpts = undefined;
+    }
+    init(scaleOpts, opts = {}) {
+        const time = scaleOpts.time || (scaleOpts.time = {});
+         const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);
+        adapter.init(opts);
+        mergeIf(time.displayFormats, adapter.formats());
+        this._parseOpts = {
+            parser: time.parser,
+            round: time.round,
+            isoWeekday: time.isoWeekday
+        };
+        super.init(scaleOpts);
+        this._normalized = opts.normalized;
+    }
+ parse(raw, index) {
+        if (raw === undefined) {
+            return null;
+        }
+        return parse(this, raw);
+    }
+    beforeLayout() {
+        super.beforeLayout();
+        this._cache = {
+            data: [],
+            labels: [],
+            all: []
+        };
+    }
+    determineDataLimits() {
+        const options = this.options;
+        const adapter = this._adapter;
+        const unit = options.time.unit || 'day';
+        let { min , max , minDefined , maxDefined  } = this.getUserBounds();
+ function _applyBounds(bounds) {
+            if (!minDefined && !isNaN(bounds.min)) {
+                min = Math.min(min, bounds.min);
+            }
+            if (!maxDefined && !isNaN(bounds.max)) {
+                max = Math.max(max, bounds.max);
+            }
+        }
+        if (!minDefined || !maxDefined) {
+            _applyBounds(this._getLabelBounds());
+            if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {
+                _applyBounds(this.getMinMax(false));
+            }
+        }
+        min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);
+        max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;
+        this.min = Math.min(min, max - 1);
+        this.max = Math.max(min + 1, max);
+    }
+ _getLabelBounds() {
+        const arr = this.getLabelTimestamps();
+        let min = Number.POSITIVE_INFINITY;
+        let max = Number.NEGATIVE_INFINITY;
+        if (arr.length) {
+            min = arr[0];
+            max = arr[arr.length - 1];
+        }
+        return {
+            min,
+            max
+        };
+    }
+ buildTicks() {
+        const options = this.options;
+        const timeOpts = options.time;
+        const tickOpts = options.ticks;
+        const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();
+        if (options.bounds === 'ticks' && timestamps.length) {
+            this.min = this._userMin || timestamps[0];
+            this.max = this._userMax || timestamps[timestamps.length - 1];
+        }
+        const min = this.min;
+        const max = this.max;
+        const ticks = _filterBetween(timestamps, min, max);
+        this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));
+        this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);
+        this.initOffsets(timestamps);
+        if (options.reverse) {
+            ticks.reverse();
+        }
+        return ticksFromTimestamps(this, ticks, this._majorUnit);
+    }
+    afterAutoSkip() {
+        if (this.options.offsetAfterAutoskip) {
+            this.initOffsets(this.ticks.map((tick)=>+tick.value));
+        }
+    }
+ initOffsets(timestamps = []) {
+        let start = 0;
+        let end = 0;
+        let first, last;
+        if (this.options.offset && timestamps.length) {
+            first = this.getDecimalForValue(timestamps[0]);
+            if (timestamps.length === 1) {
+                start = 1 - first;
+            } else {
+                start = (this.getDecimalForValue(timestamps[1]) - first) / 2;
+            }
+            last = this.getDecimalForValue(timestamps[timestamps.length - 1]);
+            if (timestamps.length === 1) {
+                end = last;
+            } else {
+                end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;
+            }
+        }
+        const limit = timestamps.length < 3 ? 0.5 : 0.25;
+        start = _limitValue(start, 0, limit);
+        end = _limitValue(end, 0, limit);
+        this._offsets = {
+            start,
+            end,
+            factor: 1 / (start + 1 + end)
+        };
+    }
+ _generate() {
+        const adapter = this._adapter;
+        const min = this.min;
+        const max = this.max;
+        const options = this.options;
+        const timeOpts = options.time;
+        const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));
+        const stepSize = valueOrDefault(options.ticks.stepSize, 1);
+        const weekday = minor === 'week' ? timeOpts.isoWeekday : false;
+        const hasWeekday = isNumber(weekday) || weekday === true;
+        const ticks = {};
+        let first = min;
+        let time, count;
+        if (hasWeekday) {
+            first = +adapter.startOf(first, 'isoWeek', weekday);
+        }
+        first = +adapter.startOf(first, hasWeekday ? 'day' : minor);
+        if (adapter.diff(max, min, minor) > 100000 * stepSize) {
+            throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);
+        }
+        const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();
+        for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){
+            addTick(ticks, time, timestamps);
+        }
+        if (time === max || options.bounds === 'ticks' || count === 1) {
+            addTick(ticks, time, timestamps);
+        }
+        return Object.keys(ticks).sort(sorter).map((x)=>+x);
+    }
+ getLabelForValue(value) {
+        const adapter = this._adapter;
+        const timeOpts = this.options.time;
+        if (timeOpts.tooltipFormat) {
+            return adapter.format(value, timeOpts.tooltipFormat);
+        }
+        return adapter.format(value, timeOpts.displayFormats.datetime);
+    }
+ format(value, format) {
+        const options = this.options;
+        const formats = options.time.displayFormats;
+        const unit = this._unit;
+        const fmt = format || formats[unit];
+        return this._adapter.format(value, fmt);
+    }
+ _tickFormatFunction(time, index, ticks, format) {
+        const options = this.options;
+        const formatter = options.ticks.callback;
+        if (formatter) {
+            return callback(formatter, [
+                time,
+                index,
+                ticks
+            ], this);
+        }
+        const formats = options.time.displayFormats;
+        const unit = this._unit;
+        const majorUnit = this._majorUnit;
+        const minorFormat = unit && formats[unit];
+        const majorFormat = majorUnit && formats[majorUnit];
+        const tick = ticks[index];
+        const major = majorUnit && majorFormat && tick && tick.major;
+        return this._adapter.format(time, format || (major ? majorFormat : minorFormat));
+    }
+ generateTickLabels(ticks) {
+        let i, ilen, tick;
+        for(i = 0, ilen = ticks.length; i < ilen; ++i){
+            tick = ticks[i];
+            tick.label = this._tickFormatFunction(tick.value, i, ticks);
+        }
+    }
+ getDecimalForValue(value) {
+        return value === null ? NaN : (value - this.min) / (this.max - this.min);
+    }
+ getPixelForValue(value) {
+        const offsets = this._offsets;
+        const pos = this.getDecimalForValue(value);
+        return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);
+    }
+ getValueForPixel(pixel) {
+        const offsets = this._offsets;
+        const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
+        return this.min + pos * (this.max - this.min);
+    }
+ _getLabelSize(label) {
+        const ticksOpts = this.options.ticks;
+        const tickLabelWidth = this.ctx.measureText(label).width;
+        const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
+        const cosRotation = Math.cos(angle);
+        const sinRotation = Math.sin(angle);
+        const tickFontSize = this._resolveTickFontOptions(0).size;
+        return {
+            w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,
+            h: tickLabelWidth * sinRotation + tickFontSize * cosRotation
+        };
+    }
+ _getLabelCapacity(exampleTime) {
+        const timeOpts = this.options.time;
+        const displayFormats = timeOpts.displayFormats;
+        const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
+        const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [
+            exampleTime
+        ], this._majorUnit), format);
+        const size = this._getLabelSize(exampleLabel);
+        const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;
+        return capacity > 0 ? capacity : 1;
+    }
+ getDataTimestamps() {
+        let timestamps = this._cache.data || [];
+        let i, ilen;
+        if (timestamps.length) {
+            return timestamps;
+        }
+        const metas = this.getMatchingVisibleMetas();
+        if (this._normalized && metas.length) {
+            return this._cache.data = metas[0].controller.getAllParsedValues(this);
+        }
+        for(i = 0, ilen = metas.length; i < ilen; ++i){
+            timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));
+        }
+        return this._cache.data = this.normalize(timestamps);
+    }
+ getLabelTimestamps() {
+        const timestamps = this._cache.labels || [];
+        let i, ilen;
+        if (timestamps.length) {
+            return timestamps;
+        }
+        const labels = this.getLabels();
+        for(i = 0, ilen = labels.length; i < ilen; ++i){
+            timestamps.push(parse(this, labels[i]));
+        }
+        return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);
+    }
+ normalize(values) {
+        return _arrayUnique(values.sort(sorter));
+    }
+}
+
+function interpolate(table, val, reverse) {
+    let lo = 0;
+    let hi = table.length - 1;
+    let prevSource, nextSource, prevTarget, nextTarget;
+    if (reverse) {
+        if (val >= table[lo].pos && val <= table[hi].pos) {
+            ({ lo , hi  } = _lookupByKey(table, 'pos', val));
+        }
+        ({ pos: prevSource , time: prevTarget  } = table[lo]);
+        ({ pos: nextSource , time: nextTarget  } = table[hi]);
+    } else {
+        if (val >= table[lo].time && val <= table[hi].time) {
+            ({ lo , hi  } = _lookupByKey(table, 'time', val));
+        }
+        ({ time: prevSource , pos: prevTarget  } = table[lo]);
+        ({ time: nextSource , pos: nextTarget  } = table[hi]);
+    }
+    const span = nextSource - prevSource;
+    return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;
+}
+class TimeSeriesScale extends TimeScale {
+    static id = 'timeseries';
+ static defaults = TimeScale.defaults;
+ constructor(props){
+        super(props);
+         this._table = [];
+         this._minPos = undefined;
+         this._tableRange = undefined;
+    }
+ initOffsets() {
+        const timestamps = this._getTimestampsForTable();
+        const table = this._table = this.buildLookupTable(timestamps);
+        this._minPos = interpolate(table, this.min);
+        this._tableRange = interpolate(table, this.max) - this._minPos;
+        super.initOffsets(timestamps);
+    }
+ buildLookupTable(timestamps) {
+        const { min , max  } = this;
+        const items = [];
+        const table = [];
+        let i, ilen, prev, curr, next;
+        for(i = 0, ilen = timestamps.length; i < ilen; ++i){
+            curr = timestamps[i];
+            if (curr >= min && curr <= max) {
+                items.push(curr);
+            }
+        }
+        if (items.length < 2) {
+            return [
+                {
+                    time: min,
+                    pos: 0
+                },
+                {
+                    time: max,
+                    pos: 1
+                }
+            ];
+        }
+        for(i = 0, ilen = items.length; i < ilen; ++i){
+            next = items[i + 1];
+            prev = items[i - 1];
+            curr = items[i];
+            if (Math.round((next + prev) / 2) !== curr) {
+                table.push({
+                    time: curr,
+                    pos: i / (ilen - 1)
+                });
+            }
+        }
+        return table;
+    }
+ _generate() {
+        const min = this.min;
+        const max = this.max;
+        let timestamps = super.getDataTimestamps();
+        if (!timestamps.includes(min) || !timestamps.length) {
+            timestamps.splice(0, 0, min);
+        }
+        if (!timestamps.includes(max) || timestamps.length === 1) {
+            timestamps.push(max);
+        }
+        return timestamps.sort((a, b)=>a - b);
+    }
+ _getTimestampsForTable() {
+        let timestamps = this._cache.all || [];
+        if (timestamps.length) {
+            return timestamps;
+        }
+        const data = this.getDataTimestamps();
+        const label = this.getLabelTimestamps();
+        if (data.length && label.length) {
+            timestamps = this.normalize(data.concat(label));
+        } else {
+            timestamps = data.length ? data : label;
+        }
+        timestamps = this._cache.all = timestamps;
+        return timestamps;
+    }
+ getDecimalForValue(value) {
+        return (interpolate(this._table, value) - this._minPos) / this._tableRange;
+    }
+ getValueForPixel(pixel) {
+        const offsets = this._offsets;
+        const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
+        return interpolate(this._table, decimal * this._tableRange + this._minPos, true);
+    }
+}
+
+var scales = /*#__PURE__*/Object.freeze({
+__proto__: null,
+CategoryScale: CategoryScale,
+LinearScale: LinearScale,
+LogarithmicScale: LogarithmicScale,
+RadialLinearScale: RadialLinearScale,
+TimeScale: TimeScale,
+TimeSeriesScale: TimeSeriesScale
+});
+
+const registerables = [
+    controllers,
+    elements,
+    plugins,
+    scales
+];
+
+export { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };
+//# sourceMappingURL=chart.js.map
Index: node_modules/chart.js/dist/chart.js.map
===================================================================
--- node_modules/chart.js/dist/chart.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chart.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"chart.js","sources":["../src/core/core.animator.js","../src/core/core.animation.js","../src/core/core.animations.js","../src/core/core.datasetController.js","../src/controllers/controller.bar.js","../src/controllers/controller.bubble.js","../src/controllers/controller.doughnut.js","../src/controllers/controller.line.js","../src/controllers/controller.polarArea.js","../src/controllers/controller.pie.js","../src/controllers/controller.radar.js","../src/controllers/controller.scatter.js","../src/core/core.adapters.ts","../src/core/core.interaction.js","../src/core/core.layouts.js","../src/platform/platform.base.js","../src/platform/platform.basic.js","../src/platform/platform.dom.js","../src/platform/index.js","../src/core/core.element.ts","../src/core/core.scale.autoskip.js","../src/core/core.scale.js","../src/core/core.typedRegistry.js","../src/core/core.registry.js","../src/core/core.plugins.js","../src/core/core.config.js","../src/core/core.controller.js","../src/elements/element.arc.ts","../src/elements/element.line.js","../src/elements/element.point.ts","../src/elements/element.bar.js","../src/plugins/plugin.colors.ts","../src/plugins/plugin.decimation.js","../src/plugins/plugin.filler/filler.segment.js","../src/plugins/plugin.filler/filler.helper.js","../src/plugins/plugin.filler/filler.options.js","../src/plugins/plugin.filler/filler.target.stack.js","../src/plugins/plugin.filler/simpleArc.js","../src/plugins/plugin.filler/filler.target.js","../src/plugins/plugin.filler/filler.drawing.js","../src/plugins/plugin.filler/index.js","../src/plugins/plugin.legend.js","../src/plugins/plugin.title.js","../src/plugins/plugin.subtitle.js","../src/plugins/plugin.tooltip.js","../src/scales/scale.category.js","../src/scales/scale.linearbase.js","../src/scales/scale.linear.js","../src/scales/scale.logarithmic.js","../src/scales/scale.radialLinear.js","../src/scales/scale.time.js","../src/scales/scale.timeseries.js","../src/index.ts"],"sourcesContent":["import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n\n  /**\n\t * @private\n\t */\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _update(date = Date.now()) {\n    let remaining = 0;\n\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n\n      for (; i >= 0; --i) {\n        item = items[i];\n\n        if (item._active) {\n          if (item._total > anims.duration) {\n            // if the animation has been updated and its duration prolonged,\n            // update to total duration of current animations run (for progress event)\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          // Remove the item by replacing it with last item and removing the last\n          // A lot faster than splice.\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n\n      remaining += items.length;\n    });\n\n    this._lastDate = date;\n\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n\n  /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n\n  /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n\n  /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n\n  /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  /**\n   * @param {string} from\n   * @param {string} to\n   * @param {number} factor\n   */\n  color(from, to, factor) {\n    const c0 = helpersColor(from || transparent);\n    const c1 = c0.valid && helpersColor(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nexport default class Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n\n  active() {\n    return this._active;\n  }\n\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n\n  cancel() {\n    if (this._active) {\n      // update current evaluated value, for smoother animations\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n\n    this._active = from !== to && (loop || (elapsed < duration));\n\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n    this._target[prop] = this._fn(from, to, factor);\n  }\n\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n\n    const animationOptions = Object.keys(defaults.animation);\n    const animatedProps = this._properties;\n\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n\n  /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      // Going to shared options:\n      // After all animations are done, assign the shared options object to the element\n      // So any new updates to the shared options are observed\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n        // rejected, noop\n      });\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @private\n\t */\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n\n      if (animation) {\n        if (cfg && animation.active()) {\n          // There is an existing active animation, let's update that\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        // not animated, set directly to new value\n        target[prop] = value;\n        continue;\n      }\n\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n\n\n  /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n  update(target, values) {\n    if (this._properties.size === 0) {\n      // Nothing is animated, just apply the new values.\n      Object.assign(target, values);\n      return;\n    }\n\n    const animations = this._createAnimations(target, values);\n\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\n\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  // @ts-ignore\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    // Going from shared options to distinct one:\n    // Create new options object containing the old shared values and start updating that.\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\n\nfunction toClip(value) {\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  let found = false;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      found = true;\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n\n  if (!found && !options.all) {\n    return 0;\n  }\n\n  return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n  const {iScale, vScale} = meta;\n  const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n  const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      [iAxisKey]: key,\n      [vAxisKey]: data[key]\n    };\n  }\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n    const visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\n\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  // Not using meta.index here, because it might be already updated if the dataset changed location\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n    if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n      delete stacks[axis]._visualValues[datasetIndex];\n    }\n  }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n  /**\n   * @type {any}\n   */\n  static defaults = {};\n\n  /**\n   * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n   */\n  static datasetElementType = null;\n\n  /**\n   * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n   */\n  static dataElementType = null;\n\n  /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    /** @type {boolean | object} */\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.datasetElementType = new.target.datasetElementType;\n    this.dataElementType = new.target.dataElementType;\n\n    this.initialize();\n  }\n\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n\n    if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n      console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n    }\n  }\n\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n\n  /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n\n  /**\n\t * @private\n\t */\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n\n  reset() {\n    this._update('reset');\n  }\n\n  /**\n\t * @private\n\t */\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n\n    // In order to correctly handle data addition/deletion animation (and thus simulate\n    // real-time charts), we need to monitor these data modifications and synchronize\n    // the internal metadata accordingly.\n\n    if (isObject(data)) {\n      const meta = this._cachedMeta;\n      this._data = convertObjectDataToArray(data, meta);\n    } else if (_data !== data) {\n      if (_data) {\n        // This case happens when the user replaced the data array instance.\n        unlistenArrayEvents(_data, this);\n        // Discard old parsed data and stacks\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n\n  addElements() {\n    const meta = this._cachedMeta;\n\n    this._dataCheck();\n\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n\n    this._dataCheck();\n\n    // make sure cached _stacked status is current\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n\n    // detect change in stack option\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      // remove values from old stack\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n\n    // Re-sync meta data in case the user replaced the data array or if we missed\n    // any updates and so make sure that we handle number of datapoints changing.\n    this._resyncElements(resetNewElements);\n\n    // if stack changed, update stack values for the whole dataset\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n      meta._stacked = isStacked(meta.vScale, meta);\n    }\n  }\n\n  /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n\n  /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]._visualValues\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        // if the data is sorted, we don't need to check further from this end of array\n        break;\n      }\n    }\n    if (sorted) {\n      // in the sorted case, find first non-skipped value from other end of array\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return false;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {} // eslint-disable-line no-unused-vars\n\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n\n  /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n\n  /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    // context is provided as a function, and is called only if needed,\n    // so we don't create a context for each element if not needed.\n    const context = () => this.getContext(index, active, mode);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n    if (values.$shared) {\n      // `$shared` indicates this set of options can be shared between multiple elements.\n      // Sharing is used to reduce number of properties to change during animation.\n      values.$shared = sharing;\n\n      // We cache options by `mode`, which can be 'active' for example. This enables us\n      // to have the 'active' element options and 'default' options to switch between\n      // when interacting.\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n\n    return values;\n  }\n\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n\n  /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n\n  /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n\n  /**\n   * @todo v4, rename to getSharedOptions and remove excess functions\n   */\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n\n  /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n\n  /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      // When going from active to inactive, we need to update to the shared options.\n      // This way the once hovered element will end up with the same original shared options instance, after animation.\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n\n  /**\n\t * @private\n\t */\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n\n    // Apply changes detected through array listeners\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n\n    if (count) {\n      // TODO: It is not optimal to always parse the old data\n      // This is done because we are not detecting direct assignments:\n      // chart.data.datasets[0].data[5] = 10;\n      // chart.data.datasets[0].data[5].y = 10;\n      this.parse(0, count);\n    }\n\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n\n  updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @private\n\t */\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n\n  /**\n\t * @private\n   */\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n  _arrayUnique, isArray, isNullOrUndef,\n  valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      // Ignore truncated pixels\n      return;\n    }\n    if (defined(prev)) {\n      // curr - prev === 0 is ignored\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n\n  return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    // When bar thickness is enforced, category and bar percentages are ignored.\n    // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n    // and deprecate barPercentage since this value is ignored when thickness is absolute.\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n\n  if (prev === null) {\n    // first data: its size is double based on the next point or,\n    // if it's also the last data, we use the scale size.\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    // last data: its size is also double based on the previous point.\n    next = curr + curr - prev;\n  }\n\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  // Store `barEnd` (furthest away from origin) as parsed value,\n  // to make stacking straight forward\n  item[vScale.axis] = barEnd;\n\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\n\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\n\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'bar',\n\n    categoryPercentage: 0.8,\n    barPercentage: 0.9,\n    grouped: true,\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'base', 'width', 'height']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n        offset: true,\n        grid: {\n          offset: true\n        }\n      },\n      _value_: {\n        type: 'linear',\n        beginAtZero: true,\n      }\n    }\n  };\n\n\n  /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      // float bar: only one end of the bar is considered by `super`\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n\n  initialize() {\n    this.enableOptionSharing = true;\n\n    super.initialize();\n\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n\n  /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n    const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n    const skipNull = (meta) => {\n      const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n      const val = parsed && parsed[meta.vScale.axis];\n\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n\n      // stacked   | meta.stack\n      //           | found | not found | undefined\n      // false     |   x   |     x     |     x\n      // true      |       |     x     |\n      // undefined |       |     x     |     x\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n\n    // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n    // stack where possible invisible bars will be located.\n    // https://github.com/chartjs/Chart.js/issues/6368\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n\n    return stacks;\n  }\n\n  /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n\n  _getAxisCount() {\n    return this._getAxis().length;\n  }\n\n  getFirstScaleIdForIndexAxis() {\n    const scales = this.chart.scales;\n    const indexScaleId = this.chart.options.indexAxis;\n    return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n  }\n\n  _getAxis() {\n    const axis = {};\n    const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n    for (const dataset of this.chart.data.datasets) {\n      axis[valueOrDefault(\n        this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n      )] = true;\n    }\n    return Object.keys(axis);\n  }\n\n  /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n   * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1; // indexOf returns -1 if element is not present\n\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      // bar thickness ratio used for non-grouped bars\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n\n  /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      // bars crossing origin are not stacked\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      // When not visible, no height\n      head = base;\n    }\n\n    size = head - base;\n\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n\n      if (_stacked && !floating) {\n        // visual data coordinates after applying minBarLength\n        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n      }\n    }\n\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    const axisCount = this._getAxisCount();\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n      const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n      const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      // For non-grouped bar charts, exact pixel values are used\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n\n\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n  static id = 'bubble';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'borderWidth', 'radius']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n\n  update(mode) {\n    const points = this._cachedMeta.data;\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n\n    // In case values were cached (and thus frozen), we need to clone the values\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n\n    // Custom radius resolution\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n    return values;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n  static id = 'doughnut';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'arc',\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n      },\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutout: '50%',\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%',\n\n    // Spacing between arcs\n    spacing: 0,\n\n    indexAxis: 'r',\n  };\n\n  static descriptors = {\n    _scriptable: (name) => name !== 'spacing',\n    _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    // Need to override these to give a nice default\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n\n  linkScales() {}\n\n  /**\n\t * Override data parsing, since we are not using scales\n\t */\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n\n  /**\n\t * @private\n\t */\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n\n  /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n\n    // Compute the maximal rotation & circumference limits.\n    // If we only consider our dataset, this can cause problems when two datasets\n    // are both less than a circle with different rotations (starting angles)\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n\n    meta.total = this.calculateTotal();\n\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @private\n   */\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n\n    return total;\n  }\n\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n\n    if (!arcs) {\n      // Find the outmost visible dataset\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n\n    if (!arcs) {\n      return 0;\n    }\n\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n\n  getMaxOffset(arcs) {\n    let max = 0;\n\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n\n  /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n\n    return ringWeightOffset;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n\n  /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n\n    showLine: true,\n    spanGaps: false,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n      },\n      _value_: {\n        type: 'linear',\n      },\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    // Update Line\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    const end = start + count;\n    const pointsCount = points.length;\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = 0; i < pointsCount; ++i) {\n      const point = points[i];\n      const properties = directUpdate ? point : {};\n\n      if (i < start || i >= end) {\n        properties.skip = true;\n        continue;\n      }\n\n      const parsed = this.getParsed(i);\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n  static id = 'polarArea';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    dataElementType: 'arc',\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n      },\n    },\n    indexAxis: 'r',\n    startAngle: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    },\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n        angleLines: {\n          display: false\n        },\n        beginAtZero: true,\n        grid: {\n          circular: true\n        },\n        pointLabels: {\n          display: false\n        },\n        startAngle: 0\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @protected\n   */\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n\n    return range;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n\n    const defaultAngle = 360 / this.countVisibleElements();\n\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n\n    return count;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n  static id = 'pie';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    // The percentage of the chart that we cut out of the middle.\n    cutout: 0,\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%'\n  };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n  static id = 'radar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n    indexAxis: 'r',\n    showLine: true,\n    elements: {\n      line: {\n        fill: 'start'\n      }\n    },\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n\n    // Update Line\n    line.points = points;\n    // In resize mode only point locations change, so no need to set the points or options.\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n\n      this.updateElement(line, undefined, properties, mode);\n    }\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n  static id = 'scatter';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n    showLine: false,\n    fill: false\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n\n    interaction: {\n      mode: 'point'\n    },\n\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + ')'\n    };\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    if (this.options.showLine) {\n\n      // https://github.com/chartjs/Chart.js/issues/11333\n      if (!this.datasetElementType) {\n        this.addElements();\n      }\n      const {dataset: line, _dataset} = meta;\n\n      // Update Line\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    } else if (this.datasetElementType) {\n      // https://github.com/chartjs/Chart.js/issues/11333\n      delete meta.dataset;\n      this.datasetElementType = false;\n    }\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  addElements() {\n    const {showLine} = this.options;\n\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = this.chart.registry.getElement('line');\n    }\n\n    super.addElements();\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n\n    if (!data.length) {\n      return border;\n    }\n\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n  readonly options: T;\n  /**\n   * Will called with chart options after adapter creation.\n   */\n  init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n  /**\n   * Returns a map of time formats for the supported formatting units defined\n   * in Unit as well as 'datetime' representing a detailed date/time string.\n   */\n  formats(this: DateAdapter<T>): Record<TimeUnit | 'datetime', string>;\n  /**\n   * Parses the given `value` and return the associated timestamp.\n   * @param value - the value to parse (usually comes from the data)\n   * @param [format] - the expected data format\n   */\n  parse(this: DateAdapter<T>, value: unknown, format?: string): number | null;\n  /**\n   * Returns the formatted date in the specified `format` for a given `timestamp`.\n   * @param timestamp - the timestamp to format\n   * @param format - the date/time token\n   */\n  format(this: DateAdapter<T>, timestamp: number, format: string): string;\n  /**\n   * Adds the specified `amount` of `unit` to the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param amount - the amount to add\n   * @param unit - the unit as string\n   */\n  add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n  /**\n   * Returns the number of `unit` between the given timestamps.\n   * @param a - the input timestamp (reference)\n   * @param b - the timestamp to subtract\n   * @param unit - the unit as string\n   */\n  diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n  /**\n   * Returns start of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   * @param [weekday] - the ISO day of the week with 1 being Monday\n   * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n   */\n  startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n  /**\n   * Returns end of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   */\n  endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract<T = void>(): T {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n  /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */\n  static override<T extends AnyObject = AnyObject>(\n    members: Partial<Omit<DateAdapter<T>, 'options'>>\n  ) {\n    Object.assign(DateAdapterBase.prototype, members);\n  }\n\n  readonly options: AnyObject;\n\n  constructor(options?: AnyObject) {\n    this.options = options || {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  init() {}\n\n  formats(): Record<TimeUnit | 'datetime', string> {\n    return abstract();\n  }\n\n  parse(): number | null {\n    return abstract();\n  }\n\n  format(): string {\n    return abstract();\n  }\n\n  add(): number {\n    return abstract();\n  }\n\n  diff(): number {\n    return abstract();\n  }\n\n  startOf(): number {\n    return abstract();\n  }\n\n  endOf(): number {\n    return abstract();\n  }\n}\n\nexport default {\n  _date: DateAdapterBase as {\n    new (options?: AnyObject): DateAdapter;\n    override<T extends AnyObject = AnyObject>(\n      members: Partial<Omit<DateAdapter<T>, 'options'>>\n    ): void;\n  }\n};\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      const result = lookupMethod(data, axis, value);\n      if (spanGaps) {\n        const {vScale} = controller._cachedMeta;\n        const {_parsed} = metaset;\n\n        const distanceToDefinedLo = (_parsed\n          .slice(0, result.lo + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.lo -= Math.max(0, distanceToDefinedLo);\n\n        const distanceToDefinedHi = (_parsed\n          .slice(result.hi)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.hi += Math.max(0, distanceToDefinedHi);\n      }\n      return result;\n    } else if (controller._sharedOptions) {\n      // _sharedOptions indicates that each element has equal options -> equal proportions\n      // So we can do a ranged binary search based on the range of first element and\n      // be confident to get the full range of indices that can intersect with the value.\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  // Default to all elements, when binary search can not be used.\n  return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      // Can have multiple items at the same distance in which case we sort by size\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  // If we want to trigger on an intersect and we don't have any items\n  // that intersect the position, return nothing\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n  // Part of the public API to facilitate developers creating their own modes\n  evaluateInteractionItems,\n\n  // Helper function for different modes\n  modes: {\n    /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      // Default axis for index mode is 'x' to match old behaviour\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n\n        // don't count items that are skipped (null data)\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n\n      return elements;\n    },\n\n    /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n\n      return items;\n    },\n\n    /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n\n    /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n\n  // dynamically placed boxes size is not considered\n  if (!isObject(pos)) {\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n\n  // return booleans on the changes per direction\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n    // Dimensions changed and there were non full width boxes before this\n    // -> we have to refit those\n    refit |= same && refitBoxes.length;\n\n    // Chart area changed in the opposite direction\n    changed = changed || other;\n\n    if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n      refitBoxes.push(layout);\n    }\n  }\n\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] -  Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n  /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    // initialize item with default values\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    // @ts-ignore\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n\n  /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n\n  /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n\n  /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n   * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n\n    // Before any changes are made, notify boxes that an update is about to being\n    // This is used to clear any cached data (e.g. scale limits)\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n\n    // Essentially we now have any number of boxes on each of the 4 sides.\n    // Our canvas looks like the following.\n    // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n    // B1 is the bottom axis\n    // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n    // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n    // an error will be thrown.\n    //\n    // |----------------------------------------------------|\n    // |                  T1 (Full Width)                   |\n    // |----------------------------------------------------|\n    // |    |    |                 T2                  |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    | C1 |                           | C2 |    |\n    // |    |    |----|                           |----|    |\n    // |    |    |                                     |    |\n    // | L1 | L2 |           ChartArea (C0)            | R1 |\n    // |    |    |                                     |    |\n    // |    |    |----|                           |----|    |\n    // |    |    | C3 |                           | C4 |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    |                 B1                  |    |\n    // |----------------------------------------------------|\n    // |                  B2 (Full Width)                   |\n    // |----------------------------------------------------|\n    //\n\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n    // First fit the fullSize boxes, to reduce probability of re-fitting.\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n    // Then fit vertical boxes\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    // Then fit horizontal boxes\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      // if the area changed, re-fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n\n    // Finally place the boxes to correct coordinates\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n    // Move to opposite side of chart\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n\n    // Finally update boxes in chartArea (radial scale for example)\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n  /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n  acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n  releaseContext(context) { // eslint-disable-line no-unused-vars\n    return false;\n  }\n\n  /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n  addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n  removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n  getDevicePixelRatio() {\n    return 1;\n  }\n\n  /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n  isAttached(canvas) { // eslint-disable-line no-unused-vars\n    return true;\n  }\n\n  /**\n   * Updates config with platform specific requirements\n   * @param {import('../core/core.config.js').default} config\n   */\n  updateConfig(config) { // eslint-disable-line no-unused-vars\n    // no-op\n  }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n\n  // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n  // returns null or '' if no explicit value has been set to the canvas attribute.\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n\n  // Chart.js modifies some canvas values that we want to restore on destroy\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n\n  // Force canvas to display as block to avoid extra space caused by inline\n  // elements, which would interfere with the responsive resize process.\n  // https://github.com/chartjs/Chart.js/issues/2538\n  style.display = style.display || 'block';\n  // Include possible borders in the size\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      // If no explicit render height and style height, let's apply the aspect ratio,\n      // which one can be specified by the user but also by charts as default option\n      // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n  if (node) {\n    node.addEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction removeListener(chart, type, listener) {\n  if (chart && chart.canvas) {\n    chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      // If the container size shrank during chart resize, let's assume\n      // scrollbar appeared. So we resize again with the scrollbar visible -\n      // effectively making chart smaller and the scrollbar hidden again.\n      // Because we are inside `throttled`, and currently `ticking`, scroll\n      // events are ignored during this whole 2 resize process.\n      // If we assumed wrong and something else happened, we are resizing\n      // twice in a frame (potential performance issue)\n      listener();\n    }\n  }, window);\n\n  // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    // When its container's display is set to 'none' the callback will be called with a\n    // size of (0, 0), which will cause the chart to lose its original height, so skip\n    // resizing in such case.\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    // This case can occur if the chart is destroyed while waiting\n    // for the throttled function to occur. We prevent crashes by checking\n    // for a destroyed chart\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n\n  addListener(canvas, type, proxy);\n\n  return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n  acquireContext(canvas, aspectRatio) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n    // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n    // inside an iframe or when running in a protected environment. We could guess the\n    // types from their toString() value but let's keep things flexible and assume it's\n    // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n    // https://github.com/chartjs/Chart.js/issues/3887\n    // https://github.com/chartjs/Chart.js/issues/4102\n    // https://github.com/chartjs/Chart.js/issues/4152\n    if (context && context.canvas === canvas) {\n      // Load platform resources on first chart creation, to make it possible to\n      // import the library before setting platform options.\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n\n    return null;\n  }\n\n  /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n\n    // The canvas render size might have been changed (and thus the state stack discarded),\n    // we can't use save() and restore() to restore the initial state. So make sure that at\n    // least the canvas context is reset to the default state by setting the canvas width.\n    // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n    // eslint-disable-next-line no-self-assign\n    canvas.width = canvas.width;\n\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n\n  /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n  addEventListener(chart, type, listener) {\n    // Can have only one listener per type, so make sure previous is removed\n    this.removeEventListener(chart, type);\n\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n\n    if (!proxy) {\n      return;\n    }\n\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n  isAttached(canvas) {\n    const container = canvas && _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n  static defaults = {};\n  static defaultRoutes = undefined;\n\n  x: number;\n  y: number;\n  active = false;\n  options: O;\n  $animations: Record<keyof T, Animation>;\n\n  tooltipPosition(useFinalPosition: boolean): Point {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y} as Point;\n  }\n\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n\n  /**\n   * Gets the current or final value of each prop. Can return extra properties (whole object).\n   * @param props - properties to get\n   * @param [final] - get the final value (animation target)\n   */\n  getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n  getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n  getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      // let's not create an object, if not needed\n      return this as Record<string, unknown>;\n    }\n    const ret: Record<string, unknown> = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n    });\n    return ret;\n  }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const determinedMaxTicks = determineMaxTicks(scale);\n  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n\n  // If there are too many major ticks to display them all\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n\n  // If the major ticks are evenly spaced apart, place the minor ticks\n  // so that they divide the major ticks into even chunks\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n\n  next = start;\n\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n\n  if (len < 2) {\n    return false;\n  }\n\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n\n    // Return undefined if the pixel is out of the range\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n\n  return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  /** @type {CanvasTextAlign} */\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n  // eslint-disable-next-line max-statements\n  constructor(cfg) {\n    super();\n\n    /** @type {string} */\n    this.id = cfg.id;\n    /** @type {string} */\n    this.type = cfg.type;\n    /** @type {any} */\n    this.options = undefined;\n    /** @type {CanvasRenderingContext2D} */\n    this.ctx = cfg.ctx;\n    /** @type {Chart} */\n    this.chart = cfg.chart;\n\n    // implements box\n    /** @type {number} */\n    this.top = undefined;\n    /** @type {number} */\n    this.bottom = undefined;\n    /** @type {number} */\n    this.left = undefined;\n    /** @type {number} */\n    this.right = undefined;\n    /** @type {number} */\n    this.width = undefined;\n    /** @type {number} */\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    /** @type {number} */\n    this.maxWidth = undefined;\n    /** @type {number} */\n    this.maxHeight = undefined;\n    /** @type {number} */\n    this.paddingTop = undefined;\n    /** @type {number} */\n    this.paddingBottom = undefined;\n    /** @type {number} */\n    this.paddingLeft = undefined;\n    /** @type {number} */\n    this.paddingRight = undefined;\n\n    // scale-specific properties\n    /** @type {string=} */\n    this.axis = undefined;\n    /** @type {number=} */\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    /** @type {Tick[]} */\n    this.ticks = [];\n    /** @type {object[]|null} */\n    this._gridLineItems = null;\n    /** @type {object[]|null} */\n    this._labelItems = null;\n    /** @type {object|null} */\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    /** @type {number} */\n    this._startPixel = undefined;\n    /** @type {number} */\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n  init(options) {\n    this.options = options.setContext(this.getContext());\n\n    this.axis = options.axis;\n\n    // parse min/max value, so we can properly determine min/max for other scales\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n\n  /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    return raw;\n  }\n\n  /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isFinite(_userMin),\n      maxDefined: isFinite(_userMax)\n    };\n  }\n\n  /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n\n    // Make sure min <= max when only min or max is defined by user and the data is outside that range\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n\n  /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n\n  /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n  getTicks() {\n    return this.ticks;\n  }\n\n  /**\n\t * @return {string[]}\n\t */\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n\n  /**\n   * @return {import('../types.js').LabelItem[]}\n   */\n  getLabelItems(chartArea = this.chart.chartArea) {\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    return items;\n  }\n\n  // When a new layout is created, reset the data limits cache\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n\n  // These methods are ordered by lifecycle. Utilities then follow.\n  // Any function defined here is inherited by all scale types.\n  // Any function can be extended by the scale type\n\n  beforeUpdate() {\n    call(this.options.beforeUpdate, [this]);\n  }\n\n  /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t *   This space comes from two sources:\n\t *     - padding - space that's required to show the labels at the edges of the scale\n\t *     - thickness of scales or legends in another orientation\n\t */\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n\n    // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n    this.beforeUpdate();\n\n    // Absorb the master measurements\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n\n    // Dimensions\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n\n    // Data min/max\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n\n    this.beforeBuildTicks();\n\n    this.ticks = this.buildTicks() || [];\n\n    // Allow modification of ticks in callback.\n    this.afterBuildTicks();\n\n    // Compute tick rotation and fit using a sampled subset of labels\n    // We generally don't need to compute the size of every single label for determining scale size\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n    // configure is called twice, once here, once from core.controller.updateLayout.\n    // Here we haven't been positioned yet, but dimensions are correct.\n    // Variables set in configure are needed for calculateLabelRotation, and\n    // it's ok that coordinates are not correct there, only dimensions matter.\n    this.configure();\n\n    // Tick Rotation\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n    this.afterCalculateLabelRotation();\n\n    // Auto-skip\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n\n    if (samplingEnabled) {\n      // Generate labels using all non-skipped ticks\n      this._convertTicksToLabels(this.ticks);\n    }\n\n    this.beforeFit();\n    this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n    this.afterFit();\n\n    // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n    this.afterUpdate();\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      // by default vertical scales are from bottom to top, so pixels are reversed\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n\n  afterUpdate() {\n    call(this.options.afterUpdate, [this]);\n  }\n\n  //\n\n  beforeSetDimensions() {\n    call(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    if (this.isHorizontal()) {\n      // Reset position before calculating rotation\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n\n      // Reset position before calculating rotation\n      this.top = 0;\n      this.bottom = this.height;\n    }\n\n    // Reset padding\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    call(this.options.afterSetDimensions, [this]);\n  }\n\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    call(this.options[name], [this]);\n  }\n\n  // Data limits\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n\n  //\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  /**\n\t * @return {object[]} the ticks\n\t */\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n\n  beforeTickToLabelConversion() {\n    call(this.options.beforeTickToLabelConversion, [this]);\n  }\n  /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    call(this.options.afterTickToLabelConversion, [this]);\n  }\n\n  //\n\n  beforeCalculateLabelRotation() {\n    call(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n\n    // Estimate the width of each grid based on the canvas width, the maximum\n    // label width and the number of tick intervals\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n    // Allow 3 pixels x2 padding either side for label readability\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    call(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n\n  //\n\n  beforeFit() {\n    call(this.options.beforeFit, [this]);\n  }\n  fit() {\n    // Reset\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight; // fill all the height\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n\n        if (isHorizontal) {\n        // A horizontal axis is more constrained by the height.\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n        // A vertical axis is more constrained by the width. Labels are the\n        // dominant factor here, so get that length first and account for padding\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n\n    this._handleMargins();\n\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n\n      // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n      // which means that the right padding is dominated by the font height\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n\n      // Adjust padding taking into account changes in offsets\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n\n  /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n\n  afterFit() {\n    call(this.options.afterFit, [this]);\n  }\n\n  // Shared Methods\n  /**\n\t * @return {boolean}\n\t */\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  /**\n\t * @return {boolean}\n\t */\n  isFullSize() {\n    return this.options.fullSize;\n  }\n\n  /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n\n    this.generateTickLabels(ticks);\n\n    // Ticks should be skipped when callback returns null or undef, so lets remove those.\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n\n    this.afterTickToLabelConversion();\n  }\n\n  /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n    }\n\n    return labelSizes;\n  }\n\n  /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _computeLabelSizes(ticks, length, maxTicksLimit) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n    for (i = 0; i < length; i += increment) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = /** @type {string} */ (label[j]);\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n\n  /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value;\n  }\n\n  /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n  getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n    return NaN;\n  }\n\n  /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n  getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n\n  /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n\n  /**\n\t * @return {number}\n\t */\n  getBaseValue() {\n    const {min, max} = this;\n\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index) {\n    const ticks = this.ticks || [];\n\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n\n  /**\n\t * @return {number}\n\t * @private\n\t */\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n\n    // Calculate space needed by label in axis direction.\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n    // Calculate space needed for 1 tick in axis direction.\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n\n  /**\n\t * @return {boolean}\n\t * @private\n\t */\n  _isVisible() {\n    const display = this.options.display;\n\n    if (display !== 'auto') {\n      return !!display;\n    }\n\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position, border} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = borderOpts.display ? borderOpts.width : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const context = this.getContext(i);\n      const optsAtIndex = grid.setContext(context);\n      const optsAtIndexBorder = border.setContext(context);\n\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndexBorder.dash || [];\n      const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n      lineValue = getPixelForGridLine(this, i, offset);\n\n      // Skip if the pixel is out of the range\n      if (lineValue === undefined) {\n        continue;\n      }\n\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n\n    return items;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n\n      if (isHorizontal) {\n        x = pixel;\n\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n          x += (lineHeight / 2) * Math.sin(rotation);\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n\n      let backdrop;\n\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n\n        let top = textOffset - labelPadding.top;\n        let left = 0 - labelPadding.left;\n\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        default:\n          break;\n        }\n\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        case 'inner':\n          if (i === ilen - 1) {\n            left -= width;\n          } else if (i > 0) {\n            left -= width / 2;\n          }\n          break;\n        default:\n          break;\n        }\n\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n\n          color: optsAtIndex.backdropColor,\n        };\n      }\n\n      items.push({\n        label,\n        font,\n        textOffset,\n        options: {\n          rotation,\n          color,\n          strokeColor,\n          strokeWidth,\n          textAlign: tickTextAlign,\n          textBaseline,\n          translation: [x, y],\n          backdrop,\n        }\n      });\n    }\n\n    return items;\n  }\n\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n\n    let align = 'center';\n\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n\n    return align;\n  }\n\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n\n    let textAlign;\n    let x;\n\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n\n    return {textAlign, x};\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n\n    const chart = this.chart;\n    const position = this.options.position;\n\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n\n  /**\n   * @protected\n   */\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {\n    const {chart, ctx, options: {border, grid}} = this;\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = border.display ? borderOpts.width : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.width;\n    ctx.strokeStyle = borderOpts.color;\n\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n\n    if (!optionTicks.display) {\n      return;\n    }\n\n    const ctx = this.ctx;\n\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n\n    const items = this.getLabelItems(chartArea);\n    for (const item of items) {\n      const renderTextOptions = item.options;\n      const tickFont = item.font;\n      const label = item.label;\n      const y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n    }\n\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n\n    if (!title.display) {\n      return;\n    }\n\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n\n  /**\n\t * @return {object[]}\n\t * @private\n\t */\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      // backward compatibility: draw has been overridden by custom scale\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: bz,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n\n  /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n\n  /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n\n  /**\n   * @protected\n   */\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n\n    if (isIChartComponent(proto)) {\n      // Make sure the parent is registered and note the scope where its defaults are.\n      parentScope = this.register(proto);\n    }\n\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n\n    if (id in items) {\n      // already registered\n      return scope;\n    }\n\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n\n    return scope;\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n  get(id) {\n    return this.items[id];\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t */\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n\n    if (id in items) {\n      delete items[id];\n    }\n\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n  // Inherit the parent's defaults and keep existing defaults\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n\n  defaults.set(scope, itemDefaults);\n\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\n\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\n\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    // Order is important, Scale has Element in prototype chain,\n    // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  add(...args) {\n    this._each('register', args);\n  }\n\n  remove(...args) {\n    this._each('unregister', args);\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n\n  /**\n\t * @private\n\t */\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        // Handle loopable args\n        // Use case:\n        //  import * as plugins from './plugins.js';\n        //  Chart.register(plugins);\n        each(arg, item => {\n          // If there are mixed types in the loopable, make sure those are\n          // registered in correct registry\n          // Use case: (treemap exporting controller, elements etc)\n          //  import * as treemap from 'chartjs-chart-treemap.js';\n          //  Chart.register(treemap);\n\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n    registry[method](component);\n    call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n  }\n\n  /**\n\t * @private\n\t */\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    // plugins is the fallback registry\n    return this.plugins;\n  }\n\n  /**\n\t * @private\n\t */\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n  constructor() {\n    this._init = [];\n  }\n\n  /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n   * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callCallback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  invalidate() {\n    // When plugins are registered, there is the possibility of a double\n    // invalidate situation. In this case, we only want to invalidate once.\n    // If we invalidate multiple times, the `_oldCache` is lost and all of the\n    // plugins are restarted without being correctly stopped.\n    // See https://github.com/chartjs/Chart.js/issues/8147\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n\n    const descriptors = this._cache = this._createDescriptors(chart);\n\n    this._notifyStateChanges(chart);\n\n    return descriptors;\n  }\n\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    // options === false => all plugins are disabled\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    // make sure plugin defaults are in scopes for local (not registered) plugins\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    // These are just defaults that plugins can override\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n  if (id === 'x' || id === 'y' || id === 'r') {\n    return id;\n  }\n}\n\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n  for (const opts of scaleOptions) {\n    const axis = opts.axis\n      || axisFromPosition(opts.position)\n      || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n    if (axis) {\n      return axis;\n    }\n  }\n  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {axis};\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const scales = Object.create(null);\n\n  // First figure out first scale id's per axis.\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n\n  // Then merge dataset defaults to scale configs\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n\n  // apply scale defaults, if not overridden by dataset defaults\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n\n  return scales;\n}\n\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\n\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n\n  initOptions(config);\n\n  return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nexport default class Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  get platform() {\n    return this._config.platform;\n  }\n\n  get type() {\n    return this._config.type;\n  }\n\n  set type(type) {\n    this._config.type = type;\n  }\n\n  get data() {\n    return this._config.data;\n  }\n\n  set data(data) {\n    this._config.data = initData(data);\n  }\n\n  get options() {\n    return this._config.options;\n  }\n\n  set options(options) {\n    this._config.options = options;\n  }\n\n  get plugins() {\n    return this._config.plugins;\n  }\n\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @return {string[][]}\n   */\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset animation options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @param {string} transition\n   * @return {string[][]}\n   */\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        // The following are used for looking up the `animations` and `animation` keys\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving element options that belong\n   * to an dataset. These keys do not include the dataset itself, because it\n   * is not under options.\n   * @param {string} datasetType\n   * @param {string} elementType\n   * @return {string[][]}\n   */\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving plugin options.\n   * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n   * @return {string[][]}\n   */\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n\n  /**\n   * @private\n   */\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n\n  /**\n   * Resolves the objects from options and defaults for option value resolution.\n   * @param {object} mainScope - The main scope object for options\n   * @param {string[][]} keyLists - The arrays of keys in resolution order\n   * @param {boolean} [resetCache] - reset the cache for this mainScope\n   */\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n\n    const scopes = new Set();\n\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n\n  /**\n   * Returns the option scopes for resolving chart options\n   * @return {object[]}\n   */\n  chartOptionScopes() {\n    const {options, type} = this;\n\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {string[]} names\n   * @param {function|object} context\n   * @param {string[]} [prefixes]\n   * @return {object}\n   */\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      // subResolver is passed to scriptable options. It should not resolve to hover options.\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {object} [context]\n   * @param {string[]} [prefixes]\n   * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n   */\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\n\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n\n  chart.notifyPlugins('afterRender');\n  callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    // Support for array based queries (such as jQuery)\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    // Support for any object associated to a canvas (including a context2d)\n    item = item.canvas;\n  }\n  return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\n\nclass Chart {\n\n  static defaults = defaults;\n  static instances = instances;\n  static overrides = overrides;\n  static registry = registry;\n  static version = version;\n  static getChart = getChart;\n\n  static register(...items) {\n    registry.add(...items);\n    invalidatePlugins();\n  }\n\n  static unregister(...items) {\n    registry.remove(...items);\n    invalidatePlugins();\n  }\n\n  // eslint-disable-next-line max-statements\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    // Store the previously used aspect ratio to determine if a resize\n    // is needed during updates. Do this after _options is set since\n    // aspectRatio uses a getter\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    /** @type {?{attach?: function, detach?: function, resize?: function}} */\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n\n    // Add the chart instance to the global namespace\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\n      // The given item is not a compatible context2d element, let's return before finalizing\n      // the chart initialization but after setting basic chart / controller properties that\n      // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n      // https://github.com/chartjs/Chart.js/issues/2807\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      // If aspectRatio is defined in options, use that.\n      return aspectRatio;\n    }\n\n    if (maintainAspectRatio && _aspectRatio) {\n      // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n      return _aspectRatio;\n    }\n\n    // Calculate\n    return height ? width / height : null;\n  }\n\n  get data() {\n    return this.config.data;\n  }\n\n  set data(data) {\n    this.config.data = data;\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  set options(options) {\n    this.config.options = options;\n  }\n\n  get registry() {\n    return registry;\n  }\n\n  /**\n\t * @private\n\t */\n  _initialize() {\n    // Before init plugin notification\n    this.notifyPlugins('beforeInit');\n\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n\n    this.bindEvents();\n\n    // After init plugin notification\n    this.notifyPlugins('afterInit');\n\n    return this;\n  }\n\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n\n  /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n\n    this.notifyPlugins('resize', {size: newSize});\n\n    callCallback(options.onResize, [this, newSize], this);\n\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        // The resize update is delayed, only draw without updating.\n        this.render();\n      }\n    }\n  }\n\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n\n  /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n\n      scale.init(scaleOptions, options);\n    });\n    // clear up discarded scales\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n\n  /**\n\t * @private\n\t */\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n\n    this._removeUnreferencedMetasets();\n\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n\n    this._updateMetasets();\n    return newControllers;\n  }\n\n  /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n\n  /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n\n  update(mode) {\n    const config = this.config;\n\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n\n    // plugins options references might have change, let's invalidate the cache\n    // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n    this._plugins.invalidate();\n\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    // Make sure dataset controllers are updated and new controllers are reset\n    const newControllers = this.buildOrUpdateControllers();\n\n    this.notifyPlugins('beforeElementsUpdate');\n\n    // Make sure all dataset controllers have correct meta data counts\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      // New controllers will be reset after the layout pass, so we only want to modify\n      // elements added to new datasets\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n\n    // Only reset the controllers if we have animations\n    if (!animsDisabled) {\n      // Can only reset the new controllers after the scales have been updated\n      // Reset is done to get the starting point for the initial animation\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n\n    this._updateDatasets(mode);\n\n    // Do this before render so that any plugins that need final scale updates can use it\n    this.notifyPlugins('afterUpdate', {mode});\n\n    this._layers.sort(compare2Level('z', '_idx'));\n\n    // Replay last event from before update, or set hover styles on active elements\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n\n  /**\n   * @private\n   */\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      // The configured events have changed. Rebind.\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n\n  /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n\n    layouts.update(this, this.width, this.height, minPadding);\n\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n        return;\n      }\n\n      // configure is called twice, once in core.scale.update and once here.\n      // Here the boxes are fully updated and at their final positions.\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n\n    this.notifyPlugins('afterLayout');\n  }\n\n  /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n\n  /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n\n    meta.controller._update(mode);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      // Unset pending resize request now to avoid possible recursion within _resize\n      this._resizeBeforeDraw = null;\n      this._resize(width, height);\n    }\n    this.clear();\n\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n    // currently be part of layers. Instead, we draw\n    // layers <= 0 before(default, backward compat), and the rest after\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this._drawDatasets();\n\n    // Rest of layers\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this.notifyPlugins('afterDraw');\n  }\n\n  /**\n\t * @private\n\t */\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n\n  /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n\n  /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    // @ts-expect-error\n    const clip = getDatasetClipArea(this, meta);\n\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n\n    if (clip) {\n      clipArea(ctx, clip);\n    }\n\n    meta.controller.draw();\n\n    if (clip) {\n      unclipArea(ctx);\n    }\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n\n  /**\n   * Checks whether the given point is in the chart area.\n   * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n   * @returns {boolean}\n   */\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n\n    return [];\n  }\n\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\t\t\t// See isDatasetVisible() comment\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n\n    return meta;\n  }\n\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n\n    const meta = this.getDatasetMeta(datasetIndex);\n\n    // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n    // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n\n  /**\n\t * @private\n\t */\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n\n  /**\n\t * @private\n\t */\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n\n    this._stop();\n    this.config.clearCache();\n\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n\n    delete instances[this.id];\n\n    this.notifyPlugins('afterDestroy');\n  }\n\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n\n  /**\n\t * @private\n\t */\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n\n  /**\n   * @private\n   */\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n\n    each(this.options.events, (type) => _add(type, listener));\n  }\n\n  /**\n   * @private\n   */\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n\n    let detached; // eslint-disable-line prefer-const\n    const attached = () => {\n      _remove('attach', attached);\n\n      this.attached = true;\n      this.resize();\n\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n\n    detached = () => {\n      this.attached = false;\n\n      _remove('resize', listener);\n\n      // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n      this._stop();\n      this._resize(0, 0);\n\n      _add('attach', attached);\n    };\n\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n\n  /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n\n    if (changed) {\n      this._active = active;\n      // Make sure we don't use the previous mouse event to override the active elements in update.\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n\n  /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n   * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n\n  /**\n   * Check if a plugin with the specific ID is registered and enabled\n   * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n   * @returns {boolean}\n   */\n  isPluginEnabled(pluginId) {\n    return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n\n    if (changed || args.changed) {\n      this.render();\n    }\n\n    return this;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n   * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n\n    // If the event is replayed from `update`, we should evaluate with the final positions.\n    //\n    // The `replay`:\n    // It's the last event (excluding click) that has occurred before `update`.\n    // So mouse has not moved. It's also over the chart, because there is a `replay`.\n    //\n    // The why:\n    // If animations are active, the elements haven't moved yet compared to state before update.\n    // But if they will, we are activating the elements that would be active, if this check\n    // was done after the animations have completed. => \"final positions\".\n    // If there is no animations, the \"final\" and \"current\" positions are equal.\n    // This is done so we do not have to evaluate the active elements each animation frame\n    // - it would be expensive.\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n    if (inChartArea) {\n      // Set _lastEvent to null while we are processing the event handlers.\n      // This prevents recursion if the handler calls chart.update()\n      this._lastEvent = null;\n\n      // Invoke onHover hook\n      callCallback(options.onHover, [e, active, this], this);\n\n      if (isClick) {\n        callCallback(options.onClick, [e, active, this], this);\n      }\n    }\n\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n\n    this._lastEvent = lastEvent;\n\n    return changed;\n  }\n\n  /**\n   * @param {ChartEvent} e - The event\n   * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n   * @param {boolean} inChartArea - Is the event inside chartArea\n   * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n   * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n   * @pravate\n   */\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n  return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n  if (innerRadius > 0) {\n    const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n    ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n  } else {\n    const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n    if (borderJoinStyle === 'round') {\n      ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n    } else if (borderJoinStyle === 'bevel') {\n      const r = 2 * clipWidth * clipWidth;\n      const endX = -r * Math.cos(endAngle + PI / 2) + x;\n      const endY = -r * Math.sin(endAngle + PI / 2) + y;\n      const startX = r * Math.cos(startAngle + PI / 2) + x;\n      const startY = r * Math.sin(startAngle + PI / 2) + y;\n      ctx.lineTo(endX, endY);\n      ctx.lineTo(startX, startY);\n    }\n  }\n  ctx.closePath();\n\n  ctx.moveTo(0, 0);\n  ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n  ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n\n  // Draw an inner border by clipping the arc and drawing a double-width border\n  // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n  // Outer limits are complicated. We want to compute the available angular distance at\n  // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n  // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n  //\n  // If the borderRadius is large, that value can become negative.\n  // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n  // we know that the thickness term will dominate and compute the limits at that point\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */\nfunction pathArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  end: number,\n  circular: boolean,\n) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n  let spacingOffset = 0;\n  const alpha = end - start;\n\n  if (spacing) {\n    // When spacing is present, it is the same for all items\n    // So we adjust the start and end angle of the arc such that\n    // the distance is the same as it would be without the spacing\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n    // The corner segment from point 2 to point 3\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n\n    // The line from point 3 to point 4\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n\n    // The corner segment from point 4 to point 5\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n\n    // The inner arc from point 5 to point b to point 6\n    const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n    // The corner segment from point 6 to point 7\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n\n    // The line from point 7 to point 8\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n\n    // The corner segment from point 8 to point 1\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference, options} = element;\n  const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n  const inner = options.borderAlign === 'inner';\n\n  if (!borderWidth) {\n    return;\n  }\n\n  ctx.setLineDash(borderDash || []);\n  ctx.lineDashOffset = borderDashOffset;\n\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n\n  if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n    clipSelf(ctx, element, endAngle);\n  }\n\n  if (!fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.stroke();\n  }\n}\n\nexport interface ArcProps extends Point {\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n  circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n  static id = 'arc';\n\n  static defaults = {\n    borderAlign: 'center',\n    borderColor: '#fff',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: undefined,\n    borderRadius: 0,\n    borderWidth: 2,\n    offset: 0,\n    spacing: 0,\n    angle: undefined,\n    circular: true,\n    selfJoin: false,\n  };\n\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor'\n  };\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash'\n  };\n\n  circumference: number;\n  endAngle: number;\n  fullCircles: number;\n  innerRadius: number;\n  outerRadius: number;\n  pixelMargin: number;\n  startAngle: number;\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n    const betweenAngles = _circumference >= TAU || nonZeroBetween;\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n    return (betweenAngles && withinRadius);\n  }\n\n  getCenterPoint(useFinalPosition: boolean) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius'\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n\n  tooltipPosition(useFinalPosition: boolean) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n\n  draw(ctx: CanvasRenderingContext2D) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 4;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n\n    ctx.save();\n\n    const halfAngle = (this.startAngle + this.endAngle) / 2;\n    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n    const radiusOffset = offset * fix;\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n\n    drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n    ctx.restore();\n  }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n\n  return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  // eslint-disable-next-line prefer-const\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n\n    prev = point;\n  }\n\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n\n  return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      // Draw line to maxY and minY, using the average x-coordinate\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      // Line to y-value of last point in group. So the line continues\n      // from correct position. Not using move, to have solid path.\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    }\n\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0; // truncated x-coordinate\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      // Draw line to next x-position, using the first (or only)\n      // y-value in that group\n      ctx.lineTo(x, y);\n\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    // Keep track of the last y-value in group\n    lastY = y;\n  }\n  drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n\n  return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\n\nexport default class LineElement extends Element {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderCapStyle: 'butt',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 3,\n    capBezierPoints: true,\n    cubicInterpolationMode: 'default',\n    fill: false,\n    spanGaps: false,\n    stepped: false,\n    tension: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n  };\n\n\n  constructor(cfg) {\n    super();\n\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n\n  get points() {\n    return this._points;\n  }\n\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n\n  /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n\n  /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n\n  /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n\n    if (!segments.length) {\n      return;\n    }\n\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n\n  /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n\n  /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n\n    start = start || 0;\n    count = count || (this.points.length - start);\n\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n\n  /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n\n    if (points.length && options.borderWidth) {\n      ctx.save();\n\n      draw(ctx, this, start, count);\n\n      ctx.restore();\n    }\n\n    if (this.animated) {\n      // When line is animated, the control points and path are not cached.\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n  CartesianParsedData,\n  ChartArea,\n  Point,\n  PointHoverOptions,\n  PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n  static id = 'point';\n\n  parsed: CartesianParsedData;\n  skip?: boolean;\n  stop?: boolean;\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderWidth: 1,\n    hitRadius: 1,\n    hoverBorderWidth: 1,\n    hoverRadius: 4,\n    pointStyle: 'circle',\n    radius: 3,\n    rotation: 0\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n\n  inXRange(mouseX: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseX, 'x', useFinalPosition);\n  }\n\n  inYRange(mouseY: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseY, 'y', useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition?: boolean) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n\n  size(options?: Partial<PointOptions & PointHoverOptions>) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n\n  draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n    const options = this.options;\n\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n\n  getRange() {\n    const options = this.options || {};\n    // @ts-expect-error Fallbacks should never be hit in practice\n    return options.radius + options.hitRadius;\n  }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n  let left, right, top, bottom, half;\n\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n\n  return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n\n  // If the value is an object, assume the user knows what they are doing\n  // and apply as directed.\n  const enableBorder = enableBorderRadius || isObject(value);\n\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\n\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\n\nexport default class BarElement extends Element {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderSkipped: 'start',\n    borderWidth: 0,\n    borderRadius: 0,\n    inflateAmount: 'auto',\n    pointStyle: undefined\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n","import {DoughnutController, PolarAreaController, defaults} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n  enabled?: boolean;\n  forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n  backgroundColor?: unknown;\n  borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n  'rgb(54, 162, 235)', // blue\n  'rgb(255, 99, 132)', // red\n  'rgb(255, 159, 64)', // orange\n  'rgb(255, 205, 86)', // yellow\n  'rgb(75, 192, 192)', // green\n  'rgb(153, 102, 255)', // purple\n  'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n  return i;\n}\n\nfunction getColorizer(chart: Chart) {\n  let i = 0;\n\n  return (dataset: ChartDataset, datasetIndex: number) => {\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n    if (controller instanceof DoughnutController) {\n      i = colorizeDoughnutDataset(dataset, i);\n    } else if (controller instanceof PolarAreaController) {\n      i = colorizePolarAreaDataset(dataset, i);\n    } else if (controller) {\n      i = colorizeDefaultDataset(dataset, i);\n    }\n  };\n}\n\nfunction containsColorsDefinitions(\n  descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n  let k: number | string;\n\n  for (k in descriptors) {\n    if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction containsColorsDefinition(\n  descriptor: ColorsDescriptor\n) {\n  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nfunction containsDefaultColorsDefenitions() {\n  return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\n\nexport default {\n  id: 'colors',\n\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  } as ColorsPluginOptions,\n\n  beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n    if (!options.enabled) {\n      return;\n    }\n\n    const {\n      data: {datasets},\n      options: chartOptions\n    } = chart.config;\n    const {elements} = chartOptions;\n\n    const containsColorDefenition = (\n      containsColorsDefinitions(datasets) ||\n      containsColorsDefinition(chartOptions) ||\n      (elements && containsColorsDefinitions(elements)) ||\n      containsDefaultColorsDefenitions());\n\n    if (!options.forceOverride && containsColorDefenition) {\n      return;\n    }\n\n    const colorizer = getColorizer(chart);\n\n    datasets.forEach(colorizer);\n  }\n};\n","import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  /**\n   * Implementation of the Largest Triangle Three Buckets algorithm.\n   *\n   * This implementation is based on the original implementation by Sveinn Steinarsson\n   * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n   *\n   * The original implementation is MIT licensed.\n   */\n  const samples = options.samples || availableWidth;\n  // There are less points than the threshold, returning the whole array\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  const decimated = [];\n\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  // Starting from offset\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n\n    // Adding offset\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n\n    // Adding offset\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n\n    // Note that this is changed from the original algorithm which initializes these\n    // values to 1. The reason for this change is that if the area is small, nextA\n    // would never be set and thus a crash would occur in the next loop as `a` would become\n    // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n    // initializing with a negative number is the correct solution.\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n\n  // Include the last point\n  decimated[sampledIndex++] = data[endIndex];\n\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      // Use point.x here because we're computing the average data `x` value\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      // Push up to 4 points, 3 for the last interval and the first point for this interval\n      const lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        // The interval is defined by 4 points: start, min, max, end.\n        // The starting point is already considered at this point, so we need to determine which\n        // of the other points to add. We need to sort these points to ensure the decimated data\n        // is still sorted and then ensure there are no duplicates.\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n\n      // lastIndex === startIndex will occur when a range has only 1 point which could\n      // happen with very uneven data\n      if (i > 0 && lastIndex !== startIndex) {\n        // Last point in the previous interval\n        decimated.push(data[lastIndex]);\n      }\n\n      // Start of the new interval\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n\n  return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: data,\n    });\n  }\n}\n\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count;\n\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n\n  return {start, count};\n}\n\nexport default {\n  id: 'decimation',\n\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    // Assume the entire chart is available to show a few more points than needed\n    const availableWidth = chart.width;\n\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        // Decimation is only supported for lines that have an X indexAxis\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        // Only line datasets are supported\n        return;\n      }\n\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        // Only linear interpolation is supported\n        return;\n      }\n\n      if (chart.options.parsing) {\n        // Plugin only supports data that does not need parsing\n        return;\n      }\n\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        // No decimation is required until we are above this threshold\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        // First time we are seeing this dataset\n        // We override the 'data' property with a setter that stores the\n        // raw data in _data, but reads the decimated data from _decimated\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      // Point the chart to the decimated data\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n    if (!target.segments) {\n      // Special case for boundary not supporting `segments` (simpleArc)\n      // Bounds are provided as `target` for partial circle, or undefined for full circle\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n\n    // Get all segments from `target` that intersect the bounds of current segment of `line`\n    const targetSegments = _boundSegments(target, bounds);\n\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    // @ts-ignore\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n\n    if (target.visible) {\n      return fill;\n    }\n\n    visited.push(fill);\n    fill = target.fill;\n  }\n\n  return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n  /** @type {string | {value: number}} */\n  const fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  let target = parseFloat(fill);\n\n  if (isFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n\n  return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n  let value;\n\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n\n  if (fill === false || fill === null) {\n    return false;\n  }\n\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      // First point of a segment -> need to add another point before this,\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        // In the middle of a segment, no need to add more points.\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n  const {chart, fill, line} = source;\n\n  if (isFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n\n  if (fill === 'shape') {\n    return true;\n  }\n\n  const boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n\n  if (isFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\n","import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {chart, index, line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  const meta = chart.getDatasetMeta(index);\n  const clip = getDatasetClipArea(chart, meta);\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale, clip} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n\n  ctx.save();\n\n  let fillColor = below;\n  if (below !== above) {\n    if (property === 'x') {\n      clipVertical(ctx, target, area.top);\n      fill(ctx, {line, target, color: above, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipVertical(ctx, target, area.bottom);\n    } else if (property === 'y') {\n      clipHorizontal(ctx, target, area.left);\n      fill(ctx, {line, target, color: below, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipHorizontal(ctx, target, area.right);\n      fillColor = above;\n    }\n  }\n  fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(clipX, firstPoint.y);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(clipX, lastPoint.y);\n    }\n  }\n\n  ctx.lineTo(clipX, target.first().y);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale, clip} = cfg;\n  const segments = _segments(line, target, property);\n\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n\n    clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n    ctx.beginPath();\n\n    const lineLoop = !!line.pathSegment(ctx, src);\n\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n    ctx.restore();\n  }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n  const chartArea = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n\n  if (property === 'x' || property === 'y') {\n    let left, top, right, bottom;\n\n    if (property === 'x') {\n      left = start;\n      top = chartArea.top;\n      right = end;\n      bottom = chartArea.bottom;\n    } else {\n      left = chartArea.left;\n      top = start;\n      right = chartArea.right;\n      bottom = end;\n    }\n\n    ctx.beginPath();\n\n    if (clip) {\n      left = Math.max(left, clip.left);\n      right = Math.min(right, clip.right);\n      top = Math.max(top, clip.top);\n      bottom = Math.min(bottom, clip.bottom);\n    }\n\n    ctx.rect(left, top, right - left, bottom - top);\n    ctx.clip();\n  }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n  id: 'filler',\n\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n\n      meta.$filler = source;\n      sources.push(source);\n    }\n\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n  _isBetween,\n  callback as call,\n  clipArea,\n  getRtlAdapter,\n  overrideTextDirection,\n  restoreTextDirection,\n  toFont,\n  toPadding,\n  unclipArea,\n  valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this._added = false;\n\n    // Contains hit boxes for each dataset (in dataset order)\n    this.legendHitBoxes = [];\n\n    /**\n \t\t * @private\n \t\t */\n    this._hoveredItem = null;\n\n    // Are we in doughnut mode which has a different data type\n    this.doughnutMode = false;\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n\n    this.legendItems = legendItems;\n  }\n\n  fit() {\n    const {options, ctx} = this;\n\n    // The legend may not be displayed for a variety of reasons including\n    // the fact that the defaults got set to `false`.\n    // When the legend is not displayed, there are no guarantees that the options\n    // are correctly formatted so we need to bail out as early as possible.\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    let width, height;\n\n    ctx.font = labelFont.string;\n\n    if (this.isHorizontal()) {\n      width = this.maxWidth; // fill all the width\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight; // fill all the height\n      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n    }\n\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n\n  /**\n\t * @private\n\t */\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n\n    return totalHeight;\n  }\n\n  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n\n    let left = 0;\n    let col = 0;\n\n    this.legendItems.forEach((legendItem, i) => {\n      const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n      // If too tall, go to new column\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n\n      // Store the hitbox width and height here. Final position will be updated in `draw`\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n      // Get max width\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n    return totalWidth;\n  }\n\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n\n      this._draw();\n\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n\n    this.drawTitle();\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    // current position\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n\n      // Set the ctx for the box\n      ctx.save();\n\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n      if (labelOpts.usePointStyle) {\n        // Recalculate x and y for drawPoint() because its expecting\n        // x and y to be center of figure (instead of top left)\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n\n        // Draw pointStyle as legend symbol\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        // Draw box as legend symbol\n        // Adjust position when boxHeight < fontSize (want it centered)\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n        ctx.beginPath();\n\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n\n      ctx.restore();\n    };\n\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n\n    // Horizontal\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n\n    overrideTextDirection(this.ctx, opts.textDirection);\n\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n      ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n\n      rtlHelper.setWidth(this.width);\n\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n\n      const realX = rtlHelper.x(x);\n\n      drawLegendBox(realX, y, legendItem);\n\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n      // Fill the actual label\n      fillText(rtlHelper.x(x), y, legendItem);\n\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else if (typeof legendItem.text !== 'string') {\n        const fontLineHeight = labelFont.lineHeight;\n        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n\n    if (!titleOpts.display) {\n      return;\n    }\n\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n\n    // These defaults are used when the legend is vertical.\n    // When horizontal, they are computed below.\n    let left = this.left;\n    let maxWidth = this.width;\n\n    if (this.isHorizontal()) {\n      // Move left / right so that the title is above the legend lines\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      // Move down so that the title is above the legend stack in every alignment\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n\n    // Now that we know the left edge of the inner legend box, compute the correct\n    // X coordinate from the title alignment\n    const x = _alignStartEnd(position, left, left + maxWidth);\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n\n  /**\n\t * @private\n\t */\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      // See if we are touching one of the dataset boxes\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          // Touching an element\n          return this.legendItems[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n\n    // Chart event already has relative position in it\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        call(opts.onLeave, [e, previous, this], this);\n      }\n\n      this._hoveredItem = hoveredItem;\n\n      if (hoveredItem && !sameItem) {\n        call(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      call(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  let legendItemText = legendItem.text;\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n  }\n  return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  let itemHeight = _itemHeight;\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  const labelHeight = legendItem.text ? legendItem.text.length : 0;\n  return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\n\nexport default {\n  id: 'legend',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Legend,\n\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n\n  // During the beforeUpdate step, the layout configuration needs to run\n  // This ensures that if the legend position changes (via an option update)\n  // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n\n  // The labels need to be built after datasets are updated to ensure that colors\n  // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n\n\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n\n    // a callback that will handle\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n\n    onHover: null,\n    onLeave: null,\n\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      // Generates labels shown in the legend\n      // Valid properties to return:\n      // text : text to display\n      // fillStyle : fill of coloured box\n      // strokeStyle: stroke of coloured box\n      // hidden : if this legend item refers to a hidden item\n      // lineCap : cap style for line\n      // lineDash\n      // lineDashOffset :\n      // lineJoin :\n      // lineWidth :\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n            // Below is extra data used for toggling the datasets\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n","import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n\n    this.left = 0;\n    this.top = 0;\n\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n\n    if (!opts.display) {\n      return;\n    }\n\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\n\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nexport default {\n  id: 'title',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Title,\n\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000         // by default greater than legend (1000) to be above\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n  id: 'subtitle',\n\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500         // by default greater than legend (1000) and smaller than title (2000)\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n  /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    let i, len;\n    let xSet = new Set();\n    let y = 0;\n    let count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        xSet.add(pos.x);\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n    if (count === 0 || xSet.size === 0) {\n      return false;\n    }\n\n    const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n    return {\n      x: xAverage,\n      y: y / count\n    };\n  },\n\n  /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x,\n      y\n    };\n  }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      // base = base.concat(toPush);\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n\n  // Count of all lines in the body\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    // Body lines may include some extra height depending on boxHeight\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  // Title width\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n\n  // Body width\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n  // Body lines may include some extra width due to the color box\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n\n  // Reset back to 0\n  widthPadding = 0;\n\n  // Footer width\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n\n  ctx.restore();\n\n  // Add padding\n  width += padding.width;\n\n  return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n\n  return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  // eslint-disable-next-line prefer-const\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n  // Args are: (tooltipItems, data)\n  beforeTitle: noop,\n  title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      const item = tooltipItems[0];\n      const labels = item.chart.data.labels;\n      const labelCount = labels ? labels.length : 0;\n\n      if (this && this.options && this.options.mode === 'dataset') {\n        return item.dataset.label || '';\n      } else if (item.label) {\n        return item.label;\n      } else if (labelCount > 0 && item.dataIndex < labelCount) {\n        return labels[item.dataIndex];\n      }\n    }\n\n    return '';\n  },\n  afterTitle: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeBody: noop,\n\n  // Args are: (tooltipItem, data)\n  beforeLabel: noop,\n  label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    let label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n    const value = tooltipItem.formattedValue;\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n    return label;\n  },\n  labelColor(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      borderColor: options.borderColor,\n      backgroundColor: options.backgroundColor,\n      borderWidth: options.borderWidth,\n      borderDash: options.borderDash,\n      borderDashOffset: options.borderDashOffset,\n      borderRadius: 0,\n    };\n  },\n  labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation,\n    };\n  },\n  afterLabel: noop,\n\n  // Args are: (tooltipItems, data)\n  afterBody: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  const result = callbacks[name].call(ctx, arg);\n\n  if (typeof result === 'undefined') {\n    return defaultCallbacks[name].call(ctx, arg);\n  }\n\n  return result;\n}\n\nexport class Tooltip extends Element {\n\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n  static positioners = positioners;\n\n  constructor(config) {\n    super();\n\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n    // and `labelTextColors` to create a single variable\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n\n    if (cached) {\n      return cached;\n    }\n\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n\n  getTitle(context, options) {\n    const {callbacks} = options;\n\n    const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n    const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n    const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n    return lines;\n  }\n\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n    );\n  }\n\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n      bodyItems.push(bodyItem);\n    });\n\n    return bodyItems;\n  }\n\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n    );\n  }\n\n  // Get the footer and beforeFooter and afterFooter lines\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n\n    const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n    const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n    const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n    return lines;\n  }\n\n  /**\n\t * @private\n\t */\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n\n    // If the user provided a filter function, use it to modify the tooltip items\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n\n    // If the user provided a sorting function, use it to modify the tooltip items\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n\n    // Determine colors for boxes\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n      labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n      labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n    });\n\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n\n        // Left draws bottom -> top, this y1 is on the bottom\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n\n        // Right draws top -> bottom, thus y1 is on the top\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n\n        // Top draws left -> right, thus x1 is on the left\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n\n        // Bottom draws right -> left, thus x1 is on the right\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.titleAlign, options);\n\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n        }\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColor = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      // Recalculate x and y for drawPoint() because its expecting\n      // x and y to be center of figure (instead of top left)\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n\n      // Fill the point with white so that colours merge nicely if the opacity is < 1\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n\n      // Draw the point\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.fillStyle = labelColor.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      // Border\n      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.setLineDash(labelColor.borderDash || []);\n      ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n      // Fill a white rect so that colours merge nicely if the opacity is < 1\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        // Normal rect\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n\n    // restore fillStyle\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n    // Before body lines\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n\n    // Draw body lines now\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n\n      lines = bodyItem.lines;\n      // Draw Legend-like boxes if needed\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        // Reset for any lines that don't include colorbox\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n\n      each(bodyItem.after, fillLineOfText);\n    }\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n\n    // After body lines\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n\n      footerFont = toFont(options.footerFont);\n\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n\n    ctx.fill();\n\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n\n  /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n\n  /**\n   * Determine if the tooltip will draw anything\n   * @returns {boolean} True if the tooltip will render\n   */\n  _willRender() {\n    return !!this.opacity;\n  }\n\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n\n    if (!opacity) {\n      return;\n    }\n\n    this._updateAnimationTarget(options);\n\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n\n    // IE11/Edge does not like very small opacities, so snap to 0\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n    const padding = toPadding(options.padding);\n\n    // Truthy/falsey value for empty tooltip\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n\n      // Draw Background\n      this.drawBackground(pt, ctx, tooltipSize, options);\n\n      overrideTextDirection(ctx, options.textDirection);\n\n      pt.y += padding.top;\n\n      // Titles\n      this.drawTitle(pt, ctx, options);\n\n      // Body\n      this.drawBody(pt, ctx, options);\n\n      // Footer\n      this.drawFooter(pt, ctx, options);\n\n      restoreTextDirection(ctx, options.textDirection);\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n    // When there are multiple items shown, but the tooltip position is nearest mode\n    // an update may need to be made because our position may have changed even though\n    // the items are the same as before.\n    const positionChanged = this._positionChanged(active, e);\n\n    // Remember Last Actives\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n    // Only handle target event on tooltip change\n    if (changed) {\n      this._active = active;\n\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n\n        this.update(true, replay);\n      }\n    }\n\n    return changed;\n  }\n\n  /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      // But make sure that active elements are still valid.\n      return lastActive.filter(i =>\n        this.chart.data.datasets[i.datasetIndex] &&\n        this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n      );\n    }\n\n    // Find Active Elements for tooltips\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n    if (options.reverse) {\n      active.reverse();\n    }\n\n    return active;\n  }\n\n  /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\n\nexport default {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      // If the event is replayed from `update`, we should evaluate with the final positions.\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        // notify chart about the change, so it will render\n        args.changed = true;\n      }\n    }\n  },\n\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: defaultCallbacks\n  },\n\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n\n  // Resolve additionally from `interaction` options and defaults.\n  additionalOptionScopes: ['interaction']\n};\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n  const labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n  return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n  static id = 'category';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: _getLabelForValue\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n\n    // If we are viewing some subset of labels, slice the original array\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n\n  getLabelForValue(value) {\n    return _getLabelForValue.call(this, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    super.configure();\n\n    if (!this.isHorizontal()) {\n      // For backward compatibility, vertical category scale reverse is inverted.\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n\n  // Used to get data value locations. Value can either be an index or a numerical value\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  // Must override base implementation because it calls getPixelForValue\n  // and category scale can have duplicate values\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n\n  getBasePixel() {\n    return this.bottom;\n  }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n *    if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n *    Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n *    spacing = (max - min) / count\n *    Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n *    spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n  const ticks = [];\n  // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n  // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n  // for details.\n\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n\n  // Beyond MIN_SPACING floating point numbers being to lose precision\n  // such that we can't do the math necessary to generate ticks\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\n    // If the user specified a precision, round to that number of decimal places\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n    // spacing = step;\n    // numSpaces = (max - min) / spacing;\n    // Note that we round here to handle the case where almostWhole translated an FP error\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n    // Sometimes these are no-ops, but it makes the code a lot clearer\n    // and when a user defined range is specified, we want the correct ticks\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    // Case 4\n    numSpaces = (niceMax - niceMin) / spacing;\n\n    // If very close to our rounded value, use it.\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n\n  // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n  // until this point\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n\n      if (niceMin < min) {\n        j++; // Skip niceMin\n      }\n      // If the next nice tick is close to min, skip it\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n\n  for (; j < numSpaces; ++j) {\n    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n    ticks.push({value: tickValue});\n  }\n\n  if (maxDefined && includeBounds && niceMax !== max) {\n    // If the previous tick is too close to max, replace it with max, else add max\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    /** @type {number} */\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n\n    return +raw;\n  }\n\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n\n    if (min === max) {\n      let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n      setMax(max + offset);\n\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    // eslint-disable-next-line prefer-const\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n\n    return maxTicks;\n  }\n\n  /**\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    // Figure out what the max number of ticks we can support it is based on the size of\n    // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n    // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n    // the graph. Make sure we always have at least 2 ticks\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n\n    super.configure();\n\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n  static id = 'linear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.numeric\n    }\n  };\n\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? min : 0;\n    this.max = isFinite(max) ? max : 1;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n\n  // Utils\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  const rangeStep = Math.pow(10, rangeExp);\n  const start = Math.floor(min / rangeStep);\n  const end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  const range = max - min;\n  let rangeExp = log10Floor(range);\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n  return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n  min = finiteOrDefault(generationOptions.min, min);\n  const ticks = [];\n  const minExp = log10Floor(min);\n  let exp = startExp(min, max);\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  const stepSize = Math.pow(10, exp);\n  const base = minExp > exp ? Math.pow(10, minExp) : 0;\n  const start = Math.round((min - base) * precision) / precision;\n  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  let significand = Math.floor((start - offset) / Math.pow(10, exp));\n  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n  while (value < max) {\n    ticks.push({value, major: isMajor(value), significand});\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n  const lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n  return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n  static id = 'logarithmic';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.logarithmic,\n      major: {\n        enabled: true\n      }\n    }\n  };\n\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isFinite(value) && value > 0 ? value : null;\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? Math.max(0, min) : null;\n    this.max = isFinite(max) ? Math.max(0, max) : null;\n\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n\n    // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n    // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n    if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n    }\n\n    this.handleTickRangeOptions();\n  }\n\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (min === max) {\n      if (min <= 0) { // includes null\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(changeExponent(min, -1));\n        setMax(changeExponent(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(changeExponent(max, -1));\n    }\n    if (max <= 0) {\n\n      setMax(changeExponent(min, +1));\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const start = this.min;\n\n    super.configure();\n\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n  // Right, this is really confusing and there is a lot of maths going on here\n  // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n  //\n  // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n  //\n  // Solution:\n  //\n  // We assume the radius of the polygon is half the size of the canvas at first\n  // at each index we check if the text overlaps.\n  //\n  // Where it does, we store that angle and that index.\n  //\n  // After finding the largest index and angle we calculate how much we need to remove\n  // from the shape radius to move the point inwards by that x.\n  //\n  // We average the left and right distances to get the maximum shape radius that can fit in the box\n  // along with labels.\n  //\n  // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n  // on each side, removing that from the size, halving it and adding the left x protrusion width.\n  //\n  // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n  // and position it in the most space efficient manner\n  //\n  // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n  // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n  // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n\n  // Now that text size is determined, compute the full positions\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n  const outerDistance = scale.drawingArea;\n  const {extra, additionalAngle, padding, size} = itemOpts;\n  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  const y = yForAngle(pointLabelPosition.y, size.h, angle);\n  const textAlign = getTextAlignForAngle(angle);\n  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    // if to draw or overlapped\n    visible: true,\n\n    // Text position\n    x: pointLabelPosition.x,\n    y,\n\n    // Text rendering data\n    textAlign,\n\n    // Bounding box\n    left,\n    top: y,\n    right: left + size.w,\n    bottom: y + size.h\n  };\n}\n\nfunction isNotOverlapped(item, area) {\n  if (!area) {\n    return true;\n  }\n  const {left, top, right, bottom} = item;\n  const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n    _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const {centerPointLabels, display} = opts.pointLabels;\n  const itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  let area;\n\n  for (let i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n\n    const item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n      if (item.visible) {\n        area = item;\n      }\n    }\n  }\n  return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\n\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  const {left, top, right, bottom} = item;\n  const {backdropColor} = opts;\n\n  if (!isNullOrUndef(backdropColor)) {\n    const borderRadius = toTRBLCorners(opts.borderRadius);\n    const padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n\n    const backdropLeft = left - padding.left;\n    const backdropTop = top - padding.top;\n    const backdropWidth = right - left + padding.width;\n    const backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(v => v !== 0)) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {\n        x: backdropLeft,\n        y: backdropTop,\n        w: backdropWidth,\n        h: backdropHeight,\n        radius: borderRadius,\n      });\n      ctx.fill();\n    } else {\n      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n    }\n  }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const item = scale._pointLabelItems[i];\n    if (!item.visible) {\n      // overlapping\n      continue;\n    }\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign} = item;\n\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    // Draw circular arcs between the points\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    // Draw straight lines connecting each index\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n\n  const {color, lineWidth} = gridLineOpts;\n\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(borderOpts.dash || []);\n  ctx.lineDashOffset = borderOpts.dashOffset;\n\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n  static id = 'radialLinear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    display: true,\n\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n\n    angleLines: {\n      display: true,\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n\n    grid: {\n      circular: false\n    },\n\n    startAngle: 0,\n\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n\n      callback: Ticks.formatters.numeric\n    },\n\n    pointLabels: {\n      backdropColor: undefined,\n\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPadding: 2,\n\n      // Boolean - if true, show point labels\n      display: true,\n\n      // Number - Point label font size in pixels\n      font: {\n        size: 10\n      },\n\n      // Function - Used to convert point labels\n      callback(label) {\n        return label;\n      },\n\n      // Number - Additionl padding between scale and pointLabel\n      padding: 5,\n\n      // Boolean - if true, center point labels to slices in polar chart\n      centerPointLabels: false\n    }\n  };\n\n  static defaultRoutes = {\n    'angleLines.color': 'borderColor',\n    'pointLabels.color': 'color',\n    'ticks.color': 'color'\n  };\n\n  static descriptors = {\n    angleLines: {\n      _fallback: 'grid'\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.xCenter = undefined;\n    /** @type {number} */\n    this.yCenter = undefined;\n    /** @type {number} */\n    this.drawingArea = undefined;\n    /** @type {string[]} */\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n\n    this.min = isFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n    // Point labels\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n\n  fit() {\n    const opts = this.options;\n\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n\n    // Take into account half font size + the yPadding of the top value\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid, border} = opts;\n    const labelCount = this._pointLabels.length;\n\n    let i, offset, position;\n\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0 || (index === 0 && this.min < 0)) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const context = this.getContext(index);\n          const optsAtIndex = grid.setContext(context);\n          const optsAtIndexBorder = border.setContext(context);\n\n          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n        }\n      });\n    }\n\n    if (angleLines.display) {\n      ctx.save();\n\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n\n        if (!lineWidth || !color) {\n          continue;\n        }\n\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n        offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {}\n\n  /**\n\t * @protected\n\t */\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    if (!tickOpts.display) {\n      return;\n    }\n\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n\n    this.ticks.forEach((tick, index) => {\n      if ((index === 0 && this.min >= 0) && !opts.reverse) {\n        return;\n      }\n\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n        strokeColor: optsAtIndex.textStrokeColor,\n        strokeWidth: optsAtIndex.textStrokeWidth,\n      });\n    });\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n  return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  // Only parse if it's not a timestamp already\n  if (!isFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n\n  return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  /** @type {Object<number,object>} */\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n\n  // We set the major ticks separately from the above loop because calling startOf for every tick\n  // is expensive when there is a large number of ticks\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n  static id = 'time';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n\n    adapters: {},\n    time: {\n      parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n      unit: false, // false == automatic or override with week, month, year, etc.\n      round: false, // none, or override with week, month, year, etc.\n      isoWeekday: false, // override week start day\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n\n      callback: false,\n\n      major: {\n        enabled: false\n      }\n    }\n  };\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {{data: number[], labels: number[], all: number[]}} */\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n\n    /** @type {Unit} */\n    this._unit = 'day';\n    /** @type {Unit=} */\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n\n  init(scaleOpts, opts = {}) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    /** @type {DateAdapter} */\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n    adapter.init(opts);\n\n    // Backward compatibility: before introducing adapter, `displayFormats` was\n    // supposed to contain *all* unit/string pairs but this can't be resolved\n    // when loading the scale (adapters are loaded afterward), so let's populate\n    // missing formats on update\n    mergeIf(time.displayFormats, adapter.formats());\n\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n\n    super.init(scaleOpts);\n\n    this._normalized = opts.normalized;\n  }\n\n  /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n    /**\n\t\t * @param {object} bounds\n\t\t */\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n\n    // If we have user provided `min` and `max` labels / data bounds can be ignored\n    if (!minDefined || !maxDefined) {\n      // Labels are always considered, when user did not force bounds\n      _applyBounds(this._getLabelBounds());\n\n      // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n      // data bounds are ignored (and don't need to be determined)\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n\n    min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n    // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n\n  /**\n\t * @private\n\t */\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n\n  /**\n\t * @return {object[]}\n\t */\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n\n    const min = this.min;\n    const max = this.max;\n\n    const ticks = _filterBetween(timestamps, min, max);\n\n    // PRIVATE\n    // determineUnitForFormatting relies on the number of ticks so we don't use it when\n    // autoSkip is enabled because we don't yet know what the final number of ticks will be\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n\n    if (options.reverse) {\n      ticks.reverse();\n    }\n\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n\n  afterAutoSkip() {\n    // Offsets for bar charts need to be handled with the auto skipped\n    // ticks. Once ticks have been skipped, we re-compute the offsets.\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n\n  /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n  initOffsets(timestamps = []) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n\n  /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    // @ts-ignore\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n\n    // For 'week' unit, handle the first day of week option\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n\n    // @ts-ignore\n    return Object.keys(ticks).sort(sorter).map(x => +x);\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n\n  /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n  format(value, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const fmt = format || formats[unit];\n    return this._adapter.format(value, fmt);\n  }\n\n  /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formatter = options.ticks.callback;\n\n    if (formatter) {\n      return call(formatter, [time, index, ticks], this);\n    }\n\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n\n    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n  }\n\n  /**\n\t * @param {object[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n\n  /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n\n  /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n\n    // pick the longest format (milliseconds) for guesstimation\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    // subtract 1 - if offset then there's one less label than tick\n    // if not offset then one half label padding is added to each end leaving room for one less label\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n\n    return (this._cache.data = this.normalize(timestamps));\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n\n  /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n  normalize(values) {\n    // It seems to be somewhat faster to do sorting first\n    return _arrayUnique(values.sort(sorter));\n  }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n  static id = 'timeseries';\n\n  /**\n   * @type {any}\n   */\n  static defaults = TimeScale.defaults;\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {object[]} */\n    this._table = [];\n    /** @type {number} */\n    this._minPos = undefined;\n    /** @type {number} */\n    this._tableRange = undefined;\n  }\n\n  /**\n\t * @protected\n\t */\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n\n  /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n\n    if (items.length < 2) {\n      // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n\n  /**\n    * Generates all timestamps defined in the data.\n    * Important: this method can return ticks outside the min and max range, it's the\n    * responsibility of the calling code to clamp values if needed.\n    * @protected\n    */\n  _generate() {\n    const min = this.min;\n    const max = this.max;\n    let timestamps = super.getDataTimestamps();\n    if (!timestamps.includes(min) || !timestamps.length) {\n      timestamps.splice(0, 0, min);\n    }\n    if (!timestamps.includes(max) || timestamps.length === 1) {\n      timestamps.push(max);\n    }\n    return timestamps.sort((a, b) => a - b);\n  }\n\n  /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      // If combining labels and data (data might not contain all labels),\n      // we need to recheck uniqueness and sort\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n\n    return timestamps;\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\n\nexport default TimeSeriesScale;\n","export * from './controllers/index.js';\nexport * from './core/index.js';\nexport * from './elements/index.js';\nexport * from './platform/index.js';\nexport * from './plugins/index.js';\nexport * from './scales/index.js';\n\nimport * as controllers from './controllers/index.js';\nimport * as elements from './elements/index.js';\nimport * as plugins from './plugins/index.js';\nimport * as scales from './scales/index.js';\n\nexport {\n  controllers,\n  elements,\n  plugins,\n  scales,\n};\n\nexport const registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n"],"names":["Animator","constructor","_request","_charts","Map","_running","_lastDate","undefined","_notify","chart","anims","date","type","callbacks","listeners","numSteps","duration","forEach","fn","initial","currentStep","Math","min","start","_refresh","requestAnimFrame","call","window","_update","Date","now","remaining","running","items","length","i","draw","item","_active","_total","tick","pop","_getAnims","charts","get","complete","progress","set","listen","event","cb","push","add","has","reduce","acc","cur","max","_duration","stop","cancel","remove","delete","transparent","interpolators","boolean","from","to","factor","color","c0","helpersColor","c1","valid","mix","hexString","number","Animation","cfg","target","prop","currentValue","resolve","_fn","_easing","effects","easing","linear","_start","floor","delay","_loop","loop","_target","_prop","_from","_to","_promises","active","update","elapsed","remain","wait","promises","Promise","res","rej","resolved","method","Animations","config","_chart","_properties","configure","isObject","animationOptions","Object","keys","defaults","animation","animatedProps","getOwnPropertyNames","key","option","isArray","properties","_animateOptions","values","newOptions","options","resolveTargetOptions","animations","_createAnimations","$shared","awaitAll","$animations","then","props","charAt","value","size","assign","animator","anim","all","scaleClip","scale","allowedOverflow","opts","reverse","end","defaultClip","xScale","yScale","x","y","top","right","bottom","left","toClip","t","r","b","l","disabled","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","ilen","index","applyStack","stack","dsIndex","singleMode","mode","datasetIndex","otherValue","found","isFinite","sign","convertObjectDataToArray","data","meta","iScale","vScale","iAxisKey","axis","vAxisKey","adata","Array","isStacked","stacked","getStackKey","indexScale","valueScale","id","getUserBounds","minDefined","maxDefined","Number","NEGATIVE_INFINITY","POSITIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iAxis","vAxis","itemStacks","_top","_bottom","visualValues","_visualValues","getFirstScaleId","scales","filter","shift","createDatasetContext","parent","createContext","dataset","createDataContext","element","dataIndex","raw","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","hidden","_stacked","DatasetController","datasetElementType","dataElementType","_ctx","ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","initialize","linkScales","addElements","fill","isPluginEnabled","console","warn","updateIndex","getDataset","chooseId","xid","xAxisID","valueOrDefault","yid","yAxisID","rid","rAxisID","indexAxis","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","datasets","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","unlistenArrayEvents","_dataCheck","isExtensible","listenArrayEvents","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","scopes","getOptionScopes","createResolver","getContext","parsing","parse","count","sorted","_sorted","prev","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","resolveObjectKey","getParsed","getDataElement","updateRangeFromParsed","range","parsedValue","NaN","getMinMax","otherScale","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","clip","elements","area","chartArea","drawActiveElementsOnTop","getStyle","resolveDatasetElementOptions","resolveDataElementOptions","context","_resolveElementOptions","elementType","cache","cacheKey","sharing","defined","datasetElementScopeKeys","prefixes","names","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","_cacheable","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","arr","updateElements","removed","splice","_sync","args","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","getAllScaleValues","_cache","$bar","visibleMetas","concat","_arrayUnique","sort","a","computeMinSampleSize","_length","curr","updateMinAndPrev","abs","getPixelForValue","ticks","getPixelForTick","computeFitCategoryTraits","ruler","stackCount","thickness","barThickness","ratio","isNullOrUndef","categoryPercentage","barPercentage","chunk","pixels","computeFlexCategoryTraits","next","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","_custom","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","isHorizontal","borderProps","horizontal","base","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","swap","startEnd","orig","v1","v2","v","setInflateAmount","inflateAmount","BarController","grouped","numbers","overrides","_index_","offset","grid","_value_","beginAtZero","obj","bars","getBasePixel","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","height","width","_getStacks","last","currentParsed","iScaleValue","skipNull","find","val","isNaN","indexOf","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","name","_startPixel","_endPixel","baseValue","minBarLength","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","axisCount","axisID","axisNumber","stackIndex","rects","BubbleController","radius","points","point","iPixel","vPixel","skip","getRatioAndOffset","rotation","circumference","cutout","ratioX","ratioY","offsetX","offsetY","TAU","startAngle","endAngle","startX","cos","startY","sin","endX","endY","calcMax","angle","_angleBetween","calcMin","maxX","maxY","HALF_PI","minX","PI","minY","DoughnutController","animateRotate","animateScale","spacing","descriptors","_scriptable","_indexable","startsWith","aspectRatio","plugins","legend","generateLabels","pointStyle","map","style","text","fillStyle","backgroundColor","strokeStyle","borderColor","fontColor","lineWidth","borderWidth","onClick","e","legendItem","toggleDataVisibility","innerRadius","outerRadius","getter","_getRotation","toRadians","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","maxSize","toPercentage","chartWeight","_getRingWeight","maxWidth","maxHeight","maxRadius","toDimension","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerX","centerY","arc","metaData","formatNumber","locale","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","weight","LineController","showLine","spanGaps","line","_dataset","animationsDisabled","_getStartAndCountOfVisiblePoints","_scaleRangesChanged","_datasetIndex","_decimated","segment","animated","maxGapLength","isNumber","directUpdate","pointsCount","prevParsed","nullData","border","firstPoint","lastPoint","updateControlPoints","PolarAreaController","angleLines","display","circular","pointLabels","_parseObjectDataRadialScale","bind","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","interaction","registry","getElement","abstract","Error","DateAdapterBase","override","members","prototype","init","formats","format","diff","startOf","endOf","_date","binarySearch","metaset","intersect","lookupMethod","_reversePixels","_rlookupByKey","_lookupByKey","result","distanceToDefinedLo","slice","lo","findIndex","distanceToDefinedHi","hi","el","getRange","evaluateInteractionItems","position","handler","getSortedVisibleDatasetMetas","j","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","sqrt","pow","getIntersectItems","useFinalPosition","includeInvisible","isPointInArea","evaluationFunc","_isPointInArea","inRange","getNearestRadialItems","getProps","getAngleFromPoint","getNearestCartesianItems","distanceMetric","minDistance","getCenterPoint","pointInArea","distance","getNearestItems","getAxisItems","rangeMethod","intersectsItem","modes","getRelativePosition","nearest","STATIC_POSITIONS","filterByPosition","array","pos","filterDynamicPositionByAxis","box","sortByWeight","v0","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","includes","_stack","placed","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","buildLayoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","w","heightChanged","h","same","other","handleMaxPadding","updatePos","change","getMargins","marginForPositions","positions","margin","fitBoxes","refitBoxes","refit","changed","setBoxDims","placeBoxes","userPadding","padding","addBox","_layers","z","removeBox","layoutItem","minPadding","toPadding","verticalBoxes","horizontalBoxes","each","beforeLayout","visibleVerticalBoxCount","BasePlatform","acquireContext","canvas","releaseContext","addEventListener","listener","removeEventListener","getDevicePixelRatio","getMaximumSize","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","initCanvas","renderHeight","getAttribute","renderWidth","boxSizing","displayWidth","readUsedSize","displayHeight","eventListenerOptions","supportsEventListenerOptions","passive","addListener","node","removeListener","fromNativeEvent","native","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","document","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","devicePixelRatio","resize","currentDevicePixelRatio","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","container","_getParentNode","throttled","clientWidth","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","proxy","DomPlatform","removeAttribute","setAttribute","proxies","$proxies","handlers","attach","detach","isConnected","_detectPlatform","_isDomSupported","OffscreenCanvas","Element","defaultRoutes","tooltipPosition","hasValue","final","ret","autoSkip","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","major","enabled","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","round","tickLength","_tickSize","maxScale","maxChart","_maxLength","evenMajorSpacing","getEvenSpacing","factors","_factorize","ceil","majorStart","majorEnd","len","reverseAlign","align","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","epsilon","lineValue","garbageCollect","caches","gc","gcLen","getTickMarkLength","drawTicks","getTitleHeight","fallback","font","toFont","lines","lineHeight","createScaleContext","createTickContext","titleAlign","_toLeftRightCenter","titleArgs","titleX","titleY","_alignStartEnd","positionAxisID","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","setContext","suggestedMin","suggestedMax","finiteOrDefault","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","margins","grace","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","source","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","callback","afterTickToLabelConversion","numTicks","minRotation","maxRotation","tickWidth","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","_limitValue","title","toDegrees","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","mirror","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","widths","heights","widestLabelSize","highestLabelSize","jlen","tickFont","fontString","nestedLabel","_resolveTickFontOptions","string","_measureText","valueAt","idx","pixel","decimal","_int16Range","_alignPixel","getDecimalForPixel","getBaseValue","optionTicks","rot","autoSkipPadding","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","borderDash","dash","borderDashOffset","dashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","_getXAxisLabelAlignment","_getYAxisLabelAlignment","labelOffset","halfCount","strokeColor","textStrokeColor","strokeWidth","textStrokeWidth","tickTextAlign","showLabelBackdrop","backdrop","labelPadding","backdropPadding","backdropColor","translation","_computeLabelArea","drawBackground","save","fillRect","restore","drawGrid","drawLine","p1","p2","setLineDash","lineDashOffset","beginPath","moveTo","lineTo","stroke","drawOnChartArea","drawBorder","lastLineWidth","drawLabels","clipArea","renderTextOptions","renderText","unclipArea","drawTitle","tz","gz","bz","_maxDigits","fontSize","TypedRegistry","scope","create","isForType","isPrototypeOf","register","proto","getPrototypeOf","parentScope","isIChartComponent","registerDefaults","unregister","itemDefaults","merge","routeDefaults","describe","routes","property","propertyParts","split","sourceName","sourceScope","join","parts","targetName","targetScope","route","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","_capitalize","PluginService","_init","notify","hook","_createDescriptors","_descriptors","descriptor","plugin","callCallback","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","createDescriptors","previousDescriptors","some","localIds","local","getOpts","pluginOpts","pluginScopeKeys","scriptable","indexable","allKeys","getIndexAxis","datasetDefaults","datasetOptions","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","toLowerCase","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","d","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","error","_proxy","defaultId","defaultScaleOptions","mergeIf","defaultID","initOptions","initData","initConfig","keyCache","keysCached","Set","cachedKeys","generate","addIfFound","Config","_config","_scopeCache","_resolverCache","platform","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","resolver","subPrefixes","getResolver","needContext","isFunction","subResolver","_attachContext","descriptorDefaults","resolverCache","_createResolver","p","hasFunction","isScriptable","isIndexable","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","c","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","version","invalidatePlugins","userConfig","initialCanvas","existingChart","uid","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","debounce","resizeDelay","_initialize","maintainAspectRatio","responsive","retinaScale","bindEvents","clearCanvas","_resize","_resizeBeforeDraw","newSize","newRatio","onResize","render","ensureScalesHaveIDs","scalesOptions","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","scaleClass","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","visible","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","autoPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","events","setsEqual","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getDatasetClipArea","getElementsAtEventForMode","Interaction","setDatasetVisibility","_updateVisibility","hide","show","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","prefix","getActiveElements","setActiveElements","activeElements","lastActive","_elementsEqual","pluginId","replay","hoverOptions","hover","deactivated","activated","eventFilter","_handleEvent","_getActiveElements","_isClickEvent","onHover","clipSelf","borderJoinStyle","outerAngleClip","_normalizeAngle","innerAngleClip","clipWidth","closePath","rect","clipArc","pixelMargin","angleMargin","toRadiusCorners","_readValueToProps","parseBorderRadius","angleDelta","o","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","inner","lineJoin","selfJoin","ArcElement","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","_isBetween","halfAngle","halfRadius","translate","fix","radiusOffset","setStyle","lineCap","borderCapStyle","previous","getLineMethod","stepped","_steppedLineTo","tension","cubicInterpolationMode","_bezierCurveTo","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","useFastPath","_getInterpolationMethod","_steppedInterpolation","_bezierInterpolation","_pointInLine","strokePathWithCache","path","_path","Path2D","strokePathDirect","segments","segmentMethod","usePath2D","LineElement","capBezierPoints","_points","_segments","_pointsUpdated","_updateBezierControlPoints","_computeSegments","interpolate","_boundSegments","_interpolate","interpolated","hitRadius","PointElement","hoverRadius","mouseX","mouseY","inXRange","inYRange","drawPoint","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","toTRBL","toTRBLCorners","maxR","enableBorder","topLeft","topRight","bottomLeft","bottomRight","boundingRects","bounds","outer","skipX","skipY","skipBoth","hasRadius","addNormalRectPath","inflateRect","amount","refRect","BarElement","addRectPath","addRoundedRectPath","BORDER_COLORS","BACKGROUND_COLORS","replace","getBorderColor","getBackgroundColor","colorizeDefaultDataset","colorizeDoughnutDataset","colorizePolarAreaDataset","getColorizer","containsColorsDefinitions","k","containsColorsDefinition","containsDefaultColorsDefenitions","forceOverride","_args","chartOptions","containsColorDefenition","colorizer","lttbDecimation","samples","decimated","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minMaxDecimation","minIndex","maxIndex","startIndex","xMin","xMax","dx","lastIndex","intermediateIndex1","intermediateIndex2","cleanDecimatedDataset","defineProperty","configurable","enumerable","writable","cleanDecimatedData","getStartAndCountOfVisiblePointsSimplified","pointCount","algorithm","beforeElementsUpdate","xAxis","threshold","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","_boundSegment","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_shouldApplyFill","_resolveTarget","sources","propagate","visited","_decodeFill","parseFillOption","parseFloat","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","unshift","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","fillColor","clipVertical","clipHorizontal","clipY","lineLoop","clipX","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","itemsEqual","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","itemWidth","measureText","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","adjustHitBoxes","rtl","rtlHelper","getRtlAdapter","hitbox","leftForLtr","_draw","defaultColor","halfFontSize","cursor","drawLegendBox","lineDash","drawOptions","SQRT2","xPlus","drawPointLegend","yBoxTop","xBoxLeft","fillText","strikethrough","overrideTextDirection","textDirection","textWidth","setWidth","realX","_textX","fontLineHeight","calculateLegendItemHeight","restoreTextDirection","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","isListened","hoveredItem","sameItem","onLeave","calculateItemWidth","calculateItemHeight","legendItemText","_element","afterEvent","ci","useBorderRadius","Title","_padding","textSize","_drawArgs","fontOpts","createTitle","titleBlock","WeakMap","positioners","average","xSet","xAverage","eventPosition","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","apply","splitNewlines","str","String","createTooltipItem","formattedValue","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodyLineHeight","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","caretSize","caretPadding","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","cornerRadius","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","beforeTitle","noop","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","pt","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","afterInit","afterDraw","_fallback","addIfString","addedLabels","findOrAddLabel","lastIndexOf","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks","generationOptions","dataRange","MIN_SPACING","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceNum","niceMin","niceMax","numSpaces","almostWhole","almostEquals","decimalPlaces","_decimalPlaces","relativeLabelSize","tickValue","rad","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","numericGeneratorOptions","_setMinAndMaxByKey","LinearScale","Ticks","formatters","numeric","log10Floor","log10","changeExponent","m","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","minExp","exp","significand","lastTick","LogarithmicScale","logarithmic","_zero","getTickBackdropHeight","measureLabelSize","_longestText","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","hLimits","vLimits","updateLimits","setCenterPoint","_pointLabelItems","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","apexesInArea","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","animate","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","distanceFromCenter","getBasePosition","getPointLabelPosition","rotate","INTERVALS","millisecond","common","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","input","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","_lookup","timestamp","setMajorTicks","majorUnit","ticksFromTimestamps","TimeScale","adapters","displayFormats","_unit","_majorUnit","_offsets","_normalized","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","minor","weekday","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","formatter","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","normalize","table","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables"],"mappings":"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"}
Index: node_modules/chart.js/dist/chart.umd.js
===================================================================
--- node_modules/chart.js/dist/chart.umd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chart.umd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/*!
+ * Chart.js v4.5.0
+ * https://www.chartjs.org
+ * (c) 2025 Chart.js Contributors
+ * Released under the MIT License
+ */
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Object.freeze({__proto__:null,get Colors(){return Jo},get Decimation(){return ta},get Filler(){return ba},get Legend(){return Ma},get SubTitle(){return Pa},get Title(){return ka},get Tooltip(){return Na}});function e(){}const i=(()=>{let t=0;return()=>t++})();function s(t){return null==t}function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function o(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function r(t,e){return a(t)?t:e}function l(t,e){return void 0===t?e:t}const h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,c=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;a<r;a++)e.call(i,t[a],a);else if(o(t))for(l=Object.keys(t),r=l.length,a=0;a<r;a++)e.call(i,t[l[a]],l[a])}function f(t,e){let i,s,n,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,s=t.length;i<s;++i)if(n=t[i],o=e[i],n.datasetIndex!==o.datasetIndex||n.index!==o.index)return!1;return!0}function g(t){if(n(t))return t.map(g);if(o(t)){const e=Object.create(null),i=Object.keys(t),s=i.length;let n=0;for(;n<s;++n)e[i[n]]=g(t[i[n]]);return e}return t}function p(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}function m(t,e,i,s){if(!p(t))return;const n=e[t],a=i[t];o(n)&&o(a)?x(n,a,s):e[t]=g(a)}function x(t,e,i){const s=n(e)?e:[e],a=s.length;if(!o(t))return t;const r=(i=i||{}).merger||m;let l;for(let e=0;e<a;++e){if(l=s[e],!o(l))continue;const n=Object.keys(l);for(let e=0,s=n.length;e<s;++e)r(n[e],t,l,i)}return t}function b(t,e){return x(t,e,{merger:_})}function _(t,e,i){if(!p(t))return;const s=e[t],n=i[t];o(s)&&o(n)?b(s,n):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=g(n))}const y={"":t=>t,x:t=>t.x,y:t=>t.y};function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const C=Math.PI,O=2*C,A=O+C,T=Number.POSITIVE_INFINITY,L=C/180,E=C/2,R=C/4,I=2*C/3,z=Math.log10,F=Math.sign;function V(t,e,i){return Math.abs(t-e)<i}function B(t){const e=Math.round(t);t=V(t,e,t/1e3)?e:t;const i=Math.pow(10,Math.floor(z(t))),s=t/i;return(s<=1?1:s<=2?2:s<=5?5:10)*i}function W(t){const e=[],i=Math.sqrt(t);let s;for(s=1;s<i;s++)t%s==0&&(e.push(s),e.push(t/s));return i===(0|i)&&e.push(i),e.sort(((t,e)=>t-e)).pop(),e}function N(t){return!function(t){return"symbol"==typeof t||"object"==typeof t&&null!==t&&!(Symbol.toPrimitive in t||"toString"in t||"valueOf"in t)}(t)&&!isNaN(parseFloat(t))&&isFinite(t)}function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;s<n;s++)o=t[s][i],isNaN(o)||(e.min=Math.min(e.min,o),e.max=Math.max(e.max,o))}function $(t){return t*(C/180)}function Y(t){return t*(180/C)}function U(t){if(!a(t))return;let e=1,i=0;for(;Math.round(t*e)/e!==t;)e*=10,i++;return i}function X(t,e){const i=e.x-t.x,s=e.y-t.y,n=Math.sqrt(i*i+s*s);let o=Math.atan2(s,i);return o<-.5*C&&(o+=O),{angle:o,distance:n}}function q(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function K(t,e){return(t-e+A)%O-C}function G(t){return(t%O+O)%O}function J(t,e,i,s){const n=G(t),o=G(e),a=G(i),r=G(o-n),l=G(a-n),h=G(n-o),c=G(n-a);return n===o||n===a||s&&o===a||r>l&&h<c}function Z(t,e,i){return Math.max(e,Math.min(i,t))}function Q(t){return Z(t,-32768,32767)}function tt(t,e,i,s=1e-6){return t>=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function et(t,e,i){i=i||(i=>t[i]<e);let s,n=t.length-1,o=0;for(;n-o>1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const it=(t,e,i,s)=>et(t,i,s?s=>{const n=t[s][e];return n<i||n===i&&t[s+1][e]===i}:s=>t[s][e]<i),st=(t,e,i)=>et(t,i,(s=>t[s][e]>=i));function nt(t,e,i){let s=0,n=t.length;for(;s<n&&t[s]<e;)s++;for(;n>s&&t[n-1]>i;)n--;return s>0||n<t.length?t.slice(s,n):t}const ot=["push","pop","shift","splice","unshift"];function at(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),ot.forEach((e=>{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const ht="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function ct(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,ht.call(window,(()=>{s=!1,t.apply(e,i)})))}}function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const ut=t=>"start"===t?"left":"end"===t?"right":"center",ft=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,gt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function pt(t,e,i){const n=e.length;let o=0,a=n;if(t._sorted){const{iScale:r,vScale:l,_parsed:h}=t,c=t.dataset&&t.dataset.options?t.dataset.options.spanGaps:null,d=r.axis,{min:u,max:f,minDefined:g,maxDefined:p}=r.getUserBounds();if(g){if(o=Math.min(it(h,d,u).lo,i?n:it(e,d,r.getPixelForValue(u)).lo),c){const t=h.slice(0,o+1).reverse().findIndex((t=>!s(t[l.axis])));o-=Math.max(0,t)}o=Z(o,0,n-1)}if(p){let t=Math.max(it(h,r.axis,f,!0).hi+1,i?0:it(e,d,r.getPixelForValue(f),!0).hi+1);if(c){const e=h.slice(t-1).findIndex((t=>!s(t[l.axis])));t+=Math.max(0,e)}a=Z(t,o,n)-o}else a=n-o}return{start:o,count:a}}function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}class xt{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=ht.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var bt=new xt;
+/*!
+ * @kurkle/color v0.3.2
+ * https://github.com/kurkle/color#readme
+ * (c) 2023 Jukka Kurkela
+ * Released under the MIT License
+ */function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e<i?6:0):e===n?(i-t)/s+2:(t-e)/s+4}(e,i,s,h,n),r=60*r+.5),[0|r,l||0,a]}function zt(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s)).map(Mt)}function Ft(t,e,i){return zt(Lt,t,e,i)}function Vt(t){return(t%360+360)%360}function Bt(t){const e=Tt.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?vt(+e[5]):Mt(+e[5]));const n=Vt(+e[2]),o=+e[3]/100,a=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return zt(Rt,t,e,i)}(n,o,a):"hsv"===e[1]?function(t,e,i){return zt(Et,t,e,i)}(n,o,a):Ft(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}const Wt={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},Nt={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let Ht;function jt(t){Ht||(Ht=function(){const t={},e=Object.keys(Nt),i=Object.keys(Wt);let s,n,o,a,r;for(s=0;s<e.length;s++){for(a=r=e[s],n=0;n<i.length;n++)o=i[n],r=r.replace(o,Wt[o]);o=parseInt(Nt[a],16),t[r]=[o>>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=Ft(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function qt(t,e){return t?Object.assign(e||{},t):t}function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Mt(t[3]))):(e=qt(t,{r:0,g:0,b:0,a:1})).a=Mt(e.a),e}function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?vt(t):yt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?vt(i):yt(i,0,255)),s=255&(e[4]?vt(s):yt(s,0,255)),n=255&(e[6]?vt(n):yt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Bt(t)}class Jt{constructor(t){if(t instanceof Jt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Kt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*St[s[1]],g:255&17*St[s[2]],b:255&17*St[s[3]],a:5===o?17*St[s[4]]:255}:7!==o&&9!==o||(n={r:St[s[1]]<<4|St[s[2]],g:St[s[3]]<<4|St[s[4]],b:St[s[5]]<<4|St[s[6]],a:9===o?St[s[7]]<<4|St[s[8]]:255})),i=n||jt(t)||Gt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}set rgb(t){this._rgb=Kt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${wt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?At(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=It(t),i=e[0],s=kt(e[1]),n=kt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${wt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t.r)),n=Ut(wt(t.g)),o=Ut(wt(t.b));return{r:Mt(Yt(s+i*(Ut(wt(e.r))-s))),g:Mt(Yt(n+i*(Ut(wt(e.g))-n))),b:Mt(Yt(o+i*(Ut(wt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Jt(this.rgb)}alpha(t){return this._rgb.a=Mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Xt(this._rgb,2,t),this}darken(t){return Xt(this._rgb,2,-t),this}saturate(t){return Xt(this._rgb,1,t),this}desaturate(t){return Xt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Zt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Qt(t){return Zt(t)?t:new Jt(t)}function te(t){return Zt(t)?t:new Jt(t).saturate(.5).darken(.1).hexString()}const ee=["x","y","borderWidth","radius","tension"],ie=["color","borderColor","backgroundColor"];const se=new Map;function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=se.get(i);return s||(s=new Intl.NumberFormat(t,e),se.set(i,s)),s}(e,i).format(t)}const oe={values:t=>n(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=z(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ne(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(z(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?oe.numeric.call(this,t,e,i):""}};var ae={formatters:oe};const re=Object.create(null),le=Object.create(null);function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;e<s;++e){const s=i[e];t=t[s]||(t[s]=Object.create(null))}return t}function ce(t,e,i){return"string"==typeof e?x(he(t,e),i):x(he(t,""),e)}class de{constructor(t,e){this.animation=void 0,this.backgroundColor="rgba(0,0,0,0.1)",this.borderColor="rgba(0,0,0,0.1)",this.color="#666",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>te(e.backgroundColor),this.hoverBorderColor=(t,e)=>te(e.borderColor),this.hoverColor=(t,e)=>te(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ce(this,t,e)}get(t){return he(this,t)}describe(t,e){return ce(le,t,e)}override(t,e){return ce(re,t,e)}route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.defineProperties(n,{[r]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[r],e=a[s];return o(t)?Object.assign({},e,t):l(t,e)},set(t){this[r]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ue=new de({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:ie},numbers:{type:"number",properties:ee}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ae.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function fe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const me=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function xe(t,e){return me(t).getPropertyValue(e)}const be=["top","right","bottom","left"];function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=be[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const ye=(t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot);function ve(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=me(i),o="border-box"===n.boxSizing,a=_e(n,"padding"),r=_e(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(ye(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const Me=t=>Math.round(10*t)/10;function we(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"clientWidth")||T,r=pe(n.maxHeight,t,"clientHeight")||T,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=t&&ge(t);if(o){const t=o.getBoundingClientRect(),a=me(o),r=_e(a,"border","width"),l=_e(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=pe(a.maxWidth,o,"clientWidth"),n=pe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||T,maxHeight:n||T}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=_e(n,"border","width"),e=_e(n,"padding");h-=e.width+t.width,c-=e.height+t.height}h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=Me(Math.min(h,a,l.maxWidth)),c=Me(Math.min(c,r,l.maxHeight)),h&&!c&&(c=Me(h/2));return(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=Me(Math.floor(c*s))),{width:h,height:c}}function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Se=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};fe()&&(window.addEventListener("test",null,e),window.removeEventListener("test",null,e))}catch(t){}return t}();function Pe(t,e){const i=xe(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function De(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Ce(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Oe(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(o=s.data={},a=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;h<l;h++)if(u=i[h],null==u||n(u)){if(n(u))for(c=0,d=u.length;c<d;c++)f=u[c],null==f||n(f)||(r=Ce(t,o,a,r,f))}else r=Ce(t,o,a,r,u);t.restore();const g=a.length/2;if(g>i.length){for(h=0;h<g;h++)delete o[a[h]];a.splice(0,g)}return r}function Ae(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i/2,.5):0;return Math.round((e-n)*s)/s+n}function Te(t,e){(e||t)&&((e=e||t.getContext("2d")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore())}function Le(t,e,i,s){Ee(t,e,i,s,null)}function Ee(t,e,i,s,n){let o,a,r,l,h,c,d,u;const f=e.pointStyle,g=e.rotation,p=e.radius;let m=(g||0)*L;if(f&&"object"==typeof f&&(o=f.toString(),"[object HTMLImageElement]"===o||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,s),t.rotate(m),t.drawImage(f,-f.width/2,-f.height/2,f.width,f.height),void t.restore();if(!(isNaN(p)||p<=0)){switch(t.beginPath(),f){default:n?t.ellipse(i,s,n/2,p,0,0,O):t.arc(i,s,p,0,O),t.closePath();break;case"triangle":c=n?n/2:p,t.moveTo(i+Math.sin(m)*c,s-Math.cos(m)*p),m+=I,t.lineTo(i+Math.sin(m)*c,s-Math.cos(m)*p),m+=I,t.lineTo(i+Math.sin(m)*c,s-Math.cos(m)*p),t.closePath();break;case"rectRounded":h=.516*p,l=p-h,a=Math.cos(m+R)*l,d=Math.cos(m+R)*(n?n/2-h:l),r=Math.sin(m+R)*l,u=Math.sin(m+R)*(n?n/2-h:l),t.arc(i-d,s-r,h,m-C,m-E),t.arc(i+u,s-a,h,m-E,m),t.arc(i+d,s+r,h,m,m+E),t.arc(i-u,s+a,h,m+E,m+C),t.closePath();break;case"rect":if(!g){l=Math.SQRT1_2*p,c=n?n/2:l,t.rect(i-c,s-l,2*c,2*l);break}m+=R;case"rectRot":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+u,s-a),t.lineTo(i+d,s+r),t.lineTo(i-u,s+a),t.closePath();break;case"crossRot":m+=R;case"cross":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a);break;case"star":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a),m+=R,d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a);break;case"line":a=n?n/2:Math.cos(m)*p,r=Math.sin(m)*p,t.moveTo(i-a,s-r),t.lineTo(i+a,s+r);break;case"dash":t.moveTo(i,s),t.lineTo(i+Math.cos(m)*(n?n/2:p),s+Math.sin(m)*p);break;case!1:t.closePath()}t.fill(),e.borderWidth>0&&t.stroke()}}function Re(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.x<e.right+i&&t.y>e.top-i&&t.y<e.bottom+i}function Ie(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function ze(t){t.restore()}function Fe(t,e,i,s,n){if(!e)return t.lineTo(i.x,i.y);if("middle"===n){const s=(e.x+i.x)/2;t.lineTo(s,e.y),t.lineTo(s,i.y)}else"after"===n!=!!s?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}function Ve(t,e,i,s){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(s?e.cp1x:e.cp2x,s?e.cp1y:e.cp2y,s?i.cp2x:i.cp1x,s?i.cp2y:i.cp1y,i.x,i.y)}function Be(t,e,i,s,n){if(n.strikethrough||n.underline){const o=t.measureText(s),a=e-o.actualBoundingBoxLeft,r=e+o.actualBoundingBoxRight,l=i-o.actualBoundingBoxAscent,h=i+o.actualBoundingBoxDescent,c=n.strikethrough?(l+h)/2:h;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=n.decorationWidth||2,t.moveTo(a,c),t.lineTo(r,c),t.stroke()}}function We(t,e){const i=t.fillStyle;t.fillStyle=e.color,t.fillRect(e.left,e.top,e.width,e.height),t.fillStyle=i}function Ne(t,e,i,o,a,r={}){const l=n(e)?e:[e],h=r.strokeWidth>0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),s(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;c<l.length;++c)d=l[c],r.backdrop&&We(t,r.backdrop),h&&(r.strokeColor&&(t.strokeStyle=r.strokeColor),s(r.strokeWidth)||(t.lineWidth=r.strokeWidth),t.strokeText(d,i,o,r.maxWidth)),t.fillText(d,i,o,r.maxWidth),Be(t,i,o,d,r),o+=Number(a.lineHeight);t.restore()}function He(t,e){const{x:i,y:s,w:n,h:o,radius:a}=e;t.arc(i+a.topLeft,s+a.topLeft,a.topLeft,1.5*C,C,!0),t.lineTo(i,s+o-a.bottomLeft),t.arc(i+a.bottomLeft,s+o-a.bottomLeft,a.bottomLeft,C,E,!0),t.lineTo(i+n-a.bottomRight,s+o),t.arc(i+n-a.bottomRight,s+o-a.bottomRight,a.bottomRight,E,0,!0),t.lineTo(i+n,s+a.topRight),t.arc(i+n-a.topRight,s+a.topRight,a.topRight,0,-E,!0),t.lineTo(i+a.topLeft,s)}function je(t,e=[""],i,s,n=(()=>t[0])){const o=i||t;void 0===s&&(s=ti("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>je([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>qe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=ti(Ue(o,t),i),void 0!==n)return Xe(t,n)?Ze(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ei(t).includes(e),ownKeys:t=>ei(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function $e(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ye(t,s),setContext:e=>$e(t,e,i,s),override:n=>$e(t.override(n),e,i,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>qe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:a,_subProxy:r,_descriptors:l}=t;let h=s[e];S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let l=e(o,a||s);r.delete(t),Xe(t,l)&&(l=Ze(n._scopes,n,t,l));return l}(e,h,t,i));n(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:a,_subProxy:r,_descriptors:l}=i;if(void 0!==a.index&&s(t))return e[a.index%e.length];if(o(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const o of i){const i=Ze(s,n,t,o);e.push($e(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Xe(e,h)&&(h=$e(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ye(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Ue=(t,e)=>t?t+w(e):e,Xe=(t,e)=>o(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function qe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e)||"constructor"===e)return t[e];const s=i();return t[e]=s,s}function Ke(t,e,i){return S(t)?t(e,i):t}const Ge=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Je(t,e,i,s,n){for(const o of e){const e=Ge(i,o);if(e){t.add(e);const o=Ke(e._fallback,i,n);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}return!1}function Ze(t,e,i,s){const a=e._rootScopes,r=Ke(e._fallback,i,s),l=[...t,...a],h=new Set;h.add(s);let c=Qe(h,l,i,r||i,s);return null!==c&&((void 0===r||r===i||(c=Qe(h,l,r,c,s),null!==c))&&je(Array.from(h),[""],a,r,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const a=s[e];if(n(a)&&o(i))return i;return a||{}}(e,i,s))))}function Qe(t,e,i,s,n){for(;i;)i=Je(t,e,i,s,n);return i}function ti(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0!==e)return e}}function ei(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ii(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;r<l;++r)h=r+i,c=e[h],a[r]={r:n.parse(M(c,o),h)};return a}const si=Number.EPSILON||1e-14,ni=(t,e)=>e<t.length&&!t[e].skip&&t[e],oi=t=>"x"===t?"y":"x";function ai(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function ri(t,e="x"){const i=oi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=ni(t,0);for(a=0;a<s;++a)if(r=l,l=h,h=ni(t,a+1),l){if(h){const t=h[e]-l[e];n[a]=0!==t?(h[i]-l[i])/t:0}o[a]=r?h?F(n[a-1])!==F(n[a])?0:(n[a-1]+n[a])/2:n[a-1]:n[a]}!function(t,e,i){const s=t.length;let n,o,a,r,l,h=ni(t,0);for(let c=0;c<s-1;++c)l=h,h=ni(t,c+1),l&&h&&(V(e[c],0,si)?i[c]=i[c+1]=0:(n=i[c]/e[c],o=i[c+1]/e[c],r=Math.pow(n,2)+Math.pow(o,2),r<=9||(a=3/Math.sqrt(r),i[c]=n*a*e[c],i[c+1]=o*a*e[c])))}(t,n,o),function(t,e,i="x"){const s=oi(i),n=t.length;let o,a,r,l=ni(t,0);for(let h=0;h<n;++h){if(a=r,r=l,l=ni(t,h+1),!r)continue;const n=r[i],c=r[s];a&&(o=(n-a[i])/3,r[`cp1${i}`]=n-o,r[`cp1${s}`]=c-o*e[h]),l&&(o=(l[i]-n)/3,r[`cp2${i}`]=n+o,r[`cp2${s}`]=c+o*e[h])}}(t,o,e)}function li(t,e,i){return Math.max(Math.min(t,i),e)}function hi(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),"monotone"===e.cubicInterpolationMode)ri(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o<a;++o)r=t[o],l=ai(i,r,t[Math.min(o+1,a-(s?0:1))%a],e.tension),r.cp1x=l.previous.x,r.cp1y=l.previous.y,r.cp2x=l.next.x,r.cp2y=l.next.y,i=r}e.capBezierPoints&&function(t,e){let i,s,n,o,a,r=Re(t[0],e);for(i=0,s=t.length;i<s;++i)a=o,o=r,r=i<s-1&&Re(t[i+1],e),o&&(n=t[i],a&&(n.cp1x=li(n.cp1x,e.left,e.right),n.cp1y=li(n.cp1y,e.top,e.bottom)),r&&(n.cp2x=li(n.cp2x,e.left,e.right),n.cp2y=li(n.cp2y,e.top,e.bottom)))}(t,i)}const ci=t=>0===t||1===t,di=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),ui=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,fi={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*E),easeOutSine:t=>Math.sin(t*E),easeInOutSine:t=>-.5*(Math.cos(C*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>ci(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>ci(t)?t:di(t,.075,.3),easeOutElastic:t=>ci(t)?t:ui(t,.075,.3),easeInOutElastic(t){const e=.1125;return ci(t)?t:t<.5?.5*di(2*t,e,.45):.5+.5*ui(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-fi.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*fi.easeInBounce(2*t):.5*fi.easeOutBounce(2*t-1)+.5};function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function pi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function mi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=gi(t,n,i),r=gi(n,o,i),l=gi(o,e,i),h=gi(a,r,i),c=gi(r,l,i);return gi(h,c,i)}const xi=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,bi=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function _i(t,e){const i=(""+t).match(xi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}const yi=t=>+t||0;function vi(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=yi(a(t));return i}function Mi(t){return vi(t,{top:"y",right:"x",bottom:"y",left:"x"})}function wi(t){return vi(t,["topLeft","topRight","bottomLeft","bottomRight"])}function ki(t){const e=Mi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Si(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=l(t.style,e.style);s&&!(""+s).match(bi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:l(t.family,e.family),lineHeight:_i(l(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:l(t.weight,e.weight),string:""};return n.string=De(n),n}function Pi(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;o<a;++o)if(r=t[o],void 0!==r&&(void 0!==e&&"function"==typeof r&&(r=r(e),l=!1),void 0!==i&&n(r)&&(r=r[i%r.length],l=!1),void 0!==r))return s&&!l&&(s.cacheable=!1),r}function Di(t,e,i){const{min:s,max:n}=t,o=c(e,(n-s)/2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Ci(t,e){return Object.assign(Object.create(t),e)}function Oi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ai(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Ti(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Li(t){return"angle"===t?{between:J,compare:K,normalize:G}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ei({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Ri(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Li(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Li(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;h<c&&a(r(e[d%l][s]),n,o);++h)d--,u--;d%=l,u%=l}return u<d&&(u+=l),{start:d,end:u,loop:f,style:t.style}}(t,e,i),g=[];let p,m,x,b=!1,_=null;const y=()=>b||l(n,x,p)&&0!==r(n,x),v=()=>!b||0===r(o,p)||l(o,x,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==x&&(b=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Ei({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,x=p));return null!==_&&g.push(Ei({start:_,end:d,loop:u,count:a,style:f})),g}function Ii(t,e){const i=[],s=t.segments;for(let n=0;n<s.length;n++){const o=Ri(s[n],t.points,e);o.length&&i.push(...o)}return i}function zi(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;n<e&&!t[n].skip;)n++;for(;n<e&&t[n].skip;)n++;for(n%=e,i&&(o+=n);o>n&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Fi(t,[{start:a,end:r,loop:o}],i,e);return Fi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r<a?r+n:r,!!t._fullLoop&&0===a&&r===n-1),i,e)}function Fi(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n=t._chart.getContext(),o=Vi(t.options),{_datasetIndex:a,options:{spanGaps:r}}=t,l=i.length,h=[];let c=o,d=e[0].start,u=d;function f(t,e,s,n){const o=r?-1:1;if(t!==e){for(t+=l;i[t%l].skip;)t-=o;for(;i[e%l].skip;)e+=o;t%l!=e%l&&(h.push({start:t%l,end:e%l,loop:s,style:n}),c=n,d=e%l)}}for(const t of e){d=r?d:t.start;let e,o=i[d%l];for(u=d+1;u<=t.end;u++){const r=i[u%l];e=Vi(s.setContext(Ci(n,{type:"segment",p0:o,p1:r,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),Bi(e,c)&&f(d,u-1,t.loop,c),o=r,c=e}d<u-1&&f(d,u-1,t.loop,c)}return h}(t,e,i,s):e}function Vi(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function Bi(t,e){if(!e)return!1;const i=[],s=function(t,e){return Zt(e)?(i.includes(e)||i.push(e),i.indexOf(e)):e};return JSON.stringify(t,s)!==JSON.stringify(e,s)}function Wi(t,e,i){return t.options.clip?t[i]:e[i]}function Ni(t,e){const i=e._clip;if(i.disabled)return!1;const s=function(t,e){const{xScale:i,yScale:s}=t;return i&&s?{left:Wi(i,e,"left"),right:Wi(i,e,"right"),top:Wi(s,e,"top"),bottom:Wi(s,e,"bottom")}:e}(e,t.chartArea);return{left:!1===i.left?0:s.left-(!0===i.left?0:i.left),right:!1===i.right?t.width:s.right+(!0===i.right?0:i.right),top:!1===i.top?0:s.top-(!0===i.top?0:i.top),bottom:!1===i.bottom?t.height:s.bottom+(!0===i.bottom?0:i.bottom)}}var Hi=Object.freeze({__proto__:null,HALF_PI:E,INFINITY:T,PI:C,PITAU:A,QUARTER_PI:R,RAD_PER_DEG:L,TAU:O,TWO_THIRDS_PI:I,_addGrace:Di,_alignPixel:Ae,_alignStartEnd:ft,_angleBetween:J,_angleDiff:K,_arrayUnique:lt,_attachContext:$e,_bezierCurveTo:Ve,_bezierInterpolation:mi,_boundSegment:Ri,_boundSegments:Ii,_capitalize:w,_computeSegments:zi,_createResolver:je,_decimalPlaces:U,_deprecated:function(t,e,i,s){void 0!==e&&console.warn(t+': "'+i+'" is deprecated. Please use "'+s+'" instead')},_descriptors:Ye,_elementsEqual:f,_factorize:W,_filterBetween:nt,_getParentNode:ge,_getStartAndCountOfVisiblePoints:pt,_int16Range:Q,_isBetween:tt,_isClickEvent:D,_isDomSupported:fe,_isPointInArea:Re,_limitValue:Z,_longestText:Oe,_lookup:et,_lookupByKey:it,_measureText:Ce,_merger:m,_mergerIf:_,_normalizeAngle:G,_parseObjectDataRadialScale:ii,_pointInLine:gi,_readValueToProps:vi,_rlookupByKey:st,_scaleRangesChanged:mt,_setMinAndMaxByKey:j,_splitKey:v,_steppedInterpolation:pi,_steppedLineTo:Fe,_textX:gt,_toLeftRightCenter:ut,_updateBezierControlPoints:hi,addRoundedRectPath:He,almostEquals:V,almostWhole:H,callback:d,clearCanvas:Te,clipArea:Ie,clone:g,color:Qt,createContext:Ci,debounce:dt,defined:k,distanceBetweenPoints:q,drawPoint:Le,drawPointLegend:Ee,each:u,easingEffects:fi,finiteOrDefault:r,fontString:function(t,e,i){return e+" "+t+"px "+i},formatNumber:ne,getAngleFromPoint:X,getDatasetClipArea:Ni,getHoverColor:te,getMaximumSize:we,getRelativePosition:ve,getRtlAdapter:Oi,getStyle:xe,isArray:n,isFinite:a,isFunction:S,isNullOrUndef:s,isNumber:N,isObject:o,isPatternOrGradient:Zt,listenArrayEvents:at,log10:z,merge:x,mergeIf:b,niceNum:B,noop:e,overrideTextDirection:Ai,readUsedSize:Pe,renderText:Ne,requestAnimFrame:ht,resolve:Pi,resolveObjectKey:M,restoreTextDirection:Ti,retinaScale:ke,setsEqual:P,sign:F,splineCurve:ai,splineCurveMonotone:ri,supportsEventListenerOptions:Se,throttled:ct,toDegrees:Y,toDimension:c,toFont:Si,toFontString:De,toLineHeight:_i,toPadding:ki,toPercentage:h,toRadians:$,toTRBL:Mi,toTRBLCorners:wi,uid:i,unclipArea:ze,unlistenArrayEvents:rt,valueOrDefault:l});function ji(t,e,i,n){const{controller:o,data:a,_sorted:r}=t,l=o._cachedMeta.iScale,h=t.dataset&&t.dataset.options?t.dataset.options.spanGaps:null;if(l&&e===l.axis&&"r"!==e&&r&&a.length){const r=l._reversePixels?st:it;if(!n){const n=r(a,e,i);if(h){const{vScale:e}=o._cachedMeta,{_parsed:i}=t,a=i.slice(0,n.lo+1).reverse().findIndex((t=>!s(t[e.axis])));n.lo-=Math.max(0,a);const r=i.slice(n.hi).findIndex((t=>!s(t[e.axis])));n.hi+=Math.max(0,r)}return n}if(o._sharedOptions){const t=a[0],s="function"==typeof t.getRange&&t.getRange(e);if(s){const t=r(a,e,i-s),n=r(a,e,i+s);return{lo:t.lo,hi:n.hi}}}}return{lo:0,hi:a.length-1}}function $i(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t<i;++t){const{index:i,data:r}=o[t],{lo:l,hi:h}=ji(o[t],e,a,n);for(let t=l;t<=h;++t){const e=r[t];e.skip||s(e,i,t)}}}function Yi(t,e,i,s,n){const o=[];if(!n&&!t.isPointInArea(e))return o;return $i(t,i,e,(function(i,a,r){(n||Re(i,t.chartArea,0))&&i.inRange(e.x,e.y,s)&&o.push({element:i,datasetIndex:a,index:r})}),!0),o}function Ui(t,e,i,s,n,o){let a=[];const r=function(t){const e=-1!==t.indexOf("x"),i=-1!==t.indexOf("y");return function(t,s){const n=e?Math.abs(t.x-s.x):0,o=i?Math.abs(t.y-s.y):0;return Math.sqrt(Math.pow(n,2)+Math.pow(o,2))}}(i);let l=Number.POSITIVE_INFINITY;return $i(t,i,e,(function(i,h,c){const d=i.inRange(e.x,e.y,n);if(s&&!d)return;const u=i.getCenterPoint(n);if(!(!!o||t.isPointInArea(u))&&!d)return;const f=r(e,u);f<l?(a=[{element:i,datasetIndex:h,index:c}],l=f):f===l&&a.push({element:i,datasetIndex:h,index:c})})),a}function Xi(t,e,i,s,n,o){return o||t.isPointInArea(e)?"r"!==i||s?Ui(t,e,i,s,n,o):function(t,e,i,s){let n=[];return $i(t,i,e,(function(t,i,o){const{startAngle:a,endAngle:r}=t.getProps(["startAngle","endAngle"],s),{angle:l}=X(t,{x:e.x,y:e.y});J(l,a,r)&&n.push({element:t,datasetIndex:i,index:o})})),n}(t,e,i,n):[]}function qi(t,e,i,s,n){const o=[],a="x"===i?"inXRange":"inYRange";let r=!1;return $i(t,i,e,((t,s,l)=>{t[a]&&t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Ki={evaluateInteractionItems:$i,modes:{index(t,e,i,s){const n=ve(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?Yi(t,n,o,s,a):Xi(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?Yi(t,n,o,s,a):Xi(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;t<i.length;++t)r.push({element:i[t],datasetIndex:e,index:t})}return r},point:(t,e,i,s)=>Yi(t,ve(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return Xi(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>qi(t,ve(e,t),"x",i.intersect,s),y:(t,e,i,s)=>qi(t,ve(e,t),"y",i.intersect,s)}};const Gi=["left","top","right","bottom"];function Ji(t,e){return t.filter((t=>t.pos===e))}function Zi(t,e){return t.filter((t=>-1===Gi.indexOf(t.pos)&&t.box.axis===e))}function Qi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function ts(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Gi.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o<a;++o){r=t[o];const{fullSize:a}=r.box,l=i[r.stack],h=l&&r.stackWeight/l.weight;r.horizontal?(r.width=h?h*s:a&&e.availableWidth,r.height=n):(r.width=s,r.height=h?h*n:a&&e.availableHeight)}return i}function es(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}function is(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function ss(t,e,i,s){const{pos:n,box:a}=i,r=t.maxPadding;if(!o(n)){i.size&&(t[n]-=i.size);const e=s[i.stack]||{size:0,count:1};e.size=Math.max(e.size,i.horizontal?a.height:a.width),i.size=e.size/e.count,t[n]+=i.size}a.getPadding&&is(r,a.getPadding());const l=Math.max(0,e.outerWidth-es(r,t,"left","right")),h=Math.max(0,e.outerHeight-es(r,t,"top","bottom")),c=l!==t.w,d=h!==t.h;return t.w=l,t.h=h,i.horizontal?{same:c,other:d}:{same:d,other:c}}function ns(t,e){const i=e.maxPadding;function s(t){const s={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function os(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;o<a;++o){r=t[o],l=r.box,l.update(r.width||e.w,r.height||e.h,ns(r.horizontal,e));const{same:a,other:d}=ss(e,i,r,s);h|=a&&n.length,c=c||d,l.fullSize||n.push(r)}return h&&os(n,e,i,s)||c}function as(t,e,i,s,n){t.top=i,t.left=e,t.right=e+s,t.bottom=i+n,t.width=s,t.height=n}function rs(t,e,i,s){const n=i.padding;let{x:o,y:a}=e;for(const r of t){const t=r.box,l=s[r.stack]||{count:1,placed:0,weight:1},h=r.stackWeight/l.weight||1;if(r.horizontal){const s=e.w*h,o=l.size||t.height;k(l.start)&&(a=l.start),t.fullSize?as(t,n.left,a,i.outerWidth-n.right-n.left,o):as(t,e.left+l.placed,a,s,o),l.start=a,l.placed+=s,a=t.bottom}else{const s=e.h*h,a=l.size||t.width;k(l.start)&&(o=l.start),t.fullSize?as(t,o,n.top,a,i.outerHeight-n.bottom-n.top):as(t,o,e.top+l.placed,a,s),l.start=o,l.placed+=s,o=t.right}}e.x=o,e.y=a}var ls={addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw(t){e.draw(t)}}]},t.boxes.push(e)},removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i.weight},update(t,e,i,s){if(!t)return;const n=ki(t.options.layout.padding),o=Math.max(e-n.width,0),a=Math.max(i-n.height,0),r=function(t){const e=function(t){const e=[];let i,s,n,o,a,r;for(i=0,s=(t||[]).length;i<s;++i)n=t[i],({position:o,options:{stack:a,stackWeight:r=1}}=n),e.push({index:i,box:n,pos:o,horizontal:n.isHorizontal(),weight:n.weight,stack:a&&o+a,stackWeight:r});return e}(t),i=Qi(e.filter((t=>t.box.fullSize)),!0),s=Qi(Ji(e,"left"),!0),n=Qi(Ji(e,"right")),o=Qi(Ji(e,"top"),!0),a=Qi(Ji(e,"bottom")),r=Zi(e,"x"),l=Zi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ji(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;u(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);is(f,ki(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=ts(l.concat(h),d);os(r.fullSize,g,d,p),os(l,g,d,p),os(h,g,d,p)&&os(l,g,d,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),rs(r.leftAndTop,g,d,p),g.x+=g.w,g.y+=g.h,rs(r.rightAndBottom,g,d,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},u(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class hs{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class cs extends hs{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const ds="$chartjs",us={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},fs=t=>null===t||""===t;const gs=!!Se&&{passive:!0};function ps(t,e,i){t&&t.canvas&&t.canvas.removeEventListener(e,i,gs)}function ms(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function xs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ms(i.addedNodes,s),e=e&&!ms(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function bs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ms(i.removedNodes,s),e=e&&!ms(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const _s=new Map;let ys=0;function vs(){const t=window.devicePixelRatio;t!==ys&&(ys=t,_s.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function Ms(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct(((t,e)=>{const s=n.clientWidth;i(t,e),s<n.clientWidth&&i()}),window),a=new ResizeObserver((t=>{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){_s.size||window.addEventListener("resize",vs),_s.set(t,e)}(t,o),a}function ws(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){_s.delete(t),_s.size||window.removeEventListener("resize",vs)}(t)}function ks(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t,e){const i=us[t.type]||t.type,{x:s,y:n}=ve(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t&&t.addEventListener(e,i,gs)}(s,e,n),n}class Ss extends hs{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t[ds]={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",fs(n)){const e=Pe(t,"width");void 0!==e&&(t.width=e)}if(fs(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Pe(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[ds])return!1;const i=e[ds].initial;["height","width"].forEach((t=>{const n=i[t];s(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e[ds],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:xs,detach:bs,resize:Ms}[e]||ks;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:ws,detach:ws,resize:ws}[e]||ps)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return we(t,e,i,s)}isAttached(t){const e=t&&ge(t);return!(!e||!e.isConnected)}}function Ps(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?cs:Ss}var Ds=Object.freeze({__proto__:null,BasePlatform:hs,BasicPlatform:cs,DomPlatform:Ss,_detectPlatform:Ps});const Cs="transparent",Os={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Qt(t||Cs),n=s.valid&&Qt(e||Cs);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class As{constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const o=Pi([t.from,n,s]);this._active=!0,this._fn=t.fn||Os[t.type||typeof o],this._easing=fi[t.easing]||fi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Pi([t.to,e,s,t.from]),this._from=Pi([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e<i),!this._active)return this._target[s]=a,void this._notify(!0);e<0?this._target[s]=n:(r=e/i%2,r=o&&r>1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t<i.length;t++)i[t][e]()}}class Ts{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!o(t))return;const e=Object.keys(ue.animation),i=this._properties;Object.getOwnPropertyNames(t).forEach((s=>{const a=t[s];if(!o(a))return;const r={};for(const t of e)r[t]=a[t];(n(a.properties)&&a.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,r)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e<s.length;e++){const n=t[s[e]];n&&n.active()&&i.push(n.wait())}return Promise.all(i)}(t.options.$animations,i).then((()=>{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new As(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(bt.add(this._chart,i),!0):void 0}}function Ls(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Es(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n<o;++n)i.push(s[n].index);return i}function Rs(t,e,i,s={}){const n=t.keys,o="single"===s.mode;let r,l,h,c;if(null===e)return;let d=!1;for(r=0,l=n.length;r<l;++r){if(h=+n[r],h===i){if(d=!0,s.all)continue;break}c=t.values[h],a(c)&&(o||0===e||F(e)===F(c))&&(e+=c)}return d||s.all?e:0}function Is(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void 0!==e.stack}function zs(t,e,i){const s=t[e]||(t[e]={});return s[i]||(s[i]={})}function Fs(t,e,i,s){for(const n of e.getMatchingVisibleMetas(s).reverse()){const e=t[n.index];if(i&&e>0||!i&&e<0)return n.index}return null}function Vs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;t<d;++t){const i=e[t],{[l]:o,[h]:d}=i;u=(i._stacks||(i._stacks={}))[h]=zs(n,c,o),u[r]=d,u._top=Fs(u,a,!0,s.type),u._bottom=Fs(u,a,!1,s.type);(u._visualValues||(u._visualValues={}))[r]=d}}function Bs(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t].axis===e)).shift()}function Ws(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Ns=t=>"reset"===t||"none"===t,Hs=(t,e)=>e?t:Object.assign({},t);class js{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Is(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Ws(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=l(i.xAxisID,Bs(t,"x")),o=e.yAxisID=l(i.yAxisID,Bs(t,"y")),a=e.rAxisID=l(i.rAxisID,Bs(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),c=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t._stacked&&Ws(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(o(e)){const t=this._cachedMeta;this._data=function(t,e){const{iScale:i,vScale:s}=e,n="x"===i.axis?"x":"y",o="x"===s.axis?"x":"y",a=Object.keys(t),r=new Array(a.length);let l,h,c;for(l=0,h=a.length;l<h;++l)c=a[l],r[l]={[n]:c,[o]:t[c]};return r}(e,t)}else if(i!==e){if(i){rt(i,this);const t=this._cachedMeta;Ws(t),t._parsed=[]}e&&Object.isExtensible(e)&&at(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=Is(e.vScale,e),e.stack!==i.stack&&(s=!0,Ws(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&(Vs(this,e._parsed),e._stacked=Is(e.vScale,e))}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:a,_stacked:r}=i,l=a.axis;let h,c,d,u=0===t&&e===s.length||i._sorted,f=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=n(s[t])?this.parseArrayData(i,s,t,e):o(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const a=()=>null===c[l]||f&&c[l]<f[l];for(h=0;h<e;++h)i._parsed[h+t]=c=d[h],u&&(a()&&(u=!1),f=c);i._sorted=u}r&&Vs(this,d)}parsePrimitiveData(t,e,i,s){const{iScale:n,vScale:o}=t,a=n.axis,r=o.axis,l=n.getLabels(),h=n===o,c=new Array(s);let d,u,f;for(d=0,u=s;d<u;++d)f=d+i,c[d]={[a]:h||n.parse(l[f],f),[r]:o.parse(e[f],f)};return c}parseArrayData(t,e,i,s){const{xScale:n,yScale:o}=t,a=new Array(s);let r,l,h,c;for(r=0,l=s;r<l;++r)h=r+i,c=e[h],a[r]={x:n.parse(c[0],h),y:o.parse(c[1],h)};return a}parseObjectData(t,e,i,s){const{xScale:n,yScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l=new Array(s);let h,c,d,u;for(h=0,c=s;h<c;++h)d=h+i,u=e[d],l[h]={x:n.parse(M(u,a),d),y:o.parse(M(u,r),d)};return l}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,i){const s=this.chart,n=this._cachedMeta,o=e[t.axis];return Rs({keys:Es(s,!0),values:e._stacks[t.axis]._visualValues},o,n.index,{mode:i})}updateRangeFromParsed(t,e,i,s){const n=i[e.axis];let o=null===n?NaN:n;const a=s&&i._stacks[e.axis];s&&a&&(s.values=a,o=Rs(s,n,this._cachedMeta.index)),t.min=Math.min(t.min,o),t.max=Math.max(t.max,o)}getMinMax(t,e){const i=this._cachedMeta,s=i._parsed,n=i._sorted&&t===i.iScale,o=s.length,r=this._getOtherScale(t),l=((t,e,i)=>t&&!e.hidden&&e._stacked&&{keys:Es(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!a(f[t.axis])||c>e||d<e}for(u=0;u<o&&(g()||(this.updateRangeFromParsed(h,t,f,l),!n));++u);if(n)for(u=o-1;u>=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s<n;++s)o=e[s][t.axis],a(o)&&i.push(o);return i}getMaxOverflow(){return!1}getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,s=e.vScale,n=this.getParsed(t);return{label:i?""+i.getLabelForValue(n[i.axis]):"",value:s?""+s.getLabelForValue(n[s.axis]):""}}_update(t){const e=this._cachedMeta;this.update(t||"default"),e._clip=function(t){let e,i,s,n;return o(t)?(e=t.top,i=t.right,s=t.bottom,n=t.left):e=i=s=n=t,{top:e,right:i,bottom:s,left:n,disabled:!1===t}}(l(this.options.clip,function(t,e,i){if(!1===i)return!1;const s=Ls(t,i),n=Ls(e,i);return{top:n.end,right:s.end,bottom:n.start,left:s.start}}(e.xScale,e.yScale,this.getMaxOverflow())))}update(t){}draw(){const t=this._ctx,e=this.chart,i=this._cachedMeta,s=i.data||[],n=e.chartArea,o=[],a=this._drawStart||0,r=this._drawCount||s.length-a,l=this.options.drawActiveElementsOnTop;let h;for(i.dataset&&i.dataset.draw(t,n,a,r),h=a;h<a+r;++h){const e=s[h];e.hidden||(e.active&&l?o.push(e):e.draw(t,n))}for(h=0;h<o.length;++h)o[h].draw(t,n)}getStyle(t,e){const i=e?"active":"default";return void 0===t&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,e,i){const s=this.getDataset();let n;if(t>=0&&t<this._cachedMeta.data.length){const e=this._cachedMeta.data[t];n=e.$context||(e.$context=function(t,e,i){return Ci(t,{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:i,index:e,mode:"default",type:"data"})}(this.getContext(),t,e)),n.parsed=this.getParsed(t),n.raw=s.data[t],n.index=n.dataIndex=t}else n=this.$context||(this.$context=function(t,e){return Ci(t,{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:"default",type:"dataset"})}(this.chart.getContext(),this.index)),n.dataset=s,n.index=n.datasetIndex=this.index;return n.active=!!e,n.mode=i,n}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e="default",i){const s="active"===e,n=this._cachedDataOpts,o=t+"-"+e,a=n[o],r=this.enableOptionSharing&&k(i);if(a)return Hs(a,r);const l=this.chart.config,h=l.datasetElementScopeKeys(this._type,t),c=s?[`${t}Hover`,"hover",t,""]:[t,""],d=l.getOptionScopes(this.getDataset(),h),u=Object.keys(ue.elements[t]),f=l.resolveNamedOptions(d,u,(()=>this.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Hs(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new Ts(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ns(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Ns(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Ns(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n<s&&this._removeElements(n,s-n)}_insertElements(t,e,i=!0){const s=this._cachedMeta,n=s.data,o=t+e;let a;const r=t=>{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a<o;++a)n[a]=new this.dataElementType;this._parsing&&r(s._parsed),this.parse(t,e),i&&this.updateElements(n,t,e,"reset")}updateElements(t,e,i,s){}_removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const s=i._parsed.splice(t,e);i._stacked&&Ws(i,s)}i.data.splice(t,e)}_sync(t){if(this._parsing)this._syncList.push(t);else{const[e,i,s]=t;this[e](i,s)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){const t=arguments.length;this._sync(["_insertElements",this.getDataset().data.length-t,t])}_onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync(["_removeElements",0,1])}_onDataSplice(t,e){e&&this._sync(["_removeElements",t,e]);const i=arguments.length-2;i&&this._sync(["_insertElements",t,i])}_onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}}class $s{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return N(this.x)&&N(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Ys(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;i<s;i++)t[i].major&&e.push(i);return e}(e):[],r=a.length,l=a[0],h=a[r-1],c=[];if(r>o)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;n<t.length;n++)n===a&&(e.push(t[n]),o++,a=i[o*s])}(e,c,a,r/o),c;const d=function(t,e,i){const s=function(t){const e=t.length;let i,s;if(e<2)return!1;for(s=t[0],i=1;i<e;++i)if(t[i]-t[i-1]!==s)return!1;return s}(t),n=e.length/i;if(!s)return Math.max(n,1);const o=W(s);for(let t=0,e=o.length-1;t<e;t++){const e=o[t];if(e>n)return e}return Math.max(n,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-l)/(r-1)):null;for(Us(e,c,d,s(n)?0:l-n,l),t=0,i=r-1;t<i;t++)Us(e,c,d,a[t],a[t+1]);return Us(e,c,d,h,s(n)?e.length:h+n),c}return Us(e,c,d),c}function Us(t,e,i,s,n){const o=l(s,0),a=Math.min(l(n,t.length),t.length);let r,h,c,d=0;for(i=Math.ceil(i),n&&(r=n-s,i=r/Math.floor(r/i)),c=o;c<0;)d++,c=Math.round(o+d*i);for(h=Math.max(o,0);h<a;h++)h===c&&(e.push(t[h]),d++,c=Math.round(o+d*i))}const Xs=(t,e,i)=>"top"===e||"left"===e?t[e]+i:t[e]-i,qs=(t,e)=>Math.min(e||t,t);function Ks(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;o<n;o+=s)i.push(t[Math.floor(o)]);return i}function Gs(t,e,i){const s=t.ticks.length,n=Math.min(e,s-1),o=t._startPixel,a=t._endPixel,r=1e-6;let l,h=t.getPixelForTick(n);if(!(i&&(l=1===s?Math.max(h-o,a-h):0===e?(t.getPixelForTick(1)-h)/2:(h-t.getPixelForTick(n-1))/2,h+=n<e?l:-l,h<o-r||h>a+r)))return h}function Js(t){return t.drawTicks?t.tickLength:0}function Zs(t,e){if(!t.display)return 0;const i=Si(t.font,e),s=ki(t.padding);return(n(t.text)?t.text.length:1)*i.lineHeight+s.height}function Qs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class tn extends $s{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=r(t,Number.POSITIVE_INFINITY),e=r(e,Number.NEGATIVE_INFINITY),i=r(i,Number.POSITIVE_INFINITY),s=r(s,Number.NEGATIVE_INFINITY),{min:r(t,i),max:r(e,s),minDefined:a(t),maxDefined:a(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;r<l;++r)e=a[r].controller.getMinMax(this,t),n||(i=Math.min(i,e.min)),o||(s=Math.max(s,e.max));return i=o&&i>s?s:i,s=n&&i>s?i:s,{min:r(i,r(s,i)),max:r(s,r(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Di(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a<this.ticks.length;this._convertTicksToLabels(r?Ks(this.ticks,a):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),o.display&&(o.autoSkip||"auto"===o.source)&&(this.ticks=Ys(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),r&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t,e,i=this.options.reverse;this.isHorizontal()?(t=this.left,e=this.right):(t=this.top,e=this.bottom,i=!i),this._startPixel=t,this._endPixel=e,this._reversePixels=i,this._length=e-t,this._alignToPixels=this.options.alignToPixels}afterUpdate(){d(this.options.afterUpdate,[this])}beforeSetDimensions(){d(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){d(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),d(this.options[t],[this])}beforeDataLimits(){this._callHooks("beforeDataLimits")}determineDataLimits(){}afterDataLimits(){this._callHooks("afterDataLimits")}beforeBuildTicks(){this._callHooks("beforeBuildTicks")}buildTicks(){return[]}afterBuildTicks(){this._callHooks("afterBuildTicks")}beforeTickToLabelConversion(){d(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){const e=this.options.ticks;let i,s,n;for(i=0,s=t.length;i<s;i++)n=t[i],n.label=d(e.callback,[n.value,i,t],this)}afterTickToLabelConversion(){d(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){d(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const t=this.options,e=t.ticks,i=qs(this.ticks.length,t.ticks.maxTicksLimit),s=e.minRotation||0,n=e.maxRotation;let o,a,r,l=s;if(!this._isVisible()||!e.display||s>=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=Z(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Js(t.grid)-e.padding-Zs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Y(Math.min(Math.asin(Z((h.highest.height+6)/o,-1,1)),Math.asin(Z(a/r,-1,1))-Math.asin(Z(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){d(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Zs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Js(n)+o):(t.height=this.maxHeight,t.width=Js(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=$(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){d(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e<i;e++)s(t[e].label)&&(t.splice(e,1),i--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){const e=this.options.ticks.sampleSize;let i=this.ticks;e<i.length&&(i=Ks(i,e)),this._labelSizes=t=this._computeLabelSizes(i,i.length,this.options.ticks.maxTicksLimit)}return t}_computeLabelSizes(t,e,i){const{ctx:o,_longestTextCache:a}=this,r=[],l=[],h=Math.floor(e/qs(e,i));let c,d,f,g,p,m,x,b,_,y,v,M=0,w=0;for(c=0;c<e;c+=h){if(g=t[c].label,p=this._resolveTickFontOptions(c),o.font=m=p.string,x=a[m]=a[m]||{data:{},gc:[]},b=p.lineHeight,_=y=0,s(g)||n(g)){if(n(g))for(d=0,f=g.length;d<f;++d)v=g[d],s(v)||n(v)||(_=Ce(o,x.data,x.gc,_,v),y+=b)}else _=Ce(o,x.data,x.gc,_,g),y=b;r.push(_),l.push(y),M=Math.max(_,M),w=Math.max(y,w)}!function(t,e){u(t,(t=>{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n<s;++n)delete t.data[i[n]];i.splice(0,s)}}))}(a,e);const k=r.indexOf(M),S=l.indexOf(w),P=t=>({width:r[t]||0,height:l[t]||0});return{first:P(0),last:P(e-1),widest:P(k),highest:P(S),widths:r,heights:l}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Q(this._alignToPixels?Ae(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&t<e.length){const i=e[t];return i.$context||(i.$context=function(t,e,i){return Ci(t,{tick:i,index:e,type:"tick"})}(this.getContext(),t,i))}return this.$context||(this.$context=Ci(this.chart.getContext(),{scale:this,type:"scale"}))}_tickSize(){const t=this.options.ticks,e=$(this.labelRotation),i=Math.abs(Math.cos(e)),s=Math.abs(Math.sin(e)),n=this._getLabelSizes(),o=t.autoSkipPadding||0,a=n?n.widest.width+o:0,r=n?n.highest.height+o:0;return this.isHorizontal()?r*i>a*s?a/i:r/s:r*s<a*i?r/i:a/s}_isVisible(){const t=this.options.display;return"auto"!==t?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:a,border:r}=s,h=n.offset,c=this.isHorizontal(),d=this.ticks.length+(h?1:0),u=Js(n),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,x=function(t){return Ae(i,t,p)};let b,_,y,v,M,w,k,S,P,D,C,O;if("top"===a)b=x(this.bottom),w=this.bottom-u,S=b-m,D=x(t.top)+m,O=t.bottom;else if("bottom"===a)b=x(this.top),D=t.top,O=x(t.bottom)-m,w=b+m,S=this.top+u;else if("left"===a)b=x(this.right),M=this.right-u,k=b-m,P=x(t.left)+m,C=t.right;else if("right"===a)b=x(this.left),P=t.left,C=x(t.right)-m,M=b+m,k=this.left+u;else if("x"===e){if("center"===a)b=x((t.top+t.bottom)/2+.5);else if(o(a)){const t=Object.keys(a)[0],e=a[t];b=x(this.chart.scales[t].getPixelForValue(e))}D=t.top,O=t.bottom,w=b+m,S=w+u}else if("y"===e){if("center"===a)b=x((t.left+t.right)/2);else if(o(a)){const t=Object.keys(a)[0],e=a[t];b=x(this.chart.scales[t].getPixelForValue(e))}M=b-m,k=M-u,P=t.left,C=t.right}const A=l(s.ticks.maxTicksLimit,d),T=Math.max(1,Math.ceil(d/A));for(_=0;_<d;_+=T){const t=this.getContext(_),e=n.setContext(t),s=r.setContext(t),o=e.lineWidth,a=e.color,l=s.dash||[],d=s.dashOffset,u=e.tickWidth,g=e.tickColor,p=e.tickBorderDash||[],m=e.tickBorderDashOffset;y=Gs(this,_,h),void 0!==y&&(v=Ae(i,y,o),c?M=k=P=C=v:w=S=D=O=v,f.push({tx1:M,ty1:w,tx2:k,ty2:S,x1:P,y1:D,x2:C,y2:O,width:o,color:a,borderDash:l,borderDashOffset:d,tickWidth:u,tickColor:g,tickBorderDash:p,tickBorderDashOffset:m}))}return this._ticksLength=d,this._borderValue=b,f}_computeLabelItems(t){const e=this.axis,i=this.options,{position:s,ticks:a}=i,r=this.isHorizontal(),l=this.ticks,{align:h,crossAlign:c,padding:d,mirror:u}=a,f=Js(i.grid),g=f+d,p=u?-d:g,m=-$(this.labelRotation),x=[];let b,_,y,v,M,w,k,S,P,D,C,O,A="middle";if("top"===s)w=this.bottom-p,k=this._getXAxisLabelAlignment();else if("bottom"===s)w=this.top+p,k=this._getXAxisLabelAlignment();else if("left"===s){const t=this._getYAxisLabelAlignment(f);k=t.textAlign,M=t.x}else if("right"===s){const t=this._getYAxisLabelAlignment(f);k=t.textAlign,M=t.x}else if("x"===e){if("center"===s)w=(t.top+t.bottom)/2+g;else if(o(s)){const t=Object.keys(s)[0],e=s[t];w=this.chart.scales[t].getPixelForValue(e)+g}k=this._getXAxisLabelAlignment()}else if("y"===e){if("center"===s)M=(t.left+t.right)/2-g;else if(o(s)){const t=Object.keys(s)[0],e=s[t];M=this.chart.scales[t].getPixelForValue(e)}k=this._getYAxisLabelAlignment(f).textAlign}"y"===e&&("start"===h?A="top":"end"===h&&(A="bottom"));const T=this._getLabelSizes();for(b=0,_=l.length;b<_;++b){y=l[b],v=y.label;const t=a.setContext(this.getContext(b));S=this.getPixelForTick(b)+a.labelOffset,P=this._resolveTickFontOptions(b),D=P.lineHeight,C=n(v)?v.length:1;const e=C/2,i=t.color,o=t.textStrokeColor,h=t.textStrokeWidth;let d,f=k;if(r?(M=S,"inner"===k&&(f=b===_-1?this.options.reverse?"left":"right":0===b?this.options.reverse?"right":"left":"center"),O="top"===s?"near"===c||0!==m?-C*D+D/2:"center"===c?-T.highest.height/2-e*D+D:-T.highest.height+D/2:"near"===c||0!==m?D/2:"center"===c?T.highest.height/2-e*D:T.highest.height-C*D,u&&(O*=-1),0===m||t.showLabelBackdrop||(M+=D/2*Math.sin(m))):(w=S,O=(1-C)*D/2),t.showLabelBackdrop){const e=ki(t.backdropPadding),i=T.heights[b],s=T.widths[b];let n=O-e.top,o=0-e.left;switch(A){case"middle":n-=i/2;break;case"bottom":n-=i}switch(k){case"center":o-=s/2;break;case"right":o-=s;break;case"inner":b===_-1?o-=s:b>0&&(o-=s/2)}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}x.push({label:v,font:P,textOffset:O,options:{rotation:m,color:i,strokeColor:o,strokeWidth:h,textAlign:f,textBaseline:A,translation:[M,w],backdrop:d}})}return x}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-$(this.labelRotation))return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align?i="right":"inner"===e.align&&(i="inner"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,l;return"left"===e?s?(l=this.right+n,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l+=a)):(l=this.right-o,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l=this.left)):"right"===e?s?(l=this.left+n,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l-=a)):(l=this.left+o,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l=this.right)):r="right",{textAlign:r,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n<o;++n){const t=s[n];e.drawOnChartArea&&a({x:t.x1,y:t.y1},{x:t.x2,y:t.y2},t),e.drawTicks&&a({x:t.tx1,y:t.ty1},{x:t.tx2,y:t.ty2},{color:t.tickColor,width:t.tickWidth,borderDash:t.tickBorderDash,borderDashOffset:t.tickBorderDashOffset})}}drawBorder(){const{chart:t,ctx:e,options:{border:i,grid:s}}=this,n=i.setContext(this.getContext()),o=i.display?n.width:0;if(!o)return;const a=s.setContext(this.getContext(0)).lineWidth,r=this._borderValue;let l,h,c,d;this.isHorizontal()?(l=Ae(t,this.left,o)-o/2,h=Ae(t,this.right,a)+a/2,c=d=r):(c=Ae(t,this.top,o)-o/2,d=Ae(t,this.bottom,a)+a/2,l=h=r),e.save(),e.lineWidth=n.width,e.strokeStyle=n.color,e.beginPath(),e.moveTo(l,c),e.lineTo(h,d),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;const e=this.ctx,i=this._computeLabelArea();i&&Ie(e,i);const s=this.getLabelItems(t);for(const t of s){const i=t.options,s=t.font;Ne(e,t.label,0,t.textOffset,s,i)}i&&ze(e)}drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:s}}=this;if(!i.display)return;const a=Si(i.font),r=ki(i.padding),l=i.align;let h=a.lineHeight/2;"bottom"===e||"center"===e||o(e)?(h+=r.bottom,n(i.text)&&(h+=a.lineHeight*(i.text.length-1))):h+=r.top;const{titleX:c,titleY:d,maxWidth:u,rotation:f}=function(t,e,i,s){const{top:n,left:a,bottom:r,right:l,chart:h}=t,{chartArea:c,scales:d}=h;let u,f,g,p=0;const m=r-n,x=l-a;if(t.isHorizontal()){if(f=ft(s,a,l),o(i)){const t=Object.keys(i)[0],s=i[t];g=d[t].getPixelForValue(s)+m-e}else g="center"===i?(c.bottom+c.top)/2+m-e:Xs(t,i,e);u=l-a}else{if(o(i)){const t=Object.keys(i)[0],s=i[t];f=d[t].getPixelForValue(s)-x+e}else f="center"===i?(c.left+c.right)/2-x+e:Xs(t,i,e);g=ft(s,r,n),p="left"===i?-E:E}return{titleX:f,titleY:g,maxWidth:u,rotation:p}}(this,h,e,l);Ne(t,i.text,0,0,a,{color:i.color,maxWidth:u,rotation:f,textAlign:Qs(l,e,s),textBaseline:"middle",translation:[c,d]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){const t=this.options,e=t.ticks&&t.ticks.z||0,i=l(t.grid&&t.grid.z,-1),s=l(t.border&&t.border.z,0);return this._isVisible()&&this.draw===tn.prototype.draw?[{z:i,draw:t=>{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n<o;++n){const o=e[n];o[i]!==this.id||t&&o.type!==t||s.push(o)}return s}_resolveTickFontOptions(t){return Si(this.options.ticks.setContext(this.getContext(t)).font)}_maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/t}}class en{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){const e=Object.getPrototypeOf(t);let i;(function(t){return"id"in t&&"defaults"in t})(e)&&(i=this.register(e));const s=this.items,n=t.id,o=this.scope+"."+n;if(!n)throw new Error("class does not have id: "+t);return n in s||(s[n]=t,function(t,e,i){const s=x(Object.create(null),[i?ue.get(i):{},ue.get(e),t.defaults]);ue.set(e,s),t.defaultRoutes&&function(t,e){Object.keys(e).forEach((i=>{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ue.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ue.describe(e,t.descriptors)}(t,o,i),this.override&&ue.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ue[s]&&(delete ue[s][i],this.override&&delete re[i])}}class sn{constructor(){this.controllers=new en(js,"datasets",!0),this.elements=new en($s,"elements"),this.plugins=new en(Object,"plugins"),this.scales=new en(tn,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):u(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++){const i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){const s=e.get(t);if(void 0===s)throw new Error('"'+t+'" is not a registered '+i+".");return s}}var nn=new sn;class on{constructor(){this._init=[]}notify(t,e,i,s){"beforeInit"===e&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));const n=s?this._descriptors(t).filter(s):this._descriptors(t),o=this._notify(n,t,e,i);return"afterDestroy"===e&&(this._notify(n,t,"stop"),this._notify(this._init,t,"uninstall")),o}_notify(t,e,i,s){s=s||{};for(const n of t){const t=n.plugin;if(!1===d(t[i],[e,s,n.options],t)&&s.cancelable)return!1}return!0}invalidate(){s(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const i=t&&t.config,s=l(i.options&&i.options.plugins,{}),n=function(t){const e={},i=[],s=Object.keys(nn.plugins.items);for(let t=0;t<s.length;t++)i.push(nn.getPlugin(s[t]));const n=t.plugins||[];for(let t=0;t<n.length;t++){const s=n[t];-1===i.indexOf(s)&&(i.push(s),e[s.id]=!0)}return{plugins:i,localIds:e}}(i);return!1!==s||e?function(t,{plugins:e,localIds:i},s,n){const o=[],a=t.getContext();for(const r of e){const e=r.id,l=an(s[e],n);null!==l&&o.push({plugin:r,options:rn(t.config,{plugin:r,local:i[e]},l,a)})}return o}(t,n,s,e):[]}_notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,s=(t,e)=>t.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function an(t,e){return e||!1!==t?!0===t?{}:t:null}function rn(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function ln(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function hn(t){if("x"===t||"y"===t||"r"===t)return t}function cn(t,...e){if(hn(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&hn(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function dn(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function un(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=ln(t.type,e),a=Object.create(null);return Object.keys(s).forEach((e=>{const r=s[e];if(!o(r))return console.error(`Invalid scale configuration for scale: ${e}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const l=cn(e,r,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return dn(t,"x",i[0])||dn(t,"y",i[0])}return{}}(e,t),ue.scales[r.type]),h=function(t,e){return t===e?"_index_":"_value_"}(l,n),c=i.scales||{};a[e]=b(Object.create(null),[{axis:l},r,c[l],c[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||ln(n,e),r=(re[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),b(a[n],[{axis:e},s[n],r[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];b(e,[ue.scales[e.type],ue.scale])})),a}function fn(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{}),e.scales=un(t,e)}function gn(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const pn=new Map,mn=new Set;function xn(t,e){let i=pn.get(t);return i||(i=e(),pn.set(t,i),mn.add(i)),i}const bn=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class _n{constructor(t){this._config=function(t){return(t=t||{}).data=gn(t.data),fn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=gn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),fn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return xn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return xn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return xn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return xn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>bn(r,t,e)))),e.forEach((t=>bn(r,s,t))),e.forEach((t=>bn(r,re[n]||{},t))),e.forEach((t=>bn(r,ue,t))),e.forEach((t=>bn(r,le,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),mn.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue.datasets[e]||{},{type:e},ue,le]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=yn(this._resolverCache,t,s);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:s}=Ye(t);for(const o of e){const e=i(o),a=s(o),r=(a||e)&&t[o];if(e&&(S(r)||vn(r))||a&&n(r))return!0}return!1}(a,e)){o.$shared=!1;l=$e(a,i=S(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:n}=yn(this._resolverCache,t,i);return o(e)?$e(n,e,void 0,s):n}}function yn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:je(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const vn=t=>o(t)&&Object.getOwnPropertyNames(t).some((e=>S(t[e])));const Mn=["top","bottom","left","right","chartArea"];function wn(t,e){return"top"===t||"bottom"===t||-1===Mn.indexOf(t)&&"x"===e}function kn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function Sn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function Pn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function Dn(t){return fe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Cn={},On=t=>{const e=Dn(t);return Object.values(Cn).filter((t=>t.canvas===e)).pop()};function An(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class Tn{static defaults=ue;static instances=Cn;static overrides=re;static registry=nn;static version="4.5.0";static getChart=On;static register(...t){nn.add(...t),Ln()}static unregister(...t){nn.remove(...t),Ln()}constructor(t,e){const s=this.config=new _n(e),n=Dn(t),o=On(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||Ps(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=i(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new on,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=dt((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],Cn[this.id]=this,r&&l?(bt.listen(this,"complete",Sn),bt.listen(this,"progress",Pn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return s(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return nn}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ke(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Te(this.canvas,this.ctx),this}stop(){return bt.stop(this),this}resize(t,e){bt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ke(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),d(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=cn(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),u(n,(e=>{const n=e.options,o=n.id,a=cn(o,n),r=l(n.type,e.dtype);void 0!==n.position&&wn(n.position,a)===wn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(nn.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),u(s,((t,e)=>{t||delete i[e]})),u(i,(t=>{ls.configure(this,t,t.options),ls.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;t<i;++t)this._destroyDatasetMeta(t);t.splice(e,i-e)}this._sortedMetasets=t.slice(0).sort(kn("order","index"))}_removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:e}}=this;t.length>e.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i<s;i++){const s=e[i];let n=this.getDatasetMeta(i);const o=s.type||this.config.type;if(n.type&&n.type!==o&&(this._destroyDatasetMeta(i),n=this.getDatasetMeta(i)),n.type=o,n.indexAxis=s.indexAxis||ln(o,this.options),n.order=s.order||0,n.index=i,n.label=""+s.label,n.visible=this.isDatasetVisible(i),n.controller)n.controller.updateIndex(i),n.controller.linkScales();else{const e=nn.getController(o),{datasetElementType:s,dataElementType:a}=ue.datasets[o];Object.assign(e,{dataElementType:nn.getElement(a),datasetElementType:s&&nn.getElement(s)}),n.controller=new e(this,i),t.push(n.controller)}}return this._updateMetasets(),t}_resetElements(){u(this.data.datasets,((t,e)=>{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t<e;t++){const{controller:e}=this.getDatasetMeta(t),i=!s&&-1===n.indexOf(e);e.buildOrUpdateElements(i),o=Math.max(+e.getMaxOverflow(),o)}o=this._minPadding=i.layout.autoPadding?o:0,this._updateLayout(o),s||u(n,(t=>{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(kn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){u(this.scales,(t=>{ls.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){An(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;t<e;t++)if(!P(s,i(t)))return;return Array.from(s).map((t=>t.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ls.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],u(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t<e;++t)this.getDatasetMeta(t).controller.configure();for(let e=0,i=this.data.datasets.length;e<i;++e)this._updateDataset(e,S(t)?t({datasetIndex:e}):t);this.notifyPlugins("afterDatasetsUpdate",{mode:t})}}_updateDataset(t,e){const i=this.getDatasetMeta(t),s={meta:i,index:t,mode:e,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetUpdate",s)&&(i.controller._update(e),s.cancelable=!1,this.notifyPlugins("afterDatasetUpdate",s))}render(){!1!==this.notifyPlugins("beforeRender",{cancelable:!0})&&(bt.has(this)?this.attached&&!bt.running(this)&&bt.start(this):(this.draw(),Sn({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){const{width:t,height:e}=this._resizeBeforeDraw;this._resizeBeforeDraw=null,this._resize(t,e)}if(this.clear(),this.width<=0||this.height<=0)return;if(!1===this.notifyPlugins("beforeDraw",{cancelable:!0}))return;const e=this._layers;for(t=0;t<e.length&&e[t].z<=0;++t)e[t].draw(this.chartArea);for(this._drawDatasets();t<e.length;++t)e[t].draw(this.chartArea);this.notifyPlugins("afterDraw")}_getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let s,n;for(s=0,n=e.length;s<n;++s){const n=e[s];t&&!n.visible||i.push(n)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(!1===this.notifyPlugins("beforeDatasetsDraw",{cancelable:!0}))return;const t=this.getSortedVisibleDatasetMetas();for(let e=t.length-1;e>=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i={meta:t,index:t.index,cancelable:!0},s=Ni(this,t);!1!==this.notifyPlugins("beforeDatasetDraw",i)&&(s&&Ie(e,s),t.controller.draw(),s&&ze(e),i.cancelable=!1,this.notifyPlugins("afterDatasetDraw",i))}isPointInArea(t){return Re(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Ki.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ci(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),bt.remove(this),t=0,e=this.data.datasets.length;t<e;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins("beforeDestroy");const{canvas:t,ctx:e}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),Te(t,e),this.platform.releaseContext(e),this.canvas=null,this.ctx=null),delete Cn[this.id],this.notifyPlugins("afterDestroy")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){const t=this._listeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};u(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},u(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a<r;++a){o=t[a];const e=o&&this.getDatasetMeta(o.datasetIndex).controller;e&&e[s+"HoverStyle"](o.element,o.datasetIndex,o.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){const e=this._active||[],i=t.map((({datasetIndex:t,index:e})=>{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!f(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=D(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,d(n.onHover,[t,a,this],this),r&&d(n.onClick,[t,a,this],this));const h=!f(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function Ln(){return u(Tn.instances,(t=>t._plugins.invalidate()))}function En(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Rn{static override(t){Object.assign(Rn.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return En()}parse(){return En()}format(){return En()}add(){return En()}diff(){return En()}startOf(){return En()}endOf(){return En()}}var In={_date:Rn};function zn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;e<n;e++)s=s.concat(i[e].controller.getAllParsedValues(t));t._cache.$bar=lt(s.sort(((t,e)=>t-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;s<n;++s)o=e.getPixelForValue(i[s]),l();for(a=void 0,s=0,n=e.ticks.length;s<n;++s)o=e.getPixelForTick(s),l();return r}function Fn(t,e,i,s){return n(t)?function(t,e,i,s){const n=i.parse(t[0],s),o=i.parse(t[1],s),a=Math.min(n,o),r=Math.max(n,o);let l=a,h=r;Math.abs(a)>Math.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function Vn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;h<c;++h)u=e[h],d={},d[n.axis]=r||n.parse(a[h],h),l.push(Fn(u,d,o,h));return l}function Bn(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}function Wn(t,e,i,s){let n=e.borderSkipped;const o={};if(!n)return void(t.borderSkipped=o);if(!0===n)return void(t.borderSkipped={top:!0,right:!0,bottom:!0,left:!0});const{start:a,end:r,reverse:l,top:h,bottom:c}=function(t){let e,i,s,n,o;return t.horizontal?(e=t.base>t.x,i="left",s="right"):(e=t.base<t.y,i="bottom",s="top"),e?(n="end",o="start"):(n="start",o="end"),{start:i,end:s,reverse:e,top:n,bottom:o}}(t);"middle"===n&&i&&(t.enableBorderRadius=!0,(i._top||0)===s?n=h:(i._bottom||0)===s?n=c:(o[Nn(c,a,r,l)]=!0,n=h)),o[Nn(n,a,r,l)]=!0,t.borderSkipped=o}function Nn(t,e,i,s){var n,o,a;return s?(a=i,t=Hn(t=(n=t)===(o=e)?a:n===a?o:n,i,e)):t=Hn(t,e,i),t}function Hn(t,e,i){return"start"===t?e:"end"===t?i:t}function jn(t,{inflateAmount:e},i){t.inflateAmount="auto"===e?1===i?.33:0:e}class $n extends js{static id="doughnut";static defaults={datasetElementType:!1,dataElementType:"arc",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:"number",properties:["circumference","endAngle","innerRadius","outerRadius","startAngle","x","y","offset","borderWidth","spacing"]}},cutout:"50%",rotation:0,circumference:360,radius:"100%",spacing:0,indexAxis:"r"};static descriptors={_scriptable:t=>"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,a,r=t=>+i[t];if(o(i[t])){const{key:t="value"}=this._parsing;r=e=>+M(i[e],t)}for(n=t,a=t+e;n<a;++n)s._parsed[n]=r(n)}}_getRotation(){return $(this.options.rotation-90)}_getCircumference(){return $(this.options.circumference)}_getRotationExtents(){let t=O,e=-O;for(let i=0;i<this.chart.data.datasets.length;++i)if(this.chart.isDatasetVisible(i)&&this.chart.getDatasetMeta(i).type===this._type){const s=this.chart.getDatasetMeta(i).controller,n=s._getRotation(),o=s._getCircumference();t=Math.min(t,n),e=Math.max(e,n+o)}return{rotation:t,circumference:e-t}}update(t){const e=this.chart,{chartArea:i}=e,s=this._cachedMeta,n=s.data,o=this.getMaxBorderWidth()+this.getMaxOffset(n)+this.options.spacing,a=Math.max((Math.min(i.width,i.height)-o)/2,0),r=Math.min(h(this.options.cutout,a),1),l=this._getRingWeight(this.index),{circumference:d,rotation:u}=this._getRotationExtents(),{ratioX:f,ratioY:g,offsetX:p,offsetY:m}=function(t,e,i){let s=1,n=1,o=0,a=0;if(e<O){const r=t,l=r+e,h=Math.cos(r),c=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(t,e,s)=>J(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>J(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(E,c,u),x=g(C,h,d),b=g(C+E,c,u);s=(p-x)/2,n=(m-b)/2,o=-(p+x)/2,a=-(m+b)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),x=(i.width-o)/f,b=(i.height-o)/g,_=Math.max(Math.min(x,b)/2,0),y=c(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p<e;++p)m+=this._circumference(p,n);for(p=e;p<e+i;++p){const e=this._circumference(p,n),i=t[p],o={x:l+this.offsetX,y:h+this.offsetY,startAngle:m,endAngle:m+e,circumference:e,outerRadius:u,innerRadius:d};g&&(o.options=f||this.resolveDataElementOptions(p,i.active?"active":s)),m+=e,this.updateElement(i,p,o,s)}}calculateTotal(){const t=this._cachedMeta,e=t.data;let i,s=0;for(i=0;i<e.length;i++){const n=t._parsed[i];null===n||isNaN(n)||!this.chart.getDataVisibility(i)||e[i].hidden||(s+=Math.abs(n))}return s}calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s<n;++s)if(i.isDatasetVisible(s)){o=i.getDatasetMeta(s),t=o.data,a=o.controller;break}if(!t)return 0;for(s=0,n=t.length;s<n;++s)r=a.resolveDataElementOptions(s),"inner"!==r.borderAlign&&(e=Math.max(e,r.borderWidth||0,r.hoverBorderWidth||0));return e}getMaxOffset(t){let e=0;for(let i=0,s=t.length;i<s;++i){const t=this.resolveDataElementOptions(i);e=Math.max(e,t.offset||0,t.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let i=0;i<t;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e}_getRingWeight(t){return Math.max(l(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}class Yn extends js{static id="polarArea";static defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(s<e.min&&(e.min=s),s>e.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*C;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d<e;++d)u+=this._computeAngle(d,s,f);for(d=e;d<e+i;d++){const e=t[d];let i=u,g=u+this._computeAngle(d,s,f),p=o.getDataVisibility(d)?r.getDistanceFromCenterForValue(this.getParsed(d).r):0;u=g,n&&(a.animateScale&&(p=0),a.animateRotate&&(i=g=c));const m={x:l,y:h,innerRadius:0,outerRadius:p,startAngle:i,endAngle:g,options:this.resolveDataElementOptions(d,e.active?"active":s)};this.updateElement(e,d,m,s)}}countVisibleElements(){const t=this._cachedMeta;let e=0;return t.data.forEach(((t,i)=>{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.resolveDataElementOptions(t,e).angle||i):0}}var Un=Object.freeze({__proto__:null,BarController:class extends js{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return Vn(t,e,i,s)}parseArrayData(t,e,i,s){return Vn(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;d<u;++d)g=e[d],f={},f[n.axis]=n.parse(M(g,l),d),c.push(Fn(M(g,h),f,o,d));return c}updateRangeFromParsed(t,e,i,s){super.updateRangeFromParsed(t,e,i,s);const n=i._custom;n&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,n.min),t.max=Math.max(t.max,n.max))}getMaxOverflow(){return 0}getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:s}=e,n=this.getParsed(t),o=n._custom,a=Bn(o)?"["+o.start+", "+o.end+"]":""+s.getLabelForValue(n[s.axis]);return{label:""+i.getLabelForValue(n[i.axis]),value:a}}initialize(){this.enableOptionSharing=!0,super.initialize();this._cachedMeta.stack=this.getDataset().stack}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,n){const o="reset"===n,{index:a,_cachedMeta:{vScale:r}}=this,l=r.getBasePixel(),h=r.isHorizontal(),c=this._getRuler(),{sharedOptions:d,includeOptions:u}=this._getSharedOptions(e,n);for(let f=e;f<e+i;f++){const e=this.getParsed(f),i=o||s(e[r.axis])?{base:l,head:l}:this._calculateBarValuePixels(f),g=this._calculateBarIndexPixels(f,c),p=(e._stacks||{})[r.axis],m={horizontal:h,base:i.base,enableBorderRadius:!p||Bn(e._custom)||a===p._top||a===p._bottom,x:h?i.head:g.center,y:h?g.center:i.head,height:h?g.size:Math.abs(i.size),width:h?Math.abs(i.size):g.size};u&&(m.options=d||this.resolveDataElementOptions(f,t[f].active?"active":n));const x=m.options||t[f].options;Wn(m,x,p,a),jn(m,x,c.ratio),this.updateElement(t[f],f,m,n)}}_getStacks(t,e){const{iScale:i}=this._cachedMeta,n=i.getMatchingVisibleMetas(this._type).filter((t=>t.controller.options.grouped)),o=i.options.stacked,a=[],r=this._cachedMeta.controller.getParsed(e),l=r&&r[i.axis],h=t=>{const e=t._parsed.find((t=>t[i.axis]===l)),n=e&&e[t.vScale.axis];if(s(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!h(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter((i=>t[i].axis===e)).shift()}_getAxis(){const t={},e=this.getFirstScaleIdForIndexAxis();for(const i of this.chart.data.datasets)t[l("x"===this.chart.options.indexAxis?i.xAxisID:i.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n<o;++n)s.push(i.getPixelForValue(this.getParsed(n)[i.axis],n));const a=t.barThickness;return{min:a||zn(e),pixels:s,start:i._startPixel,end:i._endPixel,stackCount:this._getStackCount(),scale:i,grouped:t.grouped,ratio:a?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){const{_cachedMeta:{vScale:e,_stacked:i,index:n},options:{base:o,minBarLength:a}}=this,r=o||0,l=this.getParsed(t),h=l._custom,c=Bn(h);let d,u,f=l[e.axis],g=0,p=i?this.applyStack(e,l,i):f;p!==f&&(g=p-f,p=f),c&&(f=h.barStart,p=h.barEnd-h.barStart,0!==f&&F(f)!==F(h.barEnd)&&(g=0),g+=f);const m=s(o)||c?g:o;let x=e.getPixelForValue(m);if(d=this.chart.getDataVisibility(t)?e.getPixelForValue(g+p):x,u=d-x,Math.abs(u)<a){u=function(t,e,i){return 0!==t?F(t):(e.isHorizontal()?1:-1)*(e.min>=i?1:-1)}(u,e,r)*a,f===r&&(x-=u/2);const t=e.getPixelForDecimal(0),s=e.getPixelForDecimal(1),o=Math.min(t,s),h=Math.max(t,s);x=Math.max(Math.min(x,h),o),d=x+u,i&&!c&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(x))}if(x===e.getPixelForValue(r)){const t=F(u)*e.getLineWidthForValue(r)/2;x+=t,u-=t}return{size:u,base:x,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=l(n.maxBarThickness,1/0);let r,h;const c=this._getAxisCount();if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,d="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t<n.length-1?n[t+1]:null;const l=i.categoryPercentage;null===a&&(a=o-(null===r?e.end-e.start:r-o)),null===r&&(r=o+o-a);const h=o-(o-Math.min(a,r))/2*l;return{chunk:Math.abs(r-a)/2*l/s,ratio:i.barPercentage,start:h}}(t,e,n,i*c):function(t,e,i,n){const o=i.barThickness;let a,r;return s(o)?(a=e.min*i.categoryPercentage,r=i.barPercentage):(a=o*n,r=1),{chunk:a/n,ratio:r,start:e.pixels[t]-a/2}}(t,e,n,i*c),u="x"===this.chart.options.indexAxis?this.getDataset().xAxisID:this.getDataset().yAxisID,f=this._getAxis().indexOf(l(u,this.getFirstScaleIdForIndexAxis())),g=this._getStackIndex(this.index,this._cachedMeta.stack,o?t:void 0)+f;r=d.start+d.chunk*g+d.chunk/2,h=Math.min(a,d.chunk*d.ratio)}else r=i.getPixelForValue(this.getParsed(t)[i.axis],t),h=Math.min(a,e.min*e.ratio);return{base:r-h/2,head:r+h/2,center:r,size:h}}draw(){const t=this._cachedMeta,e=t.vScale,i=t.data,s=i.length;let n=0;for(;n<s;++n)null===this.getParsed(n)[e.axis]||i[n].hidden||i[n].draw(this._ctx)}},BubbleController:class extends js{static id="bubble";static defaults={datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}};static overrides={scales:{x:{type:"linear"},y:{type:"linear"}}};initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(t,e,i,s){const n=super.parsePrimitiveData(t,e,i,s);for(let t=0;t<n.length;t++)n[t]._custom=this.resolveDataElementOptions(t+i).radius;return n}parseArrayData(t,e,i,s){const n=super.parseArrayData(t,e,i,s);for(let t=0;t<n.length;t++){const s=e[i+t];n[t]._custom=l(s[2],this.resolveDataElementOptions(t+i).radius)}return n}parseObjectData(t,e,i,s){const n=super.parseObjectData(t,e,i,s);for(let t=0;t<n.length;t++){const s=e[i+t];n[t]._custom=l(s&&s.r&&+s.r,this.resolveDataElementOptions(t+i).radius)}return n}getMaxOverflow(){const t=this._cachedMeta.data;let e=0;for(let i=t.length-1;i>=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d<e+i;d++){const e=t[d],i=!n&&this.getParsed(d),u={},f=u[h]=n?o.getPixelForDecimal(.5):o.getPixelForValue(i[h]),g=u[c]=n?a.getBasePixel():a.getPixelForValue(i[c]);u.skip=isNaN(f)||isNaN(g),l&&(u.options=r||this.resolveDataElementOptions(d,e.active?"active":s),n&&(u.options.radius=0)),this.updateElement(e,d,u,s)}}resolveDataElementOptions(t,e){const i=this.getParsed(t);let s=super.resolveDataElementOptions(t,e);s.$shared&&(s=Object.assign({},s,{$shared:!1}));const n=s.radius;return"active"!==e&&(s.radius=0),s.radius+=l(i&&i._custom,n),s}},DoughnutController:$n,LineController:class extends js{static id="line";static defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};static overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=this.chart._animationsDisabled;let{start:a,count:r}=pt(e,s,o);this._drawStart=a,this._drawCount=r,mt(e)&&(a=0,r=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!n._decimated,i.points=s;const l=this.resolveDatasetElementOptions(t);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:l},t),this.updateElements(s,a,r,t)}updateElements(t,e,i,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:l,_dataset:h}=this._cachedMeta,{sharedOptions:c,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=N(g)?g:Number.POSITIVE_INFINITY,x=this.chart._animationsDisabled||o||"none"===n,b=e+i,_=t.length;let y=e>0&&this.getParsed(e-1);for(let i=0;i<_;++i){const g=t[i],_=x?g:{};if(i<e||i>=b){_.skip=!0;continue}const v=this.getParsed(i),M=s(v[f]),w=_[u]=a.getPixelForValue(v[u],i),k=_[f]=o||M?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,v,l):v[f],i);_.skip=isNaN(w)||isNaN(k)||M,_.stop=i>0&&Math.abs(v[u]-y[u])>m,p&&(_.parsed=v,_.raw=h.data[i]),d&&(_.options=c||this.resolveDataElementOptions(i,g.active?"active":n)),x||this.updateElement(g,i,_,n),y=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PieController:class extends $n{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},PolarAreaController:Yn,RadarController:class extends js{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a<e+i;a++){const e=t[a],i=this.resolveDataElementOptions(a,e.active?"active":s),r=n.getPointPositionForValue(a,this.getParsed(a).r),l=o?n.xCenter:r.x,h=o?n.yCenter:r.y,c={x:l,y:h,angle:r.angle,skip:isNaN(l)||isNaN(h),options:i};this.updateElement(e,a,c,s)}}},ScatterController:class extends js{static id="scatter";static defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};static overrides={interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}};getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y);return{label:i[t]||"",value:"("+a+", "+r+")"}}update(t){const e=this._cachedMeta,{data:i=[]}=e,s=this.chart._animationsDisabled;let{start:n,count:o}=pt(e,i,s);if(this._drawStart=n,this._drawCount=o,mt(e)&&(n=0,o=i.length),this.options.showLine){this.datasetElementType||this.addElements();const{dataset:n,_dataset:o}=e;n._chart=this.chart,n._datasetIndex=this.index,n._decimated=!!o._decimated,n.points=i;const a=this.resolveDatasetElementOptions(t);a.segment=this.options.segment,this.updateElement(n,void 0,{animated:!s,options:a},t)}else this.datasetElementType&&(delete e.dataset,this.datasetElementType=!1);this.updateElements(i,n,o,t)}addElements(){const{showLine:t}=this.options;!this.datasetElementType&&t&&(this.datasetElementType=this.chart.registry.getElement("line")),super.addElements()}updateElements(t,e,i,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:l,_dataset:h}=this._cachedMeta,c=this.resolveDataElementOptions(e,n),d=this.getSharedOptions(c),u=this.includeOptions(n,d),f=a.axis,g=r.axis,{spanGaps:p,segment:m}=this.options,x=N(p)?p:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||"none"===n;let _=e>0&&this.getParsed(e-1);for(let c=e;c<e+i;++c){const e=t[c],i=this.getParsed(c),p=b?e:{},y=s(i[g]),v=p[f]=a.getPixelForValue(i[f],c),M=p[g]=o||y?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,i,l):i[g],c);p.skip=isNaN(v)||isNaN(M)||y,p.stop=c>0&&Math.abs(i[f]-_[f])>x,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),b||this.updateElement(e,c,p,n),_=i}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Xn(t,e,i,s){const n=vi(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return Z(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Z(n.innerStart,0,a),innerEnd:Z(n.innerEnd,0,a)}}function qn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Kn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/C)/d)/2,m=l+p+f,x=n-p-f,{outerStart:b,outerEnd:_,innerStart:y,innerEnd:v}=Xn(e,u,d,x-m),M=d-b,w=d-_,k=m+b/M,S=x-_/w,P=u+y,D=u+v,O=m+y/P,A=x-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=qn(w,S,a,r);t.arc(e.x,e.y,_,S,x+E)}const i=qn(D,x,a,r);if(t.lineTo(i.x,i.y),v>0){const e=qn(D,A,a,r);t.arc(e.x,e.y,v,x+E,A+Math.PI)}const s=(x-v/u+(m+y/u))/2;if(t.arc(a,r,u,x-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=qn(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-E)}const n=qn(M,m,a,r);if(t.lineTo(n.x,n.y),b>0){const e=qn(M,k,a,r);t.arc(e.x,e.y,b,m-E,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function Gn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:l}=e,{borderWidth:h,borderJoinStyle:c,borderDash:d,borderDashOffset:u,borderRadius:f}=l,g="inner"===l.borderAlign;if(!h)return;t.setLineDash(d||[]),t.lineDashOffset=u,g?(t.lineWidth=2*h,t.lineJoin=c||"round"):(t.lineWidth=h,t.lineJoin=c||"bevel");let p=e.endAngle;if(o){Kn(t,e,i,s,p,n);for(let e=0;e<o;++e)t.stroke();isNaN(r)||(p=a+(r%O||O))}g&&function(t,e,i){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=e;let h=n/r;t.beginPath(),t.arc(o,a,r,s-h,i+h),l>n?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+E,s-E),t.closePath(),t.clip()}(t,e,p),l.selfJoin&&p-a>=C&&0===f&&"miter"!==c&&function(t,e,i){const{startAngle:s,x:n,y:o,outerRadius:a,innerRadius:r,options:l}=e,{borderWidth:h,borderJoinStyle:c}=l,d=Math.min(h/a,G(s-i));if(t.beginPath(),t.arc(n,o,a-h/2,s+d/2,i-d/2),r>0){const e=Math.min(h/r,G(s-i));t.arc(n,o,r+h/2,i-e/2,s+e/2,!0)}else{const e=Math.min(h/2,a*G(s-i));if("round"===c)t.arc(n,o,e,i-C/2,s+C/2,!0);else if("bevel"===c){const a=2*e*e,r=-a*Math.cos(i+C/2)+n,l=-a*Math.sin(i+C/2)+o,h=a*Math.cos(s+C/2)+n,c=a*Math.sin(s+C/2)+o;t.lineTo(r,l),t.lineTo(h,c)}}t.closePath(),t.moveTo(0,0),t.rect(0,0,t.canvas.width,t.canvas.height),t.clip("evenodd")}(t,e,p),o||(Kn(t,e,i,s,p,n),t.stroke())}function Jn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.setLineDash(l(i.borderDash,e.borderDash)),t.lineDashOffset=l(i.borderDashOffset,e.borderDashOffset),t.lineJoin=l(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=l(i.borderWidth,e.borderWidth),t.strokeStyle=l(i.borderColor,e.borderColor)}function Zn(t,e,i){t.lineTo(i.x,i.y)}function Qn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=n<a&&o<a||n>r&&o>r;return{count:s,start:l,loop:e.loop,ilen:h<l&&!c?s+h-l:h-l}}function to(t,e,i,s){const{points:n,options:o}=e,{count:a,start:r,loop:l,ilen:h}=Qn(n,i,s),c=function(t){return t.stepped?Fe:t.tension||"monotone"===t.cubicInterpolationMode?Ve:Zn}(o);let d,u,f,{move:g=!0,reverse:p}=s||{};for(d=0;d<=h;++d)u=n[(r+(p?h-d:d))%a],u.skip||(g?(t.moveTo(u.x,u.y),g=!1):c(t,f,u,p,o.stepped),f=u);return l&&(u=n[(r+(p?h:0))%a],c(t,f,u,p,o.stepped)),!!l}function eo(t,e,i,s){const n=e.points,{count:o,start:a,ilen:r}=Qn(n,i,s),{move:l=!0,reverse:h}=s||{};let c,d,u,f,g,p,m=0,x=0;const b=t=>(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[b(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[b(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(i<f?f=i:i>g&&(g=i),m=(x*m+e)/++x):(_(),t.lineTo(e,i),u=s,x=0,f=g=i),p=i}_()}function io(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?eo:to}const so="function"==typeof Path2D;function no(t,e,i,s){so&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Jn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=io(e);for(const r of n)Jn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class oo extends $s{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;hi(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=zi(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ii(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?pi:t.tension||"monotone"===t.cubicInterpolationMode?mi:gi}(i);let l,h;for(l=0,h=o.length;l<h;++l){const{start:h,end:c}=o[l],d=n[h],u=n[c];if(d===u){a.push(d);continue}const f=r(d,u,Math.abs((s-d[e])/(u[e]-d[e])),i.stepped);f[e]=t[e],a.push(f)}return 1===a.length?a[0]:a}pathSegment(t,e,i){return io(this)(t,this,e,i)}path(t,e,i){const s=this.segments,n=io(this);let o=this._loop;e=e||0,i=i||this.points.length-e;for(const a of s)o&=n(t,this,a,{start:e,end:e+i-1});return!!o}draw(t,e,i,s){const n=this.options||{};(this.points||[]).length&&n.borderWidth&&(t.save(),no(t,this,i,s),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}}function ao(t,e,i,s){const n=t.options,{[i]:o}=t.getProps([i],s);return Math.abs(e-o)<n.radius+n.hitRadius}function ro(t,e){const{x:i,y:s,base:n,width:o,height:a}=t.getProps(["x","y","base","width","height"],e);let r,l,h,c,d;return t.horizontal?(d=a/2,r=Math.min(i,n),l=Math.max(i,n),h=s-d,c=s+d):(d=o/2,r=i-d,l=i+d,h=Math.min(s,n),c=Math.max(s,n)),{left:r,top:h,right:l,bottom:c}}function lo(t,e,i,s){return t?0:Z(e,i,s)}function ho(t){const e=ro(t),i=e.right-e.left,s=e.bottom-e.top,n=function(t,e,i){const s=t.options.borderWidth,n=t.borderSkipped,o=Mi(s);return{t:lo(n.top,o.top,0,i),r:lo(n.right,o.right,0,e),b:lo(n.bottom,o.bottom,0,i),l:lo(n.left,o.left,0,e)}}(t,i/2,s/2),a=function(t,e,i){const{enableBorderRadius:s}=t.getProps(["enableBorderRadius"]),n=t.options.borderRadius,a=wi(n),r=Math.min(e,i),l=t.borderSkipped,h=s||o(n);return{topLeft:lo(!h||l.top||l.left,a.topLeft,0,r),topRight:lo(!h||l.top||l.right,a.topRight,0,r),bottomLeft:lo(!h||l.bottom||l.left,a.bottomLeft,0,r),bottomRight:lo(!h||l.bottom||l.right,a.bottomRight,0,r)}}(t,i/2,s/2);return{outer:{x:e.left,y:e.top,w:i,h:s,radius:a},inner:{x:e.left+n.l,y:e.top+n.t,w:i-n.l-n.r,h:s-n.t-n.b,radius:{topLeft:Math.max(0,a.topLeft-Math.max(n.t,n.l)),topRight:Math.max(0,a.topRight-Math.max(n.t,n.r)),bottomLeft:Math.max(0,a.bottomLeft-Math.max(n.b,n.l)),bottomRight:Math.max(0,a.bottomRight-Math.max(n.b,n.r))}}}}function co(t,e,i,s){const n=null===e,o=null===i,a=t&&!(n&&o)&&ro(t,s);return a&&(n||tt(e,a.left,a.right))&&(o||tt(i,a.top,a.bottom))}function uo(t,e){t.rect(e.x,e.y,e.w,e.h)}function fo(t,e,i={}){const s=t.x!==i.x?-e:0,n=t.y!==i.y?-e:0,o=(t.x+t.w!==i.x+i.w?e:0)-s,a=(t.y+t.h!==i.y+i.h?e:0)-n;return{x:t.x+s,y:t.y+n,w:t.w+o,h:t.h+a,radius:t.radius}}var go=Object.freeze({__proto__:null,ArcElement:class extends $s{static id="arc";static defaults={borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1};static defaultRoutes={backgroundColor:"backgroundColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=X(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:h,outerRadius:c,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),u=(this.options.spacing+this.options.borderWidth)/2,f=l(d,r-a),g=J(n,a,r)&&a!==r,p=f>=O||g,m=tt(o,h+u,c+u);return p&&m}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(C,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Kn(t,e,i,s,l,n);for(let e=0;e<o;++e)t.fill();isNaN(r)||(l=a+(r%O||O))}Kn(t,e,i,s,l,n),t.fill()}(t,this,r,n,o),Gn(t,this,r,n,o),t.restore()}},BarElement:class extends $s{static id="bar";static defaults={borderSkipped:"start",borderWidth:0,borderRadius:0,inflateAmount:"auto",pointStyle:void 0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){const{inflateAmount:e,options:{borderColor:i,backgroundColor:s}}=this,{inner:n,outer:o}=ho(this),a=(r=o.radius).topLeft||r.topRight||r.bottomLeft||r.bottomRight?He:uo;var r;t.save(),o.w===n.w&&o.h===n.h||(t.beginPath(),a(t,fo(o,e,n)),t.clip(),a(t,fo(n,-e,o)),t.fillStyle=i,t.fill("evenodd")),t.beginPath(),a(t,fo(n,e)),t.fillStyle=s,t.fill(),t.restore()}inRange(t,e,i){return co(this,t,e,i)}inXRange(t,e){return co(this,t,null,e)}inYRange(t,e){return co(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,base:s,horizontal:n}=this.getProps(["x","y","base","horizontal"],t);return{x:n?(e+s)/2:e,y:n?i:(i+s)/2}}getRange(t){return"x"===t?this.width/2:this.height/2}},LineElement:oo,PointElement:class extends $s{static id="point";parsed;skip;stop;static defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps(["x","y"],i);return Math.pow(t-n,2)+Math.pow(e-o,2)<Math.pow(s.hitRadius+s.radius,2)}inXRange(t,e){return ao(this,t,"x",e)}inYRange(t,e){return ao(this,t,"y",e)}getCenterPoint(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverRadius||0);return 2*(e+(e&&t.borderWidth||0))}draw(t,e){const i=this.options;this.skip||i.radius<.1||!Re(this,e,this.size(i)/2)||(t.strokeStyle=i.borderColor,t.lineWidth=i.borderWidth,t.fillStyle=i.backgroundColor,Le(t,i,this.x,this.y))}getRange(){const t=this.options||{};return t.radius+t.hitRadius}}});function po(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function mo(t){const e=this.getLabels();return t>=0&&t<e.length?e[t]:t}function xo(t,e,{horizontal:i,minRotation:s}){const n=$(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}class bo extends tn{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return s(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=F(s),e=F(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,x=!s(a),b=!s(r),_=!s(h),y=(m-p)/(d+1);let v,M,w,k,S=B((m-p)/g/f)*f;if(S<1e-14&&!x&&!b)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=B(k*S/g/f)*f),s(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),x&&b&&o&&H((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=x?a:M,w=b?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=V(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(U(S),U(M));v=Math.pow(10,s(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(x&&(u&&M!==a?(i.push({value:a}),M<a&&D++,V(Math.round((M+D*S)*v)/v,a,xo(a,y,t))&&D++):M<a&&D++);D<k;++D){const t=Math.round((M+D*S)*v)/v;if(b&&t>r)break;i.push({value:t})}return b&&u&&w!==r?i.length&&V(i[i.length-1].value,r,xo(r,y,t))?i[i.length-1].value=r:i.push({value:r}):b&&w!==r||i.push({value:w}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&j(n,this,"value"),t.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return ne(t,this.chart.options.locale,this.options.ticks.format)}}class _o extends bo{static id="linear";static defaults={ticks:{callback:ae.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?t:0,this.max=a(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=$(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}const yo=t=>Math.floor(z(t)),vo=(t,e)=>Math.pow(10,yo(t)+e);function Mo(t){return 1===t/Math.pow(10,yo(t))}function wo(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function ko(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=yo(e);let o=function(t,e){let i=yo(e-t);for(;wo(t,e,i)>10;)i++;for(;wo(t,e,i)<10;)i--;return Math.min(i,yo(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const l=Math.pow(10,o),h=n>o?Math.pow(10,n):0,c=Math.round((e-h)*a)/a,d=Math.floor((e-h)/l/10)*l*10;let u=Math.floor((c-d)/Math.pow(10,o)),f=r(t.min,Math.round((h+d+u*Math.pow(10,o))*a)/a);for(;f<i;)s.push({value:f,major:Mo(f),significand:u}),u>=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,a=o>=0?1:a),f=Math.round((h+d+u*Math.pow(10,o))*a)/a;const g=r(t.max,f);return s.push({value:g,major:Mo(g),significand:u}),s}class So extends tn{static id="logarithmic";static defaults={ticks:{callback:ae.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=bo.prototype.parse.apply(this,[t,e]);if(0!==i)return a(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?Math.max(0,t):null,this.max=a(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!a(this._userMin)&&(this.min=t===vo(this.min,0)?vo(this.min,-1):vo(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(vo(i,-1)),o(vo(s,1)))),i<=0&&n(vo(s,-1)),s<=0&&o(vo(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=ko({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=z(t),this._valueRange=z(this.max)-z(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(z(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function Po(t){const e=t.ticks;if(e.display&&t.display){const t=ki(e.backdropPadding);return l(e.font&&e.font.size,ue.font.size)+t.height}return 0}function Do(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:t<s||t>n?{start:e-i,end:e}:{start:e,end:e+i}}function Co(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?C/a:0;for(let u=0;u<a;u++){const a=r.setContext(t.getPointLabelContext(u));o[u]=a.padding;const f=t.getPointPosition(u,t.drawingArea+o[u],l),g=Si(a.font),p=(h=t.ctx,c=g,d=n(d=t._pointLabels[u])?d:[d],{w:Oe(h,c.string,d),h:d.length*c.lineHeight});s[u]=p;const m=G(t.getIndexAngle(u)+l),x=Math.round(Y(m));Oo(i,e,m,Do(x,f.x,p.w,0,180),Do(x,f.y,p.h,90,270))}var h,c,d;t.setCenterPoint(e.l-i.l,i.r-e.r,e.t-i.t,i.b-e.b),t._pointLabelItems=function(t,e,i){const s=[],n=t._pointLabels.length,o=t.options,{centerPointLabels:a,display:r}=o.pointLabels,l={extra:Po(o)/2,additionalAngle:a?C/n:0};let h;for(let o=0;o<n;o++){l.padding=i[o],l.size=e[o];const n=Ao(t,o,l);s.push(n),"auto"===r&&(n.visible=To(n,h),n.visible&&(h=n))}return s}(t,s,o)}function Oo(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos(i));let r=0,l=0;s.start<e.l?(r=(e.l-s.start)/o,t.l=Math.min(t.l,e.l-r)):s.end>e.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.start<e.t?(l=(e.t-n.start)/a,t.t=Math.min(t.t,e.t-l)):n.end>e.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function Ao(t,e,i){const s=t.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=i,l=t.getPointPosition(e,s+n+a,o),h=Math.round(Y(G(l.angle+E))),c=function(t,e,i){90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e);return t}(l.y,r.h,h),d=function(t){if(0===t||180===t)return"center";if(t<180)return"left";return"right"}(h),u=function(t,e,i){"right"===i?t-=e:"center"===i&&(t-=e/2);return t}(l.x,r.w,d);return{visible:!0,x:l.x,y:c,textAlign:d,left:u,top:c,right:u+r.w,bottom:c+r.h}}function To(t,e){if(!e)return!0;const{left:i,top:s,right:n,bottom:o}=t;return!(Re({x:i,y:s},e)||Re({x:i,y:o},e)||Re({x:n,y:s},e)||Re({x:n,y:o},e))}function Lo(t,e,i){const{left:n,top:o,right:a,bottom:r}=i,{backdropColor:l}=e;if(!s(l)){const i=wi(e.borderRadius),s=ki(e.backdropPadding);t.fillStyle=l;const h=n-s.left,c=o-s.top,d=a-n+s.width,u=r-o+s.height;Object.values(i).some((t=>0!==t))?(t.beginPath(),He(t,{x:h,y:c,w:d,h:u,radius:i}),t.fill()):t.fillRect(h,c,d,u)}}function Eo(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;o<s;o++)i=t.getPointPosition(o,e),n.lineTo(i.x,i.y)}}class Ro extends bo{static id="radialLinear";static defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:ae.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=ki(Po(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a(t)&&!isNaN(t)?t:0,this.max=a(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/Po(this.options))}generateTickLabels(t){bo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=d(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?Co(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t<e.length){const i=e[t];return function(t,e,i){return Ci(t,{label:i,index:e,type:"pointLabel"})}(this.getContext(),t,i)}}getPointPosition(t,e,i=0){const s=this.getIndexAngle(t)-E+i;return{x:Math.cos(s)*e+this.xCenter,y:Math.sin(s)*e+this.yCenter,angle:s}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){const{left:e,top:i,right:s,bottom:n}=this._pointLabelItems[t];return{left:e,top:i,right:s,bottom:n}}drawBackground(){const{backgroundColor:t,grid:{circular:e}}=this.options;if(t){const i=this.ctx;i.save(),i.beginPath(),Eo(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),i.closePath(),i.fillStyle=t,i.fill(),i.restore()}}drawGrid(){const t=this.ctx,e=this.options,{angleLines:i,grid:s,border:n}=e,o=this._pointLabels.length;let a,r,l;if(e.pointLabels.display&&function(t,e){const{ctx:i,options:{pointLabels:s}}=t;for(let n=e-1;n>=0;n--){const e=t._pointLabelItems[n];if(!e.visible)continue;const o=s.setContext(t.getPointLabelContext(n));Lo(i,o,e);const a=Si(o.font),{x:r,y:l,textAlign:h}=e;Ne(i,t._pointLabels[n],r,l+a.lineHeight/2,a,{color:o.color,textAlign:h,textBaseline:"middle"})}}(this,o),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e||0===e&&this.min<0){r=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),a=s.setContext(i),l=n.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash||[]),o.lineDashOffset=n.dashOffset,o.beginPath(),Eo(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,a,r,o,l)}})),i.display){for(t.save(),a=o-1;a>=0;a--){const s=i.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,r=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&this.min>=0&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=Si(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=ki(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}Ne(t,s.label,0,-n,l,{color:r.color,strokeColor:r.textStrokeColor,strokeWidth:r.textStrokeWidth})})),t.restore()}drawTitle(){}}const Io={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},zo=Object.keys(Io);function Fo(t,e){return t-e}function Vo(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),a(l)||(l="string"==typeof n?i.parse(l,n):i.parse(l)),null===l?null:(o&&(l="week"!==o||!N(r)&&!0!==r?i.startOf(l,o):i.startOf(l,"isoWeek",r)),+l)}function Bo(t,e,i,s){const n=zo.length;for(let o=zo.indexOf(t);o<n-1;++o){const t=Io[zo[o]],n=t.steps?t.steps:Number.MAX_SAFE_INTEGER;if(t.common&&Math.ceil((i-e)/(n*t.size))<=s)return zo[o]}return zo[n-1]}function Wo(t,e,i){if(i){if(i.length){const{lo:s,hi:n}=et(i,e);t[i[s]>=e?i[s]:i[n]]=!0}}else t[e]=!0}function No(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a<o;++a)r=e[a],n[r]=a,s.push({value:r,major:!1});return 0!==o&&i?function(t,e,i,s){const n=t._adapter,o=+n.startOf(e[0].value,s),a=e[e.length-1].value;let r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=i[r],l>=0&&(e[l].major=!0);return e}(t,s,n,i):s}class Ho extends tn{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new In._date(t.adapters.date);s.init(e),b(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Vo(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:r}=this.getUserBounds();function l(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}o&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=a(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=a(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=nt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?Bo(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=zo.length-1;o>=zo.indexOf(i);o--){const i=zo[o];if(Io[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return zo[i?zo.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=zo.indexOf(t)+1,i=zo.length;e<i;++e)if(Io[zo[e]].common)return zo[e]}(this._unit):void 0,this.initOffsets(s),t.reverse&&o.reverse(),No(this,o,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map((t=>+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=Z(s,0,o),n=Z(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||Bo(n.minUnit,e,i,this._getLabelCapacity(e)),a=l(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=N(r)||!0===r,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;d<i;d=+t.add(d,a,o),u++)Wo(c,d,g);return d!==i&&"ticks"!==s.bounds&&1!==u||Wo(c,d,g),Object.keys(c).sort(Fo).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return d(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],u=i[e],f=l&&c&&u&&u.major;return this._adapter.format(t,s||(f?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e<i;++e)s=t[e],s.label=this._tickFormatFunction(s.value,e,t)}getDecimalForValue(t){return null===t?NaN:(t-this.min)/(this.max-this.min)}getPixelForValue(t){const e=this._offsets,i=this.getDecimalForValue(t);return this.getPixelForDecimal((e.start+i)*e.factor)}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return this.min+i*(this.max-this.min)}_getLabelSize(t){const e=this.options.ticks,i=this.ctx.measureText(t).width,s=$(this.isHorizontal()?e.maxRotation:e.minRotation),n=Math.cos(s),o=Math.sin(s),a=this._resolveTickFontOptions(0).size;return{w:i*n+a*o,h:i*o+a*n}}_getLabelCapacity(t){const e=this.options.time,i=e.displayFormats,s=i[e.unit]||i.millisecond,n=this._tickFormatFunction(t,0,No(this,[t],this._majorUnit),s),o=this._getLabelSize(n),a=Math.floor(this.isHorizontal()?this.width/o.w:this.height/o.h)-1;return a>0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t<e;++t)i=i.concat(s[t].controller.getAllParsedValues(this));return this._cache.data=this.normalize(i)}getLabelTimestamps(){const t=this._cache.labels||[];let e,i;if(t.length)return t;const s=this.getLabels();for(e=0,i=s.length;e<i;++e)t.push(Vo(this,s[e]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return lt(t.sort(Fo))}}function jo(t,e,i){let s,n,o,a,r=0,l=t.length-1;i?(e>=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=it(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=it(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}var $o=Object.freeze({__proto__:null,CategoryScale:class extends tn{static id="category";static defaults={ticks:{callback:mo}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:Z(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:po(i,t,l(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return mo.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:_o,LogarithmicScale:So,RadialLinearScale:Ro,TimeScale:Ho,TimeSeriesScale:class extends Ho{static id="timeseries";static defaults=Ho.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=jo(e,this.min),this._tableRange=jo(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o<a;++o)l=t[o],l>=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o<a;++o)h=s[o+1],r=s[o-1],l=s[o],Math.round((h+r)/2)!==l&&n.push({time:l,pos:o/(a-1)});return n}_generate(){const t=this.min,e=this.max;let i=super.getDataTimestamps();return i.includes(t)&&i.length||i.splice(0,0,t),i.includes(e)&&1!==i.length||i.push(e),i.sort(((t,e)=>t-e))}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(jo(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return jo(this._table,i*this._tableRange+this._minPos,!0)}}});const Yo=["rgb(54, 162, 235)","rgb(255, 99, 132)","rgb(255, 159, 64)","rgb(255, 205, 86)","rgb(75, 192, 192)","rgb(153, 102, 255)","rgb(201, 203, 207)"],Uo=Yo.map((t=>t.replace("rgb(","rgba(").replace(")",", 0.5)")));function Xo(t){return Yo[t%Yo.length]}function qo(t){return Uo[t%Uo.length]}function Ko(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof $n?e=function(t,e){return t.backgroundColor=t.data.map((()=>Xo(e++))),e}(i,e):n instanceof Yn?e=function(t,e){return t.backgroundColor=t.data.map((()=>qo(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Xo(e),t.backgroundColor=qo(e),++e}(i,e))}}function Go(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var Jo={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n,a=Go(s)||(r=n)&&(r.borderColor||r.backgroundColor)||o&&Go(o)||"rgba(0,0,0,0.1)"!==ue.borderColor||"rgba(0,0,0,0.1)"!==ue.backgroundColor;var r;if(!i.forceOverride&&a)return;const l=Ko(t);s.forEach(l)}};function Zo(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function Qo(t){t.data.datasets.forEach((t=>{Zo(t)}))}var ta={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Qo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===Pi([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=Z(it(e,o.axis,a).lo,0,i-1)),s=h?Z(it(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(i.threshold||4*n))return void Zo(e);let f;switch(s(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;c<o-2;c++){let s,n=0,o=0;const h=Math.floor((c+1)*r)+1+e,m=Math.min(Math.floor((c+2)*r)+1,i)+e,x=m-h;for(s=h;s<m;s++)n+=t[s].x,o+=t[s].y;n/=x,o/=x;const b=Math.floor(c*r)+1+e,_=Math.min(Math.floor((c+1)*r)+1,i)+e,{x:y,y:v}=t[p];for(u=f=-1,s=b;s<_;s++)f=.5*Math.abs((y-n)*(t[s].y-v)-(y-t[s].x)*(o-v)),f>u&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,i);break;case"min-max":f=function(t,e,i,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const x=[],b=e+i-1,_=t[e].x,y=t[b].x-_;for(o=e;o<e+i;++o){a=t[o],r=(a.x-_)/y*n,l=a.y;const e=0|r;if(e===h)l<f?(f=l,c=o):l>g&&(g=l,d=o),p=(m*p+a.x)/++m;else{const i=o-1;if(!s(c)&&!s(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&x.push({...t[e],x:p}),s!==u&&s!==i&&x.push({...t[s],x:p})}o>0&&i!==u&&x.push(t[i]),x.push(a),h=e,m=0,f=g=l,c=d=u=o}}return x}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=f}))},destroy(t){Qo(t)}};function ea(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=G(n),o=G(o)),{property:t,start:n,end:o}}function ia(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function sa(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function na(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=ia(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new oo({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function oa(t){return t&&!1!==t.fill}function aa(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!a(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function ra(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=l(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(o(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return a(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function la(t,e,i){const s=[];for(let n=0;n<i.length;n++){const o=i[n],{first:a,last:r,point:l}=ha(o,e,"x");if(!(!l||a&&r))if(a)s.unshift(l);else if(t.push(l),!r)break}t.push(...s)}function ha(t,e,i){const s=t.interpolate(e,i);if(!s)return{};const n=s[i],o=t.segments,a=t.points;let r=!1,l=!1;for(let t=0;t<o.length;t++){const e=o[t],s=a[e.start][i],h=a[e.end][i];if(tt(n,s,h)){r=n===s,l=n===h;break}}return{first:r,last:l,point:s}}class ca{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,end:O},t.arc(s,n,o,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math.cos(n)*s,y:i+Math.sin(n)*s,angle:n}}}function da(t){const{chart:e,fill:i,line:s}=t;if(a(i))return function(t,e){const i=t.getDatasetMeta(e),s=i&&t.isDatasetVisible(e);return s?i.dataset:null}(e,i);if("stack"===i)return function(t){const{scale:e,index:i,line:s}=t,n=[],o=s.segments,a=s.points,r=function(t,e){const i=[],s=t.getMatchingVisibleMetas("line");for(let t=0;t<s.length;t++){const n=s[t];if(n.index===e)break;n.hidden||i.unshift(n.dataset)}return i}(e,i);r.push(na({x:null,y:e.bottom},s));for(let t=0;t<o.length;t++){const e=o[t];for(let t=e.start;t<=e.end;t++)la(n,a[t],r)}return new oo({points:n,options:{}})}(t);if("shape"===i)return!0;const n=function(t){const e=t.scale||{};if(e.getPointPositionForValue)return function(t){const{scale:e,fill:i}=t,s=e.options,n=e.getLabels().length,a=s.reverse?e.max:e.min,r=function(t,e,i){let s;return s="start"===t?i:"end"===t?e.options.reverse?e.min:e.max:o(t)?t.value:e.getBaseValue(),s}(i,e,a),l=[];if(s.grid.circular){const t=e.getPointPositionForValue(0,a);return new ca({x:t.x,y:t.y,radius:e.getDistanceFromCenterForValue(r)})}for(let t=0;t<n;++t)l.push(e.getPointPositionForValue(t,r));return l}(t);return function(t){const{scale:e={},fill:i}=t,s=function(t,e){let i=null;return"start"===t?i=e.bottom:"end"===t?i=e.top:o(t)?i=e.getPixelForValue(t.value):e.getBasePixel&&(i=e.getBasePixel()),i}(i,e);if(a(s)){const t=e.isHorizontal();return{x:t?s:null,y:t?null:s}}return null}(t)}(t);return n instanceof ca?n:na(n,s)}function ua(t,e,i){const s=da(e),{chart:n,index:o,line:a,scale:r,axis:l}=e,h=a.options,c=h.fill,d=h.backgroundColor,{above:u=d,below:f=d}=c||{},g=n.getDatasetMeta(o),p=Ni(n,g);s&&a.points.length&&(Ie(t,i),function(t,e){const{line:i,target:s,above:n,below:o,area:a,scale:r,clip:l}=e,h=i._loop?"angle":e.axis;t.save();let c=o;o!==n&&("x"===h?(fa(t,s,a.top),pa(t,{line:i,target:s,color:n,scale:r,property:h,clip:l}),t.restore(),t.save(),fa(t,s,a.bottom)):"y"===h&&(ga(t,s,a.left),pa(t,{line:i,target:s,color:o,scale:r,property:h,clip:l}),t.restore(),t.save(),ga(t,s,a.right),c=n));pa(t,{line:i,target:s,color:c,scale:r,property:h,clip:l}),t.restore()}(t,{line:a,target:s,above:u,below:f,area:i,scale:r,axis:l,clip:p}),ze(t))}function fa(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPath();for(const r of s){const{start:s,end:l}=r,h=n[s],c=n[ia(s,l,n)];o?(t.moveTo(h.x,h.y),o=!1):(t.lineTo(h.x,i),t.lineTo(h.x,h.y)),a=!!e.pathSegment(t,r,{move:a}),a?t.closePath():t.lineTo(c.x,i)}t.lineTo(e.first().x,i),t.closePath(),t.clip()}function ga(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPath();for(const r of s){const{start:s,end:l}=r,h=n[s],c=n[ia(s,l,n)];o?(t.moveTo(h.x,h.y),o=!1):(t.lineTo(i,h.y),t.lineTo(h.x,h.y)),a=!!e.pathSegment(t,r,{move:a}),a?t.closePath():t.lineTo(i,c.y)}t.lineTo(i,e.first().y),t.closePath(),t.clip()}function pa(t,e){const{line:i,target:s,property:n,color:o,scale:a,clip:r}=e,l=function(t,e,i){const s=t.segments,n=t.points,o=e.points,a=[];for(const t of s){let{start:s,end:r}=t;r=ia(s,r,n);const l=ea(i,n[s],n[r],t.loop);if(!e.segments){a.push({source:t,target:l,start:n[s],end:n[r]});continue}const h=Ii(e,l);for(const e of h){const s=ea(i,o[e.start],o[e.end],e.loop),r=Ri(t,n,s);for(const t of r)a.push({source:t,target:e,start:{[i]:sa(l,s,"start",Math.max)},end:{[i]:sa(l,s,"end",Math.min)}})}}return a}(i,s,n);for(const{source:e,target:h,start:c,end:d}of l){const{style:{backgroundColor:l=o}={}}=e,u=!0!==s;t.save(),t.fillStyle=l,ma(t,a,r,u&&ea(n,c,d)),t.beginPath();const f=!!i.pathSegment(t,e);let g;if(u){f?t.closePath():xa(t,s,d,n);const e=!!s.pathSegment(t,h,{move:f,reverse:!0});g=f&&e,g||xa(t,s,c,n)}t.closePath(),t.fill(g?"evenodd":"nonzero"),t.restore()}}function ma(t,e,i,s){const n=e.chart.chartArea,{property:o,start:a,end:r}=s||{};if("x"===o||"y"===o){let e,s,l,h;"x"===o?(e=a,s=n.top,l=r,h=n.bottom):(e=n.left,s=a,l=n.right,h=r),t.beginPath(),i&&(e=Math.max(e,i.left),l=Math.min(l,i.right),s=Math.max(s,i.top),h=Math.min(h,i.bottom)),t.rect(e,s,l-e,h-s),t.clip()}}function xa(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}var ba={id:"filler",afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let o,a,r,l;for(a=0;a<s;++a)o=t.getDatasetMeta(a),r=o.dataset,l=null,r&&r.options&&r instanceof oo&&(l={visible:t.isDatasetVisible(a),index:a,fill:ra(r,a,s),chart:t,axis:o.controller.options.indexAxis,scale:o.vScale,line:r}),o.$filler=l,n.push(l);for(a=0;a<s;++a)l=n[a],l&&!1!==l.fill&&(l.fill=aa(n,a,i.propagate))},beforeDraw(t,e,i){const s="beforeDraw"===i.drawTime,n=t.getSortedVisibleDatasetMetas(),o=t.chartArea;for(let e=n.length-1;e>=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&ua(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;oa(i)&&ua(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;oa(s)&&"beforeDatasetDraw"===i.drawTime&&ua(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const _a=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class ya extends $s{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=Si(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=_a(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=va(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=Oi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ft(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ft(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Ie(t,this),this._draw(),ze(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ue.color,r=Oi(t.rtl,this.left,this.width),h=Si(o.font),{padding:c}=o,d=h.size,u=d/2;let f;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=_a(o,d),x=this.isHorizontal(),b=this._computeTitleHeight();f=x?{x:ft(n,this.left+c,this.right-i[0]),y:this.top+c+b,line:0}:{x:this.left+c,y:ft(n,this.top+b+c,this.bottom-e[0].height),line:0},Ai(this.ctx,t.textDirection);const _=m+c;this.legendItems.forEach(((y,v)=>{s.strokeStyle=y.fontColor,s.fillStyle=y.fontColor;const M=s.measureText(y.text).width,w=r.textAlign(y.textAlign||(y.textAlign=o.textAlign)),k=g+u+M;let S=f.x,P=f.y;r.setWidth(this.width),x?v>0&&S+k+c>this.right&&(P=f.y+=_,f.line++,S=f.x=ft(n,this.left+c,this.right-i[f.line])):v>0&&P+_>this.bottom&&(S=f.x=S+e[f.line].width+c,f.line++,P=f.y=ft(n,this.top+b+c,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const n=l(i.lineWidth,1);if(s.fillStyle=l(i.fillStyle,a),s.lineCap=l(i.lineCap,"butt"),s.lineDashOffset=l(i.lineDashOffset,0),s.lineJoin=l(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=l(i.strokeStyle,a),s.setLineDash(l(i.lineDash,[])),o.usePointStyle){const a={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,g/2);Ee(s,a,l,e+u,o.pointStyleWidth&&g)}else{const o=e+Math.max((d-p)/2,0),a=r.leftForLtr(t,g),l=wi(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?He(s,{x:a,y:o,w:g,h:p,radius:l}):s.rect(a,o,g,p),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(S),P,y),S=gt(w,S+g+u,x?S+k:this.right,t.rtl),function(t,e,i){Ne(s,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(S),P,y),x)f.x+=k+c;else if("string"!=typeof y.text){const t=h.lineHeight;f.y+=va(y,t)+c}else f.y+=_})),Ti(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=Si(e.font),s=ki(e.padding);if(!e.display)return;const n=Oi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ft(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ft(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ft(a,c,c+d);o.textAlign=n.textAlign(ut(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,Ne(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=Si(t.font),i=ki(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;i<n.length;++i)if(s=n[i],tt(t,s.left,s.left+s.width)&&tt(e,s.top,s.top+s.height))return this.legendItems[i];return null}handleEvent(t){const e=this.options;if(!function(t,e){if(("mousemove"===t||"mouseout"===t)&&(e.onHover||e.onLeave))return!0;if(e.onClick&&("click"===t||"mouseup"===t))return!0;return!1}(t.type,e))return;const i=this._getLegendItemAt(t.x,t.y);if("mousemove"===t.type||"mouseout"===t.type){const o=this._hoveredItem,a=(n=i,null!==(s=o)&&null!==n&&s.datasetIndex===n.datasetIndex&&s.index===n.index);o&&!a&&d(e.onLeave,[t,o,this],this),this._hoveredItem=i,i&&!a&&d(e.onHover,[t,i,this],this)}else i&&d(e.onClick,[t,i,this],this);var s,n}}function va(t,e){return e*(t.text?t.text.length:0)}var Ma={id:"legend",_element:ya,start(t,e,i){const s=t.legend=new ya({ctx:t.ctx,options:i,chart:t});ls.configure(t,s,i),ls.addBox(t,s)},stop(t){ls.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,i){const s=t.legend;ls.configure(t,s,i),s.options=i},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,i){const s=e.datasetIndex,n=i.chart;n.isDatasetVisible(s)?(n.hide(s),e.hidden=!0):(n.show(s),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=ki(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class wa extends $s{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=n(i.text)?i.text.length:1;this._padding=ki(i.padding);const o=s*Si(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ft(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ft(a,s,e),c=-.5*C):(l=n-t,h=ft(a,e,s),c=.5*C),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Si(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);Ne(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ut(e.align),textBaseline:"middle",translation:[n,o]})}}var ka={id:"title",_element:wa,start(t,e,i){!function(t,e){const i=new wa({ctx:t.ctx,options:e,chart:t});ls.configure(t,i,e),ls.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ls.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ls.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Sa=new WeakMap;var Pa={id:"subtitle",start(t,e,i){const s=new wa({ctx:t.ctx,options:i,chart:t});ls.configure(t,s,i),ls.addBox(t,s),Sa.set(t,s)},stop(t){ls.removeBox(t,Sa.get(t)),Sa.delete(t)},beforeUpdate(t,e,i){const s=Sa.get(t);ls.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Da={average(t){if(!t.length)return!1;let e,i,s=new Set,n=0,o=0;for(e=0,i=t.length;e<i;++e){const i=t[e].element;if(i&&i.hasValue()){const t=i.tooltipPosition();s.add(t.x),n+=t.y,++o}}if(0===o||0===s.size)return!1;return{x:[...s].reduce(((t,e)=>t+e))/s.size,y:n/o}},nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,s=t.length;i<s;++i){const s=t[i].element;if(s&&s.hasValue()){const t=q(e,s.getCenterPoint());t<r&&(r=t,n=s)}}if(n){const t=n.tooltipPosition();o=t.x,a=t.y}return{x:o,y:a}}};function Ca(t,e){return e&&(n(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Oa(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Aa(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Ta(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=Si(e.bodyFont),h=Si(e.titleFont),c=Si(e.footerFont),d=o.length,f=n.length,g=s.length,p=ki(e.padding);let m=p.height,x=0,b=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(b+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),b){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(b-g)*l.lineHeight+(b-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){x=Math.max(x,i.measureText(t).width+_)};return i.save(),i.font=h.string,u(t.title,y),i.font=l.string,u(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,u(s,(t=>{u(t.before,y),u(t.lines,y),u(t.after,y)})),_=0,i.font=c.string,u(t.footer,y),i.restore(),x+=p.width,{width:x,height:m}}function La(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Ea(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return i<s/2?"top":i>t.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||La(t,e,i,s),yAlign:s}}function Ra(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=wi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:Z(g,0,s.width-e.width),y:Z(p,0,s.height-e.height)}}function Ia(t,e,i){const s=ki(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function za(t){return Ca([],Oa(t))}function Fa(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Va={beforeTitle:e,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex<s)return i[e.dataIndex]}return""},afterTitle:e,beforeBody:e,beforeLabel:e,label(t){if(this&&this.options&&"dataset"===this.options.mode)return t.label+": "+t.formattedValue||t.formattedValue;let e=t.dataset.label||"";e&&(e+=": ");const i=t.formattedValue;return s(i)||(e+=i),e},labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:e,afterBody:e,beforeFooter:e,footer:e,afterFooter:e};function Ba(t,e,i,s){const n=t[e].call(i,s);return void 0===n?Va[e].call(i,s):n}class Wa extends $s{static positioners=Da;constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,n=new Ts(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(n)),n}getContext(){return this.$context||(this.$context=(t=this.chart.getContext(),e=this,i=this._tooltipItems,Ci(t,{tooltip:e,tooltipItems:i,type:"tooltip"})));var t,e,i}getTitle(t,e){const{callbacks:i}=e,s=Ba(i,"beforeTitle",this,t),n=Ba(i,"title",this,t),o=Ba(i,"afterTitle",this,t);let a=[];return a=Ca(a,Oa(s)),a=Ca(a,Oa(n)),a=Ca(a,Oa(o)),a}getBeforeBody(t,e){return za(Ba(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:i}=e,s=[];return u(t,(t=>{const e={before:[],lines:[],after:[]},n=Fa(i,t);Ca(e.before,Oa(Ba(n,"beforeLabel",this,t))),Ca(e.lines,Ba(n,"label",this,t)),Ca(e.after,Oa(Ba(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return za(Ba(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=Ba(i,"beforeFooter",this,t),n=Ba(i,"footer",this,t),o=Ba(i,"afterFooter",this,t);let a=[];return a=Ca(a,Oa(s)),a=Ca(a,Oa(n)),a=Ca(a,Oa(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;a<r;++a)l.push(Aa(this.chart,e[a]));return t.filter&&(l=l.filter(((e,s,n)=>t.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),u(l,(e=>{const i=Fa(t.callbacks,e);s.push(Ba(i,"labelColor",this,e)),n.push(Ba(i,"labelPointStyle",this,e)),o.push(Ba(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Da[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Ta(this,i),a=Object.assign({},t,e),r=Ea(this.chart,i,a),l=Ra(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=wi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,x,b,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,b=_+o,y=_-o):(p=d+f,m=p+o,b=_-o,y=_+o),x=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(b=u,_=b-o,p=m-o,x=m+o):(b=u+g,_=b+o,p=m+o,x=m-o),y=b),{x1:p,x2:m,x3:x,y1:b,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Oi(i.rtl,this.x,this.width);for(t.x=Ia(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=Si(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r<n;++r)e.fillText(s[r],l.x(t.x),t.y+o.lineHeight/2),t.y+=o.lineHeight+a,r+1===n&&(t.y+=i.titleMarginBottom-a)}}_drawColorBox(t,e,i,s,n){const a=this.labelColors[i],r=this.labelPointStyles[i],{boxHeight:l,boxWidth:h}=n,c=Si(n.bodyFont),d=Ia(this,"left",n),u=s.x(d),f=l<c.lineHeight?(c.lineHeight-l)/2:0,g=e.y+f;if(n.usePointStyle){const e={radius:Math.min(h,l)/2,pointStyle:r.pointStyle,rotation:r.rotation,borderWidth:1},i=s.leftForLtr(u,h)+h/2,o=g+l/2;t.strokeStyle=n.multiKeyBackground,t.fillStyle=n.multiKeyBackground,Le(t,e,i,o),t.strokeStyle=a.borderColor,t.fillStyle=a.backgroundColor,Le(t,e,i,o)}else{t.lineWidth=o(a.borderWidth)?Math.max(...Object.values(a.borderWidth)):a.borderWidth||1,t.strokeStyle=a.borderColor,t.setLineDash(a.borderDash||[]),t.lineDashOffset=a.borderDashOffset||0;const e=s.leftForLtr(u,h),i=s.leftForLtr(s.xPlus(u,1),h-2),r=wi(a.borderRadius);Object.values(r).some((t=>0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,He(t,{x:e,y:g,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),He(t,{x:i,y:g+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,h,l),t.strokeRect(e,g,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,g+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=Si(i.bodyFont);let d=c.lineHeight,f=0;const g=Oi(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let x,b,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Ia(this,m,i),e.fillStyle=i.bodyColor,u(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y<M;++y){for(x=s[y],b=this.labelTextColors[y],e.fillStyle=b,u(x.before,p),_=x.lines,a&&_.length&&(this._drawColorBox(e,t,y,g,i),d=Math.max(c.lineHeight,r)),v=0,w=_.length;v<w;++v)p(_[v]),d=c.lineHeight;u(x.after,p)}f=0,d=c.lineHeight,u(this.afterBody,p),t.y-=n}drawFooter(t,e,i){const s=this.footer,n=s.length;let o,a;if(n){const r=Oi(i.rtl,this.x,this.width);for(t.x=Ia(this,i.footerAlign,i),t.y+=i.footerMarginTop,e.textAlign=r.textAlign(i.footerAlign),e.textBaseline="middle",o=Si(i.footerFont),e.fillStyle=i.footerColor,e.font=o.string,a=0;a<n;++a)e.fillText(s[a],r.x(t.x),t.y+o.lineHeight/2),t.y+=o.lineHeight+i.footerSpacing}}drawBackground(t,e,i,s){const{xAlign:n,yAlign:o}=this,{x:a,y:r}=t,{width:l,height:h}=i,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=wi(s.cornerRadius);e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,e.lineWidth=s.borderWidth,e.beginPath(),e.moveTo(a+c,r),"top"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+l-d,r),e.quadraticCurveTo(a+l,r,a+l,r+d),"center"===o&&"right"===n&&this.drawCaret(t,e,i,s),e.lineTo(a+l,r+h-f),e.quadraticCurveTo(a+l,r+h,a+l-f,r+h),"bottom"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+u,r+h),e.quadraticCurveTo(a,r+h,a,r+h-u),"center"===o&&"left"===n&&this.drawCaret(t,e,i,s),e.lineTo(a,r+c),e.quadraticCurveTo(a,r,a+c,r),e.closePath(),e.fill(),s.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Da[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Ta(this,t),a=Object.assign({},i,this._size),r=Ea(e,t,a),l=Ra(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=ki(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ai(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Ti(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!f(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!f(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e.filter((t=>this.chart.data.datasets[t.datasetIndex]&&void 0!==this.chart.getDatasetMeta(t.datasetIndex).controller.getParsed(t.index)));const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Da[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Na={id:"tooltip",_element:Wa,positioners:Da,afterInit(t,e,i){i&&(t.tooltip=new Wa({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Va},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return Tn.register(Un,$o,go,t),Tn.helpers={...Hi},Tn._adapters=In,Tn.Animation=As,Tn.Animations=Ts,Tn.animator=bt,Tn.controllers=nn.controllers.items,Tn.DatasetController=js,Tn.Element=$s,Tn.elements=go,Tn.Interaction=Ki,Tn.layouts=ls,Tn.platforms=Ds,Tn.Scale=tn,Tn.Ticks=ae,Object.assign(Tn,Un,$o,go,t,Ds),Tn.Chart=Tn,"undefined"!=typeof window&&(window.Chart=Tn),Tn}));
+//# sourceMappingURL=chart.umd.js.map
Index: node_modules/chart.js/dist/chart.umd.js.map
===================================================================
--- node_modules/chart.js/dist/chart.umd.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chart.umd.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"chart.umd.js","sources":["../src/helpers/helpers.core.ts","../src/helpers/helpers.math.ts","../src/helpers/helpers.collection.ts","../src/helpers/helpers.extras.ts","../src/core/core.animator.js","../node_modules/.pnpm/@kurkle+color@0.3.2/node_modules/@kurkle/color/dist/color.esm.js","../src/helpers/helpers.color.ts","../src/core/core.animations.defaults.js","../src/helpers/helpers.intl.ts","../src/core/core.ticks.js","../src/core/core.defaults.js","../src/core/core.layouts.defaults.js","../src/core/core.scale.defaults.js","../src/helpers/helpers.dom.ts","../src/helpers/helpers.canvas.ts","../src/helpers/helpers.config.ts","../src/helpers/helpers.curve.ts","../src/helpers/helpers.easing.ts","../src/helpers/helpers.interpolation.ts","../src/helpers/helpers.options.ts","../src/helpers/helpers.rtl.ts","../src/helpers/helpers.segment.js","../src/helpers/helpers.dataset.ts","../src/core/core.interaction.js","../src/core/core.layouts.js","../src/platform/platform.base.js","../src/platform/platform.basic.js","../src/platform/platform.dom.js","../src/platform/index.js","../src/core/core.animation.js","../src/core/core.animations.js","../src/core/core.datasetController.js","../src/core/core.element.ts","../src/core/core.scale.autoskip.js","../src/core/core.scale.js","../src/core/core.typedRegistry.js","../src/core/core.registry.js","../src/core/core.plugins.js","../src/core/core.config.js","../src/core/core.controller.js","../src/core/core.adapters.ts","../src/controllers/controller.bar.js","../src/controllers/controller.doughnut.js","../src/controllers/controller.polarArea.js","../src/controllers/controller.bubble.js","../src/controllers/controller.line.js","../src/controllers/controller.pie.js","../src/controllers/controller.radar.js","../src/controllers/controller.scatter.js","../src/elements/element.arc.ts","../src/elements/element.line.js","../src/elements/element.point.ts","../src/elements/element.bar.js","../src/scales/scale.category.js","../src/scales/scale.linearbase.js","../src/scales/scale.linear.js","../src/scales/scale.logarithmic.js","../src/scales/scale.radialLinear.js","../src/scales/scale.time.js","../src/scales/scale.timeseries.js","../src/plugins/plugin.colors.ts","../src/plugins/plugin.decimation.js","../src/plugins/plugin.filler/filler.segment.js","../src/plugins/plugin.filler/filler.helper.js","../src/plugins/plugin.filler/filler.options.js","../src/plugins/plugin.filler/filler.target.stack.js","../src/plugins/plugin.filler/simpleArc.js","../src/plugins/plugin.filler/filler.target.js","../src/plugins/plugin.filler/filler.drawing.js","../src/plugins/plugin.filler/index.js","../src/plugins/plugin.legend.js","../src/plugins/plugin.title.js","../src/plugins/plugin.subtitle.js","../src/plugins/plugin.tooltip.js","../src/index.umd.ts"],"sourcesContent":["/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n  /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n  let id = 0;\n  return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n  return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n  isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n  fn: T | undefined,\n  args: unknown[],\n  thisArg?: TA\n): R | undefined {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n  loopable: Record<string, T>,\n  fn: (this: TA, v: T, i: string) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[],\n  fn: (this: TA, v: T, i: number) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[] | Record<string, T>,\n  fn: (this: TA, v: T, i: any) => void,\n  thisArg?: TA,\n  reverse?: boolean\n) {\n  let i: number, len: number, keys: string[];\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n  let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n  if (isArray(source)) {\n    return source.map(clone) as unknown as T;\n  }\n\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone(source[keys[k]]);\n    }\n\n    return target;\n  }\n\n  return source;\n}\n\nfunction isValidKey(key: string) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone(sval);\n  }\n}\n\nexport interface MergeOptions {\n  merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n  target: T,\n  source: [S1, S2, S3, S4],\n  options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target as AnyObject;\n  }\n\n  options = options || {};\n  const merger = options.merger || _merger;\n  let current: AnyObject;\n\n  for (let i = 0; i < ilen; ++i) {\n    current = sources[i];\n    if (!isObject(current)) {\n      continue;\n    }\n\n    const keys = Object.keys(current);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options as AnyObject);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone(sval);\n  }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n      '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': v => v,\n  // default resolvers\n  x: o => o.x,\n  y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n  const parts = key.split('.');\n  const keys: string[] = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        // For backward compatibility:\n        // Chart.helpers.core resolveObjectKey should break at empty key\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n  return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n  const result: number[] = [];\n  const sqrt = Math.sqrt(value);\n  let i: number;\n\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) { // if value is a square number\n    result.push(sqrt);\n  }\n\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n  return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n  return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n  array: Record<string, number>[],\n  target: { min: number, max: number },\n  property: string\n) {\n  let i: number, ilen: number, value: number;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nexport function toRadians(degrees: number) {\n  return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n  return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n  if (!isFiniteNumber(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n  centrePoint: Point,\n  anglePoint: Point\n) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n  if (angle < (-0.5 * PI)) {\n    angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n  }\n\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n  return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n  return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n  return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n  table: number[],\n  value: number,\n  cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n  table: T[],\n  value: number,\n  cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n  table: unknown[],\n  value: number,\n  cmp?: (value: number) => boolean\n) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid: number;\n\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number,\n  last?: boolean\n) =>\n  _lookup(table, value, last\n    ? index => {\n      const ti = table[index][key];\n      return ti < value || ti === value && table[index + 1][key] === value;\n    }\n    : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number\n) =>\n  _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n  let start = 0;\n  let end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n  _onDataPush?(...item: T[]): void;\n  _onDataPop?(): void;\n  _onDataShift?(): void;\n  _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n  _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n\n  delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n  const set = new Set<T>(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n  fn: (...args: TArgs) => void,\n  thisArg: any,\n) {\n  let argsToUse = [] as TArgs;\n  let ticking = false;\n\n  return function(...args: TArgs) {\n    // Save the args for use later\n    argsToUse = args;\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n  let timeout;\n  return function(...args: TArgs) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count = pointCount;\n\n  if (meta._sorted) {\n    const {iScale, vScale, _parsed} = meta;\n    const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n    if (minDefined) {\n      start = Math.min(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, axis, min).lo,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n      if (spanGaps) {\n        const distanceToDefinedLo = (_parsed\n          .slice(0, start + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        start -= Math.max(0, distanceToDefinedLo);\n      }\n      start = _limitValue(start, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n      let end = Math.max(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n      if (spanGaps) {\n        const distanceToDefinedHi = (_parsed\n          .slice(end - 1)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        end += Math.max(0, distanceToDefinedHi);\n      }\n      count = _limitValue(end, start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n","import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n\n  /**\n\t * @private\n\t */\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _update(date = Date.now()) {\n    let remaining = 0;\n\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n\n      for (; i >= 0; --i) {\n        item = items[i];\n\n        if (item._active) {\n          if (item._total > anims.duration) {\n            // if the animation has been updated and its duration prolonged,\n            // update to total duration of current animations run (for progress event)\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          // Remove the item by replacing it with last item and removing the last\n          // A lot faster than splice.\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n\n      remaining += items.length;\n    });\n\n    this._lastDate = date;\n\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n\n  /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n\n  /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n\n  /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n\n  /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n  value:\n  | string\n  | { r: number; g: number; b: number; a: number }\n  | [number, number, number]\n  | [number, number, number, number]\n): Color;\nexport function color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n  defaults.set('animation', {\n    delay: undefined,\n    duration: 1000,\n    easing: 'easeOutQuart',\n    fn: undefined,\n    from: undefined,\n    loop: undefined,\n    to: undefined,\n    type: undefined,\n  });\n\n  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n  });\n\n  defaults.set('animations', {\n    colors: {\n      type: 'color',\n      properties: colors\n    },\n    numbers: {\n      type: 'number',\n      properties: numbers\n    },\n  });\n\n  defaults.describe('animations', {\n    _fallback: 'animation',\n  });\n\n  defaults.set('transitions', {\n    active: {\n      animation: {\n        duration: 400\n      }\n    },\n    resize: {\n      animation: {\n        duration: 0\n      }\n    },\n    show: {\n      animations: {\n        colors: {\n          from: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          duration: 0 // show immediately\n        },\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n        },\n      }\n    }\n  });\n}\n","\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n  return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n  /**\n   * Formatter for value labels\n   * @method Chart.Ticks.formatters.values\n   * @param value the value to display\n   * @return {string|string[]} the label to display\n   */\n  values(value) {\n    return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n  },\n\n  /**\n   * Formatter for numeric ticks\n   * @method Chart.Ticks.formatters.numeric\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0'; // never show decimal places for 0\n    }\n\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n    if (ticks.length > 1) {\n      // all ticks are small or there huge numbers; use scientific notation\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    const logDelta = log10(Math.abs(delta));\n\n    // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n    // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n    // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n    //\n    // toFixed has a max of 20 decimal places\n    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n\n    return formatNumber(tickValue, locale, options);\n  },\n\n\n  /**\n   * Formatter for logarithmic ticks\n   * @method Chart.Ticks.formatters.logarithmic\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n    if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n  // Figure out how many digits to show\n  // The space between the first two ticks might be smaller than normal spacing\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    // not an integer\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\n\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope(root, scope), values);\n  }\n  return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n  constructor(_descriptors, _appliers) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n\n    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n\n  /**\n\t * @param {string} scope\n\t */\n  get(scope) {\n    return getScope(this, scope);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n\n  /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t *   - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope(this, scope);\n    const targetScopeObject = getScope(this, targetScope);\n    const privateName = '_' + name;\n\n    Object.defineProperties(scopeObject, {\n      // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n\n  apply(appliers) {\n    appliers.forEach((apply) => apply(this));\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","export function applyLayoutsDefaults(defaults) {\n  defaults.set('layout', {\n    autoPadding: true,\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n}\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 3.0.0\n     */\n    bounds: 'ticks',\n\n    clip: true,\n\n    /**\n     * Addition grace added to max and reduced from min data value.\n     * @since 3.0.0\n     */\n    grace: 0,\n\n    // grid line settings\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: (_ctx, options) => options.lineWidth,\n      tickColor: (_ctx, options) => options.color,\n      offset: false,\n    },\n\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n\n    // scale title\n    title: {\n      // display property\n      display: false,\n\n      // actual label\n      text: '',\n\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n\n    // label settings\n    ticks: {\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      textStrokeWidth: 0,\n      textStrokeColor: '',\n      padding: 3,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 3,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2,\n    }\n  });\n\n  defaults.route('scale.ticks', 'color', '', 'color');\n  defaults.route('scale.grid', 'color', '', 'borderColor');\n  defaults.route('scale.border', 'color', '', 'borderColor');\n  defaults.route('scale.title', 'color', '', 'color');\n\n  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n    _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n  });\n\n  defaults.describe('scales', {\n    _fallback: 'scale',\n  });\n\n  defaults.describe('scale.ticks', {\n    _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n    _indexable: (name) => name !== 'backdropPadding',\n  });\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = (parent as ShadowRoot).host;\n  }\n  return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n  let valueInPixels: number;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n\n    if (styleValue.indexOf('%') !== -1) {\n      // percentage * size in dimension\n      valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n\n  return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n  element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n  const result = {} as ChartArea;\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n  (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n  e: Event | TouchEvent | MouseEvent,\n  canvas: HTMLCanvasElement\n): {\n    x: number;\n    y: number;\n    box: boolean;\n  } {\n  const touches = (e as TouchEvent).touches;\n  const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n  const {offsetX, offsetY} = source as MouseEvent;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n  event: Event | ChartEvent | TouchEvent | MouseEvent,\n  chart: Chart | PrivateChart\n): { x: number; y: number } {\n  if ('native' in event) {\n    return event;\n  }\n\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(event, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n  let maxWidth: number, maxHeight: number;\n\n  if (width === undefined || height === undefined) {\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect(); // this is the border box of the container\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n  canvas: HTMLCanvasElement,\n  bbWidth?: number,\n  bbHeight?: number,\n  aspectRatio?: number\n): { width: number; height: number } {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    // https://github.com/chartjs/Chart.js/issues/4659\n    // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n    height = round1(width / 2);\n  }\n\n  const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n    height = containerSize.height;\n    width = round1(Math.floor(height * aspectRatio));\n  }\n\n  return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n  chart: Chart | PrivateChart,\n  forceRatio: number,\n  forceStyle?: boolean\n): boolean | void {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n  (chart as PrivateChart).height = Math.floor(chart.height);\n  (chart as PrivateChart).width = Math.floor(chart.width);\n\n  const canvas = chart.canvas;\n\n  // If no style has been set on the canvas, the render size is used as display size,\n  // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n  // See https://github.com/chartjs/Chart.js/issues/3575\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() { // This function will be called when the browser attempts to access the passive property.\n        passiveSupported = true;\n        return false;\n      }\n    } as EventListenerOptions;\n\n    if (_isDomSupported()) {\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    }\n  } catch (e) {\n    // continue regardless of error\n  }\n  return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n  element: HTMLElement,\n  property: 'width' | 'height'\n): number | undefined {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n","import type {\n  Chart,\n  Point,\n  FontSpec,\n  CanvasFontSpec,\n  PointStyle,\n  RenderTextOpts,\n  BackdropOptions\n} from '../types/index.js';\nimport type {\n  TRBL,\n  SplinePoint,\n  RoundedRect,\n  TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n  ctx: CanvasRenderingContext2D,\n  data: Record<string, number>,\n  gc: string[],\n  longest: number,\n  string: string\n) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n  ctx: CanvasRenderingContext2D,\n  font: string,\n  arrayOfThings: Things,\n  cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n\n  ctx.save();\n\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n\n    // Undefined strings and arrays should not be measured\n    if (thing !== undefined && thing !== null && !isArray(thing)) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      // if it is an array lets measure each element\n      // to do maybe simplify this function a bit so we can do this more recursively?\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        // Undefined strings and arrays should not be measured\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n\n  ctx.restore();\n\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n  if (!ctx && !canvas) {\n    return;\n  }\n\n  ctx = ctx || canvas.getContext('2d');\n\n  ctx.save();\n  // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nexport interface DrawPointOptions {\n  pointStyle: PointStyle;\n  rotation?: number;\n  radius: number;\n  borderWidth: number;\n}\n\nexport function drawPoint(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number\n) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number,\n  w: number\n) {\n  let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n\n  ctx.beginPath();\n\n  switch (style) {\n  // Default includes circle\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      width = w ? w / 2 : radius;\n      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n    // NOTE: the rounded rect implementation changed to use `arc` instead of\n    // `quadraticCurveTo` since it generates better results when rect is\n    // almost a circle. 0.516 (instead of 0.5) produces results with visually\n    // closer proportion to the previous impl and it is inscribed in the\n    // circle with `radius`. For more details, see the following PRs:\n    // https://github.com/chartjs/Chart.js/issues/5597\n    // https://github.com/chartjs/Chart.js/issues/5858\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'rectRot':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'cross':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'star':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      rad += QUARTER_PI;\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n      break;\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n  point: Point,\n  area: TRBL,\n  margin?: number\n) {\n  margin = margin || 0.5; // margin - default is to match rounded decimals\n\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n  ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n  ctx: CanvasRenderingContext2D,\n  previous: Point,\n  target: Point,\n  flip?: boolean,\n  mode?: string\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n  ctx: CanvasRenderingContext2D,\n  previous: SplinePoint,\n  target: SplinePoint,\n  flip?: boolean\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\n\nfunction decorateText(\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  line: string,\n  opts: RenderTextOpts\n) {\n  if (opts.strikethrough || opts.underline) {\n    /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n  const oldColor = ctx.fillStyle;\n\n  ctx.fillStyle = opts.color as string;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n  ctx: CanvasRenderingContext2D,\n  text: string | string[],\n  x: number,\n  y: number,\n  font: CanvasFontSpec,\n  opts: RenderTextOpts = {}\n) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i: number, line: string;\n\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n\n    if (opts.backdrop) {\n      drawBackdrop(ctx, opts.backdrop);\n    }\n\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n\n    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n  ctx: CanvasRenderingContext2D,\n  rect: RoundedRect & { radius: TRBLCorners }\n) {\n  const {x, y, w, h, radius} = rect;\n\n  // top left arc\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n  // line from top left to bottom left\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n\n  // bottom left arc\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n  // line from bottom left to bottom right\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n  // bottom right arc\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n  // line from bottom right to top right\n  ctx.lineTo(x + w, y + radius.topRight);\n\n  // top right arc\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n  // line from top right to top left\n  ctx.lineTo(x + radius.topLeft, y);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n  ResolverObjectKey,\n  ResolverCache,\n  ResolverProxy,\n  DescriptorDefaults,\n  Descriptor,\n  ContextCache,\n  ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  scopes: T,\n  prefixes = [''],\n  rootScopes?: R,\n  fallback?: ResolverObjectKey,\n  getTarget = () => scopes[0]\n) {\n  const finalRootScopes = rootScopes || scopes;\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache: ResolverCache<T, R> = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: finalRootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop: string) {\n      delete target[prop]; // remove from cache\n      delete target._keys; // remove cached keys\n      delete scopes[0][prop]; // remove from top level scope\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop: string) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop: string, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n      delete target._keys; // remove cached keys\n      return true;\n    }\n  }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  proxy: ResolverProxy<T, R>,\n  context: AnyObject,\n  subProxy?: ResolverProxy<T, R>,\n  descriptorDefaults?: DescriptorDefaults\n) {\n  const cache: ContextCache<T, R> = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n      delete proxy[prop]; // remove from proxy\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n      delete target[prop]; // remove from cache\n      return true;\n    }\n  }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n  proxy: ResolverCache,\n  defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n  target: AnyObject,\n  prop: string,\n  resolve: () => unknown\n) {\n  if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n    return target[prop];\n  }\n\n  const value = resolve();\n  // cache the resolved value\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(\n  target: ContextCache,\n  prop: string,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop]; // resolve from proxy\n\n  // resolve with context\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    // if the resolved value is an object, create a sub resolver for it\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\n\nfunction _resolveScriptable(\n  prop: string,\n  getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n  target: ContextCache,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  let value = getValue(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    // When scriptable option returns an object, create a resolver on that.\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\n\nfunction _resolveArray(\n  prop: string,\n  value: unknown[],\n  target: ContextCache,\n  isIndexable: (key: string) => boolean\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n  if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n    return value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    // Array of objects, return array or resolvers\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\n\nfunction resolveFallback(\n  fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n  set: Set<AnyObject>,\n  parentScopes: AnyObject[],\n  key: ResolverObjectKey,\n  parentFallback: ResolverObjectKey,\n  value: unknown\n) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n        // When we reach the descriptor that defines a new _fallback, return that.\n        // The fallback will resume to that new scope.\n        return fallback;\n      }\n    } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n      // Fallback to `false` results to `false`, when falling back to different key.\n      // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n      return null;\n    }\n  }\n  return false;\n}\n\nfunction createSubResolver(\n  parentScopes: AnyObject[],\n  resolver: ResolverCache,\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set<AnyObject>();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n  set: Set<AnyObject>,\n  allScopes: AnyObject[],\n  key: ResolverObjectKey,\n  fallback: ResolverObjectKey,\n  item: unknown\n) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\n\nfunction subGetTarget(\n  resolver: ResolverCache,\n  prop: string,\n  value: unknown\n) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(\n  prop: string,\n  prefixes: string[],\n  scopes: AnyObject[],\n  proxy: ResolverProxy\n) {\n  let value: unknown;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (typeof value !== 'undefined') {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (typeof value !== 'undefined') {\n      return value;\n    }\n  }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n  const set = new Set<string>();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n  meta: ChartMeta<'line' | 'scatter'>,\n  data: AnyObject[],\n  start: number,\n  count: number\n) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array<{r: unknown}>(count);\n  let i: number, ilen: number, index: number, item: AnyObject;\n\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n  firstPoint: SplinePoint,\n  middlePoint: SplinePoint,\n  afterPoint: SplinePoint,\n  t: number\n): {\n    previous: SplinePoint\n    next: SplinePoint\n  } {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n  // This function must also respect \"skipped\" points\n\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n\n  // If all points are the same, s01 & s02 will be inf\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n\n  const fa = t * s01; // scaling factor for triangle Ta\n  const fb = t * s12;\n\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n  const pointsLen = points.length;\n\n  let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK: number[] = Array(pointsLen).fill(0);\n  const mK: number[] = Array(pointsLen);\n\n  // Calculate slopes (deltaK) and initialize tangents (mK)\n  let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n      // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n        : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n          : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n  points: SplinePoint[],\n  options,\n  area: ChartArea,\n  loop: boolean,\n  indexAxis: 'x' | 'y'\n) {\n  let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n  // Only consider points that are drawn in case the spanGaps option is used\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n  linear: (t: number) => t,\n\n  easeInQuad: (t: number) => t * t,\n\n  easeOutQuad: (t: number) => -t * (t - 2),\n\n  easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n\n  easeInCubic: (t: number) => t * t * t,\n\n  easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n  easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n\n  easeInQuart: (t: number) => t * t * t * t,\n\n  easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n  easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n\n  easeInQuint: (t: number) => t * t * t * t * t,\n\n  easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n  easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n  easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n  easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n  easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n  easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n  easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n  easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n  easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n  easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n  easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n  easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n  easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n  easeInOutElastic(t: number) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n\n  easeInBack(t: number) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n\n  easeOutBack(t: number) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n\n  easeInOutBack(t: number) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n\n  easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n  easeOutBounce(t: number) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n\n  easeInOutBounce: (t: number) => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n  p1: Point,\n  p2: Point,\n  t: number, mode: 'middle' | 'after' | unknown\n) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n      : mode === 'after' ? t < 1 ? p1.y : p2.y\n        : t > 0 ? p2.y : p1.y\n  };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n\n  value = +matches[2];\n\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n    default:\n      break;\n  }\n\n  return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n  const obj = toTRBL(value) as ChartArea;\n\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n\n  return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n  options = options || {};\n  fallback = fallback || defaults.font as FontSpec;\n\n  let size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n\n  font.string = toFontString(font);\n  return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n  let cacheable = true;\n  let i: number, ilen: number, value: unknown;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n  return Object.assign(Object.create(parentContext), context);\n}\n","export interface RTLAdapter {\n  x(x: number): number;\n  setWidth(w: number): void;\n  textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n  xPlus(x: number, value: number): number;\n  leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) { // eslint-disable-line no-unused-vars\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      return x;\n    },\n  };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n  let style: CSSStyleDeclaration, original: [string, string];\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n\n    style.setProperty('direction', direction, 'important');\n    (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n  }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n  if (original !== undefined) {\n    delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  // eslint-disable-next-line prefer-const\n  let {start, end, loop} = segment;\n  let i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n\n    if (point.skip) {\n      continue;\n    }\n\n    value = normalize(point[property]);\n\n    if (value === prevValue) {\n      continue;\n    }\n\n    inside = between(value, startBound, endBound);\n\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n\n  return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n\n  if (loop && !spanGaps) {\n    // loop and not spanning gaps, first find a gap to start from\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  // find first non skipped point (after the first gap possibly)\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  // if we looped to count, start needs to be 0\n  start %= count;\n\n  if (loop) {\n    // loop will go past count, if start > 0\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  // end could be more than count, normalize\n  end %= count;\n\n  return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        // @ts-ignore\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n\n  return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    // Style can not start/end on a skipped point, adjust indices accordingly\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n\n  return result;\n}\n\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\n\nfunction styleChanged(style, prevStyle) {\n  if (!prevStyle) {\n    return false;\n  }\n  const cache = [];\n  const replacer = function(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n    return cache.indexOf(value);\n  };\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n  return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n  const {xScale, yScale} = meta;\n  if (xScale && yScale) {\n    return {\n      left: getSizeForArea(xScale, chartArea, 'left'),\n      right: getSizeForArea(xScale, chartArea, 'right'),\n      top: getSizeForArea(yScale, chartArea, 'top'),\n      bottom: getSizeForArea(yScale, chartArea, 'bottom')\n    };\n  }\n  return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n  const clip = meta._clip;\n  if (clip.disabled) {\n    return false;\n  }\n  const area = getDatasetArea(meta, chart.chartArea);\n\n  return {\n    left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n    right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n    top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n    bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n  };\n}\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      const result = lookupMethod(data, axis, value);\n      if (spanGaps) {\n        const {vScale} = controller._cachedMeta;\n        const {_parsed} = metaset;\n\n        const distanceToDefinedLo = (_parsed\n          .slice(0, result.lo + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.lo -= Math.max(0, distanceToDefinedLo);\n\n        const distanceToDefinedHi = (_parsed\n          .slice(result.hi)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.hi += Math.max(0, distanceToDefinedHi);\n      }\n      return result;\n    } else if (controller._sharedOptions) {\n      // _sharedOptions indicates that each element has equal options -> equal proportions\n      // So we can do a ranged binary search based on the range of first element and\n      // be confident to get the full range of indices that can intersect with the value.\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  // Default to all elements, when binary search can not be used.\n  return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      // Can have multiple items at the same distance in which case we sort by size\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  // If we want to trigger on an intersect and we don't have any items\n  // that intersect the position, return nothing\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n  // Part of the public API to facilitate developers creating their own modes\n  evaluateInteractionItems,\n\n  // Helper function for different modes\n  modes: {\n    /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      // Default axis for index mode is 'x' to match old behaviour\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n\n        // don't count items that are skipped (null data)\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n\n      return elements;\n    },\n\n    /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n\n      return items;\n    },\n\n    /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n\n    /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n\n  // dynamically placed boxes size is not considered\n  if (!isObject(pos)) {\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n\n  // return booleans on the changes per direction\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n    // Dimensions changed and there were non full width boxes before this\n    // -> we have to refit those\n    refit |= same && refitBoxes.length;\n\n    // Chart area changed in the opposite direction\n    changed = changed || other;\n\n    if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n      refitBoxes.push(layout);\n    }\n  }\n\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] -  Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n  /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    // initialize item with default values\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    // @ts-ignore\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n\n  /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n\n  /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n\n  /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n   * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n\n    // Before any changes are made, notify boxes that an update is about to being\n    // This is used to clear any cached data (e.g. scale limits)\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n\n    // Essentially we now have any number of boxes on each of the 4 sides.\n    // Our canvas looks like the following.\n    // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n    // B1 is the bottom axis\n    // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n    // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n    // an error will be thrown.\n    //\n    // |----------------------------------------------------|\n    // |                  T1 (Full Width)                   |\n    // |----------------------------------------------------|\n    // |    |    |                 T2                  |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    | C1 |                           | C2 |    |\n    // |    |    |----|                           |----|    |\n    // |    |    |                                     |    |\n    // | L1 | L2 |           ChartArea (C0)            | R1 |\n    // |    |    |                                     |    |\n    // |    |    |----|                           |----|    |\n    // |    |    | C3 |                           | C4 |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    |                 B1                  |    |\n    // |----------------------------------------------------|\n    // |                  B2 (Full Width)                   |\n    // |----------------------------------------------------|\n    //\n\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n    // First fit the fullSize boxes, to reduce probability of re-fitting.\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n    // Then fit vertical boxes\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    // Then fit horizontal boxes\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      // if the area changed, re-fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n\n    // Finally place the boxes to correct coordinates\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n    // Move to opposite side of chart\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n\n    // Finally update boxes in chartArea (radial scale for example)\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n  /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n  acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n  releaseContext(context) { // eslint-disable-line no-unused-vars\n    return false;\n  }\n\n  /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n  addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n  removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n  getDevicePixelRatio() {\n    return 1;\n  }\n\n  /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n  isAttached(canvas) { // eslint-disable-line no-unused-vars\n    return true;\n  }\n\n  /**\n   * Updates config with platform specific requirements\n   * @param {import('../core/core.config.js').default} config\n   */\n  updateConfig(config) { // eslint-disable-line no-unused-vars\n    // no-op\n  }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n\n  // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n  // returns null or '' if no explicit value has been set to the canvas attribute.\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n\n  // Chart.js modifies some canvas values that we want to restore on destroy\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n\n  // Force canvas to display as block to avoid extra space caused by inline\n  // elements, which would interfere with the responsive resize process.\n  // https://github.com/chartjs/Chart.js/issues/2538\n  style.display = style.display || 'block';\n  // Include possible borders in the size\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      // If no explicit render height and style height, let's apply the aspect ratio,\n      // which one can be specified by the user but also by charts as default option\n      // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n  if (node) {\n    node.addEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction removeListener(chart, type, listener) {\n  if (chart && chart.canvas) {\n    chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      // If the container size shrank during chart resize, let's assume\n      // scrollbar appeared. So we resize again with the scrollbar visible -\n      // effectively making chart smaller and the scrollbar hidden again.\n      // Because we are inside `throttled`, and currently `ticking`, scroll\n      // events are ignored during this whole 2 resize process.\n      // If we assumed wrong and something else happened, we are resizing\n      // twice in a frame (potential performance issue)\n      listener();\n    }\n  }, window);\n\n  // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    // When its container's display is set to 'none' the callback will be called with a\n    // size of (0, 0), which will cause the chart to lose its original height, so skip\n    // resizing in such case.\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    // This case can occur if the chart is destroyed while waiting\n    // for the throttled function to occur. We prevent crashes by checking\n    // for a destroyed chart\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n\n  addListener(canvas, type, proxy);\n\n  return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n  acquireContext(canvas, aspectRatio) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n    // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n    // inside an iframe or when running in a protected environment. We could guess the\n    // types from their toString() value but let's keep things flexible and assume it's\n    // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n    // https://github.com/chartjs/Chart.js/issues/3887\n    // https://github.com/chartjs/Chart.js/issues/4102\n    // https://github.com/chartjs/Chart.js/issues/4152\n    if (context && context.canvas === canvas) {\n      // Load platform resources on first chart creation, to make it possible to\n      // import the library before setting platform options.\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n\n    return null;\n  }\n\n  /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n\n    // The canvas render size might have been changed (and thus the state stack discarded),\n    // we can't use save() and restore() to restore the initial state. So make sure that at\n    // least the canvas context is reset to the default state by setting the canvas width.\n    // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n    // eslint-disable-next-line no-self-assign\n    canvas.width = canvas.width;\n\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n\n  /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n  addEventListener(chart, type, listener) {\n    // Can have only one listener per type, so make sure previous is removed\n    this.removeEventListener(chart, type);\n\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n\n    if (!proxy) {\n      return;\n    }\n\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n  isAttached(canvas) {\n    const container = canvas && _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  /**\n   * @param {string} from\n   * @param {string} to\n   * @param {number} factor\n   */\n  color(from, to, factor) {\n    const c0 = helpersColor(from || transparent);\n    const c1 = c0.valid && helpersColor(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nexport default class Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n\n  active() {\n    return this._active;\n  }\n\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n\n  cancel() {\n    if (this._active) {\n      // update current evaluated value, for smoother animations\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n\n    this._active = from !== to && (loop || (elapsed < duration));\n\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n    this._target[prop] = this._fn(from, to, factor);\n  }\n\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n\n    const animationOptions = Object.keys(defaults.animation);\n    const animatedProps = this._properties;\n\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n\n  /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      // Going to shared options:\n      // After all animations are done, assign the shared options object to the element\n      // So any new updates to the shared options are observed\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n        // rejected, noop\n      });\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @private\n\t */\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n\n      if (animation) {\n        if (cfg && animation.active()) {\n          // There is an existing active animation, let's update that\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        // not animated, set directly to new value\n        target[prop] = value;\n        continue;\n      }\n\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n\n\n  /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n  update(target, values) {\n    if (this._properties.size === 0) {\n      // Nothing is animated, just apply the new values.\n      Object.assign(target, values);\n      return;\n    }\n\n    const animations = this._createAnimations(target, values);\n\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\n\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  // @ts-ignore\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    // Going from shared options to distinct one:\n    // Create new options object containing the old shared values and start updating that.\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\n\nfunction toClip(value) {\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  let found = false;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      found = true;\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n\n  if (!found && !options.all) {\n    return 0;\n  }\n\n  return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n  const {iScale, vScale} = meta;\n  const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n  const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      [iAxisKey]: key,\n      [vAxisKey]: data[key]\n    };\n  }\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n    const visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\n\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  // Not using meta.index here, because it might be already updated if the dataset changed location\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n    if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n      delete stacks[axis]._visualValues[datasetIndex];\n    }\n  }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n  /**\n   * @type {any}\n   */\n  static defaults = {};\n\n  /**\n   * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n   */\n  static datasetElementType = null;\n\n  /**\n   * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n   */\n  static dataElementType = null;\n\n  /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    /** @type {boolean | object} */\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.datasetElementType = new.target.datasetElementType;\n    this.dataElementType = new.target.dataElementType;\n\n    this.initialize();\n  }\n\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n\n    if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n      console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n    }\n  }\n\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n\n  /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n\n  /**\n\t * @private\n\t */\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n\n  reset() {\n    this._update('reset');\n  }\n\n  /**\n\t * @private\n\t */\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n\n    // In order to correctly handle data addition/deletion animation (and thus simulate\n    // real-time charts), we need to monitor these data modifications and synchronize\n    // the internal metadata accordingly.\n\n    if (isObject(data)) {\n      const meta = this._cachedMeta;\n      this._data = convertObjectDataToArray(data, meta);\n    } else if (_data !== data) {\n      if (_data) {\n        // This case happens when the user replaced the data array instance.\n        unlistenArrayEvents(_data, this);\n        // Discard old parsed data and stacks\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n\n  addElements() {\n    const meta = this._cachedMeta;\n\n    this._dataCheck();\n\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n\n    this._dataCheck();\n\n    // make sure cached _stacked status is current\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n\n    // detect change in stack option\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      // remove values from old stack\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n\n    // Re-sync meta data in case the user replaced the data array or if we missed\n    // any updates and so make sure that we handle number of datapoints changing.\n    this._resyncElements(resetNewElements);\n\n    // if stack changed, update stack values for the whole dataset\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n      meta._stacked = isStacked(meta.vScale, meta);\n    }\n  }\n\n  /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n\n  /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]._visualValues\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        // if the data is sorted, we don't need to check further from this end of array\n        break;\n      }\n    }\n    if (sorted) {\n      // in the sorted case, find first non-skipped value from other end of array\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return false;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {} // eslint-disable-line no-unused-vars\n\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n\n  /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n\n  /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    // context is provided as a function, and is called only if needed,\n    // so we don't create a context for each element if not needed.\n    const context = () => this.getContext(index, active, mode);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n    if (values.$shared) {\n      // `$shared` indicates this set of options can be shared between multiple elements.\n      // Sharing is used to reduce number of properties to change during animation.\n      values.$shared = sharing;\n\n      // We cache options by `mode`, which can be 'active' for example. This enables us\n      // to have the 'active' element options and 'default' options to switch between\n      // when interacting.\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n\n    return values;\n  }\n\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n\n  /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n\n  /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n\n  /**\n   * @todo v4, rename to getSharedOptions and remove excess functions\n   */\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n\n  /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n\n  /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      // When going from active to inactive, we need to update to the shared options.\n      // This way the once hovered element will end up with the same original shared options instance, after animation.\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n\n  /**\n\t * @private\n\t */\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n\n    // Apply changes detected through array listeners\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n\n    if (count) {\n      // TODO: It is not optimal to always parse the old data\n      // This is done because we are not detecting direct assignments:\n      // chart.data.datasets[0].data[5] = 10;\n      // chart.data.datasets[0].data[5].y = 10;\n      this.parse(0, count);\n    }\n\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n\n  updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @private\n\t */\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n\n  /**\n\t * @private\n   */\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n  static defaults = {};\n  static defaultRoutes = undefined;\n\n  x: number;\n  y: number;\n  active = false;\n  options: O;\n  $animations: Record<keyof T, Animation>;\n\n  tooltipPosition(useFinalPosition: boolean): Point {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y} as Point;\n  }\n\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n\n  /**\n   * Gets the current or final value of each prop. Can return extra properties (whole object).\n   * @param props - properties to get\n   * @param [final] - get the final value (animation target)\n   */\n  getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n  getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n  getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      // let's not create an object, if not needed\n      return this as Record<string, unknown>;\n    }\n    const ret: Record<string, unknown> = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n    });\n    return ret;\n  }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const determinedMaxTicks = determineMaxTicks(scale);\n  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n\n  // If there are too many major ticks to display them all\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n\n  // If the major ticks are evenly spaced apart, place the minor ticks\n  // so that they divide the major ticks into even chunks\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n\n  next = start;\n\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n\n  if (len < 2) {\n    return false;\n  }\n\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n\n    // Return undefined if the pixel is out of the range\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n\n  return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  /** @type {CanvasTextAlign} */\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n  // eslint-disable-next-line max-statements\n  constructor(cfg) {\n    super();\n\n    /** @type {string} */\n    this.id = cfg.id;\n    /** @type {string} */\n    this.type = cfg.type;\n    /** @type {any} */\n    this.options = undefined;\n    /** @type {CanvasRenderingContext2D} */\n    this.ctx = cfg.ctx;\n    /** @type {Chart} */\n    this.chart = cfg.chart;\n\n    // implements box\n    /** @type {number} */\n    this.top = undefined;\n    /** @type {number} */\n    this.bottom = undefined;\n    /** @type {number} */\n    this.left = undefined;\n    /** @type {number} */\n    this.right = undefined;\n    /** @type {number} */\n    this.width = undefined;\n    /** @type {number} */\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    /** @type {number} */\n    this.maxWidth = undefined;\n    /** @type {number} */\n    this.maxHeight = undefined;\n    /** @type {number} */\n    this.paddingTop = undefined;\n    /** @type {number} */\n    this.paddingBottom = undefined;\n    /** @type {number} */\n    this.paddingLeft = undefined;\n    /** @type {number} */\n    this.paddingRight = undefined;\n\n    // scale-specific properties\n    /** @type {string=} */\n    this.axis = undefined;\n    /** @type {number=} */\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    /** @type {Tick[]} */\n    this.ticks = [];\n    /** @type {object[]|null} */\n    this._gridLineItems = null;\n    /** @type {object[]|null} */\n    this._labelItems = null;\n    /** @type {object|null} */\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    /** @type {number} */\n    this._startPixel = undefined;\n    /** @type {number} */\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n  init(options) {\n    this.options = options.setContext(this.getContext());\n\n    this.axis = options.axis;\n\n    // parse min/max value, so we can properly determine min/max for other scales\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n\n  /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    return raw;\n  }\n\n  /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isFinite(_userMin),\n      maxDefined: isFinite(_userMax)\n    };\n  }\n\n  /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n\n    // Make sure min <= max when only min or max is defined by user and the data is outside that range\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n\n  /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n\n  /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n  getTicks() {\n    return this.ticks;\n  }\n\n  /**\n\t * @return {string[]}\n\t */\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n\n  /**\n   * @return {import('../types.js').LabelItem[]}\n   */\n  getLabelItems(chartArea = this.chart.chartArea) {\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    return items;\n  }\n\n  // When a new layout is created, reset the data limits cache\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n\n  // These methods are ordered by lifecycle. Utilities then follow.\n  // Any function defined here is inherited by all scale types.\n  // Any function can be extended by the scale type\n\n  beforeUpdate() {\n    call(this.options.beforeUpdate, [this]);\n  }\n\n  /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t *   This space comes from two sources:\n\t *     - padding - space that's required to show the labels at the edges of the scale\n\t *     - thickness of scales or legends in another orientation\n\t */\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n\n    // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n    this.beforeUpdate();\n\n    // Absorb the master measurements\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n\n    // Dimensions\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n\n    // Data min/max\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n\n    this.beforeBuildTicks();\n\n    this.ticks = this.buildTicks() || [];\n\n    // Allow modification of ticks in callback.\n    this.afterBuildTicks();\n\n    // Compute tick rotation and fit using a sampled subset of labels\n    // We generally don't need to compute the size of every single label for determining scale size\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n    // configure is called twice, once here, once from core.controller.updateLayout.\n    // Here we haven't been positioned yet, but dimensions are correct.\n    // Variables set in configure are needed for calculateLabelRotation, and\n    // it's ok that coordinates are not correct there, only dimensions matter.\n    this.configure();\n\n    // Tick Rotation\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n    this.afterCalculateLabelRotation();\n\n    // Auto-skip\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n\n    if (samplingEnabled) {\n      // Generate labels using all non-skipped ticks\n      this._convertTicksToLabels(this.ticks);\n    }\n\n    this.beforeFit();\n    this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n    this.afterFit();\n\n    // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n    this.afterUpdate();\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      // by default vertical scales are from bottom to top, so pixels are reversed\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n\n  afterUpdate() {\n    call(this.options.afterUpdate, [this]);\n  }\n\n  //\n\n  beforeSetDimensions() {\n    call(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    if (this.isHorizontal()) {\n      // Reset position before calculating rotation\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n\n      // Reset position before calculating rotation\n      this.top = 0;\n      this.bottom = this.height;\n    }\n\n    // Reset padding\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    call(this.options.afterSetDimensions, [this]);\n  }\n\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    call(this.options[name], [this]);\n  }\n\n  // Data limits\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n\n  //\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  /**\n\t * @return {object[]} the ticks\n\t */\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n\n  beforeTickToLabelConversion() {\n    call(this.options.beforeTickToLabelConversion, [this]);\n  }\n  /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    call(this.options.afterTickToLabelConversion, [this]);\n  }\n\n  //\n\n  beforeCalculateLabelRotation() {\n    call(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n\n    // Estimate the width of each grid based on the canvas width, the maximum\n    // label width and the number of tick intervals\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n    // Allow 3 pixels x2 padding either side for label readability\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    call(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n\n  //\n\n  beforeFit() {\n    call(this.options.beforeFit, [this]);\n  }\n  fit() {\n    // Reset\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight; // fill all the height\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n\n        if (isHorizontal) {\n        // A horizontal axis is more constrained by the height.\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n        // A vertical axis is more constrained by the width. Labels are the\n        // dominant factor here, so get that length first and account for padding\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n\n    this._handleMargins();\n\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n\n      // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n      // which means that the right padding is dominated by the font height\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n\n      // Adjust padding taking into account changes in offsets\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n\n  /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n\n  afterFit() {\n    call(this.options.afterFit, [this]);\n  }\n\n  // Shared Methods\n  /**\n\t * @return {boolean}\n\t */\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  /**\n\t * @return {boolean}\n\t */\n  isFullSize() {\n    return this.options.fullSize;\n  }\n\n  /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n\n    this.generateTickLabels(ticks);\n\n    // Ticks should be skipped when callback returns null or undef, so lets remove those.\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n\n    this.afterTickToLabelConversion();\n  }\n\n  /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n    }\n\n    return labelSizes;\n  }\n\n  /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _computeLabelSizes(ticks, length, maxTicksLimit) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n    for (i = 0; i < length; i += increment) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = /** @type {string} */ (label[j]);\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n\n  /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value;\n  }\n\n  /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n  getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n    return NaN;\n  }\n\n  /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n  getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n\n  /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n\n  /**\n\t * @return {number}\n\t */\n  getBaseValue() {\n    const {min, max} = this;\n\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index) {\n    const ticks = this.ticks || [];\n\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n\n  /**\n\t * @return {number}\n\t * @private\n\t */\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n\n    // Calculate space needed by label in axis direction.\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n    // Calculate space needed for 1 tick in axis direction.\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n\n  /**\n\t * @return {boolean}\n\t * @private\n\t */\n  _isVisible() {\n    const display = this.options.display;\n\n    if (display !== 'auto') {\n      return !!display;\n    }\n\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position, border} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = borderOpts.display ? borderOpts.width : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const context = this.getContext(i);\n      const optsAtIndex = grid.setContext(context);\n      const optsAtIndexBorder = border.setContext(context);\n\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndexBorder.dash || [];\n      const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n      lineValue = getPixelForGridLine(this, i, offset);\n\n      // Skip if the pixel is out of the range\n      if (lineValue === undefined) {\n        continue;\n      }\n\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n\n    return items;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n\n      if (isHorizontal) {\n        x = pixel;\n\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n          x += (lineHeight / 2) * Math.sin(rotation);\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n\n      let backdrop;\n\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n\n        let top = textOffset - labelPadding.top;\n        let left = 0 - labelPadding.left;\n\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        default:\n          break;\n        }\n\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        case 'inner':\n          if (i === ilen - 1) {\n            left -= width;\n          } else if (i > 0) {\n            left -= width / 2;\n          }\n          break;\n        default:\n          break;\n        }\n\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n\n          color: optsAtIndex.backdropColor,\n        };\n      }\n\n      items.push({\n        label,\n        font,\n        textOffset,\n        options: {\n          rotation,\n          color,\n          strokeColor,\n          strokeWidth,\n          textAlign: tickTextAlign,\n          textBaseline,\n          translation: [x, y],\n          backdrop,\n        }\n      });\n    }\n\n    return items;\n  }\n\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n\n    let align = 'center';\n\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n\n    return align;\n  }\n\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n\n    let textAlign;\n    let x;\n\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n\n    return {textAlign, x};\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n\n    const chart = this.chart;\n    const position = this.options.position;\n\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n\n  /**\n   * @protected\n   */\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {\n    const {chart, ctx, options: {border, grid}} = this;\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = border.display ? borderOpts.width : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.width;\n    ctx.strokeStyle = borderOpts.color;\n\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n\n    if (!optionTicks.display) {\n      return;\n    }\n\n    const ctx = this.ctx;\n\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n\n    const items = this.getLabelItems(chartArea);\n    for (const item of items) {\n      const renderTextOptions = item.options;\n      const tickFont = item.font;\n      const label = item.label;\n      const y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n    }\n\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n\n    if (!title.display) {\n      return;\n    }\n\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n\n  /**\n\t * @return {object[]}\n\t * @private\n\t */\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      // backward compatibility: draw has been overridden by custom scale\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: bz,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n\n  /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n\n  /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n\n  /**\n   * @protected\n   */\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n\n    if (isIChartComponent(proto)) {\n      // Make sure the parent is registered and note the scope where its defaults are.\n      parentScope = this.register(proto);\n    }\n\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n\n    if (id in items) {\n      // already registered\n      return scope;\n    }\n\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n\n    return scope;\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n  get(id) {\n    return this.items[id];\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t */\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n\n    if (id in items) {\n      delete items[id];\n    }\n\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n  // Inherit the parent's defaults and keep existing defaults\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n\n  defaults.set(scope, itemDefaults);\n\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\n\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\n\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    // Order is important, Scale has Element in prototype chain,\n    // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  add(...args) {\n    this._each('register', args);\n  }\n\n  remove(...args) {\n    this._each('unregister', args);\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n\n  /**\n\t * @private\n\t */\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        // Handle loopable args\n        // Use case:\n        //  import * as plugins from './plugins.js';\n        //  Chart.register(plugins);\n        each(arg, item => {\n          // If there are mixed types in the loopable, make sure those are\n          // registered in correct registry\n          // Use case: (treemap exporting controller, elements etc)\n          //  import * as treemap from 'chartjs-chart-treemap.js';\n          //  Chart.register(treemap);\n\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n    registry[method](component);\n    call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n  }\n\n  /**\n\t * @private\n\t */\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    // plugins is the fallback registry\n    return this.plugins;\n  }\n\n  /**\n\t * @private\n\t */\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n  constructor() {\n    this._init = [];\n  }\n\n  /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n   * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callCallback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  invalidate() {\n    // When plugins are registered, there is the possibility of a double\n    // invalidate situation. In this case, we only want to invalidate once.\n    // If we invalidate multiple times, the `_oldCache` is lost and all of the\n    // plugins are restarted without being correctly stopped.\n    // See https://github.com/chartjs/Chart.js/issues/8147\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n\n    const descriptors = this._cache = this._createDescriptors(chart);\n\n    this._notifyStateChanges(chart);\n\n    return descriptors;\n  }\n\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    // options === false => all plugins are disabled\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    // make sure plugin defaults are in scopes for local (not registered) plugins\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    // These are just defaults that plugins can override\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n  if (id === 'x' || id === 'y' || id === 'r') {\n    return id;\n  }\n}\n\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n  for (const opts of scaleOptions) {\n    const axis = opts.axis\n      || axisFromPosition(opts.position)\n      || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n    if (axis) {\n      return axis;\n    }\n  }\n  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {axis};\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const scales = Object.create(null);\n\n  // First figure out first scale id's per axis.\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n\n  // Then merge dataset defaults to scale configs\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n\n  // apply scale defaults, if not overridden by dataset defaults\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n\n  return scales;\n}\n\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\n\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n\n  initOptions(config);\n\n  return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nexport default class Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  get platform() {\n    return this._config.platform;\n  }\n\n  get type() {\n    return this._config.type;\n  }\n\n  set type(type) {\n    this._config.type = type;\n  }\n\n  get data() {\n    return this._config.data;\n  }\n\n  set data(data) {\n    this._config.data = initData(data);\n  }\n\n  get options() {\n    return this._config.options;\n  }\n\n  set options(options) {\n    this._config.options = options;\n  }\n\n  get plugins() {\n    return this._config.plugins;\n  }\n\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @return {string[][]}\n   */\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset animation options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @param {string} transition\n   * @return {string[][]}\n   */\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        // The following are used for looking up the `animations` and `animation` keys\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving element options that belong\n   * to an dataset. These keys do not include the dataset itself, because it\n   * is not under options.\n   * @param {string} datasetType\n   * @param {string} elementType\n   * @return {string[][]}\n   */\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving plugin options.\n   * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n   * @return {string[][]}\n   */\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n\n  /**\n   * @private\n   */\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n\n  /**\n   * Resolves the objects from options and defaults for option value resolution.\n   * @param {object} mainScope - The main scope object for options\n   * @param {string[][]} keyLists - The arrays of keys in resolution order\n   * @param {boolean} [resetCache] - reset the cache for this mainScope\n   */\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n\n    const scopes = new Set();\n\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n\n  /**\n   * Returns the option scopes for resolving chart options\n   * @return {object[]}\n   */\n  chartOptionScopes() {\n    const {options, type} = this;\n\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {string[]} names\n   * @param {function|object} context\n   * @param {string[]} [prefixes]\n   * @return {object}\n   */\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      // subResolver is passed to scriptable options. It should not resolve to hover options.\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {object} [context]\n   * @param {string[]} [prefixes]\n   * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n   */\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\n\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n\n  chart.notifyPlugins('afterRender');\n  callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    // Support for array based queries (such as jQuery)\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    // Support for any object associated to a canvas (including a context2d)\n    item = item.canvas;\n  }\n  return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\n\nclass Chart {\n\n  static defaults = defaults;\n  static instances = instances;\n  static overrides = overrides;\n  static registry = registry;\n  static version = version;\n  static getChart = getChart;\n\n  static register(...items) {\n    registry.add(...items);\n    invalidatePlugins();\n  }\n\n  static unregister(...items) {\n    registry.remove(...items);\n    invalidatePlugins();\n  }\n\n  // eslint-disable-next-line max-statements\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    // Store the previously used aspect ratio to determine if a resize\n    // is needed during updates. Do this after _options is set since\n    // aspectRatio uses a getter\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    /** @type {?{attach?: function, detach?: function, resize?: function}} */\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n\n    // Add the chart instance to the global namespace\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\n      // The given item is not a compatible context2d element, let's return before finalizing\n      // the chart initialization but after setting basic chart / controller properties that\n      // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n      // https://github.com/chartjs/Chart.js/issues/2807\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      // If aspectRatio is defined in options, use that.\n      return aspectRatio;\n    }\n\n    if (maintainAspectRatio && _aspectRatio) {\n      // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n      return _aspectRatio;\n    }\n\n    // Calculate\n    return height ? width / height : null;\n  }\n\n  get data() {\n    return this.config.data;\n  }\n\n  set data(data) {\n    this.config.data = data;\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  set options(options) {\n    this.config.options = options;\n  }\n\n  get registry() {\n    return registry;\n  }\n\n  /**\n\t * @private\n\t */\n  _initialize() {\n    // Before init plugin notification\n    this.notifyPlugins('beforeInit');\n\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n\n    this.bindEvents();\n\n    // After init plugin notification\n    this.notifyPlugins('afterInit');\n\n    return this;\n  }\n\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n\n  /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n\n    this.notifyPlugins('resize', {size: newSize});\n\n    callCallback(options.onResize, [this, newSize], this);\n\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        // The resize update is delayed, only draw without updating.\n        this.render();\n      }\n    }\n  }\n\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n\n  /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n\n      scale.init(scaleOptions, options);\n    });\n    // clear up discarded scales\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n\n  /**\n\t * @private\n\t */\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n\n    this._removeUnreferencedMetasets();\n\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n\n    this._updateMetasets();\n    return newControllers;\n  }\n\n  /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n\n  /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n\n  update(mode) {\n    const config = this.config;\n\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n\n    // plugins options references might have change, let's invalidate the cache\n    // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n    this._plugins.invalidate();\n\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    // Make sure dataset controllers are updated and new controllers are reset\n    const newControllers = this.buildOrUpdateControllers();\n\n    this.notifyPlugins('beforeElementsUpdate');\n\n    // Make sure all dataset controllers have correct meta data counts\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      // New controllers will be reset after the layout pass, so we only want to modify\n      // elements added to new datasets\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n\n    // Only reset the controllers if we have animations\n    if (!animsDisabled) {\n      // Can only reset the new controllers after the scales have been updated\n      // Reset is done to get the starting point for the initial animation\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n\n    this._updateDatasets(mode);\n\n    // Do this before render so that any plugins that need final scale updates can use it\n    this.notifyPlugins('afterUpdate', {mode});\n\n    this._layers.sort(compare2Level('z', '_idx'));\n\n    // Replay last event from before update, or set hover styles on active elements\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n\n  /**\n   * @private\n   */\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      // The configured events have changed. Rebind.\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n\n  /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n\n    layouts.update(this, this.width, this.height, minPadding);\n\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n        return;\n      }\n\n      // configure is called twice, once in core.scale.update and once here.\n      // Here the boxes are fully updated and at their final positions.\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n\n    this.notifyPlugins('afterLayout');\n  }\n\n  /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n\n  /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n\n    meta.controller._update(mode);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      // Unset pending resize request now to avoid possible recursion within _resize\n      this._resizeBeforeDraw = null;\n      this._resize(width, height);\n    }\n    this.clear();\n\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n    // currently be part of layers. Instead, we draw\n    // layers <= 0 before(default, backward compat), and the rest after\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this._drawDatasets();\n\n    // Rest of layers\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this.notifyPlugins('afterDraw');\n  }\n\n  /**\n\t * @private\n\t */\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n\n  /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n\n  /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    // @ts-expect-error\n    const clip = getDatasetClipArea(this, meta);\n\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n\n    if (clip) {\n      clipArea(ctx, clip);\n    }\n\n    meta.controller.draw();\n\n    if (clip) {\n      unclipArea(ctx);\n    }\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n\n  /**\n   * Checks whether the given point is in the chart area.\n   * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n   * @returns {boolean}\n   */\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n\n    return [];\n  }\n\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\t\t\t// See isDatasetVisible() comment\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n\n    return meta;\n  }\n\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n\n    const meta = this.getDatasetMeta(datasetIndex);\n\n    // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n    // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n\n  /**\n\t * @private\n\t */\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n\n  /**\n\t * @private\n\t */\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n\n    this._stop();\n    this.config.clearCache();\n\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n\n    delete instances[this.id];\n\n    this.notifyPlugins('afterDestroy');\n  }\n\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n\n  /**\n\t * @private\n\t */\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n\n  /**\n   * @private\n   */\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n\n    each(this.options.events, (type) => _add(type, listener));\n  }\n\n  /**\n   * @private\n   */\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n\n    let detached; // eslint-disable-line prefer-const\n    const attached = () => {\n      _remove('attach', attached);\n\n      this.attached = true;\n      this.resize();\n\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n\n    detached = () => {\n      this.attached = false;\n\n      _remove('resize', listener);\n\n      // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n      this._stop();\n      this._resize(0, 0);\n\n      _add('attach', attached);\n    };\n\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n\n  /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n\n    if (changed) {\n      this._active = active;\n      // Make sure we don't use the previous mouse event to override the active elements in update.\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n\n  /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n   * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n\n  /**\n   * Check if a plugin with the specific ID is registered and enabled\n   * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n   * @returns {boolean}\n   */\n  isPluginEnabled(pluginId) {\n    return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n\n    if (changed || args.changed) {\n      this.render();\n    }\n\n    return this;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n   * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n\n    // If the event is replayed from `update`, we should evaluate with the final positions.\n    //\n    // The `replay`:\n    // It's the last event (excluding click) that has occurred before `update`.\n    // So mouse has not moved. It's also over the chart, because there is a `replay`.\n    //\n    // The why:\n    // If animations are active, the elements haven't moved yet compared to state before update.\n    // But if they will, we are activating the elements that would be active, if this check\n    // was done after the animations have completed. => \"final positions\".\n    // If there is no animations, the \"final\" and \"current\" positions are equal.\n    // This is done so we do not have to evaluate the active elements each animation frame\n    // - it would be expensive.\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n    if (inChartArea) {\n      // Set _lastEvent to null while we are processing the event handlers.\n      // This prevents recursion if the handler calls chart.update()\n      this._lastEvent = null;\n\n      // Invoke onHover hook\n      callCallback(options.onHover, [e, active, this], this);\n\n      if (isClick) {\n        callCallback(options.onClick, [e, active, this], this);\n      }\n    }\n\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n\n    this._lastEvent = lastEvent;\n\n    return changed;\n  }\n\n  /**\n   * @param {ChartEvent} e - The event\n   * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n   * @param {boolean} inChartArea - Is the event inside chartArea\n   * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n   * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n   * @pravate\n   */\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n  return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n  readonly options: T;\n  /**\n   * Will called with chart options after adapter creation.\n   */\n  init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n  /**\n   * Returns a map of time formats for the supported formatting units defined\n   * in Unit as well as 'datetime' representing a detailed date/time string.\n   */\n  formats(this: DateAdapter<T>): Record<TimeUnit | 'datetime', string>;\n  /**\n   * Parses the given `value` and return the associated timestamp.\n   * @param value - the value to parse (usually comes from the data)\n   * @param [format] - the expected data format\n   */\n  parse(this: DateAdapter<T>, value: unknown, format?: string): number | null;\n  /**\n   * Returns the formatted date in the specified `format` for a given `timestamp`.\n   * @param timestamp - the timestamp to format\n   * @param format - the date/time token\n   */\n  format(this: DateAdapter<T>, timestamp: number, format: string): string;\n  /**\n   * Adds the specified `amount` of `unit` to the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param amount - the amount to add\n   * @param unit - the unit as string\n   */\n  add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n  /**\n   * Returns the number of `unit` between the given timestamps.\n   * @param a - the input timestamp (reference)\n   * @param b - the timestamp to subtract\n   * @param unit - the unit as string\n   */\n  diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n  /**\n   * Returns start of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   * @param [weekday] - the ISO day of the week with 1 being Monday\n   * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n   */\n  startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n  /**\n   * Returns end of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   */\n  endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract<T = void>(): T {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n  /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */\n  static override<T extends AnyObject = AnyObject>(\n    members: Partial<Omit<DateAdapter<T>, 'options'>>\n  ) {\n    Object.assign(DateAdapterBase.prototype, members);\n  }\n\n  readonly options: AnyObject;\n\n  constructor(options?: AnyObject) {\n    this.options = options || {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  init() {}\n\n  formats(): Record<TimeUnit | 'datetime', string> {\n    return abstract();\n  }\n\n  parse(): number | null {\n    return abstract();\n  }\n\n  format(): string {\n    return abstract();\n  }\n\n  add(): number {\n    return abstract();\n  }\n\n  diff(): number {\n    return abstract();\n  }\n\n  startOf(): number {\n    return abstract();\n  }\n\n  endOf(): number {\n    return abstract();\n  }\n}\n\nexport default {\n  _date: DateAdapterBase as {\n    new (options?: AnyObject): DateAdapter;\n    override<T extends AnyObject = AnyObject>(\n      members: Partial<Omit<DateAdapter<T>, 'options'>>\n    ): void;\n  }\n};\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n  _arrayUnique, isArray, isNullOrUndef,\n  valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      // Ignore truncated pixels\n      return;\n    }\n    if (defined(prev)) {\n      // curr - prev === 0 is ignored\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n\n  return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    // When bar thickness is enforced, category and bar percentages are ignored.\n    // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n    // and deprecate barPercentage since this value is ignored when thickness is absolute.\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n\n  if (prev === null) {\n    // first data: its size is double based on the next point or,\n    // if it's also the last data, we use the scale size.\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    // last data: its size is also double based on the previous point.\n    next = curr + curr - prev;\n  }\n\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  // Store `barEnd` (furthest away from origin) as parsed value,\n  // to make stacking straight forward\n  item[vScale.axis] = barEnd;\n\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\n\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\n\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'bar',\n\n    categoryPercentage: 0.8,\n    barPercentage: 0.9,\n    grouped: true,\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'base', 'width', 'height']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n        offset: true,\n        grid: {\n          offset: true\n        }\n      },\n      _value_: {\n        type: 'linear',\n        beginAtZero: true,\n      }\n    }\n  };\n\n\n  /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      // float bar: only one end of the bar is considered by `super`\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n\n  initialize() {\n    this.enableOptionSharing = true;\n\n    super.initialize();\n\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n\n  /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n    const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n    const skipNull = (meta) => {\n      const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n      const val = parsed && parsed[meta.vScale.axis];\n\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n\n      // stacked   | meta.stack\n      //           | found | not found | undefined\n      // false     |   x   |     x     |     x\n      // true      |       |     x     |\n      // undefined |       |     x     |     x\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n\n    // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n    // stack where possible invisible bars will be located.\n    // https://github.com/chartjs/Chart.js/issues/6368\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n\n    return stacks;\n  }\n\n  /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n\n  _getAxisCount() {\n    return this._getAxis().length;\n  }\n\n  getFirstScaleIdForIndexAxis() {\n    const scales = this.chart.scales;\n    const indexScaleId = this.chart.options.indexAxis;\n    return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n  }\n\n  _getAxis() {\n    const axis = {};\n    const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n    for (const dataset of this.chart.data.datasets) {\n      axis[valueOrDefault(\n        this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n      )] = true;\n    }\n    return Object.keys(axis);\n  }\n\n  /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n   * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1; // indexOf returns -1 if element is not present\n\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      // bar thickness ratio used for non-grouped bars\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n\n  /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      // bars crossing origin are not stacked\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      // When not visible, no height\n      head = base;\n    }\n\n    size = head - base;\n\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n\n      if (_stacked && !floating) {\n        // visual data coordinates after applying minBarLength\n        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n      }\n    }\n\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    const axisCount = this._getAxisCount();\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n      const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n      const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      // For non-grouped bar charts, exact pixel values are used\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n\n\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n  static id = 'doughnut';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'arc',\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n      },\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutout: '50%',\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%',\n\n    // Spacing between arcs\n    spacing: 0,\n\n    indexAxis: 'r',\n  };\n\n  static descriptors = {\n    _scriptable: (name) => name !== 'spacing',\n    _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    // Need to override these to give a nice default\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n\n  linkScales() {}\n\n  /**\n\t * Override data parsing, since we are not using scales\n\t */\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n\n  /**\n\t * @private\n\t */\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n\n  /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n\n    // Compute the maximal rotation & circumference limits.\n    // If we only consider our dataset, this can cause problems when two datasets\n    // are both less than a circle with different rotations (starting angles)\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n\n    meta.total = this.calculateTotal();\n\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @private\n   */\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n\n    return total;\n  }\n\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n\n    if (!arcs) {\n      // Find the outmost visible dataset\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n\n    if (!arcs) {\n      return 0;\n    }\n\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n\n  getMaxOffset(arcs) {\n    let max = 0;\n\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n\n  /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n\n    return ringWeightOffset;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n\n  /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n  static id = 'polarArea';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    dataElementType: 'arc',\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n      },\n    },\n    indexAxis: 'r',\n    startAngle: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    },\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n        angleLines: {\n          display: false\n        },\n        beginAtZero: true,\n        grid: {\n          circular: true\n        },\n        pointLabels: {\n          display: false\n        },\n        startAngle: 0\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @protected\n   */\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n\n    return range;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n\n    const defaultAngle = 360 / this.countVisibleElements();\n\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n\n    return count;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n  static id = 'bubble';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'borderWidth', 'radius']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n\n  update(mode) {\n    const points = this._cachedMeta.data;\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n\n    // In case values were cached (and thus frozen), we need to clone the values\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n\n    // Custom radius resolution\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n    return values;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n\n    showLine: true,\n    spanGaps: false,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n      },\n      _value_: {\n        type: 'linear',\n      },\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    // Update Line\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    const end = start + count;\n    const pointsCount = points.length;\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = 0; i < pointsCount; ++i) {\n      const point = points[i];\n      const properties = directUpdate ? point : {};\n\n      if (i < start || i >= end) {\n        properties.skip = true;\n        continue;\n      }\n\n      const parsed = this.getParsed(i);\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n  static id = 'pie';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    // The percentage of the chart that we cut out of the middle.\n    cutout: 0,\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%'\n  };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n  static id = 'radar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n    indexAxis: 'r',\n    showLine: true,\n    elements: {\n      line: {\n        fill: 'start'\n      }\n    },\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n\n    // Update Line\n    line.points = points;\n    // In resize mode only point locations change, so no need to set the points or options.\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n\n      this.updateElement(line, undefined, properties, mode);\n    }\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n  static id = 'scatter';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n    showLine: false,\n    fill: false\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n\n    interaction: {\n      mode: 'point'\n    },\n\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + ')'\n    };\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    if (this.options.showLine) {\n\n      // https://github.com/chartjs/Chart.js/issues/11333\n      if (!this.datasetElementType) {\n        this.addElements();\n      }\n      const {dataset: line, _dataset} = meta;\n\n      // Update Line\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    } else if (this.datasetElementType) {\n      // https://github.com/chartjs/Chart.js/issues/11333\n      delete meta.dataset;\n      this.datasetElementType = false;\n    }\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  addElements() {\n    const {showLine} = this.options;\n\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = this.chart.registry.getElement('line');\n    }\n\n    super.addElements();\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n\n    if (!data.length) {\n      return border;\n    }\n\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n  if (innerRadius > 0) {\n    const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n    ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n  } else {\n    const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n    if (borderJoinStyle === 'round') {\n      ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n    } else if (borderJoinStyle === 'bevel') {\n      const r = 2 * clipWidth * clipWidth;\n      const endX = -r * Math.cos(endAngle + PI / 2) + x;\n      const endY = -r * Math.sin(endAngle + PI / 2) + y;\n      const startX = r * Math.cos(startAngle + PI / 2) + x;\n      const startY = r * Math.sin(startAngle + PI / 2) + y;\n      ctx.lineTo(endX, endY);\n      ctx.lineTo(startX, startY);\n    }\n  }\n  ctx.closePath();\n\n  ctx.moveTo(0, 0);\n  ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n  ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n\n  // Draw an inner border by clipping the arc and drawing a double-width border\n  // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n  // Outer limits are complicated. We want to compute the available angular distance at\n  // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n  // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n  //\n  // If the borderRadius is large, that value can become negative.\n  // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n  // we know that the thickness term will dominate and compute the limits at that point\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */\nfunction pathArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  end: number,\n  circular: boolean,\n) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n  let spacingOffset = 0;\n  const alpha = end - start;\n\n  if (spacing) {\n    // When spacing is present, it is the same for all items\n    // So we adjust the start and end angle of the arc such that\n    // the distance is the same as it would be without the spacing\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n    // The corner segment from point 2 to point 3\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n\n    // The line from point 3 to point 4\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n\n    // The corner segment from point 4 to point 5\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n\n    // The inner arc from point 5 to point b to point 6\n    const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n    // The corner segment from point 6 to point 7\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n\n    // The line from point 7 to point 8\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n\n    // The corner segment from point 8 to point 1\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference, options} = element;\n  const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n  const inner = options.borderAlign === 'inner';\n\n  if (!borderWidth) {\n    return;\n  }\n\n  ctx.setLineDash(borderDash || []);\n  ctx.lineDashOffset = borderDashOffset;\n\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n\n  if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n    clipSelf(ctx, element, endAngle);\n  }\n\n  if (!fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.stroke();\n  }\n}\n\nexport interface ArcProps extends Point {\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n  circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n  static id = 'arc';\n\n  static defaults = {\n    borderAlign: 'center',\n    borderColor: '#fff',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: undefined,\n    borderRadius: 0,\n    borderWidth: 2,\n    offset: 0,\n    spacing: 0,\n    angle: undefined,\n    circular: true,\n    selfJoin: false,\n  };\n\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor'\n  };\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash'\n  };\n\n  circumference: number;\n  endAngle: number;\n  fullCircles: number;\n  innerRadius: number;\n  outerRadius: number;\n  pixelMargin: number;\n  startAngle: number;\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n    const betweenAngles = _circumference >= TAU || nonZeroBetween;\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n    return (betweenAngles && withinRadius);\n  }\n\n  getCenterPoint(useFinalPosition: boolean) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius'\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n\n  tooltipPosition(useFinalPosition: boolean) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n\n  draw(ctx: CanvasRenderingContext2D) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 4;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n\n    ctx.save();\n\n    const halfAngle = (this.startAngle + this.endAngle) / 2;\n    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n    const radiusOffset = offset * fix;\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n\n    drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n    ctx.restore();\n  }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n\n  return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  // eslint-disable-next-line prefer-const\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n\n    prev = point;\n  }\n\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n\n  return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      // Draw line to maxY and minY, using the average x-coordinate\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      // Line to y-value of last point in group. So the line continues\n      // from correct position. Not using move, to have solid path.\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    }\n\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0; // truncated x-coordinate\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      // Draw line to next x-position, using the first (or only)\n      // y-value in that group\n      ctx.lineTo(x, y);\n\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    // Keep track of the last y-value in group\n    lastY = y;\n  }\n  drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n\n  return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\n\nexport default class LineElement extends Element {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderCapStyle: 'butt',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 3,\n    capBezierPoints: true,\n    cubicInterpolationMode: 'default',\n    fill: false,\n    spanGaps: false,\n    stepped: false,\n    tension: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n  };\n\n\n  constructor(cfg) {\n    super();\n\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n\n  get points() {\n    return this._points;\n  }\n\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n\n  /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n\n  /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n\n  /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n\n    if (!segments.length) {\n      return;\n    }\n\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n\n  /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n\n  /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n\n    start = start || 0;\n    count = count || (this.points.length - start);\n\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n\n  /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n\n    if (points.length && options.borderWidth) {\n      ctx.save();\n\n      draw(ctx, this, start, count);\n\n      ctx.restore();\n    }\n\n    if (this.animated) {\n      // When line is animated, the control points and path are not cached.\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n  CartesianParsedData,\n  ChartArea,\n  Point,\n  PointHoverOptions,\n  PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n  static id = 'point';\n\n  parsed: CartesianParsedData;\n  skip?: boolean;\n  stop?: boolean;\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderWidth: 1,\n    hitRadius: 1,\n    hoverBorderWidth: 1,\n    hoverRadius: 4,\n    pointStyle: 'circle',\n    radius: 3,\n    rotation: 0\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n\n  inXRange(mouseX: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseX, 'x', useFinalPosition);\n  }\n\n  inYRange(mouseY: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseY, 'y', useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition?: boolean) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n\n  size(options?: Partial<PointOptions & PointHoverOptions>) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n\n  draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n    const options = this.options;\n\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n\n  getRange() {\n    const options = this.options || {};\n    // @ts-expect-error Fallbacks should never be hit in practice\n    return options.radius + options.hitRadius;\n  }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n  let left, right, top, bottom, half;\n\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n\n  return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n\n  // If the value is an object, assume the user knows what they are doing\n  // and apply as directed.\n  const enableBorder = enableBorderRadius || isObject(value);\n\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\n\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\n\nexport default class BarElement extends Element {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderSkipped: 'start',\n    borderWidth: 0,\n    borderRadius: 0,\n    inflateAmount: 'auto',\n    pointStyle: undefined\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n  const labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n  return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n  static id = 'category';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: _getLabelForValue\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n\n    // If we are viewing some subset of labels, slice the original array\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n\n  getLabelForValue(value) {\n    return _getLabelForValue.call(this, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    super.configure();\n\n    if (!this.isHorizontal()) {\n      // For backward compatibility, vertical category scale reverse is inverted.\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n\n  // Used to get data value locations. Value can either be an index or a numerical value\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  // Must override base implementation because it calls getPixelForValue\n  // and category scale can have duplicate values\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n\n  getBasePixel() {\n    return this.bottom;\n  }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n *    if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n *    Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n *    spacing = (max - min) / count\n *    Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n *    spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n  const ticks = [];\n  // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n  // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n  // for details.\n\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n\n  // Beyond MIN_SPACING floating point numbers being to lose precision\n  // such that we can't do the math necessary to generate ticks\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\n    // If the user specified a precision, round to that number of decimal places\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n    // spacing = step;\n    // numSpaces = (max - min) / spacing;\n    // Note that we round here to handle the case where almostWhole translated an FP error\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n    // Sometimes these are no-ops, but it makes the code a lot clearer\n    // and when a user defined range is specified, we want the correct ticks\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    // Case 4\n    numSpaces = (niceMax - niceMin) / spacing;\n\n    // If very close to our rounded value, use it.\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n\n  // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n  // until this point\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n\n      if (niceMin < min) {\n        j++; // Skip niceMin\n      }\n      // If the next nice tick is close to min, skip it\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n\n  for (; j < numSpaces; ++j) {\n    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n    ticks.push({value: tickValue});\n  }\n\n  if (maxDefined && includeBounds && niceMax !== max) {\n    // If the previous tick is too close to max, replace it with max, else add max\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    /** @type {number} */\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n\n    return +raw;\n  }\n\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n\n    if (min === max) {\n      let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n      setMax(max + offset);\n\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    // eslint-disable-next-line prefer-const\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n\n    return maxTicks;\n  }\n\n  /**\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    // Figure out what the max number of ticks we can support it is based on the size of\n    // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n    // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n    // the graph. Make sure we always have at least 2 ticks\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n\n    super.configure();\n\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n  static id = 'linear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.numeric\n    }\n  };\n\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? min : 0;\n    this.max = isFinite(max) ? max : 1;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n\n  // Utils\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  const rangeStep = Math.pow(10, rangeExp);\n  const start = Math.floor(min / rangeStep);\n  const end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  const range = max - min;\n  let rangeExp = log10Floor(range);\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n  return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n  min = finiteOrDefault(generationOptions.min, min);\n  const ticks = [];\n  const minExp = log10Floor(min);\n  let exp = startExp(min, max);\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  const stepSize = Math.pow(10, exp);\n  const base = minExp > exp ? Math.pow(10, minExp) : 0;\n  const start = Math.round((min - base) * precision) / precision;\n  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  let significand = Math.floor((start - offset) / Math.pow(10, exp));\n  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n  while (value < max) {\n    ticks.push({value, major: isMajor(value), significand});\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n  const lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n  return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n  static id = 'logarithmic';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.logarithmic,\n      major: {\n        enabled: true\n      }\n    }\n  };\n\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isFinite(value) && value > 0 ? value : null;\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? Math.max(0, min) : null;\n    this.max = isFinite(max) ? Math.max(0, max) : null;\n\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n\n    // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n    // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n    if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n    }\n\n    this.handleTickRangeOptions();\n  }\n\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (min === max) {\n      if (min <= 0) { // includes null\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(changeExponent(min, -1));\n        setMax(changeExponent(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(changeExponent(max, -1));\n    }\n    if (max <= 0) {\n\n      setMax(changeExponent(min, +1));\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const start = this.min;\n\n    super.configure();\n\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n  // Right, this is really confusing and there is a lot of maths going on here\n  // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n  //\n  // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n  //\n  // Solution:\n  //\n  // We assume the radius of the polygon is half the size of the canvas at first\n  // at each index we check if the text overlaps.\n  //\n  // Where it does, we store that angle and that index.\n  //\n  // After finding the largest index and angle we calculate how much we need to remove\n  // from the shape radius to move the point inwards by that x.\n  //\n  // We average the left and right distances to get the maximum shape radius that can fit in the box\n  // along with labels.\n  //\n  // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n  // on each side, removing that from the size, halving it and adding the left x protrusion width.\n  //\n  // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n  // and position it in the most space efficient manner\n  //\n  // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n  // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n  // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n\n  // Now that text size is determined, compute the full positions\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n  const outerDistance = scale.drawingArea;\n  const {extra, additionalAngle, padding, size} = itemOpts;\n  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  const y = yForAngle(pointLabelPosition.y, size.h, angle);\n  const textAlign = getTextAlignForAngle(angle);\n  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    // if to draw or overlapped\n    visible: true,\n\n    // Text position\n    x: pointLabelPosition.x,\n    y,\n\n    // Text rendering data\n    textAlign,\n\n    // Bounding box\n    left,\n    top: y,\n    right: left + size.w,\n    bottom: y + size.h\n  };\n}\n\nfunction isNotOverlapped(item, area) {\n  if (!area) {\n    return true;\n  }\n  const {left, top, right, bottom} = item;\n  const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n    _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const {centerPointLabels, display} = opts.pointLabels;\n  const itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  let area;\n\n  for (let i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n\n    const item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n      if (item.visible) {\n        area = item;\n      }\n    }\n  }\n  return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\n\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  const {left, top, right, bottom} = item;\n  const {backdropColor} = opts;\n\n  if (!isNullOrUndef(backdropColor)) {\n    const borderRadius = toTRBLCorners(opts.borderRadius);\n    const padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n\n    const backdropLeft = left - padding.left;\n    const backdropTop = top - padding.top;\n    const backdropWidth = right - left + padding.width;\n    const backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(v => v !== 0)) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {\n        x: backdropLeft,\n        y: backdropTop,\n        w: backdropWidth,\n        h: backdropHeight,\n        radius: borderRadius,\n      });\n      ctx.fill();\n    } else {\n      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n    }\n  }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const item = scale._pointLabelItems[i];\n    if (!item.visible) {\n      // overlapping\n      continue;\n    }\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign} = item;\n\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    // Draw circular arcs between the points\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    // Draw straight lines connecting each index\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n\n  const {color, lineWidth} = gridLineOpts;\n\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(borderOpts.dash || []);\n  ctx.lineDashOffset = borderOpts.dashOffset;\n\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n  static id = 'radialLinear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    display: true,\n\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n\n    angleLines: {\n      display: true,\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n\n    grid: {\n      circular: false\n    },\n\n    startAngle: 0,\n\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n\n      callback: Ticks.formatters.numeric\n    },\n\n    pointLabels: {\n      backdropColor: undefined,\n\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPadding: 2,\n\n      // Boolean - if true, show point labels\n      display: true,\n\n      // Number - Point label font size in pixels\n      font: {\n        size: 10\n      },\n\n      // Function - Used to convert point labels\n      callback(label) {\n        return label;\n      },\n\n      // Number - Additionl padding between scale and pointLabel\n      padding: 5,\n\n      // Boolean - if true, center point labels to slices in polar chart\n      centerPointLabels: false\n    }\n  };\n\n  static defaultRoutes = {\n    'angleLines.color': 'borderColor',\n    'pointLabels.color': 'color',\n    'ticks.color': 'color'\n  };\n\n  static descriptors = {\n    angleLines: {\n      _fallback: 'grid'\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.xCenter = undefined;\n    /** @type {number} */\n    this.yCenter = undefined;\n    /** @type {number} */\n    this.drawingArea = undefined;\n    /** @type {string[]} */\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n\n    this.min = isFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n    // Point labels\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n\n  fit() {\n    const opts = this.options;\n\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n\n    // Take into account half font size + the yPadding of the top value\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid, border} = opts;\n    const labelCount = this._pointLabels.length;\n\n    let i, offset, position;\n\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0 || (index === 0 && this.min < 0)) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const context = this.getContext(index);\n          const optsAtIndex = grid.setContext(context);\n          const optsAtIndexBorder = border.setContext(context);\n\n          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n        }\n      });\n    }\n\n    if (angleLines.display) {\n      ctx.save();\n\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n\n        if (!lineWidth || !color) {\n          continue;\n        }\n\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n        offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {}\n\n  /**\n\t * @protected\n\t */\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    if (!tickOpts.display) {\n      return;\n    }\n\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n\n    this.ticks.forEach((tick, index) => {\n      if ((index === 0 && this.min >= 0) && !opts.reverse) {\n        return;\n      }\n\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n        strokeColor: optsAtIndex.textStrokeColor,\n        strokeWidth: optsAtIndex.textStrokeWidth,\n      });\n    });\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n  return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  // Only parse if it's not a timestamp already\n  if (!isFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n\n  return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  /** @type {Object<number,object>} */\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n\n  // We set the major ticks separately from the above loop because calling startOf for every tick\n  // is expensive when there is a large number of ticks\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n  static id = 'time';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n\n    adapters: {},\n    time: {\n      parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n      unit: false, // false == automatic or override with week, month, year, etc.\n      round: false, // none, or override with week, month, year, etc.\n      isoWeekday: false, // override week start day\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n\n      callback: false,\n\n      major: {\n        enabled: false\n      }\n    }\n  };\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {{data: number[], labels: number[], all: number[]}} */\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n\n    /** @type {Unit} */\n    this._unit = 'day';\n    /** @type {Unit=} */\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n\n  init(scaleOpts, opts = {}) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    /** @type {DateAdapter} */\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n    adapter.init(opts);\n\n    // Backward compatibility: before introducing adapter, `displayFormats` was\n    // supposed to contain *all* unit/string pairs but this can't be resolved\n    // when loading the scale (adapters are loaded afterward), so let's populate\n    // missing formats on update\n    mergeIf(time.displayFormats, adapter.formats());\n\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n\n    super.init(scaleOpts);\n\n    this._normalized = opts.normalized;\n  }\n\n  /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n    /**\n\t\t * @param {object} bounds\n\t\t */\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n\n    // If we have user provided `min` and `max` labels / data bounds can be ignored\n    if (!minDefined || !maxDefined) {\n      // Labels are always considered, when user did not force bounds\n      _applyBounds(this._getLabelBounds());\n\n      // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n      // data bounds are ignored (and don't need to be determined)\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n\n    min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n    // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n\n  /**\n\t * @private\n\t */\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n\n  /**\n\t * @return {object[]}\n\t */\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n\n    const min = this.min;\n    const max = this.max;\n\n    const ticks = _filterBetween(timestamps, min, max);\n\n    // PRIVATE\n    // determineUnitForFormatting relies on the number of ticks so we don't use it when\n    // autoSkip is enabled because we don't yet know what the final number of ticks will be\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n\n    if (options.reverse) {\n      ticks.reverse();\n    }\n\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n\n  afterAutoSkip() {\n    // Offsets for bar charts need to be handled with the auto skipped\n    // ticks. Once ticks have been skipped, we re-compute the offsets.\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n\n  /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n  initOffsets(timestamps = []) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n\n  /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    // @ts-ignore\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n\n    // For 'week' unit, handle the first day of week option\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n\n    // @ts-ignore\n    return Object.keys(ticks).sort(sorter).map(x => +x);\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n\n  /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n  format(value, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const fmt = format || formats[unit];\n    return this._adapter.format(value, fmt);\n  }\n\n  /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formatter = options.ticks.callback;\n\n    if (formatter) {\n      return call(formatter, [time, index, ticks], this);\n    }\n\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n\n    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n  }\n\n  /**\n\t * @param {object[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n\n  /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n\n  /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n\n    // pick the longest format (milliseconds) for guesstimation\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    // subtract 1 - if offset then there's one less label than tick\n    // if not offset then one half label padding is added to each end leaving room for one less label\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n\n    return (this._cache.data = this.normalize(timestamps));\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n\n  /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n  normalize(values) {\n    // It seems to be somewhat faster to do sorting first\n    return _arrayUnique(values.sort(sorter));\n  }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n  static id = 'timeseries';\n\n  /**\n   * @type {any}\n   */\n  static defaults = TimeScale.defaults;\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {object[]} */\n    this._table = [];\n    /** @type {number} */\n    this._minPos = undefined;\n    /** @type {number} */\n    this._tableRange = undefined;\n  }\n\n  /**\n\t * @protected\n\t */\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n\n  /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n\n    if (items.length < 2) {\n      // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n\n  /**\n    * Generates all timestamps defined in the data.\n    * Important: this method can return ticks outside the min and max range, it's the\n    * responsibility of the calling code to clamp values if needed.\n    * @protected\n    */\n  _generate() {\n    const min = this.min;\n    const max = this.max;\n    let timestamps = super.getDataTimestamps();\n    if (!timestamps.includes(min) || !timestamps.length) {\n      timestamps.splice(0, 0, min);\n    }\n    if (!timestamps.includes(max) || timestamps.length === 1) {\n      timestamps.push(max);\n    }\n    return timestamps.sort((a, b) => a - b);\n  }\n\n  /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      // If combining labels and data (data might not contain all labels),\n      // we need to recheck uniqueness and sort\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n\n    return timestamps;\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\n\nexport default TimeSeriesScale;\n","import {DoughnutController, PolarAreaController, defaults} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n  enabled?: boolean;\n  forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n  backgroundColor?: unknown;\n  borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n  'rgb(54, 162, 235)', // blue\n  'rgb(255, 99, 132)', // red\n  'rgb(255, 159, 64)', // orange\n  'rgb(255, 205, 86)', // yellow\n  'rgb(75, 192, 192)', // green\n  'rgb(153, 102, 255)', // purple\n  'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n  return i;\n}\n\nfunction getColorizer(chart: Chart) {\n  let i = 0;\n\n  return (dataset: ChartDataset, datasetIndex: number) => {\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n    if (controller instanceof DoughnutController) {\n      i = colorizeDoughnutDataset(dataset, i);\n    } else if (controller instanceof PolarAreaController) {\n      i = colorizePolarAreaDataset(dataset, i);\n    } else if (controller) {\n      i = colorizeDefaultDataset(dataset, i);\n    }\n  };\n}\n\nfunction containsColorsDefinitions(\n  descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n  let k: number | string;\n\n  for (k in descriptors) {\n    if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction containsColorsDefinition(\n  descriptor: ColorsDescriptor\n) {\n  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nfunction containsDefaultColorsDefenitions() {\n  return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\n\nexport default {\n  id: 'colors',\n\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  } as ColorsPluginOptions,\n\n  beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n    if (!options.enabled) {\n      return;\n    }\n\n    const {\n      data: {datasets},\n      options: chartOptions\n    } = chart.config;\n    const {elements} = chartOptions;\n\n    const containsColorDefenition = (\n      containsColorsDefinitions(datasets) ||\n      containsColorsDefinition(chartOptions) ||\n      (elements && containsColorsDefinitions(elements)) ||\n      containsDefaultColorsDefenitions());\n\n    if (!options.forceOverride && containsColorDefenition) {\n      return;\n    }\n\n    const colorizer = getColorizer(chart);\n\n    datasets.forEach(colorizer);\n  }\n};\n","import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  /**\n   * Implementation of the Largest Triangle Three Buckets algorithm.\n   *\n   * This implementation is based on the original implementation by Sveinn Steinarsson\n   * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n   *\n   * The original implementation is MIT licensed.\n   */\n  const samples = options.samples || availableWidth;\n  // There are less points than the threshold, returning the whole array\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  const decimated = [];\n\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  // Starting from offset\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n\n    // Adding offset\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n\n    // Adding offset\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n\n    // Note that this is changed from the original algorithm which initializes these\n    // values to 1. The reason for this change is that if the area is small, nextA\n    // would never be set and thus a crash would occur in the next loop as `a` would become\n    // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n    // initializing with a negative number is the correct solution.\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n\n  // Include the last point\n  decimated[sampledIndex++] = data[endIndex];\n\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      // Use point.x here because we're computing the average data `x` value\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      // Push up to 4 points, 3 for the last interval and the first point for this interval\n      const lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        // The interval is defined by 4 points: start, min, max, end.\n        // The starting point is already considered at this point, so we need to determine which\n        // of the other points to add. We need to sort these points to ensure the decimated data\n        // is still sorted and then ensure there are no duplicates.\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n\n      // lastIndex === startIndex will occur when a range has only 1 point which could\n      // happen with very uneven data\n      if (i > 0 && lastIndex !== startIndex) {\n        // Last point in the previous interval\n        decimated.push(data[lastIndex]);\n      }\n\n      // Start of the new interval\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n\n  return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: data,\n    });\n  }\n}\n\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count;\n\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n\n  return {start, count};\n}\n\nexport default {\n  id: 'decimation',\n\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    // Assume the entire chart is available to show a few more points than needed\n    const availableWidth = chart.width;\n\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        // Decimation is only supported for lines that have an X indexAxis\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        // Only line datasets are supported\n        return;\n      }\n\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        // Only linear interpolation is supported\n        return;\n      }\n\n      if (chart.options.parsing) {\n        // Plugin only supports data that does not need parsing\n        return;\n      }\n\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        // No decimation is required until we are above this threshold\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        // First time we are seeing this dataset\n        // We override the 'data' property with a setter that stores the\n        // raw data in _data, but reads the decimated data from _decimated\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      // Point the chart to the decimated data\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n    if (!target.segments) {\n      // Special case for boundary not supporting `segments` (simpleArc)\n      // Bounds are provided as `target` for partial circle, or undefined for full circle\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n\n    // Get all segments from `target` that intersect the bounds of current segment of `line`\n    const targetSegments = _boundSegments(target, bounds);\n\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    // @ts-ignore\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n\n    if (target.visible) {\n      return fill;\n    }\n\n    visited.push(fill);\n    fill = target.fill;\n  }\n\n  return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n  /** @type {string | {value: number}} */\n  const fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  let target = parseFloat(fill);\n\n  if (isFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n\n  return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n  let value;\n\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n\n  if (fill === false || fill === null) {\n    return false;\n  }\n\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      // First point of a segment -> need to add another point before this,\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        // In the middle of a segment, no need to add more points.\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n  const {chart, fill, line} = source;\n\n  if (isFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n\n  if (fill === 'shape') {\n    return true;\n  }\n\n  const boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n\n  if (isFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\n","import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {chart, index, line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  const meta = chart.getDatasetMeta(index);\n  const clip = getDatasetClipArea(chart, meta);\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale, clip} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n\n  ctx.save();\n\n  let fillColor = below;\n  if (below !== above) {\n    if (property === 'x') {\n      clipVertical(ctx, target, area.top);\n      fill(ctx, {line, target, color: above, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipVertical(ctx, target, area.bottom);\n    } else if (property === 'y') {\n      clipHorizontal(ctx, target, area.left);\n      fill(ctx, {line, target, color: below, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipHorizontal(ctx, target, area.right);\n      fillColor = above;\n    }\n  }\n  fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(clipX, firstPoint.y);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(clipX, lastPoint.y);\n    }\n  }\n\n  ctx.lineTo(clipX, target.first().y);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale, clip} = cfg;\n  const segments = _segments(line, target, property);\n\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n\n    clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n    ctx.beginPath();\n\n    const lineLoop = !!line.pathSegment(ctx, src);\n\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n    ctx.restore();\n  }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n  const chartArea = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n\n  if (property === 'x' || property === 'y') {\n    let left, top, right, bottom;\n\n    if (property === 'x') {\n      left = start;\n      top = chartArea.top;\n      right = end;\n      bottom = chartArea.bottom;\n    } else {\n      left = chartArea.left;\n      top = start;\n      right = chartArea.right;\n      bottom = end;\n    }\n\n    ctx.beginPath();\n\n    if (clip) {\n      left = Math.max(left, clip.left);\n      right = Math.min(right, clip.right);\n      top = Math.max(top, clip.top);\n      bottom = Math.min(bottom, clip.bottom);\n    }\n\n    ctx.rect(left, top, right - left, bottom - top);\n    ctx.clip();\n  }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n  id: 'filler',\n\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n\n      meta.$filler = source;\n      sources.push(source);\n    }\n\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n  _isBetween,\n  callback as call,\n  clipArea,\n  getRtlAdapter,\n  overrideTextDirection,\n  restoreTextDirection,\n  toFont,\n  toPadding,\n  unclipArea,\n  valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this._added = false;\n\n    // Contains hit boxes for each dataset (in dataset order)\n    this.legendHitBoxes = [];\n\n    /**\n \t\t * @private\n \t\t */\n    this._hoveredItem = null;\n\n    // Are we in doughnut mode which has a different data type\n    this.doughnutMode = false;\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n\n    this.legendItems = legendItems;\n  }\n\n  fit() {\n    const {options, ctx} = this;\n\n    // The legend may not be displayed for a variety of reasons including\n    // the fact that the defaults got set to `false`.\n    // When the legend is not displayed, there are no guarantees that the options\n    // are correctly formatted so we need to bail out as early as possible.\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    let width, height;\n\n    ctx.font = labelFont.string;\n\n    if (this.isHorizontal()) {\n      width = this.maxWidth; // fill all the width\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight; // fill all the height\n      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n    }\n\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n\n  /**\n\t * @private\n\t */\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n\n    return totalHeight;\n  }\n\n  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n\n    let left = 0;\n    let col = 0;\n\n    this.legendItems.forEach((legendItem, i) => {\n      const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n      // If too tall, go to new column\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n\n      // Store the hitbox width and height here. Final position will be updated in `draw`\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n      // Get max width\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n    return totalWidth;\n  }\n\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n\n      this._draw();\n\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n\n    this.drawTitle();\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    // current position\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n\n      // Set the ctx for the box\n      ctx.save();\n\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n      if (labelOpts.usePointStyle) {\n        // Recalculate x and y for drawPoint() because its expecting\n        // x and y to be center of figure (instead of top left)\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n\n        // Draw pointStyle as legend symbol\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        // Draw box as legend symbol\n        // Adjust position when boxHeight < fontSize (want it centered)\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n        ctx.beginPath();\n\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n\n      ctx.restore();\n    };\n\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n\n    // Horizontal\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n\n    overrideTextDirection(this.ctx, opts.textDirection);\n\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n      ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n\n      rtlHelper.setWidth(this.width);\n\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n\n      const realX = rtlHelper.x(x);\n\n      drawLegendBox(realX, y, legendItem);\n\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n      // Fill the actual label\n      fillText(rtlHelper.x(x), y, legendItem);\n\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else if (typeof legendItem.text !== 'string') {\n        const fontLineHeight = labelFont.lineHeight;\n        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n\n    if (!titleOpts.display) {\n      return;\n    }\n\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n\n    // These defaults are used when the legend is vertical.\n    // When horizontal, they are computed below.\n    let left = this.left;\n    let maxWidth = this.width;\n\n    if (this.isHorizontal()) {\n      // Move left / right so that the title is above the legend lines\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      // Move down so that the title is above the legend stack in every alignment\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n\n    // Now that we know the left edge of the inner legend box, compute the correct\n    // X coordinate from the title alignment\n    const x = _alignStartEnd(position, left, left + maxWidth);\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n\n  /**\n\t * @private\n\t */\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      // See if we are touching one of the dataset boxes\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          // Touching an element\n          return this.legendItems[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n\n    // Chart event already has relative position in it\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        call(opts.onLeave, [e, previous, this], this);\n      }\n\n      this._hoveredItem = hoveredItem;\n\n      if (hoveredItem && !sameItem) {\n        call(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      call(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  let legendItemText = legendItem.text;\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n  }\n  return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  let itemHeight = _itemHeight;\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  const labelHeight = legendItem.text ? legendItem.text.length : 0;\n  return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\n\nexport default {\n  id: 'legend',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Legend,\n\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n\n  // During the beforeUpdate step, the layout configuration needs to run\n  // This ensures that if the legend position changes (via an option update)\n  // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n\n  // The labels need to be built after datasets are updated to ensure that colors\n  // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n\n\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n\n    // a callback that will handle\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n\n    onHover: null,\n    onLeave: null,\n\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      // Generates labels shown in the legend\n      // Valid properties to return:\n      // text : text to display\n      // fillStyle : fill of coloured box\n      // strokeStyle: stroke of coloured box\n      // hidden : if this legend item refers to a hidden item\n      // lineCap : cap style for line\n      // lineDash\n      // lineDashOffset :\n      // lineJoin :\n      // lineWidth :\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n            // Below is extra data used for toggling the datasets\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n","import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n\n    this.left = 0;\n    this.top = 0;\n\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n\n    if (!opts.display) {\n      return;\n    }\n\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\n\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nexport default {\n  id: 'title',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Title,\n\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000         // by default greater than legend (1000) to be above\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n  id: 'subtitle',\n\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500         // by default greater than legend (1000) and smaller than title (2000)\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n  /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    let i, len;\n    let xSet = new Set();\n    let y = 0;\n    let count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        xSet.add(pos.x);\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n    if (count === 0 || xSet.size === 0) {\n      return false;\n    }\n\n    const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n    return {\n      x: xAverage,\n      y: y / count\n    };\n  },\n\n  /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x,\n      y\n    };\n  }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      // base = base.concat(toPush);\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n\n  // Count of all lines in the body\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    // Body lines may include some extra height depending on boxHeight\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  // Title width\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n\n  // Body width\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n  // Body lines may include some extra width due to the color box\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n\n  // Reset back to 0\n  widthPadding = 0;\n\n  // Footer width\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n\n  ctx.restore();\n\n  // Add padding\n  width += padding.width;\n\n  return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n\n  return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  // eslint-disable-next-line prefer-const\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n  // Args are: (tooltipItems, data)\n  beforeTitle: noop,\n  title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      const item = tooltipItems[0];\n      const labels = item.chart.data.labels;\n      const labelCount = labels ? labels.length : 0;\n\n      if (this && this.options && this.options.mode === 'dataset') {\n        return item.dataset.label || '';\n      } else if (item.label) {\n        return item.label;\n      } else if (labelCount > 0 && item.dataIndex < labelCount) {\n        return labels[item.dataIndex];\n      }\n    }\n\n    return '';\n  },\n  afterTitle: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeBody: noop,\n\n  // Args are: (tooltipItem, data)\n  beforeLabel: noop,\n  label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    let label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n    const value = tooltipItem.formattedValue;\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n    return label;\n  },\n  labelColor(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      borderColor: options.borderColor,\n      backgroundColor: options.backgroundColor,\n      borderWidth: options.borderWidth,\n      borderDash: options.borderDash,\n      borderDashOffset: options.borderDashOffset,\n      borderRadius: 0,\n    };\n  },\n  labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation,\n    };\n  },\n  afterLabel: noop,\n\n  // Args are: (tooltipItems, data)\n  afterBody: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  const result = callbacks[name].call(ctx, arg);\n\n  if (typeof result === 'undefined') {\n    return defaultCallbacks[name].call(ctx, arg);\n  }\n\n  return result;\n}\n\nexport class Tooltip extends Element {\n\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n  static positioners = positioners;\n\n  constructor(config) {\n    super();\n\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n    // and `labelTextColors` to create a single variable\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n\n    if (cached) {\n      return cached;\n    }\n\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n\n  getTitle(context, options) {\n    const {callbacks} = options;\n\n    const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n    const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n    const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n    return lines;\n  }\n\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n    );\n  }\n\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n      bodyItems.push(bodyItem);\n    });\n\n    return bodyItems;\n  }\n\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n    );\n  }\n\n  // Get the footer and beforeFooter and afterFooter lines\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n\n    const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n    const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n    const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n    return lines;\n  }\n\n  /**\n\t * @private\n\t */\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n\n    // If the user provided a filter function, use it to modify the tooltip items\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n\n    // If the user provided a sorting function, use it to modify the tooltip items\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n\n    // Determine colors for boxes\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n      labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n      labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n    });\n\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n\n        // Left draws bottom -> top, this y1 is on the bottom\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n\n        // Right draws top -> bottom, thus y1 is on the top\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n\n        // Top draws left -> right, thus x1 is on the left\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n\n        // Bottom draws right -> left, thus x1 is on the right\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.titleAlign, options);\n\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n        }\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColor = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      // Recalculate x and y for drawPoint() because its expecting\n      // x and y to be center of figure (instead of top left)\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n\n      // Fill the point with white so that colours merge nicely if the opacity is < 1\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n\n      // Draw the point\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.fillStyle = labelColor.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      // Border\n      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.setLineDash(labelColor.borderDash || []);\n      ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n      // Fill a white rect so that colours merge nicely if the opacity is < 1\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        // Normal rect\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n\n    // restore fillStyle\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n    // Before body lines\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n\n    // Draw body lines now\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n\n      lines = bodyItem.lines;\n      // Draw Legend-like boxes if needed\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        // Reset for any lines that don't include colorbox\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n\n      each(bodyItem.after, fillLineOfText);\n    }\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n\n    // After body lines\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n\n      footerFont = toFont(options.footerFont);\n\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n\n    ctx.fill();\n\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n\n  /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n\n  /**\n   * Determine if the tooltip will draw anything\n   * @returns {boolean} True if the tooltip will render\n   */\n  _willRender() {\n    return !!this.opacity;\n  }\n\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n\n    if (!opacity) {\n      return;\n    }\n\n    this._updateAnimationTarget(options);\n\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n\n    // IE11/Edge does not like very small opacities, so snap to 0\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n    const padding = toPadding(options.padding);\n\n    // Truthy/falsey value for empty tooltip\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n\n      // Draw Background\n      this.drawBackground(pt, ctx, tooltipSize, options);\n\n      overrideTextDirection(ctx, options.textDirection);\n\n      pt.y += padding.top;\n\n      // Titles\n      this.drawTitle(pt, ctx, options);\n\n      // Body\n      this.drawBody(pt, ctx, options);\n\n      // Footer\n      this.drawFooter(pt, ctx, options);\n\n      restoreTextDirection(ctx, options.textDirection);\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n    // When there are multiple items shown, but the tooltip position is nearest mode\n    // an update may need to be made because our position may have changed even though\n    // the items are the same as before.\n    const positionChanged = this._positionChanged(active, e);\n\n    // Remember Last Actives\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n    // Only handle target event on tooltip change\n    if (changed) {\n      this._active = active;\n\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n\n        this.update(true, replay);\n      }\n    }\n\n    return changed;\n  }\n\n  /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      // But make sure that active elements are still valid.\n      return lastActive.filter(i =>\n        this.chart.data.datasets[i.datasetIndex] &&\n        this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n      );\n    }\n\n    // Find Active Elements for tooltips\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n    if (options.reverse) {\n      active.reverse();\n    }\n\n    return active;\n  }\n\n  /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\n\nexport default {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      // If the event is replayed from `update`, we should evaluate with the final positions.\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        // notify chart about the change, so it will render\n        args.changed = true;\n      }\n    }\n  },\n\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: defaultCallbacks\n  },\n\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n\n  // Resolve additionally from `interaction` options and defaults.\n  additionalOptionScopes: ['interaction']\n};\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\n/**\n * @namespace Chart\n */\nimport Chart from './core/core.controller.js';\n\nimport * as helpers from './helpers/index.js';\nimport _adapters from './core/core.adapters.js';\nimport Animation from './core/core.animation.js';\nimport animator from './core/core.animator.js';\nimport Animations from './core/core.animations.js';\nimport * as controllers from './controllers/index.js';\nimport DatasetController from './core/core.datasetController.js';\nimport Element from './core/core.element.js';\nimport * as elements from './elements/index.js';\nimport Interaction from './core/core.interaction.js';\nimport layouts from './core/core.layouts.js';\nimport * as platforms from './platform/index.js';\nimport * as plugins from './plugins/index.js';\nimport registry from './core/core.registry.js';\nimport Scale from './core/core.scale.js';\nimport * as scales from './scales/index.js';\nimport Ticks from './core/core.ticks.js';\n\n// Register built-ins\nChart.register(controllers, scales, elements, plugins);\n\nChart.helpers = {...helpers};\nChart._adapters = _adapters;\nChart.Animation = Animation;\nChart.Animations = Animations;\nChart.animator = animator;\nChart.controllers = registry.controllers.items;\nChart.DatasetController = DatasetController;\nChart.Element = Element;\nChart.elements = elements;\nChart.Interaction = Interaction;\nChart.layouts = layouts;\nChart.platforms = platforms;\nChart.Scale = Scale;\nChart.Ticks = Ticks;\n\n// Compatibility with ESM extensions\nObject.assign(Chart, controllers, scales, elements, plugins, platforms);\nChart.Chart = Chart;\n\nif (typeof window !== 'undefined') {\n  window.Chart = Chart;\n}\n\nexport default Chart;\n\n"],"names":["noop","uid","id","isNullOrUndef","value","isArray","Array","type","Object","prototype","toString","call","slice","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","callback","fn","args","thisArg","apply","each","loopable","reverse","i","len","keys","length","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","index","clone","source","map","target","create","klen","k","isValidKey","key","indexOf","_merger","options","tval","sval","merge","sources","merger","current","mergeIf","_mergerIf","hasOwnProperty","keyResolvers","v","x","o","y","_splitKey","parts","split","tmp","part","push","resolveObjectKey","obj","resolver","_getKeyResolver","_capitalize","str","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","size","item","has","_isClickEvent","e","PI","Math","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","range","roundedRange","round","niceRange","pow","floor","fraction","_factorize","result","sqrt","sort","pop","isNumber","n","Symbol","toPrimitive","isNonPrimitive","isNaN","almostWhole","rounded","_setMinAndMaxByKey","array","property","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","isFiniteNumber","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","start","end","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","enumerable","forEach","method","base","res","this","object","unlistenArrayEvents","stub","splice","_arrayUnique","items","set","Set","from","requestAnimFrame","window","requestAnimationFrame","throttled","argsToUse","ticking","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","count","_sorted","iScale","vScale","_parsed","spanGaps","dataset","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","findIndex","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","assign","Animator","constructor","_request","_charts","Map","_running","_lastDate","undefined","_notify","chart","anims","date","callbacks","numSteps","duration","initial","currentStep","_refresh","_update","Date","now","remaining","running","draw","_active","_total","tick","_getAnims","charts","get","complete","progress","listen","event","cb","add","reduce","acc","cur","_duration","stop","cancel","remove","delete","animator","lim","l","h","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","c","d","f","hex","h1","h2","eq","hexString","r","g","isShort","alpha","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","m","exec","p1","p2","hwb2rgb","hsv2rgb","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names","nameParse","unpacked","tkeys","j","ok","nk","replace","parseInt","unpack","transparent","toLowerCase","RGB_RE","to","modHSL","ratio","proto","fromObject","input","functionParse","rgbParse","Color","ret","_rgb","_valid","valid","rgbString","hslString","mix","color","weight","c1","c2","w2","w1","interpolate","t","rgb1","rgb2","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","isPatternOrGradient","getHoverColor","numbers","colors","intlCache","formatNumber","num","locale","cacheKey","JSON","stringify","formatter","Intl","NumberFormat","getNumberFormat","format","formatters","numeric","tickValue","ticks","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","includes","Ticks","overrides","descriptors","getScope","node","root","scope","Defaults","_descriptors","_appliers","animation","backgroundColor","borderColor","datasets","devicePixelRatio","context","platform","getDevicePixelRatio","elements","events","font","family","style","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","override","route","name","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","appliers","defaults","_scriptable","startsWith","_indexable","_fallback","easing","loop","properties","active","resize","show","animations","visible","hide","autoPadding","padding","top","bottom","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dash","dashOffset","width","title","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_isDomSupported","document","_getParentNode","domNode","parent","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","getStyle","el","getPropertyValue","positions","getPositionedStyle","styles","suffix","pos","height","useOffsetPos","shadowRoot","getRelativePosition","canvas","currentDevicePixelRatio","borderBox","boxSizing","paddings","borders","box","touches","offsetX","offsetY","rect","getBoundingClientRect","clientX","clientY","getCanvasPosition","xOffset","yOffset","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxWidth","maxHeight","containerSize","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","addEventListener","removeEventListener","readUsedSize","matches","match","toFontString","_measureText","data","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","halfWidth","clearCanvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","sin","cos","lineTo","SQRT1_2","fill","borderWidth","stroke","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","line","opts","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","fillStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","translation","textAlign","textBaseline","setRenderOpts","backdrop","strokeText","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","_createResolver","scopes","prefixes","rootScopes","fallback","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","prop","_keys","_cached","proxy","prefix","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","isScriptable","getValue","Error","join","_resolveScriptable","isIndexable","arr","filter","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolve","resolveFallback","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","parse","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","capControlPoint","pt","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","atEdge","elasticIn","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","props","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","console","warn","inputs","info","cacheable","_addGrace","minmax","change","keepZero","createContext","parentContext","getRtlAdapter","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","_boundSegment","segment","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","sub","_computeSegments","segmentOptions","_loop","findStartAndEnd","splitByStyles","solidSegments","_fullLoop","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","getSizeForArea","chartArea","field","getDatasetClipArea","_clip","disabled","getDatasetArea","pixelSize","fontStyle","fontFamily","binarySearch","metaset","controller","_cachedMeta","lookupMethod","_reversePixels","_sharedOptions","getRange","evaluateInteractionItems","position","handler","metasets","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","center","getCenterPoint","getNearestItems","startAngle","endAngle","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","getDatasetMeta","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","params","stacks","wrap","stack","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","factor","horizontal","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","update","setBoxDims","placeBoxes","userPadding","addBox","_layers","z","removeBox","layoutItem","configure","minPadding","layoutBoxes","isHorizontal","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","concat","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","total","freeze","updatePos","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","config","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","entries","trigger","entry","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","addListener","DomPlatform","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","interpolators","boolean","c0","helpersColor","number","Animation","cfg","currentValue","_fn","_easing","_start","_target","_prop","_from","_to","_promises","elapsed","wait","promises","Promise","rej","resolved","Animations","_properties","animationOptions","animatedProps","getOwnPropertyNames","option","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","all","awaitAll","then","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","found","isStacked","stacked","getOrCreateStack","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","shift","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","static","_cachedDataOpts","getMeta","_type","_data","_objectData","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","scaleID","_getOtherScale","reset","_destroy","_dataCheck","iAxisKey","vAxisKey","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","hidden","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","toClip","defaultClip","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","Element","tooltipPosition","hasValue","final","tickOpts","determinedMaxTicks","_tickSize","maxScale","_length","maxChart","_maxLength","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","first","newTicks","spacing","ceil","skipMajors","evenMajorSpacing","diff","getEvenSpacing","factors","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","offsetFromEdge","edge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","_startPixel","_endPixel","lineValue","getPixelForTick","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","super","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_cache","_dataLimitsCached","init","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","minSize","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","getValueForPixel","getPixelForDecimal","decimal","getDecimalForPixel","getBasePixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","getLineWidthForValue","drawGrid","drawLine","setLineDash","lineDashOffset","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","tz","gz","bz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","defaultRoutes","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getElement","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","registry","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","plugin","callCallback","cancelable","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","determineAxis","scaleOptions","getAxisFromDataset","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","error","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","initOptions","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","_dataset","buildOrUpdateControllers","newControllers","order","isDatasetVisible","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getElementsAtEventForMode","getVisibleDatasetCount","setDatasetVisibility","toggleDataVisibility","getDataVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","lastEvent","determineLastEvent","abstract","DateAdapterBase","members","formats","startOf","endOf","_adapters","_date","computeMinSampleSize","$bar","visibleMetas","getAllScaleValues","curr","updateMinAndPrev","parseValue","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","borderSkipped","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","DoughnutController","animateRotate","animateScale","cutout","circumference","legend","generateLabels","fontColor","legendItem","innerRadius","outerRadius","getter","_getRotation","_getCircumference","_getRotationExtents","arcs","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","ratioX","ratioY","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerX","centerY","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","PolarAreaController","angleLines","circular","pointLabels","bind","_updateRadius","cutoutPercentage","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","categoryPercentage","barPercentage","grouped","_index_","_value_","bars","ruler","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","currentParsed","iScaleValue","skipNull","find","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","pixels","barThickness","stackCount","baseValue","minBarLength","actualBase","floating","barSign","halfGrid","maxBarThickness","Infinity","axisCount","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","axisNumber","stackIndex","rects","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","pointPosition","getPointPositionForValue","parseBorderRadius","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","fullCircles","inner","lineJoin","angleMargin","clipArc","selfJoin","outerAngleClip","innerAngleClip","clipWidth","clipSelf","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","path","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","_interpolate","_getInterpolationMethod","interpolated","hitRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","outer","skipX","skipY","addNormalRectPath","inflateRect","amount","refRect","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","addRectPath","mouseX","mouseY","inXRange","inYRange","hoverRadius","findOrAddLabel","addedLabels","unshift","addIfString","lastIndexOf","_getLabelForValue","relativeLabelSize","minSpacing","LinearScaleBase","_startValue","_endValue","_valueRange","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","precision","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","decimalPlaces","generateTicks","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","minExp","exp","startExp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","determineLimits","fitWithPointLabels","_padding","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","textSize","updateLimits","setCenterPoint","_pointLabelItems","itemOpts","extra","createPointLabelItem","isNotOverlapped","buildPointLabelItems","hLimits","vLimits","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","labelCount","RadialLinearScale","animate","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","millisecond","common","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","addTick","time","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","adapters","displayFormats","_unit","_majorUnit","_offsets","_normalized","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","weekday","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","_addedLabels","added","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","getColorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","containsColorsDefinitions","plugin_colors","forceOverride","_args","chartOptions","containsColorDefenition","colorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","getStartAndCountOfVisiblePointsSimplified","threshold","decimated","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","above","fillColor","clipVertical","clipHorizontal","doFill","clipY","lineLoop","clipX","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","onLeave","isListened","hoveredItem","sameItem","plugin_legend","_element","afterEvent","ci","useBorderRadius","Title","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","WeakMap","plugin_subtitle","positioners","average","xSet","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","String","createTooltipItem","formattedValue","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","helpers","platforms"],"mappings":"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","x_google_ignoreList":[5]}
Index: node_modules/chart.js/dist/chart.umd.min.js
===================================================================
--- node_modules/chart.js/dist/chart.umd.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chart.umd.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/*!
+ * Chart.js v4.5.0
+ * https://www.chartjs.org
+ * (c) 2025 Chart.js Contributors
+ * Released under the MIT License
+ */
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Object.freeze({__proto__:null,get Colors(){return Jo},get Decimation(){return ta},get Filler(){return ba},get Legend(){return Ma},get SubTitle(){return Pa},get Title(){return ka},get Tooltip(){return Na}});function e(){}const i=(()=>{let t=0;return()=>t++})();function s(t){return null==t}function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function o(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function r(t,e){return a(t)?t:e}function l(t,e){return void 0===t?e:t}const h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,c=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;a<r;a++)e.call(i,t[a],a);else if(o(t))for(l=Object.keys(t),r=l.length,a=0;a<r;a++)e.call(i,t[l[a]],l[a])}function f(t,e){let i,s,n,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,s=t.length;i<s;++i)if(n=t[i],o=e[i],n.datasetIndex!==o.datasetIndex||n.index!==o.index)return!1;return!0}function g(t){if(n(t))return t.map(g);if(o(t)){const e=Object.create(null),i=Object.keys(t),s=i.length;let n=0;for(;n<s;++n)e[i[n]]=g(t[i[n]]);return e}return t}function p(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}function m(t,e,i,s){if(!p(t))return;const n=e[t],a=i[t];o(n)&&o(a)?x(n,a,s):e[t]=g(a)}function x(t,e,i){const s=n(e)?e:[e],a=s.length;if(!o(t))return t;const r=(i=i||{}).merger||m;let l;for(let e=0;e<a;++e){if(l=s[e],!o(l))continue;const n=Object.keys(l);for(let e=0,s=n.length;e<s;++e)r(n[e],t,l,i)}return t}function b(t,e){return x(t,e,{merger:_})}function _(t,e,i){if(!p(t))return;const s=e[t],n=i[t];o(s)&&o(n)?b(s,n):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=g(n))}const y={"":t=>t,x:t=>t.x,y:t=>t.y};function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const C=Math.PI,O=2*C,A=O+C,T=Number.POSITIVE_INFINITY,L=C/180,E=C/2,R=C/4,I=2*C/3,z=Math.log10,F=Math.sign;function V(t,e,i){return Math.abs(t-e)<i}function B(t){const e=Math.round(t);t=V(t,e,t/1e3)?e:t;const i=Math.pow(10,Math.floor(z(t))),s=t/i;return(s<=1?1:s<=2?2:s<=5?5:10)*i}function W(t){const e=[],i=Math.sqrt(t);let s;for(s=1;s<i;s++)t%s==0&&(e.push(s),e.push(t/s));return i===(0|i)&&e.push(i),e.sort(((t,e)=>t-e)).pop(),e}function N(t){return!function(t){return"symbol"==typeof t||"object"==typeof t&&null!==t&&!(Symbol.toPrimitive in t||"toString"in t||"valueOf"in t)}(t)&&!isNaN(parseFloat(t))&&isFinite(t)}function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;s<n;s++)o=t[s][i],isNaN(o)||(e.min=Math.min(e.min,o),e.max=Math.max(e.max,o))}function $(t){return t*(C/180)}function Y(t){return t*(180/C)}function U(t){if(!a(t))return;let e=1,i=0;for(;Math.round(t*e)/e!==t;)e*=10,i++;return i}function X(t,e){const i=e.x-t.x,s=e.y-t.y,n=Math.sqrt(i*i+s*s);let o=Math.atan2(s,i);return o<-.5*C&&(o+=O),{angle:o,distance:n}}function q(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function K(t,e){return(t-e+A)%O-C}function G(t){return(t%O+O)%O}function J(t,e,i,s){const n=G(t),o=G(e),a=G(i),r=G(o-n),l=G(a-n),h=G(n-o),c=G(n-a);return n===o||n===a||s&&o===a||r>l&&h<c}function Z(t,e,i){return Math.max(e,Math.min(i,t))}function Q(t){return Z(t,-32768,32767)}function tt(t,e,i,s=1e-6){return t>=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function et(t,e,i){i=i||(i=>t[i]<e);let s,n=t.length-1,o=0;for(;n-o>1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const it=(t,e,i,s)=>et(t,i,s?s=>{const n=t[s][e];return n<i||n===i&&t[s+1][e]===i}:s=>t[s][e]<i),st=(t,e,i)=>et(t,i,(s=>t[s][e]>=i));function nt(t,e,i){let s=0,n=t.length;for(;s<n&&t[s]<e;)s++;for(;n>s&&t[n-1]>i;)n--;return s>0||n<t.length?t.slice(s,n):t}const ot=["push","pop","shift","splice","unshift"];function at(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),ot.forEach((e=>{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const ht="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function ct(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,ht.call(window,(()=>{s=!1,t.apply(e,i)})))}}function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const ut=t=>"start"===t?"left":"end"===t?"right":"center",ft=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,gt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function pt(t,e,i){const n=e.length;let o=0,a=n;if(t._sorted){const{iScale:r,vScale:l,_parsed:h}=t,c=t.dataset&&t.dataset.options?t.dataset.options.spanGaps:null,d=r.axis,{min:u,max:f,minDefined:g,maxDefined:p}=r.getUserBounds();if(g){if(o=Math.min(it(h,d,u).lo,i?n:it(e,d,r.getPixelForValue(u)).lo),c){const t=h.slice(0,o+1).reverse().findIndex((t=>!s(t[l.axis])));o-=Math.max(0,t)}o=Z(o,0,n-1)}if(p){let t=Math.max(it(h,r.axis,f,!0).hi+1,i?0:it(e,d,r.getPixelForValue(f),!0).hi+1);if(c){const e=h.slice(t-1).findIndex((t=>!s(t[l.axis])));t+=Math.max(0,e)}a=Z(t,o,n)-o}else a=n-o}return{start:o,count:a}}function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}class xt{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=ht.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var bt=new xt;
+/*!
+ * @kurkle/color v0.3.2
+ * https://github.com/kurkle/color#readme
+ * (c) 2023 Jukka Kurkela
+ * Released under the MIT License
+ */function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e<i?6:0):e===n?(i-t)/s+2:(t-e)/s+4}(e,i,s,h,n),r=60*r+.5),[0|r,l||0,a]}function zt(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s)).map(Mt)}function Ft(t,e,i){return zt(Lt,t,e,i)}function Vt(t){return(t%360+360)%360}function Bt(t){const e=Tt.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?vt(+e[5]):Mt(+e[5]));const n=Vt(+e[2]),o=+e[3]/100,a=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return zt(Rt,t,e,i)}(n,o,a):"hsv"===e[1]?function(t,e,i){return zt(Et,t,e,i)}(n,o,a):Ft(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}const Wt={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},Nt={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let Ht;function jt(t){Ht||(Ht=function(){const t={},e=Object.keys(Nt),i=Object.keys(Wt);let s,n,o,a,r;for(s=0;s<e.length;s++){for(a=r=e[s],n=0;n<i.length;n++)o=i[n],r=r.replace(o,Wt[o]);o=parseInt(Nt[a],16),t[r]=[o>>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=Ft(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function qt(t,e){return t?Object.assign(e||{},t):t}function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Mt(t[3]))):(e=qt(t,{r:0,g:0,b:0,a:1})).a=Mt(e.a),e}function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?vt(t):yt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?vt(i):yt(i,0,255)),s=255&(e[4]?vt(s):yt(s,0,255)),n=255&(e[6]?vt(n):yt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Bt(t)}class Jt{constructor(t){if(t instanceof Jt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Kt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*St[s[1]],g:255&17*St[s[2]],b:255&17*St[s[3]],a:5===o?17*St[s[4]]:255}:7!==o&&9!==o||(n={r:St[s[1]]<<4|St[s[2]],g:St[s[3]]<<4|St[s[4]],b:St[s[5]]<<4|St[s[6]],a:9===o?St[s[7]]<<4|St[s[8]]:255})),i=n||jt(t)||Gt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}set rgb(t){this._rgb=Kt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${wt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?At(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=It(t),i=e[0],s=kt(e[1]),n=kt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${wt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t.r)),n=Ut(wt(t.g)),o=Ut(wt(t.b));return{r:Mt(Yt(s+i*(Ut(wt(e.r))-s))),g:Mt(Yt(n+i*(Ut(wt(e.g))-n))),b:Mt(Yt(o+i*(Ut(wt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Jt(this.rgb)}alpha(t){return this._rgb.a=Mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Xt(this._rgb,2,t),this}darken(t){return Xt(this._rgb,2,-t),this}saturate(t){return Xt(this._rgb,1,t),this}desaturate(t){return Xt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Zt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Qt(t){return Zt(t)?t:new Jt(t)}function te(t){return Zt(t)?t:new Jt(t).saturate(.5).darken(.1).hexString()}const ee=["x","y","borderWidth","radius","tension"],ie=["color","borderColor","backgroundColor"];const se=new Map;function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=se.get(i);return s||(s=new Intl.NumberFormat(t,e),se.set(i,s)),s}(e,i).format(t)}const oe={values:t=>n(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=z(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ne(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(z(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?oe.numeric.call(this,t,e,i):""}};var ae={formatters:oe};const re=Object.create(null),le=Object.create(null);function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;e<s;++e){const s=i[e];t=t[s]||(t[s]=Object.create(null))}return t}function ce(t,e,i){return"string"==typeof e?x(he(t,e),i):x(he(t,""),e)}class de{constructor(t,e){this.animation=void 0,this.backgroundColor="rgba(0,0,0,0.1)",this.borderColor="rgba(0,0,0,0.1)",this.color="#666",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>te(e.backgroundColor),this.hoverBorderColor=(t,e)=>te(e.borderColor),this.hoverColor=(t,e)=>te(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ce(this,t,e)}get(t){return he(this,t)}describe(t,e){return ce(le,t,e)}override(t,e){return ce(re,t,e)}route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.defineProperties(n,{[r]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[r],e=a[s];return o(t)?Object.assign({},e,t):l(t,e)},set(t){this[r]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ue=new de({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:ie},numbers:{type:"number",properties:ee}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ae.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function fe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const me=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function xe(t,e){return me(t).getPropertyValue(e)}const be=["top","right","bottom","left"];function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=be[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const ye=(t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot);function ve(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=me(i),o="border-box"===n.boxSizing,a=_e(n,"padding"),r=_e(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(ye(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const Me=t=>Math.round(10*t)/10;function we(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"clientWidth")||T,r=pe(n.maxHeight,t,"clientHeight")||T,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=t&&ge(t);if(o){const t=o.getBoundingClientRect(),a=me(o),r=_e(a,"border","width"),l=_e(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=pe(a.maxWidth,o,"clientWidth"),n=pe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||T,maxHeight:n||T}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=_e(n,"border","width"),e=_e(n,"padding");h-=e.width+t.width,c-=e.height+t.height}h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=Me(Math.min(h,a,l.maxWidth)),c=Me(Math.min(c,r,l.maxHeight)),h&&!c&&(c=Me(h/2));return(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=Me(Math.floor(c*s))),{width:h,height:c}}function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Se=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};fe()&&(window.addEventListener("test",null,e),window.removeEventListener("test",null,e))}catch(t){}return t}();function Pe(t,e){const i=xe(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function De(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Ce(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Oe(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(o=s.data={},a=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;h<l;h++)if(u=i[h],null==u||n(u)){if(n(u))for(c=0,d=u.length;c<d;c++)f=u[c],null==f||n(f)||(r=Ce(t,o,a,r,f))}else r=Ce(t,o,a,r,u);t.restore();const g=a.length/2;if(g>i.length){for(h=0;h<g;h++)delete o[a[h]];a.splice(0,g)}return r}function Ae(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i/2,.5):0;return Math.round((e-n)*s)/s+n}function Te(t,e){(e||t)&&((e=e||t.getContext("2d")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore())}function Le(t,e,i,s){Ee(t,e,i,s,null)}function Ee(t,e,i,s,n){let o,a,r,l,h,c,d,u;const f=e.pointStyle,g=e.rotation,p=e.radius;let m=(g||0)*L;if(f&&"object"==typeof f&&(o=f.toString(),"[object HTMLImageElement]"===o||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,s),t.rotate(m),t.drawImage(f,-f.width/2,-f.height/2,f.width,f.height),void t.restore();if(!(isNaN(p)||p<=0)){switch(t.beginPath(),f){default:n?t.ellipse(i,s,n/2,p,0,0,O):t.arc(i,s,p,0,O),t.closePath();break;case"triangle":c=n?n/2:p,t.moveTo(i+Math.sin(m)*c,s-Math.cos(m)*p),m+=I,t.lineTo(i+Math.sin(m)*c,s-Math.cos(m)*p),m+=I,t.lineTo(i+Math.sin(m)*c,s-Math.cos(m)*p),t.closePath();break;case"rectRounded":h=.516*p,l=p-h,a=Math.cos(m+R)*l,d=Math.cos(m+R)*(n?n/2-h:l),r=Math.sin(m+R)*l,u=Math.sin(m+R)*(n?n/2-h:l),t.arc(i-d,s-r,h,m-C,m-E),t.arc(i+u,s-a,h,m-E,m),t.arc(i+d,s+r,h,m,m+E),t.arc(i-u,s+a,h,m+E,m+C),t.closePath();break;case"rect":if(!g){l=Math.SQRT1_2*p,c=n?n/2:l,t.rect(i-c,s-l,2*c,2*l);break}m+=R;case"rectRot":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+u,s-a),t.lineTo(i+d,s+r),t.lineTo(i-u,s+a),t.closePath();break;case"crossRot":m+=R;case"cross":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a);break;case"star":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a),m+=R,d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a);break;case"line":a=n?n/2:Math.cos(m)*p,r=Math.sin(m)*p,t.moveTo(i-a,s-r),t.lineTo(i+a,s+r);break;case"dash":t.moveTo(i,s),t.lineTo(i+Math.cos(m)*(n?n/2:p),s+Math.sin(m)*p);break;case!1:t.closePath()}t.fill(),e.borderWidth>0&&t.stroke()}}function Re(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.x<e.right+i&&t.y>e.top-i&&t.y<e.bottom+i}function Ie(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function ze(t){t.restore()}function Fe(t,e,i,s,n){if(!e)return t.lineTo(i.x,i.y);if("middle"===n){const s=(e.x+i.x)/2;t.lineTo(s,e.y),t.lineTo(s,i.y)}else"after"===n!=!!s?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}function Ve(t,e,i,s){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(s?e.cp1x:e.cp2x,s?e.cp1y:e.cp2y,s?i.cp2x:i.cp1x,s?i.cp2y:i.cp1y,i.x,i.y)}function Be(t,e,i,s,n){if(n.strikethrough||n.underline){const o=t.measureText(s),a=e-o.actualBoundingBoxLeft,r=e+o.actualBoundingBoxRight,l=i-o.actualBoundingBoxAscent,h=i+o.actualBoundingBoxDescent,c=n.strikethrough?(l+h)/2:h;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=n.decorationWidth||2,t.moveTo(a,c),t.lineTo(r,c),t.stroke()}}function We(t,e){const i=t.fillStyle;t.fillStyle=e.color,t.fillRect(e.left,e.top,e.width,e.height),t.fillStyle=i}function Ne(t,e,i,o,a,r={}){const l=n(e)?e:[e],h=r.strokeWidth>0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),s(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;c<l.length;++c)d=l[c],r.backdrop&&We(t,r.backdrop),h&&(r.strokeColor&&(t.strokeStyle=r.strokeColor),s(r.strokeWidth)||(t.lineWidth=r.strokeWidth),t.strokeText(d,i,o,r.maxWidth)),t.fillText(d,i,o,r.maxWidth),Be(t,i,o,d,r),o+=Number(a.lineHeight);t.restore()}function He(t,e){const{x:i,y:s,w:n,h:o,radius:a}=e;t.arc(i+a.topLeft,s+a.topLeft,a.topLeft,1.5*C,C,!0),t.lineTo(i,s+o-a.bottomLeft),t.arc(i+a.bottomLeft,s+o-a.bottomLeft,a.bottomLeft,C,E,!0),t.lineTo(i+n-a.bottomRight,s+o),t.arc(i+n-a.bottomRight,s+o-a.bottomRight,a.bottomRight,E,0,!0),t.lineTo(i+n,s+a.topRight),t.arc(i+n-a.topRight,s+a.topRight,a.topRight,0,-E,!0),t.lineTo(i+a.topLeft,s)}function je(t,e=[""],i,s,n=(()=>t[0])){const o=i||t;void 0===s&&(s=ti("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>je([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>qe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=ti(Ue(o,t),i),void 0!==n)return Xe(t,n)?Ze(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ei(t).includes(e),ownKeys:t=>ei(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function $e(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ye(t,s),setContext:e=>$e(t,e,i,s),override:n=>$e(t.override(n),e,i,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>qe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:a,_subProxy:r,_descriptors:l}=t;let h=s[e];S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let l=e(o,a||s);r.delete(t),Xe(t,l)&&(l=Ze(n._scopes,n,t,l));return l}(e,h,t,i));n(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:a,_subProxy:r,_descriptors:l}=i;if(void 0!==a.index&&s(t))return e[a.index%e.length];if(o(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const o of i){const i=Ze(s,n,t,o);e.push($e(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Xe(e,h)&&(h=$e(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ye(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Ue=(t,e)=>t?t+w(e):e,Xe=(t,e)=>o(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function qe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e)||"constructor"===e)return t[e];const s=i();return t[e]=s,s}function Ke(t,e,i){return S(t)?t(e,i):t}const Ge=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Je(t,e,i,s,n){for(const o of e){const e=Ge(i,o);if(e){t.add(e);const o=Ke(e._fallback,i,n);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}return!1}function Ze(t,e,i,s){const a=e._rootScopes,r=Ke(e._fallback,i,s),l=[...t,...a],h=new Set;h.add(s);let c=Qe(h,l,i,r||i,s);return null!==c&&((void 0===r||r===i||(c=Qe(h,l,r,c,s),null!==c))&&je(Array.from(h),[""],a,r,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const a=s[e];if(n(a)&&o(i))return i;return a||{}}(e,i,s))))}function Qe(t,e,i,s,n){for(;i;)i=Je(t,e,i,s,n);return i}function ti(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0!==e)return e}}function ei(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ii(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;r<l;++r)h=r+i,c=e[h],a[r]={r:n.parse(M(c,o),h)};return a}const si=Number.EPSILON||1e-14,ni=(t,e)=>e<t.length&&!t[e].skip&&t[e],oi=t=>"x"===t?"y":"x";function ai(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function ri(t,e="x"){const i=oi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=ni(t,0);for(a=0;a<s;++a)if(r=l,l=h,h=ni(t,a+1),l){if(h){const t=h[e]-l[e];n[a]=0!==t?(h[i]-l[i])/t:0}o[a]=r?h?F(n[a-1])!==F(n[a])?0:(n[a-1]+n[a])/2:n[a-1]:n[a]}!function(t,e,i){const s=t.length;let n,o,a,r,l,h=ni(t,0);for(let c=0;c<s-1;++c)l=h,h=ni(t,c+1),l&&h&&(V(e[c],0,si)?i[c]=i[c+1]=0:(n=i[c]/e[c],o=i[c+1]/e[c],r=Math.pow(n,2)+Math.pow(o,2),r<=9||(a=3/Math.sqrt(r),i[c]=n*a*e[c],i[c+1]=o*a*e[c])))}(t,n,o),function(t,e,i="x"){const s=oi(i),n=t.length;let o,a,r,l=ni(t,0);for(let h=0;h<n;++h){if(a=r,r=l,l=ni(t,h+1),!r)continue;const n=r[i],c=r[s];a&&(o=(n-a[i])/3,r[`cp1${i}`]=n-o,r[`cp1${s}`]=c-o*e[h]),l&&(o=(l[i]-n)/3,r[`cp2${i}`]=n+o,r[`cp2${s}`]=c+o*e[h])}}(t,o,e)}function li(t,e,i){return Math.max(Math.min(t,i),e)}function hi(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),"monotone"===e.cubicInterpolationMode)ri(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o<a;++o)r=t[o],l=ai(i,r,t[Math.min(o+1,a-(s?0:1))%a],e.tension),r.cp1x=l.previous.x,r.cp1y=l.previous.y,r.cp2x=l.next.x,r.cp2y=l.next.y,i=r}e.capBezierPoints&&function(t,e){let i,s,n,o,a,r=Re(t[0],e);for(i=0,s=t.length;i<s;++i)a=o,o=r,r=i<s-1&&Re(t[i+1],e),o&&(n=t[i],a&&(n.cp1x=li(n.cp1x,e.left,e.right),n.cp1y=li(n.cp1y,e.top,e.bottom)),r&&(n.cp2x=li(n.cp2x,e.left,e.right),n.cp2y=li(n.cp2y,e.top,e.bottom)))}(t,i)}const ci=t=>0===t||1===t,di=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),ui=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,fi={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*E),easeOutSine:t=>Math.sin(t*E),easeInOutSine:t=>-.5*(Math.cos(C*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>ci(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>ci(t)?t:di(t,.075,.3),easeOutElastic:t=>ci(t)?t:ui(t,.075,.3),easeInOutElastic(t){const e=.1125;return ci(t)?t:t<.5?.5*di(2*t,e,.45):.5+.5*ui(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-fi.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*fi.easeInBounce(2*t):.5*fi.easeOutBounce(2*t-1)+.5};function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function pi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function mi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=gi(t,n,i),r=gi(n,o,i),l=gi(o,e,i),h=gi(a,r,i),c=gi(r,l,i);return gi(h,c,i)}const xi=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,bi=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function _i(t,e){const i=(""+t).match(xi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}const yi=t=>+t||0;function vi(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=yi(a(t));return i}function Mi(t){return vi(t,{top:"y",right:"x",bottom:"y",left:"x"})}function wi(t){return vi(t,["topLeft","topRight","bottomLeft","bottomRight"])}function ki(t){const e=Mi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Si(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=l(t.style,e.style);s&&!(""+s).match(bi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:l(t.family,e.family),lineHeight:_i(l(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:l(t.weight,e.weight),string:""};return n.string=De(n),n}function Pi(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;o<a;++o)if(r=t[o],void 0!==r&&(void 0!==e&&"function"==typeof r&&(r=r(e),l=!1),void 0!==i&&n(r)&&(r=r[i%r.length],l=!1),void 0!==r))return s&&!l&&(s.cacheable=!1),r}function Di(t,e,i){const{min:s,max:n}=t,o=c(e,(n-s)/2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Ci(t,e){return Object.assign(Object.create(t),e)}function Oi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ai(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Ti(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Li(t){return"angle"===t?{between:J,compare:K,normalize:G}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ei({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Ri(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Li(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Li(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;h<c&&a(r(e[d%l][s]),n,o);++h)d--,u--;d%=l,u%=l}return u<d&&(u+=l),{start:d,end:u,loop:f,style:t.style}}(t,e,i),g=[];let p,m,x,b=!1,_=null;const y=()=>b||l(n,x,p)&&0!==r(n,x),v=()=>!b||0===r(o,p)||l(o,x,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==x&&(b=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Ei({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,x=p));return null!==_&&g.push(Ei({start:_,end:d,loop:u,count:a,style:f})),g}function Ii(t,e){const i=[],s=t.segments;for(let n=0;n<s.length;n++){const o=Ri(s[n],t.points,e);o.length&&i.push(...o)}return i}function zi(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;n<e&&!t[n].skip;)n++;for(;n<e&&t[n].skip;)n++;for(n%=e,i&&(o+=n);o>n&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Fi(t,[{start:a,end:r,loop:o}],i,e);return Fi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r<a?r+n:r,!!t._fullLoop&&0===a&&r===n-1),i,e)}function Fi(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n=t._chart.getContext(),o=Vi(t.options),{_datasetIndex:a,options:{spanGaps:r}}=t,l=i.length,h=[];let c=o,d=e[0].start,u=d;function f(t,e,s,n){const o=r?-1:1;if(t!==e){for(t+=l;i[t%l].skip;)t-=o;for(;i[e%l].skip;)e+=o;t%l!=e%l&&(h.push({start:t%l,end:e%l,loop:s,style:n}),c=n,d=e%l)}}for(const t of e){d=r?d:t.start;let e,o=i[d%l];for(u=d+1;u<=t.end;u++){const r=i[u%l];e=Vi(s.setContext(Ci(n,{type:"segment",p0:o,p1:r,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),Bi(e,c)&&f(d,u-1,t.loop,c),o=r,c=e}d<u-1&&f(d,u-1,t.loop,c)}return h}(t,e,i,s):e}function Vi(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function Bi(t,e){if(!e)return!1;const i=[],s=function(t,e){return Zt(e)?(i.includes(e)||i.push(e),i.indexOf(e)):e};return JSON.stringify(t,s)!==JSON.stringify(e,s)}function Wi(t,e,i){return t.options.clip?t[i]:e[i]}function Ni(t,e){const i=e._clip;if(i.disabled)return!1;const s=function(t,e){const{xScale:i,yScale:s}=t;return i&&s?{left:Wi(i,e,"left"),right:Wi(i,e,"right"),top:Wi(s,e,"top"),bottom:Wi(s,e,"bottom")}:e}(e,t.chartArea);return{left:!1===i.left?0:s.left-(!0===i.left?0:i.left),right:!1===i.right?t.width:s.right+(!0===i.right?0:i.right),top:!1===i.top?0:s.top-(!0===i.top?0:i.top),bottom:!1===i.bottom?t.height:s.bottom+(!0===i.bottom?0:i.bottom)}}var Hi=Object.freeze({__proto__:null,HALF_PI:E,INFINITY:T,PI:C,PITAU:A,QUARTER_PI:R,RAD_PER_DEG:L,TAU:O,TWO_THIRDS_PI:I,_addGrace:Di,_alignPixel:Ae,_alignStartEnd:ft,_angleBetween:J,_angleDiff:K,_arrayUnique:lt,_attachContext:$e,_bezierCurveTo:Ve,_bezierInterpolation:mi,_boundSegment:Ri,_boundSegments:Ii,_capitalize:w,_computeSegments:zi,_createResolver:je,_decimalPlaces:U,_deprecated:function(t,e,i,s){void 0!==e&&console.warn(t+': "'+i+'" is deprecated. Please use "'+s+'" instead')},_descriptors:Ye,_elementsEqual:f,_factorize:W,_filterBetween:nt,_getParentNode:ge,_getStartAndCountOfVisiblePoints:pt,_int16Range:Q,_isBetween:tt,_isClickEvent:D,_isDomSupported:fe,_isPointInArea:Re,_limitValue:Z,_longestText:Oe,_lookup:et,_lookupByKey:it,_measureText:Ce,_merger:m,_mergerIf:_,_normalizeAngle:G,_parseObjectDataRadialScale:ii,_pointInLine:gi,_readValueToProps:vi,_rlookupByKey:st,_scaleRangesChanged:mt,_setMinAndMaxByKey:j,_splitKey:v,_steppedInterpolation:pi,_steppedLineTo:Fe,_textX:gt,_toLeftRightCenter:ut,_updateBezierControlPoints:hi,addRoundedRectPath:He,almostEquals:V,almostWhole:H,callback:d,clearCanvas:Te,clipArea:Ie,clone:g,color:Qt,createContext:Ci,debounce:dt,defined:k,distanceBetweenPoints:q,drawPoint:Le,drawPointLegend:Ee,each:u,easingEffects:fi,finiteOrDefault:r,fontString:function(t,e,i){return e+" "+t+"px "+i},formatNumber:ne,getAngleFromPoint:X,getDatasetClipArea:Ni,getHoverColor:te,getMaximumSize:we,getRelativePosition:ve,getRtlAdapter:Oi,getStyle:xe,isArray:n,isFinite:a,isFunction:S,isNullOrUndef:s,isNumber:N,isObject:o,isPatternOrGradient:Zt,listenArrayEvents:at,log10:z,merge:x,mergeIf:b,niceNum:B,noop:e,overrideTextDirection:Ai,readUsedSize:Pe,renderText:Ne,requestAnimFrame:ht,resolve:Pi,resolveObjectKey:M,restoreTextDirection:Ti,retinaScale:ke,setsEqual:P,sign:F,splineCurve:ai,splineCurveMonotone:ri,supportsEventListenerOptions:Se,throttled:ct,toDegrees:Y,toDimension:c,toFont:Si,toFontString:De,toLineHeight:_i,toPadding:ki,toPercentage:h,toRadians:$,toTRBL:Mi,toTRBLCorners:wi,uid:i,unclipArea:ze,unlistenArrayEvents:rt,valueOrDefault:l});function ji(t,e,i,n){const{controller:o,data:a,_sorted:r}=t,l=o._cachedMeta.iScale,h=t.dataset&&t.dataset.options?t.dataset.options.spanGaps:null;if(l&&e===l.axis&&"r"!==e&&r&&a.length){const r=l._reversePixels?st:it;if(!n){const n=r(a,e,i);if(h){const{vScale:e}=o._cachedMeta,{_parsed:i}=t,a=i.slice(0,n.lo+1).reverse().findIndex((t=>!s(t[e.axis])));n.lo-=Math.max(0,a);const r=i.slice(n.hi).findIndex((t=>!s(t[e.axis])));n.hi+=Math.max(0,r)}return n}if(o._sharedOptions){const t=a[0],s="function"==typeof t.getRange&&t.getRange(e);if(s){const t=r(a,e,i-s),n=r(a,e,i+s);return{lo:t.lo,hi:n.hi}}}}return{lo:0,hi:a.length-1}}function $i(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t<i;++t){const{index:i,data:r}=o[t],{lo:l,hi:h}=ji(o[t],e,a,n);for(let t=l;t<=h;++t){const e=r[t];e.skip||s(e,i,t)}}}function Yi(t,e,i,s,n){const o=[];if(!n&&!t.isPointInArea(e))return o;return $i(t,i,e,(function(i,a,r){(n||Re(i,t.chartArea,0))&&i.inRange(e.x,e.y,s)&&o.push({element:i,datasetIndex:a,index:r})}),!0),o}function Ui(t,e,i,s,n,o){let a=[];const r=function(t){const e=-1!==t.indexOf("x"),i=-1!==t.indexOf("y");return function(t,s){const n=e?Math.abs(t.x-s.x):0,o=i?Math.abs(t.y-s.y):0;return Math.sqrt(Math.pow(n,2)+Math.pow(o,2))}}(i);let l=Number.POSITIVE_INFINITY;return $i(t,i,e,(function(i,h,c){const d=i.inRange(e.x,e.y,n);if(s&&!d)return;const u=i.getCenterPoint(n);if(!(!!o||t.isPointInArea(u))&&!d)return;const f=r(e,u);f<l?(a=[{element:i,datasetIndex:h,index:c}],l=f):f===l&&a.push({element:i,datasetIndex:h,index:c})})),a}function Xi(t,e,i,s,n,o){return o||t.isPointInArea(e)?"r"!==i||s?Ui(t,e,i,s,n,o):function(t,e,i,s){let n=[];return $i(t,i,e,(function(t,i,o){const{startAngle:a,endAngle:r}=t.getProps(["startAngle","endAngle"],s),{angle:l}=X(t,{x:e.x,y:e.y});J(l,a,r)&&n.push({element:t,datasetIndex:i,index:o})})),n}(t,e,i,n):[]}function qi(t,e,i,s,n){const o=[],a="x"===i?"inXRange":"inYRange";let r=!1;return $i(t,i,e,((t,s,l)=>{t[a]&&t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Ki={evaluateInteractionItems:$i,modes:{index(t,e,i,s){const n=ve(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?Yi(t,n,o,s,a):Xi(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?Yi(t,n,o,s,a):Xi(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;t<i.length;++t)r.push({element:i[t],datasetIndex:e,index:t})}return r},point:(t,e,i,s)=>Yi(t,ve(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return Xi(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>qi(t,ve(e,t),"x",i.intersect,s),y:(t,e,i,s)=>qi(t,ve(e,t),"y",i.intersect,s)}};const Gi=["left","top","right","bottom"];function Ji(t,e){return t.filter((t=>t.pos===e))}function Zi(t,e){return t.filter((t=>-1===Gi.indexOf(t.pos)&&t.box.axis===e))}function Qi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function ts(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Gi.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o<a;++o){r=t[o];const{fullSize:a}=r.box,l=i[r.stack],h=l&&r.stackWeight/l.weight;r.horizontal?(r.width=h?h*s:a&&e.availableWidth,r.height=n):(r.width=s,r.height=h?h*n:a&&e.availableHeight)}return i}function es(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}function is(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function ss(t,e,i,s){const{pos:n,box:a}=i,r=t.maxPadding;if(!o(n)){i.size&&(t[n]-=i.size);const e=s[i.stack]||{size:0,count:1};e.size=Math.max(e.size,i.horizontal?a.height:a.width),i.size=e.size/e.count,t[n]+=i.size}a.getPadding&&is(r,a.getPadding());const l=Math.max(0,e.outerWidth-es(r,t,"left","right")),h=Math.max(0,e.outerHeight-es(r,t,"top","bottom")),c=l!==t.w,d=h!==t.h;return t.w=l,t.h=h,i.horizontal?{same:c,other:d}:{same:d,other:c}}function ns(t,e){const i=e.maxPadding;function s(t){const s={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function os(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;o<a;++o){r=t[o],l=r.box,l.update(r.width||e.w,r.height||e.h,ns(r.horizontal,e));const{same:a,other:d}=ss(e,i,r,s);h|=a&&n.length,c=c||d,l.fullSize||n.push(r)}return h&&os(n,e,i,s)||c}function as(t,e,i,s,n){t.top=i,t.left=e,t.right=e+s,t.bottom=i+n,t.width=s,t.height=n}function rs(t,e,i,s){const n=i.padding;let{x:o,y:a}=e;for(const r of t){const t=r.box,l=s[r.stack]||{count:1,placed:0,weight:1},h=r.stackWeight/l.weight||1;if(r.horizontal){const s=e.w*h,o=l.size||t.height;k(l.start)&&(a=l.start),t.fullSize?as(t,n.left,a,i.outerWidth-n.right-n.left,o):as(t,e.left+l.placed,a,s,o),l.start=a,l.placed+=s,a=t.bottom}else{const s=e.h*h,a=l.size||t.width;k(l.start)&&(o=l.start),t.fullSize?as(t,o,n.top,a,i.outerHeight-n.bottom-n.top):as(t,o,e.top+l.placed,a,s),l.start=o,l.placed+=s,o=t.right}}e.x=o,e.y=a}var ls={addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw(t){e.draw(t)}}]},t.boxes.push(e)},removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i.weight},update(t,e,i,s){if(!t)return;const n=ki(t.options.layout.padding),o=Math.max(e-n.width,0),a=Math.max(i-n.height,0),r=function(t){const e=function(t){const e=[];let i,s,n,o,a,r;for(i=0,s=(t||[]).length;i<s;++i)n=t[i],({position:o,options:{stack:a,stackWeight:r=1}}=n),e.push({index:i,box:n,pos:o,horizontal:n.isHorizontal(),weight:n.weight,stack:a&&o+a,stackWeight:r});return e}(t),i=Qi(e.filter((t=>t.box.fullSize)),!0),s=Qi(Ji(e,"left"),!0),n=Qi(Ji(e,"right")),o=Qi(Ji(e,"top"),!0),a=Qi(Ji(e,"bottom")),r=Zi(e,"x"),l=Zi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ji(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;u(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);is(f,ki(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=ts(l.concat(h),d);os(r.fullSize,g,d,p),os(l,g,d,p),os(h,g,d,p)&&os(l,g,d,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),rs(r.leftAndTop,g,d,p),g.x+=g.w,g.y+=g.h,rs(r.rightAndBottom,g,d,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},u(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class hs{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class cs extends hs{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const ds="$chartjs",us={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},fs=t=>null===t||""===t;const gs=!!Se&&{passive:!0};function ps(t,e,i){t&&t.canvas&&t.canvas.removeEventListener(e,i,gs)}function ms(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function xs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ms(i.addedNodes,s),e=e&&!ms(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function bs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ms(i.removedNodes,s),e=e&&!ms(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const _s=new Map;let ys=0;function vs(){const t=window.devicePixelRatio;t!==ys&&(ys=t,_s.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function Ms(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct(((t,e)=>{const s=n.clientWidth;i(t,e),s<n.clientWidth&&i()}),window),a=new ResizeObserver((t=>{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){_s.size||window.addEventListener("resize",vs),_s.set(t,e)}(t,o),a}function ws(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){_s.delete(t),_s.size||window.removeEventListener("resize",vs)}(t)}function ks(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t,e){const i=us[t.type]||t.type,{x:s,y:n}=ve(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t&&t.addEventListener(e,i,gs)}(s,e,n),n}class Ss extends hs{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t[ds]={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",fs(n)){const e=Pe(t,"width");void 0!==e&&(t.width=e)}if(fs(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Pe(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[ds])return!1;const i=e[ds].initial;["height","width"].forEach((t=>{const n=i[t];s(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e[ds],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:xs,detach:bs,resize:Ms}[e]||ks;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:ws,detach:ws,resize:ws}[e]||ps)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return we(t,e,i,s)}isAttached(t){const e=t&&ge(t);return!(!e||!e.isConnected)}}function Ps(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?cs:Ss}var Ds=Object.freeze({__proto__:null,BasePlatform:hs,BasicPlatform:cs,DomPlatform:Ss,_detectPlatform:Ps});const Cs="transparent",Os={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Qt(t||Cs),n=s.valid&&Qt(e||Cs);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class As{constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const o=Pi([t.from,n,s]);this._active=!0,this._fn=t.fn||Os[t.type||typeof o],this._easing=fi[t.easing]||fi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Pi([t.to,e,s,t.from]),this._from=Pi([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e<i),!this._active)return this._target[s]=a,void this._notify(!0);e<0?this._target[s]=n:(r=e/i%2,r=o&&r>1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t<i.length;t++)i[t][e]()}}class Ts{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!o(t))return;const e=Object.keys(ue.animation),i=this._properties;Object.getOwnPropertyNames(t).forEach((s=>{const a=t[s];if(!o(a))return;const r={};for(const t of e)r[t]=a[t];(n(a.properties)&&a.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,r)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e<s.length;e++){const n=t[s[e]];n&&n.active()&&i.push(n.wait())}return Promise.all(i)}(t.options.$animations,i).then((()=>{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new As(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(bt.add(this._chart,i),!0):void 0}}function Ls(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Es(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n<o;++n)i.push(s[n].index);return i}function Rs(t,e,i,s={}){const n=t.keys,o="single"===s.mode;let r,l,h,c;if(null===e)return;let d=!1;for(r=0,l=n.length;r<l;++r){if(h=+n[r],h===i){if(d=!0,s.all)continue;break}c=t.values[h],a(c)&&(o||0===e||F(e)===F(c))&&(e+=c)}return d||s.all?e:0}function Is(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void 0!==e.stack}function zs(t,e,i){const s=t[e]||(t[e]={});return s[i]||(s[i]={})}function Fs(t,e,i,s){for(const n of e.getMatchingVisibleMetas(s).reverse()){const e=t[n.index];if(i&&e>0||!i&&e<0)return n.index}return null}function Vs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;t<d;++t){const i=e[t],{[l]:o,[h]:d}=i;u=(i._stacks||(i._stacks={}))[h]=zs(n,c,o),u[r]=d,u._top=Fs(u,a,!0,s.type),u._bottom=Fs(u,a,!1,s.type);(u._visualValues||(u._visualValues={}))[r]=d}}function Bs(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t].axis===e)).shift()}function Ws(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Ns=t=>"reset"===t||"none"===t,Hs=(t,e)=>e?t:Object.assign({},t);class js{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Is(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Ws(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=l(i.xAxisID,Bs(t,"x")),o=e.yAxisID=l(i.yAxisID,Bs(t,"y")),a=e.rAxisID=l(i.rAxisID,Bs(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),c=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t._stacked&&Ws(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(o(e)){const t=this._cachedMeta;this._data=function(t,e){const{iScale:i,vScale:s}=e,n="x"===i.axis?"x":"y",o="x"===s.axis?"x":"y",a=Object.keys(t),r=new Array(a.length);let l,h,c;for(l=0,h=a.length;l<h;++l)c=a[l],r[l]={[n]:c,[o]:t[c]};return r}(e,t)}else if(i!==e){if(i){rt(i,this);const t=this._cachedMeta;Ws(t),t._parsed=[]}e&&Object.isExtensible(e)&&at(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=Is(e.vScale,e),e.stack!==i.stack&&(s=!0,Ws(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&(Vs(this,e._parsed),e._stacked=Is(e.vScale,e))}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:a,_stacked:r}=i,l=a.axis;let h,c,d,u=0===t&&e===s.length||i._sorted,f=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=n(s[t])?this.parseArrayData(i,s,t,e):o(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const a=()=>null===c[l]||f&&c[l]<f[l];for(h=0;h<e;++h)i._parsed[h+t]=c=d[h],u&&(a()&&(u=!1),f=c);i._sorted=u}r&&Vs(this,d)}parsePrimitiveData(t,e,i,s){const{iScale:n,vScale:o}=t,a=n.axis,r=o.axis,l=n.getLabels(),h=n===o,c=new Array(s);let d,u,f;for(d=0,u=s;d<u;++d)f=d+i,c[d]={[a]:h||n.parse(l[f],f),[r]:o.parse(e[f],f)};return c}parseArrayData(t,e,i,s){const{xScale:n,yScale:o}=t,a=new Array(s);let r,l,h,c;for(r=0,l=s;r<l;++r)h=r+i,c=e[h],a[r]={x:n.parse(c[0],h),y:o.parse(c[1],h)};return a}parseObjectData(t,e,i,s){const{xScale:n,yScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l=new Array(s);let h,c,d,u;for(h=0,c=s;h<c;++h)d=h+i,u=e[d],l[h]={x:n.parse(M(u,a),d),y:o.parse(M(u,r),d)};return l}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,i){const s=this.chart,n=this._cachedMeta,o=e[t.axis];return Rs({keys:Es(s,!0),values:e._stacks[t.axis]._visualValues},o,n.index,{mode:i})}updateRangeFromParsed(t,e,i,s){const n=i[e.axis];let o=null===n?NaN:n;const a=s&&i._stacks[e.axis];s&&a&&(s.values=a,o=Rs(s,n,this._cachedMeta.index)),t.min=Math.min(t.min,o),t.max=Math.max(t.max,o)}getMinMax(t,e){const i=this._cachedMeta,s=i._parsed,n=i._sorted&&t===i.iScale,o=s.length,r=this._getOtherScale(t),l=((t,e,i)=>t&&!e.hidden&&e._stacked&&{keys:Es(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!a(f[t.axis])||c>e||d<e}for(u=0;u<o&&(g()||(this.updateRangeFromParsed(h,t,f,l),!n));++u);if(n)for(u=o-1;u>=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s<n;++s)o=e[s][t.axis],a(o)&&i.push(o);return i}getMaxOverflow(){return!1}getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,s=e.vScale,n=this.getParsed(t);return{label:i?""+i.getLabelForValue(n[i.axis]):"",value:s?""+s.getLabelForValue(n[s.axis]):""}}_update(t){const e=this._cachedMeta;this.update(t||"default"),e._clip=function(t){let e,i,s,n;return o(t)?(e=t.top,i=t.right,s=t.bottom,n=t.left):e=i=s=n=t,{top:e,right:i,bottom:s,left:n,disabled:!1===t}}(l(this.options.clip,function(t,e,i){if(!1===i)return!1;const s=Ls(t,i),n=Ls(e,i);return{top:n.end,right:s.end,bottom:n.start,left:s.start}}(e.xScale,e.yScale,this.getMaxOverflow())))}update(t){}draw(){const t=this._ctx,e=this.chart,i=this._cachedMeta,s=i.data||[],n=e.chartArea,o=[],a=this._drawStart||0,r=this._drawCount||s.length-a,l=this.options.drawActiveElementsOnTop;let h;for(i.dataset&&i.dataset.draw(t,n,a,r),h=a;h<a+r;++h){const e=s[h];e.hidden||(e.active&&l?o.push(e):e.draw(t,n))}for(h=0;h<o.length;++h)o[h].draw(t,n)}getStyle(t,e){const i=e?"active":"default";return void 0===t&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,e,i){const s=this.getDataset();let n;if(t>=0&&t<this._cachedMeta.data.length){const e=this._cachedMeta.data[t];n=e.$context||(e.$context=function(t,e,i){return Ci(t,{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:i,index:e,mode:"default",type:"data"})}(this.getContext(),t,e)),n.parsed=this.getParsed(t),n.raw=s.data[t],n.index=n.dataIndex=t}else n=this.$context||(this.$context=function(t,e){return Ci(t,{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:"default",type:"dataset"})}(this.chart.getContext(),this.index)),n.dataset=s,n.index=n.datasetIndex=this.index;return n.active=!!e,n.mode=i,n}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e="default",i){const s="active"===e,n=this._cachedDataOpts,o=t+"-"+e,a=n[o],r=this.enableOptionSharing&&k(i);if(a)return Hs(a,r);const l=this.chart.config,h=l.datasetElementScopeKeys(this._type,t),c=s?[`${t}Hover`,"hover",t,""]:[t,""],d=l.getOptionScopes(this.getDataset(),h),u=Object.keys(ue.elements[t]),f=l.resolveNamedOptions(d,u,(()=>this.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Hs(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new Ts(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ns(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Ns(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Ns(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n<s&&this._removeElements(n,s-n)}_insertElements(t,e,i=!0){const s=this._cachedMeta,n=s.data,o=t+e;let a;const r=t=>{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a<o;++a)n[a]=new this.dataElementType;this._parsing&&r(s._parsed),this.parse(t,e),i&&this.updateElements(n,t,e,"reset")}updateElements(t,e,i,s){}_removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const s=i._parsed.splice(t,e);i._stacked&&Ws(i,s)}i.data.splice(t,e)}_sync(t){if(this._parsing)this._syncList.push(t);else{const[e,i,s]=t;this[e](i,s)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){const t=arguments.length;this._sync(["_insertElements",this.getDataset().data.length-t,t])}_onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync(["_removeElements",0,1])}_onDataSplice(t,e){e&&this._sync(["_removeElements",t,e]);const i=arguments.length-2;i&&this._sync(["_insertElements",t,i])}_onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}}class $s{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return N(this.x)&&N(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Ys(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;i<s;i++)t[i].major&&e.push(i);return e}(e):[],r=a.length,l=a[0],h=a[r-1],c=[];if(r>o)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;n<t.length;n++)n===a&&(e.push(t[n]),o++,a=i[o*s])}(e,c,a,r/o),c;const d=function(t,e,i){const s=function(t){const e=t.length;let i,s;if(e<2)return!1;for(s=t[0],i=1;i<e;++i)if(t[i]-t[i-1]!==s)return!1;return s}(t),n=e.length/i;if(!s)return Math.max(n,1);const o=W(s);for(let t=0,e=o.length-1;t<e;t++){const e=o[t];if(e>n)return e}return Math.max(n,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-l)/(r-1)):null;for(Us(e,c,d,s(n)?0:l-n,l),t=0,i=r-1;t<i;t++)Us(e,c,d,a[t],a[t+1]);return Us(e,c,d,h,s(n)?e.length:h+n),c}return Us(e,c,d),c}function Us(t,e,i,s,n){const o=l(s,0),a=Math.min(l(n,t.length),t.length);let r,h,c,d=0;for(i=Math.ceil(i),n&&(r=n-s,i=r/Math.floor(r/i)),c=o;c<0;)d++,c=Math.round(o+d*i);for(h=Math.max(o,0);h<a;h++)h===c&&(e.push(t[h]),d++,c=Math.round(o+d*i))}const Xs=(t,e,i)=>"top"===e||"left"===e?t[e]+i:t[e]-i,qs=(t,e)=>Math.min(e||t,t);function Ks(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;o<n;o+=s)i.push(t[Math.floor(o)]);return i}function Gs(t,e,i){const s=t.ticks.length,n=Math.min(e,s-1),o=t._startPixel,a=t._endPixel,r=1e-6;let l,h=t.getPixelForTick(n);if(!(i&&(l=1===s?Math.max(h-o,a-h):0===e?(t.getPixelForTick(1)-h)/2:(h-t.getPixelForTick(n-1))/2,h+=n<e?l:-l,h<o-r||h>a+r)))return h}function Js(t){return t.drawTicks?t.tickLength:0}function Zs(t,e){if(!t.display)return 0;const i=Si(t.font,e),s=ki(t.padding);return(n(t.text)?t.text.length:1)*i.lineHeight+s.height}function Qs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class tn extends $s{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=r(t,Number.POSITIVE_INFINITY),e=r(e,Number.NEGATIVE_INFINITY),i=r(i,Number.POSITIVE_INFINITY),s=r(s,Number.NEGATIVE_INFINITY),{min:r(t,i),max:r(e,s),minDefined:a(t),maxDefined:a(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;r<l;++r)e=a[r].controller.getMinMax(this,t),n||(i=Math.min(i,e.min)),o||(s=Math.max(s,e.max));return i=o&&i>s?s:i,s=n&&i>s?i:s,{min:r(i,r(s,i)),max:r(s,r(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Di(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a<this.ticks.length;this._convertTicksToLabels(r?Ks(this.ticks,a):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),o.display&&(o.autoSkip||"auto"===o.source)&&(this.ticks=Ys(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),r&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t,e,i=this.options.reverse;this.isHorizontal()?(t=this.left,e=this.right):(t=this.top,e=this.bottom,i=!i),this._startPixel=t,this._endPixel=e,this._reversePixels=i,this._length=e-t,this._alignToPixels=this.options.alignToPixels}afterUpdate(){d(this.options.afterUpdate,[this])}beforeSetDimensions(){d(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){d(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),d(this.options[t],[this])}beforeDataLimits(){this._callHooks("beforeDataLimits")}determineDataLimits(){}afterDataLimits(){this._callHooks("afterDataLimits")}beforeBuildTicks(){this._callHooks("beforeBuildTicks")}buildTicks(){return[]}afterBuildTicks(){this._callHooks("afterBuildTicks")}beforeTickToLabelConversion(){d(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){const e=this.options.ticks;let i,s,n;for(i=0,s=t.length;i<s;i++)n=t[i],n.label=d(e.callback,[n.value,i,t],this)}afterTickToLabelConversion(){d(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){d(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const t=this.options,e=t.ticks,i=qs(this.ticks.length,t.ticks.maxTicksLimit),s=e.minRotation||0,n=e.maxRotation;let o,a,r,l=s;if(!this._isVisible()||!e.display||s>=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=Z(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Js(t.grid)-e.padding-Zs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Y(Math.min(Math.asin(Z((h.highest.height+6)/o,-1,1)),Math.asin(Z(a/r,-1,1))-Math.asin(Z(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){d(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Zs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Js(n)+o):(t.height=this.maxHeight,t.width=Js(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=$(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){d(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e<i;e++)s(t[e].label)&&(t.splice(e,1),i--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){const e=this.options.ticks.sampleSize;let i=this.ticks;e<i.length&&(i=Ks(i,e)),this._labelSizes=t=this._computeLabelSizes(i,i.length,this.options.ticks.maxTicksLimit)}return t}_computeLabelSizes(t,e,i){const{ctx:o,_longestTextCache:a}=this,r=[],l=[],h=Math.floor(e/qs(e,i));let c,d,f,g,p,m,x,b,_,y,v,M=0,w=0;for(c=0;c<e;c+=h){if(g=t[c].label,p=this._resolveTickFontOptions(c),o.font=m=p.string,x=a[m]=a[m]||{data:{},gc:[]},b=p.lineHeight,_=y=0,s(g)||n(g)){if(n(g))for(d=0,f=g.length;d<f;++d)v=g[d],s(v)||n(v)||(_=Ce(o,x.data,x.gc,_,v),y+=b)}else _=Ce(o,x.data,x.gc,_,g),y=b;r.push(_),l.push(y),M=Math.max(_,M),w=Math.max(y,w)}!function(t,e){u(t,(t=>{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n<s;++n)delete t.data[i[n]];i.splice(0,s)}}))}(a,e);const k=r.indexOf(M),S=l.indexOf(w),P=t=>({width:r[t]||0,height:l[t]||0});return{first:P(0),last:P(e-1),widest:P(k),highest:P(S),widths:r,heights:l}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Q(this._alignToPixels?Ae(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&t<e.length){const i=e[t];return i.$context||(i.$context=function(t,e,i){return Ci(t,{tick:i,index:e,type:"tick"})}(this.getContext(),t,i))}return this.$context||(this.$context=Ci(this.chart.getContext(),{scale:this,type:"scale"}))}_tickSize(){const t=this.options.ticks,e=$(this.labelRotation),i=Math.abs(Math.cos(e)),s=Math.abs(Math.sin(e)),n=this._getLabelSizes(),o=t.autoSkipPadding||0,a=n?n.widest.width+o:0,r=n?n.highest.height+o:0;return this.isHorizontal()?r*i>a*s?a/i:r/s:r*s<a*i?r/i:a/s}_isVisible(){const t=this.options.display;return"auto"!==t?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:a,border:r}=s,h=n.offset,c=this.isHorizontal(),d=this.ticks.length+(h?1:0),u=Js(n),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,x=function(t){return Ae(i,t,p)};let b,_,y,v,M,w,k,S,P,D,C,O;if("top"===a)b=x(this.bottom),w=this.bottom-u,S=b-m,D=x(t.top)+m,O=t.bottom;else if("bottom"===a)b=x(this.top),D=t.top,O=x(t.bottom)-m,w=b+m,S=this.top+u;else if("left"===a)b=x(this.right),M=this.right-u,k=b-m,P=x(t.left)+m,C=t.right;else if("right"===a)b=x(this.left),P=t.left,C=x(t.right)-m,M=b+m,k=this.left+u;else if("x"===e){if("center"===a)b=x((t.top+t.bottom)/2+.5);else if(o(a)){const t=Object.keys(a)[0],e=a[t];b=x(this.chart.scales[t].getPixelForValue(e))}D=t.top,O=t.bottom,w=b+m,S=w+u}else if("y"===e){if("center"===a)b=x((t.left+t.right)/2);else if(o(a)){const t=Object.keys(a)[0],e=a[t];b=x(this.chart.scales[t].getPixelForValue(e))}M=b-m,k=M-u,P=t.left,C=t.right}const A=l(s.ticks.maxTicksLimit,d),T=Math.max(1,Math.ceil(d/A));for(_=0;_<d;_+=T){const t=this.getContext(_),e=n.setContext(t),s=r.setContext(t),o=e.lineWidth,a=e.color,l=s.dash||[],d=s.dashOffset,u=e.tickWidth,g=e.tickColor,p=e.tickBorderDash||[],m=e.tickBorderDashOffset;y=Gs(this,_,h),void 0!==y&&(v=Ae(i,y,o),c?M=k=P=C=v:w=S=D=O=v,f.push({tx1:M,ty1:w,tx2:k,ty2:S,x1:P,y1:D,x2:C,y2:O,width:o,color:a,borderDash:l,borderDashOffset:d,tickWidth:u,tickColor:g,tickBorderDash:p,tickBorderDashOffset:m}))}return this._ticksLength=d,this._borderValue=b,f}_computeLabelItems(t){const e=this.axis,i=this.options,{position:s,ticks:a}=i,r=this.isHorizontal(),l=this.ticks,{align:h,crossAlign:c,padding:d,mirror:u}=a,f=Js(i.grid),g=f+d,p=u?-d:g,m=-$(this.labelRotation),x=[];let b,_,y,v,M,w,k,S,P,D,C,O,A="middle";if("top"===s)w=this.bottom-p,k=this._getXAxisLabelAlignment();else if("bottom"===s)w=this.top+p,k=this._getXAxisLabelAlignment();else if("left"===s){const t=this._getYAxisLabelAlignment(f);k=t.textAlign,M=t.x}else if("right"===s){const t=this._getYAxisLabelAlignment(f);k=t.textAlign,M=t.x}else if("x"===e){if("center"===s)w=(t.top+t.bottom)/2+g;else if(o(s)){const t=Object.keys(s)[0],e=s[t];w=this.chart.scales[t].getPixelForValue(e)+g}k=this._getXAxisLabelAlignment()}else if("y"===e){if("center"===s)M=(t.left+t.right)/2-g;else if(o(s)){const t=Object.keys(s)[0],e=s[t];M=this.chart.scales[t].getPixelForValue(e)}k=this._getYAxisLabelAlignment(f).textAlign}"y"===e&&("start"===h?A="top":"end"===h&&(A="bottom"));const T=this._getLabelSizes();for(b=0,_=l.length;b<_;++b){y=l[b],v=y.label;const t=a.setContext(this.getContext(b));S=this.getPixelForTick(b)+a.labelOffset,P=this._resolveTickFontOptions(b),D=P.lineHeight,C=n(v)?v.length:1;const e=C/2,i=t.color,o=t.textStrokeColor,h=t.textStrokeWidth;let d,f=k;if(r?(M=S,"inner"===k&&(f=b===_-1?this.options.reverse?"left":"right":0===b?this.options.reverse?"right":"left":"center"),O="top"===s?"near"===c||0!==m?-C*D+D/2:"center"===c?-T.highest.height/2-e*D+D:-T.highest.height+D/2:"near"===c||0!==m?D/2:"center"===c?T.highest.height/2-e*D:T.highest.height-C*D,u&&(O*=-1),0===m||t.showLabelBackdrop||(M+=D/2*Math.sin(m))):(w=S,O=(1-C)*D/2),t.showLabelBackdrop){const e=ki(t.backdropPadding),i=T.heights[b],s=T.widths[b];let n=O-e.top,o=0-e.left;switch(A){case"middle":n-=i/2;break;case"bottom":n-=i}switch(k){case"center":o-=s/2;break;case"right":o-=s;break;case"inner":b===_-1?o-=s:b>0&&(o-=s/2)}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}x.push({label:v,font:P,textOffset:O,options:{rotation:m,color:i,strokeColor:o,strokeWidth:h,textAlign:f,textBaseline:A,translation:[M,w],backdrop:d}})}return x}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-$(this.labelRotation))return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align?i="right":"inner"===e.align&&(i="inner"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,l;return"left"===e?s?(l=this.right+n,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l+=a)):(l=this.right-o,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l=this.left)):"right"===e?s?(l=this.left+n,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l-=a)):(l=this.left+o,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l=this.right)):r="right",{textAlign:r,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n<o;++n){const t=s[n];e.drawOnChartArea&&a({x:t.x1,y:t.y1},{x:t.x2,y:t.y2},t),e.drawTicks&&a({x:t.tx1,y:t.ty1},{x:t.tx2,y:t.ty2},{color:t.tickColor,width:t.tickWidth,borderDash:t.tickBorderDash,borderDashOffset:t.tickBorderDashOffset})}}drawBorder(){const{chart:t,ctx:e,options:{border:i,grid:s}}=this,n=i.setContext(this.getContext()),o=i.display?n.width:0;if(!o)return;const a=s.setContext(this.getContext(0)).lineWidth,r=this._borderValue;let l,h,c,d;this.isHorizontal()?(l=Ae(t,this.left,o)-o/2,h=Ae(t,this.right,a)+a/2,c=d=r):(c=Ae(t,this.top,o)-o/2,d=Ae(t,this.bottom,a)+a/2,l=h=r),e.save(),e.lineWidth=n.width,e.strokeStyle=n.color,e.beginPath(),e.moveTo(l,c),e.lineTo(h,d),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;const e=this.ctx,i=this._computeLabelArea();i&&Ie(e,i);const s=this.getLabelItems(t);for(const t of s){const i=t.options,s=t.font;Ne(e,t.label,0,t.textOffset,s,i)}i&&ze(e)}drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:s}}=this;if(!i.display)return;const a=Si(i.font),r=ki(i.padding),l=i.align;let h=a.lineHeight/2;"bottom"===e||"center"===e||o(e)?(h+=r.bottom,n(i.text)&&(h+=a.lineHeight*(i.text.length-1))):h+=r.top;const{titleX:c,titleY:d,maxWidth:u,rotation:f}=function(t,e,i,s){const{top:n,left:a,bottom:r,right:l,chart:h}=t,{chartArea:c,scales:d}=h;let u,f,g,p=0;const m=r-n,x=l-a;if(t.isHorizontal()){if(f=ft(s,a,l),o(i)){const t=Object.keys(i)[0],s=i[t];g=d[t].getPixelForValue(s)+m-e}else g="center"===i?(c.bottom+c.top)/2+m-e:Xs(t,i,e);u=l-a}else{if(o(i)){const t=Object.keys(i)[0],s=i[t];f=d[t].getPixelForValue(s)-x+e}else f="center"===i?(c.left+c.right)/2-x+e:Xs(t,i,e);g=ft(s,r,n),p="left"===i?-E:E}return{titleX:f,titleY:g,maxWidth:u,rotation:p}}(this,h,e,l);Ne(t,i.text,0,0,a,{color:i.color,maxWidth:u,rotation:f,textAlign:Qs(l,e,s),textBaseline:"middle",translation:[c,d]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){const t=this.options,e=t.ticks&&t.ticks.z||0,i=l(t.grid&&t.grid.z,-1),s=l(t.border&&t.border.z,0);return this._isVisible()&&this.draw===tn.prototype.draw?[{z:i,draw:t=>{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n<o;++n){const o=e[n];o[i]!==this.id||t&&o.type!==t||s.push(o)}return s}_resolveTickFontOptions(t){return Si(this.options.ticks.setContext(this.getContext(t)).font)}_maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/t}}class en{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){const e=Object.getPrototypeOf(t);let i;(function(t){return"id"in t&&"defaults"in t})(e)&&(i=this.register(e));const s=this.items,n=t.id,o=this.scope+"."+n;if(!n)throw new Error("class does not have id: "+t);return n in s||(s[n]=t,function(t,e,i){const s=x(Object.create(null),[i?ue.get(i):{},ue.get(e),t.defaults]);ue.set(e,s),t.defaultRoutes&&function(t,e){Object.keys(e).forEach((i=>{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ue.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ue.describe(e,t.descriptors)}(t,o,i),this.override&&ue.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ue[s]&&(delete ue[s][i],this.override&&delete re[i])}}class sn{constructor(){this.controllers=new en(js,"datasets",!0),this.elements=new en($s,"elements"),this.plugins=new en(Object,"plugins"),this.scales=new en(tn,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):u(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++){const i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){const s=e.get(t);if(void 0===s)throw new Error('"'+t+'" is not a registered '+i+".");return s}}var nn=new sn;class on{constructor(){this._init=[]}notify(t,e,i,s){"beforeInit"===e&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));const n=s?this._descriptors(t).filter(s):this._descriptors(t),o=this._notify(n,t,e,i);return"afterDestroy"===e&&(this._notify(n,t,"stop"),this._notify(this._init,t,"uninstall")),o}_notify(t,e,i,s){s=s||{};for(const n of t){const t=n.plugin;if(!1===d(t[i],[e,s,n.options],t)&&s.cancelable)return!1}return!0}invalidate(){s(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const i=t&&t.config,s=l(i.options&&i.options.plugins,{}),n=function(t){const e={},i=[],s=Object.keys(nn.plugins.items);for(let t=0;t<s.length;t++)i.push(nn.getPlugin(s[t]));const n=t.plugins||[];for(let t=0;t<n.length;t++){const s=n[t];-1===i.indexOf(s)&&(i.push(s),e[s.id]=!0)}return{plugins:i,localIds:e}}(i);return!1!==s||e?function(t,{plugins:e,localIds:i},s,n){const o=[],a=t.getContext();for(const r of e){const e=r.id,l=an(s[e],n);null!==l&&o.push({plugin:r,options:rn(t.config,{plugin:r,local:i[e]},l,a)})}return o}(t,n,s,e):[]}_notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,s=(t,e)=>t.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function an(t,e){return e||!1!==t?!0===t?{}:t:null}function rn(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function ln(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function hn(t){if("x"===t||"y"===t||"r"===t)return t}function cn(t,...e){if(hn(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&hn(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function dn(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function un(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=ln(t.type,e),a=Object.create(null);return Object.keys(s).forEach((e=>{const r=s[e];if(!o(r))return console.error(`Invalid scale configuration for scale: ${e}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const l=cn(e,r,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return dn(t,"x",i[0])||dn(t,"y",i[0])}return{}}(e,t),ue.scales[r.type]),h=function(t,e){return t===e?"_index_":"_value_"}(l,n),c=i.scales||{};a[e]=b(Object.create(null),[{axis:l},r,c[l],c[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||ln(n,e),r=(re[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),b(a[n],[{axis:e},s[n],r[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];b(e,[ue.scales[e.type],ue.scale])})),a}function fn(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{}),e.scales=un(t,e)}function gn(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const pn=new Map,mn=new Set;function xn(t,e){let i=pn.get(t);return i||(i=e(),pn.set(t,i),mn.add(i)),i}const bn=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class _n{constructor(t){this._config=function(t){return(t=t||{}).data=gn(t.data),fn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=gn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),fn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return xn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return xn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return xn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return xn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>bn(r,t,e)))),e.forEach((t=>bn(r,s,t))),e.forEach((t=>bn(r,re[n]||{},t))),e.forEach((t=>bn(r,ue,t))),e.forEach((t=>bn(r,le,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),mn.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue.datasets[e]||{},{type:e},ue,le]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=yn(this._resolverCache,t,s);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:s}=Ye(t);for(const o of e){const e=i(o),a=s(o),r=(a||e)&&t[o];if(e&&(S(r)||vn(r))||a&&n(r))return!0}return!1}(a,e)){o.$shared=!1;l=$e(a,i=S(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:n}=yn(this._resolverCache,t,i);return o(e)?$e(n,e,void 0,s):n}}function yn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:je(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const vn=t=>o(t)&&Object.getOwnPropertyNames(t).some((e=>S(t[e])));const Mn=["top","bottom","left","right","chartArea"];function wn(t,e){return"top"===t||"bottom"===t||-1===Mn.indexOf(t)&&"x"===e}function kn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function Sn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function Pn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function Dn(t){return fe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Cn={},On=t=>{const e=Dn(t);return Object.values(Cn).filter((t=>t.canvas===e)).pop()};function An(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class Tn{static defaults=ue;static instances=Cn;static overrides=re;static registry=nn;static version="4.5.0";static getChart=On;static register(...t){nn.add(...t),Ln()}static unregister(...t){nn.remove(...t),Ln()}constructor(t,e){const s=this.config=new _n(e),n=Dn(t),o=On(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||Ps(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=i(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new on,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=dt((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],Cn[this.id]=this,r&&l?(bt.listen(this,"complete",Sn),bt.listen(this,"progress",Pn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return s(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return nn}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ke(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Te(this.canvas,this.ctx),this}stop(){return bt.stop(this),this}resize(t,e){bt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ke(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),d(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=cn(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),u(n,(e=>{const n=e.options,o=n.id,a=cn(o,n),r=l(n.type,e.dtype);void 0!==n.position&&wn(n.position,a)===wn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(nn.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),u(s,((t,e)=>{t||delete i[e]})),u(i,(t=>{ls.configure(this,t,t.options),ls.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;t<i;++t)this._destroyDatasetMeta(t);t.splice(e,i-e)}this._sortedMetasets=t.slice(0).sort(kn("order","index"))}_removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:e}}=this;t.length>e.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i<s;i++){const s=e[i];let n=this.getDatasetMeta(i);const o=s.type||this.config.type;if(n.type&&n.type!==o&&(this._destroyDatasetMeta(i),n=this.getDatasetMeta(i)),n.type=o,n.indexAxis=s.indexAxis||ln(o,this.options),n.order=s.order||0,n.index=i,n.label=""+s.label,n.visible=this.isDatasetVisible(i),n.controller)n.controller.updateIndex(i),n.controller.linkScales();else{const e=nn.getController(o),{datasetElementType:s,dataElementType:a}=ue.datasets[o];Object.assign(e,{dataElementType:nn.getElement(a),datasetElementType:s&&nn.getElement(s)}),n.controller=new e(this,i),t.push(n.controller)}}return this._updateMetasets(),t}_resetElements(){u(this.data.datasets,((t,e)=>{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t<e;t++){const{controller:e}=this.getDatasetMeta(t),i=!s&&-1===n.indexOf(e);e.buildOrUpdateElements(i),o=Math.max(+e.getMaxOverflow(),o)}o=this._minPadding=i.layout.autoPadding?o:0,this._updateLayout(o),s||u(n,(t=>{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(kn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){u(this.scales,(t=>{ls.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){An(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;t<e;t++)if(!P(s,i(t)))return;return Array.from(s).map((t=>t.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ls.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],u(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t<e;++t)this.getDatasetMeta(t).controller.configure();for(let e=0,i=this.data.datasets.length;e<i;++e)this._updateDataset(e,S(t)?t({datasetIndex:e}):t);this.notifyPlugins("afterDatasetsUpdate",{mode:t})}}_updateDataset(t,e){const i=this.getDatasetMeta(t),s={meta:i,index:t,mode:e,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetUpdate",s)&&(i.controller._update(e),s.cancelable=!1,this.notifyPlugins("afterDatasetUpdate",s))}render(){!1!==this.notifyPlugins("beforeRender",{cancelable:!0})&&(bt.has(this)?this.attached&&!bt.running(this)&&bt.start(this):(this.draw(),Sn({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){const{width:t,height:e}=this._resizeBeforeDraw;this._resizeBeforeDraw=null,this._resize(t,e)}if(this.clear(),this.width<=0||this.height<=0)return;if(!1===this.notifyPlugins("beforeDraw",{cancelable:!0}))return;const e=this._layers;for(t=0;t<e.length&&e[t].z<=0;++t)e[t].draw(this.chartArea);for(this._drawDatasets();t<e.length;++t)e[t].draw(this.chartArea);this.notifyPlugins("afterDraw")}_getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let s,n;for(s=0,n=e.length;s<n;++s){const n=e[s];t&&!n.visible||i.push(n)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(!1===this.notifyPlugins("beforeDatasetsDraw",{cancelable:!0}))return;const t=this.getSortedVisibleDatasetMetas();for(let e=t.length-1;e>=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i={meta:t,index:t.index,cancelable:!0},s=Ni(this,t);!1!==this.notifyPlugins("beforeDatasetDraw",i)&&(s&&Ie(e,s),t.controller.draw(),s&&ze(e),i.cancelable=!1,this.notifyPlugins("afterDatasetDraw",i))}isPointInArea(t){return Re(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Ki.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ci(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),bt.remove(this),t=0,e=this.data.datasets.length;t<e;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins("beforeDestroy");const{canvas:t,ctx:e}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),Te(t,e),this.platform.releaseContext(e),this.canvas=null,this.ctx=null),delete Cn[this.id],this.notifyPlugins("afterDestroy")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){const t=this._listeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};u(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},u(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a<r;++a){o=t[a];const e=o&&this.getDatasetMeta(o.datasetIndex).controller;e&&e[s+"HoverStyle"](o.element,o.datasetIndex,o.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){const e=this._active||[],i=t.map((({datasetIndex:t,index:e})=>{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!f(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=D(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,d(n.onHover,[t,a,this],this),r&&d(n.onClick,[t,a,this],this));const h=!f(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function Ln(){return u(Tn.instances,(t=>t._plugins.invalidate()))}function En(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Rn{static override(t){Object.assign(Rn.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return En()}parse(){return En()}format(){return En()}add(){return En()}diff(){return En()}startOf(){return En()}endOf(){return En()}}var In={_date:Rn};function zn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;e<n;e++)s=s.concat(i[e].controller.getAllParsedValues(t));t._cache.$bar=lt(s.sort(((t,e)=>t-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;s<n;++s)o=e.getPixelForValue(i[s]),l();for(a=void 0,s=0,n=e.ticks.length;s<n;++s)o=e.getPixelForTick(s),l();return r}function Fn(t,e,i,s){return n(t)?function(t,e,i,s){const n=i.parse(t[0],s),o=i.parse(t[1],s),a=Math.min(n,o),r=Math.max(n,o);let l=a,h=r;Math.abs(a)>Math.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function Vn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;h<c;++h)u=e[h],d={},d[n.axis]=r||n.parse(a[h],h),l.push(Fn(u,d,o,h));return l}function Bn(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}function Wn(t,e,i,s){let n=e.borderSkipped;const o={};if(!n)return void(t.borderSkipped=o);if(!0===n)return void(t.borderSkipped={top:!0,right:!0,bottom:!0,left:!0});const{start:a,end:r,reverse:l,top:h,bottom:c}=function(t){let e,i,s,n,o;return t.horizontal?(e=t.base>t.x,i="left",s="right"):(e=t.base<t.y,i="bottom",s="top"),e?(n="end",o="start"):(n="start",o="end"),{start:i,end:s,reverse:e,top:n,bottom:o}}(t);"middle"===n&&i&&(t.enableBorderRadius=!0,(i._top||0)===s?n=h:(i._bottom||0)===s?n=c:(o[Nn(c,a,r,l)]=!0,n=h)),o[Nn(n,a,r,l)]=!0,t.borderSkipped=o}function Nn(t,e,i,s){var n,o,a;return s?(a=i,t=Hn(t=(n=t)===(o=e)?a:n===a?o:n,i,e)):t=Hn(t,e,i),t}function Hn(t,e,i){return"start"===t?e:"end"===t?i:t}function jn(t,{inflateAmount:e},i){t.inflateAmount="auto"===e?1===i?.33:0:e}class $n extends js{static id="doughnut";static defaults={datasetElementType:!1,dataElementType:"arc",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:"number",properties:["circumference","endAngle","innerRadius","outerRadius","startAngle","x","y","offset","borderWidth","spacing"]}},cutout:"50%",rotation:0,circumference:360,radius:"100%",spacing:0,indexAxis:"r"};static descriptors={_scriptable:t=>"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,a,r=t=>+i[t];if(o(i[t])){const{key:t="value"}=this._parsing;r=e=>+M(i[e],t)}for(n=t,a=t+e;n<a;++n)s._parsed[n]=r(n)}}_getRotation(){return $(this.options.rotation-90)}_getCircumference(){return $(this.options.circumference)}_getRotationExtents(){let t=O,e=-O;for(let i=0;i<this.chart.data.datasets.length;++i)if(this.chart.isDatasetVisible(i)&&this.chart.getDatasetMeta(i).type===this._type){const s=this.chart.getDatasetMeta(i).controller,n=s._getRotation(),o=s._getCircumference();t=Math.min(t,n),e=Math.max(e,n+o)}return{rotation:t,circumference:e-t}}update(t){const e=this.chart,{chartArea:i}=e,s=this._cachedMeta,n=s.data,o=this.getMaxBorderWidth()+this.getMaxOffset(n)+this.options.spacing,a=Math.max((Math.min(i.width,i.height)-o)/2,0),r=Math.min(h(this.options.cutout,a),1),l=this._getRingWeight(this.index),{circumference:d,rotation:u}=this._getRotationExtents(),{ratioX:f,ratioY:g,offsetX:p,offsetY:m}=function(t,e,i){let s=1,n=1,o=0,a=0;if(e<O){const r=t,l=r+e,h=Math.cos(r),c=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(t,e,s)=>J(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>J(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(E,c,u),x=g(C,h,d),b=g(C+E,c,u);s=(p-x)/2,n=(m-b)/2,o=-(p+x)/2,a=-(m+b)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),x=(i.width-o)/f,b=(i.height-o)/g,_=Math.max(Math.min(x,b)/2,0),y=c(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p<e;++p)m+=this._circumference(p,n);for(p=e;p<e+i;++p){const e=this._circumference(p,n),i=t[p],o={x:l+this.offsetX,y:h+this.offsetY,startAngle:m,endAngle:m+e,circumference:e,outerRadius:u,innerRadius:d};g&&(o.options=f||this.resolveDataElementOptions(p,i.active?"active":s)),m+=e,this.updateElement(i,p,o,s)}}calculateTotal(){const t=this._cachedMeta,e=t.data;let i,s=0;for(i=0;i<e.length;i++){const n=t._parsed[i];null===n||isNaN(n)||!this.chart.getDataVisibility(i)||e[i].hidden||(s+=Math.abs(n))}return s}calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s<n;++s)if(i.isDatasetVisible(s)){o=i.getDatasetMeta(s),t=o.data,a=o.controller;break}if(!t)return 0;for(s=0,n=t.length;s<n;++s)r=a.resolveDataElementOptions(s),"inner"!==r.borderAlign&&(e=Math.max(e,r.borderWidth||0,r.hoverBorderWidth||0));return e}getMaxOffset(t){let e=0;for(let i=0,s=t.length;i<s;++i){const t=this.resolveDataElementOptions(i);e=Math.max(e,t.offset||0,t.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let i=0;i<t;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e}_getRingWeight(t){return Math.max(l(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}class Yn extends js{static id="polarArea";static defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(s<e.min&&(e.min=s),s>e.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*C;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d<e;++d)u+=this._computeAngle(d,s,f);for(d=e;d<e+i;d++){const e=t[d];let i=u,g=u+this._computeAngle(d,s,f),p=o.getDataVisibility(d)?r.getDistanceFromCenterForValue(this.getParsed(d).r):0;u=g,n&&(a.animateScale&&(p=0),a.animateRotate&&(i=g=c));const m={x:l,y:h,innerRadius:0,outerRadius:p,startAngle:i,endAngle:g,options:this.resolveDataElementOptions(d,e.active?"active":s)};this.updateElement(e,d,m,s)}}countVisibleElements(){const t=this._cachedMeta;let e=0;return t.data.forEach(((t,i)=>{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.resolveDataElementOptions(t,e).angle||i):0}}var Un=Object.freeze({__proto__:null,BarController:class extends js{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return Vn(t,e,i,s)}parseArrayData(t,e,i,s){return Vn(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;d<u;++d)g=e[d],f={},f[n.axis]=n.parse(M(g,l),d),c.push(Fn(M(g,h),f,o,d));return c}updateRangeFromParsed(t,e,i,s){super.updateRangeFromParsed(t,e,i,s);const n=i._custom;n&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,n.min),t.max=Math.max(t.max,n.max))}getMaxOverflow(){return 0}getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:s}=e,n=this.getParsed(t),o=n._custom,a=Bn(o)?"["+o.start+", "+o.end+"]":""+s.getLabelForValue(n[s.axis]);return{label:""+i.getLabelForValue(n[i.axis]),value:a}}initialize(){this.enableOptionSharing=!0,super.initialize();this._cachedMeta.stack=this.getDataset().stack}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,n){const o="reset"===n,{index:a,_cachedMeta:{vScale:r}}=this,l=r.getBasePixel(),h=r.isHorizontal(),c=this._getRuler(),{sharedOptions:d,includeOptions:u}=this._getSharedOptions(e,n);for(let f=e;f<e+i;f++){const e=this.getParsed(f),i=o||s(e[r.axis])?{base:l,head:l}:this._calculateBarValuePixels(f),g=this._calculateBarIndexPixels(f,c),p=(e._stacks||{})[r.axis],m={horizontal:h,base:i.base,enableBorderRadius:!p||Bn(e._custom)||a===p._top||a===p._bottom,x:h?i.head:g.center,y:h?g.center:i.head,height:h?g.size:Math.abs(i.size),width:h?Math.abs(i.size):g.size};u&&(m.options=d||this.resolveDataElementOptions(f,t[f].active?"active":n));const x=m.options||t[f].options;Wn(m,x,p,a),jn(m,x,c.ratio),this.updateElement(t[f],f,m,n)}}_getStacks(t,e){const{iScale:i}=this._cachedMeta,n=i.getMatchingVisibleMetas(this._type).filter((t=>t.controller.options.grouped)),o=i.options.stacked,a=[],r=this._cachedMeta.controller.getParsed(e),l=r&&r[i.axis],h=t=>{const e=t._parsed.find((t=>t[i.axis]===l)),n=e&&e[t.vScale.axis];if(s(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!h(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter((i=>t[i].axis===e)).shift()}_getAxis(){const t={},e=this.getFirstScaleIdForIndexAxis();for(const i of this.chart.data.datasets)t[l("x"===this.chart.options.indexAxis?i.xAxisID:i.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n<o;++n)s.push(i.getPixelForValue(this.getParsed(n)[i.axis],n));const a=t.barThickness;return{min:a||zn(e),pixels:s,start:i._startPixel,end:i._endPixel,stackCount:this._getStackCount(),scale:i,grouped:t.grouped,ratio:a?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){const{_cachedMeta:{vScale:e,_stacked:i,index:n},options:{base:o,minBarLength:a}}=this,r=o||0,l=this.getParsed(t),h=l._custom,c=Bn(h);let d,u,f=l[e.axis],g=0,p=i?this.applyStack(e,l,i):f;p!==f&&(g=p-f,p=f),c&&(f=h.barStart,p=h.barEnd-h.barStart,0!==f&&F(f)!==F(h.barEnd)&&(g=0),g+=f);const m=s(o)||c?g:o;let x=e.getPixelForValue(m);if(d=this.chart.getDataVisibility(t)?e.getPixelForValue(g+p):x,u=d-x,Math.abs(u)<a){u=function(t,e,i){return 0!==t?F(t):(e.isHorizontal()?1:-1)*(e.min>=i?1:-1)}(u,e,r)*a,f===r&&(x-=u/2);const t=e.getPixelForDecimal(0),s=e.getPixelForDecimal(1),o=Math.min(t,s),h=Math.max(t,s);x=Math.max(Math.min(x,h),o),d=x+u,i&&!c&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(x))}if(x===e.getPixelForValue(r)){const t=F(u)*e.getLineWidthForValue(r)/2;x+=t,u-=t}return{size:u,base:x,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=l(n.maxBarThickness,1/0);let r,h;const c=this._getAxisCount();if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,d="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t<n.length-1?n[t+1]:null;const l=i.categoryPercentage;null===a&&(a=o-(null===r?e.end-e.start:r-o)),null===r&&(r=o+o-a);const h=o-(o-Math.min(a,r))/2*l;return{chunk:Math.abs(r-a)/2*l/s,ratio:i.barPercentage,start:h}}(t,e,n,i*c):function(t,e,i,n){const o=i.barThickness;let a,r;return s(o)?(a=e.min*i.categoryPercentage,r=i.barPercentage):(a=o*n,r=1),{chunk:a/n,ratio:r,start:e.pixels[t]-a/2}}(t,e,n,i*c),u="x"===this.chart.options.indexAxis?this.getDataset().xAxisID:this.getDataset().yAxisID,f=this._getAxis().indexOf(l(u,this.getFirstScaleIdForIndexAxis())),g=this._getStackIndex(this.index,this._cachedMeta.stack,o?t:void 0)+f;r=d.start+d.chunk*g+d.chunk/2,h=Math.min(a,d.chunk*d.ratio)}else r=i.getPixelForValue(this.getParsed(t)[i.axis],t),h=Math.min(a,e.min*e.ratio);return{base:r-h/2,head:r+h/2,center:r,size:h}}draw(){const t=this._cachedMeta,e=t.vScale,i=t.data,s=i.length;let n=0;for(;n<s;++n)null===this.getParsed(n)[e.axis]||i[n].hidden||i[n].draw(this._ctx)}},BubbleController:class extends js{static id="bubble";static defaults={datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}};static overrides={scales:{x:{type:"linear"},y:{type:"linear"}}};initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(t,e,i,s){const n=super.parsePrimitiveData(t,e,i,s);for(let t=0;t<n.length;t++)n[t]._custom=this.resolveDataElementOptions(t+i).radius;return n}parseArrayData(t,e,i,s){const n=super.parseArrayData(t,e,i,s);for(let t=0;t<n.length;t++){const s=e[i+t];n[t]._custom=l(s[2],this.resolveDataElementOptions(t+i).radius)}return n}parseObjectData(t,e,i,s){const n=super.parseObjectData(t,e,i,s);for(let t=0;t<n.length;t++){const s=e[i+t];n[t]._custom=l(s&&s.r&&+s.r,this.resolveDataElementOptions(t+i).radius)}return n}getMaxOverflow(){const t=this._cachedMeta.data;let e=0;for(let i=t.length-1;i>=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d<e+i;d++){const e=t[d],i=!n&&this.getParsed(d),u={},f=u[h]=n?o.getPixelForDecimal(.5):o.getPixelForValue(i[h]),g=u[c]=n?a.getBasePixel():a.getPixelForValue(i[c]);u.skip=isNaN(f)||isNaN(g),l&&(u.options=r||this.resolveDataElementOptions(d,e.active?"active":s),n&&(u.options.radius=0)),this.updateElement(e,d,u,s)}}resolveDataElementOptions(t,e){const i=this.getParsed(t);let s=super.resolveDataElementOptions(t,e);s.$shared&&(s=Object.assign({},s,{$shared:!1}));const n=s.radius;return"active"!==e&&(s.radius=0),s.radius+=l(i&&i._custom,n),s}},DoughnutController:$n,LineController:class extends js{static id="line";static defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};static overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=this.chart._animationsDisabled;let{start:a,count:r}=pt(e,s,o);this._drawStart=a,this._drawCount=r,mt(e)&&(a=0,r=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!n._decimated,i.points=s;const l=this.resolveDatasetElementOptions(t);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:l},t),this.updateElements(s,a,r,t)}updateElements(t,e,i,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:l,_dataset:h}=this._cachedMeta,{sharedOptions:c,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=N(g)?g:Number.POSITIVE_INFINITY,x=this.chart._animationsDisabled||o||"none"===n,b=e+i,_=t.length;let y=e>0&&this.getParsed(e-1);for(let i=0;i<_;++i){const g=t[i],_=x?g:{};if(i<e||i>=b){_.skip=!0;continue}const v=this.getParsed(i),M=s(v[f]),w=_[u]=a.getPixelForValue(v[u],i),k=_[f]=o||M?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,v,l):v[f],i);_.skip=isNaN(w)||isNaN(k)||M,_.stop=i>0&&Math.abs(v[u]-y[u])>m,p&&(_.parsed=v,_.raw=h.data[i]),d&&(_.options=c||this.resolveDataElementOptions(i,g.active?"active":n)),x||this.updateElement(g,i,_,n),y=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PieController:class extends $n{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},PolarAreaController:Yn,RadarController:class extends js{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a<e+i;a++){const e=t[a],i=this.resolveDataElementOptions(a,e.active?"active":s),r=n.getPointPositionForValue(a,this.getParsed(a).r),l=o?n.xCenter:r.x,h=o?n.yCenter:r.y,c={x:l,y:h,angle:r.angle,skip:isNaN(l)||isNaN(h),options:i};this.updateElement(e,a,c,s)}}},ScatterController:class extends js{static id="scatter";static defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};static overrides={interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}};getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y);return{label:i[t]||"",value:"("+a+", "+r+")"}}update(t){const e=this._cachedMeta,{data:i=[]}=e,s=this.chart._animationsDisabled;let{start:n,count:o}=pt(e,i,s);if(this._drawStart=n,this._drawCount=o,mt(e)&&(n=0,o=i.length),this.options.showLine){this.datasetElementType||this.addElements();const{dataset:n,_dataset:o}=e;n._chart=this.chart,n._datasetIndex=this.index,n._decimated=!!o._decimated,n.points=i;const a=this.resolveDatasetElementOptions(t);a.segment=this.options.segment,this.updateElement(n,void 0,{animated:!s,options:a},t)}else this.datasetElementType&&(delete e.dataset,this.datasetElementType=!1);this.updateElements(i,n,o,t)}addElements(){const{showLine:t}=this.options;!this.datasetElementType&&t&&(this.datasetElementType=this.chart.registry.getElement("line")),super.addElements()}updateElements(t,e,i,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:l,_dataset:h}=this._cachedMeta,c=this.resolveDataElementOptions(e,n),d=this.getSharedOptions(c),u=this.includeOptions(n,d),f=a.axis,g=r.axis,{spanGaps:p,segment:m}=this.options,x=N(p)?p:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||"none"===n;let _=e>0&&this.getParsed(e-1);for(let c=e;c<e+i;++c){const e=t[c],i=this.getParsed(c),p=b?e:{},y=s(i[g]),v=p[f]=a.getPixelForValue(i[f],c),M=p[g]=o||y?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,i,l):i[g],c);p.skip=isNaN(v)||isNaN(M)||y,p.stop=c>0&&Math.abs(i[f]-_[f])>x,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),b||this.updateElement(e,c,p,n),_=i}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Xn(t,e,i,s){const n=vi(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return Z(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Z(n.innerStart,0,a),innerEnd:Z(n.innerEnd,0,a)}}function qn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Kn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/C)/d)/2,m=l+p+f,x=n-p-f,{outerStart:b,outerEnd:_,innerStart:y,innerEnd:v}=Xn(e,u,d,x-m),M=d-b,w=d-_,k=m+b/M,S=x-_/w,P=u+y,D=u+v,O=m+y/P,A=x-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=qn(w,S,a,r);t.arc(e.x,e.y,_,S,x+E)}const i=qn(D,x,a,r);if(t.lineTo(i.x,i.y),v>0){const e=qn(D,A,a,r);t.arc(e.x,e.y,v,x+E,A+Math.PI)}const s=(x-v/u+(m+y/u))/2;if(t.arc(a,r,u,x-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=qn(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-E)}const n=qn(M,m,a,r);if(t.lineTo(n.x,n.y),b>0){const e=qn(M,k,a,r);t.arc(e.x,e.y,b,m-E,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function Gn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:l}=e,{borderWidth:h,borderJoinStyle:c,borderDash:d,borderDashOffset:u,borderRadius:f}=l,g="inner"===l.borderAlign;if(!h)return;t.setLineDash(d||[]),t.lineDashOffset=u,g?(t.lineWidth=2*h,t.lineJoin=c||"round"):(t.lineWidth=h,t.lineJoin=c||"bevel");let p=e.endAngle;if(o){Kn(t,e,i,s,p,n);for(let e=0;e<o;++e)t.stroke();isNaN(r)||(p=a+(r%O||O))}g&&function(t,e,i){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=e;let h=n/r;t.beginPath(),t.arc(o,a,r,s-h,i+h),l>n?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+E,s-E),t.closePath(),t.clip()}(t,e,p),l.selfJoin&&p-a>=C&&0===f&&"miter"!==c&&function(t,e,i){const{startAngle:s,x:n,y:o,outerRadius:a,innerRadius:r,options:l}=e,{borderWidth:h,borderJoinStyle:c}=l,d=Math.min(h/a,G(s-i));if(t.beginPath(),t.arc(n,o,a-h/2,s+d/2,i-d/2),r>0){const e=Math.min(h/r,G(s-i));t.arc(n,o,r+h/2,i-e/2,s+e/2,!0)}else{const e=Math.min(h/2,a*G(s-i));if("round"===c)t.arc(n,o,e,i-C/2,s+C/2,!0);else if("bevel"===c){const a=2*e*e,r=-a*Math.cos(i+C/2)+n,l=-a*Math.sin(i+C/2)+o,h=a*Math.cos(s+C/2)+n,c=a*Math.sin(s+C/2)+o;t.lineTo(r,l),t.lineTo(h,c)}}t.closePath(),t.moveTo(0,0),t.rect(0,0,t.canvas.width,t.canvas.height),t.clip("evenodd")}(t,e,p),o||(Kn(t,e,i,s,p,n),t.stroke())}function Jn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.setLineDash(l(i.borderDash,e.borderDash)),t.lineDashOffset=l(i.borderDashOffset,e.borderDashOffset),t.lineJoin=l(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=l(i.borderWidth,e.borderWidth),t.strokeStyle=l(i.borderColor,e.borderColor)}function Zn(t,e,i){t.lineTo(i.x,i.y)}function Qn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=n<a&&o<a||n>r&&o>r;return{count:s,start:l,loop:e.loop,ilen:h<l&&!c?s+h-l:h-l}}function to(t,e,i,s){const{points:n,options:o}=e,{count:a,start:r,loop:l,ilen:h}=Qn(n,i,s),c=function(t){return t.stepped?Fe:t.tension||"monotone"===t.cubicInterpolationMode?Ve:Zn}(o);let d,u,f,{move:g=!0,reverse:p}=s||{};for(d=0;d<=h;++d)u=n[(r+(p?h-d:d))%a],u.skip||(g?(t.moveTo(u.x,u.y),g=!1):c(t,f,u,p,o.stepped),f=u);return l&&(u=n[(r+(p?h:0))%a],c(t,f,u,p,o.stepped)),!!l}function eo(t,e,i,s){const n=e.points,{count:o,start:a,ilen:r}=Qn(n,i,s),{move:l=!0,reverse:h}=s||{};let c,d,u,f,g,p,m=0,x=0;const b=t=>(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[b(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[b(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(i<f?f=i:i>g&&(g=i),m=(x*m+e)/++x):(_(),t.lineTo(e,i),u=s,x=0,f=g=i),p=i}_()}function io(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?eo:to}const so="function"==typeof Path2D;function no(t,e,i,s){so&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Jn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=io(e);for(const r of n)Jn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class oo extends $s{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;hi(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=zi(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ii(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?pi:t.tension||"monotone"===t.cubicInterpolationMode?mi:gi}(i);let l,h;for(l=0,h=o.length;l<h;++l){const{start:h,end:c}=o[l],d=n[h],u=n[c];if(d===u){a.push(d);continue}const f=r(d,u,Math.abs((s-d[e])/(u[e]-d[e])),i.stepped);f[e]=t[e],a.push(f)}return 1===a.length?a[0]:a}pathSegment(t,e,i){return io(this)(t,this,e,i)}path(t,e,i){const s=this.segments,n=io(this);let o=this._loop;e=e||0,i=i||this.points.length-e;for(const a of s)o&=n(t,this,a,{start:e,end:e+i-1});return!!o}draw(t,e,i,s){const n=this.options||{};(this.points||[]).length&&n.borderWidth&&(t.save(),no(t,this,i,s),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}}function ao(t,e,i,s){const n=t.options,{[i]:o}=t.getProps([i],s);return Math.abs(e-o)<n.radius+n.hitRadius}function ro(t,e){const{x:i,y:s,base:n,width:o,height:a}=t.getProps(["x","y","base","width","height"],e);let r,l,h,c,d;return t.horizontal?(d=a/2,r=Math.min(i,n),l=Math.max(i,n),h=s-d,c=s+d):(d=o/2,r=i-d,l=i+d,h=Math.min(s,n),c=Math.max(s,n)),{left:r,top:h,right:l,bottom:c}}function lo(t,e,i,s){return t?0:Z(e,i,s)}function ho(t){const e=ro(t),i=e.right-e.left,s=e.bottom-e.top,n=function(t,e,i){const s=t.options.borderWidth,n=t.borderSkipped,o=Mi(s);return{t:lo(n.top,o.top,0,i),r:lo(n.right,o.right,0,e),b:lo(n.bottom,o.bottom,0,i),l:lo(n.left,o.left,0,e)}}(t,i/2,s/2),a=function(t,e,i){const{enableBorderRadius:s}=t.getProps(["enableBorderRadius"]),n=t.options.borderRadius,a=wi(n),r=Math.min(e,i),l=t.borderSkipped,h=s||o(n);return{topLeft:lo(!h||l.top||l.left,a.topLeft,0,r),topRight:lo(!h||l.top||l.right,a.topRight,0,r),bottomLeft:lo(!h||l.bottom||l.left,a.bottomLeft,0,r),bottomRight:lo(!h||l.bottom||l.right,a.bottomRight,0,r)}}(t,i/2,s/2);return{outer:{x:e.left,y:e.top,w:i,h:s,radius:a},inner:{x:e.left+n.l,y:e.top+n.t,w:i-n.l-n.r,h:s-n.t-n.b,radius:{topLeft:Math.max(0,a.topLeft-Math.max(n.t,n.l)),topRight:Math.max(0,a.topRight-Math.max(n.t,n.r)),bottomLeft:Math.max(0,a.bottomLeft-Math.max(n.b,n.l)),bottomRight:Math.max(0,a.bottomRight-Math.max(n.b,n.r))}}}}function co(t,e,i,s){const n=null===e,o=null===i,a=t&&!(n&&o)&&ro(t,s);return a&&(n||tt(e,a.left,a.right))&&(o||tt(i,a.top,a.bottom))}function uo(t,e){t.rect(e.x,e.y,e.w,e.h)}function fo(t,e,i={}){const s=t.x!==i.x?-e:0,n=t.y!==i.y?-e:0,o=(t.x+t.w!==i.x+i.w?e:0)-s,a=(t.y+t.h!==i.y+i.h?e:0)-n;return{x:t.x+s,y:t.y+n,w:t.w+o,h:t.h+a,radius:t.radius}}var go=Object.freeze({__proto__:null,ArcElement:class extends $s{static id="arc";static defaults={borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1};static defaultRoutes={backgroundColor:"backgroundColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=X(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:h,outerRadius:c,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),u=(this.options.spacing+this.options.borderWidth)/2,f=l(d,r-a),g=J(n,a,r)&&a!==r,p=f>=O||g,m=tt(o,h+u,c+u);return p&&m}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(C,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Kn(t,e,i,s,l,n);for(let e=0;e<o;++e)t.fill();isNaN(r)||(l=a+(r%O||O))}Kn(t,e,i,s,l,n),t.fill()}(t,this,r,n,o),Gn(t,this,r,n,o),t.restore()}},BarElement:class extends $s{static id="bar";static defaults={borderSkipped:"start",borderWidth:0,borderRadius:0,inflateAmount:"auto",pointStyle:void 0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){const{inflateAmount:e,options:{borderColor:i,backgroundColor:s}}=this,{inner:n,outer:o}=ho(this),a=(r=o.radius).topLeft||r.topRight||r.bottomLeft||r.bottomRight?He:uo;var r;t.save(),o.w===n.w&&o.h===n.h||(t.beginPath(),a(t,fo(o,e,n)),t.clip(),a(t,fo(n,-e,o)),t.fillStyle=i,t.fill("evenodd")),t.beginPath(),a(t,fo(n,e)),t.fillStyle=s,t.fill(),t.restore()}inRange(t,e,i){return co(this,t,e,i)}inXRange(t,e){return co(this,t,null,e)}inYRange(t,e){return co(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,base:s,horizontal:n}=this.getProps(["x","y","base","horizontal"],t);return{x:n?(e+s)/2:e,y:n?i:(i+s)/2}}getRange(t){return"x"===t?this.width/2:this.height/2}},LineElement:oo,PointElement:class extends $s{static id="point";parsed;skip;stop;static defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps(["x","y"],i);return Math.pow(t-n,2)+Math.pow(e-o,2)<Math.pow(s.hitRadius+s.radius,2)}inXRange(t,e){return ao(this,t,"x",e)}inYRange(t,e){return ao(this,t,"y",e)}getCenterPoint(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverRadius||0);return 2*(e+(e&&t.borderWidth||0))}draw(t,e){const i=this.options;this.skip||i.radius<.1||!Re(this,e,this.size(i)/2)||(t.strokeStyle=i.borderColor,t.lineWidth=i.borderWidth,t.fillStyle=i.backgroundColor,Le(t,i,this.x,this.y))}getRange(){const t=this.options||{};return t.radius+t.hitRadius}}});function po(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function mo(t){const e=this.getLabels();return t>=0&&t<e.length?e[t]:t}function xo(t,e,{horizontal:i,minRotation:s}){const n=$(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}class bo extends tn{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return s(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=F(s),e=F(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,x=!s(a),b=!s(r),_=!s(h),y=(m-p)/(d+1);let v,M,w,k,S=B((m-p)/g/f)*f;if(S<1e-14&&!x&&!b)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=B(k*S/g/f)*f),s(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),x&&b&&o&&H((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=x?a:M,w=b?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=V(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(U(S),U(M));v=Math.pow(10,s(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(x&&(u&&M!==a?(i.push({value:a}),M<a&&D++,V(Math.round((M+D*S)*v)/v,a,xo(a,y,t))&&D++):M<a&&D++);D<k;++D){const t=Math.round((M+D*S)*v)/v;if(b&&t>r)break;i.push({value:t})}return b&&u&&w!==r?i.length&&V(i[i.length-1].value,r,xo(r,y,t))?i[i.length-1].value=r:i.push({value:r}):b&&w!==r||i.push({value:w}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&j(n,this,"value"),t.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return ne(t,this.chart.options.locale,this.options.ticks.format)}}class _o extends bo{static id="linear";static defaults={ticks:{callback:ae.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?t:0,this.max=a(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=$(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}const yo=t=>Math.floor(z(t)),vo=(t,e)=>Math.pow(10,yo(t)+e);function Mo(t){return 1===t/Math.pow(10,yo(t))}function wo(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function ko(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=yo(e);let o=function(t,e){let i=yo(e-t);for(;wo(t,e,i)>10;)i++;for(;wo(t,e,i)<10;)i--;return Math.min(i,yo(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const l=Math.pow(10,o),h=n>o?Math.pow(10,n):0,c=Math.round((e-h)*a)/a,d=Math.floor((e-h)/l/10)*l*10;let u=Math.floor((c-d)/Math.pow(10,o)),f=r(t.min,Math.round((h+d+u*Math.pow(10,o))*a)/a);for(;f<i;)s.push({value:f,major:Mo(f),significand:u}),u>=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,a=o>=0?1:a),f=Math.round((h+d+u*Math.pow(10,o))*a)/a;const g=r(t.max,f);return s.push({value:g,major:Mo(g),significand:u}),s}class So extends tn{static id="logarithmic";static defaults={ticks:{callback:ae.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=bo.prototype.parse.apply(this,[t,e]);if(0!==i)return a(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?Math.max(0,t):null,this.max=a(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!a(this._userMin)&&(this.min=t===vo(this.min,0)?vo(this.min,-1):vo(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(vo(i,-1)),o(vo(s,1)))),i<=0&&n(vo(s,-1)),s<=0&&o(vo(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=ko({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=z(t),this._valueRange=z(this.max)-z(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(z(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function Po(t){const e=t.ticks;if(e.display&&t.display){const t=ki(e.backdropPadding);return l(e.font&&e.font.size,ue.font.size)+t.height}return 0}function Do(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:t<s||t>n?{start:e-i,end:e}:{start:e,end:e+i}}function Co(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?C/a:0;for(let u=0;u<a;u++){const a=r.setContext(t.getPointLabelContext(u));o[u]=a.padding;const f=t.getPointPosition(u,t.drawingArea+o[u],l),g=Si(a.font),p=(h=t.ctx,c=g,d=n(d=t._pointLabels[u])?d:[d],{w:Oe(h,c.string,d),h:d.length*c.lineHeight});s[u]=p;const m=G(t.getIndexAngle(u)+l),x=Math.round(Y(m));Oo(i,e,m,Do(x,f.x,p.w,0,180),Do(x,f.y,p.h,90,270))}var h,c,d;t.setCenterPoint(e.l-i.l,i.r-e.r,e.t-i.t,i.b-e.b),t._pointLabelItems=function(t,e,i){const s=[],n=t._pointLabels.length,o=t.options,{centerPointLabels:a,display:r}=o.pointLabels,l={extra:Po(o)/2,additionalAngle:a?C/n:0};let h;for(let o=0;o<n;o++){l.padding=i[o],l.size=e[o];const n=Ao(t,o,l);s.push(n),"auto"===r&&(n.visible=To(n,h),n.visible&&(h=n))}return s}(t,s,o)}function Oo(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos(i));let r=0,l=0;s.start<e.l?(r=(e.l-s.start)/o,t.l=Math.min(t.l,e.l-r)):s.end>e.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.start<e.t?(l=(e.t-n.start)/a,t.t=Math.min(t.t,e.t-l)):n.end>e.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function Ao(t,e,i){const s=t.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=i,l=t.getPointPosition(e,s+n+a,o),h=Math.round(Y(G(l.angle+E))),c=function(t,e,i){90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e);return t}(l.y,r.h,h),d=function(t){if(0===t||180===t)return"center";if(t<180)return"left";return"right"}(h),u=function(t,e,i){"right"===i?t-=e:"center"===i&&(t-=e/2);return t}(l.x,r.w,d);return{visible:!0,x:l.x,y:c,textAlign:d,left:u,top:c,right:u+r.w,bottom:c+r.h}}function To(t,e){if(!e)return!0;const{left:i,top:s,right:n,bottom:o}=t;return!(Re({x:i,y:s},e)||Re({x:i,y:o},e)||Re({x:n,y:s},e)||Re({x:n,y:o},e))}function Lo(t,e,i){const{left:n,top:o,right:a,bottom:r}=i,{backdropColor:l}=e;if(!s(l)){const i=wi(e.borderRadius),s=ki(e.backdropPadding);t.fillStyle=l;const h=n-s.left,c=o-s.top,d=a-n+s.width,u=r-o+s.height;Object.values(i).some((t=>0!==t))?(t.beginPath(),He(t,{x:h,y:c,w:d,h:u,radius:i}),t.fill()):t.fillRect(h,c,d,u)}}function Eo(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;o<s;o++)i=t.getPointPosition(o,e),n.lineTo(i.x,i.y)}}class Ro extends bo{static id="radialLinear";static defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:ae.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=ki(Po(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a(t)&&!isNaN(t)?t:0,this.max=a(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/Po(this.options))}generateTickLabels(t){bo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=d(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?Co(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t<e.length){const i=e[t];return function(t,e,i){return Ci(t,{label:i,index:e,type:"pointLabel"})}(this.getContext(),t,i)}}getPointPosition(t,e,i=0){const s=this.getIndexAngle(t)-E+i;return{x:Math.cos(s)*e+this.xCenter,y:Math.sin(s)*e+this.yCenter,angle:s}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){const{left:e,top:i,right:s,bottom:n}=this._pointLabelItems[t];return{left:e,top:i,right:s,bottom:n}}drawBackground(){const{backgroundColor:t,grid:{circular:e}}=this.options;if(t){const i=this.ctx;i.save(),i.beginPath(),Eo(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),i.closePath(),i.fillStyle=t,i.fill(),i.restore()}}drawGrid(){const t=this.ctx,e=this.options,{angleLines:i,grid:s,border:n}=e,o=this._pointLabels.length;let a,r,l;if(e.pointLabels.display&&function(t,e){const{ctx:i,options:{pointLabels:s}}=t;for(let n=e-1;n>=0;n--){const e=t._pointLabelItems[n];if(!e.visible)continue;const o=s.setContext(t.getPointLabelContext(n));Lo(i,o,e);const a=Si(o.font),{x:r,y:l,textAlign:h}=e;Ne(i,t._pointLabels[n],r,l+a.lineHeight/2,a,{color:o.color,textAlign:h,textBaseline:"middle"})}}(this,o),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e||0===e&&this.min<0){r=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),a=s.setContext(i),l=n.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash||[]),o.lineDashOffset=n.dashOffset,o.beginPath(),Eo(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,a,r,o,l)}})),i.display){for(t.save(),a=o-1;a>=0;a--){const s=i.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,r=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&this.min>=0&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=Si(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=ki(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}Ne(t,s.label,0,-n,l,{color:r.color,strokeColor:r.textStrokeColor,strokeWidth:r.textStrokeWidth})})),t.restore()}drawTitle(){}}const Io={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},zo=Object.keys(Io);function Fo(t,e){return t-e}function Vo(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),a(l)||(l="string"==typeof n?i.parse(l,n):i.parse(l)),null===l?null:(o&&(l="week"!==o||!N(r)&&!0!==r?i.startOf(l,o):i.startOf(l,"isoWeek",r)),+l)}function Bo(t,e,i,s){const n=zo.length;for(let o=zo.indexOf(t);o<n-1;++o){const t=Io[zo[o]],n=t.steps?t.steps:Number.MAX_SAFE_INTEGER;if(t.common&&Math.ceil((i-e)/(n*t.size))<=s)return zo[o]}return zo[n-1]}function Wo(t,e,i){if(i){if(i.length){const{lo:s,hi:n}=et(i,e);t[i[s]>=e?i[s]:i[n]]=!0}}else t[e]=!0}function No(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a<o;++a)r=e[a],n[r]=a,s.push({value:r,major:!1});return 0!==o&&i?function(t,e,i,s){const n=t._adapter,o=+n.startOf(e[0].value,s),a=e[e.length-1].value;let r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=i[r],l>=0&&(e[l].major=!0);return e}(t,s,n,i):s}class Ho extends tn{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new In._date(t.adapters.date);s.init(e),b(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Vo(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:r}=this.getUserBounds();function l(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}o&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=a(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=a(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=nt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?Bo(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=zo.length-1;o>=zo.indexOf(i);o--){const i=zo[o];if(Io[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return zo[i?zo.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=zo.indexOf(t)+1,i=zo.length;e<i;++e)if(Io[zo[e]].common)return zo[e]}(this._unit):void 0,this.initOffsets(s),t.reverse&&o.reverse(),No(this,o,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map((t=>+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=Z(s,0,o),n=Z(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||Bo(n.minUnit,e,i,this._getLabelCapacity(e)),a=l(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=N(r)||!0===r,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;d<i;d=+t.add(d,a,o),u++)Wo(c,d,g);return d!==i&&"ticks"!==s.bounds&&1!==u||Wo(c,d,g),Object.keys(c).sort(Fo).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return d(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],u=i[e],f=l&&c&&u&&u.major;return this._adapter.format(t,s||(f?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e<i;++e)s=t[e],s.label=this._tickFormatFunction(s.value,e,t)}getDecimalForValue(t){return null===t?NaN:(t-this.min)/(this.max-this.min)}getPixelForValue(t){const e=this._offsets,i=this.getDecimalForValue(t);return this.getPixelForDecimal((e.start+i)*e.factor)}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return this.min+i*(this.max-this.min)}_getLabelSize(t){const e=this.options.ticks,i=this.ctx.measureText(t).width,s=$(this.isHorizontal()?e.maxRotation:e.minRotation),n=Math.cos(s),o=Math.sin(s),a=this._resolveTickFontOptions(0).size;return{w:i*n+a*o,h:i*o+a*n}}_getLabelCapacity(t){const e=this.options.time,i=e.displayFormats,s=i[e.unit]||i.millisecond,n=this._tickFormatFunction(t,0,No(this,[t],this._majorUnit),s),o=this._getLabelSize(n),a=Math.floor(this.isHorizontal()?this.width/o.w:this.height/o.h)-1;return a>0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t<e;++t)i=i.concat(s[t].controller.getAllParsedValues(this));return this._cache.data=this.normalize(i)}getLabelTimestamps(){const t=this._cache.labels||[];let e,i;if(t.length)return t;const s=this.getLabels();for(e=0,i=s.length;e<i;++e)t.push(Vo(this,s[e]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return lt(t.sort(Fo))}}function jo(t,e,i){let s,n,o,a,r=0,l=t.length-1;i?(e>=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=it(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=it(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}var $o=Object.freeze({__proto__:null,CategoryScale:class extends tn{static id="category";static defaults={ticks:{callback:mo}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:Z(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:po(i,t,l(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return mo.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:_o,LogarithmicScale:So,RadialLinearScale:Ro,TimeScale:Ho,TimeSeriesScale:class extends Ho{static id="timeseries";static defaults=Ho.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=jo(e,this.min),this._tableRange=jo(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o<a;++o)l=t[o],l>=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o<a;++o)h=s[o+1],r=s[o-1],l=s[o],Math.round((h+r)/2)!==l&&n.push({time:l,pos:o/(a-1)});return n}_generate(){const t=this.min,e=this.max;let i=super.getDataTimestamps();return i.includes(t)&&i.length||i.splice(0,0,t),i.includes(e)&&1!==i.length||i.push(e),i.sort(((t,e)=>t-e))}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(jo(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return jo(this._table,i*this._tableRange+this._minPos,!0)}}});const Yo=["rgb(54, 162, 235)","rgb(255, 99, 132)","rgb(255, 159, 64)","rgb(255, 205, 86)","rgb(75, 192, 192)","rgb(153, 102, 255)","rgb(201, 203, 207)"],Uo=Yo.map((t=>t.replace("rgb(","rgba(").replace(")",", 0.5)")));function Xo(t){return Yo[t%Yo.length]}function qo(t){return Uo[t%Uo.length]}function Ko(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof $n?e=function(t,e){return t.backgroundColor=t.data.map((()=>Xo(e++))),e}(i,e):n instanceof Yn?e=function(t,e){return t.backgroundColor=t.data.map((()=>qo(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Xo(e),t.backgroundColor=qo(e),++e}(i,e))}}function Go(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var Jo={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n,a=Go(s)||(r=n)&&(r.borderColor||r.backgroundColor)||o&&Go(o)||"rgba(0,0,0,0.1)"!==ue.borderColor||"rgba(0,0,0,0.1)"!==ue.backgroundColor;var r;if(!i.forceOverride&&a)return;const l=Ko(t);s.forEach(l)}};function Zo(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function Qo(t){t.data.datasets.forEach((t=>{Zo(t)}))}var ta={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Qo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===Pi([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=Z(it(e,o.axis,a).lo,0,i-1)),s=h?Z(it(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(i.threshold||4*n))return void Zo(e);let f;switch(s(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;c<o-2;c++){let s,n=0,o=0;const h=Math.floor((c+1)*r)+1+e,m=Math.min(Math.floor((c+2)*r)+1,i)+e,x=m-h;for(s=h;s<m;s++)n+=t[s].x,o+=t[s].y;n/=x,o/=x;const b=Math.floor(c*r)+1+e,_=Math.min(Math.floor((c+1)*r)+1,i)+e,{x:y,y:v}=t[p];for(u=f=-1,s=b;s<_;s++)f=.5*Math.abs((y-n)*(t[s].y-v)-(y-t[s].x)*(o-v)),f>u&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,i);break;case"min-max":f=function(t,e,i,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const x=[],b=e+i-1,_=t[e].x,y=t[b].x-_;for(o=e;o<e+i;++o){a=t[o],r=(a.x-_)/y*n,l=a.y;const e=0|r;if(e===h)l<f?(f=l,c=o):l>g&&(g=l,d=o),p=(m*p+a.x)/++m;else{const i=o-1;if(!s(c)&&!s(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&x.push({...t[e],x:p}),s!==u&&s!==i&&x.push({...t[s],x:p})}o>0&&i!==u&&x.push(t[i]),x.push(a),h=e,m=0,f=g=l,c=d=u=o}}return x}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=f}))},destroy(t){Qo(t)}};function ea(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=G(n),o=G(o)),{property:t,start:n,end:o}}function ia(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function sa(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function na(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=ia(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new oo({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function oa(t){return t&&!1!==t.fill}function aa(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!a(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function ra(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=l(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(o(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return a(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function la(t,e,i){const s=[];for(let n=0;n<i.length;n++){const o=i[n],{first:a,last:r,point:l}=ha(o,e,"x");if(!(!l||a&&r))if(a)s.unshift(l);else if(t.push(l),!r)break}t.push(...s)}function ha(t,e,i){const s=t.interpolate(e,i);if(!s)return{};const n=s[i],o=t.segments,a=t.points;let r=!1,l=!1;for(let t=0;t<o.length;t++){const e=o[t],s=a[e.start][i],h=a[e.end][i];if(tt(n,s,h)){r=n===s,l=n===h;break}}return{first:r,last:l,point:s}}class ca{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,end:O},t.arc(s,n,o,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math.cos(n)*s,y:i+Math.sin(n)*s,angle:n}}}function da(t){const{chart:e,fill:i,line:s}=t;if(a(i))return function(t,e){const i=t.getDatasetMeta(e),s=i&&t.isDatasetVisible(e);return s?i.dataset:null}(e,i);if("stack"===i)return function(t){const{scale:e,index:i,line:s}=t,n=[],o=s.segments,a=s.points,r=function(t,e){const i=[],s=t.getMatchingVisibleMetas("line");for(let t=0;t<s.length;t++){const n=s[t];if(n.index===e)break;n.hidden||i.unshift(n.dataset)}return i}(e,i);r.push(na({x:null,y:e.bottom},s));for(let t=0;t<o.length;t++){const e=o[t];for(let t=e.start;t<=e.end;t++)la(n,a[t],r)}return new oo({points:n,options:{}})}(t);if("shape"===i)return!0;const n=function(t){const e=t.scale||{};if(e.getPointPositionForValue)return function(t){const{scale:e,fill:i}=t,s=e.options,n=e.getLabels().length,a=s.reverse?e.max:e.min,r=function(t,e,i){let s;return s="start"===t?i:"end"===t?e.options.reverse?e.min:e.max:o(t)?t.value:e.getBaseValue(),s}(i,e,a),l=[];if(s.grid.circular){const t=e.getPointPositionForValue(0,a);return new ca({x:t.x,y:t.y,radius:e.getDistanceFromCenterForValue(r)})}for(let t=0;t<n;++t)l.push(e.getPointPositionForValue(t,r));return l}(t);return function(t){const{scale:e={},fill:i}=t,s=function(t,e){let i=null;return"start"===t?i=e.bottom:"end"===t?i=e.top:o(t)?i=e.getPixelForValue(t.value):e.getBasePixel&&(i=e.getBasePixel()),i}(i,e);if(a(s)){const t=e.isHorizontal();return{x:t?s:null,y:t?null:s}}return null}(t)}(t);return n instanceof ca?n:na(n,s)}function ua(t,e,i){const s=da(e),{chart:n,index:o,line:a,scale:r,axis:l}=e,h=a.options,c=h.fill,d=h.backgroundColor,{above:u=d,below:f=d}=c||{},g=n.getDatasetMeta(o),p=Ni(n,g);s&&a.points.length&&(Ie(t,i),function(t,e){const{line:i,target:s,above:n,below:o,area:a,scale:r,clip:l}=e,h=i._loop?"angle":e.axis;t.save();let c=o;o!==n&&("x"===h?(fa(t,s,a.top),pa(t,{line:i,target:s,color:n,scale:r,property:h,clip:l}),t.restore(),t.save(),fa(t,s,a.bottom)):"y"===h&&(ga(t,s,a.left),pa(t,{line:i,target:s,color:o,scale:r,property:h,clip:l}),t.restore(),t.save(),ga(t,s,a.right),c=n));pa(t,{line:i,target:s,color:c,scale:r,property:h,clip:l}),t.restore()}(t,{line:a,target:s,above:u,below:f,area:i,scale:r,axis:l,clip:p}),ze(t))}function fa(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPath();for(const r of s){const{start:s,end:l}=r,h=n[s],c=n[ia(s,l,n)];o?(t.moveTo(h.x,h.y),o=!1):(t.lineTo(h.x,i),t.lineTo(h.x,h.y)),a=!!e.pathSegment(t,r,{move:a}),a?t.closePath():t.lineTo(c.x,i)}t.lineTo(e.first().x,i),t.closePath(),t.clip()}function ga(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPath();for(const r of s){const{start:s,end:l}=r,h=n[s],c=n[ia(s,l,n)];o?(t.moveTo(h.x,h.y),o=!1):(t.lineTo(i,h.y),t.lineTo(h.x,h.y)),a=!!e.pathSegment(t,r,{move:a}),a?t.closePath():t.lineTo(i,c.y)}t.lineTo(i,e.first().y),t.closePath(),t.clip()}function pa(t,e){const{line:i,target:s,property:n,color:o,scale:a,clip:r}=e,l=function(t,e,i){const s=t.segments,n=t.points,o=e.points,a=[];for(const t of s){let{start:s,end:r}=t;r=ia(s,r,n);const l=ea(i,n[s],n[r],t.loop);if(!e.segments){a.push({source:t,target:l,start:n[s],end:n[r]});continue}const h=Ii(e,l);for(const e of h){const s=ea(i,o[e.start],o[e.end],e.loop),r=Ri(t,n,s);for(const t of r)a.push({source:t,target:e,start:{[i]:sa(l,s,"start",Math.max)},end:{[i]:sa(l,s,"end",Math.min)}})}}return a}(i,s,n);for(const{source:e,target:h,start:c,end:d}of l){const{style:{backgroundColor:l=o}={}}=e,u=!0!==s;t.save(),t.fillStyle=l,ma(t,a,r,u&&ea(n,c,d)),t.beginPath();const f=!!i.pathSegment(t,e);let g;if(u){f?t.closePath():xa(t,s,d,n);const e=!!s.pathSegment(t,h,{move:f,reverse:!0});g=f&&e,g||xa(t,s,c,n)}t.closePath(),t.fill(g?"evenodd":"nonzero"),t.restore()}}function ma(t,e,i,s){const n=e.chart.chartArea,{property:o,start:a,end:r}=s||{};if("x"===o||"y"===o){let e,s,l,h;"x"===o?(e=a,s=n.top,l=r,h=n.bottom):(e=n.left,s=a,l=n.right,h=r),t.beginPath(),i&&(e=Math.max(e,i.left),l=Math.min(l,i.right),s=Math.max(s,i.top),h=Math.min(h,i.bottom)),t.rect(e,s,l-e,h-s),t.clip()}}function xa(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}var ba={id:"filler",afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let o,a,r,l;for(a=0;a<s;++a)o=t.getDatasetMeta(a),r=o.dataset,l=null,r&&r.options&&r instanceof oo&&(l={visible:t.isDatasetVisible(a),index:a,fill:ra(r,a,s),chart:t,axis:o.controller.options.indexAxis,scale:o.vScale,line:r}),o.$filler=l,n.push(l);for(a=0;a<s;++a)l=n[a],l&&!1!==l.fill&&(l.fill=aa(n,a,i.propagate))},beforeDraw(t,e,i){const s="beforeDraw"===i.drawTime,n=t.getSortedVisibleDatasetMetas(),o=t.chartArea;for(let e=n.length-1;e>=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&ua(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;oa(i)&&ua(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;oa(s)&&"beforeDatasetDraw"===i.drawTime&&ua(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const _a=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class ya extends $s{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=Si(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=_a(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=va(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=Oi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ft(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ft(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Ie(t,this),this._draw(),ze(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ue.color,r=Oi(t.rtl,this.left,this.width),h=Si(o.font),{padding:c}=o,d=h.size,u=d/2;let f;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=_a(o,d),x=this.isHorizontal(),b=this._computeTitleHeight();f=x?{x:ft(n,this.left+c,this.right-i[0]),y:this.top+c+b,line:0}:{x:this.left+c,y:ft(n,this.top+b+c,this.bottom-e[0].height),line:0},Ai(this.ctx,t.textDirection);const _=m+c;this.legendItems.forEach(((y,v)=>{s.strokeStyle=y.fontColor,s.fillStyle=y.fontColor;const M=s.measureText(y.text).width,w=r.textAlign(y.textAlign||(y.textAlign=o.textAlign)),k=g+u+M;let S=f.x,P=f.y;r.setWidth(this.width),x?v>0&&S+k+c>this.right&&(P=f.y+=_,f.line++,S=f.x=ft(n,this.left+c,this.right-i[f.line])):v>0&&P+_>this.bottom&&(S=f.x=S+e[f.line].width+c,f.line++,P=f.y=ft(n,this.top+b+c,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const n=l(i.lineWidth,1);if(s.fillStyle=l(i.fillStyle,a),s.lineCap=l(i.lineCap,"butt"),s.lineDashOffset=l(i.lineDashOffset,0),s.lineJoin=l(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=l(i.strokeStyle,a),s.setLineDash(l(i.lineDash,[])),o.usePointStyle){const a={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,g/2);Ee(s,a,l,e+u,o.pointStyleWidth&&g)}else{const o=e+Math.max((d-p)/2,0),a=r.leftForLtr(t,g),l=wi(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?He(s,{x:a,y:o,w:g,h:p,radius:l}):s.rect(a,o,g,p),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(S),P,y),S=gt(w,S+g+u,x?S+k:this.right,t.rtl),function(t,e,i){Ne(s,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(S),P,y),x)f.x+=k+c;else if("string"!=typeof y.text){const t=h.lineHeight;f.y+=va(y,t)+c}else f.y+=_})),Ti(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=Si(e.font),s=ki(e.padding);if(!e.display)return;const n=Oi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ft(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ft(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ft(a,c,c+d);o.textAlign=n.textAlign(ut(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,Ne(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=Si(t.font),i=ki(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;i<n.length;++i)if(s=n[i],tt(t,s.left,s.left+s.width)&&tt(e,s.top,s.top+s.height))return this.legendItems[i];return null}handleEvent(t){const e=this.options;if(!function(t,e){if(("mousemove"===t||"mouseout"===t)&&(e.onHover||e.onLeave))return!0;if(e.onClick&&("click"===t||"mouseup"===t))return!0;return!1}(t.type,e))return;const i=this._getLegendItemAt(t.x,t.y);if("mousemove"===t.type||"mouseout"===t.type){const o=this._hoveredItem,a=(n=i,null!==(s=o)&&null!==n&&s.datasetIndex===n.datasetIndex&&s.index===n.index);o&&!a&&d(e.onLeave,[t,o,this],this),this._hoveredItem=i,i&&!a&&d(e.onHover,[t,i,this],this)}else i&&d(e.onClick,[t,i,this],this);var s,n}}function va(t,e){return e*(t.text?t.text.length:0)}var Ma={id:"legend",_element:ya,start(t,e,i){const s=t.legend=new ya({ctx:t.ctx,options:i,chart:t});ls.configure(t,s,i),ls.addBox(t,s)},stop(t){ls.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,i){const s=t.legend;ls.configure(t,s,i),s.options=i},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,i){const s=e.datasetIndex,n=i.chart;n.isDatasetVisible(s)?(n.hide(s),e.hidden=!0):(n.show(s),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=ki(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class wa extends $s{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=n(i.text)?i.text.length:1;this._padding=ki(i.padding);const o=s*Si(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ft(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ft(a,s,e),c=-.5*C):(l=n-t,h=ft(a,e,s),c=.5*C),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Si(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);Ne(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ut(e.align),textBaseline:"middle",translation:[n,o]})}}var ka={id:"title",_element:wa,start(t,e,i){!function(t,e){const i=new wa({ctx:t.ctx,options:e,chart:t});ls.configure(t,i,e),ls.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ls.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ls.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Sa=new WeakMap;var Pa={id:"subtitle",start(t,e,i){const s=new wa({ctx:t.ctx,options:i,chart:t});ls.configure(t,s,i),ls.addBox(t,s),Sa.set(t,s)},stop(t){ls.removeBox(t,Sa.get(t)),Sa.delete(t)},beforeUpdate(t,e,i){const s=Sa.get(t);ls.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Da={average(t){if(!t.length)return!1;let e,i,s=new Set,n=0,o=0;for(e=0,i=t.length;e<i;++e){const i=t[e].element;if(i&&i.hasValue()){const t=i.tooltipPosition();s.add(t.x),n+=t.y,++o}}if(0===o||0===s.size)return!1;return{x:[...s].reduce(((t,e)=>t+e))/s.size,y:n/o}},nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,s=t.length;i<s;++i){const s=t[i].element;if(s&&s.hasValue()){const t=q(e,s.getCenterPoint());t<r&&(r=t,n=s)}}if(n){const t=n.tooltipPosition();o=t.x,a=t.y}return{x:o,y:a}}};function Ca(t,e){return e&&(n(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Oa(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Aa(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Ta(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=Si(e.bodyFont),h=Si(e.titleFont),c=Si(e.footerFont),d=o.length,f=n.length,g=s.length,p=ki(e.padding);let m=p.height,x=0,b=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(b+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),b){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(b-g)*l.lineHeight+(b-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){x=Math.max(x,i.measureText(t).width+_)};return i.save(),i.font=h.string,u(t.title,y),i.font=l.string,u(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,u(s,(t=>{u(t.before,y),u(t.lines,y),u(t.after,y)})),_=0,i.font=c.string,u(t.footer,y),i.restore(),x+=p.width,{width:x,height:m}}function La(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Ea(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return i<s/2?"top":i>t.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||La(t,e,i,s),yAlign:s}}function Ra(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=wi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:Z(g,0,s.width-e.width),y:Z(p,0,s.height-e.height)}}function Ia(t,e,i){const s=ki(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function za(t){return Ca([],Oa(t))}function Fa(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Va={beforeTitle:e,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex<s)return i[e.dataIndex]}return""},afterTitle:e,beforeBody:e,beforeLabel:e,label(t){if(this&&this.options&&"dataset"===this.options.mode)return t.label+": "+t.formattedValue||t.formattedValue;let e=t.dataset.label||"";e&&(e+=": ");const i=t.formattedValue;return s(i)||(e+=i),e},labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:e,afterBody:e,beforeFooter:e,footer:e,afterFooter:e};function Ba(t,e,i,s){const n=t[e].call(i,s);return void 0===n?Va[e].call(i,s):n}class Wa extends $s{static positioners=Da;constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,n=new Ts(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(n)),n}getContext(){return this.$context||(this.$context=(t=this.chart.getContext(),e=this,i=this._tooltipItems,Ci(t,{tooltip:e,tooltipItems:i,type:"tooltip"})));var t,e,i}getTitle(t,e){const{callbacks:i}=e,s=Ba(i,"beforeTitle",this,t),n=Ba(i,"title",this,t),o=Ba(i,"afterTitle",this,t);let a=[];return a=Ca(a,Oa(s)),a=Ca(a,Oa(n)),a=Ca(a,Oa(o)),a}getBeforeBody(t,e){return za(Ba(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:i}=e,s=[];return u(t,(t=>{const e={before:[],lines:[],after:[]},n=Fa(i,t);Ca(e.before,Oa(Ba(n,"beforeLabel",this,t))),Ca(e.lines,Ba(n,"label",this,t)),Ca(e.after,Oa(Ba(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return za(Ba(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=Ba(i,"beforeFooter",this,t),n=Ba(i,"footer",this,t),o=Ba(i,"afterFooter",this,t);let a=[];return a=Ca(a,Oa(s)),a=Ca(a,Oa(n)),a=Ca(a,Oa(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;a<r;++a)l.push(Aa(this.chart,e[a]));return t.filter&&(l=l.filter(((e,s,n)=>t.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),u(l,(e=>{const i=Fa(t.callbacks,e);s.push(Ba(i,"labelColor",this,e)),n.push(Ba(i,"labelPointStyle",this,e)),o.push(Ba(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Da[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Ta(this,i),a=Object.assign({},t,e),r=Ea(this.chart,i,a),l=Ra(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=wi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,x,b,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,b=_+o,y=_-o):(p=d+f,m=p+o,b=_-o,y=_+o),x=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(b=u,_=b-o,p=m-o,x=m+o):(b=u+g,_=b+o,p=m+o,x=m-o),y=b),{x1:p,x2:m,x3:x,y1:b,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Oi(i.rtl,this.x,this.width);for(t.x=Ia(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=Si(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r<n;++r)e.fillText(s[r],l.x(t.x),t.y+o.lineHeight/2),t.y+=o.lineHeight+a,r+1===n&&(t.y+=i.titleMarginBottom-a)}}_drawColorBox(t,e,i,s,n){const a=this.labelColors[i],r=this.labelPointStyles[i],{boxHeight:l,boxWidth:h}=n,c=Si(n.bodyFont),d=Ia(this,"left",n),u=s.x(d),f=l<c.lineHeight?(c.lineHeight-l)/2:0,g=e.y+f;if(n.usePointStyle){const e={radius:Math.min(h,l)/2,pointStyle:r.pointStyle,rotation:r.rotation,borderWidth:1},i=s.leftForLtr(u,h)+h/2,o=g+l/2;t.strokeStyle=n.multiKeyBackground,t.fillStyle=n.multiKeyBackground,Le(t,e,i,o),t.strokeStyle=a.borderColor,t.fillStyle=a.backgroundColor,Le(t,e,i,o)}else{t.lineWidth=o(a.borderWidth)?Math.max(...Object.values(a.borderWidth)):a.borderWidth||1,t.strokeStyle=a.borderColor,t.setLineDash(a.borderDash||[]),t.lineDashOffset=a.borderDashOffset||0;const e=s.leftForLtr(u,h),i=s.leftForLtr(s.xPlus(u,1),h-2),r=wi(a.borderRadius);Object.values(r).some((t=>0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,He(t,{x:e,y:g,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),He(t,{x:i,y:g+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,h,l),t.strokeRect(e,g,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,g+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=Si(i.bodyFont);let d=c.lineHeight,f=0;const g=Oi(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let x,b,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Ia(this,m,i),e.fillStyle=i.bodyColor,u(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y<M;++y){for(x=s[y],b=this.labelTextColors[y],e.fillStyle=b,u(x.before,p),_=x.lines,a&&_.length&&(this._drawColorBox(e,t,y,g,i),d=Math.max(c.lineHeight,r)),v=0,w=_.length;v<w;++v)p(_[v]),d=c.lineHeight;u(x.after,p)}f=0,d=c.lineHeight,u(this.afterBody,p),t.y-=n}drawFooter(t,e,i){const s=this.footer,n=s.length;let o,a;if(n){const r=Oi(i.rtl,this.x,this.width);for(t.x=Ia(this,i.footerAlign,i),t.y+=i.footerMarginTop,e.textAlign=r.textAlign(i.footerAlign),e.textBaseline="middle",o=Si(i.footerFont),e.fillStyle=i.footerColor,e.font=o.string,a=0;a<n;++a)e.fillText(s[a],r.x(t.x),t.y+o.lineHeight/2),t.y+=o.lineHeight+i.footerSpacing}}drawBackground(t,e,i,s){const{xAlign:n,yAlign:o}=this,{x:a,y:r}=t,{width:l,height:h}=i,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=wi(s.cornerRadius);e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,e.lineWidth=s.borderWidth,e.beginPath(),e.moveTo(a+c,r),"top"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+l-d,r),e.quadraticCurveTo(a+l,r,a+l,r+d),"center"===o&&"right"===n&&this.drawCaret(t,e,i,s),e.lineTo(a+l,r+h-f),e.quadraticCurveTo(a+l,r+h,a+l-f,r+h),"bottom"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+u,r+h),e.quadraticCurveTo(a,r+h,a,r+h-u),"center"===o&&"left"===n&&this.drawCaret(t,e,i,s),e.lineTo(a,r+c),e.quadraticCurveTo(a,r,a+c,r),e.closePath(),e.fill(),s.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Da[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Ta(this,t),a=Object.assign({},i,this._size),r=Ea(e,t,a),l=Ra(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=ki(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ai(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Ti(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!f(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!f(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e.filter((t=>this.chart.data.datasets[t.datasetIndex]&&void 0!==this.chart.getDatasetMeta(t.datasetIndex).controller.getParsed(t.index)));const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Da[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Na={id:"tooltip",_element:Wa,positioners:Da,afterInit(t,e,i){i&&(t.tooltip=new Wa({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Va},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return Tn.register(Un,$o,go,t),Tn.helpers={...Hi},Tn._adapters=In,Tn.Animation=As,Tn.Animations=Ts,Tn.animator=bt,Tn.controllers=nn.controllers.items,Tn.DatasetController=js,Tn.Element=$s,Tn.elements=go,Tn.Interaction=Ki,Tn.layouts=ls,Tn.platforms=Ds,Tn.Scale=tn,Tn.Ticks=ae,Object.assign(Tn,Un,$o,go,t,Ds),Tn.Chart=Tn,"undefined"!=typeof window&&(window.Chart=Tn),Tn}));
+//# sourceMappingURL=chart.umd.min.js.map
Index: node_modules/chart.js/dist/chart.umd.min.js.map
===================================================================
--- node_modules/chart.js/dist/chart.umd.min.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chart.umd.min.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"chart.umd.min.js","sources":["../src/helpers/helpers.core.ts","../src/helpers/helpers.math.ts","../src/helpers/helpers.collection.ts","../src/helpers/helpers.extras.ts","../src/core/core.animator.js","../node_modules/.pnpm/@kurkle+color@0.3.2/node_modules/@kurkle/color/dist/color.esm.js","../src/helpers/helpers.color.ts","../src/core/core.animations.defaults.js","../src/helpers/helpers.intl.ts","../src/core/core.ticks.js","../src/core/core.defaults.js","../src/core/core.layouts.defaults.js","../src/core/core.scale.defaults.js","../src/helpers/helpers.dom.ts","../src/helpers/helpers.canvas.ts","../src/helpers/helpers.config.ts","../src/helpers/helpers.curve.ts","../src/helpers/helpers.easing.ts","../src/helpers/helpers.interpolation.ts","../src/helpers/helpers.options.ts","../src/helpers/helpers.rtl.ts","../src/helpers/helpers.segment.js","../src/helpers/helpers.dataset.ts","../src/core/core.interaction.js","../src/core/core.layouts.js","../src/platform/platform.base.js","../src/platform/platform.basic.js","../src/platform/platform.dom.js","../src/platform/index.js","../src/core/core.animation.js","../src/core/core.animations.js","../src/core/core.datasetController.js","../src/core/core.element.ts","../src/core/core.scale.autoskip.js","../src/core/core.scale.js","../src/core/core.typedRegistry.js","../src/core/core.registry.js","../src/core/core.plugins.js","../src/core/core.config.js","../src/core/core.controller.js","../src/core/core.adapters.ts","../src/controllers/controller.bar.js","../src/controllers/controller.doughnut.js","../src/controllers/controller.polarArea.js","../src/controllers/controller.bubble.js","../src/controllers/controller.line.js","../src/controllers/controller.pie.js","../src/controllers/controller.radar.js","../src/controllers/controller.scatter.js","../src/elements/element.arc.ts","../src/elements/element.line.js","../src/elements/element.point.ts","../src/elements/element.bar.js","../src/scales/scale.category.js","../src/scales/scale.linearbase.js","../src/scales/scale.linear.js","../src/scales/scale.logarithmic.js","../src/scales/scale.radialLinear.js","../src/scales/scale.time.js","../src/scales/scale.timeseries.js","../src/plugins/plugin.colors.ts","../src/plugins/plugin.decimation.js","../src/plugins/plugin.filler/filler.segment.js","../src/plugins/plugin.filler/filler.helper.js","../src/plugins/plugin.filler/filler.options.js","../src/plugins/plugin.filler/filler.target.stack.js","../src/plugins/plugin.filler/simpleArc.js","../src/plugins/plugin.filler/filler.target.js","../src/plugins/plugin.filler/filler.drawing.js","../src/plugins/plugin.filler/index.js","../src/plugins/plugin.legend.js","../src/plugins/plugin.title.js","../src/plugins/plugin.subtitle.js","../src/plugins/plugin.tooltip.js","../src/index.umd.ts"],"sourcesContent":["/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n  /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n  let id = 0;\n  return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n  return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n  isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n  fn: T | undefined,\n  args: unknown[],\n  thisArg?: TA\n): R | undefined {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n  loopable: Record<string, T>,\n  fn: (this: TA, v: T, i: string) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[],\n  fn: (this: TA, v: T, i: number) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[] | Record<string, T>,\n  fn: (this: TA, v: T, i: any) => void,\n  thisArg?: TA,\n  reverse?: boolean\n) {\n  let i: number, len: number, keys: string[];\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n  let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n  if (isArray(source)) {\n    return source.map(clone) as unknown as T;\n  }\n\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone(source[keys[k]]);\n    }\n\n    return target;\n  }\n\n  return source;\n}\n\nfunction isValidKey(key: string) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone(sval);\n  }\n}\n\nexport interface MergeOptions {\n  merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n  target: T,\n  source: [S1, S2, S3, S4],\n  options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target as AnyObject;\n  }\n\n  options = options || {};\n  const merger = options.merger || _merger;\n  let current: AnyObject;\n\n  for (let i = 0; i < ilen; ++i) {\n    current = sources[i];\n    if (!isObject(current)) {\n      continue;\n    }\n\n    const keys = Object.keys(current);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options as AnyObject);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone(sval);\n  }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n      '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': v => v,\n  // default resolvers\n  x: o => o.x,\n  y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n  const parts = key.split('.');\n  const keys: string[] = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        // For backward compatibility:\n        // Chart.helpers.core resolveObjectKey should break at empty key\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n  return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n  const result: number[] = [];\n  const sqrt = Math.sqrt(value);\n  let i: number;\n\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) { // if value is a square number\n    result.push(sqrt);\n  }\n\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n  return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n  return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n  array: Record<string, number>[],\n  target: { min: number, max: number },\n  property: string\n) {\n  let i: number, ilen: number, value: number;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nexport function toRadians(degrees: number) {\n  return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n  return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n  if (!isFiniteNumber(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n  centrePoint: Point,\n  anglePoint: Point\n) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n  if (angle < (-0.5 * PI)) {\n    angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n  }\n\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n  return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n  return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n  return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n  table: number[],\n  value: number,\n  cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n  table: T[],\n  value: number,\n  cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n  table: unknown[],\n  value: number,\n  cmp?: (value: number) => boolean\n) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid: number;\n\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number,\n  last?: boolean\n) =>\n  _lookup(table, value, last\n    ? index => {\n      const ti = table[index][key];\n      return ti < value || ti === value && table[index + 1][key] === value;\n    }\n    : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number\n) =>\n  _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n  let start = 0;\n  let end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n  _onDataPush?(...item: T[]): void;\n  _onDataPop?(): void;\n  _onDataShift?(): void;\n  _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n  _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n\n  delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n  const set = new Set<T>(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n  fn: (...args: TArgs) => void,\n  thisArg: any,\n) {\n  let argsToUse = [] as TArgs;\n  let ticking = false;\n\n  return function(...args: TArgs) {\n    // Save the args for use later\n    argsToUse = args;\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n  let timeout;\n  return function(...args: TArgs) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count = pointCount;\n\n  if (meta._sorted) {\n    const {iScale, vScale, _parsed} = meta;\n    const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n    if (minDefined) {\n      start = Math.min(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, axis, min).lo,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n      if (spanGaps) {\n        const distanceToDefinedLo = (_parsed\n          .slice(0, start + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        start -= Math.max(0, distanceToDefinedLo);\n      }\n      start = _limitValue(start, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n      let end = Math.max(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n      if (spanGaps) {\n        const distanceToDefinedHi = (_parsed\n          .slice(end - 1)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        end += Math.max(0, distanceToDefinedHi);\n      }\n      count = _limitValue(end, start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n","import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n\n  /**\n\t * @private\n\t */\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _update(date = Date.now()) {\n    let remaining = 0;\n\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n\n      for (; i >= 0; --i) {\n        item = items[i];\n\n        if (item._active) {\n          if (item._total > anims.duration) {\n            // if the animation has been updated and its duration prolonged,\n            // update to total duration of current animations run (for progress event)\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          // Remove the item by replacing it with last item and removing the last\n          // A lot faster than splice.\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n\n      remaining += items.length;\n    });\n\n    this._lastDate = date;\n\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n\n  /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n\n  /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n\n  /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n\n  /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n  value:\n  | string\n  | { r: number; g: number; b: number; a: number }\n  | [number, number, number]\n  | [number, number, number, number]\n): Color;\nexport function color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n  defaults.set('animation', {\n    delay: undefined,\n    duration: 1000,\n    easing: 'easeOutQuart',\n    fn: undefined,\n    from: undefined,\n    loop: undefined,\n    to: undefined,\n    type: undefined,\n  });\n\n  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n  });\n\n  defaults.set('animations', {\n    colors: {\n      type: 'color',\n      properties: colors\n    },\n    numbers: {\n      type: 'number',\n      properties: numbers\n    },\n  });\n\n  defaults.describe('animations', {\n    _fallback: 'animation',\n  });\n\n  defaults.set('transitions', {\n    active: {\n      animation: {\n        duration: 400\n      }\n    },\n    resize: {\n      animation: {\n        duration: 0\n      }\n    },\n    show: {\n      animations: {\n        colors: {\n          from: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          duration: 0 // show immediately\n        },\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n        },\n      }\n    }\n  });\n}\n","\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n  return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n  /**\n   * Formatter for value labels\n   * @method Chart.Ticks.formatters.values\n   * @param value the value to display\n   * @return {string|string[]} the label to display\n   */\n  values(value) {\n    return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n  },\n\n  /**\n   * Formatter for numeric ticks\n   * @method Chart.Ticks.formatters.numeric\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0'; // never show decimal places for 0\n    }\n\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n    if (ticks.length > 1) {\n      // all ticks are small or there huge numbers; use scientific notation\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    const logDelta = log10(Math.abs(delta));\n\n    // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n    // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n    // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n    //\n    // toFixed has a max of 20 decimal places\n    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n\n    return formatNumber(tickValue, locale, options);\n  },\n\n\n  /**\n   * Formatter for logarithmic ticks\n   * @method Chart.Ticks.formatters.logarithmic\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n    if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n  // Figure out how many digits to show\n  // The space between the first two ticks might be smaller than normal spacing\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    // not an integer\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\n\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope(root, scope), values);\n  }\n  return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n  constructor(_descriptors, _appliers) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n\n    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n\n  /**\n\t * @param {string} scope\n\t */\n  get(scope) {\n    return getScope(this, scope);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n\n  /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t *   - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope(this, scope);\n    const targetScopeObject = getScope(this, targetScope);\n    const privateName = '_' + name;\n\n    Object.defineProperties(scopeObject, {\n      // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n\n  apply(appliers) {\n    appliers.forEach((apply) => apply(this));\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","export function applyLayoutsDefaults(defaults) {\n  defaults.set('layout', {\n    autoPadding: true,\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n}\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 3.0.0\n     */\n    bounds: 'ticks',\n\n    clip: true,\n\n    /**\n     * Addition grace added to max and reduced from min data value.\n     * @since 3.0.0\n     */\n    grace: 0,\n\n    // grid line settings\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: (_ctx, options) => options.lineWidth,\n      tickColor: (_ctx, options) => options.color,\n      offset: false,\n    },\n\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n\n    // scale title\n    title: {\n      // display property\n      display: false,\n\n      // actual label\n      text: '',\n\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n\n    // label settings\n    ticks: {\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      textStrokeWidth: 0,\n      textStrokeColor: '',\n      padding: 3,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 3,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2,\n    }\n  });\n\n  defaults.route('scale.ticks', 'color', '', 'color');\n  defaults.route('scale.grid', 'color', '', 'borderColor');\n  defaults.route('scale.border', 'color', '', 'borderColor');\n  defaults.route('scale.title', 'color', '', 'color');\n\n  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n    _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n  });\n\n  defaults.describe('scales', {\n    _fallback: 'scale',\n  });\n\n  defaults.describe('scale.ticks', {\n    _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n    _indexable: (name) => name !== 'backdropPadding',\n  });\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = (parent as ShadowRoot).host;\n  }\n  return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n  let valueInPixels: number;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n\n    if (styleValue.indexOf('%') !== -1) {\n      // percentage * size in dimension\n      valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n\n  return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n  element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n  const result = {} as ChartArea;\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n  (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n  e: Event | TouchEvent | MouseEvent,\n  canvas: HTMLCanvasElement\n): {\n    x: number;\n    y: number;\n    box: boolean;\n  } {\n  const touches = (e as TouchEvent).touches;\n  const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n  const {offsetX, offsetY} = source as MouseEvent;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n  event: Event | ChartEvent | TouchEvent | MouseEvent,\n  chart: Chart | PrivateChart\n): { x: number; y: number } {\n  if ('native' in event) {\n    return event;\n  }\n\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(event, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n  let maxWidth: number, maxHeight: number;\n\n  if (width === undefined || height === undefined) {\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect(); // this is the border box of the container\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n  canvas: HTMLCanvasElement,\n  bbWidth?: number,\n  bbHeight?: number,\n  aspectRatio?: number\n): { width: number; height: number } {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    // https://github.com/chartjs/Chart.js/issues/4659\n    // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n    height = round1(width / 2);\n  }\n\n  const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n    height = containerSize.height;\n    width = round1(Math.floor(height * aspectRatio));\n  }\n\n  return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n  chart: Chart | PrivateChart,\n  forceRatio: number,\n  forceStyle?: boolean\n): boolean | void {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n  (chart as PrivateChart).height = Math.floor(chart.height);\n  (chart as PrivateChart).width = Math.floor(chart.width);\n\n  const canvas = chart.canvas;\n\n  // If no style has been set on the canvas, the render size is used as display size,\n  // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n  // See https://github.com/chartjs/Chart.js/issues/3575\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() { // This function will be called when the browser attempts to access the passive property.\n        passiveSupported = true;\n        return false;\n      }\n    } as EventListenerOptions;\n\n    if (_isDomSupported()) {\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    }\n  } catch (e) {\n    // continue regardless of error\n  }\n  return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n  element: HTMLElement,\n  property: 'width' | 'height'\n): number | undefined {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n","import type {\n  Chart,\n  Point,\n  FontSpec,\n  CanvasFontSpec,\n  PointStyle,\n  RenderTextOpts,\n  BackdropOptions\n} from '../types/index.js';\nimport type {\n  TRBL,\n  SplinePoint,\n  RoundedRect,\n  TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n  ctx: CanvasRenderingContext2D,\n  data: Record<string, number>,\n  gc: string[],\n  longest: number,\n  string: string\n) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n  ctx: CanvasRenderingContext2D,\n  font: string,\n  arrayOfThings: Things,\n  cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n\n  ctx.save();\n\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n\n    // Undefined strings and arrays should not be measured\n    if (thing !== undefined && thing !== null && !isArray(thing)) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      // if it is an array lets measure each element\n      // to do maybe simplify this function a bit so we can do this more recursively?\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        // Undefined strings and arrays should not be measured\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n\n  ctx.restore();\n\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n  if (!ctx && !canvas) {\n    return;\n  }\n\n  ctx = ctx || canvas.getContext('2d');\n\n  ctx.save();\n  // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nexport interface DrawPointOptions {\n  pointStyle: PointStyle;\n  rotation?: number;\n  radius: number;\n  borderWidth: number;\n}\n\nexport function drawPoint(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number\n) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number,\n  w: number\n) {\n  let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n\n  ctx.beginPath();\n\n  switch (style) {\n  // Default includes circle\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      width = w ? w / 2 : radius;\n      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n    // NOTE: the rounded rect implementation changed to use `arc` instead of\n    // `quadraticCurveTo` since it generates better results when rect is\n    // almost a circle. 0.516 (instead of 0.5) produces results with visually\n    // closer proportion to the previous impl and it is inscribed in the\n    // circle with `radius`. For more details, see the following PRs:\n    // https://github.com/chartjs/Chart.js/issues/5597\n    // https://github.com/chartjs/Chart.js/issues/5858\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'rectRot':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'cross':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'star':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      rad += QUARTER_PI;\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n      break;\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n  point: Point,\n  area: TRBL,\n  margin?: number\n) {\n  margin = margin || 0.5; // margin - default is to match rounded decimals\n\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n  ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n  ctx: CanvasRenderingContext2D,\n  previous: Point,\n  target: Point,\n  flip?: boolean,\n  mode?: string\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n  ctx: CanvasRenderingContext2D,\n  previous: SplinePoint,\n  target: SplinePoint,\n  flip?: boolean\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\n\nfunction decorateText(\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  line: string,\n  opts: RenderTextOpts\n) {\n  if (opts.strikethrough || opts.underline) {\n    /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n  const oldColor = ctx.fillStyle;\n\n  ctx.fillStyle = opts.color as string;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n  ctx: CanvasRenderingContext2D,\n  text: string | string[],\n  x: number,\n  y: number,\n  font: CanvasFontSpec,\n  opts: RenderTextOpts = {}\n) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i: number, line: string;\n\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n\n    if (opts.backdrop) {\n      drawBackdrop(ctx, opts.backdrop);\n    }\n\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n\n    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n  ctx: CanvasRenderingContext2D,\n  rect: RoundedRect & { radius: TRBLCorners }\n) {\n  const {x, y, w, h, radius} = rect;\n\n  // top left arc\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n  // line from top left to bottom left\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n\n  // bottom left arc\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n  // line from bottom left to bottom right\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n  // bottom right arc\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n  // line from bottom right to top right\n  ctx.lineTo(x + w, y + radius.topRight);\n\n  // top right arc\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n  // line from top right to top left\n  ctx.lineTo(x + radius.topLeft, y);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n  ResolverObjectKey,\n  ResolverCache,\n  ResolverProxy,\n  DescriptorDefaults,\n  Descriptor,\n  ContextCache,\n  ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  scopes: T,\n  prefixes = [''],\n  rootScopes?: R,\n  fallback?: ResolverObjectKey,\n  getTarget = () => scopes[0]\n) {\n  const finalRootScopes = rootScopes || scopes;\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache: ResolverCache<T, R> = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: finalRootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop: string) {\n      delete target[prop]; // remove from cache\n      delete target._keys; // remove cached keys\n      delete scopes[0][prop]; // remove from top level scope\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop: string) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop: string, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n      delete target._keys; // remove cached keys\n      return true;\n    }\n  }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  proxy: ResolverProxy<T, R>,\n  context: AnyObject,\n  subProxy?: ResolverProxy<T, R>,\n  descriptorDefaults?: DescriptorDefaults\n) {\n  const cache: ContextCache<T, R> = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n      delete proxy[prop]; // remove from proxy\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n      delete target[prop]; // remove from cache\n      return true;\n    }\n  }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n  proxy: ResolverCache,\n  defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n  target: AnyObject,\n  prop: string,\n  resolve: () => unknown\n) {\n  if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n    return target[prop];\n  }\n\n  const value = resolve();\n  // cache the resolved value\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(\n  target: ContextCache,\n  prop: string,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop]; // resolve from proxy\n\n  // resolve with context\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    // if the resolved value is an object, create a sub resolver for it\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\n\nfunction _resolveScriptable(\n  prop: string,\n  getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n  target: ContextCache,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  let value = getValue(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    // When scriptable option returns an object, create a resolver on that.\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\n\nfunction _resolveArray(\n  prop: string,\n  value: unknown[],\n  target: ContextCache,\n  isIndexable: (key: string) => boolean\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n  if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n    return value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    // Array of objects, return array or resolvers\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\n\nfunction resolveFallback(\n  fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n  set: Set<AnyObject>,\n  parentScopes: AnyObject[],\n  key: ResolverObjectKey,\n  parentFallback: ResolverObjectKey,\n  value: unknown\n) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n        // When we reach the descriptor that defines a new _fallback, return that.\n        // The fallback will resume to that new scope.\n        return fallback;\n      }\n    } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n      // Fallback to `false` results to `false`, when falling back to different key.\n      // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n      return null;\n    }\n  }\n  return false;\n}\n\nfunction createSubResolver(\n  parentScopes: AnyObject[],\n  resolver: ResolverCache,\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set<AnyObject>();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n  set: Set<AnyObject>,\n  allScopes: AnyObject[],\n  key: ResolverObjectKey,\n  fallback: ResolverObjectKey,\n  item: unknown\n) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\n\nfunction subGetTarget(\n  resolver: ResolverCache,\n  prop: string,\n  value: unknown\n) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(\n  prop: string,\n  prefixes: string[],\n  scopes: AnyObject[],\n  proxy: ResolverProxy\n) {\n  let value: unknown;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (typeof value !== 'undefined') {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (typeof value !== 'undefined') {\n      return value;\n    }\n  }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n  const set = new Set<string>();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n  meta: ChartMeta<'line' | 'scatter'>,\n  data: AnyObject[],\n  start: number,\n  count: number\n) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array<{r: unknown}>(count);\n  let i: number, ilen: number, index: number, item: AnyObject;\n\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n  firstPoint: SplinePoint,\n  middlePoint: SplinePoint,\n  afterPoint: SplinePoint,\n  t: number\n): {\n    previous: SplinePoint\n    next: SplinePoint\n  } {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n  // This function must also respect \"skipped\" points\n\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n\n  // If all points are the same, s01 & s02 will be inf\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n\n  const fa = t * s01; // scaling factor for triangle Ta\n  const fb = t * s12;\n\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n  const pointsLen = points.length;\n\n  let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK: number[] = Array(pointsLen).fill(0);\n  const mK: number[] = Array(pointsLen);\n\n  // Calculate slopes (deltaK) and initialize tangents (mK)\n  let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n      // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n        : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n          : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n  points: SplinePoint[],\n  options,\n  area: ChartArea,\n  loop: boolean,\n  indexAxis: 'x' | 'y'\n) {\n  let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n  // Only consider points that are drawn in case the spanGaps option is used\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n  linear: (t: number) => t,\n\n  easeInQuad: (t: number) => t * t,\n\n  easeOutQuad: (t: number) => -t * (t - 2),\n\n  easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n\n  easeInCubic: (t: number) => t * t * t,\n\n  easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n  easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n\n  easeInQuart: (t: number) => t * t * t * t,\n\n  easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n  easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n\n  easeInQuint: (t: number) => t * t * t * t * t,\n\n  easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n  easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n  easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n  easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n  easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n  easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n  easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n  easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n  easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n  easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n  easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n  easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n  easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n  easeInOutElastic(t: number) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n\n  easeInBack(t: number) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n\n  easeOutBack(t: number) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n\n  easeInOutBack(t: number) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n\n  easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n  easeOutBounce(t: number) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n\n  easeInOutBounce: (t: number) => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n  p1: Point,\n  p2: Point,\n  t: number, mode: 'middle' | 'after' | unknown\n) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n      : mode === 'after' ? t < 1 ? p1.y : p2.y\n        : t > 0 ? p2.y : p1.y\n  };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n\n  value = +matches[2];\n\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n    default:\n      break;\n  }\n\n  return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n  const obj = toTRBL(value) as ChartArea;\n\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n\n  return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n  options = options || {};\n  fallback = fallback || defaults.font as FontSpec;\n\n  let size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n\n  font.string = toFontString(font);\n  return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n  let cacheable = true;\n  let i: number, ilen: number, value: unknown;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n  return Object.assign(Object.create(parentContext), context);\n}\n","export interface RTLAdapter {\n  x(x: number): number;\n  setWidth(w: number): void;\n  textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n  xPlus(x: number, value: number): number;\n  leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) { // eslint-disable-line no-unused-vars\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      return x;\n    },\n  };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n  let style: CSSStyleDeclaration, original: [string, string];\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n\n    style.setProperty('direction', direction, 'important');\n    (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n  }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n  if (original !== undefined) {\n    delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  // eslint-disable-next-line prefer-const\n  let {start, end, loop} = segment;\n  let i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n\n    if (point.skip) {\n      continue;\n    }\n\n    value = normalize(point[property]);\n\n    if (value === prevValue) {\n      continue;\n    }\n\n    inside = between(value, startBound, endBound);\n\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n\n  return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n\n  if (loop && !spanGaps) {\n    // loop and not spanning gaps, first find a gap to start from\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  // find first non skipped point (after the first gap possibly)\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  // if we looped to count, start needs to be 0\n  start %= count;\n\n  if (loop) {\n    // loop will go past count, if start > 0\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  // end could be more than count, normalize\n  end %= count;\n\n  return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        // @ts-ignore\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n\n  return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    // Style can not start/end on a skipped point, adjust indices accordingly\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n\n  return result;\n}\n\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\n\nfunction styleChanged(style, prevStyle) {\n  if (!prevStyle) {\n    return false;\n  }\n  const cache = [];\n  const replacer = function(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n    return cache.indexOf(value);\n  };\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n  return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n  const {xScale, yScale} = meta;\n  if (xScale && yScale) {\n    return {\n      left: getSizeForArea(xScale, chartArea, 'left'),\n      right: getSizeForArea(xScale, chartArea, 'right'),\n      top: getSizeForArea(yScale, chartArea, 'top'),\n      bottom: getSizeForArea(yScale, chartArea, 'bottom')\n    };\n  }\n  return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n  const clip = meta._clip;\n  if (clip.disabled) {\n    return false;\n  }\n  const area = getDatasetArea(meta, chart.chartArea);\n\n  return {\n    left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n    right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n    top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n    bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n  };\n}\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      const result = lookupMethod(data, axis, value);\n      if (spanGaps) {\n        const {vScale} = controller._cachedMeta;\n        const {_parsed} = metaset;\n\n        const distanceToDefinedLo = (_parsed\n          .slice(0, result.lo + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.lo -= Math.max(0, distanceToDefinedLo);\n\n        const distanceToDefinedHi = (_parsed\n          .slice(result.hi)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        result.hi += Math.max(0, distanceToDefinedHi);\n      }\n      return result;\n    } else if (controller._sharedOptions) {\n      // _sharedOptions indicates that each element has equal options -> equal proportions\n      // So we can do a ranged binary search based on the range of first element and\n      // be confident to get the full range of indices that can intersect with the value.\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  // Default to all elements, when binary search can not be used.\n  return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      // Can have multiple items at the same distance in which case we sort by size\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  // If we want to trigger on an intersect and we don't have any items\n  // that intersect the position, return nothing\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n  // Part of the public API to facilitate developers creating their own modes\n  evaluateInteractionItems,\n\n  // Helper function for different modes\n  modes: {\n    /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      // Default axis for index mode is 'x' to match old behaviour\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n\n        // don't count items that are skipped (null data)\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n\n      return elements;\n    },\n\n    /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n\n      return items;\n    },\n\n    /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n\n    /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n\n  // dynamically placed boxes size is not considered\n  if (!isObject(pos)) {\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n\n  // return booleans on the changes per direction\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n    // Dimensions changed and there were non full width boxes before this\n    // -> we have to refit those\n    refit |= same && refitBoxes.length;\n\n    // Chart area changed in the opposite direction\n    changed = changed || other;\n\n    if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n      refitBoxes.push(layout);\n    }\n  }\n\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] -  Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n  /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    // initialize item with default values\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    // @ts-ignore\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n\n  /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n\n  /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n\n  /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n   * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n\n    // Before any changes are made, notify boxes that an update is about to being\n    // This is used to clear any cached data (e.g. scale limits)\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n\n    // Essentially we now have any number of boxes on each of the 4 sides.\n    // Our canvas looks like the following.\n    // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n    // B1 is the bottom axis\n    // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n    // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n    // an error will be thrown.\n    //\n    // |----------------------------------------------------|\n    // |                  T1 (Full Width)                   |\n    // |----------------------------------------------------|\n    // |    |    |                 T2                  |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    | C1 |                           | C2 |    |\n    // |    |    |----|                           |----|    |\n    // |    |    |                                     |    |\n    // | L1 | L2 |           ChartArea (C0)            | R1 |\n    // |    |    |                                     |    |\n    // |    |    |----|                           |----|    |\n    // |    |    | C3 |                           | C4 |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    |                 B1                  |    |\n    // |----------------------------------------------------|\n    // |                  B2 (Full Width)                   |\n    // |----------------------------------------------------|\n    //\n\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n    // First fit the fullSize boxes, to reduce probability of re-fitting.\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n    // Then fit vertical boxes\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    // Then fit horizontal boxes\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      // if the area changed, re-fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n\n    // Finally place the boxes to correct coordinates\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n    // Move to opposite side of chart\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n\n    // Finally update boxes in chartArea (radial scale for example)\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n  /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n  acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n  releaseContext(context) { // eslint-disable-line no-unused-vars\n    return false;\n  }\n\n  /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n  addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n  removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n  getDevicePixelRatio() {\n    return 1;\n  }\n\n  /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n  isAttached(canvas) { // eslint-disable-line no-unused-vars\n    return true;\n  }\n\n  /**\n   * Updates config with platform specific requirements\n   * @param {import('../core/core.config.js').default} config\n   */\n  updateConfig(config) { // eslint-disable-line no-unused-vars\n    // no-op\n  }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n\n  // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n  // returns null or '' if no explicit value has been set to the canvas attribute.\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n\n  // Chart.js modifies some canvas values that we want to restore on destroy\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n\n  // Force canvas to display as block to avoid extra space caused by inline\n  // elements, which would interfere with the responsive resize process.\n  // https://github.com/chartjs/Chart.js/issues/2538\n  style.display = style.display || 'block';\n  // Include possible borders in the size\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      // If no explicit render height and style height, let's apply the aspect ratio,\n      // which one can be specified by the user but also by charts as default option\n      // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n  if (node) {\n    node.addEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction removeListener(chart, type, listener) {\n  if (chart && chart.canvas) {\n    chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n  }\n}\n\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      // If the container size shrank during chart resize, let's assume\n      // scrollbar appeared. So we resize again with the scrollbar visible -\n      // effectively making chart smaller and the scrollbar hidden again.\n      // Because we are inside `throttled`, and currently `ticking`, scroll\n      // events are ignored during this whole 2 resize process.\n      // If we assumed wrong and something else happened, we are resizing\n      // twice in a frame (potential performance issue)\n      listener();\n    }\n  }, window);\n\n  // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    // When its container's display is set to 'none' the callback will be called with a\n    // size of (0, 0), which will cause the chart to lose its original height, so skip\n    // resizing in such case.\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    // This case can occur if the chart is destroyed while waiting\n    // for the throttled function to occur. We prevent crashes by checking\n    // for a destroyed chart\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n\n  addListener(canvas, type, proxy);\n\n  return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n  acquireContext(canvas, aspectRatio) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n    // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n    // inside an iframe or when running in a protected environment. We could guess the\n    // types from their toString() value but let's keep things flexible and assume it's\n    // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n    // https://github.com/chartjs/Chart.js/issues/3887\n    // https://github.com/chartjs/Chart.js/issues/4102\n    // https://github.com/chartjs/Chart.js/issues/4152\n    if (context && context.canvas === canvas) {\n      // Load platform resources on first chart creation, to make it possible to\n      // import the library before setting platform options.\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n\n    return null;\n  }\n\n  /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n\n    // The canvas render size might have been changed (and thus the state stack discarded),\n    // we can't use save() and restore() to restore the initial state. So make sure that at\n    // least the canvas context is reset to the default state by setting the canvas width.\n    // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n    // eslint-disable-next-line no-self-assign\n    canvas.width = canvas.width;\n\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n\n  /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n  addEventListener(chart, type, listener) {\n    // Can have only one listener per type, so make sure previous is removed\n    this.removeEventListener(chart, type);\n\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n\n    if (!proxy) {\n      return;\n    }\n\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n  isAttached(canvas) {\n    const container = canvas && _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  /**\n   * @param {string} from\n   * @param {string} to\n   * @param {number} factor\n   */\n  color(from, to, factor) {\n    const c0 = helpersColor(from || transparent);\n    const c1 = c0.valid && helpersColor(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nexport default class Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n\n  active() {\n    return this._active;\n  }\n\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n\n  cancel() {\n    if (this._active) {\n      // update current evaluated value, for smoother animations\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n\n    this._active = from !== to && (loop || (elapsed < duration));\n\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n    this._target[prop] = this._fn(from, to, factor);\n  }\n\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n\n    const animationOptions = Object.keys(defaults.animation);\n    const animatedProps = this._properties;\n\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n\n  /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      // Going to shared options:\n      // After all animations are done, assign the shared options object to the element\n      // So any new updates to the shared options are observed\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n        // rejected, noop\n      });\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @private\n\t */\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n\n      if (animation) {\n        if (cfg && animation.active()) {\n          // There is an existing active animation, let's update that\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        // not animated, set directly to new value\n        target[prop] = value;\n        continue;\n      }\n\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n\n\n  /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n  update(target, values) {\n    if (this._properties.size === 0) {\n      // Nothing is animated, just apply the new values.\n      Object.assign(target, values);\n      return;\n    }\n\n    const animations = this._createAnimations(target, values);\n\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\n\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  // @ts-ignore\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    // Going from shared options to distinct one:\n    // Create new options object containing the old shared values and start updating that.\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\n\nfunction toClip(value) {\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  let found = false;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      found = true;\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n\n  if (!found && !options.all) {\n    return 0;\n  }\n\n  return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n  const {iScale, vScale} = meta;\n  const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n  const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      [iAxisKey]: key,\n      [vAxisKey]: data[key]\n    };\n  }\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n    const visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\n\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  // Not using meta.index here, because it might be already updated if the dataset changed location\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n    if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n      delete stacks[axis]._visualValues[datasetIndex];\n    }\n  }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n  /**\n   * @type {any}\n   */\n  static defaults = {};\n\n  /**\n   * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n   */\n  static datasetElementType = null;\n\n  /**\n   * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n   */\n  static dataElementType = null;\n\n  /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    /** @type {boolean | object} */\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.datasetElementType = new.target.datasetElementType;\n    this.dataElementType = new.target.dataElementType;\n\n    this.initialize();\n  }\n\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n\n    if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n      console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n    }\n  }\n\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n\n  /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n\n  /**\n\t * @private\n\t */\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n\n  reset() {\n    this._update('reset');\n  }\n\n  /**\n\t * @private\n\t */\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n\n    // In order to correctly handle data addition/deletion animation (and thus simulate\n    // real-time charts), we need to monitor these data modifications and synchronize\n    // the internal metadata accordingly.\n\n    if (isObject(data)) {\n      const meta = this._cachedMeta;\n      this._data = convertObjectDataToArray(data, meta);\n    } else if (_data !== data) {\n      if (_data) {\n        // This case happens when the user replaced the data array instance.\n        unlistenArrayEvents(_data, this);\n        // Discard old parsed data and stacks\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n\n  addElements() {\n    const meta = this._cachedMeta;\n\n    this._dataCheck();\n\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n\n    this._dataCheck();\n\n    // make sure cached _stacked status is current\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n\n    // detect change in stack option\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      // remove values from old stack\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n\n    // Re-sync meta data in case the user replaced the data array or if we missed\n    // any updates and so make sure that we handle number of datapoints changing.\n    this._resyncElements(resetNewElements);\n\n    // if stack changed, update stack values for the whole dataset\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n      meta._stacked = isStacked(meta.vScale, meta);\n    }\n  }\n\n  /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n\n  /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]._visualValues\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        // if the data is sorted, we don't need to check further from this end of array\n        break;\n      }\n    }\n    if (sorted) {\n      // in the sorted case, find first non-skipped value from other end of array\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return false;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {} // eslint-disable-line no-unused-vars\n\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n\n  /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n\n  /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    // context is provided as a function, and is called only if needed,\n    // so we don't create a context for each element if not needed.\n    const context = () => this.getContext(index, active, mode);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n    if (values.$shared) {\n      // `$shared` indicates this set of options can be shared between multiple elements.\n      // Sharing is used to reduce number of properties to change during animation.\n      values.$shared = sharing;\n\n      // We cache options by `mode`, which can be 'active' for example. This enables us\n      // to have the 'active' element options and 'default' options to switch between\n      // when interacting.\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n\n    return values;\n  }\n\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n\n  /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n\n  /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n\n  /**\n   * @todo v4, rename to getSharedOptions and remove excess functions\n   */\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n\n  /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n\n  /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      // When going from active to inactive, we need to update to the shared options.\n      // This way the once hovered element will end up with the same original shared options instance, after animation.\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n\n  /**\n\t * @private\n\t */\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n\n    // Apply changes detected through array listeners\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n\n    if (count) {\n      // TODO: It is not optimal to always parse the old data\n      // This is done because we are not detecting direct assignments:\n      // chart.data.datasets[0].data[5] = 10;\n      // chart.data.datasets[0].data[5].y = 10;\n      this.parse(0, count);\n    }\n\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n\n  updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @private\n\t */\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n\n  /**\n\t * @private\n   */\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n  static defaults = {};\n  static defaultRoutes = undefined;\n\n  x: number;\n  y: number;\n  active = false;\n  options: O;\n  $animations: Record<keyof T, Animation>;\n\n  tooltipPosition(useFinalPosition: boolean): Point {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y} as Point;\n  }\n\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n\n  /**\n   * Gets the current or final value of each prop. Can return extra properties (whole object).\n   * @param props - properties to get\n   * @param [final] - get the final value (animation target)\n   */\n  getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n  getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n  getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      // let's not create an object, if not needed\n      return this as Record<string, unknown>;\n    }\n    const ret: Record<string, unknown> = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n    });\n    return ret;\n  }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const determinedMaxTicks = determineMaxTicks(scale);\n  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n\n  // If there are too many major ticks to display them all\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n\n  // If the major ticks are evenly spaced apart, place the minor ticks\n  // so that they divide the major ticks into even chunks\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n\n  next = start;\n\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n\n  if (len < 2) {\n    return false;\n  }\n\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n\n    // Return undefined if the pixel is out of the range\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n\n  return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  /** @type {CanvasTextAlign} */\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n  // eslint-disable-next-line max-statements\n  constructor(cfg) {\n    super();\n\n    /** @type {string} */\n    this.id = cfg.id;\n    /** @type {string} */\n    this.type = cfg.type;\n    /** @type {any} */\n    this.options = undefined;\n    /** @type {CanvasRenderingContext2D} */\n    this.ctx = cfg.ctx;\n    /** @type {Chart} */\n    this.chart = cfg.chart;\n\n    // implements box\n    /** @type {number} */\n    this.top = undefined;\n    /** @type {number} */\n    this.bottom = undefined;\n    /** @type {number} */\n    this.left = undefined;\n    /** @type {number} */\n    this.right = undefined;\n    /** @type {number} */\n    this.width = undefined;\n    /** @type {number} */\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    /** @type {number} */\n    this.maxWidth = undefined;\n    /** @type {number} */\n    this.maxHeight = undefined;\n    /** @type {number} */\n    this.paddingTop = undefined;\n    /** @type {number} */\n    this.paddingBottom = undefined;\n    /** @type {number} */\n    this.paddingLeft = undefined;\n    /** @type {number} */\n    this.paddingRight = undefined;\n\n    // scale-specific properties\n    /** @type {string=} */\n    this.axis = undefined;\n    /** @type {number=} */\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    /** @type {Tick[]} */\n    this.ticks = [];\n    /** @type {object[]|null} */\n    this._gridLineItems = null;\n    /** @type {object[]|null} */\n    this._labelItems = null;\n    /** @type {object|null} */\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    /** @type {number} */\n    this._startPixel = undefined;\n    /** @type {number} */\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n  init(options) {\n    this.options = options.setContext(this.getContext());\n\n    this.axis = options.axis;\n\n    // parse min/max value, so we can properly determine min/max for other scales\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n\n  /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    return raw;\n  }\n\n  /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isFinite(_userMin),\n      maxDefined: isFinite(_userMax)\n    };\n  }\n\n  /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n\n    // Make sure min <= max when only min or max is defined by user and the data is outside that range\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n\n  /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n\n  /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n  getTicks() {\n    return this.ticks;\n  }\n\n  /**\n\t * @return {string[]}\n\t */\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n\n  /**\n   * @return {import('../types.js').LabelItem[]}\n   */\n  getLabelItems(chartArea = this.chart.chartArea) {\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    return items;\n  }\n\n  // When a new layout is created, reset the data limits cache\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n\n  // These methods are ordered by lifecycle. Utilities then follow.\n  // Any function defined here is inherited by all scale types.\n  // Any function can be extended by the scale type\n\n  beforeUpdate() {\n    call(this.options.beforeUpdate, [this]);\n  }\n\n  /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t *   This space comes from two sources:\n\t *     - padding - space that's required to show the labels at the edges of the scale\n\t *     - thickness of scales or legends in another orientation\n\t */\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n\n    // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n    this.beforeUpdate();\n\n    // Absorb the master measurements\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n\n    // Dimensions\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n\n    // Data min/max\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n\n    this.beforeBuildTicks();\n\n    this.ticks = this.buildTicks() || [];\n\n    // Allow modification of ticks in callback.\n    this.afterBuildTicks();\n\n    // Compute tick rotation and fit using a sampled subset of labels\n    // We generally don't need to compute the size of every single label for determining scale size\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n    // configure is called twice, once here, once from core.controller.updateLayout.\n    // Here we haven't been positioned yet, but dimensions are correct.\n    // Variables set in configure are needed for calculateLabelRotation, and\n    // it's ok that coordinates are not correct there, only dimensions matter.\n    this.configure();\n\n    // Tick Rotation\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n    this.afterCalculateLabelRotation();\n\n    // Auto-skip\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n\n    if (samplingEnabled) {\n      // Generate labels using all non-skipped ticks\n      this._convertTicksToLabels(this.ticks);\n    }\n\n    this.beforeFit();\n    this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n    this.afterFit();\n\n    // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n    this.afterUpdate();\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      // by default vertical scales are from bottom to top, so pixels are reversed\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n\n  afterUpdate() {\n    call(this.options.afterUpdate, [this]);\n  }\n\n  //\n\n  beforeSetDimensions() {\n    call(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    if (this.isHorizontal()) {\n      // Reset position before calculating rotation\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n\n      // Reset position before calculating rotation\n      this.top = 0;\n      this.bottom = this.height;\n    }\n\n    // Reset padding\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    call(this.options.afterSetDimensions, [this]);\n  }\n\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    call(this.options[name], [this]);\n  }\n\n  // Data limits\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n\n  //\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  /**\n\t * @return {object[]} the ticks\n\t */\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n\n  beforeTickToLabelConversion() {\n    call(this.options.beforeTickToLabelConversion, [this]);\n  }\n  /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    call(this.options.afterTickToLabelConversion, [this]);\n  }\n\n  //\n\n  beforeCalculateLabelRotation() {\n    call(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n\n    // Estimate the width of each grid based on the canvas width, the maximum\n    // label width and the number of tick intervals\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n    // Allow 3 pixels x2 padding either side for label readability\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    call(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n\n  //\n\n  beforeFit() {\n    call(this.options.beforeFit, [this]);\n  }\n  fit() {\n    // Reset\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight; // fill all the height\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n\n        if (isHorizontal) {\n        // A horizontal axis is more constrained by the height.\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n        // A vertical axis is more constrained by the width. Labels are the\n        // dominant factor here, so get that length first and account for padding\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n\n    this._handleMargins();\n\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n\n      // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n      // which means that the right padding is dominated by the font height\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n\n      // Adjust padding taking into account changes in offsets\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n\n  /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n\n  afterFit() {\n    call(this.options.afterFit, [this]);\n  }\n\n  // Shared Methods\n  /**\n\t * @return {boolean}\n\t */\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  /**\n\t * @return {boolean}\n\t */\n  isFullSize() {\n    return this.options.fullSize;\n  }\n\n  /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n\n    this.generateTickLabels(ticks);\n\n    // Ticks should be skipped when callback returns null or undef, so lets remove those.\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n\n    this.afterTickToLabelConversion();\n  }\n\n  /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n    }\n\n    return labelSizes;\n  }\n\n  /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _computeLabelSizes(ticks, length, maxTicksLimit) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n    for (i = 0; i < length; i += increment) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = /** @type {string} */ (label[j]);\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n\n  /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value;\n  }\n\n  /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n  getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n    return NaN;\n  }\n\n  /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n  getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n\n  /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n\n  /**\n\t * @return {number}\n\t */\n  getBaseValue() {\n    const {min, max} = this;\n\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index) {\n    const ticks = this.ticks || [];\n\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n\n  /**\n\t * @return {number}\n\t * @private\n\t */\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n\n    // Calculate space needed by label in axis direction.\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n    // Calculate space needed for 1 tick in axis direction.\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n\n  /**\n\t * @return {boolean}\n\t * @private\n\t */\n  _isVisible() {\n    const display = this.options.display;\n\n    if (display !== 'auto') {\n      return !!display;\n    }\n\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position, border} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = borderOpts.display ? borderOpts.width : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const context = this.getContext(i);\n      const optsAtIndex = grid.setContext(context);\n      const optsAtIndexBorder = border.setContext(context);\n\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndexBorder.dash || [];\n      const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n      lineValue = getPixelForGridLine(this, i, offset);\n\n      // Skip if the pixel is out of the range\n      if (lineValue === undefined) {\n        continue;\n      }\n\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n\n    return items;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n\n      if (isHorizontal) {\n        x = pixel;\n\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n          x += (lineHeight / 2) * Math.sin(rotation);\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n\n      let backdrop;\n\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n\n        let top = textOffset - labelPadding.top;\n        let left = 0 - labelPadding.left;\n\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        default:\n          break;\n        }\n\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        case 'inner':\n          if (i === ilen - 1) {\n            left -= width;\n          } else if (i > 0) {\n            left -= width / 2;\n          }\n          break;\n        default:\n          break;\n        }\n\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n\n          color: optsAtIndex.backdropColor,\n        };\n      }\n\n      items.push({\n        label,\n        font,\n        textOffset,\n        options: {\n          rotation,\n          color,\n          strokeColor,\n          strokeWidth,\n          textAlign: tickTextAlign,\n          textBaseline,\n          translation: [x, y],\n          backdrop,\n        }\n      });\n    }\n\n    return items;\n  }\n\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n\n    let align = 'center';\n\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n\n    return align;\n  }\n\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n\n    let textAlign;\n    let x;\n\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n\n    return {textAlign, x};\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n\n    const chart = this.chart;\n    const position = this.options.position;\n\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n\n  /**\n   * @protected\n   */\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {\n    const {chart, ctx, options: {border, grid}} = this;\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = border.display ? borderOpts.width : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.width;\n    ctx.strokeStyle = borderOpts.color;\n\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n\n    if (!optionTicks.display) {\n      return;\n    }\n\n    const ctx = this.ctx;\n\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n\n    const items = this.getLabelItems(chartArea);\n    for (const item of items) {\n      const renderTextOptions = item.options;\n      const tickFont = item.font;\n      const label = item.label;\n      const y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n    }\n\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n\n    if (!title.display) {\n      return;\n    }\n\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n\n  /**\n\t * @return {object[]}\n\t * @private\n\t */\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      // backward compatibility: draw has been overridden by custom scale\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: bz,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n\n  /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n\n  /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n\n  /**\n   * @protected\n   */\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n\n    if (isIChartComponent(proto)) {\n      // Make sure the parent is registered and note the scope where its defaults are.\n      parentScope = this.register(proto);\n    }\n\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n\n    if (id in items) {\n      // already registered\n      return scope;\n    }\n\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n\n    return scope;\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n  get(id) {\n    return this.items[id];\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t */\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n\n    if (id in items) {\n      delete items[id];\n    }\n\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n  // Inherit the parent's defaults and keep existing defaults\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n\n  defaults.set(scope, itemDefaults);\n\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\n\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\n\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    // Order is important, Scale has Element in prototype chain,\n    // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  add(...args) {\n    this._each('register', args);\n  }\n\n  remove(...args) {\n    this._each('unregister', args);\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n\n  /**\n\t * @private\n\t */\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        // Handle loopable args\n        // Use case:\n        //  import * as plugins from './plugins.js';\n        //  Chart.register(plugins);\n        each(arg, item => {\n          // If there are mixed types in the loopable, make sure those are\n          // registered in correct registry\n          // Use case: (treemap exporting controller, elements etc)\n          //  import * as treemap from 'chartjs-chart-treemap.js';\n          //  Chart.register(treemap);\n\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n    registry[method](component);\n    call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n  }\n\n  /**\n\t * @private\n\t */\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    // plugins is the fallback registry\n    return this.plugins;\n  }\n\n  /**\n\t * @private\n\t */\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n  constructor() {\n    this._init = [];\n  }\n\n  /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n   * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callCallback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  invalidate() {\n    // When plugins are registered, there is the possibility of a double\n    // invalidate situation. In this case, we only want to invalidate once.\n    // If we invalidate multiple times, the `_oldCache` is lost and all of the\n    // plugins are restarted without being correctly stopped.\n    // See https://github.com/chartjs/Chart.js/issues/8147\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n\n    const descriptors = this._cache = this._createDescriptors(chart);\n\n    this._notifyStateChanges(chart);\n\n    return descriptors;\n  }\n\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    // options === false => all plugins are disabled\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    // make sure plugin defaults are in scopes for local (not registered) plugins\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    // These are just defaults that plugins can override\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n  if (id === 'x' || id === 'y' || id === 'r') {\n    return id;\n  }\n}\n\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n  for (const opts of scaleOptions) {\n    const axis = opts.axis\n      || axisFromPosition(opts.position)\n      || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n    if (axis) {\n      return axis;\n    }\n  }\n  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {axis};\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const scales = Object.create(null);\n\n  // First figure out first scale id's per axis.\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n\n  // Then merge dataset defaults to scale configs\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n\n  // apply scale defaults, if not overridden by dataset defaults\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n\n  return scales;\n}\n\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\n\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n\n  initOptions(config);\n\n  return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nexport default class Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  get platform() {\n    return this._config.platform;\n  }\n\n  get type() {\n    return this._config.type;\n  }\n\n  set type(type) {\n    this._config.type = type;\n  }\n\n  get data() {\n    return this._config.data;\n  }\n\n  set data(data) {\n    this._config.data = initData(data);\n  }\n\n  get options() {\n    return this._config.options;\n  }\n\n  set options(options) {\n    this._config.options = options;\n  }\n\n  get plugins() {\n    return this._config.plugins;\n  }\n\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @return {string[][]}\n   */\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset animation options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @param {string} transition\n   * @return {string[][]}\n   */\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        // The following are used for looking up the `animations` and `animation` keys\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving element options that belong\n   * to an dataset. These keys do not include the dataset itself, because it\n   * is not under options.\n   * @param {string} datasetType\n   * @param {string} elementType\n   * @return {string[][]}\n   */\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving plugin options.\n   * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n   * @return {string[][]}\n   */\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n\n  /**\n   * @private\n   */\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n\n  /**\n   * Resolves the objects from options and defaults for option value resolution.\n   * @param {object} mainScope - The main scope object for options\n   * @param {string[][]} keyLists - The arrays of keys in resolution order\n   * @param {boolean} [resetCache] - reset the cache for this mainScope\n   */\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n\n    const scopes = new Set();\n\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n\n  /**\n   * Returns the option scopes for resolving chart options\n   * @return {object[]}\n   */\n  chartOptionScopes() {\n    const {options, type} = this;\n\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {string[]} names\n   * @param {function|object} context\n   * @param {string[]} [prefixes]\n   * @return {object}\n   */\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      // subResolver is passed to scriptable options. It should not resolve to hover options.\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {object} [context]\n   * @param {string[]} [prefixes]\n   * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n   */\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\n\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n\n  chart.notifyPlugins('afterRender');\n  callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    // Support for array based queries (such as jQuery)\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    // Support for any object associated to a canvas (including a context2d)\n    item = item.canvas;\n  }\n  return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\n\nclass Chart {\n\n  static defaults = defaults;\n  static instances = instances;\n  static overrides = overrides;\n  static registry = registry;\n  static version = version;\n  static getChart = getChart;\n\n  static register(...items) {\n    registry.add(...items);\n    invalidatePlugins();\n  }\n\n  static unregister(...items) {\n    registry.remove(...items);\n    invalidatePlugins();\n  }\n\n  // eslint-disable-next-line max-statements\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    // Store the previously used aspect ratio to determine if a resize\n    // is needed during updates. Do this after _options is set since\n    // aspectRatio uses a getter\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    /** @type {?{attach?: function, detach?: function, resize?: function}} */\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n\n    // Add the chart instance to the global namespace\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\n      // The given item is not a compatible context2d element, let's return before finalizing\n      // the chart initialization but after setting basic chart / controller properties that\n      // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n      // https://github.com/chartjs/Chart.js/issues/2807\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      // If aspectRatio is defined in options, use that.\n      return aspectRatio;\n    }\n\n    if (maintainAspectRatio && _aspectRatio) {\n      // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n      return _aspectRatio;\n    }\n\n    // Calculate\n    return height ? width / height : null;\n  }\n\n  get data() {\n    return this.config.data;\n  }\n\n  set data(data) {\n    this.config.data = data;\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  set options(options) {\n    this.config.options = options;\n  }\n\n  get registry() {\n    return registry;\n  }\n\n  /**\n\t * @private\n\t */\n  _initialize() {\n    // Before init plugin notification\n    this.notifyPlugins('beforeInit');\n\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n\n    this.bindEvents();\n\n    // After init plugin notification\n    this.notifyPlugins('afterInit');\n\n    return this;\n  }\n\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n\n  /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n\n    this.notifyPlugins('resize', {size: newSize});\n\n    callCallback(options.onResize, [this, newSize], this);\n\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        // The resize update is delayed, only draw without updating.\n        this.render();\n      }\n    }\n  }\n\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n\n  /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n\n      scale.init(scaleOptions, options);\n    });\n    // clear up discarded scales\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n\n  /**\n\t * @private\n\t */\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n\n    this._removeUnreferencedMetasets();\n\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n\n    this._updateMetasets();\n    return newControllers;\n  }\n\n  /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n\n  /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n\n  update(mode) {\n    const config = this.config;\n\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n\n    // plugins options references might have change, let's invalidate the cache\n    // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n    this._plugins.invalidate();\n\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    // Make sure dataset controllers are updated and new controllers are reset\n    const newControllers = this.buildOrUpdateControllers();\n\n    this.notifyPlugins('beforeElementsUpdate');\n\n    // Make sure all dataset controllers have correct meta data counts\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      // New controllers will be reset after the layout pass, so we only want to modify\n      // elements added to new datasets\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n\n    // Only reset the controllers if we have animations\n    if (!animsDisabled) {\n      // Can only reset the new controllers after the scales have been updated\n      // Reset is done to get the starting point for the initial animation\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n\n    this._updateDatasets(mode);\n\n    // Do this before render so that any plugins that need final scale updates can use it\n    this.notifyPlugins('afterUpdate', {mode});\n\n    this._layers.sort(compare2Level('z', '_idx'));\n\n    // Replay last event from before update, or set hover styles on active elements\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n\n  /**\n   * @private\n   */\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      // The configured events have changed. Rebind.\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n\n  /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n\n    layouts.update(this, this.width, this.height, minPadding);\n\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n        return;\n      }\n\n      // configure is called twice, once in core.scale.update and once here.\n      // Here the boxes are fully updated and at their final positions.\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n\n    this.notifyPlugins('afterLayout');\n  }\n\n  /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n\n  /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n\n    meta.controller._update(mode);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      // Unset pending resize request now to avoid possible recursion within _resize\n      this._resizeBeforeDraw = null;\n      this._resize(width, height);\n    }\n    this.clear();\n\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n    // currently be part of layers. Instead, we draw\n    // layers <= 0 before(default, backward compat), and the rest after\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this._drawDatasets();\n\n    // Rest of layers\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this.notifyPlugins('afterDraw');\n  }\n\n  /**\n\t * @private\n\t */\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n\n  /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n\n  /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    // @ts-expect-error\n    const clip = getDatasetClipArea(this, meta);\n\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n\n    if (clip) {\n      clipArea(ctx, clip);\n    }\n\n    meta.controller.draw();\n\n    if (clip) {\n      unclipArea(ctx);\n    }\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n\n  /**\n   * Checks whether the given point is in the chart area.\n   * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n   * @returns {boolean}\n   */\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n\n    return [];\n  }\n\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\t\t\t// See isDatasetVisible() comment\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n\n    return meta;\n  }\n\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n\n    const meta = this.getDatasetMeta(datasetIndex);\n\n    // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n    // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n\n  /**\n\t * @private\n\t */\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n\n  /**\n\t * @private\n\t */\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n\n    this._stop();\n    this.config.clearCache();\n\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n\n    delete instances[this.id];\n\n    this.notifyPlugins('afterDestroy');\n  }\n\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n\n  /**\n\t * @private\n\t */\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n\n  /**\n   * @private\n   */\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n\n    each(this.options.events, (type) => _add(type, listener));\n  }\n\n  /**\n   * @private\n   */\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n\n    let detached; // eslint-disable-line prefer-const\n    const attached = () => {\n      _remove('attach', attached);\n\n      this.attached = true;\n      this.resize();\n\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n\n    detached = () => {\n      this.attached = false;\n\n      _remove('resize', listener);\n\n      // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n      this._stop();\n      this._resize(0, 0);\n\n      _add('attach', attached);\n    };\n\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n\n  /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n\n    if (changed) {\n      this._active = active;\n      // Make sure we don't use the previous mouse event to override the active elements in update.\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n\n  /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n   * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n\n  /**\n   * Check if a plugin with the specific ID is registered and enabled\n   * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n   * @returns {boolean}\n   */\n  isPluginEnabled(pluginId) {\n    return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n\n    if (changed || args.changed) {\n      this.render();\n    }\n\n    return this;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n   * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n\n    // If the event is replayed from `update`, we should evaluate with the final positions.\n    //\n    // The `replay`:\n    // It's the last event (excluding click) that has occurred before `update`.\n    // So mouse has not moved. It's also over the chart, because there is a `replay`.\n    //\n    // The why:\n    // If animations are active, the elements haven't moved yet compared to state before update.\n    // But if they will, we are activating the elements that would be active, if this check\n    // was done after the animations have completed. => \"final positions\".\n    // If there is no animations, the \"final\" and \"current\" positions are equal.\n    // This is done so we do not have to evaluate the active elements each animation frame\n    // - it would be expensive.\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n    if (inChartArea) {\n      // Set _lastEvent to null while we are processing the event handlers.\n      // This prevents recursion if the handler calls chart.update()\n      this._lastEvent = null;\n\n      // Invoke onHover hook\n      callCallback(options.onHover, [e, active, this], this);\n\n      if (isClick) {\n        callCallback(options.onClick, [e, active, this], this);\n      }\n    }\n\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n\n    this._lastEvent = lastEvent;\n\n    return changed;\n  }\n\n  /**\n   * @param {ChartEvent} e - The event\n   * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n   * @param {boolean} inChartArea - Is the event inside chartArea\n   * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n   * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n   * @pravate\n   */\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n  return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n  readonly options: T;\n  /**\n   * Will called with chart options after adapter creation.\n   */\n  init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n  /**\n   * Returns a map of time formats for the supported formatting units defined\n   * in Unit as well as 'datetime' representing a detailed date/time string.\n   */\n  formats(this: DateAdapter<T>): Record<TimeUnit | 'datetime', string>;\n  /**\n   * Parses the given `value` and return the associated timestamp.\n   * @param value - the value to parse (usually comes from the data)\n   * @param [format] - the expected data format\n   */\n  parse(this: DateAdapter<T>, value: unknown, format?: string): number | null;\n  /**\n   * Returns the formatted date in the specified `format` for a given `timestamp`.\n   * @param timestamp - the timestamp to format\n   * @param format - the date/time token\n   */\n  format(this: DateAdapter<T>, timestamp: number, format: string): string;\n  /**\n   * Adds the specified `amount` of `unit` to the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param amount - the amount to add\n   * @param unit - the unit as string\n   */\n  add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n  /**\n   * Returns the number of `unit` between the given timestamps.\n   * @param a - the input timestamp (reference)\n   * @param b - the timestamp to subtract\n   * @param unit - the unit as string\n   */\n  diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n  /**\n   * Returns start of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   * @param [weekday] - the ISO day of the week with 1 being Monday\n   * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n   */\n  startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n  /**\n   * Returns end of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   */\n  endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract<T = void>(): T {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n  /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */\n  static override<T extends AnyObject = AnyObject>(\n    members: Partial<Omit<DateAdapter<T>, 'options'>>\n  ) {\n    Object.assign(DateAdapterBase.prototype, members);\n  }\n\n  readonly options: AnyObject;\n\n  constructor(options?: AnyObject) {\n    this.options = options || {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  init() {}\n\n  formats(): Record<TimeUnit | 'datetime', string> {\n    return abstract();\n  }\n\n  parse(): number | null {\n    return abstract();\n  }\n\n  format(): string {\n    return abstract();\n  }\n\n  add(): number {\n    return abstract();\n  }\n\n  diff(): number {\n    return abstract();\n  }\n\n  startOf(): number {\n    return abstract();\n  }\n\n  endOf(): number {\n    return abstract();\n  }\n}\n\nexport default {\n  _date: DateAdapterBase as {\n    new (options?: AnyObject): DateAdapter;\n    override<T extends AnyObject = AnyObject>(\n      members: Partial<Omit<DateAdapter<T>, 'options'>>\n    ): void;\n  }\n};\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n  _arrayUnique, isArray, isNullOrUndef,\n  valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      // Ignore truncated pixels\n      return;\n    }\n    if (defined(prev)) {\n      // curr - prev === 0 is ignored\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n\n  return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    // When bar thickness is enforced, category and bar percentages are ignored.\n    // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n    // and deprecate barPercentage since this value is ignored when thickness is absolute.\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n\n  if (prev === null) {\n    // first data: its size is double based on the next point or,\n    // if it's also the last data, we use the scale size.\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    // last data: its size is also double based on the previous point.\n    next = curr + curr - prev;\n  }\n\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  // Store `barEnd` (furthest away from origin) as parsed value,\n  // to make stacking straight forward\n  item[vScale.axis] = barEnd;\n\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\n\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\n\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'bar',\n\n    categoryPercentage: 0.8,\n    barPercentage: 0.9,\n    grouped: true,\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'base', 'width', 'height']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n        offset: true,\n        grid: {\n          offset: true\n        }\n      },\n      _value_: {\n        type: 'linear',\n        beginAtZero: true,\n      }\n    }\n  };\n\n\n  /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      // float bar: only one end of the bar is considered by `super`\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n\n  initialize() {\n    this.enableOptionSharing = true;\n\n    super.initialize();\n\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n\n  /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n    const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n    const skipNull = (meta) => {\n      const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n      const val = parsed && parsed[meta.vScale.axis];\n\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n\n      // stacked   | meta.stack\n      //           | found | not found | undefined\n      // false     |   x   |     x     |     x\n      // true      |       |     x     |\n      // undefined |       |     x     |     x\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n\n    // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n    // stack where possible invisible bars will be located.\n    // https://github.com/chartjs/Chart.js/issues/6368\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n\n    return stacks;\n  }\n\n  /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n\n  _getAxisCount() {\n    return this._getAxis().length;\n  }\n\n  getFirstScaleIdForIndexAxis() {\n    const scales = this.chart.scales;\n    const indexScaleId = this.chart.options.indexAxis;\n    return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n  }\n\n  _getAxis() {\n    const axis = {};\n    const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n    for (const dataset of this.chart.data.datasets) {\n      axis[valueOrDefault(\n        this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n      )] = true;\n    }\n    return Object.keys(axis);\n  }\n\n  /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n   * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1; // indexOf returns -1 if element is not present\n\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      // bar thickness ratio used for non-grouped bars\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n\n  /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      // bars crossing origin are not stacked\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      // When not visible, no height\n      head = base;\n    }\n\n    size = head - base;\n\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n\n      if (_stacked && !floating) {\n        // visual data coordinates after applying minBarLength\n        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n      }\n    }\n\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    const axisCount = this._getAxisCount();\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n      const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n      const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      // For non-grouped bar charts, exact pixel values are used\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n\n\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n  static id = 'doughnut';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'arc',\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n      },\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutout: '50%',\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%',\n\n    // Spacing between arcs\n    spacing: 0,\n\n    indexAxis: 'r',\n  };\n\n  static descriptors = {\n    _scriptable: (name) => name !== 'spacing',\n    _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    // Need to override these to give a nice default\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n\n  linkScales() {}\n\n  /**\n\t * Override data parsing, since we are not using scales\n\t */\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n\n  /**\n\t * @private\n\t */\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n\n  /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n\n    // Compute the maximal rotation & circumference limits.\n    // If we only consider our dataset, this can cause problems when two datasets\n    // are both less than a circle with different rotations (starting angles)\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n\n    meta.total = this.calculateTotal();\n\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @private\n   */\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n\n    return total;\n  }\n\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n\n    if (!arcs) {\n      // Find the outmost visible dataset\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n\n    if (!arcs) {\n      return 0;\n    }\n\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n\n  getMaxOffset(arcs) {\n    let max = 0;\n\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n\n  /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n\n    return ringWeightOffset;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n\n  /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n  static id = 'polarArea';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    dataElementType: 'arc',\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n      },\n    },\n    indexAxis: 'r',\n    startAngle: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    },\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n        angleLines: {\n          display: false\n        },\n        beginAtZero: true,\n        grid: {\n          circular: true\n        },\n        pointLabels: {\n          display: false\n        },\n        startAngle: 0\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @protected\n   */\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n\n    return range;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n\n    const defaultAngle = 360 / this.countVisibleElements();\n\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n\n    return count;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n  static id = 'bubble';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'borderWidth', 'radius']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n\n  update(mode) {\n    const points = this._cachedMeta.data;\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n\n    // In case values were cached (and thus frozen), we need to clone the values\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n\n    // Custom radius resolution\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n    return values;\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n\n    showLine: true,\n    spanGaps: false,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n      },\n      _value_: {\n        type: 'linear',\n      },\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    // Update Line\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    const end = start + count;\n    const pointsCount = points.length;\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = 0; i < pointsCount; ++i) {\n      const point = points[i];\n      const properties = directUpdate ? point : {};\n\n      if (i < start || i >= end) {\n        properties.skip = true;\n        continue;\n      }\n\n      const parsed = this.getParsed(i);\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n  static id = 'pie';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    // The percentage of the chart that we cut out of the middle.\n    cutout: 0,\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%'\n  };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n  static id = 'radar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n    indexAxis: 'r',\n    showLine: true,\n    elements: {\n      line: {\n        fill: 'start'\n      }\n    },\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n\n    // Update Line\n    line.points = points;\n    // In resize mode only point locations change, so no need to set the points or options.\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n\n      this.updateElement(line, undefined, properties, mode);\n    }\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n  static id = 'scatter';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n    showLine: false,\n    fill: false\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n\n    interaction: {\n      mode: 'point'\n    },\n\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + ')'\n    };\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    if (this.options.showLine) {\n\n      // https://github.com/chartjs/Chart.js/issues/11333\n      if (!this.datasetElementType) {\n        this.addElements();\n      }\n      const {dataset: line, _dataset} = meta;\n\n      // Update Line\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    } else if (this.datasetElementType) {\n      // https://github.com/chartjs/Chart.js/issues/11333\n      delete meta.dataset;\n      this.datasetElementType = false;\n    }\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  addElements() {\n    const {showLine} = this.options;\n\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = this.chart.registry.getElement('line');\n    }\n\n    super.addElements();\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n\n    if (!data.length) {\n      return border;\n    }\n\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n  if (innerRadius > 0) {\n    const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n    ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n  } else {\n    const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n    if (borderJoinStyle === 'round') {\n      ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n    } else if (borderJoinStyle === 'bevel') {\n      const r = 2 * clipWidth * clipWidth;\n      const endX = -r * Math.cos(endAngle + PI / 2) + x;\n      const endY = -r * Math.sin(endAngle + PI / 2) + y;\n      const startX = r * Math.cos(startAngle + PI / 2) + x;\n      const startY = r * Math.sin(startAngle + PI / 2) + y;\n      ctx.lineTo(endX, endY);\n      ctx.lineTo(startX, startY);\n    }\n  }\n  ctx.closePath();\n\n  ctx.moveTo(0, 0);\n  ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n  ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n\n  // Draw an inner border by clipping the arc and drawing a double-width border\n  // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n  // Outer limits are complicated. We want to compute the available angular distance at\n  // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n  // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n  //\n  // If the borderRadius is large, that value can become negative.\n  // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n  // we know that the thickness term will dominate and compute the limits at that point\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */\nfunction pathArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  end: number,\n  circular: boolean,\n) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n  let spacingOffset = 0;\n  const alpha = end - start;\n\n  if (spacing) {\n    // When spacing is present, it is the same for all items\n    // So we adjust the start and end angle of the arc such that\n    // the distance is the same as it would be without the spacing\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n    // The corner segment from point 2 to point 3\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n\n    // The line from point 3 to point 4\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n\n    // The corner segment from point 4 to point 5\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n\n    // The inner arc from point 5 to point b to point 6\n    const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n    // The corner segment from point 6 to point 7\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n\n    // The line from point 7 to point 8\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n\n    // The corner segment from point 8 to point 1\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference, options} = element;\n  const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n  const inner = options.borderAlign === 'inner';\n\n  if (!borderWidth) {\n    return;\n  }\n\n  ctx.setLineDash(borderDash || []);\n  ctx.lineDashOffset = borderDashOffset;\n\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n\n  if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n    clipSelf(ctx, element, endAngle);\n  }\n\n  if (!fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.stroke();\n  }\n}\n\nexport interface ArcProps extends Point {\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n  circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n  static id = 'arc';\n\n  static defaults = {\n    borderAlign: 'center',\n    borderColor: '#fff',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: undefined,\n    borderRadius: 0,\n    borderWidth: 2,\n    offset: 0,\n    spacing: 0,\n    angle: undefined,\n    circular: true,\n    selfJoin: false,\n  };\n\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor'\n  };\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash'\n  };\n\n  circumference: number;\n  endAngle: number;\n  fullCircles: number;\n  innerRadius: number;\n  outerRadius: number;\n  pixelMargin: number;\n  startAngle: number;\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n    const betweenAngles = _circumference >= TAU || nonZeroBetween;\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n    return (betweenAngles && withinRadius);\n  }\n\n  getCenterPoint(useFinalPosition: boolean) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius'\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n\n  tooltipPosition(useFinalPosition: boolean) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n\n  draw(ctx: CanvasRenderingContext2D) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 4;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n\n    ctx.save();\n\n    const halfAngle = (this.startAngle + this.endAngle) / 2;\n    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n    const radiusOffset = offset * fix;\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n\n    drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n    ctx.restore();\n  }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n\n  return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  // eslint-disable-next-line prefer-const\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n\n    prev = point;\n  }\n\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n\n  return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      // Draw line to maxY and minY, using the average x-coordinate\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      // Line to y-value of last point in group. So the line continues\n      // from correct position. Not using move, to have solid path.\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    }\n\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0; // truncated x-coordinate\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      // Draw line to next x-position, using the first (or only)\n      // y-value in that group\n      ctx.lineTo(x, y);\n\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    // Keep track of the last y-value in group\n    lastY = y;\n  }\n  drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n\n  return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\n\nexport default class LineElement extends Element {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderCapStyle: 'butt',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 3,\n    capBezierPoints: true,\n    cubicInterpolationMode: 'default',\n    fill: false,\n    spanGaps: false,\n    stepped: false,\n    tension: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n  };\n\n\n  constructor(cfg) {\n    super();\n\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n\n  get points() {\n    return this._points;\n  }\n\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n\n  /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n\n  /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n\n  /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n\n    if (!segments.length) {\n      return;\n    }\n\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n\n  /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n\n  /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n\n    start = start || 0;\n    count = count || (this.points.length - start);\n\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n\n  /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n\n    if (points.length && options.borderWidth) {\n      ctx.save();\n\n      draw(ctx, this, start, count);\n\n      ctx.restore();\n    }\n\n    if (this.animated) {\n      // When line is animated, the control points and path are not cached.\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n  CartesianParsedData,\n  ChartArea,\n  Point,\n  PointHoverOptions,\n  PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n  static id = 'point';\n\n  parsed: CartesianParsedData;\n  skip?: boolean;\n  stop?: boolean;\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderWidth: 1,\n    hitRadius: 1,\n    hoverBorderWidth: 1,\n    hoverRadius: 4,\n    pointStyle: 'circle',\n    radius: 3,\n    rotation: 0\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n\n  inXRange(mouseX: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseX, 'x', useFinalPosition);\n  }\n\n  inYRange(mouseY: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseY, 'y', useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition?: boolean) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n\n  size(options?: Partial<PointOptions & PointHoverOptions>) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n\n  draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n    const options = this.options;\n\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n\n  getRange() {\n    const options = this.options || {};\n    // @ts-expect-error Fallbacks should never be hit in practice\n    return options.radius + options.hitRadius;\n  }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n  let left, right, top, bottom, half;\n\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n\n  return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n\n  // If the value is an object, assume the user knows what they are doing\n  // and apply as directed.\n  const enableBorder = enableBorderRadius || isObject(value);\n\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\n\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\n\nexport default class BarElement extends Element {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderSkipped: 'start',\n    borderWidth: 0,\n    borderRadius: 0,\n    inflateAmount: 'auto',\n    pointStyle: undefined\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n  const labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n  return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n  static id = 'category';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: _getLabelForValue\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n\n    // If we are viewing some subset of labels, slice the original array\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n\n  getLabelForValue(value) {\n    return _getLabelForValue.call(this, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    super.configure();\n\n    if (!this.isHorizontal()) {\n      // For backward compatibility, vertical category scale reverse is inverted.\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n\n  // Used to get data value locations. Value can either be an index or a numerical value\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  // Must override base implementation because it calls getPixelForValue\n  // and category scale can have duplicate values\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n\n  getBasePixel() {\n    return this.bottom;\n  }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n *    if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n *    Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n *    spacing = (max - min) / count\n *    Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n *    spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n  const ticks = [];\n  // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n  // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n  // for details.\n\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n\n  // Beyond MIN_SPACING floating point numbers being to lose precision\n  // such that we can't do the math necessary to generate ticks\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\n    // If the user specified a precision, round to that number of decimal places\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n    // spacing = step;\n    // numSpaces = (max - min) / spacing;\n    // Note that we round here to handle the case where almostWhole translated an FP error\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n    // Sometimes these are no-ops, but it makes the code a lot clearer\n    // and when a user defined range is specified, we want the correct ticks\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    // Case 4\n    numSpaces = (niceMax - niceMin) / spacing;\n\n    // If very close to our rounded value, use it.\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n\n  // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n  // until this point\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n\n      if (niceMin < min) {\n        j++; // Skip niceMin\n      }\n      // If the next nice tick is close to min, skip it\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n\n  for (; j < numSpaces; ++j) {\n    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n    ticks.push({value: tickValue});\n  }\n\n  if (maxDefined && includeBounds && niceMax !== max) {\n    // If the previous tick is too close to max, replace it with max, else add max\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    /** @type {number} */\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n\n    return +raw;\n  }\n\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n\n    if (min === max) {\n      let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n      setMax(max + offset);\n\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    // eslint-disable-next-line prefer-const\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n\n    return maxTicks;\n  }\n\n  /**\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    // Figure out what the max number of ticks we can support it is based on the size of\n    // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n    // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n    // the graph. Make sure we always have at least 2 ticks\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n\n    super.configure();\n\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n  static id = 'linear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.numeric\n    }\n  };\n\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? min : 0;\n    this.max = isFinite(max) ? max : 1;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n\n  // Utils\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  const rangeStep = Math.pow(10, rangeExp);\n  const start = Math.floor(min / rangeStep);\n  const end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  const range = max - min;\n  let rangeExp = log10Floor(range);\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n  return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n  min = finiteOrDefault(generationOptions.min, min);\n  const ticks = [];\n  const minExp = log10Floor(min);\n  let exp = startExp(min, max);\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  const stepSize = Math.pow(10, exp);\n  const base = minExp > exp ? Math.pow(10, minExp) : 0;\n  const start = Math.round((min - base) * precision) / precision;\n  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  let significand = Math.floor((start - offset) / Math.pow(10, exp));\n  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n  while (value < max) {\n    ticks.push({value, major: isMajor(value), significand});\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n  const lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n  return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n  static id = 'logarithmic';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.logarithmic,\n      major: {\n        enabled: true\n      }\n    }\n  };\n\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isFinite(value) && value > 0 ? value : null;\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? Math.max(0, min) : null;\n    this.max = isFinite(max) ? Math.max(0, max) : null;\n\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n\n    // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n    // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n    if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n    }\n\n    this.handleTickRangeOptions();\n  }\n\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (min === max) {\n      if (min <= 0) { // includes null\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(changeExponent(min, -1));\n        setMax(changeExponent(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(changeExponent(max, -1));\n    }\n    if (max <= 0) {\n\n      setMax(changeExponent(min, +1));\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const start = this.min;\n\n    super.configure();\n\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n  // Right, this is really confusing and there is a lot of maths going on here\n  // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n  //\n  // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n  //\n  // Solution:\n  //\n  // We assume the radius of the polygon is half the size of the canvas at first\n  // at each index we check if the text overlaps.\n  //\n  // Where it does, we store that angle and that index.\n  //\n  // After finding the largest index and angle we calculate how much we need to remove\n  // from the shape radius to move the point inwards by that x.\n  //\n  // We average the left and right distances to get the maximum shape radius that can fit in the box\n  // along with labels.\n  //\n  // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n  // on each side, removing that from the size, halving it and adding the left x protrusion width.\n  //\n  // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n  // and position it in the most space efficient manner\n  //\n  // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n  // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n  // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n\n  // Now that text size is determined, compute the full positions\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n  const outerDistance = scale.drawingArea;\n  const {extra, additionalAngle, padding, size} = itemOpts;\n  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  const y = yForAngle(pointLabelPosition.y, size.h, angle);\n  const textAlign = getTextAlignForAngle(angle);\n  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    // if to draw or overlapped\n    visible: true,\n\n    // Text position\n    x: pointLabelPosition.x,\n    y,\n\n    // Text rendering data\n    textAlign,\n\n    // Bounding box\n    left,\n    top: y,\n    right: left + size.w,\n    bottom: y + size.h\n  };\n}\n\nfunction isNotOverlapped(item, area) {\n  if (!area) {\n    return true;\n  }\n  const {left, top, right, bottom} = item;\n  const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n    _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const {centerPointLabels, display} = opts.pointLabels;\n  const itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  let area;\n\n  for (let i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n\n    const item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n      if (item.visible) {\n        area = item;\n      }\n    }\n  }\n  return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\n\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  const {left, top, right, bottom} = item;\n  const {backdropColor} = opts;\n\n  if (!isNullOrUndef(backdropColor)) {\n    const borderRadius = toTRBLCorners(opts.borderRadius);\n    const padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n\n    const backdropLeft = left - padding.left;\n    const backdropTop = top - padding.top;\n    const backdropWidth = right - left + padding.width;\n    const backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(v => v !== 0)) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {\n        x: backdropLeft,\n        y: backdropTop,\n        w: backdropWidth,\n        h: backdropHeight,\n        radius: borderRadius,\n      });\n      ctx.fill();\n    } else {\n      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n    }\n  }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const item = scale._pointLabelItems[i];\n    if (!item.visible) {\n      // overlapping\n      continue;\n    }\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign} = item;\n\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    // Draw circular arcs between the points\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    // Draw straight lines connecting each index\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n\n  const {color, lineWidth} = gridLineOpts;\n\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(borderOpts.dash || []);\n  ctx.lineDashOffset = borderOpts.dashOffset;\n\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n  static id = 'radialLinear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    display: true,\n\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n\n    angleLines: {\n      display: true,\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n\n    grid: {\n      circular: false\n    },\n\n    startAngle: 0,\n\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n\n      callback: Ticks.formatters.numeric\n    },\n\n    pointLabels: {\n      backdropColor: undefined,\n\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPadding: 2,\n\n      // Boolean - if true, show point labels\n      display: true,\n\n      // Number - Point label font size in pixels\n      font: {\n        size: 10\n      },\n\n      // Function - Used to convert point labels\n      callback(label) {\n        return label;\n      },\n\n      // Number - Additionl padding between scale and pointLabel\n      padding: 5,\n\n      // Boolean - if true, center point labels to slices in polar chart\n      centerPointLabels: false\n    }\n  };\n\n  static defaultRoutes = {\n    'angleLines.color': 'borderColor',\n    'pointLabels.color': 'color',\n    'ticks.color': 'color'\n  };\n\n  static descriptors = {\n    angleLines: {\n      _fallback: 'grid'\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.xCenter = undefined;\n    /** @type {number} */\n    this.yCenter = undefined;\n    /** @type {number} */\n    this.drawingArea = undefined;\n    /** @type {string[]} */\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n\n    this.min = isFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n    // Point labels\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n\n  fit() {\n    const opts = this.options;\n\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n\n    // Take into account half font size + the yPadding of the top value\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid, border} = opts;\n    const labelCount = this._pointLabels.length;\n\n    let i, offset, position;\n\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0 || (index === 0 && this.min < 0)) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const context = this.getContext(index);\n          const optsAtIndex = grid.setContext(context);\n          const optsAtIndexBorder = border.setContext(context);\n\n          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n        }\n      });\n    }\n\n    if (angleLines.display) {\n      ctx.save();\n\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n\n        if (!lineWidth || !color) {\n          continue;\n        }\n\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n        offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {}\n\n  /**\n\t * @protected\n\t */\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    if (!tickOpts.display) {\n      return;\n    }\n\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n\n    this.ticks.forEach((tick, index) => {\n      if ((index === 0 && this.min >= 0) && !opts.reverse) {\n        return;\n      }\n\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n        strokeColor: optsAtIndex.textStrokeColor,\n        strokeWidth: optsAtIndex.textStrokeWidth,\n      });\n    });\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n  return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  // Only parse if it's not a timestamp already\n  if (!isFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n\n  return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  /** @type {Object<number,object>} */\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n\n  // We set the major ticks separately from the above loop because calling startOf for every tick\n  // is expensive when there is a large number of ticks\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n  static id = 'time';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n\n    adapters: {},\n    time: {\n      parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n      unit: false, // false == automatic or override with week, month, year, etc.\n      round: false, // none, or override with week, month, year, etc.\n      isoWeekday: false, // override week start day\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n\n      callback: false,\n\n      major: {\n        enabled: false\n      }\n    }\n  };\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {{data: number[], labels: number[], all: number[]}} */\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n\n    /** @type {Unit} */\n    this._unit = 'day';\n    /** @type {Unit=} */\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n\n  init(scaleOpts, opts = {}) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    /** @type {DateAdapter} */\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n    adapter.init(opts);\n\n    // Backward compatibility: before introducing adapter, `displayFormats` was\n    // supposed to contain *all* unit/string pairs but this can't be resolved\n    // when loading the scale (adapters are loaded afterward), so let's populate\n    // missing formats on update\n    mergeIf(time.displayFormats, adapter.formats());\n\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n\n    super.init(scaleOpts);\n\n    this._normalized = opts.normalized;\n  }\n\n  /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n    /**\n\t\t * @param {object} bounds\n\t\t */\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n\n    // If we have user provided `min` and `max` labels / data bounds can be ignored\n    if (!minDefined || !maxDefined) {\n      // Labels are always considered, when user did not force bounds\n      _applyBounds(this._getLabelBounds());\n\n      // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n      // data bounds are ignored (and don't need to be determined)\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n\n    min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n    // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n\n  /**\n\t * @private\n\t */\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n\n  /**\n\t * @return {object[]}\n\t */\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n\n    const min = this.min;\n    const max = this.max;\n\n    const ticks = _filterBetween(timestamps, min, max);\n\n    // PRIVATE\n    // determineUnitForFormatting relies on the number of ticks so we don't use it when\n    // autoSkip is enabled because we don't yet know what the final number of ticks will be\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n\n    if (options.reverse) {\n      ticks.reverse();\n    }\n\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n\n  afterAutoSkip() {\n    // Offsets for bar charts need to be handled with the auto skipped\n    // ticks. Once ticks have been skipped, we re-compute the offsets.\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n\n  /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n  initOffsets(timestamps = []) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n\n  /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    // @ts-ignore\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n\n    // For 'week' unit, handle the first day of week option\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n\n    // @ts-ignore\n    return Object.keys(ticks).sort(sorter).map(x => +x);\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n\n  /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n  format(value, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const fmt = format || formats[unit];\n    return this._adapter.format(value, fmt);\n  }\n\n  /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formatter = options.ticks.callback;\n\n    if (formatter) {\n      return call(formatter, [time, index, ticks], this);\n    }\n\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n\n    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n  }\n\n  /**\n\t * @param {object[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n\n  /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n\n  /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n\n    // pick the longest format (milliseconds) for guesstimation\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    // subtract 1 - if offset then there's one less label than tick\n    // if not offset then one half label padding is added to each end leaving room for one less label\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n\n    return (this._cache.data = this.normalize(timestamps));\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n\n  /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n  normalize(values) {\n    // It seems to be somewhat faster to do sorting first\n    return _arrayUnique(values.sort(sorter));\n  }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n  static id = 'timeseries';\n\n  /**\n   * @type {any}\n   */\n  static defaults = TimeScale.defaults;\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {object[]} */\n    this._table = [];\n    /** @type {number} */\n    this._minPos = undefined;\n    /** @type {number} */\n    this._tableRange = undefined;\n  }\n\n  /**\n\t * @protected\n\t */\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n\n  /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n\n    if (items.length < 2) {\n      // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n\n  /**\n    * Generates all timestamps defined in the data.\n    * Important: this method can return ticks outside the min and max range, it's the\n    * responsibility of the calling code to clamp values if needed.\n    * @protected\n    */\n  _generate() {\n    const min = this.min;\n    const max = this.max;\n    let timestamps = super.getDataTimestamps();\n    if (!timestamps.includes(min) || !timestamps.length) {\n      timestamps.splice(0, 0, min);\n    }\n    if (!timestamps.includes(max) || timestamps.length === 1) {\n      timestamps.push(max);\n    }\n    return timestamps.sort((a, b) => a - b);\n  }\n\n  /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      // If combining labels and data (data might not contain all labels),\n      // we need to recheck uniqueness and sort\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n\n    return timestamps;\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\n\nexport default TimeSeriesScale;\n","import {DoughnutController, PolarAreaController, defaults} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n  enabled?: boolean;\n  forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n  backgroundColor?: unknown;\n  borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n  'rgb(54, 162, 235)', // blue\n  'rgb(255, 99, 132)', // red\n  'rgb(255, 159, 64)', // orange\n  'rgb(255, 205, 86)', // yellow\n  'rgb(75, 192, 192)', // green\n  'rgb(153, 102, 255)', // purple\n  'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n  return i;\n}\n\nfunction getColorizer(chart: Chart) {\n  let i = 0;\n\n  return (dataset: ChartDataset, datasetIndex: number) => {\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n    if (controller instanceof DoughnutController) {\n      i = colorizeDoughnutDataset(dataset, i);\n    } else if (controller instanceof PolarAreaController) {\n      i = colorizePolarAreaDataset(dataset, i);\n    } else if (controller) {\n      i = colorizeDefaultDataset(dataset, i);\n    }\n  };\n}\n\nfunction containsColorsDefinitions(\n  descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n  let k: number | string;\n\n  for (k in descriptors) {\n    if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction containsColorsDefinition(\n  descriptor: ColorsDescriptor\n) {\n  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nfunction containsDefaultColorsDefenitions() {\n  return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\n\nexport default {\n  id: 'colors',\n\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  } as ColorsPluginOptions,\n\n  beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n    if (!options.enabled) {\n      return;\n    }\n\n    const {\n      data: {datasets},\n      options: chartOptions\n    } = chart.config;\n    const {elements} = chartOptions;\n\n    const containsColorDefenition = (\n      containsColorsDefinitions(datasets) ||\n      containsColorsDefinition(chartOptions) ||\n      (elements && containsColorsDefinitions(elements)) ||\n      containsDefaultColorsDefenitions());\n\n    if (!options.forceOverride && containsColorDefenition) {\n      return;\n    }\n\n    const colorizer = getColorizer(chart);\n\n    datasets.forEach(colorizer);\n  }\n};\n","import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  /**\n   * Implementation of the Largest Triangle Three Buckets algorithm.\n   *\n   * This implementation is based on the original implementation by Sveinn Steinarsson\n   * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n   *\n   * The original implementation is MIT licensed.\n   */\n  const samples = options.samples || availableWidth;\n  // There are less points than the threshold, returning the whole array\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  const decimated = [];\n\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  // Starting from offset\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n\n    // Adding offset\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n\n    // Adding offset\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n\n    // Note that this is changed from the original algorithm which initializes these\n    // values to 1. The reason for this change is that if the area is small, nextA\n    // would never be set and thus a crash would occur in the next loop as `a` would become\n    // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n    // initializing with a negative number is the correct solution.\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n\n  // Include the last point\n  decimated[sampledIndex++] = data[endIndex];\n\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      // Use point.x here because we're computing the average data `x` value\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      // Push up to 4 points, 3 for the last interval and the first point for this interval\n      const lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        // The interval is defined by 4 points: start, min, max, end.\n        // The starting point is already considered at this point, so we need to determine which\n        // of the other points to add. We need to sort these points to ensure the decimated data\n        // is still sorted and then ensure there are no duplicates.\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n\n      // lastIndex === startIndex will occur when a range has only 1 point which could\n      // happen with very uneven data\n      if (i > 0 && lastIndex !== startIndex) {\n        // Last point in the previous interval\n        decimated.push(data[lastIndex]);\n      }\n\n      // Start of the new interval\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n\n  return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: data,\n    });\n  }\n}\n\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count;\n\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n\n  return {start, count};\n}\n\nexport default {\n  id: 'decimation',\n\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    // Assume the entire chart is available to show a few more points than needed\n    const availableWidth = chart.width;\n\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        // Decimation is only supported for lines that have an X indexAxis\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        // Only line datasets are supported\n        return;\n      }\n\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        // Only linear interpolation is supported\n        return;\n      }\n\n      if (chart.options.parsing) {\n        // Plugin only supports data that does not need parsing\n        return;\n      }\n\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        // No decimation is required until we are above this threshold\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        // First time we are seeing this dataset\n        // We override the 'data' property with a setter that stores the\n        // raw data in _data, but reads the decimated data from _decimated\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      // Point the chart to the decimated data\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n    if (!target.segments) {\n      // Special case for boundary not supporting `segments` (simpleArc)\n      // Bounds are provided as `target` for partial circle, or undefined for full circle\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n\n    // Get all segments from `target` that intersect the bounds of current segment of `line`\n    const targetSegments = _boundSegments(target, bounds);\n\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    // @ts-ignore\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n\n    if (target.visible) {\n      return fill;\n    }\n\n    visited.push(fill);\n    fill = target.fill;\n  }\n\n  return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n  /** @type {string | {value: number}} */\n  const fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  let target = parseFloat(fill);\n\n  if (isFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n\n  return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n  let value;\n\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n\n  if (fill === false || fill === null) {\n    return false;\n  }\n\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      // First point of a segment -> need to add another point before this,\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        // In the middle of a segment, no need to add more points.\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n  const {chart, fill, line} = source;\n\n  if (isFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n\n  if (fill === 'shape') {\n    return true;\n  }\n\n  const boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n\n  if (isFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\n","import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {chart, index, line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  const meta = chart.getDatasetMeta(index);\n  const clip = getDatasetClipArea(chart, meta);\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale, clip} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n\n  ctx.save();\n\n  let fillColor = below;\n  if (below !== above) {\n    if (property === 'x') {\n      clipVertical(ctx, target, area.top);\n      fill(ctx, {line, target, color: above, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipVertical(ctx, target, area.bottom);\n    } else if (property === 'y') {\n      clipHorizontal(ctx, target, area.left);\n      fill(ctx, {line, target, color: below, scale, property, clip});\n      ctx.restore();\n      ctx.save();\n      clipHorizontal(ctx, target, area.right);\n      fillColor = above;\n    }\n  }\n  fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(clipX, firstPoint.y);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(clipX, lastPoint.y);\n    }\n  }\n\n  ctx.lineTo(clipX, target.first().y);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale, clip} = cfg;\n  const segments = _segments(line, target, property);\n\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n\n    clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n    ctx.beginPath();\n\n    const lineLoop = !!line.pathSegment(ctx, src);\n\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n    ctx.restore();\n  }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n  const chartArea = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n\n  if (property === 'x' || property === 'y') {\n    let left, top, right, bottom;\n\n    if (property === 'x') {\n      left = start;\n      top = chartArea.top;\n      right = end;\n      bottom = chartArea.bottom;\n    } else {\n      left = chartArea.left;\n      top = start;\n      right = chartArea.right;\n      bottom = end;\n    }\n\n    ctx.beginPath();\n\n    if (clip) {\n      left = Math.max(left, clip.left);\n      right = Math.min(right, clip.right);\n      top = Math.max(top, clip.top);\n      bottom = Math.min(bottom, clip.bottom);\n    }\n\n    ctx.rect(left, top, right - left, bottom - top);\n    ctx.clip();\n  }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n  id: 'filler',\n\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n\n      meta.$filler = source;\n      sources.push(source);\n    }\n\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n  _isBetween,\n  callback as call,\n  clipArea,\n  getRtlAdapter,\n  overrideTextDirection,\n  restoreTextDirection,\n  toFont,\n  toPadding,\n  unclipArea,\n  valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this._added = false;\n\n    // Contains hit boxes for each dataset (in dataset order)\n    this.legendHitBoxes = [];\n\n    /**\n \t\t * @private\n \t\t */\n    this._hoveredItem = null;\n\n    // Are we in doughnut mode which has a different data type\n    this.doughnutMode = false;\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n\n    this.legendItems = legendItems;\n  }\n\n  fit() {\n    const {options, ctx} = this;\n\n    // The legend may not be displayed for a variety of reasons including\n    // the fact that the defaults got set to `false`.\n    // When the legend is not displayed, there are no guarantees that the options\n    // are correctly formatted so we need to bail out as early as possible.\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    let width, height;\n\n    ctx.font = labelFont.string;\n\n    if (this.isHorizontal()) {\n      width = this.maxWidth; // fill all the width\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight; // fill all the height\n      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n    }\n\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n\n  /**\n\t * @private\n\t */\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n\n    return totalHeight;\n  }\n\n  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n\n    let left = 0;\n    let col = 0;\n\n    this.legendItems.forEach((legendItem, i) => {\n      const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n      // If too tall, go to new column\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n\n      // Store the hitbox width and height here. Final position will be updated in `draw`\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n      // Get max width\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n    return totalWidth;\n  }\n\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n\n      this._draw();\n\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n\n    this.drawTitle();\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    // current position\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n\n      // Set the ctx for the box\n      ctx.save();\n\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n      if (labelOpts.usePointStyle) {\n        // Recalculate x and y for drawPoint() because its expecting\n        // x and y to be center of figure (instead of top left)\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n\n        // Draw pointStyle as legend symbol\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        // Draw box as legend symbol\n        // Adjust position when boxHeight < fontSize (want it centered)\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n        ctx.beginPath();\n\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n\n      ctx.restore();\n    };\n\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n\n    // Horizontal\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n\n    overrideTextDirection(this.ctx, opts.textDirection);\n\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n      ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n\n      rtlHelper.setWidth(this.width);\n\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n\n      const realX = rtlHelper.x(x);\n\n      drawLegendBox(realX, y, legendItem);\n\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n      // Fill the actual label\n      fillText(rtlHelper.x(x), y, legendItem);\n\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else if (typeof legendItem.text !== 'string') {\n        const fontLineHeight = labelFont.lineHeight;\n        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n\n    if (!titleOpts.display) {\n      return;\n    }\n\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n\n    // These defaults are used when the legend is vertical.\n    // When horizontal, they are computed below.\n    let left = this.left;\n    let maxWidth = this.width;\n\n    if (this.isHorizontal()) {\n      // Move left / right so that the title is above the legend lines\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      // Move down so that the title is above the legend stack in every alignment\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n\n    // Now that we know the left edge of the inner legend box, compute the correct\n    // X coordinate from the title alignment\n    const x = _alignStartEnd(position, left, left + maxWidth);\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n\n  /**\n\t * @private\n\t */\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      // See if we are touching one of the dataset boxes\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          // Touching an element\n          return this.legendItems[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n\n    // Chart event already has relative position in it\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        call(opts.onLeave, [e, previous, this], this);\n      }\n\n      this._hoveredItem = hoveredItem;\n\n      if (hoveredItem && !sameItem) {\n        call(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      call(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  let legendItemText = legendItem.text;\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n  }\n  return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  let itemHeight = _itemHeight;\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  const labelHeight = legendItem.text ? legendItem.text.length : 0;\n  return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\n\nexport default {\n  id: 'legend',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Legend,\n\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n\n  // During the beforeUpdate step, the layout configuration needs to run\n  // This ensures that if the legend position changes (via an option update)\n  // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n\n  // The labels need to be built after datasets are updated to ensure that colors\n  // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n\n\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n\n    // a callback that will handle\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n\n    onHover: null,\n    onLeave: null,\n\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      // Generates labels shown in the legend\n      // Valid properties to return:\n      // text : text to display\n      // fillStyle : fill of coloured box\n      // strokeStyle: stroke of coloured box\n      // hidden : if this legend item refers to a hidden item\n      // lineCap : cap style for line\n      // lineDash\n      // lineDashOffset :\n      // lineJoin :\n      // lineWidth :\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n            // Below is extra data used for toggling the datasets\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n","import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n\n    this.left = 0;\n    this.top = 0;\n\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n\n    if (!opts.display) {\n      return;\n    }\n\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\n\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nexport default {\n  id: 'title',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Title,\n\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000         // by default greater than legend (1000) to be above\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n  id: 'subtitle',\n\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500         // by default greater than legend (1000) and smaller than title (2000)\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n  /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    let i, len;\n    let xSet = new Set();\n    let y = 0;\n    let count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        xSet.add(pos.x);\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n    if (count === 0 || xSet.size === 0) {\n      return false;\n    }\n\n    const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n    return {\n      x: xAverage,\n      y: y / count\n    };\n  },\n\n  /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x,\n      y\n    };\n  }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      // base = base.concat(toPush);\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n\n  // Count of all lines in the body\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    // Body lines may include some extra height depending on boxHeight\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  // Title width\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n\n  // Body width\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n  // Body lines may include some extra width due to the color box\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n\n  // Reset back to 0\n  widthPadding = 0;\n\n  // Footer width\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n\n  ctx.restore();\n\n  // Add padding\n  width += padding.width;\n\n  return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n\n  return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  // eslint-disable-next-line prefer-const\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n  // Args are: (tooltipItems, data)\n  beforeTitle: noop,\n  title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      const item = tooltipItems[0];\n      const labels = item.chart.data.labels;\n      const labelCount = labels ? labels.length : 0;\n\n      if (this && this.options && this.options.mode === 'dataset') {\n        return item.dataset.label || '';\n      } else if (item.label) {\n        return item.label;\n      } else if (labelCount > 0 && item.dataIndex < labelCount) {\n        return labels[item.dataIndex];\n      }\n    }\n\n    return '';\n  },\n  afterTitle: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeBody: noop,\n\n  // Args are: (tooltipItem, data)\n  beforeLabel: noop,\n  label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    let label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n    const value = tooltipItem.formattedValue;\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n    return label;\n  },\n  labelColor(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      borderColor: options.borderColor,\n      backgroundColor: options.backgroundColor,\n      borderWidth: options.borderWidth,\n      borderDash: options.borderDash,\n      borderDashOffset: options.borderDashOffset,\n      borderRadius: 0,\n    };\n  },\n  labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation,\n    };\n  },\n  afterLabel: noop,\n\n  // Args are: (tooltipItems, data)\n  afterBody: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  const result = callbacks[name].call(ctx, arg);\n\n  if (typeof result === 'undefined') {\n    return defaultCallbacks[name].call(ctx, arg);\n  }\n\n  return result;\n}\n\nexport class Tooltip extends Element {\n\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n  static positioners = positioners;\n\n  constructor(config) {\n    super();\n\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n    // and `labelTextColors` to create a single variable\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n\n    if (cached) {\n      return cached;\n    }\n\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n\n  getTitle(context, options) {\n    const {callbacks} = options;\n\n    const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n    const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n    const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n    return lines;\n  }\n\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n    );\n  }\n\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n      bodyItems.push(bodyItem);\n    });\n\n    return bodyItems;\n  }\n\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n    );\n  }\n\n  // Get the footer and beforeFooter and afterFooter lines\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n\n    const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n    const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n    const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n    return lines;\n  }\n\n  /**\n\t * @private\n\t */\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n\n    // If the user provided a filter function, use it to modify the tooltip items\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n\n    // If the user provided a sorting function, use it to modify the tooltip items\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n\n    // Determine colors for boxes\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n      labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n      labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n    });\n\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n\n        // Left draws bottom -> top, this y1 is on the bottom\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n\n        // Right draws top -> bottom, thus y1 is on the top\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n\n        // Top draws left -> right, thus x1 is on the left\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n\n        // Bottom draws right -> left, thus x1 is on the right\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.titleAlign, options);\n\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n        }\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColor = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      // Recalculate x and y for drawPoint() because its expecting\n      // x and y to be center of figure (instead of top left)\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n\n      // Fill the point with white so that colours merge nicely if the opacity is < 1\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n\n      // Draw the point\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.fillStyle = labelColor.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      // Border\n      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.setLineDash(labelColor.borderDash || []);\n      ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n      // Fill a white rect so that colours merge nicely if the opacity is < 1\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        // Normal rect\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n\n    // restore fillStyle\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n    // Before body lines\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n\n    // Draw body lines now\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n\n      lines = bodyItem.lines;\n      // Draw Legend-like boxes if needed\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        // Reset for any lines that don't include colorbox\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n\n      each(bodyItem.after, fillLineOfText);\n    }\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n\n    // After body lines\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n\n      footerFont = toFont(options.footerFont);\n\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n\n    ctx.fill();\n\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n\n  /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n\n  /**\n   * Determine if the tooltip will draw anything\n   * @returns {boolean} True if the tooltip will render\n   */\n  _willRender() {\n    return !!this.opacity;\n  }\n\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n\n    if (!opacity) {\n      return;\n    }\n\n    this._updateAnimationTarget(options);\n\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n\n    // IE11/Edge does not like very small opacities, so snap to 0\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n    const padding = toPadding(options.padding);\n\n    // Truthy/falsey value for empty tooltip\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n\n      // Draw Background\n      this.drawBackground(pt, ctx, tooltipSize, options);\n\n      overrideTextDirection(ctx, options.textDirection);\n\n      pt.y += padding.top;\n\n      // Titles\n      this.drawTitle(pt, ctx, options);\n\n      // Body\n      this.drawBody(pt, ctx, options);\n\n      // Footer\n      this.drawFooter(pt, ctx, options);\n\n      restoreTextDirection(ctx, options.textDirection);\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n    // When there are multiple items shown, but the tooltip position is nearest mode\n    // an update may need to be made because our position may have changed even though\n    // the items are the same as before.\n    const positionChanged = this._positionChanged(active, e);\n\n    // Remember Last Actives\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n    // Only handle target event on tooltip change\n    if (changed) {\n      this._active = active;\n\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n\n        this.update(true, replay);\n      }\n    }\n\n    return changed;\n  }\n\n  /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      // But make sure that active elements are still valid.\n      return lastActive.filter(i =>\n        this.chart.data.datasets[i.datasetIndex] &&\n        this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n      );\n    }\n\n    // Find Active Elements for tooltips\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n    if (options.reverse) {\n      active.reverse();\n    }\n\n    return active;\n  }\n\n  /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\n\nexport default {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      // If the event is replayed from `update`, we should evaluate with the final positions.\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        // notify chart about the change, so it will render\n        args.changed = true;\n      }\n    }\n  },\n\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: defaultCallbacks\n  },\n\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n\n  // Resolve additionally from `interaction` options and defaults.\n  additionalOptionScopes: ['interaction']\n};\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\n/**\n * @namespace Chart\n */\nimport Chart from './core/core.controller.js';\n\nimport * as helpers from './helpers/index.js';\nimport _adapters from './core/core.adapters.js';\nimport Animation from './core/core.animation.js';\nimport animator from './core/core.animator.js';\nimport Animations from './core/core.animations.js';\nimport * as controllers from './controllers/index.js';\nimport DatasetController from './core/core.datasetController.js';\nimport Element from './core/core.element.js';\nimport * as elements from './elements/index.js';\nimport Interaction from './core/core.interaction.js';\nimport layouts from './core/core.layouts.js';\nimport * as platforms from './platform/index.js';\nimport * as plugins from './plugins/index.js';\nimport registry from './core/core.registry.js';\nimport Scale from './core/core.scale.js';\nimport * as scales from './scales/index.js';\nimport Ticks from './core/core.ticks.js';\n\n// Register built-ins\nChart.register(controllers, scales, elements, plugins);\n\nChart.helpers = {...helpers};\nChart._adapters = _adapters;\nChart.Animation = Animation;\nChart.Animations = Animations;\nChart.animator = animator;\nChart.controllers = registry.controllers.items;\nChart.DatasetController = DatasetController;\nChart.Element = Element;\nChart.elements = elements;\nChart.Interaction = Interaction;\nChart.layouts = layouts;\nChart.platforms = platforms;\nChart.Scale = Scale;\nChart.Ticks = Ticks;\n\n// Compatibility with ESM extensions\nObject.assign(Chart, controllers, scales, elements, plugins, platforms);\nChart.Chart = Chart;\n\nif (typeof window !== 'undefined') {\n  window.Chart = Chart;\n}\n\nexport default Chart;\n\n"],"names":["noop","uid","id","isNullOrUndef","value","isArray","Array","type","Object","prototype","toString","call","slice","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","callback","fn","args","thisArg","apply","each","loopable","reverse","i","len","keys","length","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","index","clone","source","map","target","create","klen","k","isValidKey","key","indexOf","_merger","options","tval","sval","merge","sources","merger","current","mergeIf","_mergerIf","hasOwnProperty","keyResolvers","v","x","o","y","_splitKey","parts","split","tmp","part","push","resolveObjectKey","obj","resolver","_getKeyResolver","_capitalize","str","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","size","item","has","_isClickEvent","e","PI","Math","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","range","roundedRange","round","niceRange","pow","floor","fraction","_factorize","result","sqrt","sort","pop","isNumber","n","Symbol","toPrimitive","isNonPrimitive","isNaN","almostWhole","rounded","_setMinAndMaxByKey","array","property","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","isFiniteNumber","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","start","end","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","enumerable","forEach","method","base","res","this","object","unlistenArrayEvents","stub","splice","_arrayUnique","items","set","Set","from","requestAnimFrame","window","requestAnimationFrame","throttled","argsToUse","ticking","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","count","_sorted","iScale","vScale","_parsed","spanGaps","dataset","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","findIndex","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","assign","Animator","constructor","_request","_charts","Map","_running","_lastDate","undefined","_notify","chart","anims","date","callbacks","numSteps","duration","initial","currentStep","_refresh","_update","Date","now","remaining","running","draw","_active","_total","tick","_getAnims","charts","get","complete","progress","listen","event","cb","add","reduce","acc","cur","_duration","stop","cancel","remove","delete","animator","lim","l","h","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","c","d","f","hex","h1","h2","eq","hexString","r","g","isShort","alpha","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","m","exec","p1","p2","hwb2rgb","hsv2rgb","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names","nameParse","unpacked","tkeys","j","ok","nk","replace","parseInt","unpack","transparent","toLowerCase","RGB_RE","to","modHSL","ratio","proto","fromObject","input","functionParse","rgbParse","Color","ret","_rgb","_valid","valid","rgbString","hslString","mix","color","weight","c1","c2","w2","w1","interpolate","t","rgb1","rgb2","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","isPatternOrGradient","getHoverColor","numbers","colors","intlCache","formatNumber","num","locale","cacheKey","JSON","stringify","formatter","Intl","NumberFormat","getNumberFormat","format","formatters","numeric","tickValue","ticks","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","includes","Ticks","overrides","descriptors","getScope","node","root","scope","Defaults","_descriptors","_appliers","animation","backgroundColor","borderColor","datasets","devicePixelRatio","context","platform","getDevicePixelRatio","elements","events","font","family","style","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","override","route","name","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","appliers","defaults","_scriptable","startsWith","_indexable","_fallback","easing","loop","properties","active","resize","show","animations","visible","hide","autoPadding","padding","top","bottom","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dash","dashOffset","width","title","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_isDomSupported","document","_getParentNode","domNode","parent","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","getStyle","el","getPropertyValue","positions","getPositionedStyle","styles","suffix","pos","height","useOffsetPos","shadowRoot","getRelativePosition","canvas","currentDevicePixelRatio","borderBox","boxSizing","paddings","borders","box","touches","offsetX","offsetY","rect","getBoundingClientRect","clientX","clientY","getCanvasPosition","xOffset","yOffset","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxWidth","maxHeight","containerSize","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","addEventListener","removeEventListener","readUsedSize","matches","match","toFontString","_measureText","data","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","halfWidth","clearCanvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","sin","cos","lineTo","SQRT1_2","fill","borderWidth","stroke","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","line","opts","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","fillStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","translation","textAlign","textBaseline","setRenderOpts","backdrop","strokeText","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","_createResolver","scopes","prefixes","rootScopes","fallback","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","prop","_keys","_cached","proxy","prefix","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","isScriptable","getValue","Error","join","_resolveScriptable","isIndexable","arr","filter","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolve","resolveFallback","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","parse","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","capControlPoint","pt","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","atEdge","elasticIn","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","props","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","console","warn","inputs","info","cacheable","_addGrace","minmax","change","keepZero","createContext","parentContext","getRtlAdapter","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","_boundSegment","segment","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","sub","_computeSegments","segmentOptions","_loop","findStartAndEnd","splitByStyles","solidSegments","_fullLoop","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","getSizeForArea","chartArea","field","getDatasetClipArea","_clip","disabled","getDatasetArea","pixelSize","fontStyle","fontFamily","binarySearch","metaset","controller","_cachedMeta","lookupMethod","_reversePixels","_sharedOptions","getRange","evaluateInteractionItems","position","handler","metasets","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","center","getCenterPoint","getNearestItems","startAngle","endAngle","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","getDatasetMeta","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","params","stacks","wrap","stack","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","factor","horizontal","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","update","setBoxDims","placeBoxes","userPadding","addBox","_layers","z","removeBox","layoutItem","configure","minPadding","layoutBoxes","isHorizontal","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","concat","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","total","freeze","updatePos","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","config","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","entries","trigger","entry","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","addListener","DomPlatform","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","interpolators","boolean","c0","helpersColor","number","Animation","cfg","currentValue","_fn","_easing","_start","_target","_prop","_from","_to","_promises","elapsed","wait","promises","Promise","rej","resolved","Animations","_properties","animationOptions","animatedProps","getOwnPropertyNames","option","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","all","awaitAll","then","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","found","isStacked","stacked","getOrCreateStack","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","shift","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","static","_cachedDataOpts","getMeta","_type","_data","_objectData","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","scaleID","_getOtherScale","reset","_destroy","_dataCheck","iAxisKey","vAxisKey","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","hidden","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","toClip","defaultClip","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","Element","tooltipPosition","hasValue","final","tickOpts","determinedMaxTicks","_tickSize","maxScale","_length","maxChart","_maxLength","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","first","newTicks","spacing","ceil","skipMajors","evenMajorSpacing","diff","getEvenSpacing","factors","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","offsetFromEdge","edge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","_startPixel","_endPixel","lineValue","getPixelForTick","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","super","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_cache","_dataLimitsCached","init","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","minSize","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","getValueForPixel","getPixelForDecimal","decimal","getDecimalForPixel","getBasePixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","getLineWidthForValue","drawGrid","drawLine","setLineDash","lineDashOffset","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","tz","gz","bz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","defaultRoutes","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getElement","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","registry","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","plugin","callCallback","cancelable","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","determineAxis","scaleOptions","getAxisFromDataset","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","error","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","initOptions","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","_dataset","buildOrUpdateControllers","newControllers","order","isDatasetVisible","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getElementsAtEventForMode","getVisibleDatasetCount","setDatasetVisibility","toggleDataVisibility","getDataVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","lastEvent","determineLastEvent","abstract","DateAdapterBase","members","formats","startOf","endOf","_adapters","_date","computeMinSampleSize","$bar","visibleMetas","getAllScaleValues","curr","updateMinAndPrev","parseValue","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","borderSkipped","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","DoughnutController","animateRotate","animateScale","cutout","circumference","legend","generateLabels","fontColor","legendItem","innerRadius","outerRadius","getter","_getRotation","_getCircumference","_getRotationExtents","arcs","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","ratioX","ratioY","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerX","centerY","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","PolarAreaController","angleLines","circular","pointLabels","bind","_updateRadius","cutoutPercentage","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","categoryPercentage","barPercentage","grouped","_index_","_value_","bars","ruler","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","currentParsed","iScaleValue","skipNull","find","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","pixels","barThickness","stackCount","baseValue","minBarLength","actualBase","floating","barSign","halfGrid","maxBarThickness","Infinity","axisCount","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","axisNumber","stackIndex","rects","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","pointPosition","getPointPositionForValue","parseBorderRadius","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","fullCircles","inner","lineJoin","angleMargin","clipArc","selfJoin","outerAngleClip","innerAngleClip","clipWidth","clipSelf","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","path","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","_interpolate","_getInterpolationMethod","interpolated","hitRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","outer","skipX","skipY","addNormalRectPath","inflateRect","amount","refRect","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","addRectPath","mouseX","mouseY","inXRange","inYRange","hoverRadius","findOrAddLabel","addedLabels","unshift","addIfString","lastIndexOf","_getLabelForValue","relativeLabelSize","minSpacing","LinearScaleBase","_startValue","_endValue","_valueRange","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","precision","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","decimalPlaces","generateTicks","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","minExp","exp","startExp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","determineLimits","fitWithPointLabels","_padding","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","textSize","updateLimits","setCenterPoint","_pointLabelItems","itemOpts","extra","createPointLabelItem","isNotOverlapped","buildPointLabelItems","hLimits","vLimits","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","labelCount","RadialLinearScale","animate","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","millisecond","common","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","addTick","time","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","adapters","displayFormats","_unit","_majorUnit","_offsets","_normalized","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","weekday","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","_addedLabels","added","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","getColorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","containsColorsDefinitions","plugin_colors","forceOverride","_args","chartOptions","containsColorDefenition","colorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","getStartAndCountOfVisiblePointsSimplified","threshold","decimated","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","above","fillColor","clipVertical","clipHorizontal","doFill","clipY","lineLoop","clipX","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","onLeave","isListened","hoveredItem","sameItem","plugin_legend","_element","afterEvent","ci","useBorderRadius","Title","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","WeakMap","plugin_subtitle","positioners","average","xSet","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","String","createTooltipItem","formattedValue","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","helpers","platforms"],"mappings":"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","x_google_ignoreList":[5]}
Index: node_modules/chart.js/dist/chunks/helpers.dataset.cjs
===================================================================
--- node_modules/chart.js/dist/chunks/helpers.dataset.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chunks/helpers.dataset.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2915 @@
+/*!
+ * Chart.js v4.5.0
+ * https://www.chartjs.org
+ * (c) 2025 Chart.js Contributors
+ * Released under the MIT License
+ */
+'use strict';
+
+var color$1 = require('@kurkle/color');
+
+/**
+ * @namespace Chart.helpers
+ */ /**
+ * An empty function that can be used, for example, for optional callback.
+ */ function noop() {
+/* noop */ }
+/**
+ * Returns a unique id, sequentially generated from a global variable.
+ */ const uid = (()=>{
+    let id = 0;
+    return ()=>id++;
+})();
+/**
+ * Returns true if `value` is neither null nor undefined, else returns false.
+ * @param value - The value to test.
+ * @since 2.7.0
+ */ function isNullOrUndef(value) {
+    return value === null || value === undefined;
+}
+/**
+ * Returns true if `value` is an array (including typed arrays), else returns false.
+ * @param value - The value to test.
+ * @function
+ */ function isArray(value) {
+    if (Array.isArray && Array.isArray(value)) {
+        return true;
+    }
+    const type = Object.prototype.toString.call(value);
+    if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {
+        return true;
+    }
+    return false;
+}
+/**
+ * Returns true if `value` is an object (excluding null), else returns false.
+ * @param value - The value to test.
+ * @since 2.7.0
+ */ function isObject(value) {
+    return value !== null && Object.prototype.toString.call(value) === '[object Object]';
+}
+/**
+ * Returns true if `value` is a finite number, else returns false
+ * @param value  - The value to test.
+ */ function isNumberFinite(value) {
+    return (typeof value === 'number' || value instanceof Number) && isFinite(+value);
+}
+/**
+ * Returns `value` if finite, else returns `defaultValue`.
+ * @param value - The value to return if defined.
+ * @param defaultValue - The value to return if `value` is not finite.
+ */ function finiteOrDefault(value, defaultValue) {
+    return isNumberFinite(value) ? value : defaultValue;
+}
+/**
+ * Returns `value` if defined, else returns `defaultValue`.
+ * @param value - The value to return if defined.
+ * @param defaultValue - The value to return if `value` is undefined.
+ */ function valueOrDefault(value, defaultValue) {
+    return typeof value === 'undefined' ? defaultValue : value;
+}
+const toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;
+const toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;
+/**
+ * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
+ * value returned by `fn`. If `fn` is not a function, this method returns undefined.
+ * @param fn - The function to call.
+ * @param args - The arguments with which `fn` should be called.
+ * @param [thisArg] - The value of `this` provided for the call to `fn`.
+ */ function callback(fn, args, thisArg) {
+    if (fn && typeof fn.call === 'function') {
+        return fn.apply(thisArg, args);
+    }
+}
+function each(loopable, fn, thisArg, reverse) {
+    let i, len, keys;
+    if (isArray(loopable)) {
+        len = loopable.length;
+        if (reverse) {
+            for(i = len - 1; i >= 0; i--){
+                fn.call(thisArg, loopable[i], i);
+            }
+        } else {
+            for(i = 0; i < len; i++){
+                fn.call(thisArg, loopable[i], i);
+            }
+        }
+    } else if (isObject(loopable)) {
+        keys = Object.keys(loopable);
+        len = keys.length;
+        for(i = 0; i < len; i++){
+            fn.call(thisArg, loopable[keys[i]], keys[i]);
+        }
+    }
+}
+/**
+ * Returns true if the `a0` and `a1` arrays have the same content, else returns false.
+ * @param a0 - The array to compare
+ * @param a1 - The array to compare
+ * @private
+ */ function _elementsEqual(a0, a1) {
+    let i, ilen, v0, v1;
+    if (!a0 || !a1 || a0.length !== a1.length) {
+        return false;
+    }
+    for(i = 0, ilen = a0.length; i < ilen; ++i){
+        v0 = a0[i];
+        v1 = a1[i];
+        if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {
+            return false;
+        }
+    }
+    return true;
+}
+/**
+ * Returns a deep copy of `source` without keeping references on objects and arrays.
+ * @param source - The value to clone.
+ */ function clone(source) {
+    if (isArray(source)) {
+        return source.map(clone);
+    }
+    if (isObject(source)) {
+        const target = Object.create(null);
+        const keys = Object.keys(source);
+        const klen = keys.length;
+        let k = 0;
+        for(; k < klen; ++k){
+            target[keys[k]] = clone(source[keys[k]]);
+        }
+        return target;
+    }
+    return source;
+}
+function isValidKey(key) {
+    return [
+        '__proto__',
+        'prototype',
+        'constructor'
+    ].indexOf(key) === -1;
+}
+/**
+ * The default merger when Chart.helpers.merge is called without merger option.
+ * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.
+ * @private
+ */ function _merger(key, target, source, options) {
+    if (!isValidKey(key)) {
+        return;
+    }
+    const tval = target[key];
+    const sval = source[key];
+    if (isObject(tval) && isObject(sval)) {
+        // eslint-disable-next-line @typescript-eslint/no-use-before-define
+        merge(tval, sval, options);
+    } else {
+        target[key] = clone(sval);
+    }
+}
+function merge(target, source, options) {
+    const sources = isArray(source) ? source : [
+        source
+    ];
+    const ilen = sources.length;
+    if (!isObject(target)) {
+        return target;
+    }
+    options = options || {};
+    const merger = options.merger || _merger;
+    let current;
+    for(let i = 0; i < ilen; ++i){
+        current = sources[i];
+        if (!isObject(current)) {
+            continue;
+        }
+        const keys = Object.keys(current);
+        for(let k = 0, klen = keys.length; k < klen; ++k){
+            merger(keys[k], target, current, options);
+        }
+    }
+    return target;
+}
+function mergeIf(target, source) {
+    // eslint-disable-next-line @typescript-eslint/no-use-before-define
+    return merge(target, source, {
+        merger: _mergerIf
+    });
+}
+/**
+ * Merges source[key] in target[key] only if target[key] is undefined.
+ * @private
+ */ function _mergerIf(key, target, source) {
+    if (!isValidKey(key)) {
+        return;
+    }
+    const tval = target[key];
+    const sval = source[key];
+    if (isObject(tval) && isObject(sval)) {
+        mergeIf(tval, sval);
+    } else if (!Object.prototype.hasOwnProperty.call(target, key)) {
+        target[key] = clone(sval);
+    }
+}
+/**
+ * @private
+ */ function _deprecated(scope, value, previous, current) {
+    if (value !== undefined) {
+        console.warn(scope + ': "' + previous + '" is deprecated. Please use "' + current + '" instead');
+    }
+}
+// resolveObjectKey resolver cache
+const keyResolvers = {
+    // Chart.helpers.core resolveObjectKey should resolve empty key to root object
+    '': (v)=>v,
+    // default resolvers
+    x: (o)=>o.x,
+    y: (o)=>o.y
+};
+/**
+ * @private
+ */ function _splitKey(key) {
+    const parts = key.split('.');
+    const keys = [];
+    let tmp = '';
+    for (const part of parts){
+        tmp += part;
+        if (tmp.endsWith('\\')) {
+            tmp = tmp.slice(0, -1) + '.';
+        } else {
+            keys.push(tmp);
+            tmp = '';
+        }
+    }
+    return keys;
+}
+function _getKeyResolver(key) {
+    const keys = _splitKey(key);
+    return (obj)=>{
+        for (const k of keys){
+            if (k === '') {
+                break;
+            }
+            obj = obj && obj[k];
+        }
+        return obj;
+    };
+}
+function resolveObjectKey(obj, key) {
+    const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));
+    return resolver(obj);
+}
+/**
+ * @private
+ */ function _capitalize(str) {
+    return str.charAt(0).toUpperCase() + str.slice(1);
+}
+const defined = (value)=>typeof value !== 'undefined';
+const isFunction = (value)=>typeof value === 'function';
+// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384
+const setsEqual = (a, b)=>{
+    if (a.size !== b.size) {
+        return false;
+    }
+    for (const item of a){
+        if (!b.has(item)) {
+            return false;
+        }
+    }
+    return true;
+};
+/**
+ * @param e - The event
+ * @private
+ */ function _isClickEvent(e) {
+    return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';
+}
+
+/**
+ * @alias Chart.helpers.math
+ * @namespace
+ */ const PI = Math.PI;
+const TAU = 2 * PI;
+const PITAU = TAU + PI;
+const INFINITY = Number.POSITIVE_INFINITY;
+const RAD_PER_DEG = PI / 180;
+const HALF_PI = PI / 2;
+const QUARTER_PI = PI / 4;
+const TWO_THIRDS_PI = PI * 2 / 3;
+const log10 = Math.log10;
+const sign = Math.sign;
+function almostEquals(x, y, epsilon) {
+    return Math.abs(x - y) < epsilon;
+}
+/**
+ * Implementation of the nice number algorithm used in determining where axis labels will go
+ */ function niceNum(range) {
+    const roundedRange = Math.round(range);
+    range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;
+    const niceRange = Math.pow(10, Math.floor(log10(range)));
+    const fraction = range / niceRange;
+    const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
+    return niceFraction * niceRange;
+}
+/**
+ * Returns an array of factors sorted from 1 to sqrt(value)
+ * @private
+ */ function _factorize(value) {
+    const result = [];
+    const sqrt = Math.sqrt(value);
+    let i;
+    for(i = 1; i < sqrt; i++){
+        if (value % i === 0) {
+            result.push(i);
+            result.push(value / i);
+        }
+    }
+    if (sqrt === (sqrt | 0)) {
+        result.push(sqrt);
+    }
+    result.sort((a, b)=>a - b).pop();
+    return result;
+}
+/**
+ * Verifies that attempting to coerce n to string or number won't throw a TypeError.
+ */ function isNonPrimitive(n) {
+    return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);
+}
+function isNumber(n) {
+    return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);
+}
+function almostWhole(x, epsilon) {
+    const rounded = Math.round(x);
+    return rounded - epsilon <= x && rounded + epsilon >= x;
+}
+/**
+ * @private
+ */ function _setMinAndMaxByKey(array, target, property) {
+    let i, ilen, value;
+    for(i = 0, ilen = array.length; i < ilen; i++){
+        value = array[i][property];
+        if (!isNaN(value)) {
+            target.min = Math.min(target.min, value);
+            target.max = Math.max(target.max, value);
+        }
+    }
+}
+function toRadians(degrees) {
+    return degrees * (PI / 180);
+}
+function toDegrees(radians) {
+    return radians * (180 / PI);
+}
+/**
+ * Returns the number of decimal places
+ * i.e. the number of digits after the decimal point, of the value of this Number.
+ * @param x - A number.
+ * @returns The number of decimal places.
+ * @private
+ */ function _decimalPlaces(x) {
+    if (!isNumberFinite(x)) {
+        return;
+    }
+    let e = 1;
+    let p = 0;
+    while(Math.round(x * e) / e !== x){
+        e *= 10;
+        p++;
+    }
+    return p;
+}
+// Gets the angle from vertical upright to the point about a centre.
+function getAngleFromPoint(centrePoint, anglePoint) {
+    const distanceFromXCenter = anglePoint.x - centrePoint.x;
+    const distanceFromYCenter = anglePoint.y - centrePoint.y;
+    const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
+    let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
+    if (angle < -0.5 * PI) {
+        angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]
+    }
+    return {
+        angle,
+        distance: radialDistanceFromCenter
+    };
+}
+function distanceBetweenPoints(pt1, pt2) {
+    return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
+}
+/**
+ * Shortest distance between angles, in either direction.
+ * @private
+ */ function _angleDiff(a, b) {
+    return (a - b + PITAU) % TAU - PI;
+}
+/**
+ * Normalize angle to be between 0 and 2*PI
+ * @private
+ */ function _normalizeAngle(a) {
+    return (a % TAU + TAU) % TAU;
+}
+/**
+ * @private
+ */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {
+    const a = _normalizeAngle(angle);
+    const s = _normalizeAngle(start);
+    const e = _normalizeAngle(end);
+    const angleToStart = _normalizeAngle(s - a);
+    const angleToEnd = _normalizeAngle(e - a);
+    const startToAngle = _normalizeAngle(a - s);
+    const endToAngle = _normalizeAngle(a - e);
+    return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;
+}
+/**
+ * Limit `value` between `min` and `max`
+ * @param value
+ * @param min
+ * @param max
+ * @private
+ */ function _limitValue(value, min, max) {
+    return Math.max(min, Math.min(max, value));
+}
+/**
+ * @param {number} value
+ * @private
+ */ function _int16Range(value) {
+    return _limitValue(value, -32768, 32767);
+}
+/**
+ * @param value
+ * @param start
+ * @param end
+ * @param [epsilon]
+ * @private
+ */ function _isBetween(value, start, end, epsilon = 1e-6) {
+    return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;
+}
+
+function _lookup(table, value, cmp) {
+    cmp = cmp || ((index)=>table[index] < value);
+    let hi = table.length - 1;
+    let lo = 0;
+    let mid;
+    while(hi - lo > 1){
+        mid = lo + hi >> 1;
+        if (cmp(mid)) {
+            lo = mid;
+        } else {
+            hi = mid;
+        }
+    }
+    return {
+        lo,
+        hi
+    };
+}
+/**
+ * Binary search
+ * @param table - the table search. must be sorted!
+ * @param key - property name for the value in each entry
+ * @param value - value to find
+ * @param last - lookup last index
+ * @private
+ */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{
+        const ti = table[index][key];
+        return ti < value || ti === value && table[index + 1][key] === value;
+    } : (index)=>table[index][key] < value);
+/**
+ * Reverse binary search
+ * @param table - the table search. must be sorted!
+ * @param key - property name for the value in each entry
+ * @param value - value to find
+ * @private
+ */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);
+/**
+ * Return subset of `values` between `min` and `max` inclusive.
+ * Values are assumed to be in sorted order.
+ * @param values - sorted array of values
+ * @param min - min value
+ * @param max - max value
+ */ function _filterBetween(values, min, max) {
+    let start = 0;
+    let end = values.length;
+    while(start < end && values[start] < min){
+        start++;
+    }
+    while(end > start && values[end - 1] > max){
+        end--;
+    }
+    return start > 0 || end < values.length ? values.slice(start, end) : values;
+}
+const arrayEvents = [
+    'push',
+    'pop',
+    'shift',
+    'splice',
+    'unshift'
+];
+function listenArrayEvents(array, listener) {
+    if (array._chartjs) {
+        array._chartjs.listeners.push(listener);
+        return;
+    }
+    Object.defineProperty(array, '_chartjs', {
+        configurable: true,
+        enumerable: false,
+        value: {
+            listeners: [
+                listener
+            ]
+        }
+    });
+    arrayEvents.forEach((key)=>{
+        const method = '_onData' + _capitalize(key);
+        const base = array[key];
+        Object.defineProperty(array, key, {
+            configurable: true,
+            enumerable: false,
+            value (...args) {
+                const res = base.apply(this, args);
+                array._chartjs.listeners.forEach((object)=>{
+                    if (typeof object[method] === 'function') {
+                        object[method](...args);
+                    }
+                });
+                return res;
+            }
+        });
+    });
+}
+function unlistenArrayEvents(array, listener) {
+    const stub = array._chartjs;
+    if (!stub) {
+        return;
+    }
+    const listeners = stub.listeners;
+    const index = listeners.indexOf(listener);
+    if (index !== -1) {
+        listeners.splice(index, 1);
+    }
+    if (listeners.length > 0) {
+        return;
+    }
+    arrayEvents.forEach((key)=>{
+        delete array[key];
+    });
+    delete array._chartjs;
+}
+/**
+ * @param items
+ */ function _arrayUnique(items) {
+    const set = new Set(items);
+    if (set.size === items.length) {
+        return items;
+    }
+    return Array.from(set);
+}
+
+function fontString(pixelSize, fontStyle, fontFamily) {
+    return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;
+}
+/**
+* Request animation polyfill
+*/ const requestAnimFrame = function() {
+    if (typeof window === 'undefined') {
+        return function(callback) {
+            return callback();
+        };
+    }
+    return window.requestAnimationFrame;
+}();
+/**
+ * Throttles calling `fn` once per animation frame
+ * Latest arguments are used on the actual call
+ */ function throttled(fn, thisArg) {
+    let argsToUse = [];
+    let ticking = false;
+    return function(...args) {
+        // Save the args for use later
+        argsToUse = args;
+        if (!ticking) {
+            ticking = true;
+            requestAnimFrame.call(window, ()=>{
+                ticking = false;
+                fn.apply(thisArg, argsToUse);
+            });
+        }
+    };
+}
+/**
+ * Debounces calling `fn` for `delay` ms
+ */ function debounce(fn, delay) {
+    let timeout;
+    return function(...args) {
+        if (delay) {
+            clearTimeout(timeout);
+            timeout = setTimeout(fn, delay, args);
+        } else {
+            fn.apply(this, args);
+        }
+        return delay;
+    };
+}
+/**
+ * Converts 'start' to 'left', 'end' to 'right' and others to 'center'
+ * @private
+ */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';
+/**
+ * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`
+ * @private
+ */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;
+/**
+ * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`
+ * @private
+ */ const _textX = (align, left, right, rtl)=>{
+    const check = rtl ? 'left' : 'right';
+    return align === check ? right : align === 'center' ? (left + right) / 2 : left;
+};
+/**
+ * Return start and count of visible points.
+ * @private
+ */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {
+    const pointCount = points.length;
+    let start = 0;
+    let count = pointCount;
+    if (meta._sorted) {
+        const { iScale , vScale , _parsed  } = meta;
+        const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;
+        const axis = iScale.axis;
+        const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();
+        if (minDefined) {
+            start = Math.min(// @ts-expect-error Need to type _parsed
+            _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey
+            animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);
+            if (spanGaps) {
+                const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
+                start -= Math.max(0, distanceToDefinedLo);
+            }
+            start = _limitValue(start, 0, pointCount - 1);
+        }
+        if (maxDefined) {
+            let end = Math.max(// @ts-expect-error Need to type _parsed
+            _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey
+            animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);
+            if (spanGaps) {
+                const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
+                end += Math.max(0, distanceToDefinedHi);
+            }
+            count = _limitValue(end, start, pointCount) - start;
+        } else {
+            count = pointCount - start;
+        }
+    }
+    return {
+        start,
+        count
+    };
+}
+/**
+ * Checks if the scale ranges have changed.
+ * @param {object} meta - dataset meta.
+ * @returns {boolean}
+ * @private
+ */ function _scaleRangesChanged(meta) {
+    const { xScale , yScale , _scaleRanges  } = meta;
+    const newRanges = {
+        xmin: xScale.min,
+        xmax: xScale.max,
+        ymin: yScale.min,
+        ymax: yScale.max
+    };
+    if (!_scaleRanges) {
+        meta._scaleRanges = newRanges;
+        return true;
+    }
+    const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;
+    Object.assign(_scaleRanges, newRanges);
+    return changed;
+}
+
+const atEdge = (t)=>t === 0 || t === 1;
+const elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));
+const elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;
+/**
+ * Easing functions adapted from Robert Penner's easing equations.
+ * @namespace Chart.helpers.easing.effects
+ * @see http://www.robertpenner.com/easing/
+ */ const effects = {
+    linear: (t)=>t,
+    easeInQuad: (t)=>t * t,
+    easeOutQuad: (t)=>-t * (t - 2),
+    easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),
+    easeInCubic: (t)=>t * t * t,
+    easeOutCubic: (t)=>(t -= 1) * t * t + 1,
+    easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),
+    easeInQuart: (t)=>t * t * t * t,
+    easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),
+    easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),
+    easeInQuint: (t)=>t * t * t * t * t,
+    easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,
+    easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),
+    easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,
+    easeOutSine: (t)=>Math.sin(t * HALF_PI),
+    easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),
+    easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),
+    easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,
+    easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),
+    easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),
+    easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),
+    easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),
+    easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),
+    easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),
+    easeInOutElastic (t) {
+        const s = 0.1125;
+        const p = 0.45;
+        return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);
+    },
+    easeInBack (t) {
+        const s = 1.70158;
+        return t * t * ((s + 1) * t - s);
+    },
+    easeOutBack (t) {
+        const s = 1.70158;
+        return (t -= 1) * t * ((s + 1) * t + s) + 1;
+    },
+    easeInOutBack (t) {
+        let s = 1.70158;
+        if ((t /= 0.5) < 1) {
+            return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));
+        }
+        return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);
+    },
+    easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),
+    easeOutBounce (t) {
+        const m = 7.5625;
+        const d = 2.75;
+        if (t < 1 / d) {
+            return m * t * t;
+        }
+        if (t < 2 / d) {
+            return m * (t -= 1.5 / d) * t + 0.75;
+        }
+        if (t < 2.5 / d) {
+            return m * (t -= 2.25 / d) * t + 0.9375;
+        }
+        return m * (t -= 2.625 / d) * t + 0.984375;
+    },
+    easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5
+};
+
+function isPatternOrGradient(value) {
+    if (value && typeof value === 'object') {
+        const type = value.toString();
+        return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';
+    }
+    return false;
+}
+function color(value) {
+    return isPatternOrGradient(value) ? value : new color$1.Color(value);
+}
+function getHoverColor(value) {
+    return isPatternOrGradient(value) ? value : new color$1.Color(value).saturate(0.5).darken(0.1).hexString();
+}
+
+const numbers = [
+    'x',
+    'y',
+    'borderWidth',
+    'radius',
+    'tension'
+];
+const colors = [
+    'color',
+    'borderColor',
+    'backgroundColor'
+];
+function applyAnimationsDefaults(defaults) {
+    defaults.set('animation', {
+        delay: undefined,
+        duration: 1000,
+        easing: 'easeOutQuart',
+        fn: undefined,
+        from: undefined,
+        loop: undefined,
+        to: undefined,
+        type: undefined
+    });
+    defaults.describe('animation', {
+        _fallback: false,
+        _indexable: false,
+        _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'
+    });
+    defaults.set('animations', {
+        colors: {
+            type: 'color',
+            properties: colors
+        },
+        numbers: {
+            type: 'number',
+            properties: numbers
+        }
+    });
+    defaults.describe('animations', {
+        _fallback: 'animation'
+    });
+    defaults.set('transitions', {
+        active: {
+            animation: {
+                duration: 400
+            }
+        },
+        resize: {
+            animation: {
+                duration: 0
+            }
+        },
+        show: {
+            animations: {
+                colors: {
+                    from: 'transparent'
+                },
+                visible: {
+                    type: 'boolean',
+                    duration: 0
+                }
+            }
+        },
+        hide: {
+            animations: {
+                colors: {
+                    to: 'transparent'
+                },
+                visible: {
+                    type: 'boolean',
+                    easing: 'linear',
+                    fn: (v)=>v | 0
+                }
+            }
+        }
+    });
+}
+
+function applyLayoutsDefaults(defaults) {
+    defaults.set('layout', {
+        autoPadding: true,
+        padding: {
+            top: 0,
+            right: 0,
+            bottom: 0,
+            left: 0
+        }
+    });
+}
+
+const intlCache = new Map();
+function getNumberFormat(locale, options) {
+    options = options || {};
+    const cacheKey = locale + JSON.stringify(options);
+    let formatter = intlCache.get(cacheKey);
+    if (!formatter) {
+        formatter = new Intl.NumberFormat(locale, options);
+        intlCache.set(cacheKey, formatter);
+    }
+    return formatter;
+}
+function formatNumber(num, locale, options) {
+    return getNumberFormat(locale, options).format(num);
+}
+
+const formatters = {
+ values (value) {
+        return isArray(value) ?  value : '' + value;
+    },
+ numeric (tickValue, index, ticks) {
+        if (tickValue === 0) {
+            return '0';
+        }
+        const locale = this.chart.options.locale;
+        let notation;
+        let delta = tickValue;
+        if (ticks.length > 1) {
+            const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));
+            if (maxTick < 1e-4 || maxTick > 1e+15) {
+                notation = 'scientific';
+            }
+            delta = calculateDelta(tickValue, ticks);
+        }
+        const logDelta = log10(Math.abs(delta));
+        const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
+        const options = {
+            notation,
+            minimumFractionDigits: numDecimal,
+            maximumFractionDigits: numDecimal
+        };
+        Object.assign(options, this.options.ticks.format);
+        return formatNumber(tickValue, locale, options);
+    },
+ logarithmic (tickValue, index, ticks) {
+        if (tickValue === 0) {
+            return '0';
+        }
+        const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));
+        if ([
+            1,
+            2,
+            3,
+            5,
+            10,
+            15
+        ].includes(remain) || index > 0.8 * ticks.length) {
+            return formatters.numeric.call(this, tickValue, index, ticks);
+        }
+        return '';
+    }
+};
+function calculateDelta(tickValue, ticks) {
+    let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;
+    if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {
+        delta = tickValue - Math.floor(tickValue);
+    }
+    return delta;
+}
+ var Ticks = {
+    formatters
+};
+
+function applyScaleDefaults(defaults) {
+    defaults.set('scale', {
+        display: true,
+        offset: false,
+        reverse: false,
+        beginAtZero: false,
+ bounds: 'ticks',
+        clip: true,
+ grace: 0,
+        grid: {
+            display: true,
+            lineWidth: 1,
+            drawOnChartArea: true,
+            drawTicks: true,
+            tickLength: 8,
+            tickWidth: (_ctx, options)=>options.lineWidth,
+            tickColor: (_ctx, options)=>options.color,
+            offset: false
+        },
+        border: {
+            display: true,
+            dash: [],
+            dashOffset: 0.0,
+            width: 1
+        },
+        title: {
+            display: false,
+            text: '',
+            padding: {
+                top: 4,
+                bottom: 4
+            }
+        },
+        ticks: {
+            minRotation: 0,
+            maxRotation: 50,
+            mirror: false,
+            textStrokeWidth: 0,
+            textStrokeColor: '',
+            padding: 3,
+            display: true,
+            autoSkip: true,
+            autoSkipPadding: 3,
+            labelOffset: 0,
+            callback: Ticks.formatters.values,
+            minor: {},
+            major: {},
+            align: 'center',
+            crossAlign: 'near',
+            showLabelBackdrop: false,
+            backdropColor: 'rgba(255, 255, 255, 0.75)',
+            backdropPadding: 2
+        }
+    });
+    defaults.route('scale.ticks', 'color', '', 'color');
+    defaults.route('scale.grid', 'color', '', 'borderColor');
+    defaults.route('scale.border', 'color', '', 'borderColor');
+    defaults.route('scale.title', 'color', '', 'color');
+    defaults.describe('scale', {
+        _fallback: false,
+        _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',
+        _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'
+    });
+    defaults.describe('scales', {
+        _fallback: 'scale'
+    });
+    defaults.describe('scale.ticks', {
+        _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',
+        _indexable: (name)=>name !== 'backdropPadding'
+    });
+}
+
+const overrides = Object.create(null);
+const descriptors = Object.create(null);
+ function getScope$1(node, key) {
+    if (!key) {
+        return node;
+    }
+    const keys = key.split('.');
+    for(let i = 0, n = keys.length; i < n; ++i){
+        const k = keys[i];
+        node = node[k] || (node[k] = Object.create(null));
+    }
+    return node;
+}
+function set(root, scope, values) {
+    if (typeof scope === 'string') {
+        return merge(getScope$1(root, scope), values);
+    }
+    return merge(getScope$1(root, ''), scope);
+}
+ class Defaults {
+    constructor(_descriptors, _appliers){
+        this.animation = undefined;
+        this.backgroundColor = 'rgba(0,0,0,0.1)';
+        this.borderColor = 'rgba(0,0,0,0.1)';
+        this.color = '#666';
+        this.datasets = {};
+        this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();
+        this.elements = {};
+        this.events = [
+            'mousemove',
+            'mouseout',
+            'click',
+            'touchstart',
+            'touchmove'
+        ];
+        this.font = {
+            family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
+            size: 12,
+            style: 'normal',
+            lineHeight: 1.2,
+            weight: null
+        };
+        this.hover = {};
+        this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);
+        this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);
+        this.hoverColor = (ctx, options)=>getHoverColor(options.color);
+        this.indexAxis = 'x';
+        this.interaction = {
+            mode: 'nearest',
+            intersect: true,
+            includeInvisible: false
+        };
+        this.maintainAspectRatio = true;
+        this.onHover = null;
+        this.onClick = null;
+        this.parsing = true;
+        this.plugins = {};
+        this.responsive = true;
+        this.scale = undefined;
+        this.scales = {};
+        this.showLine = true;
+        this.drawActiveElementsOnTop = true;
+        this.describe(_descriptors);
+        this.apply(_appliers);
+    }
+ set(scope, values) {
+        return set(this, scope, values);
+    }
+ get(scope) {
+        return getScope$1(this, scope);
+    }
+ describe(scope, values) {
+        return set(descriptors, scope, values);
+    }
+    override(scope, values) {
+        return set(overrides, scope, values);
+    }
+ route(scope, name, targetScope, targetName) {
+        const scopeObject = getScope$1(this, scope);
+        const targetScopeObject = getScope$1(this, targetScope);
+        const privateName = '_' + name;
+        Object.defineProperties(scopeObject, {
+            [privateName]: {
+                value: scopeObject[name],
+                writable: true
+            },
+            [name]: {
+                enumerable: true,
+                get () {
+                    const local = this[privateName];
+                    const target = targetScopeObject[targetName];
+                    if (isObject(local)) {
+                        return Object.assign({}, target, local);
+                    }
+                    return valueOrDefault(local, target);
+                },
+                set (value) {
+                    this[privateName] = value;
+                }
+            }
+        });
+    }
+    apply(appliers) {
+        appliers.forEach((apply)=>apply(this));
+    }
+}
+var defaults = /* #__PURE__ */ new Defaults({
+    _scriptable: (name)=>!name.startsWith('on'),
+    _indexable: (name)=>name !== 'events',
+    hover: {
+        _fallback: 'interaction'
+    },
+    interaction: {
+        _scriptable: false,
+        _indexable: false
+    }
+}, [
+    applyAnimationsDefaults,
+    applyLayoutsDefaults,
+    applyScaleDefaults
+]);
+
+/**
+ * Converts the given font object into a CSS font string.
+ * @param font - A font object.
+ * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font
+ * @private
+ */ function toFontString(font) {
+    if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {
+        return null;
+    }
+    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;
+}
+/**
+ * @private
+ */ function _measureText(ctx, data, gc, longest, string) {
+    let textWidth = data[string];
+    if (!textWidth) {
+        textWidth = data[string] = ctx.measureText(string).width;
+        gc.push(string);
+    }
+    if (textWidth > longest) {
+        longest = textWidth;
+    }
+    return longest;
+}
+/**
+ * @private
+ */ // eslint-disable-next-line complexity
+function _longestText(ctx, font, arrayOfThings, cache) {
+    cache = cache || {};
+    let data = cache.data = cache.data || {};
+    let gc = cache.garbageCollect = cache.garbageCollect || [];
+    if (cache.font !== font) {
+        data = cache.data = {};
+        gc = cache.garbageCollect = [];
+        cache.font = font;
+    }
+    ctx.save();
+    ctx.font = font;
+    let longest = 0;
+    const ilen = arrayOfThings.length;
+    let i, j, jlen, thing, nestedThing;
+    for(i = 0; i < ilen; i++){
+        thing = arrayOfThings[i];
+        // Undefined strings and arrays should not be measured
+        if (thing !== undefined && thing !== null && !isArray(thing)) {
+            longest = _measureText(ctx, data, gc, longest, thing);
+        } else if (isArray(thing)) {
+            // if it is an array lets measure each element
+            // to do maybe simplify this function a bit so we can do this more recursively?
+            for(j = 0, jlen = thing.length; j < jlen; j++){
+                nestedThing = thing[j];
+                // Undefined strings and arrays should not be measured
+                if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {
+                    longest = _measureText(ctx, data, gc, longest, nestedThing);
+                }
+            }
+        }
+    }
+    ctx.restore();
+    const gcLen = gc.length / 2;
+    if (gcLen > arrayOfThings.length) {
+        for(i = 0; i < gcLen; i++){
+            delete data[gc[i]];
+        }
+        gc.splice(0, gcLen);
+    }
+    return longest;
+}
+/**
+ * Returns the aligned pixel value to avoid anti-aliasing blur
+ * @param chart - The chart instance.
+ * @param pixel - A pixel value.
+ * @param width - The width of the element.
+ * @returns The aligned pixel value.
+ * @private
+ */ function _alignPixel(chart, pixel, width) {
+    const devicePixelRatio = chart.currentDevicePixelRatio;
+    const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;
+    return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
+}
+/**
+ * Clears the entire canvas.
+ */ function clearCanvas(canvas, ctx) {
+    if (!ctx && !canvas) {
+        return;
+    }
+    ctx = ctx || canvas.getContext('2d');
+    ctx.save();
+    // canvas.width and canvas.height do not consider the canvas transform,
+    // while clearRect does
+    ctx.resetTransform();
+    ctx.clearRect(0, 0, canvas.width, canvas.height);
+    ctx.restore();
+}
+function drawPoint(ctx, options, x, y) {
+    // eslint-disable-next-line @typescript-eslint/no-use-before-define
+    drawPointLegend(ctx, options, x, y, null);
+}
+// eslint-disable-next-line complexity
+function drawPointLegend(ctx, options, x, y, w) {
+    let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;
+    const style = options.pointStyle;
+    const rotation = options.rotation;
+    const radius = options.radius;
+    let rad = (rotation || 0) * RAD_PER_DEG;
+    if (style && typeof style === 'object') {
+        type = style.toString();
+        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {
+            ctx.save();
+            ctx.translate(x, y);
+            ctx.rotate(rad);
+            ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);
+            ctx.restore();
+            return;
+        }
+    }
+    if (isNaN(radius) || radius <= 0) {
+        return;
+    }
+    ctx.beginPath();
+    switch(style){
+        // Default includes circle
+        default:
+            if (w) {
+                ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);
+            } else {
+                ctx.arc(x, y, radius, 0, TAU);
+            }
+            ctx.closePath();
+            break;
+        case 'triangle':
+            width = w ? w / 2 : radius;
+            ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
+            rad += TWO_THIRDS_PI;
+            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
+            rad += TWO_THIRDS_PI;
+            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
+            ctx.closePath();
+            break;
+        case 'rectRounded':
+            // NOTE: the rounded rect implementation changed to use `arc` instead of
+            // `quadraticCurveTo` since it generates better results when rect is
+            // almost a circle. 0.516 (instead of 0.5) produces results with visually
+            // closer proportion to the previous impl and it is inscribed in the
+            // circle with `radius`. For more details, see the following PRs:
+            // https://github.com/chartjs/Chart.js/issues/5597
+            // https://github.com/chartjs/Chart.js/issues/5858
+            cornerRadius = radius * 0.516;
+            size = radius - cornerRadius;
+            xOffset = Math.cos(rad + QUARTER_PI) * size;
+            xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
+            yOffset = Math.sin(rad + QUARTER_PI) * size;
+            yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
+            ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
+            ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);
+            ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);
+            ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
+            ctx.closePath();
+            break;
+        case 'rect':
+            if (!rotation) {
+                size = Math.SQRT1_2 * radius;
+                width = w ? w / 2 : size;
+                ctx.rect(x - width, y - size, 2 * width, 2 * size);
+                break;
+            }
+            rad += QUARTER_PI;
+        /* falls through */ case 'rectRot':
+            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
+            xOffset = Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+            ctx.moveTo(x - xOffsetW, y - yOffset);
+            ctx.lineTo(x + yOffsetW, y - xOffset);
+            ctx.lineTo(x + xOffsetW, y + yOffset);
+            ctx.lineTo(x - yOffsetW, y + xOffset);
+            ctx.closePath();
+            break;
+        case 'crossRot':
+            rad += QUARTER_PI;
+        /* falls through */ case 'cross':
+            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
+            xOffset = Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+            ctx.moveTo(x - xOffsetW, y - yOffset);
+            ctx.lineTo(x + xOffsetW, y + yOffset);
+            ctx.moveTo(x + yOffsetW, y - xOffset);
+            ctx.lineTo(x - yOffsetW, y + xOffset);
+            break;
+        case 'star':
+            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
+            xOffset = Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+            ctx.moveTo(x - xOffsetW, y - yOffset);
+            ctx.lineTo(x + xOffsetW, y + yOffset);
+            ctx.moveTo(x + yOffsetW, y - xOffset);
+            ctx.lineTo(x - yOffsetW, y + xOffset);
+            rad += QUARTER_PI;
+            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
+            xOffset = Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+            ctx.moveTo(x - xOffsetW, y - yOffset);
+            ctx.lineTo(x + xOffsetW, y + yOffset);
+            ctx.moveTo(x + yOffsetW, y - xOffset);
+            ctx.lineTo(x - yOffsetW, y + xOffset);
+            break;
+        case 'line':
+            xOffset = w ? w / 2 : Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            ctx.moveTo(x - xOffset, y - yOffset);
+            ctx.lineTo(x + xOffset, y + yOffset);
+            break;
+        case 'dash':
+            ctx.moveTo(x, y);
+            ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);
+            break;
+        case false:
+            ctx.closePath();
+            break;
+    }
+    ctx.fill();
+    if (options.borderWidth > 0) {
+        ctx.stroke();
+    }
+}
+/**
+ * Returns true if the point is inside the rectangle
+ * @param point - The point to test
+ * @param area - The rectangle
+ * @param margin - allowed margin
+ * @private
+ */ function _isPointInArea(point, area, margin) {
+    margin = margin || 0.5; // margin - default is to match rounded decimals
+    return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;
+}
+function clipArea(ctx, area) {
+    ctx.save();
+    ctx.beginPath();
+    ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
+    ctx.clip();
+}
+function unclipArea(ctx) {
+    ctx.restore();
+}
+/**
+ * @private
+ */ function _steppedLineTo(ctx, previous, target, flip, mode) {
+    if (!previous) {
+        return ctx.lineTo(target.x, target.y);
+    }
+    if (mode === 'middle') {
+        const midpoint = (previous.x + target.x) / 2.0;
+        ctx.lineTo(midpoint, previous.y);
+        ctx.lineTo(midpoint, target.y);
+    } else if (mode === 'after' !== !!flip) {
+        ctx.lineTo(previous.x, target.y);
+    } else {
+        ctx.lineTo(target.x, previous.y);
+    }
+    ctx.lineTo(target.x, target.y);
+}
+/**
+ * @private
+ */ function _bezierCurveTo(ctx, previous, target, flip) {
+    if (!previous) {
+        return ctx.lineTo(target.x, target.y);
+    }
+    ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);
+}
+function setRenderOpts(ctx, opts) {
+    if (opts.translation) {
+        ctx.translate(opts.translation[0], opts.translation[1]);
+    }
+    if (!isNullOrUndef(opts.rotation)) {
+        ctx.rotate(opts.rotation);
+    }
+    if (opts.color) {
+        ctx.fillStyle = opts.color;
+    }
+    if (opts.textAlign) {
+        ctx.textAlign = opts.textAlign;
+    }
+    if (opts.textBaseline) {
+        ctx.textBaseline = opts.textBaseline;
+    }
+}
+function decorateText(ctx, x, y, line, opts) {
+    if (opts.strikethrough || opts.underline) {
+        /**
+     * Now that IE11 support has been dropped, we can use more
+     * of the TextMetrics object. The actual bounding boxes
+     * are unflagged in Chrome, Firefox, Edge, and Safari so they
+     * can be safely used.
+     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility
+     */ const metrics = ctx.measureText(line);
+        const left = x - metrics.actualBoundingBoxLeft;
+        const right = x + metrics.actualBoundingBoxRight;
+        const top = y - metrics.actualBoundingBoxAscent;
+        const bottom = y + metrics.actualBoundingBoxDescent;
+        const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;
+        ctx.strokeStyle = ctx.fillStyle;
+        ctx.beginPath();
+        ctx.lineWidth = opts.decorationWidth || 2;
+        ctx.moveTo(left, yDecoration);
+        ctx.lineTo(right, yDecoration);
+        ctx.stroke();
+    }
+}
+function drawBackdrop(ctx, opts) {
+    const oldColor = ctx.fillStyle;
+    ctx.fillStyle = opts.color;
+    ctx.fillRect(opts.left, opts.top, opts.width, opts.height);
+    ctx.fillStyle = oldColor;
+}
+/**
+ * Render text onto the canvas
+ */ function renderText(ctx, text, x, y, font, opts = {}) {
+    const lines = isArray(text) ? text : [
+        text
+    ];
+    const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';
+    let i, line;
+    ctx.save();
+    ctx.font = font.string;
+    setRenderOpts(ctx, opts);
+    for(i = 0; i < lines.length; ++i){
+        line = lines[i];
+        if (opts.backdrop) {
+            drawBackdrop(ctx, opts.backdrop);
+        }
+        if (stroke) {
+            if (opts.strokeColor) {
+                ctx.strokeStyle = opts.strokeColor;
+            }
+            if (!isNullOrUndef(opts.strokeWidth)) {
+                ctx.lineWidth = opts.strokeWidth;
+            }
+            ctx.strokeText(line, x, y, opts.maxWidth);
+        }
+        ctx.fillText(line, x, y, opts.maxWidth);
+        decorateText(ctx, x, y, line, opts);
+        y += Number(font.lineHeight);
+    }
+    ctx.restore();
+}
+/**
+ * Add a path of a rectangle with rounded corners to the current sub-path
+ * @param ctx - Context
+ * @param rect - Bounding rect
+ */ function addRoundedRectPath(ctx, rect) {
+    const { x , y , w , h , radius  } = rect;
+    // top left arc
+    ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);
+    // line from top left to bottom left
+    ctx.lineTo(x, y + h - radius.bottomLeft);
+    // bottom left arc
+    ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
+    // line from bottom left to bottom right
+    ctx.lineTo(x + w - radius.bottomRight, y + h);
+    // bottom right arc
+    ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
+    // line from bottom right to top right
+    ctx.lineTo(x + w, y + radius.topRight);
+    // top right arc
+    ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
+    // line from top right to top left
+    ctx.lineTo(x + radius.topLeft, y);
+}
+
+const LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/;
+const FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;
+/**
+ * @alias Chart.helpers.options
+ * @namespace
+ */ /**
+ * Converts the given line height `value` in pixels for a specific font `size`.
+ * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').
+ * @param size - The font size (in pixels) used to resolve relative `value`.
+ * @returns The effective line height in pixels (size * 1.2 if value is invalid).
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height
+ * @since 2.7.0
+ */ function toLineHeight(value, size) {
+    const matches = ('' + value).match(LINE_HEIGHT);
+    if (!matches || matches[1] === 'normal') {
+        return size * 1.2;
+    }
+    value = +matches[2];
+    switch(matches[3]){
+        case 'px':
+            return value;
+        case '%':
+            value /= 100;
+            break;
+    }
+    return size * value;
+}
+const numberOrZero = (v)=>+v || 0;
+function _readValueToProps(value, props) {
+    const ret = {};
+    const objProps = isObject(props);
+    const keys = objProps ? Object.keys(props) : props;
+    const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;
+    for (const prop of keys){
+        ret[prop] = numberOrZero(read(prop));
+    }
+    return ret;
+}
+/**
+ * Converts the given value into a TRBL object.
+ * @param value - If a number, set the value to all TRBL component,
+ *  else, if an object, use defined properties and sets undefined ones to 0.
+ *  x / y are shorthands for same value for left/right and top/bottom.
+ * @returns The padding values (top, right, bottom, left)
+ * @since 3.0.0
+ */ function toTRBL(value) {
+    return _readValueToProps(value, {
+        top: 'y',
+        right: 'x',
+        bottom: 'y',
+        left: 'x'
+    });
+}
+/**
+ * Converts the given value into a TRBL corners object (similar with css border-radius).
+ * @param value - If a number, set the value to all TRBL corner components,
+ *  else, if an object, use defined properties and sets undefined ones to 0.
+ * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)
+ * @since 3.0.0
+ */ function toTRBLCorners(value) {
+    return _readValueToProps(value, [
+        'topLeft',
+        'topRight',
+        'bottomLeft',
+        'bottomRight'
+    ]);
+}
+/**
+ * Converts the given value into a padding object with pre-computed width/height.
+ * @param value - If a number, set the value to all TRBL component,
+ *  else, if an object, use defined properties and sets undefined ones to 0.
+ *  x / y are shorthands for same value for left/right and top/bottom.
+ * @returns The padding values (top, right, bottom, left, width, height)
+ * @since 2.7.0
+ */ function toPadding(value) {
+    const obj = toTRBL(value);
+    obj.width = obj.left + obj.right;
+    obj.height = obj.top + obj.bottom;
+    return obj;
+}
+/**
+ * Parses font options and returns the font object.
+ * @param options - A object that contains font options to be parsed.
+ * @param fallback - A object that contains fallback font options.
+ * @return The font object.
+ * @private
+ */ function toFont(options, fallback) {
+    options = options || {};
+    fallback = fallback || defaults.font;
+    let size = valueOrDefault(options.size, fallback.size);
+    if (typeof size === 'string') {
+        size = parseInt(size, 10);
+    }
+    let style = valueOrDefault(options.style, fallback.style);
+    if (style && !('' + style).match(FONT_STYLE)) {
+        console.warn('Invalid font style specified: "' + style + '"');
+        style = undefined;
+    }
+    const font = {
+        family: valueOrDefault(options.family, fallback.family),
+        lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),
+        size,
+        style,
+        weight: valueOrDefault(options.weight, fallback.weight),
+        string: ''
+    };
+    font.string = toFontString(font);
+    return font;
+}
+/**
+ * Evaluates the given `inputs` sequentially and returns the first defined value.
+ * @param inputs - An array of values, falling back to the last value.
+ * @param context - If defined and the current value is a function, the value
+ * is called with `context` as first argument and the result becomes the new input.
+ * @param index - If defined and the current value is an array, the value
+ * at `index` become the new input.
+ * @param info - object to return information about resolution in
+ * @param info.cacheable - Will be set to `false` if option is not cacheable.
+ * @since 2.7.0
+ */ function resolve(inputs, context, index, info) {
+    let cacheable = true;
+    let i, ilen, value;
+    for(i = 0, ilen = inputs.length; i < ilen; ++i){
+        value = inputs[i];
+        if (value === undefined) {
+            continue;
+        }
+        if (context !== undefined && typeof value === 'function') {
+            value = value(context);
+            cacheable = false;
+        }
+        if (index !== undefined && isArray(value)) {
+            value = value[index % value.length];
+            cacheable = false;
+        }
+        if (value !== undefined) {
+            if (info && !cacheable) {
+                info.cacheable = false;
+            }
+            return value;
+        }
+    }
+}
+/**
+ * @param minmax
+ * @param grace
+ * @param beginAtZero
+ * @private
+ */ function _addGrace(minmax, grace, beginAtZero) {
+    const { min , max  } = minmax;
+    const change = toDimension(grace, (max - min) / 2);
+    const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;
+    return {
+        min: keepZero(min, -Math.abs(change)),
+        max: keepZero(max, change)
+    };
+}
+function createContext(parentContext, context) {
+    return Object.assign(Object.create(parentContext), context);
+}
+
+/**
+ * Creates a Proxy for resolving raw values for options.
+ * @param scopes - The option scopes to look for values, in resolution order
+ * @param prefixes - The prefixes for values, in resolution order.
+ * @param rootScopes - The root option scopes
+ * @param fallback - Parent scopes fallback
+ * @param getTarget - callback for getting the target for changed values
+ * @returns Proxy
+ * @private
+ */ function _createResolver(scopes, prefixes = [
+    ''
+], rootScopes, fallback, getTarget = ()=>scopes[0]) {
+    const finalRootScopes = rootScopes || scopes;
+    if (typeof fallback === 'undefined') {
+        fallback = _resolve('_fallback', scopes);
+    }
+    const cache = {
+        [Symbol.toStringTag]: 'Object',
+        _cacheable: true,
+        _scopes: scopes,
+        _rootScopes: finalRootScopes,
+        _fallback: fallback,
+        _getTarget: getTarget,
+        override: (scope)=>_createResolver([
+                scope,
+                ...scopes
+            ], prefixes, finalRootScopes, fallback)
+    };
+    return new Proxy(cache, {
+        /**
+     * A trap for the delete operator.
+     */ deleteProperty (target, prop) {
+            delete target[prop]; // remove from cache
+            delete target._keys; // remove cached keys
+            delete scopes[0][prop]; // remove from top level scope
+            return true;
+        },
+        /**
+     * A trap for getting property values.
+     */ get (target, prop) {
+            return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));
+        },
+        /**
+     * A trap for Object.getOwnPropertyDescriptor.
+     * Also used by Object.hasOwnProperty.
+     */ getOwnPropertyDescriptor (target, prop) {
+            return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);
+        },
+        /**
+     * A trap for Object.getPrototypeOf.
+     */ getPrototypeOf () {
+            return Reflect.getPrototypeOf(scopes[0]);
+        },
+        /**
+     * A trap for the in operator.
+     */ has (target, prop) {
+            return getKeysFromAllScopes(target).includes(prop);
+        },
+        /**
+     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
+     */ ownKeys (target) {
+            return getKeysFromAllScopes(target);
+        },
+        /**
+     * A trap for setting property values.
+     */ set (target, prop, value) {
+            const storage = target._storage || (target._storage = getTarget());
+            target[prop] = storage[prop] = value; // set to top level scope + cache
+            delete target._keys; // remove cached keys
+            return true;
+        }
+    });
+}
+/**
+ * Returns an Proxy for resolving option values with context.
+ * @param proxy - The Proxy returned by `_createResolver`
+ * @param context - Context object for scriptable/indexable options
+ * @param subProxy - The proxy provided for scriptable options
+ * @param descriptorDefaults - Defaults for descriptors
+ * @private
+ */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {
+    const cache = {
+        _cacheable: false,
+        _proxy: proxy,
+        _context: context,
+        _subProxy: subProxy,
+        _stack: new Set(),
+        _descriptors: _descriptors(proxy, descriptorDefaults),
+        setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),
+        override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)
+    };
+    return new Proxy(cache, {
+        /**
+     * A trap for the delete operator.
+     */ deleteProperty (target, prop) {
+            delete target[prop]; // remove from cache
+            delete proxy[prop]; // remove from proxy
+            return true;
+        },
+        /**
+     * A trap for getting property values.
+     */ get (target, prop, receiver) {
+            return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));
+        },
+        /**
+     * A trap for Object.getOwnPropertyDescriptor.
+     * Also used by Object.hasOwnProperty.
+     */ getOwnPropertyDescriptor (target, prop) {
+            return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {
+                enumerable: true,
+                configurable: true
+            } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);
+        },
+        /**
+     * A trap for Object.getPrototypeOf.
+     */ getPrototypeOf () {
+            return Reflect.getPrototypeOf(proxy);
+        },
+        /**
+     * A trap for the in operator.
+     */ has (target, prop) {
+            return Reflect.has(proxy, prop);
+        },
+        /**
+     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
+     */ ownKeys () {
+            return Reflect.ownKeys(proxy);
+        },
+        /**
+     * A trap for setting property values.
+     */ set (target, prop, value) {
+            proxy[prop] = value; // set to proxy
+            delete target[prop]; // remove from cache
+            return true;
+        }
+    });
+}
+/**
+ * @private
+ */ function _descriptors(proxy, defaults = {
+    scriptable: true,
+    indexable: true
+}) {
+    const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys  } = proxy;
+    return {
+        allKeys: _allKeys,
+        scriptable: _scriptable,
+        indexable: _indexable,
+        isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,
+        isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable
+    };
+}
+const readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;
+const needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);
+function _cached(target, prop, resolve) {
+    if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {
+        return target[prop];
+    }
+    const value = resolve();
+    // cache the resolved value
+    target[prop] = value;
+    return value;
+}
+function _resolveWithContext(target, prop, receiver) {
+    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;
+    let value = _proxy[prop]; // resolve from proxy
+    // resolve with context
+    if (isFunction(value) && descriptors.isScriptable(prop)) {
+        value = _resolveScriptable(prop, value, target, receiver);
+    }
+    if (isArray(value) && value.length) {
+        value = _resolveArray(prop, value, target, descriptors.isIndexable);
+    }
+    if (needsSubResolver(prop, value)) {
+        // if the resolved value is an object, create a sub resolver for it
+        value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);
+    }
+    return value;
+}
+function _resolveScriptable(prop, getValue, target, receiver) {
+    const { _proxy , _context , _subProxy , _stack  } = target;
+    if (_stack.has(prop)) {
+        throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);
+    }
+    _stack.add(prop);
+    let value = getValue(_context, _subProxy || receiver);
+    _stack.delete(prop);
+    if (needsSubResolver(prop, value)) {
+        // When scriptable option returns an object, create a resolver on that.
+        value = createSubResolver(_proxy._scopes, _proxy, prop, value);
+    }
+    return value;
+}
+function _resolveArray(prop, value, target, isIndexable) {
+    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;
+    if (typeof _context.index !== 'undefined' && isIndexable(prop)) {
+        return value[_context.index % value.length];
+    } else if (isObject(value[0])) {
+        // Array of objects, return array or resolvers
+        const arr = value;
+        const scopes = _proxy._scopes.filter((s)=>s !== arr);
+        value = [];
+        for (const item of arr){
+            const resolver = createSubResolver(scopes, _proxy, prop, item);
+            value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));
+        }
+    }
+    return value;
+}
+function resolveFallback(fallback, prop, value) {
+    return isFunction(fallback) ? fallback(prop, value) : fallback;
+}
+const getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;
+function addScopes(set, parentScopes, key, parentFallback, value) {
+    for (const parent of parentScopes){
+        const scope = getScope(key, parent);
+        if (scope) {
+            set.add(scope);
+            const fallback = resolveFallback(scope._fallback, key, value);
+            if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {
+                // When we reach the descriptor that defines a new _fallback, return that.
+                // The fallback will resume to that new scope.
+                return fallback;
+            }
+        } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {
+            // Fallback to `false` results to `false`, when falling back to different key.
+            // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`
+            return null;
+        }
+    }
+    return false;
+}
+function createSubResolver(parentScopes, resolver, prop, value) {
+    const rootScopes = resolver._rootScopes;
+    const fallback = resolveFallback(resolver._fallback, prop, value);
+    const allScopes = [
+        ...parentScopes,
+        ...rootScopes
+    ];
+    const set = new Set();
+    set.add(value);
+    let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);
+    if (key === null) {
+        return false;
+    }
+    if (typeof fallback !== 'undefined' && fallback !== prop) {
+        key = addScopesFromKey(set, allScopes, fallback, key, value);
+        if (key === null) {
+            return false;
+        }
+    }
+    return _createResolver(Array.from(set), [
+        ''
+    ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));
+}
+function addScopesFromKey(set, allScopes, key, fallback, item) {
+    while(key){
+        key = addScopes(set, allScopes, key, fallback, item);
+    }
+    return key;
+}
+function subGetTarget(resolver, prop, value) {
+    const parent = resolver._getTarget();
+    if (!(prop in parent)) {
+        parent[prop] = {};
+    }
+    const target = parent[prop];
+    if (isArray(target) && isObject(value)) {
+        // For array of objects, the object is used to store updated values
+        return value;
+    }
+    return target || {};
+}
+function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {
+    let value;
+    for (const prefix of prefixes){
+        value = _resolve(readKey(prefix, prop), scopes);
+        if (typeof value !== 'undefined') {
+            return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;
+        }
+    }
+}
+function _resolve(key, scopes) {
+    for (const scope of scopes){
+        if (!scope) {
+            continue;
+        }
+        const value = scope[key];
+        if (typeof value !== 'undefined') {
+            return value;
+        }
+    }
+}
+function getKeysFromAllScopes(target) {
+    let keys = target._keys;
+    if (!keys) {
+        keys = target._keys = resolveKeysFromAllScopes(target._scopes);
+    }
+    return keys;
+}
+function resolveKeysFromAllScopes(scopes) {
+    const set = new Set();
+    for (const scope of scopes){
+        for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){
+            set.add(key);
+        }
+    }
+    return Array.from(set);
+}
+function _parseObjectDataRadialScale(meta, data, start, count) {
+    const { iScale  } = meta;
+    const { key ='r'  } = this._parsing;
+    const parsed = new Array(count);
+    let i, ilen, index, item;
+    for(i = 0, ilen = count; i < ilen; ++i){
+        index = i + start;
+        item = data[index];
+        parsed[i] = {
+            r: iScale.parse(resolveObjectKey(item, key), index)
+        };
+    }
+    return parsed;
+}
+
+const EPSILON = Number.EPSILON || 1e-14;
+const getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];
+const getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';
+function splineCurve(firstPoint, middlePoint, afterPoint, t) {
+    // Props to Rob Spencer at scaled innovation for his post on splining between points
+    // http://scaledinnovation.com/analytics/splines/aboutSplines.html
+    // This function must also respect "skipped" points
+    const previous = firstPoint.skip ? middlePoint : firstPoint;
+    const current = middlePoint;
+    const next = afterPoint.skip ? middlePoint : afterPoint;
+    const d01 = distanceBetweenPoints(current, previous);
+    const d12 = distanceBetweenPoints(next, current);
+    let s01 = d01 / (d01 + d12);
+    let s12 = d12 / (d01 + d12);
+    // If all points are the same, s01 & s02 will be inf
+    s01 = isNaN(s01) ? 0 : s01;
+    s12 = isNaN(s12) ? 0 : s12;
+    const fa = t * s01; // scaling factor for triangle Ta
+    const fb = t * s12;
+    return {
+        previous: {
+            x: current.x - fa * (next.x - previous.x),
+            y: current.y - fa * (next.y - previous.y)
+        },
+        next: {
+            x: current.x + fb * (next.x - previous.x),
+            y: current.y + fb * (next.y - previous.y)
+        }
+    };
+}
+/**
+ * Adjust tangents to ensure monotonic properties
+ */ function monotoneAdjust(points, deltaK, mK) {
+    const pointsLen = points.length;
+    let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;
+    let pointAfter = getPoint(points, 0);
+    for(let i = 0; i < pointsLen - 1; ++i){
+        pointCurrent = pointAfter;
+        pointAfter = getPoint(points, i + 1);
+        if (!pointCurrent || !pointAfter) {
+            continue;
+        }
+        if (almostEquals(deltaK[i], 0, EPSILON)) {
+            mK[i] = mK[i + 1] = 0;
+            continue;
+        }
+        alphaK = mK[i] / deltaK[i];
+        betaK = mK[i + 1] / deltaK[i];
+        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);
+        if (squaredMagnitude <= 9) {
+            continue;
+        }
+        tauK = 3 / Math.sqrt(squaredMagnitude);
+        mK[i] = alphaK * tauK * deltaK[i];
+        mK[i + 1] = betaK * tauK * deltaK[i];
+    }
+}
+function monotoneCompute(points, mK, indexAxis = 'x') {
+    const valueAxis = getValueAxis(indexAxis);
+    const pointsLen = points.length;
+    let delta, pointBefore, pointCurrent;
+    let pointAfter = getPoint(points, 0);
+    for(let i = 0; i < pointsLen; ++i){
+        pointBefore = pointCurrent;
+        pointCurrent = pointAfter;
+        pointAfter = getPoint(points, i + 1);
+        if (!pointCurrent) {
+            continue;
+        }
+        const iPixel = pointCurrent[indexAxis];
+        const vPixel = pointCurrent[valueAxis];
+        if (pointBefore) {
+            delta = (iPixel - pointBefore[indexAxis]) / 3;
+            pointCurrent[`cp1${indexAxis}`] = iPixel - delta;
+            pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];
+        }
+        if (pointAfter) {
+            delta = (pointAfter[indexAxis] - iPixel) / 3;
+            pointCurrent[`cp2${indexAxis}`] = iPixel + delta;
+            pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];
+        }
+    }
+}
+/**
+ * This function calculates Bézier control points in a similar way than |splineCurve|,
+ * but preserves monotonicity of the provided data and ensures no local extremums are added
+ * between the dataset discrete points due to the interpolation.
+ * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation
+ */ function splineCurveMonotone(points, indexAxis = 'x') {
+    const valueAxis = getValueAxis(indexAxis);
+    const pointsLen = points.length;
+    const deltaK = Array(pointsLen).fill(0);
+    const mK = Array(pointsLen);
+    // Calculate slopes (deltaK) and initialize tangents (mK)
+    let i, pointBefore, pointCurrent;
+    let pointAfter = getPoint(points, 0);
+    for(i = 0; i < pointsLen; ++i){
+        pointBefore = pointCurrent;
+        pointCurrent = pointAfter;
+        pointAfter = getPoint(points, i + 1);
+        if (!pointCurrent) {
+            continue;
+        }
+        if (pointAfter) {
+            const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];
+            // In the case of two points that appear at the same x pixel, slopeDeltaX is 0
+            deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;
+        }
+        mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;
+    }
+    monotoneAdjust(points, deltaK, mK);
+    monotoneCompute(points, mK, indexAxis);
+}
+function capControlPoint(pt, min, max) {
+    return Math.max(Math.min(pt, max), min);
+}
+function capBezierPoints(points, area) {
+    let i, ilen, point, inArea, inAreaPrev;
+    let inAreaNext = _isPointInArea(points[0], area);
+    for(i = 0, ilen = points.length; i < ilen; ++i){
+        inAreaPrev = inArea;
+        inArea = inAreaNext;
+        inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);
+        if (!inArea) {
+            continue;
+        }
+        point = points[i];
+        if (inAreaPrev) {
+            point.cp1x = capControlPoint(point.cp1x, area.left, area.right);
+            point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);
+        }
+        if (inAreaNext) {
+            point.cp2x = capControlPoint(point.cp2x, area.left, area.right);
+            point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);
+        }
+    }
+}
+/**
+ * @private
+ */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {
+    let i, ilen, point, controlPoints;
+    // Only consider points that are drawn in case the spanGaps option is used
+    if (options.spanGaps) {
+        points = points.filter((pt)=>!pt.skip);
+    }
+    if (options.cubicInterpolationMode === 'monotone') {
+        splineCurveMonotone(points, indexAxis);
+    } else {
+        let prev = loop ? points[points.length - 1] : points[0];
+        for(i = 0, ilen = points.length; i < ilen; ++i){
+            point = points[i];
+            controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);
+            point.cp1x = controlPoints.previous.x;
+            point.cp1y = controlPoints.previous.y;
+            point.cp2x = controlPoints.next.x;
+            point.cp2y = controlPoints.next.y;
+            prev = point;
+        }
+    }
+    if (options.capBezierPoints) {
+        capBezierPoints(points, area);
+    }
+}
+
+/**
+ * @private
+ */ function _isDomSupported() {
+    return typeof window !== 'undefined' && typeof document !== 'undefined';
+}
+/**
+ * @private
+ */ function _getParentNode(domNode) {
+    let parent = domNode.parentNode;
+    if (parent && parent.toString() === '[object ShadowRoot]') {
+        parent = parent.host;
+    }
+    return parent;
+}
+/**
+ * convert max-width/max-height values that may be percentages into a number
+ * @private
+ */ function parseMaxStyle(styleValue, node, parentProperty) {
+    let valueInPixels;
+    if (typeof styleValue === 'string') {
+        valueInPixels = parseInt(styleValue, 10);
+        if (styleValue.indexOf('%') !== -1) {
+            // percentage * size in dimension
+            valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
+        }
+    } else {
+        valueInPixels = styleValue;
+    }
+    return valueInPixels;
+}
+const getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);
+function getStyle(el, property) {
+    return getComputedStyle(el).getPropertyValue(property);
+}
+const positions = [
+    'top',
+    'right',
+    'bottom',
+    'left'
+];
+function getPositionedStyle(styles, style, suffix) {
+    const result = {};
+    suffix = suffix ? '-' + suffix : '';
+    for(let i = 0; i < 4; i++){
+        const pos = positions[i];
+        result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;
+    }
+    result.width = result.left + result.right;
+    result.height = result.top + result.bottom;
+    return result;
+}
+const useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);
+/**
+ * @param e
+ * @param canvas
+ * @returns Canvas position
+ */ function getCanvasPosition(e, canvas) {
+    const touches = e.touches;
+    const source = touches && touches.length ? touches[0] : e;
+    const { offsetX , offsetY  } = source;
+    let box = false;
+    let x, y;
+    if (useOffsetPos(offsetX, offsetY, e.target)) {
+        x = offsetX;
+        y = offsetY;
+    } else {
+        const rect = canvas.getBoundingClientRect();
+        x = source.clientX - rect.left;
+        y = source.clientY - rect.top;
+        box = true;
+    }
+    return {
+        x,
+        y,
+        box
+    };
+}
+/**
+ * Gets an event's x, y coordinates, relative to the chart area
+ * @param event
+ * @param chart
+ * @returns x and y coordinates of the event
+ */ function getRelativePosition(event, chart) {
+    if ('native' in event) {
+        return event;
+    }
+    const { canvas , currentDevicePixelRatio  } = chart;
+    const style = getComputedStyle(canvas);
+    const borderBox = style.boxSizing === 'border-box';
+    const paddings = getPositionedStyle(style, 'padding');
+    const borders = getPositionedStyle(style, 'border', 'width');
+    const { x , y , box  } = getCanvasPosition(event, canvas);
+    const xOffset = paddings.left + (box && borders.left);
+    const yOffset = paddings.top + (box && borders.top);
+    let { width , height  } = chart;
+    if (borderBox) {
+        width -= paddings.width + borders.width;
+        height -= paddings.height + borders.height;
+    }
+    return {
+        x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),
+        y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)
+    };
+}
+function getContainerSize(canvas, width, height) {
+    let maxWidth, maxHeight;
+    if (width === undefined || height === undefined) {
+        const container = canvas && _getParentNode(canvas);
+        if (!container) {
+            width = canvas.clientWidth;
+            height = canvas.clientHeight;
+        } else {
+            const rect = container.getBoundingClientRect(); // this is the border box of the container
+            const containerStyle = getComputedStyle(container);
+            const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');
+            const containerPadding = getPositionedStyle(containerStyle, 'padding');
+            width = rect.width - containerPadding.width - containerBorder.width;
+            height = rect.height - containerPadding.height - containerBorder.height;
+            maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');
+            maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');
+        }
+    }
+    return {
+        width,
+        height,
+        maxWidth: maxWidth || INFINITY,
+        maxHeight: maxHeight || INFINITY
+    };
+}
+const round1 = (v)=>Math.round(v * 10) / 10;
+// eslint-disable-next-line complexity
+function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {
+    const style = getComputedStyle(canvas);
+    const margins = getPositionedStyle(style, 'margin');
+    const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;
+    const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;
+    const containerSize = getContainerSize(canvas, bbWidth, bbHeight);
+    let { width , height  } = containerSize;
+    if (style.boxSizing === 'content-box') {
+        const borders = getPositionedStyle(style, 'border', 'width');
+        const paddings = getPositionedStyle(style, 'padding');
+        width -= paddings.width + borders.width;
+        height -= paddings.height + borders.height;
+    }
+    width = Math.max(0, width - margins.width);
+    height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);
+    width = round1(Math.min(width, maxWidth, containerSize.maxWidth));
+    height = round1(Math.min(height, maxHeight, containerSize.maxHeight));
+    if (width && !height) {
+        // https://github.com/chartjs/Chart.js/issues/4659
+        // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)
+        height = round1(width / 2);
+    }
+    const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;
+    if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {
+        height = containerSize.height;
+        width = round1(Math.floor(height * aspectRatio));
+    }
+    return {
+        width,
+        height
+    };
+}
+/**
+ * @param chart
+ * @param forceRatio
+ * @param forceStyle
+ * @returns True if the canvas context size or transformation has changed.
+ */ function retinaScale(chart, forceRatio, forceStyle) {
+    const pixelRatio = forceRatio || 1;
+    const deviceHeight = Math.floor(chart.height * pixelRatio);
+    const deviceWidth = Math.floor(chart.width * pixelRatio);
+    chart.height = Math.floor(chart.height);
+    chart.width = Math.floor(chart.width);
+    const canvas = chart.canvas;
+    // If no style has been set on the canvas, the render size is used as display size,
+    // making the chart visually bigger, so let's enforce it to the "correct" values.
+    // See https://github.com/chartjs/Chart.js/issues/3575
+    if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {
+        canvas.style.height = `${chart.height}px`;
+        canvas.style.width = `${chart.width}px`;
+    }
+    if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {
+        chart.currentDevicePixelRatio = pixelRatio;
+        canvas.height = deviceHeight;
+        canvas.width = deviceWidth;
+        chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
+        return true;
+    }
+    return false;
+}
+/**
+ * Detects support for options object argument in addEventListener.
+ * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
+ * @private
+ */ const supportsEventListenerOptions = function() {
+    let passiveSupported = false;
+    try {
+        const options = {
+            get passive () {
+                passiveSupported = true;
+                return false;
+            }
+        };
+        if (_isDomSupported()) {
+            window.addEventListener('test', null, options);
+            window.removeEventListener('test', null, options);
+        }
+    } catch (e) {
+    // continue regardless of error
+    }
+    return passiveSupported;
+}();
+/**
+ * The "used" size is the final value of a dimension property after all calculations have
+ * been performed. This method uses the computed style of `element` but returns undefined
+ * if the computed style is not expressed in pixels. That can happen in some cases where
+ * `element` has a size relative to its parent and this last one is not yet displayed,
+ * for example because of `display: none` on a parent node.
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
+ * @returns Size in pixels or undefined if unknown.
+ */ function readUsedSize(element, property) {
+    const value = getStyle(element, property);
+    const matches = value && value.match(/^(\d+)(\.\d+)?px$/);
+    return matches ? +matches[1] : undefined;
+}
+
+/**
+ * @private
+ */ function _pointInLine(p1, p2, t, mode) {
+    return {
+        x: p1.x + t * (p2.x - p1.x),
+        y: p1.y + t * (p2.y - p1.y)
+    };
+}
+/**
+ * @private
+ */ function _steppedInterpolation(p1, p2, t, mode) {
+    return {
+        x: p1.x + t * (p2.x - p1.x),
+        y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y
+    };
+}
+/**
+ * @private
+ */ function _bezierInterpolation(p1, p2, t, mode) {
+    const cp1 = {
+        x: p1.cp2x,
+        y: p1.cp2y
+    };
+    const cp2 = {
+        x: p2.cp1x,
+        y: p2.cp1y
+    };
+    const a = _pointInLine(p1, cp1, t);
+    const b = _pointInLine(cp1, cp2, t);
+    const c = _pointInLine(cp2, p2, t);
+    const d = _pointInLine(a, b, t);
+    const e = _pointInLine(b, c, t);
+    return _pointInLine(d, e, t);
+}
+
+const getRightToLeftAdapter = function(rectX, width) {
+    return {
+        x (x) {
+            return rectX + rectX + width - x;
+        },
+        setWidth (w) {
+            width = w;
+        },
+        textAlign (align) {
+            if (align === 'center') {
+                return align;
+            }
+            return align === 'right' ? 'left' : 'right';
+        },
+        xPlus (x, value) {
+            return x - value;
+        },
+        leftForLtr (x, itemWidth) {
+            return x - itemWidth;
+        }
+    };
+};
+const getLeftToRightAdapter = function() {
+    return {
+        x (x) {
+            return x;
+        },
+        setWidth (w) {},
+        textAlign (align) {
+            return align;
+        },
+        xPlus (x, value) {
+            return x + value;
+        },
+        leftForLtr (x, _itemWidth) {
+            return x;
+        }
+    };
+};
+function getRtlAdapter(rtl, rectX, width) {
+    return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();
+}
+function overrideTextDirection(ctx, direction) {
+    let style, original;
+    if (direction === 'ltr' || direction === 'rtl') {
+        style = ctx.canvas.style;
+        original = [
+            style.getPropertyValue('direction'),
+            style.getPropertyPriority('direction')
+        ];
+        style.setProperty('direction', direction, 'important');
+        ctx.prevTextDirection = original;
+    }
+}
+function restoreTextDirection(ctx, original) {
+    if (original !== undefined) {
+        delete ctx.prevTextDirection;
+        ctx.canvas.style.setProperty('direction', original[0], original[1]);
+    }
+}
+
+function propertyFn(property) {
+    if (property === 'angle') {
+        return {
+            between: _angleBetween,
+            compare: _angleDiff,
+            normalize: _normalizeAngle
+        };
+    }
+    return {
+        between: _isBetween,
+        compare: (a, b)=>a - b,
+        normalize: (x)=>x
+    };
+}
+function normalizeSegment({ start , end , count , loop , style  }) {
+    return {
+        start: start % count,
+        end: end % count,
+        loop: loop && (end - start + 1) % count === 0,
+        style
+    };
+}
+function getSegment(segment, points, bounds) {
+    const { property , start: startBound , end: endBound  } = bounds;
+    const { between , normalize  } = propertyFn(property);
+    const count = points.length;
+    let { start , end , loop  } = segment;
+    let i, ilen;
+    if (loop) {
+        start += count;
+        end += count;
+        for(i = 0, ilen = count; i < ilen; ++i){
+            if (!between(normalize(points[start % count][property]), startBound, endBound)) {
+                break;
+            }
+            start--;
+            end--;
+        }
+        start %= count;
+        end %= count;
+    }
+    if (end < start) {
+        end += count;
+    }
+    return {
+        start,
+        end,
+        loop,
+        style: segment.style
+    };
+}
+ function _boundSegment(segment, points, bounds) {
+    if (!bounds) {
+        return [
+            segment
+        ];
+    }
+    const { property , start: startBound , end: endBound  } = bounds;
+    const count = points.length;
+    const { compare , between , normalize  } = propertyFn(property);
+    const { start , end , loop , style  } = getSegment(segment, points, bounds);
+    const result = [];
+    let inside = false;
+    let subStart = null;
+    let value, point, prevValue;
+    const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;
+    const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);
+    const shouldStart = ()=>inside || startIsBefore();
+    const shouldStop = ()=>!inside || endIsBefore();
+    for(let i = start, prev = start; i <= end; ++i){
+        point = points[i % count];
+        if (point.skip) {
+            continue;
+        }
+        value = normalize(point[property]);
+        if (value === prevValue) {
+            continue;
+        }
+        inside = between(value, startBound, endBound);
+        if (subStart === null && shouldStart()) {
+            subStart = compare(value, startBound) === 0 ? i : prev;
+        }
+        if (subStart !== null && shouldStop()) {
+            result.push(normalizeSegment({
+                start: subStart,
+                end: i,
+                loop,
+                count,
+                style
+            }));
+            subStart = null;
+        }
+        prev = i;
+        prevValue = value;
+    }
+    if (subStart !== null) {
+        result.push(normalizeSegment({
+            start: subStart,
+            end,
+            loop,
+            count,
+            style
+        }));
+    }
+    return result;
+}
+ function _boundSegments(line, bounds) {
+    const result = [];
+    const segments = line.segments;
+    for(let i = 0; i < segments.length; i++){
+        const sub = _boundSegment(segments[i], line.points, bounds);
+        if (sub.length) {
+            result.push(...sub);
+        }
+    }
+    return result;
+}
+ function findStartAndEnd(points, count, loop, spanGaps) {
+    let start = 0;
+    let end = count - 1;
+    if (loop && !spanGaps) {
+        while(start < count && !points[start].skip){
+            start++;
+        }
+    }
+    while(start < count && points[start].skip){
+        start++;
+    }
+    start %= count;
+    if (loop) {
+        end += start;
+    }
+    while(end > start && points[end % count].skip){
+        end--;
+    }
+    end %= count;
+    return {
+        start,
+        end
+    };
+}
+ function solidSegments(points, start, max, loop) {
+    const count = points.length;
+    const result = [];
+    let last = start;
+    let prev = points[start];
+    let end;
+    for(end = start + 1; end <= max; ++end){
+        const cur = points[end % count];
+        if (cur.skip || cur.stop) {
+            if (!prev.skip) {
+                loop = false;
+                result.push({
+                    start: start % count,
+                    end: (end - 1) % count,
+                    loop
+                });
+                start = last = cur.stop ? end : null;
+            }
+        } else {
+            last = end;
+            if (prev.skip) {
+                start = end;
+            }
+        }
+        prev = cur;
+    }
+    if (last !== null) {
+        result.push({
+            start: start % count,
+            end: last % count,
+            loop
+        });
+    }
+    return result;
+}
+ function _computeSegments(line, segmentOptions) {
+    const points = line.points;
+    const spanGaps = line.options.spanGaps;
+    const count = points.length;
+    if (!count) {
+        return [];
+    }
+    const loop = !!line._loop;
+    const { start , end  } = findStartAndEnd(points, count, loop, spanGaps);
+    if (spanGaps === true) {
+        return splitByStyles(line, [
+            {
+                start,
+                end,
+                loop
+            }
+        ], points, segmentOptions);
+    }
+    const max = end < start ? end + count : end;
+    const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;
+    return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);
+}
+ function splitByStyles(line, segments, points, segmentOptions) {
+    if (!segmentOptions || !segmentOptions.setContext || !points) {
+        return segments;
+    }
+    return doSplitByStyles(line, segments, points, segmentOptions);
+}
+ function doSplitByStyles(line, segments, points, segmentOptions) {
+    const chartContext = line._chart.getContext();
+    const baseStyle = readStyle(line.options);
+    const { _datasetIndex: datasetIndex , options: { spanGaps  }  } = line;
+    const count = points.length;
+    const result = [];
+    let prevStyle = baseStyle;
+    let start = segments[0].start;
+    let i = start;
+    function addStyle(s, e, l, st) {
+        const dir = spanGaps ? -1 : 1;
+        if (s === e) {
+            return;
+        }
+        s += count;
+        while(points[s % count].skip){
+            s -= dir;
+        }
+        while(points[e % count].skip){
+            e += dir;
+        }
+        if (s % count !== e % count) {
+            result.push({
+                start: s % count,
+                end: e % count,
+                loop: l,
+                style: st
+            });
+            prevStyle = st;
+            start = e % count;
+        }
+    }
+    for (const segment of segments){
+        start = spanGaps ? start : segment.start;
+        let prev = points[start % count];
+        let style;
+        for(i = start + 1; i <= segment.end; i++){
+            const pt = points[i % count];
+            style = readStyle(segmentOptions.setContext(createContext(chartContext, {
+                type: 'segment',
+                p0: prev,
+                p1: pt,
+                p0DataIndex: (i - 1) % count,
+                p1DataIndex: i % count,
+                datasetIndex
+            })));
+            if (styleChanged(style, prevStyle)) {
+                addStyle(start, i - 1, segment.loop, prevStyle);
+            }
+            prev = pt;
+            prevStyle = style;
+        }
+        if (start < i - 1) {
+            addStyle(start, i - 1, segment.loop, prevStyle);
+        }
+    }
+    return result;
+}
+function readStyle(options) {
+    return {
+        backgroundColor: options.backgroundColor,
+        borderCapStyle: options.borderCapStyle,
+        borderDash: options.borderDash,
+        borderDashOffset: options.borderDashOffset,
+        borderJoinStyle: options.borderJoinStyle,
+        borderWidth: options.borderWidth,
+        borderColor: options.borderColor
+    };
+}
+function styleChanged(style, prevStyle) {
+    if (!prevStyle) {
+        return false;
+    }
+    const cache = [];
+    const replacer = function(key, value) {
+        if (!isPatternOrGradient(value)) {
+            return value;
+        }
+        if (!cache.includes(value)) {
+            cache.push(value);
+        }
+        return cache.indexOf(value);
+    };
+    return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);
+}
+
+function getSizeForArea(scale, chartArea, field) {
+    return scale.options.clip ? scale[field] : chartArea[field];
+}
+function getDatasetArea(meta, chartArea) {
+    const { xScale , yScale  } = meta;
+    if (xScale && yScale) {
+        return {
+            left: getSizeForArea(xScale, chartArea, 'left'),
+            right: getSizeForArea(xScale, chartArea, 'right'),
+            top: getSizeForArea(yScale, chartArea, 'top'),
+            bottom: getSizeForArea(yScale, chartArea, 'bottom')
+        };
+    }
+    return chartArea;
+}
+function getDatasetClipArea(chart, meta) {
+    const clip = meta._clip;
+    if (clip.disabled) {
+        return false;
+    }
+    const area = getDatasetArea(meta, chart.chartArea);
+    return {
+        left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),
+        right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),
+        top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),
+        bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)
+    };
+}
+
+exports.HALF_PI = HALF_PI;
+exports.INFINITY = INFINITY;
+exports.PI = PI;
+exports.PITAU = PITAU;
+exports.QUARTER_PI = QUARTER_PI;
+exports.RAD_PER_DEG = RAD_PER_DEG;
+exports.TAU = TAU;
+exports.TWO_THIRDS_PI = TWO_THIRDS_PI;
+exports.Ticks = Ticks;
+exports._addGrace = _addGrace;
+exports._alignPixel = _alignPixel;
+exports._alignStartEnd = _alignStartEnd;
+exports._angleBetween = _angleBetween;
+exports._angleDiff = _angleDiff;
+exports._arrayUnique = _arrayUnique;
+exports._attachContext = _attachContext;
+exports._bezierCurveTo = _bezierCurveTo;
+exports._bezierInterpolation = _bezierInterpolation;
+exports._boundSegment = _boundSegment;
+exports._boundSegments = _boundSegments;
+exports._capitalize = _capitalize;
+exports._computeSegments = _computeSegments;
+exports._createResolver = _createResolver;
+exports._decimalPlaces = _decimalPlaces;
+exports._deprecated = _deprecated;
+exports._descriptors = _descriptors;
+exports._elementsEqual = _elementsEqual;
+exports._factorize = _factorize;
+exports._filterBetween = _filterBetween;
+exports._getParentNode = _getParentNode;
+exports._getStartAndCountOfVisiblePoints = _getStartAndCountOfVisiblePoints;
+exports._int16Range = _int16Range;
+exports._isBetween = _isBetween;
+exports._isClickEvent = _isClickEvent;
+exports._isDomSupported = _isDomSupported;
+exports._isPointInArea = _isPointInArea;
+exports._limitValue = _limitValue;
+exports._longestText = _longestText;
+exports._lookup = _lookup;
+exports._lookupByKey = _lookupByKey;
+exports._measureText = _measureText;
+exports._merger = _merger;
+exports._mergerIf = _mergerIf;
+exports._normalizeAngle = _normalizeAngle;
+exports._parseObjectDataRadialScale = _parseObjectDataRadialScale;
+exports._pointInLine = _pointInLine;
+exports._readValueToProps = _readValueToProps;
+exports._rlookupByKey = _rlookupByKey;
+exports._scaleRangesChanged = _scaleRangesChanged;
+exports._setMinAndMaxByKey = _setMinAndMaxByKey;
+exports._splitKey = _splitKey;
+exports._steppedInterpolation = _steppedInterpolation;
+exports._steppedLineTo = _steppedLineTo;
+exports._textX = _textX;
+exports._toLeftRightCenter = _toLeftRightCenter;
+exports._updateBezierControlPoints = _updateBezierControlPoints;
+exports.addRoundedRectPath = addRoundedRectPath;
+exports.almostEquals = almostEquals;
+exports.almostWhole = almostWhole;
+exports.callback = callback;
+exports.clearCanvas = clearCanvas;
+exports.clipArea = clipArea;
+exports.clone = clone;
+exports.color = color;
+exports.createContext = createContext;
+exports.debounce = debounce;
+exports.defaults = defaults;
+exports.defined = defined;
+exports.descriptors = descriptors;
+exports.distanceBetweenPoints = distanceBetweenPoints;
+exports.drawPoint = drawPoint;
+exports.drawPointLegend = drawPointLegend;
+exports.each = each;
+exports.effects = effects;
+exports.finiteOrDefault = finiteOrDefault;
+exports.fontString = fontString;
+exports.formatNumber = formatNumber;
+exports.getAngleFromPoint = getAngleFromPoint;
+exports.getDatasetClipArea = getDatasetClipArea;
+exports.getHoverColor = getHoverColor;
+exports.getMaximumSize = getMaximumSize;
+exports.getRelativePosition = getRelativePosition;
+exports.getRtlAdapter = getRtlAdapter;
+exports.getStyle = getStyle;
+exports.isArray = isArray;
+exports.isFunction = isFunction;
+exports.isNullOrUndef = isNullOrUndef;
+exports.isNumber = isNumber;
+exports.isNumberFinite = isNumberFinite;
+exports.isObject = isObject;
+exports.isPatternOrGradient = isPatternOrGradient;
+exports.listenArrayEvents = listenArrayEvents;
+exports.log10 = log10;
+exports.merge = merge;
+exports.mergeIf = mergeIf;
+exports.niceNum = niceNum;
+exports.noop = noop;
+exports.overrideTextDirection = overrideTextDirection;
+exports.overrides = overrides;
+exports.readUsedSize = readUsedSize;
+exports.renderText = renderText;
+exports.requestAnimFrame = requestAnimFrame;
+exports.resolve = resolve;
+exports.resolveObjectKey = resolveObjectKey;
+exports.restoreTextDirection = restoreTextDirection;
+exports.retinaScale = retinaScale;
+exports.setsEqual = setsEqual;
+exports.sign = sign;
+exports.splineCurve = splineCurve;
+exports.splineCurveMonotone = splineCurveMonotone;
+exports.supportsEventListenerOptions = supportsEventListenerOptions;
+exports.throttled = throttled;
+exports.toDegrees = toDegrees;
+exports.toDimension = toDimension;
+exports.toFont = toFont;
+exports.toFontString = toFontString;
+exports.toLineHeight = toLineHeight;
+exports.toPadding = toPadding;
+exports.toPercentage = toPercentage;
+exports.toRadians = toRadians;
+exports.toTRBL = toTRBL;
+exports.toTRBLCorners = toTRBLCorners;
+exports.uid = uid;
+exports.unclipArea = unclipArea;
+exports.unlistenArrayEvents = unlistenArrayEvents;
+exports.valueOrDefault = valueOrDefault;
+//# sourceMappingURL=helpers.dataset.cjs.map
Index: node_modules/chart.js/dist/chunks/helpers.dataset.cjs.map
===================================================================
--- node_modules/chart.js/dist/chunks/helpers.dataset.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chunks/helpers.dataset.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"helpers.dataset.cjs","sources":["../../src/helpers/helpers.core.ts","../../src/helpers/helpers.math.ts","../../src/helpers/helpers.collection.ts","../../src/helpers/helpers.extras.ts","../../src/helpers/helpers.easing.ts","../../src/helpers/helpers.color.ts","../../src/core/core.animations.defaults.js","../../src/core/core.layouts.defaults.js","../../src/helpers/helpers.intl.ts","../../src/core/core.ticks.js","../../src/core/core.scale.defaults.js","../../src/core/core.defaults.js","../../src/helpers/helpers.canvas.ts","../../src/helpers/helpers.options.ts","../../src/helpers/helpers.config.ts","../../src/helpers/helpers.curve.ts","../../src/helpers/helpers.dom.ts","../../src/helpers/helpers.interpolation.ts","../../src/helpers/helpers.rtl.ts","../../src/helpers/helpers.segment.js","../../src/helpers/helpers.dataset.ts"],"sourcesContent":["/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n  /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n  let id = 0;\n  return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n  return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n  isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n  fn: T | undefined,\n  args: unknown[],\n  thisArg?: TA\n): R | undefined {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n  loopable: Record<string, T>,\n  fn: (this: TA, v: T, i: string) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[],\n  fn: (this: TA, v: T, i: number) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[] | Record<string, T>,\n  fn: (this: TA, v: T, i: any) => void,\n  thisArg?: TA,\n  reverse?: boolean\n) {\n  let i: number, len: number, keys: string[];\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n  let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n  if (isArray(source)) {\n    return source.map(clone) as unknown as T;\n  }\n\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone(source[keys[k]]);\n    }\n\n    return target;\n  }\n\n  return source;\n}\n\nfunction isValidKey(key: string) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone(sval);\n  }\n}\n\nexport interface MergeOptions {\n  merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n  target: T,\n  source: [S1, S2, S3, S4],\n  options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target as AnyObject;\n  }\n\n  options = options || {};\n  const merger = options.merger || _merger;\n  let current: AnyObject;\n\n  for (let i = 0; i < ilen; ++i) {\n    current = sources[i];\n    if (!isObject(current)) {\n      continue;\n    }\n\n    const keys = Object.keys(current);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options as AnyObject);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone(sval);\n  }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n      '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': v => v,\n  // default resolvers\n  x: o => o.x,\n  y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n  const parts = key.split('.');\n  const keys: string[] = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        // For backward compatibility:\n        // Chart.helpers.core resolveObjectKey should break at empty key\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n  return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n  const result: number[] = [];\n  const sqrt = Math.sqrt(value);\n  let i: number;\n\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) { // if value is a square number\n    result.push(sqrt);\n  }\n\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n  return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n  return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n  array: Record<string, number>[],\n  target: { min: number, max: number },\n  property: string\n) {\n  let i: number, ilen: number, value: number;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nexport function toRadians(degrees: number) {\n  return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n  return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n  if (!isFiniteNumber(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n  centrePoint: Point,\n  anglePoint: Point\n) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n  if (angle < (-0.5 * PI)) {\n    angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n  }\n\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n  return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n  return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n  return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n  table: number[],\n  value: number,\n  cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n  table: T[],\n  value: number,\n  cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n  table: unknown[],\n  value: number,\n  cmp?: (value: number) => boolean\n) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid: number;\n\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number,\n  last?: boolean\n) =>\n  _lookup(table, value, last\n    ? index => {\n      const ti = table[index][key];\n      return ti < value || ti === value && table[index + 1][key] === value;\n    }\n    : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number\n) =>\n  _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n  let start = 0;\n  let end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n  _onDataPush?(...item: T[]): void;\n  _onDataPop?(): void;\n  _onDataShift?(): void;\n  _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n  _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n\n  delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n  const set = new Set<T>(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n  fn: (...args: TArgs) => void,\n  thisArg: any,\n) {\n  let argsToUse = [] as TArgs;\n  let ticking = false;\n\n  return function(...args: TArgs) {\n    // Save the args for use later\n    argsToUse = args;\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n  let timeout;\n  return function(...args: TArgs) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count = pointCount;\n\n  if (meta._sorted) {\n    const {iScale, vScale, _parsed} = meta;\n    const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n    if (minDefined) {\n      start = Math.min(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, axis, min).lo,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n      if (spanGaps) {\n        const distanceToDefinedLo = (_parsed\n          .slice(0, start + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        start -= Math.max(0, distanceToDefinedLo);\n      }\n      start = _limitValue(start, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n      let end = Math.max(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n      if (spanGaps) {\n        const distanceToDefinedHi = (_parsed\n          .slice(end - 1)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        end += Math.max(0, distanceToDefinedHi);\n      }\n      count = _limitValue(end, start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n  linear: (t: number) => t,\n\n  easeInQuad: (t: number) => t * t,\n\n  easeOutQuad: (t: number) => -t * (t - 2),\n\n  easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n\n  easeInCubic: (t: number) => t * t * t,\n\n  easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n  easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n\n  easeInQuart: (t: number) => t * t * t * t,\n\n  easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n  easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n\n  easeInQuint: (t: number) => t * t * t * t * t,\n\n  easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n  easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n  easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n  easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n  easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n  easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n  easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n  easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n  easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n  easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n  easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n  easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n  easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n  easeInOutElastic(t: number) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n\n  easeInBack(t: number) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n\n  easeOutBack(t: number) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n\n  easeInOutBack(t: number) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n\n  easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n  easeOutBounce(t: number) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n\n  easeInOutBounce: (t: number) => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n  value:\n  | string\n  | { r: number; g: number; b: number; a: number }\n  | [number, number, number]\n  | [number, number, number, number]\n): Color;\nexport function color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n  defaults.set('animation', {\n    delay: undefined,\n    duration: 1000,\n    easing: 'easeOutQuart',\n    fn: undefined,\n    from: undefined,\n    loop: undefined,\n    to: undefined,\n    type: undefined,\n  });\n\n  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n  });\n\n  defaults.set('animations', {\n    colors: {\n      type: 'color',\n      properties: colors\n    },\n    numbers: {\n      type: 'number',\n      properties: numbers\n    },\n  });\n\n  defaults.describe('animations', {\n    _fallback: 'animation',\n  });\n\n  defaults.set('transitions', {\n    active: {\n      animation: {\n        duration: 400\n      }\n    },\n    resize: {\n      animation: {\n        duration: 0\n      }\n    },\n    show: {\n      animations: {\n        colors: {\n          from: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          duration: 0 // show immediately\n        },\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n        },\n      }\n    }\n  });\n}\n","export function applyLayoutsDefaults(defaults) {\n  defaults.set('layout', {\n    autoPadding: true,\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n}\n","\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n  return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n  /**\n   * Formatter for value labels\n   * @method Chart.Ticks.formatters.values\n   * @param value the value to display\n   * @return {string|string[]} the label to display\n   */\n  values(value) {\n    return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n  },\n\n  /**\n   * Formatter for numeric ticks\n   * @method Chart.Ticks.formatters.numeric\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0'; // never show decimal places for 0\n    }\n\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n    if (ticks.length > 1) {\n      // all ticks are small or there huge numbers; use scientific notation\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    const logDelta = log10(Math.abs(delta));\n\n    // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n    // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n    // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n    //\n    // toFixed has a max of 20 decimal places\n    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n\n    return formatNumber(tickValue, locale, options);\n  },\n\n\n  /**\n   * Formatter for logarithmic ticks\n   * @method Chart.Ticks.formatters.logarithmic\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n    if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n  // Figure out how many digits to show\n  // The space between the first two ticks might be smaller than normal spacing\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    // not an integer\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 3.0.0\n     */\n    bounds: 'ticks',\n\n    clip: true,\n\n    /**\n     * Addition grace added to max and reduced from min data value.\n     * @since 3.0.0\n     */\n    grace: 0,\n\n    // grid line settings\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: (_ctx, options) => options.lineWidth,\n      tickColor: (_ctx, options) => options.color,\n      offset: false,\n    },\n\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n\n    // scale title\n    title: {\n      // display property\n      display: false,\n\n      // actual label\n      text: '',\n\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n\n    // label settings\n    ticks: {\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      textStrokeWidth: 0,\n      textStrokeColor: '',\n      padding: 3,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 3,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2,\n    }\n  });\n\n  defaults.route('scale.ticks', 'color', '', 'color');\n  defaults.route('scale.grid', 'color', '', 'borderColor');\n  defaults.route('scale.border', 'color', '', 'borderColor');\n  defaults.route('scale.title', 'color', '', 'color');\n\n  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n    _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n  });\n\n  defaults.describe('scales', {\n    _fallback: 'scale',\n  });\n\n  defaults.describe('scale.ticks', {\n    _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n    _indexable: (name) => name !== 'backdropPadding',\n  });\n}\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\n\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope(root, scope), values);\n  }\n  return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n  constructor(_descriptors, _appliers) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n\n    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n\n  /**\n\t * @param {string} scope\n\t */\n  get(scope) {\n    return getScope(this, scope);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n\n  /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t *   - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope(this, scope);\n    const targetScopeObject = getScope(this, targetScope);\n    const privateName = '_' + name;\n\n    Object.defineProperties(scopeObject, {\n      // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n\n  apply(appliers) {\n    appliers.forEach((apply) => apply(this));\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","import type {\n  Chart,\n  Point,\n  FontSpec,\n  CanvasFontSpec,\n  PointStyle,\n  RenderTextOpts,\n  BackdropOptions\n} from '../types/index.js';\nimport type {\n  TRBL,\n  SplinePoint,\n  RoundedRect,\n  TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n  ctx: CanvasRenderingContext2D,\n  data: Record<string, number>,\n  gc: string[],\n  longest: number,\n  string: string\n) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n  ctx: CanvasRenderingContext2D,\n  font: string,\n  arrayOfThings: Things,\n  cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n\n  ctx.save();\n\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n\n    // Undefined strings and arrays should not be measured\n    if (thing !== undefined && thing !== null && !isArray(thing)) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      // if it is an array lets measure each element\n      // to do maybe simplify this function a bit so we can do this more recursively?\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        // Undefined strings and arrays should not be measured\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n\n  ctx.restore();\n\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n  if (!ctx && !canvas) {\n    return;\n  }\n\n  ctx = ctx || canvas.getContext('2d');\n\n  ctx.save();\n  // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nexport interface DrawPointOptions {\n  pointStyle: PointStyle;\n  rotation?: number;\n  radius: number;\n  borderWidth: number;\n}\n\nexport function drawPoint(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number\n) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number,\n  w: number\n) {\n  let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n\n  ctx.beginPath();\n\n  switch (style) {\n  // Default includes circle\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      width = w ? w / 2 : radius;\n      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n    // NOTE: the rounded rect implementation changed to use `arc` instead of\n    // `quadraticCurveTo` since it generates better results when rect is\n    // almost a circle. 0.516 (instead of 0.5) produces results with visually\n    // closer proportion to the previous impl and it is inscribed in the\n    // circle with `radius`. For more details, see the following PRs:\n    // https://github.com/chartjs/Chart.js/issues/5597\n    // https://github.com/chartjs/Chart.js/issues/5858\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'rectRot':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'cross':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'star':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      rad += QUARTER_PI;\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n      break;\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n  point: Point,\n  area: TRBL,\n  margin?: number\n) {\n  margin = margin || 0.5; // margin - default is to match rounded decimals\n\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n  ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n  ctx: CanvasRenderingContext2D,\n  previous: Point,\n  target: Point,\n  flip?: boolean,\n  mode?: string\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n  ctx: CanvasRenderingContext2D,\n  previous: SplinePoint,\n  target: SplinePoint,\n  flip?: boolean\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\n\nfunction decorateText(\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  line: string,\n  opts: RenderTextOpts\n) {\n  if (opts.strikethrough || opts.underline) {\n    /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n  const oldColor = ctx.fillStyle;\n\n  ctx.fillStyle = opts.color as string;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n  ctx: CanvasRenderingContext2D,\n  text: string | string[],\n  x: number,\n  y: number,\n  font: CanvasFontSpec,\n  opts: RenderTextOpts = {}\n) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i: number, line: string;\n\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n\n    if (opts.backdrop) {\n      drawBackdrop(ctx, opts.backdrop);\n    }\n\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n\n    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n  ctx: CanvasRenderingContext2D,\n  rect: RoundedRect & { radius: TRBLCorners }\n) {\n  const {x, y, w, h, radius} = rect;\n\n  // top left arc\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n  // line from top left to bottom left\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n\n  // bottom left arc\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n  // line from bottom left to bottom right\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n  // bottom right arc\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n  // line from bottom right to top right\n  ctx.lineTo(x + w, y + radius.topRight);\n\n  // top right arc\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n  // line from top right to top left\n  ctx.lineTo(x + radius.topLeft, y);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n\n  value = +matches[2];\n\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n    default:\n      break;\n  }\n\n  return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n  const obj = toTRBL(value) as ChartArea;\n\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n\n  return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n  options = options || {};\n  fallback = fallback || defaults.font as FontSpec;\n\n  let size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n\n  font.string = toFontString(font);\n  return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n  let cacheable = true;\n  let i: number, ilen: number, value: unknown;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n  return Object.assign(Object.create(parentContext), context);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n  ResolverObjectKey,\n  ResolverCache,\n  ResolverProxy,\n  DescriptorDefaults,\n  Descriptor,\n  ContextCache,\n  ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  scopes: T,\n  prefixes = [''],\n  rootScopes?: R,\n  fallback?: ResolverObjectKey,\n  getTarget = () => scopes[0]\n) {\n  const finalRootScopes = rootScopes || scopes;\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache: ResolverCache<T, R> = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: finalRootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop: string) {\n      delete target[prop]; // remove from cache\n      delete target._keys; // remove cached keys\n      delete scopes[0][prop]; // remove from top level scope\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop: string) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop: string, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n      delete target._keys; // remove cached keys\n      return true;\n    }\n  }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  proxy: ResolverProxy<T, R>,\n  context: AnyObject,\n  subProxy?: ResolverProxy<T, R>,\n  descriptorDefaults?: DescriptorDefaults\n) {\n  const cache: ContextCache<T, R> = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n      delete proxy[prop]; // remove from proxy\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n      delete target[prop]; // remove from cache\n      return true;\n    }\n  }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n  proxy: ResolverCache,\n  defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n  target: AnyObject,\n  prop: string,\n  resolve: () => unknown\n) {\n  if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n    return target[prop];\n  }\n\n  const value = resolve();\n  // cache the resolved value\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(\n  target: ContextCache,\n  prop: string,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop]; // resolve from proxy\n\n  // resolve with context\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    // if the resolved value is an object, create a sub resolver for it\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\n\nfunction _resolveScriptable(\n  prop: string,\n  getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n  target: ContextCache,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  let value = getValue(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    // When scriptable option returns an object, create a resolver on that.\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\n\nfunction _resolveArray(\n  prop: string,\n  value: unknown[],\n  target: ContextCache,\n  isIndexable: (key: string) => boolean\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n  if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n    return value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    // Array of objects, return array or resolvers\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\n\nfunction resolveFallback(\n  fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n  set: Set<AnyObject>,\n  parentScopes: AnyObject[],\n  key: ResolverObjectKey,\n  parentFallback: ResolverObjectKey,\n  value: unknown\n) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n        // When we reach the descriptor that defines a new _fallback, return that.\n        // The fallback will resume to that new scope.\n        return fallback;\n      }\n    } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n      // Fallback to `false` results to `false`, when falling back to different key.\n      // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n      return null;\n    }\n  }\n  return false;\n}\n\nfunction createSubResolver(\n  parentScopes: AnyObject[],\n  resolver: ResolverCache,\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set<AnyObject>();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n  set: Set<AnyObject>,\n  allScopes: AnyObject[],\n  key: ResolverObjectKey,\n  fallback: ResolverObjectKey,\n  item: unknown\n) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\n\nfunction subGetTarget(\n  resolver: ResolverCache,\n  prop: string,\n  value: unknown\n) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(\n  prop: string,\n  prefixes: string[],\n  scopes: AnyObject[],\n  proxy: ResolverProxy\n) {\n  let value: unknown;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (typeof value !== 'undefined') {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (typeof value !== 'undefined') {\n      return value;\n    }\n  }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n  const set = new Set<string>();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n  meta: ChartMeta<'line' | 'scatter'>,\n  data: AnyObject[],\n  start: number,\n  count: number\n) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array<{r: unknown}>(count);\n  let i: number, ilen: number, index: number, item: AnyObject;\n\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n  firstPoint: SplinePoint,\n  middlePoint: SplinePoint,\n  afterPoint: SplinePoint,\n  t: number\n): {\n    previous: SplinePoint\n    next: SplinePoint\n  } {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n  // This function must also respect \"skipped\" points\n\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n\n  // If all points are the same, s01 & s02 will be inf\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n\n  const fa = t * s01; // scaling factor for triangle Ta\n  const fb = t * s12;\n\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n  const pointsLen = points.length;\n\n  let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK: number[] = Array(pointsLen).fill(0);\n  const mK: number[] = Array(pointsLen);\n\n  // Calculate slopes (deltaK) and initialize tangents (mK)\n  let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n      // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n        : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n          : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n  points: SplinePoint[],\n  options,\n  area: ChartArea,\n  loop: boolean,\n  indexAxis: 'x' | 'y'\n) {\n  let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n  // Only consider points that are drawn in case the spanGaps option is used\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = (parent as ShadowRoot).host;\n  }\n  return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n  let valueInPixels: number;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n\n    if (styleValue.indexOf('%') !== -1) {\n      // percentage * size in dimension\n      valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n\n  return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n  element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n  const result = {} as ChartArea;\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n  (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n  e: Event | TouchEvent | MouseEvent,\n  canvas: HTMLCanvasElement\n): {\n    x: number;\n    y: number;\n    box: boolean;\n  } {\n  const touches = (e as TouchEvent).touches;\n  const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n  const {offsetX, offsetY} = source as MouseEvent;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n  event: Event | ChartEvent | TouchEvent | MouseEvent,\n  chart: Chart | PrivateChart\n): { x: number; y: number } {\n  if ('native' in event) {\n    return event;\n  }\n\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(event, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n  let maxWidth: number, maxHeight: number;\n\n  if (width === undefined || height === undefined) {\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect(); // this is the border box of the container\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n  canvas: HTMLCanvasElement,\n  bbWidth?: number,\n  bbHeight?: number,\n  aspectRatio?: number\n): { width: number; height: number } {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    // https://github.com/chartjs/Chart.js/issues/4659\n    // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n    height = round1(width / 2);\n  }\n\n  const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n    height = containerSize.height;\n    width = round1(Math.floor(height * aspectRatio));\n  }\n\n  return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n  chart: Chart | PrivateChart,\n  forceRatio: number,\n  forceStyle?: boolean\n): boolean | void {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n  (chart as PrivateChart).height = Math.floor(chart.height);\n  (chart as PrivateChart).width = Math.floor(chart.width);\n\n  const canvas = chart.canvas;\n\n  // If no style has been set on the canvas, the render size is used as display size,\n  // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n  // See https://github.com/chartjs/Chart.js/issues/3575\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() { // This function will be called when the browser attempts to access the passive property.\n        passiveSupported = true;\n        return false;\n      }\n    } as EventListenerOptions;\n\n    if (_isDomSupported()) {\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    }\n  } catch (e) {\n    // continue regardless of error\n  }\n  return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n  element: HTMLElement,\n  property: 'width' | 'height'\n): number | undefined {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n  p1: Point,\n  p2: Point,\n  t: number, mode: 'middle' | 'after' | unknown\n) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n      : mode === 'after' ? t < 1 ? p1.y : p2.y\n        : t > 0 ? p2.y : p1.y\n  };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n","export interface RTLAdapter {\n  x(x: number): number;\n  setWidth(w: number): void;\n  textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n  xPlus(x: number, value: number): number;\n  leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) { // eslint-disable-line no-unused-vars\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      return x;\n    },\n  };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n  let style: CSSStyleDeclaration, original: [string, string];\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n\n    style.setProperty('direction', direction, 'important');\n    (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n  }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n  if (original !== undefined) {\n    delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  // eslint-disable-next-line prefer-const\n  let {start, end, loop} = segment;\n  let i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n\n    if (point.skip) {\n      continue;\n    }\n\n    value = normalize(point[property]);\n\n    if (value === prevValue) {\n      continue;\n    }\n\n    inside = between(value, startBound, endBound);\n\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n\n  return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n\n  if (loop && !spanGaps) {\n    // loop and not spanning gaps, first find a gap to start from\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  // find first non skipped point (after the first gap possibly)\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  // if we looped to count, start needs to be 0\n  start %= count;\n\n  if (loop) {\n    // loop will go past count, if start > 0\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  // end could be more than count, normalize\n  end %= count;\n\n  return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        // @ts-ignore\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n\n  return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    // Style can not start/end on a skipped point, adjust indices accordingly\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n\n  return result;\n}\n\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\n\nfunction styleChanged(style, prevStyle) {\n  if (!prevStyle) {\n    return false;\n  }\n  const cache = [];\n  const replacer = function(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n    return cache.indexOf(value);\n  };\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n  return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n  const {xScale, yScale} = meta;\n  if (xScale && yScale) {\n    return {\n      left: getSizeForArea(xScale, chartArea, 'left'),\n      right: getSizeForArea(xScale, chartArea, 'right'),\n      top: getSizeForArea(yScale, chartArea, 'top'),\n      bottom: getSizeForArea(yScale, chartArea, 'bottom')\n    };\n  }\n  return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n  const clip = meta._clip;\n  if (clip.disabled) {\n    return false;\n  }\n  const area = getDatasetArea(meta, chart.chartArea);\n\n  return {\n    left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n    right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n    top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n    bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n  };\n}\n"],"names":["noop","uid","id","isNullOrUndef","value","undefined","isArray","Array","type","Object","prototype","toString","call","slice","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","callback","fn","args","thisArg","apply","each","loopable","reverse","i","len","keys","length","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","index","clone","source","map","target","create","klen","k","isValidKey","key","indexOf","_merger","options","tval","sval","merge","sources","merger","current","mergeIf","_mergerIf","hasOwnProperty","_deprecated","scope","previous","console","warn","keyResolvers","v","x","o","y","_splitKey","parts","split","tmp","part","push","_getKeyResolver","obj","resolveObjectKey","resolver","_capitalize","str","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","size","item","has","_isClickEvent","e","PI","Math","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","range","roundedRange","round","niceRange","pow","floor","fraction","niceFraction","_factorize","result","sqrt","sort","pop","isNonPrimitive","n","Symbol","toPrimitive","isNumber","isNaN","almostWhole","rounded","_setMinAndMaxByKey","array","property","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","isFiniteNumber","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","start","end","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","hi","lo","mid","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","enumerable","forEach","method","base","res","object","unlistenArrayEvents","stub","splice","_arrayUnique","items","set","Set","from","fontString","pixelSize","fontStyle","fontFamily","requestAnimFrame","window","requestAnimationFrame","throttled","argsToUse","ticking","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","check","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","count","_sorted","iScale","vScale","_parsed","spanGaps","dataset","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","findIndex","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","assign","atEdge","t","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","m","d","easeInOutBounce","isPatternOrGradient","color","Color","getHoverColor","saturate","darken","hexString","numbers","colors","applyAnimationsDefaults","defaults","duration","easing","loop","to","describe","_fallback","_indexable","_scriptable","name","properties","active","animation","resize","show","animations","visible","hide","applyLayoutsDefaults","autoPadding","padding","top","bottom","intlCache","Map","getNumberFormat","locale","cacheKey","JSON","stringify","formatter","get","Intl","NumberFormat","formatNumber","num","format","formatters","numeric","tickValue","ticks","chart","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","includes","applyScaleDefaults","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dash","dashOffset","width","title","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","Ticks","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","startsWith","overrides","descriptors","getScope","node","root","Defaults","constructor","_descriptors","_appliers","backgroundColor","borderColor","datasets","devicePixelRatio","context","platform","getDevicePixelRatio","elements","events","font","family","style","lineHeight","weight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","override","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","appliers","toFontString","_measureText","data","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","j","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","drawPointLegend","w","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","rotate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","setRenderOpts","opts","translation","fillStyle","textAlign","textBaseline","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","h","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","match","numberOrZero","_readValueToProps","props","ret","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","parseInt","resolve","inputs","info","cacheable","_addGrace","minmax","change","keepZero","add","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","isScriptable","isIndexable","readKey","prefix","needsSubResolver","_resolveScriptable","_resolveArray","getValue","Error","join","delete","createSubResolver","arr","filter","resolveFallback","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","r","parse","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","prev","tension","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","getStyle","el","getPropertyValue","positions","getPositionedStyle","styles","suffix","pos","useOffsetPos","shadowRoot","getCanvasPosition","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","event","borderBox","boxSizing","paddings","borders","getContainerSize","maxHeight","container","clientWidth","clientHeight","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","maintainHeight","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","addEventListener","removeEventListener","readUsedSize","_pointInLine","p1","p2","_steppedInterpolation","_bezierInterpolation","cp1","cp2","c","getRightToLeftAdapter","rectX","setWidth","xPlus","leftForLtr","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","getSegment","segment","startBound","endBound","_boundSegment","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","cur","stop","_computeSegments","segmentOptions","_loop","splitByStyles","completeLoop","_fullLoop","doSplitByStyles","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","l","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","getSizeForArea","chartArea","field","getDatasetArea","getDatasetClipArea","_clip","disabled"],"mappings":"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"}
Index: node_modules/chart.js/dist/chunks/helpers.dataset.js
===================================================================
--- node_modules/chart.js/dist/chunks/helpers.dataset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chunks/helpers.dataset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2788 @@
+/*!
+ * Chart.js v4.5.0
+ * https://www.chartjs.org
+ * (c) 2025 Chart.js Contributors
+ * Released under the MIT License
+ */
+import { Color } from '@kurkle/color';
+
+/**
+ * @namespace Chart.helpers
+ */ /**
+ * An empty function that can be used, for example, for optional callback.
+ */ function noop() {
+/* noop */ }
+/**
+ * Returns a unique id, sequentially generated from a global variable.
+ */ const uid = (()=>{
+    let id = 0;
+    return ()=>id++;
+})();
+/**
+ * Returns true if `value` is neither null nor undefined, else returns false.
+ * @param value - The value to test.
+ * @since 2.7.0
+ */ function isNullOrUndef(value) {
+    return value === null || value === undefined;
+}
+/**
+ * Returns true if `value` is an array (including typed arrays), else returns false.
+ * @param value - The value to test.
+ * @function
+ */ function isArray(value) {
+    if (Array.isArray && Array.isArray(value)) {
+        return true;
+    }
+    const type = Object.prototype.toString.call(value);
+    if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {
+        return true;
+    }
+    return false;
+}
+/**
+ * Returns true if `value` is an object (excluding null), else returns false.
+ * @param value - The value to test.
+ * @since 2.7.0
+ */ function isObject(value) {
+    return value !== null && Object.prototype.toString.call(value) === '[object Object]';
+}
+/**
+ * Returns true if `value` is a finite number, else returns false
+ * @param value  - The value to test.
+ */ function isNumberFinite(value) {
+    return (typeof value === 'number' || value instanceof Number) && isFinite(+value);
+}
+/**
+ * Returns `value` if finite, else returns `defaultValue`.
+ * @param value - The value to return if defined.
+ * @param defaultValue - The value to return if `value` is not finite.
+ */ function finiteOrDefault(value, defaultValue) {
+    return isNumberFinite(value) ? value : defaultValue;
+}
+/**
+ * Returns `value` if defined, else returns `defaultValue`.
+ * @param value - The value to return if defined.
+ * @param defaultValue - The value to return if `value` is undefined.
+ */ function valueOrDefault(value, defaultValue) {
+    return typeof value === 'undefined' ? defaultValue : value;
+}
+const toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;
+const toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;
+/**
+ * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
+ * value returned by `fn`. If `fn` is not a function, this method returns undefined.
+ * @param fn - The function to call.
+ * @param args - The arguments with which `fn` should be called.
+ * @param [thisArg] - The value of `this` provided for the call to `fn`.
+ */ function callback(fn, args, thisArg) {
+    if (fn && typeof fn.call === 'function') {
+        return fn.apply(thisArg, args);
+    }
+}
+function each(loopable, fn, thisArg, reverse) {
+    let i, len, keys;
+    if (isArray(loopable)) {
+        len = loopable.length;
+        if (reverse) {
+            for(i = len - 1; i >= 0; i--){
+                fn.call(thisArg, loopable[i], i);
+            }
+        } else {
+            for(i = 0; i < len; i++){
+                fn.call(thisArg, loopable[i], i);
+            }
+        }
+    } else if (isObject(loopable)) {
+        keys = Object.keys(loopable);
+        len = keys.length;
+        for(i = 0; i < len; i++){
+            fn.call(thisArg, loopable[keys[i]], keys[i]);
+        }
+    }
+}
+/**
+ * Returns true if the `a0` and `a1` arrays have the same content, else returns false.
+ * @param a0 - The array to compare
+ * @param a1 - The array to compare
+ * @private
+ */ function _elementsEqual(a0, a1) {
+    let i, ilen, v0, v1;
+    if (!a0 || !a1 || a0.length !== a1.length) {
+        return false;
+    }
+    for(i = 0, ilen = a0.length; i < ilen; ++i){
+        v0 = a0[i];
+        v1 = a1[i];
+        if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {
+            return false;
+        }
+    }
+    return true;
+}
+/**
+ * Returns a deep copy of `source` without keeping references on objects and arrays.
+ * @param source - The value to clone.
+ */ function clone(source) {
+    if (isArray(source)) {
+        return source.map(clone);
+    }
+    if (isObject(source)) {
+        const target = Object.create(null);
+        const keys = Object.keys(source);
+        const klen = keys.length;
+        let k = 0;
+        for(; k < klen; ++k){
+            target[keys[k]] = clone(source[keys[k]]);
+        }
+        return target;
+    }
+    return source;
+}
+function isValidKey(key) {
+    return [
+        '__proto__',
+        'prototype',
+        'constructor'
+    ].indexOf(key) === -1;
+}
+/**
+ * The default merger when Chart.helpers.merge is called without merger option.
+ * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.
+ * @private
+ */ function _merger(key, target, source, options) {
+    if (!isValidKey(key)) {
+        return;
+    }
+    const tval = target[key];
+    const sval = source[key];
+    if (isObject(tval) && isObject(sval)) {
+        // eslint-disable-next-line @typescript-eslint/no-use-before-define
+        merge(tval, sval, options);
+    } else {
+        target[key] = clone(sval);
+    }
+}
+function merge(target, source, options) {
+    const sources = isArray(source) ? source : [
+        source
+    ];
+    const ilen = sources.length;
+    if (!isObject(target)) {
+        return target;
+    }
+    options = options || {};
+    const merger = options.merger || _merger;
+    let current;
+    for(let i = 0; i < ilen; ++i){
+        current = sources[i];
+        if (!isObject(current)) {
+            continue;
+        }
+        const keys = Object.keys(current);
+        for(let k = 0, klen = keys.length; k < klen; ++k){
+            merger(keys[k], target, current, options);
+        }
+    }
+    return target;
+}
+function mergeIf(target, source) {
+    // eslint-disable-next-line @typescript-eslint/no-use-before-define
+    return merge(target, source, {
+        merger: _mergerIf
+    });
+}
+/**
+ * Merges source[key] in target[key] only if target[key] is undefined.
+ * @private
+ */ function _mergerIf(key, target, source) {
+    if (!isValidKey(key)) {
+        return;
+    }
+    const tval = target[key];
+    const sval = source[key];
+    if (isObject(tval) && isObject(sval)) {
+        mergeIf(tval, sval);
+    } else if (!Object.prototype.hasOwnProperty.call(target, key)) {
+        target[key] = clone(sval);
+    }
+}
+/**
+ * @private
+ */ function _deprecated(scope, value, previous, current) {
+    if (value !== undefined) {
+        console.warn(scope + ': "' + previous + '" is deprecated. Please use "' + current + '" instead');
+    }
+}
+// resolveObjectKey resolver cache
+const keyResolvers = {
+    // Chart.helpers.core resolveObjectKey should resolve empty key to root object
+    '': (v)=>v,
+    // default resolvers
+    x: (o)=>o.x,
+    y: (o)=>o.y
+};
+/**
+ * @private
+ */ function _splitKey(key) {
+    const parts = key.split('.');
+    const keys = [];
+    let tmp = '';
+    for (const part of parts){
+        tmp += part;
+        if (tmp.endsWith('\\')) {
+            tmp = tmp.slice(0, -1) + '.';
+        } else {
+            keys.push(tmp);
+            tmp = '';
+        }
+    }
+    return keys;
+}
+function _getKeyResolver(key) {
+    const keys = _splitKey(key);
+    return (obj)=>{
+        for (const k of keys){
+            if (k === '') {
+                break;
+            }
+            obj = obj && obj[k];
+        }
+        return obj;
+    };
+}
+function resolveObjectKey(obj, key) {
+    const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));
+    return resolver(obj);
+}
+/**
+ * @private
+ */ function _capitalize(str) {
+    return str.charAt(0).toUpperCase() + str.slice(1);
+}
+const defined = (value)=>typeof value !== 'undefined';
+const isFunction = (value)=>typeof value === 'function';
+// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384
+const setsEqual = (a, b)=>{
+    if (a.size !== b.size) {
+        return false;
+    }
+    for (const item of a){
+        if (!b.has(item)) {
+            return false;
+        }
+    }
+    return true;
+};
+/**
+ * @param e - The event
+ * @private
+ */ function _isClickEvent(e) {
+    return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';
+}
+
+/**
+ * @alias Chart.helpers.math
+ * @namespace
+ */ const PI = Math.PI;
+const TAU = 2 * PI;
+const PITAU = TAU + PI;
+const INFINITY = Number.POSITIVE_INFINITY;
+const RAD_PER_DEG = PI / 180;
+const HALF_PI = PI / 2;
+const QUARTER_PI = PI / 4;
+const TWO_THIRDS_PI = PI * 2 / 3;
+const log10 = Math.log10;
+const sign = Math.sign;
+function almostEquals(x, y, epsilon) {
+    return Math.abs(x - y) < epsilon;
+}
+/**
+ * Implementation of the nice number algorithm used in determining where axis labels will go
+ */ function niceNum(range) {
+    const roundedRange = Math.round(range);
+    range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;
+    const niceRange = Math.pow(10, Math.floor(log10(range)));
+    const fraction = range / niceRange;
+    const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
+    return niceFraction * niceRange;
+}
+/**
+ * Returns an array of factors sorted from 1 to sqrt(value)
+ * @private
+ */ function _factorize(value) {
+    const result = [];
+    const sqrt = Math.sqrt(value);
+    let i;
+    for(i = 1; i < sqrt; i++){
+        if (value % i === 0) {
+            result.push(i);
+            result.push(value / i);
+        }
+    }
+    if (sqrt === (sqrt | 0)) {
+        result.push(sqrt);
+    }
+    result.sort((a, b)=>a - b).pop();
+    return result;
+}
+/**
+ * Verifies that attempting to coerce n to string or number won't throw a TypeError.
+ */ function isNonPrimitive(n) {
+    return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);
+}
+function isNumber(n) {
+    return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);
+}
+function almostWhole(x, epsilon) {
+    const rounded = Math.round(x);
+    return rounded - epsilon <= x && rounded + epsilon >= x;
+}
+/**
+ * @private
+ */ function _setMinAndMaxByKey(array, target, property) {
+    let i, ilen, value;
+    for(i = 0, ilen = array.length; i < ilen; i++){
+        value = array[i][property];
+        if (!isNaN(value)) {
+            target.min = Math.min(target.min, value);
+            target.max = Math.max(target.max, value);
+        }
+    }
+}
+function toRadians(degrees) {
+    return degrees * (PI / 180);
+}
+function toDegrees(radians) {
+    return radians * (180 / PI);
+}
+/**
+ * Returns the number of decimal places
+ * i.e. the number of digits after the decimal point, of the value of this Number.
+ * @param x - A number.
+ * @returns The number of decimal places.
+ * @private
+ */ function _decimalPlaces(x) {
+    if (!isNumberFinite(x)) {
+        return;
+    }
+    let e = 1;
+    let p = 0;
+    while(Math.round(x * e) / e !== x){
+        e *= 10;
+        p++;
+    }
+    return p;
+}
+// Gets the angle from vertical upright to the point about a centre.
+function getAngleFromPoint(centrePoint, anglePoint) {
+    const distanceFromXCenter = anglePoint.x - centrePoint.x;
+    const distanceFromYCenter = anglePoint.y - centrePoint.y;
+    const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
+    let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
+    if (angle < -0.5 * PI) {
+        angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]
+    }
+    return {
+        angle,
+        distance: radialDistanceFromCenter
+    };
+}
+function distanceBetweenPoints(pt1, pt2) {
+    return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
+}
+/**
+ * Shortest distance between angles, in either direction.
+ * @private
+ */ function _angleDiff(a, b) {
+    return (a - b + PITAU) % TAU - PI;
+}
+/**
+ * Normalize angle to be between 0 and 2*PI
+ * @private
+ */ function _normalizeAngle(a) {
+    return (a % TAU + TAU) % TAU;
+}
+/**
+ * @private
+ */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {
+    const a = _normalizeAngle(angle);
+    const s = _normalizeAngle(start);
+    const e = _normalizeAngle(end);
+    const angleToStart = _normalizeAngle(s - a);
+    const angleToEnd = _normalizeAngle(e - a);
+    const startToAngle = _normalizeAngle(a - s);
+    const endToAngle = _normalizeAngle(a - e);
+    return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;
+}
+/**
+ * Limit `value` between `min` and `max`
+ * @param value
+ * @param min
+ * @param max
+ * @private
+ */ function _limitValue(value, min, max) {
+    return Math.max(min, Math.min(max, value));
+}
+/**
+ * @param {number} value
+ * @private
+ */ function _int16Range(value) {
+    return _limitValue(value, -32768, 32767);
+}
+/**
+ * @param value
+ * @param start
+ * @param end
+ * @param [epsilon]
+ * @private
+ */ function _isBetween(value, start, end, epsilon = 1e-6) {
+    return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;
+}
+
+function _lookup(table, value, cmp) {
+    cmp = cmp || ((index)=>table[index] < value);
+    let hi = table.length - 1;
+    let lo = 0;
+    let mid;
+    while(hi - lo > 1){
+        mid = lo + hi >> 1;
+        if (cmp(mid)) {
+            lo = mid;
+        } else {
+            hi = mid;
+        }
+    }
+    return {
+        lo,
+        hi
+    };
+}
+/**
+ * Binary search
+ * @param table - the table search. must be sorted!
+ * @param key - property name for the value in each entry
+ * @param value - value to find
+ * @param last - lookup last index
+ * @private
+ */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{
+        const ti = table[index][key];
+        return ti < value || ti === value && table[index + 1][key] === value;
+    } : (index)=>table[index][key] < value);
+/**
+ * Reverse binary search
+ * @param table - the table search. must be sorted!
+ * @param key - property name for the value in each entry
+ * @param value - value to find
+ * @private
+ */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);
+/**
+ * Return subset of `values` between `min` and `max` inclusive.
+ * Values are assumed to be in sorted order.
+ * @param values - sorted array of values
+ * @param min - min value
+ * @param max - max value
+ */ function _filterBetween(values, min, max) {
+    let start = 0;
+    let end = values.length;
+    while(start < end && values[start] < min){
+        start++;
+    }
+    while(end > start && values[end - 1] > max){
+        end--;
+    }
+    return start > 0 || end < values.length ? values.slice(start, end) : values;
+}
+const arrayEvents = [
+    'push',
+    'pop',
+    'shift',
+    'splice',
+    'unshift'
+];
+function listenArrayEvents(array, listener) {
+    if (array._chartjs) {
+        array._chartjs.listeners.push(listener);
+        return;
+    }
+    Object.defineProperty(array, '_chartjs', {
+        configurable: true,
+        enumerable: false,
+        value: {
+            listeners: [
+                listener
+            ]
+        }
+    });
+    arrayEvents.forEach((key)=>{
+        const method = '_onData' + _capitalize(key);
+        const base = array[key];
+        Object.defineProperty(array, key, {
+            configurable: true,
+            enumerable: false,
+            value (...args) {
+                const res = base.apply(this, args);
+                array._chartjs.listeners.forEach((object)=>{
+                    if (typeof object[method] === 'function') {
+                        object[method](...args);
+                    }
+                });
+                return res;
+            }
+        });
+    });
+}
+function unlistenArrayEvents(array, listener) {
+    const stub = array._chartjs;
+    if (!stub) {
+        return;
+    }
+    const listeners = stub.listeners;
+    const index = listeners.indexOf(listener);
+    if (index !== -1) {
+        listeners.splice(index, 1);
+    }
+    if (listeners.length > 0) {
+        return;
+    }
+    arrayEvents.forEach((key)=>{
+        delete array[key];
+    });
+    delete array._chartjs;
+}
+/**
+ * @param items
+ */ function _arrayUnique(items) {
+    const set = new Set(items);
+    if (set.size === items.length) {
+        return items;
+    }
+    return Array.from(set);
+}
+
+function fontString(pixelSize, fontStyle, fontFamily) {
+    return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;
+}
+/**
+* Request animation polyfill
+*/ const requestAnimFrame = function() {
+    if (typeof window === 'undefined') {
+        return function(callback) {
+            return callback();
+        };
+    }
+    return window.requestAnimationFrame;
+}();
+/**
+ * Throttles calling `fn` once per animation frame
+ * Latest arguments are used on the actual call
+ */ function throttled(fn, thisArg) {
+    let argsToUse = [];
+    let ticking = false;
+    return function(...args) {
+        // Save the args for use later
+        argsToUse = args;
+        if (!ticking) {
+            ticking = true;
+            requestAnimFrame.call(window, ()=>{
+                ticking = false;
+                fn.apply(thisArg, argsToUse);
+            });
+        }
+    };
+}
+/**
+ * Debounces calling `fn` for `delay` ms
+ */ function debounce(fn, delay) {
+    let timeout;
+    return function(...args) {
+        if (delay) {
+            clearTimeout(timeout);
+            timeout = setTimeout(fn, delay, args);
+        } else {
+            fn.apply(this, args);
+        }
+        return delay;
+    };
+}
+/**
+ * Converts 'start' to 'left', 'end' to 'right' and others to 'center'
+ * @private
+ */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';
+/**
+ * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`
+ * @private
+ */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;
+/**
+ * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`
+ * @private
+ */ const _textX = (align, left, right, rtl)=>{
+    const check = rtl ? 'left' : 'right';
+    return align === check ? right : align === 'center' ? (left + right) / 2 : left;
+};
+/**
+ * Return start and count of visible points.
+ * @private
+ */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {
+    const pointCount = points.length;
+    let start = 0;
+    let count = pointCount;
+    if (meta._sorted) {
+        const { iScale , vScale , _parsed  } = meta;
+        const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;
+        const axis = iScale.axis;
+        const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();
+        if (minDefined) {
+            start = Math.min(// @ts-expect-error Need to type _parsed
+            _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey
+            animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);
+            if (spanGaps) {
+                const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
+                start -= Math.max(0, distanceToDefinedLo);
+            }
+            start = _limitValue(start, 0, pointCount - 1);
+        }
+        if (maxDefined) {
+            let end = Math.max(// @ts-expect-error Need to type _parsed
+            _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey
+            animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);
+            if (spanGaps) {
+                const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));
+                end += Math.max(0, distanceToDefinedHi);
+            }
+            count = _limitValue(end, start, pointCount) - start;
+        } else {
+            count = pointCount - start;
+        }
+    }
+    return {
+        start,
+        count
+    };
+}
+/**
+ * Checks if the scale ranges have changed.
+ * @param {object} meta - dataset meta.
+ * @returns {boolean}
+ * @private
+ */ function _scaleRangesChanged(meta) {
+    const { xScale , yScale , _scaleRanges  } = meta;
+    const newRanges = {
+        xmin: xScale.min,
+        xmax: xScale.max,
+        ymin: yScale.min,
+        ymax: yScale.max
+    };
+    if (!_scaleRanges) {
+        meta._scaleRanges = newRanges;
+        return true;
+    }
+    const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;
+    Object.assign(_scaleRanges, newRanges);
+    return changed;
+}
+
+const atEdge = (t)=>t === 0 || t === 1;
+const elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));
+const elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;
+/**
+ * Easing functions adapted from Robert Penner's easing equations.
+ * @namespace Chart.helpers.easing.effects
+ * @see http://www.robertpenner.com/easing/
+ */ const effects = {
+    linear: (t)=>t,
+    easeInQuad: (t)=>t * t,
+    easeOutQuad: (t)=>-t * (t - 2),
+    easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),
+    easeInCubic: (t)=>t * t * t,
+    easeOutCubic: (t)=>(t -= 1) * t * t + 1,
+    easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),
+    easeInQuart: (t)=>t * t * t * t,
+    easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),
+    easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),
+    easeInQuint: (t)=>t * t * t * t * t,
+    easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,
+    easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),
+    easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,
+    easeOutSine: (t)=>Math.sin(t * HALF_PI),
+    easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),
+    easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),
+    easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,
+    easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),
+    easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),
+    easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),
+    easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),
+    easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),
+    easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),
+    easeInOutElastic (t) {
+        const s = 0.1125;
+        const p = 0.45;
+        return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);
+    },
+    easeInBack (t) {
+        const s = 1.70158;
+        return t * t * ((s + 1) * t - s);
+    },
+    easeOutBack (t) {
+        const s = 1.70158;
+        return (t -= 1) * t * ((s + 1) * t + s) + 1;
+    },
+    easeInOutBack (t) {
+        let s = 1.70158;
+        if ((t /= 0.5) < 1) {
+            return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));
+        }
+        return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);
+    },
+    easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),
+    easeOutBounce (t) {
+        const m = 7.5625;
+        const d = 2.75;
+        if (t < 1 / d) {
+            return m * t * t;
+        }
+        if (t < 2 / d) {
+            return m * (t -= 1.5 / d) * t + 0.75;
+        }
+        if (t < 2.5 / d) {
+            return m * (t -= 2.25 / d) * t + 0.9375;
+        }
+        return m * (t -= 2.625 / d) * t + 0.984375;
+    },
+    easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5
+};
+
+function isPatternOrGradient(value) {
+    if (value && typeof value === 'object') {
+        const type = value.toString();
+        return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';
+    }
+    return false;
+}
+function color(value) {
+    return isPatternOrGradient(value) ? value : new Color(value);
+}
+function getHoverColor(value) {
+    return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();
+}
+
+const numbers = [
+    'x',
+    'y',
+    'borderWidth',
+    'radius',
+    'tension'
+];
+const colors = [
+    'color',
+    'borderColor',
+    'backgroundColor'
+];
+function applyAnimationsDefaults(defaults) {
+    defaults.set('animation', {
+        delay: undefined,
+        duration: 1000,
+        easing: 'easeOutQuart',
+        fn: undefined,
+        from: undefined,
+        loop: undefined,
+        to: undefined,
+        type: undefined
+    });
+    defaults.describe('animation', {
+        _fallback: false,
+        _indexable: false,
+        _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'
+    });
+    defaults.set('animations', {
+        colors: {
+            type: 'color',
+            properties: colors
+        },
+        numbers: {
+            type: 'number',
+            properties: numbers
+        }
+    });
+    defaults.describe('animations', {
+        _fallback: 'animation'
+    });
+    defaults.set('transitions', {
+        active: {
+            animation: {
+                duration: 400
+            }
+        },
+        resize: {
+            animation: {
+                duration: 0
+            }
+        },
+        show: {
+            animations: {
+                colors: {
+                    from: 'transparent'
+                },
+                visible: {
+                    type: 'boolean',
+                    duration: 0
+                }
+            }
+        },
+        hide: {
+            animations: {
+                colors: {
+                    to: 'transparent'
+                },
+                visible: {
+                    type: 'boolean',
+                    easing: 'linear',
+                    fn: (v)=>v | 0
+                }
+            }
+        }
+    });
+}
+
+function applyLayoutsDefaults(defaults) {
+    defaults.set('layout', {
+        autoPadding: true,
+        padding: {
+            top: 0,
+            right: 0,
+            bottom: 0,
+            left: 0
+        }
+    });
+}
+
+const intlCache = new Map();
+function getNumberFormat(locale, options) {
+    options = options || {};
+    const cacheKey = locale + JSON.stringify(options);
+    let formatter = intlCache.get(cacheKey);
+    if (!formatter) {
+        formatter = new Intl.NumberFormat(locale, options);
+        intlCache.set(cacheKey, formatter);
+    }
+    return formatter;
+}
+function formatNumber(num, locale, options) {
+    return getNumberFormat(locale, options).format(num);
+}
+
+const formatters = {
+ values (value) {
+        return isArray(value) ?  value : '' + value;
+    },
+ numeric (tickValue, index, ticks) {
+        if (tickValue === 0) {
+            return '0';
+        }
+        const locale = this.chart.options.locale;
+        let notation;
+        let delta = tickValue;
+        if (ticks.length > 1) {
+            const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));
+            if (maxTick < 1e-4 || maxTick > 1e+15) {
+                notation = 'scientific';
+            }
+            delta = calculateDelta(tickValue, ticks);
+        }
+        const logDelta = log10(Math.abs(delta));
+        const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
+        const options = {
+            notation,
+            minimumFractionDigits: numDecimal,
+            maximumFractionDigits: numDecimal
+        };
+        Object.assign(options, this.options.ticks.format);
+        return formatNumber(tickValue, locale, options);
+    },
+ logarithmic (tickValue, index, ticks) {
+        if (tickValue === 0) {
+            return '0';
+        }
+        const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));
+        if ([
+            1,
+            2,
+            3,
+            5,
+            10,
+            15
+        ].includes(remain) || index > 0.8 * ticks.length) {
+            return formatters.numeric.call(this, tickValue, index, ticks);
+        }
+        return '';
+    }
+};
+function calculateDelta(tickValue, ticks) {
+    let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;
+    if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {
+        delta = tickValue - Math.floor(tickValue);
+    }
+    return delta;
+}
+ var Ticks = {
+    formatters
+};
+
+function applyScaleDefaults(defaults) {
+    defaults.set('scale', {
+        display: true,
+        offset: false,
+        reverse: false,
+        beginAtZero: false,
+ bounds: 'ticks',
+        clip: true,
+ grace: 0,
+        grid: {
+            display: true,
+            lineWidth: 1,
+            drawOnChartArea: true,
+            drawTicks: true,
+            tickLength: 8,
+            tickWidth: (_ctx, options)=>options.lineWidth,
+            tickColor: (_ctx, options)=>options.color,
+            offset: false
+        },
+        border: {
+            display: true,
+            dash: [],
+            dashOffset: 0.0,
+            width: 1
+        },
+        title: {
+            display: false,
+            text: '',
+            padding: {
+                top: 4,
+                bottom: 4
+            }
+        },
+        ticks: {
+            minRotation: 0,
+            maxRotation: 50,
+            mirror: false,
+            textStrokeWidth: 0,
+            textStrokeColor: '',
+            padding: 3,
+            display: true,
+            autoSkip: true,
+            autoSkipPadding: 3,
+            labelOffset: 0,
+            callback: Ticks.formatters.values,
+            minor: {},
+            major: {},
+            align: 'center',
+            crossAlign: 'near',
+            showLabelBackdrop: false,
+            backdropColor: 'rgba(255, 255, 255, 0.75)',
+            backdropPadding: 2
+        }
+    });
+    defaults.route('scale.ticks', 'color', '', 'color');
+    defaults.route('scale.grid', 'color', '', 'borderColor');
+    defaults.route('scale.border', 'color', '', 'borderColor');
+    defaults.route('scale.title', 'color', '', 'color');
+    defaults.describe('scale', {
+        _fallback: false,
+        _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',
+        _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'
+    });
+    defaults.describe('scales', {
+        _fallback: 'scale'
+    });
+    defaults.describe('scale.ticks', {
+        _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',
+        _indexable: (name)=>name !== 'backdropPadding'
+    });
+}
+
+const overrides = Object.create(null);
+const descriptors = Object.create(null);
+ function getScope$1(node, key) {
+    if (!key) {
+        return node;
+    }
+    const keys = key.split('.');
+    for(let i = 0, n = keys.length; i < n; ++i){
+        const k = keys[i];
+        node = node[k] || (node[k] = Object.create(null));
+    }
+    return node;
+}
+function set(root, scope, values) {
+    if (typeof scope === 'string') {
+        return merge(getScope$1(root, scope), values);
+    }
+    return merge(getScope$1(root, ''), scope);
+}
+ class Defaults {
+    constructor(_descriptors, _appliers){
+        this.animation = undefined;
+        this.backgroundColor = 'rgba(0,0,0,0.1)';
+        this.borderColor = 'rgba(0,0,0,0.1)';
+        this.color = '#666';
+        this.datasets = {};
+        this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();
+        this.elements = {};
+        this.events = [
+            'mousemove',
+            'mouseout',
+            'click',
+            'touchstart',
+            'touchmove'
+        ];
+        this.font = {
+            family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
+            size: 12,
+            style: 'normal',
+            lineHeight: 1.2,
+            weight: null
+        };
+        this.hover = {};
+        this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);
+        this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);
+        this.hoverColor = (ctx, options)=>getHoverColor(options.color);
+        this.indexAxis = 'x';
+        this.interaction = {
+            mode: 'nearest',
+            intersect: true,
+            includeInvisible: false
+        };
+        this.maintainAspectRatio = true;
+        this.onHover = null;
+        this.onClick = null;
+        this.parsing = true;
+        this.plugins = {};
+        this.responsive = true;
+        this.scale = undefined;
+        this.scales = {};
+        this.showLine = true;
+        this.drawActiveElementsOnTop = true;
+        this.describe(_descriptors);
+        this.apply(_appliers);
+    }
+ set(scope, values) {
+        return set(this, scope, values);
+    }
+ get(scope) {
+        return getScope$1(this, scope);
+    }
+ describe(scope, values) {
+        return set(descriptors, scope, values);
+    }
+    override(scope, values) {
+        return set(overrides, scope, values);
+    }
+ route(scope, name, targetScope, targetName) {
+        const scopeObject = getScope$1(this, scope);
+        const targetScopeObject = getScope$1(this, targetScope);
+        const privateName = '_' + name;
+        Object.defineProperties(scopeObject, {
+            [privateName]: {
+                value: scopeObject[name],
+                writable: true
+            },
+            [name]: {
+                enumerable: true,
+                get () {
+                    const local = this[privateName];
+                    const target = targetScopeObject[targetName];
+                    if (isObject(local)) {
+                        return Object.assign({}, target, local);
+                    }
+                    return valueOrDefault(local, target);
+                },
+                set (value) {
+                    this[privateName] = value;
+                }
+            }
+        });
+    }
+    apply(appliers) {
+        appliers.forEach((apply)=>apply(this));
+    }
+}
+var defaults = /* #__PURE__ */ new Defaults({
+    _scriptable: (name)=>!name.startsWith('on'),
+    _indexable: (name)=>name !== 'events',
+    hover: {
+        _fallback: 'interaction'
+    },
+    interaction: {
+        _scriptable: false,
+        _indexable: false
+    }
+}, [
+    applyAnimationsDefaults,
+    applyLayoutsDefaults,
+    applyScaleDefaults
+]);
+
+/**
+ * Converts the given font object into a CSS font string.
+ * @param font - A font object.
+ * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font
+ * @private
+ */ function toFontString(font) {
+    if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {
+        return null;
+    }
+    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;
+}
+/**
+ * @private
+ */ function _measureText(ctx, data, gc, longest, string) {
+    let textWidth = data[string];
+    if (!textWidth) {
+        textWidth = data[string] = ctx.measureText(string).width;
+        gc.push(string);
+    }
+    if (textWidth > longest) {
+        longest = textWidth;
+    }
+    return longest;
+}
+/**
+ * @private
+ */ // eslint-disable-next-line complexity
+function _longestText(ctx, font, arrayOfThings, cache) {
+    cache = cache || {};
+    let data = cache.data = cache.data || {};
+    let gc = cache.garbageCollect = cache.garbageCollect || [];
+    if (cache.font !== font) {
+        data = cache.data = {};
+        gc = cache.garbageCollect = [];
+        cache.font = font;
+    }
+    ctx.save();
+    ctx.font = font;
+    let longest = 0;
+    const ilen = arrayOfThings.length;
+    let i, j, jlen, thing, nestedThing;
+    for(i = 0; i < ilen; i++){
+        thing = arrayOfThings[i];
+        // Undefined strings and arrays should not be measured
+        if (thing !== undefined && thing !== null && !isArray(thing)) {
+            longest = _measureText(ctx, data, gc, longest, thing);
+        } else if (isArray(thing)) {
+            // if it is an array lets measure each element
+            // to do maybe simplify this function a bit so we can do this more recursively?
+            for(j = 0, jlen = thing.length; j < jlen; j++){
+                nestedThing = thing[j];
+                // Undefined strings and arrays should not be measured
+                if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {
+                    longest = _measureText(ctx, data, gc, longest, nestedThing);
+                }
+            }
+        }
+    }
+    ctx.restore();
+    const gcLen = gc.length / 2;
+    if (gcLen > arrayOfThings.length) {
+        for(i = 0; i < gcLen; i++){
+            delete data[gc[i]];
+        }
+        gc.splice(0, gcLen);
+    }
+    return longest;
+}
+/**
+ * Returns the aligned pixel value to avoid anti-aliasing blur
+ * @param chart - The chart instance.
+ * @param pixel - A pixel value.
+ * @param width - The width of the element.
+ * @returns The aligned pixel value.
+ * @private
+ */ function _alignPixel(chart, pixel, width) {
+    const devicePixelRatio = chart.currentDevicePixelRatio;
+    const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;
+    return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
+}
+/**
+ * Clears the entire canvas.
+ */ function clearCanvas(canvas, ctx) {
+    if (!ctx && !canvas) {
+        return;
+    }
+    ctx = ctx || canvas.getContext('2d');
+    ctx.save();
+    // canvas.width and canvas.height do not consider the canvas transform,
+    // while clearRect does
+    ctx.resetTransform();
+    ctx.clearRect(0, 0, canvas.width, canvas.height);
+    ctx.restore();
+}
+function drawPoint(ctx, options, x, y) {
+    // eslint-disable-next-line @typescript-eslint/no-use-before-define
+    drawPointLegend(ctx, options, x, y, null);
+}
+// eslint-disable-next-line complexity
+function drawPointLegend(ctx, options, x, y, w) {
+    let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;
+    const style = options.pointStyle;
+    const rotation = options.rotation;
+    const radius = options.radius;
+    let rad = (rotation || 0) * RAD_PER_DEG;
+    if (style && typeof style === 'object') {
+        type = style.toString();
+        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {
+            ctx.save();
+            ctx.translate(x, y);
+            ctx.rotate(rad);
+            ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);
+            ctx.restore();
+            return;
+        }
+    }
+    if (isNaN(radius) || radius <= 0) {
+        return;
+    }
+    ctx.beginPath();
+    switch(style){
+        // Default includes circle
+        default:
+            if (w) {
+                ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);
+            } else {
+                ctx.arc(x, y, radius, 0, TAU);
+            }
+            ctx.closePath();
+            break;
+        case 'triangle':
+            width = w ? w / 2 : radius;
+            ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
+            rad += TWO_THIRDS_PI;
+            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
+            rad += TWO_THIRDS_PI;
+            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);
+            ctx.closePath();
+            break;
+        case 'rectRounded':
+            // NOTE: the rounded rect implementation changed to use `arc` instead of
+            // `quadraticCurveTo` since it generates better results when rect is
+            // almost a circle. 0.516 (instead of 0.5) produces results with visually
+            // closer proportion to the previous impl and it is inscribed in the
+            // circle with `radius`. For more details, see the following PRs:
+            // https://github.com/chartjs/Chart.js/issues/5597
+            // https://github.com/chartjs/Chart.js/issues/5858
+            cornerRadius = radius * 0.516;
+            size = radius - cornerRadius;
+            xOffset = Math.cos(rad + QUARTER_PI) * size;
+            xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
+            yOffset = Math.sin(rad + QUARTER_PI) * size;
+            yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);
+            ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
+            ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);
+            ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);
+            ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
+            ctx.closePath();
+            break;
+        case 'rect':
+            if (!rotation) {
+                size = Math.SQRT1_2 * radius;
+                width = w ? w / 2 : size;
+                ctx.rect(x - width, y - size, 2 * width, 2 * size);
+                break;
+            }
+            rad += QUARTER_PI;
+        /* falls through */ case 'rectRot':
+            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
+            xOffset = Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+            ctx.moveTo(x - xOffsetW, y - yOffset);
+            ctx.lineTo(x + yOffsetW, y - xOffset);
+            ctx.lineTo(x + xOffsetW, y + yOffset);
+            ctx.lineTo(x - yOffsetW, y + xOffset);
+            ctx.closePath();
+            break;
+        case 'crossRot':
+            rad += QUARTER_PI;
+        /* falls through */ case 'cross':
+            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
+            xOffset = Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+            ctx.moveTo(x - xOffsetW, y - yOffset);
+            ctx.lineTo(x + xOffsetW, y + yOffset);
+            ctx.moveTo(x + yOffsetW, y - xOffset);
+            ctx.lineTo(x - yOffsetW, y + xOffset);
+            break;
+        case 'star':
+            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
+            xOffset = Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+            ctx.moveTo(x - xOffsetW, y - yOffset);
+            ctx.lineTo(x + xOffsetW, y + yOffset);
+            ctx.moveTo(x + yOffsetW, y - xOffset);
+            ctx.lineTo(x - yOffsetW, y + xOffset);
+            rad += QUARTER_PI;
+            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);
+            xOffset = Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);
+            ctx.moveTo(x - xOffsetW, y - yOffset);
+            ctx.lineTo(x + xOffsetW, y + yOffset);
+            ctx.moveTo(x + yOffsetW, y - xOffset);
+            ctx.lineTo(x - yOffsetW, y + xOffset);
+            break;
+        case 'line':
+            xOffset = w ? w / 2 : Math.cos(rad) * radius;
+            yOffset = Math.sin(rad) * radius;
+            ctx.moveTo(x - xOffset, y - yOffset);
+            ctx.lineTo(x + xOffset, y + yOffset);
+            break;
+        case 'dash':
+            ctx.moveTo(x, y);
+            ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);
+            break;
+        case false:
+            ctx.closePath();
+            break;
+    }
+    ctx.fill();
+    if (options.borderWidth > 0) {
+        ctx.stroke();
+    }
+}
+/**
+ * Returns true if the point is inside the rectangle
+ * @param point - The point to test
+ * @param area - The rectangle
+ * @param margin - allowed margin
+ * @private
+ */ function _isPointInArea(point, area, margin) {
+    margin = margin || 0.5; // margin - default is to match rounded decimals
+    return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;
+}
+function clipArea(ctx, area) {
+    ctx.save();
+    ctx.beginPath();
+    ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
+    ctx.clip();
+}
+function unclipArea(ctx) {
+    ctx.restore();
+}
+/**
+ * @private
+ */ function _steppedLineTo(ctx, previous, target, flip, mode) {
+    if (!previous) {
+        return ctx.lineTo(target.x, target.y);
+    }
+    if (mode === 'middle') {
+        const midpoint = (previous.x + target.x) / 2.0;
+        ctx.lineTo(midpoint, previous.y);
+        ctx.lineTo(midpoint, target.y);
+    } else if (mode === 'after' !== !!flip) {
+        ctx.lineTo(previous.x, target.y);
+    } else {
+        ctx.lineTo(target.x, previous.y);
+    }
+    ctx.lineTo(target.x, target.y);
+}
+/**
+ * @private
+ */ function _bezierCurveTo(ctx, previous, target, flip) {
+    if (!previous) {
+        return ctx.lineTo(target.x, target.y);
+    }
+    ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);
+}
+function setRenderOpts(ctx, opts) {
+    if (opts.translation) {
+        ctx.translate(opts.translation[0], opts.translation[1]);
+    }
+    if (!isNullOrUndef(opts.rotation)) {
+        ctx.rotate(opts.rotation);
+    }
+    if (opts.color) {
+        ctx.fillStyle = opts.color;
+    }
+    if (opts.textAlign) {
+        ctx.textAlign = opts.textAlign;
+    }
+    if (opts.textBaseline) {
+        ctx.textBaseline = opts.textBaseline;
+    }
+}
+function decorateText(ctx, x, y, line, opts) {
+    if (opts.strikethrough || opts.underline) {
+        /**
+     * Now that IE11 support has been dropped, we can use more
+     * of the TextMetrics object. The actual bounding boxes
+     * are unflagged in Chrome, Firefox, Edge, and Safari so they
+     * can be safely used.
+     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility
+     */ const metrics = ctx.measureText(line);
+        const left = x - metrics.actualBoundingBoxLeft;
+        const right = x + metrics.actualBoundingBoxRight;
+        const top = y - metrics.actualBoundingBoxAscent;
+        const bottom = y + metrics.actualBoundingBoxDescent;
+        const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;
+        ctx.strokeStyle = ctx.fillStyle;
+        ctx.beginPath();
+        ctx.lineWidth = opts.decorationWidth || 2;
+        ctx.moveTo(left, yDecoration);
+        ctx.lineTo(right, yDecoration);
+        ctx.stroke();
+    }
+}
+function drawBackdrop(ctx, opts) {
+    const oldColor = ctx.fillStyle;
+    ctx.fillStyle = opts.color;
+    ctx.fillRect(opts.left, opts.top, opts.width, opts.height);
+    ctx.fillStyle = oldColor;
+}
+/**
+ * Render text onto the canvas
+ */ function renderText(ctx, text, x, y, font, opts = {}) {
+    const lines = isArray(text) ? text : [
+        text
+    ];
+    const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';
+    let i, line;
+    ctx.save();
+    ctx.font = font.string;
+    setRenderOpts(ctx, opts);
+    for(i = 0; i < lines.length; ++i){
+        line = lines[i];
+        if (opts.backdrop) {
+            drawBackdrop(ctx, opts.backdrop);
+        }
+        if (stroke) {
+            if (opts.strokeColor) {
+                ctx.strokeStyle = opts.strokeColor;
+            }
+            if (!isNullOrUndef(opts.strokeWidth)) {
+                ctx.lineWidth = opts.strokeWidth;
+            }
+            ctx.strokeText(line, x, y, opts.maxWidth);
+        }
+        ctx.fillText(line, x, y, opts.maxWidth);
+        decorateText(ctx, x, y, line, opts);
+        y += Number(font.lineHeight);
+    }
+    ctx.restore();
+}
+/**
+ * Add a path of a rectangle with rounded corners to the current sub-path
+ * @param ctx - Context
+ * @param rect - Bounding rect
+ */ function addRoundedRectPath(ctx, rect) {
+    const { x , y , w , h , radius  } = rect;
+    // top left arc
+    ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);
+    // line from top left to bottom left
+    ctx.lineTo(x, y + h - radius.bottomLeft);
+    // bottom left arc
+    ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
+    // line from bottom left to bottom right
+    ctx.lineTo(x + w - radius.bottomRight, y + h);
+    // bottom right arc
+    ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
+    // line from bottom right to top right
+    ctx.lineTo(x + w, y + radius.topRight);
+    // top right arc
+    ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
+    // line from top right to top left
+    ctx.lineTo(x + radius.topLeft, y);
+}
+
+const LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/;
+const FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;
+/**
+ * @alias Chart.helpers.options
+ * @namespace
+ */ /**
+ * Converts the given line height `value` in pixels for a specific font `size`.
+ * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').
+ * @param size - The font size (in pixels) used to resolve relative `value`.
+ * @returns The effective line height in pixels (size * 1.2 if value is invalid).
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height
+ * @since 2.7.0
+ */ function toLineHeight(value, size) {
+    const matches = ('' + value).match(LINE_HEIGHT);
+    if (!matches || matches[1] === 'normal') {
+        return size * 1.2;
+    }
+    value = +matches[2];
+    switch(matches[3]){
+        case 'px':
+            return value;
+        case '%':
+            value /= 100;
+            break;
+    }
+    return size * value;
+}
+const numberOrZero = (v)=>+v || 0;
+function _readValueToProps(value, props) {
+    const ret = {};
+    const objProps = isObject(props);
+    const keys = objProps ? Object.keys(props) : props;
+    const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;
+    for (const prop of keys){
+        ret[prop] = numberOrZero(read(prop));
+    }
+    return ret;
+}
+/**
+ * Converts the given value into a TRBL object.
+ * @param value - If a number, set the value to all TRBL component,
+ *  else, if an object, use defined properties and sets undefined ones to 0.
+ *  x / y are shorthands for same value for left/right and top/bottom.
+ * @returns The padding values (top, right, bottom, left)
+ * @since 3.0.0
+ */ function toTRBL(value) {
+    return _readValueToProps(value, {
+        top: 'y',
+        right: 'x',
+        bottom: 'y',
+        left: 'x'
+    });
+}
+/**
+ * Converts the given value into a TRBL corners object (similar with css border-radius).
+ * @param value - If a number, set the value to all TRBL corner components,
+ *  else, if an object, use defined properties and sets undefined ones to 0.
+ * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)
+ * @since 3.0.0
+ */ function toTRBLCorners(value) {
+    return _readValueToProps(value, [
+        'topLeft',
+        'topRight',
+        'bottomLeft',
+        'bottomRight'
+    ]);
+}
+/**
+ * Converts the given value into a padding object with pre-computed width/height.
+ * @param value - If a number, set the value to all TRBL component,
+ *  else, if an object, use defined properties and sets undefined ones to 0.
+ *  x / y are shorthands for same value for left/right and top/bottom.
+ * @returns The padding values (top, right, bottom, left, width, height)
+ * @since 2.7.0
+ */ function toPadding(value) {
+    const obj = toTRBL(value);
+    obj.width = obj.left + obj.right;
+    obj.height = obj.top + obj.bottom;
+    return obj;
+}
+/**
+ * Parses font options and returns the font object.
+ * @param options - A object that contains font options to be parsed.
+ * @param fallback - A object that contains fallback font options.
+ * @return The font object.
+ * @private
+ */ function toFont(options, fallback) {
+    options = options || {};
+    fallback = fallback || defaults.font;
+    let size = valueOrDefault(options.size, fallback.size);
+    if (typeof size === 'string') {
+        size = parseInt(size, 10);
+    }
+    let style = valueOrDefault(options.style, fallback.style);
+    if (style && !('' + style).match(FONT_STYLE)) {
+        console.warn('Invalid font style specified: "' + style + '"');
+        style = undefined;
+    }
+    const font = {
+        family: valueOrDefault(options.family, fallback.family),
+        lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),
+        size,
+        style,
+        weight: valueOrDefault(options.weight, fallback.weight),
+        string: ''
+    };
+    font.string = toFontString(font);
+    return font;
+}
+/**
+ * Evaluates the given `inputs` sequentially and returns the first defined value.
+ * @param inputs - An array of values, falling back to the last value.
+ * @param context - If defined and the current value is a function, the value
+ * is called with `context` as first argument and the result becomes the new input.
+ * @param index - If defined and the current value is an array, the value
+ * at `index` become the new input.
+ * @param info - object to return information about resolution in
+ * @param info.cacheable - Will be set to `false` if option is not cacheable.
+ * @since 2.7.0
+ */ function resolve(inputs, context, index, info) {
+    let cacheable = true;
+    let i, ilen, value;
+    for(i = 0, ilen = inputs.length; i < ilen; ++i){
+        value = inputs[i];
+        if (value === undefined) {
+            continue;
+        }
+        if (context !== undefined && typeof value === 'function') {
+            value = value(context);
+            cacheable = false;
+        }
+        if (index !== undefined && isArray(value)) {
+            value = value[index % value.length];
+            cacheable = false;
+        }
+        if (value !== undefined) {
+            if (info && !cacheable) {
+                info.cacheable = false;
+            }
+            return value;
+        }
+    }
+}
+/**
+ * @param minmax
+ * @param grace
+ * @param beginAtZero
+ * @private
+ */ function _addGrace(minmax, grace, beginAtZero) {
+    const { min , max  } = minmax;
+    const change = toDimension(grace, (max - min) / 2);
+    const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;
+    return {
+        min: keepZero(min, -Math.abs(change)),
+        max: keepZero(max, change)
+    };
+}
+function createContext(parentContext, context) {
+    return Object.assign(Object.create(parentContext), context);
+}
+
+/**
+ * Creates a Proxy for resolving raw values for options.
+ * @param scopes - The option scopes to look for values, in resolution order
+ * @param prefixes - The prefixes for values, in resolution order.
+ * @param rootScopes - The root option scopes
+ * @param fallback - Parent scopes fallback
+ * @param getTarget - callback for getting the target for changed values
+ * @returns Proxy
+ * @private
+ */ function _createResolver(scopes, prefixes = [
+    ''
+], rootScopes, fallback, getTarget = ()=>scopes[0]) {
+    const finalRootScopes = rootScopes || scopes;
+    if (typeof fallback === 'undefined') {
+        fallback = _resolve('_fallback', scopes);
+    }
+    const cache = {
+        [Symbol.toStringTag]: 'Object',
+        _cacheable: true,
+        _scopes: scopes,
+        _rootScopes: finalRootScopes,
+        _fallback: fallback,
+        _getTarget: getTarget,
+        override: (scope)=>_createResolver([
+                scope,
+                ...scopes
+            ], prefixes, finalRootScopes, fallback)
+    };
+    return new Proxy(cache, {
+        /**
+     * A trap for the delete operator.
+     */ deleteProperty (target, prop) {
+            delete target[prop]; // remove from cache
+            delete target._keys; // remove cached keys
+            delete scopes[0][prop]; // remove from top level scope
+            return true;
+        },
+        /**
+     * A trap for getting property values.
+     */ get (target, prop) {
+            return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));
+        },
+        /**
+     * A trap for Object.getOwnPropertyDescriptor.
+     * Also used by Object.hasOwnProperty.
+     */ getOwnPropertyDescriptor (target, prop) {
+            return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);
+        },
+        /**
+     * A trap for Object.getPrototypeOf.
+     */ getPrototypeOf () {
+            return Reflect.getPrototypeOf(scopes[0]);
+        },
+        /**
+     * A trap for the in operator.
+     */ has (target, prop) {
+            return getKeysFromAllScopes(target).includes(prop);
+        },
+        /**
+     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
+     */ ownKeys (target) {
+            return getKeysFromAllScopes(target);
+        },
+        /**
+     * A trap for setting property values.
+     */ set (target, prop, value) {
+            const storage = target._storage || (target._storage = getTarget());
+            target[prop] = storage[prop] = value; // set to top level scope + cache
+            delete target._keys; // remove cached keys
+            return true;
+        }
+    });
+}
+/**
+ * Returns an Proxy for resolving option values with context.
+ * @param proxy - The Proxy returned by `_createResolver`
+ * @param context - Context object for scriptable/indexable options
+ * @param subProxy - The proxy provided for scriptable options
+ * @param descriptorDefaults - Defaults for descriptors
+ * @private
+ */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {
+    const cache = {
+        _cacheable: false,
+        _proxy: proxy,
+        _context: context,
+        _subProxy: subProxy,
+        _stack: new Set(),
+        _descriptors: _descriptors(proxy, descriptorDefaults),
+        setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),
+        override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)
+    };
+    return new Proxy(cache, {
+        /**
+     * A trap for the delete operator.
+     */ deleteProperty (target, prop) {
+            delete target[prop]; // remove from cache
+            delete proxy[prop]; // remove from proxy
+            return true;
+        },
+        /**
+     * A trap for getting property values.
+     */ get (target, prop, receiver) {
+            return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));
+        },
+        /**
+     * A trap for Object.getOwnPropertyDescriptor.
+     * Also used by Object.hasOwnProperty.
+     */ getOwnPropertyDescriptor (target, prop) {
+            return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {
+                enumerable: true,
+                configurable: true
+            } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);
+        },
+        /**
+     * A trap for Object.getPrototypeOf.
+     */ getPrototypeOf () {
+            return Reflect.getPrototypeOf(proxy);
+        },
+        /**
+     * A trap for the in operator.
+     */ has (target, prop) {
+            return Reflect.has(proxy, prop);
+        },
+        /**
+     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
+     */ ownKeys () {
+            return Reflect.ownKeys(proxy);
+        },
+        /**
+     * A trap for setting property values.
+     */ set (target, prop, value) {
+            proxy[prop] = value; // set to proxy
+            delete target[prop]; // remove from cache
+            return true;
+        }
+    });
+}
+/**
+ * @private
+ */ function _descriptors(proxy, defaults = {
+    scriptable: true,
+    indexable: true
+}) {
+    const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys  } = proxy;
+    return {
+        allKeys: _allKeys,
+        scriptable: _scriptable,
+        indexable: _indexable,
+        isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,
+        isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable
+    };
+}
+const readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;
+const needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);
+function _cached(target, prop, resolve) {
+    if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {
+        return target[prop];
+    }
+    const value = resolve();
+    // cache the resolved value
+    target[prop] = value;
+    return value;
+}
+function _resolveWithContext(target, prop, receiver) {
+    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;
+    let value = _proxy[prop]; // resolve from proxy
+    // resolve with context
+    if (isFunction(value) && descriptors.isScriptable(prop)) {
+        value = _resolveScriptable(prop, value, target, receiver);
+    }
+    if (isArray(value) && value.length) {
+        value = _resolveArray(prop, value, target, descriptors.isIndexable);
+    }
+    if (needsSubResolver(prop, value)) {
+        // if the resolved value is an object, create a sub resolver for it
+        value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);
+    }
+    return value;
+}
+function _resolveScriptable(prop, getValue, target, receiver) {
+    const { _proxy , _context , _subProxy , _stack  } = target;
+    if (_stack.has(prop)) {
+        throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);
+    }
+    _stack.add(prop);
+    let value = getValue(_context, _subProxy || receiver);
+    _stack.delete(prop);
+    if (needsSubResolver(prop, value)) {
+        // When scriptable option returns an object, create a resolver on that.
+        value = createSubResolver(_proxy._scopes, _proxy, prop, value);
+    }
+    return value;
+}
+function _resolveArray(prop, value, target, isIndexable) {
+    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;
+    if (typeof _context.index !== 'undefined' && isIndexable(prop)) {
+        return value[_context.index % value.length];
+    } else if (isObject(value[0])) {
+        // Array of objects, return array or resolvers
+        const arr = value;
+        const scopes = _proxy._scopes.filter((s)=>s !== arr);
+        value = [];
+        for (const item of arr){
+            const resolver = createSubResolver(scopes, _proxy, prop, item);
+            value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));
+        }
+    }
+    return value;
+}
+function resolveFallback(fallback, prop, value) {
+    return isFunction(fallback) ? fallback(prop, value) : fallback;
+}
+const getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;
+function addScopes(set, parentScopes, key, parentFallback, value) {
+    for (const parent of parentScopes){
+        const scope = getScope(key, parent);
+        if (scope) {
+            set.add(scope);
+            const fallback = resolveFallback(scope._fallback, key, value);
+            if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {
+                // When we reach the descriptor that defines a new _fallback, return that.
+                // The fallback will resume to that new scope.
+                return fallback;
+            }
+        } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {
+            // Fallback to `false` results to `false`, when falling back to different key.
+            // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`
+            return null;
+        }
+    }
+    return false;
+}
+function createSubResolver(parentScopes, resolver, prop, value) {
+    const rootScopes = resolver._rootScopes;
+    const fallback = resolveFallback(resolver._fallback, prop, value);
+    const allScopes = [
+        ...parentScopes,
+        ...rootScopes
+    ];
+    const set = new Set();
+    set.add(value);
+    let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);
+    if (key === null) {
+        return false;
+    }
+    if (typeof fallback !== 'undefined' && fallback !== prop) {
+        key = addScopesFromKey(set, allScopes, fallback, key, value);
+        if (key === null) {
+            return false;
+        }
+    }
+    return _createResolver(Array.from(set), [
+        ''
+    ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));
+}
+function addScopesFromKey(set, allScopes, key, fallback, item) {
+    while(key){
+        key = addScopes(set, allScopes, key, fallback, item);
+    }
+    return key;
+}
+function subGetTarget(resolver, prop, value) {
+    const parent = resolver._getTarget();
+    if (!(prop in parent)) {
+        parent[prop] = {};
+    }
+    const target = parent[prop];
+    if (isArray(target) && isObject(value)) {
+        // For array of objects, the object is used to store updated values
+        return value;
+    }
+    return target || {};
+}
+function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {
+    let value;
+    for (const prefix of prefixes){
+        value = _resolve(readKey(prefix, prop), scopes);
+        if (typeof value !== 'undefined') {
+            return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;
+        }
+    }
+}
+function _resolve(key, scopes) {
+    for (const scope of scopes){
+        if (!scope) {
+            continue;
+        }
+        const value = scope[key];
+        if (typeof value !== 'undefined') {
+            return value;
+        }
+    }
+}
+function getKeysFromAllScopes(target) {
+    let keys = target._keys;
+    if (!keys) {
+        keys = target._keys = resolveKeysFromAllScopes(target._scopes);
+    }
+    return keys;
+}
+function resolveKeysFromAllScopes(scopes) {
+    const set = new Set();
+    for (const scope of scopes){
+        for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){
+            set.add(key);
+        }
+    }
+    return Array.from(set);
+}
+function _parseObjectDataRadialScale(meta, data, start, count) {
+    const { iScale  } = meta;
+    const { key ='r'  } = this._parsing;
+    const parsed = new Array(count);
+    let i, ilen, index, item;
+    for(i = 0, ilen = count; i < ilen; ++i){
+        index = i + start;
+        item = data[index];
+        parsed[i] = {
+            r: iScale.parse(resolveObjectKey(item, key), index)
+        };
+    }
+    return parsed;
+}
+
+const EPSILON = Number.EPSILON || 1e-14;
+const getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];
+const getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';
+function splineCurve(firstPoint, middlePoint, afterPoint, t) {
+    // Props to Rob Spencer at scaled innovation for his post on splining between points
+    // http://scaledinnovation.com/analytics/splines/aboutSplines.html
+    // This function must also respect "skipped" points
+    const previous = firstPoint.skip ? middlePoint : firstPoint;
+    const current = middlePoint;
+    const next = afterPoint.skip ? middlePoint : afterPoint;
+    const d01 = distanceBetweenPoints(current, previous);
+    const d12 = distanceBetweenPoints(next, current);
+    let s01 = d01 / (d01 + d12);
+    let s12 = d12 / (d01 + d12);
+    // If all points are the same, s01 & s02 will be inf
+    s01 = isNaN(s01) ? 0 : s01;
+    s12 = isNaN(s12) ? 0 : s12;
+    const fa = t * s01; // scaling factor for triangle Ta
+    const fb = t * s12;
+    return {
+        previous: {
+            x: current.x - fa * (next.x - previous.x),
+            y: current.y - fa * (next.y - previous.y)
+        },
+        next: {
+            x: current.x + fb * (next.x - previous.x),
+            y: current.y + fb * (next.y - previous.y)
+        }
+    };
+}
+/**
+ * Adjust tangents to ensure monotonic properties
+ */ function monotoneAdjust(points, deltaK, mK) {
+    const pointsLen = points.length;
+    let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;
+    let pointAfter = getPoint(points, 0);
+    for(let i = 0; i < pointsLen - 1; ++i){
+        pointCurrent = pointAfter;
+        pointAfter = getPoint(points, i + 1);
+        if (!pointCurrent || !pointAfter) {
+            continue;
+        }
+        if (almostEquals(deltaK[i], 0, EPSILON)) {
+            mK[i] = mK[i + 1] = 0;
+            continue;
+        }
+        alphaK = mK[i] / deltaK[i];
+        betaK = mK[i + 1] / deltaK[i];
+        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);
+        if (squaredMagnitude <= 9) {
+            continue;
+        }
+        tauK = 3 / Math.sqrt(squaredMagnitude);
+        mK[i] = alphaK * tauK * deltaK[i];
+        mK[i + 1] = betaK * tauK * deltaK[i];
+    }
+}
+function monotoneCompute(points, mK, indexAxis = 'x') {
+    const valueAxis = getValueAxis(indexAxis);
+    const pointsLen = points.length;
+    let delta, pointBefore, pointCurrent;
+    let pointAfter = getPoint(points, 0);
+    for(let i = 0; i < pointsLen; ++i){
+        pointBefore = pointCurrent;
+        pointCurrent = pointAfter;
+        pointAfter = getPoint(points, i + 1);
+        if (!pointCurrent) {
+            continue;
+        }
+        const iPixel = pointCurrent[indexAxis];
+        const vPixel = pointCurrent[valueAxis];
+        if (pointBefore) {
+            delta = (iPixel - pointBefore[indexAxis]) / 3;
+            pointCurrent[`cp1${indexAxis}`] = iPixel - delta;
+            pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];
+        }
+        if (pointAfter) {
+            delta = (pointAfter[indexAxis] - iPixel) / 3;
+            pointCurrent[`cp2${indexAxis}`] = iPixel + delta;
+            pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];
+        }
+    }
+}
+/**
+ * This function calculates Bézier control points in a similar way than |splineCurve|,
+ * but preserves monotonicity of the provided data and ensures no local extremums are added
+ * between the dataset discrete points due to the interpolation.
+ * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation
+ */ function splineCurveMonotone(points, indexAxis = 'x') {
+    const valueAxis = getValueAxis(indexAxis);
+    const pointsLen = points.length;
+    const deltaK = Array(pointsLen).fill(0);
+    const mK = Array(pointsLen);
+    // Calculate slopes (deltaK) and initialize tangents (mK)
+    let i, pointBefore, pointCurrent;
+    let pointAfter = getPoint(points, 0);
+    for(i = 0; i < pointsLen; ++i){
+        pointBefore = pointCurrent;
+        pointCurrent = pointAfter;
+        pointAfter = getPoint(points, i + 1);
+        if (!pointCurrent) {
+            continue;
+        }
+        if (pointAfter) {
+            const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];
+            // In the case of two points that appear at the same x pixel, slopeDeltaX is 0
+            deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;
+        }
+        mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;
+    }
+    monotoneAdjust(points, deltaK, mK);
+    monotoneCompute(points, mK, indexAxis);
+}
+function capControlPoint(pt, min, max) {
+    return Math.max(Math.min(pt, max), min);
+}
+function capBezierPoints(points, area) {
+    let i, ilen, point, inArea, inAreaPrev;
+    let inAreaNext = _isPointInArea(points[0], area);
+    for(i = 0, ilen = points.length; i < ilen; ++i){
+        inAreaPrev = inArea;
+        inArea = inAreaNext;
+        inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);
+        if (!inArea) {
+            continue;
+        }
+        point = points[i];
+        if (inAreaPrev) {
+            point.cp1x = capControlPoint(point.cp1x, area.left, area.right);
+            point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);
+        }
+        if (inAreaNext) {
+            point.cp2x = capControlPoint(point.cp2x, area.left, area.right);
+            point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);
+        }
+    }
+}
+/**
+ * @private
+ */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {
+    let i, ilen, point, controlPoints;
+    // Only consider points that are drawn in case the spanGaps option is used
+    if (options.spanGaps) {
+        points = points.filter((pt)=>!pt.skip);
+    }
+    if (options.cubicInterpolationMode === 'monotone') {
+        splineCurveMonotone(points, indexAxis);
+    } else {
+        let prev = loop ? points[points.length - 1] : points[0];
+        for(i = 0, ilen = points.length; i < ilen; ++i){
+            point = points[i];
+            controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);
+            point.cp1x = controlPoints.previous.x;
+            point.cp1y = controlPoints.previous.y;
+            point.cp2x = controlPoints.next.x;
+            point.cp2y = controlPoints.next.y;
+            prev = point;
+        }
+    }
+    if (options.capBezierPoints) {
+        capBezierPoints(points, area);
+    }
+}
+
+/**
+ * @private
+ */ function _isDomSupported() {
+    return typeof window !== 'undefined' && typeof document !== 'undefined';
+}
+/**
+ * @private
+ */ function _getParentNode(domNode) {
+    let parent = domNode.parentNode;
+    if (parent && parent.toString() === '[object ShadowRoot]') {
+        parent = parent.host;
+    }
+    return parent;
+}
+/**
+ * convert max-width/max-height values that may be percentages into a number
+ * @private
+ */ function parseMaxStyle(styleValue, node, parentProperty) {
+    let valueInPixels;
+    if (typeof styleValue === 'string') {
+        valueInPixels = parseInt(styleValue, 10);
+        if (styleValue.indexOf('%') !== -1) {
+            // percentage * size in dimension
+            valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
+        }
+    } else {
+        valueInPixels = styleValue;
+    }
+    return valueInPixels;
+}
+const getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);
+function getStyle(el, property) {
+    return getComputedStyle(el).getPropertyValue(property);
+}
+const positions = [
+    'top',
+    'right',
+    'bottom',
+    'left'
+];
+function getPositionedStyle(styles, style, suffix) {
+    const result = {};
+    suffix = suffix ? '-' + suffix : '';
+    for(let i = 0; i < 4; i++){
+        const pos = positions[i];
+        result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;
+    }
+    result.width = result.left + result.right;
+    result.height = result.top + result.bottom;
+    return result;
+}
+const useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);
+/**
+ * @param e
+ * @param canvas
+ * @returns Canvas position
+ */ function getCanvasPosition(e, canvas) {
+    const touches = e.touches;
+    const source = touches && touches.length ? touches[0] : e;
+    const { offsetX , offsetY  } = source;
+    let box = false;
+    let x, y;
+    if (useOffsetPos(offsetX, offsetY, e.target)) {
+        x = offsetX;
+        y = offsetY;
+    } else {
+        const rect = canvas.getBoundingClientRect();
+        x = source.clientX - rect.left;
+        y = source.clientY - rect.top;
+        box = true;
+    }
+    return {
+        x,
+        y,
+        box
+    };
+}
+/**
+ * Gets an event's x, y coordinates, relative to the chart area
+ * @param event
+ * @param chart
+ * @returns x and y coordinates of the event
+ */ function getRelativePosition(event, chart) {
+    if ('native' in event) {
+        return event;
+    }
+    const { canvas , currentDevicePixelRatio  } = chart;
+    const style = getComputedStyle(canvas);
+    const borderBox = style.boxSizing === 'border-box';
+    const paddings = getPositionedStyle(style, 'padding');
+    const borders = getPositionedStyle(style, 'border', 'width');
+    const { x , y , box  } = getCanvasPosition(event, canvas);
+    const xOffset = paddings.left + (box && borders.left);
+    const yOffset = paddings.top + (box && borders.top);
+    let { width , height  } = chart;
+    if (borderBox) {
+        width -= paddings.width + borders.width;
+        height -= paddings.height + borders.height;
+    }
+    return {
+        x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),
+        y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)
+    };
+}
+function getContainerSize(canvas, width, height) {
+    let maxWidth, maxHeight;
+    if (width === undefined || height === undefined) {
+        const container = canvas && _getParentNode(canvas);
+        if (!container) {
+            width = canvas.clientWidth;
+            height = canvas.clientHeight;
+        } else {
+            const rect = container.getBoundingClientRect(); // this is the border box of the container
+            const containerStyle = getComputedStyle(container);
+            const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');
+            const containerPadding = getPositionedStyle(containerStyle, 'padding');
+            width = rect.width - containerPadding.width - containerBorder.width;
+            height = rect.height - containerPadding.height - containerBorder.height;
+            maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');
+            maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');
+        }
+    }
+    return {
+        width,
+        height,
+        maxWidth: maxWidth || INFINITY,
+        maxHeight: maxHeight || INFINITY
+    };
+}
+const round1 = (v)=>Math.round(v * 10) / 10;
+// eslint-disable-next-line complexity
+function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {
+    const style = getComputedStyle(canvas);
+    const margins = getPositionedStyle(style, 'margin');
+    const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;
+    const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;
+    const containerSize = getContainerSize(canvas, bbWidth, bbHeight);
+    let { width , height  } = containerSize;
+    if (style.boxSizing === 'content-box') {
+        const borders = getPositionedStyle(style, 'border', 'width');
+        const paddings = getPositionedStyle(style, 'padding');
+        width -= paddings.width + borders.width;
+        height -= paddings.height + borders.height;
+    }
+    width = Math.max(0, width - margins.width);
+    height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);
+    width = round1(Math.min(width, maxWidth, containerSize.maxWidth));
+    height = round1(Math.min(height, maxHeight, containerSize.maxHeight));
+    if (width && !height) {
+        // https://github.com/chartjs/Chart.js/issues/4659
+        // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)
+        height = round1(width / 2);
+    }
+    const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;
+    if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {
+        height = containerSize.height;
+        width = round1(Math.floor(height * aspectRatio));
+    }
+    return {
+        width,
+        height
+    };
+}
+/**
+ * @param chart
+ * @param forceRatio
+ * @param forceStyle
+ * @returns True if the canvas context size or transformation has changed.
+ */ function retinaScale(chart, forceRatio, forceStyle) {
+    const pixelRatio = forceRatio || 1;
+    const deviceHeight = Math.floor(chart.height * pixelRatio);
+    const deviceWidth = Math.floor(chart.width * pixelRatio);
+    chart.height = Math.floor(chart.height);
+    chart.width = Math.floor(chart.width);
+    const canvas = chart.canvas;
+    // If no style has been set on the canvas, the render size is used as display size,
+    // making the chart visually bigger, so let's enforce it to the "correct" values.
+    // See https://github.com/chartjs/Chart.js/issues/3575
+    if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {
+        canvas.style.height = `${chart.height}px`;
+        canvas.style.width = `${chart.width}px`;
+    }
+    if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {
+        chart.currentDevicePixelRatio = pixelRatio;
+        canvas.height = deviceHeight;
+        canvas.width = deviceWidth;
+        chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
+        return true;
+    }
+    return false;
+}
+/**
+ * Detects support for options object argument in addEventListener.
+ * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
+ * @private
+ */ const supportsEventListenerOptions = function() {
+    let passiveSupported = false;
+    try {
+        const options = {
+            get passive () {
+                passiveSupported = true;
+                return false;
+            }
+        };
+        if (_isDomSupported()) {
+            window.addEventListener('test', null, options);
+            window.removeEventListener('test', null, options);
+        }
+    } catch (e) {
+    // continue regardless of error
+    }
+    return passiveSupported;
+}();
+/**
+ * The "used" size is the final value of a dimension property after all calculations have
+ * been performed. This method uses the computed style of `element` but returns undefined
+ * if the computed style is not expressed in pixels. That can happen in some cases where
+ * `element` has a size relative to its parent and this last one is not yet displayed,
+ * for example because of `display: none` on a parent node.
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
+ * @returns Size in pixels or undefined if unknown.
+ */ function readUsedSize(element, property) {
+    const value = getStyle(element, property);
+    const matches = value && value.match(/^(\d+)(\.\d+)?px$/);
+    return matches ? +matches[1] : undefined;
+}
+
+/**
+ * @private
+ */ function _pointInLine(p1, p2, t, mode) {
+    return {
+        x: p1.x + t * (p2.x - p1.x),
+        y: p1.y + t * (p2.y - p1.y)
+    };
+}
+/**
+ * @private
+ */ function _steppedInterpolation(p1, p2, t, mode) {
+    return {
+        x: p1.x + t * (p2.x - p1.x),
+        y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y
+    };
+}
+/**
+ * @private
+ */ function _bezierInterpolation(p1, p2, t, mode) {
+    const cp1 = {
+        x: p1.cp2x,
+        y: p1.cp2y
+    };
+    const cp2 = {
+        x: p2.cp1x,
+        y: p2.cp1y
+    };
+    const a = _pointInLine(p1, cp1, t);
+    const b = _pointInLine(cp1, cp2, t);
+    const c = _pointInLine(cp2, p2, t);
+    const d = _pointInLine(a, b, t);
+    const e = _pointInLine(b, c, t);
+    return _pointInLine(d, e, t);
+}
+
+const getRightToLeftAdapter = function(rectX, width) {
+    return {
+        x (x) {
+            return rectX + rectX + width - x;
+        },
+        setWidth (w) {
+            width = w;
+        },
+        textAlign (align) {
+            if (align === 'center') {
+                return align;
+            }
+            return align === 'right' ? 'left' : 'right';
+        },
+        xPlus (x, value) {
+            return x - value;
+        },
+        leftForLtr (x, itemWidth) {
+            return x - itemWidth;
+        }
+    };
+};
+const getLeftToRightAdapter = function() {
+    return {
+        x (x) {
+            return x;
+        },
+        setWidth (w) {},
+        textAlign (align) {
+            return align;
+        },
+        xPlus (x, value) {
+            return x + value;
+        },
+        leftForLtr (x, _itemWidth) {
+            return x;
+        }
+    };
+};
+function getRtlAdapter(rtl, rectX, width) {
+    return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();
+}
+function overrideTextDirection(ctx, direction) {
+    let style, original;
+    if (direction === 'ltr' || direction === 'rtl') {
+        style = ctx.canvas.style;
+        original = [
+            style.getPropertyValue('direction'),
+            style.getPropertyPriority('direction')
+        ];
+        style.setProperty('direction', direction, 'important');
+        ctx.prevTextDirection = original;
+    }
+}
+function restoreTextDirection(ctx, original) {
+    if (original !== undefined) {
+        delete ctx.prevTextDirection;
+        ctx.canvas.style.setProperty('direction', original[0], original[1]);
+    }
+}
+
+function propertyFn(property) {
+    if (property === 'angle') {
+        return {
+            between: _angleBetween,
+            compare: _angleDiff,
+            normalize: _normalizeAngle
+        };
+    }
+    return {
+        between: _isBetween,
+        compare: (a, b)=>a - b,
+        normalize: (x)=>x
+    };
+}
+function normalizeSegment({ start , end , count , loop , style  }) {
+    return {
+        start: start % count,
+        end: end % count,
+        loop: loop && (end - start + 1) % count === 0,
+        style
+    };
+}
+function getSegment(segment, points, bounds) {
+    const { property , start: startBound , end: endBound  } = bounds;
+    const { between , normalize  } = propertyFn(property);
+    const count = points.length;
+    let { start , end , loop  } = segment;
+    let i, ilen;
+    if (loop) {
+        start += count;
+        end += count;
+        for(i = 0, ilen = count; i < ilen; ++i){
+            if (!between(normalize(points[start % count][property]), startBound, endBound)) {
+                break;
+            }
+            start--;
+            end--;
+        }
+        start %= count;
+        end %= count;
+    }
+    if (end < start) {
+        end += count;
+    }
+    return {
+        start,
+        end,
+        loop,
+        style: segment.style
+    };
+}
+ function _boundSegment(segment, points, bounds) {
+    if (!bounds) {
+        return [
+            segment
+        ];
+    }
+    const { property , start: startBound , end: endBound  } = bounds;
+    const count = points.length;
+    const { compare , between , normalize  } = propertyFn(property);
+    const { start , end , loop , style  } = getSegment(segment, points, bounds);
+    const result = [];
+    let inside = false;
+    let subStart = null;
+    let value, point, prevValue;
+    const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;
+    const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);
+    const shouldStart = ()=>inside || startIsBefore();
+    const shouldStop = ()=>!inside || endIsBefore();
+    for(let i = start, prev = start; i <= end; ++i){
+        point = points[i % count];
+        if (point.skip) {
+            continue;
+        }
+        value = normalize(point[property]);
+        if (value === prevValue) {
+            continue;
+        }
+        inside = between(value, startBound, endBound);
+        if (subStart === null && shouldStart()) {
+            subStart = compare(value, startBound) === 0 ? i : prev;
+        }
+        if (subStart !== null && shouldStop()) {
+            result.push(normalizeSegment({
+                start: subStart,
+                end: i,
+                loop,
+                count,
+                style
+            }));
+            subStart = null;
+        }
+        prev = i;
+        prevValue = value;
+    }
+    if (subStart !== null) {
+        result.push(normalizeSegment({
+            start: subStart,
+            end,
+            loop,
+            count,
+            style
+        }));
+    }
+    return result;
+}
+ function _boundSegments(line, bounds) {
+    const result = [];
+    const segments = line.segments;
+    for(let i = 0; i < segments.length; i++){
+        const sub = _boundSegment(segments[i], line.points, bounds);
+        if (sub.length) {
+            result.push(...sub);
+        }
+    }
+    return result;
+}
+ function findStartAndEnd(points, count, loop, spanGaps) {
+    let start = 0;
+    let end = count - 1;
+    if (loop && !spanGaps) {
+        while(start < count && !points[start].skip){
+            start++;
+        }
+    }
+    while(start < count && points[start].skip){
+        start++;
+    }
+    start %= count;
+    if (loop) {
+        end += start;
+    }
+    while(end > start && points[end % count].skip){
+        end--;
+    }
+    end %= count;
+    return {
+        start,
+        end
+    };
+}
+ function solidSegments(points, start, max, loop) {
+    const count = points.length;
+    const result = [];
+    let last = start;
+    let prev = points[start];
+    let end;
+    for(end = start + 1; end <= max; ++end){
+        const cur = points[end % count];
+        if (cur.skip || cur.stop) {
+            if (!prev.skip) {
+                loop = false;
+                result.push({
+                    start: start % count,
+                    end: (end - 1) % count,
+                    loop
+                });
+                start = last = cur.stop ? end : null;
+            }
+        } else {
+            last = end;
+            if (prev.skip) {
+                start = end;
+            }
+        }
+        prev = cur;
+    }
+    if (last !== null) {
+        result.push({
+            start: start % count,
+            end: last % count,
+            loop
+        });
+    }
+    return result;
+}
+ function _computeSegments(line, segmentOptions) {
+    const points = line.points;
+    const spanGaps = line.options.spanGaps;
+    const count = points.length;
+    if (!count) {
+        return [];
+    }
+    const loop = !!line._loop;
+    const { start , end  } = findStartAndEnd(points, count, loop, spanGaps);
+    if (spanGaps === true) {
+        return splitByStyles(line, [
+            {
+                start,
+                end,
+                loop
+            }
+        ], points, segmentOptions);
+    }
+    const max = end < start ? end + count : end;
+    const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;
+    return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);
+}
+ function splitByStyles(line, segments, points, segmentOptions) {
+    if (!segmentOptions || !segmentOptions.setContext || !points) {
+        return segments;
+    }
+    return doSplitByStyles(line, segments, points, segmentOptions);
+}
+ function doSplitByStyles(line, segments, points, segmentOptions) {
+    const chartContext = line._chart.getContext();
+    const baseStyle = readStyle(line.options);
+    const { _datasetIndex: datasetIndex , options: { spanGaps  }  } = line;
+    const count = points.length;
+    const result = [];
+    let prevStyle = baseStyle;
+    let start = segments[0].start;
+    let i = start;
+    function addStyle(s, e, l, st) {
+        const dir = spanGaps ? -1 : 1;
+        if (s === e) {
+            return;
+        }
+        s += count;
+        while(points[s % count].skip){
+            s -= dir;
+        }
+        while(points[e % count].skip){
+            e += dir;
+        }
+        if (s % count !== e % count) {
+            result.push({
+                start: s % count,
+                end: e % count,
+                loop: l,
+                style: st
+            });
+            prevStyle = st;
+            start = e % count;
+        }
+    }
+    for (const segment of segments){
+        start = spanGaps ? start : segment.start;
+        let prev = points[start % count];
+        let style;
+        for(i = start + 1; i <= segment.end; i++){
+            const pt = points[i % count];
+            style = readStyle(segmentOptions.setContext(createContext(chartContext, {
+                type: 'segment',
+                p0: prev,
+                p1: pt,
+                p0DataIndex: (i - 1) % count,
+                p1DataIndex: i % count,
+                datasetIndex
+            })));
+            if (styleChanged(style, prevStyle)) {
+                addStyle(start, i - 1, segment.loop, prevStyle);
+            }
+            prev = pt;
+            prevStyle = style;
+        }
+        if (start < i - 1) {
+            addStyle(start, i - 1, segment.loop, prevStyle);
+        }
+    }
+    return result;
+}
+function readStyle(options) {
+    return {
+        backgroundColor: options.backgroundColor,
+        borderCapStyle: options.borderCapStyle,
+        borderDash: options.borderDash,
+        borderDashOffset: options.borderDashOffset,
+        borderJoinStyle: options.borderJoinStyle,
+        borderWidth: options.borderWidth,
+        borderColor: options.borderColor
+    };
+}
+function styleChanged(style, prevStyle) {
+    if (!prevStyle) {
+        return false;
+    }
+    const cache = [];
+    const replacer = function(key, value) {
+        if (!isPatternOrGradient(value)) {
+            return value;
+        }
+        if (!cache.includes(value)) {
+            cache.push(value);
+        }
+        return cache.indexOf(value);
+    };
+    return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);
+}
+
+function getSizeForArea(scale, chartArea, field) {
+    return scale.options.clip ? scale[field] : chartArea[field];
+}
+function getDatasetArea(meta, chartArea) {
+    const { xScale , yScale  } = meta;
+    if (xScale && yScale) {
+        return {
+            left: getSizeForArea(xScale, chartArea, 'left'),
+            right: getSizeForArea(xScale, chartArea, 'right'),
+            top: getSizeForArea(yScale, chartArea, 'top'),
+            bottom: getSizeForArea(yScale, chartArea, 'bottom')
+        };
+    }
+    return chartArea;
+}
+function getDatasetClipArea(chart, meta) {
+    const clip = meta._clip;
+    if (clip.disabled) {
+        return false;
+    }
+    const area = getDatasetArea(meta, chart.chartArea);
+    return {
+        left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),
+        right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),
+        top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),
+        bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)
+    };
+}
+
+export { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, getStyle as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, distanceBetweenPoints as aF, noop as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, Ticks as aM, log10 as aN, _longestText as aO, _filterBetween as aP, _lookup as aQ, isPatternOrGradient as aR, getHoverColor as aS, clone as aT, _merger as aU, _mergerIf as aV, _deprecated as aW, _splitKey as aX, toFontString as aY, splineCurve as aZ, splineCurveMonotone as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, getDatasetClipArea as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _normalizeAngle as al, _readValueToProps as am, _updateBezierControlPoints as an, _computeSegments as ao, _boundSegments as ap, _steppedInterpolation as aq, _bezierInterpolation as ar, _pointInLine as as, _steppedLineTo as at, _bezierCurveTo as au, drawPoint as av, addRoundedRectPath as aw, toTRBL as ax, toTRBLCorners as ay, _boundSegment as az, isArray as b, fontString as b0, toLineHeight as b1, PITAU as b2, INFINITY as b3, RAD_PER_DEG as b4, QUARTER_PI as b5, TWO_THIRDS_PI as b6, _angleDiff as b7, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };
+//# sourceMappingURL=helpers.dataset.js.map
Index: node_modules/chart.js/dist/chunks/helpers.dataset.js.map
===================================================================
--- node_modules/chart.js/dist/chunks/helpers.dataset.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/chunks/helpers.dataset.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"helpers.dataset.js","sources":["../../src/helpers/helpers.core.ts","../../src/helpers/helpers.math.ts","../../src/helpers/helpers.collection.ts","../../src/helpers/helpers.extras.ts","../../src/helpers/helpers.easing.ts","../../src/helpers/helpers.color.ts","../../src/core/core.animations.defaults.js","../../src/core/core.layouts.defaults.js","../../src/helpers/helpers.intl.ts","../../src/core/core.ticks.js","../../src/core/core.scale.defaults.js","../../src/core/core.defaults.js","../../src/helpers/helpers.canvas.ts","../../src/helpers/helpers.options.ts","../../src/helpers/helpers.config.ts","../../src/helpers/helpers.curve.ts","../../src/helpers/helpers.dom.ts","../../src/helpers/helpers.interpolation.ts","../../src/helpers/helpers.rtl.ts","../../src/helpers/helpers.segment.js","../../src/helpers/helpers.dataset.ts"],"sourcesContent":["/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n  /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n  let id = 0;\n  return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n  return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n  isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n  fn: T | undefined,\n  args: unknown[],\n  thisArg?: TA\n): R | undefined {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n  loopable: Record<string, T>,\n  fn: (this: TA, v: T, i: string) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[],\n  fn: (this: TA, v: T, i: number) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[] | Record<string, T>,\n  fn: (this: TA, v: T, i: any) => void,\n  thisArg?: TA,\n  reverse?: boolean\n) {\n  let i: number, len: number, keys: string[];\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n  let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n  if (isArray(source)) {\n    return source.map(clone) as unknown as T;\n  }\n\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone(source[keys[k]]);\n    }\n\n    return target;\n  }\n\n  return source;\n}\n\nfunction isValidKey(key: string) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone(sval);\n  }\n}\n\nexport interface MergeOptions {\n  merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n  target: T,\n  source: [S1, S2, S3, S4],\n  options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target as AnyObject;\n  }\n\n  options = options || {};\n  const merger = options.merger || _merger;\n  let current: AnyObject;\n\n  for (let i = 0; i < ilen; ++i) {\n    current = sources[i];\n    if (!isObject(current)) {\n      continue;\n    }\n\n    const keys = Object.keys(current);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options as AnyObject);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone(sval);\n  }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n      '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': v => v,\n  // default resolvers\n  x: o => o.x,\n  y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n  const parts = key.split('.');\n  const keys: string[] = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        // For backward compatibility:\n        // Chart.helpers.core resolveObjectKey should break at empty key\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n  return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n  const result: number[] = [];\n  const sqrt = Math.sqrt(value);\n  let i: number;\n\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) { // if value is a square number\n    result.push(sqrt);\n  }\n\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n  return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n  return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n  array: Record<string, number>[],\n  target: { min: number, max: number },\n  property: string\n) {\n  let i: number, ilen: number, value: number;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nexport function toRadians(degrees: number) {\n  return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n  return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n  if (!isFiniteNumber(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n  centrePoint: Point,\n  anglePoint: Point\n) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n  if (angle < (-0.5 * PI)) {\n    angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n  }\n\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n  return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n  return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n  return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n  table: number[],\n  value: number,\n  cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n  table: T[],\n  value: number,\n  cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n  table: unknown[],\n  value: number,\n  cmp?: (value: number) => boolean\n) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid: number;\n\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number,\n  last?: boolean\n) =>\n  _lookup(table, value, last\n    ? index => {\n      const ti = table[index][key];\n      return ti < value || ti === value && table[index + 1][key] === value;\n    }\n    : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number\n) =>\n  _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n  let start = 0;\n  let end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n  _onDataPush?(...item: T[]): void;\n  _onDataPop?(): void;\n  _onDataShift?(): void;\n  _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n  _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n\n  delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n  const set = new Set<T>(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n  fn: (...args: TArgs) => void,\n  thisArg: any,\n) {\n  let argsToUse = [] as TArgs;\n  let ticking = false;\n\n  return function(...args: TArgs) {\n    // Save the args for use later\n    argsToUse = args;\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n  let timeout;\n  return function(...args: TArgs) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count = pointCount;\n\n  if (meta._sorted) {\n    const {iScale, vScale, _parsed} = meta;\n    const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n    if (minDefined) {\n      start = Math.min(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, axis, min).lo,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n      if (spanGaps) {\n        const distanceToDefinedLo = (_parsed\n          .slice(0, start + 1)\n          .reverse()\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        start -= Math.max(0, distanceToDefinedLo);\n      }\n      start = _limitValue(start, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n      let end = Math.max(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n      if (spanGaps) {\n        const distanceToDefinedHi = (_parsed\n          .slice(end - 1)\n          .findIndex(\n            point => !isNullOrUndef(point[vScale.axis])));\n        end += Math.max(0, distanceToDefinedHi);\n      }\n      count = _limitValue(end, start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n  linear: (t: number) => t,\n\n  easeInQuad: (t: number) => t * t,\n\n  easeOutQuad: (t: number) => -t * (t - 2),\n\n  easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n\n  easeInCubic: (t: number) => t * t * t,\n\n  easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n  easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n\n  easeInQuart: (t: number) => t * t * t * t,\n\n  easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n  easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n\n  easeInQuint: (t: number) => t * t * t * t * t,\n\n  easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n  easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n  easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n  easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n  easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n  easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n  easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n  easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n  easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n  easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n  easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n  easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n  easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n  easeInOutElastic(t: number) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n\n  easeInBack(t: number) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n\n  easeOutBack(t: number) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n\n  easeInOutBack(t: number) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n\n  easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n  easeOutBounce(t: number) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n\n  easeInOutBounce: (t: number) => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n  value:\n  | string\n  | { r: number; g: number; b: number; a: number }\n  | [number, number, number]\n  | [number, number, number, number]\n): Color;\nexport function color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n  defaults.set('animation', {\n    delay: undefined,\n    duration: 1000,\n    easing: 'easeOutQuart',\n    fn: undefined,\n    from: undefined,\n    loop: undefined,\n    to: undefined,\n    type: undefined,\n  });\n\n  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n  });\n\n  defaults.set('animations', {\n    colors: {\n      type: 'color',\n      properties: colors\n    },\n    numbers: {\n      type: 'number',\n      properties: numbers\n    },\n  });\n\n  defaults.describe('animations', {\n    _fallback: 'animation',\n  });\n\n  defaults.set('transitions', {\n    active: {\n      animation: {\n        duration: 400\n      }\n    },\n    resize: {\n      animation: {\n        duration: 0\n      }\n    },\n    show: {\n      animations: {\n        colors: {\n          from: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          duration: 0 // show immediately\n        },\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n        },\n      }\n    }\n  });\n}\n","export function applyLayoutsDefaults(defaults) {\n  defaults.set('layout', {\n    autoPadding: true,\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n}\n","\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n  return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n  /**\n   * Formatter for value labels\n   * @method Chart.Ticks.formatters.values\n   * @param value the value to display\n   * @return {string|string[]} the label to display\n   */\n  values(value) {\n    return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n  },\n\n  /**\n   * Formatter for numeric ticks\n   * @method Chart.Ticks.formatters.numeric\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0'; // never show decimal places for 0\n    }\n\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n    if (ticks.length > 1) {\n      // all ticks are small or there huge numbers; use scientific notation\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    const logDelta = log10(Math.abs(delta));\n\n    // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n    // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n    // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n    //\n    // toFixed has a max of 20 decimal places\n    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n\n    return formatNumber(tickValue, locale, options);\n  },\n\n\n  /**\n   * Formatter for logarithmic ticks\n   * @method Chart.Ticks.formatters.logarithmic\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n    if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n  // Figure out how many digits to show\n  // The space between the first two ticks might be smaller than normal spacing\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    // not an integer\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 3.0.0\n     */\n    bounds: 'ticks',\n\n    clip: true,\n\n    /**\n     * Addition grace added to max and reduced from min data value.\n     * @since 3.0.0\n     */\n    grace: 0,\n\n    // grid line settings\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: (_ctx, options) => options.lineWidth,\n      tickColor: (_ctx, options) => options.color,\n      offset: false,\n    },\n\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n\n    // scale title\n    title: {\n      // display property\n      display: false,\n\n      // actual label\n      text: '',\n\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n\n    // label settings\n    ticks: {\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      textStrokeWidth: 0,\n      textStrokeColor: '',\n      padding: 3,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 3,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2,\n    }\n  });\n\n  defaults.route('scale.ticks', 'color', '', 'color');\n  defaults.route('scale.grid', 'color', '', 'borderColor');\n  defaults.route('scale.border', 'color', '', 'borderColor');\n  defaults.route('scale.title', 'color', '', 'color');\n\n  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n    _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n  });\n\n  defaults.describe('scales', {\n    _fallback: 'scale',\n  });\n\n  defaults.describe('scale.ticks', {\n    _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n    _indexable: (name) => name !== 'backdropPadding',\n  });\n}\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\n\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope(root, scope), values);\n  }\n  return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n  constructor(_descriptors, _appliers) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n\n    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n\n  /**\n\t * @param {string} scope\n\t */\n  get(scope) {\n    return getScope(this, scope);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n\n  /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t *   - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope(this, scope);\n    const targetScopeObject = getScope(this, targetScope);\n    const privateName = '_' + name;\n\n    Object.defineProperties(scopeObject, {\n      // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n\n  apply(appliers) {\n    appliers.forEach((apply) => apply(this));\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","import type {\n  Chart,\n  Point,\n  FontSpec,\n  CanvasFontSpec,\n  PointStyle,\n  RenderTextOpts,\n  BackdropOptions\n} from '../types/index.js';\nimport type {\n  TRBL,\n  SplinePoint,\n  RoundedRect,\n  TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n  ctx: CanvasRenderingContext2D,\n  data: Record<string, number>,\n  gc: string[],\n  longest: number,\n  string: string\n) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n  ctx: CanvasRenderingContext2D,\n  font: string,\n  arrayOfThings: Things,\n  cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n\n  ctx.save();\n\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n\n    // Undefined strings and arrays should not be measured\n    if (thing !== undefined && thing !== null && !isArray(thing)) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      // if it is an array lets measure each element\n      // to do maybe simplify this function a bit so we can do this more recursively?\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        // Undefined strings and arrays should not be measured\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n\n  ctx.restore();\n\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n  if (!ctx && !canvas) {\n    return;\n  }\n\n  ctx = ctx || canvas.getContext('2d');\n\n  ctx.save();\n  // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nexport interface DrawPointOptions {\n  pointStyle: PointStyle;\n  rotation?: number;\n  radius: number;\n  borderWidth: number;\n}\n\nexport function drawPoint(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number\n) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number,\n  w: number\n) {\n  let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n\n  ctx.beginPath();\n\n  switch (style) {\n  // Default includes circle\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      width = w ? w / 2 : radius;\n      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n    // NOTE: the rounded rect implementation changed to use `arc` instead of\n    // `quadraticCurveTo` since it generates better results when rect is\n    // almost a circle. 0.516 (instead of 0.5) produces results with visually\n    // closer proportion to the previous impl and it is inscribed in the\n    // circle with `radius`. For more details, see the following PRs:\n    // https://github.com/chartjs/Chart.js/issues/5597\n    // https://github.com/chartjs/Chart.js/issues/5858\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'rectRot':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'cross':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'star':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      rad += QUARTER_PI;\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n      break;\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n  point: Point,\n  area: TRBL,\n  margin?: number\n) {\n  margin = margin || 0.5; // margin - default is to match rounded decimals\n\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n  ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n  ctx: CanvasRenderingContext2D,\n  previous: Point,\n  target: Point,\n  flip?: boolean,\n  mode?: string\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n  ctx: CanvasRenderingContext2D,\n  previous: SplinePoint,\n  target: SplinePoint,\n  flip?: boolean\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\n\nfunction decorateText(\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  line: string,\n  opts: RenderTextOpts\n) {\n  if (opts.strikethrough || opts.underline) {\n    /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n  const oldColor = ctx.fillStyle;\n\n  ctx.fillStyle = opts.color as string;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n  ctx: CanvasRenderingContext2D,\n  text: string | string[],\n  x: number,\n  y: number,\n  font: CanvasFontSpec,\n  opts: RenderTextOpts = {}\n) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i: number, line: string;\n\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n\n    if (opts.backdrop) {\n      drawBackdrop(ctx, opts.backdrop);\n    }\n\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n\n    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n  ctx: CanvasRenderingContext2D,\n  rect: RoundedRect & { radius: TRBLCorners }\n) {\n  const {x, y, w, h, radius} = rect;\n\n  // top left arc\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n  // line from top left to bottom left\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n\n  // bottom left arc\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n  // line from bottom left to bottom right\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n  // bottom right arc\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n  // line from bottom right to top right\n  ctx.lineTo(x + w, y + radius.topRight);\n\n  // top right arc\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n  // line from top right to top left\n  ctx.lineTo(x + radius.topLeft, y);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n\n  value = +matches[2];\n\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n    default:\n      break;\n  }\n\n  return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n  const obj = toTRBL(value) as ChartArea;\n\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n\n  return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n  options = options || {};\n  fallback = fallback || defaults.font as FontSpec;\n\n  let size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n\n  font.string = toFontString(font);\n  return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n  let cacheable = true;\n  let i: number, ilen: number, value: unknown;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n  return Object.assign(Object.create(parentContext), context);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n  ResolverObjectKey,\n  ResolverCache,\n  ResolverProxy,\n  DescriptorDefaults,\n  Descriptor,\n  ContextCache,\n  ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  scopes: T,\n  prefixes = [''],\n  rootScopes?: R,\n  fallback?: ResolverObjectKey,\n  getTarget = () => scopes[0]\n) {\n  const finalRootScopes = rootScopes || scopes;\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache: ResolverCache<T, R> = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: finalRootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop: string) {\n      delete target[prop]; // remove from cache\n      delete target._keys; // remove cached keys\n      delete scopes[0][prop]; // remove from top level scope\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop: string) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop: string, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n      delete target._keys; // remove cached keys\n      return true;\n    }\n  }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  proxy: ResolverProxy<T, R>,\n  context: AnyObject,\n  subProxy?: ResolverProxy<T, R>,\n  descriptorDefaults?: DescriptorDefaults\n) {\n  const cache: ContextCache<T, R> = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n      delete proxy[prop]; // remove from proxy\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n      delete target[prop]; // remove from cache\n      return true;\n    }\n  }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n  proxy: ResolverCache,\n  defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n  target: AnyObject,\n  prop: string,\n  resolve: () => unknown\n) {\n  if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n    return target[prop];\n  }\n\n  const value = resolve();\n  // cache the resolved value\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(\n  target: ContextCache,\n  prop: string,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop]; // resolve from proxy\n\n  // resolve with context\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    // if the resolved value is an object, create a sub resolver for it\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\n\nfunction _resolveScriptable(\n  prop: string,\n  getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n  target: ContextCache,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  let value = getValue(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    // When scriptable option returns an object, create a resolver on that.\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\n\nfunction _resolveArray(\n  prop: string,\n  value: unknown[],\n  target: ContextCache,\n  isIndexable: (key: string) => boolean\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n  if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n    return value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    // Array of objects, return array or resolvers\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\n\nfunction resolveFallback(\n  fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n  set: Set<AnyObject>,\n  parentScopes: AnyObject[],\n  key: ResolverObjectKey,\n  parentFallback: ResolverObjectKey,\n  value: unknown\n) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n        // When we reach the descriptor that defines a new _fallback, return that.\n        // The fallback will resume to that new scope.\n        return fallback;\n      }\n    } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n      // Fallback to `false` results to `false`, when falling back to different key.\n      // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n      return null;\n    }\n  }\n  return false;\n}\n\nfunction createSubResolver(\n  parentScopes: AnyObject[],\n  resolver: ResolverCache,\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set<AnyObject>();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n  set: Set<AnyObject>,\n  allScopes: AnyObject[],\n  key: ResolverObjectKey,\n  fallback: ResolverObjectKey,\n  item: unknown\n) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\n\nfunction subGetTarget(\n  resolver: ResolverCache,\n  prop: string,\n  value: unknown\n) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(\n  prop: string,\n  prefixes: string[],\n  scopes: AnyObject[],\n  proxy: ResolverProxy\n) {\n  let value: unknown;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (typeof value !== 'undefined') {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (typeof value !== 'undefined') {\n      return value;\n    }\n  }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n  const set = new Set<string>();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n  meta: ChartMeta<'line' | 'scatter'>,\n  data: AnyObject[],\n  start: number,\n  count: number\n) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array<{r: unknown}>(count);\n  let i: number, ilen: number, index: number, item: AnyObject;\n\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n  firstPoint: SplinePoint,\n  middlePoint: SplinePoint,\n  afterPoint: SplinePoint,\n  t: number\n): {\n    previous: SplinePoint\n    next: SplinePoint\n  } {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n  // This function must also respect \"skipped\" points\n\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n\n  // If all points are the same, s01 & s02 will be inf\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n\n  const fa = t * s01; // scaling factor for triangle Ta\n  const fb = t * s12;\n\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n  const pointsLen = points.length;\n\n  let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK: number[] = Array(pointsLen).fill(0);\n  const mK: number[] = Array(pointsLen);\n\n  // Calculate slopes (deltaK) and initialize tangents (mK)\n  let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n      // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n        : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n          : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n  points: SplinePoint[],\n  options,\n  area: ChartArea,\n  loop: boolean,\n  indexAxis: 'x' | 'y'\n) {\n  let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n  // Only consider points that are drawn in case the spanGaps option is used\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = (parent as ShadowRoot).host;\n  }\n  return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n  let valueInPixels: number;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n\n    if (styleValue.indexOf('%') !== -1) {\n      // percentage * size in dimension\n      valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n\n  return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n  element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n  const result = {} as ChartArea;\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n  (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n  e: Event | TouchEvent | MouseEvent,\n  canvas: HTMLCanvasElement\n): {\n    x: number;\n    y: number;\n    box: boolean;\n  } {\n  const touches = (e as TouchEvent).touches;\n  const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n  const {offsetX, offsetY} = source as MouseEvent;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n  event: Event | ChartEvent | TouchEvent | MouseEvent,\n  chart: Chart | PrivateChart\n): { x: number; y: number } {\n  if ('native' in event) {\n    return event;\n  }\n\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(event, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n  let maxWidth: number, maxHeight: number;\n\n  if (width === undefined || height === undefined) {\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect(); // this is the border box of the container\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n  canvas: HTMLCanvasElement,\n  bbWidth?: number,\n  bbHeight?: number,\n  aspectRatio?: number\n): { width: number; height: number } {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    // https://github.com/chartjs/Chart.js/issues/4659\n    // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n    height = round1(width / 2);\n  }\n\n  const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n    height = containerSize.height;\n    width = round1(Math.floor(height * aspectRatio));\n  }\n\n  return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n  chart: Chart | PrivateChart,\n  forceRatio: number,\n  forceStyle?: boolean\n): boolean | void {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n  (chart as PrivateChart).height = Math.floor(chart.height);\n  (chart as PrivateChart).width = Math.floor(chart.width);\n\n  const canvas = chart.canvas;\n\n  // If no style has been set on the canvas, the render size is used as display size,\n  // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n  // See https://github.com/chartjs/Chart.js/issues/3575\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() { // This function will be called when the browser attempts to access the passive property.\n        passiveSupported = true;\n        return false;\n      }\n    } as EventListenerOptions;\n\n    if (_isDomSupported()) {\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    }\n  } catch (e) {\n    // continue regardless of error\n  }\n  return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n  element: HTMLElement,\n  property: 'width' | 'height'\n): number | undefined {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n  p1: Point,\n  p2: Point,\n  t: number, mode: 'middle' | 'after' | unknown\n) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n      : mode === 'after' ? t < 1 ? p1.y : p2.y\n        : t > 0 ? p2.y : p1.y\n  };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n","export interface RTLAdapter {\n  x(x: number): number;\n  setWidth(w: number): void;\n  textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n  xPlus(x: number, value: number): number;\n  leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) { // eslint-disable-line no-unused-vars\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      return x;\n    },\n  };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n  let style: CSSStyleDeclaration, original: [string, string];\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n\n    style.setProperty('direction', direction, 'important');\n    (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n  }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n  if (original !== undefined) {\n    delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  // eslint-disable-next-line prefer-const\n  let {start, end, loop} = segment;\n  let i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n\n    if (point.skip) {\n      continue;\n    }\n\n    value = normalize(point[property]);\n\n    if (value === prevValue) {\n      continue;\n    }\n\n    inside = between(value, startBound, endBound);\n\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n\n  return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n\n  if (loop && !spanGaps) {\n    // loop and not spanning gaps, first find a gap to start from\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  // find first non skipped point (after the first gap possibly)\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  // if we looped to count, start needs to be 0\n  start %= count;\n\n  if (loop) {\n    // loop will go past count, if start > 0\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  // end could be more than count, normalize\n  end %= count;\n\n  return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        // @ts-ignore\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n\n  return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    // Style can not start/end on a skipped point, adjust indices accordingly\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n\n  return result;\n}\n\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\n\nfunction styleChanged(style, prevStyle) {\n  if (!prevStyle) {\n    return false;\n  }\n  const cache = [];\n  const replacer = function(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n    return cache.indexOf(value);\n  };\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n  return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n  const {xScale, yScale} = meta;\n  if (xScale && yScale) {\n    return {\n      left: getSizeForArea(xScale, chartArea, 'left'),\n      right: getSizeForArea(xScale, chartArea, 'right'),\n      top: getSizeForArea(yScale, chartArea, 'top'),\n      bottom: getSizeForArea(yScale, chartArea, 'bottom')\n    };\n  }\n  return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n  const clip = meta._clip;\n  if (clip.disabled) {\n    return false;\n  }\n  const area = getDatasetArea(meta, chart.chartArea);\n\n  return {\n    left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n    right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n    top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n    bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n  };\n}\n"],"names":["noop","uid","id","isNullOrUndef","value","undefined","isArray","Array","type","Object","prototype","toString","call","slice","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","callback","fn","args","thisArg","apply","each","loopable","reverse","i","len","keys","length","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","index","clone","source","map","target","create","klen","k","isValidKey","key","indexOf","_merger","options","tval","sval","merge","sources","merger","current","mergeIf","_mergerIf","hasOwnProperty","_deprecated","scope","previous","console","warn","keyResolvers","v","x","o","y","_splitKey","parts","split","tmp","part","push","_getKeyResolver","obj","resolveObjectKey","resolver","_capitalize","str","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","size","item","has","_isClickEvent","e","PI","Math","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","range","roundedRange","round","niceRange","pow","floor","fraction","niceFraction","_factorize","result","sqrt","sort","pop","isNonPrimitive","n","Symbol","toPrimitive","isNumber","isNaN","almostWhole","rounded","_setMinAndMaxByKey","array","property","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","isFiniteNumber","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","start","end","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","hi","lo","mid","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","enumerable","forEach","method","base","res","object","unlistenArrayEvents","stub","splice","_arrayUnique","items","set","Set","from","fontString","pixelSize","fontStyle","fontFamily","requestAnimFrame","window","requestAnimationFrame","throttled","argsToUse","ticking","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","check","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","count","_sorted","iScale","vScale","_parsed","spanGaps","dataset","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","findIndex","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","assign","atEdge","t","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","m","d","easeInOutBounce","isPatternOrGradient","color","Color","getHoverColor","saturate","darken","hexString","numbers","colors","applyAnimationsDefaults","defaults","duration","easing","loop","to","describe","_fallback","_indexable","_scriptable","name","properties","active","animation","resize","show","animations","visible","hide","applyLayoutsDefaults","autoPadding","padding","top","bottom","intlCache","Map","getNumberFormat","locale","cacheKey","JSON","stringify","formatter","get","Intl","NumberFormat","formatNumber","num","format","formatters","numeric","tickValue","ticks","chart","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","includes","applyScaleDefaults","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dash","dashOffset","width","title","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","Ticks","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","startsWith","overrides","descriptors","getScope","node","root","Defaults","constructor","_descriptors","_appliers","backgroundColor","borderColor","datasets","devicePixelRatio","context","platform","getDevicePixelRatio","elements","events","font","family","style","lineHeight","weight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","override","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","appliers","toFontString","_measureText","data","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","j","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","drawPointLegend","w","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","rotate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","setRenderOpts","opts","translation","fillStyle","textAlign","textBaseline","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","h","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","match","numberOrZero","_readValueToProps","props","ret","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","parseInt","resolve","inputs","info","cacheable","_addGrace","minmax","change","keepZero","add","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","isScriptable","isIndexable","readKey","prefix","needsSubResolver","_resolveScriptable","_resolveArray","getValue","Error","join","delete","createSubResolver","arr","filter","resolveFallback","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","r","parse","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","prev","tension","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","getStyle","el","getPropertyValue","positions","getPositionedStyle","styles","suffix","pos","useOffsetPos","shadowRoot","getCanvasPosition","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","event","borderBox","boxSizing","paddings","borders","getContainerSize","maxHeight","container","clientWidth","clientHeight","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","maintainHeight","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","addEventListener","removeEventListener","readUsedSize","_pointInLine","p1","p2","_steppedInterpolation","_bezierInterpolation","cp1","cp2","c","getRightToLeftAdapter","rectX","setWidth","xPlus","leftForLtr","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","getSegment","segment","startBound","endBound","_boundSegment","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","cur","stop","_computeSegments","segmentOptions","_loop","splitByStyles","completeLoop","_fullLoop","doSplitByStyles","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","l","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","getSizeForArea","chartArea","field","getDatasetArea","getDatasetClipArea","_clip","disabled"],"mappings":"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"}
Index: node_modules/chart.js/dist/controllers/controller.bar.d.ts
===================================================================
--- node_modules/chart.js/dist/controllers/controller.bar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/controllers/controller.bar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+export default class BarController extends DatasetController {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static overrides: any;
+    /**
+       * Overriding primitive data parsing since we support mixed primitive/array
+       * data for float bars
+       * @protected
+       */
+    protected parsePrimitiveData(meta: any, data: any, start: any, count: any): any[];
+    /**
+       * Overriding array data parsing since we support mixed primitive/array
+       * data for float bars
+       * @protected
+       */
+    protected parseArrayData(meta: any, data: any, start: any, count: any): any[];
+    /**
+       * Overriding object data parsing since we support mixed primitive/array
+       * value-scale data for float bars
+       * @protected
+       */
+    protected parseObjectData(meta: any, data: any, start: any, count: any): any[];
+    update(mode: any): void;
+    /**
+       * Returns the stacks based on groups and bar visibility.
+       * @param {number} [last] - The dataset index
+       * @param {number} [dataIndex] - The data index of the ruler
+       * @returns {string[]} The list of stack IDs
+       * @private
+       */
+    private _getStacks;
+    /**
+       * Returns the effective number of stacks based on groups and bar visibility.
+       * @private
+       */
+    private _getStackCount;
+    _getAxisCount(): number;
+    getFirstScaleIdForIndexAxis(): string;
+    _getAxis(): string[];
+    /**
+       * Returns the stack index for the given dataset based on groups and bar visibility.
+       * @param {number} [datasetIndex] - The dataset index
+       * @param {string} [name] - The stack name to find
+     * @param {number} [dataIndex]
+       * @returns {number} The stack index
+       * @private
+       */
+    private _getStackIndex;
+    /**
+       * @private
+       */
+    private _getRuler;
+    /**
+       * Note: pixel values are not clamped to the scale area.
+       * @private
+       */
+    private _calculateBarValuePixels;
+    /**
+       * @private
+       */
+    private _calculateBarIndexPixels;
+}
+import DatasetController from "../core/core.datasetController.js";
Index: node_modules/chart.js/dist/controllers/controller.bubble.d.ts
===================================================================
--- node_modules/chart.js/dist/controllers/controller.bubble.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/controllers/controller.bubble.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+export default class BubbleController extends DatasetController {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static overrides: any;
+    /**
+       * Parse array of primitive values
+       * @protected
+       */
+    protected parsePrimitiveData(meta: any, data: any, start: any, count: any): any;
+    /**
+       * Parse array of arrays
+       * @protected
+       */
+    protected parseArrayData(meta: any, data: any, start: any, count: any): any;
+    /**
+       * Parse array of objects
+       * @protected
+       */
+    protected parseObjectData(meta: any, data: any, start: any, count: any): any;
+    /**
+       * @protected
+       */
+    protected getMaxOverflow(): number;
+    /**
+       * @protected
+       */
+    protected getLabelAndValue(index: any): {
+        label: any;
+        value: string;
+    };
+    update(mode: any): void;
+}
+import DatasetController from "../core/core.datasetController.js";
Index: node_modules/chart.js/dist/controllers/controller.doughnut.d.ts
===================================================================
--- node_modules/chart.js/dist/controllers/controller.doughnut.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/controllers/controller.doughnut.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+export default class DoughnutController extends DatasetController {
+    static id: string;
+    static descriptors: {
+        _scriptable: (name: any) => boolean;
+        _indexable: (name: any) => boolean;
+    };
+    /**
+     * @type {any}
+     */
+    static overrides: any;
+    constructor(chart: any, datasetIndex: any);
+    innerRadius: number;
+    outerRadius: number;
+    offsetX: number;
+    offsetY: number;
+    /**
+       * Override data parsing, since we are not using scales
+       */
+    parse(start: any, count: any): void;
+    /**
+       * @private
+       */
+    private _getRotation;
+    /**
+       * @private
+       */
+    private _getCircumference;
+    /**
+       * Get the maximal rotation & circumference extents
+       * across all visible datasets.
+       */
+    _getRotationExtents(): {
+        rotation: number;
+        circumference: number;
+    };
+    /**
+     * @private
+     */
+    private _circumference;
+    calculateTotal(): number;
+    calculateCircumference(value: any): number;
+    getLabelAndValue(index: any): {
+        label: any;
+        value: string;
+    };
+    getMaxBorderWidth(arcs: any): number;
+    getMaxOffset(arcs: any): number;
+    /**
+       * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly
+       * @private
+       */
+    private _getRingWeightOffset;
+    /**
+       * @private
+       */
+    private _getRingWeight;
+    /**
+       * Returns the sum of all visible data set weights.
+       * @private
+       */
+    private _getVisibleDatasetWeightTotal;
+}
+export type Chart = import('../core/core.controller.js').default;
+import DatasetController from "../core/core.datasetController.js";
Index: node_modules/chart.js/dist/controllers/controller.line.d.ts
===================================================================
--- node_modules/chart.js/dist/controllers/controller.line.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/controllers/controller.line.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+export default class LineController extends DatasetController {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static overrides: any;
+    update(mode: any): void;
+    /**
+       * @protected
+       */
+    protected getMaxOverflow(): any;
+}
+import DatasetController from "../core/core.datasetController.js";
Index: node_modules/chart.js/dist/controllers/controller.pie.d.ts
===================================================================
--- node_modules/chart.js/dist/controllers/controller.pie.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/controllers/controller.pie.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default class PieController extends DoughnutController {
+}
+import DoughnutController from "./controller.doughnut.js";
Index: node_modules/chart.js/dist/controllers/controller.polarArea.d.ts
===================================================================
--- node_modules/chart.js/dist/controllers/controller.polarArea.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/controllers/controller.polarArea.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+export default class PolarAreaController extends DatasetController {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static overrides: any;
+    constructor(chart: any, datasetIndex: any);
+    innerRadius: number;
+    outerRadius: number;
+    getLabelAndValue(index: any): {
+        label: any;
+        value: string;
+    };
+    parseObjectData(meta: any, data: any, start: any, count: any): {
+        r: unknown;
+    }[];
+    update(mode: any): void;
+    /**
+     * @protected
+     */
+    protected getMinMax(): {
+        min: number;
+        max: number;
+    };
+    /**
+       * @private
+       */
+    private _updateRadius;
+    countVisibleElements(): number;
+    /**
+       * @private
+       */
+    private _computeAngle;
+}
+import DatasetController from "../core/core.datasetController.js";
Index: node_modules/chart.js/dist/controllers/controller.radar.d.ts
===================================================================
--- node_modules/chart.js/dist/controllers/controller.radar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/controllers/controller.radar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+export default class RadarController extends DatasetController {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static overrides: any;
+    /**
+       * @protected
+       */
+    protected getLabelAndValue(index: any): {
+        label: any;
+        value: string;
+    };
+    parseObjectData(meta: any, data: any, start: any, count: any): {
+        r: unknown;
+    }[];
+    update(mode: any): void;
+}
+import DatasetController from "../core/core.datasetController.js";
Index: node_modules/chart.js/dist/controllers/controller.scatter.d.ts
===================================================================
--- node_modules/chart.js/dist/controllers/controller.scatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/controllers/controller.scatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+export default class ScatterController extends DatasetController {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static overrides: any;
+    /**
+       * @protected
+       */
+    protected getLabelAndValue(index: any): {
+        label: any;
+        value: string;
+    };
+    update(mode: any): void;
+    /**
+       * @protected
+       */
+    protected getMaxOverflow(): any;
+}
+import DatasetController from "../core/core.datasetController.js";
Index: node_modules/chart.js/dist/controllers/index.d.ts
===================================================================
--- node_modules/chart.js/dist/controllers/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/controllers/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+export { default as BarController } from "./controller.bar.js";
+export { default as BubbleController } from "./controller.bubble.js";
+export { default as DoughnutController } from "./controller.doughnut.js";
+export { default as LineController } from "./controller.line.js";
+export { default as PolarAreaController } from "./controller.polarArea.js";
+export { default as PieController } from "./controller.pie.js";
+export { default as RadarController } from "./controller.radar.js";
+export { default as ScatterController } from "./controller.scatter.js";
Index: node_modules/chart.js/dist/core/core.adapters.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.adapters.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.adapters.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+/**
+ * @namespace Chart._adapters
+ * @since 2.8.0
+ * @private
+ */
+import type { AnyObject } from '../types/basic.js';
+import type { ChartOptions } from '../types/index.js';
+export type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';
+export interface DateAdapter<T extends AnyObject = AnyObject> {
+    readonly options: T;
+    /**
+     * Will called with chart options after adapter creation.
+     */
+    init(this: DateAdapter<T>, chartOptions: ChartOptions): void;
+    /**
+     * Returns a map of time formats for the supported formatting units defined
+     * in Unit as well as 'datetime' representing a detailed date/time string.
+     */
+    formats(this: DateAdapter<T>): Record<TimeUnit | 'datetime', string>;
+    /**
+     * Parses the given `value` and return the associated timestamp.
+     * @param value - the value to parse (usually comes from the data)
+     * @param [format] - the expected data format
+     */
+    parse(this: DateAdapter<T>, value: unknown, format?: string): number | null;
+    /**
+     * Returns the formatted date in the specified `format` for a given `timestamp`.
+     * @param timestamp - the timestamp to format
+     * @param format - the date/time token
+     */
+    format(this: DateAdapter<T>, timestamp: number, format: string): string;
+    /**
+     * Adds the specified `amount` of `unit` to the given `timestamp`.
+     * @param timestamp - the input timestamp
+     * @param amount - the amount to add
+     * @param unit - the unit as string
+     */
+    add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;
+    /**
+     * Returns the number of `unit` between the given timestamps.
+     * @param a - the input timestamp (reference)
+     * @param b - the timestamp to subtract
+     * @param unit - the unit as string
+     */
+    diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;
+    /**
+     * Returns start of `unit` for the given `timestamp`.
+     * @param timestamp - the input timestamp
+     * @param unit - the unit as string
+     * @param [weekday] - the ISO day of the week with 1 being Monday
+     * and 7 being Sunday (only needed if param *unit* is `isoWeek`).
+     */
+    startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;
+    /**
+     * Returns end of `unit` for the given `timestamp`.
+     * @param timestamp - the input timestamp
+     * @param unit - the unit as string
+     */
+    endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit): number;
+}
+declare const _default: {
+    _date: {
+        new (options?: AnyObject): DateAdapter;
+        override<T extends AnyObject = AnyObject>(members: Partial<Omit<DateAdapter<T>, "options">>): void;
+    };
+};
+export default _default;
Index: node_modules/chart.js/dist/core/core.animation.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.animation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.animation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+export default class Animation {
+    constructor(cfg: any, target: any, prop: any, to: any);
+    _active: boolean;
+    _fn: any;
+    _easing: any;
+    _start: number;
+    _duration: number;
+    _total: number;
+    _loop: boolean;
+    _target: any;
+    _prop: any;
+    _from: unknown;
+    _to: any;
+    _promises: any[];
+    active(): boolean;
+    update(cfg: any, to: any, date: any): void;
+    cancel(): void;
+    tick(date: any): void;
+    wait(): Promise<any>;
+    _notify(resolved: any): void;
+}
Index: node_modules/chart.js/dist/core/core.animations.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.animations.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.animations.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+export default class Animations {
+    constructor(chart: any, config: any);
+    _chart: any;
+    _properties: Map<any, any>;
+    configure(config: any): void;
+    /**
+       * Utility to handle animation of `options`.
+       * @private
+       */
+    private _animateOptions;
+    /**
+       * @private
+       */
+    private _createAnimations;
+    /**
+       * Update `target` properties to new values, using configured animations
+       * @param {object} target - object to update
+       * @param {object} values - new target properties
+       * @returns {boolean|undefined} - `true` if animations were started
+       **/
+    update(target: object, values: object): boolean | undefined;
+}
Index: node_modules/chart.js/dist/core/core.animations.defaults.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.animations.defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.animations.defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export function applyAnimationsDefaults(defaults: any): void;
Index: node_modules/chart.js/dist/core/core.animator.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.animator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.animator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+/**
+ * @typedef { import('./core.animation.js').default } Animation
+ * @typedef { import('./core.controller.js').default } Chart
+ */
+/**
+ * Please use the module's default export which provides a singleton instance
+ * Note: class is export for typedoc
+ */
+export class Animator {
+    _request: any;
+    _charts: Map<any, any>;
+    _running: boolean;
+    _lastDate: number;
+    /**
+       * @private
+       */
+    private _notify;
+    /**
+       * @private
+       */
+    private _refresh;
+    /**
+       * @private
+       */
+    private _update;
+    /**
+       * @private
+       */
+    private _getAnims;
+    /**
+       * @param {Chart} chart
+       * @param {string} event - event name
+       * @param {Function} cb - callback
+       */
+    listen(chart: Chart, event: string, cb: Function): void;
+    /**
+       * Add animations
+       * @param {Chart} chart
+       * @param {Animation[]} items - animations
+       */
+    add(chart: Chart, items: Animation[]): void;
+    /**
+       * Counts number of active animations for the chart
+       * @param {Chart} chart
+       */
+    has(chart: Chart): boolean;
+    /**
+       * Start animating (all charts)
+       * @param {Chart} chart
+       */
+    start(chart: Chart): void;
+    running(chart: any): boolean;
+    /**
+       * Stop all animations for the chart
+       * @param {Chart} chart
+       */
+    stop(chart: Chart): void;
+    /**
+       * Remove chart from Animator
+       * @param {Chart} chart
+       */
+    remove(chart: Chart): boolean;
+}
+declare const _default: Animator;
+export default _default;
+export type Animation = import('./core.animation.js').default;
+export type Chart = import('./core.controller.js').default;
Index: node_modules/chart.js/dist/core/core.config.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.config.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.config.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+export function getIndexAxis(type: any, options: any): any;
+export function determineAxis(id: any, ...scaleOptions: any[]): any;
+export default class Config {
+    constructor(config: any);
+    _config: any;
+    _scopeCache: Map<any, any>;
+    _resolverCache: Map<any, any>;
+    get platform(): any;
+    set type(arg: any);
+    get type(): any;
+    set data(arg: any);
+    get data(): any;
+    set options(arg: any);
+    get options(): any;
+    get plugins(): any;
+    update(): void;
+    clearCache(): void;
+    /**
+     * Returns the option scope keys for resolving dataset options.
+     * These keys do not include the dataset itself, because it is not under options.
+     * @param {string} datasetType
+     * @return {string[][]}
+     */
+    datasetScopeKeys(datasetType: string): string[][];
+    /**
+     * Returns the option scope keys for resolving dataset animation options.
+     * These keys do not include the dataset itself, because it is not under options.
+     * @param {string} datasetType
+     * @param {string} transition
+     * @return {string[][]}
+     */
+    datasetAnimationScopeKeys(datasetType: string, transition: string): string[][];
+    /**
+     * Returns the options scope keys for resolving element options that belong
+     * to an dataset. These keys do not include the dataset itself, because it
+     * is not under options.
+     * @param {string} datasetType
+     * @param {string} elementType
+     * @return {string[][]}
+     */
+    datasetElementScopeKeys(datasetType: string, elementType: string): string[][];
+    /**
+     * Returns the options scope keys for resolving plugin options.
+     * @param {{id: string, additionalOptionScopes?: string[]}} plugin
+     * @return {string[][]}
+     */
+    pluginScopeKeys(plugin: {
+        id: string;
+        additionalOptionScopes?: string[];
+    }): string[][];
+    /**
+     * @private
+     */
+    private _cachedScopes;
+    /**
+     * Resolves the objects from options and defaults for option value resolution.
+     * @param {object} mainScope - The main scope object for options
+     * @param {string[][]} keyLists - The arrays of keys in resolution order
+     * @param {boolean} [resetCache] - reset the cache for this mainScope
+     */
+    getOptionScopes(mainScope: object, keyLists: string[][], resetCache?: boolean): any;
+    /**
+     * Returns the option scopes for resolving chart options
+     * @return {object[]}
+     */
+    chartOptionScopes(): object[];
+    /**
+     * @param {object[]} scopes
+     * @param {string[]} names
+     * @param {function|object} context
+     * @param {string[]} [prefixes]
+     * @return {object}
+     */
+    resolveNamedOptions(scopes: object[], names: string[], context: Function | object, prefixes?: string[]): object;
+    /**
+     * @param {object[]} scopes
+     * @param {object} [context]
+     * @param {string[]} [prefixes]
+     * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]
+     */
+    createResolver(scopes: object[], context?: object, prefixes?: string[], descriptorDefaults?: {
+        scriptable: boolean;
+        indexable: boolean;
+        allKeys?: boolean;
+    }): any;
+}
Index: node_modules/chart.js/dist/core/core.controller.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.controller.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.controller.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,257 @@
+export default Chart;
+export type ChartEvent = import('../types/index.js').ChartEvent;
+export type Point = import('../types/index.js').Point;
+declare class Chart {
+    static defaults: import("./core.defaults.js").Defaults;
+    static instances: {};
+    static overrides: any;
+    static registry: import("./core.registry.js").Registry;
+    static version: string;
+    static getChart: (key: any) => any;
+    static register(...items: any[]): void;
+    static unregister(...items: any[]): void;
+    constructor(item: any, userConfig: any);
+    config: Config;
+    platform: any;
+    id: number;
+    ctx: any;
+    canvas: any;
+    width: any;
+    height: any;
+    _options: any;
+    _aspectRatio: any;
+    _layers: any[];
+    _metasets: any[];
+    _stacks: any;
+    boxes: any[];
+    currentDevicePixelRatio: any;
+    chartArea: any;
+    _active: any[];
+    _lastEvent: import("../types/index.js").ChartEvent;
+    _listeners: {};
+    /** @type {?{attach?: function, detach?: function, resize?: function}} */
+    _responsiveListeners: {
+        attach?: Function;
+        detach?: Function;
+        resize?: Function;
+    };
+    _sortedMetasets: any[];
+    scales: {};
+    _plugins: PluginService;
+    $proxies: {};
+    _hiddenIndices: {};
+    attached: boolean;
+    _animationsDisabled: boolean;
+    $context: {
+        chart: Chart;
+        type: string;
+    };
+    _doResize: (mode?: any) => number;
+    _dataChanges: any[];
+    get aspectRatio(): any;
+    set data(arg: any);
+    get data(): any;
+    set options(arg: any);
+    get options(): any;
+    get registry(): import("./core.registry.js").Registry;
+    /**
+       * @private
+       */
+    private _initialize;
+    clear(): Chart;
+    stop(): Chart;
+    /**
+       * Resize the chart to its container or to explicit dimensions.
+       * @param {number} [width]
+       * @param {number} [height]
+       */
+    resize(width?: number, height?: number): void;
+    _resizeBeforeDraw: {
+        width: number;
+        height: number;
+    };
+    _resize(width: any, height: any): void;
+    ensureScalesHaveIDs(): void;
+    /**
+       * Builds a map of scale ID to scale object for future lookup.
+       */
+    buildOrUpdateScales(): void;
+    /**
+       * @private
+       */
+    private _updateMetasets;
+    /**
+       * @private
+       */
+    private _removeUnreferencedMetasets;
+    buildOrUpdateControllers(): any[];
+    /**
+       * Reset the elements of all datasets
+       * @private
+       */
+    private _resetElements;
+    /**
+      * Resets the chart back to its state before the initial animation
+      */
+    reset(): void;
+    update(mode: any): void;
+    _minPadding: number;
+    /**
+     * @private
+     */
+    private _updateScales;
+    /**
+     * @private
+     */
+    private _checkEventBindings;
+    /**
+     * @private
+     */
+    private _updateHiddenIndices;
+    /**
+     * @private
+     */
+    private _getUniformDataChanges;
+    /**
+       * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`
+       * hook, in which case, plugins will not be called on `afterLayout`.
+       * @private
+       */
+    private _updateLayout;
+    /**
+       * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`
+       * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.
+       * @private
+       */
+    private _updateDatasets;
+    /**
+       * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`
+       * hook, in which case, plugins will not be called on `afterDatasetUpdate`.
+       * @private
+       */
+    private _updateDataset;
+    render(): void;
+    draw(): void;
+    /**
+       * @private
+       */
+    private _getSortedDatasetMetas;
+    /**
+       * Gets the visible dataset metas in drawing order
+       * @return {object[]}
+       */
+    getSortedVisibleDatasetMetas(): object[];
+    /**
+       * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`
+       * hook, in which case, plugins will not be called on `afterDatasetsDraw`.
+       * @private
+       */
+    private _drawDatasets;
+    /**
+       * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`
+       * hook, in which case, plugins will not be called on `afterDatasetDraw`.
+       * @private
+       */
+    private _drawDataset;
+    /**
+     * Checks whether the given point is in the chart area.
+     * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)
+     * @returns {boolean}
+     */
+    isPointInArea(point: Point): boolean;
+    getElementsAtEventForMode(e: any, mode: any, options: any, useFinalPosition: any): any;
+    getDatasetMeta(datasetIndex: any): any;
+    getContext(): {
+        chart: Chart;
+        type: string;
+    };
+    getVisibleDatasetCount(): number;
+    isDatasetVisible(datasetIndex: any): boolean;
+    setDatasetVisibility(datasetIndex: any, visible: any): void;
+    toggleDataVisibility(index: any): void;
+    getDataVisibility(index: any): boolean;
+    /**
+       * @private
+       */
+    private _updateVisibility;
+    hide(datasetIndex: any, dataIndex: any): void;
+    show(datasetIndex: any, dataIndex: any): void;
+    /**
+       * @private
+       */
+    private _destroyDatasetMeta;
+    _stop(): void;
+    destroy(): void;
+    toBase64Image(...args: any[]): any;
+    /**
+       * @private
+       */
+    private bindEvents;
+    /**
+     * @private
+     */
+    private bindUserEvents;
+    /**
+     * @private
+     */
+    private bindResponsiveEvents;
+    /**
+       * @private
+       */
+    private unbindEvents;
+    updateHoverStyle(items: any, mode: any, enabled: any): void;
+    /**
+       * Get active (hovered) elements
+       * @returns array
+       */
+    getActiveElements(): any[];
+    /**
+       * Set active (hovered) elements
+       * @param {array} activeElements New active data points
+       */
+    setActiveElements(activeElements: any[]): void;
+    /**
+       * Calls enabled plugins on the specified hook and with the given args.
+       * This method immediately returns as soon as a plugin explicitly returns false. The
+       * returned value can be used, for instance, to interrupt the current action.
+       * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').
+       * @param {Object} [args] - Extra arguments to apply to the hook call.
+     * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified
+       * @returns {boolean} false if any of the plugins return false, else returns true.
+       */
+    notifyPlugins(hook: string, args?: any, filter?: import('./core.plugins.js').filterCallback): boolean;
+    /**
+     * Check if a plugin with the specific ID is registered and enabled
+     * @param {string} pluginId - The ID of the plugin of which to check if it is enabled
+     * @returns {boolean}
+     */
+    isPluginEnabled(pluginId: string): boolean;
+    /**
+       * @private
+       */
+    private _updateHoverStyles;
+    /**
+       * @private
+       */
+    private _eventHandler;
+    /**
+       * Handle an event
+       * @param {ChartEvent} e the event to handle
+       * @param {boolean} [replay] - true if the event was replayed by `update`
+     * @param {boolean} [inChartArea] - true if the event is inside chartArea
+       * @return {boolean} true if the chart needs to re-render
+       * @private
+       */
+    private _handleEvent;
+    /**
+     * @param {ChartEvent} e - The event
+     * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements
+     * @param {boolean} inChartArea - Is the event inside chartArea
+     * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions
+     * @returns {import('../types/index.js').ActiveElement[]} - The active elements
+     * @pravate
+     */
+    _getActiveElements(e: ChartEvent, lastActive: import('../types/index.js').ActiveElement[], inChartArea: boolean, useFinalPosition: boolean): import('../types/index.js').ActiveElement[];
+}
+import Config from "./core.config.js";
+import PluginService from "./core.plugins.js";
Index: node_modules/chart.js/dist/core/core.datasetController.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.datasetController.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.datasetController.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,251 @@
+export default class DatasetController {
+    /**
+     * @type {any}
+     */
+    static defaults: any;
+    /**
+     * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).
+     */
+    static datasetElementType: any;
+    /**
+     * Element type used to generate a meta data (e.g. Chart.element.PointElement).
+     */
+    static dataElementType: any;
+    /**
+       * @param {Chart} chart
+       * @param {number} datasetIndex
+       */
+    constructor(chart: Chart, datasetIndex: number);
+    chart: import("./core.controller.js").default;
+    _ctx: any;
+    index: number;
+    _cachedDataOpts: {};
+    _cachedMeta: any;
+    _type: any;
+    options: any;
+    /** @type {boolean | object} */
+    _parsing: boolean | object;
+    _data: any;
+    _objectData: any;
+    _sharedOptions: any;
+    _drawStart: any;
+    _drawCount: any;
+    enableOptionSharing: boolean;
+    supportsDecimation: boolean;
+    $context: any;
+    _syncList: any[];
+    datasetElementType: any;
+    dataElementType: any;
+    initialize(): void;
+    updateIndex(datasetIndex: any): void;
+    linkScales(): void;
+    getDataset(): any;
+    getMeta(): any;
+    /**
+       * @param {string} scaleID
+       * @return {Scale}
+       */
+    getScaleForId(scaleID: string): Scale;
+    /**
+       * @private
+       */
+    private _getOtherScale;
+    reset(): void;
+    /**
+       * @private
+       */
+    private _destroy;
+    /**
+       * @private
+       */
+    private _dataCheck;
+    addElements(): void;
+    buildOrUpdateElements(resetNewElements: any): void;
+    /**
+       * Merges user-supplied and default dataset-level options
+       * @private
+       */
+    private configure;
+    /**
+       * @param {number} start
+       * @param {number} count
+       */
+    parse(start: number, count: number): void;
+    /**
+       * Parse array of primitive values
+       * @param {object} meta - dataset meta
+       * @param {array} data - data array. Example [1,3,4]
+       * @param {number} start - start index
+       * @param {number} count - number of items to parse
+       * @returns {object} parsed item - item containing index and a parsed value
+       * for each scale id.
+       * Example: {xScale0: 0, yScale0: 1}
+       * @protected
+       */
+    protected parsePrimitiveData(meta: object, data: any[], start: number, count: number): object;
+    /**
+       * Parse array of arrays
+       * @param {object} meta - dataset meta
+       * @param {array} data - data array. Example [[1,2],[3,4]]
+       * @param {number} start - start index
+       * @param {number} count - number of items to parse
+       * @returns {object} parsed item - item containing index and a parsed value
+       * for each scale id.
+       * Example: {x: 0, y: 1}
+       * @protected
+       */
+    protected parseArrayData(meta: object, data: any[], start: number, count: number): object;
+    /**
+       * Parse array of objects
+       * @param {object} meta - dataset meta
+       * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]
+       * @param {number} start - start index
+       * @param {number} count - number of items to parse
+       * @returns {object} parsed item - item containing index and a parsed value
+       * for each scale id. _custom is optional
+       * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}
+       * @protected
+       */
+    protected parseObjectData(meta: object, data: any[], start: number, count: number): object;
+    /**
+       * @protected
+       */
+    protected getParsed(index: any): any;
+    /**
+       * @protected
+       */
+    protected getDataElement(index: any): any;
+    /**
+       * @protected
+       */
+    protected applyStack(scale: any, parsed: any, mode: any): any;
+    /**
+       * @protected
+       */
+    protected updateRangeFromParsed(range: any, scale: any, parsed: any, stack: any): void;
+    /**
+       * @protected
+       */
+    protected getMinMax(scale: any, canStack: any): {
+        min: number;
+        max: number;
+    };
+    getAllParsedValues(scale: any): number[];
+    /**
+       * @return {number|boolean}
+       * @protected
+       */
+    protected getMaxOverflow(): number | boolean;
+    /**
+       * @protected
+       */
+    protected getLabelAndValue(index: any): {
+        label: string;
+        value: string;
+    };
+    /**
+       * @private
+       */
+    private _update;
+    /**
+       * @param {string} mode
+       */
+    update(mode: string): void;
+    draw(): void;
+    /**
+       * Returns a set of predefined style properties that should be used to represent the dataset
+       * or the data if the index is specified
+       * @param {number} index - data index
+       * @param {boolean} [active] - true if hover
+       * @return {object} style object
+       */
+    getStyle(index: number, active?: boolean): object;
+    /**
+       * @protected
+       */
+    protected getContext(index: any, active: any, mode: any): any;
+    /**
+       * @param {string} [mode]
+       * @protected
+       */
+    protected resolveDatasetElementOptions(mode?: string): any;
+    /**
+       * @param {number} index
+       * @param {string} [mode]
+       * @protected
+       */
+    protected resolveDataElementOptions(index: number, mode?: string): any;
+    /**
+       * @private
+       */
+    private _resolveElementOptions;
+    /**
+       * @private
+       */
+    private _resolveAnimations;
+    /**
+       * Utility for getting the options object shared between elements
+       * @protected
+       */
+    protected getSharedOptions(options: any): any;
+    /**
+       * Utility for determining if `options` should be included in the updated properties
+       * @protected
+       */
+    protected includeOptions(mode: any, sharedOptions: any): boolean;
+    /**
+     * @todo v4, rename to getSharedOptions and remove excess functions
+     */
+    _getSharedOptions(start: any, mode: any): {
+        sharedOptions: any;
+        includeOptions: boolean;
+    };
+    /**
+       * Utility for updating an element with new properties, using animations when appropriate.
+       * @protected
+       */
+    protected updateElement(element: any, index: any, properties: any, mode: any): void;
+    /**
+       * Utility to animate the shared options, that are potentially affecting multiple elements.
+       * @protected
+       */
+    protected updateSharedOptions(sharedOptions: any, mode: any, newOptions: any): void;
+    /**
+       * @private
+       */
+    private _setStyle;
+    removeHoverStyle(element: any, datasetIndex: any, index: any): void;
+    setHoverStyle(element: any, datasetIndex: any, index: any): void;
+    /**
+       * @private
+       */
+    private _removeDatasetHoverStyle;
+    /**
+       * @private
+       */
+    private _setDatasetHoverStyle;
+    /**
+       * @private
+       */
+    private _resyncElements;
+    /**
+       * @private
+       */
+    private _insertElements;
+    updateElements(element: any, start: any, count: any, mode: any): void;
+    /**
+       * @private
+       */
+    private _removeElements;
+    /**
+       * @private
+     */
+    private _sync;
+    _onDataPush(...args: any[]): void;
+    _onDataPop(): void;
+    _onDataShift(): void;
+    _onDataSplice(start: any, count: any, ...args: any[]): void;
+    _onDataUnshift(...args: any[]): void;
+}
+export type Chart = import('./core.controller.js').default;
+export type Scale = import('./core.scale.js').default;
Index: node_modules/chart.js/dist/core/core.defaults.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+export const overrides: any;
+export const descriptors: any;
+/**
+ * Please use the module's default export which provides a singleton instance
+ * Note: class is exported for typedoc
+ */
+export class Defaults {
+    constructor(_descriptors: any, _appliers: any);
+    animation: any;
+    backgroundColor: string;
+    borderColor: string;
+    color: string;
+    datasets: {};
+    devicePixelRatio: (context: any) => any;
+    elements: {};
+    events: string[];
+    font: {
+        family: string;
+        size: number;
+        style: string;
+        lineHeight: number;
+        weight: any;
+    };
+    hover: {};
+    hoverBackgroundColor: (ctx: any, options: any) => CanvasGradient;
+    hoverBorderColor: (ctx: any, options: any) => CanvasGradient;
+    hoverColor: (ctx: any, options: any) => CanvasGradient;
+    indexAxis: string;
+    interaction: {
+        mode: string;
+        intersect: boolean;
+        includeInvisible: boolean;
+    };
+    maintainAspectRatio: boolean;
+    onHover: any;
+    onClick: any;
+    parsing: boolean;
+    plugins: {};
+    responsive: boolean;
+    scale: any;
+    scales: {};
+    showLine: boolean;
+    drawActiveElementsOnTop: boolean;
+    /**
+       * @param {string|object} scope
+       * @param {object} [values]
+       */
+    set(scope: string | object, values?: object): any;
+    /**
+       * @param {string} scope
+       */
+    get(scope: string): any;
+    /**
+       * @param {string|object} scope
+       * @param {object} [values]
+       */
+    describe(scope: string | object, values?: object): any;
+    override(scope: any, values: any): any;
+    /**
+       * Routes the named defaults to fallback to another scope/name.
+       * This routing is useful when those target values, like defaults.color, are changed runtime.
+       * If the values would be copied, the runtime change would not take effect. By routing, the
+       * fallback is evaluated at each access, so its always up to date.
+       *
+       * Example:
+       *
+       * 	defaults.route('elements.arc', 'backgroundColor', '', 'color')
+       *   - reads the backgroundColor from defaults.color when undefined locally
+       *
+       * @param {string} scope Scope this route applies to.
+       * @param {string} name Property name that should be routed to different namespace when not defined here.
+       * @param {string} targetScope The namespace where those properties should be routed to.
+       * Empty string ('') is the root of defaults.
+       * @param {string} targetName The target name in the target scope the property should be routed to.
+       */
+    route(scope: string, name: string, targetScope: string, targetName: string): void;
+    apply(appliers: any): void;
+}
+declare const _default: Defaults;
+export default _default;
Index: node_modules/chart.js/dist/core/core.element.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.element.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.element.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import type { AnyObject } from '../types/basic.js';
+import type { Point } from '../types/geometric.js';
+import type { Animation } from '../types/animation.js';
+export default class Element<T = AnyObject, O = AnyObject> {
+    static defaults: {};
+    static defaultRoutes: any;
+    x: number;
+    y: number;
+    active: boolean;
+    options: O;
+    $animations: Record<keyof T, Animation>;
+    tooltipPosition(useFinalPosition: boolean): Point;
+    hasValue(): boolean;
+    /**
+     * Gets the current or final value of each prop. Can return extra properties (whole object).
+     * @param props - properties to get
+     * @param [final] - get the final value (animation target)
+     */
+    getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;
+    getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;
+}
Index: node_modules/chart.js/dist/core/core.interaction.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.interaction.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.interaction.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,92 @@
+declare namespace _default {
+    export { evaluateInteractionItems };
+    export namespace modes {
+        /**
+             * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something
+             * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item
+             * @function Chart.Interaction.modes.index
+             * @since v2.4.0
+             * @param {Chart} chart - the chart we are returning items from
+             * @param {Event} e - the event we are find things at
+             * @param {InteractionOptions} options - options to use
+             * @param {boolean} [useFinalPosition] - use final element position (animation target)
+             * @return {InteractionItem[]} - items that are found
+             */
+        function index(chart: import("./core.controller.js").default, e: Event, options: InteractionOptions, useFinalPosition?: boolean): InteractionItem[];
+        /**
+             * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something
+             * If the options.intersect is false, we find the nearest item and return the items in that dataset
+             * @function Chart.Interaction.modes.dataset
+             * @param {Chart} chart - the chart we are returning items from
+             * @param {Event} e - the event we are find things at
+             * @param {InteractionOptions} options - options to use
+             * @param {boolean} [useFinalPosition] - use final element position (animation target)
+             * @return {InteractionItem[]} - items that are found
+             */
+        function dataset(chart: import("./core.controller.js").default, e: Event, options: InteractionOptions, useFinalPosition?: boolean): InteractionItem[];
+        /**
+             * Point mode returns all elements that hit test based on the event position
+             * of the event
+             * @function Chart.Interaction.modes.intersect
+             * @param {Chart} chart - the chart we are returning items from
+             * @param {Event} e - the event we are find things at
+             * @param {InteractionOptions} options - options to use
+             * @param {boolean} [useFinalPosition] - use final element position (animation target)
+             * @return {InteractionItem[]} - items that are found
+             */
+        function point(chart: import("./core.controller.js").default, e: Event, options: InteractionOptions, useFinalPosition?: boolean): InteractionItem[];
+        /**
+             * nearest mode returns the element closest to the point
+             * @function Chart.Interaction.modes.intersect
+             * @param {Chart} chart - the chart we are returning items from
+             * @param {Event} e - the event we are find things at
+             * @param {InteractionOptions} options - options to use
+             * @param {boolean} [useFinalPosition] - use final element position (animation target)
+             * @return {InteractionItem[]} - items that are found
+             */
+        function nearest(chart: import("./core.controller.js").default, e: Event, options: InteractionOptions, useFinalPosition?: boolean): InteractionItem[];
+        /**
+             * x mode returns the elements that hit-test at the current x coordinate
+             * @function Chart.Interaction.modes.x
+             * @param {Chart} chart - the chart we are returning items from
+             * @param {Event} e - the event we are find things at
+             * @param {InteractionOptions} options - options to use
+             * @param {boolean} [useFinalPosition] - use final element position (animation target)
+             * @return {InteractionItem[]} - items that are found
+             */
+        function x(chart: import("./core.controller.js").default, e: Event, options: InteractionOptions, useFinalPosition?: boolean): InteractionItem[];
+        /**
+             * y mode returns the elements that hit-test at the current y coordinate
+             * @function Chart.Interaction.modes.y
+             * @param {Chart} chart - the chart we are returning items from
+             * @param {Event} e - the event we are find things at
+             * @param {InteractionOptions} options - options to use
+             * @param {boolean} [useFinalPosition] - use final element position (animation target)
+             * @return {InteractionItem[]} - items that are found
+             */
+        function y(chart: import("./core.controller.js").default, e: Event, options: InteractionOptions, useFinalPosition?: boolean): InteractionItem[];
+    }
+}
+export default _default;
+export type Chart = import('./core.controller.js').default;
+export type ChartEvent = import('../types/index.js').ChartEvent;
+export type InteractionOptions = {
+    axis?: string;
+    intersect?: boolean;
+    includeInvisible?: boolean;
+};
+export type InteractionItem = {
+    datasetIndex: number;
+    index: number;
+    element: import('./core.element.js').default;
+};
+export type Point = import('../types/index.js').Point;
+/**
+ * Helper function to select candidate elements for interaction
+ * @param {Chart} chart - the chart
+ * @param {string} axis - the axis mode. x|y|xy|r
+ * @param {Point} position - the point to be nearest to, in relative coordinates
+ * @param {function} handler - the callback to execute for each visible item
+ * @param {boolean} [intersect] - consider intersecting items
+ */
+declare function evaluateInteractionItems(chart: Chart, axis: string, position: Point, handler: Function, intersect?: boolean): void;
Index: node_modules/chart.js/dist/core/core.layouts.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.layouts.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.layouts.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,88 @@
+declare namespace _default {
+    /**
+       * Register a box to a chart.
+       * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.
+       * @param {Chart} chart - the chart to use
+       * @param {LayoutItem} item - the item to add to be laid out
+       */
+    function addBox(chart: import("./core.controller.js").default, item: LayoutItem): void;
+    /**
+       * Remove a layoutItem from a chart
+       * @param {Chart} chart - the chart to remove the box from
+       * @param {LayoutItem} layoutItem - the item to remove from the layout
+       */
+    function removeBox(chart: import("./core.controller.js").default, layoutItem: LayoutItem): void;
+    /**
+       * Sets (or updates) options on the given `item`.
+       * @param {Chart} chart - the chart in which the item lives (or will be added to)
+       * @param {LayoutItem} item - the item to configure with the given options
+       * @param {object} options - the new item options.
+       */
+    function configure(chart: import("./core.controller.js").default, item: LayoutItem, options: any): void;
+    /**
+       * Fits boxes of the given chart into the given size by having each box measure itself
+       * then running a fitting algorithm
+       * @param {Chart} chart - the chart
+       * @param {number} width - the width to fit into
+       * @param {number} height - the height to fit into
+     * @param {number} minPadding - minimum padding required for each side of chart area
+       */
+    function update(chart: import("./core.controller.js").default, width: number, height: number, minPadding: number): void;
+}
+export default _default;
+export type Chart = import('./core.controller.js').default;
+export type LayoutItem = {
+    /**
+     * - The position of the item in the chart layout. Possible values are
+     * 'left', 'top', 'right', 'bottom', and 'chartArea'
+     */
+    position: string;
+    /**
+     * - The weight used to sort the item. Higher weights are further away from the chart area
+     */
+    weight: number;
+    /**
+     * - if true, and the item is horizontal, then push vertical boxes down
+     */
+    fullSize: boolean;
+    /**
+     * - returns true if the layout item is horizontal (ie. top or bottom)
+     */
+    isHorizontal: Function;
+    /**
+     * - Takes two parameters: width and height. Returns size of item
+     */
+    update: Function;
+    /**
+     * - Draws the element
+     */
+    draw: Function;
+    /**
+     * -  Returns an object with padding on the edges
+     */
+    getPadding?: Function;
+    /**
+     * - Width of item. Must be valid after update()
+     */
+    width: number;
+    /**
+     * - Height of item. Must be valid after update()
+     */
+    height: number;
+    /**
+     * - Left edge of the item. Set by layout system and cannot be used in update
+     */
+    left: number;
+    /**
+     * - Top edge of the item. Set by layout system and cannot be used in update
+     */
+    top: number;
+    /**
+     * - Right edge of the item. Set by layout system and cannot be used in update
+     */
+    right: number;
+    /**
+     * - Bottom edge of the item. Set by layout system and cannot be used in update
+     */
+    bottom: number;
+};
Index: node_modules/chart.js/dist/core/core.layouts.defaults.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.layouts.defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.layouts.defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export function applyLayoutsDefaults(defaults: any): void;
Index: node_modules/chart.js/dist/core/core.plugins.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.plugins.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.plugins.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+/**
+ * @typedef { import('./core.controller.js').default } Chart
+ * @typedef { import('../types/index.js').ChartEvent } ChartEvent
+ * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip
+ */
+/**
+ * @callback filterCallback
+ * @param {{plugin: object, options: object}} value
+ * @param {number} [index]
+ * @param {array} [array]
+ * @param {object} [thisArg]
+ * @return {boolean}
+ */
+export default class PluginService {
+    _init: any[];
+    /**
+       * Calls enabled plugins for `chart` on the specified hook and with the given args.
+       * This method immediately returns as soon as a plugin explicitly returns false. The
+       * returned value can be used, for instance, to interrupt the current action.
+       * @param {Chart} chart - The chart instance for which plugins should be called.
+       * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').
+       * @param {object} [args] - Extra arguments to apply to the hook call.
+     * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified
+       * @returns {boolean} false if any of the plugins return false, else returns true.
+       */
+    notify(chart: Chart, hook: string, args?: object, filter?: filterCallback): boolean;
+    /**
+       * @private
+       */
+    private _notify;
+    invalidate(): void;
+    _oldCache: {
+        plugin: any;
+        options: any;
+    }[];
+    _cache: {
+        plugin: any;
+        options: any;
+    }[];
+    /**
+       * @param {Chart} chart
+       * @private
+       */
+    private _descriptors;
+    _createDescriptors(chart: any, all: any): {
+        plugin: any;
+        options: any;
+    }[];
+    /**
+       * @param {Chart} chart
+       * @private
+       */
+    private _notifyStateChanges;
+}
+export type Chart = import('./core.controller.js').default;
+export type ChartEvent = import('../types/index.js').ChartEvent;
+export type Tooltip = any;
+export type filterCallback = (value: {
+    plugin: object;
+    options: object;
+}, index?: number, array?: any[], thisArg?: object) => boolean;
Index: node_modules/chart.js/dist/core/core.registry.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.registry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.registry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,90 @@
+/**
+ * Please use the module's default export which provides a singleton instance
+ * Note: class is exported for typedoc
+ */
+export class Registry {
+    controllers: TypedRegistry;
+    elements: TypedRegistry;
+    plugins: TypedRegistry;
+    scales: TypedRegistry;
+    _typedRegistries: TypedRegistry[];
+    /**
+       * @param  {...any} args
+       */
+    add(...args: any[]): void;
+    remove(...args: any[]): void;
+    /**
+       * @param  {...typeof DatasetController} args
+       */
+    addControllers(...args: (typeof DatasetController)[]): void;
+    /**
+       * @param  {...typeof Element} args
+       */
+    addElements(...args: (typeof Element)[]): void;
+    /**
+       * @param  {...any} args
+       */
+    addPlugins(...args: any[]): void;
+    /**
+       * @param  {...typeof Scale} args
+       */
+    addScales(...args: (typeof Scale)[]): void;
+    /**
+       * @param {string} id
+       * @returns {typeof DatasetController}
+       */
+    getController(id: string): typeof DatasetController;
+    /**
+       * @param {string} id
+       * @returns {typeof Element}
+       */
+    getElement(id: string): typeof Element;
+    /**
+       * @param {string} id
+       * @returns {object}
+       */
+    getPlugin(id: string): object;
+    /**
+       * @param {string} id
+       * @returns {typeof Scale}
+       */
+    getScale(id: string): typeof Scale;
+    /**
+       * @param  {...typeof DatasetController} args
+       */
+    removeControllers(...args: (typeof DatasetController)[]): void;
+    /**
+       * @param  {...typeof Element} args
+       */
+    removeElements(...args: (typeof Element)[]): void;
+    /**
+       * @param  {...any} args
+       */
+    removePlugins(...args: any[]): void;
+    /**
+       * @param  {...typeof Scale} args
+       */
+    removeScales(...args: (typeof Scale)[]): void;
+    /**
+       * @private
+       */
+    private _each;
+    /**
+       * @private
+       */
+    private _exec;
+    /**
+       * @private
+       */
+    private _getRegistryForType;
+    /**
+       * @private
+       */
+    private _get;
+}
+declare const _default: Registry;
+export default _default;
+import TypedRegistry from "./core.typedRegistry.js";
+import DatasetController from "./core.datasetController.js";
+import Element from "./core.element.js";
+import Scale from "./core.scale.js";
Index: node_modules/chart.js/dist/core/core.scale.autoskip.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.scale.autoskip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.scale.autoskip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * @typedef { import('./core.controller.js').default } Chart
+ * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick
+ */
+/**
+ * Returns a subset of ticks to be plotted to avoid overlapping labels.
+ * @param {import('./core.scale.js').default} scale
+ * @param {Tick[]} ticks
+ * @return {Tick[]}
+ * @private
+ */
+export function autoSkip(scale: import('./core.scale.js').default, ticks: Tick[]): Tick[];
+export type Chart = import('./core.controller.js').default;
+export type Tick = {
+    value: number | string;
+    label?: string;
+    major?: boolean;
+    $context?: any;
+};
Index: node_modules/chart.js/dist/core/core.scale.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.scale.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.scale.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,343 @@
+export default class Scale extends Element<import("../types/basic.js").AnyObject, import("../types/basic.js").AnyObject> {
+    constructor(cfg: any);
+    /** @type {string} */
+    id: string;
+    /** @type {string} */
+    type: string;
+    /** @type {any} */
+    options: any;
+    /** @type {CanvasRenderingContext2D} */
+    ctx: CanvasRenderingContext2D;
+    /** @type {Chart} */
+    chart: Chart;
+    /** @type {number} */
+    top: number;
+    /** @type {number} */
+    bottom: number;
+    /** @type {number} */
+    left: number;
+    /** @type {number} */
+    right: number;
+    /** @type {number} */
+    width: number;
+    /** @type {number} */
+    height: number;
+    _margins: {
+        left: number;
+        right: number;
+        top: number;
+        bottom: number;
+    };
+    /** @type {number} */
+    maxWidth: number;
+    /** @type {number} */
+    maxHeight: number;
+    /** @type {number} */
+    paddingTop: number;
+    /** @type {number} */
+    paddingBottom: number;
+    /** @type {number} */
+    paddingLeft: number;
+    /** @type {number} */
+    paddingRight: number;
+    /** @type {string=} */
+    axis: string | undefined;
+    /** @type {number=} */
+    labelRotation: number | undefined;
+    min: any;
+    max: any;
+    _range: {
+        min: number;
+        max: number;
+    };
+    /** @type {Tick[]} */
+    ticks: Tick[];
+    /** @type {object[]|null} */
+    _gridLineItems: object[] | null;
+    /** @type {object[]|null} */
+    _labelItems: object[] | null;
+    /** @type {object|null} */
+    _labelSizes: object | null;
+    _length: number;
+    _maxLength: number;
+    _longestTextCache: {};
+    /** @type {number} */
+    _startPixel: number;
+    /** @type {number} */
+    _endPixel: number;
+    _reversePixels: boolean;
+    _userMax: any;
+    _userMin: any;
+    _suggestedMax: any;
+    _suggestedMin: any;
+    _ticksLength: number;
+    _borderValue: number;
+    _cache: {};
+    _dataLimitsCached: boolean;
+    $context: any;
+    /**
+       * @param {any} options
+       * @since 3.0
+       */
+    init(options: any): void;
+    /**
+       * Parse a supported input value to internal representation.
+       * @param {*} raw
+       * @param {number} [index]
+       * @since 3.0
+       */
+    parse(raw: any, index?: number): any;
+    /**
+       * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}
+       * @protected
+       * @since 3.0
+       */
+    protected getUserBounds(): {
+        min: number;
+        max: number;
+        minDefined: boolean;
+        maxDefined: boolean;
+    };
+    /**
+       * @param {boolean} canStack
+       * @return {{min: number, max: number}}
+       * @protected
+       * @since 3.0
+       */
+    protected getMinMax(canStack: boolean): {
+        min: number;
+        max: number;
+    };
+    /**
+       * Get the padding needed for the scale
+       * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding
+       * @private
+       */
+    private getPadding;
+    /**
+       * Returns the scale tick objects
+       * @return {Tick[]}
+       * @since 2.7
+       */
+    getTicks(): Tick[];
+    /**
+       * @return {string[]}
+       */
+    getLabels(): string[];
+    /**
+     * @return {import('../types.js').LabelItem[]}
+     */
+    getLabelItems(chartArea?: import("../types.js").ChartArea): import('../types.js').LabelItem[];
+    beforeLayout(): void;
+    beforeUpdate(): void;
+    /**
+       * @param {number} maxWidth - the max width in pixels
+       * @param {number} maxHeight - the max height in pixels
+       * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart
+       *   This space comes from two sources:
+       *     - padding - space that's required to show the labels at the edges of the scale
+       *     - thickness of scales or legends in another orientation
+       */
+    update(maxWidth: number, maxHeight: number, margins: {
+        top: number;
+        left: number;
+        bottom: number;
+        right: number;
+    }): void;
+    /**
+       * @protected
+       */
+    protected configure(): void;
+    _alignToPixels: any;
+    afterUpdate(): void;
+    beforeSetDimensions(): void;
+    setDimensions(): void;
+    afterSetDimensions(): void;
+    _callHooks(name: any): void;
+    beforeDataLimits(): void;
+    determineDataLimits(): void;
+    afterDataLimits(): void;
+    beforeBuildTicks(): void;
+    /**
+       * @return {object[]} the ticks
+       */
+    buildTicks(): object[];
+    afterBuildTicks(): void;
+    beforeTickToLabelConversion(): void;
+    /**
+       * Convert ticks to label strings
+       * @param {Tick[]} ticks
+       */
+    generateTickLabels(ticks: Tick[]): void;
+    afterTickToLabelConversion(): void;
+    beforeCalculateLabelRotation(): void;
+    calculateLabelRotation(): void;
+    afterCalculateLabelRotation(): void;
+    afterAutoSkip(): void;
+    beforeFit(): void;
+    fit(): void;
+    _calculatePadding(first: any, last: any, sin: any, cos: any): void;
+    /**
+       * Handle margins and padding interactions
+       * @private
+       */
+    private _handleMargins;
+    afterFit(): void;
+    /**
+       * @return {boolean}
+       */
+    isHorizontal(): boolean;
+    /**
+       * @return {boolean}
+       */
+    isFullSize(): boolean;
+    /**
+       * @param {Tick[]} ticks
+       * @private
+       */
+    private _convertTicksToLabels;
+    /**
+       * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}
+       * @private
+       */
+    private _getLabelSizes;
+    /**
+       * Returns {width, height, offset} objects for the first, last, widest, highest tick
+       * labels where offset indicates the anchor point offset from the top in pixels.
+       * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}
+       * @private
+       */
+    private _computeLabelSizes;
+    /**
+       * Used to get the label to display in the tooltip for the given value
+       * @param {*} value
+       * @return {string}
+       */
+    getLabelForValue(value: any): string;
+    /**
+       * Returns the location of the given data point. Value can either be an index or a numerical value
+       * The coordinate (0, 0) is at the upper-left corner of the canvas
+       * @param {*} value
+       * @param {number} [index]
+       * @return {number}
+       */
+    getPixelForValue(value: any, index?: number): number;
+    /**
+       * Used to get the data value from a given pixel. This is the inverse of getPixelForValue
+       * The coordinate (0, 0) is at the upper-left corner of the canvas
+       * @param {number} pixel
+       * @return {*}
+       */
+    getValueForPixel(pixel: number): any;
+    /**
+       * Returns the location of the tick at the given index
+       * The coordinate (0, 0) is at the upper-left corner of the canvas
+       * @param {number} index
+       * @return {number}
+       */
+    getPixelForTick(index: number): number;
+    /**
+       * Utility for getting the pixel location of a percentage of scale
+       * The coordinate (0, 0) is at the upper-left corner of the canvas
+       * @param {number} decimal
+       * @return {number}
+       */
+    getPixelForDecimal(decimal: number): number;
+    /**
+       * @param {number} pixel
+       * @return {number}
+       */
+    getDecimalForPixel(pixel: number): number;
+    /**
+       * Returns the pixel for the minimum chart value
+       * The coordinate (0, 0) is at the upper-left corner of the canvas
+       * @return {number}
+       */
+    getBasePixel(): number;
+    /**
+       * @return {number}
+       */
+    getBaseValue(): number;
+    /**
+       * @protected
+       */
+    protected getContext(index: any): any;
+    /**
+       * @return {number}
+       * @private
+       */
+    private _tickSize;
+    /**
+       * @return {boolean}
+       * @private
+       */
+    private _isVisible;
+    /**
+       * @private
+       */
+    private _computeGridLineItems;
+    /**
+       * @private
+       */
+    private _computeLabelItems;
+    _getXAxisLabelAlignment(): string;
+    _getYAxisLabelAlignment(tl: any): {
+        textAlign: string;
+        x: any;
+    };
+    /**
+       * @private
+       */
+    private _computeLabelArea;
+    /**
+     * @protected
+     */
+    protected drawBackground(): void;
+    getLineWidthForValue(value: any): any;
+    /**
+       * @protected
+       */
+    protected drawGrid(chartArea: any): void;
+    /**
+       * @protected
+       */
+    protected drawBorder(): void;
+    /**
+       * @protected
+       */
+    protected drawLabels(chartArea: any): void;
+    /**
+       * @protected
+       */
+    protected drawTitle(): void;
+    draw(chartArea: any): void;
+    /**
+       * @return {object[]}
+       * @private
+       */
+    private _layers;
+    /**
+       * Returns visible dataset metas that are attached to this scale
+       * @param {string} [type] - if specified, also filter by dataset type
+       * @return {object[]}
+       */
+    getMatchingVisibleMetas(type?: string): object[];
+    /**
+       * @param {number} index
+       * @return {object}
+       * @protected
+       */
+    protected _resolveTickFontOptions(index: number): object;
+    /**
+     * @protected
+     */
+    protected _maxDigits(): number;
+}
+export type Chart = import('../types/index.js').Chart;
+export type Tick = {
+    value: number | string;
+    label?: string;
+    major?: boolean;
+    $context?: any;
+};
+import Element from "./core.element.js";
Index: node_modules/chart.js/dist/core/core.scale.defaults.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.scale.defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.scale.defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export function applyScaleDefaults(defaults: any): void;
Index: node_modules/chart.js/dist/core/core.ticks.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.ticks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.ticks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+declare namespace _default {
+    export { formatters };
+}
+export default _default;
+declare namespace formatters {
+    /**
+     * Formatter for value labels
+     * @method Chart.Ticks.formatters.values
+     * @param value the value to display
+     * @return {string|string[]} the label to display
+     */
+    function values(value: any): string | string[];
+    /**
+     * Formatter for numeric ticks
+     * @method Chart.Ticks.formatters.numeric
+     * @param tickValue {number} the value to be formatted
+     * @param index {number} the position of the tickValue parameter in the ticks array
+     * @param ticks {object[]} the list of ticks being converted
+     * @return {string} string representation of the tickValue parameter
+     */
+    function numeric(tickValue: number, index: number, ticks: any[]): string;
+    /**
+     * Formatter for logarithmic ticks
+     * @method Chart.Ticks.formatters.logarithmic
+     * @param tickValue {number} the value to be formatted
+     * @param index {number} the position of the tickValue parameter in the ticks array
+     * @param ticks {object[]} the list of ticks being converted
+     * @return {string} string representation of the tickValue parameter
+     */
+    function logarithmic(tickValue: number, index: number, ticks: any[]): string;
+}
Index: node_modules/chart.js/dist/core/core.typedRegistry.d.ts
===================================================================
--- node_modules/chart.js/dist/core/core.typedRegistry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/core.typedRegistry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent
+ */
+export default class TypedRegistry {
+    constructor(type: any, scope: any, override: any);
+    type: any;
+    scope: any;
+    override: any;
+    items: any;
+    isForType(type: any): boolean;
+    /**
+       * @param {IChartComponent} item
+       * @returns {string} The scope where items defaults were registered to.
+       */
+    register(item: IChartComponent): string;
+    /**
+       * @param {string} id
+       * @returns {object?}
+       */
+    get(id: string): object | null;
+    /**
+       * @param {IChartComponent} item
+       */
+    unregister(item: IChartComponent): void;
+}
+export type IChartComponent = {
+    id: string;
+    defaults: any;
+    overrides?: any;
+    defaultRoutes: any;
+};
+import defaults from "./core.defaults.js";
+import { overrides } from "./core.defaults.js";
Index: node_modules/chart.js/dist/core/index.d.ts
===================================================================
--- node_modules/chart.js/dist/core/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/core/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+export type { DateAdapter, TimeUnit } from './core.adapters.js';
+export { default as _adapters } from './core.adapters.js';
+export { default as Animation } from './core.animation.js';
+export { default as Animations } from './core.animations.js';
+export { default as animator } from './core.animator.js';
+export { default as Chart } from './core.controller.js';
+export { default as DatasetController } from './core.datasetController.js';
+export { default as defaults } from './core.defaults.js';
+export { default as Element } from './core.element.js';
+export { default as Interaction } from './core.interaction.js';
+export { default as layouts } from './core.layouts.js';
+export { default as plugins } from './core.plugins.js';
+export { default as registry } from './core.registry.js';
+export { default as Scale } from './core.scale.js';
+export { default as Ticks } from './core.ticks.js';
Index: node_modules/chart.js/dist/elements/element.arc.d.ts
===================================================================
--- node_modules/chart.js/dist/elements/element.arc.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/elements/element.arc.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+import Element from '../core/core.element.js';
+import type { ArcOptions, Point } from '../types/index.js';
+export interface ArcProps extends Point {
+    startAngle: number;
+    endAngle: number;
+    innerRadius: number;
+    outerRadius: number;
+    circumference: number;
+}
+export default class ArcElement extends Element<ArcProps, ArcOptions> {
+    static id: string;
+    static defaults: {
+        borderAlign: string;
+        borderColor: string;
+        borderDash: any[];
+        borderDashOffset: number;
+        borderJoinStyle: any;
+        borderRadius: number;
+        borderWidth: number;
+        offset: number;
+        spacing: number;
+        angle: any;
+        circular: boolean;
+        selfJoin: boolean;
+    };
+    static defaultRoutes: {
+        backgroundColor: string;
+    };
+    static descriptors: {
+        _scriptable: boolean;
+        _indexable: (name: any) => boolean;
+    };
+    circumference: number;
+    endAngle: number;
+    fullCircles: number;
+    innerRadius: number;
+    outerRadius: number;
+    pixelMargin: number;
+    startAngle: number;
+    constructor(cfg: any);
+    inRange(chartX: number, chartY: number, useFinalPosition: boolean): boolean;
+    getCenterPoint(useFinalPosition: boolean): {
+        x: number;
+        y: number;
+    };
+    tooltipPosition(useFinalPosition: boolean): {
+        x: number;
+        y: number;
+    };
+    draw(ctx: CanvasRenderingContext2D): void;
+}
Index: node_modules/chart.js/dist/elements/element.bar.d.ts
===================================================================
--- node_modules/chart.js/dist/elements/element.bar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/elements/element.bar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+export default class BarElement extends Element<import("../types/basic.js").AnyObject, import("../types/basic.js").AnyObject> {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static defaults: any;
+    constructor(cfg: any);
+    options: any;
+    horizontal: any;
+    base: any;
+    width: any;
+    height: any;
+    inflateAmount: any;
+    draw(ctx: any): void;
+    inRange(mouseX: any, mouseY: any, useFinalPosition: any): boolean;
+    inXRange(mouseX: any, useFinalPosition: any): boolean;
+    inYRange(mouseY: any, useFinalPosition: any): boolean;
+    getCenterPoint(useFinalPosition: any): {
+        x: number;
+        y: number;
+    };
+    getRange(axis: any): number;
+}
+export type BarProps = {
+    x: number;
+    y: number;
+    base: number;
+    horizontal: boolean;
+    width: number;
+    height: number;
+};
+import Element from "../core/core.element.js";
Index: node_modules/chart.js/dist/elements/element.line.d.ts
===================================================================
--- node_modules/chart.js/dist/elements/element.line.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/elements/element.line.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,87 @@
+export default class LineElement extends Element<import("../types/basic.js").AnyObject, import("../types/basic.js").AnyObject> {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static defaults: any;
+    static descriptors: {
+        _scriptable: boolean;
+        _indexable: (name: any) => boolean;
+    };
+    constructor(cfg: any);
+    animated: boolean;
+    options: any;
+    _chart: any;
+    _loop: any;
+    _fullLoop: any;
+    _path: any;
+    _points: any;
+    _segments: import("../helpers/helpers.segment.js").Segment[];
+    _decimated: boolean;
+    _pointsUpdated: boolean;
+    _datasetIndex: any;
+    updateControlPoints(chartArea: any, indexAxis: any): void;
+    set points(arg: any);
+    get points(): any;
+    get segments(): import("../helpers/helpers.segment.js").Segment[];
+    /**
+       * First non-skipped point on this line
+       * @returns {PointElement|undefined}
+       */
+    first(): PointElement | undefined;
+    /**
+       * Last non-skipped point on this line
+       * @returns {PointElement|undefined}
+       */
+    last(): PointElement | undefined;
+    /**
+       * Interpolate a point in this line at the same value on `property` as
+       * the reference `point` provided
+       * @param {PointElement} point - the reference point
+       * @param {string} property - the property to match on
+       * @returns {PointElement|undefined}
+       */
+    interpolate(point: PointElement, property: string): PointElement | undefined;
+    /**
+       * Append a segment of this line to current path.
+       * @param {CanvasRenderingContext2D} ctx
+       * @param {object} segment
+       * @param {number} segment.start - start index of the segment, referring the points array
+       * @param {number} segment.end - end index of the segment, referring the points array
+       * @param {boolean} segment.loop - indicates that the segment is a loop
+       * @param {object} params
+       * @param {boolean} params.move - move to starting point (vs line to it)
+       * @param {boolean} params.reverse - path the segment from end to start
+       * @param {number} params.start - limit segment to points starting from `start` index
+       * @param {number} params.end - limit segment to points ending at `start` + `count` index
+       * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)
+       */
+    pathSegment(ctx: CanvasRenderingContext2D, segment: {
+        start: number;
+        end: number;
+        loop: boolean;
+    }, params: {
+        move: boolean;
+        reverse: boolean;
+        start: number;
+        end: number;
+    }): undefined | boolean;
+    /**
+       * Append all segments of this line to current path.
+       * @param {CanvasRenderingContext2D|Path2D} ctx
+       * @param {number} [start]
+       * @param {number} [count]
+       * @returns {undefined|boolean} - true if line is a full loop (path should be closed)
+       */
+    path(ctx: CanvasRenderingContext2D | Path2D, start?: number, count?: number): undefined | boolean;
+    /**
+       * Draw
+       * @param {CanvasRenderingContext2D} ctx
+       * @param {object} chartArea
+       * @param {number} [start]
+       * @param {number} [count]
+       */
+    draw(ctx: CanvasRenderingContext2D, chartArea: object, start?: number, count?: number): void;
+}
+export type PointElement = import('./element.point.js').default;
+import Element from "../core/core.element.js";
Index: node_modules/chart.js/dist/elements/element.point.d.ts
===================================================================
--- node_modules/chart.js/dist/elements/element.point.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/elements/element.point.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import Element from '../core/core.element.js';
+import type { CartesianParsedData, ChartArea, Point, PointHoverOptions, PointOptions } from '../types/index.js';
+export type PointProps = Point;
+export default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {
+    static id: string;
+    parsed: CartesianParsedData;
+    skip?: boolean;
+    stop?: boolean;
+    /**
+     * @type {any}
+     */
+    static defaults: {
+        borderWidth: number;
+        hitRadius: number;
+        hoverBorderWidth: number;
+        hoverRadius: number;
+        pointStyle: string;
+        radius: number;
+        rotation: number;
+    };
+    /**
+     * @type {any}
+     */
+    static defaultRoutes: {
+        backgroundColor: string;
+        borderColor: string;
+    };
+    constructor(cfg: any);
+    inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean): boolean;
+    inXRange(mouseX: number, useFinalPosition?: boolean): boolean;
+    inYRange(mouseY: number, useFinalPosition?: boolean): boolean;
+    getCenterPoint(useFinalPosition?: boolean): {
+        x: number;
+        y: number;
+    };
+    size(options?: Partial<PointOptions & PointHoverOptions>): number;
+    draw(ctx: CanvasRenderingContext2D, area: ChartArea): void;
+    getRange(): any;
+}
Index: node_modules/chart.js/dist/elements/index.d.ts
===================================================================
--- node_modules/chart.js/dist/elements/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/elements/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+export { default as ArcElement } from "./element.arc.js";
+export { default as LineElement } from "./element.line.js";
+export { default as PointElement } from "./element.point.js";
+export { default as BarElement } from "./element.bar.js";
Index: node_modules/chart.js/dist/helpers.cjs
===================================================================
--- node_modules/chart.js/dist/helpers.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,136 @@
+/*!
+ * Chart.js v4.5.0
+ * https://www.chartjs.org
+ * (c) 2025 Chart.js Contributors
+ * Released under the MIT License
+ */
+'use strict';
+
+var helpers_dataset = require('./chunks/helpers.dataset.cjs');
+require('@kurkle/color');
+
+
+
+exports.HALF_PI = helpers_dataset.HALF_PI;
+exports.INFINITY = helpers_dataset.INFINITY;
+exports.PI = helpers_dataset.PI;
+exports.PITAU = helpers_dataset.PITAU;
+exports.QUARTER_PI = helpers_dataset.QUARTER_PI;
+exports.RAD_PER_DEG = helpers_dataset.RAD_PER_DEG;
+exports.TAU = helpers_dataset.TAU;
+exports.TWO_THIRDS_PI = helpers_dataset.TWO_THIRDS_PI;
+exports._addGrace = helpers_dataset._addGrace;
+exports._alignPixel = helpers_dataset._alignPixel;
+exports._alignStartEnd = helpers_dataset._alignStartEnd;
+exports._angleBetween = helpers_dataset._angleBetween;
+exports._angleDiff = helpers_dataset._angleDiff;
+exports._arrayUnique = helpers_dataset._arrayUnique;
+exports._attachContext = helpers_dataset._attachContext;
+exports._bezierCurveTo = helpers_dataset._bezierCurveTo;
+exports._bezierInterpolation = helpers_dataset._bezierInterpolation;
+exports._boundSegment = helpers_dataset._boundSegment;
+exports._boundSegments = helpers_dataset._boundSegments;
+exports._capitalize = helpers_dataset._capitalize;
+exports._computeSegments = helpers_dataset._computeSegments;
+exports._createResolver = helpers_dataset._createResolver;
+exports._decimalPlaces = helpers_dataset._decimalPlaces;
+exports._deprecated = helpers_dataset._deprecated;
+exports._descriptors = helpers_dataset._descriptors;
+exports._elementsEqual = helpers_dataset._elementsEqual;
+exports._factorize = helpers_dataset._factorize;
+exports._filterBetween = helpers_dataset._filterBetween;
+exports._getParentNode = helpers_dataset._getParentNode;
+exports._getStartAndCountOfVisiblePoints = helpers_dataset._getStartAndCountOfVisiblePoints;
+exports._int16Range = helpers_dataset._int16Range;
+exports._isBetween = helpers_dataset._isBetween;
+exports._isClickEvent = helpers_dataset._isClickEvent;
+exports._isDomSupported = helpers_dataset._isDomSupported;
+exports._isPointInArea = helpers_dataset._isPointInArea;
+exports._limitValue = helpers_dataset._limitValue;
+exports._longestText = helpers_dataset._longestText;
+exports._lookup = helpers_dataset._lookup;
+exports._lookupByKey = helpers_dataset._lookupByKey;
+exports._measureText = helpers_dataset._measureText;
+exports._merger = helpers_dataset._merger;
+exports._mergerIf = helpers_dataset._mergerIf;
+exports._normalizeAngle = helpers_dataset._normalizeAngle;
+exports._parseObjectDataRadialScale = helpers_dataset._parseObjectDataRadialScale;
+exports._pointInLine = helpers_dataset._pointInLine;
+exports._readValueToProps = helpers_dataset._readValueToProps;
+exports._rlookupByKey = helpers_dataset._rlookupByKey;
+exports._scaleRangesChanged = helpers_dataset._scaleRangesChanged;
+exports._setMinAndMaxByKey = helpers_dataset._setMinAndMaxByKey;
+exports._splitKey = helpers_dataset._splitKey;
+exports._steppedInterpolation = helpers_dataset._steppedInterpolation;
+exports._steppedLineTo = helpers_dataset._steppedLineTo;
+exports._textX = helpers_dataset._textX;
+exports._toLeftRightCenter = helpers_dataset._toLeftRightCenter;
+exports._updateBezierControlPoints = helpers_dataset._updateBezierControlPoints;
+exports.addRoundedRectPath = helpers_dataset.addRoundedRectPath;
+exports.almostEquals = helpers_dataset.almostEquals;
+exports.almostWhole = helpers_dataset.almostWhole;
+exports.callback = helpers_dataset.callback;
+exports.clearCanvas = helpers_dataset.clearCanvas;
+exports.clipArea = helpers_dataset.clipArea;
+exports.clone = helpers_dataset.clone;
+exports.color = helpers_dataset.color;
+exports.createContext = helpers_dataset.createContext;
+exports.debounce = helpers_dataset.debounce;
+exports.defined = helpers_dataset.defined;
+exports.distanceBetweenPoints = helpers_dataset.distanceBetweenPoints;
+exports.drawPoint = helpers_dataset.drawPoint;
+exports.drawPointLegend = helpers_dataset.drawPointLegend;
+exports.each = helpers_dataset.each;
+exports.easingEffects = helpers_dataset.effects;
+exports.finiteOrDefault = helpers_dataset.finiteOrDefault;
+exports.fontString = helpers_dataset.fontString;
+exports.formatNumber = helpers_dataset.formatNumber;
+exports.getAngleFromPoint = helpers_dataset.getAngleFromPoint;
+exports.getDatasetClipArea = helpers_dataset.getDatasetClipArea;
+exports.getHoverColor = helpers_dataset.getHoverColor;
+exports.getMaximumSize = helpers_dataset.getMaximumSize;
+exports.getRelativePosition = helpers_dataset.getRelativePosition;
+exports.getRtlAdapter = helpers_dataset.getRtlAdapter;
+exports.getStyle = helpers_dataset.getStyle;
+exports.isArray = helpers_dataset.isArray;
+exports.isFinite = helpers_dataset.isNumberFinite;
+exports.isFunction = helpers_dataset.isFunction;
+exports.isNullOrUndef = helpers_dataset.isNullOrUndef;
+exports.isNumber = helpers_dataset.isNumber;
+exports.isObject = helpers_dataset.isObject;
+exports.isPatternOrGradient = helpers_dataset.isPatternOrGradient;
+exports.listenArrayEvents = helpers_dataset.listenArrayEvents;
+exports.log10 = helpers_dataset.log10;
+exports.merge = helpers_dataset.merge;
+exports.mergeIf = helpers_dataset.mergeIf;
+exports.niceNum = helpers_dataset.niceNum;
+exports.noop = helpers_dataset.noop;
+exports.overrideTextDirection = helpers_dataset.overrideTextDirection;
+exports.readUsedSize = helpers_dataset.readUsedSize;
+exports.renderText = helpers_dataset.renderText;
+exports.requestAnimFrame = helpers_dataset.requestAnimFrame;
+exports.resolve = helpers_dataset.resolve;
+exports.resolveObjectKey = helpers_dataset.resolveObjectKey;
+exports.restoreTextDirection = helpers_dataset.restoreTextDirection;
+exports.retinaScale = helpers_dataset.retinaScale;
+exports.setsEqual = helpers_dataset.setsEqual;
+exports.sign = helpers_dataset.sign;
+exports.splineCurve = helpers_dataset.splineCurve;
+exports.splineCurveMonotone = helpers_dataset.splineCurveMonotone;
+exports.supportsEventListenerOptions = helpers_dataset.supportsEventListenerOptions;
+exports.throttled = helpers_dataset.throttled;
+exports.toDegrees = helpers_dataset.toDegrees;
+exports.toDimension = helpers_dataset.toDimension;
+exports.toFont = helpers_dataset.toFont;
+exports.toFontString = helpers_dataset.toFontString;
+exports.toLineHeight = helpers_dataset.toLineHeight;
+exports.toPadding = helpers_dataset.toPadding;
+exports.toPercentage = helpers_dataset.toPercentage;
+exports.toRadians = helpers_dataset.toRadians;
+exports.toTRBL = helpers_dataset.toTRBL;
+exports.toTRBLCorners = helpers_dataset.toTRBLCorners;
+exports.uid = helpers_dataset.uid;
+exports.unclipArea = helpers_dataset.unclipArea;
+exports.unlistenArrayEvents = helpers_dataset.unlistenArrayEvents;
+exports.valueOrDefault = helpers_dataset.valueOrDefault;
+//# sourceMappingURL=helpers.cjs.map
Index: node_modules/chart.js/dist/helpers.cjs.map
===================================================================
--- node_modules/chart.js/dist/helpers.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"helpers.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
Index: node_modules/chart.js/dist/helpers.js
===================================================================
--- node_modules/chart.js/dist/helpers.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+/*!
+ * Chart.js v4.5.0
+ * https://www.chartjs.org
+ * (c) 2025 Chart.js Contributors
+ * Released under the MIT License
+ */
+export { H as HALF_PI, b3 as INFINITY, P as PI, b2 as PITAU, b5 as QUARTER_PI, b4 as RAD_PER_DEG, T as TAU, b6 as TWO_THIRDS_PI, R as _addGrace, X as _alignPixel, a2 as _alignStartEnd, p as _angleBetween, b7 as _angleDiff, _ as _arrayUnique, a8 as _attachContext, au as _bezierCurveTo, ar as _bezierInterpolation, az as _boundSegment, ap as _boundSegments, a5 as _capitalize, ao as _computeSegments, a9 as _createResolver, aL as _decimalPlaces, aW as _deprecated, aa as _descriptors, ai as _elementsEqual, N as _factorize, aP as _filterBetween, I as _getParentNode, q as _getStartAndCountOfVisiblePoints, W as _int16Range, ak as _isBetween, aj as _isClickEvent, M as _isDomSupported, C as _isPointInArea, S as _limitValue, aO as _longestText, aQ as _lookup, B as _lookupByKey, V as _measureText, aU as _merger, aV as _mergerIf, al as _normalizeAngle, y as _parseObjectDataRadialScale, as as _pointInLine, am as _readValueToProps, A as _rlookupByKey, w as _scaleRangesChanged, aH as _setMinAndMaxByKey, aX as _splitKey, aq as _steppedInterpolation, at as _steppedLineTo, aC as _textX, a1 as _toLeftRightCenter, an as _updateBezierControlPoints, aw as addRoundedRectPath, aK as almostEquals, aJ as almostWhole, Q as callback, af as clearCanvas, Y as clipArea, aT as clone, c as color, j as createContext, ad as debounce, h as defined, aF as distanceBetweenPoints, av as drawPoint, aE as drawPointLegend, F as each, e as easingEffects, O as finiteOrDefault, b0 as fontString, o as formatNumber, D as getAngleFromPoint, ah as getDatasetClipArea, aS as getHoverColor, G as getMaximumSize, z as getRelativePosition, aA as getRtlAdapter, a$ as getStyle, b as isArray, g as isFinite, a7 as isFunction, k as isNullOrUndef, x as isNumber, i as isObject, aR as isPatternOrGradient, l as listenArrayEvents, aN as log10, a4 as merge, ab as mergeIf, aI as niceNum, aG as noop, aB as overrideTextDirection, J as readUsedSize, Z as renderText, r as requestAnimFrame, a as resolve, f as resolveObjectKey, aD as restoreTextDirection, ae as retinaScale, ag as setsEqual, s as sign, aZ as splineCurve, a_ as splineCurveMonotone, K as supportsEventListenerOptions, L as throttled, U as toDegrees, n as toDimension, a0 as toFont, aY as toFontString, b1 as toLineHeight, E as toPadding, m as toPercentage, t as toRadians, ax as toTRBL, ay as toTRBLCorners, ac as uid, $ as unclipArea, u as unlistenArrayEvents, v as valueOrDefault } from './chunks/helpers.dataset.js';
+import '@kurkle/color';
+//# sourceMappingURL=helpers.js.map
Index: node_modules/chart.js/dist/helpers.js.map
===================================================================
--- node_modules/chart.js/dist/helpers.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"helpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
Index: node_modules/chart.js/dist/helpers/helpers.canvas.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.canvas.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.canvas.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,75 @@
+import type { Chart, Point, FontSpec, CanvasFontSpec, PointStyle, RenderTextOpts } from '../types/index.js';
+import type { TRBL, SplinePoint, RoundedRect, TRBLCorners } from '../types/geometric.js';
+/**
+ * Converts the given font object into a CSS font string.
+ * @param font - A font object.
+ * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font
+ * @private
+ */
+export declare function toFontString(font: FontSpec): string;
+/**
+ * @private
+ */
+export declare function _measureText(ctx: CanvasRenderingContext2D, data: Record<string, number>, gc: string[], longest: number, string: string): number;
+type Thing = string | undefined | null;
+type Things = (Thing | Thing[])[];
+/**
+ * @private
+ */
+export declare function _longestText(ctx: CanvasRenderingContext2D, font: string, arrayOfThings: Things, cache?: {
+    data?: Record<string, number>;
+    garbageCollect?: string[];
+    font?: string;
+}): number;
+/**
+ * Returns the aligned pixel value to avoid anti-aliasing blur
+ * @param chart - The chart instance.
+ * @param pixel - A pixel value.
+ * @param width - The width of the element.
+ * @returns The aligned pixel value.
+ * @private
+ */
+export declare function _alignPixel(chart: Chart, pixel: number, width: number): number;
+/**
+ * Clears the entire canvas.
+ */
+export declare function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D): void;
+export interface DrawPointOptions {
+    pointStyle: PointStyle;
+    rotation?: number;
+    radius: number;
+    borderWidth: number;
+}
+export declare function drawPoint(ctx: CanvasRenderingContext2D, options: DrawPointOptions, x: number, y: number): void;
+export declare function drawPointLegend(ctx: CanvasRenderingContext2D, options: DrawPointOptions, x: number, y: number, w: number): void;
+/**
+ * Returns true if the point is inside the rectangle
+ * @param point - The point to test
+ * @param area - The rectangle
+ * @param margin - allowed margin
+ * @private
+ */
+export declare function _isPointInArea(point: Point, area: TRBL, margin?: number): boolean;
+export declare function clipArea(ctx: CanvasRenderingContext2D, area: TRBL): void;
+export declare function unclipArea(ctx: CanvasRenderingContext2D): void;
+/**
+ * @private
+ */
+export declare function _steppedLineTo(ctx: CanvasRenderingContext2D, previous: Point, target: Point, flip?: boolean, mode?: string): void;
+/**
+ * @private
+ */
+export declare function _bezierCurveTo(ctx: CanvasRenderingContext2D, previous: SplinePoint, target: SplinePoint, flip?: boolean): void;
+/**
+ * Render text onto the canvas
+ */
+export declare function renderText(ctx: CanvasRenderingContext2D, text: string | string[], x: number, y: number, font: CanvasFontSpec, opts?: RenderTextOpts): void;
+/**
+ * Add a path of a rectangle with rounded corners to the current sub-path
+ * @param ctx - Context
+ * @param rect - Bounding rect
+ */
+export declare function addRoundedRectPath(ctx: CanvasRenderingContext2D, rect: RoundedRect & {
+    radius: TRBLCorners;
+}): void;
+export {};
Index: node_modules/chart.js/dist/helpers/helpers.collection.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.collection.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.collection.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+/**
+ * Binary search
+ * @param table - the table search. must be sorted!
+ * @param value - value to find
+ * @param cmp
+ * @private
+ */
+export declare function _lookup(table: number[], value: number, cmp?: (value: number) => boolean): {
+    lo: number;
+    hi: number;
+};
+export declare function _lookup<T>(table: T[], value: number, cmp: (value: number) => boolean): {
+    lo: number;
+    hi: number;
+};
+/**
+ * Binary search
+ * @param table - the table search. must be sorted!
+ * @param key - property name for the value in each entry
+ * @param value - value to find
+ * @param last - lookup last index
+ * @private
+ */
+export declare const _lookupByKey: (table: Record<string, number>[], key: string, value: number, last?: boolean) => {
+    lo: number;
+    hi: number;
+};
+/**
+ * Reverse binary search
+ * @param table - the table search. must be sorted!
+ * @param key - property name for the value in each entry
+ * @param value - value to find
+ * @private
+ */
+export declare const _rlookupByKey: (table: Record<string, number>[], key: string, value: number) => {
+    lo: number;
+    hi: number;
+};
+/**
+ * Return subset of `values` between `min` and `max` inclusive.
+ * Values are assumed to be in sorted order.
+ * @param values - sorted array of values
+ * @param min - min value
+ * @param max - max value
+ */
+export declare function _filterBetween(values: number[], min: number, max: number): number[];
+export interface ArrayListener<T> {
+    _onDataPush?(...item: T[]): void;
+    _onDataPop?(): void;
+    _onDataShift?(): void;
+    _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;
+    _onDataUnshift?(...item: T[]): void;
+}
+/**
+ * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',
+ * 'unshift') and notify the listener AFTER the array has been altered. Listeners are
+ * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.
+ */
+export declare function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;
+/**
+ * Removes the given array event listener and cleanup extra attached properties (such as
+ * the _chartjs stub and overridden methods) if array doesn't have any more listeners.
+ */
+export declare function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;
+/**
+ * @param items
+ */
+export declare function _arrayUnique<T>(items: T[]): T[];
Index: node_modules/chart.js/dist/helpers/helpers.color.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.color.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.color.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { Color } from '@kurkle/color';
+export declare function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient;
+export declare function color(value: CanvasGradient): CanvasGradient;
+export declare function color(value: CanvasPattern): CanvasPattern;
+export declare function color(value: string | {
+    r: number;
+    g: number;
+    b: number;
+    a: number;
+} | [number, number, number] | [number, number, number, number]): Color;
+export declare function getHoverColor(value: CanvasGradient): CanvasGradient;
+export declare function getHoverColor(value: CanvasPattern): CanvasPattern;
+export declare function getHoverColor(value: string): string;
Index: node_modules/chart.js/dist/helpers/helpers.config.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.config.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.config.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import type { AnyObject } from '../types/basic.js';
+import type { ChartMeta } from '../types/index.js';
+import type { ResolverObjectKey, ResolverCache, ResolverProxy, DescriptorDefaults, Descriptor, ContextProxy } from './helpers.config.types.js';
+export * from './helpers.config.types.js';
+/**
+ * Creates a Proxy for resolving raw values for options.
+ * @param scopes - The option scopes to look for values, in resolution order
+ * @param prefixes - The prefixes for values, in resolution order.
+ * @param rootScopes - The root option scopes
+ * @param fallback - Parent scopes fallback
+ * @param getTarget - callback for getting the target for changed values
+ * @returns Proxy
+ * @private
+ */
+export declare function _createResolver<T extends AnyObject[] = AnyObject[], R extends AnyObject[] = T>(scopes: T, prefixes?: string[], rootScopes?: R, fallback?: ResolverObjectKey, getTarget?: () => AnyObject): any;
+/**
+ * Returns an Proxy for resolving option values with context.
+ * @param proxy - The Proxy returned by `_createResolver`
+ * @param context - Context object for scriptable/indexable options
+ * @param subProxy - The proxy provided for scriptable options
+ * @param descriptorDefaults - Defaults for descriptors
+ * @private
+ */
+export declare function _attachContext<T extends AnyObject[] = AnyObject[], R extends AnyObject[] = T>(proxy: ResolverProxy<T, R>, context: AnyObject, subProxy?: ResolverProxy<T, R>, descriptorDefaults?: DescriptorDefaults): ContextProxy<T, R>;
+/**
+ * @private
+ */
+export declare function _descriptors(proxy: ResolverCache, defaults?: DescriptorDefaults): Descriptor;
+export declare function _parseObjectDataRadialScale(meta: ChartMeta<'line' | 'scatter'>, data: AnyObject[], start: number, count: number): {
+    r: unknown;
+}[];
Index: node_modules/chart.js/dist/helpers/helpers.config.types.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.config.types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.config.types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+import type { AnyObject } from '../types/basic.js';
+import type { Merge } from '../types/utils.js';
+export type ResolverObjectKey = string | boolean;
+export interface ResolverCache<T extends AnyObject[] = AnyObject[], R extends AnyObject[] = T> {
+    [Symbol.toStringTag]: 'Object';
+    _cacheable: boolean;
+    _scopes: T;
+    _rootScopes: T | R;
+    _fallback: ResolverObjectKey;
+    _keys?: string[];
+    _scriptable?: boolean;
+    _indexable?: boolean;
+    _allKeys?: boolean;
+    _storage?: T[number];
+    _getTarget(): T[number];
+    override<S extends AnyObject>(scope: S): ResolverProxy<(T[number] | S)[], T | R>;
+}
+export type ResolverProxy<T extends AnyObject[] = AnyObject[], R extends AnyObject[] = T> = Merge<T[number]> & ResolverCache<T, R>;
+export interface DescriptorDefaults {
+    scriptable: boolean;
+    indexable: boolean;
+    allKeys?: boolean;
+}
+export interface Descriptor {
+    allKeys: boolean;
+    scriptable: boolean;
+    indexable: boolean;
+    isScriptable(key: string): boolean;
+    isIndexable(key: string): boolean;
+}
+export interface ContextCache<T extends AnyObject[] = AnyObject[], R extends AnyObject[] = T> {
+    _cacheable: boolean;
+    _proxy: ResolverProxy<T, R>;
+    _context: AnyObject;
+    _subProxy: ResolverProxy<T, R>;
+    _stack: Set<string>;
+    _descriptors: Descriptor;
+    setContext(ctx: AnyObject): ContextProxy<T, R>;
+    override<S extends AnyObject>(scope: S): ContextProxy<(T[number] | S)[], T | R>;
+}
+export type ContextProxy<T extends AnyObject[] = AnyObject[], R extends AnyObject[] = T> = Merge<T[number]> & ContextCache<T, R>;
Index: node_modules/chart.js/dist/helpers/helpers.core.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.core.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.core.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,147 @@
+/**
+ * @namespace Chart.helpers
+ */
+import type { AnyObject } from '../types/basic.js';
+import type { ActiveDataPoint, ChartEvent } from '../types/index.js';
+/**
+ * An empty function that can be used, for example, for optional callback.
+ */
+export declare function noop(): void;
+/**
+ * Returns a unique id, sequentially generated from a global variable.
+ */
+export declare const uid: () => number;
+/**
+ * Returns true if `value` is neither null nor undefined, else returns false.
+ * @param value - The value to test.
+ * @since 2.7.0
+ */
+export declare function isNullOrUndef(value: unknown): value is null | undefined;
+/**
+ * Returns true if `value` is an array (including typed arrays), else returns false.
+ * @param value - The value to test.
+ * @function
+ */
+export declare function isArray<T = unknown>(value: unknown): value is T[];
+/**
+ * Returns true if `value` is an object (excluding null), else returns false.
+ * @param value - The value to test.
+ * @since 2.7.0
+ */
+export declare function isObject(value: unknown): value is AnyObject;
+/**
+ * Returns true if `value` is a finite number, else returns false
+ * @param value  - The value to test.
+ */
+declare function isNumberFinite(value: unknown): value is number;
+export { isNumberFinite as isFinite, };
+/**
+ * Returns `value` if finite, else returns `defaultValue`.
+ * @param value - The value to return if defined.
+ * @param defaultValue - The value to return if `value` is not finite.
+ */
+export declare function finiteOrDefault(value: unknown, defaultValue: number): number;
+/**
+ * Returns `value` if defined, else returns `defaultValue`.
+ * @param value - The value to return if defined.
+ * @param defaultValue - The value to return if `value` is undefined.
+ */
+export declare function valueOrDefault<T>(value: T | undefined, defaultValue: T): T;
+export declare const toPercentage: (value: number | string, dimension: number) => number;
+export declare const toDimension: (value: number | string, dimension: number) => number;
+/**
+ * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
+ * value returned by `fn`. If `fn` is not a function, this method returns undefined.
+ * @param fn - The function to call.
+ * @param args - The arguments with which `fn` should be called.
+ * @param [thisArg] - The value of `this` provided for the call to `fn`.
+ */
+export declare function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(fn: T | undefined, args: unknown[], thisArg?: TA): R | undefined;
+/**
+ * Note(SB) for performance sake, this method should only be used when loopable type
+ * is unknown or in none intensive code (not called often and small loopable). Else
+ * it's preferable to use a regular for() loop and save extra function calls.
+ * @param loopable - The object or array to be iterated.
+ * @param fn - The function to call for each item.
+ * @param [thisArg] - The value of `this` provided for the call to `fn`.
+ * @param [reverse] - If true, iterates backward on the loopable.
+ */
+export declare function each<T, TA>(loopable: Record<string, T>, fn: (this: TA, v: T, i: string) => void, thisArg?: TA, reverse?: boolean): void;
+export declare function each<T, TA>(loopable: T[], fn: (this: TA, v: T, i: number) => void, thisArg?: TA, reverse?: boolean): void;
+/**
+ * Returns true if the `a0` and `a1` arrays have the same content, else returns false.
+ * @param a0 - The array to compare
+ * @param a1 - The array to compare
+ * @private
+ */
+export declare function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]): boolean;
+/**
+ * Returns a deep copy of `source` without keeping references on objects and arrays.
+ * @param source - The value to clone.
+ */
+export declare function clone<T>(source: T): T;
+/**
+ * The default merger when Chart.helpers.merge is called without merger option.
+ * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.
+ * @private
+ */
+export declare function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject): void;
+export interface MergeOptions {
+    merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;
+}
+/**
+ * Recursively deep copies `source` properties into `target` with the given `options`.
+ * IMPORTANT: `target` is not cloned and will be updated with `source` properties.
+ * @param target - The target object in which all sources are merged into.
+ * @param source - Object(s) to merge into `target`.
+ * @param [options] - Merging options:
+ * @param [options.merger] - The merge method (key, target, source, options)
+ * @returns The `target` object.
+ */
+export declare function merge<T>(target: T, source: [], options?: MergeOptions): T;
+export declare function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;
+export declare function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;
+export declare function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;
+export declare function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;
+export declare function merge<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4], options?: MergeOptions): T & S1 & S2 & S3 & S4;
+export declare function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;
+/**
+ * Recursively deep copies `source` properties into `target` *only* if not defined in target.
+ * IMPORTANT: `target` is not cloned and will be updated with `source` properties.
+ * @param target - The target object in which all sources are merged into.
+ * @param source - Object(s) to merge into `target`.
+ * @returns The `target` object.
+ */
+export declare function mergeIf<T>(target: T, source: []): T;
+export declare function mergeIf<T, S1>(target: T, source: S1): T & S1;
+export declare function mergeIf<T, S1>(target: T, source: [S1]): T & S1;
+export declare function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;
+export declare function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;
+export declare function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;
+export declare function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;
+/**
+ * Merges source[key] in target[key] only if target[key] is undefined.
+ * @private
+ */
+export declare function _mergerIf(key: string, target: AnyObject, source: AnyObject): void;
+/**
+ * @private
+ */
+export declare function _deprecated(scope: string, value: unknown, previous: string, current: string): void;
+/**
+ * @private
+ */
+export declare function _splitKey(key: string): string[];
+export declare function resolveObjectKey(obj: AnyObject, key: string): any;
+/**
+ * @private
+ */
+export declare function _capitalize(str: string): string;
+export declare const defined: (value: unknown) => boolean;
+export declare const isFunction: (value: unknown) => value is (...args: any[]) => any;
+export declare const setsEqual: <T>(a: Set<T>, b: Set<T>) => boolean;
+/**
+ * @param e - The event
+ * @private
+ */
+export declare function _isClickEvent(e: ChartEvent): boolean;
Index: node_modules/chart.js/dist/helpers/helpers.curve.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.curve.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.curve.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import type { ChartArea } from '../types/index.js';
+import type { SplinePoint } from '../types/geometric.js';
+export declare function splineCurve(firstPoint: SplinePoint, middlePoint: SplinePoint, afterPoint: SplinePoint, t: number): {
+    previous: SplinePoint;
+    next: SplinePoint;
+};
+/**
+ * This function calculates Bézier control points in a similar way than |splineCurve|,
+ * but preserves monotonicity of the provided data and ensures no local extremums are added
+ * between the dataset discrete points due to the interpolation.
+ * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation
+ */
+export declare function splineCurveMonotone(points: SplinePoint[], indexAxis?: 'x' | 'y'): void;
+/**
+ * @private
+ */
+export declare function _updateBezierControlPoints(points: SplinePoint[], options: any, area: ChartArea, loop: boolean, indexAxis: 'x' | 'y'): void;
Index: node_modules/chart.js/dist/helpers/helpers.dataset.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.dataset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.dataset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+import type { Chart, ChartMeta, TRBL } from '../types/index.js';
+export declare function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false;
Index: node_modules/chart.js/dist/helpers/helpers.dom.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.dom.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.dom.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+import type PrivateChart from '../core/core.controller.js';
+import type { Chart, ChartEvent } from '../types.js';
+/**
+ * @private
+ */
+export declare function _isDomSupported(): boolean;
+/**
+ * @private
+ */
+export declare function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement;
+export declare function getStyle(el: HTMLElement, property: string): string;
+/**
+ * Gets an event's x, y coordinates, relative to the chart area
+ * @param event
+ * @param chart
+ * @returns x and y coordinates of the event
+ */
+export declare function getRelativePosition(event: Event | ChartEvent | TouchEvent | MouseEvent, chart: Chart | PrivateChart): {
+    x: number;
+    y: number;
+};
+export declare function getMaximumSize(canvas: HTMLCanvasElement, bbWidth?: number, bbHeight?: number, aspectRatio?: number): {
+    width: number;
+    height: number;
+};
+/**
+ * @param chart
+ * @param forceRatio
+ * @param forceStyle
+ * @returns True if the canvas context size or transformation has changed.
+ */
+export declare function retinaScale(chart: Chart | PrivateChart, forceRatio: number, forceStyle?: boolean): boolean | void;
+/**
+ * Detects support for options object argument in addEventListener.
+ * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
+ * @private
+ */
+export declare const supportsEventListenerOptions: boolean;
+/**
+ * The "used" size is the final value of a dimension property after all calculations have
+ * been performed. This method uses the computed style of `element` but returns undefined
+ * if the computed style is not expressed in pixels. That can happen in some cases where
+ * `element` has a size relative to its parent and this last one is not yet displayed,
+ * for example because of `display: none` on a parent node.
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
+ * @returns Size in pixels or undefined if unknown.
+ */
+export declare function readUsedSize(element: HTMLElement, property: 'width' | 'height'): number | undefined;
Index: node_modules/chart.js/dist/helpers/helpers.easing.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.easing.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.easing.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+/**
+ * Easing functions adapted from Robert Penner's easing equations.
+ * @namespace Chart.helpers.easing.effects
+ * @see http://www.robertpenner.com/easing/
+ */
+declare const effects: {
+    readonly linear: (t: number) => number;
+    readonly easeInQuad: (t: number) => number;
+    readonly easeOutQuad: (t: number) => number;
+    readonly easeInOutQuad: (t: number) => number;
+    readonly easeInCubic: (t: number) => number;
+    readonly easeOutCubic: (t: number) => number;
+    readonly easeInOutCubic: (t: number) => number;
+    readonly easeInQuart: (t: number) => number;
+    readonly easeOutQuart: (t: number) => number;
+    readonly easeInOutQuart: (t: number) => number;
+    readonly easeInQuint: (t: number) => number;
+    readonly easeOutQuint: (t: number) => number;
+    readonly easeInOutQuint: (t: number) => number;
+    readonly easeInSine: (t: number) => number;
+    readonly easeOutSine: (t: number) => number;
+    readonly easeInOutSine: (t: number) => number;
+    readonly easeInExpo: (t: number) => number;
+    readonly easeOutExpo: (t: number) => number;
+    readonly easeInOutExpo: (t: number) => number;
+    readonly easeInCirc: (t: number) => number;
+    readonly easeOutCirc: (t: number) => number;
+    readonly easeInOutCirc: (t: number) => number;
+    readonly easeInElastic: (t: number) => number;
+    readonly easeOutElastic: (t: number) => number;
+    readonly easeInOutElastic: (t: number) => number;
+    readonly easeInBack: (t: number) => number;
+    readonly easeOutBack: (t: number) => number;
+    readonly easeInOutBack: (t: number) => number;
+    readonly easeInBounce: (t: number) => number;
+    readonly easeOutBounce: (t: number) => number;
+    readonly easeInOutBounce: (t: number) => number;
+};
+export type EasingFunction = keyof typeof effects;
+export default effects;
Index: node_modules/chart.js/dist/helpers/helpers.extras.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.extras.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.extras.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+import type { ChartMeta, PointElement } from '../types/index.js';
+export declare function fontString(pixelSize: number, fontStyle: string, fontFamily: string): string;
+/**
+* Request animation polyfill
+*/
+export declare const requestAnimFrame: (((callback: FrameRequestCallback) => number) & typeof requestAnimationFrame) | ((callback: any) => any);
+/**
+ * Throttles calling `fn` once per animation frame
+ * Latest arguments are used on the actual call
+ */
+export declare function throttled<TArgs extends Array<any>>(fn: (...args: TArgs) => void, thisArg: any): (...args: TArgs) => void;
+/**
+ * Debounces calling `fn` for `delay` ms
+ */
+export declare function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number): (...args: TArgs) => number;
+/**
+ * Converts 'start' to 'left', 'end' to 'right' and others to 'center'
+ * @private
+ */
+export declare const _toLeftRightCenter: (align: 'start' | 'end' | 'center') => "center" | "left" | "right";
+/**
+ * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`
+ * @private
+ */
+export declare const _alignStartEnd: (align: 'start' | 'end' | 'center', start: number, end: number) => number;
+/**
+ * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`
+ * @private
+ */
+export declare const _textX: (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => number;
+/**
+ * Return start and count of visible points.
+ * @private
+ */
+export declare function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean): {
+    start: number;
+    count: number;
+};
+/**
+ * Checks if the scale ranges have changed.
+ * @param {object} meta - dataset meta.
+ * @returns {boolean}
+ * @private
+ */
+export declare function _scaleRangesChanged(meta: any): boolean;
Index: node_modules/chart.js/dist/helpers/helpers.interpolation.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.interpolation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.interpolation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import type { Point, SplinePoint } from '../types/geometric.js';
+/**
+ * @private
+ */
+export declare function _pointInLine(p1: Point, p2: Point, t: number, mode?: any): {
+    x: number;
+    y: number;
+};
+/**
+ * @private
+ */
+export declare function _steppedInterpolation(p1: Point, p2: Point, t: number, mode: 'middle' | 'after' | unknown): {
+    x: number;
+    y: number;
+};
+/**
+ * @private
+ */
+export declare function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?: any): {
+    x: number;
+    y: number;
+};
Index: node_modules/chart.js/dist/helpers/helpers.intl.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.intl.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.intl.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions): string;
Index: node_modules/chart.js/dist/helpers/helpers.math.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.math.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.math.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,84 @@
+import type { Point } from '../types/geometric.js';
+/**
+ * @alias Chart.helpers.math
+ * @namespace
+ */
+export declare const PI: number;
+export declare const TAU: number;
+export declare const PITAU: number;
+export declare const INFINITY: number;
+export declare const RAD_PER_DEG: number;
+export declare const HALF_PI: number;
+export declare const QUARTER_PI: number;
+export declare const TWO_THIRDS_PI: number;
+export declare const log10: (x: number) => number;
+export declare const sign: (x: number) => number;
+export declare function almostEquals(x: number, y: number, epsilon: number): boolean;
+/**
+ * Implementation of the nice number algorithm used in determining where axis labels will go
+ */
+export declare function niceNum(range: number): number;
+/**
+ * Returns an array of factors sorted from 1 to sqrt(value)
+ * @private
+ */
+export declare function _factorize(value: number): number[];
+export declare function isNumber(n: unknown): n is number;
+export declare function almostWhole(x: number, epsilon: number): boolean;
+/**
+ * @private
+ */
+export declare function _setMinAndMaxByKey(array: Record<string, number>[], target: {
+    min: number;
+    max: number;
+}, property: string): void;
+export declare function toRadians(degrees: number): number;
+export declare function toDegrees(radians: number): number;
+/**
+ * Returns the number of decimal places
+ * i.e. the number of digits after the decimal point, of the value of this Number.
+ * @param x - A number.
+ * @returns The number of decimal places.
+ * @private
+ */
+export declare function _decimalPlaces(x: number): number;
+export declare function getAngleFromPoint(centrePoint: Point, anglePoint: Point): {
+    angle: number;
+    distance: number;
+};
+export declare function distanceBetweenPoints(pt1: Point, pt2: Point): number;
+/**
+ * Shortest distance between angles, in either direction.
+ * @private
+ */
+export declare function _angleDiff(a: number, b: number): number;
+/**
+ * Normalize angle to be between 0 and 2*PI
+ * @private
+ */
+export declare function _normalizeAngle(a: number): number;
+/**
+ * @private
+ */
+export declare function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean): boolean;
+/**
+ * Limit `value` between `min` and `max`
+ * @param value
+ * @param min
+ * @param max
+ * @private
+ */
+export declare function _limitValue(value: number, min: number, max: number): number;
+/**
+ * @param {number} value
+ * @private
+ */
+export declare function _int16Range(value: number): number;
+/**
+ * @param value
+ * @param start
+ * @param end
+ * @param [epsilon]
+ * @private
+ */
+export declare function _isBetween(value: number, start: number, end: number, epsilon?: number): boolean;
Index: node_modules/chart.js/dist/helpers/helpers.options.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.options.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.options.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,97 @@
+import type { ChartArea, FontSpec, Point } from '../types/index.js';
+import type { TRBL, TRBLCorners } from '../types/geometric.js';
+/**
+ * @alias Chart.helpers.options
+ * @namespace
+ */
+/**
+ * Converts the given line height `value` in pixels for a specific font `size`.
+ * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').
+ * @param size - The font size (in pixels) used to resolve relative `value`.
+ * @returns The effective line height in pixels (size * 1.2 if value is invalid).
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height
+ * @since 2.7.0
+ */
+export declare function toLineHeight(value: number | string, size: number): number;
+/**
+ * @param value
+ * @param props
+ */
+export declare function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;
+export declare function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;
+/**
+ * Converts the given value into a TRBL object.
+ * @param value - If a number, set the value to all TRBL component,
+ *  else, if an object, use defined properties and sets undefined ones to 0.
+ *  x / y are shorthands for same value for left/right and top/bottom.
+ * @returns The padding values (top, right, bottom, left)
+ * @since 3.0.0
+ */
+export declare function toTRBL(value: number | TRBL | Point): Record<"left" | "top" | "bottom" | "right", number>;
+/**
+ * Converts the given value into a TRBL corners object (similar with css border-radius).
+ * @param value - If a number, set the value to all TRBL corner components,
+ *  else, if an object, use defined properties and sets undefined ones to 0.
+ * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)
+ * @since 3.0.0
+ */
+export declare function toTRBLCorners(value: number | TRBLCorners): Record<"topLeft" | "topRight" | "bottomLeft" | "bottomRight", number>;
+/**
+ * Converts the given value into a padding object with pre-computed width/height.
+ * @param value - If a number, set the value to all TRBL component,
+ *  else, if an object, use defined properties and sets undefined ones to 0.
+ *  x / y are shorthands for same value for left/right and top/bottom.
+ * @returns The padding values (top, right, bottom, left, width, height)
+ * @since 2.7.0
+ */
+export declare function toPadding(value?: number | TRBL): ChartArea;
+/**
+ * Parses font options and returns the font object.
+ * @param options - A object that contains font options to be parsed.
+ * @param fallback - A object that contains fallback font options.
+ * @return The font object.
+ * @private
+ */
+export declare function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>): {
+    family: string;
+    lineHeight: number;
+    size: number;
+    style: "normal" | "inherit" | "italic" | "oblique" | "initial";
+    weight: number | "bold" | "normal" | "lighter" | "bolder";
+    string: string;
+};
+/**
+ * Evaluates the given `inputs` sequentially and returns the first defined value.
+ * @param inputs - An array of values, falling back to the last value.
+ * @param context - If defined and the current value is a function, the value
+ * is called with `context` as first argument and the result becomes the new input.
+ * @param index - If defined and the current value is an array, the value
+ * at `index` become the new input.
+ * @param info - object to return information about resolution in
+ * @param info.cacheable - Will be set to `false` if option is not cacheable.
+ * @since 2.7.0
+ */
+export declare function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: {
+    cacheable: boolean;
+}): unknown;
+/**
+ * @param minmax
+ * @param grace
+ * @param beginAtZero
+ * @private
+ */
+export declare function _addGrace(minmax: {
+    min: number;
+    max: number;
+}, grace: number | string, beginAtZero: boolean): {
+    min: number;
+    max: number;
+};
+/**
+ * Create a context inheriting parentContext
+ * @param parentContext
+ * @param context
+ * @returns
+ */
+export declare function createContext<T extends object>(parentContext: null, context: T): T;
+export declare function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;
Index: node_modules/chart.js/dist/helpers/helpers.rtl.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.rtl.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.rtl.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+export interface RTLAdapter {
+    x(x: number): number;
+    setWidth(w: number): void;
+    textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';
+    xPlus(x: number, value: number): number;
+    leftForLtr(x: number, itemWidth: number): number;
+}
+export declare function getRtlAdapter(rtl: boolean, rectX: number, width: number): RTLAdapter;
+export declare function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl'): void;
+export declare function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]): void;
Index: node_modules/chart.js/dist/helpers/helpers.segment.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/helpers.segment.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/helpers.segment.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+/**
+ * Returns the sub-segment(s) of a line segment that fall in the given bounds
+ * @param {object} segment
+ * @param {number} segment.start - start index of the segment, referring the points array
+ * @param {number} segment.end - end index of the segment, referring the points array
+ * @param {boolean} segment.loop - indicates that the segment is a loop
+ * @param {object} [segment.style] - segment style
+ * @param {PointElement[]} points - the points that this segment refers to
+ * @param {object} [bounds]
+ * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.
+ * @param {number} bounds.start - start value of the property
+ * @param {number} bounds.end - end value of the property
+ * @private
+ **/
+export function _boundSegment(segment: {
+    start: number;
+    end: number;
+    loop: boolean;
+    style?: object;
+}, points: PointElement[], bounds?: {
+    property: string;
+    start: number;
+    end: number;
+}): {
+    start: number;
+    end: number;
+    loop: boolean;
+    style?: object;
+}[];
+/**
+ * Returns the segments of the line that are inside given bounds
+ * @param {LineElement} line
+ * @param {object} [bounds]
+ * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.
+ * @param {number} bounds.start - start value of the `property`
+ * @param {number} bounds.end - end value of the `property`
+ * @private
+ */
+export function _boundSegments(line: LineElement, bounds?: {
+    property: string;
+    start: number;
+    end: number;
+}): {
+    start: number;
+    end: number;
+    loop: boolean;
+    style?: object;
+}[];
+/**
+ * Compute the continuous segments that define the whole line
+ * There can be skipped points within a segment, if spanGaps is true.
+ * @param {LineElement} line
+ * @param {object} [segmentOptions]
+ * @return {Segment[]}
+ * @private
+ */
+export function _computeSegments(line: LineElement, segmentOptions?: object): Segment[];
+export type LineElement = import('../elements/element.line.js').default;
+export type PointElement = import('../elements/element.point.js').default;
+export type Segment = {
+    start: number;
+    end: number;
+    loop: boolean;
+    style?: any;
+};
Index: node_modules/chart.js/dist/helpers/index.d.ts
===================================================================
--- node_modules/chart.js/dist/helpers/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/helpers/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+export * from './helpers.color.js';
+export * from './helpers.core.js';
+export * from './helpers.canvas.js';
+export * from './helpers.collection.js';
+export * from './helpers.config.js';
+export * from './helpers.curve.js';
+export * from './helpers.dom.js';
+export { default as easingEffects } from './helpers.easing.js';
+export * from './helpers.extras.js';
+export * from './helpers.interpolation.js';
+export * from './helpers.intl.js';
+export * from './helpers.options.js';
+export * from './helpers.math.js';
+export * from './helpers.rtl.js';
+export * from './helpers.segment.js';
+export * from './helpers.dataset.js';
Index: node_modules/chart.js/dist/index.d.ts
===================================================================
--- node_modules/chart.js/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+export * from './controllers/index.js';
+export * from './core/index.js';
+export * from './elements/index.js';
+export * from './platform/index.js';
+export * from './plugins/index.js';
+export * from './scales/index.js';
+import * as controllers from './controllers/index.js';
+import * as elements from './elements/index.js';
+import * as plugins from './plugins/index.js';
+import * as scales from './scales/index.js';
+export { controllers, elements, plugins, scales, };
+export declare const registerables: (typeof controllers | typeof elements | typeof plugins | typeof scales)[];
Index: node_modules/chart.js/dist/index.umd.d.ts
===================================================================
--- node_modules/chart.js/dist/index.umd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/index.umd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+/**
+ * @namespace Chart
+ */
+import Chart from './core/core.controller.js';
+export default Chart;
Index: node_modules/chart.js/dist/platform/index.d.ts
===================================================================
--- node_modules/chart.js/dist/platform/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/platform/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export function _detectPlatform(canvas: any): typeof BasicPlatform | typeof DomPlatform;
+import BasicPlatform from "./platform.basic.js";
+import DomPlatform from "./platform.dom.js";
+import BasePlatform from "./platform.base.js";
+export { BasePlatform, BasicPlatform, DomPlatform };
Index: node_modules/chart.js/dist/platform/platform.base.d.ts
===================================================================
--- node_modules/chart.js/dist/platform/platform.base.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/platform/platform.base.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+/**
+ * @typedef { import('../core/core.controller.js').default } Chart
+ */
+/**
+ * Abstract class that allows abstracting platform dependencies away from the chart.
+ */
+export default class BasePlatform {
+    /**
+       * Called at chart construction time, returns a context2d instance implementing
+       * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.
+       * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)
+       * @param {number} [aspectRatio] - The chart options
+       */
+    acquireContext(canvas: HTMLCanvasElement, aspectRatio?: number): void;
+    /**
+       * Called at chart destruction time, releases any resources associated to the context
+       * previously returned by the acquireContext() method.
+       * @param {CanvasRenderingContext2D} context - The context2d instance
+       * @returns {boolean} true if the method succeeded, else false
+       */
+    releaseContext(context: CanvasRenderingContext2D): boolean;
+    /**
+       * Registers the specified listener on the given chart.
+       * @param {Chart} chart - Chart from which to listen for event
+       * @param {string} type - The ({@link ChartEvent}) type to listen for
+       * @param {function} listener - Receives a notification (an object that implements
+       * the {@link ChartEvent} interface) when an event of the specified type occurs.
+       */
+    addEventListener(chart: Chart, type: string, listener: Function): void;
+    /**
+       * Removes the specified listener previously registered with addEventListener.
+       * @param {Chart} chart - Chart from which to remove the listener
+       * @param {string} type - The ({@link ChartEvent}) type to remove
+       * @param {function} listener - The listener function to remove from the event target.
+       */
+    removeEventListener(chart: Chart, type: string, listener: Function): void;
+    /**
+       * @returns {number} the current devicePixelRatio of the device this platform is connected to.
+       */
+    getDevicePixelRatio(): number;
+    /**
+       * Returns the maximum size in pixels of given canvas element.
+       * @param {HTMLCanvasElement} element
+       * @param {number} [width] - content width of parent element
+       * @param {number} [height] - content height of parent element
+       * @param {number} [aspectRatio] - aspect ratio to maintain
+       */
+    getMaximumSize(element: HTMLCanvasElement, width?: number, height?: number, aspectRatio?: number): {
+        width: number;
+        height: number;
+    };
+    /**
+       * @param {HTMLCanvasElement} canvas
+       * @returns {boolean} true if the canvas is attached to the platform, false if not.
+       */
+    isAttached(canvas: HTMLCanvasElement): boolean;
+    /**
+     * Updates config with platform specific requirements
+     * @param {import('../core/core.config.js').default} config
+     */
+    updateConfig(config: import('../core/core.config.js').default): void;
+}
+export type Chart = import('../core/core.controller.js').default;
Index: node_modules/chart.js/dist/platform/platform.basic.d.ts
===================================================================
--- node_modules/chart.js/dist/platform/platform.basic.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/platform/platform.basic.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Platform class for charts without access to the DOM or to many element properties
+ * This platform is used by default for any chart passed an OffscreenCanvas.
+ * @extends BasePlatform
+ */
+export default class BasicPlatform extends BasePlatform {
+    acquireContext(item: any): any;
+    updateConfig(config: any): void;
+}
+import BasePlatform from "./platform.base.js";
Index: node_modules/chart.js/dist/platform/platform.dom.d.ts
===================================================================
--- node_modules/chart.js/dist/platform/platform.dom.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/platform/platform.dom.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Platform class for charts that can access the DOM and global window/document properties
+ * @extends BasePlatform
+ */
+export default class DomPlatform extends BasePlatform {
+    /**
+       * @param {HTMLCanvasElement} canvas
+       * @param {number} [aspectRatio]
+       * @return {CanvasRenderingContext2D|null}
+       */
+    acquireContext(canvas: HTMLCanvasElement, aspectRatio?: number): CanvasRenderingContext2D | null;
+    /**
+       * @param {Chart} chart
+       * @param {string} type
+       */
+    removeEventListener(chart: Chart, type: string): void;
+}
+export type Chart = import('../core/core.controller.js').default;
+import BasePlatform from "./platform.base.js";
Index: node_modules/chart.js/dist/plugins/index.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+export { default as Colors } from "./plugin.colors.js";
+export { default as Decimation } from "./plugin.decimation.js";
+export { default as Filler } from "./plugin.filler/index.js";
+export { default as Legend } from "./plugin.legend.js";
+export { default as SubTitle } from "./plugin.subtitle.js";
+export { default as Title } from "./plugin.title.js";
+export { default as Tooltip } from "./plugin.tooltip.js";
Index: node_modules/chart.js/dist/plugins/plugin.colors.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.colors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.colors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import type { Chart } from '../types.js';
+export interface ColorsPluginOptions {
+    enabled?: boolean;
+    forceOverride?: boolean;
+}
+declare const _default: {
+    id: string;
+    defaults: ColorsPluginOptions;
+    beforeLayout(chart: Chart, _args: any, options: ColorsPluginOptions): void;
+};
+export default _default;
Index: node_modules/chart.js/dist/plugins/plugin.decimation.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.decimation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.decimation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+declare namespace _default {
+    const id: string;
+    namespace defaults {
+        const algorithm: string;
+        const enabled: boolean;
+    }
+    function beforeElementsUpdate(chart: any, args: any, options: any): void;
+    function destroy(chart: any): void;
+}
+export default _default;
Index: node_modules/chart.js/dist/plugins/plugin.filler/filler.drawing.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.filler/filler.drawing.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.filler/filler.drawing.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export function _drawfill(ctx: any, source: any, area: any): void;
Index: node_modules/chart.js/dist/plugins/plugin.filler/filler.helper.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.filler/filler.helper.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.filler/filler.helper.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * @param {PointElement[] | { x: number; y: number; }} boundary
+ * @param {LineElement} line
+ * @return {LineElement?}
+ */
+export function _createBoundaryLine(boundary: PointElement[] | {
+    x: number;
+    y: number;
+}, line: LineElement): LineElement | null;
+export function _shouldApplyFill(source: any): boolean;
+export type Chart = import('../../core/core.controller.js').default;
+export type Scale = import('../../core/core.scale.js').default;
+export type PointElement = import('../../elements/element.point.js').default;
+import { LineElement } from "../../elements/index.js";
Index: node_modules/chart.js/dist/plugins/plugin.filler/filler.options.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.filler/filler.options.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.filler/filler.options.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * @typedef { import('../../core/core.scale.js').default } Scale
+ * @typedef { import('../../elements/element.line.js').default } LineElement
+ * @typedef { import('../../types/index.js').FillTarget } FillTarget
+ * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget
+ */
+export function _resolveTarget(sources: any, index: any, propagate: any): any;
+/**
+ * @param {LineElement} line
+ * @param {number} index
+ * @param {number} count
+ */
+export function _decodeFill(line: LineElement, index: number, count: number): any;
+/**
+ * @param {FillTarget | ComplexFillTarget} fill
+ * @param {Scale} scale
+ * @returns {number | null}
+ */
+export function _getTargetPixel(fill: FillTarget | ComplexFillTarget, scale: Scale): number | null;
+/**
+ * @param {FillTarget | ComplexFillTarget} fill
+ * @param {Scale} scale
+ * @param {number} startValue
+ * @returns {number | undefined}
+ */
+export function _getTargetValue(fill: FillTarget | ComplexFillTarget, scale: Scale, startValue: number): number | undefined;
+export type Scale = import('../../core/core.scale.js').default;
+export type LineElement = import('../../elements/element.line.js').default;
+export type FillTarget = import('../../types/index.js').FillTarget;
+export type ComplexFillTarget = import('../../types/index.js').ComplexFillTarget;
Index: node_modules/chart.js/dist/plugins/plugin.filler/filler.segment.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.filler/filler.segment.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.filler/filler.segment.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+export function _segments(line: any, target: any, property: any): ({
+    source: any;
+    target: {
+        property: any;
+        start: any;
+        end: any;
+    };
+    start: any;
+    end: any;
+} | {
+    source: {
+        start: number;
+        end: number;
+        loop: boolean;
+        style?: any;
+    };
+    target: {
+        start: number;
+        end: number;
+        loop: boolean;
+        style?: any;
+    };
+    start: {
+        [x: number]: any;
+    };
+    end: {
+        [x: number]: any;
+    };
+})[];
+export function _getBounds(property: any, first: any, last: any, loop: any): {
+    property: any;
+    start: any;
+    end: any;
+};
+export function _pointsFromSegments(boundary: any, line: any): any[];
+export function _findSegmentEnd(start: any, end: any, points: any): any;
Index: node_modules/chart.js/dist/plugins/plugin.filler/filler.target.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.filler/filler.target.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.filler/filler.target.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+/**
+ * @typedef { import('../../core/core.controller.js').default } Chart
+ * @typedef { import('../../core/core.scale.js').default } Scale
+ * @typedef { import('../../elements/element.point.js').default } PointElement
+ */
+export function _getTarget(source: any): any;
+export type Chart = import('../../core/core.controller.js').default;
+export type Scale = import('../../core/core.scale.js').default;
+export type PointElement = import('../../elements/element.point.js').default;
Index: node_modules/chart.js/dist/plugins/plugin.filler/filler.target.stack.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.filler/filler.target.stack.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.filler/filler.target.stack.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source
+ * @return {LineElement}
+ */
+export function _buildStackLine(source: {
+    chart: Chart;
+    scale: Scale;
+    index: number;
+    line: LineElement;
+}): LineElement;
+export type Chart = import('../../core/core.controller.js').default;
+export type Scale = import('../../core/core.scale.js').default;
+export type PointElement = import('../../elements/element.point.js').default;
+import { LineElement } from "../../elements/index.js";
Index: node_modules/chart.js/dist/plugins/plugin.filler/index.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.filler/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.filler/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+declare namespace _default {
+    const id: string;
+    function afterDatasetsUpdate(chart: any, _args: any, options: any): void;
+    function beforeDraw(chart: any, _args: any, options: any): void;
+    function beforeDatasetsDraw(chart: any, _args: any, options: any): void;
+    function beforeDatasetDraw(chart: any, args: any, options: any): void;
+    namespace defaults {
+        const propagate: boolean;
+        const drawTime: string;
+    }
+}
+export default _default;
Index: node_modules/chart.js/dist/plugins/plugin.filler/simpleArc.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.filler/simpleArc.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.filler/simpleArc.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+export class simpleArc {
+    constructor(opts: any);
+    x: any;
+    y: any;
+    radius: any;
+    pathSegment(ctx: any, bounds: any, opts: any): boolean;
+    interpolate(point: any): {
+        x: any;
+        y: any;
+        angle: any;
+    };
+}
Index: node_modules/chart.js/dist/plugins/plugin.legend.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.legend.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.legend.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,114 @@
+export class Legend extends Element<import("../types/basic.js").AnyObject, import("../types/basic.js").AnyObject> {
+    /**
+       * @param {{ ctx: any; options: any; chart: any; }} config
+       */
+    constructor(config: {
+        ctx: any;
+        options: any;
+        chart: any;
+    });
+    _added: boolean;
+    legendHitBoxes: any[];
+    /**
+         * @private
+         */
+    private _hoveredItem;
+    doughnutMode: boolean;
+    chart: any;
+    options: any;
+    ctx: any;
+    legendItems: any;
+    columnSizes: any[];
+    lineWidths: number[];
+    maxHeight: any;
+    maxWidth: any;
+    top: any;
+    bottom: any;
+    left: any;
+    right: any;
+    height: any;
+    width: any;
+    _margins: any;
+    position: any;
+    weight: any;
+    fullSize: any;
+    update(maxWidth: any, maxHeight: any, margins: any): void;
+    setDimensions(): void;
+    buildLabels(): void;
+    fit(): void;
+    /**
+       * @private
+       */
+    private _fitRows;
+    _fitCols(titleHeight: any, labelFont: any, boxWidth: any, _itemHeight: any): any;
+    adjustHitBoxes(): void;
+    isHorizontal(): boolean;
+    draw(): void;
+    /**
+       * @private
+       */
+    private _draw;
+    /**
+       * @protected
+       */
+    protected drawTitle(): void;
+    /**
+       * @private
+       */
+    private _computeTitleHeight;
+    /**
+       * @private
+       */
+    private _getLegendItemAt;
+    /**
+       * Handle an event
+       * @param {ChartEvent} e - The event to handle
+       */
+    handleEvent(e: ChartEvent): void;
+}
+declare namespace _default {
+    export const id: string;
+    export { Legend as _element };
+    export function start(chart: any, _args: any, options: any): void;
+    export function stop(chart: any): void;
+    export function beforeUpdate(chart: any, _args: any, options: any): void;
+    export function afterUpdate(chart: any): void;
+    export function afterEvent(chart: any, args: any): void;
+    export namespace defaults {
+        const display: boolean;
+        const position: string;
+        const align: string;
+        const fullSize: boolean;
+        const reverse: boolean;
+        const weight: number;
+        function onClick(e: any, legendItem: any, legend: any): void;
+        const onHover: any;
+        const onLeave: any;
+        namespace labels {
+            function color(ctx: any): any;
+            const boxWidth: number;
+            const padding: number;
+            function generateLabels(chart: any): any;
+        }
+        namespace title {
+            export function color_1(ctx: any): any;
+            export { color_1 as color };
+            const display_1: boolean;
+            export { display_1 as display };
+            const position_1: string;
+            export { position_1 as position };
+            export const text: string;
+        }
+    }
+    export namespace descriptors {
+        export function _scriptable(name: any): boolean;
+        export namespace labels_1 {
+            export function _scriptable_1(name: any): boolean;
+            export { _scriptable_1 as _scriptable };
+        }
+        export { labels_1 as labels };
+    }
+}
+export default _default;
+export type ChartEvent = import('../types/index.js').ChartEvent;
+import Element from "../core/core.element.js";
Index: node_modules/chart.js/dist/plugins/plugin.subtitle.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.subtitle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.subtitle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+declare namespace _default {
+    const id: string;
+    function start(chart: any, _args: any, options: any): void;
+    function stop(chart: any): void;
+    function beforeUpdate(chart: any, _args: any, options: any): void;
+    namespace defaults {
+        export const align: string;
+        export const display: boolean;
+        export namespace font {
+            const weight: string;
+        }
+        export const fullSize: boolean;
+        export const padding: number;
+        export const position: string;
+        export const text: string;
+        const weight_1: number;
+        export { weight_1 as weight };
+    }
+    namespace defaultRoutes {
+        const color: string;
+    }
+    namespace descriptors {
+        const _scriptable: boolean;
+        const _indexable: boolean;
+    }
+}
+export default _default;
Index: node_modules/chart.js/dist/plugins/plugin.title.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.title.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.title.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+export class Title extends Element<import("../types/basic.js").AnyObject, import("../types/basic.js").AnyObject> {
+    /**
+       * @param {{ ctx: any; options: any; chart: any; }} config
+       */
+    constructor(config: {
+        ctx: any;
+        options: any;
+        chart: any;
+    });
+    chart: any;
+    options: any;
+    ctx: any;
+    _padding: import("../types.js").ChartArea;
+    top: number;
+    bottom: any;
+    left: number;
+    right: any;
+    width: any;
+    height: any;
+    position: any;
+    weight: any;
+    fullSize: any;
+    update(maxWidth: any, maxHeight: any): void;
+    isHorizontal(): boolean;
+    _drawArgs(offset: any): {
+        titleX: any;
+        titleY: any;
+        maxWidth: number;
+        rotation: number;
+    };
+    draw(): void;
+}
+declare namespace _default {
+    export const id: string;
+    export { Title as _element };
+    export function start(chart: any, _args: any, options: any): void;
+    export function stop(chart: any): void;
+    export function beforeUpdate(chart: any, _args: any, options: any): void;
+    export namespace defaults {
+        export const align: string;
+        export const display: boolean;
+        export namespace font {
+            const weight: string;
+        }
+        export const fullSize: boolean;
+        export const padding: number;
+        export const position: string;
+        export const text: string;
+        const weight_1: number;
+        export { weight_1 as weight };
+    }
+    export namespace defaultRoutes {
+        const color: string;
+    }
+    export namespace descriptors {
+        const _scriptable: boolean;
+        const _indexable: boolean;
+    }
+}
+export default _default;
+import Element from "../core/core.element.js";
Index: node_modules/chart.js/dist/plugins/plugin.tooltip.d.ts
===================================================================
--- node_modules/chart.js/dist/plugins/plugin.tooltip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/plugins/plugin.tooltip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,288 @@
+export class Tooltip extends Element<import("../types/basic.js").AnyObject, import("../types/basic.js").AnyObject> {
+    /**
+     * @namespace Chart.Tooltip.positioners
+     */
+    static positioners: {
+        /**
+           * Average mode places the tooltip at the average position of the elements shown
+           */
+        average(items: any): false | {
+            x: number;
+            y: number;
+        };
+        /**
+           * Gets the tooltip position nearest of the item nearest to the event position
+           */
+        nearest(items: any, eventPosition: any): false | {
+            x: any;
+            y: any;
+        };
+    };
+    constructor(config: any);
+    opacity: number;
+    _active: any[];
+    _eventPosition: any;
+    _size: {
+        width: number;
+        height: number;
+    };
+    _cachedAnimations: Readonly<Animations>;
+    _tooltipItems: any[];
+    $animations: any;
+    $context: any;
+    chart: any;
+    options: any;
+    dataPoints: {
+        chart: import("../core/core.controller.js").default;
+        label: any;
+        parsed: any;
+        raw: any;
+        formattedValue: any;
+        dataset: any;
+        dataIndex: number;
+        datasetIndex: number;
+        element: Element<import("../types/basic.js").AnyObject, import("../types/basic.js").AnyObject>;
+    }[];
+    title: any;
+    beforeBody: any;
+    body: any[];
+    afterBody: any;
+    footer: any;
+    xAlign: any;
+    yAlign: any;
+    x: any;
+    y: any;
+    height: number;
+    width: number;
+    caretX: any;
+    caretY: any;
+    labelColors: any[];
+    labelPointStyles: any[];
+    labelTextColors: any[];
+    initialize(options: any): void;
+    /**
+       * @private
+       */
+    private _resolveAnimations;
+    /**
+       * @protected
+       */
+    protected getContext(): any;
+    getTitle(context: any, options: any): any;
+    getBeforeBody(tooltipItems: any, options: any): any;
+    getBody(tooltipItems: any, options: any): any[];
+    getAfterBody(tooltipItems: any, options: any): any;
+    getFooter(tooltipItems: any, options: any): any;
+    /**
+       * @private
+       */
+    private _createItems;
+    update(changed: any, replay: any): void;
+    drawCaret(tooltipPoint: any, ctx: any, size: any, options: any): void;
+    getCaretPosition(tooltipPoint: any, size: any, options: any): {
+        x1: any;
+        x2: any;
+        x3: any;
+        y1: any;
+        y2: any;
+        y3: any;
+    };
+    drawTitle(pt: any, ctx: any, options: any): void;
+    /**
+       * @private
+       */
+    private _drawColorBox;
+    drawBody(pt: any, ctx: any, options: any): void;
+    drawFooter(pt: any, ctx: any, options: any): void;
+    drawBackground(pt: any, ctx: any, tooltipSize: any, options: any): void;
+    /**
+       * Update x/y animation targets when _active elements are animating too
+       * @private
+       */
+    private _updateAnimationTarget;
+    /**
+     * Determine if the tooltip will draw anything
+     * @returns {boolean} True if the tooltip will render
+     */
+    _willRender(): boolean;
+    draw(ctx: any): void;
+    /**
+       * Get active elements in the tooltip
+       * @returns {Array} Array of elements that are active in the tooltip
+       */
+    getActiveElements(): any[];
+    /**
+       * Set active elements in the tooltip
+       * @param {array} activeElements Array of active datasetIndex/index pairs.
+       * @param {object} eventPosition Synthetic event position used in positioning
+       */
+    setActiveElements(activeElements: any[], eventPosition: object): void;
+    _ignoreReplayEvents: boolean;
+    /**
+       * Handle an event
+       * @param {ChartEvent} e - The event to handle
+       * @param {boolean} [replay] - This is a replayed event (from update)
+       * @param {boolean} [inChartArea] - The event is inside chartArea
+       * @returns {boolean} true if the tooltip changed
+       */
+    handleEvent(e: ChartEvent, replay?: boolean, inChartArea?: boolean): boolean;
+    /**
+       * Helper for determining the active elements for event
+       * @param {ChartEvent} e - The event to handle
+       * @param {InteractionItem[]} lastActive - Previously active elements
+       * @param {boolean} [replay] - This is a replayed event (from update)
+       * @param {boolean} [inChartArea] - The event is inside chartArea
+       * @returns {InteractionItem[]} - Active elements
+       * @private
+       */
+    private _getActiveElements;
+    /**
+       * Determine if the active elements + event combination changes the
+       * tooltip position
+       * @param {array} active - Active elements
+       * @param {ChartEvent} e - Event that triggered the position change
+       * @returns {boolean} True if the position has changed
+       */
+    _positionChanged(active: any[], e: ChartEvent): boolean;
+}
+declare namespace _default {
+    export const id: string;
+    export { Tooltip as _element };
+    export { positioners };
+    export function afterInit(chart: any, _args: any, options: any): void;
+    export function beforeUpdate(chart: any, _args: any, options: any): void;
+    export function reset(chart: any, _args: any, options: any): void;
+    export function afterDraw(chart: any): void;
+    export function afterEvent(chart: any, args: any): void;
+    export namespace defaults {
+        export const enabled: boolean;
+        export const external: any;
+        export const position: string;
+        export const backgroundColor: string;
+        export const titleColor: string;
+        export namespace titleFont {
+            const weight: string;
+        }
+        export const titleSpacing: number;
+        export const titleMarginBottom: number;
+        export const titleAlign: string;
+        export const bodyColor: string;
+        export const bodySpacing: number;
+        export const bodyFont: {};
+        export const bodyAlign: string;
+        export const footerColor: string;
+        export const footerSpacing: number;
+        export const footerMarginTop: number;
+        export namespace footerFont {
+            const weight_1: string;
+            export { weight_1 as weight };
+        }
+        export const footerAlign: string;
+        export const padding: number;
+        export const caretPadding: number;
+        export const caretSize: number;
+        export const cornerRadius: number;
+        export function boxHeight(ctx: any, opts: any): any;
+        export function boxWidth(ctx: any, opts: any): any;
+        export const multiKeyBackground: string;
+        export const displayColors: boolean;
+        export const boxPadding: number;
+        export const borderColor: string;
+        export const borderWidth: number;
+        export namespace animation {
+            const duration: number;
+            const easing: string;
+        }
+        export namespace animations {
+            namespace numbers {
+                const type: string;
+                const properties: string[];
+            }
+            namespace opacity {
+                const easing_1: string;
+                export { easing_1 as easing };
+                const duration_1: number;
+                export { duration_1 as duration };
+            }
+        }
+        export { defaultCallbacks as callbacks };
+    }
+    export namespace defaultRoutes {
+        const bodyFont_1: string;
+        export { bodyFont_1 as bodyFont };
+        const footerFont_1: string;
+        export { footerFont_1 as footerFont };
+        const titleFont_1: string;
+        export { titleFont_1 as titleFont };
+    }
+    export namespace descriptors {
+        export function _scriptable(name: any): boolean;
+        export const _indexable: boolean;
+        export namespace callbacks {
+            const _scriptable_1: boolean;
+            export { _scriptable_1 as _scriptable };
+            const _indexable_1: boolean;
+            export { _indexable_1 as _indexable };
+        }
+        export namespace animation_1 {
+            const _fallback: boolean;
+        }
+        export { animation_1 as animation };
+        export namespace animations_1 {
+            const _fallback_1: string;
+            export { _fallback_1 as _fallback };
+        }
+        export { animations_1 as animations };
+    }
+    export const additionalOptionScopes: string[];
+}
+export default _default;
+export type Chart = import('../platform/platform.base.js').Chart;
+export type ChartEvent = import('../types/index.js').ChartEvent;
+export type ActiveElement = import('../types/index.js').ActiveElement;
+export type InteractionItem = import('../core/core.interaction.js').InteractionItem;
+import Element from "../core/core.element.js";
+import Animations from "../core/core.animations.js";
+declare namespace positioners {
+    /**
+       * Average mode places the tooltip at the average position of the elements shown
+       */
+    function average(items: any): false | {
+        x: number;
+        y: number;
+    };
+    /**
+       * Gets the tooltip position nearest of the item nearest to the event position
+       */
+    function nearest(items: any, eventPosition: any): false | {
+        x: any;
+        y: any;
+    };
+}
+declare namespace defaultCallbacks {
+    export { noop as beforeTitle };
+    export function title(tooltipItems: any): any;
+    export { noop as afterTitle };
+    export { noop as beforeBody };
+    export { noop as beforeLabel };
+    export function label(tooltipItem: any): any;
+    export function labelColor(tooltipItem: any): {
+        borderColor: any;
+        backgroundColor: any;
+        borderWidth: any;
+        borderDash: any;
+        borderDashOffset: any;
+        borderRadius: number;
+    };
+    export function labelTextColor(): any;
+    export function labelPointStyle(tooltipItem: any): {
+        pointStyle: any;
+        rotation: any;
+    };
+    export { noop as afterLabel };
+    export { noop as afterBody };
+    export { noop as beforeFooter };
+    export { noop as footer };
+    export { noop as afterFooter };
+}
+import { noop } from "../helpers/helpers.core.js";
Index: node_modules/chart.js/dist/scales/index.d.ts
===================================================================
--- node_modules/chart.js/dist/scales/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/scales/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export { default as CategoryScale } from "./scale.category.js";
+export { default as LinearScale } from "./scale.linear.js";
+export { default as LogarithmicScale } from "./scale.logarithmic.js";
+export { default as RadialLinearScale } from "./scale.radialLinear.js";
+export { default as TimeScale } from "./scale.time.js";
+export { default as TimeSeriesScale } from "./scale.timeseries.js";
Index: node_modules/chart.js/dist/scales/scale.category.d.ts
===================================================================
--- node_modules/chart.js/dist/scales/scale.category.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/scales/scale.category.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+export default class CategoryScale extends Scale {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static defaults: any;
+    /** @type {number} */
+    _startValue: number;
+    _valueRange: number;
+    _addedLabels: any[];
+    init(scaleOptions: any): void;
+    parse(raw: any, index: any): number;
+    buildTicks(): {
+        value: any;
+    }[];
+    getLabelForValue(value: any): any;
+    getPixelForValue(value: any): number;
+    getPixelForTick(index: any): number;
+    getValueForPixel(pixel: any): number;
+}
+import Scale from "../core/core.scale.js";
Index: node_modules/chart.js/dist/scales/scale.linear.d.ts
===================================================================
--- node_modules/chart.js/dist/scales/scale.linear.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/scales/scale.linear.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+export default class LinearScale extends LinearScaleBase {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static defaults: any;
+    getPixelForValue(value: any): number;
+    getValueForPixel(pixel: any): number;
+}
+import LinearScaleBase from "./scale.linearbase.js";
Index: node_modules/chart.js/dist/scales/scale.linearbase.d.ts
===================================================================
--- node_modules/chart.js/dist/scales/scale.linearbase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/scales/scale.linearbase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+export default class LinearScaleBase extends Scale {
+    /** @type {number} */
+    start: number;
+    /** @type {number} */
+    end: number;
+    /** @type {number} */
+    _startValue: number;
+    /** @type {number} */
+    _endValue: number;
+    _valueRange: number;
+    parse(raw: any, index: any): number;
+    handleTickRangeOptions(): void;
+    getTickLimit(): number;
+    /**
+       * @protected
+       */
+    protected computeTickLimit(): number;
+    getLabelForValue(value: any): string;
+}
+import Scale from "../core/core.scale.js";
Index: node_modules/chart.js/dist/scales/scale.logarithmic.d.ts
===================================================================
--- node_modules/chart.js/dist/scales/scale.logarithmic.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/scales/scale.logarithmic.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+export default class LogarithmicScale extends Scale {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static defaults: any;
+    /** @type {number} */
+    start: number;
+    /** @type {number} */
+    end: number;
+    /** @type {number} */
+    _startValue: number;
+    _valueRange: number;
+    parse(raw: any, index: any): number;
+    _zero: boolean;
+    handleTickRangeOptions(): void;
+    /**
+       * @param {number} value
+       * @return {string}
+       */
+    getLabelForValue(value: number): string;
+    getPixelForValue(value: any): number;
+    getValueForPixel(pixel: any): number;
+}
+import Scale from "../core/core.scale.js";
Index: node_modules/chart.js/dist/scales/scale.radialLinear.d.ts
===================================================================
--- node_modules/chart.js/dist/scales/scale.radialLinear.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/scales/scale.radialLinear.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+export default class RadialLinearScale extends LinearScaleBase {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static defaults: any;
+    static defaultRoutes: {
+        'angleLines.color': string;
+        'pointLabels.color': string;
+        'ticks.color': string;
+    };
+    static descriptors: {
+        angleLines: {
+            _fallback: string;
+        };
+    };
+    /** @type {number} */
+    xCenter: number;
+    /** @type {number} */
+    yCenter: number;
+    /** @type {number} */
+    drawingArea: number;
+    /** @type {string[]} */
+    _pointLabels: string[];
+    _pointLabelItems: any[];
+    _padding: import("../types.js").ChartArea;
+    generateTickLabels(ticks: any): void;
+    setCenterPoint(leftMovement: any, rightMovement: any, topMovement: any, bottomMovement: any): void;
+    getIndexAngle(index: any): number;
+    getDistanceFromCenterForValue(value: any): number;
+    getValueForDistanceFromCenter(distance: any): any;
+    getPointLabelContext(index: any): any;
+    getPointPosition(index: any, distanceFromCenter: any, additionalAngle?: number): {
+        x: number;
+        y: number;
+        angle: number;
+    };
+    getPointPositionForValue(index: any, value: any): {
+        x: number;
+        y: number;
+        angle: number;
+    };
+    getBasePosition(index: any): {
+        x: number;
+        y: number;
+        angle: number;
+    };
+    getPointLabelPosition(index: any): {
+        left: any;
+        top: any;
+        right: any;
+        bottom: any;
+    };
+    /**
+       * @protected
+       */
+    protected drawGrid(): void;
+    /**
+       * @protected
+       */
+    protected drawLabels(): void;
+}
+import LinearScaleBase from "./scale.linearbase.js";
Index: node_modules/chart.js/dist/scales/scale.time.d.ts
===================================================================
--- node_modules/chart.js/dist/scales/scale.time.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/scales/scale.time.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,130 @@
+export default class TimeScale extends Scale {
+    static id: string;
+    /**
+     * @type {any}
+     */
+    static defaults: any;
+    /**
+       * @param {object} props
+       */
+    constructor(props: object);
+    /** @type {{data: number[], labels: number[], all: number[]}} */
+    _cache: {
+        data: number[];
+        labels: number[];
+        all: number[];
+    };
+    /** @type {Unit} */
+    _unit: Unit;
+    /** @type {Unit=} */
+    _majorUnit: Unit | undefined;
+    _offsets: {};
+    _normalized: boolean;
+    _parseOpts: {
+        parser: any;
+        round: any;
+        isoWeekday: any;
+    };
+    init(scaleOpts: any, opts?: {}): void;
+    _adapter: DateAdapter;
+    /**
+       * @param {*} raw
+       * @param {number?} [index]
+       * @return {number}
+       */
+    parse(raw: any, index?: number | null): number;
+    /**
+       * @private
+       */
+    private _getLabelBounds;
+    /**
+       * Returns the start and end offsets from edges in the form of {start, end}
+       * where each value is a relative width to the scale and ranges between 0 and 1.
+       * They add extra margins on the both sides by scaling down the original scale.
+       * Offsets are added when the `offset` option is true.
+       * @param {number[]} timestamps
+       * @protected
+       */
+    protected initOffsets(timestamps?: number[]): void;
+    /**
+       * Generates a maximum of `capacity` timestamps between min and max, rounded to the
+       * `minor` unit using the given scale time `options`.
+       * Important: this method can return ticks outside the min and max range, it's the
+       * responsibility of the calling code to clamp values if needed.
+       * @protected
+       */
+    protected _generate(): number[];
+    /**
+       * @param {number} value
+       * @return {string}
+       */
+    getLabelForValue(value: number): string;
+    /**
+       * @param {number} value
+       * @param {string|undefined} format
+       * @return {string}
+       */
+    format(value: number, format: string | undefined): string;
+    /**
+       * Function to format an individual tick mark
+       * @param {number} time
+       * @param {number} index
+       * @param {object[]} ticks
+       * @param {string|undefined} [format]
+       * @return {string}
+       * @private
+       */
+    private _tickFormatFunction;
+    /**
+       * @param {object[]} ticks
+       */
+    generateTickLabels(ticks: object[]): void;
+    /**
+       * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)
+       * @return {number}
+       */
+    getDecimalForValue(value: number): number;
+    /**
+       * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)
+       * @return {number}
+       */
+    getPixelForValue(value: number): number;
+    /**
+       * @param {number} pixel
+       * @return {number}
+       */
+    getValueForPixel(pixel: number): number;
+    /**
+       * @param {string} label
+       * @return {{w:number, h:number}}
+       * @private
+       */
+    private _getLabelSize;
+    /**
+       * @param {number} exampleTime
+       * @return {number}
+       * @private
+       */
+    private _getLabelCapacity;
+    /**
+       * @protected
+       */
+    protected getDataTimestamps(): any;
+    /**
+       * @protected
+       */
+    protected getLabelTimestamps(): number[];
+    /**
+       * @param {number[]} values
+       * @protected
+       */
+    protected normalize(values: number[]): number[];
+}
+export type Unit = import('../core/core.adapters.js').TimeUnit;
+export type Interval = {
+    common: boolean;
+    size: number;
+    steps?: number;
+};
+export type DateAdapter = import('../core/core.adapters.js').DateAdapter;
+import Scale from "../core/core.scale.js";
Index: node_modules/chart.js/dist/scales/scale.timeseries.d.ts
===================================================================
--- node_modules/chart.js/dist/scales/scale.timeseries.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/scales/scale.timeseries.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+export default TimeSeriesScale;
+declare class TimeSeriesScale extends TimeScale {
+    /** @type {object[]} */
+    _table: object[];
+    /** @type {number} */
+    _minPos: number;
+    /** @type {number} */
+    _tableRange: number;
+    /**
+       * @protected
+       */
+    protected initOffsets(): void;
+    /**
+       * Returns an array of {time, pos} objects used to interpolate a specific `time` or position
+       * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is
+       * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other
+       * extremity (left + width or top + height). Note that it would be more optimized to directly
+       * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need
+       * to create the lookup table. The table ALWAYS contains at least two items: min and max.
+       * @param {number[]} timestamps
+       * @return {object[]}
+       * @protected
+       */
+    protected buildLookupTable(timestamps: number[]): object[];
+    /**
+      * Generates all timestamps defined in the data.
+      * Important: this method can return ticks outside the min and max range, it's the
+      * responsibility of the calling code to clamp values if needed.
+      * @protected
+      */
+    protected _generate(): any;
+    /**
+       * Returns all timestamps
+       * @return {number[]}
+       * @private
+       */
+    private _getTimestampsForTable;
+}
+import TimeScale from "./scale.time.js";
Index: node_modules/chart.js/dist/types.d.ts
===================================================================
--- node_modules/chart.js/dist/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Temporary entry point of the types at the time of the transition.
+ * After transition done need to remove it in favor of index.ts
+ */
+export * from './index.js';
+/**
+ * Explicitly re-exporting to resolve the ambiguity.
+ */
+export { BarController, BubbleController, DoughnutController, LineController, PieController, PolarAreaController, RadarController, ScatterController, Animation, Animations, Chart, DatasetController, Interaction, Scale, Ticks, defaults, layouts, registry, ArcElement, BarElement, LineElement, PointElement, BasePlatform, BasicPlatform, DomPlatform, Decimation, Filler, Legend, SubTitle, Title, Tooltip, CategoryScale, LinearScale, LogarithmicScale, RadialLinearScale, TimeScale, TimeSeriesScale, PluginOptionsByType, ElementOptionsByType, ChartDatasetProperties, UpdateModeEnum, registerables } from './types/index.js';
+export * from './types/index.js';
Index: node_modules/chart.js/dist/types/animation.d.ts
===================================================================
--- node_modules/chart.js/dist/types/animation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/types/animation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import {Chart} from './index.js';
+import {AnyObject} from './basic.js';
+
+export declare class Animation {
+  constructor(cfg: AnyObject, target: AnyObject, prop: string, to?: unknown);
+  active(): boolean;
+  update(cfg: AnyObject, to: unknown, date: number): void;
+  cancel(): void;
+  tick(date: number): void;
+  readonly _to: unknown;
+}
+
+export interface AnimationEvent {
+  chart: Chart;
+  numSteps: number;
+  initial: boolean;
+  currentStep: number;
+}
+
+export declare class Animator {
+  listen(chart: Chart, event: 'complete' | 'progress', cb: (event: AnimationEvent) => void): void;
+  add(chart: Chart, items: readonly Animation[]): void;
+  has(chart: Chart): boolean;
+  start(chart: Chart): void;
+  running(chart: Chart): boolean;
+  stop(chart: Chart): void;
+  remove(chart: Chart): boolean;
+}
+
+export declare class Animations {
+  constructor(chart: Chart, animations: AnyObject);
+  configure(animations: AnyObject): void;
+  update(target: AnyObject, values: AnyObject): undefined | boolean;
+}
Index: node_modules/chart.js/dist/types/basic.d.ts
===================================================================
--- node_modules/chart.js/dist/types/basic.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/types/basic.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+
+export type AnyObject = Record<string, any>;
+export type EmptyObject = Record<string, never>;
Index: node_modules/chart.js/dist/types/color.d.ts
===================================================================
--- node_modules/chart.js/dist/types/color.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/types/color.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export type Color = string | CanvasGradient | CanvasPattern;
Index: node_modules/chart.js/dist/types/geometric.d.ts
===================================================================
--- node_modules/chart.js/dist/types/geometric.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/types/geometric.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+export interface ChartArea {
+  top: number;
+  left: number;
+  right: number;
+  bottom: number;
+  width: number;
+  height: number;
+}
+
+export interface Point {
+  x: number;
+  y: number;
+}
+
+export type TRBL = {
+  top: number;
+  right: number;
+  bottom: number;
+  left: number;
+}
+
+export type TRBLCorners = {
+  topLeft: number;
+  topRight: number;
+  bottomLeft: number;
+  bottomRight: number;
+};
+
+export type CornerRadius = number | Partial<TRBLCorners>;
+
+export type RoundedRect = {
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  radius?: CornerRadius
+}
+
+export type Padding = Partial<TRBL> | number | Point;
+
+export interface SplinePoint {
+  x: number;
+  y: number;
+  skip?: boolean;
+
+  // Both Bezier and monotone interpolations have these fields
+  // but they are added in different spots
+  cp1x?: number;
+  cp1y?: number;
+  cp2x?: number;
+  cp2y?: number;
+}
Index: node_modules/chart.js/dist/types/index.d.ts
===================================================================
--- node_modules/chart.js/dist/types/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/types/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3859 @@
+/* eslint-disable @typescript-eslint/ban-types */
+import {DeepPartial, DistributiveArray, UnionToIntersection} from './utils.js';
+
+import {TimeUnit} from '../core/core.adapters.js';
+import PointElement from '../elements/element.point.js';
+import {EasingFunction} from '../helpers/helpers.easing.js';
+import {AnimationEvent} from './animation.js';
+import {AnyObject, EmptyObject} from './basic.js';
+import {Color} from './color.js';
+import Element from '../core/core.element.js';
+import {ChartArea, Padding, Point} from './geometric.js';
+import {LayoutItem, LayoutPosition} from './layout.js';
+import {ColorsPluginOptions} from '../plugins/plugin.colors.js';
+
+export {EasingFunction} from '../helpers/helpers.easing.js';
+export {default as ArcElement, ArcProps} from '../elements/element.arc.js';
+export {default as PointElement, PointProps} from '../elements/element.point.js';
+export {Animation, Animations, Animator, AnimationEvent} from './animation.js';
+export {Color} from './color.js';
+export {ChartArea, Point, TRBL} from './geometric.js';
+export {LayoutItem, LayoutPosition} from './layout.js';
+
+export interface ScriptableContext<TType extends ChartType> {
+  active: boolean;
+  chart: Chart;
+  dataIndex: number;
+  dataset: UnionToIntersection<ChartDataset<TType>>;
+  datasetIndex: number;
+  type: string;
+  mode: string;
+  parsed: UnionToIntersection<ParsedDataType<TType>>;
+  raw: unknown;
+}
+
+export interface ScriptableLineSegmentContext {
+  type: 'segment',
+  p0: PointElement,
+  p1: PointElement,
+  p0DataIndex: number,
+  p1DataIndex: number,
+  datasetIndex: number
+}
+
+export type Scriptable<T, TContext> = T | ((ctx: TContext, options: AnyObject) => T | undefined);
+export type ScriptableOptions<T, TContext> = { [P in keyof T]: Scriptable<T[P], TContext> };
+export type ScriptableAndScriptableOptions<T, TContext> = Scriptable<T, TContext> | ScriptableOptions<T, TContext>;
+export type ScriptableAndArray<T, TContext> = readonly T[] | Scriptable<T, TContext>;
+export type ScriptableAndArrayOptions<T, TContext> = { [P in keyof T]: ScriptableAndArray<T[P], TContext> };
+
+export interface ParsingOptions {
+  /**
+   * How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally.
+   */
+  parsing:
+  {
+    [key: string]: string;
+  }
+  | false;
+
+  /**
+   * Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so.
+   */
+  normalized: boolean;
+}
+
+export interface ControllerDatasetOptions extends ParsingOptions {
+  /**
+   * The base axis of the chart. 'x' for vertical charts and 'y' for horizontal charts.
+   * @default 'x'
+   */
+  indexAxis: 'x' | 'y';
+  /**
+   * How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: `clip: {left: 5, top: false, right: -2, bottom: 0}`
+   */
+  clip: number | ChartArea | false;
+  /**
+   * The label for the dataset which appears in the legend and tooltips.
+   */
+  label: string;
+  /**
+   * The drawing order of dataset. Also affects order for stacking, tooltip and legend.
+   */
+  order: number;
+
+  /**
+   * The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack).
+   */
+  stack: string;
+  /**
+     * Configures the visibility state of the dataset. Set it to true, to hide the dataset from the chart.
+   * @default false
+   */
+  hidden: boolean;
+}
+
+export interface BarControllerDatasetOptions
+  extends ControllerDatasetOptions,
+  ScriptableAndArrayOptions<BarOptions, ScriptableContext<'bar'>>,
+  ScriptableAndArrayOptions<CommonHoverOptions, ScriptableContext<'bar'>>,
+  AnimationOptions<'bar'> {
+  /**
+   * The ID of the x axis to plot this dataset on.
+   */
+  xAxisID: string;
+  /**
+   * The ID of the y axis to plot this dataset on.
+   */
+  yAxisID: string;
+
+  /**
+   * Percent (0-1) of the available width each bar should be within the category width. 1.0 will take the whole category width and put the bars right next to each other.
+   * @default 0.9
+   */
+  barPercentage: number;
+  /**
+   * Percent (0-1) of the available width each category should be within the sample width.
+   * @default 0.8
+   */
+  categoryPercentage: number;
+
+  /**
+   * Manually set width of each bar in pixels. If set to 'flex', it computes "optimal" sample widths that globally arrange bars side by side. If not set (default), bars are equally sized based on the smallest interval.
+   */
+  barThickness: number | 'flex';
+
+  /**
+   * Set this to ensure that bars are not sized thicker than this.
+   */
+  maxBarThickness: number;
+
+  /**
+   * Set this to ensure that bars have a minimum length in pixels.
+   */
+  minBarLength: number;
+
+  /**
+   * Point style for the legend
+   * @default 'circle;
+   */
+  pointStyle: PointStyle;
+
+  /**
+   * Should the bars be grouped on index axis
+   * @default true
+   */
+  grouped: boolean;
+}
+
+export interface BarControllerChartOptions {
+  /**
+   * Should null or undefined values be omitted from drawing
+   */
+  skipNull?: boolean;
+}
+
+export type BarController = DatasetController
+export declare const BarController: ChartComponent & {
+  prototype: BarController;
+  new (chart: Chart, datasetIndex: number): BarController;
+};
+
+export interface BubbleControllerDatasetOptions
+  extends ControllerDatasetOptions,
+  ScriptableAndArrayOptions<PointOptions, ScriptableContext<'bubble'>>,
+  ScriptableAndArrayOptions<PointHoverOptions, ScriptableContext<'bubble'>> {
+  /**
+   * The ID of the x axis to plot this dataset on.
+   */
+  xAxisID: string;
+  /**
+   * The ID of the y axis to plot this dataset on.
+   */
+  yAxisID: string;
+}
+
+export interface BubbleDataPoint extends Point {
+  /**
+   * Bubble radius in pixels (not scaled).
+   */
+  r?: number;
+}
+
+export type BubbleController = DatasetController
+export declare const BubbleController: ChartComponent & {
+  prototype: BubbleController;
+  new (chart: Chart, datasetIndex: number): BubbleController;
+};
+
+export interface LineControllerDatasetOptions
+  extends ControllerDatasetOptions,
+  ScriptableAndArrayOptions<PointPrefixedOptions, ScriptableContext<'line'>>,
+  ScriptableAndArrayOptions<PointPrefixedHoverOptions, ScriptableContext<'line'>>,
+  ScriptableOptions<Omit<LineOptions, keyof CommonElementOptions>, ScriptableContext<'line'>>,
+  ScriptableAndArrayOptions<CommonElementOptions, ScriptableContext<'line'>>,
+  ScriptableOptions<Omit<LineHoverOptions, keyof CommonHoverOptions>, ScriptableContext<'line'>>,
+  ScriptableAndArrayOptions<CommonHoverOptions, ScriptableContext<'line'>>,
+  AnimationOptions<'line'> {
+  /**
+   * The ID of the x axis to plot this dataset on.
+   */
+  xAxisID: string;
+  /**
+   * The ID of the y axis to plot this dataset on.
+   */
+  yAxisID: string;
+
+  /**
+   * If true, lines will be drawn between points with no or null data. If false, points with NaN data will create a break in the line. Can also be a number specifying the maximum gap length to span. The unit of the value depends on the scale used.
+   * @default false
+   */
+  spanGaps: boolean | number;
+
+  showLine: boolean;
+}
+
+export interface LineControllerChartOptions {
+  /**
+   * If true, lines will be drawn between points with no or null data. If false, points with NaN data will create a break in the line. Can also be a number specifying the maximum gap length to span. The unit of the value depends on the scale used.
+   * @default false
+   */
+  spanGaps: boolean | number;
+  /**
+   * If false, the lines between points are not drawn.
+   * @default true
+   */
+  showLine: boolean;
+}
+
+export type LineController = DatasetController
+export declare const LineController: ChartComponent & {
+  prototype: LineController;
+  new (chart: Chart, datasetIndex: number): LineController;
+};
+
+export type ScatterControllerDatasetOptions = LineControllerDatasetOptions;
+
+export type ScatterDataPoint = Point
+
+export type ScatterControllerChartOptions = LineControllerChartOptions;
+
+export type ScatterController = LineController
+export declare const ScatterController: ChartComponent & {
+  prototype: ScatterController;
+  new (chart: Chart, datasetIndex: number): ScatterController;
+};
+
+export interface DoughnutControllerDatasetOptions
+  extends ControllerDatasetOptions,
+  ScriptableAndArrayOptions<ArcOptions, ScriptableContext<'doughnut'>>,
+  ScriptableAndArrayOptions<ArcHoverOptions, ScriptableContext<'doughnut'>>,
+  AnimationOptions<'doughnut'> {
+
+  /**
+   * Sweep to allow arcs to cover.
+   * @default 360
+   */
+  circumference: number;
+
+  /**
+   * Arc offset (in pixels).
+   */
+  offset: number | number[];
+
+  /**
+   * Starting angle to draw this dataset from.
+   * @default 0
+   */
+  rotation: number;
+
+  /**
+   * The relative thickness of the dataset. Providing a value for weight will cause the pie or doughnut dataset to be drawn with a thickness relative to the sum of all the dataset weight values.
+   * @default 1
+   */
+  weight: number;
+
+  /**
+   * Similar to the `offset` option, but applies to all arcs. This can be used to to add spaces
+   * between arcs
+   * @default 0
+   */
+  spacing: number;
+}
+
+export interface DoughnutAnimationOptions extends AnimationSpec<'doughnut'> {
+  /**
+   *   If true, the chart will animate in with a rotation animation. This property is in the options.animation object.
+   * @default true
+   */
+  animateRotate: boolean;
+
+  /**
+   * If true, will animate scaling the chart from the center outwards.
+   * @default false
+   */
+  animateScale: boolean;
+}
+
+export interface DoughnutControllerChartOptions {
+  /**
+   * Sweep to allow arcs to cover.
+   * @default 360
+   */
+  circumference: number;
+
+  /**
+   * The portion of the chart that is cut out of the middle. ('50%' - for doughnut, 0 - for pie)
+   * String ending with '%' means percentage, number means pixels.
+   * @default 50
+   */
+  cutout: Scriptable<number | string, ScriptableContext<'doughnut'>>;
+
+  /**
+   * Arc offset (in pixels).
+   */
+  offset: number | number[];
+
+  /**
+   * The outer radius of the chart. String ending with '%' means percentage of maximum radius, number means pixels.
+   * @default '100%'
+   */
+  radius: Scriptable<number | string, ScriptableContext<'doughnut'>>;
+
+  /**
+   * Starting angle to draw arcs from.
+   * @default 0
+   */
+  rotation: number;
+
+  /**
+   * Spacing between the arcs
+   * @default 0
+   */
+  spacing: number;
+
+  animation: false | DoughnutAnimationOptions;
+}
+
+export type DoughnutDataPoint = number;
+
+export interface DoughnutController extends DatasetController {
+  readonly innerRadius: number;
+  readonly outerRadius: number;
+  readonly offsetX: number;
+  readonly offsetY: number;
+
+  calculateTotal(): number;
+  calculateCircumference(value: number): number;
+}
+
+export declare const DoughnutController: ChartComponent & {
+  prototype: DoughnutController;
+  new (chart: Chart, datasetIndex: number): DoughnutController;
+};
+
+export interface DoughnutMetaExtensions {
+  total: number;
+}
+
+export type PieControllerDatasetOptions = DoughnutControllerDatasetOptions;
+export type PieControllerChartOptions = DoughnutControllerChartOptions;
+export type PieAnimationOptions = DoughnutAnimationOptions;
+
+export type PieDataPoint = DoughnutDataPoint;
+export type PieMetaExtensions = DoughnutMetaExtensions;
+
+export type PieController = DoughnutController
+export declare const PieController: ChartComponent & {
+  prototype: PieController;
+  new (chart: Chart, datasetIndex: number): PieController;
+};
+
+export interface PolarAreaControllerDatasetOptions extends DoughnutControllerDatasetOptions {
+  /**
+   * Arc angle to cover. - for polar only
+   * @default circumference / (arc count)
+   */
+  angle: number;
+}
+
+export type PolarAreaAnimationOptions = DoughnutAnimationOptions;
+
+export interface PolarAreaControllerChartOptions {
+  /**
+   * Starting angle to draw arcs for the first item in a dataset. In degrees, 0 is at top.
+   * @default 0
+   */
+  startAngle: number;
+
+  animation: false | PolarAreaAnimationOptions;
+}
+
+export interface PolarAreaController extends DoughnutController {
+  countVisibleElements(): number;
+}
+export declare const PolarAreaController: ChartComponent & {
+  prototype: PolarAreaController;
+  new (chart: Chart, datasetIndex: number): PolarAreaController;
+};
+
+export interface RadarControllerDatasetOptions
+  extends ControllerDatasetOptions,
+  ScriptableAndArrayOptions<PointOptions & PointHoverOptions & PointPrefixedOptions & PointPrefixedHoverOptions, ScriptableContext<'radar'>>,
+  ScriptableAndArrayOptions<LineOptions & LineHoverOptions, ScriptableContext<'radar'>>,
+  AnimationOptions<'radar'> {
+  /**
+   * The ID of the x axis to plot this dataset on.
+   */
+  xAxisID: string;
+  /**
+   * The ID of the y axis to plot this dataset on.
+   */
+  yAxisID: string;
+
+  /**
+   * If true, lines will be drawn between points with no or null data. If false, points with NaN data will create a break in the line. Can also be a number specifying the maximum gap length to span. The unit of the value depends on the scale used.
+   */
+  spanGaps: boolean | number;
+
+  /**
+   * If false, the line is not drawn for this dataset.
+   */
+  showLine: boolean;
+}
+
+export type RadarControllerChartOptions = LineControllerChartOptions;
+
+export type RadarController = DatasetController
+export declare const RadarController: ChartComponent & {
+  prototype: RadarController;
+  new (chart: Chart, datasetIndex: number): RadarController;
+};
+
+interface ChartMetaClip {
+  left: number | boolean;
+  top: number | boolean;
+  right: number | boolean;
+  bottom: number | boolean;
+  disabled: boolean;
+}
+
+interface ChartMetaCommon<TElement extends Element = Element, TDatasetElement extends Element = Element> {
+  type: string;
+  controller: DatasetController;
+  order: number;
+
+  label: string;
+  index: number;
+  visible: boolean;
+
+  stack: number;
+
+  indexAxis: 'x' | 'y';
+
+  data: TElement[];
+  dataset?: TDatasetElement;
+
+  hidden: boolean;
+
+  xAxisID?: string;
+  yAxisID?: string;
+  rAxisID?: string;
+  iAxisID: string;
+  vAxisID: string;
+
+  xScale?: Scale;
+  yScale?: Scale;
+  rScale?: Scale;
+  iScale?: Scale;
+  vScale?: Scale;
+
+  _sorted: boolean;
+  _stacked: boolean | 'single';
+  _parsed: unknown[];
+  _clip: ChartMetaClip;
+}
+
+export type ChartMeta<
+  TType extends ChartType = ChartType,
+  TElement extends Element = Element,
+  TDatasetElement extends Element = Element,
+> = DeepPartial<
+{ [key in ChartType]: ChartTypeRegistry[key]['metaExtensions'] }[TType]
+> & ChartMetaCommon<TElement, TDatasetElement>;
+
+export interface ActiveDataPoint {
+  datasetIndex: number;
+  index: number;
+}
+
+export interface ActiveElement extends ActiveDataPoint {
+  element: Element;
+}
+
+export declare class Chart<
+  TType extends ChartType = ChartType,
+  TData = DefaultDataPoint<TType>,
+  TLabel = unknown
+> {
+  readonly platform: BasePlatform;
+  readonly id: string;
+  readonly canvas: HTMLCanvasElement;
+  readonly ctx: CanvasRenderingContext2D;
+  readonly config: ChartConfiguration<TType, TData, TLabel> | ChartConfigurationCustomTypesPerDataset<TType, TData, TLabel>;
+  readonly width: number;
+  readonly height: number;
+  readonly aspectRatio: number;
+  readonly boxes: LayoutItem[];
+  readonly currentDevicePixelRatio: number;
+  readonly chartArea: ChartArea;
+  readonly scales: { [key: string]: Scale };
+  readonly attached: boolean;
+
+  readonly legend?: LegendElement<TType>; // Only available if legend plugin is registered and enabled
+  readonly tooltip?: TooltipModel<TType>; // Only available if tooltip plugin is registered and enabled
+
+  data: ChartData<TType, TData, TLabel>;
+  options: ChartOptions<TType>;
+
+  constructor(item: ChartItem, config: ChartConfiguration<TType, TData, TLabel> | ChartConfigurationCustomTypesPerDataset<TType, TData, TLabel>);
+
+  clear(): this;
+  stop(): this;
+
+  resize(width?: number, height?: number): void;
+  ensureScalesHaveIDs(): void;
+  buildOrUpdateScales(): void;
+  buildOrUpdateControllers(): void;
+  reset(): void;
+  update(mode?: UpdateMode | ((ctx: { datasetIndex: number }) => UpdateMode)): void;
+  render(): void;
+  draw(): void;
+
+  isPointInArea(point: Point): boolean;
+  getElementsAtEventForMode(e: Event, mode: string, options: InteractionOptions, useFinalPosition: boolean): InteractionItem[];
+
+  getSortedVisibleDatasetMetas(): ChartMeta[];
+  getDatasetMeta(datasetIndex: number): ChartMeta;
+  getVisibleDatasetCount(): number;
+  isDatasetVisible(datasetIndex: number): boolean;
+  setDatasetVisibility(datasetIndex: number, visible: boolean): void;
+  toggleDataVisibility(index: number): void;
+  getDataVisibility(index: number): boolean;
+  hide(datasetIndex: number, dataIndex?: number): void;
+  show(datasetIndex: number, dataIndex?: number): void;
+
+  getActiveElements(): ActiveElement[];
+  setActiveElements(active: ActiveDataPoint[]): void;
+
+  destroy(): void;
+  toBase64Image(type?: string, quality?: unknown): string;
+  bindEvents(): void;
+  unbindEvents(): void;
+  updateHoverStyle(items: InteractionItem[], mode: 'dataset', enabled: boolean): void;
+
+  notifyPlugins(hook: string, args?: AnyObject): boolean | void;
+
+  isPluginEnabled(pluginId: string): boolean;
+
+  getContext(): { chart: Chart, type: string };
+
+  static readonly defaults: Defaults;
+  static readonly overrides: Overrides;
+  static readonly version: string;
+  static readonly instances: { [key: string]: Chart };
+  static readonly registry: Registry;
+  static getChart(key: string | CanvasRenderingContext2D | HTMLCanvasElement): Chart | undefined;
+  static register(...items: ChartComponentLike[]): void;
+  static unregister(...items: ChartComponentLike[]): void;
+}
+
+export declare const registerables: readonly ChartComponentLike[];
+
+export declare type ChartItem =
+  | string
+  | CanvasRenderingContext2D
+  | HTMLCanvasElement
+  | { canvas: HTMLCanvasElement }
+  | ArrayLike<CanvasRenderingContext2D | HTMLCanvasElement>;
+
+export declare enum UpdateModeEnum {
+  resize = 'resize',
+  reset = 'reset',
+  none = 'none',
+  hide = 'hide',
+  show = 'show',
+  default = 'default',
+  active = 'active'
+}
+
+export type UpdateMode = keyof typeof UpdateModeEnum;
+
+export declare class DatasetController<
+  TType extends ChartType = ChartType,
+  TElement extends Element = Element,
+  TDatasetElement extends Element = Element,
+  TParsedData = ParsedDataType<TType>,
+> {
+  constructor(chart: Chart, datasetIndex: number);
+
+  readonly chart: Chart;
+  readonly index: number;
+  readonly _cachedMeta: ChartMeta<TType, TElement, TDatasetElement>;
+  enableOptionSharing: boolean;
+  // If true, the controller supports the decimation
+  // plugin. Defaults to `false` for all controllers
+  // except the LineController
+  supportsDecimation: boolean;
+
+  linkScales(): void;
+  getAllParsedValues(scale: Scale): number[];
+  protected getLabelAndValue(index: number): { label: string; value: string };
+  updateElements(elements: TElement[], start: number, count: number, mode: UpdateMode): void;
+  update(mode: UpdateMode): void;
+  updateIndex(datasetIndex: number): void;
+  protected getMaxOverflow(): boolean | number;
+  draw(): void;
+  reset(): void;
+  getDataset(): ChartDataset;
+  getMeta(): ChartMeta<TType, TElement, TDatasetElement>;
+  getScaleForId(scaleID: string): Scale | undefined;
+  configure(): void;
+  initialize(): void;
+  addElements(): void;
+  buildOrUpdateElements(resetNewElements?: boolean): void;
+
+  getStyle(index: number, active: boolean): AnyObject;
+  protected resolveDatasetElementOptions(mode: UpdateMode): AnyObject;
+  protected resolveDataElementOptions(index: number, mode: UpdateMode): AnyObject;
+  /**
+   * Utility for checking if the options are shared and should be animated separately.
+   * @protected
+   */
+  protected getSharedOptions(options: AnyObject): undefined | AnyObject;
+  /**
+   * Utility for determining if `options` should be included in the updated properties
+   * @protected
+   */
+  protected includeOptions(mode: UpdateMode, sharedOptions: AnyObject): boolean;
+  /**
+   * Utility for updating an element with new properties, using animations when appropriate.
+   * @protected
+   */
+
+  protected updateElement(element: TElement | TDatasetElement, index: number | undefined, properties: AnyObject, mode: UpdateMode): void;
+  /**
+   * Utility to animate the shared options, that are potentially affecting multiple elements.
+   * @protected
+   */
+
+  protected updateSharedOptions(sharedOptions: AnyObject, mode: UpdateMode, newOptions: AnyObject): void;
+  removeHoverStyle(element: TElement, datasetIndex: number, index: number): void;
+  setHoverStyle(element: TElement, datasetIndex: number, index: number): void;
+
+  parse(start: number, count: number): void;
+  protected parsePrimitiveData(meta: ChartMeta<TType, TElement, TDatasetElement>, data: AnyObject[], start: number, count: number): AnyObject[];
+  protected parseArrayData(meta: ChartMeta<TType, TElement, TDatasetElement>, data: AnyObject[], start: number, count: number): AnyObject[];
+  protected parseObjectData(meta: ChartMeta<TType, TElement, TDatasetElement>, data: AnyObject[], start: number, count: number): AnyObject[];
+  protected getParsed(index: number): TParsedData;
+  protected applyStack(scale: Scale, parsed: unknown[]): number;
+  protected updateRangeFromParsed(
+    range: { min: number; max: number },
+    scale: Scale,
+    parsed: unknown[],
+    stack: boolean | string
+  ): void;
+  protected getMinMax(scale: Scale, canStack?: boolean): { min: number; max: number };
+}
+
+export interface DatasetControllerChartComponent extends ChartComponent {
+  defaults: {
+    datasetElementType?: string | null | false;
+    dataElementType?: string | null | false;
+  };
+}
+
+export interface Defaults extends CoreChartOptions<ChartType>, ElementChartOptions<ChartType>, PluginChartOptions<ChartType> {
+
+  scale: ScaleOptionsByType;
+  scales: {
+    [key in ScaleType]: ScaleOptionsByType<key>;
+  };
+
+  set(values: AnyObject): AnyObject;
+  set(scope: string, values: AnyObject): AnyObject;
+  get(scope: string): AnyObject;
+
+  describe(scope: string, values: AnyObject): AnyObject;
+  override(scope: string, values: AnyObject): AnyObject;
+
+  /**
+   * Routes the named defaults to fallback to another scope/name.
+   * This routing is useful when those target values, like defaults.color, are changed runtime.
+   * If the values would be copied, the runtime change would not take effect. By routing, the
+   * fallback is evaluated at each access, so its always up to date.
+   *
+   * Example:
+   *
+   *   defaults.route('elements.arc', 'backgroundColor', '', 'color')
+   *    - reads the backgroundColor from defaults.color when undefined locally
+   *
+   * @param scope Scope this route applies to.
+   * @param name Property name that should be routed to different namespace when not defined here.
+   * @param targetScope The namespace where those properties should be routed to.
+   * Empty string ('') is the root of defaults.
+   * @param targetName The target name in the target scope the property should be routed to.
+   */
+  route(scope: string, name: string, targetScope: string, targetName: string): void;
+}
+
+export type Overrides = {
+  [key in ChartType]:
+  CoreChartOptions<key> &
+  ElementChartOptions<key> &
+  PluginChartOptions<key> &
+  DatasetChartOptions<ChartType> &
+  ScaleChartOptions<key> &
+  ChartTypeRegistry[key]['chartOptions'];
+}
+
+export declare const defaults: Defaults;
+export interface InteractionOptions {
+  axis?: string;
+  intersect?: boolean;
+  includeInvisible?: boolean;
+}
+
+export interface InteractionItem {
+  element: Element;
+  datasetIndex: number;
+  index: number;
+}
+
+export type InteractionModeFunction = (
+  chart: Chart,
+  e: ChartEvent,
+  options: InteractionOptions,
+  useFinalPosition?: boolean
+) => InteractionItem[];
+
+export interface InteractionModeMap {
+  /**
+   * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something
+   * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item
+   */
+  index: InteractionModeFunction;
+
+  /**
+   * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something
+   * If the options.intersect is false, we find the nearest item and return the items in that dataset
+   */
+  dataset: InteractionModeFunction;
+  /**
+   * Point mode returns all elements that hit test based on the event position
+   * of the event
+   */
+  point: InteractionModeFunction;
+  /**
+   * nearest mode returns the element closest to the point
+   */
+  nearest: InteractionModeFunction;
+  /**
+   * x mode returns the elements that hit-test at the current x coordinate
+   */
+  x: InteractionModeFunction;
+  /**
+   * y mode returns the elements that hit-test at the current y coordinate
+   */
+  y: InteractionModeFunction;
+}
+
+export type InteractionMode = keyof InteractionModeMap;
+
+export declare const Interaction: {
+  modes: InteractionModeMap;
+
+  /**
+   * Helper function to select candidate elements for interaction
+   */
+  evaluateInteractionItems(
+    chart: Chart,
+    axis: InteractionAxis,
+    position: Point,
+    handler: (element: Element & VisualElement, datasetIndex: number, index: number) => void,
+    intersect?: boolean
+  ): InteractionItem[];
+};
+
+export declare const layouts: {
+  /**
+   * Register a box to a chart.
+   * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.
+   * @param {Chart} chart - the chart to use
+   * @param {LayoutItem} item - the item to add to be laid out
+   */
+  addBox(chart: Chart, item: LayoutItem): void;
+
+  /**
+   * Remove a layoutItem from a chart
+   * @param {Chart} chart - the chart to remove the box from
+   * @param {LayoutItem} layoutItem - the item to remove from the layout
+   */
+  removeBox(chart: Chart, layoutItem: LayoutItem): void;
+
+  /**
+   * Sets (or updates) options on the given `item`.
+   * @param {Chart} chart - the chart in which the item lives (or will be added to)
+   * @param {LayoutItem} item - the item to configure with the given options
+   * @param options - the new item options.
+   */
+  configure(
+    chart: Chart,
+    item: LayoutItem,
+    options: { fullSize?: number; position?: LayoutPosition; weight?: number }
+  ): void;
+
+  /**
+   * Fits boxes of the given chart into the given size by having each box measure itself
+   * then running a fitting algorithm
+   * @param {Chart} chart - the chart
+   * @param {number} width - the width to fit into
+   * @param {number} height - the height to fit into
+   */
+  update(chart: Chart, width: number, height: number): void;
+};
+
+export interface Plugin<TType extends ChartType = ChartType, O = AnyObject> extends ExtendedPlugin<TType, O> {
+  id: string;
+
+  /**
+   * The events option defines the browser events that the plugin should listen.
+   * @default ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove']
+   */
+  events?: (keyof HTMLElementEventMap)[]
+
+  /**
+   * @desc Called when plugin is installed for this chart instance. This hook is also invoked for disabled plugins (options === false).
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   * @since 3.0.0
+   */
+  install?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called when a plugin is starting. This happens when chart is created or plugin is enabled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   * @since 3.0.0
+   */
+  start?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called when a plugin stopping. This happens when chart is destroyed or plugin is disabled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   * @since 3.0.0
+   */
+  stop?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called before initializing `chart`.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   */
+  beforeInit?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called after `chart` has been initialized and before the first update.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   */
+  afterInit?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called before updating `chart`. If any plugin returns `false`, the update
+   * is cancelled (and thus subsequent render(s)) until another `update` is triggered.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {UpdateMode} args.mode - The update mode
+   * @param {object} options - The plugin options.
+   * @returns {boolean} `false` to cancel the chart update.
+   */
+  beforeUpdate?(chart: Chart<TType>, args: { mode: UpdateMode, cancelable: true }, options: O): boolean | void;
+  /**
+   * @desc Called after `chart` has been updated and before rendering. Note that this
+   * hook will not be called if the chart update has been previously cancelled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {UpdateMode} args.mode - The update mode
+   * @param {object} options - The plugin options.
+   */
+  afterUpdate?(chart: Chart<TType>, args: { mode: UpdateMode }, options: O): void;
+  /**
+   * @desc Called during the update process, before any chart elements have been created.
+   * This can be used for data decimation by changing the data array inside a dataset.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   */
+  beforeElementsUpdate?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called during chart reset
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   * @since version 3.0.0
+   */
+  reset?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called before updating the `chart` datasets. If any plugin returns `false`,
+   * the datasets update is cancelled until another `update` is triggered.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {UpdateMode} args.mode - The update mode.
+   * @param {object} options - The plugin options.
+   * @returns {boolean} false to cancel the datasets update.
+   * @since version 2.1.5
+   */
+  beforeDatasetsUpdate?(chart: Chart<TType>, args: { mode: UpdateMode }, options: O): boolean | void;
+  /**
+   * @desc Called after the `chart` datasets have been updated. Note that this hook
+   * will not be called if the datasets update has been previously cancelled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {UpdateMode} args.mode - The update mode.
+   * @param {object} options - The plugin options.
+   * @since version 2.1.5
+   */
+  afterDatasetsUpdate?(chart: Chart<TType>, args: { mode: UpdateMode, cancelable: true }, options: O): void;
+  /**
+   * @desc Called before updating the `chart` dataset at the given `args.index`. If any plugin
+   * returns `false`, the datasets update is cancelled until another `update` is triggered.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {number} args.index - The dataset index.
+   * @param {object} args.meta - The dataset metadata.
+   * @param {UpdateMode} args.mode - The update mode.
+   * @param {object} options - The plugin options.
+   * @returns {boolean} `false` to cancel the chart datasets drawing.
+   */
+  beforeDatasetUpdate?(chart: Chart<TType>, args: { index: number; meta: ChartMeta, mode: UpdateMode, cancelable: true }, options: O): boolean | void;
+  /**
+   * @desc Called after the `chart` datasets at the given `args.index` has been updated. Note
+   * that this hook will not be called if the datasets update has been previously cancelled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {number} args.index - The dataset index.
+   * @param {object} args.meta - The dataset metadata.
+   * @param {UpdateMode} args.mode - The update mode.
+   * @param {object} options - The plugin options.
+   */
+  afterDatasetUpdate?(chart: Chart<TType>, args: { index: number; meta: ChartMeta, mode: UpdateMode, cancelable: false }, options: O): void;
+  /**
+   * @desc Called before laying out `chart`. If any plugin returns `false`,
+   * the layout update is cancelled until another `update` is triggered.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   * @returns {boolean} `false` to cancel the chart layout.
+   */
+  beforeLayout?(chart: Chart<TType>, args: { cancelable: true }, options: O): boolean | void;
+  /**
+   * @desc Called before scale data limits are calculated. This hook is called separately for each scale in the chart.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {Scale} args.scale - The scale.
+   * @param {object} options - The plugin options.
+   */
+  beforeDataLimits?(chart: Chart<TType>, args: { scale: Scale }, options: O): void;
+  /**
+   * @desc Called after scale data limits are calculated. This hook is called separately for each scale in the chart.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {Scale} args.scale - The scale.
+   * @param {object} options - The plugin options.
+   */
+  afterDataLimits?(chart: Chart<TType>, args: { scale: Scale }, options: O): void;
+  /**
+   * @desc Called before scale builds its ticks. This hook is called separately for each scale in the chart.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {Scale} args.scale - The scale.
+   * @param {object} options - The plugin options.
+   */
+  beforeBuildTicks?(chart: Chart<TType>, args: { scale: Scale }, options: O): void;
+  /**
+   * @desc Called after scale has build its ticks. This hook is called separately for each scale in the chart.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {Scale} args.scale - The scale.
+   * @param {object} options - The plugin options.
+   */
+  afterBuildTicks?(chart: Chart<TType>, args: { scale: Scale }, options: O): void;
+  /**
+   * @desc Called after the `chart` has been laid out. Note that this hook will not
+   * be called if the layout update has been previously cancelled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   */
+  afterLayout?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called before rendering `chart`. If any plugin returns `false`,
+   * the rendering is cancelled until another `render` is triggered.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   * @returns {boolean} `false` to cancel the chart rendering.
+   */
+  beforeRender?(chart: Chart<TType>, args: { cancelable: true }, options: O): boolean | void;
+  /**
+   * @desc Called after the `chart` has been fully rendered (and animation completed). Note
+   * that this hook will not be called if the rendering has been previously cancelled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   */
+  afterRender?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called before drawing `chart` at every animation frame. If any plugin returns `false`,
+   * the frame drawing is cancelled untilanother `render` is triggered.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   * @returns {boolean} `false` to cancel the chart drawing.
+   */
+  beforeDraw?(chart: Chart<TType>, args: { cancelable: true }, options: O): boolean | void;
+  /**
+   * @desc Called after the `chart` has been drawn. Note that this hook will not be called
+   * if the drawing has been previously cancelled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   */
+  afterDraw?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * @desc Called before drawing the `chart` datasets. If any plugin returns `false`,
+   * the datasets drawing is cancelled until another `render` is triggered.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   * @returns {boolean} `false` to cancel the chart datasets drawing.
+   */
+  beforeDatasetsDraw?(chart: Chart<TType>, args: { cancelable: true }, options: O): boolean | void;
+  /**
+   * @desc Called after the `chart` datasets have been drawn. Note that this hook
+   * will not be called if the datasets drawing has been previously cancelled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   */
+  afterDatasetsDraw?(chart: Chart<TType>, args: EmptyObject, options: O, cancelable: false): void;
+  /**
+   * @desc Called before drawing the `chart` dataset at the given `args.index` (datasets
+   * are drawn in the reverse order). If any plugin returns `false`, the datasets drawing
+   * is cancelled until another `render` is triggered.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {number} args.index - The dataset index.
+   * @param {object} args.meta - The dataset metadata.
+   * @param {object} options - The plugin options.
+   * @returns {boolean} `false` to cancel the chart datasets drawing.
+   */
+  beforeDatasetDraw?(chart: Chart<TType>, args: { index: number; meta: ChartMeta }, options: O): boolean | void;
+  /**
+   * @desc Called after the `chart` datasets at the given `args.index` have been drawn
+   * (datasets are drawn in the reverse order). Note that this hook will not be called
+   * if the datasets drawing has been previously cancelled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {number} args.index - The dataset index.
+   * @param {object} args.meta - The dataset metadata.
+   * @param {object} options - The plugin options.
+   */
+  afterDatasetDraw?(chart: Chart<TType>, args: { index: number; meta: ChartMeta }, options: O): void;
+  /**
+   * @desc Called before processing the specified `event`. If any plugin returns `false`,
+   * the event will be discarded.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {ChartEvent} args.event - The event object.
+   * @param {boolean} args.replay - True if this event is replayed from `Chart.update`
+   * @param {boolean} args.inChartArea - The event position is inside chartArea
+   * @param {boolean} [args.changed] - Set to true if the plugin needs a render. Should only be changed to true, because this args object is passed through all plugins.
+   * @param {object} options - The plugin options.
+   */
+  beforeEvent?(chart: Chart<TType>, args: { event: ChartEvent, replay: boolean, changed?: boolean; cancelable: true, inChartArea: boolean }, options: O): boolean | void;
+  /**
+   * @desc Called after the `event` has been consumed. Note that this hook
+   * will not be called if the `event` has been previously discarded.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {ChartEvent} args.event - The event object.
+   * @param {boolean} args.replay - True if this event is replayed from `Chart.update`
+   * @param {boolean} args.inChartArea - The event position is inside chartArea
+   * @param {boolean} [args.changed] - Set to true if the plugin needs a render. Should only be changed to true, because this args object is passed through all plugins.
+   * @param {object} options - The plugin options.
+   */
+  afterEvent?(chart: Chart<TType>, args: { event: ChartEvent, replay: boolean, changed?: boolean, cancelable: false, inChartArea: boolean }, options: O): void;
+  /**
+   * @desc Called after the chart as been resized.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {number} args.size - The new canvas display size (eq. canvas.style width & height).
+   * @param {object} options - The plugin options.
+   */
+  resize?(chart: Chart<TType>, args: { size: { width: number, height: number } }, options: O): void;
+  /**
+   * Called before the chart is being destroyed.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   */
+  beforeDestroy?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * Called after the chart has been destroyed.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   */
+  afterDestroy?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+  /**
+   * Called after chart is destroyed on all plugins that were installed for that chart. This hook is also invoked for disabled plugins (options === false).
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {object} options - The plugin options.
+   * @since 3.0.0
+   */
+  uninstall?(chart: Chart<TType>, args: EmptyObject, options: O): void;
+
+  /**
+   * Default options used in the plugin
+   */
+  defaults?: Partial<O>;
+}
+
+export declare type ChartComponentLike = ChartComponent | ChartComponent[] | { [key: string]: ChartComponent } | Plugin | Plugin[];
+
+/**
+ * Please use the module's default export which provides a singleton instance
+ * Note: class is exported for typedoc
+ */
+export interface Registry {
+  readonly controllers: TypedRegistry<DatasetController>;
+  readonly elements: TypedRegistry<Element>;
+  readonly plugins: TypedRegistry<Plugin>;
+  readonly scales: TypedRegistry<Scale>;
+
+  add(...args: ChartComponentLike[]): void;
+  remove(...args: ChartComponentLike[]): void;
+
+  addControllers(...args: ChartComponentLike[]): void;
+  addElements(...args: ChartComponentLike[]): void;
+  addPlugins(...args: ChartComponentLike[]): void;
+  addScales(...args: ChartComponentLike[]): void;
+
+  getController(id: string): DatasetController | undefined;
+  getElement(id: string): Element | undefined;
+  getPlugin(id: string): Plugin | undefined;
+  getScale(id: string): Scale | undefined;
+}
+
+export declare const registry: Registry;
+
+export interface Tick {
+  value: number;
+  label?: string | string[];
+  major?: boolean;
+}
+
+export interface CoreScaleOptions {
+  /**
+   * Controls the axis global visibility (visible when true, hidden when false). When display: 'auto', the axis is visible only if at least one associated dataset is visible.
+   * @default true
+   */
+  display: boolean | 'auto';
+  /**
+   * Align pixel values to device pixels
+   */
+  alignToPixels: boolean;
+  /**
+   * Background color of the scale area.
+   */
+  backgroundColor: Color;
+  /**
+   * Reverse the scale.
+   * @default false
+   */
+  reverse: boolean;
+  /**
+   * Clip the dataset drawing against the size of the scale instead of chart area.
+   * @default true
+   */
+  clip: boolean;
+  /**
+   * The weight used to sort the axis. Higher weights are further away from the chart area.
+   * @default true
+   */
+  weight: number;
+  /**
+   * User defined minimum value for the scale, overrides minimum value from data.
+   */
+  min: unknown;
+  /**
+   * User defined maximum value for the scale, overrides maximum value from data.
+   */
+  max: unknown;
+  /**
+   * Adjustment used when calculating the maximum data value.
+   */
+  suggestedMin: unknown;
+  /**
+   * Adjustment used when calculating the minimum data value.
+   */
+  suggestedMax: unknown;
+  /**
+   * Callback called before the update process starts.
+   */
+  beforeUpdate(axis: Scale): void;
+  /**
+   * Callback that runs before dimensions are set.
+   */
+  beforeSetDimensions(axis: Scale): void;
+  /**
+   * Callback that runs after dimensions are set.
+   */
+  afterSetDimensions(axis: Scale): void;
+  /**
+   * Callback that runs before data limits are determined.
+   */
+  beforeDataLimits(axis: Scale): void;
+  /**
+   * Callback that runs after data limits are determined.
+   */
+  afterDataLimits(axis: Scale): void;
+  /**
+   * Callback that runs before ticks are created.
+   */
+  beforeBuildTicks(axis: Scale): void;
+  /**
+   * Callback that runs after ticks are created. Useful for filtering ticks.
+   */
+  afterBuildTicks(axis: Scale): void;
+  /**
+   * Callback that runs before ticks are converted into strings.
+   */
+  beforeTickToLabelConversion(axis: Scale): void;
+  /**
+   * Callback that runs after ticks are converted into strings.
+   */
+  afterTickToLabelConversion(axis: Scale): void;
+  /**
+   * Callback that runs before tick rotation is determined.
+   */
+  beforeCalculateLabelRotation(axis: Scale): void;
+  /**
+   * Callback that runs after tick rotation is determined.
+   */
+  afterCalculateLabelRotation(axis: Scale): void;
+  /**
+   * Callback that runs before the scale fits to the canvas.
+   */
+  beforeFit(axis: Scale): void;
+  /**
+   * Callback that runs after the scale fits to the canvas.
+   */
+  afterFit(axis: Scale): void;
+  /**
+   * Callback that runs at the end of the update process.
+   */
+  afterUpdate(axis: Scale): void;
+}
+
+export interface Scale<O extends CoreScaleOptions = CoreScaleOptions> extends Element<unknown, O>, LayoutItem {
+  readonly id: string;
+  readonly type: string;
+  readonly ctx: CanvasRenderingContext2D;
+  readonly chart: Chart;
+
+  maxWidth: number;
+  maxHeight: number;
+
+  paddingTop: number;
+  paddingBottom: number;
+  paddingLeft: number;
+  paddingRight: number;
+
+  axis: string;
+  labelRotation: number;
+  min: number;
+  max: number;
+  ticks: Tick[];
+  getMatchingVisibleMetas(type?: string): ChartMeta[];
+
+  drawTitle(chartArea: ChartArea): void;
+  drawLabels(chartArea: ChartArea): void;
+  drawGrid(chartArea: ChartArea): void;
+
+  /**
+   * @param {number} pixel
+   * @return {number}
+   */
+  getDecimalForPixel(pixel: number): number;
+  /**
+   * Utility for getting the pixel location of a percentage of scale
+   * The coordinate (0, 0) is at the upper-left corner of the canvas
+   * @param {number} decimal
+   * @return {number}
+   */
+  getPixelForDecimal(decimal: number): number;
+  /**
+   * Returns the location of the tick at the given index
+   * The coordinate (0, 0) is at the upper-left corner of the canvas
+   * @param {number} index
+   * @return {number}
+   */
+  getPixelForTick(index: number): number;
+  /**
+   * Used to get the label to display in the tooltip for the given value
+   * @param {*} value
+   * @return {string}
+   */
+  getLabelForValue(value: number): string;
+
+  /**
+   * Returns the grid line width at given value
+   */
+  getLineWidthForValue(value: number): number;
+
+  /**
+   * Returns the location of the given data point. Value can either be an index or a numerical value
+   * The coordinate (0, 0) is at the upper-left corner of the canvas
+   * @param {*} value
+   * @param {number} [index]
+   * @return {number}
+   */
+  getPixelForValue(value: number, index?: number): number;
+
+  /**
+   * Used to get the data value from a given pixel. This is the inverse of getPixelForValue
+   * The coordinate (0, 0) is at the upper-left corner of the canvas
+   * @param {number} pixel
+   * @return {*}
+   */
+  getValueForPixel(pixel: number): number | undefined;
+
+  getBaseValue(): number;
+  /**
+   * Returns the pixel for the minimum chart value
+   * The coordinate (0, 0) is at the upper-left corner of the canvas
+   * @return {number}
+   */
+  getBasePixel(): number;
+
+  init(options: O): void;
+  parse(raw: unknown, index?: number): unknown;
+  getUserBounds(): { min: number; max: number; minDefined: boolean; maxDefined: boolean };
+  getMinMax(canStack: boolean): { min: number; max: number };
+  getTicks(): Tick[];
+  getLabels(): string[];
+  getLabelItems(chartArea?: ChartArea): LabelItem[];
+  beforeUpdate(): void;
+  configure(): void;
+  afterUpdate(): void;
+  beforeSetDimensions(): void;
+  setDimensions(): void;
+  afterSetDimensions(): void;
+  beforeDataLimits(): void;
+  determineDataLimits(): void;
+  afterDataLimits(): void;
+  beforeBuildTicks(): void;
+  buildTicks(): Tick[];
+  afterBuildTicks(): void;
+  beforeTickToLabelConversion(): void;
+  generateTickLabels(ticks: Tick[]): void;
+  afterTickToLabelConversion(): void;
+  beforeCalculateLabelRotation(): void;
+  calculateLabelRotation(): void;
+  afterCalculateLabelRotation(): void;
+  beforeFit(): void;
+  fit(): void;
+  afterFit(): void;
+
+  isFullSize(): boolean;
+}
+export declare class Scale {
+  constructor(cfg: {id: string, type: string, ctx: CanvasRenderingContext2D, chart: Chart});
+}
+
+export interface ScriptableScaleContext {
+  chart: Chart;
+  scale: Scale;
+  index: number;
+  tick: Tick;
+}
+
+export interface ScriptableScalePointLabelContext {
+  chart: Chart;
+  scale: Scale;
+  index: number;
+  label: string;
+  type: string;
+}
+
+export interface RenderTextOpts {
+  /**
+   * The fill color of the text. If unset, the existing
+   * fillStyle property of the canvas is unchanged.
+   */
+  color?: Color;
+
+  /**
+   * The width of the strikethrough / underline
+   * @default 2
+   */
+  decorationWidth?: number;
+
+  /**
+   * The max width of the text in pixels
+   */
+  maxWidth?: number;
+
+  /**
+   * A rotation to be applied to the canvas
+   * This is applied after the translation is applied
+   */
+  rotation?: number;
+
+  /**
+   * Apply a strikethrough effect to the text
+   */
+  strikethrough?: boolean;
+
+  /**
+   * The color of the text stroke. If unset, the existing
+   * strokeStyle property of the context is unchanged
+   */
+  strokeColor?: Color;
+
+  /**
+   * The text stroke width. If unset, the existing
+   * lineWidth property of the context is unchanged
+   */
+  strokeWidth?: number;
+
+  /**
+   * The text alignment to use. If unset, the existing
+   * textAlign property of the context is unchanged
+   */
+  textAlign?: CanvasTextAlign;
+
+  /**
+   * The text baseline to use. If unset, the existing
+   * textBaseline property of the context is unchanged
+   */
+  textBaseline?: CanvasTextBaseline;
+
+  /**
+   * If specified, a translation to apply to the context
+   */
+  translation?: [number, number];
+
+  /**
+   * Underline the text
+   */
+  underline?: boolean;
+
+  /**
+   * Dimensions for drawing the label backdrop
+   */
+  backdrop?: BackdropOptions;
+}
+
+export interface BackdropOptions {
+  /**
+   * Left position of backdrop as pixel
+   */
+  left: number;
+
+  /**
+   * Top position of backdrop as pixel
+   */
+  top: number;
+
+  /**
+   * Width of backdrop in pixels
+   */
+  width: number;
+
+  /**
+   * Height of backdrop in pixels
+   */
+  height: number;
+
+  /**
+   * Color of label backdrops.
+   */
+  color: Scriptable<Color, ScriptableScaleContext>;
+}
+
+export interface LabelItem {
+  label: string | string[];
+  font: CanvasFontSpec;
+  textOffset: number;
+  options: RenderTextOpts;
+}
+
+export declare const Ticks: {
+  formatters: {
+    /**
+     * Formatter for value labels
+     * @param value the value to display
+     * @return {string|string[]} the label to display
+     */
+    values(value: unknown): string | string[];
+    /**
+     * Formatter for numeric ticks
+     * @param tickValue the value to be formatted
+     * @param index the position of the tickValue parameter in the ticks array
+     * @param ticks the list of ticks being converted
+     * @return string representation of the tickValue parameter
+     */
+    numeric(this: Scale, tickValue: number, index: number, ticks: { value: number }[]): string;
+    /**
+     * Formatter for logarithmic ticks
+     * @param tickValue the value to be formatted
+     * @param index the position of the tickValue parameter in the ticks array
+     * @param ticks the list of ticks being converted
+     * @return string representation of the tickValue parameter
+     */
+    logarithmic(this: Scale, tickValue: number, index: number, ticks: { value: number }[]): string;
+  };
+};
+
+export interface TypedRegistry<T> {
+  /**
+   * @param {ChartComponent} item
+   * @returns {string} The scope where items defaults were registered to.
+   */
+  register(item: ChartComponent): string;
+  get(id: string): T | undefined;
+  unregister(item: ChartComponent): void;
+}
+
+export interface ChartEvent {
+  type:
+  | 'contextmenu'
+  | 'mouseenter'
+  | 'mousedown'
+  | 'mousemove'
+  | 'mouseup'
+  | 'mouseout'
+  | 'click'
+  | 'dblclick'
+  | 'keydown'
+  | 'keypress'
+  | 'keyup'
+  | 'resize';
+  native: Event | null;
+  x: number | null;
+  y: number | null;
+}
+export interface ChartComponent {
+  id: string;
+  defaults?: AnyObject;
+  defaultRoutes?: { [property: string]: string };
+
+  beforeRegister?(): void;
+  afterRegister?(): void;
+  beforeUnregister?(): void;
+  afterUnregister?(): void;
+}
+
+export type InteractionAxis = 'x' | 'y' | 'xy' | 'r';
+
+export interface CoreInteractionOptions {
+  /**
+   * Sets which elements appear in the tooltip. See Interaction Modes for details.
+   * @default 'nearest'
+   */
+  mode: InteractionMode;
+  /**
+   * if true, the hover mode only applies when the mouse position intersects an item on the chart.
+   * @default true
+   */
+  intersect: boolean;
+
+  /**
+   * Defines which directions are used in calculating distances. Defaults to 'x' for 'index' mode and 'xy' in dataset and 'nearest' modes.
+   */
+  axis: InteractionAxis;
+
+  /**
+   * if true, the invisible points that are outside of the chart area will also be included when evaluating interactions.
+   * @default false
+   */
+  includeInvisible: boolean;
+}
+
+export interface CoreChartOptions<TType extends ChartType> extends ParsingOptions, AnimationOptions<TType> {
+
+  datasets: {
+    [key in ChartType]: ChartTypeRegistry[key]['datasetOptions']
+  }
+
+  /**
+   * The base axis of the chart. 'x' for vertical charts and 'y' for horizontal charts.
+   * @default 'x'
+   */
+  indexAxis: 'x' | 'y';
+
+  /**
+   * How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: `clip: {left: 5, top: false, right: -2, bottom: 0}`
+   */
+  clip: number | ChartArea | false;
+
+  /**
+   * base color
+   * @see Defaults.color
+   */
+  color: Scriptable<Color, ScriptableContext<TType>>;
+  /**
+   * base background color
+   * @see Defaults.backgroundColor
+   */
+  backgroundColor: ScriptableAndArray<Color, ScriptableContext<TType>>;
+  /**
+   * base hover background color
+   * @see Defaults.hoverBackgroundColor
+   */
+  hoverBackgroundColor: ScriptableAndArray<Color, ScriptableContext<TType>>;
+  /**
+   * base border color
+   * @see Defaults.borderColor
+   */
+  borderColor: ScriptableAndArray<Color, ScriptableContext<TType>>;
+  /**
+   * base hover border color
+   * @see Defaults.hoverBorderColor
+   */
+  hoverBorderColor: ScriptableAndArray<Color, ScriptableContext<TType>>;
+  /**
+   * base font
+   * @see Defaults.font
+   */
+  font: Partial<FontSpec>;
+  /**
+   * Resizes the chart canvas when its container does (important note...).
+   * @default true
+   */
+  responsive: boolean;
+  /**
+   * Maintain the original canvas aspect ratio (width / height) when resizing. For this option to work properly the chart must be in its own dedicated container.
+   * @default true
+   */
+  maintainAspectRatio: boolean;
+  /**
+   * Delay the resize update by give amount of milliseconds. This can ease the resize process by debouncing update of the elements.
+   * @default 0
+   */
+  resizeDelay: number;
+
+  /**
+   * Canvas aspect ratio (i.e. width / height, a value of 1 representing a square canvas). Note that this option is ignored if the height is explicitly defined either as attribute or via the style.
+   * @default 2
+   */
+  aspectRatio: number;
+
+  /**
+   * Locale used for number formatting (using `Intl.NumberFormat`).
+   * @default user's browser setting
+   */
+  locale: string;
+
+  /**
+   * Called when a resize occurs. Gets passed two arguments: the chart instance and the new size.
+   */
+  onResize(chart: Chart, size: { width: number; height: number }): void;
+
+  /**
+   * Override the window's default devicePixelRatio.
+   * @default window.devicePixelRatio
+   */
+  devicePixelRatio: number;
+
+  interaction: CoreInteractionOptions;
+
+  hover: CoreInteractionOptions;
+
+  /**
+   * The events option defines the browser events that the chart should listen to for tooltips and hovering.
+   * @default ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove']
+   */
+  events: (keyof HTMLElementEventMap)[]
+
+  /**
+   * Called when any of the events fire. Passed the event, an array of active elements (bars, points, etc), and the chart.
+   */
+  onHover(event: ChartEvent, elements: ActiveElement[], chart: Chart): void;
+
+  /**
+   * Called if the event is of type 'mouseup' or 'click'. Passed the event, an array of active elements, and the chart.
+   */
+  onClick(event: ChartEvent, elements: ActiveElement[], chart: Chart): void;
+
+  layout: Partial<{
+    autoPadding: boolean;
+    padding: Scriptable<Padding, ScriptableContext<TType>>;
+  }>;
+}
+
+export type AnimationSpec<TType extends ChartType> = {
+  /**
+   * The number of milliseconds an animation takes.
+   * @default 1000
+   */
+  duration?: Scriptable<number, ScriptableContext<TType>>;
+  /**
+   * Easing function to use
+   * @default 'easeOutQuart'
+   */
+  easing?: Scriptable<EasingFunction, ScriptableContext<TType>>;
+
+  /**
+   * Delay before starting the animations.
+   * @default 0
+   */
+  delay?: Scriptable<number, ScriptableContext<TType>>;
+
+  /**
+   *   If set to true, the animations loop endlessly.
+   * @default false
+   */
+  loop?: Scriptable<boolean, ScriptableContext<TType>>;
+}
+
+export type AnimationsSpec<TType extends ChartType> = {
+  [name: string]: false | AnimationSpec<TType> & {
+    properties: string[];
+
+    /**
+     * Type of property, determines the interpolator used. Possible values: 'number', 'color' and 'boolean'. Only really needed for 'color', because typeof does not get that right.
+     */
+    type: 'color' | 'number' | 'boolean';
+
+    fn: <T>(from: T, to: T, factor: number) => T;
+
+    /**
+     * Start value for the animation. Current value is used when undefined
+     */
+    from: Scriptable<Color | number | boolean, ScriptableContext<TType>>;
+    /**
+     *
+     */
+    to: Scriptable<Color | number | boolean, ScriptableContext<TType>>;
+  }
+}
+
+export type TransitionSpec<TType extends ChartType> = {
+  animation: AnimationSpec<TType>;
+  animations: AnimationsSpec<TType>;
+}
+
+export type TransitionsSpec<TType extends ChartType> = {
+  [mode: string]: TransitionSpec<TType>
+}
+
+export type AnimationOptions<TType extends ChartType> = {
+  animation: false | AnimationSpec<TType> & {
+    /**
+     * Callback called on each step of an animation.
+     */
+    onProgress?: (this: Chart, event: AnimationEvent) => void;
+    /**
+     * Callback called when all animations are completed.
+     */
+    onComplete?: (this: Chart, event: AnimationEvent) => void;
+  };
+  animations: AnimationsSpec<TType>;
+  transitions: TransitionsSpec<TType>;
+};
+
+export interface FontSpec {
+  /**
+   * Default font family for all text, follows CSS font-family options.
+   * @default "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif"
+   */
+  family: string;
+  /**
+   * Default font size (in px) for text. Does not apply to radialLinear scale point labels.
+   * @default 12
+   */
+  size: number;
+  /**
+   * Default font style. Does not apply to tooltip title or footer. Does not apply to chart title. Follows CSS font-style options (i.e. normal, italic, oblique, initial, inherit)
+   * @default 'normal'
+   */
+  style: 'normal' | 'italic' | 'oblique' | 'initial' | 'inherit';
+  /**
+   * Default font weight (boldness). (see MDN).
+   */
+  weight: 'normal' | 'bold' | 'lighter' | 'bolder' | number | null;
+  /**
+   * Height of an individual line of text (see MDN).
+   * @default 1.2
+   */
+  lineHeight: number | string;
+}
+
+export interface CanvasFontSpec extends FontSpec {
+  string: string;
+}
+
+export type TextAlign = 'left' | 'center' | 'right';
+export type Align = 'start' | 'center' | 'end';
+
+export interface VisualElement {
+  draw(ctx: CanvasRenderingContext2D, area?: ChartArea): void;
+  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean): boolean;
+  inXRange(mouseX: number, useFinalPosition?: boolean): boolean;
+  inYRange(mouseY: number, useFinalPosition?: boolean): boolean;
+  getCenterPoint(useFinalPosition?: boolean): Point;
+  getRange?(axis: 'x' | 'y'): number;
+}
+
+export interface CommonElementOptions {
+  borderWidth: number;
+  borderColor: Color;
+  backgroundColor: Color;
+}
+
+export interface CommonHoverOptions {
+  hoverBorderWidth: number;
+  hoverBorderColor: Color;
+  hoverBackgroundColor: Color;
+}
+
+export interface Segment {
+  start: number;
+  end: number;
+  loop: boolean;
+}
+
+export interface ArcBorderRadius {
+  outerStart: number;
+  outerEnd: number;
+  innerStart: number;
+  innerEnd: number;
+}
+
+export interface ArcOptions extends CommonElementOptions {
+  /**
+   * If true, Arc can take up 100% of a circular graph without any visual split or cut. This option doesn't support borderRadius and borderJoinStyle miter
+   * @default true
+   */
+  selfJoin: boolean;
+
+  /**
+   * Arc stroke alignment.
+   */
+  borderAlign: 'center' | 'inner';
+  /**
+   * Line dash. See MDN.
+   * @default []
+   */
+  borderDash: number[];
+  /**
+   * Line dash offset. See MDN.
+   * @default 0.0
+   */
+  borderDashOffset: number;
+  /**
+   * Line join style. See MDN. Default is 'round' when `borderAlign` is 'inner', else 'bevel'.
+   */
+  borderJoinStyle: CanvasLineJoin;
+
+  /**
+   * Sets the border radius for arcs
+   * @default 0
+   */
+  borderRadius: number | ArcBorderRadius;
+
+  /**
+   * Arc offset (in pixels).
+   */
+  offset: number;
+
+  /**
+   * If false, Arc will be flat.
+   * @default true
+   */
+  circular: boolean;
+
+  /**
+   * Spacing between arcs
+   */
+  spacing: number
+}
+
+export interface ArcHoverOptions extends CommonHoverOptions {
+  hoverBorderDash: number[];
+  hoverBorderDashOffset: number;
+  hoverOffset: number;
+}
+
+export interface LineProps {
+  points: Point[]
+}
+
+export interface LineOptions extends CommonElementOptions {
+  /**
+   * Line cap style. See MDN.
+   * @default 'butt'
+   */
+  borderCapStyle: CanvasLineCap;
+  /**
+   * Line dash. See MDN.
+   * @default []
+   */
+  borderDash: number[];
+  /**
+   * Line dash offset. See MDN.
+   * @default 0.0
+   */
+  borderDashOffset: number;
+  /**
+   * Line join style. See MDN.
+   * @default 'miter'
+   */
+  borderJoinStyle: CanvasLineJoin;
+  /**
+   *   true to keep Bézier control inside the chart, false for no restriction.
+   * @default true
+   */
+  capBezierPoints: boolean;
+  /**
+   * Interpolation mode to apply.
+   * @default 'default'
+   */
+  cubicInterpolationMode: 'default' | 'monotone';
+  /**
+   * Bézier curve tension (0 for no Bézier curves).
+   * @default 0
+   */
+  tension: number;
+  /**
+   * true to show the line as a stepped line (tension will be ignored).
+   * @default false
+   */
+  stepped: 'before' | 'after' | 'middle' | boolean;
+  /**
+   * Both line and radar charts support a fill option on the dataset object which can be used to create area between two datasets or a dataset and a boundary, i.e. the scale origin, start or end
+   */
+  fill: FillTarget | ComplexFillTarget;
+  /**
+   * If true, lines will be drawn between points with no or null data. If false, points with NaN data will create a break in the line. Can also be a number specifying the maximum gap length to span. The unit of the value depends on the scale used.
+   */
+  spanGaps: boolean | number;
+
+  segment: {
+    backgroundColor: Scriptable<Color|undefined, ScriptableLineSegmentContext>,
+    borderColor: Scriptable<Color|undefined, ScriptableLineSegmentContext>,
+    borderCapStyle: Scriptable<CanvasLineCap|undefined, ScriptableLineSegmentContext>;
+    borderDash: Scriptable<number[]|undefined, ScriptableLineSegmentContext>;
+    borderDashOffset: Scriptable<number|undefined, ScriptableLineSegmentContext>;
+    borderJoinStyle: Scriptable<CanvasLineJoin|undefined, ScriptableLineSegmentContext>;
+    borderWidth: Scriptable<number|undefined, ScriptableLineSegmentContext>;
+  };
+}
+
+export interface LineHoverOptions extends CommonHoverOptions {
+  hoverBorderCapStyle: CanvasLineCap;
+  hoverBorderDash: number[];
+  hoverBorderDashOffset: number;
+  hoverBorderJoinStyle: CanvasLineJoin;
+}
+
+export interface LineElement<T extends LineProps = LineProps, O extends LineOptions = LineOptions>
+  extends Element<T, O>,
+  VisualElement {
+  updateControlPoints(chartArea: ChartArea, indexAxis?: 'x' | 'y'): void;
+  points: Point[];
+  readonly segments: Segment[];
+  first(): Point | false;
+  last(): Point | false;
+  interpolate(point: Point, property: 'x' | 'y'): undefined | Point | Point[];
+  pathSegment(ctx: CanvasRenderingContext2D, segment: Segment, params: AnyObject): undefined | boolean;
+  path(ctx: CanvasRenderingContext2D): boolean;
+}
+
+export declare const LineElement: ChartComponent & {
+  prototype: LineElement;
+  new (cfg: AnyObject): LineElement;
+};
+
+export type PointStyle =
+  | 'circle'
+  | 'cross'
+  | 'crossRot'
+  | 'dash'
+  | 'line'
+  | 'rect'
+  | 'rectRounded'
+  | 'rectRot'
+  | 'star'
+  | 'triangle'
+  | false
+  | HTMLImageElement
+  | HTMLCanvasElement;
+
+export interface PointOptions extends CommonElementOptions {
+  /**
+   * Point radius
+   * @default 3
+   */
+  radius: number;
+  /**
+   * Extra radius added to point radius for hit detection.
+   * @default 1
+   */
+  hitRadius: number;
+  /**
+   * Point style
+   * @default 'circle;
+   */
+  pointStyle: PointStyle;
+  /**
+   * Point rotation (in degrees).
+   * @default 0
+   */
+  rotation: number;
+  /**
+   * Draw the active elements over the other elements of the dataset,
+   * @default true
+   */
+  drawActiveElementsOnTop: boolean;
+}
+
+export interface PointHoverOptions extends CommonHoverOptions {
+  /**
+   * Point radius when hovered.
+   * @default 4
+   */
+  hoverRadius: number;
+}
+
+export interface PointPrefixedOptions {
+  /**
+   * The fill color for points.
+   */
+  pointBackgroundColor: Color;
+  /**
+   * The border color for points.
+   */
+  pointBorderColor: Color;
+  /**
+   * The width of the point border in pixels.
+   */
+  pointBorderWidth: number;
+  /**
+   * The pixel size of the non-displayed point that reacts to mouse events.
+   */
+  pointHitRadius: number;
+  /**
+   * The radius of the point shape. If set to 0, the point is not rendered.
+   */
+  pointRadius: number;
+  /**
+   * The rotation of the point in degrees.
+   */
+  pointRotation: number;
+  /**
+   * Style of the point.
+   */
+  pointStyle: PointStyle;
+}
+
+export interface PointPrefixedHoverOptions {
+  /**
+   * Point background color when hovered.
+   */
+  pointHoverBackgroundColor: Color;
+  /**
+   * Point border color when hovered.
+   */
+  pointHoverBorderColor: Color;
+  /**
+   * Border width of point when hovered.
+   */
+  pointHoverBorderWidth: number;
+  /**
+   * The radius of the point when hovered.
+   */
+  pointHoverRadius: number;
+}
+
+export interface BarProps extends Point {
+  base: number;
+  horizontal: boolean;
+  width: number;
+  height: number;
+}
+
+export interface BarOptions extends Omit<CommonElementOptions, 'borderWidth'> {
+  /**
+   * The base value for the bar in data units along the value axis.
+   */
+  base: number;
+
+  /**
+   * Skipped (excluded) border: 'start', 'end', 'left',  'right', 'bottom', 'top', 'middle', false (none) or true (all).
+   * @default 'start'
+   */
+  borderSkipped: 'start' | 'end' | 'left' | 'right' | 'bottom' | 'top' | 'middle' | boolean;
+
+  /**
+   * Border radius
+   * @default 0
+   */
+  borderRadius: number | BorderRadius;
+
+  /**
+   * Amount to inflate the rectangle(s). This can be used to hide artifacts between bars.
+   * Unit is pixels. 'auto' translates to 0.33 pixels when barPercentage * categoryPercentage is 1, else 0.
+   * @default 'auto'
+   */
+  inflateAmount: number | 'auto';
+
+  /**
+   * Width of the border, number for all sides, object to specify width for each side specifically
+   * @default 0
+   */
+  borderWidth: number | { top?: number, right?: number, bottom?: number, left?: number };
+}
+
+export interface BorderRadius {
+  topLeft: number;
+  topRight: number;
+  bottomLeft: number;
+  bottomRight: number;
+}
+
+export interface BarHoverOptions extends CommonHoverOptions {
+  hoverBorderRadius: number | BorderRadius;
+}
+
+export interface BarElement<
+  T extends BarProps = BarProps,
+  O extends BarOptions = BarOptions
+> extends Element<T, O>, VisualElement {}
+
+export declare const BarElement: ChartComponent & {
+  prototype: BarElement;
+  new (cfg: AnyObject): BarElement;
+};
+
+export interface ElementOptionsByType<TType extends ChartType> {
+  arc: ScriptableAndArrayOptions<ArcOptions & ArcHoverOptions, ScriptableContext<TType>>;
+  bar: ScriptableAndArrayOptions<BarOptions & BarHoverOptions, ScriptableContext<TType>>;
+  line: ScriptableAndArrayOptions<LineOptions & LineHoverOptions, ScriptableContext<TType>>;
+  point: ScriptableAndArrayOptions<PointOptions & PointHoverOptions, ScriptableContext<TType>>;
+}
+
+export type ElementChartOptions<TType extends ChartType = ChartType> = {
+  elements: ElementOptionsByType<TType>
+};
+
+export declare class BasePlatform {
+  /**
+   * Called at chart construction time, returns a context2d instance implementing
+   * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.
+   * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)
+   * @param options - The chart options
+   */
+  acquireContext(
+    canvas: HTMLCanvasElement,
+    options?: CanvasRenderingContext2DSettings
+  ): CanvasRenderingContext2D | null;
+  /**
+   * Called at chart destruction time, releases any resources associated to the context
+   * previously returned by the acquireContext() method.
+   * @param {CanvasRenderingContext2D} context - The context2d instance
+   * @returns {boolean} true if the method succeeded, else false
+   */
+  releaseContext(context: CanvasRenderingContext2D): boolean;
+  /**
+   * Registers the specified listener on the given chart.
+   * @param {Chart} chart - Chart from which to listen for event
+   * @param {string} type - The ({@link ChartEvent}) type to listen for
+   * @param listener - Receives a notification (an object that implements
+   * the {@link ChartEvent} interface) when an event of the specified type occurs.
+   */
+  addEventListener(chart: Chart, type: string, listener: (e: ChartEvent) => void): void;
+  /**
+   * Removes the specified listener previously registered with addEventListener.
+   * @param {Chart} chart - Chart from which to remove the listener
+   * @param {string} type - The ({@link ChartEvent}) type to remove
+   * @param listener - The listener function to remove from the event target.
+   */
+  removeEventListener(chart: Chart, type: string, listener: (e: ChartEvent) => void): void;
+  /**
+   * @returns {number} the current devicePixelRatio of the device this platform is connected to.
+   */
+  getDevicePixelRatio(): number;
+  /**
+   * @param {HTMLCanvasElement} canvas - The canvas for which to calculate the maximum size
+   * @param {number} [width] - Parent element's content width
+   * @param {number} [height] - Parent element's content height
+   * @param {number} [aspectRatio] - The aspect ratio to maintain
+   * @returns { width: number, height: number } the maximum size available.
+   */
+  getMaximumSize(canvas: HTMLCanvasElement, width?: number, height?: number, aspectRatio?: number): { width: number, height: number };
+  /**
+   * @param {HTMLCanvasElement} canvas
+   * @returns {boolean} true if the canvas is attached to the platform, false if not.
+   */
+  isAttached(canvas: HTMLCanvasElement): boolean;
+  /**
+   * Updates config with platform specific requirements
+   * @param {ChartConfiguration | ChartConfigurationCustomTypes} config
+   */
+  updateConfig(config: ChartConfiguration | ChartConfigurationCustomTypesPerDataset): void;
+}
+
+export declare class BasicPlatform extends BasePlatform {}
+export declare class DomPlatform extends BasePlatform {}
+
+export declare const Decimation: Plugin;
+
+export declare const enum DecimationAlgorithm {
+  lttb = 'lttb',
+  minmax = 'min-max',
+}
+interface BaseDecimationOptions {
+  enabled: boolean;
+  threshold?: number;
+}
+
+interface LttbDecimationOptions extends BaseDecimationOptions {
+  algorithm: DecimationAlgorithm.lttb | 'lttb';
+  samples?: number;
+}
+
+interface MinMaxDecimationOptions extends BaseDecimationOptions {
+  algorithm: DecimationAlgorithm.minmax | 'min-max';
+}
+
+export type DecimationOptions = LttbDecimationOptions | MinMaxDecimationOptions;
+
+export declare const Filler: Plugin;
+export interface FillerOptions {
+  drawTime: 'beforeDraw' | 'beforeDatasetDraw' | 'beforeDatasetsDraw';
+  propagate: boolean;
+}
+
+export type FillTarget = number | string | { value: number } | 'start' | 'end' | 'origin' | 'stack' | 'shape' | boolean;
+
+export interface ComplexFillTarget {
+  /**
+   * The accepted values are the same as the filling mode values, so you may use absolute and relative dataset indexes and/or boundaries.
+   */
+  target: FillTarget;
+  /**
+   * If no color is set, the default color will be the background color of the chart.
+   */
+  above: Color;
+  /**
+   * Same as the above.
+   */
+  below: Color;
+}
+
+export interface FillerControllerDatasetOptions {
+  /**
+   * Both line and radar charts support a fill option on the dataset object which can be used to create area between two datasets or a dataset and a boundary, i.e. the scale origin, start or end
+   */
+  fill: FillTarget | ComplexFillTarget;
+}
+
+export declare const Legend: Plugin;
+
+export interface LegendItem {
+  /**
+   * Label that will be displayed
+   */
+  text: string;
+
+  /**
+   * Border radius of the legend box
+   * @since 3.1.0
+   */
+  borderRadius?: number | BorderRadius;
+
+  /**
+   * Index of the associated dataset
+   */
+  datasetIndex?: number;
+
+  /**
+   * Index the associated label in the labels array
+   */
+  index?: number
+
+  /**
+   * Fill style of the legend box
+   */
+  fillStyle?: Color;
+
+  /**
+   * Font color for the text
+   * Defaults to LegendOptions.labels.color
+   */
+  fontColor?: Color;
+
+  /**
+   * If true, this item represents a hidden dataset. Label will be rendered with a strike-through effect
+   */
+  hidden?: boolean;
+
+  /**
+   * For box border.
+   * @see https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineCap
+   */
+  lineCap?: CanvasLineCap;
+
+  /**
+   * For box border.
+   * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash
+   */
+  lineDash?: number[];
+
+  /**
+   * For box border.
+   * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset
+   */
+  lineDashOffset?: number;
+
+  /**
+   * For box border.
+   * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin
+   */
+  lineJoin?: CanvasLineJoin;
+
+  /**
+   * Width of box border
+   */
+  lineWidth?: number;
+
+  /**
+   * Stroke style of the legend box
+   */
+  strokeStyle?: Color;
+
+  /**
+   * Point style of the legend box (only used if usePointStyle is true)
+   */
+  pointStyle?: PointStyle;
+
+  /**
+   * Rotation of the point in degrees (only used if usePointStyle is true)
+   */
+  rotation?: number;
+
+  /**
+   * Text alignment
+   */
+  textAlign?: TextAlign;
+}
+
+export interface LegendElement<TType extends ChartType> extends Element<AnyObject, LegendOptions<TType>>, LayoutItem {
+  chart: Chart<TType>;
+  ctx: CanvasRenderingContext2D;
+  legendItems?: LegendItem[];
+  options: LegendOptions<TType>;
+  fit(): void;
+}
+
+export interface LegendOptions<TType extends ChartType> {
+  /**
+   * Is the legend shown?
+   * @default true
+   */
+  display: boolean;
+  /**
+   * Position of the legend.
+   * @default 'top'
+   */
+  position: LayoutPosition;
+  /**
+   * Alignment of the legend.
+   * @default 'center'
+   */
+  align: Align;
+  /**
+   * Maximum height of the legend, in pixels
+   */
+  maxHeight: number;
+  /**
+   * Maximum width of the legend, in pixels
+   */
+  maxWidth: number;
+  /**
+   * Marks that this box should take the full width/height of the canvas (moving other boxes). This is unlikely to need to be changed in day-to-day use.
+   * @default true
+   */
+  fullSize: boolean;
+  /**
+   * Legend will show datasets in reverse order.
+   * @default false
+   */
+  reverse: boolean;
+  /**
+   * A callback that is called when a click event is registered on a label item.
+   */
+  onClick(this: LegendElement<TType>, e: ChartEvent, legendItem: LegendItem, legend: LegendElement<TType>): void;
+  /**
+   * A callback that is called when a 'mousemove' event is registered on top of a label item
+   */
+  onHover(this: LegendElement<TType>, e: ChartEvent, legendItem: LegendItem, legend: LegendElement<TType>): void;
+  /**
+   * A callback that is called when a 'mousemove' event is registered outside of a previously hovered label item.
+   */
+  onLeave(this: LegendElement<TType>, e: ChartEvent, legendItem: LegendItem, legend: LegendElement<TType>): void;
+
+  labels: {
+    /**
+     * Width of colored box.
+     * @default 40
+     */
+    boxWidth: number;
+    /**
+     * Height of the coloured box.
+     * @default fontSize
+     */
+    boxHeight: number;
+    /**
+     * Color of label
+     * @see Defaults.color
+     */
+    color: Color;
+    /**
+     * Font of label
+     * @see Defaults.font
+     */
+    font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableChartContext>;
+    /**
+     * Padding between rows of colored boxes.
+     * @default 10
+     */
+    padding: number;
+    /**
+     * If usePointStyle is true, the width of the point style used for the legend.
+     */
+    pointStyleWidth: number;
+    /**
+     * Generates legend items for each thing in the legend. Default implementation returns the text + styling for the color box. See Legend Item for details.
+     */
+    generateLabels(chart: Chart): LegendItem[];
+
+    /**
+     * Filters legend items out of the legend. Receives 2 parameters, a Legend Item and the chart data
+     */
+    filter(item: LegendItem, data: ChartData): boolean;
+
+    /**
+     * Sorts the legend items
+     */
+    sort(a: LegendItem, b: LegendItem, data: ChartData): number;
+
+    /**
+     * Override point style for the legend. Only applies if usePointStyle is true
+     */
+    pointStyle: PointStyle;
+
+    /**
+     * Text alignment
+     */
+    textAlign?: TextAlign;
+
+    /**
+     * Label style will match corresponding point style (size is based on the minimum value between boxWidth and font.size).
+     * @default false
+     */
+    usePointStyle: boolean;
+
+    /**
+     * Label borderRadius will match corresponding borderRadius.
+     * @default false
+     */
+    useBorderRadius: boolean;
+
+    /**
+     * Override the borderRadius to use.
+     * @default undefined
+     */
+    borderRadius: number;
+  };
+  /**
+   * true for rendering the legends from right to left.
+   */
+  rtl: boolean;
+  /**
+   * This will force the text direction 'rtl' or 'ltr' on the canvas for rendering the legend, regardless of the css specified on the canvas
+   * @default canvas's default
+   */
+  textDirection: string;
+
+  title: {
+    /**
+     * Is the legend title displayed.
+     * @default false
+     */
+    display: boolean;
+    /**
+     * Color of title
+     * @see Defaults.color
+     */
+    color: Color;
+    /**
+     * see Fonts
+     */
+    font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableChartContext>;
+    position: 'center' | 'start' | 'end';
+    padding?: number | ChartArea;
+    /**
+     * The string title.
+     */
+    text: string;
+  };
+}
+
+export declare const SubTitle: Plugin;
+export declare const Title: Plugin;
+
+export interface TitleOptions {
+  /**
+   * Alignment of the title.
+   * @default 'center'
+   */
+  align: Align;
+  /**
+   * Is the title shown?
+   * @default false
+   */
+  display: boolean;
+  /**
+   * Position of title
+   * @default 'top'
+   */
+  position: 'top' | 'left' | 'bottom' | 'right';
+  /**
+   * Color of text
+   * @see Defaults.color
+   */
+  color: Color;
+  font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableChartContext>;
+
+  /**
+   * Marks that this box should take the full width/height of the canvas (moving other boxes). If set to `false`, places the box above/beside the
+   * chart area
+   * @default true
+   */
+  fullSize: boolean;
+  /**
+   *   Adds padding above and below the title text if a single number is specified. It is also possible to change top and bottom padding separately.
+   */
+  padding: number | { top: number; bottom: number };
+  /**
+   *   Title text to display. If specified as an array, text is rendered on multiple lines.
+   */
+  text: string | string[];
+}
+
+export type TooltipXAlignment = 'left' | 'center' | 'right';
+export type TooltipYAlignment = 'top' | 'center' | 'bottom';
+export interface TooltipLabelStyle {
+  borderColor: Color;
+  backgroundColor: Color;
+
+  /**
+   * Width of border line
+   * @since 3.1.0
+   */
+  borderWidth?: number;
+
+  /**
+   * Border dash
+   * @since 3.1.0
+   */
+  borderDash?: [number, number];
+
+  /**
+   * Border dash offset
+   * @since 3.1.0
+   */
+  borderDashOffset?: number;
+
+  /**
+   * borderRadius
+   * @since 3.1.0
+   */
+  borderRadius?: number | BorderRadius;
+}
+export interface TooltipModel<TType extends ChartType> extends Element<AnyObject, TooltipOptions<TType>> {
+  readonly chart: Chart<TType>;
+
+  // The items that we are rendering in the tooltip. See Tooltip Item Interface section
+  dataPoints: TooltipItem<TType>[];
+
+  // Positioning
+  xAlign: TooltipXAlignment;
+  yAlign: TooltipYAlignment;
+
+  // X and Y properties are the top left of the tooltip
+  x: number;
+  y: number;
+  width: number;
+  height: number;
+  // Where the tooltip points to
+  caretX: number;
+  caretY: number;
+
+  // Body
+  // The body lines that need to be rendered
+  // Each object contains 3 parameters
+  // before: string[] // lines of text before the line with the color square
+  // lines: string[]; // lines of text to render as the main item with color square
+  // after: string[]; // lines of text to render after the main lines
+  body: { before: string[]; lines: string[]; after: string[] }[];
+  // lines of text that appear after the title but before the body
+  beforeBody: string[];
+  // line of text that appear after the body and before the footer
+  afterBody: string[];
+
+  // Title
+  // lines of text that form the title
+  title: string[];
+
+  // Footer
+  // lines of text that form the footer
+  footer: string[];
+
+  // Styles to render for each item in body[]. This is the styling of the squares in the tooltip
+  labelColors: TooltipLabelStyle[];
+  labelTextColors: Color[];
+  labelPointStyles: { pointStyle: PointStyle; rotation: number }[];
+
+  // 0 opacity is a hidden tooltip
+  opacity: number;
+
+  // tooltip options
+  options: TooltipOptions<TType>;
+
+  getActiveElements(): ActiveElement[];
+  setActiveElements(active: ActiveDataPoint[], eventPosition: Point): void;
+}
+
+export interface TooltipPosition extends Point {
+  xAlign?: TooltipXAlignment;
+  yAlign?: TooltipYAlignment;
+}
+
+export type TooltipPositionerFunction<TType extends ChartType> = (
+  this: TooltipModel<TType>,
+  items: readonly ActiveElement[],
+  eventPosition: Point
+) => TooltipPosition | false;
+
+export interface TooltipPositionerMap {
+  average: TooltipPositionerFunction<ChartType>;
+  nearest: TooltipPositionerFunction<ChartType>;
+}
+
+export type TooltipPositioner = keyof TooltipPositionerMap;
+
+export interface Tooltip extends Plugin {
+  readonly positioners: TooltipPositionerMap;
+}
+
+export declare const Tooltip: Tooltip;
+
+export interface TooltipCallbacks<
+  TType extends ChartType,
+  Model = TooltipModel<TType>,
+  Item = TooltipItem<TType>> {
+
+  beforeTitle(this: Model, tooltipItems: Item[]): string | string[] | void;
+  title(this: Model, tooltipItems: Item[]): string | string[] | void;
+  afterTitle(this: Model, tooltipItems: Item[]): string | string[] | void;
+
+  beforeBody(this: Model, tooltipItems: Item[]): string | string[] | void;
+  afterBody(this: Model, tooltipItems: Item[]): string | string[] | void;
+
+  beforeLabel(this: Model, tooltipItem: Item): string | string[] | void;
+  label(this: Model, tooltipItem: Item): string | string[] | void;
+  afterLabel(this: Model, tooltipItem: Item): string | string[] | void;
+
+  labelColor(this: Model, tooltipItem: Item): TooltipLabelStyle | void;
+  labelTextColor(this: Model, tooltipItem: Item): Color | void;
+  labelPointStyle(this: Model, tooltipItem: Item): { pointStyle: PointStyle; rotation: number } | void;
+
+  beforeFooter(this: Model, tooltipItems: Item[]): string | string[] | void;
+  footer(this: Model, tooltipItems: Item[]): string | string[] | void;
+  afterFooter(this: Model, tooltipItems: Item[]): string | string[] | void;
+}
+
+export interface ExtendedPlugin<
+  TType extends ChartType,
+  O = AnyObject,
+  Model = TooltipModel<TType>> {
+  /**
+   * @desc Called before drawing the `tooltip`. If any plugin returns `false`,
+   * the tooltip drawing is cancelled until another `render` is triggered.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {Tooltip} args.tooltip - The tooltip.
+   * @param {object} options - The plugin options.
+   * @returns {boolean} `false` to cancel the chart tooltip drawing.
+   */
+  beforeTooltipDraw?(chart: Chart, args: { tooltip: Model, cancelable: true }, options: O): boolean | void;
+  /**
+   * @desc Called after drawing the `tooltip`. Note that this hook will not
+   * be called if the tooltip drawing has been previously cancelled.
+   * @param {Chart} chart - The chart instance.
+   * @param {object} args - The call arguments.
+   * @param {Tooltip} args.tooltip - The tooltip.
+   * @param {object} options - The plugin options.
+   */
+  afterTooltipDraw?(chart: Chart, args: { tooltip: Model }, options: O): void;
+}
+
+export interface ScriptableTooltipContext<TType extends ChartType> {
+  chart: UnionToIntersection<Chart<TType>>;
+  tooltip: UnionToIntersection<TooltipModel<TType>>;
+  tooltipItems: TooltipItem<TType>[];
+}
+
+export interface TooltipOptions<TType extends ChartType = ChartType> extends CoreInteractionOptions {
+  /**
+   * Are on-canvas tooltips enabled?
+   * @default true
+   */
+  enabled: Scriptable<boolean, ScriptableTooltipContext<TType>>;
+  /**
+   *   See external tooltip section.
+   */
+  external(this: TooltipModel<TType>, args: { chart: Chart; tooltip: TooltipModel<TType> }): void;
+  /**
+   * The mode for positioning the tooltip
+   */
+  position: Scriptable<TooltipPositioner, ScriptableTooltipContext<TType>>
+
+  /**
+   * Override the tooltip alignment calculations
+   */
+  xAlign: Scriptable<TooltipXAlignment, ScriptableTooltipContext<TType>>;
+  yAlign: Scriptable<TooltipYAlignment, ScriptableTooltipContext<TType>>;
+
+  /**
+   * Sort tooltip items.
+   */
+  itemSort: (a: TooltipItem<TType>, b: TooltipItem<TType>, data: ChartData) => number;
+
+  filter: (e: TooltipItem<TType>, index: number, array: TooltipItem<TType>[], data: ChartData) => boolean;
+
+  /**
+   * Background color of the tooltip.
+   * @default 'rgba(0, 0, 0, 0.8)'
+   */
+  backgroundColor: Scriptable<Color, ScriptableTooltipContext<TType>>;
+  /**
+   * Padding between the color box and the text.
+   * @default 1
+   */
+  boxPadding: number;
+  /**
+   * Color of title
+   * @default '#fff'
+   */
+  titleColor: Scriptable<Color, ScriptableTooltipContext<TType>>;
+  /**
+   * See Fonts
+   * @default {weight: 'bold'}
+   */
+  titleFont: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableTooltipContext<TType>>;
+  /**
+   * Spacing to add to top and bottom of each title line.
+   * @default 2
+   */
+  titleSpacing: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * Margin to add on bottom of title section.
+   * @default 6
+   */
+  titleMarginBottom: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * Horizontal alignment of the title text lines.
+   * @default 'left'
+   */
+  titleAlign: Scriptable<TextAlign, ScriptableTooltipContext<TType>>;
+  /**
+   * Spacing to add to top and bottom of each tooltip item.
+   * @default 2
+   */
+  bodySpacing: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * Color of body
+   * @default '#fff'
+   */
+  bodyColor: Scriptable<Color, ScriptableTooltipContext<TType>>;
+  /**
+   * See Fonts.
+   * @default {}
+   */
+  bodyFont: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableTooltipContext<TType>>;
+  /**
+   * Horizontal alignment of the body text lines.
+   * @default 'left'
+   */
+  bodyAlign: Scriptable<TextAlign, ScriptableTooltipContext<TType>>;
+  /**
+   * Spacing to add to top and bottom of each footer line.
+   * @default 2
+   */
+  footerSpacing: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * Margin to add before drawing the footer.
+   * @default 6
+   */
+  footerMarginTop: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * Color of footer
+   * @default '#fff'
+   */
+  footerColor: Scriptable<Color, ScriptableTooltipContext<TType>>;
+  /**
+   * See Fonts
+   * @default {weight: 'bold'}
+   */
+  footerFont: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableTooltipContext<TType>>;
+  /**
+   * Horizontal alignment of the footer text lines.
+   * @default 'left'
+   */
+  footerAlign: Scriptable<TextAlign, ScriptableTooltipContext<TType>>;
+  /**
+   * Padding to add to the tooltip
+   * @default 6
+   */
+  padding: Scriptable<Padding, ScriptableTooltipContext<TType>>;
+  /**
+   * Extra distance to move the end of the tooltip arrow away from the tooltip point.
+   * @default 2
+   */
+  caretPadding: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * Size, in px, of the tooltip arrow.
+   * @default 5
+   */
+  caretSize: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * Radius of tooltip corner curves.
+   * @default 6
+   */
+  cornerRadius: Scriptable<number | BorderRadius, ScriptableTooltipContext<TType>>;
+  /**
+   * Color to draw behind the colored boxes when multiple items are in the tooltip.
+   * @default '#fff'
+   */
+  multiKeyBackground: Scriptable<Color, ScriptableTooltipContext<TType>>;
+  /**
+   * If true, color boxes are shown in the tooltip.
+   * @default true
+   */
+  displayColors: Scriptable<boolean, ScriptableTooltipContext<TType>>;
+  /**
+   * Width of the color box if displayColors is true.
+   * @default bodyFont.size
+   */
+  boxWidth: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * Height of the color box if displayColors is true.
+   * @default bodyFont.size
+   */
+  boxHeight: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * Use the corresponding point style (from dataset options) instead of color boxes, ex: star, triangle etc. (size is based on the minimum value between boxWidth and boxHeight)
+   * @default false
+   */
+  usePointStyle: Scriptable<boolean, ScriptableTooltipContext<TType>>;
+  /**
+   * Color of the border.
+   * @default 'rgba(0, 0, 0, 0)'
+   */
+  borderColor: Scriptable<Color, ScriptableTooltipContext<TType>>;
+  /**
+   * Size of the border.
+   * @default 0
+   */
+  borderWidth: Scriptable<number, ScriptableTooltipContext<TType>>;
+  /**
+   * true for rendering the legends from right to left.
+   */
+  rtl: Scriptable<boolean, ScriptableTooltipContext<TType>>;
+
+  /**
+   * This will force the text direction 'rtl' or 'ltr on the canvas for rendering the tooltips, regardless of the css specified on the canvas
+   * @default canvas's default
+   */
+  textDirection: Scriptable<string, ScriptableTooltipContext<TType>>;
+
+  animation: AnimationSpec<TType> | false;
+  animations: AnimationsSpec<TType> | false;
+  callbacks: TooltipCallbacks<TType>;
+}
+
+export interface TooltipItem<TType extends ChartType> {
+  /**
+   * The chart the tooltip is being shown on
+   */
+  chart: Chart;
+
+  /**
+   * Label for the tooltip
+   */
+  label: string;
+
+  /**
+   * Parsed data values for the given `dataIndex` and `datasetIndex`
+   */
+  parsed: UnionToIntersection<ParsedDataType<TType>>;
+
+  /**
+   * Raw data values for the given `dataIndex` and `datasetIndex`
+   */
+  raw: unknown;
+
+  /**
+   * Formatted value for the tooltip
+   */
+  formattedValue: string;
+
+  /**
+   * The dataset the item comes from
+   */
+  dataset: UnionToIntersection<ChartDataset<TType>>;
+
+  /**
+   * Index of the dataset the item comes from
+   */
+  datasetIndex: number;
+
+  /**
+   * Index of this data item in the dataset
+   */
+  dataIndex: number;
+
+  /**
+   * The chart element (point, arc, bar, etc.) for this tooltip item
+   */
+  element: Element;
+}
+
+export interface PluginOptionsByType<TType extends ChartType> {
+  colors: ColorsPluginOptions;
+  decimation: DecimationOptions;
+  filler: FillerOptions;
+  legend: LegendOptions<TType>;
+  subtitle: TitleOptions;
+  title: TitleOptions;
+  tooltip: TooltipOptions<TType>;
+}
+export interface PluginChartOptions<TType extends ChartType> {
+  plugins: PluginOptionsByType<TType>;
+}
+
+export interface BorderOptions {
+  /**
+   * @default true
+   */
+  display: boolean
+  /**
+   * @default []
+   */
+  dash: Scriptable<number[], ScriptableScaleContext>;
+  /**
+   * @default 0
+   */
+  dashOffset: Scriptable<number, ScriptableScaleContext>;
+  color: Color;
+  width: number;
+  z: number;
+}
+
+export interface GridLineOptions {
+  /**
+   * @default true
+   */
+  display: boolean;
+  /**
+   * @default false
+   */
+  circular: boolean;
+  /**
+   * @default 'rgba(0, 0, 0, 0.1)'
+   */
+  color: ScriptableAndArray<Color, ScriptableScaleContext>;
+  /**
+   * @default 1
+   */
+  lineWidth: ScriptableAndArray<number, ScriptableScaleContext>;
+  /**
+   * @default true
+   */
+  drawOnChartArea: boolean;
+  /**
+   * @default true
+   */
+  drawTicks: boolean;
+  /**
+   * @default []
+   */
+  tickBorderDash: Scriptable<number[], ScriptableScaleContext>;
+  /**
+   * @default 0
+   */
+  tickBorderDashOffset: Scriptable<number, ScriptableScaleContext>;
+  /**
+   * @default 'rgba(0, 0, 0, 0.1)'
+   */
+  tickColor: ScriptableAndArray<Color, ScriptableScaleContext>;
+  /**
+   * @default 10
+   */
+  tickLength: number;
+  /**
+   * @default 1
+   */
+  tickWidth: number;
+  /**
+   * @default false
+   */
+  offset: boolean;
+  /**
+   * @default 0
+   */
+  z: number;
+}
+
+export interface TickOptions {
+  /**
+   * Color of label backdrops.
+   * @default 'rgba(255, 255, 255, 0.75)'
+   */
+  backdropColor: Scriptable<Color, ScriptableScaleContext>;
+  /**
+   * Padding of tick backdrop.
+   * @default 2
+   */
+  backdropPadding: number | ChartArea;
+
+  /**
+   * Returns the string representation of the tick value as it should be displayed on the chart. See callback.
+   */
+  callback: (this: Scale, tickValue: number | string, index: number, ticks: Tick[]) => string | string[] | number | number[] | null | undefined;
+  /**
+   * If true, show tick labels.
+   * @default true
+   */
+  display: boolean;
+  /**
+   * Color of tick
+   * @see Defaults.color
+   */
+  color: ScriptableAndArray<Color, ScriptableScaleContext>;
+  /**
+   * see Fonts
+   */
+  font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableScaleContext>;
+  /**
+   * Sets the offset of the tick labels from the axis
+   */
+  padding: number;
+  /**
+   * If true, draw a background behind the tick labels.
+   * @default false
+   */
+  showLabelBackdrop: Scriptable<boolean, ScriptableScaleContext>;
+  /**
+   * The color of the stroke around the text.
+   * @default undefined
+   */
+  textStrokeColor: Scriptable<Color, ScriptableScaleContext>;
+  /**
+   * Stroke width around the text.
+   * @default 0
+   */
+  textStrokeWidth: Scriptable<number, ScriptableScaleContext>;
+  /**
+   * z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top.
+   * @default 0
+   */
+  z: number;
+
+  major: {
+    /**
+     * If true, major ticks are generated. A major tick will affect autoskipping and major will be defined on ticks in the scriptable options context.
+     * @default false
+     */
+    enabled: boolean;
+  };
+}
+
+export type CartesianTickOptions = TickOptions & {
+  /**
+   * The number of ticks to examine when deciding how many labels will fit. Setting a smaller value will be faster, but may be less accurate when there is large variability in label length.
+   * @default ticks.length
+   */
+  sampleSize: number;
+  /**
+   * The label alignment
+   * @default 'center'
+   */
+  align: Align | 'inner';
+  /**
+   *   If true, automatically calculates how many labels can be shown and hides labels accordingly. Labels will be rotated up to maxRotation before skipping any. Turn autoSkip off to show all labels no matter what.
+   * @default true
+   */
+  autoSkip: boolean;
+  /**
+   * Padding between the ticks on the horizontal axis when autoSkip is enabled.
+   * @default 0
+   */
+  autoSkipPadding: number;
+
+  /**
+   * How is the label positioned perpendicular to the axis direction.
+   * This only applies when the rotation is 0 and the axis position is one of "top", "left", "right", or "bottom"
+   * @default 'near'
+   */
+  crossAlign: 'near' | 'center' | 'far';
+
+  /**
+   * Should the defined `min` and `max` values be presented as ticks even if they are not "nice".
+   * @default: true
+   */
+  includeBounds: boolean;
+
+  /**
+   * Distance in pixels to offset the label from the centre point of the tick (in the x direction for the x axis, and the y direction for the y axis). Note: this can cause labels at the edges to be cropped by the edge of the canvas
+   * @default 0
+   */
+  labelOffset: number;
+
+  /**
+   * Minimum rotation for tick labels. Note: Only applicable to horizontal scales.
+   * @default 0
+   */
+  minRotation: number;
+  /**
+   * Maximum rotation for tick labels when rotating to condense labels. Note: Rotation doesn't occur until necessary. Note: Only applicable to horizontal scales.
+   * @default 50
+   */
+  maxRotation: number;
+  /**
+   * Flips tick labels around axis, displaying the labels inside the chart instead of outside. Note: Only applicable to vertical scales.
+   * @default false
+   */
+  mirror: boolean;
+  /**
+   *   Padding between the tick label and the axis. When set on a vertical axis, this applies in the horizontal (X) direction. When set on a horizontal axis, this applies in the vertical (Y) direction.
+   * @default 0
+   */
+  padding: number;
+  /**
+   * Maximum number of ticks and gridlines to show.
+   * @default 11
+   */
+  maxTicksLimit: number;
+}
+
+export interface ScriptableCartesianScaleContext {
+  scale: keyof CartesianScaleTypeRegistry;
+  type: string;
+}
+
+export interface ScriptableChartContext {
+  chart: Chart;
+  type: string;
+}
+
+export interface CartesianScaleOptions extends CoreScaleOptions {
+  /**
+   * Scale boundary strategy (bypassed by min/max time options)
+   * - `data`: make sure data are fully visible, ticks outside are removed
+   * - `ticks`: make sure ticks are fully visible, data outside are truncated
+   * @since 2.7.0
+   * @default 'ticks'
+   */
+  bounds: 'ticks' | 'data';
+
+  /**
+   * Position of the axis.
+   */
+  position: 'left' | 'top' | 'right' | 'bottom' | 'center' | { [scale: string]: number };
+
+  /**
+   * Stack group. Axes at the same `position` with same `stack` are stacked.
+   */
+  stack?: string;
+
+  /**
+   * Weight of the scale in stack group. Used to determine the amount of allocated space for the scale within the group.
+   * @default 1
+   */
+  stackWeight?: number;
+
+  /**
+   *   Which type of axis this is. Possible values are: 'x', 'y', 'r'. If not set, this is inferred from the first character of the ID which should be 'x', 'y' or 'r'.
+   */
+  axis: 'x' | 'y' | 'r';
+
+  /**
+   * User defined minimum value for the scale, overrides minimum value from data.
+   */
+  min: number;
+
+  /**
+   * User defined maximum value for the scale, overrides maximum value from data.
+   */
+  max: number;
+
+  /**
+   *   If true, extra space is added to the both edges and the axis is scaled to fit into the chart area. This is set to true for a bar chart by default.
+   * @default false
+   */
+  offset: boolean;
+
+  grid: Partial<GridLineOptions>;
+
+  border: BorderOptions;
+
+  /** Options for the scale title. */
+  title: {
+    /** If true, displays the axis title. */
+    display: boolean;
+    /** Alignment of the axis title. */
+    align: Align;
+    /** The text for the title, e.g. "# of People" or "Response Choices". */
+    text: string | string[];
+    /** Color of the axis label. */
+    color: Color;
+    /** Information about the axis title font. */
+    font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableCartesianScaleContext>;
+    /** Padding to apply around scale labels. */
+    padding: number | {
+      /** Padding on the (relative) top side of this axis label. */
+      top: number;
+      /** Padding on the (relative) bottom side of this axis label. */
+      bottom: number;
+      /** This is a shorthand for defining top/bottom to the same values. */
+      y: number;
+    };
+  };
+
+  /**
+   *   If true, data will be comprised between datasets of data
+   * @default false
+   */
+  stacked?: boolean | 'single';
+
+  ticks: CartesianTickOptions;
+}
+
+export type CategoryScaleOptions = Omit<CartesianScaleOptions, 'min' | 'max'> & {
+  min: string | number;
+  max: string | number;
+  labels: string[] | string[][];
+};
+
+export type CategoryScale<O extends CategoryScaleOptions = CategoryScaleOptions> = Scale<O>
+export declare const CategoryScale: ChartComponent & {
+  prototype: CategoryScale;
+  new <O extends CategoryScaleOptions = CategoryScaleOptions>(cfg: AnyObject): CategoryScale<O>;
+};
+
+export type LinearScaleOptions = CartesianScaleOptions & {
+
+  /**
+   *  if true, scale will include 0 if it is not already included.
+   * @default true
+   */
+  beginAtZero: boolean;
+  /**
+   * Adjustment used when calculating the minimum data value.
+   */
+  suggestedMin?: number;
+  /**
+   * Adjustment used when calculating the maximum data value.
+   */
+  suggestedMax?: number;
+  /**
+  * Percentage (string ending with %) or amount (number) for added room in the scale range above and below data.
+  */
+  grace?: string | number;
+
+  ticks: {
+    /**
+     * The Intl.NumberFormat options used by the default label formatter
+     */
+    format: Intl.NumberFormatOptions;
+
+    /**
+     * if defined and stepSize is not specified, the step size will be rounded to this many decimal places.
+     */
+    precision: number;
+
+    /**
+     * User defined fixed step size for the scale
+     */
+    stepSize: number;
+
+    /**
+     * User defined count of ticks
+     */
+    count: number;
+  };
+};
+
+export type LinearScale<O extends LinearScaleOptions = LinearScaleOptions> = Scale<O>
+export declare const LinearScale: ChartComponent & {
+  prototype: LinearScale;
+  new <O extends LinearScaleOptions = LinearScaleOptions>(cfg: AnyObject): LinearScale<O>;
+};
+
+export type LogarithmicScaleOptions = CartesianScaleOptions & {
+  /**
+   * Adjustment used when calculating the maximum data value.
+   */
+  suggestedMin?: number;
+  /**
+   * Adjustment used when calculating the minimum data value.
+   */
+  suggestedMax?: number;
+
+  ticks: {
+    /**
+     * The Intl.NumberFormat options used by the default label formatter
+     */
+    format: Intl.NumberFormatOptions;
+  };
+};
+
+export type LogarithmicScale<O extends LogarithmicScaleOptions = LogarithmicScaleOptions> = Scale<O>
+export declare const LogarithmicScale: ChartComponent & {
+  prototype: LogarithmicScale;
+  new <O extends LogarithmicScaleOptions = LogarithmicScaleOptions>(cfg: AnyObject): LogarithmicScale<O>;
+};
+
+export type TimeScaleTimeOptions = {
+  /**
+   * Custom parser for dates.
+   */
+  parser: string | ((v: unknown) => number);
+  /**
+   * If defined, dates will be rounded to the start of this unit. See Time Units below for the allowed units.
+   */
+  round: false | TimeUnit;
+  /**
+   * If boolean and true and the unit is set to 'week', then the first day of the week will be Monday. Otherwise, it will be Sunday.
+   * If `number`, the index of the first day of the week (0 - Sunday, 6 - Saturday).
+   * @default false
+   */
+  isoWeekday: boolean | number;
+  /**
+   * Sets how different time units are displayed.
+   */
+  displayFormats: {
+    [key: string]: string;
+  };
+  /**
+   * The format string to use for the tooltip.
+   */
+  tooltipFormat: string;
+  /**
+   * If defined, will force the unit to be a certain type. See Time Units section below for details.
+   * @default false
+   */
+  unit: false | TimeUnit;
+  /**
+   * The minimum display format to be used for a time unit.
+   * @default 'millisecond'
+   */
+  minUnit: TimeUnit;
+};
+
+export type TimeScaleTickOptions = {
+  /**
+   * Ticks generation input values:
+   * - 'auto': generates "optimal" ticks based on scale size and time options.
+   * - 'data': generates ticks from data (including labels from data `{t|x|y}` objects).
+   * - 'labels': generates ticks from user given `data.labels` values ONLY.
+   * @see https://github.com/chartjs/Chart.js/pull/4507
+   * @since 2.7.0
+   * @default 'auto'
+   */
+  source: 'labels' | 'auto' | 'data';
+  /**
+   * The number of units between grid lines.
+   * @default 1
+   */
+  stepSize: number;
+};
+
+export type TimeScaleOptions = Omit<CartesianScaleOptions, 'min' | 'max'> & {
+  min: string | number;
+  max: string | number;
+  suggestedMin: string | number;
+  suggestedMax: string | number;
+  /**
+   * Scale boundary strategy (bypassed by min/max time options)
+   * - `data`: make sure data are fully visible, ticks outside are removed
+   * - `ticks`: make sure ticks are fully visible, data outside are truncated
+   * @since 2.7.0
+   * @default 'data'
+   */
+  bounds: 'ticks' | 'data';
+
+  /**
+   * If true, bar chart offsets are computed with skipped tick sizes
+   * @since 3.8.0
+   * @default false
+   */
+  offsetAfterAutoskip: boolean;
+
+  /**
+   * options for creating a new adapter instance
+   */
+  adapters: {
+    date: unknown;
+  };
+
+  time: TimeScaleTimeOptions;
+
+  ticks: TimeScaleTickOptions;
+};
+
+export interface TimeScale<O extends TimeScaleOptions = TimeScaleOptions> extends Scale<O> {
+  format(value: number, format?: string): string;
+  getDataTimestamps(): number[];
+  getLabelTimestamps(): string[];
+  normalize(values: number[]): number[];
+}
+
+export declare const TimeScale: ChartComponent & {
+  prototype: TimeScale;
+  new <O extends TimeScaleOptions = TimeScaleOptions>(cfg: AnyObject): TimeScale<O>;
+};
+
+export type TimeSeriesScale<O extends TimeScaleOptions = TimeScaleOptions> = TimeScale<O>
+export declare const TimeSeriesScale: ChartComponent & {
+  prototype: TimeSeriesScale;
+  new <O extends TimeScaleOptions = TimeScaleOptions>(cfg: AnyObject): TimeSeriesScale<O>;
+};
+
+export type RadialTickOptions = TickOptions & {
+  /**
+   * The Intl.NumberFormat options used by the default label formatter
+   */
+  format: Intl.NumberFormatOptions;
+
+  /**
+   * Maximum number of ticks and gridlines to show.
+   * @default 11
+   */
+  maxTicksLimit: number;
+
+  /**
+   * if defined and stepSize is not specified, the step size will be rounded to this many decimal places.
+   */
+  precision: number;
+
+  /**
+   * User defined fixed step size for the scale.
+   */
+  stepSize: number;
+
+  /**
+   * User defined number of ticks
+   */
+  count: number;
+}
+
+export type RadialLinearScaleOptions = CoreScaleOptions & {
+  animate: boolean;
+
+  startAngle: number;
+
+  angleLines: {
+    /**
+     * if true, angle lines are shown.
+     * @default true
+     */
+    display: boolean;
+    /**
+     * Color of angled lines.
+     * @default 'rgba(0, 0, 0, 0.1)'
+     */
+    color: Scriptable<Color, ScriptableScaleContext>;
+    /**
+     * Width of angled lines.
+     * @default 1
+     */
+    lineWidth: Scriptable<number, ScriptableScaleContext>;
+    /**
+     * Length and spacing of dashes on angled lines. See MDN.
+     * @default []
+     */
+    borderDash: Scriptable<number[], ScriptableScaleContext>;
+    /**
+     * Offset for line dashes. See MDN.
+     * @default 0
+     */
+    borderDashOffset: Scriptable<number, ScriptableScaleContext>;
+  };
+
+  /**
+   * if true, scale will include 0 if it is not already included.
+   * @default false
+   */
+  beginAtZero: boolean;
+
+  grid: Partial<GridLineOptions>;
+
+  /**
+   * User defined minimum number for the scale, overrides minimum value from data.
+   */
+  min: number;
+  /**
+   * User defined maximum number for the scale, overrides maximum value from data.
+   */
+  max: number;
+
+  pointLabels: {
+    /**
+     * Background color of the point label.
+     * @default undefined
+     */
+    backdropColor: Scriptable<Color, ScriptableScalePointLabelContext>;
+    /**
+     * Padding of label backdrop.
+     * @default 2
+     */
+    backdropPadding: Scriptable<number | ChartArea, ScriptableScalePointLabelContext>;
+
+    /**
+     * Border radius
+     * @default 0
+     * @since 3.8.0
+     */
+    borderRadius: Scriptable<number | BorderRadius, ScriptableScalePointLabelContext>;
+
+    /**
+     * if true, point labels are shown. When `display: 'auto'`, the label is hidden if it overlaps with another label.
+     * @default true
+     */
+    display: boolean | 'auto';
+    /**
+     * Color of label
+     * @see Defaults.color
+     */
+    color: Scriptable<Color, ScriptableScalePointLabelContext>;
+    /**
+     */
+    font: ScriptableAndScriptableOptions<Partial<FontSpec>, ScriptableScalePointLabelContext>;
+
+    /**
+     * Callback function to transform data labels to point labels. The default implementation simply returns the current string.
+     */
+    callback: (label: string, index: number) => string | string[] | number | number[];
+
+    /**
+     * Padding around the pointLabels
+     * @default 5
+     */
+    padding: Scriptable<number, ScriptableScalePointLabelContext>;
+
+    /**
+     * if true, point labels are centered.
+     * @default false
+     */
+    centerPointLabels: boolean;
+  };
+
+  /**
+   * Adjustment used when calculating the maximum data value.
+   */
+  suggestedMax: number;
+  /**
+   * Adjustment used when calculating the minimum data value.
+   */
+  suggestedMin: number;
+
+  ticks: RadialTickOptions;
+};
+
+export interface RadialLinearScale<O extends RadialLinearScaleOptions = RadialLinearScaleOptions> extends Scale<O> {
+  xCenter: number;
+  yCenter: number;
+  setCenterPoint(leftMovement: number, rightMovement: number, topMovement: number, bottomMovement: number): void;
+  getIndexAngle(index: number): number;
+  getDistanceFromCenterForValue(value: number): number;
+  getValueForDistanceFromCenter(distance: number): number;
+  getPointPosition(index: number, distanceFromCenter: number): { x: number; y: number; angle: number };
+  getPointPositionForValue(index: number, value: number): { x: number; y: number; angle: number };
+  getPointLabelPosition(index: number): ChartArea;
+  getBasePosition(index: number): { x: number; y: number; angle: number };
+}
+export declare const RadialLinearScale: ChartComponent & {
+  prototype: RadialLinearScale;
+  new <O extends RadialLinearScaleOptions = RadialLinearScaleOptions>(cfg: AnyObject): RadialLinearScale<O>;
+};
+
+export interface CartesianScaleTypeRegistry {
+  linear: {
+    options: LinearScaleOptions;
+  };
+  logarithmic: {
+    options: LogarithmicScaleOptions;
+  };
+  category: {
+    options: CategoryScaleOptions;
+  };
+  time: {
+    options: TimeScaleOptions;
+  };
+  timeseries: {
+    options: TimeScaleOptions;
+  };
+}
+
+export interface RadialScaleTypeRegistry {
+  radialLinear: {
+    options: RadialLinearScaleOptions;
+  };
+}
+
+export interface ScaleTypeRegistry extends CartesianScaleTypeRegistry, RadialScaleTypeRegistry {
+}
+
+export type ScaleType = keyof ScaleTypeRegistry;
+
+export interface CartesianParsedData extends Point {
+  // Only specified when stacked bars are enabled
+  _stacks?: {
+    // Key is the stack ID which is generally the axis ID
+    [key: string]: {
+      // Inner key is the datasetIndex
+      [key: number]: number;
+    }
+  }
+}
+
+export interface BarParsedData extends CartesianParsedData {
+  // Only specified if floating bars are show
+  _custom?: {
+    barStart: number;
+    barEnd: number;
+    start: number;
+    end: number;
+    min: number;
+    max: number;
+  }
+}
+
+export interface BubbleParsedData extends CartesianParsedData {
+  // The bubble radius value
+  _custom: number;
+}
+
+export interface RadialParsedData {
+  r: number;
+}
+
+export interface ChartTypeRegistry {
+  bar: {
+    chartOptions: BarControllerChartOptions;
+    datasetOptions: BarControllerDatasetOptions;
+    defaultDataPoint: number | [number, number] | null;
+    metaExtensions: {};
+    parsedDataType: BarParsedData,
+    scales: keyof CartesianScaleTypeRegistry;
+  };
+  line: {
+    chartOptions: LineControllerChartOptions;
+    datasetOptions: LineControllerDatasetOptions & FillerControllerDatasetOptions;
+    defaultDataPoint: ScatterDataPoint | number | null;
+    metaExtensions: {};
+    parsedDataType: CartesianParsedData;
+    scales: keyof CartesianScaleTypeRegistry;
+  };
+  scatter: {
+    chartOptions: ScatterControllerChartOptions;
+    datasetOptions: ScatterControllerDatasetOptions;
+    defaultDataPoint: ScatterDataPoint | number | null;
+    metaExtensions: {};
+    parsedDataType: CartesianParsedData;
+    scales: keyof CartesianScaleTypeRegistry;
+  };
+  bubble: {
+    chartOptions: unknown;
+    datasetOptions: BubbleControllerDatasetOptions;
+    defaultDataPoint: BubbleDataPoint;
+    metaExtensions: {};
+    parsedDataType: BubbleParsedData;
+    scales: keyof CartesianScaleTypeRegistry;
+  };
+  pie: {
+    chartOptions: PieControllerChartOptions;
+    datasetOptions: PieControllerDatasetOptions;
+    defaultDataPoint: PieDataPoint;
+    metaExtensions: PieMetaExtensions;
+    parsedDataType: number;
+    scales: keyof CartesianScaleTypeRegistry;
+  };
+  doughnut: {
+    chartOptions: DoughnutControllerChartOptions;
+    datasetOptions: DoughnutControllerDatasetOptions;
+    defaultDataPoint: DoughnutDataPoint;
+    metaExtensions: DoughnutMetaExtensions;
+    parsedDataType: number;
+    scales: keyof CartesianScaleTypeRegistry;
+  };
+  polarArea: {
+    chartOptions: PolarAreaControllerChartOptions;
+    datasetOptions: PolarAreaControllerDatasetOptions;
+    defaultDataPoint: number;
+    metaExtensions: {};
+    parsedDataType: RadialParsedData;
+    scales: keyof RadialScaleTypeRegistry;
+  };
+  radar: {
+    chartOptions: RadarControllerChartOptions;
+    datasetOptions: RadarControllerDatasetOptions & FillerControllerDatasetOptions;
+    defaultDataPoint: number | null;
+    metaExtensions: {};
+    parsedDataType: RadialParsedData;
+    scales: keyof RadialScaleTypeRegistry;
+  };
+}
+
+export type ChartType = keyof ChartTypeRegistry;
+
+export type ScaleOptionsByType<TScale extends ScaleType = ScaleType> =
+  { [key in ScaleType]: { type: key } & ScaleTypeRegistry[key]['options'] }[TScale]
+;
+
+// Convenience alias for creating and manipulating scale options in user code
+export type ScaleOptions<TScale extends ScaleType = ScaleType> = DeepPartial<ScaleOptionsByType<TScale>>;
+
+export type DatasetChartOptions<TType extends ChartType = ChartType> = {
+  [key in TType]: {
+    datasets: ChartTypeRegistry[key]['datasetOptions'];
+  };
+};
+
+export type ScaleChartOptions<TType extends ChartType = ChartType> = {
+  scales: {
+    [key: string]: ScaleOptionsByType<ChartTypeRegistry[TType]['scales']>;
+  };
+};
+
+export type ChartOptions<TType extends ChartType = ChartType> = Exclude<
+DeepPartial<
+CoreChartOptions<TType> &
+ElementChartOptions<TType> &
+PluginChartOptions<TType> &
+DatasetChartOptions<TType> &
+ScaleChartOptions<TType> &
+ChartTypeRegistry[TType]['chartOptions']
+>,
+DeepPartial<unknown[]>
+>;
+
+export type DefaultDataPoint<TType extends ChartType> = DistributiveArray<ChartTypeRegistry[TType]['defaultDataPoint']>;
+
+export type ParsedDataType<TType extends ChartType = ChartType> = ChartTypeRegistry[TType]['parsedDataType'];
+
+export interface ChartDatasetProperties<TType extends ChartType, TData> {
+  type?: TType;
+  data: TData;
+}
+
+export interface ChartDatasetPropertiesCustomTypesPerDataset<TType extends ChartType, TData> {
+  type: TType;
+  data: TData;
+}
+
+export type ChartDataset<
+  TType extends ChartType = ChartType,
+  TData = DefaultDataPoint<TType>
+> = DeepPartial<
+{ [key in ChartType]: { type: key } & ChartTypeRegistry[key]['datasetOptions'] }[TType]
+> & ChartDatasetProperties<TType, TData>;
+
+export type ChartDatasetCustomTypesPerDataset<
+  TType extends ChartType = ChartType,
+  TData = DefaultDataPoint<TType>
+> = DeepPartial<
+{ [key in ChartType]: { type: key } & ChartTypeRegistry[key]['datasetOptions'] }[TType]
+> & ChartDatasetPropertiesCustomTypesPerDataset<TType, TData>;
+
+/**
+ * TData represents the data point type. If unspecified, a default is provided
+ *   based on the chart type.
+ * TLabel represents the label type
+ */
+export interface ChartData<
+  TType extends ChartType = ChartType,
+  TData = DefaultDataPoint<TType>,
+  TLabel = unknown
+> {
+  labels?: TLabel[];
+  xLabels?: TLabel[];
+  yLabels?: TLabel[];
+  datasets: ChartDataset<TType, TData>[];
+}
+
+export interface ChartDataCustomTypesPerDataset<
+  TType extends ChartType = ChartType,
+  TData = DefaultDataPoint<TType>,
+  TLabel = unknown
+> {
+  labels?: TLabel[];
+  xLabels?: TLabel[];
+  yLabels?: TLabel[];
+  datasets: ChartDatasetCustomTypesPerDataset<TType, TData>[];
+}
+
+export interface ChartConfiguration<
+  TType extends ChartType = ChartType,
+  TData = DefaultDataPoint<TType>,
+  TLabel = unknown
+> {
+  type: TType;
+  data: ChartData<TType, TData, TLabel>;
+  options?: ChartOptions<TType> | undefined;
+  plugins?: Plugin<TType>[];
+  platform?: typeof BasePlatform;
+}
+
+export interface ChartConfigurationCustomTypesPerDataset<
+  TType extends ChartType = ChartType,
+  TData = DefaultDataPoint<TType>,
+  TLabel = unknown
+> {
+  data: ChartDataCustomTypesPerDataset<TType, TData, TLabel>;
+  options?: ChartOptions<TType> | undefined;
+  plugins?: Plugin<TType>[];
+}
Index: node_modules/chart.js/dist/types/layout.d.ts
===================================================================
--- node_modules/chart.js/dist/types/layout.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/types/layout.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+import {ChartArea} from './geometric.js';
+
+export type LayoutPosition = 'left' | 'top' | 'right' | 'bottom' | 'center' | 'chartArea' | {[scaleId: string]: number};
+
+export interface LayoutItem {
+  /**
+   * The position of the item in the chart layout. Possible values are
+   */
+  position: LayoutPosition;
+  /**
+   * The weight used to sort the item. Higher weights are further away from the chart area
+   */
+  weight: number;
+  /**
+   * if true, and the item is horizontal, then push vertical boxes down
+   */
+  fullSize: boolean;
+  /**
+   * Width of item. Must be valid after update()
+   */
+  width: number;
+  /**
+   * Height of item. Must be valid after update()
+   */
+  height: number;
+  /**
+   * Left edge of the item. Set by layout system and cannot be used in update
+   */
+  left: number;
+  /**
+   * Top edge of the item. Set by layout system and cannot be used in update
+   */
+  top: number;
+  /**
+   * Right edge of the item. Set by layout system and cannot be used in update
+   */
+  right: number;
+  /**
+   * Bottom edge of the item. Set by layout system and cannot be used in update
+   */
+  bottom: number;
+
+  /**
+   * Called before the layout process starts
+   */
+  beforeLayout?(): void;
+  /**
+   * Draws the element
+   */
+  draw(chartArea: ChartArea): void;
+  /**
+   * Returns an object with padding on the edges
+   */
+  getPadding?(): ChartArea;
+  /**
+   * returns true if the layout item is horizontal (ie. top or bottom)
+   */
+  isHorizontal(): boolean;
+  /**
+   * Takes two parameters: width and height.
+   * @param width
+   * @param height
+   */
+  update(width: number, height: number, margins?: ChartArea): void;
+}
Index: node_modules/chart.js/dist/types/utils.d.ts
===================================================================
--- node_modules/chart.js/dist/types/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/dist/types/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/* eslint-disable @typescript-eslint/ban-types */
+
+// DeepPartial implementation taken from the utility-types NPM package, which is
+// Copyright (c) 2016 Piotr Witek <piotrek.witek@gmail.com> (http://piotrwitek.github.io)
+// and used under the terms of the MIT license
+export type DeepPartial<T> = T extends Function
+  ? T
+  : T extends Array<infer U>
+    ? _DeepPartialArray<U>
+    : T extends object
+      ? _DeepPartialObject<T>
+      : T | undefined;
+
+type _DeepPartialArray<T> = Array<DeepPartial<T>>
+type _DeepPartialObject<T> = { [P in keyof T]?: DeepPartial<T[P]> };
+
+export type DistributiveArray<T> = [T] extends [unknown] ? Array<T> : never
+
+// https://stackoverflow.com/a/50375286
+export type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
+
+export type AllKeys<T> = T extends any ? keyof T : never;
+
+export type PickType<T, K extends AllKeys<T>> = T extends { [k in K]?: any }
+  ? T[K]
+  : undefined;
+
+export type Merge<T extends object> = {
+  [k in AllKeys<T>]: PickType<T, k>;
+};
Index: node_modules/chart.js/helpers/helpers.cjs
===================================================================
--- node_modules/chart.js/helpers/helpers.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/helpers/helpers.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/helpers.cjs');
Index: node_modules/chart.js/helpers/helpers.d.ts
===================================================================
--- node_modules/chart.js/helpers/helpers.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/helpers/helpers.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from '../dist/helpers/index.js';
Index: node_modules/chart.js/helpers/helpers.js
===================================================================
--- node_modules/chart.js/helpers/helpers.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/helpers/helpers.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from '../dist/helpers.js';
Index: node_modules/chart.js/helpers/package.json
===================================================================
--- node_modules/chart.js/helpers/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/helpers/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+{
+    "name": "chart.js-helpers",
+    "private": true,
+    "description": "Helpers package. Exists to support bundlers without exports support such as webpack 4.",
+    "type": "module",
+    "main": "./helpers.cjs",
+    "module": "./helpers.js",
+    "exports": {
+        "types": "./helpers.d.ts",
+        "import": "./helpers.js",
+        "require": "./helpers.cjs"
+    },
+    "types": "./helpers.d.ts"
+}
Index: node_modules/chart.js/package.json
===================================================================
--- node_modules/chart.js/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/chart.js/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,139 @@
+{
+  "name": "chart.js",
+  "homepage": "https://www.chartjs.org",
+  "description": "Simple HTML5 charts using the canvas element.",
+  "version": "4.5.0",
+  "license": "MIT",
+  "type": "module",
+  "sideEffects": [
+    "./auto/auto.js",
+    "./auto/auto.cjs",
+    "./dist/chart.umd.min.js",
+    "./dist/chart.umd.js"
+  ],
+  "jsdelivr": "./dist/chart.umd.min.js",
+  "unpkg": "./dist/chart.umd.min.js",
+  "main": "./dist/chart.cjs",
+  "module": "./dist/chart.js",
+  "exports": {
+    ".": {
+      "types": "./dist/types.d.ts",
+      "import": "./dist/chart.js",
+      "require": "./dist/chart.cjs"
+    },
+    "./auto": {
+      "types": "./auto/auto.d.ts",
+      "import": "./auto/auto.js",
+      "require": "./auto/auto.cjs"
+    },
+    "./helpers": {
+      "types": "./helpers/helpers.d.ts",
+      "import": "./helpers/helpers.js",
+      "require": "./helpers/helpers.cjs"
+    }
+  },
+  "types": "./dist/types.d.ts",
+  "keywords": [
+    "canvas",
+    "charts",
+    "data",
+    "graphs",
+    "html5",
+    "responsive"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/chartjs/Chart.js.git"
+  },
+  "bugs": {
+    "url": "https://github.com/chartjs/Chart.js/issues"
+  },
+  "files": [
+    "auto/**",
+    "dist/**",
+    "!dist/docs/**",
+    "helpers/**"
+  ],
+  "scripts": {
+    "autobuild": "rollup -c -w",
+    "copyDeclarations": "node -e \"fs.cpSync('./src/types/', './dist/types/', {recursive:true})\"",
+    "emitDeclarations": "tsc --emitDeclarationOnly && pnpm copyDeclarations",
+    "build": "rollup -c && pnpm emitDeclarations",
+    "dev": "karma start ./karma.conf.cjs --auto-watch --no-single-run --browsers chrome --grep",
+    "dev:ff": "karma start ./karma.conf.cjs --auto-watch --no-single-run --browsers firefox --grep",
+    "docs": "pnpm run build && pnpm --filter \"./docs/**\" build",
+    "docs:dev": "pnpm run build && pnpm --filter \"./docs/**\" dev",
+    "lint-js": "eslint \"src/**/*.{js,ts}\" \"test/**/*.js\" \"docs/**/*.js\" --cache",
+    "lint-md": "eslint \"**/*.md\" --cache",
+    "lint-types": "pnpm build && node test/types/autogen.js && tsc -p test/types",
+    "lint": "concurrently \"pnpm:lint-*\"",
+    "test": "pnpm lint && pnpm test-ci",
+    "test-ci": "concurrently \"pnpm:test-ci-*\"",
+    "test-ci-karma": "cross-env NODE_ENV=test karma start ./karma.conf.cjs --auto-watch --single-run --coverage --grep",
+    "test-ci-integration": "pnpm --filter \"./test/integration/**\" test"
+  },
+  "dependencies": {
+    "@kurkle/color": "^0.3.0"
+  },
+  "devDependencies": {
+    "@rollup/plugin-commonjs": "^23.0.2",
+    "@rollup/plugin-inject": "^5.0.2",
+    "@rollup/plugin-json": "^5.0.1",
+    "@rollup/plugin-node-resolve": "^15.0.1",
+    "@swc/core": "^1.3.18",
+    "@types/estree": "^1.0.0",
+    "@types/offscreencanvas": "^2019.7.0",
+    "@typescript-eslint/eslint-plugin": "^5.32.0",
+    "@typescript-eslint/parser": "^5.32.0",
+    "chartjs-adapter-luxon": "^1.2.0",
+    "chartjs-adapter-moment": "^1.0.0",
+    "chartjs-test-utils": "^0.4.0",
+    "concurrently": "^7.3.0",
+    "coveralls": "^3.1.1",
+    "cross-env": "^7.0.3",
+    "eslint": "^8.21.0",
+    "eslint-config-chartjs": "^0.3.0",
+    "eslint-plugin-es": "^4.1.0",
+    "eslint-plugin-html": "^7.1.0",
+    "eslint-plugin-markdown": "^3.0.0",
+    "esm": "^3.2.25",
+    "glob": "^8.0.3",
+    "jasmine": "^3.7.0",
+    "jasmine-core": "^3.7.1",
+    "karma": "^6.3.2",
+    "karma-chrome-launcher": "^3.1.0",
+    "karma-coverage": "^2.0.3",
+    "karma-edge-launcher": "^0.4.2",
+    "karma-firefox-launcher": "^2.1.0",
+    "karma-jasmine": "^4.0.1",
+    "karma-jasmine-html-reporter": "^1.5.4",
+    "karma-rollup-preprocessor": "7.0.7",
+    "karma-safari-private-launcher": "^1.0.0",
+    "karma-spec-reporter": "0.0.32",
+    "luxon": "^3.0.1",
+    "moment": "^2.29.4",
+    "moment-timezone": "^0.5.34",
+    "pixelmatch": "^5.3.0",
+    "rollup": "^3.3.0",
+    "rollup-plugin-cleanup": "^3.2.1",
+    "rollup-plugin-istanbul": "^4.0.0",
+    "rollup-plugin-swc3": "^0.7.0",
+    "rollup-plugin-terser": "^7.0.2",
+    "typescript": "^4.7.4",
+    "yargs": "^17.5.1"
+  },
+  "engines": {
+    "pnpm": ">=8"
+  },
+  "packageManager": "pnpm@8.13.0",
+  "pnpm": {
+    "overrides": {
+      "html-entities": "1.4.0"
+    },
+    "peerDependencyRules": {
+      "ignoreMissing": [
+        "chart.js"
+      ]
+    }
+  }
+}
Index: node_modules/clsx/clsx.d.mts
===================================================================
--- node_modules/clsx/clsx.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/clsx.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export type ClassValue = ClassArray | ClassDictionary | string | number | bigint | null | boolean | undefined;
+export type ClassDictionary = Record<string, any>;
+export type ClassArray = ClassValue[];
+
+export function clsx(...inputs: ClassValue[]): string;
+export default clsx;
Index: node_modules/clsx/clsx.d.ts
===================================================================
--- node_modules/clsx/clsx.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/clsx.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+declare namespace clsx {
+	type ClassValue = ClassArray | ClassDictionary | string | number | bigint | null | boolean | undefined;
+	type ClassDictionary = Record<string, any>;
+	type ClassArray = ClassValue[];
+	function clsx(...inputs: ClassValue[]): string;
+}
+
+declare function clsx(...inputs: clsx.ClassValue[]): string;
+
+export = clsx;
Index: node_modules/clsx/dist/clsx.js
===================================================================
--- node_modules/clsx/dist/clsx.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/dist/clsx.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+function r(e){var o,t,f="";if("string"==typeof e||"number"==typeof e)f+=e;else if("object"==typeof e)if(Array.isArray(e)){var n=e.length;for(o=0;o<n;o++)e[o]&&(t=r(e[o]))&&(f&&(f+=" "),f+=t)}else for(t in e)e[t]&&(f&&(f+=" "),f+=t);return f}function e(){for(var e,o,t=0,f="",n=arguments.length;t<n;t++)(e=arguments[t])&&(o=r(e))&&(f&&(f+=" "),f+=o);return f}module.exports=e,module.exports.clsx=e;
Index: node_modules/clsx/dist/clsx.min.js
===================================================================
--- node_modules/clsx/dist/clsx.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/dist/clsx.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e.clsx=n()}(this,(function(){function e(n){var t,f,o="";if("string"==typeof n||"number"==typeof n)o+=n;else if("object"==typeof n)if(Array.isArray(n)){var r=n.length;for(t=0;t<r;t++)n[t]&&(f=e(n[t]))&&(o&&(o+=" "),o+=f)}else for(f in n)n[f]&&(o&&(o+=" "),o+=f);return o}function n(){for(var n,t,f=0,o="",r=arguments.length;f<r;f++)(n=arguments[f])&&(t=e(n))&&(o&&(o+=" "),o+=t);return o}return n.clsx=n,n}));
Index: node_modules/clsx/dist/clsx.mjs
===================================================================
--- node_modules/clsx/dist/clsx.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/dist/clsx.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}export function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}export default clsx;
Index: node_modules/clsx/dist/lite.js
===================================================================
--- node_modules/clsx/dist/lite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/dist/lite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+function e(){for(var e,o=0,r="",t=arguments.length;o<t;o++)(e=arguments[o])&&"string"==typeof e&&(r+=(r&&" ")+e);return r}module.exports=e,module.exports.clsx=e;
Index: node_modules/clsx/dist/lite.mjs
===================================================================
--- node_modules/clsx/dist/lite.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/dist/lite.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export function clsx(){for(var t,r=0,e="",n=arguments.length;r<n;r++)(t=arguments[r])&&"string"==typeof t&&(e+=(e&&" ")+t);return e}export default clsx;
Index: node_modules/clsx/license
===================================================================
--- node_modules/clsx/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: node_modules/clsx/package.json
===================================================================
--- node_modules/clsx/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+{
+  "name": "clsx",
+  "version": "2.1.1",
+  "repository": "lukeed/clsx",
+  "description": "A tiny (239B) utility for constructing className strings conditionally.",
+  "module": "dist/clsx.mjs",
+  "unpkg": "dist/clsx.min.js",
+  "main": "dist/clsx.js",
+  "types": "clsx.d.ts",
+  "license": "MIT",
+  "exports": {
+    ".": {
+      "import": {
+        "types": "./clsx.d.mts",
+        "default": "./dist/clsx.mjs"
+      },
+      "default": {
+        "types": "./clsx.d.ts",
+        "default": "./dist/clsx.js"
+      }
+    },
+    "./lite": {
+      "import": {
+        "types": "./clsx.d.mts",
+        "default": "./dist/lite.mjs"
+      },
+      "default": {
+        "types": "./clsx.d.ts",
+        "default": "./dist/lite.js"
+      }
+    }
+  },
+  "author": {
+    "name": "Luke Edwards",
+    "email": "luke.edwards05@gmail.com",
+    "url": "https://lukeed.com"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "scripts": {
+    "build": "node bin",
+    "test": "uvu -r esm test"
+  },
+  "files": [
+    "*.d.mts",
+    "*.d.ts",
+    "dist"
+  ],
+  "keywords": [
+    "classes",
+    "classname",
+    "classnames"
+  ],
+  "devDependencies": {
+    "esm": "3.2.25",
+    "terser": "4.8.0",
+    "uvu": "0.5.4"
+  }
+}
Index: node_modules/clsx/readme.md
===================================================================
--- node_modules/clsx/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/clsx/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,154 @@
+# clsx [![CI](https://github.com/lukeed/clsx/workflows/CI/badge.svg)](https://github.com/lukeed/clsx/actions?query=workflow%3ACI) [![codecov](https://badgen.net/codecov/c/github/lukeed/clsx)](https://codecov.io/gh/lukeed/clsx) [![licenses](https://licenses.dev/b/npm/clsx)](https://licenses.dev/npm/clsx)
+
+> A tiny (239B) utility for constructing `className` strings conditionally.<Br>Also serves as a [faster](bench) & smaller drop-in replacement for the `classnames` module.
+
+This module is available in three formats:
+
+* **ES Module**: `dist/clsx.mjs`
+* **CommonJS**: `dist/clsx.js`
+* **UMD**: `dist/clsx.min.js`
+
+
+## Install
+
+```
+$ npm install --save clsx
+```
+
+
+## Usage
+
+```js
+import clsx from 'clsx';
+// or
+import { clsx } from 'clsx';
+
+// Strings (variadic)
+clsx('foo', true && 'bar', 'baz');
+//=> 'foo bar baz'
+
+// Objects
+clsx({ foo:true, bar:false, baz:isTrue() });
+//=> 'foo baz'
+
+// Objects (variadic)
+clsx({ foo:true }, { bar:false }, null, { '--foobar':'hello' });
+//=> 'foo --foobar'
+
+// Arrays
+clsx(['foo', 0, false, 'bar']);
+//=> 'foo bar'
+
+// Arrays (variadic)
+clsx(['foo'], ['', 0, false, 'bar'], [['baz', [['hello'], 'there']]]);
+//=> 'foo bar baz hello there'
+
+// Kitchen sink (with nesting)
+clsx('foo', [1 && 'bar', { baz:false, bat:null }, ['hello', ['world']]], 'cya');
+//=> 'foo bar hello world cya'
+```
+
+
+## API
+
+### clsx(...input)
+Returns: `String`
+
+#### input
+Type: `Mixed`
+
+The `clsx` function can take ***any*** number of arguments, each of which can be an Object, Array, Boolean, or String.
+
+> **Important:** _Any_ falsey values are discarded!<br>Standalone Boolean values are discarded as well.
+
+```js
+clsx(true, false, '', null, undefined, 0, NaN);
+//=> ''
+```
+
+## Modes
+
+There are multiple "versions" of `clsx` available, which allows you to bring only the functionality you need!
+
+#### `clsx`
+> **Size (gzip):** 239 bytes<br>
+> **Availability:** CommonJS, ES Module, UMD
+
+The default `clsx` module; see [API](#API) for info.
+
+```js
+import { clsx } from 'clsx';
+// or
+import clsx from 'clsx';
+```
+
+#### `clsx/lite`
+> **Size (gzip):** 140 bytes<br>
+> **Availability:** CommonJS, ES Module<br>
+> **CAUTION:** Accepts **ONLY** string arguments!
+
+Ideal for applications that ***only*** use the string-builder pattern.
+
+Any non-string arguments are ignored!
+
+```js
+import { clsx } from 'clsx/lite';
+// or
+import clsx from 'clsx/lite';
+
+// string
+clsx('hello', true && 'foo', false && 'bar');
+// => "hello foo"
+
+// NOTE: Any non-string input(s) ignored
+clsx({ foo: true });
+//=> ""
+```
+
+## Benchmarks
+
+For snapshots of cross-browser results, check out the [`bench`](bench) directory~!
+
+## Support
+
+All versions of Node.js are supported.
+
+All browsers that support [`Array.isArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray#Browser_compatibility) are supported (IE9+).
+
+>**Note:** For IE8 support and older, please install `clsx@1.0.x` and beware of [#17](https://github.com/lukeed/clsx/issues/17).
+
+## Tailwind Support
+
+Here some additional (optional) steps to enable classes autocompletion using `clsx` with Tailwind CSS.
+
+<details>
+<summary>
+  Visual Studio Code
+</summary>
+
+1. [Install the "Tailwind CSS IntelliSense" Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss)
+
+2. Add the following to your [`settings.json`](https://code.visualstudio.com/docs/getstarted/settings):
+
+  ```json
+   {
+    "tailwindCSS.experimental.classRegex": [
+      ["clsx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"]
+    ]
+   }
+  ```
+</details>
+
+You may find the [`clsx/lite`](#clsxlite) module useful within Tailwind contexts. This is especially true if/when your application **only** composes classes in this pattern:
+
+```js
+clsx('text-base', props.active && 'text-primary', props.className);
+```
+
+## Related
+
+- [obj-str](https://github.com/lukeed/obj-str) - A smaller (96B) and similiar utility that only works with Objects.
+
+## License
+
+MIT © [Luke Edwards](https://lukeed.com)
Index: node_modules/d3-array/LICENSE
===================================================================
--- node_modules/d3-array/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2023 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-array/README.md
===================================================================
--- node_modules/d3-array/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,954 @@
+# d3-array
+
+Data in JavaScript is often represented by an iterable (such as an [array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array), [set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set) or [generator](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Generator)), and so iterable manipulation is a common task when analyzing or visualizing data. For example, you might take a contiguous slice (subset) of an array, filter an array using a predicate function, or map an array to a parallel set of values using a transform function. Before looking at the methods that d3-array provides, familiarize yourself with the powerful [array methods built-in to JavaScript](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array).
+
+JavaScript includes **mutation methods** that modify the array:
+
+* [*array*.pop](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/pop) - Remove the last element from the array.
+* [*array*.push](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/push) - Add one or more elements to the end of the array.
+* [*array*.reverse](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse) - Reverse the order of the elements of the array.
+* [*array*.shift](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/shift) - Remove the first element from the array.
+* [*array*.sort](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) - Sort the elements of the array.
+* [*array*.splice](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) - Add or remove elements from the array.
+* [*array*.unshift](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift) - Add one or more elements to the front of the array.
+
+There are also **access methods** that return some representation of the array:
+
+* [*array*.concat](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) - Join the array with other array(s) or value(s).
+* [*array*.join](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/join) - Join all elements of the array into a string.
+* [*array*.slice](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) - Extract a section of the array.
+* [*array*.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) - Find the first occurrence of a value within the array.
+* [*array*.lastIndexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - Find the last occurrence of a value within the array.
+
+And finally **iteration methods** that apply functions to elements in the array:
+
+* [*array*.filter](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) - Create a new array with only the elements for which a predicate is true.
+* [*array*.forEach](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) - Call a function for each element in the array.
+* [*array*.every](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/every) - See if every element in the array satisfies a predicate.
+* [*array*.map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map) - Create a new array with the result of calling a function on every element in the array.
+* [*array*.some](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/some) - See if at least one element in the array satisfies a predicate.
+* [*array*.reduce](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce) - Apply a function to reduce the array to a single value (from left-to-right).
+* [*array*.reduceRight](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight) - Apply a function to reduce the array to a single value (from right-to-left).
+
+## Installing
+
+If you use npm, `npm install d3-array`. You can also download the [latest release on GitHub](https://github.com/d3/d3-array/releases/latest). For vanilla HTML in modern browsers, import d3-array from jsDelivr:
+
+```html
+<script type="module">
+
+import {min} from "https://cdn.jsdelivr.net/npm/d3-array@3/+esm";
+
+const m = min(array);
+
+</script>
+```
+
+For legacy environments, you can load d3-array’s UMD bundle; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-array@3"></script>
+<script>
+
+const m = d3.min(array);
+
+</script>
+```
+
+## API Reference
+
+* [Statistics](#statistics)
+* [Search](#search)
+* [Transformations](#transformations)
+* [Iterables](#iterables)
+* [Sets](#sets)
+* [Bins](#bins)
+* [Interning](#interning)
+
+### Statistics
+
+Methods for computing basic summary statistics.
+
+<a name="min" href="#min">#</a> d3.<b>min</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/min.js), [Examples](https://observablehq.com/@d3/d3-extent)
+
+Returns the minimum value in the given *iterable* using natural order. If the iterable contains no comparable values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the minimum value.
+
+Unlike the built-in [Math.min](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Math/min), this method ignores undefined, null and NaN values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the minimum of the strings [“20”, “3”] is “20”, while the minimum of the numbers [20, 3] is 3.
+
+See also [extent](#extent).
+
+<a name="minIndex" href="#minIndex">#</a> d3.<b>minIndex</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/minIndex.js), [Examples](https://observablehq.com/@d3/d3-extent)
+
+Returns the index of the minimum value in the given *iterable* using natural order. If the iterable contains no comparable values, returns -1. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the minimum value.
+
+Unlike the built-in [Math.min](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Math/min), this method ignores undefined, null and NaN values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the minimum of the strings [“20”, “3”] is “20”, while the minimum of the numbers [20, 3] is 3.
+
+<a name="max" href="#max">#</a> d3.<b>max</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/max.js), [Examples](https://observablehq.com/@d3/d3-extent)
+
+Returns the maximum value in the given *iterable* using natural order. If the iterable contains no comparable values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the maximum value.
+
+Unlike the built-in [Math.max](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Math/max), this method ignores undefined values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the maximum of the strings [“20”, “3”] is “3”, while the maximum of the numbers [20, 3] is 20.
+
+See also [extent](#extent).
+
+<a name="maxIndex" href="#maxIndex">#</a> d3.<b>maxIndex</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/maxIndex.js), [Examples](https://observablehq.com/@d3/d3-extent)
+
+Returns the index of the maximum value in the given *iterable* using natural order. If the iterable contains no comparable values, returns -1. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the maximum value.
+
+Unlike the built-in [Math.max](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Math/max), this method ignores undefined values; this is useful for ignoring missing data. In addition, elements are compared using natural order rather than numeric order. For example, the maximum of the strings [“20”, “3”] is “3”, while the maximum of the numbers [20, 3] is 20.
+
+<a name="extent" href="#extent">#</a> d3.<b>extent</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/extent.js), [Examples](https://observablehq.com/@d3/d3-extent)
+
+Returns the [minimum](#min) and [maximum](#max) value in the given *iterable* using natural order. If the iterable contains no comparable values, returns [undefined, undefined]. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the extent.
+
+<a name="mode" href="#mode">#</a> d3.<b>mode</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/mode.js), [Examples](https://observablehq.com/@d3/d3-mode)
+
+Returns the mode of the given *iterable*, *i.e.* the value which appears the most often. In case of equality, returns the first of the relevant values. If the iterable contains no comparable values, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the mode. This method ignores undefined, null and NaN values; this is useful for ignoring missing data.
+
+<a name="sum" href="#sum">#</a> d3.<b>sum</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/sum.js), [Examples](https://observablehq.com/@d3/d3-sum)
+
+Returns the sum of the given *iterable* of numbers. If the iterable contains no numbers, returns 0. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the sum. This method ignores undefined and NaN values; this is useful for ignoring missing data.
+
+<a name="mean" href="#mean">#</a> d3.<b>mean</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/mean.js), [Examples](https://observablehq.com/@d3/d3-mean-d3-median-and-friends)
+
+Returns the mean of the given *iterable* of numbers. If the iterable contains no numbers, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the mean. This method ignores undefined and NaN values; this is useful for ignoring missing data.
+
+<a name="median" href="#median">#</a> d3.<b>median</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/median.js), [Examples](https://observablehq.com/@d3/d3-mean-d3-median-and-friends)
+
+Returns the median of the given *iterable* of numbers using the [R-7 method](https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample). If the iterable contains no numbers, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the median. This method ignores undefined and NaN values; this is useful for ignoring missing data.
+
+<a name="medianIndex" href="#medianIndex">#</a> d3.<b>medianIndex</b>(<i>array</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/median.js)
+
+Similar to *median*, but returns the index of the element to the left of the median.
+
+<a name="cumsum" href="#cumsum">#</a> d3.<b>cumsum</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/cumsum.js), [Examples](https://observablehq.com/@d3/d3-cumsum)
+
+Returns the cumulative sum of the given *iterable* of numbers, as a Float64Array of the same length. If the iterable contains no numbers, returns zeros. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the cumulative sum. This method ignores undefined and NaN values; this is useful for ignoring missing data.
+
+<a name="quantile" href="#quantile">#</a> d3.<b>quantile</b>(<i>iterable</i>, <i>p</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/quantile.js), [Examples](https://observablehq.com/@d3/d3-mean-d3-median-and-friends)
+
+Returns the *p*-quantile of the given *iterable* of numbers, where *p* is a number in the range [0, 1]. For example, the median can be computed using *p* = 0.5, the first quartile at *p* = 0.25, and the third quartile at *p* = 0.75. This particular implementation uses the [R-7 method](http://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population), which is the default for the R programming language and Excel. For example:
+
+```js
+var a = [0, 10, 30];
+d3.quantile(a, 0); // 0
+d3.quantile(a, 0.5); // 10
+d3.quantile(a, 1); // 30
+d3.quantile(a, 0.25); // 5
+d3.quantile(a, 0.75); // 20
+d3.quantile(a, 0.1); // 2
+```
+
+An optional *accessor* function may be specified, which is equivalent to calling *array*.map(*accessor*) before computing the quantile.
+
+<a name="quantileIndex" href="#quantileIndex">#</a> d3.<b>quantileIndex</b>(<i>array</i>, <i>p</i>[, <i>accessor</i>]) [Source](https://github.com/d3/d3-array/blob/main/src/quantile.js "Source")
+
+Similar to *quantile*, but returns the index to the left of *p*.
+
+<a name="quantileSorted" href="#quantileSorted">#</a> d3.<b>quantileSorted</b>(<i>array</i>, <i>p</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/quantile.js), [Examples](https://observablehq.com/@d3/d3-mean-d3-median-and-friends)
+
+Similar to *quantile*, but expects the input to be a **sorted** *array* of values. In contrast with *quantile*, the accessor is only called on the elements needed to compute the quantile.
+
+<a name="rank" href="#rank">#</a> d3.<b>rank</b>(<i>iterable</i>[, <i>comparator</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/rank.js), [Examples](https://observablehq.com/@d3/rank)
+<br><a name="rank" href="#rank">#</a> d3.<b>rank</b>(<i>iterable</i>[, <i>accessor</i>])
+
+Returns an array with the rank of each value in the *iterable*, *i.e.* the zero-based index of the value when the iterable is sorted. Nullish values are sorted to the end and ranked NaN. An optional *comparator* or *accessor* function may be specified; the latter is equivalent to calling *array*.map(*accessor*) before computing the ranks. If *comparator* is not specified, it defaults to [ascending](#ascending). Ties (equivalent values) all get the same rank, defined as the first time the value is found.
+
+```js
+d3.rank([{x: 1}, {}, {x: 2}, {x: 0}], d => d.x); // [1, NaN, 2, 0]
+d3.rank(["b", "c", "b", "a"]); // [1, 3, 1, 0]
+d3.rank([1, 2, 3], d3.descending); // [2, 1, 0]
+```
+
+<a name="variance" href="#variance">#</a> d3.<b>variance</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/variance.js), [Examples](https://observablehq.com/@d3/d3-mean-d3-median-and-friends)
+
+Returns an [unbiased estimator of the population variance](http://mathworld.wolfram.com/SampleVariance.html) of the given *iterable* of numbers using [Welford’s algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm). If the iterable has fewer than two numbers, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the variance. This method ignores undefined and NaN values; this is useful for ignoring missing data.
+
+<a name="deviation" href="#deviation">#</a> d3.<b>deviation</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/deviation.js), [Examples](https://observablehq.com/@d3/d3-mean-d3-median-and-friends)
+
+Returns the standard deviation, defined as the square root of the [bias-corrected variance](#variance), of the given *iterable* of numbers. If the iterable has fewer than two numbers, returns undefined. An optional *accessor* function may be specified, which is equivalent to calling Array.from before computing the standard deviation. This method ignores undefined and NaN values; this is useful for ignoring missing data.
+
+<a name="fsum" href="#fsum">#</a> d3.<b>fsum</b>([<i>values</i>][, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/fsum.js), [Examples](https://observablehq.com/@d3/d3-fsum)
+
+Returns a full precision summation of the given *values*.
+
+```js
+d3.fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]); // 1
+d3.sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]); // 0.9999999999999999
+```
+
+Although slower, d3.fsum can replace d3.sum wherever greater precision is needed. Uses <a href="#adder">d3.Adder</a>.
+
+<a name="fcumsum" href="#fcumsum">#</a> d3.<b>fcumsum</b>([<i>values</i>][, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/fsum.js), [Examples](https://observablehq.com/@d3/d3-fcumsum)
+
+Returns a full precision cumulative sum of the given *values*.
+
+```js
+d3.fcumsum([1, 1e-14, -1]); // [1, 1.00000000000001, 1e-14]
+d3.cumsum([1, 1e-14, -1]); // [1, 1.00000000000001, 9.992e-15]
+```
+
+Although slower, d3.fcumsum can replace d3.cumsum when greater precision is needed. Uses <a href="#adder">d3.Adder</a>.
+
+<a name="adder" href="#adder">#</a> new d3.<b>Adder</b>()
+
+Creates a full precision adder for [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754) floating point numbers, setting its initial value to 0.
+
+<a name="adder_add" href="#adder_add">#</a> *adder*.<b>add</b>(<i>number</i>)
+
+Adds the specified *number* to the adder’s current value and returns the adder.
+
+<a name="adder_valueOf" href="#adder_valueOf">#</a> *adder*.<b>valueOf</b>()
+
+Returns the IEEE 754 double precision representation of the adder’s current value. Most useful as the short-hand notation `+adder`.
+
+### Search
+
+Methods for searching arrays for a specific element.
+
+<a name="least" href="#least">#</a> d3.<b>least</b>(<i>iterable</i>[, <i>comparator</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/least.js), [Examples](https://observablehq.com/@d3/d3-least)
+<br><a name="least" href="#least">#</a> d3.<b>least</b>(<i>iterable</i>[, <i>accessor</i>])
+
+Returns the least element of the specified *iterable* according to the specified *comparator* or *accessor*. If the given *iterable* contains no comparable elements (*i.e.*, the comparator returns NaN when comparing each element to itself), returns undefined. If *comparator* is not specified, it defaults to [ascending](#ascending). For example:
+
+```js
+const array = [{foo: 42}, {foo: 91}];
+d3.least(array, (a, b) => a.foo - b.foo); // {foo: 42}
+d3.least(array, (a, b) => b.foo - a.foo); // {foo: 91}
+d3.least(array, a => a.foo); // {foo: 42}
+```
+
+This function is similar to [min](#min), except it allows the use of a comparator rather than an accessor.
+
+<a name="leastIndex" href="#leastIndex">#</a> d3.<b>leastIndex</b>(<i>iterable</i>[, <i>comparator</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/leastIndex.js), [Examples](https://observablehq.com/@d3/d3-least)
+<br><a name="leastIndex" href="#leastIndex">#</a> d3.<b>leastIndex</b>(<i>iterable</i>[, <i>accessor</i>])
+
+Returns the index of the least element of the specified *iterable* according to the specified *comparator* or *accessor*. If the given *iterable* contains no comparable elements (*i.e.*, the comparator returns NaN when comparing each element to itself), returns -1. If *comparator* is not specified, it defaults to [ascending](#ascending). For example:
+
+```js
+const array = [{foo: 42}, {foo: 91}];
+d3.leastIndex(array, (a, b) => a.foo - b.foo); // 0
+d3.leastIndex(array, (a, b) => b.foo - a.foo); // 1
+d3.leastIndex(array, a => a.foo); // 0
+```
+
+This function is similar to [minIndex](#minIndex), except it allows the use of a comparator rather than an accessor.
+
+<a name="greatest" href="#greatest">#</a> d3.<b>greatest</b>(<i>iterable</i>[, <i>comparator</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/greatest.js), [Examples](https://observablehq.com/@d3/d3-least)
+<br><a name="greatest" href="#greatest">#</a> d3.<b>greatest</b>(<i>iterable</i>[, <i>accessor</i>])
+
+Returns the greatest element of the specified *iterable* according to the specified *comparator* or *accessor*. If the given *iterable* contains no comparable elements (*i.e.*, the comparator returns NaN when comparing each element to itself), returns undefined. If *comparator* is not specified, it defaults to [ascending](#ascending). For example:
+
+```js
+const array = [{foo: 42}, {foo: 91}];
+d3.greatest(array, (a, b) => a.foo - b.foo); // {foo: 91}
+d3.greatest(array, (a, b) => b.foo - a.foo); // {foo: 42}
+d3.greatest(array, a => a.foo); // {foo: 91}
+```
+
+This function is similar to [max](#max), except it allows the use of a comparator rather than an accessor.
+
+<a name="greatestIndex" href="#greatestIndex">#</a> d3.<b>greatestIndex</b>(<i>iterable</i>[, <i>comparator</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/greatestIndex.js), [Examples](https://observablehq.com/@d3/d3-least)
+<br><a name="greatestIndex" href="#greatestIndex">#</a> d3.<b>greatestIndex</b>(<i>iterable</i>[, <i>accessor</i>])
+
+Returns the index of the greatest element of the specified *iterable* according to the specified *comparator* or *accessor*. If the given *iterable* contains no comparable elements (*i.e.*, the comparator returns NaN when comparing each element to itself), returns -1. If *comparator* is not specified, it defaults to [ascending](#ascending). For example:
+
+```js
+const array = [{foo: 42}, {foo: 91}];
+d3.greatestIndex(array, (a, b) => a.foo - b.foo); // 1
+d3.greatestIndex(array, (a, b) => b.foo - a.foo); // 0
+d3.greatestIndex(array, a => a.foo); // 1
+```
+
+This function is similar to [maxIndex](#maxIndex), except it allows the use of a comparator rather than an accessor.
+
+<a name="bisectLeft" href="#bisectLeft">#</a> d3.<b>bisectLeft</b>(<i>array</i>, <i>x</i>[, <i>lo</i>[, <i>hi</i>]]) · [Source](https://github.com/d3/d3-array/blob/main/src/bisect.js)
+
+Returns the insertion point for *x* in *array* to maintain sorted order. The arguments *lo* and *hi* may be used to specify a subset of the array which should be considered; by default the entire array is used. If *x* is already present in *array*, the insertion point will be before (to the left of) any existing entries. The return value is suitable for use as the first argument to [splice](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) assuming that *array* is already sorted. The returned insertion point *i* partitions the *array* into two halves so that all *v* < *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* >= *x* for *v* in *array*.slice(*i*, *hi*) for the right side.
+
+<a name="bisect" href="#bisect">#</a> d3.<b>bisect</b>(<i>array</i>, <i>x</i>[, <i>lo</i>[, <i>hi</i>]]) · [Source](https://github.com/d3/d3-array/blob/main/src/bisect.js), [Examples](https://observablehq.com/@d3/d3-bisect)
+<br><a name="bisectRight" href="#bisectRight">#</a> d3.<b>bisectRight</b>(<i>array</i>, <i>x</i>[, <i>lo</i>[, <i>hi</i>]])
+
+Similar to [bisectLeft](#bisectLeft), but returns an insertion point which comes after (to the right of) any existing entries of *x* in *array*. The returned insertion point *i* partitions the *array* into two halves so that all *v* <= *x* for *v* in *array*.slice(*lo*, *i*) for the left side and all *v* > *x* for *v* in *array*.slice(*i*, *hi*) for the right side.
+
+<a name="bisectCenter" href="#bisectCenter">#</a> d3.<b>bisectCenter</b>(<i>array</i>, <i>x</i>[, <i>lo</i>[, <i>hi</i>]]) · [Source](https://github.com/d3/d3-array/blob/main/src/bisect.js), [Examples](https://observablehq.com/@d3/multi-line-chart)
+
+Returns the index of the value closest to *x* in the given *array* of numbers. The arguments *lo* (inclusive) and *hi* (exclusive) may be used to specify a subset of the array which should be considered; by default the entire array is used.
+
+See [*bisector*.center](#bisector_center).
+
+<a name="bisector" href="#bisector">#</a> d3.<b>bisector</b>(<i>accessor</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/bisector.js)
+<br><a name="bisector" href="#bisector">#</a> d3.<b>bisector</b>(<i>comparator</i>)
+
+Returns a new bisector using the specified *accessor* or *comparator* function. This method can be used to bisect arrays of objects instead of being limited to simple arrays of primitives. For example, given the following array of objects:
+
+```js
+var data = [
+  {date: new Date(2011, 1, 1), value: 0.5},
+  {date: new Date(2011, 2, 1), value: 0.6},
+  {date: new Date(2011, 3, 1), value: 0.7},
+  {date: new Date(2011, 4, 1), value: 0.8}
+];
+```
+
+A suitable bisect function could be constructed as:
+
+```js
+var bisectDate = d3.bisector(function(d) { return d.date; }).right;
+```
+
+This is equivalent to specifying a comparator:
+
+```js
+var bisectDate = d3.bisector(function(d, x) { return d.date - x; }).right;
+```
+
+And then applied as *bisectDate*(*array*, *date*), returning an index. Note that the comparator is always passed the search value *x* as the second argument. Use a comparator rather than an accessor if you want values to be sorted in an order different than natural order, such as in descending rather than ascending order.
+
+<a name="bisector_left" href="#bisector_left">#</a> <i>bisector</i>.<b>left</b>(<i>array</i>, <i>x</i>[, <i>lo</i>[, <i>hi</i>]]) · [Source](https://github.com/d3/d3-array/blob/main/src/bisector.js)
+
+Equivalent to [bisectLeft](#bisectLeft), but uses this bisector’s associated comparator.
+
+<a name="bisector_right" href="#bisector_right">#</a> <i>bisector</i>.<b>right</b>(<i>array</i>, <i>x</i>[, <i>lo</i>[, <i>hi</i>]]) · [Source](https://github.com/d3/d3-array/blob/main/src/bisector.js)
+
+Equivalent to [bisectRight](#bisectRight), but uses this bisector’s associated comparator.
+
+<a name="bisector_center" href="#bisector_center">#</a> <i>bisector</i>.<b>center</b>(<i>array</i>, <i>x</i>[, <i>lo</i>[, <i>hi</i>]]) · [Source](https://github.com/d3/d3-array/blob/main/src/bisector.js)
+
+Returns the index of the closest value to *x* in the given sorted *array*. This expects that the bisector’s associated accessor returns a quantitative value, or that the bisector’s associated comparator returns a signed distance; otherwise, this method is equivalent to *bisector*.left.
+
+<a name="quickselect" href="#quickselect">#</a> d3.<b>quickselect</b>(<i>array</i>, <i>k</i>, <i>left</i> = 0, <i>right</i> = <i>array</i>.length - 1, <i>compare</i> = ascending) · [Source](https://github.com/d3/d3-array/blob/main/src/quickselect.js), [Examples](https://observablehq.com/@d3/d3-quickselect)
+
+See [mourner/quickselect](https://github.com/mourner/quickselect/blob/master/README.md).
+
+<a name="ascending" href="#ascending">#</a> d3.<b>ascending</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/ascending.js), [Examples](https://observablehq.com/@d3/d3-ascending)
+
+Returns -1 if *a* is less than *b*, or 1 if *a* is greater than *b*, or 0. This is the comparator function for natural order, and can be used in conjunction with the built-in [*array*.sort](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) method to arrange elements in ascending order. It is implemented as:
+
+```js
+function ascending(a, b) {
+  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+}
+```
+
+Note that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.
+
+<a name="descending" href="#descending">#</a> d3.<b>descending</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/descending.js), [Examples](https://observablehq.com/@d3/d3-ascending)
+
+Returns -1 if *a* is greater than *b*, or 1 if *a* is less than *b*, or 0. This is the comparator function for reverse natural order, and can be used in conjunction with the built-in array sort method to arrange elements in descending order. It is implemented as:
+
+```js
+function descending(a, b) {
+  return a == null || b == null ? NaN : b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+}
+```
+
+Note that if no comparator function is specified to the built-in sort method, the default order is lexicographic (alphabetical), not natural! This can lead to surprising behavior when sorting an array of numbers.
+
+### Transformations
+
+Methods for transforming arrays and for generating new arrays.
+
+<a name="group" href="#group">#</a> d3.<b>group</b>(<i>iterable</i>, <i>...keys</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/group.js), [Examples](https://observablehq.com/@d3/d3-group-d3-rollup)
+
+Groups the specified *iterable* of values into an [InternMap](#InternMap) from *key* to array of value. For example, given some data:
+
+```js
+data = [
+  {name: "jim",   amount: "34.0",   date: "11/12/2015"},
+  {name: "carl",  amount: "120.11", date: "11/12/2015"},
+  {name: "stacy", amount: "12.01",  date: "01/04/2016"},
+  {name: "stacy", amount: "34.05",  date: "01/04/2016"}
+]
+```
+
+To group the data by name:
+
+```js
+d3.group(data, d => d.name)
+```
+
+This produces:
+
+```js
+Map(3) {
+  "jim" => Array(1)
+  "carl" => Array(1)
+  "stacy" => Array(2)
+}
+```
+
+If more than one *key* is specified, a nested InternMap is returned. For example:
+
+```js
+d3.group(data, d => d.name, d => d.date)
+```
+
+This produces:
+
+```js
+Map(3) {
+  "jim" => Map(1) {
+    "11/12/2015" => Array(1)
+  }
+  "carl" => Map(1) {
+    "11/12/2015" => Array(1)
+  }
+  "stacy" => Map(1) {
+    "01/04/2016" => Array(2)
+  }
+}
+```
+
+To convert a Map to an Array, use [Array.from](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from). For example:
+
+```js
+Array.from(d3.group(data, d => d.name))
+```
+
+This produces:
+
+```js
+[
+  ["jim", Array(1)],
+  ["carl", Array(1)],
+  ["stacy", Array(2)]
+]
+```
+
+You can also simultaneously convert the [*key*, *value*] to some other representation by passing a map function to Array.from:
+
+```js
+Array.from(d3.group(data, d => d.name), ([key, value]) => ({key, value}))
+```
+
+This produces:
+
+```js
+[
+  {key: "jim", value: Array(1)},
+  {key: "carl", value: Array(1)},
+  {key: "stacy", value: Array(2)}
+]
+```
+
+[*selection*.data](https://github.com/d3/d3-selection/blob/main/README.md#selection_data) accepts iterables directly, meaning that you can use a Map (or Set or other iterable) to perform a data join without first needing to convert to an array.
+
+<a name="groups" href="#groups">#</a> d3.<b>groups</b>(<i>iterable</i>, <i>...keys</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/group.js), [Examples](https://observablehq.com/@d3/d3-group-d3-rollup)
+
+Equivalent to [group](#group), but returns nested arrays instead of nested maps.
+
+<a name="flatGroup" href="#flatGroup">#</a> d3.<b>flatGroup</b>(<i>iterable</i>, <i>...keys</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/group.js), [Examples](https://observablehq.com/@d3/d3-flatgroup)
+
+Equivalent to [group](#group), but returns a flat array of [*key0*, *key1*, …, *values*] instead of nested maps.
+
+<a name="index" href="#index">#</a> d3.<b>index</b>(<i>iterable</i>, <i>...keys</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/group.js), [Examples](https://observablehq.com/@d3/d3-group)
+
+Equivalent to [group](#group) but returns a unique value per compound key instead of an array, throwing if the key is not unique.
+
+For example, given the data defined above,
+
+```js
+d3.index(data, d => d.amount)
+```
+
+returns
+
+```js
+Map(4) {
+  "34.0" => Object {name: "jim", amount: "34.0", date: "11/12/2015"}
+  "120.11" => Object {name: "carl", amount: "120.11", date: "11/12/2015"}
+  "12.01" => Object {name: "stacy", amount: "12.01", date: "01/04/2016"}
+  "34.05" => Object {name: "stacy", amount: "34.05", date: "01/04/2016"}
+}
+```
+
+On the other hand,
+
+```js
+d3.index(data, d => d.name)
+```
+
+throws an error because two objects share the same name.
+
+<a name="indexes" href="#indexes">#</a> d3.<b>indexes</b>(<i>iterable</i>, <i>...keys</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/group.js), [Examples](https://observablehq.com/@d3/d3-group)
+
+Equivalent to [index](#index), but returns nested arrays instead of nested maps.
+
+<a name="rollup" href="#rollup">#</a> d3.<b>rollup</b>(<i>iterable</i>, <i>reduce</i>, <i>...keys</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/group.js), [Examples](https://observablehq.com/@d3/d3-group-d3-rollup)
+
+[Groups](#group) and reduces the specified *iterable* of values into an InternMap from *key* to value. For example, given some data:
+
+```js
+data = [
+  {name: "jim",   amount: "34.0",   date: "11/12/2015"},
+  {name: "carl",  amount: "120.11", date: "11/12/2015"},
+  {name: "stacy", amount: "12.01",  date: "01/04/2016"},
+  {name: "stacy", amount: "34.05",  date: "01/04/2016"}
+]
+```
+
+To count the number of elements by name:
+
+```js
+d3.rollup(data, v => v.length, d => d.name)
+```
+
+This produces:
+
+```js
+Map(3) {
+  "jim" => 1
+  "carl" => 1
+  "stacy" => 2
+}
+```
+
+If more than one *key* is specified, a nested Map is returned. For example:
+
+```js
+d3.rollup(data, v => v.length, d => d.name, d => d.date)
+```
+
+This produces:
+
+```js
+Map(3) {
+  "jim" => Map(1) {
+    "11/12/2015" => 1
+  }
+  "carl" => Map(1) {
+    "11/12/2015" => 1
+  }
+  "stacy" => Map(1) {
+    "01/04/2016" => 2
+  }
+}
+```
+
+To convert a Map to an Array, use [Array.from](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from). See [d3.group](#group) for examples.
+
+<a name="rollups" href="#rollups">#</a> d3.<b>rollups</b>(<i>iterable</i>, <i>reduce</i>, <i>...keys</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/group.js), [Examples](https://observablehq.com/@d3/d3-group-d3-rollup)
+
+Equivalent to [rollup](#rollup), but returns nested arrays instead of nested maps.
+
+<a name="flatRollup" href="#flatRollup">#</a> d3.<b>flatRollup</b>(<i>iterable</i>, <i>reduce</i>, <i>...keys</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/group.js), [Examples](https://observablehq.com/@d3/d3-flatgroup)
+
+Equivalent to [rollup](#rollup), but returns a flat array of [*key0*, *key1*, …, *value*] instead of nested maps.
+
+<a name="groupSort" href="#groupSort">#</a> d3.<b>groupSort</b>(<i>iterable</i>, <i>comparator</i>, <i>key</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/groupSort.js), [Examples](https://observablehq.com/@d3/d3-groupsort)
+<br><a name="groupSort" href="#groupSort">#</a> d3.<b>groupSort</b>(<i>iterable</i>, <i>accessor</i>, <i>key</i>)
+
+Groups the specified *iterable* of elements according to the specified *key* function, sorts the groups according to the specified *comparator*, and then returns an array of keys in sorted order. For example, if you had a table of barley yields for different varieties, sites, and years, to sort the barley varieties by ascending median yield:
+
+```js
+d3.groupSort(barley, g => d3.median(g, d => d.yield), d => d.variety)
+```
+
+For descending order, negate the group value:
+
+```js
+d3.groupSort(barley, g => -d3.median(g, d => d.yield), d => d.variety)
+```
+
+If a *comparator* is passed instead of an *accessor* (i.e., if the second argument is a function that takes exactly two arguments), it will be asked to compare two groups *a* and *b* and should return a negative value if *a* should be before *b*, a positive value if *a* should be after *b*, or zero for a partial ordering.
+
+<a name="count" href="#count">#</a> d3.<b>count</b>(<i>iterable</i>[, <i>accessor</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/count.js), [Examples](https://observablehq.com/@d3/d3-count)
+
+Returns the number of valid number values (*i.e.*, not null, NaN, or undefined) in the specified *iterable*; accepts an accessor.
+
+For example:
+
+```js
+d3.count([{n: "Alice", age: NaN}, {n: "Bob", age: 18}, {n: "Other"}], d => d.age) // 1
+```
+<a name="cross" href="#cross">#</a> d3.<b>cross</b>(<i>...iterables</i>[, <i>reducer</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/cross.js), [Examples](https://observablehq.com/@d3/d3-cross)
+
+Returns the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) of the specified *iterables*. For example, if two iterables *a* and *b* are specified, for each element *i* in the iterable *a* and each element *j* in the iterable *b*, in order, invokes the specified *reducer* function passing the element *i* and element *j*. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:
+
+```js
+function pair(a, b) {
+  return [a, b];
+}
+```
+
+For example:
+
+```js
+d3.cross([1, 2], ["x", "y"]); // returns [[1, "x"], [1, "y"], [2, "x"], [2, "y"]]
+d3.cross([1, 2], ["x", "y"], (a, b) => a + b); // returns ["1x", "1y", "2x", "2y"]
+```
+
+<a name="merge" href="#merge">#</a> d3.<b>merge</b>(<i>iterables</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/merge.js), [Examples](https://observablehq.com/@d3/d3-merge)
+
+Merges the specified iterable of *iterables* into a single array. This method is similar to the built-in array concat method; the only difference is that it is more convenient when you have an array of arrays.
+
+```js
+d3.merge([[1], [2, 3]]); // returns [1, 2, 3]
+```
+
+<a name="pairs" href="#pairs">#</a> d3.<b>pairs</b>(<i>iterable</i>[, <i>reducer</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/pairs.js), [Examples](https://observablehq.com/@d3/d3-pairs)
+
+For each adjacent pair of elements in the specified *iterable*, in order, invokes the specified *reducer* function passing the element *i* and element *i* - 1. If a *reducer* is not specified, it defaults to a function which creates a two-element array for each pair:
+
+```js
+function pair(a, b) {
+  return [a, b];
+}
+```
+
+For example:
+
+```js
+d3.pairs([1, 2, 3, 4]); // returns [[1, 2], [2, 3], [3, 4]]
+d3.pairs([1, 2, 3, 4], (a, b) => b - a); // returns [1, 1, 1];
+```
+
+If the specified iterable has fewer than two elements, returns the empty array.
+
+<a name="permute" href="#permute">#</a> d3.<b>permute</b>(<i>source</i>, <i>keys</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/permute.js), [Examples](https://observablehq.com/@d3/d3-permute)
+
+Returns a permutation of the specified *source* object (or array) using the specified iterable of *keys*. The returned array contains the corresponding property of the source object for each key in *keys*, in order. For example:
+
+```js
+permute(["a", "b", "c"], [1, 2, 0]); // returns ["b", "c", "a"]
+```
+
+It is acceptable to have more keys than source elements, and for keys to be duplicated or omitted.
+
+This method can also be used to extract the values from an object into an array with a stable order. Extracting keyed values in order can be useful for generating data arrays in nested selections. For example:
+
+```js
+let object = {yield: 27, variety: "Manchuria", year: 1931, site: "University Farm"};
+let fields = ["site", "variety", "yield"];
+
+d3.permute(object, fields); // returns ["University Farm", "Manchuria", 27]
+```
+
+<a name="shuffle" href="#shuffle">#</a> d3.<b>shuffle</b>(<i>array</i>[, <i>start</i>[, <i>stop</i>]]) · [Source](https://github.com/d3/d3-array/blob/main/src/shuffle.js), [Examples](https://observablehq.com/@d3/d3-shuffle)
+
+Randomizes the order of the specified *array* in-place using the [Fisher–Yates shuffle](https://bost.ocks.org/mike/shuffle/) and returns the *array*. If *start* is specified, it is the starting index (inclusive) of the *array* to shuffle; if *start* is not specified, it defaults to zero. If *stop* is specified, it is the ending index (exclusive) of the *array* to shuffle; if *stop* is not specified, it defaults to *array*.length. For example, to shuffle the first ten elements of the *array*: shuffle(*array*, 0, 10).
+
+<a name="shuffler" href="#shuffler">#</a> d3.<b>shuffler</b>(<i>random</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/shuffle.js)
+
+Returns a [shuffle function](#shuffle) given the specified random source. For example, using [d3.randomLcg](https://github.com/d3/d3-random/blob/main/README.md#randomLcg):
+
+```js
+const random = d3.randomLcg(0.9051667019185816);
+const shuffle = d3.shuffler(random);
+
+shuffle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); // returns [7, 4, 5, 3, 9, 0, 6, 1, 2, 8]
+```
+
+<a name="ticks" href="#ticks">#</a> d3.<b>ticks</b>(<i>start</i>, <i>stop</i>, <i>count</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/ticks.js), [Examples](https://observablehq.com/@d3/d3-ticks)
+
+Returns an array of approximately *count* + 1 uniformly-spaced, nicely-rounded values between *start* and *stop* (inclusive). Each value is a power of ten multiplied by 1, 2 or 5. See also [d3.tickIncrement](#tickIncrement), [d3.tickStep](#tickStep) and [*linear*.ticks](https://github.com/d3/d3-scale/blob/main/README.md#linear_ticks).
+
+Ticks are inclusive in the sense that they may include the specified *start* and *stop* values if (and only if) they are exact, nicely-rounded values consistent with the inferred [step](#tickStep). More formally, each returned tick *t* satisfies *start* ≤ *t* and *t* ≤ *stop*.
+
+<a name="tickIncrement" href="#tickIncrement">#</a> d3.<b>tickIncrement</b>(<i>start</i>, <i>stop</i>, <i>count</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/ticks.js), [Examples](https://observablehq.com/@d3/d3-ticks)
+
+Like [d3.tickStep](#tickStep), except requires that *start* is always less than or equal to *stop*, and if the tick step for the given *start*, *stop* and *count* would be less than one, returns the negative inverse tick step instead. This method is always guaranteed to return an integer, and is used by [d3.ticks](#ticks) to guarantee that the returned tick values are represented as precisely as possible in IEEE 754 floating point.
+
+<a name="tickStep" href="#tickStep">#</a> d3.<b>tickStep</b>(<i>start</i>, <i>stop</i>, <i>count</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/ticks.js), [Examples](https://observablehq.com/@d3/d3-ticks)
+
+Returns the difference between adjacent tick values if the same arguments were passed to [d3.ticks](#ticks): a nicely-rounded value that is a power of ten multiplied by 1, 2 or 5. Note that due to the limited precision of IEEE 754 floating point, the returned value may not be exact decimals; use [d3-format](https://github.com/d3/d3-format) to format numbers for human consumption.
+
+<a name="nice" href="#nice">#</a> d3.<b>nice</b>(<i>start</i>, <i>stop</i>, <i>count</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/nice.js)
+
+Returns a new interval [*niceStart*, *niceStop*] covering the given interval [*start*, *stop*] and where *niceStart* and *niceStop* are guaranteed to align with the corresponding [tick step](#tickStep). Like [d3.tickIncrement](#tickIncrement), this requires that *start* is less than or equal to *stop*.
+
+<a name="range" href="#range">#</a> d3.<b>range</b>([<i>start</i>, ]<i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/range.js), [Examples](https://observablehq.com/@d3/d3-range)
+
+Returns an array containing an arithmetic progression, similar to the Python built-in [range](http://docs.python.org/library/functions.html#range). This method is often used to iterate over a sequence of uniformly-spaced numeric values, such as the indexes of an array or the ticks of a linear scale. (See also [d3.ticks](#ticks) for nicely-rounded values.)
+
+If *step* is omitted, it defaults to 1. If *start* is omitted, it defaults to 0. The *stop* value is exclusive; it is not included in the result. If *step* is positive, the last element is the largest *start* + *i* \* *step* less than *stop*; if *step* is negative, the last element is the smallest *start* + *i* \* *step* greater than *stop*. If the returned array would contain an infinite number of values, an empty range is returned.
+
+The arguments are not required to be integers; however, the results are more predictable if they are. The values in the returned array are defined as *start* + *i* \* *step*, where *i* is an integer from zero to one minus the total number of elements in the returned array. For example:
+
+```js
+d3.range(0, 1, 0.2) // [0, 0.2, 0.4, 0.6000000000000001, 0.8]
+```
+
+This unexpected behavior is due to IEEE 754 double-precision floating point, which defines 0.2 * 3 = 0.6000000000000001. Use [d3-format](https://github.com/d3/d3-format) to format numbers for human consumption with appropriate rounding; see also [linear.tickFormat](https://github.com/d3/d3-scale/blob/main/README.md#linear_tickFormat) in [d3-scale](https://github.com/d3/d3-scale).
+
+Likewise, if the returned array should have a specific length, consider using [array.map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map) on an integer range. For example:
+
+```js
+d3.range(0, 1, 1 / 49); // BAD: returns 50 elements!
+d3.range(49).map(function(d) { return d / 49; }); // GOOD: returns 49 elements.
+```
+
+<a name="transpose" href="#transpose">#</a> d3.<b>transpose</b>(<i>matrix</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/transpose.js), [Examples](https://observablehq.com/@d3/d3-transpose)
+
+Uses the [zip](#zip) operator as a two-dimensional [matrix transpose](http://en.wikipedia.org/wiki/Transpose).
+
+<a name="zip" href="#zip">#</a> d3.<b>zip</b>(<i>arrays…</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/zip.js), [Examples](https://observablehq.com/@d3/d3-transpose)
+
+Returns an array of arrays, where the *i*th array contains the *i*th element from each of the argument *arrays*. The returned array is truncated in length to the shortest array in *arrays*. If *arrays* contains only a single array, the returned array contains one-element arrays. With no arguments, the returned array is empty.
+
+```js
+d3.zip([1, 2], [3, 4]); // returns [[1, 3], [2, 4]]
+```
+
+#### Blur
+
+<a name="blur" href="#blur">#</a> d3.<b>blur</b>(*data*, *radius*) · [Source](https://github.com/d3/d3-array/blob/main/src/blur.js), [Examples](https://observablehq.com/@d3/d3-blur)
+
+Blurs an array of *data* in-place by applying three iterations of a moving average transform, for a fast approximation of a gaussian kernel of the given *radius*, a non-negative number, and returns the array.
+
+```js
+const randomWalk = d3.cumsum({length: 1000}, () => Math.random() - 0.5);
+blur(randomWalk, 5);
+```
+
+Copy the data if you don’t want to smooth it in-place:
+```js
+const smoothed = blur(randomWalk.slice(), 5);
+```
+
+<a name="blur2" href="#blur2">#</a> d3.<b>blur2</b>({*data*, *width*[, *height*]}, *rx*[, *ry*]) · [Source](https://github.com/d3/d3-array/blob/main/src/blur.js), [Examples](https://observablehq.com/@d3/d3-blur)
+
+Blurs a matrix of the given *width* and *height* in-place, by applying an horizontal blur of radius *rx* and a vertical blur or radius *ry* (which defaults to *rx*). The matrix *data* is stored in a flat array, used to determine the *height* if it is not specified. Returns the blurred {data, width, height}.
+
+```js
+data = [
+  1, 0, 0,
+  0, 0, 0,
+  0, 0, 1
+];
+blur2({data, width: 3}, 1);
+```
+
+<a name="blurImage" href="#blurImage">#</a> d3.<b>blurImage</b>(*imageData*, *rx*[, *ry*]) · [Source](https://github.com/d3/d3-array/blob/main/src/blur.js), [Examples](https://observablehq.com/@d3/d3-blurimage)
+
+Blurs an [ImageData](https://developer.mozilla.org/en-US/docs/Web/API/ImageData) structure in-place, blurring each of the RGBA layers independently by applying an horizontal blur of radius *rx* and a vertical blur or radius *ry* (which defaults to *rx*). Returns the blurred ImageData.
+
+```js
+const imData = context.getImageData(0, 0, width, height);
+blurImage(imData, 5);
+```
+
+### Iterables
+
+These are equivalent to built-in array methods, but work with any iterable including Map, Set, and Generator.
+
+<a name="every" href="#every">#</a> d3.<b>every</b>(<i>iterable</i>, <i>test</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/every.js)
+
+Returns true if the given *test* function returns true for every value in the given *iterable*. This method returns as soon as *test* returns a non-truthy value or all values are iterated over. Equivalent to [*array*.every](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every):
+
+```js
+d3.every(new Set([1, 3, 5, 7]), x => x & 1) // true
+```
+
+<a name="some" href="#some">#</a> d3.<b>some</b>(<i>iterable</i>, <i>test</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/some.js)
+
+Returns true if the given *test* function returns true for any value in the given *iterable*. This method returns as soon as *test* returns a truthy value or all values are iterated over. Equivalent to [*array*.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some):
+
+```js
+d3.some(new Set([0, 2, 3, 4]), x => x & 1) // true
+```
+
+<a name="filter" href="#filter">#</a> d3.<b>filter</b>(<i>iterable</i>, <i>test</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/filter.js)
+
+Returns a new array containing the values from *iterable*, in order, for which the given *test* function returns true. Equivalent to [*array*.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter):
+
+```js
+d3.filter(new Set([0, 2, 3, 4]), x => x & 1) // [3]
+```
+
+<a name="map" href="#map">#</a> d3.<b>map</b>(<i>iterable</i>, <i>mapper</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/map.js)
+
+Returns a new array containing the mapped values from *iterable*, in order, as defined by given *mapper* function. Equivalent to [*array*.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) and [Array.from](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from):
+
+```js
+d3.map(new Set([0, 2, 3, 4]), x => x & 1) // [0, 0, 1, 0]
+```
+
+<a name="reduce" href="#reduce">#</a> d3.<b>reduce</b>(<i>iterable</i>, <i>reducer</i>[, <i>initialValue</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/reduce.js)
+
+Returns the reduced value defined by given *reducer* function, which is repeatedly invoked for each value in *iterable*, being passed the current reduced value and the next value. Equivalent to [*array*.reduce](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce):
+
+```js
+d3.reduce(new Set([0, 2, 3, 4]), (p, v) => p + v, 0) // 9
+```
+
+<a name="reverse" href="#reverse">#</a> d3.<b>reverse</b>(<i>iterable</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/reverse.js)
+
+Returns an array containing the values in the given *iterable* in reverse order. Equivalent to [*array*.reverse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse), except that it does not mutate the given *iterable*:
+
+```js
+d3.reverse(new Set([0, 2, 3, 1])) // [1, 3, 2, 0]
+```
+
+<a name="sort" href="#sort">#</a> d3.<b>sort</b>(<i>iterable</i>, <i>comparator</i> = d3.ascending) · [Source](https://github.com/d3/d3-array/blob/main/src/sort.js)
+<br><a name="sort" href="#sort">#</a> d3.<b>sort</b>(<i>iterable</i>, ...<i>accessors</i>)
+
+Returns an array containing the values in the given *iterable* in the sorted order defined by the given *comparator* or *accessor* function. If *comparator* is not specified, it defaults to [d3.ascending](#ascending). Equivalent to [*array*.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort), except that it does not mutate the given *iterable*, and the comparator defaults to natural order instead of lexicographic order:
+
+```js
+d3.sort(new Set([0, 2, 3, 1])) // [0, 1, 2, 3]
+```
+
+If an *accessor* (a function that does not take exactly two arguments) is specified,
+
+```js
+d3.sort(data, d => d.value)
+```
+
+it is equivalent to a *comparator* using [natural order](#ascending):
+
+```js
+d3.sort(data, (a, b) => d3.ascending(a.value, b.value))
+```
+
+The *accessor* is only invoked once per element, and thus the returned sorted order is consistent even if the accessor is nondeterministic.
+
+Multiple accessors may be specified to break ties:
+
+```js
+d3.sort(points, ({x}) => x, ({y}) => y)
+```
+
+This is equivalent to:
+
+```js
+d3.sort(data, (a, b) => d3.ascending(a.x, b.x) || d3.ascending(a.y, b.y))
+```
+
+### Sets
+
+This methods implement basic set operations for any iterable.
+
+<a name="difference" href="#difference">#</a> d3.<b>difference</b>(<i>iterable</i>, ...<i>others</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/difference.js)
+
+Returns a new InternSet containing every value in *iterable* that is not in any of the *others* iterables.
+
+```js
+d3.difference([0, 1, 2, 0], [1]) // Set {0, 2}
+```
+
+<a name="union" href="#union">#</a> d3.<b>union</b>(...<i>iterables</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/union.js)
+
+Returns a new InternSet containing every (distinct) value that appears in any of the given *iterables*. The order of values in the returned set is based on their first occurrence in the given *iterables*.
+
+```js
+d3.union([0, 2, 1, 0], [1, 3]) // Set {0, 2, 1, 3}
+```
+
+<a name="intersection" href="#intersection">#</a> d3.<b>intersection</b>(...<i>iterables</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/intersection.js)
+
+Returns a new InternSet containing every (distinct) value that appears in all of the given *iterables*. The order of values in the returned set is based on their first occurrence in the given *iterables*.
+
+```js
+d3.intersection([0, 2, 1, 0], [1, 3]) // Set {1}
+```
+
+<a name="superset" href="#superset">#</a> d3.<b>superset</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/superset.js)
+
+Returns true if *a* is a superset of *b*: if every value in the given iterable *b* is also in the given iterable *a*.
+
+```js
+d3.superset([0, 2, 1, 3, 0], [1, 3]) // true
+```
+
+<a name="subset" href="#subset">#</a> d3.<b>subset</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/subset.js)
+
+Returns true if *a* is a subset of *b*: if every value in the given iterable *a* is also in the given iterable *b*.
+
+```js
+d3.subset([1, 3], [0, 2, 1, 3, 0]) // true
+```
+
+<a name="disjoint" href="#disjoint">#</a> d3.<b>disjoint</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/disjoint.js)
+
+Returns true if *a* and *b* are disjoint: if *a* and *b* contain no shared value.
+
+```js
+d3.disjoint([1, 3], [2, 4]) // true
+```
+
+### Bins
+
+[<img src="https://raw.githubusercontent.com/d3/d3-array/main/img/histogram.png" width="480" height="250" alt="Histogram">](http://bl.ocks.org/mbostock/3048450)
+
+Binning groups discrete samples into a smaller number of consecutive, non-overlapping intervals. They are often used to visualize the distribution of numerical data as histograms.
+
+<a name="bin" href="#bin">#</a> d3.<b>bin</b>() · [Source](https://github.com/d3/d3-array/blob/main/src/bin.js), [Examples](https://observablehq.com/@d3/d3-bin)
+
+Constructs a new bin generator with the default settings.
+
+<a name="_bin" href="#_bin">#</a> <i>bin</i>(<i>data</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/bin.js), [Examples](https://observablehq.com/@d3/d3-bin)
+
+Bins the given iterable of *data* samples. Returns an array of bins, where each bin is an array containing the associated elements from the input *data*. Thus, the `length` of the bin is the number of elements in that bin. Each bin has two additional attributes:
+
+* `x0` - the lower bound of the bin (inclusive).
+* `x1` - the upper bound of the bin (exclusive, except for the last bin).
+
+Any null or non-comparable values in the given *data*, or those outside the [domain](#bin_domain), are ignored.
+
+<a name="bin_value" href="#bin_value">#</a> <i>bin</i>.<b>value</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/bin.js), [Examples](https://observablehq.com/@d3/d3-bin)
+
+If *value* is specified, sets the value accessor to the specified function or constant and returns this bin generator. If *value* is not specified, returns the current value accessor, which defaults to the identity function.
+
+When bins are [generated](#_bin), the value accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default value accessor assumes that the input data are orderable (comparable), such as numbers or dates. If your data are not, then you should specify an accessor that returns the corresponding orderable value for a given datum.
+
+This is similar to mapping your data to values before invoking the bin generator, but has the benefit that the input data remains associated with the returned bins, thereby making it easier to access other fields of the data.
+
+<a name="bin_domain" href="#bin_domain">#</a> <i>bin</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/bin.js), [Examples](https://observablehq.com/@d3/d3-bin)
+
+If *domain* is specified, sets the domain accessor to the specified function or array and returns this bin generator. If *domain* is not specified, returns the current domain accessor, which defaults to [extent](#extent). The bin domain is defined as an array [*min*, *max*], where *min* is the minimum observable value and *max* is the maximum observable value; both values are inclusive. Any value outside of this domain will be ignored when the bins are [generated](#_bin).
+
+For example, if you are using the bin generator in conjunction with a [linear scale](https://github.com/d3/d3-scale/blob/main/README.md#linear-scales) `x`, you might say:
+
+```js
+var bin = d3.bin()
+    .domain(x.domain())
+    .thresholds(x.ticks(20));
+```
+
+You can then compute the bins from an array of numbers like so:
+
+```js
+var bins = bin(numbers);
+```
+
+If the default [extent](#extent) domain is used and the [thresholds](#bin_thresholds) are specified as a count (rather than explicit values), then the computed domain will be [niced](#nice) such that all bins are uniform width.
+
+Note that the domain accessor is invoked on the materialized array of [values](#bin_value), not on the input data array.
+
+<a name="bin_thresholds" href="#bin_thresholds">#</a> <i>bin</i>.<b>thresholds</b>([<i>count</i>]) · [Source](https://github.com/d3/d3-array/blob/main/src/bin.js), [Examples](https://observablehq.com/@d3/d3-bin)
+<br><a name="bin_thresholds" href="#bin_thresholds">#</a> <i>bin</i>.<b>thresholds</b>([<i>thresholds</i>])
+
+If *thresholds* is specified, sets the [threshold generator](#bin-thresholds) to the specified function or array and returns this bin generator. If *thresholds* is not specified, returns the current threshold generator, which by default implements [Sturges’ formula](#thresholdSturges). (Thus by default, the values to be binned must be numbers!) Thresholds are defined as an array of values [*x0*, *x1*, …]. Any value less than *x0* will be placed in the first bin; any value greater than or equal to *x0* but less than *x1* will be placed in the second bin; and so on. Thus, the [generated bins](#_bin) will have *thresholds*.length + 1 bins. See [bin thresholds](#bin-thresholds) for more information.
+
+Any threshold values outside the [domain](#bin_domain) are ignored. The first *bin*.x0 is always equal to the minimum domain value, and the last *bin*.x1 is always equal to the maximum domain value.
+
+If a *count* is specified instead of an array of *thresholds*, then the [domain](#bin_domain) will be uniformly divided into approximately *count* bins; see [ticks](#ticks).
+
+#### Bin Thresholds
+
+These functions are typically not used directly; instead, pass them to [*bin*.thresholds](#bin_thresholds).
+
+<a name="thresholdFreedmanDiaconis" href="#thresholdFreedmanDiaconis">#</a> d3.<b>thresholdFreedmanDiaconis</b>(<i>values</i>, <i>min</i>, <i>max</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/threshold/freedmanDiaconis.js), [Examples](https://observablehq.com/@d3/d3-bin)
+
+Returns the number of bins according to the [Freedman–Diaconis rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.
+
+<a name="thresholdScott" href="#thresholdScott">#</a> d3.<b>thresholdScott</b>(<i>values</i>, <i>min</i>, <i>max</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/threshold/scott.js), [Examples](https://observablehq.com/@d3/d3-bin)
+
+Returns the number of bins according to [Scott’s normal reference rule](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.
+
+<a name="thresholdSturges" href="#thresholdSturges">#</a> d3.<b>thresholdSturges</b>(<i>values</i>) · [Source](https://github.com/d3/d3-array/blob/main/src/threshold/sturges.js), [Examples](https://observablehq.com/@d3/d3-bin)
+
+Returns the number of bins according to [Sturges’ formula](https://en.wikipedia.org/wiki/Histogram#Mathematical_definition); the input *values* must be numbers.
+
+You may also implement your own threshold generator taking three arguments: the array of input [*values*](#bin_value) derived from the data, and the [observable domain](#bin_domain) represented as *min* and *max*. The generator may then return either the array of numeric thresholds or the *count* of bins; in the latter case the domain is divided uniformly into approximately *count* bins; see [ticks](#ticks).
+
+For instance, when binning date values, you might want to use the ticks from a time scale ([Example](https://observablehq.com/@d3/d3-bin-time-thresholds)).
+
+### Interning
+
+<a name="InternMap" href="#InternMap">#</a> new d3.<b>InternMap</b>([<i>iterable</i>][, <i>key</i>]) · [Source](https://github.com/mbostock/internmap/blob/main/src/index.js), [Examples](https://observablehq.com/d/d4c5f6ad343866b9)
+<br><a name="InternSet" href="#InternSet">#</a> new d3.<b>InternSet</b>([<i>iterable</i>][, <i>key</i>]) · [Source](https://github.com/mbostock/internmap/blob/main/src/index.js), [Examples](https://observablehq.com/d/d4c5f6ad343866b9)
+
+The [InternMap and InternSet](https://github.com/mbostock/internmap) classes extend the native JavaScript Map and Set classes, respectively, allowing Dates and other non-primitive keys by bypassing the [SameValueZero algorithm](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness) when determining key equality. d3.group, d3.rollup and d3.index use an InternMap rather than a native Map. These two classes are exported for convenience.
Index: node_modules/d3-array/dist/d3-array.js
===================================================================
--- node_modules/d3-array/dist/d3-array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/dist/d3-array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1455 @@
+// https://d3js.org/d3-array/ v3.2.4 Copyright 2010-2023 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+typeof define === 'function' && define.amd ? define(['exports'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
+})(this, (function (exports) { 'use strict';
+
+function ascending(a, b) {
+  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+}
+
+function descending(a, b) {
+  return a == null || b == null ? NaN
+    : b < a ? -1
+    : b > a ? 1
+    : b >= a ? 0
+    : NaN;
+}
+
+function bisector(f) {
+  let compare1, compare2, delta;
+
+  // If an accessor is specified, promote it to a comparator. In this case we
+  // can test whether the search value is (self-) comparable. We can’t do this
+  // for a comparator (except for specific, known comparators) because we can’t
+  // tell if the comparator is symmetric, and an asymmetric comparator can’t be
+  // used to test whether a single value is comparable.
+  if (f.length !== 2) {
+    compare1 = ascending;
+    compare2 = (d, x) => ascending(f(d), x);
+    delta = (d, x) => f(d) - x;
+  } else {
+    compare1 = f === ascending || f === descending ? f : zero;
+    compare2 = f;
+    delta = f;
+  }
+
+  function left(a, x, lo = 0, hi = a.length) {
+    if (lo < hi) {
+      if (compare1(x, x) !== 0) return hi;
+      do {
+        const mid = (lo + hi) >>> 1;
+        if (compare2(a[mid], x) < 0) lo = mid + 1;
+        else hi = mid;
+      } while (lo < hi);
+    }
+    return lo;
+  }
+
+  function right(a, x, lo = 0, hi = a.length) {
+    if (lo < hi) {
+      if (compare1(x, x) !== 0) return hi;
+      do {
+        const mid = (lo + hi) >>> 1;
+        if (compare2(a[mid], x) <= 0) lo = mid + 1;
+        else hi = mid;
+      } while (lo < hi);
+    }
+    return lo;
+  }
+
+  function center(a, x, lo = 0, hi = a.length) {
+    const i = left(a, x, lo, hi - 1);
+    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
+  }
+
+  return {left, center, right};
+}
+
+function zero() {
+  return 0;
+}
+
+function number(x) {
+  return x === null ? NaN : +x;
+}
+
+function* numbers(values, valueof) {
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        yield value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        yield value;
+      }
+    }
+  }
+}
+
+const ascendingBisect = bisector(ascending);
+const bisectRight = ascendingBisect.right;
+const bisectLeft = ascendingBisect.left;
+const bisectCenter = bisector(number).center;
+var bisect = bisectRight;
+
+function blur(values, r) {
+  if (!((r = +r) >= 0)) throw new RangeError("invalid r");
+  let length = values.length;
+  if (!((length = Math.floor(length)) >= 0)) throw new RangeError("invalid length");
+  if (!length || !r) return values;
+  const blur = blurf(r);
+  const temp = values.slice();
+  blur(values, temp, 0, length, 1);
+  blur(temp, values, 0, length, 1);
+  blur(values, temp, 0, length, 1);
+  return values;
+}
+
+const blur2 = Blur2(blurf);
+
+const blurImage = Blur2(blurfImage);
+
+function Blur2(blur) {
+  return function(data, rx, ry = rx) {
+    if (!((rx = +rx) >= 0)) throw new RangeError("invalid rx");
+    if (!((ry = +ry) >= 0)) throw new RangeError("invalid ry");
+    let {data: values, width, height} = data;
+    if (!((width = Math.floor(width)) >= 0)) throw new RangeError("invalid width");
+    if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError("invalid height");
+    if (!width || !height || (!rx && !ry)) return data;
+    const blurx = rx && blur(rx);
+    const blury = ry && blur(ry);
+    const temp = values.slice();
+    if (blurx && blury) {
+      blurh(blurx, temp, values, width, height);
+      blurh(blurx, values, temp, width, height);
+      blurh(blurx, temp, values, width, height);
+      blurv(blury, values, temp, width, height);
+      blurv(blury, temp, values, width, height);
+      blurv(blury, values, temp, width, height);
+    } else if (blurx) {
+      blurh(blurx, values, temp, width, height);
+      blurh(blurx, temp, values, width, height);
+      blurh(blurx, values, temp, width, height);
+    } else if (blury) {
+      blurv(blury, values, temp, width, height);
+      blurv(blury, temp, values, width, height);
+      blurv(blury, values, temp, width, height);
+    }
+    return data;
+  };
+}
+
+function blurh(blur, T, S, w, h) {
+  for (let y = 0, n = w * h; y < n;) {
+    blur(T, S, y, y += w, 1);
+  }
+}
+
+function blurv(blur, T, S, w, h) {
+  for (let x = 0, n = w * h; x < w; ++x) {
+    blur(T, S, x, x + n, w);
+  }
+}
+
+function blurfImage(radius) {
+  const blur = blurf(radius);
+  return (T, S, start, stop, step) => {
+    start <<= 2, stop <<= 2, step <<= 2;
+    blur(T, S, start + 0, stop + 0, step);
+    blur(T, S, start + 1, stop + 1, step);
+    blur(T, S, start + 2, stop + 2, step);
+    blur(T, S, start + 3, stop + 3, step);
+  };
+}
+
+// Given a target array T, a source array S, sets each value T[i] to the average
+// of {S[i - r], …, S[i], …, S[i + r]}, where r = ⌊radius⌋, start <= i < stop,
+// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between
+// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an
+// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted
+// according to r - ⌊radius⌋.
+function blurf(radius) {
+  const radius0 = Math.floor(radius);
+  if (radius0 === radius) return bluri(radius);
+  const t = radius - radius0;
+  const w = 2 * radius + 1;
+  return (T, S, start, stop, step) => { // stop must be aligned!
+    if (!((stop -= step) >= start)) return; // inclusive stop
+    let sum = radius0 * S[start];
+    const s0 = step * radius0;
+    const s1 = s0 + step;
+    for (let i = start, j = start + s0; i < j; i += step) {
+      sum += S[Math.min(stop, i)];
+    }
+    for (let i = start, j = stop; i <= j; i += step) {
+      sum += S[Math.min(stop, i + s0)];
+      T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w;
+      sum -= S[Math.max(start, i - s0)];
+    }
+  };
+}
+
+// Like blurf, but optimized for integer radius.
+function bluri(radius) {
+  const w = 2 * radius + 1;
+  return (T, S, start, stop, step) => { // stop must be aligned!
+    if (!((stop -= step) >= start)) return; // inclusive stop
+    let sum = radius * S[start];
+    const s = step * radius;
+    for (let i = start, j = start + s; i < j; i += step) {
+      sum += S[Math.min(stop, i)];
+    }
+    for (let i = start, j = stop; i <= j; i += step) {
+      sum += S[Math.min(stop, i + s)];
+      T[i] = sum / w;
+      sum -= S[Math.max(start, i - s)];
+    }
+  };
+}
+
+function count(values, valueof) {
+  let count = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        ++count;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        ++count;
+      }
+    }
+  }
+  return count;
+}
+
+function length$1(array) {
+  return array.length | 0;
+}
+
+function empty(length) {
+  return !(length > 0);
+}
+
+function arrayify(values) {
+  return typeof values !== "object" || "length" in values ? values : Array.from(values);
+}
+
+function reducer(reduce) {
+  return values => reduce(...values);
+}
+
+function cross(...values) {
+  const reduce = typeof values[values.length - 1] === "function" && reducer(values.pop());
+  values = values.map(arrayify);
+  const lengths = values.map(length$1);
+  const j = values.length - 1;
+  const index = new Array(j + 1).fill(0);
+  const product = [];
+  if (j < 0 || lengths.some(empty)) return product;
+  while (true) {
+    product.push(index.map((j, i) => values[i][j]));
+    let i = j;
+    while (++index[i] === lengths[i]) {
+      if (i === 0) return reduce ? product.map(reduce) : product;
+      index[i--] = 0;
+    }
+  }
+}
+
+function cumsum(values, valueof) {
+  var sum = 0, index = 0;
+  return Float64Array.from(values, valueof === undefined
+    ? v => (sum += +v || 0)
+    : v => (sum += +valueof(v, index++, values) || 0));
+}
+
+function variance(values, valueof) {
+  let count = 0;
+  let delta;
+  let mean = 0;
+  let sum = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        delta = value - mean;
+        mean += delta / ++count;
+        sum += delta * (value - mean);
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        delta = value - mean;
+        mean += delta / ++count;
+        sum += delta * (value - mean);
+      }
+    }
+  }
+  if (count > 1) return sum / (count - 1);
+}
+
+function deviation(values, valueof) {
+  const v = variance(values, valueof);
+  return v ? Math.sqrt(v) : v;
+}
+
+function extent(values, valueof) {
+  let min;
+  let max;
+  if (valueof === undefined) {
+    for (const value of values) {
+      if (value != null) {
+        if (min === undefined) {
+          if (value >= value) min = max = value;
+        } else {
+          if (min > value) min = value;
+          if (max < value) max = value;
+        }
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null) {
+        if (min === undefined) {
+          if (value >= value) min = max = value;
+        } else {
+          if (min > value) min = value;
+          if (max < value) max = value;
+        }
+      }
+    }
+  }
+  return [min, max];
+}
+
+// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423
+class Adder {
+  constructor() {
+    this._partials = new Float64Array(32);
+    this._n = 0;
+  }
+  add(x) {
+    const p = this._partials;
+    let i = 0;
+    for (let j = 0; j < this._n && j < 32; j++) {
+      const y = p[j],
+        hi = x + y,
+        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);
+      if (lo) p[i++] = lo;
+      x = hi;
+    }
+    p[i] = x;
+    this._n = i + 1;
+    return this;
+  }
+  valueOf() {
+    const p = this._partials;
+    let n = this._n, x, y, lo, hi = 0;
+    if (n > 0) {
+      hi = p[--n];
+      while (n > 0) {
+        x = hi;
+        y = p[--n];
+        hi = x + y;
+        lo = y - (hi - x);
+        if (lo) break;
+      }
+      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {
+        y = lo * 2;
+        x = hi + y;
+        if (y == x - hi) hi = x;
+      }
+    }
+    return hi;
+  }
+}
+
+function fsum(values, valueof) {
+  const adder = new Adder();
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value = +value) {
+        adder.add(value);
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if (value = +valueof(value, ++index, values)) {
+        adder.add(value);
+      }
+    }
+  }
+  return +adder;
+}
+
+function fcumsum(values, valueof) {
+  const adder = new Adder();
+  let index = -1;
+  return Float64Array.from(values, valueof === undefined
+      ? v => adder.add(+v || 0)
+      : v => adder.add(+valueof(v, ++index, values) || 0)
+  );
+}
+
+class InternMap extends Map {
+  constructor(entries, key = keyof) {
+    super();
+    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
+    if (entries != null) for (const [key, value] of entries) this.set(key, value);
+  }
+  get(key) {
+    return super.get(intern_get(this, key));
+  }
+  has(key) {
+    return super.has(intern_get(this, key));
+  }
+  set(key, value) {
+    return super.set(intern_set(this, key), value);
+  }
+  delete(key) {
+    return super.delete(intern_delete(this, key));
+  }
+}
+
+class InternSet extends Set {
+  constructor(values, key = keyof) {
+    super();
+    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
+    if (values != null) for (const value of values) this.add(value);
+  }
+  has(value) {
+    return super.has(intern_get(this, value));
+  }
+  add(value) {
+    return super.add(intern_set(this, value));
+  }
+  delete(value) {
+    return super.delete(intern_delete(this, value));
+  }
+}
+
+function intern_get({_intern, _key}, value) {
+  const key = _key(value);
+  return _intern.has(key) ? _intern.get(key) : value;
+}
+
+function intern_set({_intern, _key}, value) {
+  const key = _key(value);
+  if (_intern.has(key)) return _intern.get(key);
+  _intern.set(key, value);
+  return value;
+}
+
+function intern_delete({_intern, _key}, value) {
+  const key = _key(value);
+  if (_intern.has(key)) {
+    value = _intern.get(key);
+    _intern.delete(key);
+  }
+  return value;
+}
+
+function keyof(value) {
+  return value !== null && typeof value === "object" ? value.valueOf() : value;
+}
+
+function identity(x) {
+  return x;
+}
+
+function group(values, ...keys) {
+  return nest(values, identity, identity, keys);
+}
+
+function groups(values, ...keys) {
+  return nest(values, Array.from, identity, keys);
+}
+
+function flatten$1(groups, keys) {
+  for (let i = 1, n = keys.length; i < n; ++i) {
+    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));
+  }
+  return groups;
+}
+
+function flatGroup(values, ...keys) {
+  return flatten$1(groups(values, ...keys), keys);
+}
+
+function flatRollup(values, reduce, ...keys) {
+  return flatten$1(rollups(values, reduce, ...keys), keys);
+}
+
+function rollup(values, reduce, ...keys) {
+  return nest(values, identity, reduce, keys);
+}
+
+function rollups(values, reduce, ...keys) {
+  return nest(values, Array.from, reduce, keys);
+}
+
+function index(values, ...keys) {
+  return nest(values, identity, unique, keys);
+}
+
+function indexes(values, ...keys) {
+  return nest(values, Array.from, unique, keys);
+}
+
+function unique(values) {
+  if (values.length !== 1) throw new Error("duplicate key");
+  return values[0];
+}
+
+function nest(values, map, reduce, keys) {
+  return (function regroup(values, i) {
+    if (i >= keys.length) return reduce(values);
+    const groups = new InternMap();
+    const keyof = keys[i++];
+    let index = -1;
+    for (const value of values) {
+      const key = keyof(value, ++index, values);
+      const group = groups.get(key);
+      if (group) group.push(value);
+      else groups.set(key, [value]);
+    }
+    for (const [key, values] of groups) {
+      groups.set(key, regroup(values, i));
+    }
+    return map(groups);
+  })(values, 0);
+}
+
+function permute(source, keys) {
+  return Array.from(keys, key => source[key]);
+}
+
+function sort(values, ...F) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  values = Array.from(values);
+  let [f] = F;
+  if ((f && f.length !== 2) || F.length > 1) {
+    const index = Uint32Array.from(values, (d, i) => i);
+    if (F.length > 1) {
+      F = F.map(f => values.map(f));
+      index.sort((i, j) => {
+        for (const f of F) {
+          const c = ascendingDefined(f[i], f[j]);
+          if (c) return c;
+        }
+      });
+    } else {
+      f = values.map(f);
+      index.sort((i, j) => ascendingDefined(f[i], f[j]));
+    }
+    return permute(values, index);
+  }
+  return values.sort(compareDefined(f));
+}
+
+function compareDefined(compare = ascending) {
+  if (compare === ascending) return ascendingDefined;
+  if (typeof compare !== "function") throw new TypeError("compare is not a function");
+  return (a, b) => {
+    const x = compare(a, b);
+    if (x || x === 0) return x;
+    return (compare(b, b) === 0) - (compare(a, a) === 0);
+  };
+}
+
+function ascendingDefined(a, b) {
+  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);
+}
+
+function groupSort(values, reduce, key) {
+  return (reduce.length !== 2
+    ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))
+    : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))
+    .map(([key]) => key);
+}
+
+var array = Array.prototype;
+
+var slice = array.slice;
+
+function constant(x) {
+  return () => x;
+}
+
+const e10 = Math.sqrt(50),
+    e5 = Math.sqrt(10),
+    e2 = Math.sqrt(2);
+
+function tickSpec(start, stop, count) {
+  const step = (stop - start) / Math.max(0, count),
+      power = Math.floor(Math.log10(step)),
+      error = step / Math.pow(10, power),
+      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;
+  let i1, i2, inc;
+  if (power < 0) {
+    inc = Math.pow(10, -power) / factor;
+    i1 = Math.round(start * inc);
+    i2 = Math.round(stop * inc);
+    if (i1 / inc < start) ++i1;
+    if (i2 / inc > stop) --i2;
+    inc = -inc;
+  } else {
+    inc = Math.pow(10, power) * factor;
+    i1 = Math.round(start / inc);
+    i2 = Math.round(stop / inc);
+    if (i1 * inc < start) ++i1;
+    if (i2 * inc > stop) --i2;
+  }
+  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);
+  return [i1, i2, inc];
+}
+
+function ticks(start, stop, count) {
+  stop = +stop, start = +start, count = +count;
+  if (!(count > 0)) return [];
+  if (start === stop) return [start];
+  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);
+  if (!(i2 >= i1)) return [];
+  const n = i2 - i1 + 1, ticks = new Array(n);
+  if (reverse) {
+    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;
+    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;
+  } else {
+    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;
+    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;
+  }
+  return ticks;
+}
+
+function tickIncrement(start, stop, count) {
+  stop = +stop, start = +start, count = +count;
+  return tickSpec(start, stop, count)[2];
+}
+
+function tickStep(start, stop, count) {
+  stop = +stop, start = +start, count = +count;
+  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);
+  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);
+}
+
+function nice(start, stop, count) {
+  let prestep;
+  while (true) {
+    const step = tickIncrement(start, stop, count);
+    if (step === prestep || step === 0 || !isFinite(step)) {
+      return [start, stop];
+    } else if (step > 0) {
+      start = Math.floor(start / step) * step;
+      stop = Math.ceil(stop / step) * step;
+    } else if (step < 0) {
+      start = Math.ceil(start * step) / step;
+      stop = Math.floor(stop * step) / step;
+    }
+    prestep = step;
+  }
+}
+
+function thresholdSturges(values) {
+  return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);
+}
+
+function bin() {
+  var value = identity,
+      domain = extent,
+      threshold = thresholdSturges;
+
+  function histogram(data) {
+    if (!Array.isArray(data)) data = Array.from(data);
+
+    var i,
+        n = data.length,
+        x,
+        step,
+        values = new Array(n);
+
+    for (i = 0; i < n; ++i) {
+      values[i] = value(data[i], i, data);
+    }
+
+    var xz = domain(values),
+        x0 = xz[0],
+        x1 = xz[1],
+        tz = threshold(values, x0, x1);
+
+    // Convert number of thresholds into uniform thresholds, and nice the
+    // default domain accordingly.
+    if (!Array.isArray(tz)) {
+      const max = x1, tn = +tz;
+      if (domain === extent) [x0, x1] = nice(x0, x1, tn);
+      tz = ticks(x0, x1, tn);
+
+      // If the domain is aligned with the first tick (which it will by
+      // default), then we can use quantization rather than bisection to bin
+      // values, which is substantially faster.
+      if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);
+
+      // If the last threshold is coincident with the domain’s upper bound, the
+      // last bin will be zero-width. If the default domain is used, and this
+      // last threshold is coincident with the maximum input value, we can
+      // extend the niced upper bound by one tick to ensure uniform bin widths;
+      // otherwise, we simply remove the last threshold. Note that we don’t
+      // coerce values or the domain to numbers, and thus must be careful to
+      // compare order (>=) rather than strict equality (===)!
+      if (tz[tz.length - 1] >= x1) {
+        if (max >= x1 && domain === extent) {
+          const step = tickIncrement(x0, x1, tn);
+          if (isFinite(step)) {
+            if (step > 0) {
+              x1 = (Math.floor(x1 / step) + 1) * step;
+            } else if (step < 0) {
+              x1 = (Math.ceil(x1 * -step) + 1) / -step;
+            }
+          }
+        } else {
+          tz.pop();
+        }
+      }
+    }
+
+    // Remove any thresholds outside the domain.
+    // Be careful not to mutate an array owned by the user!
+    var m = tz.length, a = 0, b = m;
+    while (tz[a] <= x0) ++a;
+    while (tz[b - 1] > x1) --b;
+    if (a || b < m) tz = tz.slice(a, b), m = b - a;
+
+    var bins = new Array(m + 1),
+        bin;
+
+    // Initialize bins.
+    for (i = 0; i <= m; ++i) {
+      bin = bins[i] = [];
+      bin.x0 = i > 0 ? tz[i - 1] : x0;
+      bin.x1 = i < m ? tz[i] : x1;
+    }
+
+    // Assign data to bins by value, ignoring any outside the domain.
+    if (isFinite(step)) {
+      if (step > 0) {
+        for (i = 0; i < n; ++i) {
+          if ((x = values[i]) != null && x0 <= x && x <= x1) {
+            bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);
+          }
+        }
+      } else if (step < 0) {
+        for (i = 0; i < n; ++i) {
+          if ((x = values[i]) != null && x0 <= x && x <= x1) {
+            const j = Math.floor((x0 - x) * step);
+            bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding
+          }
+        }
+      }
+    } else {
+      for (i = 0; i < n; ++i) {
+        if ((x = values[i]) != null && x0 <= x && x <= x1) {
+          bins[bisect(tz, x, 0, m)].push(data[i]);
+        }
+      }
+    }
+
+    return bins;
+  }
+
+  histogram.value = function(_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
+  };
+
+  histogram.domain = function(_) {
+    return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
+  };
+
+  histogram.thresholds = function(_) {
+    return arguments.length ? (threshold = typeof _ === "function" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;
+  };
+
+  return histogram;
+}
+
+function max(values, valueof) {
+  let max;
+  if (valueof === undefined) {
+    for (const value of values) {
+      if (value != null
+          && (max < value || (max === undefined && value >= value))) {
+        max = value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null
+          && (max < value || (max === undefined && value >= value))) {
+        max = value;
+      }
+    }
+  }
+  return max;
+}
+
+function maxIndex(values, valueof) {
+  let max;
+  let maxIndex = -1;
+  let index = -1;
+  if (valueof === undefined) {
+    for (const value of values) {
+      ++index;
+      if (value != null
+          && (max < value || (max === undefined && value >= value))) {
+        max = value, maxIndex = index;
+      }
+    }
+  } else {
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null
+          && (max < value || (max === undefined && value >= value))) {
+        max = value, maxIndex = index;
+      }
+    }
+  }
+  return maxIndex;
+}
+
+function min(values, valueof) {
+  let min;
+  if (valueof === undefined) {
+    for (const value of values) {
+      if (value != null
+          && (min > value || (min === undefined && value >= value))) {
+        min = value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null
+          && (min > value || (min === undefined && value >= value))) {
+        min = value;
+      }
+    }
+  }
+  return min;
+}
+
+function minIndex(values, valueof) {
+  let min;
+  let minIndex = -1;
+  let index = -1;
+  if (valueof === undefined) {
+    for (const value of values) {
+      ++index;
+      if (value != null
+          && (min > value || (min === undefined && value >= value))) {
+        min = value, minIndex = index;
+      }
+    }
+  } else {
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null
+          && (min > value || (min === undefined && value >= value))) {
+        min = value, minIndex = index;
+      }
+    }
+  }
+  return minIndex;
+}
+
+// Based on https://github.com/mourner/quickselect
+// ISC license, Copyright 2018 Vladimir Agafonkin.
+function quickselect(array, k, left = 0, right = Infinity, compare) {
+  k = Math.floor(k);
+  left = Math.floor(Math.max(0, left));
+  right = Math.floor(Math.min(array.length - 1, right));
+
+  if (!(left <= k && k <= right)) return array;
+
+  compare = compare === undefined ? ascendingDefined : compareDefined(compare);
+
+  while (right > left) {
+    if (right - left > 600) {
+      const n = right - left + 1;
+      const m = k - left + 1;
+      const z = Math.log(n);
+      const s = 0.5 * Math.exp(2 * z / 3);
+      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
+      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
+      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
+      quickselect(array, k, newLeft, newRight, compare);
+    }
+
+    const t = array[k];
+    let i = left;
+    let j = right;
+
+    swap(array, left, k);
+    if (compare(array[right], t) > 0) swap(array, left, right);
+
+    while (i < j) {
+      swap(array, i, j), ++i, --j;
+      while (compare(array[i], t) < 0) ++i;
+      while (compare(array[j], t) > 0) --j;
+    }
+
+    if (compare(array[left], t) === 0) swap(array, left, j);
+    else ++j, swap(array, j, right);
+
+    if (j <= k) left = j + 1;
+    if (k <= j) right = j - 1;
+  }
+
+  return array;
+}
+
+function swap(array, i, j) {
+  const t = array[i];
+  array[i] = array[j];
+  array[j] = t;
+}
+
+function greatest(values, compare = ascending) {
+  let max;
+  let defined = false;
+  if (compare.length === 1) {
+    let maxValue;
+    for (const element of values) {
+      const value = compare(element);
+      if (defined
+          ? ascending(value, maxValue) > 0
+          : ascending(value, value) === 0) {
+        max = element;
+        maxValue = value;
+        defined = true;
+      }
+    }
+  } else {
+    for (const value of values) {
+      if (defined
+          ? compare(value, max) > 0
+          : compare(value, value) === 0) {
+        max = value;
+        defined = true;
+      }
+    }
+  }
+  return max;
+}
+
+function quantile(values, p, valueof) {
+  values = Float64Array.from(numbers(values, valueof));
+  if (!(n = values.length) || isNaN(p = +p)) return;
+  if (p <= 0 || n < 2) return min(values);
+  if (p >= 1) return max(values);
+  var n,
+      i = (n - 1) * p,
+      i0 = Math.floor(i),
+      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),
+      value1 = min(values.subarray(i0 + 1));
+  return value0 + (value1 - value0) * (i - i0);
+}
+
+function quantileSorted(values, p, valueof = number) {
+  if (!(n = values.length) || isNaN(p = +p)) return;
+  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);
+  if (p >= 1) return +valueof(values[n - 1], n - 1, values);
+  var n,
+      i = (n - 1) * p,
+      i0 = Math.floor(i),
+      value0 = +valueof(values[i0], i0, values),
+      value1 = +valueof(values[i0 + 1], i0 + 1, values);
+  return value0 + (value1 - value0) * (i - i0);
+}
+
+function quantileIndex(values, p, valueof = number) {
+  if (isNaN(p = +p)) return;
+  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));
+  if (p <= 0) return minIndex(numbers);
+  if (p >= 1) return maxIndex(numbers);
+  var numbers,
+      index = Uint32Array.from(values, (_, i) => i),
+      j = numbers.length - 1,
+      i = Math.floor(j * p);
+  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));
+  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);
+  return i >= 0 ? i : -1;
+}
+
+function thresholdFreedmanDiaconis(values, min, max) {
+  const c = count(values), d = quantile(values, 0.75) - quantile(values, 0.25);
+  return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;
+}
+
+function thresholdScott(values, min, max) {
+  const c = count(values), d = deviation(values);
+  return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;
+}
+
+function mean(values, valueof) {
+  let count = 0;
+  let sum = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        ++count, sum += value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        ++count, sum += value;
+      }
+    }
+  }
+  if (count) return sum / count;
+}
+
+function median(values, valueof) {
+  return quantile(values, 0.5, valueof);
+}
+
+function medianIndex(values, valueof) {
+  return quantileIndex(values, 0.5, valueof);
+}
+
+function* flatten(arrays) {
+  for (const array of arrays) {
+    yield* array;
+  }
+}
+
+function merge(arrays) {
+  return Array.from(flatten(arrays));
+}
+
+function mode(values, valueof) {
+  const counts = new InternMap();
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && value >= value) {
+        counts.set(value, (counts.get(value) || 0) + 1);
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && value >= value) {
+        counts.set(value, (counts.get(value) || 0) + 1);
+      }
+    }
+  }
+  let modeValue;
+  let modeCount = 0;
+  for (const [value, count] of counts) {
+    if (count > modeCount) {
+      modeCount = count;
+      modeValue = value;
+    }
+  }
+  return modeValue;
+}
+
+function pairs(values, pairof = pair) {
+  const pairs = [];
+  let previous;
+  let first = false;
+  for (const value of values) {
+    if (first) pairs.push(pairof(previous, value));
+    previous = value;
+    first = true;
+  }
+  return pairs;
+}
+
+function pair(a, b) {
+  return [a, b];
+}
+
+function range(start, stop, step) {
+  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
+
+  var i = -1,
+      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
+      range = new Array(n);
+
+  while (++i < n) {
+    range[i] = start + i * step;
+  }
+
+  return range;
+}
+
+function rank(values, valueof = ascending) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  let V = Array.from(values);
+  const R = new Float64Array(V.length);
+  if (valueof.length !== 2) V = V.map(valueof), valueof = ascending;
+  const compareIndex = (i, j) => valueof(V[i], V[j]);
+  let k, r;
+  values = Uint32Array.from(V, (_, i) => i);
+  // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123
+  values.sort(valueof === ascending ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex));
+  values.forEach((j, i) => {
+      const c = compareIndex(j, k === undefined ? j : k);
+      if (c >= 0) {
+        if (k === undefined || c > 0) k = j, r = i;
+        R[j] = r;
+      } else {
+        R[j] = NaN;
+      }
+    });
+  return R;
+}
+
+function least(values, compare = ascending) {
+  let min;
+  let defined = false;
+  if (compare.length === 1) {
+    let minValue;
+    for (const element of values) {
+      const value = compare(element);
+      if (defined
+          ? ascending(value, minValue) < 0
+          : ascending(value, value) === 0) {
+        min = element;
+        minValue = value;
+        defined = true;
+      }
+    }
+  } else {
+    for (const value of values) {
+      if (defined
+          ? compare(value, min) < 0
+          : compare(value, value) === 0) {
+        min = value;
+        defined = true;
+      }
+    }
+  }
+  return min;
+}
+
+function leastIndex(values, compare = ascending) {
+  if (compare.length === 1) return minIndex(values, compare);
+  let minValue;
+  let min = -1;
+  let index = -1;
+  for (const value of values) {
+    ++index;
+    if (min < 0
+        ? compare(value, value) === 0
+        : compare(value, minValue) < 0) {
+      minValue = value;
+      min = index;
+    }
+  }
+  return min;
+}
+
+function greatestIndex(values, compare = ascending) {
+  if (compare.length === 1) return maxIndex(values, compare);
+  let maxValue;
+  let max = -1;
+  let index = -1;
+  for (const value of values) {
+    ++index;
+    if (max < 0
+        ? compare(value, value) === 0
+        : compare(value, maxValue) > 0) {
+      maxValue = value;
+      max = index;
+    }
+  }
+  return max;
+}
+
+function scan(values, compare) {
+  const index = leastIndex(values, compare);
+  return index < 0 ? undefined : index;
+}
+
+var shuffle = shuffler(Math.random);
+
+function shuffler(random) {
+  return function shuffle(array, i0 = 0, i1 = array.length) {
+    let m = i1 - (i0 = +i0);
+    while (m) {
+      const i = random() * m-- | 0, t = array[m + i0];
+      array[m + i0] = array[i + i0];
+      array[i + i0] = t;
+    }
+    return array;
+  };
+}
+
+function sum(values, valueof) {
+  let sum = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value = +value) {
+        sum += value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if (value = +valueof(value, ++index, values)) {
+        sum += value;
+      }
+    }
+  }
+  return sum;
+}
+
+function transpose(matrix) {
+  if (!(n = matrix.length)) return [];
+  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
+    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
+      row[j] = matrix[j][i];
+    }
+  }
+  return transpose;
+}
+
+function length(d) {
+  return d.length;
+}
+
+function zip() {
+  return transpose(arguments);
+}
+
+function every(values, test) {
+  if (typeof test !== "function") throw new TypeError("test is not a function");
+  let index = -1;
+  for (const value of values) {
+    if (!test(value, ++index, values)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+function some(values, test) {
+  if (typeof test !== "function") throw new TypeError("test is not a function");
+  let index = -1;
+  for (const value of values) {
+    if (test(value, ++index, values)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+function filter(values, test) {
+  if (typeof test !== "function") throw new TypeError("test is not a function");
+  const array = [];
+  let index = -1;
+  for (const value of values) {
+    if (test(value, ++index, values)) {
+      array.push(value);
+    }
+  }
+  return array;
+}
+
+function map(values, mapper) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  if (typeof mapper !== "function") throw new TypeError("mapper is not a function");
+  return Array.from(values, (value, index) => mapper(value, index, values));
+}
+
+function reduce(values, reducer, value) {
+  if (typeof reducer !== "function") throw new TypeError("reducer is not a function");
+  const iterator = values[Symbol.iterator]();
+  let done, next, index = -1;
+  if (arguments.length < 3) {
+    ({done, value} = iterator.next());
+    if (done) return;
+    ++index;
+  }
+  while (({done, value: next} = iterator.next()), !done) {
+    value = reducer(value, next, ++index, values);
+  }
+  return value;
+}
+
+function reverse(values) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  return Array.from(values).reverse();
+}
+
+function difference(values, ...others) {
+  values = new InternSet(values);
+  for (const other of others) {
+    for (const value of other) {
+      values.delete(value);
+    }
+  }
+  return values;
+}
+
+function disjoint(values, other) {
+  const iterator = other[Symbol.iterator](), set = new InternSet();
+  for (const v of values) {
+    if (set.has(v)) return false;
+    let value, done;
+    while (({value, done} = iterator.next())) {
+      if (done) break;
+      if (Object.is(v, value)) return false;
+      set.add(value);
+    }
+  }
+  return true;
+}
+
+function intersection(values, ...others) {
+  values = new InternSet(values);
+  others = others.map(set);
+  out: for (const value of values) {
+    for (const other of others) {
+      if (!other.has(value)) {
+        values.delete(value);
+        continue out;
+      }
+    }
+  }
+  return values;
+}
+
+function set(values) {
+  return values instanceof InternSet ? values : new InternSet(values);
+}
+
+function superset(values, other) {
+  const iterator = values[Symbol.iterator](), set = new Set();
+  for (const o of other) {
+    const io = intern(o);
+    if (set.has(io)) continue;
+    let value, done;
+    while (({value, done} = iterator.next())) {
+      if (done) return false;
+      const ivalue = intern(value);
+      set.add(ivalue);
+      if (Object.is(io, ivalue)) break;
+    }
+  }
+  return true;
+}
+
+function intern(value) {
+  return value !== null && typeof value === "object" ? value.valueOf() : value;
+}
+
+function subset(values, other) {
+  return superset(other, values);
+}
+
+function union(...others) {
+  const set = new InternSet();
+  for (const other of others) {
+    for (const o of other) {
+      set.add(o);
+    }
+  }
+  return set;
+}
+
+exports.Adder = Adder;
+exports.InternMap = InternMap;
+exports.InternSet = InternSet;
+exports.ascending = ascending;
+exports.bin = bin;
+exports.bisect = bisect;
+exports.bisectCenter = bisectCenter;
+exports.bisectLeft = bisectLeft;
+exports.bisectRight = bisectRight;
+exports.bisector = bisector;
+exports.blur = blur;
+exports.blur2 = blur2;
+exports.blurImage = blurImage;
+exports.count = count;
+exports.cross = cross;
+exports.cumsum = cumsum;
+exports.descending = descending;
+exports.deviation = deviation;
+exports.difference = difference;
+exports.disjoint = disjoint;
+exports.every = every;
+exports.extent = extent;
+exports.fcumsum = fcumsum;
+exports.filter = filter;
+exports.flatGroup = flatGroup;
+exports.flatRollup = flatRollup;
+exports.fsum = fsum;
+exports.greatest = greatest;
+exports.greatestIndex = greatestIndex;
+exports.group = group;
+exports.groupSort = groupSort;
+exports.groups = groups;
+exports.histogram = bin;
+exports.index = index;
+exports.indexes = indexes;
+exports.intersection = intersection;
+exports.least = least;
+exports.leastIndex = leastIndex;
+exports.map = map;
+exports.max = max;
+exports.maxIndex = maxIndex;
+exports.mean = mean;
+exports.median = median;
+exports.medianIndex = medianIndex;
+exports.merge = merge;
+exports.min = min;
+exports.minIndex = minIndex;
+exports.mode = mode;
+exports.nice = nice;
+exports.pairs = pairs;
+exports.permute = permute;
+exports.quantile = quantile;
+exports.quantileIndex = quantileIndex;
+exports.quantileSorted = quantileSorted;
+exports.quickselect = quickselect;
+exports.range = range;
+exports.rank = rank;
+exports.reduce = reduce;
+exports.reverse = reverse;
+exports.rollup = rollup;
+exports.rollups = rollups;
+exports.scan = scan;
+exports.shuffle = shuffle;
+exports.shuffler = shuffler;
+exports.some = some;
+exports.sort = sort;
+exports.subset = subset;
+exports.sum = sum;
+exports.superset = superset;
+exports.thresholdFreedmanDiaconis = thresholdFreedmanDiaconis;
+exports.thresholdScott = thresholdScott;
+exports.thresholdSturges = thresholdSturges;
+exports.tickIncrement = tickIncrement;
+exports.tickStep = tickStep;
+exports.ticks = ticks;
+exports.transpose = transpose;
+exports.union = union;
+exports.variance = variance;
+exports.zip = zip;
+
+}));
Index: node_modules/d3-array/dist/d3-array.min.js
===================================================================
--- node_modules/d3-array/dist/d3-array.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/dist/d3-array.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-array/ v3.2.4 Copyright 2010-2023 Mike Bostock
+!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{})}(this,(function(t){"use strict";function n(t,n){return null==t||null==n?NaN:t<n?-1:t>n?1:t>=n?0:NaN}function r(t,n){return null==t||null==n?NaN:n<t?-1:n>t?1:n>=t?0:NaN}function e(t){let e,f,i;function u(t,n,r=0,o=t.length){if(r<o){if(0!==e(n,n))return o;do{const e=r+o>>>1;f(t[e],n)<0?r=e+1:o=e}while(r<o)}return r}return 2!==t.length?(e=n,f=(r,e)=>n(t(r),e),i=(n,r)=>t(n)-r):(e=t===n||t===r?t:o,f=t,i=t),{left:u,center:function(t,n,r=0,e=t.length){const o=u(t,n,r,e-1);return o>r&&i(t[o-1],n)>-i(t[o],n)?o-1:o},right:function(t,n,r=0,o=t.length){if(r<o){if(0!==e(n,n))return o;do{const e=r+o>>>1;f(t[e],n)<=0?r=e+1:o=e}while(r<o)}return r}}}function o(){return 0}function f(t){return null===t?NaN:+t}const i=e(n),u=i.right,l=i.left,c=e(f).center;var s=u;const a=d(m),h=d((function(t){const n=m(t);return(t,r,e,o,f)=>{n(t,r,(e<<=2)+0,(o<<=2)+0,f<<=2),n(t,r,e+1,o+1,f),n(t,r,e+2,o+2,f),n(t,r,e+3,o+3,f)}}));function d(t){return function(n,r,e=r){if(!((r=+r)>=0))throw new RangeError("invalid rx");if(!((e=+e)>=0))throw new RangeError("invalid ry");let{data:o,width:f,height:i}=n;if(!((f=Math.floor(f))>=0))throw new RangeError("invalid width");if(!((i=Math.floor(void 0!==i?i:o.length/f))>=0))throw new RangeError("invalid height");if(!f||!i||!r&&!e)return n;const u=r&&t(r),l=e&&t(e),c=o.slice();return u&&l?(p(u,c,o,f,i),p(u,o,c,f,i),p(u,c,o,f,i),y(l,o,c,f,i),y(l,c,o,f,i),y(l,o,c,f,i)):u?(p(u,o,c,f,i),p(u,c,o,f,i),p(u,o,c,f,i)):l&&(y(l,o,c,f,i),y(l,c,o,f,i),y(l,o,c,f,i)),n}}function p(t,n,r,e,o){for(let f=0,i=e*o;f<i;)t(n,r,f,f+=e,1)}function y(t,n,r,e,o){for(let f=0,i=e*o;f<e;++f)t(n,r,f,f+i,e)}function m(t){const n=Math.floor(t);if(n===t)return function(t){const n=2*t+1;return(r,e,o,f,i)=>{if(!((f-=i)>=o))return;let u=t*e[o];const l=i*t;for(let t=o,n=o+l;t<n;t+=i)u+=e[Math.min(f,t)];for(let t=o,c=f;t<=c;t+=i)u+=e[Math.min(f,t+l)],r[t]=u/n,u-=e[Math.max(o,t-l)]}}(t);const r=t-n,e=2*t+1;return(t,o,f,i,u)=>{if(!((i-=u)>=f))return;let l=n*o[f];const c=u*n,s=c+u;for(let t=f,n=f+c;t<n;t+=u)l+=o[Math.min(i,t)];for(let n=f,a=i;n<=a;n+=u)l+=o[Math.min(i,n+c)],t[n]=(l+r*(o[Math.max(f,n-s)]+o[Math.min(i,n+s)]))/e,l-=o[Math.max(f,n-c)]}}function g(t,n){let r=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&++r;else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(o=+o)>=o&&++r}return r}function v(t){return 0|t.length}function M(t){return!(t>0)}function w(t){return"object"!=typeof t||"length"in t?t:Array.from(t)}function b(t,n){let r,e=0,o=0,f=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(r=n-o,o+=r/++e,f+=r*(n-o));else{let i=-1;for(let u of t)null!=(u=n(u,++i,t))&&(u=+u)>=u&&(r=u-o,o+=r/++e,f+=r*(u-o))}if(e>1)return f/(e-1)}function A(t,n){const r=b(t,n);return r?Math.sqrt(r):r}function x(t,n){let r,e;if(void 0===n)for(const n of t)null!=n&&(void 0===r?n>=n&&(r=e=n):(r>n&&(r=n),e<n&&(e=n)));else{let o=-1;for(let f of t)null!=(f=n(f,++o,t))&&(void 0===r?f>=f&&(r=e=f):(r>f&&(r=f),e<f&&(e=f)))}return[r,e]}class N{constructor(){this._partials=new Float64Array(32),this._n=0}add(t){const n=this._partials;let r=0;for(let e=0;e<this._n&&e<32;e++){const o=n[e],f=t+o,i=Math.abs(t)<Math.abs(o)?t-(f-o):o-(f-t);i&&(n[r++]=i),t=f}return n[r]=t,this._n=r+1,this}valueOf(){const t=this._partials;let n,r,e,o=this._n,f=0;if(o>0){for(f=t[--o];o>0&&(n=f,r=t[--o],f=n+r,e=r-(f-n),!e););o>0&&(e<0&&t[o-1]<0||e>0&&t[o-1]>0)&&(r=2*e,n=f+r,r==n-f&&(f=n))}return f}}class InternMap extends Map{constructor(t,n=k){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),null!=t)for(const[n,r]of t)this.set(n,r)}get(t){return super.get(E(this,t))}has(t){return super.has(E(this,t))}set(t,n){return super.set(_(this,t),n)}delete(t){return super.delete(S(this,t))}}class InternSet extends Set{constructor(t,n=k){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),null!=t)for(const n of t)this.add(n)}has(t){return super.has(E(this,t))}add(t){return super.add(_(this,t))}delete(t){return super.delete(S(this,t))}}function E({_intern:t,_key:n},r){const e=n(r);return t.has(e)?t.get(e):r}function _({_intern:t,_key:n},r){const e=n(r);return t.has(e)?t.get(e):(t.set(e,r),r)}function S({_intern:t,_key:n},r){const e=n(r);return t.has(e)&&(r=t.get(e),t.delete(e)),r}function k(t){return null!==t&&"object"==typeof t?t.valueOf():t}function T(t){return t}function F(t,...n){return U(t,T,T,n)}function I(t,...n){return U(t,Array.from,T,n)}function j(t,n){for(let r=1,e=n.length;r<e;++r)t=t.flatMap((t=>t.pop().map((([n,r])=>[...t,n,r]))));return t}function q(t,n,...r){return U(t,T,n,r)}function R(t,n,...r){return U(t,Array.from,n,r)}function O(t){if(1!==t.length)throw new Error("duplicate key");return t[0]}function U(t,n,r,e){return function t(o,f){if(f>=e.length)return r(o);const i=new InternMap,u=e[f++];let l=-1;for(const t of o){const n=u(t,++l,o),r=i.get(n);r?r.push(t):i.set(n,[t])}for(const[n,r]of i)i.set(n,t(r,f));return n(i)}(t,0)}function L(t,n){return Array.from(n,(n=>t[n]))}function P(t,...n){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");t=Array.from(t);let[r]=n;if(r&&2!==r.length||n.length>1){const e=Uint32Array.from(t,((t,n)=>n));return n.length>1?(n=n.map((n=>t.map(n))),e.sort(((t,r)=>{for(const e of n){const n=C(e[t],e[r]);if(n)return n}}))):(r=t.map(r),e.sort(((t,n)=>C(r[t],r[n])))),L(t,e)}return t.sort(z(r))}function z(t=n){if(t===n)return C;if("function"!=typeof t)throw new TypeError("compare is not a function");return(n,r)=>{const e=t(n,r);return e||0===e?e:(0===t(r,r))-(0===t(n,n))}}function C(t,n){return(null==t||!(t>=t))-(null==n||!(n>=n))||(t<n?-1:t>n?1:0)}var D=Array.prototype.slice;function G(t){return()=>t}const B=Math.sqrt(50),H=Math.sqrt(10),J=Math.sqrt(2);function K(t,n,r){const e=(n-t)/Math.max(0,r),o=Math.floor(Math.log10(e)),f=e/Math.pow(10,o),i=f>=B?10:f>=H?5:f>=J?2:1;let u,l,c;return o<0?(c=Math.pow(10,-o)/i,u=Math.round(t*c),l=Math.round(n*c),u/c<t&&++u,l/c>n&&--l,c=-c):(c=Math.pow(10,o)*i,u=Math.round(t/c),l=Math.round(n/c),u*c<t&&++u,l*c>n&&--l),l<u&&.5<=r&&r<2?K(t,n,2*r):[u,l,c]}function Q(t,n,r){if(!((r=+r)>0))return[];if((t=+t)===(n=+n))return[t];const e=n<t,[o,f,i]=e?K(n,t,r):K(t,n,r);if(!(f>=o))return[];const u=f-o+1,l=new Array(u);if(e)if(i<0)for(let t=0;t<u;++t)l[t]=(f-t)/-i;else for(let t=0;t<u;++t)l[t]=(f-t)*i;else if(i<0)for(let t=0;t<u;++t)l[t]=(o+t)/-i;else for(let t=0;t<u;++t)l[t]=(o+t)*i;return l}function V(t,n,r){return K(t=+t,n=+n,r=+r)[2]}function W(t,n,r){let e;for(;;){const o=V(t,n,r);if(o===e||0===o||!isFinite(o))return[t,n];o>0?(t=Math.floor(t/o)*o,n=Math.ceil(n/o)*o):o<0&&(t=Math.ceil(t*o)/o,n=Math.floor(n*o)/o),e=o}}function X(t){return Math.max(1,Math.ceil(Math.log(g(t))/Math.LN2)+1)}function Y(){var t=T,n=x,r=X;function e(e){Array.isArray(e)||(e=Array.from(e));var o,f,i,u=e.length,l=new Array(u);for(o=0;o<u;++o)l[o]=t(e[o],o,e);var c=n(l),a=c[0],h=c[1],d=r(l,a,h);if(!Array.isArray(d)){const t=h,r=+d;if(n===x&&([a,h]=W(a,h,r)),(d=Q(a,h,r))[0]<=a&&(i=V(a,h,r)),d[d.length-1]>=h)if(t>=h&&n===x){const t=V(a,h,r);isFinite(t)&&(t>0?h=(Math.floor(h/t)+1)*t:t<0&&(h=(Math.ceil(h*-t)+1)/-t))}else d.pop()}for(var p=d.length,y=0,m=p;d[y]<=a;)++y;for(;d[m-1]>h;)--m;(y||m<p)&&(d=d.slice(y,m),p=m-y);var g,v=new Array(p+1);for(o=0;o<=p;++o)(g=v[o]=[]).x0=o>0?d[o-1]:a,g.x1=o<p?d[o]:h;if(isFinite(i)){if(i>0)for(o=0;o<u;++o)null!=(f=l[o])&&a<=f&&f<=h&&v[Math.min(p,Math.floor((f-a)/i))].push(e[o]);else if(i<0)for(o=0;o<u;++o)if(null!=(f=l[o])&&a<=f&&f<=h){const t=Math.floor((a-f)*i);v[Math.min(p,t+(d[t]<=f))].push(e[o])}}else for(o=0;o<u;++o)null!=(f=l[o])&&a<=f&&f<=h&&v[s(d,f,0,p)].push(e[o]);return v}return e.value=function(n){return arguments.length?(t="function"==typeof n?n:G(n),e):t},e.domain=function(t){return arguments.length?(n="function"==typeof t?t:G([t[0],t[1]]),e):n},e.thresholds=function(t){return arguments.length?(r="function"==typeof t?t:G(Array.isArray(t)?D.call(t):t),e):r},e}function Z(t,n){let r;if(void 0===n)for(const n of t)null!=n&&(r<n||void 0===r&&n>=n)&&(r=n);else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(r<o||void 0===r&&o>=o)&&(r=o)}return r}function $(t,n){let r,e=-1,o=-1;if(void 0===n)for(const n of t)++o,null!=n&&(r<n||void 0===r&&n>=n)&&(r=n,e=o);else for(let f of t)null!=(f=n(f,++o,t))&&(r<f||void 0===r&&f>=f)&&(r=f,e=o);return e}function tt(t,n){let r;if(void 0===n)for(const n of t)null!=n&&(r>n||void 0===r&&n>=n)&&(r=n);else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(r>o||void 0===r&&o>=o)&&(r=o)}return r}function nt(t,n){let r,e=-1,o=-1;if(void 0===n)for(const n of t)++o,null!=n&&(r>n||void 0===r&&n>=n)&&(r=n,e=o);else for(let f of t)null!=(f=n(f,++o,t))&&(r>f||void 0===r&&f>=f)&&(r=f,e=o);return e}function rt(t,n,r=0,e=1/0,o){if(n=Math.floor(n),r=Math.floor(Math.max(0,r)),e=Math.floor(Math.min(t.length-1,e)),!(r<=n&&n<=e))return t;for(o=void 0===o?C:z(o);e>r;){if(e-r>600){const f=e-r+1,i=n-r+1,u=Math.log(f),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(f-l)/f)*(i-f/2<0?-1:1);rt(t,n,Math.max(r,Math.floor(n-i*l/f+c)),Math.min(e,Math.floor(n+(f-i)*l/f+c)),o)}const f=t[n];let i=r,u=e;for(et(t,r,n),o(t[e],f)>0&&et(t,r,e);i<u;){for(et(t,i,u),++i,--u;o(t[i],f)<0;)++i;for(;o(t[u],f)>0;)--u}0===o(t[r],f)?et(t,r,u):(++u,et(t,u,e)),u<=n&&(r=u+1),n<=u&&(e=u-1)}return t}function et(t,n,r){const e=t[n];t[n]=t[r],t[r]=e}function ot(t,r=n){let e,o=!1;if(1===r.length){let f;for(const i of t){const t=r(i);(o?n(t,f)>0:0===n(t,t))&&(e=i,f=t,o=!0)}}else for(const n of t)(o?r(n,e)>0:0===r(n,n))&&(e=n,o=!0);return e}function ft(t,n,r){if(t=Float64Array.from(function*(t,n){if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(yield n);else{let r=-1;for(let e of t)null!=(e=n(e,++r,t))&&(e=+e)>=e&&(yield e)}}(t,r)),(e=t.length)&&!isNaN(n=+n)){if(n<=0||e<2)return tt(t);if(n>=1)return Z(t);var e,o=(e-1)*n,f=Math.floor(o),i=Z(rt(t,f).subarray(0,f+1));return i+(tt(t.subarray(f+1))-i)*(o-f)}}function it(t,n,r=f){if(!isNaN(n=+n)){if(e=Float64Array.from(t,((n,e)=>f(r(t[e],e,t)))),n<=0)return nt(e);if(n>=1)return $(e);var e,o=Uint32Array.from(t,((t,n)=>n)),i=e.length-1,u=Math.floor(i*n);return rt(o,u,0,i,((t,n)=>C(e[t],e[n]))),(u=ot(o.subarray(0,u+1),(t=>e[t])))>=0?u:-1}}function ut(t,n){return[t,n]}function lt(t,r=n){if(1===r.length)return nt(t,r);let e,o=-1,f=-1;for(const n of t)++f,(o<0?0===r(n,n):r(n,e)<0)&&(e=n,o=f);return o}var ct=st(Math.random);function st(t){return function(n,r=0,e=n.length){let o=e-(r=+r);for(;o;){const e=t()*o--|0,f=n[o+r];n[o+r]=n[e+r],n[e+r]=f}return n}}function at(t){if(!(o=t.length))return[];for(var n=-1,r=tt(t,ht),e=new Array(r);++n<r;)for(var o,f=-1,i=e[n]=new Array(o);++f<o;)i[f]=t[f][n];return e}function ht(t){return t.length}function dt(t){return t instanceof InternSet?t:new InternSet(t)}function pt(t,n){const r=t[Symbol.iterator](),e=new Set;for(const t of n){const n=yt(t);if(e.has(n))continue;let o,f;for(;({value:o,done:f}=r.next());){if(f)return!1;const t=yt(o);if(e.add(t),Object.is(n,t))break}}return!0}function yt(t){return null!==t&&"object"==typeof t?t.valueOf():t}t.Adder=N,t.InternMap=InternMap,t.InternSet=InternSet,t.ascending=n,t.bin=Y,t.bisect=s,t.bisectCenter=c,t.bisectLeft=l,t.bisectRight=u,t.bisector=e,t.blur=function(t,n){if(!((n=+n)>=0))throw new RangeError("invalid r");let r=t.length;if(!((r=Math.floor(r))>=0))throw new RangeError("invalid length");if(!r||!n)return t;const e=m(n),o=t.slice();return e(t,o,0,r,1),e(o,t,0,r,1),e(t,o,0,r,1),t},t.blur2=a,t.blurImage=h,t.count=g,t.cross=function(...t){const n="function"==typeof t[t.length-1]&&function(t){return n=>t(...n)}(t.pop()),r=(t=t.map(w)).map(v),e=t.length-1,o=new Array(e+1).fill(0),f=[];if(e<0||r.some(M))return f;for(;;){f.push(o.map(((n,r)=>t[r][n])));let i=e;for(;++o[i]===r[i];){if(0===i)return n?f.map(n):f;o[i--]=0}}},t.cumsum=function(t,n){var r=0,e=0;return Float64Array.from(t,void 0===n?t=>r+=+t||0:o=>r+=+n(o,e++,t)||0)},t.descending=r,t.deviation=A,t.difference=function(t,...n){t=new InternSet(t);for(const r of n)for(const n of r)t.delete(n);return t},t.disjoint=function(t,n){const r=n[Symbol.iterator](),e=new InternSet;for(const n of t){if(e.has(n))return!1;let t,o;for(;({value:t,done:o}=r.next())&&!o;){if(Object.is(n,t))return!1;e.add(t)}}return!0},t.every=function(t,n){if("function"!=typeof n)throw new TypeError("test is not a function");let r=-1;for(const e of t)if(!n(e,++r,t))return!1;return!0},t.extent=x,t.fcumsum=function(t,n){const r=new N;let e=-1;return Float64Array.from(t,void 0===n?t=>r.add(+t||0):o=>r.add(+n(o,++e,t)||0))},t.filter=function(t,n){if("function"!=typeof n)throw new TypeError("test is not a function");const r=[];let e=-1;for(const o of t)n(o,++e,t)&&r.push(o);return r},t.flatGroup=function(t,...n){return j(I(t,...n),n)},t.flatRollup=function(t,n,...r){return j(R(t,n,...r),r)},t.fsum=function(t,n){const r=new N;if(void 0===n)for(let n of t)(n=+n)&&r.add(n);else{let e=-1;for(let o of t)(o=+n(o,++e,t))&&r.add(o)}return+r},t.greatest=ot,t.greatestIndex=function(t,r=n){if(1===r.length)return $(t,r);let e,o=-1,f=-1;for(const n of t)++f,(o<0?0===r(n,n):r(n,e)>0)&&(e=n,o=f);return o},t.group=F,t.groupSort=function(t,r,e){return(2!==r.length?P(q(t,r,e),(([t,r],[e,o])=>n(r,o)||n(t,e))):P(F(t,e),(([t,e],[o,f])=>r(e,f)||n(t,o)))).map((([t])=>t))},t.groups=I,t.histogram=Y,t.index=function(t,...n){return U(t,T,O,n)},t.indexes=function(t,...n){return U(t,Array.from,O,n)},t.intersection=function(t,...n){t=new InternSet(t),n=n.map(dt);t:for(const r of t)for(const e of n)if(!e.has(r)){t.delete(r);continue t}return t},t.least=function(t,r=n){let e,o=!1;if(1===r.length){let f;for(const i of t){const t=r(i);(o?n(t,f)<0:0===n(t,t))&&(e=i,f=t,o=!0)}}else for(const n of t)(o?r(n,e)<0:0===r(n,n))&&(e=n,o=!0);return e},t.leastIndex=lt,t.map=function(t,n){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");if("function"!=typeof n)throw new TypeError("mapper is not a function");return Array.from(t,((r,e)=>n(r,e,t)))},t.max=Z,t.maxIndex=$,t.mean=function(t,n){let r=0,e=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(++r,e+=n);else{let o=-1;for(let f of t)null!=(f=n(f,++o,t))&&(f=+f)>=f&&(++r,e+=f)}if(r)return e/r},t.median=function(t,n){return ft(t,.5,n)},t.medianIndex=function(t,n){return it(t,.5,n)},t.merge=function(t){return Array.from(function*(t){for(const n of t)yield*n}(t))},t.min=tt,t.minIndex=nt,t.mode=function(t,n){const r=new InternMap;if(void 0===n)for(let n of t)null!=n&&n>=n&&r.set(n,(r.get(n)||0)+1);else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&o>=o&&r.set(o,(r.get(o)||0)+1)}let e,o=0;for(const[t,n]of r)n>o&&(o=n,e=t);return e},t.nice=W,t.pairs=function(t,n=ut){const r=[];let e,o=!1;for(const f of t)o&&r.push(n(e,f)),e=f,o=!0;return r},t.permute=L,t.quantile=ft,t.quantileIndex=it,t.quantileSorted=function(t,n,r=f){if((e=t.length)&&!isNaN(n=+n)){if(n<=0||e<2)return+r(t[0],0,t);if(n>=1)return+r(t[e-1],e-1,t);var e,o=(e-1)*n,i=Math.floor(o),u=+r(t[i],i,t);return u+(+r(t[i+1],i+1,t)-u)*(o-i)}},t.quickselect=rt,t.range=function(t,n,r){t=+t,n=+n,r=(o=arguments.length)<2?(n=t,t=0,1):o<3?1:+r;for(var e=-1,o=0|Math.max(0,Math.ceil((n-t)/r)),f=new Array(o);++e<o;)f[e]=t+e*r;return f},t.rank=function(t,r=n){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");let e=Array.from(t);const o=new Float64Array(e.length);2!==r.length&&(e=e.map(r),r=n);const f=(t,n)=>r(e[t],e[n]);let i,u;return(t=Uint32Array.from(e,((t,n)=>n))).sort(r===n?(t,n)=>C(e[t],e[n]):z(f)),t.forEach(((t,n)=>{const r=f(t,void 0===i?t:i);r>=0?((void 0===i||r>0)&&(i=t,u=n),o[t]=u):o[t]=NaN})),o},t.reduce=function(t,n,r){if("function"!=typeof n)throw new TypeError("reducer is not a function");const e=t[Symbol.iterator]();let o,f,i=-1;if(arguments.length<3){if(({done:o,value:r}=e.next()),o)return;++i}for(;({done:o,value:f}=e.next()),!o;)r=n(r,f,++i,t);return r},t.reverse=function(t){if("function"!=typeof t[Symbol.iterator])throw new TypeError("values is not iterable");return Array.from(t).reverse()},t.rollup=q,t.rollups=R,t.scan=function(t,n){const r=lt(t,n);return r<0?void 0:r},t.shuffle=ct,t.shuffler=st,t.some=function(t,n){if("function"!=typeof n)throw new TypeError("test is not a function");let r=-1;for(const e of t)if(n(e,++r,t))return!0;return!1},t.sort=P,t.subset=function(t,n){return pt(n,t)},t.sum=function(t,n){let r=0;if(void 0===n)for(let n of t)(n=+n)&&(r+=n);else{let e=-1;for(let o of t)(o=+n(o,++e,t))&&(r+=o)}return r},t.superset=pt,t.thresholdFreedmanDiaconis=function(t,n,r){const e=g(t),o=ft(t,.75)-ft(t,.25);return e&&o?Math.ceil((r-n)/(2*o*Math.pow(e,-1/3))):1},t.thresholdScott=function(t,n,r){const e=g(t),o=A(t);return e&&o?Math.ceil((r-n)*Math.cbrt(e)/(3.49*o)):1},t.thresholdSturges=X,t.tickIncrement=V,t.tickStep=function(t,n,r){r=+r;const e=(n=+n)<(t=+t),o=e?V(n,t,r):V(t,n,r);return(e?-1:1)*(o<0?1/-o:o)},t.ticks=Q,t.transpose=at,t.union=function(...t){const n=new InternSet;for(const r of t)for(const t of r)n.add(t);return n},t.variance=b,t.zip=function(){return at(arguments)}}));
Index: node_modules/d3-array/package.json
===================================================================
--- node_modules/d3-array/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+{
+  "name": "d3-array",
+  "version": "3.2.4",
+  "description": "Array manipulation, ordering, searching, summarizing, etc.",
+  "homepage": "https://d3js.org/d3-array/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-array.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "histogram",
+    "bisect",
+    "shuffle",
+    "statistics",
+    "search",
+    "sort",
+    "array"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-array.min.js",
+  "unpkg": "dist/d3-array.min.js",
+  "exports": {
+    "umd": "./dist/d3-array.min.js",
+    "default": "./src/index.js"
+  },
+  "sideEffects": false,
+  "dependencies": {
+    "internmap": "1 - 2"
+  },
+  "devDependencies": {
+    "@rollup/plugin-node-resolve": "15",
+    "d3-dsv": "3",
+    "d3-random": "2 - 3",
+    "eslint": "8",
+    "jsdom": "21",
+    "mocha": "10",
+    "rollup": "3",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-array/src/array.js
===================================================================
--- node_modules/d3-array/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+var array = Array.prototype;
+
+export var slice = array.slice;
+export var map = array.map;
Index: node_modules/d3-array/src/ascending.js
===================================================================
--- node_modules/d3-array/src/ascending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/ascending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default function ascending(a, b) {
+  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+}
Index: node_modules/d3-array/src/bin.js
===================================================================
--- node_modules/d3-array/src/bin.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/bin.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,125 @@
+import {slice} from "./array.js";
+import bisect from "./bisect.js";
+import constant from "./constant.js";
+import extent from "./extent.js";
+import identity from "./identity.js";
+import nice from "./nice.js";
+import ticks, {tickIncrement} from "./ticks.js";
+import sturges from "./threshold/sturges.js";
+
+export default function bin() {
+  var value = identity,
+      domain = extent,
+      threshold = sturges;
+
+  function histogram(data) {
+    if (!Array.isArray(data)) data = Array.from(data);
+
+    var i,
+        n = data.length,
+        x,
+        step,
+        values = new Array(n);
+
+    for (i = 0; i < n; ++i) {
+      values[i] = value(data[i], i, data);
+    }
+
+    var xz = domain(values),
+        x0 = xz[0],
+        x1 = xz[1],
+        tz = threshold(values, x0, x1);
+
+    // Convert number of thresholds into uniform thresholds, and nice the
+    // default domain accordingly.
+    if (!Array.isArray(tz)) {
+      const max = x1, tn = +tz;
+      if (domain === extent) [x0, x1] = nice(x0, x1, tn);
+      tz = ticks(x0, x1, tn);
+
+      // If the domain is aligned with the first tick (which it will by
+      // default), then we can use quantization rather than bisection to bin
+      // values, which is substantially faster.
+      if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);
+
+      // If the last threshold is coincident with the domain’s upper bound, the
+      // last bin will be zero-width. If the default domain is used, and this
+      // last threshold is coincident with the maximum input value, we can
+      // extend the niced upper bound by one tick to ensure uniform bin widths;
+      // otherwise, we simply remove the last threshold. Note that we don’t
+      // coerce values or the domain to numbers, and thus must be careful to
+      // compare order (>=) rather than strict equality (===)!
+      if (tz[tz.length - 1] >= x1) {
+        if (max >= x1 && domain === extent) {
+          const step = tickIncrement(x0, x1, tn);
+          if (isFinite(step)) {
+            if (step > 0) {
+              x1 = (Math.floor(x1 / step) + 1) * step;
+            } else if (step < 0) {
+              x1 = (Math.ceil(x1 * -step) + 1) / -step;
+            }
+          }
+        } else {
+          tz.pop();
+        }
+      }
+    }
+
+    // Remove any thresholds outside the domain.
+    // Be careful not to mutate an array owned by the user!
+    var m = tz.length, a = 0, b = m;
+    while (tz[a] <= x0) ++a;
+    while (tz[b - 1] > x1) --b;
+    if (a || b < m) tz = tz.slice(a, b), m = b - a;
+
+    var bins = new Array(m + 1),
+        bin;
+
+    // Initialize bins.
+    for (i = 0; i <= m; ++i) {
+      bin = bins[i] = [];
+      bin.x0 = i > 0 ? tz[i - 1] : x0;
+      bin.x1 = i < m ? tz[i] : x1;
+    }
+
+    // Assign data to bins by value, ignoring any outside the domain.
+    if (isFinite(step)) {
+      if (step > 0) {
+        for (i = 0; i < n; ++i) {
+          if ((x = values[i]) != null && x0 <= x && x <= x1) {
+            bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);
+          }
+        }
+      } else if (step < 0) {
+        for (i = 0; i < n; ++i) {
+          if ((x = values[i]) != null && x0 <= x && x <= x1) {
+            const j = Math.floor((x0 - x) * step);
+            bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding
+          }
+        }
+      }
+    } else {
+      for (i = 0; i < n; ++i) {
+        if ((x = values[i]) != null && x0 <= x && x <= x1) {
+          bins[bisect(tz, x, 0, m)].push(data[i]);
+        }
+      }
+    }
+
+    return bins;
+  }
+
+  histogram.value = function(_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
+  };
+
+  histogram.domain = function(_) {
+    return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
+  };
+
+  histogram.thresholds = function(_) {
+    return arguments.length ? (threshold = typeof _ === "function" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;
+  };
+
+  return histogram;
+}
Index: node_modules/d3-array/src/bisect.js
===================================================================
--- node_modules/d3-array/src/bisect.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/bisect.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import ascending from "./ascending.js";
+import bisector from "./bisector.js";
+import number from "./number.js";
+
+const ascendingBisect = bisector(ascending);
+export const bisectRight = ascendingBisect.right;
+export const bisectLeft = ascendingBisect.left;
+export const bisectCenter = bisector(number).center;
+export default bisectRight;
Index: node_modules/d3-array/src/bisector.js
===================================================================
--- node_modules/d3-array/src/bisector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/bisector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+import ascending from "./ascending.js";
+import descending from "./descending.js";
+
+export default function bisector(f) {
+  let compare1, compare2, delta;
+
+  // If an accessor is specified, promote it to a comparator. In this case we
+  // can test whether the search value is (self-) comparable. We can’t do this
+  // for a comparator (except for specific, known comparators) because we can’t
+  // tell if the comparator is symmetric, and an asymmetric comparator can’t be
+  // used to test whether a single value is comparable.
+  if (f.length !== 2) {
+    compare1 = ascending;
+    compare2 = (d, x) => ascending(f(d), x);
+    delta = (d, x) => f(d) - x;
+  } else {
+    compare1 = f === ascending || f === descending ? f : zero;
+    compare2 = f;
+    delta = f;
+  }
+
+  function left(a, x, lo = 0, hi = a.length) {
+    if (lo < hi) {
+      if (compare1(x, x) !== 0) return hi;
+      do {
+        const mid = (lo + hi) >>> 1;
+        if (compare2(a[mid], x) < 0) lo = mid + 1;
+        else hi = mid;
+      } while (lo < hi);
+    }
+    return lo;
+  }
+
+  function right(a, x, lo = 0, hi = a.length) {
+    if (lo < hi) {
+      if (compare1(x, x) !== 0) return hi;
+      do {
+        const mid = (lo + hi) >>> 1;
+        if (compare2(a[mid], x) <= 0) lo = mid + 1;
+        else hi = mid;
+      } while (lo < hi);
+    }
+    return lo;
+  }
+
+  function center(a, x, lo = 0, hi = a.length) {
+    const i = left(a, x, lo, hi - 1);
+    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
+  }
+
+  return {left, center, right};
+}
+
+function zero() {
+  return 0;
+}
Index: node_modules/d3-array/src/blur.js
===================================================================
--- node_modules/d3-array/src/blur.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/blur.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,115 @@
+export function blur(values, r) {
+  if (!((r = +r) >= 0)) throw new RangeError("invalid r");
+  let length = values.length;
+  if (!((length = Math.floor(length)) >= 0)) throw new RangeError("invalid length");
+  if (!length || !r) return values;
+  const blur = blurf(r);
+  const temp = values.slice();
+  blur(values, temp, 0, length, 1);
+  blur(temp, values, 0, length, 1);
+  blur(values, temp, 0, length, 1);
+  return values;
+}
+
+export const blur2 = Blur2(blurf);
+
+export const blurImage = Blur2(blurfImage);
+
+function Blur2(blur) {
+  return function(data, rx, ry = rx) {
+    if (!((rx = +rx) >= 0)) throw new RangeError("invalid rx");
+    if (!((ry = +ry) >= 0)) throw new RangeError("invalid ry");
+    let {data: values, width, height} = data;
+    if (!((width = Math.floor(width)) >= 0)) throw new RangeError("invalid width");
+    if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError("invalid height");
+    if (!width || !height || (!rx && !ry)) return data;
+    const blurx = rx && blur(rx);
+    const blury = ry && blur(ry);
+    const temp = values.slice();
+    if (blurx && blury) {
+      blurh(blurx, temp, values, width, height);
+      blurh(blurx, values, temp, width, height);
+      blurh(blurx, temp, values, width, height);
+      blurv(blury, values, temp, width, height);
+      blurv(blury, temp, values, width, height);
+      blurv(blury, values, temp, width, height);
+    } else if (blurx) {
+      blurh(blurx, values, temp, width, height);
+      blurh(blurx, temp, values, width, height);
+      blurh(blurx, values, temp, width, height);
+    } else if (blury) {
+      blurv(blury, values, temp, width, height);
+      blurv(blury, temp, values, width, height);
+      blurv(blury, values, temp, width, height);
+    }
+    return data;
+  };
+}
+
+function blurh(blur, T, S, w, h) {
+  for (let y = 0, n = w * h; y < n;) {
+    blur(T, S, y, y += w, 1);
+  }
+}
+
+function blurv(blur, T, S, w, h) {
+  for (let x = 0, n = w * h; x < w; ++x) {
+    blur(T, S, x, x + n, w);
+  }
+}
+
+function blurfImage(radius) {
+  const blur = blurf(radius);
+  return (T, S, start, stop, step) => {
+    start <<= 2, stop <<= 2, step <<= 2;
+    blur(T, S, start + 0, stop + 0, step);
+    blur(T, S, start + 1, stop + 1, step);
+    blur(T, S, start + 2, stop + 2, step);
+    blur(T, S, start + 3, stop + 3, step);
+  };
+}
+
+// Given a target array T, a source array S, sets each value T[i] to the average
+// of {S[i - r], …, S[i], …, S[i + r]}, where r = ⌊radius⌋, start <= i < stop,
+// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between
+// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an
+// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted
+// according to r - ⌊radius⌋.
+function blurf(radius) {
+  const radius0 = Math.floor(radius);
+  if (radius0 === radius) return bluri(radius);
+  const t = radius - radius0;
+  const w = 2 * radius + 1;
+  return (T, S, start, stop, step) => { // stop must be aligned!
+    if (!((stop -= step) >= start)) return; // inclusive stop
+    let sum = radius0 * S[start];
+    const s0 = step * radius0;
+    const s1 = s0 + step;
+    for (let i = start, j = start + s0; i < j; i += step) {
+      sum += S[Math.min(stop, i)];
+    }
+    for (let i = start, j = stop; i <= j; i += step) {
+      sum += S[Math.min(stop, i + s0)];
+      T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w;
+      sum -= S[Math.max(start, i - s0)];
+    }
+  };
+}
+
+// Like blurf, but optimized for integer radius.
+function bluri(radius) {
+  const w = 2 * radius + 1;
+  return (T, S, start, stop, step) => { // stop must be aligned!
+    if (!((stop -= step) >= start)) return; // inclusive stop
+    let sum = radius * S[start];
+    const s = step * radius;
+    for (let i = start, j = start + s; i < j; i += step) {
+      sum += S[Math.min(stop, i)];
+    }
+    for (let i = start, j = stop; i <= j; i += step) {
+      sum += S[Math.min(stop, i + s)];
+      T[i] = sum / w;
+      sum -= S[Math.max(start, i - s)];
+    }
+  };
+}
Index: node_modules/d3-array/src/constant.js
===================================================================
--- node_modules/d3-array/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default function constant(x) {
+  return () => x;
+}
Index: node_modules/d3-array/src/count.js
===================================================================
--- node_modules/d3-array/src/count.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/count.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+export default function count(values, valueof) {
+  let count = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        ++count;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        ++count;
+      }
+    }
+  }
+  return count;
+}
Index: node_modules/d3-array/src/cross.js
===================================================================
--- node_modules/d3-array/src/cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+function length(array) {
+  return array.length | 0;
+}
+
+function empty(length) {
+  return !(length > 0);
+}
+
+function arrayify(values) {
+  return typeof values !== "object" || "length" in values ? values : Array.from(values);
+}
+
+function reducer(reduce) {
+  return values => reduce(...values);
+}
+
+export default function cross(...values) {
+  const reduce = typeof values[values.length - 1] === "function" && reducer(values.pop());
+  values = values.map(arrayify);
+  const lengths = values.map(length);
+  const j = values.length - 1;
+  const index = new Array(j + 1).fill(0);
+  const product = [];
+  if (j < 0 || lengths.some(empty)) return product;
+  while (true) {
+    product.push(index.map((j, i) => values[i][j]));
+    let i = j;
+    while (++index[i] === lengths[i]) {
+      if (i === 0) return reduce ? product.map(reduce) : product;
+      index[i--] = 0;
+    }
+  }
+}
Index: node_modules/d3-array/src/cumsum.js
===================================================================
--- node_modules/d3-array/src/cumsum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/cumsum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export default function cumsum(values, valueof) {
+  var sum = 0, index = 0;
+  return Float64Array.from(values, valueof === undefined
+    ? v => (sum += +v || 0)
+    : v => (sum += +valueof(v, index++, values) || 0));
+}
Index: node_modules/d3-array/src/descending.js
===================================================================
--- node_modules/d3-array/src/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+export default function descending(a, b) {
+  return a == null || b == null ? NaN
+    : b < a ? -1
+    : b > a ? 1
+    : b >= a ? 0
+    : NaN;
+}
Index: node_modules/d3-array/src/deviation.js
===================================================================
--- node_modules/d3-array/src/deviation.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/deviation.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import variance from "./variance.js";
+
+export default function deviation(values, valueof) {
+  const v = variance(values, valueof);
+  return v ? Math.sqrt(v) : v;
+}
Index: node_modules/d3-array/src/difference.js
===================================================================
--- node_modules/d3-array/src/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import {InternSet} from "internmap";
+
+export default function difference(values, ...others) {
+  values = new InternSet(values);
+  for (const other of others) {
+    for (const value of other) {
+      values.delete(value);
+    }
+  }
+  return values;
+}
Index: node_modules/d3-array/src/disjoint.js
===================================================================
--- node_modules/d3-array/src/disjoint.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/disjoint.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import {InternSet} from "internmap";
+
+export default function disjoint(values, other) {
+  const iterator = other[Symbol.iterator](), set = new InternSet();
+  for (const v of values) {
+    if (set.has(v)) return false;
+    let value, done;
+    while (({value, done} = iterator.next())) {
+      if (done) break;
+      if (Object.is(v, value)) return false;
+      set.add(value);
+    }
+  }
+  return true;
+}
Index: node_modules/d3-array/src/every.js
===================================================================
--- node_modules/d3-array/src/every.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/every.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+export default function every(values, test) {
+  if (typeof test !== "function") throw new TypeError("test is not a function");
+  let index = -1;
+  for (const value of values) {
+    if (!test(value, ++index, values)) {
+      return false;
+    }
+  }
+  return true;
+}
Index: node_modules/d3-array/src/extent.js
===================================================================
--- node_modules/d3-array/src/extent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/extent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+export default function extent(values, valueof) {
+  let min;
+  let max;
+  if (valueof === undefined) {
+    for (const value of values) {
+      if (value != null) {
+        if (min === undefined) {
+          if (value >= value) min = max = value;
+        } else {
+          if (min > value) min = value;
+          if (max < value) max = value;
+        }
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null) {
+        if (min === undefined) {
+          if (value >= value) min = max = value;
+        } else {
+          if (min > value) min = value;
+          if (max < value) max = value;
+        }
+      }
+    }
+  }
+  return [min, max];
+}
Index: node_modules/d3-array/src/filter.js
===================================================================
--- node_modules/d3-array/src/filter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/filter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+export default function filter(values, test) {
+  if (typeof test !== "function") throw new TypeError("test is not a function");
+  const array = [];
+  let index = -1;
+  for (const value of values) {
+    if (test(value, ++index, values)) {
+      array.push(value);
+    }
+  }
+  return array;
+}
Index: node_modules/d3-array/src/fsum.js
===================================================================
--- node_modules/d3-array/src/fsum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/fsum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423
+export class Adder {
+  constructor() {
+    this._partials = new Float64Array(32);
+    this._n = 0;
+  }
+  add(x) {
+    const p = this._partials;
+    let i = 0;
+    for (let j = 0; j < this._n && j < 32; j++) {
+      const y = p[j],
+        hi = x + y,
+        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);
+      if (lo) p[i++] = lo;
+      x = hi;
+    }
+    p[i] = x;
+    this._n = i + 1;
+    return this;
+  }
+  valueOf() {
+    const p = this._partials;
+    let n = this._n, x, y, lo, hi = 0;
+    if (n > 0) {
+      hi = p[--n];
+      while (n > 0) {
+        x = hi;
+        y = p[--n];
+        hi = x + y;
+        lo = y - (hi - x);
+        if (lo) break;
+      }
+      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {
+        y = lo * 2;
+        x = hi + y;
+        if (y == x - hi) hi = x;
+      }
+    }
+    return hi;
+  }
+}
+
+export function fsum(values, valueof) {
+  const adder = new Adder();
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value = +value) {
+        adder.add(value);
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if (value = +valueof(value, ++index, values)) {
+        adder.add(value);
+      }
+    }
+  }
+  return +adder;
+}
+
+export function fcumsum(values, valueof) {
+  const adder = new Adder();
+  let index = -1;
+  return Float64Array.from(values, valueof === undefined
+      ? v => adder.add(+v || 0)
+      : v => adder.add(+valueof(v, ++index, values) || 0)
+  );
+}
Index: node_modules/d3-array/src/greatest.js
===================================================================
--- node_modules/d3-array/src/greatest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/greatest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import ascending from "./ascending.js";
+
+export default function greatest(values, compare = ascending) {
+  let max;
+  let defined = false;
+  if (compare.length === 1) {
+    let maxValue;
+    for (const element of values) {
+      const value = compare(element);
+      if (defined
+          ? ascending(value, maxValue) > 0
+          : ascending(value, value) === 0) {
+        max = element;
+        maxValue = value;
+        defined = true;
+      }
+    }
+  } else {
+    for (const value of values) {
+      if (defined
+          ? compare(value, max) > 0
+          : compare(value, value) === 0) {
+        max = value;
+        defined = true;
+      }
+    }
+  }
+  return max;
+}
Index: node_modules/d3-array/src/greatestIndex.js
===================================================================
--- node_modules/d3-array/src/greatestIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/greatestIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import ascending from "./ascending.js";
+import maxIndex from "./maxIndex.js";
+
+export default function greatestIndex(values, compare = ascending) {
+  if (compare.length === 1) return maxIndex(values, compare);
+  let maxValue;
+  let max = -1;
+  let index = -1;
+  for (const value of values) {
+    ++index;
+    if (max < 0
+        ? compare(value, value) === 0
+        : compare(value, maxValue) > 0) {
+      maxValue = value;
+      max = index;
+    }
+  }
+  return max;
+}
Index: node_modules/d3-array/src/group.js
===================================================================
--- node_modules/d3-array/src/group.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/group.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+import {InternMap} from "internmap";
+import identity from "./identity.js";
+
+export default function group(values, ...keys) {
+  return nest(values, identity, identity, keys);
+}
+
+export function groups(values, ...keys) {
+  return nest(values, Array.from, identity, keys);
+}
+
+function flatten(groups, keys) {
+  for (let i = 1, n = keys.length; i < n; ++i) {
+    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));
+  }
+  return groups;
+}
+
+export function flatGroup(values, ...keys) {
+  return flatten(groups(values, ...keys), keys);
+}
+
+export function flatRollup(values, reduce, ...keys) {
+  return flatten(rollups(values, reduce, ...keys), keys);
+}
+
+export function rollup(values, reduce, ...keys) {
+  return nest(values, identity, reduce, keys);
+}
+
+export function rollups(values, reduce, ...keys) {
+  return nest(values, Array.from, reduce, keys);
+}
+
+export function index(values, ...keys) {
+  return nest(values, identity, unique, keys);
+}
+
+export function indexes(values, ...keys) {
+  return nest(values, Array.from, unique, keys);
+}
+
+function unique(values) {
+  if (values.length !== 1) throw new Error("duplicate key");
+  return values[0];
+}
+
+function nest(values, map, reduce, keys) {
+  return (function regroup(values, i) {
+    if (i >= keys.length) return reduce(values);
+    const groups = new InternMap();
+    const keyof = keys[i++];
+    let index = -1;
+    for (const value of values) {
+      const key = keyof(value, ++index, values);
+      const group = groups.get(key);
+      if (group) group.push(value);
+      else groups.set(key, [value]);
+    }
+    for (const [key, values] of groups) {
+      groups.set(key, regroup(values, i));
+    }
+    return map(groups);
+  })(values, 0);
+}
Index: node_modules/d3-array/src/groupSort.js
===================================================================
--- node_modules/d3-array/src/groupSort.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/groupSort.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import ascending from "./ascending.js";
+import group, {rollup} from "./group.js";
+import sort from "./sort.js";
+
+export default function groupSort(values, reduce, key) {
+  return (reduce.length !== 2
+    ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))
+    : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))
+    .map(([key]) => key);
+}
Index: node_modules/d3-array/src/identity.js
===================================================================
--- node_modules/d3-array/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default function identity(x) {
+  return x;
+}
Index: node_modules/d3-array/src/index.js
===================================================================
--- node_modules/d3-array/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+export {default as bisect, bisectRight, bisectLeft, bisectCenter} from "./bisect.js";
+export {default as ascending} from "./ascending.js";
+export {default as bisector} from "./bisector.js";
+export {blur, blur2, blurImage} from "./blur.js";
+export {default as count} from "./count.js";
+export {default as cross} from "./cross.js";
+export {default as cumsum} from "./cumsum.js";
+export {default as descending} from "./descending.js";
+export {default as deviation} from "./deviation.js";
+export {default as extent} from "./extent.js";
+export {Adder, fsum, fcumsum} from "./fsum.js";
+export {default as group, flatGroup, flatRollup, groups, index, indexes, rollup, rollups} from "./group.js";
+export {default as groupSort} from "./groupSort.js";
+export {default as bin, default as histogram} from "./bin.js"; // Deprecated; use bin.
+export {default as thresholdFreedmanDiaconis} from "./threshold/freedmanDiaconis.js";
+export {default as thresholdScott} from "./threshold/scott.js";
+export {default as thresholdSturges} from "./threshold/sturges.js";
+export {default as max} from "./max.js";
+export {default as maxIndex} from "./maxIndex.js";
+export {default as mean} from "./mean.js";
+export {default as median, medianIndex} from "./median.js";
+export {default as merge} from "./merge.js";
+export {default as min} from "./min.js";
+export {default as minIndex} from "./minIndex.js";
+export {default as mode} from "./mode.js";
+export {default as nice} from "./nice.js";
+export {default as pairs} from "./pairs.js";
+export {default as permute} from "./permute.js";
+export {default as quantile, quantileIndex, quantileSorted} from "./quantile.js";
+export {default as quickselect} from "./quickselect.js";
+export {default as range} from "./range.js";
+export {default as rank} from "./rank.js";
+export {default as least} from "./least.js";
+export {default as leastIndex} from "./leastIndex.js";
+export {default as greatest} from "./greatest.js";
+export {default as greatestIndex} from "./greatestIndex.js";
+export {default as scan} from "./scan.js"; // Deprecated; use leastIndex.
+export {default as shuffle, shuffler} from "./shuffle.js";
+export {default as sum} from "./sum.js";
+export {default as ticks, tickIncrement, tickStep} from "./ticks.js";
+export {default as transpose} from "./transpose.js";
+export {default as variance} from "./variance.js";
+export {default as zip} from "./zip.js";
+export {default as every} from "./every.js";
+export {default as some} from "./some.js";
+export {default as filter} from "./filter.js";
+export {default as map} from "./map.js";
+export {default as reduce} from "./reduce.js";
+export {default as reverse} from "./reverse.js";
+export {default as sort} from "./sort.js";
+export {default as difference} from "./difference.js";
+export {default as disjoint} from "./disjoint.js";
+export {default as intersection} from "./intersection.js";
+export {default as subset} from "./subset.js";
+export {default as superset} from "./superset.js";
+export {default as union} from "./union.js";
+export {InternMap, InternSet} from "internmap";
Index: node_modules/d3-array/src/intersection.js
===================================================================
--- node_modules/d3-array/src/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import {InternSet} from "internmap";
+
+export default function intersection(values, ...others) {
+  values = new InternSet(values);
+  others = others.map(set);
+  out: for (const value of values) {
+    for (const other of others) {
+      if (!other.has(value)) {
+        values.delete(value);
+        continue out;
+      }
+    }
+  }
+  return values;
+}
+
+function set(values) {
+  return values instanceof InternSet ? values : new InternSet(values);
+}
Index: node_modules/d3-array/src/least.js
===================================================================
--- node_modules/d3-array/src/least.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/least.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import ascending from "./ascending.js";
+
+export default function least(values, compare = ascending) {
+  let min;
+  let defined = false;
+  if (compare.length === 1) {
+    let minValue;
+    for (const element of values) {
+      const value = compare(element);
+      if (defined
+          ? ascending(value, minValue) < 0
+          : ascending(value, value) === 0) {
+        min = element;
+        minValue = value;
+        defined = true;
+      }
+    }
+  } else {
+    for (const value of values) {
+      if (defined
+          ? compare(value, min) < 0
+          : compare(value, value) === 0) {
+        min = value;
+        defined = true;
+      }
+    }
+  }
+  return min;
+}
Index: node_modules/d3-array/src/leastIndex.js
===================================================================
--- node_modules/d3-array/src/leastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/leastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import ascending from "./ascending.js";
+import minIndex from "./minIndex.js";
+
+export default function leastIndex(values, compare = ascending) {
+  if (compare.length === 1) return minIndex(values, compare);
+  let minValue;
+  let min = -1;
+  let index = -1;
+  for (const value of values) {
+    ++index;
+    if (min < 0
+        ? compare(value, value) === 0
+        : compare(value, minValue) < 0) {
+      minValue = value;
+      min = index;
+    }
+  }
+  return min;
+}
Index: node_modules/d3-array/src/map.js
===================================================================
--- node_modules/d3-array/src/map.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/map.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export default function map(values, mapper) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  if (typeof mapper !== "function") throw new TypeError("mapper is not a function");
+  return Array.from(values, (value, index) => mapper(value, index, values));
+}
Index: node_modules/d3-array/src/max.js
===================================================================
--- node_modules/d3-array/src/max.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/max.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+export default function max(values, valueof) {
+  let max;
+  if (valueof === undefined) {
+    for (const value of values) {
+      if (value != null
+          && (max < value || (max === undefined && value >= value))) {
+        max = value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null
+          && (max < value || (max === undefined && value >= value))) {
+        max = value;
+      }
+    }
+  }
+  return max;
+}
Index: node_modules/d3-array/src/maxIndex.js
===================================================================
--- node_modules/d3-array/src/maxIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/maxIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+export default function maxIndex(values, valueof) {
+  let max;
+  let maxIndex = -1;
+  let index = -1;
+  if (valueof === undefined) {
+    for (const value of values) {
+      ++index;
+      if (value != null
+          && (max < value || (max === undefined && value >= value))) {
+        max = value, maxIndex = index;
+      }
+    }
+  } else {
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null
+          && (max < value || (max === undefined && value >= value))) {
+        max = value, maxIndex = index;
+      }
+    }
+  }
+  return maxIndex;
+}
Index: node_modules/d3-array/src/mean.js
===================================================================
--- node_modules/d3-array/src/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+export default function mean(values, valueof) {
+  let count = 0;
+  let sum = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        ++count, sum += value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        ++count, sum += value;
+      }
+    }
+  }
+  if (count) return sum / count;
+}
Index: node_modules/d3-array/src/median.js
===================================================================
--- node_modules/d3-array/src/median.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/median.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import quantile, {quantileIndex} from "./quantile.js";
+
+export default function median(values, valueof) {
+  return quantile(values, 0.5, valueof);
+}
+
+export function medianIndex(values, valueof) {
+  return quantileIndex(values, 0.5, valueof);
+}
Index: node_modules/d3-array/src/merge.js
===================================================================
--- node_modules/d3-array/src/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+function* flatten(arrays) {
+  for (const array of arrays) {
+    yield* array;
+  }
+}
+
+export default function merge(arrays) {
+  return Array.from(flatten(arrays));
+}
Index: node_modules/d3-array/src/min.js
===================================================================
--- node_modules/d3-array/src/min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+export default function min(values, valueof) {
+  let min;
+  if (valueof === undefined) {
+    for (const value of values) {
+      if (value != null
+          && (min > value || (min === undefined && value >= value))) {
+        min = value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null
+          && (min > value || (min === undefined && value >= value))) {
+        min = value;
+      }
+    }
+  }
+  return min;
+}
Index: node_modules/d3-array/src/minIndex.js
===================================================================
--- node_modules/d3-array/src/minIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/minIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+export default function minIndex(values, valueof) {
+  let min;
+  let minIndex = -1;
+  let index = -1;
+  if (valueof === undefined) {
+    for (const value of values) {
+      ++index;
+      if (value != null
+          && (min > value || (min === undefined && value >= value))) {
+        min = value, minIndex = index;
+      }
+    }
+  } else {
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null
+          && (min > value || (min === undefined && value >= value))) {
+        min = value, minIndex = index;
+      }
+    }
+  }
+  return minIndex;
+}
Index: node_modules/d3-array/src/mode.js
===================================================================
--- node_modules/d3-array/src/mode.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/mode.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import {InternMap} from "internmap";
+
+export default function mode(values, valueof) {
+  const counts = new InternMap();
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && value >= value) {
+        counts.set(value, (counts.get(value) || 0) + 1);
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && value >= value) {
+        counts.set(value, (counts.get(value) || 0) + 1);
+      }
+    }
+  }
+  let modeValue;
+  let modeCount = 0;
+  for (const [value, count] of counts) {
+    if (count > modeCount) {
+      modeCount = count;
+      modeValue = value;
+    }
+  }
+  return modeValue;
+}
Index: node_modules/d3-array/src/nice.js
===================================================================
--- node_modules/d3-array/src/nice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/nice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import {tickIncrement} from "./ticks.js";
+
+export default function nice(start, stop, count) {
+  let prestep;
+  while (true) {
+    const step = tickIncrement(start, stop, count);
+    if (step === prestep || step === 0 || !isFinite(step)) {
+      return [start, stop];
+    } else if (step > 0) {
+      start = Math.floor(start / step) * step;
+      stop = Math.ceil(stop / step) * step;
+    } else if (step < 0) {
+      start = Math.ceil(start * step) / step;
+      stop = Math.floor(stop * step) / step;
+    }
+    prestep = step;
+  }
+}
Index: node_modules/d3-array/src/number.js
===================================================================
--- node_modules/d3-array/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+export default function number(x) {
+  return x === null ? NaN : +x;
+}
+
+export function* numbers(values, valueof) {
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        yield value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        yield value;
+      }
+    }
+  }
+}
Index: node_modules/d3-array/src/pairs.js
===================================================================
--- node_modules/d3-array/src/pairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/pairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+export default function pairs(values, pairof = pair) {
+  const pairs = [];
+  let previous;
+  let first = false;
+  for (const value of values) {
+    if (first) pairs.push(pairof(previous, value));
+    previous = value;
+    first = true;
+  }
+  return pairs;
+}
+
+export function pair(a, b) {
+  return [a, b];
+}
Index: node_modules/d3-array/src/permute.js
===================================================================
--- node_modules/d3-array/src/permute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/permute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default function permute(source, keys) {
+  return Array.from(keys, key => source[key]);
+}
Index: node_modules/d3-array/src/quantile.js
===================================================================
--- node_modules/d3-array/src/quantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/quantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+import max from "./max.js";
+import maxIndex from "./maxIndex.js";
+import min from "./min.js";
+import minIndex from "./minIndex.js";
+import quickselect from "./quickselect.js";
+import number, {numbers} from "./number.js";
+import {ascendingDefined} from "./sort.js";
+import greatest from "./greatest.js";
+
+export default function quantile(values, p, valueof) {
+  values = Float64Array.from(numbers(values, valueof));
+  if (!(n = values.length) || isNaN(p = +p)) return;
+  if (p <= 0 || n < 2) return min(values);
+  if (p >= 1) return max(values);
+  var n,
+      i = (n - 1) * p,
+      i0 = Math.floor(i),
+      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),
+      value1 = min(values.subarray(i0 + 1));
+  return value0 + (value1 - value0) * (i - i0);
+}
+
+export function quantileSorted(values, p, valueof = number) {
+  if (!(n = values.length) || isNaN(p = +p)) return;
+  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);
+  if (p >= 1) return +valueof(values[n - 1], n - 1, values);
+  var n,
+      i = (n - 1) * p,
+      i0 = Math.floor(i),
+      value0 = +valueof(values[i0], i0, values),
+      value1 = +valueof(values[i0 + 1], i0 + 1, values);
+  return value0 + (value1 - value0) * (i - i0);
+}
+
+export function quantileIndex(values, p, valueof = number) {
+  if (isNaN(p = +p)) return;
+  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));
+  if (p <= 0) return minIndex(numbers);
+  if (p >= 1) return maxIndex(numbers);
+  var numbers,
+      index = Uint32Array.from(values, (_, i) => i),
+      j = numbers.length - 1,
+      i = Math.floor(j * p);
+  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));
+  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);
+  return i >= 0 ? i : -1;
+}
Index: node_modules/d3-array/src/quickselect.js
===================================================================
--- node_modules/d3-array/src/quickselect.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/quickselect.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+import {ascendingDefined, compareDefined} from "./sort.js";
+
+// Based on https://github.com/mourner/quickselect
+// ISC license, Copyright 2018 Vladimir Agafonkin.
+export default function quickselect(array, k, left = 0, right = Infinity, compare) {
+  k = Math.floor(k);
+  left = Math.floor(Math.max(0, left));
+  right = Math.floor(Math.min(array.length - 1, right));
+
+  if (!(left <= k && k <= right)) return array;
+
+  compare = compare === undefined ? ascendingDefined : compareDefined(compare);
+
+  while (right > left) {
+    if (right - left > 600) {
+      const n = right - left + 1;
+      const m = k - left + 1;
+      const z = Math.log(n);
+      const s = 0.5 * Math.exp(2 * z / 3);
+      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
+      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
+      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
+      quickselect(array, k, newLeft, newRight, compare);
+    }
+
+    const t = array[k];
+    let i = left;
+    let j = right;
+
+    swap(array, left, k);
+    if (compare(array[right], t) > 0) swap(array, left, right);
+
+    while (i < j) {
+      swap(array, i, j), ++i, --j;
+      while (compare(array[i], t) < 0) ++i;
+      while (compare(array[j], t) > 0) --j;
+    }
+
+    if (compare(array[left], t) === 0) swap(array, left, j);
+    else ++j, swap(array, j, right);
+
+    if (j <= k) left = j + 1;
+    if (k <= j) right = j - 1;
+  }
+
+  return array;
+}
+
+function swap(array, i, j) {
+  const t = array[i];
+  array[i] = array[j];
+  array[j] = t;
+}
Index: node_modules/d3-array/src/range.js
===================================================================
--- node_modules/d3-array/src/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+export default function range(start, stop, step) {
+  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
+
+  var i = -1,
+      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
+      range = new Array(n);
+
+  while (++i < n) {
+    range[i] = start + i * step;
+  }
+
+  return range;
+}
Index: node_modules/d3-array/src/rank.js
===================================================================
--- node_modules/d3-array/src/rank.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/rank.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import ascending from "./ascending.js";
+import {ascendingDefined, compareDefined} from "./sort.js";
+
+export default function rank(values, valueof = ascending) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  let V = Array.from(values);
+  const R = new Float64Array(V.length);
+  if (valueof.length !== 2) V = V.map(valueof), valueof = ascending;
+  const compareIndex = (i, j) => valueof(V[i], V[j]);
+  let k, r;
+  values = Uint32Array.from(V, (_, i) => i);
+  // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123
+  values.sort(valueof === ascending ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex));
+  values.forEach((j, i) => {
+      const c = compareIndex(j, k === undefined ? j : k);
+      if (c >= 0) {
+        if (k === undefined || c > 0) k = j, r = i;
+        R[j] = r;
+      } else {
+        R[j] = NaN;
+      }
+    });
+  return R;
+}
Index: node_modules/d3-array/src/reduce.js
===================================================================
--- node_modules/d3-array/src/reduce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/reduce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+export default function reduce(values, reducer, value) {
+  if (typeof reducer !== "function") throw new TypeError("reducer is not a function");
+  const iterator = values[Symbol.iterator]();
+  let done, next, index = -1;
+  if (arguments.length < 3) {
+    ({done, value} = iterator.next());
+    if (done) return;
+    ++index;
+  }
+  while (({done, value: next} = iterator.next()), !done) {
+    value = reducer(value, next, ++index, values);
+  }
+  return value;
+}
Index: node_modules/d3-array/src/reverse.js
===================================================================
--- node_modules/d3-array/src/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+export default function reverse(values) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  return Array.from(values).reverse();
+}
Index: node_modules/d3-array/src/scan.js
===================================================================
--- node_modules/d3-array/src/scan.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/scan.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import leastIndex from "./leastIndex.js";
+
+export default function scan(values, compare) {
+  const index = leastIndex(values, compare);
+  return index < 0 ? undefined : index;
+}
Index: node_modules/d3-array/src/shuffle.js
===================================================================
--- node_modules/d3-array/src/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+export default shuffler(Math.random);
+
+export function shuffler(random) {
+  return function shuffle(array, i0 = 0, i1 = array.length) {
+    let m = i1 - (i0 = +i0);
+    while (m) {
+      const i = random() * m-- | 0, t = array[m + i0];
+      array[m + i0] = array[i + i0];
+      array[i + i0] = t;
+    }
+    return array;
+  };
+}
Index: node_modules/d3-array/src/some.js
===================================================================
--- node_modules/d3-array/src/some.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/some.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+export default function some(values, test) {
+  if (typeof test !== "function") throw new TypeError("test is not a function");
+  let index = -1;
+  for (const value of values) {
+    if (test(value, ++index, values)) {
+      return true;
+    }
+  }
+  return false;
+}
Index: node_modules/d3-array/src/sort.js
===================================================================
--- node_modules/d3-array/src/sort.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/sort.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import ascending from "./ascending.js";
+import permute from "./permute.js";
+
+export default function sort(values, ...F) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  values = Array.from(values);
+  let [f] = F;
+  if ((f && f.length !== 2) || F.length > 1) {
+    const index = Uint32Array.from(values, (d, i) => i);
+    if (F.length > 1) {
+      F = F.map(f => values.map(f));
+      index.sort((i, j) => {
+        for (const f of F) {
+          const c = ascendingDefined(f[i], f[j]);
+          if (c) return c;
+        }
+      });
+    } else {
+      f = values.map(f);
+      index.sort((i, j) => ascendingDefined(f[i], f[j]));
+    }
+    return permute(values, index);
+  }
+  return values.sort(compareDefined(f));
+}
+
+export function compareDefined(compare = ascending) {
+  if (compare === ascending) return ascendingDefined;
+  if (typeof compare !== "function") throw new TypeError("compare is not a function");
+  return (a, b) => {
+    const x = compare(a, b);
+    if (x || x === 0) return x;
+    return (compare(b, b) === 0) - (compare(a, a) === 0);
+  };
+}
+
+export function ascendingDefined(a, b) {
+  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);
+}
Index: node_modules/d3-array/src/subset.js
===================================================================
--- node_modules/d3-array/src/subset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/subset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import superset from "./superset.js";
+
+export default function subset(values, other) {
+  return superset(other, values);
+}
Index: node_modules/d3-array/src/sum.js
===================================================================
--- node_modules/d3-array/src/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+export default function sum(values, valueof) {
+  let sum = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value = +value) {
+        sum += value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if (value = +valueof(value, ++index, values)) {
+        sum += value;
+      }
+    }
+  }
+  return sum;
+}
Index: node_modules/d3-array/src/superset.js
===================================================================
--- node_modules/d3-array/src/superset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/superset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+export default function superset(values, other) {
+  const iterator = values[Symbol.iterator](), set = new Set();
+  for (const o of other) {
+    const io = intern(o);
+    if (set.has(io)) continue;
+    let value, done;
+    while (({value, done} = iterator.next())) {
+      if (done) return false;
+      const ivalue = intern(value);
+      set.add(ivalue);
+      if (Object.is(io, ivalue)) break;
+    }
+  }
+  return true;
+}
+
+function intern(value) {
+  return value !== null && typeof value === "object" ? value.valueOf() : value;
+}
Index: node_modules/d3-array/src/threshold/freedmanDiaconis.js
===================================================================
--- node_modules/d3-array/src/threshold/freedmanDiaconis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/threshold/freedmanDiaconis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import count from "../count.js";
+import quantile from "../quantile.js";
+
+export default function thresholdFreedmanDiaconis(values, min, max) {
+  const c = count(values), d = quantile(values, 0.75) - quantile(values, 0.25);
+  return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;
+}
Index: node_modules/d3-array/src/threshold/scott.js
===================================================================
--- node_modules/d3-array/src/threshold/scott.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/threshold/scott.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import count from "../count.js";
+import deviation from "../deviation.js";
+
+export default function thresholdScott(values, min, max) {
+  const c = count(values), d = deviation(values);
+  return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;
+}
Index: node_modules/d3-array/src/threshold/sturges.js
===================================================================
--- node_modules/d3-array/src/threshold/sturges.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/threshold/sturges.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import count from "../count.js";
+
+export default function thresholdSturges(values) {
+  return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);
+}
Index: node_modules/d3-array/src/ticks.js
===================================================================
--- node_modules/d3-array/src/ticks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/ticks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+const e10 = Math.sqrt(50),
+    e5 = Math.sqrt(10),
+    e2 = Math.sqrt(2);
+
+function tickSpec(start, stop, count) {
+  const step = (stop - start) / Math.max(0, count),
+      power = Math.floor(Math.log10(step)),
+      error = step / Math.pow(10, power),
+      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;
+  let i1, i2, inc;
+  if (power < 0) {
+    inc = Math.pow(10, -power) / factor;
+    i1 = Math.round(start * inc);
+    i2 = Math.round(stop * inc);
+    if (i1 / inc < start) ++i1;
+    if (i2 / inc > stop) --i2;
+    inc = -inc;
+  } else {
+    inc = Math.pow(10, power) * factor;
+    i1 = Math.round(start / inc);
+    i2 = Math.round(stop / inc);
+    if (i1 * inc < start) ++i1;
+    if (i2 * inc > stop) --i2;
+  }
+  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);
+  return [i1, i2, inc];
+}
+
+export default function ticks(start, stop, count) {
+  stop = +stop, start = +start, count = +count;
+  if (!(count > 0)) return [];
+  if (start === stop) return [start];
+  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);
+  if (!(i2 >= i1)) return [];
+  const n = i2 - i1 + 1, ticks = new Array(n);
+  if (reverse) {
+    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;
+    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;
+  } else {
+    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;
+    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;
+  }
+  return ticks;
+}
+
+export function tickIncrement(start, stop, count) {
+  stop = +stop, start = +start, count = +count;
+  return tickSpec(start, stop, count)[2];
+}
+
+export function tickStep(start, stop, count) {
+  stop = +stop, start = +start, count = +count;
+  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);
+  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);
+}
Index: node_modules/d3-array/src/transpose.js
===================================================================
--- node_modules/d3-array/src/transpose.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/transpose.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import min from "./min.js";
+
+export default function transpose(matrix) {
+  if (!(n = matrix.length)) return [];
+  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
+    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
+      row[j] = matrix[j][i];
+    }
+  }
+  return transpose;
+}
+
+function length(d) {
+  return d.length;
+}
Index: node_modules/d3-array/src/union.js
===================================================================
--- node_modules/d3-array/src/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import {InternSet} from "internmap";
+
+export default function union(...others) {
+  const set = new InternSet();
+  for (const other of others) {
+    for (const o of other) {
+      set.add(o);
+    }
+  }
+  return set;
+}
Index: node_modules/d3-array/src/variance.js
===================================================================
--- node_modules/d3-array/src/variance.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/variance.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+export default function variance(values, valueof) {
+  let count = 0;
+  let delta;
+  let mean = 0;
+  let sum = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        delta = value - mean;
+        mean += delta / ++count;
+        sum += delta * (value - mean);
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        delta = value - mean;
+        mean += delta / ++count;
+        sum += delta * (value - mean);
+      }
+    }
+  }
+  if (count > 1) return sum / (count - 1);
+}
Index: node_modules/d3-array/src/zip.js
===================================================================
--- node_modules/d3-array/src/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-array/src/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import transpose from "./transpose.js";
+
+export default function zip() {
+  return transpose(arguments);
+}
Index: node_modules/d3-color/LICENSE
===================================================================
--- node_modules/d3-color/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2022 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-color/README.md
===================================================================
--- node_modules/d3-color/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,203 @@
+# d3-color
+
+Even though your browser understands a lot about colors, it doesn’t offer much help in manipulating colors through JavaScript. The d3-color module therefore provides representations for various color spaces, allowing specification, conversion and manipulation. (Also see [d3-interpolate](https://github.com/d3/d3-interpolate) for color interpolation.)
+
+For example, take the color named “steelblue”:
+
+```js
+const c = d3.color("steelblue"); // {r: 70, g: 130, b: 180, opacity: 1}
+```
+
+Let’s try converting it to HSL:
+
+```js
+const c = d3.hsl("steelblue"); // {h: 207.27…, s: 0.44, l: 0.4902…, opacity: 1}
+```
+
+Now rotate the hue by 90°, bump up the saturation, and format as a string for CSS:
+
+```js
+c.h += 90;
+c.s += 0.2;
+c + ""; // rgb(198, 45, 205)
+```
+
+To fade the color slightly:
+
+```js
+c.opacity = 0.8;
+c + ""; // rgba(198, 45, 205, 0.8)
+```
+
+In addition to the ubiquitous and machine-friendly [RGB](#rgb) and [HSL](#hsl) color space, d3-color supports color spaces that are designed for humans:
+
+* [CIELAB](#lab) (*a.k.a.* “Lab”)
+* [CIELCh<sub>ab</sub>](#lch) (*a.k.a.* “LCh” or “HCL”)
+* Dave Green’s [Cubehelix](#cubehelix)
+
+Cubehelix features monotonic lightness, while CIELAB and its polar form CIELCh<sub>ab</sub> are perceptually uniform.
+
+## Extensions
+
+For additional color spaces, see:
+
+* [d3-cam16](https://github.com/d3/d3-cam16)
+* [d3-cam02](https://github.com/connorgr/d3-cam02)
+* [d3-hsv](https://github.com/d3/d3-hsv)
+* [d3-hcg](https://github.com/d3/d3-hcg)
+* [d3-hsluv](https://github.com/petulla/d3-hsluv)
+
+To measure color differences, see:
+
+* [d3-color-difference](https://github.com/Evercoder/d3-color-difference)
+
+## Installing
+
+If you use npm, `npm install d3-color`. You can also download the [latest release on GitHub](https://github.com/d3/d3-color/releases/latest). For vanilla HTML in modern browsers, import d3-color from Skypack:
+
+```html
+<script type="module">
+
+import {rgb} from "https://cdn.skypack.dev/d3-color@3";
+
+const steelblue = d3.rgb("steelblue");
+
+</script>
+```
+
+For legacy environments, you can load d3-color’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-color@3"></script>
+<script>
+
+const steelblue = d3.rgb("steelblue");
+
+</script>
+```
+
+[Try d3-color in your browser.](https://observablehq.com/collection/@d3/d3-color)
+
+## API Reference
+
+<a name="color" href="#color">#</a> d3.<b>color</b>(<i>specifier</i>) [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Parses the specified [CSS Color Module Level 3](http://www.w3.org/TR/css3-color/#colorunits) *specifier* string, returning an [RGB](#rgb) or [HSL](#hsl) color, along with [CSS Color Module Level 4 hex](https://www.w3.org/TR/css-color-4/#hex-notation) *specifier* strings. If the specifier was not valid, null is returned. Some examples:
+
+* `rgb(255, 255, 255)`
+* `rgb(10%, 20%, 30%)`
+* `rgba(255, 255, 255, 0.4)`
+* `rgba(10%, 20%, 30%, 0.4)`
+* `hsl(120, 50%, 20%)`
+* `hsla(120, 50%, 20%, 0.4)`
+* `#ffeeaa`
+* `#fea`
+* `#ffeeaa22`
+* `#fea2`
+* `steelblue`
+
+The list of supported [named colors](http://www.w3.org/TR/SVG/types.html#ColorKeywords) is specified by CSS.
+
+Note: this function may also be used with `instanceof` to test if an object is a color instance. The same is true of color subclasses, allowing you to test whether a color is in a particular color space.
+
+<a name="color_opacity" href="#color_opacity">#</a> *color*.<b>opacity</b>
+
+This color’s opacity, typically in the range [0, 1].
+
+<a name="color_rgb" href="#color_rgb">#</a> *color*.<b>rgb</b>() [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns the [RGB equivalent](#rgb) of this color. For RGB colors, that’s `this`.
+
+<a name="color_copy" href="#color_copy">#</a> <i>color</i>.<b>copy</b>([<i>values</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns a copy of this color. If *values* is specified, any enumerable own properties of *values* are assigned to the new returned color. For example, to derive a copy of a *color* with opacity 0.5, say
+
+```js
+color.copy({opacity: 0.5})
+```
+
+<a name="color_brighter" href="#color_brighter">#</a> *color*.<b>brighter</b>([<i>k</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns a brighter copy of this color. If *k* is specified, it controls how much brighter the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.
+
+<a name="color_darker" href="#color_darker">#</a> *color*.<b>darker</b>([<i>k</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns a darker copy of this color. If *k* is specified, it controls how much darker the returned color should be. If *k* is not specified, it defaults to 1. The behavior of this method is dependent on the implementing color space.
+
+<a name="color_displayable" href="#color_displayable">#</a> *color*.<b>displayable</b>() [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns true if and only if the color is displayable on standard hardware. For example, this returns false for an RGB color if any channel value is less than zero or greater than 255 when rounded, or if the opacity is not in the range [0, 1].
+
+<a name="color_formatHex" href="#color_formatHex">#</a> *color*.<b>formatHex</b>() [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns a hexadecimal string representing this color in RGB space, such as `#f7eaba`. If this color is not displayable, a suitable displayable color is returned instead. For example, RGB channel values greater than 255 are clamped to 255.
+
+<a name="color_formatHsl" href="#color_formatHsl">#</a> *color*.<b>formatHsl</b>() [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns a string representing this color according to the [CSS Color Module Level 3 specification](https://www.w3.org/TR/css-color-3/#hsl-color), such as `hsl(257, 50%, 80%)` or `hsla(257, 50%, 80%, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping S and L channel values to the interval [0, 100].
+
+<a name="color_formatRgb" href="#color_formatRgb">#</a> *color*.<b>formatRgb</b>() [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns a string representing this color according to the [CSS Object Model specification](https://drafts.csswg.org/cssom/#serialize-a-css-component-value), such as `rgb(247, 234, 186)` or `rgba(247, 234, 186, 0.2)`. If this color is not displayable, a suitable displayable color is returned instead by clamping RGB channel values to the interval [0, 255].
+
+<a name="color_toString" href="#color_toString">#</a> *color*.<b>toString</b>() [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+An alias for [*color*.formatRgb](#color_formatRgb).
+
+<a name="rgb" href="#rgb">#</a> d3.<b>rgb</b>(<i>r</i>, <i>g</i>, <i>b</i>[, <i>opacity</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")<br>
+<a href="#rgb">#</a> d3.<b>rgb</b>(<i>specifier</i>)<br>
+<a href="#rgb">#</a> d3.<b>rgb</b>(<i>color</i>)<br>
+
+Constructs a new [RGB](https://en.wikipedia.org/wiki/RGB_color_model) color. The channel values are exposed as `r`, `g` and `b` properties on the returned instance. Use the [RGB color picker](http://bl.ocks.org/mbostock/78d64ca7ef013b4dcf8f) to explore this color space.
+
+If *r*, *g* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the RGB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb). Note that unlike [*color*.rgb](#color_rgb) this method *always* returns a new instance, even if *color* is already an RGB color.
+
+<a name="rgb_clamp" href="#rgb_clamp">#</a> *rgb*.<b>clamp</b>() [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns a new RGB color where the `r`, `g`, and `b` channels are clamped to the range [0, 255] and rounded to the nearest integer value, and the `opacity` is clamped to the range [0, 1].
+
+<a name="hsl" href="#hsl">#</a> d3.<b>hsl</b>(<i>h</i>, <i>s</i>, <i>l</i>[, <i>opacity</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")<br>
+<a href="#hsl">#</a> d3.<b>hsl</b>(<i>specifier</i>)<br>
+<a href="#hsl">#</a> d3.<b>hsl</b>(<i>color</i>)<br>
+
+Constructs a new [HSL](https://en.wikipedia.org/wiki/HSL_and_HSV) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [HSL color picker](http://bl.ocks.org/mbostock/debaad4fcce9bcee14cf) to explore this color space.
+
+If *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the HSL color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to HSL. (Colors already in the HSL color space skip the conversion to RGB.)
+
+<a name="hsl_clamp" href="#hsl_clamp">#</a> *hsl*.<b>clamp</b>() [<>](https://github.com/d3/d3-color/blob/master/src/color.js "Source")
+
+Returns a new HSL color where the `h` channel is clamped to the range [0, 360), and the `s`, `l`, and `opacity` channels are clamped to the range [0, 1].
+
+<a name="lab" href="#lab">#</a> d3.<b>lab</b>(<i>l</i>, <i>a</i>, <i>b</i>[, <i>opacity</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js "Source")<br>
+<a href="#lab">#</a> d3.<b>lab</b>(<i>specifier</i>)<br>
+<a href="#lab">#</a> d3.<b>lab</b>(<i>color</i>)<br>
+
+Constructs a new [CIELAB](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) color. The channel values are exposed as `l`, `a` and `b` properties on the returned instance. Use the [CIELAB color picker](http://bl.ocks.org/mbostock/9f37cc207c0cb166921b) to explore this color space. The value of *l* is typically in the range [0, 100], while *a* and *b* are typically in [-160, +160].
+
+If *l*, *a* and *b* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the CIELAB color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELAB. (Colors already in the CIELAB color space skip the conversion to RGB, and colors in the HCL color space are converted directly to CIELAB.)
+
+<a name="gray" href="#gray">#</a> d3.<b>gray</b>(<i>l</i>[, <i>opacity</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js "Source")<br>
+
+Constructs a new [CIELAB](#lab) color with the specified *l* value and *a* = *b* = 0.
+
+<a name="hcl" href="#hcl">#</a> d3.<b>hcl</b>(<i>h</i>, <i>c</i>, <i>l</i>[, <i>opacity</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js "Source")<br>
+<a href="#hcl">#</a> d3.<b>hcl</b>(<i>specifier</i>)<br>
+<a href="#hcl">#</a> d3.<b>hcl</b>(<i>color</i>)<br>
+
+Equivalent to [d3.lch](#lch), but with reversed argument order.
+
+<a name="lch" href="#lch">#</a> d3.<b>lch</b>(<i>l</i>, <i>c</i>, <i>h</i>[, <i>opacity</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/lab.js "Source")<br>
+<a href="#lch">#</a> d3.<b>lch</b>(<i>specifier</i>)<br>
+<a href="#lch">#</a> d3.<b>lch</b>(<i>color</i>)<br>
+
+Constructs a new [CIELCh<sub>ab</sub>](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) color. The channel values are exposed as `l`, `c` and `h` properties on the returned instance. Use the [CIELCh<sub>ab</sub> color picker](http://bl.ocks.org/mbostock/3e115519a1b495e0bd95) to explore this color space. The value of *l* is typically in the range [0, 100], *c* is typically in [0, 230], and *h* is typically in [0, 360).
+
+If *l*, *c*, and *h* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to CIELCh<sub>ab</sub> color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to CIELCh<sub>ab</sub>. (Colors already in CIELCh<sub>ab</sub> color space skip the conversion to RGB, and colors in CIELAB color space are converted directly to CIELCh<sub>ab</sub>.)
+
+<a name="cubehelix" href="#cubehelix">#</a> d3.<b>cubehelix</b>(<i>h</i>, <i>s</i>, <i>l</i>[, <i>opacity</i>]) [<>](https://github.com/d3/d3-color/blob/master/src/cubehelix.js "Source")<br>
+<a href="#cubehelix">#</a> d3.<b>cubehelix</b>(<i>specifier</i>)<br>
+<a href="#cubehelix">#</a> d3.<b>cubehelix</b>(<i>color</i>)<br>
+
+Constructs a new [Cubehelix](http://www.mrao.cam.ac.uk/~dag/CUBEHELIX/) color. The channel values are exposed as `h`, `s` and `l` properties on the returned instance. Use the [Cubehelix color picker](http://bl.ocks.org/mbostock/ba8d75e45794c27168b5) to explore this color space.
+
+If *h*, *s* and *l* are specified, these represent the channel values of the returned color; an *opacity* may also be specified. If a CSS Color Module Level 3 *specifier* string is specified, it is parsed and then converted to the Cubehelix color space. See [color](#color) for examples. If a [*color*](#color) instance is specified, it is converted to the RGB color space using [*color*.rgb](#color_rgb) and then converted to Cubehelix. (Colors already in the Cubehelix color space skip the conversion to RGB.)
Index: node_modules/d3-color/dist/d3-color.js
===================================================================
--- node_modules/d3-color/dist/d3-color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/dist/d3-color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,606 @@
+// https://d3js.org/d3-color/ v3.1.0 Copyright 2010-2022 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+typeof define === 'function' && define.amd ? define(['exports'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
+})(this, (function (exports) { 'use strict';
+
+function define(constructor, factory, prototype) {
+  constructor.prototype = factory.prototype = prototype;
+  prototype.constructor = constructor;
+}
+
+function extend(parent, definition) {
+  var prototype = Object.create(parent.prototype);
+  for (var key in definition) prototype[key] = definition[key];
+  return prototype;
+}
+
+function Color() {}
+
+var darker = 0.7;
+var brighter = 1 / darker;
+
+var reI = "\\s*([+-]?\\d+)\\s*",
+    reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",
+    reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
+    reHex = /^#([0-9a-f]{3,8})$/,
+    reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`),
+    reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`),
+    reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`),
+    reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`),
+    reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`),
+    reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);
+
+var named = {
+  aliceblue: 0xf0f8ff,
+  antiquewhite: 0xfaebd7,
+  aqua: 0x00ffff,
+  aquamarine: 0x7fffd4,
+  azure: 0xf0ffff,
+  beige: 0xf5f5dc,
+  bisque: 0xffe4c4,
+  black: 0x000000,
+  blanchedalmond: 0xffebcd,
+  blue: 0x0000ff,
+  blueviolet: 0x8a2be2,
+  brown: 0xa52a2a,
+  burlywood: 0xdeb887,
+  cadetblue: 0x5f9ea0,
+  chartreuse: 0x7fff00,
+  chocolate: 0xd2691e,
+  coral: 0xff7f50,
+  cornflowerblue: 0x6495ed,
+  cornsilk: 0xfff8dc,
+  crimson: 0xdc143c,
+  cyan: 0x00ffff,
+  darkblue: 0x00008b,
+  darkcyan: 0x008b8b,
+  darkgoldenrod: 0xb8860b,
+  darkgray: 0xa9a9a9,
+  darkgreen: 0x006400,
+  darkgrey: 0xa9a9a9,
+  darkkhaki: 0xbdb76b,
+  darkmagenta: 0x8b008b,
+  darkolivegreen: 0x556b2f,
+  darkorange: 0xff8c00,
+  darkorchid: 0x9932cc,
+  darkred: 0x8b0000,
+  darksalmon: 0xe9967a,
+  darkseagreen: 0x8fbc8f,
+  darkslateblue: 0x483d8b,
+  darkslategray: 0x2f4f4f,
+  darkslategrey: 0x2f4f4f,
+  darkturquoise: 0x00ced1,
+  darkviolet: 0x9400d3,
+  deeppink: 0xff1493,
+  deepskyblue: 0x00bfff,
+  dimgray: 0x696969,
+  dimgrey: 0x696969,
+  dodgerblue: 0x1e90ff,
+  firebrick: 0xb22222,
+  floralwhite: 0xfffaf0,
+  forestgreen: 0x228b22,
+  fuchsia: 0xff00ff,
+  gainsboro: 0xdcdcdc,
+  ghostwhite: 0xf8f8ff,
+  gold: 0xffd700,
+  goldenrod: 0xdaa520,
+  gray: 0x808080,
+  green: 0x008000,
+  greenyellow: 0xadff2f,
+  grey: 0x808080,
+  honeydew: 0xf0fff0,
+  hotpink: 0xff69b4,
+  indianred: 0xcd5c5c,
+  indigo: 0x4b0082,
+  ivory: 0xfffff0,
+  khaki: 0xf0e68c,
+  lavender: 0xe6e6fa,
+  lavenderblush: 0xfff0f5,
+  lawngreen: 0x7cfc00,
+  lemonchiffon: 0xfffacd,
+  lightblue: 0xadd8e6,
+  lightcoral: 0xf08080,
+  lightcyan: 0xe0ffff,
+  lightgoldenrodyellow: 0xfafad2,
+  lightgray: 0xd3d3d3,
+  lightgreen: 0x90ee90,
+  lightgrey: 0xd3d3d3,
+  lightpink: 0xffb6c1,
+  lightsalmon: 0xffa07a,
+  lightseagreen: 0x20b2aa,
+  lightskyblue: 0x87cefa,
+  lightslategray: 0x778899,
+  lightslategrey: 0x778899,
+  lightsteelblue: 0xb0c4de,
+  lightyellow: 0xffffe0,
+  lime: 0x00ff00,
+  limegreen: 0x32cd32,
+  linen: 0xfaf0e6,
+  magenta: 0xff00ff,
+  maroon: 0x800000,
+  mediumaquamarine: 0x66cdaa,
+  mediumblue: 0x0000cd,
+  mediumorchid: 0xba55d3,
+  mediumpurple: 0x9370db,
+  mediumseagreen: 0x3cb371,
+  mediumslateblue: 0x7b68ee,
+  mediumspringgreen: 0x00fa9a,
+  mediumturquoise: 0x48d1cc,
+  mediumvioletred: 0xc71585,
+  midnightblue: 0x191970,
+  mintcream: 0xf5fffa,
+  mistyrose: 0xffe4e1,
+  moccasin: 0xffe4b5,
+  navajowhite: 0xffdead,
+  navy: 0x000080,
+  oldlace: 0xfdf5e6,
+  olive: 0x808000,
+  olivedrab: 0x6b8e23,
+  orange: 0xffa500,
+  orangered: 0xff4500,
+  orchid: 0xda70d6,
+  palegoldenrod: 0xeee8aa,
+  palegreen: 0x98fb98,
+  paleturquoise: 0xafeeee,
+  palevioletred: 0xdb7093,
+  papayawhip: 0xffefd5,
+  peachpuff: 0xffdab9,
+  peru: 0xcd853f,
+  pink: 0xffc0cb,
+  plum: 0xdda0dd,
+  powderblue: 0xb0e0e6,
+  purple: 0x800080,
+  rebeccapurple: 0x663399,
+  red: 0xff0000,
+  rosybrown: 0xbc8f8f,
+  royalblue: 0x4169e1,
+  saddlebrown: 0x8b4513,
+  salmon: 0xfa8072,
+  sandybrown: 0xf4a460,
+  seagreen: 0x2e8b57,
+  seashell: 0xfff5ee,
+  sienna: 0xa0522d,
+  silver: 0xc0c0c0,
+  skyblue: 0x87ceeb,
+  slateblue: 0x6a5acd,
+  slategray: 0x708090,
+  slategrey: 0x708090,
+  snow: 0xfffafa,
+  springgreen: 0x00ff7f,
+  steelblue: 0x4682b4,
+  tan: 0xd2b48c,
+  teal: 0x008080,
+  thistle: 0xd8bfd8,
+  tomato: 0xff6347,
+  turquoise: 0x40e0d0,
+  violet: 0xee82ee,
+  wheat: 0xf5deb3,
+  white: 0xffffff,
+  whitesmoke: 0xf5f5f5,
+  yellow: 0xffff00,
+  yellowgreen: 0x9acd32
+};
+
+define(Color, color, {
+  copy(channels) {
+    return Object.assign(new this.constructor, this, channels);
+  },
+  displayable() {
+    return this.rgb().displayable();
+  },
+  hex: color_formatHex, // Deprecated! Use color.formatHex.
+  formatHex: color_formatHex,
+  formatHex8: color_formatHex8,
+  formatHsl: color_formatHsl,
+  formatRgb: color_formatRgb,
+  toString: color_formatRgb
+});
+
+function color_formatHex() {
+  return this.rgb().formatHex();
+}
+
+function color_formatHex8() {
+  return this.rgb().formatHex8();
+}
+
+function color_formatHsl() {
+  return hslConvert(this).formatHsl();
+}
+
+function color_formatRgb() {
+  return this.rgb().formatRgb();
+}
+
+function color(format) {
+  var m, l;
+  format = (format + "").trim().toLowerCase();
+  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
+      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
+      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
+      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000
+      : null) // invalid hex
+      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
+      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
+      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
+      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
+      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
+      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
+      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
+      : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
+      : null;
+}
+
+function rgbn(n) {
+  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
+}
+
+function rgba(r, g, b, a) {
+  if (a <= 0) r = g = b = NaN;
+  return new Rgb(r, g, b, a);
+}
+
+function rgbConvert(o) {
+  if (!(o instanceof Color)) o = color(o);
+  if (!o) return new Rgb;
+  o = o.rgb();
+  return new Rgb(o.r, o.g, o.b, o.opacity);
+}
+
+function rgb(r, g, b, opacity) {
+  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
+}
+
+function Rgb(r, g, b, opacity) {
+  this.r = +r;
+  this.g = +g;
+  this.b = +b;
+  this.opacity = +opacity;
+}
+
+define(Rgb, rgb, extend(Color, {
+  brighter(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+  },
+  darker(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+  },
+  rgb() {
+    return this;
+  },
+  clamp() {
+    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));
+  },
+  displayable() {
+    return (-0.5 <= this.r && this.r < 255.5)
+        && (-0.5 <= this.g && this.g < 255.5)
+        && (-0.5 <= this.b && this.b < 255.5)
+        && (0 <= this.opacity && this.opacity <= 1);
+  },
+  hex: rgb_formatHex, // Deprecated! Use color.formatHex.
+  formatHex: rgb_formatHex,
+  formatHex8: rgb_formatHex8,
+  formatRgb: rgb_formatRgb,
+  toString: rgb_formatRgb
+}));
+
+function rgb_formatHex() {
+  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;
+}
+
+function rgb_formatHex8() {
+  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;
+}
+
+function rgb_formatRgb() {
+  const a = clampa(this.opacity);
+  return `${a === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ")" : `, ${a})`}`;
+}
+
+function clampa(opacity) {
+  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));
+}
+
+function clampi(value) {
+  return Math.max(0, Math.min(255, Math.round(value) || 0));
+}
+
+function hex(value) {
+  value = clampi(value);
+  return (value < 16 ? "0" : "") + value.toString(16);
+}
+
+function hsla(h, s, l, a) {
+  if (a <= 0) h = s = l = NaN;
+  else if (l <= 0 || l >= 1) h = s = NaN;
+  else if (s <= 0) h = NaN;
+  return new Hsl(h, s, l, a);
+}
+
+function hslConvert(o) {
+  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
+  if (!(o instanceof Color)) o = color(o);
+  if (!o) return new Hsl;
+  if (o instanceof Hsl) return o;
+  o = o.rgb();
+  var r = o.r / 255,
+      g = o.g / 255,
+      b = o.b / 255,
+      min = Math.min(r, g, b),
+      max = Math.max(r, g, b),
+      h = NaN,
+      s = max - min,
+      l = (max + min) / 2;
+  if (s) {
+    if (r === max) h = (g - b) / s + (g < b) * 6;
+    else if (g === max) h = (b - r) / s + 2;
+    else h = (r - g) / s + 4;
+    s /= l < 0.5 ? max + min : 2 - max - min;
+    h *= 60;
+  } else {
+    s = l > 0 && l < 1 ? 0 : h;
+  }
+  return new Hsl(h, s, l, o.opacity);
+}
+
+function hsl(h, s, l, opacity) {
+  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
+}
+
+function Hsl(h, s, l, opacity) {
+  this.h = +h;
+  this.s = +s;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+
+define(Hsl, hsl, extend(Color, {
+  brighter(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+  },
+  darker(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+  },
+  rgb() {
+    var h = this.h % 360 + (this.h < 0) * 360,
+        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
+        l = this.l,
+        m2 = l + (l < 0.5 ? l : 1 - l) * s,
+        m1 = 2 * l - m2;
+    return new Rgb(
+      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
+      hsl2rgb(h, m1, m2),
+      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
+      this.opacity
+    );
+  },
+  clamp() {
+    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));
+  },
+  displayable() {
+    return (0 <= this.s && this.s <= 1 || isNaN(this.s))
+        && (0 <= this.l && this.l <= 1)
+        && (0 <= this.opacity && this.opacity <= 1);
+  },
+  formatHsl() {
+    const a = clampa(this.opacity);
+    return `${a === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ")" : `, ${a})`}`;
+  }
+}));
+
+function clamph(value) {
+  value = (value || 0) % 360;
+  return value < 0 ? value + 360 : value;
+}
+
+function clampt(value) {
+  return Math.max(0, Math.min(1, value || 0));
+}
+
+/* From FvD 13.37, CSS Color Module Level 3 */
+function hsl2rgb(h, m1, m2) {
+  return (h < 60 ? m1 + (m2 - m1) * h / 60
+      : h < 180 ? m2
+      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
+      : m1) * 255;
+}
+
+const radians = Math.PI / 180;
+const degrees = 180 / Math.PI;
+
+// https://observablehq.com/@mbostock/lab-and-rgb
+const K = 18,
+    Xn = 0.96422,
+    Yn = 1,
+    Zn = 0.82521,
+    t0 = 4 / 29,
+    t1 = 6 / 29,
+    t2 = 3 * t1 * t1,
+    t3 = t1 * t1 * t1;
+
+function labConvert(o) {
+  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
+  if (o instanceof Hcl) return hcl2lab(o);
+  if (!(o instanceof Rgb)) o = rgbConvert(o);
+  var r = rgb2lrgb(o.r),
+      g = rgb2lrgb(o.g),
+      b = rgb2lrgb(o.b),
+      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;
+  if (r === g && g === b) x = z = y; else {
+    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
+    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
+  }
+  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
+}
+
+function gray(l, opacity) {
+  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);
+}
+
+function lab(l, a, b, opacity) {
+  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
+}
+
+function Lab(l, a, b, opacity) {
+  this.l = +l;
+  this.a = +a;
+  this.b = +b;
+  this.opacity = +opacity;
+}
+
+define(Lab, lab, extend(Color, {
+  brighter(k) {
+    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
+  },
+  darker(k) {
+    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
+  },
+  rgb() {
+    var y = (this.l + 16) / 116,
+        x = isNaN(this.a) ? y : y + this.a / 500,
+        z = isNaN(this.b) ? y : y - this.b / 200;
+    x = Xn * lab2xyz(x);
+    y = Yn * lab2xyz(y);
+    z = Zn * lab2xyz(z);
+    return new Rgb(
+      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
+      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),
+      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
+      this.opacity
+    );
+  }
+}));
+
+function xyz2lab(t) {
+  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
+}
+
+function lab2xyz(t) {
+  return t > t1 ? t * t * t : t2 * (t - t0);
+}
+
+function lrgb2rgb(x) {
+  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
+}
+
+function rgb2lrgb(x) {
+  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
+}
+
+function hclConvert(o) {
+  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
+  if (!(o instanceof Lab)) o = labConvert(o);
+  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);
+  var h = Math.atan2(o.b, o.a) * degrees;
+  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
+}
+
+function lch(l, c, h, opacity) {
+  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+}
+
+function hcl(h, c, l, opacity) {
+  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+}
+
+function Hcl(h, c, l, opacity) {
+  this.h = +h;
+  this.c = +c;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+
+function hcl2lab(o) {
+  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);
+  var h = o.h * radians;
+  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
+}
+
+define(Hcl, hcl, extend(Color, {
+  brighter(k) {
+    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
+  },
+  darker(k) {
+    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
+  },
+  rgb() {
+    return hcl2lab(this).rgb();
+  }
+}));
+
+var A = -0.14861,
+    B = +1.78277,
+    C = -0.29227,
+    D = -0.90649,
+    E = +1.97294,
+    ED = E * D,
+    EB = E * B,
+    BC_DA = B * C - D * A;
+
+function cubehelixConvert(o) {
+  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
+  if (!(o instanceof Rgb)) o = rgbConvert(o);
+  var r = o.r / 255,
+      g = o.g / 255,
+      b = o.b / 255,
+      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
+      bl = b - l,
+      k = (E * (g - l) - C * bl) / D,
+      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
+      h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;
+  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
+}
+
+function cubehelix(h, s, l, opacity) {
+  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
+}
+
+function Cubehelix(h, s, l, opacity) {
+  this.h = +h;
+  this.s = +s;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+
+define(Cubehelix, cubehelix, extend(Color, {
+  brighter(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+  },
+  darker(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+  },
+  rgb() {
+    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,
+        l = +this.l,
+        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
+        cosh = Math.cos(h),
+        sinh = Math.sin(h);
+    return new Rgb(
+      255 * (l + a * (A * cosh + B * sinh)),
+      255 * (l + a * (C * cosh + D * sinh)),
+      255 * (l + a * (E * cosh)),
+      this.opacity
+    );
+  }
+}));
+
+exports.color = color;
+exports.cubehelix = cubehelix;
+exports.gray = gray;
+exports.hcl = hcl;
+exports.hsl = hsl;
+exports.lab = lab;
+exports.lch = lch;
+exports.rgb = rgb;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
Index: node_modules/d3-color/dist/d3-color.min.js
===================================================================
--- node_modules/d3-color/dist/d3-color.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/dist/d3-color.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-color/ v3.1.0 Copyright 2010-2022 Mike Bostock
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{})}(this,(function(t){"use strict";function e(t,e,i){t.prototype=e.prototype=i,i.constructor=t}function i(t,e){var i=Object.create(t.prototype);for(var n in e)i[n]=e[n];return i}function n(){}var r=.7,a=1/r,s="\\s*([+-]?\\d+)\\s*",h="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",o="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",l=/^#([0-9a-f]{3,8})$/,u=new RegExp(`^rgb\\(${s},${s},${s}\\)$`),c=new RegExp(`^rgb\\(${o},${o},${o}\\)$`),g=new RegExp(`^rgba\\(${s},${s},${s},${h}\\)$`),p=new RegExp(`^rgba\\(${o},${o},${o},${h}\\)$`),f=new RegExp(`^hsl\\(${h},${o},${o}\\)$`),d=new RegExp(`^hsla\\(${h},${o},${o},${h}\\)$`),b={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function y(){return this.rgb().formatHex()}function w(){return this.rgb().formatRgb()}function m(t){var e,i;return t=(t+"").trim().toLowerCase(),(e=l.exec(t))?(i=e[1].length,e=parseInt(e[1],16),6===i?$(e):3===i?new M(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===i?N(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===i?N(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=u.exec(t))?new M(e[1],e[2],e[3],1):(e=c.exec(t))?new M(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=g.exec(t))?N(e[1],e[2],e[3],e[4]):(e=p.exec(t))?N(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=f.exec(t))?j(e[1],e[2]/100,e[3]/100,1):(e=d.exec(t))?j(e[1],e[2]/100,e[3]/100,e[4]):b.hasOwnProperty(t)?$(b[t]):"transparent"===t?new M(NaN,NaN,NaN,0):null}function $(t){return new M(t>>16&255,t>>8&255,255&t,1)}function N(t,e,i,n){return n<=0&&(t=e=i=NaN),new M(t,e,i,n)}function k(t){return t instanceof n||(t=m(t)),t?new M((t=t.rgb()).r,t.g,t.b,t.opacity):new M}function x(t,e,i,n){return 1===arguments.length?k(t):new M(t,e,i,null==n?1:n)}function M(t,e,i,n){this.r=+t,this.g=+e,this.b=+i,this.opacity=+n}function v(){return`#${E(this.r)}${E(this.g)}${E(this.b)}`}function q(){const t=H(this.opacity);return`${1===t?"rgb(":"rgba("}${R(this.r)}, ${R(this.g)}, ${R(this.b)}${1===t?")":`, ${t})`}`}function H(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function R(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function E(t){return((t=R(t))<16?"0":"")+t.toString(16)}function j(t,e,i,n){return n<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new I(t,e,i,n)}function O(t){if(t instanceof I)return new I(t.h,t.s,t.l,t.opacity);if(t instanceof n||(t=m(t)),!t)return new I;if(t instanceof I)return t;var e=(t=t.rgb()).r/255,i=t.g/255,r=t.b/255,a=Math.min(e,i,r),s=Math.max(e,i,r),h=NaN,o=s-a,l=(s+a)/2;return o?(h=e===s?(i-r)/o+6*(i<r):i===s?(r-e)/o+2:(e-i)/o+4,o/=l<.5?s+a:2-s-a,h*=60):o=l>0&&l<1?0:h,new I(h,o,l,t.opacity)}function P(t,e,i,n){return 1===arguments.length?O(t):new I(t,e,i,null==n?1:n)}function I(t,e,i,n){this.h=+t,this.s=+e,this.l=+i,this.opacity=+n}function S(t){return(t=(t||0)%360)<0?t+360:t}function T(t){return Math.max(0,Math.min(1,t||0))}function _(t,e,i){return 255*(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)}e(n,m,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:y,formatHex:y,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return O(this).formatHsl()},formatRgb:w,toString:w}),e(M,x,i(n,{brighter(t){return t=null==t?a:Math.pow(a,t),new M(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?r:Math.pow(r,t),new M(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new M(R(this.r),R(this.g),R(this.b),H(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:v,formatHex:v,formatHex8:function(){return`#${E(this.r)}${E(this.g)}${E(this.b)}${E(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:q,toString:q})),e(I,P,i(n,{brighter(t){return t=null==t?a:Math.pow(a,t),new I(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?r:Math.pow(r,t),new I(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,n=i+(i<.5?i:1-i)*e,r=2*i-n;return new M(_(t>=240?t-240:t+120,r,n),_(t,r,n),_(t<120?t+240:t-120,r,n),this.opacity)},clamp(){return new I(S(this.h),T(this.s),T(this.l),H(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=H(this.opacity);return`${1===t?"hsl(":"hsla("}${S(this.h)}, ${100*T(this.s)}%, ${100*T(this.l)}%${1===t?")":`, ${t})`}`}}));const z=Math.PI/180,C=180/Math.PI,L=.96422,A=.82521,B=4/29,D=6/29,F=3*D*D;function G(t){if(t instanceof K)return new K(t.l,t.a,t.b,t.opacity);if(t instanceof Z)return tt(t);t instanceof M||(t=k(t));var e,i,n=W(t.r),r=W(t.g),a=W(t.b),s=Q((.2225045*n+.7168786*r+.0606169*a)/1);return n===r&&r===a?e=i=s:(e=Q((.4360747*n+.3850649*r+.1430804*a)/L),i=Q((.0139322*n+.0971045*r+.7141733*a)/A)),new K(116*s-16,500*(e-s),200*(s-i),t.opacity)}function J(t,e,i,n){return 1===arguments.length?G(t):new K(t,e,i,null==n?1:n)}function K(t,e,i,n){this.l=+t,this.a=+e,this.b=+i,this.opacity=+n}function Q(t){return t>.008856451679035631?Math.pow(t,1/3):t/F+B}function U(t){return t>D?t*t*t:F*(t-B)}function V(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function W(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function X(t){if(t instanceof Z)return new Z(t.h,t.c,t.l,t.opacity);if(t instanceof K||(t=G(t)),0===t.a&&0===t.b)return new Z(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*C;return new Z(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Y(t,e,i,n){return 1===arguments.length?X(t):new Z(t,e,i,null==n?1:n)}function Z(t,e,i,n){this.h=+t,this.c=+e,this.l=+i,this.opacity=+n}function tt(t){if(isNaN(t.h))return new K(t.l,0,0,t.opacity);var e=t.h*z;return new K(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}e(K,J,i(n,{brighter(t){return new K(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new K(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,i=isNaN(this.b)?t:t-this.b/200;return new M(V(3.1338561*(e=L*U(e))-1.6168667*(t=1*U(t))-.4906146*(i=A*U(i))),V(-.9787684*e+1.9161415*t+.033454*i),V(.0719453*e-.2289914*t+1.4052427*i),this.opacity)}})),e(Z,Y,i(n,{brighter(t){return new Z(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new Z(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return tt(this).rgb()}}));var et=-.14861,it=1.78277,nt=-.29227,rt=-.90649,at=1.97294,st=at*rt,ht=at*it,ot=it*nt-rt*et;function lt(t){if(t instanceof ct)return new ct(t.h,t.s,t.l,t.opacity);t instanceof M||(t=k(t));var e=t.r/255,i=t.g/255,n=t.b/255,r=(ot*n+st*e-ht*i)/(ot+st-ht),a=n-r,s=(at*(i-r)-nt*a)/rt,h=Math.sqrt(s*s+a*a)/(at*r*(1-r)),o=h?Math.atan2(s,a)*C-120:NaN;return new ct(o<0?o+360:o,h,r,t.opacity)}function ut(t,e,i,n){return 1===arguments.length?lt(t):new ct(t,e,i,null==n?1:n)}function ct(t,e,i,n){this.h=+t,this.s=+e,this.l=+i,this.opacity=+n}e(ct,ut,i(n,{brighter(t){return t=null==t?a:Math.pow(a,t),new ct(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?r:Math.pow(r,t),new ct(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=isNaN(this.h)?0:(this.h+120)*z,e=+this.l,i=isNaN(this.s)?0:this.s*e*(1-e),n=Math.cos(t),r=Math.sin(t);return new M(255*(e+i*(et*n+it*r)),255*(e+i*(nt*n+rt*r)),255*(e+i*(at*n)),this.opacity)}})),t.color=m,t.cubehelix=ut,t.gray=function(t,e){return new K(t,0,0,null==e?1:e)},t.hcl=Y,t.hsl=P,t.lab=J,t.lch=function(t,e,i,n){return 1===arguments.length?X(t):new Z(i,e,t,null==n?1:n)},t.rgb=x,Object.defineProperty(t,"__esModule",{value:!0})}));
Index: node_modules/d3-color/package.json
===================================================================
--- node_modules/d3-color/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+{
+  "name": "d3-color",
+  "version": "3.1.0",
+  "description": "Color spaces! RGB, HSL, Cubehelix, Lab and HCL (Lch).",
+  "homepage": "https://d3js.org/d3-color/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-color.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "color",
+    "rgb",
+    "hsl",
+    "lab",
+    "hcl",
+    "lch",
+    "cubehelix"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-color.min.js",
+  "unpkg": "dist/d3-color.min.js",
+  "exports": {
+    "umd": "./dist/d3-color.min.js",
+    "default": "./src/index.js"
+  },
+  "sideEffects": false,
+  "devDependencies": {
+    "eslint": "8",
+    "mocha": "9",
+    "rollup": "2",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-color/src/color.js
===================================================================
--- node_modules/d3-color/src/color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/src/color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,396 @@
+import define, {extend} from "./define.js";
+
+export function Color() {}
+
+export var darker = 0.7;
+export var brighter = 1 / darker;
+
+var reI = "\\s*([+-]?\\d+)\\s*",
+    reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",
+    reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
+    reHex = /^#([0-9a-f]{3,8})$/,
+    reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`),
+    reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`),
+    reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`),
+    reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`),
+    reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`),
+    reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);
+
+var named = {
+  aliceblue: 0xf0f8ff,
+  antiquewhite: 0xfaebd7,
+  aqua: 0x00ffff,
+  aquamarine: 0x7fffd4,
+  azure: 0xf0ffff,
+  beige: 0xf5f5dc,
+  bisque: 0xffe4c4,
+  black: 0x000000,
+  blanchedalmond: 0xffebcd,
+  blue: 0x0000ff,
+  blueviolet: 0x8a2be2,
+  brown: 0xa52a2a,
+  burlywood: 0xdeb887,
+  cadetblue: 0x5f9ea0,
+  chartreuse: 0x7fff00,
+  chocolate: 0xd2691e,
+  coral: 0xff7f50,
+  cornflowerblue: 0x6495ed,
+  cornsilk: 0xfff8dc,
+  crimson: 0xdc143c,
+  cyan: 0x00ffff,
+  darkblue: 0x00008b,
+  darkcyan: 0x008b8b,
+  darkgoldenrod: 0xb8860b,
+  darkgray: 0xa9a9a9,
+  darkgreen: 0x006400,
+  darkgrey: 0xa9a9a9,
+  darkkhaki: 0xbdb76b,
+  darkmagenta: 0x8b008b,
+  darkolivegreen: 0x556b2f,
+  darkorange: 0xff8c00,
+  darkorchid: 0x9932cc,
+  darkred: 0x8b0000,
+  darksalmon: 0xe9967a,
+  darkseagreen: 0x8fbc8f,
+  darkslateblue: 0x483d8b,
+  darkslategray: 0x2f4f4f,
+  darkslategrey: 0x2f4f4f,
+  darkturquoise: 0x00ced1,
+  darkviolet: 0x9400d3,
+  deeppink: 0xff1493,
+  deepskyblue: 0x00bfff,
+  dimgray: 0x696969,
+  dimgrey: 0x696969,
+  dodgerblue: 0x1e90ff,
+  firebrick: 0xb22222,
+  floralwhite: 0xfffaf0,
+  forestgreen: 0x228b22,
+  fuchsia: 0xff00ff,
+  gainsboro: 0xdcdcdc,
+  ghostwhite: 0xf8f8ff,
+  gold: 0xffd700,
+  goldenrod: 0xdaa520,
+  gray: 0x808080,
+  green: 0x008000,
+  greenyellow: 0xadff2f,
+  grey: 0x808080,
+  honeydew: 0xf0fff0,
+  hotpink: 0xff69b4,
+  indianred: 0xcd5c5c,
+  indigo: 0x4b0082,
+  ivory: 0xfffff0,
+  khaki: 0xf0e68c,
+  lavender: 0xe6e6fa,
+  lavenderblush: 0xfff0f5,
+  lawngreen: 0x7cfc00,
+  lemonchiffon: 0xfffacd,
+  lightblue: 0xadd8e6,
+  lightcoral: 0xf08080,
+  lightcyan: 0xe0ffff,
+  lightgoldenrodyellow: 0xfafad2,
+  lightgray: 0xd3d3d3,
+  lightgreen: 0x90ee90,
+  lightgrey: 0xd3d3d3,
+  lightpink: 0xffb6c1,
+  lightsalmon: 0xffa07a,
+  lightseagreen: 0x20b2aa,
+  lightskyblue: 0x87cefa,
+  lightslategray: 0x778899,
+  lightslategrey: 0x778899,
+  lightsteelblue: 0xb0c4de,
+  lightyellow: 0xffffe0,
+  lime: 0x00ff00,
+  limegreen: 0x32cd32,
+  linen: 0xfaf0e6,
+  magenta: 0xff00ff,
+  maroon: 0x800000,
+  mediumaquamarine: 0x66cdaa,
+  mediumblue: 0x0000cd,
+  mediumorchid: 0xba55d3,
+  mediumpurple: 0x9370db,
+  mediumseagreen: 0x3cb371,
+  mediumslateblue: 0x7b68ee,
+  mediumspringgreen: 0x00fa9a,
+  mediumturquoise: 0x48d1cc,
+  mediumvioletred: 0xc71585,
+  midnightblue: 0x191970,
+  mintcream: 0xf5fffa,
+  mistyrose: 0xffe4e1,
+  moccasin: 0xffe4b5,
+  navajowhite: 0xffdead,
+  navy: 0x000080,
+  oldlace: 0xfdf5e6,
+  olive: 0x808000,
+  olivedrab: 0x6b8e23,
+  orange: 0xffa500,
+  orangered: 0xff4500,
+  orchid: 0xda70d6,
+  palegoldenrod: 0xeee8aa,
+  palegreen: 0x98fb98,
+  paleturquoise: 0xafeeee,
+  palevioletred: 0xdb7093,
+  papayawhip: 0xffefd5,
+  peachpuff: 0xffdab9,
+  peru: 0xcd853f,
+  pink: 0xffc0cb,
+  plum: 0xdda0dd,
+  powderblue: 0xb0e0e6,
+  purple: 0x800080,
+  rebeccapurple: 0x663399,
+  red: 0xff0000,
+  rosybrown: 0xbc8f8f,
+  royalblue: 0x4169e1,
+  saddlebrown: 0x8b4513,
+  salmon: 0xfa8072,
+  sandybrown: 0xf4a460,
+  seagreen: 0x2e8b57,
+  seashell: 0xfff5ee,
+  sienna: 0xa0522d,
+  silver: 0xc0c0c0,
+  skyblue: 0x87ceeb,
+  slateblue: 0x6a5acd,
+  slategray: 0x708090,
+  slategrey: 0x708090,
+  snow: 0xfffafa,
+  springgreen: 0x00ff7f,
+  steelblue: 0x4682b4,
+  tan: 0xd2b48c,
+  teal: 0x008080,
+  thistle: 0xd8bfd8,
+  tomato: 0xff6347,
+  turquoise: 0x40e0d0,
+  violet: 0xee82ee,
+  wheat: 0xf5deb3,
+  white: 0xffffff,
+  whitesmoke: 0xf5f5f5,
+  yellow: 0xffff00,
+  yellowgreen: 0x9acd32
+};
+
+define(Color, color, {
+  copy(channels) {
+    return Object.assign(new this.constructor, this, channels);
+  },
+  displayable() {
+    return this.rgb().displayable();
+  },
+  hex: color_formatHex, // Deprecated! Use color.formatHex.
+  formatHex: color_formatHex,
+  formatHex8: color_formatHex8,
+  formatHsl: color_formatHsl,
+  formatRgb: color_formatRgb,
+  toString: color_formatRgb
+});
+
+function color_formatHex() {
+  return this.rgb().formatHex();
+}
+
+function color_formatHex8() {
+  return this.rgb().formatHex8();
+}
+
+function color_formatHsl() {
+  return hslConvert(this).formatHsl();
+}
+
+function color_formatRgb() {
+  return this.rgb().formatRgb();
+}
+
+export default function color(format) {
+  var m, l;
+  format = (format + "").trim().toLowerCase();
+  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
+      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
+      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
+      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000
+      : null) // invalid hex
+      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
+      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
+      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
+      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
+      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
+      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
+      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
+      : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
+      : null;
+}
+
+function rgbn(n) {
+  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
+}
+
+function rgba(r, g, b, a) {
+  if (a <= 0) r = g = b = NaN;
+  return new Rgb(r, g, b, a);
+}
+
+export function rgbConvert(o) {
+  if (!(o instanceof Color)) o = color(o);
+  if (!o) return new Rgb;
+  o = o.rgb();
+  return new Rgb(o.r, o.g, o.b, o.opacity);
+}
+
+export function rgb(r, g, b, opacity) {
+  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
+}
+
+export function Rgb(r, g, b, opacity) {
+  this.r = +r;
+  this.g = +g;
+  this.b = +b;
+  this.opacity = +opacity;
+}
+
+define(Rgb, rgb, extend(Color, {
+  brighter(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+  },
+  darker(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+  },
+  rgb() {
+    return this;
+  },
+  clamp() {
+    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));
+  },
+  displayable() {
+    return (-0.5 <= this.r && this.r < 255.5)
+        && (-0.5 <= this.g && this.g < 255.5)
+        && (-0.5 <= this.b && this.b < 255.5)
+        && (0 <= this.opacity && this.opacity <= 1);
+  },
+  hex: rgb_formatHex, // Deprecated! Use color.formatHex.
+  formatHex: rgb_formatHex,
+  formatHex8: rgb_formatHex8,
+  formatRgb: rgb_formatRgb,
+  toString: rgb_formatRgb
+}));
+
+function rgb_formatHex() {
+  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;
+}
+
+function rgb_formatHex8() {
+  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;
+}
+
+function rgb_formatRgb() {
+  const a = clampa(this.opacity);
+  return `${a === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ")" : `, ${a})`}`;
+}
+
+function clampa(opacity) {
+  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));
+}
+
+function clampi(value) {
+  return Math.max(0, Math.min(255, Math.round(value) || 0));
+}
+
+function hex(value) {
+  value = clampi(value);
+  return (value < 16 ? "0" : "") + value.toString(16);
+}
+
+function hsla(h, s, l, a) {
+  if (a <= 0) h = s = l = NaN;
+  else if (l <= 0 || l >= 1) h = s = NaN;
+  else if (s <= 0) h = NaN;
+  return new Hsl(h, s, l, a);
+}
+
+export function hslConvert(o) {
+  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
+  if (!(o instanceof Color)) o = color(o);
+  if (!o) return new Hsl;
+  if (o instanceof Hsl) return o;
+  o = o.rgb();
+  var r = o.r / 255,
+      g = o.g / 255,
+      b = o.b / 255,
+      min = Math.min(r, g, b),
+      max = Math.max(r, g, b),
+      h = NaN,
+      s = max - min,
+      l = (max + min) / 2;
+  if (s) {
+    if (r === max) h = (g - b) / s + (g < b) * 6;
+    else if (g === max) h = (b - r) / s + 2;
+    else h = (r - g) / s + 4;
+    s /= l < 0.5 ? max + min : 2 - max - min;
+    h *= 60;
+  } else {
+    s = l > 0 && l < 1 ? 0 : h;
+  }
+  return new Hsl(h, s, l, o.opacity);
+}
+
+export function hsl(h, s, l, opacity) {
+  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
+}
+
+function Hsl(h, s, l, opacity) {
+  this.h = +h;
+  this.s = +s;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+
+define(Hsl, hsl, extend(Color, {
+  brighter(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+  },
+  darker(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+  },
+  rgb() {
+    var h = this.h % 360 + (this.h < 0) * 360,
+        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
+        l = this.l,
+        m2 = l + (l < 0.5 ? l : 1 - l) * s,
+        m1 = 2 * l - m2;
+    return new Rgb(
+      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
+      hsl2rgb(h, m1, m2),
+      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
+      this.opacity
+    );
+  },
+  clamp() {
+    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));
+  },
+  displayable() {
+    return (0 <= this.s && this.s <= 1 || isNaN(this.s))
+        && (0 <= this.l && this.l <= 1)
+        && (0 <= this.opacity && this.opacity <= 1);
+  },
+  formatHsl() {
+    const a = clampa(this.opacity);
+    return `${a === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ")" : `, ${a})`}`;
+  }
+}));
+
+function clamph(value) {
+  value = (value || 0) % 360;
+  return value < 0 ? value + 360 : value;
+}
+
+function clampt(value) {
+  return Math.max(0, Math.min(1, value || 0));
+}
+
+/* From FvD 13.37, CSS Color Module Level 3 */
+function hsl2rgb(h, m1, m2) {
+  return (h < 60 ? m1 + (m2 - m1) * h / 60
+      : h < 180 ? m2
+      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
+      : m1) * 255;
+}
Index: node_modules/d3-color/src/cubehelix.js
===================================================================
--- node_modules/d3-color/src/cubehelix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/src/cubehelix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+import define, {extend} from "./define.js";
+import {Color, rgbConvert, Rgb, darker, brighter} from "./color.js";
+import {degrees, radians} from "./math.js";
+
+var A = -0.14861,
+    B = +1.78277,
+    C = -0.29227,
+    D = -0.90649,
+    E = +1.97294,
+    ED = E * D,
+    EB = E * B,
+    BC_DA = B * C - D * A;
+
+function cubehelixConvert(o) {
+  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
+  if (!(o instanceof Rgb)) o = rgbConvert(o);
+  var r = o.r / 255,
+      g = o.g / 255,
+      b = o.b / 255,
+      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
+      bl = b - l,
+      k = (E * (g - l) - C * bl) / D,
+      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
+      h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;
+  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
+}
+
+export default function cubehelix(h, s, l, opacity) {
+  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
+}
+
+export function Cubehelix(h, s, l, opacity) {
+  this.h = +h;
+  this.s = +s;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+
+define(Cubehelix, cubehelix, extend(Color, {
+  brighter(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+  },
+  darker(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+  },
+  rgb() {
+    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,
+        l = +this.l,
+        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
+        cosh = Math.cos(h),
+        sinh = Math.sin(h);
+    return new Rgb(
+      255 * (l + a * (A * cosh + B * sinh)),
+      255 * (l + a * (C * cosh + D * sinh)),
+      255 * (l + a * (E * cosh)),
+      this.opacity
+    );
+  }
+}));
Index: node_modules/d3-color/src/define.js
===================================================================
--- node_modules/d3-color/src/define.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/src/define.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+export default function(constructor, factory, prototype) {
+  constructor.prototype = factory.prototype = prototype;
+  prototype.constructor = constructor;
+}
+
+export function extend(parent, definition) {
+  var prototype = Object.create(parent.prototype);
+  for (var key in definition) prototype[key] = definition[key];
+  return prototype;
+}
Index: node_modules/d3-color/src/index.js
===================================================================
--- node_modules/d3-color/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export {default as color, rgb, hsl} from "./color.js";
+export {default as lab, hcl, lch, gray} from "./lab.js";
+export {default as cubehelix} from "./cubehelix.js";
Index: node_modules/d3-color/src/lab.js
===================================================================
--- node_modules/d3-color/src/lab.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/src/lab.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,123 @@
+import define, {extend} from "./define.js";
+import {Color, rgbConvert, Rgb} from "./color.js";
+import {degrees, radians} from "./math.js";
+
+// https://observablehq.com/@mbostock/lab-and-rgb
+const K = 18,
+    Xn = 0.96422,
+    Yn = 1,
+    Zn = 0.82521,
+    t0 = 4 / 29,
+    t1 = 6 / 29,
+    t2 = 3 * t1 * t1,
+    t3 = t1 * t1 * t1;
+
+function labConvert(o) {
+  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
+  if (o instanceof Hcl) return hcl2lab(o);
+  if (!(o instanceof Rgb)) o = rgbConvert(o);
+  var r = rgb2lrgb(o.r),
+      g = rgb2lrgb(o.g),
+      b = rgb2lrgb(o.b),
+      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;
+  if (r === g && g === b) x = z = y; else {
+    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
+    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
+  }
+  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
+}
+
+export function gray(l, opacity) {
+  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);
+}
+
+export default function lab(l, a, b, opacity) {
+  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
+}
+
+export function Lab(l, a, b, opacity) {
+  this.l = +l;
+  this.a = +a;
+  this.b = +b;
+  this.opacity = +opacity;
+}
+
+define(Lab, lab, extend(Color, {
+  brighter(k) {
+    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
+  },
+  darker(k) {
+    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
+  },
+  rgb() {
+    var y = (this.l + 16) / 116,
+        x = isNaN(this.a) ? y : y + this.a / 500,
+        z = isNaN(this.b) ? y : y - this.b / 200;
+    x = Xn * lab2xyz(x);
+    y = Yn * lab2xyz(y);
+    z = Zn * lab2xyz(z);
+    return new Rgb(
+      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
+      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),
+      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
+      this.opacity
+    );
+  }
+}));
+
+function xyz2lab(t) {
+  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
+}
+
+function lab2xyz(t) {
+  return t > t1 ? t * t * t : t2 * (t - t0);
+}
+
+function lrgb2rgb(x) {
+  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
+}
+
+function rgb2lrgb(x) {
+  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
+}
+
+function hclConvert(o) {
+  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
+  if (!(o instanceof Lab)) o = labConvert(o);
+  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);
+  var h = Math.atan2(o.b, o.a) * degrees;
+  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
+}
+
+export function lch(l, c, h, opacity) {
+  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+}
+
+export function hcl(h, c, l, opacity) {
+  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+}
+
+export function Hcl(h, c, l, opacity) {
+  this.h = +h;
+  this.c = +c;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+
+function hcl2lab(o) {
+  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);
+  var h = o.h * radians;
+  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
+}
+
+define(Hcl, hcl, extend(Color, {
+  brighter(k) {
+    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
+  },
+  darker(k) {
+    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
+  },
+  rgb() {
+    return hcl2lab(this).rgb();
+  }
+}));
Index: node_modules/d3-color/src/math.js
===================================================================
--- node_modules/d3-color/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-color/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export const radians = Math.PI / 180;
+export const degrees = 180 / Math.PI;
Index: node_modules/d3-ease/LICENSE
===================================================================
--- node_modules/d3-ease/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+Copyright 2010-2021 Mike Bostock
+Copyright 2001 Robert Penner
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the author nor the names of contributors may be used to
+  endorse or promote products derived from this software without specific prior
+  written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: node_modules/d3-ease/README.md
===================================================================
--- node_modules/d3-ease/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,253 @@
+# d3-ease
+
+*Easing* is a method of distorting time to control apparent motion in animation. It is most commonly used for [slow-in, slow-out](https://en.wikipedia.org/wiki/12_basic_principles_of_animation#Slow_In_and_Slow_Out). By easing time, [animated transitions](https://github.com/d3/d3-transition) are smoother and exhibit more plausible motion.
+
+The easing types in this module implement the [ease method](#ease_ease), which takes a normalized time *t* and returns the corresponding “eased” time *tʹ*. Both the normalized time and the eased time are typically in the range [0,1], where 0 represents the start of the animation and 1 represents the end; some easing types, such as [elastic](#easeElastic), may return eased times slightly outside this range. A good easing type should return 0 if *t* = 0 and 1 if *t* = 1. See the [easing explorer](https://observablehq.com/@d3/easing) for a visual demonstration.
+
+These easing types are largely based on work by [Robert Penner](http://robertpenner.com/easing/).
+
+## Installing
+
+If you use npm, `npm install d3-ease`. You can also download the [latest release on GitHub](https://github.com/d3/d3-ease/releases/latest). For vanilla HTML in modern browsers, import d3-ease from Skypack:
+
+```html
+<script type="module">
+
+import {easeCubic} from "https://cdn.skypack.dev/d3-ease@3";
+
+const e = easeCubic(0.25);
+
+</script>
+```
+
+For legacy environments, you can load d3-ease’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-ease@3"></script>
+<script>
+
+const e = d3.easeCubic(0.25);
+
+</script>
+```
+
+[Try d3-ease in your browser.](https://observablehq.com/@d3/easing-animations)
+
+## API Reference
+
+<a name="_ease" href="#_ease">#</a> <i>ease</i>(<i>t</i>)
+
+Given the specified normalized time *t*, typically in the range [0,1], returns the “eased” time *tʹ*, also typically in [0,1]. 0 represents the start of the animation and 1 represents the end. A good implementation returns 0 if *t* = 0 and 1 if *t* = 1. See the [easing explorer](https://observablehq.com/@d3/easing) for a visual demonstration. For example, to apply [cubic](#easeCubic) easing:
+
+```js
+const te = d3.easeCubic(t);
+```
+
+Similarly, to apply custom [elastic](#easeElastic) easing:
+
+```js
+// Before the animation starts, create your easing function.
+const customElastic = d3.easeElastic.period(0.4);
+
+// During the animation, apply the easing function.
+const te = customElastic(t);
+```
+
+<a name="easeLinear" href="#easeLinear">#</a> d3.<b>easeLinear</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/linear.js "Source")
+
+Linear easing; the identity function; *linear*(*t*) returns *t*.
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/linear.png" alt="linear">](https://observablehq.com/@d3/easing#linear)
+
+<a name="easePolyIn" href="#easePolyIn">#</a> d3.<b>easePolyIn</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L3 "Source")
+
+Polynomial easing; raises *t* to the specified [exponent](#poly_exponent). If the exponent is not specified, it defaults to 3, equivalent to [cubicIn](#easeCubicIn).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/polyIn.png" alt="polyIn">](https://observablehq.com/@d3/easing#polyIn)
+
+<a name="easePolyOut" href="#easePolyOut">#</a> d3.<b>easePolyOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L15 "Source")
+
+Reverse polynomial easing; equivalent to 1 - [polyIn](#easePolyIn)(1 - *t*). If the [exponent](#poly_exponent) is not specified, it defaults to 3, equivalent to [cubicOut](#easeCubicOut).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/polyOut.png" alt="polyOut">](https://observablehq.com/@d3/easing#polyOut)
+
+<a name="easePoly" href="#easePoly">#</a> d3.<b>easePoly</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js "Source")
+<br><a name="easePolyInOut" href="#easePolyInOut">#</a> d3.<b>easePolyInOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L27 "Source")
+
+Symmetric polynomial easing; scales [polyIn](#easePolyIn) for *t* in [0, 0.5] and [polyOut](#easePolyOut) for *t* in [0.5, 1]. If the [exponent](#poly_exponent) is not specified, it defaults to 3, equivalent to [cubic](#easeCubic).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/polyInOut.png" alt="polyInOut">](https://observablehq.com/@d3/easing#polyInOut)
+
+<a name="poly_exponent" href="#poly_exponent">#</a> <i>poly</i>.<b>exponent</b>(<i>e</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/poly.js#L1 "Source")
+
+Returns a new polynomial easing with the specified exponent *e*. For example, to create equivalents of [linear](#easeLinear), [quad](#easeQuad), and [cubic](#easeCubic):
+
+```js
+const linear = d3.easePoly.exponent(1);
+const quad = d3.easePoly.exponent(2);
+const cubic = d3.easePoly.exponent(3);
+```
+
+<a name="easeQuadIn" href="#easeQuadIn">#</a> d3.<b>easeQuadIn</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js#L1 "Source")
+
+Quadratic easing; equivalent to [polyIn](#easePolyIn).[exponent](#poly_exponent)(2).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/quadIn.png" alt="quadIn">](https://observablehq.com/@d3/easing#quadIn)
+
+<a name="easeQuadOut" href="#easeQuadOut">#</a> d3.<b>easeQuadOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js#L5 "Source")
+
+Reverse quadratic easing; equivalent to 1 - [quadIn](#easeQuadIn)(1 - *t*). Also equivalent to [polyOut](#easePolyOut).[exponent](#poly_exponent)(2).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/quadOut.png" alt="quadOut">](https://observablehq.com/@d3/easing#quadOut)
+
+<a name="easeQuad" href="#easeQuad">#</a> d3.<b>easeQuad</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js "Source")
+<br><a name="easeQuadInOut" href="#easeQuadInOut">#</a> d3.<b>easeQuadInOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/quad.js#L9 "Source")
+
+Symmetric quadratic easing; scales [quadIn](#easeQuadIn) for *t* in [0, 0.5] and [quadOut](#easeQuadOut) for *t* in [0.5, 1]. Also equivalent to [poly](#easePoly).[exponent](#poly_exponent)(2).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/quadInOut.png" alt="quadInOut">](https://observablehq.com/@d3/easing#quadInOut)
+
+<a name="easeCubicIn" href="#easeCubicIn">#</a> d3.<b>easeCubicIn</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js#L1 "Source")
+
+Cubic easing; equivalent to [polyIn](#easePolyIn).[exponent](#poly_exponent)(3).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/cubicIn.png" alt="cubicIn">](https://observablehq.com/@d3/easing#cubicIn)
+
+<a name="easeCubicOut" href="#easeCubicOut">#</a> d3.<b>easeCubicOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js#L5 "Source")
+
+Reverse cubic easing; equivalent to 1 - [cubicIn](#easeCubicIn)(1 - *t*). Also equivalent to [polyOut](#easePolyOut).[exponent](#poly_exponent)(3).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/cubicOut.png" alt="cubicOut">](https://observablehq.com/@d3/easing#cubicOut)
+
+<a name="easeCubic" href="#easeCubic">#</a> d3.<b>easeCubic</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js "Source")
+<br><a name="easeCubicInOut" href="#easeCubicInOut">#</a> d3.<b>easeCubicInOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/cubic.js#L9 "Source")
+
+Symmetric cubic easing; scales [cubicIn](#easeCubicIn) for *t* in [0, 0.5] and [cubicOut](#easeCubicOut) for *t* in [0.5, 1]. Also equivalent to [poly](#easePoly).[exponent](#poly_exponent)(3).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/cubicInOut.png" alt="cubicInOut">](https://observablehq.com/@d3/easing#cubicInOut)
+
+<a name="easeSinIn" href="#easeSinIn">#</a> d3.<b>easeSinIn</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js#L4 "Source")
+
+Sinusoidal easing; returns sin(*t*).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/sinIn.png" alt="sinIn">](https://observablehq.com/@d3/easing#sinIn)
+
+<a name="easeSinOut" href="#easeSinOut">#</a> d3.<b>easeSinOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js#L8 "Source")
+
+Reverse sinusoidal easing; equivalent to 1 - [sinIn](#easeSinIn)(1 - *t*).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/sinOut.png" alt="sinOut">](https://observablehq.com/@d3/easing#sinOut)
+
+<a name="easeSin" href="#easeSin">#</a> d3.<b>easeSin</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js "Source")
+<br><a name="easeSinInOut" href="#easeSinInOut">#</a> d3.<b>easeSinInOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/sin.js#L12 "Source")
+
+Symmetric sinusoidal easing; scales [sinIn](#easeSinIn) for *t* in [0, 0.5] and [sinOut](#easeSinOut) for *t* in [0.5, 1].
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/sinInOut.png" alt="sinInOut">](https://observablehq.com/@d3/easing#sinInOut)
+
+<a name="easeExpIn" href="#easeExpIn">#</a> d3.<b>easeExpIn</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js#L1 "Source")
+
+Exponential easing; raises 2 to the exponent 10 \* (*t* - 1).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/expIn.png" alt="expIn">](https://observablehq.com/@d3/easing#expIn)
+
+<a name="easeExpOut" href="#easeExpOut">#</a> d3.<b>easeExpOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js#L5 "Source")
+
+Reverse exponential easing; equivalent to 1 - [expIn](#easeExpIn)(1 - *t*).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/expOut.png" alt="expOut">](https://observablehq.com/@d3/easing#expOut)
+
+<a name="easeExp" href="#easeExp">#</a> d3.<b>easeExp</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js "Source")
+<br><a name="easeExpInOut" href="#easeExpInOut">#</a> d3.<b>easeExpInOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/exp.js#L9 "Source")
+
+Symmetric exponential easing; scales [expIn](#easeExpIn) for *t* in [0, 0.5] and [expOut](#easeExpOut) for *t* in [0.5, 1].
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/expInOut.png" alt="expInOut">](https://observablehq.com/@d3/easing#expInOut)
+
+<a name="easeCircleIn" href="#easeCircleIn">#</a> d3.<b>easeCircleIn</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js#L1 "Source")
+
+Circular easing.
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/circleIn.png" alt="circleIn">](https://observablehq.com/@d3/easing#circleIn)
+
+<a name="easeCircleOut" href="#easeCircleOut">#</a> d3.<b>easeCircleOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js#L5 "Source")
+
+Reverse circular easing; equivalent to 1 - [circleIn](#easeCircleIn)(1 - *t*).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/circleOut.png" alt="circleOut">](https://observablehq.com/@d3/easing#circleOut)
+
+<a name="easeCircle" href="#easeCircle">#</a> d3.<b>easeCircle</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js "Source")
+<br><a name="easeCircleInOut" href="#easeCircleInOut">#</a> d3.<b>easeCircleInOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/circle.js#L9 "Source")
+
+Symmetric circular easing; scales [circleIn](#easeCircleIn) for *t* in [0, 0.5] and [circleOut](#easeCircleOut) for *t* in [0.5, 1].
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/circleInOut.png" alt="circleInOut">](https://observablehq.com/@d3/easing#circleInOut)
+
+<a name="easeElasticIn" href="#easeElasticIn">#</a> d3.<b>easeElasticIn</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L5 "Source")
+
+Elastic easing, like a rubber band. The [amplitude](#elastic_amplitude) and [period](#elastic_period) of the oscillation are configurable; if not specified, they default to 1 and 0.3, respectively.
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/elasticIn.png" alt="elasticIn">](https://observablehq.com/@d3/easing#elasticIn)
+
+<a name="easeElastic" href="#easeElastic">#</a> d3.<b>easeElastic</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js "Source")
+<br><a name="easeElasticOut" href="#easeElasticOut">#</a> d3.<b>easeElasticOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L18 "Source")
+
+Reverse elastic easing; equivalent to 1 - [elasticIn](#easeElasticIn)(1 - *t*).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/elasticOut.png" alt="elasticOut">](https://observablehq.com/@d3/easing#elasticOut)
+
+<a name="easeElasticInOut" href="#easeElasticInOut">#</a> d3.<b>easeElasticInOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L31 "Source")
+
+Symmetric elastic easing; scales [elasticIn](#easeElasticIn) for *t* in [0, 0.5] and [elasticOut](#easeElasticOut) for *t* in [0.5, 1].
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/elasticInOut.png" alt="elasticInOut">](https://observablehq.com/@d3/easing#elasticInOut)
+
+<a name="elastic_amplitude" href="#elastic_amplitude">#</a> <i>elastic</i>.<b>amplitude</b>(<i>a</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L40 "Source")
+
+Returns a new elastic easing with the specified amplitude *a*.
+
+<a name="elastic_period" href="#elastic_period">#</a> <i>elastic</i>.<b>period</b>(<i>p</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/elastic.js#L41 "Source")
+
+Returns a new elastic easing with the specified period *p*.
+
+<a name="easeBackIn" href="#easeBackIn">#</a> d3.<b>easeBackIn</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L3 "Source")
+
+[Anticipatory](https://en.wikipedia.org/wiki/12_basic_principles_of_animation#Anticipation) easing, like a dancer bending his knees before jumping off the floor. The degree of [overshoot](#back_overshoot) is configurable; if not specified, it defaults to 1.70158.
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/backIn.png" alt="backIn">](https://observablehq.com/@d3/easing#backIn)
+
+<a name="easeBackOut" href="#easeBackOut">#</a> d3.<b>easeBackOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L15 "Source")
+
+Reverse anticipatory easing; equivalent to 1 - [backIn](#easeBackIn)(1 - *t*).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/backOut.png" alt="backOut">](https://observablehq.com/@d3/easing#backOut)
+
+<a name="easeBack" href="#easeBack">#</a> d3.<b>easeBack</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js "Source")
+<br><a name="easeBackInOut" href="#easeBackInOut">#</a> d3.<b>easeBackInOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L27 "Source")
+
+Symmetric anticipatory easing; scales [backIn](#easeBackIn) for *t* in [0, 0.5] and [backOut](#easeBackOut) for *t* in [0.5, 1].
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/backInOut.png" alt="backInOut">](https://observablehq.com/@d3/easing#backInOut)
+
+<a name="back_overshoot" href="#back_overshoot">#</a> <i>back</i>.<b>overshoot</b>(<i>s</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/back.js#L1 "Source")
+
+Returns a new back easing with the specified overshoot *s*.
+
+<a name="easeBounceIn" href="#easeBounceIn">#</a> d3.<b>easeBounceIn</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js#L12 "Source")
+
+Bounce easing, like a rubber ball.
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/bounceIn.png" alt="bounceIn">](https://observablehq.com/@d3/easing#bounceIn)
+
+<a name="easeBounce" href="#easeBounce">#</a> d3.<b>easeBounce</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js "Source")
+<br><a name="easeBounceOut" href="#easeBounceOut">#</a> d3.<b>easeBounceOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js#L16 "Source")
+
+Reverse bounce easing; equivalent to 1 - [bounceIn](#easeBounceIn)(1 - *t*).
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/bounceOut.png" alt="bounceOut">](https://observablehq.com/@d3/easing#bounceOut)
+
+<a name="easeBounceInOut" href="#easeBounceInOut">#</a> d3.<b>easeBounceInOut</b>(<i>t</i>) [<>](https://github.com/d3/d3-ease/blob/master/src/bounce.js#L20 "Source")
+
+Symmetric bounce easing; scales [bounceIn](#easeBounceIn) for *t* in [0, 0.5] and [bounceOut](#easeBounceOut) for *t* in [0.5, 1].
+
+[<img src="https://raw.githubusercontent.com/d3/d3-ease/master/img/bounceInOut.png" alt="bounceInOut">](https://observablehq.com/@d3/easing#bounceInOut)
Index: node_modules/d3-ease/dist/d3-ease.js
===================================================================
--- node_modules/d3-ease/dist/d3-ease.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/dist/d3-ease.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,262 @@
+// https://d3js.org/d3-ease/ v3.0.1 Copyright 2010-2021 Mike Bostock, 2001 Robert Penner
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+typeof define === 'function' && define.amd ? define(['exports'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
+}(this, (function (exports) { 'use strict';
+
+const linear = t => +t;
+
+function quadIn(t) {
+  return t * t;
+}
+
+function quadOut(t) {
+  return t * (2 - t);
+}
+
+function quadInOut(t) {
+  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
+}
+
+function cubicIn(t) {
+  return t * t * t;
+}
+
+function cubicOut(t) {
+  return --t * t * t + 1;
+}
+
+function cubicInOut(t) {
+  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
+}
+
+var exponent = 3;
+
+var polyIn = (function custom(e) {
+  e = +e;
+
+  function polyIn(t) {
+    return Math.pow(t, e);
+  }
+
+  polyIn.exponent = custom;
+
+  return polyIn;
+})(exponent);
+
+var polyOut = (function custom(e) {
+  e = +e;
+
+  function polyOut(t) {
+    return 1 - Math.pow(1 - t, e);
+  }
+
+  polyOut.exponent = custom;
+
+  return polyOut;
+})(exponent);
+
+var polyInOut = (function custom(e) {
+  e = +e;
+
+  function polyInOut(t) {
+    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
+  }
+
+  polyInOut.exponent = custom;
+
+  return polyInOut;
+})(exponent);
+
+var pi = Math.PI,
+    halfPi = pi / 2;
+
+function sinIn(t) {
+  return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);
+}
+
+function sinOut(t) {
+  return Math.sin(t * halfPi);
+}
+
+function sinInOut(t) {
+  return (1 - Math.cos(pi * t)) / 2;
+}
+
+// tpmt is two power minus ten times t scaled to [0,1]
+function tpmt(x) {
+  return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;
+}
+
+function expIn(t) {
+  return tpmt(1 - +t);
+}
+
+function expOut(t) {
+  return 1 - tpmt(t);
+}
+
+function expInOut(t) {
+  return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;
+}
+
+function circleIn(t) {
+  return 1 - Math.sqrt(1 - t * t);
+}
+
+function circleOut(t) {
+  return Math.sqrt(1 - --t * t);
+}
+
+function circleInOut(t) {
+  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
+}
+
+var b1 = 4 / 11,
+    b2 = 6 / 11,
+    b3 = 8 / 11,
+    b4 = 3 / 4,
+    b5 = 9 / 11,
+    b6 = 10 / 11,
+    b7 = 15 / 16,
+    b8 = 21 / 22,
+    b9 = 63 / 64,
+    b0 = 1 / b1 / b1;
+
+function bounceIn(t) {
+  return 1 - bounceOut(1 - t);
+}
+
+function bounceOut(t) {
+  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
+}
+
+function bounceInOut(t) {
+  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
+}
+
+var overshoot = 1.70158;
+
+var backIn = (function custom(s) {
+  s = +s;
+
+  function backIn(t) {
+    return (t = +t) * t * (s * (t - 1) + t);
+  }
+
+  backIn.overshoot = custom;
+
+  return backIn;
+})(overshoot);
+
+var backOut = (function custom(s) {
+  s = +s;
+
+  function backOut(t) {
+    return --t * t * ((t + 1) * s + t) + 1;
+  }
+
+  backOut.overshoot = custom;
+
+  return backOut;
+})(overshoot);
+
+var backInOut = (function custom(s) {
+  s = +s;
+
+  function backInOut(t) {
+    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
+  }
+
+  backInOut.overshoot = custom;
+
+  return backInOut;
+})(overshoot);
+
+var tau = 2 * Math.PI,
+    amplitude = 1,
+    period = 0.3;
+
+var elasticIn = (function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+  function elasticIn(t) {
+    return a * tpmt(-(--t)) * Math.sin((s - t) / p);
+  }
+
+  elasticIn.amplitude = function(a) { return custom(a, p * tau); };
+  elasticIn.period = function(p) { return custom(a, p); };
+
+  return elasticIn;
+})(amplitude, period);
+
+var elasticOut = (function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+  function elasticOut(t) {
+    return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);
+  }
+
+  elasticOut.amplitude = function(a) { return custom(a, p * tau); };
+  elasticOut.period = function(p) { return custom(a, p); };
+
+  return elasticOut;
+})(amplitude, period);
+
+var elasticInOut = (function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+  function elasticInOut(t) {
+    return ((t = t * 2 - 1) < 0
+        ? a * tpmt(-t) * Math.sin((s - t) / p)
+        : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;
+  }
+
+  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
+  elasticInOut.period = function(p) { return custom(a, p); };
+
+  return elasticInOut;
+})(amplitude, period);
+
+exports.easeBack = backInOut;
+exports.easeBackIn = backIn;
+exports.easeBackInOut = backInOut;
+exports.easeBackOut = backOut;
+exports.easeBounce = bounceOut;
+exports.easeBounceIn = bounceIn;
+exports.easeBounceInOut = bounceInOut;
+exports.easeBounceOut = bounceOut;
+exports.easeCircle = circleInOut;
+exports.easeCircleIn = circleIn;
+exports.easeCircleInOut = circleInOut;
+exports.easeCircleOut = circleOut;
+exports.easeCubic = cubicInOut;
+exports.easeCubicIn = cubicIn;
+exports.easeCubicInOut = cubicInOut;
+exports.easeCubicOut = cubicOut;
+exports.easeElastic = elasticOut;
+exports.easeElasticIn = elasticIn;
+exports.easeElasticInOut = elasticInOut;
+exports.easeElasticOut = elasticOut;
+exports.easeExp = expInOut;
+exports.easeExpIn = expIn;
+exports.easeExpInOut = expInOut;
+exports.easeExpOut = expOut;
+exports.easeLinear = linear;
+exports.easePoly = polyInOut;
+exports.easePolyIn = polyIn;
+exports.easePolyInOut = polyInOut;
+exports.easePolyOut = polyOut;
+exports.easeQuad = quadInOut;
+exports.easeQuadIn = quadIn;
+exports.easeQuadInOut = quadInOut;
+exports.easeQuadOut = quadOut;
+exports.easeSin = sinInOut;
+exports.easeSinIn = sinIn;
+exports.easeSinInOut = sinInOut;
+exports.easeSinOut = sinOut;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
Index: node_modules/d3-ease/dist/d3-ease.min.js
===================================================================
--- node_modules/d3-ease/dist/d3-ease.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/dist/d3-ease.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-ease/ v3.0.1 Copyright 2010-2021 Mike Bostock, 2001 Robert Penner
+!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self).d3=n.d3||{})}(this,(function(n){"use strict";function e(n){return((n*=2)<=1?n*n:--n*(2-n)+1)/2}function t(n){return((n*=2)<=1?n*n*n:(n-=2)*n*n+2)/2}var u=function n(e){function t(n){return Math.pow(n,e)}return e=+e,t.exponent=n,t}(3),r=function n(e){function t(n){return 1-Math.pow(1-n,e)}return e=+e,t.exponent=n,t}(3),a=function n(e){function t(n){return((n*=2)<=1?Math.pow(n,e):2-Math.pow(2-n,e))/2}return e=+e,t.exponent=n,t}(3),o=Math.PI,i=o/2;function c(n){return(1-Math.cos(o*n))/2}function s(n){return 1.0009775171065494*(Math.pow(2,-10*n)-.0009765625)}function f(n){return((n*=2)<=1?s(1-n):2-s(n-1))/2}function h(n){return((n*=2)<=1?1-Math.sqrt(1-n*n):Math.sqrt(1-(n-=2)*n)+1)/2}var p=4/11,M=7.5625;function d(n){return(n=+n)<p?M*n*n:n<.7272727272727273?M*(n-=.5454545454545454)*n+.75:n<.9090909090909091?M*(n-=.8181818181818182)*n+.9375:M*(n-=.9545454545454546)*n+.984375}var l=1.70158,I=function n(e){function t(n){return(n=+n)*n*(e*(n-1)+n)}return e=+e,t.overshoot=n,t}(l),O=function n(e){function t(n){return--n*n*((n+1)*e+n)+1}return e=+e,t.overshoot=n,t}(l),x=function n(e){function t(n){return((n*=2)<1?n*n*((e+1)*n-e):(n-=2)*n*((e+1)*n+e)+2)/2}return e=+e,t.overshoot=n,t}(l),v=2*Math.PI,y=function n(e,t){var u=Math.asin(1/(e=Math.max(1,e)))*(t/=v);function r(n){return e*s(- --n)*Math.sin((u-n)/t)}return r.amplitude=function(e){return n(e,t*v)},r.period=function(t){return n(e,t)},r}(1,.3),b=function n(e,t){var u=Math.asin(1/(e=Math.max(1,e)))*(t/=v);function r(n){return 1-e*s(n=+n)*Math.sin((n+u)/t)}return r.amplitude=function(e){return n(e,t*v)},r.period=function(t){return n(e,t)},r}(1,.3),m=function n(e,t){var u=Math.asin(1/(e=Math.max(1,e)))*(t/=v);function r(n){return((n=2*n-1)<0?e*s(-n)*Math.sin((u-n)/t):2-e*s(n)*Math.sin((u+n)/t))/2}return r.amplitude=function(e){return n(e,t*v)},r.period=function(t){return n(e,t)},r}(1,.3);n.easeBack=x,n.easeBackIn=I,n.easeBackInOut=x,n.easeBackOut=O,n.easeBounce=d,n.easeBounceIn=function(n){return 1-d(1-n)},n.easeBounceInOut=function(n){return((n*=2)<=1?1-d(1-n):d(n-1)+1)/2},n.easeBounceOut=d,n.easeCircle=h,n.easeCircleIn=function(n){return 1-Math.sqrt(1-n*n)},n.easeCircleInOut=h,n.easeCircleOut=function(n){return Math.sqrt(1- --n*n)},n.easeCubic=t,n.easeCubicIn=function(n){return n*n*n},n.easeCubicInOut=t,n.easeCubicOut=function(n){return--n*n*n+1},n.easeElastic=b,n.easeElasticIn=y,n.easeElasticInOut=m,n.easeElasticOut=b,n.easeExp=f,n.easeExpIn=function(n){return s(1-+n)},n.easeExpInOut=f,n.easeExpOut=function(n){return 1-s(n)},n.easeLinear=n=>+n,n.easePoly=a,n.easePolyIn=u,n.easePolyInOut=a,n.easePolyOut=r,n.easeQuad=e,n.easeQuadIn=function(n){return n*n},n.easeQuadInOut=e,n.easeQuadOut=function(n){return n*(2-n)},n.easeSin=c,n.easeSinIn=function(n){return 1==+n?1:1-Math.cos(n*i)},n.easeSinInOut=c,n.easeSinOut=function(n){return Math.sin(n*i)},Object.defineProperty(n,"__esModule",{value:!0})}));
Index: node_modules/d3-ease/package.json
===================================================================
--- node_modules/d3-ease/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+{
+  "name": "d3-ease",
+  "version": "3.0.1",
+  "description": "Easing functions for smooth animation.",
+  "homepage": "https://d3js.org/d3-ease/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-ease.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "ease",
+    "easing",
+    "animation",
+    "transition"
+  ],
+  "license": "BSD-3-Clause",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-ease.min.js",
+  "unpkg": "dist/d3-ease.min.js",
+  "exports": {
+    "umd": "./dist/d3-ease.min.js",
+    "default": "./src/index.js"
+  },
+  "sideEffects": false,
+  "devDependencies": {
+    "eslint": "7",
+    "mocha": "8",
+    "rollup": "2",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-ease/src/back.js
===================================================================
--- node_modules/d3-ease/src/back.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/back.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+var overshoot = 1.70158;
+
+export var backIn = (function custom(s) {
+  s = +s;
+
+  function backIn(t) {
+    return (t = +t) * t * (s * (t - 1) + t);
+  }
+
+  backIn.overshoot = custom;
+
+  return backIn;
+})(overshoot);
+
+export var backOut = (function custom(s) {
+  s = +s;
+
+  function backOut(t) {
+    return --t * t * ((t + 1) * s + t) + 1;
+  }
+
+  backOut.overshoot = custom;
+
+  return backOut;
+})(overshoot);
+
+export var backInOut = (function custom(s) {
+  s = +s;
+
+  function backInOut(t) {
+    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
+  }
+
+  backInOut.overshoot = custom;
+
+  return backInOut;
+})(overshoot);
Index: node_modules/d3-ease/src/bounce.js
===================================================================
--- node_modules/d3-ease/src/bounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/bounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+var b1 = 4 / 11,
+    b2 = 6 / 11,
+    b3 = 8 / 11,
+    b4 = 3 / 4,
+    b5 = 9 / 11,
+    b6 = 10 / 11,
+    b7 = 15 / 16,
+    b8 = 21 / 22,
+    b9 = 63 / 64,
+    b0 = 1 / b1 / b1;
+
+export function bounceIn(t) {
+  return 1 - bounceOut(1 - t);
+}
+
+export function bounceOut(t) {
+  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
+}
+
+export function bounceInOut(t) {
+  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
+}
Index: node_modules/d3-ease/src/circle.js
===================================================================
--- node_modules/d3-ease/src/circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+export function circleIn(t) {
+  return 1 - Math.sqrt(1 - t * t);
+}
+
+export function circleOut(t) {
+  return Math.sqrt(1 - --t * t);
+}
+
+export function circleInOut(t) {
+  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
+}
Index: node_modules/d3-ease/src/cubic.js
===================================================================
--- node_modules/d3-ease/src/cubic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/cubic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+export function cubicIn(t) {
+  return t * t * t;
+}
+
+export function cubicOut(t) {
+  return --t * t * t + 1;
+}
+
+export function cubicInOut(t) {
+  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
+}
Index: node_modules/d3-ease/src/elastic.js
===================================================================
--- node_modules/d3-ease/src/elastic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/elastic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+import {tpmt} from "./math.js";
+
+var tau = 2 * Math.PI,
+    amplitude = 1,
+    period = 0.3;
+
+export var elasticIn = (function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+  function elasticIn(t) {
+    return a * tpmt(-(--t)) * Math.sin((s - t) / p);
+  }
+
+  elasticIn.amplitude = function(a) { return custom(a, p * tau); };
+  elasticIn.period = function(p) { return custom(a, p); };
+
+  return elasticIn;
+})(amplitude, period);
+
+export var elasticOut = (function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+  function elasticOut(t) {
+    return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);
+  }
+
+  elasticOut.amplitude = function(a) { return custom(a, p * tau); };
+  elasticOut.period = function(p) { return custom(a, p); };
+
+  return elasticOut;
+})(amplitude, period);
+
+export var elasticInOut = (function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+  function elasticInOut(t) {
+    return ((t = t * 2 - 1) < 0
+        ? a * tpmt(-t) * Math.sin((s - t) / p)
+        : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;
+  }
+
+  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
+  elasticInOut.period = function(p) { return custom(a, p); };
+
+  return elasticInOut;
+})(amplitude, period);
Index: node_modules/d3-ease/src/exp.js
===================================================================
--- node_modules/d3-ease/src/exp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/exp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import {tpmt} from "./math.js";
+
+export function expIn(t) {
+  return tpmt(1 - +t);
+}
+
+export function expOut(t) {
+  return 1 - tpmt(t);
+}
+
+export function expInOut(t) {
+  return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;
+}
Index: node_modules/d3-ease/src/index.js
===================================================================
--- node_modules/d3-ease/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,66 @@
+export {
+  linear as easeLinear
+} from "./linear.js";
+
+export {
+  quadInOut as easeQuad,
+  quadIn as easeQuadIn,
+  quadOut as easeQuadOut,
+  quadInOut as easeQuadInOut
+} from "./quad.js";
+
+export {
+  cubicInOut as easeCubic,
+  cubicIn as easeCubicIn,
+  cubicOut as easeCubicOut,
+  cubicInOut as easeCubicInOut
+} from "./cubic.js";
+
+export {
+  polyInOut as easePoly,
+  polyIn as easePolyIn,
+  polyOut as easePolyOut,
+  polyInOut as easePolyInOut
+} from "./poly.js";
+
+export {
+  sinInOut as easeSin,
+  sinIn as easeSinIn,
+  sinOut as easeSinOut,
+  sinInOut as easeSinInOut
+} from "./sin.js";
+
+export {
+  expInOut as easeExp,
+  expIn as easeExpIn,
+  expOut as easeExpOut,
+  expInOut as easeExpInOut
+} from "./exp.js";
+
+export {
+  circleInOut as easeCircle,
+  circleIn as easeCircleIn,
+  circleOut as easeCircleOut,
+  circleInOut as easeCircleInOut
+} from "./circle.js";
+
+export {
+  bounceOut as easeBounce,
+  bounceIn as easeBounceIn,
+  bounceOut as easeBounceOut,
+  bounceInOut as easeBounceInOut
+} from "./bounce.js";
+
+export {
+  backInOut as easeBack,
+  backIn as easeBackIn,
+  backOut as easeBackOut,
+  backInOut as easeBackInOut
+} from "./back.js";
+
+export {
+  elasticOut as easeElastic,
+  elasticIn as easeElasticIn,
+  elasticOut as easeElasticOut,
+  elasticInOut as easeElasticInOut
+} from "./elastic.js";
Index: node_modules/d3-ease/src/linear.js
===================================================================
--- node_modules/d3-ease/src/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export const linear = t => +t;
Index: node_modules/d3-ease/src/math.js
===================================================================
--- node_modules/d3-ease/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+// tpmt is two power minus ten times t scaled to [0,1]
+export function tpmt(x) {
+  return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;
+}
Index: node_modules/d3-ease/src/poly.js
===================================================================
--- node_modules/d3-ease/src/poly.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/poly.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+var exponent = 3;
+
+export var polyIn = (function custom(e) {
+  e = +e;
+
+  function polyIn(t) {
+    return Math.pow(t, e);
+  }
+
+  polyIn.exponent = custom;
+
+  return polyIn;
+})(exponent);
+
+export var polyOut = (function custom(e) {
+  e = +e;
+
+  function polyOut(t) {
+    return 1 - Math.pow(1 - t, e);
+  }
+
+  polyOut.exponent = custom;
+
+  return polyOut;
+})(exponent);
+
+export var polyInOut = (function custom(e) {
+  e = +e;
+
+  function polyInOut(t) {
+    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
+  }
+
+  polyInOut.exponent = custom;
+
+  return polyInOut;
+})(exponent);
Index: node_modules/d3-ease/src/quad.js
===================================================================
--- node_modules/d3-ease/src/quad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/quad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+export function quadIn(t) {
+  return t * t;
+}
+
+export function quadOut(t) {
+  return t * (2 - t);
+}
+
+export function quadInOut(t) {
+  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
+}
Index: node_modules/d3-ease/src/sin.js
===================================================================
--- node_modules/d3-ease/src/sin.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-ease/src/sin.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+var pi = Math.PI,
+    halfPi = pi / 2;
+
+export function sinIn(t) {
+  return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);
+}
+
+export function sinOut(t) {
+  return Math.sin(t * halfPi);
+}
+
+export function sinInOut(t) {
+  return (1 - Math.cos(pi * t)) / 2;
+}
Index: node_modules/d3-format/LICENSE
===================================================================
--- node_modules/d3-format/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-format/README.md
===================================================================
--- node_modules/d3-format/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,350 @@
+# d3-format
+
+Ever noticed how sometimes JavaScript doesn’t display numbers the way you expect? Like, you tried to print tenths with a simple loop:
+
+```js
+for (let i = 0; i < 10; ++i) {
+  console.log(0.1 * i);
+}
+```
+
+And you got this:
+
+```js
+0
+0.1
+0.2
+0.30000000000000004
+0.4
+0.5
+0.6000000000000001
+0.7000000000000001
+0.8
+0.9
+```
+
+Welcome to [binary floating point](https://en.wikipedia.org/wiki/Double-precision_floating-point_format)! ಠ_ಠ
+
+Yet rounding error is not the only reason to customize number formatting. A table of numbers should be formatted consistently for comparison; above, 0.0 would be better than 0. Large numbers should have grouped digits (e.g., 42,000) or be in scientific or metric notation (4.2e+4, 42k). Currencies should have fixed precision ($3.50). Reported numerical results should be rounded to significant digits (4021 becomes 4000). Number formats should appropriate to the reader’s locale (42.000,00 or 42,000.00). The list goes on.
+
+Formatting numbers for human consumption is the purpose of d3-format, which is modeled after Python 3’s [format specification mini-language](https://docs.python.org/3/library/string.html#format-specification-mini-language) ([PEP 3101](https://www.python.org/dev/peps/pep-3101/)). Revisiting the example above:
+
+```js
+const f = d3.format(".1f");
+for (let i = 0; i < 10; ++i) {
+  console.log(f(0.1 * i));
+}
+```
+
+Now you get this:
+
+```js
+0.0
+0.1
+0.2
+0.3
+0.4
+0.5
+0.6
+0.7
+0.8
+0.9
+```
+
+But d3-format is much more than an alias for [number.toFixed](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed)! A few more examples:
+
+```js
+d3.format(".0%")(0.123);  // rounded percentage, "12%"
+d3.format("($.2f")(-3.5); // localized fixed-point currency, "(£3.50)"
+d3.format("+20")(42);     // space-filled and signed, "                 +42"
+d3.format(".^20")(42);    // dot-filled and centered, ".........42........."
+d3.format(".2s")(42e6);   // SI-prefix with two significant digits, "42M"
+d3.format("#x")(48879);   // prefixed lowercase hexadecimal, "0xbeef"
+d3.format(",.2r")(4223);  // grouped thousands with two significant digits, "4,200"
+```
+
+See [*locale*.format](#locale_format) for a detailed specification, and try running [d3.formatSpecifier](#formatSpecifier) on the above formats to decode their meaning.
+
+## Installing
+
+If you use npm, `npm install d3-format`. You can also download the [latest release on GitHub](https://github.com/d3/d3-format/releases/latest). In modern browsers, you can import d3-format from Skypack:
+
+```html
+<script type="module">
+
+import {format} from "https://cdn.skypack.dev/d3-format@3";
+
+const f = format(".2s");
+
+</script>
+```
+
+For legacy environments, you can load d3-format’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-format@3"></script>
+<script>
+
+var f = d3.format(".2s");
+
+</script>
+```
+
+Locale files are published to npm and can be loaded using [d3.json](https://github.com/d3/d3-fetch/blob/master/README.md#json). For example, to set Russian as the default locale:
+
+```js
+const locale = await d3.json("https://cdn.jsdelivr.net/npm/d3-format@3/locale/ru-RU.json");
+d3.formatDefaultLocale(locale);
+const f = d3.format("$,");
+console.log(f(1234.56)); // 1 234,56 руб.
+```
+
+[Try d3-format in your browser.](https://observablehq.com/@d3/d3-format)
+
+## API Reference
+
+<a name="format" href="#format">#</a> d3.<b>format</b>(<i>specifier</i>) [<>](https://github.com/d3/d3-format/blob/main/src/defaultLocale.js#L4 "Source")
+
+An alias for [*locale*.format](#locale_format) on the [default locale](#formatDefaultLocale).
+
+<a name="formatPrefix" href="#formatPrefix">#</a> d3.<b>formatPrefix</b>(<i>specifier</i>, <i>value</i>) [<>](https://github.com/d3/d3-format/blob/main/src/defaultLocale.js#L5 "Source")
+
+An alias for [*locale*.formatPrefix](#locale_formatPrefix) on the [default locale](#formatDefaultLocale).
+
+<a name="locale_format" href="#locale_format">#</a> <i>locale</i>.<b>format</b>(<i>specifier</i>) [<>](https://github.com/d3/d3-format/blob/main/src/locale.js#L18 "Source")
+
+Returns a new format function for the given string *specifier*. The returned function takes a number as the only argument, and returns a string representing the formatted number. The general form of a specifier is:
+
+```
+[​[fill]align][sign][symbol][0][width][,][.precision][~][type]
+```
+
+The *fill* can be any character. The presence of a fill character is signaled by the *align* character following it, which must be one of the following:
+
+* `>` - Forces the field to be right-aligned within the available space. (Default behavior).
+* `<` - Forces the field to be left-aligned within the available space.
+* `^` - Forces the field to be centered within the available space.
+* `=` - like `>`, but with any sign and symbol to the left of any padding.
+
+The *sign* can be:
+
+* `-` - nothing for zero or positive and a minus sign for negative. (Default behavior.)
+* `+` - a plus sign for zero or positive and a minus sign for negative.
+* `(` - nothing for zero or positive and parentheses for negative.
+* ` ` (space) - a space for zero or positive and a minus sign for negative.
+
+The *symbol* can be:
+
+* `$` - apply currency symbols per the locale definition.
+* `#` - for binary, octal, or hexadecimal notation, prefix by `0b`, `0o`, or `0x`, respectively.
+
+The *zero* (`0`) option enables zero-padding; this implicitly sets *fill* to `0` and *align* to `=`. The *width* defines the minimum field width; if not specified, then the width will be determined by the content. The *comma* (`,`) option enables the use of a group separator, such as a comma for thousands.
+
+Depending on the *type*, the *precision* either indicates the number of digits that follow the decimal point (types `f` and `%`), or the number of significant digits (types `​`, `e`, `g`, `r`, `s` and `p`). If the precision is not specified, it defaults to 6 for all types except `​` (none), which defaults to 12. Precision is ignored for integer formats (types `b`, `o`, `d`, `x`, and `X`) and character data (type `c`). See [precisionFixed](#precisionFixed) and [precisionRound](#precisionRound) for help picking an appropriate precision.
+
+The `~` option trims insignificant trailing zeros across all format types. This is most commonly used in conjunction with types `r`, `e`, `s` and `%`. For example:
+
+```js
+d3.format("s")(1500);  // "1.50000k"
+d3.format("~s")(1500); // "1.5k"
+```
+
+The available *type* values are:
+
+* `e` - exponent notation.
+* `f` - fixed point notation.
+* `g` - either decimal or exponent notation, rounded to significant digits.
+* `r` - decimal notation, rounded to significant digits.
+* `s` - decimal notation with an [SI prefix](#locale_formatPrefix), rounded to significant digits.
+* `%` - multiply by 100, and then decimal notation with a percent sign.
+* `p` - multiply by 100, round to significant digits, and then decimal notation with a percent sign.
+* `b` - binary notation, rounded to integer.
+* `o` - octal notation, rounded to integer.
+* `d` - decimal notation, rounded to integer.
+* `x` - hexadecimal notation, using lower-case letters, rounded to integer.
+* `X` - hexadecimal notation, using upper-case letters, rounded to integer.
+* `c` - character data, for a string of text.
+
+The type `​` (none) is also supported as shorthand for `~g` (with a default precision of 12 instead of 6), and the type `n` is shorthand for `,g`. For the `g`, `n` and `​` (none) types, decimal notation is used if the resulting string would have *precision* or fewer digits; otherwise, exponent notation is used. For example:
+
+```js
+d3.format(".2")(42);  // "42"
+d3.format(".2")(4.2); // "4.2"
+d3.format(".1")(42);  // "4e+1"
+d3.format(".1")(4.2); // "4"
+```
+
+<a name="locale_formatPrefix" href="#locale_formatPrefix">#</a> <i>locale</i>.<b>formatPrefix</b>(<i>specifier</i>, <i>value</i>) [<>](https://github.com/d3/d3-format/blob/main/src/locale.js#L127 "Source")
+
+Equivalent to [*locale*.format](#locale_format), except the returned function will convert values to the units of the appropriate [SI prefix](https://en.wikipedia.org/wiki/Metric_prefix#List_of_SI_prefixes) for the specified numeric reference *value* before formatting in fixed point notation. The following prefixes are supported:
+
+* `y` - yocto, 10⁻²⁴
+* `z` - zepto, 10⁻²¹
+* `a` - atto, 10⁻¹⁸
+* `f` - femto, 10⁻¹⁵
+* `p` - pico, 10⁻¹²
+* `n` - nano, 10⁻⁹
+* `µ` - micro, 10⁻⁶
+* `m` - milli, 10⁻³
+* `​` (none) - 10⁰
+* `k` - kilo, 10³
+* `M` - mega, 10⁶
+* `G` - giga, 10⁹
+* `T` - tera, 10¹²
+* `P` - peta, 10¹⁵
+* `E` - exa, 10¹⁸
+* `Z` - zetta, 10²¹
+* `Y` - yotta, 10²⁴
+
+Unlike [*locale*.format](#locale_format) with the `s` format type, this method returns a formatter with a consistent SI prefix, rather than computing the prefix dynamically for each number. In addition, the *precision* for the given *specifier* represents the number of digits past the decimal point (as with `f` fixed point notation), not the number of significant digits. For example:
+
+```js
+const f = d3.formatPrefix(",.0", 1e-6);
+f(0.00042); // "420µ"
+f(0.0042); // "4,200µ"
+```
+
+This method is useful when formatting multiple numbers in the same units for easy comparison. See [precisionPrefix](#precisionPrefix) for help picking an appropriate precision, and [bl.ocks.org/9764126](http://bl.ocks.org/mbostock/9764126) for an example.
+
+<a name="formatSpecifier" href="#formatSpecifier">#</a> d3.<b>formatSpecifier</b>(<i>specifier</i>) [<>](https://github.com/d3/d3-format/blob/main/src/formatSpecifier.js "Source")
+
+Parses the specified *specifier*, returning an object with exposed fields that correspond to the [format specification mini-language](#locale_format) and a toString method that reconstructs the specifier. For example, `formatSpecifier("s")` returns:
+
+```js
+FormatSpecifier {
+  "fill": " ",
+  "align": ">",
+  "sign": "-",
+  "symbol": "",
+  "zero": false,
+  "width": undefined,
+  "comma": false,
+  "precision": undefined,
+  "trim": false,
+  "type": "s"
+}
+```
+
+This method is useful for understanding how format specifiers are parsed and for deriving new specifiers. For example, you might compute an appropriate precision based on the numbers you want to format using [precisionFixed](#precisionFixed) and then create a new format:
+
+```js
+const s = d3.formatSpecifier("f");
+s.precision = d3.precisionFixed(0.01);
+const f = d3.format(s);
+f(42); // "42.00";
+```
+
+<a name="FormatSpecifier" href="#FormatSpecifier">#</a> new d3.<b>FormatSpecifier</b>(<i>specifier</i>) [<>](https://github.com/d3/d3-format/blob/main/src/formatSpecifier.js "Source")
+
+Given the specified *specifier* object, returning an object with exposed fields that correspond to the [format specification mini-language](#locale_format) and a toString method that reconstructs the specifier. For example, `new FormatSpecifier({type: "s"})` returns:
+
+```js
+FormatSpecifier {
+  "fill": " ",
+  "align": ">",
+  "sign": "-",
+  "symbol": "",
+  "zero": false,
+  "width": undefined,
+  "comma": false,
+  "precision": undefined,
+  "trim": false,
+  "type": "s"
+}
+```
+
+<a name="precisionFixed" href="#precisionFixed">#</a> d3.<b>precisionFixed</b>(<i>step</i>) [<>](https://github.com/d3/d3-format/blob/main/src/precisionFixed.js "Source")
+
+Returns a suggested decimal precision for fixed point notation given the specified numeric *step* value. The *step* represents the minimum absolute difference between values that will be formatted. (This assumes that the values to be formatted are also multiples of *step*.) For example, given the numbers 1, 1.5, and 2, the *step* should be 0.5 and the suggested precision is 1:
+
+```js
+const p = d3.precisionFixed(0.5);
+const f = d3.format("." + p + "f");
+f(1);   // "1.0"
+f(1.5); // "1.5"
+f(2);   // "2.0"
+```
+
+Whereas for the numbers 1, 2 and 3, the *step* should be 1 and the suggested precision is 0:
+
+```js
+const p = d3.precisionFixed(1);
+const f = d3.format("." + p + "f");
+f(1); // "1"
+f(2); // "2"
+f(3); // "3"
+```
+
+Note: for the `%` format type, subtract two:
+
+```js
+const p = Math.max(0, d3.precisionFixed(0.05) - 2);
+const f = d3.format("." + p + "%");
+f(0.45); // "45%"
+f(0.50); // "50%"
+f(0.55); // "55%"
+```
+
+<a name="precisionPrefix" href="#precisionPrefix">#</a> d3.<b>precisionPrefix</b>(<i>step</i>, <i>value</i>) [<>](https://github.com/d3/d3-format/blob/main/src/precisionPrefix.js "Source")
+
+Returns a suggested decimal precision for use with [*locale*.formatPrefix](#locale_formatPrefix) given the specified numeric *step* and reference *value*. The *step* represents the minimum absolute difference between values that will be formatted, and *value* determines which SI prefix will be used. (This assumes that the values to be formatted are also multiples of *step*.) For example, given the numbers 1.1e6, 1.2e6, and 1.3e6, the *step* should be 1e5, the *value* could be 1.3e6, and the suggested precision is 1:
+
+```js
+const p = d3.precisionPrefix(1e5, 1.3e6);
+const f = d3.formatPrefix("." + p, 1.3e6);
+f(1.1e6); // "1.1M"
+f(1.2e6); // "1.2M"
+f(1.3e6); // "1.3M"
+```
+
+<a name="precisionRound" href="#precisionRound">#</a> d3.<b>precisionRound</b>(<i>step</i>, <i>max</i>) [<>](https://github.com/d3/d3-format/blob/main/src/precisionRound.js "Source")
+
+Returns a suggested decimal precision for format types that round to significant digits given the specified numeric *step* and *max* values. The *step* represents the minimum absolute difference between values that will be formatted, and the *max* represents the largest absolute value that will be formatted. (This assumes that the values to be formatted are also multiples of *step*.) For example, given the numbers 0.99, 1.0, and 1.01, the *step* should be 0.01, the *max* should be 1.01, and the suggested precision is 3:
+
+```js
+const p = d3.precisionRound(0.01, 1.01);
+const f = d3.format("." + p + "r");
+f(0.99); // "0.990"
+f(1.0);  // "1.00"
+f(1.01); // "1.01"
+```
+
+Whereas for the numbers 0.9, 1.0, and 1.1, the *step* should be 0.1, the *max* should be 1.1, and the suggested precision is 2:
+
+```js
+const p = d3.precisionRound(0.1, 1.1);
+const f = d3.format("." + p + "r");
+f(0.9); // "0.90"
+f(1.0); // "1.0"
+f(1.1); // "1.1"
+```
+
+Note: for the `e` format type, subtract one:
+
+```js
+const p = Math.max(0, d3.precisionRound(0.01, 1.01) - 1);
+const f = d3.format("." + p + "e");
+f(0.01); // "1.00e-2"
+f(1.01); // "1.01e+0"
+```
+
+### Locales
+
+<a name="formatLocale" href="#formatLocale">#</a> d3.<b>formatLocale</b>(<i>definition</i>) [<>](https://github.com/d3/d3-format/blob/main/src/locale.js "Source")
+
+Returns a *locale* object for the specified *definition* with [*locale*.format](#locale_format) and [*locale*.formatPrefix](#locale_formatPrefix) methods. The *definition* must include the following properties:
+
+* `decimal` - the decimal point (e.g., `"."`).
+* `thousands` - the group separator (e.g., `","`).
+* `grouping` - the array of group sizes (e.g., `[3]`), cycled as needed.
+* `currency` - the currency prefix and suffix (e.g., `["$", ""]`).
+* `numerals` - optional; an array of ten strings to replace the numerals 0-9.
+* `percent` - optional; the percent sign (defaults to `"%"`).
+* `minus` - optional; the minus sign (defaults to `"−"`).
+* `nan` - optional; the not-a-number value (defaults `"NaN"`).
+
+Note that the *thousands* property is a misnomer, as the grouping definition allows groups other than thousands.
+
+<a name="formatDefaultLocale" href="#formatDefaultLocale">#</a> d3.<b>formatDefaultLocale</b>(<i>definition</i>) [<>](https://github.com/d3/d3-format/blob/main/src/defaultLocale.js "Source")
+
+Equivalent to [d3.formatLocale](#formatLocale), except it also redefines [d3.format](#format) and [d3.formatPrefix](#formatPrefix) to the new locale’s [*locale*.format](#locale_format) and [*locale*.formatPrefix](#locale_formatPrefix). If you do not set a default locale, it defaults to [U.S. English](https://github.com/d3/d3-format/blob/main/locale/en-US.json).
Index: node_modules/d3-format/dist/d3-format.js
===================================================================
--- node_modules/d3-format/dist/d3-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/dist/d3-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,345 @@
+// https://d3js.org/d3-format/ v3.1.0 Copyright 2010-2021 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+typeof define === 'function' && define.amd ? define(['exports'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
+})(this, (function (exports) { 'use strict';
+
+function formatDecimal(x) {
+  return Math.abs(x = Math.round(x)) >= 1e21
+      ? x.toLocaleString("en").replace(/,/g, "")
+      : x.toString(10);
+}
+
+// Computes the decimal coefficient and exponent of the specified number x with
+// significant digits p, where x is positive and p is in [1, 21] or undefined.
+// For example, formatDecimalParts(1.23) returns ["123", 0].
+function formatDecimalParts(x, p) {
+  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
+  var i, coefficient = x.slice(0, i);
+
+  // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
+  // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
+  return [
+    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
+    +x.slice(i + 1)
+  ];
+}
+
+function exponent(x) {
+  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;
+}
+
+function formatGroup(grouping, thousands) {
+  return function(value, width) {
+    var i = value.length,
+        t = [],
+        j = 0,
+        g = grouping[0],
+        length = 0;
+
+    while (i > 0 && g > 0) {
+      if (length + g + 1 > width) g = Math.max(1, width - length);
+      t.push(value.substring(i -= g, i + g));
+      if ((length += g + 1) > width) break;
+      g = grouping[j = (j + 1) % grouping.length];
+    }
+
+    return t.reverse().join(thousands);
+  };
+}
+
+function formatNumerals(numerals) {
+  return function(value) {
+    return value.replace(/[0-9]/g, function(i) {
+      return numerals[+i];
+    });
+  };
+}
+
+// [[fill]align][sign][symbol][0][width][,][.precision][~][type]
+var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
+
+function formatSpecifier(specifier) {
+  if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
+  var match;
+  return new FormatSpecifier({
+    fill: match[1],
+    align: match[2],
+    sign: match[3],
+    symbol: match[4],
+    zero: match[5],
+    width: match[6],
+    comma: match[7],
+    precision: match[8] && match[8].slice(1),
+    trim: match[9],
+    type: match[10]
+  });
+}
+
+formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
+
+function FormatSpecifier(specifier) {
+  this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
+  this.align = specifier.align === undefined ? ">" : specifier.align + "";
+  this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
+  this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
+  this.zero = !!specifier.zero;
+  this.width = specifier.width === undefined ? undefined : +specifier.width;
+  this.comma = !!specifier.comma;
+  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
+  this.trim = !!specifier.trim;
+  this.type = specifier.type === undefined ? "" : specifier.type + "";
+}
+
+FormatSpecifier.prototype.toString = function() {
+  return this.fill
+      + this.align
+      + this.sign
+      + this.symbol
+      + (this.zero ? "0" : "")
+      + (this.width === undefined ? "" : Math.max(1, this.width | 0))
+      + (this.comma ? "," : "")
+      + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))
+      + (this.trim ? "~" : "")
+      + this.type;
+};
+
+// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
+function formatTrim(s) {
+  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
+    switch (s[i]) {
+      case ".": i0 = i1 = i; break;
+      case "0": if (i0 === 0) i0 = i; i1 = i; break;
+      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;
+    }
+  }
+  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
+}
+
+var prefixExponent;
+
+function formatPrefixAuto(x, p) {
+  var d = formatDecimalParts(x, p);
+  if (!d) return x + "";
+  var coefficient = d[0],
+      exponent = d[1],
+      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
+      n = coefficient.length;
+  return i === n ? coefficient
+      : i > n ? coefficient + new Array(i - n + 1).join("0")
+      : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
+      : "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!
+}
+
+function formatRounded(x, p) {
+  var d = formatDecimalParts(x, p);
+  if (!d) return x + "";
+  var coefficient = d[0],
+      exponent = d[1];
+  return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
+      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
+      : coefficient + new Array(exponent - coefficient.length + 2).join("0");
+}
+
+var formatTypes = {
+  "%": (x, p) => (x * 100).toFixed(p),
+  "b": (x) => Math.round(x).toString(2),
+  "c": (x) => x + "",
+  "d": formatDecimal,
+  "e": (x, p) => x.toExponential(p),
+  "f": (x, p) => x.toFixed(p),
+  "g": (x, p) => x.toPrecision(p),
+  "o": (x) => Math.round(x).toString(8),
+  "p": (x, p) => formatRounded(x * 100, p),
+  "r": formatRounded,
+  "s": formatPrefixAuto,
+  "X": (x) => Math.round(x).toString(16).toUpperCase(),
+  "x": (x) => Math.round(x).toString(16)
+};
+
+function identity(x) {
+  return x;
+}
+
+var map = Array.prototype.map,
+    prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
+
+function formatLocale(locale) {
+  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),
+      currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
+      currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
+      decimal = locale.decimal === undefined ? "." : locale.decimal + "",
+      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),
+      percent = locale.percent === undefined ? "%" : locale.percent + "",
+      minus = locale.minus === undefined ? "−" : locale.minus + "",
+      nan = locale.nan === undefined ? "NaN" : locale.nan + "";
+
+  function newFormat(specifier) {
+    specifier = formatSpecifier(specifier);
+
+    var fill = specifier.fill,
+        align = specifier.align,
+        sign = specifier.sign,
+        symbol = specifier.symbol,
+        zero = specifier.zero,
+        width = specifier.width,
+        comma = specifier.comma,
+        precision = specifier.precision,
+        trim = specifier.trim,
+        type = specifier.type;
+
+    // The "n" type is an alias for ",g".
+    if (type === "n") comma = true, type = "g";
+
+    // The "" type, and any invalid type, is an alias for ".12~g".
+    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g";
+
+    // If zero fill is specified, padding goes after sign and before digits.
+    if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
+
+    // Compute the prefix and suffix.
+    // For SI-prefix, the suffix is lazily computed.
+    var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
+        suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
+
+    // What format function should we use?
+    // Is this an integer type?
+    // Can this type generate exponential notation?
+    var formatType = formatTypes[type],
+        maybeSuffix = /[defgprs%]/.test(type);
+
+    // Set the default precision if not specified,
+    // or clamp the specified precision to the supported range.
+    // For significant precision, it must be in [1, 21].
+    // For fixed precision, it must be in [0, 20].
+    precision = precision === undefined ? 6
+        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
+        : Math.max(0, Math.min(20, precision));
+
+    function format(value) {
+      var valuePrefix = prefix,
+          valueSuffix = suffix,
+          i, n, c;
+
+      if (type === "c") {
+        valueSuffix = formatType(value) + valueSuffix;
+        value = "";
+      } else {
+        value = +value;
+
+        // Determine the sign. -0 is not less than 0, but 1 / -0 is!
+        var valueNegative = value < 0 || 1 / value < 0;
+
+        // Perform the initial formatting.
+        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
+
+        // Trim insignificant zeros.
+        if (trim) value = formatTrim(value);
+
+        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.
+        if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
+
+        // Compute the prefix and suffix.
+        valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
+        valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
+
+        // Break the formatted value into the integer “value” part that can be
+        // grouped, and fractional or exponential “suffix” part that is not.
+        if (maybeSuffix) {
+          i = -1, n = value.length;
+          while (++i < n) {
+            if (c = value.charCodeAt(i), 48 > c || c > 57) {
+              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
+              value = value.slice(0, i);
+              break;
+            }
+          }
+        }
+      }
+
+      // If the fill character is not "0", grouping is applied before padding.
+      if (comma && !zero) value = group(value, Infinity);
+
+      // Compute the padding.
+      var length = valuePrefix.length + value.length + valueSuffix.length,
+          padding = length < width ? new Array(width - length + 1).join(fill) : "";
+
+      // If the fill character is "0", grouping is applied after padding.
+      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
+
+      // Reconstruct the final output based on the desired alignment.
+      switch (align) {
+        case "<": value = valuePrefix + value + valueSuffix + padding; break;
+        case "=": value = valuePrefix + padding + value + valueSuffix; break;
+        case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
+        default: value = padding + valuePrefix + value + valueSuffix; break;
+      }
+
+      return numerals(value);
+    }
+
+    format.toString = function() {
+      return specifier + "";
+    };
+
+    return format;
+  }
+
+  function formatPrefix(specifier, value) {
+    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
+        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,
+        k = Math.pow(10, -e),
+        prefix = prefixes[8 + e / 3];
+    return function(value) {
+      return f(k * value) + prefix;
+    };
+  }
+
+  return {
+    format: newFormat,
+    formatPrefix: formatPrefix
+  };
+}
+
+var locale;
+exports.format = void 0;
+exports.formatPrefix = void 0;
+
+defaultLocale({
+  thousands: ",",
+  grouping: [3],
+  currency: ["$", ""]
+});
+
+function defaultLocale(definition) {
+  locale = formatLocale(definition);
+  exports.format = locale.format;
+  exports.formatPrefix = locale.formatPrefix;
+  return locale;
+}
+
+function precisionFixed(step) {
+  return Math.max(0, -exponent(Math.abs(step)));
+}
+
+function precisionPrefix(step, value) {
+  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));
+}
+
+function precisionRound(step, max) {
+  step = Math.abs(step), max = Math.abs(max) - step;
+  return Math.max(0, exponent(max) - exponent(step)) + 1;
+}
+
+exports.FormatSpecifier = FormatSpecifier;
+exports.formatDefaultLocale = defaultLocale;
+exports.formatLocale = formatLocale;
+exports.formatSpecifier = formatSpecifier;
+exports.precisionFixed = precisionFixed;
+exports.precisionPrefix = precisionPrefix;
+exports.precisionRound = precisionRound;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
Index: node_modules/d3-format/dist/d3-format.min.js
===================================================================
--- node_modules/d3-format/dist/d3-format.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/dist/d3-format.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-format/ v3.1.0 Copyright 2010-2021 Mike Bostock
+!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{})}(this,(function(t){"use strict";function i(t,i){if((r=(t=i?t.toExponential(i-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}function r(t){return(t=i(Math.abs(t)))?t[1]:NaN}var n,e=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function o(t){if(!(i=e.exec(t)))throw new Error("invalid format: "+t);var i;return new a({fill:i[1],align:i[2],sign:i[3],symbol:i[4],zero:i[5],width:i[6],comma:i[7],precision:i[8]&&i[8].slice(1),trim:i[9],type:i[10]})}function a(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function s(t,r){var n=i(t,r);if(!n)return t+"";var e=n[0],o=n[1];return o<0?"0."+new Array(-o).join("0")+e:e.length>o+1?e.slice(0,o+1)+"."+e.slice(o+1):e+new Array(o-e.length+2).join("0")}o.prototype=a.prototype,a.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var c={"%":(t,i)=>(100*t).toFixed(i),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,i)=>t.toExponential(i),f:(t,i)=>t.toFixed(i),g:(t,i)=>t.toPrecision(i),o:t=>Math.round(t).toString(8),p:(t,i)=>s(100*t,i),r:s,s:function(t,r){var e=i(t,r);if(!e)return t+"";var o=e[0],a=e[1],s=a-(n=3*Math.max(-8,Math.min(8,Math.floor(a/3))))+1,c=o.length;return s===c?o:s>c?o+new Array(s-c+1).join("0"):s>0?o.slice(0,s)+"."+o.slice(s):"0."+new Array(1-s).join("0")+i(t,Math.max(0,r+s-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function h(t){return t}var l,u=Array.prototype.map,f=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function d(t){var i,e,a=void 0===t.grouping||void 0===t.thousands?h:(i=u.call(t.grouping,Number),e=t.thousands+"",function(t,r){for(var n=t.length,o=[],a=0,s=i[0],c=0;n>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),o.push(t.substring(n-=s,n+s)),!((c+=s+1)>r));)s=i[a=(a+1)%i.length];return o.reverse().join(e)}),s=void 0===t.currency?"":t.currency[0]+"",l=void 0===t.currency?"":t.currency[1]+"",d=void 0===t.decimal?".":t.decimal+"",m=void 0===t.numerals?h:function(t){return function(i){return i.replace(/[0-9]/g,(function(i){return t[+i]}))}}(u.call(t.numerals,String)),p=void 0===t.percent?"%":t.percent+"",g=void 0===t.minus?"−":t.minus+"",v=void 0===t.nan?"NaN":t.nan+"";function M(t){var i=(t=o(t)).fill,r=t.align,e=t.sign,h=t.symbol,u=t.zero,M=t.width,y=t.comma,x=t.precision,b=t.trim,w=t.type;"n"===w?(y=!0,w="g"):c[w]||(void 0===x&&(x=12),b=!0,w="g"),(u||"0"===i&&"="===r)&&(u=!0,i="0",r="=");var S="$"===h?s:"#"===h&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",j="$"===h?l:/[%p]/.test(w)?p:"",k=c[w],P=/[defgprs%]/.test(w);function z(t){var o,s,c,h=S,l=j;if("c"===w)l=k(t)+l,t="";else{var p=(t=+t)<0||1/t<0;if(t=isNaN(t)?v:k(Math.abs(t),x),b&&(t=function(t){t:for(var i,r=t.length,n=1,e=-1;n<r;++n)switch(t[n]){case".":e=i=n;break;case"0":0===e&&(e=n),i=n;break;default:if(!+t[n])break t;e>0&&(e=0)}return e>0?t.slice(0,e)+t.slice(i+1):t}(t)),p&&0==+t&&"+"!==e&&(p=!1),h=(p?"("===e?e:g:"-"===e||"("===e?"":e)+h,l=("s"===w?f[8+n/3]:"")+l+(p&&"("===e?")":""),P)for(o=-1,s=t.length;++o<s;)if(48>(c=t.charCodeAt(o))||c>57){l=(46===c?d+t.slice(o+1):t.slice(o))+l,t=t.slice(0,o);break}}y&&!u&&(t=a(t,1/0));var z=h.length+t.length+l.length,A=z<M?new Array(M-z+1).join(i):"";switch(y&&u&&(t=a(A+t,A.length?M-l.length:1/0),A=""),r){case"<":t=h+t+l+A;break;case"=":t=h+A+t+l;break;case"^":t=A.slice(0,z=A.length>>1)+h+t+l+A.slice(z);break;default:t=A+h+t+l}return m(t)}return x=void 0===x?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x)),z.toString=function(){return t+""},z}return{format:M,formatPrefix:function(t,i){var n=M(((t=o(t)).type="f",t)),e=3*Math.max(-8,Math.min(8,Math.floor(r(i)/3))),a=Math.pow(10,-e),s=f[8+e/3];return function(t){return n(a*t)+s}}}}function m(i){return l=d(i),t.format=l.format,t.formatPrefix=l.formatPrefix,l}t.format=void 0,t.formatPrefix=void 0,m({thousands:",",grouping:[3],currency:["$",""]}),t.FormatSpecifier=a,t.formatDefaultLocale=m,t.formatLocale=d,t.formatSpecifier=o,t.precisionFixed=function(t){return Math.max(0,-r(Math.abs(t)))},t.precisionPrefix=function(t,i){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(r(i)/3)))-r(Math.abs(t)))},t.precisionRound=function(t,i){return t=Math.abs(t),i=Math.abs(i)-t,Math.max(0,r(i)-r(t))+1},Object.defineProperty(t,"__esModule",{value:!0})}));
Index: node_modules/d3-format/locale/ar-001.json
===================================================================
--- node_modules/d3-format/locale/ar-001.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-001.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", ""],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-AE.json
===================================================================
--- node_modules/d3-format/locale/ar-AE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-AE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u062f\u002e\u0625\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-BH.json
===================================================================
--- node_modules/d3-format/locale/ar-BH.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-BH.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u062f\u002e\u0628\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-DJ.json
===================================================================
--- node_modules/d3-format/locale/ar-DJ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-DJ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["\u200f\u0046\u0064\u006a ", ""],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-DZ.json
===================================================================
--- node_modules/d3-format/locale/ar-DZ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-DZ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": "\u002c",
+  "thousands": "\u002e",
+  "grouping": [3],
+  "currency": ["\u062f\u002e\u062c\u002e ", ""]
+}
Index: node_modules/d3-format/locale/ar-EG.json
===================================================================
--- node_modules/d3-format/locale/ar-EG.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-EG.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u062c\u002e\u0645\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-EH.json
===================================================================
--- node_modules/d3-format/locale/ar-EH.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-EH.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": "\u002e",
+  "thousands": "\u002c",
+  "grouping": [3],
+  "currency": ["\u062f\u002e\u0645\u002e ", ""]
+}
Index: node_modules/d3-format/locale/ar-ER.json
===================================================================
--- node_modules/d3-format/locale/ar-ER.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-ER.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["\u004e\u0066\u006b ", ""],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-IL.json
===================================================================
--- node_modules/d3-format/locale/ar-IL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-IL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["\u20aa ", ""],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-IQ.json
===================================================================
--- node_modules/d3-format/locale/ar-IQ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-IQ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u062f\u002e\u0639\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-JO.json
===================================================================
--- node_modules/d3-format/locale/ar-JO.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-JO.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u062f\u002e\u0623\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-KM.json
===================================================================
--- node_modules/d3-format/locale/ar-KM.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-KM.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u0641\u002e\u062c\u002e\u0642\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-KW.json
===================================================================
--- node_modules/d3-format/locale/ar-KW.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-KW.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u062f\u002e\u0643\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-LB.json
===================================================================
--- node_modules/d3-format/locale/ar-LB.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-LB.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u0644\u002e\u0644\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-LY.json
===================================================================
--- node_modules/d3-format/locale/ar-LY.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-LY.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": "\u002c",
+  "thousands": "\u002e",
+  "grouping": [3],
+  "currency": ["\u062f\u002e\u0644\u002e ", ""]
+}
Index: node_modules/d3-format/locale/ar-MA.json
===================================================================
--- node_modules/d3-format/locale/ar-MA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-MA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": "\u002c",
+  "thousands": "\u002e",
+  "grouping": [3],
+  "currency": ["\u062f\u002e\u0645\u002e ", ""]
+}
Index: node_modules/d3-format/locale/ar-MR.json
===================================================================
--- node_modules/d3-format/locale/ar-MR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-MR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u0623\u002e\u0645\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-OM.json
===================================================================
--- node_modules/d3-format/locale/ar-OM.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-OM.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u0631\u002e\u0639\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-PS.json
===================================================================
--- node_modules/d3-format/locale/ar-PS.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-PS.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["\u20aa ", ""],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-QA.json
===================================================================
--- node_modules/d3-format/locale/ar-QA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-QA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u0631\u002e\u0642\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-SA.json
===================================================================
--- node_modules/d3-format/locale/ar-SA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-SA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u0631\u002e\u0633\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-SD.json
===================================================================
--- node_modules/d3-format/locale/ar-SD.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-SD.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u062c\u002e\u0633\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-SO.json
===================================================================
--- node_modules/d3-format/locale/ar-SO.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-SO.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["\u200f\u0053 ", ""],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-SS.json
===================================================================
--- node_modules/d3-format/locale/ar-SS.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-SS.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["\u00a3 ", ""],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-SY.json
===================================================================
--- node_modules/d3-format/locale/ar-SY.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-SY.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u0644\u002e\u0633\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-TD.json
===================================================================
--- node_modules/d3-format/locale/ar-TD.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-TD.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["\u200f\u0046\u0043\u0046\u0041 ", ""],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ar-TN.json
===================================================================
--- node_modules/d3-format/locale/ar-TN.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-TN.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": "\u002c",
+  "thousands": "\u002e",
+  "grouping": [3],
+  "currency": ["\u062f\u002e\u062a\u002e ", ""]
+}
Index: node_modules/d3-format/locale/ar-YE.json
===================================================================
--- node_modules/d3-format/locale/ar-YE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ar-YE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": "\u066b",
+  "thousands": "\u066c",
+  "grouping": [3],
+  "currency": ["", " \u0631\u002e\u0649\u002e"],
+  "numerals" : ["\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669"]
+}
Index: node_modules/d3-format/locale/ca-ES.json
===================================================================
--- node_modules/d3-format/locale/ca-ES.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ca-ES.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["", "\u00a0€"]
+}
Index: node_modules/d3-format/locale/cs-CZ.json
===================================================================
--- node_modules/d3-format/locale/cs-CZ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/cs-CZ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": "\u00a0",
+  "grouping": [3],
+  "currency": ["", "\u00a0Kč"]
+}
Index: node_modules/d3-format/locale/da-DK.json
===================================================================
--- node_modules/d3-format/locale/da-DK.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/da-DK.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["", " kr"]
+}
Index: node_modules/d3-format/locale/de-CH.json
===================================================================
--- node_modules/d3-format/locale/de-CH.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/de-CH.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": "'",
+  "grouping": [3],
+  "currency": ["", "\u00a0CHF"]
+}
Index: node_modules/d3-format/locale/de-DE.json
===================================================================
--- node_modules/d3-format/locale/de-DE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/de-DE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["", "\u00a0€"]
+}
Index: node_modules/d3-format/locale/en-CA.json
===================================================================
--- node_modules/d3-format/locale/en-CA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/en-CA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3],
+  "currency": ["$", ""]
+}
Index: node_modules/d3-format/locale/en-GB.json
===================================================================
--- node_modules/d3-format/locale/en-GB.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/en-GB.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3],
+  "currency": ["£", ""]
+}
Index: node_modules/d3-format/locale/en-IE.json
===================================================================
--- node_modules/d3-format/locale/en-IE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/en-IE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3],
+  "currency": ["€", ""]
+}
Index: node_modules/d3-format/locale/en-IN.json
===================================================================
--- node_modules/d3-format/locale/en-IN.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/en-IN.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3, 2, 2, 2, 2, 2, 2, 2, 2, 2],
+  "currency": ["₹", ""]
+}
Index: node_modules/d3-format/locale/en-US.json
===================================================================
--- node_modules/d3-format/locale/en-US.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/en-US.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3],
+  "currency": ["$", ""]
+}
Index: node_modules/d3-format/locale/es-BO.json
===================================================================
--- node_modules/d3-format/locale/es-BO.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/es-BO.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["Bs\u00a0", ""],
+  "percent": "\u202f%"
+}
Index: node_modules/d3-format/locale/es-ES.json
===================================================================
--- node_modules/d3-format/locale/es-ES.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/es-ES.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["", "\u00a0€"]
+}
Index: node_modules/d3-format/locale/es-MX.json
===================================================================
--- node_modules/d3-format/locale/es-MX.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/es-MX.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3],
+  "currency": ["$", ""]
+}
Index: node_modules/d3-format/locale/fi-FI.json
===================================================================
--- node_modules/d3-format/locale/fi-FI.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/fi-FI.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": "\u00a0",
+  "grouping": [3],
+  "currency": ["", "\u00a0€"]
+}
Index: node_modules/d3-format/locale/fr-CA.json
===================================================================
--- node_modules/d3-format/locale/fr-CA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/fr-CA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": "\u00a0",
+  "grouping": [3],
+  "currency": ["", "$"]
+}
Index: node_modules/d3-format/locale/fr-FR.json
===================================================================
--- node_modules/d3-format/locale/fr-FR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/fr-FR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+{
+  "decimal": ",",
+  "thousands": "\u00a0",
+  "grouping": [3],
+  "currency": ["", "\u00a0€"],
+  "percent": "\u202f%"
+}
Index: node_modules/d3-format/locale/he-IL.json
===================================================================
--- node_modules/d3-format/locale/he-IL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/he-IL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3],
+  "currency": ["₪", ""]
+}
Index: node_modules/d3-format/locale/hu-HU.json
===================================================================
--- node_modules/d3-format/locale/hu-HU.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/hu-HU.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": "\u00a0",
+  "grouping": [3],
+  "currency": ["", "\u00a0Ft"]
+}
Index: node_modules/d3-format/locale/it-IT.json
===================================================================
--- node_modules/d3-format/locale/it-IT.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/it-IT.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["€", ""]
+}
Index: node_modules/d3-format/locale/ja-JP.json
===================================================================
--- node_modules/d3-format/locale/ja-JP.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ja-JP.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3],
+  "currency": ["", "円"]
+}
Index: node_modules/d3-format/locale/ko-KR.json
===================================================================
--- node_modules/d3-format/locale/ko-KR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ko-KR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3],
+  "currency": ["₩", ""]
+}
Index: node_modules/d3-format/locale/mk-MK.json
===================================================================
--- node_modules/d3-format/locale/mk-MK.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/mk-MK.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["", "\u00a0ден."]
+}
Index: node_modules/d3-format/locale/nl-NL.json
===================================================================
--- node_modules/d3-format/locale/nl-NL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/nl-NL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["€\u00a0", ""]
+}
Index: node_modules/d3-format/locale/pl-PL.json
===================================================================
--- node_modules/d3-format/locale/pl-PL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/pl-PL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["", "zł"]
+}
Index: node_modules/d3-format/locale/pt-BR.json
===================================================================
--- node_modules/d3-format/locale/pt-BR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/pt-BR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["R$", ""]
+}
Index: node_modules/d3-format/locale/pt-PT.json
===================================================================
--- node_modules/d3-format/locale/pt-PT.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/pt-PT.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": "\u00a0",
+  "grouping": [3],
+  "currency": ["", "\u00a0€"]
+}
Index: node_modules/d3-format/locale/ru-RU.json
===================================================================
--- node_modules/d3-format/locale/ru-RU.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/ru-RU.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": "\u00a0",
+  "grouping": [3],
+  "currency": ["", "\u00a0\u20bd"]
+}
Index: node_modules/d3-format/locale/sl-SI.json
===================================================================
--- node_modules/d3-format/locale/sl-SI.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/sl-SI.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": ".",
+  "grouping": [3],
+  "currency": ["", "\u00a0€"]
+}
Index: node_modules/d3-format/locale/sv-SE.json
===================================================================
--- node_modules/d3-format/locale/sv-SE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/sv-SE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": "\u00a0",
+  "grouping": [3],
+  "currency": ["", " kr"]
+}
Index: node_modules/d3-format/locale/uk-UA.json
===================================================================
--- node_modules/d3-format/locale/uk-UA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/uk-UA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ",",
+  "thousands": "\u00a0",
+  "grouping": [3],
+  "currency": ["", "\u00a0₴."]
+}
Index: node_modules/d3-format/locale/zh-CN.json
===================================================================
--- node_modules/d3-format/locale/zh-CN.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/locale/zh-CN.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+{
+  "decimal": ".",
+  "thousands": ",",
+  "grouping": [3],
+  "currency": ["¥", ""]
+}
Index: node_modules/d3-format/package.json
===================================================================
--- node_modules/d3-format/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+{
+  "name": "d3-format",
+  "version": "3.1.0",
+  "description": "Format numbers for human consumption.",
+  "homepage": "https://d3js.org/d3-format/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-format.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "format",
+    "localization"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js",
+    "locale/*.json"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-format.min.js",
+  "unpkg": "dist/d3-format.min.js",
+  "exports": {
+    ".": {
+      "umd": "./dist/d3-format.min.js",
+      "default": "./src/index.js"
+    },
+    "./locale/*": "./locale/*.json"
+  },
+  "sideEffects": [
+    "./src/defaultLocale.js"
+  ],
+  "devDependencies": {
+    "eslint": "8",
+    "mocha": "9",
+    "rollup": "2",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-format/src/defaultLocale.js
===================================================================
--- node_modules/d3-format/src/defaultLocale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/defaultLocale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import formatLocale from "./locale.js";
+
+var locale;
+export var format;
+export var formatPrefix;
+
+defaultLocale({
+  thousands: ",",
+  grouping: [3],
+  currency: ["$", ""]
+});
+
+export default function defaultLocale(definition) {
+  locale = formatLocale(definition);
+  format = locale.format;
+  formatPrefix = locale.formatPrefix;
+  return locale;
+}
Index: node_modules/d3-format/src/exponent.js
===================================================================
--- node_modules/d3-format/src/exponent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/exponent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import {formatDecimalParts} from "./formatDecimal.js";
+
+export default function(x) {
+  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;
+}
Index: node_modules/d3-format/src/formatDecimal.js
===================================================================
--- node_modules/d3-format/src/formatDecimal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/formatDecimal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+export default function(x) {
+  return Math.abs(x = Math.round(x)) >= 1e21
+      ? x.toLocaleString("en").replace(/,/g, "")
+      : x.toString(10);
+}
+
+// Computes the decimal coefficient and exponent of the specified number x with
+// significant digits p, where x is positive and p is in [1, 21] or undefined.
+// For example, formatDecimalParts(1.23) returns ["123", 0].
+export function formatDecimalParts(x, p) {
+  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
+  var i, coefficient = x.slice(0, i);
+
+  // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
+  // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
+  return [
+    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
+    +x.slice(i + 1)
+  ];
+}
Index: node_modules/d3-format/src/formatGroup.js
===================================================================
--- node_modules/d3-format/src/formatGroup.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/formatGroup.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+export default function(grouping, thousands) {
+  return function(value, width) {
+    var i = value.length,
+        t = [],
+        j = 0,
+        g = grouping[0],
+        length = 0;
+
+    while (i > 0 && g > 0) {
+      if (length + g + 1 > width) g = Math.max(1, width - length);
+      t.push(value.substring(i -= g, i + g));
+      if ((length += g + 1) > width) break;
+      g = grouping[j = (j + 1) % grouping.length];
+    }
+
+    return t.reverse().join(thousands);
+  };
+}
Index: node_modules/d3-format/src/formatNumerals.js
===================================================================
--- node_modules/d3-format/src/formatNumerals.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/formatNumerals.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+export default function(numerals) {
+  return function(value) {
+    return value.replace(/[0-9]/g, function(i) {
+      return numerals[+i];
+    });
+  };
+}
Index: node_modules/d3-format/src/formatPrefixAuto.js
===================================================================
--- node_modules/d3-format/src/formatPrefixAuto.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/formatPrefixAuto.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import {formatDecimalParts} from "./formatDecimal.js";
+
+export var prefixExponent;
+
+export default function(x, p) {
+  var d = formatDecimalParts(x, p);
+  if (!d) return x + "";
+  var coefficient = d[0],
+      exponent = d[1],
+      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
+      n = coefficient.length;
+  return i === n ? coefficient
+      : i > n ? coefficient + new Array(i - n + 1).join("0")
+      : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
+      : "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!
+}
Index: node_modules/d3-format/src/formatRounded.js
===================================================================
--- node_modules/d3-format/src/formatRounded.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/formatRounded.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import {formatDecimalParts} from "./formatDecimal.js";
+
+export default function(x, p) {
+  var d = formatDecimalParts(x, p);
+  if (!d) return x + "";
+  var coefficient = d[0],
+      exponent = d[1];
+  return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
+      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
+      : coefficient + new Array(exponent - coefficient.length + 2).join("0");
+}
Index: node_modules/d3-format/src/formatSpecifier.js
===================================================================
--- node_modules/d3-format/src/formatSpecifier.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/formatSpecifier.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+// [[fill]align][sign][symbol][0][width][,][.precision][~][type]
+var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
+
+export default function formatSpecifier(specifier) {
+  if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
+  var match;
+  return new FormatSpecifier({
+    fill: match[1],
+    align: match[2],
+    sign: match[3],
+    symbol: match[4],
+    zero: match[5],
+    width: match[6],
+    comma: match[7],
+    precision: match[8] && match[8].slice(1),
+    trim: match[9],
+    type: match[10]
+  });
+}
+
+formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
+
+export function FormatSpecifier(specifier) {
+  this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
+  this.align = specifier.align === undefined ? ">" : specifier.align + "";
+  this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
+  this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
+  this.zero = !!specifier.zero;
+  this.width = specifier.width === undefined ? undefined : +specifier.width;
+  this.comma = !!specifier.comma;
+  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
+  this.trim = !!specifier.trim;
+  this.type = specifier.type === undefined ? "" : specifier.type + "";
+}
+
+FormatSpecifier.prototype.toString = function() {
+  return this.fill
+      + this.align
+      + this.sign
+      + this.symbol
+      + (this.zero ? "0" : "")
+      + (this.width === undefined ? "" : Math.max(1, this.width | 0))
+      + (this.comma ? "," : "")
+      + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))
+      + (this.trim ? "~" : "")
+      + this.type;
+};
Index: node_modules/d3-format/src/formatTrim.js
===================================================================
--- node_modules/d3-format/src/formatTrim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/formatTrim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
+export default function(s) {
+  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
+    switch (s[i]) {
+      case ".": i0 = i1 = i; break;
+      case "0": if (i0 === 0) i0 = i; i1 = i; break;
+      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;
+    }
+  }
+  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
+}
Index: node_modules/d3-format/src/formatTypes.js
===================================================================
--- node_modules/d3-format/src/formatTypes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/formatTypes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import formatDecimal from "./formatDecimal.js";
+import formatPrefixAuto from "./formatPrefixAuto.js";
+import formatRounded from "./formatRounded.js";
+
+export default {
+  "%": (x, p) => (x * 100).toFixed(p),
+  "b": (x) => Math.round(x).toString(2),
+  "c": (x) => x + "",
+  "d": formatDecimal,
+  "e": (x, p) => x.toExponential(p),
+  "f": (x, p) => x.toFixed(p),
+  "g": (x, p) => x.toPrecision(p),
+  "o": (x) => Math.round(x).toString(8),
+  "p": (x, p) => formatRounded(x * 100, p),
+  "r": formatRounded,
+  "s": formatPrefixAuto,
+  "X": (x) => Math.round(x).toString(16).toUpperCase(),
+  "x": (x) => Math.round(x).toString(16)
+};
Index: node_modules/d3-format/src/identity.js
===================================================================
--- node_modules/d3-format/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default function(x) {
+  return x;
+}
Index: node_modules/d3-format/src/index.js
===================================================================
--- node_modules/d3-format/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export {default as formatDefaultLocale, format, formatPrefix} from "./defaultLocale.js";
+export {default as formatLocale} from "./locale.js";
+export {default as formatSpecifier, FormatSpecifier} from "./formatSpecifier.js";
+export {default as precisionFixed} from "./precisionFixed.js";
+export {default as precisionPrefix} from "./precisionPrefix.js";
+export {default as precisionRound} from "./precisionRound.js";
Index: node_modules/d3-format/src/locale.js
===================================================================
--- node_modules/d3-format/src/locale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/locale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,148 @@
+import exponent from "./exponent.js";
+import formatGroup from "./formatGroup.js";
+import formatNumerals from "./formatNumerals.js";
+import formatSpecifier from "./formatSpecifier.js";
+import formatTrim from "./formatTrim.js";
+import formatTypes from "./formatTypes.js";
+import {prefixExponent} from "./formatPrefixAuto.js";
+import identity from "./identity.js";
+
+var map = Array.prototype.map,
+    prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
+
+export default function(locale) {
+  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),
+      currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
+      currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
+      decimal = locale.decimal === undefined ? "." : locale.decimal + "",
+      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),
+      percent = locale.percent === undefined ? "%" : locale.percent + "",
+      minus = locale.minus === undefined ? "−" : locale.minus + "",
+      nan = locale.nan === undefined ? "NaN" : locale.nan + "";
+
+  function newFormat(specifier) {
+    specifier = formatSpecifier(specifier);
+
+    var fill = specifier.fill,
+        align = specifier.align,
+        sign = specifier.sign,
+        symbol = specifier.symbol,
+        zero = specifier.zero,
+        width = specifier.width,
+        comma = specifier.comma,
+        precision = specifier.precision,
+        trim = specifier.trim,
+        type = specifier.type;
+
+    // The "n" type is an alias for ",g".
+    if (type === "n") comma = true, type = "g";
+
+    // The "" type, and any invalid type, is an alias for ".12~g".
+    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g";
+
+    // If zero fill is specified, padding goes after sign and before digits.
+    if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
+
+    // Compute the prefix and suffix.
+    // For SI-prefix, the suffix is lazily computed.
+    var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
+        suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
+
+    // What format function should we use?
+    // Is this an integer type?
+    // Can this type generate exponential notation?
+    var formatType = formatTypes[type],
+        maybeSuffix = /[defgprs%]/.test(type);
+
+    // Set the default precision if not specified,
+    // or clamp the specified precision to the supported range.
+    // For significant precision, it must be in [1, 21].
+    // For fixed precision, it must be in [0, 20].
+    precision = precision === undefined ? 6
+        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
+        : Math.max(0, Math.min(20, precision));
+
+    function format(value) {
+      var valuePrefix = prefix,
+          valueSuffix = suffix,
+          i, n, c;
+
+      if (type === "c") {
+        valueSuffix = formatType(value) + valueSuffix;
+        value = "";
+      } else {
+        value = +value;
+
+        // Determine the sign. -0 is not less than 0, but 1 / -0 is!
+        var valueNegative = value < 0 || 1 / value < 0;
+
+        // Perform the initial formatting.
+        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
+
+        // Trim insignificant zeros.
+        if (trim) value = formatTrim(value);
+
+        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.
+        if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
+
+        // Compute the prefix and suffix.
+        valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
+        valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
+
+        // Break the formatted value into the integer “value” part that can be
+        // grouped, and fractional or exponential “suffix” part that is not.
+        if (maybeSuffix) {
+          i = -1, n = value.length;
+          while (++i < n) {
+            if (c = value.charCodeAt(i), 48 > c || c > 57) {
+              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
+              value = value.slice(0, i);
+              break;
+            }
+          }
+        }
+      }
+
+      // If the fill character is not "0", grouping is applied before padding.
+      if (comma && !zero) value = group(value, Infinity);
+
+      // Compute the padding.
+      var length = valuePrefix.length + value.length + valueSuffix.length,
+          padding = length < width ? new Array(width - length + 1).join(fill) : "";
+
+      // If the fill character is "0", grouping is applied after padding.
+      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
+
+      // Reconstruct the final output based on the desired alignment.
+      switch (align) {
+        case "<": value = valuePrefix + value + valueSuffix + padding; break;
+        case "=": value = valuePrefix + padding + value + valueSuffix; break;
+        case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
+        default: value = padding + valuePrefix + value + valueSuffix; break;
+      }
+
+      return numerals(value);
+    }
+
+    format.toString = function() {
+      return specifier + "";
+    };
+
+    return format;
+  }
+
+  function formatPrefix(specifier, value) {
+    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
+        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,
+        k = Math.pow(10, -e),
+        prefix = prefixes[8 + e / 3];
+    return function(value) {
+      return f(k * value) + prefix;
+    };
+  }
+
+  return {
+    format: newFormat,
+    formatPrefix: formatPrefix
+  };
+}
Index: node_modules/d3-format/src/precisionFixed.js
===================================================================
--- node_modules/d3-format/src/precisionFixed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/precisionFixed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import exponent from "./exponent.js";
+
+export default function(step) {
+  return Math.max(0, -exponent(Math.abs(step)));
+}
Index: node_modules/d3-format/src/precisionPrefix.js
===================================================================
--- node_modules/d3-format/src/precisionPrefix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/precisionPrefix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import exponent from "./exponent.js";
+
+export default function(step, value) {
+  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));
+}
Index: node_modules/d3-format/src/precisionRound.js
===================================================================
--- node_modules/d3-format/src/precisionRound.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-format/src/precisionRound.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import exponent from "./exponent.js";
+
+export default function(step, max) {
+  step = Math.abs(step), max = Math.abs(max) - step;
+  return Math.max(0, exponent(max) - exponent(step)) + 1;
+}
Index: node_modules/d3-interpolate/LICENSE
===================================================================
--- node_modules/d3-interpolate/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-interpolate/README.md
===================================================================
--- node_modules/d3-interpolate/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,268 @@
+# d3-interpolate
+
+This module provides a variety of interpolation methods for blending between two values. Values may be numbers, colors, strings, arrays, or even deeply-nested objects. For example:
+
+```js
+const i = d3.interpolateNumber(10, 20);
+i(0.0); // 10
+i(0.2); // 12
+i(0.5); // 15
+i(1.0); // 20
+```
+
+The returned function `i` is called an *interpolator*. Given a starting value *a* and an ending value *b*, it takes a parameter *t* in the domain [0, 1] and returns the corresponding interpolated value between *a* and *b*. An interpolator typically returns a value equivalent to *a* at *t* = 0 and a value equivalent to *b* at *t* = 1.
+
+You can interpolate more than just numbers. To find the perceptual midpoint between steelblue and brown:
+
+```js
+d3.interpolateLab("steelblue", "brown")(0.5); // "rgb(142, 92, 109)"
+```
+
+Here’s a more elaborate example demonstrating type inference used by [interpolate](#interpolate):
+
+```js
+const i = d3.interpolate({colors: ["red", "blue"]}, {colors: ["white", "black"]});
+i(0.0); // {colors: ["rgb(255, 0, 0)", "rgb(0, 0, 255)"]}
+i(0.5); // {colors: ["rgb(255, 128, 128)", "rgb(0, 0, 128)"]}
+i(1.0); // {colors: ["rgb(255, 255, 255)", "rgb(0, 0, 0)"]}
+```
+
+Note that the generic value interpolator detects not only nested objects and arrays, but also color strings and numbers embedded in strings!
+
+## Installing
+
+If you use npm, `npm install d3-interpolate`. You can also download the [latest release on GitHub](https://github.com/d3/d3-interpolate/releases/latest). For vanilla HTML in modern browsers, import d3-interpolate from Skypack:
+
+```html
+<script type="module">
+
+import {interpolateRgb} from "https://cdn.skypack.dev/d3-interpolate@3";
+
+const interpolate = interpolateRgb("steelblue", "brown");
+
+</script>
+```
+
+For legacy environments, you can load d3-interpolate’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported. (If using [color interpolation](#color-spaces), also load [d3-color](https://github.com/d3/d3-color).)
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-color@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-interpolate@3"></script>
+<script>
+
+const interpolate = d3.interpolateRgb("steelblue", "brown");
+
+</script>
+```
+
+## API Reference
+
+<a name="interpolate" href="#interpolate">#</a> d3.<b>interpolate</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/value.js), [Examples](https://observablehq.com/@d3/d3-interpolate)
+
+Returns an interpolator between the two arbitrary values *a* and *b*. The interpolator implementation is based on the type of the end value *b*, using the following algorithm:
+
+1. If *b* is null, undefined or a boolean, use the constant *b*.
+2. If *b* is a number, use [interpolateNumber](#interpolateNumber).
+3. If *b* is a [color](https://github.com/d3/d3-color/blob/master/README.md#color) or a string coercible to a color, use [interpolateRgb](#interpolateRgb).
+4. If *b* is a [date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date), use [interpolateDate](#interpolateDate).
+5. If *b* is a string, use [interpolateString](#interpolateString).
+6. If *b* is a [typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) of numbers, use [interpolateNumberArray](#interpolateNumberArray).
+7. If *b* is a generic [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray), use [interpolateArray](#interpolateArray).
+8. If *b* is coercible to a number, use [interpolateNumber](#interpolateNumber).
+9. Use [interpolateObject](#interpolateObject).
+
+Based on the chosen interpolator, *a* is coerced to the suitable corresponding type.
+
+<a name="interpolateNumber" href="#interpolateNumber">#</a> d3.<b>interpolateNumber</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/number.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)
+
+Returns an interpolator between the two numbers *a* and *b*. The returned interpolator is equivalent to:
+
+```js
+function interpolator(t) {
+  return a * (1 - t) + b * t;
+}
+```
+
+Caution: avoid interpolating to or from the number zero when the interpolator is used to generate a string. When very small values are stringified, they may be converted to scientific notation, which is an invalid attribute or style property value in older browsers. For example, the number `0.0000001` is converted to the string `"1e-7"`. This is particularly noticeable with interpolating opacity. To avoid scientific notation, start or end the transition at 1e-6: the smallest value that is not stringified in scientific notation.
+
+<a name="interpolateRound" href="#interpolateRound">#</a> d3.<b>interpolateRound</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/round.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumber)
+
+Returns an interpolator between the two numbers *a* and *b*; the interpolator is similar to [interpolateNumber](#interpolateNumber), except it will round the resulting value to the nearest integer.
+
+<a name="interpolateString" href="#interpolateString">#</a> d3.<b>interpolateString</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/string.js), [Examples](https://observablehq.com/@d3/d3-interpolatestring)
+
+Returns an interpolator between the two strings *a* and *b*. The string interpolator finds numbers embedded in *a* and *b*, where each number is of the form understood by JavaScript. A few examples of numbers that will be detected within a string: `-1`, `42`, `3.14159`, and `6.0221413e+23`.
+
+For each number embedded in *b*, the interpolator will attempt to find a corresponding number in *a*. If a corresponding number is found, a numeric interpolator is created using [interpolateNumber](#interpolateNumber). The remaining parts of the string *b* are used as a template: the static parts of the string *b* remain constant for the interpolation, with the interpolated numeric values embedded in the template.
+
+For example, if *a* is `"300 12px sans-serif"`, and *b* is `"500 36px Comic-Sans"`, two embedded numbers are found. The remaining static parts (of string *b*) are a space between the two numbers (`" "`), and the suffix (`"px Comic-Sans"`). The result of the interpolator at *t* = 0.5 is `"400 24px Comic-Sans"`.
+
+<a name="interpolateDate" href="#interpolateDate">#</a> d3.<b>interpolateDate</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/date.js), [Examples](https://observablehq.com/@d3/d3-interpolatedate)
+
+Returns an interpolator between the two [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) *a* and *b*.
+
+Note: **no defensive copy** of the returned date is created; the same Date instance is returned for every evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).
+
+<a name="interpolateArray" href="#interpolateArray">#</a> d3.<b>interpolateArray</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/array.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)
+
+Returns an interpolator between the two arrays *a* and *b*. If *b* is a typed array (e.g., Float64Array), [interpolateNumberArray](#interpolateNumberArray) is called instead.
+
+Internally, an array template is created that is the same length as *b*. For each element in *b*, if there exists a corresponding element in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such element, the static value from *b* is used in the template. Then, for the given parameter *t*, the template’s embedded interpolators are evaluated. The updated array template is then returned.
+
+For example, if *a* is the array `[0, 1]` and *b* is the array `[1, 10, 100]`, then the result of the interpolator for *t* = 0.5 is the array `[0.5, 5.5, 100]`.
+
+Note: **no defensive copy** of the template array is created; modifications of the returned array may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).
+
+<a name="interpolateNumberArray" href="#interpolateNumberArray">#</a> d3.<b>interpolateNumberArray</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/numberArray.js), [Examples](https://observablehq.com/@d3/d3-interpolatenumberarray)
+
+Returns an interpolator between the two arrays of numbers *a* and *b*. Internally, an array template is created that is the same type and length as *b*. For each element in *b*, if there exists a corresponding element in *a*, the values are directly interpolated in the array template. If there is no such element, the static value from *b* is copied. The updated array template is then returned.
+
+Note: For performance reasons, **no defensive copy** is made of the template array and the arguments *a* and *b*; modifications of these arrays may affect subsequent evaluation of the interpolator.
+
+<a name="interpolateObject" href="#interpolateObject">#</a> d3.<b>interpolateObject</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/object.js), [Examples](https://observablehq.com/@d3/d3-interpolateobject)
+
+Returns an interpolator between the two objects *a* and *b*. Internally, an object template is created that has the same properties as *b*. For each property in *b*, if there exists a corresponding property in *a*, a generic interpolator is created for the two elements using [interpolate](#interpolate). If there is no such property, the static value from *b* is used in the template. Then, for the given parameter *t*, the template's embedded interpolators are evaluated and the updated object template is then returned.
+
+For example, if *a* is the object `{x: 0, y: 1}` and *b* is the object `{x: 1, y: 10, z: 100}`, the result of the interpolator for *t* = 0.5 is the object `{x: 0.5, y: 5.5, z: 100}`.
+
+Object interpolation is particularly useful for *dataspace interpolation*, where data is interpolated rather than attribute values. For example, you can interpolate an object which describes an arc in a pie chart, and then use [d3.arc](https://github.com/d3/d3-shape/blob/master/README.md#arc) to compute the new SVG path data.
+
+Note: **no defensive copy** of the template object is created; modifications of the returned object may adversely affect subsequent evaluation of the interpolator. No copy is made for performance reasons; interpolators are often part of the inner loop of [animated transitions](https://github.com/d3/d3-transition).
+
+<a name="interpolateTransformCss" href="#interpolateTransformCss">#</a> d3.<b>interpolateTransformCss</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L62), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)
+
+Returns an interpolator between the two 2D CSS transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).
+
+<a name="interpolateTransformSvg" href="#interpolateTransformSvg">#</a> d3.<b>interpolateTransformSvg</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/transform/index.js#L63), [Examples](https://observablehq.com/@d3/d3-interpolatetransformcss)
+
+Returns an interpolator between the two 2D SVG transforms represented by *a* and *b*. Each transform is decomposed to a standard representation of translate, rotate, *x*-skew and scale; these component transformations are then interpolated. This behavior is standardized by CSS: see [matrix decomposition for animation](http://www.w3.org/TR/css3-2d-transforms/#matrix-decomposition).
+
+<a name="interpolateZoom" href="#interpolateZoom">#</a> d3.<b>interpolateZoom</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/zoom.js), [Examples](https://observablehq.com/@d3/d3-interpolatezoom)
+
+Returns an interpolator between the two views *a* and *b* of a two-dimensional plane, based on [“Smooth and efficient zooming and panning”](http://www.win.tue.nl/~vanwijk/zoompan.pdf) by Jarke J. van Wijk and Wim A.A. Nuij. Each view is defined as an array of three numbers: *cx*, *cy* and *width*. The first two coordinates *cx*, *cy* represent the center of the viewport; the last coordinate *width* represents the size of the viewport.
+
+The returned interpolator exposes a *duration* property which encodes the recommended transition duration in milliseconds. This duration is based on the path length of the curved trajectory through *x,y* space. If you want a slower or faster transition, multiply this by an arbitrary scale factor (<i>V</i> as described in the original paper).
+
+<a name="interpolateZoom_rho" href="#interpolateZoom_rho">#</a> *interpolateZoom*.<b>rho</b>(<i>rho</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/zoom.js)<!-- , [Examples](https://observablehq.com/@d3/interpolatezoom-rho) -->
+
+Given a [zoom interpolator](#interpolateZoom), returns a new zoom interpolator using the specified curvature *rho*. When *rho* is close to 0, the interpolator is almost linear. The default curvature is sqrt(2).
+
+<a name="interpolateDiscrete" href="#interpolateDiscrete">#</a> d3.<b>interpolateDiscrete</b>(<i>values</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/discrete.js), [Examples](https://observablehq.com/@d3/d3-interpolatediscrete)
+
+Returns a discrete interpolator for the given array of *values*. The returned interpolator maps *t* in [0, 1 / *n*) to *values*[0], *t* in [1 / *n*, 2 / *n*) to *values*[1], and so on, where *n* = *values*.length. In effect, this is a lightweight [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) with a fixed domain of [0, 1].
+
+### Sampling
+
+<a name="quantize" href="#quantize">#</a> d3.<b>quantize</b>(<i>interpolator</i>, <i>n</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/d3-quantize)
+
+Returns *n* uniformly-spaced samples from the specified *interpolator*, where *n* is an integer greater than one. The first sample is always at *t* = 0, and the last sample is always at *t* = 1. This can be useful in generating a fixed number of samples from a given interpolator, such as to derive the range of a [quantize scale](https://github.com/d3/d3-scale/blob/master/README.md#quantize-scales) from a [continuous interpolator](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateWarm).
+
+Caution: this method will not work with interpolators that do not return defensive copies of their output, such as [d3.interpolateArray](#interpolateArray), [d3.interpolateDate](#interpolateDate) and [d3.interpolateObject](#interpolateObject). For those interpolators, you must wrap the interpolator and create a copy for each returned value.
+
+### Color Spaces
+
+<a name="interpolateRgb" href="#interpolateRgb">#</a> d3.<b>interpolateRgb</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js), [Examples](https://observablehq.com/@d3/working-with-color)
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/rgb.png" width="100%" height="40" alt="rgb">
+
+Or, with a corrected [gamma](#interpolate_gamma) of 2.2:
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/rgbGamma.png" width="100%" height="40" alt="rgbGamma">
+
+Returns an RGB color space interpolator between the two colors *a* and *b* with a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in RGB; they will be converted to RGB using [d3.rgb](https://github.com/d3/d3-color/blob/master/README.md#rgb). The return value of the interpolator is an RGB string.
+
+<a href="#interpolateRgbBasis" name="interpolateRgbBasis">#</a> d3.<b>interpolateRgbBasis</b>(<i>colors</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L54), [Examples](https://observablehq.com/@d3/working-with-color)
+
+Returns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). Implicit control points are generated such that the interpolator returns *colors*[0] at *t* = 0 and *colors*[*colors*.length - 1] at *t* = 1. Opacity interpolation is not currently supported. See also [d3.interpolateBasis](#interpolateBasis), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.
+
+<a href="#interpolateRgbBasisClosed" name="interpolateRgbBasisClosed">#</a> d3.<b>interpolateRgbBasisClosed</b>(<i>colors</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/rgb.js#L55), [Examples](https://observablehq.com/@d3/working-with-color)
+
+Returns a uniform nonrational B-spline interpolator through the specified array of *colors*, which are converted to [RGB color space](https://github.com/d3/d3-color/blob/master/README.md#rgb). The control points are implicitly repeated such that the resulting spline has cyclical C² continuity when repeated around *t* in [0,1]; this is useful, for example, to create cyclical color scales. Opacity interpolation is not currently supported. See also [d3.interpolateBasisClosed](#interpolateBasisClosed), and see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for examples.
+
+<a name="interpolateHsl" href="#interpolateHsl">#</a> d3.<b>interpolateHsl</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js), [Examples](https://observablehq.com/@d3/working-with-color)
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/hsl.png" width="100%" height="40" alt="hsl">
+
+Returns an HSL color space interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in HSL; they will be converted to HSL using [d3.hsl](https://github.com/d3/d3-color/blob/master/README.md#hsl). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.
+
+<a name="interpolateHslLong" href="#interpolateHslLong">#</a> d3.<b>interpolateHslLong</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hsl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/hslLong.png" width="100%" height="40" alt="hslLong">
+
+Like [interpolateHsl](#interpolateHsl), but does not use the shortest path between hues.
+
+<a name="interpolateLab" href="#interpolateLab">#</a> d3.<b>interpolateLab</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/lab.js), [Examples](https://observablehq.com/@d3/working-with-color)
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/lab.png" width="100%" height="40" alt="lab">
+
+Returns a [CIELAB color space](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELAB; they will be converted to CIELAB using [d3.lab](https://github.com/d3/d3-color/blob/master/README.md#lab). The return value of the interpolator is an RGB string.
+
+<a name="interpolateHcl" href="#interpolateHcl">#</a> d3.<b>interpolateHcl</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js), [Examples](https://observablehq.com/@d3/working-with-color)
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/hcl.png" width="100%" height="40" alt="hcl">
+
+Returns a [CIELCh<sub>ab</sub> color space](https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC) interpolator between the two colors *a* and *b*. The colors *a* and *b* need not be in CIELCh<sub>ab</sub>; they will be converted to CIELCh<sub>ab</sub> using [d3.hcl](https://github.com/d3/d3-color/blob/master/README.md#hcl). If either color’s hue or chroma is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.
+
+<a name="interpolateHclLong" href="#interpolateHclLong">#</a> d3.<b>interpolateHclLong</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hcl.js#L21), [Examples](https://observablehq.com/@d3/working-with-color)
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/hclLong.png" width="100%" height="40" alt="hclLong">
+
+Like [interpolateHcl](#interpolateHcl), but does not use the shortest path between hues.
+
+<a name="interpolateCubehelix" href="#interpolateCubehelix">#</a> d3.<b>interpolateCubehelix</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js), [Examples](https://observablehq.com/@d3/working-with-color)
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/cubehelix.png" width="100%" height="40" alt="cubehelix">
+
+Or, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/cubehelixGamma.png" width="100%" height="40" alt="cubehelixGamma">
+
+Returns a Cubehelix color space interpolator between the two colors *a* and *b* using a configurable [gamma](#interpolate_gamma). If the gamma is not specified, it defaults to 1.0. The colors *a* and *b* need not be in Cubehelix; they will be converted to Cubehelix using [d3.cubehelix](https://github.com/d3/d3-color/blob/master/README.md#cubehelix). If either color’s hue or saturation is NaN, the opposing color’s channel value is used. The shortest path between hues is used. The return value of the interpolator is an RGB string.
+
+<a name="interpolateCubehelixLong" href="#interpolateCubehelixLong">#</a> d3.<b>interpolateCubehelixLong</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/cubehelix.js#L29), [Examples](https://observablehq.com/@d3/working-with-color)
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/cubehelixLong.png" width="100%" height="40" alt="cubehelixLong">
+
+Or, with a [gamma](#interpolate_gamma) of 3.0 to emphasize high-intensity values:
+
+<img src="https://raw.githubusercontent.com/d3/d3-interpolate/master/img/cubehelixGammaLong.png" width="100%" height="40" alt="cubehelixGammaLong">
+
+Like [interpolateCubehelix](#interpolateCubehelix), but does not use the shortest path between hues.
+
+<a name="interpolate_gamma" href="#interpolate_gamma">#</a> <i>interpolate</i>.<b>gamma</b>(<i>gamma</i>)
+
+Given that *interpolate* is one of [interpolateRgb](#interpolateRgb), [interpolateCubehelix](#interpolateCubehelix) or [interpolateCubehelixLong](#interpolateCubehelixLong), returns a new interpolator factory of the same type using the specified *gamma*. For example, to interpolate from purple to orange with a gamma of 2.2 in RGB space:
+
+```js
+const interpolator = d3.interpolateRgb.gamma(2.2)("purple", "orange");
+```
+
+See Eric Brasseur’s article, [Gamma error in picture scaling](http://www.ericbrasseur.org/gamma.html), for more on gamma correction.
+
+<a name="interpolateHue" href="#interpolateHue">#</a> d3.<b>interpolateHue</b>(<i>a</i>, <i>b</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/hue.js), [Examples](https://observablehq.com/@d3/working-with-color)
+
+Returns an interpolator between the two hue angles *a* and *b*. If either hue is NaN, the opposing value is used. The shortest path between hues is used. The return value of the interpolator is a number in [0, 360).
+
+### Splines
+
+Whereas standard interpolators blend from a starting value *a* at *t* = 0 to an ending value *b* at *t* = 1, spline interpolators smoothly blend multiple input values for *t* in [0,1] using piecewise polynomial functions. Only cubic uniform nonrational [B-splines](https://en.wikipedia.org/wiki/B-spline) are currently supported, also known as basis splines.
+
+<a href="#interpolateBasis" name="interpolateBasis">#</a> d3.<b>interpolateBasis</b>(<i>values</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basis.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)
+
+Returns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. Implicit control points are generated such that the interpolator returns *values*[0] at *t* = 0 and *values*[*values*.length - 1] at *t* = 1. See also [d3.curveBasis](https://github.com/d3/d3-shape/blob/master/README.md#curveBasis).
+
+<a href="#interpolateBasisClosed" name="interpolateBasisClosed">#</a> d3.<b>interpolateBasisClosed</b>(<i>values</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/basisClosed.js), [Examples](https://observablehq.com/@d3/d3-interpolatebasis)
+
+Returns a uniform nonrational B-spline interpolator through the specified array of *values*, which must be numbers. The control points are implicitly repeated such that the resulting one-dimensional spline has cyclical C² continuity when repeated around *t* in [0,1]. See also [d3.curveBasisClosed](https://github.com/d3/d3-shape/blob/master/README.md#curveBasisClosed).
+
+### Piecewise
+
+<a name="piecewise" href="#piecewise">#</a> d3.<b>piecewise</b>([<i>interpolate</i>, ]<i>values</i>) · [Source](https://github.com/d3/d3-interpolate/blob/master/src/piecewise.js), [Examples](https://observablehq.com/@d3/d3-piecewise)
+
+Returns a piecewise interpolator, composing interpolators for each adjacent pair of *values*. The returned interpolator maps *t* in [0, 1 / (*n* - 1)] to *interpolate*(*values*[0], *values*[1]), *t* in [1 / (*n* - 1), 2 / (*n* - 1)] to *interpolate*(*values*[1], *values*[2]), and so on, where *n* = *values*.length. In effect, this is a lightweight [linear scale](https://github.com/d3/d3-scale/blob/master/README.md#linear-scales). For example, to blend through red, green and blue:
+
+```js
+const interpolate = d3.piecewise(d3.interpolateRgb.gamma(2.2), ["red", "green", "blue"]);
+```
+
+If  *interpolate* is not specified, defaults to [d3.interpolate](#interpolate).
Index: node_modules/d3-interpolate/dist/d3-interpolate.js
===================================================================
--- node_modules/d3-interpolate/dist/d3-interpolate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/dist/d3-interpolate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,590 @@
+// https://d3js.org/d3-interpolate/ v3.0.1 Copyright 2010-2021 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-color')) :
+typeof define === 'function' && define.amd ? define(['exports', 'd3-color'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}, global.d3));
+}(this, (function (exports, d3Color) { 'use strict';
+
+function basis(t1, v0, v1, v2, v3) {
+  var t2 = t1 * t1, t3 = t2 * t1;
+  return ((1 - 3 * t1 + 3 * t2 - t3) * v0
+      + (4 - 6 * t2 + 3 * t3) * v1
+      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
+      + t3 * v3) / 6;
+}
+
+function basis$1(values) {
+  var n = values.length - 1;
+  return function(t) {
+    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
+        v1 = values[i],
+        v2 = values[i + 1],
+        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
+        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
+    return basis((t - i / n) * n, v0, v1, v2, v3);
+  };
+}
+
+function basisClosed(values) {
+  var n = values.length;
+  return function(t) {
+    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
+        v0 = values[(i + n - 1) % n],
+        v1 = values[i % n],
+        v2 = values[(i + 1) % n],
+        v3 = values[(i + 2) % n];
+    return basis((t - i / n) * n, v0, v1, v2, v3);
+  };
+}
+
+var constant = x => () => x;
+
+function linear(a, d) {
+  return function(t) {
+    return a + t * d;
+  };
+}
+
+function exponential(a, b, y) {
+  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
+    return Math.pow(a + t * b, y);
+  };
+}
+
+function hue$1(a, b) {
+  var d = b - a;
+  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);
+}
+
+function gamma(y) {
+  return (y = +y) === 1 ? nogamma : function(a, b) {
+    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);
+  };
+}
+
+function nogamma(a, b) {
+  var d = b - a;
+  return d ? linear(a, d) : constant(isNaN(a) ? b : a);
+}
+
+var rgb = (function rgbGamma(y) {
+  var color = gamma(y);
+
+  function rgb(start, end) {
+    var r = color((start = d3Color.rgb(start)).r, (end = d3Color.rgb(end)).r),
+        g = color(start.g, end.g),
+        b = color(start.b, end.b),
+        opacity = nogamma(start.opacity, end.opacity);
+    return function(t) {
+      start.r = r(t);
+      start.g = g(t);
+      start.b = b(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+
+  rgb.gamma = rgbGamma;
+
+  return rgb;
+})(1);
+
+function rgbSpline(spline) {
+  return function(colors) {
+    var n = colors.length,
+        r = new Array(n),
+        g = new Array(n),
+        b = new Array(n),
+        i, color;
+    for (i = 0; i < n; ++i) {
+      color = d3Color.rgb(colors[i]);
+      r[i] = color.r || 0;
+      g[i] = color.g || 0;
+      b[i] = color.b || 0;
+    }
+    r = spline(r);
+    g = spline(g);
+    b = spline(b);
+    color.opacity = 1;
+    return function(t) {
+      color.r = r(t);
+      color.g = g(t);
+      color.b = b(t);
+      return color + "";
+    };
+  };
+}
+
+var rgbBasis = rgbSpline(basis$1);
+var rgbBasisClosed = rgbSpline(basisClosed);
+
+function numberArray(a, b) {
+  if (!b) b = [];
+  var n = a ? Math.min(b.length, a.length) : 0,
+      c = b.slice(),
+      i;
+  return function(t) {
+    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;
+    return c;
+  };
+}
+
+function isNumberArray(x) {
+  return ArrayBuffer.isView(x) && !(x instanceof DataView);
+}
+
+function array(a, b) {
+  return (isNumberArray(b) ? numberArray : genericArray)(a, b);
+}
+
+function genericArray(a, b) {
+  var nb = b ? b.length : 0,
+      na = a ? Math.min(nb, a.length) : 0,
+      x = new Array(na),
+      c = new Array(nb),
+      i;
+
+  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);
+  for (; i < nb; ++i) c[i] = b[i];
+
+  return function(t) {
+    for (i = 0; i < na; ++i) c[i] = x[i](t);
+    return c;
+  };
+}
+
+function date(a, b) {
+  var d = new Date;
+  return a = +a, b = +b, function(t) {
+    return d.setTime(a * (1 - t) + b * t), d;
+  };
+}
+
+function number(a, b) {
+  return a = +a, b = +b, function(t) {
+    return a * (1 - t) + b * t;
+  };
+}
+
+function object(a, b) {
+  var i = {},
+      c = {},
+      k;
+
+  if (a === null || typeof a !== "object") a = {};
+  if (b === null || typeof b !== "object") b = {};
+
+  for (k in b) {
+    if (k in a) {
+      i[k] = value(a[k], b[k]);
+    } else {
+      c[k] = b[k];
+    }
+  }
+
+  return function(t) {
+    for (k in i) c[k] = i[k](t);
+    return c;
+  };
+}
+
+var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
+    reB = new RegExp(reA.source, "g");
+
+function zero(b) {
+  return function() {
+    return b;
+  };
+}
+
+function one(b) {
+  return function(t) {
+    return b(t) + "";
+  };
+}
+
+function string(a, b) {
+  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
+      am, // current match in a
+      bm, // current match in b
+      bs, // string preceding current number in b, if any
+      i = -1, // index in s
+      s = [], // string constants and placeholders
+      q = []; // number interpolators
+
+  // Coerce inputs to strings.
+  a = a + "", b = b + "";
+
+  // Interpolate pairs of numbers in a & b.
+  while ((am = reA.exec(a))
+      && (bm = reB.exec(b))) {
+    if ((bs = bm.index) > bi) { // a string precedes the next number in b
+      bs = b.slice(bi, bs);
+      if (s[i]) s[i] += bs; // coalesce with previous string
+      else s[++i] = bs;
+    }
+    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
+      if (s[i]) s[i] += bm; // coalesce with previous string
+      else s[++i] = bm;
+    } else { // interpolate non-matching numbers
+      s[++i] = null;
+      q.push({i: i, x: number(am, bm)});
+    }
+    bi = reB.lastIndex;
+  }
+
+  // Add remains of b.
+  if (bi < b.length) {
+    bs = b.slice(bi);
+    if (s[i]) s[i] += bs; // coalesce with previous string
+    else s[++i] = bs;
+  }
+
+  // Special optimization for only a single match.
+  // Otherwise, interpolate each of the numbers and rejoin the string.
+  return s.length < 2 ? (q[0]
+      ? one(q[0].x)
+      : zero(b))
+      : (b = q.length, function(t) {
+          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+          return s.join("");
+        });
+}
+
+function value(a, b) {
+  var t = typeof b, c;
+  return b == null || t === "boolean" ? constant(b)
+      : (t === "number" ? number
+      : t === "string" ? ((c = d3Color.color(b)) ? (b = c, rgb) : string)
+      : b instanceof d3Color.color ? rgb
+      : b instanceof Date ? date
+      : isNumberArray(b) ? numberArray
+      : Array.isArray(b) ? genericArray
+      : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
+      : number)(a, b);
+}
+
+function discrete(range) {
+  var n = range.length;
+  return function(t) {
+    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
+  };
+}
+
+function hue(a, b) {
+  var i = hue$1(+a, +b);
+  return function(t) {
+    var x = i(t);
+    return x - 360 * Math.floor(x / 360);
+  };
+}
+
+function round(a, b) {
+  return a = +a, b = +b, function(t) {
+    return Math.round(a * (1 - t) + b * t);
+  };
+}
+
+var degrees = 180 / Math.PI;
+
+var identity = {
+  translateX: 0,
+  translateY: 0,
+  rotate: 0,
+  skewX: 0,
+  scaleX: 1,
+  scaleY: 1
+};
+
+function decompose(a, b, c, d, e, f) {
+  var scaleX, scaleY, skewX;
+  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
+  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
+  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
+  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
+  return {
+    translateX: e,
+    translateY: f,
+    rotate: Math.atan2(b, a) * degrees,
+    skewX: Math.atan(skewX) * degrees,
+    scaleX: scaleX,
+    scaleY: scaleY
+  };
+}
+
+var svgNode;
+
+/* eslint-disable no-undef */
+function parseCss(value) {
+  const m = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");
+  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);
+}
+
+function parseSvg(value) {
+  if (value == null) return identity;
+  if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
+  svgNode.setAttribute("transform", value);
+  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;
+  value = value.matrix;
+  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
+}
+
+function interpolateTransform(parse, pxComma, pxParen, degParen) {
+
+  function pop(s) {
+    return s.length ? s.pop() + " " : "";
+  }
+
+  function translate(xa, ya, xb, yb, s, q) {
+    if (xa !== xb || ya !== yb) {
+      var i = s.push("translate(", null, pxComma, null, pxParen);
+      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});
+    } else if (xb || yb) {
+      s.push("translate(" + xb + pxComma + yb + pxParen);
+    }
+  }
+
+  function rotate(a, b, s, q) {
+    if (a !== b) {
+      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
+      q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: number(a, b)});
+    } else if (b) {
+      s.push(pop(s) + "rotate(" + b + degParen);
+    }
+  }
+
+  function skewX(a, b, s, q) {
+    if (a !== b) {
+      q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: number(a, b)});
+    } else if (b) {
+      s.push(pop(s) + "skewX(" + b + degParen);
+    }
+  }
+
+  function scale(xa, ya, xb, yb, s, q) {
+    if (xa !== xb || ya !== yb) {
+      var i = s.push(pop(s) + "scale(", null, ",", null, ")");
+      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});
+    } else if (xb !== 1 || yb !== 1) {
+      s.push(pop(s) + "scale(" + xb + "," + yb + ")");
+    }
+  }
+
+  return function(a, b) {
+    var s = [], // string constants and placeholders
+        q = []; // number interpolators
+    a = parse(a), b = parse(b);
+    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
+    rotate(a.rotate, b.rotate, s, q);
+    skewX(a.skewX, b.skewX, s, q);
+    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
+    a = b = null; // gc
+    return function(t) {
+      var i = -1, n = q.length, o;
+      while (++i < n) s[(o = q[i]).i] = o.x(t);
+      return s.join("");
+    };
+  };
+}
+
+var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
+var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
+
+var epsilon2 = 1e-12;
+
+function cosh(x) {
+  return ((x = Math.exp(x)) + 1 / x) / 2;
+}
+
+function sinh(x) {
+  return ((x = Math.exp(x)) - 1 / x) / 2;
+}
+
+function tanh(x) {
+  return ((x = Math.exp(2 * x)) - 1) / (x + 1);
+}
+
+var zoom = (function zoomRho(rho, rho2, rho4) {
+
+  // p0 = [ux0, uy0, w0]
+  // p1 = [ux1, uy1, w1]
+  function zoom(p0, p1) {
+    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
+        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
+        dx = ux1 - ux0,
+        dy = uy1 - uy0,
+        d2 = dx * dx + dy * dy,
+        i,
+        S;
+
+    // Special case for u0 ≅ u1.
+    if (d2 < epsilon2) {
+      S = Math.log(w1 / w0) / rho;
+      i = function(t) {
+        return [
+          ux0 + t * dx,
+          uy0 + t * dy,
+          w0 * Math.exp(rho * t * S)
+        ];
+      };
+    }
+
+    // General case.
+    else {
+      var d1 = Math.sqrt(d2),
+          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
+          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
+          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
+          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
+      S = (r1 - r0) / rho;
+      i = function(t) {
+        var s = t * S,
+            coshr0 = cosh(r0),
+            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
+        return [
+          ux0 + u * dx,
+          uy0 + u * dy,
+          w0 * coshr0 / cosh(rho * s + r0)
+        ];
+      };
+    }
+
+    i.duration = S * 1000 * rho / Math.SQRT2;
+
+    return i;
+  }
+
+  zoom.rho = function(_) {
+    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;
+    return zoomRho(_1, _2, _4);
+  };
+
+  return zoom;
+})(Math.SQRT2, 2, 4);
+
+function hsl(hue) {
+  return function(start, end) {
+    var h = hue((start = d3Color.hsl(start)).h, (end = d3Color.hsl(end)).h),
+        s = nogamma(start.s, end.s),
+        l = nogamma(start.l, end.l),
+        opacity = nogamma(start.opacity, end.opacity);
+    return function(t) {
+      start.h = h(t);
+      start.s = s(t);
+      start.l = l(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+}
+
+var hsl$1 = hsl(hue$1);
+var hslLong = hsl(nogamma);
+
+function lab(start, end) {
+  var l = nogamma((start = d3Color.lab(start)).l, (end = d3Color.lab(end)).l),
+      a = nogamma(start.a, end.a),
+      b = nogamma(start.b, end.b),
+      opacity = nogamma(start.opacity, end.opacity);
+  return function(t) {
+    start.l = l(t);
+    start.a = a(t);
+    start.b = b(t);
+    start.opacity = opacity(t);
+    return start + "";
+  };
+}
+
+function hcl(hue) {
+  return function(start, end) {
+    var h = hue((start = d3Color.hcl(start)).h, (end = d3Color.hcl(end)).h),
+        c = nogamma(start.c, end.c),
+        l = nogamma(start.l, end.l),
+        opacity = nogamma(start.opacity, end.opacity);
+    return function(t) {
+      start.h = h(t);
+      start.c = c(t);
+      start.l = l(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+}
+
+var hcl$1 = hcl(hue$1);
+var hclLong = hcl(nogamma);
+
+function cubehelix(hue) {
+  return (function cubehelixGamma(y) {
+    y = +y;
+
+    function cubehelix(start, end) {
+      var h = hue((start = d3Color.cubehelix(start)).h, (end = d3Color.cubehelix(end)).h),
+          s = nogamma(start.s, end.s),
+          l = nogamma(start.l, end.l),
+          opacity = nogamma(start.opacity, end.opacity);
+      return function(t) {
+        start.h = h(t);
+        start.s = s(t);
+        start.l = l(Math.pow(t, y));
+        start.opacity = opacity(t);
+        return start + "";
+      };
+    }
+
+    cubehelix.gamma = cubehelixGamma;
+
+    return cubehelix;
+  })(1);
+}
+
+var cubehelix$1 = cubehelix(hue$1);
+var cubehelixLong = cubehelix(nogamma);
+
+function piecewise(interpolate, values) {
+  if (values === undefined) values = interpolate, interpolate = value;
+  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);
+  while (i < n) I[i] = interpolate(v, v = values[++i]);
+  return function(t) {
+    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));
+    return I[i](t - i);
+  };
+}
+
+function quantize(interpolator, n) {
+  var samples = new Array(n);
+  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
+  return samples;
+}
+
+exports.interpolate = value;
+exports.interpolateArray = array;
+exports.interpolateBasis = basis$1;
+exports.interpolateBasisClosed = basisClosed;
+exports.interpolateCubehelix = cubehelix$1;
+exports.interpolateCubehelixLong = cubehelixLong;
+exports.interpolateDate = date;
+exports.interpolateDiscrete = discrete;
+exports.interpolateHcl = hcl$1;
+exports.interpolateHclLong = hclLong;
+exports.interpolateHsl = hsl$1;
+exports.interpolateHslLong = hslLong;
+exports.interpolateHue = hue;
+exports.interpolateLab = lab;
+exports.interpolateNumber = number;
+exports.interpolateNumberArray = numberArray;
+exports.interpolateObject = object;
+exports.interpolateRgb = rgb;
+exports.interpolateRgbBasis = rgbBasis;
+exports.interpolateRgbBasisClosed = rgbBasisClosed;
+exports.interpolateRound = round;
+exports.interpolateString = string;
+exports.interpolateTransformCss = interpolateTransformCss;
+exports.interpolateTransformSvg = interpolateTransformSvg;
+exports.interpolateZoom = zoom;
+exports.piecewise = piecewise;
+exports.quantize = quantize;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
Index: node_modules/d3-interpolate/dist/d3-interpolate.min.js
===================================================================
--- node_modules/d3-interpolate/dist/d3-interpolate.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/dist/d3-interpolate.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-interpolate/ v3.0.1 Copyright 2010-2021 Mike Bostock
+!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("d3-color")):"function"==typeof define&&define.amd?define(["exports","d3-color"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{},t.d3)}(this,(function(t,n){"use strict";function r(t,n,r,e,a){var o=t*t,u=o*t;return((1-3*t+3*o-u)*n+(4-6*o+3*u)*r+(1+3*t+3*o-3*u)*e+u*a)/6}function e(t){var n=t.length-1;return function(e){var a=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),o=t[a],u=t[a+1],i=a>0?t[a-1]:2*o-u,c=a<n-1?t[a+2]:2*u-o;return r((e-a/n)*n,i,o,u,c)}}function a(t){var n=t.length;return function(e){var a=Math.floor(((e%=1)<0?++e:e)*n),o=t[(a+n-1)%n],u=t[a%n],i=t[(a+1)%n],c=t[(a+2)%n];return r((e-a/n)*n,o,u,i,c)}}var o=t=>()=>t;function u(t,n){return function(r){return t+r*n}}function i(t,n){var r=n-t;return r?u(t,r>180||r<-180?r-360*Math.round(r/360):r):o(isNaN(t)?n:t)}function c(t){return 1==(t=+t)?l:function(n,r){return r-n?function(t,n,r){return t=Math.pow(t,r),n=Math.pow(n,r)-t,r=1/r,function(e){return Math.pow(t+e*n,r)}}(n,r,t):o(isNaN(n)?r:n)}}function l(t,n){var r=n-t;return r?u(t,r):o(isNaN(t)?n:t)}var f=function t(r){var e=c(r);function a(t,r){var a=e((t=n.rgb(t)).r,(r=n.rgb(r)).r),o=e(t.g,r.g),u=e(t.b,r.b),i=l(t.opacity,r.opacity);return function(n){return t.r=a(n),t.g=o(n),t.b=u(n),t.opacity=i(n),t+""}}return a.gamma=t,a}(1);function s(t){return function(r){var e,a,o=r.length,u=new Array(o),i=new Array(o),c=new Array(o);for(e=0;e<o;++e)a=n.rgb(r[e]),u[e]=a.r||0,i[e]=a.g||0,c[e]=a.b||0;return u=t(u),i=t(i),c=t(c),a.opacity=1,function(t){return a.r=u(t),a.g=i(t),a.b=c(t),a+""}}}var h=s(e),p=s(a);function v(t,n){n||(n=[]);var r,e=t?Math.min(n.length,t.length):0,a=n.slice();return function(o){for(r=0;r<e;++r)a[r]=t[r]*(1-o)+n[r]*o;return a}}function g(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function M(t,n){var r,e=n?n.length:0,a=t?Math.min(e,t.length):0,o=new Array(a),u=new Array(e);for(r=0;r<a;++r)o[r]=X(t[r],n[r]);for(;r<e;++r)u[r]=n[r];return function(t){for(r=0;r<a;++r)u[r]=o[r](t);return u}}function y(t,n){var r=new Date;return t=+t,n=+n,function(e){return r.setTime(t*(1-e)+n*e),r}}function b(t,n){return t=+t,n=+n,function(r){return t*(1-r)+n*r}}function d(t,n){var r,e={},a={};for(r in null!==t&&"object"==typeof t||(t={}),null!==n&&"object"==typeof n||(n={}),n)r in t?e[r]=X(t[r],n[r]):a[r]=n[r];return function(t){for(r in e)a[r]=e[r](t);return a}}var x=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,w=new RegExp(x.source,"g");function m(t,n){var r,e,a,o=x.lastIndex=w.lastIndex=0,u=-1,i=[],c=[];for(t+="",n+="";(r=x.exec(t))&&(e=w.exec(n));)(a=e.index)>o&&(a=n.slice(o,a),i[u]?i[u]+=a:i[++u]=a),(r=r[0])===(e=e[0])?i[u]?i[u]+=e:i[++u]=e:(i[++u]=null,c.push({i:u,x:b(r,e)})),o=w.lastIndex;return o<n.length&&(a=n.slice(o),i[u]?i[u]+=a:i[++u]=a),i.length<2?c[0]?function(t){return function(n){return t(n)+""}}(c[0].x):function(t){return function(){return t}}(n):(n=c.length,function(t){for(var r,e=0;e<n;++e)i[(r=c[e]).i]=r.x(t);return i.join("")})}function X(t,r){var e,a=typeof r;return null==r||"boolean"===a?o(r):("number"===a?b:"string"===a?(e=n.color(r))?(r=e,f):m:r instanceof n.color?f:r instanceof Date?y:g(r)?v:Array.isArray(r)?M:"function"!=typeof r.valueOf&&"function"!=typeof r.toString||isNaN(r)?d:b)(t,r)}var A,N=180/Math.PI,S={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Y(t,n,r,e,a,o){var u,i,c;return(u=Math.sqrt(t*t+n*n))&&(t/=u,n/=u),(c=t*r+n*e)&&(r-=t*c,e-=n*c),(i=Math.sqrt(r*r+e*e))&&(r/=i,e/=i,c/=i),t*e<n*r&&(t=-t,n=-n,c=-c,u=-u),{translateX:a,translateY:o,rotate:Math.atan2(n,t)*N,skewX:Math.atan(c)*N,scaleX:u,scaleY:i}}function j(t,n,r,e){function a(t){return t.length?t.pop()+" ":""}return function(o,u){var i=[],c=[];return o=t(o),u=t(u),function(t,e,a,o,u,i){if(t!==a||e!==o){var c=u.push("translate(",null,n,null,r);i.push({i:c-4,x:b(t,a)},{i:c-2,x:b(e,o)})}else(a||o)&&u.push("translate("+a+n+o+r)}(o.translateX,o.translateY,u.translateX,u.translateY,i,c),function(t,n,r,o){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),o.push({i:r.push(a(r)+"rotate(",null,e)-2,x:b(t,n)})):n&&r.push(a(r)+"rotate("+n+e)}(o.rotate,u.rotate,i,c),function(t,n,r,o){t!==n?o.push({i:r.push(a(r)+"skewX(",null,e)-2,x:b(t,n)}):n&&r.push(a(r)+"skewX("+n+e)}(o.skewX,u.skewX,i,c),function(t,n,r,e,o,u){if(t!==r||n!==e){var i=o.push(a(o)+"scale(",null,",",null,")");u.push({i:i-4,x:b(t,r)},{i:i-2,x:b(n,e)})}else 1===r&&1===e||o.push(a(o)+"scale("+r+","+e+")")}(o.scaleX,o.scaleY,u.scaleX,u.scaleY,i,c),o=u=null,function(t){for(var n,r=-1,e=c.length;++r<e;)i[(n=c[r]).i]=n.x(t);return i.join("")}}}var q=j((function(t){const n=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return n.isIdentity?S:Y(n.a,n.b,n.c,n.d,n.e,n.f)}),"px, ","px)","deg)"),D=j((function(t){return null==t?S:(A||(A=document.createElementNS("http://www.w3.org/2000/svg","g")),A.setAttribute("transform",t),(t=A.transform.baseVal.consolidate())?Y((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):S)}),", ",")",")");function R(t){return((t=Math.exp(t))+1/t)/2}var T=function t(n,r,e){function a(t,a){var o,u,i=t[0],c=t[1],l=t[2],f=a[0],s=a[1],h=a[2],p=f-i,v=s-c,g=p*p+v*v;if(g<1e-12)u=Math.log(h/l)/n,o=function(t){return[i+t*p,c+t*v,l*Math.exp(n*t*u)]};else{var M=Math.sqrt(g),y=(h*h-l*l+e*g)/(2*l*r*M),b=(h*h-l*l-e*g)/(2*h*r*M),d=Math.log(Math.sqrt(y*y+1)-y),x=Math.log(Math.sqrt(b*b+1)-b);u=(x-d)/n,o=function(t){var e,a=t*u,o=R(d),f=l/(r*M)*(o*(e=n*a+d,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(d));return[i+f*p,c+f*v,l*o/R(n*a+d)]}}return o.duration=1e3*u*n/Math.SQRT2,o}return a.rho=function(n){var r=Math.max(.001,+n),e=r*r;return t(r,e,e*e)},a}(Math.SQRT2,2,4);function k(t){return function(r,e){var a=t((r=n.hsl(r)).h,(e=n.hsl(e)).h),o=l(r.s,e.s),u=l(r.l,e.l),i=l(r.opacity,e.opacity);return function(t){return r.h=a(t),r.s=o(t),r.l=u(t),r.opacity=i(t),r+""}}}var C=k(i),B=k(l);function H(t){return function(r,e){var a=t((r=n.hcl(r)).h,(e=n.hcl(e)).h),o=l(r.c,e.c),u=l(r.l,e.l),i=l(r.opacity,e.opacity);return function(t){return r.h=a(t),r.c=o(t),r.l=u(t),r.opacity=i(t),r+""}}}var I=H(i),O=H(l);function L(t){return function r(e){function a(r,a){var o=t((r=n.cubehelix(r)).h,(a=n.cubehelix(a)).h),u=l(r.s,a.s),i=l(r.l,a.l),c=l(r.opacity,a.opacity);return function(t){return r.h=o(t),r.s=u(t),r.l=i(Math.pow(t,e)),r.opacity=c(t),r+""}}return e=+e,a.gamma=r,a}(1)}var E=L(i),V=L(l);t.interpolate=X,t.interpolateArray=function(t,n){return(g(n)?v:M)(t,n)},t.interpolateBasis=e,t.interpolateBasisClosed=a,t.interpolateCubehelix=E,t.interpolateCubehelixLong=V,t.interpolateDate=y,t.interpolateDiscrete=function(t){var n=t.length;return function(r){return t[Math.max(0,Math.min(n-1,Math.floor(r*n)))]}},t.interpolateHcl=I,t.interpolateHclLong=O,t.interpolateHsl=C,t.interpolateHslLong=B,t.interpolateHue=function(t,n){var r=i(+t,+n);return function(t){var n=r(t);return n-360*Math.floor(n/360)}},t.interpolateLab=function(t,r){var e=l((t=n.lab(t)).l,(r=n.lab(r)).l),a=l(t.a,r.a),o=l(t.b,r.b),u=l(t.opacity,r.opacity);return function(n){return t.l=e(n),t.a=a(n),t.b=o(n),t.opacity=u(n),t+""}},t.interpolateNumber=b,t.interpolateNumberArray=v,t.interpolateObject=d,t.interpolateRgb=f,t.interpolateRgbBasis=h,t.interpolateRgbBasisClosed=p,t.interpolateRound=function(t,n){return t=+t,n=+n,function(r){return Math.round(t*(1-r)+n*r)}},t.interpolateString=m,t.interpolateTransformCss=q,t.interpolateTransformSvg=D,t.interpolateZoom=T,t.piecewise=function(t,n){void 0===n&&(n=t,t=X);for(var r=0,e=n.length-1,a=n[0],o=new Array(e<0?0:e);r<e;)o[r]=t(a,a=n[++r]);return function(t){var n=Math.max(0,Math.min(e-1,Math.floor(t*=e)));return o[n](t-n)}},t.quantize=function(t,n){for(var r=new Array(n),e=0;e<n;++e)r[e]=t(e/(n-1));return r},Object.defineProperty(t,"__esModule",{value:!0})}));
Index: node_modules/d3-interpolate/package.json
===================================================================
--- node_modules/d3-interpolate/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+{
+  "name": "d3-interpolate",
+  "version": "3.0.1",
+  "description": "Interpolate numbers, colors, strings, arrays, objects, whatever!",
+  "homepage": "https://d3js.org/d3-interpolate/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-interpolate.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "interpolate",
+    "interpolation",
+    "color"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-interpolate.min.js",
+  "unpkg": "dist/d3-interpolate.min.js",
+  "exports": {
+    "umd": "./dist/d3-interpolate.min.js",
+    "default": "./src/index.js"
+  },
+  "sideEffects": false,
+  "dependencies": {
+    "d3-color": "1 - 3"
+  },
+  "devDependencies": {
+    "eslint": "7",
+    "mocha": "8",
+    "rollup": "2",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-interpolate/src/array.js
===================================================================
--- node_modules/d3-interpolate/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import value from "./value.js";
+import numberArray, {isNumberArray} from "./numberArray.js";
+
+export default function(a, b) {
+  return (isNumberArray(b) ? numberArray : genericArray)(a, b);
+}
+
+export function genericArray(a, b) {
+  var nb = b ? b.length : 0,
+      na = a ? Math.min(nb, a.length) : 0,
+      x = new Array(na),
+      c = new Array(nb),
+      i;
+
+  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);
+  for (; i < nb; ++i) c[i] = b[i];
+
+  return function(t) {
+    for (i = 0; i < na; ++i) c[i] = x[i](t);
+    return c;
+  };
+}
Index: node_modules/d3-interpolate/src/basis.js
===================================================================
--- node_modules/d3-interpolate/src/basis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/basis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+export function basis(t1, v0, v1, v2, v3) {
+  var t2 = t1 * t1, t3 = t2 * t1;
+  return ((1 - 3 * t1 + 3 * t2 - t3) * v0
+      + (4 - 6 * t2 + 3 * t3) * v1
+      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
+      + t3 * v3) / 6;
+}
+
+export default function(values) {
+  var n = values.length - 1;
+  return function(t) {
+    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
+        v1 = values[i],
+        v2 = values[i + 1],
+        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
+        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
+    return basis((t - i / n) * n, v0, v1, v2, v3);
+  };
+}
Index: node_modules/d3-interpolate/src/basisClosed.js
===================================================================
--- node_modules/d3-interpolate/src/basisClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/basisClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import {basis} from "./basis.js";
+
+export default function(values) {
+  var n = values.length;
+  return function(t) {
+    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
+        v0 = values[(i + n - 1) % n],
+        v1 = values[i % n],
+        v2 = values[(i + 1) % n],
+        v3 = values[(i + 2) % n];
+    return basis((t - i / n) * n, v0, v1, v2, v3);
+  };
+}
Index: node_modules/d3-interpolate/src/color.js
===================================================================
--- node_modules/d3-interpolate/src/color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import constant from "./constant.js";
+
+function linear(a, d) {
+  return function(t) {
+    return a + t * d;
+  };
+}
+
+function exponential(a, b, y) {
+  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
+    return Math.pow(a + t * b, y);
+  };
+}
+
+export function hue(a, b) {
+  var d = b - a;
+  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);
+}
+
+export function gamma(y) {
+  return (y = +y) === 1 ? nogamma : function(a, b) {
+    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);
+  };
+}
+
+export default function nogamma(a, b) {
+  var d = b - a;
+  return d ? linear(a, d) : constant(isNaN(a) ? b : a);
+}
Index: node_modules/d3-interpolate/src/constant.js
===================================================================
--- node_modules/d3-interpolate/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export default x => () => x;
Index: node_modules/d3-interpolate/src/cubehelix.js
===================================================================
--- node_modules/d3-interpolate/src/cubehelix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/cubehelix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import {cubehelix as colorCubehelix} from "d3-color";
+import color, {hue} from "./color.js";
+
+function cubehelix(hue) {
+  return (function cubehelixGamma(y) {
+    y = +y;
+
+    function cubehelix(start, end) {
+      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),
+          s = color(start.s, end.s),
+          l = color(start.l, end.l),
+          opacity = color(start.opacity, end.opacity);
+      return function(t) {
+        start.h = h(t);
+        start.s = s(t);
+        start.l = l(Math.pow(t, y));
+        start.opacity = opacity(t);
+        return start + "";
+      };
+    }
+
+    cubehelix.gamma = cubehelixGamma;
+
+    return cubehelix;
+  })(1);
+}
+
+export default cubehelix(hue);
+export var cubehelixLong = cubehelix(color);
Index: node_modules/d3-interpolate/src/date.js
===================================================================
--- node_modules/d3-interpolate/src/date.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/date.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export default function(a, b) {
+  var d = new Date;
+  return a = +a, b = +b, function(t) {
+    return d.setTime(a * (1 - t) + b * t), d;
+  };
+}
Index: node_modules/d3-interpolate/src/discrete.js
===================================================================
--- node_modules/d3-interpolate/src/discrete.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/discrete.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export default function(range) {
+  var n = range.length;
+  return function(t) {
+    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
+  };
+}
Index: node_modules/d3-interpolate/src/hcl.js
===================================================================
--- node_modules/d3-interpolate/src/hcl.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/hcl.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import {hcl as colorHcl} from "d3-color";
+import color, {hue} from "./color.js";
+
+function hcl(hue) {
+  return function(start, end) {
+    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),
+        c = color(start.c, end.c),
+        l = color(start.l, end.l),
+        opacity = color(start.opacity, end.opacity);
+    return function(t) {
+      start.h = h(t);
+      start.c = c(t);
+      start.l = l(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+}
+
+export default hcl(hue);
+export var hclLong = hcl(color);
Index: node_modules/d3-interpolate/src/hsl.js
===================================================================
--- node_modules/d3-interpolate/src/hsl.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/hsl.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import {hsl as colorHsl} from "d3-color";
+import color, {hue} from "./color.js";
+
+function hsl(hue) {
+  return function(start, end) {
+    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),
+        s = color(start.s, end.s),
+        l = color(start.l, end.l),
+        opacity = color(start.opacity, end.opacity);
+    return function(t) {
+      start.h = h(t);
+      start.s = s(t);
+      start.l = l(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+}
+
+export default hsl(hue);
+export var hslLong = hsl(color);
Index: node_modules/d3-interpolate/src/hue.js
===================================================================
--- node_modules/d3-interpolate/src/hue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/hue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import {hue} from "./color.js";
+
+export default function(a, b) {
+  var i = hue(+a, +b);
+  return function(t) {
+    var x = i(t);
+    return x - 360 * Math.floor(x / 360);
+  };
+}
Index: node_modules/d3-interpolate/src/index.js
===================================================================
--- node_modules/d3-interpolate/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+export {default as interpolate} from "./value.js";
+export {default as interpolateArray} from "./array.js";
+export {default as interpolateBasis} from "./basis.js";
+export {default as interpolateBasisClosed} from "./basisClosed.js";
+export {default as interpolateDate} from "./date.js";
+export {default as interpolateDiscrete} from "./discrete.js";
+export {default as interpolateHue} from "./hue.js";
+export {default as interpolateNumber} from "./number.js";
+export {default as interpolateNumberArray} from "./numberArray.js";
+export {default as interpolateObject} from "./object.js";
+export {default as interpolateRound} from "./round.js";
+export {default as interpolateString} from "./string.js";
+export {interpolateTransformCss, interpolateTransformSvg} from "./transform/index.js";
+export {default as interpolateZoom} from "./zoom.js";
+export {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from "./rgb.js";
+export {default as interpolateHsl, hslLong as interpolateHslLong} from "./hsl.js";
+export {default as interpolateLab} from "./lab.js";
+export {default as interpolateHcl, hclLong as interpolateHclLong} from "./hcl.js";
+export {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from "./cubehelix.js";
+export {default as piecewise} from "./piecewise.js";
+export {default as quantize} from "./quantize.js";
Index: node_modules/d3-interpolate/src/lab.js
===================================================================
--- node_modules/d3-interpolate/src/lab.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/lab.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import {lab as colorLab} from "d3-color";
+import color from "./color.js";
+
+export default function lab(start, end) {
+  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),
+      a = color(start.a, end.a),
+      b = color(start.b, end.b),
+      opacity = color(start.opacity, end.opacity);
+  return function(t) {
+    start.l = l(t);
+    start.a = a(t);
+    start.b = b(t);
+    start.opacity = opacity(t);
+    return start + "";
+  };
+}
Index: node_modules/d3-interpolate/src/number.js
===================================================================
--- node_modules/d3-interpolate/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export default function(a, b) {
+  return a = +a, b = +b, function(t) {
+    return a * (1 - t) + b * t;
+  };
+}
Index: node_modules/d3-interpolate/src/numberArray.js
===================================================================
--- node_modules/d3-interpolate/src/numberArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/numberArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+export default function(a, b) {
+  if (!b) b = [];
+  var n = a ? Math.min(b.length, a.length) : 0,
+      c = b.slice(),
+      i;
+  return function(t) {
+    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;
+    return c;
+  };
+}
+
+export function isNumberArray(x) {
+  return ArrayBuffer.isView(x) && !(x instanceof DataView);
+}
Index: node_modules/d3-interpolate/src/object.js
===================================================================
--- node_modules/d3-interpolate/src/object.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/object.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import value from "./value.js";
+
+export default function(a, b) {
+  var i = {},
+      c = {},
+      k;
+
+  if (a === null || typeof a !== "object") a = {};
+  if (b === null || typeof b !== "object") b = {};
+
+  for (k in b) {
+    if (k in a) {
+      i[k] = value(a[k], b[k]);
+    } else {
+      c[k] = b[k];
+    }
+  }
+
+  return function(t) {
+    for (k in i) c[k] = i[k](t);
+    return c;
+  };
+}
Index: node_modules/d3-interpolate/src/piecewise.js
===================================================================
--- node_modules/d3-interpolate/src/piecewise.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/piecewise.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import {default as value} from "./value.js";
+
+export default function piecewise(interpolate, values) {
+  if (values === undefined) values = interpolate, interpolate = value;
+  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);
+  while (i < n) I[i] = interpolate(v, v = values[++i]);
+  return function(t) {
+    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));
+    return I[i](t - i);
+  };
+}
Index: node_modules/d3-interpolate/src/quantize.js
===================================================================
--- node_modules/d3-interpolate/src/quantize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/quantize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export default function(interpolator, n) {
+  var samples = new Array(n);
+  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
+  return samples;
+}
Index: node_modules/d3-interpolate/src/rgb.js
===================================================================
--- node_modules/d3-interpolate/src/rgb.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/rgb.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+import {rgb as colorRgb} from "d3-color";
+import basis from "./basis.js";
+import basisClosed from "./basisClosed.js";
+import nogamma, {gamma} from "./color.js";
+
+export default (function rgbGamma(y) {
+  var color = gamma(y);
+
+  function rgb(start, end) {
+    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),
+        g = color(start.g, end.g),
+        b = color(start.b, end.b),
+        opacity = nogamma(start.opacity, end.opacity);
+    return function(t) {
+      start.r = r(t);
+      start.g = g(t);
+      start.b = b(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+
+  rgb.gamma = rgbGamma;
+
+  return rgb;
+})(1);
+
+function rgbSpline(spline) {
+  return function(colors) {
+    var n = colors.length,
+        r = new Array(n),
+        g = new Array(n),
+        b = new Array(n),
+        i, color;
+    for (i = 0; i < n; ++i) {
+      color = colorRgb(colors[i]);
+      r[i] = color.r || 0;
+      g[i] = color.g || 0;
+      b[i] = color.b || 0;
+    }
+    r = spline(r);
+    g = spline(g);
+    b = spline(b);
+    color.opacity = 1;
+    return function(t) {
+      color.r = r(t);
+      color.g = g(t);
+      color.b = b(t);
+      return color + "";
+    };
+  };
+}
+
+export var rgbBasis = rgbSpline(basis);
+export var rgbBasisClosed = rgbSpline(basisClosed);
Index: node_modules/d3-interpolate/src/round.js
===================================================================
--- node_modules/d3-interpolate/src/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export default function(a, b) {
+  return a = +a, b = +b, function(t) {
+    return Math.round(a * (1 - t) + b * t);
+  };
+}
Index: node_modules/d3-interpolate/src/string.js
===================================================================
--- node_modules/d3-interpolate/src/string.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/string.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+import number from "./number.js";
+
+var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
+    reB = new RegExp(reA.source, "g");
+
+function zero(b) {
+  return function() {
+    return b;
+  };
+}
+
+function one(b) {
+  return function(t) {
+    return b(t) + "";
+  };
+}
+
+export default function(a, b) {
+  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
+      am, // current match in a
+      bm, // current match in b
+      bs, // string preceding current number in b, if any
+      i = -1, // index in s
+      s = [], // string constants and placeholders
+      q = []; // number interpolators
+
+  // Coerce inputs to strings.
+  a = a + "", b = b + "";
+
+  // Interpolate pairs of numbers in a & b.
+  while ((am = reA.exec(a))
+      && (bm = reB.exec(b))) {
+    if ((bs = bm.index) > bi) { // a string precedes the next number in b
+      bs = b.slice(bi, bs);
+      if (s[i]) s[i] += bs; // coalesce with previous string
+      else s[++i] = bs;
+    }
+    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
+      if (s[i]) s[i] += bm; // coalesce with previous string
+      else s[++i] = bm;
+    } else { // interpolate non-matching numbers
+      s[++i] = null;
+      q.push({i: i, x: number(am, bm)});
+    }
+    bi = reB.lastIndex;
+  }
+
+  // Add remains of b.
+  if (bi < b.length) {
+    bs = b.slice(bi);
+    if (s[i]) s[i] += bs; // coalesce with previous string
+    else s[++i] = bs;
+  }
+
+  // Special optimization for only a single match.
+  // Otherwise, interpolate each of the numbers and rejoin the string.
+  return s.length < 2 ? (q[0]
+      ? one(q[0].x)
+      : zero(b))
+      : (b = q.length, function(t) {
+          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+          return s.join("");
+        });
+}
Index: node_modules/d3-interpolate/src/transform/decompose.js
===================================================================
--- node_modules/d3-interpolate/src/transform/decompose.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/transform/decompose.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+var degrees = 180 / Math.PI;
+
+export var identity = {
+  translateX: 0,
+  translateY: 0,
+  rotate: 0,
+  skewX: 0,
+  scaleX: 1,
+  scaleY: 1
+};
+
+export default function(a, b, c, d, e, f) {
+  var scaleX, scaleY, skewX;
+  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
+  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
+  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
+  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
+  return {
+    translateX: e,
+    translateY: f,
+    rotate: Math.atan2(b, a) * degrees,
+    skewX: Math.atan(skewX) * degrees,
+    scaleX: scaleX,
+    scaleY: scaleY
+  };
+}
Index: node_modules/d3-interpolate/src/transform/index.js
===================================================================
--- node_modules/d3-interpolate/src/transform/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/transform/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+import number from "../number.js";
+import {parseCss, parseSvg} from "./parse.js";
+
+function interpolateTransform(parse, pxComma, pxParen, degParen) {
+
+  function pop(s) {
+    return s.length ? s.pop() + " " : "";
+  }
+
+  function translate(xa, ya, xb, yb, s, q) {
+    if (xa !== xb || ya !== yb) {
+      var i = s.push("translate(", null, pxComma, null, pxParen);
+      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});
+    } else if (xb || yb) {
+      s.push("translate(" + xb + pxComma + yb + pxParen);
+    }
+  }
+
+  function rotate(a, b, s, q) {
+    if (a !== b) {
+      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
+      q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: number(a, b)});
+    } else if (b) {
+      s.push(pop(s) + "rotate(" + b + degParen);
+    }
+  }
+
+  function skewX(a, b, s, q) {
+    if (a !== b) {
+      q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: number(a, b)});
+    } else if (b) {
+      s.push(pop(s) + "skewX(" + b + degParen);
+    }
+  }
+
+  function scale(xa, ya, xb, yb, s, q) {
+    if (xa !== xb || ya !== yb) {
+      var i = s.push(pop(s) + "scale(", null, ",", null, ")");
+      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});
+    } else if (xb !== 1 || yb !== 1) {
+      s.push(pop(s) + "scale(" + xb + "," + yb + ")");
+    }
+  }
+
+  return function(a, b) {
+    var s = [], // string constants and placeholders
+        q = []; // number interpolators
+    a = parse(a), b = parse(b);
+    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
+    rotate(a.rotate, b.rotate, s, q);
+    skewX(a.skewX, b.skewX, s, q);
+    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
+    a = b = null; // gc
+    return function(t) {
+      var i = -1, n = q.length, o;
+      while (++i < n) s[(o = q[i]).i] = o.x(t);
+      return s.join("");
+    };
+  };
+}
+
+export var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
+export var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
Index: node_modules/d3-interpolate/src/transform/parse.js
===================================================================
--- node_modules/d3-interpolate/src/transform/parse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/transform/parse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import decompose, {identity} from "./decompose.js";
+
+var svgNode;
+
+/* eslint-disable no-undef */
+export function parseCss(value) {
+  const m = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");
+  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);
+}
+
+export function parseSvg(value) {
+  if (value == null) return identity;
+  if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
+  svgNode.setAttribute("transform", value);
+  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;
+  value = value.matrix;
+  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
+}
Index: node_modules/d3-interpolate/src/value.js
===================================================================
--- node_modules/d3-interpolate/src/value.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/value.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import {color} from "d3-color";
+import rgb from "./rgb.js";
+import {genericArray} from "./array.js";
+import date from "./date.js";
+import number from "./number.js";
+import object from "./object.js";
+import string from "./string.js";
+import constant from "./constant.js";
+import numberArray, {isNumberArray} from "./numberArray.js";
+
+export default function(a, b) {
+  var t = typeof b, c;
+  return b == null || t === "boolean" ? constant(b)
+      : (t === "number" ? number
+      : t === "string" ? ((c = color(b)) ? (b = c, rgb) : string)
+      : b instanceof color ? rgb
+      : b instanceof Date ? date
+      : isNumberArray(b) ? numberArray
+      : Array.isArray(b) ? genericArray
+      : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
+      : number)(a, b);
+}
Index: node_modules/d3-interpolate/src/zoom.js
===================================================================
--- node_modules/d3-interpolate/src/zoom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-interpolate/src/zoom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+var epsilon2 = 1e-12;
+
+function cosh(x) {
+  return ((x = Math.exp(x)) + 1 / x) / 2;
+}
+
+function sinh(x) {
+  return ((x = Math.exp(x)) - 1 / x) / 2;
+}
+
+function tanh(x) {
+  return ((x = Math.exp(2 * x)) - 1) / (x + 1);
+}
+
+export default (function zoomRho(rho, rho2, rho4) {
+
+  // p0 = [ux0, uy0, w0]
+  // p1 = [ux1, uy1, w1]
+  function zoom(p0, p1) {
+    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
+        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
+        dx = ux1 - ux0,
+        dy = uy1 - uy0,
+        d2 = dx * dx + dy * dy,
+        i,
+        S;
+
+    // Special case for u0 ≅ u1.
+    if (d2 < epsilon2) {
+      S = Math.log(w1 / w0) / rho;
+      i = function(t) {
+        return [
+          ux0 + t * dx,
+          uy0 + t * dy,
+          w0 * Math.exp(rho * t * S)
+        ];
+      }
+    }
+
+    // General case.
+    else {
+      var d1 = Math.sqrt(d2),
+          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
+          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
+          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
+          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
+      S = (r1 - r0) / rho;
+      i = function(t) {
+        var s = t * S,
+            coshr0 = cosh(r0),
+            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
+        return [
+          ux0 + u * dx,
+          uy0 + u * dy,
+          w0 * coshr0 / cosh(rho * s + r0)
+        ];
+      }
+    }
+
+    i.duration = S * 1000 * rho / Math.SQRT2;
+
+    return i;
+  }
+
+  zoom.rho = function(_) {
+    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;
+    return zoomRho(_1, _2, _4);
+  };
+
+  return zoom;
+})(Math.SQRT2, 2, 4);
Index: node_modules/d3-path/LICENSE
===================================================================
--- node_modules/d3-path/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-path/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2015-2022 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-path/README.md
===================================================================
--- node_modules/d3-path/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-path/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,94 @@
+# d3-path
+
+Say you have some code that draws to a 2D canvas:
+
+```js
+function drawCircle(context, radius) {
+  context.moveTo(radius, 0);
+  context.arc(0, 0, radius, 0, 2 * Math.PI);
+}
+```
+
+The d3-path module lets you take this exact code and additionally render to [SVG](http://www.w3.org/TR/SVG/paths.html). It works by [serializing](#path_toString) [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls to [SVG path data](http://www.w3.org/TR/SVG/paths.html#PathData). For example:
+
+```js
+const context = d3.path();
+drawCircle(context, 40);
+pathElement.setAttribute("d", context.toString());
+```
+
+Now code you write once can be used with both Canvas (for performance) and SVG (for convenience). For a practical example, see [d3-shape](https://github.com/d3/d3-shape).
+
+## Installing
+
+If you use npm, `npm install d3-path`. You can also download the [latest release on GitHub](https://github.com/d3/d3-path/releases/latest). In modern browsers, you can import d3-path from jsDelivr:
+
+```html
+<script type="module">
+
+import {path} from "https://cdn.jsdelivr.net/npm/d3-path@3/+esm";
+
+const p = path();
+p.moveTo(1, 2);
+p.lineTo(3, 4);
+p.closePath();
+
+</script>
+```
+
+For legacy environments, you can load d3-path’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-path@3"></script>
+<script>
+
+const path = d3.path();
+
+</script>
+```
+
+## API Reference
+
+<a name="path" href="#path">#</a> d3.<b>path</b>() · [Source](https://github.com/d3/d3-path/blob/master/src/path.js), [Examples](https://observablehq.com/@d3/d3-path)
+
+Constructs a new path serializer that implements [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods).
+
+<a name="path_moveTo" href="#path_moveTo">#</a> <i>path</i>.<b>moveTo</b>(<i>x</i>, <i>y</i>)
+
+Move to the specified point ⟨*x*, *y*⟩. Equivalent to [*context*.moveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-moveto) and SVG’s [“moveto” command](http://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands).
+
+<a name="path_closePath" href="#path_closePath">#</a> <i>path</i>.<b>closePath</b>()
+
+Ends the current subpath and causes an automatic straight line to be drawn from the current point to the initial point of the current subpath. Equivalent to [*context*.closePath](http://www.w3.org/TR/2dcontext/#dom-context-2d-closepath) and SVG’s [“closepath” command](http://www.w3.org/TR/SVG/paths.html#PathDataClosePathCommand).
+
+<a name="path_lineTo" href="#path_lineTo">#</a> <i>path</i>.<b>lineTo</b>(<i>x</i>, <i>y</i>)
+
+Draws a straight line from the current point to the specified point ⟨*x*, *y*⟩. Equivalent to [*context*.lineTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-lineto) and SVG’s [“lineto” command](http://www.w3.org/TR/SVG/paths.html#PathDataLinetoCommands).
+
+<a name="path_quadraticCurveTo" href="#path_quadraticCurveTo">#</a> <i>path</i>.<b>quadraticCurveTo</b>(<i>cpx</i>, <i>cpy</i>, <i>x</i>, <i>y</i>)
+
+Draws a quadratic Bézier segment from the current point to the specified point ⟨*x*, *y*⟩, with the specified control point ⟨*cpx*, *cpy*⟩. Equivalent to [*context*.quadraticCurveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-quadraticcurveto) and SVG’s [quadratic Bézier curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataQuadraticBezierCommands).
+
+<a name="path_bezierCurveTo" href="#path_bezierCurveTo">#</a> <i>path</i>.<b>bezierCurveTo</b>(<i>cpx1</i>, <i>cpy1</i>, <i>cpx2</i>, <i>cpy2</i>, <i>x</i>, <i>y</i>)
+
+Draws a cubic Bézier segment from the current point to the specified point ⟨*x*, *y*⟩, with the specified control points ⟨*cpx1*, *cpy1*⟩ and ⟨*cpx2*, *cpy2*⟩. Equivalent to [*context*.bezierCurveTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-beziercurveto) and SVG’s [cubic Bézier curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataCubicBezierCommands).
+
+<a name="path_arcTo" href="#path_arcTo">#</a> <i>path</i>.<b>arcTo</b>(<i>x1</i>, <i>y1</i>, <i>x2</i>, <i>y2</i>, <i>radius</i>)
+
+Draws a circular arc segment with the specified *radius* that starts tangent to the line between the current point and the specified point ⟨*x1*, *y1*⟩ and ends tangent to the line between the specified points ⟨*x1*, *y1*⟩ and ⟨*x2*, *y2*⟩. If the first tangent point is not equal to the current point, a straight line is drawn between the current point and the first tangent point. Equivalent to [*context*.arcTo](http://www.w3.org/TR/2dcontext/#dom-context-2d-arcto) and uses SVG’s [elliptical arc curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands).
+
+<a name="path_arc" href="#path_arc">#</a> <i>path</i>.<b>arc</b>(<i>x</i>, <i>y</i>, <i>radius</i>, <i>startAngle</i>, <i>endAngle</i>[, <i>anticlockwise</i>])
+
+Draws a circular arc segment with the specified center ⟨*x*, *y*⟩, *radius*, *startAngle* and *endAngle*. If *anticlockwise* is true, the arc is drawn in the anticlockwise direction; otherwise, it is drawn in the clockwise direction. If the current point is not equal to the starting point of the arc, a straight line is drawn from the current point to the start of the arc. Equivalent to [*context*.arc](http://www.w3.org/TR/2dcontext/#dom-context-2d-arc) and uses SVG’s [elliptical arc curve commands](http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands).
+
+<a name="path_rect" href="#path_rect">#</a> <i>path</i>.<b>rect</b>(<i>x</i>, <i>y</i>, <i>w</i>, <i>h</i>)
+
+Creates a new subpath containing just the four points ⟨*x*, *y*⟩, ⟨*x* + *w*, *y*⟩, ⟨*x* + *w*, *y* + *h*⟩, ⟨*x*, *y* + *h*⟩, with those four points connected by straight lines, and then marks the subpath as closed. Equivalent to [*context*.rect](http://www.w3.org/TR/2dcontext/#dom-context-2d-rect) and uses SVG’s [“lineto” commands](http://www.w3.org/TR/SVG/paths.html#PathDataLinetoCommands).
+
+<a name="path_toString" href="#path_toString">#</a> <i>path</i>.<b>toString</b>()
+
+Returns the string representation of this *path* according to SVG’s [path data specification](http://www.w3.org/TR/SVG/paths.html#PathData).
+
+<a name="pathRound" href="#pathRound">#</a> d3.<b>pathRound</b>(*digits* = 3) · [Source](https://github.com/d3/d3-path/blob/master/src/path.js), [Examples](https://observablehq.com/@d3/d3-path)
+
+Like [d3.path](#path), except limits the digits after the decimal to the specified number of *digits*.
Index: node_modules/d3-path/dist/d3-path.js
===================================================================
--- node_modules/d3-path/dist/d3-path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-path/dist/d3-path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,169 @@
+// https://d3js.org/d3-path/ v3.1.0 Copyright 2015-2022 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+typeof define === 'function' && define.amd ? define(['exports'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
+})(this, (function (exports) { 'use strict';
+
+const pi = Math.PI,
+    tau = 2 * pi,
+    epsilon = 1e-6,
+    tauEpsilon = tau - epsilon;
+
+function append(strings) {
+  this._ += strings[0];
+  for (let i = 1, n = strings.length; i < n; ++i) {
+    this._ += arguments[i] + strings[i];
+  }
+}
+
+function appendRound(digits) {
+  let d = Math.floor(digits);
+  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);
+  if (d > 15) return append;
+  const k = 10 ** d;
+  return function(strings) {
+    this._ += strings[0];
+    for (let i = 1, n = strings.length; i < n; ++i) {
+      this._ += Math.round(arguments[i] * k) / k + strings[i];
+    }
+  };
+}
+
+class Path {
+  constructor(digits) {
+    this._x0 = this._y0 = // start of current subpath
+    this._x1 = this._y1 = null; // end of current subpath
+    this._ = "";
+    this._append = digits == null ? append : appendRound(digits);
+  }
+  moveTo(x, y) {
+    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;
+  }
+  closePath() {
+    if (this._x1 !== null) {
+      this._x1 = this._x0, this._y1 = this._y0;
+      this._append`Z`;
+    }
+  }
+  lineTo(x, y) {
+    this._append`L${this._x1 = +x},${this._y1 = +y}`;
+  }
+  quadraticCurveTo(x1, y1, x, y) {
+    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;
+  }
+  bezierCurveTo(x1, y1, x2, y2, x, y) {
+    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;
+  }
+  arcTo(x1, y1, x2, y2, r) {
+    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
+
+    // Is the radius negative? Error.
+    if (r < 0) throw new Error(`negative radius: ${r}`);
+
+    let x0 = this._x1,
+        y0 = this._y1,
+        x21 = x2 - x1,
+        y21 = y2 - y1,
+        x01 = x0 - x1,
+        y01 = y0 - y1,
+        l01_2 = x01 * x01 + y01 * y01;
+
+    // Is this path empty? Move to (x1,y1).
+    if (this._x1 === null) {
+      this._append`M${this._x1 = x1},${this._y1 = y1}`;
+    }
+
+    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
+    else if (!(l01_2 > epsilon));
+
+    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
+    // Equivalently, is (x1,y1) coincident with (x2,y2)?
+    // Or, is the radius zero? Line to (x1,y1).
+    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {
+      this._append`L${this._x1 = x1},${this._y1 = y1}`;
+    }
+
+    // Otherwise, draw an arc!
+    else {
+      let x20 = x2 - x0,
+          y20 = y2 - y0,
+          l21_2 = x21 * x21 + y21 * y21,
+          l20_2 = x20 * x20 + y20 * y20,
+          l21 = Math.sqrt(l21_2),
+          l01 = Math.sqrt(l01_2),
+          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
+          t01 = l / l01,
+          t21 = l / l21;
+
+      // If the start tangent is not coincident with (x0,y0), line to.
+      if (Math.abs(t01 - 1) > epsilon) {
+        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;
+      }
+
+      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;
+    }
+  }
+  arc(x, y, r, a0, a1, ccw) {
+    x = +x, y = +y, r = +r, ccw = !!ccw;
+
+    // Is the radius negative? Error.
+    if (r < 0) throw new Error(`negative radius: ${r}`);
+
+    let dx = r * Math.cos(a0),
+        dy = r * Math.sin(a0),
+        x0 = x + dx,
+        y0 = y + dy,
+        cw = 1 ^ ccw,
+        da = ccw ? a0 - a1 : a1 - a0;
+
+    // Is this path empty? Move to (x0,y0).
+    if (this._x1 === null) {
+      this._append`M${x0},${y0}`;
+    }
+
+    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
+    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {
+      this._append`L${x0},${y0}`;
+    }
+
+    // Is this arc empty? We’re done.
+    if (!r) return;
+
+    // Does the angle go the wrong way? Flip the direction.
+    if (da < 0) da = da % tau + tau;
+
+    // Is this a complete circle? Draw two arcs to complete the circle.
+    if (da > tauEpsilon) {
+      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;
+    }
+
+    // Is this arc non-empty? Draw an arc!
+    else if (da > epsilon) {
+      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;
+    }
+  }
+  rect(x, y, w, h) {
+    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;
+  }
+  toString() {
+    return this._;
+  }
+}
+
+function path() {
+  return new Path;
+}
+
+// Allow instanceof d3.path
+path.prototype = Path.prototype;
+
+function pathRound(digits = 3) {
+  return new Path(+digits);
+}
+
+exports.Path = Path;
+exports.path = path;
+exports.pathRound = pathRound;
+
+}));
Index: node_modules/d3-path/dist/d3-path.min.js
===================================================================
--- node_modules/d3-path/dist/d3-path.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-path/dist/d3-path.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-path/ v3.1.0 Copyright 2015-2022 Mike Bostock
+!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{})}(this,(function(t){"use strict";const i=Math.PI,s=2*i,h=1e-6,e=s-h;function n(t){this._+=t[0];for(let i=1,s=t.length;i<s;++i)this._+=arguments[i]+t[i]}class _{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?n:function(t){let i=Math.floor(t);if(!(i>=0))throw new Error(`invalid digits: ${t}`);if(i>15)return n;const s=10**i;return function(t){this._+=t[0];for(let i=1,h=t.length;i<h;++i)this._+=Math.round(arguments[i]*s)/s+t[i]}}(t)}moveTo(t,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+i}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,i){this._append`L${this._x1=+t},${this._y1=+i}`}quadraticCurveTo(t,i,s,h){this._append`Q${+t},${+i},${this._x1=+s},${this._y1=+h}`}bezierCurveTo(t,i,s,h,e,n){this._append`C${+t},${+i},${+s},${+h},${this._x1=+e},${this._y1=+n}`}arcTo(t,s,e,n,_){if(t=+t,s=+s,e=+e,n=+n,(_=+_)<0)throw new Error(`negative radius: ${_}`);let a=this._x1,$=this._y1,o=e-t,r=n-s,p=a-t,d=$-s,l=p*p+d*d;if(null===this._x1)this._append`M${this._x1=t},${this._y1=s}`;else if(l>h)if(Math.abs(d*o-r*p)>h&&_){let u=e-a,f=n-$,x=o*o+r*r,y=u*u+f*f,c=Math.sqrt(x),M=Math.sqrt(l),b=_*Math.tan((i-Math.acos((x+l-y)/(2*c*M)))/2),g=b/M,w=b/c;Math.abs(g-1)>h&&this._append`L${t+g*p},${s+g*d}`,this._append`A${_},${_},0,0,${+(d*u>p*f)},${this._x1=t+w*o},${this._y1=s+w*r}`}else this._append`L${this._x1=t},${this._y1=s}`;else;}arc(t,n,_,a,$,o){if(t=+t,n=+n,o=!!o,(_=+_)<0)throw new Error(`negative radius: ${_}`);let r=_*Math.cos(a),p=_*Math.sin(a),d=t+r,l=n+p,u=1^o,f=o?a-$:$-a;null===this._x1?this._append`M${d},${l}`:(Math.abs(this._x1-d)>h||Math.abs(this._y1-l)>h)&&this._append`L${d},${l}`,_&&(f<0&&(f=f%s+s),f>e?this._append`A${_},${_},0,1,${u},${t-r},${n-p}A${_},${_},0,1,${u},${this._x1=d},${this._y1=l}`:f>h&&this._append`A${_},${_},0,${+(f>=i)},${u},${this._x1=t+_*Math.cos($)},${this._y1=n+_*Math.sin($)}`)}rect(t,i,s,h){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+i}h${s=+s}v${+h}h${-s}Z`}toString(){return this._}}function a(){return new _}a.prototype=_.prototype,t.Path=_,t.path=a,t.pathRound=function(t=3){return new _(+t)}}));
Index: node_modules/d3-path/package.json
===================================================================
--- node_modules/d3-path/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-path/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+{
+  "name": "d3-path",
+  "version": "3.1.0",
+  "description": "Serialize Canvas path commands to SVG.",
+  "homepage": "https://d3js.org/d3-path/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-path.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "canvas",
+    "path",
+    "svg",
+    "graphics",
+    "CanvasRenderingContext2D",
+    "CanvasPathMethods",
+    "Path2D"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-path.min.js",
+  "unpkg": "dist/d3-path.min.js",
+  "exports": {
+    "umd": "./dist/d3-path.min.js",
+    "default": "./src/index.js"
+  },
+  "sideEffects": false,
+  "devDependencies": {
+    "eslint": "8",
+    "mocha": "10",
+    "rollup": "3",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-path/src/index.js
===================================================================
--- node_modules/d3-path/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-path/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {Path, path, pathRound} from "./path.js";
Index: node_modules/d3-path/src/path.js
===================================================================
--- node_modules/d3-path/src/path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-path/src/path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,156 @@
+const pi = Math.PI,
+    tau = 2 * pi,
+    epsilon = 1e-6,
+    tauEpsilon = tau - epsilon;
+
+function append(strings) {
+  this._ += strings[0];
+  for (let i = 1, n = strings.length; i < n; ++i) {
+    this._ += arguments[i] + strings[i];
+  }
+}
+
+function appendRound(digits) {
+  let d = Math.floor(digits);
+  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);
+  if (d > 15) return append;
+  const k = 10 ** d;
+  return function(strings) {
+    this._ += strings[0];
+    for (let i = 1, n = strings.length; i < n; ++i) {
+      this._ += Math.round(arguments[i] * k) / k + strings[i];
+    }
+  };
+}
+
+export class Path {
+  constructor(digits) {
+    this._x0 = this._y0 = // start of current subpath
+    this._x1 = this._y1 = null; // end of current subpath
+    this._ = "";
+    this._append = digits == null ? append : appendRound(digits);
+  }
+  moveTo(x, y) {
+    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;
+  }
+  closePath() {
+    if (this._x1 !== null) {
+      this._x1 = this._x0, this._y1 = this._y0;
+      this._append`Z`;
+    }
+  }
+  lineTo(x, y) {
+    this._append`L${this._x1 = +x},${this._y1 = +y}`;
+  }
+  quadraticCurveTo(x1, y1, x, y) {
+    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;
+  }
+  bezierCurveTo(x1, y1, x2, y2, x, y) {
+    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;
+  }
+  arcTo(x1, y1, x2, y2, r) {
+    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
+
+    // Is the radius negative? Error.
+    if (r < 0) throw new Error(`negative radius: ${r}`);
+
+    let x0 = this._x1,
+        y0 = this._y1,
+        x21 = x2 - x1,
+        y21 = y2 - y1,
+        x01 = x0 - x1,
+        y01 = y0 - y1,
+        l01_2 = x01 * x01 + y01 * y01;
+
+    // Is this path empty? Move to (x1,y1).
+    if (this._x1 === null) {
+      this._append`M${this._x1 = x1},${this._y1 = y1}`;
+    }
+
+    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
+    else if (!(l01_2 > epsilon));
+
+    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
+    // Equivalently, is (x1,y1) coincident with (x2,y2)?
+    // Or, is the radius zero? Line to (x1,y1).
+    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {
+      this._append`L${this._x1 = x1},${this._y1 = y1}`;
+    }
+
+    // Otherwise, draw an arc!
+    else {
+      let x20 = x2 - x0,
+          y20 = y2 - y0,
+          l21_2 = x21 * x21 + y21 * y21,
+          l20_2 = x20 * x20 + y20 * y20,
+          l21 = Math.sqrt(l21_2),
+          l01 = Math.sqrt(l01_2),
+          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
+          t01 = l / l01,
+          t21 = l / l21;
+
+      // If the start tangent is not coincident with (x0,y0), line to.
+      if (Math.abs(t01 - 1) > epsilon) {
+        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;
+      }
+
+      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;
+    }
+  }
+  arc(x, y, r, a0, a1, ccw) {
+    x = +x, y = +y, r = +r, ccw = !!ccw;
+
+    // Is the radius negative? Error.
+    if (r < 0) throw new Error(`negative radius: ${r}`);
+
+    let dx = r * Math.cos(a0),
+        dy = r * Math.sin(a0),
+        x0 = x + dx,
+        y0 = y + dy,
+        cw = 1 ^ ccw,
+        da = ccw ? a0 - a1 : a1 - a0;
+
+    // Is this path empty? Move to (x0,y0).
+    if (this._x1 === null) {
+      this._append`M${x0},${y0}`;
+    }
+
+    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
+    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {
+      this._append`L${x0},${y0}`;
+    }
+
+    // Is this arc empty? We’re done.
+    if (!r) return;
+
+    // Does the angle go the wrong way? Flip the direction.
+    if (da < 0) da = da % tau + tau;
+
+    // Is this a complete circle? Draw two arcs to complete the circle.
+    if (da > tauEpsilon) {
+      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;
+    }
+
+    // Is this arc non-empty? Draw an arc!
+    else if (da > epsilon) {
+      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;
+    }
+  }
+  rect(x, y, w, h) {
+    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;
+  }
+  toString() {
+    return this._;
+  }
+}
+
+export function path() {
+  return new Path;
+}
+
+// Allow instanceof d3.path
+path.prototype = Path.prototype;
+
+export function pathRound(digits = 3) {
+  return new Path(+digits);
+}
Index: node_modules/d3-scale/LICENSE
===================================================================
--- node_modules/d3-scale/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-scale/README.md
===================================================================
--- node_modules/d3-scale/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1003 @@
+# d3-scale
+
+Scales are a convenient abstraction for a fundamental task in visualization: mapping a dimension of abstract data to a visual representation. Although most often used for position-encoding quantitative data, such as mapping a measurement in meters to a position in pixels for dots in a scatterplot, scales can represent virtually any visual encoding, such as diverging colors, stroke widths, or symbol size. Scales can also be used with virtually any type of data, such as named categorical data or discrete data that requires sensible breaks.
+
+For [continuous](#continuous-scales) quantitative data, you typically want a [linear scale](#linear-scales). (For time series data, a [time scale](#time-scales).) If the distribution calls for it, consider transforming data using a [power](#power-scales) or [log](#log-scales) scale. A [quantize scale](#quantize-scales) may aid differentiation by rounding continuous data to a fixed set of discrete values; similarly, a [quantile scale](#quantile-scales) computes quantiles from a sample population, and a [threshold scale](#threshold-scales) allows you to specify arbitrary breaks in continuous data.
+
+For discrete ordinal (ordered) or categorical (unordered) data, an [ordinal scale](#ordinal-scales) specifies an explicit mapping from a set of data values to a corresponding set of visual attributes (such as colors). The related [band](#band-scales) and [point](#point-scales) scales are useful for position-encoding ordinal data, such as bars in a bar chart or dots in an categorical scatterplot.
+
+This repository does not provide color schemes; see [d3-scale-chromatic](https://github.com/d3/d3-scale-chromatic) for color schemes designed to work with d3-scale.
+
+Scales have no intrinsic visual representation. However, most scales can [generate](#continuous_ticks) and [format](#continuous_tickFormat) ticks for reference marks to aid in the construction of axes.
+
+For a longer introduction, see these recommended tutorials:
+
+* [Introducing d3-scale](https://medium.com/@mbostock/introducing-d3-scale-61980c51545f) by Mike Bostock
+
+* Chapter 7. Scales of [*Interactive Data Visualization for the Web*](http://alignedleft.com/work/d3-book) by Scott Murray
+
+* [d3: scales, and color.](https://jckr.github.io/blog/2011/08/11/d3-scales-and-color/) by Jérôme Cukier
+
+## Installing
+
+If you use npm, `npm install d3-scale`. You can also download the [latest release on GitHub](https://github.com/d3/d3-scale/releases/latest). For vanilla HTML in modern browsers, import d3-scale from Skypack:
+
+```html
+<script type="module">
+
+import {scaleLinear} from "https://cdn.skypack.dev/d3-scale@4";
+
+const x = scaleLinear();
+
+</script>
+```
+
+For legacy environments, you can load d3-scale’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-array@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-color@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-format@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-interpolate@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-time@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-time-format@4"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-scale@4"></script>
+<script>
+
+const x = d3.scaleLinear();
+
+</script>
+```
+
+(You can omit d3-time and d3-time-format if you’re not using [d3.scaleTime](#scaleTime) or [d3.scaleUtc](#scaleUtc).)
+
+## API Reference
+
+* [Continuous](#continuous-scales) ([Linear](#linear-scales), [Power](#power-scales), [Log](#log-scales), [Identity](#identity-scales), [Time](#time-scales), [Radial](#radial-scales))
+* [Sequential](#sequential-scales)
+* [Diverging](#diverging-scales)
+* [Quantize](#quantize-scales)
+* [Quantile](#quantile-scales)
+* [Threshold](#threshold-scales)
+* [Ordinal](#ordinal-scales) ([Band](#band-scales), [Point](#point-scales))
+
+### Continuous Scales
+
+Continuous scales map a continuous, quantitative input [domain](#continuous_domain) to a continuous output [range](#continuous_range). If the range is also numeric, the mapping may be [inverted](#continuous_invert). A continuous scale is not constructed directly; instead, try a [linear](#linear-scales), [power](#power-scales), [log](#log-scales), [identity](#identity-scales), [radial](#radial-scales), [time](#time-scales) or [sequential color](#sequential-scales) scale.
+
+<a name="_continuous" href="#_continuous">#</a> <i>continuous</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+Given a *value* from the [domain](#continuous_domain), returns the corresponding value from the [range](#continuous_range). If the given *value* is outside the domain, and [clamping](#continuous_clamp) is not enabled, the mapping may be extrapolated such that the returned value is outside the range. For example, to apply a position encoding:
+
+```js
+var x = d3.scaleLinear()
+    .domain([10, 130])
+    .range([0, 960]);
+
+x(20); // 80
+x(50); // 320
+```
+
+Or to apply a color encoding:
+
+```js
+var color = d3.scaleLinear()
+    .domain([10, 100])
+    .range(["brown", "steelblue"]);
+
+color(20); // "#9a3439"
+color(50); // "#7b5167"
+```
+
+Or, in shorthand:
+
+```js
+var x = d3.scaleLinear([10, 130], [0, 960]);
+var color = d3.scaleLinear([10, 100], ["brown", "steelblue"]);
+```
+
+<a name="continuous_invert" href="#continuous_invert">#</a> <i>continuous</i>.<b>invert</b>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+Given a *value* from the [range](#continuous_range), returns the corresponding value from the [domain](#continuous_domain). Inversion is useful for interaction, say to determine the data value corresponding to the position of the mouse. For example, to invert a position encoding:
+
+```js
+var x = d3.scaleLinear()
+    .domain([10, 130])
+    .range([0, 960]);
+
+x.invert(80); // 20
+x.invert(320); // 50
+```
+
+If the given *value* is outside the range, and [clamping](#continuous_clamp) is not enabled, the mapping may be extrapolated such that the returned value is outside the domain. This method is only supported if the range is numeric. If the range is not numeric, returns NaN.
+
+For a valid value *y* in the range, <i>continuous</i>(<i>continuous</i>.invert(<i>y</i>)) approximately equals *y*; similarly, for a valid value *x* in the domain, <i>continuous</i>.invert(<i>continuous</i>(<i>x</i>)) approximately equals *x*. The scale and its inverse may not be exact due to the limitations of floating point precision.
+
+<a name="continuous_domain" href="#continuous_domain">#</a> <i>continuous</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+If *domain* is specified, sets the scale’s domain to the specified array of numbers. The array must contain two or more elements. If the elements in the given array are not numbers, they will be coerced to numbers. If *domain* is not specified, returns a copy of the scale’s current domain.
+
+Although continuous scales typically have two values each in their domain and range, specifying more than two values produces a piecewise scale. For example, to create a [diverging color scale](#diverging-scales) that interpolates between white and red for negative values, and white and green for positive values, say:
+
+```js
+var color = d3.scaleLinear()
+    .domain([-1, 0, 1])
+    .range(["red", "white", "green"]);
+
+color(-0.5); // "rgb(255, 128, 128)"
+color(+0.5); // "rgb(128, 192, 128)"
+```
+
+Internally, a piecewise scale performs a [binary search](https://github.com/d3/d3-array/blob/master/README.md#bisect) for the range interpolator corresponding to the given domain value. Thus, the domain must be in ascending or descending order. If the domain and range have different lengths *N* and *M*, only the first *min(N,M)* elements in each are observed.
+
+<a name="continuous_range" href="#continuous_range">#</a> <i>continuous</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+If *range* is specified, sets the scale’s range to the specified array of values. The array must contain two or more elements. Unlike the [domain](#continuous_domain), elements in the given array need not be numbers; any value that is supported by the underlying [interpolator](#continuous_interpolate) will work, though note that numeric ranges are required for [invert](#continuous_invert). If *range* is not specified, returns a copy of the scale’s current range. See [*continuous*.interpolate](#continuous_interpolate) for more examples.
+
+<a name="continuous_rangeRound" href="#continuous_rangeRound">#</a> <i>continuous</i>.<b>rangeRound</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+Sets the scale’s [*range*](#continuous_range) to the specified array of values while also setting the scale’s [interpolator](#continuous_interpolate) to [interpolateRound](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolateRound). This is a convenience method equivalent to:
+
+```js
+continuous
+    .range(range)
+    .interpolate(d3.interpolateRound);
+```
+
+The rounding interpolator is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles. Note that this interpolator can only be used with numeric ranges.
+
+<a name="continuous_clamp" href="#continuous_clamp">#</a> <i>continuous</i>.<b>clamp</b>(<i>clamp</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+If *clamp* is specified, enables or disables clamping accordingly. If clamping is disabled and the scale is passed a value outside the [domain](#continuous_domain), the scale may return a value outside the [range](#continuous_range) through extrapolation. If clamping is enabled, the return value of the scale is always within the scale’s range. Clamping similarly applies to [*continuous*.invert](#continuous_invert). For example:
+
+```js
+var x = d3.scaleLinear()
+    .domain([10, 130])
+    .range([0, 960]);
+
+x(-10); // -160, outside range
+x.invert(-160); // -10, outside domain
+
+x.clamp(true);
+x(-10); // 0, clamped to range
+x.invert(-160); // 10, clamped to domain
+```
+
+If *clamp* is not specified, returns whether or not the scale currently clamps values to within the range.
+
+<a name="continuous_unknown" href="#continuous_unknown">#</a> <i>continuous</i>.<b>unknown</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+If *value* is specified, sets the output value of the scale for undefined (or NaN) input values and returns this scale. If *value* is not specified, returns the current unknown value, which defaults to undefined.
+
+<a name="continuous_interpolate" href="#continuous_interpolate">#</a> <i>continuous</i>.<b>interpolate</b>(<i>interpolate</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+If *interpolate* is specified, sets the scale’s [range](#continuous_range) interpolator factory. This interpolator factory is used to create interpolators for each adjacent pair of values from the range; these interpolators then map a normalized domain parameter *t* in [0, 1] to the corresponding value in the range. If *factory* is not specified, returns the scale’s current interpolator factory, which defaults to [d3.interpolate](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate). See [d3-interpolate](https://github.com/d3/d3-interpolate) for more interpolators.
+
+For example, consider a diverging color scale with three colors in the range:
+
+```js
+var color = d3.scaleLinear()
+    .domain([-100, 0, +100])
+    .range(["red", "white", "green"]);
+```
+
+Two interpolators are created internally by the scale, equivalent to:
+
+```js
+var i0 = d3.interpolate("red", "white"),
+    i1 = d3.interpolate("white", "green");
+```
+
+A common reason to specify a custom interpolator is to change the color space of interpolation. For example, to use [HCL](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolateHcl):
+
+```js
+var color = d3.scaleLinear()
+    .domain([10, 100])
+    .range(["brown", "steelblue"])
+    .interpolate(d3.interpolateHcl);
+```
+
+Or for [Cubehelix](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolateCubehelix) with a custom gamma:
+
+```js
+var color = d3.scaleLinear()
+    .domain([10, 100])
+    .range(["brown", "steelblue"])
+    .interpolate(d3.interpolateCubehelix.gamma(3));
+```
+
+Note: the [default interpolator](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate) **may reuse return values**. For example, if the range values are objects, then the value interpolator always returns the same object, modifying it in-place. If the scale is used to set an attribute or style, this is typically acceptable (and desirable for performance); however, if you need to store the scale’s return value, you must specify your own interpolator or make a copy as appropriate.
+
+<a name="continuous_ticks" href="#continuous_ticks">#</a> <i>continuous</i>.<b>ticks</b>([<i>count</i>])
+
+Returns approximately *count* representative values from the scale’s [domain](#continuous_domain). If *count* is not specified, it defaults to 10. The returned tick values are uniformly spaced, have human-readable values (such as multiples of powers of 10), and are guaranteed to be within the extent of the domain. Ticks are often used to display reference lines, or tick marks, in conjunction with the visualized data. The specified *count* is only a hint; the scale may return more or fewer values depending on the domain. See also d3-array’s [ticks](https://github.com/d3/d3-array/blob/master/README.md#ticks).
+
+<a name="continuous_tickFormat" href="#continuous_tickFormat">#</a> <i>continuous</i>.<b>tickFormat</b>([<i>count</i>[, <i>specifier</i>]]) · [Source](https://github.com/d3/d3-scale/blob/master/src/tickFormat.js), [Examples](https://observablehq.com/@d3/scale-ticks)
+
+Returns a [number format](https://github.com/d3/d3-format) function suitable for displaying a tick value, automatically computing the appropriate precision based on the fixed interval between tick values. The specified *count* should have the same value as the count that is used to generate the [tick values](#continuous_ticks).
+
+An optional *specifier* allows a [custom format](https://github.com/d3/d3-format/blob/master/README.md#locale_format) where the precision of the format is automatically set by the scale as appropriate for the tick interval. For example, to format percentage change, you might say:
+
+```js
+var x = d3.scaleLinear()
+    .domain([-1, 1])
+    .range([0, 960]);
+
+var ticks = x.ticks(5),
+    tickFormat = x.tickFormat(5, "+%");
+
+ticks.map(tickFormat); // ["-100%", "-50%", "+0%", "+50%", "+100%"]
+```
+
+If *specifier* uses the format type `s`, the scale will return a [SI-prefix format](https://github.com/d3/d3-format/blob/master/README.md#locale_formatPrefix) based on the largest value in the domain. If the *specifier* already specifies a precision, this method is equivalent to [*locale*.format](https://github.com/d3/d3-format/blob/master/README.md#locale_format).
+
+See also [d3.tickFormat](#tickFormat).
+
+<a name="continuous_nice" href="#continuous_nice">#</a> <i>continuous</i>.<b>nice</b>([<i>count</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/nice.js), [Examples](https://observablehq.com/@d3/d3-scalelinear)
+
+Extends the [domain](#continuous_domain) so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. An optional tick *count* argument allows greater control over the step size used to extend the bounds, guaranteeing that the returned [ticks](#continuous_ticks) will exactly cover the domain. Nicing is useful if the domain is computed from data, say using [extent](https://github.com/d3/d3-array/blob/master/README.md#extent), and may be irregular. For example, for a domain of [0.201479…, 0.996679…], a nice domain might be [0.2, 1.0]. If the domain has more than two values, nicing the domain only affects the first and last value. See also d3-array’s [tickStep](https://github.com/d3/d3-array/blob/master/README.md#tickStep).
+
+Nicing a scale only modifies the current domain; it does not automatically nice domains that are subsequently set using [*continuous*.domain](#continuous_domain). You must re-nice the scale after setting the new domain, if desired.
+
+<a name="continuous_copy" href="#continuous_copy">#</a> <i>continuous</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+
+<a name="tickFormat" href="#tickFormat">#</a> d3.<b>tickFormat</b>(<i>start</i>, <i>stop</i>, <i>count</i>[, <i>specifier</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/tickFormat.js), [Examples](https://observablehq.com/@d3/scale-ticks)
+
+Returns a [number format](https://github.com/d3/d3-format) function suitable for displaying a tick value, automatically computing the appropriate precision based on the fixed interval between tick values, as determined by [d3.tickStep](https://github.com/d3/d3-array/blob/master/README.md#tickStep).
+
+An optional *specifier* allows a [custom format](https://github.com/d3/d3-format/blob/master/README.md#locale_format) where the precision of the format is automatically set by the scale as appropriate for the tick interval. For example, to format percentage change, you might say:
+
+```js
+var tickFormat = d3.tickFormat(-1, 1, 5, "+%");
+
+tickFormat(-0.5); // "-50%"
+```
+
+If *specifier* uses the format type `s`, the scale will return a [SI-prefix format](https://github.com/d3/d3-format/blob/master/README.md#locale_formatPrefix) based on the larger absolute value of *start* and *stop*. If the *specifier* already specifies a precision, this method is equivalent to [*locale*.format](https://github.com/d3/d3-format/blob/master/README.md#locale_format).
+
+#### Linear Scales
+
+<a name="scaleLinear" href="#scaleLinear">#</a> d3.<b>scaleLinear</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/linear.js), [Examples](https://observablehq.com/@d3/d3-scalelinear)
+
+Constructs a new [continuous scale](#continuous-scales) with the specified [domain](#continuous_domain) and [range](#continuous_range), the [default](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate) [interpolator](#continuous_interpolate) and [clamping](#continuous_clamp) disabled. If either *domain* or *range* are not specified, each defaults to [0, 1]. Linear scales are a good default choice for continuous quantitative data because they preserve proportional differences. Each range value *y* can be expressed as a function of the domain value *x*: *y* = *mx* + *b*.
+
+#### Power Scales
+
+Power scales are similar to [linear scales](#linear-scales), except an exponential transform is applied to the input domain value before the output range value is computed. Each range value *y* can be expressed as a function of the domain value *x*: *y* = *mx^k* + *b*, where *k* is the [exponent](#pow_exponent) value. Power scales also support negative domain values, in which case the input value and the resulting output value are multiplied by -1.
+
+<a name="scalePow" href="#scalePow">#</a> d3.<b>scalePow</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+Constructs a new [continuous scale](#continuous-scales) with the specified [domain](#continuous_domain) and [range](#continuous_range), the [exponent](#pow_exponent) 1, the [default](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate) [interpolator](#continuous_interpolate) and [clamping](#continuous_clamp) disabled. If either *domain* or *range* are not specified, each defaults to [0, 1]. (Note that this is effectively a [linear](#linear-scales) scale until you set a different exponent.)
+
+<a name="_pow" href="#_pow">#</a> <i>pow</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*](#_continuous).
+
+<a name="pow_invert" href="#pow_invert">#</a> <i>pow</i>.<b>invert</b>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.invert](#continuous_invert).
+
+<a name="pow_exponent" href="#pow_exponent">#</a> <i>pow</i>.<b>exponent</b>([<i>exponent</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+If *exponent* is specified, sets the current exponent to the given numeric value. If *exponent* is not specified, returns the current exponent, which defaults to 1. (Note that this is effectively a [linear](#linear-scales) scale until you set a different exponent.)
+
+<a name="pow_domain" href="#pow_domain">#</a> <i>pow</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.domain](#continuous_domain).
+
+<a name="pow_range" href="#pow_range">#</a> <i>pow</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.range](#continuous_range).
+
+<a name="pow_rangeRound" href="#pow_rangeRound">#</a> <i>pow</i>.<b>rangeRound</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.rangeRound](#continuous_rangeRound).
+
+<a name="pow_clamp" href="#pow_clamp">#</a> <i>pow</i>.<b>clamp</b>(<i>clamp</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.clamp](#continuous_clamp).
+
+<a name="pow_interpolate" href="#pow_interpolate">#</a> <i>pow</i>.<b>interpolate</b>(<i>interpolate</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.interpolate](#continuous_interpolate).
+
+<a name="pow_ticks" href="#pow_ticks">#</a> <i>pow</i>.<b>ticks</b>([<i>count</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/scale-ticks)
+
+See [*continuous*.ticks](#continuous_ticks).
+
+<a name="pow_tickFormat" href="#pow_tickFormat">#</a> <i>pow</i>.<b>tickFormat</b>([<i>count</i>[, <i>specifier</i>]]) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/scale-ticks)
+
+See [*continuous*.tickFormat](#continuous_tickFormat).
+
+<a name="pow_nice" href="#pow_nice">#</a> <i>pow</i>.<b>nice</b>([<i>count</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.nice](#continuous_nice).
+
+<a name="pow_copy" href="#pow_copy">#</a> <i>pow</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.copy](#continuous_copy).
+
+<a name="scaleSqrt" href="#scaleSqrt">#</a> d3.<b>scaleSqrt</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/pow.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+Constructs a new [continuous](#continuous-scales) [power scale](#power-scales) with the specified [domain](#continuous_domain) and [range](#continuous_range), the [exponent](#pow_exponent) 0.5, the [default](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate) [interpolator](#continuous_interpolate) and [clamping](#continuous_clamp) disabled. If either *domain* or *range* are not specified, each defaults to [0, 1]. This is a convenience method equivalent to `d3.scalePow(…).exponent(0.5)`.
+
+#### Log Scales
+
+Log scales are similar to [linear scales](#linear-scales), except a logarithmic transform is applied to the input domain value before the output range value is computed. The mapping to the range value *y* can be expressed as a function of the domain value *x*: *y* = *m* log(<i>x</i>) + *b*.
+
+As log(0) = -∞, a log scale domain must be **strictly-positive or strictly-negative**; the domain must not include or cross zero. A log scale with a positive domain has a well-defined behavior for positive values, and a log scale with a negative domain has a well-defined behavior for negative values. (For a negative domain, input and output values are implicitly multiplied by -1.) The behavior of the scale is undefined if you pass a negative value to a log scale with a positive domain or vice versa.
+
+<a name="scaleLog" href="#scaleLog">#</a> d3.<b>scaleLog</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+Constructs a new [continuous scale](#continuous-scales) with the specified [domain](#log_domain) and [range](#log_range), the [base](#log_base) 10, the [default](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate) [interpolator](#log_interpolate) and [clamping](#log_clamp) disabled. If *domain* is not specified, it defaults to [1, 10]. If *range* is not specified, it defaults to [0, 1].
+
+<a name="_log" href="#_log">#</a> <i>log</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*](#_continuous).
+
+<a name="log_invert" href="#log_invert">#</a> <i>log</i>.<b>invert</b>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.invert](#continuous_invert).
+
+<a name="log_base" href="#log_base">#</a> <i>log</i>.<b>base</b>([<i>base</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+If *base* is specified, sets the base for this logarithmic scale to the specified value. If *base* is not specified, returns the current base, which defaults to 10.
+
+<a name="log_domain" href="#log_domain">#</a> <i>log</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.domain](#continuous_domain).
+
+<a name="log_range" href="#log_range">#</a> <i>log</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/continuous.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.range](#continuous_range).
+
+<a name="log_rangeRound" href="#log_rangeRound">#</a> <i>log</i>.<b>rangeRound</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.rangeRound](#continuous_rangeRound).
+
+<a name="log_clamp" href="#log_clamp">#</a> <i>log</i>.<b>clamp</b>(<i>clamp</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.clamp](#continuous_clamp).
+
+<a name="log_interpolate" href="#log_interpolate">#</a> <i>log</i>.<b>interpolate</b>(<i>interpolate</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.interpolate](#continuous_interpolate).
+
+<a name="log_ticks" href="#log_ticks">#</a> <i>log</i>.<b>ticks</b>([<i>count</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/scale-ticks)
+
+Like [*continuous*.ticks](#continuous_ticks), but customized for a log scale. If the [base](#log_base) is an integer, the returned ticks are uniformly spaced within each integer power of base; otherwise, one tick per power of base is returned. The returned ticks are guaranteed to be within the extent of the domain. If the orders of magnitude in the [domain](#log_domain) is greater than *count*, then at most one tick per power is returned. Otherwise, the tick values are unfiltered, but note that you can use [*log*.tickFormat](#log_tickFormat) to filter the display of tick labels. If *count* is not specified, it defaults to 10.
+
+<a name="log_tickFormat" href="#log_tickFormat">#</a> <i>log</i>.<b>tickFormat</b>([<i>count</i>[, <i>specifier</i>]]) · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/scale-ticks)
+
+Like [*continuous*.tickFormat](#continuous_tickFormat), but customized for a log scale. The specified *count* typically has the same value as the count that is used to generate the [tick values](#continuous_ticks). If there are too many ticks, the formatter may return the empty string for some of the tick labels; however, note that the ticks are still shown. To disable filtering, specify a *count* of Infinity. When specifying a count, you may also provide a format *specifier* or format function. For example, to get a tick formatter that will display 20 ticks of a currency, say `log.tickFormat(20, "$,f")`. If the specifier does not have a defined precision, the precision will be set automatically by the scale, returning the appropriate format. This provides a convenient way of specifying a format whose precision will be automatically set by the scale.
+
+<a name="log_nice" href="#log_nice">#</a> <i>log</i>.<b>nice</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/d3-scalelinear)
+
+Like [*continuous*.nice](#continuous_nice), except extends the domain to integer powers of [base](#log_base). For example, for a domain of [0.201479…, 0.996679…], and base 10, the nice domain is [0.1, 1]. If the domain has more than two values, nicing the domain only affects the first and last value.
+
+<a name="log_copy" href="#log_copy">#</a> <i>log</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/log.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+See [*continuous*.copy](#continuous_copy).
+
+#### Symlog Scales
+
+See [A bi-symmetric log transformation for wide-range data](https://www.researchgate.net/profile/John_Webber4/publication/233967063_A_bi-symmetric_log_transformation_for_wide-range_data/links/0fcfd50d791c85082e000000.pdf) by Webber for more.
+
+<a name="scaleSymlog" href="#scaleSymlog">#</a> d3.<b>scaleSymlog</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/symlog.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+Constructs a new [continuous scale](#continuous-scales) with the specified [domain](#continuous_domain) and [range](#continuous_range), the [constant](#symlog_constant) 1, the [default](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate) [interpolator](#continuous_interpolate) and [clamping](#continuous_clamp) disabled. If *domain* is not specified, it defaults to [0, 1]. If *range* is not specified, it defaults to [0, 1].
+
+<a name="symlog_constant" href="#symlog_constant">#</a> <i>symlog</i>.<b>constant</b>([<i>constant</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/symlog.js), [Examples](https://observablehq.com/@d3/continuous-scales)
+
+If *constant* is specified, sets the symlog constant to the specified number and returns this scale; otherwise returns the current value of the symlog constant, which defaults to 1. See “A bi-symmetric log transformation for wide-range data” by Webber for more.
+
+#### Identity Scales
+
+Identity scales are a special case of [linear scales](#linear-scales) where the domain and range are identical; the scale and its invert method are thus the identity function. These scales are occasionally useful when working with pixel coordinates, say in conjunction with an axis. Identity scales do not support [rangeRound](#continuous_rangeRound), [clamp](#continuous_clamp) or [interpolate](#continuous_interpolate).
+
+<a name="scaleIdentity" href="#scaleIdentity">#</a> d3.<b>scaleIdentity</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/identity.js), [Examples](https://observablehq.com/@d3/d3-scalelinear)
+
+Constructs a new identity scale with the specified [domain](#continuous_domain) and [range](#continuous_range). If *range* is not specified, it defaults to [0, 1].
+
+#### Radial Scales
+
+Radial scales are a variant of [linear scales](#linear-scales) where the range is internally squared so that an input value corresponds linearly to the squared output value. These scales are useful when you want the input value to correspond to the area of a graphical mark and the mark is specified by radius, as in a radial bar chart. Radial scales do not support [interpolate](#continuous_interpolate).
+
+<a name="scaleRadial" href="#scaleRadial">#</a> d3.<b>scaleRadial</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/radial.js), [Examples](https://observablehq.com/@d3/radial-stacked-bar-chart)
+
+Constructs a new radial scale with the specified [domain](#continuous_domain) and [range](#continuous_range). If *domain* or *range* is not specified, each defaults to [0, 1].
+
+#### Time Scales
+
+Time scales are a variant of [linear scales](#linear-scales) that have a temporal domain: domain values are coerced to [dates](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date) rather than numbers, and [invert](#continuous_invert) likewise returns a date. Time scales implement [ticks](#time_ticks) based on [calendar intervals](https://github.com/d3/d3-time), taking the pain out of generating axes for temporal domains.
+
+For example, to create a position encoding:
+
+```js
+var x = d3.scaleTime()
+    .domain([new Date(2000, 0, 1), new Date(2000, 0, 2)])
+    .range([0, 960]);
+
+x(new Date(2000, 0, 1,  5)); // 200
+x(new Date(2000, 0, 1, 16)); // 640
+x.invert(200); // Sat Jan 01 2000 05:00:00 GMT-0800 (PST)
+x.invert(640); // Sat Jan 01 2000 16:00:00 GMT-0800 (PST)
+```
+
+For a valid value *y* in the range, <i>time</i>(<i>time</i>.invert(<i>y</i>)) equals *y*; similarly, for a valid value *x* in the domain, <i>time</i>.invert(<i>time</i>(<i>x</i>)) equals *x*. The invert method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.
+
+<a name="scaleTime" href="#scaleTime">#</a> d3.<b>scaleTime</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+Constructs a new time scale with the specified [domain](#time_domain) and [range](#time_range), the [default](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate) [interpolator](#time_interpolate) and [clamping](#time_clamp) disabled. If *domain* is not specified, it defaults to [2000-01-01, 2000-01-02]. If *range* is not specified, it defaults to [0, 1].
+
+<a name="_time" href="#_time">#</a> <i>time</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+See [*continuous*](#_continuous).
+
+<a name="time_invert" href="#time_invert">#</a> <i>time</i>.<b>invert</b>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+See [*continuous*.invert](#continuous_invert).
+
+<a name="time_domain" href="#time_domain">#</a> <i>time</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+See [*continuous*.domain](#continuous_domain).
+
+<a name="time_range" href="#time_range">#</a> <i>time</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+See [*continuous*.range](#continuous_range).
+
+<a name="time_rangeRound" href="#time_rangeRound">#</a> <i>time</i>.<b>rangeRound</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+See [*continuous*.rangeRound](#continuous_rangeRound).
+
+<a name="time_clamp" href="#time_clamp">#</a> <i>time</i>.<b>clamp</b>(<i>clamp</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+See [*continuous*.clamp](#continuous_clamp).
+
+<a name="time_interpolate" href="#time_interpolate">#</a> <i>time</i>.<b>interpolate</b>(<i>interpolate</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+See [*continuous*.interpolate](#continuous_interpolate).
+
+<a name="time_ticks" href="#time_ticks">#</a> <i>time</i>.<b>ticks</b>([<i>count</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+<br><a name="time_ticks" href="#time_ticks">#</a> <i>time</i>.<b>ticks</b>([<i>interval</i>])
+
+Returns representative dates from the scale’s [domain](#time_domain). The returned tick values are uniformly-spaced (mostly), have sensible values (such as every day at midnight), and are guaranteed to be within the extent of the domain. Ticks are often used to display reference lines, or tick marks, in conjunction with the visualized data.
+
+An optional *count* may be specified to affect how many ticks are generated. If *count* is not specified, it defaults to 10. The specified *count* is only a hint; the scale may return more or fewer values depending on the domain. For example, to create ten default ticks, say:
+
+```js
+var x = d3.scaleTime();
+
+x.ticks(10);
+// [Sat Jan 01 2000 00:00:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 03:00:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 06:00:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 09:00:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 12:00:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 15:00:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 18:00:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 21:00:00 GMT-0800 (PST),
+//  Sun Jan 02 2000 00:00:00 GMT-0800 (PST)]
+```
+
+The following time intervals are considered for automatic ticks:
+
+* 1-, 5-, 15- and 30-second.
+* 1-, 5-, 15- and 30-minute.
+* 1-, 3-, 6- and 12-hour.
+* 1- and 2-day.
+* 1-week.
+* 1- and 3-month.
+* 1-year.
+
+In lieu of a *count*, a [time *interval*](https://github.com/d3/d3-time/blob/master/README.md#intervals) may be explicitly specified. To prune the generated ticks for a given time *interval*, use [*interval*.every](https://github.com/d3/d3-time/blob/master/README.md#interval_every). For example, to generate ticks at 15-[minute](https://github.com/d3/d3-time/blob/master/README.md#minute) intervals:
+
+```js
+var x = d3.scaleTime()
+    .domain([new Date(2000, 0, 1, 0), new Date(2000, 0, 1, 2)]);
+
+x.ticks(d3.timeMinute.every(15));
+// [Sat Jan 01 2000 00:00:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 00:15:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 00:30:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 00:45:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 01:00:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 01:15:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 01:30:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 01:45:00 GMT-0800 (PST),
+//  Sat Jan 01 2000 02:00:00 GMT-0800 (PST)]
+```
+
+Alternatively, pass a test function to [*interval*.filter](https://github.com/d3/d3-time/blob/master/README.md#interval_filter):
+
+```js
+x.ticks(d3.timeMinute.filter(function(d) {
+  return d.getMinutes() % 15 === 0;
+}));
+```
+
+Note: in some cases, such as with day ticks, specifying a *step* can result in irregular spacing of ticks because time intervals have varying length.
+
+<a name="time_tickFormat" href="#time_tickFormat">#</a> <i>time</i>.<b>tickFormat</b>([<i>count</i>[, <i>specifier</i>]]) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/scale-ticks)
+<br><a href="#time_tickFormat">#</a> <i>time</i>.<b>tickFormat</b>([<i>interval</i>[, <i>specifier</i>]])
+
+Returns a time format function suitable for displaying [tick](#time_ticks) values. The specified *count* or *interval* is currently ignored, but is accepted for consistency with other scales such as [*continuous*.tickFormat](#continuous_tickFormat). If a format *specifier* is specified, this method is equivalent to [format](https://github.com/d3/d3-time-format/blob/master/README.md#format). If *specifier* is not specified, the default time format is returned. The default multi-scale time format chooses a human-readable representation based on the specified date as follows:
+
+* `%Y` - for year boundaries, such as `2011`.
+* `%B` - for month boundaries, such as `February`.
+* `%b %d` - for week boundaries, such as `Feb 06`.
+* `%a %d` - for day boundaries, such as `Mon 07`.
+* `%I %p` - for hour boundaries, such as `01 AM`.
+* `%I:%M` - for minute boundaries, such as `01:23`.
+* `:%S` - for second boundaries, such as `:45`.
+* `.%L` - milliseconds for all other times, such as `.012`.
+
+Although somewhat unusual, this default behavior has the benefit of providing both local and global context: for example, formatting a sequence of ticks as [11 PM, Mon 07, 01 AM] reveals information about hours, dates, and day simultaneously, rather than just the hours [11 PM, 12 AM, 01 AM]. See [d3-time-format](https://github.com/d3/d3-time-format) if you’d like to roll your own conditional time format.
+
+<a name="time_nice" href="#time_nice">#</a> <i>time</i>.<b>nice</b>([<i>count</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+<br><a name="time_nice" href="#time_nice">#</a> <i>time</i>.<b>nice</b>([<i>interval</i>])
+
+Extends the [domain](#time_domain) so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. See [*continuous*.nice](#continuous_nice) for more.
+
+An optional tick *count* argument allows greater control over the step size used to extend the bounds, guaranteeing that the returned [ticks](#time_ticks) will exactly cover the domain. Alternatively, a [time *interval*](https://github.com/d3/d3-time/blob/master/README.md#intervals) may be specified to explicitly set the ticks. If an *interval* is specified, an optional *step* may also be specified to skip some ticks. For example, `time.nice(d3.timeSecond.every(10))` will extend the domain to an even ten seconds (0, 10, 20, <i>etc.</i>). See [*time*.ticks](#time_ticks) and [*interval*.every](https://github.com/d3/d3-time/blob/master/README.md#interval_every) for further detail.
+
+Nicing is useful if the domain is computed from data, say using [extent](https://github.com/d3/d3-array/blob/master/README.md#extent), and may be irregular. For example, for a domain of [2009-07-13T00:02, 2009-07-13T23:48], the nice domain is [2009-07-13, 2009-07-14]. If the domain has more than two values, nicing the domain only affects the first and last value.
+
+<a name="time_copy" href="#time_copy">#</a> <i>time</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/time.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+See [*continuous*.copy](#continuous_copy).
+
+<a name="scaleUtc" href="#scaleUtc">#</a> d3.<b>scaleUtc</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/utcTime.js), [Examples](https://observablehq.com/@d3/d3-scaletime)
+
+Equivalent to [scaleTime](#scaleTime), but the returned time scale operates in [Coordinated Universal Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) rather than local time.
+
+### Sequential Scales
+
+Sequential scales, like [diverging scales](#diverging-scales), are similar to [continuous scales](#continuous-scales) in that they map a continuous, numeric input domain to a continuous output range. However, unlike continuous scales, the input domain and output range of a sequential scale always has exactly two elements, and the output range is typically specified as an interpolator rather than an array of values. These scales do not expose [invert](#continuous_invert) and [interpolate](#continuous_interpolate) methods.
+
+<a name="scaleSequential" href="#scaleSequential">#</a> d3.<b>scaleSequential</b>([[<i>domain</i>, ]<i>interpolator</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+Constructs a new sequential scale with the specified [*domain*](#sequential_domain) and [*interpolator*](#sequential_interpolator) function or array. If *domain* is not specified, it defaults to [0, 1]. If *interpolator* is not specified, it defaults to the identity function. When the scale is [applied](#_sequential), the interpolator will be invoked with a value typically in the range [0, 1], where 0 represents the minimum value and 1 represents the maximum value. For example, to implement the ill-advised [HSL](https://github.com/d3/d3-color/blob/master/README.md#hsl) rainbow scale:
+
+```js
+var rainbow = d3.scaleSequential(function(t) {
+  return d3.hsl(t * 360, 1, 0.5) + "";
+});
+```
+
+A more aesthetically-pleasing and perceptually-effective cyclical hue encoding is to use [d3.interpolateRainbow](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateRainbow):
+
+```js
+var rainbow = d3.scaleSequential(d3.interpolateRainbow);
+```
+
+If *interpolator* is an array, it represents the scale’s two-element output range and is converted to an interpolator function using [d3.interpolate](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate).
+
+<a name="_sequential" href="#_sequential">#</a> <i>sequential</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+See [*continuous*](#_continuous).
+
+<a name="sequential_domain" href="#sequential_domain">#</a> <i>sequential</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+See [*continuous*.domain](#continuous_domain). Note that a sequential scale’s domain must be numeric and must contain exactly two values.
+
+<a name="sequential_clamp" href="#sequential_clamp">#</a> <i>sequential</i>.<b>clamp</b>([<i>clamp</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+See [*continuous*.clamp](#continuous_clamp).
+
+<a name="sequential_interpolator" href="#sequential_interpolator">#</a> <i>sequential</i>.<b>interpolator</b>([<i>interpolator</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+If *interpolator* is specified, sets the scale’s interpolator to the specified function. If *interpolator* is not specified, returns the scale’s current interpolator.
+
+<a name="sequential_range" href="#sequential_range">#</a> <i>sequential</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+See [*continuous*.range](#continuous_range). If *range* is specified, the given two-element array is converted to an interpolator function using [d3.interpolate](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate).
+
+<a name="sequential_rangeRound" href="#sequential_rangeRound">#</a> <i>sequential</i>.<b>rangeRound</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+See [*continuous*.rangeRound](#continuous_rangeRound). If *range* is specified, implicitly uses [d3.interpolateRound](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolateRound) as the interpolator.
+
+<a name="sequential_copy" href="#sequential_copy">#</a> <i>sequential</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+See [*continuous*.copy](#continuous_copy).
+
+<a name="scaleSequentialLog" href="#scaleSequentialLog">#</a> d3.<b>scaleSequentialLog</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+A [sequential scale](#sequential-scales) with a logarithmic transform, analogous to a [log scale](#log-scales).
+
+<a name="scaleSequentialPow" href="#scaleSequentialPow">#</a> d3.<b>scaleSequentialPow</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+A [sequential scale](#sequential-scales) with an exponential transform, analogous to a [power scale](#pow-scales).
+
+<a name="scaleSequentialSqrt" href="#scaleSequentialSqrt">#</a> d3.<b>scaleSequentialSqrt</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+A [sequential scale](#sequential-scales) with a square-root transform, analogous to a [d3.scaleSqrt](#scaleSqrt).
+
+<a name="scaleSequentialSymlog" href="#scaleSequentialSymlog">#</a> d3.<b>scaleSequentialSymlog</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequential.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+A [sequential scale](#sequential-scales) with a symmetric logarithmic transform, analogous to a [symlog scale](#symlog-scales).
+
+<a name="scaleSequentialQuantile" href="#scaleSequentialQuantile">#</a> d3.<b>scaleSequentialQuantile</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequentialQuantile.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+A [sequential scale](#sequential-scales) using a *p*-quantile transform, analogous to a [quantile scale](#quantile-scales).
+
+<a name="sequentialQuantile_quantiles" href="#sequentialQuantile_quantiles">#</a> <i>sequentialQuantile</i>.<b>quantiles</b>(<i>n</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/sequentialQuantile.js), [Examples](https://observablehq.com/@d3/sequential-scales)
+
+Returns an array of *n* + 1 quantiles. For example, if *n* = 4, returns an array of five numbers: the minimum value, the first quartile, the median, the third quartile, and the maximum.
+
+### Diverging Scales
+
+Diverging scales, like [sequential scales](#sequential-scales), are similar to [continuous scales](#continuous-scales) in that they map a continuous, numeric input domain to a continuous output range. However, unlike continuous scales, the input domain and output range of a diverging scale always has exactly three elements, and the output range is typically specified as an interpolator rather than an array of values. These scales do not expose [invert](#continuous_invert) and [interpolate](#continuous_interpolate) methods.
+
+<a name="scaleDiverging" href="#scaleDiverging">#</a> d3.<b>scaleDiverging</b>([[<i>domain</i>, ]<i>interpolator</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+Constructs a new diverging scale with the specified [*domain*](#diverging_domain) and [*interpolator*](#diverging_interpolator) function or array. If *domain* is not specified, it defaults to [0, 0.5, 1]. If *interpolator* is not specified, it defaults to the identity function. When the scale is [applied](#_diverging), the interpolator will be invoked with a value typically in the range [0, 1], where 0 represents the extreme negative value, 0.5 represents the neutral value, and 1 represents the extreme positive value. For example, using [d3.interpolateSpectral](https://github.com/d3/d3-scale-chromatic/blob/master/README.md#interpolateSpectral):
+
+```js
+var spectral = d3.scaleDiverging(d3.interpolateSpectral);
+```
+
+If *interpolator* is an array, it represents the scale’s three-element output range and is converted to an interpolator function using [d3.interpolate](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate) and [d3.piecewise](https://github.com/d3/d3-interpolate/blob/master/README.md#piecewise).
+
+<a name="_diverging" href="#_diverging">#</a> <i>diverging</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+See [*continuous*](#_continuous).
+
+<a name="diverging_domain" href="#diverging_domain">#</a> <i>diverging</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+See [*continuous*.domain](#continuous_domain). Note that a diverging scale’s domain must be numeric and must contain exactly three values. The default domain is [0, 0.5, 1].
+
+<a name="diverging_clamp" href="#diverging_clamp">#</a> <i>diverging</i>.<b>clamp</b>([<i>clamp</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+See [*continuous*.clamp](#continuous_clamp).
+
+<a name="diverging_interpolator" href="#diverging_interpolator">#</a> <i>diverging</i>.<b>interpolator</b>([<i>interpolator</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+If *interpolator* is specified, sets the scale’s interpolator to the specified function. If *interpolator* is not specified, returns the scale’s current interpolator.
+
+<a name="diverging_range" href="#diverging_range">#</a> <i>diverging</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+See [*continuous*.range](#continuous_range). If *range* is specified, the given three-element array is converted to an interpolator function using [d3.interpolate](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolate) and [d3.piecewise](https://github.com/d3/d3-interpolate/blob/master/README.md#piecewise).
+
+<a name="diverging_rangeRound" href="#diverging_rangeRound">#</a> <i>diverging</i>.<b>rangeRound</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+See [*continuous*.range](#continuous_rangeRound). If *range* is specified, implicitly uses [d3.interpolateRound](https://github.com/d3/d3-interpolate/blob/master/README.md#interpolateRound) as the interpolator.
+
+<a name="diverging_copy" href="#diverging_copy">#</a> <i>diverging</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+See [*continuous*.copy](#continuous_copy).
+
+<a name="diverging_unknown" href="#diverging_unknown">#</a> <i>diverging</i>.<b>unknown</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+See [*continuous*.unknown](#continuous_unknown).
+
+<a name="scaleDivergingLog" href="#scaleDivergingLog">#</a> d3.<b>scaleDivergingLog</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+A [diverging scale](#diverging-scales) with a logarithmic transform, analogous to a [log scale](#log-scales).
+
+<a name="scaleDivergingPow" href="#scaleDivergingPow">#</a> d3.<b>scaleDivergingPow</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+A [diverging scale](#diverging-scales) with an exponential transform, analogous to a [power scale](#pow-scales).
+
+<a name="scaleDivergingSqrt" href="#scaleDivergingSqrt">#</a> d3.<b>scaleDivergingSqrt</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+A [diverging scale](#diverging-scales) with a square-root transform, analogous to a [d3.scaleSqrt](#scaleSqrt).
+
+<a name="scaleDivergingSymlog" href="#scaleDivergingSymlog">#</a> d3.<b>scaleDivergingSymlog</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/diverging.js), [Examples](https://observablehq.com/@d3/diverging-scales)
+
+A [diverging scale](#diverging-scales) with a symmetric logarithmic transform, analogous to a [symlog scale](#symlog-scales).
+
+### Quantize Scales
+
+Quantize scales are similar to [linear scales](#linear-scales), except they use a discrete rather than continuous range. The continuous input domain is divided into uniform segments based on the number of values in (*i.e.*, the cardinality of) the output range. Each range value *y* can be expressed as a quantized linear function of the domain value *x*: *y* = *m round(x)* + *b*. See [this choropleth](https://observablehq.com/@d3/choropleth) for an example.
+
+<a name="scaleQuantize" href="#scaleQuantize">#</a> d3.<b>scaleQuantize</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Constructs a new quantize scale with the specified [*domain*](#quantize_domain) and [*range*](#quantize_range). If either *domain* or *range* is not specified, each defaults to [0, 1]. Thus, the default quantize scale is equivalent to the [Math.round](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/round) function.
+
+<a name="_quantize" href="#_quantize">#</a> <i>quantize</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Given a *value* in the input [domain](#quantize_domain), returns the corresponding value in the output [range](#quantize_range). For example, to apply a color encoding:
+
+```js
+var color = d3.scaleQuantize()
+    .domain([0, 1])
+    .range(["brown", "steelblue"]);
+
+color(0.49); // "brown"
+color(0.51); // "steelblue"
+```
+
+Or dividing the domain into three equally-sized parts with different range values to compute an appropriate stroke width:
+
+```js
+var width = d3.scaleQuantize()
+    .domain([10, 100])
+    .range([1, 2, 4]);
+
+width(20); // 1
+width(50); // 2
+width(80); // 4
+```
+
+<a name="quantize_invertExtent" href="#quantize_invertExtent">#</a> <i>quantize</i>.<b>invertExtent</b>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Returns the extent of values in the [domain](#quantize_domain) [<i>x0</i>, <i>x1</i>] for the corresponding *value* in the [range](#quantize_range): the inverse of [*quantize*](#_quantize). This method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.
+
+```js
+var width = d3.scaleQuantize()
+    .domain([10, 100])
+    .range([1, 2, 4]);
+
+width.invertExtent(2); // [40, 70]
+```
+
+<a name="quantize_domain" href="#quantize_domain">#</a> <i>quantize</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+If *domain* is specified, sets the scale’s domain to the specified two-element array of numbers. If the elements in the given array are not numbers, they will be coerced to numbers. The numbers must be in ascending order or the behavior of the scale is undefined. If *domain* is not specified, returns the scale’s current domain.
+
+<a name="quantize_range" href="#quantize_range">#</a> <i>quantize</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+If *range* is specified, sets the scale’s range to the specified array of values. The array may contain any number of discrete values. The elements in the given array need not be numbers; any value or type will work. If *range* is not specified, returns the scale’s current range.
+
+<a name="quantize_ticks" href="#quantize_ticks">#</a> <i>quantize</i>.<b>ticks</b>([<i>count</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/scale-ticks)
+
+Equivalent to [*continuous*.ticks](#continuous_ticks).
+
+<a name="quantize_tickFormat" href="#quantize_tickFormat">#</a> <i>quantize</i>.<b>tickFormat</b>([<i>count</i>[, <i>specifier</i>]]) · [Source](https://github.com/d3/d3-scale/blob/master/src/linear.js), [Examples](https://observablehq.com/@d3/scale-ticks)
+
+Equivalent to [*continuous*.tickFormat](#continuous_tickFormat).
+
+<a name="quantize_nice" href="#quantize_nice">#</a> <i>quantize</i>.<b>nice</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Equivalent to [*continuous*.nice](#continuous_nice).
+
+<a name="quantize_thresholds" href="#quantize_thresholds">#</a> <i>quantize</i>.<b>thresholds</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Returns the array of computed thresholds within the [domain](#quantize_domain).
+
+<a name="quantize_copy" href="#quantize_copy">#</a> <i>quantize</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/quantize.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+
+### Quantile Scales
+
+Quantile scales map a sampled input domain to a discrete range. The domain is considered continuous and thus the scale will accept any reasonable input value; however, the domain is specified as a discrete set of sample values. The number of values in (the cardinality of) the output range determines the number of quantiles that will be computed from the domain. To compute the quantiles, the domain is sorted, and treated as a [population of discrete values](https://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population); see d3-array’s [quantile](https://github.com/d3/d3-array/blob/master/README.md#quantile). See [this quantile choropleth](https://observablehq.com/@d3/quantile-choropleth) for an example.
+
+<a name="scaleQuantile" href="#scaleQuantile">#</a> d3.<b>scaleQuantile</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantile.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Constructs a new quantile scale with the specified [*domain*](#quantile_domain) and [*range*](#quantile_range). If either *domain* or *range* is not specified, each defaults to the empty array. The quantile scale is invalid until both a domain and range are specified.
+
+<a name="_quantile" href="#_quantile">#</a> <i>quantile</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantile.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Given a *value* in the input [domain](#quantile_domain), returns the corresponding value in the output [range](#quantile_range).
+
+<a name="quantile_invertExtent" href="#quantile_invertExtent">#</a> <i>quantile</i>.<b>invertExtent</b>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantile.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Returns the extent of values in the [domain](#quantile_domain) [<i>x0</i>, <i>x1</i>] for the corresponding *value* in the [range](#quantile_range): the inverse of [*quantile*](#_quantile). This method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse.
+
+<a name="quantile_domain" href="#quantile_domain">#</a> <i>quantile</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantile.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+If *domain* is specified, sets the domain of the quantile scale to the specified set of discrete numeric values. The array must not be empty, and must contain at least one numeric value; NaN, null and undefined values are ignored and not considered part of the sample population. If the elements in the given array are not numbers, they will be coerced to numbers. A copy of the input array is sorted and stored internally. If *domain* is not specified, returns the scale’s current domain.
+
+<a name="quantile_range" href="#quantile_range">#</a> <i>quantile</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/quantile.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+If *range* is specified, sets the discrete values in the range. The array must not be empty, and may contain any type of value. The number of values in (the cardinality, or length, of) the *range* array determines the number of quantiles that are computed. For example, to compute quartiles, *range* must be an array of four elements such as [0, 1, 2, 3]. If *range* is not specified, returns the current range.
+
+<a name="quantile_quantiles" href="#quantile_quantiles">#</a> <i>quantile</i>.<b>quantiles</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/quantile.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Returns the quantile thresholds. If the [range](#quantile_range) contains *n* discrete values, the returned array will contain *n* - 1 thresholds. Values less than the first threshold are considered in the first quantile; values greater than or equal to the first threshold but less than the second threshold are in the second quantile, and so on. Internally, the thresholds array is used with [bisect](https://github.com/d3/d3-array/blob/master/README.md#bisect) to find the output quantile associated with the given input value.
+
+<a name="quantile_copy" href="#quantile_copy">#</a> <i>quantile</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/quantile.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+
+### Threshold Scales
+
+Threshold scales are similar to [quantize scales](#quantize-scales), except they allow you to map arbitrary subsets of the domain to discrete values in the range. The input domain is still continuous, and divided into slices based on a set of threshold values. See [this choropleth](https://observablehq.com/@d3/threshold-choropleth) for an example.
+
+<a name="scaleThreshold" href="#scaleThreshold">#</a> d3.<b>scaleThreshold</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/threshold.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Constructs a new threshold scale with the specified [*domain*](#threshold_domain) and [*range*](#threshold_range). If *domain* is not specified, it defaults to [0.5]. If *range* is not specified, it defaults to [0, 1]. Thus, the default threshold scale is equivalent to the [Math.round](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/round) function for numbers; for example threshold(0.49) returns 0, and threshold(0.51) returns 1.
+
+<a name="_threshold" href="#_threshold">#</a> <i>threshold</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/threshold.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Given a *value* in the input [domain](#threshold_domain), returns the corresponding value in the output [range](#threshold_range). For example:
+
+```js
+var color = d3.scaleThreshold()
+    .domain([0, 1])
+    .range(["red", "white", "green"]);
+
+color(-1);   // "red"
+color(0);    // "white"
+color(0.5);  // "white"
+color(1);    // "green"
+color(1000); // "green"
+```
+
+<a name="threshold_invertExtent" href="#threshold_invertExtent">#</a> <i>threshold</i>.<b>invertExtent</b>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/threshold.js), [Examples](https://observablehq.com/@d3/choropleth)
+
+Returns the extent of values in the [domain](#threshold_domain) [<i>x0</i>, <i>x1</i>] for the corresponding *value* in the [range](#threshold_range), representing the inverse mapping from range to domain. This method is useful for interaction, say to determine the value in the domain that corresponds to the pixel location under the mouse. For example:
+
+```js
+var color = d3.scaleThreshold()
+    .domain([0, 1])
+    .range(["red", "white", "green"]);
+
+color.invertExtent("red"); // [undefined, 0]
+color.invertExtent("white"); // [0, 1]
+color.invertExtent("green"); // [1, undefined]
+```
+
+<a name="threshold_domain" href="#threshold_domain">#</a> <i>threshold</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/threshold.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+If *domain* is specified, sets the scale’s domain to the specified array of values. The values must be in ascending order or the behavior of the scale is undefined. The values are typically numbers, but any naturally ordered values (such as strings) will work; a threshold scale can be used to encode any type that is ordered. If the number of values in the scale’s range is N+1, the number of values in the scale’s domain must be N. If there are fewer than N elements in the domain, the additional values in the range are ignored. If there are more than N elements in the domain, the scale may return undefined for some inputs. If *domain* is not specified, returns the scale’s current domain.
+
+<a name="threshold_range" href="#threshold_range">#</a> <i>threshold</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/threshold.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+If *range* is specified, sets the scale’s range to the specified array of values. If the number of values in the scale’s domain is N, the number of values in the scale’s range must be N+1. If there are fewer than N+1 elements in the range, the scale may return undefined for some inputs. If there are more than N+1 elements in the range, the additional values are ignored. The elements in the given array need not be numbers; any value or type will work. If *range* is not specified, returns the scale’s current range.
+
+<a name="threshold_copy" href="#threshold_copy">#</a> <i>threshold</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/threshold.js), [Examples](https://observablehq.com/@d3/quantile-quantize-and-threshold-scales)
+
+Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+
+### Ordinal Scales
+
+Unlike [continuous scales](#continuous-scales), ordinal scales have a discrete domain and range. For example, an ordinal scale might map a set of named categories to a set of colors, or determine the horizontal positions of columns in a column chart.
+
+<a name="scaleOrdinal" href="#scaleOrdinal">#</a> d3.<b>scaleOrdinal</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/ordinal.js), [Examples](https://observablehq.com/@d3/d3-scaleordinal)
+
+Constructs a new ordinal scale with the specified [*domain*](#ordinal_domain) and [*range*](#ordinal_range). If *domain* is not specified, it defaults to the empty array. If *range* is not specified, it defaults to the empty array; an ordinal scale always returns undefined until a non-empty range is defined.
+
+<a name="_ordinal" href="#_ordinal">#</a> <i>ordinal</i>(<i>value</i>) · [Source](https://github.com/d3/d3-scale/blob/master/src/ordinal.js), [Examples](https://observablehq.com/@d3/d3-scaleordinal)
+
+Given a *value* in the input [domain](#ordinal_domain), returns the corresponding value in the output [range](#ordinal_range). If the given *value* is not in the scale’s [domain](#ordinal_domain), returns the [unknown](#ordinal_unknown); or, if the unknown value is [implicit](#scaleImplicit) (the default), then the *value* is implicitly added to the domain and the next-available value in the range is assigned to *value*, such that this and subsequent invocations of the scale given the same input *value* return the same output value.
+
+<a name="ordinal_domain" href="#ordinal_domain">#</a> <i>ordinal</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/ordinal.js), [Examples](https://observablehq.com/@d3/d3-scaleordinal)
+
+If *domain* is specified, sets the domain to the specified array of values. The first element in *domain* will be mapped to the first element in the range, the second domain value to the second range value, and so on. Domain values are stored internally in an [InternMap](https://github.com/mbostock/internmap) from primitive value to index; the resulting index is then used to retrieve a value from the range. Thus, an ordinal scale’s values must be coercible to a primitive value, and the primitive domain value uniquely identifies the corresponding range value. If *domain* is not specified, this method returns the current domain.
+
+Setting the domain on an ordinal scale is optional if the [unknown value](#ordinal_unknown) is [implicit](#scaleImplicit) (the default). In this case, the domain will be inferred implicitly from usage by assigning each unique value passed to the scale a new value from the range. Note that an explicit domain is recommended to ensure deterministic behavior, as inferring the domain from usage will be dependent on ordering.
+
+<a name="ordinal_range" href="#ordinal_range">#</a> <i>ordinal</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/ordinal.js), [Examples](https://observablehq.com/@d3/d3-scaleordinal)
+
+If *range* is specified, sets the range of the ordinal scale to the specified array of values. The first element in the domain will be mapped to the first element in *range*, the second domain value to the second range value, and so on. If there are fewer elements in the range than in the domain, the scale will reuse values from the start of the range. If *range* is not specified, this method returns the current range.
+
+<a name="ordinal_unknown" href="#ordinal_unknown">#</a> <i>ordinal</i>.<b>unknown</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/ordinal.js), [Examples](https://observablehq.com/@d3/d3-scaleordinal)
+
+If *value* is specified, sets the output value of the scale for unknown input values and returns this scale. If *value* is not specified, returns the current unknown value, which defaults to [implicit](#scaleImplicit). The implicit value enables implicit domain construction; see [*ordinal*.domain](#ordinal_domain).
+
+<a name="ordinal_copy" href="#ordinal_copy">#</a> <i>ordinal</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/ordinal.js), [Examples](https://observablehq.com/@d3/d3-scaleordinal)
+
+Returns an exact copy of this ordinal scale. Changes to this scale will not affect the returned scale, and vice versa.
+
+<a name="scaleImplicit" href="#scaleImplicit">#</a> d3.<b>scaleImplicit</b> · [Source](https://github.com/d3/d3-scale/blob/master/src/ordinal.js), [Examples](https://observablehq.com/@d3/d3-scaleordinal)
+
+A special value for [*ordinal*.unknown](#ordinal_unknown) that enables implicit domain construction: unknown values are implicitly added to the domain.
+
+#### Band Scales
+
+Band scales are like [ordinal scales](#ordinal-scales) except the output range is continuous and numeric. Discrete output values are automatically computed by the scale by dividing the continuous range into uniform bands. Band scales are typically used for bar charts with an ordinal or categorical dimension. The [unknown value](#ordinal_unknown) of a band scale is effectively undefined: they do not allow implicit domain construction.
+
+<img src="https://raw.githubusercontent.com/d3/d3-scale/master/img/band.png" width="751" height="238" alt="band">
+
+<a name="scaleBand" href="#scaleBand">#</a> d3.<b>scaleBand</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+Constructs a new band scale with the specified [*domain*](#band_domain) and [*range*](#band_range), no [padding](#band_padding), no [rounding](#band_round) and center [alignment](#band_align). If *domain* is not specified, it defaults to the empty domain. If *range* is not specified, it defaults to the unit range [0, 1].
+
+<a name="_band" href="#_band">#</a> <i>band</i>(*value*) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+Given a *value* in the input [domain](#band_domain), returns the start of the corresponding band derived from the output [range](#band_range). If the given *value* is not in the scale’s domain, returns undefined.
+
+<a name="band_domain" href="#band_domain">#</a> <i>band</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+If *domain* is specified, sets the domain to the specified array of values. The first element in *domain* will be mapped to the first band, the second domain value to the second band, and so on. Domain values are stored internally in an [InternMap](https://github.com/mbostock/internmap) from primitive value to index; the resulting index is then used to determine the band. Thus, a band scale’s values must be coercible to a primitive value, and the primitive domain value uniquely identifies the corresponding band. If *domain* is not specified, this method returns the current domain.
+
+<a name="band_range" href="#band_range">#</a> <i>band</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+If *range* is specified, sets the scale’s range to the specified two-element array of numbers. If the elements in the given array are not numbers, they will be coerced to numbers. If *range* is not specified, returns the scale’s current range, which defaults to [0, 1].
+
+<a name="band_rangeRound" href="#band_rangeRound">#</a> <i>band</i>.<b>rangeRound</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+Sets the scale’s [*range*](#band_range) to the specified two-element array of numbers while also enabling [rounding](#band_round). This is a convenience method equivalent to:
+
+```js
+band
+    .range(range)
+    .round(true);
+```
+
+Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles.
+
+<a name="band_round" href="#band_round">#</a> <i>band</i>.<b>round</b>([<i>round</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+If *round* is specified, enables or disables rounding accordingly. If rounding is enabled, the start and stop of each band will be integers. Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles. Note that if the width of the domain is not a multiple of the cardinality of the range, there may be leftover unused space, even without padding! Use [*band*.align](#band_align) to specify how the leftover space is distributed.
+
+<a name="band_paddingInner" href="#band_paddingInner">#</a> <i>band</i>.<b>paddingInner</b>([<i>padding</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+If *padding* is specified, sets the inner padding to the specified number which must be less than or equal to 1. If *padding* is not specified, returns the current inner padding which defaults to 0. The inner padding specifies the proportion of the range that is reserved for blank space between bands; a value of 0 means no blank space between bands, and a value of 1 means a [bandwidth](#band_bandwidth) of zero.
+
+<a name="band_paddingOuter" href="#band_paddingOuter">#</a> <i>band</i>.<b>paddingOuter</b>([<i>padding</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+If *padding* is specified, sets the outer padding to the specified number which is typically in the range [0, 1]. If *padding* is not specified, returns the current outer padding which defaults to 0. The outer padding specifies the amount of blank space, in terms of multiples of the [step](#band_step), to reserve before the first band and after the last band.
+
+<a name="band_padding" href="#band_padding">#</a> <i>band</i>.<b>padding</b>([<i>padding</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+A convenience method for setting the [inner](#band_paddingInner) and [outer](#band_paddingOuter) padding to the same *padding* value. If *padding* is not specified, returns the inner padding.
+
+<a name="band_align" href="#band_align">#</a> <i>band</i>.<b>align</b>([<i>align</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+If *align* is specified, sets the alignment to the specified value which must be in the range [0, 1]. If *align* is not specified, returns the current alignment which defaults to 0.5. The alignment specifies how outer padding is distributed in the range. A value of 0.5 indicates that the outer padding should be equally distributed before the first band and after the last band; *i.e.*, the bands should be centered within the range. A value of 0 or 1 may be used to shift the bands to one side, say to position them adjacent to an axis. For more, [see this explainer](https://observablehq.com/@d3/band-align).
+
+<a name="band_bandwidth" href="#band_bandwidth">#</a> <i>band</i>.<b>bandwidth</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+Returns the width of each band.
+
+<a name="band_step" href="#band_step">#</a> <i>band</i>.<b>step</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+Returns the distance between the starts of adjacent bands.
+
+<a name="band_copy" href="#band_copy">#</a> <i>band</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scaleband)
+
+Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
+
+#### Point Scales
+
+Point scales are a variant of [band scales](#band-scales) with the bandwidth fixed to zero. Point scales are typically used for scatterplots with an ordinal or categorical dimension. The [unknown value](#ordinal_unknown) of a point scale is always undefined: they do not allow implicit domain construction.
+
+<img src="https://raw.githubusercontent.com/d3/d3-scale/master/img/point.png" width="648" height="155" alt="point">
+
+<a name="scalePoint" href="#scalePoint">#</a> d3.<b>scalePoint</b>([[<i>domain</i>, ]<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+Constructs a new point scale with the specified [*domain*](#point_domain) and [*range*](#point_range), no [padding](#point_padding), no [rounding](#point_round) and center [alignment](#point_align). If *domain* is not specified, it defaults to the empty domain. If *range* is not specified, it defaults to the unit range [0, 1].
+
+<a name="_point" href="#_point">#</a> <i>point</i>(*value*) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+Given a *value* in the input [domain](#point_domain), returns the corresponding point derived from the output [range](#point_range). If the given *value* is not in the scale’s domain, returns undefined.
+
+<a name="point_domain" href="#point_domain">#</a> <i>point</i>.<b>domain</b>([<i>domain</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+If *domain* is specified, sets the domain to the specified array of values. The first element in *domain* will be mapped to the first point, the second domain value to the second point, and so on. Domain values are stored internally in an [InternMap](https://github.com/mbostock/internmap) from primitive value to index; the resulting index is then used to determine the point. Thus, a point scale’s values must be coercible to a primitive value, and the primitive domain value uniquely identifies the corresponding point. If *domain* is not specified, this method returns the current domain.
+
+<a name="point_range" href="#point_range">#</a> <i>point</i>.<b>range</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+If *range* is specified, sets the scale’s range to the specified two-element array of numbers. If the elements in the given array are not numbers, they will be coerced to numbers. If *range* is not specified, returns the scale’s current range, which defaults to [0, 1].
+
+<a name="point_rangeRound" href="#point_rangeRound">#</a> <i>point</i>.<b>rangeRound</b>([<i>range</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+Sets the scale’s [*range*](#point_range) to the specified two-element array of numbers while also enabling [rounding](#point_round). This is a convenience method equivalent to:
+
+```js
+point
+    .range(range)
+    .round(true);
+```
+
+Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles.
+
+<a name="point_round" href="#point_round">#</a> <i>point</i>.<b>round</b>([<i>round</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+If *round* is specified, enables or disables rounding accordingly. If rounding is enabled, the position of each point will be integers. Rounding is sometimes useful for avoiding antialiasing artifacts, though also consider the [shape-rendering](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering) “crispEdges” styles. Note that if the width of the domain is not a multiple of the cardinality of the range, there may be leftover unused space, even without padding! Use [*point*.align](#point_align) to specify how the leftover space is distributed.
+
+<a name="point_padding" href="#point_padding">#</a> <i>point</i>.<b>padding</b>([<i>padding</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+If *padding* is specified, sets the outer padding to the specified number which is typically in the range [0, 1]. If *padding* is not specified, returns the current outer padding which defaults to 0. The outer padding specifies the amount of blank space, in terms of multiples of the [step](#band_step), to reserve before the first point and after the last point. Equivalent to [*band*.paddingOuter](#band_paddingOuter).
+
+<a name="point_align" href="#point_align">#</a> <i>point</i>.<b>align</b>([<i>align</i>]) · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+If *align* is specified, sets the alignment to the specified value which must be in the range [0, 1]. If *align* is not specified, returns the current alignment which defaults to 0.5. The alignment specifies how any leftover unused space in the range is distributed. A value of 0.5 indicates that the leftover space should be equally distributed before the first point and after the last point; *i.e.*, the points should be centered within the range. A value of 0 or 1 may be used to shift the points to one side, say to position them adjacent to an axis.
+
+<a name="point_bandwidth" href="#point_bandwidth">#</a> <i>point</i>.<b>bandwidth</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+Returns zero.
+
+<a name="point_step" href="#point_step">#</a> <i>point</i>.<b>step</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+Returns the distance between the starts of adjacent points.
+
+<a name="point_copy" href="#point_copy">#</a> <i>point</i>.<b>copy</b>() · [Source](https://github.com/d3/d3-scale/blob/master/src/band.js), [Examples](https://observablehq.com/@d3/d3-scalepoint)
+
+Returns an exact copy of this scale. Changes to this scale will not affect the returned scale, and vice versa.
Index: node_modules/d3-scale/dist/d3-scale.js
===================================================================
--- node_modules/d3-scale/dist/d3-scale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/dist/d3-scale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1196 @@
+// https://d3js.org/d3-scale/ v4.0.2 Copyright 2010-2021 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array'), require('d3-interpolate'), require('d3-format'), require('d3-time'), require('d3-time-format')) :
+typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-interpolate', 'd3-format', 'd3-time', 'd3-time-format'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}, global.d3, global.d3, global.d3, global.d3, global.d3));
+})(this, (function (exports, d3Array, d3Interpolate, d3Format, d3Time, d3TimeFormat) { 'use strict';
+
+function initRange(domain, range) {
+  switch (arguments.length) {
+    case 0: break;
+    case 1: this.range(domain); break;
+    default: this.range(range).domain(domain); break;
+  }
+  return this;
+}
+
+function initInterpolator(domain, interpolator) {
+  switch (arguments.length) {
+    case 0: break;
+    case 1: {
+      if (typeof domain === "function") this.interpolator(domain);
+      else this.range(domain);
+      break;
+    }
+    default: {
+      this.domain(domain);
+      if (typeof interpolator === "function") this.interpolator(interpolator);
+      else this.range(interpolator);
+      break;
+    }
+  }
+  return this;
+}
+
+const implicit = Symbol("implicit");
+
+function ordinal() {
+  var index = new d3Array.InternMap(),
+      domain = [],
+      range = [],
+      unknown = implicit;
+
+  function scale(d) {
+    let i = index.get(d);
+    if (i === undefined) {
+      if (unknown !== implicit) return unknown;
+      index.set(d, i = domain.push(d) - 1);
+    }
+    return range[i % range.length];
+  }
+
+  scale.domain = function(_) {
+    if (!arguments.length) return domain.slice();
+    domain = [], index = new d3Array.InternMap();
+    for (const value of _) {
+      if (index.has(value)) continue;
+      index.set(value, domain.push(value) - 1);
+    }
+    return scale;
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range = Array.from(_), scale) : range.slice();
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.copy = function() {
+    return ordinal(domain, range).unknown(unknown);
+  };
+
+  initRange.apply(scale, arguments);
+
+  return scale;
+}
+
+function band() {
+  var scale = ordinal().unknown(undefined),
+      domain = scale.domain,
+      ordinalRange = scale.range,
+      r0 = 0,
+      r1 = 1,
+      step,
+      bandwidth,
+      round = false,
+      paddingInner = 0,
+      paddingOuter = 0,
+      align = 0.5;
+
+  delete scale.unknown;
+
+  function rescale() {
+    var n = domain().length,
+        reverse = r1 < r0,
+        start = reverse ? r1 : r0,
+        stop = reverse ? r0 : r1;
+    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
+    if (round) step = Math.floor(step);
+    start += (stop - start - step * (n - paddingInner)) * align;
+    bandwidth = step * (1 - paddingInner);
+    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
+    var values = d3Array.range(n).map(function(i) { return start + step * i; });
+    return ordinalRange(reverse ? values.reverse() : values);
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain(_), rescale()) : domain();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];
+  };
+
+  scale.rangeRound = function(_) {
+    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();
+  };
+
+  scale.bandwidth = function() {
+    return bandwidth;
+  };
+
+  scale.step = function() {
+    return step;
+  };
+
+  scale.round = function(_) {
+    return arguments.length ? (round = !!_, rescale()) : round;
+  };
+
+  scale.padding = function(_) {
+    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
+  };
+
+  scale.paddingInner = function(_) {
+    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
+  };
+
+  scale.paddingOuter = function(_) {
+    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
+  };
+
+  scale.align = function(_) {
+    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
+  };
+
+  scale.copy = function() {
+    return band(domain(), [r0, r1])
+        .round(round)
+        .paddingInner(paddingInner)
+        .paddingOuter(paddingOuter)
+        .align(align);
+  };
+
+  return initRange.apply(rescale(), arguments);
+}
+
+function pointish(scale) {
+  var copy = scale.copy;
+
+  scale.padding = scale.paddingOuter;
+  delete scale.paddingInner;
+  delete scale.paddingOuter;
+
+  scale.copy = function() {
+    return pointish(copy());
+  };
+
+  return scale;
+}
+
+function point() {
+  return pointish(band.apply(null, arguments).paddingInner(1));
+}
+
+function constants(x) {
+  return function() {
+    return x;
+  };
+}
+
+function number$1(x) {
+  return +x;
+}
+
+var unit = [0, 1];
+
+function identity$1(x) {
+  return x;
+}
+
+function normalize(a, b) {
+  return (b -= (a = +a))
+      ? function(x) { return (x - a) / b; }
+      : constants(isNaN(b) ? NaN : 0.5);
+}
+
+function clamper(a, b) {
+  var t;
+  if (a > b) t = a, a = b, b = t;
+  return function(x) { return Math.max(a, Math.min(b, x)); };
+}
+
+// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
+// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
+function bimap(domain, range, interpolate) {
+  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
+  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);
+  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);
+  return function(x) { return r0(d0(x)); };
+}
+
+function polymap(domain, range, interpolate) {
+  var j = Math.min(domain.length, range.length) - 1,
+      d = new Array(j),
+      r = new Array(j),
+      i = -1;
+
+  // Reverse descending domains.
+  if (domain[j] < domain[0]) {
+    domain = domain.slice().reverse();
+    range = range.slice().reverse();
+  }
+
+  while (++i < j) {
+    d[i] = normalize(domain[i], domain[i + 1]);
+    r[i] = interpolate(range[i], range[i + 1]);
+  }
+
+  return function(x) {
+    var i = d3Array.bisect(domain, x, 1, j) - 1;
+    return r[i](d[i](x));
+  };
+}
+
+function copy$1(source, target) {
+  return target
+      .domain(source.domain())
+      .range(source.range())
+      .interpolate(source.interpolate())
+      .clamp(source.clamp())
+      .unknown(source.unknown());
+}
+
+function transformer$2() {
+  var domain = unit,
+      range = unit,
+      interpolate = d3Interpolate.interpolate,
+      transform,
+      untransform,
+      unknown,
+      clamp = identity$1,
+      piecewise,
+      output,
+      input;
+
+  function rescale() {
+    var n = Math.min(domain.length, range.length);
+    if (clamp !== identity$1) clamp = clamper(domain[0], domain[n - 1]);
+    piecewise = n > 2 ? polymap : bimap;
+    output = input = null;
+    return scale;
+  }
+
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));
+  }
+
+  scale.invert = function(y) {
+    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3Interpolate.interpolateNumber)))(y)));
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain = Array.from(_, number$1), rescale()) : domain.slice();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();
+  };
+
+  scale.rangeRound = function(_) {
+    return range = Array.from(_), interpolate = d3Interpolate.interpolateRound, rescale();
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (clamp = _ ? true : identity$1, rescale()) : clamp !== identity$1;
+  };
+
+  scale.interpolate = function(_) {
+    return arguments.length ? (interpolate = _, rescale()) : interpolate;
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  return function(t, u) {
+    transform = t, untransform = u;
+    return rescale();
+  };
+}
+
+function continuous() {
+  return transformer$2()(identity$1, identity$1);
+}
+
+function tickFormat(start, stop, count, specifier) {
+  var step = d3Array.tickStep(start, stop, count),
+      precision;
+  specifier = d3Format.formatSpecifier(specifier == null ? ",f" : specifier);
+  switch (specifier.type) {
+    case "s": {
+      var value = Math.max(Math.abs(start), Math.abs(stop));
+      if (specifier.precision == null && !isNaN(precision = d3Format.precisionPrefix(step, value))) specifier.precision = precision;
+      return d3Format.formatPrefix(specifier, value);
+    }
+    case "":
+    case "e":
+    case "g":
+    case "p":
+    case "r": {
+      if (specifier.precision == null && !isNaN(precision = d3Format.precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
+      break;
+    }
+    case "f":
+    case "%": {
+      if (specifier.precision == null && !isNaN(precision = d3Format.precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
+      break;
+    }
+  }
+  return d3Format.format(specifier);
+}
+
+function linearish(scale) {
+  var domain = scale.domain;
+
+  scale.ticks = function(count) {
+    var d = domain();
+    return d3Array.ticks(d[0], d[d.length - 1], count == null ? 10 : count);
+  };
+
+  scale.tickFormat = function(count, specifier) {
+    var d = domain();
+    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
+  };
+
+  scale.nice = function(count) {
+    if (count == null) count = 10;
+
+    var d = domain();
+    var i0 = 0;
+    var i1 = d.length - 1;
+    var start = d[i0];
+    var stop = d[i1];
+    var prestep;
+    var step;
+    var maxIter = 10;
+
+    if (stop < start) {
+      step = start, start = stop, stop = step;
+      step = i0, i0 = i1, i1 = step;
+    }
+    
+    while (maxIter-- > 0) {
+      step = d3Array.tickIncrement(start, stop, count);
+      if (step === prestep) {
+        d[i0] = start;
+        d[i1] = stop;
+        return domain(d);
+      } else if (step > 0) {
+        start = Math.floor(start / step) * step;
+        stop = Math.ceil(stop / step) * step;
+      } else if (step < 0) {
+        start = Math.ceil(start * step) / step;
+        stop = Math.floor(stop * step) / step;
+      } else {
+        break;
+      }
+      prestep = step;
+    }
+
+    return scale;
+  };
+
+  return scale;
+}
+
+function linear() {
+  var scale = continuous();
+
+  scale.copy = function() {
+    return copy$1(scale, linear());
+  };
+
+  initRange.apply(scale, arguments);
+
+  return linearish(scale);
+}
+
+function identity(domain) {
+  var unknown;
+
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : x;
+  }
+
+  scale.invert = scale;
+
+  scale.domain = scale.range = function(_) {
+    return arguments.length ? (domain = Array.from(_, number$1), scale) : domain.slice();
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.copy = function() {
+    return identity(domain).unknown(unknown);
+  };
+
+  domain = arguments.length ? Array.from(domain, number$1) : [0, 1];
+
+  return linearish(scale);
+}
+
+function nice(domain, interval) {
+  domain = domain.slice();
+
+  var i0 = 0,
+      i1 = domain.length - 1,
+      x0 = domain[i0],
+      x1 = domain[i1],
+      t;
+
+  if (x1 < x0) {
+    t = i0, i0 = i1, i1 = t;
+    t = x0, x0 = x1, x1 = t;
+  }
+
+  domain[i0] = interval.floor(x0);
+  domain[i1] = interval.ceil(x1);
+  return domain;
+}
+
+function transformLog(x) {
+  return Math.log(x);
+}
+
+function transformExp(x) {
+  return Math.exp(x);
+}
+
+function transformLogn(x) {
+  return -Math.log(-x);
+}
+
+function transformExpn(x) {
+  return -Math.exp(-x);
+}
+
+function pow10(x) {
+  return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
+}
+
+function powp(base) {
+  return base === 10 ? pow10
+      : base === Math.E ? Math.exp
+      : x => Math.pow(base, x);
+}
+
+function logp(base) {
+  return base === Math.E ? Math.log
+      : base === 10 && Math.log10
+      || base === 2 && Math.log2
+      || (base = Math.log(base), x => Math.log(x) / base);
+}
+
+function reflect(f) {
+  return (x, k) => -f(-x, k);
+}
+
+function loggish(transform) {
+  const scale = transform(transformLog, transformExp);
+  const domain = scale.domain;
+  let base = 10;
+  let logs;
+  let pows;
+
+  function rescale() {
+    logs = logp(base), pows = powp(base);
+    if (domain()[0] < 0) {
+      logs = reflect(logs), pows = reflect(pows);
+      transform(transformLogn, transformExpn);
+    } else {
+      transform(transformLog, transformExp);
+    }
+    return scale;
+  }
+
+  scale.base = function(_) {
+    return arguments.length ? (base = +_, rescale()) : base;
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain(_), rescale()) : domain();
+  };
+
+  scale.ticks = count => {
+    const d = domain();
+    let u = d[0];
+    let v = d[d.length - 1];
+    const r = v < u;
+
+    if (r) ([u, v] = [v, u]);
+
+    let i = logs(u);
+    let j = logs(v);
+    let k;
+    let t;
+    const n = count == null ? 10 : +count;
+    let z = [];
+
+    if (!(base % 1) && j - i < n) {
+      i = Math.floor(i), j = Math.ceil(j);
+      if (u > 0) for (; i <= j; ++i) {
+        for (k = 1; k < base; ++k) {
+          t = i < 0 ? k / pows(-i) : k * pows(i);
+          if (t < u) continue;
+          if (t > v) break;
+          z.push(t);
+        }
+      } else for (; i <= j; ++i) {
+        for (k = base - 1; k >= 1; --k) {
+          t = i > 0 ? k / pows(-i) : k * pows(i);
+          if (t < u) continue;
+          if (t > v) break;
+          z.push(t);
+        }
+      }
+      if (z.length * 2 < n) z = d3Array.ticks(u, v, n);
+    } else {
+      z = d3Array.ticks(i, j, Math.min(j - i, n)).map(pows);
+    }
+    return r ? z.reverse() : z;
+  };
+
+  scale.tickFormat = (count, specifier) => {
+    if (count == null) count = 10;
+    if (specifier == null) specifier = base === 10 ? "s" : ",";
+    if (typeof specifier !== "function") {
+      if (!(base % 1) && (specifier = d3Format.formatSpecifier(specifier)).precision == null) specifier.trim = true;
+      specifier = d3Format.format(specifier);
+    }
+    if (count === Infinity) return specifier;
+    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
+    return d => {
+      let i = d / pows(Math.round(logs(d)));
+      if (i * base < base - 0.5) i *= base;
+      return i <= k ? specifier(d) : "";
+    };
+  };
+
+  scale.nice = () => {
+    return domain(nice(domain(), {
+      floor: x => pows(Math.floor(logs(x))),
+      ceil: x => pows(Math.ceil(logs(x)))
+    }));
+  };
+
+  return scale;
+}
+
+function log() {
+  const scale = loggish(transformer$2()).domain([1, 10]);
+  scale.copy = () => copy$1(scale, log()).base(scale.base());
+  initRange.apply(scale, arguments);
+  return scale;
+}
+
+function transformSymlog(c) {
+  return function(x) {
+    return Math.sign(x) * Math.log1p(Math.abs(x / c));
+  };
+}
+
+function transformSymexp(c) {
+  return function(x) {
+    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;
+  };
+}
+
+function symlogish(transform) {
+  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));
+
+  scale.constant = function(_) {
+    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;
+  };
+
+  return linearish(scale);
+}
+
+function symlog() {
+  var scale = symlogish(transformer$2());
+
+  scale.copy = function() {
+    return copy$1(scale, symlog()).constant(scale.constant());
+  };
+
+  return initRange.apply(scale, arguments);
+}
+
+function transformPow(exponent) {
+  return function(x) {
+    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
+  };
+}
+
+function transformSqrt(x) {
+  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);
+}
+
+function transformSquare(x) {
+  return x < 0 ? -x * x : x * x;
+}
+
+function powish(transform) {
+  var scale = transform(identity$1, identity$1),
+      exponent = 1;
+
+  function rescale() {
+    return exponent === 1 ? transform(identity$1, identity$1)
+        : exponent === 0.5 ? transform(transformSqrt, transformSquare)
+        : transform(transformPow(exponent), transformPow(1 / exponent));
+  }
+
+  scale.exponent = function(_) {
+    return arguments.length ? (exponent = +_, rescale()) : exponent;
+  };
+
+  return linearish(scale);
+}
+
+function pow() {
+  var scale = powish(transformer$2());
+
+  scale.copy = function() {
+    return copy$1(scale, pow()).exponent(scale.exponent());
+  };
+
+  initRange.apply(scale, arguments);
+
+  return scale;
+}
+
+function sqrt() {
+  return pow.apply(null, arguments).exponent(0.5);
+}
+
+function square(x) {
+  return Math.sign(x) * x * x;
+}
+
+function unsquare(x) {
+  return Math.sign(x) * Math.sqrt(Math.abs(x));
+}
+
+function radial() {
+  var squared = continuous(),
+      range = [0, 1],
+      round = false,
+      unknown;
+
+  function scale(x) {
+    var y = unsquare(squared(x));
+    return isNaN(y) ? unknown : round ? Math.round(y) : y;
+  }
+
+  scale.invert = function(y) {
+    return squared.invert(square(y));
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? (squared.domain(_), scale) : squared.domain();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (squared.range((range = Array.from(_, number$1)).map(square)), scale) : range.slice();
+  };
+
+  scale.rangeRound = function(_) {
+    return scale.range(_).round(true);
+  };
+
+  scale.round = function(_) {
+    return arguments.length ? (round = !!_, scale) : round;
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.copy = function() {
+    return radial(squared.domain(), range)
+        .round(round)
+        .clamp(squared.clamp())
+        .unknown(unknown);
+  };
+
+  initRange.apply(scale, arguments);
+
+  return linearish(scale);
+}
+
+function quantile() {
+  var domain = [],
+      range = [],
+      thresholds = [],
+      unknown;
+
+  function rescale() {
+    var i = 0, n = Math.max(1, range.length);
+    thresholds = new Array(n - 1);
+    while (++i < n) thresholds[i - 1] = d3Array.quantileSorted(domain, i / n);
+    return scale;
+  }
+
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : range[d3Array.bisect(thresholds, x)];
+  }
+
+  scale.invertExtent = function(y) {
+    var i = range.indexOf(y);
+    return i < 0 ? [NaN, NaN] : [
+      i > 0 ? thresholds[i - 1] : domain[0],
+      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
+    ];
+  };
+
+  scale.domain = function(_) {
+    if (!arguments.length) return domain.slice();
+    domain = [];
+    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);
+    domain.sort(d3Array.ascending);
+    return rescale();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.quantiles = function() {
+    return thresholds.slice();
+  };
+
+  scale.copy = function() {
+    return quantile()
+        .domain(domain)
+        .range(range)
+        .unknown(unknown);
+  };
+
+  return initRange.apply(scale, arguments);
+}
+
+function quantize() {
+  var x0 = 0,
+      x1 = 1,
+      n = 1,
+      domain = [0.5],
+      range = [0, 1],
+      unknown;
+
+  function scale(x) {
+    return x != null && x <= x ? range[d3Array.bisect(domain, x, 0, n)] : unknown;
+  }
+
+  function rescale() {
+    var i = -1;
+    domain = new Array(n);
+    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
+    return scale;
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();
+  };
+
+  scale.invertExtent = function(y) {
+    var i = range.indexOf(y);
+    return i < 0 ? [NaN, NaN]
+        : i < 1 ? [x0, domain[0]]
+        : i >= n ? [domain[n - 1], x1]
+        : [domain[i - 1], domain[i]];
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : scale;
+  };
+
+  scale.thresholds = function() {
+    return domain.slice();
+  };
+
+  scale.copy = function() {
+    return quantize()
+        .domain([x0, x1])
+        .range(range)
+        .unknown(unknown);
+  };
+
+  return initRange.apply(linearish(scale), arguments);
+}
+
+function threshold() {
+  var domain = [0.5],
+      range = [0, 1],
+      unknown,
+      n = 1;
+
+  function scale(x) {
+    return x != null && x <= x ? range[d3Array.bisect(domain, x, 0, n)] : unknown;
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
+  };
+
+  scale.invertExtent = function(y) {
+    var i = range.indexOf(y);
+    return [domain[i - 1], domain[i]];
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.copy = function() {
+    return threshold()
+        .domain(domain)
+        .range(range)
+        .unknown(unknown);
+  };
+
+  return initRange.apply(scale, arguments);
+}
+
+function date(t) {
+  return new Date(t);
+}
+
+function number(t) {
+  return t instanceof Date ? +t : +new Date(+t);
+}
+
+function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {
+  var scale = continuous(),
+      invert = scale.invert,
+      domain = scale.domain;
+
+  var formatMillisecond = format(".%L"),
+      formatSecond = format(":%S"),
+      formatMinute = format("%I:%M"),
+      formatHour = format("%I %p"),
+      formatDay = format("%a %d"),
+      formatWeek = format("%b %d"),
+      formatMonth = format("%B"),
+      formatYear = format("%Y");
+
+  function tickFormat(date) {
+    return (second(date) < date ? formatMillisecond
+        : minute(date) < date ? formatSecond
+        : hour(date) < date ? formatMinute
+        : day(date) < date ? formatHour
+        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
+        : year(date) < date ? formatMonth
+        : formatYear)(date);
+  }
+
+  scale.invert = function(y) {
+    return new Date(invert(y));
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);
+  };
+
+  scale.ticks = function(interval) {
+    var d = domain();
+    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);
+  };
+
+  scale.tickFormat = function(count, specifier) {
+    return specifier == null ? tickFormat : format(specifier);
+  };
+
+  scale.nice = function(interval) {
+    var d = domain();
+    if (!interval || typeof interval.range !== "function") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);
+    return interval ? domain(nice(d, interval)) : scale;
+  };
+
+  scale.copy = function() {
+    return copy$1(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));
+  };
+
+  return scale;
+}
+
+function time() {
+  return initRange.apply(calendar(d3Time.timeTicks, d3Time.timeTickInterval, d3Time.timeYear, d3Time.timeMonth, d3Time.timeWeek, d3Time.timeDay, d3Time.timeHour, d3Time.timeMinute, d3Time.timeSecond, d3TimeFormat.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
+}
+
+function utcTime() {
+  return initRange.apply(calendar(d3Time.utcTicks, d3Time.utcTickInterval, d3Time.utcYear, d3Time.utcMonth, d3Time.utcWeek, d3Time.utcDay, d3Time.utcHour, d3Time.utcMinute, d3Time.utcSecond, d3TimeFormat.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);
+}
+
+function transformer$1() {
+  var x0 = 0,
+      x1 = 1,
+      t0,
+      t1,
+      k10,
+      transform,
+      interpolator = identity$1,
+      clamp = false,
+      unknown;
+
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (clamp = !!_, scale) : clamp;
+  };
+
+  scale.interpolator = function(_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+
+  function range(interpolate) {
+    return function(_) {
+      var r0, r1;
+      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];
+    };
+  }
+
+  scale.range = range(d3Interpolate.interpolate);
+
+  scale.rangeRound = range(d3Interpolate.interpolateRound);
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  return function(t) {
+    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);
+    return scale;
+  };
+}
+
+function copy(source, target) {
+  return target
+      .domain(source.domain())
+      .interpolator(source.interpolator())
+      .clamp(source.clamp())
+      .unknown(source.unknown());
+}
+
+function sequential() {
+  var scale = linearish(transformer$1()(identity$1));
+
+  scale.copy = function() {
+    return copy(scale, sequential());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+function sequentialLog() {
+  var scale = loggish(transformer$1()).domain([1, 10]);
+
+  scale.copy = function() {
+    return copy(scale, sequentialLog()).base(scale.base());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+function sequentialSymlog() {
+  var scale = symlogish(transformer$1());
+
+  scale.copy = function() {
+    return copy(scale, sequentialSymlog()).constant(scale.constant());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+function sequentialPow() {
+  var scale = powish(transformer$1());
+
+  scale.copy = function() {
+    return copy(scale, sequentialPow()).exponent(scale.exponent());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+function sequentialSqrt() {
+  return sequentialPow.apply(null, arguments).exponent(0.5);
+}
+
+function sequentialQuantile() {
+  var domain = [],
+      interpolator = identity$1;
+
+  function scale(x) {
+    if (x != null && !isNaN(x = +x)) return interpolator((d3Array.bisect(domain, x, 1) - 1) / (domain.length - 1));
+  }
+
+  scale.domain = function(_) {
+    if (!arguments.length) return domain.slice();
+    domain = [];
+    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);
+    domain.sort(d3Array.ascending);
+    return scale;
+  };
+
+  scale.interpolator = function(_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+
+  scale.range = function() {
+    return domain.map((d, i) => interpolator(i / (domain.length - 1)));
+  };
+
+  scale.quantiles = function(n) {
+    return Array.from({length: n + 1}, (_, i) => d3Array.quantile(domain, i / n));
+  };
+
+  scale.copy = function() {
+    return sequentialQuantile(interpolator).domain(domain);
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+function transformer() {
+  var x0 = 0,
+      x1 = 0.5,
+      x2 = 1,
+      s = 1,
+      t0,
+      t1,
+      t2,
+      k10,
+      k21,
+      interpolator = identity$1,
+      transform,
+      clamp = false,
+      unknown;
+
+  function scale(x) {
+    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (clamp = !!_, scale) : clamp;
+  };
+
+  scale.interpolator = function(_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+
+  function range(interpolate) {
+    return function(_) {
+      var r0, r1, r2;
+      return arguments.length ? ([r0, r1, r2] = _, interpolator = d3Interpolate.piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];
+    };
+  }
+
+  scale.range = range(d3Interpolate.interpolate);
+
+  scale.rangeRound = range(d3Interpolate.interpolateRound);
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  return function(t) {
+    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;
+    return scale;
+  };
+}
+
+function diverging() {
+  var scale = linearish(transformer()(identity$1));
+
+  scale.copy = function() {
+    return copy(scale, diverging());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+function divergingLog() {
+  var scale = loggish(transformer()).domain([0.1, 1, 10]);
+
+  scale.copy = function() {
+    return copy(scale, divergingLog()).base(scale.base());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+function divergingSymlog() {
+  var scale = symlogish(transformer());
+
+  scale.copy = function() {
+    return copy(scale, divergingSymlog()).constant(scale.constant());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+function divergingPow() {
+  var scale = powish(transformer());
+
+  scale.copy = function() {
+    return copy(scale, divergingPow()).exponent(scale.exponent());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+function divergingSqrt() {
+  return divergingPow.apply(null, arguments).exponent(0.5);
+}
+
+exports.scaleBand = band;
+exports.scaleDiverging = diverging;
+exports.scaleDivergingLog = divergingLog;
+exports.scaleDivergingPow = divergingPow;
+exports.scaleDivergingSqrt = divergingSqrt;
+exports.scaleDivergingSymlog = divergingSymlog;
+exports.scaleIdentity = identity;
+exports.scaleImplicit = implicit;
+exports.scaleLinear = linear;
+exports.scaleLog = log;
+exports.scaleOrdinal = ordinal;
+exports.scalePoint = point;
+exports.scalePow = pow;
+exports.scaleQuantile = quantile;
+exports.scaleQuantize = quantize;
+exports.scaleRadial = radial;
+exports.scaleSequential = sequential;
+exports.scaleSequentialLog = sequentialLog;
+exports.scaleSequentialPow = sequentialPow;
+exports.scaleSequentialQuantile = sequentialQuantile;
+exports.scaleSequentialSqrt = sequentialSqrt;
+exports.scaleSequentialSymlog = sequentialSymlog;
+exports.scaleSqrt = sqrt;
+exports.scaleSymlog = symlog;
+exports.scaleThreshold = threshold;
+exports.scaleTime = time;
+exports.scaleUtc = utcTime;
+exports.tickFormat = tickFormat;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
Index: node_modules/d3-scale/dist/d3-scale.min.js
===================================================================
--- node_modules/d3-scale/dist/d3-scale.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/dist/d3-scale.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-scale/ v4.0.2 Copyright 2010-2021 Mike Bostock
+!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3-array"),require("d3-interpolate"),require("d3-format"),require("d3-time"),require("d3-time-format")):"function"==typeof define&&define.amd?define(["exports","d3-array","d3-interpolate","d3-format","d3-time","d3-time-format"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).d3=n.d3||{},n.d3,n.d3,n.d3,n.d3,n.d3)}(this,(function(n,t,r,e,u,i){"use strict";function o(n,t){switch(arguments.length){case 0:break;case 1:this.range(n);break;default:this.range(t).domain(n)}return this}function a(n,t){switch(arguments.length){case 0:break;case 1:"function"==typeof n?this.interpolator(n):this.range(n);break;default:this.domain(n),"function"==typeof t?this.interpolator(t):this.range(t)}return this}const c=Symbol("implicit");function l(){var n=new t.InternMap,r=[],e=[],u=c;function i(t){let i=n.get(t);if(void 0===i){if(u!==c)return u;n.set(t,i=r.push(t)-1)}return e[i%e.length]}return i.domain=function(e){if(!arguments.length)return r.slice();r=[],n=new t.InternMap;for(const t of e)n.has(t)||n.set(t,r.push(t)-1);return i},i.range=function(n){return arguments.length?(e=Array.from(n),i):e.slice()},i.unknown=function(n){return arguments.length?(u=n,i):u},i.copy=function(){return l(r,e).unknown(u)},o.apply(i,arguments),i}function f(){var n,r,e=l().unknown(void 0),u=e.domain,i=e.range,a=0,c=1,s=!1,p=0,h=0,g=.5;function m(){var e=u().length,o=c<a,l=o?c:a,f=o?a:c;n=(f-l)/Math.max(1,e-p+2*h),s&&(n=Math.floor(n)),l+=(f-l-n*(e-p))*g,r=n*(1-p),s&&(l=Math.round(l),r=Math.round(r));var m=t.range(e).map((function(t){return l+n*t}));return i(o?m.reverse():m)}return delete e.unknown,e.domain=function(n){return arguments.length?(u(n),m()):u()},e.range=function(n){return arguments.length?([a,c]=n,a=+a,c=+c,m()):[a,c]},e.rangeRound=function(n){return[a,c]=n,a=+a,c=+c,s=!0,m()},e.bandwidth=function(){return r},e.step=function(){return n},e.round=function(n){return arguments.length?(s=!!n,m()):s},e.padding=function(n){return arguments.length?(p=Math.min(1,h=+n),m()):p},e.paddingInner=function(n){return arguments.length?(p=Math.min(1,n),m()):p},e.paddingOuter=function(n){return arguments.length?(h=+n,m()):h},e.align=function(n){return arguments.length?(g=Math.max(0,Math.min(1,n)),m()):g},e.copy=function(){return f(u(),[a,c]).round(s).paddingInner(p).paddingOuter(h).align(g)},o.apply(m(),arguments)}function s(n){var t=n.copy;return n.padding=n.paddingOuter,delete n.paddingInner,delete n.paddingOuter,n.copy=function(){return s(t())},n}function p(n){return+n}var h=[0,1];function g(n){return n}function m(n,t){return(t-=n=+n)?function(r){return(r-n)/t}:(r=isNaN(t)?NaN:.5,function(){return r});var r}function d(n,t,r){var e=n[0],u=n[1],i=t[0],o=t[1];return u<e?(e=m(u,e),i=r(o,i)):(e=m(e,u),i=r(i,o)),function(n){return i(e(n))}}function y(n,r,e){var u=Math.min(n.length,r.length)-1,i=new Array(u),o=new Array(u),a=-1;for(n[u]<n[0]&&(n=n.slice().reverse(),r=r.slice().reverse());++a<u;)i[a]=m(n[a],n[a+1]),o[a]=e(r[a],r[a+1]);return function(r){var e=t.bisect(n,r,1,u)-1;return o[e](i[e](r))}}function v(n,t){return t.domain(n.domain()).range(n.range()).interpolate(n.interpolate()).clamp(n.clamp()).unknown(n.unknown())}function M(){var n,t,e,u,i,o,a=h,c=h,l=r.interpolate,f=g;function s(){var n,t,r,e=Math.min(a.length,c.length);return f!==g&&(n=a[0],t=a[e-1],n>t&&(r=n,n=t,t=r),f=function(r){return Math.max(n,Math.min(t,r))}),u=e>2?y:d,i=o=null,m}function m(t){return null==t||isNaN(t=+t)?e:(i||(i=u(a.map(n),c,l)))(n(f(t)))}return m.invert=function(e){return f(t((o||(o=u(c,a.map(n),r.interpolateNumber)))(e)))},m.domain=function(n){return arguments.length?(a=Array.from(n,p),s()):a.slice()},m.range=function(n){return arguments.length?(c=Array.from(n),s()):c.slice()},m.rangeRound=function(n){return c=Array.from(n),l=r.interpolateRound,s()},m.clamp=function(n){return arguments.length?(f=!!n||g,s()):f!==g},m.interpolate=function(n){return arguments.length?(l=n,s()):l},m.unknown=function(n){return arguments.length?(e=n,m):e},function(r,e){return n=r,t=e,s()}}function k(){return M()(g,g)}function w(n,r,u,i){var o,a=t.tickStep(n,r,u);switch((i=e.formatSpecifier(null==i?",f":i)).type){case"s":var c=Math.max(Math.abs(n),Math.abs(r));return null!=i.precision||isNaN(o=e.precisionPrefix(a,c))||(i.precision=o),e.formatPrefix(i,c);case"":case"e":case"g":case"p":case"r":null!=i.precision||isNaN(o=e.precisionRound(a,Math.max(Math.abs(n),Math.abs(r))))||(i.precision=o-("e"===i.type));break;case"f":case"%":null!=i.precision||isNaN(o=e.precisionFixed(a))||(i.precision=o-2*("%"===i.type))}return e.format(i)}function N(n){var r=n.domain;return n.ticks=function(n){var e=r();return t.ticks(e[0],e[e.length-1],null==n?10:n)},n.tickFormat=function(n,t){var e=r();return w(e[0],e[e.length-1],null==n?10:n,t)},n.nice=function(e){null==e&&(e=10);var u,i,o=r(),a=0,c=o.length-1,l=o[a],f=o[c],s=10;for(f<l&&(i=l,l=f,f=i,i=a,a=c,c=i);s-- >0;){if((i=t.tickIncrement(l,f,e))===u)return o[a]=l,o[c]=f,r(o);if(i>0)l=Math.floor(l/i)*i,f=Math.ceil(f/i)*i;else{if(!(i<0))break;l=Math.ceil(l*i)/i,f=Math.floor(f*i)/i}u=i}return n},n}function b(n,t){var r,e=0,u=(n=n.slice()).length-1,i=n[e],o=n[u];return o<i&&(r=e,e=u,u=r,r=i,i=o,o=r),n[e]=t.floor(i),n[u]=t.ceil(o),n}function x(n){return Math.log(n)}function q(n){return Math.exp(n)}function S(n){return-Math.log(-n)}function A(n){return-Math.exp(-n)}function D(n){return isFinite(n)?+("1e"+n):n<0?0:n}function I(n){return(t,r)=>-n(-t,r)}function R(n){const r=n(x,q),u=r.domain;let i,o,a=10;function c(){return i=function(n){return n===Math.E?Math.log:10===n&&Math.log10||2===n&&Math.log2||(n=Math.log(n),t=>Math.log(t)/n)}(a),o=function(n){return 10===n?D:n===Math.E?Math.exp:t=>Math.pow(n,t)}(a),u()[0]<0?(i=I(i),o=I(o),n(S,A)):n(x,q),r}return r.base=function(n){return arguments.length?(a=+n,c()):a},r.domain=function(n){return arguments.length?(u(n),c()):u()},r.ticks=n=>{const r=u();let e=r[0],c=r[r.length-1];const l=c<e;l&&([e,c]=[c,e]);let f,s,p=i(e),h=i(c);const g=null==n?10:+n;let m=[];if(!(a%1)&&h-p<g){if(p=Math.floor(p),h=Math.ceil(h),e>0){for(;p<=h;++p)for(f=1;f<a;++f)if(s=p<0?f/o(-p):f*o(p),!(s<e)){if(s>c)break;m.push(s)}}else for(;p<=h;++p)for(f=a-1;f>=1;--f)if(s=p>0?f/o(-p):f*o(p),!(s<e)){if(s>c)break;m.push(s)}2*m.length<g&&(m=t.ticks(e,c,g))}else m=t.ticks(p,h,Math.min(h-p,g)).map(o);return l?m.reverse():m},r.tickFormat=(n,t)=>{if(null==n&&(n=10),null==t&&(t=10===a?"s":","),"function"!=typeof t&&(a%1||null!=(t=e.formatSpecifier(t)).precision||(t.trim=!0),t=e.format(t)),n===1/0)return t;const u=Math.max(1,a*n/r.ticks().length);return n=>{let r=n/o(Math.round(i(n)));return r*a<a-.5&&(r*=a),r<=u?t(n):""}},r.nice=()=>u(b(u(),{floor:n=>o(Math.floor(i(n))),ceil:n=>o(Math.ceil(i(n)))})),r}function T(n){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/n))}}function O(n){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*n}}function F(n){var t=1,r=n(T(t),O(t));return r.constant=function(r){return arguments.length?n(T(t=+r),O(t)):t},N(r)}function P(n){return function(t){return t<0?-Math.pow(-t,n):Math.pow(t,n)}}function E(n){return n<0?-Math.sqrt(-n):Math.sqrt(n)}function L(n){return n<0?-n*n:n*n}function Q(n){var t=n(g,g),r=1;function e(){return 1===r?n(g,g):.5===r?n(E,L):n(P(r),P(1/r))}return t.exponent=function(n){return arguments.length?(r=+n,e()):r},N(t)}function U(){var n=Q(M());return n.copy=function(){return v(n,U()).exponent(n.exponent())},o.apply(n,arguments),n}function Y(n){return Math.sign(n)*n*n}function j(n){return Math.sign(n)*Math.sqrt(Math.abs(n))}function B(n){return new Date(n)}function C(n){return n instanceof Date?+n:+new Date(+n)}function H(n,t,r,e,u,i,o,a,c,l){var f=k(),s=f.invert,p=f.domain,h=l(".%L"),g=l(":%S"),m=l("%I:%M"),d=l("%I %p"),y=l("%a %d"),M=l("%b %d"),w=l("%B"),N=l("%Y");function x(n){return(c(n)<n?h:a(n)<n?g:o(n)<n?m:i(n)<n?d:e(n)<n?u(n)<n?y:M:r(n)<n?w:N)(n)}return f.invert=function(n){return new Date(s(n))},f.domain=function(n){return arguments.length?p(Array.from(n,C)):p().map(B)},f.ticks=function(t){var r=p();return n(r[0],r[r.length-1],null==t?10:t)},f.tickFormat=function(n,t){return null==t?x:l(t)},f.nice=function(n){var r=p();return n&&"function"==typeof n.range||(n=t(r[0],r[r.length-1],null==n?10:n)),n?p(b(r,n)):f},f.copy=function(){return v(f,H(n,t,r,e,u,i,o,a,c,l))},f}function W(){var n,t,e,u,i,o=0,a=1,c=g,l=!1;function f(t){return null==t||isNaN(t=+t)?i:c(0===e?.5:(t=(u(t)-n)*e,l?Math.max(0,Math.min(1,t)):t))}function s(n){return function(t){var r,e;return arguments.length?([r,e]=t,c=n(r,e),f):[c(0),c(1)]}}return f.domain=function(r){return arguments.length?([o,a]=r,n=u(o=+o),t=u(a=+a),e=n===t?0:1/(t-n),f):[o,a]},f.clamp=function(n){return arguments.length?(l=!!n,f):l},f.interpolator=function(n){return arguments.length?(c=n,f):c},f.range=s(r.interpolate),f.rangeRound=s(r.interpolateRound),f.unknown=function(n){return arguments.length?(i=n,f):i},function(r){return u=r,n=r(o),t=r(a),e=n===t?0:1/(t-n),f}}function _(n,t){return t.domain(n.domain()).interpolator(n.interpolator()).clamp(n.clamp()).unknown(n.unknown())}function z(){var n=Q(W());return n.copy=function(){return _(n,z()).exponent(n.exponent())},a.apply(n,arguments)}function G(){var n,t,e,u,i,o,a,c=0,l=.5,f=1,s=1,p=g,h=!1;function m(n){return isNaN(n=+n)?a:(n=.5+((n=+o(n))-t)*(s*n<s*t?u:i),p(h?Math.max(0,Math.min(1,n)):n))}function d(n){return function(t){var e,u,i;return arguments.length?([e,u,i]=t,p=r.piecewise(n,[e,u,i]),m):[p(0),p(.5),p(1)]}}return m.domain=function(r){return arguments.length?([c,l,f]=r,n=o(c=+c),t=o(l=+l),e=o(f=+f),u=n===t?0:.5/(t-n),i=t===e?0:.5/(e-t),s=t<n?-1:1,m):[c,l,f]},m.clamp=function(n){return arguments.length?(h=!!n,m):h},m.interpolator=function(n){return arguments.length?(p=n,m):p},m.range=d(r.interpolate),m.rangeRound=d(r.interpolateRound),m.unknown=function(n){return arguments.length?(a=n,m):a},function(r){return o=r,n=r(c),t=r(l),e=r(f),u=n===t?0:.5/(t-n),i=t===e?0:.5/(e-t),s=t<n?-1:1,m}}function J(){var n=Q(G());return n.copy=function(){return _(n,J()).exponent(n.exponent())},a.apply(n,arguments)}n.scaleBand=f,n.scaleDiverging=function n(){var t=N(G()(g));return t.copy=function(){return _(t,n())},a.apply(t,arguments)},n.scaleDivergingLog=function n(){var t=R(G()).domain([.1,1,10]);return t.copy=function(){return _(t,n()).base(t.base())},a.apply(t,arguments)},n.scaleDivergingPow=J,n.scaleDivergingSqrt=function(){return J.apply(null,arguments).exponent(.5)},n.scaleDivergingSymlog=function n(){var t=F(G());return t.copy=function(){return _(t,n()).constant(t.constant())},a.apply(t,arguments)},n.scaleIdentity=function n(t){var r;function e(n){return null==n||isNaN(n=+n)?r:n}return e.invert=e,e.domain=e.range=function(n){return arguments.length?(t=Array.from(n,p),e):t.slice()},e.unknown=function(n){return arguments.length?(r=n,e):r},e.copy=function(){return n(t).unknown(r)},t=arguments.length?Array.from(t,p):[0,1],N(e)},n.scaleImplicit=c,n.scaleLinear=function n(){var t=k();return t.copy=function(){return v(t,n())},o.apply(t,arguments),N(t)},n.scaleLog=function n(){const t=R(M()).domain([1,10]);return t.copy=()=>v(t,n()).base(t.base()),o.apply(t,arguments),t},n.scaleOrdinal=l,n.scalePoint=function(){return s(f.apply(null,arguments).paddingInner(1))},n.scalePow=U,n.scaleQuantile=function n(){var r,e=[],u=[],i=[];function a(){var n=0,r=Math.max(1,u.length);for(i=new Array(r-1);++n<r;)i[n-1]=t.quantileSorted(e,n/r);return c}function c(n){return null==n||isNaN(n=+n)?r:u[t.bisect(i,n)]}return c.invertExtent=function(n){var t=u.indexOf(n);return t<0?[NaN,NaN]:[t>0?i[t-1]:e[0],t<i.length?i[t]:e[e.length-1]]},c.domain=function(n){if(!arguments.length)return e.slice();e=[];for(let t of n)null==t||isNaN(t=+t)||e.push(t);return e.sort(t.ascending),a()},c.range=function(n){return arguments.length?(u=Array.from(n),a()):u.slice()},c.unknown=function(n){return arguments.length?(r=n,c):r},c.quantiles=function(){return i.slice()},c.copy=function(){return n().domain(e).range(u).unknown(r)},o.apply(c,arguments)},n.scaleQuantize=function n(){var r,e=0,u=1,i=1,a=[.5],c=[0,1];function l(n){return null!=n&&n<=n?c[t.bisect(a,n,0,i)]:r}function f(){var n=-1;for(a=new Array(i);++n<i;)a[n]=((n+1)*u-(n-i)*e)/(i+1);return l}return l.domain=function(n){return arguments.length?([e,u]=n,e=+e,u=+u,f()):[e,u]},l.range=function(n){return arguments.length?(i=(c=Array.from(n)).length-1,f()):c.slice()},l.invertExtent=function(n){var t=c.indexOf(n);return t<0?[NaN,NaN]:t<1?[e,a[0]]:t>=i?[a[i-1],u]:[a[t-1],a[t]]},l.unknown=function(n){return arguments.length?(r=n,l):l},l.thresholds=function(){return a.slice()},l.copy=function(){return n().domain([e,u]).range(c).unknown(r)},o.apply(N(l),arguments)},n.scaleRadial=function n(){var t,r=k(),e=[0,1],u=!1;function i(n){var e=j(r(n));return isNaN(e)?t:u?Math.round(e):e}return i.invert=function(n){return r.invert(Y(n))},i.domain=function(n){return arguments.length?(r.domain(n),i):r.domain()},i.range=function(n){return arguments.length?(r.range((e=Array.from(n,p)).map(Y)),i):e.slice()},i.rangeRound=function(n){return i.range(n).round(!0)},i.round=function(n){return arguments.length?(u=!!n,i):u},i.clamp=function(n){return arguments.length?(r.clamp(n),i):r.clamp()},i.unknown=function(n){return arguments.length?(t=n,i):t},i.copy=function(){return n(r.domain(),e).round(u).clamp(r.clamp()).unknown(t)},o.apply(i,arguments),N(i)},n.scaleSequential=function n(){var t=N(W()(g));return t.copy=function(){return _(t,n())},a.apply(t,arguments)},n.scaleSequentialLog=function n(){var t=R(W()).domain([1,10]);return t.copy=function(){return _(t,n()).base(t.base())},a.apply(t,arguments)},n.scaleSequentialPow=z,n.scaleSequentialQuantile=function n(){var r=[],e=g;function u(n){if(null!=n&&!isNaN(n=+n))return e((t.bisect(r,n,1)-1)/(r.length-1))}return u.domain=function(n){if(!arguments.length)return r.slice();r=[];for(let t of n)null==t||isNaN(t=+t)||r.push(t);return r.sort(t.ascending),u},u.interpolator=function(n){return arguments.length?(e=n,u):e},u.range=function(){return r.map(((n,t)=>e(t/(r.length-1))))},u.quantiles=function(n){return Array.from({length:n+1},((e,u)=>t.quantile(r,u/n)))},u.copy=function(){return n(e).domain(r)},a.apply(u,arguments)},n.scaleSequentialSqrt=function(){return z.apply(null,arguments).exponent(.5)},n.scaleSequentialSymlog=function n(){var t=F(W());return t.copy=function(){return _(t,n()).constant(t.constant())},a.apply(t,arguments)},n.scaleSqrt=function(){return U.apply(null,arguments).exponent(.5)},n.scaleSymlog=function n(){var t=F(M());return t.copy=function(){return v(t,n()).constant(t.constant())},o.apply(t,arguments)},n.scaleThreshold=function n(){var r,e=[.5],u=[0,1],i=1;function a(n){return null!=n&&n<=n?u[t.bisect(e,n,0,i)]:r}return a.domain=function(n){return arguments.length?(e=Array.from(n),i=Math.min(e.length,u.length-1),a):e.slice()},a.range=function(n){return arguments.length?(u=Array.from(n),i=Math.min(e.length,u.length-1),a):u.slice()},a.invertExtent=function(n){var t=u.indexOf(n);return[e[t-1],e[t]]},a.unknown=function(n){return arguments.length?(r=n,a):r},a.copy=function(){return n().domain(e).range(u).unknown(r)},o.apply(a,arguments)},n.scaleTime=function(){return o.apply(H(u.timeTicks,u.timeTickInterval,u.timeYear,u.timeMonth,u.timeWeek,u.timeDay,u.timeHour,u.timeMinute,u.timeSecond,i.timeFormat).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)},n.scaleUtc=function(){return o.apply(H(u.utcTicks,u.utcTickInterval,u.utcYear,u.utcMonth,u.utcWeek,u.utcDay,u.utcHour,u.utcMinute,u.utcSecond,i.utcFormat).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)},n.tickFormat=w,Object.defineProperty(n,"__esModule",{value:!0})}));
Index: node_modules/d3-scale/package.json
===================================================================
--- node_modules/d3-scale/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+{
+  "name": "d3-scale",
+  "version": "4.0.2",
+  "description": "Encodings that map abstract data to visual representation.",
+  "homepage": "https://d3js.org/d3-scale/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-scale.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "scale",
+    "visualization"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "https://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-scale.min.js",
+  "unpkg": "dist/d3-scale.min.js",
+  "exports": {
+    "umd": "./dist/d3-scale.min.js",
+    "default": "./src/index.js"
+  },
+  "sideEffects": false,
+  "dependencies": {
+    "d3-array": "2.10.0 - 3",
+    "d3-format": "1 - 3",
+    "d3-interpolate": "1.2.0 - 3",
+    "d3-time": "2.1.1 - 3",
+    "d3-time-format": "2 - 4"
+  },
+  "devDependencies": {
+    "d3-color": "1 - 3",
+    "eslint": "7",
+    "mocha": "9",
+    "rollup": "2",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "TZ=America/Los_Angeles mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-scale/src/band.js
===================================================================
--- node_modules/d3-scale/src/band.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/band.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,101 @@
+import {range as sequence} from "d3-array";
+import {initRange} from "./init.js";
+import ordinal from "./ordinal.js";
+
+export default function band() {
+  var scale = ordinal().unknown(undefined),
+      domain = scale.domain,
+      ordinalRange = scale.range,
+      r0 = 0,
+      r1 = 1,
+      step,
+      bandwidth,
+      round = false,
+      paddingInner = 0,
+      paddingOuter = 0,
+      align = 0.5;
+
+  delete scale.unknown;
+
+  function rescale() {
+    var n = domain().length,
+        reverse = r1 < r0,
+        start = reverse ? r1 : r0,
+        stop = reverse ? r0 : r1;
+    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
+    if (round) step = Math.floor(step);
+    start += (stop - start - step * (n - paddingInner)) * align;
+    bandwidth = step * (1 - paddingInner);
+    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
+    var values = sequence(n).map(function(i) { return start + step * i; });
+    return ordinalRange(reverse ? values.reverse() : values);
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain(_), rescale()) : domain();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];
+  };
+
+  scale.rangeRound = function(_) {
+    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();
+  };
+
+  scale.bandwidth = function() {
+    return bandwidth;
+  };
+
+  scale.step = function() {
+    return step;
+  };
+
+  scale.round = function(_) {
+    return arguments.length ? (round = !!_, rescale()) : round;
+  };
+
+  scale.padding = function(_) {
+    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
+  };
+
+  scale.paddingInner = function(_) {
+    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
+  };
+
+  scale.paddingOuter = function(_) {
+    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
+  };
+
+  scale.align = function(_) {
+    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
+  };
+
+  scale.copy = function() {
+    return band(domain(), [r0, r1])
+        .round(round)
+        .paddingInner(paddingInner)
+        .paddingOuter(paddingOuter)
+        .align(align);
+  };
+
+  return initRange.apply(rescale(), arguments);
+}
+
+function pointish(scale) {
+  var copy = scale.copy;
+
+  scale.padding = scale.paddingOuter;
+  delete scale.paddingInner;
+  delete scale.paddingOuter;
+
+  scale.copy = function() {
+    return pointish(copy());
+  };
+
+  return scale;
+}
+
+export function point() {
+  return pointish(band.apply(null, arguments).paddingInner(1));
+}
Index: node_modules/d3-scale/src/colors.js
===================================================================
--- node_modules/d3-scale/src/colors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/colors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export default function colors(s) {
+  return s.match(/.{6}/g).map(function(x) {
+    return "#" + x;
+  });
+}
Index: node_modules/d3-scale/src/constant.js
===================================================================
--- node_modules/d3-scale/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export default function constants(x) {
+  return function() {
+    return x;
+  };
+}
Index: node_modules/d3-scale/src/continuous.js
===================================================================
--- node_modules/d3-scale/src/continuous.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/continuous.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,125 @@
+import {bisect} from "d3-array";
+import {interpolate as interpolateValue, interpolateNumber, interpolateRound} from "d3-interpolate";
+import constant from "./constant.js";
+import number from "./number.js";
+
+var unit = [0, 1];
+
+export function identity(x) {
+  return x;
+}
+
+function normalize(a, b) {
+  return (b -= (a = +a))
+      ? function(x) { return (x - a) / b; }
+      : constant(isNaN(b) ? NaN : 0.5);
+}
+
+function clamper(a, b) {
+  var t;
+  if (a > b) t = a, a = b, b = t;
+  return function(x) { return Math.max(a, Math.min(b, x)); };
+}
+
+// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
+// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
+function bimap(domain, range, interpolate) {
+  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
+  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);
+  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);
+  return function(x) { return r0(d0(x)); };
+}
+
+function polymap(domain, range, interpolate) {
+  var j = Math.min(domain.length, range.length) - 1,
+      d = new Array(j),
+      r = new Array(j),
+      i = -1;
+
+  // Reverse descending domains.
+  if (domain[j] < domain[0]) {
+    domain = domain.slice().reverse();
+    range = range.slice().reverse();
+  }
+
+  while (++i < j) {
+    d[i] = normalize(domain[i], domain[i + 1]);
+    r[i] = interpolate(range[i], range[i + 1]);
+  }
+
+  return function(x) {
+    var i = bisect(domain, x, 1, j) - 1;
+    return r[i](d[i](x));
+  };
+}
+
+export function copy(source, target) {
+  return target
+      .domain(source.domain())
+      .range(source.range())
+      .interpolate(source.interpolate())
+      .clamp(source.clamp())
+      .unknown(source.unknown());
+}
+
+export function transformer() {
+  var domain = unit,
+      range = unit,
+      interpolate = interpolateValue,
+      transform,
+      untransform,
+      unknown,
+      clamp = identity,
+      piecewise,
+      output,
+      input;
+
+  function rescale() {
+    var n = Math.min(domain.length, range.length);
+    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);
+    piecewise = n > 2 ? polymap : bimap;
+    output = input = null;
+    return scale;
+  }
+
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));
+  }
+
+  scale.invert = function(y) {
+    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();
+  };
+
+  scale.rangeRound = function(_) {
+    return range = Array.from(_), interpolate = interpolateRound, rescale();
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;
+  };
+
+  scale.interpolate = function(_) {
+    return arguments.length ? (interpolate = _, rescale()) : interpolate;
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  return function(t, u) {
+    transform = t, untransform = u;
+    return rescale();
+  };
+}
+
+export default function continuous() {
+  return transformer()(identity, identity);
+}
Index: node_modules/d3-scale/src/diverging.js
===================================================================
--- node_modules/d3-scale/src/diverging.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/diverging.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,104 @@
+import {interpolate, interpolateRound, piecewise} from "d3-interpolate";
+import {identity} from "./continuous.js";
+import {initInterpolator} from "./init.js";
+import {linearish} from "./linear.js";
+import {loggish} from "./log.js";
+import {copy} from "./sequential.js";
+import {symlogish} from "./symlog.js";
+import {powish} from "./pow.js";
+
+function transformer() {
+  var x0 = 0,
+      x1 = 0.5,
+      x2 = 1,
+      s = 1,
+      t0,
+      t1,
+      t2,
+      k10,
+      k21,
+      interpolator = identity,
+      transform,
+      clamp = false,
+      unknown;
+
+  function scale(x) {
+    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (clamp = !!_, scale) : clamp;
+  };
+
+  scale.interpolator = function(_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+
+  function range(interpolate) {
+    return function(_) {
+      var r0, r1, r2;
+      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];
+    };
+  }
+
+  scale.range = range(interpolate);
+
+  scale.rangeRound = range(interpolateRound);
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  return function(t) {
+    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;
+    return scale;
+  };
+}
+
+export default function diverging() {
+  var scale = linearish(transformer()(identity));
+
+  scale.copy = function() {
+    return copy(scale, diverging());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+export function divergingLog() {
+  var scale = loggish(transformer()).domain([0.1, 1, 10]);
+
+  scale.copy = function() {
+    return copy(scale, divergingLog()).base(scale.base());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+export function divergingSymlog() {
+  var scale = symlogish(transformer());
+
+  scale.copy = function() {
+    return copy(scale, divergingSymlog()).constant(scale.constant());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+export function divergingPow() {
+  var scale = powish(transformer());
+
+  scale.copy = function() {
+    return copy(scale, divergingPow()).exponent(scale.exponent());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+export function divergingSqrt() {
+  return divergingPow.apply(null, arguments).exponent(0.5);
+}
Index: node_modules/d3-scale/src/identity.js
===================================================================
--- node_modules/d3-scale/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import {linearish} from "./linear.js";
+import number from "./number.js";
+
+export default function identity(domain) {
+  var unknown;
+
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : x;
+  }
+
+  scale.invert = scale;
+
+  scale.domain = scale.range = function(_) {
+    return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.copy = function() {
+    return identity(domain).unknown(unknown);
+  };
+
+  domain = arguments.length ? Array.from(domain, number) : [0, 1];
+
+  return linearish(scale);
+}
Index: node_modules/d3-scale/src/index.js
===================================================================
--- node_modules/d3-scale/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,78 @@
+export {
+  default as scaleBand,
+  point as scalePoint
+} from "./band.js";
+
+export {
+  default as scaleIdentity
+} from "./identity.js";
+
+export {
+  default as scaleLinear
+} from "./linear.js";
+
+export {
+  default as scaleLog
+} from "./log.js";
+
+export {
+  default as scaleSymlog
+} from "./symlog.js";
+
+export {
+  default as scaleOrdinal,
+  implicit as scaleImplicit
+} from "./ordinal.js";
+
+export {
+  default as scalePow,
+  sqrt as scaleSqrt
+} from "./pow.js";
+
+export {
+  default as scaleRadial
+} from "./radial.js";
+
+export {
+  default as scaleQuantile
+} from "./quantile.js";
+
+export {
+  default as scaleQuantize
+} from "./quantize.js";
+
+export {
+  default as scaleThreshold
+} from "./threshold.js";
+
+export {
+  default as scaleTime
+} from "./time.js";
+
+export {
+  default as scaleUtc
+} from "./utcTime.js";
+
+export {
+  default as scaleSequential,
+  sequentialLog as scaleSequentialLog,
+  sequentialPow as scaleSequentialPow,
+  sequentialSqrt as scaleSequentialSqrt,
+  sequentialSymlog as scaleSequentialSymlog
+} from "./sequential.js";
+
+export {
+  default as scaleSequentialQuantile
+} from "./sequentialQuantile.js";
+
+export {
+  default as scaleDiverging,
+  divergingLog as scaleDivergingLog,
+  divergingPow as scaleDivergingPow,
+  divergingSqrt as scaleDivergingSqrt,
+  divergingSymlog as scaleDivergingSymlog
+} from "./diverging.js";
+
+export {
+  default as tickFormat
+} from "./tickFormat.js";
Index: node_modules/d3-scale/src/init.js
===================================================================
--- node_modules/d3-scale/src/init.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/init.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+export function initRange(domain, range) {
+  switch (arguments.length) {
+    case 0: break;
+    case 1: this.range(domain); break;
+    default: this.range(range).domain(domain); break;
+  }
+  return this;
+}
+
+export function initInterpolator(domain, interpolator) {
+  switch (arguments.length) {
+    case 0: break;
+    case 1: {
+      if (typeof domain === "function") this.interpolator(domain);
+      else this.range(domain);
+      break;
+    }
+    default: {
+      this.domain(domain);
+      if (typeof interpolator === "function") this.interpolator(interpolator);
+      else this.range(interpolator);
+      break;
+    }
+  }
+  return this;
+}
Index: node_modules/d3-scale/src/linear.js
===================================================================
--- node_modules/d3-scale/src/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+import {ticks, tickIncrement} from "d3-array";
+import continuous, {copy} from "./continuous.js";
+import {initRange} from "./init.js";
+import tickFormat from "./tickFormat.js";
+
+export function linearish(scale) {
+  var domain = scale.domain;
+
+  scale.ticks = function(count) {
+    var d = domain();
+    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
+  };
+
+  scale.tickFormat = function(count, specifier) {
+    var d = domain();
+    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
+  };
+
+  scale.nice = function(count) {
+    if (count == null) count = 10;
+
+    var d = domain();
+    var i0 = 0;
+    var i1 = d.length - 1;
+    var start = d[i0];
+    var stop = d[i1];
+    var prestep;
+    var step;
+    var maxIter = 10;
+
+    if (stop < start) {
+      step = start, start = stop, stop = step;
+      step = i0, i0 = i1, i1 = step;
+    }
+    
+    while (maxIter-- > 0) {
+      step = tickIncrement(start, stop, count);
+      if (step === prestep) {
+        d[i0] = start
+        d[i1] = stop
+        return domain(d);
+      } else if (step > 0) {
+        start = Math.floor(start / step) * step;
+        stop = Math.ceil(stop / step) * step;
+      } else if (step < 0) {
+        start = Math.ceil(start * step) / step;
+        stop = Math.floor(stop * step) / step;
+      } else {
+        break;
+      }
+      prestep = step;
+    }
+
+    return scale;
+  };
+
+  return scale;
+}
+
+export default function linear() {
+  var scale = continuous();
+
+  scale.copy = function() {
+    return copy(scale, linear());
+  };
+
+  initRange.apply(scale, arguments);
+
+  return linearish(scale);
+}
Index: node_modules/d3-scale/src/log.js
===================================================================
--- node_modules/d3-scale/src/log.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/log.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,140 @@
+import {ticks} from "d3-array";
+import {format, formatSpecifier} from "d3-format";
+import nice from "./nice.js";
+import {copy, transformer} from "./continuous.js";
+import {initRange} from "./init.js";
+
+function transformLog(x) {
+  return Math.log(x);
+}
+
+function transformExp(x) {
+  return Math.exp(x);
+}
+
+function transformLogn(x) {
+  return -Math.log(-x);
+}
+
+function transformExpn(x) {
+  return -Math.exp(-x);
+}
+
+function pow10(x) {
+  return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
+}
+
+function powp(base) {
+  return base === 10 ? pow10
+      : base === Math.E ? Math.exp
+      : x => Math.pow(base, x);
+}
+
+function logp(base) {
+  return base === Math.E ? Math.log
+      : base === 10 && Math.log10
+      || base === 2 && Math.log2
+      || (base = Math.log(base), x => Math.log(x) / base);
+}
+
+function reflect(f) {
+  return (x, k) => -f(-x, k);
+}
+
+export function loggish(transform) {
+  const scale = transform(transformLog, transformExp);
+  const domain = scale.domain;
+  let base = 10;
+  let logs;
+  let pows;
+
+  function rescale() {
+    logs = logp(base), pows = powp(base);
+    if (domain()[0] < 0) {
+      logs = reflect(logs), pows = reflect(pows);
+      transform(transformLogn, transformExpn);
+    } else {
+      transform(transformLog, transformExp);
+    }
+    return scale;
+  }
+
+  scale.base = function(_) {
+    return arguments.length ? (base = +_, rescale()) : base;
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain(_), rescale()) : domain();
+  };
+
+  scale.ticks = count => {
+    const d = domain();
+    let u = d[0];
+    let v = d[d.length - 1];
+    const r = v < u;
+
+    if (r) ([u, v] = [v, u]);
+
+    let i = logs(u);
+    let j = logs(v);
+    let k;
+    let t;
+    const n = count == null ? 10 : +count;
+    let z = [];
+
+    if (!(base % 1) && j - i < n) {
+      i = Math.floor(i), j = Math.ceil(j);
+      if (u > 0) for (; i <= j; ++i) {
+        for (k = 1; k < base; ++k) {
+          t = i < 0 ? k / pows(-i) : k * pows(i);
+          if (t < u) continue;
+          if (t > v) break;
+          z.push(t);
+        }
+      } else for (; i <= j; ++i) {
+        for (k = base - 1; k >= 1; --k) {
+          t = i > 0 ? k / pows(-i) : k * pows(i);
+          if (t < u) continue;
+          if (t > v) break;
+          z.push(t);
+        }
+      }
+      if (z.length * 2 < n) z = ticks(u, v, n);
+    } else {
+      z = ticks(i, j, Math.min(j - i, n)).map(pows);
+    }
+    return r ? z.reverse() : z;
+  };
+
+  scale.tickFormat = (count, specifier) => {
+    if (count == null) count = 10;
+    if (specifier == null) specifier = base === 10 ? "s" : ",";
+    if (typeof specifier !== "function") {
+      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;
+      specifier = format(specifier);
+    }
+    if (count === Infinity) return specifier;
+    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
+    return d => {
+      let i = d / pows(Math.round(logs(d)));
+      if (i * base < base - 0.5) i *= base;
+      return i <= k ? specifier(d) : "";
+    };
+  };
+
+  scale.nice = () => {
+    return domain(nice(domain(), {
+      floor: x => pows(Math.floor(logs(x))),
+      ceil: x => pows(Math.ceil(logs(x)))
+    }));
+  };
+
+  return scale;
+}
+
+export default function log() {
+  const scale = loggish(transformer()).domain([1, 10]);
+  scale.copy = () => copy(scale, log()).base(scale.base());
+  initRange.apply(scale, arguments);
+  return scale;
+}
Index: node_modules/d3-scale/src/nice.js
===================================================================
--- node_modules/d3-scale/src/nice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/nice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+export default function nice(domain, interval) {
+  domain = domain.slice();
+
+  var i0 = 0,
+      i1 = domain.length - 1,
+      x0 = domain[i0],
+      x1 = domain[i1],
+      t;
+
+  if (x1 < x0) {
+    t = i0, i0 = i1, i1 = t;
+    t = x0, x0 = x1, x1 = t;
+  }
+
+  domain[i0] = interval.floor(x0);
+  domain[i1] = interval.ceil(x1);
+  return domain;
+}
Index: node_modules/d3-scale/src/number.js
===================================================================
--- node_modules/d3-scale/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default function number(x) {
+  return +x;
+}
Index: node_modules/d3-scale/src/ordinal.js
===================================================================
--- node_modules/d3-scale/src/ordinal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/ordinal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+import {InternMap} from "d3-array";
+import {initRange} from "./init.js";
+
+export const implicit = Symbol("implicit");
+
+export default function ordinal() {
+  var index = new InternMap(),
+      domain = [],
+      range = [],
+      unknown = implicit;
+
+  function scale(d) {
+    let i = index.get(d);
+    if (i === undefined) {
+      if (unknown !== implicit) return unknown;
+      index.set(d, i = domain.push(d) - 1);
+    }
+    return range[i % range.length];
+  }
+
+  scale.domain = function(_) {
+    if (!arguments.length) return domain.slice();
+    domain = [], index = new InternMap();
+    for (const value of _) {
+      if (index.has(value)) continue;
+      index.set(value, domain.push(value) - 1);
+    }
+    return scale;
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range = Array.from(_), scale) : range.slice();
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.copy = function() {
+    return ordinal(domain, range).unknown(unknown);
+  };
+
+  initRange.apply(scale, arguments);
+
+  return scale;
+}
Index: node_modules/d3-scale/src/pow.js
===================================================================
--- node_modules/d3-scale/src/pow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/pow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import {linearish} from "./linear.js";
+import {copy, identity, transformer} from "./continuous.js";
+import {initRange} from "./init.js";
+
+function transformPow(exponent) {
+  return function(x) {
+    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
+  };
+}
+
+function transformSqrt(x) {
+  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);
+}
+
+function transformSquare(x) {
+  return x < 0 ? -x * x : x * x;
+}
+
+export function powish(transform) {
+  var scale = transform(identity, identity),
+      exponent = 1;
+
+  function rescale() {
+    return exponent === 1 ? transform(identity, identity)
+        : exponent === 0.5 ? transform(transformSqrt, transformSquare)
+        : transform(transformPow(exponent), transformPow(1 / exponent));
+  }
+
+  scale.exponent = function(_) {
+    return arguments.length ? (exponent = +_, rescale()) : exponent;
+  };
+
+  return linearish(scale);
+}
+
+export default function pow() {
+  var scale = powish(transformer());
+
+  scale.copy = function() {
+    return copy(scale, pow()).exponent(scale.exponent());
+  };
+
+  initRange.apply(scale, arguments);
+
+  return scale;
+}
+
+export function sqrt() {
+  return pow.apply(null, arguments).exponent(0.5);
+}
Index: node_modules/d3-scale/src/quantile.js
===================================================================
--- node_modules/d3-scale/src/quantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/quantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+import {ascending, bisect, quantileSorted as threshold} from "d3-array";
+import {initRange} from "./init.js";
+
+export default function quantile() {
+  var domain = [],
+      range = [],
+      thresholds = [],
+      unknown;
+
+  function rescale() {
+    var i = 0, n = Math.max(1, range.length);
+    thresholds = new Array(n - 1);
+    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
+    return scale;
+  }
+
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];
+  }
+
+  scale.invertExtent = function(y) {
+    var i = range.indexOf(y);
+    return i < 0 ? [NaN, NaN] : [
+      i > 0 ? thresholds[i - 1] : domain[0],
+      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
+    ];
+  };
+
+  scale.domain = function(_) {
+    if (!arguments.length) return domain.slice();
+    domain = [];
+    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);
+    domain.sort(ascending);
+    return rescale();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.quantiles = function() {
+    return thresholds.slice();
+  };
+
+  scale.copy = function() {
+    return quantile()
+        .domain(domain)
+        .range(range)
+        .unknown(unknown);
+  };
+
+  return initRange.apply(scale, arguments);
+}
Index: node_modules/d3-scale/src/quantize.js
===================================================================
--- node_modules/d3-scale/src/quantize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/quantize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+import {bisect} from "d3-array";
+import {linearish} from "./linear.js";
+import {initRange} from "./init.js";
+
+export default function quantize() {
+  var x0 = 0,
+      x1 = 1,
+      n = 1,
+      domain = [0.5],
+      range = [0, 1],
+      unknown;
+
+  function scale(x) {
+    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;
+  }
+
+  function rescale() {
+    var i = -1;
+    domain = new Array(n);
+    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
+    return scale;
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();
+  };
+
+  scale.invertExtent = function(y) {
+    var i = range.indexOf(y);
+    return i < 0 ? [NaN, NaN]
+        : i < 1 ? [x0, domain[0]]
+        : i >= n ? [domain[n - 1], x1]
+        : [domain[i - 1], domain[i]];
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : scale;
+  };
+
+  scale.thresholds = function() {
+    return domain.slice();
+  };
+
+  scale.copy = function() {
+    return quantize()
+        .domain([x0, x1])
+        .range(range)
+        .unknown(unknown);
+  };
+
+  return initRange.apply(linearish(scale), arguments);
+}
Index: node_modules/d3-scale/src/radial.js
===================================================================
--- node_modules/d3-scale/src/radial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/radial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+import continuous from "./continuous.js";
+import {initRange} from "./init.js";
+import {linearish} from "./linear.js";
+import number from "./number.js";
+
+function square(x) {
+  return Math.sign(x) * x * x;
+}
+
+function unsquare(x) {
+  return Math.sign(x) * Math.sqrt(Math.abs(x));
+}
+
+export default function radial() {
+  var squared = continuous(),
+      range = [0, 1],
+      round = false,
+      unknown;
+
+  function scale(x) {
+    var y = unsquare(squared(x));
+    return isNaN(y) ? unknown : round ? Math.round(y) : y;
+  }
+
+  scale.invert = function(y) {
+    return squared.invert(square(y));
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? (squared.domain(_), scale) : squared.domain();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();
+  };
+
+  scale.rangeRound = function(_) {
+    return scale.range(_).round(true);
+  };
+
+  scale.round = function(_) {
+    return arguments.length ? (round = !!_, scale) : round;
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.copy = function() {
+    return radial(squared.domain(), range)
+        .round(round)
+        .clamp(squared.clamp())
+        .unknown(unknown);
+  };
+
+  initRange.apply(scale, arguments);
+
+  return linearish(scale);
+}
Index: node_modules/d3-scale/src/sequential.js
===================================================================
--- node_modules/d3-scale/src/sequential.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/sequential.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,107 @@
+import {interpolate, interpolateRound} from "d3-interpolate";
+import {identity} from "./continuous.js";
+import {initInterpolator} from "./init.js";
+import {linearish} from "./linear.js";
+import {loggish} from "./log.js";
+import {symlogish} from "./symlog.js";
+import {powish} from "./pow.js";
+
+function transformer() {
+  var x0 = 0,
+      x1 = 1,
+      t0,
+      t1,
+      k10,
+      transform,
+      interpolator = identity,
+      clamp = false,
+      unknown;
+
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (clamp = !!_, scale) : clamp;
+  };
+
+  scale.interpolator = function(_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+
+  function range(interpolate) {
+    return function(_) {
+      var r0, r1;
+      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];
+    };
+  }
+
+  scale.range = range(interpolate);
+
+  scale.rangeRound = range(interpolateRound);
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  return function(t) {
+    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);
+    return scale;
+  };
+}
+
+export function copy(source, target) {
+  return target
+      .domain(source.domain())
+      .interpolator(source.interpolator())
+      .clamp(source.clamp())
+      .unknown(source.unknown());
+}
+
+export default function sequential() {
+  var scale = linearish(transformer()(identity));
+
+  scale.copy = function() {
+    return copy(scale, sequential());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+export function sequentialLog() {
+  var scale = loggish(transformer()).domain([1, 10]);
+
+  scale.copy = function() {
+    return copy(scale, sequentialLog()).base(scale.base());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+export function sequentialSymlog() {
+  var scale = symlogish(transformer());
+
+  scale.copy = function() {
+    return copy(scale, sequentialSymlog()).constant(scale.constant());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+export function sequentialPow() {
+  var scale = powish(transformer());
+
+  scale.copy = function() {
+    return copy(scale, sequentialPow()).exponent(scale.exponent());
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
+
+export function sequentialSqrt() {
+  return sequentialPow.apply(null, arguments).exponent(0.5);
+}
Index: node_modules/d3-scale/src/sequentialQuantile.js
===================================================================
--- node_modules/d3-scale/src/sequentialQuantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/sequentialQuantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+import {ascending, bisect, quantile} from "d3-array";
+import {identity} from "./continuous.js";
+import {initInterpolator} from "./init.js";
+
+export default function sequentialQuantile() {
+  var domain = [],
+      interpolator = identity;
+
+  function scale(x) {
+    if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));
+  }
+
+  scale.domain = function(_) {
+    if (!arguments.length) return domain.slice();
+    domain = [];
+    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);
+    domain.sort(ascending);
+    return scale;
+  };
+
+  scale.interpolator = function(_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+
+  scale.range = function() {
+    return domain.map((d, i) => interpolator(i / (domain.length - 1)));
+  };
+
+  scale.quantiles = function(n) {
+    return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));
+  };
+
+  scale.copy = function() {
+    return sequentialQuantile(interpolator).domain(domain);
+  };
+
+  return initInterpolator.apply(scale, arguments);
+}
Index: node_modules/d3-scale/src/symlog.js
===================================================================
--- node_modules/d3-scale/src/symlog.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/symlog.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import {linearish} from "./linear.js";
+import {copy, transformer} from "./continuous.js";
+import {initRange} from "./init.js";
+
+function transformSymlog(c) {
+  return function(x) {
+    return Math.sign(x) * Math.log1p(Math.abs(x / c));
+  };
+}
+
+function transformSymexp(c) {
+  return function(x) {
+    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;
+  };
+}
+
+export function symlogish(transform) {
+  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));
+
+  scale.constant = function(_) {
+    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;
+  };
+
+  return linearish(scale);
+}
+
+export default function symlog() {
+  var scale = symlogish(transformer());
+
+  scale.copy = function() {
+    return copy(scale, symlog()).constant(scale.constant());
+  };
+
+  return initRange.apply(scale, arguments);
+}
Index: node_modules/d3-scale/src/threshold.js
===================================================================
--- node_modules/d3-scale/src/threshold.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/threshold.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import {bisect} from "d3-array";
+import {initRange} from "./init.js";
+
+export default function threshold() {
+  var domain = [0.5],
+      range = [0, 1],
+      unknown,
+      n = 1;
+
+  function scale(x) {
+    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
+  };
+
+  scale.invertExtent = function(y) {
+    var i = range.indexOf(y);
+    return [domain[i - 1], domain[i]];
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.copy = function() {
+    return threshold()
+        .domain(domain)
+        .range(range)
+        .unknown(unknown);
+  };
+
+  return initRange.apply(scale, arguments);
+}
Index: node_modules/d3-scale/src/tickFormat.js
===================================================================
--- node_modules/d3-scale/src/tickFormat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/tickFormat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import {tickStep} from "d3-array";
+import {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from "d3-format";
+
+export default function tickFormat(start, stop, count, specifier) {
+  var step = tickStep(start, stop, count),
+      precision;
+  specifier = formatSpecifier(specifier == null ? ",f" : specifier);
+  switch (specifier.type) {
+    case "s": {
+      var value = Math.max(Math.abs(start), Math.abs(stop));
+      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
+      return formatPrefix(specifier, value);
+    }
+    case "":
+    case "e":
+    case "g":
+    case "p":
+    case "r": {
+      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
+      break;
+    }
+    case "f":
+    case "%": {
+      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
+      break;
+    }
+  }
+  return format(specifier);
+}
Index: node_modules/d3-scale/src/time.js
===================================================================
--- node_modules/d3-scale/src/time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from "d3-time";
+import {timeFormat} from "d3-time-format";
+import continuous, {copy} from "./continuous.js";
+import {initRange} from "./init.js";
+import nice from "./nice.js";
+
+function date(t) {
+  return new Date(t);
+}
+
+function number(t) {
+  return t instanceof Date ? +t : +new Date(+t);
+}
+
+export function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {
+  var scale = continuous(),
+      invert = scale.invert,
+      domain = scale.domain;
+
+  var formatMillisecond = format(".%L"),
+      formatSecond = format(":%S"),
+      formatMinute = format("%I:%M"),
+      formatHour = format("%I %p"),
+      formatDay = format("%a %d"),
+      formatWeek = format("%b %d"),
+      formatMonth = format("%B"),
+      formatYear = format("%Y");
+
+  function tickFormat(date) {
+    return (second(date) < date ? formatMillisecond
+        : minute(date) < date ? formatSecond
+        : hour(date) < date ? formatMinute
+        : day(date) < date ? formatHour
+        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
+        : year(date) < date ? formatMonth
+        : formatYear)(date);
+  }
+
+  scale.invert = function(y) {
+    return new Date(invert(y));
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);
+  };
+
+  scale.ticks = function(interval) {
+    var d = domain();
+    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);
+  };
+
+  scale.tickFormat = function(count, specifier) {
+    return specifier == null ? tickFormat : format(specifier);
+  };
+
+  scale.nice = function(interval) {
+    var d = domain();
+    if (!interval || typeof interval.range !== "function") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);
+    return interval ? domain(nice(d, interval)) : scale;
+  };
+
+  scale.copy = function() {
+    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));
+  };
+
+  return scale;
+}
+
+export default function time() {
+  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
+}
Index: node_modules/d3-scale/src/utcTime.js
===================================================================
--- node_modules/d3-scale/src/utcTime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-scale/src/utcTime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from "d3-time";
+import {utcFormat} from "d3-time-format";
+import {calendar} from "./time.js";
+import {initRange} from "./init.js";
+
+export default function utcTime() {
+  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);
+}
Index: node_modules/d3-shape/LICENSE
===================================================================
--- node_modules/d3-shape/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2022 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-shape/README.md
===================================================================
--- node_modules/d3-shape/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1227 @@
+# d3-shape
+
+Visualizations typically consist of discrete graphical marks, such as [symbols](#symbols), [arcs](#arcs), [lines](#lines) and [areas](#areas). While the rectangles of a bar chart may be easy enough to generate directly using [SVG](http://www.w3.org/TR/SVG/paths.html#PathData) or [Canvas](http://www.w3.org/TR/2dcontext/#canvaspathmethods), other shapes are complex, such as rounded annular sectors and centripetal Catmull–Rom splines. This module provides a variety of shape generators for your convenience.
+
+As with other aspects of D3, these shapes are driven by data: each shape generator exposes accessors that control how the input data are mapped to a visual representation. For example, you might define a line generator for a time series by [scaling](https://github.com/d3/d3-scale) fields of your data to fit the chart:
+
+```js
+const line = d3.line()
+    .x(d => x(d.date))
+    .y(d => y(d.value));
+```
+
+This line generator can then be used to compute the `d` attribute of an SVG path element:
+
+```js
+path.datum(data).attr("d", line);
+```
+
+Or you can use it to render to a Canvas 2D context:
+
+```js
+line.context(context)(data);
+```
+
+For more, read [Introducing d3-shape](https://medium.com/@mbostock/introducing-d3-shape-73f8367e6d12).
+
+## Installing
+
+If you use npm, `npm install d3-shape`. You can also download the [latest release on GitHub](https://github.com/d3/d3-shape/releases/latest). For vanilla HTML in modern browsers, import d3-shape from jsDelivr:
+
+```html
+<script type="module">
+
+import {line} from "https://cdn.jsdelivr.net/npm/d3-shape@3/+esm";
+
+const l = line();
+
+</script>
+```
+
+For legacy environments, you can load d3-shape’s UMD bundle; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-path@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-shape@3"></script>
+<script>
+
+const l = d3.line();
+
+</script>
+```
+
+## API Reference
+
+* [Arcs](#arcs)
+* [Pies](#pies)
+* [Lines](#lines)
+* [Areas](#areas)
+* [Curves](#curves)
+* [Custom Curves](#custom-curves)
+* [Links](#links)
+* [Symbols](#symbols)
+* [Custom Symbol Types](#custom-symbol-types)
+* [Stacks](#stacks)
+
+Note: all the methods that accept arrays also accept iterables and convert them to arrays internally.
+
+### Arcs
+
+[<img alt="Pie Chart" src="./img/pie.png" width="295" height="295">](https://observablehq.com/@d3/pie-chart)[<img alt="Donut Chart" src="./img/donut.png" width="295" height="295">](https://observablehq.com/@d3/donut-chart)
+
+The arc generator produces a [circular](https://en.wikipedia.org/wiki/Circular_sector) or [annular](https://en.wikipedia.org/wiki/Annulus_\(mathematics\)) sector, as in a pie or donut chart. If the absolute difference between the [start](#arc_startAngle) and [end](#arc_endAngle) angles (the *angular span*) is greater than [τ](https://en.wikipedia.org/wiki/Turn_\(geometry\)#Tau_proposal), the arc generator will produce a complete circle or annulus. If it is less than τ, the arc’s angular length will be equal to the absolute difference between the two angles (going clockwise if the signed difference is positive and anticlockwise if it is negative). If the absolute difference is less than τ, the arc may have [rounded corners](#arc_cornerRadius) and [angular padding](#arc_padAngle). Arcs are always centered at ⟨0,0⟩; use a transform (see: [SVG](http://www.w3.org/TR/SVG/coords.html#TransformAttribute), [Canvas](http://www.w3.org/TR/2dcontext/#transformations)) to move the arc to a different position.
+
+See also the [pie generator](#pies), which computes the necessary angles to represent an array of data as a pie or donut chart; these angles can then be passed to an arc generator.
+
+<a name="arc" href="#arc">#</a> d3.<b>arc</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+Constructs a new arc generator with the default settings.
+
+<a name="_arc" href="#_arc">#</a> <i>arc</i>(<i>arguments…</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+Generates an arc for the given *arguments*. The *arguments* are arbitrary; they are simply propagated to the arc generator’s accessor functions along with the `this` object. For example, with the default settings, an object with radii and angles is expected:
+
+```js
+const arc = d3.arc();
+
+arc({
+  innerRadius: 0,
+  outerRadius: 100,
+  startAngle: 0,
+  endAngle: Math.PI / 2
+}); // "M0,-100A100,100,0,0,1,100,0L0,0Z"
+```
+
+If the radii and angles are instead defined as constants, you can generate an arc without any arguments:
+
+```js
+const arc = d3.arc()
+    .innerRadius(0)
+    .outerRadius(100)
+    .startAngle(0)
+    .endAngle(Math.PI / 2);
+
+arc(); // "M0,-100A100,100,0,0,1,100,0L0,0Z"
+```
+
+If the arc generator has a [context](#arc_context), then the arc is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls and this function returns void. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string is returned.
+
+<a name="arc_centroid" href="#arc_centroid">#</a> <i>arc</i>.<b>centroid</b>(<i>arguments…</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+Computes the midpoint [*x*, *y*] of the center line of the arc that would be [generated](#_arc) by the given *arguments*. The *arguments* are arbitrary; they are simply propagated to the arc generator’s accessor functions along with the `this` object. To be consistent with the generated arc, the accessors must be deterministic, *i.e.*, return the same value given the same arguments. The midpoint is defined as ([startAngle](#arc_startAngle) + [endAngle](#arc_endAngle)) / 2 and ([innerRadius](#arc_innerRadius) + [outerRadius](#arc_outerRadius)) / 2. For example:
+
+[<img alt="Circular Sector Centroids" src="./img/centroid-circular-sector.png" width="250" height="250">](https://observablehq.com/@d3/pie-settings)[<img alt="Annular Sector Centroids" src="./img/centroid-annular-sector.png" width="250" height="250">](https://observablehq.com/@d3/pie-settings)
+
+Note that this is **not the geometric center** of the arc, which may be outside the arc; this method is merely a convenience for positioning labels.
+
+<a name="arc_innerRadius" href="#arc_innerRadius">#</a> <i>arc</i>.<b>innerRadius</b>([<i>radius</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+If *radius* is specified, sets the inner radius to the specified function or number and returns this arc generator. If *radius* is not specified, returns the current inner radius accessor, which defaults to:
+
+```js
+function innerRadius(d) {
+  return d.innerRadius;
+}
+```
+
+Specifying the inner radius as a function is useful for constructing a stacked polar bar chart, often in conjunction with a [sqrt scale](https://github.com/d3/d3-scale#sqrt). More commonly, a constant inner radius is used for a donut or pie chart. If the outer radius is smaller than the inner radius, the inner and outer radii are swapped. A negative value is treated as zero.
+
+<a name="arc_outerRadius" href="#arc_outerRadius">#</a> <i>arc</i>.<b>outerRadius</b>([<i>radius</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+If *radius* is specified, sets the outer radius to the specified function or number and returns this arc generator. If *radius* is not specified, returns the current outer radius accessor, which defaults to:
+
+```js
+function outerRadius(d) {
+  return d.outerRadius;
+}
+```
+
+Specifying the outer radius as a function is useful for constructing a coxcomb or polar bar chart, often in conjunction with a [sqrt scale](https://github.com/d3/d3-scale#sqrt). More commonly, a constant outer radius is used for a pie or donut chart. If the outer radius is smaller than the inner radius, the inner and outer radii are swapped. A negative value is treated as zero.
+
+<a name="arc_cornerRadius" href="#arc_cornerRadius">#</a> <i>arc</i>.<b>cornerRadius</b>([<i>radius</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+If *radius* is specified, sets the corner radius to the specified function or number and returns this arc generator. If *radius* is not specified, returns the current corner radius accessor, which defaults to:
+
+```js
+function cornerRadius() {
+  return 0;
+}
+```
+
+If the corner radius is greater than zero, the corners of the arc are rounded using circles of the given radius. For a circular sector, the two outer corners are rounded; for an annular sector, all four corners are rounded. The corner circles are shown in this diagram:
+
+[<img alt="Rounded Circular Sectors" src="./img/rounded-circular-sector.png" width="250" height="250">](https://observablehq.com/@d3/pie-settings)[<img alt="Rounded Annular Sectors" src="./img/rounded-annular-sector.png" width="250" height="250">](https://observablehq.com/@d3/pie-settings)
+
+The corner radius may not be larger than ([outerRadius](#arc_outerRadius) - [innerRadius](#arc_innerRadius)) / 2. In addition, for arcs whose angular span is less than π, the corner radius may be reduced as two adjacent rounded corners intersect. This is occurs more often with the inner corners. See the [arc corners animation](https://observablehq.com/@d3/arc-corners) for illustration.
+
+<a name="arc_startAngle" href="#arc_startAngle">#</a> <i>arc</i>.<b>startAngle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+If *angle* is specified, sets the start angle to the specified function or number and returns this arc generator. If *angle* is not specified, returns the current start angle accessor, which defaults to:
+
+```js
+function startAngle(d) {
+  return d.startAngle;
+}
+```
+
+The *angle* is specified in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise. If |endAngle - startAngle| ≥ τ, a complete circle or annulus is generated rather than a sector.
+
+<a name="arc_endAngle" href="#arc_endAngle">#</a> <i>arc</i>.<b>endAngle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+If *angle* is specified, sets the end angle to the specified function or number and returns this arc generator. If *angle* is not specified, returns the current end angle accessor, which defaults to:
+
+```js
+function endAngle(d) {
+  return d.endAngle;
+}
+```
+
+The *angle* is specified in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise. If |endAngle - startAngle| ≥ τ, a complete circle or annulus is generated rather than a sector.
+
+<a name="arc_padAngle" href="#arc_padAngle">#</a> <i>arc</i>.<b>padAngle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+If *angle* is specified, sets the pad angle to the specified function or number and returns this arc generator. If *angle* is not specified, returns the current pad angle accessor, which defaults to:
+
+```js
+function padAngle() {
+  return d && d.padAngle;
+}
+```
+
+The pad angle is converted to a fixed linear distance separating adjacent arcs, defined as [padRadius](#arc_padRadius) * padAngle. This distance is subtracted equally from the [start](#arc_startAngle) and [end](#arc_endAngle) of the arc. If the arc forms a complete circle or annulus, as when |endAngle - startAngle| ≥ τ, the pad angle is ignored.
+
+If the [inner radius](#arc_innerRadius) or angular span is small relative to the pad angle, it may not be possible to maintain parallel edges between adjacent arcs. In this case, the inner edge of the arc may collapse to a point, similar to a circular sector. For this reason, padding is typically only applied to annular sectors (*i.e.*, when innerRadius is positive), as shown in this diagram:
+
+[<img alt="Padded Circular Sectors" src="./img/padded-circular-sector.png" width="250" height="250">](https://observablehq.com/@d3/pie-settings)[<img alt="Padded Annular Sectors" src="./img/padded-annular-sector.png" width="250" height="250">](https://observablehq.com/@d3/pie-settings)
+
+The recommended minimum inner radius when using padding is outerRadius \* padAngle / sin(θ), where θ is the angular span of the smallest arc before padding. For example, if the outer radius is 200 pixels and the pad angle is 0.02 radians, a reasonable θ is 0.04 radians, and a reasonable inner radius is 100 pixels. See the [arc padding animation](https://observablehq.com/@d3/arc-pad-angle) for illustration.
+
+Often, the pad angle is not set directly on the arc generator, but is instead computed by the [pie generator](#pies) so as to ensure that the area of padded arcs is proportional to their value; see [*pie*.padAngle](#pie_padAngle). See the [pie padding animation](https://observablehq.com/@d3/arc-pad-angle) for illustration. If you apply a constant pad angle to the arc generator directly, it tends to subtract disproportionately from smaller arcs, introducing distortion.
+
+<a name="arc_padRadius" href="#arc_padRadius">#</a> <i>arc</i>.<b>padRadius</b>([<i>radius</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+If *radius* is specified, sets the pad radius to the specified function or number and returns this arc generator. If *radius* is not specified, returns the current pad radius accessor, which defaults to null, indicating that the pad radius should be automatically computed as sqrt([innerRadius](#arc_innerRadius) * innerRadius + [outerRadius](#arc_outerRadius) * outerRadius). The pad radius determines the fixed linear distance separating adjacent arcs, defined as padRadius * [padAngle](#arc_padAngle).
+
+<a name="arc_context" href="#arc_context">#</a> <i>arc</i>.<b>context</b>([<i>context</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+If *context* is specified, sets the context and returns this arc generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated arc](#_arc) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated arc is returned.
+
+<a name="arc_digits" href="#arc_digits">#</a> <i>arc</i>.<b>digits</b>([<i>digits</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/arc.js)
+
+If *digits* is specified, sets the maximum number of digits after the decimal separator and returns this arc generator. If *digits* is not specified, returns the current maximum fraction digits, which defaults to 3. This option only applies when the associated [*context*](#arc_context) is null, as when this arc generator is used to produce [path data](http://www.w3.org/TR/SVG/paths.html#PathData).
+
+### Pies
+
+The pie generator does not produce a shape directly, but instead computes the necessary angles to represent a tabular dataset as a pie or donut chart; these angles can then be passed to an [arc generator](#arcs).
+
+<a name="pie" href="#pie">#</a> d3.<b>pie</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/pie.js)
+
+Constructs a new pie generator with the default settings.
+
+<a name="_pie" href="#_pie">#</a> <i>pie</i>(<i>data</i>[, <i>arguments…</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/pie.js)
+
+Generates a pie for the given array of *data*, returning an array of objects representing each datum’s arc angles. Any additional *arguments* are arbitrary; they are simply propagated to the pie generator’s accessor functions along with the `this` object. The length of the returned array is the same as *data*, and each element *i* in the returned array corresponds to the element *i* in the input data. Each object in the returned array has the following properties:
+
+* `data` - the input datum; the corresponding element in the input data array.
+* `value` - the numeric [value](#pie_value) of the arc.
+* `index` - the zero-based [sorted index](#pie_sort) of the arc.
+* `startAngle` - the [start angle](#pie_startAngle) of the arc.
+* `endAngle` - the [end angle](#pie_endAngle) of the arc.
+* `padAngle` - the [pad angle](#pie_padAngle) of the arc.
+
+This representation is designed to work with the arc generator’s default [startAngle](#arc_startAngle), [endAngle](#arc_endAngle) and [padAngle](#arc_padAngle) accessors. The angular units are arbitrary, but if you plan to use the pie generator in conjunction with an [arc generator](#arcs), you should specify angles in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise.
+
+Given a small dataset of numbers, here is how to compute the arc angles to render this data as a pie chart:
+
+```js
+const data = [1, 1, 2, 3, 5, 8, 13, 21];
+const arcs = d3.pie()(data);
+```
+
+The first pair of parens, `pie()`, [constructs](#pie) a default pie generator. The second, `pie()(data)`, [invokes](#_pie) this generator on the dataset, returning an array of objects:
+
+```json
+[
+  {"data":  1, "value":  1, "index": 6, "startAngle": 6.050474740247008, "endAngle": 6.166830023713296, "padAngle": 0},
+  {"data":  1, "value":  1, "index": 7, "startAngle": 6.166830023713296, "endAngle": 6.283185307179584, "padAngle": 0},
+  {"data":  2, "value":  2, "index": 5, "startAngle": 5.817764173314431, "endAngle": 6.050474740247008, "padAngle": 0},
+  {"data":  3, "value":  3, "index": 4, "startAngle": 5.468698322915565, "endAngle": 5.817764173314431, "padAngle": 0},
+  {"data":  5, "value":  5, "index": 3, "startAngle": 4.886921905584122, "endAngle": 5.468698322915565, "padAngle": 0},
+  {"data":  8, "value":  8, "index": 2, "startAngle": 3.956079637853813, "endAngle": 4.886921905584122, "padAngle": 0},
+  {"data": 13, "value": 13, "index": 1, "startAngle": 2.443460952792061, "endAngle": 3.956079637853813, "padAngle": 0},
+  {"data": 21, "value": 21, "index": 0, "startAngle": 0.000000000000000, "endAngle": 2.443460952792061, "padAngle": 0}
+]
+```
+
+Note that the returned array is in the same order as the data, even though this pie chart is [sorted](#pie_sortValues) by descending value, starting with the arc for the last datum (value 21) at 12 o’clock.
+
+<a name="pie_value" href="#pie_value">#</a> <i>pie</i>.<b>value</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/pie.js)
+
+If *value* is specified, sets the value accessor to the specified function or number and returns this pie generator. If *value* is not specified, returns the current value accessor, which defaults to:
+
+```js
+function value(d) {
+  return d;
+}
+```
+
+When a pie is [generated](#_pie), the value accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default value accessor assumes that the input data are numbers, or that they are coercible to numbers using [valueOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf). If your data are not simply numbers, then you should specify an accessor that returns the corresponding numeric value for a given datum. For example:
+
+```js
+const data = [
+  {"number":  4, "name": "Locke"},
+  {"number":  8, "name": "Reyes"},
+  {"number": 15, "name": "Ford"},
+  {"number": 16, "name": "Jarrah"},
+  {"number": 23, "name": "Shephard"},
+  {"number": 42, "name": "Kwon"}
+];
+
+const arcs = d3.pie()
+    .value(d => d.number)
+    (data);
+```
+
+This is similar to [mapping](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) your data to values before invoking the pie generator:
+
+```js
+const arcs = d3.pie()(data.map(d => d.number));
+```
+
+The benefit of an accessor is that the input data remains associated with the returned objects, thereby making it easier to access other fields of the data, for example to set the color or to add text labels.
+
+<a name="pie_sort" href="#pie_sort">#</a> <i>pie</i>.<b>sort</b>([<i>compare</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/pie.js)
+
+If *compare* is specified, sets the data comparator to the specified function and returns this pie generator. If *compare* is not specified, returns the current data comparator, which defaults to null. If both the data comparator and the value comparator are null, then arcs are positioned in the original input order. Otherwise, the data is sorted according to the data comparator, and the resulting order is used. Setting the data comparator implicitly sets the [value comparator](#pie_sortValues) to null.
+
+The *compare* function takes two arguments *a* and *b*, each elements from the input data array. If the arc for *a* should be before the arc for *b*, then the comparator must return a number less than zero; if the arc for *a* should be after the arc for *b*, then the comparator must return a number greater than zero; returning zero means that the relative order of *a* and *b* is unspecified. For example, to sort arcs by their associated name:
+
+```js
+pie.sort((a, b) => a.name.localeCompare(b.name));
+```
+
+Sorting does not affect the order of the [generated arc array](#_pie) which is always in the same order as the input data array; it merely affects the computed angles of each arc. The first arc starts at the [start angle](#pie_startAngle) and the last arc ends at the [end angle](#pie_endAngle).
+
+<a name="pie_sortValues" href="#pie_sortValues">#</a> <i>pie</i>.<b>sortValues</b>([<i>compare</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/pie.js)
+
+If *compare* is specified, sets the value comparator to the specified function and returns this pie generator. If *compare* is not specified, returns the current value comparator, which defaults to descending value. The default value comparator is implemented as:
+
+```js
+function compare(a, b) {
+  return b - a;
+}
+```
+
+If both the data comparator and the value comparator are null, then arcs are positioned in the original input order. Otherwise, the data is sorted according to the data comparator, and the resulting order is used. Setting the value comparator implicitly sets the [data comparator](#pie_sort) to null.
+
+The value comparator is similar to the [data comparator](#pie_sort), except the two arguments *a* and *b* are values derived from the input data array using the [value accessor](#pie_value), not the data elements. If the arc for *a* should be before the arc for *b*, then the comparator must return a number less than zero; if the arc for *a* should be after the arc for *b*, then the comparator must return a number greater than zero; returning zero means that the relative order of *a* and *b* is unspecified. For example, to sort arcs by ascending value:
+
+```js
+pie.sortValues((a, b) => a - b);
+```
+
+Sorting does not affect the order of the [generated arc array](#_pie) which is always in the same order as the input data array; it merely affects the computed angles of each arc. The first arc starts at the [start angle](#pie_startAngle) and the last arc ends at the [end angle](#pie_endAngle).
+
+<a name="pie_startAngle" href="#pie_startAngle">#</a> <i>pie</i>.<b>startAngle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/pie.js)
+
+If *angle* is specified, sets the overall start angle of the pie to the specified function or number and returns this pie generator. If *angle* is not specified, returns the current start angle accessor, which defaults to:
+
+```js
+function startAngle() {
+  return 0;
+}
+```
+
+The start angle here means the *overall* start angle of the pie, *i.e.*, the start angle of the first arc. The start angle accessor is invoked once, being passed the same arguments and `this` context as the [pie generator](#_pie). The units of *angle* are arbitrary, but if you plan to use the pie generator in conjunction with an [arc generator](#arcs), you should specify an angle in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise.
+
+<a name="pie_endAngle" href="#pie_endAngle">#</a> <i>pie</i>.<b>endAngle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/pie.js)
+
+If *angle* is specified, sets the overall end angle of the pie to the specified function or number and returns this pie generator. If *angle* is not specified, returns the current end angle accessor, which defaults to:
+
+```js
+function endAngle() {
+  return 2 * Math.PI;
+}
+```
+
+The end angle here means the *overall* end angle of the pie, *i.e.*, the end angle of the last arc. The end angle accessor is invoked once, being passed the same arguments and `this` context as the [pie generator](#_pie). The units of *angle* are arbitrary, but if you plan to use the pie generator in conjunction with an [arc generator](#arcs), you should specify an angle in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise.
+
+The value of the end angle is constrained to [startAngle](#pie_startAngle) ± τ, such that |endAngle - startAngle| ≤ τ.
+
+<a name="pie_padAngle" href="#pie_padAngle">#</a> <i>pie</i>.<b>padAngle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/pie.js)
+
+If *angle* is specified, sets the pad angle to the specified function or number and returns this pie generator. If *angle* is not specified, returns the current pad angle accessor, which defaults to:
+
+```js
+function padAngle() {
+  return 0;
+}
+```
+
+The pad angle here means the angular separation between each adjacent arc. The total amount of padding reserved is the specified *angle* times the number of elements in the input data array, and at most |endAngle - startAngle|; the remaining space is then divided proportionally by [value](#pie_value) such that the relative area of each arc is preserved. See the [pie padding animation](https://observablehq.com/@d3/arc-pad-angle) for illustration. The pad angle accessor is invoked once, being passed the same arguments and `this` context as the [pie generator](#_pie). The units of *angle* are arbitrary, but if you plan to use the pie generator in conjunction with an [arc generator](#arcs), you should specify an angle in radians.
+
+### Lines
+
+[<img width="295" height="154" alt="Line Chart" src="./img/line.png">](https://observablehq.com/@d3/line-chart)
+
+The line generator produces a [spline](https://en.wikipedia.org/wiki/Spline_\(mathematics\)) or [polyline](https://en.wikipedia.org/wiki/Polygonal_chain), as in a line chart. Lines also appear in many other visualization types, such as the links in [hierarchical edge bundling](https://observablehq.com/@d3/hierarchical-edge-bundling).
+
+<a name="line" href="#line">#</a> d3.<b>line</b>([<i>x</i>][, <i>y</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)
+
+Constructs a new line generator with the default settings. If *x* or *y* are specified, sets the corresponding accessors to the specified function or number and returns this line generator.
+
+<a name="_line" href="#_line">#</a> <i>line</i>(<i>data</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)
+
+Generates a line for the given array of *data*. Depending on this line generator’s associated [curve](#line_curve), the given input *data* may need to be sorted by *x*-value before being passed to the line generator. If the line generator has a [context](#line_context), then the line is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls and this function returns void. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string is returned.
+
+<a name="line_x" href="#line_x">#</a> <i>line</i>.<b>x</b>([<i>x</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)
+
+If *x* is specified, sets the x accessor to the specified function or number and returns this line generator. If *x* is not specified, returns the current x accessor, which defaults to:
+
+```js
+function x(d) {
+  return d[0];
+}
+```
+
+When a line is [generated](#_line), the x accessor will be invoked for each [defined](#line_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default x accessor assumes that the input data are two-element arrays of numbers. If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor. For example, if `x` is a [time scale](https://github.com/d3/d3-scale#time-scales) and `y` is a [linear scale](https://github.com/d3/d3-scale#linear-scales):
+
+```js
+const data = [
+  {date: new Date(2007, 3, 24), value: 93.24},
+  {date: new Date(2007, 3, 25), value: 95.35},
+  {date: new Date(2007, 3, 26), value: 98.84},
+  {date: new Date(2007, 3, 27), value: 99.92},
+  {date: new Date(2007, 3, 30), value: 99.80},
+  {date: new Date(2007, 4,  1), value: 99.47},
+  …
+];
+
+const line = d3.line()
+    .x(d => x(d.date))
+    .y(d => y(d.value));
+```
+
+<a name="line_y" href="#line_y">#</a> <i>line</i>.<b>y</b>([<i>y</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)
+
+If *y* is specified, sets the y accessor to the specified function or number and returns this line generator. If *y* is not specified, returns the current y accessor, which defaults to:
+
+```js
+function y(d) {
+  return d[1];
+}
+```
+
+When a line is [generated](#_line), the y accessor will be invoked for each [defined](#line_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default y accessor assumes that the input data are two-element arrays of numbers. See [*line*.x](#line_x) for more information.
+
+<a name="line_defined" href="#line_defined">#</a> <i>line</i>.<b>defined</b>([<i>defined</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)
+
+If *defined* is specified, sets the defined accessor to the specified function or boolean and returns this line generator. If *defined* is not specified, returns the current defined accessor, which defaults to:
+
+```js
+function defined() {
+  return true;
+}
+```
+
+The default accessor thus assumes that the input data is always defined. When a line is [generated](#_line), the defined accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. If the given element is defined (*i.e.*, if the defined accessor returns a truthy value for this element), the [x](#line_x) and [y](#line_y) accessors will subsequently be evaluated and the point will be added to the current line segment. Otherwise, the element will be skipped, the current line segment will be ended, and a new line segment will be generated for the next defined point. As a result, the generated line may have several discrete segments. For example:
+
+[<img src="./img/line-defined.png" width="480" height="250" alt="Line with Missing Data">](https://observablehq.com/@d3/line-with-missing-data)
+
+Note that if a line segment consists of only a single point, it may appear invisible unless rendered with rounded or square [line caps](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap). In addition, some curves such as [curveCardinalOpen](#curveCardinalOpen) only render a visible segment if it contains multiple points.
+
+<a name="line_curve" href="#line_curve">#</a> <i>line</i>.<b>curve</b>([<i>curve</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)
+
+If *curve* is specified, sets the [curve factory](#curves) and returns this line generator. If *curve* is not specified, returns the current curve factory, which defaults to [curveLinear](#curveLinear).
+
+<a name="line_context" href="#line_context">#</a> <i>line</i>.<b>context</b>([<i>context</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/line.js), [Examples](https://observablehq.com/@d3/d3-line)
+
+If *context* is specified, sets the context and returns this line generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated line](#_line) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated line is returned.
+
+<a name="line_digits" href="#line_digits">#</a> <i>line</i>.<b>digits</b>([<i>digits</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/line.js)
+
+If *digits* is specified, sets the maximum number of digits after the decimal separator and returns this line generator. If *digits* is not specified, returns the current maximum fraction digits, which defaults to 3. This option only applies when the associated [*context*](#line_context) is null, as when this line generator is used to produce [path data](http://www.w3.org/TR/SVG/paths.html#PathData).
+
+<a name="lineRadial" href="#lineRadial">#</a> d3.<b>lineRadial</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/lineRadial.js), [Examples](https://observablehq.com/@d3/d3-lineradial)
+
+<img alt="Radial Line" width="250" height="250" src="./img/line-radial.png">
+
+Constructs a new radial line generator with the default settings. A radial line generator is equivalent to the standard Cartesian [line generator](#line), except the [x](#line_x) and [y](#line_y) accessors are replaced with [angle](#lineRadial_angle) and [radius](#lineRadial_radius) accessors. Radial lines are always positioned relative to ⟨0,0⟩; use a transform (see: [SVG](http://www.w3.org/TR/SVG/coords.html#TransformAttribute), [Canvas](http://www.w3.org/TR/2dcontext/#transformations)) to change the origin.
+
+<a name="_lineRadial" href="#_lineRadial">#</a> <i>lineRadial</i>(<i>data</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/lineRadial.js#L4), [Examples](https://observablehq.com/@d3/d3-lineradial)
+
+Equivalent to [*line*](#_line).
+
+<a name="lineRadial_angle" href="#lineRadial_angle">#</a> <i>lineRadial</i>.<b>angle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/lineRadial.js#L7), [Examples](https://observablehq.com/@d3/d3-lineradial)
+
+Equivalent to [*line*.x](#line_x), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock).
+
+<a name="lineRadial_radius" href="#lineRadial_radius">#</a> <i>lineRadial</i>.<b>radius</b>([<i>radius</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/lineRadial.js#L8), [Examples](https://observablehq.com/@d3/d3-lineradial)
+
+Equivalent to [*line*.y](#line_y), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.
+
+<a name="lineRadial_defined" href="#lineRadial_defined">#</a> <i>lineRadial</i>.<b>defined</b>([<i>defined</i>])
+
+Equivalent to [*line*.defined](#line_defined).
+
+<a name="lineRadial_curve" href="#lineRadial_curve">#</a> <i>lineRadial</i>.<b>curve</b>([<i>curve</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/lineRadial.js), [Examples](https://observablehq.com/@d3/d3-lineradial)
+
+Equivalent to [*line*.curve](#line_curve). Note that [curveMonotoneX](#curveMonotoneX) or [curveMonotoneY](#curveMonotoneY) are not recommended for radial lines because they assume that the data is monotonic in *x* or *y*, which is typically untrue of radial lines.
+
+<a name="lineRadial_context" href="#lineRadial_context">#</a> <i>lineRadial</i>.<b>context</b>([<i>context</i>])
+
+Equivalent to [*line*.context](#line_context).
+
+### Areas
+
+[<img alt="Area Chart" width="295" height="154" src="./img/area.png">](https://observablehq.com/@d3/area-chart)[<img alt="Stacked Area Chart" width="295" height="154" src="./img/area-stacked.png">](https://observablehq.com/@d3/stacked-area-chart)[<img alt="Difference Chart" width="295" height="154" src="./img/area-difference.png">](https://observablehq.com/@d3/difference-chart)
+
+The area generator produces an area, as in an area chart. An area is defined by two bounding [lines](#lines), either splines or polylines. Typically, the two lines share the same [*x*-values](#area_x) ([x0](#area_x0) = [x1](#area_x1)), differing only in *y*-value ([y0](#area_y0) and [y1](#area_y1)); most commonly, y0 is defined as a constant representing [zero](http://www.vox.com/2015/11/19/9758062/y-axis-zero-chart). The first line (the <i>topline</i>) is defined by x1 and y1 and is rendered first; the second line (the <i>baseline</i>) is defined by x0 and y0 and is rendered second, with the points in reverse order. With a [curveLinear](#curveLinear) [curve](#area_curve), this produces a clockwise polygon.
+
+<a name="area" href="#area">#</a> d3.<b>area</b>([<i>x</i>][, <i>y0</i>][, <i>y1</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+Constructs a new area generator with the default settings. If *x*, *y0* or *y1* are specified, sets the corresponding accessors to the specified function or number and returns this area generator.
+
+<a name="_area" href="#_area">#</a> <i>area</i>(<i>data</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+Generates an area for the given array of *data*. Depending on this area generator’s associated [curve](#area_curve), the given input *data* may need to be sorted by *x*-value before being passed to the area generator. If the area generator has a [context](#line_context), then the area is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls and this function returns void. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string is returned.
+
+<a name="area_x" href="#area_x">#</a> <i>area</i>.<b>x</b>([<i>x</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *x* is specified, sets [x0](#area_x0) to *x* and [x1](#area_x1) to null and returns this area generator. If *x* is not specified, returns the current x0 accessor.
+
+<a name="area_x0" href="#area_x0">#</a> <i>area</i>.<b>x0</b>([<i>x</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *x* is specified, sets the x0 accessor to the specified function or number and returns this area generator. If *x* is not specified, returns the current x0 accessor, which defaults to:
+
+```js
+function x(d) {
+  return d[0];
+}
+```
+
+When an area is [generated](#_area), the x0 accessor will be invoked for each [defined](#area_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. The default x0 accessor assumes that the input data are two-element arrays of numbers. If your data are in a different format, or if you wish to transform the data before rendering, then you should specify a custom accessor. For example, if `x` is a [time scale](https://github.com/d3/d3-scale#time-scales) and `y` is a [linear scale](https://github.com/d3/d3-scale#linear-scales):
+
+```js
+const data = [
+  {date: new Date(2007, 3, 24), value: 93.24},
+  {date: new Date(2007, 3, 25), value: 95.35},
+  {date: new Date(2007, 3, 26), value: 98.84},
+  {date: new Date(2007, 3, 27), value: 99.92},
+  {date: new Date(2007, 3, 30), value: 99.80},
+  {date: new Date(2007, 4,  1), value: 99.47},
+  …
+];
+
+const area = d3.area()
+    .x(d => x(d.date))
+    .y1(d => y(d.value))
+    .y0(y(0));
+```
+
+<a name="area_x1" href="#area_x1">#</a> <i>area</i>.<b>x1</b>([<i>x</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *x* is specified, sets the x1 accessor to the specified function or number and returns this area generator. If *x* is not specified, returns the current x1 accessor, which defaults to null, indicating that the previously-computed [x0](#area_x0) value should be reused for the x1 value.
+
+When an area is [generated](#_area), the x1 accessor will be invoked for each [defined](#area_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. See [*area*.x0](#area_x0) for more information.
+
+<a name="area_y" href="#area_y">#</a> <i>area</i>.<b>y</b>([<i>y</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *y* is specified, sets [y0](#area_y0) to *y* and [y1](#area_y1) to null and returns this area generator. If *y* is not specified, returns the current y0 accessor.
+
+<a name="area_y0" href="#area_y0">#</a> <i>area</i>.<b>y0</b>([<i>y</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *y* is specified, sets the y0 accessor to the specified function or number and returns this area generator. If *y* is not specified, returns the current y0 accessor, which defaults to:
+
+```js
+function y() {
+  return 0;
+}
+```
+
+When an area is [generated](#_area), the y0 accessor will be invoked for each [defined](#area_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. See [*area*.x0](#area_x0) for more information.
+
+<a name="area_y1" href="#area_y1">#</a> <i>area</i>.<b>y1</b>([<i>y</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *y* is specified, sets the y1 accessor to the specified function or number and returns this area generator. If *y* is not specified, returns the current y1 accessor, which defaults to:
+
+```js
+function y(d) {
+  return d[1];
+}
+```
+
+A null accessor is also allowed, indicating that the previously-computed [y0](#area_y0) value should be reused for the y1 value. When an area is [generated](#_area), the y1 accessor will be invoked for each [defined](#area_defined) element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. See [*area*.x0](#area_x0) for more information.
+
+<a name="area_defined" href="#area_defined">#</a> <i>area</i>.<b>defined</b>([<i>defined</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *defined* is specified, sets the defined accessor to the specified function or boolean and returns this area generator. If *defined* is not specified, returns the current defined accessor, which defaults to:
+
+```js
+function defined() {
+  return true;
+}
+```
+
+The default accessor thus assumes that the input data is always defined. When an area is [generated](#_area), the defined accessor will be invoked for each element in the input data array, being passed the element `d`, the index `i`, and the array `data` as three arguments. If the given element is defined (*i.e.*, if the defined accessor returns a truthy value for this element), the [x0](#area_x0), [x1](#area_x1), [y0](#area_y0) and [y1](#area_y1) accessors will subsequently be evaluated and the point will be added to the current area segment. Otherwise, the element will be skipped, the current area segment will be ended, and a new area segment will be generated for the next defined point. As a result, the generated area may have several discrete segments. For example:
+
+[<img src="./img/area-defined.png" width="480" height="250" alt="Area with Missing Data">](https://observablehq.com/@d3/area-with-missing-data)
+
+Note that if an area segment consists of only a single point, it may appear invisible unless rendered with rounded or square [line caps](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap). In addition, some curves such as [curveCardinalOpen](#curveCardinalOpen) only render a visible segment if it contains multiple points.
+
+<a name="area_curve" href="#area_curve">#</a> <i>area</i>.<b>curve</b>([<i>curve</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *curve* is specified, sets the [curve factory](#curves) and returns this area generator. If *curve* is not specified, returns the current curve factory, which defaults to [curveLinear](#curveLinear).
+
+<a name="area_context" href="#area_context">#</a> <i>area</i>.<b>context</b>([<i>context</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *context* is specified, sets the context and returns this area generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated area](#_area) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated area is returned.
+
+<a name="area_digits" href="#area_digits">#</a> <i>area</i>.<b>digits</b>([<i>digits</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+If *digits* is specified, sets the maximum number of digits after the decimal separator and returns this area generator. If *digits* is not specified, returns the current maximum fraction digits, which defaults to 3. This option only applies when the associated [*context*](#area_context) is null, as when this area generator is used to produce [path data](http://www.w3.org/TR/SVG/paths.html#PathData).
+
+<a name="area_lineX0" href="#area_lineX0">#</a> <i>area</i>.<b>lineX0</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+<br><a name="area_lineY0" href="#area_lineY0">#</a> <i>area</i>.<b>lineY0</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+Returns a new [line generator](#lines) that has this area generator’s current [defined accessor](#area_defined), [curve](#area_curve) and [context](#area_context). The line’s [*x*-accessor](#line_x) is this area’s [*x0*-accessor](#area_x0), and the line’s [*y*-accessor](#line_y) is this area’s [*y0*-accessor](#area_y0).
+
+<a name="area_lineX1" href="#area_lineX1">#</a> <i>area</i>.<b>lineX1</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+Returns a new [line generator](#lines) that has this area generator’s current [defined accessor](#area_defined), [curve](#area_curve) and [context](#area_context). The line’s [*x*-accessor](#line_x) is this area’s [*x1*-accessor](#area_x1), and the line’s [*y*-accessor](#line_y) is this area’s [*y0*-accessor](#area_y0).
+
+<a name="area_lineY1" href="#area_lineY1">#</a> <i>area</i>.<b>lineY1</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/area.js)
+
+Returns a new [line generator](#lines) that has this area generator’s current [defined accessor](#area_defined), [curve](#area_curve) and [context](#area_context). The line’s [*x*-accessor](#line_x) is this area’s [*x0*-accessor](#area_x0), and the line’s [*y*-accessor](#line_y) is this area’s [*y1*-accessor](#area_y1).
+
+<a name="areaRadial" href="#areaRadial">#</a> d3.<b>areaRadial</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+<img alt="Radial Area" width="250" height="250" src="./img/area-radial.png">
+
+Constructs a new radial area generator with the default settings. A radial area generator is equivalent to the standard Cartesian [area generator](#area), except the [x](#area_x) and [y](#area_y) accessors are replaced with [angle](#areaRadial_angle) and [radius](#areaRadial_radius) accessors. Radial areas are always positioned relative to ⟨0,0⟩; use a transform (see: [SVG](http://www.w3.org/TR/SVG/coords.html#TransformAttribute), [Canvas](http://www.w3.org/TR/2dcontext/#transformations)) to change the origin.
+
+<a name="_areaRadial" href="#_areaRadial">#</a> <i>areaRadial</i>(<i>data</i>)
+
+Equivalent to [*area*](#_area).
+
+<a name="areaRadial_angle" href="#areaRadial_angle">#</a> <i>areaRadial</i>.<b>angle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Equivalent to [*area*.x](#area_x), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock).
+
+<a name="areaRadial_startAngle" href="#areaRadial_startAngle">#</a> <i>areaRadial</i>.<b>startAngle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Equivalent to [*area*.x0](#area_x0), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock). Note: typically [angle](#areaRadial_angle) is used instead of setting separate start and end angles.
+
+<a name="areaRadial_endAngle" href="#areaRadial_endAngle">#</a> <i>areaRadial</i>.<b>endAngle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Equivalent to [*area*.x1](#area_x1), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock). Note: typically [angle](#areaRadial_angle) is used instead of setting separate start and end angles.
+
+<a name="areaRadial_radius" href="#areaRadial_radius">#</a> <i>areaRadial</i>.<b>radius</b>([<i>radius</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Equivalent to [*area*.y](#area_y), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.
+
+<a name="areaRadial_innerRadius" href="#areaRadial_innerRadius">#</a> <i>areaRadial</i>.<b>innerRadius</b>([<i>radius</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Equivalent to [*area*.y0](#area_y0), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.
+
+<a name="areaRadial_outerRadius" href="#areaRadial_outerRadius">#</a> <i>areaRadial</i>.<b>outerRadius</b>([<i>radius</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Equivalent to [*area*.y1](#area_y1), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.
+
+<a name="areaRadial_defined" href="#areaRadial_defined">#</a> <i>areaRadial</i>.<b>defined</b>([<i>defined</i>])
+
+Equivalent to [*area*.defined](#area_defined).
+
+<a name="areaRadial_curve" href="#areaRadial_curve">#</a> <i>areaRadial</i>.<b>curve</b>([<i>curve</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Equivalent to [*area*.curve](#area_curve). Note that [curveMonotoneX](#curveMonotoneX) or [curveMonotoneY](#curveMonotoneY) are not recommended for radial areas because they assume that the data is monotonic in *x* or *y*, which is typically untrue of radial areas.
+
+<a name="areaRadial_context" href="#areaRadial_context">#</a> <i>areaRadial</i>.<b>context</b>([<i>context</i>])
+
+Equivalent to [*line*.context](#line_context).
+
+<a name="areaRadial_lineStartAngle" href="#areaRadial_lineStartAngle">#</a> <i>areaRadial</i>.<b>lineStartAngle</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+<br><a name="areaRadial_lineInnerRadius" href="#areaRadial_lineInnerRadius">#</a> <i>areaRadial</i>.<b>lineInnerRadius</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Returns a new [radial line generator](#lineRadial) that has this radial area generator’s current [defined accessor](#areaRadial_defined), [curve](#areaRadial_curve) and [context](#areaRadial_context). The line’s [angle accessor](#lineRadial_angle) is this area’s [start angle accessor](#areaRadial_startAngle), and the line’s [radius accessor](#lineRadial_radius) is this area’s [inner radius accessor](#areaRadial_innerRadius).
+
+<a name="areaRadial_lineEndAngle" href="#areaRadial_lineEndAngle">#</a> <i>areaRadial</i>.<b>lineEndAngle</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Returns a new [radial line generator](#lineRadial) that has this radial area generator’s current [defined accessor](#areaRadial_defined), [curve](#areaRadial_curve) and [context](#areaRadial_context). The line’s [angle accessor](#lineRadial_angle) is this area’s [end angle accessor](#areaRadial_endAngle), and the line’s [radius accessor](#lineRadial_radius) is this area’s [inner radius accessor](#areaRadial_innerRadius).
+
+<a name="areaRadial_lineOuterRadius" href="#areaRadial_lineOuterRadius">#</a> <i>areaRadial</i>.<b>lineOuterRadius</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/areaRadial.js)
+
+Returns a new [radial line generator](#lineRadial) that has this radial area generator’s current [defined accessor](#areaRadial_defined), [curve](#areaRadial_curve) and [context](#areaRadial_context). The line’s [angle accessor](#lineRadial_angle) is this area’s [start angle accessor](#areaRadial_startAngle), and the line’s [radius accessor](#lineRadial_radius) is this area’s [outer radius accessor](#areaRadial_outerRadius).
+
+### Curves
+
+While [lines](#lines) are defined as a sequence of two-dimensional [*x*, *y*] points, and [areas](#areas) are similarly defined by a topline and a baseline, there remains the task of transforming this discrete representation into a continuous shape: *i.e.*, how to interpolate between the points. A variety of curves are provided for this purpose.
+
+Curves are typically not constructed or used directly, instead being passed to [*line*.curve](#line_curve) and [*area*.curve](#area_curve). For example:
+
+```js
+const line = d3.line(d => d.date, d => d.value)
+    .curve(d3.curveCatmullRom.alpha(0.5));
+```
+
+<a name="curveBasis" href="#curveBasis">#</a> d3.<b>curveBasis</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/basis.js)
+
+<img src="./img/basis.png" width="888" height="240" alt="basis">
+
+Produces a cubic [basis spline](https://en.wikipedia.org/wiki/B-spline) using the specified control points. The first and last points are triplicated such that the spline starts at the first point and ends at the last point, and is tangent to the line between the first and second points, and to the line between the penultimate and last points.
+
+<a name="curveBasisClosed" href="#curveBasisClosed">#</a> d3.<b>curveBasisClosed</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/basisClosed.js)
+
+<img src="./img/basisClosed.png" width="888" height="240" alt="basisClosed">
+
+Produces a closed cubic [basis spline](https://en.wikipedia.org/wiki/B-spline) using the specified control points. When a line segment ends, the first three control points are repeated, producing a closed loop with C2 continuity.
+
+<a name="curveBasisOpen" href="#curveBasisOpen">#</a> d3.<b>curveBasisOpen</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/basisOpen.js)
+
+<img src="./img/basisOpen.png" width="888" height="240" alt="basisOpen">
+
+Produces a cubic [basis spline](https://en.wikipedia.org/wiki/B-spline) using the specified control points. Unlike [basis](#basis), the first and last points are not repeated, and thus the curve typically does not intersect these points.
+
+<a name="curveBumpX" href="#curveBumpX">#</a> d3.<b>curveBumpX</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/bump.js)
+
+<img src="./img/bumpX.png" width="888" height="240" alt="bumpX">
+
+Produces a Bézier curve between each pair of points, with horizontal tangents at each point.
+
+<a name="curveBumpY" href="#curveBumpY">#</a> d3.<b>curveBumpY</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/bump.js)
+
+<img src="./img/bumpY.png" width="888" height="240" alt="bumpY">
+
+Produces a Bézier curve between each pair of points, with vertical tangents at each point.
+
+<a name="curveBundle" href="#curveBundle">#</a> d3.<b>curveBundle</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/bundle.js)
+
+<img src="./img/bundle.png" width="888" height="240" alt="bundle">
+
+Produces a straightened cubic [basis spline](https://en.wikipedia.org/wiki/B-spline) using the specified control points, with the spline straightened according to the curve’s [*beta*](#curveBundle_beta), which defaults to 0.85. This curve is typically used in [hierarchical edge bundling](https://observablehq.com/@d3/hierarchical-edge-bundling) to disambiguate connections, as proposed by [Danny Holten](https://www.win.tue.nl/vis1/home/dholten/) in [Hierarchical Edge Bundles: Visualization of Adjacency Relations in Hierarchical Data](https://www.win.tue.nl/vis1/home/dholten/papers/bundles_infovis.pdf). This curve does not implement [*curve*.areaStart](#curve_areaStart) and [*curve*.areaEnd](#curve_areaEnd); it is intended to work with [d3.line](#lines), not [d3.area](#areas).
+
+<a name="curveBundle_beta" href="#curveBundle_beta">#</a> <i>bundle</i>.<b>beta</b>(<i>beta</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/bundle.js)
+
+Returns a bundle curve with the specified *beta* in the range [0, 1], representing the bundle strength. If *beta* equals zero, a straight line between the first and last point is produced; if *beta* equals one, a standard [basis](#basis) spline is produced. For example:
+
+```js
+const line = d3.line().curve(d3.curveBundle.beta(0.5));
+```
+
+<a name="curveCardinal" href="#curveCardinal">#</a> d3.<b>curveCardinal</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/cardinal.js)
+
+<img src="./img/cardinal.png" width="888" height="240" alt="cardinal">
+
+Produces a cubic [cardinal spline](https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline) using the specified control points, with one-sided differences used for the first and last piece. The default [tension](#curveCardinal_tension) is 0.
+
+<a name="curveCardinalClosed" href="#curveCardinalClosed">#</a> d3.<b>curveCardinalClosed</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/cardinalClosed.js)
+
+<img src="./img/cardinalClosed.png" width="888" height="240" alt="cardinalClosed">
+
+Produces a closed cubic [cardinal spline](https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline) using the specified control points. When a line segment ends, the first three control points are repeated, producing a closed loop. The default [tension](#curveCardinal_tension) is 0.
+
+<a name="curveCardinalOpen" href="#curveCardinalOpen">#</a> d3.<b>curveCardinalOpen</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/cardinalOpen.js)
+
+<img src="./img/cardinalOpen.png" width="888" height="240" alt="cardinalOpen">
+
+Produces a cubic [cardinal spline](https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline) using the specified control points. Unlike [curveCardinal](#curveCardinal), one-sided differences are not used for the first and last piece, and thus the curve starts at the second point and ends at the penultimate point. The default [tension](#curveCardinal_tension) is 0.
+
+<a name="curveCardinal_tension" href="#curveCardinal_tension">#</a> <i>cardinal</i>.<b>tension</b>(<i>tension</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/cardinalOpen.js)
+
+Returns a cardinal curve with the specified *tension* in the range [0, 1]. The *tension* determines the length of the tangents: a *tension* of one yields all zero tangents, equivalent to [curveLinear](#curveLinear); a *tension* of zero produces a uniform [Catmull–Rom](#curveCatmullRom) spline. For example:
+
+```js
+const line = d3.line().curve(d3.curveCardinal.tension(0.5));
+```
+
+<a name="curveCatmullRom" href="#curveCatmullRom">#</a> d3.<b>curveCatmullRom</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/catmullRom.js)
+
+<img src="./img/catmullRom.png" width="888" height="240" alt="catmullRom">
+
+Produces a cubic Catmull–Rom spline using the specified control points and the parameter [*alpha*](#curveCatmullRom_alpha), which defaults to 0.5, as proposed by Yuksel et al. in [On the Parameterization of Catmull–Rom Curves](http://www.cemyuksel.com/research/catmullrom_param/), with one-sided differences used for the first and last piece.
+
+<a name="curveCatmullRomClosed" href="#curveCatmullRomClosed">#</a> d3.<b>curveCatmullRomClosed</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/catmullRomClosed.js)
+
+<img src="./img/catmullRomClosed.png" width="888" height="330" alt="catmullRomClosed">
+
+Produces a closed cubic Catmull–Rom spline using the specified control points and the parameter [*alpha*](#curveCatmullRom_alpha), which defaults to 0.5, as proposed by Yuksel et al. When a line segment ends, the first three control points are repeated, producing a closed loop.
+
+<a name="curveCatmullRomOpen" href="#curveCatmullRomOpen">#</a> d3.<b>curveCatmullRomOpen</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/catmullRomOpen.js)
+
+<img src="./img/catmullRomOpen.png" width="888" height="240" alt="catmullRomOpen">
+
+Produces a cubic Catmull–Rom spline using the specified control points and the parameter [*alpha*](#curveCatmullRom_alpha), which defaults to 0.5, as proposed by Yuksel et al. Unlike [curveCatmullRom](#curveCatmullRom), one-sided differences are not used for the first and last piece, and thus the curve starts at the second point and ends at the penultimate point.
+
+<a name="curveCatmullRom_alpha" href="#curveCatmullRom_alpha">#</a> <i>catmullRom</i>.<b>alpha</b>(<i>alpha</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/catmullRom.js)
+
+Returns a cubic Catmull–Rom curve with the specified *alpha* in the range [0, 1]. If *alpha* is zero, produces a uniform spline, equivalent to [curveCardinal](#curveCardinal) with a tension of zero; if *alpha* is one, produces a chordal spline; if *alpha* is 0.5, produces a [centripetal spline](https://en.wikipedia.org/wiki/Centripetal_Catmull–Rom_spline). Centripetal splines are recommended to avoid self-intersections and overshoot. For example:
+
+```js
+const line = d3.line().curve(d3.curveCatmullRom.alpha(0.5));
+```
+
+<a name="curveLinear" href="#curveLinear">#</a> d3.<b>curveLinear</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/linear.js)
+
+<img src="./img/linear.png" width="888" height="240" alt="linear">
+
+Produces a polyline through the specified points.
+
+<a name="curveLinearClosed" href="#curveLinearClosed">#</a> d3.<b>curveLinearClosed</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/linearClosed.js)
+
+<img src="./img/linearClosed.png" width="888" height="240" alt="linearClosed">
+
+Produces a closed polyline through the specified points by repeating the first point when the line segment ends.
+
+<a name="curveMonotoneX" href="#curveMonotoneX">#</a> d3.<b>curveMonotoneX</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/monotone.js)
+
+<img src="./img/monotoneX.png" width="888" height="240" alt="monotoneX">
+
+Produces a cubic spline that [preserves monotonicity](https://en.wikipedia.org/wiki/Monotone_cubic_interpolation) in *y*, assuming monotonicity in *x*, as proposed by Steffen in [A simple method for monotonic interpolation in one dimension](http://adsabs.harvard.edu/full/1990A%26A...239..443S): “a smooth curve with continuous first-order derivatives that passes through any given set of data points without spurious oscillations. Local extrema can occur only at grid points where they are given by the data, but not in between two adjacent grid points.”
+
+<a name="curveMonotoneY" href="#curveMonotoneY">#</a> d3.<b>curveMonotoneY</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/monotone.js)
+
+<img src="./img/monotoneY.png" width="888" height="240" alt="monotoneY">
+
+Produces a cubic spline that [preserves monotonicity](https://en.wikipedia.org/wiki/Monotone_cubic_interpolation) in *x*, assuming monotonicity in *y*, as proposed by Steffen in [A simple method for monotonic interpolation in one dimension](http://adsabs.harvard.edu/full/1990A%26A...239..443S): “a smooth curve with continuous first-order derivatives that passes through any given set of data points without spurious oscillations. Local extrema can occur only at grid points where they are given by the data, but not in between two adjacent grid points.”
+
+<a name="curveNatural" href="#curveNatural">#</a> d3.<b>curveNatural</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/natural.js)
+
+<img src="./img/natural.png" width="888" height="240" alt="natural">
+
+Produces a [natural](https://en.wikipedia.org/wiki/Spline_interpolation) [cubic spline](http://mathworld.wolfram.com/CubicSpline.html) with the second derivative of the spline set to zero at the endpoints.
+
+<a name="curveStep" href="#curveStep">#</a> d3.<b>curveStep</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/step.js)
+
+<img src="./img/step.png" width="888" height="240" alt="step">
+
+Produces a piecewise constant function (a [step function](https://en.wikipedia.org/wiki/Step_function)) consisting of alternating horizontal and vertical lines. The *y*-value changes at the midpoint of each pair of adjacent *x*-values.
+
+<a name="curveStepAfter" href="#curveStepAfter">#</a> d3.<b>curveStepAfter</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/step.js)
+
+<img src="./img/stepAfter.png" width="888" height="240" alt="stepAfter">
+
+Produces a piecewise constant function (a [step function](https://en.wikipedia.org/wiki/Step_function)) consisting of alternating horizontal and vertical lines. The *y*-value changes after the *x*-value.
+
+<a name="curveStepBefore" href="#curveStepBefore">#</a> d3.<b>curveStepBefore</b>(<i>context</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/step.js)
+
+<img src="./img/stepBefore.png" width="888" height="240" alt="stepBefore">
+
+Produces a piecewise constant function (a [step function](https://en.wikipedia.org/wiki/Step_function)) consisting of alternating horizontal and vertical lines. The *y*-value changes before the *x*-value.
+
+### Custom Curves
+
+Curves are typically not used directly, instead being passed to [*line*.curve](#line_curve) and [*area*.curve](#area_curve). However, you can define your own curve implementation should none of the built-in curves satisfy your needs using the following interface. You can also use this low-level interface with a built-in curve type as an alternative to the line and area generators.
+
+<a name="curve_areaStart" href="#curve_areaStart">#</a> <i>curve</i>.<b>areaStart</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/step.js#L7)
+
+Indicates the start of a new area segment. Each area segment consists of exactly two [line segments](#curve_lineStart): the topline, followed by the baseline, with the baseline points in reverse order.
+
+<a name="curve_areaEnd" href="#curve_areaEnd">#</a> <i>curve</i>.<b>areaEnd</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/step.js)
+
+Indicates the end of the current area segment.
+
+<a name="curve_lineStart" href="#curve_lineStart">#</a> <i>curve</i>.<b>lineStart</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/step.js)
+
+Indicates the start of a new line segment. Zero or more [points](#curve_point) will follow.
+
+<a name="curve_lineEnd" href="#curve_lineEnd">#</a> <i>curve</i>.<b>lineEnd</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/step.js)
+
+Indicates the end of the current line segment.
+
+<a name="curve_point" href="#curve_point">#</a> <i>curve</i>.<b>point</b>(<i>x</i>, <i>y</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/curve/step.js)
+
+Indicates a new point in the current line segment with the given *x*- and *y*-values.
+
+### Links
+
+[<img alt="Tidy Tree" src="https://raw.githubusercontent.com/d3/d3-hierarchy/master/img/tree.png">](https://observablehq.com/@d3/tidy-tree)
+
+The **link** shape generates a smooth cubic Bézier curve from a source point to a target point. The tangents of the curve at the start and end are either [vertical](#linkVertical), [horizontal](#linkHorizontal) or [radial](#linkRadial).
+
+<a name="link" href="#link">#</a> d3.<b>link</b>(<i>curve</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+Returns a new [link generator](#_link) using the specified <i>curve</i>. For example, to visualize [links](https://github.com/d3/d3-hierarchy/blob/master/README.md#node_links) in a [tree diagram](https://github.com/d3/d3-hierarchy/blob/master/README.md#tree) rooted on the top edge of the display, you might say:
+
+```js
+const link = d3.link(d3.curveBumpY)
+    .x(d => d.x)
+    .y(d => d.y);
+```
+
+<a name="linkVertical" href="#linkVertical">#</a> d3.<b>linkVertical</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+Shorthand for [d3.link](#link) with [d3.curveBumpY](#curveBumpY); suitable for visualizing [links](https://github.com/d3/d3-hierarchy/blob/master/README.md#node_links) in a [tree diagram](https://github.com/d3/d3-hierarchy/blob/master/README.md#tree) rooted on the top edge of the display. Equivalent to:
+
+```js
+const link = d3.link(d3.curveBumpY);
+```
+
+<a name="linkHorizontal" href="#linkHorizontal">#</a> d3.<b>linkHorizontal</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+Shorthand for [d3.link](#link) with [d3.curveBumpX](#curveBumpX); suitable for visualizing [links](https://github.com/d3/d3-hierarchy/blob/master/README.md#node_links) in a [tree diagram](https://github.com/d3/d3-hierarchy/blob/master/README.md#tree) rooted on the left edge of the display. Equivalent to:
+
+```js
+const link = d3.link(d3.curveBumpX);
+```
+
+<a href="#_link" name="_link">#</a> <i>link</i>(<i>arguments…</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+Generates a link for the given *arguments*. The *arguments* are arbitrary; they are simply propagated to the link generator’s accessor functions along with the `this` object. For example, with the default settings, an object expected:
+
+```js
+link({
+  source: [100, 100],
+  target: [300, 300]
+});
+```
+
+<a name="link_source" href="#link_source">#</a> <i>link</i>.<b>source</b>([<i>source</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+If *source* is specified, sets the source accessor to the specified function and returns this link generator. If *source* is not specified, returns the current source accessor, which defaults to:
+
+```js
+function source(d) {
+  return d.source;
+}
+```
+
+<a name="link_target" href="#link_target">#</a> <i>link</i>.<b>target</b>([<i>target</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+If *target* is specified, sets the target accessor to the specified function and returns this link generator. If *target* is not specified, returns the current target accessor, which defaults to:
+
+```js
+function target(d) {
+  return d.target;
+}
+```
+
+<a name="link_x" href="#link_x">#</a> <i>link</i>.<b>x</b>([<i>x</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+If *x* is specified, sets the *x*-accessor to the specified function or number and returns this link generator. If *x* is not specified, returns the current *x*-accessor, which defaults to:
+
+```js
+function x(d) {
+  return d[0];
+}
+```
+
+<a name="link_y" href="#link_y">#</a> <i>link</i>.<b>y</b>([<i>y</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+If *y* is specified, sets the *y*-accessor to the specified function or number and returns this link generator. If *y* is not specified, returns the current *y*-accessor, which defaults to:
+
+```js
+function y(d) {
+  return d[1];
+}
+```
+
+<a name="link_context" href="#link_context">#</a> <i>link</i>.<b>context</b>([<i>context</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+If *context* is specified, sets the context and returns this link generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated link](#_link) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated link is returned. See also [d3-path](https://github.com/d3/d3-path).
+
+<a name="link_digits" href="#link_digits">#</a> <i>link</i>.<b>digits</b>([<i>digits</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+If *digits* is specified, sets the maximum number of digits after the decimal separator and returns this link generator. If *digits* is not specified, returns the current maximum fraction digits, which defaults to 3. This option only applies when the associated [*context*](#link_context) is null, as when this link generator is used to produce [path data](http://www.w3.org/TR/SVG/paths.html#PathData).
+
+<a name="linkRadial" href="#linkRadial">#</a> d3.<b>linkRadial</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+Returns a new [link generator](#_link) with radial tangents. For example, to visualize [links](https://github.com/d3/d3-hierarchy/blob/master/README.md#node_links) in a [tree diagram](https://github.com/d3/d3-hierarchy/blob/master/README.md#tree) rooted in the center of the display, you might say:
+
+```js
+const link = d3.linkRadial()
+    .angle(d => d.x)
+    .radius(d => d.y);
+```
+
+<a name="linkRadial_angle" href="#linkRadial_angle">#</a> <i>linkRadial</i>.<b>angle</b>([<i>angle</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+Equivalent to [*link*.x](#link_x), except the accessor returns the angle in radians, with 0 at -*y* (12 o’clock).
+
+<a name="linkRadial_radius" href="#linkRadial_radius">#</a> <i>linkRadial</i>.<b>radius</b>([<i>radius</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/link.js)
+
+Equivalent to [*link*.y](#link_y), except the accessor returns the radius: the distance from the origin ⟨0,0⟩.
+
+### Symbols
+
+Symbols provide a categorical shape encoding as is commonly used in scatterplots. Symbols are always centered at ⟨0,0⟩; use a transform (see: [SVG](http://www.w3.org/TR/SVG/coords.html#TransformAttribute), [Canvas](http://www.w3.org/TR/2dcontext/#transformations)) to move the symbol to a different position.
+
+<a name="symbol" href="#symbol">#</a> d3.<b>symbol</b>([<i>type</i>][, <i>size</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol.js), [Examples](https://observablehq.com/@d3/fitted-symbols)
+
+Constructs a new symbol generator of the specified [type](#symbol_type) and [size](#symbol_size). If not specified, *type* defaults to a circle, and *size* defaults to 64.
+
+<a name="_symbol" href="#_symbol">#</a> <i>symbol</i>(<i>arguments</i>…) · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol.js)
+
+Generates a symbol for the given *arguments*. The *arguments* are arbitrary; they are simply propagated to the symbol generator’s accessor functions along with the `this` object. For example, with the default settings, no arguments are needed to produce a circle with area 64 square pixels. If the symbol generator has a [context](#symbol_context), then the symbol is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls and this function returns void. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string is returned.
+
+<a name="symbol_type" href="#symbol_type">#</a> <i>symbol</i>.<b>type</b>([<i>type</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol.js)
+
+If *type* is specified, sets the symbol type to the specified function or symbol type and returns this symbol generator. If *type* is a function, the symbol generator’s arguments and *this* are passed through. (See [*selection*.attr](https://github.com/d3/d3-selection/blob/master/README.md#selection_attr) if you are using d3-selection.) If *type* is not specified, returns the current symbol type accessor, which defaults to:
+
+```js
+function type() {
+  return circle;
+}
+```
+
+See [symbolsFill](#symbolsFill) and [symbolsStroke](#symbolsStroke) for built-in symbol types. To implement a custom symbol type, pass an object that implements [*symbolType*.draw](#symbolType_draw).
+
+<a name="symbol_size" href="#symbol_size">#</a> <i>symbol</i>.<b>size</b>([<i>size</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol.js)
+
+If *size* is specified, sets the size to the specified function or number and returns this symbol generator. If *size* is a function, the symbol generator’s arguments and *this* are passed through. (See [*selection*.attr](https://github.com/d3/d3-selection/blob/master/README.md#selection_attr) if you are using d3-selection.) If *size* is not specified, returns the current size accessor, which defaults to:
+
+```js
+function size() {
+  return 64;
+}
+```
+
+Specifying the size as a function is useful for constructing a scatterplot with a size encoding. If you wish to scale the symbol to fit a given bounding box, rather than by area, try [SVG’s getBBox](https://observablehq.com/d/1fac2626b9e1b65f).
+
+<a name="symbol_context" href="#symbol_context">#</a> <i>symbol</i>.<b>context</b>([<i>context</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol.js)
+
+If *context* is specified, sets the context and returns this symbol generator. If *context* is not specified, returns the current context, which defaults to null. If the context is not null, then the [generated symbol](#_symbol) is rendered to this context as a sequence of [path method](http://www.w3.org/TR/2dcontext/#canvaspathmethods) calls. Otherwise, a [path data](http://www.w3.org/TR/SVG/paths.html#PathData) string representing the generated symbol is returned.
+
+<a name="symbol_digits" href="#symbol_digits">#</a> <i>symbol</i>.<b>digits</b>([<i>digits</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol.js)
+
+If *digits* is specified, sets the maximum number of digits after the decimal separator and returns this symbol generator. If *digits* is not specified, returns the current maximum fraction digits, which defaults to 3. This option only applies when the associated [*context*](#symbol_context) is null, as when this symbol generator is used to produce [path data](http://www.w3.org/TR/SVG/paths.html#PathData).
+
+<a name="symbolsFill" href="#symbolsFill">#</a> d3.<b>symbolsFill</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol.js)
+
+<a href="#symbolCircle"><img src="./img/circle.png" width="100" height="100"></a><a href="#symbolCross"><img src="./img/cross.png" width="100" height="100"></a><a href="#symbolDiamond"><img src="./img/diamond.png" width="100" height="100"></a><a href="#symbolSquare"><img src="./img/square.png" width="100" height="100"></a><a href="#symbolStar"><img src="./img/star.png" width="100" height="100"></a><a href="#symbolTriangle"><img src="./img/triangle.png" width="100" height="100"><a href="#symbolWye"><img src="./img/wye.png" width="100" height="100"></a>
+
+An array containing a set of symbol types designed for filling: [circle](#symbolCircle), [cross](#symbolCross), [diamond](#symbolDiamond), [square](#symbolSquare), [star](#symbolStar), [triangle](#symbolTriangle), and [wye](#symbolWye). Useful for constructing the range of an [ordinal scale](https://github.com/d3/d3-scale#ordinal-scales) should you wish to use a shape encoding for categorical data.
+
+<a name="symbolsStroke" href="#symbolsStroke">#</a> d3.<b>symbolsStroke</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol.js)
+
+An array containing a set of symbol types designed for stroking: [circle](#symbolCircle), [plus](#symbolPlus), [times](#symbolTimes), [triangle2](#symbolTriangle2), [asterisk](#symbolAsterisk), [square2](#symbolSquare2), and [diamond2](#symbolDiamond2). Useful for constructing the range of an [ordinal scale](https://github.com/d3/d3-scale#ordinal-scales) should you wish to use a shape encoding for categorical data.
+
+<a name="symbolAsterisk" href="#symbolAsterisk">#</a> d3.<b>symbolAsterisk</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/asterisk.js)
+
+The asterisk symbol type; intended for stroking.
+
+<a name="symbolCircle" href="#symbolCircle">#</a> d3.<b>symbolCircle</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/circle.js)
+
+The circle symbol type; intended for either filling or stroking.
+
+<a name="symbolCross" href="#symbolCross">#</a> d3.<b>symbolCross</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/cross.js)
+
+The Greek cross symbol type, with arms of equal length; intended for filling.
+
+<a name="symbolDiamond" href="#symbolDiamond">#</a> d3.<b>symbolDiamond</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/diamond.js)
+
+The rhombus symbol type; intended for filling.
+
+<a name="symbolDiamond2" href="#symbolDiamond2">#</a> d3.<b>symbolDiamond2</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/diamond.js)
+
+The rotated square symbol type; intended for stroking.
+
+<a name="symbolPlus" href="#symbolPlus">#</a> d3.<b>symbolPlus</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/plus.js)
+
+The plus symbol type; intended for stroking.
+
+<a name="symbolSquare" href="#symbolSquare">#</a> d3.<b>symbolSquare</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/square.js)
+
+The square symbol type; intended for filling.
+
+<a name="symbolSquare2" href="#symbolSquare2">#</a> d3.<b>symbolSquare2</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/square2.js)
+
+The square2 symbol type; intended for stroking.
+
+<a name="symbolStar" href="#symbolStar">#</a> d3.<b>symbolStar</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/star.js)
+
+The pentagonal star (pentagram) symbol type; intended for filling.
+
+<a name="symbolTriangle" href="#symbolTriangle">#</a> d3.<b>symbolTriangle</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/triangle.js)
+
+The up-pointing triangle symbol type; intended for filling.
+
+<a name="symbolTriangle2" href="#symbolTriangle2">#</a> d3.<b>symbolTriangle2</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/triangle2.js)
+
+The up-pointing triangle symbol type; intended for stroking.
+
+<a name="symbolWye" href="#symbolWye">#</a> d3.<b>symbolWye</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/wye.js)
+
+The Y-shape symbol type; intended for filling.
+
+<a name="symbolTimes" href="#symbolTimes">#</a> d3.<b>symbolTimes</b> · [Source](https://github.com/d3/d3-shape/blob/main/src/symbol/times.js)
+
+The X-shape symbol type; intended for stroking.
+
+<a name="pointRadial" href="#pointRadial">#</a> d3.<b>pointRadial</b>(<i>angle</i>, <i>radius</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/pointRadial.js), [Examples](https://observablehq.com/@d3/radial-area-chart)
+
+Returns the point [<i>x</i>, <i>y</i>] for the given *angle* in radians, with 0 at -*y* (12 o’clock) and positive angles proceeding clockwise, and the given *radius*.
+
+### Custom Symbol Types
+
+Symbol types are typically not used directly, instead being passed to [*symbol*.type](#symbol_type). However, you can define your own symbol type implementation should none of the built-in types satisfy your needs using the following interface. You can also use this low-level interface with a built-in symbol type as an alternative to the symbol generator.
+
+<a name="symbolType_draw" href="#symbolType_draw">#</a> <i>symbolType</i>.<b>draw</b>(<i>context</i>, <i>size</i>)
+
+Renders this symbol type to the specified *context* with the specified *size* in square pixels. The *context* implements the [CanvasPathMethods](http://www.w3.org/TR/2dcontext/#canvaspathmethods) interface. (Note that this is a subset of the CanvasRenderingContext2D interface!)
+
+### Stacks
+
+[<img alt="Stacked Bar Chart" src="./img/stacked-bar.png" width="295" height="154">](https://observablehq.com/@d3/stacked-bar-chart)[<img alt="Streamgraph" src="./img/stacked-stream.png" width="295" height="154">](https://observablehq.com/@mbostock/streamgraph-transitions)
+
+Some shape types can be stacked, placing one shape adjacent to another. For example, a bar chart of monthly sales might be broken down into a multi-series bar chart by product category, stacking bars vertically. This is equivalent to subdividing a bar chart by an ordinal dimension (such as product category) and applying a color encoding.
+
+Stacked charts can show overall value and per-category value simultaneously; however, it is typically harder to compare across categories, as only the bottom layer of the stack is aligned. So, chose the [stack order](#stack_order) carefully, and consider a [streamgraph](#stackOffsetWiggle). (See also [grouped charts](https://observablehq.com/@d3/grouped-bar-chart).)
+
+Like the [pie generator](#pies), the stack generator does not produce a shape directly. Instead it computes positions which you can then pass to an [area generator](#areas) or use directly, say to position bars.
+
+<a name="stack" href="#stack">#</a> d3.<b>stack</b>() · [Source](https://github.com/d3/d3-shape/blob/main/src/stack.js)
+
+Constructs a new stack generator with the default settings.
+
+<a name="_stack" href="#_stack">#</a> <i>stack</i>(<i>data</i>[, <i>arguments…</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/stack.js)
+
+Generates a stack for the given array of *data*, returning an array representing each series. Any additional *arguments* are arbitrary; they are simply propagated to accessors along with the `this` object.
+
+The series are determined by the [keys accessor](#stack_keys); each series *i* in the returned array corresponds to the *i*th key. Each series is an array of points, where each point *j* corresponds to the *j*th element in the input *data*. Lastly, each point is represented as an array [*y0*, *y1*] where *y0* is the lower value (baseline) and *y1* is the upper value (topline); the difference between *y0* and *y1* corresponds to the computed [value](#stack_value) for this point. The key for each series is available as *series*.key, and the [index](#stack_order) as *series*.index. The input data element for each point is available as *point*.data.
+
+For example, consider the following table representing monthly sales of fruits:
+
+Month   | Apples | Bananas | Cherries | Durians
+--------|--------|---------|----------|---------
+ 1/2015 |   3840 |    1920 |      960 |     400
+ 2/2015 |   1600 |    1440 |      960 |     400
+ 3/2015 |    640 |     960 |      640 |     400
+ 4/2015 |    320 |     480 |      640 |     400
+
+This might be represented in JavaScript as an array of objects:
+
+```js
+const data = [
+  {month: new Date(2015, 0, 1), apples: 3840, bananas: 1920, cherries: 960, durians: 400},
+  {month: new Date(2015, 1, 1), apples: 1600, bananas: 1440, cherries: 960, durians: 400},
+  {month: new Date(2015, 2, 1), apples:  640, bananas:  960, cherries: 640, durians: 400},
+  {month: new Date(2015, 3, 1), apples:  320, bananas:  480, cherries: 640, durians: 400}
+];
+```
+
+To produce a stack for this data:
+
+```js
+const stack = d3.stack()
+    .keys(["apples", "bananas", "cherries", "durians"])
+    .order(d3.stackOrderNone)
+    .offset(d3.stackOffsetNone);
+
+const series = stack(data);
+```
+
+The resulting array has one element per *series*. Each series has one point per month, and each point has a lower and upper value defining the baseline and topline:
+
+```js
+[
+  [[   0, 3840], [   0, 1600], [   0,  640], [   0,  320]], // apples
+  [[3840, 5760], [1600, 3040], [ 640, 1600], [ 320,  800]], // bananas
+  [[5760, 6720], [3040, 4000], [1600, 2240], [ 800, 1440]], // cherries
+  [[6720, 7120], [4000, 4400], [2240, 2640], [1440, 1840]], // durians
+]
+```
+
+Each series in then typically passed to an [area generator](#areas) to render an area chart, or used to construct rectangles for a bar chart.
+
+<a name="stack_keys" href="#stack_keys">#</a> <i>stack</i>.<b>keys</b>([<i>keys</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/stack.js)
+
+If *keys* is specified, sets the keys accessor to the specified function or array and returns this stack generator. If *keys* is not specified, returns the current keys accessor, which defaults to the empty array. A series (layer) is [generated](#_stack) for each key. Keys are typically strings, but they may be arbitrary values. The series’ key is passed to the [value accessor](#stack_value), along with each data point, to compute the point’s value.
+
+<a name="stack_value" href="#stack_value">#</a> <i>stack</i>.<b>value</b>([<i>value</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/stack.js)
+
+If *value* is specified, sets the value accessor to the specified function or number and returns this stack generator. If *value* is not specified, returns the current value accessor, which defaults to:
+
+```js
+function value(d, key) {
+  return d[key];
+}
+```
+
+Thus, by default the stack generator assumes that the input data is an array of objects, with each object exposing named properties with numeric values; see [*stack*](#_stack) for an example.
+
+<a name="stack_order" href="#stack_order">#</a> <i>stack</i>.<b>order</b>([<i>order</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/stack.js)
+
+If *order* is specified, sets the order accessor to the specified function or array and returns this stack generator. If *order* is not specified, returns the current order accessor, which defaults to [stackOrderNone](#stackOrderNone); this uses the order given by the [key accessor](#stack_key). See [stack orders](#stack-orders) for the built-in orders.
+
+If *order* is a function, it is passed the generated series array and must return an array of numeric indexes representing the stack order. For example, the default order is defined as:
+
+```js
+function orderNone(series) {
+  let n = series.length;
+  const o = new Array(n);
+  while (--n >= 0) o[n] = n;
+  return o;
+}
+```
+
+The stack order is computed prior to the [offset](#stack_offset); thus, the lower value for all points is zero at the time the order is computed. The index attribute for each series is also not set until after the order is computed.
+
+<a name="stack_offset" href="#stack_offset">#</a> <i>stack</i>.<b>offset</b>([<i>offset</i>]) · [Source](https://github.com/d3/d3-shape/blob/main/src/stack.js)
+
+If *offset* is specified, sets the offset accessor to the specified function and returns this stack generator. If *offset* is not specified, returns the current offset acccesor, which defaults to [stackOffsetNone](#stackOffsetNone); this uses a zero baseline. See [stack offsets](#stack-offsets) for the built-in offsets.
+
+The offset function is passed the generated series array and the order index array; it is then responsible for updating the lower and upper values in the series array. For example, the default offset is defined as:
+
+```js
+function offsetNone(series, order) {
+  if (!((n = series.length) > 1)) return;
+  for (let i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
+    s0 = s1, s1 = series[order[i]];
+    for (let j = 0; j < m; ++j) {
+      s1[j][1] += s1[j][0] = s0[j][1];
+    }
+  }
+}
+```
+
+### Stack Orders
+
+Stack orders are typically not used directly, but are instead passed to [*stack*.order](#stack_order).
+
+<a name="stackOrderAppearance" href="#stackOrderAppearance">#</a> d3.<b>stackOrderAppearance</b>(<i>series</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/order/appearance.js)
+
+Returns a series order such that the earliest series (according to the maximum value) is at the bottom.
+
+<a name="stackOrderAscending" href="#stackOrderAscending">#</a> d3.<b>stackOrderAscending</b>(<i>series</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/order/ascending.js)
+
+Returns a series order such that the smallest series (according to the sum of values) is at the bottom.
+
+<a name="stackOrderDescending" href="#stackOrderDescending">#</a> d3.<b>stackOrderDescending</b>(<i>series</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/order/descending.js)
+
+Returns a series order such that the largest series (according to the sum of values) is at the bottom.
+
+<a name="stackOrderInsideOut" href="#stackOrderInsideOut">#</a> d3.<b>stackOrderInsideOut</b>(<i>series</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/order/insideOut.js)
+
+Returns a series order such that the earliest series (according to the maximum value) are on the inside and the later series are on the outside. This order is recommended for streamgraphs in conjunction with the [wiggle offset](#stackOffsetWiggle). See [Stacked Graphs—Geometry & Aesthetics](http://leebyron.com/streamgraph/) by Byron & Wattenberg for more information.
+
+<a name="stackOrderNone" href="#stackOrderNone">#</a> d3.<b>stackOrderNone</b>(<i>series</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/order/none.js)
+
+Returns the given series order [0, 1, … *n* - 1] where *n* is the number of elements in *series*. Thus, the stack order is given by the [key accessor](#stack_keys).
+
+<a name="stackOrderReverse" href="#stackOrderReverse">#</a> d3.<b>stackOrderReverse</b>(<i>series</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/order/reverse.js)
+
+Returns the reverse of the given series order [*n* - 1, *n* - 2, … 0] where *n* is the number of elements in *series*. Thus, the stack order is given by the reverse of the [key accessor](#stack_keys).
+
+### Stack Offsets
+
+Stack offsets are typically not used directly, but are instead passed to [*stack*.offset](#stack_offset).
+
+<a name="stackOffsetExpand" href="#stackOffsetExpand">#</a> d3.<b>stackOffsetExpand</b>(<i>series</i>, <i>order</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/offset/expand.js)
+
+Applies a zero baseline and normalizes the values for each point such that the topline is always one.
+
+<a name="stackOffsetDiverging" href="#stackOffsetDiverging">#</a> d3.<b>stackOffsetDiverging</b>(<i>series</i>, <i>order</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/offset/diverging.js)
+
+Positive values are stacked above zero, negative values are [stacked below zero](https://observablehq.com/@d3/diverging-stacked-bar-chart), and zero values are stacked at zero.
+
+<a name="stackOffsetNone" href="#stackOffsetNone">#</a> d3.<b>stackOffsetNone</b>(<i>series</i>, <i>order</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/offset/none.js)
+
+Applies a zero baseline.
+
+<a name="stackOffsetSilhouette" href="#stackOffsetSilhouette">#</a> d3.<b>stackOffsetSilhouette</b>(<i>series</i>, <i>order</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/offset/silhouette.js)
+
+Shifts the baseline down such that the center of the streamgraph is always at zero.
+
+<a name="stackOffsetWiggle" href="#stackOffsetWiggle">#</a> d3.<b>stackOffsetWiggle</b>(<i>series</i>, <i>order</i>) · [Source](https://github.com/d3/d3-shape/blob/main/src/offset/wiggle.js)
+
+Shifts the baseline so as to minimize the weighted wiggle of layers. This offset is recommended for streamgraphs in conjunction with the [inside-out order](#stackOrderInsideOut). See [Stacked Graphs—Geometry & Aesthetics](http://leebyron.com/streamgraph/) by Bryon & Wattenberg for more information.
Index: node_modules/d3-shape/dist/d3-shape.js
===================================================================
--- node_modules/d3-shape/dist/d3-shape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/dist/d3-shape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2141 @@
+// https://d3js.org/d3-shape/ v3.2.0 Copyright 2010-2022 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-path')) :
+typeof define === 'function' && define.amd ? define(['exports', 'd3-path'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}, global.d3));
+})(this, (function (exports, d3Path) { 'use strict';
+
+function constant(x) {
+  return function constant() {
+    return x;
+  };
+}
+
+const abs = Math.abs;
+const atan2 = Math.atan2;
+const cos = Math.cos;
+const max = Math.max;
+const min = Math.min;
+const sin = Math.sin;
+const sqrt = Math.sqrt;
+
+const epsilon = 1e-12;
+const pi = Math.PI;
+const halfPi = pi / 2;
+const tau = 2 * pi;
+
+function acos(x) {
+  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);
+}
+
+function asin(x) {
+  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);
+}
+
+function withPath(shape) {
+  let digits = 3;
+
+  shape.digits = function(_) {
+    if (!arguments.length) return digits;
+    if (_ == null) {
+      digits = null;
+    } else {
+      const d = Math.floor(_);
+      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);
+      digits = d;
+    }
+    return shape;
+  };
+
+  return () => new d3Path.Path(digits);
+}
+
+function arcInnerRadius(d) {
+  return d.innerRadius;
+}
+
+function arcOuterRadius(d) {
+  return d.outerRadius;
+}
+
+function arcStartAngle(d) {
+  return d.startAngle;
+}
+
+function arcEndAngle(d) {
+  return d.endAngle;
+}
+
+function arcPadAngle(d) {
+  return d && d.padAngle; // Note: optional!
+}
+
+function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
+  var x10 = x1 - x0, y10 = y1 - y0,
+      x32 = x3 - x2, y32 = y3 - y2,
+      t = y32 * x10 - x32 * y10;
+  if (t * t < epsilon) return;
+  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
+  return [x0 + t * x10, y0 + t * y10];
+}
+
+// Compute perpendicular offset line of length rc.
+// http://mathworld.wolfram.com/Circle-LineIntersection.html
+function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
+  var x01 = x0 - x1,
+      y01 = y0 - y1,
+      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),
+      ox = lo * y01,
+      oy = -lo * x01,
+      x11 = x0 + ox,
+      y11 = y0 + oy,
+      x10 = x1 + ox,
+      y10 = y1 + oy,
+      x00 = (x11 + x10) / 2,
+      y00 = (y11 + y10) / 2,
+      dx = x10 - x11,
+      dy = y10 - y11,
+      d2 = dx * dx + dy * dy,
+      r = r1 - rc,
+      D = x11 * y10 - x10 * y11,
+      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),
+      cx0 = (D * dy - dx * d) / d2,
+      cy0 = (-D * dx - dy * d) / d2,
+      cx1 = (D * dy + dx * d) / d2,
+      cy1 = (-D * dx + dy * d) / d2,
+      dx0 = cx0 - x00,
+      dy0 = cy0 - y00,
+      dx1 = cx1 - x00,
+      dy1 = cy1 - y00;
+
+  // Pick the closer of the two intersection points.
+  // TODO Is there a faster way to determine which intersection to use?
+  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
+
+  return {
+    cx: cx0,
+    cy: cy0,
+    x01: -ox,
+    y01: -oy,
+    x11: cx0 * (r1 / r - 1),
+    y11: cy0 * (r1 / r - 1)
+  };
+}
+
+function arc() {
+  var innerRadius = arcInnerRadius,
+      outerRadius = arcOuterRadius,
+      cornerRadius = constant(0),
+      padRadius = null,
+      startAngle = arcStartAngle,
+      endAngle = arcEndAngle,
+      padAngle = arcPadAngle,
+      context = null,
+      path = withPath(arc);
+
+  function arc() {
+    var buffer,
+        r,
+        r0 = +innerRadius.apply(this, arguments),
+        r1 = +outerRadius.apply(this, arguments),
+        a0 = startAngle.apply(this, arguments) - halfPi,
+        a1 = endAngle.apply(this, arguments) - halfPi,
+        da = abs(a1 - a0),
+        cw = a1 > a0;
+
+    if (!context) context = buffer = path();
+
+    // Ensure that the outer radius is always larger than the inner radius.
+    if (r1 < r0) r = r1, r1 = r0, r0 = r;
+
+    // Is it a point?
+    if (!(r1 > epsilon)) context.moveTo(0, 0);
+
+    // Or is it a circle or annulus?
+    else if (da > tau - epsilon) {
+      context.moveTo(r1 * cos(a0), r1 * sin(a0));
+      context.arc(0, 0, r1, a0, a1, !cw);
+      if (r0 > epsilon) {
+        context.moveTo(r0 * cos(a1), r0 * sin(a1));
+        context.arc(0, 0, r0, a1, a0, cw);
+      }
+    }
+
+    // Or is it a circular or annular sector?
+    else {
+      var a01 = a0,
+          a11 = a1,
+          a00 = a0,
+          a10 = a1,
+          da0 = da,
+          da1 = da,
+          ap = padAngle.apply(this, arguments) / 2,
+          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),
+          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
+          rc0 = rc,
+          rc1 = rc,
+          t0,
+          t1;
+
+      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
+      if (rp > epsilon) {
+        var p0 = asin(rp / r0 * sin(ap)),
+            p1 = asin(rp / r1 * sin(ap));
+        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
+        else da0 = 0, a00 = a10 = (a0 + a1) / 2;
+        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
+        else da1 = 0, a01 = a11 = (a0 + a1) / 2;
+      }
+
+      var x01 = r1 * cos(a01),
+          y01 = r1 * sin(a01),
+          x10 = r0 * cos(a10),
+          y10 = r0 * sin(a10);
+
+      // Apply rounded corners?
+      if (rc > epsilon) {
+        var x11 = r1 * cos(a11),
+            y11 = r1 * sin(a11),
+            x00 = r0 * cos(a00),
+            y00 = r0 * sin(a00),
+            oc;
+
+        // Restrict the corner radius according to the sector angle. If this
+        // intersection fails, it’s probably because the arc is too small, so
+        // disable the corner radius entirely.
+        if (da < pi) {
+          if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {
+            var ax = x01 - oc[0],
+                ay = y01 - oc[1],
+                bx = x11 - oc[0],
+                by = y11 - oc[1],
+                kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),
+                lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
+            rc0 = min(rc, (r0 - lc) / (kc - 1));
+            rc1 = min(rc, (r1 - lc) / (kc + 1));
+          } else {
+            rc0 = rc1 = 0;
+          }
+        }
+      }
+
+      // Is the sector collapsed to a line?
+      if (!(da1 > epsilon)) context.moveTo(x01, y01);
+
+      // Does the sector’s outer ring have rounded corners?
+      else if (rc1 > epsilon) {
+        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
+        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
+
+        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+        // Have the corners merged?
+        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);
+
+        // Otherwise, draw the two corners and the ring.
+        else {
+          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);
+          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
+          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);
+        }
+      }
+
+      // Or is the outer ring just a circular arc?
+      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
+
+      // Is there no inner ring, and it’s a circular sector?
+      // Or perhaps it’s an annular sector collapsed due to padding?
+      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);
+
+      // Does the sector’s inner ring (or point) have rounded corners?
+      else if (rc0 > epsilon) {
+        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
+        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
+
+        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+        // Have the corners merged?
+        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);
+
+        // Otherwise, draw the two corners and the ring.
+        else {
+          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);
+          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);
+          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);
+        }
+      }
+
+      // Or is the inner ring just a circular arc?
+      else context.arc(0, 0, r0, a10, a00, cw);
+    }
+
+    context.closePath();
+
+    if (buffer) return context = null, buffer + "" || null;
+  }
+
+  arc.centroid = function() {
+    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
+        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;
+    return [cos(a) * r, sin(a) * r];
+  };
+
+  arc.innerRadius = function(_) {
+    return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant(+_), arc) : innerRadius;
+  };
+
+  arc.outerRadius = function(_) {
+    return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant(+_), arc) : outerRadius;
+  };
+
+  arc.cornerRadius = function(_) {
+    return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant(+_), arc) : cornerRadius;
+  };
+
+  arc.padRadius = function(_) {
+    return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant(+_), arc) : padRadius;
+  };
+
+  arc.startAngle = function(_) {
+    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), arc) : startAngle;
+  };
+
+  arc.endAngle = function(_) {
+    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), arc) : endAngle;
+  };
+
+  arc.padAngle = function(_) {
+    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), arc) : padAngle;
+  };
+
+  arc.context = function(_) {
+    return arguments.length ? ((context = _ == null ? null : _), arc) : context;
+  };
+
+  return arc;
+}
+
+var slice = Array.prototype.slice;
+
+function array(x) {
+  return typeof x === "object" && "length" in x
+    ? x // Array, TypedArray, NodeList, array-like
+    : Array.from(x); // Map, Set, iterable, string, or anything else
+}
+
+function Linear(context) {
+  this._context = context;
+}
+
+Linear.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; // falls through
+      default: this._context.lineTo(x, y); break;
+    }
+  }
+};
+
+function curveLinear(context) {
+  return new Linear(context);
+}
+
+function x(p) {
+  return p[0];
+}
+
+function y(p) {
+  return p[1];
+}
+
+function line(x$1, y$1) {
+  var defined = constant(true),
+      context = null,
+      curve = curveLinear,
+      output = null,
+      path = withPath(line);
+
+  x$1 = typeof x$1 === "function" ? x$1 : (x$1 === undefined) ? x : constant(x$1);
+  y$1 = typeof y$1 === "function" ? y$1 : (y$1 === undefined) ? y : constant(y$1);
+
+  function line(data) {
+    var i,
+        n = (data = array(data)).length,
+        d,
+        defined0 = false,
+        buffer;
+
+    if (context == null) output = curve(buffer = path());
+
+    for (i = 0; i <= n; ++i) {
+      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+        if (defined0 = !defined0) output.lineStart();
+        else output.lineEnd();
+      }
+      if (defined0) output.point(+x$1(d, i, data), +y$1(d, i, data));
+    }
+
+    if (buffer) return output = null, buffer + "" || null;
+  }
+
+  line.x = function(_) {
+    return arguments.length ? (x$1 = typeof _ === "function" ? _ : constant(+_), line) : x$1;
+  };
+
+  line.y = function(_) {
+    return arguments.length ? (y$1 = typeof _ === "function" ? _ : constant(+_), line) : y$1;
+  };
+
+  line.defined = function(_) {
+    return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), line) : defined;
+  };
+
+  line.curve = function(_) {
+    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
+  };
+
+  line.context = function(_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
+  };
+
+  return line;
+}
+
+function area(x0, y0, y1) {
+  var x1 = null,
+      defined = constant(true),
+      context = null,
+      curve = curveLinear,
+      output = null,
+      path = withPath(area);
+
+  x0 = typeof x0 === "function" ? x0 : (x0 === undefined) ? x : constant(+x0);
+  y0 = typeof y0 === "function" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);
+  y1 = typeof y1 === "function" ? y1 : (y1 === undefined) ? y : constant(+y1);
+
+  function area(data) {
+    var i,
+        j,
+        k,
+        n = (data = array(data)).length,
+        d,
+        defined0 = false,
+        buffer,
+        x0z = new Array(n),
+        y0z = new Array(n);
+
+    if (context == null) output = curve(buffer = path());
+
+    for (i = 0; i <= n; ++i) {
+      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+        if (defined0 = !defined0) {
+          j = i;
+          output.areaStart();
+          output.lineStart();
+        } else {
+          output.lineEnd();
+          output.lineStart();
+          for (k = i - 1; k >= j; --k) {
+            output.point(x0z[k], y0z[k]);
+          }
+          output.lineEnd();
+          output.areaEnd();
+        }
+      }
+      if (defined0) {
+        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
+        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
+      }
+    }
+
+    if (buffer) return output = null, buffer + "" || null;
+  }
+
+  function arealine() {
+    return line().defined(defined).curve(curve).context(context);
+  }
+
+  area.x = function(_) {
+    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), x1 = null, area) : x0;
+  };
+
+  area.x0 = function(_) {
+    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), area) : x0;
+  };
+
+  area.x1 = function(_) {
+    return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : x1;
+  };
+
+  area.y = function(_) {
+    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), y1 = null, area) : y0;
+  };
+
+  area.y0 = function(_) {
+    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), area) : y0;
+  };
+
+  area.y1 = function(_) {
+    return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : y1;
+  };
+
+  area.lineX0 =
+  area.lineY0 = function() {
+    return arealine().x(x0).y(y0);
+  };
+
+  area.lineY1 = function() {
+    return arealine().x(x0).y(y1);
+  };
+
+  area.lineX1 = function() {
+    return arealine().x(x1).y(y0);
+  };
+
+  area.defined = function(_) {
+    return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), area) : defined;
+  };
+
+  area.curve = function(_) {
+    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
+  };
+
+  area.context = function(_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
+  };
+
+  return area;
+}
+
+function descending$1(a, b) {
+  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+}
+
+function identity(d) {
+  return d;
+}
+
+function pie() {
+  var value = identity,
+      sortValues = descending$1,
+      sort = null,
+      startAngle = constant(0),
+      endAngle = constant(tau),
+      padAngle = constant(0);
+
+  function pie(data) {
+    var i,
+        n = (data = array(data)).length,
+        j,
+        k,
+        sum = 0,
+        index = new Array(n),
+        arcs = new Array(n),
+        a0 = +startAngle.apply(this, arguments),
+        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),
+        a1,
+        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
+        pa = p * (da < 0 ? -1 : 1),
+        v;
+
+    for (i = 0; i < n; ++i) {
+      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
+        sum += v;
+      }
+    }
+
+    // Optionally sort the arcs by previously-computed values or by data.
+    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
+    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
+
+    // Compute the arcs! They are stored in the original data's order.
+    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
+      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
+        data: data[j],
+        index: i,
+        value: v,
+        startAngle: a0,
+        endAngle: a1,
+        padAngle: p
+      };
+    }
+
+    return arcs;
+  }
+
+  pie.value = function(_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), pie) : value;
+  };
+
+  pie.sortValues = function(_) {
+    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
+  };
+
+  pie.sort = function(_) {
+    return arguments.length ? (sort = _, sortValues = null, pie) : sort;
+  };
+
+  pie.startAngle = function(_) {
+    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), pie) : startAngle;
+  };
+
+  pie.endAngle = function(_) {
+    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), pie) : endAngle;
+  };
+
+  pie.padAngle = function(_) {
+    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), pie) : padAngle;
+  };
+
+  return pie;
+}
+
+var curveRadialLinear = curveRadial(curveLinear);
+
+function Radial(curve) {
+  this._curve = curve;
+}
+
+Radial.prototype = {
+  areaStart: function() {
+    this._curve.areaStart();
+  },
+  areaEnd: function() {
+    this._curve.areaEnd();
+  },
+  lineStart: function() {
+    this._curve.lineStart();
+  },
+  lineEnd: function() {
+    this._curve.lineEnd();
+  },
+  point: function(a, r) {
+    this._curve.point(r * Math.sin(a), r * -Math.cos(a));
+  }
+};
+
+function curveRadial(curve) {
+
+  function radial(context) {
+    return new Radial(curve(context));
+  }
+
+  radial._curve = curve;
+
+  return radial;
+}
+
+function lineRadial(l) {
+  var c = l.curve;
+
+  l.angle = l.x, delete l.x;
+  l.radius = l.y, delete l.y;
+
+  l.curve = function(_) {
+    return arguments.length ? c(curveRadial(_)) : c()._curve;
+  };
+
+  return l;
+}
+
+function lineRadial$1() {
+  return lineRadial(line().curve(curveRadialLinear));
+}
+
+function areaRadial() {
+  var a = area().curve(curveRadialLinear),
+      c = a.curve,
+      x0 = a.lineX0,
+      x1 = a.lineX1,
+      y0 = a.lineY0,
+      y1 = a.lineY1;
+
+  a.angle = a.x, delete a.x;
+  a.startAngle = a.x0, delete a.x0;
+  a.endAngle = a.x1, delete a.x1;
+  a.radius = a.y, delete a.y;
+  a.innerRadius = a.y0, delete a.y0;
+  a.outerRadius = a.y1, delete a.y1;
+  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;
+  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;
+  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;
+  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;
+
+  a.curve = function(_) {
+    return arguments.length ? c(curveRadial(_)) : c()._curve;
+  };
+
+  return a;
+}
+
+function pointRadial(x, y) {
+  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
+}
+
+class Bump {
+  constructor(context, x) {
+    this._context = context;
+    this._x = x;
+  }
+  areaStart() {
+    this._line = 0;
+  }
+  areaEnd() {
+    this._line = NaN;
+  }
+  lineStart() {
+    this._point = 0;
+  }
+  lineEnd() {
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  }
+  point(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: {
+        this._point = 1;
+        if (this._line) this._context.lineTo(x, y);
+        else this._context.moveTo(x, y);
+        break;
+      }
+      case 1: this._point = 2; // falls through
+      default: {
+        if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);
+        else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);
+        break;
+      }
+    }
+    this._x0 = x, this._y0 = y;
+  }
+}
+
+class BumpRadial {
+  constructor(context) {
+    this._context = context;
+  }
+  lineStart() {
+    this._point = 0;
+  }
+  lineEnd() {}
+  point(x, y) {
+    x = +x, y = +y;
+    if (this._point === 0) {
+      this._point = 1;
+    } else {
+      const p0 = pointRadial(this._x0, this._y0);
+      const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);
+      const p2 = pointRadial(x, this._y0);
+      const p3 = pointRadial(x, y);
+      this._context.moveTo(...p0);
+      this._context.bezierCurveTo(...p1, ...p2, ...p3);
+    }
+    this._x0 = x, this._y0 = y;
+  }
+}
+
+function bumpX(context) {
+  return new Bump(context, true);
+}
+
+function bumpY(context) {
+  return new Bump(context, false);
+}
+
+function bumpRadial(context) {
+  return new BumpRadial(context);
+}
+
+function linkSource(d) {
+  return d.source;
+}
+
+function linkTarget(d) {
+  return d.target;
+}
+
+function link(curve) {
+  let source = linkSource,
+      target = linkTarget,
+      x$1 = x,
+      y$1 = y,
+      context = null,
+      output = null,
+      path = withPath(link);
+
+  function link() {
+    let buffer;
+    const argv = slice.call(arguments);
+    const s = source.apply(this, argv);
+    const t = target.apply(this, argv);
+    if (context == null) output = curve(buffer = path());
+    output.lineStart();
+    argv[0] = s, output.point(+x$1.apply(this, argv), +y$1.apply(this, argv));
+    argv[0] = t, output.point(+x$1.apply(this, argv), +y$1.apply(this, argv));
+    output.lineEnd();
+    if (buffer) return output = null, buffer + "" || null;
+  }
+
+  link.source = function(_) {
+    return arguments.length ? (source = _, link) : source;
+  };
+
+  link.target = function(_) {
+    return arguments.length ? (target = _, link) : target;
+  };
+
+  link.x = function(_) {
+    return arguments.length ? (x$1 = typeof _ === "function" ? _ : constant(+_), link) : x$1;
+  };
+
+  link.y = function(_) {
+    return arguments.length ? (y$1 = typeof _ === "function" ? _ : constant(+_), link) : y$1;
+  };
+
+  link.context = function(_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;
+  };
+
+  return link;
+}
+
+function linkHorizontal() {
+  return link(bumpX);
+}
+
+function linkVertical() {
+  return link(bumpY);
+}
+
+function linkRadial() {
+  const l = link(bumpRadial);
+  l.angle = l.x, delete l.x;
+  l.radius = l.y, delete l.y;
+  return l;
+}
+
+const sqrt3$2 = sqrt(3);
+
+var asterisk = {
+  draw(context, size) {
+    const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;
+    const t = r / 2;
+    const u = t * sqrt3$2;
+    context.moveTo(0, r);
+    context.lineTo(0, -r);
+    context.moveTo(-u, -t);
+    context.lineTo(u, t);
+    context.moveTo(-u, t);
+    context.lineTo(u, -t);
+  }
+};
+
+var circle = {
+  draw(context, size) {
+    const r = sqrt(size / pi);
+    context.moveTo(r, 0);
+    context.arc(0, 0, r, 0, tau);
+  }
+};
+
+var cross = {
+  draw(context, size) {
+    const r = sqrt(size / 5) / 2;
+    context.moveTo(-3 * r, -r);
+    context.lineTo(-r, -r);
+    context.lineTo(-r, -3 * r);
+    context.lineTo(r, -3 * r);
+    context.lineTo(r, -r);
+    context.lineTo(3 * r, -r);
+    context.lineTo(3 * r, r);
+    context.lineTo(r, r);
+    context.lineTo(r, 3 * r);
+    context.lineTo(-r, 3 * r);
+    context.lineTo(-r, r);
+    context.lineTo(-3 * r, r);
+    context.closePath();
+  }
+};
+
+const tan30 = sqrt(1 / 3);
+const tan30_2 = tan30 * 2;
+
+var diamond = {
+  draw(context, size) {
+    const y = sqrt(size / tan30_2);
+    const x = y * tan30;
+    context.moveTo(0, -y);
+    context.lineTo(x, 0);
+    context.lineTo(0, y);
+    context.lineTo(-x, 0);
+    context.closePath();
+  }
+};
+
+var diamond2 = {
+  draw(context, size) {
+    const r = sqrt(size) * 0.62625;
+    context.moveTo(0, -r);
+    context.lineTo(r, 0);
+    context.lineTo(0, r);
+    context.lineTo(-r, 0);
+    context.closePath();
+  }
+};
+
+var plus = {
+  draw(context, size) {
+    const r = sqrt(size - min(size / 7, 2)) * 0.87559;
+    context.moveTo(-r, 0);
+    context.lineTo(r, 0);
+    context.moveTo(0, r);
+    context.lineTo(0, -r);
+  }
+};
+
+var square = {
+  draw(context, size) {
+    const w = sqrt(size);
+    const x = -w / 2;
+    context.rect(x, x, w, w);
+  }
+};
+
+var square2 = {
+  draw(context, size) {
+    const r = sqrt(size) * 0.4431;
+    context.moveTo(r, r);
+    context.lineTo(r, -r);
+    context.lineTo(-r, -r);
+    context.lineTo(-r, r);
+    context.closePath();
+  }
+};
+
+const ka = 0.89081309152928522810;
+const kr = sin(pi / 10) / sin(7 * pi / 10);
+const kx = sin(tau / 10) * kr;
+const ky = -cos(tau / 10) * kr;
+
+var star = {
+  draw(context, size) {
+    const r = sqrt(size * ka);
+    const x = kx * r;
+    const y = ky * r;
+    context.moveTo(0, -r);
+    context.lineTo(x, y);
+    for (let i = 1; i < 5; ++i) {
+      const a = tau * i / 5;
+      const c = cos(a);
+      const s = sin(a);
+      context.lineTo(s * r, -c * r);
+      context.lineTo(c * x - s * y, s * x + c * y);
+    }
+    context.closePath();
+  }
+};
+
+const sqrt3$1 = sqrt(3);
+
+var triangle = {
+  draw(context, size) {
+    const y = -sqrt(size / (sqrt3$1 * 3));
+    context.moveTo(0, y * 2);
+    context.lineTo(-sqrt3$1 * y, -y);
+    context.lineTo(sqrt3$1 * y, -y);
+    context.closePath();
+  }
+};
+
+const sqrt3 = sqrt(3);
+
+var triangle2 = {
+  draw(context, size) {
+    const s = sqrt(size) * 0.6824;
+    const t = s  / 2;
+    const u = (s * sqrt3) / 2; // cos(Math.PI / 6)
+    context.moveTo(0, -s);
+    context.lineTo(u, t);
+    context.lineTo(-u, t);
+    context.closePath();
+  }
+};
+
+const c = -0.5;
+const s = sqrt(3) / 2;
+const k = 1 / sqrt(12);
+const a = (k / 2 + 1) * 3;
+
+var wye = {
+  draw(context, size) {
+    const r = sqrt(size / a);
+    const x0 = r / 2, y0 = r * k;
+    const x1 = x0, y1 = r * k + r;
+    const x2 = -x1, y2 = y1;
+    context.moveTo(x0, y0);
+    context.lineTo(x1, y1);
+    context.lineTo(x2, y2);
+    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
+    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
+    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
+    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
+    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
+    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
+    context.closePath();
+  }
+};
+
+var times = {
+  draw(context, size) {
+    const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;
+    context.moveTo(-r, -r);
+    context.lineTo(r, r);
+    context.moveTo(-r, r);
+    context.lineTo(r, -r);
+  }
+};
+
+// These symbols are designed to be filled.
+const symbolsFill = [
+  circle,
+  cross,
+  diamond,
+  square,
+  star,
+  triangle,
+  wye
+];
+
+// These symbols are designed to be stroked (with a width of 1.5px and round caps).
+const symbolsStroke = [
+  circle,
+  plus,
+  times,
+  triangle2,
+  asterisk,
+  square2,
+  diamond2
+];
+
+function Symbol(type, size) {
+  let context = null,
+      path = withPath(symbol);
+
+  type = typeof type === "function" ? type : constant(type || circle);
+  size = typeof size === "function" ? size : constant(size === undefined ? 64 : +size);
+
+  function symbol() {
+    let buffer;
+    if (!context) context = buffer = path();
+    type.apply(this, arguments).draw(context, +size.apply(this, arguments));
+    if (buffer) return context = null, buffer + "" || null;
+  }
+
+  symbol.type = function(_) {
+    return arguments.length ? (type = typeof _ === "function" ? _ : constant(_), symbol) : type;
+  };
+
+  symbol.size = function(_) {
+    return arguments.length ? (size = typeof _ === "function" ? _ : constant(+_), symbol) : size;
+  };
+
+  symbol.context = function(_) {
+    return arguments.length ? (context = _ == null ? null : _, symbol) : context;
+  };
+
+  return symbol;
+}
+
+function noop() {}
+
+function point$3(that, x, y) {
+  that._context.bezierCurveTo(
+    (2 * that._x0 + that._x1) / 3,
+    (2 * that._y0 + that._y1) / 3,
+    (that._x0 + 2 * that._x1) / 3,
+    (that._y0 + 2 * that._y1) / 3,
+    (that._x0 + 4 * that._x1 + x) / 6,
+    (that._y0 + 4 * that._y1 + y) / 6
+  );
+}
+
+function Basis(context) {
+  this._context = context;
+}
+
+Basis.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 =
+    this._y0 = this._y1 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 3: point$3(this, this._x1, this._y1); // falls through
+      case 2: this._context.lineTo(this._x1, this._y1); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through
+      default: point$3(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+
+function basis(context) {
+  return new Basis(context);
+}
+
+function BasisClosed(context) {
+  this._context = context;
+}
+
+BasisClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
+    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 1: {
+        this._context.moveTo(this._x2, this._y2);
+        this._context.closePath();
+        break;
+      }
+      case 2: {
+        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
+        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
+        this._context.closePath();
+        break;
+      }
+      case 3: {
+        this.point(this._x2, this._y2);
+        this.point(this._x3, this._y3);
+        this.point(this._x4, this._y4);
+        break;
+      }
+    }
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
+      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
+      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
+      default: point$3(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+
+function basisClosed(context) {
+  return new BasisClosed(context);
+}
+
+function BasisOpen(context) {
+  this._context = context;
+}
+
+BasisOpen.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 =
+    this._y0 = this._y1 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
+      case 3: this._point = 4; // falls through
+      default: point$3(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+
+function basisOpen(context) {
+  return new BasisOpen(context);
+}
+
+function Bundle(context, beta) {
+  this._basis = new Basis(context);
+  this._beta = beta;
+}
+
+Bundle.prototype = {
+  lineStart: function() {
+    this._x = [];
+    this._y = [];
+    this._basis.lineStart();
+  },
+  lineEnd: function() {
+    var x = this._x,
+        y = this._y,
+        j = x.length - 1;
+
+    if (j > 0) {
+      var x0 = x[0],
+          y0 = y[0],
+          dx = x[j] - x0,
+          dy = y[j] - y0,
+          i = -1,
+          t;
+
+      while (++i <= j) {
+        t = i / j;
+        this._basis.point(
+          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
+          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
+        );
+      }
+    }
+
+    this._x = this._y = null;
+    this._basis.lineEnd();
+  },
+  point: function(x, y) {
+    this._x.push(+x);
+    this._y.push(+y);
+  }
+};
+
+var bundle = (function custom(beta) {
+
+  function bundle(context) {
+    return beta === 1 ? new Basis(context) : new Bundle(context, beta);
+  }
+
+  bundle.beta = function(beta) {
+    return custom(+beta);
+  };
+
+  return bundle;
+})(0.85);
+
+function point$2(that, x, y) {
+  that._context.bezierCurveTo(
+    that._x1 + that._k * (that._x2 - that._x0),
+    that._y1 + that._k * (that._y2 - that._y0),
+    that._x2 + that._k * (that._x1 - x),
+    that._y2 + that._k * (that._y1 - y),
+    that._x2,
+    that._y2
+  );
+}
+
+function Cardinal(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+
+Cardinal.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 2: this._context.lineTo(this._x2, this._y2); break;
+      case 3: point$2(this, this._x1, this._y1); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
+      case 2: this._point = 3; // falls through
+      default: point$2(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var cardinal = (function custom(tension) {
+
+  function cardinal(context) {
+    return new Cardinal(context, tension);
+  }
+
+  cardinal.tension = function(tension) {
+    return custom(+tension);
+  };
+
+  return cardinal;
+})(0);
+
+function CardinalClosed(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+
+CardinalClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 1: {
+        this._context.moveTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 2: {
+        this._context.lineTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 3: {
+        this.point(this._x3, this._y3);
+        this.point(this._x4, this._y4);
+        this.point(this._x5, this._y5);
+        break;
+      }
+    }
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+      default: point$2(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var cardinalClosed = (function custom(tension) {
+
+  function cardinal(context) {
+    return new CardinalClosed(context, tension);
+  }
+
+  cardinal.tension = function(tension) {
+    return custom(+tension);
+  };
+
+  return cardinal;
+})(0);
+
+function CardinalOpen(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+
+CardinalOpen.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+      case 3: this._point = 4; // falls through
+      default: point$2(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var cardinalOpen = (function custom(tension) {
+
+  function cardinal(context) {
+    return new CardinalOpen(context, tension);
+  }
+
+  cardinal.tension = function(tension) {
+    return custom(+tension);
+  };
+
+  return cardinal;
+})(0);
+
+function point$1(that, x, y) {
+  var x1 = that._x1,
+      y1 = that._y1,
+      x2 = that._x2,
+      y2 = that._y2;
+
+  if (that._l01_a > epsilon) {
+    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
+        n = 3 * that._l01_a * (that._l01_a + that._l12_a);
+    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
+    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
+  }
+
+  if (that._l23_a > epsilon) {
+    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
+        m = 3 * that._l23_a * (that._l23_a + that._l12_a);
+    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
+    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
+  }
+
+  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
+}
+
+function CatmullRom(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+
+CatmullRom.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._l01_a = this._l12_a = this._l23_a =
+    this._l01_2a = this._l12_2a = this._l23_2a =
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 2: this._context.lineTo(this._x2, this._y2); break;
+      case 3: this.point(this._x2, this._y2); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+
+    if (this._point) {
+      var x23 = this._x2 - x,
+          y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; // falls through
+      default: point$1(this, x, y); break;
+    }
+
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var catmullRom = (function custom(alpha) {
+
+  function catmullRom(context) {
+    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
+  }
+
+  catmullRom.alpha = function(alpha) {
+    return custom(+alpha);
+  };
+
+  return catmullRom;
+})(0.5);
+
+function CatmullRomClosed(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+
+CatmullRomClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+    this._l01_a = this._l12_a = this._l23_a =
+    this._l01_2a = this._l12_2a = this._l23_2a =
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 1: {
+        this._context.moveTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 2: {
+        this._context.lineTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 3: {
+        this.point(this._x3, this._y3);
+        this.point(this._x4, this._y4);
+        this.point(this._x5, this._y5);
+        break;
+      }
+    }
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+
+    if (this._point) {
+      var x23 = this._x2 - x,
+          y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+
+    switch (this._point) {
+      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+      default: point$1(this, x, y); break;
+    }
+
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var catmullRomClosed = (function custom(alpha) {
+
+  function catmullRom(context) {
+    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
+  }
+
+  catmullRom.alpha = function(alpha) {
+    return custom(+alpha);
+  };
+
+  return catmullRom;
+})(0.5);
+
+function CatmullRomOpen(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+
+CatmullRomOpen.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._l01_a = this._l12_a = this._l23_a =
+    this._l01_2a = this._l12_2a = this._l23_2a =
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+
+    if (this._point) {
+      var x23 = this._x2 - x,
+          y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+
+    switch (this._point) {
+      case 0: this._point = 1; break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+      case 3: this._point = 4; // falls through
+      default: point$1(this, x, y); break;
+    }
+
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var catmullRomOpen = (function custom(alpha) {
+
+  function catmullRom(context) {
+    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
+  }
+
+  catmullRom.alpha = function(alpha) {
+    return custom(+alpha);
+  };
+
+  return catmullRom;
+})(0.5);
+
+function LinearClosed(context) {
+  this._context = context;
+}
+
+LinearClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._point) this._context.closePath();
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    if (this._point) this._context.lineTo(x, y);
+    else this._point = 1, this._context.moveTo(x, y);
+  }
+};
+
+function linearClosed(context) {
+  return new LinearClosed(context);
+}
+
+function sign(x) {
+  return x < 0 ? -1 : 1;
+}
+
+// Calculate the slopes of the tangents (Hermite-type interpolation) based on
+// the following paper: Steffen, M. 1990. A Simple Method for Monotonic
+// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
+// NOV(II), P. 443, 1990.
+function slope3(that, x2, y2) {
+  var h0 = that._x1 - that._x0,
+      h1 = x2 - that._x1,
+      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
+      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
+      p = (s0 * h1 + s1 * h0) / (h0 + h1);
+  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
+}
+
+// Calculate a one-sided slope.
+function slope2(that, t) {
+  var h = that._x1 - that._x0;
+  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
+}
+
+// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
+// "you can express cubic Hermite interpolation in terms of cubic Bézier curves
+// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
+function point(that, t0, t1) {
+  var x0 = that._x0,
+      y0 = that._y0,
+      x1 = that._x1,
+      y1 = that._y1,
+      dx = (x1 - x0) / 3;
+  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
+}
+
+function MonotoneX(context) {
+  this._context = context;
+}
+
+MonotoneX.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 =
+    this._y0 = this._y1 =
+    this._t0 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 2: this._context.lineTo(this._x1, this._y1); break;
+      case 3: point(this, this._t0, slope2(this, this._t0)); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    var t1 = NaN;
+
+    x = +x, y = +y;
+    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
+      default: point(this, this._t0, t1 = slope3(this, x, y)); break;
+    }
+
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+    this._t0 = t1;
+  }
+};
+
+function MonotoneY(context) {
+  this._context = new ReflectContext(context);
+}
+
+(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
+  MonotoneX.prototype.point.call(this, y, x);
+};
+
+function ReflectContext(context) {
+  this._context = context;
+}
+
+ReflectContext.prototype = {
+  moveTo: function(x, y) { this._context.moveTo(y, x); },
+  closePath: function() { this._context.closePath(); },
+  lineTo: function(x, y) { this._context.lineTo(y, x); },
+  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
+};
+
+function monotoneX(context) {
+  return new MonotoneX(context);
+}
+
+function monotoneY(context) {
+  return new MonotoneY(context);
+}
+
+function Natural(context) {
+  this._context = context;
+}
+
+Natural.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x = [];
+    this._y = [];
+  },
+  lineEnd: function() {
+    var x = this._x,
+        y = this._y,
+        n = x.length;
+
+    if (n) {
+      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
+      if (n === 2) {
+        this._context.lineTo(x[1], y[1]);
+      } else {
+        var px = controlPoints(x),
+            py = controlPoints(y);
+        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
+          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
+        }
+      }
+    }
+
+    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+    this._x = this._y = null;
+  },
+  point: function(x, y) {
+    this._x.push(+x);
+    this._y.push(+y);
+  }
+};
+
+// See https://www.particleincell.com/2012/bezier-splines/ for derivation.
+function controlPoints(x) {
+  var i,
+      n = x.length - 1,
+      m,
+      a = new Array(n),
+      b = new Array(n),
+      r = new Array(n);
+  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
+  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
+  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
+  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
+  a[n - 1] = r[n - 1] / b[n - 1];
+  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
+  b[n - 1] = (x[n] + a[n - 1]) / 2;
+  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
+  return [a, b];
+}
+
+function natural(context) {
+  return new Natural(context);
+}
+
+function Step(context, t) {
+  this._context = context;
+  this._t = t;
+}
+
+Step.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x = this._y = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; // falls through
+      default: {
+        if (this._t <= 0) {
+          this._context.lineTo(this._x, y);
+          this._context.lineTo(x, y);
+        } else {
+          var x1 = this._x * (1 - this._t) + x * this._t;
+          this._context.lineTo(x1, this._y);
+          this._context.lineTo(x1, y);
+        }
+        break;
+      }
+    }
+    this._x = x, this._y = y;
+  }
+};
+
+function step(context) {
+  return new Step(context, 0.5);
+}
+
+function stepBefore(context) {
+  return new Step(context, 0);
+}
+
+function stepAfter(context) {
+  return new Step(context, 1);
+}
+
+function none$1(series, order) {
+  if (!((n = series.length) > 1)) return;
+  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
+    s0 = s1, s1 = series[order[i]];
+    for (j = 0; j < m; ++j) {
+      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
+    }
+  }
+}
+
+function none(series) {
+  var n = series.length, o = new Array(n);
+  while (--n >= 0) o[n] = n;
+  return o;
+}
+
+function stackValue(d, key) {
+  return d[key];
+}
+
+function stackSeries(key) {
+  const series = [];
+  series.key = key;
+  return series;
+}
+
+function stack() {
+  var keys = constant([]),
+      order = none,
+      offset = none$1,
+      value = stackValue;
+
+  function stack(data) {
+    var sz = Array.from(keys.apply(this, arguments), stackSeries),
+        i, n = sz.length, j = -1,
+        oz;
+
+    for (const d of data) {
+      for (i = 0, ++j; i < n; ++i) {
+        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;
+      }
+    }
+
+    for (i = 0, oz = array(order(sz)); i < n; ++i) {
+      sz[oz[i]].index = i;
+    }
+
+    offset(sz, oz);
+    return sz;
+  }
+
+  stack.keys = function(_) {
+    return arguments.length ? (keys = typeof _ === "function" ? _ : constant(Array.from(_)), stack) : keys;
+  };
+
+  stack.value = function(_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), stack) : value;
+  };
+
+  stack.order = function(_) {
+    return arguments.length ? (order = _ == null ? none : typeof _ === "function" ? _ : constant(Array.from(_)), stack) : order;
+  };
+
+  stack.offset = function(_) {
+    return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;
+  };
+
+  return stack;
+}
+
+function expand(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
+    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
+    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
+  }
+  none$1(series, order);
+}
+
+function diverging(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
+    for (yp = yn = 0, i = 0; i < n; ++i) {
+      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {
+        d[0] = yp, d[1] = yp += dy;
+      } else if (dy < 0) {
+        d[1] = yn, d[0] = yn += dy;
+      } else {
+        d[0] = 0, d[1] = dy;
+      }
+    }
+  }
+}
+
+function silhouette(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
+    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
+    s0[j][1] += s0[j][0] = -y / 2;
+  }
+  none$1(series, order);
+}
+
+function wiggle(series, order) {
+  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
+  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
+    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
+      var si = series[order[i]],
+          sij0 = si[j][1] || 0,
+          sij1 = si[j - 1][1] || 0,
+          s3 = (sij0 - sij1) / 2;
+      for (var k = 0; k < i; ++k) {
+        var sk = series[order[k]],
+            skj0 = sk[j][1] || 0,
+            skj1 = sk[j - 1][1] || 0;
+        s3 += skj0 - skj1;
+      }
+      s1 += sij0, s2 += s3 * sij0;
+    }
+    s0[j - 1][1] += s0[j - 1][0] = y;
+    if (s1) y -= s2 / s1;
+  }
+  s0[j - 1][1] += s0[j - 1][0] = y;
+  none$1(series, order);
+}
+
+function appearance(series) {
+  var peaks = series.map(peak);
+  return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });
+}
+
+function peak(series) {
+  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;
+  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;
+  return j;
+}
+
+function ascending(series) {
+  var sums = series.map(sum);
+  return none(series).sort(function(a, b) { return sums[a] - sums[b]; });
+}
+
+function sum(series) {
+  var s = 0, i = -1, n = series.length, v;
+  while (++i < n) if (v = +series[i][1]) s += v;
+  return s;
+}
+
+function descending(series) {
+  return ascending(series).reverse();
+}
+
+function insideOut(series) {
+  var n = series.length,
+      i,
+      j,
+      sums = series.map(sum),
+      order = appearance(series),
+      top = 0,
+      bottom = 0,
+      tops = [],
+      bottoms = [];
+
+  for (i = 0; i < n; ++i) {
+    j = order[i];
+    if (top < bottom) {
+      top += sums[j];
+      tops.push(j);
+    } else {
+      bottom += sums[j];
+      bottoms.push(j);
+    }
+  }
+
+  return bottoms.reverse().concat(tops);
+}
+
+function reverse(series) {
+  return none(series).reverse();
+}
+
+exports.arc = arc;
+exports.area = area;
+exports.areaRadial = areaRadial;
+exports.curveBasis = basis;
+exports.curveBasisClosed = basisClosed;
+exports.curveBasisOpen = basisOpen;
+exports.curveBumpX = bumpX;
+exports.curveBumpY = bumpY;
+exports.curveBundle = bundle;
+exports.curveCardinal = cardinal;
+exports.curveCardinalClosed = cardinalClosed;
+exports.curveCardinalOpen = cardinalOpen;
+exports.curveCatmullRom = catmullRom;
+exports.curveCatmullRomClosed = catmullRomClosed;
+exports.curveCatmullRomOpen = catmullRomOpen;
+exports.curveLinear = curveLinear;
+exports.curveLinearClosed = linearClosed;
+exports.curveMonotoneX = monotoneX;
+exports.curveMonotoneY = monotoneY;
+exports.curveNatural = natural;
+exports.curveStep = step;
+exports.curveStepAfter = stepAfter;
+exports.curveStepBefore = stepBefore;
+exports.line = line;
+exports.lineRadial = lineRadial$1;
+exports.link = link;
+exports.linkHorizontal = linkHorizontal;
+exports.linkRadial = linkRadial;
+exports.linkVertical = linkVertical;
+exports.pie = pie;
+exports.pointRadial = pointRadial;
+exports.radialArea = areaRadial;
+exports.radialLine = lineRadial$1;
+exports.stack = stack;
+exports.stackOffsetDiverging = diverging;
+exports.stackOffsetExpand = expand;
+exports.stackOffsetNone = none$1;
+exports.stackOffsetSilhouette = silhouette;
+exports.stackOffsetWiggle = wiggle;
+exports.stackOrderAppearance = appearance;
+exports.stackOrderAscending = ascending;
+exports.stackOrderDescending = descending;
+exports.stackOrderInsideOut = insideOut;
+exports.stackOrderNone = none;
+exports.stackOrderReverse = reverse;
+exports.symbol = Symbol;
+exports.symbolAsterisk = asterisk;
+exports.symbolCircle = circle;
+exports.symbolCross = cross;
+exports.symbolDiamond = diamond;
+exports.symbolDiamond2 = diamond2;
+exports.symbolPlus = plus;
+exports.symbolSquare = square;
+exports.symbolSquare2 = square2;
+exports.symbolStar = star;
+exports.symbolTimes = times;
+exports.symbolTriangle = triangle;
+exports.symbolTriangle2 = triangle2;
+exports.symbolWye = wye;
+exports.symbolX = times;
+exports.symbols = symbolsFill;
+exports.symbolsFill = symbolsFill;
+exports.symbolsStroke = symbolsStroke;
+
+}));
Index: node_modules/d3-shape/dist/d3-shape.min.js
===================================================================
--- node_modules/d3-shape/dist/d3-shape.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/dist/d3-shape.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-shape/ v3.2.0 Copyright 2010-2022 Mike Bostock
+!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("d3-path")):"function"==typeof define&&define.amd?define(["exports","d3-path"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{},t.d3)}(this,(function(t,n){"use strict";function i(t){return function(){return t}}const e=Math.abs,s=Math.atan2,o=Math.cos,h=Math.max,_=Math.min,r=Math.sin,a=Math.sqrt,l=1e-12,c=Math.PI,u=c/2,f=2*c;function y(t){return t>1?0:t<-1?c:Math.acos(t)}function x(t){return t>=1?u:t<=-1?-u:Math.asin(t)}function p(t){let i=3;return t.digits=function(n){if(!arguments.length)return i;if(null==n)i=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);i=t}return t},()=>new n.Path(i)}function v(t){return t.innerRadius}function d(t){return t.outerRadius}function T(t){return t.startAngle}function g(t){return t.endAngle}function m(t){return t&&t.padAngle}function b(t,n,i,e,s,o,h,_){var r=i-t,a=e-n,c=h-s,u=_-o,f=u*r-c*a;if(!(f*f<l))return[t+(f=(c*(n-o)-u*(t-s))/f)*r,n+f*a]}function w(t,n,i,e,s,o,_){var r=t-i,l=n-e,c=(_?o:-o)/a(r*r+l*l),u=c*l,f=-c*r,y=t+u,x=n+f,p=i+u,v=e+f,d=(y+p)/2,T=(x+v)/2,g=p-y,m=v-x,b=g*g+m*m,w=s-o,k=y*v-p*x,N=(m<0?-1:1)*a(h(0,w*w*b-k*k)),S=(k*m-g*N)/b,E=(-k*g-m*N)/b,A=(k*m+g*N)/b,P=(-k*g+m*N)/b,M=S-d,C=E-T,R=A-d,O=P-T;return M*M+C*C>R*R+O*O&&(S=A,E=P),{cx:S,cy:E,x01:-u,y01:-f,x11:S*(s/w-1),y11:E*(s/w-1)}}var k=Array.prototype.slice;function N(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function S(t){this._context=t}function E(t){return new S(t)}function A(t){return t[0]}function P(t){return t[1]}function M(t,n){var e=i(!0),s=null,o=E,h=null,_=p(r);function r(i){var r,a,l,c=(i=N(i)).length,u=!1;for(null==s&&(h=o(l=_())),r=0;r<=c;++r)!(r<c&&e(a=i[r],r,i))===u&&((u=!u)?h.lineStart():h.lineEnd()),u&&h.point(+t(a,r,i),+n(a,r,i));if(l)return h=null,l+""||null}return t="function"==typeof t?t:void 0===t?A:i(t),n="function"==typeof n?n:void 0===n?P:i(n),r.x=function(n){return arguments.length?(t="function"==typeof n?n:i(+n),r):t},r.y=function(t){return arguments.length?(n="function"==typeof t?t:i(+t),r):n},r.defined=function(t){return arguments.length?(e="function"==typeof t?t:i(!!t),r):e},r.curve=function(t){return arguments.length?(o=t,null!=s&&(h=o(s)),r):o},r.context=function(t){return arguments.length?(null==t?s=h=null:h=o(s=t),r):s},r}function C(t,n,e){var s=null,o=i(!0),h=null,_=E,r=null,a=p(l);function l(i){var l,c,u,f,y,x=(i=N(i)).length,p=!1,v=new Array(x),d=new Array(x);for(null==h&&(r=_(y=a())),l=0;l<=x;++l){if(!(l<x&&o(f=i[l],l,i))===p)if(p=!p)c=l,r.areaStart(),r.lineStart();else{for(r.lineEnd(),r.lineStart(),u=l-1;u>=c;--u)r.point(v[u],d[u]);r.lineEnd(),r.areaEnd()}p&&(v[l]=+t(f,l,i),d[l]=+n(f,l,i),r.point(s?+s(f,l,i):v[l],e?+e(f,l,i):d[l]))}if(y)return r=null,y+""||null}function c(){return M().defined(o).curve(_).context(h)}return t="function"==typeof t?t:void 0===t?A:i(+t),n="function"==typeof n?n:i(void 0===n?0:+n),e="function"==typeof e?e:void 0===e?P:i(+e),l.x=function(n){return arguments.length?(t="function"==typeof n?n:i(+n),s=null,l):t},l.x0=function(n){return arguments.length?(t="function"==typeof n?n:i(+n),l):t},l.x1=function(t){return arguments.length?(s=null==t?null:"function"==typeof t?t:i(+t),l):s},l.y=function(t){return arguments.length?(n="function"==typeof t?t:i(+t),e=null,l):n},l.y0=function(t){return arguments.length?(n="function"==typeof t?t:i(+t),l):n},l.y1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:i(+t),l):e},l.lineX0=l.lineY0=function(){return c().x(t).y(n)},l.lineY1=function(){return c().x(t).y(e)},l.lineX1=function(){return c().x(s).y(n)},l.defined=function(t){return arguments.length?(o="function"==typeof t?t:i(!!t),l):o},l.curve=function(t){return arguments.length?(_=t,null!=h&&(r=_(h)),l):_},l.context=function(t){return arguments.length?(null==t?h=r=null:r=_(h=t),l):h},l}function R(t,n){return n<t?-1:n>t?1:n>=t?0:NaN}function O(t){return t}S.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var z=Y(E);function X(t){this._curve=t}function Y(t){function n(n){return new X(t(n))}return n._curve=t,n}function q(t){var n=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?n(Y(t)):n()._curve},t}function B(){return q(M().curve(z))}function D(){var t=C().curve(z),n=t.curve,i=t.lineX0,e=t.lineX1,s=t.lineY0,o=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return q(i())},delete t.lineX0,t.lineEndAngle=function(){return q(e())},delete t.lineX1,t.lineInnerRadius=function(){return q(s())},delete t.lineY0,t.lineOuterRadius=function(){return q(o())},delete t.lineY1,t.curve=function(t){return arguments.length?n(Y(t)):n()._curve},t}function I(t,n){return[(n=+n)*Math.cos(t-=Math.PI/2),n*Math.sin(t)]}X.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};class j{constructor(t,n){this._context=t,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,n,t,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,t,this._y0,t,n)}this._x0=t,this._y0=n}}class L{constructor(t){this._context=t}lineStart(){this._point=0}lineEnd(){}point(t,n){if(t=+t,n=+n,0===this._point)this._point=1;else{const i=I(this._x0,this._y0),e=I(this._x0,this._y0=(this._y0+n)/2),s=I(t,this._y0),o=I(t,n);this._context.moveTo(...i),this._context.bezierCurveTo(...e,...s,...o)}this._x0=t,this._y0=n}}function V(t){return new j(t,!0)}function W(t){return new j(t,!1)}function F(t){return new L(t)}function H(t){return t.source}function $(t){return t.target}function G(t){let n=H,e=$,s=A,o=P,h=null,_=null,r=p(a);function a(){let i;const a=k.call(arguments),l=n.apply(this,a),c=e.apply(this,a);if(null==h&&(_=t(i=r())),_.lineStart(),a[0]=l,_.point(+s.apply(this,a),+o.apply(this,a)),a[0]=c,_.point(+s.apply(this,a),+o.apply(this,a)),_.lineEnd(),i)return _=null,i+""||null}return a.source=function(t){return arguments.length?(n=t,a):n},a.target=function(t){return arguments.length?(e=t,a):e},a.x=function(t){return arguments.length?(s="function"==typeof t?t:i(+t),a):s},a.y=function(t){return arguments.length?(o="function"==typeof t?t:i(+t),a):o},a.context=function(n){return arguments.length?(null==n?h=_=null:_=t(h=n),a):h},a}const J=a(3);var K={draw(t,n){const i=.59436*a(n+_(n/28,.75)),e=i/2,s=e*J;t.moveTo(0,i),t.lineTo(0,-i),t.moveTo(-s,-e),t.lineTo(s,e),t.moveTo(-s,e),t.lineTo(s,-e)}},Q={draw(t,n){const i=a(n/c);t.moveTo(i,0),t.arc(0,0,i,0,f)}},U={draw(t,n){const i=a(n/5)/2;t.moveTo(-3*i,-i),t.lineTo(-i,-i),t.lineTo(-i,-3*i),t.lineTo(i,-3*i),t.lineTo(i,-i),t.lineTo(3*i,-i),t.lineTo(3*i,i),t.lineTo(i,i),t.lineTo(i,3*i),t.lineTo(-i,3*i),t.lineTo(-i,i),t.lineTo(-3*i,i),t.closePath()}};const Z=a(1/3),tt=2*Z;var nt={draw(t,n){const i=a(n/tt),e=i*Z;t.moveTo(0,-i),t.lineTo(e,0),t.lineTo(0,i),t.lineTo(-e,0),t.closePath()}},it={draw(t,n){const i=.62625*a(n);t.moveTo(0,-i),t.lineTo(i,0),t.lineTo(0,i),t.lineTo(-i,0),t.closePath()}},et={draw(t,n){const i=.87559*a(n-_(n/7,2));t.moveTo(-i,0),t.lineTo(i,0),t.moveTo(0,i),t.lineTo(0,-i)}},st={draw(t,n){const i=a(n),e=-i/2;t.rect(e,e,i,i)}},ot={draw(t,n){const i=.4431*a(n);t.moveTo(i,i),t.lineTo(i,-i),t.lineTo(-i,-i),t.lineTo(-i,i),t.closePath()}};const ht=r(c/10)/r(7*c/10),_t=r(f/10)*ht,rt=-o(f/10)*ht;var at={draw(t,n){const i=a(.8908130915292852*n),e=_t*i,s=rt*i;t.moveTo(0,-i),t.lineTo(e,s);for(let n=1;n<5;++n){const h=f*n/5,_=o(h),a=r(h);t.lineTo(a*i,-_*i),t.lineTo(_*e-a*s,a*e+_*s)}t.closePath()}};const lt=a(3);var ct={draw(t,n){const i=-a(n/(3*lt));t.moveTo(0,2*i),t.lineTo(-lt*i,-i),t.lineTo(lt*i,-i),t.closePath()}};const ut=a(3);var ft={draw(t,n){const i=.6824*a(n),e=i/2,s=i*ut/2;t.moveTo(0,-i),t.lineTo(s,e),t.lineTo(-s,e),t.closePath()}};const yt=-.5,xt=a(3)/2,pt=1/a(12),vt=3*(pt/2+1);var dt={draw(t,n){const i=a(n/vt),e=i/2,s=i*pt,o=e,h=i*pt+i,_=-o,r=h;t.moveTo(e,s),t.lineTo(o,h),t.lineTo(_,r),t.lineTo(yt*e-xt*s,xt*e+yt*s),t.lineTo(yt*o-xt*h,xt*o+yt*h),t.lineTo(yt*_-xt*r,xt*_+yt*r),t.lineTo(yt*e+xt*s,yt*s-xt*e),t.lineTo(yt*o+xt*h,yt*h-xt*o),t.lineTo(yt*_+xt*r,yt*r-xt*_),t.closePath()}},Tt={draw(t,n){const i=.6189*a(n-_(n/6,1.7));t.moveTo(-i,-i),t.lineTo(i,i),t.moveTo(-i,i),t.lineTo(i,-i)}};const gt=[Q,U,nt,st,at,ct,dt],mt=[Q,et,Tt,ft,K,ot,it];function bt(){}function wt(t,n,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+n)/6,(t._y0+4*t._y1+i)/6)}function kt(t){this._context=t}function Nt(t){this._context=t}function St(t){this._context=t}function Et(t,n){this._basis=new kt(t),this._beta=n}kt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:wt(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:wt(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Nt.prototype={areaStart:bt,areaEnd:bt,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:wt(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},St.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,e=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(i,e):this._context.moveTo(i,e);break;case 3:this._point=4;default:wt(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Et.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,i=t.length-1;if(i>0)for(var e,s=t[0],o=n[0],h=t[i]-s,_=n[i]-o,r=-1;++r<=i;)e=r/i,this._basis.point(this._beta*t[r]+(1-this._beta)*(s+e*h),this._beta*n[r]+(1-this._beta)*(o+e*_));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var At=function t(n){function i(t){return 1===n?new kt(t):new Et(t,n)}return i.beta=function(n){return t(+n)},i}(.85);function Pt(t,n,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-n),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function Mt(t,n){this._context=t,this._k=(1-n)/6}Mt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Pt(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:Pt(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Ct=function t(n){function i(t){return new Mt(t,n)}return i.tension=function(n){return t(+n)},i}(0);function Rt(t,n){this._context=t,this._k=(1-n)/6}Rt.prototype={areaStart:bt,areaEnd:bt,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Pt(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Ot=function t(n){function i(t){return new Rt(t,n)}return i.tension=function(n){return t(+n)},i}(0);function zt(t,n){this._context=t,this._k=(1-n)/6}zt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Pt(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Xt=function t(n){function i(t){return new zt(t,n)}return i.tension=function(n){return t(+n)},i}(0);function Yt(t,n,i){var e=t._x1,s=t._y1,o=t._x2,h=t._y2;if(t._l01_a>l){var _=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,r=3*t._l01_a*(t._l01_a+t._l12_a);e=(e*_-t._x0*t._l12_2a+t._x2*t._l01_2a)/r,s=(s*_-t._y0*t._l12_2a+t._y2*t._l01_2a)/r}if(t._l23_a>l){var a=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*a+t._x1*t._l23_2a-n*t._l12_2a)/c,h=(h*a+t._y1*t._l23_2a-i*t._l12_2a)/c}t._context.bezierCurveTo(e,s,o,h,t._x2,t._y2)}function qt(t,n){this._context=t,this._alpha=n}qt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var i=this._x2-t,e=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+e*e,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:Yt(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Bt=function t(n){function i(t){return n?new qt(t,n):new Mt(t,0)}return i.alpha=function(n){return t(+n)},i}(.5);function Dt(t,n){this._context=t,this._alpha=n}Dt.prototype={areaStart:bt,areaEnd:bt,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){if(t=+t,n=+n,this._point){var i=this._x2-t,e=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+e*e,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:Yt(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var It=function t(n){function i(t){return n?new Dt(t,n):new Rt(t,0)}return i.alpha=function(n){return t(+n)},i}(.5);function jt(t,n){this._context=t,this._alpha=n}jt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var i=this._x2-t,e=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+e*e,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Yt(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Lt=function t(n){function i(t){return n?new jt(t,n):new zt(t,0)}return i.alpha=function(n){return t(+n)},i}(.5);function Vt(t){this._context=t}function Wt(t){return t<0?-1:1}function Ft(t,n,i){var e=t._x1-t._x0,s=n-t._x1,o=(t._y1-t._y0)/(e||s<0&&-0),h=(i-t._y1)/(s||e<0&&-0),_=(o*s+h*e)/(e+s);return(Wt(o)+Wt(h))*Math.min(Math.abs(o),Math.abs(h),.5*Math.abs(_))||0}function Ht(t,n){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-n)/2:n}function $t(t,n,i){var e=t._x0,s=t._y0,o=t._x1,h=t._y1,_=(o-e)/3;t._context.bezierCurveTo(e+_,s+_*n,o-_,h-_*i,o,h)}function Gt(t){this._context=t}function Jt(t){this._context=new Kt(t)}function Kt(t){this._context=t}function Qt(t){this._context=t}function Ut(t){var n,i,e=t.length-1,s=new Array(e),o=new Array(e),h=new Array(e);for(s[0]=0,o[0]=2,h[0]=t[0]+2*t[1],n=1;n<e-1;++n)s[n]=1,o[n]=4,h[n]=4*t[n]+2*t[n+1];for(s[e-1]=2,o[e-1]=7,h[e-1]=8*t[e-1]+t[e],n=1;n<e;++n)i=s[n]/o[n-1],o[n]-=i,h[n]-=i*h[n-1];for(s[e-1]=h[e-1]/o[e-1],n=e-2;n>=0;--n)s[n]=(h[n]-s[n+1])/o[n];for(o[e-1]=(t[e]+s[e-1])/2,n=0;n<e-1;++n)o[n]=2*t[n+1]-s[n+1];return[s,o]}function Zt(t,n){this._context=t,this._t=n}function tn(t,n){if((s=t.length)>1)for(var i,e,s,o=1,h=t[n[0]],_=h.length;o<s;++o)for(e=h,h=t[n[o]],i=0;i<_;++i)h[i][1]+=h[i][0]=isNaN(e[i][1])?e[i][0]:e[i][1]}function nn(t){for(var n=t.length,i=new Array(n);--n>=0;)i[n]=n;return i}function en(t,n){return t[n]}function sn(t){const n=[];return n.key=t,n}function on(t){var n=t.map(hn);return nn(t).sort((function(t,i){return n[t]-n[i]}))}function hn(t){for(var n,i=-1,e=0,s=t.length,o=-1/0;++i<s;)(n=+t[i][1])>o&&(o=n,e=i);return e}function _n(t){var n=t.map(rn);return nn(t).sort((function(t,i){return n[t]-n[i]}))}function rn(t){for(var n,i=0,e=-1,s=t.length;++e<s;)(n=+t[e][1])&&(i+=n);return i}Vt.prototype={areaStart:bt,areaEnd:bt,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,n){t=+t,n=+n,this._point?this._context.lineTo(t,n):(this._point=1,this._context.moveTo(t,n))}},Gt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:$t(this,this._t0,Ht(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var i=NaN;if(n=+n,(t=+t)!==this._x1||n!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,$t(this,Ht(this,i=Ft(this,t,n)),i);break;default:$t(this,this._t0,i=Ft(this,t,n))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=i}}},(Jt.prototype=Object.create(Gt.prototype)).point=function(t,n){Gt.prototype.point.call(this,n,t)},Kt.prototype={moveTo:function(t,n){this._context.moveTo(n,t)},closePath:function(){this._context.closePath()},lineTo:function(t,n){this._context.lineTo(n,t)},bezierCurveTo:function(t,n,i,e,s,o){this._context.bezierCurveTo(n,t,e,i,o,s)}},Qt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,n=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],n[0]):this._context.moveTo(t[0],n[0]),2===i)this._context.lineTo(t[1],n[1]);else for(var e=Ut(t),s=Ut(n),o=0,h=1;h<i;++o,++h)this._context.bezierCurveTo(e[0][o],s[0][o],e[1][o],s[1][o],t[h],n[h]);(this._line||0!==this._line&&1===i)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,n){this._x.push(+t),this._y.push(+n)}},Zt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,n)}}this._x=t,this._y=n}},t.arc=function(){var t=v,n=d,h=i(0),k=null,N=T,S=g,E=m,A=null,P=p(M);function M(){var i,p,v=+t.apply(this,arguments),d=+n.apply(this,arguments),T=N.apply(this,arguments)-u,g=S.apply(this,arguments)-u,m=e(g-T),M=g>T;if(A||(A=i=P()),d<v&&(p=d,d=v,v=p),d>l)if(m>f-l)A.moveTo(d*o(T),d*r(T)),A.arc(0,0,d,T,g,!M),v>l&&(A.moveTo(v*o(g),v*r(g)),A.arc(0,0,v,g,T,M));else{var C,R,O=T,z=g,X=T,Y=g,q=m,B=m,D=E.apply(this,arguments)/2,I=D>l&&(k?+k.apply(this,arguments):a(v*v+d*d)),j=_(e(d-v)/2,+h.apply(this,arguments)),L=j,V=j;if(I>l){var W=x(I/v*r(D)),F=x(I/d*r(D));(q-=2*W)>l?(X+=W*=M?1:-1,Y-=W):(q=0,X=Y=(T+g)/2),(B-=2*F)>l?(O+=F*=M?1:-1,z-=F):(B=0,O=z=(T+g)/2)}var H=d*o(O),$=d*r(O),G=v*o(Y),J=v*r(Y);if(j>l){var K,Q=d*o(z),U=d*r(z),Z=v*o(X),tt=v*r(X);if(m<c)if(K=b(H,$,Z,tt,Q,U,G,J)){var nt=H-K[0],it=$-K[1],et=Q-K[0],st=U-K[1],ot=1/r(y((nt*et+it*st)/(a(nt*nt+it*it)*a(et*et+st*st)))/2),ht=a(K[0]*K[0]+K[1]*K[1]);L=_(j,(v-ht)/(ot-1)),V=_(j,(d-ht)/(ot+1))}else L=V=0}B>l?V>l?(C=w(Z,tt,H,$,d,V,M),R=w(Q,U,G,J,d,V,M),A.moveTo(C.cx+C.x01,C.cy+C.y01),V<j?A.arc(C.cx,C.cy,V,s(C.y01,C.x01),s(R.y01,R.x01),!M):(A.arc(C.cx,C.cy,V,s(C.y01,C.x01),s(C.y11,C.x11),!M),A.arc(0,0,d,s(C.cy+C.y11,C.cx+C.x11),s(R.cy+R.y11,R.cx+R.x11),!M),A.arc(R.cx,R.cy,V,s(R.y11,R.x11),s(R.y01,R.x01),!M))):(A.moveTo(H,$),A.arc(0,0,d,O,z,!M)):A.moveTo(H,$),v>l&&q>l?L>l?(C=w(G,J,Q,U,v,-L,M),R=w(H,$,Z,tt,v,-L,M),A.lineTo(C.cx+C.x01,C.cy+C.y01),L<j?A.arc(C.cx,C.cy,L,s(C.y01,C.x01),s(R.y01,R.x01),!M):(A.arc(C.cx,C.cy,L,s(C.y01,C.x01),s(C.y11,C.x11),!M),A.arc(0,0,v,s(C.cy+C.y11,C.cx+C.x11),s(R.cy+R.y11,R.cx+R.x11),M),A.arc(R.cx,R.cy,L,s(R.y11,R.x11),s(R.y01,R.x01),!M))):A.arc(0,0,v,Y,X,M):A.lineTo(G,J)}else A.moveTo(0,0);if(A.closePath(),i)return A=null,i+""||null}return M.centroid=function(){var i=(+t.apply(this,arguments)+ +n.apply(this,arguments))/2,e=(+N.apply(this,arguments)+ +S.apply(this,arguments))/2-c/2;return[o(e)*i,r(e)*i]},M.innerRadius=function(n){return arguments.length?(t="function"==typeof n?n:i(+n),M):t},M.outerRadius=function(t){return arguments.length?(n="function"==typeof t?t:i(+t),M):n},M.cornerRadius=function(t){return arguments.length?(h="function"==typeof t?t:i(+t),M):h},M.padRadius=function(t){return arguments.length?(k=null==t?null:"function"==typeof t?t:i(+t),M):k},M.startAngle=function(t){return arguments.length?(N="function"==typeof t?t:i(+t),M):N},M.endAngle=function(t){return arguments.length?(S="function"==typeof t?t:i(+t),M):S},M.padAngle=function(t){return arguments.length?(E="function"==typeof t?t:i(+t),M):E},M.context=function(t){return arguments.length?(A=null==t?null:t,M):A},M},t.area=C,t.areaRadial=D,t.curveBasis=function(t){return new kt(t)},t.curveBasisClosed=function(t){return new Nt(t)},t.curveBasisOpen=function(t){return new St(t)},t.curveBumpX=V,t.curveBumpY=W,t.curveBundle=At,t.curveCardinal=Ct,t.curveCardinalClosed=Ot,t.curveCardinalOpen=Xt,t.curveCatmullRom=Bt,t.curveCatmullRomClosed=It,t.curveCatmullRomOpen=Lt,t.curveLinear=E,t.curveLinearClosed=function(t){return new Vt(t)},t.curveMonotoneX=function(t){return new Gt(t)},t.curveMonotoneY=function(t){return new Jt(t)},t.curveNatural=function(t){return new Qt(t)},t.curveStep=function(t){return new Zt(t,.5)},t.curveStepAfter=function(t){return new Zt(t,1)},t.curveStepBefore=function(t){return new Zt(t,0)},t.line=M,t.lineRadial=B,t.link=G,t.linkHorizontal=function(){return G(V)},t.linkRadial=function(){const t=G(F);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.linkVertical=function(){return G(W)},t.pie=function(){var t=O,n=R,e=null,s=i(0),o=i(f),h=i(0);function _(i){var _,r,a,l,c,u=(i=N(i)).length,y=0,x=new Array(u),p=new Array(u),v=+s.apply(this,arguments),d=Math.min(f,Math.max(-f,o.apply(this,arguments)-v)),T=Math.min(Math.abs(d)/u,h.apply(this,arguments)),g=T*(d<0?-1:1);for(_=0;_<u;++_)(c=p[x[_]=_]=+t(i[_],_,i))>0&&(y+=c);for(null!=n?x.sort((function(t,i){return n(p[t],p[i])})):null!=e&&x.sort((function(t,n){return e(i[t],i[n])})),_=0,a=y?(d-u*g)/y:0;_<u;++_,v=l)r=x[_],l=v+((c=p[r])>0?c*a:0)+g,p[r]={data:i[r],index:_,value:c,startAngle:v,endAngle:l,padAngle:T};return p}return _.value=function(n){return arguments.length?(t="function"==typeof n?n:i(+n),_):t},_.sortValues=function(t){return arguments.length?(n=t,e=null,_):n},_.sort=function(t){return arguments.length?(e=t,n=null,_):e},_.startAngle=function(t){return arguments.length?(s="function"==typeof t?t:i(+t),_):s},_.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:i(+t),_):o},_.padAngle=function(t){return arguments.length?(h="function"==typeof t?t:i(+t),_):h},_},t.pointRadial=I,t.radialArea=D,t.radialLine=B,t.stack=function(){var t=i([]),n=nn,e=tn,s=en;function o(i){var o,h,_=Array.from(t.apply(this,arguments),sn),r=_.length,a=-1;for(const t of i)for(o=0,++a;o<r;++o)(_[o][a]=[0,+s(t,_[o].key,a,i)]).data=t;for(o=0,h=N(n(_));o<r;++o)_[h[o]].index=o;return e(_,h),_}return o.keys=function(n){return arguments.length?(t="function"==typeof n?n:i(Array.from(n)),o):t},o.value=function(t){return arguments.length?(s="function"==typeof t?t:i(+t),o):s},o.order=function(t){return arguments.length?(n=null==t?nn:"function"==typeof t?t:i(Array.from(t)),o):n},o.offset=function(t){return arguments.length?(e=null==t?tn:t,o):e},o},t.stackOffsetDiverging=function(t,n){if((_=t.length)>0)for(var i,e,s,o,h,_,r=0,a=t[n[0]].length;r<a;++r)for(o=h=0,i=0;i<_;++i)(s=(e=t[n[i]][r])[1]-e[0])>0?(e[0]=o,e[1]=o+=s):s<0?(e[1]=h,e[0]=h+=s):(e[0]=0,e[1]=s)},t.stackOffsetExpand=function(t,n){if((e=t.length)>0){for(var i,e,s,o=0,h=t[0].length;o<h;++o){for(s=i=0;i<e;++i)s+=t[i][o][1]||0;if(s)for(i=0;i<e;++i)t[i][o][1]/=s}tn(t,n)}},t.stackOffsetNone=tn,t.stackOffsetSilhouette=function(t,n){if((i=t.length)>0){for(var i,e=0,s=t[n[0]],o=s.length;e<o;++e){for(var h=0,_=0;h<i;++h)_+=t[h][e][1]||0;s[e][1]+=s[e][0]=-_/2}tn(t,n)}},t.stackOffsetWiggle=function(t,n){if((s=t.length)>0&&(e=(i=t[n[0]]).length)>0){for(var i,e,s,o=0,h=1;h<e;++h){for(var _=0,r=0,a=0;_<s;++_){for(var l=t[n[_]],c=l[h][1]||0,u=(c-(l[h-1][1]||0))/2,f=0;f<_;++f){var y=t[n[f]];u+=(y[h][1]||0)-(y[h-1][1]||0)}r+=c,a+=u*c}i[h-1][1]+=i[h-1][0]=o,r&&(o-=a/r)}i[h-1][1]+=i[h-1][0]=o,tn(t,n)}},t.stackOrderAppearance=on,t.stackOrderAscending=_n,t.stackOrderDescending=function(t){return _n(t).reverse()},t.stackOrderInsideOut=function(t){var n,i,e=t.length,s=t.map(rn),o=on(t),h=0,_=0,r=[],a=[];for(n=0;n<e;++n)i=o[n],h<_?(h+=s[i],r.push(i)):(_+=s[i],a.push(i));return a.reverse().concat(r)},t.stackOrderNone=nn,t.stackOrderReverse=function(t){return nn(t).reverse()},t.symbol=function(t,n){let e=null,s=p(o);function o(){let i;if(e||(e=i=s()),t.apply(this,arguments).draw(e,+n.apply(this,arguments)),i)return e=null,i+""||null}return t="function"==typeof t?t:i(t||Q),n="function"==typeof n?n:i(void 0===n?64:+n),o.type=function(n){return arguments.length?(t="function"==typeof n?n:i(n),o):t},o.size=function(t){return arguments.length?(n="function"==typeof t?t:i(+t),o):n},o.context=function(t){return arguments.length?(e=null==t?null:t,o):e},o},t.symbolAsterisk=K,t.symbolCircle=Q,t.symbolCross=U,t.symbolDiamond=nt,t.symbolDiamond2=it,t.symbolPlus=et,t.symbolSquare=st,t.symbolSquare2=ot,t.symbolStar=at,t.symbolTimes=Tt,t.symbolTriangle=ct,t.symbolTriangle2=ft,t.symbolWye=dt,t.symbolX=Tt,t.symbols=gt,t.symbolsFill=gt,t.symbolsStroke=mt}));
Index: node_modules/d3-shape/package.json
===================================================================
--- node_modules/d3-shape/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+{
+  "name": "d3-shape",
+  "version": "3.2.0",
+  "description": "Graphical primitives for visualization, such as lines and areas.",
+  "homepage": "https://d3js.org/d3-shape/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-shape.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "graphics",
+    "visualization",
+    "canvas",
+    "svg"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-shape.min.js",
+  "unpkg": "dist/d3-shape.min.js",
+  "exports": {
+    "umd": "./dist/d3-shape.min.js",
+    "default": "./src/index.js"
+  },
+  "sideEffects": false,
+  "dependencies": {
+    "d3-path": "^3.1.0"
+  },
+  "devDependencies": {
+    "d3-polygon": "1 - 3",
+    "eslint": "8",
+    "mocha": "10",
+    "rollup": "3",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-shape/src/arc.js
===================================================================
--- node_modules/d3-shape/src/arc.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/arc.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,268 @@
+import constant from "./constant.js";
+import {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from "./math.js";
+import {withPath} from "./path.js";
+
+function arcInnerRadius(d) {
+  return d.innerRadius;
+}
+
+function arcOuterRadius(d) {
+  return d.outerRadius;
+}
+
+function arcStartAngle(d) {
+  return d.startAngle;
+}
+
+function arcEndAngle(d) {
+  return d.endAngle;
+}
+
+function arcPadAngle(d) {
+  return d && d.padAngle; // Note: optional!
+}
+
+function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
+  var x10 = x1 - x0, y10 = y1 - y0,
+      x32 = x3 - x2, y32 = y3 - y2,
+      t = y32 * x10 - x32 * y10;
+  if (t * t < epsilon) return;
+  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
+  return [x0 + t * x10, y0 + t * y10];
+}
+
+// Compute perpendicular offset line of length rc.
+// http://mathworld.wolfram.com/Circle-LineIntersection.html
+function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
+  var x01 = x0 - x1,
+      y01 = y0 - y1,
+      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),
+      ox = lo * y01,
+      oy = -lo * x01,
+      x11 = x0 + ox,
+      y11 = y0 + oy,
+      x10 = x1 + ox,
+      y10 = y1 + oy,
+      x00 = (x11 + x10) / 2,
+      y00 = (y11 + y10) / 2,
+      dx = x10 - x11,
+      dy = y10 - y11,
+      d2 = dx * dx + dy * dy,
+      r = r1 - rc,
+      D = x11 * y10 - x10 * y11,
+      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),
+      cx0 = (D * dy - dx * d) / d2,
+      cy0 = (-D * dx - dy * d) / d2,
+      cx1 = (D * dy + dx * d) / d2,
+      cy1 = (-D * dx + dy * d) / d2,
+      dx0 = cx0 - x00,
+      dy0 = cy0 - y00,
+      dx1 = cx1 - x00,
+      dy1 = cy1 - y00;
+
+  // Pick the closer of the two intersection points.
+  // TODO Is there a faster way to determine which intersection to use?
+  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
+
+  return {
+    cx: cx0,
+    cy: cy0,
+    x01: -ox,
+    y01: -oy,
+    x11: cx0 * (r1 / r - 1),
+    y11: cy0 * (r1 / r - 1)
+  };
+}
+
+export default function() {
+  var innerRadius = arcInnerRadius,
+      outerRadius = arcOuterRadius,
+      cornerRadius = constant(0),
+      padRadius = null,
+      startAngle = arcStartAngle,
+      endAngle = arcEndAngle,
+      padAngle = arcPadAngle,
+      context = null,
+      path = withPath(arc);
+
+  function arc() {
+    var buffer,
+        r,
+        r0 = +innerRadius.apply(this, arguments),
+        r1 = +outerRadius.apply(this, arguments),
+        a0 = startAngle.apply(this, arguments) - halfPi,
+        a1 = endAngle.apply(this, arguments) - halfPi,
+        da = abs(a1 - a0),
+        cw = a1 > a0;
+
+    if (!context) context = buffer = path();
+
+    // Ensure that the outer radius is always larger than the inner radius.
+    if (r1 < r0) r = r1, r1 = r0, r0 = r;
+
+    // Is it a point?
+    if (!(r1 > epsilon)) context.moveTo(0, 0);
+
+    // Or is it a circle or annulus?
+    else if (da > tau - epsilon) {
+      context.moveTo(r1 * cos(a0), r1 * sin(a0));
+      context.arc(0, 0, r1, a0, a1, !cw);
+      if (r0 > epsilon) {
+        context.moveTo(r0 * cos(a1), r0 * sin(a1));
+        context.arc(0, 0, r0, a1, a0, cw);
+      }
+    }
+
+    // Or is it a circular or annular sector?
+    else {
+      var a01 = a0,
+          a11 = a1,
+          a00 = a0,
+          a10 = a1,
+          da0 = da,
+          da1 = da,
+          ap = padAngle.apply(this, arguments) / 2,
+          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),
+          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
+          rc0 = rc,
+          rc1 = rc,
+          t0,
+          t1;
+
+      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
+      if (rp > epsilon) {
+        var p0 = asin(rp / r0 * sin(ap)),
+            p1 = asin(rp / r1 * sin(ap));
+        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
+        else da0 = 0, a00 = a10 = (a0 + a1) / 2;
+        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
+        else da1 = 0, a01 = a11 = (a0 + a1) / 2;
+      }
+
+      var x01 = r1 * cos(a01),
+          y01 = r1 * sin(a01),
+          x10 = r0 * cos(a10),
+          y10 = r0 * sin(a10);
+
+      // Apply rounded corners?
+      if (rc > epsilon) {
+        var x11 = r1 * cos(a11),
+            y11 = r1 * sin(a11),
+            x00 = r0 * cos(a00),
+            y00 = r0 * sin(a00),
+            oc;
+
+        // Restrict the corner radius according to the sector angle. If this
+        // intersection fails, it’s probably because the arc is too small, so
+        // disable the corner radius entirely.
+        if (da < pi) {
+          if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {
+            var ax = x01 - oc[0],
+                ay = y01 - oc[1],
+                bx = x11 - oc[0],
+                by = y11 - oc[1],
+                kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),
+                lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
+            rc0 = min(rc, (r0 - lc) / (kc - 1));
+            rc1 = min(rc, (r1 - lc) / (kc + 1));
+          } else {
+            rc0 = rc1 = 0;
+          }
+        }
+      }
+
+      // Is the sector collapsed to a line?
+      if (!(da1 > epsilon)) context.moveTo(x01, y01);
+
+      // Does the sector’s outer ring have rounded corners?
+      else if (rc1 > epsilon) {
+        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
+        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
+
+        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+        // Have the corners merged?
+        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);
+
+        // Otherwise, draw the two corners and the ring.
+        else {
+          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);
+          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
+          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);
+        }
+      }
+
+      // Or is the outer ring just a circular arc?
+      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
+
+      // Is there no inner ring, and it’s a circular sector?
+      // Or perhaps it’s an annular sector collapsed due to padding?
+      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);
+
+      // Does the sector’s inner ring (or point) have rounded corners?
+      else if (rc0 > epsilon) {
+        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
+        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
+
+        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+        // Have the corners merged?
+        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);
+
+        // Otherwise, draw the two corners and the ring.
+        else {
+          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);
+          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);
+          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);
+        }
+      }
+
+      // Or is the inner ring just a circular arc?
+      else context.arc(0, 0, r0, a10, a00, cw);
+    }
+
+    context.closePath();
+
+    if (buffer) return context = null, buffer + "" || null;
+  }
+
+  arc.centroid = function() {
+    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
+        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;
+    return [cos(a) * r, sin(a) * r];
+  };
+
+  arc.innerRadius = function(_) {
+    return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant(+_), arc) : innerRadius;
+  };
+
+  arc.outerRadius = function(_) {
+    return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant(+_), arc) : outerRadius;
+  };
+
+  arc.cornerRadius = function(_) {
+    return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant(+_), arc) : cornerRadius;
+  };
+
+  arc.padRadius = function(_) {
+    return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant(+_), arc) : padRadius;
+  };
+
+  arc.startAngle = function(_) {
+    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), arc) : startAngle;
+  };
+
+  arc.endAngle = function(_) {
+    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), arc) : endAngle;
+  };
+
+  arc.padAngle = function(_) {
+    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), arc) : padAngle;
+  };
+
+  arc.context = function(_) {
+    return arguments.length ? ((context = _ == null ? null : _), arc) : context;
+  };
+
+  return arc;
+}
Index: node_modules/d3-shape/src/area.js
===================================================================
--- node_modules/d3-shape/src/area.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/area.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,112 @@
+import array from "./array.js";
+import constant from "./constant.js";
+import curveLinear from "./curve/linear.js";
+import line from "./line.js";
+import {withPath} from "./path.js";
+import {x as pointX, y as pointY} from "./point.js";
+
+export default function(x0, y0, y1) {
+  var x1 = null,
+      defined = constant(true),
+      context = null,
+      curve = curveLinear,
+      output = null,
+      path = withPath(area);
+
+  x0 = typeof x0 === "function" ? x0 : (x0 === undefined) ? pointX : constant(+x0);
+  y0 = typeof y0 === "function" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);
+  y1 = typeof y1 === "function" ? y1 : (y1 === undefined) ? pointY : constant(+y1);
+
+  function area(data) {
+    var i,
+        j,
+        k,
+        n = (data = array(data)).length,
+        d,
+        defined0 = false,
+        buffer,
+        x0z = new Array(n),
+        y0z = new Array(n);
+
+    if (context == null) output = curve(buffer = path());
+
+    for (i = 0; i <= n; ++i) {
+      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+        if (defined0 = !defined0) {
+          j = i;
+          output.areaStart();
+          output.lineStart();
+        } else {
+          output.lineEnd();
+          output.lineStart();
+          for (k = i - 1; k >= j; --k) {
+            output.point(x0z[k], y0z[k]);
+          }
+          output.lineEnd();
+          output.areaEnd();
+        }
+      }
+      if (defined0) {
+        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
+        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
+      }
+    }
+
+    if (buffer) return output = null, buffer + "" || null;
+  }
+
+  function arealine() {
+    return line().defined(defined).curve(curve).context(context);
+  }
+
+  area.x = function(_) {
+    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), x1 = null, area) : x0;
+  };
+
+  area.x0 = function(_) {
+    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant(+_), area) : x0;
+  };
+
+  area.x1 = function(_) {
+    return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : x1;
+  };
+
+  area.y = function(_) {
+    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), y1 = null, area) : y0;
+  };
+
+  area.y0 = function(_) {
+    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant(+_), area) : y0;
+  };
+
+  area.y1 = function(_) {
+    return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant(+_), area) : y1;
+  };
+
+  area.lineX0 =
+  area.lineY0 = function() {
+    return arealine().x(x0).y(y0);
+  };
+
+  area.lineY1 = function() {
+    return arealine().x(x0).y(y1);
+  };
+
+  area.lineX1 = function() {
+    return arealine().x(x1).y(y0);
+  };
+
+  area.defined = function(_) {
+    return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), area) : defined;
+  };
+
+  area.curve = function(_) {
+    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
+  };
+
+  area.context = function(_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
+  };
+
+  return area;
+}
Index: node_modules/d3-shape/src/areaRadial.js
===================================================================
--- node_modules/d3-shape/src/areaRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/areaRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import curveRadial, {curveRadialLinear} from "./curve/radial.js";
+import area from "./area.js";
+import {lineRadial} from "./lineRadial.js";
+
+export default function() {
+  var a = area().curve(curveRadialLinear),
+      c = a.curve,
+      x0 = a.lineX0,
+      x1 = a.lineX1,
+      y0 = a.lineY0,
+      y1 = a.lineY1;
+
+  a.angle = a.x, delete a.x;
+  a.startAngle = a.x0, delete a.x0;
+  a.endAngle = a.x1, delete a.x1;
+  a.radius = a.y, delete a.y;
+  a.innerRadius = a.y0, delete a.y0;
+  a.outerRadius = a.y1, delete a.y1;
+  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;
+  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;
+  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;
+  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;
+
+  a.curve = function(_) {
+    return arguments.length ? c(curveRadial(_)) : c()._curve;
+  };
+
+  return a;
+}
Index: node_modules/d3-shape/src/array.js
===================================================================
--- node_modules/d3-shape/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+export var slice = Array.prototype.slice;
+
+export default function(x) {
+  return typeof x === "object" && "length" in x
+    ? x // Array, TypedArray, NodeList, array-like
+    : Array.from(x); // Map, Set, iterable, string, or anything else
+}
Index: node_modules/d3-shape/src/constant.js
===================================================================
--- node_modules/d3-shape/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export default function(x) {
+  return function constant() {
+    return x;
+  };
+}
Index: node_modules/d3-shape/src/curve/basis.js
===================================================================
--- node_modules/d3-shape/src/curve/basis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/basis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+export function point(that, x, y) {
+  that._context.bezierCurveTo(
+    (2 * that._x0 + that._x1) / 3,
+    (2 * that._y0 + that._y1) / 3,
+    (that._x0 + 2 * that._x1) / 3,
+    (that._y0 + 2 * that._y1) / 3,
+    (that._x0 + 4 * that._x1 + x) / 6,
+    (that._y0 + 4 * that._y1 + y) / 6
+  );
+}
+
+export function Basis(context) {
+  this._context = context;
+}
+
+Basis.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 =
+    this._y0 = this._y1 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 3: point(this, this._x1, this._y1); // falls through
+      case 2: this._context.lineTo(this._x1, this._y1); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through
+      default: point(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+
+export default function(context) {
+  return new Basis(context);
+}
Index: node_modules/d3-shape/src/curve/basisClosed.js
===================================================================
--- node_modules/d3-shape/src/curve/basisClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/basisClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+import noop from "../noop.js";
+import {point} from "./basis.js";
+
+function BasisClosed(context) {
+  this._context = context;
+}
+
+BasisClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
+    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 1: {
+        this._context.moveTo(this._x2, this._y2);
+        this._context.closePath();
+        break;
+      }
+      case 2: {
+        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
+        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
+        this._context.closePath();
+        break;
+      }
+      case 3: {
+        this.point(this._x2, this._y2);
+        this.point(this._x3, this._y3);
+        this.point(this._x4, this._y4);
+        break;
+      }
+    }
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
+      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
+      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
+      default: point(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+
+export default function(context) {
+  return new BasisClosed(context);
+}
Index: node_modules/d3-shape/src/curve/basisOpen.js
===================================================================
--- node_modules/d3-shape/src/curve/basisOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/basisOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import {point} from "./basis.js";
+
+function BasisOpen(context) {
+  this._context = context;
+}
+
+BasisOpen.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 =
+    this._y0 = this._y1 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
+      case 3: this._point = 4; // falls through
+      default: point(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+
+export default function(context) {
+  return new BasisOpen(context);
+}
Index: node_modules/d3-shape/src/curve/bump.js
===================================================================
--- node_modules/d3-shape/src/curve/bump.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/bump.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,75 @@
+import pointRadial from "../pointRadial.js";
+
+class Bump {
+  constructor(context, x) {
+    this._context = context;
+    this._x = x;
+  }
+  areaStart() {
+    this._line = 0;
+  }
+  areaEnd() {
+    this._line = NaN;
+  }
+  lineStart() {
+    this._point = 0;
+  }
+  lineEnd() {
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  }
+  point(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: {
+        this._point = 1;
+        if (this._line) this._context.lineTo(x, y);
+        else this._context.moveTo(x, y);
+        break;
+      }
+      case 1: this._point = 2; // falls through
+      default: {
+        if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);
+        else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);
+        break;
+      }
+    }
+    this._x0 = x, this._y0 = y;
+  }
+}
+
+class BumpRadial {
+  constructor(context) {
+    this._context = context;
+  }
+  lineStart() {
+    this._point = 0;
+  }
+  lineEnd() {}
+  point(x, y) {
+    x = +x, y = +y;
+    if (this._point === 0) {
+      this._point = 1;
+    } else {
+      const p0 = pointRadial(this._x0, this._y0);
+      const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);
+      const p2 = pointRadial(x, this._y0);
+      const p3 = pointRadial(x, y);
+      this._context.moveTo(...p0);
+      this._context.bezierCurveTo(...p1, ...p2, ...p3);
+    }
+    this._x0 = x, this._y0 = y;
+  }
+}
+
+export function bumpX(context) {
+  return new Bump(context, true);
+}
+
+export function bumpY(context) {
+  return new Bump(context, false);
+}
+
+export function bumpRadial(context) {
+  return new BumpRadial(context);
+}
Index: node_modules/d3-shape/src/curve/bundle.js
===================================================================
--- node_modules/d3-shape/src/curve/bundle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/bundle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+import {Basis} from "./basis.js";
+
+function Bundle(context, beta) {
+  this._basis = new Basis(context);
+  this._beta = beta;
+}
+
+Bundle.prototype = {
+  lineStart: function() {
+    this._x = [];
+    this._y = [];
+    this._basis.lineStart();
+  },
+  lineEnd: function() {
+    var x = this._x,
+        y = this._y,
+        j = x.length - 1;
+
+    if (j > 0) {
+      var x0 = x[0],
+          y0 = y[0],
+          dx = x[j] - x0,
+          dy = y[j] - y0,
+          i = -1,
+          t;
+
+      while (++i <= j) {
+        t = i / j;
+        this._basis.point(
+          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
+          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
+        );
+      }
+    }
+
+    this._x = this._y = null;
+    this._basis.lineEnd();
+  },
+  point: function(x, y) {
+    this._x.push(+x);
+    this._y.push(+y);
+  }
+};
+
+export default (function custom(beta) {
+
+  function bundle(context) {
+    return beta === 1 ? new Basis(context) : new Bundle(context, beta);
+  }
+
+  bundle.beta = function(beta) {
+    return custom(+beta);
+  };
+
+  return bundle;
+})(0.85);
Index: node_modules/d3-shape/src/curve/cardinal.js
===================================================================
--- node_modules/d3-shape/src/curve/cardinal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/cardinal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+export function point(that, x, y) {
+  that._context.bezierCurveTo(
+    that._x1 + that._k * (that._x2 - that._x0),
+    that._y1 + that._k * (that._y2 - that._y0),
+    that._x2 + that._k * (that._x1 - x),
+    that._y2 + that._k * (that._y1 - y),
+    that._x2,
+    that._y2
+  );
+}
+
+export function Cardinal(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+
+Cardinal.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 2: this._context.lineTo(this._x2, this._y2); break;
+      case 3: point(this, this._x1, this._y1); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
+      case 2: this._point = 3; // falls through
+      default: point(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+export default (function custom(tension) {
+
+  function cardinal(context) {
+    return new Cardinal(context, tension);
+  }
+
+  cardinal.tension = function(tension) {
+    return custom(+tension);
+  };
+
+  return cardinal;
+})(0);
Index: node_modules/d3-shape/src/curve/cardinalClosed.js
===================================================================
--- node_modules/d3-shape/src/curve/cardinalClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/cardinalClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+import noop from "../noop.js";
+import {point} from "./cardinal.js";
+
+export function CardinalClosed(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+
+CardinalClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 1: {
+        this._context.moveTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 2: {
+        this._context.lineTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 3: {
+        this.point(this._x3, this._y3);
+        this.point(this._x4, this._y4);
+        this.point(this._x5, this._y5);
+        break;
+      }
+    }
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+      default: point(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+export default (function custom(tension) {
+
+  function cardinal(context) {
+    return new CardinalClosed(context, tension);
+  }
+
+  cardinal.tension = function(tension) {
+    return custom(+tension);
+  };
+
+  return cardinal;
+})(0);
Index: node_modules/d3-shape/src/curve/cardinalOpen.js
===================================================================
--- node_modules/d3-shape/src/curve/cardinalOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/cardinalOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+import {point} from "./cardinal.js";
+
+export function CardinalOpen(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+
+CardinalOpen.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+      case 3: this._point = 4; // falls through
+      default: point(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+export default (function custom(tension) {
+
+  function cardinal(context) {
+    return new CardinalOpen(context, tension);
+  }
+
+  cardinal.tension = function(tension) {
+    return custom(+tension);
+  };
+
+  return cardinal;
+})(0);
Index: node_modules/d3-shape/src/curve/catmullRom.js
===================================================================
--- node_modules/d3-shape/src/curve/catmullRom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/catmullRom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,88 @@
+import {epsilon} from "../math.js";
+import {Cardinal} from "./cardinal.js";
+
+export function point(that, x, y) {
+  var x1 = that._x1,
+      y1 = that._y1,
+      x2 = that._x2,
+      y2 = that._y2;
+
+  if (that._l01_a > epsilon) {
+    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
+        n = 3 * that._l01_a * (that._l01_a + that._l12_a);
+    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
+    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
+  }
+
+  if (that._l23_a > epsilon) {
+    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
+        m = 3 * that._l23_a * (that._l23_a + that._l12_a);
+    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
+    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
+  }
+
+  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
+}
+
+function CatmullRom(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+
+CatmullRom.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._l01_a = this._l12_a = this._l23_a =
+    this._l01_2a = this._l12_2a = this._l23_2a =
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 2: this._context.lineTo(this._x2, this._y2); break;
+      case 3: this.point(this._x2, this._y2); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+
+    if (this._point) {
+      var x23 = this._x2 - x,
+          y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; // falls through
+      default: point(this, x, y); break;
+    }
+
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+export default (function custom(alpha) {
+
+  function catmullRom(context) {
+    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
+  }
+
+  catmullRom.alpha = function(alpha) {
+    return custom(+alpha);
+  };
+
+  return catmullRom;
+})(0.5);
Index: node_modules/d3-shape/src/curve/catmullRomClosed.js
===================================================================
--- node_modules/d3-shape/src/curve/catmullRomClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/catmullRomClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+import {CardinalClosed} from "./cardinalClosed.js";
+import noop from "../noop.js";
+import {point} from "./catmullRom.js";
+
+function CatmullRomClosed(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+
+CatmullRomClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+    this._l01_a = this._l12_a = this._l23_a =
+    this._l01_2a = this._l12_2a = this._l23_2a =
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 1: {
+        this._context.moveTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 2: {
+        this._context.lineTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 3: {
+        this.point(this._x3, this._y3);
+        this.point(this._x4, this._y4);
+        this.point(this._x5, this._y5);
+        break;
+      }
+    }
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+
+    if (this._point) {
+      var x23 = this._x2 - x,
+          y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+
+    switch (this._point) {
+      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+      default: point(this, x, y); break;
+    }
+
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+export default (function custom(alpha) {
+
+  function catmullRom(context) {
+    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
+  }
+
+  catmullRom.alpha = function(alpha) {
+    return custom(+alpha);
+  };
+
+  return catmullRom;
+})(0.5);
Index: node_modules/d3-shape/src/curve/catmullRomOpen.js
===================================================================
--- node_modules/d3-shape/src/curve/catmullRomOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/catmullRomOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+import {CardinalOpen} from "./cardinalOpen.js";
+import {point} from "./catmullRom.js";
+
+function CatmullRomOpen(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+
+CatmullRomOpen.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._l01_a = this._l12_a = this._l23_a =
+    this._l01_2a = this._l12_2a = this._l23_2a =
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+
+    if (this._point) {
+      var x23 = this._x2 - x,
+          y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+
+    switch (this._point) {
+      case 0: this._point = 1; break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+      case 3: this._point = 4; // falls through
+      default: point(this, x, y); break;
+    }
+
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+export default (function custom(alpha) {
+
+  function catmullRom(context) {
+    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
+  }
+
+  catmullRom.alpha = function(alpha) {
+    return custom(+alpha);
+  };
+
+  return catmullRom;
+})(0.5);
Index: node_modules/d3-shape/src/curve/linear.js
===================================================================
--- node_modules/d3-shape/src/curve/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+function Linear(context) {
+  this._context = context;
+}
+
+Linear.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; // falls through
+      default: this._context.lineTo(x, y); break;
+    }
+  }
+};
+
+export default function(context) {
+  return new Linear(context);
+}
Index: node_modules/d3-shape/src/curve/linearClosed.js
===================================================================
--- node_modules/d3-shape/src/curve/linearClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/linearClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import noop from "../noop.js";
+
+function LinearClosed(context) {
+  this._context = context;
+}
+
+LinearClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._point) this._context.closePath();
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    if (this._point) this._context.lineTo(x, y);
+    else this._point = 1, this._context.moveTo(x, y);
+  }
+};
+
+export default function(context) {
+  return new LinearClosed(context);
+}
Index: node_modules/d3-shape/src/curve/monotone.js
===================================================================
--- node_modules/d3-shape/src/curve/monotone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/monotone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,104 @@
+function sign(x) {
+  return x < 0 ? -1 : 1;
+}
+
+// Calculate the slopes of the tangents (Hermite-type interpolation) based on
+// the following paper: Steffen, M. 1990. A Simple Method for Monotonic
+// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
+// NOV(II), P. 443, 1990.
+function slope3(that, x2, y2) {
+  var h0 = that._x1 - that._x0,
+      h1 = x2 - that._x1,
+      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
+      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
+      p = (s0 * h1 + s1 * h0) / (h0 + h1);
+  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
+}
+
+// Calculate a one-sided slope.
+function slope2(that, t) {
+  var h = that._x1 - that._x0;
+  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
+}
+
+// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
+// "you can express cubic Hermite interpolation in terms of cubic Bézier curves
+// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
+function point(that, t0, t1) {
+  var x0 = that._x0,
+      y0 = that._y0,
+      x1 = that._x1,
+      y1 = that._y1,
+      dx = (x1 - x0) / 3;
+  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
+}
+
+function MonotoneX(context) {
+  this._context = context;
+}
+
+MonotoneX.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 =
+    this._y0 = this._y1 =
+    this._t0 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 2: this._context.lineTo(this._x1, this._y1); break;
+      case 3: point(this, this._t0, slope2(this, this._t0)); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    var t1 = NaN;
+
+    x = +x, y = +y;
+    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
+      default: point(this, this._t0, t1 = slope3(this, x, y)); break;
+    }
+
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+    this._t0 = t1;
+  }
+}
+
+function MonotoneY(context) {
+  this._context = new ReflectContext(context);
+}
+
+(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
+  MonotoneX.prototype.point.call(this, y, x);
+};
+
+function ReflectContext(context) {
+  this._context = context;
+}
+
+ReflectContext.prototype = {
+  moveTo: function(x, y) { this._context.moveTo(y, x); },
+  closePath: function() { this._context.closePath(); },
+  lineTo: function(x, y) { this._context.lineTo(y, x); },
+  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
+};
+
+export function monotoneX(context) {
+  return new MonotoneX(context);
+}
+
+export function monotoneY(context) {
+  return new MonotoneY(context);
+}
Index: node_modules/d3-shape/src/curve/natural.js
===================================================================
--- node_modules/d3-shape/src/curve/natural.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/natural.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+function Natural(context) {
+  this._context = context;
+}
+
+Natural.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x = [];
+    this._y = [];
+  },
+  lineEnd: function() {
+    var x = this._x,
+        y = this._y,
+        n = x.length;
+
+    if (n) {
+      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
+      if (n === 2) {
+        this._context.lineTo(x[1], y[1]);
+      } else {
+        var px = controlPoints(x),
+            py = controlPoints(y);
+        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
+          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
+        }
+      }
+    }
+
+    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+    this._x = this._y = null;
+  },
+  point: function(x, y) {
+    this._x.push(+x);
+    this._y.push(+y);
+  }
+};
+
+// See https://www.particleincell.com/2012/bezier-splines/ for derivation.
+function controlPoints(x) {
+  var i,
+      n = x.length - 1,
+      m,
+      a = new Array(n),
+      b = new Array(n),
+      r = new Array(n);
+  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
+  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
+  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
+  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
+  a[n - 1] = r[n - 1] / b[n - 1];
+  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
+  b[n - 1] = (x[n] + a[n - 1]) / 2;
+  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
+  return [a, b];
+}
+
+export default function(context) {
+  return new Natural(context);
+}
Index: node_modules/d3-shape/src/curve/radial.js
===================================================================
--- node_modules/d3-shape/src/curve/radial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/radial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import curveLinear from "./linear.js";
+
+export var curveRadialLinear = curveRadial(curveLinear);
+
+function Radial(curve) {
+  this._curve = curve;
+}
+
+Radial.prototype = {
+  areaStart: function() {
+    this._curve.areaStart();
+  },
+  areaEnd: function() {
+    this._curve.areaEnd();
+  },
+  lineStart: function() {
+    this._curve.lineStart();
+  },
+  lineEnd: function() {
+    this._curve.lineEnd();
+  },
+  point: function(a, r) {
+    this._curve.point(r * Math.sin(a), r * -Math.cos(a));
+  }
+};
+
+export default function curveRadial(curve) {
+
+  function radial(context) {
+    return new Radial(curve(context));
+  }
+
+  radial._curve = curve;
+
+  return radial;
+}
Index: node_modules/d3-shape/src/curve/step.js
===================================================================
--- node_modules/d3-shape/src/curve/step.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/curve/step.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+function Step(context, t) {
+  this._context = context;
+  this._t = t;
+}
+
+Step.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x = this._y = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; // falls through
+      default: {
+        if (this._t <= 0) {
+          this._context.lineTo(this._x, y);
+          this._context.lineTo(x, y);
+        } else {
+          var x1 = this._x * (1 - this._t) + x * this._t;
+          this._context.lineTo(x1, this._y);
+          this._context.lineTo(x1, y);
+        }
+        break;
+      }
+    }
+    this._x = x, this._y = y;
+  }
+};
+
+export default function(context) {
+  return new Step(context, 0.5);
+}
+
+export function stepBefore(context) {
+  return new Step(context, 0);
+}
+
+export function stepAfter(context) {
+  return new Step(context, 1);
+}
Index: node_modules/d3-shape/src/descending.js
===================================================================
--- node_modules/d3-shape/src/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default function(a, b) {
+  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+}
Index: node_modules/d3-shape/src/identity.js
===================================================================
--- node_modules/d3-shape/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default function(d) {
+  return d;
+}
Index: node_modules/d3-shape/src/index.js
===================================================================
--- node_modules/d3-shape/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+export {default as arc} from "./arc.js";
+export {default as area} from "./area.js";
+export {default as line} from "./line.js";
+export {default as pie} from "./pie.js";
+export {default as areaRadial, default as radialArea} from "./areaRadial.js"; // Note: radialArea is deprecated!
+export {default as lineRadial, default as radialLine} from "./lineRadial.js"; // Note: radialLine is deprecated!
+export {default as pointRadial} from "./pointRadial.js";
+export {link, linkHorizontal, linkVertical, linkRadial} from "./link.js";
+
+export {default as symbol, symbolsStroke, symbolsFill, symbolsFill as symbols} from "./symbol.js";
+export {default as symbolAsterisk} from "./symbol/asterisk.js";
+export {default as symbolCircle} from "./symbol/circle.js";
+export {default as symbolCross} from "./symbol/cross.js";
+export {default as symbolDiamond} from "./symbol/diamond.js";
+export {default as symbolDiamond2} from "./symbol/diamond2.js";
+export {default as symbolPlus} from "./symbol/plus.js";
+export {default as symbolSquare} from "./symbol/square.js";
+export {default as symbolSquare2} from "./symbol/square2.js";
+export {default as symbolStar} from "./symbol/star.js";
+export {default as symbolTriangle} from "./symbol/triangle.js";
+export {default as symbolTriangle2} from "./symbol/triangle2.js";
+export {default as symbolWye} from "./symbol/wye.js";
+export {default as symbolTimes, default as symbolX} from "./symbol/times.js";
+
+export {default as curveBasisClosed} from "./curve/basisClosed.js";
+export {default as curveBasisOpen} from "./curve/basisOpen.js";
+export {default as curveBasis} from "./curve/basis.js";
+export {bumpX as curveBumpX, bumpY as curveBumpY} from "./curve/bump.js";
+export {default as curveBundle} from "./curve/bundle.js";
+export {default as curveCardinalClosed} from "./curve/cardinalClosed.js";
+export {default as curveCardinalOpen} from "./curve/cardinalOpen.js";
+export {default as curveCardinal} from "./curve/cardinal.js";
+export {default as curveCatmullRomClosed} from "./curve/catmullRomClosed.js";
+export {default as curveCatmullRomOpen} from "./curve/catmullRomOpen.js";
+export {default as curveCatmullRom} from "./curve/catmullRom.js";
+export {default as curveLinearClosed} from "./curve/linearClosed.js";
+export {default as curveLinear} from "./curve/linear.js";
+export {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from "./curve/monotone.js";
+export {default as curveNatural} from "./curve/natural.js";
+export {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from "./curve/step.js";
+
+export {default as stack} from "./stack.js";
+export {default as stackOffsetExpand} from "./offset/expand.js";
+export {default as stackOffsetDiverging} from "./offset/diverging.js";
+export {default as stackOffsetNone} from "./offset/none.js";
+export {default as stackOffsetSilhouette} from "./offset/silhouette.js";
+export {default as stackOffsetWiggle} from "./offset/wiggle.js";
+export {default as stackOrderAppearance} from "./order/appearance.js";
+export {default as stackOrderAscending} from "./order/ascending.js";
+export {default as stackOrderDescending} from "./order/descending.js";
+export {default as stackOrderInsideOut} from "./order/insideOut.js";
+export {default as stackOrderNone} from "./order/none.js";
+export {default as stackOrderReverse} from "./order/reverse.js";
Index: node_modules/d3-shape/src/line.js
===================================================================
--- node_modules/d3-shape/src/line.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/line.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+import array from "./array.js";
+import constant from "./constant.js";
+import curveLinear from "./curve/linear.js";
+import {withPath} from "./path.js";
+import {x as pointX, y as pointY} from "./point.js";
+
+export default function(x, y) {
+  var defined = constant(true),
+      context = null,
+      curve = curveLinear,
+      output = null,
+      path = withPath(line);
+
+  x = typeof x === "function" ? x : (x === undefined) ? pointX : constant(x);
+  y = typeof y === "function" ? y : (y === undefined) ? pointY : constant(y);
+
+  function line(data) {
+    var i,
+        n = (data = array(data)).length,
+        d,
+        defined0 = false,
+        buffer;
+
+    if (context == null) output = curve(buffer = path());
+
+    for (i = 0; i <= n; ++i) {
+      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+        if (defined0 = !defined0) output.lineStart();
+        else output.lineEnd();
+      }
+      if (defined0) output.point(+x(d, i, data), +y(d, i, data));
+    }
+
+    if (buffer) return output = null, buffer + "" || null;
+  }
+
+  line.x = function(_) {
+    return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), line) : x;
+  };
+
+  line.y = function(_) {
+    return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), line) : y;
+  };
+
+  line.defined = function(_) {
+    return arguments.length ? (defined = typeof _ === "function" ? _ : constant(!!_), line) : defined;
+  };
+
+  line.curve = function(_) {
+    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
+  };
+
+  line.context = function(_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
+  };
+
+  return line;
+}
Index: node_modules/d3-shape/src/lineRadial.js
===================================================================
--- node_modules/d3-shape/src/lineRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/lineRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import curveRadial, {curveRadialLinear} from "./curve/radial.js";
+import line from "./line.js";
+
+export function lineRadial(l) {
+  var c = l.curve;
+
+  l.angle = l.x, delete l.x;
+  l.radius = l.y, delete l.y;
+
+  l.curve = function(_) {
+    return arguments.length ? c(curveRadial(_)) : c()._curve;
+  };
+
+  return l;
+}
+
+export default function() {
+  return lineRadial(line().curve(curveRadialLinear));
+}
Index: node_modules/d3-shape/src/link.js
===================================================================
--- node_modules/d3-shape/src/link.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/link.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,73 @@
+import {slice} from "./array.js";
+import constant from "./constant.js";
+import {bumpX, bumpY, bumpRadial} from "./curve/bump.js";
+import {withPath} from "./path.js";
+import {x as pointX, y as pointY} from "./point.js";
+
+function linkSource(d) {
+  return d.source;
+}
+
+function linkTarget(d) {
+  return d.target;
+}
+
+export function link(curve) {
+  let source = linkSource,
+      target = linkTarget,
+      x = pointX,
+      y = pointY,
+      context = null,
+      output = null,
+      path = withPath(link);
+
+  function link() {
+    let buffer;
+    const argv = slice.call(arguments);
+    const s = source.apply(this, argv);
+    const t = target.apply(this, argv);
+    if (context == null) output = curve(buffer = path());
+    output.lineStart();
+    argv[0] = s, output.point(+x.apply(this, argv), +y.apply(this, argv));
+    argv[0] = t, output.point(+x.apply(this, argv), +y.apply(this, argv));
+    output.lineEnd();
+    if (buffer) return output = null, buffer + "" || null;
+  }
+
+  link.source = function(_) {
+    return arguments.length ? (source = _, link) : source;
+  };
+
+  link.target = function(_) {
+    return arguments.length ? (target = _, link) : target;
+  };
+
+  link.x = function(_) {
+    return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), link) : x;
+  };
+
+  link.y = function(_) {
+    return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), link) : y;
+  };
+
+  link.context = function(_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;
+  };
+
+  return link;
+}
+
+export function linkHorizontal() {
+  return link(bumpX);
+}
+
+export function linkVertical() {
+  return link(bumpY);
+}
+
+export function linkRadial() {
+  const l = link(bumpRadial);
+  l.angle = l.x, delete l.x;
+  l.radius = l.y, delete l.y;
+  return l;
+}
Index: node_modules/d3-shape/src/math.js
===================================================================
--- node_modules/d3-shape/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+export const abs = Math.abs;
+export const atan2 = Math.atan2;
+export const cos = Math.cos;
+export const max = Math.max;
+export const min = Math.min;
+export const sin = Math.sin;
+export const sqrt = Math.sqrt;
+
+export const epsilon = 1e-12;
+export const pi = Math.PI;
+export const halfPi = pi / 2;
+export const tau = 2 * pi;
+
+export function acos(x) {
+  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);
+}
+
+export function asin(x) {
+  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);
+}
Index: node_modules/d3-shape/src/noop.js
===================================================================
--- node_modules/d3-shape/src/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export default function() {}
Index: node_modules/d3-shape/src/offset/diverging.js
===================================================================
--- node_modules/d3-shape/src/offset/diverging.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/offset/diverging.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+export default function(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
+    for (yp = yn = 0, i = 0; i < n; ++i) {
+      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {
+        d[0] = yp, d[1] = yp += dy;
+      } else if (dy < 0) {
+        d[1] = yn, d[0] = yn += dy;
+      } else {
+        d[0] = 0, d[1] = dy;
+      }
+    }
+  }
+}
Index: node_modules/d3-shape/src/offset/expand.js
===================================================================
--- node_modules/d3-shape/src/offset/expand.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/offset/expand.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import none from "./none.js";
+
+export default function(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
+    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
+    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
+  }
+  none(series, order);
+}
Index: node_modules/d3-shape/src/offset/none.js
===================================================================
--- node_modules/d3-shape/src/offset/none.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/offset/none.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export default function(series, order) {
+  if (!((n = series.length) > 1)) return;
+  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
+    s0 = s1, s1 = series[order[i]];
+    for (j = 0; j < m; ++j) {
+      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
+    }
+  }
+}
Index: node_modules/d3-shape/src/offset/silhouette.js
===================================================================
--- node_modules/d3-shape/src/offset/silhouette.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/offset/silhouette.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import none from "./none.js";
+
+export default function(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
+    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
+    s0[j][1] += s0[j][0] = -y / 2;
+  }
+  none(series, order);
+}
Index: node_modules/d3-shape/src/offset/wiggle.js
===================================================================
--- node_modules/d3-shape/src/offset/wiggle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/offset/wiggle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import none from "./none.js";
+
+export default function(series, order) {
+  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
+  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
+    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
+      var si = series[order[i]],
+          sij0 = si[j][1] || 0,
+          sij1 = si[j - 1][1] || 0,
+          s3 = (sij0 - sij1) / 2;
+      for (var k = 0; k < i; ++k) {
+        var sk = series[order[k]],
+            skj0 = sk[j][1] || 0,
+            skj1 = sk[j - 1][1] || 0;
+        s3 += skj0 - skj1;
+      }
+      s1 += sij0, s2 += s3 * sij0;
+    }
+    s0[j - 1][1] += s0[j - 1][0] = y;
+    if (s1) y -= s2 / s1;
+  }
+  s0[j - 1][1] += s0[j - 1][0] = y;
+  none(series, order);
+}
Index: node_modules/d3-shape/src/order/appearance.js
===================================================================
--- node_modules/d3-shape/src/order/appearance.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/order/appearance.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import none from "./none.js";
+
+export default function(series) {
+  var peaks = series.map(peak);
+  return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });
+}
+
+function peak(series) {
+  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;
+  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;
+  return j;
+}
Index: node_modules/d3-shape/src/order/ascending.js
===================================================================
--- node_modules/d3-shape/src/order/ascending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/order/ascending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import none from "./none.js";
+
+export default function(series) {
+  var sums = series.map(sum);
+  return none(series).sort(function(a, b) { return sums[a] - sums[b]; });
+}
+
+export function sum(series) {
+  var s = 0, i = -1, n = series.length, v;
+  while (++i < n) if (v = +series[i][1]) s += v;
+  return s;
+}
Index: node_modules/d3-shape/src/order/descending.js
===================================================================
--- node_modules/d3-shape/src/order/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/order/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import ascending from "./ascending.js";
+
+export default function(series) {
+  return ascending(series).reverse();
+}
Index: node_modules/d3-shape/src/order/insideOut.js
===================================================================
--- node_modules/d3-shape/src/order/insideOut.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/order/insideOut.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import appearance from "./appearance.js";
+import {sum} from "./ascending.js";
+
+export default function(series) {
+  var n = series.length,
+      i,
+      j,
+      sums = series.map(sum),
+      order = appearance(series),
+      top = 0,
+      bottom = 0,
+      tops = [],
+      bottoms = [];
+
+  for (i = 0; i < n; ++i) {
+    j = order[i];
+    if (top < bottom) {
+      top += sums[j];
+      tops.push(j);
+    } else {
+      bottom += sums[j];
+      bottoms.push(j);
+    }
+  }
+
+  return bottoms.reverse().concat(tops);
+}
Index: node_modules/d3-shape/src/order/none.js
===================================================================
--- node_modules/d3-shape/src/order/none.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/order/none.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export default function(series) {
+  var n = series.length, o = new Array(n);
+  while (--n >= 0) o[n] = n;
+  return o;
+}
Index: node_modules/d3-shape/src/order/reverse.js
===================================================================
--- node_modules/d3-shape/src/order/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/order/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import none from "./none.js";
+
+export default function(series) {
+  return none(series).reverse();
+}
Index: node_modules/d3-shape/src/path.js
===================================================================
--- node_modules/d3-shape/src/path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import {Path} from "d3-path";
+
+export function withPath(shape) {
+  let digits = 3;
+
+  shape.digits = function(_) {
+    if (!arguments.length) return digits;
+    if (_ == null) {
+      digits = null;
+    } else {
+      const d = Math.floor(_);
+      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);
+      digits = d;
+    }
+    return shape;
+  };
+
+  return () => new Path(digits);
+}
Index: node_modules/d3-shape/src/pie.js
===================================================================
--- node_modules/d3-shape/src/pie.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/pie.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+import array from "./array.js";
+import constant from "./constant.js";
+import descending from "./descending.js";
+import identity from "./identity.js";
+import {tau} from "./math.js";
+
+export default function() {
+  var value = identity,
+      sortValues = descending,
+      sort = null,
+      startAngle = constant(0),
+      endAngle = constant(tau),
+      padAngle = constant(0);
+
+  function pie(data) {
+    var i,
+        n = (data = array(data)).length,
+        j,
+        k,
+        sum = 0,
+        index = new Array(n),
+        arcs = new Array(n),
+        a0 = +startAngle.apply(this, arguments),
+        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),
+        a1,
+        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
+        pa = p * (da < 0 ? -1 : 1),
+        v;
+
+    for (i = 0; i < n; ++i) {
+      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
+        sum += v;
+      }
+    }
+
+    // Optionally sort the arcs by previously-computed values or by data.
+    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
+    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
+
+    // Compute the arcs! They are stored in the original data's order.
+    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
+      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
+        data: data[j],
+        index: i,
+        value: v,
+        startAngle: a0,
+        endAngle: a1,
+        padAngle: p
+      };
+    }
+
+    return arcs;
+  }
+
+  pie.value = function(_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), pie) : value;
+  };
+
+  pie.sortValues = function(_) {
+    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
+  };
+
+  pie.sort = function(_) {
+    return arguments.length ? (sort = _, sortValues = null, pie) : sort;
+  };
+
+  pie.startAngle = function(_) {
+    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant(+_), pie) : startAngle;
+  };
+
+  pie.endAngle = function(_) {
+    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant(+_), pie) : endAngle;
+  };
+
+  pie.padAngle = function(_) {
+    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant(+_), pie) : padAngle;
+  };
+
+  return pie;
+}
Index: node_modules/d3-shape/src/point.js
===================================================================
--- node_modules/d3-shape/src/point.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/point.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+export function x(p) {
+  return p[0];
+}
+
+export function y(p) {
+  return p[1];
+}
Index: node_modules/d3-shape/src/pointRadial.js
===================================================================
--- node_modules/d3-shape/src/pointRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/pointRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export default function(x, y) {
+  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
+}
Index: node_modules/d3-shape/src/stack.js
===================================================================
--- node_modules/d3-shape/src/stack.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/stack.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+import array from "./array.js";
+import constant from "./constant.js";
+import offsetNone from "./offset/none.js";
+import orderNone from "./order/none.js";
+
+function stackValue(d, key) {
+  return d[key];
+}
+
+function stackSeries(key) {
+  const series = [];
+  series.key = key;
+  return series;
+}
+
+export default function() {
+  var keys = constant([]),
+      order = orderNone,
+      offset = offsetNone,
+      value = stackValue;
+
+  function stack(data) {
+    var sz = Array.from(keys.apply(this, arguments), stackSeries),
+        i, n = sz.length, j = -1,
+        oz;
+
+    for (const d of data) {
+      for (i = 0, ++j; i < n; ++i) {
+        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;
+      }
+    }
+
+    for (i = 0, oz = array(order(sz)); i < n; ++i) {
+      sz[oz[i]].index = i;
+    }
+
+    offset(sz, oz);
+    return sz;
+  }
+
+  stack.keys = function(_) {
+    return arguments.length ? (keys = typeof _ === "function" ? _ : constant(Array.from(_)), stack) : keys;
+  };
+
+  stack.value = function(_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : constant(+_), stack) : value;
+  };
+
+  stack.order = function(_) {
+    return arguments.length ? (order = _ == null ? orderNone : typeof _ === "function" ? _ : constant(Array.from(_)), stack) : order;
+  };
+
+  stack.offset = function(_) {
+    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;
+  };
+
+  return stack;
+}
Index: node_modules/d3-shape/src/symbol.js
===================================================================
--- node_modules/d3-shape/src/symbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,66 @@
+import constant from "./constant.js";
+import {withPath} from "./path.js";
+import asterisk from "./symbol/asterisk.js";
+import circle from "./symbol/circle.js";
+import cross from "./symbol/cross.js";
+import diamond from "./symbol/diamond.js";
+import diamond2 from "./symbol/diamond2.js";
+import plus from "./symbol/plus.js";
+import square from "./symbol/square.js";
+import square2 from "./symbol/square2.js";
+import star from "./symbol/star.js";
+import triangle from "./symbol/triangle.js";
+import triangle2 from "./symbol/triangle2.js";
+import wye from "./symbol/wye.js";
+import times from "./symbol/times.js";
+
+// These symbols are designed to be filled.
+export const symbolsFill = [
+  circle,
+  cross,
+  diamond,
+  square,
+  star,
+  triangle,
+  wye
+];
+
+// These symbols are designed to be stroked (with a width of 1.5px and round caps).
+export const symbolsStroke = [
+  circle,
+  plus,
+  times,
+  triangle2,
+  asterisk,
+  square2,
+  diamond2
+];
+
+export default function Symbol(type, size) {
+  let context = null,
+      path = withPath(symbol);
+
+  type = typeof type === "function" ? type : constant(type || circle);
+  size = typeof size === "function" ? size : constant(size === undefined ? 64 : +size);
+
+  function symbol() {
+    let buffer;
+    if (!context) context = buffer = path();
+    type.apply(this, arguments).draw(context, +size.apply(this, arguments));
+    if (buffer) return context = null, buffer + "" || null;
+  }
+
+  symbol.type = function(_) {
+    return arguments.length ? (type = typeof _ === "function" ? _ : constant(_), symbol) : type;
+  };
+
+  symbol.size = function(_) {
+    return arguments.length ? (size = typeof _ === "function" ? _ : constant(+_), symbol) : size;
+  };
+
+  symbol.context = function(_) {
+    return arguments.length ? (context = _ == null ? null : _, symbol) : context;
+  };
+
+  return symbol;
+}
Index: node_modules/d3-shape/src/symbol/asterisk.js
===================================================================
--- node_modules/d3-shape/src/symbol/asterisk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/asterisk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import {min, sqrt} from "../math.js";
+
+const sqrt3 = sqrt(3);
+
+export default {
+  draw(context, size) {
+    const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;
+    const t = r / 2;
+    const u = t * sqrt3;
+    context.moveTo(0, r);
+    context.lineTo(0, -r);
+    context.moveTo(-u, -t);
+    context.lineTo(u, t);
+    context.moveTo(-u, t);
+    context.lineTo(u, -t);
+  }
+};
Index: node_modules/d3-shape/src/symbol/circle.js
===================================================================
--- node_modules/d3-shape/src/symbol/circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import {pi, sqrt, tau} from "../math.js";
+
+export default {
+  draw(context, size) {
+    const r = sqrt(size / pi);
+    context.moveTo(r, 0);
+    context.arc(0, 0, r, 0, tau);
+  }
+};
Index: node_modules/d3-shape/src/symbol/cross.js
===================================================================
--- node_modules/d3-shape/src/symbol/cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import {sqrt} from "../math.js";
+
+export default {
+  draw(context, size) {
+    const r = sqrt(size / 5) / 2;
+    context.moveTo(-3 * r, -r);
+    context.lineTo(-r, -r);
+    context.lineTo(-r, -3 * r);
+    context.lineTo(r, -3 * r);
+    context.lineTo(r, -r);
+    context.lineTo(3 * r, -r);
+    context.lineTo(3 * r, r);
+    context.lineTo(r, r);
+    context.lineTo(r, 3 * r);
+    context.lineTo(-r, 3 * r);
+    context.lineTo(-r, r);
+    context.lineTo(-3 * r, r);
+    context.closePath();
+  }
+};
Index: node_modules/d3-shape/src/symbol/diamond.js
===================================================================
--- node_modules/d3-shape/src/symbol/diamond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/diamond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import {sqrt} from "../math.js";
+
+const tan30 = sqrt(1 / 3);
+const tan30_2 = tan30 * 2;
+
+export default {
+  draw(context, size) {
+    const y = sqrt(size / tan30_2);
+    const x = y * tan30;
+    context.moveTo(0, -y);
+    context.lineTo(x, 0);
+    context.lineTo(0, y);
+    context.lineTo(-x, 0);
+    context.closePath();
+  }
+};
Index: node_modules/d3-shape/src/symbol/diamond2.js
===================================================================
--- node_modules/d3-shape/src/symbol/diamond2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/diamond2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import {sqrt} from "../math.js";
+
+export default {
+  draw(context, size) {
+    const r = sqrt(size) * 0.62625;
+    context.moveTo(0, -r);
+    context.lineTo(r, 0);
+    context.lineTo(0, r);
+    context.lineTo(-r, 0);
+    context.closePath();
+  }
+};
Index: node_modules/d3-shape/src/symbol/plus.js
===================================================================
--- node_modules/d3-shape/src/symbol/plus.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/plus.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import {min, sqrt} from "../math.js";
+
+export default {
+  draw(context, size) {
+    const r = sqrt(size - min(size / 7, 2)) * 0.87559;
+    context.moveTo(-r, 0);
+    context.lineTo(r, 0);
+    context.moveTo(0, r);
+    context.lineTo(0, -r);
+  }
+};
Index: node_modules/d3-shape/src/symbol/square.js
===================================================================
--- node_modules/d3-shape/src/symbol/square.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/square.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import {sqrt} from "../math.js";
+
+export default {
+  draw(context, size) {
+    const w = sqrt(size);
+    const x = -w / 2;
+    context.rect(x, x, w, w);
+  }
+};
Index: node_modules/d3-shape/src/symbol/square2.js
===================================================================
--- node_modules/d3-shape/src/symbol/square2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/square2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import {sqrt} from "../math.js";
+
+export default {
+  draw(context, size) {
+    const r = sqrt(size) * 0.4431;
+    context.moveTo(r, r);
+    context.lineTo(r, -r);
+    context.lineTo(-r, -r);
+    context.lineTo(-r, r);
+    context.closePath();
+  }
+};
Index: node_modules/d3-shape/src/symbol/star.js
===================================================================
--- node_modules/d3-shape/src/symbol/star.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/star.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import {sin, cos, sqrt, pi, tau} from "../math.js";
+
+const ka = 0.89081309152928522810;
+const kr = sin(pi / 10) / sin(7 * pi / 10);
+const kx = sin(tau / 10) * kr;
+const ky = -cos(tau / 10) * kr;
+
+export default {
+  draw(context, size) {
+    const r = sqrt(size * ka);
+    const x = kx * r;
+    const y = ky * r;
+    context.moveTo(0, -r);
+    context.lineTo(x, y);
+    for (let i = 1; i < 5; ++i) {
+      const a = tau * i / 5;
+      const c = cos(a);
+      const s = sin(a);
+      context.lineTo(s * r, -c * r);
+      context.lineTo(c * x - s * y, s * x + c * y);
+    }
+    context.closePath();
+  }
+};
Index: node_modules/d3-shape/src/symbol/times.js
===================================================================
--- node_modules/d3-shape/src/symbol/times.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/times.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import {min, sqrt} from "../math.js";
+
+export default {
+  draw(context, size) {
+    const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;
+    context.moveTo(-r, -r);
+    context.lineTo(r, r);
+    context.moveTo(-r, r);
+    context.lineTo(r, -r);
+  }
+};
Index: node_modules/d3-shape/src/symbol/triangle.js
===================================================================
--- node_modules/d3-shape/src/symbol/triangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/triangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import {sqrt} from "../math.js";
+
+const sqrt3 = sqrt(3);
+
+export default {
+  draw(context, size) {
+    const y = -sqrt(size / (sqrt3 * 3));
+    context.moveTo(0, y * 2);
+    context.lineTo(-sqrt3 * y, -y);
+    context.lineTo(sqrt3 * y, -y);
+    context.closePath();
+  }
+};
Index: node_modules/d3-shape/src/symbol/triangle2.js
===================================================================
--- node_modules/d3-shape/src/symbol/triangle2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/triangle2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import {sqrt} from "../math.js";
+
+const sqrt3 = sqrt(3);
+
+export default {
+  draw(context, size) {
+    const s = sqrt(size) * 0.6824;
+    const t = s  / 2;
+    const u = (s * sqrt3) / 2; // cos(Math.PI / 6)
+    context.moveTo(0, -s);
+    context.lineTo(u, t);
+    context.lineTo(-u, t);
+    context.closePath();
+  }
+};
Index: node_modules/d3-shape/src/symbol/wye.js
===================================================================
--- node_modules/d3-shape/src/symbol/wye.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-shape/src/symbol/wye.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import {sqrt} from "../math.js";
+
+const c = -0.5;
+const s = sqrt(3) / 2;
+const k = 1 / sqrt(12);
+const a = (k / 2 + 1) * 3;
+
+export default {
+  draw(context, size) {
+    const r = sqrt(size / a);
+    const x0 = r / 2, y0 = r * k;
+    const x1 = x0, y1 = r * k + r;
+    const x2 = -x1, y2 = y1;
+    context.moveTo(x0, y0);
+    context.lineTo(x1, y1);
+    context.lineTo(x2, y2);
+    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
+    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
+    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
+    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
+    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
+    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
+    context.closePath();
+  }
+};
Index: node_modules/d3-time-format/LICENSE
===================================================================
--- node_modules/d3-time-format/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-time-format/README.md
===================================================================
--- node_modules/d3-time-format/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,209 @@
+# d3-time-format
+
+This module provides a JavaScript implementation of the venerable [strptime](http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html) and [strftime](http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html) functions from the C standard library, and can be used to parse or format [dates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) in a variety of locale-specific representations. To format a date, create a [formatter](#locale_format) from a specifier (a string with the desired format *directives*, indicated by `%`); then pass a date to the formatter, which returns a string. For example, to convert the current date to a human-readable string:
+
+```js
+const formatTime = d3.timeFormat("%B %d, %Y");
+formatTime(new Date); // "June 30, 2015"
+```
+
+Likewise, to convert a string back to a date, create a [parser](#locale_parse):
+
+```js
+const parseTime = d3.timeParse("%B %d, %Y");
+parseTime("June 30, 2015"); // Tue Jun 30 2015 00:00:00 GMT-0700 (PDT)
+```
+
+You can implement more elaborate conditional time formats, too. For example, here’s a [multi-scale time format](https://bl.ocks.org/mbostock/4149176) using [time intervals](https://github.com/d3/d3-time):
+
+```js
+const formatMillisecond = d3.timeFormat(".%L"),
+    formatSecond = d3.timeFormat(":%S"),
+    formatMinute = d3.timeFormat("%I:%M"),
+    formatHour = d3.timeFormat("%I %p"),
+    formatDay = d3.timeFormat("%a %d"),
+    formatWeek = d3.timeFormat("%b %d"),
+    formatMonth = d3.timeFormat("%B"),
+    formatYear = d3.timeFormat("%Y");
+
+function multiFormat(date) {
+  return (d3.timeSecond(date) < date ? formatMillisecond
+      : d3.timeMinute(date) < date ? formatSecond
+      : d3.timeHour(date) < date ? formatMinute
+      : d3.timeDay(date) < date ? formatHour
+      : d3.timeMonth(date) < date ? (d3.timeWeek(date) < date ? formatDay : formatWeek)
+      : d3.timeYear(date) < date ? formatMonth
+      : formatYear)(date);
+}
+```
+
+This module is used by D3 [time scales](https://github.com/d3/d3-scale/blob/main/README.md#time-scales) to generate human-readable ticks.
+
+## Installing
+
+If you use npm, `npm install d3-time-format`. You can also download the [latest release on GitHub](https://github.com/d3/d3-time-format/releases/latest). For vanilla HTML in modern browsers, import d3-time-format from Skypack:
+
+```html
+<script type="module">
+
+import {timeFormat} from "https://cdn.skypack.dev/d3-time-format@4";
+
+const format = timeFormat("%x");
+
+</script>
+```
+
+For legacy environments, you can load d3-time-format’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-array@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-time@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-time-format@4"></script>
+<script>
+
+const format = d3.timeFormat("%x");
+
+</script>
+
+Locale files are published to npm and can be loaded using [d3.json](https://github.com/d3/d3-fetch/blob/main/README.md#json). For example, to set Russian as the default locale:
+
+```js
+d3.json("https://cdn.jsdelivr.net/npm/d3-time-format@3/locale/ru-RU.json").then(locale => {
+  d3.timeFormatDefaultLocale(locale);
+
+  const format = d3.timeFormat("%c");
+
+  console.log(format(new Date)); // понедельник,  5 декабря 2016 г. 10:31:59
+});
+```
+
+## API Reference
+
+<a name="timeFormat" href="#timeFormat">#</a> d3.<b>timeFormat</b>(<i>specifier</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/defaultLocale.js)
+
+An alias for [*locale*.format](#locale_format) on the [default locale](#timeFormatDefaultLocale).
+
+<a name="timeParse" href="#timeParse">#</a> d3.<b>timeParse</b>(<i>specifier</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/defaultLocale.js)
+
+An alias for [*locale*.parse](#locale_parse) on the [default locale](#timeFormatDefaultLocale).
+
+<a name="utcFormat" href="#utcFormat">#</a> d3.<b>utcFormat</b>(<i>specifier</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/defaultLocale.js)
+
+An alias for [*locale*.utcFormat](#locale_utcFormat) on the [default locale](#timeFormatDefaultLocale).
+
+<a name="utcParse" href="#utcParse">#</a> d3.<b>utcParse</b>(<i>specifier</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/defaultLocale.js)
+
+An alias for [*locale*.utcParse](#locale_utcParse) on the [default locale](#timeFormatDefaultLocale).
+
+<a name="isoFormat" href="#isoFormat">#</a> d3.<b>isoFormat</b> · [Source](https://github.com/d3/d3-time-format/blob/main/src/isoFormat.js)
+
+The full [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC time formatter. Where available, this method will use [Date.toISOString](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toISOString) to format.
+
+<a name="isoParse" href="#isoParse">#</a> d3.<b>isoParse</b> · [Source](https://github.com/d3/d3-time-format/blob/main/src/isoParse.js)
+
+The full [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC time parser. Where available, this method will use the [Date constructor](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date) to parse strings. If you depend on strict validation of the input format according to ISO 8601, you should construct a [UTC parser function](#utcParse):
+
+```js
+const strictIsoParse = d3.utcParse("%Y-%m-%dT%H:%M:%S.%LZ");
+```
+
+<a name="locale_format" href="#locale_format">#</a> <i>locale</i>.<b>format</b>(<i>specifier</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/locale.js)
+
+Returns a new formatter for the given string *specifier*. The specifier string may contain the following directives:
+
+* `%a` - abbreviated weekday name.*
+* `%A` - full weekday name.*
+* `%b` - abbreviated month name.*
+* `%B` - full month name.*
+* `%c` - the locale’s date and time, such as `%x, %X`.*
+* `%d` - zero-padded day of the month as a decimal number [01,31].
+* `%e` - space-padded day of the month as a decimal number [ 1,31]; equivalent to `%_d`.
+* `%f` - microseconds as a decimal number [000000, 999999].
+* `%g` - ISO 8601 week-based year without century as a decimal number [00,99].
+* `%G` - ISO 8601 week-based year with century as a decimal number.
+* `%H` - hour (24-hour clock) as a decimal number [00,23].
+* `%I` - hour (12-hour clock) as a decimal number [01,12].
+* `%j` - day of the year as a decimal number [001,366].
+* `%m` - month as a decimal number [01,12].
+* `%M` - minute as a decimal number [00,59].
+* `%L` - milliseconds as a decimal number [000, 999].
+* `%p` - either AM or PM.*
+* `%q` - quarter of the year as a decimal number [1,4].
+* `%Q` - milliseconds since UNIX epoch.
+* `%s` - seconds since UNIX epoch.
+* `%S` - second as a decimal number [00,61].
+* `%u` - Monday-based (ISO 8601) weekday as a decimal number [1,7].
+* `%U` - Sunday-based week of the year as a decimal number [00,53].
+* `%V` - ISO 8601 week of the year as a decimal number [01, 53].
+* `%w` - Sunday-based weekday as a decimal number [0,6].
+* `%W` - Monday-based week of the year as a decimal number [00,53].
+* `%x` - the locale’s date, such as `%-m/%-d/%Y`.*
+* `%X` - the locale’s time, such as `%-I:%M:%S %p`.*
+* `%y` - year without century as a decimal number [00,99].
+* `%Y` - year with century as a decimal number, such as `1999`.
+* `%Z` - time zone offset, such as `-0700`, `-07:00`, `-07`, or `Z`.
+* `%%` - a literal percent sign (`%`).
+
+Directives marked with an asterisk (\*) may be affected by the [locale definition](#locales).
+
+For `%U`, all days in a new year preceding the first Sunday are considered to be in week 0. For `%W`, all days in a new year preceding the first Monday are considered to be in week 0. Week numbers are computed using [*interval*.count](https://github.com/d3/d3-time/blob/main/README.md#interval_count). For example, 2015-52 and 2016-00 represent Monday, December 28, 2015, while 2015-53 and 2016-01 represent Monday, January 4, 2016. This differs from the [ISO week date](https://en.wikipedia.org/wiki/ISO_week_date) specification (`%V`), which uses a more complicated definition!
+
+For `%V`,`%g` and `%G`, per the [strftime man page](http://man7.org/linux/man-pages/man3/strftime.3.html):
+
+> In this system, weeks start on a Monday, and are numbered from 01, for the first week, up to 52 or 53, for the last week.  Week 1 is the first week where four or more days fall within the new year (or, synonymously, week 01 is: the first week of the year that contains a Thursday; or, the week that has 4 January in it). If the ISO week number belongs to the previous or next year, that year is used instead.
+
+The `%` sign indicating a directive may be immediately followed by a padding modifier:
+
+* `0` - zero-padding
+* `_` - space-padding
+* `-` - disable padding
+
+If no padding modifier is specified, the default is `0` for all directives except `%e`, which defaults to `_`. (In some implementations of strftime and strptime, a directive may include an optional field width or precision; this feature is not yet implemented.)
+
+The returned function formats a specified *[date](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)*, returning the corresponding string.
+
+```js
+const formatMonth = d3.timeFormat("%B"),
+    formatDay = d3.timeFormat("%A"),
+    date = new Date(2014, 4, 1); // Thu May 01 2014 00:00:00 GMT-0700 (PDT)
+
+formatMonth(date); // "May"
+formatDay(date); // "Thursday"
+```
+
+<a name="locale_parse" href="#locale_parse">#</a> <i>locale</i>.<b>parse</b>(<i>specifier</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/locale.js)
+
+Returns a new parser for the given string *specifier*. The specifier string may contain the same directives as [*locale*.format](#locale_format). The `%d` and `%e` directives are considered equivalent for parsing.
+
+The returned function parses a specified *string*, returning the corresponding [date](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date) or null if the string could not be parsed according to this format’s specifier. Parsing is strict: if the specified <i>string</i> does not exactly match the associated specifier, this method returns null. For example, if the associated specifier is `%Y-%m-%dT%H:%M:%SZ`, then the string `"2011-07-01T19:15:28Z"` will be parsed as expected, but `"2011-07-01T19:15:28"`, `"2011-07-01 19:15:28"` and `"2011-07-01"` will return null. (Note that the literal `Z` here is different from the time zone offset directive `%Z`.) If a more flexible parser is desired, try multiple formats sequentially until one returns non-null.
+
+<a name="locale_utcFormat" href="#locale_utcFormat">#</a> <i>locale</i>.<b>utcFormat</b>(<i>specifier</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/locale.js)
+
+Equivalent to [*locale*.format](#locale_format), except all directives are interpreted as [Coordinated Universal Time (UTC)](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) rather than local time.
+
+<a name="locale_utcParse" href="#locale_utcParse">#</a> <i>locale</i>.<b>utcParse</b>(<i>specifier</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/locale.js)
+
+Equivalent to [*locale*.parse](#locale_parse), except all directives are interpreted as [Coordinated Universal Time (UTC)](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) rather than local time.
+
+### Locales
+
+<a name="timeFormatLocale" href="#timeFormatLocale">#</a> d3.<b>timeFormatLocale</b>(<i>definition</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/locale.js)
+
+Returns a *locale* object for the specified *definition* with [*locale*.format](#locale_format), [*locale*.parse](#locale_parse), [*locale*.utcFormat](#locale_utcFormat), [*locale*.utcParse](#locale_utcParse) methods. The *definition* must include the following properties:
+
+* `dateTime` - the date and time (`%c`) format specifier (<i>e.g.</i>, `"%a %b %e %X %Y"`).
+* `date` - the date (`%x`) format specifier (<i>e.g.</i>, `"%m/%d/%Y"`).
+* `time` - the time (`%X`) format specifier (<i>e.g.</i>, `"%H:%M:%S"`).
+* `periods` - the A.M. and P.M. equivalents (<i>e.g.</i>, `["AM", "PM"]`).
+* `days` - the full names of the weekdays, starting with Sunday.
+* `shortDays` - the abbreviated names of the weekdays, starting with Sunday.
+* `months` - the full names of the months (starting with January).
+* `shortMonths` - the abbreviated names of the months (starting with January).
+
+For an example, see [Localized Time Axis II](https://bl.ocks.org/mbostock/805115ebaa574e771db1875a6d828949).
+
+<a name="timeFormatDefaultLocale" href="#timeFormatDefaultLocale">#</a> d3.<b>timeFormatDefaultLocale</b>(<i>definition</i>) · [Source](https://github.com/d3/d3-time-format/blob/main/src/defaultLocale.js)
+
+Equivalent to [d3.timeFormatLocale](#timeFormatLocale), except it also redefines [d3.timeFormat](#timeFormat), [d3.timeParse](#timeParse), [d3.utcFormat](#utcFormat) and [d3.utcParse](#utcParse) to the new locale’s [*locale*.format](#locale_format), [*locale*.parse](#locale_parse), [*locale*.utcFormat](#locale_utcFormat) and [*locale*.utcParse](#locale_utcParse). If you do not set a default locale, it defaults to [U.S. English](https://github.com/d3/d3-time-format/blob/main/locale/en-US.json).
+
+For an example, see [Localized Time Axis](https://bl.ocks.org/mbostock/6f1cc065d4d172bcaf322e399aa8d62f).
Index: node_modules/d3-time-format/dist/d3-time-format.js
===================================================================
--- node_modules/d3-time-format/dist/d3-time-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/dist/d3-time-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,745 @@
+// https://d3js.org/d3-time-format/ v4.1.0 Copyright 2010-2021 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-time')) :
+typeof define === 'function' && define.amd ? define(['exports', 'd3-time'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}, global.d3));
+})(this, (function (exports, d3Time) { 'use strict';
+
+function localDate(d) {
+  if (0 <= d.y && d.y < 100) {
+    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
+    date.setFullYear(d.y);
+    return date;
+  }
+  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
+}
+
+function utcDate(d) {
+  if (0 <= d.y && d.y < 100) {
+    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
+    date.setUTCFullYear(d.y);
+    return date;
+  }
+  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
+}
+
+function newDate(y, m, d) {
+  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};
+}
+
+function formatLocale(locale) {
+  var locale_dateTime = locale.dateTime,
+      locale_date = locale.date,
+      locale_time = locale.time,
+      locale_periods = locale.periods,
+      locale_weekdays = locale.days,
+      locale_shortWeekdays = locale.shortDays,
+      locale_months = locale.months,
+      locale_shortMonths = locale.shortMonths;
+
+  var periodRe = formatRe(locale_periods),
+      periodLookup = formatLookup(locale_periods),
+      weekdayRe = formatRe(locale_weekdays),
+      weekdayLookup = formatLookup(locale_weekdays),
+      shortWeekdayRe = formatRe(locale_shortWeekdays),
+      shortWeekdayLookup = formatLookup(locale_shortWeekdays),
+      monthRe = formatRe(locale_months),
+      monthLookup = formatLookup(locale_months),
+      shortMonthRe = formatRe(locale_shortMonths),
+      shortMonthLookup = formatLookup(locale_shortMonths);
+
+  var formats = {
+    "a": formatShortWeekday,
+    "A": formatWeekday,
+    "b": formatShortMonth,
+    "B": formatMonth,
+    "c": null,
+    "d": formatDayOfMonth,
+    "e": formatDayOfMonth,
+    "f": formatMicroseconds,
+    "g": formatYearISO,
+    "G": formatFullYearISO,
+    "H": formatHour24,
+    "I": formatHour12,
+    "j": formatDayOfYear,
+    "L": formatMilliseconds,
+    "m": formatMonthNumber,
+    "M": formatMinutes,
+    "p": formatPeriod,
+    "q": formatQuarter,
+    "Q": formatUnixTimestamp,
+    "s": formatUnixTimestampSeconds,
+    "S": formatSeconds,
+    "u": formatWeekdayNumberMonday,
+    "U": formatWeekNumberSunday,
+    "V": formatWeekNumberISO,
+    "w": formatWeekdayNumberSunday,
+    "W": formatWeekNumberMonday,
+    "x": null,
+    "X": null,
+    "y": formatYear,
+    "Y": formatFullYear,
+    "Z": formatZone,
+    "%": formatLiteralPercent
+  };
+
+  var utcFormats = {
+    "a": formatUTCShortWeekday,
+    "A": formatUTCWeekday,
+    "b": formatUTCShortMonth,
+    "B": formatUTCMonth,
+    "c": null,
+    "d": formatUTCDayOfMonth,
+    "e": formatUTCDayOfMonth,
+    "f": formatUTCMicroseconds,
+    "g": formatUTCYearISO,
+    "G": formatUTCFullYearISO,
+    "H": formatUTCHour24,
+    "I": formatUTCHour12,
+    "j": formatUTCDayOfYear,
+    "L": formatUTCMilliseconds,
+    "m": formatUTCMonthNumber,
+    "M": formatUTCMinutes,
+    "p": formatUTCPeriod,
+    "q": formatUTCQuarter,
+    "Q": formatUnixTimestamp,
+    "s": formatUnixTimestampSeconds,
+    "S": formatUTCSeconds,
+    "u": formatUTCWeekdayNumberMonday,
+    "U": formatUTCWeekNumberSunday,
+    "V": formatUTCWeekNumberISO,
+    "w": formatUTCWeekdayNumberSunday,
+    "W": formatUTCWeekNumberMonday,
+    "x": null,
+    "X": null,
+    "y": formatUTCYear,
+    "Y": formatUTCFullYear,
+    "Z": formatUTCZone,
+    "%": formatLiteralPercent
+  };
+
+  var parses = {
+    "a": parseShortWeekday,
+    "A": parseWeekday,
+    "b": parseShortMonth,
+    "B": parseMonth,
+    "c": parseLocaleDateTime,
+    "d": parseDayOfMonth,
+    "e": parseDayOfMonth,
+    "f": parseMicroseconds,
+    "g": parseYear,
+    "G": parseFullYear,
+    "H": parseHour24,
+    "I": parseHour24,
+    "j": parseDayOfYear,
+    "L": parseMilliseconds,
+    "m": parseMonthNumber,
+    "M": parseMinutes,
+    "p": parsePeriod,
+    "q": parseQuarter,
+    "Q": parseUnixTimestamp,
+    "s": parseUnixTimestampSeconds,
+    "S": parseSeconds,
+    "u": parseWeekdayNumberMonday,
+    "U": parseWeekNumberSunday,
+    "V": parseWeekNumberISO,
+    "w": parseWeekdayNumberSunday,
+    "W": parseWeekNumberMonday,
+    "x": parseLocaleDate,
+    "X": parseLocaleTime,
+    "y": parseYear,
+    "Y": parseFullYear,
+    "Z": parseZone,
+    "%": parseLiteralPercent
+  };
+
+  // These recursive directive definitions must be deferred.
+  formats.x = newFormat(locale_date, formats);
+  formats.X = newFormat(locale_time, formats);
+  formats.c = newFormat(locale_dateTime, formats);
+  utcFormats.x = newFormat(locale_date, utcFormats);
+  utcFormats.X = newFormat(locale_time, utcFormats);
+  utcFormats.c = newFormat(locale_dateTime, utcFormats);
+
+  function newFormat(specifier, formats) {
+    return function(date) {
+      var string = [],
+          i = -1,
+          j = 0,
+          n = specifier.length,
+          c,
+          pad,
+          format;
+
+      if (!(date instanceof Date)) date = new Date(+date);
+
+      while (++i < n) {
+        if (specifier.charCodeAt(i) === 37) {
+          string.push(specifier.slice(j, i));
+          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
+          else pad = c === "e" ? " " : "0";
+          if (format = formats[c]) c = format(date, pad);
+          string.push(c);
+          j = i + 1;
+        }
+      }
+
+      string.push(specifier.slice(j, i));
+      return string.join("");
+    };
+  }
+
+  function newParse(specifier, Z) {
+    return function(string) {
+      var d = newDate(1900, undefined, 1),
+          i = parseSpecifier(d, specifier, string += "", 0),
+          week, day;
+      if (i != string.length) return null;
+
+      // If a UNIX timestamp is specified, return it.
+      if ("Q" in d) return new Date(d.Q);
+      if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0));
+
+      // If this is utcParse, never use the local timezone.
+      if (Z && !("Z" in d)) d.Z = 0;
+
+      // The am-pm flag is 0 for AM, and 1 for PM.
+      if ("p" in d) d.H = d.H % 12 + d.p * 12;
+
+      // If the month was not specified, inherit from the quarter.
+      if (d.m === undefined) d.m = "q" in d ? d.q : 0;
+
+      // Convert day-of-week and week-of-year to day-of-year.
+      if ("V" in d) {
+        if (d.V < 1 || d.V > 53) return null;
+        if (!("w" in d)) d.w = 1;
+        if ("Z" in d) {
+          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();
+          week = day > 4 || day === 0 ? d3Time.utcMonday.ceil(week) : d3Time.utcMonday(week);
+          week = d3Time.utcDay.offset(week, (d.V - 1) * 7);
+          d.y = week.getUTCFullYear();
+          d.m = week.getUTCMonth();
+          d.d = week.getUTCDate() + (d.w + 6) % 7;
+        } else {
+          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();
+          week = day > 4 || day === 0 ? d3Time.timeMonday.ceil(week) : d3Time.timeMonday(week);
+          week = d3Time.timeDay.offset(week, (d.V - 1) * 7);
+          d.y = week.getFullYear();
+          d.m = week.getMonth();
+          d.d = week.getDate() + (d.w + 6) % 7;
+        }
+      } else if ("W" in d || "U" in d) {
+        if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
+        day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
+        d.m = 0;
+        d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;
+      }
+
+      // If a time zone is specified, all fields are interpreted as UTC and then
+      // offset according to the specified time zone.
+      if ("Z" in d) {
+        d.H += d.Z / 100 | 0;
+        d.M += d.Z % 100;
+        return utcDate(d);
+      }
+
+      // Otherwise, all fields are in local time.
+      return localDate(d);
+    };
+  }
+
+  function parseSpecifier(d, specifier, string, j) {
+    var i = 0,
+        n = specifier.length,
+        m = string.length,
+        c,
+        parse;
+
+    while (i < n) {
+      if (j >= m) return -1;
+      c = specifier.charCodeAt(i++);
+      if (c === 37) {
+        c = specifier.charAt(i++);
+        parse = parses[c in pads ? specifier.charAt(i++) : c];
+        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
+      } else if (c != string.charCodeAt(j++)) {
+        return -1;
+      }
+    }
+
+    return j;
+  }
+
+  function parsePeriod(d, string, i) {
+    var n = periodRe.exec(string.slice(i));
+    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseShortWeekday(d, string, i) {
+    var n = shortWeekdayRe.exec(string.slice(i));
+    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseWeekday(d, string, i) {
+    var n = weekdayRe.exec(string.slice(i));
+    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseShortMonth(d, string, i) {
+    var n = shortMonthRe.exec(string.slice(i));
+    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseMonth(d, string, i) {
+    var n = monthRe.exec(string.slice(i));
+    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseLocaleDateTime(d, string, i) {
+    return parseSpecifier(d, locale_dateTime, string, i);
+  }
+
+  function parseLocaleDate(d, string, i) {
+    return parseSpecifier(d, locale_date, string, i);
+  }
+
+  function parseLocaleTime(d, string, i) {
+    return parseSpecifier(d, locale_time, string, i);
+  }
+
+  function formatShortWeekday(d) {
+    return locale_shortWeekdays[d.getDay()];
+  }
+
+  function formatWeekday(d) {
+    return locale_weekdays[d.getDay()];
+  }
+
+  function formatShortMonth(d) {
+    return locale_shortMonths[d.getMonth()];
+  }
+
+  function formatMonth(d) {
+    return locale_months[d.getMonth()];
+  }
+
+  function formatPeriod(d) {
+    return locale_periods[+(d.getHours() >= 12)];
+  }
+
+  function formatQuarter(d) {
+    return 1 + ~~(d.getMonth() / 3);
+  }
+
+  function formatUTCShortWeekday(d) {
+    return locale_shortWeekdays[d.getUTCDay()];
+  }
+
+  function formatUTCWeekday(d) {
+    return locale_weekdays[d.getUTCDay()];
+  }
+
+  function formatUTCShortMonth(d) {
+    return locale_shortMonths[d.getUTCMonth()];
+  }
+
+  function formatUTCMonth(d) {
+    return locale_months[d.getUTCMonth()];
+  }
+
+  function formatUTCPeriod(d) {
+    return locale_periods[+(d.getUTCHours() >= 12)];
+  }
+
+  function formatUTCQuarter(d) {
+    return 1 + ~~(d.getUTCMonth() / 3);
+  }
+
+  return {
+    format: function(specifier) {
+      var f = newFormat(specifier += "", formats);
+      f.toString = function() { return specifier; };
+      return f;
+    },
+    parse: function(specifier) {
+      var p = newParse(specifier += "", false);
+      p.toString = function() { return specifier; };
+      return p;
+    },
+    utcFormat: function(specifier) {
+      var f = newFormat(specifier += "", utcFormats);
+      f.toString = function() { return specifier; };
+      return f;
+    },
+    utcParse: function(specifier) {
+      var p = newParse(specifier += "", true);
+      p.toString = function() { return specifier; };
+      return p;
+    }
+  };
+}
+
+var pads = {"-": "", "_": " ", "0": "0"},
+    numberRe = /^\s*\d+/, // note: ignores next directive
+    percentRe = /^%/,
+    requoteRe = /[\\^$*+?|[\]().{}]/g;
+
+function pad(value, fill, width) {
+  var sign = value < 0 ? "-" : "",
+      string = (sign ? -value : value) + "",
+      length = string.length;
+  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
+}
+
+function requote(s) {
+  return s.replace(requoteRe, "\\$&");
+}
+
+function formatRe(names) {
+  return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
+}
+
+function formatLookup(names) {
+  return new Map(names.map((name, i) => [name.toLowerCase(), i]));
+}
+
+function parseWeekdayNumberSunday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.w = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekdayNumberMonday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.u = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekNumberSunday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.U = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekNumberISO(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.V = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekNumberMonday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.W = +n[0], i + n[0].length) : -1;
+}
+
+function parseFullYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 4));
+  return n ? (d.y = +n[0], i + n[0].length) : -1;
+}
+
+function parseYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
+}
+
+function parseZone(d, string, i) {
+  var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
+  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
+}
+
+function parseQuarter(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;
+}
+
+function parseMonthNumber(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
+}
+
+function parseDayOfMonth(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.d = +n[0], i + n[0].length) : -1;
+}
+
+function parseDayOfYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 3));
+  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
+}
+
+function parseHour24(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.H = +n[0], i + n[0].length) : -1;
+}
+
+function parseMinutes(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.M = +n[0], i + n[0].length) : -1;
+}
+
+function parseSeconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.S = +n[0], i + n[0].length) : -1;
+}
+
+function parseMilliseconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 3));
+  return n ? (d.L = +n[0], i + n[0].length) : -1;
+}
+
+function parseMicroseconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 6));
+  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
+}
+
+function parseLiteralPercent(d, string, i) {
+  var n = percentRe.exec(string.slice(i, i + 1));
+  return n ? i + n[0].length : -1;
+}
+
+function parseUnixTimestamp(d, string, i) {
+  var n = numberRe.exec(string.slice(i));
+  return n ? (d.Q = +n[0], i + n[0].length) : -1;
+}
+
+function parseUnixTimestampSeconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i));
+  return n ? (d.s = +n[0], i + n[0].length) : -1;
+}
+
+function formatDayOfMonth(d, p) {
+  return pad(d.getDate(), p, 2);
+}
+
+function formatHour24(d, p) {
+  return pad(d.getHours(), p, 2);
+}
+
+function formatHour12(d, p) {
+  return pad(d.getHours() % 12 || 12, p, 2);
+}
+
+function formatDayOfYear(d, p) {
+  return pad(1 + d3Time.timeDay.count(d3Time.timeYear(d), d), p, 3);
+}
+
+function formatMilliseconds(d, p) {
+  return pad(d.getMilliseconds(), p, 3);
+}
+
+function formatMicroseconds(d, p) {
+  return formatMilliseconds(d, p) + "000";
+}
+
+function formatMonthNumber(d, p) {
+  return pad(d.getMonth() + 1, p, 2);
+}
+
+function formatMinutes(d, p) {
+  return pad(d.getMinutes(), p, 2);
+}
+
+function formatSeconds(d, p) {
+  return pad(d.getSeconds(), p, 2);
+}
+
+function formatWeekdayNumberMonday(d) {
+  var day = d.getDay();
+  return day === 0 ? 7 : day;
+}
+
+function formatWeekNumberSunday(d, p) {
+  return pad(d3Time.timeSunday.count(d3Time.timeYear(d) - 1, d), p, 2);
+}
+
+function dISO(d) {
+  var day = d.getDay();
+  return (day >= 4 || day === 0) ? d3Time.timeThursday(d) : d3Time.timeThursday.ceil(d);
+}
+
+function formatWeekNumberISO(d, p) {
+  d = dISO(d);
+  return pad(d3Time.timeThursday.count(d3Time.timeYear(d), d) + (d3Time.timeYear(d).getDay() === 4), p, 2);
+}
+
+function formatWeekdayNumberSunday(d) {
+  return d.getDay();
+}
+
+function formatWeekNumberMonday(d, p) {
+  return pad(d3Time.timeMonday.count(d3Time.timeYear(d) - 1, d), p, 2);
+}
+
+function formatYear(d, p) {
+  return pad(d.getFullYear() % 100, p, 2);
+}
+
+function formatYearISO(d, p) {
+  d = dISO(d);
+  return pad(d.getFullYear() % 100, p, 2);
+}
+
+function formatFullYear(d, p) {
+  return pad(d.getFullYear() % 10000, p, 4);
+}
+
+function formatFullYearISO(d, p) {
+  var day = d.getDay();
+  d = (day >= 4 || day === 0) ? d3Time.timeThursday(d) : d3Time.timeThursday.ceil(d);
+  return pad(d.getFullYear() % 10000, p, 4);
+}
+
+function formatZone(d) {
+  var z = d.getTimezoneOffset();
+  return (z > 0 ? "-" : (z *= -1, "+"))
+      + pad(z / 60 | 0, "0", 2)
+      + pad(z % 60, "0", 2);
+}
+
+function formatUTCDayOfMonth(d, p) {
+  return pad(d.getUTCDate(), p, 2);
+}
+
+function formatUTCHour24(d, p) {
+  return pad(d.getUTCHours(), p, 2);
+}
+
+function formatUTCHour12(d, p) {
+  return pad(d.getUTCHours() % 12 || 12, p, 2);
+}
+
+function formatUTCDayOfYear(d, p) {
+  return pad(1 + d3Time.utcDay.count(d3Time.utcYear(d), d), p, 3);
+}
+
+function formatUTCMilliseconds(d, p) {
+  return pad(d.getUTCMilliseconds(), p, 3);
+}
+
+function formatUTCMicroseconds(d, p) {
+  return formatUTCMilliseconds(d, p) + "000";
+}
+
+function formatUTCMonthNumber(d, p) {
+  return pad(d.getUTCMonth() + 1, p, 2);
+}
+
+function formatUTCMinutes(d, p) {
+  return pad(d.getUTCMinutes(), p, 2);
+}
+
+function formatUTCSeconds(d, p) {
+  return pad(d.getUTCSeconds(), p, 2);
+}
+
+function formatUTCWeekdayNumberMonday(d) {
+  var dow = d.getUTCDay();
+  return dow === 0 ? 7 : dow;
+}
+
+function formatUTCWeekNumberSunday(d, p) {
+  return pad(d3Time.utcSunday.count(d3Time.utcYear(d) - 1, d), p, 2);
+}
+
+function UTCdISO(d) {
+  var day = d.getUTCDay();
+  return (day >= 4 || day === 0) ? d3Time.utcThursday(d) : d3Time.utcThursday.ceil(d);
+}
+
+function formatUTCWeekNumberISO(d, p) {
+  d = UTCdISO(d);
+  return pad(d3Time.utcThursday.count(d3Time.utcYear(d), d) + (d3Time.utcYear(d).getUTCDay() === 4), p, 2);
+}
+
+function formatUTCWeekdayNumberSunday(d) {
+  return d.getUTCDay();
+}
+
+function formatUTCWeekNumberMonday(d, p) {
+  return pad(d3Time.utcMonday.count(d3Time.utcYear(d) - 1, d), p, 2);
+}
+
+function formatUTCYear(d, p) {
+  return pad(d.getUTCFullYear() % 100, p, 2);
+}
+
+function formatUTCYearISO(d, p) {
+  d = UTCdISO(d);
+  return pad(d.getUTCFullYear() % 100, p, 2);
+}
+
+function formatUTCFullYear(d, p) {
+  return pad(d.getUTCFullYear() % 10000, p, 4);
+}
+
+function formatUTCFullYearISO(d, p) {
+  var day = d.getUTCDay();
+  d = (day >= 4 || day === 0) ? d3Time.utcThursday(d) : d3Time.utcThursday.ceil(d);
+  return pad(d.getUTCFullYear() % 10000, p, 4);
+}
+
+function formatUTCZone() {
+  return "+0000";
+}
+
+function formatLiteralPercent() {
+  return "%";
+}
+
+function formatUnixTimestamp(d) {
+  return +d;
+}
+
+function formatUnixTimestampSeconds(d) {
+  return Math.floor(+d / 1000);
+}
+
+var locale;
+exports.timeFormat = void 0;
+exports.timeParse = void 0;
+exports.utcFormat = void 0;
+exports.utcParse = void 0;
+
+defaultLocale({
+  dateTime: "%x, %X",
+  date: "%-m/%-d/%Y",
+  time: "%-I:%M:%S %p",
+  periods: ["AM", "PM"],
+  days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+  shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+  months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+  shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+});
+
+function defaultLocale(definition) {
+  locale = formatLocale(definition);
+  exports.timeFormat = locale.format;
+  exports.timeParse = locale.parse;
+  exports.utcFormat = locale.utcFormat;
+  exports.utcParse = locale.utcParse;
+  return locale;
+}
+
+var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
+
+function formatIsoNative(date) {
+  return date.toISOString();
+}
+
+var formatIso = Date.prototype.toISOString
+    ? formatIsoNative
+    : exports.utcFormat(isoSpecifier);
+
+function parseIsoNative(string) {
+  var date = new Date(string);
+  return isNaN(date) ? null : date;
+}
+
+var parseIso = +new Date("2000-01-01T00:00:00.000Z")
+    ? parseIsoNative
+    : exports.utcParse(isoSpecifier);
+
+exports.isoFormat = formatIso;
+exports.isoParse = parseIso;
+exports.timeFormatDefaultLocale = defaultLocale;
+exports.timeFormatLocale = formatLocale;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
Index: node_modules/d3-time-format/dist/d3-time-format.min.js
===================================================================
--- node_modules/d3-time-format/dist/d3-time-format.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/dist/d3-time-format.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-time-format/ v4.1.0 Copyright 2010-2021 Mike Bostock
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3-time")):"function"==typeof define&&define.amd?define(["exports","d3-time"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).d3=e.d3||{},e.d3)}(this,(function(e,t){"use strict";function n(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function r(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function u(e,t,n){return{y:e,m:t,d:n,H:0,M:0,S:0,L:0}}function i(e){var i=e.dateTime,c=e.date,a=e.time,f=e.periods,l=e.days,s=e.shortDays,g=e.months,G=e.shortMonths,ge=d(f),pe=y(f),we=d(l),Se=y(l),Ye=d(s),Fe=y(s),Le=d(g),He=y(g),Ae=d(G),Ze=y(G),be={a:function(e){return s[e.getDay()]},A:function(e){return l[e.getDay()]},b:function(e){return G[e.getMonth()]},B:function(e){return g[e.getMonth()]},c:null,d:W,e:W,f:J,g:R,G:K,H:V,I:j,j:q,L:I,m:O,M:Q,p:function(e){return f[+(e.getHours()>=12)]},q:function(e){return 1+~~(e.getMonth()/3)},Q:Ue,s:xe,S:X,u:N,U:B,V:_,w:$,W:z,x:null,X:null,y:E,Y:k,Z:ee,"%":Ce},Pe={a:function(e){return s[e.getUTCDay()]},A:function(e){return l[e.getUTCDay()]},b:function(e){return G[e.getUTCMonth()]},B:function(e){return g[e.getUTCMonth()]},c:null,d:te,e:te,f:ce,g:ve,G:Me,H:ne,I:re,j:ue,L:ie,m:oe,M:ae,p:function(e){return f[+(e.getUTCHours()>=12)]},q:function(e){return 1+~~(e.getUTCMonth()/3)},Q:Ue,s:xe,S:fe,u:le,U:se,V:de,w:ye,W:he,x:null,X:null,y:me,Y:Te,Z:De,"%":Ce},We={a:function(e,t,n){var r=Ye.exec(t.slice(n));return r?(e.w=Fe.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(e,t,n){var r=we.exec(t.slice(n));return r?(e.w=Se.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(e,t,n){var r=Ae.exec(t.slice(n));return r?(e.m=Ze.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(e,t,n){var r=Le.exec(t.slice(n));return r?(e.m=He.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(e,t,n){return qe(e,i,t,n)},d:w,e:w,f:A,g:C,G:D,H:Y,I:Y,j:S,L:H,m:p,M:F,p:function(e,t,n){var r=ge.exec(t.slice(n));return r?(e.p=pe.get(r[0].toLowerCase()),n+r[0].length):-1},q:x,Q:b,s:P,S:L,u:m,U:v,V:T,w:h,W:M,x:function(e,t,n){return qe(e,c,t,n)},X:function(e,t,n){return qe(e,a,t,n)},y:C,Y:D,Z:U,"%":Z};function Ve(e,t){return function(n){var r,u,i,c=[],a=-1,f=0,l=e.length;for(n instanceof Date||(n=new Date(+n));++a<l;)37===e.charCodeAt(a)&&(c.push(e.slice(f,a)),null!=(u=o[r=e.charAt(++a)])?r=e.charAt(++a):u="e"===r?" ":"0",(i=t[r])&&(r=i(n,u)),c.push(r),f=a+1);return c.push(e.slice(f,a)),c.join("")}}function je(e,i){return function(c){var o,a,f=u(1900,void 0,1);if(qe(f,e,c+="",0)!=c.length)return null;if("Q"in f)return new Date(f.Q);if("s"in f)return new Date(1e3*f.s+("L"in f?f.L:0));if(i&&!("Z"in f)&&(f.Z=0),"p"in f&&(f.H=f.H%12+12*f.p),void 0===f.m&&(f.m="q"in f?f.q:0),"V"in f){if(f.V<1||f.V>53)return null;"w"in f||(f.w=1),"Z"in f?(a=(o=r(u(f.y,0,1))).getUTCDay(),o=a>4||0===a?t.utcMonday.ceil(o):t.utcMonday(o),o=t.utcDay.offset(o,7*(f.V-1)),f.y=o.getUTCFullYear(),f.m=o.getUTCMonth(),f.d=o.getUTCDate()+(f.w+6)%7):(a=(o=n(u(f.y,0,1))).getDay(),o=a>4||0===a?t.timeMonday.ceil(o):t.timeMonday(o),o=t.timeDay.offset(o,7*(f.V-1)),f.y=o.getFullYear(),f.m=o.getMonth(),f.d=o.getDate()+(f.w+6)%7)}else("W"in f||"U"in f)&&("w"in f||(f.w="u"in f?f.u%7:"W"in f?1:0),a="Z"in f?r(u(f.y,0,1)).getUTCDay():n(u(f.y,0,1)).getDay(),f.m=0,f.d="W"in f?(f.w+6)%7+7*f.W-(a+5)%7:f.w+7*f.U-(a+6)%7);return"Z"in f?(f.H+=f.Z/100|0,f.M+=f.Z%100,r(f)):n(f)}}function qe(e,t,n,r){for(var u,i,c=0,a=t.length,f=n.length;c<a;){if(r>=f)return-1;if(37===(u=t.charCodeAt(c++))){if(u=t.charAt(c++),!(i=We[u in o?t.charAt(c++):u])||(r=i(e,n,r))<0)return-1}else if(u!=n.charCodeAt(r++))return-1}return r}return be.x=Ve(c,be),be.X=Ve(a,be),be.c=Ve(i,be),Pe.x=Ve(c,Pe),Pe.X=Ve(a,Pe),Pe.c=Ve(i,Pe),{format:function(e){var t=Ve(e+="",be);return t.toString=function(){return e},t},parse:function(e){var t=je(e+="",!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=Ve(e+="",Pe);return t.toString=function(){return e},t},utcParse:function(e){var t=je(e+="",!0);return t.toString=function(){return e},t}}}var c,o={"-":"",_:" ",0:"0"},a=/^\s*\d+/,f=/^%/,l=/[\\^$*+?|[\]().{}]/g;function s(e,t,n){var r=e<0?"-":"",u=(r?-e:e)+"",i=u.length;return r+(i<n?new Array(n-i+1).join(t)+u:u)}function g(e){return e.replace(l,"\\$&")}function d(e){return new RegExp("^(?:"+e.map(g).join("|")+")","i")}function y(e){return new Map(e.map(((e,t)=>[e.toLowerCase(),t])))}function h(e,t,n){var r=a.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function m(e,t,n){var r=a.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function v(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function T(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function M(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function D(e,t,n){var r=a.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function C(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function U(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function x(e,t,n){var r=a.exec(t.slice(n,n+1));return r?(e.q=3*r[0]-3,n+r[0].length):-1}function p(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function w(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function S(e,t,n){var r=a.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function Y(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function F(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function L(e,t,n){var r=a.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function H(e,t,n){var r=a.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function A(e,t,n){var r=a.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Z(e,t,n){var r=f.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function b(e,t,n){var r=a.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function P(e,t,n){var r=a.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function W(e,t){return s(e.getDate(),t,2)}function V(e,t){return s(e.getHours(),t,2)}function j(e,t){return s(e.getHours()%12||12,t,2)}function q(e,n){return s(1+t.timeDay.count(t.timeYear(e),e),n,3)}function I(e,t){return s(e.getMilliseconds(),t,3)}function J(e,t){return I(e,t)+"000"}function O(e,t){return s(e.getMonth()+1,t,2)}function Q(e,t){return s(e.getMinutes(),t,2)}function X(e,t){return s(e.getSeconds(),t,2)}function N(e){var t=e.getDay();return 0===t?7:t}function B(e,n){return s(t.timeSunday.count(t.timeYear(e)-1,e),n,2)}function G(e){var n=e.getDay();return n>=4||0===n?t.timeThursday(e):t.timeThursday.ceil(e)}function _(e,n){return e=G(e),s(t.timeThursday.count(t.timeYear(e),e)+(4===t.timeYear(e).getDay()),n,2)}function $(e){return e.getDay()}function z(e,n){return s(t.timeMonday.count(t.timeYear(e)-1,e),n,2)}function E(e,t){return s(e.getFullYear()%100,t,2)}function R(e,t){return s((e=G(e)).getFullYear()%100,t,2)}function k(e,t){return s(e.getFullYear()%1e4,t,4)}function K(e,n){var r=e.getDay();return s((e=r>=4||0===r?t.timeThursday(e):t.timeThursday.ceil(e)).getFullYear()%1e4,n,4)}function ee(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+s(t/60|0,"0",2)+s(t%60,"0",2)}function te(e,t){return s(e.getUTCDate(),t,2)}function ne(e,t){return s(e.getUTCHours(),t,2)}function re(e,t){return s(e.getUTCHours()%12||12,t,2)}function ue(e,n){return s(1+t.utcDay.count(t.utcYear(e),e),n,3)}function ie(e,t){return s(e.getUTCMilliseconds(),t,3)}function ce(e,t){return ie(e,t)+"000"}function oe(e,t){return s(e.getUTCMonth()+1,t,2)}function ae(e,t){return s(e.getUTCMinutes(),t,2)}function fe(e,t){return s(e.getUTCSeconds(),t,2)}function le(e){var t=e.getUTCDay();return 0===t?7:t}function se(e,n){return s(t.utcSunday.count(t.utcYear(e)-1,e),n,2)}function ge(e){var n=e.getUTCDay();return n>=4||0===n?t.utcThursday(e):t.utcThursday.ceil(e)}function de(e,n){return e=ge(e),s(t.utcThursday.count(t.utcYear(e),e)+(4===t.utcYear(e).getUTCDay()),n,2)}function ye(e){return e.getUTCDay()}function he(e,n){return s(t.utcMonday.count(t.utcYear(e)-1,e),n,2)}function me(e,t){return s(e.getUTCFullYear()%100,t,2)}function ve(e,t){return s((e=ge(e)).getUTCFullYear()%100,t,2)}function Te(e,t){return s(e.getUTCFullYear()%1e4,t,4)}function Me(e,n){var r=e.getUTCDay();return s((e=r>=4||0===r?t.utcThursday(e):t.utcThursday.ceil(e)).getUTCFullYear()%1e4,n,4)}function De(){return"+0000"}function Ce(){return"%"}function Ue(e){return+e}function xe(e){return Math.floor(+e/1e3)}function pe(t){return c=i(t),e.timeFormat=c.format,e.timeParse=c.parse,e.utcFormat=c.utcFormat,e.utcParse=c.utcParse,c}e.timeFormat=void 0,e.timeParse=void 0,e.utcFormat=void 0,e.utcParse=void 0,pe({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var we="%Y-%m-%dT%H:%M:%S.%LZ";var Se=Date.prototype.toISOString?function(e){return e.toISOString()}:e.utcFormat(we);var Ye=+new Date("2000-01-01T00:00:00.000Z")?function(e){var t=new Date(e);return isNaN(t)?null:t}:e.utcParse(we);e.isoFormat=Se,e.isoParse=Ye,e.timeFormatDefaultLocale=pe,e.timeFormatLocale=i,Object.defineProperty(e,"__esModule",{value:!0})}));
Index: node_modules/d3-time-format/locale/ar-EG.json
===================================================================
--- node_modules/d3-time-format/locale/ar-EG.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/ar-EG.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%x, %X",
+  "date": "%-d/%-m/%Y",
+  "time": "%-I:%M:%S %p",
+  "periods": ["ص", "م"],
+  "days": ["الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"],
+  "shortDays": ["أحد", "إثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت"],
+  "months": ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"],
+  "shortMonths": ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"]
+}
Index: node_modules/d3-time-format/locale/ar-SY.json
===================================================================
--- node_modules/d3-time-format/locale/ar-SY.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/ar-SY.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%x, %X",
+  "date": "%-d/%-m/%Y",
+  "time": "%-I:%M:%S %p",
+  "periods": ["ص", "م"],
+  "days": ["الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"],
+  "shortDays": ["أحد", "إثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت"],
+  "months": ["كانون الثاني", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"],
+  "shortMonths": ["ك٢", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "ت١", "ت٢", "ك١"]
+}
Index: node_modules/d3-time-format/locale/ca-ES.json
===================================================================
--- node_modules/d3-time-format/locale/ca-ES.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/ca-ES.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %e de %B de %Y, %X",
+  "date": "%d/%m/%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["diumenge", "dilluns", "dimarts", "dimecres", "dijous", "divendres", "dissabte"],
+  "shortDays": ["dg.", "dl.", "dt.", "dc.", "dj.", "dv.", "ds."],
+  "months": ["gener", "febrer", "març", "abril", "maig", "juny", "juliol", "agost", "setembre", "octubre", "novembre", "desembre"],
+  "shortMonths": ["gen.", "febr.", "març", "abr.", "maig", "juny", "jul.", "ag.", "set.", "oct.", "nov.", "des."]
+}
Index: node_modules/d3-time-format/locale/cs-CZ.json
===================================================================
--- node_modules/d3-time-format/locale/cs-CZ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/cs-CZ.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A,%e.%B %Y, %X",
+  "date": "%-d.%-m.%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["neděle", "pondělí", "úterý", "středa", "čvrtek", "pátek", "sobota"],
+  "shortDays": ["ne.", "po.", "út.", "st.", "čt.", "pá.", "so."],
+  "months": ["leden", "únor", "březen", "duben", "květen", "červen", "červenec", "srpen", "září", "říjen", "listopad", "prosinec"],
+  "shortMonths": ["led", "úno", "břez", "dub", "kvě", "čer", "červ", "srp", "zář", "říj", "list", "pros"]
+}
Index: node_modules/d3-time-format/locale/da-DK.json
===================================================================
--- node_modules/d3-time-format/locale/da-DK.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/da-DK.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A den %d %B %Y %X",
+  "date": "%d-%m-%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"],
+  "shortDays": ["søn", "man", "tir", "ons", "tor", "fre", "lør"],
+  "months": ["januar", "februar", "marts", "april", "maj", "juni", "juli", "august", "september", "oktober", "november", "december"],
+  "shortMonths": ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"]
+}
Index: node_modules/d3-time-format/locale/de-CH.json
===================================================================
--- node_modules/d3-time-format/locale/de-CH.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/de-CH.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, der %e. %B %Y, %X",
+  "date": "%d.%m.%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
+  "shortDays": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
+  "months": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
+  "shortMonths": ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]
+}
Index: node_modules/d3-time-format/locale/de-DE.json
===================================================================
--- node_modules/d3-time-format/locale/de-DE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/de-DE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, der %e. %B %Y, %X",
+  "date": "%d.%m.%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
+  "shortDays": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
+  "months": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
+  "shortMonths": ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]
+}
Index: node_modules/d3-time-format/locale/en-CA.json
===================================================================
--- node_modules/d3-time-format/locale/en-CA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/en-CA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%a %b %e %X %Y",
+  "date": "%Y-%m-%d",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+  "shortDays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+  "months": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+  "shortMonths": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+}
Index: node_modules/d3-time-format/locale/en-GB.json
===================================================================
--- node_modules/d3-time-format/locale/en-GB.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/en-GB.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%a %e %b %X %Y",
+  "date": "%d/%m/%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+  "shortDays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+  "months": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+  "shortMonths": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+}
Index: node_modules/d3-time-format/locale/en-US.json
===================================================================
--- node_modules/d3-time-format/locale/en-US.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/en-US.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%x, %X",
+  "date": "%-m/%-d/%Y",
+  "time": "%-I:%M:%S %p",
+  "periods": ["AM", "PM"],
+  "days": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+  "shortDays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+  "months": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+  "shortMonths": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+}
Index: node_modules/d3-time-format/locale/es-ES.json
===================================================================
--- node_modules/d3-time-format/locale/es-ES.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/es-ES.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %e de %B de %Y, %X",
+  "date": "%d/%m/%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"],
+  "shortDays": ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"],
+  "months": ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"],
+  "shortMonths": ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"]
+}
Index: node_modules/d3-time-format/locale/es-MX.json
===================================================================
--- node_modules/d3-time-format/locale/es-MX.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/es-MX.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%x, %X",
+  "date": "%d/%m/%Y",
+  "time": "%-I:%M:%S %p",
+  "periods": ["AM", "PM"],
+  "days": ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"],
+  "shortDays": ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"],
+  "months": ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"],
+  "shortMonths": ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"]
+}
Index: node_modules/d3-time-format/locale/fa-IR.json
===================================================================
--- node_modules/d3-time-format/locale/fa-IR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/fa-IR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%x, %X",
+  "date": "%-d/%-m/%Y",
+  "time": "%-I:%M:%S %p",
+  "periods": ["صبح", "عصر"],
+  "days": ["یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"],
+  "shortDays": ["یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"],
+  "months": ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"],
+  "shortMonths": ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"]
+}
Index: node_modules/d3-time-format/locale/fi-FI.json
===================================================================
--- node_modules/d3-time-format/locale/fi-FI.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/fi-FI.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %-d. %Bta %Y klo %X",
+  "date": "%-d.%-m.%Y",
+  "time": "%H:%M:%S",
+  "periods": ["a.m.", "p.m."],
+  "days": ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"],
+  "shortDays": ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"],
+  "months": ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"],
+  "shortMonths": ["Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä", "Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu"]
+}
Index: node_modules/d3-time-format/locale/fr-CA.json
===================================================================
--- node_modules/d3-time-format/locale/fr-CA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/fr-CA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%a %e %b %Y %X",
+  "date": "%Y-%m-%d",
+  "time": "%H:%M:%S",
+  "periods": ["", ""],
+  "days": ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"],
+  "shortDays": ["dim", "lun", "mar", "mer", "jeu", "ven", "sam"],
+  "months": ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"],
+  "shortMonths": ["jan", "fév", "mar", "avr", "mai", "jui", "jul", "aoû", "sep", "oct", "nov", "déc"]
+}
Index: node_modules/d3-time-format/locale/fr-FR.json
===================================================================
--- node_modules/d3-time-format/locale/fr-FR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/fr-FR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A %e %B %Y à %X",
+  "date": "%d/%m/%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"],
+  "shortDays": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
+  "months": ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"],
+  "shortMonths": ["janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."]
+}
Index: node_modules/d3-time-format/locale/he-IL.json
===================================================================
--- node_modules/d3-time-format/locale/he-IL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/he-IL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %e ב%B %Y %X",
+  "date": "%d.%m.%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
+  "shortDays": ["א׳", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳"],
+  "months": ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
+  "shortMonths": ["ינו׳", "פבר׳", "מרץ", "אפר׳", "מאי", "יוני", "יולי", "אוג׳", "ספט׳", "אוק׳", "נוב׳", "דצמ׳"]
+}
Index: node_modules/d3-time-format/locale/hr-HR.json
===================================================================
--- node_modules/d3-time-format/locale/hr-HR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/hr-HR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %e. %B %Y., %X",
+  "date": "%d. %m. %Y.",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvtrak", "Petak", "Subota"],
+  "shortDays": ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su"],
+  "months": ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"],
+  "shortMonths": ["Sij", "Velj", "Ožu", "Tra", "Svi", "Lip", "Srp", "Kol", "Ruj", "Lis", "Stu", "Pro"]
+}
Index: node_modules/d3-time-format/locale/hu-HU.json
===================================================================
--- node_modules/d3-time-format/locale/hu-HU.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/hu-HU.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%Y. %B %-e., %A %X",
+  "date": "%Y. %m. %d.",
+  "time": "%H:%M:%S",
+  "periods": ["de.", "du."],
+  "days": ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"],
+  "shortDays": ["V", "H", "K", "Sze", "Cs", "P", "Szo"],
+  "months": ["január", "február", "március", "április", "május", "június", "július", "augusztus", "szeptember", "október", "november", "december"],
+  "shortMonths": ["jan.", "feb.", "már.", "ápr.", "máj.", "jún.", "júl.", "aug.", "szept.", "okt.", "nov.", "dec."]
+}
Index: node_modules/d3-time-format/locale/it-IT.json
===================================================================
--- node_modules/d3-time-format/locale/it-IT.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/it-IT.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A %e %B %Y, %X",
+  "date": "%d/%m/%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"],
+  "shortDays": ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
+  "months": ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
+  "shortMonths": ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"]
+}
Index: node_modules/d3-time-format/locale/ja-JP.json
===================================================================
--- node_modules/d3-time-format/locale/ja-JP.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/ja-JP.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%x %a %X",
+  "date": "%Y/%m/%d",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"],
+  "shortDays": ["日", "月", "火", "水", "木", "金", "土"],
+  "months": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
+  "shortMonths": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
+}
Index: node_modules/d3-time-format/locale/ko-KR.json
===================================================================
--- node_modules/d3-time-format/locale/ko-KR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/ko-KR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%Y/%m/%d %a %X",
+  "date": "%Y/%m/%d",
+  "time": "%H:%M:%S",
+  "periods": ["오전", "오후"],
+  "days": ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
+  "shortDays": ["일", "월", "화", "수", "목", "금", "토"],
+  "months": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
+  "shortMonths": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
+}
Index: node_modules/d3-time-format/locale/mk-MK.json
===================================================================
--- node_modules/d3-time-format/locale/mk-MK.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/mk-MK.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %e %B %Y г. %X",
+  "date": "%d.%m.%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["недела", "понеделник", "вторник", "среда", "четврток", "петок", "сабота"],
+  "shortDays": ["нед", "пон", "вто", "сре", "чет", "пет", "саб"],
+  "months": ["јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември"],
+  "shortMonths": ["јан", "фев", "мар", "апр", "мај", "јун", "јул", "авг", "сеп", "окт", "ное", "дек"]
+}
Index: node_modules/d3-time-format/locale/nb-NO.json
===================================================================
--- node_modules/d3-time-format/locale/nb-NO.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/nb-NO.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A den %d. %B %Y %X",
+  "date": "%d.%m.%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"],
+  "shortDays": ["søn", "man", "tir", "ons", "tor", "fre", "lør"],
+  "months": ["januar", "februar", "mars", "april", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember"],
+  "shortMonths": ["jan", "feb", "mars", "apr", "mai", "juni", "juli", "aug", "sep", "okt", "nov", "des"]
+}
Index: node_modules/d3-time-format/locale/nl-BE.json
===================================================================
--- node_modules/d3-time-format/locale/nl-BE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/nl-BE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%a %e %B %Y %X",
+  "date": "%d/%m/%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
+  "shortDays": ["zo", "ma", "di", "wo", "do", "vr", "za"],
+  "months": ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
+  "shortMonths": ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"]
+}
Index: node_modules/d3-time-format/locale/nl-NL.json
===================================================================
--- node_modules/d3-time-format/locale/nl-NL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/nl-NL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%a %e %B %Y %X",
+  "date": "%d-%m-%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
+  "shortDays": ["zo", "ma", "di", "wo", "do", "vr", "za"],
+  "months": ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
+  "shortMonths": ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"]
+}
Index: node_modules/d3-time-format/locale/pl-PL.json
===================================================================
--- node_modules/d3-time-format/locale/pl-PL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/pl-PL.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %e %B %Y, %X",
+  "date": "%d/%m/%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"],
+  "shortDays": ["Niedz.", "Pon.", "Wt.", "Śr.", "Czw.", "Pt.", "Sob."],
+  "months": ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
+  "shortMonths": ["Stycz.", "Luty", "Marz.", "Kwie.", "Maj", "Czerw.", "Lipc.", "Sierp.", "Wrz.", "Paźdz.", "Listop.", "Grudz."]
+}
Index: node_modules/d3-time-format/locale/pt-BR.json
===================================================================
--- node_modules/d3-time-format/locale/pt-BR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/pt-BR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %e de %B de %Y. %X",
+  "date": "%d/%m/%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
+  "shortDays": ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
+  "months": ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
+  "shortMonths": ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"]
+}
Index: node_modules/d3-time-format/locale/ru-RU.json
===================================================================
--- node_modules/d3-time-format/locale/ru-RU.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/ru-RU.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %e %B %Y г. %X",
+  "date": "%d.%m.%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"],
+  "shortDays": ["вс", "пн", "вт", "ср", "чт", "пт", "сб"],
+  "months": ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"],
+  "shortMonths": ["янв", "фев", "мар", "апр", "май", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"]
+}
Index: node_modules/d3-time-format/locale/sv-SE.json
===================================================================
--- node_modules/d3-time-format/locale/sv-SE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/sv-SE.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A den %d %B %Y %X",
+  "date": "%Y-%m-%d",
+  "time": "%H:%M:%S",
+  "periods": ["fm", "em"],
+  "days": ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"],
+  "shortDays": ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"],
+  "months": ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"],
+  "shortMonths": ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"]
+}
Index: node_modules/d3-time-format/locale/tr-TR.json
===================================================================
--- node_modules/d3-time-format/locale/tr-TR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/tr-TR.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%a %e %b %X %Y",
+  "date": "%d/%m/%Y",
+  "time": "%H:%M:%S",
+  "periods": ["AM", "PM"],
+  "days": ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"],
+  "shortDays": ["Paz", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt"],
+  "months": ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
+  "shortMonths": ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"]
+}
Index: node_modules/d3-time-format/locale/uk-UA.json
===================================================================
--- node_modules/d3-time-format/locale/uk-UA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/uk-UA.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%A, %e %B %Y р. %X",
+  "date": "%d.%m.%Y",
+  "time": "%H:%M:%S",
+  "periods": ["дп", "пп"],
+  "days": ["неділя", "понеділок", "вівторок", "середа", "четвер", "п'ятниця", "субота"],
+  "shortDays": ["нд", "пн", "вт", "ср", "чт", "пт", "сб"],
+  "months": ["січня", "лютого", "березня", "квітня", "травня", "червня", "липня", "серпня", "вересня", "жовтня", "листопада", "грудня"],
+  "shortMonths": ["січ.", "лют.", "бер.", "квіт.", "трав.", "черв.", "лип.", "серп.", "вер.", "жовт.", "лист.", "груд."]
+}
Index: node_modules/d3-time-format/locale/zh-CN.json
===================================================================
--- node_modules/d3-time-format/locale/zh-CN.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/zh-CN.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%x %A %X",
+  "date": "%Y年%-m月%-d日",
+  "time": "%H:%M:%S",
+  "periods": ["上午", "下午"],
+  "days": ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
+  "shortDays": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
+  "months": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+  "shortMonths": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
+}
Index: node_modules/d3-time-format/locale/zh-TW.json
===================================================================
--- node_modules/d3-time-format/locale/zh-TW.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/locale/zh-TW.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+{
+  "dateTime": "%x %A %X",
+  "date": "%Y年%-m月%-d日",
+  "time": "%H:%M:%S",
+  "periods": ["上午", "下午"],
+  "days": ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
+  "shortDays": ["日", "一", "二", "三", "四", "五", "六"],
+  "months": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+  "shortMonths": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
+}
Index: node_modules/d3-time-format/package.json
===================================================================
--- node_modules/d3-time-format/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+{
+  "name": "d3-time-format",
+  "version": "4.1.0",
+  "description": "A JavaScript time formatter and parser inspired by strftime and strptime.",
+  "homepage": "https://d3js.org/d3-time-format/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-time-format.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "time",
+    "format",
+    "strftime",
+    "strptime"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js",
+    "locale/*.json"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-time-format.min.js",
+  "unpkg": "dist/d3-time-format.min.js",
+  "exports": {
+    ".": {
+      "umd": "./dist/d3-time-format.min.js",
+      "default": "./src/index.js"
+    },
+    "./locale/*": "./locale/*.json"
+  },
+  "sideEffects": [
+    "./src/defaultLocale.js"
+  ],
+  "dependencies": {
+    "d3-time": "1 - 3"
+  },
+  "devDependencies": {
+    "eslint": "8",
+    "mocha": "9",
+    "rollup": "2",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "TZ=America/Los_Angeles mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-time-format/src/defaultLocale.js
===================================================================
--- node_modules/d3-time-format/src/defaultLocale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/src/defaultLocale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import formatLocale from "./locale.js";
+
+var locale;
+export var timeFormat;
+export var timeParse;
+export var utcFormat;
+export var utcParse;
+
+defaultLocale({
+  dateTime: "%x, %X",
+  date: "%-m/%-d/%Y",
+  time: "%-I:%M:%S %p",
+  periods: ["AM", "PM"],
+  days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+  shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+  months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+  shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+});
+
+export default function defaultLocale(definition) {
+  locale = formatLocale(definition);
+  timeFormat = locale.format;
+  timeParse = locale.parse;
+  utcFormat = locale.utcFormat;
+  utcParse = locale.utcParse;
+  return locale;
+}
Index: node_modules/d3-time-format/src/index.js
===================================================================
--- node_modules/d3-time-format/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+export {default as timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse} from "./defaultLocale.js";
+export {default as timeFormatLocale} from "./locale.js";
+export {default as isoFormat} from "./isoFormat.js";
+export {default as isoParse} from "./isoParse.js";
Index: node_modules/d3-time-format/src/isoFormat.js
===================================================================
--- node_modules/d3-time-format/src/isoFormat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/src/isoFormat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import {utcFormat} from "./defaultLocale.js";
+
+export var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
+
+function formatIsoNative(date) {
+  return date.toISOString();
+}
+
+var formatIso = Date.prototype.toISOString
+    ? formatIsoNative
+    : utcFormat(isoSpecifier);
+
+export default formatIso;
Index: node_modules/d3-time-format/src/isoParse.js
===================================================================
--- node_modules/d3-time-format/src/isoParse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/src/isoParse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import {isoSpecifier} from "./isoFormat.js";
+import {utcParse} from "./defaultLocale.js";
+
+function parseIsoNative(string) {
+  var date = new Date(string);
+  return isNaN(date) ? null : date;
+}
+
+var parseIso = +new Date("2000-01-01T00:00:00.000Z")
+    ? parseIsoNative
+    : utcParse(isoSpecifier);
+
+export default parseIso;
Index: node_modules/d3-time-format/src/locale.js
===================================================================
--- node_modules/d3-time-format/src/locale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time-format/src/locale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,697 @@
+import {
+  timeDay,
+  timeSunday,
+  timeMonday,
+  timeThursday,
+  timeYear,
+  utcDay,
+  utcSunday,
+  utcMonday,
+  utcThursday,
+  utcYear
+} from "d3-time";
+
+function localDate(d) {
+  if (0 <= d.y && d.y < 100) {
+    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
+    date.setFullYear(d.y);
+    return date;
+  }
+  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
+}
+
+function utcDate(d) {
+  if (0 <= d.y && d.y < 100) {
+    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
+    date.setUTCFullYear(d.y);
+    return date;
+  }
+  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
+}
+
+function newDate(y, m, d) {
+  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};
+}
+
+export default function formatLocale(locale) {
+  var locale_dateTime = locale.dateTime,
+      locale_date = locale.date,
+      locale_time = locale.time,
+      locale_periods = locale.periods,
+      locale_weekdays = locale.days,
+      locale_shortWeekdays = locale.shortDays,
+      locale_months = locale.months,
+      locale_shortMonths = locale.shortMonths;
+
+  var periodRe = formatRe(locale_periods),
+      periodLookup = formatLookup(locale_periods),
+      weekdayRe = formatRe(locale_weekdays),
+      weekdayLookup = formatLookup(locale_weekdays),
+      shortWeekdayRe = formatRe(locale_shortWeekdays),
+      shortWeekdayLookup = formatLookup(locale_shortWeekdays),
+      monthRe = formatRe(locale_months),
+      monthLookup = formatLookup(locale_months),
+      shortMonthRe = formatRe(locale_shortMonths),
+      shortMonthLookup = formatLookup(locale_shortMonths);
+
+  var formats = {
+    "a": formatShortWeekday,
+    "A": formatWeekday,
+    "b": formatShortMonth,
+    "B": formatMonth,
+    "c": null,
+    "d": formatDayOfMonth,
+    "e": formatDayOfMonth,
+    "f": formatMicroseconds,
+    "g": formatYearISO,
+    "G": formatFullYearISO,
+    "H": formatHour24,
+    "I": formatHour12,
+    "j": formatDayOfYear,
+    "L": formatMilliseconds,
+    "m": formatMonthNumber,
+    "M": formatMinutes,
+    "p": formatPeriod,
+    "q": formatQuarter,
+    "Q": formatUnixTimestamp,
+    "s": formatUnixTimestampSeconds,
+    "S": formatSeconds,
+    "u": formatWeekdayNumberMonday,
+    "U": formatWeekNumberSunday,
+    "V": formatWeekNumberISO,
+    "w": formatWeekdayNumberSunday,
+    "W": formatWeekNumberMonday,
+    "x": null,
+    "X": null,
+    "y": formatYear,
+    "Y": formatFullYear,
+    "Z": formatZone,
+    "%": formatLiteralPercent
+  };
+
+  var utcFormats = {
+    "a": formatUTCShortWeekday,
+    "A": formatUTCWeekday,
+    "b": formatUTCShortMonth,
+    "B": formatUTCMonth,
+    "c": null,
+    "d": formatUTCDayOfMonth,
+    "e": formatUTCDayOfMonth,
+    "f": formatUTCMicroseconds,
+    "g": formatUTCYearISO,
+    "G": formatUTCFullYearISO,
+    "H": formatUTCHour24,
+    "I": formatUTCHour12,
+    "j": formatUTCDayOfYear,
+    "L": formatUTCMilliseconds,
+    "m": formatUTCMonthNumber,
+    "M": formatUTCMinutes,
+    "p": formatUTCPeriod,
+    "q": formatUTCQuarter,
+    "Q": formatUnixTimestamp,
+    "s": formatUnixTimestampSeconds,
+    "S": formatUTCSeconds,
+    "u": formatUTCWeekdayNumberMonday,
+    "U": formatUTCWeekNumberSunday,
+    "V": formatUTCWeekNumberISO,
+    "w": formatUTCWeekdayNumberSunday,
+    "W": formatUTCWeekNumberMonday,
+    "x": null,
+    "X": null,
+    "y": formatUTCYear,
+    "Y": formatUTCFullYear,
+    "Z": formatUTCZone,
+    "%": formatLiteralPercent
+  };
+
+  var parses = {
+    "a": parseShortWeekday,
+    "A": parseWeekday,
+    "b": parseShortMonth,
+    "B": parseMonth,
+    "c": parseLocaleDateTime,
+    "d": parseDayOfMonth,
+    "e": parseDayOfMonth,
+    "f": parseMicroseconds,
+    "g": parseYear,
+    "G": parseFullYear,
+    "H": parseHour24,
+    "I": parseHour24,
+    "j": parseDayOfYear,
+    "L": parseMilliseconds,
+    "m": parseMonthNumber,
+    "M": parseMinutes,
+    "p": parsePeriod,
+    "q": parseQuarter,
+    "Q": parseUnixTimestamp,
+    "s": parseUnixTimestampSeconds,
+    "S": parseSeconds,
+    "u": parseWeekdayNumberMonday,
+    "U": parseWeekNumberSunday,
+    "V": parseWeekNumberISO,
+    "w": parseWeekdayNumberSunday,
+    "W": parseWeekNumberMonday,
+    "x": parseLocaleDate,
+    "X": parseLocaleTime,
+    "y": parseYear,
+    "Y": parseFullYear,
+    "Z": parseZone,
+    "%": parseLiteralPercent
+  };
+
+  // These recursive directive definitions must be deferred.
+  formats.x = newFormat(locale_date, formats);
+  formats.X = newFormat(locale_time, formats);
+  formats.c = newFormat(locale_dateTime, formats);
+  utcFormats.x = newFormat(locale_date, utcFormats);
+  utcFormats.X = newFormat(locale_time, utcFormats);
+  utcFormats.c = newFormat(locale_dateTime, utcFormats);
+
+  function newFormat(specifier, formats) {
+    return function(date) {
+      var string = [],
+          i = -1,
+          j = 0,
+          n = specifier.length,
+          c,
+          pad,
+          format;
+
+      if (!(date instanceof Date)) date = new Date(+date);
+
+      while (++i < n) {
+        if (specifier.charCodeAt(i) === 37) {
+          string.push(specifier.slice(j, i));
+          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
+          else pad = c === "e" ? " " : "0";
+          if (format = formats[c]) c = format(date, pad);
+          string.push(c);
+          j = i + 1;
+        }
+      }
+
+      string.push(specifier.slice(j, i));
+      return string.join("");
+    };
+  }
+
+  function newParse(specifier, Z) {
+    return function(string) {
+      var d = newDate(1900, undefined, 1),
+          i = parseSpecifier(d, specifier, string += "", 0),
+          week, day;
+      if (i != string.length) return null;
+
+      // If a UNIX timestamp is specified, return it.
+      if ("Q" in d) return new Date(d.Q);
+      if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0));
+
+      // If this is utcParse, never use the local timezone.
+      if (Z && !("Z" in d)) d.Z = 0;
+
+      // The am-pm flag is 0 for AM, and 1 for PM.
+      if ("p" in d) d.H = d.H % 12 + d.p * 12;
+
+      // If the month was not specified, inherit from the quarter.
+      if (d.m === undefined) d.m = "q" in d ? d.q : 0;
+
+      // Convert day-of-week and week-of-year to day-of-year.
+      if ("V" in d) {
+        if (d.V < 1 || d.V > 53) return null;
+        if (!("w" in d)) d.w = 1;
+        if ("Z" in d) {
+          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();
+          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);
+          week = utcDay.offset(week, (d.V - 1) * 7);
+          d.y = week.getUTCFullYear();
+          d.m = week.getUTCMonth();
+          d.d = week.getUTCDate() + (d.w + 6) % 7;
+        } else {
+          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();
+          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);
+          week = timeDay.offset(week, (d.V - 1) * 7);
+          d.y = week.getFullYear();
+          d.m = week.getMonth();
+          d.d = week.getDate() + (d.w + 6) % 7;
+        }
+      } else if ("W" in d || "U" in d) {
+        if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
+        day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
+        d.m = 0;
+        d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;
+      }
+
+      // If a time zone is specified, all fields are interpreted as UTC and then
+      // offset according to the specified time zone.
+      if ("Z" in d) {
+        d.H += d.Z / 100 | 0;
+        d.M += d.Z % 100;
+        return utcDate(d);
+      }
+
+      // Otherwise, all fields are in local time.
+      return localDate(d);
+    };
+  }
+
+  function parseSpecifier(d, specifier, string, j) {
+    var i = 0,
+        n = specifier.length,
+        m = string.length,
+        c,
+        parse;
+
+    while (i < n) {
+      if (j >= m) return -1;
+      c = specifier.charCodeAt(i++);
+      if (c === 37) {
+        c = specifier.charAt(i++);
+        parse = parses[c in pads ? specifier.charAt(i++) : c];
+        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
+      } else if (c != string.charCodeAt(j++)) {
+        return -1;
+      }
+    }
+
+    return j;
+  }
+
+  function parsePeriod(d, string, i) {
+    var n = periodRe.exec(string.slice(i));
+    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseShortWeekday(d, string, i) {
+    var n = shortWeekdayRe.exec(string.slice(i));
+    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseWeekday(d, string, i) {
+    var n = weekdayRe.exec(string.slice(i));
+    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseShortMonth(d, string, i) {
+    var n = shortMonthRe.exec(string.slice(i));
+    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseMonth(d, string, i) {
+    var n = monthRe.exec(string.slice(i));
+    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+
+  function parseLocaleDateTime(d, string, i) {
+    return parseSpecifier(d, locale_dateTime, string, i);
+  }
+
+  function parseLocaleDate(d, string, i) {
+    return parseSpecifier(d, locale_date, string, i);
+  }
+
+  function parseLocaleTime(d, string, i) {
+    return parseSpecifier(d, locale_time, string, i);
+  }
+
+  function formatShortWeekday(d) {
+    return locale_shortWeekdays[d.getDay()];
+  }
+
+  function formatWeekday(d) {
+    return locale_weekdays[d.getDay()];
+  }
+
+  function formatShortMonth(d) {
+    return locale_shortMonths[d.getMonth()];
+  }
+
+  function formatMonth(d) {
+    return locale_months[d.getMonth()];
+  }
+
+  function formatPeriod(d) {
+    return locale_periods[+(d.getHours() >= 12)];
+  }
+
+  function formatQuarter(d) {
+    return 1 + ~~(d.getMonth() / 3);
+  }
+
+  function formatUTCShortWeekday(d) {
+    return locale_shortWeekdays[d.getUTCDay()];
+  }
+
+  function formatUTCWeekday(d) {
+    return locale_weekdays[d.getUTCDay()];
+  }
+
+  function formatUTCShortMonth(d) {
+    return locale_shortMonths[d.getUTCMonth()];
+  }
+
+  function formatUTCMonth(d) {
+    return locale_months[d.getUTCMonth()];
+  }
+
+  function formatUTCPeriod(d) {
+    return locale_periods[+(d.getUTCHours() >= 12)];
+  }
+
+  function formatUTCQuarter(d) {
+    return 1 + ~~(d.getUTCMonth() / 3);
+  }
+
+  return {
+    format: function(specifier) {
+      var f = newFormat(specifier += "", formats);
+      f.toString = function() { return specifier; };
+      return f;
+    },
+    parse: function(specifier) {
+      var p = newParse(specifier += "", false);
+      p.toString = function() { return specifier; };
+      return p;
+    },
+    utcFormat: function(specifier) {
+      var f = newFormat(specifier += "", utcFormats);
+      f.toString = function() { return specifier; };
+      return f;
+    },
+    utcParse: function(specifier) {
+      var p = newParse(specifier += "", true);
+      p.toString = function() { return specifier; };
+      return p;
+    }
+  };
+}
+
+var pads = {"-": "", "_": " ", "0": "0"},
+    numberRe = /^\s*\d+/, // note: ignores next directive
+    percentRe = /^%/,
+    requoteRe = /[\\^$*+?|[\]().{}]/g;
+
+function pad(value, fill, width) {
+  var sign = value < 0 ? "-" : "",
+      string = (sign ? -value : value) + "",
+      length = string.length;
+  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
+}
+
+function requote(s) {
+  return s.replace(requoteRe, "\\$&");
+}
+
+function formatRe(names) {
+  return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
+}
+
+function formatLookup(names) {
+  return new Map(names.map((name, i) => [name.toLowerCase(), i]));
+}
+
+function parseWeekdayNumberSunday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.w = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekdayNumberMonday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.u = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekNumberSunday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.U = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekNumberISO(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.V = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekNumberMonday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.W = +n[0], i + n[0].length) : -1;
+}
+
+function parseFullYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 4));
+  return n ? (d.y = +n[0], i + n[0].length) : -1;
+}
+
+function parseYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
+}
+
+function parseZone(d, string, i) {
+  var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
+  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
+}
+
+function parseQuarter(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;
+}
+
+function parseMonthNumber(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
+}
+
+function parseDayOfMonth(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.d = +n[0], i + n[0].length) : -1;
+}
+
+function parseDayOfYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 3));
+  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
+}
+
+function parseHour24(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.H = +n[0], i + n[0].length) : -1;
+}
+
+function parseMinutes(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.M = +n[0], i + n[0].length) : -1;
+}
+
+function parseSeconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.S = +n[0], i + n[0].length) : -1;
+}
+
+function parseMilliseconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 3));
+  return n ? (d.L = +n[0], i + n[0].length) : -1;
+}
+
+function parseMicroseconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 6));
+  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
+}
+
+function parseLiteralPercent(d, string, i) {
+  var n = percentRe.exec(string.slice(i, i + 1));
+  return n ? i + n[0].length : -1;
+}
+
+function parseUnixTimestamp(d, string, i) {
+  var n = numberRe.exec(string.slice(i));
+  return n ? (d.Q = +n[0], i + n[0].length) : -1;
+}
+
+function parseUnixTimestampSeconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i));
+  return n ? (d.s = +n[0], i + n[0].length) : -1;
+}
+
+function formatDayOfMonth(d, p) {
+  return pad(d.getDate(), p, 2);
+}
+
+function formatHour24(d, p) {
+  return pad(d.getHours(), p, 2);
+}
+
+function formatHour12(d, p) {
+  return pad(d.getHours() % 12 || 12, p, 2);
+}
+
+function formatDayOfYear(d, p) {
+  return pad(1 + timeDay.count(timeYear(d), d), p, 3);
+}
+
+function formatMilliseconds(d, p) {
+  return pad(d.getMilliseconds(), p, 3);
+}
+
+function formatMicroseconds(d, p) {
+  return formatMilliseconds(d, p) + "000";
+}
+
+function formatMonthNumber(d, p) {
+  return pad(d.getMonth() + 1, p, 2);
+}
+
+function formatMinutes(d, p) {
+  return pad(d.getMinutes(), p, 2);
+}
+
+function formatSeconds(d, p) {
+  return pad(d.getSeconds(), p, 2);
+}
+
+function formatWeekdayNumberMonday(d) {
+  var day = d.getDay();
+  return day === 0 ? 7 : day;
+}
+
+function formatWeekNumberSunday(d, p) {
+  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);
+}
+
+function dISO(d) {
+  var day = d.getDay();
+  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);
+}
+
+function formatWeekNumberISO(d, p) {
+  d = dISO(d);
+  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);
+}
+
+function formatWeekdayNumberSunday(d) {
+  return d.getDay();
+}
+
+function formatWeekNumberMonday(d, p) {
+  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);
+}
+
+function formatYear(d, p) {
+  return pad(d.getFullYear() % 100, p, 2);
+}
+
+function formatYearISO(d, p) {
+  d = dISO(d);
+  return pad(d.getFullYear() % 100, p, 2);
+}
+
+function formatFullYear(d, p) {
+  return pad(d.getFullYear() % 10000, p, 4);
+}
+
+function formatFullYearISO(d, p) {
+  var day = d.getDay();
+  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);
+  return pad(d.getFullYear() % 10000, p, 4);
+}
+
+function formatZone(d) {
+  var z = d.getTimezoneOffset();
+  return (z > 0 ? "-" : (z *= -1, "+"))
+      + pad(z / 60 | 0, "0", 2)
+      + pad(z % 60, "0", 2);
+}
+
+function formatUTCDayOfMonth(d, p) {
+  return pad(d.getUTCDate(), p, 2);
+}
+
+function formatUTCHour24(d, p) {
+  return pad(d.getUTCHours(), p, 2);
+}
+
+function formatUTCHour12(d, p) {
+  return pad(d.getUTCHours() % 12 || 12, p, 2);
+}
+
+function formatUTCDayOfYear(d, p) {
+  return pad(1 + utcDay.count(utcYear(d), d), p, 3);
+}
+
+function formatUTCMilliseconds(d, p) {
+  return pad(d.getUTCMilliseconds(), p, 3);
+}
+
+function formatUTCMicroseconds(d, p) {
+  return formatUTCMilliseconds(d, p) + "000";
+}
+
+function formatUTCMonthNumber(d, p) {
+  return pad(d.getUTCMonth() + 1, p, 2);
+}
+
+function formatUTCMinutes(d, p) {
+  return pad(d.getUTCMinutes(), p, 2);
+}
+
+function formatUTCSeconds(d, p) {
+  return pad(d.getUTCSeconds(), p, 2);
+}
+
+function formatUTCWeekdayNumberMonday(d) {
+  var dow = d.getUTCDay();
+  return dow === 0 ? 7 : dow;
+}
+
+function formatUTCWeekNumberSunday(d, p) {
+  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);
+}
+
+function UTCdISO(d) {
+  var day = d.getUTCDay();
+  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
+}
+
+function formatUTCWeekNumberISO(d, p) {
+  d = UTCdISO(d);
+  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
+}
+
+function formatUTCWeekdayNumberSunday(d) {
+  return d.getUTCDay();
+}
+
+function formatUTCWeekNumberMonday(d, p) {
+  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);
+}
+
+function formatUTCYear(d, p) {
+  return pad(d.getUTCFullYear() % 100, p, 2);
+}
+
+function formatUTCYearISO(d, p) {
+  d = UTCdISO(d);
+  return pad(d.getUTCFullYear() % 100, p, 2);
+}
+
+function formatUTCFullYear(d, p) {
+  return pad(d.getUTCFullYear() % 10000, p, 4);
+}
+
+function formatUTCFullYearISO(d, p) {
+  var day = d.getUTCDay();
+  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
+  return pad(d.getUTCFullYear() % 10000, p, 4);
+}
+
+function formatUTCZone() {
+  return "+0000";
+}
+
+function formatLiteralPercent() {
+  return "%";
+}
+
+function formatUnixTimestamp(d) {
+  return +d;
+}
+
+function formatUnixTimestampSeconds(d) {
+  return Math.floor(+d / 1000);
+}
Index: node_modules/d3-time/LICENSE
===================================================================
--- node_modules/d3-time/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2022 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-time/README.md
===================================================================
--- node_modules/d3-time/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,380 @@
+# d3-time
+
+When visualizing time series data, analyzing temporal patterns, or working with time in general, the irregularities of conventional time units quickly become apparent. In the [Gregorian calendar](https://en.wikipedia.org/wiki/Gregorian_calendar), for example, most months have 31 days but some have 28, 29 or 30; most years have 365 days but [leap years](https://en.wikipedia.org/wiki/Leap_year) have 366; and with [daylight saving](https://en.wikipedia.org/wiki/Daylight_saving_time), most days have 24 hours but some have 23 or 25. Adding to complexity, daylight saving conventions vary around the world.
+
+As a result of these temporal peculiarities, it can be difficult to perform seemingly-trivial tasks. For example, if you want to compute the number of days that have passed between two dates, you can’t simply subtract and divide by 24 hours (86,400,000 ms):
+
+```js
+start = new Date(2015, 02, 01) // 2015-03-01T00:00
+end = new Date(2015, 03, 01) // 2015-04-01T00:00
+(end - start) / 864e5 // 30.958333333333332, oops! 🤯
+```
+
+You can, however, use [d3.timeDay](#timeDay).[count](#interval_count):
+
+```js
+d3.timeDay.count(start, end) // 31 😌
+```
+
+The [day](#day) [interval](#api-reference) is one of several provided by d3-time. Each interval represents a conventional unit of time—[hours](#timeHour), [weeks](#timeWeek), [months](#timeMonth), *etc.*—and has methods to calculate boundary dates. For example, [d3.timeDay](#timeDay) computes midnight (typically 12:00 AM local time) of the corresponding day. In addition to [rounding](#interval_round) and [counting](#interval_count), intervals can also be used to generate arrays of boundary dates. For example, to compute each Sunday in the current month:
+
+```js
+start = d3.timeMonth.floor() // 2015-01-01T00:00
+stop = d3.timeMonth.ceil() // 2015-02-01T00:00
+d3.timeWeek.range(start, stop) // [2015-01-07T00:00, 2015-01-14T00:00, 2015-01-21T00:00, 2015-01-28T00:00]
+```
+
+The d3-time module does not implement its own calendaring system; it merely implements a convenient API for calendar math on top of ECMAScript [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date). Thus, it ignores leap seconds and can only work with the local time zone and [Coordinated Universal Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) (UTC).
+
+This module is used by D3’s time scales to generate sensible ticks, by D3’s time format, and can also be used directly to do things like [calendar layouts](http://bl.ocks.org/mbostock/4063318).
+
+## Installing
+
+If you use npm, `npm install d3-time`. You can also download the [latest release on GitHub](https://github.com/d3/d3-time/releases/latest). For vanilla HTML in modern browsers, import d3-time from Skypack:
+
+```html
+<script type="module">
+
+import {timeDay} from "https://cdn.skypack.dev/d3-time@3";
+
+const day = timeDay();
+
+</script>
+```
+
+For legacy environments, you can load d3-time’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-array@3"></script>
+<script src="https://cdn.jsdelivr.net/npm/d3-time@3"></script>
+<script>
+
+const day = d3.timeDay();
+
+</script>
+```
+
+[Try d3-time in your browser.](https://observablehq.com/collection/@d3/d3-time)
+
+## API Reference
+
+<a name="_interval" href="#_interval">#</a> <i>interval</i>([<i>date</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Equivalent to [*interval*.floor](#interval_floor), except if *date* is not specified, it defaults to the current time. For example, [d3.timeYear](#timeYear)(*date*) and d3.timeYear.floor(*date*) are equivalent.
+
+```js
+monday = d3.timeMonday() // the latest preceeding Monday, local time
+```
+
+<a name="interval_floor" href="#interval_floor">#</a> <i>interval</i>.<b>floor</b>(<i>date</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Returns a new date representing the latest interval boundary date before or equal to *date*. For example, [d3.timeDay](#timeDay).floor(*date*) typically returns 12:00 AM local time on the given *date*.
+
+This method is idempotent: if the specified *date* is already floored to the current interval, a new date with an identical time is returned. Furthermore, the returned date is the minimum expressible value of the associated interval, such that *interval*.floor(*interval*.floor(*date*) - 1) returns the preceeding interval boundary date.
+
+Note that the `==` and `===` operators do not compare by value with [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) objects, and thus you cannot use them to tell whether the specified *date* has already been floored. Instead, coerce to a number and then compare:
+
+```js
+// Returns true if the specified date is a day boundary.
+function isDay(date) {
+  return +d3.timeDay.floor(date) === +date;
+}
+```
+
+This is more reliable than testing whether the time is 12:00 AM, as in some time zones midnight may not exist due to daylight saving.
+
+<a name="interval_round" href="#interval_round">#</a> <i>interval</i>.<b>round</b>(<i>date</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Returns a new date representing the closest interval boundary date to *date*. For example, [d3.timeDay](#timeDay).round(*date*) typically returns 12:00 AM local time on the given *date* if it is on or before noon, and 12:00 AM of the following day if it is after noon.
+
+This method is idempotent: if the specified *date* is already rounded to the current interval, a new date with an identical time is returned.
+
+<a name="interval_ceil" href="#interval_ceil">#</a> <i>interval</i>.<b>ceil</b>(<i>date</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Returns a new date representing the earliest interval boundary date after or equal to *date*. For example, [d3.timeDay](#timeDay).ceil(*date*) typically returns 12:00 AM local time on the date following the given *date*.
+
+This method is idempotent: if the specified *date* is already ceilinged to the current interval, a new date with an identical time is returned. Furthermore, the returned date is the maximum expressible value of the associated interval, such that *interval*.ceil(*interval*.ceil(*date*) + 1) returns the following interval boundary date.
+
+<a name="interval_offset" href="#interval_offset">#</a> <i>interval</i>.<b>offset</b>(<i>date</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Returns a new date equal to *date* plus *step* intervals. If *step* is not specified it defaults to 1. If *step* is negative, then the returned date will be before the specified *date*; if *step* is zero, then a copy of the specified *date* is returned; if *step* is not an integer, it is [floored](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor). This method does not round the specified *date* to the interval. For example, if *date* is today at 5:34 PM, then [d3.timeDay](#timeDay).offset(*date*, 1) returns 5:34 PM tomorrow (even if daylight saving changes!).
+
+<a name="interval_range" href="#interval_range">#</a> <i>interval</i>.<b>range</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Returns an array of dates representing every interval boundary after or equal to *start* (inclusive) and before *stop* (exclusive). If *step* is specified, then every *step*th boundary will be returned; for example, for the [d3.timeDay](#timeDay) interval a *step* of 2 will return every other day. If *step* is not an integer, it is [floored](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor).
+
+The first date in the returned array is the earliest boundary after or equal to *start*; subsequent dates are [offset](#interval_offset) by *step* intervals and [floored](#interval_floor). Thus, two overlapping ranges may be consistent. For example, this range contains odd days:
+
+```js
+d3.timeDay.range(new Date(2015, 0, 1), new Date(2015, 0, 7), 2) // [2015-01-01T00:00, 2015-01-03T00:00, 2015-01-05T00:00]
+```
+
+While this contains even days:
+
+```js
+d3.timeDay.range(new Date(2015, 0, 2), new Date(2015, 0, 8), 2) // [2015-01-02T00:00, 2015-01-04T00:00, 2015-01-06T00:00]
+```
+
+To make ranges consistent when a *step* is specified, use [*interval*.every](#interval_every) instead.
+
+<a name="interval_filter" href="#interval_filter">#</a> <i>interval</i>.<b>filter</b>(<i>test</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Returns a new interval that is a filtered subset of this interval using the specified *test* function. The *test* function is passed a date and should return true if and only if the specified date should be considered part of the interval. For example, to create an interval that returns the 1st, 11th, 21th and 31th (if it exists) of each month:
+
+```js
+d3.timeDay.filter(d => (d.getDate() - 1) % 10 === 0)
+```
+
+The returned filtered interval does not support [*interval*.count](#interval_count). See also [*interval*.every](#interval_every).
+
+<a name="interval_every" href="#interval_every">#</a> <i>interval</i>.<b>every</b>(<i>step</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Returns a [filtered](#interval_filter) view of this interval representing every *step*th date. The meaning of *step* is dependent on this interval’s parent interval as defined by the field function. For example, [d3.timeMinute](#timeMinute).every(15) returns an interval representing every fifteen minutes, starting on the hour: :00, :15, :30, :45, <i>etc.</i> Note that for some intervals, the resulting dates may not be uniformly-spaced; [d3.timeDay](#timeDay)’s parent interval is [d3.timeMonth](#timeMonth), and thus the interval number resets at the start of each month. If *step* is not valid, returns null. If *step* is one, returns this interval.
+
+This method can be used in conjunction with [*interval*.range](#interval_range) to ensure that two overlapping ranges are consistent. For example, this range contains odd days:
+
+```js
+d3.timeDay.every(2).range(new Date(2015, 0, 1), new Date(2015, 0, 7)) // [2015-01-01T00:00, 2015-01-03T00:00, 2015-01-05T00:00]
+```
+
+As does this one:
+
+```js
+d3.timeDay.every(2).range(new Date(2015, 0, 2), new Date(2015, 0, 8)) // [2015-01-03T00:00, 2015-01-05T00:00, 2015-01-07T00:00]
+```
+
+The returned filtered interval does not support [*interval*.count](#interval_count). See also [*interval*.filter](#interval_filter).
+
+<a name="interval_count" href="#interval_count">#</a> <i>interval</i>.<b>count</b>(<i>start</i>, <i>end</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Returns the number of interval boundaries after *start* (exclusive) and before or equal to *end* (inclusive). Note that this behavior is slightly different than [*interval*.range](#interval_range) because its purpose is to return the zero-based number of the specified *end* date relative to the specified *start* date. For example, to compute the current zero-based day-of-year number:
+
+```js
+d3.timeDay.count(d3.timeYear(now), now) // 177
+```
+
+Likewise, to compute the current zero-based week-of-year number for weeks that start on Sunday:
+
+```js
+d3.timeSunday.count(d3.timeYear(now), now) // 25
+```
+
+<a name="timeInterval" href="#timeInterval">#</a> d3.<b>timeInterval</b>(<i>floor</i>, <i>offset</i>[, <i>count</i>[, <i>field</i>]]) · [Source](https://github.com/d3/d3-time/blob/main/src/interval.js)
+
+Constructs a new custom interval given the specified *floor* and *offset* functions and an optional *count* function.
+
+The *floor* function takes a single date as an argument and rounds it down to the nearest interval boundary.
+
+The *offset* function takes a date and an integer step as arguments and advances the specified date by the specified number of boundaries; the step may be positive, negative or zero.
+
+The optional *count* function takes a start date and an end date, already floored to the current interval, and returns the number of boundaries between the start (exclusive) and end (inclusive). If a *count* function is not specified, the returned interval does not expose [*interval*.count](#interval_count) or [*interval*.every](#interval_every) methods. Note: due to an internal optimization, the specified *count* function must not invoke *interval*.count on other time intervals.
+
+The optional *field* function takes a date, already floored to the current interval, and returns the field value of the specified date, corresponding to the number of boundaries between this date (exclusive) and the latest previous parent boundary. For example, for the [d3.timeDay](#timeDay) interval, this returns the number of days since the start of the month. If a *field* function is not specified, it defaults to counting the number of interval boundaries since the UNIX epoch of January 1, 1970 UTC. The *field* function defines the behavior of [*interval*.every](#interval_every).
+
+### Intervals
+
+The following intervals are provided:
+
+<a name="timeMillisecond" href="#timeMillisecond">#</a> d3.<b>timeMillisecond</b> · [Source](https://github.com/d3/d3-time/blob/main/src/millisecond.js "Source")
+<br><a href="#timeMillisecond">#</a> d3.<b>utcMillisecond</b>
+
+Milliseconds; the shortest available time unit.
+
+<a name="timeSecond" href="#timeSecond">#</a> d3.<b>timeSecond</b> · [Source](https://github.com/d3/d3-time/blob/main/src/second.js "Source")
+<br><a href="#timeSecond">#</a> d3.<b>utcSecond</b>
+
+Seconds (e.g., 01:23:45.0000 AM); 1,000 milliseconds.
+
+<a name="timeMinute" href="#timeMinute">#</a> d3.<b>timeMinute</b> · [Source](https://github.com/d3/d3-time/blob/main/src/minute.js "Source")
+<br><a href="#timeMinute">#</a> d3.<b>utcMinute</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcMinute.js "Source")
+
+Minutes (e.g., 01:02:00 AM); 60 seconds. Note that ECMAScript [ignores leap seconds](http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.1).
+
+<a name="timeHour" href="#timeHour">#</a> d3.<b>timeHour</b> · [Source](https://github.com/d3/d3-time/blob/main/src/hour.js "Source")
+<br><a href="#timeHour">#</a> d3.<b>utcHour</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcHour.js "Source")
+
+Hours (e.g., 01:00 AM); 60 minutes. Note that advancing time by one hour in local time can return the same hour or skip an hour due to daylight saving.
+
+<a name="timeDay" href="#timeDay">#</a> d3.<b>timeDay</b> · [Source](https://github.com/d3/d3-time/blob/main/src/day.js "Source")
+<br><a href="#timeDay">#</a> d3.<b>utcDay</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcDay.js "Source")
+<br><a href="#timeDay">#</a> d3.<b>unixDay</b> · [Source](https://github.com/d3/d3-time/blob/main/src/unixDay.js "Source")
+
+Days (e.g., February 7, 2012 at 12:00 AM); typically 24 hours. Days in local time may range from 23 to 25 hours due to daylight saving. d3.unixDay is like [d3.utcDay](#timeDay), except it counts days since the UNIX epoch (January 1, 1970) such that *interval*.every returns uniformly-spaced dates rather than varying based on day-of-month.
+
+<a name="timeWeek" href="#timeWeek">#</a> d3.<b>timeWeek</b> · [Source](https://github.com/d3/d3-time/blob/main/src/week.js "Source")
+<br><a href="#timeWeek">#</a> d3.<b>utcWeek</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js "Source")
+
+Alias for [d3.timeSunday](#timeSunday); 7 days and typically 168 hours. Weeks in local time may range from 167 to 169 hours due to daylight saving.
+
+<a name="timeSunday" href="#timeSunday">#</a> d3.<b>timeSunday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeSunday">#</a> d3.<b>utcSunday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Sunday-based weeks (e.g., February 5, 2012 at 12:00 AM).
+
+<a name="timeMonday" href="#timeMonday">#</a> d3.<b>timeMonday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeMonday">#</a> d3.<b>utcMonday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Monday-based weeks (e.g., February 6, 2012 at 12:00 AM).
+
+<a name="timeTuesday" href="#timeTuesday">#</a> d3.<b>timeTuesday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeTuesday">#</a> d3.<b>utcTuesday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Tuesday-based weeks (e.g., February 7, 2012 at 12:00 AM).
+
+<a name="timeWednesday" href="#timeWednesday">#</a> d3.<b>timeWednesday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeWednesday">#</a> d3.<b>utcWednesday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Wednesday-based weeks (e.g., February 8, 2012 at 12:00 AM).
+
+<a name="timeThursday" href="#timeThursday">#</a> d3.<b>timeThursday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeThursday">#</a> d3.<b>utcThursday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Thursday-based weeks (e.g., February 9, 2012 at 12:00 AM).
+
+<a name="timeFriday" href="#timeFriday">#</a> d3.<b>timeFriday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeFriday">#</a> d3.<b>utcFriday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Friday-based weeks (e.g., February 10, 2012 at 12:00 AM).
+
+<a name="timeSaturday" href="#timeSaturday">#</a> d3.<b>timeSaturday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeSaturday">#</a> d3.<b>utcSaturday</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Saturday-based weeks (e.g., February 11, 2012 at 12:00 AM).
+
+<a name="timeMonth" href="#timeMonth">#</a> d3.<b>timeMonth</b> · [Source](https://github.com/d3/d3-time/blob/main/src/month.js "Source")
+<br><a href="#timeMonth">#</a> d3.<b>utcMonth</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcMonth.js "Source")
+
+Months (e.g., February 1, 2012 at 12:00 AM); ranges from 28 to 31 days.
+
+<a name="timeYear" href="#timeYear">#</a> d3.<b>timeYear</b> · [Source](https://github.com/d3/d3-time/blob/main/src/year.js "Source")
+<br><a href="#timeYear">#</a> d3.<b>utcYear</b> · [Source](https://github.com/d3/d3-time/blob/main/src/utcYear.js "Source")
+
+Years (e.g., January 1, 2012 at 12:00 AM); ranges from 365 to 366 days.
+
+### Ranges
+
+For convenience, aliases for [*interval*.range](#interval_range) are also provided as plural forms of the corresponding interval.
+
+<a name="timeMilliseconds" href="#timeMilliseconds">#</a> d3.<b>timeMilliseconds</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/millisecond.js)
+<br><a href="#timeMilliseconds">#</a> d3.<b>utcMilliseconds</b>(<i>start</i>, <i>stop</i>[, <i>step</i>])
+
+Aliases for [d3.timeMillisecond](#timeMillisecond).[range](#interval_range) and [d3.utcMillisecond](#timeMillisecond).[range](#interval_range).
+
+<a name="timeSeconds" href="#timeSeconds">#</a> d3.<b>timeSeconds</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/second.js)
+<br><a href="#timeSeconds">#</a> d3.<b>utcSeconds</b>(<i>start</i>, <i>stop</i>[, <i>step</i>])
+
+Aliases for [d3.timeSecond](#timeSecond).[range](#interval_range) and [d3.utcSecond](#timeSecond).[range](#interval_range).
+
+<a name="timeMinutes" href="#timeMinutes">#</a> d3.<b>timeMinutes</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/minute.js)
+<br><a href="#timeMinutes">#</a> d3.<b>utcMinutes</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcMinute.js)
+
+Aliases for [d3.timeMinute](#timeMinute).[range](#interval_range) and [d3.utcMinute](#timeMinute).[range](#interval_range).
+
+<a name="timeHours" href="#timeHours">#</a> d3.<b>timeHours</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/hour.js)
+<br><a href="#timeHours">#</a> d3.<b>utcHours</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcHour.js)
+
+Aliases for [d3.timeHour](#timeHour).[range](#interval_range) and [d3.utcHour](#timeHour).[range](#interval_range).
+
+<a name="timeDays" href="#timeDays">#</a> d3.<b>timeDays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/day.js)
+<br><a href="#timeDays">#</a> d3.<b>utcDays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcDay.js)
+<br><a href="#timeDays">#</a> d3.<b>unixDays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/unixDay.js)
+
+Aliases for [d3.timeDay](#timeDay).[range](#interval_range), [d3.utcDay](#timeDay).[range](#interval_range), and [d3.unixDay](#timeDay).[range](#interval_range).
+
+<a name="timeWeeks" href="#timeWeeks">#</a> d3.<b>timeWeeks</b>(<i>start</i>, <i>stop</i>[, <i>step</i>])
+<br><a href="#timeWeeks">#</a> d3.<b>utcWeeks</b>(<i>start</i>, <i>stop</i>[, <i>step</i>])
+
+Aliases for [d3.timeWeek](#timeWeek).[range](#interval_range) and [d3.utcWeek](#timeWeek).[range](#interval_range).
+
+<a name="timeSundays" href="#timeSundays">#</a> d3.<b>timeSundays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeSundays">#</a> d3.<b>utcSundays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Aliases for [d3.timeSunday](#timeSunday).[range](#interval_range) and [d3.utcSunday](#timeSunday).[range](#interval_range).
+
+<a name="timeMondays" href="#timeMondays">#</a> d3.<b>timeMondays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeMondays">#</a> d3.<b>utcMondays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Aliases for [d3.timeMonday](#timeMonday).[range](#interval_range) and [d3.utcMonday](#timeMonday).[range](#interval_range).
+
+<a name="timeTuesdays" href="#timeTuesdays">#</a> d3.<b>timeTuesdays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeTuesdays">#</a> d3.<b>utcTuesdays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Aliases for [d3.timeTuesday](#timeTuesday).[range](#interval_range) and [d3.utcTuesday](#timeTuesday).[range](#interval_range).
+
+<a name="timeWednesdays" href="#timeWednesdays">#</a> d3.<b>timeWednesdays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeWednesdays">#</a> d3.<b>utcWednesdays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Aliases for [d3.timeWednesday](#timeWednesday).[range](#interval_range) and [d3.utcWednesday](#timeWednesday).[range](#interval_range).
+
+<a name="timeThursdays" href="#timeThursdays">#</a> d3.<b>timeThursdays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeThursdays">#</a> d3.<b>utcThursdays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Aliases for [d3.timeThursday](#timeThursday).[range](#interval_range) and [d3.utcThursday](#timeThursday).[range](#interval_range).
+
+<a name="timeFridays" href="#timeFridays">#</a> d3.<b>timeFridays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeFridays">#</a> d3.<b>utcFridays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Aliases for [d3.timeFriday](#timeFriday).[range](#interval_range) and [d3.utcFriday](#timeFriday).[range](#interval_range).
+
+<a name="timeSaturdays" href="#timeSaturdays">#</a> d3.<b>timeSaturdays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/week.js)
+<br><a href="#timeSaturdays">#</a> d3.<b>utcSaturdays</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcWeek.js)
+
+Aliases for [d3.timeSaturday](#timeSaturday).[range](#interval_range) and [d3.utcSaturday](#timeSaturday).[range](#interval_range).
+
+<a name="timeMonths" href="#timeMonths">#</a> d3.<b>timeMonths</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/month.js)
+<br><a href="#timeMonths">#</a> d3.<b>utcMonths</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcMonth.js)
+
+Aliases for [d3.timeMonth](#timeMonth).[range](#interval_range) and [d3.utcMonth](#timeMonth).[range](#interval_range).
+
+<a name="timeYears" href="#timeYears">#</a> d3.<b>timeYears</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/year.js)
+<br><a href="#timeYears">#</a> d3.<b>utcYears</b>(<i>start</i>, <i>stop</i>[, <i>step</i>]) · [Source](https://github.com/d3/d3-time/blob/main/src/utcYear.js)
+
+Aliases for [d3.timeYear](#timeYear).[range](#interval_range) and [d3.utcYear](#timeYear).[range](#interval_range).
+
+### Ticks
+
+<a name="timeTicks" href="#timeTicks">#</a> d3.<b>timeTicks</b>(<i>start</i>, <i>stop</i>, <i>count</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/ticks.js)
+
+Equivalent to [d3.utcTicks](#utcTicks), but in local time.
+
+<a name="timeTickInterval" href="#timeTickInterval">#</a> d3.<b>timeTickInterval</b>(<i>start</i>, <i>stop</i>, <i>count</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/ticks.js)
+
+Returns the time interval that would be used by [d3.timeTicks](#timeTicks) given the same arguments.
+
+<a name="utcTicks" href="#utcTicks">#</a> d3.<b>utcTicks</b>(<i>start</i>, <i>stop</i>, <i>count</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/ticks.js)
+
+Returns an array of approximately *count* dates at regular intervals between *start* and *stop* (inclusive). If *stop* is before *start*, dates are returned in reverse chronological order; otherwise dates are returned in chronological order. The following UTC time intervals are considered:
+
+* 1 second
+* 5 seconds
+* 15 seconds
+* 30 seconds
+* 1 minute
+* 5 minutes
+* 15 minutes
+* 30 minutes
+* 1 hour
+* 3 hours
+* 6 hours
+* 12 hours
+* 1 day
+* 2 days
+* 1 week
+* 1 month
+* 3 months
+* 1 year
+
+Multiples of milliseconds (for small ranges) and years (for large ranges) are also considered, following the rules of [d3.ticks](https://github.com/d3/d3-array/blob/main/README.md#ticks). The interval producing the number of dates that is closest to *count* is used. For example:
+
+```js
+start = new Date(Date.UTC(1970, 2, 1))
+stop = new Date(Date.UTC(1996, 2, 19))
+count = 4
+d3.utcTicks(start, stop, count) // [1975-01-01, 1980-01-01, 1985-01-01, 1990-01-01, 1995-01-01]
+```
+
+If *count* is a time interval, this function behaves similarly to [*interval*.range](#interval_range) except that both *start* and *stop* are inclusive and it may return dates in reverse chronological order if *stop* is before *start*.
+
+<a name="utcTickInterval" href="#utcTickInterval">#</a> d3.<b>utcTickInterval</b>(<i>start</i>, <i>stop</i>, <i>count</i>) · [Source](https://github.com/d3/d3-time/blob/main/src/ticks.js)
+
+Returns the time interval that would be used by [d3.utcTicks](#utcTicks) given the same arguments. If there is no associated interval, such as when *start* or *stop* is invalid, returns null.
Index: node_modules/d3-time/dist/d3-time.js
===================================================================
--- node_modules/d3-time/dist/d3-time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/dist/d3-time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,445 @@
+// https://d3js.org/d3-time/ v3.1.0 Copyright 2010-2022 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) :
+typeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}, global.d3));
+})(this, (function (exports, d3Array) { 'use strict';
+
+const t0 = new Date, t1 = new Date;
+
+function timeInterval(floori, offseti, count, field) {
+
+  function interval(date) {
+    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;
+  }
+
+  interval.floor = (date) => {
+    return floori(date = new Date(+date)), date;
+  };
+
+  interval.ceil = (date) => {
+    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
+  };
+
+  interval.round = (date) => {
+    const d0 = interval(date), d1 = interval.ceil(date);
+    return date - d0 < d1 - date ? d0 : d1;
+  };
+
+  interval.offset = (date, step) => {
+    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
+  };
+
+  interval.range = (start, stop, step) => {
+    const range = [];
+    start = interval.ceil(start);
+    step = step == null ? 1 : Math.floor(step);
+    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
+    let previous;
+    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);
+    while (previous < start && start < stop);
+    return range;
+  };
+
+  interval.filter = (test) => {
+    return timeInterval((date) => {
+      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
+    }, (date, step) => {
+      if (date >= date) {
+        if (step < 0) while (++step <= 0) {
+          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
+        } else while (--step >= 0) {
+          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
+        }
+      }
+    });
+  };
+
+  if (count) {
+    interval.count = (start, end) => {
+      t0.setTime(+start), t1.setTime(+end);
+      floori(t0), floori(t1);
+      return Math.floor(count(t0, t1));
+    };
+
+    interval.every = (step) => {
+      step = Math.floor(step);
+      return !isFinite(step) || !(step > 0) ? null
+          : !(step > 1) ? interval
+          : interval.filter(field
+              ? (d) => field(d) % step === 0
+              : (d) => interval.count(0, d) % step === 0);
+    };
+  }
+
+  return interval;
+}
+
+const millisecond = timeInterval(() => {
+  // noop
+}, (date, step) => {
+  date.setTime(+date + step);
+}, (start, end) => {
+  return end - start;
+});
+
+// An optimized implementation for this simple case.
+millisecond.every = (k) => {
+  k = Math.floor(k);
+  if (!isFinite(k) || !(k > 0)) return null;
+  if (!(k > 1)) return millisecond;
+  return timeInterval((date) => {
+    date.setTime(Math.floor(date / k) * k);
+  }, (date, step) => {
+    date.setTime(+date + step * k);
+  }, (start, end) => {
+    return (end - start) / k;
+  });
+};
+
+const milliseconds = millisecond.range;
+
+const durationSecond = 1000;
+const durationMinute = durationSecond * 60;
+const durationHour = durationMinute * 60;
+const durationDay = durationHour * 24;
+const durationWeek = durationDay * 7;
+const durationMonth = durationDay * 30;
+const durationYear = durationDay * 365;
+
+const second = timeInterval((date) => {
+  date.setTime(date - date.getMilliseconds());
+}, (date, step) => {
+  date.setTime(+date + step * durationSecond);
+}, (start, end) => {
+  return (end - start) / durationSecond;
+}, (date) => {
+  return date.getUTCSeconds();
+});
+
+const seconds = second.range;
+
+const timeMinute = timeInterval((date) => {
+  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
+}, (date, step) => {
+  date.setTime(+date + step * durationMinute);
+}, (start, end) => {
+  return (end - start) / durationMinute;
+}, (date) => {
+  return date.getMinutes();
+});
+
+const timeMinutes = timeMinute.range;
+
+const utcMinute = timeInterval((date) => {
+  date.setUTCSeconds(0, 0);
+}, (date, step) => {
+  date.setTime(+date + step * durationMinute);
+}, (start, end) => {
+  return (end - start) / durationMinute;
+}, (date) => {
+  return date.getUTCMinutes();
+});
+
+const utcMinutes = utcMinute.range;
+
+const timeHour = timeInterval((date) => {
+  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
+}, (date, step) => {
+  date.setTime(+date + step * durationHour);
+}, (start, end) => {
+  return (end - start) / durationHour;
+}, (date) => {
+  return date.getHours();
+});
+
+const timeHours = timeHour.range;
+
+const utcHour = timeInterval((date) => {
+  date.setUTCMinutes(0, 0, 0);
+}, (date, step) => {
+  date.setTime(+date + step * durationHour);
+}, (start, end) => {
+  return (end - start) / durationHour;
+}, (date) => {
+  return date.getUTCHours();
+});
+
+const utcHours = utcHour.range;
+
+const timeDay = timeInterval(
+  date => date.setHours(0, 0, 0, 0),
+  (date, step) => date.setDate(date.getDate() + step),
+  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,
+  date => date.getDate() - 1
+);
+
+const timeDays = timeDay.range;
+
+const utcDay = timeInterval((date) => {
+  date.setUTCHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setUTCDate(date.getUTCDate() + step);
+}, (start, end) => {
+  return (end - start) / durationDay;
+}, (date) => {
+  return date.getUTCDate() - 1;
+});
+
+const utcDays = utcDay.range;
+
+const unixDay = timeInterval((date) => {
+  date.setUTCHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setUTCDate(date.getUTCDate() + step);
+}, (start, end) => {
+  return (end - start) / durationDay;
+}, (date) => {
+  return Math.floor(date / durationDay);
+});
+
+const unixDays = unixDay.range;
+
+function timeWeekday(i) {
+  return timeInterval((date) => {
+    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
+    date.setHours(0, 0, 0, 0);
+  }, (date, step) => {
+    date.setDate(date.getDate() + step * 7);
+  }, (start, end) => {
+    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
+  });
+}
+
+const timeSunday = timeWeekday(0);
+const timeMonday = timeWeekday(1);
+const timeTuesday = timeWeekday(2);
+const timeWednesday = timeWeekday(3);
+const timeThursday = timeWeekday(4);
+const timeFriday = timeWeekday(5);
+const timeSaturday = timeWeekday(6);
+
+const timeSundays = timeSunday.range;
+const timeMondays = timeMonday.range;
+const timeTuesdays = timeTuesday.range;
+const timeWednesdays = timeWednesday.range;
+const timeThursdays = timeThursday.range;
+const timeFridays = timeFriday.range;
+const timeSaturdays = timeSaturday.range;
+
+function utcWeekday(i) {
+  return timeInterval((date) => {
+    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
+    date.setUTCHours(0, 0, 0, 0);
+  }, (date, step) => {
+    date.setUTCDate(date.getUTCDate() + step * 7);
+  }, (start, end) => {
+    return (end - start) / durationWeek;
+  });
+}
+
+const utcSunday = utcWeekday(0);
+const utcMonday = utcWeekday(1);
+const utcTuesday = utcWeekday(2);
+const utcWednesday = utcWeekday(3);
+const utcThursday = utcWeekday(4);
+const utcFriday = utcWeekday(5);
+const utcSaturday = utcWeekday(6);
+
+const utcSundays = utcSunday.range;
+const utcMondays = utcMonday.range;
+const utcTuesdays = utcTuesday.range;
+const utcWednesdays = utcWednesday.range;
+const utcThursdays = utcThursday.range;
+const utcFridays = utcFriday.range;
+const utcSaturdays = utcSaturday.range;
+
+const timeMonth = timeInterval((date) => {
+  date.setDate(1);
+  date.setHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setMonth(date.getMonth() + step);
+}, (start, end) => {
+  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
+}, (date) => {
+  return date.getMonth();
+});
+
+const timeMonths = timeMonth.range;
+
+const utcMonth = timeInterval((date) => {
+  date.setUTCDate(1);
+  date.setUTCHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setUTCMonth(date.getUTCMonth() + step);
+}, (start, end) => {
+  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
+}, (date) => {
+  return date.getUTCMonth();
+});
+
+const utcMonths = utcMonth.range;
+
+const timeYear = timeInterval((date) => {
+  date.setMonth(0, 1);
+  date.setHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setFullYear(date.getFullYear() + step);
+}, (start, end) => {
+  return end.getFullYear() - start.getFullYear();
+}, (date) => {
+  return date.getFullYear();
+});
+
+// An optimized implementation for this simple case.
+timeYear.every = (k) => {
+  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {
+    date.setFullYear(Math.floor(date.getFullYear() / k) * k);
+    date.setMonth(0, 1);
+    date.setHours(0, 0, 0, 0);
+  }, (date, step) => {
+    date.setFullYear(date.getFullYear() + step * k);
+  });
+};
+
+const timeYears = timeYear.range;
+
+const utcYear = timeInterval((date) => {
+  date.setUTCMonth(0, 1);
+  date.setUTCHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setUTCFullYear(date.getUTCFullYear() + step);
+}, (start, end) => {
+  return end.getUTCFullYear() - start.getUTCFullYear();
+}, (date) => {
+  return date.getUTCFullYear();
+});
+
+// An optimized implementation for this simple case.
+utcYear.every = (k) => {
+  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {
+    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
+    date.setUTCMonth(0, 1);
+    date.setUTCHours(0, 0, 0, 0);
+  }, (date, step) => {
+    date.setUTCFullYear(date.getUTCFullYear() + step * k);
+  });
+};
+
+const utcYears = utcYear.range;
+
+function ticker(year, month, week, day, hour, minute) {
+
+  const tickIntervals = [
+    [second,  1,      durationSecond],
+    [second,  5,  5 * durationSecond],
+    [second, 15, 15 * durationSecond],
+    [second, 30, 30 * durationSecond],
+    [minute,  1,      durationMinute],
+    [minute,  5,  5 * durationMinute],
+    [minute, 15, 15 * durationMinute],
+    [minute, 30, 30 * durationMinute],
+    [  hour,  1,      durationHour  ],
+    [  hour,  3,  3 * durationHour  ],
+    [  hour,  6,  6 * durationHour  ],
+    [  hour, 12, 12 * durationHour  ],
+    [   day,  1,      durationDay   ],
+    [   day,  2,  2 * durationDay   ],
+    [  week,  1,      durationWeek  ],
+    [ month,  1,      durationMonth ],
+    [ month,  3,  3 * durationMonth ],
+    [  year,  1,      durationYear  ]
+  ];
+
+  function ticks(start, stop, count) {
+    const reverse = stop < start;
+    if (reverse) [start, stop] = [stop, start];
+    const interval = count && typeof count.range === "function" ? count : tickInterval(start, stop, count);
+    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop
+    return reverse ? ticks.reverse() : ticks;
+  }
+
+  function tickInterval(start, stop, count) {
+    const target = Math.abs(stop - start) / count;
+    const i = d3Array.bisector(([,, step]) => step).right(tickIntervals, target);
+    if (i === tickIntervals.length) return year.every(d3Array.tickStep(start / durationYear, stop / durationYear, count));
+    if (i === 0) return millisecond.every(Math.max(d3Array.tickStep(start, stop, count), 1));
+    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
+    return t.every(step);
+  }
+
+  return [ticks, tickInterval];
+}
+
+const [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);
+const [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);
+
+exports.timeDay = timeDay;
+exports.timeDays = timeDays;
+exports.timeFriday = timeFriday;
+exports.timeFridays = timeFridays;
+exports.timeHour = timeHour;
+exports.timeHours = timeHours;
+exports.timeInterval = timeInterval;
+exports.timeMillisecond = millisecond;
+exports.timeMilliseconds = milliseconds;
+exports.timeMinute = timeMinute;
+exports.timeMinutes = timeMinutes;
+exports.timeMonday = timeMonday;
+exports.timeMondays = timeMondays;
+exports.timeMonth = timeMonth;
+exports.timeMonths = timeMonths;
+exports.timeSaturday = timeSaturday;
+exports.timeSaturdays = timeSaturdays;
+exports.timeSecond = second;
+exports.timeSeconds = seconds;
+exports.timeSunday = timeSunday;
+exports.timeSundays = timeSundays;
+exports.timeThursday = timeThursday;
+exports.timeThursdays = timeThursdays;
+exports.timeTickInterval = timeTickInterval;
+exports.timeTicks = timeTicks;
+exports.timeTuesday = timeTuesday;
+exports.timeTuesdays = timeTuesdays;
+exports.timeWednesday = timeWednesday;
+exports.timeWednesdays = timeWednesdays;
+exports.timeWeek = timeSunday;
+exports.timeWeeks = timeSundays;
+exports.timeYear = timeYear;
+exports.timeYears = timeYears;
+exports.unixDay = unixDay;
+exports.unixDays = unixDays;
+exports.utcDay = utcDay;
+exports.utcDays = utcDays;
+exports.utcFriday = utcFriday;
+exports.utcFridays = utcFridays;
+exports.utcHour = utcHour;
+exports.utcHours = utcHours;
+exports.utcMillisecond = millisecond;
+exports.utcMilliseconds = milliseconds;
+exports.utcMinute = utcMinute;
+exports.utcMinutes = utcMinutes;
+exports.utcMonday = utcMonday;
+exports.utcMondays = utcMondays;
+exports.utcMonth = utcMonth;
+exports.utcMonths = utcMonths;
+exports.utcSaturday = utcSaturday;
+exports.utcSaturdays = utcSaturdays;
+exports.utcSecond = second;
+exports.utcSeconds = seconds;
+exports.utcSunday = utcSunday;
+exports.utcSundays = utcSundays;
+exports.utcThursday = utcThursday;
+exports.utcThursdays = utcThursdays;
+exports.utcTickInterval = utcTickInterval;
+exports.utcTicks = utcTicks;
+exports.utcTuesday = utcTuesday;
+exports.utcTuesdays = utcTuesdays;
+exports.utcWednesday = utcWednesday;
+exports.utcWednesdays = utcWednesdays;
+exports.utcWeek = utcSunday;
+exports.utcWeeks = utcSundays;
+exports.utcYear = utcYear;
+exports.utcYears = utcYears;
+
+}));
Index: node_modules/d3-time/dist/d3-time.min.js
===================================================================
--- node_modules/d3-time/dist/d3-time.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/dist/d3-time.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-time/ v3.1.0 Copyright 2010-2022 Mike Bostock
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3-array")):"function"==typeof define&&define.amd?define(["exports","d3-array"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).d3=e.d3||{},e.d3)}(this,(function(e,t){"use strict";const n=new Date,s=new Date;function r(e,t,a,u){function i(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return i.floor=t=>(e(t=new Date(+t)),t),i.ceil=n=>(e(n=new Date(n-1)),t(n,1),e(n),n),i.round=e=>{const t=i(e),n=i.ceil(e);return e-t<n-e?t:n},i.offset=(e,n)=>(t(e=new Date(+e),null==n?1:Math.floor(n)),e),i.range=(n,s,r)=>{const a=[];if(n=i.ceil(n),r=null==r?1:Math.floor(r),!(n<s&&r>0))return a;let u;do{a.push(u=new Date(+n)),t(n,r),e(n)}while(u<n&&n<s);return a},i.filter=n=>r((t=>{if(t>=t)for(;e(t),!n(t);)t.setTime(t-1)}),((e,s)=>{if(e>=e)if(s<0)for(;++s<=0;)for(;t(e,-1),!n(e););else for(;--s>=0;)for(;t(e,1),!n(e););})),a&&(i.count=(t,r)=>(n.setTime(+t),s.setTime(+r),e(n),e(s),Math.floor(a(n,s))),i.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?i.filter(u?t=>u(t)%e==0:t=>i.count(0,t)%e==0):i:null)),i}const a=r((()=>{}),((e,t)=>{e.setTime(+e+t)}),((e,t)=>t-e));a.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?r((t=>{t.setTime(Math.floor(t/e)*e)}),((t,n)=>{t.setTime(+t+n*e)}),((t,n)=>(n-t)/e)):a:null);const u=a.range,i=1e3,o=6e4,l=36e5,c=864e5,g=6048e5,T=2592e6,d=31536e6,f=r((e=>{e.setTime(e-e.getMilliseconds())}),((e,t)=>{e.setTime(+e+t*i)}),((e,t)=>(t-e)/i),(e=>e.getUTCSeconds())),m=f.range,y=r((e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*i)}),((e,t)=>{e.setTime(+e+t*o)}),((e,t)=>(t-e)/o),(e=>e.getMinutes())),M=y.range,h=r((e=>{e.setUTCSeconds(0,0)}),((e,t)=>{e.setTime(+e+t*o)}),((e,t)=>(t-e)/o),(e=>e.getUTCMinutes())),C=h.range,U=r((e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*i-e.getMinutes()*o)}),((e,t)=>{e.setTime(+e+t*l)}),((e,t)=>(t-e)/l),(e=>e.getHours())),D=U.range,F=r((e=>{e.setUTCMinutes(0,0,0)}),((e,t)=>{e.setTime(+e+t*l)}),((e,t)=>(t-e)/l),(e=>e.getUTCHours())),Y=F.range,S=r((e=>e.setHours(0,0,0,0)),((e,t)=>e.setDate(e.getDate()+t)),((e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*o)/c),(e=>e.getDate()-1)),H=S.range,p=r((e=>{e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+t)}),((e,t)=>(t-e)/c),(e=>e.getUTCDate()-1)),v=p.range,k=r((e=>{e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+t)}),((e,t)=>(t-e)/c),(e=>Math.floor(e/c))),w=k.range;function W(e){return r((t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)}),((e,t)=>{e.setDate(e.getDate()+7*t)}),((e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*o)/g))}const x=W(0),b=W(1),z=W(2),O=W(3),I=W(4),j=W(5),q=W(6),A=x.range,B=b.range,E=z.range,G=O.range,J=I.range,K=j.range,L=q.range;function N(e){return r((t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+7*t)}),((e,t)=>(t-e)/g))}const P=N(0),Q=N(1),R=N(2),V=N(3),X=N(4),Z=N(5),$=N(6),_=P.range,ee=Q.range,te=R.range,ne=V.range,se=X.range,re=Z.range,ae=$.range,ue=r((e=>{e.setDate(1),e.setHours(0,0,0,0)}),((e,t)=>{e.setMonth(e.getMonth()+t)}),((e,t)=>t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())),(e=>e.getMonth())),ie=ue.range,oe=r((e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)}),((e,t)=>t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())),(e=>e.getUTCMonth())),le=oe.range,ce=r((e=>{e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,t)=>{e.setFullYear(e.getFullYear()+t)}),((e,t)=>t.getFullYear()-e.getFullYear()),(e=>e.getFullYear()));ce.every=e=>isFinite(e=Math.floor(e))&&e>0?r((t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,n)=>{t.setFullYear(t.getFullYear()+n*e)})):null;const ge=ce.range,Te=r((e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)}),((e,t)=>t.getUTCFullYear()-e.getUTCFullYear()),(e=>e.getUTCFullYear()));Te.every=e=>isFinite(e=Math.floor(e))&&e>0?r((t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)})):null;const de=Te.range;function fe(e,n,s,r,u,m){const y=[[f,1,i],[f,5,5e3],[f,15,15e3],[f,30,3e4],[m,1,o],[m,5,3e5],[m,15,9e5],[m,30,18e5],[u,1,l],[u,3,108e5],[u,6,216e5],[u,12,432e5],[r,1,c],[r,2,1728e5],[s,1,g],[n,1,T],[n,3,7776e6],[e,1,d]];function M(n,s,r){const u=Math.abs(s-n)/r,i=t.bisector((([,,e])=>e)).right(y,u);if(i===y.length)return e.every(t.tickStep(n/d,s/d,r));if(0===i)return a.every(Math.max(t.tickStep(n,s,r),1));const[o,l]=y[u/y[i-1][2]<y[i][2]/u?i-1:i];return o.every(l)}return[function(e,t,n){const s=t<e;s&&([e,t]=[t,e]);const r=n&&"function"==typeof n.range?n:M(e,t,n),a=r?r.range(e,+t+1):[];return s?a.reverse():a},M]}const[me,ye]=fe(Te,oe,P,k,F,h),[Me,he]=fe(ce,ue,x,S,U,y);e.timeDay=S,e.timeDays=H,e.timeFriday=j,e.timeFridays=K,e.timeHour=U,e.timeHours=D,e.timeInterval=r,e.timeMillisecond=a,e.timeMilliseconds=u,e.timeMinute=y,e.timeMinutes=M,e.timeMonday=b,e.timeMondays=B,e.timeMonth=ue,e.timeMonths=ie,e.timeSaturday=q,e.timeSaturdays=L,e.timeSecond=f,e.timeSeconds=m,e.timeSunday=x,e.timeSundays=A,e.timeThursday=I,e.timeThursdays=J,e.timeTickInterval=he,e.timeTicks=Me,e.timeTuesday=z,e.timeTuesdays=E,e.timeWednesday=O,e.timeWednesdays=G,e.timeWeek=x,e.timeWeeks=A,e.timeYear=ce,e.timeYears=ge,e.unixDay=k,e.unixDays=w,e.utcDay=p,e.utcDays=v,e.utcFriday=Z,e.utcFridays=re,e.utcHour=F,e.utcHours=Y,e.utcMillisecond=a,e.utcMilliseconds=u,e.utcMinute=h,e.utcMinutes=C,e.utcMonday=Q,e.utcMondays=ee,e.utcMonth=oe,e.utcMonths=le,e.utcSaturday=$,e.utcSaturdays=ae,e.utcSecond=f,e.utcSeconds=m,e.utcSunday=P,e.utcSundays=_,e.utcThursday=X,e.utcThursdays=se,e.utcTickInterval=ye,e.utcTicks=me,e.utcTuesday=R,e.utcTuesdays=te,e.utcWednesday=V,e.utcWednesdays=ne,e.utcWeek=P,e.utcWeeks=_,e.utcYear=Te,e.utcYears=de}));
Index: node_modules/d3-time/package.json
===================================================================
--- node_modules/d3-time/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+{
+  "name": "d3-time",
+  "version": "3.1.0",
+  "description": "A calculator for humanity’s peculiar conventions of time.",
+  "homepage": "https://d3js.org/d3-time/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-time.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "time",
+    "interval",
+    "calendar"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-time.min.js",
+  "unpkg": "dist/d3-time.min.js",
+  "exports": {
+    "umd": "./dist/d3-time.min.js",
+    "default": "./src/index.js"
+  },
+  "sideEffects": false,
+  "dependencies": {
+    "d3-array": "2 - 3"
+  },
+  "devDependencies": {
+    "eslint": "8",
+    "mocha": "10",
+    "rollup": "3",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "TZ=America/Los_Angeles mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-time/src/day.js
===================================================================
--- node_modules/d3-time/src/day.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/day.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import {timeInterval} from "./interval.js";
+import {durationDay, durationMinute} from "./duration.js";
+
+export const timeDay = timeInterval(
+  date => date.setHours(0, 0, 0, 0),
+  (date, step) => date.setDate(date.getDate() + step),
+  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,
+  date => date.getDate() - 1
+);
+
+export const timeDays = timeDay.range;
+
+export const utcDay = timeInterval((date) => {
+  date.setUTCHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setUTCDate(date.getUTCDate() + step);
+}, (start, end) => {
+  return (end - start) / durationDay;
+}, (date) => {
+  return date.getUTCDate() - 1;
+});
+
+export const utcDays = utcDay.range;
+
+export const unixDay = timeInterval((date) => {
+  date.setUTCHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setUTCDate(date.getUTCDate() + step);
+}, (start, end) => {
+  return (end - start) / durationDay;
+}, (date) => {
+  return Math.floor(date / durationDay);
+});
+
+export const unixDays = unixDay.range;
Index: node_modules/d3-time/src/duration.js
===================================================================
--- node_modules/d3-time/src/duration.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/duration.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+export const durationSecond = 1000;
+export const durationMinute = durationSecond * 60;
+export const durationHour = durationMinute * 60;
+export const durationDay = durationHour * 24;
+export const durationWeek = durationDay * 7;
+export const durationMonth = durationDay * 30;
+export const durationYear = durationDay * 365;
Index: node_modules/d3-time/src/hour.js
===================================================================
--- node_modules/d3-time/src/hour.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/hour.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import {timeInterval} from "./interval.js";
+import {durationHour, durationMinute, durationSecond} from "./duration.js";
+
+export const timeHour = timeInterval((date) => {
+  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
+}, (date, step) => {
+  date.setTime(+date + step * durationHour);
+}, (start, end) => {
+  return (end - start) / durationHour;
+}, (date) => {
+  return date.getHours();
+});
+
+export const timeHours = timeHour.range;
+
+export const utcHour = timeInterval((date) => {
+  date.setUTCMinutes(0, 0, 0);
+}, (date, step) => {
+  date.setTime(+date + step * durationHour);
+}, (start, end) => {
+  return (end - start) / durationHour;
+}, (date) => {
+  return date.getUTCHours();
+});
+
+export const utcHours = utcHour.range;
Index: node_modules/d3-time/src/index.js
===================================================================
--- node_modules/d3-time/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,96 @@
+export {
+  timeInterval
+} from "./interval.js";
+
+export {
+  millisecond as utcMillisecond,
+  milliseconds as utcMilliseconds,
+  millisecond as timeMillisecond,
+  milliseconds as timeMilliseconds
+} from "./millisecond.js";
+
+export {
+  second as utcSecond,
+  seconds as utcSeconds,
+  second as timeSecond,
+  seconds as timeSeconds
+} from "./second.js";
+
+export {
+  timeMinute,
+  timeMinutes,
+  utcMinute,
+  utcMinutes
+} from "./minute.js";
+
+export {
+  timeHour,
+  timeHours,
+  utcHour,
+  utcHours
+} from "./hour.js";
+
+export {
+  timeDay,
+  timeDays,
+  utcDay,
+  utcDays,
+  unixDay,
+  unixDays
+} from "./day.js";
+
+export {
+  timeSunday as timeWeek,
+  timeSundays as timeWeeks,
+  timeSunday,
+  timeSundays,
+  timeMonday,
+  timeMondays,
+  timeTuesday,
+  timeTuesdays,
+  timeWednesday,
+  timeWednesdays,
+  timeThursday,
+  timeThursdays,
+  timeFriday,
+  timeFridays,
+  timeSaturday,
+  timeSaturdays,
+  utcSunday as utcWeek,
+  utcSundays as utcWeeks,
+  utcSunday,
+  utcSundays,
+  utcMonday,
+  utcMondays,
+  utcTuesday,
+  utcTuesdays,
+  utcWednesday,
+  utcWednesdays,
+  utcThursday,
+  utcThursdays,
+  utcFriday,
+  utcFridays,
+  utcSaturday,
+  utcSaturdays
+} from "./week.js";
+
+export {
+  timeMonth,
+  timeMonths,
+  utcMonth,
+  utcMonths
+} from "./month.js";
+
+export {
+  timeYear,
+  timeYears,
+  utcYear,
+  utcYears
+} from "./year.js";
+
+export {
+  utcTicks,
+  utcTickInterval,
+  timeTicks,
+  timeTickInterval
+} from "./ticks.js";
Index: node_modules/d3-time/src/interval.js
===================================================================
--- node_modules/d3-time/src/interval.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/interval.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+const t0 = new Date, t1 = new Date;
+
+export function timeInterval(floori, offseti, count, field) {
+
+  function interval(date) {
+    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;
+  }
+
+  interval.floor = (date) => {
+    return floori(date = new Date(+date)), date;
+  };
+
+  interval.ceil = (date) => {
+    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
+  };
+
+  interval.round = (date) => {
+    const d0 = interval(date), d1 = interval.ceil(date);
+    return date - d0 < d1 - date ? d0 : d1;
+  };
+
+  interval.offset = (date, step) => {
+    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
+  };
+
+  interval.range = (start, stop, step) => {
+    const range = [];
+    start = interval.ceil(start);
+    step = step == null ? 1 : Math.floor(step);
+    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
+    let previous;
+    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);
+    while (previous < start && start < stop);
+    return range;
+  };
+
+  interval.filter = (test) => {
+    return timeInterval((date) => {
+      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
+    }, (date, step) => {
+      if (date >= date) {
+        if (step < 0) while (++step <= 0) {
+          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
+        } else while (--step >= 0) {
+          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
+        }
+      }
+    });
+  };
+
+  if (count) {
+    interval.count = (start, end) => {
+      t0.setTime(+start), t1.setTime(+end);
+      floori(t0), floori(t1);
+      return Math.floor(count(t0, t1));
+    };
+
+    interval.every = (step) => {
+      step = Math.floor(step);
+      return !isFinite(step) || !(step > 0) ? null
+          : !(step > 1) ? interval
+          : interval.filter(field
+              ? (d) => field(d) % step === 0
+              : (d) => interval.count(0, d) % step === 0);
+    };
+  }
+
+  return interval;
+}
Index: node_modules/d3-time/src/millisecond.js
===================================================================
--- node_modules/d3-time/src/millisecond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/millisecond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import {timeInterval} from "./interval.js";
+
+export const millisecond = timeInterval(() => {
+  // noop
+}, (date, step) => {
+  date.setTime(+date + step);
+}, (start, end) => {
+  return end - start;
+});
+
+// An optimized implementation for this simple case.
+millisecond.every = (k) => {
+  k = Math.floor(k);
+  if (!isFinite(k) || !(k > 0)) return null;
+  if (!(k > 1)) return millisecond;
+  return timeInterval((date) => {
+    date.setTime(Math.floor(date / k) * k);
+  }, (date, step) => {
+    date.setTime(+date + step * k);
+  }, (start, end) => {
+    return (end - start) / k;
+  });
+};
+
+export const milliseconds = millisecond.range;
Index: node_modules/d3-time/src/minute.js
===================================================================
--- node_modules/d3-time/src/minute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/minute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import {timeInterval} from "./interval.js";
+import {durationMinute, durationSecond} from "./duration.js";
+
+export const timeMinute = timeInterval((date) => {
+  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
+}, (date, step) => {
+  date.setTime(+date + step * durationMinute);
+}, (start, end) => {
+  return (end - start) / durationMinute;
+}, (date) => {
+  return date.getMinutes();
+});
+
+export const timeMinutes = timeMinute.range;
+
+export const utcMinute = timeInterval((date) => {
+  date.setUTCSeconds(0, 0);
+}, (date, step) => {
+  date.setTime(+date + step * durationMinute);
+}, (start, end) => {
+  return (end - start) / durationMinute;
+}, (date) => {
+  return date.getUTCMinutes();
+});
+
+export const utcMinutes = utcMinute.range;
Index: node_modules/d3-time/src/month.js
===================================================================
--- node_modules/d3-time/src/month.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/month.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import {timeInterval} from "./interval.js";
+
+export const timeMonth = timeInterval((date) => {
+  date.setDate(1);
+  date.setHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setMonth(date.getMonth() + step);
+}, (start, end) => {
+  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
+}, (date) => {
+  return date.getMonth();
+});
+
+export const timeMonths = timeMonth.range;
+
+export const utcMonth = timeInterval((date) => {
+  date.setUTCDate(1);
+  date.setUTCHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setUTCMonth(date.getUTCMonth() + step);
+}, (start, end) => {
+  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
+}, (date) => {
+  return date.getUTCMonth();
+});
+
+export const utcMonths = utcMonth.range;
Index: node_modules/d3-time/src/second.js
===================================================================
--- node_modules/d3-time/src/second.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/second.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import {timeInterval} from "./interval.js";
+import {durationSecond} from "./duration.js";
+
+export const second = timeInterval((date) => {
+  date.setTime(date - date.getMilliseconds());
+}, (date, step) => {
+  date.setTime(+date + step * durationSecond);
+}, (start, end) => {
+  return (end - start) / durationSecond;
+}, (date) => {
+  return date.getUTCSeconds();
+});
+
+export const seconds = second.range;
Index: node_modules/d3-time/src/ticks.js
===================================================================
--- node_modules/d3-time/src/ticks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/ticks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+import {bisector, tickStep} from "d3-array";
+import {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from "./duration.js";
+import {millisecond} from "./millisecond.js";
+import {second} from "./second.js";
+import {timeMinute, utcMinute} from "./minute.js";
+import {timeHour, utcHour} from "./hour.js";
+import {timeDay, unixDay} from "./day.js";
+import {timeSunday, utcSunday} from "./week.js";
+import {timeMonth, utcMonth} from "./month.js";
+import {timeYear, utcYear} from "./year.js";
+
+function ticker(year, month, week, day, hour, minute) {
+
+  const tickIntervals = [
+    [second,  1,      durationSecond],
+    [second,  5,  5 * durationSecond],
+    [second, 15, 15 * durationSecond],
+    [second, 30, 30 * durationSecond],
+    [minute,  1,      durationMinute],
+    [minute,  5,  5 * durationMinute],
+    [minute, 15, 15 * durationMinute],
+    [minute, 30, 30 * durationMinute],
+    [  hour,  1,      durationHour  ],
+    [  hour,  3,  3 * durationHour  ],
+    [  hour,  6,  6 * durationHour  ],
+    [  hour, 12, 12 * durationHour  ],
+    [   day,  1,      durationDay   ],
+    [   day,  2,  2 * durationDay   ],
+    [  week,  1,      durationWeek  ],
+    [ month,  1,      durationMonth ],
+    [ month,  3,  3 * durationMonth ],
+    [  year,  1,      durationYear  ]
+  ];
+
+  function ticks(start, stop, count) {
+    const reverse = stop < start;
+    if (reverse) [start, stop] = [stop, start];
+    const interval = count && typeof count.range === "function" ? count : tickInterval(start, stop, count);
+    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop
+    return reverse ? ticks.reverse() : ticks;
+  }
+
+  function tickInterval(start, stop, count) {
+    const target = Math.abs(stop - start) / count;
+    const i = bisector(([,, step]) => step).right(tickIntervals, target);
+    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));
+    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));
+    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
+    return t.every(step);
+  }
+
+  return [ticks, tickInterval];
+}
+
+const [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);
+const [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);
+
+export {utcTicks, utcTickInterval, timeTicks, timeTickInterval};
Index: node_modules/d3-time/src/week.js
===================================================================
--- node_modules/d3-time/src/week.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/week.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+import {timeInterval} from "./interval.js";
+import {durationMinute, durationWeek} from "./duration.js";
+
+function timeWeekday(i) {
+  return timeInterval((date) => {
+    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
+    date.setHours(0, 0, 0, 0);
+  }, (date, step) => {
+    date.setDate(date.getDate() + step * 7);
+  }, (start, end) => {
+    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
+  });
+}
+
+export const timeSunday = timeWeekday(0);
+export const timeMonday = timeWeekday(1);
+export const timeTuesday = timeWeekday(2);
+export const timeWednesday = timeWeekday(3);
+export const timeThursday = timeWeekday(4);
+export const timeFriday = timeWeekday(5);
+export const timeSaturday = timeWeekday(6);
+
+export const timeSundays = timeSunday.range;
+export const timeMondays = timeMonday.range;
+export const timeTuesdays = timeTuesday.range;
+export const timeWednesdays = timeWednesday.range;
+export const timeThursdays = timeThursday.range;
+export const timeFridays = timeFriday.range;
+export const timeSaturdays = timeSaturday.range;
+
+function utcWeekday(i) {
+  return timeInterval((date) => {
+    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
+    date.setUTCHours(0, 0, 0, 0);
+  }, (date, step) => {
+    date.setUTCDate(date.getUTCDate() + step * 7);
+  }, (start, end) => {
+    return (end - start) / durationWeek;
+  });
+}
+
+export const utcSunday = utcWeekday(0);
+export const utcMonday = utcWeekday(1);
+export const utcTuesday = utcWeekday(2);
+export const utcWednesday = utcWeekday(3);
+export const utcThursday = utcWeekday(4);
+export const utcFriday = utcWeekday(5);
+export const utcSaturday = utcWeekday(6);
+
+export const utcSundays = utcSunday.range;
+export const utcMondays = utcMonday.range;
+export const utcTuesdays = utcTuesday.range;
+export const utcWednesdays = utcWednesday.range;
+export const utcThursdays = utcThursday.range;
+export const utcFridays = utcFriday.range;
+export const utcSaturdays = utcSaturday.range;
Index: node_modules/d3-time/src/year.js
===================================================================
--- node_modules/d3-time/src/year.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-time/src/year.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+import {timeInterval} from "./interval.js";
+
+export const timeYear = timeInterval((date) => {
+  date.setMonth(0, 1);
+  date.setHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setFullYear(date.getFullYear() + step);
+}, (start, end) => {
+  return end.getFullYear() - start.getFullYear();
+}, (date) => {
+  return date.getFullYear();
+});
+
+// An optimized implementation for this simple case.
+timeYear.every = (k) => {
+  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {
+    date.setFullYear(Math.floor(date.getFullYear() / k) * k);
+    date.setMonth(0, 1);
+    date.setHours(0, 0, 0, 0);
+  }, (date, step) => {
+    date.setFullYear(date.getFullYear() + step * k);
+  });
+};
+
+export const timeYears = timeYear.range;
+
+export const utcYear = timeInterval((date) => {
+  date.setUTCMonth(0, 1);
+  date.setUTCHours(0, 0, 0, 0);
+}, (date, step) => {
+  date.setUTCFullYear(date.getUTCFullYear() + step);
+}, (start, end) => {
+  return end.getUTCFullYear() - start.getUTCFullYear();
+}, (date) => {
+  return date.getUTCFullYear();
+});
+
+// An optimized implementation for this simple case.
+utcYear.every = (k) => {
+  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {
+    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
+    date.setUTCMonth(0, 1);
+    date.setUTCHours(0, 0, 0, 0);
+  }, (date, step) => {
+    date.setUTCFullYear(date.getUTCFullYear() + step * k);
+  });
+};
+
+export const utcYears = utcYear.range;
Index: node_modules/d3-timer/LICENSE
===================================================================
--- node_modules/d3-timer/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-timer/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/d3-timer/README.md
===================================================================
--- node_modules/d3-timer/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-timer/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,87 @@
+# d3-timer
+
+This module provides an efficient queue capable of managing thousands of concurrent animations, while guaranteeing consistent, synchronized timing with concurrent or staged animations. Internally, it uses [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) for fluid animation (if available), switching to [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) for delays longer than 24ms.
+
+## Installing
+
+If you use npm, `npm install d3-timer`. You can also download the [latest release on GitHub](https://github.com/d3/d3-timer/releases/latest). For vanilla HTML in modern browsers, import d3-timer from Skypack:
+
+```html
+<script type="module">
+
+import {timer} from "https://cdn.skypack.dev/d3-timer@3";
+
+const t = timer(callback);
+
+</script>
+```
+
+For legacy environments, you can load d3-timer’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:
+
+```html
+<script src="https://cdn.jsdelivr.net/npm/d3-timer@3"></script>
+<script>
+
+const timer = d3.timer(callback);
+
+</script>
+```
+
+## API Reference
+
+<a name="now" href="#now">#</a> d3.<b>now</b>() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js "Source")
+
+Returns the current time as defined by [performance.now](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) if available, and [Date.now](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now) if not. The current time is updated at the start of a frame; it is thus consistent during the frame, and any timers scheduled during the same frame will be synchronized. If this method is called outside of a frame, such as in response to a user event, the current time is calculated and then fixed until the next frame, again ensuring consistent timing during event handling.
+
+<a name="timer" href="#timer">#</a> d3.<b>timer</b>(<i>callback</i>[, <i>delay</i>[, <i>time</i>]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js "Source")
+
+Schedules a new timer, invoking the specified *callback* repeatedly until the timer is [stopped](#timer_stop). An optional numeric *delay* in milliseconds may be specified to invoke the given *callback* after a delay; if *delay* is not specified, it defaults to zero. The delay is relative to the specified *time* in milliseconds; if *time* is not specified, it defaults to [now](#now).
+
+The *callback* is passed the (apparent) *elapsed* time since the timer became active. For example:
+
+```js
+const t = d3.timer((elapsed) => {
+  console.log(elapsed);
+  if (elapsed > 200) t.stop();
+}, 150);
+```
+
+This produces roughly the following console output:
+
+```
+3
+25
+48
+65
+85
+106
+125
+146
+167
+189
+209
+```
+
+(The exact values may vary depending on your JavaScript runtime and what else your computer is doing.) Note that the first *elapsed* time is 3ms: this is the elapsed time since the timer started, not since the timer was scheduled. Here the timer started 150ms after it was scheduled due to the specified delay. The apparent *elapsed* time may be less than the true *elapsed* time if the page is backgrounded and [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) is paused; in the background, apparent time is frozen.
+
+If [timer](#timer) is called within the callback of another timer, the new timer callback (if eligible as determined by the specified *delay* and *time*) will be invoked immediately at the end of the current frame, rather than waiting until the next frame. Within a frame, timer callbacks are guaranteed to be invoked in the order they were scheduled, regardless of their start time.
+
+<a name="timer_restart" href="#timer_restart">#</a> <i>timer</i>.<b>restart</b>(<i>callback</i>[, <i>delay</i>[, <i>time</i>]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js "Source")
+
+Restart a timer with the specified *callback* and optional *delay* and *time*. This is equivalent to stopping this timer and creating a new timer with the specified arguments, although this timer retains the original invocation priority.
+
+<a name="timer_stop" href="#timer_stop">#</a> <i>timer</i>.<b>stop</b>() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js "Source")
+
+Stops this timer, preventing subsequent callbacks. This method has no effect if the timer has already stopped.
+
+<a name="timerFlush" href="#timerFlush">#</a> d3.<b>timerFlush</b>() [<>](https://github.com/d3/d3-timer/blob/master/src/timer.js "Source")
+
+Immediately invoke any eligible timer callbacks. Note that zero-delay timers are normally first executed after one frame (~17ms). This can cause a brief flicker because the browser renders the page twice: once at the end of the first event loop, then again immediately on the first timer callback. By flushing the timer queue at the end of the first event loop, you can run any zero-delay timers immediately and avoid the flicker.
+
+<a name="timeout" href="#timeout">#</a> d3.<b>timeout</b>(<i>callback</i>[, <i>delay</i>[, <i>time</i>]]) [<>](https://github.com/d3/d3-timer/blob/master/src/timeout.js "Source")
+
+Like [timer](#timer), except the timer automatically [stops](#timer_stop) on its first callback. A suitable replacement for [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout) that is guaranteed to not run in the background. The *callback* is passed the elapsed time.
+
+<a name="interval" href="#interval">#</a> d3.<b>interval</b>(<i>callback</i>[, <i>delay</i>[, <i>time</i>]]) [<>](https://github.com/d3/d3-timer/blob/master/src/interval.js "Source")
+
+Like [timer](#timer), except the *callback* is invoked only every *delay* milliseconds; if *delay* is not specified, this is equivalent to [timer](#timer). A suitable replacement for [setInterval](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval) that is guaranteed to not run in the background. The *callback* is passed the elapsed time.
Index: node_modules/d3-timer/dist/d3-timer.js
===================================================================
--- node_modules/d3-timer/dist/d3-timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-timer/dist/d3-timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,153 @@
+// https://d3js.org/d3-timer/ v3.0.1 Copyright 2010-2021 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+typeof define === 'function' && define.amd ? define(['exports'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));
+}(this, (function (exports) { 'use strict';
+
+var frame = 0, // is an animation frame pending?
+    timeout$1 = 0, // is a timeout pending?
+    interval$1 = 0, // are any timers active?
+    pokeDelay = 1000, // how frequently we check for clock skew
+    taskHead,
+    taskTail,
+    clockLast = 0,
+    clockNow = 0,
+    clockSkew = 0,
+    clock = typeof performance === "object" && performance.now ? performance : Date,
+    setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
+
+function now() {
+  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+}
+
+function clearNow() {
+  clockNow = 0;
+}
+
+function Timer() {
+  this._call =
+  this._time =
+  this._next = null;
+}
+
+Timer.prototype = timer.prototype = {
+  constructor: Timer,
+  restart: function(callback, delay, time) {
+    if (typeof callback !== "function") throw new TypeError("callback is not a function");
+    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+    if (!this._next && taskTail !== this) {
+      if (taskTail) taskTail._next = this;
+      else taskHead = this;
+      taskTail = this;
+    }
+    this._call = callback;
+    this._time = time;
+    sleep();
+  },
+  stop: function() {
+    if (this._call) {
+      this._call = null;
+      this._time = Infinity;
+      sleep();
+    }
+  }
+};
+
+function timer(callback, delay, time) {
+  var t = new Timer;
+  t.restart(callback, delay, time);
+  return t;
+}
+
+function timerFlush() {
+  now(); // Get the current time, if not already set.
+  ++frame; // Pretend we’ve set an alarm, if we haven’t already.
+  var t = taskHead, e;
+  while (t) {
+    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);
+    t = t._next;
+  }
+  --frame;
+}
+
+function wake() {
+  clockNow = (clockLast = clock.now()) + clockSkew;
+  frame = timeout$1 = 0;
+  try {
+    timerFlush();
+  } finally {
+    frame = 0;
+    nap();
+    clockNow = 0;
+  }
+}
+
+function poke() {
+  var now = clock.now(), delay = now - clockLast;
+  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
+}
+
+function nap() {
+  var t0, t1 = taskHead, t2, time = Infinity;
+  while (t1) {
+    if (t1._call) {
+      if (time > t1._time) time = t1._time;
+      t0 = t1, t1 = t1._next;
+    } else {
+      t2 = t1._next, t1._next = null;
+      t1 = t0 ? t0._next = t2 : taskHead = t2;
+    }
+  }
+  taskTail = t0;
+  sleep(time);
+}
+
+function sleep(time) {
+  if (frame) return; // Soonest alarm already set, or will be.
+  if (timeout$1) timeout$1 = clearTimeout(timeout$1);
+  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
+  if (delay > 24) {
+    if (time < Infinity) timeout$1 = setTimeout(wake, time - clock.now() - clockSkew);
+    if (interval$1) interval$1 = clearInterval(interval$1);
+  } else {
+    if (!interval$1) clockLast = clock.now(), interval$1 = setInterval(poke, pokeDelay);
+    frame = 1, setFrame(wake);
+  }
+}
+
+function timeout(callback, delay, time) {
+  var t = new Timer;
+  delay = delay == null ? 0 : +delay;
+  t.restart(elapsed => {
+    t.stop();
+    callback(elapsed + delay);
+  }, delay, time);
+  return t;
+}
+
+function interval(callback, delay, time) {
+  var t = new Timer, total = delay;
+  if (delay == null) return t.restart(callback, delay, time), t;
+  t._restart = t.restart;
+  t.restart = function(callback, delay, time) {
+    delay = +delay, time = time == null ? now() : +time;
+    t._restart(function tick(elapsed) {
+      elapsed += total;
+      t._restart(tick, total += delay, time);
+      callback(elapsed);
+    }, delay, time);
+  };
+  t.restart(callback, delay, time);
+  return t;
+}
+
+exports.interval = interval;
+exports.now = now;
+exports.timeout = timeout;
+exports.timer = timer;
+exports.timerFlush = timerFlush;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
Index: node_modules/d3-timer/dist/d3-timer.min.js
===================================================================
--- node_modules/d3-timer/dist/d3-timer.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-timer/dist/d3-timer.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://d3js.org/d3-timer/ v3.0.1 Copyright 2010-2021 Mike Bostock
+!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).d3=t.d3||{})}(this,(function(t){"use strict";var n,e,o=0,i=0,r=0,l=0,u=0,a=0,s="object"==typeof performance&&performance.now?performance:Date,c="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function f(){return u||(c(_),u=s.now()+a)}function _(){u=0}function m(){this._call=this._time=this._next=null}function p(t,n,e){var o=new m;return o.restart(t,n,e),o}function w(){f(),++o;for(var t,e=n;e;)(t=u-e._time)>=0&&e._call.call(void 0,t),e=e._next;--o}function d(){u=(l=s.now())+a,o=i=0;try{w()}finally{o=0,function(){var t,o,i=n,r=1/0;for(;i;)i._call?(r>i._time&&(r=i._time),t=i,i=i._next):(o=i._next,i._next=null,i=t?t._next=o:n=o);e=t,y(r)}(),u=0}}function h(){var t=s.now(),n=t-l;n>1e3&&(a-=n,l=t)}function y(t){o||(i&&(i=clearTimeout(i)),t-u>24?(t<1/0&&(i=setTimeout(d,t-s.now()-a)),r&&(r=clearInterval(r))):(r||(l=s.now(),r=setInterval(h,1e3)),o=1,c(d)))}m.prototype=p.prototype={constructor:m,restart:function(t,o,i){if("function"!=typeof t)throw new TypeError("callback is not a function");i=(null==i?f():+i)+(null==o?0:+o),this._next||e===this||(e?e._next=this:n=this,e=this),this._call=t,this._time=i,y()},stop:function(){this._call&&(this._call=null,this._time=1/0,y())}},t.interval=function(t,n,e){var o=new m,i=n;return null==n?(o.restart(t,n,e),o):(o._restart=o.restart,o.restart=function(t,n,e){n=+n,e=null==e?f():+e,o._restart((function r(l){l+=i,o._restart(r,i+=n,e),t(l)}),n,e)},o.restart(t,n,e),o)},t.now=f,t.timeout=function(t,n,e){var o=new m;return n=null==n?0:+n,o.restart((e=>{o.stop(),t(e+n)}),n,e),o},t.timer=p,t.timerFlush=w,Object.defineProperty(t,"__esModule",{value:!0})}));
Index: node_modules/d3-timer/package.json
===================================================================
--- node_modules/d3-timer/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-timer/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+{
+  "name": "d3-timer",
+  "version": "3.0.1",
+  "description": "An efficient queue capable of managing thousands of concurrent animations.",
+  "homepage": "https://d3js.org/d3-timer/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/d3/d3-timer.git"
+  },
+  "keywords": [
+    "d3",
+    "d3-module",
+    "timer",
+    "transition",
+    "animation",
+    "requestAnimationFrame",
+    "setTimeout",
+    "setInterval"
+  ],
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "http://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "module": "src/index.js",
+  "main": "src/index.js",
+  "jsdelivr": "dist/d3-timer.min.js",
+  "unpkg": "dist/d3-timer.min.js",
+  "exports": {
+    "umd": "./dist/d3-timer.min.js",
+    "default": "./src/index.js"
+  },
+  "sideEffects": false,
+  "devDependencies": {
+    "eslint": "7",
+    "mocha": "8",
+    "rollup": "2",
+    "rollup-plugin-terser": "7"
+  },
+  "scripts": {
+    "test": "mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/d3-timer/src/index.js
===================================================================
--- node_modules/d3-timer/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-timer/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+export {
+  now,
+  timer,
+  timerFlush
+} from "./timer.js";
+
+export {
+  default as timeout
+} from "./timeout.js";
+
+export {
+  default as interval
+} from "./interval.js";
Index: node_modules/d3-timer/src/interval.js
===================================================================
--- node_modules/d3-timer/src/interval.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-timer/src/interval.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import {Timer, now} from "./timer.js";
+
+export default function(callback, delay, time) {
+  var t = new Timer, total = delay;
+  if (delay == null) return t.restart(callback, delay, time), t;
+  t._restart = t.restart;
+  t.restart = function(callback, delay, time) {
+    delay = +delay, time = time == null ? now() : +time;
+    t._restart(function tick(elapsed) {
+      elapsed += total;
+      t._restart(tick, total += delay, time);
+      callback(elapsed);
+    }, delay, time);
+  }
+  t.restart(callback, delay, time);
+  return t;
+}
Index: node_modules/d3-timer/src/timeout.js
===================================================================
--- node_modules/d3-timer/src/timeout.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-timer/src/timeout.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import {Timer} from "./timer.js";
+
+export default function(callback, delay, time) {
+  var t = new Timer;
+  delay = delay == null ? 0 : +delay;
+  t.restart(elapsed => {
+    t.stop();
+    callback(elapsed + delay);
+  }, delay, time);
+  return t;
+}
Index: node_modules/d3-timer/src/timer.js
===================================================================
--- node_modules/d3-timer/src/timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/d3-timer/src/timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+var frame = 0, // is an animation frame pending?
+    timeout = 0, // is a timeout pending?
+    interval = 0, // are any timers active?
+    pokeDelay = 1000, // how frequently we check for clock skew
+    taskHead,
+    taskTail,
+    clockLast = 0,
+    clockNow = 0,
+    clockSkew = 0,
+    clock = typeof performance === "object" && performance.now ? performance : Date,
+    setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
+
+export function now() {
+  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+}
+
+function clearNow() {
+  clockNow = 0;
+}
+
+export function Timer() {
+  this._call =
+  this._time =
+  this._next = null;
+}
+
+Timer.prototype = timer.prototype = {
+  constructor: Timer,
+  restart: function(callback, delay, time) {
+    if (typeof callback !== "function") throw new TypeError("callback is not a function");
+    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+    if (!this._next && taskTail !== this) {
+      if (taskTail) taskTail._next = this;
+      else taskHead = this;
+      taskTail = this;
+    }
+    this._call = callback;
+    this._time = time;
+    sleep();
+  },
+  stop: function() {
+    if (this._call) {
+      this._call = null;
+      this._time = Infinity;
+      sleep();
+    }
+  }
+};
+
+export function timer(callback, delay, time) {
+  var t = new Timer;
+  t.restart(callback, delay, time);
+  return t;
+}
+
+export function timerFlush() {
+  now(); // Get the current time, if not already set.
+  ++frame; // Pretend we’ve set an alarm, if we haven’t already.
+  var t = taskHead, e;
+  while (t) {
+    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);
+    t = t._next;
+  }
+  --frame;
+}
+
+function wake() {
+  clockNow = (clockLast = clock.now()) + clockSkew;
+  frame = timeout = 0;
+  try {
+    timerFlush();
+  } finally {
+    frame = 0;
+    nap();
+    clockNow = 0;
+  }
+}
+
+function poke() {
+  var now = clock.now(), delay = now - clockLast;
+  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
+}
+
+function nap() {
+  var t0, t1 = taskHead, t2, time = Infinity;
+  while (t1) {
+    if (t1._call) {
+      if (time > t1._time) time = t1._time;
+      t0 = t1, t1 = t1._next;
+    } else {
+      t2 = t1._next, t1._next = null;
+      t1 = t0 ? t0._next = t2 : taskHead = t2;
+    }
+  }
+  taskTail = t0;
+  sleep(time);
+}
+
+function sleep(time) {
+  if (frame) return; // Soonest alarm already set, or will be.
+  if (timeout) timeout = clearTimeout(timeout);
+  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
+  if (delay > 24) {
+    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
+    if (interval) interval = clearInterval(interval);
+  } else {
+    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
+    frame = 1, setFrame(wake);
+  }
+}
Index: node_modules/decimal.js-light/CHANGELOG.md
===================================================================
--- node_modules/decimal.js-light/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,87 @@
+#### 2.5.1
+* 30/09/2020
+* Correct initial `sqrt` estimate.
+
+#### 2.5.0
+* 16/10/2018
+* Add default export to *decimal.d.ts*.
+* Add `Symbol.for('nodejs.util.inspect.custom')` to *decimal.mjs*.
+
+#### 2.4.1
+* 24/05/2018
+* Add `browser` field to *package.json*.
+
+#### 2.4.0
+* 22/05/2018
+* Amend *.mjs* exports.
+* Remove extension from `main` field in *package.json*.
+
+#### 2.3.1
+* 13/11/2017
+* Add constructor properties to typings.
+* Amend `LN10` section of *doc/API.html*.
+
+#### 2.3.0
+* 26/09/2017
+* Add *bignumber.mjs*.
+
+#### 2.2.5
+* 08/09/2017
+* #5 Fix import.
+
+#### 2.2.4
+* 15/08/2017
+* Add TypeScript type declaration file, *decimal.d.ts*
+* Correct `toPositive` and `toNegative` examples
+
+#### 2.2.3
+* 04/05/2017
+* Fix *README* badge
+
+#### 2.2.2
+05/04/2017
+* `Decimal.default` to `Decimal['default']` IE8 issue
+
+#### 2.2.1
+10/03/2017
+* Remove `tonum` from documentation
+
+#### 2.2.0
+10/01/2017
+* Add `exponent` method
+
+#### 2.0.2
+12/12/2016
+* npm publish
+
+#### 2.0.1
+12/12/2016
+* Filename-casing issue
+
+#### 2.0.0
+11/12/2016
+* Make `LN10` configurable at runtime
+* Reduce `LN10` default precision
+* Remove `ceil`, `floor`, `min`, `max` and `truncated`
+* Rename `divToInt` to `idiv`, `toSD` to `tosd`, `toDP` to `todp`, `isInt` to `isint`, `isNeg` to `isneg`, `isPos` to `ispos` and `round` to `toInteger`
+* Rename some test files
+* Add `set` as alias to `config`
+* Support ES6 import shims
+* Add to README
+
+#### 1.0.4
+28/02/2016
+* Add to README
+
+#### 1.0.3
+25/02/2016
+* Add to README
+
+#### 1.0.2
+25/02/2016
+* Correct url
+* Amend .travis.yml as Node.js v0.6 doesn't include `process.hrtime` which is used in testing.
+
+#### 1.0.0
+24/02/2016
+* Initial release
Index: node_modules/decimal.js-light/LICENCE.md
===================================================================
--- node_modules/decimal.js-light/LICENCE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/LICENCE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+The MIT Expat Licence.
+
+Copyright (c) 2020 Michael Mclaughlin
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
Index: node_modules/decimal.js-light/README.md
===================================================================
--- node_modules/decimal.js-light/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,92 @@
+![decimal.js-light](https://raw.githubusercontent.com/MikeMcl/decimal.js-light/gh-pages/decimaljslight.png)
+
+The light version of [decimal.js](https://github.com/MikeMcl/decimal.js/), an arbitrary-precision Decimal type for JavaScript.
+
+[![Build Status](https://travis-ci.org/MikeMcl/decimal.js-light.svg)](https://travis-ci.org/MikeMcl/decimal.js-light)
+
+<br />
+
+This library is the newest of the family of libraries: [bignumber.js](https://github.com/MikeMcl/bignumber.js/), [big.js](https://github.com/MikeMcl/big.js/), [decimal.js](https://github.com/MikeMcl/decimal.js/) and *decimal.js-light*.<br>
+The API is more or less a subset of the API of *decimal.js*.
+
+![API](https://raw.githubusercontent.com/MikeMcl/decimal.js-light/gh-pages/API.png)
+
+__Differences between this library and *decimal.js*__
+
+Size of *decimal.js* minified: 32.1 KB.<br>
+Size of *decimal.js-light* minified: 12.7 KB.
+
+This library does not include `NaN`, `Infinity` or `-0` as legitimate values, or work with values in other bases.
+
+Here, the `Decimal.round` property is just the default rounding mode for `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`. It does not apply to arithmetic operations, which are simply truncated at the required precision.
+
+If rounding is required just apply it explicitly, for example
+
+```js
+x = new Decimal(2);
+y = new Decimal(3);
+
+// decimal.js
+x.dividedBy(y).toString();                       // '0.66666666666666666667'
+
+// decimal.js-light
+x.dividedBy(y).toString();                       // '0.66666666666666666666'
+x.dividedBy(y).toDecimalPlaces(19).toString();   // '0.6666666666666666667'
+```
+
+The `naturalExponential`, `naturalLogarithm`, `logarithm`, and `toPower` methods in this library have by default a limited precision of around 100 digits. This limit can be increased at runtime using the `LN10` (the natural logarithm of ten) configuration object property.
+
+For example, if a maximum precision of 400 digits is required for these operations use
+
+```js
+// 415 digits
+Decimal.set({
+  LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286248633409525465082806756666287369098781689482907208325554680843799894826233198528393505308965377732628846163366222287698219886746543667474404243274365155048934314939391479619404400222105101714174800368808401264708068556774321622835522011480466371565912137345074785694768346361679210180644507064800027'
+});
+```
+
+Also, in this library the `e` property of a Decimal is the base 10000000 exponent, not the base 10 exponent as in *decimal.js*.<br>
+Use the `exponent` method to get the base 10 exponent.
+
+## Quickstart
+
+Browser:
+
+```html
+<script src='path/to/decimal.js-light'></script>
+```
+
+Node package manager:
+
+```shell
+$ npm install --save decimal.js-light
+```
+
+```js
+// Node.js
+var Decimal = require('decimal.js-light');
+
+// Adjust the global configuration if required (these are the defaults)
+Decimal.set({
+  precision: 20,
+  rounding: Decimal.ROUND_HALF_UP,
+  toExpNeg: -7,
+  toExpPos: 21
+});
+
+phi = new Decimal('1.61803398874989484820458683436563811772030917980576');
+
+phi.toFixed(10);    // '1.6180339887'
+
+phi.times(2).minus(1).toPower(2).plus('1e-19').equals(5);    // true
+
+```
+
+See the [documentation](http://mikemcl.github.io/decimal.js-light) for further information.
+
+[TypeScript](https://github.com/Microsoft/TypeScript) type declaration file contributed by [TANAKA Koichi](https://github.com/MugeSo).
+
+
+
+
+
Index: node_modules/decimal.js-light/decimal.d.ts
===================================================================
--- node_modules/decimal.js-light/decimal.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/decimal.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,570 @@
+export default Decimal;
+
+export declare class Decimal {
+    /**
+     * The Decimal constructor and exported function.
+     * Return a new Decimal instance.
+     *
+     * @param value {number|string|Decimal} A numeric value.
+     *
+     */
+    constructor(value: Numeric)
+
+    /**
+     * Return a new Decimal whose value is the absolute value of this Decimal.
+     */
+    absoluteValue(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the absolute value of this Decimal.
+     */
+    abs(): Decimal;
+
+    /**
+     * Return
+     *   1    if the value of this Decimal is greater than the value of `y`,
+     *  -1    if the value of this Decimal is less than the value of `y`,
+     *   0    if they have the same value
+     */
+    comparedTo(y: Numeric): 1|0|-1;
+
+    /**
+     * Return
+     *   1    if the value of this Decimal is greater than the value of `y`,
+     *  -1    if the value of this Decimal is less than the value of `y`,
+     *   0    if they have the same value
+     */
+    cmp(y: Numeric): 1|0|-1;
+
+    /**
+     * Return the number of decimal places of the value of this Decimal.
+     */
+    decimalPlaces(): number;
+
+    /**
+     * Return the number of decimal places of the value of this Decimal.
+     */
+    dp(): number;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    dividedBy(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    div(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the integer part of dividing the value of this Decimal
+     * by the value of `y`, truncated to `precision` significant digits.
+     *
+     */
+    dividedToIntegerBy(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the integer part of dividing the value of this Decimal
+     * by the value of `y`, truncated to `precision` significant digits.
+     *
+     */
+    idiv(y: Numeric): Decimal;
+
+    /**
+     * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.
+     */
+    equals(y: Numeric): boolean;
+
+    /**
+     * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.
+     */
+    eq(y: Numeric): boolean;
+
+    /**
+     * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).
+     */
+    exponent(): number;
+
+    /**
+     * Return true if the value of this Decimal is greater than the value of `y`, otherwise return
+     * false.
+     */
+    greaterThan(y: Numeric): boolean;
+
+    /**
+     * Return true if the value of this Decimal is greater than the value of `y`, otherwise return
+     * false.
+     */
+    gt(y: Numeric): boolean;
+
+    /**
+     * Return true if the value of this Decimal is greater than or equal to the value of `y`,
+     * otherwise return false.
+     *
+     */
+    greaterThanOrEqualTo(y: Numeric): boolean;
+
+    /**
+     * Return true if the value of this Decimal is greater than or equal to the value of `y`,
+     * otherwise return false.
+     *
+     */
+    gte(y: Numeric): boolean;
+
+    /**
+     * Return true if the value of this Decimal is an integer, otherwise return false.
+     *
+     */
+    isInteger(): boolean;
+
+    /**
+     * Return true if the value of this Decimal is an integer, otherwise return false.
+     *
+     */
+    isint(): boolean;
+
+    /**
+     * Return true if the value of this Decimal is negative, otherwise return false.
+     *
+     */
+    isNegative(): boolean;
+
+    /**
+     * Return true if the value of this Decimal is negative, otherwise return false.
+     *
+     */
+    isneg(): boolean;
+
+    /**
+     * Return true if the value of this Decimal is positive, otherwise return false.
+     *
+     */
+    isPositive(): boolean;
+
+    /**
+     * Return true if the value of this Decimal is positive, otherwise return false.
+     *
+     */
+    ispos(): boolean;
+
+    /**
+     * Return true if the value of this Decimal is 0, otherwise return false.
+     *
+     */
+    isZero(): boolean;
+
+    /**
+     * Return true if the value of this Decimal is less than `y`, otherwise return false.
+     *
+     */
+    lessThan(y: Numeric): boolean;
+
+    /**
+     * Return true if the value of this Decimal is less than `y`, otherwise return false.
+     *
+     */
+    lt(y: Numeric): boolean;
+
+    /**
+     * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.
+     *
+     */
+    lessThanOrEqualTo(y: Numeric): boolean;
+
+    /**
+     * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.
+     *
+     */
+    lte(y: Numeric): boolean;
+
+    /**
+     * Return the logarithm of the value of this Decimal to the specified base, truncated to
+     * `precision` significant digits.
+     *
+     * If no base is specified, return log[10](x).
+     *
+     * log[base](x) = ln(x) / ln(base)
+     *
+     * The maximum error of the result is 1 ulp (unit in the last place).
+     *
+     */
+    logarithm(base?: Numeric): Decimal;
+
+    /**
+     * Return the logarithm of the value of this Decimal to the specified base, truncated to
+     * `precision` significant digits.
+     *
+     * If no base is specified, return log[10](x).
+     *
+     * log[base](x) = ln(x) / ln(base)
+     *
+     * The maximum error of the result is 1 ulp (unit in the last place).
+     *
+     */
+    log(base?: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    minus(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    sub(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    modulo(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    mod(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the natural exponential of the value of this Decimal,
+     * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`
+     * significant digits.
+     *
+     */
+    naturalExponetial(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the natural exponential of the value of this Decimal,
+     * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`
+     * significant digits.
+     *
+     */
+    exp(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,
+     * truncated to `precision` significant digits.
+     *
+     */
+    naturalLogarithm(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,
+     * truncated to `precision` significant digits.
+     *
+     */
+    ln(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by
+     * -1.
+     *
+     */
+    negated(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by
+     * -1.
+     *
+     */
+    neg(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    plus(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    add(y: Numeric): Decimal;
+
+    /**
+     * Return the number of significant digits of the value of this Decimal.
+     *
+     * @param zeros {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.
+     */
+    precision(zeros: boolean|number): number;
+
+    /**
+     * Return the number of significant digits of the value of this Decimal.
+     *
+     * @param zeros {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.
+     */
+    sd(zeros: boolean|number): number;
+
+    /**
+     * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`
+     * significant digits.
+     *
+     */
+    squareRoot(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`
+     * significant digits.
+     *
+     */
+    sqrt(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    times(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to
+     * `precision` significant digits.
+     *
+     */
+    mul(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`
+     * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.
+     *
+     * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.
+     *
+     * @param dp {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+     * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive.
+     *
+     */
+    toDecimalPlaces(dp?: number, rm?: number): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`
+     * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.
+     *
+     * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.
+     *
+     * @param dp {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+     * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive.
+     *
+     */
+    todp(dp?: number, rm?: number): Decimal;
+
+    /**
+     * Return a string representing the value of this Decimal in exponential notation rounded to
+     * `dp` fixed decimal places using rounding mode `rounding`.
+     *
+     * @param dp {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+     * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive.
+     *
+     */
+    toExponential(dp?: number, rm?: number): string;
+
+    /**
+     * Return a string representing the value of this Decimal in normal (fixed-point) notation to
+     * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is
+     * omitted.
+     *
+     * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.
+     *
+     * @param dp {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+     * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive.
+     *
+     * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.
+     * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.
+     * (-0).toFixed(3) is '0.000'.
+     * (-0.5).toFixed(0) is '-0'.
+     *
+     */
+    toFixed(dp?: number, rm?: number): string;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using
+     * rounding mode `rounding`.
+     *
+     */
+    toInteger(): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using
+     * rounding mode `rounding`.
+     *
+     */
+    toint(): Decimal;
+
+    /**
+     * Return the value of this Decimal converted to a number primitive.
+     *
+     */
+    toNumber(): number;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,
+     * truncated to `precision` significant digits.
+     *
+     * For non-integer or very large exponents pow(x, y) is calculated using
+     *
+     *   x^y = exp(y*ln(x))
+     *
+     * The maximum error is 1 ulp (unit in last place).
+     *
+     * @param y {number|string|Decimal} The power to which to raise this Decimal.
+     *
+     */
+    toPower(y: Numeric): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,
+     * truncated to `precision` significant digits.
+     *
+     * For non-integer or very large exponents pow(x, y) is calculated using
+     *
+     *   x^y = exp(y*ln(x))
+     *
+     * The maximum error is 1 ulp (unit in last place).
+     *
+     * @param y {number|string|Decimal} The power to which to raise this Decimal.
+     *
+     */
+    pow(y: Numeric): Decimal;
+
+    /**
+     * Return a string representing the value of this Decimal rounded to `sd` significant digits
+     * using rounding mode `rounding`.
+     *
+     * Return exponential notation if `sd` is less than the number of digits necessary to represent
+     * the integer part of the value in normal notation.
+     *
+     * @param sd {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
+     * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive.
+     *
+     */
+    toPrecision(sd?: number, rm?: number): string;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`
+     * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if
+     * omitted.
+     *
+     * @param sd {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
+     * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive.
+     *
+     */
+    toSignificantDigits(sd?: number, rm?: number): Decimal;
+
+    /**
+     * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`
+     * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if
+     * omitted.
+     *
+     * @param sd {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
+     * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive.
+     *
+     */
+    tosd(sd?: number, rm?: number): Decimal;
+
+    /**
+     * Return a string representing the value of this Decimal.
+     *
+     * Return exponential notation if this Decimal has a positive exponent equal to or greater than
+     * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.
+     *
+     */
+    toString(): string;
+
+    /**
+     * Return a string representing the value of this Decimal.
+     *
+     * Return exponential notation if this Decimal has a positive exponent equal to or greater than
+     * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.
+     *
+     */
+    valueOf(): string;
+
+    /**
+     * Return a string representing the value of this Decimal.
+     *
+     * Return exponential notation if this Decimal has a positive exponent equal to or greater than
+     * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.
+     *
+     */
+    val(): string;
+
+    /**
+     * Return a string representing the value of this Decimal.
+     *
+     * Return exponential notation if this Decimal has a positive exponent equal to or greater than
+     * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.
+     *
+     */
+    toJSON(): string;
+
+    /**
+     * Create and return a Decimal constructor with the same configuration properties as this Decimal
+     * constructor.
+     *
+     * @param config? Config
+     */
+    static clone(config?: Config): typeof Decimal;
+
+    /**
+     * Configure global settings for a Decimal constructor.
+     */
+    static config(config: Config): Decimal;
+
+    /**
+     * Configure global settings for a Decimal constructor.
+     */
+    static set(config: Config): Decimal;
+
+    // The maximum number of significant digits of the result of a calculation or base conversion.
+    // E.g. `Decimal.config({ precision: 20 });`
+    static precision: number;
+
+    // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,
+    // `toFixed`, `toPrecision` and `toSignificantDigits`.
+    //
+    // E.g.
+    // `Decimal.rounding = 4;`
+    // `Decimal.rounding = Decimal.ROUND_HALF_UP;`
+    static rounding: number;
+    static readonly ROUND_UP: number;
+    static readonly ROUND_DOWN: number;
+    static readonly ROUND_CEIL: number;
+    static readonly ROUND_FLOOR: number;
+    static readonly ROUND_HALF_UP: number;
+    static readonly ROUND_HALF_DOWN: number;
+    static readonly ROUND_HALF_EVEN: number;
+    static readonly ROUND_HALF_CEIL: number;
+    static readonly ROUND_HALF_FLOOR: number;
+
+    // The exponent value at and beneath which `toString` returns exponential notation.
+    // JavaScript numbers: -7
+    static toExpNeg: number;                          // 0 to -MAX_E
+
+    // The exponent value at and above which `toString` returns exponential notation.
+    // JavaScript numbers: 21
+    static toExpPos:  number;                         // 0 to MAX_E
+
+    // The natural logarithm of 10.
+    static LN10: Decimal;
+}
+
+export interface Config {
+    precision?: number;
+    rounding?: number;
+    toExpNeg?: number;
+    toExpPos?: number;
+    LN10?: Numeric;
+}
+
+export type Numeric = string|number|Decimal;
Index: node_modules/decimal.js-light/decimal.js
===================================================================
--- node_modules/decimal.js-light/decimal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/decimal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2014 @@
+/*! decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */
+;(function (globalScope) {
+  'use strict';
+
+
+  /*
+   *  decimal.js-light v2.5.1
+   *  An arbitrary-precision Decimal type for JavaScript.
+   *  https://github.com/MikeMcl/decimal.js-light
+   *  Copyright (c) 2020 Michael Mclaughlin <M8ch88l@gmail.com>
+   *  MIT Expat Licence
+   */
+
+
+  // -----------------------------------  EDITABLE DEFAULTS  ------------------------------------ //
+
+
+    // The limit on the value of `precision`, and on the value of the first argument to
+    // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.
+  var MAX_DIGITS = 1e9,                        // 0 to 1e9
+
+
+    // The initial configuration properties of the Decimal constructor.
+    Decimal = {
+
+      // These values must be integers within the stated ranges (inclusive).
+      // Most of these values can be changed during run-time using `Decimal.config`.
+
+      // The maximum number of significant digits of the result of a calculation or base conversion.
+      // E.g. `Decimal.config({ precision: 20 });`
+      precision: 20,                         // 1 to MAX_DIGITS
+
+      // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,
+      // `toFixed`, `toPrecision` and `toSignificantDigits`.
+      //
+      // ROUND_UP         0 Away from zero.
+      // ROUND_DOWN       1 Towards zero.
+      // ROUND_CEIL       2 Towards +Infinity.
+      // ROUND_FLOOR      3 Towards -Infinity.
+      // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.
+      // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.
+      // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.
+      // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.
+      // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
+      //
+      // E.g.
+      // `Decimal.rounding = 4;`
+      // `Decimal.rounding = Decimal.ROUND_HALF_UP;`
+      rounding: 4,                           // 0 to 8
+
+      // The exponent value at and beneath which `toString` returns exponential notation.
+      // JavaScript numbers: -7
+      toExpNeg: -7,                          // 0 to -MAX_E
+
+      // The exponent value at and above which `toString` returns exponential notation.
+      // JavaScript numbers: 21
+      toExpPos:  21,                         // 0 to MAX_E
+
+      // The natural logarithm of 10.
+      // 115 digits
+      LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'
+    },
+
+
+  // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //
+
+
+    external = true,
+
+    decimalError = '[DecimalError] ',
+    invalidArgument = decimalError + 'Invalid argument: ',
+    exponentOutOfRange = decimalError + 'Exponent out of range: ',
+
+    mathfloor = Math.floor,
+    mathpow = Math.pow,
+
+    isDecimal = /^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
+
+    ONE,
+    BASE = 1e7,
+    LOG_BASE = 7,
+    MAX_SAFE_INTEGER = 9007199254740991,
+    MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE),    // 1286742750677284
+
+    // Decimal.prototype object
+    P = {};
+
+
+  // Decimal prototype methods
+
+
+  /*
+   *  absoluteValue                       abs
+   *  comparedTo                          cmp
+   *  decimalPlaces                       dp
+   *  dividedBy                           div
+   *  dividedToIntegerBy                  idiv
+   *  equals                              eq
+   *  exponent
+   *  greaterThan                         gt
+   *  greaterThanOrEqualTo                gte
+   *  isInteger                           isint
+   *  isNegative                          isneg
+   *  isPositive                          ispos
+   *  isZero
+   *  lessThan                            lt
+   *  lessThanOrEqualTo                   lte
+   *  logarithm                           log
+   *  minus                               sub
+   *  modulo                              mod
+   *  naturalExponential                  exp
+   *  naturalLogarithm                    ln
+   *  negated                             neg
+   *  plus                                add
+   *  precision                           sd
+   *  squareRoot                          sqrt
+   *  times                               mul
+   *  toDecimalPlaces                     todp
+   *  toExponential
+   *  toFixed
+   *  toInteger                           toint
+   *  toNumber
+   *  toPower                             pow
+   *  toPrecision
+   *  toSignificantDigits                 tosd
+   *  toString
+   *  valueOf                             val
+   */
+
+
+  /*
+   * Return a new Decimal whose value is the absolute value of this Decimal.
+   *
+   */
+  P.absoluteValue = P.abs = function () {
+    var x = new this.constructor(this);
+    if (x.s) x.s = 1;
+    return x;
+  };
+
+
+  /*
+   * Return
+   *   1    if the value of this Decimal is greater than the value of `y`,
+   *  -1    if the value of this Decimal is less than the value of `y`,
+   *   0    if they have the same value
+   *
+   */
+  P.comparedTo = P.cmp = function (y) {
+    var i, j, xdL, ydL,
+      x = this;
+
+    y = new x.constructor(y);
+
+    // Signs differ?
+    if (x.s !== y.s) return x.s || -y.s;
+
+    // Compare exponents.
+    if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;
+
+    xdL = x.d.length;
+    ydL = y.d.length;
+
+    // Compare digit by digit.
+    for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {
+      if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;
+    }
+
+    // Compare lengths.
+    return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;
+  };
+
+
+  /*
+   * Return the number of decimal places of the value of this Decimal.
+   *
+   */
+  P.decimalPlaces = P.dp = function () {
+    var x = this,
+      w = x.d.length - 1,
+      dp = (w - x.e) * LOG_BASE;
+
+    // Subtract the number of trailing zeros of the last word.
+    w = x.d[w];
+    if (w) for (; w % 10 == 0; w /= 10) dp--;
+
+    return dp < 0 ? 0 : dp;
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to
+   * `precision` significant digits.
+   *
+   */
+  P.dividedBy = P.div = function (y) {
+    return divide(this, new this.constructor(y));
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the integer part of dividing the value of this Decimal
+   * by the value of `y`, truncated to `precision` significant digits.
+   *
+   */
+  P.dividedToIntegerBy = P.idiv = function (y) {
+    var x = this,
+      Ctor = x.constructor;
+    return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);
+  };
+
+
+  /*
+   * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.
+   *
+   */
+  P.equals = P.eq = function (y) {
+    return !this.cmp(y);
+  };
+
+
+  /*
+   * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).
+   *
+   */
+  P.exponent = function () {
+    return getBase10Exponent(this);
+  };
+
+
+  /*
+   * Return true if the value of this Decimal is greater than the value of `y`, otherwise return
+   * false.
+   *
+   */
+  P.greaterThan = P.gt = function (y) {
+    return this.cmp(y) > 0;
+  };
+
+
+  /*
+   * Return true if the value of this Decimal is greater than or equal to the value of `y`,
+   * otherwise return false.
+   *
+   */
+  P.greaterThanOrEqualTo = P.gte = function (y) {
+    return this.cmp(y) >= 0;
+  };
+
+
+  /*
+   * Return true if the value of this Decimal is an integer, otherwise return false.
+   *
+   */
+  P.isInteger = P.isint = function () {
+    return this.e > this.d.length - 2;
+  };
+
+
+  /*
+   * Return true if the value of this Decimal is negative, otherwise return false.
+   *
+   */
+  P.isNegative = P.isneg = function () {
+    return this.s < 0;
+  };
+
+
+  /*
+   * Return true if the value of this Decimal is positive, otherwise return false.
+   *
+   */
+  P.isPositive = P.ispos = function () {
+    return this.s > 0;
+  };
+
+
+  /*
+   * Return true if the value of this Decimal is 0, otherwise return false.
+   *
+   */
+  P.isZero = function () {
+    return this.s === 0;
+  };
+
+
+  /*
+   * Return true if the value of this Decimal is less than `y`, otherwise return false.
+   *
+   */
+  P.lessThan = P.lt = function (y) {
+    return this.cmp(y) < 0;
+  };
+
+
+  /*
+   * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.
+   *
+   */
+  P.lessThanOrEqualTo = P.lte = function (y) {
+    return this.cmp(y) < 1;
+  };
+
+
+  /*
+   * Return the logarithm of the value of this Decimal to the specified base, truncated to
+   * `precision` significant digits.
+   *
+   * If no base is specified, return log[10](x).
+   *
+   * log[base](x) = ln(x) / ln(base)
+   *
+   * The maximum error of the result is 1 ulp (unit in the last place).
+   *
+   * [base] {number|string|Decimal} The base of the logarithm.
+   *
+   */
+  P.logarithm = P.log = function (base) {
+    var r,
+      x = this,
+      Ctor = x.constructor,
+      pr = Ctor.precision,
+      wpr = pr + 5;
+
+    // Default base is 10.
+    if (base === void 0) {
+      base = new Ctor(10);
+    } else {
+      base = new Ctor(base);
+
+      // log[-b](x) = NaN
+      // log[0](x)  = NaN
+      // log[1](x)  = NaN
+      if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');
+    }
+
+    // log[b](-x) = NaN
+    // log[b](0) = -Infinity
+    if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));
+
+    // log[b](1) = 0
+    if (x.eq(ONE)) return new Ctor(0);
+
+    external = false;
+    r = divide(ln(x, wpr), ln(base, wpr), wpr);
+    external = true;
+
+    return round(r, pr);
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to
+   * `precision` significant digits.
+   *
+   */
+  P.minus = P.sub = function (y) {
+    var x = this;
+    y = new x.constructor(y);
+    return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to
+   * `precision` significant digits.
+   *
+   */
+  P.modulo = P.mod = function (y) {
+    var q,
+      x = this,
+      Ctor = x.constructor,
+      pr = Ctor.precision;
+
+    y = new Ctor(y);
+
+    // x % 0 = NaN
+    if (!y.s) throw Error(decimalError + 'NaN');
+
+    // Return x if x is 0.
+    if (!x.s) return round(new Ctor(x), pr);
+
+    // Prevent rounding of intermediate calculations.
+    external = false;
+    q = divide(x, y, 0, 1).times(y);
+    external = true;
+
+    return x.minus(q);
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the natural exponential of the value of this Decimal,
+   * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`
+   * significant digits.
+   *
+   */
+  P.naturalExponential = P.exp = function () {
+    return exp(this);
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,
+   * truncated to `precision` significant digits.
+   *
+   */
+  P.naturalLogarithm = P.ln = function () {
+    return ln(this);
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by
+   * -1.
+   *
+   */
+  P.negated = P.neg = function () {
+    var x = new this.constructor(this);
+    x.s = -x.s || 0;
+    return x;
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to
+   * `precision` significant digits.
+   *
+   */
+  P.plus = P.add = function (y) {
+    var x = this;
+    y = new x.constructor(y);
+    return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));
+  };
+
+
+  /*
+   * Return the number of significant digits of the value of this Decimal.
+   *
+   * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.
+   *
+   */
+  P.precision = P.sd = function (z) {
+    var e, sd, w,
+      x = this;
+
+    if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);
+
+    e = getBase10Exponent(x) + 1;
+    w = x.d.length - 1;
+    sd = w * LOG_BASE + 1;
+    w = x.d[w];
+
+    // If non-zero...
+    if (w) {
+
+      // Subtract the number of trailing zeros of the last word.
+      for (; w % 10 == 0; w /= 10) sd--;
+
+      // Add the number of digits of the first word.
+      for (w = x.d[0]; w >= 10; w /= 10) sd++;
+    }
+
+    return z && e > sd ? e : sd;
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`
+   * significant digits.
+   *
+   */
+  P.squareRoot = P.sqrt = function () {
+    var e, n, pr, r, s, t, wpr,
+      x = this,
+      Ctor = x.constructor;
+
+    // Negative or zero?
+    if (x.s < 1) {
+      if (!x.s) return new Ctor(0);
+
+      // sqrt(-x) = NaN
+      throw Error(decimalError + 'NaN');
+    }
+
+    e = getBase10Exponent(x);
+    external = false;
+
+    // Initial estimate.
+    s = Math.sqrt(+x);
+
+    // Math.sqrt underflow/overflow?
+    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
+    if (s == 0 || s == 1 / 0) {
+      n = digitsToString(x.d);
+      if ((n.length + e) % 2 == 0) n += '0';
+      s = Math.sqrt(n);
+      e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);
+
+      if (s == 1 / 0) {
+        n = '5e' + e;
+      } else {
+        n = s.toExponential();
+        n = n.slice(0, n.indexOf('e') + 1) + e;
+      }
+
+      r = new Ctor(n);
+    } else {
+      r = new Ctor(s.toString());
+    }
+
+    pr = Ctor.precision;
+    s = wpr = pr + 3;
+
+    // Newton-Raphson iteration.
+    for (;;) {
+      t = r;
+      r = t.plus(divide(x, t, wpr + 2)).times(0.5);
+
+      if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {
+        n = n.slice(wpr - 3, wpr + 1);
+
+        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or
+        // 4999, i.e. approaching a rounding boundary, continue the iteration.
+        if (s == wpr && n == '4999') {
+
+          // On the first iteration only, check to see if rounding up gives the exact result as the
+          // nines may infinitely repeat.
+          round(t, pr + 1, 0);
+
+          if (t.times(t).eq(x)) {
+            r = t;
+            break;
+          }
+        } else if (n != '9999') {
+          break;
+        }
+
+        wpr += 4;
+      }
+    }
+
+    external = true;
+
+    return round(r, pr);
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to
+   * `precision` significant digits.
+   *
+   */
+  P.times = P.mul = function (y) {
+    var carry, e, i, k, r, rL, t, xdL, ydL,
+      x = this,
+      Ctor = x.constructor,
+      xd = x.d,
+      yd = (y = new Ctor(y)).d;
+
+    // Return 0 if either is 0.
+    if (!x.s || !y.s) return new Ctor(0);
+
+    y.s *= x.s;
+    e = x.e + y.e;
+    xdL = xd.length;
+    ydL = yd.length;
+
+    // Ensure xd points to the longer array.
+    if (xdL < ydL) {
+      r = xd;
+      xd = yd;
+      yd = r;
+      rL = xdL;
+      xdL = ydL;
+      ydL = rL;
+    }
+
+    // Initialise the result array with zeros.
+    r = [];
+    rL = xdL + ydL;
+    for (i = rL; i--;) r.push(0);
+
+    // Multiply!
+    for (i = ydL; --i >= 0;) {
+      carry = 0;
+      for (k = xdL + i; k > i;) {
+        t = r[k] + yd[i] * xd[k - i - 1] + carry;
+        r[k--] = t % BASE | 0;
+        carry = t / BASE | 0;
+      }
+
+      r[k] = (r[k] + carry) % BASE | 0;
+    }
+
+    // Remove trailing zeros.
+    for (; !r[--rL];) r.pop();
+
+    if (carry) ++e;
+    else r.shift();
+
+    y.d = r;
+    y.e = e;
+
+    return external ? round(y, Ctor.precision) : y;
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`
+   * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.
+   *
+   * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.
+   *
+   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+   *
+   */
+  P.toDecimalPlaces = P.todp = function (dp, rm) {
+    var x = this,
+      Ctor = x.constructor;
+
+    x = new Ctor(x);
+    if (dp === void 0) return x;
+
+    checkInt32(dp, 0, MAX_DIGITS);
+
+    if (rm === void 0) rm = Ctor.rounding;
+    else checkInt32(rm, 0, 8);
+
+    return round(x, dp + getBase10Exponent(x) + 1, rm);
+  };
+
+
+  /*
+   * Return a string representing the value of this Decimal in exponential notation rounded to
+   * `dp` fixed decimal places using rounding mode `rounding`.
+   *
+   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+   *
+   */
+  P.toExponential = function (dp, rm) {
+    var str,
+      x = this,
+      Ctor = x.constructor;
+
+    if (dp === void 0) {
+      str = toString(x, true);
+    } else {
+      checkInt32(dp, 0, MAX_DIGITS);
+
+      if (rm === void 0) rm = Ctor.rounding;
+      else checkInt32(rm, 0, 8);
+
+      x = round(new Ctor(x), dp + 1, rm);
+      str = toString(x, true, dp + 1);
+    }
+
+    return str;
+  };
+
+
+  /*
+   * Return a string representing the value of this Decimal in normal (fixed-point) notation to
+   * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is
+   * omitted.
+   *
+   * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.
+   *
+   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+   *
+   * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.
+   * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.
+   * (-0).toFixed(3) is '0.000'.
+   * (-0.5).toFixed(0) is '-0'.
+   *
+   */
+  P.toFixed = function (dp, rm) {
+    var str, y,
+      x = this,
+      Ctor = x.constructor;
+
+    if (dp === void 0) return toString(x);
+
+    checkInt32(dp, 0, MAX_DIGITS);
+
+    if (rm === void 0) rm = Ctor.rounding;
+    else checkInt32(rm, 0, 8);
+
+    y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);
+    str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);
+
+    // To determine whether to add the minus sign look at the value before it was rounded,
+    // i.e. look at `x` rather than `y`.
+    return x.isneg() && !x.isZero() ? '-' + str : str;
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using
+   * rounding mode `rounding`.
+   *
+   */
+  P.toInteger = P.toint = function () {
+    var x = this,
+      Ctor = x.constructor;
+    return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);
+  };
+
+
+  /*
+   * Return the value of this Decimal converted to a number primitive.
+   *
+   */
+  P.toNumber = function () {
+    return +this;
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,
+   * truncated to `precision` significant digits.
+   *
+   * For non-integer or very large exponents pow(x, y) is calculated using
+   *
+   *   x^y = exp(y*ln(x))
+   *
+   * The maximum error is 1 ulp (unit in last place).
+   *
+   * y {number|string|Decimal} The power to which to raise this Decimal.
+   *
+   */
+  P.toPower = P.pow = function (y) {
+    var e, k, pr, r, sign, yIsInt,
+      x = this,
+      Ctor = x.constructor,
+      guard = 12,
+      yn = +(y = new Ctor(y));
+
+    // pow(x, 0) = 1
+    if (!y.s) return new Ctor(ONE);
+
+    x = new Ctor(x);
+
+    // pow(0, y > 0) = 0
+    // pow(0, y < 0) = Infinity
+    if (!x.s) {
+      if (y.s < 1) throw Error(decimalError + 'Infinity');
+      return x;
+    }
+
+    // pow(1, y) = 1
+    if (x.eq(ONE)) return x;
+
+    pr = Ctor.precision;
+
+    // pow(x, 1) = x
+    if (y.eq(ONE)) return round(x, pr);
+
+    e = y.e;
+    k = y.d.length - 1;
+    yIsInt = e >= k;
+    sign = x.s;
+
+    if (!yIsInt) {
+
+      // pow(x < 0, y non-integer) = NaN
+      if (sign < 0) throw Error(decimalError + 'NaN');
+
+    // If y is a small integer use the 'exponentiation by squaring' algorithm.
+    } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {
+      r = new Ctor(ONE);
+
+      // Max k of 9007199254740991 takes 53 loop iterations.
+      // Maximum digits array length; leaves [28, 34] guard digits.
+      e = Math.ceil(pr / LOG_BASE + 4);
+
+      external = false;
+
+      for (;;) {
+        if (k % 2) {
+          r = r.times(x);
+          truncate(r.d, e);
+        }
+
+        k = mathfloor(k / 2);
+        if (k === 0) break;
+
+        x = x.times(x);
+        truncate(x.d, e);
+      }
+
+      external = true;
+
+      return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);
+    }
+
+    // Result is negative if x is negative and the last digit of integer y is odd.
+    sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;
+
+    x.s = 1;
+    external = false;
+    r = y.times(ln(x, pr + guard));
+    external = true;
+    r = exp(r);
+    r.s = sign;
+
+    return r;
+  };
+
+
+  /*
+   * Return a string representing the value of this Decimal rounded to `sd` significant digits
+   * using rounding mode `rounding`.
+   *
+   * Return exponential notation if `sd` is less than the number of digits necessary to represent
+   * the integer part of the value in normal notation.
+   *
+   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
+   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+   *
+   */
+  P.toPrecision = function (sd, rm) {
+    var e, str,
+      x = this,
+      Ctor = x.constructor;
+
+    if (sd === void 0) {
+      e = getBase10Exponent(x);
+      str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);
+    } else {
+      checkInt32(sd, 1, MAX_DIGITS);
+
+      if (rm === void 0) rm = Ctor.rounding;
+      else checkInt32(rm, 0, 8);
+
+      x = round(new Ctor(x), sd, rm);
+      e = getBase10Exponent(x);
+      str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);
+    }
+
+    return str;
+  };
+
+
+  /*
+   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`
+   * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if
+   * omitted.
+   *
+   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
+   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+   *
+   */
+  P.toSignificantDigits = P.tosd = function (sd, rm) {
+    var x = this,
+      Ctor = x.constructor;
+
+    if (sd === void 0) {
+      sd = Ctor.precision;
+      rm = Ctor.rounding;
+    } else {
+      checkInt32(sd, 1, MAX_DIGITS);
+
+      if (rm === void 0) rm = Ctor.rounding;
+      else checkInt32(rm, 0, 8);
+    }
+
+    return round(new Ctor(x), sd, rm);
+  };
+
+
+  /*
+   * Return a string representing the value of this Decimal.
+   *
+   * Return exponential notation if this Decimal has a positive exponent equal to or greater than
+   * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.
+   *
+   */
+  P.toString = P.valueOf = P.val = P.toJSON = function () {
+    var x = this,
+      e = getBase10Exponent(x),
+      Ctor = x.constructor;
+
+    return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);
+  };
+
+
+  // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.
+
+
+  /*
+   *  add                 P.minus, P.plus
+   *  checkInt32          P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd
+   *  digitsToString      P.log, P.sqrt, P.pow, toString, exp, ln
+   *  divide              P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln
+   *  exp                 P.exp, P.pow
+   *  getBase10Exponent   P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,
+   *                      P.toString, divide, round, toString, exp, ln
+   *  getLn10             P.log, ln
+   *  getZeroString       digitsToString, toString
+   *  ln                  P.log, P.ln, P.pow, exp
+   *  parseDecimal        Decimal
+   *  round               P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,
+   *                      P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,
+   *                      divide, getLn10, exp, ln
+   *  subtract            P.minus, P.plus
+   *  toString            P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf
+   *  truncate            P.pow
+   *
+   *  Throws:             P.log, P.mod, P.sd, P.sqrt, P.pow,  checkInt32, divide, round,
+   *                      getLn10, exp, ln, parseDecimal, Decimal, config
+   */
+
+
+  function add(x, y) {
+    var carry, d, e, i, k, len, xd, yd,
+      Ctor = x.constructor,
+      pr = Ctor.precision;
+
+    // If either is zero...
+    if (!x.s || !y.s) {
+
+      // Return x if y is zero.
+      // Return y if y is non-zero.
+      if (!y.s) y = new Ctor(x);
+      return external ? round(y, pr) : y;
+    }
+
+    xd = x.d;
+    yd = y.d;
+
+    // x and y are finite, non-zero numbers with the same sign.
+
+    k = x.e;
+    e = y.e;
+    xd = xd.slice();
+    i = k - e;
+
+    // If base 1e7 exponents differ...
+    if (i) {
+      if (i < 0) {
+        d = xd;
+        i = -i;
+        len = yd.length;
+      } else {
+        d = yd;
+        e = k;
+        len = xd.length;
+      }
+
+      // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.
+      k = Math.ceil(pr / LOG_BASE);
+      len = k > len ? k + 1 : len + 1;
+
+      if (i > len) {
+        i = len;
+        d.length = 1;
+      }
+
+      // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.
+      d.reverse();
+      for (; i--;) d.push(0);
+      d.reverse();
+    }
+
+    len = xd.length;
+    i = yd.length;
+
+    // If yd is longer than xd, swap xd and yd so xd points to the longer array.
+    if (len - i < 0) {
+      i = len;
+      d = yd;
+      yd = xd;
+      xd = d;
+    }
+
+    // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.
+    for (carry = 0; i;) {
+      carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;
+      xd[i] %= BASE;
+    }
+
+    if (carry) {
+      xd.unshift(carry);
+      ++e;
+    }
+
+    // Remove trailing zeros.
+    // No need to check for zero, as +x + +y != 0 && -x + -y != 0
+    for (len = xd.length; xd[--len] == 0;) xd.pop();
+
+    y.d = xd;
+    y.e = e;
+
+    return external ? round(y, pr) : y;
+  }
+
+
+  function checkInt32(i, min, max) {
+    if (i !== ~~i || i < min || i > max) {
+      throw Error(invalidArgument + i);
+    }
+  }
+
+
+  function digitsToString(d) {
+    var i, k, ws,
+      indexOfLastWord = d.length - 1,
+      str = '',
+      w = d[0];
+
+    if (indexOfLastWord > 0) {
+      str += w;
+      for (i = 1; i < indexOfLastWord; i++) {
+        ws = d[i] + '';
+        k = LOG_BASE - ws.length;
+        if (k) str += getZeroString(k);
+        str += ws;
+      }
+
+      w = d[i];
+      ws = w + '';
+      k = LOG_BASE - ws.length;
+      if (k) str += getZeroString(k);
+    } else if (w === 0) {
+      return '0';
+    }
+
+    // Remove trailing zeros of last w.
+    for (; w % 10 === 0;) w /= 10;
+
+    return str + w;
+  }
+
+
+  var divide = (function () {
+
+    // Assumes non-zero x and k, and hence non-zero result.
+    function multiplyInteger(x, k) {
+      var temp,
+        carry = 0,
+        i = x.length;
+
+      for (x = x.slice(); i--;) {
+        temp = x[i] * k + carry;
+        x[i] = temp % BASE | 0;
+        carry = temp / BASE | 0;
+      }
+
+      if (carry) x.unshift(carry);
+
+      return x;
+    }
+
+    function compare(a, b, aL, bL) {
+      var i, r;
+
+      if (aL != bL) {
+        r = aL > bL ? 1 : -1;
+      } else {
+        for (i = r = 0; i < aL; i++) {
+          if (a[i] != b[i]) {
+            r = a[i] > b[i] ? 1 : -1;
+            break;
+          }
+        }
+      }
+
+      return r;
+    }
+
+    function subtract(a, b, aL) {
+      var i = 0;
+
+      // Subtract b from a.
+      for (; aL--;) {
+        a[aL] -= i;
+        i = a[aL] < b[aL] ? 1 : 0;
+        a[aL] = i * BASE + a[aL] - b[aL];
+      }
+
+      // Remove leading zeros.
+      for (; !a[0] && a.length > 1;) a.shift();
+    }
+
+    return function (x, y, pr, dp) {
+      var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,
+        Ctor = x.constructor,
+        sign = x.s == y.s ? 1 : -1,
+        xd = x.d,
+        yd = y.d;
+
+      // Either 0?
+      if (!x.s) return new Ctor(x);
+      if (!y.s) throw Error(decimalError + 'Division by zero');
+
+      e = x.e - y.e;
+      yL = yd.length;
+      xL = xd.length;
+      q = new Ctor(sign);
+      qd = q.d = [];
+
+      // Result exponent may be one less than e.
+      for (i = 0; yd[i] == (xd[i] || 0); ) ++i;
+      if (yd[i] > (xd[i] || 0)) --e;
+
+      if (pr == null) {
+        sd = pr = Ctor.precision;
+      } else if (dp) {
+        sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;
+      } else {
+        sd = pr;
+      }
+
+      if (sd < 0) return new Ctor(0);
+
+      // Convert precision in number of base 10 digits to base 1e7 digits.
+      sd = sd / LOG_BASE + 2 | 0;
+      i = 0;
+
+      // divisor < 1e7
+      if (yL == 1) {
+        k = 0;
+        yd = yd[0];
+        sd++;
+
+        // k is the carry.
+        for (; (i < xL || k) && sd--; i++) {
+          t = k * BASE + (xd[i] || 0);
+          qd[i] = t / yd | 0;
+          k = t % yd | 0;
+        }
+
+      // divisor >= 1e7
+      } else {
+
+        // Normalise xd and yd so highest order digit of yd is >= BASE/2
+        k = BASE / (yd[0] + 1) | 0;
+
+        if (k > 1) {
+          yd = multiplyInteger(yd, k);
+          xd = multiplyInteger(xd, k);
+          yL = yd.length;
+          xL = xd.length;
+        }
+
+        xi = yL;
+        rem = xd.slice(0, yL);
+        remL = rem.length;
+
+        // Add zeros to make remainder as long as divisor.
+        for (; remL < yL;) rem[remL++] = 0;
+
+        yz = yd.slice();
+        yz.unshift(0);
+        yd0 = yd[0];
+
+        if (yd[1] >= BASE / 2) ++yd0;
+
+        do {
+          k = 0;
+
+          // Compare divisor and remainder.
+          cmp = compare(yd, rem, yL, remL);
+
+          // If divisor < remainder.
+          if (cmp < 0) {
+
+            // Calculate trial digit, k.
+            rem0 = rem[0];
+            if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);
+
+            // k will be how many times the divisor goes into the current remainder.
+            k = rem0 / yd0 | 0;
+
+            //  Algorithm:
+            //  1. product = divisor * trial digit (k)
+            //  2. if product > remainder: product -= divisor, k--
+            //  3. remainder -= product
+            //  4. if product was < remainder at 2:
+            //    5. compare new remainder and divisor
+            //    6. If remainder > divisor: remainder -= divisor, k++
+
+            if (k > 1) {
+              if (k >= BASE) k = BASE - 1;
+
+              // product = divisor * trial digit.
+              prod = multiplyInteger(yd, k);
+              prodL = prod.length;
+              remL = rem.length;
+
+              // Compare product and remainder.
+              cmp = compare(prod, rem, prodL, remL);
+
+              // product > remainder.
+              if (cmp == 1) {
+                k--;
+
+                // Subtract divisor from product.
+                subtract(prod, yL < prodL ? yz : yd, prodL);
+              }
+            } else {
+
+              // cmp is -1.
+              // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1
+              // to avoid it. If k is 1 there is a need to compare yd and rem again below.
+              if (k == 0) cmp = k = 1;
+              prod = yd.slice();
+            }
+
+            prodL = prod.length;
+            if (prodL < remL) prod.unshift(0);
+
+            // Subtract product from remainder.
+            subtract(rem, prod, remL);
+
+            // If product was < previous remainder.
+            if (cmp == -1) {
+              remL = rem.length;
+
+              // Compare divisor and new remainder.
+              cmp = compare(yd, rem, yL, remL);
+
+              // If divisor < new remainder, subtract divisor from remainder.
+              if (cmp < 1) {
+                k++;
+
+                // Subtract divisor from remainder.
+                subtract(rem, yL < remL ? yz : yd, remL);
+              }
+            }
+
+            remL = rem.length;
+          } else if (cmp === 0) {
+            k++;
+            rem = [0];
+          }    // if cmp === 1, k will be 0
+
+          // Add the next digit, k, to the result array.
+          qd[i++] = k;
+
+          // Update the remainder.
+          if (cmp && rem[0]) {
+            rem[remL++] = xd[xi] || 0;
+          } else {
+            rem = [xd[xi]];
+            remL = 1;
+          }
+
+        } while ((xi++ < xL || rem[0] !== void 0) && sd--);
+      }
+
+      // Leading zero?
+      if (!qd[0]) qd.shift();
+
+      q.e = e;
+
+      return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);
+    };
+  })();
+
+
+  /*
+   * Return a new Decimal whose value is the natural exponential of `x` truncated to `sd`
+   * significant digits.
+   *
+   * Taylor/Maclaurin series.
+   *
+   * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...
+   *
+   * Argument reduction:
+   *   Repeat x = x / 32, k += 5, until |x| < 0.1
+   *   exp(x) = exp(x / 2^k)^(2^k)
+   *
+   * Previously, the argument was initially reduced by
+   * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)
+   * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was
+   * found to be slower than just dividing repeatedly by 32 as above.
+   *
+   * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)
+   *
+   *  exp(x) is non-terminating for any finite, non-zero x.
+   *
+   */
+  function exp(x, sd) {
+    var denominator, guard, pow, sum, t, wpr,
+      i = 0,
+      k = 0,
+      Ctor = x.constructor,
+      pr = Ctor.precision;
+
+    if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));
+
+    // exp(0) = 1
+    if (!x.s) return new Ctor(ONE);
+
+    if (sd == null) {
+      external = false;
+      wpr = pr;
+    } else {
+      wpr = sd;
+    }
+
+    t = new Ctor(0.03125);
+
+    while (x.abs().gte(0.1)) {
+      x = x.times(t);    // x = x / 2^5
+      k += 5;
+    }
+
+    // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.
+    guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;
+    wpr += guard;
+    denominator = pow = sum = new Ctor(ONE);
+    Ctor.precision = wpr;
+
+    for (;;) {
+      pow = round(pow.times(x), wpr);
+      denominator = denominator.times(++i);
+      t = sum.plus(divide(pow, denominator, wpr));
+
+      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {
+        while (k--) sum = round(sum.times(sum), wpr);
+        Ctor.precision = pr;
+        return sd == null ? (external = true, round(sum, pr)) : sum;
+      }
+
+      sum = t;
+    }
+  }
+
+
+  // Calculate the base 10 exponent from the base 1e7 exponent.
+  function getBase10Exponent(x) {
+    var e = x.e * LOG_BASE,
+      w = x.d[0];
+
+    // Add the number of digits of the first word of the digits array.
+    for (; w >= 10; w /= 10) e++;
+    return e;
+  }
+
+
+  function getLn10(Ctor, sd, pr) {
+
+    if (sd > Ctor.LN10.sd()) {
+
+
+      // Reset global state in case the exception is caught.
+      external = true;
+      if (pr) Ctor.precision = pr;
+      throw Error(decimalError + 'LN10 precision limit exceeded');
+    }
+
+    return round(new Ctor(Ctor.LN10), sd);
+  }
+
+
+  function getZeroString(k) {
+    var zs = '';
+    for (; k--;) zs += '0';
+    return zs;
+  }
+
+
+  /*
+   * Return a new Decimal whose value is the natural logarithm of `x` truncated to `sd` significant
+   * digits.
+   *
+   *  ln(n) is non-terminating (n != 1)
+   *
+   */
+  function ln(y, sd) {
+    var c, c0, denominator, e, numerator, sum, t, wpr, x2,
+      n = 1,
+      guard = 10,
+      x = y,
+      xd = x.d,
+      Ctor = x.constructor,
+      pr = Ctor.precision;
+
+    // ln(-x) = NaN
+    // ln(0) = -Infinity
+    if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));
+
+    // ln(1) = 0
+    if (x.eq(ONE)) return new Ctor(0);
+
+    if (sd == null) {
+      external = false;
+      wpr = pr;
+    } else {
+      wpr = sd;
+    }
+
+    if (x.eq(10)) {
+      if (sd == null) external = true;
+      return getLn10(Ctor, wpr);
+    }
+
+    wpr += guard;
+    Ctor.precision = wpr;
+    c = digitsToString(xd);
+    c0 = c.charAt(0);
+    e = getBase10Exponent(x);
+
+    if (Math.abs(e) < 1.5e15) {
+
+      // Argument reduction.
+      // The series converges faster the closer the argument is to 1, so using
+      // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b
+      // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,
+      // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can
+      // later be divided by this number, then separate out the power of 10 using
+      // ln(a*10^b) = ln(a) + b*ln(10).
+
+      // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).
+      //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {
+      // max n is 6 (gives 0.7 - 1.3)
+      while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {
+        x = x.times(y);
+        c = digitsToString(x.d);
+        c0 = c.charAt(0);
+        n++;
+      }
+
+      e = getBase10Exponent(x);
+
+      if (c0 > 1) {
+        x = new Ctor('0.' + c);
+        e++;
+      } else {
+        x = new Ctor(c0 + '.' + c.slice(1));
+      }
+    } else {
+
+      // The argument reduction method above may result in overflow if the argument y is a massive
+      // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this
+      // function using ln(x*10^e) = ln(x) + e*ln(10).
+      t = getLn10(Ctor, wpr + 2, pr).times(e + '');
+      x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);
+
+      Ctor.precision = pr;
+      return sd == null ? (external = true, round(x, pr)) : x;
+    }
+
+    // x is reduced to a value near 1.
+
+    // Taylor series.
+    // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)
+    // where x = (y - 1)/(y + 1)    (|x| < 1)
+    sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);
+    x2 = round(x.times(x), wpr);
+    denominator = 3;
+
+    for (;;) {
+      numerator = round(numerator.times(x2), wpr);
+      t = sum.plus(divide(numerator, new Ctor(denominator), wpr));
+
+      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {
+        sum = sum.times(2);
+
+        // Reverse the argument reduction.
+        if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));
+        sum = divide(sum, new Ctor(n), wpr);
+
+        Ctor.precision = pr;
+        return sd == null ? (external = true, round(sum, pr)) : sum;
+      }
+
+      sum = t;
+      denominator += 2;
+    }
+  }
+
+
+  /*
+   * Parse the value of a new Decimal `x` from string `str`.
+   */
+  function parseDecimal(x, str) {
+    var e, i, len;
+
+    // Decimal point?
+    if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');
+
+    // Exponential form?
+    if ((i = str.search(/e/i)) > 0) {
+
+      // Determine exponent.
+      if (e < 0) e = i;
+      e += +str.slice(i + 1);
+      str = str.substring(0, i);
+    } else if (e < 0) {
+
+      // Integer.
+      e = str.length;
+    }
+
+    // Determine leading zeros.
+    for (i = 0; str.charCodeAt(i) === 48;) ++i;
+
+    // Determine trailing zeros.
+    for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;
+    str = str.slice(i, len);
+
+    if (str) {
+      len -= i;
+      e = e - i - 1;
+      x.e = mathfloor(e / LOG_BASE);
+      x.d = [];
+
+      // Transform base
+
+      // e is the base 10 exponent.
+      // i is where to slice str to get the first word of the digits array.
+      i = (e + 1) % LOG_BASE;
+      if (e < 0) i += LOG_BASE;
+
+      if (i < len) {
+        if (i) x.d.push(+str.slice(0, i));
+        for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));
+        str = str.slice(i);
+        i = LOG_BASE - str.length;
+      } else {
+        i -= len;
+      }
+
+      for (; i--;) str += '0';
+      x.d.push(+str);
+
+      if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);
+    } else {
+
+      // Zero.
+      x.s = 0;
+      x.e = 0;
+      x.d = [0];
+    }
+
+    return x;
+  }
+
+
+  /*
+   * Round `x` to `sd` significant digits, using rounding mode `rm` if present (truncate otherwise).
+   */
+   function round(x, sd, rm) {
+    var i, j, k, n, rd, doRound, w, xdi,
+      xd = x.d;
+
+    // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.
+    // w: the word of xd which contains the rounding digit, a base 1e7 number.
+    // xdi: the index of w within xd.
+    // n: the number of digits of w.
+    // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if
+    // they had leading zeros)
+    // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).
+
+    // Get the length of the first word of the digits array xd.
+    for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;
+    i = sd - n;
+
+    // Is the rounding digit in the first word of xd?
+    if (i < 0) {
+      i += LOG_BASE;
+      j = sd;
+      w = xd[xdi = 0];
+    } else {
+      xdi = Math.ceil((i + 1) / LOG_BASE);
+      k = xd.length;
+      if (xdi >= k) return x;
+      w = k = xd[xdi];
+
+      // Get the number of digits of w.
+      for (n = 1; k >= 10; k /= 10) n++;
+
+      // Get the index of rd within w.
+      i %= LOG_BASE;
+
+      // Get the index of rd within w, adjusted for leading zeros.
+      // The number of leading zeros of w is given by LOG_BASE - n.
+      j = i - LOG_BASE + n;
+    }
+
+    if (rm !== void 0) {
+      k = mathpow(10, n - j - 1);
+
+      // Get the rounding digit at index j of w.
+      rd = w / k % 10 | 0;
+
+      // Are there any non-zero digits after the rounding digit?
+      doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;
+
+      // The expression `w % mathpow(10, n - j - 1)` returns all the digits of w to the right of the
+      // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give
+      // 714.
+
+      doRound = rm < 4
+        ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
+        : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&
+
+          // Check whether the digit to the left of the rounding digit is odd.
+          ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||
+            rm == (x.s < 0 ? 8 : 7));
+    }
+
+    if (sd < 1 || !xd[0]) {
+      if (doRound) {
+        k = getBase10Exponent(x);
+        xd.length = 1;
+
+        // Convert sd to decimal places.
+        sd = sd - k - 1;
+
+        // 1, 0.1, 0.01, 0.001, 0.0001 etc.
+        xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);
+        x.e = mathfloor(-sd / LOG_BASE) || 0;
+      } else {
+        xd.length = 1;
+
+        // Zero.
+        xd[0] = x.e = x.s = 0;
+      }
+
+      return x;
+    }
+
+    // Remove excess digits.
+    if (i == 0) {
+      xd.length = xdi;
+      k = 1;
+      xdi--;
+    } else {
+      xd.length = xdi + 1;
+      k = mathpow(10, LOG_BASE - i);
+
+      // E.g. 56700 becomes 56000 if 7 is the rounding digit.
+      // j > 0 means i > number of leading zeros of w.
+      xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;
+    }
+
+    if (doRound) {
+      for (;;) {
+
+        // Is the digit to be rounded up in the first word of xd?
+        if (xdi == 0) {
+          if ((xd[0] += k) == BASE) {
+            xd[0] = 1;
+            ++x.e;
+          }
+
+          break;
+        } else {
+          xd[xdi] += k;
+          if (xd[xdi] != BASE) break;
+          xd[xdi--] = 0;
+          k = 1;
+        }
+      }
+    }
+
+    // Remove trailing zeros.
+    for (i = xd.length; xd[--i] === 0;) xd.pop();
+
+    if (external && (x.e > MAX_E || x.e < -MAX_E)) {
+      throw Error(exponentOutOfRange + getBase10Exponent(x));
+    }
+
+    return x;
+  }
+
+
+  function subtract(x, y) {
+    var d, e, i, j, k, len, xd, xe, xLTy, yd,
+      Ctor = x.constructor,
+      pr = Ctor.precision;
+
+    // Return y negated if x is zero.
+    // Return x if y is zero and x is non-zero.
+    if (!x.s || !y.s) {
+      if (y.s) y.s = -y.s;
+      else y = new Ctor(x);
+      return external ? round(y, pr) : y;
+    }
+
+    xd = x.d;
+    yd = y.d;
+
+    // x and y are non-zero numbers with the same sign.
+
+    e = y.e;
+    xe = x.e;
+    xd = xd.slice();
+    k = xe - e;
+
+    // If exponents differ...
+    if (k) {
+      xLTy = k < 0;
+
+      if (xLTy) {
+        d = xd;
+        k = -k;
+        len = yd.length;
+      } else {
+        d = yd;
+        e = xe;
+        len = xd.length;
+      }
+
+      // Numbers with massively different exponents would result in a very high number of zeros
+      // needing to be prepended, but this can be avoided while still ensuring correct rounding by
+      // limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.
+      i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;
+
+      if (k > i) {
+        k = i;
+        d.length = 1;
+      }
+
+      // Prepend zeros to equalise exponents.
+      d.reverse();
+      for (i = k; i--;) d.push(0);
+      d.reverse();
+
+    // Base 1e7 exponents equal.
+    } else {
+
+      // Check digits to determine which is the bigger number.
+
+      i = xd.length;
+      len = yd.length;
+      xLTy = i < len;
+      if (xLTy) len = i;
+
+      for (i = 0; i < len; i++) {
+        if (xd[i] != yd[i]) {
+          xLTy = xd[i] < yd[i];
+          break;
+        }
+      }
+
+      k = 0;
+    }
+
+    if (xLTy) {
+      d = xd;
+      xd = yd;
+      yd = d;
+      y.s = -y.s;
+    }
+
+    len = xd.length;
+
+    // Append zeros to xd if shorter.
+    // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.
+    for (i = yd.length - len; i > 0; --i) xd[len++] = 0;
+
+    // Subtract yd from xd.
+    for (i = yd.length; i > k;) {
+      if (xd[--i] < yd[i]) {
+        for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;
+        --xd[j];
+        xd[i] += BASE;
+      }
+
+      xd[i] -= yd[i];
+    }
+
+    // Remove trailing zeros.
+    for (; xd[--len] === 0;) xd.pop();
+
+    // Remove leading zeros and adjust exponent accordingly.
+    for (; xd[0] === 0; xd.shift()) --e;
+
+    // Zero?
+    if (!xd[0]) return new Ctor(0);
+
+    y.d = xd;
+    y.e = e;
+
+    //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;
+    return external ? round(y, pr) : y;
+  }
+
+
+  function toString(x, isExp, sd) {
+    var k,
+      e = getBase10Exponent(x),
+      str = digitsToString(x.d),
+      len = str.length;
+
+    if (isExp) {
+      if (sd && (k = sd - len) > 0) {
+        str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);
+      } else if (len > 1) {
+        str = str.charAt(0) + '.' + str.slice(1);
+      }
+
+      str = str + (e < 0 ? 'e' : 'e+') + e;
+    } else if (e < 0) {
+      str = '0.' + getZeroString(-e - 1) + str;
+      if (sd && (k = sd - len) > 0) str += getZeroString(k);
+    } else if (e >= len) {
+      str += getZeroString(e + 1 - len);
+      if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);
+    } else {
+      if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);
+      if (sd && (k = sd - len) > 0) {
+        if (e + 1 === len) str += '.';
+        str += getZeroString(k);
+      }
+    }
+
+    return x.s < 0 ? '-' + str : str;
+  }
+
+
+  // Does not strip trailing zeros.
+  function truncate(arr, len) {
+    if (arr.length > len) {
+      arr.length = len;
+      return true;
+    }
+  }
+
+
+  // Decimal methods
+
+
+  /*
+   *  clone
+   *  config/set
+   */
+
+
+  /*
+   * Create and return a Decimal constructor with the same configuration properties as this Decimal
+   * constructor.
+   *
+   */
+  function clone(obj) {
+    var i, p, ps;
+
+    /*
+     * The Decimal constructor and exported function.
+     * Return a new Decimal instance.
+     *
+     * value {number|string|Decimal} A numeric value.
+     *
+     */
+    function Decimal(value) {
+      var x = this;
+
+      // Decimal called without new.
+      if (!(x instanceof Decimal)) return new Decimal(value);
+
+      // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor
+      // which points to Object.
+      x.constructor = Decimal;
+
+      // Duplicate.
+      if (value instanceof Decimal) {
+        x.s = value.s;
+        x.e = value.e;
+        x.d = (value = value.d) ? value.slice() : value;
+        return;
+      }
+
+      if (typeof value === 'number') {
+
+        // Reject Infinity/NaN.
+        if (value * 0 !== 0) {
+          throw Error(invalidArgument + value);
+        }
+
+        if (value > 0) {
+          x.s = 1;
+        } else if (value < 0) {
+          value = -value;
+          x.s = -1;
+        } else {
+          x.s = 0;
+          x.e = 0;
+          x.d = [0];
+          return;
+        }
+
+        // Fast path for small integers.
+        if (value === ~~value && value < 1e7) {
+          x.e = 0;
+          x.d = [value];
+          return;
+        }
+
+        return parseDecimal(x, value.toString());
+      } else if (typeof value !== 'string') {
+        throw Error(invalidArgument + value);
+      }
+
+      // Minus sign?
+      if (value.charCodeAt(0) === 45) {
+        value = value.slice(1);
+        x.s = -1;
+      } else {
+        x.s = 1;
+      }
+
+      if (isDecimal.test(value)) parseDecimal(x, value);
+      else throw Error(invalidArgument + value);
+    }
+
+    Decimal.prototype = P;
+
+    Decimal.ROUND_UP = 0;
+    Decimal.ROUND_DOWN = 1;
+    Decimal.ROUND_CEIL = 2;
+    Decimal.ROUND_FLOOR = 3;
+    Decimal.ROUND_HALF_UP = 4;
+    Decimal.ROUND_HALF_DOWN = 5;
+    Decimal.ROUND_HALF_EVEN = 6;
+    Decimal.ROUND_HALF_CEIL = 7;
+    Decimal.ROUND_HALF_FLOOR = 8;
+
+    Decimal.clone = clone;
+    Decimal.config = Decimal.set = config;
+
+    if (obj === void 0) obj = {};
+    if (obj) {
+      ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];
+      for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];
+    }
+
+    Decimal.config(obj);
+
+    return Decimal;
+  }
+
+
+  /*
+   * Configure global settings for a Decimal constructor.
+   *
+   * `obj` is an object with one or more of the following properties,
+   *
+   *   precision  {number}
+   *   rounding   {number}
+   *   toExpNeg   {number}
+   *   toExpPos   {number}
+   *
+   * E.g. Decimal.config({ precision: 20, rounding: 4 })
+   *
+   */
+  function config(obj) {
+    if (!obj || typeof obj !== 'object') {
+      throw Error(decimalError + 'Object expected');
+    }
+    var i, p, v,
+      ps = [
+        'precision', 1, MAX_DIGITS,
+        'rounding', 0, 8,
+        'toExpNeg', -1 / 0, 0,
+        'toExpPos', 0, 1 / 0
+      ];
+
+    for (i = 0; i < ps.length; i += 3) {
+      if ((v = obj[p = ps[i]]) !== void 0) {
+        if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;
+        else throw Error(invalidArgument + p + ': ' + v);
+      }
+    }
+
+    if ((v = obj[p = 'LN10']) !== void 0) {
+        if (v == Math.LN10) this[p] = new this(v);
+        else throw Error(invalidArgument + p + ': ' + v);
+    }
+
+    return this;
+  }
+
+
+  // Create and configure initial Decimal constructor.
+  Decimal = clone(Decimal);
+
+  Decimal['default'] = Decimal.Decimal = Decimal;
+
+  // Internal constant.
+  ONE = new Decimal(1);
+
+
+  // Export.
+
+
+  // AMD.
+  if (typeof define == 'function' && define.amd) {
+    define(function () {
+      return Decimal;
+    });
+
+  // Node and other environments that support module.exports.
+  } else if (typeof module != 'undefined' && module.exports) {
+    module.exports = Decimal;
+
+    // Browser.
+  } else {
+    if (!globalScope) {
+      globalScope = typeof self != 'undefined' && self && self.self == self
+        ? self : Function('return this')();
+    }
+
+    globalScope.Decimal = Decimal;
+  }
+})(this);
Index: node_modules/decimal.js-light/decimal.min.js
===================================================================
--- node_modules/decimal.js-light/decimal.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/decimal.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+/* decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */
+!function(r){"use strict";function e(r,e){var t,n,i,o,s,u,f,c,l=r.constructor,d=l.precision;if(!r.s||!e.s)return e.s||(e=new l(r)),E?h(e,d):e;if(f=r.d,c=e.d,s=r.e,i=e.e,f=f.slice(),o=s-i){for(0>o?(n=f,o=-o,u=c.length):(n=c,i=s,u=f.length),s=Math.ceil(d/y),u=s>u?s+1:u+1,o>u&&(o=u,n.length=1),n.reverse();o--;)n.push(0);n.reverse()}for(u=f.length,o=c.length,0>u-o&&(o=u,n=c,c=f,f=n),t=0;o;)t=(f[--o]=f[o]+c[o]+t)/q|0,f[o]%=q;for(t&&(f.unshift(t),++i),u=f.length;0==f[--u];)f.pop();return e.d=f,e.e=i,E?h(e,d):e}function t(r,e,t){if(r!==~~r||e>r||r>t)throw Error(x+r)}function n(r){var e,t,n,i=r.length-1,o="",s=r[0];if(i>0){for(o+=s,e=1;i>e;e++)n=r[e]+"",t=y-n.length,t&&(o+=u(t)),o+=n;s=r[e],n=s+"",t=y-n.length,t&&(o+=u(t))}else if(0===s)return"0";for(;s%10===0;)s/=10;return o+s}function i(r,e){var t,i,s,u,f,c,l=0,d=0,a=r.constructor,g=a.precision;if(o(r)>16)throw Error(O+o(r));if(!r.s)return new a(v);for(null==e?(E=!1,c=g):c=e,f=new a(.03125);r.abs().gte(.1);)r=r.times(f),d+=5;for(i=Math.log(L(2,d))/Math.LN10*2+5|0,c+=i,t=s=u=new a(v),a.precision=c;;){if(s=h(s.times(r),c),t=t.times(++l),f=u.plus(P(s,t,c)),n(f.d).slice(0,c)===n(u.d).slice(0,c)){for(;d--;)u=h(u.times(u),c);return a.precision=g,null==e?(E=!0,h(u,g)):u}u=f}}function o(r){for(var e=r.e*y,t=r.d[0];t>=10;t/=10)e++;return e}function s(r,e,t){if(e>r.LN10.sd())throw E=!0,t&&(r.precision=t),Error(N+"LN10 precision limit exceeded");return h(new r(r.LN10),e)}function u(r){for(var e="";r--;)e+="0";return e}function f(r,e){var t,i,u,c,l,d,a,g,p,w=1,m=10,x=r,O=x.d,b=x.constructor,L=b.precision;if(x.s<1)throw Error(N+(x.s?"NaN":"-Infinity"));if(x.eq(v))return new b(0);if(null==e?(E=!1,g=L):g=e,x.eq(10))return null==e&&(E=!0),s(b,g);if(g+=m,b.precision=g,t=n(O),i=t.charAt(0),c=o(x),!(Math.abs(c)<15e14))return a=s(b,g+2,L).times(c+""),x=f(new b(i+"."+t.slice(1)),g-m).plus(a),b.precision=L,null==e?(E=!0,h(x,L)):x;for(;7>i&&1!=i||1==i&&t.charAt(1)>3;)x=x.times(r),t=n(x.d),i=t.charAt(0),w++;for(c=o(x),i>1?(x=new b("0."+t),c++):x=new b(i+"."+t.slice(1)),d=l=x=P(x.minus(v),x.plus(v),g),p=h(x.times(x),g),u=3;;){if(l=h(l.times(p),g),a=d.plus(P(l,new b(u),g)),n(a.d).slice(0,g)===n(d.d).slice(0,g))return d=d.times(2),0!==c&&(d=d.plus(s(b,g+2,L).times(c+""))),d=P(d,new b(w),g),b.precision=L,null==e?(E=!0,h(d,L)):d;d=a,u+=2}}function c(r,e){var t,n,i;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(0>t&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):0>t&&(t=e.length),n=0;48===e.charCodeAt(n);)++n;for(i=e.length;48===e.charCodeAt(i-1);)--i;if(e=e.slice(n,i)){if(i-=n,t=t-n-1,r.e=b(t/y),r.d=[],n=(t+1)%y,0>t&&(n+=y),i>n){for(n&&r.d.push(+e.slice(0,n)),i-=y;i>n;)r.d.push(+e.slice(n,n+=y));e=e.slice(n),n=y-e.length}else n-=i;for(;n--;)e+="0";if(r.d.push(+e),E&&(r.e>_||r.e<-_))throw Error(O+t)}else r.s=0,r.e=0,r.d=[0];return r}function h(r,e,t){var n,i,s,u,f,c,h,l,d=r.d;for(u=1,s=d[0];s>=10;s/=10)u++;if(n=e-u,0>n)n+=y,i=e,h=d[l=0];else{if(l=Math.ceil((n+1)/y),s=d.length,l>=s)return r;for(h=s=d[l],u=1;s>=10;s/=10)u++;n%=y,i=n-y+u}if(void 0!==t&&(s=L(10,u-i-1),f=h/s%10|0,c=0>e||void 0!==d[l+1]||h%s,c=4>t?(f||c)&&(0==t||t==(r.s<0?3:2)):f>5||5==f&&(4==t||c||6==t&&(n>0?i>0?h/L(10,u-i):0:d[l-1])%10&1||t==(r.s<0?8:7))),1>e||!d[0])return c?(s=o(r),d.length=1,e=e-s-1,d[0]=L(10,(y-e%y)%y),r.e=b(-e/y)||0):(d.length=1,d[0]=r.e=r.s=0),r;if(0==n?(d.length=l,s=1,l--):(d.length=l+1,s=L(10,y-n),d[l]=i>0?(h/L(10,u-i)%L(10,i)|0)*s:0),c)for(;;){if(0==l){(d[0]+=s)==q&&(d[0]=1,++r.e);break}if(d[l]+=s,d[l]!=q)break;d[l--]=0,s=1}for(n=d.length;0===d[--n];)d.pop();if(E&&(r.e>_||r.e<-_))throw Error(O+o(r));return r}function l(r,e){var t,n,i,o,s,u,f,c,l,d,a=r.constructor,g=a.precision;if(!r.s||!e.s)return e.s?e.s=-e.s:e=new a(r),E?h(e,g):e;if(f=r.d,d=e.d,n=e.e,c=r.e,f=f.slice(),s=c-n){for(l=0>s,l?(t=f,s=-s,u=d.length):(t=d,n=c,u=f.length),i=Math.max(Math.ceil(g/y),u)+2,s>i&&(s=i,t.length=1),t.reverse(),i=s;i--;)t.push(0);t.reverse()}else{for(i=f.length,u=d.length,l=u>i,l&&(u=i),i=0;u>i;i++)if(f[i]!=d[i]){l=f[i]<d[i];break}s=0}for(l&&(t=f,f=d,d=t,e.s=-e.s),u=f.length,i=d.length-u;i>0;--i)f[u++]=0;for(i=d.length;i>s;){if(f[--i]<d[i]){for(o=i;o&&0===f[--o];)f[o]=q-1;--f[o],f[i]+=q}f[i]-=d[i]}for(;0===f[--u];)f.pop();for(;0===f[0];f.shift())--n;return f[0]?(e.d=f,e.e=n,E?h(e,g):e):new a(0)}function d(r,e,t){var i,s=o(r),f=n(r.d),c=f.length;return e?(t&&(i=t-c)>0?f=f.charAt(0)+"."+f.slice(1)+u(i):c>1&&(f=f.charAt(0)+"."+f.slice(1)),f=f+(0>s?"e":"e+")+s):0>s?(f="0."+u(-s-1)+f,t&&(i=t-c)>0&&(f+=u(i))):s>=c?(f+=u(s+1-c),t&&(i=t-s-1)>0&&(f=f+"."+u(i))):((i=s+1)<c&&(f=f.slice(0,i)+"."+f.slice(i)),t&&(i=t-c)>0&&(s+1===c&&(f+="."),f+=u(i))),r.s<0?"-"+f:f}function a(r,e){return r.length>e?(r.length=e,!0):void 0}function g(r){function e(r){var t=this;if(!(t instanceof e))return new e(r);if(t.constructor=e,r instanceof e)return t.s=r.s,t.e=r.e,void(t.d=(r=r.d)?r.slice():r);if("number"==typeof r){if(0*r!==0)throw Error(x+r);if(r>0)t.s=1;else{if(!(0>r))return t.s=0,t.e=0,void(t.d=[0]);r=-r,t.s=-1}return r===~~r&&1e7>r?(t.e=0,void(t.d=[r])):c(t,r.toString())}if("string"!=typeof r)throw Error(x+r);if(45===r.charCodeAt(0)?(r=r.slice(1),t.s=-1):t.s=1,!D.test(r))throw Error(x+r);c(t,r)}var t,n,i;if(e.prototype=A,e.ROUND_UP=0,e.ROUND_DOWN=1,e.ROUND_CEIL=2,e.ROUND_FLOOR=3,e.ROUND_HALF_UP=4,e.ROUND_HALF_DOWN=5,e.ROUND_HALF_EVEN=6,e.ROUND_HALF_CEIL=7,e.ROUND_HALF_FLOOR=8,e.clone=g,e.config=e.set=p,void 0===r&&(r={}),r)for(i=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t<i.length;)r.hasOwnProperty(n=i[t++])||(r[n]=this[n]);return e.config(r),e}function p(r){if(!r||"object"!=typeof r)throw Error(N+"Object expected");var e,t,n,i=["precision",1,w,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(e=0;e<i.length;e+=3)if(void 0!==(n=r[t=i[e]])){if(!(b(n)===n&&n>=i[e+1]&&n<=i[e+2]))throw Error(x+t+": "+n);this[t]=n}if(void 0!==(n=r[t="LN10"])){if(n!=Math.LN10)throw Error(x+t+": "+n);this[t]=new this(n)}return this}var v,w=1e9,m={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},E=!0,N="[DecimalError] ",x=N+"Invalid argument: ",O=N+"Exponent out of range: ",b=Math.floor,L=Math.pow,D=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,q=1e7,y=7,M=9007199254740991,_=b(M/y),A={};A.absoluteValue=A.abs=function(){var r=new this.constructor(this);return r.s&&(r.s=1),r},A.comparedTo=A.cmp=function(r){var e,t,n,i,o=this;if(r=new o.constructor(r),o.s!==r.s)return o.s||-r.s;if(o.e!==r.e)return o.e>r.e^o.s<0?1:-1;for(n=o.d.length,i=r.d.length,e=0,t=i>n?n:i;t>e;++e)if(o.d[e]!==r.d[e])return o.d[e]>r.d[e]^o.s<0?1:-1;return n===i?0:n>i^o.s<0?1:-1},A.decimalPlaces=A.dp=function(){var r=this,e=r.d.length-1,t=(e-r.e)*y;if(e=r.d[e])for(;e%10==0;e/=10)t--;return 0>t?0:t},A.dividedBy=A.div=function(r){return P(this,new this.constructor(r))},A.dividedToIntegerBy=A.idiv=function(r){var e=this,t=e.constructor;return h(P(e,new t(r),0,1),t.precision)},A.equals=A.eq=function(r){return!this.cmp(r)},A.exponent=function(){return o(this)},A.greaterThan=A.gt=function(r){return this.cmp(r)>0},A.greaterThanOrEqualTo=A.gte=function(r){return this.cmp(r)>=0},A.isInteger=A.isint=function(){return this.e>this.d.length-2},A.isNegative=A.isneg=function(){return this.s<0},A.isPositive=A.ispos=function(){return this.s>0},A.isZero=function(){return 0===this.s},A.lessThan=A.lt=function(r){return this.cmp(r)<0},A.lessThanOrEqualTo=A.lte=function(r){return this.cmp(r)<1},A.logarithm=A.log=function(r){var e,t=this,n=t.constructor,i=n.precision,o=i+5;if(void 0===r)r=new n(10);else if(r=new n(r),r.s<1||r.eq(v))throw Error(N+"NaN");if(t.s<1)throw Error(N+(t.s?"NaN":"-Infinity"));return t.eq(v)?new n(0):(E=!1,e=P(f(t,o),f(r,o),o),E=!0,h(e,i))},A.minus=A.sub=function(r){var t=this;return r=new t.constructor(r),t.s==r.s?l(t,r):e(t,(r.s=-r.s,r))},A.modulo=A.mod=function(r){var e,t=this,n=t.constructor,i=n.precision;if(r=new n(r),!r.s)throw Error(N+"NaN");return t.s?(E=!1,e=P(t,r,0,1).times(r),E=!0,t.minus(e)):h(new n(t),i)},A.naturalExponential=A.exp=function(){return i(this)},A.naturalLogarithm=A.ln=function(){return f(this)},A.negated=A.neg=function(){var r=new this.constructor(this);return r.s=-r.s||0,r},A.plus=A.add=function(r){var t=this;return r=new t.constructor(r),t.s==r.s?e(t,r):l(t,(r.s=-r.s,r))},A.precision=A.sd=function(r){var e,t,n,i=this;if(void 0!==r&&r!==!!r&&1!==r&&0!==r)throw Error(x+r);if(e=o(i)+1,n=i.d.length-1,t=n*y+1,n=i.d[n]){for(;n%10==0;n/=10)t--;for(n=i.d[0];n>=10;n/=10)t++}return r&&e>t?e:t},A.squareRoot=A.sqrt=function(){var r,e,t,i,s,u,f,c=this,l=c.constructor;if(c.s<1){if(!c.s)return new l(0);throw Error(N+"NaN")}for(r=o(c),E=!1,s=Math.sqrt(+c),0==s||s==1/0?(e=n(c.d),(e.length+r)%2==0&&(e+="0"),s=Math.sqrt(e),r=b((r+1)/2)-(0>r||r%2),s==1/0?e="5e"+r:(e=s.toExponential(),e=e.slice(0,e.indexOf("e")+1)+r),i=new l(e)):i=new l(s.toString()),t=l.precision,s=f=t+3;;)if(u=i,i=u.plus(P(c,u,f+2)).times(.5),n(u.d).slice(0,f)===(e=n(i.d)).slice(0,f)){if(e=e.slice(f-3,f+1),s==f&&"4999"==e){if(h(u,t+1,0),u.times(u).eq(c)){i=u;break}}else if("9999"!=e)break;f+=4}return E=!0,h(i,t)},A.times=A.mul=function(r){var e,t,n,i,o,s,u,f,c,l=this,d=l.constructor,a=l.d,g=(r=new d(r)).d;if(!l.s||!r.s)return new d(0);for(r.s*=l.s,t=l.e+r.e,f=a.length,c=g.length,c>f&&(o=a,a=g,g=o,s=f,f=c,c=s),o=[],s=f+c,n=s;n--;)o.push(0);for(n=c;--n>=0;){for(e=0,i=f+n;i>n;)u=o[i]+g[n]*a[i-n-1]+e,o[i--]=u%q|0,e=u/q|0;o[i]=(o[i]+e)%q|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=t,E?h(r,d.precision):r},A.toDecimalPlaces=A.todp=function(r,e){var n=this,i=n.constructor;return n=new i(n),void 0===r?n:(t(r,0,w),void 0===e?e=i.rounding:t(e,0,8),h(n,r+o(n)+1,e))},A.toExponential=function(r,e){var n,i=this,o=i.constructor;return void 0===r?n=d(i,!0):(t(r,0,w),void 0===e?e=o.rounding:t(e,0,8),i=h(new o(i),r+1,e),n=d(i,!0,r+1)),n},A.toFixed=function(r,e){var n,i,s=this,u=s.constructor;return void 0===r?d(s):(t(r,0,w),void 0===e?e=u.rounding:t(e,0,8),i=h(new u(s),r+o(s)+1,e),n=d(i.abs(),!1,r+o(i)+1),s.isneg()&&!s.isZero()?"-"+n:n)},A.toInteger=A.toint=function(){var r=this,e=r.constructor;return h(new e(r),o(r)+1,e.rounding)},A.toNumber=function(){return+this},A.toPower=A.pow=function(r){var e,t,n,o,s,u,c=this,l=c.constructor,d=12,g=+(r=new l(r));if(!r.s)return new l(v);if(c=new l(c),!c.s){if(r.s<1)throw Error(N+"Infinity");return c}if(c.eq(v))return c;if(n=l.precision,r.eq(v))return h(c,n);if(e=r.e,t=r.d.length-1,u=e>=t,s=c.s,u){if((t=0>g?-g:g)<=M){for(o=new l(v),e=Math.ceil(n/y+4),E=!1;t%2&&(o=o.times(c),a(o.d,e)),t=b(t/2),0!==t;)c=c.times(c),a(c.d,e);return E=!0,r.s<0?new l(v).div(o):h(o,n)}}else if(0>s)throw Error(N+"NaN");return s=0>s&&1&r.d[Math.max(e,t)]?-1:1,c.s=1,E=!1,o=r.times(f(c,n+d)),E=!0,o=i(o),o.s=s,o},A.toPrecision=function(r,e){var n,i,s=this,u=s.constructor;return void 0===r?(n=o(s),i=d(s,n<=u.toExpNeg||n>=u.toExpPos)):(t(r,1,w),void 0===e?e=u.rounding:t(e,0,8),s=h(new u(s),r,e),n=o(s),i=d(s,n>=r||n<=u.toExpNeg,r)),i},A.toSignificantDigits=A.tosd=function(r,e){var n=this,i=n.constructor;return void 0===r?(r=i.precision,e=i.rounding):(t(r,1,w),void 0===e?e=i.rounding:t(e,0,8)),h(new i(n),r,e)},A.toString=A.valueOf=A.val=A.toJSON=function(){var r=this,e=o(r),t=r.constructor;return d(r,e<=t.toExpNeg||e>=t.toExpPos)};var P=function(){function r(r,e){var t,n=0,i=r.length;for(r=r.slice();i--;)t=r[i]*e+n,r[i]=t%q|0,n=t/q|0;return n&&r.unshift(n),r}function e(r,e,t,n){var i,o;if(t!=n)o=t>n?1:-1;else for(i=o=0;t>i;i++)if(r[i]!=e[i]){o=r[i]>e[i]?1:-1;break}return o}function t(r,e,t){for(var n=0;t--;)r[t]-=n,n=r[t]<e[t]?1:0,r[t]=n*q+r[t]-e[t];for(;!r[0]&&r.length>1;)r.shift()}return function(n,i,s,u){var f,c,l,d,a,g,p,v,w,m,E,x,O,b,L,D,M,_,A=n.constructor,P=n.s==i.s?1:-1,R=n.d,U=i.d;if(!n.s)return new A(n);if(!i.s)throw Error(N+"Division by zero");for(c=n.e-i.e,M=U.length,L=R.length,p=new A(P),v=p.d=[],l=0;U[l]==(R[l]||0);)++l;if(U[l]>(R[l]||0)&&--c,x=null==s?s=A.precision:u?s+(o(n)-o(i))+1:s,0>x)return new A(0);if(x=x/y+2|0,l=0,1==M)for(d=0,U=U[0],x++;(L>l||d)&&x--;l++)O=d*q+(R[l]||0),v[l]=O/U|0,d=O%U|0;else{for(d=q/(U[0]+1)|0,d>1&&(U=r(U,d),R=r(R,d),M=U.length,L=R.length),b=M,w=R.slice(0,M),m=w.length;M>m;)w[m++]=0;_=U.slice(),_.unshift(0),D=U[0],U[1]>=q/2&&++D;do d=0,f=e(U,w,M,m),0>f?(E=w[0],M!=m&&(E=E*q+(w[1]||0)),d=E/D|0,d>1?(d>=q&&(d=q-1),a=r(U,d),g=a.length,m=w.length,f=e(a,w,g,m),1==f&&(d--,t(a,g>M?_:U,g))):(0==d&&(f=d=1),a=U.slice()),g=a.length,m>g&&a.unshift(0),t(w,a,m),-1==f&&(m=w.length,f=e(U,w,M,m),1>f&&(d++,t(w,m>M?_:U,m))),m=w.length):0===f&&(d++,w=[0]),v[l++]=d,f&&w[0]?w[m++]=R[b]||0:(w=[R[b]],m=1);while((b++<L||void 0!==w[0])&&x--)}return v[0]||v.shift(),p.e=c,h(p,u?s+o(p)+1:s)}}();m=g(m),m["default"]=m.Decimal=m,v=new m(1),"function"==typeof define&&define.amd?define(function(){return m}):"undefined"!=typeof module&&module.exports?module.exports=m:(r||(r="undefined"!=typeof self&&self&&self.self==self?self:Function("return this")()),r.Decimal=m)}(this);
+//# sourceMappingURL=doc/decimal.js.map
Index: node_modules/decimal.js-light/decimal.mjs
===================================================================
--- node_modules/decimal.js-light/decimal.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/decimal.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1985 @@
+/*
+ *  decimal.js-light v2.5.1
+ *  An arbitrary-precision Decimal type for JavaScript.
+ *  https://github.com/MikeMcl/decimal.js-light
+ *  Copyright (c) 2020 Michael Mclaughlin <M8ch88l@gmail.com>
+ *  MIT Expat Licence
+ */
+
+
+// ------------------------------------  EDITABLE DEFAULTS  ------------------------------------- //
+
+
+// The limit on the value of `precision`, and on the value of the first argument to
+// `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.
+var MAX_DIGITS = 1e9,                        // 0 to 1e9
+
+
+  // The initial configuration properties of the Decimal constructor.
+  defaults = {
+
+    // These values must be integers within the stated ranges (inclusive).
+    // Most of these values can be changed during run-time using `Decimal.config`.
+
+    // The maximum number of significant digits of the result of a calculation or base conversion.
+    // E.g. `Decimal.config({ precision: 20 });`
+    precision: 20,                         // 1 to MAX_DIGITS
+
+    // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,
+    // `toFixed`, `toPrecision` and `toSignificantDigits`.
+    //
+    // ROUND_UP         0 Away from zero.
+    // ROUND_DOWN       1 Towards zero.
+    // ROUND_CEIL       2 Towards +Infinity.
+    // ROUND_FLOOR      3 Towards -Infinity.
+    // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.
+    // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.
+    // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.
+    // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.
+    // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
+    //
+    // E.g.
+    // `Decimal.rounding = 4;`
+    // `Decimal.rounding = Decimal.ROUND_HALF_UP;`
+    rounding: 4,                           // 0 to 8
+
+    // The exponent value at and beneath which `toString` returns exponential notation.
+    // JavaScript numbers: -7
+    toExpNeg: -7,                          // 0 to -MAX_E
+
+    // The exponent value at and above which `toString` returns exponential notation.
+    // JavaScript numbers: 21
+    toExpPos:  21,                         // 0 to MAX_E
+
+    // The natural logarithm of 10.
+    // 115 digits
+    LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'
+  },
+
+
+// ------------------------------------ END OF EDITABLE DEFAULTS -------------------------------- //
+
+
+  Decimal,
+  external = true,
+
+  decimalError = '[DecimalError] ',
+  invalidArgument = decimalError + 'Invalid argument: ',
+  exponentOutOfRange = decimalError + 'Exponent out of range: ',
+
+  mathfloor = Math.floor,
+  mathpow = Math.pow,
+
+  isDecimal = /^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
+
+  ONE,
+  BASE = 1e7,
+  LOG_BASE = 7,
+  MAX_SAFE_INTEGER = 9007199254740991,
+  MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE),    // 1286742750677284
+
+  // Decimal.prototype object
+  P = {};
+
+
+// Decimal prototype methods
+
+
+/*
+ *  absoluteValue                       abs
+ *  comparedTo                          cmp
+ *  decimalPlaces                       dp
+ *  dividedBy                           div
+ *  dividedToIntegerBy                  idiv
+ *  equals                              eq
+ *  exponent
+ *  greaterThan                         gt
+ *  greaterThanOrEqualTo                gte
+ *  isInteger                           isint
+ *  isNegative                          isneg
+ *  isPositive                          ispos
+ *  isZero
+ *  lessThan                            lt
+ *  lessThanOrEqualTo                   lte
+ *  logarithm                           log
+ *  minus                               sub
+ *  modulo                              mod
+ *  naturalExponential                  exp
+ *  naturalLogarithm                    ln
+ *  negated                             neg
+ *  plus                                add
+ *  precision                           sd
+ *  squareRoot                          sqrt
+ *  times                               mul
+ *  toDecimalPlaces                     todp
+ *  toExponential
+ *  toFixed
+ *  toInteger                           toint
+ *  toNumber
+ *  toPower                             pow
+ *  toPrecision
+ *  toSignificantDigits                 tosd
+ *  toString
+ *  valueOf                             val
+ */
+
+
+/*
+ * Return a new Decimal whose value is the absolute value of this Decimal.
+ *
+ */
+P.absoluteValue = P.abs = function () {
+  var x = new this.constructor(this);
+  if (x.s) x.s = 1;
+  return x;
+};
+
+
+/*
+ * Return
+ *   1    if the value of this Decimal is greater than the value of `y`,
+ *  -1    if the value of this Decimal is less than the value of `y`,
+ *   0    if they have the same value
+ *
+ */
+P.comparedTo = P.cmp = function (y) {
+  var i, j, xdL, ydL,
+    x = this;
+
+  y = new x.constructor(y);
+
+  // Signs differ?
+  if (x.s !== y.s) return x.s || -y.s;
+
+  // Compare exponents.
+  if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;
+
+  xdL = x.d.length;
+  ydL = y.d.length;
+
+  // Compare digit by digit.
+  for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {
+    if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;
+  }
+
+  // Compare lengths.
+  return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;
+};
+
+
+/*
+ * Return the number of decimal places of the value of this Decimal.
+ *
+ */
+P.decimalPlaces = P.dp = function () {
+  var x = this,
+    w = x.d.length - 1,
+    dp = (w - x.e) * LOG_BASE;
+
+  // Subtract the number of trailing zeros of the last word.
+  w = x.d[w];
+  if (w) for (; w % 10 == 0; w /= 10) dp--;
+
+  return dp < 0 ? 0 : dp;
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to
+ * `precision` significant digits.
+ *
+ */
+P.dividedBy = P.div = function (y) {
+  return divide(this, new this.constructor(y));
+};
+
+
+/*
+ * Return a new Decimal whose value is the integer part of dividing the value of this Decimal
+ * by the value of `y`, truncated to `precision` significant digits.
+ *
+ */
+P.dividedToIntegerBy = P.idiv = function (y) {
+  var x = this,
+    Ctor = x.constructor;
+  return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);
+};
+
+
+/*
+ * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.
+ *
+ */
+P.equals = P.eq = function (y) {
+  return !this.cmp(y);
+};
+
+
+/*
+ * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).
+ *
+ */
+P.exponent = function () {
+  return getBase10Exponent(this);
+};
+
+
+/*
+ * Return true if the value of this Decimal is greater than the value of `y`, otherwise return
+ * false.
+ *
+ */
+P.greaterThan = P.gt = function (y) {
+  return this.cmp(y) > 0;
+};
+
+
+/*
+ * Return true if the value of this Decimal is greater than or equal to the value of `y`,
+ * otherwise return false.
+ *
+ */
+P.greaterThanOrEqualTo = P.gte = function (y) {
+  return this.cmp(y) >= 0;
+};
+
+
+/*
+ * Return true if the value of this Decimal is an integer, otherwise return false.
+ *
+ */
+P.isInteger = P.isint = function () {
+  return this.e > this.d.length - 2;
+};
+
+
+/*
+ * Return true if the value of this Decimal is negative, otherwise return false.
+ *
+ */
+P.isNegative = P.isneg = function () {
+  return this.s < 0;
+};
+
+
+/*
+ * Return true if the value of this Decimal is positive, otherwise return false.
+ *
+ */
+P.isPositive = P.ispos = function () {
+  return this.s > 0;
+};
+
+
+/*
+ * Return true if the value of this Decimal is 0, otherwise return false.
+ *
+ */
+P.isZero = function () {
+  return this.s === 0;
+};
+
+
+/*
+ * Return true if the value of this Decimal is less than `y`, otherwise return false.
+ *
+ */
+P.lessThan = P.lt = function (y) {
+  return this.cmp(y) < 0;
+};
+
+
+/*
+ * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.
+ *
+ */
+P.lessThanOrEqualTo = P.lte = function (y) {
+  return this.cmp(y) < 1;
+};
+
+
+/*
+ * Return the logarithm of the value of this Decimal to the specified base, truncated to
+ * `precision` significant digits.
+ *
+ * If no base is specified, return log[10](x).
+ *
+ * log[base](x) = ln(x) / ln(base)
+ *
+ * The maximum error of the result is 1 ulp (unit in the last place).
+ *
+ * [base] {number|string|Decimal} The base of the logarithm.
+ *
+ */
+P.logarithm = P.log = function (base) {
+  var r,
+    x = this,
+    Ctor = x.constructor,
+    pr = Ctor.precision,
+    wpr = pr + 5;
+
+  // Default base is 10.
+  if (base === void 0) {
+    base = new Ctor(10);
+  } else {
+    base = new Ctor(base);
+
+    // log[-b](x) = NaN
+    // log[0](x)  = NaN
+    // log[1](x)  = NaN
+    if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');
+  }
+
+  // log[b](-x) = NaN
+  // log[b](0) = -Infinity
+  if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));
+
+  // log[b](1) = 0
+  if (x.eq(ONE)) return new Ctor(0);
+
+  external = false;
+  r = divide(ln(x, wpr), ln(base, wpr), wpr);
+  external = true;
+
+  return round(r, pr);
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to
+ * `precision` significant digits.
+ *
+ */
+P.minus = P.sub = function (y) {
+  var x = this;
+  y = new x.constructor(y);
+  return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to
+ * `precision` significant digits.
+ *
+ */
+P.modulo = P.mod = function (y) {
+  var q,
+    x = this,
+    Ctor = x.constructor,
+    pr = Ctor.precision;
+
+  y = new Ctor(y);
+
+  // x % 0 = NaN
+  if (!y.s) throw Error(decimalError + 'NaN');
+
+  // Return x if x is 0.
+  if (!x.s) return round(new Ctor(x), pr);
+
+  // Prevent rounding of intermediate calculations.
+  external = false;
+  q = divide(x, y, 0, 1).times(y);
+  external = true;
+
+  return x.minus(q);
+};
+
+
+/*
+ * Return a new Decimal whose value is the natural exponential of the value of this Decimal,
+ * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`
+ * significant digits.
+ *
+ */
+P.naturalExponential = P.exp = function () {
+  return exp(this);
+};
+
+
+/*
+ * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,
+ * truncated to `precision` significant digits.
+ *
+ */
+P.naturalLogarithm = P.ln = function () {
+  return ln(this);
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by
+ * -1.
+ *
+ */
+P.negated = P.neg = function () {
+  var x = new this.constructor(this);
+  x.s = -x.s || 0;
+  return x;
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to
+ * `precision` significant digits.
+ *
+ */
+P.plus = P.add = function (y) {
+  var x = this;
+  y = new x.constructor(y);
+  return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));
+};
+
+
+/*
+ * Return the number of significant digits of the value of this Decimal.
+ *
+ * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.
+ *
+ */
+P.precision = P.sd = function (z) {
+  var e, sd, w,
+    x = this;
+
+  if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);
+
+  e = getBase10Exponent(x) + 1;
+  w = x.d.length - 1;
+  sd = w * LOG_BASE + 1;
+  w = x.d[w];
+
+  // If non-zero...
+  if (w) {
+
+    // Subtract the number of trailing zeros of the last word.
+    for (; w % 10 == 0; w /= 10) sd--;
+
+    // Add the number of digits of the first word.
+    for (w = x.d[0]; w >= 10; w /= 10) sd++;
+  }
+
+  return z && e > sd ? e : sd;
+};
+
+
+/*
+ * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`
+ * significant digits.
+ *
+ */
+P.squareRoot = P.sqrt = function () {
+  var e, n, pr, r, s, t, wpr,
+    x = this,
+    Ctor = x.constructor;
+
+  // Negative or zero?
+  if (x.s < 1) {
+    if (!x.s) return new Ctor(0);
+
+    // sqrt(-x) = NaN
+    throw Error(decimalError + 'NaN');
+  }
+
+  e = getBase10Exponent(x);
+  external = false;
+
+  // Initial estimate.
+  s = Math.sqrt(+x);
+
+  // Math.sqrt underflow/overflow?
+  // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
+  if (s == 0 || s == 1 / 0) {
+    n = digitsToString(x.d);
+    if ((n.length + e) % 2 == 0) n += '0';
+    s = Math.sqrt(n);
+    e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);
+
+    if (s == 1 / 0) {
+      n = '5e' + e;
+    } else {
+      n = s.toExponential();
+      n = n.slice(0, n.indexOf('e') + 1) + e;
+    }
+
+    r = new Ctor(n);
+  } else {
+    r = new Ctor(s.toString());
+  }
+
+  pr = Ctor.precision;
+  s = wpr = pr + 3;
+
+  // Newton-Raphson iteration.
+  for (;;) {
+    t = r;
+    r = t.plus(divide(x, t, wpr + 2)).times(0.5);
+
+    if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {
+      n = n.slice(wpr - 3, wpr + 1);
+
+      // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or
+      // 4999, i.e. approaching a rounding boundary, continue the iteration.
+      if (s == wpr && n == '4999') {
+
+        // On the first iteration only, check to see if rounding up gives the exact result as the
+        // nines may infinitely repeat.
+        round(t, pr + 1, 0);
+
+        if (t.times(t).eq(x)) {
+          r = t;
+          break;
+        }
+      } else if (n != '9999') {
+        break;
+      }
+
+      wpr += 4;
+    }
+  }
+
+  external = true;
+
+  return round(r, pr);
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to
+ * `precision` significant digits.
+ *
+ */
+P.times = P.mul = function (y) {
+  var carry, e, i, k, r, rL, t, xdL, ydL,
+    x = this,
+    Ctor = x.constructor,
+    xd = x.d,
+    yd = (y = new Ctor(y)).d;
+
+  // Return 0 if either is 0.
+  if (!x.s || !y.s) return new Ctor(0);
+
+  y.s *= x.s;
+  e = x.e + y.e;
+  xdL = xd.length;
+  ydL = yd.length;
+
+  // Ensure xd points to the longer array.
+  if (xdL < ydL) {
+    r = xd;
+    xd = yd;
+    yd = r;
+    rL = xdL;
+    xdL = ydL;
+    ydL = rL;
+  }
+
+  // Initialise the result array with zeros.
+  r = [];
+  rL = xdL + ydL;
+  for (i = rL; i--;) r.push(0);
+
+  // Multiply!
+  for (i = ydL; --i >= 0;) {
+    carry = 0;
+    for (k = xdL + i; k > i;) {
+      t = r[k] + yd[i] * xd[k - i - 1] + carry;
+      r[k--] = t % BASE | 0;
+      carry = t / BASE | 0;
+    }
+
+    r[k] = (r[k] + carry) % BASE | 0;
+  }
+
+  // Remove trailing zeros.
+  for (; !r[--rL];) r.pop();
+
+  if (carry) ++e;
+  else r.shift();
+
+  y.d = r;
+  y.e = e;
+
+  return external ? round(y, Ctor.precision) : y;
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`
+ * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.
+ *
+ * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.
+ *
+ * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+ * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+ *
+ */
+P.toDecimalPlaces = P.todp = function (dp, rm) {
+  var x = this,
+    Ctor = x.constructor;
+
+  x = new Ctor(x);
+  if (dp === void 0) return x;
+
+  checkInt32(dp, 0, MAX_DIGITS);
+
+  if (rm === void 0) rm = Ctor.rounding;
+  else checkInt32(rm, 0, 8);
+
+  return round(x, dp + getBase10Exponent(x) + 1, rm);
+};
+
+
+/*
+ * Return a string representing the value of this Decimal in exponential notation rounded to
+ * `dp` fixed decimal places using rounding mode `rounding`.
+ *
+ * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+ * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+ *
+ */
+P.toExponential = function (dp, rm) {
+  var str,
+    x = this,
+    Ctor = x.constructor;
+
+  if (dp === void 0) {
+    str = toString(x, true);
+  } else {
+    checkInt32(dp, 0, MAX_DIGITS);
+
+    if (rm === void 0) rm = Ctor.rounding;
+    else checkInt32(rm, 0, 8);
+
+    x = round(new Ctor(x), dp + 1, rm);
+    str = toString(x, true, dp + 1);
+  }
+
+  return str;
+};
+
+
+/*
+ * Return a string representing the value of this Decimal in normal (fixed-point) notation to
+ * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is
+ * omitted.
+ *
+ * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.
+ *
+ * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
+ * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+ *
+ * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.
+ * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.
+ * (-0).toFixed(3) is '0.000'.
+ * (-0.5).toFixed(0) is '-0'.
+ *
+ */
+P.toFixed = function (dp, rm) {
+  var str, y,
+    x = this,
+    Ctor = x.constructor;
+
+  if (dp === void 0) return toString(x);
+
+  checkInt32(dp, 0, MAX_DIGITS);
+
+  if (rm === void 0) rm = Ctor.rounding;
+  else checkInt32(rm, 0, 8);
+
+  y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);
+  str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);
+
+  // To determine whether to add the minus sign look at the value before it was rounded,
+  // i.e. look at `x` rather than `y`.
+  return x.isneg() && !x.isZero() ? '-' + str : str;
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using
+ * rounding mode `rounding`.
+ *
+ */
+P.toInteger = P.toint = function () {
+  var x = this,
+    Ctor = x.constructor;
+  return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);
+};
+
+
+/*
+ * Return the value of this Decimal converted to a number primitive.
+ *
+ */
+P.toNumber = function () {
+  return +this;
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,
+ * truncated to `precision` significant digits.
+ *
+ * For non-integer or very large exponents pow(x, y) is calculated using
+ *
+ *   x^y = exp(y*ln(x))
+ *
+ * The maximum error is 1 ulp (unit in last place).
+ *
+ * y {number|string|Decimal} The power to which to raise this Decimal.
+ *
+ */
+P.toPower = P.pow = function (y) {
+  var e, k, pr, r, sign, yIsInt,
+    x = this,
+    Ctor = x.constructor,
+    guard = 12,
+    yn = +(y = new Ctor(y));
+
+  // pow(x, 0) = 1
+  if (!y.s) return new Ctor(ONE);
+
+  x = new Ctor(x);
+
+  // pow(0, y > 0) = 0
+  // pow(0, y < 0) = Infinity
+  if (!x.s) {
+    if (y.s < 1) throw Error(decimalError + 'Infinity');
+    return x;
+  }
+
+  // pow(1, y) = 1
+  if (x.eq(ONE)) return x;
+
+  pr = Ctor.precision;
+
+  // pow(x, 1) = x
+  if (y.eq(ONE)) return round(x, pr);
+
+  e = y.e;
+  k = y.d.length - 1;
+  yIsInt = e >= k;
+  sign = x.s;
+
+  if (!yIsInt) {
+
+    // pow(x < 0, y non-integer) = NaN
+    if (sign < 0) throw Error(decimalError + 'NaN');
+
+  // If y is a small integer use the 'exponentiation by squaring' algorithm.
+  } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {
+    r = new Ctor(ONE);
+
+    // Max k of 9007199254740991 takes 53 loop iterations.
+    // Maximum digits array length; leaves [28, 34] guard digits.
+    e = Math.ceil(pr / LOG_BASE + 4);
+
+    external = false;
+
+    for (;;) {
+      if (k % 2) {
+        r = r.times(x);
+        truncate(r.d, e);
+      }
+
+      k = mathfloor(k / 2);
+      if (k === 0) break;
+
+      x = x.times(x);
+      truncate(x.d, e);
+    }
+
+    external = true;
+
+    return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);
+  }
+
+  // Result is negative if x is negative and the last digit of integer y is odd.
+  sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;
+
+  x.s = 1;
+  external = false;
+  r = y.times(ln(x, pr + guard));
+  external = true;
+  r = exp(r);
+  r.s = sign;
+
+  return r;
+};
+
+
+/*
+ * Return a string representing the value of this Decimal rounded to `sd` significant digits
+ * using rounding mode `rounding`.
+ *
+ * Return exponential notation if `sd` is less than the number of digits necessary to represent
+ * the integer part of the value in normal notation.
+ *
+ * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
+ * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+ *
+ */
+P.toPrecision = function (sd, rm) {
+  var e, str,
+    x = this,
+    Ctor = x.constructor;
+
+  if (sd === void 0) {
+    e = getBase10Exponent(x);
+    str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);
+  } else {
+    checkInt32(sd, 1, MAX_DIGITS);
+
+    if (rm === void 0) rm = Ctor.rounding;
+    else checkInt32(rm, 0, 8);
+
+    x = round(new Ctor(x), sd, rm);
+    e = getBase10Exponent(x);
+    str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);
+  }
+
+  return str;
+};
+
+
+/*
+ * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`
+ * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if
+ * omitted.
+ *
+ * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
+ * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
+ *
+ */
+P.toSignificantDigits = P.tosd = function (sd, rm) {
+  var x = this,
+    Ctor = x.constructor;
+
+  if (sd === void 0) {
+    sd = Ctor.precision;
+    rm = Ctor.rounding;
+  } else {
+    checkInt32(sd, 1, MAX_DIGITS);
+
+    if (rm === void 0) rm = Ctor.rounding;
+    else checkInt32(rm, 0, 8);
+  }
+
+  return round(new Ctor(x), sd, rm);
+};
+
+
+/*
+ * Return a string representing the value of this Decimal.
+ *
+ * Return exponential notation if this Decimal has a positive exponent equal to or greater than
+ * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.
+ *
+ */
+P.toString = P.valueOf = P.val = P.toJSON = P[Symbol.for('nodejs.util.inspect.custom')] = function () {
+  var x = this,
+    e = getBase10Exponent(x),
+    Ctor = x.constructor;
+
+  return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);
+};
+
+
+// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.
+
+
+/*
+ *  add                 P.minus, P.plus
+ *  checkInt32          P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd
+ *  digitsToString      P.log, P.sqrt, P.pow, toString, exp, ln
+ *  divide              P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln
+ *  exp                 P.exp, P.pow
+ *  getBase10Exponent   P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,
+ *                      P.toString, divide, round, toString, exp, ln
+ *  getLn10             P.log, ln
+ *  getZeroString       digitsToString, toString
+ *  ln                  P.log, P.ln, P.pow, exp
+ *  parseDecimal        Decimal
+ *  round               P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,
+ *                      P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,
+ *                      divide, getLn10, exp, ln
+ *  subtract            P.minus, P.plus
+ *  toString            P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf
+ *  truncate            P.pow
+ *
+ *  Throws:             P.log, P.mod, P.sd, P.sqrt, P.pow,  checkInt32, divide, round,
+ *                      getLn10, exp, ln, parseDecimal, Decimal, config
+ */
+
+
+function add(x, y) {
+  var carry, d, e, i, k, len, xd, yd,
+    Ctor = x.constructor,
+    pr = Ctor.precision;
+
+  // If either is zero...
+  if (!x.s || !y.s) {
+
+    // Return x if y is zero.
+    // Return y if y is non-zero.
+    if (!y.s) y = new Ctor(x);
+    return external ? round(y, pr) : y;
+  }
+
+  xd = x.d;
+  yd = y.d;
+
+  // x and y are finite, non-zero numbers with the same sign.
+
+  k = x.e;
+  e = y.e;
+  xd = xd.slice();
+  i = k - e;
+
+  // If base 1e7 exponents differ...
+  if (i) {
+    if (i < 0) {
+      d = xd;
+      i = -i;
+      len = yd.length;
+    } else {
+      d = yd;
+      e = k;
+      len = xd.length;
+    }
+
+    // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.
+    k = Math.ceil(pr / LOG_BASE);
+    len = k > len ? k + 1 : len + 1;
+
+    if (i > len) {
+      i = len;
+      d.length = 1;
+    }
+
+    // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.
+    d.reverse();
+    for (; i--;) d.push(0);
+    d.reverse();
+  }
+
+  len = xd.length;
+  i = yd.length;
+
+  // If yd is longer than xd, swap xd and yd so xd points to the longer array.
+  if (len - i < 0) {
+    i = len;
+    d = yd;
+    yd = xd;
+    xd = d;
+  }
+
+  // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.
+  for (carry = 0; i;) {
+    carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;
+    xd[i] %= BASE;
+  }
+
+  if (carry) {
+    xd.unshift(carry);
+    ++e;
+  }
+
+  // Remove trailing zeros.
+  // No need to check for zero, as +x + +y != 0 && -x + -y != 0
+  for (len = xd.length; xd[--len] == 0;) xd.pop();
+
+  y.d = xd;
+  y.e = e;
+
+  return external ? round(y, pr) : y;
+}
+
+
+function checkInt32(i, min, max) {
+  if (i !== ~~i || i < min || i > max) {
+    throw Error(invalidArgument + i);
+  }
+}
+
+
+function digitsToString(d) {
+  var i, k, ws,
+    indexOfLastWord = d.length - 1,
+    str = '',
+    w = d[0];
+
+  if (indexOfLastWord > 0) {
+    str += w;
+    for (i = 1; i < indexOfLastWord; i++) {
+      ws = d[i] + '';
+      k = LOG_BASE - ws.length;
+      if (k) str += getZeroString(k);
+      str += ws;
+    }
+
+    w = d[i];
+    ws = w + '';
+    k = LOG_BASE - ws.length;
+    if (k) str += getZeroString(k);
+  } else if (w === 0) {
+    return '0';
+  }
+
+  // Remove trailing zeros of last w.
+  for (; w % 10 === 0;) w /= 10;
+
+  return str + w;
+}
+
+
+var divide = (function () {
+
+  // Assumes non-zero x and k, and hence non-zero result.
+  function multiplyInteger(x, k) {
+    var temp,
+      carry = 0,
+      i = x.length;
+
+    for (x = x.slice(); i--;) {
+      temp = x[i] * k + carry;
+      x[i] = temp % BASE | 0;
+      carry = temp / BASE | 0;
+    }
+
+    if (carry) x.unshift(carry);
+
+    return x;
+  }
+
+  function compare(a, b, aL, bL) {
+    var i, r;
+
+    if (aL != bL) {
+      r = aL > bL ? 1 : -1;
+    } else {
+      for (i = r = 0; i < aL; i++) {
+        if (a[i] != b[i]) {
+          r = a[i] > b[i] ? 1 : -1;
+          break;
+        }
+      }
+    }
+
+    return r;
+  }
+
+  function subtract(a, b, aL) {
+    var i = 0;
+
+    // Subtract b from a.
+    for (; aL--;) {
+      a[aL] -= i;
+      i = a[aL] < b[aL] ? 1 : 0;
+      a[aL] = i * BASE + a[aL] - b[aL];
+    }
+
+    // Remove leading zeros.
+    for (; !a[0] && a.length > 1;) a.shift();
+  }
+
+  return function (x, y, pr, dp) {
+    var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,
+      Ctor = x.constructor,
+      sign = x.s == y.s ? 1 : -1,
+      xd = x.d,
+      yd = y.d;
+
+    // Either 0?
+    if (!x.s) return new Ctor(x);
+    if (!y.s) throw Error(decimalError + 'Division by zero');
+
+    e = x.e - y.e;
+    yL = yd.length;
+    xL = xd.length;
+    q = new Ctor(sign);
+    qd = q.d = [];
+
+    // Result exponent may be one less than e.
+    for (i = 0; yd[i] == (xd[i] || 0); ) ++i;
+    if (yd[i] > (xd[i] || 0)) --e;
+
+    if (pr == null) {
+      sd = pr = Ctor.precision;
+    } else if (dp) {
+      sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;
+    } else {
+      sd = pr;
+    }
+
+    if (sd < 0) return new Ctor(0);
+
+    // Convert precision in number of base 10 digits to base 1e7 digits.
+    sd = sd / LOG_BASE + 2 | 0;
+    i = 0;
+
+    // divisor < 1e7
+    if (yL == 1) {
+      k = 0;
+      yd = yd[0];
+      sd++;
+
+      // k is the carry.
+      for (; (i < xL || k) && sd--; i++) {
+        t = k * BASE + (xd[i] || 0);
+        qd[i] = t / yd | 0;
+        k = t % yd | 0;
+      }
+
+    // divisor >= 1e7
+    } else {
+
+      // Normalise xd and yd so highest order digit of yd is >= BASE/2
+      k = BASE / (yd[0] + 1) | 0;
+
+      if (k > 1) {
+        yd = multiplyInteger(yd, k);
+        xd = multiplyInteger(xd, k);
+        yL = yd.length;
+        xL = xd.length;
+      }
+
+      xi = yL;
+      rem = xd.slice(0, yL);
+      remL = rem.length;
+
+      // Add zeros to make remainder as long as divisor.
+      for (; remL < yL;) rem[remL++] = 0;
+
+      yz = yd.slice();
+      yz.unshift(0);
+      yd0 = yd[0];
+
+      if (yd[1] >= BASE / 2) ++yd0;
+
+      do {
+        k = 0;
+
+        // Compare divisor and remainder.
+        cmp = compare(yd, rem, yL, remL);
+
+        // If divisor < remainder.
+        if (cmp < 0) {
+
+          // Calculate trial digit, k.
+          rem0 = rem[0];
+          if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);
+
+          // k will be how many times the divisor goes into the current remainder.
+          k = rem0 / yd0 | 0;
+
+          //  Algorithm:
+          //  1. product = divisor * trial digit (k)
+          //  2. if product > remainder: product -= divisor, k--
+          //  3. remainder -= product
+          //  4. if product was < remainder at 2:
+          //    5. compare new remainder and divisor
+          //    6. If remainder > divisor: remainder -= divisor, k++
+
+          if (k > 1) {
+            if (k >= BASE) k = BASE - 1;
+
+            // product = divisor * trial digit.
+            prod = multiplyInteger(yd, k);
+            prodL = prod.length;
+            remL = rem.length;
+
+            // Compare product and remainder.
+            cmp = compare(prod, rem, prodL, remL);
+
+            // product > remainder.
+            if (cmp == 1) {
+              k--;
+
+              // Subtract divisor from product.
+              subtract(prod, yL < prodL ? yz : yd, prodL);
+            }
+          } else {
+
+            // cmp is -1.
+            // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1
+            // to avoid it. If k is 1 there is a need to compare yd and rem again below.
+            if (k == 0) cmp = k = 1;
+            prod = yd.slice();
+          }
+
+          prodL = prod.length;
+          if (prodL < remL) prod.unshift(0);
+
+          // Subtract product from remainder.
+          subtract(rem, prod, remL);
+
+          // If product was < previous remainder.
+          if (cmp == -1) {
+            remL = rem.length;
+
+            // Compare divisor and new remainder.
+            cmp = compare(yd, rem, yL, remL);
+
+            // If divisor < new remainder, subtract divisor from remainder.
+            if (cmp < 1) {
+              k++;
+
+              // Subtract divisor from remainder.
+              subtract(rem, yL < remL ? yz : yd, remL);
+            }
+          }
+
+          remL = rem.length;
+        } else if (cmp === 0) {
+          k++;
+          rem = [0];
+        }    // if cmp === 1, k will be 0
+
+        // Add the next digit, k, to the result array.
+        qd[i++] = k;
+
+        // Update the remainder.
+        if (cmp && rem[0]) {
+          rem[remL++] = xd[xi] || 0;
+        } else {
+          rem = [xd[xi]];
+          remL = 1;
+        }
+
+      } while ((xi++ < xL || rem[0] !== void 0) && sd--);
+    }
+
+    // Leading zero?
+    if (!qd[0]) qd.shift();
+
+    q.e = e;
+
+    return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);
+  };
+})();
+
+
+/*
+ * Return a new Decimal whose value is the natural exponential of `x` truncated to `sd`
+ * significant digits.
+ *
+ * Taylor/Maclaurin series.
+ *
+ * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...
+ *
+ * Argument reduction:
+ *   Repeat x = x / 32, k += 5, until |x| < 0.1
+ *   exp(x) = exp(x / 2^k)^(2^k)
+ *
+ * Previously, the argument was initially reduced by
+ * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)
+ * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was
+ * found to be slower than just dividing repeatedly by 32 as above.
+ *
+ * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)
+ *
+ *  exp(x) is non-terminating for any finite, non-zero x.
+ *
+ */
+function exp(x, sd) {
+  var denominator, guard, pow, sum, t, wpr,
+    i = 0,
+    k = 0,
+    Ctor = x.constructor,
+    pr = Ctor.precision;
+
+  if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));
+
+  // exp(0) = 1
+  if (!x.s) return new Ctor(ONE);
+
+  if (sd == null) {
+    external = false;
+    wpr = pr;
+  } else {
+    wpr = sd;
+  }
+
+  t = new Ctor(0.03125);
+
+  while (x.abs().gte(0.1)) {
+    x = x.times(t);    // x = x / 2^5
+    k += 5;
+  }
+
+  // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.
+  guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;
+  wpr += guard;
+  denominator = pow = sum = new Ctor(ONE);
+  Ctor.precision = wpr;
+
+  for (;;) {
+    pow = round(pow.times(x), wpr);
+    denominator = denominator.times(++i);
+    t = sum.plus(divide(pow, denominator, wpr));
+
+    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {
+      while (k--) sum = round(sum.times(sum), wpr);
+      Ctor.precision = pr;
+      return sd == null ? (external = true, round(sum, pr)) : sum;
+    }
+
+    sum = t;
+  }
+}
+
+
+// Calculate the base 10 exponent from the base 1e7 exponent.
+function getBase10Exponent(x) {
+  var e = x.e * LOG_BASE,
+    w = x.d[0];
+
+  // Add the number of digits of the first word of the digits array.
+  for (; w >= 10; w /= 10) e++;
+  return e;
+}
+
+
+function getLn10(Ctor, sd, pr) {
+
+  if (sd > Ctor.LN10.sd()) {
+
+
+    // Reset global state in case the exception is caught.
+    external = true;
+    if (pr) Ctor.precision = pr;
+    throw Error(decimalError + 'LN10 precision limit exceeded');
+  }
+
+  return round(new Ctor(Ctor.LN10), sd);
+}
+
+
+function getZeroString(k) {
+  var zs = '';
+  for (; k--;) zs += '0';
+  return zs;
+}
+
+
+/*
+ * Return a new Decimal whose value is the natural logarithm of `x` truncated to `sd` significant
+ * digits.
+ *
+ *  ln(n) is non-terminating (n != 1)
+ *
+ */
+function ln(y, sd) {
+  var c, c0, denominator, e, numerator, sum, t, wpr, x2,
+    n = 1,
+    guard = 10,
+    x = y,
+    xd = x.d,
+    Ctor = x.constructor,
+    pr = Ctor.precision;
+
+  // ln(-x) = NaN
+  // ln(0) = -Infinity
+  if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));
+
+  // ln(1) = 0
+  if (x.eq(ONE)) return new Ctor(0);
+
+  if (sd == null) {
+    external = false;
+    wpr = pr;
+  } else {
+    wpr = sd;
+  }
+
+  if (x.eq(10)) {
+    if (sd == null) external = true;
+    return getLn10(Ctor, wpr);
+  }
+
+  wpr += guard;
+  Ctor.precision = wpr;
+  c = digitsToString(xd);
+  c0 = c.charAt(0);
+  e = getBase10Exponent(x);
+
+  if (Math.abs(e) < 1.5e15) {
+
+    // Argument reduction.
+    // The series converges faster the closer the argument is to 1, so using
+    // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b
+    // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,
+    // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can
+    // later be divided by this number, then separate out the power of 10 using
+    // ln(a*10^b) = ln(a) + b*ln(10).
+
+    // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).
+    //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {
+    // max n is 6 (gives 0.7 - 1.3)
+    while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {
+      x = x.times(y);
+      c = digitsToString(x.d);
+      c0 = c.charAt(0);
+      n++;
+    }
+
+    e = getBase10Exponent(x);
+
+    if (c0 > 1) {
+      x = new Ctor('0.' + c);
+      e++;
+    } else {
+      x = new Ctor(c0 + '.' + c.slice(1));
+    }
+  } else {
+
+    // The argument reduction method above may result in overflow if the argument y is a massive
+    // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this
+    // function using ln(x*10^e) = ln(x) + e*ln(10).
+    t = getLn10(Ctor, wpr + 2, pr).times(e + '');
+    x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);
+
+    Ctor.precision = pr;
+    return sd == null ? (external = true, round(x, pr)) : x;
+  }
+
+  // x is reduced to a value near 1.
+
+  // Taylor series.
+  // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)
+  // where x = (y - 1)/(y + 1)    (|x| < 1)
+  sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);
+  x2 = round(x.times(x), wpr);
+  denominator = 3;
+
+  for (;;) {
+    numerator = round(numerator.times(x2), wpr);
+    t = sum.plus(divide(numerator, new Ctor(denominator), wpr));
+
+    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {
+      sum = sum.times(2);
+
+      // Reverse the argument reduction.
+      if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));
+      sum = divide(sum, new Ctor(n), wpr);
+
+      Ctor.precision = pr;
+      return sd == null ? (external = true, round(sum, pr)) : sum;
+    }
+
+    sum = t;
+    denominator += 2;
+  }
+}
+
+
+/*
+ * Parse the value of a new Decimal `x` from string `str`.
+ */
+function parseDecimal(x, str) {
+  var e, i, len;
+
+  // Decimal point?
+  if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');
+
+  // Exponential form?
+  if ((i = str.search(/e/i)) > 0) {
+
+    // Determine exponent.
+    if (e < 0) e = i;
+    e += +str.slice(i + 1);
+    str = str.substring(0, i);
+  } else if (e < 0) {
+
+    // Integer.
+    e = str.length;
+  }
+
+  // Determine leading zeros.
+  for (i = 0; str.charCodeAt(i) === 48;) ++i;
+
+  // Determine trailing zeros.
+  for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;
+  str = str.slice(i, len);
+
+  if (str) {
+    len -= i;
+    e = e - i - 1;
+    x.e = mathfloor(e / LOG_BASE);
+    x.d = [];
+
+    // Transform base
+
+    // e is the base 10 exponent.
+    // i is where to slice str to get the first word of the digits array.
+    i = (e + 1) % LOG_BASE;
+    if (e < 0) i += LOG_BASE;
+
+    if (i < len) {
+      if (i) x.d.push(+str.slice(0, i));
+      for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));
+      str = str.slice(i);
+      i = LOG_BASE - str.length;
+    } else {
+      i -= len;
+    }
+
+    for (; i--;) str += '0';
+    x.d.push(+str);
+
+    if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);
+  } else {
+
+    // Zero.
+    x.s = 0;
+    x.e = 0;
+    x.d = [0];
+  }
+
+  return x;
+}
+
+
+/*
+ * Round `x` to `sd` significant digits, using rounding mode `rm` if present (truncate otherwise).
+ */
+ function round(x, sd, rm) {
+  var i, j, k, n, rd, doRound, w, xdi,
+    xd = x.d;
+
+  // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.
+  // w: the word of xd which contains the rounding digit, a base 1e7 number.
+  // xdi: the index of w within xd.
+  // n: the number of digits of w.
+  // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if
+  // they had leading zeros)
+  // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).
+
+  // Get the length of the first word of the digits array xd.
+  for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;
+  i = sd - n;
+
+  // Is the rounding digit in the first word of xd?
+  if (i < 0) {
+    i += LOG_BASE;
+    j = sd;
+    w = xd[xdi = 0];
+  } else {
+    xdi = Math.ceil((i + 1) / LOG_BASE);
+    k = xd.length;
+    if (xdi >= k) return x;
+    w = k = xd[xdi];
+
+    // Get the number of digits of w.
+    for (n = 1; k >= 10; k /= 10) n++;
+
+    // Get the index of rd within w.
+    i %= LOG_BASE;
+
+    // Get the index of rd within w, adjusted for leading zeros.
+    // The number of leading zeros of w is given by LOG_BASE - n.
+    j = i - LOG_BASE + n;
+  }
+
+  if (rm !== void 0) {
+    k = mathpow(10, n - j - 1);
+
+    // Get the rounding digit at index j of w.
+    rd = w / k % 10 | 0;
+
+    // Are there any non-zero digits after the rounding digit?
+    doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;
+
+    // The expression `w % mathpow(10, n - j - 1)` returns all the digits of w to the right of the
+    // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give
+    // 714.
+
+    doRound = rm < 4
+      ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
+      : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&
+
+        // Check whether the digit to the left of the rounding digit is odd.
+        ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||
+          rm == (x.s < 0 ? 8 : 7));
+  }
+
+  if (sd < 1 || !xd[0]) {
+    if (doRound) {
+      k = getBase10Exponent(x);
+      xd.length = 1;
+
+      // Convert sd to decimal places.
+      sd = sd - k - 1;
+
+      // 1, 0.1, 0.01, 0.001, 0.0001 etc.
+      xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);
+      x.e = mathfloor(-sd / LOG_BASE) || 0;
+    } else {
+      xd.length = 1;
+
+      // Zero.
+      xd[0] = x.e = x.s = 0;
+    }
+
+    return x;
+  }
+
+  // Remove excess digits.
+  if (i == 0) {
+    xd.length = xdi;
+    k = 1;
+    xdi--;
+  } else {
+    xd.length = xdi + 1;
+    k = mathpow(10, LOG_BASE - i);
+
+    // E.g. 56700 becomes 56000 if 7 is the rounding digit.
+    // j > 0 means i > number of leading zeros of w.
+    xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;
+  }
+
+  if (doRound) {
+    for (;;) {
+
+      // Is the digit to be rounded up in the first word of xd?
+      if (xdi == 0) {
+        if ((xd[0] += k) == BASE) {
+          xd[0] = 1;
+          ++x.e;
+        }
+
+        break;
+      } else {
+        xd[xdi] += k;
+        if (xd[xdi] != BASE) break;
+        xd[xdi--] = 0;
+        k = 1;
+      }
+    }
+  }
+
+  // Remove trailing zeros.
+  for (i = xd.length; xd[--i] === 0;) xd.pop();
+
+  if (external && (x.e > MAX_E || x.e < -MAX_E)) {
+    throw Error(exponentOutOfRange + getBase10Exponent(x));
+  }
+
+  return x;
+}
+
+
+function subtract(x, y) {
+  var d, e, i, j, k, len, xd, xe, xLTy, yd,
+    Ctor = x.constructor,
+    pr = Ctor.precision;
+
+  // Return y negated if x is zero.
+  // Return x if y is zero and x is non-zero.
+  if (!x.s || !y.s) {
+    if (y.s) y.s = -y.s;
+    else y = new Ctor(x);
+    return external ? round(y, pr) : y;
+  }
+
+  xd = x.d;
+  yd = y.d;
+
+  // x and y are non-zero numbers with the same sign.
+
+  e = y.e;
+  xe = x.e;
+  xd = xd.slice();
+  k = xe - e;
+
+  // If exponents differ...
+  if (k) {
+    xLTy = k < 0;
+
+    if (xLTy) {
+      d = xd;
+      k = -k;
+      len = yd.length;
+    } else {
+      d = yd;
+      e = xe;
+      len = xd.length;
+    }
+
+    // Numbers with massively different exponents would result in a very high number of zeros
+    // needing to be prepended, but this can be avoided while still ensuring correct rounding by
+    // limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.
+    i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;
+
+    if (k > i) {
+      k = i;
+      d.length = 1;
+    }
+
+    // Prepend zeros to equalise exponents.
+    d.reverse();
+    for (i = k; i--;) d.push(0);
+    d.reverse();
+
+  // Base 1e7 exponents equal.
+  } else {
+
+    // Check digits to determine which is the bigger number.
+
+    i = xd.length;
+    len = yd.length;
+    xLTy = i < len;
+    if (xLTy) len = i;
+
+    for (i = 0; i < len; i++) {
+      if (xd[i] != yd[i]) {
+        xLTy = xd[i] < yd[i];
+        break;
+      }
+    }
+
+    k = 0;
+  }
+
+  if (xLTy) {
+    d = xd;
+    xd = yd;
+    yd = d;
+    y.s = -y.s;
+  }
+
+  len = xd.length;
+
+  // Append zeros to xd if shorter.
+  // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.
+  for (i = yd.length - len; i > 0; --i) xd[len++] = 0;
+
+  // Subtract yd from xd.
+  for (i = yd.length; i > k;) {
+    if (xd[--i] < yd[i]) {
+      for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;
+      --xd[j];
+      xd[i] += BASE;
+    }
+
+    xd[i] -= yd[i];
+  }
+
+  // Remove trailing zeros.
+  for (; xd[--len] === 0;) xd.pop();
+
+  // Remove leading zeros and adjust exponent accordingly.
+  for (; xd[0] === 0; xd.shift()) --e;
+
+  // Zero?
+  if (!xd[0]) return new Ctor(0);
+
+  y.d = xd;
+  y.e = e;
+
+  //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;
+  return external ? round(y, pr) : y;
+}
+
+
+function toString(x, isExp, sd) {
+  var k,
+    e = getBase10Exponent(x),
+    str = digitsToString(x.d),
+    len = str.length;
+
+  if (isExp) {
+    if (sd && (k = sd - len) > 0) {
+      str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);
+    } else if (len > 1) {
+      str = str.charAt(0) + '.' + str.slice(1);
+    }
+
+    str = str + (e < 0 ? 'e' : 'e+') + e;
+  } else if (e < 0) {
+    str = '0.' + getZeroString(-e - 1) + str;
+    if (sd && (k = sd - len) > 0) str += getZeroString(k);
+  } else if (e >= len) {
+    str += getZeroString(e + 1 - len);
+    if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);
+  } else {
+    if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);
+    if (sd && (k = sd - len) > 0) {
+      if (e + 1 === len) str += '.';
+      str += getZeroString(k);
+    }
+  }
+
+  return x.s < 0 ? '-' + str : str;
+}
+
+
+// Does not strip trailing zeros.
+function truncate(arr, len) {
+  if (arr.length > len) {
+    arr.length = len;
+    return true;
+  }
+}
+
+
+// Decimal methods
+
+
+/*
+ *  clone
+ *  config/set
+ */
+
+
+/*
+ * Create and return a Decimal constructor with the same configuration properties as this Decimal
+ * constructor.
+ *
+ */
+function clone(obj) {
+  var i, p, ps;
+
+  /*
+   * The Decimal constructor and exported function.
+   * Return a new Decimal instance.
+   *
+   * value {number|string|Decimal} A numeric value.
+   *
+   */
+  function Decimal(value) {
+    var x = this;
+
+    // Decimal called without new.
+    if (!(x instanceof Decimal)) return new Decimal(value);
+
+    // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor
+    // which points to Object.
+    x.constructor = Decimal;
+
+    // Duplicate.
+    if (value instanceof Decimal) {
+      x.s = value.s;
+      x.e = value.e;
+      x.d = (value = value.d) ? value.slice() : value;
+      return;
+    }
+
+    if (typeof value === 'number') {
+
+      // Reject Infinity/NaN.
+      if (value * 0 !== 0) {
+        throw Error(invalidArgument + value);
+      }
+
+      if (value > 0) {
+        x.s = 1;
+      } else if (value < 0) {
+        value = -value;
+        x.s = -1;
+      } else {
+        x.s = 0;
+        x.e = 0;
+        x.d = [0];
+        return;
+      }
+
+      // Fast path for small integers.
+      if (value === ~~value && value < 1e7) {
+        x.e = 0;
+        x.d = [value];
+        return;
+      }
+
+      return parseDecimal(x, value.toString());
+    } else if (typeof value !== 'string') {
+      throw Error(invalidArgument + value);
+    }
+
+    // Minus sign?
+    if (value.charCodeAt(0) === 45) {
+      value = value.slice(1);
+      x.s = -1;
+    } else {
+      x.s = 1;
+    }
+
+    if (isDecimal.test(value)) parseDecimal(x, value);
+    else throw Error(invalidArgument + value);
+  }
+
+  Decimal.prototype = P;
+
+  Decimal.ROUND_UP = 0;
+  Decimal.ROUND_DOWN = 1;
+  Decimal.ROUND_CEIL = 2;
+  Decimal.ROUND_FLOOR = 3;
+  Decimal.ROUND_HALF_UP = 4;
+  Decimal.ROUND_HALF_DOWN = 5;
+  Decimal.ROUND_HALF_EVEN = 6;
+  Decimal.ROUND_HALF_CEIL = 7;
+  Decimal.ROUND_HALF_FLOOR = 8;
+
+  Decimal.clone = clone;
+  Decimal.config = Decimal.set = config;
+
+  if (obj === void 0) obj = {};
+  if (obj) {
+    ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];
+    for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];
+  }
+
+  Decimal.config(obj);
+
+  return Decimal;
+}
+
+
+/*
+ * Configure global settings for a Decimal constructor.
+ *
+ * `obj` is an object with one or more of the following properties,
+ *
+ *   precision  {number}
+ *   rounding   {number}
+ *   toExpNeg   {number}
+ *   toExpPos   {number}
+ *
+ * E.g. Decimal.config({ precision: 20, rounding: 4 })
+ *
+ */
+function config(obj) {
+  if (!obj || typeof obj !== 'object') {
+    throw Error(decimalError + 'Object expected');
+  }
+  var i, p, v,
+    ps = [
+      'precision', 1, MAX_DIGITS,
+      'rounding', 0, 8,
+      'toExpNeg', -1 / 0, 0,
+      'toExpPos', 0, 1 / 0
+    ];
+
+  for (i = 0; i < ps.length; i += 3) {
+    if ((v = obj[p = ps[i]]) !== void 0) {
+      if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;
+      else throw Error(invalidArgument + p + ': ' + v);
+    }
+  }
+
+  if ((v = obj[p = 'LN10']) !== void 0) {
+      if (v == Math.LN10) this[p] = new this(v);
+      else throw Error(invalidArgument + p + ': ' + v);
+  }
+
+  return this;
+}
+
+
+// Create and configure initial Decimal constructor.
+export var Decimal = clone(defaults);
+
+// Internal constant.
+ONE = new Decimal(1);
+
+export default Decimal;
Index: node_modules/decimal.js-light/doc/API.html
===================================================================
--- node_modules/decimal.js-light/doc/API.html	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/doc/API.html	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1312 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="Author" content="MMclaughlin">
+  <title>decimal.js-light API</title>
+  <style>
+html{font-size:100%}
+body{background:#fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;
+  line-height:1.65em;min-height:100%;margin:0}
+body,i{color:#000}
+.nav{background:#fff;position:fixed;top:0;bottom:0;left:0;width:210px;overflow-y:auto;
+  padding:15px 0 30px 15px}
+div.container{width:600px;margin:50px 0 50px 240px}
+p{margin:0 0 1em;width:600px}
+pre,ul{margin:1em 0}
+h1,h2,h3,h4,h5{margin:0;padding:1.5em 0 0}
+h1,h2{padding:.75em 0}
+h1{font:400 3em Consolas, monaco, monospace;color:#000;margin-bottom:1em}
+h2{font-size:2.25em;color:#f00}
+h3{font-size:1.75em;color:#69d2e7}
+h4{font-size:1.75em;color:#f00;padding-bottom:.75em}
+h5{font-size:1.2em;margin-bottom:.4em}
+h6{font-size:1.1em;margin-bottom:0.8em;padding:0.5em 0}
+dd dt{font-size:1.2em}
+dt{padding-top:.5em}
+dd{padding-top:.35em}
+b{font-weight:700}
+a,a:visited{color:#f00;text-decoration:none}
+a:active,a:hover{outline:0;text-decoration:underline}
+.nav a,.nav b,.nav a:visited{display:block;color:#f00;font-weight:700;margin-top:15px}
+.nav b{color:#69d2e7;margin-top:20px;cursor:default;width:auto}
+ul{list-style-type:none;padding:0 0 0 20px}
+.nav ul{line-height:14px;padding-left:0;margin:5px 0 0}
+.nav ul a,.nav ul a:visited,span{display:inline;color:#000;font-family:Verdana,Geneva,sans-serif;
+  font-size:11px;font-weight:400;margin:0}
+.inset{margin-left:20px;font-size:.9em}
+.nav li{width:auto;margin:0 0 3px}
+.alias{font-style:italic;margin-left:20px}
+table{border-collapse:collapse;border-spacing:0;border:2px solid #a7dbd8;margin:1.75em 0;padding:0}
+td,th{text-align:left;margin:0;padding:2px 5px;border:1px dotted #a7dbd8}
+th{border-top:2px solid #a7dbd8;border-bottom:2px solid #a7dbd8;color:#f00}
+code,pre{font-family:Consolas, monaco, monospace;font-weight:400}
+pre{background:#f5f5f5;white-space:pre-wrap;word-wrap:break-word;border-left:5px solid #a7dbd8;
+  padding:1px 0 1px 15px;margin:1.2em 0}
+code,.nav-title{color:#f00}
+.end{margin-bottom:25px}
+.centre{text-align:center}
+#modes,#configProps{color:#f00}
+.spacer{line-height:0px}
+#faq{margin:3em 0 0}
+li span{float:right;margin-right:10px;color:#c0c0c0}
+#js{font:inherit;color:#f00}
+  </style>
+</head>
+<body>
+
+  <div class="nav">
+
+    <a class='nav-title' href="#">API</a>
+
+    <b>CONSTRUCTOR</b>
+    <ul><li><a href="#decimal">Decimal</a></li></ul>
+
+    <a href="#methods">Methods</a>
+    <ul>
+      <li><a href="#Dclone" >clone</a></li>
+      <li><a href="#Dconfig">config</a></li>
+    </ul>
+
+    <a href="#constructor-properties">Properties</a>
+    <ul>
+      <li><a href="#precision">precision</a></li>
+      <li><a href="#rounding" >rounding</a></li>
+      <li><a href="#toExpNeg" >toExpNeg</a></li>
+      <li><a href="#toExpPos" >toExpPos</a></li>
+      <li><a href="#ln10"     >LN10</a></li>
+      <li class='spacer'>&nbsp;</li>
+      <li><a href="#modes">ROUND_UP</a></li>
+      <li><a href="#modes">ROUND_DOWN</a></li>
+      <li><a href="#modes">ROUND_CEIL</a></li>
+      <li><a href="#modes">ROUND_FLOOR</a></li>
+      <li><a href="#modes">ROUND_HALF_UP</a></li>
+      <li><a href="#modes">ROUND_HALF_DOWN</a></li>
+      <li><a href="#modes">ROUND_HALF_EVEN</a></li>
+      <li><a href="#modes">ROUND_HALF_CEIL</a></li>
+      <li><a href="#modes">ROUND_HALF_FLOOR</a></li>
+      <li><a href="#modes">EUCLID</a></li>
+    </ul>
+
+    <b> INSTANCE </b>
+
+    <a href="#prototype-methods">Methods</a>
+    <ul>
+      <li><a href="#abs"          >absoluteValue           </a><span>abs</span>  </li>
+      <li><a href="#cmp"          >comparedTo              </a><span>cmp</span>  </li>
+      <li><a href="#dp"           >decimalPlaces           </a><span>dp</span>   </li>
+      <li><a href="#div"          >dividedBy               </a><span>div</span>  </li>
+      <li><a href="#idiv"         >dividedToIntegerBy      </a><span>idiv</span> </li>
+      <li><a href="#eq"           >equals                  </a><span>eq</span>   </li>
+      <li><a href="#exp"          >exponent                </a>                  </li>
+      <li><a href="#gt"           >greaterThan             </a><span>gt</span>   </li>
+      <li><a href="#gte"          >greaterThanOrEqualTo    </a><span>gte</span>  </li>
+      <li><a href="#isint"        >isInteger               </a><span>isint</span></li>
+      <li><a href="#isneg"        >isNegative              </a><span>isneg</span></li>
+      <li><a href="#ispos"        >isPositive              </a><span>ispos</span></li>
+      <li><a href="#isZero"       >isZero                  </a>                  </li>
+      <li><a href="#lt"           >lessThan                </a><span>lt</span>   </li>
+      <li><a href="#lte"          >lessThanOrEqualTo       </a><span>lte</span>  </li>
+      <li><a href="#log"          >logarithm               </a><span>log</span>  </li>
+      <li><a href="#sub"          >minus                   </a><span>sub</span>  </li>
+      <li><a href="#mod"          >modulo                  </a><span>mod</span>  </li>
+      <li><a href="#exp"          >naturalExponential      </a><span>exp</span>  </li>
+      <li><a href="#ln"           >naturalLogarithm        </a><span>ln</span>   </li>
+      <li><a href="#neg"          >negated                 </a><span>neg</span>  </li>
+      <li><a href="#add"          >plus                    </a><span>add</span>  </li>
+      <li><a href="#sd"           >precision               </a><span>sd</span>   </li>
+      <li><a href="#sqrt"         >squareRoot              </a><span>sqrt</span> </li>
+      <li><a href="#mul"          >times                   </a><span>mul</span>  </li>
+      <li><a href="#todp"         >toDecimalPlaces         </a><span>todp</span> </li>
+      <li><a href="#toExponential">toExponential           </a>                  </li>
+      <li><a href="#toFixed"      >toFixed                 </a>                  </li>
+      <li><a href="#toInteger"    >toInteger               </a><span>toint</span></li>
+      <li><a href="#toJSON"       >toJSON                  </a>                  </li>
+      <li><a href="#toNumber"     >toNumber                </a>                  </li>
+      <li><a href="#pow"          >toPower                 </a><span>pow</span>  </li>
+      <li><a href="#toPrecision"  >toPrecision             </a>                  </li>
+      <li><a href="#tosd"         >toSignificantDigits     </a><span>tosd</span> </li>
+      <li><a href="#toString"     >toString                </a>                  </li>
+      <li><a href="#valueOf"      >valueOf                 </a><span>val</span>  </li>
+    </ul>
+
+    <a href="#instance-properties">Properties</a>
+    <ul>
+      <li><a href="#digits"  >d</a><span>digits</span></li>
+      <li><a href="#exponent">e</a><span>exponent</span></li>
+      <li><a href="#sign"    >s</a><span>sign</span></li>
+    </ul>
+
+    <a href="#Errors">Errors</a>
+    <a class='end' href="#faq">FAQ</a>
+
+  </div>
+
+  <div class="container">
+
+    <h1>decimal<span id='js'>.js</span>-light</h1>
+
+    <p>
+      The light version of <a href='https://github.com/MikeMcl/decimal.js/'>decimal.js</a>, an
+      arbitrary-precision Decimal type for JavaScript.
+    </p>
+    <p><a href='https://github.com/MikeMcl/decimal.js-light'>Hosted on GitHub</a>.</p>
+
+    <h2>API</h2>
+
+    <p>
+      See the <a href='https://github.com/MikeMcl/decimal.js'>README</a> on GitHub for a quick-start
+      introduction.
+    </p>
+    <p>
+      In all examples below, <code>var</code> and semicolons are not shown, and if a commented-out
+      value is in quotes it means <code>toString</code> has been called on the preceding expression.
+    </p><br />
+    <p>
+      When the library is loaded, it defines a single function object,
+      <a href='#decimal'><code>Decimal</code></a>, the constructor of Decimal instances.
+    </p>
+    <p>
+      <i>
+        If necessary, multiple Decimal constructors can be created, each with their own independent
+        configuration, e.g. precision and range, which applies to all Decimal instances created from
+        it.
+      </i>
+    </p>
+    <p>
+      <i>
+        A new Decimal constructor is created by calling the <code><a href='#Dclone'>clone</a></code>
+        method of an already existing Decimal constructor.
+      </i>
+    </p>
+
+
+
+    <h3 class='end'>CONSTRUCTOR</h3>
+
+    <h5 id="decimal">
+      Decimal<code class='inset'>Decimal(value) <i>&rArr; Decimal</i></code>
+    </h5>
+    <dl>
+      <dt><code>value</code>: <i>number|string|Decimal</i></dt>
+      <dd>
+        Integer or float.
+      </dd>
+      <dd>
+        The number of digits is not limited, except by JavaScript's maximum array size and, in
+        practice, the processing time required.
+      </dd>
+      <dd>
+        The maximum permissible exponent magnitude is approximately <code>9007199254740991</code>.
+      </dd>
+      <dd>
+        String values may be in exponential (floating-point), as well as normal (fixed-point)
+        notation.
+      </dd>
+      <dd>
+        In exponential notation, <code>e</code> or <code>E</code> defines a power-of-ten exponent.
+      </dd>
+    </dl>
+    <p>Returns a new Decimal object instance.</p>
+    <p>Throws on an invalid <code>value</code>.</p>
+    <pre>
+x = new Decimal(9)                       // '9'
+y = new Decimal(x)                       // '9'
+
+new Decimal('5032485723458348569331745.33434346346912144534543')
+new Decimal('4.321e+4')                  // '43210'
+new Decimal('-735.0918e-430')            // '-7.350918e-428'
+new Decimal('5.6700000')                 // '5.67'
+new Decimal('.5')                        // '0.5'
+
+new Decimal(0.046875)                    // '0.046875'
+new Decimal('0.046875000000')            // '0.046875'
+
+new Decimal(4.6875e-2)                   // '0.046875'
+new Decimal('468.75e-4')                 // '0.046875'</pre>
+
+
+
+    <h4 id="methods">Methods</h4>
+    <p>The methods of a Decimal constructor.</p>
+
+
+
+    <h5 id="Dclone">
+      clone
+      <code class='inset'>.clone([object]) <i>&rArr; Decimal constructor</i></code>
+    </h5>
+    <p><code>object</code>: <i>object</i></p>
+    <p>
+      Returns a new independent Decimal constructor with configuration settings as described by
+      <code>object</code> (see <a href='#Dconfig'><code>config</code></a>), or with the same
+      settings as <code>this</code> Decimal constructor if <code>object</code> is omitted.
+    </p>
+    <pre>Decimal.config({ precision: 5 })
+D9 = Decimal.clone({ precision: 9 })
+
+a = new Decimal(1)
+b = new D9(1)
+
+a.div(3)                           // 0.33333
+b.div(3)                           // 0.333333333
+
+// D9 = Decimal.clone({ precision: 9 }) is equivalent to:
+D9 = Decimal.clone()
+D9.config({ precision: 9 })</pre>
+    <p>
+      It is not inefficient in terms of memory usage to use multiple Decimal constructors as
+      functions are shared between them.
+    </p>
+
+
+
+    <h5 id="Dconfig">
+      config<code class='inset'>.set(object) <i>&rArr; Decimal constructor</i></code>
+    </h5>
+    <p><code>object</code>: <i>object</i></p>
+    <p>
+      Configures the 'global' settings for <code>this</code> particular Decimal constructor, i.e.
+      the settings which apply to operations performed on the Decimal instances created by it.
+    </p>
+    <p>Returns <code>this</code> Decimal constructor.</p>
+    <p>
+      The configuration object, <code>object</code>, can contain some or all of the properties
+      described in detail at <a href="#constructor-properties">Properties</a> and shown in the
+      example below.
+    </p>
+    <p>
+      The values of the configuration object properties are checked for validity and then stored as
+      equivalently-named properties of <code>this</code> Decimal constructor.
+    </p>
+    <p>Throws on an invalid <code>object</code> or configuration property value.</p>
+    <pre>
+// Defaults
+Decimal.config({
+    precision: 20,
+    rounding: 4,
+    toExpNeg: -7,
+    toExpPos: 21,
+    LN10: new Decimal('2.30258509299404568401799145468436...')
+})
+
+Decimal.set({ rounding: Decimal.ROUND_CEIL })
+</pre>
+    <p>
+      The properties of a Decimal constructor can also be set by direct assignment, but that will
+      by-pass the validity checking that this method performs - which is not a problem if the user
+      knows that the checks are unnecessary.
+    </p>
+
+
+
+    <h4 id="constructor-properties">Properties</h4>
+    <p>The properties of a Decimal constructor.</p>
+
+
+
+    <h6 id='configProps'>Configuration properties</h6>
+    <p>
+      The values of the configuration properties <a href='#precision'><code>precision</code></a>,
+      <a href='#rounding'><code>rounding</code></a>, <a href='#toExpNeg'><code>toExpNeg</code></a>
+      and <a href='#toExpPos'><code>toExpPos</code></a> are set using the
+      <a href='#Dconfig'><code>config</code></a> method.
+    </p>
+    <p>
+      As simple object properties they can be set directly without using
+      <a href='#Dconfig'><code>config</code></a>, and it is fine to do so, but the values assigned
+      will not then be checked for validity. For example:
+    </p>
+    <pre>Decimal.config({ precision: 0 })
+// '[DecimalError] Invalid argument: precision: 0'
+
+Decimal.precision = 0
+// No error is thrown and the results of calculations are unreliable</pre>
+
+
+
+    <h5 id="precision">precision</h5>
+    <p>
+      <i>number</i>: integer, <code>1</code> to <code>1e+9</code> inclusive<br />
+      Default value: <code>20</code>
+    </p>
+    <p>The <i>maximum</i> number of significant digits of the result of an operation.</p>
+    <p>
+      All functions which return a Decimal will return the value to <code>precision</code>
+      significant digits except <a href='#decimal'><code>Decimal</code></a>,
+      <a href='#abs'><code>absoluteValue</code></a>,
+      <a href='#neg'><code>negated</code></a>, <a href='#round'><code>toInteger</code></a>, and
+      <a href='#todp'><code>toDecimalPlaces</code></a>.
+    </p>
+    <pre>Decimal.config({ precision: 5 })
+Decimal.precision                  // 5</pre>
+
+
+
+    <h5 id="rounding">rounding</h5>
+    <p>
+      <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive<br />
+      Default value: <code>4</code> <a href="#modes">(<code>ROUND_HALF_UP</code>)</a>
+    </p>
+    <p>
+      The default rounding mode used by <a href='#round'><code>toInteger</code></a>,
+      <a href='#todp'><code>toDecimalPlaces</code></a>,
+      <a href='#toExponential'><code>toExponential</code></a>,
+      <a href='#toFixed'><code>toFixed</code></a>,
+      <a href='#toPrecision'><code>toPrecision</code></a> and
+      <a href='#tosd'><code>toSignificantDigits</code></a>.
+    </p>
+    <p>
+      The <a href='#modes'>rounding modes</a> are available as enumerated properties of the
+      constructor.
+    </p>
+    <pre>Decimal.config({ rounding: Decimal.ROUND_UP })
+Decimal.config({ rounding: 0 })    // equivalent
+Decimal.rounding                   // 0</pre>
+
+
+
+    <h5 id="toExpNeg">toExpNeg</h5>
+    <p>
+      <i>number</i>: integer, <code>-9e15</code> to <code>0</code> inclusive<br />
+      Default value: <code>-7</code>
+    </p>
+    <p>
+      The negative exponent value at and below which <a href='#toString'><code>toString</code></a>
+      returns exponential notation.
+    </p>
+    <pre>Decimal.config({ toExpNeg: -7 })
+Decimal.toExpNeg                   // -7
+new Decimal(0.00000123)            // '0.00000123'       e is -6
+new Decimal(0.000000123)           // '1.23e-7'
+
+// Always return exponential notation:
+Decimal.config({ toExpNeg: 0 })</pre>
+    <p>
+      JavaScript numbers use exponential notation for negative exponents of <code>-7</code> and
+      below.
+    </p>
+    <p>
+      Regardless of the value of <code>toExpNeg</code>, the
+      <a href='#toFixed'><code>toFixed</code></a> method will always return a value in normal
+      notation and the <a href='#toExponential'><code>toExponential</code></a> method will always
+      return a value in exponential form.
+    </p>
+
+
+
+    <h5 id="toExpPos">toExpPos</h5>
+    <p>
+      <i>number</i>: integer, <code>0</code> to <code>9e15</code> inclusive<br />
+      Default value: <code>20</code>
+    </p>
+    <p>
+      The positive exponent value at and above which <a href='#toString'><code>toString</code></a>
+      returns exponential notation.
+    </p>
+    <pre>Decimal.config({ toExpPos: 2 })
+Decimal.toExpPos                   // 2
+new Decimal(12.3)                  // '12.3'        e is 1
+new Decimal(123)                   // '1.23e+2'
+
+// Always return exponential notation:
+Decimal.config({ toExpPos: 0 })</pre>
+    <p>
+      JavaScript numbers use exponential notation for positive exponents of <code>20</code> and
+      above.
+    </p>
+    <p>
+      Regardless of the value of <code>toExpPos</code>, the
+      <a href='#toFixed'><code>toFixed</code></a> method will always return a value in normal
+      notation and the <a href='#toExponential'><code>toExponential</code></a> method will always
+      return a value in exponential form.
+    </p>
+
+
+
+    <h5 id="ln10">LN10</h5>
+    <p>
+      <i>string|Decimal</i>: the natural logarithm of <code>10</code><br />
+      The default value has <code>115</code> digits
+    </p>
+    <p>
+      The maximum precision of the <a href='#exp'><code>naturalExponential</code></a>,
+      <a href='#ln'><code>naturalLogarithm</code></a>, <a href='#log'><code>logarithm</code></a>,
+      and <a href='#pow'><code>toPower</code></a> methods is determined by the precision of the
+      value of <code>LN10</code>.
+    </p>
+    <p>
+      The default value of <code>LN10</code> enables a maximum precision of about <code>100</code>
+      digits. To increase this, assign a new value to <code>LN10</code> using a string or Decimal
+      value with about 15 digits more than the maximum precision required.
+    </p>
+    <p>
+      An error will be thrown if the <code>LN10</code> value does not have sufficient precision to
+      enable an operation to be performed.
+    </p>
+    <pre>
+Decimal.config({ LN10: '2.3025850929940456840179914546843642076011014886287729760333279009' })
+
+Decimal.LN10.toFixed(5)             // ''2.30259'</pre>
+
+
+
+    <h6 id="modes">Rounding modes</h6>
+    <p>
+      The library's enumerated rounding modes are stored as properties of the Decimal constructor.
+      <br />They are not referenced internally by the library itself.
+    </p>
+    <p>Rounding modes 0 to 6 (inclusive) are the same as those of Java's BigDecimal class.</p>
+    <table>
+      <tr><th>Property</th><th>Value</th><th>Description</th></tr>
+      <tr><td><b>ROUND_UP</b></td><td class='centre'>0</td><td>Rounds away from zero</td></tr>
+      <tr><td><b>ROUND_DOWN</b></td><td class='centre'>1</td><td>Rounds towards zero</td></tr>
+      <tr><td><b>ROUND_CEIL</b></td><td class='centre'>2</td><td>Rounds towards Infinity</td></tr>
+      <tr><td><b>ROUND_FLOOR</b></td><td class='centre'>3</td><td>Rounds towards -Infinity</td></tr>
+      <tr>
+        <td><b>ROUND_HALF_UP</b></td><td class='centre'>4</td>
+        <td>Rounds towards nearest neighbour.<br />If equidistant, rounds away from zero</td>
+      </tr>
+      <tr>
+        <td><b>ROUND_HALF_DOWN</b></td><td class='centre'>5</td>
+        <td>Rounds towards nearest neighbour.<br />If equidistant, rounds towards zero</td>
+      </tr>
+      <tr>
+        <td><b>ROUND_HALF_EVEN</b></td><td class='centre'>6</td>
+        <td>
+          Rounds towards nearest neighbour.<br />If equidistant, rounds towards even neighbour
+        </td>
+      </tr>
+      <tr>
+        <td><b>ROUND_HALF_CEIL</b></td><td class='centre'>7</td>
+        <td>Rounds towards nearest neighbour.<br />If equidistant, rounds towards Infinity</td>
+      </tr>
+      <tr>
+        <td><b>ROUND_HALF_FLOOR</b></td><td class='centre'>8</td>
+        <td>Rounds towards nearest neighbour.<br />If equidistant, rounds towards -Infinity</td>
+      </tr>
+    </table>
+    <pre>Decimal.config({ rounding: Decimal.ROUND_CEIL })
+Decimal.config({ rounding: 2 })    // equivalent
+Decimal.rounding                   // 2</pre>
+
+
+
+
+    <h3>INSTANCE</h3>
+
+    <h4 id="prototype-methods">Methods</h4>
+    <p>The methods inherited by a Decimal instance from its constructor's prototype object.</p>
+    <p>A Decimal instance is immutable in the sense that it is not changed by its methods.</p>
+    <p>Methods that return a Decimal can be chained:</p>
+    <pre>x = new Decimal(2).times('999.999999999999999').dividedBy(4).toFixed(2)</pre>
+    <p>Methods do not round their arguments before execution.</p>
+    <p>
+      Many method names have a shorter alias. (Internally, the library always uses the shorter
+      method names.)
+    </p>
+
+
+
+    <h5 id="abs">absoluteValue<code class='inset'>.abs() <i>&rArr; Decimal</i></code></h5>
+    <p>
+      Returns a new Decimal whose value is the absolute value, i.e. the magnitude, of the value of
+      this Decimal.
+    </p>
+    <p>
+      The return value is not affected by the value of the
+      <a href='#precision'><code>precision</code></a> setting.
+    </p>
+    <pre>
+x = new Decimal(-0.8)
+y = x.absoluteValue()         // '0.8'
+z = y.abs()                   // '0.8'</pre>
+
+
+
+    <h5 id="cmp">comparedTo<code class='inset'>.cmp(x) <i>&rArr; number</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <table>
+      <tr><th>Returns</th><th>&nbsp;</th></tr>
+      <tr>
+        <td class='centre'><code>1</code></td>
+        <td>if the value of this Decimal is greater than the value of <code>x</code></td>
+      </tr>
+      <tr>
+        <td class='centre'><code>-1</code></td>
+        <td>if the value of this Decimal is less than the value of <code>x</code></td>
+      </tr>
+      <tr>
+        <td class='centre'><code>0</code></td>
+        <td>if this Decimal and <code>x</code> have the same value</td>
+      </tr>
+    </table>
+    <pre>
+x = new Decimal(4)
+y = new Decimal(5)
+x.comparedTo(y)                // -1
+x.comparedTo(x.plus(1))        // 0</pre>
+
+
+
+    <h5 id="dp">decimalPlaces<code class='inset'>.dp() <i>&rArr; number</i></code></h5>
+    <p>
+      Returns the number of decimal places, i.e. the number of digits after the decimal point, of
+      the value of this Decimal.
+    </p>
+    <pre>
+x = new Decimal(1.234)
+x.decimalPlaces()              // '3'
+y = new Decimal(987.654321)
+y.dp()                         // '6'</pre>
+
+
+
+    <h5 id="div">dividedBy<code class='inset'>.div(x) <i>&rArr; Decimal</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal divided by <code>x</code>,
+      truncated to <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <pre>
+x = new Decimal(355)
+y = new Decimal(113)
+x.dividedBy(y)             // '3.14159292035398230088'
+x.div(5)                   // '71'</pre>
+
+
+
+    <h5 id="idiv">
+      dividedToIntegerBy<code class='inset'>.idiv(x) <i>&rArr; Decimal</i></code>
+    </h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Return a new Decimal whose value is the integer part of dividing this Decimal by
+      <code>x</code>, truncated to <code><a href='#precision'>precision</a></code> significant
+      digits.
+    </p>
+    <pre>
+x = new Decimal(5)
+y = new Decimal(3)
+x.dividedToIntegerBy(y)     // '1'
+x.idiv(0.7)             // '7'</pre>
+
+
+
+    <h5 id="eq">equals<code class='inset'>.eq(x) <i>&rArr; boolean</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns <code>true</code> if the value of this Decimal equals the value of <code>x</code>,
+      otherwise returns <code>false</code>.
+    </p>
+    <p>Note: This method uses the <code>cmp</code> method internally.</p>
+    <pre>
+0 === 1e-324                     // true
+x = new Decimal(0)
+x.equals('1e-324')               // false</pre>
+
+
+
+    <h5 id="exp">exponent<code class='inset'>.exponent() <i>&rArr; number</i></code></h5>
+    <p>Returns the exponent value of this Decimal.</p>
+    <pre>
+x = new Decimal(1234.567)
+x.exponent()                     // 3</pre>
+
+
+
+    <h5 id="gt">greaterThan<code class='inset'>.gt(x) <i>&rArr; boolean</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns <code>true</code> if the value of this Decimal is greater than the value of
+      <code>x</code>, otherwise returns <code>false</code>.
+    </p>
+    <p>Note: This method uses the <code>cmp</code> method internally.</p>
+    <pre>
+0.1 &gt; (0.3 - 0.2)                            // true
+x = new Decimal(0.1)
+x.greaterThan(Decimal(0.3).minus(0.2))       // false
+new Decimal(0).gt(x)                         // false</pre>
+
+
+
+    <h5 id="gte">
+      greaterThanOrEqualTo<code class='inset'>.gte(x) <i>&rArr; boolean</i></code>
+    </h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns <code>true</code> if the value of this Decimal is greater than or equal to the value
+      of <code>x</code>, otherwise returns <code>false</code>.
+    </p>
+    <p>Note: This method uses the <code>cmp</code> method internally.</p>
+    <pre>
+(0.3 - 0.2) &gt;= 0.1                       // false
+x = new Decimal(0.3).minus(0.2)
+x.greaterThanOrEqualTo(0.1)              // true
+new Decimal(1).gte(x)                    // true</pre>
+
+
+
+    <h5 id="isint">isInteger<code class='inset'>.isint() <i>&rArr; boolean</i></code></h5>
+    <p>
+      Returns <code>true</code> if the value of this Decimal is a whole number, otherwise returns
+      <code>false</code>.
+    </p>
+    <pre>
+x = new Decimal(1)
+x.isInteger()                            // true
+y = new Decimal(123.456)
+y.isint()                                // false</pre>
+
+
+
+    <h5 id="isneg">isNegative<code class='inset'>.isneg() <i>&rArr; boolean</i></code></h5>
+    <p>
+      Returns <code>true</code> if the value of this Decimal is negative, otherwise returns
+      <code>false</code>.
+    </p>
+    <pre>
+x = new Decimal(0)
+x.isNegative()                           // false
+y = new Decimal(2)
+y.isneg                                  // false</pre>
+    <p>Note: <code>n &lt; 0</code> can be used if <code>n &lt;= -Number.MIN_VALUE</code>.</p>
+
+
+
+     <h5 id="ispos">isPositive<code class='inset'>.ispos() <i>&rArr; boolean</i></code></h5>
+    <p>
+      Returns <code>true</code> if the value of this Decimal is positive, otherwise returns
+      <code>false</code>.
+    </p>
+    <pre>
+x = new Decimal(0)
+x.isPositive()                           // false
+y = new Decimal(-2)
+y.ispos                                  // false</pre>
+    <p>Note: <code>n &lt; 0</code> can be used if <code>n &lt;= -Number.MIN_VALUE</code>.</p>
+
+
+
+    <h5 id="isZero">isZero<code class='inset'>.isZero() <i>&rArr; boolean</i></code></h5>
+    <p>
+      Returns <code>true</code> if the value of this Decimal is zero or minus zero, otherwise
+      returns <code>false</code>.
+    </p>
+    <pre>
+x = new Decimal(0)
+x.isZero()                               // true</pre>
+    <p>Note: <code>n == 0</code> can be used if <code>n &gt;= Number.MIN_VALUE</code>.</p>
+
+
+
+    <h5 id="lt">lessThan<code class='inset'>.lt(x) <i>&rArr; boolean</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns <code>true</code> if the value of this Decimal is less than the value of
+      <code>x</code>, otherwise returns <code>false</code>.
+    </p>
+    <p>Note: This method uses the <code>cmp</code> method internally.</p>
+    <pre>
+(0.3 - 0.2) &lt; 0.1                        // true
+x = new Decimal(0.3).minus(0.2)
+x.lessThan(0.1)                          // false
+new Decimal(0).lt(x)                     // true</pre>
+
+
+
+    <h5 id="lte">lessThanOrEqualTo<code class='inset'>.lte(x) <i>&rArr; boolean</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns <code>true</code> if the value of this Decimal is less than or equal to the value of
+      <code>x</code>, otherwise returns <code>false</code>.
+    </p>
+    <p>Note: This method uses the <code>cmp</code> method internally.</p>
+    <pre>
+0.1 &lt;= (0.3 - 0.2)                              // false
+x = new Decimal(0.1)
+x.lessThanOrEqualTo(Decimal(0.3).minus(0.2))    // true
+new Decimal(-1).lte(x)                          // true</pre>
+
+
+
+    <h5 id="log">logarithm<code class='inset'>.log(x) <i>&rArr; Decimal</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns a new Decimal whose value is the base <code>x</code> logarithm of the value of this
+      Decimal, truncated to <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <p>
+      If <code>x</code> is omitted, the base 10 logarithm of the value of this Decimal will be
+      returned.
+    </p>
+    <pre>
+x = new Decimal(1000)
+x.logarithm()                            // '3'
+y = new Decimal(256)
+y.log(2)                                 // '8'</pre>
+    <p>The maximum error will be <code>1</code> <i>ulp</i> (unit in the last place).</p>
+    <p>Logarithms to base <code>2</code> or <code>10</code> will always be correct.</p>
+    <p>The performance of this method degrades exponentially with increasing digits.</p>
+
+
+
+    <h5 id="sub">minus<code class='inset'>.minus(x) <i>&rArr; Decimal</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal minus <code>x</code>, truncated
+      to <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <pre>
+0.3 - 0.1                                // 0.19999999999999998
+x = new Decimal(0.3)
+x.minus(0.1)                             // '0.2'</pre>
+
+
+
+    <h5 id="mod">modulo<code class='inset'>.mod(x) <i>&rArr; Decimal</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal modulo <code>x</code>,
+      truncated to <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <pre>
+1 % 0.9                                  // 0.09999999999999998
+x = new Decimal(1)
+y = x.modulo(0.9)                            // '0.1'</pre>
+
+
+
+    <h5 id="exp">naturalExponential<code class='inset'>.exp() <i>&rArr; Decimal</i></code></h5>
+    <p>
+      Returns a new Decimal whose value is the base <code>e</code> (Euler's number, the base of the
+      natural logarithm) exponential of the value of this Decimal, truncated to
+      <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <p>
+      The <code><a href='#ln'>naturalLogarithm</a></code> function is the inverse of this function.
+    </p>
+    <pre>
+x = new Decimal(1)
+x.naturalExponential()                   // '2.7182818284590452354'
+y = new Decimal(2)
+y.exp()                                  // '7.3890560989306502272'</pre>
+    <p>The maximum error will be <code>1</code> <i>ulp</i> (unit in the last place).</p>
+    <p>The performance of this method degrades exponentially with increasing digits.</p>
+
+
+
+    <h5 id="ln">naturalLogarithm<code class='inset'>.ln() <i>&rArr; Decimal</i></code></h5>
+    <p>
+      Returns a new Decimal whose value is the natural logarithm of the value of this Decimal,
+      truncated to <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <p>
+      The natural logarithm is the inverse of the <code><a href='#exp'>naturalExponential</a></code>
+      function.
+    </p>
+    <pre>
+x = new Decimal(10)
+x.naturalLogarithm()                     // '2.3026'
+y = new Decimal('1.23e+30')
+y.ln()                                   // '69.28'</pre>
+    <p>
+      The mathematical result of the natural logarithm function is non-terminating, unless its
+      argument is <code>1</code>.
+    </p>
+    <p>
+      The time-taken by this method increases exponentially with increasing digits.
+    </p>
+    <p>
+      See <a href='#ln10'>LN10</a> to configure the maximum precision available.
+    </p>
+
+
+
+    <h5 id="neg">negated<code class='inset'>.neg() <i>&rArr; Decimal</i></code></h5>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal negated, i.e. multiplied by
+      <code>-1</code>.
+    </p>
+    <p>
+      The return value is not affected by the value of the
+      <a href='#precision'><code>precision</code></a> setting.
+    </p>
+    <pre>
+x = new Decimal(1.8)
+x.negated()                              // '-1.8'
+y = new Decimal(-1.3)
+y.neg()                                  // '1.3'</pre>
+
+
+
+    <h5 id="add">plus<code class='inset'>.plus(x) <i>&rArr; Decimal</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal plus <code>x</code>, truncated
+      to <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <pre>
+0.1 + 0.2                                // 0.30000000000000004
+x = new Decimal(0.1)
+y = x.plus(0.2)                          // '0.3'
+new Decimal(0.7).plus(x).plus(y)         // '1.1'</pre>
+
+
+
+    <h5 id="sd">precision<code class='inset'>.sd([include_zeros]) <i>&rArr; number</i></code></h5>
+    <p>Returns the number of significant digits of the value of this Decimal.</p>
+    <p>
+      If <code>include_zeros</code> is <code>true</code> or <code>1</code> then any trailing zeros
+      of the integer part of a number are counted as significant digits, otherwise they are not.
+    </p>
+    <pre>
+x = new Decimal(1.234)
+x.precision()                            // '4'
+y = new Decimal(987000)
+y.sd()                                   // '3'
+y.sd(true)                               // '6'</pre>
+
+
+
+    <h5 id="sqrt">squareRoot<code class='inset'>.sqrt() <i>&rArr; Decimal</i></code></h5>
+    <p>
+      Returns a new Decimal whose value is the square root of this Decimal, truncated to
+      <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <p>
+      This method is much faster than using the <a href='#pow'><code>toPower</code></a> method with
+      an exponent of <code>0.5</code>.
+    </p>
+    <pre>
+x = new Decimal(16)
+x.squareRoot()                           // '4'
+y = new Decimal(3)
+y.sqrt()                                 // '1.73205080756887729353'
+y.sqrt().eq( y.pow(0.5) )                // true</pre>
+
+
+
+    <h5 id="mul">times<code class='inset'>.times(x) <i>&rArr; Decimal</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i></p>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal times <code>x</code>,
+      truncated to <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <pre>
+0.6 * 3                                  // 1.7999999999999998
+x = new Decimal(0.6)
+y = x.times(3)                           // '1.8'
+new Decimal('7e+500').times(y)           // '1.26e+501'</pre>
+
+
+
+    <h5 id="todp">
+      toDecimalPlaces<code class='inset'>.todp([dp [, rm]]) <i>&rArr; Decimal</i></code>
+    </h5>
+    <p>
+      <code>dp</code>: <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive<br />
+      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive.
+    </p>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal rounded to a maximum of
+      <code>dp</code> decimal places using rounding mode <code>rm</code>.
+    </p>
+    <p>
+      If <code>dp</code> is omitted, the return value will have the same value as this Decimal.
+    </p>
+    <p>
+      If <code>rm</code> is omitted, rounding mode <a href='#rounding'><code>rounding</code></a>
+      is used.
+    </p>
+    <p>Throws on an invalid <code>dp</code> or <code>rm</code> value.</p>
+    <pre>
+x = new Decimal(12.24567)
+x.toDecimalPlaces(0)                // '12'
+x.toDecimalPlaces(1, 0)             // '12.3'
+
+y = new Decimal(9876.54321)
+y.todp(3)                           // '9876.543'
+y.todp(1, 0)                        // '9876.6'
+y.todp(1, Decimal.ROUND_DOWN)       // '9876.5'</pre>
+
+
+
+    <h5 id="toExponential">
+      toExponential<code class='inset'>.toExponential([dp [, rm]]) <i>&rArr; string</i></code>
+    </h5>
+    <p>
+      <code>dp</code>: <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive<br />
+      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive
+    </p>
+    <p>
+      Returns a string representing the value of this Decimal in exponential notation rounded
+      using rounding mode <code>rm</code> to <code>dp</code> decimal places, i.e with one digit
+      before the decimal point and <code>dp</code> digits after it.
+    </p>
+    <p>
+      If the value of this Decimal in exponential notation has fewer than <code>dp</code> fraction
+      digits, the return value will be appended with zeros accordingly.
+    </p>
+    <p>
+      If <code>dp</code> is omitted, the number of digits after the decimal point defaults to the
+      minimum number of digits necessary to represent the value exactly.
+    </p>
+    <p>
+      If <code>rm</code> is omitted, rounding mode <a href='#rounding'><code>rounding</code></a> is
+      used.
+    </p>
+    <p>Throws on an invalid <code>dp</code> or <code>rm</code> value.</p>
+    <pre>
+x = 45.6
+b = new Decimal(x)
+x.toExponential()              // '4.56e+1'
+y.toExponential()              // '4.56e+1'
+x.toExponential(0)             // '5e+1'
+y.toExponential(0)             // '5e+1'
+x.toExponential(1)             // '4.6e+1'
+y.toExponential(1)             // '4.6e+1'
+y.toExponential(1, 1)          // '4.5e+1'  (ROUND_DOWN)
+x.toExponential(3)             // '4.560e+1'
+y.toExponential(3)             // '4.560e+1'</pre>
+
+
+
+    <h5 id="toFixed">
+      toFixed<code class='inset'>.toFixed([dp [, rm]]) <i>&rArr; string</i></code>
+    </h5>
+    <p>
+      <code>dp</code>: <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive<br />
+      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive
+    </p>
+    <p>
+      Returns a string representing the value of this Decimal in normal (fixed-point) notation
+      rounded to <code>dp</code> decimal places using rounding mode <code>rm</code>.
+    </p>
+    <p>
+      If the value of this Decimal in normal notation has fewer than <code>dp</code> fraction
+      digits, the return value will be appended with zeros accordingly.
+    </p>
+    <p>
+      Unlike <code>Number.prototype.toFixed</code>, which returns exponential notation if a number
+      is greater or equal to <code>10<sup>21</sup></code>, this method will always return normal
+      notation.
+    </p>
+    <p>
+      If <code>dp</code> is omitted, the return value will be unrounded and in normal notation. This
+      is unlike <code>Number.prototype.toFixed</code>, which returns the value to zero decimal
+      places, but is useful when because of the current
+      <a href="#toExpNeg"><code>toExpNeg</code></a> or
+      <a href="#toExpPos"><code>toExpNeg</code></a> values,
+      <code><a href='#toString'>toString</a></code> returns exponential notation.
+    </p>
+    <p>
+      If <code>rm</code> is omitted, rounding mode <a href='#rounding'><code>rounding</code></a> is
+      used.
+    </p>
+    <p>Throws on an invalid <code>dp</code> or <code>rm</code> value.</p>
+    <pre>
+x = 3.456
+b = new Decimal(x)
+x.toFixed()              // '3'
+y.toFixed()              // '3.456'
+y.toFixed(0)             // '3'
+x.toFixed(2)             // '3.46'
+y.toFixed(2)             // '3.46'
+y.toFixed(2, 1)          // '3.45'  (ROUND_DOWN)
+x.toFixed(5)             // '3.45600'
+y.toFixed(5)             // '3.45600'</pre>
+
+
+
+    <h5 id="toInteger">toInteger<code class='inset'>.toint() <i>&rArr; Decimal</i></code></h5>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal rounded to a whole number using
+      rounding mode <a href='#rounding'><code>rounding</code></a>.
+    </p>
+    <p>
+      To emulate <code>Math.round</code>, set <a href='#rounding'><code>rounding</code></a> to
+      <code>7</code>, i.e. <a href='#modes'><code>ROUND_HALF_CEIL</code></a>.
+    </p>
+    <pre>
+Decimal.config({ rounding: 4 })
+x = 1234.5
+x.toInteger()                            // '1235'
+
+Decimal.rounding = Decimal.ROUND_DOWN
+x.toint()                                // '1234'
+x                                        // '1234.5'</pre>
+
+
+
+<h5 id="toJSON">toJSON<code class='inset'>.toJSON() <i>&rArr; string</i></code></h5>
+    <p>As <a href='#toString'><code>toString</code></a>.</p>
+
+
+
+    <h5 id="toNumber">toNumber<code class='inset'>.toNumber() <i>&rArr; number</i></code></h5>
+    <p>Returns the value of this Decimal converted to a primitive number.</p>
+    <p>
+      Type coercion with, for example, JavaScript's unary plus operator will also work, except that
+      a Decimal with the value minus zero will convert to positive zero.
+    </p>
+    <pre>
+x = new Decimal(456.789)
+x.toNumber()                   // 456.789
++x                             // 456.789
+
+y = new Decimal('45987349857634085409857349856430985')
+y.toNumber()                   // 4.598734985763409e+34</pre>
+
+
+
+    <h5 id="pow">toPower<code class='inset'>.pow(x) <i>&rArr; Decimal</i></code></h5>
+    <p><code>x</code>: <i>number|string|Decimal</i>: integer or non-integer</p>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal raised to the power
+      <code>x</code>, truncated to <a href='#precision'><code>precision</code></a> significant
+      digits.
+    </p>
+    <p>
+      The performance of this method degrades exponentially with increasing digits.<br />
+      For non-integer exponents in particular, the performance of this method may not be adequate.
+    </p>
+    <p>The maximum error will be <code>1</code> <i>ulp</i> (unit in the last place). </p>
+    <pre>
+Math.pow(0.7, 2)               // 0.48999999999999994
+x = new Decimal(0.7)
+x.toPower(2)                   // '0.49'
+new Decimal(3).pow(-2)         // '0.11111111111111111111'
+
+new Decimal(1217652.23).pow('98765.489305603941')
+// '4.8227010515242461181e+601039'</pre>
+
+
+
+
+    <h5 id="toPrecision">
+      toPrecision<code class='inset'>.toPrecision([sd [, rm]]) <i>&rArr; string</i></code>
+    </h5>
+    <p>
+      <code>sd</code>: <i>number</i>: integer, <code>1</code> to <code>1e+9</code> inclusive<br />
+      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive
+    </p>
+    <p>
+      Returns a string representing the value of this Decimal rounded to <code>sd</code> significant
+      digits using rounding mode <code>rm</code>.
+    </p>
+    <p>
+      If <code>sd</code> is less than the number of digits necessary to represent the integer part
+      of the value in normal (fixed-point) notation, then exponential notation is used.
+    </p>
+    <p>
+      If <code>sd</code> is omitted, the return value is the same as
+      <code><a href='#toString'>toString</a></code>.
+    </p>
+    <p>
+      If <code>rm</code> is omitted, rounding mode <a href='#rounding'><code>rounding</code></a> is
+      used.
+    </p>
+    <p>Throws on an invalid <code>sd</code> or <code>rm</code> value.</p>
+    <pre>
+x = 45.6
+b = new Decimal(x)
+x.toPrecision()                          // '45.6'
+y.toPrecision()                          // '45.6'
+x.toPrecision(1)                         // '5e+1'
+y.toPrecision(1)                         // '5e+1'
+y.toPrecision(2, 0)                      // '4.6e+1'  (ROUND_UP)
+y.toPrecision(2, 1)                      // '4.5e+1'  (ROUND_DOWN)
+x.toPrecision(5)                         // '45.600'
+y.toPrecision(5)                         // '45.600'</pre>
+
+
+
+    <h5 id="tosd">
+      toSignificantDigits<code class='inset'>.tosd([sd [, rm]]) <i>&rArr; Decimal</i></code>
+    </h5>
+    <p>
+      <code>sd</code>: <i>number</i>: integer, <code>1</code> to <code>1e+9</code> inclusive.<br />
+      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive.
+    </p>
+    <p>
+      Returns a new Decimal whose value is the value of this Decimal rounded to a maximum of
+      <code>sd</code> significant digits using rounding mode <code>rm</code>.
+    </p>
+    <p>
+      If <code>sd</code> is omitted, the return value will be rounded to
+      <a href='#precision'><code>precision</code></a> significant digits.
+    </p>
+    <p>
+      If <code>rm</code> is omitted, rounding mode <a href='#rounding'><code>rounding</code></a>
+      will be used.
+    </p>
+    <p>Throws on an invalid <code>sd</code> or <code>rm</code> value.</p>
+    <pre>
+Decimal.config({ precision: 5, rounding: 4 })
+x = new Decimal(9876.54321)
+
+x.toSignificantDigits()                          // '9876.5'
+x.toSignificantDigits(6)                         // '9876.54'
+x.toSignificantDigits(6, Decimal.ROUND_UP)       // '9876.55'
+x.tosd(2)                                        // '9900'
+x.tosd(2, 1)                                     // '9800'
+x                                                // '9876.54321'</pre>
+
+
+
+    <h5 id="toString">toString<code class='inset'>.toString() <i>&rArr; string</i></code></h5>
+    <p>Returns a string representing the value of this Decimal.</p>
+    <p>
+      If this Decimal has a positive exponent that is equal to or greater than
+      <a href="#toExpPos"><code>toExpPos</code></a>, or a negative exponent equal to or less than
+      <a href="#toExpPos"><code>toExpNeg</code></a>, then exponential notation will be returned.
+    </p>
+    <pre>
+x = new Decimal(750000)
+x.toString()                             // '750000'
+Decimal.config({ toExpPos: 5 })
+x.toString()                             // '7.5e+5'
+
+Decimal.config({ precision: 4 });
+y = new Decimal('1.23456789')
+y.toString()                             // '1.23456789'</pre>
+
+
+
+    <h5 id="valueOf">valueOf<code class='inset'>.val() <i>&rArr; string</i></code></h5>
+    <p>As <a href='#toString'><code>toString</code></a>.</p>
+
+
+
+
+
+    <h4 id="instance-properties">Properties</h4>
+    <p>
+      The value of a Decimal is stored in a normalised base <code>10000000</code> floating point
+      format.
+    </p>
+    <p>
+      A Decimal instance is an object with three properties:
+    </p>
+    <table>
+      <tr>
+        <th>Property</th>
+        <th>Description</th>
+        <th>Type</th>
+        <th>Value</th>
+      </tr>
+      <tr>
+        <td class='centre' id='digits'><b>d</b></td>
+        <td>digits</td>
+        <td><i>number</i><code style='color:#000'>[]</code></td>
+        <td> Array of integers, each <code>0</code> - <code>1e7</code></td>
+      </tr>
+      <tr>
+        <td class='centre' id='exponent'><b>e</b></td>
+        <td>exponent*</td>
+        <td><i>number</i></td>
+        <td>Integer, <code>-1286742750677284</code> to <code>1286742750677284</code> inclusive</td>
+      </tr>
+      <tr>
+        <td class='centre' id='sign'><b>s</b></td>
+        <td>sign</td>
+        <td><i>number</i></td>
+        <td><code>-1</code>, <code>0</code>, or <code>1</code></td>
+      </tr>
+    </table>
+     <p>
+      *This is the exponent in base <code>10000000</code>. To get the base 10 exponent, use the
+      <a href='#exp'><code>exponent</code></a> method.
+    </p>
+    <p>The properties are best considered to be read-only.</p>
+    <p>
+      As with JavaScript numbers, the original exponent and fractional trailing zeros of a number
+      are not preserved.
+    </p>
+    <pre>
+x = new Decimal(0.123)                   // '0.123'
+x.toExponential()                        // '1.23e-1'
+x.d                                      // [ 1230000 ]
+x.e                                      // -1
+x.s                                      // 1
+
+y = new Number(-123.4567000e+2)          // '-12345.67'
+y.toExponential()                        // '-1.234567e+4'
+z = new Decimal('-123.4567000e+2')       // '-12345.67'
+z.toExponential()                        // '-1.234567e+4'
+z.d                                      // [ 12345, 6700000 ]
+z.e                                      // 4
+z.s                                      // -1</pre>
+
+
+
+    <h4 id='Errors'>Errors</h4>
+    <p>
+      The errors that are thrown are generic <code>Error</code> objects whose <code>message</code>
+      property begins with <code>"[DecimalError]"</code>.
+    </p>
+    <p>To determine if an exception is a Decimal Error:</p>
+    <pre>
+try {
+    // ...
+} catch (e) {
+    if ( e instanceof Error && /DecimalError/.test(e.message) ) {
+        // ...
+    }
+}</pre>
+
+
+
+    <h2 id='faq'>FAQ</h2>
+    <h6>Why are trailing fractional zeros removed from Decimals?</h6>
+    <p>
+      Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the
+      precision of a value. This can be useful but the results of arithmetic operations can be
+      misleading.
+    </p>
+    <pre>
+x = new BigDecimal("1.0")
+y = new BigDecimal("1.1000")
+z = x.add(y)                      // 2.1000
+
+x = new BigDecimal("1.20")
+y = new BigDecimal("3.45000")
+z = x.multiply(y)                 // 4.1400000</pre>
+    <p>
+      To specify the precision of a value is to specify that the value lies
+      within a certain range.
+    </p>
+    <p>
+      In the first example, <code>x</code> has a value of <code>1.0</code>. The trailing zero shows
+      the precision of the value, implying that it is in the range <code>0.95</code> to
+      <code>1.05</code>. Similarly, the precision indicated by the trailing zeros of <code>y</code>
+      indicates that the value is in the range <code>1.09995</code> to <code>1.10005</code>.
+    </p>
+    <p>
+      If we  add the two lowest values in the ranges we have, <code>0.95 + 1.09995 = 2.04995</code>,
+      and if we add the two highest values we have, <code>1.05 + 1.10005 = 2.15005</code>, so the
+      range of the result of the addition implied by the precision of its operands is
+      <code>2.04995</code> to <code>2.15005</code>.
+    </p>
+    <p>
+      The result given by BigDecimal of <code>2.1000</code> however, indicates that the value is in
+      the range <code>2.09995</code> to <code>2.10005</code> and therefore the precision implied by
+      its trailing zeros may be misleading.
+    </p>
+    <p>
+      In the second example, the true range is <code>4.122744</code> to <code>4.157256</code> yet
+      the BigDecimal answer of <code>4.1400000</code> indicates a range of <code>4.13999995</code>
+      to  <code>4.14000005</code>. Again, the precision implied by the trailing zeros may be
+      misleading.
+    </p>
+    <p>
+      This library, like binary floating point and most calculators, does not retain trailing
+      fractional zeros. Instead, the <code>toExponential</code>, <code>toFixed</code> and
+      <code>toPrecision</code> methods enable trailing zeros to be added if and when required.<br />
+    </p>
+  </div>
+
+</body>
+</html>
Index: node_modules/decimal.js-light/doc/decimal.js.map
===================================================================
--- node_modules/decimal.js-light/doc/decimal.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/doc/decimal.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"decimal.min.js","sources":["decimal.js"],"names":["globalScope","add","x","y","carry","d","e","i","k","len","xd","yd","Ctor","constructor","pr","precision","s","external","round","slice","length","Math","ceil","LOG_BASE","reverse","push","BASE","unshift","pop","checkInt32","min","max","Error","invalidArgument","digitsToString","ws","indexOfLastWord","str","w","getZeroString","exp","sd","denominator","guard","pow","sum","t","wpr","getBase10Exponent","exponentOutOfRange","ONE","abs","gte","times","log","mathpow","LN10","plus","divide","getLn10","decimalError","zs","ln","c","c0","numerator","x2","n","eq","charAt","minus","parseDecimal","indexOf","replace","search","substring","charCodeAt","mathfloor","MAX_E","rm","j","rd","doRound","xdi","subtract","xe","xLTy","shift","toString","isExp","truncate","arr","clone","obj","Decimal","value","this","isDecimal","test","p","ps","prototype","P","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","config","set","hasOwnProperty","v","MAX_DIGITS","rounding","toExpNeg","toExpPos","floor","MAX_SAFE_INTEGER","absoluteValue","comparedTo","cmp","xdL","ydL","decimalPlaces","dp","dividedBy","div","dividedToIntegerBy","idiv","equals","exponent","greaterThan","gt","greaterThanOrEqualTo","isInteger","isint","isNegative","isneg","isPositive","ispos","isZero","lessThan","lt","lessThanOrEqualTo","lte","logarithm","base","r","sub","modulo","mod","q","naturalExponential","naturalLogarithm","negated","neg","z","squareRoot","sqrt","toExponential","mul","rL","toDecimalPlaces","todp","toFixed","toInteger","toint","toNumber","toPower","sign","yIsInt","yn","toPrecision","toSignificantDigits","tosd","valueOf","val","toJSON","multiplyInteger","temp","compare","a","b","aL","bL","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","define","amd","module","exports","self","Function"],"mappings":"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"}
Index: node_modules/decimal.js-light/package.json
===================================================================
--- node_modules/decimal.js-light/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/decimal.js-light/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+{
+  "name": "decimal.js-light",
+  "description": "An arbitrary-precision Decimal type for JavaScript.",
+  "version": "2.5.1",
+  "keywords": [
+    "arbitrary",
+    "precision",
+    "arithmetic",
+    "big",
+    "number",
+    "decimal",
+    "float",
+    "biginteger",
+    "bigdecimal",
+    "bignumber",
+    "bigint",
+    "bignum"
+  ],
+  "repository" : {
+    "type": "git",
+    "url": "https://github.com/MikeMcl/decimal.js-light.git"
+  },
+  "main": "decimal",
+  "module": "decimal.mjs",
+  "browser": "decimal.js",
+  "types": "decimal.d.ts",
+  "author": {
+    "name": "Michael Mclaughlin",
+    "email": "M8ch88l@gmail.com"
+  },
+  "license": "MIT",
+  "scripts": {
+    "test": "node ./test/test.js",
+    "build": "uglifyjs decimal.js --source-map doc/decimal.js.map -c -m -o decimal.min.js --preamble \"/* decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */\""
+  }
+}
Index: node_modules/detect-element-overflow/LICENSE
===================================================================
--- node_modules/detect-element-overflow/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/detect-element-overflow/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017–2023 Wojciech Maj
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/detect-element-overflow/README.md
===================================================================
--- node_modules/detect-element-overflow/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/detect-element-overflow/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+[![npm](https://img.shields.io/npm/v/detect-element-overflow.svg)](https://www.npmjs.com/package/detect-element-overflow) ![downloads](https://img.shields.io/npm/dt/detect-element-overflow.svg) [![CI](https://github.com/wojtekmaj/detect-element-overflow/workflows/CI/badge.svg)](https://github.com/wojtekmaj/detect-element-overflow/actions)
+
+# Detect-Element-Overflow
+
+A function that tells you whether a given element is overflowing its container or not. Useful for creating dropdowns and tooltips.
+
+## tl;dr
+
+- Install by executing `npm install detect-element-overflow` or `yarn add detect-element-overflow`.
+- Import by adding `import detectElementOverflow from 'detect-element-overflow'`.
+- Do stuff with it!
+  ```ts
+  const collisions = detectElementOverflow(child, parent);
+  ```
+
+## User guide
+
+Detect-Element-Overflow returns an object with getter functions described below.
+
+| Attribute name | Description                                                                                                                                                         | Example values |
+| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
+| collidedTop    | Whether or not the child element collided with the top parent's border.                                                                                             | `true`         |
+| collidedBottom | Whether or not the child element collided with the bottom parent's border.                                                                                          | `true`         |
+| collidedLeft   | Whether or not the child element collided with the left parent's border.                                                                                            | `true`         |
+| collidedRight  | Whether or not the child element collided with the right parent's border.                                                                                           | `true`         |
+| overflowTop    | How many pixels of the child have crossed the top parent's border. Negative values specify how many pixels are between the child and the top parent's border.       | `20`, `-15`    |
+| overflowBottom | How many pixels of the child have crossed the bottom parent's border. Negative values specify how many pixels are between the child and the bottom parent's border. | `20`, `-15`    |
+| overflowLeft   | How many pixels of the child have crossed the left parent's border. Negative values specify how many pixels are between the child and the left parent's border.     | `20`, `-15`    |
+| overflowRight  | How many pixels of the child have crossed the right parent's border. Negative values specify how many pixels are between the child and the right parent's border.   | `20`, `-15`    |
+
+## License
+
+The MIT License.
+
+## Author
+
+<table>
+  <tr>
+    <td >
+      <img src="https://avatars.githubusercontent.com/u/5426427?v=4&s=128" width="64" height="64" alt="Wojciech Maj">
+    </td>
+    <td>
+      <a href="https://github.com/wojtekmaj">Wojciech Maj</a>
+    </td>
+  </tr>
+</table>
Index: node_modules/detect-element-overflow/dist/cjs/index.d.ts
===================================================================
--- node_modules/detect-element-overflow/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/detect-element-overflow/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+export default function detectElementOverflow(element: HTMLElement, container: HTMLElement): {
+    readonly collidedTop: boolean;
+    readonly collidedBottom: boolean;
+    readonly collidedLeft: boolean;
+    readonly collidedRight: boolean;
+    readonly overflowTop: number;
+    readonly overflowBottom: number;
+    readonly overflowLeft: number;
+    readonly overflowRight: number;
+};
Index: node_modules/detect-element-overflow/dist/cjs/index.js
===================================================================
--- node_modules/detect-element-overflow/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/detect-element-overflow/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function getRect(element) {
+    return element.getBoundingClientRect();
+}
+function detectElementOverflow(element, container) {
+    return {
+        get collidedTop() {
+            return getRect(element).top < getRect(container).top;
+        },
+        get collidedBottom() {
+            return getRect(element).bottom > getRect(container).bottom;
+        },
+        get collidedLeft() {
+            return getRect(element).left < getRect(container).left;
+        },
+        get collidedRight() {
+            return getRect(element).right > getRect(container).right;
+        },
+        get overflowTop() {
+            return getRect(container).top - getRect(element).top;
+        },
+        get overflowBottom() {
+            return getRect(element).bottom - getRect(container).bottom;
+        },
+        get overflowLeft() {
+            return getRect(container).left - getRect(element).left;
+        },
+        get overflowRight() {
+            return getRect(element).right - getRect(container).right;
+        },
+    };
+}
+exports.default = detectElementOverflow;
Index: node_modules/detect-element-overflow/dist/cjs/package.json
===================================================================
--- node_modules/detect-element-overflow/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/detect-element-overflow/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
Index: node_modules/detect-element-overflow/dist/esm/index.d.ts
===================================================================
--- node_modules/detect-element-overflow/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/detect-element-overflow/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+export default function detectElementOverflow(element: HTMLElement, container: HTMLElement): {
+    readonly collidedTop: boolean;
+    readonly collidedBottom: boolean;
+    readonly collidedLeft: boolean;
+    readonly collidedRight: boolean;
+    readonly overflowTop: number;
+    readonly overflowBottom: number;
+    readonly overflowLeft: number;
+    readonly overflowRight: number;
+};
Index: node_modules/detect-element-overflow/dist/esm/index.js
===================================================================
--- node_modules/detect-element-overflow/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/detect-element-overflow/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+function getRect(element) {
+    return element.getBoundingClientRect();
+}
+export default function detectElementOverflow(element, container) {
+    return {
+        get collidedTop() {
+            return getRect(element).top < getRect(container).top;
+        },
+        get collidedBottom() {
+            return getRect(element).bottom > getRect(container).bottom;
+        },
+        get collidedLeft() {
+            return getRect(element).left < getRect(container).left;
+        },
+        get collidedRight() {
+            return getRect(element).right > getRect(container).right;
+        },
+        get overflowTop() {
+            return getRect(container).top - getRect(element).top;
+        },
+        get overflowBottom() {
+            return getRect(element).bottom - getRect(container).bottom;
+        },
+        get overflowLeft() {
+            return getRect(container).left - getRect(element).left;
+        },
+        get overflowRight() {
+            return getRect(element).right - getRect(container).right;
+        },
+    };
+}
Index: node_modules/detect-element-overflow/package.json
===================================================================
--- node_modules/detect-element-overflow/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/detect-element-overflow/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+{
+  "name": "detect-element-overflow",
+  "version": "1.4.2",
+  "description": "A function that tells you whether a given element is overflowing its container or not. Useful for creating dropdowns and tooltips.",
+  "type": "module",
+  "sideEffects": false,
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/esm/index.js",
+  "source": "./src/index.ts",
+  "types": "./dist/cjs/index.d.ts",
+  "exports": {
+    "import": "./dist/esm/index.js",
+    "require": "./dist/cjs/index.js"
+  },
+  "scripts": {
+    "build": "yarn build-esm && yarn build-cjs && yarn build-cjs-package",
+    "build-esm": "tsc --project tsconfig.build.json --outDir dist/esm",
+    "build-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs --verbatimModuleSyntax false",
+    "build-cjs-package": "echo '{\n  \"type\": \"commonjs\"\n}' > dist/cjs/package.json",
+    "clean": "rimraf dist",
+    "lint": "eslint .",
+    "prepack": "yarn clean && yarn build",
+    "prettier": "prettier --check . --cache",
+    "test": "yarn lint && yarn tsc && yarn prettier",
+    "tsc": "tsc --noEmit"
+  },
+  "keywords": [
+    "collision",
+    "collision-detection",
+    "position"
+  ],
+  "author": {
+    "name": "Wojciech Maj",
+    "email": "kontakt@wojtekmaj.pl"
+  },
+  "license": "MIT",
+  "devDependencies": {
+    "eslint": "^8.26.0",
+    "eslint-config-wojtekmaj": "^0.9.0",
+    "husky": "^8.0.0",
+    "lint-staged": "^14.0.0",
+    "prettier": "^3.0.0",
+    "rimraf": "^3.0.0",
+    "typescript": "^5.0.0"
+  },
+  "publishConfig": {
+    "access": "public",
+    "provenance": true
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/wojtekmaj/detect-element-overflow.git"
+  },
+  "funding": "https://github.com/wojtekmaj/detect-element-overflow?sponsor=1",
+  "packageManager": "yarn@3.1.0"
+}
Index: node_modules/detect-element-overflow/src/index.ts
===================================================================
--- node_modules/detect-element-overflow/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/detect-element-overflow/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+function getRect(element: HTMLElement) {
+  return element.getBoundingClientRect();
+}
+
+export default function detectElementOverflow(element: HTMLElement, container: HTMLElement) {
+  return {
+    get collidedTop() {
+      return getRect(element).top < getRect(container).top;
+    },
+    get collidedBottom() {
+      return getRect(element).bottom > getRect(container).bottom;
+    },
+    get collidedLeft() {
+      return getRect(element).left < getRect(container).left;
+    },
+    get collidedRight() {
+      return getRect(element).right > getRect(container).right;
+    },
+    get overflowTop() {
+      return getRect(container).top - getRect(element).top;
+    },
+    get overflowBottom() {
+      return getRect(element).bottom - getRect(container).bottom;
+    },
+    get overflowLeft() {
+      return getRect(container).left - getRect(element).left;
+    },
+    get overflowRight() {
+      return getRect(element).right - getRect(container).right;
+    },
+  };
+}
Index: node_modules/dotenv/CHANGELOG.md
===================================================================
--- node_modules/dotenv/CHANGELOG.md	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/dotenv/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -3,5 +3,21 @@
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
-## [Unreleased](https://github.com/motdotla/dotenv/compare/v16.5.0...master)
+## [Unreleased](https://github.com/motdotla/dotenv/compare/v16.6.1...master)
+
+## [16.6.1](https://github.com/motdotla/dotenv/compare/v16.6.0...v16.6.1) (2025-06-27)
+
+### Changed
+
+- Default `quiet` to true – hiding the runtime log message ([#874](https://github.com/motdotla/dotenv/pull/874))
+- NOTICE: 17.0.0 will be released with quiet defaulting to false. Use `config({ quiet: true })` to suppress.
+- And check out the new [dotenvx](https://github.com/dotenvx/dotenvx). As coding workflows evolve and agents increasingly handle secrets, encrypted .env files offer a much safer way to deploy both agents and code together with secure secrets. Simply switch `require('dotenv').config()` for `require('@dotenvx/dotenvx').config()`.
+
+## [16.6.0](https://github.com/motdotla/dotenv/compare/v16.5.0...v16.6.0) (2025-06-26)
+
+### Added
+
+- Default log helpful message `[dotenv@16.6.0] injecting env (1) from .env` ([#870](https://github.com/motdotla/dotenv/pull/870))
+- Use `{ quiet: true }` to suppress
+- Aligns dotenv more closely with [dotenvx](https://github.com/dotenvx/dotenvx).
 
 ## [16.5.0](https://github.com/motdotla/dotenv/compare/v16.4.7...v16.5.0) (2025-04-07)
Index: node_modules/dotenv/README-es.md
===================================================================
--- node_modules/dotenv/README-es.md	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/dotenv/README-es.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -15,14 +15,4 @@
 <br>
 <br>
-<a href="https://www.warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=dotenv_p_20220831">
-  <div>
-    <img src="https://res.cloudinary.com/dotenv-org/image/upload/v1661980709/warp_hi8oqj.png" width="230" alt="Warp">
-  </div>
-  <b>Warp is a blazingly fast, Rust-based terminal reimagined to work like a modern app.</b>
-  <div>
-    <sup>Get more done in the CLI with real text editing, block-based output, and AI command search.</sup>
-  </div>
-</a>
-<br>
 
 <a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv"><img src="https://res.cloudinary.com/dotenv-org/image/upload/v1744035073/graphite_lgsrl8.gif" width="240" alt="Graphite" /></a>
@@ -155,9 +145,4 @@
 
 Necesitaras agregar el valor de otro variable en una de sus variables? Usa [dotenv-expand](https://github.com/motdotla/dotenv-expand).
-
-### Sincronizando
-
-Necesitas mentener sincronizados los archivos `.env` entre maquinas, entornos, o miembros del equipo? Usa 
-[dotenv-vault](https://github.com/dotenv-org/dotenv-vault).
 
 ## Ejemplos
@@ -412,8 +397,4 @@
 Prueba [dotenv-expand](https://github.com/motdotla/dotenv-expand)
 
-### ¿Qué pasa con la sincronización y la seguridad de los archivos .env?
-
-Vea [dotenv-vault](https://github.com/dotenv-org/dotenv-vault)
-
 ## Guía de contribución
 
Index: node_modules/dotenv/README.md
===================================================================
--- node_modules/dotenv/README.md	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/dotenv/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -10,17 +10,6 @@
 
 <br>
-<a href="https://www.warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=dotenv_p_20220831">
-  <div>
-    <img src="https://res.cloudinary.com/dotenv-org/image/upload/v1661980709/warp_hi8oqj.png" width="230" alt="Warp">
-  </div>
-  <b>Warp is a blazingly fast, Rust-based terminal reimagined to work like a modern app.</b>
-  <div>
-    <sup>Get more done in the CLI with real text editing, block-based output, and AI command search.</sup>
-  </div>
-</a>
+<a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv"><img src="https://res.cloudinary.com/dotenv-org/image/upload/v1744035073/graphite_lgsrl8.gif" width="240" alt="Graphite" /></a>
 <br>
-
-<a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv"><img src="https://res.cloudinary.com/dotenv-org/image/upload/v1744035073/graphite_lgsrl8.gif" width="240" alt="Graphite" /></a>
-
 <a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv">
   <b>Graphite is the AI developer productivity platform helping teams on GitHub ship higher quality software, faster.</b>
@@ -54,10 +43,14 @@
 ```
 
-You can also use an npm-compatible package manager like yarn or bun:
+You can also use an npm-compatible package manager like yarn, bun or pnpm:
 
 ```bash
 yarn add dotenv
-# or
+```
+```bash
 bun add dotenv
+```
+```bash
+pnpm add dotenv
 ```
 
Index: node_modules/dotenv/SECURITY.md
===================================================================
--- node_modules/dotenv/SECURITY.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/dotenv/SECURITY.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+Please report any security vulnerabilities to security@dotenvx.com. 
Index: node_modules/dotenv/lib/cli-options.js
===================================================================
--- node_modules/dotenv/lib/cli-options.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/dotenv/lib/cli-options.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,6 +1,6 @@
-const re = /^dotenv_config_(encoding|path|debug|override|DOTENV_KEY)=(.+)$/
+const re = /^dotenv_config_(encoding|path|quiet|debug|override|DOTENV_KEY)=(.+)$/
 
 module.exports = function optionMatcher (args) {
-  return args.reduce(function (acc, cur) {
+  const options = args.reduce(function (acc, cur) {
     const matches = cur.match(re)
     if (matches) {
@@ -9,3 +9,9 @@
     return acc
   }, {})
+
+  if (!('quiet' in options)) {
+    options.quiet = 'true'
+  }
+
+  return options
 }
Index: node_modules/dotenv/lib/env-options.js
===================================================================
--- node_modules/dotenv/lib/env-options.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/dotenv/lib/env-options.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -8,4 +8,8 @@
 if (process.env.DOTENV_CONFIG_PATH != null) {
   options.path = process.env.DOTENV_CONFIG_PATH
+}
+
+if (process.env.DOTENV_CONFIG_QUIET != null) {
+  options.quiet = process.env.DOTENV_CONFIG_QUIET
 }
 
Index: node_modules/dotenv/lib/main.d.ts
===================================================================
--- node_modules/dotenv/lib/main.d.ts	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/dotenv/lib/main.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -39,4 +39,13 @@
    */
   encoding?: string;
+
+  /**
+   * Default: `false`
+   *
+   * Suppress all output (except errors).
+   *
+   * example: `require('dotenv').config({ quiet: true })`
+   */
+  quiet?: boolean;
 
   /**
@@ -111,5 +120,5 @@
  * See https://dotenvx.com/docs
  *
- * @param options - additional options. example: `{ path: './custom/path', encoding: 'latin1', debug: true, override: false }`
+ * @param options - additional options. example: `{ path: './custom/path', encoding: 'latin1', quiet: false, debug: true, override: false }`
  * @returns an object with a `parsed` key if successful or `error` key if an error occurred. example: { parsed: { KEY: 'value' } }
  *
@@ -122,5 +131,5 @@
  * See https://dotenvx.com/docs
  *
- * @param options - additional options. example: `{ path: './custom/path', encoding: 'latin1', debug: true, override: false }`
+ * @param options - additional options. example: `{ path: './custom/path', encoding: 'latin1', quiet: false, debug: true, override: false }`
  * @returns an object with a `parsed` key if successful or `error` key if an error occurred. example: { parsed: { KEY: 'value' } }
  *
@@ -135,5 +144,5 @@
  * @param processEnv - the target JSON object. in most cases use process.env but you can also pass your own JSON object
  * @param parsed - the source JSON object
- * @param options - additional options. example: `{ debug: true, override: false }`
+ * @param options - additional options. example: `{ quiet: false, debug: true, override: false }`
  * @returns {void}
  *
Index: node_modules/dotenv/lib/main.js
===================================================================
--- node_modules/dotenv/lib/main.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/dotenv/lib/main.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -49,8 +49,9 @@
 
 function _parseVault (options) {
+  options = options || {}
+
   const vaultPath = _vaultPath(options)
-
-  // Parse .env.vault
-  const result = DotenvModule.configDotenv({ path: vaultPath })
+  options.path = vaultPath // parse .env.vault
+  const result = DotenvModule.configDotenv(options)
   if (!result.parsed) {
     const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)
@@ -96,4 +97,8 @@
 function _debug (message) {
   console.log(`[dotenv@${version}][DEBUG] ${message}`)
+}
+
+function _log (message) {
+  console.log(`[dotenv@${version}] ${message}`)
 }
 
@@ -186,6 +191,8 @@
 function _configVault (options) {
   const debug = Boolean(options && options.debug)
-  if (debug) {
-    _debug('Loading env from encrypted .env.vault')
+  const quiet = options && 'quiet' in options ? options.quiet : true
+
+  if (debug || !quiet) {
+    _log('Loading env from encrypted .env.vault')
   }
 
@@ -206,4 +213,5 @@
   let encoding = 'utf8'
   const debug = Boolean(options && options.debug)
+  const quiet = options && 'quiet' in options ? options.quiet : true
 
   if (options && options.encoding) {
@@ -251,4 +259,22 @@
 
   DotenvModule.populate(processEnv, parsedAll, options)
+
+  if (debug || !quiet) {
+    const keysCount = Object.keys(parsedAll).length
+    const shortPaths = []
+    for (const filePath of optionPaths) {
+      try {
+        const relative = path.relative(process.cwd(), filePath)
+        shortPaths.push(relative)
+      } catch (e) {
+        if (debug) {
+          _debug(`Failed to load ${filePath} ${e.message}`)
+        }
+        lastError = e
+      }
+    }
+
+    _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)
+  }
 
   if (lastError) {
Index: node_modules/dotenv/package.json
===================================================================
--- node_modules/dotenv/package.json	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/dotenv/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,5 +1,5 @@
 {
   "name": "dotenv",
-  "version": "16.5.0",
+  "version": "16.6.1",
   "description": "Loads environment variables from .env file",
   "main": "lib/main.js",
@@ -24,5 +24,5 @@
     "pretest": "npm run lint && npm run dts-check",
     "test": "tap run --allow-empty-coverage --disable-coverage --timeout=60000",
-    "test:coverage": "tap run --show-full-coverage --timeout=60000 --coverage-report=lcov",
+    "test:coverage": "tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",
     "prerelease": "npm test",
     "release": "standard-version"
Index: node_modules/es-toolkit/CHANGELOG.md
===================================================================
--- node_modules/es-toolkit/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,665 @@
+# es-toolkit Changelog
+
+## Version v1.39.10
+
+Released on August 17th, 2025.
+
+- Fixed `defaultsDeep` to properly handle deep merging of objects in arrays
+- Fixed several documentation issues and examples across multiple functions
+
+We sincerely thank @wo-o29, @thwlckd, @kilimandzharov, and @dayongkr for their contributions. We appreciate your great efforts!
+
+## Version v1.39.9
+
+Released on August 10th, 2025.
+
+- Fixed `mergeWith` to properly handle null values returned from customizer function.
+- Fixed `cloneDeepWith` to properly handle customizer returning null values.
+- Fixed some of the documentation issues.
+
+We sincerely thank @raon0211, @joshkel, and @Najeong-Kim for their contributions. We appreciate your great efforts!
+
+## Version v1.39.8
+
+Released on July 25th, 2025.
+
+- Aligned the types of `fill`, `pullAll`, `pullAllBy`, `pullAllWith`, `pullAt`, `remove`, and `reverse` in our compatibility library with the latest Lodash types (`@types/lodash` v4.17.20).
+
+## Version v1.39.7
+
+Released on July 9th, 2025.
+
+- Fixed a compatibility issue with Lodash's `debounce` and `throttle` functions.
+- Remove useless source map for reduce bundle size.
+- Fix some of the documentation issues.
+
+We sincerely thank @dayongkr, @cobocho, @raon0211, and @D-Sketon for their contributions. We appreciate your great efforts!
+
+## Version v1.39.6
+
+Released on July 2th, 2025.
+
+- Fixed handling of null/undefined values in `values` function.
+- Fixed type safety in `compat/get` by adding GetFieldType utility type.
+
+We sincerely thank @raon0211, @dayongkr, @yhb-flydream, @ssi02014, @JeongHwan-dev, and @guesung for their contributions. We appreciate your great efforts!
+
+## Version v1.39.5
+
+Released on June 24th, 2025.
+
+- Fixed type compatibility issues between `es-toolkit/compat` and `@types/lodash`.
+- Improved documentation.
+
+We thank @raon0211, @dayongkr, @sukvvon, and @yhb-flydream for their contributions.
+
+## Version v1.39.4
+
+Released on June 21st, 2025.
+
+- Fixed prototype pollution issue in es-toolkit to enhance security.
+- Enhanced build system to provide compat/\* functions in CommonJS format by default.
+
+We thank @raon0211, and @dayongkr for their contributions.
+
+## Version v1.39.3
+
+Released on June 7th, 2025.
+
+- Fixed postbuild script to ensure compat function categorization aligns with src directory structure.
+
+## Version v1.39.2
+
+Released on June 7th, 2025.
+
+- Added dual package export support for individual compat functions (e.g., `es-toolkit/compat/add`).
+
+## Version v1.39.1
+
+Released on June 6th, 2025.
+
+- Resolved mismatch between named and default exports in compat .d.ts and .js files to improve TypeScript integration.
+
+## Version v1.39.0
+
+🎉 Released on June 5th, 2025. 🎉
+
+We're thrilled to announce that `es-toolkit/compat` has achieved full compatibility with Lodash! 🎉
+
+A huge thank you to all our contributors who made this possible.
+
+- Introduced compatibility functions for [defaultsDeep](https://es-toolkit.slash.page/reference/compat/object/defaultsDeep.html), [isMatchWith](https://es-toolkit.slash.page/reference/compat/predicate/isMatchWith.html), [flatMapDepth](https://es-toolkit.slash.page/reference/compat/array/flatMapDepth.html), [flatMapDeep](https://es-toolkit.slash.page/reference/compat/array/flatMapDeep.html), [overArgs](https://es-toolkit.slash.page/reference/compat/function/overArgs.html), [findLastKey](https://es-toolkit.slash.page/reference/compat/object/findLastKey.html) and [truncate](https://es-toolkit.slash.page/reference/compat/string/truncate.html).
+- Enhanced build system to support `es-toolkit/compat/*` module imports.
+- Fixed special functions like `each` to ensure proper functionality.
+- Fixed Deno compatibility issues for `defaultsDeep` function.
+- Fixed import paths in Deno environment.
+- Added benchmark comparing es-toolkit and lodash `identity` function performance.
+- Improved documentation and test coverage for various functions.
+
+We sincerely thank @raon0211, @dayongkr, @mreiden, @hwibaski, @shren207, @jiji-hoon96, and @myungjuice for their contributions. We appreciate your great efforts!
+
+### ⭐️ Special Thanks to Our Amazing Contributors Who Made 100% Compatibility Possible ⭐️
+
+@raon0211, @dayongkr, @D-Sketon, @mass2527, @ssi02014, @shren207, @chhw130, @haejunejung, @jsparkdev, @manudeli, @jgjgill, @hyesungoh, @kaehehehe, @filipsobol, @fvsch, @wondonghwi, @seungrodotlee, @bertyhell, @minchodang, @Jeong-Rae, @kangju2000, @juno7803, @wojtekmaj, @mattiacoll, @changwoolab, @po4tion, @gyumong, @choi2021, @mancuoj, @de-novo, @eunhyulkim, @kim-sung-jee, @gs18004, @Hanna922, @Na-hyunwoo, @aken-you, @tanggd, @ho991217, @piquark6046, @jiji-hoon96, @seonghun0828, @pkovzz, @nnnnoel, @noelkim-prestolabs, @minsoo-web, @hautest, @scato3, @l2hyunwoo, @WooWan, @VVSOGI, @k-jeonghee, @knott11, @lukaszkowalik2, @moonheekim0118, @sadobass, @minjongbaek, @umsungjun, @sossost, @sunrabbit123, @Seung-wan, @cruelladevil, @iDevGon, @oror-sine, @1eeminhyeong, @benzyminzy, @BlackWhite2000, @tooooo1, @L2HYUNN, @DonghyunKim98, @dasom-jo, @guesung, @uniqueeest, @KiKoS0, @myungjuice, @seung-juv, @Collection50, @nowethan, @coding-honey, @ariandel-dev, @apeltop, @jch1223, @yhay81, @milooy, @raviqqe, @youznn, @BinskLee, @YEONDG, @shinwonse, @willmanduffy, @vjo, @touhidrahman, @T3sT3ro, @belgattitude, @WISUNGWON, @anaclumos, @hsskey, @BasixKOR, @Kyujenius, @Dohun-choi, @dngur9801, @sanginchun, @westofsky, @DONG-8, @yhmpc, @pbstar, @MoXiaoluo, @uussong, @tuhm1, @tisou1, @spookyuser, @sa02045, @Hotanya, @nia3y, @mreiden, @kms0219kms, @IkumaTadokoro, @hansolbangul, @hainan-612, @hwibaski, @jeongshin, @HoberMin, @ohprettyhak, @gweesin, @FengBuPi, @kyvg, @evan-moon, @chldmsqls34, @kimpuro, @dogagenc, @Duck-98, @redd97, @faner11, @bhollis, @jaehunn, @babay123, @beomxtone, @ankitjha420, @shan-mx, @2skydev, @StyleShit, @confidential-nt, @siddsarkar, @seongminn, @healtheloper, @pnodet, @Gaic4o, @leeminhee119, @leehj322, @kristian240, @kingston, @kim-dongho, @jungwoo3490, @joris-gallot, @jonganebski, @jiwooproity, @moshuying, @jakvbs, @therealjamesjung, @SaeWooKKang and @HyeokjaeLee
+
+## Version v1.38.0
+
+Released on May 18th, 2025.
+
+- Added compatibility functions for [bindAll](https://es-toolkit.slash.page/reference/compat/util/bindAll.html), [setWith](https://es-toolkit.slash.page/reference/compat/object/setWith.html), [memoize](https://es-toolkit.slash.page/reference/function/memoize.html), [isNative](https://es-toolkit.slash.page/reference/compat/predicate/isNative.html), [invokeMap](https://es-toolkit.slash.page/reference/compat/array/invokeMap.html), [clone](https://es-toolkit.slash.page/reference/object/clone.html), [cloneWith](https://es-toolkit.slash.page/reference/compat/object/cloneWith.html), and [sortedLastIndexOf](https://es-toolkit.slash.page/reference/compat/array/sortedLastIndexOf.html).
+- Enhanced [invariant](https://es-toolkit.slash.page/reference/util/invariant.html) function to accept Error instances and added [assert](https://es-toolkit.slash.page/reference/util/assert.html) alias.
+- Fixed type definitions and empty array handling in [maxBy](https://es-toolkit.slash.page/reference/array/maxBy.html) and [minBy](https://es-toolkit.slash.page/reference/array/minBy.html).
+- Fixed typo 'Partail' to 'Partial' in [findKey](https://es-toolkit.slash.page/reference/object/findKey.html) type annotation.
+- Enhanced [max](https://es-toolkit.slash.page/reference/math/max.html) and [min](https://es-toolkit.slash.page/reference/math/min.html) functions to skip NaN, symbol, and null values, and return undefined when all values are skipped.
+- Fixed sparse array handling in compat functions to match Lodash's behavior.
+- Improved test coverage and documentation for various functions.
+- Fixed various documentation issues and typos.
+
+We sincerely thank @myungjuice, @scato3, @uniqueeest, @YEONDG, @shren207, @hyesungoh, @kms0219kms, @minjongbaek, @kristian240, @D-Sketon, @Seung-wan, @jiji-hoon96, @raon0211, and @dayongkr for their contributions. We appreciate your great efforts!
+
+## Version v1.37.2
+
+Released on May 4th, 2025.
+
+- Fixed an issue in `es-toolkit/compat`'s `throttle` function to match Lodash's behavior by immediately invoking the throttled function when wait time is zero.
+
+## Version v1.37.1
+
+Released on May 3rd, 2025.
+
+- Fixed a bug in JSR's `@es-toolkit/es-toolkit` package that prevented importing the `camelCase` function in Deno.
+
+## Version v1.37.0
+
+Released on May 3rd, 2025.
+
+- Introduced compatibility functions for [result](https://es-toolkit.slash.page/reference/compat/object/result.html), [omitBy](https://es-toolkit.slash.page/reference/object/omitBy.html), [xorBy](https://es-toolkit.slash.page/reference/array/xorBy.html), [xorWith](https://es-toolkit.slash.page/reference/array/xorWith.html), [unzipWith](https://es-toolkit.slash.page/reference/array/unzipWith.html), [sampleSize](https://es-toolkit.slash.page/reference/array/sampleSize.html), [transform](https://es-toolkit.slash.page/reference/compat/object/transform.html), [wrap](https://es-toolkit.slash.page/reference/compat/function/wrap.html), [countBy](https://es-toolkit.slash.page/reference/array/countBy.html), and [xor](https://es-toolkit.slash.page/reference/array/xor.html).
+- Added vitest benchmark for [ary](https://es-toolkit.slash.page/reference/function/ary.html) function.
+- Fixed string comparison in [sortBy](https://es-toolkit.slash.page/reference/array/sortBy.html) and [orderBy](https://es-toolkit.slash.page/reference/array/orderBy.html) by removing locale comparison and using ASCII code instead.
+- Fixed type definition in [isBuffer](https://es-toolkit.slash.page/reference/predicate/isBuffer.html).
+- Fixed internal documentation links for Korean and Japanese headings.
+- Improved code readability and documentation for various functions.
+- Prevented circular dependencies by updating import paths in [toCamelCaseKeys](https://es-toolkit.slash.page/reference/object/toCamelCaseKeys.html) and [toSnakeCaseKeys](https://es-toolkit.slash.page/reference/object/toSnakeCaseKeys.html).
+
+We sincerely thank @chldmsqls34, @umsungjun, @raon0211, @dayongkr, @shren207, @oror-sine, @L2HYUNN, @D-Sketon, @ariandel-dev, @Jeong-Rae, and @beomxtone for their contributions. We appreciate your great efforts!
+
+## Version v1.36.0
+
+Released on April 24th, 2025.
+
+- Introduced compatibility functions for [groupBy](https://es-toolkit.slash.page/reference/array/groupBy.html), [partial](https://es-toolkit.slash.page/reference/function/partial.html), [partialRight](https://es-toolkit.slash.page/reference/function/partialRight.html), [forEachRight](https://es-toolkit.slash.page/reference/array/forEachRight.html), [forOwnRight](https://es-toolkit.slash.page/reference/compat/object/forOwnRight.html), [forIn](https://es-toolkit.slash.page/reference/compat/object/forIn.html), [forInRight](https://es-toolkit.slash.page/reference/compat/object/forInRight.html), [overEvery](https://es-toolkit.slash.page/reference/compat/util/overEvery.html), [hasIn](https://es-toolkit.slash.page/reference/compat/object/hasIn.html), [pullAt](https://es-toolkit.slash.page/reference/array/pullAt.html), [forOwn](https://es-toolkit.slash.page/reference/compat/object/forOwn.html), [pullAllWith](https://es-toolkit.slash.page/reference/compat/array/pullAllWith.html), [overSome](https://es-toolkit.slash.page/reference/compat/util/overSome.html), [partition](https://es-toolkit.slash.page/reference/array/partition.html), and [flatMap](https://es-toolkit.slash.page/reference/array/flatMap.html).
+- Fixed compatibility issues in [take](https://es-toolkit.slash.page/reference/array/take.html), [takeRight](https://es-toolkit.slash.page/reference/array/takeRight.html), [defaults](https://es-toolkit.slash.page/reference/compat/object/defaults.html), [repeat](https://es-toolkit.slash.page/reference/compat/string/repeat.html), and [words](https://es-toolkit.slash.page/reference/string/words.html) by adding proper guards.
+- Fixed [throttle](https://es-toolkit.slash.page/reference/function/throttle.html) behavior when both leading and trailing options are enabled.
+- Improved performance for [find](https://es-toolkit.slash.page/reference/compat/array/find.html) by removing unnecessary slice operations.
+- Enhanced performance of [toPairs](https://es-toolkit.slash.page/reference/compat/object/toPairs.html) by pre-allocating arrays and using iterator values.
+- Simplified implementation and aligned types with Lodash for [partition](https://es-toolkit.slash.page/reference/array/partition.html).
+
+We sincerely thank @D-Sketon, @raon0211, @dayongkr, @minjongbaek, @seungrodotlee, @mass2527, @uniqueeest, @leehj322, @cruelladevil, @shren207, and @ssi02014 for their contributions. We appreciate your great efforts!
+
+## Version v1.35.0
+
+Released on April 16th, 2025.
+
+- Added support for [toCamelCaseKeys](https://es-toolkit.slash.page/reference/object/toCamelCaseKeys.html) and [toSnakeCaseKeys](https://es-toolkit.slash.page/reference/object/toSnakeCaseKeys.html).
+- Added support for custom delay function based on attempts in [retry](https://es-toolkit.slash.page/reference/function/retry.html).
+- Introduced compatibility functions for [at](https://es-toolkit.slash.page/reference/array/at.html) (array), [split](https://es-toolkit.slash.page/reference/compat/string/split.html), [shuffle](https://es-toolkit.slash.page/reference/array/shuffle.html), [zipWith](https://es-toolkit.slash.page/reference/array/zipWith.html), [zipObject](https://es-toolkit.slash.page/reference/array/zipObject.html), [keyBy](https://es-toolkit.slash.page/reference/array/keyBy.html), [assign](https://es-toolkit.slash.page/reference/compat/object/assign.html), [assignInWith](https://es-toolkit.slash.page/reference/compat/object/assignInWith.html), [assignWith](https://es-toolkit.slash.page/reference/compat/object/assignWith.html), [update](https://es-toolkit.slash.page/reference/compat/object/update.html), [updateWith](https://es-toolkit.slash.page/reference/compat/object/updateWith.html), [uniqWith](https://es-toolkit.slash.page/reference/array/uniqWith.html), [unionBy](https://es-toolkit.slash.page/reference/array/unionBy.html), [unionWith](https://es-toolkit.slash.page/reference/array/unionWith.html), [takeWhile](https://es-toolkit.slash.page/reference/array/takeWhile.html), [sortedLastIndex](https://es-toolkit.slash.page/reference/compat/array/sortedLastIndex.html), [sortedLastIndexBy](https://es-toolkit.slash.page/reference/compat/array/sortedLastIndexBy.html), [toPairs](https://es-toolkit.slash.page/reference/compat/object/toPairs.html), [toPairsIn](https://es-toolkit.slash.page/reference/compat/object/toPairsIn.html), [cond](https://es-toolkit.slash.page/reference/compat/util/cond.html), [over](https://es-toolkit.slash.page/reference/compat/util/over.html), [functions](https://es-toolkit.slash.page/reference/compat/object/functions.html), and [create](https://es-toolkit.slash.page/reference/compat/object/create.html) in `es-toolkit/compat`.
+- Fixed Lodash compatibility issues in [pick](https://es-toolkit.slash.page/reference/object/pick.html) and [pickBy](https://es-toolkit.slash.page/reference/object/pickBy.html).
+
+We sincerely thank @shren207, @kim-sung-jee, @HyeokjaeLee, @Jeong-Rae, @D-Sketon, @jsparkdev, @wojtekmaj, @FengBuPi, @oror-sine, @L2HYUNN, @gs18004, @ohprettyhak, and @kimpuro for their contributions. We appreciate your great efforts!
+
+## Version v1.34.1
+
+Released on March 27th, 2025.
+
+- Fixed a bug in [isBrowser](https://es-toolkit.slash.page/reference/predicate/isBrowser.html) and [isNode](https://es-toolkit.slash.page/reference/predicate/isNode.html) that caused them to not work properly in Deno environments.
+
+## Version v1.34.0
+
+Released on March 27th, 2025.
+
+- Added support for [isBrowser](https://es-toolkit.slash.page/reference/predicate/isBrowser.html), [isNode](https://es-toolkit.slash.page/reference/predicate/isNode.html), [attempt](https://es-toolkit.slash.page/reference/util/attempt.html), [attemptAsync](https://es-toolkit.slash.page/reference/util/attemptAsync.html).
+- Introduced compatibility functions for [functionsIn](https://es-toolkit.slash.page/reference/compat/object/functionsIn.html), [meanBy](https://es-toolkit.slash.page/reference/math/meanBy.html), [minBy](https://es-toolkit.slash.page/reference/math/minBy.html), [mean](https://es-toolkit.slash.page/reference/math/mean.html), [sortedIndexOf](https://es-toolkit.slash.page/reference/compat/array/sortedIndexOf.html).
+- Fixed compatibility with lodash for [set](https://es-toolkit.slash.page/reference/compat/object/set.html), [add](https://es-toolkit.slash.page/reference/compat/math/add.html), [subtract](https://es-toolkit.slash.page/reference/compat/math/subtract.html).
+
+We sincerely thank @dayongkr, @D-Sketon, @seongminn, @Kyujenius for their contributions. We appreciate your great efforts!
+
+## Version v1.33.0
+
+Released on March 9th, 2025.
+
+- Added support for [reverseString](https://es-toolkit.slash.page/reference/string/reverseString.html) and [isJSON](https://es-toolkit.slash.page/reference/predicate/isJSON.html).
+- Introduced compatibility functions for [pullAllBy](https://es-toolkit.slash.page/reference/compat/array/pullAllBy.html), [intersectionWith](https://es-toolkit.slash.page/reference/array/intersectionWith.html), [findLast](https://es-toolkit.slash.page/reference/compat/array/findLast.html), [reduce](https://es-toolkit.slash.page/reference/compat/array/reduce.html), [reduceRight](https://es-toolkit.slash.page/reference/compat/array/reduceRight.html), [divide](https://es-toolkit.slash.page/reference/compat/math/divide.html), [values](https://es-toolkit.slash.page/reference/compat/object/values.html), [valuesIn](https://es-toolkit.slash.page/reference/compat/object/valuesIn.html), [maxBy](https://es-toolkit.slash.page/reference/compat/math/maxBy.html), and [pickBy](https://es-toolkit.slash.page/reference/compat/object/pickBy.html).
+- Fixed package exports on React Native so that `es-toolkit` can be used in React Native projects.
+- Fixed a bug in [sum](https://es-toolkit.slash.page/reference/math/sum.html) where passing `undefined` values like `sum([undefined, 1, 2, 3])` resulted in `NaN`, which was different from lodash.
+- Fixed a bug in [assignIn](https://es-toolkit.slash.page/reference/compat/object/assignIn.html) that didn't assign keys with undefined values.
+
+## Version v1.32.0
+
+Released on January 30th, 2025.
+
+- Added support for [Semaphore](https://es-toolkit.slash.page/reference/promise/Semaphore.html), [Mutex](https://es-toolkit.slash.page/reference/promise/Mutex.html), [isPromise](https://es-toolkit.slash.page/reference/predicate/isPromise.html), and [retry](https://es-toolkit.slash.page/reference/function/retry.html).
+- Introduced compatibility functions for [multiply](https://es-toolkit.slash.page/reference/compat/math/multiply.html), [sortedIndex](https://es-toolkit.slash.page/reference/compat/array/sortedIndex.html), and [sortedIndexBy](https://es-toolkit.slash.page/reference/compat/array/sortedIndexBy.html).
+- Added support for custom delimiters in [flattenObject](https://es-toolkit.slash.page/reference/object/flattenObject.html).
+- Added support for `fromIndex` parameters in [find](https://es-toolkit.slash.page/reference/compat/array/find.html).
+- Fixed a bug in [cloneDeep](https://es-toolkit.slash.page/reference/object/cloneDeep.html) and [cloneDeepWith](https://es-toolkit.slash.page/reference/object/cloneDeepWith.html) that cloned uncloneable objects.
+
+## Version v1.31.0
+
+Released on December 27th, 2024.
+
+- Added support for the [windowed](https://es-toolkit.slash.page/reference/array/windowed.html), [remove](https://es-toolkit.slash.page/reference/array/remove.html) and [asyncNoop](https://es-toolkit.slash.page/reference/function/asyncNoop.html) functions.
+- Introduced compatibility functions for [pullAll](https://es-toolkit.slash.page/reference/compat/array/pullAll.html), [subtract](https://es-toolkit.slash.page/reference/compat/math/subtract.html), [isBuffer](https://es-toolkit.slash.page/reference/predicate/isBuffer.html), and [methodOf](https://es-toolkit.slash.page/reference/compat/util/methodOf.html).
+- Enhanced the performance of [pull](https://es-toolkit.slash.page/reference/array/pull.html) when working with large arrays.
+- Resolved an issue where [reverse](https://es-toolkit.slash.page/reference/compat/array/reverse.html) was not being exported in our compatibility library.
+- Updated [groupBy](https://es-toolkit.slash.page/reference/array/groupBy.html) to properly handle keys like `toString` or `valueOf`.
+- Fixed [merge](https://es-toolkit.slash.page/reference/object/merge.html) to correctly merge values when `target` or any of its values are `null` or `undefined`.
+
+We sincerely thank @T3sT3ro, @D-Sketon, @tuhm1, @willmanduffy, @apeltop, @aken-you, @SaeWooKKang, and @ssi02014 for their contributions. We appreciate your great efforts!
+
+## Version v1.30.1
+
+Released on December 14th, 2024.
+
+- Fixed [uniqueId](https://es-toolkit.slash.page/reference/compat/util/uniqueId.html) not being exported in our compatibility library.
+
+We sincerely thank @redd97 for their contributions. We appreciate your great efforts!
+
+## Version v1.30.0
+
+Released on December 13th, 2024.
+
+- Introduced support for [pull](https://es-toolkit.slash.page/reference/array/pull.html).
+- Added compatibility functions for [map](https://es-toolkit.slash.page/reference/compat/array/map.html), [range](https://es-toolkit.slash.page/reference/math/range.html), [rangeRight](https://es-toolkit.slash.page/reference/math/rangeRight.html), [differenceWith](https://es-toolkit.slash.page/reference/array/differenceWith.html), [nth](https://es-toolkit.slash.page/reference/compat/array/nth.html), [noop](https://es-toolkit.slash.page/reference/function/noop.html), [identity](https://es-toolkit.slash.page/reference/function/identity.html), [keys](https://es-toolkit.slash.page/reference/compat/object/keys.html), [propertyOf](https://es-toolkit.slash.page/reference/compat/object/propertyOf.html), [nthArg](https://es-toolkit.slash.page/reference/compat/function/nthArg.html), [delay](https://es-toolkit.slash.page/reference/promise/delay.html), [toPlainObject](https://es-toolkit.slash.page/reference/compat/util/toPlainObject.html), [unary](https://es-toolkit.slash.page/reference/function/unary.html), [once](https://es-toolkit.slash.page/reference/function/once.html), [after](https://es-toolkit.slash.page/reference/function/after.html), [takeRightWhile](https://es-toolkit.slash.page/reference/array/takeRightWhile.html), [escapeRegExp](https://es-toolkit.slash.page/reference/string/escapeRegExp.html), [unescape](https://es-toolkit.slash.page/reference/string/unescape.html), [upperFirst](https://es-toolkit.slash.page/reference/string/upperFirst.html), [lowerFirst](https://es-toolkit.slash.page/reference/string/lowerFirst.html), [deburr](https://es-toolkit.slash.page/reference/string/deburr.html), [lt](https://es-toolkit.slash.page/reference/util/lt.html), [lte](https://es-toolkit.slash.page/reference/util/lte.html), [toLower](https://es-toolkit.slash.page/reference/compat/string/toLower.html), [invoke](https://es-toolkit.slash.page/reference/compat/util/invoke.html), [method](https://es-toolkit.slash.page/reference/compat/util/method.html), [reverse](https://es-toolkit.slash.page/reference/compat/array/reverse.html), [now](https://es-toolkit.slash.page/reference/compat/util/now.html), [findKey](https://es-toolkit.slash.page/reference/object/findKey.html), [stubArray](https://es-toolkit.slash.page/reference/compat/util/stubArray.html), [stubFalse](https://es-toolkit.slash.page/reference/compat/util/stubFalse.html), [stubObject](https://es-toolkit.slash.page/reference/compat/util/stubObject.html), [stubString](https://es-toolkit.slash.page/reference/compat/util/stubString.html), and [stubTrue](https://es-toolkit.slash.page/reference/compat/util/stubTrue.html).
+
+We sincerely thank @healtheloper, @mass2527, @D-Sketon, @eunhyulkim, @scato3, @Na-hyunwoo, and @dasom-jo for their contributions. We appreciate your great efforts!
+
+## Version v1.29.0
+
+Released on December 1st, 2024.
+
+- Introduced support for [cloneDeepWith](https://es-toolkit.slash.page/reference/object/cloneDeepWith.html).
+- Added a compatibility function for [lastIndexOf](https://es-toolkit.slash.page/reference/compat/array/lastIndexOf.html).
+- Fixed an issue in [flattenObject](https://es-toolkit.slash.page/reference/object/flattenObject.html) where nested objects in arrays were not flattened correctly.
+
+We sincerely thank @nnnnoel and @evan-moon for their contributions. We appreciate your great efforts!
+
+## Version v1.28.0
+
+Released on November 30th, 2024.
+
+- Added compatibility functions for [gt](https://es-toolkit.slash.page/reference/compat/util/gt.html), [gte](https://es-toolkit.slash.page/reference/compat/util/gte.html), [toArray](https://es-toolkit.slash.page/reference/compat/util/toArray.html), [toUpper](https://es-toolkit.slash.page/reference/compat/string/toUpper.html), [add](https://es-toolkit.slash.page/reference/compat/math/add.html), [assignIn](https://es-toolkit.slash.page/reference/compat/object/assignIn.html) ([extend](https://es-toolkit.slash.page/reference/compat/object/extend.html)), and [isElement](https://es-toolkit.slash.page/reference/compat/predicate/isElement.html).
+- Introduced new compatibility types for `DebouncedFunc`.
+- Enhanced our function types to accept `PropertyKey` instead of just `string` for property keys.
+- Corrected [flatMap](https://es-toolkit.slash.page/reference/array/flatMap.html) to accurately infer return types when the `depth` parameter is omitted.
+- Resolved issues with incorrect types for [partial](https://es-toolkit.slash.page/reference/function/partial.html) and [partialRight](https://es-toolkit.slash.page/reference/function/partialRight.html).
+- Fixed [intersectionBy](https://es-toolkit.slash.page/reference/array/intersectionBy.html), [differenceBy](https://es-toolkit.slash.page/reference/array/differenceBy.html), and [differenceWith](https://es-toolkit.slash.page/reference/array/differenceWith.html) to properly calculate differences between various element types.
+- Ensured that [words](https://es-toolkit.slash.page/reference/string/words.html) is now correctly exported in our compatibility library.
+
+We sincerely thank @D-Sketon, @mass2527, @1eeminhyeong, @chhw130, @DONG-8, @filipsobol, @kim-dongho, @nnnnoel, @pbstar, and @jsparkdev for their contributions. We appreciate your great efforts!
+
+## Version v1.27.0
+
+Released on November 10th, 2024.
+
+- Added support for [findKey](https://es-toolkit.slash.page/reference/object/findKey.html) and [isSubsetWith](https://es-toolkit.slash.page/reference/array/isSubsetWith.html).
+- Introduced compatibility functions for [words](https://es-toolkit.slash.page/reference/string/words.html), [at](https://es-toolkit.slash.page/reference/array/at.html), [differenceBy](https://es-toolkit.slash.page/reference/array/differenceBy.html), [uniqBy](https://es-toolkit.slash.page/reference/array/uniqBy.html), [forEach](https://es-toolkit.slash.page/reference/compat/array/forEach.html), [each](https://es-toolkit.slash.page/reference/compat/array/each.html), [sum](https://es-toolkit.slash.page/reference/math/sum.html), [sumBy](https://es-toolkit.slash.page/reference/array/sumBy.html), [union](https://es-toolkit.slash.page/reference/array/union.html), [zip](https://es-toolkit.slash.page/reference/array/zip.html), [unzip](https://es-toolkit.slash.page/reference/array/unzip.html), [iteratee](https://es-toolkit.slash.page/reference/compat/util/iteratee.html), [isEmpty](https://es-toolkit.slash.page/reference/compat/predicate/isEmpty.html), and [replace](https://es-toolkit.slash.page/reference/compat/string/replace.html).
+- Fixed a bug in [cloneDeep](https://es-toolkit.slash.page/reference/object/cloneDeep.html) that prevented it from correctly cloning object prototypes.
+- Improved performance for [at](https://es-toolkit.slash.page/reference/array/at.html).
+- Enhanced performance for [toPath](https://es-toolkit.slash.page/reference/compat/util/toPath.html), [get](https://es-toolkit.slash.page/reference/compat/object/get.html), [set](https://es-toolkit.slash.page/reference/compat/object/set.html), [unset](https://es-toolkit.slash.page/reference/compat/object/unset.html), [has](https://es-toolkit.slash.page/reference/compat/object/has.html), [orderBy](https://es-toolkit.slash.page/reference/array/orderBy.html), [chunk](https://es-toolkit.slash.page/reference/array/chunk.html), [difference](https://es-toolkit.slash.page/reference/array/difference.html), [drop](https://es-toolkit.slash.page/reference/array/drop.html), [dropRight](https://es-toolkit.slash.page/reference/array/dropRight.html), [dropWhile](https://es-toolkit.slash.page/reference/array/dropWhile.html), [findLastIndex](https://es-toolkit.slash.page/reference/compat/array/findLastIndex.html), [head](https://es-toolkit.slash.page/reference/array/head.html), [last](https://es-toolkit.slash.page/reference/array/last.html), [sample](https://es-toolkit.slash.page/reference/array/sample.html), [tail](https://es-toolkit.slash.page/reference/array/tail.html), [take](https://es-toolkit.slash.page/reference/array/take.html), and [takeRight](https://es-toolkit.slash.page/reference/array/takeRight.html) in our compatibility library.
+
+We sincerely thank @scato3, @ssi02014, @filipsobol, @mass2527, @Gyumong, @D-Sketon, @dayongkr, @kyvg, @Na-hyunwoo, @kaehehehe, and @bhollis for their contributions. Special thanks to @cruelladevil for improving the documentation. We appreciate your great efforts!
+
+## Version v1.26.1
+
+Released on October 25th, 2024.
+
+- Fixed a bug in [isMatch](https://es-toolkit.slash.page/reference/compat/predicate/isMatch.html) that did not strictly compare `null` in objects.
+
+This version includes contributions from @D-Sketon. Thank you for your valuable contributions!
+
+## Version v1.26.0
+
+Released on October 24th, 2024.
+
+- Added support for [invariant](https://es-toolkit.slash.page/reference/util/invariant.html), [identity](https://es-toolkit.slash.page/reference/function/identity.html), [median](https://es-toolkit.slash.page/reference/math/median.html), and [medianBy](https://es-toolkit.slash.page/reference/math/medianBy.html).
+- Added compatibility functions for [template](https://es-toolkit.slash.page/reference/compat/string/template.html), [uniqueId](https://es-toolkit.slash.page/reference/compat/util/uniqueId.html), [intersectionBy](https://es-toolkit.slash.page/reference/array/intersectionBy.html), [orderBy](https://es-toolkit.slash.page/reference/array/orderBy.html), [sortBy](https://es-toolkit.slash.page/reference/array/sortBy.html), and [some](https://es-toolkit.slash.page/reference/array/some.html).
+- Made it possible to use [drop](https://es-toolkit.slash.page/reference/array/drop.html), [dropRight](https://es-toolkit.slash.page/reference/array/dropRight.html), [every](https://es-toolkit.slash.page/reference/compat/array/every.html), [take](https://es-toolkit.slash.page/reference/array/take.html), and [takeRight](https://es-toolkit.slash.page/reference/array/takeRight.html) directly as iteratees, allowing for usage like `arr.map(drop)`.
+- Corrected [merge](https://es-toolkit.slash.page/reference/object/merge.html) to disallow primitive values such as numbers or strings.
+
+This version includes contributions from @dayongkr, @Na-hyunwoo, @ssi02014, @kaehehehe, @jakvbs, @D-Sketon, and @seonghun0828. Thank you for your valuable contributions!
+
+## Version v1.25.2
+
+Released on October 16th, 2024.
+
+- Fixed a problem with [isJSONValue](https://es-toolkit.slash.page/reference/predicate/isJSONValue.html), [isJSONArray](https://es-toolkit.slash.page/reference/predicate/isJSONArray.html), and [isJSONObject](https://es-toolkit.slash.page/reference/predicate/isJSONObject.html) that led to circular dependencies.
+- Enhanced [flatten](https://es-toolkit.slash.page/reference/array/flatten.html), [flattenDeep](https://es-toolkit.slash.page/reference/array/flattenDeep.html), [flattenDepth](https://es-toolkit.slash.page/reference/compat/array/flattenDepth.html#flattendepth), [slice](https://es-toolkit.slash.page/reference/compat/array/slice.html), and [zipObjectDeep](https://es-toolkit.slash.page/reference/compat/array/zipObjectDeep.html) to work with array-like objects in our compatibility library, ensuring they are fully compatible with lodash.
+
+This version includes contributions from @D-Sketon. Thank you for your valuable contributions!
+
+## Version v1.25.1
+
+Released on October 15th, 2024.
+
+- Resolved an issue in [cloneDeep](https://es-toolkit.slash.page/reference/object/cloneDeep.html) that incorrectly copied properties from the `target` when they were read-only.
+- Updated [every](https://es-toolkit.slash.page/reference/compat/array/every.html), [filter](https://es-toolkit.slash.page/reference/compat/array/filter.html), [find](https://es-toolkit.slash.page/reference/compat/array/find.html), [findIndex](https://es-toolkit.slash.page/reference/compat/array/findIndex.html), [findLastIndex](https://es-toolkit.slash.page/reference/compat/array/findLastIndex.html), [indexOf](https://es-toolkit.slash.page/reference/compat/array/indexOf.html), and [join](https://es-toolkit.slash.page/reference/compat/array/join.html) to now accept array-like objects and a `fromIndex` parameter, making them compatible with lodash.
+
+This version includes contributions from @D-Sketon. Thank you for your valuable contributions!
+
+## Version v1.25.0
+
+Released on October 14th, 2024.
+
+- Added support for [isFile](https://es-toolkit.slash.page/reference/predicate/isFile.html).
+- Added compatibility functions for [escape](https://es-toolkit.slash.page/reference/string/escape.html), [toSafeInteger](https://es-toolkit.slash.page/reference/compat/util/toSafeInteger.html), [intersection](https://es-toolkit.slash.page/reference/array/intersection.html), [sample](https://es-toolkit.slash.page/reference/array/sample.html), [chunk](https://es-toolkit.slash.page/reference/array/chunk.html), [compact](https://es-toolkit.slash.page/reference/array/compact.html), [head](https://es-toolkit.slash.page/reference/array/head.html), [initial](https://es-toolkit.slash.page/reference/array/initial.html), [last](https://es-toolkit.slash.page/reference/array/last.html), [tail](https://es-toolkit.slash.page/reference/array/tail.html), [take](https://es-toolkit.slash.page/reference/array/take.html), [takeRight](https://es-toolkit.slash.page/reference/array/takeRight.html), [uniq](https://es-toolkit.slash.page/reference/array/uniq.html), and [without](https://es-toolkit.slash.page/reference/array/without.html).
+- Enhanced performance for [at](https://es-toolkit.slash.page/reference/array/at.html) and [isPlainObject](https://es-toolkit.slash.page/reference/predicate/isPlainObject.html).
+- Resolved an issue in [cloneDeep](https://es-toolkit.slash.page/reference/object/cloneDeep.html) that prevented it from cloning symbol properties and read-only properties of objects.
+- Fixed a problem in [pick](https://es-toolkit.slash.page/reference/object/pick.html) within our compatibility library that incorrectly added `undefined` for keys that do not exist.
+
+This version includes contributions from @D-Sketon, @mass2527, @dayongkr, @lukaszkowalik2, @Gyumong, @Dohun-choi, @belgattitude, and @chhw130. Thank you for your valuable contributions!
+
+## Version v1.24.0
+
+Released on October 7th, 2024.
+
+- Added support for [isBlob](https://es-toolkit.slash.page/reference/predicate/isBlob.html) and [isDate](https://es-toolkit.slash.page/reference/predicate/isDate.html).
+- Added compatibility functions for [invertBy](https://es-toolkit.slash.page/reference/compat/object/invertBy.html), [times](https://es-toolkit.slash.page/reference/compat/util/times.html), [constant](https://es-toolkit.slash.page/reference/compat/util/constant.html), [slice](https://es-toolkit.slash.page/reference/compat/array/slice.html), [toLength](https://es-toolkit.slash.page/reference/compat/util/toLength.html), [defaultTo](https://es-toolkit.slash.page/reference/compat/util/defaultTo.html), [dropRightWhile](https://es-toolkit.slash.page/reference/array/dropRightWhile.html), [curryRight](https://es-toolkit.slash.page/reference/function/curryRight.html), [rangeRight](https://es-toolkit.slash.page/reference/math/rangeRight.html), [before](https://es-toolkit.slash.page/reference/function/before.html), [eq](https://es-toolkit.slash.page/reference/compat/util/eq.html), [defaults](https://es-toolkit.slash.page/reference/compat/object/defaults.html), [toDefaulted](https://es-toolkit.slash.page/reference/compat/object/toDefaulted.html), [isArrayBuffer](https://es-toolkit.slash.page/reference/predicate/isArrayBuffer.html), [isSet](https://es-toolkit.slash.page/reference/predicate/isSet.html), and [isMap](https://es-toolkit.slash.page/reference/predicate/isMap.html).
+- Enhanced [difference](https://es-toolkit.slash.page/reference/array/difference.html) to work with Array-like objects, aligning its functionality with lodash's behavior.
+- Improved performance for [pickBy](https://es-toolkit.slash.page/reference/object/pickBy.html) and [omitBy](https://es-toolkit.slash.page/reference/object/omitBy.html).
+
+## Version v1.23.0
+
+Released on October 1st, 2024.
+
+- Added support for [isEqualWith](https://es-toolkit.slash.page/reference/predicate/isEqualWith.html), [isArrayBuffer](https://es-toolkit.slash.page/reference/predicate/isArrayBuffer.html), [curryRight](https://es-toolkit.slash.page/reference/function/curryRight.html), [isJSONValue](https://es-toolkit.slash.page/reference/predicate/isJSONValue.html), [isJSONObject](https://es-toolkit.slash.page/reference/predicate/isJSONObject.html), [isJSONArray](https://es-toolkit.slash.page/reference/predicate/isJSONArray.html).
+- Fixed a bug in [merge](https://es-toolkit.slash.page/reference/object/merge.html) that copied the reference from the `source` object to the `target` object.
+- Fixed a bug in [includes](https://es-toolkit.slash.page/reference/compat/array/includes.html) that returned `true` for inherited properties.
+- Fixed a bug in [startCase](https://es-toolkit.slash.page/reference/string/startCase.html) and other string methods that did not correctly split the words when using accented letters.
+- Fixed a bug in [filter](https://es-toolkit.slash.page/reference/compat/array/filter.html) that did not provide correct arguments to the predicate function.
+- Fixed a bug in [isMatch](https://es-toolkit.slash.page/reference/compat/predicate/isMatch.html) that did not strictly compare primitive falsy values.
+
+This version includes contributions from @D-Sketon, @wojtekmaj, @mass2527, @chhw130, and @knott11. Thank you for your valuable contributions!
+
+## Version v1.22.0
+
+Released on September 28th, 2024.
+
+- Added support for [flow](https://es-toolkit.slash.page/reference/function/flow.html), [flowRight](https://es-toolkit.slash.page/reference/function/flowRight.html), [isMap](https://es-toolkit.slash.page/reference/predicate/isMap.html), and [isSet](https://es-toolkit.slash.page/reference/predicate/isSet.html).
+- Added compatibility functions for [filter](https://es-toolkit.slash.page/reference/compat/array/filter.html), [includes](https://es-toolkit.slash.page/reference/compat/array/includes.html), [every](https://es-toolkit.slash.page/reference/compat/array/every.html), [flip](https://es-toolkit.slash.page/reference/compat/function/flip.html), and [dropWhile](https://es-toolkit.slash.page/reference/array/dropWhile.html).
+
+- Fixed a bug in [throttle](https://es-toolkit.slash.page/reference/function/throttle.html) that prevented it from throttling after the initial `throttleMs`.
+- Fixed a bug in [cloneDeep](https://es-toolkit.slash.page/reference/object/cloneDeep.html) that caused it to not clone the offset and length of `DataView`.
+- Fixed a bug in [clone](https://es-toolkit.slash.page/reference/object/clone.html) that threw an error if `SharedArrayBuffer` is unavailable.
+
+This version includes contributions from @dayongkr, @k-jeonghee, @D-Sketon, @iDevGon, @mass2527, @wojtekmaj, @jonganebski, @hyesungoh, and @chhw130. Thank you for your valuable contributions!
+
+## Version v1.21.0
+
+Released on September 25th, 2024.
+
+- Added support for [constantCase](https://es-toolkit.slash.page/reference/string/constantCase.html) and [isError](https://es-toolkit.slash.page/reference/predicate/isError.html).
+- Added compatibility functions for [pad](https://es-toolkit.slash.page/reference/compat/string/pad.html), [padStart](https://es-toolkit.slash.page/reference/compat/string/padStart.html), [padEnd](https://es-toolkit.slash.page/reference/compat/string/padEnd.html), [defer](https://es-toolkit.slash.page/reference/compat/function/defer.html), [isFinite](https://es-toolkit.slash.page/reference/compat/predicate/isFinite.html), [toNumber](https://es-toolkit.slash.page/reference/compat/math/toNumber.html), [toFinite](https://es-toolkit.slash.page/reference/compat/math/toFinite.html), and [toInteger](https://es-toolkit.slash.page/reference/compat/math/toInteger.html).
+- Improved performance for [flatten](https://es-toolkit.slash.page/reference/array/flatten.html), [isNumber](https://es-toolkit.slash.page/reference/predicate/isNumber.html), [isString](https://es-toolkit.slash.page/reference/predicate/isString.html), [isSymbol](https://es-toolkit.slash.page/reference/predicate/isSymbol.html), [isRegExp](https://es-toolkit.slash.page/reference/predicate/isRegExp.html), and [isBoolean](https://es-toolkit.slash.page/reference/predicate/isBoolean.html).
+- Fixed [compact](https://es-toolkit.slash.page/reference/array/compact.html) to correctly exclude `0n` as a falsey value.
+- Fixed [pick](https://es-toolkit.slash.page/reference/object/pick.html) to not pick nonexistent keys from the original object.
+- Fixed [omit](https://es-toolkit.slash.page/reference/object/omit.html) to accept readonly arrays.
+
+This version includes contributions from @hyesungoh, @D-Sketon, @mass2527, @gweesin, @VVSOGI, @coding-honey, @seonghun0828, and @jsparkdev. Thank you for your valuable contributions!
+
+## Version v1.20.0
+
+Released on September 20th, 2024.
+
+- Added support for function invocation on leading and trailing edges for [debounce](https://es-toolkit.slash.page/reference/function/debounce.html) and [throttle](https://es-toolkit.slash.page/reference/function/throttle.html).
+- Added compatibility functions for [debounce](https://es-toolkit.slash.page/reference/function/debounce.html), [throttle](https://es-toolkit.slash.page/reference/function/throttle.html), [curry](https://es-toolkit.slash.page/reference/function/curry.html), [isNumber](https://es-toolkit.slash.page/reference/compat/predicate/isNumber.html), and [isNaN](https://es-toolkit.slash.page/reference/compat/predicate/isNaN.html).
+- Improved performance for [at](https://es-toolkit.slash.page/reference/array/at.html), [zip](https://es-toolkit.slash.page/reference/array/zip.html), [zipWith](https://es-toolkit.slash.page/reference/array/zipWith.html), and [drop](https://es-toolkit.slash.page/reference/array/drop.html).
+
+## Version v1.19.0
+
+Released on September 14th, 2024.
+
+- Added support for [isDate](https://es-toolkit.slash.page/reference/predicate/isDate.html), [curry](https://es-toolkit.slash.page/reference/function/curry.html), [upperCase](https://es-toolkit.slash.page/reference/string/upperCase.html).
+- Added compatibility functions for [pick](https://es-toolkit.slash.page/reference/object/pick.html), [omit](https://es-toolkit.slash.page/reference/object/omit.html), [unset](https://es-toolkit.slash.page/reference/compat/object/unset.html), [toPath](https://es-toolkit.slash.page/reference/compat/util/toPath.html), [trim](https://es-toolkit.slash.page/reference/compat/string/trim.html), [trimStart](https://es-toolkit.slash.page/reference/compat/string/trimStart.html), [trimEnd](https://es-toolkit.slash.page/reference/compat/string/trimEnd.html), [isInteger](https://es-toolkit.slash.page/reference/compat/predicate/isInteger.html), [isSafeInteger](https://es-toolkit.slash.page/reference/compat/predicate/isSafeInteger.html), [snakeCase](https://es-toolkit.slash.page/reference/string/snakeCase.html), [startCase](https://es-toolkit.slash.page/reference/string/startCase.html), [lowerCase](https://es-toolkit.slash.page/reference/string/lowerCase.html), [kebabCase](https://es-toolkit.slash.page/reference/string/kebabCase.html), [ceil](https://es-toolkit.slash.page/reference/compat/math/ceil.html), [floor](https://es-toolkit.slash.page/reference/compat/math/floor.html), [round](https://es-toolkit.slash.page/reference/math/round.html).
+- Enhanced [clone](https://es-toolkit.slash.page/reference/object/clone.html) to handle `Buffer`s, `SharedArrayBuffer`s, `File`s, `Blob`s, `TypedArray`s, and `Error`s.
+- Fixed a bug where [mergeWith](https://es-toolkit.slash.page/reference/object/mergeWith.html) did not preserve the original properties of the `target` object.
+- Fixed a bug where [groupBy](https://es-toolkit.slash.page/reference/array/groupBy.html) couldn't group with keys like `toString` and `indexOf`.
+- Improved performance for [has](https://es-toolkit.slash.page/reference/compat/object/has.html) and [get](https://es-toolkit.slash.page/reference/compat/object/get.html).
+
+## Version v1.18.0
+
+Released on September 12th, 2024.
+
+- Added support for [isObject](https://es-toolkit.slash.page/reference/compat/predicate/isObject.html), [findLastIndex](https://es-toolkit.slash.page/reference/compat/array/findLastIndex.html), [parseInt](https://es-toolkit.slash.page/reference/compat/math/parseInt.html), [rearg](https://es-toolkit.slash.page/reference/compat/function/rearg.html), [conforms](https://es-toolkit.slash.page/reference/compat/predicate/conforms.html), [conformsTo](https://es-toolkit.slash.page/reference/compat/predicate/conformsTo.html), [bindKey](https://es-toolkit.slash.page/reference/compat/function/bindKey.html), [some](https://es-toolkit.slash.page/reference/compat/array/some.html), [fromPairs](https://es-toolkit.slash.page/reference/compat/object/fromPairs.html), [isArrayLikeObject](https://es-toolkit.slash.page/reference/compat/predicate/isArrayLikeObject.html), [escapeRegExp](https://es-toolkit.slash.page/reference/string/escapeRegExp.html), [sortBy](https://es-toolkit.slash.page/reference/array/sortBy.html), [isWeakSet](https://es-toolkit.slash.page/reference/predicate/isWeakSet.html), [isWeakMap](https://es-toolkit.slash.page/reference/predicate/isWeakMap.html), [flatMapDeep](https://es-toolkit.slash.page/reference/array/flatMapDeep.html), [escape](https://es-toolkit.slash.page/reference/string/escape.html), [unescape](https://es-toolkit.slash.page/reference/string/unescape.html), [repeat](https://es-toolkit.slash.page/reference/compat/string/repeat.html), [pad](https://es-toolkit.slash.page/reference/compat/string/pad.html), [join](https://es-toolkit.slash.page/reference/compat/array/join.html), and [spread](https://es-toolkit.slash.page/reference/compat/function/spread.html).
+- Improved performance for [deburr](https://es-toolkit.slash.page/reference/string/deburr.html).
+
+## Version v1.17.0
+
+Released on August 31st, 2024.
+
+### New Features
+
+- Added support for new functions: [at](https://es-toolkit.slash.page/reference/array/at.html), [pullAt](https://es-toolkit.slash.page/reference/array/pullAt.html), [deburr](https://es-toolkit.slash.page/reference/string/deburr.html), [lowerFirst](https://es-toolkit.slash.page/reference/string/lowerFirst.html), [upperFirst](https://es-toolkit.slash.page/reference/string/upperFirst.html), and [isRegExp](https://es-toolkit.slash.page/reference/predicate/isRegExp.html).
+- Enhanced [orderBy](https://es-toolkit.slash.page/reference/array/orderBy.html) and [sortBy](https://es-toolkit.slash.page/reference/array/sortBy.html) to support function criteria.
+- [countBy](https://es-toolkit.slash.page/reference/array/countBy.html) now supports numeric and symbol keys.
+
+#### Bug Fixes
+
+- Updated type definitions for [throttle](https://es-toolkit.slash.page/reference/function/throttle.html) and [debounce](https://es-toolkit.slash.page/reference/function/debounce.html).
+- (`es-toolkit/compat`) Fixed [orderBy](https://es-toolkit.slash.page/reference/array/orderBy.html) to correctly handle deep keys even when object shapes differ ([#427](https://github.com/toss/es-toolkit/pull/427)).
+
+## Version v1.16.0
+
+Released on August 15th, 2024.
+
+- Added support for [memoize](https://es-toolkit.slash.page/reference/function/memoize.html), [find](https://es-toolkit.slash.page/reference/compat/array/find.html), [findIndex](https://es-toolkit.slash.page/reference/compat/array/findIndex.html), [has](https://es-toolkit.slash.page/reference/compat/object/has.html), [partial](https://es-toolkit.slash.page/reference/function/partial.html), [partialRight](https://es-toolkit.slash.page/reference/function/partialRight.html), [sortBy](https://es-toolkit.slash.page/reference/array/sortBy.html), [isString](https://es-toolkit.slash.page/reference/predicate/isString.html), [rest](https://es-toolkit.slash.page/reference/function/rest.html), [padEnd](https://es-toolkit.slash.page/reference/compat/string/padEnd.html).
+
+## Version v1.15.1
+
+Released on August 10th, 2024.
+
+- Disabled implicit conversion of values in [orderBy](https://es-toolkit.slash.page/reference/array/orderBy.html) for performance and simplicity.
+
+## Version v1.15.0
+
+Released on August 10th, 2024.
+
+- Added support for [merge](https://es-toolkit.slash.page/reference/object/merge.html), [mergeWith](https://es-toolkit.slash.page/reference/object/mergeWith.html), [toMerged](https://es-toolkit.slash.page/reference/object/toMerged.html), [isSymbol](https://es-toolkit.slash.page/reference/predicate/isSymbol.html), [pascalCase](https://es-toolkit.slash.page/reference/string/pascalCase.html).
+- Added compatibility tests with lodash for [orderBy](https://es-toolkit.slash.page/reference/array/orderBy.html).
+
+## Version v1.14.0
+
+Released on August 9th, 2024.
+
+- (`es-toolkit`) Added support for [mapKeys](https://es-toolkit.slash.page/reference/object/mapKeys.html), [mapValues](https://es-toolkit.slash.page/reference/object/mapValues.html), [cloneDeep](https://es-toolkit.slash.page/reference/object/cloneDeep.html), [before](https://es-toolkit.slash.page/reference/function/before.html), [after](https://es-toolkit.slash.page/reference/function/after.html), [isSubset](https://es-toolkit.slash.page/reference/array/isSubset.html), [ary](https://es-toolkit.slash.page/reference/function/ary.html), [unary](https://es-toolkit.slash.page/reference/function/unary.html), [flattenDeep](https://es-toolkit.slash.page/reference/array/flattenDeep.html), [isEqual](https://es-toolkit.slash.page/reference/predicate/isEqual.html), [isFunction](https://es-toolkit.slash.page/reference/predicate/isFunction.html), [isBoolean](https://es-toolkit.slash.page/reference/predicate/isBoolean.html), [isPrimitive](https://es-toolkit.slash.page/reference/predicate/isPrimitive.html), and [isTypedArray](https://es-toolkit.slash.page/reference/predicate/isTypedArray.html).
+- (`es-toolkit/compat`) Added support for [matches](https://es-toolkit.slash.page/reference/compat/predicate/matches.html), [isMatch](https://es-toolkit.slash.page/reference/compat/predicate/isMatch.html), [isArray](https://es-toolkit.slash.page/reference/compat/predicate/isArray.html), [isArrayLike](https://es-toolkit.slash.page/reference/compat/predicate/isArrayLike.html), [isObjectLike](https://es-toolkit.slash.page/reference/compat/predicate/isObjectLike.html), [isArguments](https://es-toolkit.slash.page/reference/compat/predicate/isArguments.html), [size](https://es-toolkit.slash.page/reference/compat/array/size.html), [bind](https://es-toolkit.slash.page/reference/compat/function/bind.html), [flattenDepth](https://es-toolkit.slash.page/reference/array/flatten.html), and [padStart](https://es-toolkit.slash.page/reference/compat/string/padStart.html).
+- Added compatibility tests with lodash for many functions like [initial](https://es-toolkit.slash.page/reference/array/initial.html), [last](https://es-toolkit.slash.page/reference/array/last.html), [takeRight](https://es-toolkit.slash.page/reference/array/takeRight.html), [without](https://es-toolkit.slash.page/reference/array/without.html), [uniq](https://es-toolkit.slash.page/reference/array/uniq.html), [invert](https://es-toolkit.slash.page/reference/object/invert.html), [isNull](https://es-toolkit.slash.page/reference/predicate/isNull.html), [isUndefined](https://es-toolkit.slash.page/reference/predicate/isUndefined.html), and [isNil](https://es-toolkit.slash.page/reference/predicate/isNil.html).
+
+## Version v1.13.1
+
+Released on July 20th, 2024.
+
+- Use the compatibility layer `es-toolkit/compat` in legacy CDN builds.
+
+## Version v1.13.0
+
+Released on July 20th, 2024.
+
+`es-toolkit` can now be used in various CDNs, like [unpkg](https://unpkg.com) and [jsdelivr](https://www.jsdelivr.com). See more in our [usage docs](https://es-toolkit.slash.page/usage.html)
+
+### Features
+
+- Added support for [flattenObject](https://es-toolkit.slash.page/reference/object/flattenObject.html), [isPlainObject](https://es-toolkit.slash.page/reference/predicate/isPlainObject.html), [isLength](https://es-toolkit.slash.page/reference/predicate/isLength.html). ([3e60443](https://github.com/toss/es-toolkit/commit/3e60443a408d3296e4a18a1601a16f5953d414f9), [3764993](https://github.com/toss/es-toolkit/commit/376499351f347c269400ee0eeb5145ad041c7c06), [#245](https://github.com/toss/es-toolkit/pull/245))
+- Added support for [concat](https://es-toolkit.slash.page/reference/compat/array/concat.html) in our compatibility layer `es-toolkit/compat`. ([e09517f](https://github.com/toss/es-toolkit/commit/e09517f05c180b43e0f2b0b0fa44167f9c4832f3))
+
+### Lodash Compatibility
+
+- Ensured compatibility with [difference](https://es-toolkit.slash.page/reference/array/difference.html) and [take](https://es-toolkit.slash.page/reference/compat/array/take.html)
+
+## Version v1.12.0
+
+Released on July 19th, 2024.
+
+- Fixed a bug where `es-toolkit/compat` was not available in modern Node.js environments.
+- Added support for [max](https://es-toolkit.slash.page/reference/compat/math/max.html) and [min](https://es-toolkit.slash.page/reference/compat/math/min.html) in our compatibility layer `es-toolkit/compat`. ([e1e6e38](https://github.com/toss/es-toolkit/commit/e1e6e38206750fb90f5b99cace9196635288e21c))
+
+## Version v1.11.0
+
+Released on July 18th, 2024.
+
+### Introducing `es-toolkit/compat`
+
+We're introducing `es-toolkit/compat`, a new module designed as a drop-in replacement for lodash. It replicates lodash's API, making it easier to switch between the two libraries.
+
+`es-toolkit/compat` is undergoing rigorous testing using real `lodash` test cases. Initial benchmarks suggest it's typically 5% slower and increases bundle size by 10% compared to the original `es-toolkit`.
+
+This module is intended to facilitate a smooth transition and should be replaced with the original `es-toolkit` for optimal performance once migration is complete.
+
+For more information, see our [compatibility documentation](https://es-toolkit.slash.page/compatibility.html).
+
+### Features
+
+- Added support for [get](https://es-toolkit.slash.page/reference/compat/object/get.html) and [set](https://es-toolkit.slash.page/reference/compat/object/set.html) in our compatibility layer `es-toolkit/compat`. (https://github.com/toss/es-toolkit/pull/232, https://github.com/toss/es-toolkit/pull/223)
+- Added support for [zipObjectDeep](https://es-toolkit.slash.page/reference/compat/array/zipObjectDeep.html) in our compatibility layer `es-toolkit/compat`. (https://github.com/toss/es-toolkit/pull/150)
+- Added support for [flatMap](https://es-toolkit.slash.page/reference/compat/array/flatMap.html). (https://github.com/toss/es-toolkit/pull/209)
+- Added support for [startCase](https://es-toolkit.slash.page/reference/string/startCase.html), [startsWith](https://es-toolkit.slash.page/reference/string/startsWith.html), and [endsWith](https://es-toolkit.slash.page/reference/string/endsWith.html). (https://github.com/toss/es-toolkit/pull/224).
+- Added support for [withTimeout](https://es-toolkit.slash.page/reference/promise/withTimeout.html). (https://github.com/toss/es-toolkit/pull/210)
+
+### Bug fixes
+
+- Fixed `drop` and `dropRight` incorrectly accepting negative integers. (https://github.com/toss/es-toolkit/pull/218)
+- Fixed `invert` not to invert inherited properties. (https://github.com/toss/es-toolkit/pull/221)
+
+### Performance Improvements
+
+- Improved performance for `dropRightWhile`. (https://github.com/toss/es-toolkit/pull/220)
+
+## Version v1.10.1
+
+Released on July 15th, 2024.
+
+- Fixed [camelCase](https://es-toolkit.slash.page/reference/string/camelCase.html) using `capitalize` from incorrect import. ([8dda135](https://github.com/toss/es-toolkit/commit/8dda135fa339ae4953908a74b2e6eeca9f163a20))
+
+## Version v1.10.0
+
+Released on July 14th, 2024.
+
+### Features
+
+- Add support for [capitalize](https://es-toolkit.slash.page/reference/string/capitalize.html), [snakeCase](https://es-toolkit.slash.page/reference/string/snakeCase.html), [kebabCase](https://es-toolkit.slash.page/reference/string/kebabCase.html), [camelCase](https://es-toolkit.slash.page/reference/string/camelCase.html) and [lowerCase](https://es-toolkit.slash.page/reference/string/lowerCase.html). (https://github.com/toss/es-toolkit/pull/152, https://github.com/toss/es-toolkit/pull/161, https://github.com/toss/es-toolkit/pull/162, https://github.com/toss/es-toolkit/pull/166, [21d6530](https://github.com/toss/es-toolkit/commit/21d6530e16471d596410d57d59fd3ced8fc5569f)).
+- Add support for [negate](https://es-toolkit.slash.page/reference/function/negate.html). (https://github.com/toss/es-toolkit/pull/177)
+- Add support for [isEqual](https://es-toolkit.slash.page/reference/predicate/isEqual.html). (https://github.com/toss/es-toolkit/pull/174)
+- Add support for [clone](https://es-toolkit.slash.page/reference/object/clone.html). (https://github.com/toss/es-toolkit/pull/155)
+- Add support for [toFilled](https://es-toolkit.slash.page/reference/array/toFilled.html). (https://github.com/toss/es-toolkit/pull/154)
+- Add support for [initial](https://es-toolkit.slash.page/reference/array/initial.html) and [last](https://es-toolkit.slash.page/reference/array/last.html). (https://github.com/toss/es-toolkit/pull/188, https://github.com/toss/es-toolkit/pull/149)
+- Add support for [flattenDeep](https://es-toolkit.slash.page/reference/array/flattenDeep.html). (https://github.com/toss/es-toolkit/pull/160)
+
+### Performance Improvements
+
+- Optimize the performance of [isNil](https://es-toolkit.slash.page/reference/predicate/isNil.html) by simplifying its check. ([489ac76](https://github.com/toss/es-toolkit/commit/489ac76fc62f97cbfa3ca9eec2e0a4c03c4f5b1c))
+- Optimize the performance of [sum](https://es-toolkit.slash.page/reference/array/sum.html). (https://github.com/toss/es-toolkit/pull/155)
+
+## Version v1.9.0
+
+Released on July 10th, 2024.
+
+- Add support for [head](https://es-toolkit.slash.page/reference/array/head.html) and [tail](https://es-toolkit.slash.page/reference/array/tail.html). (https://github.com/toss/es-toolkit/pull/131, https://github.com/toss/es-toolkit/pull/143).
+- Add support for [unzip](https://es-toolkit.slash.page/reference/array/unzip.html). (https://github.com/toss/es-toolkit/pull/130)
+- Add support for [flatten](https://es-toolkit.slash.page/reference/array/flatten.html), which is six times faster than `Array#flat`. (https://github.com/toss/es-toolkit/pull/147)
+
+## Version v1.8.0
+
+Released on July 5th, 2024.
+
+- Add support for [orderBy](https://es-toolkit.slash.page/reference/array/orderBy.html). (https://github.com/toss/es-toolkit/pull/123)
+- Add support for [invert](https://es-toolkit.slash.page/reference/array/invert.html). (https://github.com/toss/es-toolkit/pull/125)
+- Add support for [inRange](https://es-toolkit.slash.page/reference/array/inRange.html). (https://github.com/toss/es-toolkit/pull/124)
+
+## Version v1.7.1
+
+Released on July 3rd, 2024.
+
+- Add support for [unzipWith](https://es-toolkit.slash.page/reference/array/unzipWith.html). (https://github.com/toss/es-toolkit/pull/113)
+- Add support for [forEachRight](https://es-toolkit.slash.page/reference/array/forEachRight.html). (https://github.com/toss/es-toolkit/pull/119)
+- Add support for [countBy](https://es-toolkit.slash.page/reference/array/countBy.html). (https://github.com/toss/es-toolkit/pull/117)
+- Add support for [without](https://es-toolkit.slash.page/reference/array/without.html). (https://github.com/toss/es-toolkit/pull/115)
+- Add support for [fill](https://es-toolkit.slash.page/reference/array/fill.html). (https://github.com/toss/es-toolkit/pull/109)
+- Add support for [sampleSize](https://es-toolkit.slash.page/reference/array/sampleSize.html). (https://github.com/toss/es-toolkit/pull/101)
+- Add support for [meanBy](https://es-toolkit.slash.page/reference/math/meanBy.html). (https://github.com/toss/es-toolkit/pull/104)
+- Accept number and symbol keys in [keyBy](https://es-toolkit.slash.page/reference/array/keyBy.html) and [groupBy](https://es-toolkit.slash.page/reference/array/groupBy.html) (https://github.com/toss/es-toolkit/pull/98, https://github.com/toss/es-toolkit/pull/99)
+
+## Version v1.6.1
+
+Released on June 30th, 2024.
+
+- Publish package on [JSR](https://jsr.io/@es-toolkit/es-toolkit).
+
+## Version v1.6.0
+
+Released on June 30th, 2024.
+
+### Features
+
+- Add support for [keyBy](https://es-toolkit.slash.page/reference/array/keyBy.html). (https://github.com/toss/es-toolkit/pull/93).
+- Add support for [zipObject](https://es-toolkit.slash.page/reference/array/zipObject.html). (https://github.com/toss/es-toolkit/pull/92).
+- Add support for [compact](https://es-toolkit.slash.page/reference/array/compact.html). ([60ae59b](https://github.com/toss/es-toolkit/commit/60ae59bcfee69992e5447322e1da9cb7631c5745))
+- Add support for [mean](https://es-toolkit.slash.page/reference/math/mean.html). ([715bc60](https://github.com/toss/es-toolkit/commit/715bc60b26bb24ad490b8befe16204050699f0c0))
+
+## Version v1.5.0
+
+Released on June 28th, 2024.
+
+### Features
+
+- Add support for [range](https://es-toolkit.slash.page/reference/math/range.html). (https://github.com/toss/es-toolkit/pull/77, [2db11d8](https://github.com/toss/es-toolkit/commit/2db11d8882f6d7b0b53271c76f4c5007b6a9181e)).
+- Add support for [minBy](https://es-toolkit.slash.page/reference/math/minBy.html) (https://github.com/toss/es-toolkit/pull/71).
+- Add support for [maxBy](https://es-toolkit.slash.page/reference/math/maxBy.html) (https://github.com/toss/es-toolkit/pull/64).
+
+### Bug fixes
+
+- Enforce stricter argument types in `pickBy` and `omitBy`. (https://github.com/toss/es-toolkit/pull/60)
+- Fix a bug in `difference` where one array parameter was not readonly. (https://github.com/toss/es-toolkit/pull/83)
+- Fix a bug in `round` where it incorrectly accepts floating-point numbers as `precision`. (https://github.com/toss/es-toolkit/pull/79)
+
+## Version v1.4.0
+
+Released on June 15th, 2024.
+
+### Features
+
+- Add support for [random](https://es-toolkit.slash.page/reference/math/random.html). (https://github.com/toss/es-toolkit/pull/53)
+- Add support for [randomInt](https://es-toolkit.slash.page/reference/math/randomInt.html). ([99a34e4](https://github.com/toss/es-toolkit/commit/99a34e4e9944c1b843e9d97dff0b5ff4e5eec260))
+- Add support for using AbortSignals to cancel the `Promise` returned by `delay`. (https://github.com/toss/es-toolkit/pull/52)
+
+### Performance Optimizations
+
+- Optimized `uniqBy`. ([60e7974](https://github.com/toss/es-toolkit/commit/60e79741271e645bfa551f708466e43b136f69b1))
+
+## Version v1.3.1
+
+Released on June 15th, 2024.
+
+- Fixed a bug in `dropWhile` where it incorrectly returned the entire array when no elements matched the predicate. (https://github.com/toss/es-toolkit/pull/49)
+
+## Version v1.3.0
+
+Released on June 14th, 2024.
+
+### Features
+
+- Add support for using AbortSignals to cancel `debounce`d functions. (https://github.com/toss/es-toolkit/pull/45)
+
+### Performance Optimizations
+
+- Optimize the time complexity of `intersection`. (https://github.com/toss/es-toolkit/pull/47)
+
+## Version v1.2.2
+
+Released on June 13th, 2024.
+
+- Add support for `readonly` arrays in array utilities. (https://github.com/toss/es-toolkit/pull/32, [e595e5e](https://github.com/toss/es-toolkit/commit/e595e5e017e1f2cb138b1ad3d708635efc5e289e))
+- Optimize the time complexity of `uniq`. (https://github.com/toss/es-toolkit/pull/40)
+- Optimize the time complexity of `intersectionBy`. (https://github.com/toss/es-toolkit/pull/44)
+
+## Version v1.2.1
+
+Released on June 13th, 2024.
+
+- Ensure that the `omit` and `pick` functions only accept plain JavaScript objects as arguments. (https://github.com/toss/es-toolkit/pull/35)
+
+## Version v1.2.0
+
+Released on June 8th, 2024.
+
+### Features
+
+- Added the `noop` function. (https://github.com/toss/es-toolkit/commit/678028dd3d60509b99dfec47aed7f1088140d19d)
+
+### Performance Improvements
+
+- Optimized the `difference` and `differenceBy` functions for better performance with large arrays. (https://github.com/toss/es-toolkit/pull/27, https://github.com/toss/es-toolkit/pull/28)
+
+### Bug fixes
+
+- Fixed `shuffle` to ensure it does not modify the original array. (https://github.com/toss/es-toolkit/pull/29)
+
+## Version v1.1.0
+
+Released on June 5th, 2024.
+
+- Support passing arguments to throttled and debounced functions. (https://github.com/toss/es-toolkit/pull/26)
+
+## Version v1.0.4
+
+Released on June 4th, 2024.
+
+- Provide correct type declarations for ECMAScript Modules. (https://github.com/toss/es-toolkit/pull/21)
+
+## Version v1.0.3
+
+Released on June 3rd, 2024.
+
+- Provide correct types for `"module": "Node"`, ` "Node10"`, and `"Node16"`. (https://github.com/toss/es-toolkit/pull/16)
+
+## Version v1.0.2
+
+Initial release. Released on May 31th, 2024.
Index: node_modules/es-toolkit/LICENSE
===================================================================
--- node_modules/es-toolkit/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+MIT License
+
+Copyright (c) 2024 Viva Republica, Inc
+
+Copyright OpenJS Foundation and other contributors
+
+Parts of the test suite and compatibility layer in `es-toolkit/compat` are derived from Lodash (https://github.com/lodash/lodash) by the OpenJS Foundation (https://openjsf.org/) and Underscore.js by Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors (http://underscorejs.org/)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/es-toolkit/README.md
===================================================================
--- node_modules/es-toolkit/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+![](./docs/public/og.png)
+
+# es-toolkit &middot; [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/toss/slash/blob/main/LICENSE) [![codecov](https://codecov.io/gh/toss/es-toolkit/graph/badge.svg?token=8N5S3AR3C7)](https://codecov.io/gh/toss/es-toolkit) [![NPM badge](https://img.shields.io/npm/v/es-toolkit?logo=npm)](https://www.npmjs.com/package/es-toolkit) [![JSR badge](https://jsr.io/badges/@es-toolkit/es-toolkit)](https://jsr.io/@es-toolkit/es-toolkit) [![Discord Badge](https://discord.com/api/guilds/1281071127052943361/widget.png?style=shield)](https://discord.gg/vGXbVjP2nY)
+
+English | [한국어](https://github.com/toss/es-toolkit/blob/main/README-ko_kr.md) | [简体中文](https://github.com/toss/es-toolkit/blob/main/README-zh_hans.md) | [日本語](https://github.com/toss/es-toolkit/blob/main/README-ja_jp.md)
+
+es-toolkit is a state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations.
+
+- es-toolkit offers a variety of everyday utility functions with modern implementations, such as [debounce](https://es-toolkit.dev/reference/function/debounce.html), [delay](https://es-toolkit.dev/reference/promise/delay.html), [chunk](https://es-toolkit.dev/reference/array/chunk.html), [sum](https://es-toolkit.dev/reference/math/sum.html), and [pick](https://es-toolkit.dev/reference/object/pick.html).
+- Designed with performance in mind, es-toolkit achieves [2-3× better performance](https://es-toolkit.dev/performance.html) in modern JavaScript environments.
+- es-toolkit supports tree shaking out of the box, and [reduces JavaScript code by up to 97%](https://es-toolkit.dev/bundle-size.html) compared to other libraries.
+- es-toolkit offers a complete compatibility layer to seamlessly replace lodash, available as [es-toolkit/compat](https://es-toolkit.dev/compatibility.html).
+- es-toolkit includes built-in TypeScript support, with straightforward yet robust types. It also provides useful type guards such as [isNotNil](https://es-toolkit.dev/reference/predicate/isNotNil.html).
+- es-toolkit is trusted and used by popular open-source projects like [Storybook](https://github.com/storybookjs/storybook/blob/9d862798d666678cc4822e857c00bbd744169ced/code/core/package.json#L358), Recharts, ink, and CKEditor.
+- es-toolkit is battle-tested with 100% test coverage, ensuring reliability and robustness.
+
+## Examples
+
+```tsx
+// import from '@es-toolkit/es-toolkit' in jsr.
+import { chunk, debounce } from 'es-toolkit';
+
+const debouncedLog = debounce(message => {
+  console.log(message);
+}, 300);
+
+// This call will be debounced
+debouncedLog('Hello, world!');
+
+const array = [1, 2, 3, 4, 5, 6];
+const chunkedArray = chunk(array, 2);
+
+console.log(chunkedArray);
+// Output: [[1, 2], [3, 4], [5, 6]]
+```
+
+## Contributing
+
+We welcome contribution from everyone in the community. Read below for detailed contribution guide.
+
+[CONTRIBUTING](https://github.com/toss/es-toolkit/blob/main/.github/CONTRIBUTING.md)
+
+## License
+
+MIT © Viva Republica, Inc. See [LICENSE](./LICENSE) for details.
+
+<a title="Toss" href="https://toss.im">
+  <picture>
+    <source media="(prefers-color-scheme: dark)" srcset="https://static.toss.im/logos/png/4x/logo-toss-reverse.png">
+    <img alt="Toss" src="https://static.toss.im/logos/png/4x/logo-toss.png" width="100">
+  </picture>
+</a>
Index: node_modules/es-toolkit/array.d.ts
===================================================================
--- node_modules/es-toolkit/array.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/array.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/array';
Index: node_modules/es-toolkit/array.js
===================================================================
--- node_modules/es-toolkit/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/array');
Index: node_modules/es-toolkit/compat.d.ts
===================================================================
--- node_modules/es-toolkit/compat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/compat';
Index: node_modules/es-toolkit/compat.js
===================================================================
--- node_modules/es-toolkit/compat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/compat');
Index: node_modules/es-toolkit/compat/add.d.ts
===================================================================
--- node_modules/es-toolkit/compat/add.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/add.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { add as default } from '../dist/compat/math/add.js';
Index: node_modules/es-toolkit/compat/add.js
===================================================================
--- node_modules/es-toolkit/compat/add.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/add.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/add.js').add;
Index: node_modules/es-toolkit/compat/after.d.ts
===================================================================
--- node_modules/es-toolkit/compat/after.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/after.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { after as default } from '../dist/compat/function/after.js';
Index: node_modules/es-toolkit/compat/after.js
===================================================================
--- node_modules/es-toolkit/compat/after.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/after.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/after.js').after;
Index: node_modules/es-toolkit/compat/ary.d.ts
===================================================================
--- node_modules/es-toolkit/compat/ary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/ary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { ary as default } from '../dist/compat/function/ary.js';
Index: node_modules/es-toolkit/compat/ary.js
===================================================================
--- node_modules/es-toolkit/compat/ary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/ary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/ary.js').ary;
Index: node_modules/es-toolkit/compat/assign.d.ts
===================================================================
--- node_modules/es-toolkit/compat/assign.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/assign.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { assign as default } from '../dist/compat/object/assign.js';
Index: node_modules/es-toolkit/compat/assign.js
===================================================================
--- node_modules/es-toolkit/compat/assign.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/assign.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/assign.js').assign;
Index: node_modules/es-toolkit/compat/assignIn.d.ts
===================================================================
--- node_modules/es-toolkit/compat/assignIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/assignIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { assignIn as default } from '../dist/compat/object/assignIn.js';
Index: node_modules/es-toolkit/compat/assignIn.js
===================================================================
--- node_modules/es-toolkit/compat/assignIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/assignIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/assignIn.js').assignIn;
Index: node_modules/es-toolkit/compat/assignInWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/assignInWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/assignInWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { assignInWith as default } from '../dist/compat/object/assignInWith.js';
Index: node_modules/es-toolkit/compat/assignInWith.js
===================================================================
--- node_modules/es-toolkit/compat/assignInWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/assignInWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/assignInWith.js').assignInWith;
Index: node_modules/es-toolkit/compat/assignWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/assignWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/assignWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { assignWith as default } from '../dist/compat/object/assignWith.js';
Index: node_modules/es-toolkit/compat/assignWith.js
===================================================================
--- node_modules/es-toolkit/compat/assignWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/assignWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/assignWith.js').assignWith;
Index: node_modules/es-toolkit/compat/at.d.ts
===================================================================
--- node_modules/es-toolkit/compat/at.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/at.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { at as default } from '../dist/compat/object/at.js';
Index: node_modules/es-toolkit/compat/at.js
===================================================================
--- node_modules/es-toolkit/compat/at.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/at.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/at.js').at;
Index: node_modules/es-toolkit/compat/attempt.d.ts
===================================================================
--- node_modules/es-toolkit/compat/attempt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/attempt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { attempt as default } from '../dist/compat/function/attempt.js';
Index: node_modules/es-toolkit/compat/attempt.js
===================================================================
--- node_modules/es-toolkit/compat/attempt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/attempt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/attempt.js').attempt;
Index: node_modules/es-toolkit/compat/before.d.ts
===================================================================
--- node_modules/es-toolkit/compat/before.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/before.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { before as default } from '../dist/compat/function/before.js';
Index: node_modules/es-toolkit/compat/before.js
===================================================================
--- node_modules/es-toolkit/compat/before.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/before.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/before.js').before;
Index: node_modules/es-toolkit/compat/bind.d.ts
===================================================================
--- node_modules/es-toolkit/compat/bind.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/bind.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { bind as default } from '../dist/compat/function/bind.js';
Index: node_modules/es-toolkit/compat/bind.js
===================================================================
--- node_modules/es-toolkit/compat/bind.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/bind.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/bind.js').bind;
Index: node_modules/es-toolkit/compat/bindAll.d.ts
===================================================================
--- node_modules/es-toolkit/compat/bindAll.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/bindAll.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { bindAll as default } from '../dist/compat/util/bindAll.js';
Index: node_modules/es-toolkit/compat/bindAll.js
===================================================================
--- node_modules/es-toolkit/compat/bindAll.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/bindAll.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/bindAll.js').bindAll;
Index: node_modules/es-toolkit/compat/bindKey.d.ts
===================================================================
--- node_modules/es-toolkit/compat/bindKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/bindKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { bindKey as default } from '../dist/compat/function/bindKey.js';
Index: node_modules/es-toolkit/compat/bindKey.js
===================================================================
--- node_modules/es-toolkit/compat/bindKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/bindKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/bindKey.js').bindKey;
Index: node_modules/es-toolkit/compat/camelCase.d.ts
===================================================================
--- node_modules/es-toolkit/compat/camelCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/camelCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { camelCase as default } from '../dist/compat/string/camelCase.js';
Index: node_modules/es-toolkit/compat/camelCase.js
===================================================================
--- node_modules/es-toolkit/compat/camelCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/camelCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/camelCase.js').camelCase;
Index: node_modules/es-toolkit/compat/capitalize.d.ts
===================================================================
--- node_modules/es-toolkit/compat/capitalize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/capitalize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { capitalize as default } from '../dist/string/capitalize.js';
Index: node_modules/es-toolkit/compat/capitalize.js
===================================================================
--- node_modules/es-toolkit/compat/capitalize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/capitalize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/string/capitalize.js').capitalize;
Index: node_modules/es-toolkit/compat/castArray.d.ts
===================================================================
--- node_modules/es-toolkit/compat/castArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/castArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { castArray as default } from '../dist/compat/array/castArray.js';
Index: node_modules/es-toolkit/compat/castArray.js
===================================================================
--- node_modules/es-toolkit/compat/castArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/castArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/castArray.js').castArray;
Index: node_modules/es-toolkit/compat/ceil.d.ts
===================================================================
--- node_modules/es-toolkit/compat/ceil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/ceil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { ceil as default } from '../dist/compat/math/ceil.js';
Index: node_modules/es-toolkit/compat/ceil.js
===================================================================
--- node_modules/es-toolkit/compat/ceil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/ceil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/ceil.js').ceil;
Index: node_modules/es-toolkit/compat/chunk.d.ts
===================================================================
--- node_modules/es-toolkit/compat/chunk.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/chunk.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { chunk as default } from '../dist/compat/array/chunk.js';
Index: node_modules/es-toolkit/compat/chunk.js
===================================================================
--- node_modules/es-toolkit/compat/chunk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/chunk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/chunk.js').chunk;
Index: node_modules/es-toolkit/compat/clamp.d.ts
===================================================================
--- node_modules/es-toolkit/compat/clamp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/clamp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { clamp as default } from '../dist/compat/math/clamp.js';
Index: node_modules/es-toolkit/compat/clamp.js
===================================================================
--- node_modules/es-toolkit/compat/clamp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/clamp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/clamp.js').clamp;
Index: node_modules/es-toolkit/compat/clone.d.ts
===================================================================
--- node_modules/es-toolkit/compat/clone.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/clone.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { clone as default } from '../dist/compat/object/clone.js';
Index: node_modules/es-toolkit/compat/clone.js
===================================================================
--- node_modules/es-toolkit/compat/clone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/clone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/clone.js').clone;
Index: node_modules/es-toolkit/compat/cloneDeep.d.ts
===================================================================
--- node_modules/es-toolkit/compat/cloneDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/cloneDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { cloneDeep as default } from '../dist/compat/object/cloneDeep.js';
Index: node_modules/es-toolkit/compat/cloneDeep.js
===================================================================
--- node_modules/es-toolkit/compat/cloneDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/cloneDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/cloneDeep.js').cloneDeep;
Index: node_modules/es-toolkit/compat/cloneDeepWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/cloneDeepWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/cloneDeepWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { cloneDeepWith as default } from '../dist/compat/object/cloneDeepWith.js';
Index: node_modules/es-toolkit/compat/cloneDeepWith.js
===================================================================
--- node_modules/es-toolkit/compat/cloneDeepWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/cloneDeepWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/cloneDeepWith.js').cloneDeepWith;
Index: node_modules/es-toolkit/compat/cloneWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/cloneWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/cloneWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { cloneWith as default } from '../dist/compat/object/cloneWith.js';
Index: node_modules/es-toolkit/compat/cloneWith.js
===================================================================
--- node_modules/es-toolkit/compat/cloneWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/cloneWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/cloneWith.js').cloneWith;
Index: node_modules/es-toolkit/compat/compact.d.ts
===================================================================
--- node_modules/es-toolkit/compat/compact.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/compact.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { compact as default } from '../dist/compat/array/compact.js';
Index: node_modules/es-toolkit/compat/compact.js
===================================================================
--- node_modules/es-toolkit/compat/compact.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/compact.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/compact.js').compact;
Index: node_modules/es-toolkit/compat/concat.d.ts
===================================================================
--- node_modules/es-toolkit/compat/concat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/concat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { concat as default } from '../dist/compat/array/concat.js';
Index: node_modules/es-toolkit/compat/concat.js
===================================================================
--- node_modules/es-toolkit/compat/concat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/concat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/concat.js').concat;
Index: node_modules/es-toolkit/compat/cond.d.ts
===================================================================
--- node_modules/es-toolkit/compat/cond.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/cond.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { cond as default } from '../dist/compat/util/cond.js';
Index: node_modules/es-toolkit/compat/cond.js
===================================================================
--- node_modules/es-toolkit/compat/cond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/cond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/cond.js').cond;
Index: node_modules/es-toolkit/compat/conforms.d.ts
===================================================================
--- node_modules/es-toolkit/compat/conforms.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/conforms.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { conforms as default } from '../dist/compat/predicate/conforms.js';
Index: node_modules/es-toolkit/compat/conforms.js
===================================================================
--- node_modules/es-toolkit/compat/conforms.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/conforms.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/conforms.js').conforms;
Index: node_modules/es-toolkit/compat/conformsTo.d.ts
===================================================================
--- node_modules/es-toolkit/compat/conformsTo.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/conformsTo.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { conformsTo as default } from '../dist/compat/predicate/conformsTo.js';
Index: node_modules/es-toolkit/compat/conformsTo.js
===================================================================
--- node_modules/es-toolkit/compat/conformsTo.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/conformsTo.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/conformsTo.js').conformsTo;
Index: node_modules/es-toolkit/compat/constant.d.ts
===================================================================
--- node_modules/es-toolkit/compat/constant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/constant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { constant as default } from '../dist/compat/util/constant.js';
Index: node_modules/es-toolkit/compat/constant.js
===================================================================
--- node_modules/es-toolkit/compat/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/constant.js').constant;
Index: node_modules/es-toolkit/compat/countBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/countBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/countBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { countBy as default } from '../dist/compat/array/countBy.js';
Index: node_modules/es-toolkit/compat/countBy.js
===================================================================
--- node_modules/es-toolkit/compat/countBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/countBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/countBy.js').countBy;
Index: node_modules/es-toolkit/compat/create.d.ts
===================================================================
--- node_modules/es-toolkit/compat/create.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/create.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { create as default } from '../dist/compat/object/create.js';
Index: node_modules/es-toolkit/compat/create.js
===================================================================
--- node_modules/es-toolkit/compat/create.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/create.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/create.js').create;
Index: node_modules/es-toolkit/compat/curry.d.ts
===================================================================
--- node_modules/es-toolkit/compat/curry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/curry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { curry as default } from '../dist/compat/function/curry.js';
Index: node_modules/es-toolkit/compat/curry.js
===================================================================
--- node_modules/es-toolkit/compat/curry.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/curry.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/curry.js').curry;
Index: node_modules/es-toolkit/compat/curryRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/curryRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/curryRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { curryRight as default } from '../dist/compat/function/curryRight.js';
Index: node_modules/es-toolkit/compat/curryRight.js
===================================================================
--- node_modules/es-toolkit/compat/curryRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/curryRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/curryRight.js').curryRight;
Index: node_modules/es-toolkit/compat/debounce.d.ts
===================================================================
--- node_modules/es-toolkit/compat/debounce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/debounce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { debounce as default } from '../dist/compat/function/debounce.js';
Index: node_modules/es-toolkit/compat/debounce.js
===================================================================
--- node_modules/es-toolkit/compat/debounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/debounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/debounce.js').debounce;
Index: node_modules/es-toolkit/compat/deburr.d.ts
===================================================================
--- node_modules/es-toolkit/compat/deburr.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/deburr.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { deburr as default } from '../dist/compat/string/deburr.js';
Index: node_modules/es-toolkit/compat/deburr.js
===================================================================
--- node_modules/es-toolkit/compat/deburr.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/deburr.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/deburr.js').deburr;
Index: node_modules/es-toolkit/compat/defaultTo.d.ts
===================================================================
--- node_modules/es-toolkit/compat/defaultTo.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/defaultTo.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { defaultTo as default } from '../dist/compat/util/defaultTo.js';
Index: node_modules/es-toolkit/compat/defaultTo.js
===================================================================
--- node_modules/es-toolkit/compat/defaultTo.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/defaultTo.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/defaultTo.js').defaultTo;
Index: node_modules/es-toolkit/compat/defaults.d.ts
===================================================================
--- node_modules/es-toolkit/compat/defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { defaults as default } from '../dist/compat/object/defaults.js';
Index: node_modules/es-toolkit/compat/defaults.js
===================================================================
--- node_modules/es-toolkit/compat/defaults.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/defaults.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/defaults.js').defaults;
Index: node_modules/es-toolkit/compat/defaultsDeep.d.ts
===================================================================
--- node_modules/es-toolkit/compat/defaultsDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/defaultsDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { defaultsDeep as default } from '../dist/compat/object/defaultsDeep.js';
Index: node_modules/es-toolkit/compat/defaultsDeep.js
===================================================================
--- node_modules/es-toolkit/compat/defaultsDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/defaultsDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/defaultsDeep.js').defaultsDeep;
Index: node_modules/es-toolkit/compat/defer.d.ts
===================================================================
--- node_modules/es-toolkit/compat/defer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/defer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { defer as default } from '../dist/compat/function/defer.js';
Index: node_modules/es-toolkit/compat/defer.js
===================================================================
--- node_modules/es-toolkit/compat/defer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/defer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/defer.js').defer;
Index: node_modules/es-toolkit/compat/delay.d.ts
===================================================================
--- node_modules/es-toolkit/compat/delay.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/delay.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { delay as default } from '../dist/compat/function/delay.js';
Index: node_modules/es-toolkit/compat/delay.js
===================================================================
--- node_modules/es-toolkit/compat/delay.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/delay.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/delay.js').delay;
Index: node_modules/es-toolkit/compat/difference.d.ts
===================================================================
--- node_modules/es-toolkit/compat/difference.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/difference.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { difference as default } from '../dist/compat/array/difference.js';
Index: node_modules/es-toolkit/compat/difference.js
===================================================================
--- node_modules/es-toolkit/compat/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/difference.js').difference;
Index: node_modules/es-toolkit/compat/differenceBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/differenceBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/differenceBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { differenceBy as default } from '../dist/compat/array/differenceBy.js';
Index: node_modules/es-toolkit/compat/differenceBy.js
===================================================================
--- node_modules/es-toolkit/compat/differenceBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/differenceBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/differenceBy.js').differenceBy;
Index: node_modules/es-toolkit/compat/differenceWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/differenceWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/differenceWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { differenceWith as default } from '../dist/compat/array/differenceWith.js';
Index: node_modules/es-toolkit/compat/differenceWith.js
===================================================================
--- node_modules/es-toolkit/compat/differenceWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/differenceWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/differenceWith.js').differenceWith;
Index: node_modules/es-toolkit/compat/divide.d.ts
===================================================================
--- node_modules/es-toolkit/compat/divide.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/divide.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { divide as default } from '../dist/compat/math/divide.js';
Index: node_modules/es-toolkit/compat/divide.js
===================================================================
--- node_modules/es-toolkit/compat/divide.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/divide.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/divide.js').divide;
Index: node_modules/es-toolkit/compat/drop.d.ts
===================================================================
--- node_modules/es-toolkit/compat/drop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/drop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { drop as default } from '../dist/compat/array/drop.js';
Index: node_modules/es-toolkit/compat/drop.js
===================================================================
--- node_modules/es-toolkit/compat/drop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/drop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/drop.js').drop;
Index: node_modules/es-toolkit/compat/dropRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/dropRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/dropRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { dropRight as default } from '../dist/compat/array/dropRight.js';
Index: node_modules/es-toolkit/compat/dropRight.js
===================================================================
--- node_modules/es-toolkit/compat/dropRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/dropRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/dropRight.js').dropRight;
Index: node_modules/es-toolkit/compat/dropRightWhile.d.ts
===================================================================
--- node_modules/es-toolkit/compat/dropRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/dropRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { dropRightWhile as default } from '../dist/compat/array/dropRightWhile.js';
Index: node_modules/es-toolkit/compat/dropRightWhile.js
===================================================================
--- node_modules/es-toolkit/compat/dropRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/dropRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/dropRightWhile.js').dropRightWhile;
Index: node_modules/es-toolkit/compat/dropWhile.d.ts
===================================================================
--- node_modules/es-toolkit/compat/dropWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/dropWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { dropWhile as default } from '../dist/compat/array/dropWhile.js';
Index: node_modules/es-toolkit/compat/dropWhile.js
===================================================================
--- node_modules/es-toolkit/compat/dropWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/dropWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/dropWhile.js').dropWhile;
Index: node_modules/es-toolkit/compat/each.d.ts
===================================================================
--- node_modules/es-toolkit/compat/each.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/each.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { forEach as default } from '../dist/compat/array/forEach.js';
Index: node_modules/es-toolkit/compat/each.js
===================================================================
--- node_modules/es-toolkit/compat/each.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/each.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/forEach.js').forEach;
Index: node_modules/es-toolkit/compat/eachRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/eachRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/eachRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { forEachRight as default } from '../dist/compat/array/forEachRight.js';
Index: node_modules/es-toolkit/compat/eachRight.js
===================================================================
--- node_modules/es-toolkit/compat/eachRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/eachRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/forEachRight.js').forEachRight;
Index: node_modules/es-toolkit/compat/endsWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/endsWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/endsWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { endsWith as default } from '../dist/compat/string/endsWith.js';
Index: node_modules/es-toolkit/compat/endsWith.js
===================================================================
--- node_modules/es-toolkit/compat/endsWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/endsWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/endsWith.js').endsWith;
Index: node_modules/es-toolkit/compat/eq.d.ts
===================================================================
--- node_modules/es-toolkit/compat/eq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/eq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { eq as default } from '../dist/compat/util/eq.js';
Index: node_modules/es-toolkit/compat/eq.js
===================================================================
--- node_modules/es-toolkit/compat/eq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/eq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/eq.js').eq;
Index: node_modules/es-toolkit/compat/escape.d.ts
===================================================================
--- node_modules/es-toolkit/compat/escape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/escape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { escape as default } from '../dist/compat/string/escape.js';
Index: node_modules/es-toolkit/compat/escape.js
===================================================================
--- node_modules/es-toolkit/compat/escape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/escape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/escape.js').escape;
Index: node_modules/es-toolkit/compat/escapeRegExp.d.ts
===================================================================
--- node_modules/es-toolkit/compat/escapeRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/escapeRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { escapeRegExp as default } from '../dist/compat/string/escapeRegExp.js';
Index: node_modules/es-toolkit/compat/escapeRegExp.js
===================================================================
--- node_modules/es-toolkit/compat/escapeRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/escapeRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/escapeRegExp.js').escapeRegExp;
Index: node_modules/es-toolkit/compat/every.d.ts
===================================================================
--- node_modules/es-toolkit/compat/every.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/every.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { every as default } from '../dist/compat/array/every.js';
Index: node_modules/es-toolkit/compat/every.js
===================================================================
--- node_modules/es-toolkit/compat/every.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/every.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/every.js').every;
Index: node_modules/es-toolkit/compat/extend.d.ts
===================================================================
--- node_modules/es-toolkit/compat/extend.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/extend.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { assignIn as default } from '../dist/compat/object/assignIn.js';
Index: node_modules/es-toolkit/compat/extend.js
===================================================================
--- node_modules/es-toolkit/compat/extend.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/extend.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/assignIn.js').assignIn;
Index: node_modules/es-toolkit/compat/extendWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/extendWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/extendWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { assignInWith as default } from '../dist/compat/object/assignInWith.js';
Index: node_modules/es-toolkit/compat/extendWith.js
===================================================================
--- node_modules/es-toolkit/compat/extendWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/extendWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/assignInWith.js').assignInWith;
Index: node_modules/es-toolkit/compat/fill.d.ts
===================================================================
--- node_modules/es-toolkit/compat/fill.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/fill.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { fill as default } from '../dist/compat/array/fill.js';
Index: node_modules/es-toolkit/compat/fill.js
===================================================================
--- node_modules/es-toolkit/compat/fill.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/fill.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/fill.js').fill;
Index: node_modules/es-toolkit/compat/filter.d.ts
===================================================================
--- node_modules/es-toolkit/compat/filter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/filter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { filter as default } from '../dist/compat/array/filter.js';
Index: node_modules/es-toolkit/compat/filter.js
===================================================================
--- node_modules/es-toolkit/compat/filter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/filter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/filter.js').filter;
Index: node_modules/es-toolkit/compat/find.d.ts
===================================================================
--- node_modules/es-toolkit/compat/find.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/find.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { find as default } from '../dist/compat/array/find.js';
Index: node_modules/es-toolkit/compat/find.js
===================================================================
--- node_modules/es-toolkit/compat/find.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/find.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/find.js').find;
Index: node_modules/es-toolkit/compat/findIndex.d.ts
===================================================================
--- node_modules/es-toolkit/compat/findIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { findIndex as default } from '../dist/compat/array/findIndex.js';
Index: node_modules/es-toolkit/compat/findIndex.js
===================================================================
--- node_modules/es-toolkit/compat/findIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/findIndex.js').findIndex;
Index: node_modules/es-toolkit/compat/findKey.d.ts
===================================================================
--- node_modules/es-toolkit/compat/findKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { findKey as default } from '../dist/compat/object/findKey.js';
Index: node_modules/es-toolkit/compat/findKey.js
===================================================================
--- node_modules/es-toolkit/compat/findKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/findKey.js').findKey;
Index: node_modules/es-toolkit/compat/findLast.d.ts
===================================================================
--- node_modules/es-toolkit/compat/findLast.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findLast.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { findLast as default } from '../dist/compat/array/findLast.js';
Index: node_modules/es-toolkit/compat/findLast.js
===================================================================
--- node_modules/es-toolkit/compat/findLast.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findLast.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/findLast.js').findLast;
Index: node_modules/es-toolkit/compat/findLastIndex.d.ts
===================================================================
--- node_modules/es-toolkit/compat/findLastIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findLastIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { findLastIndex as default } from '../dist/compat/array/findLastIndex.js';
Index: node_modules/es-toolkit/compat/findLastIndex.js
===================================================================
--- node_modules/es-toolkit/compat/findLastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findLastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/findLastIndex.js').findLastIndex;
Index: node_modules/es-toolkit/compat/findLastKey.d.ts
===================================================================
--- node_modules/es-toolkit/compat/findLastKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findLastKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { findLastKey as default } from '../dist/compat/object/findLastKey.js';
Index: node_modules/es-toolkit/compat/findLastKey.js
===================================================================
--- node_modules/es-toolkit/compat/findLastKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/findLastKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/findLastKey.js').findLastKey;
Index: node_modules/es-toolkit/compat/first.d.ts
===================================================================
--- node_modules/es-toolkit/compat/first.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/first.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { head as default } from '../dist/compat/array/head.js';
Index: node_modules/es-toolkit/compat/first.js
===================================================================
--- node_modules/es-toolkit/compat/first.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/first.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/head.js').head;
Index: node_modules/es-toolkit/compat/flatMap.d.ts
===================================================================
--- node_modules/es-toolkit/compat/flatMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flatMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { flatMap as default } from '../dist/compat/array/flatMap.js';
Index: node_modules/es-toolkit/compat/flatMap.js
===================================================================
--- node_modules/es-toolkit/compat/flatMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flatMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/flatMap.js').flatMap;
Index: node_modules/es-toolkit/compat/flatMapDeep.d.ts
===================================================================
--- node_modules/es-toolkit/compat/flatMapDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flatMapDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { flatMapDeep as default } from '../dist/compat/array/flatMapDeep.js';
Index: node_modules/es-toolkit/compat/flatMapDeep.js
===================================================================
--- node_modules/es-toolkit/compat/flatMapDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flatMapDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/flatMapDeep.js').flatMapDeep;
Index: node_modules/es-toolkit/compat/flatMapDepth.d.ts
===================================================================
--- node_modules/es-toolkit/compat/flatMapDepth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flatMapDepth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { flatMapDepth as default } from '../dist/compat/array/flatMapDepth.js';
Index: node_modules/es-toolkit/compat/flatMapDepth.js
===================================================================
--- node_modules/es-toolkit/compat/flatMapDepth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flatMapDepth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/flatMapDepth.js').flatMapDepth;
Index: node_modules/es-toolkit/compat/flatten.d.ts
===================================================================
--- node_modules/es-toolkit/compat/flatten.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flatten.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { flatten as default } from '../dist/compat/array/flatten.js';
Index: node_modules/es-toolkit/compat/flatten.js
===================================================================
--- node_modules/es-toolkit/compat/flatten.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flatten.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/flatten.js').flatten;
Index: node_modules/es-toolkit/compat/flattenDeep.d.ts
===================================================================
--- node_modules/es-toolkit/compat/flattenDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flattenDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { flattenDeep as default } from '../dist/compat/array/flattenDeep.js';
Index: node_modules/es-toolkit/compat/flattenDeep.js
===================================================================
--- node_modules/es-toolkit/compat/flattenDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flattenDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/flattenDeep.js').flattenDeep;
Index: node_modules/es-toolkit/compat/flattenDepth.d.ts
===================================================================
--- node_modules/es-toolkit/compat/flattenDepth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flattenDepth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { flattenDepth as default } from '../dist/compat/array/flattenDepth.js';
Index: node_modules/es-toolkit/compat/flattenDepth.js
===================================================================
--- node_modules/es-toolkit/compat/flattenDepth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flattenDepth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/flattenDepth.js').flattenDepth;
Index: node_modules/es-toolkit/compat/flip.d.ts
===================================================================
--- node_modules/es-toolkit/compat/flip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { flip as default } from '../dist/compat/function/flip.js';
Index: node_modules/es-toolkit/compat/flip.js
===================================================================
--- node_modules/es-toolkit/compat/flip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/flip.js').flip;
Index: node_modules/es-toolkit/compat/floor.d.ts
===================================================================
--- node_modules/es-toolkit/compat/floor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/floor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { floor as default } from '../dist/compat/math/floor.js';
Index: node_modules/es-toolkit/compat/floor.js
===================================================================
--- node_modules/es-toolkit/compat/floor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/floor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/floor.js').floor;
Index: node_modules/es-toolkit/compat/flow.d.ts
===================================================================
--- node_modules/es-toolkit/compat/flow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { flow as default } from '../dist/compat/function/flow.js';
Index: node_modules/es-toolkit/compat/flow.js
===================================================================
--- node_modules/es-toolkit/compat/flow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/flow.js').flow;
Index: node_modules/es-toolkit/compat/flowRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/flowRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flowRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { flowRight as default } from '../dist/compat/function/flowRight.js';
Index: node_modules/es-toolkit/compat/flowRight.js
===================================================================
--- node_modules/es-toolkit/compat/flowRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/flowRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/flowRight.js').flowRight;
Index: node_modules/es-toolkit/compat/forEach.d.ts
===================================================================
--- node_modules/es-toolkit/compat/forEach.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forEach.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { forEach as default } from '../dist/compat/array/forEach.js';
Index: node_modules/es-toolkit/compat/forEach.js
===================================================================
--- node_modules/es-toolkit/compat/forEach.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forEach.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/forEach.js').forEach;
Index: node_modules/es-toolkit/compat/forEachRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/forEachRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forEachRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { forEachRight as default } from '../dist/compat/array/forEachRight.js';
Index: node_modules/es-toolkit/compat/forEachRight.js
===================================================================
--- node_modules/es-toolkit/compat/forEachRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forEachRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/forEachRight.js').forEachRight;
Index: node_modules/es-toolkit/compat/forIn.d.ts
===================================================================
--- node_modules/es-toolkit/compat/forIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { forIn as default } from '../dist/compat/object/forIn.js';
Index: node_modules/es-toolkit/compat/forIn.js
===================================================================
--- node_modules/es-toolkit/compat/forIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/forIn.js').forIn;
Index: node_modules/es-toolkit/compat/forInRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/forInRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forInRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { forInRight as default } from '../dist/compat/object/forInRight.js';
Index: node_modules/es-toolkit/compat/forInRight.js
===================================================================
--- node_modules/es-toolkit/compat/forInRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forInRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/forInRight.js').forInRight;
Index: node_modules/es-toolkit/compat/forOwn.d.ts
===================================================================
--- node_modules/es-toolkit/compat/forOwn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forOwn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { forOwn as default } from '../dist/compat/object/forOwn.js';
Index: node_modules/es-toolkit/compat/forOwn.js
===================================================================
--- node_modules/es-toolkit/compat/forOwn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forOwn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/forOwn.js').forOwn;
Index: node_modules/es-toolkit/compat/forOwnRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/forOwnRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forOwnRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { forOwnRight as default } from '../dist/compat/object/forOwnRight.js';
Index: node_modules/es-toolkit/compat/forOwnRight.js
===================================================================
--- node_modules/es-toolkit/compat/forOwnRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/forOwnRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/forOwnRight.js').forOwnRight;
Index: node_modules/es-toolkit/compat/fromPairs.d.ts
===================================================================
--- node_modules/es-toolkit/compat/fromPairs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/fromPairs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { fromPairs as default } from '../dist/compat/object/fromPairs.js';
Index: node_modules/es-toolkit/compat/fromPairs.js
===================================================================
--- node_modules/es-toolkit/compat/fromPairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/fromPairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/fromPairs.js').fromPairs;
Index: node_modules/es-toolkit/compat/functions.d.ts
===================================================================
--- node_modules/es-toolkit/compat/functions.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/functions.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { functions as default } from '../dist/compat/object/functions.js';
Index: node_modules/es-toolkit/compat/functions.js
===================================================================
--- node_modules/es-toolkit/compat/functions.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/functions.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/functions.js').functions;
Index: node_modules/es-toolkit/compat/functionsIn.d.ts
===================================================================
--- node_modules/es-toolkit/compat/functionsIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/functionsIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { functionsIn as default } from '../dist/compat/object/functionsIn.js';
Index: node_modules/es-toolkit/compat/functionsIn.js
===================================================================
--- node_modules/es-toolkit/compat/functionsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/functionsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/functionsIn.js').functionsIn;
Index: node_modules/es-toolkit/compat/get.d.ts
===================================================================
--- node_modules/es-toolkit/compat/get.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/get.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { get as default } from '../dist/compat/object/get.js';
Index: node_modules/es-toolkit/compat/get.js
===================================================================
--- node_modules/es-toolkit/compat/get.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/get.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/get.js').get;
Index: node_modules/es-toolkit/compat/groupBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/groupBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/groupBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { groupBy as default } from '../dist/compat/array/groupBy.js';
Index: node_modules/es-toolkit/compat/groupBy.js
===================================================================
--- node_modules/es-toolkit/compat/groupBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/groupBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/groupBy.js').groupBy;
Index: node_modules/es-toolkit/compat/gt.d.ts
===================================================================
--- node_modules/es-toolkit/compat/gt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/gt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { gt as default } from '../dist/compat/util/gt.js';
Index: node_modules/es-toolkit/compat/gt.js
===================================================================
--- node_modules/es-toolkit/compat/gt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/gt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/gt.js').gt;
Index: node_modules/es-toolkit/compat/gte.d.ts
===================================================================
--- node_modules/es-toolkit/compat/gte.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/gte.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { gte as default } from '../dist/compat/util/gte.js';
Index: node_modules/es-toolkit/compat/gte.js
===================================================================
--- node_modules/es-toolkit/compat/gte.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/gte.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/gte.js').gte;
Index: node_modules/es-toolkit/compat/has.d.ts
===================================================================
--- node_modules/es-toolkit/compat/has.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/has.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { has as default } from '../dist/compat/object/has.js';
Index: node_modules/es-toolkit/compat/has.js
===================================================================
--- node_modules/es-toolkit/compat/has.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/has.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/has.js').has;
Index: node_modules/es-toolkit/compat/hasIn.d.ts
===================================================================
--- node_modules/es-toolkit/compat/hasIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/hasIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { hasIn as default } from '../dist/compat/object/hasIn.js';
Index: node_modules/es-toolkit/compat/hasIn.js
===================================================================
--- node_modules/es-toolkit/compat/hasIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/hasIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/hasIn.js').hasIn;
Index: node_modules/es-toolkit/compat/head.d.ts
===================================================================
--- node_modules/es-toolkit/compat/head.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/head.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { head as default } from '../dist/compat/array/head.js';
Index: node_modules/es-toolkit/compat/head.js
===================================================================
--- node_modules/es-toolkit/compat/head.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/head.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/head.js').head;
Index: node_modules/es-toolkit/compat/identity.d.ts
===================================================================
--- node_modules/es-toolkit/compat/identity.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/identity.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { identity as default } from '../dist/function/identity.js';
Index: node_modules/es-toolkit/compat/identity.js
===================================================================
--- node_modules/es-toolkit/compat/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/function/identity.js').identity;
Index: node_modules/es-toolkit/compat/inRange.d.ts
===================================================================
--- node_modules/es-toolkit/compat/inRange.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/inRange.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { inRange as default } from '../dist/compat/math/inRange.js';
Index: node_modules/es-toolkit/compat/inRange.js
===================================================================
--- node_modules/es-toolkit/compat/inRange.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/inRange.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/inRange.js').inRange;
Index: node_modules/es-toolkit/compat/includes.d.ts
===================================================================
--- node_modules/es-toolkit/compat/includes.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/includes.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { includes as default } from '../dist/compat/array/includes.js';
Index: node_modules/es-toolkit/compat/includes.js
===================================================================
--- node_modules/es-toolkit/compat/includes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/includes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/includes.js').includes;
Index: node_modules/es-toolkit/compat/indexOf.d.ts
===================================================================
--- node_modules/es-toolkit/compat/indexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/indexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { indexOf as default } from '../dist/compat/array/indexOf.js';
Index: node_modules/es-toolkit/compat/indexOf.js
===================================================================
--- node_modules/es-toolkit/compat/indexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/indexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/indexOf.js').indexOf;
Index: node_modules/es-toolkit/compat/initial.d.ts
===================================================================
--- node_modules/es-toolkit/compat/initial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/initial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { initial as default } from '../dist/compat/array/initial.js';
Index: node_modules/es-toolkit/compat/initial.js
===================================================================
--- node_modules/es-toolkit/compat/initial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/initial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/initial.js').initial;
Index: node_modules/es-toolkit/compat/intersection.d.ts
===================================================================
--- node_modules/es-toolkit/compat/intersection.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/intersection.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { intersection as default } from '../dist/compat/array/intersection.js';
Index: node_modules/es-toolkit/compat/intersection.js
===================================================================
--- node_modules/es-toolkit/compat/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/intersection.js').intersection;
Index: node_modules/es-toolkit/compat/intersectionBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/intersectionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/intersectionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { intersectionBy as default } from '../dist/compat/array/intersectionBy.js';
Index: node_modules/es-toolkit/compat/intersectionBy.js
===================================================================
--- node_modules/es-toolkit/compat/intersectionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/intersectionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/intersectionBy.js').intersectionBy;
Index: node_modules/es-toolkit/compat/intersectionWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/intersectionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/intersectionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { intersectionWith as default } from '../dist/compat/array/intersectionWith.js';
Index: node_modules/es-toolkit/compat/intersectionWith.js
===================================================================
--- node_modules/es-toolkit/compat/intersectionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/intersectionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/intersectionWith.js').intersectionWith;
Index: node_modules/es-toolkit/compat/invert.d.ts
===================================================================
--- node_modules/es-toolkit/compat/invert.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/invert.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { invert as default } from '../dist/object/invert.js';
Index: node_modules/es-toolkit/compat/invert.js
===================================================================
--- node_modules/es-toolkit/compat/invert.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/invert.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/object/invert.js').invert;
Index: node_modules/es-toolkit/compat/invertBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/invertBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/invertBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { invertBy as default } from '../dist/compat/object/invertBy.js';
Index: node_modules/es-toolkit/compat/invertBy.js
===================================================================
--- node_modules/es-toolkit/compat/invertBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/invertBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/invertBy.js').invertBy;
Index: node_modules/es-toolkit/compat/invoke.d.ts
===================================================================
--- node_modules/es-toolkit/compat/invoke.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/invoke.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { invoke as default } from '../dist/compat/util/invoke.js';
Index: node_modules/es-toolkit/compat/invoke.js
===================================================================
--- node_modules/es-toolkit/compat/invoke.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/invoke.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/invoke.js').invoke;
Index: node_modules/es-toolkit/compat/invokeMap.d.ts
===================================================================
--- node_modules/es-toolkit/compat/invokeMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/invokeMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { invokeMap as default } from '../dist/compat/array/invokeMap.js';
Index: node_modules/es-toolkit/compat/invokeMap.js
===================================================================
--- node_modules/es-toolkit/compat/invokeMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/invokeMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/invokeMap.js').invokeMap;
Index: node_modules/es-toolkit/compat/isArguments.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isArguments.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArguments.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isArguments as default } from '../dist/compat/predicate/isArguments.js';
Index: node_modules/es-toolkit/compat/isArguments.js
===================================================================
--- node_modules/es-toolkit/compat/isArguments.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArguments.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isArguments.js').isArguments;
Index: node_modules/es-toolkit/compat/isArray.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isArray as default } from '../dist/compat/predicate/isArray.js';
Index: node_modules/es-toolkit/compat/isArray.js
===================================================================
--- node_modules/es-toolkit/compat/isArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isArray.js').isArray;
Index: node_modules/es-toolkit/compat/isArrayBuffer.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isArrayBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArrayBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isArrayBuffer as default } from '../dist/compat/predicate/isArrayBuffer.js';
Index: node_modules/es-toolkit/compat/isArrayBuffer.js
===================================================================
--- node_modules/es-toolkit/compat/isArrayBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArrayBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isArrayBuffer.js').isArrayBuffer;
Index: node_modules/es-toolkit/compat/isArrayLike.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isArrayLike.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArrayLike.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isArrayLike as default } from '../dist/compat/predicate/isArrayLike.js';
Index: node_modules/es-toolkit/compat/isArrayLike.js
===================================================================
--- node_modules/es-toolkit/compat/isArrayLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArrayLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isArrayLike.js').isArrayLike;
Index: node_modules/es-toolkit/compat/isArrayLikeObject.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isArrayLikeObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArrayLikeObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isArrayLikeObject as default } from '../dist/compat/predicate/isArrayLikeObject.js';
Index: node_modules/es-toolkit/compat/isArrayLikeObject.js
===================================================================
--- node_modules/es-toolkit/compat/isArrayLikeObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isArrayLikeObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isArrayLikeObject.js').isArrayLikeObject;
Index: node_modules/es-toolkit/compat/isBoolean.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isBoolean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isBoolean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isBoolean as default } from '../dist/compat/predicate/isBoolean.js';
Index: node_modules/es-toolkit/compat/isBoolean.js
===================================================================
--- node_modules/es-toolkit/compat/isBoolean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isBoolean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isBoolean.js').isBoolean;
Index: node_modules/es-toolkit/compat/isBuffer.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isBuffer as default } from '../dist/compat/predicate/isBuffer.js';
Index: node_modules/es-toolkit/compat/isBuffer.js
===================================================================
--- node_modules/es-toolkit/compat/isBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isBuffer.js').isBuffer;
Index: node_modules/es-toolkit/compat/isDate.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isDate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isDate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isDate as default } from '../dist/compat/predicate/isDate.js';
Index: node_modules/es-toolkit/compat/isDate.js
===================================================================
--- node_modules/es-toolkit/compat/isDate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isDate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isDate.js').isDate;
Index: node_modules/es-toolkit/compat/isElement.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isElement.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isElement.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isElement as default } from '../dist/compat/predicate/isElement.js';
Index: node_modules/es-toolkit/compat/isElement.js
===================================================================
--- node_modules/es-toolkit/compat/isElement.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isElement.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isElement.js').isElement;
Index: node_modules/es-toolkit/compat/isEmpty.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isEmpty.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isEmpty.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isEmpty as default } from '../dist/compat/predicate/isEmpty.js';
Index: node_modules/es-toolkit/compat/isEmpty.js
===================================================================
--- node_modules/es-toolkit/compat/isEmpty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isEmpty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isEmpty.js').isEmpty;
Index: node_modules/es-toolkit/compat/isEqual.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isEqual.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isEqual.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isEqual as default } from '../dist/predicate/isEqual.js';
Index: node_modules/es-toolkit/compat/isEqual.js
===================================================================
--- node_modules/es-toolkit/compat/isEqual.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isEqual.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/predicate/isEqual.js').isEqual;
Index: node_modules/es-toolkit/compat/isEqualWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isEqualWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isEqualWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isEqualWith as default } from '../dist/compat/predicate/isEqualWith.js';
Index: node_modules/es-toolkit/compat/isEqualWith.js
===================================================================
--- node_modules/es-toolkit/compat/isEqualWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isEqualWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isEqualWith.js').isEqualWith;
Index: node_modules/es-toolkit/compat/isError.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isError as default } from '../dist/compat/predicate/isError.js';
Index: node_modules/es-toolkit/compat/isError.js
===================================================================
--- node_modules/es-toolkit/compat/isError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isError.js').isError;
Index: node_modules/es-toolkit/compat/isFinite.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isFinite.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isFinite.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isFinite as default } from '../dist/compat/predicate/isFinite.js';
Index: node_modules/es-toolkit/compat/isFinite.js
===================================================================
--- node_modules/es-toolkit/compat/isFinite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isFinite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isFinite.js').isFinite;
Index: node_modules/es-toolkit/compat/isFunction.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isFunction.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isFunction.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isFunction as default } from '../dist/predicate/isFunction.js';
Index: node_modules/es-toolkit/compat/isFunction.js
===================================================================
--- node_modules/es-toolkit/compat/isFunction.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isFunction.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/predicate/isFunction.js').isFunction;
Index: node_modules/es-toolkit/compat/isInteger.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isInteger as default } from '../dist/compat/predicate/isInteger.js';
Index: node_modules/es-toolkit/compat/isInteger.js
===================================================================
--- node_modules/es-toolkit/compat/isInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isInteger.js').isInteger;
Index: node_modules/es-toolkit/compat/isLength.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isLength as default } from '../dist/predicate/isLength.js';
Index: node_modules/es-toolkit/compat/isLength.js
===================================================================
--- node_modules/es-toolkit/compat/isLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/predicate/isLength.js').isLength;
Index: node_modules/es-toolkit/compat/isMap.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isMap as default } from '../dist/compat/predicate/isMap.js';
Index: node_modules/es-toolkit/compat/isMap.js
===================================================================
--- node_modules/es-toolkit/compat/isMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isMap.js').isMap;
Index: node_modules/es-toolkit/compat/isMatch.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isMatch.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isMatch.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isMatch as default } from '../dist/compat/predicate/isMatch.js';
Index: node_modules/es-toolkit/compat/isMatch.js
===================================================================
--- node_modules/es-toolkit/compat/isMatch.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isMatch.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isMatch.js').isMatch;
Index: node_modules/es-toolkit/compat/isMatchWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isMatchWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isMatchWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isMatchWith as default } from '../dist/compat/predicate/isMatchWith.js';
Index: node_modules/es-toolkit/compat/isMatchWith.js
===================================================================
--- node_modules/es-toolkit/compat/isMatchWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isMatchWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isMatchWith.js').isMatchWith;
Index: node_modules/es-toolkit/compat/isNaN.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isNaN.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNaN.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isNaN as default } from '../dist/compat/predicate/isNaN.js';
Index: node_modules/es-toolkit/compat/isNaN.js
===================================================================
--- node_modules/es-toolkit/compat/isNaN.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNaN.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isNaN.js').isNaN;
Index: node_modules/es-toolkit/compat/isNative.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isNative.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNative.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isNative as default } from '../dist/compat/predicate/isNative.js';
Index: node_modules/es-toolkit/compat/isNative.js
===================================================================
--- node_modules/es-toolkit/compat/isNative.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNative.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isNative.js').isNative;
Index: node_modules/es-toolkit/compat/isNil.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isNil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isNil as default } from '../dist/compat/predicate/isNil.js';
Index: node_modules/es-toolkit/compat/isNil.js
===================================================================
--- node_modules/es-toolkit/compat/isNil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isNil.js').isNil;
Index: node_modules/es-toolkit/compat/isNull.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isNull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isNull as default } from '../dist/predicate/isNull.js';
Index: node_modules/es-toolkit/compat/isNull.js
===================================================================
--- node_modules/es-toolkit/compat/isNull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/predicate/isNull.js').isNull;
Index: node_modules/es-toolkit/compat/isNumber.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isNumber as default } from '../dist/compat/predicate/isNumber.js';
Index: node_modules/es-toolkit/compat/isNumber.js
===================================================================
--- node_modules/es-toolkit/compat/isNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isNumber.js').isNumber;
Index: node_modules/es-toolkit/compat/isObject.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isObject as default } from '../dist/compat/predicate/isObject.js';
Index: node_modules/es-toolkit/compat/isObject.js
===================================================================
--- node_modules/es-toolkit/compat/isObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isObject.js').isObject;
Index: node_modules/es-toolkit/compat/isObjectLike.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isObjectLike.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isObjectLike.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isObjectLike as default } from '../dist/compat/predicate/isObjectLike.js';
Index: node_modules/es-toolkit/compat/isObjectLike.js
===================================================================
--- node_modules/es-toolkit/compat/isObjectLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isObjectLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isObjectLike.js').isObjectLike;
Index: node_modules/es-toolkit/compat/isPlainObject.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isPlainObject as default } from '../dist/compat/predicate/isPlainObject.js';
Index: node_modules/es-toolkit/compat/isPlainObject.js
===================================================================
--- node_modules/es-toolkit/compat/isPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isPlainObject.js').isPlainObject;
Index: node_modules/es-toolkit/compat/isRegExp.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isRegExp as default } from '../dist/compat/predicate/isRegExp.js';
Index: node_modules/es-toolkit/compat/isRegExp.js
===================================================================
--- node_modules/es-toolkit/compat/isRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isRegExp.js').isRegExp;
Index: node_modules/es-toolkit/compat/isSafeInteger.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isSafeInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isSafeInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isSafeInteger as default } from '../dist/compat/predicate/isSafeInteger.js';
Index: node_modules/es-toolkit/compat/isSafeInteger.js
===================================================================
--- node_modules/es-toolkit/compat/isSafeInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isSafeInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isSafeInteger.js').isSafeInteger;
Index: node_modules/es-toolkit/compat/isSet.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isSet as default } from '../dist/compat/predicate/isSet.js';
Index: node_modules/es-toolkit/compat/isSet.js
===================================================================
--- node_modules/es-toolkit/compat/isSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isSet.js').isSet;
Index: node_modules/es-toolkit/compat/isString.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isString as default } from '../dist/compat/predicate/isString.js';
Index: node_modules/es-toolkit/compat/isString.js
===================================================================
--- node_modules/es-toolkit/compat/isString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isString.js').isString;
Index: node_modules/es-toolkit/compat/isSymbol.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isSymbol.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isSymbol.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isSymbol as default } from '../dist/compat/predicate/isSymbol.js';
Index: node_modules/es-toolkit/compat/isSymbol.js
===================================================================
--- node_modules/es-toolkit/compat/isSymbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isSymbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isSymbol.js').isSymbol;
Index: node_modules/es-toolkit/compat/isTypedArray.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isTypedArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isTypedArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isTypedArray as default } from '../dist/compat/predicate/isTypedArray.js';
Index: node_modules/es-toolkit/compat/isTypedArray.js
===================================================================
--- node_modules/es-toolkit/compat/isTypedArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isTypedArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isTypedArray.js').isTypedArray;
Index: node_modules/es-toolkit/compat/isUndefined.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isUndefined.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isUndefined.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isUndefined as default } from '../dist/predicate/isUndefined.js';
Index: node_modules/es-toolkit/compat/isUndefined.js
===================================================================
--- node_modules/es-toolkit/compat/isUndefined.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isUndefined.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/predicate/isUndefined.js').isUndefined;
Index: node_modules/es-toolkit/compat/isWeakMap.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isWeakMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isWeakMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isWeakMap as default } from '../dist/compat/predicate/isWeakMap.js';
Index: node_modules/es-toolkit/compat/isWeakMap.js
===================================================================
--- node_modules/es-toolkit/compat/isWeakMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isWeakMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isWeakMap.js').isWeakMap;
Index: node_modules/es-toolkit/compat/isWeakSet.d.ts
===================================================================
--- node_modules/es-toolkit/compat/isWeakSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isWeakSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { isWeakSet as default } from '../dist/compat/predicate/isWeakSet.js';
Index: node_modules/es-toolkit/compat/isWeakSet.js
===================================================================
--- node_modules/es-toolkit/compat/isWeakSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/isWeakSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/isWeakSet.js').isWeakSet;
Index: node_modules/es-toolkit/compat/iteratee.d.ts
===================================================================
--- node_modules/es-toolkit/compat/iteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/iteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { iteratee as default } from '../dist/compat/util/iteratee.js';
Index: node_modules/es-toolkit/compat/iteratee.js
===================================================================
--- node_modules/es-toolkit/compat/iteratee.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/iteratee.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/iteratee.js').iteratee;
Index: node_modules/es-toolkit/compat/join.d.ts
===================================================================
--- node_modules/es-toolkit/compat/join.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/join.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { join as default } from '../dist/compat/array/join.js';
Index: node_modules/es-toolkit/compat/join.js
===================================================================
--- node_modules/es-toolkit/compat/join.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/join.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/join.js').join;
Index: node_modules/es-toolkit/compat/kebabCase.d.ts
===================================================================
--- node_modules/es-toolkit/compat/kebabCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/kebabCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { kebabCase as default } from '../dist/compat/string/kebabCase.js';
Index: node_modules/es-toolkit/compat/kebabCase.js
===================================================================
--- node_modules/es-toolkit/compat/kebabCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/kebabCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/kebabCase.js').kebabCase;
Index: node_modules/es-toolkit/compat/keyBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/keyBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/keyBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { keyBy as default } from '../dist/compat/array/keyBy.js';
Index: node_modules/es-toolkit/compat/keyBy.js
===================================================================
--- node_modules/es-toolkit/compat/keyBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/keyBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/keyBy.js').keyBy;
Index: node_modules/es-toolkit/compat/keys.d.ts
===================================================================
--- node_modules/es-toolkit/compat/keys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/keys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { keys as default } from '../dist/compat/object/keys.js';
Index: node_modules/es-toolkit/compat/keys.js
===================================================================
--- node_modules/es-toolkit/compat/keys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/keys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/keys.js').keys;
Index: node_modules/es-toolkit/compat/keysIn.d.ts
===================================================================
--- node_modules/es-toolkit/compat/keysIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/keysIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { keysIn as default } from '../dist/compat/object/keysIn.js';
Index: node_modules/es-toolkit/compat/keysIn.js
===================================================================
--- node_modules/es-toolkit/compat/keysIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/keysIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/keysIn.js').keysIn;
Index: node_modules/es-toolkit/compat/last.d.ts
===================================================================
--- node_modules/es-toolkit/compat/last.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/last.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { last as default } from '../dist/compat/array/last.js';
Index: node_modules/es-toolkit/compat/last.js
===================================================================
--- node_modules/es-toolkit/compat/last.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/last.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/last.js').last;
Index: node_modules/es-toolkit/compat/lastIndexOf.d.ts
===================================================================
--- node_modules/es-toolkit/compat/lastIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lastIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { lastIndexOf as default } from '../dist/compat/array/lastIndexOf.js';
Index: node_modules/es-toolkit/compat/lastIndexOf.js
===================================================================
--- node_modules/es-toolkit/compat/lastIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lastIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/lastIndexOf.js').lastIndexOf;
Index: node_modules/es-toolkit/compat/lowerCase.d.ts
===================================================================
--- node_modules/es-toolkit/compat/lowerCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lowerCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { lowerCase as default } from '../dist/compat/string/lowerCase.js';
Index: node_modules/es-toolkit/compat/lowerCase.js
===================================================================
--- node_modules/es-toolkit/compat/lowerCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lowerCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/lowerCase.js').lowerCase;
Index: node_modules/es-toolkit/compat/lowerFirst.d.ts
===================================================================
--- node_modules/es-toolkit/compat/lowerFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lowerFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { lowerFirst as default } from '../dist/compat/string/lowerFirst.js';
Index: node_modules/es-toolkit/compat/lowerFirst.js
===================================================================
--- node_modules/es-toolkit/compat/lowerFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lowerFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/lowerFirst.js').lowerFirst;
Index: node_modules/es-toolkit/compat/lt.d.ts
===================================================================
--- node_modules/es-toolkit/compat/lt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { lt as default } from '../dist/compat/util/lt.js';
Index: node_modules/es-toolkit/compat/lt.js
===================================================================
--- node_modules/es-toolkit/compat/lt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/lt.js').lt;
Index: node_modules/es-toolkit/compat/lte.d.ts
===================================================================
--- node_modules/es-toolkit/compat/lte.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lte.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { lte as default } from '../dist/compat/util/lte.js';
Index: node_modules/es-toolkit/compat/lte.js
===================================================================
--- node_modules/es-toolkit/compat/lte.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/lte.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/lte.js').lte;
Index: node_modules/es-toolkit/compat/map.d.ts
===================================================================
--- node_modules/es-toolkit/compat/map.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/map.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { map as default } from '../dist/compat/array/map.js';
Index: node_modules/es-toolkit/compat/map.js
===================================================================
--- node_modules/es-toolkit/compat/map.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/map.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/map.js').map;
Index: node_modules/es-toolkit/compat/mapKeys.d.ts
===================================================================
--- node_modules/es-toolkit/compat/mapKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/mapKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { mapKeys as default } from '../dist/compat/object/mapKeys.js';
Index: node_modules/es-toolkit/compat/mapKeys.js
===================================================================
--- node_modules/es-toolkit/compat/mapKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/mapKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/mapKeys.js').mapKeys;
Index: node_modules/es-toolkit/compat/mapValues.d.ts
===================================================================
--- node_modules/es-toolkit/compat/mapValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/mapValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { mapValues as default } from '../dist/compat/object/mapValues.js';
Index: node_modules/es-toolkit/compat/mapValues.js
===================================================================
--- node_modules/es-toolkit/compat/mapValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/mapValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/mapValues.js').mapValues;
Index: node_modules/es-toolkit/compat/matches.d.ts
===================================================================
--- node_modules/es-toolkit/compat/matches.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/matches.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { matches as default } from '../dist/compat/predicate/matches.js';
Index: node_modules/es-toolkit/compat/matches.js
===================================================================
--- node_modules/es-toolkit/compat/matches.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/matches.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/matches.js').matches;
Index: node_modules/es-toolkit/compat/matchesProperty.d.ts
===================================================================
--- node_modules/es-toolkit/compat/matchesProperty.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/matchesProperty.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { matchesProperty as default } from '../dist/compat/predicate/matchesProperty.js';
Index: node_modules/es-toolkit/compat/matchesProperty.js
===================================================================
--- node_modules/es-toolkit/compat/matchesProperty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/matchesProperty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/predicate/matchesProperty.js').matchesProperty;
Index: node_modules/es-toolkit/compat/max.d.ts
===================================================================
--- node_modules/es-toolkit/compat/max.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/max.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { max as default } from '../dist/compat/math/max.js';
Index: node_modules/es-toolkit/compat/max.js
===================================================================
--- node_modules/es-toolkit/compat/max.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/max.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/max.js').max;
Index: node_modules/es-toolkit/compat/maxBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/maxBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/maxBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { maxBy as default } from '../dist/compat/math/maxBy.js';
Index: node_modules/es-toolkit/compat/maxBy.js
===================================================================
--- node_modules/es-toolkit/compat/maxBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/maxBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/maxBy.js').maxBy;
Index: node_modules/es-toolkit/compat/mean.d.ts
===================================================================
--- node_modules/es-toolkit/compat/mean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/mean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { mean as default } from '../dist/compat/math/mean.js';
Index: node_modules/es-toolkit/compat/mean.js
===================================================================
--- node_modules/es-toolkit/compat/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/mean.js').mean;
Index: node_modules/es-toolkit/compat/meanBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/meanBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/meanBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { meanBy as default } from '../dist/compat/math/meanBy.js';
Index: node_modules/es-toolkit/compat/meanBy.js
===================================================================
--- node_modules/es-toolkit/compat/meanBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/meanBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/meanBy.js').meanBy;
Index: node_modules/es-toolkit/compat/memoize.d.ts
===================================================================
--- node_modules/es-toolkit/compat/memoize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/memoize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { memoize as default } from '../dist/compat/function/memoize.js';
Index: node_modules/es-toolkit/compat/memoize.js
===================================================================
--- node_modules/es-toolkit/compat/memoize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/memoize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/memoize.js').memoize;
Index: node_modules/es-toolkit/compat/merge.d.ts
===================================================================
--- node_modules/es-toolkit/compat/merge.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/merge.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { merge as default } from '../dist/compat/object/merge.js';
Index: node_modules/es-toolkit/compat/merge.js
===================================================================
--- node_modules/es-toolkit/compat/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/merge.js').merge;
Index: node_modules/es-toolkit/compat/mergeWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/mergeWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/mergeWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { mergeWith as default } from '../dist/compat/object/mergeWith.js';
Index: node_modules/es-toolkit/compat/mergeWith.js
===================================================================
--- node_modules/es-toolkit/compat/mergeWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/mergeWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/mergeWith.js').mergeWith;
Index: node_modules/es-toolkit/compat/method.d.ts
===================================================================
--- node_modules/es-toolkit/compat/method.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/method.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { method as default } from '../dist/compat/util/method.js';
Index: node_modules/es-toolkit/compat/method.js
===================================================================
--- node_modules/es-toolkit/compat/method.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/method.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/method.js').method;
Index: node_modules/es-toolkit/compat/methodOf.d.ts
===================================================================
--- node_modules/es-toolkit/compat/methodOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/methodOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { methodOf as default } from '../dist/compat/util/methodOf.js';
Index: node_modules/es-toolkit/compat/methodOf.js
===================================================================
--- node_modules/es-toolkit/compat/methodOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/methodOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/methodOf.js').methodOf;
Index: node_modules/es-toolkit/compat/min.d.ts
===================================================================
--- node_modules/es-toolkit/compat/min.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/min.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { min as default } from '../dist/compat/math/min.js';
Index: node_modules/es-toolkit/compat/min.js
===================================================================
--- node_modules/es-toolkit/compat/min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/min.js').min;
Index: node_modules/es-toolkit/compat/minBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/minBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/minBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { minBy as default } from '../dist/compat/math/minBy.js';
Index: node_modules/es-toolkit/compat/minBy.js
===================================================================
--- node_modules/es-toolkit/compat/minBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/minBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/minBy.js').minBy;
Index: node_modules/es-toolkit/compat/multiply.d.ts
===================================================================
--- node_modules/es-toolkit/compat/multiply.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/multiply.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { multiply as default } from '../dist/compat/math/multiply.js';
Index: node_modules/es-toolkit/compat/multiply.js
===================================================================
--- node_modules/es-toolkit/compat/multiply.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/multiply.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/multiply.js').multiply;
Index: node_modules/es-toolkit/compat/negate.d.ts
===================================================================
--- node_modules/es-toolkit/compat/negate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/negate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { negate as default } from '../dist/compat/function/negate.js';
Index: node_modules/es-toolkit/compat/negate.js
===================================================================
--- node_modules/es-toolkit/compat/negate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/negate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/negate.js').negate;
Index: node_modules/es-toolkit/compat/noop.d.ts
===================================================================
--- node_modules/es-toolkit/compat/noop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/noop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { noop as default } from '../dist/function/noop.js';
Index: node_modules/es-toolkit/compat/noop.js
===================================================================
--- node_modules/es-toolkit/compat/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/function/noop.js').noop;
Index: node_modules/es-toolkit/compat/now.d.ts
===================================================================
--- node_modules/es-toolkit/compat/now.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/now.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { now as default } from '../dist/compat/util/now.js';
Index: node_modules/es-toolkit/compat/now.js
===================================================================
--- node_modules/es-toolkit/compat/now.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/now.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/now.js').now;
Index: node_modules/es-toolkit/compat/nth.d.ts
===================================================================
--- node_modules/es-toolkit/compat/nth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/nth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { nth as default } from '../dist/compat/array/nth.js';
Index: node_modules/es-toolkit/compat/nth.js
===================================================================
--- node_modules/es-toolkit/compat/nth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/nth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/nth.js').nth;
Index: node_modules/es-toolkit/compat/nthArg.d.ts
===================================================================
--- node_modules/es-toolkit/compat/nthArg.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/nthArg.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { nthArg as default } from '../dist/compat/function/nthArg.js';
Index: node_modules/es-toolkit/compat/nthArg.js
===================================================================
--- node_modules/es-toolkit/compat/nthArg.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/nthArg.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/nthArg.js').nthArg;
Index: node_modules/es-toolkit/compat/omit.d.ts
===================================================================
--- node_modules/es-toolkit/compat/omit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/omit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { omit as default } from '../dist/compat/object/omit.js';
Index: node_modules/es-toolkit/compat/omit.js
===================================================================
--- node_modules/es-toolkit/compat/omit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/omit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/omit.js').omit;
Index: node_modules/es-toolkit/compat/omitBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/omitBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/omitBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { omitBy as default } from '../dist/compat/object/omitBy.js';
Index: node_modules/es-toolkit/compat/omitBy.js
===================================================================
--- node_modules/es-toolkit/compat/omitBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/omitBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/omitBy.js').omitBy;
Index: node_modules/es-toolkit/compat/once.d.ts
===================================================================
--- node_modules/es-toolkit/compat/once.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/once.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { once as default } from '../dist/function/once.js';
Index: node_modules/es-toolkit/compat/once.js
===================================================================
--- node_modules/es-toolkit/compat/once.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/once.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/function/once.js').once;
Index: node_modules/es-toolkit/compat/orderBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/orderBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/orderBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { orderBy as default } from '../dist/compat/array/orderBy.js';
Index: node_modules/es-toolkit/compat/orderBy.js
===================================================================
--- node_modules/es-toolkit/compat/orderBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/orderBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/orderBy.js').orderBy;
Index: node_modules/es-toolkit/compat/over.d.ts
===================================================================
--- node_modules/es-toolkit/compat/over.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/over.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { over as default } from '../dist/compat/util/over.js';
Index: node_modules/es-toolkit/compat/over.js
===================================================================
--- node_modules/es-toolkit/compat/over.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/over.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/over.js').over;
Index: node_modules/es-toolkit/compat/overArgs.d.ts
===================================================================
--- node_modules/es-toolkit/compat/overArgs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/overArgs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { overArgs as default } from '../dist/compat/function/overArgs.js';
Index: node_modules/es-toolkit/compat/overArgs.js
===================================================================
--- node_modules/es-toolkit/compat/overArgs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/overArgs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/overArgs.js').overArgs;
Index: node_modules/es-toolkit/compat/overEvery.d.ts
===================================================================
--- node_modules/es-toolkit/compat/overEvery.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/overEvery.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { overEvery as default } from '../dist/compat/util/overEvery.js';
Index: node_modules/es-toolkit/compat/overEvery.js
===================================================================
--- node_modules/es-toolkit/compat/overEvery.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/overEvery.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/overEvery.js').overEvery;
Index: node_modules/es-toolkit/compat/overSome.d.ts
===================================================================
--- node_modules/es-toolkit/compat/overSome.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/overSome.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { overSome as default } from '../dist/compat/util/overSome.js';
Index: node_modules/es-toolkit/compat/overSome.js
===================================================================
--- node_modules/es-toolkit/compat/overSome.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/overSome.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/overSome.js').overSome;
Index: node_modules/es-toolkit/compat/pad.d.ts
===================================================================
--- node_modules/es-toolkit/compat/pad.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pad.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { pad as default } from '../dist/compat/string/pad.js';
Index: node_modules/es-toolkit/compat/pad.js
===================================================================
--- node_modules/es-toolkit/compat/pad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/pad.js').pad;
Index: node_modules/es-toolkit/compat/padEnd.d.ts
===================================================================
--- node_modules/es-toolkit/compat/padEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/padEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { padEnd as default } from '../dist/compat/string/padEnd.js';
Index: node_modules/es-toolkit/compat/padEnd.js
===================================================================
--- node_modules/es-toolkit/compat/padEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/padEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/padEnd.js').padEnd;
Index: node_modules/es-toolkit/compat/padStart.d.ts
===================================================================
--- node_modules/es-toolkit/compat/padStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/padStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { padStart as default } from '../dist/compat/string/padStart.js';
Index: node_modules/es-toolkit/compat/padStart.js
===================================================================
--- node_modules/es-toolkit/compat/padStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/padStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/padStart.js').padStart;
Index: node_modules/es-toolkit/compat/parseInt.d.ts
===================================================================
--- node_modules/es-toolkit/compat/parseInt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/parseInt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { parseInt as default } from '../dist/compat/math/parseInt.js';
Index: node_modules/es-toolkit/compat/parseInt.js
===================================================================
--- node_modules/es-toolkit/compat/parseInt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/parseInt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/parseInt.js').parseInt;
Index: node_modules/es-toolkit/compat/partial.d.ts
===================================================================
--- node_modules/es-toolkit/compat/partial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/partial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { partial as default } from '../dist/compat/function/partial.js';
Index: node_modules/es-toolkit/compat/partial.js
===================================================================
--- node_modules/es-toolkit/compat/partial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/partial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/partial.js').partial;
Index: node_modules/es-toolkit/compat/partialRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/partialRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/partialRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { partialRight as default } from '../dist/compat/function/partialRight.js';
Index: node_modules/es-toolkit/compat/partialRight.js
===================================================================
--- node_modules/es-toolkit/compat/partialRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/partialRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/partialRight.js').partialRight;
Index: node_modules/es-toolkit/compat/partition.d.ts
===================================================================
--- node_modules/es-toolkit/compat/partition.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/partition.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { partition as default } from '../dist/compat/array/partition.js';
Index: node_modules/es-toolkit/compat/partition.js
===================================================================
--- node_modules/es-toolkit/compat/partition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/partition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/partition.js').partition;
Index: node_modules/es-toolkit/compat/pick.d.ts
===================================================================
--- node_modules/es-toolkit/compat/pick.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pick.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { pick as default } from '../dist/compat/object/pick.js';
Index: node_modules/es-toolkit/compat/pick.js
===================================================================
--- node_modules/es-toolkit/compat/pick.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pick.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/pick.js').pick;
Index: node_modules/es-toolkit/compat/pickBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/pickBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pickBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { pickBy as default } from '../dist/compat/object/pickBy.js';
Index: node_modules/es-toolkit/compat/pickBy.js
===================================================================
--- node_modules/es-toolkit/compat/pickBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pickBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/pickBy.js').pickBy;
Index: node_modules/es-toolkit/compat/property.d.ts
===================================================================
--- node_modules/es-toolkit/compat/property.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/property.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { property as default } from '../dist/compat/object/property.js';
Index: node_modules/es-toolkit/compat/property.js
===================================================================
--- node_modules/es-toolkit/compat/property.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/property.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/property.js').property;
Index: node_modules/es-toolkit/compat/propertyOf.d.ts
===================================================================
--- node_modules/es-toolkit/compat/propertyOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/propertyOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { propertyOf as default } from '../dist/compat/object/propertyOf.js';
Index: node_modules/es-toolkit/compat/propertyOf.js
===================================================================
--- node_modules/es-toolkit/compat/propertyOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/propertyOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/propertyOf.js').propertyOf;
Index: node_modules/es-toolkit/compat/pull.d.ts
===================================================================
--- node_modules/es-toolkit/compat/pull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { pull as default } from '../dist/compat/array/pull.js';
Index: node_modules/es-toolkit/compat/pull.js
===================================================================
--- node_modules/es-toolkit/compat/pull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/pull.js').pull;
Index: node_modules/es-toolkit/compat/pullAll.d.ts
===================================================================
--- node_modules/es-toolkit/compat/pullAll.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pullAll.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { pullAll as default } from '../dist/compat/array/pullAll.js';
Index: node_modules/es-toolkit/compat/pullAll.js
===================================================================
--- node_modules/es-toolkit/compat/pullAll.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pullAll.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/pullAll.js').pullAll;
Index: node_modules/es-toolkit/compat/pullAllBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/pullAllBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pullAllBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { pullAllBy as default } from '../dist/compat/array/pullAllBy.js';
Index: node_modules/es-toolkit/compat/pullAllBy.js
===================================================================
--- node_modules/es-toolkit/compat/pullAllBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pullAllBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/pullAllBy.js').pullAllBy;
Index: node_modules/es-toolkit/compat/pullAllWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/pullAllWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pullAllWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { pullAllWith as default } from '../dist/compat/array/pullAllWith.js';
Index: node_modules/es-toolkit/compat/pullAllWith.js
===================================================================
--- node_modules/es-toolkit/compat/pullAllWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pullAllWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/pullAllWith.js').pullAllWith;
Index: node_modules/es-toolkit/compat/pullAt.d.ts
===================================================================
--- node_modules/es-toolkit/compat/pullAt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pullAt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { pullAt as default } from '../dist/compat/array/pullAt.js';
Index: node_modules/es-toolkit/compat/pullAt.js
===================================================================
--- node_modules/es-toolkit/compat/pullAt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/pullAt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/pullAt.js').pullAt;
Index: node_modules/es-toolkit/compat/random.d.ts
===================================================================
--- node_modules/es-toolkit/compat/random.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/random.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { random as default } from '../dist/compat/math/random.js';
Index: node_modules/es-toolkit/compat/random.js
===================================================================
--- node_modules/es-toolkit/compat/random.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/random.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/random.js').random;
Index: node_modules/es-toolkit/compat/range.d.ts
===================================================================
--- node_modules/es-toolkit/compat/range.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/range.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { range as default } from '../dist/compat/math/range.js';
Index: node_modules/es-toolkit/compat/range.js
===================================================================
--- node_modules/es-toolkit/compat/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/range.js').range;
Index: node_modules/es-toolkit/compat/rangeRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/rangeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/rangeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { rangeRight as default } from '../dist/compat/math/rangeRight.js';
Index: node_modules/es-toolkit/compat/rangeRight.js
===================================================================
--- node_modules/es-toolkit/compat/rangeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/rangeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/rangeRight.js').rangeRight;
Index: node_modules/es-toolkit/compat/rearg.d.ts
===================================================================
--- node_modules/es-toolkit/compat/rearg.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/rearg.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { rearg as default } from '../dist/compat/function/rearg.js';
Index: node_modules/es-toolkit/compat/rearg.js
===================================================================
--- node_modules/es-toolkit/compat/rearg.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/rearg.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/rearg.js').rearg;
Index: node_modules/es-toolkit/compat/reduce.d.ts
===================================================================
--- node_modules/es-toolkit/compat/reduce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/reduce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { reduce as default } from '../dist/compat/array/reduce.js';
Index: node_modules/es-toolkit/compat/reduce.js
===================================================================
--- node_modules/es-toolkit/compat/reduce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/reduce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/reduce.js').reduce;
Index: node_modules/es-toolkit/compat/reduceRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/reduceRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/reduceRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { reduceRight as default } from '../dist/compat/array/reduceRight.js';
Index: node_modules/es-toolkit/compat/reduceRight.js
===================================================================
--- node_modules/es-toolkit/compat/reduceRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/reduceRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/reduceRight.js').reduceRight;
Index: node_modules/es-toolkit/compat/reject.d.ts
===================================================================
--- node_modules/es-toolkit/compat/reject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/reject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { reject as default } from '../dist/compat/array/reject.js';
Index: node_modules/es-toolkit/compat/reject.js
===================================================================
--- node_modules/es-toolkit/compat/reject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/reject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/reject.js').reject;
Index: node_modules/es-toolkit/compat/remove.d.ts
===================================================================
--- node_modules/es-toolkit/compat/remove.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/remove.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { remove as default } from '../dist/compat/array/remove.js';
Index: node_modules/es-toolkit/compat/remove.js
===================================================================
--- node_modules/es-toolkit/compat/remove.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/remove.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/remove.js').remove;
Index: node_modules/es-toolkit/compat/repeat.d.ts
===================================================================
--- node_modules/es-toolkit/compat/repeat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/repeat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { repeat as default } from '../dist/compat/string/repeat.js';
Index: node_modules/es-toolkit/compat/repeat.js
===================================================================
--- node_modules/es-toolkit/compat/repeat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/repeat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/repeat.js').repeat;
Index: node_modules/es-toolkit/compat/replace.d.ts
===================================================================
--- node_modules/es-toolkit/compat/replace.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/replace.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { replace as default } from '../dist/compat/string/replace.js';
Index: node_modules/es-toolkit/compat/replace.js
===================================================================
--- node_modules/es-toolkit/compat/replace.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/replace.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/replace.js').replace;
Index: node_modules/es-toolkit/compat/rest.d.ts
===================================================================
--- node_modules/es-toolkit/compat/rest.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/rest.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { rest as default } from '../dist/compat/function/rest.js';
Index: node_modules/es-toolkit/compat/rest.js
===================================================================
--- node_modules/es-toolkit/compat/rest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/rest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/rest.js').rest;
Index: node_modules/es-toolkit/compat/result.d.ts
===================================================================
--- node_modules/es-toolkit/compat/result.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/result.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { result as default } from '../dist/compat/object/result.js';
Index: node_modules/es-toolkit/compat/result.js
===================================================================
--- node_modules/es-toolkit/compat/result.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/result.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/result.js').result;
Index: node_modules/es-toolkit/compat/reverse.d.ts
===================================================================
--- node_modules/es-toolkit/compat/reverse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/reverse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { reverse as default } from '../dist/compat/array/reverse.js';
Index: node_modules/es-toolkit/compat/reverse.js
===================================================================
--- node_modules/es-toolkit/compat/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/reverse.js').reverse;
Index: node_modules/es-toolkit/compat/round.d.ts
===================================================================
--- node_modules/es-toolkit/compat/round.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/round.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { round as default } from '../dist/compat/math/round.js';
Index: node_modules/es-toolkit/compat/round.js
===================================================================
--- node_modules/es-toolkit/compat/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/round.js').round;
Index: node_modules/es-toolkit/compat/sample.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sample.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sample.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sample as default } from '../dist/compat/array/sample.js';
Index: node_modules/es-toolkit/compat/sample.js
===================================================================
--- node_modules/es-toolkit/compat/sample.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sample.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/sample.js').sample;
Index: node_modules/es-toolkit/compat/sampleSize.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sampleSize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sampleSize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sampleSize as default } from '../dist/compat/array/sampleSize.js';
Index: node_modules/es-toolkit/compat/sampleSize.js
===================================================================
--- node_modules/es-toolkit/compat/sampleSize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sampleSize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/sampleSize.js').sampleSize;
Index: node_modules/es-toolkit/compat/set.d.ts
===================================================================
--- node_modules/es-toolkit/compat/set.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/set.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { set as default } from '../dist/compat/object/set.js';
Index: node_modules/es-toolkit/compat/set.js
===================================================================
--- node_modules/es-toolkit/compat/set.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/set.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/set.js').set;
Index: node_modules/es-toolkit/compat/setWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/setWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/setWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { setWith as default } from '../dist/compat/object/setWith.js';
Index: node_modules/es-toolkit/compat/setWith.js
===================================================================
--- node_modules/es-toolkit/compat/setWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/setWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/setWith.js').setWith;
Index: node_modules/es-toolkit/compat/shuffle.d.ts
===================================================================
--- node_modules/es-toolkit/compat/shuffle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/shuffle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { shuffle as default } from '../dist/compat/array/shuffle.js';
Index: node_modules/es-toolkit/compat/shuffle.js
===================================================================
--- node_modules/es-toolkit/compat/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/shuffle.js').shuffle;
Index: node_modules/es-toolkit/compat/size.d.ts
===================================================================
--- node_modules/es-toolkit/compat/size.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/size.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { size as default } from '../dist/compat/array/size.js';
Index: node_modules/es-toolkit/compat/size.js
===================================================================
--- node_modules/es-toolkit/compat/size.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/size.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/size.js').size;
Index: node_modules/es-toolkit/compat/slice.d.ts
===================================================================
--- node_modules/es-toolkit/compat/slice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/slice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { slice as default } from '../dist/compat/array/slice.js';
Index: node_modules/es-toolkit/compat/slice.js
===================================================================
--- node_modules/es-toolkit/compat/slice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/slice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/slice.js').slice;
Index: node_modules/es-toolkit/compat/snakeCase.d.ts
===================================================================
--- node_modules/es-toolkit/compat/snakeCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/snakeCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { snakeCase as default } from '../dist/compat/string/snakeCase.js';
Index: node_modules/es-toolkit/compat/snakeCase.js
===================================================================
--- node_modules/es-toolkit/compat/snakeCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/snakeCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/snakeCase.js').snakeCase;
Index: node_modules/es-toolkit/compat/some.d.ts
===================================================================
--- node_modules/es-toolkit/compat/some.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/some.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { some as default } from '../dist/compat/array/some.js';
Index: node_modules/es-toolkit/compat/some.js
===================================================================
--- node_modules/es-toolkit/compat/some.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/some.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/some.js').some;
Index: node_modules/es-toolkit/compat/sortBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sortBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sortBy as default } from '../dist/compat/array/sortBy.js';
Index: node_modules/es-toolkit/compat/sortBy.js
===================================================================
--- node_modules/es-toolkit/compat/sortBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/sortBy.js').sortBy;
Index: node_modules/es-toolkit/compat/sortedIndex.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sortedIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sortedIndex as default } from '../dist/compat/array/sortedIndex.js';
Index: node_modules/es-toolkit/compat/sortedIndex.js
===================================================================
--- node_modules/es-toolkit/compat/sortedIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/sortedIndex.js').sortedIndex;
Index: node_modules/es-toolkit/compat/sortedIndexBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sortedIndexBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedIndexBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sortedIndexBy as default } from '../dist/compat/array/sortedIndexBy.js';
Index: node_modules/es-toolkit/compat/sortedIndexBy.js
===================================================================
--- node_modules/es-toolkit/compat/sortedIndexBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedIndexBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/sortedIndexBy.js').sortedIndexBy;
Index: node_modules/es-toolkit/compat/sortedIndexOf.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sortedIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sortedIndexOf as default } from '../dist/compat/array/sortedIndexOf.js';
Index: node_modules/es-toolkit/compat/sortedIndexOf.js
===================================================================
--- node_modules/es-toolkit/compat/sortedIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/sortedIndexOf.js').sortedIndexOf;
Index: node_modules/es-toolkit/compat/sortedLastIndex.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sortedLastIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedLastIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sortedLastIndex as default } from '../dist/compat/array/sortedLastIndex.js';
Index: node_modules/es-toolkit/compat/sortedLastIndex.js
===================================================================
--- node_modules/es-toolkit/compat/sortedLastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedLastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/sortedLastIndex.js').sortedLastIndex;
Index: node_modules/es-toolkit/compat/sortedLastIndexBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sortedLastIndexBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedLastIndexBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sortedLastIndexBy as default } from '../dist/compat/array/sortedLastIndexBy.js';
Index: node_modules/es-toolkit/compat/sortedLastIndexBy.js
===================================================================
--- node_modules/es-toolkit/compat/sortedLastIndexBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedLastIndexBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/sortedLastIndexBy.js').sortedLastIndexBy;
Index: node_modules/es-toolkit/compat/sortedLastIndexOf.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sortedLastIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedLastIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sortedLastIndexOf as default } from '../dist/compat/array/sortedLastIndexOf.js';
Index: node_modules/es-toolkit/compat/sortedLastIndexOf.js
===================================================================
--- node_modules/es-toolkit/compat/sortedLastIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sortedLastIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/sortedLastIndexOf.js').sortedLastIndexOf;
Index: node_modules/es-toolkit/compat/split.d.ts
===================================================================
--- node_modules/es-toolkit/compat/split.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/split.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { split as default } from '../dist/compat/string/split.js';
Index: node_modules/es-toolkit/compat/split.js
===================================================================
--- node_modules/es-toolkit/compat/split.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/split.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/split.js').split;
Index: node_modules/es-toolkit/compat/spread.d.ts
===================================================================
--- node_modules/es-toolkit/compat/spread.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/spread.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { spread as default } from '../dist/compat/function/spread.js';
Index: node_modules/es-toolkit/compat/spread.js
===================================================================
--- node_modules/es-toolkit/compat/spread.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/spread.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/spread.js').spread;
Index: node_modules/es-toolkit/compat/startCase.d.ts
===================================================================
--- node_modules/es-toolkit/compat/startCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/startCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { startCase as default } from '../dist/compat/string/startCase.js';
Index: node_modules/es-toolkit/compat/startCase.js
===================================================================
--- node_modules/es-toolkit/compat/startCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/startCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/startCase.js').startCase;
Index: node_modules/es-toolkit/compat/startsWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/startsWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/startsWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { startsWith as default } from '../dist/compat/string/startsWith.js';
Index: node_modules/es-toolkit/compat/startsWith.js
===================================================================
--- node_modules/es-toolkit/compat/startsWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/startsWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/startsWith.js').startsWith;
Index: node_modules/es-toolkit/compat/stubArray.d.ts
===================================================================
--- node_modules/es-toolkit/compat/stubArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { stubArray as default } from '../dist/compat/util/stubArray.js';
Index: node_modules/es-toolkit/compat/stubArray.js
===================================================================
--- node_modules/es-toolkit/compat/stubArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/stubArray.js').stubArray;
Index: node_modules/es-toolkit/compat/stubFalse.d.ts
===================================================================
--- node_modules/es-toolkit/compat/stubFalse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubFalse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { stubFalse as default } from '../dist/compat/util/stubFalse.js';
Index: node_modules/es-toolkit/compat/stubFalse.js
===================================================================
--- node_modules/es-toolkit/compat/stubFalse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubFalse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/stubFalse.js').stubFalse;
Index: node_modules/es-toolkit/compat/stubObject.d.ts
===================================================================
--- node_modules/es-toolkit/compat/stubObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { stubObject as default } from '../dist/compat/util/stubObject.js';
Index: node_modules/es-toolkit/compat/stubObject.js
===================================================================
--- node_modules/es-toolkit/compat/stubObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/stubObject.js').stubObject;
Index: node_modules/es-toolkit/compat/stubString.d.ts
===================================================================
--- node_modules/es-toolkit/compat/stubString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { stubString as default } from '../dist/compat/util/stubString.js';
Index: node_modules/es-toolkit/compat/stubString.js
===================================================================
--- node_modules/es-toolkit/compat/stubString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/stubString.js').stubString;
Index: node_modules/es-toolkit/compat/stubTrue.d.ts
===================================================================
--- node_modules/es-toolkit/compat/stubTrue.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubTrue.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { stubTrue as default } from '../dist/compat/util/stubTrue.js';
Index: node_modules/es-toolkit/compat/stubTrue.js
===================================================================
--- node_modules/es-toolkit/compat/stubTrue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/stubTrue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/stubTrue.js').stubTrue;
Index: node_modules/es-toolkit/compat/subtract.d.ts
===================================================================
--- node_modules/es-toolkit/compat/subtract.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/subtract.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { subtract as default } from '../dist/compat/math/subtract.js';
Index: node_modules/es-toolkit/compat/subtract.js
===================================================================
--- node_modules/es-toolkit/compat/subtract.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/subtract.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/subtract.js').subtract;
Index: node_modules/es-toolkit/compat/sum.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sum.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sum.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sum as default } from '../dist/compat/math/sum.js';
Index: node_modules/es-toolkit/compat/sum.js
===================================================================
--- node_modules/es-toolkit/compat/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/sum.js').sum;
Index: node_modules/es-toolkit/compat/sumBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/sumBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sumBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { sumBy as default } from '../dist/compat/math/sumBy.js';
Index: node_modules/es-toolkit/compat/sumBy.js
===================================================================
--- node_modules/es-toolkit/compat/sumBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/sumBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/math/sumBy.js').sumBy;
Index: node_modules/es-toolkit/compat/tail.d.ts
===================================================================
--- node_modules/es-toolkit/compat/tail.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/tail.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { tail as default } from '../dist/compat/array/tail.js';
Index: node_modules/es-toolkit/compat/tail.js
===================================================================
--- node_modules/es-toolkit/compat/tail.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/tail.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/tail.js').tail;
Index: node_modules/es-toolkit/compat/take.d.ts
===================================================================
--- node_modules/es-toolkit/compat/take.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/take.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { take as default } from '../dist/compat/array/take.js';
Index: node_modules/es-toolkit/compat/take.js
===================================================================
--- node_modules/es-toolkit/compat/take.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/take.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/take.js').take;
Index: node_modules/es-toolkit/compat/takeRight.d.ts
===================================================================
--- node_modules/es-toolkit/compat/takeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/takeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { takeRight as default } from '../dist/compat/array/takeRight.js';
Index: node_modules/es-toolkit/compat/takeRight.js
===================================================================
--- node_modules/es-toolkit/compat/takeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/takeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/takeRight.js').takeRight;
Index: node_modules/es-toolkit/compat/takeRightWhile.d.ts
===================================================================
--- node_modules/es-toolkit/compat/takeRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/takeRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { takeRightWhile as default } from '../dist/compat/array/takeRightWhile.js';
Index: node_modules/es-toolkit/compat/takeRightWhile.js
===================================================================
--- node_modules/es-toolkit/compat/takeRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/takeRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/takeRightWhile.js').takeRightWhile;
Index: node_modules/es-toolkit/compat/takeWhile.d.ts
===================================================================
--- node_modules/es-toolkit/compat/takeWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/takeWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { takeWhile as default } from '../dist/compat/array/takeWhile.js';
Index: node_modules/es-toolkit/compat/takeWhile.js
===================================================================
--- node_modules/es-toolkit/compat/takeWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/takeWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/takeWhile.js').takeWhile;
Index: node_modules/es-toolkit/compat/template.d.ts
===================================================================
--- node_modules/es-toolkit/compat/template.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/template.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { template as default } from '../dist/compat/string/template.js';
Index: node_modules/es-toolkit/compat/template.js
===================================================================
--- node_modules/es-toolkit/compat/template.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/template.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/template.js').template;
Index: node_modules/es-toolkit/compat/templateSettings.d.ts
===================================================================
--- node_modules/es-toolkit/compat/templateSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/templateSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { templateSettings as default } from '../dist/compat/string/templateSettings.js';
Index: node_modules/es-toolkit/compat/templateSettings.js
===================================================================
--- node_modules/es-toolkit/compat/templateSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/templateSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/templateSettings.js').templateSettings;
Index: node_modules/es-toolkit/compat/throttle.d.ts
===================================================================
--- node_modules/es-toolkit/compat/throttle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/throttle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { throttle as default } from '../dist/compat/function/throttle.js';
Index: node_modules/es-toolkit/compat/throttle.js
===================================================================
--- node_modules/es-toolkit/compat/throttle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/throttle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/throttle.js').throttle;
Index: node_modules/es-toolkit/compat/times.d.ts
===================================================================
--- node_modules/es-toolkit/compat/times.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/times.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { times as default } from '../dist/compat/util/times.js';
Index: node_modules/es-toolkit/compat/times.js
===================================================================
--- node_modules/es-toolkit/compat/times.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/times.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/times.js').times;
Index: node_modules/es-toolkit/compat/toArray.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toArray as default } from '../dist/compat/util/toArray.js';
Index: node_modules/es-toolkit/compat/toArray.js
===================================================================
--- node_modules/es-toolkit/compat/toArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/toArray.js').toArray;
Index: node_modules/es-toolkit/compat/toDefaulted.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toDefaulted.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toDefaulted.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toDefaulted as default } from '../dist/compat/object/toDefaulted.js';
Index: node_modules/es-toolkit/compat/toDefaulted.js
===================================================================
--- node_modules/es-toolkit/compat/toDefaulted.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toDefaulted.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/toDefaulted.js').toDefaulted;
Index: node_modules/es-toolkit/compat/toFinite.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toFinite.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toFinite.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toFinite as default } from '../dist/compat/util/toFinite.js';
Index: node_modules/es-toolkit/compat/toFinite.js
===================================================================
--- node_modules/es-toolkit/compat/toFinite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toFinite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/toFinite.js').toFinite;
Index: node_modules/es-toolkit/compat/toInteger.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toInteger as default } from '../dist/compat/util/toInteger.js';
Index: node_modules/es-toolkit/compat/toInteger.js
===================================================================
--- node_modules/es-toolkit/compat/toInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/toInteger.js').toInteger;
Index: node_modules/es-toolkit/compat/toLength.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toLength as default } from '../dist/compat/util/toLength.js';
Index: node_modules/es-toolkit/compat/toLength.js
===================================================================
--- node_modules/es-toolkit/compat/toLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/toLength.js').toLength;
Index: node_modules/es-toolkit/compat/toLower.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toLower.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toLower.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toLower as default } from '../dist/compat/string/toLower.js';
Index: node_modules/es-toolkit/compat/toLower.js
===================================================================
--- node_modules/es-toolkit/compat/toLower.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toLower.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/toLower.js').toLower;
Index: node_modules/es-toolkit/compat/toNumber.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toNumber as default } from '../dist/compat/util/toNumber.js';
Index: node_modules/es-toolkit/compat/toNumber.js
===================================================================
--- node_modules/es-toolkit/compat/toNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/toNumber.js').toNumber;
Index: node_modules/es-toolkit/compat/toPairs.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toPairs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toPairs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toPairs as default } from '../dist/compat/object/toPairs.js';
Index: node_modules/es-toolkit/compat/toPairs.js
===================================================================
--- node_modules/es-toolkit/compat/toPairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toPairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/toPairs.js').toPairs;
Index: node_modules/es-toolkit/compat/toPairsIn.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toPairsIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toPairsIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toPairsIn as default } from '../dist/compat/object/toPairsIn.js';
Index: node_modules/es-toolkit/compat/toPairsIn.js
===================================================================
--- node_modules/es-toolkit/compat/toPairsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toPairsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/toPairsIn.js').toPairsIn;
Index: node_modules/es-toolkit/compat/toPath.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toPath.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toPath.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toPath as default } from '../dist/compat/util/toPath.js';
Index: node_modules/es-toolkit/compat/toPath.js
===================================================================
--- node_modules/es-toolkit/compat/toPath.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toPath.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/toPath.js').toPath;
Index: node_modules/es-toolkit/compat/toPlainObject.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toPlainObject as default } from '../dist/compat/util/toPlainObject.js';
Index: node_modules/es-toolkit/compat/toPlainObject.js
===================================================================
--- node_modules/es-toolkit/compat/toPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/toPlainObject.js').toPlainObject;
Index: node_modules/es-toolkit/compat/toSafeInteger.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toSafeInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toSafeInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toSafeInteger as default } from '../dist/compat/util/toSafeInteger.js';
Index: node_modules/es-toolkit/compat/toSafeInteger.js
===================================================================
--- node_modules/es-toolkit/compat/toSafeInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toSafeInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/toSafeInteger.js').toSafeInteger;
Index: node_modules/es-toolkit/compat/toString.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toString as default } from '../dist/compat/util/toString.js';
Index: node_modules/es-toolkit/compat/toString.js
===================================================================
--- node_modules/es-toolkit/compat/toString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/toString.js').toString;
Index: node_modules/es-toolkit/compat/toUpper.d.ts
===================================================================
--- node_modules/es-toolkit/compat/toUpper.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toUpper.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { toUpper as default } from '../dist/compat/string/toUpper.js';
Index: node_modules/es-toolkit/compat/toUpper.js
===================================================================
--- node_modules/es-toolkit/compat/toUpper.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/toUpper.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/toUpper.js').toUpper;
Index: node_modules/es-toolkit/compat/transform.d.ts
===================================================================
--- node_modules/es-toolkit/compat/transform.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/transform.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { transform as default } from '../dist/compat/object/transform.js';
Index: node_modules/es-toolkit/compat/transform.js
===================================================================
--- node_modules/es-toolkit/compat/transform.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/transform.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/transform.js').transform;
Index: node_modules/es-toolkit/compat/trim.d.ts
===================================================================
--- node_modules/es-toolkit/compat/trim.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/trim.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { trim as default } from '../dist/compat/string/trim.js';
Index: node_modules/es-toolkit/compat/trim.js
===================================================================
--- node_modules/es-toolkit/compat/trim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/trim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/trim.js').trim;
Index: node_modules/es-toolkit/compat/trimEnd.d.ts
===================================================================
--- node_modules/es-toolkit/compat/trimEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/trimEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { trimEnd as default } from '../dist/compat/string/trimEnd.js';
Index: node_modules/es-toolkit/compat/trimEnd.js
===================================================================
--- node_modules/es-toolkit/compat/trimEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/trimEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/trimEnd.js').trimEnd;
Index: node_modules/es-toolkit/compat/trimStart.d.ts
===================================================================
--- node_modules/es-toolkit/compat/trimStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/trimStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { trimStart as default } from '../dist/compat/string/trimStart.js';
Index: node_modules/es-toolkit/compat/trimStart.js
===================================================================
--- node_modules/es-toolkit/compat/trimStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/trimStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/trimStart.js').trimStart;
Index: node_modules/es-toolkit/compat/truncate.d.ts
===================================================================
--- node_modules/es-toolkit/compat/truncate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/truncate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { truncate as default } from '../dist/compat/string/truncate.js';
Index: node_modules/es-toolkit/compat/truncate.js
===================================================================
--- node_modules/es-toolkit/compat/truncate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/truncate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/truncate.js').truncate;
Index: node_modules/es-toolkit/compat/unary.d.ts
===================================================================
--- node_modules/es-toolkit/compat/unary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { unary as default } from '../dist/function/unary.js';
Index: node_modules/es-toolkit/compat/unary.js
===================================================================
--- node_modules/es-toolkit/compat/unary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/function/unary.js').unary;
Index: node_modules/es-toolkit/compat/unescape.d.ts
===================================================================
--- node_modules/es-toolkit/compat/unescape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unescape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { unescape as default } from '../dist/compat/string/unescape.js';
Index: node_modules/es-toolkit/compat/unescape.js
===================================================================
--- node_modules/es-toolkit/compat/unescape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unescape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/unescape.js').unescape;
Index: node_modules/es-toolkit/compat/union.d.ts
===================================================================
--- node_modules/es-toolkit/compat/union.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/union.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { union as default } from '../dist/compat/array/union.js';
Index: node_modules/es-toolkit/compat/union.js
===================================================================
--- node_modules/es-toolkit/compat/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/union.js').union;
Index: node_modules/es-toolkit/compat/unionBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/unionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { unionBy as default } from '../dist/compat/array/unionBy.js';
Index: node_modules/es-toolkit/compat/unionBy.js
===================================================================
--- node_modules/es-toolkit/compat/unionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/unionBy.js').unionBy;
Index: node_modules/es-toolkit/compat/unionWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/unionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { unionWith as default } from '../dist/compat/array/unionWith.js';
Index: node_modules/es-toolkit/compat/unionWith.js
===================================================================
--- node_modules/es-toolkit/compat/unionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/unionWith.js').unionWith;
Index: node_modules/es-toolkit/compat/uniq.d.ts
===================================================================
--- node_modules/es-toolkit/compat/uniq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/uniq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { uniq as default } from '../dist/compat/array/uniq.js';
Index: node_modules/es-toolkit/compat/uniq.js
===================================================================
--- node_modules/es-toolkit/compat/uniq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/uniq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/uniq.js').uniq;
Index: node_modules/es-toolkit/compat/uniqBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/uniqBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/uniqBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { uniqBy as default } from '../dist/compat/array/uniqBy.js';
Index: node_modules/es-toolkit/compat/uniqBy.js
===================================================================
--- node_modules/es-toolkit/compat/uniqBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/uniqBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/uniqBy.js').uniqBy;
Index: node_modules/es-toolkit/compat/uniqWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/uniqWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/uniqWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { uniqWith as default } from '../dist/compat/array/uniqWith.js';
Index: node_modules/es-toolkit/compat/uniqWith.js
===================================================================
--- node_modules/es-toolkit/compat/uniqWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/uniqWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/uniqWith.js').uniqWith;
Index: node_modules/es-toolkit/compat/uniqueId.d.ts
===================================================================
--- node_modules/es-toolkit/compat/uniqueId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/uniqueId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { uniqueId as default } from '../dist/compat/util/uniqueId.js';
Index: node_modules/es-toolkit/compat/uniqueId.js
===================================================================
--- node_modules/es-toolkit/compat/uniqueId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/uniqueId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/util/uniqueId.js').uniqueId;
Index: node_modules/es-toolkit/compat/unset.d.ts
===================================================================
--- node_modules/es-toolkit/compat/unset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { unset as default } from '../dist/compat/object/unset.js';
Index: node_modules/es-toolkit/compat/unset.js
===================================================================
--- node_modules/es-toolkit/compat/unset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/unset.js').unset;
Index: node_modules/es-toolkit/compat/unzip.d.ts
===================================================================
--- node_modules/es-toolkit/compat/unzip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unzip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { unzip as default } from '../dist/compat/array/unzip.js';
Index: node_modules/es-toolkit/compat/unzip.js
===================================================================
--- node_modules/es-toolkit/compat/unzip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unzip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/unzip.js').unzip;
Index: node_modules/es-toolkit/compat/unzipWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/unzipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unzipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { unzipWith as default } from '../dist/compat/array/unzipWith.js';
Index: node_modules/es-toolkit/compat/unzipWith.js
===================================================================
--- node_modules/es-toolkit/compat/unzipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/unzipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/unzipWith.js').unzipWith;
Index: node_modules/es-toolkit/compat/update.d.ts
===================================================================
--- node_modules/es-toolkit/compat/update.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/update.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { update as default } from '../dist/compat/object/update.js';
Index: node_modules/es-toolkit/compat/update.js
===================================================================
--- node_modules/es-toolkit/compat/update.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/update.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/update.js').update;
Index: node_modules/es-toolkit/compat/updateWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/updateWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/updateWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { updateWith as default } from '../dist/compat/object/updateWith.js';
Index: node_modules/es-toolkit/compat/updateWith.js
===================================================================
--- node_modules/es-toolkit/compat/updateWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/updateWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/updateWith.js').updateWith;
Index: node_modules/es-toolkit/compat/upperCase.d.ts
===================================================================
--- node_modules/es-toolkit/compat/upperCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/upperCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { upperCase as default } from '../dist/compat/string/upperCase.js';
Index: node_modules/es-toolkit/compat/upperCase.js
===================================================================
--- node_modules/es-toolkit/compat/upperCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/upperCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/upperCase.js').upperCase;
Index: node_modules/es-toolkit/compat/upperFirst.d.ts
===================================================================
--- node_modules/es-toolkit/compat/upperFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/upperFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { upperFirst as default } from '../dist/compat/string/upperFirst.js';
Index: node_modules/es-toolkit/compat/upperFirst.js
===================================================================
--- node_modules/es-toolkit/compat/upperFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/upperFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/upperFirst.js').upperFirst;
Index: node_modules/es-toolkit/compat/values.d.ts
===================================================================
--- node_modules/es-toolkit/compat/values.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/values.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { values as default } from '../dist/compat/object/values.js';
Index: node_modules/es-toolkit/compat/values.js
===================================================================
--- node_modules/es-toolkit/compat/values.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/values.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/values.js').values;
Index: node_modules/es-toolkit/compat/valuesIn.d.ts
===================================================================
--- node_modules/es-toolkit/compat/valuesIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/valuesIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { valuesIn as default } from '../dist/compat/object/valuesIn.js';
Index: node_modules/es-toolkit/compat/valuesIn.js
===================================================================
--- node_modules/es-toolkit/compat/valuesIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/valuesIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/object/valuesIn.js').valuesIn;
Index: node_modules/es-toolkit/compat/without.d.ts
===================================================================
--- node_modules/es-toolkit/compat/without.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/without.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { without as default } from '../dist/compat/array/without.js';
Index: node_modules/es-toolkit/compat/without.js
===================================================================
--- node_modules/es-toolkit/compat/without.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/without.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/without.js').without;
Index: node_modules/es-toolkit/compat/words.d.ts
===================================================================
--- node_modules/es-toolkit/compat/words.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/words.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { words as default } from '../dist/compat/string/words.js';
Index: node_modules/es-toolkit/compat/words.js
===================================================================
--- node_modules/es-toolkit/compat/words.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/words.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/string/words.js').words;
Index: node_modules/es-toolkit/compat/wrap.d.ts
===================================================================
--- node_modules/es-toolkit/compat/wrap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/wrap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { wrap as default } from '../dist/compat/function/wrap.js';
Index: node_modules/es-toolkit/compat/wrap.js
===================================================================
--- node_modules/es-toolkit/compat/wrap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/wrap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/function/wrap.js').wrap;
Index: node_modules/es-toolkit/compat/xor.d.ts
===================================================================
--- node_modules/es-toolkit/compat/xor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/xor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { xor as default } from '../dist/compat/array/xor.js';
Index: node_modules/es-toolkit/compat/xor.js
===================================================================
--- node_modules/es-toolkit/compat/xor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/xor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/xor.js').xor;
Index: node_modules/es-toolkit/compat/xorBy.d.ts
===================================================================
--- node_modules/es-toolkit/compat/xorBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/xorBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { xorBy as default } from '../dist/compat/array/xorBy.js';
Index: node_modules/es-toolkit/compat/xorBy.js
===================================================================
--- node_modules/es-toolkit/compat/xorBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/xorBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/xorBy.js').xorBy;
Index: node_modules/es-toolkit/compat/xorWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/xorWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/xorWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { xorWith as default } from '../dist/compat/array/xorWith.js';
Index: node_modules/es-toolkit/compat/xorWith.js
===================================================================
--- node_modules/es-toolkit/compat/xorWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/xorWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/xorWith.js').xorWith;
Index: node_modules/es-toolkit/compat/zip.d.ts
===================================================================
--- node_modules/es-toolkit/compat/zip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/zip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { zip as default } from '../dist/compat/array/zip.js';
Index: node_modules/es-toolkit/compat/zip.js
===================================================================
--- node_modules/es-toolkit/compat/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/zip.js').zip;
Index: node_modules/es-toolkit/compat/zipObject.d.ts
===================================================================
--- node_modules/es-toolkit/compat/zipObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/zipObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { zipObject as default } from '../dist/compat/array/zipObject.js';
Index: node_modules/es-toolkit/compat/zipObject.js
===================================================================
--- node_modules/es-toolkit/compat/zipObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/zipObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/zipObject.js').zipObject;
Index: node_modules/es-toolkit/compat/zipObjectDeep.d.ts
===================================================================
--- node_modules/es-toolkit/compat/zipObjectDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/zipObjectDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { zipObjectDeep as default } from '../dist/compat/array/zipObjectDeep.js';
Index: node_modules/es-toolkit/compat/zipObjectDeep.js
===================================================================
--- node_modules/es-toolkit/compat/zipObjectDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/zipObjectDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/zipObjectDeep.js').zipObjectDeep;
Index: node_modules/es-toolkit/compat/zipWith.d.ts
===================================================================
--- node_modules/es-toolkit/compat/zipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/zipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { zipWith as default } from '../dist/compat/array/zipWith.js';
Index: node_modules/es-toolkit/compat/zipWith.js
===================================================================
--- node_modules/es-toolkit/compat/zipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/compat/zipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('../dist/compat/array/zipWith.js').zipWith;
Index: node_modules/es-toolkit/dist/_internal/compareValues.js
===================================================================
--- node_modules/es-toolkit/dist/_internal/compareValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/_internal/compareValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function compareValues(a, b, order) {
+    if (a < b) {
+        return order === 'asc' ? -1 : 1;
+    }
+    if (a > b) {
+        return order === 'asc' ? 1 : -1;
+    }
+    return 0;
+}
+
+exports.compareValues = compareValues;
Index: node_modules/es-toolkit/dist/_internal/compareValues.mjs
===================================================================
--- node_modules/es-toolkit/dist/_internal/compareValues.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/_internal/compareValues.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function compareValues(a, b, order) {
+    if (a < b) {
+        return order === 'asc' ? -1 : 1;
+    }
+    if (a > b) {
+        return order === 'asc' ? 1 : -1;
+    }
+    return 0;
+}
+
+export { compareValues };
Index: node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js
===================================================================
--- node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isUnsafeProperty(key) {
+    return key === '__proto__';
+}
+
+exports.isUnsafeProperty = isUnsafeProperty;
Index: node_modules/es-toolkit/dist/_internal/isUnsafeProperty.mjs
===================================================================
--- node_modules/es-toolkit/dist/_internal/isUnsafeProperty.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/_internal/isUnsafeProperty.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isUnsafeProperty(key) {
+    return key === '__proto__';
+}
+
+export { isUnsafeProperty };
Index: node_modules/es-toolkit/dist/array/at.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/at.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/at.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Retrieves elements from an array at the specified indices.
+ *
+ * This function supports negative indices, which count from the end of the array.
+ *
+ * @template T
+ * @param {readonly T[]} arr - The array to retrieve elements from.
+ * @param {number[]} indices - An array of indices specifying the positions of elements to retrieve.
+ * @returns {T[]} A new array containing the elements at the specified indices.
+ *
+ * @example
+ * const numbers = [10, 20, 30, 40, 50];
+ * const result = at(numbers, [1, 3, 4]);
+ * console.log(result); // [20, 40, 50]
+ */
+declare function at<T>(arr: readonly T[], indices: number[]): T[];
+
+export { at };
Index: node_modules/es-toolkit/dist/array/at.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/at.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/at.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Retrieves elements from an array at the specified indices.
+ *
+ * This function supports negative indices, which count from the end of the array.
+ *
+ * @template T
+ * @param {readonly T[]} arr - The array to retrieve elements from.
+ * @param {number[]} indices - An array of indices specifying the positions of elements to retrieve.
+ * @returns {T[]} A new array containing the elements at the specified indices.
+ *
+ * @example
+ * const numbers = [10, 20, 30, 40, 50];
+ * const result = at(numbers, [1, 3, 4]);
+ * console.log(result); // [20, 40, 50]
+ */
+declare function at<T>(arr: readonly T[], indices: number[]): T[];
+
+export { at };
Index: node_modules/es-toolkit/dist/array/at.js
===================================================================
--- node_modules/es-toolkit/dist/array/at.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/at.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function at(arr, indices) {
+    const result = new Array(indices.length);
+    const length = arr.length;
+    for (let i = 0; i < indices.length; i++) {
+        let index = indices[i];
+        index = Number.isInteger(index) ? index : Math.trunc(index) || 0;
+        if (index < 0) {
+            index += length;
+        }
+        result[i] = arr[index];
+    }
+    return result;
+}
+
+exports.at = at;
Index: node_modules/es-toolkit/dist/array/at.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/at.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/at.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+function at(arr, indices) {
+    const result = new Array(indices.length);
+    const length = arr.length;
+    for (let i = 0; i < indices.length; i++) {
+        let index = indices[i];
+        index = Number.isInteger(index) ? index : Math.trunc(index) || 0;
+        if (index < 0) {
+            index += length;
+        }
+        result[i] = arr[index];
+    }
+    return result;
+}
+
+export { at };
Index: node_modules/es-toolkit/dist/array/chunk.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/chunk.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/chunk.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Splits an array into smaller arrays of a specified length.
+ *
+ * This function takes an input array and divides it into multiple smaller arrays,
+ * each of a specified length. If the input array cannot be evenly divided,
+ * the final sub-array will contain the remaining elements.
+ *
+ * @template T The type of elements in the array.
+ * @param {T[]} arr - The array to be chunked into smaller arrays.
+ * @param {number} size - The size of each smaller array. Must be a positive integer.
+ * @returns {T[][]} A two-dimensional array where each sub-array has a maximum length of `size`.
+ * @throws {Error} Throws an error if `size` is not a positive integer.
+ *
+ * @example
+ * // Splits an array of numbers into sub-arrays of length 2
+ * chunk([1, 2, 3, 4, 5], 2);
+ * // Returns: [[1, 2], [3, 4], [5]]
+ *
+ * @example
+ * // Splits an array of strings into sub-arrays of length 3
+ * chunk(['a', 'b', 'c', 'd', 'e', 'f', 'g'], 3);
+ * // Returns: [['a', 'b', 'c'], ['d', 'e', 'f'], ['g']]
+ */
+declare function chunk<T>(arr: readonly T[], size: number): T[][];
+
+export { chunk };
Index: node_modules/es-toolkit/dist/array/chunk.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/chunk.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/chunk.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Splits an array into smaller arrays of a specified length.
+ *
+ * This function takes an input array and divides it into multiple smaller arrays,
+ * each of a specified length. If the input array cannot be evenly divided,
+ * the final sub-array will contain the remaining elements.
+ *
+ * @template T The type of elements in the array.
+ * @param {T[]} arr - The array to be chunked into smaller arrays.
+ * @param {number} size - The size of each smaller array. Must be a positive integer.
+ * @returns {T[][]} A two-dimensional array where each sub-array has a maximum length of `size`.
+ * @throws {Error} Throws an error if `size` is not a positive integer.
+ *
+ * @example
+ * // Splits an array of numbers into sub-arrays of length 2
+ * chunk([1, 2, 3, 4, 5], 2);
+ * // Returns: [[1, 2], [3, 4], [5]]
+ *
+ * @example
+ * // Splits an array of strings into sub-arrays of length 3
+ * chunk(['a', 'b', 'c', 'd', 'e', 'f', 'g'], 3);
+ * // Returns: [['a', 'b', 'c'], ['d', 'e', 'f'], ['g']]
+ */
+declare function chunk<T>(arr: readonly T[], size: number): T[][];
+
+export { chunk };
Index: node_modules/es-toolkit/dist/array/chunk.js
===================================================================
--- node_modules/es-toolkit/dist/array/chunk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/chunk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function chunk(arr, size) {
+    if (!Number.isInteger(size) || size <= 0) {
+        throw new Error('Size must be an integer greater than zero.');
+    }
+    const chunkLength = Math.ceil(arr.length / size);
+    const result = Array(chunkLength);
+    for (let index = 0; index < chunkLength; index++) {
+        const start = index * size;
+        const end = start + size;
+        result[index] = arr.slice(start, end);
+    }
+    return result;
+}
+
+exports.chunk = chunk;
Index: node_modules/es-toolkit/dist/array/chunk.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/chunk.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/chunk.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+function chunk(arr, size) {
+    if (!Number.isInteger(size) || size <= 0) {
+        throw new Error('Size must be an integer greater than zero.');
+    }
+    const chunkLength = Math.ceil(arr.length / size);
+    const result = Array(chunkLength);
+    for (let index = 0; index < chunkLength; index++) {
+        const start = index * size;
+        const end = start + size;
+        result[index] = arr.slice(start, end);
+    }
+    return result;
+}
+
+export { chunk };
Index: node_modules/es-toolkit/dist/array/compact.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/compact.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/compact.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+type NotFalsey<T> = Exclude<T, false | null | 0 | 0n | '' | undefined>;
+/**
+ * Removes falsey values (false, null, 0, -0, 0n, '', undefined, NaN) from an array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The input array to remove falsey values.
+ * @returns {Array<Exclude<T, false | null | 0 | 0n | '' | undefined>>} - A new array with all falsey values removed.
+ *
+ * @example
+ * compact([0, -0, 0n, 1, false, 2, '', 3, null, undefined, 4, NaN, 5]);
+ * Returns: [1, 2, 3, 4, 5]
+ */
+declare function compact<T>(arr: readonly T[]): Array<NotFalsey<T>>;
+
+export { compact };
Index: node_modules/es-toolkit/dist/array/compact.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/compact.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/compact.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+type NotFalsey<T> = Exclude<T, false | null | 0 | 0n | '' | undefined>;
+/**
+ * Removes falsey values (false, null, 0, -0, 0n, '', undefined, NaN) from an array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The input array to remove falsey values.
+ * @returns {Array<Exclude<T, false | null | 0 | 0n | '' | undefined>>} - A new array with all falsey values removed.
+ *
+ * @example
+ * compact([0, -0, 0n, 1, false, 2, '', 3, null, undefined, 4, NaN, 5]);
+ * Returns: [1, 2, 3, 4, 5]
+ */
+declare function compact<T>(arr: readonly T[]): Array<NotFalsey<T>>;
+
+export { compact };
Index: node_modules/es-toolkit/dist/array/compact.js
===================================================================
--- node_modules/es-toolkit/dist/array/compact.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/compact.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function compact(arr) {
+    const result = [];
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        if (item) {
+            result.push(item);
+        }
+    }
+    return result;
+}
+
+exports.compact = compact;
Index: node_modules/es-toolkit/dist/array/compact.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/compact.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/compact.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function compact(arr) {
+    const result = [];
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        if (item) {
+            result.push(item);
+        }
+    }
+    return result;
+}
+
+export { compact };
Index: node_modules/es-toolkit/dist/array/countBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/countBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/countBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Count the occurrences of each item in an array
+ * based on a transformation function.
+ *
+ * This function takes an array and a transformation function
+ * that converts each item in the array to a key. It then
+ * counts the occurrences of each transformed item and returns
+ * an object with the transformed items as keys and the counts
+ * as values.
+ *
+ * @template T - The type of the items in the input array.
+ * @template K - The type of keys.
+ * @param {T[]} arr - The input array to count occurrences.
+ * @param {(item: T) => K} mapper - The transformation function that maps each item to a key.
+ * @returns {Record<K, number>} An object containing the transformed items as keys and the
+ * counts as values.
+ *
+ * @example
+ * const array = ['a', 'b', 'c', 'a', 'b', 'a'];
+ * const result = countBy(array, x => x);
+ * // result will be { a: 3, b: 2, c: 1 }
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = countBy(array, item => item % 2 === 0 ? 'even' : 'odd');
+ * // result will be { odd: 3, even: 2 }
+ */
+declare function countBy<T, K extends PropertyKey>(arr: readonly T[], mapper: (item: T) => K): Record<K, number>;
+
+export { countBy };
Index: node_modules/es-toolkit/dist/array/countBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/countBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/countBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Count the occurrences of each item in an array
+ * based on a transformation function.
+ *
+ * This function takes an array and a transformation function
+ * that converts each item in the array to a key. It then
+ * counts the occurrences of each transformed item and returns
+ * an object with the transformed items as keys and the counts
+ * as values.
+ *
+ * @template T - The type of the items in the input array.
+ * @template K - The type of keys.
+ * @param {T[]} arr - The input array to count occurrences.
+ * @param {(item: T) => K} mapper - The transformation function that maps each item to a key.
+ * @returns {Record<K, number>} An object containing the transformed items as keys and the
+ * counts as values.
+ *
+ * @example
+ * const array = ['a', 'b', 'c', 'a', 'b', 'a'];
+ * const result = countBy(array, x => x);
+ * // result will be { a: 3, b: 2, c: 1 }
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = countBy(array, item => item % 2 === 0 ? 'even' : 'odd');
+ * // result will be { odd: 3, even: 2 }
+ */
+declare function countBy<T, K extends PropertyKey>(arr: readonly T[], mapper: (item: T) => K): Record<K, number>;
+
+export { countBy };
Index: node_modules/es-toolkit/dist/array/countBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/countBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/countBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function countBy(arr, mapper) {
+    const result = {};
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const key = mapper(item);
+        result[key] = (result[key] ?? 0) + 1;
+    }
+    return result;
+}
+
+exports.countBy = countBy;
Index: node_modules/es-toolkit/dist/array/countBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/countBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/countBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function countBy(arr, mapper) {
+    const result = {};
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const key = mapper(item);
+        result[key] = (result[key] ?? 0) + 1;
+    }
+    return result;
+}
+
+export { countBy };
Index: node_modules/es-toolkit/dist/array/difference.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/difference.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/difference.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Computes the difference between two arrays.
+ *
+ * This function takes two arrays and returns a new array containing the elements
+ * that are present in the first array but not in the second array. It effectively
+ * filters out any elements from the first array that also appear in the second array.
+ *
+ * @template T
+ * @param {T[]} firstArr - The array from which to derive the difference. This is the primary array
+ * from which elements will be compared and filtered.
+ * @param {T[]} secondArr - The array containing elements to be excluded from the first array.
+ * Each element in this array will be checked against the first array, and if a match is found,
+ * that element will be excluded from the result.
+ * @returns {T[]} A new array containing the elements that are present in the first array but not
+ * in the second array.
+ *
+ * @example
+ * const array1 = [1, 2, 3, 4, 5];
+ * const array2 = [2, 4];
+ * const result = difference(array1, array2);
+ * // result will be [1, 3, 5] since 2 and 4 are in both arrays and are excluded from the result.
+ */
+declare function difference<T>(firstArr: readonly T[], secondArr: readonly T[]): T[];
+
+export { difference };
Index: node_modules/es-toolkit/dist/array/difference.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/difference.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/difference.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Computes the difference between two arrays.
+ *
+ * This function takes two arrays and returns a new array containing the elements
+ * that are present in the first array but not in the second array. It effectively
+ * filters out any elements from the first array that also appear in the second array.
+ *
+ * @template T
+ * @param {T[]} firstArr - The array from which to derive the difference. This is the primary array
+ * from which elements will be compared and filtered.
+ * @param {T[]} secondArr - The array containing elements to be excluded from the first array.
+ * Each element in this array will be checked against the first array, and if a match is found,
+ * that element will be excluded from the result.
+ * @returns {T[]} A new array containing the elements that are present in the first array but not
+ * in the second array.
+ *
+ * @example
+ * const array1 = [1, 2, 3, 4, 5];
+ * const array2 = [2, 4];
+ * const result = difference(array1, array2);
+ * // result will be [1, 3, 5] since 2 and 4 are in both arrays and are excluded from the result.
+ */
+declare function difference<T>(firstArr: readonly T[], secondArr: readonly T[]): T[];
+
+export { difference };
Index: node_modules/es-toolkit/dist/array/difference.js
===================================================================
--- node_modules/es-toolkit/dist/array/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function difference(firstArr, secondArr) {
+    const secondSet = new Set(secondArr);
+    return firstArr.filter(item => !secondSet.has(item));
+}
+
+exports.difference = difference;
Index: node_modules/es-toolkit/dist/array/difference.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/difference.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/difference.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+function difference(firstArr, secondArr) {
+    const secondSet = new Set(secondArr);
+    return firstArr.filter(item => !secondSet.has(item));
+}
+
+export { difference };
Index: node_modules/es-toolkit/dist/array/differenceBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/differenceBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/differenceBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Computes the difference between two arrays after mapping their elements through a provided function.
+ *
+ * This function takes two arrays and a mapper function. It returns a new array containing the elements
+ * that are present in the first array but not in the second array, based on the identity calculated
+ * by the mapper function.
+ *
+ * Essentially, it filters out any elements from the first array that, when
+ * mapped, match an element in the mapped version of the second array.
+ *
+ * @template T, U
+ * @param {T[]} firstArr - The primary array from which to derive the difference.
+ * @param {U[]} secondArr - The array containing elements to be excluded from the first array.
+ * @param {(value: T | U) => unknown} mapper - The function to map the elements of both arrays. This function
+ * is applied to each element in both arrays, and the comparison is made based on the mapped values.
+ * @returns {T[]} A new array containing the elements from the first array that do not have a corresponding
+ * mapped identity in the second array.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [{ id: 2 }, { id: 4 }];
+ * const mapper = item => item.id;
+ * const result = differenceBy(array1, array2, mapper);
+ * // result will be [{ id: 1 }, { id: 3 }] since the elements with id 2 are in both arrays and are excluded from the result.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [2, 4];
+ * const mapper = item => (typeof item === 'object' ? item.id : item);
+ * const result = differenceBy(array1, array2, mapper);
+ * // result will be [{ id: 1 }, { id: 3 }] since 2 is present in both arrays after mapping, and is excluded from the result.
+ */
+declare function differenceBy<T, U>(firstArr: readonly T[], secondArr: readonly U[], mapper: (value: T | U) => unknown): T[];
+
+export { differenceBy };
Index: node_modules/es-toolkit/dist/array/differenceBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/differenceBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/differenceBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Computes the difference between two arrays after mapping their elements through a provided function.
+ *
+ * This function takes two arrays and a mapper function. It returns a new array containing the elements
+ * that are present in the first array but not in the second array, based on the identity calculated
+ * by the mapper function.
+ *
+ * Essentially, it filters out any elements from the first array that, when
+ * mapped, match an element in the mapped version of the second array.
+ *
+ * @template T, U
+ * @param {T[]} firstArr - The primary array from which to derive the difference.
+ * @param {U[]} secondArr - The array containing elements to be excluded from the first array.
+ * @param {(value: T | U) => unknown} mapper - The function to map the elements of both arrays. This function
+ * is applied to each element in both arrays, and the comparison is made based on the mapped values.
+ * @returns {T[]} A new array containing the elements from the first array that do not have a corresponding
+ * mapped identity in the second array.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [{ id: 2 }, { id: 4 }];
+ * const mapper = item => item.id;
+ * const result = differenceBy(array1, array2, mapper);
+ * // result will be [{ id: 1 }, { id: 3 }] since the elements with id 2 are in both arrays and are excluded from the result.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [2, 4];
+ * const mapper = item => (typeof item === 'object' ? item.id : item);
+ * const result = differenceBy(array1, array2, mapper);
+ * // result will be [{ id: 1 }, { id: 3 }] since 2 is present in both arrays after mapping, and is excluded from the result.
+ */
+declare function differenceBy<T, U>(firstArr: readonly T[], secondArr: readonly U[], mapper: (value: T | U) => unknown): T[];
+
+export { differenceBy };
Index: node_modules/es-toolkit/dist/array/differenceBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/differenceBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/differenceBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function differenceBy(firstArr, secondArr, mapper) {
+    const mappedSecondSet = new Set(secondArr.map(item => mapper(item)));
+    return firstArr.filter(item => {
+        return !mappedSecondSet.has(mapper(item));
+    });
+}
+
+exports.differenceBy = differenceBy;
Index: node_modules/es-toolkit/dist/array/differenceBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/differenceBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/differenceBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function differenceBy(firstArr, secondArr, mapper) {
+    const mappedSecondSet = new Set(secondArr.map(item => mapper(item)));
+    return firstArr.filter(item => {
+        return !mappedSecondSet.has(mapper(item));
+    });
+}
+
+export { differenceBy };
Index: node_modules/es-toolkit/dist/array/differenceWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/differenceWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/differenceWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Computes the difference between two arrays based on a custom equality function.
+ *
+ * This function takes two arrays and a custom comparison function. It returns a new array containing
+ * the elements that are present in the first array but not in the second array. The comparison to determine
+ * if elements are equal is made using the provided custom function.
+ *
+ * @template T, U
+ * @param {T[]} firstArr - The array from which to get the difference.
+ * @param {U[]} secondArr - The array containing elements to exclude from the first array.
+ * @param {(x: T, y: U) => boolean} areItemsEqual - A function to determine if two items are equal.
+ * @returns {T[]} A new array containing the elements from the first array that do not match any elements in the second array
+ * according to the custom equality function.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [{ id: 2 }, { id: 4 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * const result = differenceWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 1 }, { id: 3 }] since the elements with id 2 are considered equal and are excluded from the result.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [2, 4];
+ * const areItemsEqual = (a, b) => a.id === b;
+ * const result = differenceWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 1 }, { id: 3 }] since the element with id 2 is considered equal to the second array's element and is excluded from the result.
+ */
+declare function differenceWith<T, U>(firstArr: readonly T[], secondArr: readonly U[], areItemsEqual: (x: T, y: U) => boolean): T[];
+
+export { differenceWith };
Index: node_modules/es-toolkit/dist/array/differenceWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/differenceWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/differenceWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Computes the difference between two arrays based on a custom equality function.
+ *
+ * This function takes two arrays and a custom comparison function. It returns a new array containing
+ * the elements that are present in the first array but not in the second array. The comparison to determine
+ * if elements are equal is made using the provided custom function.
+ *
+ * @template T, U
+ * @param {T[]} firstArr - The array from which to get the difference.
+ * @param {U[]} secondArr - The array containing elements to exclude from the first array.
+ * @param {(x: T, y: U) => boolean} areItemsEqual - A function to determine if two items are equal.
+ * @returns {T[]} A new array containing the elements from the first array that do not match any elements in the second array
+ * according to the custom equality function.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [{ id: 2 }, { id: 4 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * const result = differenceWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 1 }, { id: 3 }] since the elements with id 2 are considered equal and are excluded from the result.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [2, 4];
+ * const areItemsEqual = (a, b) => a.id === b;
+ * const result = differenceWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 1 }, { id: 3 }] since the element with id 2 is considered equal to the second array's element and is excluded from the result.
+ */
+declare function differenceWith<T, U>(firstArr: readonly T[], secondArr: readonly U[], areItemsEqual: (x: T, y: U) => boolean): T[];
+
+export { differenceWith };
Index: node_modules/es-toolkit/dist/array/differenceWith.js
===================================================================
--- node_modules/es-toolkit/dist/array/differenceWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/differenceWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function differenceWith(firstArr, secondArr, areItemsEqual) {
+    return firstArr.filter(firstItem => {
+        return secondArr.every(secondItem => {
+            return !areItemsEqual(firstItem, secondItem);
+        });
+    });
+}
+
+exports.differenceWith = differenceWith;
Index: node_modules/es-toolkit/dist/array/differenceWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/differenceWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/differenceWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+function differenceWith(firstArr, secondArr, areItemsEqual) {
+    return firstArr.filter(firstItem => {
+        return secondArr.every(secondItem => {
+            return !areItemsEqual(firstItem, secondItem);
+        });
+    });
+}
+
+export { differenceWith };
Index: node_modules/es-toolkit/dist/array/drop.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/drop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/drop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes a specified number of elements from the beginning of an array and returns the rest.
+ *
+ * This function takes an array and a number, and returns a new array with the specified number
+ * of elements removed from the start.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to drop elements.
+ * @param {number} itemsCount - The number of elements to drop from the beginning of the array.
+ * @returns {T[]} A new array with the specified number of elements removed from the start.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = drop(array, 2);
+ * // result will be [3, 4, 5] since the first two elements are dropped.
+ */
+declare function drop<T>(arr: readonly T[], itemsCount: number): T[];
+
+export { drop };
Index: node_modules/es-toolkit/dist/array/drop.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/drop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/drop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes a specified number of elements from the beginning of an array and returns the rest.
+ *
+ * This function takes an array and a number, and returns a new array with the specified number
+ * of elements removed from the start.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to drop elements.
+ * @param {number} itemsCount - The number of elements to drop from the beginning of the array.
+ * @returns {T[]} A new array with the specified number of elements removed from the start.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = drop(array, 2);
+ * // result will be [3, 4, 5] since the first two elements are dropped.
+ */
+declare function drop<T>(arr: readonly T[], itemsCount: number): T[];
+
+export { drop };
Index: node_modules/es-toolkit/dist/array/drop.js
===================================================================
--- node_modules/es-toolkit/dist/array/drop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/drop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function drop(arr, itemsCount) {
+    itemsCount = Math.max(itemsCount, 0);
+    return arr.slice(itemsCount);
+}
+
+exports.drop = drop;
Index: node_modules/es-toolkit/dist/array/drop.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/drop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/drop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+function drop(arr, itemsCount) {
+    itemsCount = Math.max(itemsCount, 0);
+    return arr.slice(itemsCount);
+}
+
+export { drop };
Index: node_modules/es-toolkit/dist/array/dropRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/dropRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes a specified number of elements from the end of an array and returns the rest.
+ *
+ * This function takes an array and a number, and returns a new array with the specified number
+ * of elements removed from the end.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to drop elements.
+ * @param {number} itemsCount - The number of elements to drop from the end of the array.
+ * @returns {T[]} A new array with the specified number of elements removed from the end.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = dropRight(array, 2);
+ * // result will be [1, 2, 3] since the last two elements are dropped.
+ */
+declare function dropRight<T>(arr: readonly T[], itemsCount: number): T[];
+
+export { dropRight };
Index: node_modules/es-toolkit/dist/array/dropRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/dropRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes a specified number of elements from the end of an array and returns the rest.
+ *
+ * This function takes an array and a number, and returns a new array with the specified number
+ * of elements removed from the end.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to drop elements.
+ * @param {number} itemsCount - The number of elements to drop from the end of the array.
+ * @returns {T[]} A new array with the specified number of elements removed from the end.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = dropRight(array, 2);
+ * // result will be [1, 2, 3] since the last two elements are dropped.
+ */
+declare function dropRight<T>(arr: readonly T[], itemsCount: number): T[];
+
+export { dropRight };
Index: node_modules/es-toolkit/dist/array/dropRight.js
===================================================================
--- node_modules/es-toolkit/dist/array/dropRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function dropRight(arr, itemsCount) {
+    itemsCount = Math.min(-itemsCount, 0);
+    if (itemsCount === 0) {
+        return arr.slice();
+    }
+    return arr.slice(0, itemsCount);
+}
+
+exports.dropRight = dropRight;
Index: node_modules/es-toolkit/dist/array/dropRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/dropRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+function dropRight(arr, itemsCount) {
+    itemsCount = Math.min(-itemsCount, 0);
+    if (itemsCount === 0) {
+        return arr.slice();
+    }
+    return arr.slice(0, itemsCount);
+}
+
+export { dropRight };
Index: node_modules/es-toolkit/dist/array/dropRightWhile.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/dropRightWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropRightWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Removes elements from the end of an array until the predicate returns false.
+ *
+ * This function iterates over an array from the end and drops elements until the provided
+ * predicate function returns false. It then returns a new array with the remaining elements.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to drop elements.
+ * @param {(item: T, index: number, arr: T[]) => boolean} canContinueDropping - A predicate function that determines
+ * whether to continue dropping elements. The function is called with each element from the end,
+ * and dropping continues as long as it returns true.
+ * @returns {T[]} A new array with the elements remaining after the predicate returns false.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = dropRightWhile(array, x => x > 3);
+ * // result will be [1, 2, 3] since elements greater than 3 are dropped from the end.
+ */
+declare function dropRightWhile<T>(arr: readonly T[], canContinueDropping: (item: T, index: number, arr: readonly T[]) => boolean): T[];
+
+export { dropRightWhile };
Index: node_modules/es-toolkit/dist/array/dropRightWhile.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/dropRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Removes elements from the end of an array until the predicate returns false.
+ *
+ * This function iterates over an array from the end and drops elements until the provided
+ * predicate function returns false. It then returns a new array with the remaining elements.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to drop elements.
+ * @param {(item: T, index: number, arr: T[]) => boolean} canContinueDropping - A predicate function that determines
+ * whether to continue dropping elements. The function is called with each element from the end,
+ * and dropping continues as long as it returns true.
+ * @returns {T[]} A new array with the elements remaining after the predicate returns false.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = dropRightWhile(array, x => x > 3);
+ * // result will be [1, 2, 3] since elements greater than 3 are dropped from the end.
+ */
+declare function dropRightWhile<T>(arr: readonly T[], canContinueDropping: (item: T, index: number, arr: readonly T[]) => boolean): T[];
+
+export { dropRightWhile };
Index: node_modules/es-toolkit/dist/array/dropRightWhile.js
===================================================================
--- node_modules/es-toolkit/dist/array/dropRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function dropRightWhile(arr, canContinueDropping) {
+    for (let i = arr.length - 1; i >= 0; i--) {
+        if (!canContinueDropping(arr[i], i, arr)) {
+            return arr.slice(0, i + 1);
+        }
+    }
+    return [];
+}
+
+exports.dropRightWhile = dropRightWhile;
Index: node_modules/es-toolkit/dist/array/dropRightWhile.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/dropRightWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropRightWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+function dropRightWhile(arr, canContinueDropping) {
+    for (let i = arr.length - 1; i >= 0; i--) {
+        if (!canContinueDropping(arr[i], i, arr)) {
+            return arr.slice(0, i + 1);
+        }
+    }
+    return [];
+}
+
+export { dropRightWhile };
Index: node_modules/es-toolkit/dist/array/dropWhile.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/dropWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Removes elements from the beginning of an array until the predicate returns false.
+ *
+ * This function iterates over an array and drops elements from the start until the provided
+ * predicate function returns false. It then returns a new array with the remaining elements.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to drop elements.
+ * @param {(item: T, index: number, arr: T[]) => boolean} canContinueDropping - A predicate function that determines
+ * whether to continue dropping elements. The function is called with each element, and dropping
+ * continues as long as it returns true.
+ * @returns {T[]} A new array with the elements remaining after the predicate returns false.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = dropWhile(array, x => x < 3);
+ * // result will be [3, 4, 5] since elements less than 3 are dropped.
+ */
+declare function dropWhile<T>(arr: readonly T[], canContinueDropping: (item: T, index: number, arr: readonly T[]) => boolean): T[];
+
+export { dropWhile };
Index: node_modules/es-toolkit/dist/array/dropWhile.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/dropWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Removes elements from the beginning of an array until the predicate returns false.
+ *
+ * This function iterates over an array and drops elements from the start until the provided
+ * predicate function returns false. It then returns a new array with the remaining elements.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to drop elements.
+ * @param {(item: T, index: number, arr: T[]) => boolean} canContinueDropping - A predicate function that determines
+ * whether to continue dropping elements. The function is called with each element, and dropping
+ * continues as long as it returns true.
+ * @returns {T[]} A new array with the elements remaining after the predicate returns false.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = dropWhile(array, x => x < 3);
+ * // result will be [3, 4, 5] since elements less than 3 are dropped.
+ */
+declare function dropWhile<T>(arr: readonly T[], canContinueDropping: (item: T, index: number, arr: readonly T[]) => boolean): T[];
+
+export { dropWhile };
Index: node_modules/es-toolkit/dist/array/dropWhile.js
===================================================================
--- node_modules/es-toolkit/dist/array/dropWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function dropWhile(arr, canContinueDropping) {
+    const dropEndIndex = arr.findIndex((item, index, arr) => !canContinueDropping(item, index, arr));
+    if (dropEndIndex === -1) {
+        return [];
+    }
+    return arr.slice(dropEndIndex);
+}
+
+exports.dropWhile = dropWhile;
Index: node_modules/es-toolkit/dist/array/dropWhile.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/dropWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/dropWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+function dropWhile(arr, canContinueDropping) {
+    const dropEndIndex = arr.findIndex((item, index, arr) => !canContinueDropping(item, index, arr));
+    if (dropEndIndex === -1) {
+        return [];
+    }
+    return arr.slice(dropEndIndex);
+}
+
+export { dropWhile };
Index: node_modules/es-toolkit/dist/array/fill.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/fill.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/fill.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,88 @@
+/**
+ * Fills the whole array with a specified value.
+ *
+ * This function mutates the original array and replaces its elements with the provided value, starting from the specified
+ * start index up to the end index (non-inclusive). If the start or end indices are not provided, it defaults to filling the
+ * entire array.
+ *
+ * @template T - The type of the value to fill the array with.
+ * @param {unknown[]} array - The array to fill.
+ * @param {T} value - The value to fill the array with.
+ * @returns {T[]} The array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result = fill(array, 'a');
+ * // => ['a', 'a', 'a']
+ *
+ * const result = fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * const result = fill([4, 6, 8, 10], '*', 1, 3);
+ * // => [4, '*', '*', 10]
+ *
+ * const result = fill(array, '*', -2, -1);
+ * // => [1, '*', 3]
+ */
+declare function fill<T>(array: unknown[], value: T): T[];
+/**
+ * Fills elements of an array with a specified value from the start position up to the end of the array.
+ *
+ * This function mutates the original array and replaces its elements with the provided value, starting from the specified
+ * start index up to the end index (non-inclusive). If the start or end indices are not provided, it defaults to filling the
+ * entire array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the array with.
+ * @param {Array<T | U>} array - The array to fill.
+ * @param {U} value - The value to fill the array with.
+ * @param {number} [start=0] - The start position. Defaults to 0.
+ * @returns {Array<T | U>} The array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result = fill(array, 'a');
+ * // => ['a', 'a', 'a']
+ *
+ * const result = fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * const result = fill([4, 6, 8, 10], '*', 1, 3);
+ * // => [4, '*', '*', 10]
+ *
+ * const result = fill(array, '*', -2, -1);
+ * // => [1, '*', 3]
+ */
+declare function fill<T, U>(array: Array<T | U>, value: U, start: number): Array<T | U>;
+/**
+ * Fills elements of an array with a specified value from the start position up to, but not including, the end position.
+ *
+ * This function mutates the original array and replaces its elements with the provided value, starting from the specified
+ * start index up to the end index (non-inclusive). If the start or end indices are not provided, it defaults to filling the
+ * entire array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the array with.
+ * @param {Array<T | U>} array - The array to fill.
+ * @param {U} value - The value to fill the array with.
+ * @param {number} [start=0] - The start position. Defaults to 0.
+ * @param {number} [end=arr.length] - The end position. Defaults to the array's length.
+ * @returns {Array<T | U>} The array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result = fill(array, 'a');
+ * // => ['a', 'a', 'a']
+ *
+ * const result = fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * const result = fill([4, 6, 8, 10], '*', 1, 3);
+ * // => [4, '*', '*', 10]
+ *
+ * const result = fill(array, '*', -2, -1);
+ * // => [1, '*', 3]
+ */
+declare function fill<T, U>(array: Array<T | U>, value: U, start: number, end: number): Array<T | U>;
+
+export { fill };
Index: node_modules/es-toolkit/dist/array/fill.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/fill.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/fill.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,88 @@
+/**
+ * Fills the whole array with a specified value.
+ *
+ * This function mutates the original array and replaces its elements with the provided value, starting from the specified
+ * start index up to the end index (non-inclusive). If the start or end indices are not provided, it defaults to filling the
+ * entire array.
+ *
+ * @template T - The type of the value to fill the array with.
+ * @param {unknown[]} array - The array to fill.
+ * @param {T} value - The value to fill the array with.
+ * @returns {T[]} The array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result = fill(array, 'a');
+ * // => ['a', 'a', 'a']
+ *
+ * const result = fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * const result = fill([4, 6, 8, 10], '*', 1, 3);
+ * // => [4, '*', '*', 10]
+ *
+ * const result = fill(array, '*', -2, -1);
+ * // => [1, '*', 3]
+ */
+declare function fill<T>(array: unknown[], value: T): T[];
+/**
+ * Fills elements of an array with a specified value from the start position up to the end of the array.
+ *
+ * This function mutates the original array and replaces its elements with the provided value, starting from the specified
+ * start index up to the end index (non-inclusive). If the start or end indices are not provided, it defaults to filling the
+ * entire array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the array with.
+ * @param {Array<T | U>} array - The array to fill.
+ * @param {U} value - The value to fill the array with.
+ * @param {number} [start=0] - The start position. Defaults to 0.
+ * @returns {Array<T | U>} The array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result = fill(array, 'a');
+ * // => ['a', 'a', 'a']
+ *
+ * const result = fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * const result = fill([4, 6, 8, 10], '*', 1, 3);
+ * // => [4, '*', '*', 10]
+ *
+ * const result = fill(array, '*', -2, -1);
+ * // => [1, '*', 3]
+ */
+declare function fill<T, U>(array: Array<T | U>, value: U, start: number): Array<T | U>;
+/**
+ * Fills elements of an array with a specified value from the start position up to, but not including, the end position.
+ *
+ * This function mutates the original array and replaces its elements with the provided value, starting from the specified
+ * start index up to the end index (non-inclusive). If the start or end indices are not provided, it defaults to filling the
+ * entire array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the array with.
+ * @param {Array<T | U>} array - The array to fill.
+ * @param {U} value - The value to fill the array with.
+ * @param {number} [start=0] - The start position. Defaults to 0.
+ * @param {number} [end=arr.length] - The end position. Defaults to the array's length.
+ * @returns {Array<T | U>} The array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result = fill(array, 'a');
+ * // => ['a', 'a', 'a']
+ *
+ * const result = fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * const result = fill([4, 6, 8, 10], '*', 1, 3);
+ * // => [4, '*', '*', 10]
+ *
+ * const result = fill(array, '*', -2, -1);
+ * // => [1, '*', 3]
+ */
+declare function fill<T, U>(array: Array<T | U>, value: U, start: number, end: number): Array<T | U>;
+
+export { fill };
Index: node_modules/es-toolkit/dist/array/fill.js
===================================================================
--- node_modules/es-toolkit/dist/array/fill.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/fill.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function fill(array, value, start = 0, end = array.length) {
+    const length = array.length;
+    const finalStart = Math.max(start >= 0 ? start : length + start, 0);
+    const finalEnd = Math.min(end >= 0 ? end : length + end, length);
+    for (let i = finalStart; i < finalEnd; i++) {
+        array[i] = value;
+    }
+    return array;
+}
+
+exports.fill = fill;
Index: node_modules/es-toolkit/dist/array/fill.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/fill.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/fill.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function fill(array, value, start = 0, end = array.length) {
+    const length = array.length;
+    const finalStart = Math.max(start >= 0 ? start : length + start, 0);
+    const finalEnd = Math.min(end >= 0 ? end : length + end, length);
+    for (let i = finalStart; i < finalEnd; i++) {
+        array[i] = value;
+    }
+    return array;
+}
+
+export { fill };
Index: node_modules/es-toolkit/dist/array/flatMap.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/flatMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Maps each element in the array using the iteratee function and flattens the result up to the specified depth.
+ *
+ * @template T - The type of elements within the array.
+ * @template U - The type of elements within the returned array from the iteratee function.
+ * @template D - The depth to which the array should be flattened.
+ * @param {T[]} arr - The array to flatten.
+ * @param {(item: T) => U} iteratee - The function that produces the new array elements.
+ * @param {D} depth - The depth level specifying how deep a nested array structure should be flattened. Defaults to 1.
+ * @returns {Array<FlatArray<U[], D>>} The new array with the mapped and flattened elements.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ *
+ * flatMap(arr, (item: number) => [item, item]);
+ * // [1, 1, 2, 2, 3, 3]
+ *
+ * flatMap(arr, (item: number) => [[item, item]], 2);
+ * // [1, 1, 2, 2, 3, 3]
+ */
+declare function flatMap<T, U, D extends number = 1>(arr: readonly T[], iteratee: (item: T) => U, depth?: D): Array<FlatArray<U[], D>>;
+
+export { flatMap };
Index: node_modules/es-toolkit/dist/array/flatMap.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/flatMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Maps each element in the array using the iteratee function and flattens the result up to the specified depth.
+ *
+ * @template T - The type of elements within the array.
+ * @template U - The type of elements within the returned array from the iteratee function.
+ * @template D - The depth to which the array should be flattened.
+ * @param {T[]} arr - The array to flatten.
+ * @param {(item: T) => U} iteratee - The function that produces the new array elements.
+ * @param {D} depth - The depth level specifying how deep a nested array structure should be flattened. Defaults to 1.
+ * @returns {Array<FlatArray<U[], D>>} The new array with the mapped and flattened elements.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ *
+ * flatMap(arr, (item: number) => [item, item]);
+ * // [1, 1, 2, 2, 3, 3]
+ *
+ * flatMap(arr, (item: number) => [[item, item]], 2);
+ * // [1, 1, 2, 2, 3, 3]
+ */
+declare function flatMap<T, U, D extends number = 1>(arr: readonly T[], iteratee: (item: T) => U, depth?: D): Array<FlatArray<U[], D>>;
+
+export { flatMap };
Index: node_modules/es-toolkit/dist/array/flatMap.js
===================================================================
--- node_modules/es-toolkit/dist/array/flatMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flatten = require('./flatten.js');
+
+function flatMap(arr, iteratee, depth = 1) {
+    return flatten.flatten(arr.map(item => iteratee(item)), depth);
+}
+
+exports.flatMap = flatMap;
Index: node_modules/es-toolkit/dist/array/flatMap.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/flatMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { flatten } from './flatten.mjs';
+
+function flatMap(arr, iteratee, depth = 1) {
+    return flatten(arr.map(item => iteratee(item)), depth);
+}
+
+export { flatMap };
Index: node_modules/es-toolkit/dist/array/flatMapDeep.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/flatMapDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatMapDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import { ExtractNestedArrayType } from './flattenDeep.mjs';
+
+/**
+ * Recursively maps each element in an array using a provided iteratee function and then deeply flattens the resulting array.
+ *
+ * @template T - The type of elements within the array.
+ * @template U - The type of elements within the returned array from the iteratee function.
+ * @param {T[]} arr - The array to flatten.
+ * @param {(item: T) => U} iteratee - The function that produces the new array elements.
+ * @returns {Array<ExtractNestedArrayType<U>>} A new array that has been flattened.
+ *
+ * @example
+ * const result = flatMapDeep([1, 2, 3], n => [[n, n]]);
+ * // [1, 1, 2, 2, 3, 3]
+ */
+declare function flatMapDeep<T, U>(arr: readonly T[], iteratee: (item: T) => U): Array<ExtractNestedArrayType<U>>;
+
+export { flatMapDeep };
Index: node_modules/es-toolkit/dist/array/flatMapDeep.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/flatMapDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatMapDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import { ExtractNestedArrayType } from './flattenDeep.js';
+
+/**
+ * Recursively maps each element in an array using a provided iteratee function and then deeply flattens the resulting array.
+ *
+ * @template T - The type of elements within the array.
+ * @template U - The type of elements within the returned array from the iteratee function.
+ * @param {T[]} arr - The array to flatten.
+ * @param {(item: T) => U} iteratee - The function that produces the new array elements.
+ * @returns {Array<ExtractNestedArrayType<U>>} A new array that has been flattened.
+ *
+ * @example
+ * const result = flatMapDeep([1, 2, 3], n => [[n, n]]);
+ * // [1, 1, 2, 2, 3, 3]
+ */
+declare function flatMapDeep<T, U>(arr: readonly T[], iteratee: (item: T) => U): Array<ExtractNestedArrayType<U>>;
+
+export { flatMapDeep };
Index: node_modules/es-toolkit/dist/array/flatMapDeep.js
===================================================================
--- node_modules/es-toolkit/dist/array/flatMapDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatMapDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flattenDeep = require('./flattenDeep.js');
+
+function flatMapDeep(arr, iteratee) {
+    return flattenDeep.flattenDeep(arr.map((item) => iteratee(item)));
+}
+
+exports.flatMapDeep = flatMapDeep;
Index: node_modules/es-toolkit/dist/array/flatMapDeep.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/flatMapDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatMapDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { flattenDeep } from './flattenDeep.mjs';
+
+function flatMapDeep(arr, iteratee) {
+    return flattenDeep(arr.map((item) => iteratee(item)));
+}
+
+export { flatMapDeep };
Index: node_modules/es-toolkit/dist/array/flatten.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/flatten.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatten.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Flattens an array up to the specified depth.
+ *
+ * @template T - The type of elements within the array.
+ * @template D - The depth to which the array should be flattened.
+ * @param {T[]} arr - The array to flatten.
+ * @param {D} depth - The depth level specifying how deep a nested array structure should be flattened. Defaults to 1.
+ * @returns {Array<FlatArray<T[], D>>} A new array that has been flattened.
+ *
+ * @example
+ * const arr = flatten([1, [2, 3], [4, [5, 6]]], 1);
+ * // Returns: [1, 2, 3, 4, [5, 6]]
+ *
+ * const arr = flatten([1, [2, 3], [4, [5, 6]]], 2);
+ * // Returns: [1, 2, 3, 4, 5, 6]
+ */
+declare function flatten<T, D extends number = 1>(arr: readonly T[], depth?: D): Array<FlatArray<T[], D>>;
+
+export { flatten };
Index: node_modules/es-toolkit/dist/array/flatten.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/flatten.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatten.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Flattens an array up to the specified depth.
+ *
+ * @template T - The type of elements within the array.
+ * @template D - The depth to which the array should be flattened.
+ * @param {T[]} arr - The array to flatten.
+ * @param {D} depth - The depth level specifying how deep a nested array structure should be flattened. Defaults to 1.
+ * @returns {Array<FlatArray<T[], D>>} A new array that has been flattened.
+ *
+ * @example
+ * const arr = flatten([1, [2, 3], [4, [5, 6]]], 1);
+ * // Returns: [1, 2, 3, 4, [5, 6]]
+ *
+ * const arr = flatten([1, [2, 3], [4, [5, 6]]], 2);
+ * // Returns: [1, 2, 3, 4, 5, 6]
+ */
+declare function flatten<T, D extends number = 1>(arr: readonly T[], depth?: D): Array<FlatArray<T[], D>>;
+
+export { flatten };
Index: node_modules/es-toolkit/dist/array/flatten.js
===================================================================
--- node_modules/es-toolkit/dist/array/flatten.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatten.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function flatten(arr, depth = 1) {
+    const result = [];
+    const flooredDepth = Math.floor(depth);
+    const recursive = (arr, currentDepth) => {
+        for (let i = 0; i < arr.length; i++) {
+            const item = arr[i];
+            if (Array.isArray(item) && currentDepth < flooredDepth) {
+                recursive(item, currentDepth + 1);
+            }
+            else {
+                result.push(item);
+            }
+        }
+    };
+    recursive(arr, 0);
+    return result;
+}
+
+exports.flatten = flatten;
Index: node_modules/es-toolkit/dist/array/flatten.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/flatten.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flatten.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+function flatten(arr, depth = 1) {
+    const result = [];
+    const flooredDepth = Math.floor(depth);
+    const recursive = (arr, currentDepth) => {
+        for (let i = 0; i < arr.length; i++) {
+            const item = arr[i];
+            if (Array.isArray(item) && currentDepth < flooredDepth) {
+                recursive(item, currentDepth + 1);
+            }
+            else {
+                result.push(item);
+            }
+        }
+    };
+    recursive(arr, 0);
+    return result;
+}
+
+export { flatten };
Index: node_modules/es-toolkit/dist/array/flattenDeep.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/flattenDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flattenDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Utility type for recursively unpacking nested array types to extract the type of the innermost element
+ *
+ * @example
+ * ExtractNestedArrayType<(number | (number | number[])[])[]>
+ * // number
+ *
+ * ExtractNestedArrayType<(boolean | (string | number[])[])[]>
+ * // string | number | boolean
+ */
+type ExtractNestedArrayType<T> = T extends ReadonlyArray<infer U> ? ExtractNestedArrayType<U> : T;
+/**
+ * Flattens all depths of a nested array.
+ *
+ * @template T - The type of elements within the array.
+ * @param {T[]} arr - The array to flatten.
+ * @returns {Array<ExtractNestedArrayType<T>>} A new array that has been flattened.
+ *
+ * @example
+ * const arr = flattenDeep([1, [2, [3]], [4, [5, 6]]]);
+ * // Returns: [1, 2, 3, 4, 5, 6]
+ */
+declare function flattenDeep<T>(arr: readonly T[]): Array<ExtractNestedArrayType<T>>;
+
+export { type ExtractNestedArrayType, flattenDeep };
Index: node_modules/es-toolkit/dist/array/flattenDeep.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/flattenDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flattenDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Utility type for recursively unpacking nested array types to extract the type of the innermost element
+ *
+ * @example
+ * ExtractNestedArrayType<(number | (number | number[])[])[]>
+ * // number
+ *
+ * ExtractNestedArrayType<(boolean | (string | number[])[])[]>
+ * // string | number | boolean
+ */
+type ExtractNestedArrayType<T> = T extends ReadonlyArray<infer U> ? ExtractNestedArrayType<U> : T;
+/**
+ * Flattens all depths of a nested array.
+ *
+ * @template T - The type of elements within the array.
+ * @param {T[]} arr - The array to flatten.
+ * @returns {Array<ExtractNestedArrayType<T>>} A new array that has been flattened.
+ *
+ * @example
+ * const arr = flattenDeep([1, [2, [3]], [4, [5, 6]]]);
+ * // Returns: [1, 2, 3, 4, 5, 6]
+ */
+declare function flattenDeep<T>(arr: readonly T[]): Array<ExtractNestedArrayType<T>>;
+
+export { type ExtractNestedArrayType, flattenDeep };
Index: node_modules/es-toolkit/dist/array/flattenDeep.js
===================================================================
--- node_modules/es-toolkit/dist/array/flattenDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flattenDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flatten = require('./flatten.js');
+
+function flattenDeep(arr) {
+    return flatten.flatten(arr, Infinity);
+}
+
+exports.flattenDeep = flattenDeep;
Index: node_modules/es-toolkit/dist/array/flattenDeep.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/flattenDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/flattenDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { flatten } from './flatten.mjs';
+
+function flattenDeep(arr) {
+    return flatten(arr, Infinity);
+}
+
+export { flattenDeep };
Index: node_modules/es-toolkit/dist/array/forEachRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/forEachRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/forEachRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+/**
+ * Iterates over elements of 'arr' from right to left and invokes 'callback' for each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to iterate over.
+ * @param {(value: T, index: number, arr: T[]) => void} callback - The function invoked per iteration.
+ * The callback function receives three arguments:
+ *  - 'value': The current element being processed in the array.
+ *  - 'index': The index of the current element being processed in the array.
+ *  - 'arr': The array 'forEachRight' was called upon.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result: number[] = [];
+ *
+ * // Use the forEachRight function to iterate through the array and add each element to the result array.
+ * forEachRight(array, (value) => {
+ *  result.push(value);
+ * })
+ *
+ * console.log(result) // Output: [3, 2, 1]
+ */
+declare function forEachRight<T>(arr: T[], callback: (value: T, index: number, arr: T[]) => void): void;
+/**
+ * Iterates over elements of 'arr' from right to left and invokes 'callback' for each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to iterate over.
+ * @param {(value: T, index: number, arr: T[]) => void} callback - The function invoked per iteration.
+ * The callback function receives three arguments:
+ *  - 'value': The current element being processed in the array.
+ *  - 'index': The index of the current element being processed in the array.
+ *  - 'arr': The array 'forEachRight' was called upon.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result: number[] = [];
+ *
+ * // Use the forEachRight function to iterate through the array and add each element to the result array.
+ * forEachRight(array, (value) => {
+ *  result.push(value);
+ * })
+ *
+ * console.log(result) // Output: [3, 2, 1]
+ */
+declare function forEachRight<T>(arr: readonly T[], callback: (value: T, index: number, arr: readonly T[]) => void): void;
+
+export { forEachRight };
Index: node_modules/es-toolkit/dist/array/forEachRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/forEachRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/forEachRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+/**
+ * Iterates over elements of 'arr' from right to left and invokes 'callback' for each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to iterate over.
+ * @param {(value: T, index: number, arr: T[]) => void} callback - The function invoked per iteration.
+ * The callback function receives three arguments:
+ *  - 'value': The current element being processed in the array.
+ *  - 'index': The index of the current element being processed in the array.
+ *  - 'arr': The array 'forEachRight' was called upon.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result: number[] = [];
+ *
+ * // Use the forEachRight function to iterate through the array and add each element to the result array.
+ * forEachRight(array, (value) => {
+ *  result.push(value);
+ * })
+ *
+ * console.log(result) // Output: [3, 2, 1]
+ */
+declare function forEachRight<T>(arr: T[], callback: (value: T, index: number, arr: T[]) => void): void;
+/**
+ * Iterates over elements of 'arr' from right to left and invokes 'callback' for each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to iterate over.
+ * @param {(value: T, index: number, arr: T[]) => void} callback - The function invoked per iteration.
+ * The callback function receives three arguments:
+ *  - 'value': The current element being processed in the array.
+ *  - 'index': The index of the current element being processed in the array.
+ *  - 'arr': The array 'forEachRight' was called upon.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const result: number[] = [];
+ *
+ * // Use the forEachRight function to iterate through the array and add each element to the result array.
+ * forEachRight(array, (value) => {
+ *  result.push(value);
+ * })
+ *
+ * console.log(result) // Output: [3, 2, 1]
+ */
+declare function forEachRight<T>(arr: readonly T[], callback: (value: T, index: number, arr: readonly T[]) => void): void;
+
+export { forEachRight };
Index: node_modules/es-toolkit/dist/array/forEachRight.js
===================================================================
--- node_modules/es-toolkit/dist/array/forEachRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/forEachRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function forEachRight(arr, callback) {
+    for (let i = arr.length - 1; i >= 0; i--) {
+        const element = arr[i];
+        callback(element, i, arr);
+    }
+}
+
+exports.forEachRight = forEachRight;
Index: node_modules/es-toolkit/dist/array/forEachRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/forEachRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/forEachRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function forEachRight(arr, callback) {
+    for (let i = arr.length - 1; i >= 0; i--) {
+        const element = arr[i];
+        callback(element, i, arr);
+    }
+}
+
+export { forEachRight };
Index: node_modules/es-toolkit/dist/array/groupBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/groupBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/groupBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Groups the elements of an array based on a provided key-generating function.
+ *
+ * This function takes an array and a function that generates a key from each element. It returns
+ * an object where the keys are the generated keys and the values are arrays of elements that share
+ * the same key.
+ *
+ * @template T - The type of elements in the array.
+ * @template K - The type of keys.
+ * @param {T[]} arr - The array to group.
+ * @param {(item: T) => K} getKeyFromItem - A function that generates a key from an element.
+ * @returns {Record<K, T[]>} An object where each key is associated with an array of elements that
+ * share that key.
+ *
+ * @example
+ * const array = [
+ *   { category: 'fruit', name: 'apple' },
+ *   { category: 'fruit', name: 'banana' },
+ *   { category: 'vegetable', name: 'carrot' }
+ * ];
+ * const result = groupBy(array, item => item.category);
+ * // result will be:
+ * // {
+ * //   fruit: [
+ * //     { category: 'fruit', name: 'apple' },
+ * //     { category: 'fruit', name: 'banana' }
+ * //   ],
+ * //   vegetable: [
+ * //     { category: 'vegetable', name: 'carrot' }
+ * //   ]
+ * // }
+ */
+declare function groupBy<T, K extends PropertyKey>(arr: readonly T[], getKeyFromItem: (item: T) => K): Record<K, T[]>;
+
+export { groupBy };
Index: node_modules/es-toolkit/dist/array/groupBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/groupBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/groupBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Groups the elements of an array based on a provided key-generating function.
+ *
+ * This function takes an array and a function that generates a key from each element. It returns
+ * an object where the keys are the generated keys and the values are arrays of elements that share
+ * the same key.
+ *
+ * @template T - The type of elements in the array.
+ * @template K - The type of keys.
+ * @param {T[]} arr - The array to group.
+ * @param {(item: T) => K} getKeyFromItem - A function that generates a key from an element.
+ * @returns {Record<K, T[]>} An object where each key is associated with an array of elements that
+ * share that key.
+ *
+ * @example
+ * const array = [
+ *   { category: 'fruit', name: 'apple' },
+ *   { category: 'fruit', name: 'banana' },
+ *   { category: 'vegetable', name: 'carrot' }
+ * ];
+ * const result = groupBy(array, item => item.category);
+ * // result will be:
+ * // {
+ * //   fruit: [
+ * //     { category: 'fruit', name: 'apple' },
+ * //     { category: 'fruit', name: 'banana' }
+ * //   ],
+ * //   vegetable: [
+ * //     { category: 'vegetable', name: 'carrot' }
+ * //   ]
+ * // }
+ */
+declare function groupBy<T, K extends PropertyKey>(arr: readonly T[], getKeyFromItem: (item: T) => K): Record<K, T[]>;
+
+export { groupBy };
Index: node_modules/es-toolkit/dist/array/groupBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/groupBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/groupBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function groupBy(arr, getKeyFromItem) {
+    const result = {};
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const key = getKeyFromItem(item);
+        if (!Object.hasOwn(result, key)) {
+            result[key] = [];
+        }
+        result[key].push(item);
+    }
+    return result;
+}
+
+exports.groupBy = groupBy;
Index: node_modules/es-toolkit/dist/array/groupBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/groupBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/groupBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+function groupBy(arr, getKeyFromItem) {
+    const result = {};
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const key = getKeyFromItem(item);
+        if (!Object.hasOwn(result, key)) {
+            result[key] = [];
+        }
+        result[key].push(item);
+    }
+    return result;
+}
+
+export { groupBy };
Index: node_modules/es-toolkit/dist/array/head.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/head.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/head.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+/**
+ * Returns the first element of an array.
+ *
+ * This function takes an array and returns the first element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[T, ...T[]]} arr - A non-empty array from which to get the first element.
+ * @returns {T} The first element of the array.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const firstElement = head(arr);
+ * // firstElement will be 1
+ */
+declare function head<T>(arr: readonly [T, ...T[]]): T;
+/**
+ * Returns the first element of an array or `undefined` if the array is empty.
+ *
+ * This function takes an array and returns the first element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to get the first element.
+ * @returns {T | undefined} The first element of the array, or `undefined` if the array is empty.
+ *
+ * @example
+ * const emptyArr: number[] = [];
+ * const noElement = head(emptyArr);
+ * // noElement will be undefined
+ */
+declare function head<T>(arr: readonly T[]): T | undefined;
+
+export { head };
Index: node_modules/es-toolkit/dist/array/head.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/head.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/head.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+/**
+ * Returns the first element of an array.
+ *
+ * This function takes an array and returns the first element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[T, ...T[]]} arr - A non-empty array from which to get the first element.
+ * @returns {T} The first element of the array.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const firstElement = head(arr);
+ * // firstElement will be 1
+ */
+declare function head<T>(arr: readonly [T, ...T[]]): T;
+/**
+ * Returns the first element of an array or `undefined` if the array is empty.
+ *
+ * This function takes an array and returns the first element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to get the first element.
+ * @returns {T | undefined} The first element of the array, or `undefined` if the array is empty.
+ *
+ * @example
+ * const emptyArr: number[] = [];
+ * const noElement = head(emptyArr);
+ * // noElement will be undefined
+ */
+declare function head<T>(arr: readonly T[]): T | undefined;
+
+export { head };
Index: node_modules/es-toolkit/dist/array/head.js
===================================================================
--- node_modules/es-toolkit/dist/array/head.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/head.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function head(arr) {
+    return arr[0];
+}
+
+exports.head = head;
Index: node_modules/es-toolkit/dist/array/head.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/head.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/head.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function head(arr) {
+    return arr[0];
+}
+
+export { head };
Index: node_modules/es-toolkit/dist/array/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+export { at } from './at.mjs';
+export { chunk } from './chunk.mjs';
+export { compact } from './compact.mjs';
+export { countBy } from './countBy.mjs';
+export { difference } from './difference.mjs';
+export { differenceBy } from './differenceBy.mjs';
+export { differenceWith } from './differenceWith.mjs';
+export { drop } from './drop.mjs';
+export { dropRight } from './dropRight.mjs';
+export { dropRightWhile } from './dropRightWhile.mjs';
+export { dropWhile } from './dropWhile.mjs';
+export { fill } from './fill.mjs';
+export { flatMap } from './flatMap.mjs';
+export { flatMapDeep } from './flatMapDeep.mjs';
+export { flatten } from './flatten.mjs';
+export { flattenDeep } from './flattenDeep.mjs';
+export { forEachRight } from './forEachRight.mjs';
+export { groupBy } from './groupBy.mjs';
+export { head } from './head.mjs';
+export { initial } from './initial.mjs';
+export { intersection } from './intersection.mjs';
+export { intersectionBy } from './intersectionBy.mjs';
+export { intersectionWith } from './intersectionWith.mjs';
+export { isSubset } from './isSubset.mjs';
+export { isSubsetWith } from './isSubsetWith.mjs';
+export { keyBy } from './keyBy.mjs';
+export { last } from './last.mjs';
+export { maxBy } from './maxBy.mjs';
+export { minBy } from './minBy.mjs';
+export { orderBy } from './orderBy.mjs';
+export { partition } from './partition.mjs';
+export { pull } from './pull.mjs';
+export { pullAt } from './pullAt.mjs';
+export { remove } from './remove.mjs';
+export { sample } from './sample.mjs';
+export { sampleSize } from './sampleSize.mjs';
+export { shuffle } from './shuffle.mjs';
+export { sortBy } from './sortBy.mjs';
+export { tail } from './tail.mjs';
+export { take } from './take.mjs';
+export { takeRight } from './takeRight.mjs';
+export { takeRightWhile } from './takeRightWhile.mjs';
+export { takeWhile } from './takeWhile.mjs';
+export { toFilled } from './toFilled.mjs';
+export { union } from './union.mjs';
+export { unionBy } from './unionBy.mjs';
+export { unionWith } from './unionWith.mjs';
+export { uniq } from './uniq.mjs';
+export { uniqBy } from './uniqBy.mjs';
+export { uniqWith } from './uniqWith.mjs';
+export { unzip } from './unzip.mjs';
+export { unzipWith } from './unzipWith.mjs';
+export { windowed } from './windowed.mjs';
+export { without } from './without.mjs';
+export { xor } from './xor.mjs';
+export { xorBy } from './xorBy.mjs';
+export { xorWith } from './xorWith.mjs';
+export { zip } from './zip.mjs';
+export { zipObject } from './zipObject.mjs';
+export { zipWith } from './zipWith.mjs';
Index: node_modules/es-toolkit/dist/array/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+export { at } from './at.js';
+export { chunk } from './chunk.js';
+export { compact } from './compact.js';
+export { countBy } from './countBy.js';
+export { difference } from './difference.js';
+export { differenceBy } from './differenceBy.js';
+export { differenceWith } from './differenceWith.js';
+export { drop } from './drop.js';
+export { dropRight } from './dropRight.js';
+export { dropRightWhile } from './dropRightWhile.js';
+export { dropWhile } from './dropWhile.js';
+export { fill } from './fill.js';
+export { flatMap } from './flatMap.js';
+export { flatMapDeep } from './flatMapDeep.js';
+export { flatten } from './flatten.js';
+export { flattenDeep } from './flattenDeep.js';
+export { forEachRight } from './forEachRight.js';
+export { groupBy } from './groupBy.js';
+export { head } from './head.js';
+export { initial } from './initial.js';
+export { intersection } from './intersection.js';
+export { intersectionBy } from './intersectionBy.js';
+export { intersectionWith } from './intersectionWith.js';
+export { isSubset } from './isSubset.js';
+export { isSubsetWith } from './isSubsetWith.js';
+export { keyBy } from './keyBy.js';
+export { last } from './last.js';
+export { maxBy } from './maxBy.js';
+export { minBy } from './minBy.js';
+export { orderBy } from './orderBy.js';
+export { partition } from './partition.js';
+export { pull } from './pull.js';
+export { pullAt } from './pullAt.js';
+export { remove } from './remove.js';
+export { sample } from './sample.js';
+export { sampleSize } from './sampleSize.js';
+export { shuffle } from './shuffle.js';
+export { sortBy } from './sortBy.js';
+export { tail } from './tail.js';
+export { take } from './take.js';
+export { takeRight } from './takeRight.js';
+export { takeRightWhile } from './takeRightWhile.js';
+export { takeWhile } from './takeWhile.js';
+export { toFilled } from './toFilled.js';
+export { union } from './union.js';
+export { unionBy } from './unionBy.js';
+export { unionWith } from './unionWith.js';
+export { uniq } from './uniq.js';
+export { uniqBy } from './uniqBy.js';
+export { uniqWith } from './uniqWith.js';
+export { unzip } from './unzip.js';
+export { unzipWith } from './unzipWith.js';
+export { windowed } from './windowed.js';
+export { without } from './without.js';
+export { xor } from './xor.js';
+export { xorBy } from './xorBy.js';
+export { xorWith } from './xorWith.js';
+export { zip } from './zip.js';
+export { zipObject } from './zipObject.js';
+export { zipWith } from './zipWith.js';
Index: node_modules/es-toolkit/dist/array/index.js
===================================================================
--- node_modules/es-toolkit/dist/array/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,127 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const at = require('./at.js');
+const chunk = require('./chunk.js');
+const compact = require('./compact.js');
+const countBy = require('./countBy.js');
+const difference = require('./difference.js');
+const differenceBy = require('./differenceBy.js');
+const differenceWith = require('./differenceWith.js');
+const drop = require('./drop.js');
+const dropRight = require('./dropRight.js');
+const dropRightWhile = require('./dropRightWhile.js');
+const dropWhile = require('./dropWhile.js');
+const fill = require('./fill.js');
+const flatMap = require('./flatMap.js');
+const flatMapDeep = require('./flatMapDeep.js');
+const flatten = require('./flatten.js');
+const flattenDeep = require('./flattenDeep.js');
+const forEachRight = require('./forEachRight.js');
+const groupBy = require('./groupBy.js');
+const head = require('./head.js');
+const initial = require('./initial.js');
+const intersection = require('./intersection.js');
+const intersectionBy = require('./intersectionBy.js');
+const intersectionWith = require('./intersectionWith.js');
+const isSubset = require('./isSubset.js');
+const isSubsetWith = require('./isSubsetWith.js');
+const keyBy = require('./keyBy.js');
+const last = require('./last.js');
+const maxBy = require('./maxBy.js');
+const minBy = require('./minBy.js');
+const orderBy = require('./orderBy.js');
+const partition = require('./partition.js');
+const pull = require('./pull.js');
+const pullAt = require('./pullAt.js');
+const remove = require('./remove.js');
+const sample = require('./sample.js');
+const sampleSize = require('./sampleSize.js');
+const shuffle = require('./shuffle.js');
+const sortBy = require('./sortBy.js');
+const tail = require('./tail.js');
+const take = require('./take.js');
+const takeRight = require('./takeRight.js');
+const takeRightWhile = require('./takeRightWhile.js');
+const takeWhile = require('./takeWhile.js');
+const toFilled = require('./toFilled.js');
+const union = require('./union.js');
+const unionBy = require('./unionBy.js');
+const unionWith = require('./unionWith.js');
+const uniq = require('./uniq.js');
+const uniqBy = require('./uniqBy.js');
+const uniqWith = require('./uniqWith.js');
+const unzip = require('./unzip.js');
+const unzipWith = require('./unzipWith.js');
+const windowed = require('./windowed.js');
+const without = require('./without.js');
+const xor = require('./xor.js');
+const xorBy = require('./xorBy.js');
+const xorWith = require('./xorWith.js');
+const zip = require('./zip.js');
+const zipObject = require('./zipObject.js');
+const zipWith = require('./zipWith.js');
+
+
+
+exports.at = at.at;
+exports.chunk = chunk.chunk;
+exports.compact = compact.compact;
+exports.countBy = countBy.countBy;
+exports.difference = difference.difference;
+exports.differenceBy = differenceBy.differenceBy;
+exports.differenceWith = differenceWith.differenceWith;
+exports.drop = drop.drop;
+exports.dropRight = dropRight.dropRight;
+exports.dropRightWhile = dropRightWhile.dropRightWhile;
+exports.dropWhile = dropWhile.dropWhile;
+exports.fill = fill.fill;
+exports.flatMap = flatMap.flatMap;
+exports.flatMapDeep = flatMapDeep.flatMapDeep;
+exports.flatten = flatten.flatten;
+exports.flattenDeep = flattenDeep.flattenDeep;
+exports.forEachRight = forEachRight.forEachRight;
+exports.groupBy = groupBy.groupBy;
+exports.head = head.head;
+exports.initial = initial.initial;
+exports.intersection = intersection.intersection;
+exports.intersectionBy = intersectionBy.intersectionBy;
+exports.intersectionWith = intersectionWith.intersectionWith;
+exports.isSubset = isSubset.isSubset;
+exports.isSubsetWith = isSubsetWith.isSubsetWith;
+exports.keyBy = keyBy.keyBy;
+exports.last = last.last;
+exports.maxBy = maxBy.maxBy;
+exports.minBy = minBy.minBy;
+exports.orderBy = orderBy.orderBy;
+exports.partition = partition.partition;
+exports.pull = pull.pull;
+exports.pullAt = pullAt.pullAt;
+exports.remove = remove.remove;
+exports.sample = sample.sample;
+exports.sampleSize = sampleSize.sampleSize;
+exports.shuffle = shuffle.shuffle;
+exports.sortBy = sortBy.sortBy;
+exports.tail = tail.tail;
+exports.take = take.take;
+exports.takeRight = takeRight.takeRight;
+exports.takeRightWhile = takeRightWhile.takeRightWhile;
+exports.takeWhile = takeWhile.takeWhile;
+exports.toFilled = toFilled.toFilled;
+exports.union = union.union;
+exports.unionBy = unionBy.unionBy;
+exports.unionWith = unionWith.unionWith;
+exports.uniq = uniq.uniq;
+exports.uniqBy = uniqBy.uniqBy;
+exports.uniqWith = uniqWith.uniqWith;
+exports.unzip = unzip.unzip;
+exports.unzipWith = unzipWith.unzipWith;
+exports.windowed = windowed.windowed;
+exports.without = without.without;
+exports.xor = xor.xor;
+exports.xorBy = xorBy.xorBy;
+exports.xorWith = xorWith.xorWith;
+exports.zip = zip.zip;
+exports.zipObject = zipObject.zipObject;
+exports.zipWith = zipWith.zipWith;
Index: node_modules/es-toolkit/dist/array/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+export { at } from './at.mjs';
+export { chunk } from './chunk.mjs';
+export { compact } from './compact.mjs';
+export { countBy } from './countBy.mjs';
+export { difference } from './difference.mjs';
+export { differenceBy } from './differenceBy.mjs';
+export { differenceWith } from './differenceWith.mjs';
+export { drop } from './drop.mjs';
+export { dropRight } from './dropRight.mjs';
+export { dropRightWhile } from './dropRightWhile.mjs';
+export { dropWhile } from './dropWhile.mjs';
+export { fill } from './fill.mjs';
+export { flatMap } from './flatMap.mjs';
+export { flatMapDeep } from './flatMapDeep.mjs';
+export { flatten } from './flatten.mjs';
+export { flattenDeep } from './flattenDeep.mjs';
+export { forEachRight } from './forEachRight.mjs';
+export { groupBy } from './groupBy.mjs';
+export { head } from './head.mjs';
+export { initial } from './initial.mjs';
+export { intersection } from './intersection.mjs';
+export { intersectionBy } from './intersectionBy.mjs';
+export { intersectionWith } from './intersectionWith.mjs';
+export { isSubset } from './isSubset.mjs';
+export { isSubsetWith } from './isSubsetWith.mjs';
+export { keyBy } from './keyBy.mjs';
+export { last } from './last.mjs';
+export { maxBy } from './maxBy.mjs';
+export { minBy } from './minBy.mjs';
+export { orderBy } from './orderBy.mjs';
+export { partition } from './partition.mjs';
+export { pull } from './pull.mjs';
+export { pullAt } from './pullAt.mjs';
+export { remove } from './remove.mjs';
+export { sample } from './sample.mjs';
+export { sampleSize } from './sampleSize.mjs';
+export { shuffle } from './shuffle.mjs';
+export { sortBy } from './sortBy.mjs';
+export { tail } from './tail.mjs';
+export { take } from './take.mjs';
+export { takeRight } from './takeRight.mjs';
+export { takeRightWhile } from './takeRightWhile.mjs';
+export { takeWhile } from './takeWhile.mjs';
+export { toFilled } from './toFilled.mjs';
+export { union } from './union.mjs';
+export { unionBy } from './unionBy.mjs';
+export { unionWith } from './unionWith.mjs';
+export { uniq } from './uniq.mjs';
+export { uniqBy } from './uniqBy.mjs';
+export { uniqWith } from './uniqWith.mjs';
+export { unzip } from './unzip.mjs';
+export { unzipWith } from './unzipWith.mjs';
+export { windowed } from './windowed.mjs';
+export { without } from './without.mjs';
+export { xor } from './xor.mjs';
+export { xorBy } from './xorBy.mjs';
+export { xorWith } from './xorWith.mjs';
+export { zip } from './zip.mjs';
+export { zipObject } from './zipObject.mjs';
+export { zipWith } from './zipWith.mjs';
Index: node_modules/es-toolkit/dist/array/initial.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/initial.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/initial.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+/**
+ * Returns an empty array when the input is a tuple containing exactly one element.
+ *
+ * @template T The type of the single element.
+ * @param {[T]} arr - A tuple containing exactly one element.
+ * @returns {[]} An empty array since there is only one element.
+ *
+ * @example
+ * const array = [100] as const;
+ * const result = initial(array);
+ * // result will be []
+ */
+declare function initial<T>(arr: readonly [T]): [];
+/**
+ * Returns an empty array when the input array is empty.
+ *
+ * @returns {[]} Always returns an empty array for an empty input.
+ *
+ * @example
+ * const array = [] as const;
+ * const result = initial(array);
+ * // result will be []
+ */
+declare function initial(arr: readonly []): [];
+/**
+ * Returns a new array containing all elements except the last one from a tuple with multiple elements.
+ *
+ * @template T The types of the initial elements.
+ * @template U The type of the last element in the tuple.
+ * @param {[...T[], U]} arr - A tuple with one or more elements.
+ * @returns {T[]} A new array containing all but the last element of the tuple.
+ *
+ * @example
+ * const array = ['apple', 'banana', 'cherry'] as const;
+ * const result = initial(array);
+ * // result will be ['apple', 'banana']
+ */
+declare function initial<T, U>(arr: readonly [...T[], U]): T[];
+/**
+ * Returns a new array containing all elements except the last one from the input array.
+ * If the input array is empty or has only one element, the function returns an empty array.
+ *
+ * @template T The type of elements in the array.
+ * @param {T[]} arr - The input array.
+ * @returns {T[]} A new array containing all but the last element of the input array.
+ *
+ * @example
+ * const arr = [1, 2, 3, 4];
+ * const result = initial(arr);
+ * // result will be [1, 2, 3]
+ */
+declare function initial<T>(arr: readonly T[]): T[];
+
+export { initial };
Index: node_modules/es-toolkit/dist/array/initial.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/initial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/initial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+/**
+ * Returns an empty array when the input is a tuple containing exactly one element.
+ *
+ * @template T The type of the single element.
+ * @param {[T]} arr - A tuple containing exactly one element.
+ * @returns {[]} An empty array since there is only one element.
+ *
+ * @example
+ * const array = [100] as const;
+ * const result = initial(array);
+ * // result will be []
+ */
+declare function initial<T>(arr: readonly [T]): [];
+/**
+ * Returns an empty array when the input array is empty.
+ *
+ * @returns {[]} Always returns an empty array for an empty input.
+ *
+ * @example
+ * const array = [] as const;
+ * const result = initial(array);
+ * // result will be []
+ */
+declare function initial(arr: readonly []): [];
+/**
+ * Returns a new array containing all elements except the last one from a tuple with multiple elements.
+ *
+ * @template T The types of the initial elements.
+ * @template U The type of the last element in the tuple.
+ * @param {[...T[], U]} arr - A tuple with one or more elements.
+ * @returns {T[]} A new array containing all but the last element of the tuple.
+ *
+ * @example
+ * const array = ['apple', 'banana', 'cherry'] as const;
+ * const result = initial(array);
+ * // result will be ['apple', 'banana']
+ */
+declare function initial<T, U>(arr: readonly [...T[], U]): T[];
+/**
+ * Returns a new array containing all elements except the last one from the input array.
+ * If the input array is empty or has only one element, the function returns an empty array.
+ *
+ * @template T The type of elements in the array.
+ * @param {T[]} arr - The input array.
+ * @returns {T[]} A new array containing all but the last element of the input array.
+ *
+ * @example
+ * const arr = [1, 2, 3, 4];
+ * const result = initial(arr);
+ * // result will be [1, 2, 3]
+ */
+declare function initial<T>(arr: readonly T[]): T[];
+
+export { initial };
Index: node_modules/es-toolkit/dist/array/initial.js
===================================================================
--- node_modules/es-toolkit/dist/array/initial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/initial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function initial(arr) {
+    return arr.slice(0, -1);
+}
+
+exports.initial = initial;
Index: node_modules/es-toolkit/dist/array/initial.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/initial.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/initial.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function initial(arr) {
+    return arr.slice(0, -1);
+}
+
+export { initial };
Index: node_modules/es-toolkit/dist/array/intersection.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/intersection.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersection.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Returns the intersection of two arrays.
+ *
+ * This function takes two arrays and returns a new array containing the elements that are
+ * present in both arrays. It effectively filters out any elements from the first array that
+ * are not found in the second array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} firstArr - The first array to compare.
+ * @param {T[]} secondArr - The second array to compare.
+ * @returns {T[]} A new array containing the elements that are present in both arrays.
+ *
+ * @example
+ * const array1 = [1, 2, 3, 4, 5];
+ * const array2 = [3, 4, 5, 6, 7];
+ * const result = intersection(array1, array2);
+ * // result will be [3, 4, 5] since these elements are in both arrays.
+ */
+declare function intersection<T>(firstArr: readonly T[], secondArr: readonly T[]): T[];
+
+export { intersection };
Index: node_modules/es-toolkit/dist/array/intersection.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/intersection.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersection.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Returns the intersection of two arrays.
+ *
+ * This function takes two arrays and returns a new array containing the elements that are
+ * present in both arrays. It effectively filters out any elements from the first array that
+ * are not found in the second array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} firstArr - The first array to compare.
+ * @param {T[]} secondArr - The second array to compare.
+ * @returns {T[]} A new array containing the elements that are present in both arrays.
+ *
+ * @example
+ * const array1 = [1, 2, 3, 4, 5];
+ * const array2 = [3, 4, 5, 6, 7];
+ * const result = intersection(array1, array2);
+ * // result will be [3, 4, 5] since these elements are in both arrays.
+ */
+declare function intersection<T>(firstArr: readonly T[], secondArr: readonly T[]): T[];
+
+export { intersection };
Index: node_modules/es-toolkit/dist/array/intersection.js
===================================================================
--- node_modules/es-toolkit/dist/array/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function intersection(firstArr, secondArr) {
+    const secondSet = new Set(secondArr);
+    return firstArr.filter(item => {
+        return secondSet.has(item);
+    });
+}
+
+exports.intersection = intersection;
Index: node_modules/es-toolkit/dist/array/intersection.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/intersection.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersection.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function intersection(firstArr, secondArr) {
+    const secondSet = new Set(secondArr);
+    return firstArr.filter(item => {
+        return secondSet.has(item);
+    });
+}
+
+export { intersection };
Index: node_modules/es-toolkit/dist/array/intersectionBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/intersectionBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersectionBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+/**
+ * Returns the intersection of two arrays based on a mapping function.
+ *
+ * This function takes two arrays and a mapping function. It returns a new array containing
+ * the elements from the first array that, when mapped using the provided function, have matching
+ * mapped elements in the second array. It effectively filters out any elements from the first array
+ * that do not have corresponding mapped values in the second array.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @param {T[]} firstArr - The first array to compare.
+ * @param {U[]} secondArr - The second array to compare.
+ * @param {(item: T | U) => unknown} mapper - A function to map the elements of both arrays for comparison.
+ * @returns {T[]} A new array containing the elements from the first array that have corresponding mapped values in the second array.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [{ id: 2 }, { id: 4 }];
+ * const mapper = item => item.id;
+ * const result = intersectionBy(array1, array2, mapper);
+ * // result will be [{ id: 2 }] since only this element has a matching id in both arrays.
+ *
+ * @example
+ * const array1 = [
+ *   { id: 1, name: 'jane' },
+ *   { id: 2, name: 'amy' },
+ *   { id: 3, name: 'michael' },
+ * ];
+ * const array2 = [2, 4];
+ * const mapper = item => (typeof item === 'object' ? item.id : item);
+ * const result = intersectionBy(array1, array2, mapper);
+ * // result will be [{ id: 2, name: 'amy' }] since only this element has a matching id that is equal to seconds array's element.
+ */
+declare function intersectionBy<T, U>(firstArr: readonly T[], secondArr: readonly U[], mapper: (item: T | U) => unknown): T[];
+
+export { intersectionBy };
Index: node_modules/es-toolkit/dist/array/intersectionBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/intersectionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersectionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+/**
+ * Returns the intersection of two arrays based on a mapping function.
+ *
+ * This function takes two arrays and a mapping function. It returns a new array containing
+ * the elements from the first array that, when mapped using the provided function, have matching
+ * mapped elements in the second array. It effectively filters out any elements from the first array
+ * that do not have corresponding mapped values in the second array.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @param {T[]} firstArr - The first array to compare.
+ * @param {U[]} secondArr - The second array to compare.
+ * @param {(item: T | U) => unknown} mapper - A function to map the elements of both arrays for comparison.
+ * @returns {T[]} A new array containing the elements from the first array that have corresponding mapped values in the second array.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [{ id: 2 }, { id: 4 }];
+ * const mapper = item => item.id;
+ * const result = intersectionBy(array1, array2, mapper);
+ * // result will be [{ id: 2 }] since only this element has a matching id in both arrays.
+ *
+ * @example
+ * const array1 = [
+ *   { id: 1, name: 'jane' },
+ *   { id: 2, name: 'amy' },
+ *   { id: 3, name: 'michael' },
+ * ];
+ * const array2 = [2, 4];
+ * const mapper = item => (typeof item === 'object' ? item.id : item);
+ * const result = intersectionBy(array1, array2, mapper);
+ * // result will be [{ id: 2, name: 'amy' }] since only this element has a matching id that is equal to seconds array's element.
+ */
+declare function intersectionBy<T, U>(firstArr: readonly T[], secondArr: readonly U[], mapper: (item: T | U) => unknown): T[];
+
+export { intersectionBy };
Index: node_modules/es-toolkit/dist/array/intersectionBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/intersectionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersectionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function intersectionBy(firstArr, secondArr, mapper) {
+    const mappedSecondSet = new Set(secondArr.map(mapper));
+    return firstArr.filter(item => mappedSecondSet.has(mapper(item)));
+}
+
+exports.intersectionBy = intersectionBy;
Index: node_modules/es-toolkit/dist/array/intersectionBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/intersectionBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersectionBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+function intersectionBy(firstArr, secondArr, mapper) {
+    const mappedSecondSet = new Set(secondArr.map(mapper));
+    return firstArr.filter(item => mappedSecondSet.has(mapper(item)));
+}
+
+export { intersectionBy };
Index: node_modules/es-toolkit/dist/array/intersectionWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/intersectionWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersectionWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+/**
+ * Returns the intersection of two arrays based on a custom equality function.
+ *
+ * This function takes two arrays and a custom equality function. It returns a new array containing
+ * the elements from the first array that have matching elements in the second array, as determined
+ * by the custom equality function. It effectively filters out any elements from the first array that
+ * do not have corresponding matches in the second array according to the equality function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @param {T[]} firstArr - The first array to compare.
+ * @param {U[]} secondArr - The second array to compare.
+ * @param {(x: T, y: U) => boolean} areItemsEqual - A custom function to determine if two elements are equal.
+ * This function takes two arguments, one from each array, and returns `true` if the elements are considered equal, and `false` otherwise.
+ * @returns {T[]} A new array containing the elements from the first array that have corresponding matches in the second array according to the custom equality function.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [{ id: 2 }, { id: 4 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * const result = intersectionWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 2 }] since this element has a matching id in both arrays.
+ *
+ * @example
+ * const array1 = [
+ *   { id: 1, name: 'jane' },
+ *   { id: 2, name: 'amy' },
+ *   { id: 3, name: 'michael' },
+ * ];
+ * const array2 = [2, 4];
+ * const areItemsEqual = (a, b) => a.id === b;
+ * const result = intersectionWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 2, name: 'amy' }] since this element has a matching id that is equal to seconds array's element.
+ */
+declare function intersectionWith<T, U>(firstArr: readonly T[], secondArr: readonly U[], areItemsEqual: (x: T, y: U) => boolean): T[];
+
+export { intersectionWith };
Index: node_modules/es-toolkit/dist/array/intersectionWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/intersectionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersectionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+/**
+ * Returns the intersection of two arrays based on a custom equality function.
+ *
+ * This function takes two arrays and a custom equality function. It returns a new array containing
+ * the elements from the first array that have matching elements in the second array, as determined
+ * by the custom equality function. It effectively filters out any elements from the first array that
+ * do not have corresponding matches in the second array according to the equality function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @param {T[]} firstArr - The first array to compare.
+ * @param {U[]} secondArr - The second array to compare.
+ * @param {(x: T, y: U) => boolean} areItemsEqual - A custom function to determine if two elements are equal.
+ * This function takes two arguments, one from each array, and returns `true` if the elements are considered equal, and `false` otherwise.
+ * @returns {T[]} A new array containing the elements from the first array that have corresponding matches in the second array according to the custom equality function.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const array2 = [{ id: 2 }, { id: 4 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * const result = intersectionWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 2 }] since this element has a matching id in both arrays.
+ *
+ * @example
+ * const array1 = [
+ *   { id: 1, name: 'jane' },
+ *   { id: 2, name: 'amy' },
+ *   { id: 3, name: 'michael' },
+ * ];
+ * const array2 = [2, 4];
+ * const areItemsEqual = (a, b) => a.id === b;
+ * const result = intersectionWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 2, name: 'amy' }] since this element has a matching id that is equal to seconds array's element.
+ */
+declare function intersectionWith<T, U>(firstArr: readonly T[], secondArr: readonly U[], areItemsEqual: (x: T, y: U) => boolean): T[];
+
+export { intersectionWith };
Index: node_modules/es-toolkit/dist/array/intersectionWith.js
===================================================================
--- node_modules/es-toolkit/dist/array/intersectionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersectionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function intersectionWith(firstArr, secondArr, areItemsEqual) {
+    return firstArr.filter(firstItem => {
+        return secondArr.some(secondItem => {
+            return areItemsEqual(firstItem, secondItem);
+        });
+    });
+}
+
+exports.intersectionWith = intersectionWith;
Index: node_modules/es-toolkit/dist/array/intersectionWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/intersectionWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/intersectionWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+function intersectionWith(firstArr, secondArr, areItemsEqual) {
+    return firstArr.filter(firstItem => {
+        return secondArr.some(secondItem => {
+            return areItemsEqual(firstItem, secondItem);
+        });
+    });
+}
+
+export { intersectionWith };
Index: node_modules/es-toolkit/dist/array/isSubset.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/isSubset.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/isSubset.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Checks if the `subset` array is entirely contained within the `superset` array.
+ *
+ *
+ * @template T - The type of elements contained in the arrays.
+ * @param {T[]} superset - The array that may contain all elements of the subset.
+ * @param {T[]} subset - The array to check against the superset.
+ * @returns {boolean} - Returns `true` if all elements of the `subset` are present in the `superset`, otherwise returns `false`.
+ *
+ * @example
+ * ```typescript
+ * const superset = [1, 2, 3, 4, 5];
+ * const subset = [2, 3, 4];
+ * isSubset(superset, subset); // true
+ * ```
+ *
+ * @example
+ * ```typescript
+ * const superset = ['a', 'b', 'c'];
+ * const subset = ['a', 'd'];
+ * isSubset(superset, subset); // false
+ * ```
+ */
+declare function isSubset<T>(superset: readonly T[], subset: readonly T[]): boolean;
+
+export { isSubset };
Index: node_modules/es-toolkit/dist/array/isSubset.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/isSubset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/isSubset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Checks if the `subset` array is entirely contained within the `superset` array.
+ *
+ *
+ * @template T - The type of elements contained in the arrays.
+ * @param {T[]} superset - The array that may contain all elements of the subset.
+ * @param {T[]} subset - The array to check against the superset.
+ * @returns {boolean} - Returns `true` if all elements of the `subset` are present in the `superset`, otherwise returns `false`.
+ *
+ * @example
+ * ```typescript
+ * const superset = [1, 2, 3, 4, 5];
+ * const subset = [2, 3, 4];
+ * isSubset(superset, subset); // true
+ * ```
+ *
+ * @example
+ * ```typescript
+ * const superset = ['a', 'b', 'c'];
+ * const subset = ['a', 'd'];
+ * isSubset(superset, subset); // false
+ * ```
+ */
+declare function isSubset<T>(superset: readonly T[], subset: readonly T[]): boolean;
+
+export { isSubset };
Index: node_modules/es-toolkit/dist/array/isSubset.js
===================================================================
--- node_modules/es-toolkit/dist/array/isSubset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/isSubset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const difference = require('./difference.js');
+
+function isSubset(superset, subset) {
+    return difference.difference(subset, superset).length === 0;
+}
+
+exports.isSubset = isSubset;
Index: node_modules/es-toolkit/dist/array/isSubset.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/isSubset.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/isSubset.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { difference } from './difference.mjs';
+
+function isSubset(superset, subset) {
+    return difference(subset, superset).length === 0;
+}
+
+export { isSubset };
Index: node_modules/es-toolkit/dist/array/isSubsetWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/isSubsetWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/isSubsetWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Checks if the `subset` array is entirely contained within the `superset` array based on a custom equality function.
+ *
+ * This function takes two arrays and a custom comparison function. It returns a boolean indicating
+ * whether all elements in the subset array are present in the superset array, as determined by the provided
+ * custom equality function.
+ *
+ * @template T - The type of elements contained in the arrays.
+ * @param {T[]} superset - The array that may contain all elements of the subset.
+ * @param {T[]} subset - The array to check against the superset.
+ * @param {(x: T, y: T) => boolean} areItemsEqual - A function to determine if two items are equal.
+ * @returns {boolean} - Returns `true` if all elements of the subset are present in the superset
+ * according to the custom equality function, otherwise returns `false`.
+ *
+ * @example
+ * ```typescript
+ * const superset = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const subset = [{ id: 2 }, { id: 1 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * isSubsetWith(superset, subset, areItemsEqual); // true
+ * ```
+ *
+ * @example
+ * ```typescript
+ * const superset = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const subset = [{ id: 4 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * isSubsetWith(superset, subset, areItemsEqual); // false
+ * ```
+ */
+declare function isSubsetWith<T>(superset: readonly T[], subset: readonly T[], areItemsEqual: (x: T, y: T) => boolean): boolean;
+
+export { isSubsetWith };
Index: node_modules/es-toolkit/dist/array/isSubsetWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/isSubsetWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/isSubsetWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Checks if the `subset` array is entirely contained within the `superset` array based on a custom equality function.
+ *
+ * This function takes two arrays and a custom comparison function. It returns a boolean indicating
+ * whether all elements in the subset array are present in the superset array, as determined by the provided
+ * custom equality function.
+ *
+ * @template T - The type of elements contained in the arrays.
+ * @param {T[]} superset - The array that may contain all elements of the subset.
+ * @param {T[]} subset - The array to check against the superset.
+ * @param {(x: T, y: T) => boolean} areItemsEqual - A function to determine if two items are equal.
+ * @returns {boolean} - Returns `true` if all elements of the subset are present in the superset
+ * according to the custom equality function, otherwise returns `false`.
+ *
+ * @example
+ * ```typescript
+ * const superset = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const subset = [{ id: 2 }, { id: 1 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * isSubsetWith(superset, subset, areItemsEqual); // true
+ * ```
+ *
+ * @example
+ * ```typescript
+ * const superset = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const subset = [{ id: 4 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * isSubsetWith(superset, subset, areItemsEqual); // false
+ * ```
+ */
+declare function isSubsetWith<T>(superset: readonly T[], subset: readonly T[], areItemsEqual: (x: T, y: T) => boolean): boolean;
+
+export { isSubsetWith };
Index: node_modules/es-toolkit/dist/array/isSubsetWith.js
===================================================================
--- node_modules/es-toolkit/dist/array/isSubsetWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/isSubsetWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const differenceWith = require('./differenceWith.js');
+
+function isSubsetWith(superset, subset, areItemsEqual) {
+    return differenceWith.differenceWith(subset, superset, areItemsEqual).length === 0;
+}
+
+exports.isSubsetWith = isSubsetWith;
Index: node_modules/es-toolkit/dist/array/isSubsetWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/isSubsetWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/isSubsetWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { differenceWith } from './differenceWith.mjs';
+
+function isSubsetWith(superset, subset, areItemsEqual) {
+    return differenceWith(subset, superset, areItemsEqual).length === 0;
+}
+
+export { isSubsetWith };
Index: node_modules/es-toolkit/dist/array/keyBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/keyBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/keyBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Maps each element of an array based on a provided key-generating function.
+ *
+ * This function takes an array and a function that generates a key from each element. It returns
+ * an object where the keys are the generated keys and the values are the corresponding elements.
+ * If there are multiple elements generating the same key, the last element among them is used
+ * as the value.
+ *
+ * @template T - The type of elements in the array.
+ * @template K - The type of keys.
+ * @param {T[]} arr - The array of elements to be mapped.
+ * @param {(item: T) => K} getKeyFromItem - A function that generates a key from an element.
+ * @returns {Record<K, T>} An object where keys are mapped to each element of an array.
+ *
+ * @example
+ * const array = [
+ *   { category: 'fruit', name: 'apple' },
+ *   { category: 'fruit', name: 'banana' },
+ *   { category: 'vegetable', name: 'carrot' }
+ * ];
+ * const result = keyBy(array, item => item.category);
+ * // result will be:
+ * // {
+ * //   fruit: { category: 'fruit', name: 'banana' },
+ * //   vegetable: { category: 'vegetable', name: 'carrot' }
+ * // }
+ */
+declare function keyBy<T, K extends PropertyKey>(arr: readonly T[], getKeyFromItem: (item: T) => K): Record<K, T>;
+
+export { keyBy };
Index: node_modules/es-toolkit/dist/array/keyBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/keyBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/keyBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Maps each element of an array based on a provided key-generating function.
+ *
+ * This function takes an array and a function that generates a key from each element. It returns
+ * an object where the keys are the generated keys and the values are the corresponding elements.
+ * If there are multiple elements generating the same key, the last element among them is used
+ * as the value.
+ *
+ * @template T - The type of elements in the array.
+ * @template K - The type of keys.
+ * @param {T[]} arr - The array of elements to be mapped.
+ * @param {(item: T) => K} getKeyFromItem - A function that generates a key from an element.
+ * @returns {Record<K, T>} An object where keys are mapped to each element of an array.
+ *
+ * @example
+ * const array = [
+ *   { category: 'fruit', name: 'apple' },
+ *   { category: 'fruit', name: 'banana' },
+ *   { category: 'vegetable', name: 'carrot' }
+ * ];
+ * const result = keyBy(array, item => item.category);
+ * // result will be:
+ * // {
+ * //   fruit: { category: 'fruit', name: 'banana' },
+ * //   vegetable: { category: 'vegetable', name: 'carrot' }
+ * // }
+ */
+declare function keyBy<T, K extends PropertyKey>(arr: readonly T[], getKeyFromItem: (item: T) => K): Record<K, T>;
+
+export { keyBy };
Index: node_modules/es-toolkit/dist/array/keyBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/keyBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/keyBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function keyBy(arr, getKeyFromItem) {
+    const result = {};
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const key = getKeyFromItem(item);
+        result[key] = item;
+    }
+    return result;
+}
+
+exports.keyBy = keyBy;
Index: node_modules/es-toolkit/dist/array/keyBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/keyBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/keyBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function keyBy(arr, getKeyFromItem) {
+    const result = {};
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const key = getKeyFromItem(item);
+        result[key] = item;
+    }
+    return result;
+}
+
+export { keyBy };
Index: node_modules/es-toolkit/dist/array/last.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/last.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/last.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+/**
+ * Returns the last element of an array.
+ *
+ * This function takes an array and returns the last element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * Unlike some implementations, this function is optimized for performance
+ * by directly accessing the last index of the array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[...T[], T]} arr - The array from which to get the last element.
+ * @returns {T} The last element of the array, or `undefined` if the array is empty.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const lastElement = last(arr);
+ * // lastElement will be 3
+ *
+ * const emptyArr: number[] = [];
+ * const noElement = last(emptyArr);
+ * // noElement will be undefined
+ */
+declare function last<T>(arr: readonly [...T[], T]): T;
+/**
+ * Returns the last element of an array.
+ *
+ * This function takes an array and returns the last element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * Unlike some implementations, this function is optimized for performance
+ * by directly accessing the last index of the array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to get the last element.
+ * @returns {T | undefined} The last element of the array, or `undefined` if the array is empty.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const lastElement = last(arr);
+ * // lastElement will be 3
+ *
+ * const emptyArr: number[] = [];
+ * const noElement = last(emptyArr);
+ * // noElement will be undefined
+ */
+declare function last<T>(arr: readonly T[]): T | undefined;
+
+export { last };
Index: node_modules/es-toolkit/dist/array/last.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/last.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/last.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+/**
+ * Returns the last element of an array.
+ *
+ * This function takes an array and returns the last element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * Unlike some implementations, this function is optimized for performance
+ * by directly accessing the last index of the array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[...T[], T]} arr - The array from which to get the last element.
+ * @returns {T} The last element of the array, or `undefined` if the array is empty.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const lastElement = last(arr);
+ * // lastElement will be 3
+ *
+ * const emptyArr: number[] = [];
+ * const noElement = last(emptyArr);
+ * // noElement will be undefined
+ */
+declare function last<T>(arr: readonly [...T[], T]): T;
+/**
+ * Returns the last element of an array.
+ *
+ * This function takes an array and returns the last element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * Unlike some implementations, this function is optimized for performance
+ * by directly accessing the last index of the array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array from which to get the last element.
+ * @returns {T | undefined} The last element of the array, or `undefined` if the array is empty.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const lastElement = last(arr);
+ * // lastElement will be 3
+ *
+ * const emptyArr: number[] = [];
+ * const noElement = last(emptyArr);
+ * // noElement will be undefined
+ */
+declare function last<T>(arr: readonly T[]): T | undefined;
+
+export { last };
Index: node_modules/es-toolkit/dist/array/last.js
===================================================================
--- node_modules/es-toolkit/dist/array/last.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/last.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function last(arr) {
+    return arr[arr.length - 1];
+}
+
+exports.last = last;
Index: node_modules/es-toolkit/dist/array/last.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/last.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/last.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function last(arr) {
+    return arr[arr.length - 1];
+}
+
+export { last };
Index: node_modules/es-toolkit/dist/array/maxBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/maxBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/maxBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Finds the element in an array that has the maximum value when applying
+ * the `getValue` function to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[T, ...T[]]} items The nonempty array of elements to search.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {T} The element with the maximum value as determined by the `getValue` function.
+ * @example
+ * maxBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 3 }
+ * maxBy([], x => x.a); // Returns: undefined
+ * maxBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'john', age: 30 }
+ */
+declare function maxBy<T>(items: readonly [T, ...T[]], getValue: (element: T) => number): T;
+/**
+ * Finds the element in an array that has the maximum value when applying
+ * the `getValue` function to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items The array of elements to search.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {T | undefined} The element with the maximum value as determined by the `getValue` function,
+ * or `undefined` if the array is empty.
+ * @example
+ * maxBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 3 }
+ * maxBy([], x => x.a); // Returns: undefined
+ * maxBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'john', age: 30 }
+ */
+declare function maxBy<T>(items: readonly T[], getValue: (element: T) => number): T | undefined;
+
+export { maxBy };
Index: node_modules/es-toolkit/dist/array/maxBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/maxBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/maxBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Finds the element in an array that has the maximum value when applying
+ * the `getValue` function to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[T, ...T[]]} items The nonempty array of elements to search.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {T} The element with the maximum value as determined by the `getValue` function.
+ * @example
+ * maxBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 3 }
+ * maxBy([], x => x.a); // Returns: undefined
+ * maxBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'john', age: 30 }
+ */
+declare function maxBy<T>(items: readonly [T, ...T[]], getValue: (element: T) => number): T;
+/**
+ * Finds the element in an array that has the maximum value when applying
+ * the `getValue` function to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items The array of elements to search.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {T | undefined} The element with the maximum value as determined by the `getValue` function,
+ * or `undefined` if the array is empty.
+ * @example
+ * maxBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 3 }
+ * maxBy([], x => x.a); // Returns: undefined
+ * maxBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'john', age: 30 }
+ */
+declare function maxBy<T>(items: readonly T[], getValue: (element: T) => number): T | undefined;
+
+export { maxBy };
Index: node_modules/es-toolkit/dist/array/maxBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/maxBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/maxBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function maxBy(items, getValue) {
+    if (items.length === 0) {
+        return undefined;
+    }
+    let maxElement = items[0];
+    let max = getValue(maxElement);
+    for (let i = 1; i < items.length; i++) {
+        const element = items[i];
+        const value = getValue(element);
+        if (value > max) {
+            max = value;
+            maxElement = element;
+        }
+    }
+    return maxElement;
+}
+
+exports.maxBy = maxBy;
Index: node_modules/es-toolkit/dist/array/maxBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/maxBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/maxBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+function maxBy(items, getValue) {
+    if (items.length === 0) {
+        return undefined;
+    }
+    let maxElement = items[0];
+    let max = getValue(maxElement);
+    for (let i = 1; i < items.length; i++) {
+        const element = items[i];
+        const value = getValue(element);
+        if (value > max) {
+            max = value;
+            maxElement = element;
+        }
+    }
+    return maxElement;
+}
+
+export { maxBy };
Index: node_modules/es-toolkit/dist/array/minBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/minBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/minBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Finds the element in an array that has the minimum value when applying
+ * the `getValue` function to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[T, ...T[]]} items The nonempty array of elements to search.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {T} The element with the minimum value as determined by the `getValue` function.
+ * @example
+ * minBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 1 }
+ * minBy([], x => x.a); // Returns: undefined
+ * minBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'joe', age: 26 }
+ */
+declare function minBy<T>(items: readonly [T, ...T[]], getValue: (element: T) => number): T;
+/**
+ * Finds the element in an array that has the minimum value when applying
+ * the `getValue` function to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items The array of elements to search.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {T | undefined} The element with the minimum value as determined by the `getValue` function,
+ * or `undefined` if the array is empty.
+ * @example
+ * minBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 1 }
+ * minBy([], x => x.a); // Returns: undefined
+ * minBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'joe', age: 26 }
+ */
+declare function minBy<T>(items: readonly T[], getValue: (element: T) => number): T | undefined;
+
+export { minBy };
Index: node_modules/es-toolkit/dist/array/minBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/minBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/minBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Finds the element in an array that has the minimum value when applying
+ * the `getValue` function to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[T, ...T[]]} items The nonempty array of elements to search.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {T} The element with the minimum value as determined by the `getValue` function.
+ * @example
+ * minBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 1 }
+ * minBy([], x => x.a); // Returns: undefined
+ * minBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'joe', age: 26 }
+ */
+declare function minBy<T>(items: readonly [T, ...T[]], getValue: (element: T) => number): T;
+/**
+ * Finds the element in an array that has the minimum value when applying
+ * the `getValue` function to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items The array of elements to search.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {T | undefined} The element with the minimum value as determined by the `getValue` function,
+ * or `undefined` if the array is empty.
+ * @example
+ * minBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 1 }
+ * minBy([], x => x.a); // Returns: undefined
+ * minBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'joe', age: 26 }
+ */
+declare function minBy<T>(items: readonly T[], getValue: (element: T) => number): T | undefined;
+
+export { minBy };
Index: node_modules/es-toolkit/dist/array/minBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/minBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/minBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function minBy(items, getValue) {
+    if (items.length === 0) {
+        return undefined;
+    }
+    let minElement = items[0];
+    let min = getValue(minElement);
+    for (let i = 1; i < items.length; i++) {
+        const element = items[i];
+        const value = getValue(element);
+        if (value < min) {
+            min = value;
+            minElement = element;
+        }
+    }
+    return minElement;
+}
+
+exports.minBy = minBy;
Index: node_modules/es-toolkit/dist/array/minBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/minBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/minBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+function minBy(items, getValue) {
+    if (items.length === 0) {
+        return undefined;
+    }
+    let minElement = items[0];
+    let min = getValue(minElement);
+    for (let i = 1; i < items.length; i++) {
+        const element = items[i];
+        const value = getValue(element);
+        if (value < min) {
+            min = value;
+            minElement = element;
+        }
+    }
+    return minElement;
+}
+
+export { minBy };
Index: node_modules/es-toolkit/dist/array/orderBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/orderBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/orderBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+/**
+ * Sorts an array of objects based on the given `criteria` and their corresponding order directions.
+ *
+ * - If you provide keys, it sorts the objects by the values of those keys.
+ * - If you provide functions, it sorts based on the values returned by those functions.
+ *
+ * The function returns the array of objects sorted in corresponding order directions.
+ * If two objects have the same value for the current criterion, it uses the next criterion to determine their order.
+ * If the number of orders is less than the number of criteria, it uses the last order for the rest of the criteria.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array of objects to be sorted.
+ * @param {Array<((item: T) => unknown) | keyof T>} criteria  - The criteria for sorting. This can be an array of object keys or functions that return values used for sorting.
+ * @param {Array<'asc' | 'desc'>} orders - An array of order directions ('asc' for ascending or 'desc' for descending).
+ * @returns {T[]} - The sorted array.
+ *
+ * @example
+ * // Sort an array of objects by 'user' in ascending order and 'age' in descending order.
+ * const users = [
+ *   { user: 'fred', age: 48 },
+ *   { user: 'barney', age: 34 },
+ *   { user: 'fred', age: 40 },
+ *   { user: 'barney', age: 36 },
+ * ];
+ *
+ * const result = orderBy(users, [obj => obj.user, 'age'], ['asc', 'desc']);
+ * // result will be:
+ * // [
+ * //   { user: 'barney', age: 36 },
+ * //   { user: 'barney', age: 34 },
+ * //   { user: 'fred', age: 48 },
+ * //   { user: 'fred', age: 40 },
+ * // ]
+ */
+declare function orderBy<T extends object>(arr: readonly T[], criteria: Array<((item: T) => unknown) | keyof T>, orders: Array<'asc' | 'desc'>): T[];
+
+export { orderBy };
Index: node_modules/es-toolkit/dist/array/orderBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/orderBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/orderBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+/**
+ * Sorts an array of objects based on the given `criteria` and their corresponding order directions.
+ *
+ * - If you provide keys, it sorts the objects by the values of those keys.
+ * - If you provide functions, it sorts based on the values returned by those functions.
+ *
+ * The function returns the array of objects sorted in corresponding order directions.
+ * If two objects have the same value for the current criterion, it uses the next criterion to determine their order.
+ * If the number of orders is less than the number of criteria, it uses the last order for the rest of the criteria.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array of objects to be sorted.
+ * @param {Array<((item: T) => unknown) | keyof T>} criteria  - The criteria for sorting. This can be an array of object keys or functions that return values used for sorting.
+ * @param {Array<'asc' | 'desc'>} orders - An array of order directions ('asc' for ascending or 'desc' for descending).
+ * @returns {T[]} - The sorted array.
+ *
+ * @example
+ * // Sort an array of objects by 'user' in ascending order and 'age' in descending order.
+ * const users = [
+ *   { user: 'fred', age: 48 },
+ *   { user: 'barney', age: 34 },
+ *   { user: 'fred', age: 40 },
+ *   { user: 'barney', age: 36 },
+ * ];
+ *
+ * const result = orderBy(users, [obj => obj.user, 'age'], ['asc', 'desc']);
+ * // result will be:
+ * // [
+ * //   { user: 'barney', age: 36 },
+ * //   { user: 'barney', age: 34 },
+ * //   { user: 'fred', age: 48 },
+ * //   { user: 'fred', age: 40 },
+ * // ]
+ */
+declare function orderBy<T extends object>(arr: readonly T[], criteria: Array<((item: T) => unknown) | keyof T>, orders: Array<'asc' | 'desc'>): T[];
+
+export { orderBy };
Index: node_modules/es-toolkit/dist/array/orderBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/orderBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/orderBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const compareValues = require('../_internal/compareValues.js');
+
+function orderBy(arr, criteria, orders) {
+    return arr.slice().sort((a, b) => {
+        const ordersLength = orders.length;
+        for (let i = 0; i < criteria.length; i++) {
+            const order = ordersLength > i ? orders[i] : orders[ordersLength - 1];
+            const criterion = criteria[i];
+            const criterionIsFunction = typeof criterion === 'function';
+            const valueA = criterionIsFunction ? criterion(a) : a[criterion];
+            const valueB = criterionIsFunction ? criterion(b) : b[criterion];
+            const result = compareValues.compareValues(valueA, valueB, order);
+            if (result !== 0) {
+                return result;
+            }
+        }
+        return 0;
+    });
+}
+
+exports.orderBy = orderBy;
Index: node_modules/es-toolkit/dist/array/orderBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/orderBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/orderBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { compareValues } from '../_internal/compareValues.mjs';
+
+function orderBy(arr, criteria, orders) {
+    return arr.slice().sort((a, b) => {
+        const ordersLength = orders.length;
+        for (let i = 0; i < criteria.length; i++) {
+            const order = ordersLength > i ? orders[i] : orders[ordersLength - 1];
+            const criterion = criteria[i];
+            const criterionIsFunction = typeof criterion === 'function';
+            const valueA = criterionIsFunction ? criterion(a) : a[criterion];
+            const valueB = criterionIsFunction ? criterion(b) : b[criterion];
+            const result = compareValues(valueA, valueB, order);
+            if (result !== 0) {
+                return result;
+            }
+        }
+        return 0;
+    });
+}
+
+export { orderBy };
Index: node_modules/es-toolkit/dist/array/partition.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/partition.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/partition.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Splits an array into two groups based on a predicate function.
+ *
+ * This function takes an array and a predicate function. It returns a tuple of two arrays:
+ * the first array contains elements for which the predicate function returns true, and
+ * the second array contains elements for which the predicate function returns false.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to partition.
+ * @param {(value: T) => boolean} isInTruthy - A predicate function that determines
+ * whether an element should be placed in the truthy array. The function is called with each
+ * element of the array.
+ * @returns {[T[], T[]]} A tuple containing two arrays: the first array contains elements for
+ * which the predicate returned true, and the second array contains elements for which the
+ * predicate returned false.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const isEven = x => x % 2 === 0;
+ * const [even, odd] = partition(array, isEven);
+ * // even will be [2, 4], and odd will be [1, 3, 5]
+ */
+declare function partition<T>(arr: readonly T[], isInTruthy: (value: T) => boolean): [truthy: T[], falsy: T[]];
+
+export { partition };
Index: node_modules/es-toolkit/dist/array/partition.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/partition.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/partition.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Splits an array into two groups based on a predicate function.
+ *
+ * This function takes an array and a predicate function. It returns a tuple of two arrays:
+ * the first array contains elements for which the predicate function returns true, and
+ * the second array contains elements for which the predicate function returns false.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to partition.
+ * @param {(value: T) => boolean} isInTruthy - A predicate function that determines
+ * whether an element should be placed in the truthy array. The function is called with each
+ * element of the array.
+ * @returns {[T[], T[]]} A tuple containing two arrays: the first array contains elements for
+ * which the predicate returned true, and the second array contains elements for which the
+ * predicate returned false.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const isEven = x => x % 2 === 0;
+ * const [even, odd] = partition(array, isEven);
+ * // even will be [2, 4], and odd will be [1, 3, 5]
+ */
+declare function partition<T>(arr: readonly T[], isInTruthy: (value: T) => boolean): [truthy: T[], falsy: T[]];
+
+export { partition };
Index: node_modules/es-toolkit/dist/array/partition.js
===================================================================
--- node_modules/es-toolkit/dist/array/partition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/partition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function partition(arr, isInTruthy) {
+    const truthy = [];
+    const falsy = [];
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        if (isInTruthy(item)) {
+            truthy.push(item);
+        }
+        else {
+            falsy.push(item);
+        }
+    }
+    return [truthy, falsy];
+}
+
+exports.partition = partition;
Index: node_modules/es-toolkit/dist/array/partition.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/partition.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/partition.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+function partition(arr, isInTruthy) {
+    const truthy = [];
+    const falsy = [];
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        if (isInTruthy(item)) {
+            truthy.push(item);
+        }
+        else {
+            falsy.push(item);
+        }
+    }
+    return [truthy, falsy];
+}
+
+export { partition };
Index: node_modules/es-toolkit/dist/array/pull.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/pull.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/pull.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes all specified values from an array.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `difference`.
+ *
+ * @template T, U
+ * @param {T[]} arr - The array to modify.
+ * @param {unknown[]} valuesToRemove - The values to remove from the array.
+ * @returns {T[]} The modified array with the specified values removed.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5, 2, 4];
+ * pull(numbers, [2, 4]);
+ * console.log(numbers); // [1, 3, 5]
+ */
+declare function pull<T>(arr: T[], valuesToRemove: readonly unknown[]): T[];
+
+export { pull };
Index: node_modules/es-toolkit/dist/array/pull.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/pull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/pull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes all specified values from an array.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `difference`.
+ *
+ * @template T, U
+ * @param {T[]} arr - The array to modify.
+ * @param {unknown[]} valuesToRemove - The values to remove from the array.
+ * @returns {T[]} The modified array with the specified values removed.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5, 2, 4];
+ * pull(numbers, [2, 4]);
+ * console.log(numbers); // [1, 3, 5]
+ */
+declare function pull<T>(arr: T[], valuesToRemove: readonly unknown[]): T[];
+
+export { pull };
Index: node_modules/es-toolkit/dist/array/pull.js
===================================================================
--- node_modules/es-toolkit/dist/array/pull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/pull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function pull(arr, valuesToRemove) {
+    const valuesSet = new Set(valuesToRemove);
+    let resultIndex = 0;
+    for (let i = 0; i < arr.length; i++) {
+        if (valuesSet.has(arr[i])) {
+            continue;
+        }
+        if (!Object.hasOwn(arr, i)) {
+            delete arr[resultIndex++];
+            continue;
+        }
+        arr[resultIndex++] = arr[i];
+    }
+    arr.length = resultIndex;
+    return arr;
+}
+
+exports.pull = pull;
Index: node_modules/es-toolkit/dist/array/pull.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/pull.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/pull.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+function pull(arr, valuesToRemove) {
+    const valuesSet = new Set(valuesToRemove);
+    let resultIndex = 0;
+    for (let i = 0; i < arr.length; i++) {
+        if (valuesSet.has(arr[i])) {
+            continue;
+        }
+        if (!Object.hasOwn(arr, i)) {
+            delete arr[resultIndex++];
+            continue;
+        }
+        arr[resultIndex++] = arr[i];
+    }
+    arr.length = resultIndex;
+    return arr;
+}
+
+export { pull };
Index: node_modules/es-toolkit/dist/array/pullAt.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/pullAt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/pullAt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes elements from an array at specified indices and returns the removed elements.
+ *
+ * This function supports negative indices, which count from the end of the array.
+ *
+ * @template T
+ * @param {T[]} arr - The array from which elements will be removed.
+ * @param {number[]} indicesToRemove - An array of indices specifying the positions of elements to remove.
+ * @returns {Array<T | undefined>} An array containing the elements that were removed from the original array.
+ *
+ * @example
+ * const numbers = [10, 20, 30, 40, 50];
+ * const removed = pullAt(numbers, [1, 3, 4]);
+ * console.log(removed); // [20, 40, 50]
+ * console.log(numbers); // [10, 30]
+ */
+declare function pullAt<T>(arr: T[], indicesToRemove: number[]): T[];
+
+export { pullAt };
Index: node_modules/es-toolkit/dist/array/pullAt.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/pullAt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/pullAt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes elements from an array at specified indices and returns the removed elements.
+ *
+ * This function supports negative indices, which count from the end of the array.
+ *
+ * @template T
+ * @param {T[]} arr - The array from which elements will be removed.
+ * @param {number[]} indicesToRemove - An array of indices specifying the positions of elements to remove.
+ * @returns {Array<T | undefined>} An array containing the elements that were removed from the original array.
+ *
+ * @example
+ * const numbers = [10, 20, 30, 40, 50];
+ * const removed = pullAt(numbers, [1, 3, 4]);
+ * console.log(removed); // [20, 40, 50]
+ * console.log(numbers); // [10, 30]
+ */
+declare function pullAt<T>(arr: T[], indicesToRemove: number[]): T[];
+
+export { pullAt };
Index: node_modules/es-toolkit/dist/array/pullAt.js
===================================================================
--- node_modules/es-toolkit/dist/array/pullAt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/pullAt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const at = require('./at.js');
+
+function pullAt(arr, indicesToRemove) {
+    const removed = at.at(arr, indicesToRemove);
+    const indices = new Set(indicesToRemove.slice().sort((x, y) => y - x));
+    for (const index of indices) {
+        arr.splice(index, 1);
+    }
+    return removed;
+}
+
+exports.pullAt = pullAt;
Index: node_modules/es-toolkit/dist/array/pullAt.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/pullAt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/pullAt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { at } from './at.mjs';
+
+function pullAt(arr, indicesToRemove) {
+    const removed = at(arr, indicesToRemove);
+    const indices = new Set(indicesToRemove.slice().sort((x, y) => y - x));
+    for (const index of indices) {
+        arr.splice(index, 1);
+    }
+    return removed;
+}
+
+export { pullAt };
Index: node_modules/es-toolkit/dist/array/remove.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/remove.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/remove.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes elements from an array based on a predicate function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove elements without modifying the original array, use `filter`.
+ *
+ * @template T
+ * @param {T[]} arr - The array to modify.
+ * @param {(value: T, index: number, array: T[]) => boolean} shouldRemoveElement - The function invoked per iteration to determine if an element should be removed.
+ * @returns {T[]} The modified array with the specified elements removed.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * remove(numbers, (value) => value % 2 === 0);
+ * console.log(numbers); // [1, 3, 5]
+ */
+declare function remove<T>(arr: T[], shouldRemoveElement: (value: T, index: number, array: T[]) => boolean): T[];
+
+export { remove };
Index: node_modules/es-toolkit/dist/array/remove.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/remove.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/remove.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes elements from an array based on a predicate function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove elements without modifying the original array, use `filter`.
+ *
+ * @template T
+ * @param {T[]} arr - The array to modify.
+ * @param {(value: T, index: number, array: T[]) => boolean} shouldRemoveElement - The function invoked per iteration to determine if an element should be removed.
+ * @returns {T[]} The modified array with the specified elements removed.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * remove(numbers, (value) => value % 2 === 0);
+ * console.log(numbers); // [1, 3, 5]
+ */
+declare function remove<T>(arr: T[], shouldRemoveElement: (value: T, index: number, array: T[]) => boolean): T[];
+
+export { remove };
Index: node_modules/es-toolkit/dist/array/remove.js
===================================================================
--- node_modules/es-toolkit/dist/array/remove.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/remove.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function remove(arr, shouldRemoveElement) {
+    const originalArr = arr.slice();
+    const removed = [];
+    let resultIndex = 0;
+    for (let i = 0; i < arr.length; i++) {
+        if (shouldRemoveElement(arr[i], i, originalArr)) {
+            removed.push(arr[i]);
+            continue;
+        }
+        if (!Object.hasOwn(arr, i)) {
+            delete arr[resultIndex++];
+            continue;
+        }
+        arr[resultIndex++] = arr[i];
+    }
+    arr.length = resultIndex;
+    return removed;
+}
+
+exports.remove = remove;
Index: node_modules/es-toolkit/dist/array/remove.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/remove.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/remove.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+function remove(arr, shouldRemoveElement) {
+    const originalArr = arr.slice();
+    const removed = [];
+    let resultIndex = 0;
+    for (let i = 0; i < arr.length; i++) {
+        if (shouldRemoveElement(arr[i], i, originalArr)) {
+            removed.push(arr[i]);
+            continue;
+        }
+        if (!Object.hasOwn(arr, i)) {
+            delete arr[resultIndex++];
+            continue;
+        }
+        arr[resultIndex++] = arr[i];
+    }
+    arr.length = resultIndex;
+    return removed;
+}
+
+export { remove };
Index: node_modules/es-toolkit/dist/array/sample.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/sample.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sample.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Returns a random element from an array.
+ *
+ * This function takes an array and returns a single element selected randomly from the array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to sample from.
+ * @returns {T} A random element from the array.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const randomElement = sample(array);
+ * // randomElement will be one of the elements from the array, selected randomly.
+ */
+declare function sample<T>(arr: readonly T[]): T;
+
+export { sample };
Index: node_modules/es-toolkit/dist/array/sample.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/sample.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sample.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Returns a random element from an array.
+ *
+ * This function takes an array and returns a single element selected randomly from the array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to sample from.
+ * @returns {T} A random element from the array.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const randomElement = sample(array);
+ * // randomElement will be one of the elements from the array, selected randomly.
+ */
+declare function sample<T>(arr: readonly T[]): T;
+
+export { sample };
Index: node_modules/es-toolkit/dist/array/sample.js
===================================================================
--- node_modules/es-toolkit/dist/array/sample.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sample.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function sample(arr) {
+    const randomIndex = Math.floor(Math.random() * arr.length);
+    return arr[randomIndex];
+}
+
+exports.sample = sample;
Index: node_modules/es-toolkit/dist/array/sample.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/sample.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sample.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+function sample(arr) {
+    const randomIndex = Math.floor(Math.random() * arr.length);
+    return arr[randomIndex];
+}
+
+export { sample };
Index: node_modules/es-toolkit/dist/array/sampleSize.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/sampleSize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sampleSize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Returns a sample element array of a specified `size`.
+ *
+ * This function takes an array and a number, and returns an array containing the sampled elements using Floyd's algorithm.
+ *
+ * {@link https://www.nowherenearithaca.com/2013/05/robert-floyds-tiny-and-beautiful.html Floyd's algorithm}
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} array - The array to sample from.
+ * @param {number} size - The size of sample.
+ * @returns {T[]} A new array with sample size applied.
+ * @throws {Error} Throws an error if `size` is greater than the length of `array`.
+ *
+ * @example
+ * const result = sampleSize([1, 2, 3], 2)
+ * // result will be an array containing two of the elements from the array.
+ * // [1, 2] or [1, 3] or [2, 3]
+ */
+declare function sampleSize<T>(array: readonly T[], size: number): T[];
+
+export { sampleSize };
Index: node_modules/es-toolkit/dist/array/sampleSize.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/sampleSize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sampleSize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Returns a sample element array of a specified `size`.
+ *
+ * This function takes an array and a number, and returns an array containing the sampled elements using Floyd's algorithm.
+ *
+ * {@link https://www.nowherenearithaca.com/2013/05/robert-floyds-tiny-and-beautiful.html Floyd's algorithm}
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} array - The array to sample from.
+ * @param {number} size - The size of sample.
+ * @returns {T[]} A new array with sample size applied.
+ * @throws {Error} Throws an error if `size` is greater than the length of `array`.
+ *
+ * @example
+ * const result = sampleSize([1, 2, 3], 2)
+ * // result will be an array containing two of the elements from the array.
+ * // [1, 2] or [1, 3] or [2, 3]
+ */
+declare function sampleSize<T>(array: readonly T[], size: number): T[];
+
+export { sampleSize };
Index: node_modules/es-toolkit/dist/array/sampleSize.js
===================================================================
--- node_modules/es-toolkit/dist/array/sampleSize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sampleSize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const randomInt = require('../math/randomInt.js');
+
+function sampleSize(array, size) {
+    if (size > array.length) {
+        throw new Error('Size must be less than or equal to the length of array.');
+    }
+    const result = new Array(size);
+    const selected = new Set();
+    for (let step = array.length - size, resultIndex = 0; step < array.length; step++, resultIndex++) {
+        let index = randomInt.randomInt(0, step + 1);
+        if (selected.has(index)) {
+            index = step;
+        }
+        selected.add(index);
+        result[resultIndex] = array[index];
+    }
+    return result;
+}
+
+exports.sampleSize = sampleSize;
Index: node_modules/es-toolkit/dist/array/sampleSize.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/sampleSize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sampleSize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { randomInt } from '../math/randomInt.mjs';
+
+function sampleSize(array, size) {
+    if (size > array.length) {
+        throw new Error('Size must be less than or equal to the length of array.');
+    }
+    const result = new Array(size);
+    const selected = new Set();
+    for (let step = array.length - size, resultIndex = 0; step < array.length; step++, resultIndex++) {
+        let index = randomInt(0, step + 1);
+        if (selected.has(index)) {
+            index = step;
+        }
+        selected.add(index);
+        result[resultIndex] = array[index];
+    }
+    return result;
+}
+
+export { sampleSize };
Index: node_modules/es-toolkit/dist/array/shuffle.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/shuffle.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/shuffle.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Randomizes the order of elements in an array using the Fisher-Yates algorithm.
+ *
+ * This function takes an array and returns a new array with its elements shuffled in a random order.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to shuffle.
+ * @returns {T[]} A new array with its elements shuffled in random order.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const shuffledArray = shuffle(array);
+ * // shuffledArray will be a new array with elements of array in random order, e.g., [3, 1, 4, 5, 2]
+ */
+declare function shuffle<T>(arr: readonly T[]): T[];
+
+export { shuffle };
Index: node_modules/es-toolkit/dist/array/shuffle.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/shuffle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/shuffle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Randomizes the order of elements in an array using the Fisher-Yates algorithm.
+ *
+ * This function takes an array and returns a new array with its elements shuffled in a random order.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to shuffle.
+ * @returns {T[]} A new array with its elements shuffled in random order.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const shuffledArray = shuffle(array);
+ * // shuffledArray will be a new array with elements of array in random order, e.g., [3, 1, 4, 5, 2]
+ */
+declare function shuffle<T>(arr: readonly T[]): T[];
+
+export { shuffle };
Index: node_modules/es-toolkit/dist/array/shuffle.js
===================================================================
--- node_modules/es-toolkit/dist/array/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function shuffle(arr) {
+    const result = arr.slice();
+    for (let i = result.length - 1; i >= 1; i--) {
+        const j = Math.floor(Math.random() * (i + 1));
+        [result[i], result[j]] = [result[j], result[i]];
+    }
+    return result;
+}
+
+exports.shuffle = shuffle;
Index: node_modules/es-toolkit/dist/array/shuffle.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/shuffle.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/shuffle.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+function shuffle(arr) {
+    const result = arr.slice();
+    for (let i = result.length - 1; i >= 1; i--) {
+        const j = Math.floor(Math.random() * (i + 1));
+        [result[i], result[j]] = [result[j], result[i]];
+    }
+    return result;
+}
+
+export { shuffle };
Index: node_modules/es-toolkit/dist/array/sortBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/sortBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sortBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Sorts an array of objects based on the given `criteria`.
+ *
+ * - If you provide keys, it sorts the objects by the values of those keys.
+ * - If you provide functions, it sorts based on the values returned by those functions.
+ *
+ * The function returns the array of objects sorted in ascending order.
+ * If two objects have the same value for the current criterion, it uses the next criterion to determine their order.
+ *
+ * @template T - The type of the objects in the array.
+ * @param {T[]} arr - The array of objects to be sorted.
+ * @param {Array<((item: T) => unknown) | keyof T>} criteria - The criteria for sorting. This can be an array of object keys or functions that return values used for sorting.
+ * @returns {T[]} - The sorted array.
+ *
+ * @example
+ * const users = [
+ *  { user: 'foo', age: 24 },
+ *  { user: 'bar', age: 7 },
+ *  { user: 'foo', age: 8 },
+ *  { user: 'bar', age: 29 },
+ * ];
+ *
+ * sortBy(users, ['user', 'age']);
+ * sortBy(users, [obj => obj.user, 'age']);
+ * // results will be:
+ * // [
+ * //   { user : 'bar', age: 7 },
+ * //   { user : 'bar', age: 29 },
+ * //   { user : 'foo', age: 8 },
+ * //   { user : 'foo', age: 24 },
+ * // ]
+ */
+declare function sortBy<T extends object>(arr: readonly T[], criteria: Array<((item: T) => unknown) | keyof T>): T[];
+
+export { sortBy };
Index: node_modules/es-toolkit/dist/array/sortBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/sortBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sortBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Sorts an array of objects based on the given `criteria`.
+ *
+ * - If you provide keys, it sorts the objects by the values of those keys.
+ * - If you provide functions, it sorts based on the values returned by those functions.
+ *
+ * The function returns the array of objects sorted in ascending order.
+ * If two objects have the same value for the current criterion, it uses the next criterion to determine their order.
+ *
+ * @template T - The type of the objects in the array.
+ * @param {T[]} arr - The array of objects to be sorted.
+ * @param {Array<((item: T) => unknown) | keyof T>} criteria - The criteria for sorting. This can be an array of object keys or functions that return values used for sorting.
+ * @returns {T[]} - The sorted array.
+ *
+ * @example
+ * const users = [
+ *  { user: 'foo', age: 24 },
+ *  { user: 'bar', age: 7 },
+ *  { user: 'foo', age: 8 },
+ *  { user: 'bar', age: 29 },
+ * ];
+ *
+ * sortBy(users, ['user', 'age']);
+ * sortBy(users, [obj => obj.user, 'age']);
+ * // results will be:
+ * // [
+ * //   { user : 'bar', age: 7 },
+ * //   { user : 'bar', age: 29 },
+ * //   { user : 'foo', age: 8 },
+ * //   { user : 'foo', age: 24 },
+ * // ]
+ */
+declare function sortBy<T extends object>(arr: readonly T[], criteria: Array<((item: T) => unknown) | keyof T>): T[];
+
+export { sortBy };
Index: node_modules/es-toolkit/dist/array/sortBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/sortBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sortBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const orderBy = require('./orderBy.js');
+
+function sortBy(arr, criteria) {
+    return orderBy.orderBy(arr, criteria, ['asc']);
+}
+
+exports.sortBy = sortBy;
Index: node_modules/es-toolkit/dist/array/sortBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/sortBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/sortBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { orderBy } from './orderBy.mjs';
+
+function sortBy(arr, criteria) {
+    return orderBy(arr, criteria, ['asc']);
+}
+
+export { sortBy };
Index: node_modules/es-toolkit/dist/array/tail.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/tail.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/tail.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+/**
+ * Returns an empty array when the input is a single-element array.
+ *
+ * @template T - The type of the single element in the array.
+ * @param {[T]} arr - The single-element array to process.
+ * @returns {[]} An empty array.
+ *
+ * @example
+ * const arr = [1];
+ * const result = tail(arr);
+ * // result will be []
+ */
+declare function tail<T>(arr: readonly [T]): [];
+/**
+ * Returns an empty array when the input is an empty array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[]} arr - The empty array to process.
+ * @returns {[]} An empty array.
+ *
+ * @example
+ * const arr = [];
+ * const result = tail(arr);
+ * // result will be []
+ */
+declare function tail(arr: readonly []): [];
+/**
+ * Returns a new array with all elements except for the first when the input is a tuple array.
+ *
+ * @template T - The type of the first element in the tuple array.
+ * @template U - The type of the remaining elements in the tuple array.
+ * @param {[T, ...U[]]} arr - The tuple array to process.
+ * @returns {U[]} A new array containing all elements of the input array except for the first one.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const result = tail(arr);
+ * // result will be [2, 3]
+ */
+declare function tail<T, U>(arr: readonly [T, ...U[]]): U[];
+/**
+ * Returns a new array with all elements except for the first.
+ *
+ * This function takes an array and returns a new array containing all the elements
+ * except for the first one. If the input array is empty or has only one element,
+ * an empty array is returned.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to get the tail of.
+ * @returns {T[]} A new array containing all elements of the input array except for the first one.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const result = tail(arr1);
+ * // result will be [2, 3]
+ *
+ * const arr2 = [1];
+ * const result2 = tail(arr2);
+ * // result2 will be []
+ *
+ * const arr3 = [];
+ * const result3 = tail(arr3);
+ * // result3 will be []
+ */
+declare function tail<T>(arr: readonly T[]): T[];
+
+export { tail };
Index: node_modules/es-toolkit/dist/array/tail.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/tail.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/tail.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+/**
+ * Returns an empty array when the input is a single-element array.
+ *
+ * @template T - The type of the single element in the array.
+ * @param {[T]} arr - The single-element array to process.
+ * @returns {[]} An empty array.
+ *
+ * @example
+ * const arr = [1];
+ * const result = tail(arr);
+ * // result will be []
+ */
+declare function tail<T>(arr: readonly [T]): [];
+/**
+ * Returns an empty array when the input is an empty array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {[]} arr - The empty array to process.
+ * @returns {[]} An empty array.
+ *
+ * @example
+ * const arr = [];
+ * const result = tail(arr);
+ * // result will be []
+ */
+declare function tail(arr: readonly []): [];
+/**
+ * Returns a new array with all elements except for the first when the input is a tuple array.
+ *
+ * @template T - The type of the first element in the tuple array.
+ * @template U - The type of the remaining elements in the tuple array.
+ * @param {[T, ...U[]]} arr - The tuple array to process.
+ * @returns {U[]} A new array containing all elements of the input array except for the first one.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const result = tail(arr);
+ * // result will be [2, 3]
+ */
+declare function tail<T, U>(arr: readonly [T, ...U[]]): U[];
+/**
+ * Returns a new array with all elements except for the first.
+ *
+ * This function takes an array and returns a new array containing all the elements
+ * except for the first one. If the input array is empty or has only one element,
+ * an empty array is returned.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to get the tail of.
+ * @returns {T[]} A new array containing all elements of the input array except for the first one.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const result = tail(arr1);
+ * // result will be [2, 3]
+ *
+ * const arr2 = [1];
+ * const result2 = tail(arr2);
+ * // result2 will be []
+ *
+ * const arr3 = [];
+ * const result3 = tail(arr3);
+ * // result3 will be []
+ */
+declare function tail<T>(arr: readonly T[]): T[];
+
+export { tail };
Index: node_modules/es-toolkit/dist/array/tail.js
===================================================================
--- node_modules/es-toolkit/dist/array/tail.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/tail.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function tail(arr) {
+    return arr.slice(1);
+}
+
+exports.tail = tail;
Index: node_modules/es-toolkit/dist/array/tail.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/tail.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/tail.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function tail(arr) {
+    return arr.slice(1);
+}
+
+export { tail };
Index: node_modules/es-toolkit/dist/array/take.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/take.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/take.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Returns a new array containing the first `count` elements from the input array `arr`.
+ * If `count` is greater than the length of `arr`, the entire array is returned.
+ *
+ * @template T - Type of elements in the input array.
+ *
+ * @param {T[]} arr - The array to take elements from.
+ * @param {number} count - The number of elements to take.
+ * @param {unknown} guard - If truthy, ignores `count` and defaults to 1.
+ * @returns {T[]} A new array containing the first `count` elements from `arr`.
+ *
+ * @example
+ * // Returns [1, 2, 3]
+ * take([1, 2, 3, 4, 5], 3);
+ *
+ * @example
+ * // Returns ['a', 'b']
+ * take(['a', 'b', 'c'], 2);
+ *
+ * @example
+ * // Returns [1, 2, 3]
+ * take([1, 2, 3], 5);
+ *
+ * @example
+ * // Returns [[1], [1], [1]]
+ * const arr = [1, 2, 3];
+ * const result = arr.map((v, i, array) => take(array, i, true));
+ */
+declare function take<T>(arr: readonly T[], count?: number, guard?: unknown): T[];
+
+export { take };
Index: node_modules/es-toolkit/dist/array/take.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/take.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/take.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Returns a new array containing the first `count` elements from the input array `arr`.
+ * If `count` is greater than the length of `arr`, the entire array is returned.
+ *
+ * @template T - Type of elements in the input array.
+ *
+ * @param {T[]} arr - The array to take elements from.
+ * @param {number} count - The number of elements to take.
+ * @param {unknown} guard - If truthy, ignores `count` and defaults to 1.
+ * @returns {T[]} A new array containing the first `count` elements from `arr`.
+ *
+ * @example
+ * // Returns [1, 2, 3]
+ * take([1, 2, 3, 4, 5], 3);
+ *
+ * @example
+ * // Returns ['a', 'b']
+ * take(['a', 'b', 'c'], 2);
+ *
+ * @example
+ * // Returns [1, 2, 3]
+ * take([1, 2, 3], 5);
+ *
+ * @example
+ * // Returns [[1], [1], [1]]
+ * const arr = [1, 2, 3];
+ * const result = arr.map((v, i, array) => take(array, i, true));
+ */
+declare function take<T>(arr: readonly T[], count?: number, guard?: unknown): T[];
+
+export { take };
Index: node_modules/es-toolkit/dist/array/take.js
===================================================================
--- node_modules/es-toolkit/dist/array/take.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/take.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toInteger = require('../compat/util/toInteger.js');
+
+function take(arr, count, guard) {
+    count = guard || count === undefined ? 1 : toInteger.toInteger(count);
+    return arr.slice(0, count);
+}
+
+exports.take = take;
Index: node_modules/es-toolkit/dist/array/take.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/take.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/take.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { toInteger } from '../compat/util/toInteger.mjs';
+
+function take(arr, count, guard) {
+    count = guard || count === undefined ? 1 : toInteger(count);
+    return arr.slice(0, count);
+}
+
+export { take };
Index: node_modules/es-toolkit/dist/array/takeRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/takeRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * Returns a new array containing the last `count` elements from the input array `arr`.
+ * If `count` is greater than the length of `arr`, the entire array is returned.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to take elements from.
+ * @param {number} [count=1] - The number of elements to take.
+ * @returns {T[]} A new array containing the last `count` elements from `arr`.
+ *
+ * @example
+ * // Returns [4, 5]
+ * takeRight([1, 2, 3, 4, 5], 2);
+ *
+ * @example
+ * // Returns ['b', 'c']
+ * takeRight(['a', 'b', 'c'], 2);
+ *
+ * @example
+ * // Returns [1, 2, 3]
+ * takeRight([1, 2, 3], 5);
+ */
+declare function takeRight<T>(arr: readonly T[], count?: number, guard?: unknown): T[];
+
+export { takeRight };
Index: node_modules/es-toolkit/dist/array/takeRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/takeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * Returns a new array containing the last `count` elements from the input array `arr`.
+ * If `count` is greater than the length of `arr`, the entire array is returned.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to take elements from.
+ * @param {number} [count=1] - The number of elements to take.
+ * @returns {T[]} A new array containing the last `count` elements from `arr`.
+ *
+ * @example
+ * // Returns [4, 5]
+ * takeRight([1, 2, 3, 4, 5], 2);
+ *
+ * @example
+ * // Returns ['b', 'c']
+ * takeRight(['a', 'b', 'c'], 2);
+ *
+ * @example
+ * // Returns [1, 2, 3]
+ * takeRight([1, 2, 3], 5);
+ */
+declare function takeRight<T>(arr: readonly T[], count?: number, guard?: unknown): T[];
+
+export { takeRight };
Index: node_modules/es-toolkit/dist/array/takeRight.js
===================================================================
--- node_modules/es-toolkit/dist/array/takeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toInteger = require('../compat/util/toInteger.js');
+
+function takeRight(arr, count = 1, guard) {
+    count = guard || count === undefined ? 1 : toInteger.toInteger(count);
+    if (count <= 0 || arr == null || arr.length === 0) {
+        return [];
+    }
+    return arr.slice(-count);
+}
+
+exports.takeRight = takeRight;
Index: node_modules/es-toolkit/dist/array/takeRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/takeRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { toInteger } from '../compat/util/toInteger.mjs';
+
+function takeRight(arr, count = 1, guard) {
+    count = guard || count === undefined ? 1 : toInteger(count);
+    if (count <= 0 || arr == null || arr.length === 0) {
+        return [];
+    }
+    return arr.slice(-count);
+}
+
+export { takeRight };
Index: node_modules/es-toolkit/dist/array/takeRightWhile.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/takeRightWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeRightWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Takes elements from the end of the array while the predicate function returns `true`.
+ *
+ * @template T - Type of elements in the input array.
+ *
+ * @param {T[]} arr - The array to take elements from.
+ * @param {(item: T) => boolean} shouldContinueTaking - The function invoked per element.
+ * @returns {T[]} A new array containing the elements taken from the end while the predicate returns `true`.
+ *
+ * @example
+ * // Returns [3, 2, 1]
+ * takeRightWhile([5, 4, 3, 2, 1], n => n < 4);
+ *
+ * @example
+ * // Returns []
+ * takeRightWhile([1, 2, 3], n => n > 3);
+ */
+declare function takeRightWhile<T>(arr: readonly T[], shouldContinueTaking: (item: T) => boolean): T[];
+
+export { takeRightWhile };
Index: node_modules/es-toolkit/dist/array/takeRightWhile.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/takeRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Takes elements from the end of the array while the predicate function returns `true`.
+ *
+ * @template T - Type of elements in the input array.
+ *
+ * @param {T[]} arr - The array to take elements from.
+ * @param {(item: T) => boolean} shouldContinueTaking - The function invoked per element.
+ * @returns {T[]} A new array containing the elements taken from the end while the predicate returns `true`.
+ *
+ * @example
+ * // Returns [3, 2, 1]
+ * takeRightWhile([5, 4, 3, 2, 1], n => n < 4);
+ *
+ * @example
+ * // Returns []
+ * takeRightWhile([1, 2, 3], n => n > 3);
+ */
+declare function takeRightWhile<T>(arr: readonly T[], shouldContinueTaking: (item: T) => boolean): T[];
+
+export { takeRightWhile };
Index: node_modules/es-toolkit/dist/array/takeRightWhile.js
===================================================================
--- node_modules/es-toolkit/dist/array/takeRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function takeRightWhile(arr, shouldContinueTaking) {
+    for (let i = arr.length - 1; i >= 0; i--) {
+        if (!shouldContinueTaking(arr[i])) {
+            return arr.slice(i + 1);
+        }
+    }
+    return arr.slice();
+}
+
+exports.takeRightWhile = takeRightWhile;
Index: node_modules/es-toolkit/dist/array/takeRightWhile.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/takeRightWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeRightWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+function takeRightWhile(arr, shouldContinueTaking) {
+    for (let i = arr.length - 1; i >= 0; i--) {
+        if (!shouldContinueTaking(arr[i])) {
+            return arr.slice(i + 1);
+        }
+    }
+    return arr.slice();
+}
+
+export { takeRightWhile };
Index: node_modules/es-toolkit/dist/array/takeWhile.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/takeWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Returns a new array containing the leading elements of the provided array
+ * that satisfy the provided predicate function. It stops taking elements as soon
+ * as an element does not satisfy the predicate.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to process.
+ * @param {(element: T) => boolean} shouldContinueTaking - The predicate function that is called with each element. Elements are included in the result as long as this function returns true.
+ * @returns {T[]} A new array containing the leading elements that satisfy the predicate.
+ *
+ * @example
+ * // Returns [1, 2]
+ * takeWhile([1, 2, 3, 4], x => x < 3);
+ *
+ * @example
+ * // Returns []
+ * takeWhile([1, 2, 3, 4], x => x > 3);
+ */
+declare function takeWhile<T>(arr: readonly T[], shouldContinueTaking: (element: T) => boolean): T[];
+
+export { takeWhile };
Index: node_modules/es-toolkit/dist/array/takeWhile.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/takeWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Returns a new array containing the leading elements of the provided array
+ * that satisfy the provided predicate function. It stops taking elements as soon
+ * as an element does not satisfy the predicate.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to process.
+ * @param {(element: T) => boolean} shouldContinueTaking - The predicate function that is called with each element. Elements are included in the result as long as this function returns true.
+ * @returns {T[]} A new array containing the leading elements that satisfy the predicate.
+ *
+ * @example
+ * // Returns [1, 2]
+ * takeWhile([1, 2, 3, 4], x => x < 3);
+ *
+ * @example
+ * // Returns []
+ * takeWhile([1, 2, 3, 4], x => x > 3);
+ */
+declare function takeWhile<T>(arr: readonly T[], shouldContinueTaking: (element: T) => boolean): T[];
+
+export { takeWhile };
Index: node_modules/es-toolkit/dist/array/takeWhile.js
===================================================================
--- node_modules/es-toolkit/dist/array/takeWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function takeWhile(arr, shouldContinueTaking) {
+    const result = [];
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        if (!shouldContinueTaking(item)) {
+            break;
+        }
+        result.push(item);
+    }
+    return result;
+}
+
+exports.takeWhile = takeWhile;
Index: node_modules/es-toolkit/dist/array/takeWhile.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/takeWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/takeWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+function takeWhile(arr, shouldContinueTaking) {
+    const result = [];
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        if (!shouldContinueTaking(item)) {
+            break;
+        }
+        result.push(item);
+    }
+    return result;
+}
+
+export { takeWhile };
Index: node_modules/es-toolkit/dist/array/toFilled.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/toFilled.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/toFilled.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,92 @@
+/**
+ * Creates a new array filled with the specified value from the start position up to, but not including, the end position.
+ * This function does not mutate the original array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the new array with.
+ * @param {Array<T>} arr - The array to base the new array on.
+ * @param {U} value - The value to fill the new array with.
+ * @returns {Array<T | U>} The new array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * let result = toFilled(array, '*', 2);
+ * console.log(result); // [1, 2, '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', 1, 4);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*');
+ * console.log(result); // ['*', '*', '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', -4, -1);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ */
+declare function toFilled<T, U>(arr: readonly T[], value: U): Array<T | U>;
+/**
+ * Creates a new array filled with the specified value from the start position up to, but not including, the end position.
+ * This function does not mutate the original array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the new array with.
+ * @param {Array<T>} arr - The array to base the new array on.
+ * @param {U} value - The value to fill the new array with.
+ * @param {number} [start=0] - The start position. Defaults to 0.
+ * @returns {Array<T | U>} The new array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * let result = toFilled(array, '*', 2);
+ * console.log(result); // [1, 2, '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', 1, 4);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*');
+ * console.log(result); // ['*', '*', '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', -4, -1);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ */
+declare function toFilled<T, U>(arr: readonly T[], value: U, start: number): Array<T | U>;
+/**
+ * Creates a new array filled with the specified value from the start position up to, but not including, the end position.
+ * This function does not mutate the original array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the new array with.
+ * @param {Array<T>} arr - The array to base the new array on.
+ * @param {U} value - The value to fill the new array with.
+ * @param {number} [start=0] - The start position. Defaults to 0.
+ * @param {number} [end=arr.length] - The end position. Defaults to the array's length.
+ * @returns {Array<T | U>} The new array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * let result = toFilled(array, '*', 2);
+ * console.log(result); // [1, 2, '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', 1, 4);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*');
+ * console.log(result); // ['*', '*', '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', -4, -1);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ */
+declare function toFilled<T, U>(arr: readonly T[], value: U, start: number, end: number): Array<T | U>;
+
+export { toFilled };
Index: node_modules/es-toolkit/dist/array/toFilled.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/toFilled.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/toFilled.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,92 @@
+/**
+ * Creates a new array filled with the specified value from the start position up to, but not including, the end position.
+ * This function does not mutate the original array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the new array with.
+ * @param {Array<T>} arr - The array to base the new array on.
+ * @param {U} value - The value to fill the new array with.
+ * @returns {Array<T | U>} The new array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * let result = toFilled(array, '*', 2);
+ * console.log(result); // [1, 2, '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', 1, 4);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*');
+ * console.log(result); // ['*', '*', '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', -4, -1);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ */
+declare function toFilled<T, U>(arr: readonly T[], value: U): Array<T | U>;
+/**
+ * Creates a new array filled with the specified value from the start position up to, but not including, the end position.
+ * This function does not mutate the original array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the new array with.
+ * @param {Array<T>} arr - The array to base the new array on.
+ * @param {U} value - The value to fill the new array with.
+ * @param {number} [start=0] - The start position. Defaults to 0.
+ * @returns {Array<T | U>} The new array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * let result = toFilled(array, '*', 2);
+ * console.log(result); // [1, 2, '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', 1, 4);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*');
+ * console.log(result); // ['*', '*', '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', -4, -1);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ */
+declare function toFilled<T, U>(arr: readonly T[], value: U, start: number): Array<T | U>;
+/**
+ * Creates a new array filled with the specified value from the start position up to, but not including, the end position.
+ * This function does not mutate the original array.
+ *
+ * @template T - The type of elements in the original array.
+ * @template U - The type of the value to fill the new array with.
+ * @param {Array<T>} arr - The array to base the new array on.
+ * @param {U} value - The value to fill the new array with.
+ * @param {number} [start=0] - The start position. Defaults to 0.
+ * @param {number} [end=arr.length] - The end position. Defaults to the array's length.
+ * @returns {Array<T | U>} The new array with the filled values.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * let result = toFilled(array, '*', 2);
+ * console.log(result); // [1, 2, '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', 1, 4);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*');
+ * console.log(result); // ['*', '*', '*', '*', '*']
+ * console.log(array); // [1, 2, 3, 4, 5]
+ *
+ * result = toFilled(array, '*', -4, -1);
+ * console.log(result); // [1, '*', '*', '*', 5]
+ * console.log(array); // [1, 2, 3, 4, 5]
+ */
+declare function toFilled<T, U>(arr: readonly T[], value: U, start: number, end: number): Array<T | U>;
+
+export { toFilled };
Index: node_modules/es-toolkit/dist/array/toFilled.js
===================================================================
--- node_modules/es-toolkit/dist/array/toFilled.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/toFilled.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function toFilled(arr, value, start = 0, end = arr.length) {
+    const length = arr.length;
+    const finalStart = Math.max(start >= 0 ? start : length + start, 0);
+    const finalEnd = Math.min(end >= 0 ? end : length + end, length);
+    const newArr = arr.slice();
+    for (let i = finalStart; i < finalEnd; i++) {
+        newArr[i] = value;
+    }
+    return newArr;
+}
+
+exports.toFilled = toFilled;
Index: node_modules/es-toolkit/dist/array/toFilled.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/toFilled.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/toFilled.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function toFilled(arr, value, start = 0, end = arr.length) {
+    const length = arr.length;
+    const finalStart = Math.max(start >= 0 ? start : length + start, 0);
+    const finalEnd = Math.min(end >= 0 ? end : length + end, length);
+    const newArr = arr.slice();
+    for (let i = finalStart; i < finalEnd; i++) {
+        newArr[i] = value;
+    }
+    return newArr;
+}
+
+export { toFilled };
Index: node_modules/es-toolkit/dist/array/union.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/union.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/union.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates an array of unique values from all given arrays.
+ *
+ * This function takes two arrays, merges them into a single array, and returns a new array
+ * containing only the unique values from the merged array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr1 - The first array to merge and filter for unique values.
+ * @param {T[]} arr2 - The second array to merge and filter for unique values.
+ * @returns {T[]} A new array of unique values.
+ *
+ * @example
+ * const array1 = [1, 2, 3];
+ * const array2 = [3, 4, 5];
+ * const result = union(array1, array2);
+ * // result will be [1, 2, 3, 4, 5]
+ */
+declare function union<T>(arr1: readonly T[], arr2: readonly T[]): T[];
+
+export { union };
Index: node_modules/es-toolkit/dist/array/union.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/union.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/union.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates an array of unique values from all given arrays.
+ *
+ * This function takes two arrays, merges them into a single array, and returns a new array
+ * containing only the unique values from the merged array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr1 - The first array to merge and filter for unique values.
+ * @param {T[]} arr2 - The second array to merge and filter for unique values.
+ * @returns {T[]} A new array of unique values.
+ *
+ * @example
+ * const array1 = [1, 2, 3];
+ * const array2 = [3, 4, 5];
+ * const result = union(array1, array2);
+ * // result will be [1, 2, 3, 4, 5]
+ */
+declare function union<T>(arr1: readonly T[], arr2: readonly T[]): T[];
+
+export { union };
Index: node_modules/es-toolkit/dist/array/union.js
===================================================================
--- node_modules/es-toolkit/dist/array/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const uniq = require('./uniq.js');
+
+function union(arr1, arr2) {
+    return uniq.uniq(arr1.concat(arr2));
+}
+
+exports.union = union;
Index: node_modules/es-toolkit/dist/array/union.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/union.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/union.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { uniq } from './uniq.mjs';
+
+function union(arr1, arr2) {
+    return uniq(arr1.concat(arr2));
+}
+
+export { union };
Index: node_modules/es-toolkit/dist/array/unionBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/unionBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unionBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Creates an array of unique values, in order, from all given arrays using a provided mapping function to determine equality.
+ *
+ * @template T - The type of elements in the array.
+ * @template U - The type of mapped elements.
+ * @param {T[]} arr1 - The first array.
+ * @param {T[]} arr2 - The second array.
+ * @param {(item: T) => U} mapper - The function to map array elements to comparison values.
+ * @returns {T[]} A new array containing the union of unique elements from `arr1` and `arr2`, based on the values returned by the mapping function.
+ *
+ * @example
+ * // Custom mapping function for numbers (modulo comparison)
+ * const moduloMapper = (x) => x % 3;
+ * unionBy([1, 2, 3], [4, 5, 6], moduloMapper);
+ * // Returns [1, 2, 3]
+ *
+ * @example
+ * // Custom mapping function for objects with an 'id' property
+ * const idMapper = (obj) => obj.id;
+ * unionBy([{ id: 1 }, { id: 2 }], [{ id: 2 }, { id: 3 }], idMapper);
+ * // Returns [{ id: 1 }, { id: 2 }, { id: 3 }]
+ */
+declare function unionBy<T, U>(arr1: readonly T[], arr2: readonly T[], mapper: (item: T) => U): T[];
+
+export { unionBy };
Index: node_modules/es-toolkit/dist/array/unionBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/unionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Creates an array of unique values, in order, from all given arrays using a provided mapping function to determine equality.
+ *
+ * @template T - The type of elements in the array.
+ * @template U - The type of mapped elements.
+ * @param {T[]} arr1 - The first array.
+ * @param {T[]} arr2 - The second array.
+ * @param {(item: T) => U} mapper - The function to map array elements to comparison values.
+ * @returns {T[]} A new array containing the union of unique elements from `arr1` and `arr2`, based on the values returned by the mapping function.
+ *
+ * @example
+ * // Custom mapping function for numbers (modulo comparison)
+ * const moduloMapper = (x) => x % 3;
+ * unionBy([1, 2, 3], [4, 5, 6], moduloMapper);
+ * // Returns [1, 2, 3]
+ *
+ * @example
+ * // Custom mapping function for objects with an 'id' property
+ * const idMapper = (obj) => obj.id;
+ * unionBy([{ id: 1 }, { id: 2 }], [{ id: 2 }, { id: 3 }], idMapper);
+ * // Returns [{ id: 1 }, { id: 2 }, { id: 3 }]
+ */
+declare function unionBy<T, U>(arr1: readonly T[], arr2: readonly T[], mapper: (item: T) => U): T[];
+
+export { unionBy };
Index: node_modules/es-toolkit/dist/array/unionBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/unionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const uniqBy = require('./uniqBy.js');
+
+function unionBy(arr1, arr2, mapper) {
+    return uniqBy.uniqBy(arr1.concat(arr2), mapper);
+}
+
+exports.unionBy = unionBy;
Index: node_modules/es-toolkit/dist/array/unionBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/unionBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unionBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { uniqBy } from './uniqBy.mjs';
+
+function unionBy(arr1, arr2, mapper) {
+    return uniqBy(arr1.concat(arr2), mapper);
+}
+
+export { unionBy };
Index: node_modules/es-toolkit/dist/array/unionWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/unionWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unionWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Creates an array of unique values from two given arrays based on a custom equality function.
+ *
+ * This function takes two arrays and a custom equality function, merges the arrays, and returns
+ * a new array containing only the unique values as determined by the custom equality function.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr1 - The first array to merge and filter for unique values.
+ * @param {T[]} arr2 - The second array to merge and filter for unique values.
+ * @param {(item1: T, item2: T) => boolean} areItemsEqual - A custom function to determine if two elements are equal.
+ * It takes two arguments and returns `true` if the elements are considered equal, and `false` otherwise.
+ * @returns {T[]} A new array of unique values based on the custom equality function.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }];
+ * const array2 = [{ id: 2 }, { id: 3 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * const result = unionWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 1 }, { id: 2 }, { id: 3 }] since { id: 2 } is considered equal in both arrays
+ */
+declare function unionWith<T>(arr1: readonly T[], arr2: readonly T[], areItemsEqual: (item1: T, item2: T) => boolean): T[];
+
+export { unionWith };
Index: node_modules/es-toolkit/dist/array/unionWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/unionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Creates an array of unique values from two given arrays based on a custom equality function.
+ *
+ * This function takes two arrays and a custom equality function, merges the arrays, and returns
+ * a new array containing only the unique values as determined by the custom equality function.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr1 - The first array to merge and filter for unique values.
+ * @param {T[]} arr2 - The second array to merge and filter for unique values.
+ * @param {(item1: T, item2: T) => boolean} areItemsEqual - A custom function to determine if two elements are equal.
+ * It takes two arguments and returns `true` if the elements are considered equal, and `false` otherwise.
+ * @returns {T[]} A new array of unique values based on the custom equality function.
+ *
+ * @example
+ * const array1 = [{ id: 1 }, { id: 2 }];
+ * const array2 = [{ id: 2 }, { id: 3 }];
+ * const areItemsEqual = (a, b) => a.id === b.id;
+ * const result = unionWith(array1, array2, areItemsEqual);
+ * // result will be [{ id: 1 }, { id: 2 }, { id: 3 }] since { id: 2 } is considered equal in both arrays
+ */
+declare function unionWith<T>(arr1: readonly T[], arr2: readonly T[], areItemsEqual: (item1: T, item2: T) => boolean): T[];
+
+export { unionWith };
Index: node_modules/es-toolkit/dist/array/unionWith.js
===================================================================
--- node_modules/es-toolkit/dist/array/unionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const uniqWith = require('./uniqWith.js');
+
+function unionWith(arr1, arr2, areItemsEqual) {
+    return uniqWith.uniqWith(arr1.concat(arr2), areItemsEqual);
+}
+
+exports.unionWith = unionWith;
Index: node_modules/es-toolkit/dist/array/unionWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/unionWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unionWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { uniqWith } from './uniqWith.mjs';
+
+function unionWith(arr1, arr2, areItemsEqual) {
+    return uniqWith(arr1.concat(arr2), areItemsEqual);
+}
+
+export { unionWith };
Index: node_modules/es-toolkit/dist/array/uniq.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/uniq.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniq.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Creates a duplicate-free version of an array.
+ *
+ * This function takes an array and returns a new array containing only the unique values
+ * from the original array, preserving the order of first occurrence.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to process.
+ * @returns {T[]} A new array with only unique values from the original array.
+ *
+ * @example
+ * const array = [1, 2, 2, 3, 4, 4, 5];
+ * const result = uniq(array);
+ * // result will be [1, 2, 3, 4, 5]
+ */
+declare function uniq<T>(arr: readonly T[]): T[];
+
+export { uniq };
Index: node_modules/es-toolkit/dist/array/uniq.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/uniq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Creates a duplicate-free version of an array.
+ *
+ * This function takes an array and returns a new array containing only the unique values
+ * from the original array, preserving the order of first occurrence.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to process.
+ * @returns {T[]} A new array with only unique values from the original array.
+ *
+ * @example
+ * const array = [1, 2, 2, 3, 4, 4, 5];
+ * const result = uniq(array);
+ * // result will be [1, 2, 3, 4, 5]
+ */
+declare function uniq<T>(arr: readonly T[]): T[];
+
+export { uniq };
Index: node_modules/es-toolkit/dist/array/uniq.js
===================================================================
--- node_modules/es-toolkit/dist/array/uniq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function uniq(arr) {
+    return Array.from(new Set(arr));
+}
+
+exports.uniq = uniq;
Index: node_modules/es-toolkit/dist/array/uniq.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/uniq.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniq.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function uniq(arr) {
+    return Array.from(new Set(arr));
+}
+
+export { uniq };
Index: node_modules/es-toolkit/dist/array/uniqBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/uniqBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniqBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Returns a new array containing only the unique elements from the original array,
+ * based on the values returned by the mapper function.
+ *
+ * @template T - The type of elements in the array.
+ * @template U - The type of mapped elements.
+ * @param {T[]} arr - The array to process.
+ * @param {(item: T) => U} mapper - The function used to convert the array elements.
+ * @returns {T[]} A new array containing only the unique elements from the original array, based on the values returned by the mapper function.
+ *
+ * @example
+ * ```ts
+ * uniqBy([1.2, 1.5, 2.1, 3.2, 5.7, 5.3, 7.19], Math.floor);
+ * // [1.2, 2.1, 3.2, 5.7, 7.19]
+ * ```
+ *
+ * @example
+ * const array = [
+ *   { category: 'fruit', name: 'apple' },
+ *   { category: 'fruit', name: 'banana' },
+ *   { category: 'vegetable', name: 'carrot' },
+ * ];
+ * uniqBy(array, item => item.category).length
+ * // 2
+ * ```
+ */
+declare function uniqBy<T, U>(arr: readonly T[], mapper: (item: T) => U): T[];
+
+export { uniqBy };
Index: node_modules/es-toolkit/dist/array/uniqBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/uniqBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniqBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Returns a new array containing only the unique elements from the original array,
+ * based on the values returned by the mapper function.
+ *
+ * @template T - The type of elements in the array.
+ * @template U - The type of mapped elements.
+ * @param {T[]} arr - The array to process.
+ * @param {(item: T) => U} mapper - The function used to convert the array elements.
+ * @returns {T[]} A new array containing only the unique elements from the original array, based on the values returned by the mapper function.
+ *
+ * @example
+ * ```ts
+ * uniqBy([1.2, 1.5, 2.1, 3.2, 5.7, 5.3, 7.19], Math.floor);
+ * // [1.2, 2.1, 3.2, 5.7, 7.19]
+ * ```
+ *
+ * @example
+ * const array = [
+ *   { category: 'fruit', name: 'apple' },
+ *   { category: 'fruit', name: 'banana' },
+ *   { category: 'vegetable', name: 'carrot' },
+ * ];
+ * uniqBy(array, item => item.category).length
+ * // 2
+ * ```
+ */
+declare function uniqBy<T, U>(arr: readonly T[], mapper: (item: T) => U): T[];
+
+export { uniqBy };
Index: node_modules/es-toolkit/dist/array/uniqBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/uniqBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniqBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function uniqBy(arr, mapper) {
+    const map = new Map();
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const key = mapper(item);
+        if (!map.has(key)) {
+            map.set(key, item);
+        }
+    }
+    return Array.from(map.values());
+}
+
+exports.uniqBy = uniqBy;
Index: node_modules/es-toolkit/dist/array/uniqBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/uniqBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniqBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+function uniqBy(arr, mapper) {
+    const map = new Map();
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const key = mapper(item);
+        if (!map.has(key)) {
+            map.set(key, item);
+        }
+    }
+    return Array.from(map.values());
+}
+
+export { uniqBy };
Index: node_modules/es-toolkit/dist/array/uniqWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/uniqWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniqWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Returns a new array containing only the unique elements from the original array,
+ * based on the values returned by the comparator function.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to process.
+ * @param {(item1: T, item2: T) => boolean} areItemsEqual - The function used to compare the array elements.
+ * @returns {T[]} A new array containing only the unique elements from the original array, based on the values returned by the comparator function.
+ *
+ * @example
+ * ```ts
+ * uniqWith([1.2, 1.5, 2.1, 3.2, 5.7, 5.3, 7.19], (a, b) => Math.abs(a - b) < 1);
+ * // [1.2, 3.2, 5.7, 7.19]
+ * ```
+ */
+declare function uniqWith<T>(arr: readonly T[], areItemsEqual: (item1: T, item2: T) => boolean): T[];
+
+export { uniqWith };
Index: node_modules/es-toolkit/dist/array/uniqWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/uniqWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniqWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Returns a new array containing only the unique elements from the original array,
+ * based on the values returned by the comparator function.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr - The array to process.
+ * @param {(item1: T, item2: T) => boolean} areItemsEqual - The function used to compare the array elements.
+ * @returns {T[]} A new array containing only the unique elements from the original array, based on the values returned by the comparator function.
+ *
+ * @example
+ * ```ts
+ * uniqWith([1.2, 1.5, 2.1, 3.2, 5.7, 5.3, 7.19], (a, b) => Math.abs(a - b) < 1);
+ * // [1.2, 3.2, 5.7, 7.19]
+ * ```
+ */
+declare function uniqWith<T>(arr: readonly T[], areItemsEqual: (item1: T, item2: T) => boolean): T[];
+
+export { uniqWith };
Index: node_modules/es-toolkit/dist/array/uniqWith.js
===================================================================
--- node_modules/es-toolkit/dist/array/uniqWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniqWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function uniqWith(arr, areItemsEqual) {
+    const result = [];
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const isUniq = result.every(v => !areItemsEqual(v, item));
+        if (isUniq) {
+            result.push(item);
+        }
+    }
+    return result;
+}
+
+exports.uniqWith = uniqWith;
Index: node_modules/es-toolkit/dist/array/uniqWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/uniqWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/uniqWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+function uniqWith(arr, areItemsEqual) {
+    const result = [];
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        const isUniq = result.every(v => !areItemsEqual(v, item));
+        if (isUniq) {
+            result.push(item);
+        }
+    }
+    return result;
+}
+
+export { uniqWith };
Index: node_modules/es-toolkit/dist/array/unzip.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/unzip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unzip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Gathers elements in the same position in an internal array
+ * from a grouped array of elements and returns them as a new array.
+ *
+ * @template T - The type of elements in the nested array.
+ * @param {Array<[...T]>} zipped - The nested array to unzip.
+ * @returns {Unzip<T>} A new array of unzipped elements.
+ *
+ * @example
+ * const zipped = [['a', true, 1],['b', false, 2]];
+ * const result = unzip(zipped);
+ * // result will be [['a', 'b'], [true, false], [1, 2]]
+ */
+declare function unzip<T extends unknown[]>(zipped: ReadonlyArray<[...T]>): Unzip<T>;
+type Unzip<K extends unknown[]> = {
+    [I in keyof K]: Array<K[I]>;
+};
+
+export { unzip };
Index: node_modules/es-toolkit/dist/array/unzip.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/unzip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unzip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Gathers elements in the same position in an internal array
+ * from a grouped array of elements and returns them as a new array.
+ *
+ * @template T - The type of elements in the nested array.
+ * @param {Array<[...T]>} zipped - The nested array to unzip.
+ * @returns {Unzip<T>} A new array of unzipped elements.
+ *
+ * @example
+ * const zipped = [['a', true, 1],['b', false, 2]];
+ * const result = unzip(zipped);
+ * // result will be [['a', 'b'], [true, false], [1, 2]]
+ */
+declare function unzip<T extends unknown[]>(zipped: ReadonlyArray<[...T]>): Unzip<T>;
+type Unzip<K extends unknown[]> = {
+    [I in keyof K]: Array<K[I]>;
+};
+
+export { unzip };
Index: node_modules/es-toolkit/dist/array/unzip.js
===================================================================
--- node_modules/es-toolkit/dist/array/unzip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unzip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function unzip(zipped) {
+    let maxLen = 0;
+    for (let i = 0; i < zipped.length; i++) {
+        if (zipped[i].length > maxLen) {
+            maxLen = zipped[i].length;
+        }
+    }
+    const result = new Array(maxLen);
+    for (let i = 0; i < maxLen; i++) {
+        result[i] = new Array(zipped.length);
+        for (let j = 0; j < zipped.length; j++) {
+            result[i][j] = zipped[j][i];
+        }
+    }
+    return result;
+}
+
+exports.unzip = unzip;
Index: node_modules/es-toolkit/dist/array/unzip.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/unzip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unzip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+function unzip(zipped) {
+    let maxLen = 0;
+    for (let i = 0; i < zipped.length; i++) {
+        if (zipped[i].length > maxLen) {
+            maxLen = zipped[i].length;
+        }
+    }
+    const result = new Array(maxLen);
+    for (let i = 0; i < maxLen; i++) {
+        result[i] = new Array(zipped.length);
+        for (let j = 0; j < zipped.length; j++) {
+            result[i][j] = zipped[j][i];
+        }
+    }
+    return result;
+}
+
+export { unzip };
Index: node_modules/es-toolkit/dist/array/unzipWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/unzipWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unzipWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Unzips an array of arrays, applying an `iteratee` function to regrouped elements.
+ *
+ * @template T, R
+ * @param {T[][]} target - The nested array to unzip. This is an array of arrays,
+ * where each inner array contains elements to be unzipped.
+ * @param {(...args: T[]) => R} iteratee - A function to transform the unzipped elements.
+ * @returns {R[]} A new array of unzipped and transformed elements.
+ *
+ * @example
+ * const nestedArray = [[1, 2], [3, 4], [5, 6]];
+ * const result = unzipWith(nestedArray, (item, item2, item3) => item + item2 + item3);
+ * // result will be [9, 12]
+ */
+declare function unzipWith<T, R>(target: readonly T[][], iteratee: (...args: T[]) => R): R[];
+
+export { unzipWith };
Index: node_modules/es-toolkit/dist/array/unzipWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/unzipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unzipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Unzips an array of arrays, applying an `iteratee` function to regrouped elements.
+ *
+ * @template T, R
+ * @param {T[][]} target - The nested array to unzip. This is an array of arrays,
+ * where each inner array contains elements to be unzipped.
+ * @param {(...args: T[]) => R} iteratee - A function to transform the unzipped elements.
+ * @returns {R[]} A new array of unzipped and transformed elements.
+ *
+ * @example
+ * const nestedArray = [[1, 2], [3, 4], [5, 6]];
+ * const result = unzipWith(nestedArray, (item, item2, item3) => item + item2 + item3);
+ * // result will be [9, 12]
+ */
+declare function unzipWith<T, R>(target: readonly T[][], iteratee: (...args: T[]) => R): R[];
+
+export { unzipWith };
Index: node_modules/es-toolkit/dist/array/unzipWith.js
===================================================================
--- node_modules/es-toolkit/dist/array/unzipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unzipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function unzipWith(target, iteratee) {
+    const maxLength = Math.max(...target.map(innerArray => innerArray.length));
+    const result = new Array(maxLength);
+    for (let i = 0; i < maxLength; i++) {
+        const group = new Array(target.length);
+        for (let j = 0; j < target.length; j++) {
+            group[j] = target[j][i];
+        }
+        result[i] = iteratee(...group);
+    }
+    return result;
+}
+
+exports.unzipWith = unzipWith;
Index: node_modules/es-toolkit/dist/array/unzipWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/unzipWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/unzipWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+function unzipWith(target, iteratee) {
+    const maxLength = Math.max(...target.map(innerArray => innerArray.length));
+    const result = new Array(maxLength);
+    for (let i = 0; i < maxLength; i++) {
+        const group = new Array(target.length);
+        for (let j = 0; j < target.length; j++) {
+            group[j] = target[j][i];
+        }
+        result[i] = iteratee(...group);
+    }
+    return result;
+}
+
+export { unzipWith };
Index: node_modules/es-toolkit/dist/array/windowed.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/windowed.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/windowed.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+/**
+ * Options for the windowed function.
+ *
+ * @interface WindowedOptions
+ * @property {boolean} [partialWindows=false] - Whether to include partial windows at the end of the array.
+ */
+interface WindowedOptions {
+    /**
+     * Whether to include partial windows at the end of the array.
+     *
+     * By default, `windowed` only includes full windows in the result,
+     * ignoring any leftover elements that can't form a full window.
+     *
+     * If `partialWindows` is true, the function will also include these smaller, partial windows at the end of the result.
+     */
+    partialWindows?: boolean;
+}
+/**
+ * Creates an array of sub-arrays (windows) from the input array, each of the specified size.
+ * The windows can overlap depending on the step size provided.
+ *
+ * By default, only full windows are included in the result, and any leftover elements that can't form a full window are ignored.
+ *
+ * If the `partialWindows` option is set to true in the options object, the function will also include partial windows at the end of the result.
+ * Partial windows are smaller sub-arrays created when there aren't enough elements left in the input array to form a full window.
+ *
+ * @template T
+ * @param {readonly T[]} arr - The input array to create windows from.
+ * @param {number} size - The size of each window. Must be a positive integer.
+ * @param {number} [step=1] - The step size between the start of each window. Must be a positive integer.
+ * @param {WindowedOptions} [options={}] - Options object to configure the behavior of the function.
+ * @param {boolean} [options.partialWindows=false] - Whether to include partial windows at the end of the array.
+ * @returns {T[][]} An array of windows (sub-arrays) created from the input array.
+ * @throws {Error} If the size or step is not a positive integer.
+ *
+ * @example
+ * windowed([1, 2, 3, 4], 2);
+ * // => [[1, 2], [2, 3], [3, 4]]
+ *
+ * @example
+ * windowed([1, 2, 3, 4, 5, 6], 3, 2);
+ * // => [[1, 2, 3], [3, 4, 5]]
+ *
+ * @example
+ * windowed([1, 2, 3, 4, 5, 6], 3, 2, { partialWindows: true });
+ * // => [[1, 2, 3], [3, 4, 5], [5, 6]]
+ */
+declare function windowed<T>(arr: readonly T[], size: number, step?: number, { partialWindows }?: WindowedOptions): T[][];
+
+export { type WindowedOptions, windowed };
Index: node_modules/es-toolkit/dist/array/windowed.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/windowed.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/windowed.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+/**
+ * Options for the windowed function.
+ *
+ * @interface WindowedOptions
+ * @property {boolean} [partialWindows=false] - Whether to include partial windows at the end of the array.
+ */
+interface WindowedOptions {
+    /**
+     * Whether to include partial windows at the end of the array.
+     *
+     * By default, `windowed` only includes full windows in the result,
+     * ignoring any leftover elements that can't form a full window.
+     *
+     * If `partialWindows` is true, the function will also include these smaller, partial windows at the end of the result.
+     */
+    partialWindows?: boolean;
+}
+/**
+ * Creates an array of sub-arrays (windows) from the input array, each of the specified size.
+ * The windows can overlap depending on the step size provided.
+ *
+ * By default, only full windows are included in the result, and any leftover elements that can't form a full window are ignored.
+ *
+ * If the `partialWindows` option is set to true in the options object, the function will also include partial windows at the end of the result.
+ * Partial windows are smaller sub-arrays created when there aren't enough elements left in the input array to form a full window.
+ *
+ * @template T
+ * @param {readonly T[]} arr - The input array to create windows from.
+ * @param {number} size - The size of each window. Must be a positive integer.
+ * @param {number} [step=1] - The step size between the start of each window. Must be a positive integer.
+ * @param {WindowedOptions} [options={}] - Options object to configure the behavior of the function.
+ * @param {boolean} [options.partialWindows=false] - Whether to include partial windows at the end of the array.
+ * @returns {T[][]} An array of windows (sub-arrays) created from the input array.
+ * @throws {Error} If the size or step is not a positive integer.
+ *
+ * @example
+ * windowed([1, 2, 3, 4], 2);
+ * // => [[1, 2], [2, 3], [3, 4]]
+ *
+ * @example
+ * windowed([1, 2, 3, 4, 5, 6], 3, 2);
+ * // => [[1, 2, 3], [3, 4, 5]]
+ *
+ * @example
+ * windowed([1, 2, 3, 4, 5, 6], 3, 2, { partialWindows: true });
+ * // => [[1, 2, 3], [3, 4, 5], [5, 6]]
+ */
+declare function windowed<T>(arr: readonly T[], size: number, step?: number, { partialWindows }?: WindowedOptions): T[][];
+
+export { type WindowedOptions, windowed };
Index: node_modules/es-toolkit/dist/array/windowed.js
===================================================================
--- node_modules/es-toolkit/dist/array/windowed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/windowed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function windowed(arr, size, step = 1, { partialWindows = false } = {}) {
+    if (size <= 0 || !Number.isInteger(size)) {
+        throw new Error('Size must be a positive integer.');
+    }
+    if (step <= 0 || !Number.isInteger(step)) {
+        throw new Error('Step must be a positive integer.');
+    }
+    const result = [];
+    const end = partialWindows ? arr.length : arr.length - size + 1;
+    for (let i = 0; i < end; i += step) {
+        result.push(arr.slice(i, i + size));
+    }
+    return result;
+}
+
+exports.windowed = windowed;
Index: node_modules/es-toolkit/dist/array/windowed.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/windowed.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/windowed.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+function windowed(arr, size, step = 1, { partialWindows = false } = {}) {
+    if (size <= 0 || !Number.isInteger(size)) {
+        throw new Error('Size must be a positive integer.');
+    }
+    if (step <= 0 || !Number.isInteger(step)) {
+        throw new Error('Step must be a positive integer.');
+    }
+    const result = [];
+    const end = partialWindows ? arr.length : arr.length - size + 1;
+    for (let i = 0; i < end; i += step) {
+        result.push(arr.slice(i, i + size));
+    }
+    return result;
+}
+
+export { windowed };
Index: node_modules/es-toolkit/dist/array/without.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/without.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/without.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Creates an array that excludes all specified values.
+ *
+ * It correctly excludes `NaN`, as it compares values using [SameValueZero](https://tc39.es/ecma262/multipage/abstract-operations.html#sec-samevaluezero).
+ *
+ * @template T The type of elements in the array.
+ * @param {T[]} array - The array to filter.
+ * @param {...T[]} values - The values to exclude.
+ * @returns {T[]} A new array without the specified values.
+ *
+ * @example
+ * // Removes the specified values from the array
+ * without([1, 2, 3, 4, 5], 2, 4);
+ * // Returns: [1, 3, 5]
+ *
+ * @example
+ * // Removes specified string values from the array
+ * without(['a', 'b', 'c', 'a'], 'a');
+ * // Returns: ['b', 'c']
+ */
+declare function without<T>(array: readonly T[], ...values: T[]): T[];
+
+export { without };
Index: node_modules/es-toolkit/dist/array/without.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/without.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/without.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Creates an array that excludes all specified values.
+ *
+ * It correctly excludes `NaN`, as it compares values using [SameValueZero](https://tc39.es/ecma262/multipage/abstract-operations.html#sec-samevaluezero).
+ *
+ * @template T The type of elements in the array.
+ * @param {T[]} array - The array to filter.
+ * @param {...T[]} values - The values to exclude.
+ * @returns {T[]} A new array without the specified values.
+ *
+ * @example
+ * // Removes the specified values from the array
+ * without([1, 2, 3, 4, 5], 2, 4);
+ * // Returns: [1, 3, 5]
+ *
+ * @example
+ * // Removes specified string values from the array
+ * without(['a', 'b', 'c', 'a'], 'a');
+ * // Returns: ['b', 'c']
+ */
+declare function without<T>(array: readonly T[], ...values: T[]): T[];
+
+export { without };
Index: node_modules/es-toolkit/dist/array/without.js
===================================================================
--- node_modules/es-toolkit/dist/array/without.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/without.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const difference = require('./difference.js');
+
+function without(array, ...values) {
+    return difference.difference(array, values);
+}
+
+exports.without = without;
Index: node_modules/es-toolkit/dist/array/without.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/without.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/without.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { difference } from './difference.mjs';
+
+function without(array, ...values) {
+    return difference(array, values);
+}
+
+export { without };
Index: node_modules/es-toolkit/dist/array/xor.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/xor.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xor.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Computes the symmetric difference between two arrays. The symmetric difference is the set of elements
+ * which are in either of the arrays, but not in their intersection.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr1 - The first array.
+ * @param {T[]} arr2 - The second array.
+ * @returns {T[]} An array containing the elements that are present in either `arr1` or `arr2` but not in both.
+ *
+ * @example
+ * // Returns [1, 2, 5, 6]
+ * xor([1, 2, 3, 4], [3, 4, 5, 6]);
+ *
+ * @example
+ * // Returns ['a', 'c']
+ * xor(['a', 'b'], ['b', 'c']);
+ */
+declare function xor<T>(arr1: readonly T[], arr2: readonly T[]): T[];
+
+export { xor };
Index: node_modules/es-toolkit/dist/array/xor.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/xor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Computes the symmetric difference between two arrays. The symmetric difference is the set of elements
+ * which are in either of the arrays, but not in their intersection.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} arr1 - The first array.
+ * @param {T[]} arr2 - The second array.
+ * @returns {T[]} An array containing the elements that are present in either `arr1` or `arr2` but not in both.
+ *
+ * @example
+ * // Returns [1, 2, 5, 6]
+ * xor([1, 2, 3, 4], [3, 4, 5, 6]);
+ *
+ * @example
+ * // Returns ['a', 'c']
+ * xor(['a', 'b'], ['b', 'c']);
+ */
+declare function xor<T>(arr1: readonly T[], arr2: readonly T[]): T[];
+
+export { xor };
Index: node_modules/es-toolkit/dist/array/xor.js
===================================================================
--- node_modules/es-toolkit/dist/array/xor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const difference = require('./difference.js');
+const intersection = require('./intersection.js');
+const union = require('./union.js');
+
+function xor(arr1, arr2) {
+    return difference.difference(union.union(arr1, arr2), intersection.intersection(arr1, arr2));
+}
+
+exports.xor = xor;
Index: node_modules/es-toolkit/dist/array/xor.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/xor.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xor.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { difference } from './difference.mjs';
+import { intersection } from './intersection.mjs';
+import { union } from './union.mjs';
+
+function xor(arr1, arr2) {
+    return difference(union(arr1, arr2), intersection(arr1, arr2));
+}
+
+export { xor };
Index: node_modules/es-toolkit/dist/array/xorBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/xorBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xorBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Computes the symmetric difference between two arrays using a custom mapping function.
+ * The symmetric difference is the set of elements which are in either of the arrays,
+ * but not in their intersection, determined by the result of the mapping function.
+ *
+ * @template T - Type of elements in the input arrays.
+ * @template U - Type of the values returned by the mapping function.
+ *
+ * @param {T[]} arr1 - The first array.
+ * @param {T[]} arr2 - The second array.
+ * @param {(item: T) => U} mapper - The function to map array elements to comparison values.
+ * @returns {T[]} An array containing the elements that are present in either `arr1` or `arr2` but not in both, based on the values returned by the mapping function.
+ *
+ * @example
+ * // Custom mapping function for objects with an 'id' property
+ * const idMapper = obj => obj.id;
+ * xorBy([{ id: 1 }, { id: 2 }], [{ id: 2 }, { id: 3 }], idMapper);
+ * // Returns [{ id: 1 }, { id: 3 }]
+ */
+declare function xorBy<T, U>(arr1: readonly T[], arr2: readonly T[], mapper: (item: T) => U): T[];
+
+export { xorBy };
Index: node_modules/es-toolkit/dist/array/xorBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/xorBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xorBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Computes the symmetric difference between two arrays using a custom mapping function.
+ * The symmetric difference is the set of elements which are in either of the arrays,
+ * but not in their intersection, determined by the result of the mapping function.
+ *
+ * @template T - Type of elements in the input arrays.
+ * @template U - Type of the values returned by the mapping function.
+ *
+ * @param {T[]} arr1 - The first array.
+ * @param {T[]} arr2 - The second array.
+ * @param {(item: T) => U} mapper - The function to map array elements to comparison values.
+ * @returns {T[]} An array containing the elements that are present in either `arr1` or `arr2` but not in both, based on the values returned by the mapping function.
+ *
+ * @example
+ * // Custom mapping function for objects with an 'id' property
+ * const idMapper = obj => obj.id;
+ * xorBy([{ id: 1 }, { id: 2 }], [{ id: 2 }, { id: 3 }], idMapper);
+ * // Returns [{ id: 1 }, { id: 3 }]
+ */
+declare function xorBy<T, U>(arr1: readonly T[], arr2: readonly T[], mapper: (item: T) => U): T[];
+
+export { xorBy };
Index: node_modules/es-toolkit/dist/array/xorBy.js
===================================================================
--- node_modules/es-toolkit/dist/array/xorBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xorBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const differenceBy = require('./differenceBy.js');
+const intersectionBy = require('./intersectionBy.js');
+const unionBy = require('./unionBy.js');
+
+function xorBy(arr1, arr2, mapper) {
+    const union = unionBy.unionBy(arr1, arr2, mapper);
+    const intersection = intersectionBy.intersectionBy(arr1, arr2, mapper);
+    return differenceBy.differenceBy(union, intersection, mapper);
+}
+
+exports.xorBy = xorBy;
Index: node_modules/es-toolkit/dist/array/xorBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/xorBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xorBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { differenceBy } from './differenceBy.mjs';
+import { intersectionBy } from './intersectionBy.mjs';
+import { unionBy } from './unionBy.mjs';
+
+function xorBy(arr1, arr2, mapper) {
+    const union = unionBy(arr1, arr2, mapper);
+    const intersection = intersectionBy(arr1, arr2, mapper);
+    return differenceBy(union, intersection, mapper);
+}
+
+export { xorBy };
Index: node_modules/es-toolkit/dist/array/xorWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/xorWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xorWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Computes the symmetric difference between two arrays using a custom equality function.
+ * The symmetric difference is the set of elements which are in either of the arrays,
+ * but not in their intersection.
+ *
+ * @template T - Type of elements in the input arrays.
+ *
+ * @param {T[]} arr1 - The first array.
+ * @param {T[]} arr2 - The second array.
+ * @param {(item1: T, item2: T) => boolean} areElementsEqual - The custom equality function to compare elements.
+ * @returns {T[]} An array containing the elements that are present in either `arr1` or `arr2` but not in both, based on the custom equality function.
+ *
+ * @example
+ * // Custom equality function for objects with an 'id' property
+ * const areObjectsEqual = (a, b) => a.id === b.id;
+ * xorWith([{ id: 1 }, { id: 2 }], [{ id: 2 }, { id: 3 }], areObjectsEqual);
+ * // Returns [{ id: 1 }, { id: 3 }]
+ */
+declare function xorWith<T>(arr1: readonly T[], arr2: readonly T[], areElementsEqual: (item1: T, item2: T) => boolean): T[];
+
+export { xorWith };
Index: node_modules/es-toolkit/dist/array/xorWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/xorWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xorWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Computes the symmetric difference between two arrays using a custom equality function.
+ * The symmetric difference is the set of elements which are in either of the arrays,
+ * but not in their intersection.
+ *
+ * @template T - Type of elements in the input arrays.
+ *
+ * @param {T[]} arr1 - The first array.
+ * @param {T[]} arr2 - The second array.
+ * @param {(item1: T, item2: T) => boolean} areElementsEqual - The custom equality function to compare elements.
+ * @returns {T[]} An array containing the elements that are present in either `arr1` or `arr2` but not in both, based on the custom equality function.
+ *
+ * @example
+ * // Custom equality function for objects with an 'id' property
+ * const areObjectsEqual = (a, b) => a.id === b.id;
+ * xorWith([{ id: 1 }, { id: 2 }], [{ id: 2 }, { id: 3 }], areObjectsEqual);
+ * // Returns [{ id: 1 }, { id: 3 }]
+ */
+declare function xorWith<T>(arr1: readonly T[], arr2: readonly T[], areElementsEqual: (item1: T, item2: T) => boolean): T[];
+
+export { xorWith };
Index: node_modules/es-toolkit/dist/array/xorWith.js
===================================================================
--- node_modules/es-toolkit/dist/array/xorWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xorWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const differenceWith = require('./differenceWith.js');
+const intersectionWith = require('./intersectionWith.js');
+const unionWith = require('./unionWith.js');
+
+function xorWith(arr1, arr2, areElementsEqual) {
+    const union = unionWith.unionWith(arr1, arr2, areElementsEqual);
+    const intersection = intersectionWith.intersectionWith(arr1, arr2, areElementsEqual);
+    return differenceWith.differenceWith(union, intersection, areElementsEqual);
+}
+
+exports.xorWith = xorWith;
Index: node_modules/es-toolkit/dist/array/xorWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/xorWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/xorWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { differenceWith } from './differenceWith.mjs';
+import { intersectionWith } from './intersectionWith.mjs';
+import { unionWith } from './unionWith.mjs';
+
+function xorWith(arr1, arr2, areElementsEqual) {
+    const union = unionWith(arr1, arr2, areElementsEqual);
+    const intersection = intersectionWith(arr1, arr2, areElementsEqual);
+    return differenceWith(union, intersection, areElementsEqual);
+}
+
+export { xorWith };
Index: node_modules/es-toolkit/dist/array/zip.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/zip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,106 @@
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T
+ * @param {T[]} arr1 - The first array to zip.
+ * @returns {Array<[T]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const result = zip(arr1);
+ * // result will be [[1], [2], [3]]
+ */
+declare function zip<T>(arr1: readonly T[]): Array<[T]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @returns {Array<[T, U]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const result = zip(arr1, arr2);
+ * // result will be [[1, 'a'], [2, 'b'], [3, 'c']]
+ */
+declare function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {V[]} arr3 - The third array to zip.
+ * @returns {Array<[T, U, V]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const result = zip(arr1, arr2, arr3);
+ * // result will be [[1, 'a', true], [2, 'b', false], [3, 'c', undefined]]
+ */
+declare function zip<T, U, V>(arr1: readonly T[], arr2: readonly U[], arr3: readonly V[]): Array<[T, U, V]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V, W
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {V[]} arr3 - The third array to zip.
+ * @param {W[]} arr4 - The fourth array to zip.
+ * @returns {Array<[T, U, V, W]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const arr4 = [null, null, null];
+ * const result = zip(arr1, arr2, arr3, arr4);
+ * // result will be [[1, 'a', true, null], [2, 'b', false, null], [3, 'c', undefined, null]]
+ */
+declare function zip<T, U, V, W>(arr1: readonly T[], arr2: readonly U[], arr3: readonly V[], arr4: readonly W[]): Array<[T, U, V, W]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T
+ * @param {...Array<readonly T[]>} arrs - The arrays to zip together.
+ * @returns {T[][]} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const result = zip(arr1, arr2, arr3);
+ * // result will be [[1, 'a', true], [2, 'b', false], [3, 'c', undefined]]
+ */
+declare function zip<T>(...arrs: Array<readonly T[]>): T[][];
+
+export { zip };
Index: node_modules/es-toolkit/dist/array/zip.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/zip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,106 @@
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T
+ * @param {T[]} arr1 - The first array to zip.
+ * @returns {Array<[T]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const result = zip(arr1);
+ * // result will be [[1], [2], [3]]
+ */
+declare function zip<T>(arr1: readonly T[]): Array<[T]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @returns {Array<[T, U]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const result = zip(arr1, arr2);
+ * // result will be [[1, 'a'], [2, 'b'], [3, 'c']]
+ */
+declare function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {V[]} arr3 - The third array to zip.
+ * @returns {Array<[T, U, V]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const result = zip(arr1, arr2, arr3);
+ * // result will be [[1, 'a', true], [2, 'b', false], [3, 'c', undefined]]
+ */
+declare function zip<T, U, V>(arr1: readonly T[], arr2: readonly U[], arr3: readonly V[]): Array<[T, U, V]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V, W
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {V[]} arr3 - The third array to zip.
+ * @param {W[]} arr4 - The fourth array to zip.
+ * @returns {Array<[T, U, V, W]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const arr4 = [null, null, null];
+ * const result = zip(arr1, arr2, arr3, arr4);
+ * // result will be [[1, 'a', true, null], [2, 'b', false, null], [3, 'c', undefined, null]]
+ */
+declare function zip<T, U, V, W>(arr1: readonly T[], arr2: readonly U[], arr3: readonly V[], arr4: readonly W[]): Array<[T, U, V, W]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T
+ * @param {...Array<readonly T[]>} arrs - The arrays to zip together.
+ * @returns {T[][]} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const result = zip(arr1, arr2, arr3);
+ * // result will be [[1, 'a', true], [2, 'b', false], [3, 'c', undefined]]
+ */
+declare function zip<T>(...arrs: Array<readonly T[]>): T[][];
+
+export { zip };
Index: node_modules/es-toolkit/dist/array/zip.js
===================================================================
--- node_modules/es-toolkit/dist/array/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function zip(...arrs) {
+    let rowCount = 0;
+    for (let i = 0; i < arrs.length; i++) {
+        if (arrs[i].length > rowCount) {
+            rowCount = arrs[i].length;
+        }
+    }
+    const columnCount = arrs.length;
+    const result = Array(rowCount);
+    for (let i = 0; i < rowCount; ++i) {
+        const row = Array(columnCount);
+        for (let j = 0; j < columnCount; ++j) {
+            row[j] = arrs[j][i];
+        }
+        result[i] = row;
+    }
+    return result;
+}
+
+exports.zip = zip;
Index: node_modules/es-toolkit/dist/array/zip.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/zip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+function zip(...arrs) {
+    let rowCount = 0;
+    for (let i = 0; i < arrs.length; i++) {
+        if (arrs[i].length > rowCount) {
+            rowCount = arrs[i].length;
+        }
+    }
+    const columnCount = arrs.length;
+    const result = Array(rowCount);
+    for (let i = 0; i < rowCount; ++i) {
+        const row = Array(columnCount);
+        for (let j = 0; j < columnCount; ++j) {
+            row[j] = arrs[j][i];
+        }
+        result[i] = row;
+    }
+    return result;
+}
+
+export { zip };
Index: node_modules/es-toolkit/dist/array/zipObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/zipObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zipObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Combines two arrays, one of property names and one of corresponding values, into a single object.
+ *
+ * This function takes two arrays: one containing property names and another containing corresponding values.
+ * It returns a new object where the property names from the first array are keys, and the corresponding elements
+ * from the second array are values. If the `keys` array is longer than the `values` array, the remaining keys will
+ * have `undefined` as their values.
+ *
+ * @template P - The type of elements in the array.
+ * @template V - The type of elements in the array.
+ * @param {P[]} keys - An array of property names.
+ * @param {V[]} values - An array of values corresponding to the property names.
+ * @returns {Record<P, V>} - A new object composed of the given property names and values.
+ *
+ * @example
+ * const keys = ['a', 'b', 'c'];
+ * const values = [1, 2, 3];
+ * const result = zipObject(keys, values);
+ * // result will be { a: 1, b: 2, c: 3 }
+ *
+ * const keys2 = ['a', 'b', 'c'];
+ * const values2 = [1, 2];
+ * const result2 = zipObject(keys2, values2);
+ * // result2 will be { a: 1, b: 2, c: undefined }
+ *
+ * const keys2 = ['a', 'b'];
+ * const values2 = [1, 2, 3];
+ * const result2 = zipObject(keys2, values2);
+ * // result2 will be { a: 1, b: 2 }
+ */
+declare function zipObject<P extends PropertyKey, V>(keys: readonly P[], values: readonly V[]): Record<P, V>;
+
+export { zipObject };
Index: node_modules/es-toolkit/dist/array/zipObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/zipObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zipObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Combines two arrays, one of property names and one of corresponding values, into a single object.
+ *
+ * This function takes two arrays: one containing property names and another containing corresponding values.
+ * It returns a new object where the property names from the first array are keys, and the corresponding elements
+ * from the second array are values. If the `keys` array is longer than the `values` array, the remaining keys will
+ * have `undefined` as their values.
+ *
+ * @template P - The type of elements in the array.
+ * @template V - The type of elements in the array.
+ * @param {P[]} keys - An array of property names.
+ * @param {V[]} values - An array of values corresponding to the property names.
+ * @returns {Record<P, V>} - A new object composed of the given property names and values.
+ *
+ * @example
+ * const keys = ['a', 'b', 'c'];
+ * const values = [1, 2, 3];
+ * const result = zipObject(keys, values);
+ * // result will be { a: 1, b: 2, c: 3 }
+ *
+ * const keys2 = ['a', 'b', 'c'];
+ * const values2 = [1, 2];
+ * const result2 = zipObject(keys2, values2);
+ * // result2 will be { a: 1, b: 2, c: undefined }
+ *
+ * const keys2 = ['a', 'b'];
+ * const values2 = [1, 2, 3];
+ * const result2 = zipObject(keys2, values2);
+ * // result2 will be { a: 1, b: 2 }
+ */
+declare function zipObject<P extends PropertyKey, V>(keys: readonly P[], values: readonly V[]): Record<P, V>;
+
+export { zipObject };
Index: node_modules/es-toolkit/dist/array/zipObject.js
===================================================================
--- node_modules/es-toolkit/dist/array/zipObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zipObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function zipObject(keys, values) {
+    const result = {};
+    for (let i = 0; i < keys.length; i++) {
+        result[keys[i]] = values[i];
+    }
+    return result;
+}
+
+exports.zipObject = zipObject;
Index: node_modules/es-toolkit/dist/array/zipObject.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/zipObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zipObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+function zipObject(keys, values) {
+    const result = {};
+    for (let i = 0; i < keys.length; i++) {
+        result[keys[i]] = values[i];
+    }
+    return result;
+}
+
+export { zipObject };
Index: node_modules/es-toolkit/dist/array/zipWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/array/zipWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zipWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,72 @@
+/**
+ * Combines multiple arrays into a single array using a custom combiner function.
+ *
+ * This function takes multiple arrays and a combiner function, and returns a new array where each element
+ * is the result of applying the combiner function to the corresponding elements of the input arrays.
+ *
+ * @template T - The type of elements in the first array.
+ * @template R - The type of elements in the resulting array.
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {(...items: T[]) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ *
+ * @example
+ * // Example usage with two arrays:
+ * const arr1 = [1, 2, 3];
+ * const arr2 = [4, 5, 6];
+ * const result = zipWith(arr1, arr2, (a, b) => a + b);
+ * // result will be [5, 7, 9]
+ *
+ * @example
+ * // Example usage with three arrays:
+ * const arr1 = [1, 2];
+ * const arr2 = [3, 4];
+ * const arr3 = [5, 6];
+ * const result = zipWith(arr1, arr2, arr3, (a, b, c) => `${a}${b}${c}`);
+ * // result will be [`135`, `246`]
+ */
+declare function zipWith<T, R>(arr1: readonly T[], combine: (item: T) => R): R[];
+/**
+ * Combines two arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template R - The type of elements in the resulting array.
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {(item1: T, item2: U) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, R>(arr1: readonly T[], arr2: readonly U[], combine: (item1: T, item2: U) => R): R[];
+/**
+ * Combines three arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template R - The type of elements in the resulting array.
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {V[]} arr3 - The third array to zip.
+ * @param {(item1: T, item2: U, item3: V) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, R>(arr1: readonly T[], arr2: readonly U[], arr3: readonly V[], combine: (item1: T, item2: U, item3: V) => R): R[];
+/**
+ * Combines four arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template W - The type of elements in the fourth array.
+ * @template R - The type of elements in the resulting array.
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {V[]} arr3 - The third array to zip.
+ * @param {W[]} arr4 - The fourth array to zip.
+ * @param {(item1: T, item2: U, item3: V, item4: W) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, W, R>(arr1: readonly T[], arr2: readonly U[], arr3: readonly V[], arr4: readonly W[], combine: (item1: T, item2: U, item3: V, item4: W) => R): R[];
+
+export { zipWith };
Index: node_modules/es-toolkit/dist/array/zipWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/array/zipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,72 @@
+/**
+ * Combines multiple arrays into a single array using a custom combiner function.
+ *
+ * This function takes multiple arrays and a combiner function, and returns a new array where each element
+ * is the result of applying the combiner function to the corresponding elements of the input arrays.
+ *
+ * @template T - The type of elements in the first array.
+ * @template R - The type of elements in the resulting array.
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {(...items: T[]) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ *
+ * @example
+ * // Example usage with two arrays:
+ * const arr1 = [1, 2, 3];
+ * const arr2 = [4, 5, 6];
+ * const result = zipWith(arr1, arr2, (a, b) => a + b);
+ * // result will be [5, 7, 9]
+ *
+ * @example
+ * // Example usage with three arrays:
+ * const arr1 = [1, 2];
+ * const arr2 = [3, 4];
+ * const arr3 = [5, 6];
+ * const result = zipWith(arr1, arr2, arr3, (a, b, c) => `${a}${b}${c}`);
+ * // result will be [`135`, `246`]
+ */
+declare function zipWith<T, R>(arr1: readonly T[], combine: (item: T) => R): R[];
+/**
+ * Combines two arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template R - The type of elements in the resulting array.
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {(item1: T, item2: U) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, R>(arr1: readonly T[], arr2: readonly U[], combine: (item1: T, item2: U) => R): R[];
+/**
+ * Combines three arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template R - The type of elements in the resulting array.
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {V[]} arr3 - The third array to zip.
+ * @param {(item1: T, item2: U, item3: V) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, R>(arr1: readonly T[], arr2: readonly U[], arr3: readonly V[], combine: (item1: T, item2: U, item3: V) => R): R[];
+/**
+ * Combines four arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template W - The type of elements in the fourth array.
+ * @template R - The type of elements in the resulting array.
+ * @param {T[]} arr1 - The first array to zip.
+ * @param {U[]} arr2 - The second array to zip.
+ * @param {V[]} arr3 - The third array to zip.
+ * @param {W[]} arr4 - The fourth array to zip.
+ * @param {(item1: T, item2: U, item3: V, item4: W) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, W, R>(arr1: readonly T[], arr2: readonly U[], arr3: readonly V[], arr4: readonly W[], combine: (item1: T, item2: U, item3: V, item4: W) => R): R[];
+
+export { zipWith };
Index: node_modules/es-toolkit/dist/array/zipWith.js
===================================================================
--- node_modules/es-toolkit/dist/array/zipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function zipWith(arr1, ...rest) {
+    const arrs = [arr1, ...rest.slice(0, -1)];
+    const combine = rest[rest.length - 1];
+    const maxIndex = Math.max(...arrs.map(arr => arr.length));
+    const result = Array(maxIndex);
+    for (let i = 0; i < maxIndex; i++) {
+        const elements = arrs.map(arr => arr[i]);
+        result[i] = combine(...elements);
+    }
+    return result;
+}
+
+exports.zipWith = zipWith;
Index: node_modules/es-toolkit/dist/array/zipWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/array/zipWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/array/zipWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+function zipWith(arr1, ...rest) {
+    const arrs = [arr1, ...rest.slice(0, -1)];
+    const combine = rest[rest.length - 1];
+    const maxIndex = Math.max(...arrs.map(arr => arr.length));
+    const result = Array(maxIndex);
+    for (let i = 0; i < maxIndex; i++) {
+        const elements = arrs.map(arr => arr[i]);
+        result[i] = combine(...elements);
+    }
+    return result;
+}
+
+export { zipWith };
Index: node_modules/es-toolkit/dist/browser.global.js
===================================================================
--- node_modules/es-toolkit/dist/browser.global.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/browser.global.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+var _=function(e){"use strict";function castArray(e){return 0===arguments.length?[]:Array.isArray(e)?e:[e]}function toArray$1(e){return Array.isArray(e)?e:Array.from(e)}function isArrayLike(e){return null!=e&&"function"!=typeof e&&function isLength$1(e){return Number.isSafeInteger(e)&&e>=0}(e.length)}function chunk(e,t=1){return 0!==(t=Math.max(Math.floor(t),0))&&isArrayLike(e)?function chunk$1(e,t){if(!Number.isInteger(t)||t<=0)throw new Error("Size must be an integer greater than zero.");const n=Math.ceil(e.length/t),r=Array(n);for(let i=0;i<n;i++){const n=i*t,o=n+t;r[i]=e.slice(n,o)}return r}(toArray$1(e),t):[]}function compact(e){return isArrayLike(e)?function compact$1(e){const t=[];for(let n=0;n<e.length;n++){const r=e[n];r&&t.push(r)}return t}(Array.from(e)):[]}function flatten$1(e,t=1){const n=[],r=Math.floor(t),recursive=(e,t)=>{for(let i=0;i<e.length;i++){const o=e[i];Array.isArray(o)&&t<r?recursive(o,t+1):n.push(o)}};recursive(e,0);return n}function concat(...e){return flatten$1(e)}function identity$1(e){return e}function isUnsafeProperty(e){return"__proto__"===e}function isDeepKey(e){switch(typeof e){case"number":case"symbol":return!1;case"string":return e.includes(".")||e.includes("[")||e.includes("]")}}function toKey(e){return"string"==typeof e||"symbol"==typeof e?e:Object.is(e?.valueOf?.(),-0)?"-0":String(e)}function toPath(e){const t=[],n=e.length;if(0===n)return t;let r=0,i="",o="",s=!1;if(46===e.charCodeAt(0)){t.push("");r++}for(;r<n;){const u=e[r];if(o)if("\\"===u&&r+1<n){r++;i+=e[r]}else u===o?o="":i+=u;else if(s)if('"'===u||"'"===u)o=u;else if("]"===u){s=!1;t.push(i);i=""}else i+=u;else if("["===u){s=!0;if(i){t.push(i);i=""}}else if("."===u){if(i){t.push(i);i=""}}else i+=u;r++}i&&t.push(i);return t}function get(e,t,n){if(null==e)return n;switch(typeof t){case"string":{if(isUnsafeProperty(t))return n;const r=e[t];return void 0===r?isDeepKey(t)?get(e,toPath(t),n):n:r}case"number":case"symbol":{"number"==typeof t&&(t=toKey(t));const r=e[t];return void 0===r?n:r}default:{if(Array.isArray(t))return function getWithPath(e,t,n){if(0===t.length)return n;let r=e;for(let e=0;e<t.length;e++){if(null==r)return n;if(isUnsafeProperty(t[e]))return n;r=r[t[e]]}if(void 0===r)return n;return r}(e,t,n);if(isUnsafeProperty(t=Object.is(t?.valueOf(),-0)?"-0":String(t)))return n;const r=e[t];return void 0===r?n:r}}}function property(e){return function(t){return get(t,e)}}function isObject(e){return null!==e&&("object"==typeof e||"function"==typeof e)}function isPrimitive(e){return null==e||"object"!=typeof e&&"function"!=typeof e}function eq(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function isMatchWith(e,t,n){return"function"!=typeof n?isMatch(e,t):isMatchWithInternal(e,t,(function doesMatch(e,t,r,i,o,s){const u=n(e,t,r,i,o,s);return void 0!==u?Boolean(u):isMatchWithInternal(e,t,doesMatch,s)}),new Map)}function isMatchWithInternal(e,t,n,r){if(t===e)return!0;switch(typeof t){case"object":return function isObjectMatch(e,t,n,r){if(null==t)return!0;if(Array.isArray(t))return isArrayMatch(e,t,n,r);if(t instanceof Map)return function isMapMatch(e,t,n,r){if(0===t.size)return!0;if(!(e instanceof Map))return!1;for(const[i,o]of t.entries()){if(!1===n(e.get(i),o,i,e,t,r))return!1}return!0}(e,t,n,r);if(t instanceof Set)return function isSetMatch(e,t,n,r){if(0===t.size)return!0;if(!(e instanceof Set))return!1;return isArrayMatch([...e],[...t],n,r)}(e,t,n,r);const i=Object.keys(t);if(null==e)return 0===i.length;if(0===i.length)return!0;if(r&&r.has(t))return r.get(t)===e;r&&r.set(t,e);try{for(let o=0;o<i.length;o++){const s=i[o];if(!isPrimitive(e)&&!(s in e))return!1;if(void 0===t[s]&&void 0!==e[s])return!1;if(null===t[s]&&null!==e[s])return!1;if(!n(e[s],t[s],s,e,t,r))return!1}return!0}finally{r&&r.delete(t)}}(e,t,n,r);case"function":return Object.keys(t).length>0?isMatchWithInternal(e,{...t},n,r):eq(e,t);default:return isObject(e)?"string"!=typeof t||""===t:eq(e,t)}}function isArrayMatch(e,t,n,r){if(0===t.length)return!0;if(!Array.isArray(e))return!1;const i=new Set;for(let o=0;o<t.length;o++){const s=t[o];let u=!1;for(let a=0;a<e.length;a++){if(i.has(a))continue;let c=!1;n(e[a],s,o,e,t,r)&&(c=!0);if(c){i.add(a);u=!0;break}}if(!u)return!1}return!0}function isMatch(e,t){return isMatchWith(e,t,(()=>{}))}function getSymbols(e){return Object.getOwnPropertySymbols(e).filter((t=>Object.prototype.propertyIsEnumerable.call(e,t)))}function getTag(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const t="[object RegExp]",n="[object String]",r="[object Number]",i="[object Boolean]",o="[object Arguments]",s="[object Symbol]",u="[object Date]",a="[object Map]",c="[object Set]",l="[object Array]",f="[object Function]",p="[object ArrayBuffer]",y="[object Object]",h="[object Error]",g="[object DataView]",d="[object Uint8Array]",m="[object Uint8ClampedArray]",b="[object Uint16Array]",A="[object Uint32Array]",$="[object BigUint64Array]",j="[object Int8Array]",O="[object Int16Array]",w="[object Int32Array]",k="[object BigInt64Array]",I="[object Float32Array]",v="[object Float64Array]";function isTypedArray$1(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function cloneDeepWithImpl(e,f,h,$=new Map,k=void 0){const S=k?.(e,f,h,$);if(void 0!==S)return S;if(isPrimitive(e))return e;if($.has(e))return $.get(e);if(Array.isArray(e)){const t=new Array(e.length);$.set(e,t);for(let n=0;n<e.length;n++)t[n]=cloneDeepWithImpl(e[n],n,h,$,k);Object.hasOwn(e,"index")&&(t.index=e.index);Object.hasOwn(e,"input")&&(t.input=e.input);return t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp){const t=new RegExp(e.source,e.flags);t.lastIndex=e.lastIndex;return t}if(e instanceof Map){const t=new Map;$.set(e,t);for(const[n,r]of e)t.set(n,cloneDeepWithImpl(r,n,h,$,k));return t}if(e instanceof Set){const t=new Set;$.set(e,t);for(const n of e)t.add(cloneDeepWithImpl(n,void 0,h,$,k));return t}if("undefined"!=typeof Buffer&&Buffer.isBuffer(e))return e.subarray();if(isTypedArray$1(e)){const t=new(Object.getPrototypeOf(e).constructor)(e.length);$.set(e,t);for(let n=0;n<e.length;n++)t[n]=cloneDeepWithImpl(e[n],n,h,$,k);return t}if(e instanceof ArrayBuffer||"undefined"!=typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer)return e.slice(0);if(e instanceof DataView){const t=new DataView(e.buffer.slice(0),e.byteOffset,e.byteLength);$.set(e,t);copyProperties(t,e,h,$,k);return t}if("undefined"!=typeof File&&e instanceof File){const t=new File([e],e.name,{type:e.type});$.set(e,t);copyProperties(t,e,h,$,k);return t}if(e instanceof Blob){const t=new Blob([e],{type:e.type});$.set(e,t);copyProperties(t,e,h,$,k);return t}if(e instanceof Error){const t=new e.constructor;$.set(e,t);t.message=e.message;t.name=e.name;t.stack=e.stack;t.cause=e.cause;copyProperties(t,e,h,$,k);return t}if("object"==typeof e&&function isCloneableObject$1(e){switch(getTag(e)){case o:case l:case p:case g:case i:case u:case I:case v:case j:case O:case w:case a:case r:case y:case t:case c:case n:case s:case d:case m:case b:case A:return!0;default:return!1}}(e)){const t=Object.create(Object.getPrototypeOf(e));$.set(e,t);copyProperties(t,e,h,$,k);return t}return e}function copyProperties(e,t,n=e,r,i){const o=[...Object.keys(t),...getSymbols(t)];for(let s=0;s<o.length;s++){const u=o[s],a=Object.getOwnPropertyDescriptor(e,u);(null==a||a.writable)&&(e[u]=cloneDeepWithImpl(t[u],u,n,r,i))}}function cloneDeep$1(e){return cloneDeepWithImpl(e,void 0,e,new Map,void 0)}function matches(e){e=cloneDeep$1(e);return t=>isMatch(t,e)}function cloneDeepWith(e,t){return function cloneDeepWith$1(e,t){return cloneDeepWithImpl(e,void 0,e,new Map,t)}(e,((s,u,a,c)=>{const l=t?.(s,u,a,c);if(void 0!==l)return l;if("object"==typeof e)switch(Object.prototype.toString.call(e)){case r:case n:case i:{const t=new e.constructor(e?.valueOf());copyProperties(t,e);return t}case o:{const t={};copyProperties(t,e);t.length=e.length;t[Symbol.iterator]=e[Symbol.iterator];return t}default:return}}))}function cloneDeep(e){return cloneDeepWith(e)}const S=/^(?:0|[1-9]\d*)$/;function isIndex(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e<t;case"symbol":return!1;case"string":return S.test(e)}}function isArguments(e){return null!==e&&"object"==typeof e&&"[object Arguments]"===getTag(e)}function has(e,t){let n;n=Array.isArray(t)?t:"string"==typeof t&&isDeepKey(t)&&null==e?.[t]?toPath(t):[t];if(0===n.length)return!1;let r=e;for(let e=0;e<n.length;e++){const t=n[e];if(null==r||!Object.hasOwn(r,t)){if(!((Array.isArray(r)||isArguments(r))&&isIndex(t)&&t<r.length))return!1}r=r[t]}return!0}function matchesProperty(e,t){switch(typeof e){case"object":Object.is(e?.valueOf(),-0)&&(e="-0");break;case"number":e=toKey(e)}t=cloneDeep(t);return function(n){const r=get(n,e);return void 0===r?has(n,e):void 0===t?void 0===r:isMatch(r,t)}}function iteratee(e){if(null==e)return identity$1;switch(typeof e){case"function":return e;case"object":return Array.isArray(e)&&2===e.length?matchesProperty(e[0],e[1]):matches(e);case"string":case"symbol":case"number":return property(e)}}function countBy(e,t){if(null==e)return{};const n=isArrayLike(e)?Array.from(e):Object.values(e),r=iteratee(t??void 0),i=Object.create(null);for(let e=0;e<n.length;e++){const t=r(n[e]);i[t]=(i[t]??0)+1}return i}function difference$1(e,t){const n=new Set(t);return e.filter((e=>!n.has(e)))}function isObjectLike(e){return"object"==typeof e&&null!==e}function isArrayLikeObject(e){return isObjectLike(e)&&isArrayLike(e)}function difference(e,...t){if(!isArrayLikeObject(e))return[];const n=toArray$1(e),r=[];for(let e=0;e<t.length;e++){const n=t[e];isArrayLikeObject(n)&&r.push(...Array.from(n))}return difference$1(n,r)}function last$1(e){return e[e.length-1]}function last(e){if(isArrayLike(e))return last$1(toArray$1(e))}function flattenArrayLike(e){const t=[];for(let n=0;n<e.length;n++){const r=e[n];if(isArrayLikeObject(r))for(let e=0;e<r.length;e++)t.push(r[e])}return t}function differenceBy(e,...t){if(!isArrayLikeObject(e))return[];const n=last(t),r=flattenArrayLike(t);return isArrayLikeObject(n)?difference$1(Array.from(e),r):function differenceBy$1(e,t,n){const r=new Set(t.map((e=>n(e))));return e.filter((e=>!r.has(n(e))))}(Array.from(e),r,iteratee(n))}function differenceWith(e,...t){if(!isArrayLikeObject(e))return[];const n=last(t),r=flattenArrayLike(t);return"function"==typeof n?function differenceWith$1(e,t,n){return e.filter((e=>t.every((t=>!n(e,t)))))}(Array.from(e),r,n):difference$1(Array.from(e),r)}function isSymbol$1(e){return"symbol"==typeof e||e instanceof Symbol}function toNumber(e){return isSymbol$1(e)?NaN:Number(e)}function toFinite(e){if(!e)return 0===e?e:0;if((e=toNumber(e))===1/0||e===-1/0){return(e<0?-1:1)*Number.MAX_VALUE}return e==e?e:0}function toInteger(e){const t=toFinite(e),n=t%1;return n?t-n:t}function drop(e,t=1,n){if(!isArrayLike(e))return[];t=n?1:toInteger(t);return function drop$1(e,t){t=Math.max(t,0);return e.slice(t)}(toArray$1(e),t)}function dropRight(e,t=1,n){if(!isArrayLike(e))return[];t=n?1:toInteger(t);return function dropRight$1(e,t){return 0===(t=Math.min(-t,0))?e.slice():e.slice(0,t)}(toArray$1(e),t)}function dropRightWhile$1(e,t){for(let n=e.length-1;n>=0;n--)if(!t(e[n],n,e))return e.slice(0,n+1);return[]}function dropRightWhile(e,t=identity$1){return isArrayLike(e)?function dropRightWhileImpl(e,t){switch(typeof t){case"function":return dropRightWhile$1(e,((e,n,r)=>Boolean(t(e,n,r))));case"object":if(Array.isArray(t)&&2===t.length){return dropRightWhile$1(e,matchesProperty(t[0],t[1]))}return dropRightWhile$1(e,matches(t));case"symbol":case"number":case"string":return dropRightWhile$1(e,property(t))}}(Array.from(e),t):[]}function dropWhile$1(e,t){const n=e.findIndex(((e,n,r)=>!t(e,n,r)));return-1===n?[]:e.slice(n)}function dropWhile(e,t=identity$1){return isArrayLike(e)?function dropWhileImpl(e,t){switch(typeof t){case"function":return dropWhile$1(e,((e,n,r)=>Boolean(t(e,n,r))));case"object":if(Array.isArray(t)&&2===t.length){return dropWhile$1(e,matchesProperty(t[0],t[1]))}return dropWhile$1(e,matches(t));case"number":case"symbol":case"string":return dropWhile$1(e,property(t))}}(toArray$1(e),t):[]}function range$1(e,t,n=1){if(null==t){t=e;e=0}if(!Number.isInteger(n)||0===n)throw new Error("The step value must be a non-zero integer.");const r=Math.max(Math.ceil((t-e)/n),0),i=new Array(r);for(let t=0;t<r;t++)i[t]=e+t*n;return i}function forEach(e,t=identity$1){if(!e)return e;const n=isArrayLike(e)||Array.isArray(e)?range$1(0,e.length):Object.keys(e);for(let r=0;r<n.length;r++){const i=n[r];if(!1===t(e[i],i,e))break}return e}function forEachRight(e,t=identity$1){if(!e)return e;const n=isArrayLike(e)?range$1(0,e.length):Object.keys(e);for(let r=n.length-1;r>=0;r--){const i=n[r];if(!1===t(e[i],i,e))break}return e}function isIterateeCall(e,t,n){return!!isObject(n)&&(!!("number"==typeof t&&isArrayLike(n)&&isIndex(t)&&t<n.length||"string"==typeof t&&t in n)&&eq(n[t],e))}function every(e,t,n){if(!e)return!0;n&&isIterateeCall(e,t,n)&&(t=void 0);t||(t=identity$1);let r;switch(typeof t){case"function":r=t;break;case"object":if(Array.isArray(t)&&2===t.length){r=matchesProperty(t[0],t[1])}else r=matches(t);break;case"symbol":case"number":case"string":r=property(t)}if(!isArrayLike(e)){const t=Object.keys(e);for(let n=0;n<t.length;n++){const i=t[n];if(!r(e[i],i,e))return!1}return!0}for(let t=0;t<e.length;t++)if(!r(e[t],t,e))return!1;return!0}function isString(e){return"string"==typeof e||e instanceof String}function fill(e,t,n=0,r=(e?e.length:0)){if(!isArrayLike(e))return[];if(isString(e))return e;(n=Math.floor(n))||(n=0);(r=Math.floor(r))||(r=0);return function fill$1(e,t,n=0,r=e.length){const i=e.length,o=Math.max(n>=0?n:i+n,0),s=Math.min(r>=0?r:i+r,i);for(let n=o;n<s;n++)e[n]=t;return e}(e,t,n,r)}function filter(e,t=identity$1){if(!e)return[];t=iteratee(t);if(!Array.isArray(e)){const n=[],r=Object.keys(e),i=isArrayLike(e)?e.length:r.length;for(let o=0;o<i;o++){const i=r[o],s=e[i];t(s,i,e)&&n.push(s)}return n}const n=[],r=e.length;for(let i=0;i<r;i++){const r=e[i];t(r,i,e)&&n.push(r)}return n}function find(e,t=identity$1,n=0){if(!e)return;n<0&&(n=Math.max(e.length+n,0));const r=iteratee(t);if("function"==typeof r&&!Array.isArray(e)){const t=Object.keys(e);for(let i=n;i<t.length;i++){const n=t[i],o=e[n];if(r(o,n,e))return o}return}return(Array.isArray(e)?e.slice(n):Object.values(e).slice(n)).find(r)}function findIndex(e,t,n=0){if(!e)return-1;n<0&&(n=Math.max(e.length+n,0));const r=Array.from(e).slice(n);let i=-1;switch(typeof t){case"function":i=r.findIndex(t);break;case"object":if(Array.isArray(t)&&2===t.length){const e=t[0],n=t[1];i=r.findIndex(matchesProperty(e,n))}else i=r.findIndex(matches(t));break;case"number":case"symbol":case"string":i=r.findIndex(property(t))}return-1===i?-1:i+n}function findLast(e,t=identity$1,n){if(!e)return;const r=Array.isArray(e)?e.length:Object.keys(e).length;n=(n=toInteger(n??r-1))<0?Math.max(r+n,0):Math.min(n,r-1);const i=iteratee(t);if("function"==typeof i&&!Array.isArray(e)){const t=Object.keys(e);for(let r=n;r>=0;r--){const n=t[r],o=e[n];if(i(o,n,e))return o}return}return(Array.isArray(e)?e.slice(0,n+1):Object.values(e).slice(0,n+1)).findLast(i)}function findLastIndex(e,t=identity$1,n=(e?e.length-1:0)){if(!e)return-1;n=n<0?Math.max(e.length+n,0):Math.min(n,e.length-1);const r=toArray$1(e).slice(0,n+1);switch(typeof t){case"function":return r.findLastIndex(t);case"object":if(Array.isArray(t)&&2===t.length){const e=t[0],n=t[1];return r.findLastIndex(matchesProperty(e,n))}return r.findLastIndex(matches(t));case"number":case"symbol":case"string":return r.findLastIndex(property(t))}}function head(e){if(isArrayLike(e))return function head$1(e){return e[0]}(toArray$1(e))}function flatten(e,t=1){const n=[],r=Math.floor(t);if(!isArrayLike(e))return n;const recursive=(e,t)=>{for(let i=0;i<e.length;i++){const o=e[i];t<r&&(Array.isArray(o)||Boolean(o?.[Symbol.isConcatSpreadable])||null!==o&&"object"==typeof o&&"[object Arguments]"===Object.prototype.toString.call(o))?Array.isArray(o)?recursive(o,t+1):recursive(Array.from(o),t+1):n.push(o)}};recursive(Array.from(e),0);return n}function flattenDepth(e,t=1){return flatten(e,t)}function map(e,t){if(!e)return[];const n=isArrayLike(e)||Array.isArray(e)?range$1(0,e.length):Object.keys(e),r=iteratee(t??identity$1),i=new Array(n.length);for(let t=0;t<n.length;t++){const o=n[t],s=e[o];i[t]=r(s,o,e)}return i}function isNil$1(e){return null==e}function flatMap(e,t){if(isNil$1(e))return[];return flattenDepth(isNil$1(t)?map(e):map(e,t),1)}function flatMapDepth(e,t=identity$1,n=1){if(null==e)return[];return flatten(map(e,iteratee(t)),n)}function flatMapDeep(e,t){return flatMapDepth(e,t,1/0)}function flattenDeep(e){return flattenDepth(e,1/0)}function groupBy(e,t){if(null==e)return{};return function groupBy$1(e,t){const n={};for(let r=0;r<e.length;r++){const i=e[r],o=t(i);Object.hasOwn(n,o)||(n[o]=[]);n[o].push(i)}return n}(isArrayLike(e)?Array.from(e):Object.values(e),iteratee(t??identity$1))}function includes(e,t,n,r){if(null==e)return!1;n=r||!n?0:toInteger(n);if(isString(e)){if(n>e.length||t instanceof RegExp)return!1;n<0&&(n=Math.max(0,e.length+n));return e.includes(t,n)}if(Array.isArray(e))return e.includes(t,n);const i=Object.keys(e);n<0&&(n=Math.max(0,i.length+n));for(let r=n;r<i.length;r++){if(eq(Reflect.get(e,i[r]),t))return!0}return!1}function indexOf(e,t,n){if(!isArrayLike(e))return-1;if(Number.isNaN(t)){(n=n??0)<0&&(n=Math.max(0,e.length+n));for(let t=n;t<e.length;t++)if(Number.isNaN(e[t]))return t;return-1}return Array.from(e).indexOf(t,n)}function initial(e){return isArrayLike(e)?function initial$1(e){return e.slice(0,-1)}(Array.from(e)):[]}function intersection$1(e,t){const n=new Set(t);return e.filter((e=>n.has(e)))}function uniq$1(e){return Array.from(new Set(e))}function intersection(...e){if(0===e.length)return[];if(!isArrayLikeObject(e[0]))return[];let t=uniq$1(Array.from(e[0]));for(let n=1;n<e.length;n++){const r=e[n];if(!isArrayLikeObject(r))return[];t=intersection$1(t,Array.from(r))}return t}function intersectionBy$1(e,t,n){const r=new Set(t.map(n));return e.filter((e=>r.has(n(e))))}function intersectionBy(e,...t){if(!isArrayLikeObject(e))return[];const n=last$1(t);if(void 0===n)return Array.from(e);let r=uniq$1(Array.from(e));const i=isArrayLikeObject(n)?t.length:t.length-1;for(let e=0;e<i;++e){const i=t[e];if(!isArrayLikeObject(i))return[];isArrayLikeObject(n)?r=intersectionBy$1(r,Array.from(i),identity$1):"function"==typeof n?r=intersectionBy$1(r,Array.from(i),(e=>n(e))):"string"==typeof n&&(r=intersectionBy$1(r,Array.from(i),property(n)))}return r}function intersectionWith$1(e,t,n){return e.filter((e=>t.some((t=>n(e,t)))))}function uniq(e){return isArrayLike(e)?uniq$1(Array.from(e)):[]}function intersectionWith(e,...t){if(null==e)return[];const n=last(t);let r=eq,i=uniq;if("function"==typeof n){r=n;i=uniqPreserve0;t.pop()}let o=i(Array.from(e));for(let e=0;e<t.length;++e){const n=t[e];if(null==n)return[];o=intersectionWith$1(o,Array.from(n),r)}return o}function uniqPreserve0(e){const t=[],n=new Set;for(let r=0;r<e.length;r++){const i=e[r];if(!n.has(i)){t.push(i);n.add(i)}}return t}function isBuffer$1(e){return"undefined"!=typeof Buffer&&Buffer.isBuffer(e)}function isPlainObject$1(e){if(!e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t))&&"[object Object]"===Object.prototype.toString.call(e)}function isEqualWith$1(e,t,n){return isEqualWithImpl(e,t,void 0,void 0,void 0,void 0,n)}function isEqualWithImpl(e,t,n,r,i,o,s){const u=s(e,t,n,r,i,o);if(void 0!==u)return u;if(typeof e==typeof t)switch(typeof e){case"bigint":case"string":case"boolean":case"symbol":case"undefined":case"function":return e===t;case"number":return e===t||Object.is(e,t);case"object":return areObjectsEqual(e,t,o,s)}return areObjectsEqual(e,t,o,s)}function areObjectsEqual(e,S,W,x){if(Object.is(e,S))return!0;let L=getTag(e),N=getTag(S);L===o&&(L=y);N===o&&(N=y);if(L!==N)return!1;switch(L){case n:return e.toString()===S.toString();case r:return eq(e.valueOf(),S.valueOf());case i:case u:case s:return Object.is(e.valueOf(),S.valueOf());case t:return e.source===S.source&&e.flags===S.flags;case f:return e===S}const B=(W=W??new Map).get(e),E=W.get(S);if(null!=B&&null!=E)return B===S;W.set(e,S);W.set(S,e);try{switch(L){case a:if(e.size!==S.size)return!1;for(const[t,n]of e.entries())if(!S.has(t)||!isEqualWithImpl(n,S.get(t),t,e,S,W,x))return!1;return!0;case c:{if(e.size!==S.size)return!1;const t=Array.from(e.values()),n=Array.from(S.values());for(let r=0;r<t.length;r++){const i=t[r],o=n.findIndex((t=>isEqualWithImpl(i,t,void 0,e,S,W,x)));if(-1===o)return!1;n.splice(o,1)}return!0}case l:case d:case m:case b:case A:case $:case j:case O:case w:case k:case I:case v:if("undefined"!=typeof Buffer&&Buffer.isBuffer(e)!==Buffer.isBuffer(S))return!1;if(e.length!==S.length)return!1;for(let t=0;t<e.length;t++)if(!isEqualWithImpl(e[t],S[t],t,e,S,W,x))return!1;return!0;case p:return e.byteLength===S.byteLength&&areObjectsEqual(new Uint8Array(e),new Uint8Array(S),W,x);case g:return e.byteLength===S.byteLength&&e.byteOffset===S.byteOffset&&areObjectsEqual(new Uint8Array(e),new Uint8Array(S),W,x);case h:return e.name===S.name&&e.message===S.message;case y:{if(!(areObjectsEqual(e.constructor,S.constructor,W,x)||isPlainObject$1(e)&&isPlainObject$1(S)))return!1;const t=[...Object.keys(e),...getSymbols(e)],n=[...Object.keys(S),...getSymbols(S)];if(t.length!==n.length)return!1;for(let n=0;n<t.length;n++){const r=t[n],i=e[r];if(!Object.hasOwn(S,r))return!1;if(!isEqualWithImpl(i,S[r],r,e,S,W,x))return!1}return!0}default:return!1}}finally{W.delete(e);W.delete(S)}}function noop$1(){}function isEqual(e,t){return isEqualWith$1(e,t,noop$1)}function isFunction$1(e){return"function"==typeof e}function isNull$1(e){return null===e}function isSymbol(e){return"symbol"==typeof e}function isUndefined$1(e){return void 0===e}function invokeMap(e,t,...n){if(isNil$1(e))return[];const r=isArrayLike(e)?Array.from(e):Object.values(e),i=[];for(let e=0;e<r.length;e++){const o=r[e];if(isFunction$1(t)){i.push(t.apply(o,n));continue}const s=get(o,t);let u=o;if(Array.isArray(t)){const e=t.slice(0,-1);e.length>0&&(u=get(o,e))}else if("string"==typeof t&&t.includes(".")){u=get(o,t.split(".").slice(0,-1).join("."))}i.push(null==s?void 0:s.apply(u,n))}return i}function join(e,t){return isArrayLike(e)?Array.from(e).join(t):""}function reduce(e,t=identity$1,n){if(!e)return n;let r,i=0;if(isArrayLike(e)){r=range$1(0,e.length);if(null==n&&e.length>0){n=e[0];i+=1}}else{r=Object.keys(e);if(null==n){n=e[r[0]];i+=1}}for(let o=i;o<r.length;o++){const i=r[o];n=t(n,e[i],i,e)}return n}function keyBy(e,t){if(!isArrayLike(e)&&!isObjectLike(e))return{};const n=iteratee(t??identity$1);return reduce(e,((e,t)=>{e[n(t)]=t;return e}),{})}function lastIndexOf(e,t,n){if(!isArrayLike(e)||0===e.length)return-1;const r=e.length;let i=n??r-1;null!=n&&(i=i<0?Math.max(r+i,0):Math.min(i,r-1));if(Number.isNaN(t))for(let t=i;t>=0;t--)if(Number.isNaN(e[t]))return t;return Array.from(e).lastIndexOf(t,i)}function nth(e,t=0){if(isArrayLikeObject(e)&&0!==e.length){(t=toInteger(t))<0&&(t+=e.length);return e[t]}}function getPriority(e){return"symbol"==typeof e?1:null===e?2:void 0===e?3:e!=e?4:0}const compareValues=(e,t,n)=>{if(e!==t){const r=getPriority(e),i=getPriority(t);if(r===i&&0===r){if(e<t)return"desc"===n?1:-1;if(e>t)return"desc"===n?-1:1}return"desc"===n?i-r:r-i}return 0},W=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,x=/^\w*$/;function isKey(e,t){return!Array.isArray(e)&&(!("number"!=typeof e&&"boolean"!=typeof e&&null!=e&&!isSymbol$1(e))||("string"==typeof e&&(x.test(e)||!W.test(e))||null!=t&&Object.hasOwn(t,e)))}function orderBy(e,t,n,r){if(null==e)return[];n=r?void 0:n;Array.isArray(e)||(e=Object.values(e));Array.isArray(t)||(t=null==t?[null]:[t]);0===t.length&&(t=[null]);Array.isArray(n)||(n=null==n?[]:[n]);n=n.map((e=>String(e)));const getValueByNestedPath=(e,t)=>{let n=e;for(let e=0;e<t.length&&null!=n;++e)n=n[t[e]];return n},i=t.map((e=>{Array.isArray(e)&&1===e.length&&(e=e[0]);return null==e||"function"==typeof e||Array.isArray(e)||isKey(e)?e:{key:e,path:toPath(e)}}));return e.map((e=>({original:e,criteria:i.map((t=>((e,t)=>null==t||null==e?t:"object"==typeof e&&"key"in e?Object.hasOwn(t,e.key)?t[e.key]:getValueByNestedPath(t,e.path):"function"==typeof e?e(t):Array.isArray(e)?getValueByNestedPath(t,e):"object"==typeof t?t[e]:t)(t,e)))}))).slice().sort(((e,t)=>{for(let r=0;r<i.length;r++){const i=compareValues(e.criteria[r],t.criteria[r],n[r]);if(0!==i)return i}return 0})).map((e=>e.original))}function partition(e,t=identity$1){if(!e)return[[],[]];const n=isArrayLike(e)?e:Object.values(e);t=iteratee(t);const r=[],i=[];for(let e=0;e<n.length;e++){const o=n[e];t(o)?r.push(o):i.push(o)}return[r,i]}function pull$1(e,t){const n=new Set(t);let r=0;for(let t=0;t<e.length;t++)n.has(e[t])||(Object.hasOwn(e,t)?e[r++]=e[t]:delete e[r++]);e.length=r;return e}function pull(e,...t){return pull$1(e,t)}function pullAll(e,t=[]){return pull$1(e,Array.from(t))}function pullAllBy(e,t,n){const r=iteratee(n),i=new Set(Array.from(t).map((e=>r(e))));let o=0;for(let t=0;t<e.length;t++){const n=r(e[t]);i.has(n)||(Object.hasOwn(e,t)?e[o++]=e[t]:delete e[o++])}e.length=o;return e}function pullAllWith(e,t,n){if(null==e?.length||null==t?.length)return e;e===t&&(t=function copyArray(e,t){const n=e.length;null==t&&(t=Array(n));for(let r=0;r<n;r++)t[r]=e[r];return t}(t));let r=0;null==n&&(n=(e,t)=>eq(e,t));const i=Array.isArray(t)?t:Array.from(t),o=i.includes(void 0);for(let t=0;t<e.length;t++)if(t in e){i.some((r=>n(e[t],r)))||(e[r++]=e[t])}else o||delete e[r++];e.length=r;return e}function at(e,...t){if(0===t.length)return[];const n=[];for(let e=0;e<t.length;e++){const r=t[e];if(isArrayLike(r)&&!isString(r))for(let e=0;e<r.length;e++)n.push(r[e]);else n.push(r)}const r=[];for(let t=0;t<n.length;t++)r.push(get(e,n[t]));return r}function unset(e,t){if(null==e)return!0;switch(typeof t){case"symbol":case"number":case"object":if(Array.isArray(t))return unsetWithPath(e,t);"number"==typeof t?t=toKey(t):"object"==typeof t&&(t=Object.is(t?.valueOf(),-0)?"-0":String(t));if(isUnsafeProperty(t))return!1;if(void 0===e?.[t])return!0;try{delete e[t];return!0}catch{return!1}case"string":if(void 0===e?.[t]&&isDeepKey(t))return unsetWithPath(e,toPath(t));if(isUnsafeProperty(t))return!1;try{delete e[t];return!0}catch{return!1}}}function unsetWithPath(e,t){const n=get(e,t.slice(0,-1),e),r=t[t.length-1];if(void 0===n?.[r])return!0;if(isUnsafeProperty(r))return!1;try{delete n[r];return!0}catch{return!1}}function isArray(e){return Array.isArray(e)}function pullAt(e,...t){const n=flattenDepth(t,1);if(!e)return Array(n.length);const r=at(e,n),i=n.map((t=>isIndex(t,e.length)?Number(t):t)).sort(((e,t)=>t-e));for(const t of new Set(i)){if(isIndex(t,e.length)){Array.prototype.splice.call(e,t,1);continue}if(isKey(t,e)){delete e[toKey(t)];continue}const n=isArray(t)?t:toPath(t);unset(e,n)}return r}function reduceRight(e,t=identity$1,n){if(!e)return n;let r,i;if(isArrayLike(e)){r=range$1(0,e.length).reverse();if(null==n&&e.length>0){n=e[e.length-1];i=1}else i=0}else{r=Object.keys(e).reverse();if(null==n){n=e[r[0]];i=1}else i=0}for(let o=i;o<r.length;o++){const i=r[o];n=t(n,e[i],i,e)}return n}function negate$1(e){if("function"!=typeof e)throw new TypeError("Expected a function");return function(...t){return!e.apply(this,t)}}function reject(e,t=identity$1){return filter(e,negate$1(iteratee(t)))}function remove(e,t=identity$1){return function remove$1(e,t){const n=e.slice(),r=[];let i=0;for(let o=0;o<e.length;o++)t(e[o],o,n)?r.push(e[o]):Object.hasOwn(e,o)?e[i++]=e[o]:delete e[i++];e.length=i;return r}(e,iteratee(t))}function reverse(e){return null==e?e:e.reverse()}function sample$1(e){return e[Math.floor(Math.random()*e.length)]}function sample(e){if(null!=e)return isArrayLike(e)?sample$1(toArray$1(e)):sample$1(Object.values(e))}function random$1(e,t){if(null==t){t=e;e=0}if(e>=t)throw new Error("Invalid input: The maximum value must be greater than the minimum value.");return Math.random()*(t-e)+e}function randomInt(e,t){return Math.floor(random$1(e,t))}function clamp(e,t,n){Number.isNaN(t)&&(t=0);Number.isNaN(n)&&(n=0);return function clamp$1(e,t,n){return null==n?Math.min(e,t):Math.min(Math.max(e,t),n)}(e,t,n)}function isMap(e){return function isMap$1(e){return e instanceof Map}(e)}function toArray(e){return null==e?[]:isArrayLike(e)||isMap(e)?Array.from(e):"object"==typeof e?Object.values(e):[]}function sampleSize(e,t,n){const r=toArray(e);return function sampleSize$1(e,t){if(t>e.length)throw new Error("Size must be less than or equal to the length of array.");const n=new Array(t),r=new Set;for(let i=e.length-t,o=0;i<e.length;i++,o++){let t=randomInt(0,i+1);r.has(t)&&(t=i);r.add(t);n[o]=e[t]}return n}(r,t=(n?isIterateeCall(e,t,n):void 0===t)?1:clamp(toInteger(t),0,r.length))}function shuffle$1(e){const t=e.slice();for(let e=t.length-1;e>=1;e--){const n=Math.floor(Math.random()*(e+1));[t[e],t[n]]=[t[n],t[e]]}return t}function values(e){return null==e?[]:Object.values(e)}function isNil(e){return null==e}function shuffle(e){return isNil(e)?[]:isArray(e)?shuffle$1(e):isArrayLike(e)?shuffle$1(Array.from(e)):isObjectLike(e)?shuffle$1(values(e)):[]}function size(e){return isNil$1(e)?0:e instanceof Map||e instanceof Set?e.size:Object.keys(e).length}function slice(e,t,n){if(!isArrayLike(e))return[];const r=e.length;if(void 0===n)n=r;else if("number"!=typeof n&&isIterateeCall(e,t,n)){t=0;n=r}t=toInteger(t);n=toInteger(n);t=t<0?Math.max(r+t,0):Math.min(t,r);n=n<0?Math.max(r+n,0):Math.min(n,r);const i=Math.max(n-t,0),o=new Array(i);for(let n=0;n<i;++n)o[n]=e[t+n];return o}function some(e,t,n){if(!e)return!1;null!=n&&(t=void 0);t||(t=identity$1);const r=Array.isArray(e)?e:Object.values(e);switch(typeof t){case"function":if(!Array.isArray(e)){const n=Object.keys(e);for(let r=0;r<n.length;r++){const i=n[r];if(t(e[i],i,e))return!0}return!1}for(let n=0;n<e.length;n++)if(t(e[n],n,e))return!0;return!1;case"object":if(Array.isArray(t)&&2===t.length){const n=matchesProperty(t[0],t[1]);if(Array.isArray(e)){for(let t=0;t<e.length;t++)if(n(e[t]))return!0;return!1}return r.some(n)}{const n=matches(t);if(Array.isArray(e)){for(let t=0;t<e.length;t++)if(n(e[t]))return!0;return!1}return r.some(n)}case"number":case"symbol":case"string":{const n=property(t);if(Array.isArray(e)){for(let t=0;t<e.length;t++)if(n(e[t]))return!0;return!1}return r.some(n)}}}function sortBy(e,...t){const n=t.length;n>1&&isIterateeCall(e,t[0],t[1])?t=[]:n>2&&isIterateeCall(t[0],t[1],t[2])&&(t=[t[0]]);return orderBy(e,flatten$1(t),["asc"])}function isNaN(e){return Number.isNaN(e)}const L=4294967294;function sortedIndexBy(e,t,n=iteratee,r){let i=0,o=null==e?0:e.length;if(0===o||isNil(e))return 0;const s=iteratee(n),u=s(t),a=isNaN(u),c=isNull$1(u),l=isSymbol$1(u),f=isUndefined$1(u);for(;i<o;){let t;const n=Math.floor((i+o)/2),p=s(e[n]),y=!isUndefined$1(p),h=isNull$1(p),g=!isNaN(p),d=isSymbol$1(p);t=a?r||g:f?g&&(r||y):c?g&&y&&(r||!h):l?g&&y&&!h&&(r||!d):!h&&!d&&(r?p<=u:p<u);t?i=n+1:o=n}return Math.min(o,L)}function isNumber(e){return"number"==typeof e||e instanceof Number}const N=2147483647;function sortedIndex(e,t){if(isNil$1(e))return 0;let n=0,r=isNil$1(e)?n:e.length;if(isNumber(t)&&t==t&&r<=N){for(;n<r;){const i=n+r>>>1,o=e[i];!isNull$1(o)&&!isSymbol(o)&&o<t?n=i+1:r=i}return r}return sortedIndexBy(e,t,(e=>e))}function sortedIndexOf(e,t){if(!e?.length)return-1;const n=sortedIndex(e,t);return n<e.length&&eq(e[n],t)?n:-1}function sortedLastIndexBy(e,t,n){return sortedIndexBy(e,t,n,!0)}const B=2147483647;function sortedLastIndex(e,t){if(isNil$1(e))return 0;let n=e.length;if(!isNumber(t)||Number.isNaN(t)||n>B)return sortedLastIndexBy(e,t,(e=>e));let r=0;for(;r<n;){const i=r+n>>>1,o=e[i];!isNull$1(o)&&!isSymbol(o)&&o<=t?r=i+1:n=i}return n}function sortedLastIndexOf(e,t){if(!e?.length)return-1;const n=sortedLastIndex(e,t)-1;return n>=0&&eq(e[n],t)?n:-1}function tail(e){return isArrayLike(e)?function tail$1(e){return e.slice(1)}(toArray$1(e)):[]}function take(e,t=1,n){return(t=n?1:toInteger(t))<1||!isArrayLike(e)?[]:function take$1(e,t,n){t=void 0===t?1:toInteger(t);return e.slice(0,t)}(toArray$1(e),t)}function takeRight(e,t=1,n){return(t=n?1:toInteger(t))<=0||!isArrayLike(e)?[]:function takeRight$1(e,t=1,n){return(t=void 0===t?1:toInteger(t))<=0||null==e||0===e.length?[]:e.slice(-t)}(toArray$1(e),t)}function takeRightWhile(e,t){if(!isArrayLikeObject(e))return[];const n=toArray$1(e),r=n.findLastIndex(function negate(e){return(...t)=>!e(...t)}(iteratee(t??identity$1)));return n.slice(r+1)}function identity(e){return e}function takeWhile(e,t){if(!isArrayLikeObject(e))return[];const n=toArray$1(e),r=n.findIndex(negate$1(iteratee(t??identity)));return-1===r?n:n.slice(0,r)}function union(...e){return uniq$1(flattenDepth(e.filter(isArrayLikeObject),1))}function uniqBy$1(e,t){const n=new Map;for(let r=0;r<e.length;r++){const i=e[r],o=t(i);n.has(o)||n.set(o,i)}return Array.from(n.values())}function unionBy(...e){const t=last$1(e),n=flattenArrayLike(e);return isArrayLikeObject(t)||null==t?uniq$1(n):uniqBy$1(n,iteratee(t))}function uniqWith$1(e,t){const n=[];for(let r=0;r<e.length;r++){const i=e[r];n.every((e=>!t(e,i)))&&n.push(i)}return n}function unionWith(...e){const t=last$1(e),n=flattenArrayLike(e);return isArrayLikeObject(t)||null==t?uniq$1(n):uniqWith$1(n,t)}function uniqBy(e,t=identity$1){return isArrayLikeObject(e)?uniqBy$1(Array.from(e),iteratee(t)):[]}function uniqWith(e,t){return isArrayLike(e)?"function"==typeof t?uniqWith$1(Array.from(e),t):uniq(Array.from(e)):[]}function unzip$1(e){let t=0;for(let n=0;n<e.length;n++)e[n].length>t&&(t=e[n].length);const n=new Array(t);for(let r=0;r<t;r++){n[r]=new Array(e.length);for(let t=0;t<e.length;t++)n[r][t]=e[t][r]}return n}function unzip(e){return isArrayLikeObject(e)&&e.length?unzip$1(e=(e=isArray(e)?e:Array.from(e)).filter((e=>isArrayLikeObject(e)))):[]}function unzipWith(e,t){if(!isArrayLikeObject(e)||!e.length)return[];const n=isArray(e)?unzip$1(e):unzip$1(Array.from(e,(e=>Array.from(e))));if(!t)return n;const r=new Array(n.length);for(let e=0;e<n.length;e++){const i=n[e];r[e]=t(...i)}return r}function without(e,...t){return isArrayLikeObject(e)?function without$1(e,...t){return difference$1(e,t)}(Array.from(e),...t):[]}function xor(...e){const t=new Map;for(let n=0;n<e.length;n++){const r=e[n];if(!isArrayLikeObject(r))continue;const i=new Set(toArray(r));for(const e of i)t.has(e)?t.set(e,t.get(e)+1):t.set(e,1)}const n=[];for(const[e,r]of t)1===r&&n.push(e);return n}function windowed(e,t,n=1,{partialWindows:r=!1}={}){if(!Number.isInteger(t))throw new Error("Size must be a positive integer.");if(n<=0||!Number.isInteger(n))throw new Error("Step must be a positive integer.");const i=[],o=r?e.length:e.length-t+1;for(let r=0;r<o;r+=n)i.push(e.slice(r,r+t));return i}function xorBy(...e){const t=last(e);let n=identity$1;if(!isArrayLikeObject(t)&&null!=t){n=iteratee(t);e=e.slice(0,-1)}const r=e.filter(isArrayLikeObject);return differenceBy(unionBy(...r,n),unionBy(...windowed(r,2).map((([e,t])=>intersectionBy(e,t,n))),n),n)}function xorWith(...e){const t=last(e);let comparator=(e,t)=>e===t;if("function"==typeof t){comparator=t;e=e.slice(0,-1)}const n=e.filter(isArrayLikeObject);return differenceWith(unionWith(...n,comparator),unionWith(...windowed(n,2).map((([e,t])=>intersectionWith(e,t,comparator))),comparator),comparator)}function zip$1(...e){let t=0;for(let n=0;n<e.length;n++)e[n].length>t&&(t=e[n].length);const n=e.length,r=Array(t);for(let i=0;i<t;++i){const t=Array(n);for(let r=0;r<n;++r)t[r]=e[r][i];r[i]=t}return r}function zip(...e){return e.length?zip$1(...e.filter((e=>isArrayLikeObject(e)))):[]}const assignValue=(e,t,n)=>{const r=e[t];Object.hasOwn(e,t)&&eq(r,n)&&(void 0!==n||t in e)||(e[t]=n)};function zipObject(e=[],t=[]){const n={};for(let r=0;r<e.length;r++)assignValue(n,e[r],t[r]);return n}function updateWith(e,t,n,r){if(null==e&&!isObject(e))return e;const i=isKey(t,e)?[t]:Array.isArray(t)?t:"string"==typeof t?toPath(t):[t];let o=e;for(let t=0;t<i.length&&null!=o;t++){const s=toKey(i[t]);if(isUnsafeProperty(s))continue;let u;if(t===i.length-1)u=n(o[s]);else{const n=o[s],a=r?.(n,s,e);u=void 0!==a?a:isObject(n)?n:isIndex(i[t+1])?[]:{}}assignValue(o,s,u);o=o[s]}return e}function set(e,t,n){return updateWith(e,t,(()=>n),(()=>{}))}function zipObjectDeep(e,t){const n={};if(!isArrayLike(e))return n;isArrayLike(t)||(t=[]);const r=zip$1(Array.from(e),Array.from(t));for(let e=0;e<r.length;e++){const[t,i]=r[e];null!=t&&set(n,t,i)}return n}function zipWith(...e){let t=e.pop();if(!isFunction$1(t)){e.push(t);t=void 0}if(!e?.length)return[];const n=unzip(e);return null==t?n:n.map((e=>t(...e)))}function after$1(e,t){if("function"!=typeof t)throw new TypeError("Expected a function");e=toInteger(e);return function(...n){if(--e<1)return t.apply(this,n)}}function ary(e,t=e.length,n){n&&(t=e.length);(Number.isNaN(t)||t<0)&&(t=0);return function ary$1(e,t){return function(...n){return e.apply(this,n.slice(0,t))}}(e,t)}function attempt(e,...t){try{return e(...t)}catch(e){return e instanceof Error?e:new Error(e)}}function before(e,t){if("function"!=typeof t)throw new TypeError("Expected a function");let n;e=toInteger(e);return function(...r){--e>0&&(n=t.apply(this,r));e<=1&&t&&(t=void 0);return n}}function bind(e,t,...n){const bound=function(...r){const i=[];let o=0;for(let e=0;e<n.length;e++){const t=n[e];t===bind.placeholder?i.push(r[o++]):i.push(t)}for(let e=o;e<r.length;e++)i.push(r[e]);return this instanceof bound?new e(...i):e.apply(t,i)};return bound}const E=Symbol("bind.placeholder");bind.placeholder=E;function bindKey(e,t,...n){const bound=function(...r){const i=[];let o=0;for(let e=0;e<n.length;e++){const t=n[e];t===bindKey.placeholder?i.push(r[o++]):i.push(t)}for(let e=o;e<r.length;e++)i.push(r[e]);return this instanceof bound?new e[t](...i):e[t].apply(e,i)};return bound}const M=Symbol("bindKey.placeholder");bindKey.placeholder=M;function curry(e,t=e.length,n){t=n?e.length:t;t=Number.parseInt(t,10);(Number.isNaN(t)||t<1)&&(t=0);const wrapper=function(...n){const r=n.filter((e=>e===curry.placeholder)),i=n.length-r.length;return i<t?makeCurry(e,t-i,n):this instanceof wrapper?new e(...n):e.apply(this,n)};wrapper.placeholder=R;return wrapper}function makeCurry(e,t,n){function wrapper(...r){const i=r.filter((e=>e===curry.placeholder)),o=r.length-i.length;r=function composeArgs$1(e,t){const n=[];let r=0;for(let i=0;i<t.length;i++){const o=t[i];o===curry.placeholder&&r<e.length?n.push(e[r++]):n.push(o)}for(let t=r;t<e.length;t++)n.push(e[t]);return n}(r,n);return o<t?makeCurry(e,t-o,r):this instanceof wrapper?new e(...r):e.apply(this,r)}wrapper.placeholder=R;return wrapper}const R=Symbol("curry.placeholder");curry.placeholder=R;function curryRight(e,t=e.length,n){t=n?e.length:t;t=Number.parseInt(t,10);(Number.isNaN(t)||t<1)&&(t=0);const wrapper=function(...n){const r=n.filter((e=>e===curryRight.placeholder)),i=n.length-r.length;return i<t?makeCurryRight(e,t-i,n):this instanceof wrapper?new e(...n):e.apply(this,n)};wrapper.placeholder=P;return wrapper}function makeCurryRight(e,t,n){function wrapper(...r){const i=r.filter((e=>e===curryRight.placeholder)),o=r.length-i.length;r=function composeArgs(e,t){const n=t.filter((e=>e===curryRight.placeholder)).length,r=Math.max(e.length-n,0),i=[];let o=0;for(let t=0;t<r;t++)i.push(e[o++]);for(let n=0;n<t.length;n++){const r=t[n];r===curryRight.placeholder&&o<e.length?i.push(e[o++]):i.push(r)}return i}(r,n);return o<t?makeCurryRight(e,t-o,r):this instanceof wrapper?new e(...r):e.apply(this,r)}wrapper.placeholder=P;return wrapper}const P=Symbol("curryRight.placeholder");curryRight.placeholder=P;function debounce$1(e,t,{signal:n,edges:r}={}){let i,o=null;const s=null!=r&&r.includes("leading"),u=null==r||r.includes("trailing"),invoke=()=>{if(null!==o){e.apply(i,o);i=void 0;o=null}};let a=null;const schedule=()=>{null!=a&&clearTimeout(a);a=setTimeout((()=>{a=null;(()=>{u&&invoke();cancel()})()}),t)},cancel=()=>{(()=>{if(null!==a){clearTimeout(a);a=null}})();i=void 0;o=null},debounced=function(...e){if(n?.aborted)return;i=this;o=e;const t=null==a;schedule();s&&t&&invoke()};debounced.schedule=schedule;debounced.cancel=cancel;debounced.flush=()=>{invoke()};n?.addEventListener("abort",cancel,{once:!0});return debounced}function debounce(e,t=0,n={}){"object"!=typeof n&&(n={});const{leading:r=!1,trailing:i=!0,maxWait:o}=n,s=Array(2);r&&(s[0]="leading");i&&(s[1]="trailing");let u,a=null;const c=debounce$1((function(...t){u=e.apply(this,t);a=null}),t,{edges:s}),debounced=function(...t){if(null!=o){null===a&&(a=Date.now());if(Date.now()-a>=o){u=e.apply(this,t);a=Date.now();c.cancel();c.schedule();return u}}c.apply(this,t);return u};debounced.cancel=c.cancel;debounced.flush=()=>{c.flush();return u};return debounced}function defer(e,...t){if("function"!=typeof e)throw new TypeError("Expected a function");return setTimeout(e,1,...t)}function delay(e,t,...n){if("function"!=typeof e)throw new TypeError("Expected a function");return setTimeout(e,toNumber(t)||0,...n)}function flip(e){return function(...t){return e.apply(this,t.reverse())}}function flow$1(...e){return function(...t){let n=e.length?e[0].apply(this,t):t[0];for(let t=1;t<e.length;t++)n=e[t].call(this,n);return n}}function flow(...e){const t=flatten$1(e,1);if(t.some((e=>"function"!=typeof e)))throw new TypeError("Expected a function");return flow$1(...t)}function flowRight(...e){const t=flatten$1(e,1);if(t.some((e=>"function"!=typeof e)))throw new TypeError("Expected a function");return function flowRight$1(...e){return flow$1(...e.reverse())}(...t)}function memoize(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");const memoized=function(...n){const r=t?t.apply(this,n):n[0],i=memoized.cache;if(i.has(r))return i.get(r);const o=e.apply(this,n);memoized.cache=i.set(r,o)||i;return o},n=memoize.Cache||Map;memoized.cache=new n;return memoized}memoize.Cache=Map;function nthArg(e=0){return function(...t){return t.at(toInteger(e))}}function once(e){return function once$1(e){let t,n=!1;return function(...r){if(!n){n=!0;t=e(...r)}return t}}(e)}function overArgs(e,...t){if("function"!=typeof e)throw new TypeError("Expected a function");const n=t.flat();return function(...t){const r=Math.min(t.length,n.length),i=[...t];for(let e=0;e<r;e++){const r=iteratee(n[e]??identity$1);i[e]=r.call(this,t[e])}return e.apply(this,i)}}function partial(e,...t){return function partialImpl(e,t,...n){const partialed=function(...r){let i=0;const o=n.slice().map((e=>e===t?r[i++]:e)),s=r.slice(i);return e.apply(this,o.concat(s))};e.prototype&&(partialed.prototype=Object.create(e.prototype));return partialed}(e,partial.placeholder,...t)}partial.placeholder=Symbol("compat.partial.placeholder");function partialRight(e,...t){return function partialRightImpl(e,t,...n){const partialedRight=function(...r){const i=n.filter((e=>e===t)).length,o=Math.max(r.length-i,0),s=r.slice(0,o);let u=o;const a=n.slice().map((e=>e===t?r[u++]:e));return e.apply(this,s.concat(a))};e.prototype&&(partialedRight.prototype=Object.create(e.prototype));return partialedRight}(e,partialRight.placeholder,...t)}partialRight.placeholder=Symbol("compat.partialRight.placeholder");function rearg(e,...t){const n=flatten(t);return function(...t){const r=n.map((e=>t[e])).slice(0,t.length);for(let e=r.length;e<t.length;e++)r.push(t[e]);return e.apply(this,r)}}function rest(e,t=e.length-1){t=Number.parseInt(t,10);(Number.isNaN(t)||t<0)&&(t=e.length-1);return function rest$1(e,t=e.length-1){return function(...n){const r=n.slice(t),i=n.slice(0,t);for(;i.length<t;)i.push(void 0);return e.apply(this,[...i,r])}}(e,t)}function spread(e,t=0){t=Number.parseInt(t,10);(Number.isNaN(t)||t<0)&&(t=0);return function(...n){const r=n[t],i=n.slice(0,t);r&&i.push(...r);return e.apply(this,i)}}function throttle(e,t=0,n={}){const{leading:r=!0,trailing:i=!0}=n;return debounce(e,t,{leading:r,maxWait:t,trailing:i})}function unary(e){return ary(e,1)}function wrap(e,t){return function(...n){return(isFunction$1(t)?t:identity$1).apply(this,[e,...n])}}function toString(e){if(null==e)return"";if("string"==typeof e)return e;if(Array.isArray(e))return e.map(toString).join(",");const t=String(e);return"0"===t&&Object.is(Number(e),-0)?"-0":t}function add(e,t){if(void 0===e&&void 0===t)return 0;if(void 0===e||void 0===t)return e??t;if("string"==typeof e||"string"==typeof t){e=toString(e);t=toString(t)}else{e=toNumber(e);t=toNumber(t)}return e+t}function decimalAdjust(e,t,n=0){t=Number(t);Object.is(t,-0)&&(t="-0");if(n=Math.min(Number.parseInt(n,10),292)){const[r,i=0]=t.toString().split("e");let o=Math[e](Number(`${r}e${Number(i)+n}`));Object.is(o,-0)&&(o="-0");const[s,u=0]=o.toString().split("e");return Number(`${s}e${Number(u)-n}`)}return Math[e](Number(t))}function ceil(e,t=0){return decimalAdjust("ceil",e,t)}function divide(e,t){if(void 0===e&&void 0===t)return 1;if(void 0===e||void 0===t)return e??t;if("string"==typeof e||"string"==typeof t){e=toString(e);t=toString(t)}else{e=toNumber(e);t=toNumber(t)}return e/t}function floor(e,t=0){return decimalAdjust("floor",e,t)}function inRange(e,t,n){t||(t=0);null==n||n||(n=0);null!=t&&"number"!=typeof t&&(t=Number(t));if(null==n&&0===t)return!1;null!=n&&"number"!=typeof n&&(n=Number(n));null!=n&&t>n&&([t,n]=[n,t]);return t!==n&&function inRange$1(e,t,n){if(null==n){n=t;t=0}if(t>=n)throw new Error("The maximum value must be greater than the minimum value.");return t<=e&&e<n}(e,t,n)}function max(e){if(!e||0===e.length)return;let t;for(let n=0;n<e.length;n++){const r=e[n];null==r||Number.isNaN(r)||"symbol"==typeof r||(void 0===t||r>t)&&(t=r)}return t}function maxBy(e,t){if(null!=e)return function maxBy$1(e,t){if(0===e.length)return;let n=e[0],r=t(n);for(let i=1;i<e.length;i++){const o=e[i],s=t(o);if(s>r){r=s;n=o}}return n}(Array.from(e),iteratee(t??identity$1))}function sumBy(e,t){if(!e||!e.length)return 0;null!=t&&(t=iteratee(t));let n;for(let r=0;r<e.length;r++){const i=t?t(e[r]):e[r];void 0!==i&&(void 0===n?n=i:n+=i)}return n}function sum$1(e){return sumBy(e)}function mean$1(e){const t=e?e.length:0;return 0===t?NaN:sum$1(e)/t}function meanBy(e,t){return null==e?NaN:function meanBy$1(e,t){return function mean(e){return function sum(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n];return t}(e)/e.length}(e.map((e=>t(e))))}(Array.from(e),iteratee(t??identity$1))}function min(e){if(!e||0===e.length)return;let t;for(let n=0;n<e.length;n++){const r=e[n];null==r||Number.isNaN(r)||"symbol"==typeof r||(void 0===t||r<t)&&(t=r)}return t}function minBy(e,t){if(null!=e)return function minBy$1(e,t){if(0===e.length)return;let n=e[0],r=t(n);for(let i=1;i<e.length;i++){const o=e[i],s=t(o);if(s<r){r=s;n=o}}return n}(Array.from(e),iteratee(t??identity$1))}function multiply(e,t){if(void 0===e&&void 0===t)return 1;if(void 0===e||void 0===t)return e??t;if("string"==typeof e||"string"==typeof t){e=toString(e);t=toString(t)}else{e=toNumber(e);t=toNumber(t)}return e*t}function parseInt(e,t=0,n){n&&(t=0);return Number.parseInt(e,t)}function random(...e){let t=0,n=1,r=!1;switch(e.length){case 1:"boolean"==typeof e[0]?r=e[0]:n=e[0];break;case 2:if("boolean"==typeof e[1]){n=e[0];r=e[1]}else{t=e[0];n=e[1]}case 3:if("object"==typeof e[2]&&null!=e[2]&&e[2][e[1]]===e[0]){t=0;n=e[0];r=!1}else{t=e[0];n=e[1];r=e[2]}}"number"!=typeof t&&(t=Number(t));"number"!=typeof n&&(t=Number(n));t||(t=0);n||(n=0);t>n&&([t,n]=[n,t]);t=clamp(t,-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER);n=clamp(n,-Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER);return t===n?t:r?random$1(t,n+1):randomInt(t,n+1)}function range(e,t,n){n&&"number"!=typeof n&&isIterateeCall(e,t,n)&&(t=n=void 0);e=toFinite(e);if(void 0===t){t=e;e=0}else t=toFinite(t);n=void 0===n?e<t?1:-1:toFinite(n);const r=Math.max(Math.ceil((t-e)/(n||1)),0),i=new Array(r);for(let t=0;t<r;t++){i[t]=e;e+=n}return i}function rangeRight(e,t,n){n&&"number"!=typeof n&&isIterateeCall(e,t,n)&&(t=n=void 0);e=toFinite(e);if(void 0===t){t=e;e=0}else t=toFinite(t);n=void 0===n?e<t?1:-1:toFinite(n);const r=Math.max(Math.ceil((t-e)/(n||1)),0),i=new Array(r);for(let t=r-1;t>=0;t--){i[t]=e;e+=n}return i}function round(e,t=0){return decimalAdjust("round",e,t)}function subtract(e,t){if(void 0===e&&void 0===t)return 0;if(void 0===e||void 0===t)return e??t;if("string"==typeof e||"string"==typeof t){e=toString(e);t=toString(t)}else{e=toNumber(e);t=toNumber(t)}return e-t}function noop(...e){}function isPrototype(e){const t=e?.constructor;return e===("function"==typeof t?t.prototype:Object.prototype)}function isTypedArray(e){return isTypedArray$1(e)}function times(e,t){if((e=toInteger(e))<1||!Number.isSafeInteger(e))return[];const n=new Array(e);for(let r=0;r<e;r++)n[r]="function"==typeof t?t(r):r;return n}function keys(e){if(isArrayLike(e))return function arrayLikeKeys(e){const t=times(e.length,(e=>`${e}`)),n=new Set(t);if(isBuffer$1(e)){n.add("offset");n.add("parent")}if(isTypedArray(e)){n.add("buffer");n.add("byteLength");n.add("byteOffset")}return[...t,...Object.keys(e).filter((e=>!n.has(e)))]}(e);const t=Object.keys(Object(e));return isPrototype(e)?t.filter((e=>"constructor"!==e)):t}function assign(e,...t){for(let n=0;n<t.length;n++)assignImpl(e,t[n]);return e}function assignImpl(e,t){const n=keys(t);for(let r=0;r<n.length;r++){const i=n[r];i in e&&eq(e[i],t[i])||(e[i]=t[i])}}function keysIn(e){if(null==e)return[];switch(typeof e){case"object":case"function":return isArrayLike(e)?function arrayLikeKeysIn(e){const t=times(e.length,(e=>`${e}`)),n=new Set(t);if(isBuffer$1(e)){n.add("offset");n.add("parent")}if(isTypedArray(e)){n.add("buffer");n.add("byteLength");n.add("byteOffset")}return[...t,...keysInImpl(e).filter((e=>!n.has(e)))]}(e):isPrototype(e)?function prototypeKeysIn(e){const t=keysInImpl(e);return t.filter((e=>"constructor"!==e))}(e):keysInImpl(e);default:return keysInImpl(Object(e))}}function keysInImpl(e){const t=[];for(const n in e)t.push(n);return t}function assignIn(e,...t){for(let n=0;n<t.length;n++)assignInImpl(e,t[n]);return e}function assignInImpl(e,t){const n=keysIn(t);for(let r=0;r<n.length;r++){const i=n[r];i in e&&eq(e[i],t[i])||(e[i]=t[i])}}function assignInWith(e,...t){let n=t[t.length-1];"function"==typeof n?t.pop():n=void 0;for(let r=0;r<t.length;r++)assignInWithImpl(e,t[r],n);return e}function assignInWithImpl(e,t,n){const r=keysIn(t);for(let i=0;i<r.length;i++){const o=r[i],s=e[o],u=t[o],a=n?.(s,u,o,e,t)??u;o in e&&eq(s,a)||(e[o]=a)}}function assignWith(e,...t){let n=t[t.length-1];"function"==typeof n?t.pop():n=void 0;for(let r=0;r<t.length;r++)assignWithImpl(e,t[r],n);return e}function assignWithImpl(e,t,n){const r=keys(t);for(let i=0;i<r.length;i++){const o=r[i],s=e[o],u=t[o],a=n?.(s,u,o,e,t)??u;o in e&&eq(s,a)||(e[o]=a)}}function clone$1(e){if(isPrimitive(e))return e;const f=getTag(e);if(!function isCloneableObject(e){switch(getTag(e)){case o:case l:case p:case g:case i:case u:case I:case v:case j:case O:case w:case a:case r:case y:case t:case c:case n:case s:case d:case m:case b:case A:return!0;default:return!1}}(e))return{};if(isArray(e)){const t=Array.from(e);if(e.length>0&&"string"==typeof e[0]&&Object.hasOwn(e,"index")){t.index=e.index;t.input=e.input}return t}if(isTypedArray(e)){const t=e;return new(0,t.constructor)(t.buffer,t.byteOffset,t.length)}if(f===p)return new ArrayBuffer(e.byteLength);if(f===g){const t=e,n=t.buffer,r=t.byteOffset,i=t.byteLength,o=new ArrayBuffer(i),s=new Uint8Array(n,r,i);new Uint8Array(o).set(s);return new DataView(o)}if(f===i||f===r||f===n){const t=new(0,e.constructor)(e.valueOf());f===n?function cloneStringObjectProperties(e,t){const n=t.valueOf().length;for(const r in t)Object.hasOwn(t,r)&&(Number.isNaN(Number(r))||Number(r)>=n)&&(e[r]=t[r])}(t,e):copyOwnProperties(t,e);return t}if(f===u)return new Date(Number(e));if(f===t){const t=e,n=new RegExp(t.source,t.flags);n.lastIndex=t.lastIndex;return n}if(f===s)return Object(Symbol.prototype.valueOf.call(e));if(f===a){const t=e,n=new Map;t.forEach(((e,t)=>{n.set(t,e)}));return n}if(f===c){const t=e,n=new Set;t.forEach((e=>{n.add(e)}));return n}if(f===o){const t=e,n={};copyOwnProperties(n,t);n.length=t.length;n[Symbol.iterator]=t[Symbol.iterator];return n}const h={};!function copyPrototype(e,t){const n=Object.getPrototypeOf(t);if(null!==n){"function"==typeof t.constructor&&Object.setPrototypeOf(e,n)}}(h,e);copyOwnProperties(h,e);!function copySymbolProperties(e,t){const n=Object.getOwnPropertySymbols(t);for(let r=0;r<n.length;r++){const i=n[r];Object.prototype.propertyIsEnumerable.call(t,i)&&(e[i]=t[i])}}(h,e);return h}function copyOwnProperties(e,t){for(const n in t)Object.hasOwn(t,n)&&(e[n]=t[n])}function cloneWith(e,t){if(!t)return clone$1(e);const n=t(e);return void 0!==n?n:clone$1(e)}function create(e,t){const n=isObject(e)?Object.create(e):{};if(null!=t){const e=keys(t);for(let r=0;r<e.length;r++){const i=e[r],o=t[i];assignValue(n,i,o)}}return n}function defaults(e,...t){e=Object(e);const n=Object.prototype;let r=t.length;const i=r>2?t[2]:void 0;i&&isIterateeCall(t[0],t[1],i)&&(r=1);for(let i=0;i<r;i++){const r=t[i],o=Object.keys(r);for(let t=0;t<o.length;t++){const i=o[t],s=e[i];(void 0===s||!Object.hasOwn(e,i)&&eq(s,n[i]))&&(e[i]=r[i])}}return e}function isPlainObject(e){if("object"!=typeof e)return!1;if(null==e)return!1;if(null===Object.getPrototypeOf(e))return!0;if("[object Object]"!==Object.prototype.toString.call(e)){const t=e[Symbol.toStringTag];if(null==t)return!1;return!!Object.getOwnPropertyDescriptor(e,Symbol.toStringTag)?.writable&&e.toString()===`[object ${t}]`}let t=e;for(;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function defaultsDeep(e,...t){e=Object(e);for(let n=0;n<t.length;n++){const r=t[n];null!=r&&defaultsDeepRecursive(e,r,new WeakMap)}return e}function defaultsDeepRecursive(e,t,n){for(const r in t){const i=t[r],o=e[r];void 0!==o&&Object.hasOwn(e,r)?n.get(i)!==o&&handleExistingProperty(o,i,n):e[r]=handleMissingProperty(i,n)}}function handleMissingProperty(e,t){if(t.has(e))return t.get(e);if(isPlainObject(e)){const n={};t.set(e,n);defaultsDeepRecursive(n,e,t);return n}return e}function handleExistingProperty(e,t,n){if(isPlainObject(e)&&isPlainObject(t)){n.set(t,e);defaultsDeepRecursive(e,t,n)}else if(Array.isArray(e)&&Array.isArray(t)){n.set(t,e);!function mergeArrays(e,t,n){const r=Math.min(t.length,e.length);for(let i=0;i<r;i++)isPlainObject(e[i])&&isPlainObject(t[i])&&defaultsDeepRecursive(e[i],t[i],n);for(let n=r;n<t.length;n++)e.push(t[n])}(e,t,n)}}function findKey(e,t){if(!isObject(e))return;return function findKey$1(e,t){return Object.keys(e).find((n=>t(e[n],n,e)))}(e,iteratee(t??identity))}function findLastKey(e,t){if(!isObject(e))return;const n=iteratee(t??identity);return Object.keys(e).findLast((t=>n(e[t],t,e)))}function forIn(e,t=identity$1){if(null==e)return e;for(const n in e){if(!1===t(e[n],n,e))break}return e}function forInRight(e,t=identity$1){if(null==e)return e;const n=[];for(const t in e)n.push(t);for(let r=n.length-1;r>=0;r--){const i=n[r];if(!1===t(e[i],i,e))break}return e}function forOwn(e,t=identity$1){if(null==e)return e;const n=Object(e),r=keys(e);for(let e=0;e<r.length;++e){const i=r[e];if(!1===t(n[i],i,n))break}return e}function forOwnRight(e,t=identity$1){if(null==e)return e;const n=Object(e),r=keys(e);for(let e=r.length-1;e>=0;--e){const i=r[e];if(!1===t(n[i],i,n))break}return e}function fromPairs(e){if(!isArrayLike(e))return{};const t={};for(let n=0;n<e.length;n++){const[r,i]=e[n];t[r]=i}return t}function functions(e){return null==e?[]:keys(e).filter((t=>"function"==typeof e[t]))}function functionsIn(e){if(null==e)return[];const t=[];for(const n in e)isFunction$1(e[n])&&t.push(n);return t}function hasIn(e,t){if(null==e)return!1;let n;n=Array.isArray(t)?t:"string"==typeof t&&isDeepKey(t)&&null==e[t]?toPath(t):[t];if(0===n.length)return!1;let r=e;for(let e=0;e<n.length;e++){const t=n[e];if(null==r||!(t in Object(r))){if(!((Array.isArray(r)||isArguments(r))&&isIndex(t)&&t<r.length))return!1}r=r[t]}return!0}function invert(e){return function invert$1(e){const t={},n=Object.keys(e);for(let r=0;r<n.length;r++){const i=n[r];t[e[i]]=i}return t}(e)}function invertBy(e,t){const n={};if(isNil$1(e))return n;null==t&&(t=identity$1);const r=Object.keys(e),i=iteratee(t);for(let t=0;t<r.length;t++){const o=r[t],s=i(e[o]);Array.isArray(n[s])?n[s].push(o):n[s]=[o]}return n}function mapKeys(e,t=identity$1){return null==e?{}:function mapKeys$1(e,t){const n={},r=Object.keys(e);for(let i=0;i<r.length;i++){const o=r[i],s=e[o];n[t(s,o,e)]=s}return n}(e,iteratee(t))}function mapValues(e,t=identity$1){return null==e?{}:function mapValues$1(e,t){const n={},r=Object.keys(e);for(let i=0;i<r.length;i++){const o=r[i],s=e[o];n[o]=t(s,o,e)}return n}(e,iteratee(t))}function mergeWith(e,...t){const n=t.slice(0,-1),r=t[t.length-1];let i=e;for(let e=0;e<n.length;e++){i=mergeWithDeep(i,n[e],r,new Map)}return i}function mergeWithDeep(e,t,n,r){isPrimitive(e)&&(e=Object(e));if(null==t||"object"!=typeof t)return e;if(r.has(t))return function clone(e){if(isPrimitive(e))return e;if(Array.isArray(e)||isTypedArray$1(e)||e instanceof ArrayBuffer||"undefined"!=typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer)return e.slice(0);const t=Object.getPrototypeOf(e),n=t.constructor;if(e instanceof Date||e instanceof Map||e instanceof Set)return new n(e);if(e instanceof RegExp){const t=new n(e);t.lastIndex=e.lastIndex;return t}if(e instanceof DataView)return new n(e.buffer.slice(0));if(e instanceof Error){const t=new n(e.message);t.stack=e.stack;t.name=e.name;t.cause=e.cause;return t}if("undefined"!=typeof File&&e instanceof File)return new n([e],e.name,{type:e.type,lastModified:e.lastModified});if("object"==typeof e){const n=Object.create(t);return Object.assign(n,e)}return e}(r.get(t));r.set(t,e);if(Array.isArray(t)){t=t.slice();for(let e=0;e<t.length;e++)t[e]=t[e]??void 0}const i=[...Object.keys(t),...getSymbols(t)];for(let o=0;o<i.length;o++){const s=i[o];if(isUnsafeProperty(s))continue;let u=t[s],a=e[s];isArguments(u)&&(u={...u});isArguments(a)&&(a={...a});"undefined"!=typeof Buffer&&Buffer.isBuffer(u)&&(u=cloneDeep(u));if(Array.isArray(u))if("object"==typeof a&&null!=a){const e=[],t=Reflect.ownKeys(a);for(let n=0;n<t.length;n++){const r=t[n];e[r]=a[r]}a=e}else a=[];const c=n(a,u,s,e,t,r);void 0!==c?e[s]=c:Array.isArray(u)||isObjectLike(a)&&isObjectLike(u)?e[s]=mergeWithDeep(a,u,n,r):null==a&&isPlainObject(u)?e[s]=mergeWithDeep({},u,n,r):null==a&&isTypedArray(u)?e[s]=cloneDeep(u):void 0!==a&&void 0===u||(e[s]=u)}return e}function merge(e,...t){return mergeWith(e,...t,noop$1)}function omit(e,...t){if(null==e)return{};const n=cloneDeep$1(e);for(let e=0;e<t.length;e++){let r=t[e];switch(typeof r){case"object":Array.isArray(r)||(r=Array.from(r));for(let e=0;e<r.length;e++){unset(n,r[e])}break;case"string":case"symbol":case"number":unset(n,r)}}return n}function getSymbolsIn(e){const t=[];for(;e;){t.push(...getSymbols(e));e=Object.getPrototypeOf(e)}return t}function omitBy(e,t){if(null==e)return{};const n={},r=iteratee(t??identity),i=isArrayLike(e)?range$1(0,e.length):[...keysIn(e),...getSymbolsIn(e)];for(let t=0;t<i.length;t++){const o=isSymbol$1(i[t])?i[t]:i[t].toString(),s=e[o];r(s,o,e)||(n[o]=s)}return n}function pick(e,...t){if(isNil(e))return{};const n={};for(let r=0;r<t.length;r++){let i=t[r];switch(typeof i){case"object":Array.isArray(i)||(i=isArrayLike(i)?Array.from(i):[i]);break;case"string":case"symbol":case"number":i=[i]}for(const t of i){const r=get(e,t);(void 0!==r||has(e,t))&&("string"==typeof t&&Object.hasOwn(e,t)?n[t]=r:set(n,t,r))}}return n}function pickBy(e,t){if(null==e)return{};const n=iteratee(t??identity),r={},i=isArrayLike(e)?range$1(0,e.length):[...keysIn(e),...getSymbolsIn(e)];for(let t=0;t<i.length;t++){const o=isSymbol$1(i[t])?i[t]:i[t].toString(),s=e[o];n(s,o,e)&&(r[o]=s)}return r}function propertyOf(e){return function(t){return get(e,t)}}function result(e,t,n){isKey(t,e)?t=[t]:Array.isArray(t)||(t=toPath(toString(t)));const r=Math.max(t.length,1);for(let i=0;i<r;i++){const r=null==e?void 0:e[toKey(t[i])];if(void 0===r)return"function"==typeof n?n.call(e):n;e="function"==typeof r?r.call(e):r}return e}function setWith(e,t,n,r){let i;i="function"==typeof r?r:()=>{};return updateWith(e,t,(()=>n),i)}function toDefaulted(e,...t){return defaults(cloneDeep(e),...t)}function mapToEntries(e){const t=new Array(e.size),n=e.keys(),r=e.values();for(let e=0;e<t.length;e++)t[e]=[n.next().value,r.next().value];return t}function setToEntries(e){const t=new Array(e.size),n=e.values();for(let e=0;e<t.length;e++){const r=n.next().value;t[e]=[r,r]}return t}function toPairs(e){if(null==e)return[];if(e instanceof Set)return setToEntries(e);if(e instanceof Map)return mapToEntries(e);const t=keys(e),n=new Array(t.length);for(let r=0;r<t.length;r++){const i=t[r],o=e[i];n[r]=[i,o]}return n}function toPairsIn(e){if(null==e)return[];if(e instanceof Set)return setToEntries(e);if(e instanceof Map)return mapToEntries(e);const t=keysIn(e),n=new Array(t.length);for(let r=0;r<t.length;r++){const i=t[r],o=e[i];n[r]=[i,o]}return n}function isBuffer(e){return isBuffer$1(e)}function transform(e,t=identity$1,n){const r=Array.isArray(e)||isBuffer(e)||isTypedArray(e);t=iteratee(t);null==n&&(n=r?[]:isObject(e)&&isFunction$1(e.constructor)?Object.create(Object.getPrototypeOf(e)):{});if(null==e)return n;forEach(e,((e,r,i)=>t(n,e,r,i)));return n}function update(e,t,n){return updateWith(e,t,n,(()=>{}))}function valuesIn(e){const t=keysIn(e),n=new Array(t.length);for(let r=0;r<t.length;r++){const i=t[r];n[r]=e[i]}return n}function isFunction(e){return"function"==typeof e}function isLength(e){return Number.isSafeInteger(e)&&e>=0}const D=Function.prototype.toString,z=RegExp(`^${D.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")}$`);function isNative(e){if("function"!=typeof e)return!1;if(null!=globalThis?.["__core-js_shared__"])throw new Error("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return z.test(D.call(e))}function isNull(e){return null===e}function isUndefined(e){return isUndefined$1(e)}function conformsTo(e,t){if(null==t)return!0;if(null==e)return 0===Object.keys(t).length;const n=Object.keys(t);for(let r=0;r<n.length;r++){const i=n[r],o=t[i],s=e[i];if(void 0===s&&!(i in e))return!1;if("function"==typeof o&&!o(s))return!1}return!0}function conforms(e){e=cloneDeep$1(e);return function(t){return conformsTo(t,e)}}function isArrayBuffer(e){return function isArrayBuffer$1(e){return e instanceof ArrayBuffer}(e)}function isBoolean(e){return"boolean"==typeof e||e instanceof Boolean}function isDate(e){return function isDate$1(e){return e instanceof Date}(e)}function isElement(e){return isObjectLike(e)&&1===e.nodeType&&!isPlainObject(e)}function isEmpty(e){if(null==e)return!0;if(isArrayLike(e))return!!("function"==typeof e.splice||"string"==typeof e||"undefined"!=typeof Buffer&&Buffer.isBuffer(e)||isTypedArray(e)||isArguments(e))&&0===e.length;if("object"==typeof e){if(e instanceof Map||e instanceof Set)return 0===e.size;const t=Object.keys(e);return isPrototype(e)?0===t.filter((e=>"constructor"!==e)).length:0===t.length}return!0}function after(e,t){if(!Number.isInteger(e)||e<0)throw new Error("n must be a non-negative integer.");let n=0;return(...r)=>{if(++n>=e)return t(...r)}}function isEqualWith(e,t,n){"function"!=typeof n&&(n=()=>{});return isEqualWith$1(e,t,((...r)=>{const i=n(...r);return void 0!==i?Boolean(i):e instanceof Map&&t instanceof Map||e instanceof Set&&t instanceof Set?isEqualWith(Array.from(e),Array.from(t),after(2,n)):void 0}))}function isError(e){return"[object Error]"===getTag(e)}function isFinite(e){return Number.isFinite(e)}function isInteger(e){return Number.isInteger(e)}function isRegExp(e){return function isRegExp$1(e){return e instanceof RegExp}(e)}function isSafeInteger(e){return Number.isSafeInteger(e)}function isSet(e){return function isSet$1(e){return e instanceof Set}(e)}function isWeakMap(e){return function isWeakMap$1(e){return e instanceof WeakMap}(e)}function isWeakSet(e){return function isWeakSet$1(e){return e instanceof WeakSet}(e)}function capitalize$1(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()}function capitalize(e){return capitalize$1(toString(e))}function bindAll(e,...t){if(null==e)return e;if(!isObject(e))return e;if(isArray(e)&&0===t.length)return e;const n=[];for(let e=0;e<t.length;e++){const r=t[e];isArray(r)?n.push(...r):r&&"object"==typeof r&&"length"in r?n.push(...Array.from(r)):n.push(r)}if(0===n.length)return e;for(let t=0;t<n.length;t++){const r=toString(n[t]),i=e[r];isFunction$1(i)&&(e[r]=i.bind(e))}return e}const q=/\p{Lu}?\p{Ll}+|[0-9]+|\p{Lu}+(?!\p{Ll})|\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{L}+/gu;function words$1(e){return Array.from(e.match(q)??[])}function normalizeForCase(e){"string"!=typeof e&&(e=toString(e));return e.replace(/['\u2019]/g,"")}function camelCase(e){return function camelCase$1(e){const t=words$1(e);if(0===t.length)return"";const[n,...r]=t;return`${n.toLowerCase()}${r.map((e=>capitalize$1(e))).join("")}`}(normalizeForCase(e))}const T=new Map(Object.entries({Æ:"Ae",Ð:"D",Ø:"O",Þ:"Th",ß:"ss",æ:"ae",ð:"d",ø:"o",þ:"th",Đ:"D",đ:"d",Ħ:"H",ħ:"h",ı:"i",Ĳ:"IJ",ĳ:"ij",ĸ:"k",Ŀ:"L",ŀ:"l",Ł:"L",ł:"l",ŉ:"'n",Ŋ:"N",ŋ:"n",Œ:"Oe",œ:"oe",Ŧ:"T",ŧ:"t",ſ:"s"}));function deburr(e){return function deburr$1(e){e=e.normalize("NFD");let t="";for(let n=0;n<e.length;n++){const r=e[n];r>="̀"&&r<="ͯ"||r>="︠"&&r<="︣"||(t+=T.get(r)??r)}return t}(toString(e))}function endsWith(e,t,n){if(null==e||null==t)return!1;null==n&&(n=e.length);return e.endsWith(t,n)}const C={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function escape(e){return function escape$1(e){return e.replace(/[&<>"']/g,(e=>C[e]))}(toString(e))}function escapeRegExp(e){return function escapeRegExp$1(e){return e.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&")}(toString(e))}function kebabCase(e){return function kebabCase$1(e){return words$1(e).map((e=>e.toLowerCase())).join("-")}(normalizeForCase(e))}function lowerCase(e){return function lowerCase$1(e){return words$1(e).map((e=>e.toLowerCase())).join(" ")}(normalizeForCase(e))}function lowerFirst(e){return function lowerFirst$1(e){return e.substring(0,1).toLowerCase()+e.substring(1)}(toString(e))}function pad(e,t,n){return function pad$1(e,t,n=" "){return e.padStart(Math.floor((t-e.length)/2)+e.length,n).padEnd(t,n)}(toString(e),t,n)}function padEnd(e,t=0,n=" "){return toString(e).padEnd(t,n)}function padStart(e,t=0,n=" "){return toString(e).padStart(t,n)}function repeat(e,t,n){t=(n?isIterateeCall(e,t,n):void 0===t)?1:toInteger(t);return toString(e).repeat(t)}function replace(e,t,n){return arguments.length<3?toString(e):toString(e).replace(t,n)}function snakeCase(e){return function snakeCase$1(e){return words$1(e).map((e=>e.toLowerCase())).join("_")}(normalizeForCase(e))}function split(e,t,n){return toString(e).split(t,n)}function startCase(e){const t=words$1(normalizeForCase(e).trim());let n="";for(let e=0;e<t.length;e++){const r=t[e];n&&(n+=" ");r===r.toUpperCase()?n+=r:n+=r[0].toUpperCase()+r.slice(1).toLowerCase()}return n}function startsWith(e,t,n){if(null==e||null==t)return!1;null==n&&(n=0);return e.startsWith(t,n)}const F=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,K=/['\n\r\u2028\u2029\\]/g,U=/($^)/,V=new Map([["\\","\\"],["'","'"],["\n","n"],["\r","r"],["\u2028","u2028"],["\u2029","u2029"]]);function escapeString(e){return`\\${V.get(e)}`}const X={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:"",imports:{_:{escape,template}}};function template(e,t,n){e=toString(e);n&&(t=X);t=defaults({...t},X);const r=new RegExp([t.escape?.source??U.source,t.interpolate?.source??U.source,t.interpolate?F.source:U.source,t.evaluate?.source??U.source,"$"].join("|"),"g");let i=0,o=!1,s="__p += ''";for(const t of e.matchAll(r)){const[n,r,u,a,c]=t,{index:l}=t;s+=` + '${e.slice(i,l).replace(K,escapeString)}'`;r&&(s+=` + _.escape(${r})`);u?s+=` + ((${u}) == null ? '' : ${u})`:a&&(s+=` + ((${a}) == null ? '' : ${a})`);if(c){s+=`;\n${c};\n __p += ''`;o=!0}i=l+n.length}const u=defaults({...t.imports},X.imports),a=Object.keys(u),c=Object.values(u),l=`//# sourceURL=${t.sourceURL?String(t.sourceURL).replace(/[\r\n]/g," "):`es-toolkit.templateSource[${Date.now()}]`}\n`,f=`function(${t.variable||"obj"}) {\n    let __p = '';\n    ${t.variable?"":"if (obj == null) { obj = {}; }"}\n    ${o?"function print() { __p += Array.prototype.join.call(arguments, ''); }":""}\n    ${t.variable?s:`with(obj) {\n${s}\n}`}\n    return __p;\n  }`,p=attempt((()=>new Function(...a,`${l}return ${f}`)(...c)));p.source=f;if(p instanceof Error)throw p;return p}function toLower(e){return toString(e).toLowerCase()}function toUpper(e){return toString(e).toUpperCase()}function trimEnd$1(e,t){if(void 0===t)return e.trimEnd();let n=e.length;switch(typeof t){case"string":if(1!==t.length)throw new Error("The 'chars' parameter should be a single character string.");for(;n>0&&e[n-1]===t;)n--;break;case"object":for(;n>0&&t.includes(e[n-1]);)n--}return e.substring(0,n)}function trimStart$1(e,t){if(void 0===t)return e.trimStart();let n=0;switch(typeof t){case"string":for(;n<e.length&&e[n]===t;)n++;break;case"object":for(;n<e.length&&t.includes(e[n]);)n++}return e.substring(n)}function trim$1(e,t){return void 0===t?e.trim():trimStart$1(trimEnd$1(e,t),t)}function trim(e,t,n){return null==e?"":null!=n||null==t?e.toString().trim():"object"==typeof t&&Array.isArray(t)?trim$1(e,t.flatMap((e=>e.toString().split("")))):trim$1(e,t.toString().split(""))}function trimEnd(e,t,n){return null==e?"":null!=n||null==t?e.toString().trimEnd():trimEnd$1(e,t.toString().split(""))}function trimStart(e,t,n){return null==e?"":null!=n||null==t?e.toString().trimStart():trimStart$1(e,t.toString().split(""))}const G=/[\u200d\ud800-\udfff\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff\ufe0e\ufe0f]/;function truncate(e,t){e=null!=e?`${e}`:"";let n=30,r="...";if(isObject(t)){n=function parseLength(e){if(null==e)return 30;if(e<=0)return 0;return e}(t.length);r="omission"in t?`${t.omission}`:"..."}let i=e.length;const o=Array.from(r).length,s=Math.max(n-o,0);let u;if(G.test(e)){u=Array.from(e);i=u.length}if(n>=i)return e;if(i<=o)return r;let a=void 0===u?e.slice(0,s):u?.slice(0,s).join("");const c=t?.separator;if(!c){a+=r;return a}const l=c instanceof RegExp?c.source:c,f="u"+(c instanceof RegExp?c.flags.replace("u",""):""),p=new RegExp(`(?<result>.*(?:(?!${l}).))(?:${l})`,f).exec(a);return(p?.groups?p.groups.result:a)+r}const H={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"};function unescape(e){return function unescape$1(e){return e.replace(/&(?:amp|lt|gt|quot|#(0+)?39);/g,(e=>H[e]||"'"))}(toString(e))}function upperCase(e){return function upperCase$1(e){const t=words$1(e);let n="";for(let e=0;e<t.length;e++){n+=t[e].toUpperCase();e<t.length-1&&(n+=" ")}return n}(normalizeForCase(e))}function upperFirst(e){return function upperFirst$1(e){return e.substring(0,1).toUpperCase()+e.substring(1)}(toString(e))}const Z="\\p{Lu}",J="\\p{Ll}",Q="(?:[\\p{Lm}\\p{Lo}]\\p{M}*)",Y="\\d",ee="(?:['’](?:d|ll|m|re|s|t|ve))?",te="(?:['’](?:D|LL|M|RE|S|T|VE))?",ne="[\\p{Z}\\p{P}\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\xd7\\xf7]",re=`(?:${J}|${Q})`,ie=RegExp([`${Z}?${J}+${ee}(?=${ne}|${Z}|$)`,`${`(?:${Z}|${Q})`}+${te}(?=${ne}|${Z}${re}|$)`,`${Z}?${re}+${ee}`,`${Z}+${te}`,`${Y}*(?:1ST|2ND|3RD|(?![123])${Y}TH)(?=\\b|[a-z_])`,`${Y}*(?:1st|2nd|3rd|(?![123])${Y}th)(?=\\b|[A-Z_])`,`${Y}+`,"\\p{Emoji_Presentation}","\\p{Extended_Pictographic}"].join("|"),"gu");function words(e,t=ie,n){const r=toString(e);n&&(t=ie);"number"==typeof t&&(t=t.toString());return Array.from(r.match(t)??[]).filter((e=>""!==e))}function cond(e){const t=e.length,n=e.map((e=>{const t=e[0],n=e[1];if(!isFunction$1(n))throw new TypeError("Expected a function");return[iteratee(t),n]}));return function(...e){for(let r=0;r<t;r++){const t=n[r],i=t[0],o=t[1];if(i.apply(this,e))return o.apply(this,e)}}}function constant(e){return()=>e}function defaultTo(e,t){return null==e||Number.isNaN(e)?t:e}function gt(e,t){return"string"==typeof e&&"string"==typeof t?e>t:toNumber(e)>toNumber(t)}function gte(e,t){return"string"==typeof e&&"string"==typeof t?e>=t:toNumber(e)>=toNumber(t)}function invoke(e,t,...n){n=n.flat(1);if(null!=e)switch(typeof t){case"string":return"object"==typeof e&&Object.hasOwn(e,t)?invokeImpl(e,[t],n):invokeImpl(e,toPath(t),n);case"number":case"symbol":return invokeImpl(e,[t],n);default:return Array.isArray(t)?invokeImpl(e,t,n):invokeImpl(e,[t],n)}}function invokeImpl(e,t,n){const r=get(e,t.slice(0,-1),e);if(null==r)return;let i=last(t);const o=i?.valueOf();i="number"==typeof o?toKey(o):String(i);const s=get(r,i);return s?.apply(r,n)}function lt(e,t){return"string"==typeof e&&"string"==typeof t?e<t:toNumber(e)<toNumber(t)}function lte(e,t){return"string"==typeof e&&"string"==typeof t?e<=t:toNumber(e)<=toNumber(t)}function method(e,...t){return function(n){return invoke(n,e,t)}}function methodOf(e,...t){return function(n){return invoke(e,n,t)}}function now(){return Date.now()}function over(...e){1===e.length&&Array.isArray(e[0])&&(e=e[0]);const t=e.map((e=>iteratee(e)));return function(...e){return t.map((t=>t.apply(this,e)))}}function overEvery(...e){return function(...t){for(let n=0;n<e.length;++n){const r=e[n];if(Array.isArray(r)){for(let e=0;e<r.length;++e)if(!iteratee(r[e]).apply(this,t))return!1}else if(!iteratee(r).apply(this,t))return!1}return!0}}function overSome(...e){return function(...t){for(let n=0;n<e.length;++n){const r=e[n];if(Array.isArray(r)){for(let e=0;e<r.length;++e)if(iteratee(r[e]).apply(this,t))return!0}else if(iteratee(r).apply(this,t))return!0}return!1}}function stubArray(){return[]}function stubFalse(){return!1}function stubObject(){return{}}function stubString(){return""}function stubTrue(){return!0}function toLength(e){if(null==e)return 0;return clamp(Math.floor(Number(e)),0,4294967295)}function toPlainObject(e){const t={},n=keysIn(e);for(let r=0;r<n.length;r++){const i=n[r],o=e[i];"__proto__"===i?Object.defineProperty(t,i,{configurable:!0,enumerable:!0,value:o,writable:!0}):t[i]=o}return t}const oe=Number.MAX_SAFE_INTEGER;function toSafeInteger(e){return null==e?0:clamp(toInteger(e),-oe,oe)}let se=0;function uniqueId(e=""){return`${e}${++se}`}const ue=Object.freeze(Object.defineProperty({__proto__:null,add,after:after$1,ary,assign,assignIn,assignInWith,assignWith,at,attempt,before,bind,bindAll,bindKey,camelCase,capitalize,castArray,ceil,chunk,clamp,clone:clone$1,cloneDeep,cloneDeepWith,cloneWith,compact,concat,cond,conforms,conformsTo,constant,countBy,create,curry,curryRight,debounce,deburr,defaultTo,defaults,defaultsDeep,defer,delay,difference,differenceBy,differenceWith,divide,drop,dropRight,dropRightWhile,dropWhile,each:forEach,eachRight:forEachRight,endsWith,eq,escape,escapeRegExp,every,extend:assignIn,extendWith:assignInWith,fill,filter,find,findIndex,findKey,findLast,findLastIndex,findLastKey,first:head,flatMap,flatMapDeep,flatMapDepth,flatten,flattenDeep,flattenDepth,flip,floor,flow,flowRight,forEach,forEachRight,forIn,forInRight,forOwn,forOwnRight,fromPairs,functions,functionsIn,get,groupBy,gt,gte,has,hasIn,head,identity,inRange,includes,indexOf,initial,intersection,intersectionBy,intersectionWith,invert,invertBy,invoke,invokeMap,isArguments,isArray,isArrayBuffer,isArrayLike,isArrayLikeObject,isBoolean,isBuffer,isDate,isElement,isEmpty,isEqual,isEqualWith,isError,isFinite,isFunction,isInteger,isLength,isMap,isMatch,isMatchWith,isNaN,isNative,isNil,isNull,isNumber,isObject,isObjectLike,isPlainObject,isRegExp,isSafeInteger,isSet,isString,isSymbol:isSymbol$1,isTypedArray,isUndefined,isWeakMap,isWeakSet,iteratee,join,kebabCase,keyBy,keys,keysIn,last,lastIndexOf,lowerCase,lowerFirst,lt,lte,map,mapKeys,mapValues,matches,matchesProperty,max,maxBy,mean:mean$1,meanBy,memoize,merge,mergeWith,method,methodOf,min,minBy,multiply,negate:negate$1,noop,now,nth,nthArg,omit,omitBy,once,orderBy,over,overArgs,overEvery,overSome,pad,padEnd,padStart,parseInt,partial,partialRight,partition,pick,pickBy,property,propertyOf,pull,pullAll,pullAllBy,pullAllWith,pullAt,random,range,rangeRight,rearg,reduce,reduceRight,reject,remove,repeat,replace,rest,result,reverse,round,sample,sampleSize,set,setWith,shuffle,size,slice,snakeCase,some,sortBy,sortedIndex,sortedIndexBy,sortedIndexOf,sortedLastIndex,sortedLastIndexBy,sortedLastIndexOf,split,spread,startCase,startsWith,stubArray,stubFalse,stubObject,stubString,stubTrue,subtract,sum:sum$1,sumBy,tail,take,takeRight,takeRightWhile,takeWhile,template,templateSettings:X,throttle,times,toArray,toDefaulted,toFinite,toInteger,toLength,toLower,toNumber,toPairs,toPairsIn,toPath,toPlainObject,toSafeInteger,toString,toUpper,transform,trim,trimEnd,trimStart,truncate,unary,unescape,union,unionBy,unionWith,uniq,uniqBy,uniqWith,uniqueId,unset,unzip,unzipWith,update,updateWith,upperCase,upperFirst,values,valuesIn,without,words,wrap,xor,xorBy,xorWith,zip,zipObject,zipObjectDeep,zipWith},Symbol.toStringTag,{value:"Module"})),toolkit=e=>e;Object.assign(toolkit,ue);toolkit.partial.placeholder=toolkit;toolkit.partialRight.placeholder=toolkit;e.add=add;e.after=after$1;e.ary=ary;e.assign=assign;e.assignIn=assignIn;e.assignInWith=assignInWith;e.assignWith=assignWith;e.at=at;e.attempt=attempt;e.before=before;e.bind=bind;e.bindAll=bindAll;e.bindKey=bindKey;e.camelCase=camelCase;e.capitalize=capitalize;e.castArray=castArray;e.ceil=ceil;e.chunk=chunk;e.clamp=clamp;e.clone=clone$1;e.cloneDeep=cloneDeep;e.cloneDeepWith=cloneDeepWith;e.cloneWith=cloneWith;e.compact=compact;e.concat=concat;e.cond=cond;e.conforms=conforms;e.conformsTo=conformsTo;e.constant=constant;e.countBy=countBy;e.create=create;e.curry=curry;e.curryRight=curryRight;e.debounce=debounce;e.deburr=deburr;e.default=toolkit;e.defaultTo=defaultTo;e.defaults=defaults;e.defaultsDeep=defaultsDeep;e.defer=defer;e.delay=delay;e.difference=difference;e.differenceBy=differenceBy;e.differenceWith=differenceWith;e.divide=divide;e.drop=drop;e.dropRight=dropRight;e.dropRightWhile=dropRightWhile;e.dropWhile=dropWhile;e.each=forEach;e.eachRight=forEachRight;e.endsWith=endsWith;e.eq=eq;e.escape=escape;e.escapeRegExp=escapeRegExp;e.every=every;e.extend=assignIn;e.extendWith=assignInWith;e.fill=fill;e.filter=filter;e.find=find;e.findIndex=findIndex;e.findKey=findKey;e.findLast=findLast;e.findLastIndex=findLastIndex;e.findLastKey=findLastKey;e.first=head;e.flatMap=flatMap;e.flatMapDeep=flatMapDeep;e.flatMapDepth=flatMapDepth;e.flatten=flatten;e.flattenDeep=flattenDeep;e.flattenDepth=flattenDepth;e.flip=flip;e.floor=floor;e.flow=flow;e.flowRight=flowRight;e.forEach=forEach;e.forEachRight=forEachRight;e.forIn=forIn;e.forInRight=forInRight;e.forOwn=forOwn;e.forOwnRight=forOwnRight;e.fromPairs=fromPairs;e.functions=functions;e.functionsIn=functionsIn;e.get=get;e.groupBy=groupBy;e.gt=gt;e.gte=gte;e.has=has;e.hasIn=hasIn;e.head=head;e.identity=identity;e.inRange=inRange;e.includes=includes;e.indexOf=indexOf;e.initial=initial;e.intersection=intersection;e.intersectionBy=intersectionBy;e.intersectionWith=intersectionWith;e.invert=invert;e.invertBy=invertBy;e.invoke=invoke;e.invokeMap=invokeMap;e.isArguments=isArguments;e.isArray=isArray;e.isArrayBuffer=isArrayBuffer;e.isArrayLike=isArrayLike;e.isArrayLikeObject=isArrayLikeObject;e.isBoolean=isBoolean;e.isBuffer=isBuffer;e.isDate=isDate;e.isElement=isElement;e.isEmpty=isEmpty;e.isEqual=isEqual;e.isEqualWith=isEqualWith;e.isError=isError;e.isFinite=isFinite;e.isFunction=isFunction;e.isInteger=isInteger;e.isLength=isLength;e.isMap=isMap;e.isMatch=isMatch;e.isMatchWith=isMatchWith;e.isNaN=isNaN;e.isNative=isNative;e.isNil=isNil;e.isNull=isNull;e.isNumber=isNumber;e.isObject=isObject;e.isObjectLike=isObjectLike;e.isPlainObject=isPlainObject;e.isRegExp=isRegExp;e.isSafeInteger=isSafeInteger;e.isSet=isSet;e.isString=isString;e.isSymbol=isSymbol$1;e.isTypedArray=isTypedArray;e.isUndefined=isUndefined;e.isWeakMap=isWeakMap;e.isWeakSet=isWeakSet;e.iteratee=iteratee;e.join=join;e.kebabCase=kebabCase;e.keyBy=keyBy;e.keys=keys;e.keysIn=keysIn;e.last=last;e.lastIndexOf=lastIndexOf;e.lowerCase=lowerCase;e.lowerFirst=lowerFirst;e.lt=lt;e.lte=lte;e.map=map;e.mapKeys=mapKeys;e.mapValues=mapValues;e.matches=matches;e.matchesProperty=matchesProperty;e.max=max;e.maxBy=maxBy;e.mean=mean$1;e.meanBy=meanBy;e.memoize=memoize;e.merge=merge;e.mergeWith=mergeWith;e.method=method;e.methodOf=methodOf;e.min=min;e.minBy=minBy;e.multiply=multiply;e.negate=negate$1;e.noop=noop;e.now=now;e.nth=nth;e.nthArg=nthArg;e.omit=omit;e.omitBy=omitBy;e.once=once;e.orderBy=orderBy;e.over=over;e.overArgs=overArgs;e.overEvery=overEvery;e.overSome=overSome;e.pad=pad;e.padEnd=padEnd;e.padStart=padStart;e.parseInt=parseInt;e.partial=partial;e.partialRight=partialRight;e.partition=partition;e.pick=pick;e.pickBy=pickBy;e.property=property;e.propertyOf=propertyOf;e.pull=pull;e.pullAll=pullAll;e.pullAllBy=pullAllBy;e.pullAllWith=pullAllWith;e.pullAt=pullAt;e.random=random;e.range=range;e.rangeRight=rangeRight;e.rearg=rearg;e.reduce=reduce;e.reduceRight=reduceRight;e.reject=reject;e.remove=remove;e.repeat=repeat;e.replace=replace;e.rest=rest;e.result=result;e.reverse=reverse;e.round=round;e.sample=sample;e.sampleSize=sampleSize;e.set=set;e.setWith=setWith;e.shuffle=shuffle;e.size=size;e.slice=slice;e.snakeCase=snakeCase;e.some=some;e.sortBy=sortBy;e.sortedIndex=sortedIndex;e.sortedIndexBy=sortedIndexBy;e.sortedIndexOf=sortedIndexOf;e.sortedLastIndex=sortedLastIndex;e.sortedLastIndexBy=sortedLastIndexBy;e.sortedLastIndexOf=sortedLastIndexOf;e.split=split;e.spread=spread;e.startCase=startCase;e.startsWith=startsWith;e.stubArray=stubArray;e.stubFalse=stubFalse;e.stubObject=stubObject;e.stubString=stubString;e.stubTrue=stubTrue;e.subtract=subtract;e.sum=sum$1;e.sumBy=sumBy;e.tail=tail;e.take=take;e.takeRight=takeRight;e.takeRightWhile=takeRightWhile;e.takeWhile=takeWhile;e.template=template;e.templateSettings=X;e.throttle=throttle;e.times=times;e.toArray=toArray;e.toDefaulted=toDefaulted;e.toFinite=toFinite;e.toInteger=toInteger;e.toLength=toLength;e.toLower=toLower;e.toNumber=toNumber;e.toPairs=toPairs;e.toPairsIn=toPairsIn;e.toPath=toPath;e.toPlainObject=toPlainObject;e.toSafeInteger=toSafeInteger;e.toString=toString;e.toUpper=toUpper;e.transform=transform;e.trim=trim;e.trimEnd=trimEnd;e.trimStart=trimStart;e.truncate=truncate;e.unary=unary;e.unescape=unescape;e.union=union;e.unionBy=unionBy;e.unionWith=unionWith;e.uniq=uniq;e.uniqBy=uniqBy;e.uniqWith=uniqWith;e.uniqueId=uniqueId;e.unset=unset;e.unzip=unzip;e.unzipWith=unzipWith;e.update=update;e.updateWith=updateWith;e.upperCase=upperCase;e.upperFirst=upperFirst;e.values=values;e.valuesIn=valuesIn;e.without=without;e.words=words;e.wrap=wrap;e.xor=xor;e.xorBy=xorBy;e.xorWith=xorWith;e.zip=zip;e.zipObject=zipObject;e.zipObjectDeep=zipObjectDeep;e.zipWith=zipWith;Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});return e}({});
Index: node_modules/es-toolkit/dist/compat/_internal/ArrayIterator.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ArrayIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ArrayIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ArrayIterator<T, R> = (value: T, index: number, collection: T[]) => R;
+
+export type { ArrayIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/ArrayIterator.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ArrayIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ArrayIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ArrayIterator<T, R> = (value: T, index: number, collection: T[]) => R;
+
+export type { ArrayIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/ConformsPredicateObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ConformsPredicateObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ConformsPredicateObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+type ConformsPredicateObject<T> = {
+    [P in keyof T]: T[P] extends (arg: infer A) => any ? A : any;
+};
+
+export type { ConformsPredicateObject };
Index: node_modules/es-toolkit/dist/compat/_internal/ConformsPredicateObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ConformsPredicateObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ConformsPredicateObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+type ConformsPredicateObject<T> = {
+    [P in keyof T]: T[P] extends (arg: infer A) => any ? A : any;
+};
+
+export type { ConformsPredicateObject };
Index: node_modules/es-toolkit/dist/compat/_internal/EmptyObjectOf.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/EmptyObjectOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/EmptyObjectOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+type EmptyObject<T> = {
+    [K in keyof T]?: never;
+};
+type EmptyObjectOf<T> = EmptyObject<T> extends T ? EmptyObject<T> : never;
+
+export type { EmptyObjectOf };
Index: node_modules/es-toolkit/dist/compat/_internal/EmptyObjectOf.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/EmptyObjectOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/EmptyObjectOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+type EmptyObject<T> = {
+    [K in keyof T]?: never;
+};
+type EmptyObjectOf<T> = EmptyObject<T> extends T ? EmptyObject<T> : never;
+
+export type { EmptyObjectOf };
Index: node_modules/es-toolkit/dist/compat/_internal/Equals.d.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/Equals.d.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/Equals.d.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type Equals<T, U> = (<X>() => X extends T ? 1 : 2) extends <X>() => X extends U ? 1 : 2 ? true : false;
+
+export type { Equals };
Index: node_modules/es-toolkit/dist/compat/_internal/Equals.d.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/Equals.d.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/Equals.d.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type Equals<T, U> = (<X>() => X extends T ? 1 : 2) extends <X>() => X extends U ? 1 : 2 ? true : false;
+
+export type { Equals };
Index: node_modules/es-toolkit/dist/compat/_internal/GetFieldType.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/GetFieldType.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/GetFieldType.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+type GetFieldTypeOfArrayLikeByKey<T extends unknown[], K> = K extends number ? T[K] : K extends `${infer N extends number}` ? T[N] : K extends keyof T ? T[K] : undefined;
+type GetFieldTypeOfStringByKey<T extends string, K> = K extends number ? T[K] : K extends `${infer N extends number}` ? T[N] : K extends keyof T ? T[K] : undefined;
+type GetFieldTypeOfNarrowedByKey<T, K> = T extends unknown[] ? GetFieldTypeOfArrayLikeByKey<T, K> : T extends string ? GetFieldTypeOfStringByKey<T, K> : K extends keyof T ? T[K] : K extends number ? `${K}` extends keyof T ? T[`${K}`] : undefined : K extends `${infer N extends number}` ? N extends keyof T ? T[N] : undefined : undefined;
+type GetFieldTypeOfNarrowedByDotPath<T, P> = P extends `${infer L}.${infer R}` ? GetFieldType<GetFieldTypeOfNarrowedByKey<T, L>, R, 'DotPath'> : GetFieldTypeOfNarrowedByKey<T, P>;
+type GetFieldTypeOfNarrowedByLcKR<T, Lc, K, R> = '' extends R ? GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'> : R extends `.${infer Rc}` ? GetFieldType<GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'>, Rc> : GetFieldType<GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'>, R>;
+type GetFieldTypeOfNarrowedByLKR<T, L, K, R> = '' extends L ? '' extends R ? GetFieldTypeOfNarrowedByKey<T, K> : R extends `.${infer Rc}` ? GetFieldType<GetFieldTypeOfNarrowedByKey<T, K>, Rc> : GetFieldType<GetFieldTypeOfNarrowedByKey<T, K>, R> : L extends `${infer Lc}.` ? GetFieldTypeOfNarrowedByLcKR<T, Lc, K, R> : GetFieldTypeOfNarrowedByLcKR<T, L, K, R>;
+type GetFieldTypeOfNarrowed<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = XT extends 'Key' ? GetFieldTypeOfNarrowedByKey<T, X> : XT extends 'DotPath' ? GetFieldTypeOfNarrowedByDotPath<T, X> : X extends `${infer L}['${infer K}']${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : X extends `${infer L}["${infer K}"]${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : X extends `${infer L}[${infer K}]${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : GetFieldTypeOfNarrowedByDotPath<T, X>;
+type GetFieldTypeOfObject<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = Extract<T, unknown[]> extends never ? GetFieldTypeOfNarrowed<T, X, XT> : GetFieldTypeOfNarrowed<Exclude<T, unknown[]>, X, XT> | GetFieldTypeOfNarrowed<Extract<T, unknown[]>, X, XT>;
+type GetFieldTypeOfPrimitive<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = Extract<T, string> extends never ? T extends never ? never : undefined : (Exclude<T, string> extends never ? never : undefined) | GetFieldTypeOfNarrowed<Extract<T, string>, X, XT>;
+type GetFieldType<T, X, XT extends 'DotPath' | 'Key' | 'Path' = 'Path'> = Extract<T, object> extends never ? GetFieldTypeOfPrimitive<T, X, XT> : GetFieldTypeOfPrimitive<Exclude<T, object>, X, XT> | GetFieldTypeOfObject<Extract<T, object>, X, XT>;
+
+export type { GetFieldType };
Index: node_modules/es-toolkit/dist/compat/_internal/GetFieldType.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/GetFieldType.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/GetFieldType.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+type GetFieldTypeOfArrayLikeByKey<T extends unknown[], K> = K extends number ? T[K] : K extends `${infer N extends number}` ? T[N] : K extends keyof T ? T[K] : undefined;
+type GetFieldTypeOfStringByKey<T extends string, K> = K extends number ? T[K] : K extends `${infer N extends number}` ? T[N] : K extends keyof T ? T[K] : undefined;
+type GetFieldTypeOfNarrowedByKey<T, K> = T extends unknown[] ? GetFieldTypeOfArrayLikeByKey<T, K> : T extends string ? GetFieldTypeOfStringByKey<T, K> : K extends keyof T ? T[K] : K extends number ? `${K}` extends keyof T ? T[`${K}`] : undefined : K extends `${infer N extends number}` ? N extends keyof T ? T[N] : undefined : undefined;
+type GetFieldTypeOfNarrowedByDotPath<T, P> = P extends `${infer L}.${infer R}` ? GetFieldType<GetFieldTypeOfNarrowedByKey<T, L>, R, 'DotPath'> : GetFieldTypeOfNarrowedByKey<T, P>;
+type GetFieldTypeOfNarrowedByLcKR<T, Lc, K, R> = '' extends R ? GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'> : R extends `.${infer Rc}` ? GetFieldType<GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'>, Rc> : GetFieldType<GetFieldType<GetFieldTypeOfNarrowedByDotPath<T, Lc>, K, 'Key'>, R>;
+type GetFieldTypeOfNarrowedByLKR<T, L, K, R> = '' extends L ? '' extends R ? GetFieldTypeOfNarrowedByKey<T, K> : R extends `.${infer Rc}` ? GetFieldType<GetFieldTypeOfNarrowedByKey<T, K>, Rc> : GetFieldType<GetFieldTypeOfNarrowedByKey<T, K>, R> : L extends `${infer Lc}.` ? GetFieldTypeOfNarrowedByLcKR<T, Lc, K, R> : GetFieldTypeOfNarrowedByLcKR<T, L, K, R>;
+type GetFieldTypeOfNarrowed<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = XT extends 'Key' ? GetFieldTypeOfNarrowedByKey<T, X> : XT extends 'DotPath' ? GetFieldTypeOfNarrowedByDotPath<T, X> : X extends `${infer L}['${infer K}']${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : X extends `${infer L}["${infer K}"]${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : X extends `${infer L}[${infer K}]${infer R}` ? GetFieldTypeOfNarrowedByLKR<T, L, K, R> : GetFieldTypeOfNarrowedByDotPath<T, X>;
+type GetFieldTypeOfObject<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = Extract<T, unknown[]> extends never ? GetFieldTypeOfNarrowed<T, X, XT> : GetFieldTypeOfNarrowed<Exclude<T, unknown[]>, X, XT> | GetFieldTypeOfNarrowed<Extract<T, unknown[]>, X, XT>;
+type GetFieldTypeOfPrimitive<T, X, XT extends 'DotPath' | 'Key' | 'Path'> = Extract<T, string> extends never ? T extends never ? never : undefined : (Exclude<T, string> extends never ? never : undefined) | GetFieldTypeOfNarrowed<Extract<T, string>, X, XT>;
+type GetFieldType<T, X, XT extends 'DotPath' | 'Key' | 'Path' = 'Path'> = Extract<T, object> extends never ? GetFieldTypeOfPrimitive<T, X, XT> : GetFieldTypeOfPrimitive<Exclude<T, object>, X, XT> | GetFieldTypeOfObject<Extract<T, object>, X, XT>;
+
+export type { GetFieldType };
Index: node_modules/es-toolkit/dist/compat/_internal/IsEqualCustomizer.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/IsEqualCustomizer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/IsEqualCustomizer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type IsEqualCustomizer = (value: any, other: any, indexOrKey: PropertyKey | undefined, parent: any, otherParent: any, stack: any) => boolean | undefined;
+
+export type { IsEqualCustomizer };
Index: node_modules/es-toolkit/dist/compat/_internal/IsEqualCustomizer.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/IsEqualCustomizer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/IsEqualCustomizer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type IsEqualCustomizer = (value: any, other: any, indexOrKey: PropertyKey | undefined, parent: any, otherParent: any, stack: any) => boolean | undefined;
+
+export type { IsEqualCustomizer };
Index: node_modules/es-toolkit/dist/compat/_internal/IsMatchWithCustomizer.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/IsMatchWithCustomizer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/IsMatchWithCustomizer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type IsMatchWithCustomizer = (value: any, other: any, indexOrKey: PropertyKey, object: object, source: object) => boolean | undefined;
+
+export type { IsMatchWithCustomizer };
Index: node_modules/es-toolkit/dist/compat/_internal/IsMatchWithCustomizer.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/IsMatchWithCustomizer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/IsMatchWithCustomizer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type IsMatchWithCustomizer = (value: any, other: any, indexOrKey: PropertyKey, object: object, source: object) => boolean | undefined;
+
+export type { IsMatchWithCustomizer };
Index: node_modules/es-toolkit/dist/compat/_internal/IsWritable.d.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/IsWritable.d.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/IsWritable.d.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { Equals } from './Equals.d.mjs';
+
+type IsWritable<T> = Equals<{ [K in keyof T]: T[K] }, { -readonly [K in keyof T]: T[K] }>;
+
+export type { IsWritable };
Index: node_modules/es-toolkit/dist/compat/_internal/IsWritable.d.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/IsWritable.d.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/IsWritable.d.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { Equals } from './Equals.d.js';
+
+type IsWritable<T> = Equals<{ [K in keyof T]: T[K] }, { -readonly [K in keyof T]: T[K] }>;
+
+export type { IsWritable };
Index: node_modules/es-toolkit/dist/compat/_internal/IterateeShorthand.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/IterateeShorthand.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/IterateeShorthand.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PartialShallow } from './PartialShallow.mjs';
+
+type IterateeShorthand<T> = PropertyKey | [PropertyKey, any] | PartialShallow<T>;
+
+export type { IterateeShorthand };
Index: node_modules/es-toolkit/dist/compat/_internal/IterateeShorthand.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/IterateeShorthand.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/IterateeShorthand.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PartialShallow } from './PartialShallow.js';
+
+type IterateeShorthand<T> = PropertyKey | [PropertyKey, any] | PartialShallow<T>;
+
+export type { IterateeShorthand };
Index: node_modules/es-toolkit/dist/compat/_internal/ListIteratee.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListIteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListIteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PartialShallow } from './PartialShallow.mjs';
+
+type ListIteratee<T> = ((value: T, index: number, collection: ArrayLike<T>) => unknown) | (PropertyKey | [PropertyKey, any] | PartialShallow<T>);
+
+export type { ListIteratee };
Index: node_modules/es-toolkit/dist/compat/_internal/ListIteratee.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListIteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListIteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PartialShallow } from './PartialShallow.js';
+
+type ListIteratee<T> = ((value: T, index: number, collection: ArrayLike<T>) => unknown) | (PropertyKey | [PropertyKey, any] | PartialShallow<T>);
+
+export type { ListIteratee };
Index: node_modules/es-toolkit/dist/compat/_internal/ListIterateeCustom.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListIterateeCustom.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListIterateeCustom.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PartialShallow } from './PartialShallow.mjs';
+
+type ListIterateeCustom<T, R> = ((value: T, index: number, collection: ArrayLike<T>) => R) | (PropertyKey | [PropertyKey, any] | PartialShallow<T>);
+
+export type { ListIterateeCustom };
Index: node_modules/es-toolkit/dist/compat/_internal/ListIterateeCustom.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListIterateeCustom.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListIterateeCustom.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PartialShallow } from './PartialShallow.js';
+
+type ListIterateeCustom<T, R> = ((value: T, index: number, collection: ArrayLike<T>) => R) | (PropertyKey | [PropertyKey, any] | PartialShallow<T>);
+
+export type { ListIterateeCustom };
Index: node_modules/es-toolkit/dist/compat/_internal/ListIterator.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ListIterator<T, R> = (value: T, index: number, collection: ArrayLike<T>) => R;
+
+export type { ListIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/ListIterator.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ListIterator<T, R> = (value: T, index: number, collection: ArrayLike<T>) => R;
+
+export type { ListIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/ListIteratorTypeGuard.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListIteratorTypeGuard.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListIteratorTypeGuard.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ListIteratorTypeGuard<T, S extends T> = (value: T, index: number, collection: ArrayLike<T>) => value is S;
+
+export type { ListIteratorTypeGuard };
Index: node_modules/es-toolkit/dist/compat/_internal/ListIteratorTypeGuard.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListIteratorTypeGuard.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListIteratorTypeGuard.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ListIteratorTypeGuard<T, S extends T> = (value: T, index: number, collection: ArrayLike<T>) => value is S;
+
+export type { ListIteratorTypeGuard };
Index: node_modules/es-toolkit/dist/compat/_internal/ListOfRecursiveArraysOrValues.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListOfRecursiveArraysOrValues.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListOfRecursiveArraysOrValues.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import { RecursiveArray } from './RecursiveArray.mjs';
+
+interface ListOfRecursiveArraysOrValues<T> extends ArrayLike<T | RecursiveArray<T>> {
+}
+
+export type { ListOfRecursiveArraysOrValues };
Index: node_modules/es-toolkit/dist/compat/_internal/ListOfRecursiveArraysOrValues.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ListOfRecursiveArraysOrValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ListOfRecursiveArraysOrValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import { RecursiveArray } from './RecursiveArray.js';
+
+interface ListOfRecursiveArraysOrValues<T> extends ArrayLike<T | RecursiveArray<T>> {
+}
+
+export type { ListOfRecursiveArraysOrValues };
Index: node_modules/es-toolkit/dist/compat/_internal/MAX_ARRAY_LENGTH.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MAX_ARRAY_LENGTH.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MAX_ARRAY_LENGTH.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const MAX_ARRAY_LENGTH = 4_294_967_295;
+
+exports.MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH;
Index: node_modules/es-toolkit/dist/compat/_internal/MAX_ARRAY_LENGTH.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MAX_ARRAY_LENGTH.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MAX_ARRAY_LENGTH.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+const MAX_ARRAY_LENGTH = 4_294_967_295;
+
+export { MAX_ARRAY_LENGTH };
Index: node_modules/es-toolkit/dist/compat/_internal/MAX_SAFE_INTEGER.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MAX_SAFE_INTEGER.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MAX_SAFE_INTEGER.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER;
+
+exports.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;
Index: node_modules/es-toolkit/dist/compat/_internal/MAX_SAFE_INTEGER.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MAX_SAFE_INTEGER.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MAX_SAFE_INTEGER.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER;
+
+export { MAX_SAFE_INTEGER };
Index: node_modules/es-toolkit/dist/compat/_internal/Many.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/Many.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/Many.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type Many<T> = T | readonly T[];
+
+export type { Many };
Index: node_modules/es-toolkit/dist/compat/_internal/Many.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/Many.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/Many.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type Many<T> = T | readonly T[];
+
+export type { Many };
Index: node_modules/es-toolkit/dist/compat/_internal/MemoListIterator.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MemoListIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MemoListIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type MemoListIterator<T, R, A> = (prev: R, curr: T, index: number, list: A) => R;
+
+export type { MemoListIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/MemoListIterator.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MemoListIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MemoListIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type MemoListIterator<T, R, A> = (prev: R, curr: T, index: number, list: A) => R;
+
+export type { MemoListIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/MemoObjectIterator.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MemoObjectIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MemoObjectIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type MemoObjectIterator<T, R, A> = (prev: R, curr: T, key: string, list: A) => R;
+
+export type { MemoObjectIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/MemoObjectIterator.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MemoObjectIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MemoObjectIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type MemoObjectIterator<T, R, A> = (prev: R, curr: T, key: string, list: A) => R;
+
+export type { MemoObjectIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/MutableList.d.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MutableList.d.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MutableList.d.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+interface MutableList<T> {
+  length: number;
+  [k: number]: T;
+}
+
+export type { MutableList };
Index: node_modules/es-toolkit/dist/compat/_internal/MutableList.d.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/MutableList.d.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/MutableList.d.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+interface MutableList<T> {
+  length: number;
+  [k: number]: T;
+}
+
+export type { MutableList };
Index: node_modules/es-toolkit/dist/compat/_internal/ObjectIteratee.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ObjectIteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ObjectIteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { IterateeShorthand } from './IterateeShorthand.mjs';
+import { ObjectIterator } from './ObjectIterator.mjs';
+
+type ObjectIteratee<TObject> = ObjectIterator<TObject, unknown> | IterateeShorthand<TObject[keyof TObject]>;
+type ObjectIterateeCustom<TObject, TResult> = ObjectIterator<TObject, TResult> | IterateeShorthand<TObject[keyof TObject]>;
+
+export type { ObjectIteratee, ObjectIterateeCustom };
Index: node_modules/es-toolkit/dist/compat/_internal/ObjectIteratee.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ObjectIteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ObjectIteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { IterateeShorthand } from './IterateeShorthand.js';
+import { ObjectIterator } from './ObjectIterator.js';
+
+type ObjectIteratee<TObject> = ObjectIterator<TObject, unknown> | IterateeShorthand<TObject[keyof TObject]>;
+type ObjectIterateeCustom<TObject, TResult> = ObjectIterator<TObject, TResult> | IterateeShorthand<TObject[keyof TObject]>;
+
+export type { ObjectIteratee, ObjectIterateeCustom };
Index: node_modules/es-toolkit/dist/compat/_internal/ObjectIterator.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ObjectIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ObjectIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+type ObjectIterator<T, R> = (value: T[keyof T], key: string, collection: T) => R;
+type ObjectIteratorTypeGuard<T, U extends T[keyof T]> = (value: T[keyof T], key: string, collection: T) => value is U;
+
+export type { ObjectIterator, ObjectIteratorTypeGuard };
Index: node_modules/es-toolkit/dist/compat/_internal/ObjectIterator.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ObjectIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ObjectIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+type ObjectIterator<T, R> = (value: T[keyof T], key: string, collection: T) => R;
+type ObjectIteratorTypeGuard<T, U extends T[keyof T]> = (value: T[keyof T], key: string, collection: T) => value is U;
+
+export type { ObjectIterator, ObjectIteratorTypeGuard };
Index: node_modules/es-toolkit/dist/compat/_internal/PartialShallow.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/PartialShallow.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/PartialShallow.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+type PartialShallow<T> = {
+    [P in keyof T]?: T[P] extends object ? object : T[P];
+};
+
+export type { PartialShallow };
Index: node_modules/es-toolkit/dist/compat/_internal/PartialShallow.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/PartialShallow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/PartialShallow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+type PartialShallow<T> = {
+    [P in keyof T]?: T[P] extends object ? object : T[P];
+};
+
+export type { PartialShallow };
Index: node_modules/es-toolkit/dist/compat/_internal/PropertyPath.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/PropertyPath.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/PropertyPath.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { Many } from './Many.mjs';
+
+type PropertyPath = Many<PropertyKey>;
+
+export type { PropertyPath };
Index: node_modules/es-toolkit/dist/compat/_internal/PropertyPath.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/PropertyPath.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/PropertyPath.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { Many } from './Many.js';
+
+type PropertyPath = Many<PropertyKey>;
+
+export type { PropertyPath };
Index: node_modules/es-toolkit/dist/compat/_internal/RecursiveArray.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/RecursiveArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/RecursiveArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+interface RecursiveArray<T> extends Array<T | RecursiveArray<T>> {
+}
+
+export type { RecursiveArray };
Index: node_modules/es-toolkit/dist/compat/_internal/RecursiveArray.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/RecursiveArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/RecursiveArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+interface RecursiveArray<T> extends Array<T | RecursiveArray<T>> {
+}
+
+export type { RecursiveArray };
Index: node_modules/es-toolkit/dist/compat/_internal/RejectReadonly.d.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/RejectReadonly.d.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/RejectReadonly.d.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import { IsWritable } from './IsWritable.d.mjs';
+import { MutableList } from './MutableList.d.mjs';
+
+type RejectReadonly<T extends MutableList<unknown>> = IsWritable<T> extends true ? T : never;
+
+export type { RejectReadonly };
Index: node_modules/es-toolkit/dist/compat/_internal/RejectReadonly.d.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/RejectReadonly.d.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/RejectReadonly.d.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import { IsWritable } from './IsWritable.d.js';
+import { MutableList } from './MutableList.d.js';
+
+type RejectReadonly<T extends MutableList<unknown>> = IsWritable<T> extends true ? T : never;
+
+export type { RejectReadonly };
Index: node_modules/es-toolkit/dist/compat/_internal/StringIterator.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/StringIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/StringIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type StringIterator<R> = (char: string, index: number, string: string) => R;
+
+export type { StringIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/StringIterator.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/StringIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/StringIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type StringIterator<R> = (char: string, index: number, string: string) => R;
+
+export type { StringIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/TupleIterator.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/TupleIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/TupleIterator.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type TupleIterator<T extends readonly unknown[], TResult> = (value: T[number], index: T extends `${infer N extends number}` ? N : never, collection: T) => TResult;
+
+export type { TupleIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/TupleIterator.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/TupleIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/TupleIterator.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type TupleIterator<T extends readonly unknown[], TResult> = (value: T[number], index: T extends `${infer N extends number}` ? N : never, collection: T) => TResult;
+
+export type { TupleIterator };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueIteratee.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueIteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueIteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PartialShallow } from './PartialShallow.mjs';
+
+type ValueIteratee<T> = ((value: T) => unknown) | (PropertyKey | [PropertyKey, any] | PartialShallow<T>);
+
+export type { ValueIteratee };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueIteratee.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueIteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueIteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PartialShallow } from './PartialShallow.js';
+
+type ValueIteratee<T> = ((value: T) => unknown) | (PropertyKey | [PropertyKey, any] | PartialShallow<T>);
+
+export type { ValueIteratee };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueIterateeCustom.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueIterateeCustom.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueIterateeCustom.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { IterateeShorthand } from './IterateeShorthand.mjs';
+
+type ValueIterateeCustom<T, TResult> = ((value: T) => TResult) | IterateeShorthand<T>;
+
+export type { ValueIterateeCustom };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueIterateeCustom.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueIterateeCustom.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueIterateeCustom.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { IterateeShorthand } from './IterateeShorthand.js';
+
+type ValueIterateeCustom<T, TResult> = ((value: T) => TResult) | IterateeShorthand<T>;
+
+export type { ValueIterateeCustom };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueIteratorTypeGuard.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueIteratorTypeGuard.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueIteratorTypeGuard.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ValueIteratorTypeGuard<T, S extends T> = (value: T) => value is S;
+
+export type { ValueIteratorTypeGuard };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueIteratorTypeGuard.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueIteratorTypeGuard.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueIteratorTypeGuard.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ValueIteratorTypeGuard<T, S extends T> = (value: T) => value is S;
+
+export type { ValueIteratorTypeGuard };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueKeyIteratee.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueKeyIteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueKeyIteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { IterateeShorthand } from './IterateeShorthand.mjs';
+
+type ValueKeyIteratee<T> = ((value: T, key: string) => unknown) | IterateeShorthand<T>;
+
+export type { ValueKeyIteratee };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueKeyIteratee.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueKeyIteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueKeyIteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { IterateeShorthand } from './IterateeShorthand.js';
+
+type ValueKeyIteratee<T> = ((value: T, key: string) => unknown) | IterateeShorthand<T>;
+
+export type { ValueKeyIteratee };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueKeyIterateeTypeGuard.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueKeyIterateeTypeGuard.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueKeyIterateeTypeGuard.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ValueKeyIterateeTypeGuard<T, S extends T> = (value: T, key: string) => value is S;
+
+export type { ValueKeyIterateeTypeGuard };
Index: node_modules/es-toolkit/dist/compat/_internal/ValueKeyIterateeTypeGuard.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/ValueKeyIterateeTypeGuard.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/ValueKeyIterateeTypeGuard.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+type ValueKeyIterateeTypeGuard<T, S extends T> = (value: T, key: string) => value is S;
+
+export type { ValueKeyIterateeTypeGuard };
Index: node_modules/es-toolkit/dist/compat/_internal/assignValue.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/assignValue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/assignValue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const eq = require('../util/eq.js');
+
+const assignValue = (object, key, value) => {
+    const objValue = object[key];
+    if (!(Object.hasOwn(object, key) && eq.eq(objValue, value)) || (value === undefined && !(key in object))) {
+        object[key] = value;
+    }
+};
+
+exports.assignValue = assignValue;
Index: node_modules/es-toolkit/dist/compat/_internal/assignValue.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/assignValue.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/assignValue.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { eq } from '../util/eq.mjs';
+
+const assignValue = (object, key, value) => {
+    const objValue = object[key];
+    if (!(Object.hasOwn(object, key) && eq(objValue, value)) || (value === undefined && !(key in object))) {
+        object[key] = value;
+    }
+};
+
+export { assignValue };
Index: node_modules/es-toolkit/dist/compat/_internal/compareValues.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/compareValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/compareValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function getPriority(a) {
+    if (typeof a === 'symbol') {
+        return 1;
+    }
+    if (a === null) {
+        return 2;
+    }
+    if (a === undefined) {
+        return 3;
+    }
+    if (a !== a) {
+        return 4;
+    }
+    return 0;
+}
+const compareValues = (a, b, order) => {
+    if (a !== b) {
+        const aPriority = getPriority(a);
+        const bPriority = getPriority(b);
+        if (aPriority === bPriority && aPriority === 0) {
+            if (a < b) {
+                return order === 'desc' ? 1 : -1;
+            }
+            if (a > b) {
+                return order === 'desc' ? -1 : 1;
+            }
+        }
+        return order === 'desc' ? bPriority - aPriority : aPriority - bPriority;
+    }
+    return 0;
+};
+
+exports.compareValues = compareValues;
Index: node_modules/es-toolkit/dist/compat/_internal/compareValues.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/compareValues.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/compareValues.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+function getPriority(a) {
+    if (typeof a === 'symbol') {
+        return 1;
+    }
+    if (a === null) {
+        return 2;
+    }
+    if (a === undefined) {
+        return 3;
+    }
+    if (a !== a) {
+        return 4;
+    }
+    return 0;
+}
+const compareValues = (a, b, order) => {
+    if (a !== b) {
+        const aPriority = getPriority(a);
+        const bPriority = getPriority(b);
+        if (aPriority === bPriority && aPriority === 0) {
+            if (a < b) {
+                return order === 'desc' ? 1 : -1;
+            }
+            if (a > b) {
+                return order === 'desc' ? -1 : 1;
+            }
+        }
+        return order === 'desc' ? bPriority - aPriority : aPriority - bPriority;
+    }
+    return 0;
+};
+
+export { compareValues };
Index: node_modules/es-toolkit/dist/compat/_internal/copyArray.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/copyArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/copyArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+function copyArray(source, array) {
+    const length = source.length;
+    if (array == null) {
+        array = Array(length);
+    }
+    for (let i = 0; i < length; i++) {
+        array[i] = source[i];
+    }
+    return array;
+}
+
+module.exports = copyArray;
Index: node_modules/es-toolkit/dist/compat/_internal/copyArray.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/copyArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/copyArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function copyArray(source, array) {
+    const length = source.length;
+    if (array == null) {
+        array = Array(length);
+    }
+    for (let i = 0; i < length; i++) {
+        array[i] = source[i];
+    }
+    return array;
+}
+
+export { copyArray as default };
Index: node_modules/es-toolkit/dist/compat/_internal/decimalAdjust.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/decimalAdjust.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/decimalAdjust.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function decimalAdjust(type, number, precision = 0) {
+    number = Number(number);
+    if (Object.is(number, -0)) {
+        number = '-0';
+    }
+    precision = Math.min(Number.parseInt(precision, 10), 292);
+    if (precision) {
+        const [magnitude, exponent = 0] = number.toString().split('e');
+        let adjustedValue = Math[type](Number(`${magnitude}e${Number(exponent) + precision}`));
+        if (Object.is(adjustedValue, -0)) {
+            adjustedValue = '-0';
+        }
+        const [newMagnitude, newExponent = 0] = adjustedValue.toString().split('e');
+        return Number(`${newMagnitude}e${Number(newExponent) - precision}`);
+    }
+    return Math[type](Number(number));
+}
+
+exports.decimalAdjust = decimalAdjust;
Index: node_modules/es-toolkit/dist/compat/_internal/decimalAdjust.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/decimalAdjust.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/decimalAdjust.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+function decimalAdjust(type, number, precision = 0) {
+    number = Number(number);
+    if (Object.is(number, -0)) {
+        number = '-0';
+    }
+    precision = Math.min(Number.parseInt(precision, 10), 292);
+    if (precision) {
+        const [magnitude, exponent = 0] = number.toString().split('e');
+        let adjustedValue = Math[type](Number(`${magnitude}e${Number(exponent) + precision}`));
+        if (Object.is(adjustedValue, -0)) {
+            adjustedValue = '-0';
+        }
+        const [newMagnitude, newExponent = 0] = adjustedValue.toString().split('e');
+        return Number(`${newMagnitude}e${Number(newExponent) - precision}`);
+    }
+    return Math[type](Number(number));
+}
+
+export { decimalAdjust };
Index: node_modules/es-toolkit/dist/compat/_internal/flattenArrayLike.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/flattenArrayLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/flattenArrayLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function flattenArrayLike(values) {
+    const result = [];
+    for (let i = 0; i < values.length; i++) {
+        const arrayLike = values[i];
+        if (!isArrayLikeObject.isArrayLikeObject(arrayLike)) {
+            continue;
+        }
+        for (let j = 0; j < arrayLike.length; j++) {
+            result.push(arrayLike[j]);
+        }
+    }
+    return result;
+}
+
+exports.flattenArrayLike = flattenArrayLike;
Index: node_modules/es-toolkit/dist/compat/_internal/flattenArrayLike.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/flattenArrayLike.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/flattenArrayLike.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function flattenArrayLike(values) {
+    const result = [];
+    for (let i = 0; i < values.length; i++) {
+        const arrayLike = values[i];
+        if (!isArrayLikeObject(arrayLike)) {
+            continue;
+        }
+        for (let j = 0; j < arrayLike.length; j++) {
+            result.push(arrayLike[j]);
+        }
+    }
+    return result;
+}
+
+export { flattenArrayLike };
Index: node_modules/es-toolkit/dist/compat/_internal/getSymbols.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/getSymbols.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/getSymbols.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function getSymbols(object) {
+    return Object.getOwnPropertySymbols(object).filter(symbol => Object.prototype.propertyIsEnumerable.call(object, symbol));
+}
+
+exports.getSymbols = getSymbols;
Index: node_modules/es-toolkit/dist/compat/_internal/getSymbols.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/getSymbols.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/getSymbols.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function getSymbols(object) {
+    return Object.getOwnPropertySymbols(object).filter(symbol => Object.prototype.propertyIsEnumerable.call(object, symbol));
+}
+
+export { getSymbols };
Index: node_modules/es-toolkit/dist/compat/_internal/getSymbolsIn.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/getSymbolsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/getSymbolsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const getSymbols = require('./getSymbols.js');
+
+function getSymbolsIn(object) {
+    const result = [];
+    while (object) {
+        result.push(...getSymbols.getSymbols(object));
+        object = Object.getPrototypeOf(object);
+    }
+    return result;
+}
+
+exports.getSymbolsIn = getSymbolsIn;
Index: node_modules/es-toolkit/dist/compat/_internal/getSymbolsIn.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/getSymbolsIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/getSymbolsIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { getSymbols } from './getSymbols.mjs';
+
+function getSymbolsIn(object) {
+    const result = [];
+    while (object) {
+        result.push(...getSymbols(object));
+        object = Object.getPrototypeOf(object);
+    }
+    return result;
+}
+
+export { getSymbolsIn };
Index: node_modules/es-toolkit/dist/compat/_internal/getTag.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/getTag.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/getTag.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function getTag(value) {
+    if (value == null) {
+        return value === undefined ? '[object Undefined]' : '[object Null]';
+    }
+    return Object.prototype.toString.call(value);
+}
+
+exports.getTag = getTag;
Index: node_modules/es-toolkit/dist/compat/_internal/getTag.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/getTag.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/getTag.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function getTag(value) {
+    if (value == null) {
+        return value === undefined ? '[object Undefined]' : '[object Null]';
+    }
+    return Object.prototype.toString.call(value);
+}
+
+export { getTag };
Index: node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isDeepKey(key) {
+    switch (typeof key) {
+        case 'number':
+        case 'symbol': {
+            return false;
+        }
+        case 'string': {
+            return key.includes('.') || key.includes('[') || key.includes(']');
+        }
+    }
+}
+
+exports.isDeepKey = isDeepKey;
Index: node_modules/es-toolkit/dist/compat/_internal/isDeepKey.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isDeepKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isDeepKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+function isDeepKey(key) {
+    switch (typeof key) {
+        case 'number':
+        case 'symbol': {
+            return false;
+        }
+        case 'string': {
+            return key.includes('.') || key.includes('[') || key.includes(']');
+        }
+    }
+}
+
+export { isDeepKey };
Index: node_modules/es-toolkit/dist/compat/_internal/isIndex.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const IS_UNSIGNED_INTEGER = /^(?:0|[1-9]\d*)$/;
+function isIndex(value, length = Number.MAX_SAFE_INTEGER) {
+    switch (typeof value) {
+        case 'number': {
+            return Number.isInteger(value) && value >= 0 && value < length;
+        }
+        case 'symbol': {
+            return false;
+        }
+        case 'string': {
+            return IS_UNSIGNED_INTEGER.test(value);
+        }
+    }
+}
+
+exports.isIndex = isIndex;
Index: node_modules/es-toolkit/dist/compat/_internal/isIndex.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+const IS_UNSIGNED_INTEGER = /^(?:0|[1-9]\d*)$/;
+function isIndex(value, length = Number.MAX_SAFE_INTEGER) {
+    switch (typeof value) {
+        case 'number': {
+            return Number.isInteger(value) && value >= 0 && value < length;
+        }
+        case 'symbol': {
+            return false;
+        }
+        case 'string': {
+            return IS_UNSIGNED_INTEGER.test(value);
+        }
+    }
+}
+
+export { isIndex };
Index: node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isIndex = require('./isIndex.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isObject = require('../predicate/isObject.js');
+const eq = require('../util/eq.js');
+
+function isIterateeCall(value, index, object) {
+    if (!isObject.isObject(object)) {
+        return false;
+    }
+    if ((typeof index === 'number' && isArrayLike.isArrayLike(object) && isIndex.isIndex(index) && index < object.length) ||
+        (typeof index === 'string' && index in object)) {
+        return eq.eq(object[index], value);
+    }
+    return false;
+}
+
+exports.isIterateeCall = isIterateeCall;
Index: node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { isIndex } from './isIndex.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isObject } from '../predicate/isObject.mjs';
+import { eq } from '../util/eq.mjs';
+
+function isIterateeCall(value, index, object) {
+    if (!isObject(object)) {
+        return false;
+    }
+    if ((typeof index === 'number' && isArrayLike(object) && isIndex(index) && index < object.length) ||
+        (typeof index === 'string' && index in object)) {
+        return eq(object[index], value);
+    }
+    return false;
+}
+
+export { isIterateeCall };
Index: node_modules/es-toolkit/dist/compat/_internal/isKey.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isSymbol = require('../predicate/isSymbol.js');
+
+const regexIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
+const regexIsPlainProp = /^\w*$/;
+function isKey(value, object) {
+    if (Array.isArray(value)) {
+        return false;
+    }
+    if (typeof value === 'number' || typeof value === 'boolean' || value == null || isSymbol.isSymbol(value)) {
+        return true;
+    }
+    return ((typeof value === 'string' && (regexIsPlainProp.test(value) || !regexIsDeepProp.test(value))) ||
+        (object != null && Object.hasOwn(object, value)));
+}
+
+exports.isKey = isKey;
Index: node_modules/es-toolkit/dist/compat/_internal/isKey.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { isSymbol } from '../predicate/isSymbol.mjs';
+
+const regexIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
+const regexIsPlainProp = /^\w*$/;
+function isKey(value, object) {
+    if (Array.isArray(value)) {
+        return false;
+    }
+    if (typeof value === 'number' || typeof value === 'boolean' || value == null || isSymbol(value)) {
+        return true;
+    }
+    return ((typeof value === 'string' && (regexIsPlainProp.test(value) || !regexIsDeepProp.test(value))) ||
+        (object != null && Object.hasOwn(object, value)));
+}
+
+export { isKey };
Index: node_modules/es-toolkit/dist/compat/_internal/isPrototype.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isPrototype.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isPrototype.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isPrototype(value) {
+    const constructor = value?.constructor;
+    const prototype = typeof constructor === 'function' ? constructor.prototype : Object.prototype;
+    return value === prototype;
+}
+
+exports.isPrototype = isPrototype;
Index: node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+function isPrototype(value) {
+    const constructor = value?.constructor;
+    const prototype = typeof constructor === 'function' ? constructor.prototype : Object.prototype;
+    return value === prototype;
+}
+
+export { isPrototype };
Index: node_modules/es-toolkit/dist/compat/_internal/mapToEntries.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/mapToEntries.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/mapToEntries.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function mapToEntries(map) {
+    const arr = new Array(map.size);
+    const keys = map.keys();
+    const values = map.values();
+    for (let i = 0; i < arr.length; i++) {
+        arr[i] = [keys.next().value, values.next().value];
+    }
+    return arr;
+}
+
+exports.mapToEntries = mapToEntries;
Index: node_modules/es-toolkit/dist/compat/_internal/mapToEntries.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/mapToEntries.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/mapToEntries.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function mapToEntries(map) {
+    const arr = new Array(map.size);
+    const keys = map.keys();
+    const values = map.values();
+    for (let i = 0; i < arr.length; i++) {
+        arr[i] = [keys.next().value, values.next().value];
+    }
+    return arr;
+}
+
+export { mapToEntries };
Index: node_modules/es-toolkit/dist/compat/_internal/normalizeForCase.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/normalizeForCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/normalizeForCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toString = require('../util/toString.js');
+
+function normalizeForCase(str) {
+    if (typeof str !== 'string') {
+        str = toString.toString(str);
+    }
+    return str.replace(/['\u2019]/g, '');
+}
+
+exports.normalizeForCase = normalizeForCase;
Index: node_modules/es-toolkit/dist/compat/_internal/normalizeForCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/normalizeForCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/normalizeForCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { toString } from '../util/toString.mjs';
+
+function normalizeForCase(str) {
+    if (typeof str !== 'string') {
+        str = toString(str);
+    }
+    return str.replace(/['\u2019]/g, '');
+}
+
+export { normalizeForCase };
Index: node_modules/es-toolkit/dist/compat/_internal/setToEntries.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/setToEntries.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/setToEntries.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function setToEntries(set) {
+    const arr = new Array(set.size);
+    const values = set.values();
+    for (let i = 0; i < arr.length; i++) {
+        const value = values.next().value;
+        arr[i] = [value, value];
+    }
+    return arr;
+}
+
+exports.setToEntries = setToEntries;
Index: node_modules/es-toolkit/dist/compat/_internal/setToEntries.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/setToEntries.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/setToEntries.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function setToEntries(set) {
+    const arr = new Array(set.size);
+    const values = set.values();
+    for (let i = 0; i < arr.length; i++) {
+        const value = values.next().value;
+        arr[i] = [value, value];
+    }
+    return arr;
+}
+
+export { setToEntries };
Index: node_modules/es-toolkit/dist/compat/_internal/tags.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/tags.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/tags.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const regexpTag = '[object RegExp]';
+const stringTag = '[object String]';
+const numberTag = '[object Number]';
+const booleanTag = '[object Boolean]';
+const argumentsTag = '[object Arguments]';
+const symbolTag = '[object Symbol]';
+const dateTag = '[object Date]';
+const mapTag = '[object Map]';
+const setTag = '[object Set]';
+const arrayTag = '[object Array]';
+const functionTag = '[object Function]';
+const arrayBufferTag = '[object ArrayBuffer]';
+const objectTag = '[object Object]';
+const errorTag = '[object Error]';
+const dataViewTag = '[object DataView]';
+const uint8ArrayTag = '[object Uint8Array]';
+const uint8ClampedArrayTag = '[object Uint8ClampedArray]';
+const uint16ArrayTag = '[object Uint16Array]';
+const uint32ArrayTag = '[object Uint32Array]';
+const bigUint64ArrayTag = '[object BigUint64Array]';
+const int8ArrayTag = '[object Int8Array]';
+const int16ArrayTag = '[object Int16Array]';
+const int32ArrayTag = '[object Int32Array]';
+const bigInt64ArrayTag = '[object BigInt64Array]';
+const float32ArrayTag = '[object Float32Array]';
+const float64ArrayTag = '[object Float64Array]';
+
+exports.argumentsTag = argumentsTag;
+exports.arrayBufferTag = arrayBufferTag;
+exports.arrayTag = arrayTag;
+exports.bigInt64ArrayTag = bigInt64ArrayTag;
+exports.bigUint64ArrayTag = bigUint64ArrayTag;
+exports.booleanTag = booleanTag;
+exports.dataViewTag = dataViewTag;
+exports.dateTag = dateTag;
+exports.errorTag = errorTag;
+exports.float32ArrayTag = float32ArrayTag;
+exports.float64ArrayTag = float64ArrayTag;
+exports.functionTag = functionTag;
+exports.int16ArrayTag = int16ArrayTag;
+exports.int32ArrayTag = int32ArrayTag;
+exports.int8ArrayTag = int8ArrayTag;
+exports.mapTag = mapTag;
+exports.numberTag = numberTag;
+exports.objectTag = objectTag;
+exports.regexpTag = regexpTag;
+exports.setTag = setTag;
+exports.stringTag = stringTag;
+exports.symbolTag = symbolTag;
+exports.uint16ArrayTag = uint16ArrayTag;
+exports.uint32ArrayTag = uint32ArrayTag;
+exports.uint8ArrayTag = uint8ArrayTag;
+exports.uint8ClampedArrayTag = uint8ClampedArrayTag;
Index: node_modules/es-toolkit/dist/compat/_internal/tags.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/tags.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/tags.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+const regexpTag = '[object RegExp]';
+const stringTag = '[object String]';
+const numberTag = '[object Number]';
+const booleanTag = '[object Boolean]';
+const argumentsTag = '[object Arguments]';
+const symbolTag = '[object Symbol]';
+const dateTag = '[object Date]';
+const mapTag = '[object Map]';
+const setTag = '[object Set]';
+const arrayTag = '[object Array]';
+const functionTag = '[object Function]';
+const arrayBufferTag = '[object ArrayBuffer]';
+const objectTag = '[object Object]';
+const errorTag = '[object Error]';
+const dataViewTag = '[object DataView]';
+const uint8ArrayTag = '[object Uint8Array]';
+const uint8ClampedArrayTag = '[object Uint8ClampedArray]';
+const uint16ArrayTag = '[object Uint16Array]';
+const uint32ArrayTag = '[object Uint32Array]';
+const bigUint64ArrayTag = '[object BigUint64Array]';
+const int8ArrayTag = '[object Int8Array]';
+const int16ArrayTag = '[object Int16Array]';
+const int32ArrayTag = '[object Int32Array]';
+const bigInt64ArrayTag = '[object BigInt64Array]';
+const float32ArrayTag = '[object Float32Array]';
+const float64ArrayTag = '[object Float64Array]';
+
+export { argumentsTag, arrayBufferTag, arrayTag, bigInt64ArrayTag, bigUint64ArrayTag, booleanTag, dataViewTag, dateTag, errorTag, float32ArrayTag, float64ArrayTag, functionTag, int16ArrayTag, int32ArrayTag, int8ArrayTag, mapTag, numberTag, objectTag, regexpTag, setTag, stringTag, symbolTag, uint16ArrayTag, uint32ArrayTag, uint8ArrayTag, uint8ClampedArrayTag };
Index: node_modules/es-toolkit/dist/compat/_internal/toArray.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/toArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/toArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function toArray(value) {
+    return Array.isArray(value) ? value : Array.from(value);
+}
+
+exports.toArray = toArray;
Index: node_modules/es-toolkit/dist/compat/_internal/toArray.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/toArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/toArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function toArray(value) {
+    return Array.isArray(value) ? value : Array.from(value);
+}
+
+export { toArray };
Index: node_modules/es-toolkit/dist/compat/_internal/toKey.js
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/toKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/toKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function toKey(value) {
+    if (typeof value === 'string' || typeof value === 'symbol') {
+        return value;
+    }
+    if (Object.is(value?.valueOf?.(), -0)) {
+        return '-0';
+    }
+    return String(value);
+}
+
+exports.toKey = toKey;
Index: node_modules/es-toolkit/dist/compat/_internal/toKey.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/_internal/toKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/_internal/toKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function toKey(value) {
+    if (typeof value === 'string' || typeof value === 'symbol') {
+        return value;
+    }
+    if (Object.is(value?.valueOf?.(), -0)) {
+        return '-0';
+    }
+    return String(value);
+}
+
+export { toKey };
Index: node_modules/es-toolkit/dist/compat/array/castArray.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/castArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/castArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Casts value as an array if it's not one.
+ *
+ * @template T The type of elements in the array.
+ * @param {T | T[]} value The value to be cast to an array.
+ * @returns {T[]} An array containing the input value if it wasn't an array, or the original array if it was.
+ *
+ * @example
+ * const arr1 = castArray(1);
+ * // Returns: [1]
+ *
+ * const arr2 = castArray([1]);
+ * // Returns: [1]
+ *
+ * const arr3 = castArray({'a': 1});
+ * // Returns: [{'a': 1}]
+ *
+ * const arr4 = castArray(null);
+ * // Returns: [null]
+ *
+ * const arr5 = castArray(undefined);
+ * // Returns: [undefined]
+ *
+ * const arr6 = castArray();
+ * // Returns: []
+ */
+declare function castArray<T>(value?: T | readonly T[]): T[];
+
+export { castArray };
Index: node_modules/es-toolkit/dist/compat/array/castArray.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/castArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/castArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Casts value as an array if it's not one.
+ *
+ * @template T The type of elements in the array.
+ * @param {T | T[]} value The value to be cast to an array.
+ * @returns {T[]} An array containing the input value if it wasn't an array, or the original array if it was.
+ *
+ * @example
+ * const arr1 = castArray(1);
+ * // Returns: [1]
+ *
+ * const arr2 = castArray([1]);
+ * // Returns: [1]
+ *
+ * const arr3 = castArray({'a': 1});
+ * // Returns: [{'a': 1}]
+ *
+ * const arr4 = castArray(null);
+ * // Returns: [null]
+ *
+ * const arr5 = castArray(undefined);
+ * // Returns: [undefined]
+ *
+ * const arr6 = castArray();
+ * // Returns: []
+ */
+declare function castArray<T>(value?: T | readonly T[]): T[];
+
+export { castArray };
Index: node_modules/es-toolkit/dist/compat/array/castArray.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/castArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/castArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function castArray(value) {
+    if (arguments.length === 0) {
+        return [];
+    }
+    return Array.isArray(value) ? value : [value];
+}
+
+exports.castArray = castArray;
Index: node_modules/es-toolkit/dist/compat/array/castArray.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/castArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/castArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function castArray(value) {
+    if (arguments.length === 0) {
+        return [];
+    }
+    return Array.isArray(value) ? value : [value];
+}
+
+export { castArray };
Index: node_modules/es-toolkit/dist/compat/array/chunk.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/chunk.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/chunk.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Splits an array into smaller arrays of a specified length.
+ *
+ * This function takes an input array and divides it into multiple smaller arrays,
+ * each of a specified length. If the input array cannot be evenly divided,
+ * the final sub-array will contain the remaining elements.
+ *
+ * @template T The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr - The array to be chunked into smaller arrays.
+ * @param {number} size - The size of each smaller array. Must be a positive integer.
+ * @returns {T[][]} A two-dimensional array where each sub-array has a maximum length of `size`.
+ *
+ * @example
+ * // Splits an array of numbers into sub-arrays of length 2
+ * chunk([1, 2, 3, 4, 5], 2);
+ * // Returns: [[1, 2], [3, 4], [5]]
+ *
+ * @example
+ * // Splits an array of strings into sub-arrays of length 3
+ * chunk(['a', 'b', 'c', 'd', 'e', 'f', 'g'], 3);
+ * // Returns: [['a', 'b', 'c'], ['d', 'e', 'f'], ['g']]
+ */
+declare function chunk<T>(arr: ArrayLike<T> | null | undefined, size?: number): T[][];
+
+export { chunk };
Index: node_modules/es-toolkit/dist/compat/array/chunk.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/chunk.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/chunk.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Splits an array into smaller arrays of a specified length.
+ *
+ * This function takes an input array and divides it into multiple smaller arrays,
+ * each of a specified length. If the input array cannot be evenly divided,
+ * the final sub-array will contain the remaining elements.
+ *
+ * @template T The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr - The array to be chunked into smaller arrays.
+ * @param {number} size - The size of each smaller array. Must be a positive integer.
+ * @returns {T[][]} A two-dimensional array where each sub-array has a maximum length of `size`.
+ *
+ * @example
+ * // Splits an array of numbers into sub-arrays of length 2
+ * chunk([1, 2, 3, 4, 5], 2);
+ * // Returns: [[1, 2], [3, 4], [5]]
+ *
+ * @example
+ * // Splits an array of strings into sub-arrays of length 3
+ * chunk(['a', 'b', 'c', 'd', 'e', 'f', 'g'], 3);
+ * // Returns: [['a', 'b', 'c'], ['d', 'e', 'f'], ['g']]
+ */
+declare function chunk<T>(arr: ArrayLike<T> | null | undefined, size?: number): T[][];
+
+export { chunk };
Index: node_modules/es-toolkit/dist/compat/array/chunk.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/chunk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/chunk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const chunk$1 = require('../../array/chunk.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function chunk(arr, size = 1) {
+    size = Math.max(Math.floor(size), 0);
+    if (size === 0 || !isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return chunk$1.chunk(toArray.toArray(arr), size);
+}
+
+exports.chunk = chunk;
Index: node_modules/es-toolkit/dist/compat/array/chunk.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/chunk.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/chunk.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { chunk as chunk$1 } from '../../array/chunk.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function chunk(arr, size = 1) {
+    size = Math.max(Math.floor(size), 0);
+    if (size === 0 || !isArrayLike(arr)) {
+        return [];
+    }
+    return chunk$1(toArray(arr), size);
+}
+
+export { chunk };
Index: node_modules/es-toolkit/dist/compat/array/compact.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/compact.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/compact.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+type Falsey = false | null | 0 | 0n | '' | undefined;
+/**
+ * Removes falsey values (false, null, 0, 0n, '', undefined, NaN) from an array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T | Falsey> | null | undefined} arr - The input array to remove falsey values.
+ * @returns {Array<Exclude<T, false | null | 0 | 0n | '' | undefined>>} - A new array with all falsey values removed.
+ *
+ * @example
+ * compact([0, 0n, 1, false, 2, '', 3, null, undefined, 4, NaN, 5]);
+ * Returns: [1, 2, 3, 4, 5]
+ */
+declare function compact<T>(arr: ArrayLike<T | Falsey> | null | undefined): T[];
+
+export { compact };
Index: node_modules/es-toolkit/dist/compat/array/compact.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/compact.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/compact.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+type Falsey = false | null | 0 | 0n | '' | undefined;
+/**
+ * Removes falsey values (false, null, 0, 0n, '', undefined, NaN) from an array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T | Falsey> | null | undefined} arr - The input array to remove falsey values.
+ * @returns {Array<Exclude<T, false | null | 0 | 0n | '' | undefined>>} - A new array with all falsey values removed.
+ *
+ * @example
+ * compact([0, 0n, 1, false, 2, '', 3, null, undefined, 4, NaN, 5]);
+ * Returns: [1, 2, 3, 4, 5]
+ */
+declare function compact<T>(arr: ArrayLike<T | Falsey> | null | undefined): T[];
+
+export { compact };
Index: node_modules/es-toolkit/dist/compat/array/compact.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/compact.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/compact.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const compact$1 = require('../../array/compact.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function compact(arr) {
+    if (!isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return compact$1.compact(Array.from(arr));
+}
+
+exports.compact = compact;
Index: node_modules/es-toolkit/dist/compat/array/compact.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/compact.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/compact.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { compact as compact$1 } from '../../array/compact.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function compact(arr) {
+    if (!isArrayLike(arr)) {
+        return [];
+    }
+    return compact$1(Array.from(arr));
+}
+
+export { compact };
Index: node_modules/es-toolkit/dist/compat/array/concat.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/concat.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/concat.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Concatenates multiple arrays and values into a single array.
+ *
+ * @template T The type of elements in the array.
+ * @param {...(T | T[])} values - The values and/or arrays to concatenate.
+ * @returns {T[]} A new array containing all the input values.
+ *
+ * @example
+ * // Concatenate individual values
+ * concat(1, 2, 3);
+ * // returns [1, 2, 3]
+ *
+ * @example
+ * // Concatenate arrays of values
+ * concat([1, 2], [3, 4]);
+ * // returns [1, 2, 3, 4]
+ *
+ * @example
+ * // Concatenate a mix of individual values and arrays
+ * concat(1, [2, 3], 4);
+ * // returns [1, 2, 3, 4]
+ *
+ * @example
+ * // Concatenate nested arrays
+ * concat([1, [2, 3]], 4);
+ * // returns [1, [2, 3], 4]
+ */
+declare function concat<T>(...values: Array<T | readonly T[]>): T[];
+
+export { concat };
Index: node_modules/es-toolkit/dist/compat/array/concat.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/concat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/concat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Concatenates multiple arrays and values into a single array.
+ *
+ * @template T The type of elements in the array.
+ * @param {...(T | T[])} values - The values and/or arrays to concatenate.
+ * @returns {T[]} A new array containing all the input values.
+ *
+ * @example
+ * // Concatenate individual values
+ * concat(1, 2, 3);
+ * // returns [1, 2, 3]
+ *
+ * @example
+ * // Concatenate arrays of values
+ * concat([1, 2], [3, 4]);
+ * // returns [1, 2, 3, 4]
+ *
+ * @example
+ * // Concatenate a mix of individual values and arrays
+ * concat(1, [2, 3], 4);
+ * // returns [1, 2, 3, 4]
+ *
+ * @example
+ * // Concatenate nested arrays
+ * concat([1, [2, 3]], 4);
+ * // returns [1, [2, 3], 4]
+ */
+declare function concat<T>(...values: Array<T | readonly T[]>): T[];
+
+export { concat };
Index: node_modules/es-toolkit/dist/compat/array/concat.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/concat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/concat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flatten = require('../../array/flatten.js');
+
+function concat(...values) {
+    return flatten.flatten(values);
+}
+
+exports.concat = concat;
Index: node_modules/es-toolkit/dist/compat/array/concat.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/concat.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/concat.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { flatten } from '../../array/flatten.mjs';
+
+function concat(...values) {
+    return flatten(values);
+}
+
+export { concat };
Index: node_modules/es-toolkit/dist/compat/array/countBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/countBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/countBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection through
+ * iteratee. The corresponding value of each key is the number of times the key was returned by iteratee. The
+ * iteratee is invoked with one argument: (value).
+ *
+ * @param collection The collection to iterate over.
+ * @param iteratee The function invoked per iteration.
+ * @return Returns the composed aggregate object.
+ *
+ * @example
+ * countBy([6.1, 4.2, 6.3], Math.floor); // => { '4': 1, '6': 2 }
+ * countBy(['one', 'two', 'three'], 'length'); // => { '3': 2, '5': 1 }
+ */
+declare function countBy<T>(collection: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): Record<string, number>;
+declare function countBy<T extends object>(collection: T | null | undefined, iteratee?: ValueIteratee<T[keyof T]>): Record<string, number>;
+
+export { countBy };
Index: node_modules/es-toolkit/dist/compat/array/countBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/countBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/countBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection through
+ * iteratee. The corresponding value of each key is the number of times the key was returned by iteratee. The
+ * iteratee is invoked with one argument: (value).
+ *
+ * @param collection The collection to iterate over.
+ * @param iteratee The function invoked per iteration.
+ * @return Returns the composed aggregate object.
+ *
+ * @example
+ * countBy([6.1, 4.2, 6.3], Math.floor); // => { '4': 1, '6': 2 }
+ * countBy(['one', 'two', 'three'], 'length'); // => { '3': 2, '5': 1 }
+ */
+declare function countBy<T>(collection: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): Record<string, number>;
+declare function countBy<T extends object>(collection: T | null | undefined, iteratee?: ValueIteratee<T[keyof T]>): Record<string, number>;
+
+export { countBy };
Index: node_modules/es-toolkit/dist/compat/array/countBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/countBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/countBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLike = require('../predicate/isArrayLike.js');
+const iteratee = require('../util/iteratee.js');
+
+function countBy(collection, iteratee$1) {
+    if (collection == null) {
+        return {};
+    }
+    const array = isArrayLike.isArrayLike(collection) ? Array.from(collection) : Object.values(collection);
+    const mapper = iteratee.iteratee(iteratee$1 ?? undefined);
+    const result = Object.create(null);
+    for (let i = 0; i < array.length; i++) {
+        const item = array[i];
+        const key = mapper(item);
+        result[key] = (result[key] ?? 0) + 1;
+    }
+    return result;
+}
+
+exports.countBy = countBy;
Index: node_modules/es-toolkit/dist/compat/array/countBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/countBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/countBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function countBy(collection, iteratee$1) {
+    if (collection == null) {
+        return {};
+    }
+    const array = isArrayLike(collection) ? Array.from(collection) : Object.values(collection);
+    const mapper = iteratee(iteratee$1 ?? undefined);
+    const result = Object.create(null);
+    for (let i = 0; i < array.length; i++) {
+        const item = array[i];
+        const key = mapper(item);
+        result[key] = (result[key] ?? 0) + 1;
+    }
+    return result;
+}
+
+export { countBy };
Index: node_modules/es-toolkit/dist/compat/array/difference.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/difference.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/difference.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/**
+ * Computes the difference between an array and multiple arrays.
+ *
+ * @template T
+ * @param {ArrayLike<T> | undefined | null} arr - The primary array from which to derive the difference. This is the main array
+ * from which elements will be compared and filtered.
+ * @param {Array<ArrayLike<T>>} values - Multiple arrays containing elements to be excluded from the primary array.
+ * These arrays will be flattened into a single array, and each element in this array will be checked against the primary array.
+ * If a match is found, that element will be excluded from the result.
+ * @returns {T[]} A new array containing the elements that are present in the primary array but not
+ * in the flattened array.
+ *
+ * @example
+ * const array1 = [1, 2, 3, 4, 5];
+ * const array2 = [2, 4];
+ * const array3 = [5, 6];
+ * const result = difference(array1, array2, array3);
+ * // result will be [1, 3] since 2, 4, and 5 are in the other arrays and are excluded from the result.
+ *
+ * @example
+ * const arrayLike1 = { 0: 1, 1: 2, 2: 3, length: 3 };
+ * const arrayLike2 = { 0: 2, 1: 4, length: 2 };
+ * const result = difference(arrayLike1, arrayLike2);
+ * // result will be [1, 3] since 2 is in both array-like objects and is excluded from the result.
+ */
+declare function difference<T>(arr: ArrayLike<T> | undefined | null, ...values: Array<ArrayLike<T>>): T[];
+
+export { difference };
Index: node_modules/es-toolkit/dist/compat/array/difference.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/difference.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/difference.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/**
+ * Computes the difference between an array and multiple arrays.
+ *
+ * @template T
+ * @param {ArrayLike<T> | undefined | null} arr - The primary array from which to derive the difference. This is the main array
+ * from which elements will be compared and filtered.
+ * @param {Array<ArrayLike<T>>} values - Multiple arrays containing elements to be excluded from the primary array.
+ * These arrays will be flattened into a single array, and each element in this array will be checked against the primary array.
+ * If a match is found, that element will be excluded from the result.
+ * @returns {T[]} A new array containing the elements that are present in the primary array but not
+ * in the flattened array.
+ *
+ * @example
+ * const array1 = [1, 2, 3, 4, 5];
+ * const array2 = [2, 4];
+ * const array3 = [5, 6];
+ * const result = difference(array1, array2, array3);
+ * // result will be [1, 3] since 2, 4, and 5 are in the other arrays and are excluded from the result.
+ *
+ * @example
+ * const arrayLike1 = { 0: 1, 1: 2, 2: 3, length: 3 };
+ * const arrayLike2 = { 0: 2, 1: 4, length: 2 };
+ * const result = difference(arrayLike1, arrayLike2);
+ * // result will be [1, 3] since 2 is in both array-like objects and is excluded from the result.
+ */
+declare function difference<T>(arr: ArrayLike<T> | undefined | null, ...values: Array<ArrayLike<T>>): T[];
+
+export { difference };
Index: node_modules/es-toolkit/dist/compat/array/difference.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const difference$1 = require('../../array/difference.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function difference(arr, ...values) {
+    if (!isArrayLikeObject.isArrayLikeObject(arr)) {
+        return [];
+    }
+    const arr1 = toArray.toArray(arr);
+    const arr2 = [];
+    for (let i = 0; i < values.length; i++) {
+        const value = values[i];
+        if (isArrayLikeObject.isArrayLikeObject(value)) {
+            arr2.push(...Array.from(value));
+        }
+    }
+    return difference$1.difference(arr1, arr2);
+}
+
+exports.difference = difference;
Index: node_modules/es-toolkit/dist/compat/array/difference.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/difference.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/difference.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { difference as difference$1 } from '../../array/difference.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function difference(arr, ...values) {
+    if (!isArrayLikeObject(arr)) {
+        return [];
+    }
+    const arr1 = toArray(arr);
+    const arr2 = [];
+    for (let i = 0; i < values.length; i++) {
+        const value = values[i];
+        if (isArrayLikeObject(value)) {
+            arr2.push(...Array.from(value));
+        }
+    }
+    return difference$1(arr1, arr2);
+}
+
+export { difference };
Index: node_modules/es-toolkit/dist/compat/array/differenceBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/differenceBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/differenceBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,108 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values The values to exclude
+ * @param {ValueIteratee<T1 | T2>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor)
+ * // => [1.2]
+ */
+declare function differenceBy<T1, T2>(array: ArrayLike<T1> | null | undefined, values: ArrayLike<T2>, iteratee: ValueIteratee<T1 | T2>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ValueIteratee<T1 | T2 | T3>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2], [2.3], [1.4], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, iteratee: ValueIteratee<T1 | T2 | T3>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3, T4
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ArrayLike<T4>} values3 The third array of values to exclude
+ * @param {ValueIteratee<T1 | T2 | T3 | T4>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2, 3.5], [2.3], [1.4], [3.2], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3, T4>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, values3: ArrayLike<T4>, iteratee: ValueIteratee<T1 | T2 | T3 | T4>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3, T4, T5
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ArrayLike<T4>} values3 The third array of values to exclude
+ * @param {ArrayLike<T5>} values4 The fourth array of values to exclude
+ * @param {ValueIteratee<T1 | T2 | T3 | T4 | T5>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2, 3.5, 4.8], [2.3], [1.4], [3.2], [4.1], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3, T4, T5>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, values3: ArrayLike<T4>, values4: ArrayLike<T5>, iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3, T4, T5, T6
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ArrayLike<T4>} values3 The third array of values to exclude
+ * @param {ArrayLike<T5>} values4 The fourth array of values to exclude
+ * @param {ArrayLike<T6>} values5 The fifth array of values to exclude
+ * @param {ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2, 3.5, 4.8, 5.3], [2.3], [1.4], [3.2], [4.1], [5.8], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3, T4, T5, T6>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, values3: ArrayLike<T4>, values4: ArrayLike<T5>, values5: ArrayLike<T6>, iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3, T4, T5, T6, T7
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ArrayLike<T4>} values3 The third array of values to exclude
+ * @param {ArrayLike<T5>} values4 The fourth array of values to exclude
+ * @param {ArrayLike<T6>} values5 The fifth array of values to exclude
+ * @param {...(ArrayLike<T7> | ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6 | T7>)[]} values Additional arrays of values to exclude and iteratee
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2, 3.5, 4.8, 5.3, 6.7], [2.3], [1.4], [3.2], [4.1], [5.8], [6.2], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3, T4, T5, T6, T7>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, values3: ArrayLike<T4>, values4: ArrayLike<T5>, values5: ArrayLike<T6>, ...values: Array<ArrayLike<T7> | ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6 | T7>>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array The array to inspect
+ * @param {...Array<ArrayLike<T>>} values The arrays of values to exclude
+ * @returns {T[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2, 1], [2, 3])
+ * // => [1]
+ */
+declare function differenceBy<T>(array: ArrayLike<T> | null | undefined, ...values: Array<ArrayLike<T>>): T[];
+
+export { differenceBy };
Index: node_modules/es-toolkit/dist/compat/array/differenceBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/differenceBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/differenceBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,108 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values The values to exclude
+ * @param {ValueIteratee<T1 | T2>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor)
+ * // => [1.2]
+ */
+declare function differenceBy<T1, T2>(array: ArrayLike<T1> | null | undefined, values: ArrayLike<T2>, iteratee: ValueIteratee<T1 | T2>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ValueIteratee<T1 | T2 | T3>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2], [2.3], [1.4], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, iteratee: ValueIteratee<T1 | T2 | T3>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3, T4
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ArrayLike<T4>} values3 The third array of values to exclude
+ * @param {ValueIteratee<T1 | T2 | T3 | T4>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2, 3.5], [2.3], [1.4], [3.2], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3, T4>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, values3: ArrayLike<T4>, iteratee: ValueIteratee<T1 | T2 | T3 | T4>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3, T4, T5
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ArrayLike<T4>} values3 The third array of values to exclude
+ * @param {ArrayLike<T5>} values4 The fourth array of values to exclude
+ * @param {ValueIteratee<T1 | T2 | T3 | T4 | T5>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2, 3.5, 4.8], [2.3], [1.4], [3.2], [4.1], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3, T4, T5>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, values3: ArrayLike<T4>, values4: ArrayLike<T5>, iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3, T4, T5, T6
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ArrayLike<T4>} values3 The third array of values to exclude
+ * @param {ArrayLike<T5>} values4 The fourth array of values to exclude
+ * @param {ArrayLike<T6>} values5 The fifth array of values to exclude
+ * @param {ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6>} iteratee The iteratee invoked per element
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2, 3.5, 4.8, 5.3], [2.3], [1.4], [3.2], [4.1], [5.8], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3, T4, T5, T6>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, values3: ArrayLike<T4>, values4: ArrayLike<T5>, values5: ArrayLike<T6>, iteratee: ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays using an iteratee function.
+ *
+ * @template T1, T2, T3, T4, T5, T6, T7
+ * @param {ArrayLike<T1> | null | undefined} array The array to inspect
+ * @param {ArrayLike<T2>} values1 The first array of values to exclude
+ * @param {ArrayLike<T3>} values2 The second array of values to exclude
+ * @param {ArrayLike<T4>} values3 The third array of values to exclude
+ * @param {ArrayLike<T5>} values4 The fourth array of values to exclude
+ * @param {ArrayLike<T6>} values5 The fifth array of values to exclude
+ * @param {...(ArrayLike<T7> | ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6 | T7>)[]} values Additional arrays of values to exclude and iteratee
+ * @returns {T1[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2.1, 1.2, 3.5, 4.8, 5.3, 6.7], [2.3], [1.4], [3.2], [4.1], [5.8], [6.2], Math.floor)
+ * // => []
+ */
+declare function differenceBy<T1, T2, T3, T4, T5, T6, T7>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, values3: ArrayLike<T4>, values4: ArrayLike<T5>, values5: ArrayLike<T6>, ...values: Array<ArrayLike<T7> | ValueIteratee<T1 | T2 | T3 | T4 | T5 | T6 | T7>>): T1[];
+/**
+ * Creates an array of array values not included in the other given arrays.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array The array to inspect
+ * @param {...Array<ArrayLike<T>>} values The arrays of values to exclude
+ * @returns {T[]} Returns the new array of filtered values
+ * @example
+ * differenceBy([2, 1], [2, 3])
+ * // => [1]
+ */
+declare function differenceBy<T>(array: ArrayLike<T> | null | undefined, ...values: Array<ArrayLike<T>>): T[];
+
+export { differenceBy };
Index: node_modules/es-toolkit/dist/compat/array/differenceBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/differenceBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/differenceBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const last = require('./last.js');
+const difference = require('../../array/difference.js');
+const differenceBy$1 = require('../../array/differenceBy.js');
+const flattenArrayLike = require('../_internal/flattenArrayLike.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+const iteratee = require('../util/iteratee.js');
+
+function differenceBy(arr, ..._values) {
+    if (!isArrayLikeObject.isArrayLikeObject(arr)) {
+        return [];
+    }
+    const iteratee$1 = last.last(_values);
+    const values = flattenArrayLike.flattenArrayLike(_values);
+    if (isArrayLikeObject.isArrayLikeObject(iteratee$1)) {
+        return difference.difference(Array.from(arr), values);
+    }
+    return differenceBy$1.differenceBy(Array.from(arr), values, iteratee.iteratee(iteratee$1));
+}
+
+exports.differenceBy = differenceBy;
Index: node_modules/es-toolkit/dist/compat/array/differenceBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/differenceBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/differenceBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { last } from './last.mjs';
+import { difference } from '../../array/difference.mjs';
+import { differenceBy as differenceBy$1 } from '../../array/differenceBy.mjs';
+import { flattenArrayLike } from '../_internal/flattenArrayLike.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function differenceBy(arr, ..._values) {
+    if (!isArrayLikeObject(arr)) {
+        return [];
+    }
+    const iteratee$1 = last(_values);
+    const values = flattenArrayLike(_values);
+    if (isArrayLikeObject(iteratee$1)) {
+        return difference(Array.from(arr), values);
+    }
+    return differenceBy$1(Array.from(arr), values, iteratee(iteratee$1));
+}
+
+export { differenceBy };
Index: node_modules/es-toolkit/dist/compat/array/differenceWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/differenceWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/differenceWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,91 @@
+/**
+ * Computes the difference between the primary array and another array using a comparator function.
+ *
+ * @template T1, T2
+ * @param {ArrayLike<T1> | null | undefined} array - The primary array to compare elements against.
+ * @param {ArrayLike<T2>} values - The array containing elements to compare with the primary array.
+ * @param {(a: T1, b: T2) => boolean} comparator - A function to determine if two elements are considered equal.
+ * @returns {T1[]} A new array containing the elements from the primary array that do not match any elements in `values` based on the comparator.
+ *
+ * @example
+ * const array = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const values = [{ id: 2 }];
+ * const comparator = (a, b) => a.id === b.id;
+ *
+ * const result = differenceWith(array, values, comparator);
+ * // result will be [{ id: 1 }, { id: 3 }]
+ */
+declare function differenceWith<T1, T2>(array: ArrayLike<T1> | null | undefined, values: ArrayLike<T2>, comparator: (a: T1, b: T2) => boolean): T1[];
+/**
+ * Computes the difference between the primary array and two arrays using a comparator function.
+ *
+ * @template T1, T2, T3
+ * @param {ArrayLike<T1> | null | undefined} array - The primary array to compare elements against.
+ * @param {ArrayLike<T2>} values1 - The first array containing elements to compare with the primary array.
+ * @param {ArrayLike<T3>} values2 - The second array containing elements to compare with the primary array.
+ * @param {(a: T1, b: T2 | T3) => boolean} comparator - A function to determine if two elements are considered equal.
+ * @returns {T1[]} A new array containing the elements from the primary array that do not match any elements in `values1` or `values2` based on the comparator.
+ *
+ * @example
+ * const array = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const values1 = [{ id: 2 }];
+ * const values2 = [{ id: 3 }];
+ * const comparator = (a, b) => a.id === b.id;
+ *
+ * const result = differenceWith(array, values1, values2, comparator);
+ * // result will be [{ id: 1 }]
+ */
+declare function differenceWith<T1, T2, T3>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, comparator: (a: T1, b: T2 | T3) => boolean): T1[];
+/**
+ * Computes the difference between the primary array and multiple arrays using a comparator function.
+ *
+ * @template T1, T2, T3, T4
+ * @param {ArrayLike<T1> | null | undefined} array - The primary array to compare elements against.
+ * @param {ArrayLike<T2>} values1 - The first array containing elements to compare with the primary array.
+ * @param {ArrayLike<T3>} values2 - The second array containing elements to compare with the primary array.
+ * @param {...Array<ArrayLike<T4> | ((a: T1, b: T2 | T3 | T4) => boolean)>} values - Additional arrays and an optional comparator function to determine if two elements are considered equal.
+ * @returns {T1[]} A new array containing the elements from the primary array that do not match any elements
+ * in `values1`, `values2`, or subsequent arrays. If a comparator function is provided, it will be used to compare elements;
+ * otherwise, [SameValueZero](https://tc39.es/ecma262/multipage/abstract-operations.html#sec-samevaluezero) algorithm will be used.
+ *
+ * @example
+ * // Example with comparator function
+ * const array = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }];
+ * const values1 = [{ id: 2 }];
+ * const values2 = [{ id: 3 }];
+ * const values3 = [{ id: 4 }];
+ * const comparator = (a, b) => a.id === b.id;
+ *
+ * const result = differenceWith(array, values1, values2, values3, comparator);
+ * // result will be [{ id: 1 }]
+ *
+ * @example
+ * // Example without comparator function (behaves like `difference`)
+ * const array = [1, 2, 3, 4];
+ * const values1 = [2];
+ * const values2 = [3];
+ * const values3 = [4];
+ *
+ * const result = differenceWith(array, values1, values2, values3);
+ * // result will be [1]
+ */
+declare function differenceWith<T1, T2, T3, T4>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, ...values: Array<ArrayLike<T4> | ((a: T1, b: T2 | T3 | T4) => boolean)>): T1[];
+/**
+ * Computes the difference between the primary array and one or more arrays without using a comparator function.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The primary array to compare elements against.
+ * @param {...Array<ArrayLike<T>>} values - One or more arrays containing elements to compare with the primary array.
+ * @returns {T[]} A new array containing the elements from the primary array that do not match any elements in the provided arrays.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const values1 = [2];
+ * const values2 = [3];
+ *
+ * const result = differenceWith(array, values1, values2);
+ * // result will be [1]
+ */
+declare function differenceWith<T>(array: ArrayLike<T> | null | undefined, ...values: Array<ArrayLike<T>>): T[];
+
+export { differenceWith };
Index: node_modules/es-toolkit/dist/compat/array/differenceWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/differenceWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/differenceWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,91 @@
+/**
+ * Computes the difference between the primary array and another array using a comparator function.
+ *
+ * @template T1, T2
+ * @param {ArrayLike<T1> | null | undefined} array - The primary array to compare elements against.
+ * @param {ArrayLike<T2>} values - The array containing elements to compare with the primary array.
+ * @param {(a: T1, b: T2) => boolean} comparator - A function to determine if two elements are considered equal.
+ * @returns {T1[]} A new array containing the elements from the primary array that do not match any elements in `values` based on the comparator.
+ *
+ * @example
+ * const array = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const values = [{ id: 2 }];
+ * const comparator = (a, b) => a.id === b.id;
+ *
+ * const result = differenceWith(array, values, comparator);
+ * // result will be [{ id: 1 }, { id: 3 }]
+ */
+declare function differenceWith<T1, T2>(array: ArrayLike<T1> | null | undefined, values: ArrayLike<T2>, comparator: (a: T1, b: T2) => boolean): T1[];
+/**
+ * Computes the difference between the primary array and two arrays using a comparator function.
+ *
+ * @template T1, T2, T3
+ * @param {ArrayLike<T1> | null | undefined} array - The primary array to compare elements against.
+ * @param {ArrayLike<T2>} values1 - The first array containing elements to compare with the primary array.
+ * @param {ArrayLike<T3>} values2 - The second array containing elements to compare with the primary array.
+ * @param {(a: T1, b: T2 | T3) => boolean} comparator - A function to determine if two elements are considered equal.
+ * @returns {T1[]} A new array containing the elements from the primary array that do not match any elements in `values1` or `values2` based on the comparator.
+ *
+ * @example
+ * const array = [{ id: 1 }, { id: 2 }, { id: 3 }];
+ * const values1 = [{ id: 2 }];
+ * const values2 = [{ id: 3 }];
+ * const comparator = (a, b) => a.id === b.id;
+ *
+ * const result = differenceWith(array, values1, values2, comparator);
+ * // result will be [{ id: 1 }]
+ */
+declare function differenceWith<T1, T2, T3>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, comparator: (a: T1, b: T2 | T3) => boolean): T1[];
+/**
+ * Computes the difference between the primary array and multiple arrays using a comparator function.
+ *
+ * @template T1, T2, T3, T4
+ * @param {ArrayLike<T1> | null | undefined} array - The primary array to compare elements against.
+ * @param {ArrayLike<T2>} values1 - The first array containing elements to compare with the primary array.
+ * @param {ArrayLike<T3>} values2 - The second array containing elements to compare with the primary array.
+ * @param {...Array<ArrayLike<T4> | ((a: T1, b: T2 | T3 | T4) => boolean)>} values - Additional arrays and an optional comparator function to determine if two elements are considered equal.
+ * @returns {T1[]} A new array containing the elements from the primary array that do not match any elements
+ * in `values1`, `values2`, or subsequent arrays. If a comparator function is provided, it will be used to compare elements;
+ * otherwise, [SameValueZero](https://tc39.es/ecma262/multipage/abstract-operations.html#sec-samevaluezero) algorithm will be used.
+ *
+ * @example
+ * // Example with comparator function
+ * const array = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }];
+ * const values1 = [{ id: 2 }];
+ * const values2 = [{ id: 3 }];
+ * const values3 = [{ id: 4 }];
+ * const comparator = (a, b) => a.id === b.id;
+ *
+ * const result = differenceWith(array, values1, values2, values3, comparator);
+ * // result will be [{ id: 1 }]
+ *
+ * @example
+ * // Example without comparator function (behaves like `difference`)
+ * const array = [1, 2, 3, 4];
+ * const values1 = [2];
+ * const values2 = [3];
+ * const values3 = [4];
+ *
+ * const result = differenceWith(array, values1, values2, values3);
+ * // result will be [1]
+ */
+declare function differenceWith<T1, T2, T3, T4>(array: ArrayLike<T1> | null | undefined, values1: ArrayLike<T2>, values2: ArrayLike<T3>, ...values: Array<ArrayLike<T4> | ((a: T1, b: T2 | T3 | T4) => boolean)>): T1[];
+/**
+ * Computes the difference between the primary array and one or more arrays without using a comparator function.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The primary array to compare elements against.
+ * @param {...Array<ArrayLike<T>>} values - One or more arrays containing elements to compare with the primary array.
+ * @returns {T[]} A new array containing the elements from the primary array that do not match any elements in the provided arrays.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * const values1 = [2];
+ * const values2 = [3];
+ *
+ * const result = differenceWith(array, values1, values2);
+ * // result will be [1]
+ */
+declare function differenceWith<T>(array: ArrayLike<T> | null | undefined, ...values: Array<ArrayLike<T>>): T[];
+
+export { differenceWith };
Index: node_modules/es-toolkit/dist/compat/array/differenceWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/differenceWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/differenceWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const last = require('./last.js');
+const difference = require('../../array/difference.js');
+const differenceWith$1 = require('../../array/differenceWith.js');
+const flattenArrayLike = require('../_internal/flattenArrayLike.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function differenceWith(array, ...values) {
+    if (!isArrayLikeObject.isArrayLikeObject(array)) {
+        return [];
+    }
+    const comparator = last.last(values);
+    const flattenedValues = flattenArrayLike.flattenArrayLike(values);
+    if (typeof comparator === 'function') {
+        return differenceWith$1.differenceWith(Array.from(array), flattenedValues, comparator);
+    }
+    return difference.difference(Array.from(array), flattenedValues);
+}
+
+exports.differenceWith = differenceWith;
Index: node_modules/es-toolkit/dist/compat/array/differenceWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/differenceWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/differenceWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import { last } from './last.mjs';
+import { difference } from '../../array/difference.mjs';
+import { differenceWith as differenceWith$1 } from '../../array/differenceWith.mjs';
+import { flattenArrayLike } from '../_internal/flattenArrayLike.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function differenceWith(array, ...values) {
+    if (!isArrayLikeObject(array)) {
+        return [];
+    }
+    const comparator = last(values);
+    const flattenedValues = flattenArrayLike(values);
+    if (typeof comparator === 'function') {
+        return differenceWith$1(Array.from(array), flattenedValues, comparator);
+    }
+    return difference(Array.from(array), flattenedValues);
+}
+
+export { differenceWith };
Index: node_modules/es-toolkit/dist/compat/array/drop.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/drop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/drop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Removes a specified number of elements from the beginning of an array and returns the rest.
+ *
+ * This function takes an array and a number, and returns a new array with the specified number
+ * of elements removed from the start.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} collection - The array from which to drop elements.
+ * @param {number} itemsCount - The number of elements to drop from the beginning of the array.
+ * @param {unknown} [guard] - Enables use as an iteratee for methods like `_.map`.
+ * @returns {T[]} A new array with the specified number of elements removed from the start.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = drop(array, 2);
+ * result will be [3, 4, 5] since the first two elements are dropped.
+ */
+declare function drop<T>(array: ArrayLike<T> | null | undefined, n?: number): T[];
+
+export { drop };
Index: node_modules/es-toolkit/dist/compat/array/drop.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/drop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/drop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Removes a specified number of elements from the beginning of an array and returns the rest.
+ *
+ * This function takes an array and a number, and returns a new array with the specified number
+ * of elements removed from the start.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} collection - The array from which to drop elements.
+ * @param {number} itemsCount - The number of elements to drop from the beginning of the array.
+ * @param {unknown} [guard] - Enables use as an iteratee for methods like `_.map`.
+ * @returns {T[]} A new array with the specified number of elements removed from the start.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = drop(array, 2);
+ * result will be [3, 4, 5] since the first two elements are dropped.
+ */
+declare function drop<T>(array: ArrayLike<T> | null | undefined, n?: number): T[];
+
+export { drop };
Index: node_modules/es-toolkit/dist/compat/array/drop.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/drop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/drop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const drop$1 = require('../../array/drop.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const toInteger = require('../util/toInteger.js');
+
+function drop(collection, itemsCount = 1, guard) {
+    if (!isArrayLike.isArrayLike(collection)) {
+        return [];
+    }
+    itemsCount = guard ? 1 : toInteger.toInteger(itemsCount);
+    return drop$1.drop(toArray.toArray(collection), itemsCount);
+}
+
+exports.drop = drop;
Index: node_modules/es-toolkit/dist/compat/array/drop.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/drop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/drop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { drop as drop$1 } from '../../array/drop.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+
+function drop(collection, itemsCount = 1, guard) {
+    if (!isArrayLike(collection)) {
+        return [];
+    }
+    itemsCount = guard ? 1 : toInteger(itemsCount);
+    return drop$1(toArray(collection), itemsCount);
+}
+
+export { drop };
Index: node_modules/es-toolkit/dist/compat/array/dropRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Removes a specified number of elements from the end of an array and returns the rest.
+ *
+ * This function takes an array and a number, and returns a new array with the specified number
+ * of elements removed from the end.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} collection - The array from which to drop elements.
+ * @param {number} itemsCount - The number of elements to drop from the end of the array.
+ * @param {unknown} [guard] - Enables use as an iteratee for methods like `_.map`.
+ * @returns {T[]} A new array with the specified number of elements removed from the end.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = dropRight(array, 2);
+ * // result will be [1, 2, 3] since the last two elements are dropped.
+ */
+declare function dropRight<T>(array: ArrayLike<T> | null | undefined, n?: number): T[];
+
+export { dropRight };
Index: node_modules/es-toolkit/dist/compat/array/dropRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Removes a specified number of elements from the end of an array and returns the rest.
+ *
+ * This function takes an array and a number, and returns a new array with the specified number
+ * of elements removed from the end.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} collection - The array from which to drop elements.
+ * @param {number} itemsCount - The number of elements to drop from the end of the array.
+ * @param {unknown} [guard] - Enables use as an iteratee for methods like `_.map`.
+ * @returns {T[]} A new array with the specified number of elements removed from the end.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5];
+ * const result = dropRight(array, 2);
+ * // result will be [1, 2, 3] since the last two elements are dropped.
+ */
+declare function dropRight<T>(array: ArrayLike<T> | null | undefined, n?: number): T[];
+
+export { dropRight };
Index: node_modules/es-toolkit/dist/compat/array/dropRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const dropRight$1 = require('../../array/dropRight.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const toInteger = require('../util/toInteger.js');
+
+function dropRight(collection, itemsCount = 1, guard) {
+    if (!isArrayLike.isArrayLike(collection)) {
+        return [];
+    }
+    itemsCount = guard ? 1 : toInteger.toInteger(itemsCount);
+    return dropRight$1.dropRight(toArray.toArray(collection), itemsCount);
+}
+
+exports.dropRight = dropRight;
Index: node_modules/es-toolkit/dist/compat/array/dropRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { dropRight as dropRight$1 } from '../../array/dropRight.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+
+function dropRight(collection, itemsCount = 1, guard) {
+    if (!isArrayLike(collection)) {
+        return [];
+    }
+    itemsCount = guard ? 1 : toInteger(itemsCount);
+    return dropRight$1(toArray(collection), itemsCount);
+}
+
+export { dropRight };
Index: node_modules/es-toolkit/dist/compat/array/dropRightWhile.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropRightWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropRightWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { ListIteratee } from '../_internal/ListIteratee.mjs';
+
+/**
+ * Creates a slice of array excluding elements dropped from the end until predicate returns falsey.
+ * The predicate is invoked with three arguments: (value, index, array).
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {ListIteratee<T>} [predicate] - The function invoked per iteration.
+ * @returns {T[]} Returns the slice of array.
+ * @example
+ *
+ * const users = [
+ *   { user: 'barney', active: true },
+ *   { user: 'fred', active: false },
+ *   { user: 'pebbles', active: false }
+ * ];
+ *
+ * // Using function predicate
+ * dropRightWhile(users, user => !user.active);
+ * // => [{ user: 'barney', active: true }]
+ *
+ * // Using matches shorthand
+ * dropRightWhile(users, { user: 'pebbles', active: false });
+ * // => [{ user: 'barney', active: true }, { user: 'fred', active: false }]
+ *
+ * // Using matchesProperty shorthand
+ * dropRightWhile(users, ['active', false]);
+ * // => [{ user: 'barney', active: true }]
+ *
+ * // Using property shorthand
+ * dropRightWhile(users, 'active');
+ * // => [{ user: 'barney', active: true }]
+ */
+declare function dropRightWhile<T>(array: ArrayLike<T> | null | undefined, predicate?: ListIteratee<T>): T[];
+
+export { dropRightWhile };
Index: node_modules/es-toolkit/dist/compat/array/dropRightWhile.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { ListIteratee } from '../_internal/ListIteratee.js';
+
+/**
+ * Creates a slice of array excluding elements dropped from the end until predicate returns falsey.
+ * The predicate is invoked with three arguments: (value, index, array).
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {ListIteratee<T>} [predicate] - The function invoked per iteration.
+ * @returns {T[]} Returns the slice of array.
+ * @example
+ *
+ * const users = [
+ *   { user: 'barney', active: true },
+ *   { user: 'fred', active: false },
+ *   { user: 'pebbles', active: false }
+ * ];
+ *
+ * // Using function predicate
+ * dropRightWhile(users, user => !user.active);
+ * // => [{ user: 'barney', active: true }]
+ *
+ * // Using matches shorthand
+ * dropRightWhile(users, { user: 'pebbles', active: false });
+ * // => [{ user: 'barney', active: true }, { user: 'fred', active: false }]
+ *
+ * // Using matchesProperty shorthand
+ * dropRightWhile(users, ['active', false]);
+ * // => [{ user: 'barney', active: true }]
+ *
+ * // Using property shorthand
+ * dropRightWhile(users, 'active');
+ * // => [{ user: 'barney', active: true }]
+ */
+declare function dropRightWhile<T>(array: ArrayLike<T> | null | undefined, predicate?: ListIteratee<T>): T[];
+
+export { dropRightWhile };
Index: node_modules/es-toolkit/dist/compat/array/dropRightWhile.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const dropRightWhile$1 = require('../../array/dropRightWhile.js');
+const identity = require('../../function/identity.js');
+const property = require('../object/property.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const matches = require('../predicate/matches.js');
+const matchesProperty = require('../predicate/matchesProperty.js');
+
+function dropRightWhile(arr, predicate = identity.identity) {
+    if (!isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return dropRightWhileImpl(Array.from(arr), predicate);
+}
+function dropRightWhileImpl(arr, predicate) {
+    switch (typeof predicate) {
+        case 'function': {
+            return dropRightWhile$1.dropRightWhile(arr, (item, index, arr) => Boolean(predicate(item, index, arr)));
+        }
+        case 'object': {
+            if (Array.isArray(predicate) && predicate.length === 2) {
+                const key = predicate[0];
+                const value = predicate[1];
+                return dropRightWhile$1.dropRightWhile(arr, matchesProperty.matchesProperty(key, value));
+            }
+            else {
+                return dropRightWhile$1.dropRightWhile(arr, matches.matches(predicate));
+            }
+        }
+        case 'symbol':
+        case 'number':
+        case 'string': {
+            return dropRightWhile$1.dropRightWhile(arr, property.property(predicate));
+        }
+    }
+}
+
+exports.dropRightWhile = dropRightWhile;
Index: node_modules/es-toolkit/dist/compat/array/dropRightWhile.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropRightWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropRightWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { dropRightWhile as dropRightWhile$1 } from '../../array/dropRightWhile.mjs';
+import { identity } from '../../function/identity.mjs';
+import { property } from '../object/property.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { matches } from '../predicate/matches.mjs';
+import { matchesProperty } from '../predicate/matchesProperty.mjs';
+
+function dropRightWhile(arr, predicate = identity) {
+    if (!isArrayLike(arr)) {
+        return [];
+    }
+    return dropRightWhileImpl(Array.from(arr), predicate);
+}
+function dropRightWhileImpl(arr, predicate) {
+    switch (typeof predicate) {
+        case 'function': {
+            return dropRightWhile$1(arr, (item, index, arr) => Boolean(predicate(item, index, arr)));
+        }
+        case 'object': {
+            if (Array.isArray(predicate) && predicate.length === 2) {
+                const key = predicate[0];
+                const value = predicate[1];
+                return dropRightWhile$1(arr, matchesProperty(key, value));
+            }
+            else {
+                return dropRightWhile$1(arr, matches(predicate));
+            }
+        }
+        case 'symbol':
+        case 'number':
+        case 'string': {
+            return dropRightWhile$1(arr, property(predicate));
+        }
+    }
+}
+
+export { dropRightWhile };
Index: node_modules/es-toolkit/dist/compat/array/dropWhile.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import { ListIteratee } from '../_internal/ListIteratee.mjs';
+
+/**
+ * Creates a slice of array excluding elements dropped from the beginning.
+ * Elements are dropped until predicate returns falsey.
+ * The predicate is invoked with three arguments: (value, index, array).
+ *
+ * @template T - The type of elements in the array
+ * @param {ArrayLike<T> | null | undefined} arr - The array to query
+ * @param {ListIteratee<T>} [predicate=identity] - The function invoked per iteration
+ * @returns {T[]} Returns the slice of array
+ *
+ * @example
+ * dropWhile([1, 2, 3], n => n < 3)
+ * // => [3]
+ *
+ * dropWhile([{ a: 1, b: 2 }, { a: 1, b: 3 }], { a: 1 })
+ * // => [{ a: 1, b: 3 }]
+ *
+ * dropWhile([{ a: 1, b: 2 }, { a: 1, b: 3 }], ['a', 1])
+ * // => [{ a: 1, b: 3 }]
+ *
+ * dropWhile([{ a: 1, b: 2 }, { a: 1, b: 3 }], 'a')
+ * // => []
+ */
+declare function dropWhile<T>(arr: ArrayLike<T> | null | undefined, predicate?: ListIteratee<T>): T[];
+
+export { dropWhile };
Index: node_modules/es-toolkit/dist/compat/array/dropWhile.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import { ListIteratee } from '../_internal/ListIteratee.js';
+
+/**
+ * Creates a slice of array excluding elements dropped from the beginning.
+ * Elements are dropped until predicate returns falsey.
+ * The predicate is invoked with three arguments: (value, index, array).
+ *
+ * @template T - The type of elements in the array
+ * @param {ArrayLike<T> | null | undefined} arr - The array to query
+ * @param {ListIteratee<T>} [predicate=identity] - The function invoked per iteration
+ * @returns {T[]} Returns the slice of array
+ *
+ * @example
+ * dropWhile([1, 2, 3], n => n < 3)
+ * // => [3]
+ *
+ * dropWhile([{ a: 1, b: 2 }, { a: 1, b: 3 }], { a: 1 })
+ * // => [{ a: 1, b: 3 }]
+ *
+ * dropWhile([{ a: 1, b: 2 }, { a: 1, b: 3 }], ['a', 1])
+ * // => [{ a: 1, b: 3 }]
+ *
+ * dropWhile([{ a: 1, b: 2 }, { a: 1, b: 3 }], 'a')
+ * // => []
+ */
+declare function dropWhile<T>(arr: ArrayLike<T> | null | undefined, predicate?: ListIteratee<T>): T[];
+
+export { dropWhile };
Index: node_modules/es-toolkit/dist/compat/array/dropWhile.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const dropWhile$1 = require('../../array/dropWhile.js');
+const identity = require('../../function/identity.js');
+const toArray = require('../_internal/toArray.js');
+const property = require('../object/property.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const matches = require('../predicate/matches.js');
+const matchesProperty = require('../predicate/matchesProperty.js');
+
+function dropWhile(arr, predicate = identity.identity) {
+    if (!isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return dropWhileImpl(toArray.toArray(arr), predicate);
+}
+function dropWhileImpl(arr, predicate) {
+    switch (typeof predicate) {
+        case 'function': {
+            return dropWhile$1.dropWhile(arr, (item, index, arr) => Boolean(predicate(item, index, arr)));
+        }
+        case 'object': {
+            if (Array.isArray(predicate) && predicate.length === 2) {
+                const key = predicate[0];
+                const value = predicate[1];
+                return dropWhile$1.dropWhile(arr, matchesProperty.matchesProperty(key, value));
+            }
+            else {
+                return dropWhile$1.dropWhile(arr, matches.matches(predicate));
+            }
+        }
+        case 'number':
+        case 'symbol':
+        case 'string': {
+            return dropWhile$1.dropWhile(arr, property.property(predicate));
+        }
+    }
+}
+
+exports.dropWhile = dropWhile;
Index: node_modules/es-toolkit/dist/compat/array/dropWhile.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/dropWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/dropWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+import { dropWhile as dropWhile$1 } from '../../array/dropWhile.mjs';
+import { identity } from '../../function/identity.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { property } from '../object/property.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { matches } from '../predicate/matches.mjs';
+import { matchesProperty } from '../predicate/matchesProperty.mjs';
+
+function dropWhile(arr, predicate = identity) {
+    if (!isArrayLike(arr)) {
+        return [];
+    }
+    return dropWhileImpl(toArray(arr), predicate);
+}
+function dropWhileImpl(arr, predicate) {
+    switch (typeof predicate) {
+        case 'function': {
+            return dropWhile$1(arr, (item, index, arr) => Boolean(predicate(item, index, arr)));
+        }
+        case 'object': {
+            if (Array.isArray(predicate) && predicate.length === 2) {
+                const key = predicate[0];
+                const value = predicate[1];
+                return dropWhile$1(arr, matchesProperty(key, value));
+            }
+            else {
+                return dropWhile$1(arr, matches(predicate));
+            }
+        }
+        case 'number':
+        case 'symbol':
+        case 'string': {
+            return dropWhile$1(arr, property(predicate));
+        }
+    }
+}
+
+export { dropWhile };
Index: node_modules/es-toolkit/dist/compat/array/every.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/every.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/every.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.mjs';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.mjs';
+
+/**
+ * Checks if all elements in a collection pass the predicate check.
+ * The predicate is invoked with three arguments: (value, index|key, collection).
+ *
+ * @template T - The type of elements in the collection
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over
+ * @param {ListIterateeCustom<T, boolean>} [predicate=identity] - The function invoked per iteration
+ * @returns {boolean} Returns true if all elements pass the predicate check, else false
+ *
+ * @example
+ * // Using a function predicate
+ * every([true, 1, null, 'yes'], Boolean)
+ * // => false
+ *
+ * // Using property shorthand
+ * const users = [{ user: 'barney', age: 36 }, { user: 'fred', age: 40 }]
+ * every(users, 'age')
+ * // => true
+ *
+ * // Using matches shorthand
+ * every(users, { age: 36 })
+ * // => false
+ *
+ * // Using matchesProperty shorthand
+ * every(users, ['age', 36])
+ * // => false
+ */
+declare function every<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>): boolean;
+/**
+ * Checks if all elements in an object pass the predicate check.
+ * The predicate is invoked with three arguments: (value, key, object).
+ *
+ * @template T - The type of the object
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {ObjectIterateeCustom<T, boolean>} [predicate=identity] - The function invoked per iteration
+ * @returns {boolean} Returns true if all elements pass the predicate check, else false
+ *
+ * @example
+ * // Using a function predicate
+ * every({ a: true, b: 1, c: null }, Boolean)
+ * // => false
+ *
+ * // Using property shorthand
+ * const users = {
+ *   barney: { active: true, age: 36 },
+ *   fred: { active: true, age: 40 }
+ * }
+ * every(users, 'active')
+ * // => true
+ *
+ * // Using matches shorthand
+ * every(users, { active: true })
+ * // => true
+ *
+ * // Using matchesProperty shorthand
+ * every(users, ['age', 36])
+ * // => false
+ */
+declare function every<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>): boolean;
+
+export { every };
Index: node_modules/es-toolkit/dist/compat/array/every.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/every.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/every.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.js';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.js';
+
+/**
+ * Checks if all elements in a collection pass the predicate check.
+ * The predicate is invoked with three arguments: (value, index|key, collection).
+ *
+ * @template T - The type of elements in the collection
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over
+ * @param {ListIterateeCustom<T, boolean>} [predicate=identity] - The function invoked per iteration
+ * @returns {boolean} Returns true if all elements pass the predicate check, else false
+ *
+ * @example
+ * // Using a function predicate
+ * every([true, 1, null, 'yes'], Boolean)
+ * // => false
+ *
+ * // Using property shorthand
+ * const users = [{ user: 'barney', age: 36 }, { user: 'fred', age: 40 }]
+ * every(users, 'age')
+ * // => true
+ *
+ * // Using matches shorthand
+ * every(users, { age: 36 })
+ * // => false
+ *
+ * // Using matchesProperty shorthand
+ * every(users, ['age', 36])
+ * // => false
+ */
+declare function every<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>): boolean;
+/**
+ * Checks if all elements in an object pass the predicate check.
+ * The predicate is invoked with three arguments: (value, key, object).
+ *
+ * @template T - The type of the object
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {ObjectIterateeCustom<T, boolean>} [predicate=identity] - The function invoked per iteration
+ * @returns {boolean} Returns true if all elements pass the predicate check, else false
+ *
+ * @example
+ * // Using a function predicate
+ * every({ a: true, b: 1, c: null }, Boolean)
+ * // => false
+ *
+ * // Using property shorthand
+ * const users = {
+ *   barney: { active: true, age: 36 },
+ *   fred: { active: true, age: 40 }
+ * }
+ * every(users, 'active')
+ * // => true
+ *
+ * // Using matches shorthand
+ * every(users, { active: true })
+ * // => true
+ *
+ * // Using matchesProperty shorthand
+ * every(users, ['age', 36])
+ * // => false
+ */
+declare function every<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>): boolean;
+
+export { every };
Index: node_modules/es-toolkit/dist/compat/array/every.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/every.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/every.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const isIterateeCall = require('../_internal/isIterateeCall.js');
+const property = require('../object/property.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const matches = require('../predicate/matches.js');
+const matchesProperty = require('../predicate/matchesProperty.js');
+
+function every(source, doesMatch, guard) {
+    if (!source) {
+        return true;
+    }
+    if (guard && isIterateeCall.isIterateeCall(source, doesMatch, guard)) {
+        doesMatch = undefined;
+    }
+    if (!doesMatch) {
+        doesMatch = identity.identity;
+    }
+    let predicate;
+    switch (typeof doesMatch) {
+        case 'function': {
+            predicate = doesMatch;
+            break;
+        }
+        case 'object': {
+            if (Array.isArray(doesMatch) && doesMatch.length === 2) {
+                const key = doesMatch[0];
+                const value = doesMatch[1];
+                predicate = matchesProperty.matchesProperty(key, value);
+            }
+            else {
+                predicate = matches.matches(doesMatch);
+            }
+            break;
+        }
+        case 'symbol':
+        case 'number':
+        case 'string': {
+            predicate = property.property(doesMatch);
+        }
+    }
+    if (!isArrayLike.isArrayLike(source)) {
+        const keys = Object.keys(source);
+        for (let i = 0; i < keys.length; i++) {
+            const key = keys[i];
+            const value = source[key];
+            if (!predicate(value, key, source)) {
+                return false;
+            }
+        }
+        return true;
+    }
+    for (let i = 0; i < source.length; i++) {
+        if (!predicate(source[i], i, source)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+exports.every = every;
Index: node_modules/es-toolkit/dist/compat/array/every.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/every.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/every.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+import { identity } from '../../function/identity.mjs';
+import { isIterateeCall } from '../_internal/isIterateeCall.mjs';
+import { property } from '../object/property.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { matches } from '../predicate/matches.mjs';
+import { matchesProperty } from '../predicate/matchesProperty.mjs';
+
+function every(source, doesMatch, guard) {
+    if (!source) {
+        return true;
+    }
+    if (guard && isIterateeCall(source, doesMatch, guard)) {
+        doesMatch = undefined;
+    }
+    if (!doesMatch) {
+        doesMatch = identity;
+    }
+    let predicate;
+    switch (typeof doesMatch) {
+        case 'function': {
+            predicate = doesMatch;
+            break;
+        }
+        case 'object': {
+            if (Array.isArray(doesMatch) && doesMatch.length === 2) {
+                const key = doesMatch[0];
+                const value = doesMatch[1];
+                predicate = matchesProperty(key, value);
+            }
+            else {
+                predicate = matches(doesMatch);
+            }
+            break;
+        }
+        case 'symbol':
+        case 'number':
+        case 'string': {
+            predicate = property(doesMatch);
+        }
+    }
+    if (!isArrayLike(source)) {
+        const keys = Object.keys(source);
+        for (let i = 0; i < keys.length; i++) {
+            const key = keys[i];
+            const value = source[key];
+            if (!predicate(value, key, source)) {
+                return false;
+            }
+        }
+        return true;
+    }
+    for (let i = 0; i < source.length; i++) {
+        if (!predicate(source[i], i, source)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+export { every };
Index: node_modules/es-toolkit/dist/compat/array/fill.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/fill.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/fill.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+import { MutableList } from '../_internal/MutableList.d.mjs';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.mjs';
+
+/**
+ * Fills an array with a value.
+ * @template T
+ * @param {any[] | null | undefined} array - The array to fill
+ * @param {T} value - The value to fill array with
+ * @returns {T[]} Returns the filled array
+ * @example
+ * fill([1, 2, 3], 'a')
+ * // => ['a', 'a', 'a']
+ */
+declare function fill<T>(array: any[] | null | undefined, value: T): T[];
+/**
+ * Fills an array-like object with a value.
+ * @template T, AL
+ * @param {RejectReadonly<AL> | null | undefined} array - The array-like object to fill
+ * @param {T} value - The value to fill array with
+ * @returns {ArrayLike<T>} Returns the filled array-like object
+ * @example
+ * fill({ length: 3 }, 2)
+ * // => { 0: 2, 1: 2, 2: 2, length: 3 }
+ */
+declare function fill<T, AL extends MutableList<any>>(array: RejectReadonly<AL> | null | undefined, value: T): ArrayLike<T>;
+/**
+ * Fills an array with a value from start up to end.
+ * @template T, U
+ * @param {U[] | null | undefined} array - The array to fill
+ * @param {T} value - The value to fill array with
+ * @param {number} [start=0] - The start position
+ * @param {number} [end=array.length] - The end position
+ * @returns {Array<T | U>} Returns the filled array
+ * @example
+ * fill([1, 2, 3], 'a', 1, 2)
+ * // => [1, 'a', 3]
+ */
+declare function fill<T, U>(array: U[] | null | undefined, value: T, start?: number, end?: number): Array<T | U>;
+/**
+ * Fills an array-like object with a value from start up to end.
+ * @template T, U
+ * @param {U extends readonly any[] ? never : U | null | undefined} array - The array-like object to fill
+ * @param {T} value - The value to fill array with
+ * @param {number} [start=0] - The start position
+ * @param {number} [end=array.length] - The end position
+ * @returns {ArrayLike<T | U[0]>} Returns the filled array-like object
+ * @example
+ * fill({ 0: 1, 1: 2, 2: 3, length: 3 }, 'a', 1, 2)
+ * // => { 0: 1, 1: 'a', 2: 3, length: 3 }
+ */
+declare function fill<T, U extends MutableList<any>>(array: RejectReadonly<U> | null | undefined, value: T, start?: number, end?: number): ArrayLike<T | U[0]>;
+
+export { fill };
Index: node_modules/es-toolkit/dist/compat/array/fill.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/fill.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/fill.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+import { MutableList } from '../_internal/MutableList.d.js';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.js';
+
+/**
+ * Fills an array with a value.
+ * @template T
+ * @param {any[] | null | undefined} array - The array to fill
+ * @param {T} value - The value to fill array with
+ * @returns {T[]} Returns the filled array
+ * @example
+ * fill([1, 2, 3], 'a')
+ * // => ['a', 'a', 'a']
+ */
+declare function fill<T>(array: any[] | null | undefined, value: T): T[];
+/**
+ * Fills an array-like object with a value.
+ * @template T, AL
+ * @param {RejectReadonly<AL> | null | undefined} array - The array-like object to fill
+ * @param {T} value - The value to fill array with
+ * @returns {ArrayLike<T>} Returns the filled array-like object
+ * @example
+ * fill({ length: 3 }, 2)
+ * // => { 0: 2, 1: 2, 2: 2, length: 3 }
+ */
+declare function fill<T, AL extends MutableList<any>>(array: RejectReadonly<AL> | null | undefined, value: T): ArrayLike<T>;
+/**
+ * Fills an array with a value from start up to end.
+ * @template T, U
+ * @param {U[] | null | undefined} array - The array to fill
+ * @param {T} value - The value to fill array with
+ * @param {number} [start=0] - The start position
+ * @param {number} [end=array.length] - The end position
+ * @returns {Array<T | U>} Returns the filled array
+ * @example
+ * fill([1, 2, 3], 'a', 1, 2)
+ * // => [1, 'a', 3]
+ */
+declare function fill<T, U>(array: U[] | null | undefined, value: T, start?: number, end?: number): Array<T | U>;
+/**
+ * Fills an array-like object with a value from start up to end.
+ * @template T, U
+ * @param {U extends readonly any[] ? never : U | null | undefined} array - The array-like object to fill
+ * @param {T} value - The value to fill array with
+ * @param {number} [start=0] - The start position
+ * @param {number} [end=array.length] - The end position
+ * @returns {ArrayLike<T | U[0]>} Returns the filled array-like object
+ * @example
+ * fill({ 0: 1, 1: 2, 2: 3, length: 3 }, 'a', 1, 2)
+ * // => { 0: 1, 1: 'a', 2: 3, length: 3 }
+ */
+declare function fill<T, U extends MutableList<any>>(array: RejectReadonly<U> | null | undefined, value: T, start?: number, end?: number): ArrayLike<T | U[0]>;
+
+export { fill };
Index: node_modules/es-toolkit/dist/compat/array/fill.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/fill.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/fill.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const fill$1 = require('../../array/fill.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isString = require('../predicate/isString.js');
+
+function fill(array, value, start = 0, end = array ? array.length : 0) {
+    if (!isArrayLike.isArrayLike(array)) {
+        return [];
+    }
+    if (isString.isString(array)) {
+        return array;
+    }
+    start = Math.floor(start);
+    end = Math.floor(end);
+    if (!start) {
+        start = 0;
+    }
+    if (!end) {
+        end = 0;
+    }
+    return fill$1.fill(array, value, start, end);
+}
+
+exports.fill = fill;
Index: node_modules/es-toolkit/dist/compat/array/fill.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/fill.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/fill.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { fill as fill$1 } from '../../array/fill.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isString } from '../predicate/isString.mjs';
+
+function fill(array, value, start = 0, end = array ? array.length : 0) {
+    if (!isArrayLike(array)) {
+        return [];
+    }
+    if (isString(array)) {
+        return array;
+    }
+    start = Math.floor(start);
+    end = Math.floor(end);
+    if (!start) {
+        start = 0;
+    }
+    if (!end) {
+        end = 0;
+    }
+    return fill$1(array, value, start, end);
+}
+
+export { fill };
Index: node_modules/es-toolkit/dist/compat/array/filter.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/filter.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/filter.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.mjs';
+import { ListIteratorTypeGuard } from '../_internal/ListIteratorTypeGuard.mjs';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.mjs';
+import { ObjectIteratorTypeGuard } from '../_internal/ObjectIterator.mjs';
+import { StringIterator } from '../_internal/StringIterator.mjs';
+
+/**
+ * Filters characters in a string based on the predicate function.
+ *
+ * @param collection - The string to filter
+ * @param predicate - The function to test each character
+ * @returns An array of characters that pass the predicate test
+ *
+ * @example
+ * filter('123', char => char === '2')
+ * // => ['2']
+ */
+declare function filter(collection: string | null | undefined, predicate?: StringIterator<boolean>): string[];
+/**
+ * Filters elements in an array-like object using a type guard predicate.
+ *
+ * @param collection - The array-like object to filter
+ * @param predicate - The type guard function to test each element
+ * @returns An array of elements that are of type U
+ *
+ * @example
+ * filter([1, '2', 3], (x): x is number => typeof x === 'number')
+ * // => [1, 3]
+ */
+declare function filter<T, U extends T>(collection: ArrayLike<T> | null | undefined, predicate: ListIteratorTypeGuard<T, U>): U[];
+/**
+ * Filters elements in an array-like object based on the predicate.
+ *
+ * @param collection - The array-like object to filter
+ * @param predicate - The function or shorthand to test each element
+ * @returns An array of elements that pass the predicate test
+ *
+ * @example
+ * filter([1, 2, 3], x => x > 1)
+ * // => [2, 3]
+ *
+ * filter([{ a: 1 }, { a: 2 }], { a: 1 })
+ * // => [{ a: 1 }]
+ */
+declare function filter<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>): T[];
+/**
+ * Filters values in an object using a type guard predicate.
+ *
+ * @param collection - The object to filter
+ * @param predicate - The type guard function to test each value
+ * @returns An array of values that are of type U
+ *
+ * @example
+ * filter({ a: 1, b: '2', c: 3 }, (x): x is number => typeof x === 'number')
+ * // => [1, 3]
+ */
+declare function filter<T extends object, U extends T[keyof T]>(collection: T | null | undefined, predicate: ObjectIteratorTypeGuard<T, U>): U[];
+/**
+ * Filters values in an object based on the predicate.
+ *
+ * @param collection - The object to filter
+ * @param predicate - The function or shorthand to test each value
+ * @returns An array of values that pass the predicate test
+ *
+ * @example
+ * filter({ a: 1, b: 2 }, x => x > 1)
+ * // => [2]
+ *
+ * filter({ a: { x: 1 }, b: { x: 2 } }, { x: 1 })
+ * // => [{ x: 1 }]
+ */
+declare function filter<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>): Array<T[keyof T]>;
+
+export { filter };
Index: node_modules/es-toolkit/dist/compat/array/filter.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/filter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/filter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.js';
+import { ListIteratorTypeGuard } from '../_internal/ListIteratorTypeGuard.js';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.js';
+import { ObjectIteratorTypeGuard } from '../_internal/ObjectIterator.js';
+import { StringIterator } from '../_internal/StringIterator.js';
+
+/**
+ * Filters characters in a string based on the predicate function.
+ *
+ * @param collection - The string to filter
+ * @param predicate - The function to test each character
+ * @returns An array of characters that pass the predicate test
+ *
+ * @example
+ * filter('123', char => char === '2')
+ * // => ['2']
+ */
+declare function filter(collection: string | null | undefined, predicate?: StringIterator<boolean>): string[];
+/**
+ * Filters elements in an array-like object using a type guard predicate.
+ *
+ * @param collection - The array-like object to filter
+ * @param predicate - The type guard function to test each element
+ * @returns An array of elements that are of type U
+ *
+ * @example
+ * filter([1, '2', 3], (x): x is number => typeof x === 'number')
+ * // => [1, 3]
+ */
+declare function filter<T, U extends T>(collection: ArrayLike<T> | null | undefined, predicate: ListIteratorTypeGuard<T, U>): U[];
+/**
+ * Filters elements in an array-like object based on the predicate.
+ *
+ * @param collection - The array-like object to filter
+ * @param predicate - The function or shorthand to test each element
+ * @returns An array of elements that pass the predicate test
+ *
+ * @example
+ * filter([1, 2, 3], x => x > 1)
+ * // => [2, 3]
+ *
+ * filter([{ a: 1 }, { a: 2 }], { a: 1 })
+ * // => [{ a: 1 }]
+ */
+declare function filter<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>): T[];
+/**
+ * Filters values in an object using a type guard predicate.
+ *
+ * @param collection - The object to filter
+ * @param predicate - The type guard function to test each value
+ * @returns An array of values that are of type U
+ *
+ * @example
+ * filter({ a: 1, b: '2', c: 3 }, (x): x is number => typeof x === 'number')
+ * // => [1, 3]
+ */
+declare function filter<T extends object, U extends T[keyof T]>(collection: T | null | undefined, predicate: ObjectIteratorTypeGuard<T, U>): U[];
+/**
+ * Filters values in an object based on the predicate.
+ *
+ * @param collection - The object to filter
+ * @param predicate - The function or shorthand to test each value
+ * @returns An array of values that pass the predicate test
+ *
+ * @example
+ * filter({ a: 1, b: 2 }, x => x > 1)
+ * // => [2]
+ *
+ * filter({ a: { x: 1 }, b: { x: 2 } }, { x: 1 })
+ * // => [{ x: 1 }]
+ */
+declare function filter<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>): Array<T[keyof T]>;
+
+export { filter };
Index: node_modules/es-toolkit/dist/compat/array/filter.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/filter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/filter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const iteratee = require('../util/iteratee.js');
+
+function filter(source, predicate = identity.identity) {
+    if (!source) {
+        return [];
+    }
+    predicate = iteratee.iteratee(predicate);
+    if (!Array.isArray(source)) {
+        const result = [];
+        const keys = Object.keys(source);
+        const length = isArrayLike.isArrayLike(source) ? source.length : keys.length;
+        for (let i = 0; i < length; i++) {
+            const key = keys[i];
+            const value = source[key];
+            if (predicate(value, key, source)) {
+                result.push(value);
+            }
+        }
+        return result;
+    }
+    const result = [];
+    const length = source.length;
+    for (let i = 0; i < length; i++) {
+        const value = source[i];
+        if (predicate(value, i, source)) {
+            result.push(value);
+        }
+    }
+    return result;
+}
+
+exports.filter = filter;
Index: node_modules/es-toolkit/dist/compat/array/filter.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/filter.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/filter.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import { identity } from '../../function/identity.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function filter(source, predicate = identity) {
+    if (!source) {
+        return [];
+    }
+    predicate = iteratee(predicate);
+    if (!Array.isArray(source)) {
+        const result = [];
+        const keys = Object.keys(source);
+        const length = isArrayLike(source) ? source.length : keys.length;
+        for (let i = 0; i < length; i++) {
+            const key = keys[i];
+            const value = source[key];
+            if (predicate(value, key, source)) {
+                result.push(value);
+            }
+        }
+        return result;
+    }
+    const result = [];
+    const length = source.length;
+    for (let i = 0; i < length; i++) {
+        const value = source[i];
+        if (predicate(value, i, source)) {
+            result.push(value);
+        }
+    }
+    return result;
+}
+
+export { filter };
Index: node_modules/es-toolkit/dist/compat/array/find.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/find.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/find.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.mjs';
+import { ListIteratorTypeGuard } from '../_internal/ListIteratorTypeGuard.mjs';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.mjs';
+import { ObjectIteratorTypeGuard } from '../_internal/ObjectIterator.mjs';
+
+/**
+ * Finds the first element in an array-like object that matches a type guard predicate.
+ *
+ * @param collection - The array-like object to search
+ * @param predicate - The type guard function to test each element
+ * @param fromIndex - The index to start searching from
+ * @returns The first element that matches the type guard, or undefined if none found
+ *
+ * @example
+ * find([1, '2', 3], (x): x is number => typeof x === 'number')
+ * // => 1
+ */
+declare function find<T, U extends T>(collection: ArrayLike<T> | null | undefined, predicate: ListIteratorTypeGuard<T, U>, fromIndex?: number): U | undefined;
+/**
+ * Finds the first element in an array-like object that matches a predicate.
+ *
+ * @param collection - The array-like object to search
+ * @param predicate - The function or shorthand to test each element
+ * @param fromIndex - The index to start searching from
+ * @returns The first matching element, or undefined if none found
+ *
+ * @example
+ * find([1, 2, 3], x => x > 2)
+ * // => 3
+ *
+ * find([{ a: 1 }, { a: 2 }], { a: 2 })
+ * // => { a: 2 }
+ */
+declare function find<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>, fromIndex?: number): T | undefined;
+/**
+ * Finds the first value in an object that matches a type guard predicate.
+ *
+ * @param collection - The object to search
+ * @param predicate - The type guard function to test each value
+ * @param fromIndex - The index to start searching from
+ * @returns The first value that matches the type guard, or undefined if none found
+ *
+ * @example
+ * find({ a: 1, b: '2', c: 3 }, (x): x is number => typeof x === 'number')
+ * // => 1
+ */
+declare function find<T extends object, U extends T[keyof T]>(collection: T | null | undefined, predicate: ObjectIteratorTypeGuard<T, U>, fromIndex?: number): U | undefined;
+/**
+ * Finds the first value in an object that matches a predicate.
+ *
+ * @param collection - The object to search
+ * @param predicate - The function or shorthand to test each value
+ * @param fromIndex - The index to start searching from
+ * @returns The first matching value, or undefined if none found
+ *
+ * @example
+ * find({ a: 1, b: 2 }, x => x > 1)
+ * // => 2
+ *
+ * find({ a: { x: 1 }, b: { x: 2 } }, { x: 2 })
+ * // => { x: 2 }
+ */
+declare function find<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>, fromIndex?: number): T[keyof T] | undefined;
+
+export { find };
Index: node_modules/es-toolkit/dist/compat/array/find.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/find.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/find.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.js';
+import { ListIteratorTypeGuard } from '../_internal/ListIteratorTypeGuard.js';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.js';
+import { ObjectIteratorTypeGuard } from '../_internal/ObjectIterator.js';
+
+/**
+ * Finds the first element in an array-like object that matches a type guard predicate.
+ *
+ * @param collection - The array-like object to search
+ * @param predicate - The type guard function to test each element
+ * @param fromIndex - The index to start searching from
+ * @returns The first element that matches the type guard, or undefined if none found
+ *
+ * @example
+ * find([1, '2', 3], (x): x is number => typeof x === 'number')
+ * // => 1
+ */
+declare function find<T, U extends T>(collection: ArrayLike<T> | null | undefined, predicate: ListIteratorTypeGuard<T, U>, fromIndex?: number): U | undefined;
+/**
+ * Finds the first element in an array-like object that matches a predicate.
+ *
+ * @param collection - The array-like object to search
+ * @param predicate - The function or shorthand to test each element
+ * @param fromIndex - The index to start searching from
+ * @returns The first matching element, or undefined if none found
+ *
+ * @example
+ * find([1, 2, 3], x => x > 2)
+ * // => 3
+ *
+ * find([{ a: 1 }, { a: 2 }], { a: 2 })
+ * // => { a: 2 }
+ */
+declare function find<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>, fromIndex?: number): T | undefined;
+/**
+ * Finds the first value in an object that matches a type guard predicate.
+ *
+ * @param collection - The object to search
+ * @param predicate - The type guard function to test each value
+ * @param fromIndex - The index to start searching from
+ * @returns The first value that matches the type guard, or undefined if none found
+ *
+ * @example
+ * find({ a: 1, b: '2', c: 3 }, (x): x is number => typeof x === 'number')
+ * // => 1
+ */
+declare function find<T extends object, U extends T[keyof T]>(collection: T | null | undefined, predicate: ObjectIteratorTypeGuard<T, U>, fromIndex?: number): U | undefined;
+/**
+ * Finds the first value in an object that matches a predicate.
+ *
+ * @param collection - The object to search
+ * @param predicate - The function or shorthand to test each value
+ * @param fromIndex - The index to start searching from
+ * @returns The first matching value, or undefined if none found
+ *
+ * @example
+ * find({ a: 1, b: 2 }, x => x > 1)
+ * // => 2
+ *
+ * find({ a: { x: 1 }, b: { x: 2 } }, { x: 2 })
+ * // => { x: 2 }
+ */
+declare function find<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>, fromIndex?: number): T[keyof T] | undefined;
+
+export { find };
Index: node_modules/es-toolkit/dist/compat/array/find.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/find.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/find.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const iteratee = require('../util/iteratee.js');
+
+function find(source, _doesMatch = identity.identity, fromIndex = 0) {
+    if (!source) {
+        return undefined;
+    }
+    if (fromIndex < 0) {
+        fromIndex = Math.max(source.length + fromIndex, 0);
+    }
+    const doesMatch = iteratee.iteratee(_doesMatch);
+    if (typeof doesMatch === 'function' && !Array.isArray(source)) {
+        const keys = Object.keys(source);
+        for (let i = fromIndex; i < keys.length; i++) {
+            const key = keys[i];
+            const value = source[key];
+            if (doesMatch(value, key, source)) {
+                return value;
+            }
+        }
+        return undefined;
+    }
+    const values = Array.isArray(source) ? source.slice(fromIndex) : Object.values(source).slice(fromIndex);
+    return values.find(doesMatch);
+}
+
+exports.find = find;
Index: node_modules/es-toolkit/dist/compat/array/find.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/find.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/find.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { identity } from '../../function/identity.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function find(source, _doesMatch = identity, fromIndex = 0) {
+    if (!source) {
+        return undefined;
+    }
+    if (fromIndex < 0) {
+        fromIndex = Math.max(source.length + fromIndex, 0);
+    }
+    const doesMatch = iteratee(_doesMatch);
+    if (typeof doesMatch === 'function' && !Array.isArray(source)) {
+        const keys = Object.keys(source);
+        for (let i = fromIndex; i < keys.length; i++) {
+            const key = keys[i];
+            const value = source[key];
+            if (doesMatch(value, key, source)) {
+                return value;
+            }
+        }
+        return undefined;
+    }
+    const values = Array.isArray(source) ? source.slice(fromIndex) : Object.values(source).slice(fromIndex);
+    return values.find(doesMatch);
+}
+
+export { find };
Index: node_modules/es-toolkit/dist/compat/array/findIndex.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findIndex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findIndex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.mjs';
+
+/**
+ * Finds the index of the first item in an array that has a specific property, where the property name is provided as a PropertyKey.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arr - The array to search through.
+ * @param {((item: T, index: number, arr: any) => unknown) | Partial<T> | [keyof T, unknown] | PropertyKey} doesMatch - The criteria to match against the items in the array. This can be a function, a partial object, a key-value pair, or a property name.
+ * @param {PropertyKey} propertyToCheck - The property name to check for in the items of the array.
+ * @param {number} [fromIndex=0] - The index to start the search from, defaults to 0.
+ * @returns {number} - The index of the first item that has the specified property, or `undefined` if no match is found.
+ *
+ * @example
+ * // Using a property name
+ * const items = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];
+ * const result = findIndex(items, 'name');
+ * console.log(result); // 0
+ */
+declare function findIndex<T>(arr: ArrayLike<T> | null | undefined, doesMatch?: ListIterateeCustom<T, boolean>, fromIndex?: number): number;
+
+export { findIndex };
Index: node_modules/es-toolkit/dist/compat/array/findIndex.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.js';
+
+/**
+ * Finds the index of the first item in an array that has a specific property, where the property name is provided as a PropertyKey.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arr - The array to search through.
+ * @param {((item: T, index: number, arr: any) => unknown) | Partial<T> | [keyof T, unknown] | PropertyKey} doesMatch - The criteria to match against the items in the array. This can be a function, a partial object, a key-value pair, or a property name.
+ * @param {PropertyKey} propertyToCheck - The property name to check for in the items of the array.
+ * @param {number} [fromIndex=0] - The index to start the search from, defaults to 0.
+ * @returns {number} - The index of the first item that has the specified property, or `undefined` if no match is found.
+ *
+ * @example
+ * // Using a property name
+ * const items = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];
+ * const result = findIndex(items, 'name');
+ * console.log(result); // 0
+ */
+declare function findIndex<T>(arr: ArrayLike<T> | null | undefined, doesMatch?: ListIterateeCustom<T, boolean>, fromIndex?: number): number;
+
+export { findIndex };
Index: node_modules/es-toolkit/dist/compat/array/findIndex.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const property = require('../object/property.js');
+const matches = require('../predicate/matches.js');
+const matchesProperty = require('../predicate/matchesProperty.js');
+
+function findIndex(arr, doesMatch, fromIndex = 0) {
+    if (!arr) {
+        return -1;
+    }
+    if (fromIndex < 0) {
+        fromIndex = Math.max(arr.length + fromIndex, 0);
+    }
+    const subArray = Array.from(arr).slice(fromIndex);
+    let index = -1;
+    switch (typeof doesMatch) {
+        case 'function': {
+            index = subArray.findIndex(doesMatch);
+            break;
+        }
+        case 'object': {
+            if (Array.isArray(doesMatch) && doesMatch.length === 2) {
+                const key = doesMatch[0];
+                const value = doesMatch[1];
+                index = subArray.findIndex(matchesProperty.matchesProperty(key, value));
+            }
+            else {
+                index = subArray.findIndex(matches.matches(doesMatch));
+            }
+            break;
+        }
+        case 'number':
+        case 'symbol':
+        case 'string': {
+            index = subArray.findIndex(property.property(doesMatch));
+        }
+    }
+    return index === -1 ? -1 : index + fromIndex;
+}
+
+exports.findIndex = findIndex;
Index: node_modules/es-toolkit/dist/compat/array/findIndex.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { property } from '../object/property.mjs';
+import { matches } from '../predicate/matches.mjs';
+import { matchesProperty } from '../predicate/matchesProperty.mjs';
+
+function findIndex(arr, doesMatch, fromIndex = 0) {
+    if (!arr) {
+        return -1;
+    }
+    if (fromIndex < 0) {
+        fromIndex = Math.max(arr.length + fromIndex, 0);
+    }
+    const subArray = Array.from(arr).slice(fromIndex);
+    let index = -1;
+    switch (typeof doesMatch) {
+        case 'function': {
+            index = subArray.findIndex(doesMatch);
+            break;
+        }
+        case 'object': {
+            if (Array.isArray(doesMatch) && doesMatch.length === 2) {
+                const key = doesMatch[0];
+                const value = doesMatch[1];
+                index = subArray.findIndex(matchesProperty(key, value));
+            }
+            else {
+                index = subArray.findIndex(matches(doesMatch));
+            }
+            break;
+        }
+        case 'number':
+        case 'symbol':
+        case 'string': {
+            index = subArray.findIndex(property(doesMatch));
+        }
+    }
+    return index === -1 ? -1 : index + fromIndex;
+}
+
+export { findIndex };
Index: node_modules/es-toolkit/dist/compat/array/findLast.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findLast.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findLast.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.mjs';
+import { ListIteratorTypeGuard } from '../_internal/ListIteratorTypeGuard.mjs';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.mjs';
+import { ObjectIteratorTypeGuard } from '../_internal/ObjectIterator.mjs';
+
+/**
+ * Finds the last element in a collection that satisfies the predicate.
+ *
+ * @template T, S
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to search.
+ * @param {ListIteratorTypeGuard<T, S>} predicate - The predicate function with type guard.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {S | undefined} The last element that satisfies the predicate.
+ *
+ * @example
+ * const users = [{ user: 'barney', age: 36 }, { user: 'fred', age: 40 }, { user: 'pebbles', age: 18 }];
+ * findLast(users, (o): o is { user: string; age: number } => o.age < 40);
+ * // => { user: 'pebbles', age: 18 }
+ */
+declare function findLast<T, S extends T>(collection: ArrayLike<T> | null | undefined, predicate: ListIteratorTypeGuard<T, S>, fromIndex?: number): S | undefined;
+/**
+ * Finds the last element in a collection that satisfies the predicate.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to search.
+ * @param {ListIterateeCustom<T, boolean>} [predicate] - The predicate function, partial object, property-value pair, or property name.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {T | undefined} The last element that satisfies the predicate.
+ *
+ * @example
+ * const users = [{ user: 'barney', age: 36 }, { user: 'fred', age: 40 }, { user: 'pebbles', age: 18 }];
+ * findLast(users, o => o.age < 40);
+ * // => { user: 'pebbles', age: 18 }
+ *
+ * findLast(users, { age: 36 });
+ * // => { user: 'barney', age: 36 }
+ *
+ * findLast(users, ['age', 18]);
+ * // => { user: 'pebbles', age: 18 }
+ *
+ * findLast(users, 'age');
+ * // => { user: 'fred', age: 40 }
+ */
+declare function findLast<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>, fromIndex?: number): T | undefined;
+/**
+ * Finds the last element in an object that satisfies the predicate with type guard.
+ *
+ * @template T, S
+ * @param {T | null | undefined} collection - The object to search.
+ * @param {ObjectIteratorTypeGuard<T, S>} predicate - The predicate function with type guard.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {S | undefined} The last element that satisfies the predicate.
+ *
+ * @example
+ * const obj = { a: 1, b: 'hello', c: 3 };
+ * findLast(obj, (value): value is string => typeof value === 'string');
+ * // => 'hello'
+ */
+declare function findLast<T extends object, S extends T[keyof T]>(collection: T | null | undefined, predicate: ObjectIteratorTypeGuard<T, S>, fromIndex?: number): S | undefined;
+/**
+ * Finds the last element in an object that satisfies the predicate.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to search.
+ * @param {ObjectIterateeCustom<T, boolean>} [predicate] - The predicate function, partial object, property-value pair, or property name.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {T[keyof T] | undefined} The last element that satisfies the predicate.
+ *
+ * @example
+ * const obj = { a: { id: 1, name: 'Alice' }, b: { id: 2 }, c: { id: 3, name: 'Bob' } };
+ * findLast(obj, o => o.id > 1);
+ * // => { id: 3, name: 'Bob' }
+ *
+ * findLast(obj, { name: 'Bob' });
+ * // => { id: 3, name: 'Bob' }
+ *
+ * findLast(obj, 'name');
+ * // => { id: 3, name: 'Bob' }
+ */
+declare function findLast<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>, fromIndex?: number): T[keyof T] | undefined;
+
+export { findLast };
Index: node_modules/es-toolkit/dist/compat/array/findLast.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findLast.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findLast.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.js';
+import { ListIteratorTypeGuard } from '../_internal/ListIteratorTypeGuard.js';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.js';
+import { ObjectIteratorTypeGuard } from '../_internal/ObjectIterator.js';
+
+/**
+ * Finds the last element in a collection that satisfies the predicate.
+ *
+ * @template T, S
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to search.
+ * @param {ListIteratorTypeGuard<T, S>} predicate - The predicate function with type guard.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {S | undefined} The last element that satisfies the predicate.
+ *
+ * @example
+ * const users = [{ user: 'barney', age: 36 }, { user: 'fred', age: 40 }, { user: 'pebbles', age: 18 }];
+ * findLast(users, (o): o is { user: string; age: number } => o.age < 40);
+ * // => { user: 'pebbles', age: 18 }
+ */
+declare function findLast<T, S extends T>(collection: ArrayLike<T> | null | undefined, predicate: ListIteratorTypeGuard<T, S>, fromIndex?: number): S | undefined;
+/**
+ * Finds the last element in a collection that satisfies the predicate.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to search.
+ * @param {ListIterateeCustom<T, boolean>} [predicate] - The predicate function, partial object, property-value pair, or property name.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {T | undefined} The last element that satisfies the predicate.
+ *
+ * @example
+ * const users = [{ user: 'barney', age: 36 }, { user: 'fred', age: 40 }, { user: 'pebbles', age: 18 }];
+ * findLast(users, o => o.age < 40);
+ * // => { user: 'pebbles', age: 18 }
+ *
+ * findLast(users, { age: 36 });
+ * // => { user: 'barney', age: 36 }
+ *
+ * findLast(users, ['age', 18]);
+ * // => { user: 'pebbles', age: 18 }
+ *
+ * findLast(users, 'age');
+ * // => { user: 'fred', age: 40 }
+ */
+declare function findLast<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>, fromIndex?: number): T | undefined;
+/**
+ * Finds the last element in an object that satisfies the predicate with type guard.
+ *
+ * @template T, S
+ * @param {T | null | undefined} collection - The object to search.
+ * @param {ObjectIteratorTypeGuard<T, S>} predicate - The predicate function with type guard.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {S | undefined} The last element that satisfies the predicate.
+ *
+ * @example
+ * const obj = { a: 1, b: 'hello', c: 3 };
+ * findLast(obj, (value): value is string => typeof value === 'string');
+ * // => 'hello'
+ */
+declare function findLast<T extends object, S extends T[keyof T]>(collection: T | null | undefined, predicate: ObjectIteratorTypeGuard<T, S>, fromIndex?: number): S | undefined;
+/**
+ * Finds the last element in an object that satisfies the predicate.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to search.
+ * @param {ObjectIterateeCustom<T, boolean>} [predicate] - The predicate function, partial object, property-value pair, or property name.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {T[keyof T] | undefined} The last element that satisfies the predicate.
+ *
+ * @example
+ * const obj = { a: { id: 1, name: 'Alice' }, b: { id: 2 }, c: { id: 3, name: 'Bob' } };
+ * findLast(obj, o => o.id > 1);
+ * // => { id: 3, name: 'Bob' }
+ *
+ * findLast(obj, { name: 'Bob' });
+ * // => { id: 3, name: 'Bob' }
+ *
+ * findLast(obj, 'name');
+ * // => { id: 3, name: 'Bob' }
+ */
+declare function findLast<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>, fromIndex?: number): T[keyof T] | undefined;
+
+export { findLast };
Index: node_modules/es-toolkit/dist/compat/array/findLast.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findLast.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findLast.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const iteratee = require('../util/iteratee.js');
+const toInteger = require('../util/toInteger.js');
+
+function findLast(source, _doesMatch = identity.identity, fromIndex) {
+    if (!source) {
+        return undefined;
+    }
+    const length = Array.isArray(source) ? source.length : Object.keys(source).length;
+    fromIndex = toInteger.toInteger(fromIndex ?? length - 1);
+    if (fromIndex < 0) {
+        fromIndex = Math.max(length + fromIndex, 0);
+    }
+    else {
+        fromIndex = Math.min(fromIndex, length - 1);
+    }
+    const doesMatch = iteratee.iteratee(_doesMatch);
+    if (typeof doesMatch === 'function' && !Array.isArray(source)) {
+        const keys = Object.keys(source);
+        for (let i = fromIndex; i >= 0; i--) {
+            const key = keys[i];
+            const value = source[key];
+            if (doesMatch(value, key, source)) {
+                return value;
+            }
+        }
+        return undefined;
+    }
+    const values = Array.isArray(source) ? source.slice(0, fromIndex + 1) : Object.values(source).slice(0, fromIndex + 1);
+    return values.findLast(doesMatch);
+}
+
+exports.findLast = findLast;
Index: node_modules/es-toolkit/dist/compat/array/findLast.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findLast.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findLast.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { identity } from '../../function/identity.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+
+function findLast(source, _doesMatch = identity, fromIndex) {
+    if (!source) {
+        return undefined;
+    }
+    const length = Array.isArray(source) ? source.length : Object.keys(source).length;
+    fromIndex = toInteger(fromIndex ?? length - 1);
+    if (fromIndex < 0) {
+        fromIndex = Math.max(length + fromIndex, 0);
+    }
+    else {
+        fromIndex = Math.min(fromIndex, length - 1);
+    }
+    const doesMatch = iteratee(_doesMatch);
+    if (typeof doesMatch === 'function' && !Array.isArray(source)) {
+        const keys = Object.keys(source);
+        for (let i = fromIndex; i >= 0; i--) {
+            const key = keys[i];
+            const value = source[key];
+            if (doesMatch(value, key, source)) {
+                return value;
+            }
+        }
+        return undefined;
+    }
+    const values = Array.isArray(source) ? source.slice(0, fromIndex + 1) : Object.values(source).slice(0, fromIndex + 1);
+    return values.findLast(doesMatch);
+}
+
+export { findLast };
Index: node_modules/es-toolkit/dist/compat/array/findLastIndex.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findLastIndex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findLastIndex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.mjs';
+
+/**
+ * Finds the index of the last element in the array that satisfies the predicate.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to search through.
+ * @param {ListIterateeCustom<T, boolean>} [predicate] - The predicate function, partial object, property-value pair, or property name.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {number} The index of the last matching element, or -1 if not found.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', active: true },
+ *   { user: 'fred', active: false },
+ *   { user: 'pebbles', active: false }
+ * ];
+ *
+ * findLastIndex(users, o => o.user === 'pebbles');
+ * // => 2
+ *
+ * findLastIndex(users, { user: 'barney', active: true });
+ * // => 0
+ *
+ * findLastIndex(users, ['active', false]);
+ * // => 2
+ *
+ * findLastIndex(users, 'active');
+ * // => 0
+ */
+declare function findLastIndex<T>(array: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>, fromIndex?: number): number;
+
+export { findLastIndex };
Index: node_modules/es-toolkit/dist/compat/array/findLastIndex.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findLastIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findLastIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.js';
+
+/**
+ * Finds the index of the last element in the array that satisfies the predicate.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to search through.
+ * @param {ListIterateeCustom<T, boolean>} [predicate] - The predicate function, partial object, property-value pair, or property name.
+ * @param {number} [fromIndex] - The index to start searching from.
+ * @returns {number} The index of the last matching element, or -1 if not found.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', active: true },
+ *   { user: 'fred', active: false },
+ *   { user: 'pebbles', active: false }
+ * ];
+ *
+ * findLastIndex(users, o => o.user === 'pebbles');
+ * // => 2
+ *
+ * findLastIndex(users, { user: 'barney', active: true });
+ * // => 0
+ *
+ * findLastIndex(users, ['active', false]);
+ * // => 2
+ *
+ * findLastIndex(users, 'active');
+ * // => 0
+ */
+declare function findLastIndex<T>(array: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>, fromIndex?: number): number;
+
+export { findLastIndex };
Index: node_modules/es-toolkit/dist/compat/array/findLastIndex.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findLastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findLastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const toArray = require('../_internal/toArray.js');
+const property = require('../object/property.js');
+const matches = require('../predicate/matches.js');
+const matchesProperty = require('../predicate/matchesProperty.js');
+
+function findLastIndex(arr, doesMatch = identity.identity, fromIndex = arr ? arr.length - 1 : 0) {
+    if (!arr) {
+        return -1;
+    }
+    if (fromIndex < 0) {
+        fromIndex = Math.max(arr.length + fromIndex, 0);
+    }
+    else {
+        fromIndex = Math.min(fromIndex, arr.length - 1);
+    }
+    const subArray = toArray.toArray(arr).slice(0, fromIndex + 1);
+    switch (typeof doesMatch) {
+        case 'function': {
+            return subArray.findLastIndex(doesMatch);
+        }
+        case 'object': {
+            if (Array.isArray(doesMatch) && doesMatch.length === 2) {
+                const key = doesMatch[0];
+                const value = doesMatch[1];
+                return subArray.findLastIndex(matchesProperty.matchesProperty(key, value));
+            }
+            else {
+                return subArray.findLastIndex(matches.matches(doesMatch));
+            }
+        }
+        case 'number':
+        case 'symbol':
+        case 'string': {
+            return subArray.findLastIndex(property.property(doesMatch));
+        }
+    }
+}
+
+exports.findLastIndex = findLastIndex;
Index: node_modules/es-toolkit/dist/compat/array/findLastIndex.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/findLastIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/findLastIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { identity } from '../../function/identity.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { property } from '../object/property.mjs';
+import { matches } from '../predicate/matches.mjs';
+import { matchesProperty } from '../predicate/matchesProperty.mjs';
+
+function findLastIndex(arr, doesMatch = identity, fromIndex = arr ? arr.length - 1 : 0) {
+    if (!arr) {
+        return -1;
+    }
+    if (fromIndex < 0) {
+        fromIndex = Math.max(arr.length + fromIndex, 0);
+    }
+    else {
+        fromIndex = Math.min(fromIndex, arr.length - 1);
+    }
+    const subArray = toArray(arr).slice(0, fromIndex + 1);
+    switch (typeof doesMatch) {
+        case 'function': {
+            return subArray.findLastIndex(doesMatch);
+        }
+        case 'object': {
+            if (Array.isArray(doesMatch) && doesMatch.length === 2) {
+                const key = doesMatch[0];
+                const value = doesMatch[1];
+                return subArray.findLastIndex(matchesProperty(key, value));
+            }
+            else {
+                return subArray.findLastIndex(matches(doesMatch));
+            }
+        }
+        case 'number':
+        case 'symbol':
+        case 'string': {
+            return subArray.findLastIndex(property(doesMatch));
+        }
+    }
+}
+
+export { findLastIndex };
Index: node_modules/es-toolkit/dist/compat/array/flatMap.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,93 @@
+import { ListIterator } from '../_internal/ListIterator.mjs';
+import { Many } from '../_internal/Many.mjs';
+import { ObjectIterator } from '../_internal/ObjectIterator.mjs';
+
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @template T
+ * @param {Record<string, Many<T>> | Record<number, Many<T>> | null | undefined} collection - The collection to iterate over.
+ * @returns {T[]} Returns the new flattened array.
+ *
+ * @example
+ * const obj = { a: [1, 2], b: [3, 4] };
+ * flatMap(obj);
+ * // => [1, 2, 3, 4]
+ */
+declare function flatMap<T>(collection: Record<string, Many<T>> | Record<number, Many<T>> | null | undefined): T[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @returns {any[]} Returns the new flattened array.
+ *
+ * @example
+ * flatMap({ a: 1, b: 2 });
+ * // => [1, 2]
+ */
+declare function flatMap(collection: object | null | undefined): any[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @template T, R
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ListIterator<T, Many<R>>} iteratee - The function invoked per iteration.
+ * @returns {R[]} Returns the new flattened array.
+ *
+ * @example
+ * function duplicate(n) {
+ *   return [n, n];
+ * }
+ *
+ * flatMap([1, 2], duplicate);
+ * // => [1, 1, 2, 2]
+ */
+declare function flatMap<T, R>(collection: ArrayLike<T> | null | undefined, iteratee: ListIterator<T, Many<R>>): R[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @template T, R
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, Many<R>>} iteratee - The function invoked per iteration.
+ * @returns {R[]} Returns the new flattened array.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * flatMap(obj, (value, key) => [key, value]);
+ * // => ['a', 1, 'b', 2]
+ */
+declare function flatMap<T extends object, R>(collection: T | null | undefined, iteratee: ObjectIterator<T, Many<R>>): R[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {string} iteratee - The property name to use as iteratee.
+ * @returns {any[]} Returns the new flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', hobbies: ['hiking', 'coding'] },
+ *   { user: 'fred', hobbies: ['reading'] }
+ * ];
+ * flatMap(users, 'hobbies');
+ * // => ['hiking', 'coding', 'reading']
+ */
+declare function flatMap(collection: object | null | undefined, iteratee: string): any[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {object} iteratee - The object properties to match.
+ * @returns {boolean[]} Returns the new flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', age: 36, active: true },
+ *   { user: 'fred', age: 40, active: false }
+ * ];
+ * flatMap(users, { active: false });
+ * // => [false]
+ */
+declare function flatMap(collection: object | null | undefined, iteratee: object): boolean[];
+
+export { flatMap };
Index: node_modules/es-toolkit/dist/compat/array/flatMap.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,93 @@
+import { ListIterator } from '../_internal/ListIterator.js';
+import { Many } from '../_internal/Many.js';
+import { ObjectIterator } from '../_internal/ObjectIterator.js';
+
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @template T
+ * @param {Record<string, Many<T>> | Record<number, Many<T>> | null | undefined} collection - The collection to iterate over.
+ * @returns {T[]} Returns the new flattened array.
+ *
+ * @example
+ * const obj = { a: [1, 2], b: [3, 4] };
+ * flatMap(obj);
+ * // => [1, 2, 3, 4]
+ */
+declare function flatMap<T>(collection: Record<string, Many<T>> | Record<number, Many<T>> | null | undefined): T[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @returns {any[]} Returns the new flattened array.
+ *
+ * @example
+ * flatMap({ a: 1, b: 2 });
+ * // => [1, 2]
+ */
+declare function flatMap(collection: object | null | undefined): any[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @template T, R
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ListIterator<T, Many<R>>} iteratee - The function invoked per iteration.
+ * @returns {R[]} Returns the new flattened array.
+ *
+ * @example
+ * function duplicate(n) {
+ *   return [n, n];
+ * }
+ *
+ * flatMap([1, 2], duplicate);
+ * // => [1, 1, 2, 2]
+ */
+declare function flatMap<T, R>(collection: ArrayLike<T> | null | undefined, iteratee: ListIterator<T, Many<R>>): R[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @template T, R
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, Many<R>>} iteratee - The function invoked per iteration.
+ * @returns {R[]} Returns the new flattened array.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * flatMap(obj, (value, key) => [key, value]);
+ * // => ['a', 1, 'b', 2]
+ */
+declare function flatMap<T extends object, R>(collection: T | null | undefined, iteratee: ObjectIterator<T, Many<R>>): R[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {string} iteratee - The property name to use as iteratee.
+ * @returns {any[]} Returns the new flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', hobbies: ['hiking', 'coding'] },
+ *   { user: 'fred', hobbies: ['reading'] }
+ * ];
+ * flatMap(users, 'hobbies');
+ * // => ['hiking', 'coding', 'reading']
+ */
+declare function flatMap(collection: object | null | undefined, iteratee: string): any[];
+/**
+ * Creates a flattened array of values by running each element in collection through iteratee and flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {object} iteratee - The object properties to match.
+ * @returns {boolean[]} Returns the new flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', age: 36, active: true },
+ *   { user: 'fred', age: 40, active: false }
+ * ];
+ * flatMap(users, { active: false });
+ * // => [false]
+ */
+declare function flatMap(collection: object | null | undefined, iteratee: object): boolean[];
+
+export { flatMap };
Index: node_modules/es-toolkit/dist/compat/array/flatMap.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flattenDepth = require('./flattenDepth.js');
+const map = require('./map.js');
+const isNil = require('../../predicate/isNil.js');
+
+function flatMap(collection, iteratee) {
+    if (isNil.isNil(collection)) {
+        return [];
+    }
+    const mapped = isNil.isNil(iteratee) ? map.map(collection) : map.map(collection, iteratee);
+    return flattenDepth.flattenDepth(mapped, 1);
+}
+
+exports.flatMap = flatMap;
Index: node_modules/es-toolkit/dist/compat/array/flatMap.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { flattenDepth } from './flattenDepth.mjs';
+import { map } from './map.mjs';
+import { isNil } from '../../predicate/isNil.mjs';
+
+function flatMap(collection, iteratee) {
+    if (isNil(collection)) {
+        return [];
+    }
+    const mapped = isNil(iteratee) ? map(collection) : map(collection, iteratee);
+    return flattenDepth(mapped, 1);
+}
+
+export { flatMap };
Index: node_modules/es-toolkit/dist/compat/array/flatMapDeep.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMapDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMapDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+import { ListIterator } from '../_internal/ListIterator.mjs';
+import { ListOfRecursiveArraysOrValues } from '../_internal/ListOfRecursiveArraysOrValues.mjs';
+import { ObjectIterator } from '../_internal/ObjectIterator.mjs';
+
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @template T
+ * @param {Record<string, RecursiveArray<T> | T> | Record<number, RecursiveArray<T> | T> | null | undefined} collection - The collection to iterate over.
+ * @returns {T[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * const obj = { a: [[1, 2]], b: [[[3]]] };
+ * flatMapDeep(obj);
+ * // => [1, 2, 3]
+ */
+declare function flatMapDeep<T>(collection: Record<string, ListOfRecursiveArraysOrValues<T> | T> | Record<number, ListOfRecursiveArraysOrValues<T> | T> | null | undefined): T[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @template T, R
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ListIterator<T, RecursiveArray<R> | R>} iteratee - The function invoked per iteration.
+ * @returns {R[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * function duplicate(n) {
+ *   return [[[n, n]]];
+ * }
+ *
+ * flatMapDeep([1, 2], duplicate);
+ * // => [1, 1, 2, 2]
+ */
+declare function flatMapDeep<T, R>(collection: ArrayLike<T> | null | undefined, iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<R> | R>): R[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @template T, R
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, RecursiveArray<R> | R>} iteratee - The function invoked per iteration.
+ * @returns {R[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * flatMapDeep(obj, (value, key) => [[[key, value]]]);
+ * // => ['a', 1, 'b', 2]
+ */
+declare function flatMapDeep<T extends object, R>(collection: T | null | undefined, iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<R> | R>): R[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {string} iteratee - The property name to use as iteratee.
+ * @returns {any[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', hobbies: [['hiking', 'coding']] },
+ *   { user: 'fred', hobbies: [['reading']] }
+ * ];
+ * flatMapDeep(users, 'hobbies');
+ * // => ['hiking', 'coding', 'reading']
+ */
+declare function flatMapDeep(collection: object | null | undefined, iteratee: string): any[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {object} iteratee - The object properties to match.
+ * @returns {boolean[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', active: [true, false] },
+ *   { user: 'fred', active: [false] }
+ * ];
+ * flatMapDeep(users, { active: [false] });
+ * // => [false]
+ */
+declare function flatMapDeep(collection: object | null | undefined, iteratee: object): boolean[];
+
+export { flatMapDeep };
Index: node_modules/es-toolkit/dist/compat/array/flatMapDeep.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMapDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMapDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+import { ListIterator } from '../_internal/ListIterator.js';
+import { ListOfRecursiveArraysOrValues } from '../_internal/ListOfRecursiveArraysOrValues.js';
+import { ObjectIterator } from '../_internal/ObjectIterator.js';
+
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @template T
+ * @param {Record<string, RecursiveArray<T> | T> | Record<number, RecursiveArray<T> | T> | null | undefined} collection - The collection to iterate over.
+ * @returns {T[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * const obj = { a: [[1, 2]], b: [[[3]]] };
+ * flatMapDeep(obj);
+ * // => [1, 2, 3]
+ */
+declare function flatMapDeep<T>(collection: Record<string, ListOfRecursiveArraysOrValues<T> | T> | Record<number, ListOfRecursiveArraysOrValues<T> | T> | null | undefined): T[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @template T, R
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ListIterator<T, RecursiveArray<R> | R>} iteratee - The function invoked per iteration.
+ * @returns {R[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * function duplicate(n) {
+ *   return [[[n, n]]];
+ * }
+ *
+ * flatMapDeep([1, 2], duplicate);
+ * // => [1, 1, 2, 2]
+ */
+declare function flatMapDeep<T, R>(collection: ArrayLike<T> | null | undefined, iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<R> | R>): R[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @template T, R
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, RecursiveArray<R> | R>} iteratee - The function invoked per iteration.
+ * @returns {R[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * flatMapDeep(obj, (value, key) => [[[key, value]]]);
+ * // => ['a', 1, 'b', 2]
+ */
+declare function flatMapDeep<T extends object, R>(collection: T | null | undefined, iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<R> | R>): R[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {string} iteratee - The property name to use as iteratee.
+ * @returns {any[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', hobbies: [['hiking', 'coding']] },
+ *   { user: 'fred', hobbies: [['reading']] }
+ * ];
+ * flatMapDeep(users, 'hobbies');
+ * // => ['hiking', 'coding', 'reading']
+ */
+declare function flatMapDeep(collection: object | null | undefined, iteratee: string): any[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and recursively flattening the mapped results.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {object} iteratee - The object properties to match.
+ * @returns {boolean[]} Returns the new deeply flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', active: [true, false] },
+ *   { user: 'fred', active: [false] }
+ * ];
+ * flatMapDeep(users, { active: [false] });
+ * // => [false]
+ */
+declare function flatMapDeep(collection: object | null | undefined, iteratee: object): boolean[];
+
+export { flatMapDeep };
Index: node_modules/es-toolkit/dist/compat/array/flatMapDeep.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMapDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMapDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flatMapDepth = require('./flatMapDepth.js');
+
+function flatMapDeep(collection, iteratee) {
+    return flatMapDepth.flatMapDepth(collection, iteratee, Infinity);
+}
+
+exports.flatMapDeep = flatMapDeep;
Index: node_modules/es-toolkit/dist/compat/array/flatMapDeep.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMapDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMapDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { flatMapDepth } from './flatMapDepth.mjs';
+
+function flatMapDeep(collection, iteratee) {
+    return flatMapDepth(collection, iteratee, Infinity);
+}
+
+export { flatMapDeep };
Index: node_modules/es-toolkit/dist/compat/array/flatMapDepth.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMapDepth.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMapDepth.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+import { ListIterator } from '../_internal/ListIterator.mjs';
+import { ListOfRecursiveArraysOrValues } from '../_internal/ListOfRecursiveArraysOrValues.mjs';
+import { ObjectIterator } from '../_internal/ObjectIterator.mjs';
+
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @template T
+ * @param {Record<string, ListOfRecursiveArraysOrValues<T> | T> | Record<number, ListOfRecursiveArraysOrValues<T> | T> | null | undefined} collection - The collection to iterate over.
+ * @returns {T[]} Returns the new flattened array.
+ *
+ * @example
+ * const obj = { a: [[1, 2]], b: [[[3]]] };
+ * flatMapDepth(obj);
+ * // => [1, 2, [3]]
+ */
+declare function flatMapDepth<T>(collection: Record<string, ListOfRecursiveArraysOrValues<T> | T> | Record<number, ListOfRecursiveArraysOrValues<T> | T> | null | undefined): T[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @template T, R
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ListIterator<T, RecursiveArray<R> | R>} iteratee - The function invoked per iteration.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {R[]} Returns the new flattened array.
+ *
+ * @example
+ * function duplicate(n) {
+ *   return [[n, n]];
+ * }
+ *
+ * flatMapDepth([1, 2], duplicate, 2);
+ * // => [1, 1, 2, 2]
+ */
+declare function flatMapDepth<T, R>(collection: ArrayLike<T> | null | undefined, iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<R> | R>, depth?: number): R[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @template T, R
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, RecursiveArray<R> | R>} iteratee - The function invoked per iteration.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {R[]} Returns the new flattened array.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * flatMapDepth(obj, (value, key) => [[key, value]], 2);
+ * // => ['a', 1, 'b', 2]
+ */
+declare function flatMapDepth<T extends object, R>(collection: T | null | undefined, iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<R> | R>, depth?: number): R[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {string} iteratee - The property name to use as iteratee.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {any[]} Returns the new flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', hobbies: [['hiking'], ['coding']] },
+ *   { user: 'fred', hobbies: [['reading']] }
+ * ];
+ * flatMapDepth(users, 'hobbies', 2);
+ * // => ['hiking', 'coding', 'reading']
+ */
+declare function flatMapDepth(collection: object | null | undefined, iteratee: string, depth?: number): any[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {object} iteratee - The object properties to match.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {boolean[]} Returns the new flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', active: [[true], [false]] },
+ *   { user: 'fred', active: [[false]] }
+ * ];
+ * flatMapDepth(users, { active: [[false]] });
+ * // => [false]
+ */
+declare function flatMapDepth(collection: object | null | undefined, iteratee: object, depth?: number): boolean[];
+
+export { flatMapDepth };
Index: node_modules/es-toolkit/dist/compat/array/flatMapDepth.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMapDepth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMapDepth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+import { ListIterator } from '../_internal/ListIterator.js';
+import { ListOfRecursiveArraysOrValues } from '../_internal/ListOfRecursiveArraysOrValues.js';
+import { ObjectIterator } from '../_internal/ObjectIterator.js';
+
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @template T
+ * @param {Record<string, ListOfRecursiveArraysOrValues<T> | T> | Record<number, ListOfRecursiveArraysOrValues<T> | T> | null | undefined} collection - The collection to iterate over.
+ * @returns {T[]} Returns the new flattened array.
+ *
+ * @example
+ * const obj = { a: [[1, 2]], b: [[[3]]] };
+ * flatMapDepth(obj);
+ * // => [1, 2, [3]]
+ */
+declare function flatMapDepth<T>(collection: Record<string, ListOfRecursiveArraysOrValues<T> | T> | Record<number, ListOfRecursiveArraysOrValues<T> | T> | null | undefined): T[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @template T, R
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ListIterator<T, RecursiveArray<R> | R>} iteratee - The function invoked per iteration.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {R[]} Returns the new flattened array.
+ *
+ * @example
+ * function duplicate(n) {
+ *   return [[n, n]];
+ * }
+ *
+ * flatMapDepth([1, 2], duplicate, 2);
+ * // => [1, 1, 2, 2]
+ */
+declare function flatMapDepth<T, R>(collection: ArrayLike<T> | null | undefined, iteratee: ListIterator<T, ListOfRecursiveArraysOrValues<R> | R>, depth?: number): R[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @template T, R
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, RecursiveArray<R> | R>} iteratee - The function invoked per iteration.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {R[]} Returns the new flattened array.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * flatMapDepth(obj, (value, key) => [[key, value]], 2);
+ * // => ['a', 1, 'b', 2]
+ */
+declare function flatMapDepth<T extends object, R>(collection: T | null | undefined, iteratee: ObjectIterator<T, ListOfRecursiveArraysOrValues<R> | R>, depth?: number): R[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {string} iteratee - The property name to use as iteratee.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {any[]} Returns the new flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', hobbies: [['hiking'], ['coding']] },
+ *   { user: 'fred', hobbies: [['reading']] }
+ * ];
+ * flatMapDepth(users, 'hobbies', 2);
+ * // => ['hiking', 'coding', 'reading']
+ */
+declare function flatMapDepth(collection: object | null | undefined, iteratee: string, depth?: number): any[];
+/**
+ * Creates a flattened array of values by running each element through iteratee and flattening the mapped results up to depth times.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {object} iteratee - The object properties to match.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {boolean[]} Returns the new flattened array.
+ *
+ * @example
+ * const users = [
+ *   { user: 'barney', active: [[true], [false]] },
+ *   { user: 'fred', active: [[false]] }
+ * ];
+ * flatMapDepth(users, { active: [[false]] });
+ * // => [false]
+ */
+declare function flatMapDepth(collection: object | null | undefined, iteratee: object, depth?: number): boolean[];
+
+export { flatMapDepth };
Index: node_modules/es-toolkit/dist/compat/array/flatMapDepth.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMapDepth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMapDepth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flatten = require('./flatten.js');
+const map = require('./map.js');
+const identity = require('../../function/identity.js');
+const iteratee = require('../util/iteratee.js');
+
+function flatMapDepth(collection, iteratee$1 = identity.identity, depth = 1) {
+    if (collection == null) {
+        return [];
+    }
+    const iterateeFn = iteratee.iteratee(iteratee$1);
+    const mapped = map.map(collection, iterateeFn);
+    return flatten.flatten(mapped, depth);
+}
+
+exports.flatMapDepth = flatMapDepth;
Index: node_modules/es-toolkit/dist/compat/array/flatMapDepth.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatMapDepth.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatMapDepth.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { flatten } from './flatten.mjs';
+import { map } from './map.mjs';
+import { identity } from '../../function/identity.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function flatMapDepth(collection, iteratee$1 = identity, depth = 1) {
+    if (collection == null) {
+        return [];
+    }
+    const iterateeFn = iteratee(iteratee$1);
+    const mapped = map(collection, iterateeFn);
+    return flatten(mapped, depth);
+}
+
+export { flatMapDepth };
Index: node_modules/es-toolkit/dist/compat/array/flatten.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatten.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatten.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Flattens array up to depth times.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} value - The array to flatten.
+ * @param {number} depth - The maximum recursion depth.
+ * @returns {any[]} Returns the new flattened array.
+ *
+ * @example
+ * flatten([1, [2, [3, [4]], 5]], 2);
+ * // => [1, 2, 3, [4], 5]
+ */
+declare function flatten<T>(value: ArrayLike<T | readonly T[]> | null | undefined): T[];
+
+export { flatten };
Index: node_modules/es-toolkit/dist/compat/array/flatten.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatten.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatten.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Flattens array up to depth times.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} value - The array to flatten.
+ * @param {number} depth - The maximum recursion depth.
+ * @returns {any[]} Returns the new flattened array.
+ *
+ * @example
+ * flatten([1, [2, [3, [4]], 5]], 2);
+ * // => [1, 2, 3, [4], 5]
+ */
+declare function flatten<T>(value: ArrayLike<T | readonly T[]> | null | undefined): T[];
+
+export { flatten };
Index: node_modules/es-toolkit/dist/compat/array/flatten.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatten.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatten.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function flatten(value, depth = 1) {
+    const result = [];
+    const flooredDepth = Math.floor(depth);
+    if (!isArrayLike.isArrayLike(value)) {
+        return result;
+    }
+    const recursive = (arr, currentDepth) => {
+        for (let i = 0; i < arr.length; i++) {
+            const item = arr[i];
+            if (currentDepth < flooredDepth &&
+                (Array.isArray(item) ||
+                    Boolean(item?.[Symbol.isConcatSpreadable]) ||
+                    (item !== null && typeof item === 'object' && Object.prototype.toString.call(item) === '[object Arguments]'))) {
+                if (Array.isArray(item)) {
+                    recursive(item, currentDepth + 1);
+                }
+                else {
+                    recursive(Array.from(item), currentDepth + 1);
+                }
+            }
+            else {
+                result.push(item);
+            }
+        }
+    };
+    recursive(Array.from(value), 0);
+    return result;
+}
+
+exports.flatten = flatten;
Index: node_modules/es-toolkit/dist/compat/array/flatten.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flatten.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flatten.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function flatten(value, depth = 1) {
+    const result = [];
+    const flooredDepth = Math.floor(depth);
+    if (!isArrayLike(value)) {
+        return result;
+    }
+    const recursive = (arr, currentDepth) => {
+        for (let i = 0; i < arr.length; i++) {
+            const item = arr[i];
+            if (currentDepth < flooredDepth &&
+                (Array.isArray(item) ||
+                    Boolean(item?.[Symbol.isConcatSpreadable]) ||
+                    (item !== null && typeof item === 'object' && Object.prototype.toString.call(item) === '[object Arguments]'))) {
+                if (Array.isArray(item)) {
+                    recursive(item, currentDepth + 1);
+                }
+                else {
+                    recursive(Array.from(item), currentDepth + 1);
+                }
+            }
+            else {
+                result.push(item);
+            }
+        }
+    };
+    recursive(Array.from(value), 0);
+    return result;
+}
+
+export { flatten };
Index: node_modules/es-toolkit/dist/compat/array/flattenDeep.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flattenDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flattenDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { ListOfRecursiveArraysOrValues } from '../_internal/ListOfRecursiveArraysOrValues.mjs';
+
+/**
+ * Recursively flattens array.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to flatten.
+ * @returns {Array<ExtractNestedArrayType<T>>} Returns the new flattened array.
+ *
+ * @example
+ * flattenDeep([1, [2, [3, [4]], 5]]);
+ * // => [1, 2, 3, 4, 5]
+ */
+declare function flattenDeep<T>(value: ListOfRecursiveArraysOrValues<T> | null | undefined): Array<T extends string ? T : T extends ArrayLike<any> ? never : T>;
+
+export { flattenDeep };
Index: node_modules/es-toolkit/dist/compat/array/flattenDeep.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flattenDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flattenDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { ListOfRecursiveArraysOrValues } from '../_internal/ListOfRecursiveArraysOrValues.js';
+
+/**
+ * Recursively flattens array.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to flatten.
+ * @returns {Array<ExtractNestedArrayType<T>>} Returns the new flattened array.
+ *
+ * @example
+ * flattenDeep([1, [2, [3, [4]], 5]]);
+ * // => [1, 2, 3, 4, 5]
+ */
+declare function flattenDeep<T>(value: ListOfRecursiveArraysOrValues<T> | null | undefined): Array<T extends string ? T : T extends ArrayLike<any> ? never : T>;
+
+export { flattenDeep };
Index: node_modules/es-toolkit/dist/compat/array/flattenDeep.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flattenDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flattenDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flattenDepth = require('./flattenDepth.js');
+
+function flattenDeep(value) {
+    return flattenDepth.flattenDepth(value, Infinity);
+}
+
+exports.flattenDeep = flattenDeep;
Index: node_modules/es-toolkit/dist/compat/array/flattenDeep.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flattenDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flattenDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { flattenDepth } from './flattenDepth.mjs';
+
+function flattenDeep(value) {
+    return flattenDepth(value, Infinity);
+}
+
+export { flattenDeep };
Index: node_modules/es-toolkit/dist/compat/array/flattenDepth.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flattenDepth.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flattenDepth.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { ListOfRecursiveArraysOrValues } from '../_internal/ListOfRecursiveArraysOrValues.mjs';
+
+/**
+ * Recursively flattens array up to depth times.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to flatten.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {T[]} Returns the new flattened array.
+ *
+ * @example
+ * const array = [1, [2, [3, [4]], 5]];
+ *
+ * flattenDepth(array, 1);
+ * // => [1, 2, [3, [4]], 5]
+ *
+ * flattenDepth(array, 2);
+ * // => [1, 2, 3, [4], 5]
+ */
+declare function flattenDepth<T>(array: ListOfRecursiveArraysOrValues<T> | null | undefined, depth?: number): T[];
+
+export { flattenDepth };
Index: node_modules/es-toolkit/dist/compat/array/flattenDepth.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flattenDepth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flattenDepth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { ListOfRecursiveArraysOrValues } from '../_internal/ListOfRecursiveArraysOrValues.js';
+
+/**
+ * Recursively flattens array up to depth times.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to flatten.
+ * @param {number} [depth=1] - The maximum recursion depth.
+ * @returns {T[]} Returns the new flattened array.
+ *
+ * @example
+ * const array = [1, [2, [3, [4]], 5]];
+ *
+ * flattenDepth(array, 1);
+ * // => [1, 2, [3, [4]], 5]
+ *
+ * flattenDepth(array, 2);
+ * // => [1, 2, 3, [4], 5]
+ */
+declare function flattenDepth<T>(array: ListOfRecursiveArraysOrValues<T> | null | undefined, depth?: number): T[];
+
+export { flattenDepth };
Index: node_modules/es-toolkit/dist/compat/array/flattenDepth.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flattenDepth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flattenDepth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flatten = require('./flatten.js');
+
+function flattenDepth(array, depth = 1) {
+    return flatten.flatten(array, depth);
+}
+
+exports.flattenDepth = flattenDepth;
Index: node_modules/es-toolkit/dist/compat/array/flattenDepth.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/flattenDepth.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/flattenDepth.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { flatten } from './flatten.mjs';
+
+function flattenDepth(array, depth = 1) {
+    return flatten(array, depth);
+}
+
+export { flattenDepth };
Index: node_modules/es-toolkit/dist/compat/array/forEach.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/forEach.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/forEach.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+import { ArrayIterator } from '../_internal/ArrayIterator.mjs';
+import { ListIterator } from '../_internal/ListIterator.mjs';
+import { ObjectIterator } from '../_internal/ObjectIterator.mjs';
+import { StringIterator } from '../_internal/StringIterator.mjs';
+
+/**
+ * Iterates over elements of array and invokes iteratee for each element.
+ *
+ * @template T
+ * @param {T[]} collection - The array to iterate over.
+ * @param {ArrayIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T[]} Returns array.
+ *
+ * @example
+ * forEach([1, 2], value => console.log(value));
+ * // => Logs `1` then `2`.
+ */
+declare function forEach<T>(collection: T[], iteratee?: ArrayIterator<T, any>): T[];
+/**
+ * Iterates over characters of string and invokes iteratee for each character.
+ *
+ * @param {string} collection - The string to iterate over.
+ * @param {StringIterator<any>} [iteratee] - The function invoked per iteration.
+ * @returns {string} Returns string.
+ *
+ * @example
+ * forEach('abc', char => console.log(char));
+ * // => Logs 'a', 'b', then 'c'.
+ */
+declare function forEach(collection: string, iteratee?: StringIterator<any>): string;
+/**
+ * Iterates over elements of collection and invokes iteratee for each element.
+ *
+ * @template T
+ * @param {ArrayLike<T>} collection - The collection to iterate over.
+ * @param {ListIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {ArrayLike<T>} Returns collection.
+ *
+ * @example
+ * forEach({ 0: 'a', 1: 'b', length: 2 }, value => console.log(value));
+ * // => Logs 'a' then 'b'.
+ */
+declare function forEach<T>(collection: ArrayLike<T>, iteratee?: ListIterator<T, any>): ArrayLike<T>;
+/**
+ * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.
+ *
+ * @template T
+ * @param {T} collection - The object to iterate over.
+ * @param {ObjectIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T} Returns object.
+ *
+ * @example
+ * forEach({ a: 1, b: 2 }, (value, key) => console.log(key));
+ * // => Logs 'a' then 'b'.
+ */
+declare function forEach<T extends object>(collection: T, iteratee?: ObjectIterator<T, any>): T;
+/**
+ * Iterates over elements of array and invokes iteratee for each element.
+ *
+ * @template T, U
+ * @param {U & (T[] | null | undefined)} collection - The array to iterate over.
+ * @param {ArrayIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {U} Returns the array.
+ *
+ * @example
+ * forEach([1, 2], value => console.log(value));
+ * // => Logs `1` then `2`.
+ */
+declare function forEach<T, U extends T[] | null | undefined>(collection: U & (T[] | null | undefined), iteratee?: ArrayIterator<T, any>): U;
+/**
+ * Iterates over characters of string and invokes iteratee for each character.
+ *
+ * @template T
+ * @param {T} collection - The string to iterate over.
+ * @param {StringIterator<any>} [iteratee] - The function invoked per iteration.
+ * @returns {T} Returns the string.
+ *
+ * @example
+ * forEach('abc', char => console.log(char));
+ * // => Logs 'a', 'b', then 'c'.
+ */
+declare function forEach<T extends string | null | undefined>(collection: T, iteratee?: StringIterator<any>): T;
+/**
+ * Iterates over elements of collection and invokes iteratee for each element.
+ *
+ * @template T, L
+ * @param {L & (ArrayLike<T> | null | undefined)} collection - The collection to iterate over.
+ * @param {ListIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {L} Returns the collection.
+ *
+ * @example
+ * forEach({ 0: 'a', 1: 'b', length: 2 }, value => console.log(value));
+ * // => Logs 'a' then 'b'.
+ */
+declare function forEach<T, L extends ArrayLike<T> | null | undefined>(collection: L & (ArrayLike<T> | null | undefined), iteratee?: ListIterator<T, any>): L;
+/**
+ * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T | null | undefined} Returns the object.
+ *
+ * @example
+ * forEach({ a: 1, b: 2 }, (value, key) => console.log(key));
+ * // => Logs 'a' then 'b'.
+ */
+declare function forEach<T extends object>(collection: T | null | undefined, iteratee?: ObjectIterator<T, any>): T | null | undefined;
+
+export { forEach };
Index: node_modules/es-toolkit/dist/compat/array/forEach.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/forEach.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/forEach.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+import { ArrayIterator } from '../_internal/ArrayIterator.js';
+import { ListIterator } from '../_internal/ListIterator.js';
+import { ObjectIterator } from '../_internal/ObjectIterator.js';
+import { StringIterator } from '../_internal/StringIterator.js';
+
+/**
+ * Iterates over elements of array and invokes iteratee for each element.
+ *
+ * @template T
+ * @param {T[]} collection - The array to iterate over.
+ * @param {ArrayIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T[]} Returns array.
+ *
+ * @example
+ * forEach([1, 2], value => console.log(value));
+ * // => Logs `1` then `2`.
+ */
+declare function forEach<T>(collection: T[], iteratee?: ArrayIterator<T, any>): T[];
+/**
+ * Iterates over characters of string and invokes iteratee for each character.
+ *
+ * @param {string} collection - The string to iterate over.
+ * @param {StringIterator<any>} [iteratee] - The function invoked per iteration.
+ * @returns {string} Returns string.
+ *
+ * @example
+ * forEach('abc', char => console.log(char));
+ * // => Logs 'a', 'b', then 'c'.
+ */
+declare function forEach(collection: string, iteratee?: StringIterator<any>): string;
+/**
+ * Iterates over elements of collection and invokes iteratee for each element.
+ *
+ * @template T
+ * @param {ArrayLike<T>} collection - The collection to iterate over.
+ * @param {ListIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {ArrayLike<T>} Returns collection.
+ *
+ * @example
+ * forEach({ 0: 'a', 1: 'b', length: 2 }, value => console.log(value));
+ * // => Logs 'a' then 'b'.
+ */
+declare function forEach<T>(collection: ArrayLike<T>, iteratee?: ListIterator<T, any>): ArrayLike<T>;
+/**
+ * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.
+ *
+ * @template T
+ * @param {T} collection - The object to iterate over.
+ * @param {ObjectIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T} Returns object.
+ *
+ * @example
+ * forEach({ a: 1, b: 2 }, (value, key) => console.log(key));
+ * // => Logs 'a' then 'b'.
+ */
+declare function forEach<T extends object>(collection: T, iteratee?: ObjectIterator<T, any>): T;
+/**
+ * Iterates over elements of array and invokes iteratee for each element.
+ *
+ * @template T, U
+ * @param {U & (T[] | null | undefined)} collection - The array to iterate over.
+ * @param {ArrayIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {U} Returns the array.
+ *
+ * @example
+ * forEach([1, 2], value => console.log(value));
+ * // => Logs `1` then `2`.
+ */
+declare function forEach<T, U extends T[] | null | undefined>(collection: U & (T[] | null | undefined), iteratee?: ArrayIterator<T, any>): U;
+/**
+ * Iterates over characters of string and invokes iteratee for each character.
+ *
+ * @template T
+ * @param {T} collection - The string to iterate over.
+ * @param {StringIterator<any>} [iteratee] - The function invoked per iteration.
+ * @returns {T} Returns the string.
+ *
+ * @example
+ * forEach('abc', char => console.log(char));
+ * // => Logs 'a', 'b', then 'c'.
+ */
+declare function forEach<T extends string | null | undefined>(collection: T, iteratee?: StringIterator<any>): T;
+/**
+ * Iterates over elements of collection and invokes iteratee for each element.
+ *
+ * @template T, L
+ * @param {L & (ArrayLike<T> | null | undefined)} collection - The collection to iterate over.
+ * @param {ListIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {L} Returns the collection.
+ *
+ * @example
+ * forEach({ 0: 'a', 1: 'b', length: 2 }, value => console.log(value));
+ * // => Logs 'a' then 'b'.
+ */
+declare function forEach<T, L extends ArrayLike<T> | null | undefined>(collection: L & (ArrayLike<T> | null | undefined), iteratee?: ListIterator<T, any>): L;
+/**
+ * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T | null | undefined} Returns the object.
+ *
+ * @example
+ * forEach({ a: 1, b: 2 }, (value, key) => console.log(key));
+ * // => Logs 'a' then 'b'.
+ */
+declare function forEach<T extends object>(collection: T | null | undefined, iteratee?: ObjectIterator<T, any>): T | null | undefined;
+
+export { forEach };
Index: node_modules/es-toolkit/dist/compat/array/forEach.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/forEach.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/forEach.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const range = require('../../math/range.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function forEach(collection, callback = identity.identity) {
+    if (!collection) {
+        return collection;
+    }
+    const keys = isArrayLike.isArrayLike(collection) || Array.isArray(collection) ? range.range(0, collection.length) : Object.keys(collection);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = collection[key];
+        const result = callback(value, key, collection);
+        if (result === false) {
+            break;
+        }
+    }
+    return collection;
+}
+
+exports.forEach = forEach;
Index: node_modules/es-toolkit/dist/compat/array/forEach.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/forEach.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/forEach.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { identity } from '../../function/identity.mjs';
+import { range } from '../../math/range.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function forEach(collection, callback = identity) {
+    if (!collection) {
+        return collection;
+    }
+    const keys = isArrayLike(collection) || Array.isArray(collection) ? range(0, collection.length) : Object.keys(collection);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = collection[key];
+        const result = callback(value, key, collection);
+        if (result === false) {
+            break;
+        }
+    }
+    return collection;
+}
+
+export { forEach };
Index: node_modules/es-toolkit/dist/compat/array/forEachRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/forEachRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/forEachRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+import { ArrayIterator } from '../_internal/ArrayIterator.mjs';
+import { ListIterator } from '../_internal/ListIterator.mjs';
+import { ObjectIterator } from '../_internal/ObjectIterator.mjs';
+import { StringIterator } from '../_internal/StringIterator.mjs';
+
+/**
+ * Iterates over elements of array from right to left and invokes iteratee for each element.
+ *
+ * @template T
+ * @param {T[]} collection - The array to iterate over.
+ * @param {ArrayIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T[]} Returns array.
+ *
+ * @example
+ * forEachRight([1, 2], value => console.log(value));
+ * // => Logs `2` then `1`.
+ */
+declare function forEachRight<T>(collection: T[], iteratee?: ArrayIterator<T, any>): T[];
+/**
+ * Iterates over characters of string from right to left and invokes iteratee for each character.
+ *
+ * @param {string} collection - The string to iterate over.
+ * @param {StringIterator<any>} [iteratee] - The function invoked per iteration.
+ * @returns {string} Returns string.
+ *
+ * @example
+ * forEachRight('abc', char => console.log(char));
+ * // => Logs 'c', 'b', then 'a'.
+ */
+declare function forEachRight(collection: string, iteratee?: StringIterator<any>): string;
+/**
+ * Iterates over elements of collection from right to left and invokes iteratee for each element.
+ *
+ * @template T
+ * @param {ArrayLike<T>} collection - The collection to iterate over.
+ * @param {ListIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {ArrayLike<T>} Returns collection.
+ *
+ * @example
+ * forEachRight({ 0: 'a', 1: 'b', length: 2 }, value => console.log(value));
+ * // => Logs 'b' then 'a'.
+ */
+declare function forEachRight<T>(collection: ArrayLike<T>, iteratee?: ListIterator<T, any>): ArrayLike<T>;
+/**
+ * Iterates over own enumerable string keyed properties of an object from right to left and invokes iteratee for each property.
+ *
+ * @template T
+ * @param {T} collection - The object to iterate over.
+ * @param {ObjectIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T} Returns object.
+ *
+ * @example
+ * forEachRight({ a: 1, b: 2 }, (value, key) => console.log(key));
+ * // => Logs 'b' then 'a'.
+ */
+declare function forEachRight<T extends object>(collection: T, iteratee?: ObjectIterator<T, any>): T;
+/**
+ * Iterates over elements of array from right to left and invokes iteratee for each element.
+ *
+ * @template T, U
+ * @param {U & (T[] | null | undefined)} collection - The array to iterate over.
+ * @param {ArrayIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {U} Returns the array.
+ *
+ * @example
+ * forEachRight([1, 2], value => console.log(value));
+ * // => Logs `2` then `1`.
+ */
+declare function forEachRight<T, U extends T[] | null | undefined>(collection: U & (T[] | null | undefined), iteratee?: ArrayIterator<T, any>): U;
+/**
+ * Iterates over characters of string from right to left and invokes iteratee for each character.
+ *
+ * @template T
+ * @param {T} collection - The string to iterate over.
+ * @param {StringIterator<any>} [iteratee] - The function invoked per iteration.
+ * @returns {T} Returns the string.
+ *
+ * @example
+ * forEachRight('abc', char => console.log(char));
+ * // => Logs 'c', 'b', then 'a'.
+ */
+declare function forEachRight<T extends string | null | undefined>(collection: T, iteratee?: StringIterator<any>): T;
+/**
+ * Iterates over elements of collection from right to left and invokes iteratee for each element.
+ *
+ * @template T, L
+ * @param {L & (ArrayLike<T> | null | undefined)} collection - The collection to iterate over.
+ * @param {ListIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {L} Returns the collection.
+ *
+ * @example
+ * forEachRight({ 0: 'a', 1: 'b', length: 2 }, value => console.log(value));
+ * // => Logs 'b' then 'a'.
+ */
+declare function forEachRight<T, L extends ArrayLike<T> | null | undefined>(collection: L & (ArrayLike<T> | null | undefined), iteratee?: ListIterator<T, any>): L;
+/**
+ * Iterates over own enumerable string keyed properties of an object from right to left and invokes iteratee for each property.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T | null | undefined} Returns the object.
+ *
+ * @example
+ * forEachRight({ a: 1, b: 2 }, (value, key) => console.log(key));
+ * // => Logs 'b' then 'a'.
+ */
+declare function forEachRight<T extends object>(collection: T | null | undefined, iteratee?: ObjectIterator<T, any>): T | null | undefined;
+
+export { forEachRight };
Index: node_modules/es-toolkit/dist/compat/array/forEachRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/forEachRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/forEachRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+import { ArrayIterator } from '../_internal/ArrayIterator.js';
+import { ListIterator } from '../_internal/ListIterator.js';
+import { ObjectIterator } from '../_internal/ObjectIterator.js';
+import { StringIterator } from '../_internal/StringIterator.js';
+
+/**
+ * Iterates over elements of array from right to left and invokes iteratee for each element.
+ *
+ * @template T
+ * @param {T[]} collection - The array to iterate over.
+ * @param {ArrayIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T[]} Returns array.
+ *
+ * @example
+ * forEachRight([1, 2], value => console.log(value));
+ * // => Logs `2` then `1`.
+ */
+declare function forEachRight<T>(collection: T[], iteratee?: ArrayIterator<T, any>): T[];
+/**
+ * Iterates over characters of string from right to left and invokes iteratee for each character.
+ *
+ * @param {string} collection - The string to iterate over.
+ * @param {StringIterator<any>} [iteratee] - The function invoked per iteration.
+ * @returns {string} Returns string.
+ *
+ * @example
+ * forEachRight('abc', char => console.log(char));
+ * // => Logs 'c', 'b', then 'a'.
+ */
+declare function forEachRight(collection: string, iteratee?: StringIterator<any>): string;
+/**
+ * Iterates over elements of collection from right to left and invokes iteratee for each element.
+ *
+ * @template T
+ * @param {ArrayLike<T>} collection - The collection to iterate over.
+ * @param {ListIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {ArrayLike<T>} Returns collection.
+ *
+ * @example
+ * forEachRight({ 0: 'a', 1: 'b', length: 2 }, value => console.log(value));
+ * // => Logs 'b' then 'a'.
+ */
+declare function forEachRight<T>(collection: ArrayLike<T>, iteratee?: ListIterator<T, any>): ArrayLike<T>;
+/**
+ * Iterates over own enumerable string keyed properties of an object from right to left and invokes iteratee for each property.
+ *
+ * @template T
+ * @param {T} collection - The object to iterate over.
+ * @param {ObjectIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T} Returns object.
+ *
+ * @example
+ * forEachRight({ a: 1, b: 2 }, (value, key) => console.log(key));
+ * // => Logs 'b' then 'a'.
+ */
+declare function forEachRight<T extends object>(collection: T, iteratee?: ObjectIterator<T, any>): T;
+/**
+ * Iterates over elements of array from right to left and invokes iteratee for each element.
+ *
+ * @template T, U
+ * @param {U & (T[] | null | undefined)} collection - The array to iterate over.
+ * @param {ArrayIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {U} Returns the array.
+ *
+ * @example
+ * forEachRight([1, 2], value => console.log(value));
+ * // => Logs `2` then `1`.
+ */
+declare function forEachRight<T, U extends T[] | null | undefined>(collection: U & (T[] | null | undefined), iteratee?: ArrayIterator<T, any>): U;
+/**
+ * Iterates over characters of string from right to left and invokes iteratee for each character.
+ *
+ * @template T
+ * @param {T} collection - The string to iterate over.
+ * @param {StringIterator<any>} [iteratee] - The function invoked per iteration.
+ * @returns {T} Returns the string.
+ *
+ * @example
+ * forEachRight('abc', char => console.log(char));
+ * // => Logs 'c', 'b', then 'a'.
+ */
+declare function forEachRight<T extends string | null | undefined>(collection: T, iteratee?: StringIterator<any>): T;
+/**
+ * Iterates over elements of collection from right to left and invokes iteratee for each element.
+ *
+ * @template T, L
+ * @param {L & (ArrayLike<T> | null | undefined)} collection - The collection to iterate over.
+ * @param {ListIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {L} Returns the collection.
+ *
+ * @example
+ * forEachRight({ 0: 'a', 1: 'b', length: 2 }, value => console.log(value));
+ * // => Logs 'b' then 'a'.
+ */
+declare function forEachRight<T, L extends ArrayLike<T> | null | undefined>(collection: L & (ArrayLike<T> | null | undefined), iteratee?: ListIterator<T, any>): L;
+/**
+ * Iterates over own enumerable string keyed properties of an object from right to left and invokes iteratee for each property.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterator<T, any>} [iteratee] - The function invoked per iteration.
+ * @returns {T | null | undefined} Returns the object.
+ *
+ * @example
+ * forEachRight({ a: 1, b: 2 }, (value, key) => console.log(key));
+ * // => Logs 'b' then 'a'.
+ */
+declare function forEachRight<T extends object>(collection: T | null | undefined, iteratee?: ObjectIterator<T, any>): T | null | undefined;
+
+export { forEachRight };
Index: node_modules/es-toolkit/dist/compat/array/forEachRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/forEachRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/forEachRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const range = require('../../math/range.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function forEachRight(collection, callback = identity.identity) {
+    if (!collection) {
+        return collection;
+    }
+    const keys = isArrayLike.isArrayLike(collection) ? range.range(0, collection.length) : Object.keys(collection);
+    for (let i = keys.length - 1; i >= 0; i--) {
+        const key = keys[i];
+        const value = collection[key];
+        const result = callback(value, key, collection);
+        if (result === false) {
+            break;
+        }
+    }
+    return collection;
+}
+
+exports.forEachRight = forEachRight;
Index: node_modules/es-toolkit/dist/compat/array/forEachRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/forEachRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/forEachRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { identity } from '../../function/identity.mjs';
+import { range } from '../../math/range.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function forEachRight(collection, callback = identity) {
+    if (!collection) {
+        return collection;
+    }
+    const keys = isArrayLike(collection) ? range(0, collection.length) : Object.keys(collection);
+    for (let i = keys.length - 1; i >= 0; i--) {
+        const key = keys[i];
+        const value = collection[key];
+        const result = callback(value, key, collection);
+        if (result === false) {
+            break;
+        }
+    }
+    return collection;
+}
+
+export { forEachRight };
Index: node_modules/es-toolkit/dist/compat/array/groupBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/groupBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/groupBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection through iteratee.
+ * The order of grouped values is determined by the order they occur in collection.
+ *
+ * @template T - The type of elements in the array-like collection
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over
+ * @param {ValueIteratee<T>} [iteratee=identity] - The iteratee to transform keys
+ * @returns {Record<string, T[]>} Returns the composed aggregate object
+ *
+ * @example
+ * groupBy([6.1, 4.2, 6.3], Math.floor)
+ * // => { '4': [4.2], '6': [6.1, 6.3] }
+ *
+ * groupBy(['one', 'two', 'three'], 'length')
+ * // => { '3': ['one', 'two'], '5': ['three'] }
+ */
+declare function groupBy<T>(collection: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): Record<string, T[]>;
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection through iteratee.
+ * The order of grouped values is determined by the order they occur in collection.
+ *
+ * @template T - The type of the object
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {ValueIteratee<T[keyof T]>} [iteratee=identity] - The iteratee to transform keys
+ * @returns {Record<string, Array<T[keyof T]>>} Returns the composed aggregate object
+ *
+ * @example
+ * groupBy({ a: 6.1, b: 4.2, c: 6.3 }, Math.floor)
+ * // => { '4': [4.2], '6': [6.1, 6.3] }
+ */
+declare function groupBy<T extends object>(collection: T | null | undefined, iteratee?: ValueIteratee<T[keyof T]>): Record<string, Array<T[keyof T]>>;
+
+export { groupBy };
Index: node_modules/es-toolkit/dist/compat/array/groupBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/groupBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/groupBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection through iteratee.
+ * The order of grouped values is determined by the order they occur in collection.
+ *
+ * @template T - The type of elements in the array-like collection
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over
+ * @param {ValueIteratee<T>} [iteratee=identity] - The iteratee to transform keys
+ * @returns {Record<string, T[]>} Returns the composed aggregate object
+ *
+ * @example
+ * groupBy([6.1, 4.2, 6.3], Math.floor)
+ * // => { '4': [4.2], '6': [6.1, 6.3] }
+ *
+ * groupBy(['one', 'two', 'three'], 'length')
+ * // => { '3': ['one', 'two'], '5': ['three'] }
+ */
+declare function groupBy<T>(collection: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): Record<string, T[]>;
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection through iteratee.
+ * The order of grouped values is determined by the order they occur in collection.
+ *
+ * @template T - The type of the object
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {ValueIteratee<T[keyof T]>} [iteratee=identity] - The iteratee to transform keys
+ * @returns {Record<string, Array<T[keyof T]>>} Returns the composed aggregate object
+ *
+ * @example
+ * groupBy({ a: 6.1, b: 4.2, c: 6.3 }, Math.floor)
+ * // => { '4': [4.2], '6': [6.1, 6.3] }
+ */
+declare function groupBy<T extends object>(collection: T | null | undefined, iteratee?: ValueIteratee<T[keyof T]>): Record<string, Array<T[keyof T]>>;
+
+export { groupBy };
Index: node_modules/es-toolkit/dist/compat/array/groupBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/groupBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/groupBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const groupBy$1 = require('../../array/groupBy.js');
+const identity = require('../../function/identity.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const iteratee = require('../util/iteratee.js');
+
+function groupBy(source, _getKeyFromItem) {
+    if (source == null) {
+        return {};
+    }
+    const items = isArrayLike.isArrayLike(source) ? Array.from(source) : Object.values(source);
+    const getKeyFromItem = iteratee.iteratee(_getKeyFromItem ?? identity.identity);
+    return groupBy$1.groupBy(items, getKeyFromItem);
+}
+
+exports.groupBy = groupBy;
Index: node_modules/es-toolkit/dist/compat/array/groupBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/groupBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/groupBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { groupBy as groupBy$1 } from '../../array/groupBy.mjs';
+import { identity } from '../../function/identity.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function groupBy(source, _getKeyFromItem) {
+    if (source == null) {
+        return {};
+    }
+    const items = isArrayLike(source) ? Array.from(source) : Object.values(source);
+    const getKeyFromItem = iteratee(_getKeyFromItem ?? identity);
+    return groupBy$1(items, getKeyFromItem);
+}
+
+export { groupBy };
Index: node_modules/es-toolkit/dist/compat/array/head.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/head.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/head.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+/**
+ * Returns the first element of an array or `undefined` if the array is empty.
+ *
+ * @template T - The type of elements in the array.
+ * @param {readonly [T, ...unknown[]]} array - A non-empty tuple with at least one element.
+ * @returns {T} The first element of the array.
+ *
+ * @example
+ * const arr = [1, 2, 3] as const;
+ * const first = head(arr);
+ * // first will be 1
+ */
+declare function head<T>(array: readonly [T, ...unknown[]]): T;
+/**
+ * Returns the first element of an array or `undefined` if the array is empty.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} array - The array from which to get the first element.
+ * @returns {T | undefined} The first element of the array, or `undefined` if the array is empty/null/undefined.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const first = head(arr);
+ * // first will be 1
+ *
+ * const emptyArr: number[] = [];
+ * const noElement = head(emptyArr);
+ * // noElement will be undefined
+ */
+declare function head<T>(array: ArrayLike<T> | null | undefined): T | undefined;
+
+export { head };
Index: node_modules/es-toolkit/dist/compat/array/head.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/head.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/head.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+/**
+ * Returns the first element of an array or `undefined` if the array is empty.
+ *
+ * @template T - The type of elements in the array.
+ * @param {readonly [T, ...unknown[]]} array - A non-empty tuple with at least one element.
+ * @returns {T} The first element of the array.
+ *
+ * @example
+ * const arr = [1, 2, 3] as const;
+ * const first = head(arr);
+ * // first will be 1
+ */
+declare function head<T>(array: readonly [T, ...unknown[]]): T;
+/**
+ * Returns the first element of an array or `undefined` if the array is empty.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} array - The array from which to get the first element.
+ * @returns {T | undefined} The first element of the array, or `undefined` if the array is empty/null/undefined.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const first = head(arr);
+ * // first will be 1
+ *
+ * const emptyArr: number[] = [];
+ * const noElement = head(emptyArr);
+ * // noElement will be undefined
+ */
+declare function head<T>(array: ArrayLike<T> | null | undefined): T | undefined;
+
+export { head };
Index: node_modules/es-toolkit/dist/compat/array/head.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/head.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/head.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const head$1 = require('../../array/head.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function head(arr) {
+    if (!isArrayLike.isArrayLike(arr)) {
+        return undefined;
+    }
+    return head$1.head(toArray.toArray(arr));
+}
+
+exports.head = head;
Index: node_modules/es-toolkit/dist/compat/array/head.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/head.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/head.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { head as head$1 } from '../../array/head.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function head(arr) {
+    if (!isArrayLike(arr)) {
+        return undefined;
+    }
+    return head$1(toArray(arr));
+}
+
+export { head };
Index: node_modules/es-toolkit/dist/compat/array/includes.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/includes.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/includes.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Checks if a specified value exists within a given array-like collection.
+ *
+ * The comparison uses SameValueZero to check for inclusion.
+ *
+ * @template T The type of elements in the collection
+ * @param collection The array-like collection to search in
+ * @param target The value to search for in the collection
+ * @param [fromIndex=0] The index to start searching from. If negative, it is treated as an offset from the end
+ * @returns `true` if the value is found in the collection, `false` otherwise
+ *
+ * @example
+ * includes([1, 2, 3], 2); // true
+ * includes([1, 2, 3], 4); // false
+ * includes('hello', 'e'); // true
+ * includes(null, 1); // false
+ * includes([1, 2, 3], 2, 2); // false
+ * includes([1, 2, 3], 2, -2); // true
+ */
+declare function includes<T>(collection: Record<string, T> | Record<number, T> | null | undefined, target: T, fromIndex?: number): boolean;
+
+export { includes };
Index: node_modules/es-toolkit/dist/compat/array/includes.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/includes.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/includes.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Checks if a specified value exists within a given array-like collection.
+ *
+ * The comparison uses SameValueZero to check for inclusion.
+ *
+ * @template T The type of elements in the collection
+ * @param collection The array-like collection to search in
+ * @param target The value to search for in the collection
+ * @param [fromIndex=0] The index to start searching from. If negative, it is treated as an offset from the end
+ * @returns `true` if the value is found in the collection, `false` otherwise
+ *
+ * @example
+ * includes([1, 2, 3], 2); // true
+ * includes([1, 2, 3], 4); // false
+ * includes('hello', 'e'); // true
+ * includes(null, 1); // false
+ * includes([1, 2, 3], 2, 2); // false
+ * includes([1, 2, 3], 2, -2); // true
+ */
+declare function includes<T>(collection: Record<string, T> | Record<number, T> | null | undefined, target: T, fromIndex?: number): boolean;
+
+export { includes };
Index: node_modules/es-toolkit/dist/compat/array/includes.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/includes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/includes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isString = require('../predicate/isString.js');
+const eq = require('../util/eq.js');
+const toInteger = require('../util/toInteger.js');
+
+function includes(source, target, fromIndex, guard) {
+    if (source == null) {
+        return false;
+    }
+    if (guard || !fromIndex) {
+        fromIndex = 0;
+    }
+    else {
+        fromIndex = toInteger.toInteger(fromIndex);
+    }
+    if (isString.isString(source)) {
+        if (fromIndex > source.length || target instanceof RegExp) {
+            return false;
+        }
+        if (fromIndex < 0) {
+            fromIndex = Math.max(0, source.length + fromIndex);
+        }
+        return source.includes(target, fromIndex);
+    }
+    if (Array.isArray(source)) {
+        return source.includes(target, fromIndex);
+    }
+    const keys = Object.keys(source);
+    if (fromIndex < 0) {
+        fromIndex = Math.max(0, keys.length + fromIndex);
+    }
+    for (let i = fromIndex; i < keys.length; i++) {
+        const value = Reflect.get(source, keys[i]);
+        if (eq.eq(value, target)) {
+            return true;
+        }
+    }
+    return false;
+}
+
+exports.includes = includes;
Index: node_modules/es-toolkit/dist/compat/array/includes.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/includes.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/includes.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { isString } from '../predicate/isString.mjs';
+import { eq } from '../util/eq.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+
+function includes(source, target, fromIndex, guard) {
+    if (source == null) {
+        return false;
+    }
+    if (guard || !fromIndex) {
+        fromIndex = 0;
+    }
+    else {
+        fromIndex = toInteger(fromIndex);
+    }
+    if (isString(source)) {
+        if (fromIndex > source.length || target instanceof RegExp) {
+            return false;
+        }
+        if (fromIndex < 0) {
+            fromIndex = Math.max(0, source.length + fromIndex);
+        }
+        return source.includes(target, fromIndex);
+    }
+    if (Array.isArray(source)) {
+        return source.includes(target, fromIndex);
+    }
+    const keys = Object.keys(source);
+    if (fromIndex < 0) {
+        fromIndex = Math.max(0, keys.length + fromIndex);
+    }
+    for (let i = fromIndex; i < keys.length; i++) {
+        const value = Reflect.get(source, keys[i]);
+        if (eq(value, target)) {
+            return true;
+        }
+    }
+    return false;
+}
+
+export { includes };
Index: node_modules/es-toolkit/dist/compat/array/indexOf.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/indexOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/indexOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Finds the index of the first occurrence of a value in an array.
+ *
+ * This method is similar to `Array.prototype.indexOf`, but it also finds `NaN` values.
+ * It uses strict equality (`===`) to compare elements.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} array - The array to search.
+ * @param {T} searchElement - The value to search for.
+ * @param {number} [fromIndex] - The index to start the search at.
+ * @returns {number} The index (zero-based) of the first occurrence of the value in the array, or `-1` if the value is not found.
+ *
+ * @example
+ * const array = [1, 2, 3, NaN];
+ * indexOf(array, 3); // => 2
+ * indexOf(array, NaN); // => 3
+ */
+declare function indexOf<T>(array: ArrayLike<T> | null | undefined, searchElement: T, fromIndex?: number): number;
+
+export { indexOf };
Index: node_modules/es-toolkit/dist/compat/array/indexOf.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/indexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/indexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Finds the index of the first occurrence of a value in an array.
+ *
+ * This method is similar to `Array.prototype.indexOf`, but it also finds `NaN` values.
+ * It uses strict equality (`===`) to compare elements.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} array - The array to search.
+ * @param {T} searchElement - The value to search for.
+ * @param {number} [fromIndex] - The index to start the search at.
+ * @returns {number} The index (zero-based) of the first occurrence of the value in the array, or `-1` if the value is not found.
+ *
+ * @example
+ * const array = [1, 2, 3, NaN];
+ * indexOf(array, 3); // => 2
+ * indexOf(array, NaN); // => 3
+ */
+declare function indexOf<T>(array: ArrayLike<T> | null | undefined, searchElement: T, fromIndex?: number): number;
+
+export { indexOf };
Index: node_modules/es-toolkit/dist/compat/array/indexOf.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/indexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/indexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function indexOf(array, searchElement, fromIndex) {
+    if (!isArrayLike.isArrayLike(array)) {
+        return -1;
+    }
+    if (Number.isNaN(searchElement)) {
+        fromIndex = fromIndex ?? 0;
+        if (fromIndex < 0) {
+            fromIndex = Math.max(0, array.length + fromIndex);
+        }
+        for (let i = fromIndex; i < array.length; i++) {
+            if (Number.isNaN(array[i])) {
+                return i;
+            }
+        }
+        return -1;
+    }
+    return Array.from(array).indexOf(searchElement, fromIndex);
+}
+
+exports.indexOf = indexOf;
Index: node_modules/es-toolkit/dist/compat/array/indexOf.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/indexOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/indexOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function indexOf(array, searchElement, fromIndex) {
+    if (!isArrayLike(array)) {
+        return -1;
+    }
+    if (Number.isNaN(searchElement)) {
+        fromIndex = fromIndex ?? 0;
+        if (fromIndex < 0) {
+            fromIndex = Math.max(0, array.length + fromIndex);
+        }
+        for (let i = fromIndex; i < array.length; i++) {
+            if (Number.isNaN(array[i])) {
+                return i;
+            }
+        }
+        return -1;
+    }
+    return Array.from(array).indexOf(searchElement, fromIndex);
+}
+
+export { indexOf };
Index: node_modules/es-toolkit/dist/compat/array/initial.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/initial.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/initial.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Returns a new array containing all elements except the last one from the input array.
+ * If the input array is empty or has only one element, the function returns an empty array.
+ *
+ * @template T The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr - The input array.
+ * @returns {T[]} A new array containing all but the last element of the input array.
+ *
+ * @example
+ * const arr = [1, 2, 3, 4];
+ * const result = initial(arr);
+ * // result will be [1, 2, 3]
+ */
+declare function initial<T>(arr: ArrayLike<T> | null | undefined): T[];
+
+export { initial };
Index: node_modules/es-toolkit/dist/compat/array/initial.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/initial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/initial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Returns a new array containing all elements except the last one from the input array.
+ * If the input array is empty or has only one element, the function returns an empty array.
+ *
+ * @template T The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr - The input array.
+ * @returns {T[]} A new array containing all but the last element of the input array.
+ *
+ * @example
+ * const arr = [1, 2, 3, 4];
+ * const result = initial(arr);
+ * // result will be [1, 2, 3]
+ */
+declare function initial<T>(arr: ArrayLike<T> | null | undefined): T[];
+
+export { initial };
Index: node_modules/es-toolkit/dist/compat/array/initial.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/initial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/initial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const initial$1 = require('../../array/initial.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function initial(arr) {
+    if (!isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return initial$1.initial(Array.from(arr));
+}
+
+exports.initial = initial;
Index: node_modules/es-toolkit/dist/compat/array/initial.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/initial.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/initial.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { initial as initial$1 } from '../../array/initial.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function initial(arr) {
+    if (!isArrayLike(arr)) {
+        return [];
+    }
+    return initial$1(Array.from(arr));
+}
+
+export { initial };
Index: node_modules/es-toolkit/dist/compat/array/intersection.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersection.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersection.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Returns the intersection of multiple arrays.
+ *
+ * This function takes multiple arrays and returns a new array containing the elements that are
+ * present in all provided arrays. It effectively filters out any elements that are not found
+ * in every array.
+ *
+ * @template T - The type of elements in the arrays.
+ * @param {...(ArrayLike<T> | null | undefined)} arrays - The arrays to compare.
+ * @returns {T[]} A new array containing the elements that are present in all arrays.
+ *
+ * @example
+ * const array1 = [1, 2, 3, 4, 5];
+ * const array2 = [3, 4, 5, 6, 7];
+ * const result = intersection(array1, array2);
+ * // result will be [3, 4, 5] since these elements are in both arrays.
+ */
+declare function intersection<T>(...arrays: Array<ArrayLike<T> | null | undefined>): T[];
+
+export { intersection };
Index: node_modules/es-toolkit/dist/compat/array/intersection.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersection.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersection.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Returns the intersection of multiple arrays.
+ *
+ * This function takes multiple arrays and returns a new array containing the elements that are
+ * present in all provided arrays. It effectively filters out any elements that are not found
+ * in every array.
+ *
+ * @template T - The type of elements in the arrays.
+ * @param {...(ArrayLike<T> | null | undefined)} arrays - The arrays to compare.
+ * @returns {T[]} A new array containing the elements that are present in all arrays.
+ *
+ * @example
+ * const array1 = [1, 2, 3, 4, 5];
+ * const array2 = [3, 4, 5, 6, 7];
+ * const result = intersection(array1, array2);
+ * // result will be [3, 4, 5] since these elements are in both arrays.
+ */
+declare function intersection<T>(...arrays: Array<ArrayLike<T> | null | undefined>): T[];
+
+export { intersection };
Index: node_modules/es-toolkit/dist/compat/array/intersection.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const intersection$1 = require('../../array/intersection.js');
+const uniq = require('../../array/uniq.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function intersection(...arrays) {
+    if (arrays.length === 0) {
+        return [];
+    }
+    if (!isArrayLikeObject.isArrayLikeObject(arrays[0])) {
+        return [];
+    }
+    let result = uniq.uniq(Array.from(arrays[0]));
+    for (let i = 1; i < arrays.length; i++) {
+        const array = arrays[i];
+        if (!isArrayLikeObject.isArrayLikeObject(array)) {
+            return [];
+        }
+        result = intersection$1.intersection(result, Array.from(array));
+    }
+    return result;
+}
+
+exports.intersection = intersection;
Index: node_modules/es-toolkit/dist/compat/array/intersection.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersection.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersection.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { intersection as intersection$1 } from '../../array/intersection.mjs';
+import { uniq } from '../../array/uniq.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function intersection(...arrays) {
+    if (arrays.length === 0) {
+        return [];
+    }
+    if (!isArrayLikeObject(arrays[0])) {
+        return [];
+    }
+    let result = uniq(Array.from(arrays[0]));
+    for (let i = 1; i < arrays.length; i++) {
+        const array = arrays[i];
+        if (!isArrayLikeObject(array)) {
+            return [];
+        }
+        result = intersection$1(result, Array.from(array));
+    }
+    return result;
+}
+
+export { intersection };
Index: node_modules/es-toolkit/dist/compat/array/intersectionBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersectionBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersectionBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,73 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Creates an array of unique values that are included in all given arrays, using an iteratee to compute equality.
+ *
+ * @template T, U
+ * @param {ArrayLike<T> | null} array - The array to inspect.
+ * @param {ArrayLike<U>} values - The values to compare.
+ * @param {ValueIteratee<T | U>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [2.1]
+ */
+declare function intersectionBy<T, U>(array: ArrayLike<T> | null, values: ArrayLike<U>, iteratee: ValueIteratee<T | U>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using an iteratee to compute equality.
+ *
+ * @template T, U, V
+ * @param {ArrayLike<T> | null} array - The array to inspect.
+ * @param {ArrayLike<U>} values1 - The first values to compare.
+ * @param {ArrayLike<V>} values2 - The second values to compare.
+ * @param {ValueIteratee<T | U | V>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2.1, 1.2], [2.3, 3.4], [2.5], Math.floor);
+ * // => [2.1]
+ */
+declare function intersectionBy<T, U, V>(array: ArrayLike<T> | null, values1: ArrayLike<U>, values2: ArrayLike<V>, iteratee: ValueIteratee<T | U | V>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using an iteratee to compute equality.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ArrayLike<U>} values1 - The first values to compare.
+ * @param {ArrayLike<V>} values2 - The second values to compare.
+ * @param {...Array<ArrayLike<W> | ValueIteratee<T | U | V | W>>} values - The other arrays to compare, and the iteratee to use.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2.1, 1.2], [2.3, 3.4], [2.5], [2.6, 1.7], Math.floor);
+ * // => [2.1]
+ */
+declare function intersectionBy<T, U, V, W>(array: ArrayLike<T> | null | undefined, values1: ArrayLike<U>, values2: ArrayLike<V>, ...values: Array<ArrayLike<W> | ValueIteratee<T | U | V | W>>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null} [array] - The array to inspect.
+ * @param {...Array<ArrayLike<T>>} values - The values to compare.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2, 1], [2, 3]);
+ * // => [2]
+ */
+declare function intersectionBy<T>(array?: ArrayLike<T> | null, ...values: Array<ArrayLike<T>>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using an iteratee to compute equality.
+ *
+ * @template T
+ * @param {...Array<ArrayLike<T> | ValueIteratee<T>>} values - The arrays to compare and the iteratee to use.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [2.1]
+ */
+declare function intersectionBy<T>(...values: Array<ArrayLike<T> | ValueIteratee<T>>): T[];
+
+export { intersectionBy };
Index: node_modules/es-toolkit/dist/compat/array/intersectionBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersectionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersectionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,73 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Creates an array of unique values that are included in all given arrays, using an iteratee to compute equality.
+ *
+ * @template T, U
+ * @param {ArrayLike<T> | null} array - The array to inspect.
+ * @param {ArrayLike<U>} values - The values to compare.
+ * @param {ValueIteratee<T | U>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [2.1]
+ */
+declare function intersectionBy<T, U>(array: ArrayLike<T> | null, values: ArrayLike<U>, iteratee: ValueIteratee<T | U>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using an iteratee to compute equality.
+ *
+ * @template T, U, V
+ * @param {ArrayLike<T> | null} array - The array to inspect.
+ * @param {ArrayLike<U>} values1 - The first values to compare.
+ * @param {ArrayLike<V>} values2 - The second values to compare.
+ * @param {ValueIteratee<T | U | V>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2.1, 1.2], [2.3, 3.4], [2.5], Math.floor);
+ * // => [2.1]
+ */
+declare function intersectionBy<T, U, V>(array: ArrayLike<T> | null, values1: ArrayLike<U>, values2: ArrayLike<V>, iteratee: ValueIteratee<T | U | V>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using an iteratee to compute equality.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ArrayLike<U>} values1 - The first values to compare.
+ * @param {ArrayLike<V>} values2 - The second values to compare.
+ * @param {...Array<ArrayLike<W> | ValueIteratee<T | U | V | W>>} values - The other arrays to compare, and the iteratee to use.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2.1, 1.2], [2.3, 3.4], [2.5], [2.6, 1.7], Math.floor);
+ * // => [2.1]
+ */
+declare function intersectionBy<T, U, V, W>(array: ArrayLike<T> | null | undefined, values1: ArrayLike<U>, values2: ArrayLike<V>, ...values: Array<ArrayLike<W> | ValueIteratee<T | U | V | W>>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null} [array] - The array to inspect.
+ * @param {...Array<ArrayLike<T>>} values - The values to compare.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2, 1], [2, 3]);
+ * // => [2]
+ */
+declare function intersectionBy<T>(array?: ArrayLike<T> | null, ...values: Array<ArrayLike<T>>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using an iteratee to compute equality.
+ *
+ * @template T
+ * @param {...Array<ArrayLike<T> | ValueIteratee<T>>} values - The arrays to compare and the iteratee to use.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [2.1]
+ */
+declare function intersectionBy<T>(...values: Array<ArrayLike<T> | ValueIteratee<T>>): T[];
+
+export { intersectionBy };
Index: node_modules/es-toolkit/dist/compat/array/intersectionBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersectionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersectionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const intersectionBy$1 = require('../../array/intersectionBy.js');
+const last = require('../../array/last.js');
+const uniq = require('../../array/uniq.js');
+const identity = require('../../function/identity.js');
+const property = require('../object/property.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function intersectionBy(array, ...values) {
+    if (!isArrayLikeObject.isArrayLikeObject(array)) {
+        return [];
+    }
+    const lastValue = last.last(values);
+    if (lastValue === undefined) {
+        return Array.from(array);
+    }
+    let result = uniq.uniq(Array.from(array));
+    const count = isArrayLikeObject.isArrayLikeObject(lastValue) ? values.length : values.length - 1;
+    for (let i = 0; i < count; ++i) {
+        const value = values[i];
+        if (!isArrayLikeObject.isArrayLikeObject(value)) {
+            return [];
+        }
+        if (isArrayLikeObject.isArrayLikeObject(lastValue)) {
+            result = intersectionBy$1.intersectionBy(result, Array.from(value), identity.identity);
+        }
+        else if (typeof lastValue === 'function') {
+            result = intersectionBy$1.intersectionBy(result, Array.from(value), value => lastValue(value));
+        }
+        else if (typeof lastValue === 'string') {
+            result = intersectionBy$1.intersectionBy(result, Array.from(value), property.property(lastValue));
+        }
+    }
+    return result;
+}
+
+exports.intersectionBy = intersectionBy;
Index: node_modules/es-toolkit/dist/compat/array/intersectionBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersectionBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersectionBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import { intersectionBy as intersectionBy$1 } from '../../array/intersectionBy.mjs';
+import { last } from '../../array/last.mjs';
+import { uniq } from '../../array/uniq.mjs';
+import { identity } from '../../function/identity.mjs';
+import { property } from '../object/property.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function intersectionBy(array, ...values) {
+    if (!isArrayLikeObject(array)) {
+        return [];
+    }
+    const lastValue = last(values);
+    if (lastValue === undefined) {
+        return Array.from(array);
+    }
+    let result = uniq(Array.from(array));
+    const count = isArrayLikeObject(lastValue) ? values.length : values.length - 1;
+    for (let i = 0; i < count; ++i) {
+        const value = values[i];
+        if (!isArrayLikeObject(value)) {
+            return [];
+        }
+        if (isArrayLikeObject(lastValue)) {
+            result = intersectionBy$1(result, Array.from(value), identity);
+        }
+        else if (typeof lastValue === 'function') {
+            result = intersectionBy$1(result, Array.from(value), value => lastValue(value));
+        }
+        else if (typeof lastValue === 'string') {
+            result = intersectionBy$1(result, Array.from(value), property(lastValue));
+        }
+    }
+    return result;
+}
+
+export { intersectionBy };
Index: node_modules/es-toolkit/dist/compat/array/intersectionWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersectionWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersectionWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+/**
+ * Creates an array of unique values that are included in all given arrays, using a comparator function for equality comparisons.
+ *
+ * @template T, U
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ArrayLike<U>} values - The values to compare.
+ * @param {(a: T, b: T | U) => boolean} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * intersectionWith(objects, others, (a, b) => a.x === b.x && a.y === b.y);
+ * // => [{ 'x': 1, 'y': 2 }]
+ */
+declare function intersectionWith<T, U>(array: ArrayLike<T> | null | undefined, values: ArrayLike<U>, comparator: (a: T, b: T | U) => boolean): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using a comparator function for equality comparisons.
+ *
+ * @template T, U, V
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ArrayLike<U>} values1 - The first values to compare.
+ * @param {ArrayLike<V>} values2 - The second values to compare.
+ * @param {(a: T, b: T | U | V) => boolean} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others1 = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * const others2 = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }];
+ * intersectionWith(objects, others1, others2, (a, b) => a.x === b.x && a.y === b.y);
+ * // => [{ 'x': 1, 'y': 2 }]
+ */
+declare function intersectionWith<T, U, V>(array: ArrayLike<T> | null | undefined, values1: ArrayLike<U>, values2: ArrayLike<V>, comparator: (a: T, b: T | U | V) => boolean): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using a comparator function for equality comparisons.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ArrayLike<U>} values1 - The first values to compare.
+ * @param {ArrayLike<V>} values2 - The second values to compare.
+ * @param {...Array<ArrayLike<W> | (a: T, b: T | U | V | W) => boolean>} values - The other arrays to compare, and the comparator to use.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others1 = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * const others2 = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }];
+ * const others3 = [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }];
+ * intersectionWith(objects, others1, others2, others3, (a, b) => a.x === b.x && a.y === b.y);
+ * // => [{ 'x': 1, 'y': 2 }]
+ */
+declare function intersectionWith<T, U, V, W>(array: ArrayLike<T> | null | undefined, values1: ArrayLike<U>, values2: ArrayLike<V>, ...values: Array<ArrayLike<W> | ((a: T, b: T | U | V | W) => boolean)>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null} [array] - The array to inspect.
+ * @param {...Array<ArrayLike<T> | (a: T, b: never) => boolean>} values - The values to compare.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionWith([2, 1], [2, 3]);
+ * // => [2]
+ */
+declare function intersectionWith<T>(array?: ArrayLike<T> | null, ...values: Array<ArrayLike<T> | ((a: T, b: never) => boolean)>): T[];
+
+export { intersectionWith };
Index: node_modules/es-toolkit/dist/compat/array/intersectionWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersectionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersectionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+/**
+ * Creates an array of unique values that are included in all given arrays, using a comparator function for equality comparisons.
+ *
+ * @template T, U
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ArrayLike<U>} values - The values to compare.
+ * @param {(a: T, b: T | U) => boolean} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * intersectionWith(objects, others, (a, b) => a.x === b.x && a.y === b.y);
+ * // => [{ 'x': 1, 'y': 2 }]
+ */
+declare function intersectionWith<T, U>(array: ArrayLike<T> | null | undefined, values: ArrayLike<U>, comparator: (a: T, b: T | U) => boolean): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using a comparator function for equality comparisons.
+ *
+ * @template T, U, V
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ArrayLike<U>} values1 - The first values to compare.
+ * @param {ArrayLike<V>} values2 - The second values to compare.
+ * @param {(a: T, b: T | U | V) => boolean} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others1 = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * const others2 = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }];
+ * intersectionWith(objects, others1, others2, (a, b) => a.x === b.x && a.y === b.y);
+ * // => [{ 'x': 1, 'y': 2 }]
+ */
+declare function intersectionWith<T, U, V>(array: ArrayLike<T> | null | undefined, values1: ArrayLike<U>, values2: ArrayLike<V>, comparator: (a: T, b: T | U | V) => boolean): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays, using a comparator function for equality comparisons.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ArrayLike<U>} values1 - The first values to compare.
+ * @param {ArrayLike<V>} values2 - The second values to compare.
+ * @param {...Array<ArrayLike<W> | (a: T, b: T | U | V | W) => boolean>} values - The other arrays to compare, and the comparator to use.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others1 = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * const others2 = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }];
+ * const others3 = [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }];
+ * intersectionWith(objects, others1, others2, others3, (a, b) => a.x === b.x && a.y === b.y);
+ * // => [{ 'x': 1, 'y': 2 }]
+ */
+declare function intersectionWith<T, U, V, W>(array: ArrayLike<T> | null | undefined, values1: ArrayLike<U>, values2: ArrayLike<V>, ...values: Array<ArrayLike<W> | ((a: T, b: T | U | V | W) => boolean)>): T[];
+/**
+ * Creates an array of unique values that are included in all given arrays.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null} [array] - The array to inspect.
+ * @param {...Array<ArrayLike<T> | (a: T, b: never) => boolean>} values - The values to compare.
+ * @returns {T[]} Returns the new array of intersecting values.
+ *
+ * @example
+ * intersectionWith([2, 1], [2, 3]);
+ * // => [2]
+ */
+declare function intersectionWith<T>(array?: ArrayLike<T> | null, ...values: Array<ArrayLike<T> | ((a: T, b: never) => boolean)>): T[];
+
+export { intersectionWith };
Index: node_modules/es-toolkit/dist/compat/array/intersectionWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersectionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersectionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const last = require('./last.js');
+const intersectionWith$1 = require('../../array/intersectionWith.js');
+const uniq = require('./uniq.js');
+const eq = require('../util/eq.js');
+
+function intersectionWith(firstArr, ...otherArrs) {
+    if (firstArr == null) {
+        return [];
+    }
+    const _comparator = last.last(otherArrs);
+    let comparator = eq.eq;
+    let uniq$1 = uniq.uniq;
+    if (typeof _comparator === 'function') {
+        comparator = _comparator;
+        uniq$1 = uniqPreserve0;
+        otherArrs.pop();
+    }
+    let result = uniq$1(Array.from(firstArr));
+    for (let i = 0; i < otherArrs.length; ++i) {
+        const otherArr = otherArrs[i];
+        if (otherArr == null) {
+            return [];
+        }
+        result = intersectionWith$1.intersectionWith(result, Array.from(otherArr), comparator);
+    }
+    return result;
+}
+function uniqPreserve0(arr) {
+    const result = [];
+    const added = new Set();
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        if (added.has(item)) {
+            continue;
+        }
+        result.push(item);
+        added.add(item);
+    }
+    return result;
+}
+
+exports.intersectionWith = intersectionWith;
Index: node_modules/es-toolkit/dist/compat/array/intersectionWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/intersectionWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/intersectionWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+import { last } from './last.mjs';
+import { intersectionWith as intersectionWith$1 } from '../../array/intersectionWith.mjs';
+import { uniq } from './uniq.mjs';
+import { eq } from '../util/eq.mjs';
+
+function intersectionWith(firstArr, ...otherArrs) {
+    if (firstArr == null) {
+        return [];
+    }
+    const _comparator = last(otherArrs);
+    let comparator = eq;
+    let uniq$1 = uniq;
+    if (typeof _comparator === 'function') {
+        comparator = _comparator;
+        uniq$1 = uniqPreserve0;
+        otherArrs.pop();
+    }
+    let result = uniq$1(Array.from(firstArr));
+    for (let i = 0; i < otherArrs.length; ++i) {
+        const otherArr = otherArrs[i];
+        if (otherArr == null) {
+            return [];
+        }
+        result = intersectionWith$1(result, Array.from(otherArr), comparator);
+    }
+    return result;
+}
+function uniqPreserve0(arr) {
+    const result = [];
+    const added = new Set();
+    for (let i = 0; i < arr.length; i++) {
+        const item = arr[i];
+        if (added.has(item)) {
+            continue;
+        }
+        result.push(item);
+        added.add(item);
+    }
+    return result;
+}
+
+export { intersectionWith };
Index: node_modules/es-toolkit/dist/compat/array/invokeMap.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/invokeMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/invokeMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+/**
+ * Invokes the method at path of each element in collection.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {string} methodName - The name of the method to invoke.
+ * @param {...any[]} args - The arguments to invoke each method with.
+ * @returns {any[]} Returns the array of results.
+ *
+ * @example
+ * invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
+ * // => [[1, 5, 7], [1, 2, 3]]
+ *
+ * invokeMap([123, 456], 'toString', 2);
+ * // => ['1111011', '111001000']
+ */
+declare function invokeMap(collection: object | null | undefined, methodName: string, ...args: any[]): any[];
+/**
+ * Invokes the method at path of each element in collection.
+ *
+ * @template R
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {(...args: any[]) => R} method - The method to invoke.
+ * @param {...any[]} args - The arguments to invoke each method with.
+ * @returns {R[]} Returns the array of results.
+ *
+ * @example
+ * invokeMap([5, 1, 7], Array.prototype.slice, 1);
+ * // => [[], [], []]
+ */
+declare function invokeMap<R>(collection: object | null | undefined, method: (...args: any[]) => R, ...args: any[]): R[];
+
+export { invokeMap };
Index: node_modules/es-toolkit/dist/compat/array/invokeMap.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/invokeMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/invokeMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+/**
+ * Invokes the method at path of each element in collection.
+ *
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {string} methodName - The name of the method to invoke.
+ * @param {...any[]} args - The arguments to invoke each method with.
+ * @returns {any[]} Returns the array of results.
+ *
+ * @example
+ * invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
+ * // => [[1, 5, 7], [1, 2, 3]]
+ *
+ * invokeMap([123, 456], 'toString', 2);
+ * // => ['1111011', '111001000']
+ */
+declare function invokeMap(collection: object | null | undefined, methodName: string, ...args: any[]): any[];
+/**
+ * Invokes the method at path of each element in collection.
+ *
+ * @template R
+ * @param {object | null | undefined} collection - The collection to iterate over.
+ * @param {(...args: any[]) => R} method - The method to invoke.
+ * @param {...any[]} args - The arguments to invoke each method with.
+ * @returns {R[]} Returns the array of results.
+ *
+ * @example
+ * invokeMap([5, 1, 7], Array.prototype.slice, 1);
+ * // => [[], [], []]
+ */
+declare function invokeMap<R>(collection: object | null | undefined, method: (...args: any[]) => R, ...args: any[]): R[];
+
+export { invokeMap };
Index: node_modules/es-toolkit/dist/compat/array/invokeMap.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/invokeMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/invokeMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isFunction = require('../../predicate/isFunction.js');
+const isNil = require('../../predicate/isNil.js');
+const get = require('../object/get.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function invokeMap(collection, path, ...args) {
+    if (isNil.isNil(collection)) {
+        return [];
+    }
+    const values = isArrayLike.isArrayLike(collection) ? Array.from(collection) : Object.values(collection);
+    const result = [];
+    for (let i = 0; i < values.length; i++) {
+        const value = values[i];
+        if (isFunction.isFunction(path)) {
+            result.push(path.apply(value, args));
+            continue;
+        }
+        const method = get.get(value, path);
+        let thisContext = value;
+        if (Array.isArray(path)) {
+            const pathExceptLast = path.slice(0, -1);
+            if (pathExceptLast.length > 0) {
+                thisContext = get.get(value, pathExceptLast);
+            }
+        }
+        else if (typeof path === 'string' && path.includes('.')) {
+            const parts = path.split('.');
+            const pathExceptLast = parts.slice(0, -1).join('.');
+            thisContext = get.get(value, pathExceptLast);
+        }
+        result.push(method == null ? undefined : method.apply(thisContext, args));
+    }
+    return result;
+}
+
+exports.invokeMap = invokeMap;
Index: node_modules/es-toolkit/dist/compat/array/invokeMap.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/invokeMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/invokeMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import { isFunction } from '../../predicate/isFunction.mjs';
+import { isNil } from '../../predicate/isNil.mjs';
+import { get } from '../object/get.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function invokeMap(collection, path, ...args) {
+    if (isNil(collection)) {
+        return [];
+    }
+    const values = isArrayLike(collection) ? Array.from(collection) : Object.values(collection);
+    const result = [];
+    for (let i = 0; i < values.length; i++) {
+        const value = values[i];
+        if (isFunction(path)) {
+            result.push(path.apply(value, args));
+            continue;
+        }
+        const method = get(value, path);
+        let thisContext = value;
+        if (Array.isArray(path)) {
+            const pathExceptLast = path.slice(0, -1);
+            if (pathExceptLast.length > 0) {
+                thisContext = get(value, pathExceptLast);
+            }
+        }
+        else if (typeof path === 'string' && path.includes('.')) {
+            const parts = path.split('.');
+            const pathExceptLast = parts.slice(0, -1).join('.');
+            thisContext = get(value, pathExceptLast);
+        }
+        result.push(method == null ? undefined : method.apply(thisContext, args));
+    }
+    return result;
+}
+
+export { invokeMap };
Index: node_modules/es-toolkit/dist/compat/array/join.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/join.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/join.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Joins elements of an array into a string.
+ *
+ * @param {ArrayLike<any> | null | undefined} array - The array to join.
+ * @param {string} [separator=','] - The separator used to join the elements, default is common separator `,`.
+ * @returns {string} - Returns a string containing all elements of the array joined by the specified separator.
+ *
+ * @example
+ * const arr = ["a", "b", "c"];
+ * const result = join(arr, "~");
+ * console.log(result); // Output: "a~b~c"
+ */
+declare function join(array: ArrayLike<any> | null | undefined, separator?: string): string;
+
+export { join };
Index: node_modules/es-toolkit/dist/compat/array/join.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/join.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/join.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Joins elements of an array into a string.
+ *
+ * @param {ArrayLike<any> | null | undefined} array - The array to join.
+ * @param {string} [separator=','] - The separator used to join the elements, default is common separator `,`.
+ * @returns {string} - Returns a string containing all elements of the array joined by the specified separator.
+ *
+ * @example
+ * const arr = ["a", "b", "c"];
+ * const result = join(arr, "~");
+ * console.log(result); // Output: "a~b~c"
+ */
+declare function join(array: ArrayLike<any> | null | undefined, separator?: string): string;
+
+export { join };
Index: node_modules/es-toolkit/dist/compat/array/join.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/join.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/join.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function join(array, separator) {
+    if (!isArrayLike.isArrayLike(array)) {
+        return '';
+    }
+    return Array.from(array).join(separator);
+}
+
+exports.join = join;
Index: node_modules/es-toolkit/dist/compat/array/join.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/join.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/join.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function join(array, separator) {
+    if (!isArrayLike(array)) {
+        return '';
+    }
+    return Array.from(array).join(separator);
+}
+
+export { join };
Index: node_modules/es-toolkit/dist/compat/array/keyBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/keyBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/keyBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { ValueIterateeCustom } from '../_internal/ValueIterateeCustom.mjs';
+
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection thru iteratee.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ValueIterateeCustom<T, PropertyKey>} [iteratee] - The iteratee to transform keys.
+ * @returns {Record<string, T>} Returns the composed aggregate object.
+ *
+ * @example
+ * const array = [
+ *   { dir: 'left', code: 97 },
+ *   { dir: 'right', code: 100 }
+ * ];
+ *
+ * keyBy(array, o => String.fromCharCode(o.code));
+ * // => { a: { dir: 'left', code: 97 }, d: { dir: 'right', code: 100 } }
+ *
+ * keyBy(array, 'dir');
+ * // => { left: { dir: 'left', code: 97 }, right: { dir: 'right', code: 100 } }
+ */
+declare function keyBy<T>(collection: ArrayLike<T> | null | undefined, iteratee?: ValueIterateeCustom<T, PropertyKey>): Record<string, T>;
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection thru iteratee.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ValueIterateeCustom<T[keyof T], PropertyKey>} [iteratee] - The iteratee to transform keys.
+ * @returns {Record<string, T[keyof T]>} Returns the composed aggregate object.
+ *
+ * @example
+ * const obj = { a: { dir: 'left', code: 97 }, b: { dir: 'right', code: 100 } };
+ * keyBy(obj, o => String.fromCharCode(o.code));
+ * // => { a: { dir: 'left', code: 97 }, d: { dir: 'right', code: 100 } }
+ */
+declare function keyBy<T extends object>(collection: T | null | undefined, iteratee?: ValueIterateeCustom<T[keyof T], PropertyKey>): Record<string, T[keyof T]>;
+
+export { keyBy };
Index: node_modules/es-toolkit/dist/compat/array/keyBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/keyBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/keyBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { ValueIterateeCustom } from '../_internal/ValueIterateeCustom.js';
+
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection thru iteratee.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ValueIterateeCustom<T, PropertyKey>} [iteratee] - The iteratee to transform keys.
+ * @returns {Record<string, T>} Returns the composed aggregate object.
+ *
+ * @example
+ * const array = [
+ *   { dir: 'left', code: 97 },
+ *   { dir: 'right', code: 100 }
+ * ];
+ *
+ * keyBy(array, o => String.fromCharCode(o.code));
+ * // => { a: { dir: 'left', code: 97 }, d: { dir: 'right', code: 100 } }
+ *
+ * keyBy(array, 'dir');
+ * // => { left: { dir: 'left', code: 97 }, right: { dir: 'right', code: 100 } }
+ */
+declare function keyBy<T>(collection: ArrayLike<T> | null | undefined, iteratee?: ValueIterateeCustom<T, PropertyKey>): Record<string, T>;
+/**
+ * Creates an object composed of keys generated from the results of running each element of collection thru iteratee.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ValueIterateeCustom<T[keyof T], PropertyKey>} [iteratee] - The iteratee to transform keys.
+ * @returns {Record<string, T[keyof T]>} Returns the composed aggregate object.
+ *
+ * @example
+ * const obj = { a: { dir: 'left', code: 97 }, b: { dir: 'right', code: 100 } };
+ * keyBy(obj, o => String.fromCharCode(o.code));
+ * // => { a: { dir: 'left', code: 97 }, d: { dir: 'right', code: 100 } }
+ */
+declare function keyBy<T extends object>(collection: T | null | undefined, iteratee?: ValueIterateeCustom<T[keyof T], PropertyKey>): Record<string, T[keyof T]>;
+
+export { keyBy };
Index: node_modules/es-toolkit/dist/compat/array/keyBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/keyBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/keyBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const reduce = require('./reduce.js');
+const identity = require('../../function/identity.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isObjectLike = require('../predicate/isObjectLike.js');
+const iteratee = require('../util/iteratee.js');
+
+function keyBy(collection, iteratee$1) {
+    if (!isArrayLike.isArrayLike(collection) && !isObjectLike.isObjectLike(collection)) {
+        return {};
+    }
+    const keyFn = iteratee.iteratee(iteratee$1 ?? identity.identity);
+    return reduce.reduce(collection, (result, value) => {
+        const key = keyFn(value);
+        result[key] = value;
+        return result;
+    }, {});
+}
+
+exports.keyBy = keyBy;
Index: node_modules/es-toolkit/dist/compat/array/keyBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/keyBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/keyBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import { reduce } from './reduce.mjs';
+import { identity } from '../../function/identity.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isObjectLike } from '../predicate/isObjectLike.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function keyBy(collection, iteratee$1) {
+    if (!isArrayLike(collection) && !isObjectLike(collection)) {
+        return {};
+    }
+    const keyFn = iteratee(iteratee$1 ?? identity);
+    return reduce(collection, (result, value) => {
+        const key = keyFn(value);
+        result[key] = value;
+        return result;
+    }, {});
+}
+
+export { keyBy };
Index: node_modules/es-toolkit/dist/compat/array/last.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/last.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/last.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Returns the last element of an array.
+ *
+ * This function takes an array and returns the last element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * Unlike some implementations, this function is optimized for performance
+ * by directly accessing the last index of the array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr - The array from which to get the last element.
+ * @returns {T | undefined} The last element of the array, or `undefined` if the array is empty.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const lastElement = last(arr);
+ * // lastElement will be 3
+ *
+ * const emptyArr: number[] = [];
+ * const noElement = last(emptyArr);
+ * // noElement will be undefined
+ */
+declare function last<T>(array: ArrayLike<T> | null | undefined): T | undefined;
+
+export { last };
Index: node_modules/es-toolkit/dist/compat/array/last.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/last.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/last.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Returns the last element of an array.
+ *
+ * This function takes an array and returns the last element of the array.
+ * If the array is empty, the function returns `undefined`.
+ *
+ * Unlike some implementations, this function is optimized for performance
+ * by directly accessing the last index of the array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr - The array from which to get the last element.
+ * @returns {T | undefined} The last element of the array, or `undefined` if the array is empty.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const lastElement = last(arr);
+ * // lastElement will be 3
+ *
+ * const emptyArr: number[] = [];
+ * const noElement = last(emptyArr);
+ * // noElement will be undefined
+ */
+declare function last<T>(array: ArrayLike<T> | null | undefined): T | undefined;
+
+export { last };
Index: node_modules/es-toolkit/dist/compat/array/last.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/last.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/last.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const last$1 = require('../../array/last.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function last(array) {
+    if (!isArrayLike.isArrayLike(array)) {
+        return undefined;
+    }
+    return last$1.last(toArray.toArray(array));
+}
+
+exports.last = last;
Index: node_modules/es-toolkit/dist/compat/array/last.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/last.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/last.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { last as last$1 } from '../../array/last.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function last(array) {
+    if (!isArrayLike(array)) {
+        return undefined;
+    }
+    return last$1(toArray(array));
+}
+
+export { last };
Index: node_modules/es-toolkit/dist/compat/array/lastIndexOf.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/lastIndexOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/lastIndexOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Gets the index at which the last occurrence of value is found in array.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {T} value - The value to search for.
+ * @param {true | number} [fromIndex] - The index to search from or true to search from the end.
+ * @returns {number} Returns the index of the matched value, else -1.
+ *
+ * @example
+ * lastIndexOf([1, 2, 1, 2], 2);
+ * // => 3
+ *
+ * lastIndexOf([1, 2, 1, 2], 2, 2);
+ * // => 1
+ *
+ * lastIndexOf([1, 2, 1, 2], 2, true);
+ * // => 3
+ */
+declare function lastIndexOf<T>(array: ArrayLike<T> | null | undefined, searchElement: T, fromIndex?: true | number): number;
+
+export { lastIndexOf };
Index: node_modules/es-toolkit/dist/compat/array/lastIndexOf.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/lastIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/lastIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Gets the index at which the last occurrence of value is found in array.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {T} value - The value to search for.
+ * @param {true | number} [fromIndex] - The index to search from or true to search from the end.
+ * @returns {number} Returns the index of the matched value, else -1.
+ *
+ * @example
+ * lastIndexOf([1, 2, 1, 2], 2);
+ * // => 3
+ *
+ * lastIndexOf([1, 2, 1, 2], 2, 2);
+ * // => 1
+ *
+ * lastIndexOf([1, 2, 1, 2], 2, true);
+ * // => 3
+ */
+declare function lastIndexOf<T>(array: ArrayLike<T> | null | undefined, searchElement: T, fromIndex?: true | number): number;
+
+export { lastIndexOf };
Index: node_modules/es-toolkit/dist/compat/array/lastIndexOf.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/lastIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/lastIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function lastIndexOf(array, searchElement, fromIndex) {
+    if (!isArrayLike.isArrayLike(array) || array.length === 0) {
+        return -1;
+    }
+    const length = array.length;
+    let index = fromIndex ?? length - 1;
+    if (fromIndex != null) {
+        index = index < 0 ? Math.max(length + index, 0) : Math.min(index, length - 1);
+    }
+    if (Number.isNaN(searchElement)) {
+        for (let i = index; i >= 0; i--) {
+            if (Number.isNaN(array[i])) {
+                return i;
+            }
+        }
+    }
+    return Array.from(array).lastIndexOf(searchElement, index);
+}
+
+exports.lastIndexOf = lastIndexOf;
Index: node_modules/es-toolkit/dist/compat/array/lastIndexOf.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/lastIndexOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/lastIndexOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function lastIndexOf(array, searchElement, fromIndex) {
+    if (!isArrayLike(array) || array.length === 0) {
+        return -1;
+    }
+    const length = array.length;
+    let index = fromIndex ?? length - 1;
+    if (fromIndex != null) {
+        index = index < 0 ? Math.max(length + index, 0) : Math.min(index, length - 1);
+    }
+    if (Number.isNaN(searchElement)) {
+        for (let i = index; i >= 0; i--) {
+            if (Number.isNaN(array[i])) {
+                return i;
+            }
+        }
+    }
+    return Array.from(array).lastIndexOf(searchElement, index);
+}
+
+export { lastIndexOf };
Index: node_modules/es-toolkit/dist/compat/array/map.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/map.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/map.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,112 @@
+import { ArrayIterator } from '../_internal/ArrayIterator.mjs';
+import { ListIterator } from '../_internal/ListIterator.mjs';
+import { ObjectIterator } from '../_internal/ObjectIterator.mjs';
+import { TupleIterator } from '../_internal/TupleIterator.mjs';
+
+/**
+ * Maps each element in a tuple to a new tuple of values using an iteratee.
+ *
+ * @param {T} collection - The tuple to iterate over
+ * @param {TupleIterator<T, U>} iteratee - The function invoked per iteration
+ * @returns {{ [K in keyof T]: U }} - Returns the new mapped tuple
+ *
+ * @example
+ * // Using a transformation function on a tuple
+ * const tuple = [1, 'hello', true] as const;
+ * map(tuple, value => String(value)); // => ['1', 'hello', 'true']
+ */
+declare function map<T extends readonly [unknown, ...unknown[]], U>(collection: T, iteratee: TupleIterator<T, U>): {
+    [K in keyof T]: U;
+};
+/**
+ * Maps each element in an array to a new array using an iteratee.
+ *
+ * @param {T[] | null | undefined} collection - The array to iterate over
+ * @param {ArrayIterator<T, U>} iteratee - The function invoked per iteration
+ * @returns {U[]} - Returns the new mapped array
+ *
+ * @example
+ * // Using a transformation function on an array
+ * const array = [1, 2, 3];
+ * map(array, x => x * 2); // => [2, 4, 6]
+ */
+declare function map<T, U>(collection: T[] | null | undefined, iteratee: ArrayIterator<T, U>): U[];
+/**
+ * Maps each element in an array-like object to a new array using an iteratee.
+ *
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like object to iterate over
+ * @param {ListIterator<T, U>} iteratee - The function invoked per iteration
+ * @returns {U[]} - Returns the new mapped array
+ *
+ * @example
+ * // Using a transformation function on an array-like object
+ * const arrayLike = { length: 2, 0: 'a', 1: 'b' };
+ * map(arrayLike, x => x.toUpperCase()); // => ['A', 'B']
+ */
+declare function map<T, U>(collection: ArrayLike<T> | null | undefined, iteratee: ListIterator<T, U>): U[];
+/**
+ * Maps each value in an object to a new array.
+ *
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The object to iterate over
+ * @returns {T[]} - Returns an array of the object's values
+ *
+ * @example
+ * // Converting an object's values to an array
+ * const obj = { a: 1, b: 2, c: 3 };
+ * map(obj); // => [1, 2, 3]
+ */
+declare function map<T>(collection: Record<string, T> | Record<number, T> | null | undefined): T[];
+/**
+ * Maps each element in an object to a new array using an iteratee.
+ *
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {ObjectIterator<T, U>} iteratee - The function invoked per iteration
+ * @returns {U[]} - Returns the new mapped array
+ *
+ * @example
+ * // Using a transformation function on an object
+ * const obj = { a: 1, b: 2 };
+ * map(obj, (value, key) => `${key}:${value}`); // => ['a:1', 'b:2']
+ */
+declare function map<T extends object, U>(collection: T | null | undefined, iteratee: ObjectIterator<T, U>): U[];
+/**
+ * Maps each element in an object to a new array by plucking the specified property.
+ *
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The object to iterate over
+ * @param {K} iteratee - The property to pluck from each element
+ * @returns {Array<T[K]>} - Returns the new array of plucked values
+ *
+ * @example
+ * // Plucking a property from each object
+ * const users = [{ name: 'John', age: 30 }, { name: 'Jane', age: 25 }];
+ * map(users, 'name'); // => ['John', 'Jane']
+ */
+declare function map<T, K extends keyof T>(collection: Record<string, T> | Record<number, T> | null | undefined, iteratee: K): Array<T[K]>;
+/**
+ * Maps each element in an object to a new array by plucking the specified string property.
+ *
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The object to iterate over
+ * @param {string} [iteratee] - The string property to pluck from each element
+ * @returns {any[]} - Returns the new array of plucked values
+ *
+ * @example
+ * // Plucking a nested property
+ * const users = [{ info: { name: 'John' } }, { info: { name: 'Jane' } }];
+ * map(users, 'info.name'); // => ['John', 'Jane']
+ */
+declare function map<T>(collection: Record<string, T> | Record<number, T> | null | undefined, iteratee?: string): any[];
+/**
+ * Maps each element in an object to a new array by matching against a source object.
+ *
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The object to iterate over
+ * @param {object} [iteratee] - The object to match against
+ * @returns {boolean[]} - Returns an array of boolean values indicating matches
+ *
+ * @example
+ * // Matching against a source object
+ * const users = [{ name: 'John', age: 30 }, { name: 'Jane', age: 25 }];
+ * map(users, { age: 30 }); // => [true, false]
+ */
+declare function map<T>(collection: Record<string, T> | Record<number, T> | null | undefined, iteratee?: object): boolean[];
+
+export { map };
Index: node_modules/es-toolkit/dist/compat/array/map.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/map.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/map.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,112 @@
+import { ArrayIterator } from '../_internal/ArrayIterator.js';
+import { ListIterator } from '../_internal/ListIterator.js';
+import { ObjectIterator } from '../_internal/ObjectIterator.js';
+import { TupleIterator } from '../_internal/TupleIterator.js';
+
+/**
+ * Maps each element in a tuple to a new tuple of values using an iteratee.
+ *
+ * @param {T} collection - The tuple to iterate over
+ * @param {TupleIterator<T, U>} iteratee - The function invoked per iteration
+ * @returns {{ [K in keyof T]: U }} - Returns the new mapped tuple
+ *
+ * @example
+ * // Using a transformation function on a tuple
+ * const tuple = [1, 'hello', true] as const;
+ * map(tuple, value => String(value)); // => ['1', 'hello', 'true']
+ */
+declare function map<T extends readonly [unknown, ...unknown[]], U>(collection: T, iteratee: TupleIterator<T, U>): {
+    [K in keyof T]: U;
+};
+/**
+ * Maps each element in an array to a new array using an iteratee.
+ *
+ * @param {T[] | null | undefined} collection - The array to iterate over
+ * @param {ArrayIterator<T, U>} iteratee - The function invoked per iteration
+ * @returns {U[]} - Returns the new mapped array
+ *
+ * @example
+ * // Using a transformation function on an array
+ * const array = [1, 2, 3];
+ * map(array, x => x * 2); // => [2, 4, 6]
+ */
+declare function map<T, U>(collection: T[] | null | undefined, iteratee: ArrayIterator<T, U>): U[];
+/**
+ * Maps each element in an array-like object to a new array using an iteratee.
+ *
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like object to iterate over
+ * @param {ListIterator<T, U>} iteratee - The function invoked per iteration
+ * @returns {U[]} - Returns the new mapped array
+ *
+ * @example
+ * // Using a transformation function on an array-like object
+ * const arrayLike = { length: 2, 0: 'a', 1: 'b' };
+ * map(arrayLike, x => x.toUpperCase()); // => ['A', 'B']
+ */
+declare function map<T, U>(collection: ArrayLike<T> | null | undefined, iteratee: ListIterator<T, U>): U[];
+/**
+ * Maps each value in an object to a new array.
+ *
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The object to iterate over
+ * @returns {T[]} - Returns an array of the object's values
+ *
+ * @example
+ * // Converting an object's values to an array
+ * const obj = { a: 1, b: 2, c: 3 };
+ * map(obj); // => [1, 2, 3]
+ */
+declare function map<T>(collection: Record<string, T> | Record<number, T> | null | undefined): T[];
+/**
+ * Maps each element in an object to a new array using an iteratee.
+ *
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {ObjectIterator<T, U>} iteratee - The function invoked per iteration
+ * @returns {U[]} - Returns the new mapped array
+ *
+ * @example
+ * // Using a transformation function on an object
+ * const obj = { a: 1, b: 2 };
+ * map(obj, (value, key) => `${key}:${value}`); // => ['a:1', 'b:2']
+ */
+declare function map<T extends object, U>(collection: T | null | undefined, iteratee: ObjectIterator<T, U>): U[];
+/**
+ * Maps each element in an object to a new array by plucking the specified property.
+ *
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The object to iterate over
+ * @param {K} iteratee - The property to pluck from each element
+ * @returns {Array<T[K]>} - Returns the new array of plucked values
+ *
+ * @example
+ * // Plucking a property from each object
+ * const users = [{ name: 'John', age: 30 }, { name: 'Jane', age: 25 }];
+ * map(users, 'name'); // => ['John', 'Jane']
+ */
+declare function map<T, K extends keyof T>(collection: Record<string, T> | Record<number, T> | null | undefined, iteratee: K): Array<T[K]>;
+/**
+ * Maps each element in an object to a new array by plucking the specified string property.
+ *
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The object to iterate over
+ * @param {string} [iteratee] - The string property to pluck from each element
+ * @returns {any[]} - Returns the new array of plucked values
+ *
+ * @example
+ * // Plucking a nested property
+ * const users = [{ info: { name: 'John' } }, { info: { name: 'Jane' } }];
+ * map(users, 'info.name'); // => ['John', 'Jane']
+ */
+declare function map<T>(collection: Record<string, T> | Record<number, T> | null | undefined, iteratee?: string): any[];
+/**
+ * Maps each element in an object to a new array by matching against a source object.
+ *
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The object to iterate over
+ * @param {object} [iteratee] - The object to match against
+ * @returns {boolean[]} - Returns an array of boolean values indicating matches
+ *
+ * @example
+ * // Matching against a source object
+ * const users = [{ name: 'John', age: 30 }, { name: 'Jane', age: 25 }];
+ * map(users, { age: 30 }); // => [true, false]
+ */
+declare function map<T>(collection: Record<string, T> | Record<number, T> | null | undefined, iteratee?: object): boolean[];
+
+export { map };
Index: node_modules/es-toolkit/dist/compat/array/map.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/map.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/map.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const range = require('../../math/range.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const iteratee = require('../util/iteratee.js');
+
+function map(collection, _iteratee) {
+    if (!collection) {
+        return [];
+    }
+    const keys = isArrayLike.isArrayLike(collection) || Array.isArray(collection) ? range.range(0, collection.length) : Object.keys(collection);
+    const iteratee$1 = iteratee.iteratee(_iteratee ?? identity.identity);
+    const result = new Array(keys.length);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = collection[key];
+        result[i] = iteratee$1(value, key, collection);
+    }
+    return result;
+}
+
+exports.map = map;
Index: node_modules/es-toolkit/dist/compat/array/map.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/map.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/map.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { identity } from '../../function/identity.mjs';
+import { range } from '../../math/range.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function map(collection, _iteratee) {
+    if (!collection) {
+        return [];
+    }
+    const keys = isArrayLike(collection) || Array.isArray(collection) ? range(0, collection.length) : Object.keys(collection);
+    const iteratee$1 = iteratee(_iteratee ?? identity);
+    const result = new Array(keys.length);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = collection[key];
+        result[i] = iteratee$1(value, key, collection);
+    }
+    return result;
+}
+
+export { map };
Index: node_modules/es-toolkit/dist/compat/array/nth.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/nth.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/nth.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Gets the element at index `n` of `array`. If `n` is negative, the nth element from the end is returned.
+ *
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {number} [n=0] - The index of the element to return.
+ * @return {T | undefined} Returns the nth element of `array`.
+ *
+ * @example
+ * nth([1, 2, 3], 1); // => 2
+ * nth([1, 2, 3], -1); // => 3
+ */
+declare function nth<T>(array: ArrayLike<T> | null | undefined, n?: number): T | undefined;
+
+export { nth };
Index: node_modules/es-toolkit/dist/compat/array/nth.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/nth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/nth.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Gets the element at index `n` of `array`. If `n` is negative, the nth element from the end is returned.
+ *
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {number} [n=0] - The index of the element to return.
+ * @return {T | undefined} Returns the nth element of `array`.
+ *
+ * @example
+ * nth([1, 2, 3], 1); // => 2
+ * nth([1, 2, 3], -1); // => 3
+ */
+declare function nth<T>(array: ArrayLike<T> | null | undefined, n?: number): T | undefined;
+
+export { nth };
Index: node_modules/es-toolkit/dist/compat/array/nth.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/nth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/nth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+const toInteger = require('../util/toInteger.js');
+
+function nth(array, n = 0) {
+    if (!isArrayLikeObject.isArrayLikeObject(array) || array.length === 0) {
+        return undefined;
+    }
+    n = toInteger.toInteger(n);
+    if (n < 0) {
+        n += array.length;
+    }
+    return array[n];
+}
+
+exports.nth = nth;
Index: node_modules/es-toolkit/dist/compat/array/nth.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/nth.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/nth.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+
+function nth(array, n = 0) {
+    if (!isArrayLikeObject(array) || array.length === 0) {
+        return undefined;
+    }
+    n = toInteger(n);
+    if (n < 0) {
+        n += array.length;
+    }
+    return array[n];
+}
+
+export { nth };
Index: node_modules/es-toolkit/dist/compat/array/orderBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/orderBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/orderBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,84 @@
+import { ListIteratee } from '../_internal/ListIteratee.mjs';
+import { ListIterator } from '../_internal/ListIterator.mjs';
+import { Many } from '../_internal/Many.mjs';
+import { ObjectIteratee } from '../_internal/ObjectIteratee.mjs';
+import { ObjectIterator } from '../_internal/ObjectIterator.mjs';
+
+/**
+ * Sorts an array of elements based on multiple iteratee functions and their corresponding order directions.
+ *
+ * @template T The type of elements in the array
+ * @param {ArrayLike<T> | null | undefined} collection The array to sort
+ * @param {Many<ListIterator<T, unknown>>} iteratees The iteratee functions to sort by
+ * @param {Many<boolean | 'asc' | 'desc'>} orders The sort orders
+ * @returns {T[]} Returns the new sorted array
+ * @example
+ * const users = [
+ *   { name: 'fred', age: 48 },
+ *   { name: 'barney', age: 34 }
+ * ];
+ *
+ * // Sort by age in ascending order
+ * orderBy(users, [(user) => user.age], ['asc']);
+ * // => [{ name: 'barney', age: 34 }, { name: 'fred', age: 48 }]
+ */
+declare function orderBy<T>(collection: ArrayLike<T> | null | undefined, iteratees?: Many<ListIterator<T, unknown>>, orders?: Many<boolean | 'asc' | 'desc'>): T[];
+/**
+ * Sorts an array of elements based on multiple property names/paths and their corresponding order directions.
+ *
+ * @template T The type of elements in the array
+ * @param {ArrayLike<T> | null | undefined} collection The array to sort
+ * @param {Many<ListIteratee<T>>} iteratees The property names/paths to sort by
+ * @param {Many<boolean | 'asc' | 'desc'>} orders The sort orders
+ * @returns {T[]} Returns the new sorted array
+ * @example
+ * const users = [
+ *   { name: 'fred', age: 48 },
+ *   { name: 'barney', age: 34 }
+ * ];
+ *
+ * // Sort by name in ascending order
+ * orderBy(users, ['name'], ['asc']);
+ * // => [{ name: 'barney', age: 34 }, { name: 'fred', age: 48 }]
+ */
+declare function orderBy<T>(collection: ArrayLike<T> | null | undefined, iteratees?: Many<ListIteratee<T>>, orders?: Many<boolean | 'asc' | 'desc'>): T[];
+/**
+ * Sorts an object's values based on multiple iteratee functions and their corresponding order directions.
+ *
+ * @template T The object type
+ * @param {T | null | undefined} collection The object to sort values from
+ * @param {Many<ObjectIterator<T, unknown>>} iteratees The iteratee functions to sort by
+ * @param {Many<boolean | 'asc' | 'desc'>} orders The sort orders
+ * @returns {Array<T[keyof T]>} Returns the new sorted array
+ * @example
+ * const obj = {
+ *   a: { name: 'fred', age: 48 },
+ *   b: { name: 'barney', age: 34 }
+ * };
+ *
+ * // Sort by age in ascending order
+ * orderBy(obj, [(user) => user.age], ['asc']);
+ * // => [{ name: 'barney', age: 34 }, { name: 'fred', age: 48 }]
+ */
+declare function orderBy<T extends object>(collection: T | null | undefined, iteratees?: Many<ObjectIterator<T, unknown>>, orders?: Many<boolean | 'asc' | 'desc'>): Array<T[keyof T]>;
+/**
+ * Sorts an object's values based on multiple property names/paths and their corresponding order directions.
+ *
+ * @template T The object type
+ * @param {T | null | undefined} collection The object to sort values from
+ * @param {Many<ObjectIteratee<T>>} iteratees The property names/paths to sort by
+ * @param {Many<boolean | 'asc' | 'desc'>} orders The sort orders
+ * @returns {Array<T[keyof T]>} Returns the new sorted array
+ * @example
+ * const obj = {
+ *   a: { name: 'fred', age: 48 },
+ *   b: { name: 'barney', age: 34 }
+ * };
+ *
+ * // Sort by name in ascending order
+ * orderBy(obj, ['name'], ['asc']);
+ * // => [{ name: 'barney', age: 34 }, { name: 'fred', age: 48 }]
+ */
+declare function orderBy<T extends object>(collection: T | null | undefined, iteratees?: Many<ObjectIteratee<T>>, orders?: Many<boolean | 'asc' | 'desc'>): Array<T[keyof T]>;
+
+export { orderBy };
Index: node_modules/es-toolkit/dist/compat/array/orderBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/orderBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/orderBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,84 @@
+import { ListIteratee } from '../_internal/ListIteratee.js';
+import { ListIterator } from '../_internal/ListIterator.js';
+import { Many } from '../_internal/Many.js';
+import { ObjectIteratee } from '../_internal/ObjectIteratee.js';
+import { ObjectIterator } from '../_internal/ObjectIterator.js';
+
+/**
+ * Sorts an array of elements based on multiple iteratee functions and their corresponding order directions.
+ *
+ * @template T The type of elements in the array
+ * @param {ArrayLike<T> | null | undefined} collection The array to sort
+ * @param {Many<ListIterator<T, unknown>>} iteratees The iteratee functions to sort by
+ * @param {Many<boolean | 'asc' | 'desc'>} orders The sort orders
+ * @returns {T[]} Returns the new sorted array
+ * @example
+ * const users = [
+ *   { name: 'fred', age: 48 },
+ *   { name: 'barney', age: 34 }
+ * ];
+ *
+ * // Sort by age in ascending order
+ * orderBy(users, [(user) => user.age], ['asc']);
+ * // => [{ name: 'barney', age: 34 }, { name: 'fred', age: 48 }]
+ */
+declare function orderBy<T>(collection: ArrayLike<T> | null | undefined, iteratees?: Many<ListIterator<T, unknown>>, orders?: Many<boolean | 'asc' | 'desc'>): T[];
+/**
+ * Sorts an array of elements based on multiple property names/paths and their corresponding order directions.
+ *
+ * @template T The type of elements in the array
+ * @param {ArrayLike<T> | null | undefined} collection The array to sort
+ * @param {Many<ListIteratee<T>>} iteratees The property names/paths to sort by
+ * @param {Many<boolean | 'asc' | 'desc'>} orders The sort orders
+ * @returns {T[]} Returns the new sorted array
+ * @example
+ * const users = [
+ *   { name: 'fred', age: 48 },
+ *   { name: 'barney', age: 34 }
+ * ];
+ *
+ * // Sort by name in ascending order
+ * orderBy(users, ['name'], ['asc']);
+ * // => [{ name: 'barney', age: 34 }, { name: 'fred', age: 48 }]
+ */
+declare function orderBy<T>(collection: ArrayLike<T> | null | undefined, iteratees?: Many<ListIteratee<T>>, orders?: Many<boolean | 'asc' | 'desc'>): T[];
+/**
+ * Sorts an object's values based on multiple iteratee functions and their corresponding order directions.
+ *
+ * @template T The object type
+ * @param {T | null | undefined} collection The object to sort values from
+ * @param {Many<ObjectIterator<T, unknown>>} iteratees The iteratee functions to sort by
+ * @param {Many<boolean | 'asc' | 'desc'>} orders The sort orders
+ * @returns {Array<T[keyof T]>} Returns the new sorted array
+ * @example
+ * const obj = {
+ *   a: { name: 'fred', age: 48 },
+ *   b: { name: 'barney', age: 34 }
+ * };
+ *
+ * // Sort by age in ascending order
+ * orderBy(obj, [(user) => user.age], ['asc']);
+ * // => [{ name: 'barney', age: 34 }, { name: 'fred', age: 48 }]
+ */
+declare function orderBy<T extends object>(collection: T | null | undefined, iteratees?: Many<ObjectIterator<T, unknown>>, orders?: Many<boolean | 'asc' | 'desc'>): Array<T[keyof T]>;
+/**
+ * Sorts an object's values based on multiple property names/paths and their corresponding order directions.
+ *
+ * @template T The object type
+ * @param {T | null | undefined} collection The object to sort values from
+ * @param {Many<ObjectIteratee<T>>} iteratees The property names/paths to sort by
+ * @param {Many<boolean | 'asc' | 'desc'>} orders The sort orders
+ * @returns {Array<T[keyof T]>} Returns the new sorted array
+ * @example
+ * const obj = {
+ *   a: { name: 'fred', age: 48 },
+ *   b: { name: 'barney', age: 34 }
+ * };
+ *
+ * // Sort by name in ascending order
+ * orderBy(obj, ['name'], ['asc']);
+ * // => [{ name: 'barney', age: 34 }, { name: 'fred', age: 48 }]
+ */
+declare function orderBy<T extends object>(collection: T | null | undefined, iteratees?: Many<ObjectIteratee<T>>, orders?: Many<boolean | 'asc' | 'desc'>): Array<T[keyof T]>;
+
+export { orderBy };
Index: node_modules/es-toolkit/dist/compat/array/orderBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/orderBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/orderBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const compareValues = require('../_internal/compareValues.js');
+const isKey = require('../_internal/isKey.js');
+const toPath = require('../util/toPath.js');
+
+function orderBy(collection, criteria, orders, guard) {
+    if (collection == null) {
+        return [];
+    }
+    orders = guard ? undefined : orders;
+    if (!Array.isArray(collection)) {
+        collection = Object.values(collection);
+    }
+    if (!Array.isArray(criteria)) {
+        criteria = criteria == null ? [null] : [criteria];
+    }
+    if (criteria.length === 0) {
+        criteria = [null];
+    }
+    if (!Array.isArray(orders)) {
+        orders = orders == null ? [] : [orders];
+    }
+    orders = orders.map(order => String(order));
+    const getValueByNestedPath = (object, path) => {
+        let target = object;
+        for (let i = 0; i < path.length && target != null; ++i) {
+            target = target[path[i]];
+        }
+        return target;
+    };
+    const getValueByCriterion = (criterion, object) => {
+        if (object == null || criterion == null) {
+            return object;
+        }
+        if (typeof criterion === 'object' && 'key' in criterion) {
+            if (Object.hasOwn(object, criterion.key)) {
+                return object[criterion.key];
+            }
+            return getValueByNestedPath(object, criterion.path);
+        }
+        if (typeof criterion === 'function') {
+            return criterion(object);
+        }
+        if (Array.isArray(criterion)) {
+            return getValueByNestedPath(object, criterion);
+        }
+        if (typeof object === 'object') {
+            return object[criterion];
+        }
+        return object;
+    };
+    const preparedCriteria = criteria.map((criterion) => {
+        if (Array.isArray(criterion) && criterion.length === 1) {
+            criterion = criterion[0];
+        }
+        if (criterion == null || typeof criterion === 'function' || Array.isArray(criterion) || isKey.isKey(criterion)) {
+            return criterion;
+        }
+        return { key: criterion, path: toPath.toPath(criterion) };
+    });
+    const preparedCollection = collection.map(item => ({
+        original: item,
+        criteria: preparedCriteria.map((criterion) => getValueByCriterion(criterion, item)),
+    }));
+    return preparedCollection
+        .slice()
+        .sort((a, b) => {
+        for (let i = 0; i < preparedCriteria.length; i++) {
+            const comparedResult = compareValues.compareValues(a.criteria[i], b.criteria[i], orders[i]);
+            if (comparedResult !== 0) {
+                return comparedResult;
+            }
+        }
+        return 0;
+    })
+        .map(item => item.original);
+}
+
+exports.orderBy = orderBy;
Index: node_modules/es-toolkit/dist/compat/array/orderBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/orderBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/orderBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,78 @@
+import { compareValues } from '../_internal/compareValues.mjs';
+import { isKey } from '../_internal/isKey.mjs';
+import { toPath } from '../util/toPath.mjs';
+
+function orderBy(collection, criteria, orders, guard) {
+    if (collection == null) {
+        return [];
+    }
+    orders = guard ? undefined : orders;
+    if (!Array.isArray(collection)) {
+        collection = Object.values(collection);
+    }
+    if (!Array.isArray(criteria)) {
+        criteria = criteria == null ? [null] : [criteria];
+    }
+    if (criteria.length === 0) {
+        criteria = [null];
+    }
+    if (!Array.isArray(orders)) {
+        orders = orders == null ? [] : [orders];
+    }
+    orders = orders.map(order => String(order));
+    const getValueByNestedPath = (object, path) => {
+        let target = object;
+        for (let i = 0; i < path.length && target != null; ++i) {
+            target = target[path[i]];
+        }
+        return target;
+    };
+    const getValueByCriterion = (criterion, object) => {
+        if (object == null || criterion == null) {
+            return object;
+        }
+        if (typeof criterion === 'object' && 'key' in criterion) {
+            if (Object.hasOwn(object, criterion.key)) {
+                return object[criterion.key];
+            }
+            return getValueByNestedPath(object, criterion.path);
+        }
+        if (typeof criterion === 'function') {
+            return criterion(object);
+        }
+        if (Array.isArray(criterion)) {
+            return getValueByNestedPath(object, criterion);
+        }
+        if (typeof object === 'object') {
+            return object[criterion];
+        }
+        return object;
+    };
+    const preparedCriteria = criteria.map((criterion) => {
+        if (Array.isArray(criterion) && criterion.length === 1) {
+            criterion = criterion[0];
+        }
+        if (criterion == null || typeof criterion === 'function' || Array.isArray(criterion) || isKey(criterion)) {
+            return criterion;
+        }
+        return { key: criterion, path: toPath(criterion) };
+    });
+    const preparedCollection = collection.map(item => ({
+        original: item,
+        criteria: preparedCriteria.map((criterion) => getValueByCriterion(criterion, item)),
+    }));
+    return preparedCollection
+        .slice()
+        .sort((a, b) => {
+        for (let i = 0; i < preparedCriteria.length; i++) {
+            const comparedResult = compareValues(a.criteria[i], b.criteria[i], orders[i]);
+            if (comparedResult !== 0) {
+                return comparedResult;
+            }
+        }
+        return 0;
+    })
+        .map(item => item.original);
+}
+
+export { orderBy };
Index: node_modules/es-toolkit/dist/compat/array/partition.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/partition.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/partition.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+import { ValueIteratorTypeGuard } from '../_internal/ValueIteratorTypeGuard.mjs';
+
+/**
+ * Creates an array of elements split into two groups, the first of which contains elements
+ * predicate returns truthy for, while the second of which contains elements predicate returns falsey for.
+ * The predicate is invoked with one argument: (value).
+ *
+ * @template T, U
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {(value: T) => value is U} callback - The function invoked per iteration.
+ * @returns {[U[], Array<Exclude<T, U>>]} Returns the array of grouped elements.
+ *
+ * @example
+ * partition([1, 2, 3, 4], n => n % 2 === 0);
+ * // => [[2, 4], [1, 3]]
+ */
+declare function partition<T, U extends T>(collection: ArrayLike<T> | null | undefined, callback: ValueIteratorTypeGuard<T, U>): [U[], Array<Exclude<T, U>>];
+/**
+ * Creates an array of elements split into two groups, the first of which contains elements
+ * predicate returns truthy for, while the second of which contains elements predicate returns falsey for.
+ * The predicate is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {((value: T) => unknown) | PropertyKey | [PropertyKey, any] | Partial<T>} callback - The function invoked per iteration.
+ * @returns {[T[], T[]]} Returns the array of grouped elements.
+ *
+ * @example
+ * partition([1, 2, 3, 4], n => n % 2 === 0);
+ * // => [[2, 4], [1, 3]]
+ */
+declare function partition<T>(collection: ArrayLike<T> | null | undefined, callback: ValueIteratee<T>): [T[], T[]];
+/**
+ * Creates an array of elements split into two groups, the first of which contains elements
+ * predicate returns truthy for, while the second of which contains elements predicate returns falsey for.
+ * The predicate is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The collection to iterate over.
+ * @param {((value: T[keyof T]) => unknown) | PropertyKey | [PropertyKey, any] | Partial<T[keyof T]>} callback - The function invoked per iteration.
+ * @returns {[Array<T[keyof T]>, Array<T[keyof T]>]} Returns the array of grouped elements.
+ *
+ * @example
+ * partition({ a: 1, b: 2, c: 3 }, n => n % 2 === 0);
+ * // => [[2], [1, 3]]
+ */
+declare function partition<T extends object>(collection: T | null | undefined, callback: ValueIteratee<T[keyof T]>): [Array<T[keyof T]>, Array<T[keyof T]>];
+
+export { partition };
Index: node_modules/es-toolkit/dist/compat/array/partition.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/partition.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/partition.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+import { ValueIteratorTypeGuard } from '../_internal/ValueIteratorTypeGuard.js';
+
+/**
+ * Creates an array of elements split into two groups, the first of which contains elements
+ * predicate returns truthy for, while the second of which contains elements predicate returns falsey for.
+ * The predicate is invoked with one argument: (value).
+ *
+ * @template T, U
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {(value: T) => value is U} callback - The function invoked per iteration.
+ * @returns {[U[], Array<Exclude<T, U>>]} Returns the array of grouped elements.
+ *
+ * @example
+ * partition([1, 2, 3, 4], n => n % 2 === 0);
+ * // => [[2, 4], [1, 3]]
+ */
+declare function partition<T, U extends T>(collection: ArrayLike<T> | null | undefined, callback: ValueIteratorTypeGuard<T, U>): [U[], Array<Exclude<T, U>>];
+/**
+ * Creates an array of elements split into two groups, the first of which contains elements
+ * predicate returns truthy for, while the second of which contains elements predicate returns falsey for.
+ * The predicate is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {((value: T) => unknown) | PropertyKey | [PropertyKey, any] | Partial<T>} callback - The function invoked per iteration.
+ * @returns {[T[], T[]]} Returns the array of grouped elements.
+ *
+ * @example
+ * partition([1, 2, 3, 4], n => n % 2 === 0);
+ * // => [[2, 4], [1, 3]]
+ */
+declare function partition<T>(collection: ArrayLike<T> | null | undefined, callback: ValueIteratee<T>): [T[], T[]];
+/**
+ * Creates an array of elements split into two groups, the first of which contains elements
+ * predicate returns truthy for, while the second of which contains elements predicate returns falsey for.
+ * The predicate is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The collection to iterate over.
+ * @param {((value: T[keyof T]) => unknown) | PropertyKey | [PropertyKey, any] | Partial<T[keyof T]>} callback - The function invoked per iteration.
+ * @returns {[Array<T[keyof T]>, Array<T[keyof T]>]} Returns the array of grouped elements.
+ *
+ * @example
+ * partition({ a: 1, b: 2, c: 3 }, n => n % 2 === 0);
+ * // => [[2], [1, 3]]
+ */
+declare function partition<T extends object>(collection: T | null | undefined, callback: ValueIteratee<T[keyof T]>): [Array<T[keyof T]>, Array<T[keyof T]>];
+
+export { partition };
Index: node_modules/es-toolkit/dist/compat/array/partition.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/partition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/partition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const iteratee = require('../util/iteratee.js');
+
+function partition(source, predicate = identity.identity) {
+    if (!source) {
+        return [[], []];
+    }
+    const collection = isArrayLike.isArrayLike(source) ? source : Object.values(source);
+    predicate = iteratee.iteratee(predicate);
+    const matched = [];
+    const unmatched = [];
+    for (let i = 0; i < collection.length; i++) {
+        const value = collection[i];
+        if (predicate(value)) {
+            matched.push(value);
+        }
+        else {
+            unmatched.push(value);
+        }
+    }
+    return [matched, unmatched];
+}
+
+exports.partition = partition;
Index: node_modules/es-toolkit/dist/compat/array/partition.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/partition.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/partition.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import { identity } from '../../function/identity.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function partition(source, predicate = identity) {
+    if (!source) {
+        return [[], []];
+    }
+    const collection = isArrayLike(source) ? source : Object.values(source);
+    predicate = iteratee(predicate);
+    const matched = [];
+    const unmatched = [];
+    for (let i = 0; i < collection.length; i++) {
+        const value = collection[i];
+        if (predicate(value)) {
+            matched.push(value);
+        }
+        else {
+            unmatched.push(value);
+        }
+    }
+    return [matched, unmatched];
+}
+
+export { partition };
Index: node_modules/es-toolkit/dist/compat/array/pull.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pull.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pull.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Removes all provided values from array using SameValueZero for equality comparisons.
+ *
+ * **Note:** Unlike `_.without`, this method mutates `array`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {...T[]} values - The values to remove.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * pull(array, 2, 3);
+ * console.log(array);
+ * // => [1, 1]
+ */
+declare function pull<T>(array: T[], ...values: T[]): T[];
+/**
+ * Removes all provided values from array using SameValueZero for equality comparisons.
+ *
+ * **Note:** Unlike `_.without`, this method mutates `array`.
+ *
+ * @template L
+ * @param {L} array - The array to modify.
+ * @param {...L[0][]} values - The values to remove.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * pull(array, 2, 3);
+ * console.log(array);
+ * // => [1, 1]
+ */
+declare function pull<L extends ArrayLike<any>>(array: L extends readonly any[] ? never : L, ...values: Array<L[0]>): L;
+
+export { pull };
Index: node_modules/es-toolkit/dist/compat/array/pull.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Removes all provided values from array using SameValueZero for equality comparisons.
+ *
+ * **Note:** Unlike `_.without`, this method mutates `array`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {...T[]} values - The values to remove.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * pull(array, 2, 3);
+ * console.log(array);
+ * // => [1, 1]
+ */
+declare function pull<T>(array: T[], ...values: T[]): T[];
+/**
+ * Removes all provided values from array using SameValueZero for equality comparisons.
+ *
+ * **Note:** Unlike `_.without`, this method mutates `array`.
+ *
+ * @template L
+ * @param {L} array - The array to modify.
+ * @param {...L[0][]} values - The values to remove.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * pull(array, 2, 3);
+ * console.log(array);
+ * // => [1, 1]
+ */
+declare function pull<L extends ArrayLike<any>>(array: L extends readonly any[] ? never : L, ...values: Array<L[0]>): L;
+
+export { pull };
Index: node_modules/es-toolkit/dist/compat/array/pull.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const pull$1 = require('../../array/pull.js');
+
+function pull(arr, ...valuesToRemove) {
+    return pull$1.pull(arr, valuesToRemove);
+}
+
+exports.pull = pull;
Index: node_modules/es-toolkit/dist/compat/array/pull.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pull.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pull.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { pull as pull$1 } from '../../array/pull.mjs';
+
+function pull(arr, ...valuesToRemove) {
+    return pull$1(arr, valuesToRemove);
+}
+
+export { pull };
Index: node_modules/es-toolkit/dist/compat/array/pullAll.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAll.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAll.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+import { MutableList } from '../_internal/MutableList.d.mjs';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.mjs';
+
+/**
+ * This method is like `_.pull` except that it accepts an array of values to remove.
+ *
+ * **Note:** Unlike `_.difference`, this method mutates `array`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<T>} [values] - The values to remove.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * pullAll(array, [2, 3]);
+ * console.log(array);
+ * // => [1, 1]
+ */
+declare function pullAll<T>(array: T[], values?: ArrayLike<T>): T[];
+/**
+ * This method is like `_.pull` except that it accepts an array of values to remove.
+ *
+ * **Note:** Unlike `_.difference`, this method mutates `array`.
+ *
+ * @template L
+ * @param {RejectReadonly<L>} array - The array to modify.
+ * @param {List<L[0]>} [values] - The values to remove.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * pullAll(array, [2, 3]);
+ * console.log(array);
+ * // => [1, 1]
+ */
+declare function pullAll<L extends MutableList<any>>(array: RejectReadonly<L>, values?: ArrayLike<L[0]>): L;
+
+export { pullAll };
Index: node_modules/es-toolkit/dist/compat/array/pullAll.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAll.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAll.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+import { MutableList } from '../_internal/MutableList.d.js';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.js';
+
+/**
+ * This method is like `_.pull` except that it accepts an array of values to remove.
+ *
+ * **Note:** Unlike `_.difference`, this method mutates `array`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<T>} [values] - The values to remove.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * pullAll(array, [2, 3]);
+ * console.log(array);
+ * // => [1, 1]
+ */
+declare function pullAll<T>(array: T[], values?: ArrayLike<T>): T[];
+/**
+ * This method is like `_.pull` except that it accepts an array of values to remove.
+ *
+ * **Note:** Unlike `_.difference`, this method mutates `array`.
+ *
+ * @template L
+ * @param {RejectReadonly<L>} array - The array to modify.
+ * @param {List<L[0]>} [values] - The values to remove.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * pullAll(array, [2, 3]);
+ * console.log(array);
+ * // => [1, 1]
+ */
+declare function pullAll<L extends MutableList<any>>(array: RejectReadonly<L>, values?: ArrayLike<L[0]>): L;
+
+export { pullAll };
Index: node_modules/es-toolkit/dist/compat/array/pullAll.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAll.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAll.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const pull = require('../../array/pull.js');
+
+function pullAll(arr, valuesToRemove = []) {
+    return pull.pull(arr, Array.from(valuesToRemove));
+}
+
+exports.pullAll = pullAll;
Index: node_modules/es-toolkit/dist/compat/array/pullAll.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAll.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAll.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { pull } from '../../array/pull.mjs';
+
+function pullAll(arr, valuesToRemove = []) {
+    return pull(arr, Array.from(valuesToRemove));
+}
+
+export { pullAll };
Index: node_modules/es-toolkit/dist/compat/array/pullAllBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAllBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAllBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+import { MutableList } from '../_internal/MutableList.d.mjs';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.mjs';
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Removes all specified values from an array using an iteratee function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `differenceBy`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<T>} [values] - The values to remove.
+ * @param {((value: T) => unknown) | PropertyKey | [PropertyKey, any] | Partial<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+declare function pullAllBy<T>(array: T[], values?: ArrayLike<T>, iteratee?: ValueIteratee<T>): T[];
+/**
+ * Removes all specified values from an array using an iteratee function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `differenceBy`.
+ *
+ * @template L
+ * @param {RejectReadonly<L>} array - The array to modify.
+ * @param {ArrayLike<L[0]>} [values] - The values to remove.
+ * @param {ValueIteratee<L[0]>} [iteratee] - The iteratee invoked per element.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+declare function pullAllBy<L extends MutableList<any>>(array: RejectReadonly<L>, values?: ArrayLike<L[0]>, iteratee?: ValueIteratee<L[0]>): L;
+/**
+ * Removes all specified values from an array using an iteratee function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `differenceBy`.
+ *
+ * @template T, U
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<U>} values - The values to remove.
+ * @param {((value: T | U) => unknown) | PropertyKey | [PropertyKey, any] | Partial<T | U>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+declare function pullAllBy<T, U>(array: T[], values: ArrayLike<U>, iteratee: ValueIteratee<T | U>): T[];
+/**
+ * Removes all specified values from an array using an iteratee function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `differenceBy`.
+ *
+ * @template L, U
+ * @param {L} array - The array to modify.
+ * @param {ArrayLike<U>} values - The values to remove.
+ * @param {((value: L[0] | U) => unknown) | PropertyKey | [PropertyKey, any] | Partial<L[0] | U>} iteratee - The iteratee invoked per element.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+declare function pullAllBy<L extends ArrayLike<any>, U>(array: L extends readonly any[] ? never : L, values: ArrayLike<U>, iteratee: ValueIteratee<L[0] | U>): L;
+
+export { pullAllBy };
Index: node_modules/es-toolkit/dist/compat/array/pullAllBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAllBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAllBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+import { MutableList } from '../_internal/MutableList.d.js';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.js';
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Removes all specified values from an array using an iteratee function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `differenceBy`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<T>} [values] - The values to remove.
+ * @param {((value: T) => unknown) | PropertyKey | [PropertyKey, any] | Partial<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+declare function pullAllBy<T>(array: T[], values?: ArrayLike<T>, iteratee?: ValueIteratee<T>): T[];
+/**
+ * Removes all specified values from an array using an iteratee function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `differenceBy`.
+ *
+ * @template L
+ * @param {RejectReadonly<L>} array - The array to modify.
+ * @param {ArrayLike<L[0]>} [values] - The values to remove.
+ * @param {ValueIteratee<L[0]>} [iteratee] - The iteratee invoked per element.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+declare function pullAllBy<L extends MutableList<any>>(array: RejectReadonly<L>, values?: ArrayLike<L[0]>, iteratee?: ValueIteratee<L[0]>): L;
+/**
+ * Removes all specified values from an array using an iteratee function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `differenceBy`.
+ *
+ * @template T, U
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<U>} values - The values to remove.
+ * @param {((value: T | U) => unknown) | PropertyKey | [PropertyKey, any] | Partial<T | U>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+declare function pullAllBy<T, U>(array: T[], values: ArrayLike<U>, iteratee: ValueIteratee<T | U>): T[];
+/**
+ * Removes all specified values from an array using an iteratee function.
+ *
+ * This function changes `arr` in place.
+ * If you want to remove values without modifying the original array, use `differenceBy`.
+ *
+ * @template L, U
+ * @param {L} array - The array to modify.
+ * @param {ArrayLike<U>} values - The values to remove.
+ * @param {((value: L[0] | U) => unknown) | PropertyKey | [PropertyKey, any] | Partial<L[0] | U>} iteratee - The iteratee invoked per element.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+declare function pullAllBy<L extends ArrayLike<any>, U>(array: L extends readonly any[] ? never : L, values: ArrayLike<U>, iteratee: ValueIteratee<L[0] | U>): L;
+
+export { pullAllBy };
Index: node_modules/es-toolkit/dist/compat/array/pullAllBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAllBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAllBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const iteratee = require('../util/iteratee.js');
+
+function pullAllBy(arr, valuesToRemove, _getValue) {
+    const getValue = iteratee.iteratee(_getValue);
+    const valuesSet = new Set(Array.from(valuesToRemove).map(x => getValue(x)));
+    let resultIndex = 0;
+    for (let i = 0; i < arr.length; i++) {
+        const value = getValue(arr[i]);
+        if (valuesSet.has(value)) {
+            continue;
+        }
+        if (!Object.hasOwn(arr, i)) {
+            delete arr[resultIndex++];
+            continue;
+        }
+        arr[resultIndex++] = arr[i];
+    }
+    arr.length = resultIndex;
+    return arr;
+}
+
+exports.pullAllBy = pullAllBy;
Index: node_modules/es-toolkit/dist/compat/array/pullAllBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAllBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAllBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { iteratee } from '../util/iteratee.mjs';
+
+function pullAllBy(arr, valuesToRemove, _getValue) {
+    const getValue = iteratee(_getValue);
+    const valuesSet = new Set(Array.from(valuesToRemove).map(x => getValue(x)));
+    let resultIndex = 0;
+    for (let i = 0; i < arr.length; i++) {
+        const value = getValue(arr[i]);
+        if (valuesSet.has(value)) {
+            continue;
+        }
+        if (!Object.hasOwn(arr, i)) {
+            delete arr[resultIndex++];
+            continue;
+        }
+        arr[resultIndex++] = arr[i];
+    }
+    arr.length = resultIndex;
+    return arr;
+}
+
+export { pullAllBy };
Index: node_modules/es-toolkit/dist/compat/array/pullAllWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAllWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAllWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,89 @@
+import { MutableList } from '../_internal/MutableList.d.mjs';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.mjs';
+
+/**
+ * This method is like `_.pullAll` except that it accepts `comparator` which is
+ * invoked to compare elements of array to values. The comparator is invoked with
+ * two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<T>} [values] - The values to remove.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+declare function pullAllWith<T>(array: T[], values?: ArrayLike<T>, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `_.pullAll` except that it accepts `comparator` which is
+ * invoked to compare elements of array to values. The comparator is invoked with
+ * two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @template L
+ * @param {RejectReadonly<L>} array - The array to modify.
+ * @param {List<L[0]>} [values] - The values to remove.
+ * @param {Comparator<L[0]>} [comparator] - The comparator invoked per element.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+declare function pullAllWith<L extends MutableList<any>>(array: RejectReadonly<L>, values?: ArrayLike<L[0]>, comparator?: (a: L[0], b: L[0]) => boolean): L;
+/**
+ * This method is like `_.pullAll` except that it accepts `comparator` which is
+ * invoked to compare elements of array to values. The comparator is invoked with
+ * two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @template T, U
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<U>} values - The values to remove.
+ * @param {(a: T, b: U) => boolean} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+declare function pullAllWith<T, U>(array: T[], values: ArrayLike<U>, comparator: (a: T, b: U) => boolean): T[];
+/**
+ * This method is like `_.pullAll` except that it accepts `comparator` which is
+ * invoked to compare elements of array to values. The comparator is invoked with
+ * two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @template L1, L2
+ * @param {RejectReadonly<L1>} array - The array to modify.
+ * @param {List<L2>} values - The values to remove.
+ * @param {Comparator2<L1[0], L2>} comparator - The comparator invoked per element.
+ * @returns {L1} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+declare function pullAllWith<L1 extends MutableList<any>, L2>(array: RejectReadonly<L1>, values: ArrayLike<L2>, comparator: (a: L1[0], b: L2) => boolean): L1;
+
+export { pullAllWith };
Index: node_modules/es-toolkit/dist/compat/array/pullAllWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAllWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAllWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,89 @@
+import { MutableList } from '../_internal/MutableList.d.js';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.js';
+
+/**
+ * This method is like `_.pullAll` except that it accepts `comparator` which is
+ * invoked to compare elements of array to values. The comparator is invoked with
+ * two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<T>} [values] - The values to remove.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+declare function pullAllWith<T>(array: T[], values?: ArrayLike<T>, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `_.pullAll` except that it accepts `comparator` which is
+ * invoked to compare elements of array to values. The comparator is invoked with
+ * two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @template L
+ * @param {RejectReadonly<L>} array - The array to modify.
+ * @param {List<L[0]>} [values] - The values to remove.
+ * @param {Comparator<L[0]>} [comparator] - The comparator invoked per element.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+declare function pullAllWith<L extends MutableList<any>>(array: RejectReadonly<L>, values?: ArrayLike<L[0]>, comparator?: (a: L[0], b: L[0]) => boolean): L;
+/**
+ * This method is like `_.pullAll` except that it accepts `comparator` which is
+ * invoked to compare elements of array to values. The comparator is invoked with
+ * two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @template T, U
+ * @param {T[]} array - The array to modify.
+ * @param {ArrayLike<U>} values - The values to remove.
+ * @param {(a: T, b: U) => boolean} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+declare function pullAllWith<T, U>(array: T[], values: ArrayLike<U>, comparator: (a: T, b: U) => boolean): T[];
+/**
+ * This method is like `_.pullAll` except that it accepts `comparator` which is
+ * invoked to compare elements of array to values. The comparator is invoked with
+ * two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @template L1, L2
+ * @param {RejectReadonly<L1>} array - The array to modify.
+ * @param {List<L2>} values - The values to remove.
+ * @param {Comparator2<L1[0], L2>} comparator - The comparator invoked per element.
+ * @returns {L1} Returns `array`.
+ *
+ * @example
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+declare function pullAllWith<L1 extends MutableList<any>, L2>(array: RejectReadonly<L1>, values: ArrayLike<L2>, comparator: (a: L1[0], b: L2) => boolean): L1;
+
+export { pullAllWith };
Index: node_modules/es-toolkit/dist/compat/array/pullAllWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAllWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAllWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const copyArray = require('../_internal/copyArray.js');
+const eq = require('../util/eq.js');
+
+function pullAllWith(array, values, comparator) {
+    if (array?.length == null || values?.length == null) {
+        return array;
+    }
+    if (array === values) {
+        values = copyArray(values);
+    }
+    let resultLength = 0;
+    if (comparator == null) {
+        comparator = (a, b) => eq.eq(a, b);
+    }
+    const valuesArray = Array.isArray(values) ? values : Array.from(values);
+    const hasUndefined = valuesArray.includes(undefined);
+    for (let i = 0; i < array.length; i++) {
+        if (i in array) {
+            const shouldRemove = valuesArray.some(value => comparator(array[i], value));
+            if (!shouldRemove) {
+                array[resultLength++] = array[i];
+            }
+            continue;
+        }
+        if (!hasUndefined) {
+            delete array[resultLength++];
+        }
+    }
+    array.length = resultLength;
+    return array;
+}
+
+exports.pullAllWith = pullAllWith;
Index: node_modules/es-toolkit/dist/compat/array/pullAllWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAllWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAllWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import copyArray from '../_internal/copyArray.mjs';
+import { eq } from '../util/eq.mjs';
+
+function pullAllWith(array, values, comparator) {
+    if (array?.length == null || values?.length == null) {
+        return array;
+    }
+    if (array === values) {
+        values = copyArray(values);
+    }
+    let resultLength = 0;
+    if (comparator == null) {
+        comparator = (a, b) => eq(a, b);
+    }
+    const valuesArray = Array.isArray(values) ? values : Array.from(values);
+    const hasUndefined = valuesArray.includes(undefined);
+    for (let i = 0; i < array.length; i++) {
+        if (i in array) {
+            const shouldRemove = valuesArray.some(value => comparator(array[i], value));
+            if (!shouldRemove) {
+                array[resultLength++] = array[i];
+            }
+            continue;
+        }
+        if (!hasUndefined) {
+            delete array[resultLength++];
+        }
+    }
+    array.length = resultLength;
+    return array;
+}
+
+export { pullAllWith };
Index: node_modules/es-toolkit/dist/compat/array/pullAt.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import { Many } from '../_internal/Many.mjs';
+import { MutableList } from '../_internal/MutableList.d.mjs';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.mjs';
+
+/**
+ * Removes elements from array corresponding to the given indexes and returns an array of the removed elements.
+ * Indexes may be specified as an array of indexes or as individual arguments.
+ *
+ * **Note:** Unlike `_.at`, this method mutates `array`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {...Array<number | number[]>} indexes - The indexes of elements to remove, specified as individual indexes or arrays of indexes.
+ * @returns {T[]} Returns the new array of removed elements.
+ *
+ * @example
+ * var array = [5, 10, 15, 20];
+ * var evens = pullAt(array, 1, 3);
+ *
+ * console.log(array);
+ * // => [5, 15]
+ *
+ * console.log(evens);
+ * // => [10, 20]
+ */
+declare function pullAt<T>(array: T[], ...indexes: Array<Many<number>>): T[];
+/**
+ * Removes elements from array corresponding to the given indexes and returns an array of the removed elements.
+ * Indexes may be specified as an array of indexes or as individual arguments.
+ *
+ * **Note:** Unlike `_.at`, this method mutates `array`.
+ *
+ * @template L
+ * @param {L} array - The array to modify.
+ * @param {...Array<number | number[]>} indexes - The indexes of elements to remove, specified as individual indexes or arrays of indexes.
+ * @returns {L} Returns the new array of removed elements.
+ *
+ * @example
+ * var array = [5, 10, 15, 20];
+ * var evens = pullAt(array, 1, 3);
+ *
+ * console.log(array);
+ * // => [5, 15]
+ *
+ * console.log(evens);
+ * // => [10, 20]
+ */
+declare function pullAt<L extends MutableList<any>>(array: RejectReadonly<L>, ...indexes: Array<Many<number>>): L;
+
+export { pullAt };
Index: node_modules/es-toolkit/dist/compat/array/pullAt.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import { Many } from '../_internal/Many.js';
+import { MutableList } from '../_internal/MutableList.d.js';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.js';
+
+/**
+ * Removes elements from array corresponding to the given indexes and returns an array of the removed elements.
+ * Indexes may be specified as an array of indexes or as individual arguments.
+ *
+ * **Note:** Unlike `_.at`, this method mutates `array`.
+ *
+ * @template T
+ * @param {T[]} array - The array to modify.
+ * @param {...Array<number | number[]>} indexes - The indexes of elements to remove, specified as individual indexes or arrays of indexes.
+ * @returns {T[]} Returns the new array of removed elements.
+ *
+ * @example
+ * var array = [5, 10, 15, 20];
+ * var evens = pullAt(array, 1, 3);
+ *
+ * console.log(array);
+ * // => [5, 15]
+ *
+ * console.log(evens);
+ * // => [10, 20]
+ */
+declare function pullAt<T>(array: T[], ...indexes: Array<Many<number>>): T[];
+/**
+ * Removes elements from array corresponding to the given indexes and returns an array of the removed elements.
+ * Indexes may be specified as an array of indexes or as individual arguments.
+ *
+ * **Note:** Unlike `_.at`, this method mutates `array`.
+ *
+ * @template L
+ * @param {L} array - The array to modify.
+ * @param {...Array<number | number[]>} indexes - The indexes of elements to remove, specified as individual indexes or arrays of indexes.
+ * @returns {L} Returns the new array of removed elements.
+ *
+ * @example
+ * var array = [5, 10, 15, 20];
+ * var evens = pullAt(array, 1, 3);
+ *
+ * console.log(array);
+ * // => [5, 15]
+ *
+ * console.log(evens);
+ * // => [10, 20]
+ */
+declare function pullAt<L extends MutableList<any>>(array: RejectReadonly<L>, ...indexes: Array<Many<number>>): L;
+
+export { pullAt };
Index: node_modules/es-toolkit/dist/compat/array/pullAt.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flattenDepth = require('./flattenDepth.js');
+const isIndex = require('../_internal/isIndex.js');
+const isKey = require('../_internal/isKey.js');
+const toKey = require('../_internal/toKey.js');
+const at = require('../object/at.js');
+const unset = require('../object/unset.js');
+const isArray = require('../predicate/isArray.js');
+const toPath = require('../util/toPath.js');
+
+function pullAt(array, ..._indices) {
+    const indices = flattenDepth.flattenDepth(_indices, 1);
+    if (!array) {
+        return Array(indices.length);
+    }
+    const result = at.at(array, indices);
+    const indicesToPull = indices
+        .map(index => (isIndex.isIndex(index, array.length) ? Number(index) : index))
+        .sort((a, b) => b - a);
+    for (const index of new Set(indicesToPull)) {
+        if (isIndex.isIndex(index, array.length)) {
+            Array.prototype.splice.call(array, index, 1);
+            continue;
+        }
+        if (isKey.isKey(index, array)) {
+            delete array[toKey.toKey(index)];
+            continue;
+        }
+        const path = isArray.isArray(index) ? index : toPath.toPath(index);
+        unset.unset(array, path);
+    }
+    return result;
+}
+
+exports.pullAt = pullAt;
Index: node_modules/es-toolkit/dist/compat/array/pullAt.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/pullAt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/pullAt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import { flattenDepth } from './flattenDepth.mjs';
+import { isIndex } from '../_internal/isIndex.mjs';
+import { isKey } from '../_internal/isKey.mjs';
+import { toKey } from '../_internal/toKey.mjs';
+import { at } from '../object/at.mjs';
+import { unset } from '../object/unset.mjs';
+import { isArray } from '../predicate/isArray.mjs';
+import { toPath } from '../util/toPath.mjs';
+
+function pullAt(array, ..._indices) {
+    const indices = flattenDepth(_indices, 1);
+    if (!array) {
+        return Array(indices.length);
+    }
+    const result = at(array, indices);
+    const indicesToPull = indices
+        .map(index => (isIndex(index, array.length) ? Number(index) : index))
+        .sort((a, b) => b - a);
+    for (const index of new Set(indicesToPull)) {
+        if (isIndex(index, array.length)) {
+            Array.prototype.splice.call(array, index, 1);
+            continue;
+        }
+        if (isKey(index, array)) {
+            delete array[toKey(index)];
+            continue;
+        }
+        const path = isArray(index) ? index : toPath(index);
+        unset(array, path);
+    }
+    return result;
+}
+
+export { pullAt };
Index: node_modules/es-toolkit/dist/compat/array/reduce.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reduce.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reduce.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+import { MemoListIterator } from '../_internal/MemoListIterator.mjs';
+import { MemoObjectIterator } from '../_internal/MemoObjectIterator.mjs';
+
+/**
+ * Reduces an array to a single value using an iteratee function.
+ *
+ * @param {T[] | null | undefined} collection - The array to iterate over
+ * @param {MemoListIterator<T, U, T[]>} callback - The function invoked per iteration
+ * @param {U} accumulator - The initial value
+ * @returns {U} Returns the accumulated value
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * reduce(array, (acc, value) => acc + value, 0); // => 6
+ */
+declare function reduce<T, U>(collection: T[] | null | undefined, callback: MemoListIterator<T, U, T[]>, accumulator: U): U;
+/**
+ * Reduces an array-like object to a single value using an iteratee function.
+ *
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like object to iterate over
+ * @param {MemoListIterator<T, U, ArrayLike<T>>} callback - The function invoked per iteration
+ * @param {U} accumulator - The initial value
+ * @returns {U} Returns the accumulated value
+ *
+ * @example
+ * const arrayLike = {0: 1, 1: 2, 2: 3, length: 3};
+ * reduce(arrayLike, (acc, value) => acc + value, 0); // => 6
+ */
+declare function reduce<T, U>(collection: ArrayLike<T> | null | undefined, callback: MemoListIterator<T, U, ArrayLike<T>>, accumulator: U): U;
+/**
+ * Reduces an object to a single value using an iteratee function.
+ *
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {MemoObjectIterator<T[keyof T], U, T>} callback - The function invoked per iteration
+ * @param {U} accumulator - The initial value
+ * @returns {U} Returns the accumulated value
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * reduce(obj, (acc, value) => acc + value, 0); // => 6
+ */
+declare function reduce<T extends object, U>(collection: T | null | undefined, callback: MemoObjectIterator<T[keyof T], U, T>, accumulator: U): U;
+/**
+ * Reduces an array to a single value using an iteratee function.
+ *
+ * @param {T[] | null | undefined} collection - The array to iterate over
+ * @param {MemoListIterator<T, T, T[]>} callback - The function invoked per iteration
+ * @returns {T | undefined} Returns the accumulated value
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * reduce(array, (acc, value) => acc + value); // => 6
+ */
+declare function reduce<T>(collection: T[] | null | undefined, callback: MemoListIterator<T, T, T[]>): T | undefined;
+/**
+ * Reduces an array-like object to a single value using an iteratee function.
+ *
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like object to iterate over
+ * @param {MemoListIterator<T, T, ArrayLike<T>>} callback - The function invoked per iteration
+ * @returns {T | undefined} Returns the accumulated value
+ *
+ * @example
+ * const arrayLike = {0: 1, 1: 2, 2: 3, length: 3};
+ * reduce(arrayLike, (acc, value) => acc + value); // => 6
+ */
+declare function reduce<T>(collection: ArrayLike<T> | null | undefined, callback: MemoListIterator<T, T, ArrayLike<T>>): T | undefined;
+/**
+ * Reduces an object to a single value using an iteratee function.
+ *
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {MemoObjectIterator<T[keyof T], T[keyof T], T>} callback - The function invoked per iteration
+ * @returns {T[keyof T] | undefined} Returns the accumulated value
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * reduce(obj, (acc, value) => acc + value); // => 6
+ */
+declare function reduce<T extends object>(collection: T | null | undefined, callback: MemoObjectIterator<T[keyof T], T[keyof T], T>): T[keyof T] | undefined;
+
+export { reduce };
Index: node_modules/es-toolkit/dist/compat/array/reduce.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reduce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reduce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+import { MemoListIterator } from '../_internal/MemoListIterator.js';
+import { MemoObjectIterator } from '../_internal/MemoObjectIterator.js';
+
+/**
+ * Reduces an array to a single value using an iteratee function.
+ *
+ * @param {T[] | null | undefined} collection - The array to iterate over
+ * @param {MemoListIterator<T, U, T[]>} callback - The function invoked per iteration
+ * @param {U} accumulator - The initial value
+ * @returns {U} Returns the accumulated value
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * reduce(array, (acc, value) => acc + value, 0); // => 6
+ */
+declare function reduce<T, U>(collection: T[] | null | undefined, callback: MemoListIterator<T, U, T[]>, accumulator: U): U;
+/**
+ * Reduces an array-like object to a single value using an iteratee function.
+ *
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like object to iterate over
+ * @param {MemoListIterator<T, U, ArrayLike<T>>} callback - The function invoked per iteration
+ * @param {U} accumulator - The initial value
+ * @returns {U} Returns the accumulated value
+ *
+ * @example
+ * const arrayLike = {0: 1, 1: 2, 2: 3, length: 3};
+ * reduce(arrayLike, (acc, value) => acc + value, 0); // => 6
+ */
+declare function reduce<T, U>(collection: ArrayLike<T> | null | undefined, callback: MemoListIterator<T, U, ArrayLike<T>>, accumulator: U): U;
+/**
+ * Reduces an object to a single value using an iteratee function.
+ *
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {MemoObjectIterator<T[keyof T], U, T>} callback - The function invoked per iteration
+ * @param {U} accumulator - The initial value
+ * @returns {U} Returns the accumulated value
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * reduce(obj, (acc, value) => acc + value, 0); // => 6
+ */
+declare function reduce<T extends object, U>(collection: T | null | undefined, callback: MemoObjectIterator<T[keyof T], U, T>, accumulator: U): U;
+/**
+ * Reduces an array to a single value using an iteratee function.
+ *
+ * @param {T[] | null | undefined} collection - The array to iterate over
+ * @param {MemoListIterator<T, T, T[]>} callback - The function invoked per iteration
+ * @returns {T | undefined} Returns the accumulated value
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * reduce(array, (acc, value) => acc + value); // => 6
+ */
+declare function reduce<T>(collection: T[] | null | undefined, callback: MemoListIterator<T, T, T[]>): T | undefined;
+/**
+ * Reduces an array-like object to a single value using an iteratee function.
+ *
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like object to iterate over
+ * @param {MemoListIterator<T, T, ArrayLike<T>>} callback - The function invoked per iteration
+ * @returns {T | undefined} Returns the accumulated value
+ *
+ * @example
+ * const arrayLike = {0: 1, 1: 2, 2: 3, length: 3};
+ * reduce(arrayLike, (acc, value) => acc + value); // => 6
+ */
+declare function reduce<T>(collection: ArrayLike<T> | null | undefined, callback: MemoListIterator<T, T, ArrayLike<T>>): T | undefined;
+/**
+ * Reduces an object to a single value using an iteratee function.
+ *
+ * @param {T | null | undefined} collection - The object to iterate over
+ * @param {MemoObjectIterator<T[keyof T], T[keyof T], T>} callback - The function invoked per iteration
+ * @returns {T[keyof T] | undefined} Returns the accumulated value
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * reduce(obj, (acc, value) => acc + value); // => 6
+ */
+declare function reduce<T extends object>(collection: T | null | undefined, callback: MemoObjectIterator<T[keyof T], T[keyof T], T>): T[keyof T] | undefined;
+
+export { reduce };
Index: node_modules/es-toolkit/dist/compat/array/reduce.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reduce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reduce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const range = require('../../math/range.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function reduce(collection, iteratee = identity.identity, accumulator) {
+    if (!collection) {
+        return accumulator;
+    }
+    let keys;
+    let startIndex = 0;
+    if (isArrayLike.isArrayLike(collection)) {
+        keys = range.range(0, collection.length);
+        if (accumulator == null && collection.length > 0) {
+            accumulator = collection[0];
+            startIndex += 1;
+        }
+    }
+    else {
+        keys = Object.keys(collection);
+        if (accumulator == null) {
+            accumulator = collection[keys[0]];
+            startIndex += 1;
+        }
+    }
+    for (let i = startIndex; i < keys.length; i++) {
+        const key = keys[i];
+        const value = collection[key];
+        accumulator = iteratee(accumulator, value, key, collection);
+    }
+    return accumulator;
+}
+
+exports.reduce = reduce;
Index: node_modules/es-toolkit/dist/compat/array/reduce.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reduce.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reduce.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { identity } from '../../function/identity.mjs';
+import { range } from '../../math/range.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function reduce(collection, iteratee = identity, accumulator) {
+    if (!collection) {
+        return accumulator;
+    }
+    let keys;
+    let startIndex = 0;
+    if (isArrayLike(collection)) {
+        keys = range(0, collection.length);
+        if (accumulator == null && collection.length > 0) {
+            accumulator = collection[0];
+            startIndex += 1;
+        }
+    }
+    else {
+        keys = Object.keys(collection);
+        if (accumulator == null) {
+            accumulator = collection[keys[0]];
+            startIndex += 1;
+        }
+    }
+    for (let i = startIndex; i < keys.length; i++) {
+        const key = keys[i];
+        const value = collection[key];
+        accumulator = iteratee(accumulator, value, key, collection);
+    }
+    return accumulator;
+}
+
+export { reduce };
Index: node_modules/es-toolkit/dist/compat/array/reduceRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reduceRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reduceRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,118 @@
+import { MemoListIterator } from '../_internal/MemoListIterator.mjs';
+import { MemoObjectIterator } from '../_internal/MemoObjectIterator.mjs';
+
+/**
+ * Reduces an array to a single value using an iteratee function, starting from the right.
+ *
+ * The `reduceRight()` function goes through each element in an array from right to left and applies a special function (called a "reducer") to them, one by one.
+ * This function takes the result of the previous step and the current element to perform a calculation.
+ * After going through all the elements, the function gives you one final result.
+ *
+ * When the `reduceRight()` function starts, there's no previous result to use.
+ * If you provide an initial value, it starts with that.
+ * If not, it uses the last element of the array and begins with the second to last element for the calculation.
+ *
+ * The `reduceRight()` function goes through each element in an array from right to left and applies a special function (called a "reducer") to them, one by one.
+ * This function takes the result of the previous step and the current element to perform a calculation.
+ * After going through all the elements, the function gives you one final result.
+ *
+ * When the `reduceRight()` function starts, there's no previous result to use.
+ * If you provide an initial value, it starts with that.
+ * If not, it uses the last element of the array and begins with the second to last element for the calculation.
+ *
+ * @template T, U
+ * @param {T[] | null | undefined} collection - The array to iterate over.
+ * @param {MemoListIterator<T, U, T[]>} callback - The function invoked per iteration.
+ * @param {U} accumulator - The initial value.
+ * @returns {U} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight([1, 2, 3], (acc, value) => acc + value, 0);
+ * // => 6
+ */
+declare function reduceRight<T, U>(collection: T[] | null | undefined, callback: MemoListIterator<T, U, T[]>, accumulator: U): U;
+/**
+ * Reduces an array-like collection to a single value using an iteratee function, starting from the right.
+ *
+ * @template T, U
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like collection to iterate over.
+ * @param {MemoListIterator<T, U, ArrayLike<T>>} callback - The function invoked per iteration.
+ * @param {U} accumulator - The initial value.
+ * @returns {U} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight([1, 2, 3], (acc, value) => acc + value, 0);
+ * // => 6
+ */
+declare function reduceRight<T, U>(collection: ArrayLike<T> | null | undefined, callback: MemoListIterator<T, U, ArrayLike<T>>, accumulator: U): U;
+/**
+ * Reduces an object to a single value using an iteratee function, starting from the right.
+ *
+ * @template T, U
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {MemoObjectIterator<T[keyof T], U, T>} callback - The function invoked per iteration.
+ * @param {U} accumulator - The initial value.
+ * @returns {U} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight({ a: 1, b: 2, c: 3 }, (acc, value) => acc + value, 0);
+ * // => 6
+ */
+declare function reduceRight<T extends object, U>(collection: T | null | undefined, callback: MemoObjectIterator<T[keyof T], U, T>, accumulator: U): U;
+/**
+ * Reduces an array to a single value using an iteratee function, starting from the right.
+ *
+ * The `reduceRight()` function goes through each element in an array from right to left and applies a special function (called a "reducer") to them, one by one.
+ * This function takes the result of the previous step and the current element to perform a calculation.
+ * After going through all the elements, the function gives you one final result.
+ *
+ * When the `reduceRight()` function starts, there's no previous result to use.
+ * If you provide an initial value, it starts with that.
+ * If not, it uses the last element of the array and begins with the second to last element for the calculation.
+ *
+ * The `reduceRight()` function goes through each element in an array from right to left and applies a special function (called a "reducer") to them, one by one.
+ * This function takes the result of the previous step and the current element to perform a calculation.
+ * After going through all the elements, the function gives you one final result.
+ *
+ * When the `reduceRight()` function starts, there's no previous result to use.
+ * If you provide an initial value, it starts with that.
+ * If not, it uses the last element of the array and begins with the second to last element for the calculation.
+ *
+ * @template T
+ * @param {T[] | null | undefined} collection - The array to iterate over.
+ * @param {MemoListIterator<T, T, T[]>} callback - The function invoked per iteration.
+ * @returns {T | undefined} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight([1, 2, 3], (acc, value) => acc + value);
+ * // => 6
+ */
+declare function reduceRight<T>(collection: T[] | null | undefined, callback: MemoListIterator<T, T, T[]>): T | undefined;
+/**
+ * Reduces an array-like collection to a single value using an iteratee function, starting from the right.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like collection to iterate over.
+ * @param {MemoListIterator<T, T, ArrayLike<T>>} callback - The function invoked per iteration.
+ * @returns {T | undefined} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight([1, 2, 3], (acc, value) => acc + value);
+ * // => 6
+ */
+declare function reduceRight<T>(collection: ArrayLike<T> | null | undefined, callback: MemoListIterator<T, T, ArrayLike<T>>): T | undefined;
+/**
+ * Reduces an object to a single value using an iteratee function, starting from the right.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {MemoObjectIterator<T[keyof T], T[keyof T], T>} callback - The function invoked per iteration.
+ * @returns {T[keyof T] | undefined} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight({ a: 1, b: 2, c: 3 }, (acc, value) => acc + value);
+ * // => 6
+ */
+declare function reduceRight<T extends object>(collection: T | null | undefined, callback: MemoObjectIterator<T[keyof T], T[keyof T], T>): T[keyof T] | undefined;
+
+export { reduceRight };
Index: node_modules/es-toolkit/dist/compat/array/reduceRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reduceRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reduceRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,118 @@
+import { MemoListIterator } from '../_internal/MemoListIterator.js';
+import { MemoObjectIterator } from '../_internal/MemoObjectIterator.js';
+
+/**
+ * Reduces an array to a single value using an iteratee function, starting from the right.
+ *
+ * The `reduceRight()` function goes through each element in an array from right to left and applies a special function (called a "reducer") to them, one by one.
+ * This function takes the result of the previous step and the current element to perform a calculation.
+ * After going through all the elements, the function gives you one final result.
+ *
+ * When the `reduceRight()` function starts, there's no previous result to use.
+ * If you provide an initial value, it starts with that.
+ * If not, it uses the last element of the array and begins with the second to last element for the calculation.
+ *
+ * The `reduceRight()` function goes through each element in an array from right to left and applies a special function (called a "reducer") to them, one by one.
+ * This function takes the result of the previous step and the current element to perform a calculation.
+ * After going through all the elements, the function gives you one final result.
+ *
+ * When the `reduceRight()` function starts, there's no previous result to use.
+ * If you provide an initial value, it starts with that.
+ * If not, it uses the last element of the array and begins with the second to last element for the calculation.
+ *
+ * @template T, U
+ * @param {T[] | null | undefined} collection - The array to iterate over.
+ * @param {MemoListIterator<T, U, T[]>} callback - The function invoked per iteration.
+ * @param {U} accumulator - The initial value.
+ * @returns {U} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight([1, 2, 3], (acc, value) => acc + value, 0);
+ * // => 6
+ */
+declare function reduceRight<T, U>(collection: T[] | null | undefined, callback: MemoListIterator<T, U, T[]>, accumulator: U): U;
+/**
+ * Reduces an array-like collection to a single value using an iteratee function, starting from the right.
+ *
+ * @template T, U
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like collection to iterate over.
+ * @param {MemoListIterator<T, U, ArrayLike<T>>} callback - The function invoked per iteration.
+ * @param {U} accumulator - The initial value.
+ * @returns {U} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight([1, 2, 3], (acc, value) => acc + value, 0);
+ * // => 6
+ */
+declare function reduceRight<T, U>(collection: ArrayLike<T> | null | undefined, callback: MemoListIterator<T, U, ArrayLike<T>>, accumulator: U): U;
+/**
+ * Reduces an object to a single value using an iteratee function, starting from the right.
+ *
+ * @template T, U
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {MemoObjectIterator<T[keyof T], U, T>} callback - The function invoked per iteration.
+ * @param {U} accumulator - The initial value.
+ * @returns {U} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight({ a: 1, b: 2, c: 3 }, (acc, value) => acc + value, 0);
+ * // => 6
+ */
+declare function reduceRight<T extends object, U>(collection: T | null | undefined, callback: MemoObjectIterator<T[keyof T], U, T>, accumulator: U): U;
+/**
+ * Reduces an array to a single value using an iteratee function, starting from the right.
+ *
+ * The `reduceRight()` function goes through each element in an array from right to left and applies a special function (called a "reducer") to them, one by one.
+ * This function takes the result of the previous step and the current element to perform a calculation.
+ * After going through all the elements, the function gives you one final result.
+ *
+ * When the `reduceRight()` function starts, there's no previous result to use.
+ * If you provide an initial value, it starts with that.
+ * If not, it uses the last element of the array and begins with the second to last element for the calculation.
+ *
+ * The `reduceRight()` function goes through each element in an array from right to left and applies a special function (called a "reducer") to them, one by one.
+ * This function takes the result of the previous step and the current element to perform a calculation.
+ * After going through all the elements, the function gives you one final result.
+ *
+ * When the `reduceRight()` function starts, there's no previous result to use.
+ * If you provide an initial value, it starts with that.
+ * If not, it uses the last element of the array and begins with the second to last element for the calculation.
+ *
+ * @template T
+ * @param {T[] | null | undefined} collection - The array to iterate over.
+ * @param {MemoListIterator<T, T, T[]>} callback - The function invoked per iteration.
+ * @returns {T | undefined} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight([1, 2, 3], (acc, value) => acc + value);
+ * // => 6
+ */
+declare function reduceRight<T>(collection: T[] | null | undefined, callback: MemoListIterator<T, T, T[]>): T | undefined;
+/**
+ * Reduces an array-like collection to a single value using an iteratee function, starting from the right.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The array-like collection to iterate over.
+ * @param {MemoListIterator<T, T, ArrayLike<T>>} callback - The function invoked per iteration.
+ * @returns {T | undefined} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight([1, 2, 3], (acc, value) => acc + value);
+ * // => 6
+ */
+declare function reduceRight<T>(collection: ArrayLike<T> | null | undefined, callback: MemoListIterator<T, T, ArrayLike<T>>): T | undefined;
+/**
+ * Reduces an object to a single value using an iteratee function, starting from the right.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {MemoObjectIterator<T[keyof T], T[keyof T], T>} callback - The function invoked per iteration.
+ * @returns {T[keyof T] | undefined} Returns the accumulated value.
+ *
+ * @example
+ * reduceRight({ a: 1, b: 2, c: 3 }, (acc, value) => acc + value);
+ * // => 6
+ */
+declare function reduceRight<T extends object>(collection: T | null | undefined, callback: MemoObjectIterator<T[keyof T], T[keyof T], T>): T[keyof T] | undefined;
+
+export { reduceRight };
Index: node_modules/es-toolkit/dist/compat/array/reduceRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reduceRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reduceRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const range = require('../../math/range.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function reduceRight(collection, iteratee = identity.identity, accumulator) {
+    if (!collection) {
+        return accumulator;
+    }
+    let keys;
+    let startIndex;
+    if (isArrayLike.isArrayLike(collection)) {
+        keys = range.range(0, collection.length).reverse();
+        if (accumulator == null && collection.length > 0) {
+            accumulator = collection[collection.length - 1];
+            startIndex = 1;
+        }
+        else {
+            startIndex = 0;
+        }
+    }
+    else {
+        keys = Object.keys(collection).reverse();
+        if (accumulator == null) {
+            accumulator = collection[keys[0]];
+            startIndex = 1;
+        }
+        else {
+            startIndex = 0;
+        }
+    }
+    for (let i = startIndex; i < keys.length; i++) {
+        const key = keys[i];
+        const value = collection[key];
+        accumulator = iteratee(accumulator, value, key, collection);
+    }
+    return accumulator;
+}
+
+exports.reduceRight = reduceRight;
Index: node_modules/es-toolkit/dist/compat/array/reduceRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reduceRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reduceRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { identity } from '../../function/identity.mjs';
+import { range } from '../../math/range.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function reduceRight(collection, iteratee = identity, accumulator) {
+    if (!collection) {
+        return accumulator;
+    }
+    let keys;
+    let startIndex;
+    if (isArrayLike(collection)) {
+        keys = range(0, collection.length).reverse();
+        if (accumulator == null && collection.length > 0) {
+            accumulator = collection[collection.length - 1];
+            startIndex = 1;
+        }
+        else {
+            startIndex = 0;
+        }
+    }
+    else {
+        keys = Object.keys(collection).reverse();
+        if (accumulator == null) {
+            accumulator = collection[keys[0]];
+            startIndex = 1;
+        }
+        else {
+            startIndex = 0;
+        }
+    }
+    for (let i = startIndex; i < keys.length; i++) {
+        const key = keys[i];
+        const value = collection[key];
+        accumulator = iteratee(accumulator, value, key, collection);
+    }
+    return accumulator;
+}
+
+export { reduceRight };
Index: node_modules/es-toolkit/dist/compat/array/reject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.mjs';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.mjs';
+import { StringIterator } from '../_internal/StringIterator.mjs';
+
+/**
+ * Iterates over the collection and rejects elements based on the given predicate.
+ * If a function is provided, it is invoked for each element in the collection.
+ *
+ * @param {string | null | undefined} collection The string to iterate over
+ * @param {StringIterator<boolean>} [predicate] The function invoked per iteration
+ * @returns {string[]} Returns a new array of characters that do not satisfy the predicate
+ * @example
+ * reject('abc', char => char === 'b')
+ * // => ['a', 'c']
+ */
+declare function reject(collection: string | null | undefined, predicate?: StringIterator<boolean>): string[];
+/**
+ * Iterates over the collection and rejects elements based on the given predicate.
+ * If a function is provided, it is invoked for each element in the collection.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection The array-like to iterate over
+ * @param {ListIterateeCustom<T, boolean>} [predicate] The function invoked per iteration
+ * @returns {T[]} Returns a new array of elements that do not satisfy the predicate
+ * @example
+ * reject([1, 2, 3], num => num % 2 === 0)
+ * // => [1, 3]
+ *
+ * reject([{ a: 1 }, { a: 2 }, { b: 1 }], 'a')
+ * // => [{ b: 1 }]
+ */
+declare function reject<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>): T[];
+/**
+ * Iterates over the collection and rejects elements based on the given predicate.
+ * If a function is provided, it is invoked for each element in the collection.
+ *
+ * @template T
+ * @param {T | null | undefined} collection The object to iterate over
+ * @param {ObjectIterateeCustom<T, boolean>} [predicate] The function invoked per iteration
+ * @returns {Array<T[keyof T]>} Returns a new array of elements that do not satisfy the predicate
+ * @example
+ * reject({ a: 1, b: 2, c: 3 }, value => value % 2 === 0)
+ * // => [1, 3]
+ *
+ * reject({ item1: { a: 0, b: true }, item2: { a: 1, b: true }, item3: { a: 2, b: false }}, { b: false })
+ * // => [{ a: 0, b: true }, { a: 1, b: true }]
+ */
+declare function reject<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>): Array<T[keyof T]>;
+
+export { reject };
Index: node_modules/es-toolkit/dist/compat/array/reject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.js';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.js';
+import { StringIterator } from '../_internal/StringIterator.js';
+
+/**
+ * Iterates over the collection and rejects elements based on the given predicate.
+ * If a function is provided, it is invoked for each element in the collection.
+ *
+ * @param {string | null | undefined} collection The string to iterate over
+ * @param {StringIterator<boolean>} [predicate] The function invoked per iteration
+ * @returns {string[]} Returns a new array of characters that do not satisfy the predicate
+ * @example
+ * reject('abc', char => char === 'b')
+ * // => ['a', 'c']
+ */
+declare function reject(collection: string | null | undefined, predicate?: StringIterator<boolean>): string[];
+/**
+ * Iterates over the collection and rejects elements based on the given predicate.
+ * If a function is provided, it is invoked for each element in the collection.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection The array-like to iterate over
+ * @param {ListIterateeCustom<T, boolean>} [predicate] The function invoked per iteration
+ * @returns {T[]} Returns a new array of elements that do not satisfy the predicate
+ * @example
+ * reject([1, 2, 3], num => num % 2 === 0)
+ * // => [1, 3]
+ *
+ * reject([{ a: 1 }, { a: 2 }, { b: 1 }], 'a')
+ * // => [{ b: 1 }]
+ */
+declare function reject<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>): T[];
+/**
+ * Iterates over the collection and rejects elements based on the given predicate.
+ * If a function is provided, it is invoked for each element in the collection.
+ *
+ * @template T
+ * @param {T | null | undefined} collection The object to iterate over
+ * @param {ObjectIterateeCustom<T, boolean>} [predicate] The function invoked per iteration
+ * @returns {Array<T[keyof T]>} Returns a new array of elements that do not satisfy the predicate
+ * @example
+ * reject({ a: 1, b: 2, c: 3 }, value => value % 2 === 0)
+ * // => [1, 3]
+ *
+ * reject({ item1: { a: 0, b: true }, item2: { a: 1, b: true }, item3: { a: 2, b: false }}, { b: false })
+ * // => [{ a: 0, b: true }, { a: 1, b: true }]
+ */
+declare function reject<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>): Array<T[keyof T]>;
+
+export { reject };
Index: node_modules/es-toolkit/dist/compat/array/reject.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const filter = require('./filter.js');
+const identity = require('../../function/identity.js');
+const negate = require('../function/negate.js');
+const iteratee = require('../util/iteratee.js');
+
+function reject(source, predicate = identity.identity) {
+    return filter.filter(source, negate.negate(iteratee.iteratee(predicate)));
+}
+
+exports.reject = reject;
Index: node_modules/es-toolkit/dist/compat/array/reject.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { filter } from './filter.mjs';
+import { identity } from '../../function/identity.mjs';
+import { negate } from '../function/negate.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function reject(source, predicate = identity) {
+    return filter(source, negate(iteratee(predicate)));
+}
+
+export { reject };
Index: node_modules/es-toolkit/dist/compat/array/remove.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/remove.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/remove.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { ListIteratee } from '../_internal/ListIteratee.mjs';
+import { MutableList } from '../_internal/MutableList.d.mjs';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.mjs';
+
+/**
+ * Removes all elements from array that predicate returns truthy for and returns an array of the removed elements.
+ *
+ * @template L
+ * @param {RejectReadonly<L>} array - The array to modify.
+ * @param {ListIteratee<L[0]>} [predicate] - The function invoked per iteration.
+ * @returns {Array<L[0]>} Returns the new array of removed elements.
+ *
+ * @example
+ * const array = [1, 2, 3, 4];
+ * const evens = remove(array, n => n % 2 === 0);
+ * console.log(array); // => [1, 3]
+ * console.log(evens); // => [2, 4]
+ */
+declare function remove<L extends MutableList<any>>(array: RejectReadonly<L>, predicate?: ListIteratee<L[0]>): Array<L[0]>;
+
+export { remove };
Index: node_modules/es-toolkit/dist/compat/array/remove.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/remove.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/remove.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { ListIteratee } from '../_internal/ListIteratee.js';
+import { MutableList } from '../_internal/MutableList.d.js';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.js';
+
+/**
+ * Removes all elements from array that predicate returns truthy for and returns an array of the removed elements.
+ *
+ * @template L
+ * @param {RejectReadonly<L>} array - The array to modify.
+ * @param {ListIteratee<L[0]>} [predicate] - The function invoked per iteration.
+ * @returns {Array<L[0]>} Returns the new array of removed elements.
+ *
+ * @example
+ * const array = [1, 2, 3, 4];
+ * const evens = remove(array, n => n % 2 === 0);
+ * console.log(array); // => [1, 3]
+ * console.log(evens); // => [2, 4]
+ */
+declare function remove<L extends MutableList<any>>(array: RejectReadonly<L>, predicate?: ListIteratee<L[0]>): Array<L[0]>;
+
+export { remove };
Index: node_modules/es-toolkit/dist/compat/array/remove.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/remove.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/remove.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const remove$1 = require('../../array/remove.js');
+const identity = require('../../function/identity.js');
+const iteratee = require('../util/iteratee.js');
+
+function remove(arr, shouldRemoveElement = identity.identity) {
+    return remove$1.remove(arr, iteratee.iteratee(shouldRemoveElement));
+}
+
+exports.remove = remove;
Index: node_modules/es-toolkit/dist/compat/array/remove.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/remove.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/remove.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { remove as remove$1 } from '../../array/remove.mjs';
+import { identity } from '../../function/identity.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function remove(arr, shouldRemoveElement = identity) {
+    return remove$1(arr, iteratee(shouldRemoveElement));
+}
+
+export { remove };
Index: node_modules/es-toolkit/dist/compat/array/reverse.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reverse.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reverse.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import { MutableList } from '../_internal/MutableList.d.mjs';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.mjs';
+
+/**
+ * Reverses `array` so that the first element becomes the last, the second element becomes the second to last, and so on.
+ *
+ * @template L
+ * @param {L extends readonly any[] ? never : L} array - The array to reverse.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * reverse(array);
+ * // => [3, 2, 1]
+ */
+declare function reverse<L extends MutableList<any>>(array: RejectReadonly<L>): L;
+
+export { reverse };
Index: node_modules/es-toolkit/dist/compat/array/reverse.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reverse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reverse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import { MutableList } from '../_internal/MutableList.d.js';
+import { RejectReadonly } from '../_internal/RejectReadonly.d.js';
+
+/**
+ * Reverses `array` so that the first element becomes the last, the second element becomes the second to last, and so on.
+ *
+ * @template L
+ * @param {L extends readonly any[] ? never : L} array - The array to reverse.
+ * @returns {L} Returns `array`.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * reverse(array);
+ * // => [3, 2, 1]
+ */
+declare function reverse<L extends MutableList<any>>(array: RejectReadonly<L>): L;
+
+export { reverse };
Index: node_modules/es-toolkit/dist/compat/array/reverse.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function reverse(array) {
+    if (array == null) {
+        return array;
+    }
+    return array.reverse();
+}
+
+exports.reverse = reverse;
Index: node_modules/es-toolkit/dist/compat/array/reverse.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/reverse.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/reverse.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function reverse(array) {
+    if (array == null) {
+        return array;
+    }
+    return array.reverse();
+}
+
+export { reverse };
Index: node_modules/es-toolkit/dist/compat/array/sample.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sample.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sample.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Gets a random element from collection.
+ *
+ * @template T
+ * @param {readonly [T, ...T[]]} collection - The collection to sample.
+ * @returns {T} Returns the random element.
+ *
+ * @example
+ * sample([1, 2, 3, 4]);
+ * // => 2
+ */
+declare function sample<T>(collection: readonly [T, ...T[]]): T;
+/**
+ * Gets a random element from collection.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The collection to sample.
+ * @returns {T | undefined} Returns the random element.
+ *
+ * @example
+ * sample({ 'a': 1, 'b': 2, 'c': 3 });
+ * // => 2
+ */
+declare function sample<T>(collection: Record<string, T> | Record<number, T> | null | undefined): T | undefined;
+/**
+ * Gets a random element from collection.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The collection to sample.
+ * @returns {T[keyof T] | undefined} Returns the random element.
+ *
+ * @example
+ * sample({ 'a': 1, 'b': 2, 'c': 3 });
+ * // => 2
+ */
+declare function sample<T extends object>(collection: T | null | undefined): T[keyof T] | undefined;
+
+export { sample };
Index: node_modules/es-toolkit/dist/compat/array/sample.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sample.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sample.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Gets a random element from collection.
+ *
+ * @template T
+ * @param {readonly [T, ...T[]]} collection - The collection to sample.
+ * @returns {T} Returns the random element.
+ *
+ * @example
+ * sample([1, 2, 3, 4]);
+ * // => 2
+ */
+declare function sample<T>(collection: readonly [T, ...T[]]): T;
+/**
+ * Gets a random element from collection.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The collection to sample.
+ * @returns {T | undefined} Returns the random element.
+ *
+ * @example
+ * sample({ 'a': 1, 'b': 2, 'c': 3 });
+ * // => 2
+ */
+declare function sample<T>(collection: Record<string, T> | Record<number, T> | null | undefined): T | undefined;
+/**
+ * Gets a random element from collection.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The collection to sample.
+ * @returns {T[keyof T] | undefined} Returns the random element.
+ *
+ * @example
+ * sample({ 'a': 1, 'b': 2, 'c': 3 });
+ * // => 2
+ */
+declare function sample<T extends object>(collection: T | null | undefined): T[keyof T] | undefined;
+
+export { sample };
Index: node_modules/es-toolkit/dist/compat/array/sample.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sample.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sample.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sample$1 = require('../../array/sample.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function sample(collection) {
+    if (collection == null) {
+        return undefined;
+    }
+    if (isArrayLike.isArrayLike(collection)) {
+        return sample$1.sample(toArray.toArray(collection));
+    }
+    return sample$1.sample(Object.values(collection));
+}
+
+exports.sample = sample;
Index: node_modules/es-toolkit/dist/compat/array/sample.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sample.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sample.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { sample as sample$1 } from '../../array/sample.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function sample(collection) {
+    if (collection == null) {
+        return undefined;
+    }
+    if (isArrayLike(collection)) {
+        return sample$1(toArray(collection));
+    }
+    return sample$1(Object.values(collection));
+}
+
+export { sample };
Index: node_modules/es-toolkit/dist/compat/array/sampleSize.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sampleSize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sampleSize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/**
+ * Returns a sample element array of a specified size from a collection.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The collection to sample from.
+ * @param {number} [n] - The size of sample.
+ * @returns {T[]} A new array with sample size applied.
+ *
+ * @example
+ * sampleSize([1, 2, 3], 2);
+ * // => [2, 3] (example, actual result will vary)
+ */
+declare function sampleSize<T>(collection: Record<string, T> | Record<number, T> | null | undefined, n?: number): T[];
+/**
+ * Returns a sample element array of a specified size from an object.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to sample from.
+ * @param {number} [n] - The size of sample.
+ * @returns {Array<T[keyof T]>} A new array with sample size applied.
+ *
+ * @example
+ * sampleSize({ a: 1, b: 2, c: 3 }, 2);
+ * // => [2, 3] (example, actual result will vary)
+ */
+declare function sampleSize<T extends object>(collection: T | null | undefined, n?: number): Array<T[keyof T]>;
+
+export { sampleSize };
Index: node_modules/es-toolkit/dist/compat/array/sampleSize.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sampleSize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sampleSize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/**
+ * Returns a sample element array of a specified size from a collection.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | null | undefined} collection - The collection to sample from.
+ * @param {number} [n] - The size of sample.
+ * @returns {T[]} A new array with sample size applied.
+ *
+ * @example
+ * sampleSize([1, 2, 3], 2);
+ * // => [2, 3] (example, actual result will vary)
+ */
+declare function sampleSize<T>(collection: Record<string, T> | Record<number, T> | null | undefined, n?: number): T[];
+/**
+ * Returns a sample element array of a specified size from an object.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to sample from.
+ * @param {number} [n] - The size of sample.
+ * @returns {Array<T[keyof T]>} A new array with sample size applied.
+ *
+ * @example
+ * sampleSize({ a: 1, b: 2, c: 3 }, 2);
+ * // => [2, 3] (example, actual result will vary)
+ */
+declare function sampleSize<T extends object>(collection: T | null | undefined, n?: number): Array<T[keyof T]>;
+
+export { sampleSize };
Index: node_modules/es-toolkit/dist/compat/array/sampleSize.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sampleSize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sampleSize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sampleSize$1 = require('../../array/sampleSize.js');
+const isIterateeCall = require('../_internal/isIterateeCall.js');
+const clamp = require('../math/clamp.js');
+const toArray = require('../util/toArray.js');
+const toInteger = require('../util/toInteger.js');
+
+function sampleSize(collection, size, guard) {
+    const arrayCollection = toArray.toArray(collection);
+    if (guard ? isIterateeCall.isIterateeCall(collection, size, guard) : size === undefined) {
+        size = 1;
+    }
+    else {
+        size = clamp.clamp(toInteger.toInteger(size), 0, arrayCollection.length);
+    }
+    return sampleSize$1.sampleSize(arrayCollection, size);
+}
+
+exports.sampleSize = sampleSize;
Index: node_modules/es-toolkit/dist/compat/array/sampleSize.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sampleSize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sampleSize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import { sampleSize as sampleSize$1 } from '../../array/sampleSize.mjs';
+import { isIterateeCall } from '../_internal/isIterateeCall.mjs';
+import { clamp } from '../math/clamp.mjs';
+import { toArray } from '../util/toArray.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+
+function sampleSize(collection, size, guard) {
+    const arrayCollection = toArray(collection);
+    if (guard ? isIterateeCall(collection, size, guard) : size === undefined) {
+        size = 1;
+    }
+    else {
+        size = clamp(toInteger(size), 0, arrayCollection.length);
+    }
+    return sampleSize$1(arrayCollection, size);
+}
+
+export { sampleSize };
Index: node_modules/es-toolkit/dist/compat/array/shuffle.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/shuffle.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/shuffle.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Randomizes the order of elements in an `array` using the Fisher-Yates algorithm.
+ *
+ * This function takes an `array` and returns a new `array` with its elements shuffled in a random order.
+ *
+ * @template T - The type of elements in the `array`.
+ * @param {T[]} array - The `array` to shuffle.
+ * @returns {T[]} A new `array` with its elements shuffled in random order.
+ */
+declare function shuffle<T>(array: ArrayLike<T> | null | undefined): T[];
+/**
+ * Randomizes the order of elements in an `object` using the Fisher-Yates algorithm.
+ *
+ * This function takes an `object` and returns a new `object` with its values shuffled in a random order.
+ *
+ * @template T - The type of elements in the `object`.
+ * @param {T} object - The `object` to shuffle.
+ * @returns {T[]} A new `Array` with the values of the `object` shuffled in a random order.
+ */
+declare function shuffle<T extends object>(object: T | null | undefined): Array<T[keyof T]>;
+
+export { shuffle };
Index: node_modules/es-toolkit/dist/compat/array/shuffle.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/shuffle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/shuffle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Randomizes the order of elements in an `array` using the Fisher-Yates algorithm.
+ *
+ * This function takes an `array` and returns a new `array` with its elements shuffled in a random order.
+ *
+ * @template T - The type of elements in the `array`.
+ * @param {T[]} array - The `array` to shuffle.
+ * @returns {T[]} A new `array` with its elements shuffled in random order.
+ */
+declare function shuffle<T>(array: ArrayLike<T> | null | undefined): T[];
+/**
+ * Randomizes the order of elements in an `object` using the Fisher-Yates algorithm.
+ *
+ * This function takes an `object` and returns a new `object` with its values shuffled in a random order.
+ *
+ * @template T - The type of elements in the `object`.
+ * @param {T} object - The `object` to shuffle.
+ * @returns {T[]} A new `Array` with the values of the `object` shuffled in a random order.
+ */
+declare function shuffle<T extends object>(object: T | null | undefined): Array<T[keyof T]>;
+
+export { shuffle };
Index: node_modules/es-toolkit/dist/compat/array/shuffle.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const shuffle$1 = require('../../array/shuffle.js');
+const values = require('../object/values.js');
+const isArray = require('../predicate/isArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isNil = require('../predicate/isNil.js');
+const isObjectLike = require('../predicate/isObjectLike.js');
+
+function shuffle(collection) {
+    if (isNil.isNil(collection)) {
+        return [];
+    }
+    if (isArray.isArray(collection)) {
+        return shuffle$1.shuffle(collection);
+    }
+    if (isArrayLike.isArrayLike(collection)) {
+        return shuffle$1.shuffle(Array.from(collection));
+    }
+    if (isObjectLike.isObjectLike(collection)) {
+        return shuffle$1.shuffle(values.values(collection));
+    }
+    return [];
+}
+
+exports.shuffle = shuffle;
Index: node_modules/es-toolkit/dist/compat/array/shuffle.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/shuffle.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/shuffle.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import { shuffle as shuffle$1 } from '../../array/shuffle.mjs';
+import { values } from '../object/values.mjs';
+import { isArray } from '../predicate/isArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isNil } from '../predicate/isNil.mjs';
+import { isObjectLike } from '../predicate/isObjectLike.mjs';
+
+function shuffle(collection) {
+    if (isNil(collection)) {
+        return [];
+    }
+    if (isArray(collection)) {
+        return shuffle$1(collection);
+    }
+    if (isArrayLike(collection)) {
+        return shuffle$1(Array.from(collection));
+    }
+    if (isObjectLike(collection)) {
+        return shuffle$1(values(collection));
+    }
+    return [];
+}
+
+export { shuffle };
Index: node_modules/es-toolkit/dist/compat/array/size.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/size.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/size.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+/**
+ * Returns the length of an array, string, or object.
+ *
+ * This function takes an array, string, or object and returns its length.
+ * For arrays and strings, it returns the number of elements or characters, respectively.
+ * For objects, it returns the number of enumerable properties.
+ *
+ * @template T - The type of the input value.
+ * @param {T[] | object | string | Map<unknown, T> | Set<T> | null | undefined } target - The value whose size is to be determined. It can be an array, string, or object.
+ * @returns {number} The size of the input value.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const arrSize = size(arr);
+ * // arrSize will be 3
+ *
+ * const str = 'hello';
+ * const strSize = size(str);
+ * // strSize will be 5
+ *
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const objSize = size(obj);
+ * // objSize will be 3
+ *
+ * const emptyArr = [];
+ * const emptyArrSize = size(emptyArr);
+ * // emptyArrSize will be 0
+ *
+ * const emptyStr = '';
+ * const emptyStrSize = size(emptyStr);
+ * // emptyStrSize will be 0
+ *
+ * const emptyObj = {};
+ * const emptyObjSize = size(emptyObj);
+ * // emptyObjSize will be 0
+ */
+declare function size(collection: object | string | null | undefined): number;
+
+export { size };
Index: node_modules/es-toolkit/dist/compat/array/size.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/size.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/size.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+/**
+ * Returns the length of an array, string, or object.
+ *
+ * This function takes an array, string, or object and returns its length.
+ * For arrays and strings, it returns the number of elements or characters, respectively.
+ * For objects, it returns the number of enumerable properties.
+ *
+ * @template T - The type of the input value.
+ * @param {T[] | object | string | Map<unknown, T> | Set<T> | null | undefined } target - The value whose size is to be determined. It can be an array, string, or object.
+ * @returns {number} The size of the input value.
+ *
+ * @example
+ * const arr = [1, 2, 3];
+ * const arrSize = size(arr);
+ * // arrSize will be 3
+ *
+ * const str = 'hello';
+ * const strSize = size(str);
+ * // strSize will be 5
+ *
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const objSize = size(obj);
+ * // objSize will be 3
+ *
+ * const emptyArr = [];
+ * const emptyArrSize = size(emptyArr);
+ * // emptyArrSize will be 0
+ *
+ * const emptyStr = '';
+ * const emptyStrSize = size(emptyStr);
+ * // emptyStrSize will be 0
+ *
+ * const emptyObj = {};
+ * const emptyObjSize = size(emptyObj);
+ * // emptyObjSize will be 0
+ */
+declare function size(collection: object | string | null | undefined): number;
+
+export { size };
Index: node_modules/es-toolkit/dist/compat/array/size.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/size.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/size.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isNil = require('../../predicate/isNil.js');
+
+function size(target) {
+    if (isNil.isNil(target)) {
+        return 0;
+    }
+    if (target instanceof Map || target instanceof Set) {
+        return target.size;
+    }
+    return Object.keys(target).length;
+}
+
+exports.size = size;
Index: node_modules/es-toolkit/dist/compat/array/size.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/size.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/size.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { isNil } from '../../predicate/isNil.mjs';
+
+function size(target) {
+    if (isNil(target)) {
+        return 0;
+    }
+    if (target instanceof Map || target instanceof Set) {
+        return target.size;
+    }
+    return Object.keys(target).length;
+}
+
+export { size };
Index: node_modules/es-toolkit/dist/compat/array/slice.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/slice.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/slice.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Create a slice of `array` from `start` up to, but not including, `end`.
+ *
+ * It does not return a dense array for sparse arrays unlike the native `Array.prototype.slice`.
+ *
+ * @template T - The type of the array elements.
+ * @param {ArrayLike<T> | null | undefined} array - The array to slice.
+ * @param {number} [start=0] - The start position.
+ * @param {number} [end=array.length] - The end position.
+ * @returns {T[]} - Returns the slice of `array`.
+ *
+ * @example
+ * slice([1, 2, 3], 1, 2); // => [2]
+ * slice(new Array(3)); // => [undefined, undefined, undefined]
+ */
+declare function slice<T>(array: ArrayLike<T> | null | undefined, start?: number, end?: number): T[];
+
+export { slice };
Index: node_modules/es-toolkit/dist/compat/array/slice.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/slice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/slice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Create a slice of `array` from `start` up to, but not including, `end`.
+ *
+ * It does not return a dense array for sparse arrays unlike the native `Array.prototype.slice`.
+ *
+ * @template T - The type of the array elements.
+ * @param {ArrayLike<T> | null | undefined} array - The array to slice.
+ * @param {number} [start=0] - The start position.
+ * @param {number} [end=array.length] - The end position.
+ * @returns {T[]} - Returns the slice of `array`.
+ *
+ * @example
+ * slice([1, 2, 3], 1, 2); // => [2]
+ * slice(new Array(3)); // => [undefined, undefined, undefined]
+ */
+declare function slice<T>(array: ArrayLike<T> | null | undefined, start?: number, end?: number): T[];
+
+export { slice };
Index: node_modules/es-toolkit/dist/compat/array/slice.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/slice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/slice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isIterateeCall = require('../_internal/isIterateeCall.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const toInteger = require('../util/toInteger.js');
+
+function slice(array, start, end) {
+    if (!isArrayLike.isArrayLike(array)) {
+        return [];
+    }
+    const length = array.length;
+    if (end === undefined) {
+        end = length;
+    }
+    else if (typeof end !== 'number' && isIterateeCall.isIterateeCall(array, start, end)) {
+        start = 0;
+        end = length;
+    }
+    start = toInteger.toInteger(start);
+    end = toInteger.toInteger(end);
+    if (start < 0) {
+        start = Math.max(length + start, 0);
+    }
+    else {
+        start = Math.min(start, length);
+    }
+    if (end < 0) {
+        end = Math.max(length + end, 0);
+    }
+    else {
+        end = Math.min(end, length);
+    }
+    const resultLength = Math.max(end - start, 0);
+    const result = new Array(resultLength);
+    for (let i = 0; i < resultLength; ++i) {
+        result[i] = array[start + i];
+    }
+    return result;
+}
+
+exports.slice = slice;
Index: node_modules/es-toolkit/dist/compat/array/slice.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/slice.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/slice.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { isIterateeCall } from '../_internal/isIterateeCall.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+
+function slice(array, start, end) {
+    if (!isArrayLike(array)) {
+        return [];
+    }
+    const length = array.length;
+    if (end === undefined) {
+        end = length;
+    }
+    else if (typeof end !== 'number' && isIterateeCall(array, start, end)) {
+        start = 0;
+        end = length;
+    }
+    start = toInteger(start);
+    end = toInteger(end);
+    if (start < 0) {
+        start = Math.max(length + start, 0);
+    }
+    else {
+        start = Math.min(start, length);
+    }
+    if (end < 0) {
+        end = Math.max(length + end, 0);
+    }
+    else {
+        end = Math.min(end, length);
+    }
+    const resultLength = Math.max(end - start, 0);
+    const result = new Array(resultLength);
+    for (let i = 0; i < resultLength; ++i) {
+        result[i] = array[start + i];
+    }
+    return result;
+}
+
+export { slice };
Index: node_modules/es-toolkit/dist/compat/array/some.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/some.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/some.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.mjs';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.mjs';
+
+/**
+ * Checks if predicate returns truthy for any element of collection.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ListIterateeCustom<T, boolean>} [predicate] - The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`.
+ *
+ * @example
+ * some([null, 0, 'yes', false], Boolean);
+ * // => true
+ */
+declare function some<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>): boolean;
+/**
+ * Checks if predicate returns truthy for any element of collection.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterateeCustom<T, boolean>} [predicate] - The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`.
+ *
+ * @example
+ * some({ 'a': 0, 'b': 1, 'c': 0 }, function(n) { return n > 0; });
+ * // => true
+ */
+declare function some<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>): boolean;
+
+export { some };
Index: node_modules/es-toolkit/dist/compat/array/some.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/some.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/some.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { ListIterateeCustom } from '../_internal/ListIterateeCustom.js';
+import { ObjectIterateeCustom } from '../_internal/ObjectIteratee.js';
+
+/**
+ * Checks if predicate returns truthy for any element of collection.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {ListIterateeCustom<T, boolean>} [predicate] - The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`.
+ *
+ * @example
+ * some([null, 0, 'yes', false], Boolean);
+ * // => true
+ */
+declare function some<T>(collection: ArrayLike<T> | null | undefined, predicate?: ListIterateeCustom<T, boolean>): boolean;
+/**
+ * Checks if predicate returns truthy for any element of collection.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {ObjectIterateeCustom<T, boolean>} [predicate] - The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check, else `false`.
+ *
+ * @example
+ * some({ 'a': 0, 'b': 1, 'c': 0 }, function(n) { return n > 0; });
+ * // => true
+ */
+declare function some<T extends object>(collection: T | null | undefined, predicate?: ObjectIterateeCustom<T, boolean>): boolean;
+
+export { some };
Index: node_modules/es-toolkit/dist/compat/array/some.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/some.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/some.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const property = require('../object/property.js');
+const matches = require('../predicate/matches.js');
+const matchesProperty = require('../predicate/matchesProperty.js');
+
+function some(source, predicate, guard) {
+    if (!source) {
+        return false;
+    }
+    if (guard != null) {
+        predicate = undefined;
+    }
+    if (!predicate) {
+        predicate = identity.identity;
+    }
+    const values = Array.isArray(source) ? source : Object.values(source);
+    switch (typeof predicate) {
+        case 'function': {
+            if (!Array.isArray(source)) {
+                const keys = Object.keys(source);
+                for (let i = 0; i < keys.length; i++) {
+                    const key = keys[i];
+                    const value = source[key];
+                    if (predicate(value, key, source)) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+            for (let i = 0; i < source.length; i++) {
+                if (predicate(source[i], i, source)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        case 'object': {
+            if (Array.isArray(predicate) && predicate.length === 2) {
+                const key = predicate[0];
+                const value = predicate[1];
+                const matchFunc = matchesProperty.matchesProperty(key, value);
+                if (Array.isArray(source)) {
+                    for (let i = 0; i < source.length; i++) {
+                        if (matchFunc(source[i])) {
+                            return true;
+                        }
+                    }
+                    return false;
+                }
+                return values.some(matchFunc);
+            }
+            else {
+                const matchFunc = matches.matches(predicate);
+                if (Array.isArray(source)) {
+                    for (let i = 0; i < source.length; i++) {
+                        if (matchFunc(source[i])) {
+                            return true;
+                        }
+                    }
+                    return false;
+                }
+                return values.some(matchFunc);
+            }
+        }
+        case 'number':
+        case 'symbol':
+        case 'string': {
+            const propFunc = property.property(predicate);
+            if (Array.isArray(source)) {
+                for (let i = 0; i < source.length; i++) {
+                    if (propFunc(source[i])) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+            return values.some(propFunc);
+        }
+    }
+}
+
+exports.some = some;
Index: node_modules/es-toolkit/dist/compat/array/some.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/some.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/some.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+import { identity } from '../../function/identity.mjs';
+import { property } from '../object/property.mjs';
+import { matches } from '../predicate/matches.mjs';
+import { matchesProperty } from '../predicate/matchesProperty.mjs';
+
+function some(source, predicate, guard) {
+    if (!source) {
+        return false;
+    }
+    if (guard != null) {
+        predicate = undefined;
+    }
+    if (!predicate) {
+        predicate = identity;
+    }
+    const values = Array.isArray(source) ? source : Object.values(source);
+    switch (typeof predicate) {
+        case 'function': {
+            if (!Array.isArray(source)) {
+                const keys = Object.keys(source);
+                for (let i = 0; i < keys.length; i++) {
+                    const key = keys[i];
+                    const value = source[key];
+                    if (predicate(value, key, source)) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+            for (let i = 0; i < source.length; i++) {
+                if (predicate(source[i], i, source)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        case 'object': {
+            if (Array.isArray(predicate) && predicate.length === 2) {
+                const key = predicate[0];
+                const value = predicate[1];
+                const matchFunc = matchesProperty(key, value);
+                if (Array.isArray(source)) {
+                    for (let i = 0; i < source.length; i++) {
+                        if (matchFunc(source[i])) {
+                            return true;
+                        }
+                    }
+                    return false;
+                }
+                return values.some(matchFunc);
+            }
+            else {
+                const matchFunc = matches(predicate);
+                if (Array.isArray(source)) {
+                    for (let i = 0; i < source.length; i++) {
+                        if (matchFunc(source[i])) {
+                            return true;
+                        }
+                    }
+                    return false;
+                }
+                return values.some(matchFunc);
+            }
+        }
+        case 'number':
+        case 'symbol':
+        case 'string': {
+            const propFunc = property(predicate);
+            if (Array.isArray(source)) {
+                for (let i = 0; i < source.length; i++) {
+                    if (propFunc(source[i])) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+            return values.some(propFunc);
+        }
+    }
+}
+
+export { some };
Index: node_modules/es-toolkit/dist/compat/array/sortBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,73 @@
+import { ListIteratee } from '../_internal/ListIteratee.mjs';
+import { Many } from '../_internal/Many.mjs';
+import { ObjectIteratee } from '../_internal/ObjectIteratee.mjs';
+
+/**
+ * Sorts an array of objects based on multiple properties and their corresponding order directions.
+ *
+ * This function takes an array of objects, an array of criteria to sort by.
+ * It returns the ascending sorted array, ordering by each key.
+ * If values for a key are equal, it moves to the next key to determine the order.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | object | null | undefined} collection - The array of objects to be sorted.
+ * @param {Array<Array<Criterion<T> | Criterion<T>>>} criteria - An array of criteria (property names or property paths or custom key functions) to sort by.
+ * @returns {T[]} - The ascending sorted array.
+ *
+ * @example
+ * // Sort an array of objects by 'user' in ascending order and 'age' in descending order.
+ * const users = [
+ *   { user: 'fred', age: 48 },
+ *   { user: 'barney', age: 34 },
+ *   { user: 'fred', age: 40 },
+ *   { user: 'barney', age: 36 },
+ * ];
+ * const result = sortBy(users, ['user', (item) => item.age])
+ * // result will be:
+ * // [
+ * //   { user: 'barney', age: 34 },
+ * //   { user: 'barney', age: 36 },
+ * //   { user: 'fred', age: 40 },
+ * //   { user: 'fred', age: 48 },
+ * // ]
+ */
+/**
+ * Creates an array of elements, sorted in ascending order by the results of running each element in a collection thru each iteratee.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {...Array<T | readonly T[] | ListIteratee<T>>} iteratees - The iteratees to sort by.
+ * @returns {T[]} Returns the new sorted array.
+ *
+ * @example
+ * const users = [
+ *   { 'user': 'fred',   'age': 48 },
+ *   { 'user': 'barney', 'age': 36 },
+ *   { 'user': 'fred',   'age': 42 },
+ *   { 'user': 'barney', 'age': 34 }
+ * ];
+ *
+ * sortBy(users, [function(o) { return o.user; }]);
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
+ */
+declare function sortBy<T>(collection: ArrayLike<T> | null | undefined, ...iteratees: Array<Many<ListIteratee<T>>>): T[];
+/**
+ * Creates an array of elements, sorted in ascending order by the results of running each element in a collection thru each iteratee.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {...Array<T[keyof T] | readonly Array<T[keyof T]> | ObjectIteratee<T>>} iteratees - The iteratees to sort by.
+ * @returns {Array<T[keyof T]>} Returns the new sorted array.
+ *
+ * @example
+ * const users = {
+ *   'a': { 'user': 'fred',   'age': 48 },
+ *   'b': { 'user': 'barney', 'age': 36 }
+ * };
+ *
+ * sortBy(users, [function(o) { return o.user; }]);
+ * // => [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 48 }]
+ */
+declare function sortBy<T extends object>(collection: T | null | undefined, ...iteratees: Array<Many<ObjectIteratee<T>>>): Array<T[keyof T]>;
+
+export { sortBy };
Index: node_modules/es-toolkit/dist/compat/array/sortBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,73 @@
+import { ListIteratee } from '../_internal/ListIteratee.js';
+import { Many } from '../_internal/Many.js';
+import { ObjectIteratee } from '../_internal/ObjectIteratee.js';
+
+/**
+ * Sorts an array of objects based on multiple properties and their corresponding order directions.
+ *
+ * This function takes an array of objects, an array of criteria to sort by.
+ * It returns the ascending sorted array, ordering by each key.
+ * If values for a key are equal, it moves to the next key to determine the order.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | object | null | undefined} collection - The array of objects to be sorted.
+ * @param {Array<Array<Criterion<T> | Criterion<T>>>} criteria - An array of criteria (property names or property paths or custom key functions) to sort by.
+ * @returns {T[]} - The ascending sorted array.
+ *
+ * @example
+ * // Sort an array of objects by 'user' in ascending order and 'age' in descending order.
+ * const users = [
+ *   { user: 'fred', age: 48 },
+ *   { user: 'barney', age: 34 },
+ *   { user: 'fred', age: 40 },
+ *   { user: 'barney', age: 36 },
+ * ];
+ * const result = sortBy(users, ['user', (item) => item.age])
+ * // result will be:
+ * // [
+ * //   { user: 'barney', age: 34 },
+ * //   { user: 'barney', age: 36 },
+ * //   { user: 'fred', age: 40 },
+ * //   { user: 'fred', age: 48 },
+ * // ]
+ */
+/**
+ * Creates an array of elements, sorted in ascending order by the results of running each element in a collection thru each iteratee.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} collection - The collection to iterate over.
+ * @param {...Array<T | readonly T[] | ListIteratee<T>>} iteratees - The iteratees to sort by.
+ * @returns {T[]} Returns the new sorted array.
+ *
+ * @example
+ * const users = [
+ *   { 'user': 'fred',   'age': 48 },
+ *   { 'user': 'barney', 'age': 36 },
+ *   { 'user': 'fred',   'age': 42 },
+ *   { 'user': 'barney', 'age': 34 }
+ * ];
+ *
+ * sortBy(users, [function(o) { return o.user; }]);
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
+ */
+declare function sortBy<T>(collection: ArrayLike<T> | null | undefined, ...iteratees: Array<Many<ListIteratee<T>>>): T[];
+/**
+ * Creates an array of elements, sorted in ascending order by the results of running each element in a collection thru each iteratee.
+ *
+ * @template T
+ * @param {T | null | undefined} collection - The object to iterate over.
+ * @param {...Array<T[keyof T] | readonly Array<T[keyof T]> | ObjectIteratee<T>>} iteratees - The iteratees to sort by.
+ * @returns {Array<T[keyof T]>} Returns the new sorted array.
+ *
+ * @example
+ * const users = {
+ *   'a': { 'user': 'fred',   'age': 48 },
+ *   'b': { 'user': 'barney', 'age': 36 }
+ * };
+ *
+ * sortBy(users, [function(o) { return o.user; }]);
+ * // => [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 48 }]
+ */
+declare function sortBy<T extends object>(collection: T | null | undefined, ...iteratees: Array<Many<ObjectIteratee<T>>>): Array<T[keyof T]>;
+
+export { sortBy };
Index: node_modules/es-toolkit/dist/compat/array/sortBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const orderBy = require('./orderBy.js');
+const flatten = require('../../array/flatten.js');
+const isIterateeCall = require('../_internal/isIterateeCall.js');
+
+function sortBy(collection, ...criteria) {
+    const length = criteria.length;
+    if (length > 1 && isIterateeCall.isIterateeCall(collection, criteria[0], criteria[1])) {
+        criteria = [];
+    }
+    else if (length > 2 && isIterateeCall.isIterateeCall(criteria[0], criteria[1], criteria[2])) {
+        criteria = [criteria[0]];
+    }
+    return orderBy.orderBy(collection, flatten.flatten(criteria), ['asc']);
+}
+
+exports.sortBy = sortBy;
Index: node_modules/es-toolkit/dist/compat/array/sortBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { orderBy } from './orderBy.mjs';
+import { flatten } from '../../array/flatten.mjs';
+import { isIterateeCall } from '../_internal/isIterateeCall.mjs';
+
+function sortBy(collection, ...criteria) {
+    const length = criteria.length;
+    if (length > 1 && isIterateeCall(collection, criteria[0], criteria[1])) {
+        criteria = [];
+    }
+    else if (length > 2 && isIterateeCall(criteria[0], criteria[1], criteria[2])) {
+        criteria = [criteria[0]];
+    }
+    return orderBy(collection, flatten(criteria), ['asc']);
+}
+
+export { sortBy };
Index: node_modules/es-toolkit/dist/compat/array/sortedIndex.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Uses a binary search to determine the lowest index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @category Array
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ *  into `array`.
+ * @example
+ * sortedIndex([30, 50], 40)
+ * // => 1
+ */
+declare function sortedIndex<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+/**
+ * Uses a binary search to determine the lowest index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @category Array
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ *  into `array`.
+ * @example
+ * sortedIndex([30, 50], 40)
+ * // => 1
+ */
+declare function sortedIndex<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+
+export { sortedIndex };
Index: node_modules/es-toolkit/dist/compat/array/sortedIndex.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Uses a binary search to determine the lowest index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @category Array
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ *  into `array`.
+ * @example
+ * sortedIndex([30, 50], 40)
+ * // => 1
+ */
+declare function sortedIndex<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+/**
+ * Uses a binary search to determine the lowest index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @category Array
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ *  into `array`.
+ * @example
+ * sortedIndex([30, 50], 40)
+ * // => 1
+ */
+declare function sortedIndex<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+
+export { sortedIndex };
Index: node_modules/es-toolkit/dist/compat/array/sortedIndex.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sortedIndexBy = require('./sortedIndexBy.js');
+const isNil = require('../../predicate/isNil.js');
+const isNull = require('../../predicate/isNull.js');
+const isSymbol = require('../../predicate/isSymbol.js');
+const isNumber = require('../predicate/isNumber.js');
+
+const MAX_ARRAY_LENGTH = 4294967295;
+const HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+function sortedIndex(array, value) {
+    if (isNil.isNil(array)) {
+        return 0;
+    }
+    let low = 0, high = isNil.isNil(array) ? low : array.length;
+    if (isNumber.isNumber(value) && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
+        while (low < high) {
+            const mid = (low + high) >>> 1;
+            const compute = array[mid];
+            if (!isNull.isNull(compute) && !isSymbol.isSymbol(compute) && compute < value) {
+                low = mid + 1;
+            }
+            else {
+                high = mid;
+            }
+        }
+        return high;
+    }
+    return sortedIndexBy.sortedIndexBy(array, value, value => value);
+}
+
+exports.sortedIndex = sortedIndex;
Index: node_modules/es-toolkit/dist/compat/array/sortedIndex.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { sortedIndexBy } from './sortedIndexBy.mjs';
+import { isNil } from '../../predicate/isNil.mjs';
+import { isNull } from '../../predicate/isNull.mjs';
+import { isSymbol } from '../../predicate/isSymbol.mjs';
+import { isNumber } from '../predicate/isNumber.mjs';
+
+const MAX_ARRAY_LENGTH = 4294967295;
+const HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+function sortedIndex(array, value) {
+    if (isNil(array)) {
+        return 0;
+    }
+    let low = 0, high = isNil(array) ? low : array.length;
+    if (isNumber(value) && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
+        while (low < high) {
+            const mid = (low + high) >>> 1;
+            const compute = array[mid];
+            if (!isNull(compute) && !isSymbol(compute) && compute < value) {
+                low = mid + 1;
+            }
+            else {
+                high = mid;
+            }
+        }
+        return high;
+    }
+    return sortedIndexBy(array, value, value => value);
+}
+
+export { sortedIndex };
Index: node_modules/es-toolkit/dist/compat/array/sortedIndexBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndexBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndexBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * This method is like `sortedIndex` except that it accepts `iteratee`
+ * which is invoked for `value` and each element of `array` to compute their
+ * sort ranking. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The sorted array to inspect.
+ * @param {T} value - The value to evaluate.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {number} Returns the index at which `value` should be inserted into `array`.
+ *
+ * @example
+ * const dict = { 'thirty': 30, 'forty': 40, 'fifty': 50 };
+ * sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict));
+ * // => 1
+ *
+ * @example
+ * sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
+ * // => 0
+ */
+declare function sortedIndexBy<T>(array: ArrayLike<T> | null | undefined, value: T, iteratee?: ValueIteratee<T>): number;
+
+export { sortedIndexBy };
Index: node_modules/es-toolkit/dist/compat/array/sortedIndexBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndexBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndexBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * This method is like `sortedIndex` except that it accepts `iteratee`
+ * which is invoked for `value` and each element of `array` to compute their
+ * sort ranking. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The sorted array to inspect.
+ * @param {T} value - The value to evaluate.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {number} Returns the index at which `value` should be inserted into `array`.
+ *
+ * @example
+ * const dict = { 'thirty': 30, 'forty': 40, 'fifty': 50 };
+ * sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict));
+ * // => 1
+ *
+ * @example
+ * sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
+ * // => 0
+ */
+declare function sortedIndexBy<T>(array: ArrayLike<T> | null | undefined, value: T, iteratee?: ValueIteratee<T>): number;
+
+export { sortedIndexBy };
Index: node_modules/es-toolkit/dist/compat/array/sortedIndexBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndexBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndexBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isNull = require('../../predicate/isNull.js');
+const isUndefined = require('../../predicate/isUndefined.js');
+const isNaN = require('../predicate/isNaN.js');
+const isNil = require('../predicate/isNil.js');
+const isSymbol = require('../predicate/isSymbol.js');
+const iteratee = require('../util/iteratee.js');
+
+const MAX_ARRAY_LENGTH = 4294967295;
+const MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1;
+function sortedIndexBy(array, value, iteratee$1 = iteratee.iteratee, retHighest) {
+    let low = 0;
+    let high = array == null ? 0 : array.length;
+    if (high === 0 || isNil.isNil(array)) {
+        return 0;
+    }
+    const iterateeFunction = iteratee.iteratee(iteratee$1);
+    const transformedValue = iterateeFunction(value);
+    const valIsNaN = isNaN.isNaN(transformedValue);
+    const valIsNull = isNull.isNull(transformedValue);
+    const valIsSymbol = isSymbol.isSymbol(transformedValue);
+    const valIsUndefined = isUndefined.isUndefined(transformedValue);
+    while (low < high) {
+        let setLow;
+        const mid = Math.floor((low + high) / 2);
+        const computed = iterateeFunction(array[mid]);
+        const othIsDefined = !isUndefined.isUndefined(computed);
+        const othIsNull = isNull.isNull(computed);
+        const othIsReflexive = !isNaN.isNaN(computed);
+        const othIsSymbol = isSymbol.isSymbol(computed);
+        if (valIsNaN) {
+            setLow = retHighest || othIsReflexive;
+        }
+        else if (valIsUndefined) {
+            setLow = othIsReflexive && (retHighest || othIsDefined);
+        }
+        else if (valIsNull) {
+            setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
+        }
+        else if (valIsSymbol) {
+            setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
+        }
+        else if (othIsNull || othIsSymbol) {
+            setLow = false;
+        }
+        else {
+            setLow = retHighest ? computed <= transformedValue : computed < transformedValue;
+        }
+        if (setLow) {
+            low = mid + 1;
+        }
+        else {
+            high = mid;
+        }
+    }
+    return Math.min(high, MAX_ARRAY_INDEX);
+}
+
+exports.sortedIndexBy = sortedIndexBy;
Index: node_modules/es-toolkit/dist/compat/array/sortedIndexBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndexBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndexBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+import { isNull } from '../../predicate/isNull.mjs';
+import { isUndefined } from '../../predicate/isUndefined.mjs';
+import { isNaN } from '../predicate/isNaN.mjs';
+import { isNil } from '../predicate/isNil.mjs';
+import { isSymbol } from '../predicate/isSymbol.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+const MAX_ARRAY_LENGTH = 4294967295;
+const MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1;
+function sortedIndexBy(array, value, iteratee$1 = iteratee, retHighest) {
+    let low = 0;
+    let high = array == null ? 0 : array.length;
+    if (high === 0 || isNil(array)) {
+        return 0;
+    }
+    const iterateeFunction = iteratee(iteratee$1);
+    const transformedValue = iterateeFunction(value);
+    const valIsNaN = isNaN(transformedValue);
+    const valIsNull = isNull(transformedValue);
+    const valIsSymbol = isSymbol(transformedValue);
+    const valIsUndefined = isUndefined(transformedValue);
+    while (low < high) {
+        let setLow;
+        const mid = Math.floor((low + high) / 2);
+        const computed = iterateeFunction(array[mid]);
+        const othIsDefined = !isUndefined(computed);
+        const othIsNull = isNull(computed);
+        const othIsReflexive = !isNaN(computed);
+        const othIsSymbol = isSymbol(computed);
+        if (valIsNaN) {
+            setLow = retHighest || othIsReflexive;
+        }
+        else if (valIsUndefined) {
+            setLow = othIsReflexive && (retHighest || othIsDefined);
+        }
+        else if (valIsNull) {
+            setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
+        }
+        else if (valIsSymbol) {
+            setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
+        }
+        else if (othIsNull || othIsSymbol) {
+            setLow = false;
+        }
+        else {
+            setLow = retHighest ? computed <= transformedValue : computed < transformedValue;
+        }
+        if (setLow) {
+            low = mid + 1;
+        }
+        else {
+            high = mid;
+        }
+    }
+    return Math.min(high, MAX_ARRAY_INDEX);
+}
+
+export { sortedIndexBy };
Index: node_modules/es-toolkit/dist/compat/array/sortedIndexOf.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndexOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndexOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+/**
+ * Finds the index of the first occurrence of a value in a sorted array, similar to how `Array#indexOf` works, but specifically for sorted arrays.
+ *
+ * Make sure to provide a sorted array to this function, as it uses a binary search to quickly find the index.
+ *
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to search for.
+ * @returns {number} Returns the index of the matched value, else -1.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * sortedIndexOf(numbers, 11); // Return value: 0
+ * sortedIndexOf(numbers, 30); // Return value: -1
+ *
+ * // If the value is duplicated, it returns the first index of the value.
+ * const duplicateNumbers = [1, 2, 2, 3, 3, 3, 4];
+ * sortedIndexOf(duplicateNumbers, 3); // Return value: 3
+ *
+ * // If the array is unsorted, it can return the wrong index.
+ * const unSortedArray = [55, 33, 22, 11, 44];
+ * sortedIndexOf(unSortedArray, 11); // Return value: -1
+ *
+ * // -0 and 0 are treated the same
+ * const mixedZeroArray = [-0, 0];
+ * sortedIndexOf(mixedZeroArray, 0); // Return value: 0
+ * sortedIndexOf(mixedZeroArray, -0); // Return value: 0
+ *
+ * // It works with array-like objects
+ * const arrayLike = { length: 3, 0: 10, 1: 20, 2: 30 };
+ * sortedIndexOf(arrayLike, 20); // Return value: 1
+ */
+declare function sortedIndexOf<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+
+export { sortedIndexOf };
Index: node_modules/es-toolkit/dist/compat/array/sortedIndexOf.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+/**
+ * Finds the index of the first occurrence of a value in a sorted array, similar to how `Array#indexOf` works, but specifically for sorted arrays.
+ *
+ * Make sure to provide a sorted array to this function, as it uses a binary search to quickly find the index.
+ *
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to search for.
+ * @returns {number} Returns the index of the matched value, else -1.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * sortedIndexOf(numbers, 11); // Return value: 0
+ * sortedIndexOf(numbers, 30); // Return value: -1
+ *
+ * // If the value is duplicated, it returns the first index of the value.
+ * const duplicateNumbers = [1, 2, 2, 3, 3, 3, 4];
+ * sortedIndexOf(duplicateNumbers, 3); // Return value: 3
+ *
+ * // If the array is unsorted, it can return the wrong index.
+ * const unSortedArray = [55, 33, 22, 11, 44];
+ * sortedIndexOf(unSortedArray, 11); // Return value: -1
+ *
+ * // -0 and 0 are treated the same
+ * const mixedZeroArray = [-0, 0];
+ * sortedIndexOf(mixedZeroArray, 0); // Return value: 0
+ * sortedIndexOf(mixedZeroArray, -0); // Return value: 0
+ *
+ * // It works with array-like objects
+ * const arrayLike = { length: 3, 0: 10, 1: 20, 2: 30 };
+ * sortedIndexOf(arrayLike, 20); // Return value: 1
+ */
+declare function sortedIndexOf<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+
+export { sortedIndexOf };
Index: node_modules/es-toolkit/dist/compat/array/sortedIndexOf.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sortedIndex = require('./sortedIndex.js');
+const eq = require('../util/eq.js');
+
+function sortedIndexOf(array, value) {
+    if (!array?.length) {
+        return -1;
+    }
+    const index = sortedIndex.sortedIndex(array, value);
+    if (index < array.length && eq.eq(array[index], value)) {
+        return index;
+    }
+    return -1;
+}
+
+exports.sortedIndexOf = sortedIndexOf;
Index: node_modules/es-toolkit/dist/compat/array/sortedIndexOf.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedIndexOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedIndexOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { sortedIndex } from './sortedIndex.mjs';
+import { eq } from '../util/eq.mjs';
+
+function sortedIndexOf(array, value) {
+    if (!array?.length) {
+        return -1;
+    }
+    const index = sortedIndex(array, value);
+    if (index < array.length && eq(array[index], value)) {
+        return index;
+    }
+    return -1;
+}
+
+export { sortedIndexOf };
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndex.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Uses a binary search to determine the highest index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @category Array
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ *  into `array`.
+ * @example
+ * sortedIndex([4, 5, 5, 5, 6], 5)
+ * // => 4
+ */
+declare function sortedLastIndex<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+
+export { sortedLastIndex };
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndex.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Uses a binary search to determine the highest index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @category Array
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ *  into `array`.
+ * @example
+ * sortedIndex([4, 5, 5, 5, 6], 5)
+ * // => 4
+ */
+declare function sortedLastIndex<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+
+export { sortedLastIndex };
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndex.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sortedLastIndexBy = require('./sortedLastIndexBy.js');
+const isNil = require('../../predicate/isNil.js');
+const isNull = require('../../predicate/isNull.js');
+const isSymbol = require('../../predicate/isSymbol.js');
+const isNumber = require('../predicate/isNumber.js');
+
+const MAX_ARRAY_LENGTH = 4294967295;
+const HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+function sortedLastIndex(array, value) {
+    if (isNil.isNil(array)) {
+        return 0;
+    }
+    let high = array.length;
+    if (!isNumber.isNumber(value) || Number.isNaN(value) || high > HALF_MAX_ARRAY_LENGTH) {
+        return sortedLastIndexBy.sortedLastIndexBy(array, value, value => value);
+    }
+    let low = 0;
+    while (low < high) {
+        const mid = (low + high) >>> 1;
+        const compute = array[mid];
+        if (!isNull.isNull(compute) && !isSymbol.isSymbol(compute) && compute <= value) {
+            low = mid + 1;
+        }
+        else {
+            high = mid;
+        }
+    }
+    return high;
+}
+
+exports.sortedLastIndex = sortedLastIndex;
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndex.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { sortedLastIndexBy } from './sortedLastIndexBy.mjs';
+import { isNil } from '../../predicate/isNil.mjs';
+import { isNull } from '../../predicate/isNull.mjs';
+import { isSymbol } from '../../predicate/isSymbol.mjs';
+import { isNumber } from '../predicate/isNumber.mjs';
+
+const MAX_ARRAY_LENGTH = 4294967295;
+const HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+function sortedLastIndex(array, value) {
+    if (isNil(array)) {
+        return 0;
+    }
+    let high = array.length;
+    if (!isNumber(value) || Number.isNaN(value) || high > HALF_MAX_ARRAY_LENGTH) {
+        return sortedLastIndexBy(array, value, value => value);
+    }
+    let low = 0;
+    while (low < high) {
+        const mid = (low + high) >>> 1;
+        const compute = array[mid];
+        if (!isNull(compute) && !isSymbol(compute) && compute <= value) {
+            low = mid + 1;
+        }
+        else {
+            high = mid;
+        }
+    }
+    return high;
+}
+
+export { sortedLastIndex };
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * This method is like `sortedLastIndex` except that it accepts `iteratee`
+ * which is invoked for `value` and each element of `array` to compute their
+ * sort ranking. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The sorted array to inspect.
+ * @param {T} value - The value to evaluate.
+ * @param {ValueIteratee<T>} iteratee - The iteratee invoked per element.
+ * @returns {number} Returns the index at which `value` should be inserted into `array`.
+ *
+ * @example
+ * sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
+ * // => 1
+ */
+declare function sortedLastIndexBy<T>(array: ArrayLike<T> | null | undefined, value: T, iteratee: ValueIteratee<T>): number;
+
+export { sortedLastIndexBy };
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * This method is like `sortedLastIndex` except that it accepts `iteratee`
+ * which is invoked for `value` and each element of `array` to compute their
+ * sort ranking. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The sorted array to inspect.
+ * @param {T} value - The value to evaluate.
+ * @param {ValueIteratee<T>} iteratee - The iteratee invoked per element.
+ * @returns {number} Returns the index at which `value` should be inserted into `array`.
+ *
+ * @example
+ * sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
+ * // => 1
+ */
+declare function sortedLastIndexBy<T>(array: ArrayLike<T> | null | undefined, value: T, iteratee: ValueIteratee<T>): number;
+
+export { sortedLastIndexBy };
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sortedIndexBy = require('./sortedIndexBy.js');
+
+function sortedLastIndexBy(array, value, iteratee) {
+    return sortedIndexBy.sortedIndexBy(array, value, iteratee, true);
+}
+
+exports.sortedLastIndexBy = sortedLastIndexBy;
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndexBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { sortedIndexBy } from './sortedIndexBy.mjs';
+
+function sortedLastIndexBy(array, value, iteratee) {
+    return sortedIndexBy(array, value, iteratee, true);
+}
+
+export { sortedLastIndexBy };
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Finds the index of the last occurrence of a value in a sorted array.
+ * This function is similar to `Array#lastIndexOf` but is specifically designed for sorted arrays.
+ *
+ * Make sure to provide a sorted array to this function, as it uses a binary search to quickly find the index.
+ *
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to search for.
+ * @returns {number} Returns the index of the last matched value, else -1.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * sortedLastIndexOf(numbers, 3); // Return value: 2
+ * sortedLastIndexOf(numbers, 6); // Return value: -1
+ *
+ * // If the value is duplicated, it returns the last index of the value.
+ * const duplicateNumbers = [1, 2, 2, 3, 3, 3, 4];
+ * sortedLastIndexOf(duplicateNumbers, 3); // Return value: 5
+ *
+ * // If the array is unsorted, it can return the wrong index.
+ * const unSortedArray = [55, 33, 22, 11, 44];
+ * sortedLastIndexOf(unSortedArray, 11); // Return value: -1
+ *
+ * // -0 and 0 are treated the same
+ * const mixedZeroArray = [-0, 0];
+ * sortedLastIndexOf(mixedZeroArray, 0); // Return value: 1
+ * sortedLastIndexOf(mixedZeroArray, -0); // Return value: 1
+ *
+ * // It works with array-like objects
+ * const arrayLike = { length: 3, 0: 10, 1: 20, 2: 20 };
+ * sortedLastIndexOf(arrayLike, 20); // Return value: 2
+ */
+declare function sortedLastIndexOf<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+
+export { sortedLastIndexOf };
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Finds the index of the last occurrence of a value in a sorted array.
+ * This function is similar to `Array#lastIndexOf` but is specifically designed for sorted arrays.
+ *
+ * Make sure to provide a sorted array to this function, as it uses a binary search to quickly find the index.
+ *
+ * @param {ArrayLike<T> | null | undefined} array The sorted array to inspect.
+ * @param {T} value The value to search for.
+ * @returns {number} Returns the index of the last matched value, else -1.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * sortedLastIndexOf(numbers, 3); // Return value: 2
+ * sortedLastIndexOf(numbers, 6); // Return value: -1
+ *
+ * // If the value is duplicated, it returns the last index of the value.
+ * const duplicateNumbers = [1, 2, 2, 3, 3, 3, 4];
+ * sortedLastIndexOf(duplicateNumbers, 3); // Return value: 5
+ *
+ * // If the array is unsorted, it can return the wrong index.
+ * const unSortedArray = [55, 33, 22, 11, 44];
+ * sortedLastIndexOf(unSortedArray, 11); // Return value: -1
+ *
+ * // -0 and 0 are treated the same
+ * const mixedZeroArray = [-0, 0];
+ * sortedLastIndexOf(mixedZeroArray, 0); // Return value: 1
+ * sortedLastIndexOf(mixedZeroArray, -0); // Return value: 1
+ *
+ * // It works with array-like objects
+ * const arrayLike = { length: 3, 0: 10, 1: 20, 2: 20 };
+ * sortedLastIndexOf(arrayLike, 20); // Return value: 2
+ */
+declare function sortedLastIndexOf<T>(array: ArrayLike<T> | null | undefined, value: T): number;
+
+export { sortedLastIndexOf };
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sortedLastIndex = require('./sortedLastIndex.js');
+const eq = require('../util/eq.js');
+
+function sortedLastIndexOf(array, value) {
+    if (!array?.length) {
+        return -1;
+    }
+    const index = sortedLastIndex.sortedLastIndex(array, value) - 1;
+    if (index >= 0 && eq.eq(array[index], value)) {
+        return index;
+    }
+    return -1;
+}
+
+exports.sortedLastIndexOf = sortedLastIndexOf;
Index: node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/sortedLastIndexOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { sortedLastIndex } from './sortedLastIndex.mjs';
+import { eq } from '../util/eq.mjs';
+
+function sortedLastIndexOf(array, value) {
+    if (!array?.length) {
+        return -1;
+    }
+    const index = sortedLastIndex(array, value) - 1;
+    if (index >= 0 && eq(array[index], value)) {
+        return index;
+    }
+    return -1;
+}
+
+export { sortedLastIndexOf };
Index: node_modules/es-toolkit/dist/compat/array/tail.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/tail.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/tail.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Gets all but the first element of array.
+ *
+ * @template T
+ * @param {readonly [unknown, ...T]} array - The array to query.
+ * @returns {T} Returns the slice of array.
+ *
+ * @example
+ * tail([1, 2, 3]);
+ * // => [2, 3]
+ */
+declare function tail<T extends unknown[]>(array: readonly [unknown, ...T]): T;
+/**
+ * Gets all but the first element of array.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * tail([1, 2, 3]);
+ * // => [2, 3]
+ */
+declare function tail<T>(array: ArrayLike<T> | null | undefined): T[];
+
+export { tail };
Index: node_modules/es-toolkit/dist/compat/array/tail.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/tail.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/tail.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Gets all but the first element of array.
+ *
+ * @template T
+ * @param {readonly [unknown, ...T]} array - The array to query.
+ * @returns {T} Returns the slice of array.
+ *
+ * @example
+ * tail([1, 2, 3]);
+ * // => [2, 3]
+ */
+declare function tail<T extends unknown[]>(array: readonly [unknown, ...T]): T;
+/**
+ * Gets all but the first element of array.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * tail([1, 2, 3]);
+ * // => [2, 3]
+ */
+declare function tail<T>(array: ArrayLike<T> | null | undefined): T[];
+
+export { tail };
Index: node_modules/es-toolkit/dist/compat/array/tail.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/tail.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/tail.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const tail$1 = require('../../array/tail.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function tail(arr) {
+    if (!isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return tail$1.tail(toArray.toArray(arr));
+}
+
+exports.tail = tail;
Index: node_modules/es-toolkit/dist/compat/array/tail.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/tail.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/tail.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { tail as tail$1 } from '../../array/tail.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function tail(arr) {
+    if (!isArrayLike(arr)) {
+        return [];
+    }
+    return tail$1(toArray(arr));
+}
+
+export { tail };
Index: node_modules/es-toolkit/dist/compat/array/take.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/take.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/take.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Creates a slice of array with n elements taken from the beginning.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {number} [n=1] - The number of elements to take.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * take([1, 2, 3]);
+ * // => [1]
+ *
+ * @example
+ * take([1, 2, 3], 2);
+ * // => [1, 2]
+ *
+ * @example
+ * take([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * @example
+ * take([1, 2, 3], 0);
+ * // => []
+ */
+declare function take<T>(array: ArrayLike<T> | null | undefined, n?: number): T[];
+
+export { take };
Index: node_modules/es-toolkit/dist/compat/array/take.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/take.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/take.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Creates a slice of array with n elements taken from the beginning.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {number} [n=1] - The number of elements to take.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * take([1, 2, 3]);
+ * // => [1]
+ *
+ * @example
+ * take([1, 2, 3], 2);
+ * // => [1, 2]
+ *
+ * @example
+ * take([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * @example
+ * take([1, 2, 3], 0);
+ * // => []
+ */
+declare function take<T>(array: ArrayLike<T> | null | undefined, n?: number): T[];
+
+export { take };
Index: node_modules/es-toolkit/dist/compat/array/take.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/take.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/take.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const take$1 = require('../../array/take.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const toInteger = require('../util/toInteger.js');
+
+function take(arr, count = 1, guard) {
+    count = guard ? 1 : toInteger.toInteger(count);
+    if (count < 1 || !isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return take$1.take(toArray.toArray(arr), count);
+}
+
+exports.take = take;
Index: node_modules/es-toolkit/dist/compat/array/take.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/take.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/take.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { take as take$1 } from '../../array/take.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+
+function take(arr, count = 1, guard) {
+    count = guard ? 1 : toInteger(count);
+    if (count < 1 || !isArrayLike(arr)) {
+        return [];
+    }
+    return take$1(toArray(arr), count);
+}
+
+export { take };
Index: node_modules/es-toolkit/dist/compat/array/takeRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Creates a slice of array with n elements taken from the end.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {number} [n=1] - The number of elements to take.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * takeRight([1, 2, 3]);
+ * // => [3]
+ *
+ * @example
+ * takeRight([1, 2, 3], 2);
+ * // => [2, 3]
+ *
+ * @example
+ * takeRight([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * @example
+ * takeRight([1, 2, 3], 0);
+ * // => []
+ */
+declare function takeRight<T>(array: ArrayLike<T> | null | undefined, n?: number): T[];
+
+export { takeRight };
Index: node_modules/es-toolkit/dist/compat/array/takeRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Creates a slice of array with n elements taken from the end.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {number} [n=1] - The number of elements to take.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * takeRight([1, 2, 3]);
+ * // => [3]
+ *
+ * @example
+ * takeRight([1, 2, 3], 2);
+ * // => [2, 3]
+ *
+ * @example
+ * takeRight([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * @example
+ * takeRight([1, 2, 3], 0);
+ * // => []
+ */
+declare function takeRight<T>(array: ArrayLike<T> | null | undefined, n?: number): T[];
+
+export { takeRight };
Index: node_modules/es-toolkit/dist/compat/array/takeRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const takeRight$1 = require('../../array/takeRight.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const toInteger = require('../util/toInteger.js');
+
+function takeRight(arr, count = 1, guard) {
+    count = guard ? 1 : toInteger.toInteger(count);
+    if (count <= 0 || !isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return takeRight$1.takeRight(toArray.toArray(arr), count);
+}
+
+exports.takeRight = takeRight;
Index: node_modules/es-toolkit/dist/compat/array/takeRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { takeRight as takeRight$1 } from '../../array/takeRight.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+
+function takeRight(arr, count = 1, guard) {
+    count = guard ? 1 : toInteger(count);
+    if (count <= 0 || !isArrayLike(arr)) {
+        return [];
+    }
+    return takeRight$1(toArray(arr), count);
+}
+
+export { takeRight };
Index: node_modules/es-toolkit/dist/compat/array/takeRightWhile.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeRightWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeRightWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import { ListIteratee } from '../_internal/ListIteratee.mjs';
+
+/**
+ * Creates a slice of array with elements taken from the end. Elements are taken until predicate
+ * returns falsey. The predicate is invoked with three arguments: (value, index, array).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {ListIteratee<T>} [predicate] - The function invoked per iteration.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * const users = [
+ *   { 'user': 'barney',  'active': true },
+ *   { 'user': 'fred',    'active': false },
+ *   { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * takeRightWhile(users, function(o) { return !o.active; });
+ * // => objects for ['fred', 'pebbles']
+ *
+ * @example
+ * takeRightWhile(users, { 'user': 'pebbles', 'active': false });
+ * // => objects for ['pebbles']
+ *
+ * @example
+ * takeRightWhile(users, ['active', false]);
+ * // => objects for ['fred', 'pebbles']
+ *
+ * @example
+ * takeRightWhile(users, 'active');
+ * // => []
+ */
+declare function takeRightWhile<T>(array: ArrayLike<T> | null | undefined, predicate?: ListIteratee<T>): T[];
+
+export { takeRightWhile };
Index: node_modules/es-toolkit/dist/compat/array/takeRightWhile.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeRightWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import { ListIteratee } from '../_internal/ListIteratee.js';
+
+/**
+ * Creates a slice of array with elements taken from the end. Elements are taken until predicate
+ * returns falsey. The predicate is invoked with three arguments: (value, index, array).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {ListIteratee<T>} [predicate] - The function invoked per iteration.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * const users = [
+ *   { 'user': 'barney',  'active': true },
+ *   { 'user': 'fred',    'active': false },
+ *   { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * takeRightWhile(users, function(o) { return !o.active; });
+ * // => objects for ['fred', 'pebbles']
+ *
+ * @example
+ * takeRightWhile(users, { 'user': 'pebbles', 'active': false });
+ * // => objects for ['pebbles']
+ *
+ * @example
+ * takeRightWhile(users, ['active', false]);
+ * // => objects for ['fred', 'pebbles']
+ *
+ * @example
+ * takeRightWhile(users, 'active');
+ * // => []
+ */
+declare function takeRightWhile<T>(array: ArrayLike<T> | null | undefined, predicate?: ListIteratee<T>): T[];
+
+export { takeRightWhile };
Index: node_modules/es-toolkit/dist/compat/array/takeRightWhile.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeRightWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const negate = require('../../function/negate.js');
+const toArray = require('../_internal/toArray.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+const iteratee = require('../util/iteratee.js');
+
+function takeRightWhile(_array, predicate) {
+    if (!isArrayLikeObject.isArrayLikeObject(_array)) {
+        return [];
+    }
+    const array = toArray.toArray(_array);
+    const index = array.findLastIndex(negate.negate(iteratee.iteratee(predicate ?? identity.identity)));
+    return array.slice(index + 1);
+}
+
+exports.takeRightWhile = takeRightWhile;
Index: node_modules/es-toolkit/dist/compat/array/takeRightWhile.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeRightWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeRightWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { identity } from '../../function/identity.mjs';
+import { negate } from '../../function/negate.mjs';
+import { toArray } from '../_internal/toArray.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function takeRightWhile(_array, predicate) {
+    if (!isArrayLikeObject(_array)) {
+        return [];
+    }
+    const array = toArray(_array);
+    const index = array.findLastIndex(negate(iteratee(predicate ?? identity)));
+    return array.slice(index + 1);
+}
+
+export { takeRightWhile };
Index: node_modules/es-toolkit/dist/compat/array/takeWhile.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeWhile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import { ListIteratee } from '../_internal/ListIteratee.mjs';
+
+/**
+ * Creates a slice of array with elements taken from the beginning. Elements are taken until predicate
+ * returns falsey. The predicate is invoked with three arguments: (value, index, array).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {ListIteratee<T>} [predicate] - The function invoked per iteration.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * const users = [
+ *   { 'user': 'barney',  'active': false },
+ *   { 'user': 'fred',    'active': false },
+ *   { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * takeWhile(users, function(o) { return !o.active; });
+ * // => objects for ['barney', 'fred']
+ *
+ * @example
+ * takeWhile(users, { 'user': 'barney', 'active': false });
+ * // => objects for ['barney']
+ *
+ * @example
+ * takeWhile(users, ['active', false]);
+ * // => objects for ['barney', 'fred']
+ *
+ * @example
+ * takeWhile(users, 'active');
+ * // => []
+ */
+declare function takeWhile<T>(array: ArrayLike<T> | null | undefined, predicate?: ListIteratee<T>): T[];
+
+export { takeWhile };
Index: node_modules/es-toolkit/dist/compat/array/takeWhile.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeWhile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import { ListIteratee } from '../_internal/ListIteratee.js';
+
+/**
+ * Creates a slice of array with elements taken from the beginning. Elements are taken until predicate
+ * returns falsey. The predicate is invoked with three arguments: (value, index, array).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to query.
+ * @param {ListIteratee<T>} [predicate] - The function invoked per iteration.
+ * @returns {T[]} Returns the slice of array.
+ *
+ * @example
+ * const users = [
+ *   { 'user': 'barney',  'active': false },
+ *   { 'user': 'fred',    'active': false },
+ *   { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * takeWhile(users, function(o) { return !o.active; });
+ * // => objects for ['barney', 'fred']
+ *
+ * @example
+ * takeWhile(users, { 'user': 'barney', 'active': false });
+ * // => objects for ['barney']
+ *
+ * @example
+ * takeWhile(users, ['active', false]);
+ * // => objects for ['barney', 'fred']
+ *
+ * @example
+ * takeWhile(users, 'active');
+ * // => []
+ */
+declare function takeWhile<T>(array: ArrayLike<T> | null | undefined, predicate?: ListIteratee<T>): T[];
+
+export { takeWhile };
Index: node_modules/es-toolkit/dist/compat/array/takeWhile.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeWhile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toArray = require('../_internal/toArray.js');
+const identity = require('../function/identity.js');
+const negate = require('../function/negate.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+const iteratee = require('../util/iteratee.js');
+
+function takeWhile(array, predicate) {
+    if (!isArrayLikeObject.isArrayLikeObject(array)) {
+        return [];
+    }
+    const _array = toArray.toArray(array);
+    const index = _array.findIndex(negate.negate(iteratee.iteratee(predicate ?? identity.identity)));
+    return index === -1 ? _array : _array.slice(0, index);
+}
+
+exports.takeWhile = takeWhile;
Index: node_modules/es-toolkit/dist/compat/array/takeWhile.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/takeWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/takeWhile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { toArray } from '../_internal/toArray.mjs';
+import { identity } from '../function/identity.mjs';
+import { negate } from '../function/negate.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function takeWhile(array, predicate) {
+    if (!isArrayLikeObject(array)) {
+        return [];
+    }
+    const _array = toArray(array);
+    const index = _array.findIndex(negate(iteratee(predicate ?? identity)));
+    return index === -1 ? _array : _array.slice(0, index);
+}
+
+export { takeWhile };
Index: node_modules/es-toolkit/dist/compat/array/union.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/union.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/union.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * This function takes multiple arrays and returns a new array containing only the unique values
+ * from all input arrays, preserving the order of their first occurrence.
+ *
+ * @template T - The type of elements in the arrays.
+ * @param {Array<ArrayLike<T> | null | undefined>} arrays - The arrays to inspect.
+ * @returns {T[]} Returns the new array of combined unique values.
+ *
+ * @example
+ * // Returns [2, 1]
+ * union([2], [1, 2]);
+ *
+ * @example
+ * // Returns [2, 1, 3]
+ * union([2], [1, 2], [2, 3]);
+ *
+ * @example
+ * // Returns [1, 3, 2, [5], [4]] (does not deeply flatten nested arrays)
+ * union([1, 3, 2], [1, [5]], [2, [4]]);
+ *
+ * @example
+ * // Returns [0, 2, 1] (ignores non-array values like 3 and { '0': 1 })
+ * union([0], 3, { '0': 1 }, null, [2, 1]);
+ * @example
+ * // Returns [0, 'a', 2, 1] (treats array-like object { 0: 'a', length: 1 } as a valid array)
+ * union([0], { 0: 'a', length: 1 }, [2, 1]);
+ */
+declare function union<T>(...arrays: Array<ArrayLike<T> | null | undefined>): T[];
+
+export { union };
Index: node_modules/es-toolkit/dist/compat/array/union.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/union.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/union.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * This function takes multiple arrays and returns a new array containing only the unique values
+ * from all input arrays, preserving the order of their first occurrence.
+ *
+ * @template T - The type of elements in the arrays.
+ * @param {Array<ArrayLike<T> | null | undefined>} arrays - The arrays to inspect.
+ * @returns {T[]} Returns the new array of combined unique values.
+ *
+ * @example
+ * // Returns [2, 1]
+ * union([2], [1, 2]);
+ *
+ * @example
+ * // Returns [2, 1, 3]
+ * union([2], [1, 2], [2, 3]);
+ *
+ * @example
+ * // Returns [1, 3, 2, [5], [4]] (does not deeply flatten nested arrays)
+ * union([1, 3, 2], [1, [5]], [2, [4]]);
+ *
+ * @example
+ * // Returns [0, 2, 1] (ignores non-array values like 3 and { '0': 1 })
+ * union([0], 3, { '0': 1 }, null, [2, 1]);
+ * @example
+ * // Returns [0, 'a', 2, 1] (treats array-like object { 0: 'a', length: 1 } as a valid array)
+ * union([0], { 0: 'a', length: 1 }, [2, 1]);
+ */
+declare function union<T>(...arrays: Array<ArrayLike<T> | null | undefined>): T[];
+
+export { union };
Index: node_modules/es-toolkit/dist/compat/array/union.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flattenDepth = require('./flattenDepth.js');
+const uniq = require('../../array/uniq.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function union(...arrays) {
+    const validArrays = arrays.filter(isArrayLikeObject.isArrayLikeObject);
+    const flattened = flattenDepth.flattenDepth(validArrays, 1);
+    return uniq.uniq(flattened);
+}
+
+exports.union = union;
Index: node_modules/es-toolkit/dist/compat/array/union.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/union.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/union.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { flattenDepth } from './flattenDepth.mjs';
+import { uniq } from '../../array/uniq.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function union(...arrays) {
+    const validArrays = arrays.filter(isArrayLikeObject);
+    const flattened = flattenDepth(validArrays, 1);
+    return uniq(flattened);
+}
+
+export { union };
Index: node_modules/es-toolkit/dist/compat/array/unionBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unionBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unionBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,93 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The arrays to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ *
+ * @example
+ * unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */
+declare function unionBy<T>(arrays: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays1 - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ */
+declare function unionBy<T>(arrays1: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays1 - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], [3.4], Math.floor);
+ * // => [2.1, 1.2, 3.4]
+ */
+declare function unionBy<T>(arrays1: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays1 - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays4 - The fourth array to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], [3.4], [4.5], Math.floor);
+ * // => [2.1, 1.2, 3.4, 4.5]
+ */
+declare function unionBy<T>(arrays1: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, arrays4: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays1 - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays4 - The fourth array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays5 - The fifth array to inspect.
+ * @param {...Array<ValueIteratee<T> | ArrayLike<T> | null | undefined>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], [3.4], [4.5], [5.6], Math.floor);
+ * // => [2.1, 1.2, 3.4, 4.5, 5.6]
+ */
+declare function unionBy<T>(arrays1: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, arrays4: ArrayLike<T> | null | undefined, arrays5: ArrayLike<T> | null | undefined, ...iteratee: Array<ValueIteratee<T> | ArrayLike<T> | null | undefined>): T[];
+
+export { unionBy };
Index: node_modules/es-toolkit/dist/compat/array/unionBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unionBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,93 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The arrays to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ *
+ * @example
+ * unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */
+declare function unionBy<T>(arrays: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays1 - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ */
+declare function unionBy<T>(arrays1: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays1 - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], [3.4], Math.floor);
+ * // => [2.1, 1.2, 3.4]
+ */
+declare function unionBy<T>(arrays1: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays1 - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays4 - The fourth array to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], [3.4], [4.5], Math.floor);
+ * // => [2.1, 1.2, 3.4, 4.5]
+ */
+declare function unionBy<T>(arrays1: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, arrays4: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays1 - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays4 - The fourth array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays5 - The fifth array to inspect.
+ * @param {...Array<ValueIteratee<T> | ArrayLike<T> | null | undefined>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionBy([2.1], [1.2, 2.3], [3.4], [4.5], [5.6], Math.floor);
+ * // => [2.1, 1.2, 3.4, 4.5, 5.6]
+ */
+declare function unionBy<T>(arrays1: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, arrays4: ArrayLike<T> | null | undefined, arrays5: ArrayLike<T> | null | undefined, ...iteratee: Array<ValueIteratee<T> | ArrayLike<T> | null | undefined>): T[];
+
+export { unionBy };
Index: node_modules/es-toolkit/dist/compat/array/unionBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unionBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const last = require('../../array/last.js');
+const uniq = require('../../array/uniq.js');
+const uniqBy = require('../../array/uniqBy.js');
+const flattenArrayLike = require('../_internal/flattenArrayLike.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+const iteratee = require('../util/iteratee.js');
+
+function unionBy(...values) {
+    const lastValue = last.last(values);
+    const flattened = flattenArrayLike.flattenArrayLike(values);
+    if (isArrayLikeObject.isArrayLikeObject(lastValue) || lastValue == null) {
+        return uniq.uniq(flattened);
+    }
+    return uniqBy.uniqBy(flattened, iteratee.iteratee(lastValue));
+}
+
+exports.unionBy = unionBy;
Index: node_modules/es-toolkit/dist/compat/array/unionBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unionBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unionBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { last } from '../../array/last.mjs';
+import { uniq } from '../../array/uniq.mjs';
+import { uniqBy } from '../../array/uniqBy.mjs';
+import { flattenArrayLike } from '../_internal/flattenArrayLike.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function unionBy(...values) {
+    const lastValue = last(values);
+    const flattened = flattenArrayLike(values);
+    if (isArrayLikeObject(lastValue) || lastValue == null) {
+        return uniq(flattened);
+    }
+    return uniqBy(flattened, iteratee(lastValue));
+}
+
+export { unionBy };
Index: node_modules/es-toolkit/dist/compat/array/unionWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unionWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unionWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+/**
+ * This method is like `union` except that it accepts `comparator` which
+ * is invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The arrays to inspect.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * unionWith(objects, others, isEqual);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
+ */
+declare function unionWith<T>(arrays: ArrayLike<T> | null | undefined, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `union` except that it accepts `comparator` which
+ * is invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionWith([1, 2], [2, 3], (a, b) => a === b);
+ * // => [1, 2, 3]
+ */
+declare function unionWith<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `union` except that it accepts `comparator` which
+ * is invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {...Array<(a: T, b: T) => boolean | ArrayLike<T> | null | undefined>} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionWith([1], [2], [3], (a, b) => a === b);
+ * // => [1, 2, 3]
+ */
+declare function unionWith<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, ...comparator: Array<((a: T, b: T) => boolean) | ArrayLike<T> | null | undefined>): T[];
+
+export { unionWith };
Index: node_modules/es-toolkit/dist/compat/array/unionWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unionWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+/**
+ * This method is like `union` except that it accepts `comparator` which
+ * is invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The arrays to inspect.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * unionWith(objects, others, isEqual);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
+ */
+declare function unionWith<T>(arrays: ArrayLike<T> | null | undefined, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `union` except that it accepts `comparator` which
+ * is invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionWith([1, 2], [2, 3], (a, b) => a === b);
+ * // => [1, 2, 3]
+ */
+declare function unionWith<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `union` except that it accepts `comparator` which
+ * is invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {...Array<(a: T, b: T) => boolean | ArrayLike<T> | null | undefined>} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of combined values.
+ *
+ * @example
+ * unionWith([1], [2], [3], (a, b) => a === b);
+ * // => [1, 2, 3]
+ */
+declare function unionWith<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, ...comparator: Array<((a: T, b: T) => boolean) | ArrayLike<T> | null | undefined>): T[];
+
+export { unionWith };
Index: node_modules/es-toolkit/dist/compat/array/unionWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unionWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const last = require('../../array/last.js');
+const uniq = require('../../array/uniq.js');
+const uniqWith = require('../../array/uniqWith.js');
+const flattenArrayLike = require('../_internal/flattenArrayLike.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function unionWith(...values) {
+    const lastValue = last.last(values);
+    const flattened = flattenArrayLike.flattenArrayLike(values);
+    if (isArrayLikeObject.isArrayLikeObject(lastValue) || lastValue == null) {
+        return uniq.uniq(flattened);
+    }
+    return uniqWith.uniqWith(flattened, lastValue);
+}
+
+exports.unionWith = unionWith;
Index: node_modules/es-toolkit/dist/compat/array/unionWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unionWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unionWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { last } from '../../array/last.mjs';
+import { uniq } from '../../array/uniq.mjs';
+import { uniqWith } from '../../array/uniqWith.mjs';
+import { flattenArrayLike } from '../_internal/flattenArrayLike.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function unionWith(...values) {
+    const lastValue = last(values);
+    const flattened = flattenArrayLike(values);
+    if (isArrayLikeObject(lastValue) || lastValue == null) {
+        return uniq(flattened);
+    }
+    return uniqWith(flattened, lastValue);
+}
+
+export { unionWith };
Index: node_modules/es-toolkit/dist/compat/array/uniq.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniq.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniq.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Creates a duplicate-free version of an array.
+ *
+ * This function takes an array and returns a new array containing only the unique values
+ * from the original array, preserving the order of first occurrence.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr - The array to process.
+ * @returns {T[]} A new array with only unique values from the original array.
+ *
+ * @example
+ * const array = [1, 2, 2, 3, 4, 4, 5];
+ * const result = uniq(array);
+ * // result will be [1, 2, 3, 4, 5]
+ */
+declare function uniq<T>(arr: ArrayLike<T> | null | undefined): T[];
+
+export { uniq };
Index: node_modules/es-toolkit/dist/compat/array/uniq.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Creates a duplicate-free version of an array.
+ *
+ * This function takes an array and returns a new array containing only the unique values
+ * from the original array, preserving the order of first occurrence.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr - The array to process.
+ * @returns {T[]} A new array with only unique values from the original array.
+ *
+ * @example
+ * const array = [1, 2, 2, 3, 4, 4, 5];
+ * const result = uniq(array);
+ * // result will be [1, 2, 3, 4, 5]
+ */
+declare function uniq<T>(arr: ArrayLike<T> | null | undefined): T[];
+
+export { uniq };
Index: node_modules/es-toolkit/dist/compat/array/uniq.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const uniq$1 = require('../../array/uniq.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function uniq(arr) {
+    if (!isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return uniq$1.uniq(Array.from(arr));
+}
+
+exports.uniq = uniq;
Index: node_modules/es-toolkit/dist/compat/array/uniq.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniq.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniq.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { uniq as uniq$1 } from '../../array/uniq.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function uniq(arr) {
+    if (!isArrayLike(arr)) {
+        return [];
+    }
+    return uniq$1(Array.from(arr));
+}
+
+export { uniq };
Index: node_modules/es-toolkit/dist/compat/array/uniqBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniqBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniqBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Creates a duplicate-free version of an array, using an optional transform function.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ValueIteratee<T>} iteratee - The transform function or property name to get values from.
+ * @returns {T[]} Returns the new duplicate-free array.
+ *
+ * @example
+ * uniqBy([2.1, 1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ */
+declare function uniqBy<T>(array: ArrayLike<T> | null | undefined, iteratee: ValueIteratee<T>): T[];
+
+export { uniqBy };
Index: node_modules/es-toolkit/dist/compat/array/uniqBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniqBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniqBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Creates a duplicate-free version of an array, using an optional transform function.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} array - The array to inspect.
+ * @param {ValueIteratee<T>} iteratee - The transform function or property name to get values from.
+ * @returns {T[]} Returns the new duplicate-free array.
+ *
+ * @example
+ * uniqBy([2.1, 1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ */
+declare function uniqBy<T>(array: ArrayLike<T> | null | undefined, iteratee: ValueIteratee<T>): T[];
+
+export { uniqBy };
Index: node_modules/es-toolkit/dist/compat/array/uniqBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniqBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniqBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const uniqBy$1 = require('../../array/uniqBy.js');
+const identity = require('../../function/identity.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+const iteratee = require('../util/iteratee.js');
+
+function uniqBy(array, iteratee$1 = identity.identity) {
+    if (!isArrayLikeObject.isArrayLikeObject(array)) {
+        return [];
+    }
+    return uniqBy$1.uniqBy(Array.from(array), iteratee.iteratee(iteratee$1));
+}
+
+exports.uniqBy = uniqBy;
Index: node_modules/es-toolkit/dist/compat/array/uniqBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniqBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniqBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { uniqBy as uniqBy$1 } from '../../array/uniqBy.mjs';
+import { identity } from '../../function/identity.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function uniqBy(array, iteratee$1 = identity) {
+    if (!isArrayLikeObject(array)) {
+        return [];
+    }
+    return uniqBy$1(Array.from(array), iteratee(iteratee$1));
+}
+
+export { uniqBy };
Index: node_modules/es-toolkit/dist/compat/array/uniqWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniqWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniqWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+type Comparator<T> = (a: T, b: T) => boolean;
+/**
+ * This method is like `uniq`, except that it accepts a `comparator` which is used to determine the equality of elements.
+ *
+ * It creates a duplicate-free version of an array, in which only the first occurrence of each element is kept.
+ * If a `comparator` is provided, it will be invoked with two arguments: `(arrVal, othVal)` to compare elements.
+ * If no comparator is provided, shallow equality is used.
+ *
+ * The order of result values is determined by the order they appear in the input array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr  - The array to process.
+ * @param {Comparator<T>} [comparator] - Optional function to compare elements for equality.
+ * @returns {T[]} A new array with only unique values based on the comparator.
+ *
+ * @example
+ * const array = [1, 2, 2, 3];
+ * const result = uniqWith(array);
+ * // result will be [1, 2, 3]
+ *
+ * const array = [1, 2, 3];
+ * const result = uniqWith(array, (a, b) => a % 2 === b % 2)
+ * // result will be [1, 2]
+ */
+declare function uniqWith<T>(arr: ArrayLike<T> | null | undefined, comparator?: Comparator<T>): T[];
+
+export { uniqWith };
Index: node_modules/es-toolkit/dist/compat/array/uniqWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniqWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniqWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+type Comparator<T> = (a: T, b: T) => boolean;
+/**
+ * This method is like `uniq`, except that it accepts a `comparator` which is used to determine the equality of elements.
+ *
+ * It creates a duplicate-free version of an array, in which only the first occurrence of each element is kept.
+ * If a `comparator` is provided, it will be invoked with two arguments: `(arrVal, othVal)` to compare elements.
+ * If no comparator is provided, shallow equality is used.
+ *
+ * The order of result values is determined by the order they appear in the input array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} arr  - The array to process.
+ * @param {Comparator<T>} [comparator] - Optional function to compare elements for equality.
+ * @returns {T[]} A new array with only unique values based on the comparator.
+ *
+ * @example
+ * const array = [1, 2, 2, 3];
+ * const result = uniqWith(array);
+ * // result will be [1, 2, 3]
+ *
+ * const array = [1, 2, 3];
+ * const result = uniqWith(array, (a, b) => a % 2 === b % 2)
+ * // result will be [1, 2]
+ */
+declare function uniqWith<T>(arr: ArrayLike<T> | null | undefined, comparator?: Comparator<T>): T[];
+
+export { uniqWith };
Index: node_modules/es-toolkit/dist/compat/array/uniqWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniqWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniqWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const uniqWith$1 = require('../../array/uniqWith.js');
+const uniq = require('./uniq.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function uniqWith(arr, comparator) {
+    if (!isArrayLike.isArrayLike(arr)) {
+        return [];
+    }
+    return typeof comparator === 'function' ? uniqWith$1.uniqWith(Array.from(arr), comparator) : uniq.uniq(Array.from(arr));
+}
+
+exports.uniqWith = uniqWith;
Index: node_modules/es-toolkit/dist/compat/array/uniqWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/uniqWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/uniqWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { uniqWith as uniqWith$1 } from '../../array/uniqWith.mjs';
+import { uniq } from './uniq.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function uniqWith(arr, comparator) {
+    if (!isArrayLike(arr)) {
+        return [];
+    }
+    return typeof comparator === 'function' ? uniqWith$1(Array.from(arr), comparator) : uniq(Array.from(arr));
+}
+
+export { uniqWith };
Index: node_modules/es-toolkit/dist/compat/array/unzip.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unzip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unzip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Gathers elements in the same position in an internal array
+ * from a grouped array of elements and returns them as a new array.
+ *
+ * @template T - The type of elements in the nested array.
+ * @param {T[][] | ArrayLike<ArrayLike<T>> | null | undefined} array - The nested array to unzip.
+ * @returns {T[][]} A new array of unzipped elements.
+ *
+ * @example
+ * const zipped = [['a', true, 1],['b', false, 2]];
+ * const result = unzip(zipped);
+ * // result will be [['a', 'b'], [true, false], [1, 2]]
+ */
+declare function unzip<T>(array: T[][] | ArrayLike<ArrayLike<T>> | null | undefined): T[][];
+
+export { unzip };
Index: node_modules/es-toolkit/dist/compat/array/unzip.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unzip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unzip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Gathers elements in the same position in an internal array
+ * from a grouped array of elements and returns them as a new array.
+ *
+ * @template T - The type of elements in the nested array.
+ * @param {T[][] | ArrayLike<ArrayLike<T>> | null | undefined} array - The nested array to unzip.
+ * @returns {T[][]} A new array of unzipped elements.
+ *
+ * @example
+ * const zipped = [['a', true, 1],['b', false, 2]];
+ * const result = unzip(zipped);
+ * // result will be [['a', 'b'], [true, false], [1, 2]]
+ */
+declare function unzip<T>(array: T[][] | ArrayLike<ArrayLike<T>> | null | undefined): T[][];
+
+export { unzip };
Index: node_modules/es-toolkit/dist/compat/array/unzip.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unzip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unzip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const unzip$1 = require('../../array/unzip.js');
+const isArray = require('../predicate/isArray.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function unzip(array) {
+    if (!isArrayLikeObject.isArrayLikeObject(array) || !array.length) {
+        return [];
+    }
+    array = isArray.isArray(array) ? array : Array.from(array);
+    array = array.filter(item => isArrayLikeObject.isArrayLikeObject(item));
+    return unzip$1.unzip(array);
+}
+
+exports.unzip = unzip;
Index: node_modules/es-toolkit/dist/compat/array/unzip.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unzip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unzip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { unzip as unzip$1 } from '../../array/unzip.mjs';
+import { isArray } from '../predicate/isArray.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function unzip(array) {
+    if (!isArrayLikeObject(array) || !array.length) {
+        return [];
+    }
+    array = isArray(array) ? array : Array.from(array);
+    array = array.filter(item => isArrayLikeObject(item));
+    return unzip$1(array);
+}
+
+export { unzip };
Index: node_modules/es-toolkit/dist/compat/array/unzipWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unzipWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unzipWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * This method is like `unzip` except that it accepts an iteratee to specify
+ * how regrouped values should be combined. The iteratee is invoked with the
+ * elements of each group: (...group).
+ *
+ * @template T, R
+ * @param {ArrayLike<ArrayLike<T>> | null | undefined} array - The array of grouped elements to process.
+ * @param {(...values: T[]) => R} iteratee - The function to combine regrouped values.
+ * @returns {R[]} Returns the new array of regrouped elements.
+ *
+ * @example
+ * unzipWith([[1, 10, 100], [2, 20, 200]], (a, b) => a + b);
+ * // => [3, 30, 300]
+ */
+declare function unzipWith<T, R>(array: ArrayLike<ArrayLike<T>> | null | undefined, iteratee: (...values: T[]) => R): R[];
+/**
+ * This method is like `unzip` except that it accepts an iteratee to specify
+ * how regrouped values should be combined.
+ *
+ * @template T
+ * @param {ArrayLike<ArrayLike<T>> | null | undefined} array - The array of grouped elements to process.
+ * @returns {T[][]} Returns the new array of regrouped elements.
+ *
+ * @example
+ * unzipWith([[1, 10, 100], [2, 20, 200]]);
+ * // => [[1, 2], [10, 20], [100, 200]]
+ */
+declare function unzipWith<T>(array: ArrayLike<ArrayLike<T>> | null | undefined): T[][];
+
+export { unzipWith };
Index: node_modules/es-toolkit/dist/compat/array/unzipWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unzipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unzipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * This method is like `unzip` except that it accepts an iteratee to specify
+ * how regrouped values should be combined. The iteratee is invoked with the
+ * elements of each group: (...group).
+ *
+ * @template T, R
+ * @param {ArrayLike<ArrayLike<T>> | null | undefined} array - The array of grouped elements to process.
+ * @param {(...values: T[]) => R} iteratee - The function to combine regrouped values.
+ * @returns {R[]} Returns the new array of regrouped elements.
+ *
+ * @example
+ * unzipWith([[1, 10, 100], [2, 20, 200]], (a, b) => a + b);
+ * // => [3, 30, 300]
+ */
+declare function unzipWith<T, R>(array: ArrayLike<ArrayLike<T>> | null | undefined, iteratee: (...values: T[]) => R): R[];
+/**
+ * This method is like `unzip` except that it accepts an iteratee to specify
+ * how regrouped values should be combined.
+ *
+ * @template T
+ * @param {ArrayLike<ArrayLike<T>> | null | undefined} array - The array of grouped elements to process.
+ * @returns {T[][]} Returns the new array of regrouped elements.
+ *
+ * @example
+ * unzipWith([[1, 10, 100], [2, 20, 200]]);
+ * // => [[1, 2], [10, 20], [100, 200]]
+ */
+declare function unzipWith<T>(array: ArrayLike<ArrayLike<T>> | null | undefined): T[][];
+
+export { unzipWith };
Index: node_modules/es-toolkit/dist/compat/array/unzipWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unzipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unzipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const unzip = require('../../array/unzip.js');
+const isArray = require('../predicate/isArray.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function unzipWith(array, iteratee) {
+    if (!isArrayLikeObject.isArrayLikeObject(array) || !array.length) {
+        return [];
+    }
+    const unzipped = isArray.isArray(array) ? unzip.unzip(array) : unzip.unzip(Array.from(array, value => Array.from(value)));
+    if (!iteratee) {
+        return unzipped;
+    }
+    const result = new Array(unzipped.length);
+    for (let i = 0; i < unzipped.length; i++) {
+        const value = unzipped[i];
+        result[i] = iteratee(...value);
+    }
+    return result;
+}
+
+exports.unzipWith = unzipWith;
Index: node_modules/es-toolkit/dist/compat/array/unzipWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/unzipWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/unzipWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { unzip } from '../../array/unzip.mjs';
+import { isArray } from '../predicate/isArray.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function unzipWith(array, iteratee) {
+    if (!isArrayLikeObject(array) || !array.length) {
+        return [];
+    }
+    const unzipped = isArray(array) ? unzip(array) : unzip(Array.from(array, value => Array.from(value)));
+    if (!iteratee) {
+        return unzipped;
+    }
+    const result = new Array(unzipped.length);
+    for (let i = 0; i < unzipped.length; i++) {
+        const value = unzipped[i];
+        result[i] = iteratee(...value);
+    }
+    return result;
+}
+
+export { unzipWith };
Index: node_modules/es-toolkit/dist/compat/array/without.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/without.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/without.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Creates an array that excludes all specified values.
+ *
+ * It correctly excludes `NaN`, as it compares values using [SameValueZero](https://tc39.es/ecma262/multipage/abstract-operations.html#sec-samevaluezero).
+ *
+ * @template T The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} array - The array to filter.
+ * @param {...T[]} values - The values to exclude.
+ * @returns {T[]} A new array without the specified values.
+ *
+ * @example
+ * // Removes the specified values from the array
+ * without([1, 2, 3, 4, 5], 2, 4);
+ * // Returns: [1, 3, 5]
+ *
+ * @example
+ * // Removes specified string values from the array
+ * without(['a', 'b', 'c', 'a'], 'a');
+ * // Returns: ['b', 'c']
+ */
+declare function without<T>(array: ArrayLike<T> | null | undefined, ...values: T[]): T[];
+
+export { without };
Index: node_modules/es-toolkit/dist/compat/array/without.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/without.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/without.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Creates an array that excludes all specified values.
+ *
+ * It correctly excludes `NaN`, as it compares values using [SameValueZero](https://tc39.es/ecma262/multipage/abstract-operations.html#sec-samevaluezero).
+ *
+ * @template T The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} array - The array to filter.
+ * @param {...T[]} values - The values to exclude.
+ * @returns {T[]} A new array without the specified values.
+ *
+ * @example
+ * // Removes the specified values from the array
+ * without([1, 2, 3, 4, 5], 2, 4);
+ * // Returns: [1, 3, 5]
+ *
+ * @example
+ * // Removes specified string values from the array
+ * without(['a', 'b', 'c', 'a'], 'a');
+ * // Returns: ['b', 'c']
+ */
+declare function without<T>(array: ArrayLike<T> | null | undefined, ...values: T[]): T[];
+
+export { without };
Index: node_modules/es-toolkit/dist/compat/array/without.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/without.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/without.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const without$1 = require('../../array/without.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function without(array, ...values) {
+    if (!isArrayLikeObject.isArrayLikeObject(array)) {
+        return [];
+    }
+    return without$1.without(Array.from(array), ...values);
+}
+
+exports.without = without;
Index: node_modules/es-toolkit/dist/compat/array/without.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/without.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/without.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { without as without$1 } from '../../array/without.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function without(array, ...values) {
+    if (!isArrayLikeObject(array)) {
+        return [];
+    }
+    return without$1(Array.from(array), ...values);
+}
+
+export { without };
Index: node_modules/es-toolkit/dist/compat/array/xor.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xor.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xor.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Computes the symmetric difference of the provided arrays, returning an array of elements
+ * that exist in only one of the arrays.
+ *
+ * @template T - The type of elements in the arrays.
+ * @param {...(ArrayLike<T> | null | undefined)} arrays - The arrays to compare.
+ * @returns {T[]} An array containing the elements that are present in only one of the provided `arrays`.
+ *
+ * @example
+ * // Returns [1, 2, 5, 6]
+ * xor([1, 2, 3, 4], [3, 4, 5, 6]);
+ *
+ * @example
+ * // Returns ['a', 'c']
+ * xor(['a', 'b'], ['b', 'c']);
+ *
+ * @example
+ * // Returns [1, 3, 5]
+ * xor([1, 2], [2, 3], [4, 5]);
+ */
+declare function xor<T>(...arrays: Array<ArrayLike<T> | null | undefined>): T[];
+
+export { xor };
Index: node_modules/es-toolkit/dist/compat/array/xor.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Computes the symmetric difference of the provided arrays, returning an array of elements
+ * that exist in only one of the arrays.
+ *
+ * @template T - The type of elements in the arrays.
+ * @param {...(ArrayLike<T> | null | undefined)} arrays - The arrays to compare.
+ * @returns {T[]} An array containing the elements that are present in only one of the provided `arrays`.
+ *
+ * @example
+ * // Returns [1, 2, 5, 6]
+ * xor([1, 2, 3, 4], [3, 4, 5, 6]);
+ *
+ * @example
+ * // Returns ['a', 'c']
+ * xor(['a', 'b'], ['b', 'c']);
+ *
+ * @example
+ * // Returns [1, 3, 5]
+ * xor([1, 2], [2, 3], [4, 5]);
+ */
+declare function xor<T>(...arrays: Array<ArrayLike<T> | null | undefined>): T[];
+
+export { xor };
Index: node_modules/es-toolkit/dist/compat/array/xor.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+const toArray = require('../util/toArray.js');
+
+function xor(...arrays) {
+    const itemCounts = new Map();
+    for (let i = 0; i < arrays.length; i++) {
+        const array = arrays[i];
+        if (!isArrayLikeObject.isArrayLikeObject(array)) {
+            continue;
+        }
+        const itemSet = new Set(toArray.toArray(array));
+        for (const item of itemSet) {
+            if (!itemCounts.has(item)) {
+                itemCounts.set(item, 1);
+            }
+            else {
+                itemCounts.set(item, itemCounts.get(item) + 1);
+            }
+        }
+    }
+    const result = [];
+    for (const [item, count] of itemCounts) {
+        if (count === 1) {
+            result.push(item);
+        }
+    }
+    return result;
+}
+
+exports.xor = xor;
Index: node_modules/es-toolkit/dist/compat/array/xor.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xor.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xor.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+import { toArray } from '../util/toArray.mjs';
+
+function xor(...arrays) {
+    const itemCounts = new Map();
+    for (let i = 0; i < arrays.length; i++) {
+        const array = arrays[i];
+        if (!isArrayLikeObject(array)) {
+            continue;
+        }
+        const itemSet = new Set(toArray(array));
+        for (const item of itemSet) {
+            if (!itemCounts.has(item)) {
+                itemCounts.set(item, 1);
+            }
+            else {
+                itemCounts.set(item, itemCounts.get(item) + 1);
+            }
+        }
+    }
+    const result = [];
+    for (const [item, count] of itemCounts) {
+        if (count === 1) {
+            result.push(item);
+        }
+    }
+    return result;
+}
+
+export { xor };
Index: node_modules/es-toolkit/dist/compat/array/xorBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xorBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xorBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * This method is like `xor` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The arrays to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorBy([2.1, 1.2], [4.3, 2.4], Math.floor);
+ * // => [1.2, 4.3]
+ *
+ * @example
+ * xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 2 }]
+ */
+declare function xorBy<T>(arrays: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `xor` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorBy([2.1, 1.2], [4.3, 2.4], Math.floor);
+ * // => [1.2, 4.3]
+ */
+declare function xorBy<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `xor` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {...Array<ValueIteratee<T> | ArrayLike<T> | null | undefined>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorBy([1.2, 2.3], [3.4, 4.5], [5.6, 6.7], Math.floor);
+ * // => [1.2, 3.4, 5.6]
+ */
+declare function xorBy<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, ...iteratee: Array<ValueIteratee<T> | ArrayLike<T> | null | undefined>): T[];
+
+export { xorBy };
Index: node_modules/es-toolkit/dist/compat/array/xorBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xorBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xorBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * This method is like `xor` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The arrays to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorBy([2.1, 1.2], [4.3, 2.4], Math.floor);
+ * // => [1.2, 4.3]
+ *
+ * @example
+ * xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 2 }]
+ */
+declare function xorBy<T>(arrays: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `xor` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ValueIteratee<T>} [iteratee] - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorBy([2.1, 1.2], [4.3, 2.4], Math.floor);
+ * // => [1.2, 4.3]
+ */
+declare function xorBy<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T[];
+/**
+ * This method is like `xor` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by which
+ * uniqueness is computed. The iteratee is invoked with one argument: (value).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {...Array<ValueIteratee<T> | ArrayLike<T> | null | undefined>} iteratee - The iteratee invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorBy([1.2, 2.3], [3.4, 4.5], [5.6, 6.7], Math.floor);
+ * // => [1.2, 3.4, 5.6]
+ */
+declare function xorBy<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, ...iteratee: Array<ValueIteratee<T> | ArrayLike<T> | null | undefined>): T[];
+
+export { xorBy };
Index: node_modules/es-toolkit/dist/compat/array/xorBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xorBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xorBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const differenceBy = require('./differenceBy.js');
+const intersectionBy = require('./intersectionBy.js');
+const last = require('./last.js');
+const unionBy = require('./unionBy.js');
+const windowed = require('../../array/windowed.js');
+const identity = require('../../function/identity.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+const iteratee = require('../util/iteratee.js');
+
+function xorBy(...values) {
+    const lastValue = last.last(values);
+    let mapper = identity.identity;
+    if (!isArrayLikeObject.isArrayLikeObject(lastValue) && lastValue != null) {
+        mapper = iteratee.iteratee(lastValue);
+        values = values.slice(0, -1);
+    }
+    const arrays = values.filter(isArrayLikeObject.isArrayLikeObject);
+    const union = unionBy.unionBy(...arrays, mapper);
+    const intersections = windowed.windowed(arrays, 2).map(([arr1, arr2]) => intersectionBy.intersectionBy(arr1, arr2, mapper));
+    return differenceBy.differenceBy(union, unionBy.unionBy(...intersections, mapper), mapper);
+}
+
+exports.xorBy = xorBy;
Index: node_modules/es-toolkit/dist/compat/array/xorBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xorBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xorBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { differenceBy } from './differenceBy.mjs';
+import { intersectionBy } from './intersectionBy.mjs';
+import { last } from './last.mjs';
+import { unionBy } from './unionBy.mjs';
+import { windowed } from '../../array/windowed.mjs';
+import { identity } from '../../function/identity.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function xorBy(...values) {
+    const lastValue = last(values);
+    let mapper = identity;
+    if (!isArrayLikeObject(lastValue) && lastValue != null) {
+        mapper = iteratee(lastValue);
+        values = values.slice(0, -1);
+    }
+    const arrays = values.filter(isArrayLikeObject);
+    const union = unionBy(...arrays, mapper);
+    const intersections = windowed(arrays, 2).map(([arr1, arr2]) => intersectionBy(arr1, arr2, mapper));
+    return differenceBy(union, unionBy(...intersections, mapper), mapper);
+}
+
+export { xorBy };
Index: node_modules/es-toolkit/dist/compat/array/xorWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xorWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xorWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+/**
+ * This method is like `xor` except that it accepts `comparator` which is
+ * invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The arrays to inspect.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * xorWith(objects, others, isEqual);
+ * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
+ */
+declare function xorWith<T>(arrays: ArrayLike<T> | null | undefined, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `xor` except that it accepts `comparator` which is
+ * invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorWith([1, 2], [2, 3], (a, b) => a === b);
+ * // => [1, 3]
+ */
+declare function xorWith<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `xor` except that it accepts `comparator` which is
+ * invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {...Array<(a: T, b: T) => boolean | ArrayLike<T> | null | undefined>} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorWith([1], [2], [3], (a, b) => a === b);
+ * // => [1, 2, 3]
+ */
+declare function xorWith<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, ...comparator: Array<((a: T, b: T) => boolean) | ArrayLike<T> | null | undefined>): T[];
+
+export { xorWith };
Index: node_modules/es-toolkit/dist/compat/array/xorWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xorWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xorWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+/**
+ * This method is like `xor` except that it accepts `comparator` which is
+ * invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The arrays to inspect.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * const objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * const others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ * xorWith(objects, others, isEqual);
+ * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
+ */
+declare function xorWith<T>(arrays: ArrayLike<T> | null | undefined, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `xor` except that it accepts `comparator` which is
+ * invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {(a: T, b: T) => boolean} [comparator] - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorWith([1, 2], [2, 3], (a, b) => a === b);
+ * // => [1, 3]
+ */
+declare function xorWith<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, comparator?: (a: T, b: T) => boolean): T[];
+/**
+ * This method is like `xor` except that it accepts `comparator` which is
+ * invoked to compare elements of `arrays`. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} arrays - The first array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays2 - The second array to inspect.
+ * @param {ArrayLike<T> | null | undefined} arrays3 - The third array to inspect.
+ * @param {...Array<(a: T, b: T) => boolean | ArrayLike<T> | null | undefined>} comparator - The comparator invoked per element.
+ * @returns {T[]} Returns the new array of values.
+ *
+ * @example
+ * xorWith([1], [2], [3], (a, b) => a === b);
+ * // => [1, 2, 3]
+ */
+declare function xorWith<T>(arrays: ArrayLike<T> | null | undefined, arrays2: ArrayLike<T> | null | undefined, arrays3: ArrayLike<T> | null | undefined, ...comparator: Array<((a: T, b: T) => boolean) | ArrayLike<T> | null | undefined>): T[];
+
+export { xorWith };
Index: node_modules/es-toolkit/dist/compat/array/xorWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xorWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xorWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const differenceWith = require('./differenceWith.js');
+const intersectionWith = require('./intersectionWith.js');
+const last = require('./last.js');
+const unionWith = require('./unionWith.js');
+const windowed = require('../../array/windowed.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function xorWith(...values) {
+    const lastValue = last.last(values);
+    let comparator = (a, b) => a === b;
+    if (typeof lastValue === 'function') {
+        comparator = lastValue;
+        values = values.slice(0, -1);
+    }
+    const arrays = values.filter(isArrayLikeObject.isArrayLikeObject);
+    const union = unionWith.unionWith(...arrays, comparator);
+    const intersections = windowed.windowed(arrays, 2).map(([arr1, arr2]) => intersectionWith.intersectionWith(arr1, arr2, comparator));
+    return differenceWith.differenceWith(union, unionWith.unionWith(...intersections, comparator), comparator);
+}
+
+exports.xorWith = xorWith;
Index: node_modules/es-toolkit/dist/compat/array/xorWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/xorWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/xorWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { differenceWith } from './differenceWith.mjs';
+import { intersectionWith } from './intersectionWith.mjs';
+import { last } from './last.mjs';
+import { unionWith } from './unionWith.mjs';
+import { windowed } from '../../array/windowed.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function xorWith(...values) {
+    const lastValue = last(values);
+    let comparator = (a, b) => a === b;
+    if (typeof lastValue === 'function') {
+        comparator = lastValue;
+        values = values.slice(0, -1);
+    }
+    const arrays = values.filter(isArrayLikeObject);
+    const union = unionWith(...arrays, comparator);
+    const intersections = windowed(arrays, 2).map(([arr1, arr2]) => intersectionWith(arr1, arr2, comparator));
+    return differenceWith(union, unionWith(...intersections, comparator), comparator);
+}
+
+export { xorWith };
Index: node_modules/es-toolkit/dist/compat/array/zip.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,186 @@
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @returns {Array<[T | undefined, U | undefined]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const result = zip(arr1, arr2);
+ * // result will be [[1, 'a'], [2, 'b'], [3, 'c']]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T, U
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @returns {Array<[T | undefined, U | undefined]>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1, 2], ['a', 'b']);
+ * // => [[1, 'a'], [2, 'b']]
+ */
+declare function zip<T, U>(arr1: ArrayLike<T>, arr2: ArrayLike<U>): Array<[T | undefined, U | undefined]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const result = zip(arr1, arr2, arr3);
+ * // result will be [[1, 'a', true], [2, 'b', false], [3, 'c', undefined]]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T, U, V
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined]>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1, 2], ['a', 'b'], [true, false]);
+ * // => [[1, 'a', true], [2, 'b', false]]
+ */
+declare function zip<T, U, V>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>): Array<[T | undefined, U | undefined, V | undefined]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined, W | undefined]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const arr4 = [null, null, null];
+ * const result = zip(arr1, arr2, arr3, arr4);
+ * // result will be [[1, 'a', true, null], [2, 'b', false, null], [3, 'c', undefined, null]]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined, W | undefined]>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1], ['a'], [true], [null]);
+ * // => [[1, 'a', true, null]]
+ */
+declare function zip<T, U, V, W>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, arr4: ArrayLike<W>): Array<[T | undefined, U | undefined, V | undefined, W | undefined]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @param {ArrayLike<X>} arr5 - The fifth array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined, W | undefined, X | undefined]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const arr4 = [null, null, null];
+ * const arr5 = [undefined, undefined, undefined];
+ * const result = zip(arr1, arr2, arr3, arr4, arr5);
+ * // result will be [[1, 'a', true, null, undefined], [2, 'b', false, null, undefined], [3, 'c', undefined, null, undefined]]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T, U, V, W, X
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @param {ArrayLike<X>} arr5 - The fifth array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined, W | undefined, X | undefined]>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1], ['a'], [true], [null], [undefined]);
+ * // => [[1, 'a', true, null, undefined]]
+ */
+declare function zip<T, U, V, W, X>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, arr4: ArrayLike<W>, arr5: ArrayLike<X>): Array<[T | undefined, U | undefined, V | undefined, W | undefined, X | undefined]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T
+ * @param {Array<ArrayLike<any> | null | undefined>} arrays - The arrays to zip.
+ * @returns {Array<Array<T | undefined>>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const arr4 = [null, null, null];
+ * const arr5 = [undefined, undefined, undefined];
+ * const result = zip(arr1, arr2, arr3, arr4, arr5);
+ * // result will be [[1, 'a', true, null, undefined], [2, 'b', false, null, undefined], [3, 'c', undefined, null, undefined]]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T
+ * @param {...Array<ArrayLike<T> | null | undefined>} arrays - The arrays to process.
+ * @returns {Array<Array<T | undefined>>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1, 2], ['a', 'b'], [true, false]);
+ * // => [[1, 'a', true], [2, 'b', false]]
+ */
+declare function zip<T>(...arrays: Array<ArrayLike<T> | null | undefined>): Array<Array<T | undefined>>;
+
+export { zip };
Index: node_modules/es-toolkit/dist/compat/array/zip.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,186 @@
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @returns {Array<[T | undefined, U | undefined]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const result = zip(arr1, arr2);
+ * // result will be [[1, 'a'], [2, 'b'], [3, 'c']]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T, U
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @returns {Array<[T | undefined, U | undefined]>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1, 2], ['a', 'b']);
+ * // => [[1, 'a'], [2, 'b']]
+ */
+declare function zip<T, U>(arr1: ArrayLike<T>, arr2: ArrayLike<U>): Array<[T | undefined, U | undefined]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const result = zip(arr1, arr2, arr3);
+ * // result will be [[1, 'a', true], [2, 'b', false], [3, 'c', undefined]]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T, U, V
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined]>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1, 2], ['a', 'b'], [true, false]);
+ * // => [[1, 'a', true], [2, 'b', false]]
+ */
+declare function zip<T, U, V>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>): Array<[T | undefined, U | undefined, V | undefined]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined, W | undefined]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const arr4 = [null, null, null];
+ * const result = zip(arr1, arr2, arr3, arr4);
+ * // result will be [[1, 'a', true, null], [2, 'b', false, null], [3, 'c', undefined, null]]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined, W | undefined]>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1], ['a'], [true], [null]);
+ * // => [[1, 'a', true, null]]
+ */
+declare function zip<T, U, V, W>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, arr4: ArrayLike<W>): Array<[T | undefined, U | undefined, V | undefined, W | undefined]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T, U, V, W
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @param {ArrayLike<X>} arr5 - The fifth array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined, W | undefined, X | undefined]>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const arr4 = [null, null, null];
+ * const arr5 = [undefined, undefined, undefined];
+ * const result = zip(arr1, arr2, arr3, arr4, arr5);
+ * // result will be [[1, 'a', true, null, undefined], [2, 'b', false, null, undefined], [3, 'c', undefined, null, undefined]]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T, U, V, W, X
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @param {ArrayLike<X>} arr5 - The fifth array to zip.
+ * @returns {Array<[T | undefined, U | undefined, V | undefined, W | undefined, X | undefined]>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1], ['a'], [true], [null], [undefined]);
+ * // => [[1, 'a', true, null, undefined]]
+ */
+declare function zip<T, U, V, W, X>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, arr4: ArrayLike<W>, arr5: ArrayLike<X>): Array<[T | undefined, U | undefined, V | undefined, W | undefined, X | undefined]>;
+/**
+ * Combines multiple arrays into a single array of tuples.
+ *
+ * This function takes multiple arrays and returns a new array where each element is a tuple
+ * containing the corresponding elements from the input arrays. If the input arrays are of
+ * different lengths, the resulting array will have the length of the longest input array,
+ * with undefined values for missing elements.
+ *
+ * @template T
+ * @param {Array<ArrayLike<any> | null | undefined>} arrays - The arrays to zip.
+ * @returns {Array<Array<T | undefined>>} A new array of tuples containing the corresponding elements from the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const arr3 = [true, false];
+ * const arr4 = [null, null, null];
+ * const arr5 = [undefined, undefined, undefined];
+ * const result = zip(arr1, arr2, arr3, arr4, arr5);
+ * // result will be [[1, 'a', true, null, undefined], [2, 'b', false, null, undefined], [3, 'c', undefined, null, undefined]]
+ */
+/**
+ * Creates an array of grouped elements, the first of which contains the first elements of the given arrays,
+ * the second of which contains the second elements of the given arrays, and so on.
+ *
+ * @template T
+ * @param {...Array<ArrayLike<T> | null | undefined>} arrays - The arrays to process.
+ * @returns {Array<Array<T | undefined>>} Returns the new array of grouped elements.
+ *
+ * @example
+ * zip([1, 2], ['a', 'b'], [true, false]);
+ * // => [[1, 'a', true], [2, 'b', false]]
+ */
+declare function zip<T>(...arrays: Array<ArrayLike<T> | null | undefined>): Array<Array<T | undefined>>;
+
+export { zip };
Index: node_modules/es-toolkit/dist/compat/array/zip.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const zip$1 = require('../../array/zip.js');
+const isArrayLikeObject = require('../predicate/isArrayLikeObject.js');
+
+function zip(...arrays) {
+    if (!arrays.length) {
+        return [];
+    }
+    return zip$1.zip(...arrays.filter(group => isArrayLikeObject.isArrayLikeObject(group)));
+}
+
+exports.zip = zip;
Index: node_modules/es-toolkit/dist/compat/array/zip.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { zip as zip$1 } from '../../array/zip.mjs';
+import { isArrayLikeObject } from '../predicate/isArrayLikeObject.mjs';
+
+function zip(...arrays) {
+    if (!arrays.length) {
+        return [];
+    }
+    return zip$1(...arrays.filter(group => isArrayLikeObject(group)));
+}
+
+export { zip };
Index: node_modules/es-toolkit/dist/compat/array/zipObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Combines two arrays, one of property names and one of corresponding values, into a single object.
+ *
+ * @template T - The type of values in the values array
+ * @param {ArrayLike<PropertyKey>} props - An array of property names
+ * @param {ArrayLike<T>} values - An array of values corresponding to the property names
+ * @returns {Record<string, T>} A new object composed of the given property names and values
+ *
+ * @example
+ * const props = ['a', 'b', 'c'];
+ * const values = [1, 2, 3];
+ * zipObject(props, values);
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function zipObject<T>(props: ArrayLike<PropertyKey>, values: ArrayLike<T>): Record<string, T>;
+/**
+ * Creates an object from an array of property names, with undefined values.
+ *
+ * @param {ArrayLike<PropertyKey>} [props] - An array of property names
+ * @returns {Record<string, undefined>} A new object with the given property names and undefined values
+ *
+ * @example
+ * const props = ['a', 'b', 'c'];
+ * zipObject(props);
+ * // => { a: undefined, b: undefined, c: undefined }
+ */
+declare function zipObject(props?: ArrayLike<PropertyKey>): Record<string, undefined>;
+
+export { zipObject };
Index: node_modules/es-toolkit/dist/compat/array/zipObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Combines two arrays, one of property names and one of corresponding values, into a single object.
+ *
+ * @template T - The type of values in the values array
+ * @param {ArrayLike<PropertyKey>} props - An array of property names
+ * @param {ArrayLike<T>} values - An array of values corresponding to the property names
+ * @returns {Record<string, T>} A new object composed of the given property names and values
+ *
+ * @example
+ * const props = ['a', 'b', 'c'];
+ * const values = [1, 2, 3];
+ * zipObject(props, values);
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function zipObject<T>(props: ArrayLike<PropertyKey>, values: ArrayLike<T>): Record<string, T>;
+/**
+ * Creates an object from an array of property names, with undefined values.
+ *
+ * @param {ArrayLike<PropertyKey>} [props] - An array of property names
+ * @returns {Record<string, undefined>} A new object with the given property names and undefined values
+ *
+ * @example
+ * const props = ['a', 'b', 'c'];
+ * zipObject(props);
+ * // => { a: undefined, b: undefined, c: undefined }
+ */
+declare function zipObject(props?: ArrayLike<PropertyKey>): Record<string, undefined>;
+
+export { zipObject };
Index: node_modules/es-toolkit/dist/compat/array/zipObject.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const assignValue = require('../_internal/assignValue.js');
+
+function zipObject(keys = [], values = []) {
+    const result = {};
+    for (let i = 0; i < keys.length; i++) {
+        assignValue.assignValue(result, keys[i], values[i]);
+    }
+    return result;
+}
+
+exports.zipObject = zipObject;
Index: node_modules/es-toolkit/dist/compat/array/zipObject.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { assignValue } from '../_internal/assignValue.mjs';
+
+function zipObject(keys = [], values = []) {
+    const result = {};
+    for (let i = 0; i < keys.length; i++) {
+        assignValue(result, keys[i], values[i]);
+    }
+    return result;
+}
+
+export { zipObject };
Index: node_modules/es-toolkit/dist/compat/array/zipObjectDeep.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipObjectDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipObjectDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Creates a deeply nested object given arrays of paths and values.
+ *
+ * This function takes two arrays: one containing arrays of property paths, and the other containing corresponding values.
+ * It returns a new object where paths from the first array are used as key paths to set values, with corresponding elements from the second array as values.
+ * Paths can be dot-separated strings or arrays of property names.
+ *
+ * If the `keys` array is longer than the `values` array, the remaining keys will have `undefined` as their values.
+ *
+ * @template P - The type of property paths.
+ * @template V - The type of values corresponding to the property paths.
+ * @param {ArrayLike<P | P[]>} keys - An array of property paths, each path can be a dot-separated string or an array of property names.
+ * @param {ArrayLike<V>} values - An array of values corresponding to the property paths.
+ * @returns {Record<P, V>} A new object composed of the given property paths and values.
+ *
+ * @example
+ * const paths = ['a.b.c', 'd.e.f'];
+ * const values = [1, 2];
+ * const result = zipObjectDeep(paths, values);
+ * // result will be { a: { b: { c: 1 } }, d: { e: { f: 2 } } }
+ *
+ * @example
+ * const paths = [['a', 'b', 'c'], ['d', 'e', 'f']];
+ * const values = [1, 2];
+ * const result = zipObjectDeep(paths, values);
+ * // result will be { a: { b: { c: 1 } }, d: { e: { f: 2 } } }
+ *
+ * @example
+ * const paths = ['a.b[0].c', 'a.b[1].d'];
+ * const values = [1, 2];
+ * const result = zipObjectDeep(paths, values);
+ * // result will be { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
+ */
+declare function zipObjectDeep(keys?: ArrayLike<PropertyPath>, values?: ArrayLike<any>): object;
+
+export { zipObjectDeep };
Index: node_modules/es-toolkit/dist/compat/array/zipObjectDeep.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipObjectDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipObjectDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Creates a deeply nested object given arrays of paths and values.
+ *
+ * This function takes two arrays: one containing arrays of property paths, and the other containing corresponding values.
+ * It returns a new object where paths from the first array are used as key paths to set values, with corresponding elements from the second array as values.
+ * Paths can be dot-separated strings or arrays of property names.
+ *
+ * If the `keys` array is longer than the `values` array, the remaining keys will have `undefined` as their values.
+ *
+ * @template P - The type of property paths.
+ * @template V - The type of values corresponding to the property paths.
+ * @param {ArrayLike<P | P[]>} keys - An array of property paths, each path can be a dot-separated string or an array of property names.
+ * @param {ArrayLike<V>} values - An array of values corresponding to the property paths.
+ * @returns {Record<P, V>} A new object composed of the given property paths and values.
+ *
+ * @example
+ * const paths = ['a.b.c', 'd.e.f'];
+ * const values = [1, 2];
+ * const result = zipObjectDeep(paths, values);
+ * // result will be { a: { b: { c: 1 } }, d: { e: { f: 2 } } }
+ *
+ * @example
+ * const paths = [['a', 'b', 'c'], ['d', 'e', 'f']];
+ * const values = [1, 2];
+ * const result = zipObjectDeep(paths, values);
+ * // result will be { a: { b: { c: 1 } }, d: { e: { f: 2 } } }
+ *
+ * @example
+ * const paths = ['a.b[0].c', 'a.b[1].d'];
+ * const values = [1, 2];
+ * const result = zipObjectDeep(paths, values);
+ * // result will be { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
+ */
+declare function zipObjectDeep(keys?: ArrayLike<PropertyPath>, values?: ArrayLike<any>): object;
+
+export { zipObjectDeep };
Index: node_modules/es-toolkit/dist/compat/array/zipObjectDeep.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipObjectDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipObjectDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const zip = require('../../array/zip.js');
+const set = require('../object/set.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function zipObjectDeep(keys, values) {
+    const result = {};
+    if (!isArrayLike.isArrayLike(keys)) {
+        return result;
+    }
+    if (!isArrayLike.isArrayLike(values)) {
+        values = [];
+    }
+    const zipped = zip.zip(Array.from(keys), Array.from(values));
+    for (let i = 0; i < zipped.length; i++) {
+        const [key, value] = zipped[i];
+        if (key != null) {
+            set.set(result, key, value);
+        }
+    }
+    return result;
+}
+
+exports.zipObjectDeep = zipObjectDeep;
Index: node_modules/es-toolkit/dist/compat/array/zipObjectDeep.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipObjectDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipObjectDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { zip } from '../../array/zip.mjs';
+import { set } from '../object/set.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function zipObjectDeep(keys, values) {
+    const result = {};
+    if (!isArrayLike(keys)) {
+        return result;
+    }
+    if (!isArrayLike(values)) {
+        values = [];
+    }
+    const zipped = zip(Array.from(keys), Array.from(values));
+    for (let i = 0; i < zipped.length; i++) {
+        const [key, value] = zipped[i];
+        if (key != null) {
+            set(result, key, value);
+        }
+    }
+    return result;
+}
+
+export { zipObjectDeep };
Index: node_modules/es-toolkit/dist/compat/array/zipWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,92 @@
+/**
+ * Combines one array into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {(item: T) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, R>(arr1: ArrayLike<T>, combine: (item: T) => R): R[];
+/**
+ * Combines two arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {(item1: T, item2: U) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, R>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, combine: (item1: T, item2: U) => R): R[];
+/**
+ * Combines three arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {(item1: T, item2: U, item3: V) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, R>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, combine: (item1: T, item2: U, item3: V) => R): R[];
+/**
+ * Combines four arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template W - The type of elements in the fourth array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @param {(item1: T, item2: U, item3: V, item4: W) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, W, R>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, arr4: ArrayLike<W>, combine: (item1: T, item2: U, item3: V, item4: W) => R): R[];
+/**
+ * Combines five arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template W - The type of elements in the fourth array.
+ * @template X - The type of elements in the fifth array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @param {ArrayLike<X>} arr5 - The fifth array to zip.
+ * @param {(item1: T, item2: U, item3: V, item4: W, item5: X) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, W, X, R>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, arr4: ArrayLike<W>, arr5: ArrayLike<X>, combine: (item1: T, item2: U, item3: V, item4: W, item5: X) => R): R[];
+/**
+ * Combines multiple arrays into a single array using a custom combiner function.
+ *
+ * This function takes one array and a variable number of additional arrays,
+ * applying the provided combiner function to the corresponding elements of each array.
+ * If the input arrays are of different lengths, the resulting array will have the length
+ * of the longest input array, with undefined values for missing elements.
+ *
+ * @template T - The type of elements in the input arrays.
+ * @template R - The type of elements in the resulting array.
+ * @param {Array<((...group: T[]) => R) | ArrayLike<T> | null | undefined>} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const result = zipWith(arr1, arr2, (num, char) => `${num}${char}`);
+ * // result will be ['1a', '2b', '3c']
+ */
+declare function zipWith<T, R>(...combine: Array<((...group: T[]) => R) | ArrayLike<T> | null | undefined>): R[];
+
+export { zipWith };
Index: node_modules/es-toolkit/dist/compat/array/zipWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,92 @@
+/**
+ * Combines one array into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {(item: T) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, R>(arr1: ArrayLike<T>, combine: (item: T) => R): R[];
+/**
+ * Combines two arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {(item1: T, item2: U) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, R>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, combine: (item1: T, item2: U) => R): R[];
+/**
+ * Combines three arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {(item1: T, item2: U, item3: V) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, R>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, combine: (item1: T, item2: U, item3: V) => R): R[];
+/**
+ * Combines four arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template W - The type of elements in the fourth array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @param {(item1: T, item2: U, item3: V, item4: W) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, W, R>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, arr4: ArrayLike<W>, combine: (item1: T, item2: U, item3: V, item4: W) => R): R[];
+/**
+ * Combines five arrays into a single array using a custom combiner function.
+ *
+ * @template T - The type of elements in the first array.
+ * @template U - The type of elements in the second array.
+ * @template V - The type of elements in the third array.
+ * @template W - The type of elements in the fourth array.
+ * @template X - The type of elements in the fifth array.
+ * @template R - The type of elements in the resulting array.
+ * @param {ArrayLike<T>} arr1 - The first array to zip.
+ * @param {ArrayLike<U>} arr2 - The second array to zip.
+ * @param {ArrayLike<V>} arr3 - The third array to zip.
+ * @param {ArrayLike<W>} arr4 - The fourth array to zip.
+ * @param {ArrayLike<X>} arr5 - The fifth array to zip.
+ * @param {(item1: T, item2: U, item3: V, item4: W, item5: X) => R} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ */
+declare function zipWith<T, U, V, W, X, R>(arr1: ArrayLike<T>, arr2: ArrayLike<U>, arr3: ArrayLike<V>, arr4: ArrayLike<W>, arr5: ArrayLike<X>, combine: (item1: T, item2: U, item3: V, item4: W, item5: X) => R): R[];
+/**
+ * Combines multiple arrays into a single array using a custom combiner function.
+ *
+ * This function takes one array and a variable number of additional arrays,
+ * applying the provided combiner function to the corresponding elements of each array.
+ * If the input arrays are of different lengths, the resulting array will have the length
+ * of the longest input array, with undefined values for missing elements.
+ *
+ * @template T - The type of elements in the input arrays.
+ * @template R - The type of elements in the resulting array.
+ * @param {Array<((...group: T[]) => R) | ArrayLike<T> | null | undefined>} combine - The combiner function that takes corresponding elements from each array and returns a single value.
+ * @returns {R[]} A new array where each element is the result of applying the combiner function to the corresponding elements of the input arrays.
+ *
+ * @example
+ * const arr1 = [1, 2, 3];
+ * const arr2 = ['a', 'b', 'c'];
+ * const result = zipWith(arr1, arr2, (num, char) => `${num}${char}`);
+ * // result will be ['1a', '2b', '3c']
+ */
+declare function zipWith<T, R>(...combine: Array<((...group: T[]) => R) | ArrayLike<T> | null | undefined>): R[];
+
+export { zipWith };
Index: node_modules/es-toolkit/dist/compat/array/zipWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const unzip = require('./unzip.js');
+const isFunction = require('../../predicate/isFunction.js');
+
+function zipWith(...combine) {
+    let iteratee = combine.pop();
+    if (!isFunction.isFunction(iteratee)) {
+        combine.push(iteratee);
+        iteratee = undefined;
+    }
+    if (!combine?.length) {
+        return [];
+    }
+    const result = unzip.unzip(combine);
+    if (iteratee == null) {
+        return result;
+    }
+    return result.map(group => iteratee(...group));
+}
+
+exports.zipWith = zipWith;
Index: node_modules/es-toolkit/dist/compat/array/zipWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/array/zipWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/array/zipWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { unzip } from './unzip.mjs';
+import { isFunction } from '../../predicate/isFunction.mjs';
+
+function zipWith(...combine) {
+    let iteratee = combine.pop();
+    if (!isFunction(iteratee)) {
+        combine.push(iteratee);
+        iteratee = undefined;
+    }
+    if (!combine?.length) {
+        return [];
+    }
+    const result = unzip(combine);
+    if (iteratee == null) {
+        return result;
+    }
+    return result.map(group => iteratee(...group));
+}
+
+export { zipWith };
Index: node_modules/es-toolkit/dist/compat/compat.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/compat.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/compat.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,291 @@
+export { castArray } from './array/castArray.mjs';
+export { chunk } from './array/chunk.mjs';
+export { compact } from './array/compact.mjs';
+export { concat } from './array/concat.mjs';
+export { countBy } from './array/countBy.mjs';
+export { difference } from './array/difference.mjs';
+export { differenceBy } from './array/differenceBy.mjs';
+export { differenceWith } from './array/differenceWith.mjs';
+export { drop } from './array/drop.mjs';
+export { dropRight } from './array/dropRight.mjs';
+export { dropRightWhile } from './array/dropRightWhile.mjs';
+export { dropWhile } from './array/dropWhile.mjs';
+export { forEach as each, forEach } from './array/forEach.mjs';
+export { forEachRight as eachRight, forEachRight } from './array/forEachRight.mjs';
+export { every } from './array/every.mjs';
+export { fill } from './array/fill.mjs';
+export { filter } from './array/filter.mjs';
+export { find } from './array/find.mjs';
+export { findIndex } from './array/findIndex.mjs';
+export { findLast } from './array/findLast.mjs';
+export { findLastIndex } from './array/findLastIndex.mjs';
+export { head as first, head } from './array/head.mjs';
+export { flatMap } from './array/flatMap.mjs';
+export { flatMapDeep } from './array/flatMapDeep.mjs';
+export { flatMapDepth } from './array/flatMapDepth.mjs';
+export { flatten } from './array/flatten.mjs';
+export { flattenDeep } from './array/flattenDeep.mjs';
+export { flattenDepth } from './array/flattenDepth.mjs';
+export { groupBy } from './array/groupBy.mjs';
+export { includes } from './array/includes.mjs';
+export { indexOf } from './array/indexOf.mjs';
+export { initial } from './array/initial.mjs';
+export { intersection } from './array/intersection.mjs';
+export { intersectionBy } from './array/intersectionBy.mjs';
+export { intersectionWith } from './array/intersectionWith.mjs';
+export { invokeMap } from './array/invokeMap.mjs';
+export { join } from './array/join.mjs';
+export { keyBy } from './array/keyBy.mjs';
+export { last } from './array/last.mjs';
+export { lastIndexOf } from './array/lastIndexOf.mjs';
+export { map } from './array/map.mjs';
+export { nth } from './array/nth.mjs';
+export { orderBy } from './array/orderBy.mjs';
+export { partition } from './array/partition.mjs';
+export { pull } from './array/pull.mjs';
+export { pullAll } from './array/pullAll.mjs';
+export { pullAllBy } from './array/pullAllBy.mjs';
+export { pullAllWith } from './array/pullAllWith.mjs';
+export { pullAt } from './array/pullAt.mjs';
+export { reduce } from './array/reduce.mjs';
+export { reduceRight } from './array/reduceRight.mjs';
+export { reject } from './array/reject.mjs';
+export { remove } from './array/remove.mjs';
+export { reverse } from './array/reverse.mjs';
+export { sample } from './array/sample.mjs';
+export { sampleSize } from './array/sampleSize.mjs';
+export { shuffle } from './array/shuffle.mjs';
+export { size } from './array/size.mjs';
+export { slice } from './array/slice.mjs';
+export { some } from './array/some.mjs';
+export { sortBy } from './array/sortBy.mjs';
+export { sortedIndex } from './array/sortedIndex.mjs';
+export { sortedIndexBy } from './array/sortedIndexBy.mjs';
+export { sortedIndexOf } from './array/sortedIndexOf.mjs';
+export { sortedLastIndex } from './array/sortedLastIndex.mjs';
+export { sortedLastIndexBy } from './array/sortedLastIndexBy.mjs';
+export { sortedLastIndexOf } from './array/sortedLastIndexOf.mjs';
+export { tail } from './array/tail.mjs';
+export { take } from './array/take.mjs';
+export { takeRight } from './array/takeRight.mjs';
+export { takeRightWhile } from './array/takeRightWhile.mjs';
+export { takeWhile } from './array/takeWhile.mjs';
+export { union } from './array/union.mjs';
+export { unionBy } from './array/unionBy.mjs';
+export { unionWith } from './array/unionWith.mjs';
+export { uniq } from './array/uniq.mjs';
+export { uniqBy } from './array/uniqBy.mjs';
+export { uniqWith } from './array/uniqWith.mjs';
+export { unzip } from './array/unzip.mjs';
+export { unzipWith } from './array/unzipWith.mjs';
+export { without } from './array/without.mjs';
+export { xor } from './array/xor.mjs';
+export { xorBy } from './array/xorBy.mjs';
+export { xorWith } from './array/xorWith.mjs';
+export { zip } from './array/zip.mjs';
+export { zipObject } from './array/zipObject.mjs';
+export { zipObjectDeep } from './array/zipObjectDeep.mjs';
+export { zipWith } from './array/zipWith.mjs';
+export { after } from './function/after.mjs';
+export { ary } from './function/ary.mjs';
+export { attempt } from './function/attempt.mjs';
+export { before } from './function/before.mjs';
+export { bind } from './function/bind.mjs';
+export { bindKey } from './function/bindKey.mjs';
+export { curry } from './function/curry.mjs';
+export { curryRight } from './function/curryRight.mjs';
+export { DebouncedFunc, debounce } from './function/debounce.mjs';
+export { defer } from './function/defer.mjs';
+export { delay } from './function/delay.mjs';
+export { flip } from './function/flip.mjs';
+export { flow } from './function/flow.mjs';
+export { flowRight } from './function/flowRight.mjs';
+export { memoize } from './function/memoize.mjs';
+export { negate } from './function/negate.mjs';
+export { nthArg } from './function/nthArg.mjs';
+export { once } from './function/once.mjs';
+export { overArgs } from './function/overArgs.mjs';
+export { partial } from './function/partial.mjs';
+export { partialRight } from './function/partialRight.mjs';
+export { rearg } from './function/rearg.mjs';
+export { rest } from './function/rest.mjs';
+export { spread } from './function/spread.mjs';
+export { throttle } from './function/throttle.mjs';
+export { unary } from './function/unary.mjs';
+export { wrap } from './function/wrap.mjs';
+export { add } from './math/add.mjs';
+export { ceil } from './math/ceil.mjs';
+export { clamp } from './math/clamp.mjs';
+export { divide } from './math/divide.mjs';
+export { floor } from './math/floor.mjs';
+export { inRange } from './math/inRange.mjs';
+export { max } from './math/max.mjs';
+export { maxBy } from './math/maxBy.mjs';
+export { mean } from './math/mean.mjs';
+export { meanBy } from './math/meanBy.mjs';
+export { min } from './math/min.mjs';
+export { minBy } from './math/minBy.mjs';
+export { multiply } from './math/multiply.mjs';
+export { parseInt } from './math/parseInt.mjs';
+export { random } from './math/random.mjs';
+export { range } from './math/range.mjs';
+export { rangeRight } from './math/rangeRight.mjs';
+export { round } from './math/round.mjs';
+export { subtract } from './math/subtract.mjs';
+export { sum } from './math/sum.mjs';
+export { sumBy } from './math/sumBy.mjs';
+export { isEqual } from '../predicate/isEqual.mjs';
+export { identity } from './function/identity.mjs';
+export { noop } from './function/noop.mjs';
+export { assign } from './object/assign.mjs';
+export { assignIn, assignIn as extend } from './object/assignIn.mjs';
+export { assignInWith, assignInWith as extendWith } from './object/assignInWith.mjs';
+export { assignWith } from './object/assignWith.mjs';
+export { at } from './object/at.mjs';
+export { clone } from './object/clone.mjs';
+export { cloneDeep } from './object/cloneDeep.mjs';
+export { cloneDeepWith } from './object/cloneDeepWith.mjs';
+export { cloneWith } from './object/cloneWith.mjs';
+export { create } from './object/create.mjs';
+export { defaults } from './object/defaults.mjs';
+export { defaultsDeep } from './object/defaultsDeep.mjs';
+export { findKey } from './object/findKey.mjs';
+export { findLastKey } from './object/findLastKey.mjs';
+export { forIn } from './object/forIn.mjs';
+export { forInRight } from './object/forInRight.mjs';
+export { forOwn } from './object/forOwn.mjs';
+export { forOwnRight } from './object/forOwnRight.mjs';
+export { fromPairs } from './object/fromPairs.mjs';
+export { functions } from './object/functions.mjs';
+export { functionsIn } from './object/functionsIn.mjs';
+export { get } from './object/get.mjs';
+export { has } from './object/has.mjs';
+export { hasIn } from './object/hasIn.mjs';
+export { invert } from './object/invert.mjs';
+export { invertBy } from './object/invertBy.mjs';
+export { keys } from './object/keys.mjs';
+export { keysIn } from './object/keysIn.mjs';
+export { mapKeys } from './object/mapKeys.mjs';
+export { mapValues } from './object/mapValues.mjs';
+export { merge } from './object/merge.mjs';
+export { mergeWith } from './object/mergeWith.mjs';
+export { omit } from './object/omit.mjs';
+export { omitBy } from './object/omitBy.mjs';
+export { pick } from './object/pick.mjs';
+export { pickBy } from './object/pickBy.mjs';
+export { property } from './object/property.mjs';
+export { propertyOf } from './object/propertyOf.mjs';
+export { result } from './object/result.mjs';
+export { set } from './object/set.mjs';
+export { setWith } from './object/setWith.mjs';
+export { toDefaulted } from './object/toDefaulted.mjs';
+export { toPairs } from './object/toPairs.mjs';
+export { toPairsIn } from './object/toPairsIn.mjs';
+export { transform } from './object/transform.mjs';
+export { unset } from './object/unset.mjs';
+export { update } from './object/update.mjs';
+export { updateWith } from './object/updateWith.mjs';
+export { values } from './object/values.mjs';
+export { valuesIn } from './object/valuesIn.mjs';
+export { isFunction } from './predicate/isFunction.mjs';
+export { isLength } from './predicate/isLength.mjs';
+export { isMatchWith } from './predicate/isMatchWith.mjs';
+export { isNative } from './predicate/isNative.mjs';
+export { isNull } from './predicate/isNull.mjs';
+export { isUndefined } from './predicate/isUndefined.mjs';
+export { conforms } from './predicate/conforms.mjs';
+export { conformsTo } from './predicate/conformsTo.mjs';
+export { isArguments } from './predicate/isArguments.mjs';
+export { isArray } from './predicate/isArray.mjs';
+export { isArrayBuffer } from './predicate/isArrayBuffer.mjs';
+export { isArrayLike } from './predicate/isArrayLike.mjs';
+export { isArrayLikeObject } from './predicate/isArrayLikeObject.mjs';
+export { isBoolean } from './predicate/isBoolean.mjs';
+export { isBuffer } from './predicate/isBuffer.mjs';
+export { isDate } from './predicate/isDate.mjs';
+export { isElement } from './predicate/isElement.mjs';
+export { isEmpty } from './predicate/isEmpty.mjs';
+export { isEqualWith } from './predicate/isEqualWith.mjs';
+export { isError } from './predicate/isError.mjs';
+export { isFinite } from './predicate/isFinite.mjs';
+export { isInteger } from './predicate/isInteger.mjs';
+export { isMap } from './predicate/isMap.mjs';
+export { isMatch } from './predicate/isMatch.mjs';
+export { isNaN } from './predicate/isNaN.mjs';
+export { isNil } from './predicate/isNil.mjs';
+export { isNumber } from './predicate/isNumber.mjs';
+export { isObject } from './predicate/isObject.mjs';
+export { isObjectLike } from './predicate/isObjectLike.mjs';
+export { isPlainObject } from './predicate/isPlainObject.mjs';
+export { isRegExp } from './predicate/isRegExp.mjs';
+export { isSafeInteger } from './predicate/isSafeInteger.mjs';
+export { isSet } from './predicate/isSet.mjs';
+export { isString } from './predicate/isString.mjs';
+export { isSymbol } from './predicate/isSymbol.mjs';
+export { isTypedArray } from './predicate/isTypedArray.mjs';
+export { isWeakMap } from './predicate/isWeakMap.mjs';
+export { isWeakSet } from './predicate/isWeakSet.mjs';
+export { matches } from './predicate/matches.mjs';
+export { matchesProperty } from './predicate/matchesProperty.mjs';
+export { capitalize } from './string/capitalize.mjs';
+export { bindAll } from './util/bindAll.mjs';
+export { camelCase } from './string/camelCase.mjs';
+export { deburr } from './string/deburr.mjs';
+export { endsWith } from './string/endsWith.mjs';
+export { escape } from './string/escape.mjs';
+export { escapeRegExp } from './string/escapeRegExp.mjs';
+export { kebabCase } from './string/kebabCase.mjs';
+export { lowerCase } from './string/lowerCase.mjs';
+export { lowerFirst } from './string/lowerFirst.mjs';
+export { pad } from './string/pad.mjs';
+export { padEnd } from './string/padEnd.mjs';
+export { padStart } from './string/padStart.mjs';
+export { repeat } from './string/repeat.mjs';
+export { replace } from './string/replace.mjs';
+export { snakeCase } from './string/snakeCase.mjs';
+export { split } from './string/split.mjs';
+export { startCase } from './string/startCase.mjs';
+export { startsWith } from './string/startsWith.mjs';
+export { template, templateSettings } from './string/template.mjs';
+export { toLower } from './string/toLower.mjs';
+export { toUpper } from './string/toUpper.mjs';
+export { trim } from './string/trim.mjs';
+export { trimEnd } from './string/trimEnd.mjs';
+export { trimStart } from './string/trimStart.mjs';
+export { truncate } from './string/truncate.mjs';
+export { unescape } from './string/unescape.mjs';
+export { upperCase } from './string/upperCase.mjs';
+export { upperFirst } from './string/upperFirst.mjs';
+export { words } from './string/words.mjs';
+export { cond } from './util/cond.mjs';
+export { constant } from './util/constant.mjs';
+export { defaultTo } from './util/defaultTo.mjs';
+export { eq } from './util/eq.mjs';
+export { gt } from './util/gt.mjs';
+export { gte } from './util/gte.mjs';
+export { invoke } from './util/invoke.mjs';
+export { iteratee } from './util/iteratee.mjs';
+export { lt } from './util/lt.mjs';
+export { lte } from './util/lte.mjs';
+export { method } from './util/method.mjs';
+export { methodOf } from './util/methodOf.mjs';
+export { now } from './util/now.mjs';
+export { over } from './util/over.mjs';
+export { overEvery } from './util/overEvery.mjs';
+export { overSome } from './util/overSome.mjs';
+export { stubArray } from './util/stubArray.mjs';
+export { stubFalse } from './util/stubFalse.mjs';
+export { stubObject } from './util/stubObject.mjs';
+export { stubString } from './util/stubString.mjs';
+export { stubTrue } from './util/stubTrue.mjs';
+export { times } from './util/times.mjs';
+export { toArray } from './util/toArray.mjs';
+export { toFinite } from './util/toFinite.mjs';
+export { toInteger } from './util/toInteger.mjs';
+export { toLength } from './util/toLength.mjs';
+export { toNumber } from './util/toNumber.mjs';
+export { toPath } from './util/toPath.mjs';
+export { toPlainObject } from './util/toPlainObject.mjs';
+export { toSafeInteger } from './util/toSafeInteger.mjs';
+export { toString } from './util/toString.mjs';
+export { uniqueId } from './util/uniqueId.mjs';
Index: node_modules/es-toolkit/dist/compat/compat.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/compat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/compat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,291 @@
+export { castArray } from './array/castArray.js';
+export { chunk } from './array/chunk.js';
+export { compact } from './array/compact.js';
+export { concat } from './array/concat.js';
+export { countBy } from './array/countBy.js';
+export { difference } from './array/difference.js';
+export { differenceBy } from './array/differenceBy.js';
+export { differenceWith } from './array/differenceWith.js';
+export { drop } from './array/drop.js';
+export { dropRight } from './array/dropRight.js';
+export { dropRightWhile } from './array/dropRightWhile.js';
+export { dropWhile } from './array/dropWhile.js';
+export { forEach as each, forEach } from './array/forEach.js';
+export { forEachRight as eachRight, forEachRight } from './array/forEachRight.js';
+export { every } from './array/every.js';
+export { fill } from './array/fill.js';
+export { filter } from './array/filter.js';
+export { find } from './array/find.js';
+export { findIndex } from './array/findIndex.js';
+export { findLast } from './array/findLast.js';
+export { findLastIndex } from './array/findLastIndex.js';
+export { head as first, head } from './array/head.js';
+export { flatMap } from './array/flatMap.js';
+export { flatMapDeep } from './array/flatMapDeep.js';
+export { flatMapDepth } from './array/flatMapDepth.js';
+export { flatten } from './array/flatten.js';
+export { flattenDeep } from './array/flattenDeep.js';
+export { flattenDepth } from './array/flattenDepth.js';
+export { groupBy } from './array/groupBy.js';
+export { includes } from './array/includes.js';
+export { indexOf } from './array/indexOf.js';
+export { initial } from './array/initial.js';
+export { intersection } from './array/intersection.js';
+export { intersectionBy } from './array/intersectionBy.js';
+export { intersectionWith } from './array/intersectionWith.js';
+export { invokeMap } from './array/invokeMap.js';
+export { join } from './array/join.js';
+export { keyBy } from './array/keyBy.js';
+export { last } from './array/last.js';
+export { lastIndexOf } from './array/lastIndexOf.js';
+export { map } from './array/map.js';
+export { nth } from './array/nth.js';
+export { orderBy } from './array/orderBy.js';
+export { partition } from './array/partition.js';
+export { pull } from './array/pull.js';
+export { pullAll } from './array/pullAll.js';
+export { pullAllBy } from './array/pullAllBy.js';
+export { pullAllWith } from './array/pullAllWith.js';
+export { pullAt } from './array/pullAt.js';
+export { reduce } from './array/reduce.js';
+export { reduceRight } from './array/reduceRight.js';
+export { reject } from './array/reject.js';
+export { remove } from './array/remove.js';
+export { reverse } from './array/reverse.js';
+export { sample } from './array/sample.js';
+export { sampleSize } from './array/sampleSize.js';
+export { shuffle } from './array/shuffle.js';
+export { size } from './array/size.js';
+export { slice } from './array/slice.js';
+export { some } from './array/some.js';
+export { sortBy } from './array/sortBy.js';
+export { sortedIndex } from './array/sortedIndex.js';
+export { sortedIndexBy } from './array/sortedIndexBy.js';
+export { sortedIndexOf } from './array/sortedIndexOf.js';
+export { sortedLastIndex } from './array/sortedLastIndex.js';
+export { sortedLastIndexBy } from './array/sortedLastIndexBy.js';
+export { sortedLastIndexOf } from './array/sortedLastIndexOf.js';
+export { tail } from './array/tail.js';
+export { take } from './array/take.js';
+export { takeRight } from './array/takeRight.js';
+export { takeRightWhile } from './array/takeRightWhile.js';
+export { takeWhile } from './array/takeWhile.js';
+export { union } from './array/union.js';
+export { unionBy } from './array/unionBy.js';
+export { unionWith } from './array/unionWith.js';
+export { uniq } from './array/uniq.js';
+export { uniqBy } from './array/uniqBy.js';
+export { uniqWith } from './array/uniqWith.js';
+export { unzip } from './array/unzip.js';
+export { unzipWith } from './array/unzipWith.js';
+export { without } from './array/without.js';
+export { xor } from './array/xor.js';
+export { xorBy } from './array/xorBy.js';
+export { xorWith } from './array/xorWith.js';
+export { zip } from './array/zip.js';
+export { zipObject } from './array/zipObject.js';
+export { zipObjectDeep } from './array/zipObjectDeep.js';
+export { zipWith } from './array/zipWith.js';
+export { after } from './function/after.js';
+export { ary } from './function/ary.js';
+export { attempt } from './function/attempt.js';
+export { before } from './function/before.js';
+export { bind } from './function/bind.js';
+export { bindKey } from './function/bindKey.js';
+export { curry } from './function/curry.js';
+export { curryRight } from './function/curryRight.js';
+export { DebouncedFunc, debounce } from './function/debounce.js';
+export { defer } from './function/defer.js';
+export { delay } from './function/delay.js';
+export { flip } from './function/flip.js';
+export { flow } from './function/flow.js';
+export { flowRight } from './function/flowRight.js';
+export { memoize } from './function/memoize.js';
+export { negate } from './function/negate.js';
+export { nthArg } from './function/nthArg.js';
+export { once } from './function/once.js';
+export { overArgs } from './function/overArgs.js';
+export { partial } from './function/partial.js';
+export { partialRight } from './function/partialRight.js';
+export { rearg } from './function/rearg.js';
+export { rest } from './function/rest.js';
+export { spread } from './function/spread.js';
+export { throttle } from './function/throttle.js';
+export { unary } from './function/unary.js';
+export { wrap } from './function/wrap.js';
+export { add } from './math/add.js';
+export { ceil } from './math/ceil.js';
+export { clamp } from './math/clamp.js';
+export { divide } from './math/divide.js';
+export { floor } from './math/floor.js';
+export { inRange } from './math/inRange.js';
+export { max } from './math/max.js';
+export { maxBy } from './math/maxBy.js';
+export { mean } from './math/mean.js';
+export { meanBy } from './math/meanBy.js';
+export { min } from './math/min.js';
+export { minBy } from './math/minBy.js';
+export { multiply } from './math/multiply.js';
+export { parseInt } from './math/parseInt.js';
+export { random } from './math/random.js';
+export { range } from './math/range.js';
+export { rangeRight } from './math/rangeRight.js';
+export { round } from './math/round.js';
+export { subtract } from './math/subtract.js';
+export { sum } from './math/sum.js';
+export { sumBy } from './math/sumBy.js';
+export { isEqual } from '../predicate/isEqual.js';
+export { identity } from './function/identity.js';
+export { noop } from './function/noop.js';
+export { assign } from './object/assign.js';
+export { assignIn, assignIn as extend } from './object/assignIn.js';
+export { assignInWith, assignInWith as extendWith } from './object/assignInWith.js';
+export { assignWith } from './object/assignWith.js';
+export { at } from './object/at.js';
+export { clone } from './object/clone.js';
+export { cloneDeep } from './object/cloneDeep.js';
+export { cloneDeepWith } from './object/cloneDeepWith.js';
+export { cloneWith } from './object/cloneWith.js';
+export { create } from './object/create.js';
+export { defaults } from './object/defaults.js';
+export { defaultsDeep } from './object/defaultsDeep.js';
+export { findKey } from './object/findKey.js';
+export { findLastKey } from './object/findLastKey.js';
+export { forIn } from './object/forIn.js';
+export { forInRight } from './object/forInRight.js';
+export { forOwn } from './object/forOwn.js';
+export { forOwnRight } from './object/forOwnRight.js';
+export { fromPairs } from './object/fromPairs.js';
+export { functions } from './object/functions.js';
+export { functionsIn } from './object/functionsIn.js';
+export { get } from './object/get.js';
+export { has } from './object/has.js';
+export { hasIn } from './object/hasIn.js';
+export { invert } from './object/invert.js';
+export { invertBy } from './object/invertBy.js';
+export { keys } from './object/keys.js';
+export { keysIn } from './object/keysIn.js';
+export { mapKeys } from './object/mapKeys.js';
+export { mapValues } from './object/mapValues.js';
+export { merge } from './object/merge.js';
+export { mergeWith } from './object/mergeWith.js';
+export { omit } from './object/omit.js';
+export { omitBy } from './object/omitBy.js';
+export { pick } from './object/pick.js';
+export { pickBy } from './object/pickBy.js';
+export { property } from './object/property.js';
+export { propertyOf } from './object/propertyOf.js';
+export { result } from './object/result.js';
+export { set } from './object/set.js';
+export { setWith } from './object/setWith.js';
+export { toDefaulted } from './object/toDefaulted.js';
+export { toPairs } from './object/toPairs.js';
+export { toPairsIn } from './object/toPairsIn.js';
+export { transform } from './object/transform.js';
+export { unset } from './object/unset.js';
+export { update } from './object/update.js';
+export { updateWith } from './object/updateWith.js';
+export { values } from './object/values.js';
+export { valuesIn } from './object/valuesIn.js';
+export { isFunction } from './predicate/isFunction.js';
+export { isLength } from './predicate/isLength.js';
+export { isMatchWith } from './predicate/isMatchWith.js';
+export { isNative } from './predicate/isNative.js';
+export { isNull } from './predicate/isNull.js';
+export { isUndefined } from './predicate/isUndefined.js';
+export { conforms } from './predicate/conforms.js';
+export { conformsTo } from './predicate/conformsTo.js';
+export { isArguments } from './predicate/isArguments.js';
+export { isArray } from './predicate/isArray.js';
+export { isArrayBuffer } from './predicate/isArrayBuffer.js';
+export { isArrayLike } from './predicate/isArrayLike.js';
+export { isArrayLikeObject } from './predicate/isArrayLikeObject.js';
+export { isBoolean } from './predicate/isBoolean.js';
+export { isBuffer } from './predicate/isBuffer.js';
+export { isDate } from './predicate/isDate.js';
+export { isElement } from './predicate/isElement.js';
+export { isEmpty } from './predicate/isEmpty.js';
+export { isEqualWith } from './predicate/isEqualWith.js';
+export { isError } from './predicate/isError.js';
+export { isFinite } from './predicate/isFinite.js';
+export { isInteger } from './predicate/isInteger.js';
+export { isMap } from './predicate/isMap.js';
+export { isMatch } from './predicate/isMatch.js';
+export { isNaN } from './predicate/isNaN.js';
+export { isNil } from './predicate/isNil.js';
+export { isNumber } from './predicate/isNumber.js';
+export { isObject } from './predicate/isObject.js';
+export { isObjectLike } from './predicate/isObjectLike.js';
+export { isPlainObject } from './predicate/isPlainObject.js';
+export { isRegExp } from './predicate/isRegExp.js';
+export { isSafeInteger } from './predicate/isSafeInteger.js';
+export { isSet } from './predicate/isSet.js';
+export { isString } from './predicate/isString.js';
+export { isSymbol } from './predicate/isSymbol.js';
+export { isTypedArray } from './predicate/isTypedArray.js';
+export { isWeakMap } from './predicate/isWeakMap.js';
+export { isWeakSet } from './predicate/isWeakSet.js';
+export { matches } from './predicate/matches.js';
+export { matchesProperty } from './predicate/matchesProperty.js';
+export { capitalize } from './string/capitalize.js';
+export { bindAll } from './util/bindAll.js';
+export { camelCase } from './string/camelCase.js';
+export { deburr } from './string/deburr.js';
+export { endsWith } from './string/endsWith.js';
+export { escape } from './string/escape.js';
+export { escapeRegExp } from './string/escapeRegExp.js';
+export { kebabCase } from './string/kebabCase.js';
+export { lowerCase } from './string/lowerCase.js';
+export { lowerFirst } from './string/lowerFirst.js';
+export { pad } from './string/pad.js';
+export { padEnd } from './string/padEnd.js';
+export { padStart } from './string/padStart.js';
+export { repeat } from './string/repeat.js';
+export { replace } from './string/replace.js';
+export { snakeCase } from './string/snakeCase.js';
+export { split } from './string/split.js';
+export { startCase } from './string/startCase.js';
+export { startsWith } from './string/startsWith.js';
+export { template, templateSettings } from './string/template.js';
+export { toLower } from './string/toLower.js';
+export { toUpper } from './string/toUpper.js';
+export { trim } from './string/trim.js';
+export { trimEnd } from './string/trimEnd.js';
+export { trimStart } from './string/trimStart.js';
+export { truncate } from './string/truncate.js';
+export { unescape } from './string/unescape.js';
+export { upperCase } from './string/upperCase.js';
+export { upperFirst } from './string/upperFirst.js';
+export { words } from './string/words.js';
+export { cond } from './util/cond.js';
+export { constant } from './util/constant.js';
+export { defaultTo } from './util/defaultTo.js';
+export { eq } from './util/eq.js';
+export { gt } from './util/gt.js';
+export { gte } from './util/gte.js';
+export { invoke } from './util/invoke.js';
+export { iteratee } from './util/iteratee.js';
+export { lt } from './util/lt.js';
+export { lte } from './util/lte.js';
+export { method } from './util/method.js';
+export { methodOf } from './util/methodOf.js';
+export { now } from './util/now.js';
+export { over } from './util/over.js';
+export { overEvery } from './util/overEvery.js';
+export { overSome } from './util/overSome.js';
+export { stubArray } from './util/stubArray.js';
+export { stubFalse } from './util/stubFalse.js';
+export { stubObject } from './util/stubObject.js';
+export { stubString } from './util/stubString.js';
+export { stubTrue } from './util/stubTrue.js';
+export { times } from './util/times.js';
+export { toArray } from './util/toArray.js';
+export { toFinite } from './util/toFinite.js';
+export { toInteger } from './util/toInteger.js';
+export { toLength } from './util/toLength.js';
+export { toNumber } from './util/toNumber.js';
+export { toPath } from './util/toPath.js';
+export { toPlainObject } from './util/toPlainObject.js';
+export { toSafeInteger } from './util/toSafeInteger.js';
+export { toString } from './util/toString.js';
+export { uniqueId } from './util/uniqueId.js';
Index: node_modules/es-toolkit/dist/compat/compat.js
===================================================================
--- node_modules/es-toolkit/dist/compat/compat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/compat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,595 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const castArray = require('./array/castArray.js');
+const chunk = require('./array/chunk.js');
+const compact = require('./array/compact.js');
+const concat = require('./array/concat.js');
+const countBy = require('./array/countBy.js');
+const difference = require('./array/difference.js');
+const differenceBy = require('./array/differenceBy.js');
+const differenceWith = require('./array/differenceWith.js');
+const drop = require('./array/drop.js');
+const dropRight = require('./array/dropRight.js');
+const dropRightWhile = require('./array/dropRightWhile.js');
+const dropWhile = require('./array/dropWhile.js');
+const forEach = require('./array/forEach.js');
+const forEachRight = require('./array/forEachRight.js');
+const every = require('./array/every.js');
+const fill = require('./array/fill.js');
+const filter = require('./array/filter.js');
+const find = require('./array/find.js');
+const findIndex = require('./array/findIndex.js');
+const findLast = require('./array/findLast.js');
+const findLastIndex = require('./array/findLastIndex.js');
+const head = require('./array/head.js');
+const flatMap = require('./array/flatMap.js');
+const flatMapDeep = require('./array/flatMapDeep.js');
+const flatMapDepth = require('./array/flatMapDepth.js');
+const flatten = require('./array/flatten.js');
+const flattenDeep = require('./array/flattenDeep.js');
+const flattenDepth = require('./array/flattenDepth.js');
+const groupBy = require('./array/groupBy.js');
+const includes = require('./array/includes.js');
+const indexOf = require('./array/indexOf.js');
+const initial = require('./array/initial.js');
+const intersection = require('./array/intersection.js');
+const intersectionBy = require('./array/intersectionBy.js');
+const intersectionWith = require('./array/intersectionWith.js');
+const invokeMap = require('./array/invokeMap.js');
+const join = require('./array/join.js');
+const keyBy = require('./array/keyBy.js');
+const last = require('./array/last.js');
+const lastIndexOf = require('./array/lastIndexOf.js');
+const map = require('./array/map.js');
+const nth = require('./array/nth.js');
+const orderBy = require('./array/orderBy.js');
+const partition = require('./array/partition.js');
+const pull = require('./array/pull.js');
+const pullAll = require('./array/pullAll.js');
+const pullAllBy = require('./array/pullAllBy.js');
+const pullAllWith = require('./array/pullAllWith.js');
+const pullAt = require('./array/pullAt.js');
+const reduce = require('./array/reduce.js');
+const reduceRight = require('./array/reduceRight.js');
+const reject = require('./array/reject.js');
+const remove = require('./array/remove.js');
+const reverse = require('./array/reverse.js');
+const sample = require('./array/sample.js');
+const sampleSize = require('./array/sampleSize.js');
+const shuffle = require('./array/shuffle.js');
+const size = require('./array/size.js');
+const slice = require('./array/slice.js');
+const some = require('./array/some.js');
+const sortBy = require('./array/sortBy.js');
+const sortedIndex = require('./array/sortedIndex.js');
+const sortedIndexBy = require('./array/sortedIndexBy.js');
+const sortedIndexOf = require('./array/sortedIndexOf.js');
+const sortedLastIndex = require('./array/sortedLastIndex.js');
+const sortedLastIndexBy = require('./array/sortedLastIndexBy.js');
+const sortedLastIndexOf = require('./array/sortedLastIndexOf.js');
+const tail = require('./array/tail.js');
+const take = require('./array/take.js');
+const takeRight = require('./array/takeRight.js');
+const takeRightWhile = require('./array/takeRightWhile.js');
+const takeWhile = require('./array/takeWhile.js');
+const union = require('./array/union.js');
+const unionBy = require('./array/unionBy.js');
+const unionWith = require('./array/unionWith.js');
+const uniq = require('./array/uniq.js');
+const uniqBy = require('./array/uniqBy.js');
+const uniqWith = require('./array/uniqWith.js');
+const unzip = require('./array/unzip.js');
+const unzipWith = require('./array/unzipWith.js');
+const without = require('./array/without.js');
+const xor = require('./array/xor.js');
+const xorBy = require('./array/xorBy.js');
+const xorWith = require('./array/xorWith.js');
+const zip = require('./array/zip.js');
+const zipObject = require('./array/zipObject.js');
+const zipObjectDeep = require('./array/zipObjectDeep.js');
+const zipWith = require('./array/zipWith.js');
+const after = require('./function/after.js');
+const ary = require('./function/ary.js');
+const attempt = require('./function/attempt.js');
+const before = require('./function/before.js');
+const bind = require('./function/bind.js');
+const bindKey = require('./function/bindKey.js');
+const curry = require('./function/curry.js');
+const curryRight = require('./function/curryRight.js');
+const debounce = require('./function/debounce.js');
+const defer = require('./function/defer.js');
+const delay = require('./function/delay.js');
+const flip = require('./function/flip.js');
+const flow = require('./function/flow.js');
+const flowRight = require('./function/flowRight.js');
+const memoize = require('./function/memoize.js');
+const negate = require('./function/negate.js');
+const nthArg = require('./function/nthArg.js');
+const once = require('./function/once.js');
+const overArgs = require('./function/overArgs.js');
+const partial = require('./function/partial.js');
+const partialRight = require('./function/partialRight.js');
+const rearg = require('./function/rearg.js');
+const rest = require('./function/rest.js');
+const spread = require('./function/spread.js');
+const throttle = require('./function/throttle.js');
+const unary = require('./function/unary.js');
+const wrap = require('./function/wrap.js');
+const add = require('./math/add.js');
+const ceil = require('./math/ceil.js');
+const clamp = require('./math/clamp.js');
+const divide = require('./math/divide.js');
+const floor = require('./math/floor.js');
+const inRange = require('./math/inRange.js');
+const max = require('./math/max.js');
+const maxBy = require('./math/maxBy.js');
+const mean = require('./math/mean.js');
+const meanBy = require('./math/meanBy.js');
+const min = require('./math/min.js');
+const minBy = require('./math/minBy.js');
+const multiply = require('./math/multiply.js');
+const parseInt = require('./math/parseInt.js');
+const random = require('./math/random.js');
+const range = require('./math/range.js');
+const rangeRight = require('./math/rangeRight.js');
+const round = require('./math/round.js');
+const subtract = require('./math/subtract.js');
+const sum = require('./math/sum.js');
+const sumBy = require('./math/sumBy.js');
+const isEqual = require('../predicate/isEqual.js');
+const identity = require('./function/identity.js');
+const noop = require('./function/noop.js');
+const assign = require('./object/assign.js');
+const assignIn = require('./object/assignIn.js');
+const assignInWith = require('./object/assignInWith.js');
+const assignWith = require('./object/assignWith.js');
+const at = require('./object/at.js');
+const clone = require('./object/clone.js');
+const cloneDeep = require('./object/cloneDeep.js');
+const cloneDeepWith = require('./object/cloneDeepWith.js');
+const cloneWith = require('./object/cloneWith.js');
+const create = require('./object/create.js');
+const defaults = require('./object/defaults.js');
+const defaultsDeep = require('./object/defaultsDeep.js');
+const findKey = require('./object/findKey.js');
+const findLastKey = require('./object/findLastKey.js');
+const forIn = require('./object/forIn.js');
+const forInRight = require('./object/forInRight.js');
+const forOwn = require('./object/forOwn.js');
+const forOwnRight = require('./object/forOwnRight.js');
+const fromPairs = require('./object/fromPairs.js');
+const functions = require('./object/functions.js');
+const functionsIn = require('./object/functionsIn.js');
+const get = require('./object/get.js');
+const has = require('./object/has.js');
+const hasIn = require('./object/hasIn.js');
+const invert = require('./object/invert.js');
+const invertBy = require('./object/invertBy.js');
+const keys = require('./object/keys.js');
+const keysIn = require('./object/keysIn.js');
+const mapKeys = require('./object/mapKeys.js');
+const mapValues = require('./object/mapValues.js');
+const merge = require('./object/merge.js');
+const mergeWith = require('./object/mergeWith.js');
+const omit = require('./object/omit.js');
+const omitBy = require('./object/omitBy.js');
+const pick = require('./object/pick.js');
+const pickBy = require('./object/pickBy.js');
+const property = require('./object/property.js');
+const propertyOf = require('./object/propertyOf.js');
+const result = require('./object/result.js');
+const set = require('./object/set.js');
+const setWith = require('./object/setWith.js');
+const toDefaulted = require('./object/toDefaulted.js');
+const toPairs = require('./object/toPairs.js');
+const toPairsIn = require('./object/toPairsIn.js');
+const transform = require('./object/transform.js');
+const unset = require('./object/unset.js');
+const update = require('./object/update.js');
+const updateWith = require('./object/updateWith.js');
+const values = require('./object/values.js');
+const valuesIn = require('./object/valuesIn.js');
+const isFunction = require('./predicate/isFunction.js');
+const isLength = require('./predicate/isLength.js');
+const isMatchWith = require('./predicate/isMatchWith.js');
+const isNative = require('./predicate/isNative.js');
+const isNull = require('./predicate/isNull.js');
+const isUndefined = require('./predicate/isUndefined.js');
+const conforms = require('./predicate/conforms.js');
+const conformsTo = require('./predicate/conformsTo.js');
+const isArguments = require('./predicate/isArguments.js');
+const isArray = require('./predicate/isArray.js');
+const isArrayBuffer = require('./predicate/isArrayBuffer.js');
+const isArrayLike = require('./predicate/isArrayLike.js');
+const isArrayLikeObject = require('./predicate/isArrayLikeObject.js');
+const isBoolean = require('./predicate/isBoolean.js');
+const isBuffer = require('./predicate/isBuffer.js');
+const isDate = require('./predicate/isDate.js');
+const isElement = require('./predicate/isElement.js');
+const isEmpty = require('./predicate/isEmpty.js');
+const isEqualWith = require('./predicate/isEqualWith.js');
+const isError = require('./predicate/isError.js');
+const isFinite = require('./predicate/isFinite.js');
+const isInteger = require('./predicate/isInteger.js');
+const isMap = require('./predicate/isMap.js');
+const isMatch = require('./predicate/isMatch.js');
+const isNaN = require('./predicate/isNaN.js');
+const isNil = require('./predicate/isNil.js');
+const isNumber = require('./predicate/isNumber.js');
+const isObject = require('./predicate/isObject.js');
+const isObjectLike = require('./predicate/isObjectLike.js');
+const isPlainObject = require('./predicate/isPlainObject.js');
+const isRegExp = require('./predicate/isRegExp.js');
+const isSafeInteger = require('./predicate/isSafeInteger.js');
+const isSet = require('./predicate/isSet.js');
+const isString = require('./predicate/isString.js');
+const isSymbol = require('./predicate/isSymbol.js');
+const isTypedArray = require('./predicate/isTypedArray.js');
+const isWeakMap = require('./predicate/isWeakMap.js');
+const isWeakSet = require('./predicate/isWeakSet.js');
+const matches = require('./predicate/matches.js');
+const matchesProperty = require('./predicate/matchesProperty.js');
+const capitalize = require('./string/capitalize.js');
+const bindAll = require('./util/bindAll.js');
+const camelCase = require('./string/camelCase.js');
+const deburr = require('./string/deburr.js');
+const endsWith = require('./string/endsWith.js');
+const escape = require('./string/escape.js');
+const escapeRegExp = require('./string/escapeRegExp.js');
+const kebabCase = require('./string/kebabCase.js');
+const lowerCase = require('./string/lowerCase.js');
+const lowerFirst = require('./string/lowerFirst.js');
+const pad = require('./string/pad.js');
+const padEnd = require('./string/padEnd.js');
+const padStart = require('./string/padStart.js');
+const repeat = require('./string/repeat.js');
+const replace = require('./string/replace.js');
+const snakeCase = require('./string/snakeCase.js');
+const split = require('./string/split.js');
+const startCase = require('./string/startCase.js');
+const startsWith = require('./string/startsWith.js');
+const template = require('./string/template.js');
+const toLower = require('./string/toLower.js');
+const toUpper = require('./string/toUpper.js');
+const trim = require('./string/trim.js');
+const trimEnd = require('./string/trimEnd.js');
+const trimStart = require('./string/trimStart.js');
+const truncate = require('./string/truncate.js');
+const unescape = require('./string/unescape.js');
+const upperCase = require('./string/upperCase.js');
+const upperFirst = require('./string/upperFirst.js');
+const words = require('./string/words.js');
+const cond = require('./util/cond.js');
+const constant = require('./util/constant.js');
+const defaultTo = require('./util/defaultTo.js');
+const eq = require('./util/eq.js');
+const gt = require('./util/gt.js');
+const gte = require('./util/gte.js');
+const invoke = require('./util/invoke.js');
+const iteratee = require('./util/iteratee.js');
+const lt = require('./util/lt.js');
+const lte = require('./util/lte.js');
+const method = require('./util/method.js');
+const methodOf = require('./util/methodOf.js');
+const now = require('./util/now.js');
+const over = require('./util/over.js');
+const overEvery = require('./util/overEvery.js');
+const overSome = require('./util/overSome.js');
+const stubArray = require('./util/stubArray.js');
+const stubFalse = require('./util/stubFalse.js');
+const stubObject = require('./util/stubObject.js');
+const stubString = require('./util/stubString.js');
+const stubTrue = require('./util/stubTrue.js');
+const times = require('./util/times.js');
+const toArray = require('./util/toArray.js');
+const toFinite = require('./util/toFinite.js');
+const toInteger = require('./util/toInteger.js');
+const toLength = require('./util/toLength.js');
+const toNumber = require('./util/toNumber.js');
+const toPath = require('./util/toPath.js');
+const toPlainObject = require('./util/toPlainObject.js');
+const toSafeInteger = require('./util/toSafeInteger.js');
+const toString = require('./util/toString.js');
+const uniqueId = require('./util/uniqueId.js');
+
+
+
+exports.castArray = castArray.castArray;
+exports.chunk = chunk.chunk;
+exports.compact = compact.compact;
+exports.concat = concat.concat;
+exports.countBy = countBy.countBy;
+exports.difference = difference.difference;
+exports.differenceBy = differenceBy.differenceBy;
+exports.differenceWith = differenceWith.differenceWith;
+exports.drop = drop.drop;
+exports.dropRight = dropRight.dropRight;
+exports.dropRightWhile = dropRightWhile.dropRightWhile;
+exports.dropWhile = dropWhile.dropWhile;
+exports.each = forEach.forEach;
+exports.forEach = forEach.forEach;
+exports.eachRight = forEachRight.forEachRight;
+exports.forEachRight = forEachRight.forEachRight;
+exports.every = every.every;
+exports.fill = fill.fill;
+exports.filter = filter.filter;
+exports.find = find.find;
+exports.findIndex = findIndex.findIndex;
+exports.findLast = findLast.findLast;
+exports.findLastIndex = findLastIndex.findLastIndex;
+exports.first = head.head;
+exports.head = head.head;
+exports.flatMap = flatMap.flatMap;
+exports.flatMapDeep = flatMapDeep.flatMapDeep;
+exports.flatMapDepth = flatMapDepth.flatMapDepth;
+exports.flatten = flatten.flatten;
+exports.flattenDeep = flattenDeep.flattenDeep;
+exports.flattenDepth = flattenDepth.flattenDepth;
+exports.groupBy = groupBy.groupBy;
+exports.includes = includes.includes;
+exports.indexOf = indexOf.indexOf;
+exports.initial = initial.initial;
+exports.intersection = intersection.intersection;
+exports.intersectionBy = intersectionBy.intersectionBy;
+exports.intersectionWith = intersectionWith.intersectionWith;
+exports.invokeMap = invokeMap.invokeMap;
+exports.join = join.join;
+exports.keyBy = keyBy.keyBy;
+exports.last = last.last;
+exports.lastIndexOf = lastIndexOf.lastIndexOf;
+exports.map = map.map;
+exports.nth = nth.nth;
+exports.orderBy = orderBy.orderBy;
+exports.partition = partition.partition;
+exports.pull = pull.pull;
+exports.pullAll = pullAll.pullAll;
+exports.pullAllBy = pullAllBy.pullAllBy;
+exports.pullAllWith = pullAllWith.pullAllWith;
+exports.pullAt = pullAt.pullAt;
+exports.reduce = reduce.reduce;
+exports.reduceRight = reduceRight.reduceRight;
+exports.reject = reject.reject;
+exports.remove = remove.remove;
+exports.reverse = reverse.reverse;
+exports.sample = sample.sample;
+exports.sampleSize = sampleSize.sampleSize;
+exports.shuffle = shuffle.shuffle;
+exports.size = size.size;
+exports.slice = slice.slice;
+exports.some = some.some;
+exports.sortBy = sortBy.sortBy;
+exports.sortedIndex = sortedIndex.sortedIndex;
+exports.sortedIndexBy = sortedIndexBy.sortedIndexBy;
+exports.sortedIndexOf = sortedIndexOf.sortedIndexOf;
+exports.sortedLastIndex = sortedLastIndex.sortedLastIndex;
+exports.sortedLastIndexBy = sortedLastIndexBy.sortedLastIndexBy;
+exports.sortedLastIndexOf = sortedLastIndexOf.sortedLastIndexOf;
+exports.tail = tail.tail;
+exports.take = take.take;
+exports.takeRight = takeRight.takeRight;
+exports.takeRightWhile = takeRightWhile.takeRightWhile;
+exports.takeWhile = takeWhile.takeWhile;
+exports.union = union.union;
+exports.unionBy = unionBy.unionBy;
+exports.unionWith = unionWith.unionWith;
+exports.uniq = uniq.uniq;
+exports.uniqBy = uniqBy.uniqBy;
+exports.uniqWith = uniqWith.uniqWith;
+exports.unzip = unzip.unzip;
+exports.unzipWith = unzipWith.unzipWith;
+exports.without = without.without;
+exports.xor = xor.xor;
+exports.xorBy = xorBy.xorBy;
+exports.xorWith = xorWith.xorWith;
+exports.zip = zip.zip;
+exports.zipObject = zipObject.zipObject;
+exports.zipObjectDeep = zipObjectDeep.zipObjectDeep;
+exports.zipWith = zipWith.zipWith;
+exports.after = after.after;
+exports.ary = ary.ary;
+exports.attempt = attempt.attempt;
+exports.before = before.before;
+exports.bind = bind.bind;
+exports.bindKey = bindKey.bindKey;
+exports.curry = curry.curry;
+exports.curryRight = curryRight.curryRight;
+exports.debounce = debounce.debounce;
+exports.defer = defer.defer;
+exports.delay = delay.delay;
+exports.flip = flip.flip;
+exports.flow = flow.flow;
+exports.flowRight = flowRight.flowRight;
+exports.memoize = memoize.memoize;
+exports.negate = negate.negate;
+exports.nthArg = nthArg.nthArg;
+exports.once = once.once;
+exports.overArgs = overArgs.overArgs;
+exports.partial = partial.partial;
+exports.partialRight = partialRight.partialRight;
+exports.rearg = rearg.rearg;
+exports.rest = rest.rest;
+exports.spread = spread.spread;
+exports.throttle = throttle.throttle;
+exports.unary = unary.unary;
+exports.wrap = wrap.wrap;
+exports.add = add.add;
+exports.ceil = ceil.ceil;
+exports.clamp = clamp.clamp;
+exports.divide = divide.divide;
+exports.floor = floor.floor;
+exports.inRange = inRange.inRange;
+exports.max = max.max;
+exports.maxBy = maxBy.maxBy;
+exports.mean = mean.mean;
+exports.meanBy = meanBy.meanBy;
+exports.min = min.min;
+exports.minBy = minBy.minBy;
+exports.multiply = multiply.multiply;
+exports.parseInt = parseInt.parseInt;
+exports.random = random.random;
+exports.range = range.range;
+exports.rangeRight = rangeRight.rangeRight;
+exports.round = round.round;
+exports.subtract = subtract.subtract;
+exports.sum = sum.sum;
+exports.sumBy = sumBy.sumBy;
+exports.isEqual = isEqual.isEqual;
+exports.identity = identity.identity;
+exports.noop = noop.noop;
+exports.assign = assign.assign;
+exports.assignIn = assignIn.assignIn;
+exports.extend = assignIn.assignIn;
+exports.assignInWith = assignInWith.assignInWith;
+exports.extendWith = assignInWith.assignInWith;
+exports.assignWith = assignWith.assignWith;
+exports.at = at.at;
+exports.clone = clone.clone;
+exports.cloneDeep = cloneDeep.cloneDeep;
+exports.cloneDeepWith = cloneDeepWith.cloneDeepWith;
+exports.cloneWith = cloneWith.cloneWith;
+exports.create = create.create;
+exports.defaults = defaults.defaults;
+exports.defaultsDeep = defaultsDeep.defaultsDeep;
+exports.findKey = findKey.findKey;
+exports.findLastKey = findLastKey.findLastKey;
+exports.forIn = forIn.forIn;
+exports.forInRight = forInRight.forInRight;
+exports.forOwn = forOwn.forOwn;
+exports.forOwnRight = forOwnRight.forOwnRight;
+exports.fromPairs = fromPairs.fromPairs;
+exports.functions = functions.functions;
+exports.functionsIn = functionsIn.functionsIn;
+exports.get = get.get;
+exports.has = has.has;
+exports.hasIn = hasIn.hasIn;
+exports.invert = invert.invert;
+exports.invertBy = invertBy.invertBy;
+exports.keys = keys.keys;
+exports.keysIn = keysIn.keysIn;
+exports.mapKeys = mapKeys.mapKeys;
+exports.mapValues = mapValues.mapValues;
+exports.merge = merge.merge;
+exports.mergeWith = mergeWith.mergeWith;
+exports.omit = omit.omit;
+exports.omitBy = omitBy.omitBy;
+exports.pick = pick.pick;
+exports.pickBy = pickBy.pickBy;
+exports.property = property.property;
+exports.propertyOf = propertyOf.propertyOf;
+exports.result = result.result;
+exports.set = set.set;
+exports.setWith = setWith.setWith;
+exports.toDefaulted = toDefaulted.toDefaulted;
+exports.toPairs = toPairs.toPairs;
+exports.toPairsIn = toPairsIn.toPairsIn;
+exports.transform = transform.transform;
+exports.unset = unset.unset;
+exports.update = update.update;
+exports.updateWith = updateWith.updateWith;
+exports.values = values.values;
+exports.valuesIn = valuesIn.valuesIn;
+exports.isFunction = isFunction.isFunction;
+exports.isLength = isLength.isLength;
+exports.isMatchWith = isMatchWith.isMatchWith;
+exports.isNative = isNative.isNative;
+exports.isNull = isNull.isNull;
+exports.isUndefined = isUndefined.isUndefined;
+exports.conforms = conforms.conforms;
+exports.conformsTo = conformsTo.conformsTo;
+exports.isArguments = isArguments.isArguments;
+exports.isArray = isArray.isArray;
+exports.isArrayBuffer = isArrayBuffer.isArrayBuffer;
+exports.isArrayLike = isArrayLike.isArrayLike;
+exports.isArrayLikeObject = isArrayLikeObject.isArrayLikeObject;
+exports.isBoolean = isBoolean.isBoolean;
+exports.isBuffer = isBuffer.isBuffer;
+exports.isDate = isDate.isDate;
+exports.isElement = isElement.isElement;
+exports.isEmpty = isEmpty.isEmpty;
+exports.isEqualWith = isEqualWith.isEqualWith;
+exports.isError = isError.isError;
+exports.isFinite = isFinite.isFinite;
+exports.isInteger = isInteger.isInteger;
+exports.isMap = isMap.isMap;
+exports.isMatch = isMatch.isMatch;
+exports.isNaN = isNaN.isNaN;
+exports.isNil = isNil.isNil;
+exports.isNumber = isNumber.isNumber;
+exports.isObject = isObject.isObject;
+exports.isObjectLike = isObjectLike.isObjectLike;
+exports.isPlainObject = isPlainObject.isPlainObject;
+exports.isRegExp = isRegExp.isRegExp;
+exports.isSafeInteger = isSafeInteger.isSafeInteger;
+exports.isSet = isSet.isSet;
+exports.isString = isString.isString;
+exports.isSymbol = isSymbol.isSymbol;
+exports.isTypedArray = isTypedArray.isTypedArray;
+exports.isWeakMap = isWeakMap.isWeakMap;
+exports.isWeakSet = isWeakSet.isWeakSet;
+exports.matches = matches.matches;
+exports.matchesProperty = matchesProperty.matchesProperty;
+exports.capitalize = capitalize.capitalize;
+exports.bindAll = bindAll.bindAll;
+exports.camelCase = camelCase.camelCase;
+exports.deburr = deburr.deburr;
+exports.endsWith = endsWith.endsWith;
+exports.escape = escape.escape;
+exports.escapeRegExp = escapeRegExp.escapeRegExp;
+exports.kebabCase = kebabCase.kebabCase;
+exports.lowerCase = lowerCase.lowerCase;
+exports.lowerFirst = lowerFirst.lowerFirst;
+exports.pad = pad.pad;
+exports.padEnd = padEnd.padEnd;
+exports.padStart = padStart.padStart;
+exports.repeat = repeat.repeat;
+exports.replace = replace.replace;
+exports.snakeCase = snakeCase.snakeCase;
+exports.split = split.split;
+exports.startCase = startCase.startCase;
+exports.startsWith = startsWith.startsWith;
+exports.template = template.template;
+exports.templateSettings = template.templateSettings;
+exports.toLower = toLower.toLower;
+exports.toUpper = toUpper.toUpper;
+exports.trim = trim.trim;
+exports.trimEnd = trimEnd.trimEnd;
+exports.trimStart = trimStart.trimStart;
+exports.truncate = truncate.truncate;
+exports.unescape = unescape.unescape;
+exports.upperCase = upperCase.upperCase;
+exports.upperFirst = upperFirst.upperFirst;
+exports.words = words.words;
+exports.cond = cond.cond;
+exports.constant = constant.constant;
+exports.defaultTo = defaultTo.defaultTo;
+exports.eq = eq.eq;
+exports.gt = gt.gt;
+exports.gte = gte.gte;
+exports.invoke = invoke.invoke;
+exports.iteratee = iteratee.iteratee;
+exports.lt = lt.lt;
+exports.lte = lte.lte;
+exports.method = method.method;
+exports.methodOf = methodOf.methodOf;
+exports.now = now.now;
+exports.over = over.over;
+exports.overEvery = overEvery.overEvery;
+exports.overSome = overSome.overSome;
+exports.stubArray = stubArray.stubArray;
+exports.stubFalse = stubFalse.stubFalse;
+exports.stubObject = stubObject.stubObject;
+exports.stubString = stubString.stubString;
+exports.stubTrue = stubTrue.stubTrue;
+exports.times = times.times;
+exports.toArray = toArray.toArray;
+exports.toFinite = toFinite.toFinite;
+exports.toInteger = toInteger.toInteger;
+exports.toLength = toLength.toLength;
+exports.toNumber = toNumber.toNumber;
+exports.toPath = toPath.toPath;
+exports.toPlainObject = toPlainObject.toPlainObject;
+exports.toSafeInteger = toSafeInteger.toSafeInteger;
+exports.toString = toString.toString;
+exports.uniqueId = uniqueId.uniqueId;
Index: node_modules/es-toolkit/dist/compat/compat.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/compat.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/compat.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,291 @@
+export { castArray } from './array/castArray.mjs';
+export { chunk } from './array/chunk.mjs';
+export { compact } from './array/compact.mjs';
+export { concat } from './array/concat.mjs';
+export { countBy } from './array/countBy.mjs';
+export { difference } from './array/difference.mjs';
+export { differenceBy } from './array/differenceBy.mjs';
+export { differenceWith } from './array/differenceWith.mjs';
+export { drop } from './array/drop.mjs';
+export { dropRight } from './array/dropRight.mjs';
+export { dropRightWhile } from './array/dropRightWhile.mjs';
+export { dropWhile } from './array/dropWhile.mjs';
+export { forEach as each, forEach } from './array/forEach.mjs';
+export { forEachRight as eachRight, forEachRight } from './array/forEachRight.mjs';
+export { every } from './array/every.mjs';
+export { fill } from './array/fill.mjs';
+export { filter } from './array/filter.mjs';
+export { find } from './array/find.mjs';
+export { findIndex } from './array/findIndex.mjs';
+export { findLast } from './array/findLast.mjs';
+export { findLastIndex } from './array/findLastIndex.mjs';
+export { head as first, head } from './array/head.mjs';
+export { flatMap } from './array/flatMap.mjs';
+export { flatMapDeep } from './array/flatMapDeep.mjs';
+export { flatMapDepth } from './array/flatMapDepth.mjs';
+export { flatten } from './array/flatten.mjs';
+export { flattenDeep } from './array/flattenDeep.mjs';
+export { flattenDepth } from './array/flattenDepth.mjs';
+export { groupBy } from './array/groupBy.mjs';
+export { includes } from './array/includes.mjs';
+export { indexOf } from './array/indexOf.mjs';
+export { initial } from './array/initial.mjs';
+export { intersection } from './array/intersection.mjs';
+export { intersectionBy } from './array/intersectionBy.mjs';
+export { intersectionWith } from './array/intersectionWith.mjs';
+export { invokeMap } from './array/invokeMap.mjs';
+export { join } from './array/join.mjs';
+export { keyBy } from './array/keyBy.mjs';
+export { last } from './array/last.mjs';
+export { lastIndexOf } from './array/lastIndexOf.mjs';
+export { map } from './array/map.mjs';
+export { nth } from './array/nth.mjs';
+export { orderBy } from './array/orderBy.mjs';
+export { partition } from './array/partition.mjs';
+export { pull } from './array/pull.mjs';
+export { pullAll } from './array/pullAll.mjs';
+export { pullAllBy } from './array/pullAllBy.mjs';
+export { pullAllWith } from './array/pullAllWith.mjs';
+export { pullAt } from './array/pullAt.mjs';
+export { reduce } from './array/reduce.mjs';
+export { reduceRight } from './array/reduceRight.mjs';
+export { reject } from './array/reject.mjs';
+export { remove } from './array/remove.mjs';
+export { reverse } from './array/reverse.mjs';
+export { sample } from './array/sample.mjs';
+export { sampleSize } from './array/sampleSize.mjs';
+export { shuffle } from './array/shuffle.mjs';
+export { size } from './array/size.mjs';
+export { slice } from './array/slice.mjs';
+export { some } from './array/some.mjs';
+export { sortBy } from './array/sortBy.mjs';
+export { sortedIndex } from './array/sortedIndex.mjs';
+export { sortedIndexBy } from './array/sortedIndexBy.mjs';
+export { sortedIndexOf } from './array/sortedIndexOf.mjs';
+export { sortedLastIndex } from './array/sortedLastIndex.mjs';
+export { sortedLastIndexBy } from './array/sortedLastIndexBy.mjs';
+export { sortedLastIndexOf } from './array/sortedLastIndexOf.mjs';
+export { tail } from './array/tail.mjs';
+export { take } from './array/take.mjs';
+export { takeRight } from './array/takeRight.mjs';
+export { takeRightWhile } from './array/takeRightWhile.mjs';
+export { takeWhile } from './array/takeWhile.mjs';
+export { union } from './array/union.mjs';
+export { unionBy } from './array/unionBy.mjs';
+export { unionWith } from './array/unionWith.mjs';
+export { uniq } from './array/uniq.mjs';
+export { uniqBy } from './array/uniqBy.mjs';
+export { uniqWith } from './array/uniqWith.mjs';
+export { unzip } from './array/unzip.mjs';
+export { unzipWith } from './array/unzipWith.mjs';
+export { without } from './array/without.mjs';
+export { xor } from './array/xor.mjs';
+export { xorBy } from './array/xorBy.mjs';
+export { xorWith } from './array/xorWith.mjs';
+export { zip } from './array/zip.mjs';
+export { zipObject } from './array/zipObject.mjs';
+export { zipObjectDeep } from './array/zipObjectDeep.mjs';
+export { zipWith } from './array/zipWith.mjs';
+export { after } from './function/after.mjs';
+export { ary } from './function/ary.mjs';
+export { attempt } from './function/attempt.mjs';
+export { before } from './function/before.mjs';
+export { bind } from './function/bind.mjs';
+export { bindKey } from './function/bindKey.mjs';
+export { curry } from './function/curry.mjs';
+export { curryRight } from './function/curryRight.mjs';
+export { debounce } from './function/debounce.mjs';
+export { defer } from './function/defer.mjs';
+export { delay } from './function/delay.mjs';
+export { flip } from './function/flip.mjs';
+export { flow } from './function/flow.mjs';
+export { flowRight } from './function/flowRight.mjs';
+export { memoize } from './function/memoize.mjs';
+export { negate } from './function/negate.mjs';
+export { nthArg } from './function/nthArg.mjs';
+export { once } from './function/once.mjs';
+export { overArgs } from './function/overArgs.mjs';
+export { partial } from './function/partial.mjs';
+export { partialRight } from './function/partialRight.mjs';
+export { rearg } from './function/rearg.mjs';
+export { rest } from './function/rest.mjs';
+export { spread } from './function/spread.mjs';
+export { throttle } from './function/throttle.mjs';
+export { unary } from './function/unary.mjs';
+export { wrap } from './function/wrap.mjs';
+export { add } from './math/add.mjs';
+export { ceil } from './math/ceil.mjs';
+export { clamp } from './math/clamp.mjs';
+export { divide } from './math/divide.mjs';
+export { floor } from './math/floor.mjs';
+export { inRange } from './math/inRange.mjs';
+export { max } from './math/max.mjs';
+export { maxBy } from './math/maxBy.mjs';
+export { mean } from './math/mean.mjs';
+export { meanBy } from './math/meanBy.mjs';
+export { min } from './math/min.mjs';
+export { minBy } from './math/minBy.mjs';
+export { multiply } from './math/multiply.mjs';
+export { parseInt } from './math/parseInt.mjs';
+export { random } from './math/random.mjs';
+export { range } from './math/range.mjs';
+export { rangeRight } from './math/rangeRight.mjs';
+export { round } from './math/round.mjs';
+export { subtract } from './math/subtract.mjs';
+export { sum } from './math/sum.mjs';
+export { sumBy } from './math/sumBy.mjs';
+export { isEqual } from '../predicate/isEqual.mjs';
+export { identity } from './function/identity.mjs';
+export { noop } from './function/noop.mjs';
+export { assign } from './object/assign.mjs';
+export { assignIn, assignIn as extend } from './object/assignIn.mjs';
+export { assignInWith, assignInWith as extendWith } from './object/assignInWith.mjs';
+export { assignWith } from './object/assignWith.mjs';
+export { at } from './object/at.mjs';
+export { clone } from './object/clone.mjs';
+export { cloneDeep } from './object/cloneDeep.mjs';
+export { cloneDeepWith } from './object/cloneDeepWith.mjs';
+export { cloneWith } from './object/cloneWith.mjs';
+export { create } from './object/create.mjs';
+export { defaults } from './object/defaults.mjs';
+export { defaultsDeep } from './object/defaultsDeep.mjs';
+export { findKey } from './object/findKey.mjs';
+export { findLastKey } from './object/findLastKey.mjs';
+export { forIn } from './object/forIn.mjs';
+export { forInRight } from './object/forInRight.mjs';
+export { forOwn } from './object/forOwn.mjs';
+export { forOwnRight } from './object/forOwnRight.mjs';
+export { fromPairs } from './object/fromPairs.mjs';
+export { functions } from './object/functions.mjs';
+export { functionsIn } from './object/functionsIn.mjs';
+export { get } from './object/get.mjs';
+export { has } from './object/has.mjs';
+export { hasIn } from './object/hasIn.mjs';
+export { invert } from './object/invert.mjs';
+export { invertBy } from './object/invertBy.mjs';
+export { keys } from './object/keys.mjs';
+export { keysIn } from './object/keysIn.mjs';
+export { mapKeys } from './object/mapKeys.mjs';
+export { mapValues } from './object/mapValues.mjs';
+export { merge } from './object/merge.mjs';
+export { mergeWith } from './object/mergeWith.mjs';
+export { omit } from './object/omit.mjs';
+export { omitBy } from './object/omitBy.mjs';
+export { pick } from './object/pick.mjs';
+export { pickBy } from './object/pickBy.mjs';
+export { property } from './object/property.mjs';
+export { propertyOf } from './object/propertyOf.mjs';
+export { result } from './object/result.mjs';
+export { set } from './object/set.mjs';
+export { setWith } from './object/setWith.mjs';
+export { toDefaulted } from './object/toDefaulted.mjs';
+export { toPairs } from './object/toPairs.mjs';
+export { toPairsIn } from './object/toPairsIn.mjs';
+export { transform } from './object/transform.mjs';
+export { unset } from './object/unset.mjs';
+export { update } from './object/update.mjs';
+export { updateWith } from './object/updateWith.mjs';
+export { values } from './object/values.mjs';
+export { valuesIn } from './object/valuesIn.mjs';
+export { isFunction } from './predicate/isFunction.mjs';
+export { isLength } from './predicate/isLength.mjs';
+export { isMatchWith } from './predicate/isMatchWith.mjs';
+export { isNative } from './predicate/isNative.mjs';
+export { isNull } from './predicate/isNull.mjs';
+export { isUndefined } from './predicate/isUndefined.mjs';
+export { conforms } from './predicate/conforms.mjs';
+export { conformsTo } from './predicate/conformsTo.mjs';
+export { isArguments } from './predicate/isArguments.mjs';
+export { isArray } from './predicate/isArray.mjs';
+export { isArrayBuffer } from './predicate/isArrayBuffer.mjs';
+export { isArrayLike } from './predicate/isArrayLike.mjs';
+export { isArrayLikeObject } from './predicate/isArrayLikeObject.mjs';
+export { isBoolean } from './predicate/isBoolean.mjs';
+export { isBuffer } from './predicate/isBuffer.mjs';
+export { isDate } from './predicate/isDate.mjs';
+export { isElement } from './predicate/isElement.mjs';
+export { isEmpty } from './predicate/isEmpty.mjs';
+export { isEqualWith } from './predicate/isEqualWith.mjs';
+export { isError } from './predicate/isError.mjs';
+export { isFinite } from './predicate/isFinite.mjs';
+export { isInteger } from './predicate/isInteger.mjs';
+export { isMap } from './predicate/isMap.mjs';
+export { isMatch } from './predicate/isMatch.mjs';
+export { isNaN } from './predicate/isNaN.mjs';
+export { isNil } from './predicate/isNil.mjs';
+export { isNumber } from './predicate/isNumber.mjs';
+export { isObject } from './predicate/isObject.mjs';
+export { isObjectLike } from './predicate/isObjectLike.mjs';
+export { isPlainObject } from './predicate/isPlainObject.mjs';
+export { isRegExp } from './predicate/isRegExp.mjs';
+export { isSafeInteger } from './predicate/isSafeInteger.mjs';
+export { isSet } from './predicate/isSet.mjs';
+export { isString } from './predicate/isString.mjs';
+export { isSymbol } from './predicate/isSymbol.mjs';
+export { isTypedArray } from './predicate/isTypedArray.mjs';
+export { isWeakMap } from './predicate/isWeakMap.mjs';
+export { isWeakSet } from './predicate/isWeakSet.mjs';
+export { matches } from './predicate/matches.mjs';
+export { matchesProperty } from './predicate/matchesProperty.mjs';
+export { capitalize } from './string/capitalize.mjs';
+export { bindAll } from './util/bindAll.mjs';
+export { camelCase } from './string/camelCase.mjs';
+export { deburr } from './string/deburr.mjs';
+export { endsWith } from './string/endsWith.mjs';
+export { escape } from './string/escape.mjs';
+export { escapeRegExp } from './string/escapeRegExp.mjs';
+export { kebabCase } from './string/kebabCase.mjs';
+export { lowerCase } from './string/lowerCase.mjs';
+export { lowerFirst } from './string/lowerFirst.mjs';
+export { pad } from './string/pad.mjs';
+export { padEnd } from './string/padEnd.mjs';
+export { padStart } from './string/padStart.mjs';
+export { repeat } from './string/repeat.mjs';
+export { replace } from './string/replace.mjs';
+export { snakeCase } from './string/snakeCase.mjs';
+export { split } from './string/split.mjs';
+export { startCase } from './string/startCase.mjs';
+export { startsWith } from './string/startsWith.mjs';
+export { template, templateSettings } from './string/template.mjs';
+export { toLower } from './string/toLower.mjs';
+export { toUpper } from './string/toUpper.mjs';
+export { trim } from './string/trim.mjs';
+export { trimEnd } from './string/trimEnd.mjs';
+export { trimStart } from './string/trimStart.mjs';
+export { truncate } from './string/truncate.mjs';
+export { unescape } from './string/unescape.mjs';
+export { upperCase } from './string/upperCase.mjs';
+export { upperFirst } from './string/upperFirst.mjs';
+export { words } from './string/words.mjs';
+export { cond } from './util/cond.mjs';
+export { constant } from './util/constant.mjs';
+export { defaultTo } from './util/defaultTo.mjs';
+export { eq } from './util/eq.mjs';
+export { gt } from './util/gt.mjs';
+export { gte } from './util/gte.mjs';
+export { invoke } from './util/invoke.mjs';
+export { iteratee } from './util/iteratee.mjs';
+export { lt } from './util/lt.mjs';
+export { lte } from './util/lte.mjs';
+export { method } from './util/method.mjs';
+export { methodOf } from './util/methodOf.mjs';
+export { now } from './util/now.mjs';
+export { over } from './util/over.mjs';
+export { overEvery } from './util/overEvery.mjs';
+export { overSome } from './util/overSome.mjs';
+export { stubArray } from './util/stubArray.mjs';
+export { stubFalse } from './util/stubFalse.mjs';
+export { stubObject } from './util/stubObject.mjs';
+export { stubString } from './util/stubString.mjs';
+export { stubTrue } from './util/stubTrue.mjs';
+export { times } from './util/times.mjs';
+export { toArray } from './util/toArray.mjs';
+export { toFinite } from './util/toFinite.mjs';
+export { toInteger } from './util/toInteger.mjs';
+export { toLength } from './util/toLength.mjs';
+export { toNumber } from './util/toNumber.mjs';
+export { toPath } from './util/toPath.mjs';
+export { toPlainObject } from './util/toPlainObject.mjs';
+export { toSafeInteger } from './util/toSafeInteger.mjs';
+export { toString } from './util/toString.mjs';
+export { uniqueId } from './util/uniqueId.mjs';
Index: node_modules/es-toolkit/dist/compat/function/after.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/after.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/after.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * The opposite of `_.before`; this method creates a function that invokes
+ * `func` once it's called `n` or more times.
+ *
+ * @template TFunc - The type of the function to be invoked.
+ * @param {number} n - The number of calls before `func` is invoked.
+ * @param {TFunc} func - The function to restrict.
+ * @returns {TFunc} Returns the new restricted function.
+ * @throws {TypeError} - If `func` is not a function.
+ *
+ * @example
+ * const saves = ['profile', 'settings'];
+ * const done = after(saves.length, () => {
+ *   console.log('done saving!');
+ * });
+ *
+ * saves.forEach(type => {
+ *   asyncSave({ 'type': type, 'complete': done });
+ * });
+ * // => Logs 'done saving!' after the two async saves have completed.
+ */
+declare function after<TFunc extends (...args: any[]) => any>(n: number, func: TFunc): TFunc;
+
+export { after };
Index: node_modules/es-toolkit/dist/compat/function/after.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/after.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/after.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * The opposite of `_.before`; this method creates a function that invokes
+ * `func` once it's called `n` or more times.
+ *
+ * @template TFunc - The type of the function to be invoked.
+ * @param {number} n - The number of calls before `func` is invoked.
+ * @param {TFunc} func - The function to restrict.
+ * @returns {TFunc} Returns the new restricted function.
+ * @throws {TypeError} - If `func` is not a function.
+ *
+ * @example
+ * const saves = ['profile', 'settings'];
+ * const done = after(saves.length, () => {
+ *   console.log('done saving!');
+ * });
+ *
+ * saves.forEach(type => {
+ *   asyncSave({ 'type': type, 'complete': done });
+ * });
+ * // => Logs 'done saving!' after the two async saves have completed.
+ */
+declare function after<TFunc extends (...args: any[]) => any>(n: number, func: TFunc): TFunc;
+
+export { after };
Index: node_modules/es-toolkit/dist/compat/function/after.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/after.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/after.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toInteger = require('../util/toInteger.js');
+
+function after(n, func) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    n = toInteger.toInteger(n);
+    return function (...args) {
+        if (--n < 1) {
+            return func.apply(this, args);
+        }
+    };
+}
+
+exports.after = after;
Index: node_modules/es-toolkit/dist/compat/function/after.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/after.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/after.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { toInteger } from '../util/toInteger.mjs';
+
+function after(n, func) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    n = toInteger(n);
+    return function (...args) {
+        if (--n < 1) {
+            return func.apply(this, args);
+        }
+    };
+}
+
+export { after };
Index: node_modules/es-toolkit/dist/compat/function/ary.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/ary.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/ary.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * Creates a function that invokes func, with up to `n` arguments, ignoring any additional arguments.
+ * If `n` is not provided, it defaults to the function's length.
+ *
+ * @param {Function} func - The function to cap arguments for.
+ * @param {number} [n] - The arity cap. Defaults to func.length.
+ * @returns {Function} Returns the new capped function.
+ *
+ * @example
+ * function fn(a: number, b: number, c: number) {
+ *   return Array.from(arguments);
+ * }
+ *
+ * // Cap at 2 arguments
+ * const capped = ary(fn, 2);
+ * capped(1, 2, 3); // [1, 2]
+ *
+ * // Default to function length
+ * const defaultCap = ary(fn);
+ * defaultCap(1, 2, 3); // [1, 2, 3]
+ */
+declare function ary(func: (...args: any[]) => any, n?: number): (...args: any[]) => any;
+
+export { ary };
Index: node_modules/es-toolkit/dist/compat/function/ary.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/ary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/ary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * Creates a function that invokes func, with up to `n` arguments, ignoring any additional arguments.
+ * If `n` is not provided, it defaults to the function's length.
+ *
+ * @param {Function} func - The function to cap arguments for.
+ * @param {number} [n] - The arity cap. Defaults to func.length.
+ * @returns {Function} Returns the new capped function.
+ *
+ * @example
+ * function fn(a: number, b: number, c: number) {
+ *   return Array.from(arguments);
+ * }
+ *
+ * // Cap at 2 arguments
+ * const capped = ary(fn, 2);
+ * capped(1, 2, 3); // [1, 2]
+ *
+ * // Default to function length
+ * const defaultCap = ary(fn);
+ * defaultCap(1, 2, 3); // [1, 2, 3]
+ */
+declare function ary(func: (...args: any[]) => any, n?: number): (...args: any[]) => any;
+
+export { ary };
Index: node_modules/es-toolkit/dist/compat/function/ary.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/ary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/ary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const ary$1 = require('../../function/ary.js');
+
+function ary(func, n = func.length, guard) {
+    if (guard) {
+        n = func.length;
+    }
+    if (Number.isNaN(n) || n < 0) {
+        n = 0;
+    }
+    return ary$1.ary(func, n);
+}
+
+exports.ary = ary;
Index: node_modules/es-toolkit/dist/compat/function/ary.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/ary.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/ary.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { ary as ary$1 } from '../../function/ary.mjs';
+
+function ary(func, n = func.length, guard) {
+    if (guard) {
+        n = func.length;
+    }
+    if (Number.isNaN(n) || n < 0) {
+        n = 0;
+    }
+    return ary$1(func, n);
+}
+
+export { ary };
Index: node_modules/es-toolkit/dist/compat/function/attempt.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/attempt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/attempt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Attempts to execute a function with the provided arguments.
+ * If the function throws an error, it catches the error and returns it.
+ * If the caught error is not an instance of Error, it wraps it in a new Error.
+ *
+ * @param {F} func - The function to be executed.
+ * @param {...Parameters<F>} args - The arguments to pass to the function.
+ * @returns {ReturnType<F> | Error} The return value of the function if successful, or an Error if an exception is thrown.
+ *
+ * @template F - The type of the function being attempted.
+ *
+ * @example
+ * // Example 1: Successful execution
+ * const result = attempt((x, y) => x + y, 2, 3);
+ * console.log(result); // Output: 5
+ *
+ * @example
+ * // Example 2: Function throws an error
+ * const errorResult = attempt(() => {
+ *   throw new Error("Something went wrong");
+ * });
+ * console.log(errorResult); // Output: Error: Something went wrong
+ *
+ * @example
+ * // Example 3: Non-Error thrown
+ * const nonErrorResult = attempt(() => {
+ *   throw "This is a string error";
+ * });
+ * console.log(nonErrorResult); // Output: Error: This is a string error
+ */
+declare function attempt<R>(func: (...args: any[]) => R, ...args: any[]): R | Error;
+
+export { attempt };
Index: node_modules/es-toolkit/dist/compat/function/attempt.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/attempt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/attempt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Attempts to execute a function with the provided arguments.
+ * If the function throws an error, it catches the error and returns it.
+ * If the caught error is not an instance of Error, it wraps it in a new Error.
+ *
+ * @param {F} func - The function to be executed.
+ * @param {...Parameters<F>} args - The arguments to pass to the function.
+ * @returns {ReturnType<F> | Error} The return value of the function if successful, or an Error if an exception is thrown.
+ *
+ * @template F - The type of the function being attempted.
+ *
+ * @example
+ * // Example 1: Successful execution
+ * const result = attempt((x, y) => x + y, 2, 3);
+ * console.log(result); // Output: 5
+ *
+ * @example
+ * // Example 2: Function throws an error
+ * const errorResult = attempt(() => {
+ *   throw new Error("Something went wrong");
+ * });
+ * console.log(errorResult); // Output: Error: Something went wrong
+ *
+ * @example
+ * // Example 3: Non-Error thrown
+ * const nonErrorResult = attempt(() => {
+ *   throw "This is a string error";
+ * });
+ * console.log(nonErrorResult); // Output: Error: This is a string error
+ */
+declare function attempt<R>(func: (...args: any[]) => R, ...args: any[]): R | Error;
+
+export { attempt };
Index: node_modules/es-toolkit/dist/compat/function/attempt.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/attempt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/attempt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function attempt(func, ...args) {
+    try {
+        return func(...args);
+    }
+    catch (e) {
+        return e instanceof Error ? e : new Error(e);
+    }
+}
+
+exports.attempt = attempt;
Index: node_modules/es-toolkit/dist/compat/function/attempt.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/attempt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/attempt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+function attempt(func, ...args) {
+    try {
+        return func(...args);
+    }
+    catch (e) {
+        return e instanceof Error ? e : new Error(e);
+    }
+}
+
+export { attempt };
Index: node_modules/es-toolkit/dist/compat/function/before.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/before.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/before.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Creates a function that invokes `func`, with the `this` binding and arguments
+ * of the created function, while it's called less than `n` times. Subsequent
+ * calls to the created function return the result of the last `func` invocation.
+ *
+ * @template F - The type of the function to be invoked.
+ * @param {number} n - The number of times the returned function is allowed to call `func` before stopping.
+ * - If `n` is 0, `func` will never be called.
+ * - If `n` is a positive integer, `func` will be called up to `n-1` times.
+ * @param {F} func - The function to be called with the limit applied.
+ * @returns {(...args: Parameters<F>) => ReturnType<F> } - A new function that:
+ * - Tracks the number of calls.
+ * - Invokes `func` until the `n-1`-th call.
+ * - Returns last result of `func`, if `n` is reached.
+ * @throws {TypeError} - If `func` is not a function.
+ * @example
+ * let count = 0;
+ * const before3 = before(3, () => ++count);
+ *
+ * before3(); // => 1
+ * before3(); // => 2
+ * before3(); // => 2
+ */
+declare function before<F extends (...args: any[]) => any>(n: number, func: F): F;
+
+export { before };
Index: node_modules/es-toolkit/dist/compat/function/before.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/before.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/before.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Creates a function that invokes `func`, with the `this` binding and arguments
+ * of the created function, while it's called less than `n` times. Subsequent
+ * calls to the created function return the result of the last `func` invocation.
+ *
+ * @template F - The type of the function to be invoked.
+ * @param {number} n - The number of times the returned function is allowed to call `func` before stopping.
+ * - If `n` is 0, `func` will never be called.
+ * - If `n` is a positive integer, `func` will be called up to `n-1` times.
+ * @param {F} func - The function to be called with the limit applied.
+ * @returns {(...args: Parameters<F>) => ReturnType<F> } - A new function that:
+ * - Tracks the number of calls.
+ * - Invokes `func` until the `n-1`-th call.
+ * - Returns last result of `func`, if `n` is reached.
+ * @throws {TypeError} - If `func` is not a function.
+ * @example
+ * let count = 0;
+ * const before3 = before(3, () => ++count);
+ *
+ * before3(); // => 1
+ * before3(); // => 2
+ * before3(); // => 2
+ */
+declare function before<F extends (...args: any[]) => any>(n: number, func: F): F;
+
+export { before };
Index: node_modules/es-toolkit/dist/compat/function/before.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/before.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/before.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toInteger = require('../util/toInteger.js');
+
+function before(n, func) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    let result;
+    n = toInteger.toInteger(n);
+    return function (...args) {
+        if (--n > 0) {
+            result = func.apply(this, args);
+        }
+        if (n <= 1 && func) {
+            func = undefined;
+        }
+        return result;
+    };
+}
+
+exports.before = before;
Index: node_modules/es-toolkit/dist/compat/function/before.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/before.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/before.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { toInteger } from '../util/toInteger.mjs';
+
+function before(n, func) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    let result;
+    n = toInteger(n);
+    return function (...args) {
+        if (--n > 0) {
+            result = func.apply(this, args);
+        }
+        if (n <= 1 && func) {
+            func = undefined;
+        }
+        return result;
+    };
+}
+
+export { before };
Index: node_modules/es-toolkit/dist/compat/function/bind.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/bind.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/bind.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Creates a function that invokes `func` with the `this` binding of `thisArg` and `partials` prepended to the arguments it receives.
+ *
+ * The `bind.placeholder` value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: Unlike native `Function#bind`, this method doesn't set the `length` property of bound functions.
+ *
+ * @template F - The type of the function to bind.
+ * @param {F} func - The function to bind.
+ * @param {unknown} thisObj - The `this` binding of `func`.
+ * @param {...any} partialArgs - The arguments to be partially applied.
+ * @returns {F} - Returns the new bound function.
+ *
+ * @example
+ * function greet(greeting, punctuation) {
+ *   return greeting + ' ' + this.user + punctuation;
+ * }
+ * const object = { user: 'fred' };
+ * let bound = bind(greet, object, 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * bound = bind(greet, object, bind.placeholder, '!');
+ * bound('hi');
+ * // => 'hi fred!'
+ */
+declare function bind(func: (...args: any[]) => any, thisObj: any, ...partialArgs: any[]): (...args: any[]) => any;
+declare namespace bind {
+    var placeholder: typeof bindPlaceholder;
+}
+declare const bindPlaceholder: unique symbol;
+
+export { bind };
Index: node_modules/es-toolkit/dist/compat/function/bind.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/bind.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/bind.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Creates a function that invokes `func` with the `this` binding of `thisArg` and `partials` prepended to the arguments it receives.
+ *
+ * The `bind.placeholder` value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: Unlike native `Function#bind`, this method doesn't set the `length` property of bound functions.
+ *
+ * @template F - The type of the function to bind.
+ * @param {F} func - The function to bind.
+ * @param {unknown} thisObj - The `this` binding of `func`.
+ * @param {...any} partialArgs - The arguments to be partially applied.
+ * @returns {F} - Returns the new bound function.
+ *
+ * @example
+ * function greet(greeting, punctuation) {
+ *   return greeting + ' ' + this.user + punctuation;
+ * }
+ * const object = { user: 'fred' };
+ * let bound = bind(greet, object, 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * bound = bind(greet, object, bind.placeholder, '!');
+ * bound('hi');
+ * // => 'hi fred!'
+ */
+declare function bind(func: (...args: any[]) => any, thisObj: any, ...partialArgs: any[]): (...args: any[]) => any;
+declare namespace bind {
+    var placeholder: typeof bindPlaceholder;
+}
+declare const bindPlaceholder: unique symbol;
+
+export { bind };
Index: node_modules/es-toolkit/dist/compat/function/bind.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/bind.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/bind.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function bind(func, thisObj, ...partialArgs) {
+    const bound = function (...providedArgs) {
+        const args = [];
+        let startIndex = 0;
+        for (let i = 0; i < partialArgs.length; i++) {
+            const arg = partialArgs[i];
+            if (arg === bind.placeholder) {
+                args.push(providedArgs[startIndex++]);
+            }
+            else {
+                args.push(arg);
+            }
+        }
+        for (let i = startIndex; i < providedArgs.length; i++) {
+            args.push(providedArgs[i]);
+        }
+        if (this instanceof bound) {
+            return new func(...args);
+        }
+        return func.apply(thisObj, args);
+    };
+    return bound;
+}
+const bindPlaceholder = Symbol('bind.placeholder');
+bind.placeholder = bindPlaceholder;
+
+exports.bind = bind;
Index: node_modules/es-toolkit/dist/compat/function/bind.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/bind.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/bind.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+function bind(func, thisObj, ...partialArgs) {
+    const bound = function (...providedArgs) {
+        const args = [];
+        let startIndex = 0;
+        for (let i = 0; i < partialArgs.length; i++) {
+            const arg = partialArgs[i];
+            if (arg === bind.placeholder) {
+                args.push(providedArgs[startIndex++]);
+            }
+            else {
+                args.push(arg);
+            }
+        }
+        for (let i = startIndex; i < providedArgs.length; i++) {
+            args.push(providedArgs[i]);
+        }
+        if (this instanceof bound) {
+            return new func(...args);
+        }
+        return func.apply(thisObj, args);
+    };
+    return bound;
+}
+const bindPlaceholder = Symbol('bind.placeholder');
+bind.placeholder = bindPlaceholder;
+
+export { bind };
Index: node_modules/es-toolkit/dist/compat/function/bindKey.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/bindKey.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/bindKey.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Creates a function that invokes the method at `object[key]` with `partialArgs` prepended to the arguments it receives.
+ *
+ * This method differs from `bind` by allowing bound functions to reference methods that may be redefined or don't yet exist.
+ *
+ * The `bindKey.placeholder` value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * @template T - The type of the object to bind.
+ * @template K - The type of the key to bind.
+ * @param {T} object - The object to invoke the method on.
+ * @param {K} key - The key of the method.
+ * @param {...any} partialArgs - The arguments to be partially applied.
+ * @returns {T[K] extends (...args: any[]) => any ? (...args: any[]) => ReturnType<T[K]> : never} - Returns the new bound function.
+ *
+ * @example
+ * const object = {
+ *   user: 'fred',
+ *   greet: function (greeting, punctuation) {
+ *     return greeting + ' ' + this.user + punctuation;
+ *   },
+ * };
+ *
+ * let bound = bindKey(object, 'greet', 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * object.greet = function (greeting, punctuation) {
+ *   return greeting + 'ya ' + this.user + punctuation;
+ * };
+ *
+ * bound('!');
+ * // => 'hiya fred!'
+ *
+ * // Bound with placeholders.
+ * bound = bindKey(object, 'greet', bindKey.placeholder, '!');
+ * bound('hi');
+ * // => 'hiya fred!'
+ */
+declare function bindKey(object: object, key: string, ...partialArgs: any[]): (...args: any[]) => any;
+declare namespace bindKey {
+    var placeholder: typeof bindKeyPlaceholder;
+}
+declare const bindKeyPlaceholder: unique symbol;
+
+export { bindKey };
Index: node_modules/es-toolkit/dist/compat/function/bindKey.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/bindKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/bindKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Creates a function that invokes the method at `object[key]` with `partialArgs` prepended to the arguments it receives.
+ *
+ * This method differs from `bind` by allowing bound functions to reference methods that may be redefined or don't yet exist.
+ *
+ * The `bindKey.placeholder` value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * @template T - The type of the object to bind.
+ * @template K - The type of the key to bind.
+ * @param {T} object - The object to invoke the method on.
+ * @param {K} key - The key of the method.
+ * @param {...any} partialArgs - The arguments to be partially applied.
+ * @returns {T[K] extends (...args: any[]) => any ? (...args: any[]) => ReturnType<T[K]> : never} - Returns the new bound function.
+ *
+ * @example
+ * const object = {
+ *   user: 'fred',
+ *   greet: function (greeting, punctuation) {
+ *     return greeting + ' ' + this.user + punctuation;
+ *   },
+ * };
+ *
+ * let bound = bindKey(object, 'greet', 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * object.greet = function (greeting, punctuation) {
+ *   return greeting + 'ya ' + this.user + punctuation;
+ * };
+ *
+ * bound('!');
+ * // => 'hiya fred!'
+ *
+ * // Bound with placeholders.
+ * bound = bindKey(object, 'greet', bindKey.placeholder, '!');
+ * bound('hi');
+ * // => 'hiya fred!'
+ */
+declare function bindKey(object: object, key: string, ...partialArgs: any[]): (...args: any[]) => any;
+declare namespace bindKey {
+    var placeholder: typeof bindKeyPlaceholder;
+}
+declare const bindKeyPlaceholder: unique symbol;
+
+export { bindKey };
Index: node_modules/es-toolkit/dist/compat/function/bindKey.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/bindKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/bindKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function bindKey(object, key, ...partialArgs) {
+    const bound = function (...providedArgs) {
+        const args = [];
+        let startIndex = 0;
+        for (let i = 0; i < partialArgs.length; i++) {
+            const arg = partialArgs[i];
+            if (arg === bindKey.placeholder) {
+                args.push(providedArgs[startIndex++]);
+            }
+            else {
+                args.push(arg);
+            }
+        }
+        for (let i = startIndex; i < providedArgs.length; i++) {
+            args.push(providedArgs[i]);
+        }
+        if (this instanceof bound) {
+            return new object[key](...args);
+        }
+        return object[key].apply(object, args);
+    };
+    return bound;
+}
+const bindKeyPlaceholder = Symbol('bindKey.placeholder');
+bindKey.placeholder = bindKeyPlaceholder;
+
+exports.bindKey = bindKey;
Index: node_modules/es-toolkit/dist/compat/function/bindKey.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/bindKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/bindKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+function bindKey(object, key, ...partialArgs) {
+    const bound = function (...providedArgs) {
+        const args = [];
+        let startIndex = 0;
+        for (let i = 0; i < partialArgs.length; i++) {
+            const arg = partialArgs[i];
+            if (arg === bindKey.placeholder) {
+                args.push(providedArgs[startIndex++]);
+            }
+            else {
+                args.push(arg);
+            }
+        }
+        for (let i = startIndex; i < providedArgs.length; i++) {
+            args.push(providedArgs[i]);
+        }
+        if (this instanceof bound) {
+            return new object[key](...args);
+        }
+        return object[key].apply(object, args);
+    };
+    return bound;
+}
+const bindKeyPlaceholder = Symbol('bindKey.placeholder');
+bindKey.placeholder = bindKeyPlaceholder;
+
+export { bindKey };
Index: node_modules/es-toolkit/dist/compat/function/curry.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/curry.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/curry.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,154 @@
+type __ = typeof curryPlaceholder;
+interface CurriedFunction1<T1, R> {
+    (): CurriedFunction1<T1, R>;
+    (t1: T1): R;
+}
+interface CurriedFunction2<T1, T2, R> {
+    (): CurriedFunction2<T1, T2, R>;
+    (t1: T1): CurriedFunction1<T2, R>;
+    (t1: __, t2: T2): CurriedFunction1<T1, R>;
+    (t1: T1, t2: T2): R;
+}
+interface CurriedFunction3<T1, T2, T3, R> {
+    (): CurriedFunction3<T1, T2, T3, R>;
+    (t1: T1): CurriedFunction2<T2, T3, R>;
+    (t1: __, t2: T2): CurriedFunction2<T1, T3, R>;
+    (t1: T1, t2: T2): CurriedFunction1<T3, R>;
+    (t1: __, t2: __, t3: T3): CurriedFunction2<T1, T2, R>;
+    (t1: T1, t2: __, t3: T3): CurriedFunction1<T2, R>;
+    (t1: __, t2: T2, t3: T3): CurriedFunction1<T1, R>;
+    (t1: T1, t2: T2, t3: T3): R;
+}
+interface CurriedFunction4<T1, T2, T3, T4, R> {
+    (): CurriedFunction4<T1, T2, T3, T4, R>;
+    (t1: T1): CurriedFunction3<T2, T3, T4, R>;
+    (t1: __, t2: T2): CurriedFunction3<T1, T3, T4, R>;
+    (t1: T1, t2: T2): CurriedFunction2<T3, T4, R>;
+    (t1: __, t2: __, t3: T3): CurriedFunction3<T1, T2, T4, R>;
+    (t1: __, t2: __, t3: T3): CurriedFunction2<T2, T4, R>;
+    (t1: __, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>;
+    (t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>;
+    (t1: __, t2: __, t3: __, t4: T4): CurriedFunction3<T1, T2, T3, R>;
+    (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction2<T2, T3, R>;
+    (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction2<T1, T3, R>;
+    (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction1<T2, R>;
+    (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4): R;
+}
+interface CurriedFunction5<T1, T2, T3, T4, T5, R> {
+    (): CurriedFunction5<T1, T2, T3, T4, T5, R>;
+    (t1: T1): CurriedFunction4<T2, T3, T4, T5, R>;
+    (t1: __, t2: T2): CurriedFunction4<T1, T3, T4, T5, R>;
+    (t1: T1, t2: T2): CurriedFunction3<T3, T4, T5, R>;
+    (t1: __, t2: __, t3: T3): CurriedFunction4<T1, T2, T4, T5, R>;
+    (t1: T1, t2: __, t3: T3): CurriedFunction3<T2, T4, T5, R>;
+    (t1: __, t2: T2, t3: T3): CurriedFunction3<T1, T4, T5, R>;
+    (t1: T1, t2: T2, t3: T3): CurriedFunction2<T4, T5, R>;
+    (t1: __, t2: __, t3: __, t4: T4): CurriedFunction4<T1, T2, T3, T5, R>;
+    (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction3<T2, T3, T5, R>;
+    (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction3<T1, T3, T5, R>;
+    (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction3<T1, T2, T5, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction2<T3, T5, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction2<T2, T5, R>;
+    (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction2<T1, T5, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1<T5, R>;
+    (t1: __, t2: __, t3: __, t4: __, t5: T5): CurriedFunction4<T1, T2, T3, T4, R>;
+    (t1: T1, t2: __, t3: __, t4: __, t5: T5): CurriedFunction3<T2, T3, T4, R>;
+    (t1: __, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction3<T1, T3, T4, R>;
+    (t1: __, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction3<T1, T2, T4, R>;
+    (t1: __, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction3<T1, T2, T3, R>;
+    (t1: T1, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction2<T3, T4, R>;
+    (t1: T1, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction2<T2, T4, R>;
+    (t1: T1, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction2<T2, T3, R>;
+    (t1: __, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction2<T1, T4, R>;
+    (t1: __, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction2<T1, T3, R>;
+    (t1: __, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction2<T1, T2, R>;
+    (t1: T1, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction1<T4, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction1<T2, R>;
+    (t1: __, t2: T2, t3: T3, t4: T4, t5: T5): CurriedFunction1<T1, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
+}
+/**
+ * Creates a curried function that accepts a single argument.
+ * @param {(t1: T1) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction1<T1, R>} - Returns the new curried function.
+ * @example
+ * const greet = (name: string) => `Hello ${name}`;
+ * const curriedGreet = curry(greet);
+ * curriedGreet('John'); // => 'Hello John'
+ */
+declare function curry<T1, R>(func: (t1: T1) => R, arity?: number): CurriedFunction1<T1, R>;
+/**
+ * Creates a curried function that accepts two arguments.
+ * @param {(t1: T1, t2: T2) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction2<T1, T2, R>} - Returns the new curried function.
+ * @example
+ * const add = (a: number, b: number) => a + b;
+ * const curriedAdd = curry(add);
+ * curriedAdd(1)(2); // => 3
+ * curriedAdd(1, 2); // => 3
+ */
+declare function curry<T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): CurriedFunction2<T1, T2, R>;
+/**
+ * Creates a curried function that accepts three arguments.
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction3<T1, T2, T3, R>} - Returns the new curried function.
+ * @example
+ * const volume = (l: number, w: number, h: number) => l * w * h;
+ * const curriedVolume = curry(volume);
+ * curriedVolume(2)(3)(4); // => 24
+ * curriedVolume(2, 3)(4); // => 24
+ * curriedVolume(2, 3, 4); // => 24
+ */
+declare function curry<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): CurriedFunction3<T1, T2, T3, R>;
+/**
+ * Creates a curried function that accepts four arguments.
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction4<T1, T2, T3, T4, R>} - Returns the new curried function.
+ * @example
+ * const fn = (a: number, b: number, c: number, d: number) => a + b + c + d;
+ * const curriedFn = curry(fn);
+ * curriedFn(1)(2)(3)(4); // => 10
+ * curriedFn(1, 2)(3, 4); // => 10
+ * curriedFn(1, 2, 3, 4); // => 10
+ */
+declare function curry<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): CurriedFunction4<T1, T2, T3, T4, R>;
+/**
+ * Creates a curried function that accepts five arguments.
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction5<T1, T2, T3, T4, T5, R>} - Returns the new curried function.
+ * @example
+ * const fn = (a: number, b: number, c: number, d: number, e: number) => a + b + c + d + e;
+ * const curriedFn = curry(fn);
+ * curriedFn(1)(2)(3)(4)(5); // => 15
+ * curriedFn(1, 2)(3, 4)(5); // => 15
+ * curriedFn(1, 2, 3, 4, 5); // => 15
+ */
+declare function curry<T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number): CurriedFunction5<T1, T2, T3, T4, T5, R>;
+/**
+ * Creates a curried function that accepts any number of arguments.
+ * @param {(...args: any[]) => any} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {(...args: any[]) => any} - Returns the new curried function.
+ * @example
+ * const sum = (...args: number[]) => args.reduce((a, b) => a + b, 0);
+ * const curriedSum = curry(sum);
+ * curriedSum(1, 2, 3); // => 6
+ * curriedSum(1)(2, 3); // => 6
+ * curriedSum(1)(2)(3); // => 6
+ */
+declare function curry(func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
+declare namespace curry {
+    var placeholder: typeof curryPlaceholder;
+}
+declare const curryPlaceholder: unique symbol;
+
+export { curry };
Index: node_modules/es-toolkit/dist/compat/function/curry.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/curry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/curry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,154 @@
+type __ = typeof curryPlaceholder;
+interface CurriedFunction1<T1, R> {
+    (): CurriedFunction1<T1, R>;
+    (t1: T1): R;
+}
+interface CurriedFunction2<T1, T2, R> {
+    (): CurriedFunction2<T1, T2, R>;
+    (t1: T1): CurriedFunction1<T2, R>;
+    (t1: __, t2: T2): CurriedFunction1<T1, R>;
+    (t1: T1, t2: T2): R;
+}
+interface CurriedFunction3<T1, T2, T3, R> {
+    (): CurriedFunction3<T1, T2, T3, R>;
+    (t1: T1): CurriedFunction2<T2, T3, R>;
+    (t1: __, t2: T2): CurriedFunction2<T1, T3, R>;
+    (t1: T1, t2: T2): CurriedFunction1<T3, R>;
+    (t1: __, t2: __, t3: T3): CurriedFunction2<T1, T2, R>;
+    (t1: T1, t2: __, t3: T3): CurriedFunction1<T2, R>;
+    (t1: __, t2: T2, t3: T3): CurriedFunction1<T1, R>;
+    (t1: T1, t2: T2, t3: T3): R;
+}
+interface CurriedFunction4<T1, T2, T3, T4, R> {
+    (): CurriedFunction4<T1, T2, T3, T4, R>;
+    (t1: T1): CurriedFunction3<T2, T3, T4, R>;
+    (t1: __, t2: T2): CurriedFunction3<T1, T3, T4, R>;
+    (t1: T1, t2: T2): CurriedFunction2<T3, T4, R>;
+    (t1: __, t2: __, t3: T3): CurriedFunction3<T1, T2, T4, R>;
+    (t1: __, t2: __, t3: T3): CurriedFunction2<T2, T4, R>;
+    (t1: __, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>;
+    (t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>;
+    (t1: __, t2: __, t3: __, t4: T4): CurriedFunction3<T1, T2, T3, R>;
+    (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction2<T2, T3, R>;
+    (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction2<T1, T3, R>;
+    (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction1<T2, R>;
+    (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4): R;
+}
+interface CurriedFunction5<T1, T2, T3, T4, T5, R> {
+    (): CurriedFunction5<T1, T2, T3, T4, T5, R>;
+    (t1: T1): CurriedFunction4<T2, T3, T4, T5, R>;
+    (t1: __, t2: T2): CurriedFunction4<T1, T3, T4, T5, R>;
+    (t1: T1, t2: T2): CurriedFunction3<T3, T4, T5, R>;
+    (t1: __, t2: __, t3: T3): CurriedFunction4<T1, T2, T4, T5, R>;
+    (t1: T1, t2: __, t3: T3): CurriedFunction3<T2, T4, T5, R>;
+    (t1: __, t2: T2, t3: T3): CurriedFunction3<T1, T4, T5, R>;
+    (t1: T1, t2: T2, t3: T3): CurriedFunction2<T4, T5, R>;
+    (t1: __, t2: __, t3: __, t4: T4): CurriedFunction4<T1, T2, T3, T5, R>;
+    (t1: T1, t2: __, t3: __, t4: T4): CurriedFunction3<T2, T3, T5, R>;
+    (t1: __, t2: T2, t3: __, t4: T4): CurriedFunction3<T1, T3, T5, R>;
+    (t1: __, t2: __, t3: T3, t4: T4): CurriedFunction3<T1, T2, T5, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction2<T3, T5, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction2<T2, T5, R>;
+    (t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction2<T1, T5, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4): CurriedFunction1<T5, R>;
+    (t1: __, t2: __, t3: __, t4: __, t5: T5): CurriedFunction4<T1, T2, T3, T4, R>;
+    (t1: T1, t2: __, t3: __, t4: __, t5: T5): CurriedFunction3<T2, T3, T4, R>;
+    (t1: __, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction3<T1, T3, T4, R>;
+    (t1: __, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction3<T1, T2, T4, R>;
+    (t1: __, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction3<T1, T2, T3, R>;
+    (t1: T1, t2: T2, t3: __, t4: __, t5: T5): CurriedFunction2<T3, T4, R>;
+    (t1: T1, t2: __, t3: T3, t4: __, t5: T5): CurriedFunction2<T2, T4, R>;
+    (t1: T1, t2: __, t3: __, t4: T4, t5: T5): CurriedFunction2<T2, T3, R>;
+    (t1: __, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction2<T1, T4, R>;
+    (t1: __, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction2<T1, T3, R>;
+    (t1: __, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction2<T1, T2, R>;
+    (t1: T1, t2: T2, t3: T3, t4: __, t5: T5): CurriedFunction1<T4, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4, t5: T5): CurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4, t5: T5): CurriedFunction1<T2, R>;
+    (t1: __, t2: T2, t3: T3, t4: T4, t5: T5): CurriedFunction1<T1, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
+}
+/**
+ * Creates a curried function that accepts a single argument.
+ * @param {(t1: T1) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction1<T1, R>} - Returns the new curried function.
+ * @example
+ * const greet = (name: string) => `Hello ${name}`;
+ * const curriedGreet = curry(greet);
+ * curriedGreet('John'); // => 'Hello John'
+ */
+declare function curry<T1, R>(func: (t1: T1) => R, arity?: number): CurriedFunction1<T1, R>;
+/**
+ * Creates a curried function that accepts two arguments.
+ * @param {(t1: T1, t2: T2) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction2<T1, T2, R>} - Returns the new curried function.
+ * @example
+ * const add = (a: number, b: number) => a + b;
+ * const curriedAdd = curry(add);
+ * curriedAdd(1)(2); // => 3
+ * curriedAdd(1, 2); // => 3
+ */
+declare function curry<T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): CurriedFunction2<T1, T2, R>;
+/**
+ * Creates a curried function that accepts three arguments.
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction3<T1, T2, T3, R>} - Returns the new curried function.
+ * @example
+ * const volume = (l: number, w: number, h: number) => l * w * h;
+ * const curriedVolume = curry(volume);
+ * curriedVolume(2)(3)(4); // => 24
+ * curriedVolume(2, 3)(4); // => 24
+ * curriedVolume(2, 3, 4); // => 24
+ */
+declare function curry<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): CurriedFunction3<T1, T2, T3, R>;
+/**
+ * Creates a curried function that accepts four arguments.
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction4<T1, T2, T3, T4, R>} - Returns the new curried function.
+ * @example
+ * const fn = (a: number, b: number, c: number, d: number) => a + b + c + d;
+ * const curriedFn = curry(fn);
+ * curriedFn(1)(2)(3)(4); // => 10
+ * curriedFn(1, 2)(3, 4); // => 10
+ * curriedFn(1, 2, 3, 4); // => 10
+ */
+declare function curry<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): CurriedFunction4<T1, T2, T3, T4, R>;
+/**
+ * Creates a curried function that accepts five arguments.
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {CurriedFunction5<T1, T2, T3, T4, T5, R>} - Returns the new curried function.
+ * @example
+ * const fn = (a: number, b: number, c: number, d: number, e: number) => a + b + c + d + e;
+ * const curriedFn = curry(fn);
+ * curriedFn(1)(2)(3)(4)(5); // => 15
+ * curriedFn(1, 2)(3, 4)(5); // => 15
+ * curriedFn(1, 2, 3, 4, 5); // => 15
+ */
+declare function curry<T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number): CurriedFunction5<T1, T2, T3, T4, T5, R>;
+/**
+ * Creates a curried function that accepts any number of arguments.
+ * @param {(...args: any[]) => any} func - The function to curry.
+ * @param {number=func.length} arity - The arity of func.
+ * @returns {(...args: any[]) => any} - Returns the new curried function.
+ * @example
+ * const sum = (...args: number[]) => args.reduce((a, b) => a + b, 0);
+ * const curriedSum = curry(sum);
+ * curriedSum(1, 2, 3); // => 6
+ * curriedSum(1)(2, 3); // => 6
+ * curriedSum(1)(2)(3); // => 6
+ */
+declare function curry(func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
+declare namespace curry {
+    var placeholder: typeof curryPlaceholder;
+}
+declare const curryPlaceholder: unique symbol;
+
+export { curry };
Index: node_modules/es-toolkit/dist/compat/function/curry.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/curry.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/curry.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function curry(func, arity = func.length, guard) {
+    arity = guard ? func.length : arity;
+    arity = Number.parseInt(arity, 10);
+    if (Number.isNaN(arity) || arity < 1) {
+        arity = 0;
+    }
+    const wrapper = function (...partialArgs) {
+        const holders = partialArgs.filter(item => item === curry.placeholder);
+        const length = partialArgs.length - holders.length;
+        if (length < arity) {
+            return makeCurry(func, arity - length, partialArgs);
+        }
+        if (this instanceof wrapper) {
+            return new func(...partialArgs);
+        }
+        return func.apply(this, partialArgs);
+    };
+    wrapper.placeholder = curryPlaceholder;
+    return wrapper;
+}
+function makeCurry(func, arity, partialArgs) {
+    function wrapper(...providedArgs) {
+        const holders = providedArgs.filter(item => item === curry.placeholder);
+        const length = providedArgs.length - holders.length;
+        providedArgs = composeArgs(providedArgs, partialArgs);
+        if (length < arity) {
+            return makeCurry(func, arity - length, providedArgs);
+        }
+        if (this instanceof wrapper) {
+            return new func(...providedArgs);
+        }
+        return func.apply(this, providedArgs);
+    }
+    wrapper.placeholder = curryPlaceholder;
+    return wrapper;
+}
+function composeArgs(providedArgs, partialArgs) {
+    const args = [];
+    let startIndex = 0;
+    for (let i = 0; i < partialArgs.length; i++) {
+        const arg = partialArgs[i];
+        if (arg === curry.placeholder && startIndex < providedArgs.length) {
+            args.push(providedArgs[startIndex++]);
+        }
+        else {
+            args.push(arg);
+        }
+    }
+    for (let i = startIndex; i < providedArgs.length; i++) {
+        args.push(providedArgs[i]);
+    }
+    return args;
+}
+const curryPlaceholder = Symbol('curry.placeholder');
+curry.placeholder = curryPlaceholder;
+
+exports.curry = curry;
Index: node_modules/es-toolkit/dist/compat/function/curry.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/curry.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/curry.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+function curry(func, arity = func.length, guard) {
+    arity = guard ? func.length : arity;
+    arity = Number.parseInt(arity, 10);
+    if (Number.isNaN(arity) || arity < 1) {
+        arity = 0;
+    }
+    const wrapper = function (...partialArgs) {
+        const holders = partialArgs.filter(item => item === curry.placeholder);
+        const length = partialArgs.length - holders.length;
+        if (length < arity) {
+            return makeCurry(func, arity - length, partialArgs);
+        }
+        if (this instanceof wrapper) {
+            return new func(...partialArgs);
+        }
+        return func.apply(this, partialArgs);
+    };
+    wrapper.placeholder = curryPlaceholder;
+    return wrapper;
+}
+function makeCurry(func, arity, partialArgs) {
+    function wrapper(...providedArgs) {
+        const holders = providedArgs.filter(item => item === curry.placeholder);
+        const length = providedArgs.length - holders.length;
+        providedArgs = composeArgs(providedArgs, partialArgs);
+        if (length < arity) {
+            return makeCurry(func, arity - length, providedArgs);
+        }
+        if (this instanceof wrapper) {
+            return new func(...providedArgs);
+        }
+        return func.apply(this, providedArgs);
+    }
+    wrapper.placeholder = curryPlaceholder;
+    return wrapper;
+}
+function composeArgs(providedArgs, partialArgs) {
+    const args = [];
+    let startIndex = 0;
+    for (let i = 0; i < partialArgs.length; i++) {
+        const arg = partialArgs[i];
+        if (arg === curry.placeholder && startIndex < providedArgs.length) {
+            args.push(providedArgs[startIndex++]);
+        }
+        else {
+            args.push(arg);
+        }
+    }
+    for (let i = startIndex; i < providedArgs.length; i++) {
+        args.push(providedArgs[i]);
+    }
+    return args;
+}
+const curryPlaceholder = Symbol('curry.placeholder');
+curry.placeholder = curryPlaceholder;
+
+export { curry };
Index: node_modules/es-toolkit/dist/compat/function/curryRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/curryRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/curryRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,85 @@
+type __ = typeof curryRightPlaceholder;
+interface RightCurriedFunction1<T1, R> {
+    (): RightCurriedFunction1<T1, R>;
+    (t1: T1): R;
+}
+interface RightCurriedFunction2<T1, T2, R> {
+    (): RightCurriedFunction2<T1, T2, R>;
+    (t2: T2): RightCurriedFunction1<T1, R>;
+    (t1: T1, t2: __): RightCurriedFunction1<T2, R>;
+    (t1: T1, t2: T2): R;
+}
+interface RightCurriedFunction3<T1, T2, T3, R> {
+    (): RightCurriedFunction3<T1, T2, T3, R>;
+    (t3: T3): RightCurriedFunction2<T1, T2, R>;
+    (t2: T2, t3: __): RightCurriedFunction2<T1, T3, R>;
+    (t2: T2, t3: T3): RightCurriedFunction1<T1, R>;
+    (t1: T1, t2: __, t3: __): RightCurriedFunction2<T2, T3, R>;
+    (t1: T1, t2: T2, t3: __): RightCurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3): RightCurriedFunction1<T2, R>;
+    (t1: T1, t2: T2, t3: T3): R;
+}
+interface RightCurriedFunction4<T1, T2, T3, T4, R> {
+    (): RightCurriedFunction4<T1, T2, T3, T4, R>;
+    (t4: T4): RightCurriedFunction3<T1, T2, T3, R>;
+    (t3: T3, t4: __): RightCurriedFunction3<T1, T2, T4, R>;
+    (t3: T3, t4: T4): RightCurriedFunction2<T1, T2, R>;
+    (t2: T2, t3: __, t4: __): RightCurriedFunction3<T1, T3, T4, R>;
+    (t2: T2, t3: T3, t4: __): RightCurriedFunction2<T1, T4, R>;
+    (t2: T2, t3: __, t4: T4): RightCurriedFunction2<T1, T3, R>;
+    (t2: T2, t3: T3, t4: T4): RightCurriedFunction1<T1, R>;
+    (t1: T1, t2: __, t3: __, t4: __): RightCurriedFunction3<T2, T3, T4, R>;
+    (t1: T1, t2: T2, t3: __, t4: __): RightCurriedFunction2<T3, T4, R>;
+    (t1: T1, t2: __, t3: T3, t4: __): RightCurriedFunction2<T2, T4, R>;
+    (t1: T1, t2: __, t3: __, t4: T4): RightCurriedFunction2<T2, T3, R>;
+    (t1: T1, t2: T2, t3: T3, t4: __): RightCurriedFunction1<T4, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4): RightCurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4): RightCurriedFunction1<T2, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4): R;
+}
+interface RightCurriedFunction5<T1, T2, T3, T4, T5, R> {
+    (): RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
+    (t5: T5): RightCurriedFunction4<T1, T2, T3, T4, R>;
+    (t4: T4, t5: __): RightCurriedFunction4<T1, T2, T3, T5, R>;
+    (t4: T4, t5: T5): RightCurriedFunction3<T1, T2, T3, R>;
+    (t3: T3, t4: __, t5: __): RightCurriedFunction4<T1, T2, T4, T5, R>;
+    (t3: T3, t4: T4, t5: __): RightCurriedFunction3<T1, T2, T5, R>;
+    (t3: T3, t4: __, t5: T5): RightCurriedFunction3<T1, T2, T4, R>;
+    (t3: T3, t4: T4, t5: T5): RightCurriedFunction2<T1, T2, R>;
+    (t2: T2, t3: __, t4: __, t5: __): RightCurriedFunction4<T1, T3, T4, T5, R>;
+    (t2: T2, t3: T3, t4: __, t5: __): RightCurriedFunction3<T1, T4, T5, R>;
+    (t2: T2, t3: __, t4: T4, t5: __): RightCurriedFunction3<T1, T3, T5, R>;
+    (t2: T2, t3: __, t4: __, t5: T5): RightCurriedFunction3<T1, T3, T4, R>;
+    (t2: T2, t3: T3, t4: T4, t5: __): RightCurriedFunction2<T1, T5, R>;
+    (t2: T2, t3: T3, t4: __, t5: T5): RightCurriedFunction2<T1, T4, R>;
+    (t2: T2, t3: __, t4: T4, t5: T5): RightCurriedFunction2<T1, T3, R>;
+    (t2: T2, t3: T3, t4: T4, t5: T5): RightCurriedFunction1<T1, R>;
+    (t1: T1, t2: __, t3: __, t4: __, t5: __): RightCurriedFunction4<T2, T3, T4, T5, R>;
+    (t1: T1, t2: T2, t3: __, t4: __, t5: __): RightCurriedFunction3<T3, T4, T5, R>;
+    (t1: T1, t2: __, t3: T3, t4: __, t5: __): RightCurriedFunction3<T2, T4, T5, R>;
+    (t1: T1, t2: __, t3: __, t4: T4, t5: __): RightCurriedFunction3<T2, T3, T5, R>;
+    (t1: T1, t2: __, t3: __, t4: __, t5: T5): RightCurriedFunction3<T2, T3, T4, R>;
+    (t1: T1, t2: T2, t3: T3, t4: __, t5: __): RightCurriedFunction2<T4, T5, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4, t5: __): RightCurriedFunction2<T3, T5, R>;
+    (t1: T1, t2: T2, t3: __, t4: __, t5: T5): RightCurriedFunction2<T3, T4, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4, t5: __): RightCurriedFunction2<T2, T5, R>;
+    (t1: T1, t2: __, t3: T3, t4: __, t5: T5): RightCurriedFunction2<T2, T4, R>;
+    (t1: T1, t2: __, t3: __, t4: T4, t5: T5): RightCurriedFunction2<T2, T3, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4, t5: __): RightCurriedFunction1<T5, R>;
+    (t1: T1, t2: T2, t3: T3, t4: __, t5: T5): RightCurriedFunction1<T4, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4, t5: T5): RightCurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4, t5: T5): RightCurriedFunction1<T2, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
+}
+declare function curryRight<T1, R>(func: (t1: T1) => R, arity?: number): RightCurriedFunction1<T1, R>;
+declare function curryRight<T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): RightCurriedFunction2<T1, T2, R>;
+declare function curryRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): RightCurriedFunction3<T1, T2, T3, R>;
+declare function curryRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): RightCurriedFunction4<T1, T2, T3, T4, R>;
+declare function curryRight<T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number): RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
+declare function curryRight(func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
+declare namespace curryRight {
+    var placeholder: typeof curryRightPlaceholder;
+}
+declare const curryRightPlaceholder: unique symbol;
+
+export { curryRight };
Index: node_modules/es-toolkit/dist/compat/function/curryRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/curryRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/curryRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,85 @@
+type __ = typeof curryRightPlaceholder;
+interface RightCurriedFunction1<T1, R> {
+    (): RightCurriedFunction1<T1, R>;
+    (t1: T1): R;
+}
+interface RightCurriedFunction2<T1, T2, R> {
+    (): RightCurriedFunction2<T1, T2, R>;
+    (t2: T2): RightCurriedFunction1<T1, R>;
+    (t1: T1, t2: __): RightCurriedFunction1<T2, R>;
+    (t1: T1, t2: T2): R;
+}
+interface RightCurriedFunction3<T1, T2, T3, R> {
+    (): RightCurriedFunction3<T1, T2, T3, R>;
+    (t3: T3): RightCurriedFunction2<T1, T2, R>;
+    (t2: T2, t3: __): RightCurriedFunction2<T1, T3, R>;
+    (t2: T2, t3: T3): RightCurriedFunction1<T1, R>;
+    (t1: T1, t2: __, t3: __): RightCurriedFunction2<T2, T3, R>;
+    (t1: T1, t2: T2, t3: __): RightCurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3): RightCurriedFunction1<T2, R>;
+    (t1: T1, t2: T2, t3: T3): R;
+}
+interface RightCurriedFunction4<T1, T2, T3, T4, R> {
+    (): RightCurriedFunction4<T1, T2, T3, T4, R>;
+    (t4: T4): RightCurriedFunction3<T1, T2, T3, R>;
+    (t3: T3, t4: __): RightCurriedFunction3<T1, T2, T4, R>;
+    (t3: T3, t4: T4): RightCurriedFunction2<T1, T2, R>;
+    (t2: T2, t3: __, t4: __): RightCurriedFunction3<T1, T3, T4, R>;
+    (t2: T2, t3: T3, t4: __): RightCurriedFunction2<T1, T4, R>;
+    (t2: T2, t3: __, t4: T4): RightCurriedFunction2<T1, T3, R>;
+    (t2: T2, t3: T3, t4: T4): RightCurriedFunction1<T1, R>;
+    (t1: T1, t2: __, t3: __, t4: __): RightCurriedFunction3<T2, T3, T4, R>;
+    (t1: T1, t2: T2, t3: __, t4: __): RightCurriedFunction2<T3, T4, R>;
+    (t1: T1, t2: __, t3: T3, t4: __): RightCurriedFunction2<T2, T4, R>;
+    (t1: T1, t2: __, t3: __, t4: T4): RightCurriedFunction2<T2, T3, R>;
+    (t1: T1, t2: T2, t3: T3, t4: __): RightCurriedFunction1<T4, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4): RightCurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4): RightCurriedFunction1<T2, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4): R;
+}
+interface RightCurriedFunction5<T1, T2, T3, T4, T5, R> {
+    (): RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
+    (t5: T5): RightCurriedFunction4<T1, T2, T3, T4, R>;
+    (t4: T4, t5: __): RightCurriedFunction4<T1, T2, T3, T5, R>;
+    (t4: T4, t5: T5): RightCurriedFunction3<T1, T2, T3, R>;
+    (t3: T3, t4: __, t5: __): RightCurriedFunction4<T1, T2, T4, T5, R>;
+    (t3: T3, t4: T4, t5: __): RightCurriedFunction3<T1, T2, T5, R>;
+    (t3: T3, t4: __, t5: T5): RightCurriedFunction3<T1, T2, T4, R>;
+    (t3: T3, t4: T4, t5: T5): RightCurriedFunction2<T1, T2, R>;
+    (t2: T2, t3: __, t4: __, t5: __): RightCurriedFunction4<T1, T3, T4, T5, R>;
+    (t2: T2, t3: T3, t4: __, t5: __): RightCurriedFunction3<T1, T4, T5, R>;
+    (t2: T2, t3: __, t4: T4, t5: __): RightCurriedFunction3<T1, T3, T5, R>;
+    (t2: T2, t3: __, t4: __, t5: T5): RightCurriedFunction3<T1, T3, T4, R>;
+    (t2: T2, t3: T3, t4: T4, t5: __): RightCurriedFunction2<T1, T5, R>;
+    (t2: T2, t3: T3, t4: __, t5: T5): RightCurriedFunction2<T1, T4, R>;
+    (t2: T2, t3: __, t4: T4, t5: T5): RightCurriedFunction2<T1, T3, R>;
+    (t2: T2, t3: T3, t4: T4, t5: T5): RightCurriedFunction1<T1, R>;
+    (t1: T1, t2: __, t3: __, t4: __, t5: __): RightCurriedFunction4<T2, T3, T4, T5, R>;
+    (t1: T1, t2: T2, t3: __, t4: __, t5: __): RightCurriedFunction3<T3, T4, T5, R>;
+    (t1: T1, t2: __, t3: T3, t4: __, t5: __): RightCurriedFunction3<T2, T4, T5, R>;
+    (t1: T1, t2: __, t3: __, t4: T4, t5: __): RightCurriedFunction3<T2, T3, T5, R>;
+    (t1: T1, t2: __, t3: __, t4: __, t5: T5): RightCurriedFunction3<T2, T3, T4, R>;
+    (t1: T1, t2: T2, t3: T3, t4: __, t5: __): RightCurriedFunction2<T4, T5, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4, t5: __): RightCurriedFunction2<T3, T5, R>;
+    (t1: T1, t2: T2, t3: __, t4: __, t5: T5): RightCurriedFunction2<T3, T4, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4, t5: __): RightCurriedFunction2<T2, T5, R>;
+    (t1: T1, t2: __, t3: T3, t4: __, t5: T5): RightCurriedFunction2<T2, T4, R>;
+    (t1: T1, t2: __, t3: __, t4: T4, t5: T5): RightCurriedFunction2<T2, T3, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4, t5: __): RightCurriedFunction1<T5, R>;
+    (t1: T1, t2: T2, t3: T3, t4: __, t5: T5): RightCurriedFunction1<T4, R>;
+    (t1: T1, t2: T2, t3: __, t4: T4, t5: T5): RightCurriedFunction1<T3, R>;
+    (t1: T1, t2: __, t3: T3, t4: T4, t5: T5): RightCurriedFunction1<T2, R>;
+    (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5): R;
+}
+declare function curryRight<T1, R>(func: (t1: T1) => R, arity?: number): RightCurriedFunction1<T1, R>;
+declare function curryRight<T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): RightCurriedFunction2<T1, T2, R>;
+declare function curryRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): RightCurriedFunction3<T1, T2, T3, R>;
+declare function curryRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): RightCurriedFunction4<T1, T2, T3, T4, R>;
+declare function curryRight<T1, T2, T3, T4, T5, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R, arity?: number): RightCurriedFunction5<T1, T2, T3, T4, T5, R>;
+declare function curryRight(func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
+declare namespace curryRight {
+    var placeholder: typeof curryRightPlaceholder;
+}
+declare const curryRightPlaceholder: unique symbol;
+
+export { curryRight };
Index: node_modules/es-toolkit/dist/compat/function/curryRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/curryRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/curryRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function curryRight(func, arity = func.length, guard) {
+    arity = guard ? func.length : arity;
+    arity = Number.parseInt(arity, 10);
+    if (Number.isNaN(arity) || arity < 1) {
+        arity = 0;
+    }
+    const wrapper = function (...partialArgs) {
+        const holders = partialArgs.filter(item => item === curryRight.placeholder);
+        const length = partialArgs.length - holders.length;
+        if (length < arity) {
+            return makeCurryRight(func, arity - length, partialArgs);
+        }
+        if (this instanceof wrapper) {
+            return new func(...partialArgs);
+        }
+        return func.apply(this, partialArgs);
+    };
+    wrapper.placeholder = curryRightPlaceholder;
+    return wrapper;
+}
+function makeCurryRight(func, arity, partialArgs) {
+    function wrapper(...providedArgs) {
+        const holders = providedArgs.filter(item => item === curryRight.placeholder);
+        const length = providedArgs.length - holders.length;
+        providedArgs = composeArgs(providedArgs, partialArgs);
+        if (length < arity) {
+            return makeCurryRight(func, arity - length, providedArgs);
+        }
+        if (this instanceof wrapper) {
+            return new func(...providedArgs);
+        }
+        return func.apply(this, providedArgs);
+    }
+    wrapper.placeholder = curryRightPlaceholder;
+    return wrapper;
+}
+function composeArgs(providedArgs, partialArgs) {
+    const placeholderLength = partialArgs.filter(arg => arg === curryRight.placeholder).length;
+    const rangeLength = Math.max(providedArgs.length - placeholderLength, 0);
+    const args = [];
+    let providedIndex = 0;
+    for (let i = 0; i < rangeLength; i++) {
+        args.push(providedArgs[providedIndex++]);
+    }
+    for (let i = 0; i < partialArgs.length; i++) {
+        const arg = partialArgs[i];
+        if (arg === curryRight.placeholder) {
+            if (providedIndex < providedArgs.length) {
+                args.push(providedArgs[providedIndex++]);
+            }
+            else {
+                args.push(arg);
+            }
+        }
+        else {
+            args.push(arg);
+        }
+    }
+    return args;
+}
+const curryRightPlaceholder = Symbol('curryRight.placeholder');
+curryRight.placeholder = curryRightPlaceholder;
+
+exports.curryRight = curryRight;
Index: node_modules/es-toolkit/dist/compat/function/curryRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/curryRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/curryRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+function curryRight(func, arity = func.length, guard) {
+    arity = guard ? func.length : arity;
+    arity = Number.parseInt(arity, 10);
+    if (Number.isNaN(arity) || arity < 1) {
+        arity = 0;
+    }
+    const wrapper = function (...partialArgs) {
+        const holders = partialArgs.filter(item => item === curryRight.placeholder);
+        const length = partialArgs.length - holders.length;
+        if (length < arity) {
+            return makeCurryRight(func, arity - length, partialArgs);
+        }
+        if (this instanceof wrapper) {
+            return new func(...partialArgs);
+        }
+        return func.apply(this, partialArgs);
+    };
+    wrapper.placeholder = curryRightPlaceholder;
+    return wrapper;
+}
+function makeCurryRight(func, arity, partialArgs) {
+    function wrapper(...providedArgs) {
+        const holders = providedArgs.filter(item => item === curryRight.placeholder);
+        const length = providedArgs.length - holders.length;
+        providedArgs = composeArgs(providedArgs, partialArgs);
+        if (length < arity) {
+            return makeCurryRight(func, arity - length, providedArgs);
+        }
+        if (this instanceof wrapper) {
+            return new func(...providedArgs);
+        }
+        return func.apply(this, providedArgs);
+    }
+    wrapper.placeholder = curryRightPlaceholder;
+    return wrapper;
+}
+function composeArgs(providedArgs, partialArgs) {
+    const placeholderLength = partialArgs.filter(arg => arg === curryRight.placeholder).length;
+    const rangeLength = Math.max(providedArgs.length - placeholderLength, 0);
+    const args = [];
+    let providedIndex = 0;
+    for (let i = 0; i < rangeLength; i++) {
+        args.push(providedArgs[providedIndex++]);
+    }
+    for (let i = 0; i < partialArgs.length; i++) {
+        const arg = partialArgs[i];
+        if (arg === curryRight.placeholder) {
+            if (providedIndex < providedArgs.length) {
+                args.push(providedArgs[providedIndex++]);
+            }
+            else {
+                args.push(arg);
+            }
+        }
+        else {
+            args.push(arg);
+        }
+    }
+    return args;
+}
+const curryRightPlaceholder = Symbol('curryRight.placeholder');
+curryRight.placeholder = curryRightPlaceholder;
+
+export { curryRight };
Index: node_modules/es-toolkit/dist/compat/function/debounce.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/debounce.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/debounce.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,144 @@
+interface DebounceSettings {
+    /**
+     * If `true`, the function will be invoked on the leading edge of the timeout.
+     * @default false
+     */
+    leading?: boolean | undefined;
+    /**
+     * The maximum time `func` is allowed to be delayed before it's invoked.
+     * @default Infinity
+     */
+    maxWait?: number | undefined;
+    /**
+     * If `true`, the function will be invoked on the trailing edge of the timeout.
+     * @default true
+     */
+    trailing?: boolean | undefined;
+}
+interface DebounceSettingsLeading extends DebounceSettings {
+    leading: true;
+}
+interface DebouncedFunc<T extends (...args: any[]) => any> {
+    /**
+     * Call the original function, but applying the debounce rules.
+     *
+     * If the debounced function can be run immediately, this calls it and returns its return
+     * value.
+     *
+     * Otherwise, it returns the return value of the last invocation, or undefined if the debounced
+     * function was not invoked yet.
+     */
+    (...args: Parameters<T>): ReturnType<T> | undefined;
+    /**
+     * Throw away any pending invocation of the debounced function.
+     */
+    cancel(): void;
+    /**
+     * If there is a pending invocation of the debounced function, invoke it immediately and return
+     * its return value.
+     *
+     * Otherwise, return the value from the last invocation, or undefined if the debounced function
+     * was never invoked.
+     */
+    flush(): ReturnType<T> | undefined;
+}
+interface DebouncedFuncLeading<T extends (...args: any[]) => any> extends DebouncedFunc<T> {
+    (...args: Parameters<T>): ReturnType<T>;
+    flush(): ReturnType<T>;
+}
+/**
+ * Creates a debounced function that delays invoking the provided function until after `debounceMs` milliseconds
+ * have elapsed since the last time the debounced function was invoked. The debounced function also has a `cancel`
+ * method to cancel any pending execution.
+ *
+ * You can set the debounced function to run at the start (`leading`) or end (`trailing`) of the delay period.
+ * If `leading` is true, the function runs immediately on the first call.
+ * If `trailing` is true, the function runs after `debounceMs` milliseconds have passed since the last call.
+ * If both `leading` and `trailing` are true, the function runs at both the start and end, but it must be called at least twice within `debounceMs` milliseconds for this to happen
+ * (since one debounced function call cannot trigger the function twice).
+ *
+ * You can also set a `maxWait` time, which is the maximum time the function is allowed to be delayed before it is called.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to debounce.
+ * @param {number} debounceMs - The number of milliseconds to delay.
+ * @param {DebounceOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the debounced function.
+ * @param {boolean} options.leading - If `true`, the function will be invoked on the leading edge of the timeout.
+ * @param {boolean} options.trailing - If `true`, the function will be invoked on the trailing edge of the timeout.
+ * @param {number} options.maxWait - The maximum time `func` is allowed to be delayed before it's invoked.
+ * @returns A new debounced function with a `cancel` method.
+ *
+ * @example
+ * const debouncedFunction = debounce(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' after 1 second if not called again in that time
+ * debouncedFunction();
+ *
+ * // Will not log anything as the previous call is canceled
+ * debouncedFunction.cancel();
+ *
+ * // With AbortSignal
+ * const controller = new AbortController();
+ * const signal = controller.signal;
+ * const debouncedWithSignal = debounce(() => {
+ *  console.log('Function executed');
+ * }, 1000, { signal });
+ *
+ * debouncedWithSignal();
+ *
+ * // Will cancel the debounced function call
+ * controller.abort();
+ */
+declare function debounce<T extends (...args: any) => any>(func: T, wait: number | undefined, options: DebounceSettingsLeading): DebouncedFuncLeading<T>;
+/**
+ * Creates a debounced function that delays invoking the provided function until after `debounceMs` milliseconds
+ * have elapsed since the last time the debounced function was invoked. The debounced function also has a `cancel`
+ * method to cancel any pending execution.
+ *
+ * You can set the debounced function to run at the start (`leading`) or end (`trailing`) of the delay period.
+ * If `leading` is true, the function runs immediately on the first call.
+ * If `trailing` is true, the function runs after `debounceMs` milliseconds have passed since the last call.
+ * If both `leading` and `trailing` are true, the function runs at both the start and end, but it must be called at least twice within `debounceMs` milliseconds for this to happen
+ * (since one debounced function call cannot trigger the function twice).
+ *
+ * You can also set a `maxWait` time, which is the maximum time the function is allowed to be delayed before it is called.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to debounce.
+ * @param {number} debounceMs - The number of milliseconds to delay.
+ * @param {DebounceOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the debounced function.
+ * @param {boolean} options.leading - If `true`, the function will be invoked on the leading edge of the timeout.
+ * @param {boolean} options.trailing - If `true`, the function will be invoked on the trailing edge of the timeout.
+ * @param {number} options.maxWait - The maximum time `func` is allowed to be delayed before it's invoked.
+ * @returns A new debounced function with a `cancel` method.
+ *
+ * @example
+ * const debouncedFunction = debounce(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' after 1 second if not called again in that time
+ * debouncedFunction();
+ *
+ * // Will not log anything as the previous call is canceled
+ * debouncedFunction.cancel();
+ *
+ * // With AbortSignal
+ * const controller = new AbortController();
+ * const signal = controller.signal;
+ * const debouncedWithSignal = debounce(() => {
+ *  console.log('Function executed');
+ * }, 1000, { signal });
+ *
+ * debouncedWithSignal();
+ *
+ * // Will cancel the debounced function call
+ * controller.abort();
+ */
+declare function debounce<T extends (...args: any) => any>(func: T, wait?: number, options?: DebounceSettings): DebouncedFunc<T>;
+
+export { type DebouncedFunc, type DebouncedFuncLeading, debounce };
Index: node_modules/es-toolkit/dist/compat/function/debounce.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/debounce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/debounce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,144 @@
+interface DebounceSettings {
+    /**
+     * If `true`, the function will be invoked on the leading edge of the timeout.
+     * @default false
+     */
+    leading?: boolean | undefined;
+    /**
+     * The maximum time `func` is allowed to be delayed before it's invoked.
+     * @default Infinity
+     */
+    maxWait?: number | undefined;
+    /**
+     * If `true`, the function will be invoked on the trailing edge of the timeout.
+     * @default true
+     */
+    trailing?: boolean | undefined;
+}
+interface DebounceSettingsLeading extends DebounceSettings {
+    leading: true;
+}
+interface DebouncedFunc<T extends (...args: any[]) => any> {
+    /**
+     * Call the original function, but applying the debounce rules.
+     *
+     * If the debounced function can be run immediately, this calls it and returns its return
+     * value.
+     *
+     * Otherwise, it returns the return value of the last invocation, or undefined if the debounced
+     * function was not invoked yet.
+     */
+    (...args: Parameters<T>): ReturnType<T> | undefined;
+    /**
+     * Throw away any pending invocation of the debounced function.
+     */
+    cancel(): void;
+    /**
+     * If there is a pending invocation of the debounced function, invoke it immediately and return
+     * its return value.
+     *
+     * Otherwise, return the value from the last invocation, or undefined if the debounced function
+     * was never invoked.
+     */
+    flush(): ReturnType<T> | undefined;
+}
+interface DebouncedFuncLeading<T extends (...args: any[]) => any> extends DebouncedFunc<T> {
+    (...args: Parameters<T>): ReturnType<T>;
+    flush(): ReturnType<T>;
+}
+/**
+ * Creates a debounced function that delays invoking the provided function until after `debounceMs` milliseconds
+ * have elapsed since the last time the debounced function was invoked. The debounced function also has a `cancel`
+ * method to cancel any pending execution.
+ *
+ * You can set the debounced function to run at the start (`leading`) or end (`trailing`) of the delay period.
+ * If `leading` is true, the function runs immediately on the first call.
+ * If `trailing` is true, the function runs after `debounceMs` milliseconds have passed since the last call.
+ * If both `leading` and `trailing` are true, the function runs at both the start and end, but it must be called at least twice within `debounceMs` milliseconds for this to happen
+ * (since one debounced function call cannot trigger the function twice).
+ *
+ * You can also set a `maxWait` time, which is the maximum time the function is allowed to be delayed before it is called.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to debounce.
+ * @param {number} debounceMs - The number of milliseconds to delay.
+ * @param {DebounceOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the debounced function.
+ * @param {boolean} options.leading - If `true`, the function will be invoked on the leading edge of the timeout.
+ * @param {boolean} options.trailing - If `true`, the function will be invoked on the trailing edge of the timeout.
+ * @param {number} options.maxWait - The maximum time `func` is allowed to be delayed before it's invoked.
+ * @returns A new debounced function with a `cancel` method.
+ *
+ * @example
+ * const debouncedFunction = debounce(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' after 1 second if not called again in that time
+ * debouncedFunction();
+ *
+ * // Will not log anything as the previous call is canceled
+ * debouncedFunction.cancel();
+ *
+ * // With AbortSignal
+ * const controller = new AbortController();
+ * const signal = controller.signal;
+ * const debouncedWithSignal = debounce(() => {
+ *  console.log('Function executed');
+ * }, 1000, { signal });
+ *
+ * debouncedWithSignal();
+ *
+ * // Will cancel the debounced function call
+ * controller.abort();
+ */
+declare function debounce<T extends (...args: any) => any>(func: T, wait: number | undefined, options: DebounceSettingsLeading): DebouncedFuncLeading<T>;
+/**
+ * Creates a debounced function that delays invoking the provided function until after `debounceMs` milliseconds
+ * have elapsed since the last time the debounced function was invoked. The debounced function also has a `cancel`
+ * method to cancel any pending execution.
+ *
+ * You can set the debounced function to run at the start (`leading`) or end (`trailing`) of the delay period.
+ * If `leading` is true, the function runs immediately on the first call.
+ * If `trailing` is true, the function runs after `debounceMs` milliseconds have passed since the last call.
+ * If both `leading` and `trailing` are true, the function runs at both the start and end, but it must be called at least twice within `debounceMs` milliseconds for this to happen
+ * (since one debounced function call cannot trigger the function twice).
+ *
+ * You can also set a `maxWait` time, which is the maximum time the function is allowed to be delayed before it is called.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to debounce.
+ * @param {number} debounceMs - The number of milliseconds to delay.
+ * @param {DebounceOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the debounced function.
+ * @param {boolean} options.leading - If `true`, the function will be invoked on the leading edge of the timeout.
+ * @param {boolean} options.trailing - If `true`, the function will be invoked on the trailing edge of the timeout.
+ * @param {number} options.maxWait - The maximum time `func` is allowed to be delayed before it's invoked.
+ * @returns A new debounced function with a `cancel` method.
+ *
+ * @example
+ * const debouncedFunction = debounce(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' after 1 second if not called again in that time
+ * debouncedFunction();
+ *
+ * // Will not log anything as the previous call is canceled
+ * debouncedFunction.cancel();
+ *
+ * // With AbortSignal
+ * const controller = new AbortController();
+ * const signal = controller.signal;
+ * const debouncedWithSignal = debounce(() => {
+ *  console.log('Function executed');
+ * }, 1000, { signal });
+ *
+ * debouncedWithSignal();
+ *
+ * // Will cancel the debounced function call
+ * controller.abort();
+ */
+declare function debounce<T extends (...args: any) => any>(func: T, wait?: number, options?: DebounceSettings): DebouncedFunc<T>;
+
+export { type DebouncedFunc, type DebouncedFuncLeading, debounce };
Index: node_modules/es-toolkit/dist/compat/function/debounce.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/debounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/debounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const debounce$1 = require('../../function/debounce.js');
+
+function debounce(func, debounceMs = 0, options = {}) {
+    if (typeof options !== 'object') {
+        options = {};
+    }
+    const { leading = false, trailing = true, maxWait } = options;
+    const edges = Array(2);
+    if (leading) {
+        edges[0] = 'leading';
+    }
+    if (trailing) {
+        edges[1] = 'trailing';
+    }
+    let result = undefined;
+    let pendingAt = null;
+    const _debounced = debounce$1.debounce(function (...args) {
+        result = func.apply(this, args);
+        pendingAt = null;
+    }, debounceMs, { edges });
+    const debounced = function (...args) {
+        if (maxWait != null) {
+            if (pendingAt === null) {
+                pendingAt = Date.now();
+            }
+            if (Date.now() - pendingAt >= maxWait) {
+                result = func.apply(this, args);
+                pendingAt = Date.now();
+                _debounced.cancel();
+                _debounced.schedule();
+                return result;
+            }
+        }
+        _debounced.apply(this, args);
+        return result;
+    };
+    const flush = () => {
+        _debounced.flush();
+        return result;
+    };
+    debounced.cancel = _debounced.cancel;
+    debounced.flush = flush;
+    return debounced;
+}
+
+exports.debounce = debounce;
Index: node_modules/es-toolkit/dist/compat/function/debounce.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/debounce.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/debounce.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+import { debounce as debounce$1 } from '../../function/debounce.mjs';
+
+function debounce(func, debounceMs = 0, options = {}) {
+    if (typeof options !== 'object') {
+        options = {};
+    }
+    const { leading = false, trailing = true, maxWait } = options;
+    const edges = Array(2);
+    if (leading) {
+        edges[0] = 'leading';
+    }
+    if (trailing) {
+        edges[1] = 'trailing';
+    }
+    let result = undefined;
+    let pendingAt = null;
+    const _debounced = debounce$1(function (...args) {
+        result = func.apply(this, args);
+        pendingAt = null;
+    }, debounceMs, { edges });
+    const debounced = function (...args) {
+        if (maxWait != null) {
+            if (pendingAt === null) {
+                pendingAt = Date.now();
+            }
+            if (Date.now() - pendingAt >= maxWait) {
+                result = func.apply(this, args);
+                pendingAt = Date.now();
+                _debounced.cancel();
+                _debounced.schedule();
+                return result;
+            }
+        }
+        _debounced.apply(this, args);
+        return result;
+    };
+    const flush = () => {
+        _debounced.flush();
+        return result;
+    };
+    debounced.cancel = _debounced.cancel;
+    debounced.flush = flush;
+    return debounced;
+}
+
+export { debounce };
Index: node_modules/es-toolkit/dist/compat/function/defer.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/defer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/defer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Defers invoking the `func` until the current call stack has cleared. Any additional arguments are provided to func when it's invoked.
+ *
+ * @param {(...args: any[]) => any} func The function to defer.
+ * @param {...any[]} args The arguments to invoke `func` with.
+ * @returns {number} Returns the timer id.
+ *
+ * @example
+ * defer(console.log, 'deferred');
+ * // => Logs 'deferred' after the current call stack has cleared.
+ */
+declare function defer(func: (...args: any[]) => any, ...args: any[]): number;
+
+export { defer };
Index: node_modules/es-toolkit/dist/compat/function/defer.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/defer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/defer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Defers invoking the `func` until the current call stack has cleared. Any additional arguments are provided to func when it's invoked.
+ *
+ * @param {(...args: any[]) => any} func The function to defer.
+ * @param {...any[]} args The arguments to invoke `func` with.
+ * @returns {number} Returns the timer id.
+ *
+ * @example
+ * defer(console.log, 'deferred');
+ * // => Logs 'deferred' after the current call stack has cleared.
+ */
+declare function defer(func: (...args: any[]) => any, ...args: any[]): number;
+
+export { defer };
Index: node_modules/es-toolkit/dist/compat/function/defer.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/defer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/defer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function defer(func, ...args) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    return setTimeout(func, 1, ...args);
+}
+
+exports.defer = defer;
Index: node_modules/es-toolkit/dist/compat/function/defer.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/defer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/defer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function defer(func, ...args) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    return setTimeout(func, 1, ...args);
+}
+
+export { defer };
Index: node_modules/es-toolkit/dist/compat/function/delay.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/delay.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/delay.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Invokes the specified function after a delay of the given number of milliseconds.
+ * Any additional arguments are passed to the function when it is invoked.
+ *
+ * @param {(...args: any[]) => any} func - The function to delay.
+ * @param {number} wait - The number of milliseconds to delay the invocation.
+ * @param {...any[]} args - The arguments to pass to the function when it is invoked.
+ * @returns {number} Returns the timer id.
+ * @throws {TypeError} If the first argument is not a function.
+ *
+ * @example
+ * // Example 1: Delayed function execution
+ * const timerId = delay(
+ *   (greeting, recipient) => {
+ *     console.log(`${greeting}, ${recipient}!`);
+ *   },
+ *   1000,
+ *   'Hello',
+ *   'Alice'
+ * );
+ * // => 'Hello, Alice!' will be logged after one second.
+ *
+ * // Example 2: Clearing the timeout before execution
+ * clearTimeout(timerId);
+ * // The function will not be executed because the timeout was cleared.
+ */
+declare function delay(func: (...args: any[]) => any, wait: number, ...args: any[]): number;
+
+export { delay };
Index: node_modules/es-toolkit/dist/compat/function/delay.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/delay.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/delay.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Invokes the specified function after a delay of the given number of milliseconds.
+ * Any additional arguments are passed to the function when it is invoked.
+ *
+ * @param {(...args: any[]) => any} func - The function to delay.
+ * @param {number} wait - The number of milliseconds to delay the invocation.
+ * @param {...any[]} args - The arguments to pass to the function when it is invoked.
+ * @returns {number} Returns the timer id.
+ * @throws {TypeError} If the first argument is not a function.
+ *
+ * @example
+ * // Example 1: Delayed function execution
+ * const timerId = delay(
+ *   (greeting, recipient) => {
+ *     console.log(`${greeting}, ${recipient}!`);
+ *   },
+ *   1000,
+ *   'Hello',
+ *   'Alice'
+ * );
+ * // => 'Hello, Alice!' will be logged after one second.
+ *
+ * // Example 2: Clearing the timeout before execution
+ * clearTimeout(timerId);
+ * // The function will not be executed because the timeout was cleared.
+ */
+declare function delay(func: (...args: any[]) => any, wait: number, ...args: any[]): number;
+
+export { delay };
Index: node_modules/es-toolkit/dist/compat/function/delay.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/delay.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/delay.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('../util/toNumber.js');
+
+function delay(func, wait, ...args) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    return setTimeout(func, toNumber.toNumber(wait) || 0, ...args);
+}
+
+exports.delay = delay;
Index: node_modules/es-toolkit/dist/compat/function/delay.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/delay.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/delay.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { toNumber } from '../util/toNumber.mjs';
+
+function delay(func, wait, ...args) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    return setTimeout(func, toNumber(wait) || 0, ...args);
+}
+
+export { delay };
Index: node_modules/es-toolkit/dist/compat/function/flip.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flip.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Reverses the order of arguments for a given function.
+ *
+ * @template T - The type of the function being flipped.
+ * @param {T} func - The function whose arguments will be reversed.
+ * @returns {T} A new function that takes the reversed arguments and returns the result of calling `func`.
+ *
+ * @example
+ * var flipped = flip(function() {
+ *   return Array.prototype.slice.call(arguments);
+ * });
+ *
+ * flipped('a', 'b', 'c', 'd');
+ * // => ['d', 'c', 'b', 'a']
+ */
+declare function flip<T extends (...args: any) => any>(func: T): T;
+
+export { flip };
Index: node_modules/es-toolkit/dist/compat/function/flip.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Reverses the order of arguments for a given function.
+ *
+ * @template T - The type of the function being flipped.
+ * @param {T} func - The function whose arguments will be reversed.
+ * @returns {T} A new function that takes the reversed arguments and returns the result of calling `func`.
+ *
+ * @example
+ * var flipped = flip(function() {
+ *   return Array.prototype.slice.call(arguments);
+ * });
+ *
+ * flipped('a', 'b', 'c', 'd');
+ * // => ['d', 'c', 'b', 'a']
+ */
+declare function flip<T extends (...args: any) => any>(func: T): T;
+
+export { flip };
Index: node_modules/es-toolkit/dist/compat/function/flip.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function flip(func) {
+    return function (...args) {
+        return func.apply(this, args.reverse());
+    };
+}
+
+exports.flip = flip;
Index: node_modules/es-toolkit/dist/compat/function/flip.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flip.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+function flip(func) {
+    return function (...args) {
+        return func.apply(this, args.reverse());
+    };
+}
+
+export { flip };
Index: node_modules/es-toolkit/dist/compat/function/flow.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flow.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flow.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,119 @@
+import { Many } from '../_internal/Many.mjs';
+
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * @template A - The type of the arguments.
+ * @template R - The type of the return values.
+ * @param {(...args: A) => R} f1 - The first function to invoke.
+ * @param {(a: R) => R} f2 - The second function to invoke.
+ * @param {(a: R) => R} f3 - The third function to invoke.
+ * @param {(a: R) => R} f4 - The fourth function to invoke.
+ * @param {(a: R) => R} f5 - The fifth function to invoke.
+ * @param {(a: R) => R} f6 - The sixth function to invoke.
+ * @param {(a: R) => R} f7 - The seventh function to invoke.
+ * @returns {(...args: A) => R} Returns the new composite function.
+ *
+ * @example
+ * function square(n) {
+ *   return n * n;
+ * }
+ *
+ * var addSquare = flow([add, square]);
+ * addSquare(1, 2);
+ * // => 9
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5, R6, R7>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (...args: A) => R7;
+/**
+ * Creates a new function that executes up to 7 functions in sequence, with additional functions flattened.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => n.toString();
+ *
+ * const combined = flow(add, square, double, toString);
+ * console.log(combined(1, 2)); // "18"
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5, R6, R7>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...func: Array<Many<(a: any) => any>>): (...args: A) => any;
+/**
+ * Creates a new function that executes 6 functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5, R6>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (...args: A) => R6;
+/**
+ * Creates a new function that executes 5 functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (...args: A) => R5;
+/**
+ * Creates a new function that executes 4 functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3, R4>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (...args: A) => R4;
+/**
+ * Creates a new function that executes 3 functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (...args: A) => R3;
+/**
+ * Creates a new function that executes 2 functions in sequence.
+ * The return value of the first function is passed as an argument to the second function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const addThenSquare = flow(add, square);
+ * console.log(addThenSquare(1, 2)); // 9
+ */
+declare function flow<A extends any[], R1, R2>(f1: (...args: A) => R1, f2: (a: R1) => R2): (...args: A) => R2;
+/**
+ * Creates a new function that executes the given functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow(...func: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
+
+export { flow };
Index: node_modules/es-toolkit/dist/compat/function/flow.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,119 @@
+import { Many } from '../_internal/Many.js';
+
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * @template A - The type of the arguments.
+ * @template R - The type of the return values.
+ * @param {(...args: A) => R} f1 - The first function to invoke.
+ * @param {(a: R) => R} f2 - The second function to invoke.
+ * @param {(a: R) => R} f3 - The third function to invoke.
+ * @param {(a: R) => R} f4 - The fourth function to invoke.
+ * @param {(a: R) => R} f5 - The fifth function to invoke.
+ * @param {(a: R) => R} f6 - The sixth function to invoke.
+ * @param {(a: R) => R} f7 - The seventh function to invoke.
+ * @returns {(...args: A) => R} Returns the new composite function.
+ *
+ * @example
+ * function square(n) {
+ *   return n * n;
+ * }
+ *
+ * var addSquare = flow([add, square]);
+ * addSquare(1, 2);
+ * // => 9
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5, R6, R7>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7): (...args: A) => R7;
+/**
+ * Creates a new function that executes up to 7 functions in sequence, with additional functions flattened.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => n.toString();
+ *
+ * const combined = flow(add, square, double, toString);
+ * console.log(combined(1, 2)); // "18"
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5, R6, R7>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6, f7: (a: R6) => R7, ...func: Array<Many<(a: any) => any>>): (...args: A) => any;
+/**
+ * Creates a new function that executes 6 functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5, R6>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5, f6: (a: R5) => R6): (...args: A) => R6;
+/**
+ * Creates a new function that executes 5 functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (...args: A) => R5;
+/**
+ * Creates a new function that executes 4 functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3, R4>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (...args: A) => R4;
+/**
+ * Creates a new function that executes 3 functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (...args: A) => R3;
+/**
+ * Creates a new function that executes 2 functions in sequence.
+ * The return value of the first function is passed as an argument to the second function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const addThenSquare = flow(add, square);
+ * console.log(addThenSquare(1, 2)); // 9
+ */
+declare function flow<A extends any[], R1, R2>(f1: (...args: A) => R1, f2: (a: R1) => R2): (...args: A) => R2;
+/**
+ * Creates a new function that executes the given functions in sequence.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow(...func: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
+
+export { flow };
Index: node_modules/es-toolkit/dist/compat/function/flow.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flatten = require('../../array/flatten.js');
+const flow$1 = require('../../function/flow.js');
+
+function flow(...funcs) {
+    const flattenFuncs = flatten.flatten(funcs, 1);
+    if (flattenFuncs.some(func => typeof func !== 'function')) {
+        throw new TypeError('Expected a function');
+    }
+    return flow$1.flow(...flattenFuncs);
+}
+
+exports.flow = flow;
Index: node_modules/es-toolkit/dist/compat/function/flow.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flow.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flow.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { flatten } from '../../array/flatten.mjs';
+import { flow as flow$1 } from '../../function/flow.mjs';
+
+function flow(...funcs) {
+    const flattenFuncs = flatten(funcs, 1);
+    if (flattenFuncs.some(func => typeof func !== 'function')) {
+        throw new TypeError('Expected a function');
+    }
+    return flow$1(...flattenFuncs);
+}
+
+export { flow };
Index: node_modules/es-toolkit/dist/compat/function/flowRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flowRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flowRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+import { Many } from '../_internal/Many.mjs';
+
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * @template A - The type of the arguments.
+ * @template R - The type of the return values.
+ * @param {(a: R) => R} f7 - The seventh function to invoke.
+ * @param {(a: R) => R} f6 - The sixth function to invoke.
+ * @param {(a: R) => R} f5 - The fifth function to invoke.
+ * @param {(a: R) => R} f4 - The fourth function to invoke.
+ * @param {(a: R) => R} f3 - The third function to invoke.
+ * @param {(a: R) => R} f2 - The second function to invoke.
+ * @param {(...args: A) => R} f1 - The first function to invoke.
+ * @returns {(...args: A) => R} Returns the new composite function.
+ *
+ * @example
+ * function square(n) {
+ *   return n * n;
+ * }
+ *
+ * var addSquare = flowRight(square, add);
+ * addSquare(1, 2);
+ * // => 9
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4, R5, R6, R7>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R7;
+/**
+ * Creates a new function that executes 6 functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => String(n);
+ * const append = (s: string) => s + '!';
+ * const length = (s: string) => s.length;
+ *
+ * const combined = flowRight(length, append, toString, double, square, add);
+ * console.log(combined(1, 2)); // 7
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4, R5, R6>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R6;
+/**
+ * Creates a new function that executes 5 functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => String(n);
+ * const append = (s: string) => s + '!';
+ *
+ * const combined = flowRight(append, toString, double, square, add);
+ * console.log(combined(1, 2)); // '18!'
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4, R5>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R5;
+/**
+ * Creates a new function that executes 4 functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => String(n);
+ *
+ * const combined = flowRight(toString, double, square, add);
+ * console.log(combined(1, 2)); // '18'
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R4;
+/**
+ * Creates a new function that executes 3 functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flowRight(double, square, add);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flowRight<A extends any[], R1, R2, R3>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R3;
+/**
+ * Creates a new function that executes 2 functions in sequence from right to left.
+ * The return value of the first function is passed as an argument to the second function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flowRight(square, add);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flowRight<A extends any[], R1, R2>(f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R2;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => String(n);
+ *
+ * // Pass functions as separate arguments
+ * const combined1 = flowRight(toString, double, square, add);
+ * console.log(combined1(1, 2)); // '18'
+ *
+ * // Pass functions as arrays
+ * const combined2 = flowRight([toString, double], [square, add]);
+ * console.log(combined2(1, 2)); // '18'
+ */
+declare function flowRight(...func: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
+
+export { flowRight };
Index: node_modules/es-toolkit/dist/compat/function/flowRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flowRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flowRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+import { Many } from '../_internal/Many.js';
+
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * @template A - The type of the arguments.
+ * @template R - The type of the return values.
+ * @param {(a: R) => R} f7 - The seventh function to invoke.
+ * @param {(a: R) => R} f6 - The sixth function to invoke.
+ * @param {(a: R) => R} f5 - The fifth function to invoke.
+ * @param {(a: R) => R} f4 - The fourth function to invoke.
+ * @param {(a: R) => R} f3 - The third function to invoke.
+ * @param {(a: R) => R} f2 - The second function to invoke.
+ * @param {(...args: A) => R} f1 - The first function to invoke.
+ * @returns {(...args: A) => R} Returns the new composite function.
+ *
+ * @example
+ * function square(n) {
+ *   return n * n;
+ * }
+ *
+ * var addSquare = flowRight(square, add);
+ * addSquare(1, 2);
+ * // => 9
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4, R5, R6, R7>(f7: (a: R6) => R7, f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R7;
+/**
+ * Creates a new function that executes 6 functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => String(n);
+ * const append = (s: string) => s + '!';
+ * const length = (s: string) => s.length;
+ *
+ * const combined = flowRight(length, append, toString, double, square, add);
+ * console.log(combined(1, 2)); // 7
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4, R5, R6>(f6: (a: R5) => R6, f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R6;
+/**
+ * Creates a new function that executes 5 functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => String(n);
+ * const append = (s: string) => s + '!';
+ *
+ * const combined = flowRight(append, toString, double, square, add);
+ * console.log(combined(1, 2)); // '18!'
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4, R5>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R5;
+/**
+ * Creates a new function that executes 4 functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => String(n);
+ *
+ * const combined = flowRight(toString, double, square, add);
+ * console.log(combined(1, 2)); // '18'
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R4;
+/**
+ * Creates a new function that executes 3 functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flowRight(double, square, add);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flowRight<A extends any[], R1, R2, R3>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R3;
+/**
+ * Creates a new function that executes 2 functions in sequence from right to left.
+ * The return value of the first function is passed as an argument to the second function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flowRight(square, add);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flowRight<A extends any[], R1, R2>(f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R2;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left.
+ * The return value of each function is passed as an argument to the next function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toString = (n: number) => String(n);
+ *
+ * // Pass functions as separate arguments
+ * const combined1 = flowRight(toString, double, square, add);
+ * console.log(combined1(1, 2)); // '18'
+ *
+ * // Pass functions as arrays
+ * const combined2 = flowRight([toString, double], [square, add]);
+ * console.log(combined2(1, 2)); // '18'
+ */
+declare function flowRight(...func: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
+
+export { flowRight };
Index: node_modules/es-toolkit/dist/compat/function/flowRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flowRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flowRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flatten = require('../../array/flatten.js');
+const flowRight$1 = require('../../function/flowRight.js');
+
+function flowRight(...funcs) {
+    const flattenFuncs = flatten.flatten(funcs, 1);
+    if (flattenFuncs.some(func => typeof func !== 'function')) {
+        throw new TypeError('Expected a function');
+    }
+    return flowRight$1.flowRight(...flattenFuncs);
+}
+
+exports.flowRight = flowRight;
Index: node_modules/es-toolkit/dist/compat/function/flowRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/flowRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/flowRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { flatten } from '../../array/flatten.mjs';
+import { flowRight as flowRight$1 } from '../../function/flowRight.mjs';
+
+function flowRight(...funcs) {
+    const flattenFuncs = flatten(funcs, 1);
+    if (flattenFuncs.some(func => typeof func !== 'function')) {
+        throw new TypeError('Expected a function');
+    }
+    return flowRight$1(...flattenFuncs);
+}
+
+export { flowRight };
Index: node_modules/es-toolkit/dist/compat/function/identity.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/identity.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/identity.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+/**
+ * Returns the input value unchanged.
+ *
+ * @template T - The type of the input value.
+ * @param {T} x - The value to be returned.
+ * @returns {T} The input value.
+ *
+ * @example
+ * // Returns 5
+ * identity(5);
+ *
+ * @example
+ * // Returns 'hello'
+ * identity('hello');
+ *
+ * @example
+ * // Returns { key: 'value' }
+ * identity({ key: 'value' });
+ */
+declare function identity<T>(value: T): T;
+/**
+ * Returns the input value unchanged.
+ *
+ * @template T - The type of the input value.
+ * @param {T} x - The value to be returned.
+ * @returns {T} The input value.
+ *
+ * @example
+ * // Returns 5
+ * identity(5);
+ *
+ * @example
+ * // Returns 'hello'
+ * identity('hello');
+ *
+ * @example
+ * // Returns { key: 'value' }
+ * identity({ key: 'value' });
+ */
+declare function identity(): undefined;
+
+export { identity };
Index: node_modules/es-toolkit/dist/compat/function/identity.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/identity.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/identity.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+/**
+ * Returns the input value unchanged.
+ *
+ * @template T - The type of the input value.
+ * @param {T} x - The value to be returned.
+ * @returns {T} The input value.
+ *
+ * @example
+ * // Returns 5
+ * identity(5);
+ *
+ * @example
+ * // Returns 'hello'
+ * identity('hello');
+ *
+ * @example
+ * // Returns { key: 'value' }
+ * identity({ key: 'value' });
+ */
+declare function identity<T>(value: T): T;
+/**
+ * Returns the input value unchanged.
+ *
+ * @template T - The type of the input value.
+ * @param {T} x - The value to be returned.
+ * @returns {T} The input value.
+ *
+ * @example
+ * // Returns 5
+ * identity(5);
+ *
+ * @example
+ * // Returns 'hello'
+ * identity('hello');
+ *
+ * @example
+ * // Returns { key: 'value' }
+ * identity({ key: 'value' });
+ */
+declare function identity(): undefined;
+
+export { identity };
Index: node_modules/es-toolkit/dist/compat/function/identity.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function identity(x) {
+    return x;
+}
+
+exports.identity = identity;
Index: node_modules/es-toolkit/dist/compat/function/identity.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/identity.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/identity.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function identity(x) {
+    return x;
+}
+
+export { identity };
Index: node_modules/es-toolkit/dist/compat/function/memoize.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/memoize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/memoize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,119 @@
+interface MapCache {
+    /**
+     * Removes the value associated with the specified key from the cache.
+     *
+     * @param key - The key of the value to remove
+     * @returns `true` if an element was removed, `false` if the key wasn't found
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' });
+     * cache.delete('user'); // Returns true
+     * cache.delete('unknown'); // Returns false
+     * ```
+     */
+    delete(key: any): boolean;
+    /**
+     * Retrieves the value associated with the specified key from the cache.
+     *
+     * @param key - The key of the value to retrieve
+     * @returns The cached value or undefined if not found
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' });
+     * cache.get('user'); // Returns { id: 123, name: 'John' }
+     * cache.get('unknown'); // Returns undefined
+     * ```
+     */
+    get(key: any): any;
+    /**
+     * Checks if the cache contains a value for the specified key.
+     *
+     * @param key - The key to check for existence
+     * @returns `true` if the key exists in the cache, otherwise `false`
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' });
+     * cache.has('user'); // Returns true
+     * cache.has('unknown'); // Returns false
+     * ```
+     */
+    has(key: any): boolean;
+    /**
+     * Stores a value in the cache with the specified key.
+     * If the key already exists, its value is updated.
+     *
+     * @param key - The key to associate with the value
+     * @param value - The value to store in the cache
+     * @returns The cache instance for method chaining
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' })
+     *      .set('settings', { theme: 'dark' });
+     * ```
+     */
+    set(key: any, value: any): this;
+    /**
+     * Removes all key-value pairs from the cache.
+     * This method is optional as some cache implementations may be immutable.
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' });
+     * cache.set('settings', { theme: 'dark' });
+     * cache.clear(); // Cache is now empty
+     * ```
+     */
+    clear?(): void;
+}
+/**
+ * Constructor interface for creating a new MapCache instance.
+ * This defines the shape of a constructor that can create cache objects
+ * conforming to the MapCache interface.
+ *
+ * @example
+ * ```typescript
+ * class CustomCache implements MapCache {
+ *   // Cache implementation
+ * }
+ *
+ * const CacheConstructor: MapCacheConstructor = CustomCache;
+ * const cache = new CacheConstructor();
+ * ```
+ */
+interface MapCacheConstructor {
+    new (): MapCache;
+}
+/**
+ * Represents a function that has been memoized.
+ * A memoized function maintains the same signature as the original function
+ * but adds a cache property to store previously computed results.
+ *
+ * @template T - The type of the original function being memoized
+ */
+interface MemoizedFunction {
+    /**
+     * The cache storing previously computed results
+     */
+    cache: MapCache;
+}
+/**
+ * Creates a function that memoizes the result of func. If resolver is provided it determines the cache key for
+ * storing the result based on the arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is coerced to a string and used as the cache key. The func is invoked with
+ * the this binding of the memoized function.
+ *
+ * @template T - The type of the original function being memoized
+ * @param {T} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @return {MemoizedFunction<T>} Returns the new memoizing function.
+ */
+declare function memoize<T extends (...args: any) => any>(func: T, resolver?: (...args: Parameters<T>) => any): T & MemoizedFunction;
+declare namespace memoize {
+    var Cache: MapCacheConstructor;
+}
+
+export { memoize };
Index: node_modules/es-toolkit/dist/compat/function/memoize.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/memoize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/memoize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,119 @@
+interface MapCache {
+    /**
+     * Removes the value associated with the specified key from the cache.
+     *
+     * @param key - The key of the value to remove
+     * @returns `true` if an element was removed, `false` if the key wasn't found
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' });
+     * cache.delete('user'); // Returns true
+     * cache.delete('unknown'); // Returns false
+     * ```
+     */
+    delete(key: any): boolean;
+    /**
+     * Retrieves the value associated with the specified key from the cache.
+     *
+     * @param key - The key of the value to retrieve
+     * @returns The cached value or undefined if not found
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' });
+     * cache.get('user'); // Returns { id: 123, name: 'John' }
+     * cache.get('unknown'); // Returns undefined
+     * ```
+     */
+    get(key: any): any;
+    /**
+     * Checks if the cache contains a value for the specified key.
+     *
+     * @param key - The key to check for existence
+     * @returns `true` if the key exists in the cache, otherwise `false`
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' });
+     * cache.has('user'); // Returns true
+     * cache.has('unknown'); // Returns false
+     * ```
+     */
+    has(key: any): boolean;
+    /**
+     * Stores a value in the cache with the specified key.
+     * If the key already exists, its value is updated.
+     *
+     * @param key - The key to associate with the value
+     * @param value - The value to store in the cache
+     * @returns The cache instance for method chaining
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' })
+     *      .set('settings', { theme: 'dark' });
+     * ```
+     */
+    set(key: any, value: any): this;
+    /**
+     * Removes all key-value pairs from the cache.
+     * This method is optional as some cache implementations may be immutable.
+     *
+     * @example
+     * ```typescript
+     * cache.set('user', { id: 123, name: 'John' });
+     * cache.set('settings', { theme: 'dark' });
+     * cache.clear(); // Cache is now empty
+     * ```
+     */
+    clear?(): void;
+}
+/**
+ * Constructor interface for creating a new MapCache instance.
+ * This defines the shape of a constructor that can create cache objects
+ * conforming to the MapCache interface.
+ *
+ * @example
+ * ```typescript
+ * class CustomCache implements MapCache {
+ *   // Cache implementation
+ * }
+ *
+ * const CacheConstructor: MapCacheConstructor = CustomCache;
+ * const cache = new CacheConstructor();
+ * ```
+ */
+interface MapCacheConstructor {
+    new (): MapCache;
+}
+/**
+ * Represents a function that has been memoized.
+ * A memoized function maintains the same signature as the original function
+ * but adds a cache property to store previously computed results.
+ *
+ * @template T - The type of the original function being memoized
+ */
+interface MemoizedFunction {
+    /**
+     * The cache storing previously computed results
+     */
+    cache: MapCache;
+}
+/**
+ * Creates a function that memoizes the result of func. If resolver is provided it determines the cache key for
+ * storing the result based on the arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is coerced to a string and used as the cache key. The func is invoked with
+ * the this binding of the memoized function.
+ *
+ * @template T - The type of the original function being memoized
+ * @param {T} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @return {MemoizedFunction<T>} Returns the new memoizing function.
+ */
+declare function memoize<T extends (...args: any) => any>(func: T, resolver?: (...args: Parameters<T>) => any): T & MemoizedFunction;
+declare namespace memoize {
+    var Cache: MapCacheConstructor;
+}
+
+export { memoize };
Index: node_modules/es-toolkit/dist/compat/function/memoize.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/memoize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/memoize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function memoize(func, resolver) {
+    if (typeof func !== 'function' || (resolver != null && typeof resolver !== 'function')) {
+        throw new TypeError('Expected a function');
+    }
+    const memoized = function (...args) {
+        const key = resolver ? resolver.apply(this, args) : args[0];
+        const cache = memoized.cache;
+        if (cache.has(key)) {
+            return cache.get(key);
+        }
+        const result = func.apply(this, args);
+        memoized.cache = cache.set(key, result) || cache;
+        return result;
+    };
+    const CacheConstructor = memoize.Cache || Map;
+    memoized.cache = new CacheConstructor();
+    return memoized;
+}
+memoize.Cache = Map;
+
+exports.memoize = memoize;
Index: node_modules/es-toolkit/dist/compat/function/memoize.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/memoize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/memoize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+function memoize(func, resolver) {
+    if (typeof func !== 'function' || (resolver != null && typeof resolver !== 'function')) {
+        throw new TypeError('Expected a function');
+    }
+    const memoized = function (...args) {
+        const key = resolver ? resolver.apply(this, args) : args[0];
+        const cache = memoized.cache;
+        if (cache.has(key)) {
+            return cache.get(key);
+        }
+        const result = func.apply(this, args);
+        memoized.cache = cache.set(key, result) || cache;
+        return result;
+    };
+    const CacheConstructor = memoize.Cache || Map;
+    memoized.cache = new CacheConstructor();
+    return memoized;
+}
+memoize.Cache = Map;
+
+export { memoize };
Index: node_modules/es-toolkit/dist/compat/function/negate.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/negate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/negate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Creates a function that negates the result of the predicate function.
+ *
+ * @template T - The type of the arguments array.
+ * @param {(...args: T) => boolean} predicate - The predicate to negate.
+ * @returns {(...args: T) => boolean} The new negated function.
+ *
+ * @example
+ * function isEven(n) {
+ *   return n % 2 == 0;
+ * }
+ *
+ * filter([1, 2, 3, 4, 5, 6], negate(isEven));
+ * // => [1, 3, 5]
+ */
+declare function negate<T extends any[]>(predicate: (...args: T) => boolean): (...args: T) => boolean;
+
+export { negate };
Index: node_modules/es-toolkit/dist/compat/function/negate.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/negate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/negate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Creates a function that negates the result of the predicate function.
+ *
+ * @template T - The type of the arguments array.
+ * @param {(...args: T) => boolean} predicate - The predicate to negate.
+ * @returns {(...args: T) => boolean} The new negated function.
+ *
+ * @example
+ * function isEven(n) {
+ *   return n % 2 == 0;
+ * }
+ *
+ * filter([1, 2, 3, 4, 5, 6], negate(isEven));
+ * // => [1, 3, 5]
+ */
+declare function negate<T extends any[]>(predicate: (...args: T) => boolean): (...args: T) => boolean;
+
+export { negate };
Index: node_modules/es-toolkit/dist/compat/function/negate.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/negate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/negate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function negate(func) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    return function (...args) {
+        return !func.apply(this, args);
+    };
+}
+
+exports.negate = negate;
Index: node_modules/es-toolkit/dist/compat/function/negate.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/negate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/negate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+function negate(func) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    return function (...args) {
+        return !func.apply(this, args);
+    };
+}
+
+export { negate };
Index: node_modules/es-toolkit/dist/compat/function/noop.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/noop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/noop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+/**
+ * A no-operation function that does nothing.
+ * This can be used as a placeholder or default function.
+ *
+ * @example
+ * noop(); // Does nothing
+ *
+ * @returns {void} This function does not return anything.
+ */
+declare function noop(..._: any[]): void;
+
+export { noop };
Index: node_modules/es-toolkit/dist/compat/function/noop.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/noop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/noop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+/**
+ * A no-operation function that does nothing.
+ * This can be used as a placeholder or default function.
+ *
+ * @example
+ * noop(); // Does nothing
+ *
+ * @returns {void} This function does not return anything.
+ */
+declare function noop(..._: any[]): void;
+
+export { noop };
Index: node_modules/es-toolkit/dist/compat/function/noop.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function noop(..._) { }
+
+exports.noop = noop;
Index: node_modules/es-toolkit/dist/compat/function/noop.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/noop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/noop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+function noop(..._) { }
+
+export { noop };
Index: node_modules/es-toolkit/dist/compat/function/nthArg.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/nthArg.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/nthArg.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Creates a function that gets the argument at index `n`. If `n` is negative, the nth argument from the end is returned.
+ *
+ * @param {number} [n=0] - The index of the argument to return.
+ * @returns {(...args: any[]) => any} Returns the new function.
+ *
+ * @example
+ * var func = nthArg(1);
+ * func('a', 'b', 'c', 'd');
+ * // => 'b'
+ *
+ * var func = nthArg(-2);
+ * func('a', 'b', 'c', 'd');
+ * // => 'c'
+ */
+declare function nthArg(n?: number): (...args: any[]) => any;
+
+export { nthArg };
Index: node_modules/es-toolkit/dist/compat/function/nthArg.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/nthArg.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/nthArg.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Creates a function that gets the argument at index `n`. If `n` is negative, the nth argument from the end is returned.
+ *
+ * @param {number} [n=0] - The index of the argument to return.
+ * @returns {(...args: any[]) => any} Returns the new function.
+ *
+ * @example
+ * var func = nthArg(1);
+ * func('a', 'b', 'c', 'd');
+ * // => 'b'
+ *
+ * var func = nthArg(-2);
+ * func('a', 'b', 'c', 'd');
+ * // => 'c'
+ */
+declare function nthArg(n?: number): (...args: any[]) => any;
+
+export { nthArg };
Index: node_modules/es-toolkit/dist/compat/function/nthArg.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/nthArg.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/nthArg.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toInteger = require('../util/toInteger.js');
+
+function nthArg(n = 0) {
+    return function (...args) {
+        return args.at(toInteger.toInteger(n));
+    };
+}
+
+exports.nthArg = nthArg;
Index: node_modules/es-toolkit/dist/compat/function/nthArg.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/nthArg.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/nthArg.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { toInteger } from '../util/toInteger.mjs';
+
+function nthArg(n = 0) {
+    return function (...args) {
+        return args.at(toInteger(n));
+    };
+}
+
+export { nthArg };
Index: node_modules/es-toolkit/dist/compat/function/once.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/once.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/once.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+declare function once<T extends (...args: any) => any>(func: T): T;
+
+export { once };
Index: node_modules/es-toolkit/dist/compat/function/once.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/once.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/once.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+declare function once<T extends (...args: any) => any>(func: T): T;
+
+export { once };
Index: node_modules/es-toolkit/dist/compat/function/once.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/once.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/once.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const once$1 = require('../../function/once.js');
+
+function once(func) {
+    return once$1.once(func);
+}
+
+exports.once = once;
Index: node_modules/es-toolkit/dist/compat/function/once.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/once.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/once.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { once as once$1 } from '../../function/once.mjs';
+
+function once(func) {
+    return once$1(func);
+}
+
+export { once };
Index: node_modules/es-toolkit/dist/compat/function/overArgs.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/overArgs.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/overArgs.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+import { Many } from '../_internal/Many.mjs';
+
+/**
+ * Creates a function that invokes `func` with its arguments transformed by corresponding transform functions.
+ *
+ * Transform functions can be:
+ * - Functions that accept and return a value
+ * - Property names (strings) to get a property value from each argument
+ * - Objects to check if arguments match the object properties
+ * - Arrays of [property, value] to check if argument properties match values
+ *
+ * If a transform is nullish, the identity function is used instead.
+ * Only transforms arguments up to the number of transform functions provided.
+ *
+ * @template F - The type of the function to wrap
+ * @template T - The type of the transform functions array
+ * @param {F} func - The function to wrap
+ * @param {T} transforms - The functions to transform arguments. Each transform can be:
+ *   - A function that accepts and returns a value
+ *   - A string to get a property value (e.g. 'name' gets the name property)
+ *   - An object to check if arguments match its properties
+ *   - An array of [property, value] to check property matches
+ * @returns {(...args: any[]) => ReturnType<F>} A new function that transforms arguments before passing them to func
+ * @throws {TypeError} If func is not a function.
+ * @example
+ * ```ts
+ * function doubled(n: number) {
+ *   return n * 2;
+ * }
+ *
+ * function square(n: number) {
+ *   return n * n;
+ * }
+ *
+ * const func = overArgs((x, y) => [x, y], [doubled, square]);
+ *
+ * func(5, 3);
+ * // => [10, 9]
+ *
+ * // With property shorthand
+ * const user = { name: 'John', age: 30 };
+ * const getUserInfo = overArgs(
+ *   (name, age) => `${name} is ${age} years old`,
+ *   ['name', 'age']
+ * );
+ * getUserInfo(user, user);
+ * // => "John is 30 years old"
+ * ```
+ */
+declare function overArgs(func: (...args: any[]) => any, ..._transforms: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
+
+export { overArgs };
Index: node_modules/es-toolkit/dist/compat/function/overArgs.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/overArgs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/overArgs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+import { Many } from '../_internal/Many.js';
+
+/**
+ * Creates a function that invokes `func` with its arguments transformed by corresponding transform functions.
+ *
+ * Transform functions can be:
+ * - Functions that accept and return a value
+ * - Property names (strings) to get a property value from each argument
+ * - Objects to check if arguments match the object properties
+ * - Arrays of [property, value] to check if argument properties match values
+ *
+ * If a transform is nullish, the identity function is used instead.
+ * Only transforms arguments up to the number of transform functions provided.
+ *
+ * @template F - The type of the function to wrap
+ * @template T - The type of the transform functions array
+ * @param {F} func - The function to wrap
+ * @param {T} transforms - The functions to transform arguments. Each transform can be:
+ *   - A function that accepts and returns a value
+ *   - A string to get a property value (e.g. 'name' gets the name property)
+ *   - An object to check if arguments match its properties
+ *   - An array of [property, value] to check property matches
+ * @returns {(...args: any[]) => ReturnType<F>} A new function that transforms arguments before passing them to func
+ * @throws {TypeError} If func is not a function.
+ * @example
+ * ```ts
+ * function doubled(n: number) {
+ *   return n * 2;
+ * }
+ *
+ * function square(n: number) {
+ *   return n * n;
+ * }
+ *
+ * const func = overArgs((x, y) => [x, y], [doubled, square]);
+ *
+ * func(5, 3);
+ * // => [10, 9]
+ *
+ * // With property shorthand
+ * const user = { name: 'John', age: 30 };
+ * const getUserInfo = overArgs(
+ *   (name, age) => `${name} is ${age} years old`,
+ *   ['name', 'age']
+ * );
+ * getUserInfo(user, user);
+ * // => "John is 30 years old"
+ * ```
+ */
+declare function overArgs(func: (...args: any[]) => any, ..._transforms: Array<Many<(...args: any[]) => any>>): (...args: any[]) => any;
+
+export { overArgs };
Index: node_modules/es-toolkit/dist/compat/function/overArgs.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/overArgs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/overArgs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const iteratee = require('../util/iteratee.js');
+
+function overArgs(func, ..._transforms) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    const transforms = _transforms.flat();
+    return function (...args) {
+        const length = Math.min(args.length, transforms.length);
+        const transformedArgs = [...args];
+        for (let i = 0; i < length; i++) {
+            const transform = iteratee.iteratee(transforms[i] ?? identity.identity);
+            transformedArgs[i] = transform.call(this, args[i]);
+        }
+        return func.apply(this, transformedArgs);
+    };
+}
+
+exports.overArgs = overArgs;
Index: node_modules/es-toolkit/dist/compat/function/overArgs.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/overArgs.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/overArgs.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { identity } from '../../function/identity.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function overArgs(func, ..._transforms) {
+    if (typeof func !== 'function') {
+        throw new TypeError('Expected a function');
+    }
+    const transforms = _transforms.flat();
+    return function (...args) {
+        const length = Math.min(args.length, transforms.length);
+        const transformedArgs = [...args];
+        for (let i = 0; i < length; i++) {
+            const transform = iteratee(transforms[i] ?? identity);
+            transformedArgs[i] = transform.call(this, args[i]);
+        }
+        return func.apply(this, transformedArgs);
+    };
+}
+
+export { overArgs };
Index: node_modules/es-toolkit/dist/compat/function/partial.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/partial.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/partial.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,204 @@
+import { Toolkit } from '../toolkit.mjs';
+
+type __ = Placeholder | Toolkit;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}`;
+ * const sayHello = partial(greet, _, 'world');
+ * console.log(sayHello('Hello')); // => 'Hello world'
+ */
+declare function partial<T1, T2, R>(func: (t1: T1, t2: T2) => R, plc1: __, arg2: T2): (t1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const calculate = (x: number, y: number, z: number) => x + y + z;
+ * const addToY = partial(calculate, _, 2);
+ * console.log(addToY(1, 3)); // => 6
+ */
+declare function partial<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, plc1: __, arg2: T2): (t1: T1, t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const calculate = (x: number, y: number, z: number) => x + y + z;
+ * const addZ = partial(calculate, _, _, 3);
+ * console.log(addZ(1, 2)); // => 6
+ */
+declare function partial<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, plc1: __, plc2: __, arg3: T3): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const calculate = (x: number, y: number, z: number) => x + y + z;
+ * const withXandZ = partial(calculate, 1, _, 3);
+ * console.log(withXandZ(2)); // => 6
+ */
+declare function partial<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, plc2: __, arg3: T3): (t2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const calculate = (x: number, y: number, z: number) => x + y + z;
+ * const withYandZ = partial(calculate, _, 2, 3);
+ * console.log(withYandZ(1)); // => 6
+ */
+declare function partial<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, plc1: __, arg2: T2, arg3: T3): (t1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withB = partial(format, _, 'b');
+ * console.log(withB('a', 'c', 'd')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, arg2: T2): (t1: T1, t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withC = partial(format, _, _, 'c');
+ * console.log(withC('a', 'b', 'd')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, plc2: __, arg3: T3): (t1: T1, t2: T2, t4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withAandC = partial(format, 'a', _, 'c');
+ * console.log(withAandC('b', 'd')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, arg3: T3): (t2: T2, t4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withBandC = partial(format, _, 'b', 'c');
+ * console.log(withBandC('a', 'd')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, arg2: T2, arg3: T3): (t1: T1, t4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withD = partial(format, _, _, _, 'd');
+ * console.log(withD('a', 'b', 'c')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, plc2: __, plc3: __, arg4: T4): (t1: T1, t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withAandD = partial(format, 'a', _, _, 'd');
+ * console.log(withAandD('b', 'c')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, plc3: __, arg4: T4): (t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withBandD = partial(format, _, 'b', _, 'd');
+ * console.log(withBandD('a', 'c')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, arg2: T2, plc3: __, arg4: T4): (t1: T1, t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withABandD = partial(format, 'a', 'b', _, 'd');
+ * console.log(withABandD('c')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, plc3: __, arg4: T4): (t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withCandD = partial(format, _, _, 'c', 'd');
+ * console.log(withCandD('a', 'b')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, plc2: __, arg3: T3, arg4: T4): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withACandD = partial(format, 'a', _, 'c', 'd');
+ * console.log(withACandD('b')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, arg3: T3, arg4: T4): (t2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withBCandD = partial(format, _, 'b', 'c', 'd');
+ * console.log(withBCandD('a')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, arg2: T2, arg3: T3, arg4: T4): (t1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const sum = (...numbers: number[]) => numbers.reduce((a, b) => a + b, 0);
+ * const partialSum = partial(sum);
+ * console.log(partialSum(1, 2, 3)); // => 6
+ */
+declare function partial<TS extends any[], R>(func: (...ts: TS) => R): (...ts: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const log = (prefix: string, ...messages: string[]) => console.log(prefix, ...messages);
+ * const debugLog = partial(log, '[DEBUG]');
+ * debugLog('message 1', 'message 2'); // => '[DEBUG] message 1 message 2'
+ */
+declare function partial<TS extends any[], T1, R>(func: (t1: T1, ...ts: TS) => R, arg1: T1): (...ts: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (prefix: string, separator: string, ...messages: string[]) => `${prefix}${messages.join(separator)}`;
+ * const logWithPrefix = partial(format, '[LOG]', ' - ');
+ * console.log(logWithPrefix('msg1', 'msg2')); // => '[LOG]msg1 - msg2'
+ */
+declare function partial<TS extends any[], T1, T2, R>(func: (t1: T1, t2: T2, ...ts: TS) => R, t1: T1, t2: T2): (...ts: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (type: string, level: string, message: string, ...tags: string[]) =>
+ *   `[${type}][${level}] ${message} ${tags.join(',')}`;
+ * const errorLog = partial(format, 'ERROR', 'HIGH', 'Something went wrong');
+ * console.log(errorLog('critical', 'urgent')); // => '[ERROR][HIGH] Something went wrong critical,urgent'
+ */
+declare function partial<TS extends any[], T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3, ...ts: TS) => R, t1: T1, t2: T2, t3: T3): (...ts: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string, ...rest: string[]) =>
+ *   `${a}-${b}-${c}-${d}:${rest.join(',')}`;
+ * const prefixedFormat = partial(format, 'a', 'b', 'c', 'd');
+ * console.log(prefixedFormat('e', 'f')); // => 'a-b-c-d:e,f'
+ */
+declare function partial<TS extends any[], T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, ...ts: TS) => R, t1: T1, t2: T2, t3: T3, t4: T4): (...ts: TS) => R;
+declare namespace partial {
+    var placeholder: Placeholder;
+}
+type Placeholder = symbol | (((value: any) => any) & {
+    partial: typeof partial;
+});
+
+export { partial };
Index: node_modules/es-toolkit/dist/compat/function/partial.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/partial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/partial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,204 @@
+import { Toolkit } from '../toolkit.js';
+
+type __ = Placeholder | Toolkit;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}`;
+ * const sayHello = partial(greet, _, 'world');
+ * console.log(sayHello('Hello')); // => 'Hello world'
+ */
+declare function partial<T1, T2, R>(func: (t1: T1, t2: T2) => R, plc1: __, arg2: T2): (t1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const calculate = (x: number, y: number, z: number) => x + y + z;
+ * const addToY = partial(calculate, _, 2);
+ * console.log(addToY(1, 3)); // => 6
+ */
+declare function partial<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, plc1: __, arg2: T2): (t1: T1, t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const calculate = (x: number, y: number, z: number) => x + y + z;
+ * const addZ = partial(calculate, _, _, 3);
+ * console.log(addZ(1, 2)); // => 6
+ */
+declare function partial<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, plc1: __, plc2: __, arg3: T3): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const calculate = (x: number, y: number, z: number) => x + y + z;
+ * const withXandZ = partial(calculate, 1, _, 3);
+ * console.log(withXandZ(2)); // => 6
+ */
+declare function partial<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, plc2: __, arg3: T3): (t2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const calculate = (x: number, y: number, z: number) => x + y + z;
+ * const withYandZ = partial(calculate, _, 2, 3);
+ * console.log(withYandZ(1)); // => 6
+ */
+declare function partial<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, plc1: __, arg2: T2, arg3: T3): (t1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withB = partial(format, _, 'b');
+ * console.log(withB('a', 'c', 'd')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, arg2: T2): (t1: T1, t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withC = partial(format, _, _, 'c');
+ * console.log(withC('a', 'b', 'd')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, plc2: __, arg3: T3): (t1: T1, t2: T2, t4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withAandC = partial(format, 'a', _, 'c');
+ * console.log(withAandC('b', 'd')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, arg3: T3): (t2: T2, t4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withBandC = partial(format, _, 'b', 'c');
+ * console.log(withBandC('a', 'd')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, arg2: T2, arg3: T3): (t1: T1, t4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withD = partial(format, _, _, _, 'd');
+ * console.log(withD('a', 'b', 'c')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, plc2: __, plc3: __, arg4: T4): (t1: T1, t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withAandD = partial(format, 'a', _, _, 'd');
+ * console.log(withAandD('b', 'c')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, plc3: __, arg4: T4): (t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withBandD = partial(format, _, 'b', _, 'd');
+ * console.log(withBandD('a', 'c')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, arg2: T2, plc3: __, arg4: T4): (t1: T1, t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withABandD = partial(format, 'a', 'b', _, 'd');
+ * console.log(withABandD('c')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, plc3: __, arg4: T4): (t3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withCandD = partial(format, _, _, 'c', 'd');
+ * console.log(withCandD('a', 'b')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, plc2: __, arg3: T3, arg4: T4): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withACandD = partial(format, 'a', _, 'c', 'd');
+ * console.log(withACandD('b')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, arg3: T3, arg4: T4): (t2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string) => `${a}-${b}-${c}-${d}`;
+ * const withBCandD = partial(format, _, 'b', 'c', 'd');
+ * console.log(withBCandD('a')); // => 'a-b-c-d'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, plc1: __, arg2: T2, arg3: T3, arg4: T4): (t1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const sum = (...numbers: number[]) => numbers.reduce((a, b) => a + b, 0);
+ * const partialSum = partial(sum);
+ * console.log(partialSum(1, 2, 3)); // => 6
+ */
+declare function partial<TS extends any[], R>(func: (...ts: TS) => R): (...ts: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const log = (prefix: string, ...messages: string[]) => console.log(prefix, ...messages);
+ * const debugLog = partial(log, '[DEBUG]');
+ * debugLog('message 1', 'message 2'); // => '[DEBUG] message 1 message 2'
+ */
+declare function partial<TS extends any[], T1, R>(func: (t1: T1, ...ts: TS) => R, arg1: T1): (...ts: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (prefix: string, separator: string, ...messages: string[]) => `${prefix}${messages.join(separator)}`;
+ * const logWithPrefix = partial(format, '[LOG]', ' - ');
+ * console.log(logWithPrefix('msg1', 'msg2')); // => '[LOG]msg1 - msg2'
+ */
+declare function partial<TS extends any[], T1, T2, R>(func: (t1: T1, t2: T2, ...ts: TS) => R, t1: T1, t2: T2): (...ts: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (type: string, level: string, message: string, ...tags: string[]) =>
+ *   `[${type}][${level}] ${message} ${tags.join(',')}`;
+ * const errorLog = partial(format, 'ERROR', 'HIGH', 'Something went wrong');
+ * console.log(errorLog('critical', 'urgent')); // => '[ERROR][HIGH] Something went wrong critical,urgent'
+ */
+declare function partial<TS extends any[], T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3, ...ts: TS) => R, t1: T1, t2: T2, t3: T3): (...ts: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * @example
+ * const format = (a: string, b: string, c: string, d: string, ...rest: string[]) =>
+ *   `${a}-${b}-${c}-${d}:${rest.join(',')}`;
+ * const prefixedFormat = partial(format, 'a', 'b', 'c', 'd');
+ * console.log(prefixedFormat('e', 'f')); // => 'a-b-c-d:e,f'
+ */
+declare function partial<TS extends any[], T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4, ...ts: TS) => R, t1: T1, t2: T2, t3: T3, t4: T4): (...ts: TS) => R;
+declare namespace partial {
+    var placeholder: Placeholder;
+}
+type Placeholder = symbol | (((value: any) => any) & {
+    partial: typeof partial;
+});
+
+export { partial };
Index: node_modules/es-toolkit/dist/compat/function/partial.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/partial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/partial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const partial$1 = require('../../function/partial.js');
+
+function partial(func, ...partialArgs) {
+    return partial$1.partialImpl(func, partial.placeholder, ...partialArgs);
+}
+partial.placeholder = Symbol('compat.partial.placeholder');
+
+exports.partial = partial;
Index: node_modules/es-toolkit/dist/compat/function/partial.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/partial.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/partial.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { partialImpl } from '../../function/partial.mjs';
+
+function partial(func, ...partialArgs) {
+    return partialImpl(func, partial.placeholder, ...partialArgs);
+}
+partial.placeholder = Symbol('compat.partial.placeholder');
+
+export { partial };
Index: node_modules/es-toolkit/dist/compat/function/partialRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/partialRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/partialRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,622 @@
+import { Toolkit } from '../toolkit.mjs';
+
+type __ = Placeholder | Toolkit;
+/**
+ * Creates a function that invokes the provided function with no arguments.
+ *
+ * @template R The return type of the function
+ * @param {() => R} func The function to partially apply
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = () => 'Hello!';
+ * const sayHello = partialRight(greet);
+ * sayHello(); // => 'Hello!'
+ */
+declare function partialRight<R>(func: () => R): () => R;
+/**
+ * Creates a function that invokes the provided function with one argument.
+ *
+ * @template T The type of the argument
+ * @template R The return type of the function
+ * @param {(t1: T) => R} func The function to partially apply
+ * @returns {(t1: T) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (name: string) => `Hello ${name}!`;
+ * const greetPerson = partialRight(greet);
+ * greetPerson('Fred'); // => 'Hello Fred!'
+ */
+declare function partialRight<T, R>(func: (t1: T) => R): (t1: T) => R;
+/**
+ * Creates a function that invokes the provided function with one argument pre-filled.
+ *
+ * @template T The type of the argument
+ * @template R The return type of the function
+ * @param {(t1: T) => R} func The function to partially apply
+ * @param {T} arg1 The argument to pre-fill
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (name: string) => `Hello ${name}!`;
+ * const greetFred = partialRight(greet, 'Fred');
+ * greetFred(); // => 'Hello Fred!'
+ */
+declare function partialRight<T, R>(func: (t1: T) => R, arg1: T): () => R;
+/**
+ * Creates a function that invokes the provided function with two arguments.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2) => R} func The function to partially apply
+ * @returns {(t1: T1, t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}!`;
+ * const greetWithParams = partialRight(greet);
+ * greetWithParams('Hi', 'Fred'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, R>(func: (t1: T1, t2: T2) => R): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with one argument pre-filled and a placeholder.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2) => R} func The function to partially apply
+ * @param {T1} arg1 The argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @returns {(t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}!`;
+ * const hiWithName = partialRight(greet, 'Hi', partialRight.placeholder);
+ * hiWithName('Fred'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, R>(func: (t1: T1, t2: T2) => R, arg1: T1, plc2: __): (t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the second argument pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2) => R} func The function to partially apply
+ * @param {T2} arg2 The argument to pre-fill
+ * @returns {(t1: T1) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}!`;
+ * const greetFred = partialRight(greet, 'Fred');
+ * greetFred('Hi'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, R>(func: (t1: T1, t2: T2) => R, arg2: T2): (t1: T1) => R;
+/**
+ * Creates a function that invokes the provided function with both arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}!`;
+ * const sayHiToFred = partialRight(greet, 'Hi', 'Fred');
+ * sayHiToFred(); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, R>(func: (t1: T1, t2: T2) => R, arg1: T1, arg2: T2): () => R;
+/**
+ * Creates a function that invokes the provided function with no pre-filled arguments.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @returns {(t1: T1, t2: T2, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const greetWithArgs = partialRight(greet);
+ * greetWithArgs('Hi', 'Fred', '!'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R): (t1: T1, t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the first argument pre-filled and placeholders for the rest.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {__} plc3 The placeholder for the third argument
+ * @returns {(t2: T2, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const hiWithNameAndPunc = partialRight(greet, 'Hi', partialRight.placeholder, partialRight.placeholder);
+ * hiWithNameAndPunc('Fred', '!'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, plc2: __, plc3: __): (t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the second argument pre-filled and a placeholder for the third.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @returns {(t1: T1, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const greetFredWithPunc = partialRight(greet, 'Fred', partialRight.placeholder);
+ * greetFredWithPunc('Hi', '!'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg2: T2, plc3: __): (t1: T1, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the first two arguments pre-filled and a placeholder for the third.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @returns {(t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const hiToFredWithPunc = partialRight(greet, 'Hi', 'Fred', partialRight.placeholder);
+ * hiToFredWithPunc('!'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, arg2: T2, plc3: __): (t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the third argument pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T3} arg3 The third argument to pre-fill
+ * @returns {(t1: T1, t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const greetWithExclamation = partialRight(greet, '!');
+ * greetWithExclamation('Hi', 'Fred'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg3: T3): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the first and third arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {T3} arg3 The third argument to pre-fill
+ * @returns {(t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const hiWithNameAndExclamation = partialRight(greet, 'Hi', partialRight.placeholder, '!');
+ * hiWithNameAndExclamation('Fred'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, plc2: __, arg3: T3): (t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the second and third arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @returns {(t1: T1) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const greetFredWithExclamation = partialRight(greet, 'Fred', '!');
+ * greetFredWithExclamation('Hi'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg2: T2, arg3: T3): (t1: T1) => R;
+/**
+ * Creates a function that invokes the provided function with all three arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const sayHiToFredWithExclamation = partialRight(greet, 'Hi', 'Fred', '!');
+ * sayHiToFredWithExclamation(); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, arg2: T2, arg3: T3): () => R;
+/**
+ * Creates a function that invokes the provided function with no pre-filled arguments.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @returns {(t1: T1, t2: T2, t3: T3, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const formatWithArgs = partialRight(format);
+ * formatWithArgs('Hi', 'Fred', 'morning', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): (t1: T1, t2: T2, t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the first argument pre-filled and placeholders for the rest.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t2: T2, t3: T3, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiWithRest = partialRight(format, 'Hi', partialRight.placeholder, partialRight.placeholder, partialRight.placeholder);
+ * hiWithRest('Fred', 'morning', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, plc3: __, plc4: __): (t2: T2, t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the second argument pre-filled and placeholders for the rest.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t1: T1, t3: T3, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const greetFredWithRest = partialRight(format, 'Fred', partialRight.placeholder, partialRight.placeholder);
+ * greetFredWithRest('Hi', 'morning', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg2: T2, plc3: __, plc4: __): (t1: T1, t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the first two arguments pre-filled and placeholders for the rest.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t3: T3, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiToFredWithRest = partialRight(format, 'Hi', 'Fred', partialRight.placeholder, partialRight.placeholder);
+ * hiToFredWithRest('morning', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, plc3: __, plc4: __): (t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the third argument pre-filled and a placeholder for the fourth.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t1: T1, t2: T2, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const atMorningWithPunc = partialRight(format, 'morning', partialRight.placeholder);
+ * atMorningWithPunc('Hi', 'Fred', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg3: T3, plc4: __): (t1: T1, t2: T2, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the first and third arguments pre-filled and a placeholder for the fourth.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t2: T2, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiAtMorningWithNameAndPunc = partialRight(format, 'Hi', partialRight.placeholder, 'morning', partialRight.placeholder);
+ * hiAtMorningWithNameAndPunc('Fred', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, arg3: T3, plc4: __): (t2: T2, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the second and third arguments pre-filled and a placeholder for the fourth.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t1: T1, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const greetFredAtMorningWithPunc = partialRight(format, 'Fred', 'morning', partialRight.placeholder);
+ * greetFredAtMorningWithPunc('Hi', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg2: T2, arg3: T3, plc4: __): (t1: T1, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the first three arguments pre-filled and a placeholder for the fourth.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiToFredAtMorningWithPunc = partialRight(format, 'Hi', 'Fred', 'morning', partialRight.placeholder);
+ * hiToFredAtMorningWithPunc('!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, arg3: T3, plc4: __): (t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the fourth argument pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t1: T1, t2: T2, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const withExclamation = partialRight(format, '!');
+ * withExclamation('Hi', 'Fred', 'morning'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg4: T4): (t1: T1, t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the first and fourth arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t2: T2, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiWithExclamation = partialRight(format, 'Hi', partialRight.placeholder, partialRight.placeholder, '!');
+ * hiWithExclamation('Fred', 'morning'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, plc3: __, arg4: T4): (t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the second and fourth arguments pre-filled and a placeholder for the third.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t1: T1, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const greetFredWithTime = partialRight(format, 'Fred', partialRight.placeholder, '!');
+ * greetFredWithTime('Hi', 'morning'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg2: T2, plc3: __, arg4: T4): (t1: T1, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the first, second and fourth arguments pre-filled and a placeholder for the third.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiToFredWithTime = partialRight(format, 'Hi', 'Fred', partialRight.placeholder, '!');
+ * hiToFredWithTime('morning'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, plc3: __, arg4: T4): (t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the third and fourth arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t1: T1, t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const inMorningWithExclamation = partialRight(format, 'morning', '!');
+ * inMorningWithExclamation('Hi', 'Fred'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg3: T3, arg4: T4): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the first, third and fourth arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiInMorningWithExclamation = partialRight(format, 'Hi', partialRight.placeholder, 'morning', '!');
+ * hiInMorningWithExclamation('Fred'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, arg3: T3, arg4: T4): (t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the second, third and fourth arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t1: T1) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const greetFredInMorningWithExclamation = partialRight(format, 'Fred', 'morning', '!');
+ * greetFredInMorningWithExclamation('Hi'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg2: T2, arg3: T3, arg4: T4): (t1: T1) => R;
+/**
+ * Creates a function that invokes the provided function with all arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const sayHiToFredInMorningWithExclamation = partialRight(format, 'Hi', 'Fred', 'morning', '!');
+ * sayHiToFredInMorningWithExclamation(); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, arg3: T3, arg4: T4): () => R;
+/**
+ * Creates a function that invokes the provided function with partially applied arguments appended to the arguments it receives.
+ * The partialRight.placeholder value can be used as a placeholder for partially applied arguments.
+ *
+ * @template F The type of the function to partially apply
+ * @param {F} func The function to partially apply arguments to
+ * @param {...any[]} args The arguments to be partially applied
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new partially applied function
+ *
+ * @example
+ * function greet(greeting: string, name: string) {
+ *   return greeting + ' ' + name;
+ * }
+ *
+ * const greetFred = partialRight(greet, 'Fred');
+ * greetFred('Hi'); // => 'Hi Fred'
+ *
+ * // Using placeholders
+ * const sayHelloTo = partialRight(greet, 'Hello', partialRight.placeholder);
+ * sayHelloTo('Fred'); // => 'Hello Fred'
+ */
+declare function partialRight(func: (...args: any[]) => any, ...args: any[]): (...args: any[]) => any;
+declare namespace partialRight {
+    var placeholder: Placeholder;
+}
+type Placeholder = symbol | (((value: any) => any) & {
+    partialRight: typeof partialRight;
+});
+
+export { partialRight };
Index: node_modules/es-toolkit/dist/compat/function/partialRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/partialRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/partialRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,622 @@
+import { Toolkit } from '../toolkit.js';
+
+type __ = Placeholder | Toolkit;
+/**
+ * Creates a function that invokes the provided function with no arguments.
+ *
+ * @template R The return type of the function
+ * @param {() => R} func The function to partially apply
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = () => 'Hello!';
+ * const sayHello = partialRight(greet);
+ * sayHello(); // => 'Hello!'
+ */
+declare function partialRight<R>(func: () => R): () => R;
+/**
+ * Creates a function that invokes the provided function with one argument.
+ *
+ * @template T The type of the argument
+ * @template R The return type of the function
+ * @param {(t1: T) => R} func The function to partially apply
+ * @returns {(t1: T) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (name: string) => `Hello ${name}!`;
+ * const greetPerson = partialRight(greet);
+ * greetPerson('Fred'); // => 'Hello Fred!'
+ */
+declare function partialRight<T, R>(func: (t1: T) => R): (t1: T) => R;
+/**
+ * Creates a function that invokes the provided function with one argument pre-filled.
+ *
+ * @template T The type of the argument
+ * @template R The return type of the function
+ * @param {(t1: T) => R} func The function to partially apply
+ * @param {T} arg1 The argument to pre-fill
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (name: string) => `Hello ${name}!`;
+ * const greetFred = partialRight(greet, 'Fred');
+ * greetFred(); // => 'Hello Fred!'
+ */
+declare function partialRight<T, R>(func: (t1: T) => R, arg1: T): () => R;
+/**
+ * Creates a function that invokes the provided function with two arguments.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2) => R} func The function to partially apply
+ * @returns {(t1: T1, t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}!`;
+ * const greetWithParams = partialRight(greet);
+ * greetWithParams('Hi', 'Fred'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, R>(func: (t1: T1, t2: T2) => R): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with one argument pre-filled and a placeholder.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2) => R} func The function to partially apply
+ * @param {T1} arg1 The argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @returns {(t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}!`;
+ * const hiWithName = partialRight(greet, 'Hi', partialRight.placeholder);
+ * hiWithName('Fred'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, R>(func: (t1: T1, t2: T2) => R, arg1: T1, plc2: __): (t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the second argument pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2) => R} func The function to partially apply
+ * @param {T2} arg2 The argument to pre-fill
+ * @returns {(t1: T1) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}!`;
+ * const greetFred = partialRight(greet, 'Fred');
+ * greetFred('Hi'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, R>(func: (t1: T1, t2: T2) => R, arg2: T2): (t1: T1) => R;
+/**
+ * Creates a function that invokes the provided function with both arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting} ${name}!`;
+ * const sayHiToFred = partialRight(greet, 'Hi', 'Fred');
+ * sayHiToFred(); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, R>(func: (t1: T1, t2: T2) => R, arg1: T1, arg2: T2): () => R;
+/**
+ * Creates a function that invokes the provided function with no pre-filled arguments.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @returns {(t1: T1, t2: T2, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const greetWithArgs = partialRight(greet);
+ * greetWithArgs('Hi', 'Fred', '!'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R): (t1: T1, t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the first argument pre-filled and placeholders for the rest.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {__} plc3 The placeholder for the third argument
+ * @returns {(t2: T2, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const hiWithNameAndPunc = partialRight(greet, 'Hi', partialRight.placeholder, partialRight.placeholder);
+ * hiWithNameAndPunc('Fred', '!'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, plc2: __, plc3: __): (t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the second argument pre-filled and a placeholder for the third.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @returns {(t1: T1, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const greetFredWithPunc = partialRight(greet, 'Fred', partialRight.placeholder);
+ * greetFredWithPunc('Hi', '!'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg2: T2, plc3: __): (t1: T1, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the first two arguments pre-filled and a placeholder for the third.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @returns {(t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const hiToFredWithPunc = partialRight(greet, 'Hi', 'Fred', partialRight.placeholder);
+ * hiToFredWithPunc('!'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, arg2: T2, plc3: __): (t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the third argument pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T3} arg3 The third argument to pre-fill
+ * @returns {(t1: T1, t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const greetWithExclamation = partialRight(greet, '!');
+ * greetWithExclamation('Hi', 'Fred'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg3: T3): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the first and third arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {T3} arg3 The third argument to pre-fill
+ * @returns {(t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const hiWithNameAndExclamation = partialRight(greet, 'Hi', partialRight.placeholder, '!');
+ * hiWithNameAndExclamation('Fred'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, plc2: __, arg3: T3): (t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the second and third arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @returns {(t1: T1) => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const greetFredWithExclamation = partialRight(greet, 'Fred', '!');
+ * greetFredWithExclamation('Hi'); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg2: T2, arg3: T3): (t1: T1) => R;
+/**
+ * Creates a function that invokes the provided function with all three arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting} ${name}${punctuation}`;
+ * const sayHiToFredWithExclamation = partialRight(greet, 'Hi', 'Fred', '!');
+ * sayHiToFredWithExclamation(); // => 'Hi Fred!'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arg1: T1, arg2: T2, arg3: T3): () => R;
+/**
+ * Creates a function that invokes the provided function with no pre-filled arguments.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @returns {(t1: T1, t2: T2, t3: T3, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const formatWithArgs = partialRight(format);
+ * formatWithArgs('Hi', 'Fred', 'morning', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R): (t1: T1, t2: T2, t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the first argument pre-filled and placeholders for the rest.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t2: T2, t3: T3, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiWithRest = partialRight(format, 'Hi', partialRight.placeholder, partialRight.placeholder, partialRight.placeholder);
+ * hiWithRest('Fred', 'morning', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, plc3: __, plc4: __): (t2: T2, t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the second argument pre-filled and placeholders for the rest.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t1: T1, t3: T3, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const greetFredWithRest = partialRight(format, 'Fred', partialRight.placeholder, partialRight.placeholder);
+ * greetFredWithRest('Hi', 'morning', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg2: T2, plc3: __, plc4: __): (t1: T1, t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the first two arguments pre-filled and placeholders for the rest.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t3: T3, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiToFredWithRest = partialRight(format, 'Hi', 'Fred', partialRight.placeholder, partialRight.placeholder);
+ * hiToFredWithRest('morning', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, plc3: __, plc4: __): (t3: T3, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the third argument pre-filled and a placeholder for the fourth.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t1: T1, t2: T2, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const atMorningWithPunc = partialRight(format, 'morning', partialRight.placeholder);
+ * atMorningWithPunc('Hi', 'Fred', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg3: T3, plc4: __): (t1: T1, t2: T2, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the first and third arguments pre-filled and a placeholder for the fourth.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t2: T2, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiAtMorningWithNameAndPunc = partialRight(format, 'Hi', partialRight.placeholder, 'morning', partialRight.placeholder);
+ * hiAtMorningWithNameAndPunc('Fred', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, arg3: T3, plc4: __): (t2: T2, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the second and third arguments pre-filled and a placeholder for the fourth.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t1: T1, t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const greetFredAtMorningWithPunc = partialRight(format, 'Fred', 'morning', partialRight.placeholder);
+ * greetFredAtMorningWithPunc('Hi', '!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg2: T2, arg3: T3, plc4: __): (t1: T1, t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the first three arguments pre-filled and a placeholder for the fourth.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {__} plc4 The placeholder for the fourth argument
+ * @returns {(t4: T4) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiToFredAtMorningWithPunc = partialRight(format, 'Hi', 'Fred', 'morning', partialRight.placeholder);
+ * hiToFredAtMorningWithPunc('!'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, arg3: T3, plc4: __): (t4: T4) => R;
+/**
+ * Creates a function that invokes the provided function with the fourth argument pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t1: T1, t2: T2, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const withExclamation = partialRight(format, '!');
+ * withExclamation('Hi', 'Fred', 'morning'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg4: T4): (t1: T1, t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the first and fourth arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t2: T2, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiWithExclamation = partialRight(format, 'Hi', partialRight.placeholder, partialRight.placeholder, '!');
+ * hiWithExclamation('Fred', 'morning'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, plc3: __, arg4: T4): (t2: T2, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the second and fourth arguments pre-filled and a placeholder for the third.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t1: T1, t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const greetFredWithTime = partialRight(format, 'Fred', partialRight.placeholder, '!');
+ * greetFredWithTime('Hi', 'morning'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg2: T2, plc3: __, arg4: T4): (t1: T1, t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the first, second and fourth arguments pre-filled and a placeholder for the third.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {__} plc3 The placeholder for the third argument
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t3: T3) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiToFredWithTime = partialRight(format, 'Hi', 'Fred', partialRight.placeholder, '!');
+ * hiToFredWithTime('morning'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, plc3: __, arg4: T4): (t3: T3) => R;
+/**
+ * Creates a function that invokes the provided function with the third and fourth arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t1: T1, t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const inMorningWithExclamation = partialRight(format, 'morning', '!');
+ * inMorningWithExclamation('Hi', 'Fred'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg3: T3, arg4: T4): (t1: T1, t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the first, third and fourth arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {__} plc2 The placeholder for the second argument
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t2: T2) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const hiInMorningWithExclamation = partialRight(format, 'Hi', partialRight.placeholder, 'morning', '!');
+ * hiInMorningWithExclamation('Fred'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, plc2: __, arg3: T3, arg4: T4): (t2: T2) => R;
+/**
+ * Creates a function that invokes the provided function with the second, third and fourth arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {(t1: T1) => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const greetFredInMorningWithExclamation = partialRight(format, 'Fred', 'morning', '!');
+ * greetFredInMorningWithExclamation('Hi'); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg2: T2, arg3: T3, arg4: T4): (t1: T1) => R;
+/**
+ * Creates a function that invokes the provided function with all arguments pre-filled.
+ *
+ * @template T1 The type of the first argument
+ * @template T2 The type of the second argument
+ * @template T3 The type of the third argument
+ * @template T4 The type of the fourth argument
+ * @template R The return type of the function
+ * @param {(t1: T1, t2: T2, t3: T3, t4: T4) => R} func The function to partially apply
+ * @param {T1} arg1 The first argument to pre-fill
+ * @param {T2} arg2 The second argument to pre-fill
+ * @param {T3} arg3 The third argument to pre-fill
+ * @param {T4} arg4 The fourth argument to pre-fill
+ * @returns {() => R} Returns the new partially applied function
+ *
+ * @example
+ * const format = (greeting: string, name: string, time: string, punctuation: string) =>
+ *   `${greeting} ${name}, it's ${time}${punctuation}`;
+ * const sayHiToFredInMorningWithExclamation = partialRight(format, 'Hi', 'Fred', 'morning', '!');
+ * sayHiToFredInMorningWithExclamation(); // => 'Hi Fred, it's morning!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arg1: T1, arg2: T2, arg3: T3, arg4: T4): () => R;
+/**
+ * Creates a function that invokes the provided function with partially applied arguments appended to the arguments it receives.
+ * The partialRight.placeholder value can be used as a placeholder for partially applied arguments.
+ *
+ * @template F The type of the function to partially apply
+ * @param {F} func The function to partially apply arguments to
+ * @param {...any[]} args The arguments to be partially applied
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new partially applied function
+ *
+ * @example
+ * function greet(greeting: string, name: string) {
+ *   return greeting + ' ' + name;
+ * }
+ *
+ * const greetFred = partialRight(greet, 'Fred');
+ * greetFred('Hi'); // => 'Hi Fred'
+ *
+ * // Using placeholders
+ * const sayHelloTo = partialRight(greet, 'Hello', partialRight.placeholder);
+ * sayHelloTo('Fred'); // => 'Hello Fred'
+ */
+declare function partialRight(func: (...args: any[]) => any, ...args: any[]): (...args: any[]) => any;
+declare namespace partialRight {
+    var placeholder: Placeholder;
+}
+type Placeholder = symbol | (((value: any) => any) & {
+    partialRight: typeof partialRight;
+});
+
+export { partialRight };
Index: node_modules/es-toolkit/dist/compat/function/partialRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/partialRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/partialRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const partialRight$1 = require('../../function/partialRight.js');
+
+function partialRight(func, ...partialArgs) {
+    return partialRight$1.partialRightImpl(func, partialRight.placeholder, ...partialArgs);
+}
+partialRight.placeholder = Symbol('compat.partialRight.placeholder');
+
+exports.partialRight = partialRight;
Index: node_modules/es-toolkit/dist/compat/function/partialRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/partialRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/partialRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { partialRightImpl } from '../../function/partialRight.mjs';
+
+function partialRight(func, ...partialArgs) {
+    return partialRightImpl(func, partialRight.placeholder, ...partialArgs);
+}
+partialRight.placeholder = Symbol('compat.partialRight.placeholder');
+
+export { partialRight };
Index: node_modules/es-toolkit/dist/compat/function/rearg.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/rearg.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/rearg.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { Many } from '../_internal/Many.mjs';
+
+/**
+ * Creates a function that invokes `func` with arguments arranged according to the specified `indices`
+ * where the argument value at the first index is provided as the first argument,
+ * the argument value at the second index is provided as the second argument, and so on.
+ *
+ * @template F The type of the function to re-arrange.
+ * @param {F} func The function to rearrange arguments for.
+ * @param {Array<number | number[]>} indices The arranged argument indices.
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const rearrangedGreet = rearg(greet, 1, 0);
+ * console.log(rearrangedGreet('World', 'Hello')); // Output: "Hello, World!"
+ */
+declare function rearg(func: (...args: any[]) => any, ...indices: Array<Many<number>>): (...args: any[]) => any;
+
+export { rearg };
Index: node_modules/es-toolkit/dist/compat/function/rearg.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/rearg.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/rearg.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { Many } from '../_internal/Many.js';
+
+/**
+ * Creates a function that invokes `func` with arguments arranged according to the specified `indices`
+ * where the argument value at the first index is provided as the first argument,
+ * the argument value at the second index is provided as the second argument, and so on.
+ *
+ * @template F The type of the function to re-arrange.
+ * @param {F} func The function to rearrange arguments for.
+ * @param {Array<number | number[]>} indices The arranged argument indices.
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const rearrangedGreet = rearg(greet, 1, 0);
+ * console.log(rearrangedGreet('World', 'Hello')); // Output: "Hello, World!"
+ */
+declare function rearg(func: (...args: any[]) => any, ...indices: Array<Many<number>>): (...args: any[]) => any;
+
+export { rearg };
Index: node_modules/es-toolkit/dist/compat/function/rearg.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/rearg.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/rearg.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flatten = require('../array/flatten.js');
+
+function rearg(func, ...indices) {
+    const flattenIndices = flatten.flatten(indices);
+    return function (...args) {
+        const reorderedArgs = flattenIndices.map(i => args[i]).slice(0, args.length);
+        for (let i = reorderedArgs.length; i < args.length; i++) {
+            reorderedArgs.push(args[i]);
+        }
+        return func.apply(this, reorderedArgs);
+    };
+}
+
+exports.rearg = rearg;
Index: node_modules/es-toolkit/dist/compat/function/rearg.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/rearg.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/rearg.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { flatten } from '../array/flatten.mjs';
+
+function rearg(func, ...indices) {
+    const flattenIndices = flatten(indices);
+    return function (...args) {
+        const reorderedArgs = flattenIndices.map(i => args[i]).slice(0, args.length);
+        for (let i = reorderedArgs.length; i < args.length; i++) {
+            reorderedArgs.push(args[i]);
+        }
+        return func.apply(this, reorderedArgs);
+    };
+}
+
+export { rearg };
Index: node_modules/es-toolkit/dist/compat/function/rest.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/rest.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/rest.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Creates a function that transforms the arguments of the provided function `func`.
+ * The transformed arguments are passed to `func` such that the arguments starting from a specified index
+ * are grouped into an array, while the previous arguments are passed as individual elements.
+ *
+ * @template F - The type of the function being transformed.
+ * @param {F} func - The function whose arguments are to be transformed.
+ * @param {number} [start=func.length - 1] - The index from which to start grouping the remaining arguments into an array.
+ *                                            Defaults to `func.length - 1`, grouping all arguments after the last parameter.
+ * @returns {(...args: any[]) => ReturnType<F>} A new function that, when called, returns the result of calling `func` with the transformed arguments.
+ *
+ * The transformed arguments are:
+ * - The first `start` arguments as individual elements.
+ * - The remaining arguments from index `start` onward grouped into an array.
+ * @example
+ * function fn(a, b, c) {
+ *   return [a, b, c];
+ * }
+ *
+ * // Using default start index (func.length - 1, which is 2 in this case)
+ * const transformedFn = rest(fn);
+ * console.log(transformedFn(1, 2, 3, 4)); // [1, 2, [3, 4]]
+ *
+ * // Using start index 1
+ * const transformedFnWithStart = rest(fn, 1);
+ * console.log(transformedFnWithStart(1, 2, 3, 4)); // [1, [2, 3, 4]]
+ *
+ * // With fewer arguments than the start index
+ * console.log(transformedFn(1)); // [1, undefined, []]
+ */
+declare function rest(func: (...args: any[]) => any, start?: number): (...args: any[]) => any;
+
+export { rest };
Index: node_modules/es-toolkit/dist/compat/function/rest.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/rest.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/rest.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Creates a function that transforms the arguments of the provided function `func`.
+ * The transformed arguments are passed to `func` such that the arguments starting from a specified index
+ * are grouped into an array, while the previous arguments are passed as individual elements.
+ *
+ * @template F - The type of the function being transformed.
+ * @param {F} func - The function whose arguments are to be transformed.
+ * @param {number} [start=func.length - 1] - The index from which to start grouping the remaining arguments into an array.
+ *                                            Defaults to `func.length - 1`, grouping all arguments after the last parameter.
+ * @returns {(...args: any[]) => ReturnType<F>} A new function that, when called, returns the result of calling `func` with the transformed arguments.
+ *
+ * The transformed arguments are:
+ * - The first `start` arguments as individual elements.
+ * - The remaining arguments from index `start` onward grouped into an array.
+ * @example
+ * function fn(a, b, c) {
+ *   return [a, b, c];
+ * }
+ *
+ * // Using default start index (func.length - 1, which is 2 in this case)
+ * const transformedFn = rest(fn);
+ * console.log(transformedFn(1, 2, 3, 4)); // [1, 2, [3, 4]]
+ *
+ * // Using start index 1
+ * const transformedFnWithStart = rest(fn, 1);
+ * console.log(transformedFnWithStart(1, 2, 3, 4)); // [1, [2, 3, 4]]
+ *
+ * // With fewer arguments than the start index
+ * console.log(transformedFn(1)); // [1, undefined, []]
+ */
+declare function rest(func: (...args: any[]) => any, start?: number): (...args: any[]) => any;
+
+export { rest };
Index: node_modules/es-toolkit/dist/compat/function/rest.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/rest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/rest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const rest$1 = require('../../function/rest.js');
+
+function rest(func, start = func.length - 1) {
+    start = Number.parseInt(start, 10);
+    if (Number.isNaN(start) || start < 0) {
+        start = func.length - 1;
+    }
+    return rest$1.rest(func, start);
+}
+
+exports.rest = rest;
Index: node_modules/es-toolkit/dist/compat/function/rest.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/rest.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/rest.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { rest as rest$1 } from '../../function/rest.mjs';
+
+function rest(func, start = func.length - 1) {
+    start = Number.parseInt(start, 10);
+    if (Number.isNaN(start) || start < 0) {
+        start = func.length - 1;
+    }
+    return rest$1(func, start);
+}
+
+export { rest };
Index: node_modules/es-toolkit/dist/compat/function/spread.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/spread.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/spread.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+/**
+ * Creates a new function that spreads elements of an array argument into individual arguments
+ * for the original function. The array argument is positioned based on the `argsIndex` parameter.
+ *
+ * @template F - A function type with any number of parameters and any return type.
+ * @param {F} func - The function to be transformed. It can be any function with any number of arguments.
+ * @param {number} [argsIndex=0] - The index where the array argument is positioned among the other arguments.
+ *   If `argsIndex` is negative or `NaN`, it defaults to `0`. If it's a fractional number, it is rounded to the nearest integer.
+ * @returns {(...args: any[]) => ReturnType<F>} - A new function that takes multiple arguments, including an array of arguments at the specified `argsIndex`,
+ *   and returns the result of calling the original function with those arguments.
+ *
+ * @example
+ * function add(a, b) {
+ *   return a + b;
+ * }
+ *
+ * const spreadAdd = spread(add);
+ * console.log(spreadAdd([1, 2])); // Output: 3
+ *
+ * @example
+ * // Example function to spread arguments over
+ * function add(a, b) {
+ *   return a + b;
+ * }
+ *
+ * // Create a new function that uses `spread` to combine arguments
+ * const spreadAdd = spread(add, 1);
+ *
+ * // Calling `spreadAdd` with an array as the second argument
+ * console.log(spreadAdd(1, [2])); // Output: 3
+ *
+ * @example
+ * // Function with default arguments
+ * function greet(name, greeting = 'Hello') {
+ *   return `${greeting}, ${name}!`;
+ * }
+ *
+ * // Create a new function that uses `spread` to position the argument array at index 0
+ * const spreadGreet = spread(greet, 0);
+ *
+ * // Calling `spreadGreet` with an array of arguments
+ * console.log(spreadGreet(['Alice'])); // Output: Hello, Alice!
+ * console.log(spreadGreet(['Bob', 'Hi'])); // Output: Hi, Bob!
+ */
+declare function spread<R>(func: (...args: any[]) => R, argsIndex?: number): (...args: any[]) => R;
+
+export { spread };
Index: node_modules/es-toolkit/dist/compat/function/spread.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/spread.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/spread.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+/**
+ * Creates a new function that spreads elements of an array argument into individual arguments
+ * for the original function. The array argument is positioned based on the `argsIndex` parameter.
+ *
+ * @template F - A function type with any number of parameters and any return type.
+ * @param {F} func - The function to be transformed. It can be any function with any number of arguments.
+ * @param {number} [argsIndex=0] - The index where the array argument is positioned among the other arguments.
+ *   If `argsIndex` is negative or `NaN`, it defaults to `0`. If it's a fractional number, it is rounded to the nearest integer.
+ * @returns {(...args: any[]) => ReturnType<F>} - A new function that takes multiple arguments, including an array of arguments at the specified `argsIndex`,
+ *   and returns the result of calling the original function with those arguments.
+ *
+ * @example
+ * function add(a, b) {
+ *   return a + b;
+ * }
+ *
+ * const spreadAdd = spread(add);
+ * console.log(spreadAdd([1, 2])); // Output: 3
+ *
+ * @example
+ * // Example function to spread arguments over
+ * function add(a, b) {
+ *   return a + b;
+ * }
+ *
+ * // Create a new function that uses `spread` to combine arguments
+ * const spreadAdd = spread(add, 1);
+ *
+ * // Calling `spreadAdd` with an array as the second argument
+ * console.log(spreadAdd(1, [2])); // Output: 3
+ *
+ * @example
+ * // Function with default arguments
+ * function greet(name, greeting = 'Hello') {
+ *   return `${greeting}, ${name}!`;
+ * }
+ *
+ * // Create a new function that uses `spread` to position the argument array at index 0
+ * const spreadGreet = spread(greet, 0);
+ *
+ * // Calling `spreadGreet` with an array of arguments
+ * console.log(spreadGreet(['Alice'])); // Output: Hello, Alice!
+ * console.log(spreadGreet(['Bob', 'Hi'])); // Output: Hi, Bob!
+ */
+declare function spread<R>(func: (...args: any[]) => R, argsIndex?: number): (...args: any[]) => R;
+
+export { spread };
Index: node_modules/es-toolkit/dist/compat/function/spread.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/spread.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/spread.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function spread(func, argsIndex = 0) {
+    argsIndex = Number.parseInt(argsIndex, 10);
+    if (Number.isNaN(argsIndex) || argsIndex < 0) {
+        argsIndex = 0;
+    }
+    return function (...args) {
+        const array = args[argsIndex];
+        const params = args.slice(0, argsIndex);
+        if (array) {
+            params.push(...array);
+        }
+        return func.apply(this, params);
+    };
+}
+
+exports.spread = spread;
Index: node_modules/es-toolkit/dist/compat/function/spread.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/spread.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/spread.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+function spread(func, argsIndex = 0) {
+    argsIndex = Number.parseInt(argsIndex, 10);
+    if (Number.isNaN(argsIndex) || argsIndex < 0) {
+        argsIndex = 0;
+    }
+    return function (...args) {
+        const array = args[argsIndex];
+        const params = args.slice(0, argsIndex);
+        if (array) {
+            params.push(...array);
+        }
+        return func.apply(this, params);
+    };
+}
+
+export { spread };
Index: node_modules/es-toolkit/dist/compat/function/throttle.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/throttle.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/throttle.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,81 @@
+import { DebouncedFuncLeading, DebouncedFunc } from './debounce.mjs';
+
+interface ThrottleSettings {
+    /**
+     * If `true`, the function will be invoked on the leading edge of the timeout.
+     * @default true
+     */
+    leading?: boolean | undefined;
+    /**
+     * If `true`, the function will be invoked on the trailing edge of the timeout.
+     * @default true
+     */
+    trailing?: boolean | undefined;
+}
+type ThrottleSettingsLeading = (ThrottleSettings & {
+    leading: true;
+}) | Omit<ThrottleSettings, 'leading'>;
+/**
+ * Creates a throttled function that only invokes the provided function at most once
+ * per every `throttleMs` milliseconds. Subsequent calls to the throttled function
+ * within the wait time will not trigger the execution of the original function.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to throttle.
+ * @param {number} throttleMs - The number of milliseconds to throttle executions to.
+ * @param {ThrottleOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the throttled function.
+ * @param {boolean} options.leading - If `true`, the function will be invoked on the leading edge of the timeout.
+ * @param {boolean} options.trailing - If `true`, the function will be invoked on the trailing edge of the timeout.
+ * @returns {(...args: Parameters<F>) => void} A new throttled function that accepts the same parameters as the original function.
+ *
+ * @example
+ * const throttledFunction = throttle(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' immediately
+ * throttledFunction();
+ *
+ * // Will not log anything as it is within the throttle time
+ * throttledFunction();
+ *
+ * // After 1 second
+ * setTimeout(() => {
+ *   throttledFunction(); // Will log 'Function executed'
+ * }, 1000);
+ */
+declare function throttle<T extends (...args: any) => any>(func: T, throttleMs?: number, options?: ThrottleSettingsLeading): DebouncedFuncLeading<T>;
+/**
+ * Creates a throttled function that only invokes the provided function at most once
+ * per every `throttleMs` milliseconds. Subsequent calls to the throttled function
+ * within the wait time will not trigger the execution of the original function.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to throttle.
+ * @param {number} throttleMs - The number of milliseconds to throttle executions to.
+ * @param {ThrottleOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the throttled function.
+ * @param {boolean} options.leading - If `true`, the function will be invoked on the leading edge of the timeout.
+ * @param {boolean} options.trailing - If `true`, the function will be invoked on the trailing edge of the timeout.
+ * @returns {(...args: Parameters<F>) => void} A new throttled function that accepts the same parameters as the original function.
+ *
+ * @example
+ * const throttledFunction = throttle(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' immediately
+ * throttledFunction();
+ *
+ * // Will not log anything as it is within the throttle time
+ * throttledFunction();
+ *
+ * // After 1 second
+ * setTimeout(() => {
+ *   throttledFunction(); // Will log 'Function executed'
+ * }, 1000);
+ */
+declare function throttle<T extends (...args: any) => any>(func: T, throttleMs?: number, options?: ThrottleSettings): DebouncedFunc<T>;
+
+export { throttle };
Index: node_modules/es-toolkit/dist/compat/function/throttle.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/throttle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/throttle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,81 @@
+import { DebouncedFuncLeading, DebouncedFunc } from './debounce.js';
+
+interface ThrottleSettings {
+    /**
+     * If `true`, the function will be invoked on the leading edge of the timeout.
+     * @default true
+     */
+    leading?: boolean | undefined;
+    /**
+     * If `true`, the function will be invoked on the trailing edge of the timeout.
+     * @default true
+     */
+    trailing?: boolean | undefined;
+}
+type ThrottleSettingsLeading = (ThrottleSettings & {
+    leading: true;
+}) | Omit<ThrottleSettings, 'leading'>;
+/**
+ * Creates a throttled function that only invokes the provided function at most once
+ * per every `throttleMs` milliseconds. Subsequent calls to the throttled function
+ * within the wait time will not trigger the execution of the original function.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to throttle.
+ * @param {number} throttleMs - The number of milliseconds to throttle executions to.
+ * @param {ThrottleOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the throttled function.
+ * @param {boolean} options.leading - If `true`, the function will be invoked on the leading edge of the timeout.
+ * @param {boolean} options.trailing - If `true`, the function will be invoked on the trailing edge of the timeout.
+ * @returns {(...args: Parameters<F>) => void} A new throttled function that accepts the same parameters as the original function.
+ *
+ * @example
+ * const throttledFunction = throttle(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' immediately
+ * throttledFunction();
+ *
+ * // Will not log anything as it is within the throttle time
+ * throttledFunction();
+ *
+ * // After 1 second
+ * setTimeout(() => {
+ *   throttledFunction(); // Will log 'Function executed'
+ * }, 1000);
+ */
+declare function throttle<T extends (...args: any) => any>(func: T, throttleMs?: number, options?: ThrottleSettingsLeading): DebouncedFuncLeading<T>;
+/**
+ * Creates a throttled function that only invokes the provided function at most once
+ * per every `throttleMs` milliseconds. Subsequent calls to the throttled function
+ * within the wait time will not trigger the execution of the original function.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to throttle.
+ * @param {number} throttleMs - The number of milliseconds to throttle executions to.
+ * @param {ThrottleOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the throttled function.
+ * @param {boolean} options.leading - If `true`, the function will be invoked on the leading edge of the timeout.
+ * @param {boolean} options.trailing - If `true`, the function will be invoked on the trailing edge of the timeout.
+ * @returns {(...args: Parameters<F>) => void} A new throttled function that accepts the same parameters as the original function.
+ *
+ * @example
+ * const throttledFunction = throttle(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' immediately
+ * throttledFunction();
+ *
+ * // Will not log anything as it is within the throttle time
+ * throttledFunction();
+ *
+ * // After 1 second
+ * setTimeout(() => {
+ *   throttledFunction(); // Will log 'Function executed'
+ * }, 1000);
+ */
+declare function throttle<T extends (...args: any) => any>(func: T, throttleMs?: number, options?: ThrottleSettings): DebouncedFunc<T>;
+
+export { throttle };
Index: node_modules/es-toolkit/dist/compat/function/throttle.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/throttle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/throttle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const debounce = require('./debounce.js');
+
+function throttle(func, throttleMs = 0, options = {}) {
+    const { leading = true, trailing = true } = options;
+    return debounce.debounce(func, throttleMs, {
+        leading,
+        maxWait: throttleMs,
+        trailing,
+    });
+}
+
+exports.throttle = throttle;
Index: node_modules/es-toolkit/dist/compat/function/throttle.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/throttle.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/throttle.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { debounce } from './debounce.mjs';
+
+function throttle(func, throttleMs = 0, options = {}) {
+    const { leading = true, trailing = true } = options;
+    return debounce(func, throttleMs, {
+        leading,
+        maxWait: throttleMs,
+        trailing,
+    });
+}
+
+export { throttle };
Index: node_modules/es-toolkit/dist/compat/function/unary.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/unary.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/unary.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Creates a function that accepts up to one argument, ignoring any additional arguments.
+ *
+ * @template F - The type of the function.
+ * @param {F} func - The function to cap arguments for.
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new capped function.
+ *
+ * @example
+ * function fn(a, b, c) {
+ *   console.log(arguments);
+ * }
+ *
+ * unary(fn)(1, 2, 3); // [Arguments] { '0': 1 }
+ */
+declare function unary<T, U>(func: (arg1: T, ...args: any[]) => U): (arg1: T) => U;
+
+export { unary };
Index: node_modules/es-toolkit/dist/compat/function/unary.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/unary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/unary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Creates a function that accepts up to one argument, ignoring any additional arguments.
+ *
+ * @template F - The type of the function.
+ * @param {F} func - The function to cap arguments for.
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new capped function.
+ *
+ * @example
+ * function fn(a, b, c) {
+ *   console.log(arguments);
+ * }
+ *
+ * unary(fn)(1, 2, 3); // [Arguments] { '0': 1 }
+ */
+declare function unary<T, U>(func: (arg1: T, ...args: any[]) => U): (arg1: T) => U;
+
+export { unary };
Index: node_modules/es-toolkit/dist/compat/function/unary.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/unary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/unary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const ary = require('./ary.js');
+
+function unary(func) {
+    return ary.ary(func, 1);
+}
+
+exports.unary = unary;
Index: node_modules/es-toolkit/dist/compat/function/unary.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/unary.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/unary.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { ary } from './ary.mjs';
+
+function unary(func) {
+    return ary(func, 1);
+}
+
+export { unary };
Index: node_modules/es-toolkit/dist/compat/function/wrap.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/wrap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/wrap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates a new function that wraps the given function `func`.
+ * In this process, you can apply additional logic defined in the `wrapper` function before and after the execution of the original function.
+ *
+ * If a `value` is provided instead of a function, this value is passed as the first argument to the `wrapper` function.
+ *
+ * @example
+ * // Wrap a function
+ * const greet = (name: string) => `Hi, ${name}`;
+ * const wrapped = wrap(greet, (value, name) => `[LOG] ${value(name)}`);
+ * wrapped('Bob'); // => "[LOG] Hi, Bob"
+ *
+ * @example
+ * // Wrap a primitive value
+ * const wrapped = wrap('value', v => `<p>${v}</p>`);
+ * wrapped(); // => "<p>value</p>"
+ */
+declare function wrap<T, U, V>(value: T, wrapper: (value: T, ...args: U[]) => V): (...args: U[]) => V;
+
+export { wrap };
Index: node_modules/es-toolkit/dist/compat/function/wrap.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/function/wrap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/wrap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates a new function that wraps the given function `func`.
+ * In this process, you can apply additional logic defined in the `wrapper` function before and after the execution of the original function.
+ *
+ * If a `value` is provided instead of a function, this value is passed as the first argument to the `wrapper` function.
+ *
+ * @example
+ * // Wrap a function
+ * const greet = (name: string) => `Hi, ${name}`;
+ * const wrapped = wrap(greet, (value, name) => `[LOG] ${value(name)}`);
+ * wrapped('Bob'); // => "[LOG] Hi, Bob"
+ *
+ * @example
+ * // Wrap a primitive value
+ * const wrapped = wrap('value', v => `<p>${v}</p>`);
+ * wrapped(); // => "<p>value</p>"
+ */
+declare function wrap<T, U, V>(value: T, wrapper: (value: T, ...args: U[]) => V): (...args: U[]) => V;
+
+export { wrap };
Index: node_modules/es-toolkit/dist/compat/function/wrap.js
===================================================================
--- node_modules/es-toolkit/dist/compat/function/wrap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/wrap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const isFunction = require('../../predicate/isFunction.js');
+
+function wrap(value, wrapper) {
+    return function (...args) {
+        const wrapFn = isFunction.isFunction(wrapper) ? wrapper : identity.identity;
+        return wrapFn.apply(this, [value, ...args]);
+    };
+}
+
+exports.wrap = wrap;
Index: node_modules/es-toolkit/dist/compat/function/wrap.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/function/wrap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/function/wrap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { identity } from '../../function/identity.mjs';
+import { isFunction } from '../../predicate/isFunction.mjs';
+
+function wrap(value, wrapper) {
+    return function (...args) {
+        const wrapFn = isFunction(wrapper) ? wrapper : identity;
+        return wrapFn.apply(this, [value, ...args]);
+    };
+}
+
+export { wrap };
Index: node_modules/es-toolkit/dist/compat/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,292 @@
+export { castArray } from './array/castArray.mjs';
+export { chunk } from './array/chunk.mjs';
+export { compact } from './array/compact.mjs';
+export { concat } from './array/concat.mjs';
+export { countBy } from './array/countBy.mjs';
+export { difference } from './array/difference.mjs';
+export { differenceBy } from './array/differenceBy.mjs';
+export { differenceWith } from './array/differenceWith.mjs';
+export { drop } from './array/drop.mjs';
+export { dropRight } from './array/dropRight.mjs';
+export { dropRightWhile } from './array/dropRightWhile.mjs';
+export { dropWhile } from './array/dropWhile.mjs';
+export { forEach as each, forEach } from './array/forEach.mjs';
+export { forEachRight as eachRight, forEachRight } from './array/forEachRight.mjs';
+export { every } from './array/every.mjs';
+export { fill } from './array/fill.mjs';
+export { filter } from './array/filter.mjs';
+export { find } from './array/find.mjs';
+export { findIndex } from './array/findIndex.mjs';
+export { findLast } from './array/findLast.mjs';
+export { findLastIndex } from './array/findLastIndex.mjs';
+export { head as first, head } from './array/head.mjs';
+export { flatMap } from './array/flatMap.mjs';
+export { flatMapDeep } from './array/flatMapDeep.mjs';
+export { flatMapDepth } from './array/flatMapDepth.mjs';
+export { flatten } from './array/flatten.mjs';
+export { flattenDeep } from './array/flattenDeep.mjs';
+export { flattenDepth } from './array/flattenDepth.mjs';
+export { groupBy } from './array/groupBy.mjs';
+export { includes } from './array/includes.mjs';
+export { indexOf } from './array/indexOf.mjs';
+export { initial } from './array/initial.mjs';
+export { intersection } from './array/intersection.mjs';
+export { intersectionBy } from './array/intersectionBy.mjs';
+export { intersectionWith } from './array/intersectionWith.mjs';
+export { invokeMap } from './array/invokeMap.mjs';
+export { join } from './array/join.mjs';
+export { keyBy } from './array/keyBy.mjs';
+export { last } from './array/last.mjs';
+export { lastIndexOf } from './array/lastIndexOf.mjs';
+export { map } from './array/map.mjs';
+export { nth } from './array/nth.mjs';
+export { orderBy } from './array/orderBy.mjs';
+export { partition } from './array/partition.mjs';
+export { pull } from './array/pull.mjs';
+export { pullAll } from './array/pullAll.mjs';
+export { pullAllBy } from './array/pullAllBy.mjs';
+export { pullAllWith } from './array/pullAllWith.mjs';
+export { pullAt } from './array/pullAt.mjs';
+export { reduce } from './array/reduce.mjs';
+export { reduceRight } from './array/reduceRight.mjs';
+export { reject } from './array/reject.mjs';
+export { remove } from './array/remove.mjs';
+export { reverse } from './array/reverse.mjs';
+export { sample } from './array/sample.mjs';
+export { sampleSize } from './array/sampleSize.mjs';
+export { shuffle } from './array/shuffle.mjs';
+export { size } from './array/size.mjs';
+export { slice } from './array/slice.mjs';
+export { some } from './array/some.mjs';
+export { sortBy } from './array/sortBy.mjs';
+export { sortedIndex } from './array/sortedIndex.mjs';
+export { sortedIndexBy } from './array/sortedIndexBy.mjs';
+export { sortedIndexOf } from './array/sortedIndexOf.mjs';
+export { sortedLastIndex } from './array/sortedLastIndex.mjs';
+export { sortedLastIndexBy } from './array/sortedLastIndexBy.mjs';
+export { sortedLastIndexOf } from './array/sortedLastIndexOf.mjs';
+export { tail } from './array/tail.mjs';
+export { take } from './array/take.mjs';
+export { takeRight } from './array/takeRight.mjs';
+export { takeRightWhile } from './array/takeRightWhile.mjs';
+export { takeWhile } from './array/takeWhile.mjs';
+export { union } from './array/union.mjs';
+export { unionBy } from './array/unionBy.mjs';
+export { unionWith } from './array/unionWith.mjs';
+export { uniq } from './array/uniq.mjs';
+export { uniqBy } from './array/uniqBy.mjs';
+export { uniqWith } from './array/uniqWith.mjs';
+export { unzip } from './array/unzip.mjs';
+export { unzipWith } from './array/unzipWith.mjs';
+export { without } from './array/without.mjs';
+export { xor } from './array/xor.mjs';
+export { xorBy } from './array/xorBy.mjs';
+export { xorWith } from './array/xorWith.mjs';
+export { zip } from './array/zip.mjs';
+export { zipObject } from './array/zipObject.mjs';
+export { zipObjectDeep } from './array/zipObjectDeep.mjs';
+export { zipWith } from './array/zipWith.mjs';
+export { after } from './function/after.mjs';
+export { ary } from './function/ary.mjs';
+export { attempt } from './function/attempt.mjs';
+export { before } from './function/before.mjs';
+export { bind } from './function/bind.mjs';
+export { bindKey } from './function/bindKey.mjs';
+export { curry } from './function/curry.mjs';
+export { curryRight } from './function/curryRight.mjs';
+export { DebouncedFunc, debounce } from './function/debounce.mjs';
+export { defer } from './function/defer.mjs';
+export { delay } from './function/delay.mjs';
+export { flip } from './function/flip.mjs';
+export { flow } from './function/flow.mjs';
+export { flowRight } from './function/flowRight.mjs';
+export { memoize } from './function/memoize.mjs';
+export { negate } from './function/negate.mjs';
+export { nthArg } from './function/nthArg.mjs';
+export { once } from './function/once.mjs';
+export { overArgs } from './function/overArgs.mjs';
+export { partial } from './function/partial.mjs';
+export { partialRight } from './function/partialRight.mjs';
+export { rearg } from './function/rearg.mjs';
+export { rest } from './function/rest.mjs';
+export { spread } from './function/spread.mjs';
+export { throttle } from './function/throttle.mjs';
+export { unary } from './function/unary.mjs';
+export { wrap } from './function/wrap.mjs';
+export { add } from './math/add.mjs';
+export { ceil } from './math/ceil.mjs';
+export { clamp } from './math/clamp.mjs';
+export { divide } from './math/divide.mjs';
+export { floor } from './math/floor.mjs';
+export { inRange } from './math/inRange.mjs';
+export { max } from './math/max.mjs';
+export { maxBy } from './math/maxBy.mjs';
+export { mean } from './math/mean.mjs';
+export { meanBy } from './math/meanBy.mjs';
+export { min } from './math/min.mjs';
+export { minBy } from './math/minBy.mjs';
+export { multiply } from './math/multiply.mjs';
+export { parseInt } from './math/parseInt.mjs';
+export { random } from './math/random.mjs';
+export { range } from './math/range.mjs';
+export { rangeRight } from './math/rangeRight.mjs';
+export { round } from './math/round.mjs';
+export { subtract } from './math/subtract.mjs';
+export { sum } from './math/sum.mjs';
+export { sumBy } from './math/sumBy.mjs';
+export { isEqual } from '../predicate/isEqual.mjs';
+export { identity } from './function/identity.mjs';
+export { noop } from './function/noop.mjs';
+export { assign } from './object/assign.mjs';
+export { assignIn, assignIn as extend } from './object/assignIn.mjs';
+export { assignInWith, assignInWith as extendWith } from './object/assignInWith.mjs';
+export { assignWith } from './object/assignWith.mjs';
+export { at } from './object/at.mjs';
+export { clone } from './object/clone.mjs';
+export { cloneDeep } from './object/cloneDeep.mjs';
+export { cloneDeepWith } from './object/cloneDeepWith.mjs';
+export { cloneWith } from './object/cloneWith.mjs';
+export { create } from './object/create.mjs';
+export { defaults } from './object/defaults.mjs';
+export { defaultsDeep } from './object/defaultsDeep.mjs';
+export { findKey } from './object/findKey.mjs';
+export { findLastKey } from './object/findLastKey.mjs';
+export { forIn } from './object/forIn.mjs';
+export { forInRight } from './object/forInRight.mjs';
+export { forOwn } from './object/forOwn.mjs';
+export { forOwnRight } from './object/forOwnRight.mjs';
+export { fromPairs } from './object/fromPairs.mjs';
+export { functions } from './object/functions.mjs';
+export { functionsIn } from './object/functionsIn.mjs';
+export { get } from './object/get.mjs';
+export { has } from './object/has.mjs';
+export { hasIn } from './object/hasIn.mjs';
+export { invert } from './object/invert.mjs';
+export { invertBy } from './object/invertBy.mjs';
+export { keys } from './object/keys.mjs';
+export { keysIn } from './object/keysIn.mjs';
+export { mapKeys } from './object/mapKeys.mjs';
+export { mapValues } from './object/mapValues.mjs';
+export { merge } from './object/merge.mjs';
+export { mergeWith } from './object/mergeWith.mjs';
+export { omit } from './object/omit.mjs';
+export { omitBy } from './object/omitBy.mjs';
+export { pick } from './object/pick.mjs';
+export { pickBy } from './object/pickBy.mjs';
+export { property } from './object/property.mjs';
+export { propertyOf } from './object/propertyOf.mjs';
+export { result } from './object/result.mjs';
+export { set } from './object/set.mjs';
+export { setWith } from './object/setWith.mjs';
+export { toDefaulted } from './object/toDefaulted.mjs';
+export { toPairs } from './object/toPairs.mjs';
+export { toPairsIn } from './object/toPairsIn.mjs';
+export { transform } from './object/transform.mjs';
+export { unset } from './object/unset.mjs';
+export { update } from './object/update.mjs';
+export { updateWith } from './object/updateWith.mjs';
+export { values } from './object/values.mjs';
+export { valuesIn } from './object/valuesIn.mjs';
+export { isFunction } from './predicate/isFunction.mjs';
+export { isLength } from './predicate/isLength.mjs';
+export { isMatchWith } from './predicate/isMatchWith.mjs';
+export { isNative } from './predicate/isNative.mjs';
+export { isNull } from './predicate/isNull.mjs';
+export { isUndefined } from './predicate/isUndefined.mjs';
+export { conforms } from './predicate/conforms.mjs';
+export { conformsTo } from './predicate/conformsTo.mjs';
+export { isArguments } from './predicate/isArguments.mjs';
+export { isArray } from './predicate/isArray.mjs';
+export { isArrayBuffer } from './predicate/isArrayBuffer.mjs';
+export { isArrayLike } from './predicate/isArrayLike.mjs';
+export { isArrayLikeObject } from './predicate/isArrayLikeObject.mjs';
+export { isBoolean } from './predicate/isBoolean.mjs';
+export { isBuffer } from './predicate/isBuffer.mjs';
+export { isDate } from './predicate/isDate.mjs';
+export { isElement } from './predicate/isElement.mjs';
+export { isEmpty } from './predicate/isEmpty.mjs';
+export { isEqualWith } from './predicate/isEqualWith.mjs';
+export { isError } from './predicate/isError.mjs';
+export { isFinite } from './predicate/isFinite.mjs';
+export { isInteger } from './predicate/isInteger.mjs';
+export { isMap } from './predicate/isMap.mjs';
+export { isMatch } from './predicate/isMatch.mjs';
+export { isNaN } from './predicate/isNaN.mjs';
+export { isNil } from './predicate/isNil.mjs';
+export { isNumber } from './predicate/isNumber.mjs';
+export { isObject } from './predicate/isObject.mjs';
+export { isObjectLike } from './predicate/isObjectLike.mjs';
+export { isPlainObject } from './predicate/isPlainObject.mjs';
+export { isRegExp } from './predicate/isRegExp.mjs';
+export { isSafeInteger } from './predicate/isSafeInteger.mjs';
+export { isSet } from './predicate/isSet.mjs';
+export { isString } from './predicate/isString.mjs';
+export { isSymbol } from './predicate/isSymbol.mjs';
+export { isTypedArray } from './predicate/isTypedArray.mjs';
+export { isWeakMap } from './predicate/isWeakMap.mjs';
+export { isWeakSet } from './predicate/isWeakSet.mjs';
+export { matches } from './predicate/matches.mjs';
+export { matchesProperty } from './predicate/matchesProperty.mjs';
+export { capitalize } from './string/capitalize.mjs';
+export { bindAll } from './util/bindAll.mjs';
+export { camelCase } from './string/camelCase.mjs';
+export { deburr } from './string/deburr.mjs';
+export { endsWith } from './string/endsWith.mjs';
+export { escape } from './string/escape.mjs';
+export { escapeRegExp } from './string/escapeRegExp.mjs';
+export { kebabCase } from './string/kebabCase.mjs';
+export { lowerCase } from './string/lowerCase.mjs';
+export { lowerFirst } from './string/lowerFirst.mjs';
+export { pad } from './string/pad.mjs';
+export { padEnd } from './string/padEnd.mjs';
+export { padStart } from './string/padStart.mjs';
+export { repeat } from './string/repeat.mjs';
+export { replace } from './string/replace.mjs';
+export { snakeCase } from './string/snakeCase.mjs';
+export { split } from './string/split.mjs';
+export { startCase } from './string/startCase.mjs';
+export { startsWith } from './string/startsWith.mjs';
+export { template, templateSettings } from './string/template.mjs';
+export { toLower } from './string/toLower.mjs';
+export { toUpper } from './string/toUpper.mjs';
+export { trim } from './string/trim.mjs';
+export { trimEnd } from './string/trimEnd.mjs';
+export { trimStart } from './string/trimStart.mjs';
+export { truncate } from './string/truncate.mjs';
+export { unescape } from './string/unescape.mjs';
+export { upperCase } from './string/upperCase.mjs';
+export { upperFirst } from './string/upperFirst.mjs';
+export { words } from './string/words.mjs';
+export { cond } from './util/cond.mjs';
+export { constant } from './util/constant.mjs';
+export { defaultTo } from './util/defaultTo.mjs';
+export { eq } from './util/eq.mjs';
+export { gt } from './util/gt.mjs';
+export { gte } from './util/gte.mjs';
+export { invoke } from './util/invoke.mjs';
+export { iteratee } from './util/iteratee.mjs';
+export { lt } from './util/lt.mjs';
+export { lte } from './util/lte.mjs';
+export { method } from './util/method.mjs';
+export { methodOf } from './util/methodOf.mjs';
+export { now } from './util/now.mjs';
+export { over } from './util/over.mjs';
+export { overEvery } from './util/overEvery.mjs';
+export { overSome } from './util/overSome.mjs';
+export { stubArray } from './util/stubArray.mjs';
+export { stubFalse } from './util/stubFalse.mjs';
+export { stubObject } from './util/stubObject.mjs';
+export { stubString } from './util/stubString.mjs';
+export { stubTrue } from './util/stubTrue.mjs';
+export { times } from './util/times.mjs';
+export { toArray } from './util/toArray.mjs';
+export { toFinite } from './util/toFinite.mjs';
+export { toInteger } from './util/toInteger.mjs';
+export { toLength } from './util/toLength.mjs';
+export { toNumber } from './util/toNumber.mjs';
+export { toPath } from './util/toPath.mjs';
+export { toPlainObject } from './util/toPlainObject.mjs';
+export { toSafeInteger } from './util/toSafeInteger.mjs';
+export { toString } from './util/toString.mjs';
+export { uniqueId } from './util/uniqueId.mjs';
+export { toolkit as default } from './toolkit.mjs';
Index: node_modules/es-toolkit/dist/compat/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,292 @@
+export { castArray } from './array/castArray.js';
+export { chunk } from './array/chunk.js';
+export { compact } from './array/compact.js';
+export { concat } from './array/concat.js';
+export { countBy } from './array/countBy.js';
+export { difference } from './array/difference.js';
+export { differenceBy } from './array/differenceBy.js';
+export { differenceWith } from './array/differenceWith.js';
+export { drop } from './array/drop.js';
+export { dropRight } from './array/dropRight.js';
+export { dropRightWhile } from './array/dropRightWhile.js';
+export { dropWhile } from './array/dropWhile.js';
+export { forEach as each, forEach } from './array/forEach.js';
+export { forEachRight as eachRight, forEachRight } from './array/forEachRight.js';
+export { every } from './array/every.js';
+export { fill } from './array/fill.js';
+export { filter } from './array/filter.js';
+export { find } from './array/find.js';
+export { findIndex } from './array/findIndex.js';
+export { findLast } from './array/findLast.js';
+export { findLastIndex } from './array/findLastIndex.js';
+export { head as first, head } from './array/head.js';
+export { flatMap } from './array/flatMap.js';
+export { flatMapDeep } from './array/flatMapDeep.js';
+export { flatMapDepth } from './array/flatMapDepth.js';
+export { flatten } from './array/flatten.js';
+export { flattenDeep } from './array/flattenDeep.js';
+export { flattenDepth } from './array/flattenDepth.js';
+export { groupBy } from './array/groupBy.js';
+export { includes } from './array/includes.js';
+export { indexOf } from './array/indexOf.js';
+export { initial } from './array/initial.js';
+export { intersection } from './array/intersection.js';
+export { intersectionBy } from './array/intersectionBy.js';
+export { intersectionWith } from './array/intersectionWith.js';
+export { invokeMap } from './array/invokeMap.js';
+export { join } from './array/join.js';
+export { keyBy } from './array/keyBy.js';
+export { last } from './array/last.js';
+export { lastIndexOf } from './array/lastIndexOf.js';
+export { map } from './array/map.js';
+export { nth } from './array/nth.js';
+export { orderBy } from './array/orderBy.js';
+export { partition } from './array/partition.js';
+export { pull } from './array/pull.js';
+export { pullAll } from './array/pullAll.js';
+export { pullAllBy } from './array/pullAllBy.js';
+export { pullAllWith } from './array/pullAllWith.js';
+export { pullAt } from './array/pullAt.js';
+export { reduce } from './array/reduce.js';
+export { reduceRight } from './array/reduceRight.js';
+export { reject } from './array/reject.js';
+export { remove } from './array/remove.js';
+export { reverse } from './array/reverse.js';
+export { sample } from './array/sample.js';
+export { sampleSize } from './array/sampleSize.js';
+export { shuffle } from './array/shuffle.js';
+export { size } from './array/size.js';
+export { slice } from './array/slice.js';
+export { some } from './array/some.js';
+export { sortBy } from './array/sortBy.js';
+export { sortedIndex } from './array/sortedIndex.js';
+export { sortedIndexBy } from './array/sortedIndexBy.js';
+export { sortedIndexOf } from './array/sortedIndexOf.js';
+export { sortedLastIndex } from './array/sortedLastIndex.js';
+export { sortedLastIndexBy } from './array/sortedLastIndexBy.js';
+export { sortedLastIndexOf } from './array/sortedLastIndexOf.js';
+export { tail } from './array/tail.js';
+export { take } from './array/take.js';
+export { takeRight } from './array/takeRight.js';
+export { takeRightWhile } from './array/takeRightWhile.js';
+export { takeWhile } from './array/takeWhile.js';
+export { union } from './array/union.js';
+export { unionBy } from './array/unionBy.js';
+export { unionWith } from './array/unionWith.js';
+export { uniq } from './array/uniq.js';
+export { uniqBy } from './array/uniqBy.js';
+export { uniqWith } from './array/uniqWith.js';
+export { unzip } from './array/unzip.js';
+export { unzipWith } from './array/unzipWith.js';
+export { without } from './array/without.js';
+export { xor } from './array/xor.js';
+export { xorBy } from './array/xorBy.js';
+export { xorWith } from './array/xorWith.js';
+export { zip } from './array/zip.js';
+export { zipObject } from './array/zipObject.js';
+export { zipObjectDeep } from './array/zipObjectDeep.js';
+export { zipWith } from './array/zipWith.js';
+export { after } from './function/after.js';
+export { ary } from './function/ary.js';
+export { attempt } from './function/attempt.js';
+export { before } from './function/before.js';
+export { bind } from './function/bind.js';
+export { bindKey } from './function/bindKey.js';
+export { curry } from './function/curry.js';
+export { curryRight } from './function/curryRight.js';
+export { DebouncedFunc, debounce } from './function/debounce.js';
+export { defer } from './function/defer.js';
+export { delay } from './function/delay.js';
+export { flip } from './function/flip.js';
+export { flow } from './function/flow.js';
+export { flowRight } from './function/flowRight.js';
+export { memoize } from './function/memoize.js';
+export { negate } from './function/negate.js';
+export { nthArg } from './function/nthArg.js';
+export { once } from './function/once.js';
+export { overArgs } from './function/overArgs.js';
+export { partial } from './function/partial.js';
+export { partialRight } from './function/partialRight.js';
+export { rearg } from './function/rearg.js';
+export { rest } from './function/rest.js';
+export { spread } from './function/spread.js';
+export { throttle } from './function/throttle.js';
+export { unary } from './function/unary.js';
+export { wrap } from './function/wrap.js';
+export { add } from './math/add.js';
+export { ceil } from './math/ceil.js';
+export { clamp } from './math/clamp.js';
+export { divide } from './math/divide.js';
+export { floor } from './math/floor.js';
+export { inRange } from './math/inRange.js';
+export { max } from './math/max.js';
+export { maxBy } from './math/maxBy.js';
+export { mean } from './math/mean.js';
+export { meanBy } from './math/meanBy.js';
+export { min } from './math/min.js';
+export { minBy } from './math/minBy.js';
+export { multiply } from './math/multiply.js';
+export { parseInt } from './math/parseInt.js';
+export { random } from './math/random.js';
+export { range } from './math/range.js';
+export { rangeRight } from './math/rangeRight.js';
+export { round } from './math/round.js';
+export { subtract } from './math/subtract.js';
+export { sum } from './math/sum.js';
+export { sumBy } from './math/sumBy.js';
+export { isEqual } from '../predicate/isEqual.js';
+export { identity } from './function/identity.js';
+export { noop } from './function/noop.js';
+export { assign } from './object/assign.js';
+export { assignIn, assignIn as extend } from './object/assignIn.js';
+export { assignInWith, assignInWith as extendWith } from './object/assignInWith.js';
+export { assignWith } from './object/assignWith.js';
+export { at } from './object/at.js';
+export { clone } from './object/clone.js';
+export { cloneDeep } from './object/cloneDeep.js';
+export { cloneDeepWith } from './object/cloneDeepWith.js';
+export { cloneWith } from './object/cloneWith.js';
+export { create } from './object/create.js';
+export { defaults } from './object/defaults.js';
+export { defaultsDeep } from './object/defaultsDeep.js';
+export { findKey } from './object/findKey.js';
+export { findLastKey } from './object/findLastKey.js';
+export { forIn } from './object/forIn.js';
+export { forInRight } from './object/forInRight.js';
+export { forOwn } from './object/forOwn.js';
+export { forOwnRight } from './object/forOwnRight.js';
+export { fromPairs } from './object/fromPairs.js';
+export { functions } from './object/functions.js';
+export { functionsIn } from './object/functionsIn.js';
+export { get } from './object/get.js';
+export { has } from './object/has.js';
+export { hasIn } from './object/hasIn.js';
+export { invert } from './object/invert.js';
+export { invertBy } from './object/invertBy.js';
+export { keys } from './object/keys.js';
+export { keysIn } from './object/keysIn.js';
+export { mapKeys } from './object/mapKeys.js';
+export { mapValues } from './object/mapValues.js';
+export { merge } from './object/merge.js';
+export { mergeWith } from './object/mergeWith.js';
+export { omit } from './object/omit.js';
+export { omitBy } from './object/omitBy.js';
+export { pick } from './object/pick.js';
+export { pickBy } from './object/pickBy.js';
+export { property } from './object/property.js';
+export { propertyOf } from './object/propertyOf.js';
+export { result } from './object/result.js';
+export { set } from './object/set.js';
+export { setWith } from './object/setWith.js';
+export { toDefaulted } from './object/toDefaulted.js';
+export { toPairs } from './object/toPairs.js';
+export { toPairsIn } from './object/toPairsIn.js';
+export { transform } from './object/transform.js';
+export { unset } from './object/unset.js';
+export { update } from './object/update.js';
+export { updateWith } from './object/updateWith.js';
+export { values } from './object/values.js';
+export { valuesIn } from './object/valuesIn.js';
+export { isFunction } from './predicate/isFunction.js';
+export { isLength } from './predicate/isLength.js';
+export { isMatchWith } from './predicate/isMatchWith.js';
+export { isNative } from './predicate/isNative.js';
+export { isNull } from './predicate/isNull.js';
+export { isUndefined } from './predicate/isUndefined.js';
+export { conforms } from './predicate/conforms.js';
+export { conformsTo } from './predicate/conformsTo.js';
+export { isArguments } from './predicate/isArguments.js';
+export { isArray } from './predicate/isArray.js';
+export { isArrayBuffer } from './predicate/isArrayBuffer.js';
+export { isArrayLike } from './predicate/isArrayLike.js';
+export { isArrayLikeObject } from './predicate/isArrayLikeObject.js';
+export { isBoolean } from './predicate/isBoolean.js';
+export { isBuffer } from './predicate/isBuffer.js';
+export { isDate } from './predicate/isDate.js';
+export { isElement } from './predicate/isElement.js';
+export { isEmpty } from './predicate/isEmpty.js';
+export { isEqualWith } from './predicate/isEqualWith.js';
+export { isError } from './predicate/isError.js';
+export { isFinite } from './predicate/isFinite.js';
+export { isInteger } from './predicate/isInteger.js';
+export { isMap } from './predicate/isMap.js';
+export { isMatch } from './predicate/isMatch.js';
+export { isNaN } from './predicate/isNaN.js';
+export { isNil } from './predicate/isNil.js';
+export { isNumber } from './predicate/isNumber.js';
+export { isObject } from './predicate/isObject.js';
+export { isObjectLike } from './predicate/isObjectLike.js';
+export { isPlainObject } from './predicate/isPlainObject.js';
+export { isRegExp } from './predicate/isRegExp.js';
+export { isSafeInteger } from './predicate/isSafeInteger.js';
+export { isSet } from './predicate/isSet.js';
+export { isString } from './predicate/isString.js';
+export { isSymbol } from './predicate/isSymbol.js';
+export { isTypedArray } from './predicate/isTypedArray.js';
+export { isWeakMap } from './predicate/isWeakMap.js';
+export { isWeakSet } from './predicate/isWeakSet.js';
+export { matches } from './predicate/matches.js';
+export { matchesProperty } from './predicate/matchesProperty.js';
+export { capitalize } from './string/capitalize.js';
+export { bindAll } from './util/bindAll.js';
+export { camelCase } from './string/camelCase.js';
+export { deburr } from './string/deburr.js';
+export { endsWith } from './string/endsWith.js';
+export { escape } from './string/escape.js';
+export { escapeRegExp } from './string/escapeRegExp.js';
+export { kebabCase } from './string/kebabCase.js';
+export { lowerCase } from './string/lowerCase.js';
+export { lowerFirst } from './string/lowerFirst.js';
+export { pad } from './string/pad.js';
+export { padEnd } from './string/padEnd.js';
+export { padStart } from './string/padStart.js';
+export { repeat } from './string/repeat.js';
+export { replace } from './string/replace.js';
+export { snakeCase } from './string/snakeCase.js';
+export { split } from './string/split.js';
+export { startCase } from './string/startCase.js';
+export { startsWith } from './string/startsWith.js';
+export { template, templateSettings } from './string/template.js';
+export { toLower } from './string/toLower.js';
+export { toUpper } from './string/toUpper.js';
+export { trim } from './string/trim.js';
+export { trimEnd } from './string/trimEnd.js';
+export { trimStart } from './string/trimStart.js';
+export { truncate } from './string/truncate.js';
+export { unescape } from './string/unescape.js';
+export { upperCase } from './string/upperCase.js';
+export { upperFirst } from './string/upperFirst.js';
+export { words } from './string/words.js';
+export { cond } from './util/cond.js';
+export { constant } from './util/constant.js';
+export { defaultTo } from './util/defaultTo.js';
+export { eq } from './util/eq.js';
+export { gt } from './util/gt.js';
+export { gte } from './util/gte.js';
+export { invoke } from './util/invoke.js';
+export { iteratee } from './util/iteratee.js';
+export { lt } from './util/lt.js';
+export { lte } from './util/lte.js';
+export { method } from './util/method.js';
+export { methodOf } from './util/methodOf.js';
+export { now } from './util/now.js';
+export { over } from './util/over.js';
+export { overEvery } from './util/overEvery.js';
+export { overSome } from './util/overSome.js';
+export { stubArray } from './util/stubArray.js';
+export { stubFalse } from './util/stubFalse.js';
+export { stubObject } from './util/stubObject.js';
+export { stubString } from './util/stubString.js';
+export { stubTrue } from './util/stubTrue.js';
+export { times } from './util/times.js';
+export { toArray } from './util/toArray.js';
+export { toFinite } from './util/toFinite.js';
+export { toInteger } from './util/toInteger.js';
+export { toLength } from './util/toLength.js';
+export { toNumber } from './util/toNumber.js';
+export { toPath } from './util/toPath.js';
+export { toPlainObject } from './util/toPlainObject.js';
+export { toSafeInteger } from './util/toSafeInteger.js';
+export { toString } from './util/toString.js';
+export { uniqueId } from './util/uniqueId.js';
+export { toolkit as default } from './toolkit.js';
Index: node_modules/es-toolkit/dist/compat/index.js
===================================================================
--- node_modules/es-toolkit/dist/compat/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,597 @@
+'use strict';
+
+Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
+
+const castArray = require('./array/castArray.js');
+const chunk = require('./array/chunk.js');
+const compact = require('./array/compact.js');
+const concat = require('./array/concat.js');
+const countBy = require('./array/countBy.js');
+const difference = require('./array/difference.js');
+const differenceBy = require('./array/differenceBy.js');
+const differenceWith = require('./array/differenceWith.js');
+const drop = require('./array/drop.js');
+const dropRight = require('./array/dropRight.js');
+const dropRightWhile = require('./array/dropRightWhile.js');
+const dropWhile = require('./array/dropWhile.js');
+const forEach = require('./array/forEach.js');
+const forEachRight = require('./array/forEachRight.js');
+const every = require('./array/every.js');
+const fill = require('./array/fill.js');
+const filter = require('./array/filter.js');
+const find = require('./array/find.js');
+const findIndex = require('./array/findIndex.js');
+const findLast = require('./array/findLast.js');
+const findLastIndex = require('./array/findLastIndex.js');
+const head = require('./array/head.js');
+const flatMap = require('./array/flatMap.js');
+const flatMapDeep = require('./array/flatMapDeep.js');
+const flatMapDepth = require('./array/flatMapDepth.js');
+const flatten = require('./array/flatten.js');
+const flattenDeep = require('./array/flattenDeep.js');
+const flattenDepth = require('./array/flattenDepth.js');
+const groupBy = require('./array/groupBy.js');
+const includes = require('./array/includes.js');
+const indexOf = require('./array/indexOf.js');
+const initial = require('./array/initial.js');
+const intersection = require('./array/intersection.js');
+const intersectionBy = require('./array/intersectionBy.js');
+const intersectionWith = require('./array/intersectionWith.js');
+const invokeMap = require('./array/invokeMap.js');
+const join = require('./array/join.js');
+const keyBy = require('./array/keyBy.js');
+const last = require('./array/last.js');
+const lastIndexOf = require('./array/lastIndexOf.js');
+const map = require('./array/map.js');
+const nth = require('./array/nth.js');
+const orderBy = require('./array/orderBy.js');
+const partition = require('./array/partition.js');
+const pull = require('./array/pull.js');
+const pullAll = require('./array/pullAll.js');
+const pullAllBy = require('./array/pullAllBy.js');
+const pullAllWith = require('./array/pullAllWith.js');
+const pullAt = require('./array/pullAt.js');
+const reduce = require('./array/reduce.js');
+const reduceRight = require('./array/reduceRight.js');
+const reject = require('./array/reject.js');
+const remove = require('./array/remove.js');
+const reverse = require('./array/reverse.js');
+const sample = require('./array/sample.js');
+const sampleSize = require('./array/sampleSize.js');
+const shuffle = require('./array/shuffle.js');
+const size = require('./array/size.js');
+const slice = require('./array/slice.js');
+const some = require('./array/some.js');
+const sortBy = require('./array/sortBy.js');
+const sortedIndex = require('./array/sortedIndex.js');
+const sortedIndexBy = require('./array/sortedIndexBy.js');
+const sortedIndexOf = require('./array/sortedIndexOf.js');
+const sortedLastIndex = require('./array/sortedLastIndex.js');
+const sortedLastIndexBy = require('./array/sortedLastIndexBy.js');
+const sortedLastIndexOf = require('./array/sortedLastIndexOf.js');
+const tail = require('./array/tail.js');
+const take = require('./array/take.js');
+const takeRight = require('./array/takeRight.js');
+const takeRightWhile = require('./array/takeRightWhile.js');
+const takeWhile = require('./array/takeWhile.js');
+const union = require('./array/union.js');
+const unionBy = require('./array/unionBy.js');
+const unionWith = require('./array/unionWith.js');
+const uniq = require('./array/uniq.js');
+const uniqBy = require('./array/uniqBy.js');
+const uniqWith = require('./array/uniqWith.js');
+const unzip = require('./array/unzip.js');
+const unzipWith = require('./array/unzipWith.js');
+const without = require('./array/without.js');
+const xor = require('./array/xor.js');
+const xorBy = require('./array/xorBy.js');
+const xorWith = require('./array/xorWith.js');
+const zip = require('./array/zip.js');
+const zipObject = require('./array/zipObject.js');
+const zipObjectDeep = require('./array/zipObjectDeep.js');
+const zipWith = require('./array/zipWith.js');
+const after = require('./function/after.js');
+const ary = require('./function/ary.js');
+const attempt = require('./function/attempt.js');
+const before = require('./function/before.js');
+const bind = require('./function/bind.js');
+const bindKey = require('./function/bindKey.js');
+const curry = require('./function/curry.js');
+const curryRight = require('./function/curryRight.js');
+const debounce = require('./function/debounce.js');
+const defer = require('./function/defer.js');
+const delay = require('./function/delay.js');
+const flip = require('./function/flip.js');
+const flow = require('./function/flow.js');
+const flowRight = require('./function/flowRight.js');
+const memoize = require('./function/memoize.js');
+const negate = require('./function/negate.js');
+const nthArg = require('./function/nthArg.js');
+const once = require('./function/once.js');
+const overArgs = require('./function/overArgs.js');
+const partial = require('./function/partial.js');
+const partialRight = require('./function/partialRight.js');
+const rearg = require('./function/rearg.js');
+const rest = require('./function/rest.js');
+const spread = require('./function/spread.js');
+const throttle = require('./function/throttle.js');
+const unary = require('./function/unary.js');
+const wrap = require('./function/wrap.js');
+const add = require('./math/add.js');
+const ceil = require('./math/ceil.js');
+const clamp = require('./math/clamp.js');
+const divide = require('./math/divide.js');
+const floor = require('./math/floor.js');
+const inRange = require('./math/inRange.js');
+const max = require('./math/max.js');
+const maxBy = require('./math/maxBy.js');
+const mean = require('./math/mean.js');
+const meanBy = require('./math/meanBy.js');
+const min = require('./math/min.js');
+const minBy = require('./math/minBy.js');
+const multiply = require('./math/multiply.js');
+const parseInt = require('./math/parseInt.js');
+const random = require('./math/random.js');
+const range = require('./math/range.js');
+const rangeRight = require('./math/rangeRight.js');
+const round = require('./math/round.js');
+const subtract = require('./math/subtract.js');
+const sum = require('./math/sum.js');
+const sumBy = require('./math/sumBy.js');
+const isEqual = require('../predicate/isEqual.js');
+const identity = require('./function/identity.js');
+const noop = require('./function/noop.js');
+const assign = require('./object/assign.js');
+const assignIn = require('./object/assignIn.js');
+const assignInWith = require('./object/assignInWith.js');
+const assignWith = require('./object/assignWith.js');
+const at = require('./object/at.js');
+const clone = require('./object/clone.js');
+const cloneDeep = require('./object/cloneDeep.js');
+const cloneDeepWith = require('./object/cloneDeepWith.js');
+const cloneWith = require('./object/cloneWith.js');
+const create = require('./object/create.js');
+const defaults = require('./object/defaults.js');
+const defaultsDeep = require('./object/defaultsDeep.js');
+const findKey = require('./object/findKey.js');
+const findLastKey = require('./object/findLastKey.js');
+const forIn = require('./object/forIn.js');
+const forInRight = require('./object/forInRight.js');
+const forOwn = require('./object/forOwn.js');
+const forOwnRight = require('./object/forOwnRight.js');
+const fromPairs = require('./object/fromPairs.js');
+const functions = require('./object/functions.js');
+const functionsIn = require('./object/functionsIn.js');
+const get = require('./object/get.js');
+const has = require('./object/has.js');
+const hasIn = require('./object/hasIn.js');
+const invert = require('./object/invert.js');
+const invertBy = require('./object/invertBy.js');
+const keys = require('./object/keys.js');
+const keysIn = require('./object/keysIn.js');
+const mapKeys = require('./object/mapKeys.js');
+const mapValues = require('./object/mapValues.js');
+const merge = require('./object/merge.js');
+const mergeWith = require('./object/mergeWith.js');
+const omit = require('./object/omit.js');
+const omitBy = require('./object/omitBy.js');
+const pick = require('./object/pick.js');
+const pickBy = require('./object/pickBy.js');
+const property = require('./object/property.js');
+const propertyOf = require('./object/propertyOf.js');
+const result = require('./object/result.js');
+const set = require('./object/set.js');
+const setWith = require('./object/setWith.js');
+const toDefaulted = require('./object/toDefaulted.js');
+const toPairs = require('./object/toPairs.js');
+const toPairsIn = require('./object/toPairsIn.js');
+const transform = require('./object/transform.js');
+const unset = require('./object/unset.js');
+const update = require('./object/update.js');
+const updateWith = require('./object/updateWith.js');
+const values = require('./object/values.js');
+const valuesIn = require('./object/valuesIn.js');
+const isFunction = require('./predicate/isFunction.js');
+const isLength = require('./predicate/isLength.js');
+const isMatchWith = require('./predicate/isMatchWith.js');
+const isNative = require('./predicate/isNative.js');
+const isNull = require('./predicate/isNull.js');
+const isUndefined = require('./predicate/isUndefined.js');
+const conforms = require('./predicate/conforms.js');
+const conformsTo = require('./predicate/conformsTo.js');
+const isArguments = require('./predicate/isArguments.js');
+const isArray = require('./predicate/isArray.js');
+const isArrayBuffer = require('./predicate/isArrayBuffer.js');
+const isArrayLike = require('./predicate/isArrayLike.js');
+const isArrayLikeObject = require('./predicate/isArrayLikeObject.js');
+const isBoolean = require('./predicate/isBoolean.js');
+const isBuffer = require('./predicate/isBuffer.js');
+const isDate = require('./predicate/isDate.js');
+const isElement = require('./predicate/isElement.js');
+const isEmpty = require('./predicate/isEmpty.js');
+const isEqualWith = require('./predicate/isEqualWith.js');
+const isError = require('./predicate/isError.js');
+const isFinite = require('./predicate/isFinite.js');
+const isInteger = require('./predicate/isInteger.js');
+const isMap = require('./predicate/isMap.js');
+const isMatch = require('./predicate/isMatch.js');
+const isNaN = require('./predicate/isNaN.js');
+const isNil = require('./predicate/isNil.js');
+const isNumber = require('./predicate/isNumber.js');
+const isObject = require('./predicate/isObject.js');
+const isObjectLike = require('./predicate/isObjectLike.js');
+const isPlainObject = require('./predicate/isPlainObject.js');
+const isRegExp = require('./predicate/isRegExp.js');
+const isSafeInteger = require('./predicate/isSafeInteger.js');
+const isSet = require('./predicate/isSet.js');
+const isString = require('./predicate/isString.js');
+const isSymbol = require('./predicate/isSymbol.js');
+const isTypedArray = require('./predicate/isTypedArray.js');
+const isWeakMap = require('./predicate/isWeakMap.js');
+const isWeakSet = require('./predicate/isWeakSet.js');
+const matches = require('./predicate/matches.js');
+const matchesProperty = require('./predicate/matchesProperty.js');
+const capitalize = require('./string/capitalize.js');
+const bindAll = require('./util/bindAll.js');
+const camelCase = require('./string/camelCase.js');
+const deburr = require('./string/deburr.js');
+const endsWith = require('./string/endsWith.js');
+const escape = require('./string/escape.js');
+const escapeRegExp = require('./string/escapeRegExp.js');
+const kebabCase = require('./string/kebabCase.js');
+const lowerCase = require('./string/lowerCase.js');
+const lowerFirst = require('./string/lowerFirst.js');
+const pad = require('./string/pad.js');
+const padEnd = require('./string/padEnd.js');
+const padStart = require('./string/padStart.js');
+const repeat = require('./string/repeat.js');
+const replace = require('./string/replace.js');
+const snakeCase = require('./string/snakeCase.js');
+const split = require('./string/split.js');
+const startCase = require('./string/startCase.js');
+const startsWith = require('./string/startsWith.js');
+const template = require('./string/template.js');
+const toLower = require('./string/toLower.js');
+const toUpper = require('./string/toUpper.js');
+const trim = require('./string/trim.js');
+const trimEnd = require('./string/trimEnd.js');
+const trimStart = require('./string/trimStart.js');
+const truncate = require('./string/truncate.js');
+const unescape = require('./string/unescape.js');
+const upperCase = require('./string/upperCase.js');
+const upperFirst = require('./string/upperFirst.js');
+const words = require('./string/words.js');
+const cond = require('./util/cond.js');
+const constant = require('./util/constant.js');
+const defaultTo = require('./util/defaultTo.js');
+const eq = require('./util/eq.js');
+const gt = require('./util/gt.js');
+const gte = require('./util/gte.js');
+const invoke = require('./util/invoke.js');
+const iteratee = require('./util/iteratee.js');
+const lt = require('./util/lt.js');
+const lte = require('./util/lte.js');
+const method = require('./util/method.js');
+const methodOf = require('./util/methodOf.js');
+const now = require('./util/now.js');
+const over = require('./util/over.js');
+const overEvery = require('./util/overEvery.js');
+const overSome = require('./util/overSome.js');
+const stubArray = require('./util/stubArray.js');
+const stubFalse = require('./util/stubFalse.js');
+const stubObject = require('./util/stubObject.js');
+const stubString = require('./util/stubString.js');
+const stubTrue = require('./util/stubTrue.js');
+const times = require('./util/times.js');
+const toArray = require('./util/toArray.js');
+const toFinite = require('./util/toFinite.js');
+const toInteger = require('./util/toInteger.js');
+const toLength = require('./util/toLength.js');
+const toNumber = require('./util/toNumber.js');
+const toPath = require('./util/toPath.js');
+const toPlainObject = require('./util/toPlainObject.js');
+const toSafeInteger = require('./util/toSafeInteger.js');
+const toString = require('./util/toString.js');
+const uniqueId = require('./util/uniqueId.js');
+const toolkit = require('./toolkit.js');
+
+
+
+exports.castArray = castArray.castArray;
+exports.chunk = chunk.chunk;
+exports.compact = compact.compact;
+exports.concat = concat.concat;
+exports.countBy = countBy.countBy;
+exports.difference = difference.difference;
+exports.differenceBy = differenceBy.differenceBy;
+exports.differenceWith = differenceWith.differenceWith;
+exports.drop = drop.drop;
+exports.dropRight = dropRight.dropRight;
+exports.dropRightWhile = dropRightWhile.dropRightWhile;
+exports.dropWhile = dropWhile.dropWhile;
+exports.each = forEach.forEach;
+exports.forEach = forEach.forEach;
+exports.eachRight = forEachRight.forEachRight;
+exports.forEachRight = forEachRight.forEachRight;
+exports.every = every.every;
+exports.fill = fill.fill;
+exports.filter = filter.filter;
+exports.find = find.find;
+exports.findIndex = findIndex.findIndex;
+exports.findLast = findLast.findLast;
+exports.findLastIndex = findLastIndex.findLastIndex;
+exports.first = head.head;
+exports.head = head.head;
+exports.flatMap = flatMap.flatMap;
+exports.flatMapDeep = flatMapDeep.flatMapDeep;
+exports.flatMapDepth = flatMapDepth.flatMapDepth;
+exports.flatten = flatten.flatten;
+exports.flattenDeep = flattenDeep.flattenDeep;
+exports.flattenDepth = flattenDepth.flattenDepth;
+exports.groupBy = groupBy.groupBy;
+exports.includes = includes.includes;
+exports.indexOf = indexOf.indexOf;
+exports.initial = initial.initial;
+exports.intersection = intersection.intersection;
+exports.intersectionBy = intersectionBy.intersectionBy;
+exports.intersectionWith = intersectionWith.intersectionWith;
+exports.invokeMap = invokeMap.invokeMap;
+exports.join = join.join;
+exports.keyBy = keyBy.keyBy;
+exports.last = last.last;
+exports.lastIndexOf = lastIndexOf.lastIndexOf;
+exports.map = map.map;
+exports.nth = nth.nth;
+exports.orderBy = orderBy.orderBy;
+exports.partition = partition.partition;
+exports.pull = pull.pull;
+exports.pullAll = pullAll.pullAll;
+exports.pullAllBy = pullAllBy.pullAllBy;
+exports.pullAllWith = pullAllWith.pullAllWith;
+exports.pullAt = pullAt.pullAt;
+exports.reduce = reduce.reduce;
+exports.reduceRight = reduceRight.reduceRight;
+exports.reject = reject.reject;
+exports.remove = remove.remove;
+exports.reverse = reverse.reverse;
+exports.sample = sample.sample;
+exports.sampleSize = sampleSize.sampleSize;
+exports.shuffle = shuffle.shuffle;
+exports.size = size.size;
+exports.slice = slice.slice;
+exports.some = some.some;
+exports.sortBy = sortBy.sortBy;
+exports.sortedIndex = sortedIndex.sortedIndex;
+exports.sortedIndexBy = sortedIndexBy.sortedIndexBy;
+exports.sortedIndexOf = sortedIndexOf.sortedIndexOf;
+exports.sortedLastIndex = sortedLastIndex.sortedLastIndex;
+exports.sortedLastIndexBy = sortedLastIndexBy.sortedLastIndexBy;
+exports.sortedLastIndexOf = sortedLastIndexOf.sortedLastIndexOf;
+exports.tail = tail.tail;
+exports.take = take.take;
+exports.takeRight = takeRight.takeRight;
+exports.takeRightWhile = takeRightWhile.takeRightWhile;
+exports.takeWhile = takeWhile.takeWhile;
+exports.union = union.union;
+exports.unionBy = unionBy.unionBy;
+exports.unionWith = unionWith.unionWith;
+exports.uniq = uniq.uniq;
+exports.uniqBy = uniqBy.uniqBy;
+exports.uniqWith = uniqWith.uniqWith;
+exports.unzip = unzip.unzip;
+exports.unzipWith = unzipWith.unzipWith;
+exports.without = without.without;
+exports.xor = xor.xor;
+exports.xorBy = xorBy.xorBy;
+exports.xorWith = xorWith.xorWith;
+exports.zip = zip.zip;
+exports.zipObject = zipObject.zipObject;
+exports.zipObjectDeep = zipObjectDeep.zipObjectDeep;
+exports.zipWith = zipWith.zipWith;
+exports.after = after.after;
+exports.ary = ary.ary;
+exports.attempt = attempt.attempt;
+exports.before = before.before;
+exports.bind = bind.bind;
+exports.bindKey = bindKey.bindKey;
+exports.curry = curry.curry;
+exports.curryRight = curryRight.curryRight;
+exports.debounce = debounce.debounce;
+exports.defer = defer.defer;
+exports.delay = delay.delay;
+exports.flip = flip.flip;
+exports.flow = flow.flow;
+exports.flowRight = flowRight.flowRight;
+exports.memoize = memoize.memoize;
+exports.negate = negate.negate;
+exports.nthArg = nthArg.nthArg;
+exports.once = once.once;
+exports.overArgs = overArgs.overArgs;
+exports.partial = partial.partial;
+exports.partialRight = partialRight.partialRight;
+exports.rearg = rearg.rearg;
+exports.rest = rest.rest;
+exports.spread = spread.spread;
+exports.throttle = throttle.throttle;
+exports.unary = unary.unary;
+exports.wrap = wrap.wrap;
+exports.add = add.add;
+exports.ceil = ceil.ceil;
+exports.clamp = clamp.clamp;
+exports.divide = divide.divide;
+exports.floor = floor.floor;
+exports.inRange = inRange.inRange;
+exports.max = max.max;
+exports.maxBy = maxBy.maxBy;
+exports.mean = mean.mean;
+exports.meanBy = meanBy.meanBy;
+exports.min = min.min;
+exports.minBy = minBy.minBy;
+exports.multiply = multiply.multiply;
+exports.parseInt = parseInt.parseInt;
+exports.random = random.random;
+exports.range = range.range;
+exports.rangeRight = rangeRight.rangeRight;
+exports.round = round.round;
+exports.subtract = subtract.subtract;
+exports.sum = sum.sum;
+exports.sumBy = sumBy.sumBy;
+exports.isEqual = isEqual.isEqual;
+exports.identity = identity.identity;
+exports.noop = noop.noop;
+exports.assign = assign.assign;
+exports.assignIn = assignIn.assignIn;
+exports.extend = assignIn.assignIn;
+exports.assignInWith = assignInWith.assignInWith;
+exports.extendWith = assignInWith.assignInWith;
+exports.assignWith = assignWith.assignWith;
+exports.at = at.at;
+exports.clone = clone.clone;
+exports.cloneDeep = cloneDeep.cloneDeep;
+exports.cloneDeepWith = cloneDeepWith.cloneDeepWith;
+exports.cloneWith = cloneWith.cloneWith;
+exports.create = create.create;
+exports.defaults = defaults.defaults;
+exports.defaultsDeep = defaultsDeep.defaultsDeep;
+exports.findKey = findKey.findKey;
+exports.findLastKey = findLastKey.findLastKey;
+exports.forIn = forIn.forIn;
+exports.forInRight = forInRight.forInRight;
+exports.forOwn = forOwn.forOwn;
+exports.forOwnRight = forOwnRight.forOwnRight;
+exports.fromPairs = fromPairs.fromPairs;
+exports.functions = functions.functions;
+exports.functionsIn = functionsIn.functionsIn;
+exports.get = get.get;
+exports.has = has.has;
+exports.hasIn = hasIn.hasIn;
+exports.invert = invert.invert;
+exports.invertBy = invertBy.invertBy;
+exports.keys = keys.keys;
+exports.keysIn = keysIn.keysIn;
+exports.mapKeys = mapKeys.mapKeys;
+exports.mapValues = mapValues.mapValues;
+exports.merge = merge.merge;
+exports.mergeWith = mergeWith.mergeWith;
+exports.omit = omit.omit;
+exports.omitBy = omitBy.omitBy;
+exports.pick = pick.pick;
+exports.pickBy = pickBy.pickBy;
+exports.property = property.property;
+exports.propertyOf = propertyOf.propertyOf;
+exports.result = result.result;
+exports.set = set.set;
+exports.setWith = setWith.setWith;
+exports.toDefaulted = toDefaulted.toDefaulted;
+exports.toPairs = toPairs.toPairs;
+exports.toPairsIn = toPairsIn.toPairsIn;
+exports.transform = transform.transform;
+exports.unset = unset.unset;
+exports.update = update.update;
+exports.updateWith = updateWith.updateWith;
+exports.values = values.values;
+exports.valuesIn = valuesIn.valuesIn;
+exports.isFunction = isFunction.isFunction;
+exports.isLength = isLength.isLength;
+exports.isMatchWith = isMatchWith.isMatchWith;
+exports.isNative = isNative.isNative;
+exports.isNull = isNull.isNull;
+exports.isUndefined = isUndefined.isUndefined;
+exports.conforms = conforms.conforms;
+exports.conformsTo = conformsTo.conformsTo;
+exports.isArguments = isArguments.isArguments;
+exports.isArray = isArray.isArray;
+exports.isArrayBuffer = isArrayBuffer.isArrayBuffer;
+exports.isArrayLike = isArrayLike.isArrayLike;
+exports.isArrayLikeObject = isArrayLikeObject.isArrayLikeObject;
+exports.isBoolean = isBoolean.isBoolean;
+exports.isBuffer = isBuffer.isBuffer;
+exports.isDate = isDate.isDate;
+exports.isElement = isElement.isElement;
+exports.isEmpty = isEmpty.isEmpty;
+exports.isEqualWith = isEqualWith.isEqualWith;
+exports.isError = isError.isError;
+exports.isFinite = isFinite.isFinite;
+exports.isInteger = isInteger.isInteger;
+exports.isMap = isMap.isMap;
+exports.isMatch = isMatch.isMatch;
+exports.isNaN = isNaN.isNaN;
+exports.isNil = isNil.isNil;
+exports.isNumber = isNumber.isNumber;
+exports.isObject = isObject.isObject;
+exports.isObjectLike = isObjectLike.isObjectLike;
+exports.isPlainObject = isPlainObject.isPlainObject;
+exports.isRegExp = isRegExp.isRegExp;
+exports.isSafeInteger = isSafeInteger.isSafeInteger;
+exports.isSet = isSet.isSet;
+exports.isString = isString.isString;
+exports.isSymbol = isSymbol.isSymbol;
+exports.isTypedArray = isTypedArray.isTypedArray;
+exports.isWeakMap = isWeakMap.isWeakMap;
+exports.isWeakSet = isWeakSet.isWeakSet;
+exports.matches = matches.matches;
+exports.matchesProperty = matchesProperty.matchesProperty;
+exports.capitalize = capitalize.capitalize;
+exports.bindAll = bindAll.bindAll;
+exports.camelCase = camelCase.camelCase;
+exports.deburr = deburr.deburr;
+exports.endsWith = endsWith.endsWith;
+exports.escape = escape.escape;
+exports.escapeRegExp = escapeRegExp.escapeRegExp;
+exports.kebabCase = kebabCase.kebabCase;
+exports.lowerCase = lowerCase.lowerCase;
+exports.lowerFirst = lowerFirst.lowerFirst;
+exports.pad = pad.pad;
+exports.padEnd = padEnd.padEnd;
+exports.padStart = padStart.padStart;
+exports.repeat = repeat.repeat;
+exports.replace = replace.replace;
+exports.snakeCase = snakeCase.snakeCase;
+exports.split = split.split;
+exports.startCase = startCase.startCase;
+exports.startsWith = startsWith.startsWith;
+exports.template = template.template;
+exports.templateSettings = template.templateSettings;
+exports.toLower = toLower.toLower;
+exports.toUpper = toUpper.toUpper;
+exports.trim = trim.trim;
+exports.trimEnd = trimEnd.trimEnd;
+exports.trimStart = trimStart.trimStart;
+exports.truncate = truncate.truncate;
+exports.unescape = unescape.unescape;
+exports.upperCase = upperCase.upperCase;
+exports.upperFirst = upperFirst.upperFirst;
+exports.words = words.words;
+exports.cond = cond.cond;
+exports.constant = constant.constant;
+exports.defaultTo = defaultTo.defaultTo;
+exports.eq = eq.eq;
+exports.gt = gt.gt;
+exports.gte = gte.gte;
+exports.invoke = invoke.invoke;
+exports.iteratee = iteratee.iteratee;
+exports.lt = lt.lt;
+exports.lte = lte.lte;
+exports.method = method.method;
+exports.methodOf = methodOf.methodOf;
+exports.now = now.now;
+exports.over = over.over;
+exports.overEvery = overEvery.overEvery;
+exports.overSome = overSome.overSome;
+exports.stubArray = stubArray.stubArray;
+exports.stubFalse = stubFalse.stubFalse;
+exports.stubObject = stubObject.stubObject;
+exports.stubString = stubString.stubString;
+exports.stubTrue = stubTrue.stubTrue;
+exports.times = times.times;
+exports.toArray = toArray.toArray;
+exports.toFinite = toFinite.toFinite;
+exports.toInteger = toInteger.toInteger;
+exports.toLength = toLength.toLength;
+exports.toNumber = toNumber.toNumber;
+exports.toPath = toPath.toPath;
+exports.toPlainObject = toPlainObject.toPlainObject;
+exports.toSafeInteger = toSafeInteger.toSafeInteger;
+exports.toString = toString.toString;
+exports.uniqueId = uniqueId.uniqueId;
+exports.default = toolkit.toolkit;
Index: node_modules/es-toolkit/dist/compat/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,292 @@
+export { castArray } from './array/castArray.mjs';
+export { chunk } from './array/chunk.mjs';
+export { compact } from './array/compact.mjs';
+export { concat } from './array/concat.mjs';
+export { countBy } from './array/countBy.mjs';
+export { difference } from './array/difference.mjs';
+export { differenceBy } from './array/differenceBy.mjs';
+export { differenceWith } from './array/differenceWith.mjs';
+export { drop } from './array/drop.mjs';
+export { dropRight } from './array/dropRight.mjs';
+export { dropRightWhile } from './array/dropRightWhile.mjs';
+export { dropWhile } from './array/dropWhile.mjs';
+export { forEach as each, forEach } from './array/forEach.mjs';
+export { forEachRight as eachRight, forEachRight } from './array/forEachRight.mjs';
+export { every } from './array/every.mjs';
+export { fill } from './array/fill.mjs';
+export { filter } from './array/filter.mjs';
+export { find } from './array/find.mjs';
+export { findIndex } from './array/findIndex.mjs';
+export { findLast } from './array/findLast.mjs';
+export { findLastIndex } from './array/findLastIndex.mjs';
+export { head as first, head } from './array/head.mjs';
+export { flatMap } from './array/flatMap.mjs';
+export { flatMapDeep } from './array/flatMapDeep.mjs';
+export { flatMapDepth } from './array/flatMapDepth.mjs';
+export { flatten } from './array/flatten.mjs';
+export { flattenDeep } from './array/flattenDeep.mjs';
+export { flattenDepth } from './array/flattenDepth.mjs';
+export { groupBy } from './array/groupBy.mjs';
+export { includes } from './array/includes.mjs';
+export { indexOf } from './array/indexOf.mjs';
+export { initial } from './array/initial.mjs';
+export { intersection } from './array/intersection.mjs';
+export { intersectionBy } from './array/intersectionBy.mjs';
+export { intersectionWith } from './array/intersectionWith.mjs';
+export { invokeMap } from './array/invokeMap.mjs';
+export { join } from './array/join.mjs';
+export { keyBy } from './array/keyBy.mjs';
+export { last } from './array/last.mjs';
+export { lastIndexOf } from './array/lastIndexOf.mjs';
+export { map } from './array/map.mjs';
+export { nth } from './array/nth.mjs';
+export { orderBy } from './array/orderBy.mjs';
+export { partition } from './array/partition.mjs';
+export { pull } from './array/pull.mjs';
+export { pullAll } from './array/pullAll.mjs';
+export { pullAllBy } from './array/pullAllBy.mjs';
+export { pullAllWith } from './array/pullAllWith.mjs';
+export { pullAt } from './array/pullAt.mjs';
+export { reduce } from './array/reduce.mjs';
+export { reduceRight } from './array/reduceRight.mjs';
+export { reject } from './array/reject.mjs';
+export { remove } from './array/remove.mjs';
+export { reverse } from './array/reverse.mjs';
+export { sample } from './array/sample.mjs';
+export { sampleSize } from './array/sampleSize.mjs';
+export { shuffle } from './array/shuffle.mjs';
+export { size } from './array/size.mjs';
+export { slice } from './array/slice.mjs';
+export { some } from './array/some.mjs';
+export { sortBy } from './array/sortBy.mjs';
+export { sortedIndex } from './array/sortedIndex.mjs';
+export { sortedIndexBy } from './array/sortedIndexBy.mjs';
+export { sortedIndexOf } from './array/sortedIndexOf.mjs';
+export { sortedLastIndex } from './array/sortedLastIndex.mjs';
+export { sortedLastIndexBy } from './array/sortedLastIndexBy.mjs';
+export { sortedLastIndexOf } from './array/sortedLastIndexOf.mjs';
+export { tail } from './array/tail.mjs';
+export { take } from './array/take.mjs';
+export { takeRight } from './array/takeRight.mjs';
+export { takeRightWhile } from './array/takeRightWhile.mjs';
+export { takeWhile } from './array/takeWhile.mjs';
+export { union } from './array/union.mjs';
+export { unionBy } from './array/unionBy.mjs';
+export { unionWith } from './array/unionWith.mjs';
+export { uniq } from './array/uniq.mjs';
+export { uniqBy } from './array/uniqBy.mjs';
+export { uniqWith } from './array/uniqWith.mjs';
+export { unzip } from './array/unzip.mjs';
+export { unzipWith } from './array/unzipWith.mjs';
+export { without } from './array/without.mjs';
+export { xor } from './array/xor.mjs';
+export { xorBy } from './array/xorBy.mjs';
+export { xorWith } from './array/xorWith.mjs';
+export { zip } from './array/zip.mjs';
+export { zipObject } from './array/zipObject.mjs';
+export { zipObjectDeep } from './array/zipObjectDeep.mjs';
+export { zipWith } from './array/zipWith.mjs';
+export { after } from './function/after.mjs';
+export { ary } from './function/ary.mjs';
+export { attempt } from './function/attempt.mjs';
+export { before } from './function/before.mjs';
+export { bind } from './function/bind.mjs';
+export { bindKey } from './function/bindKey.mjs';
+export { curry } from './function/curry.mjs';
+export { curryRight } from './function/curryRight.mjs';
+export { debounce } from './function/debounce.mjs';
+export { defer } from './function/defer.mjs';
+export { delay } from './function/delay.mjs';
+export { flip } from './function/flip.mjs';
+export { flow } from './function/flow.mjs';
+export { flowRight } from './function/flowRight.mjs';
+export { memoize } from './function/memoize.mjs';
+export { negate } from './function/negate.mjs';
+export { nthArg } from './function/nthArg.mjs';
+export { once } from './function/once.mjs';
+export { overArgs } from './function/overArgs.mjs';
+export { partial } from './function/partial.mjs';
+export { partialRight } from './function/partialRight.mjs';
+export { rearg } from './function/rearg.mjs';
+export { rest } from './function/rest.mjs';
+export { spread } from './function/spread.mjs';
+export { throttle } from './function/throttle.mjs';
+export { unary } from './function/unary.mjs';
+export { wrap } from './function/wrap.mjs';
+export { add } from './math/add.mjs';
+export { ceil } from './math/ceil.mjs';
+export { clamp } from './math/clamp.mjs';
+export { divide } from './math/divide.mjs';
+export { floor } from './math/floor.mjs';
+export { inRange } from './math/inRange.mjs';
+export { max } from './math/max.mjs';
+export { maxBy } from './math/maxBy.mjs';
+export { mean } from './math/mean.mjs';
+export { meanBy } from './math/meanBy.mjs';
+export { min } from './math/min.mjs';
+export { minBy } from './math/minBy.mjs';
+export { multiply } from './math/multiply.mjs';
+export { parseInt } from './math/parseInt.mjs';
+export { random } from './math/random.mjs';
+export { range } from './math/range.mjs';
+export { rangeRight } from './math/rangeRight.mjs';
+export { round } from './math/round.mjs';
+export { subtract } from './math/subtract.mjs';
+export { sum } from './math/sum.mjs';
+export { sumBy } from './math/sumBy.mjs';
+export { isEqual } from '../predicate/isEqual.mjs';
+export { identity } from './function/identity.mjs';
+export { noop } from './function/noop.mjs';
+export { assign } from './object/assign.mjs';
+export { assignIn, assignIn as extend } from './object/assignIn.mjs';
+export { assignInWith, assignInWith as extendWith } from './object/assignInWith.mjs';
+export { assignWith } from './object/assignWith.mjs';
+export { at } from './object/at.mjs';
+export { clone } from './object/clone.mjs';
+export { cloneDeep } from './object/cloneDeep.mjs';
+export { cloneDeepWith } from './object/cloneDeepWith.mjs';
+export { cloneWith } from './object/cloneWith.mjs';
+export { create } from './object/create.mjs';
+export { defaults } from './object/defaults.mjs';
+export { defaultsDeep } from './object/defaultsDeep.mjs';
+export { findKey } from './object/findKey.mjs';
+export { findLastKey } from './object/findLastKey.mjs';
+export { forIn } from './object/forIn.mjs';
+export { forInRight } from './object/forInRight.mjs';
+export { forOwn } from './object/forOwn.mjs';
+export { forOwnRight } from './object/forOwnRight.mjs';
+export { fromPairs } from './object/fromPairs.mjs';
+export { functions } from './object/functions.mjs';
+export { functionsIn } from './object/functionsIn.mjs';
+export { get } from './object/get.mjs';
+export { has } from './object/has.mjs';
+export { hasIn } from './object/hasIn.mjs';
+export { invert } from './object/invert.mjs';
+export { invertBy } from './object/invertBy.mjs';
+export { keys } from './object/keys.mjs';
+export { keysIn } from './object/keysIn.mjs';
+export { mapKeys } from './object/mapKeys.mjs';
+export { mapValues } from './object/mapValues.mjs';
+export { merge } from './object/merge.mjs';
+export { mergeWith } from './object/mergeWith.mjs';
+export { omit } from './object/omit.mjs';
+export { omitBy } from './object/omitBy.mjs';
+export { pick } from './object/pick.mjs';
+export { pickBy } from './object/pickBy.mjs';
+export { property } from './object/property.mjs';
+export { propertyOf } from './object/propertyOf.mjs';
+export { result } from './object/result.mjs';
+export { set } from './object/set.mjs';
+export { setWith } from './object/setWith.mjs';
+export { toDefaulted } from './object/toDefaulted.mjs';
+export { toPairs } from './object/toPairs.mjs';
+export { toPairsIn } from './object/toPairsIn.mjs';
+export { transform } from './object/transform.mjs';
+export { unset } from './object/unset.mjs';
+export { update } from './object/update.mjs';
+export { updateWith } from './object/updateWith.mjs';
+export { values } from './object/values.mjs';
+export { valuesIn } from './object/valuesIn.mjs';
+export { isFunction } from './predicate/isFunction.mjs';
+export { isLength } from './predicate/isLength.mjs';
+export { isMatchWith } from './predicate/isMatchWith.mjs';
+export { isNative } from './predicate/isNative.mjs';
+export { isNull } from './predicate/isNull.mjs';
+export { isUndefined } from './predicate/isUndefined.mjs';
+export { conforms } from './predicate/conforms.mjs';
+export { conformsTo } from './predicate/conformsTo.mjs';
+export { isArguments } from './predicate/isArguments.mjs';
+export { isArray } from './predicate/isArray.mjs';
+export { isArrayBuffer } from './predicate/isArrayBuffer.mjs';
+export { isArrayLike } from './predicate/isArrayLike.mjs';
+export { isArrayLikeObject } from './predicate/isArrayLikeObject.mjs';
+export { isBoolean } from './predicate/isBoolean.mjs';
+export { isBuffer } from './predicate/isBuffer.mjs';
+export { isDate } from './predicate/isDate.mjs';
+export { isElement } from './predicate/isElement.mjs';
+export { isEmpty } from './predicate/isEmpty.mjs';
+export { isEqualWith } from './predicate/isEqualWith.mjs';
+export { isError } from './predicate/isError.mjs';
+export { isFinite } from './predicate/isFinite.mjs';
+export { isInteger } from './predicate/isInteger.mjs';
+export { isMap } from './predicate/isMap.mjs';
+export { isMatch } from './predicate/isMatch.mjs';
+export { isNaN } from './predicate/isNaN.mjs';
+export { isNil } from './predicate/isNil.mjs';
+export { isNumber } from './predicate/isNumber.mjs';
+export { isObject } from './predicate/isObject.mjs';
+export { isObjectLike } from './predicate/isObjectLike.mjs';
+export { isPlainObject } from './predicate/isPlainObject.mjs';
+export { isRegExp } from './predicate/isRegExp.mjs';
+export { isSafeInteger } from './predicate/isSafeInteger.mjs';
+export { isSet } from './predicate/isSet.mjs';
+export { isString } from './predicate/isString.mjs';
+export { isSymbol } from './predicate/isSymbol.mjs';
+export { isTypedArray } from './predicate/isTypedArray.mjs';
+export { isWeakMap } from './predicate/isWeakMap.mjs';
+export { isWeakSet } from './predicate/isWeakSet.mjs';
+export { matches } from './predicate/matches.mjs';
+export { matchesProperty } from './predicate/matchesProperty.mjs';
+export { capitalize } from './string/capitalize.mjs';
+export { bindAll } from './util/bindAll.mjs';
+export { camelCase } from './string/camelCase.mjs';
+export { deburr } from './string/deburr.mjs';
+export { endsWith } from './string/endsWith.mjs';
+export { escape } from './string/escape.mjs';
+export { escapeRegExp } from './string/escapeRegExp.mjs';
+export { kebabCase } from './string/kebabCase.mjs';
+export { lowerCase } from './string/lowerCase.mjs';
+export { lowerFirst } from './string/lowerFirst.mjs';
+export { pad } from './string/pad.mjs';
+export { padEnd } from './string/padEnd.mjs';
+export { padStart } from './string/padStart.mjs';
+export { repeat } from './string/repeat.mjs';
+export { replace } from './string/replace.mjs';
+export { snakeCase } from './string/snakeCase.mjs';
+export { split } from './string/split.mjs';
+export { startCase } from './string/startCase.mjs';
+export { startsWith } from './string/startsWith.mjs';
+export { template, templateSettings } from './string/template.mjs';
+export { toLower } from './string/toLower.mjs';
+export { toUpper } from './string/toUpper.mjs';
+export { trim } from './string/trim.mjs';
+export { trimEnd } from './string/trimEnd.mjs';
+export { trimStart } from './string/trimStart.mjs';
+export { truncate } from './string/truncate.mjs';
+export { unescape } from './string/unescape.mjs';
+export { upperCase } from './string/upperCase.mjs';
+export { upperFirst } from './string/upperFirst.mjs';
+export { words } from './string/words.mjs';
+export { cond } from './util/cond.mjs';
+export { constant } from './util/constant.mjs';
+export { defaultTo } from './util/defaultTo.mjs';
+export { eq } from './util/eq.mjs';
+export { gt } from './util/gt.mjs';
+export { gte } from './util/gte.mjs';
+export { invoke } from './util/invoke.mjs';
+export { iteratee } from './util/iteratee.mjs';
+export { lt } from './util/lt.mjs';
+export { lte } from './util/lte.mjs';
+export { method } from './util/method.mjs';
+export { methodOf } from './util/methodOf.mjs';
+export { now } from './util/now.mjs';
+export { over } from './util/over.mjs';
+export { overEvery } from './util/overEvery.mjs';
+export { overSome } from './util/overSome.mjs';
+export { stubArray } from './util/stubArray.mjs';
+export { stubFalse } from './util/stubFalse.mjs';
+export { stubObject } from './util/stubObject.mjs';
+export { stubString } from './util/stubString.mjs';
+export { stubTrue } from './util/stubTrue.mjs';
+export { times } from './util/times.mjs';
+export { toArray } from './util/toArray.mjs';
+export { toFinite } from './util/toFinite.mjs';
+export { toInteger } from './util/toInteger.mjs';
+export { toLength } from './util/toLength.mjs';
+export { toNumber } from './util/toNumber.mjs';
+export { toPath } from './util/toPath.mjs';
+export { toPlainObject } from './util/toPlainObject.mjs';
+export { toSafeInteger } from './util/toSafeInteger.mjs';
+export { toString } from './util/toString.mjs';
+export { uniqueId } from './util/uniqueId.mjs';
+export { toolkit as default } from './toolkit.mjs';
Index: node_modules/es-toolkit/dist/compat/math/add.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/add.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/add.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Adds two numbers while safely handling `NaN` values.
+ *
+ * This function takes two numbers and returns their sum. If either of the numbers is `NaN`,
+ * the function returns `NaN`.
+ *
+ * @param {number} value - The first number to add.
+ * @param {number} other - The second number to add.
+ * @returns {number} The sum of the two numbers, or `NaN` if any input is `NaN`.
+ *
+ * @example
+ * const result1 = add(2, 3);    // result1 will be 5
+ * const result2 = add(5, NaN);  // result2 will be NaN
+ * const result3 = add(NaN, 10); // result3 will be NaN
+ */
+declare function add(value: number, other: number): number;
+
+export { add };
Index: node_modules/es-toolkit/dist/compat/math/add.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/add.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/add.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Adds two numbers while safely handling `NaN` values.
+ *
+ * This function takes two numbers and returns their sum. If either of the numbers is `NaN`,
+ * the function returns `NaN`.
+ *
+ * @param {number} value - The first number to add.
+ * @param {number} other - The second number to add.
+ * @returns {number} The sum of the two numbers, or `NaN` if any input is `NaN`.
+ *
+ * @example
+ * const result1 = add(2, 3);    // result1 will be 5
+ * const result2 = add(5, NaN);  // result2 will be NaN
+ * const result3 = add(NaN, 10); // result3 will be NaN
+ */
+declare function add(value: number, other: number): number;
+
+export { add };
Index: node_modules/es-toolkit/dist/compat/math/add.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/add.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/add.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('../util/toNumber.js');
+const toString = require('../util/toString.js');
+
+function add(value, other) {
+    if (value === undefined && other === undefined) {
+        return 0;
+    }
+    if (value === undefined || other === undefined) {
+        return value ?? other;
+    }
+    if (typeof value === 'string' || typeof other === 'string') {
+        value = toString.toString(value);
+        other = toString.toString(other);
+    }
+    else {
+        value = toNumber.toNumber(value);
+        other = toNumber.toNumber(other);
+    }
+    return value + other;
+}
+
+exports.add = add;
Index: node_modules/es-toolkit/dist/compat/math/add.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/add.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/add.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { toNumber } from '../util/toNumber.mjs';
+import { toString } from '../util/toString.mjs';
+
+function add(value, other) {
+    if (value === undefined && other === undefined) {
+        return 0;
+    }
+    if (value === undefined || other === undefined) {
+        return value ?? other;
+    }
+    if (typeof value === 'string' || typeof other === 'string') {
+        value = toString(value);
+        other = toString(other);
+    }
+    else {
+        value = toNumber(value);
+        other = toNumber(other);
+    }
+    return value + other;
+}
+
+export { add };
Index: node_modules/es-toolkit/dist/compat/math/ceil.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/ceil.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/ceil.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Computes number rounded up to precision.
+ *
+ * @param {number | string} number The number to round up.
+ * @param {number | string} precision The precision to round up to.
+ * @returns {number} Returns the rounded up number.
+ *
+ * @example
+ * ceil(4.006); // => 5
+ * ceil(6.004, 2); // => 6.01
+ * ceil(6040, -2); // => 6100
+ */
+declare function ceil(number: number, precision?: number): number;
+
+export { ceil };
Index: node_modules/es-toolkit/dist/compat/math/ceil.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/ceil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/ceil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Computes number rounded up to precision.
+ *
+ * @param {number | string} number The number to round up.
+ * @param {number | string} precision The precision to round up to.
+ * @returns {number} Returns the rounded up number.
+ *
+ * @example
+ * ceil(4.006); // => 5
+ * ceil(6.004, 2); // => 6.01
+ * ceil(6040, -2); // => 6100
+ */
+declare function ceil(number: number, precision?: number): number;
+
+export { ceil };
Index: node_modules/es-toolkit/dist/compat/math/ceil.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/ceil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/ceil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const decimalAdjust = require('../_internal/decimalAdjust.js');
+
+function ceil(number, precision = 0) {
+    return decimalAdjust.decimalAdjust('ceil', number, precision);
+}
+
+exports.ceil = ceil;
Index: node_modules/es-toolkit/dist/compat/math/ceil.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/ceil.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/ceil.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { decimalAdjust } from '../_internal/decimalAdjust.mjs';
+
+function ceil(number, precision = 0) {
+    return decimalAdjust('ceil', number, precision);
+}
+
+export { ceil };
Index: node_modules/es-toolkit/dist/compat/math/clamp.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/clamp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/clamp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Clamps a number within the specified bounds.
+ *
+ * @param {number} number The number to clamp
+ * @param {number} lower The lower bound
+ * @param {number} upper The upper bound
+ * @returns {number} Returns the clamped number
+ * @example
+ * clamp(3, 2, 4) // => 3
+ * clamp(0, 5, 10) // => 5
+ * clamp(15, 5, 10) // => 10
+ */
+declare function clamp(number: number, lower: number, upper: number): number;
+/**
+ * Clamps a number to an upper bound.
+ *
+ * @param {number} number The number to clamp
+ * @param {number} upper The upper bound
+ * @returns {number} Returns the clamped number
+ * @example
+ * clamp(5, 3) // => 3
+ * clamp(2, 3) // => 2
+ */
+declare function clamp(number: number, upper: number): number;
+
+export { clamp };
Index: node_modules/es-toolkit/dist/compat/math/clamp.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/clamp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/clamp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Clamps a number within the specified bounds.
+ *
+ * @param {number} number The number to clamp
+ * @param {number} lower The lower bound
+ * @param {number} upper The upper bound
+ * @returns {number} Returns the clamped number
+ * @example
+ * clamp(3, 2, 4) // => 3
+ * clamp(0, 5, 10) // => 5
+ * clamp(15, 5, 10) // => 10
+ */
+declare function clamp(number: number, lower: number, upper: number): number;
+/**
+ * Clamps a number to an upper bound.
+ *
+ * @param {number} number The number to clamp
+ * @param {number} upper The upper bound
+ * @returns {number} Returns the clamped number
+ * @example
+ * clamp(5, 3) // => 3
+ * clamp(2, 3) // => 2
+ */
+declare function clamp(number: number, upper: number): number;
+
+export { clamp };
Index: node_modules/es-toolkit/dist/compat/math/clamp.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/clamp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/clamp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const clamp$1 = require('../../math/clamp.js');
+
+function clamp(value, bound1, bound2) {
+    if (Number.isNaN(bound1)) {
+        bound1 = 0;
+    }
+    if (Number.isNaN(bound2)) {
+        bound2 = 0;
+    }
+    return clamp$1.clamp(value, bound1, bound2);
+}
+
+exports.clamp = clamp;
Index: node_modules/es-toolkit/dist/compat/math/clamp.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/clamp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/clamp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { clamp as clamp$1 } from '../../math/clamp.mjs';
+
+function clamp(value, bound1, bound2) {
+    if (Number.isNaN(bound1)) {
+        bound1 = 0;
+    }
+    if (Number.isNaN(bound2)) {
+        bound2 = 0;
+    }
+    return clamp$1(value, bound1, bound2);
+}
+
+export { clamp };
Index: node_modules/es-toolkit/dist/compat/math/divide.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/divide.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/divide.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Divide two numbers.
+ *
+ * If either of the numbers is `NaN`, the function returns `NaN`.
+ *
+ * @param {number} value The first number in a division.
+ * @param {number} other The second number in a division.
+ * @returns {number} The quotient of value and other.
+ *
+ * @example
+ * divide(6, 3); // => 2
+ * divide(2, NaN); // => NaN
+ * divide(NaN, 3); // => NaN
+ * divide(NaN, NaN); // => NaN
+ */
+declare function divide(value: number, other: number): number;
+
+export { divide };
Index: node_modules/es-toolkit/dist/compat/math/divide.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/divide.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/divide.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Divide two numbers.
+ *
+ * If either of the numbers is `NaN`, the function returns `NaN`.
+ *
+ * @param {number} value The first number in a division.
+ * @param {number} other The second number in a division.
+ * @returns {number} The quotient of value and other.
+ *
+ * @example
+ * divide(6, 3); // => 2
+ * divide(2, NaN); // => NaN
+ * divide(NaN, 3); // => NaN
+ * divide(NaN, NaN); // => NaN
+ */
+declare function divide(value: number, other: number): number;
+
+export { divide };
Index: node_modules/es-toolkit/dist/compat/math/divide.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/divide.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/divide.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('../util/toNumber.js');
+const toString = require('../util/toString.js');
+
+function divide(value, other) {
+    if (value === undefined && other === undefined) {
+        return 1;
+    }
+    if (value === undefined || other === undefined) {
+        return value ?? other;
+    }
+    if (typeof value === 'string' || typeof other === 'string') {
+        value = toString.toString(value);
+        other = toString.toString(other);
+    }
+    else {
+        value = toNumber.toNumber(value);
+        other = toNumber.toNumber(other);
+    }
+    return value / other;
+}
+
+exports.divide = divide;
Index: node_modules/es-toolkit/dist/compat/math/divide.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/divide.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/divide.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { toNumber } from '../util/toNumber.mjs';
+import { toString } from '../util/toString.mjs';
+
+function divide(value, other) {
+    if (value === undefined && other === undefined) {
+        return 1;
+    }
+    if (value === undefined || other === undefined) {
+        return value ?? other;
+    }
+    if (typeof value === 'string' || typeof other === 'string') {
+        value = toString(value);
+        other = toString(other);
+    }
+    else {
+        value = toNumber(value);
+        other = toNumber(other);
+    }
+    return value / other;
+}
+
+export { divide };
Index: node_modules/es-toolkit/dist/compat/math/floor.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/floor.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/floor.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Computes number rounded down to precision.
+ *
+ * @param {number | string} number The number to round down.
+ * @param {number | string} precision The precision to round down to.
+ * @returns {number} Returns the rounded down number.
+ *
+ * @example
+ * floor(4.006); // => 4
+ * floor(0.046, 2); // => 0.04
+ * floor(4060, -2); // => 4000
+ */
+declare function floor(number: number, precision?: number): number;
+
+export { floor };
Index: node_modules/es-toolkit/dist/compat/math/floor.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/floor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/floor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Computes number rounded down to precision.
+ *
+ * @param {number | string} number The number to round down.
+ * @param {number | string} precision The precision to round down to.
+ * @returns {number} Returns the rounded down number.
+ *
+ * @example
+ * floor(4.006); // => 4
+ * floor(0.046, 2); // => 0.04
+ * floor(4060, -2); // => 4000
+ */
+declare function floor(number: number, precision?: number): number;
+
+export { floor };
Index: node_modules/es-toolkit/dist/compat/math/floor.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/floor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/floor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const decimalAdjust = require('../_internal/decimalAdjust.js');
+
+function floor(number, precision = 0) {
+    return decimalAdjust.decimalAdjust('floor', number, precision);
+}
+
+exports.floor = floor;
Index: node_modules/es-toolkit/dist/compat/math/floor.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/floor.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/floor.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { decimalAdjust } from '../_internal/decimalAdjust.mjs';
+
+function floor(number, precision = 0) {
+    return decimalAdjust('floor', number, precision);
+}
+
+export { floor };
Index: node_modules/es-toolkit/dist/compat/math/inRange.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/inRange.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/inRange.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if the value is within a specified range.
+ *
+ * @param {number} value The value to check.
+ * @param {number} minimum The lower bound of the range (inclusive).
+ * @param {number} maximum The upper bound of the range (exclusive).
+ * @returns {boolean} `true` if the value is within the specified range, otherwise `false`.
+ * @throws {Error} Throws an error if the `minimum` is greater or equal than the `maximum`.
+ *
+ * @example
+ * const result1 = inRange(3, 5); // result1 will be true.
+ * const result2 = inRange(1, 2, 5); // result2 will be false.
+ * const result3 = inRange(1, 5, 2); // If the minimum is greater or equal than the maximum, an error is thrown.
+ */
+declare function inRange(value: number, minimum: number, maximum?: number): boolean;
+
+export { inRange };
Index: node_modules/es-toolkit/dist/compat/math/inRange.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/inRange.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/inRange.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if the value is within a specified range.
+ *
+ * @param {number} value The value to check.
+ * @param {number} minimum The lower bound of the range (inclusive).
+ * @param {number} maximum The upper bound of the range (exclusive).
+ * @returns {boolean} `true` if the value is within the specified range, otherwise `false`.
+ * @throws {Error} Throws an error if the `minimum` is greater or equal than the `maximum`.
+ *
+ * @example
+ * const result1 = inRange(3, 5); // result1 will be true.
+ * const result2 = inRange(1, 2, 5); // result2 will be false.
+ * const result3 = inRange(1, 5, 2); // If the minimum is greater or equal than the maximum, an error is thrown.
+ */
+declare function inRange(value: number, minimum: number, maximum?: number): boolean;
+
+export { inRange };
Index: node_modules/es-toolkit/dist/compat/math/inRange.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/inRange.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/inRange.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const inRange$1 = require('../../math/inRange.js');
+
+function inRange(value, minimum, maximum) {
+    if (!minimum) {
+        minimum = 0;
+    }
+    if (maximum != null && !maximum) {
+        maximum = 0;
+    }
+    if (minimum != null && typeof minimum !== 'number') {
+        minimum = Number(minimum);
+    }
+    if (maximum == null && minimum === 0) {
+        return false;
+    }
+    if (maximum != null && typeof maximum !== 'number') {
+        maximum = Number(maximum);
+    }
+    if (maximum != null && minimum > maximum) {
+        [minimum, maximum] = [maximum, minimum];
+    }
+    if (minimum === maximum) {
+        return false;
+    }
+    return inRange$1.inRange(value, minimum, maximum);
+}
+
+exports.inRange = inRange;
Index: node_modules/es-toolkit/dist/compat/math/inRange.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/inRange.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/inRange.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import { inRange as inRange$1 } from '../../math/inRange.mjs';
+
+function inRange(value, minimum, maximum) {
+    if (!minimum) {
+        minimum = 0;
+    }
+    if (maximum != null && !maximum) {
+        maximum = 0;
+    }
+    if (minimum != null && typeof minimum !== 'number') {
+        minimum = Number(minimum);
+    }
+    if (maximum == null && minimum === 0) {
+        return false;
+    }
+    if (maximum != null && typeof maximum !== 'number') {
+        maximum = Number(maximum);
+    }
+    if (maximum != null && minimum > maximum) {
+        [minimum, maximum] = [maximum, minimum];
+    }
+    if (minimum === maximum) {
+        return false;
+    }
+    return inRange$1(value, minimum, maximum);
+}
+
+export { inRange };
Index: node_modules/es-toolkit/dist/compat/math/max.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/max.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/max.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Finds the element in an array that has the maximum value.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} [items] - The array of elements to search. Defaults to an empty array.
+ * @returns {T | undefined} - The element with the maximum value, or undefined if the array is empty.
+ */
+declare function max<T>(items: ArrayLike<T> | null | undefined): T | undefined;
+
+export { max };
Index: node_modules/es-toolkit/dist/compat/math/max.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/max.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/max.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Finds the element in an array that has the maximum value.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} [items] - The array of elements to search. Defaults to an empty array.
+ * @returns {T | undefined} - The element with the maximum value, or undefined if the array is empty.
+ */
+declare function max<T>(items: ArrayLike<T> | null | undefined): T | undefined;
+
+export { max };
Index: node_modules/es-toolkit/dist/compat/math/max.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/max.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/max.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function max(items) {
+    if (!items || items.length === 0) {
+        return undefined;
+    }
+    let maxResult = undefined;
+    for (let i = 0; i < items.length; i++) {
+        const current = items[i];
+        if (current == null || Number.isNaN(current) || typeof current === 'symbol') {
+            continue;
+        }
+        if (maxResult === undefined || current > maxResult) {
+            maxResult = current;
+        }
+    }
+    return maxResult;
+}
+
+exports.max = max;
Index: node_modules/es-toolkit/dist/compat/math/max.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/max.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/max.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+function max(items) {
+    if (!items || items.length === 0) {
+        return undefined;
+    }
+    let maxResult = undefined;
+    for (let i = 0; i < items.length; i++) {
+        const current = items[i];
+        if (current == null || Number.isNaN(current) || typeof current === 'symbol') {
+            continue;
+        }
+        if (maxResult === undefined || current > maxResult) {
+            maxResult = current;
+        }
+    }
+    return maxResult;
+}
+
+export { max };
Index: node_modules/es-toolkit/dist/compat/math/maxBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/maxBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/maxBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Finds the element in an array that has the maximum value when applying
+ * the `iteratee` to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} items The array of elements to search.
+ * @param {ValueIteratee<T>} iteratee
+ * The criteria used to determine the maximum value.
+ *  - If a **function** is provided, it extracts a numeric value from each element.
+ *  - If a **string** is provided, it is treated as a key to extract values from the objects.
+ *  - If a **[key, value]** pair is provided, it matches elements with the specified key-value pair.
+ *  - If an **object** is provided, it matches elements that contain the specified properties.
+ * @returns {T | undefined} The element with the maximum value as determined by the `iteratee`.
+ * @example
+ * maxBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 3 }
+ * maxBy([], x => x.a); // Returns: undefined
+ * maxBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'john', age: 30 }
+ * maxBy([{ a: 1 }, { a: 2 }], 'a'); // Returns: { a: 2 }
+ * maxBy([{ a: 1 }, { a: 2 }], ['a', 1]); // Returns: { a: 1 }
+ * maxBy([{ a: 1 }, { a: 2 }], { a: 1 }); // Returns: { a: 1 }
+ */
+declare function maxBy<T>(items: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T | undefined;
+
+export { maxBy };
Index: node_modules/es-toolkit/dist/compat/math/maxBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/maxBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/maxBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Finds the element in an array that has the maximum value when applying
+ * the `iteratee` to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} items The array of elements to search.
+ * @param {ValueIteratee<T>} iteratee
+ * The criteria used to determine the maximum value.
+ *  - If a **function** is provided, it extracts a numeric value from each element.
+ *  - If a **string** is provided, it is treated as a key to extract values from the objects.
+ *  - If a **[key, value]** pair is provided, it matches elements with the specified key-value pair.
+ *  - If an **object** is provided, it matches elements that contain the specified properties.
+ * @returns {T | undefined} The element with the maximum value as determined by the `iteratee`.
+ * @example
+ * maxBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 3 }
+ * maxBy([], x => x.a); // Returns: undefined
+ * maxBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'john', age: 30 }
+ * maxBy([{ a: 1 }, { a: 2 }], 'a'); // Returns: { a: 2 }
+ * maxBy([{ a: 1 }, { a: 2 }], ['a', 1]); // Returns: { a: 1 }
+ * maxBy([{ a: 1 }, { a: 2 }], { a: 1 }); // Returns: { a: 1 }
+ */
+declare function maxBy<T>(items: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T | undefined;
+
+export { maxBy };
Index: node_modules/es-toolkit/dist/compat/math/maxBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/maxBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/maxBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const maxBy$1 = require('../../array/maxBy.js');
+const identity = require('../../function/identity.js');
+const iteratee = require('../util/iteratee.js');
+
+function maxBy(items, iteratee$1) {
+    if (items == null) {
+        return undefined;
+    }
+    return maxBy$1.maxBy(Array.from(items), iteratee.iteratee(iteratee$1 ?? identity.identity));
+}
+
+exports.maxBy = maxBy;
Index: node_modules/es-toolkit/dist/compat/math/maxBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/maxBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/maxBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { maxBy as maxBy$1 } from '../../array/maxBy.mjs';
+import { identity } from '../../function/identity.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function maxBy(items, iteratee$1) {
+    if (items == null) {
+        return undefined;
+    }
+    return maxBy$1(Array.from(items), iteratee(iteratee$1 ?? identity));
+}
+
+export { maxBy };
Index: node_modules/es-toolkit/dist/compat/math/mean.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/mean.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/mean.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Calculates the average of an array of numbers.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @param {ArrayLike<any> | null | undefined} nums - An array of numbers to calculate the average.
+ * @returns {number} The average of all the numbers in the array.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * const result = mean(numbers);
+ * // result will be 3
+ */
+declare function mean(nums: ArrayLike<any> | null | undefined): number;
+
+export { mean };
Index: node_modules/es-toolkit/dist/compat/math/mean.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/mean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/mean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Calculates the average of an array of numbers.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @param {ArrayLike<any> | null | undefined} nums - An array of numbers to calculate the average.
+ * @returns {number} The average of all the numbers in the array.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * const result = mean(numbers);
+ * // result will be 3
+ */
+declare function mean(nums: ArrayLike<any> | null | undefined): number;
+
+export { mean };
Index: node_modules/es-toolkit/dist/compat/math/mean.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sum = require('./sum.js');
+
+function mean(nums) {
+    const length = nums ? nums.length : 0;
+    return length === 0 ? NaN : sum.sum(nums) / length;
+}
+
+exports.mean = mean;
Index: node_modules/es-toolkit/dist/compat/math/mean.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/mean.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/mean.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { sum } from './sum.mjs';
+
+function mean(nums) {
+    const length = nums ? nums.length : 0;
+    return length === 0 ? NaN : sum(nums) / length;
+}
+
+export { mean };
Index: node_modules/es-toolkit/dist/compat/math/meanBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/meanBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/meanBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Calculates the average of an array of numbers when applying
+ * the `iteratee` function to each element.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items An array to calculate the average.
+ * @param {((element: T) => unknown) | PropertyKey | [PropertyKey, any] | PartialShallow<T>} iteratee
+ * The criteria used to determine the maximum value.
+ *  - If a **function** is provided, it extracts a numeric value from each element.
+ *  - If a **string** is provided, it is treated as a key to extract values from the objects.
+ *  - If a **[key, value]** pair is provided, it matches elements with the specified key-value pair.
+ *  - If an **object** is provided, it matches elements that contain the specified properties.
+ * @returns {number} The average of all the numbers as determined by the `iteratee` function.
+ *
+ * @example
+ * meanBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: 2
+ * meanBy([], x => x.a); // Returns: NaN
+ * meanBy([[2], [3], [1]], 0); // Returns: 2
+ * meanBy([{ a: 2 }, { a: 3 }, { a: 1 }], 'a'); // Returns: 2
+ */
+declare function meanBy<T>(items: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): number;
+
+export { meanBy };
Index: node_modules/es-toolkit/dist/compat/math/meanBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/meanBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/meanBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Calculates the average of an array of numbers when applying
+ * the `iteratee` function to each element.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items An array to calculate the average.
+ * @param {((element: T) => unknown) | PropertyKey | [PropertyKey, any] | PartialShallow<T>} iteratee
+ * The criteria used to determine the maximum value.
+ *  - If a **function** is provided, it extracts a numeric value from each element.
+ *  - If a **string** is provided, it is treated as a key to extract values from the objects.
+ *  - If a **[key, value]** pair is provided, it matches elements with the specified key-value pair.
+ *  - If an **object** is provided, it matches elements that contain the specified properties.
+ * @returns {number} The average of all the numbers as determined by the `iteratee` function.
+ *
+ * @example
+ * meanBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: 2
+ * meanBy([], x => x.a); // Returns: NaN
+ * meanBy([[2], [3], [1]], 0); // Returns: 2
+ * meanBy([{ a: 2 }, { a: 3 }, { a: 1 }], 'a'); // Returns: 2
+ */
+declare function meanBy<T>(items: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): number;
+
+export { meanBy };
Index: node_modules/es-toolkit/dist/compat/math/meanBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/meanBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/meanBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const meanBy$1 = require('../../math/meanBy.js');
+const iteratee = require('../util/iteratee.js');
+
+function meanBy(items, iteratee$1) {
+    if (items == null) {
+        return NaN;
+    }
+    return meanBy$1.meanBy(Array.from(items), iteratee.iteratee(iteratee$1 ?? identity.identity));
+}
+
+exports.meanBy = meanBy;
Index: node_modules/es-toolkit/dist/compat/math/meanBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/meanBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/meanBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { identity } from '../../function/identity.mjs';
+import { meanBy as meanBy$1 } from '../../math/meanBy.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function meanBy(items, iteratee$1) {
+    if (items == null) {
+        return NaN;
+    }
+    return meanBy$1(Array.from(items), iteratee(iteratee$1 ?? identity));
+}
+
+export { meanBy };
Index: node_modules/es-toolkit/dist/compat/math/min.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/min.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/min.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Finds the element in an array that has the minimum value.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} [items] - The array of elements to search. Defaults to an empty array.
+ * @returns {T | undefined} - The element with the minimum value, or undefined if the array is empty.
+ */
+declare function min<T>(items: ArrayLike<T> | null | undefined): T | undefined;
+
+export { min };
Index: node_modules/es-toolkit/dist/compat/math/min.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/min.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/min.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Finds the element in an array that has the minimum value.
+ *
+ * @template T - The type of elements in the array.
+ * @param {ArrayLike<T> | null | undefined} [items] - The array of elements to search. Defaults to an empty array.
+ * @returns {T | undefined} - The element with the minimum value, or undefined if the array is empty.
+ */
+declare function min<T>(items: ArrayLike<T> | null | undefined): T | undefined;
+
+export { min };
Index: node_modules/es-toolkit/dist/compat/math/min.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function min(items) {
+    if (!items || items.length === 0) {
+        return undefined;
+    }
+    let minResult = undefined;
+    for (let i = 0; i < items.length; i++) {
+        const current = items[i];
+        if (current == null || Number.isNaN(current) || typeof current === 'symbol') {
+            continue;
+        }
+        if (minResult === undefined || current < minResult) {
+            minResult = current;
+        }
+    }
+    return minResult;
+}
+
+exports.min = min;
Index: node_modules/es-toolkit/dist/compat/math/min.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/min.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/min.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+function min(items) {
+    if (!items || items.length === 0) {
+        return undefined;
+    }
+    let minResult = undefined;
+    for (let i = 0; i < items.length; i++) {
+        const current = items[i];
+        if (current == null || Number.isNaN(current) || typeof current === 'symbol') {
+            continue;
+        }
+        if (minResult === undefined || current < minResult) {
+            minResult = current;
+        }
+    }
+    return minResult;
+}
+
+export { min };
Index: node_modules/es-toolkit/dist/compat/math/minBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/minBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/minBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Finds the element in an array that has the minimum value when applying
+ * the `iteratee` to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items The array of elements to search.
+ * @param {((element: T) => number) | keyof T | [keyof T, unknown] | Partial<T>} iteratee
+ * The criteria used to determine the minimum value.
+ *  - If a **function** is provided, it extracts a numeric value from each element.
+ *  - If a **string** is provided, it is treated as a key to extract values from the objects.
+ *  - If a **[key, value]** pair is provided, it matches elements with the specified key-value pair.
+ *  - If an **object** is provided, it matches elements that contain the specified properties.
+ * @returns {T | undefined} The element with the minimum value as determined by the `iteratee`.
+ * @example
+ * minBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 1 }
+ * minBy([], x => x.a); // Returns: undefined
+ * minBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'joe', age: 26 }
+ * minBy([{ a: 1 }, { a: 2 }], 'a'); // Returns: { a: 1 }
+ * minBy([{ a: 1 }, { a: 2 }], ['a', 1]); // Returns: { a: 2 }
+ * minBy([{ a: 1 }, { a: 2 }], { a: 1 }); // Returns: { a: 2 }
+ */
+declare function minBy<T>(items: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T | undefined;
+
+export { minBy };
Index: node_modules/es-toolkit/dist/compat/math/minBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/minBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/minBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Finds the element in an array that has the minimum value when applying
+ * the `iteratee` to each element.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items The array of elements to search.
+ * @param {((element: T) => number) | keyof T | [keyof T, unknown] | Partial<T>} iteratee
+ * The criteria used to determine the minimum value.
+ *  - If a **function** is provided, it extracts a numeric value from each element.
+ *  - If a **string** is provided, it is treated as a key to extract values from the objects.
+ *  - If a **[key, value]** pair is provided, it matches elements with the specified key-value pair.
+ *  - If an **object** is provided, it matches elements that contain the specified properties.
+ * @returns {T | undefined} The element with the minimum value as determined by the `iteratee`.
+ * @example
+ * minBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: { a: 1 }
+ * minBy([], x => x.a); // Returns: undefined
+ * minBy(
+ *   [
+ *     { name: 'john', age: 30 },
+ *     { name: 'jane', age: 28 },
+ *     { name: 'joe', age: 26 },
+ *   ],
+ *   x => x.age
+ * ); // Returns: { name: 'joe', age: 26 }
+ * minBy([{ a: 1 }, { a: 2 }], 'a'); // Returns: { a: 1 }
+ * minBy([{ a: 1 }, { a: 2 }], ['a', 1]); // Returns: { a: 2 }
+ * minBy([{ a: 1 }, { a: 2 }], { a: 1 }); // Returns: { a: 2 }
+ */
+declare function minBy<T>(items: ArrayLike<T> | null | undefined, iteratee?: ValueIteratee<T>): T | undefined;
+
+export { minBy };
Index: node_modules/es-toolkit/dist/compat/math/minBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/minBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/minBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const minBy$1 = require('../../array/minBy.js');
+const identity = require('../../function/identity.js');
+const iteratee = require('../util/iteratee.js');
+
+function minBy(items, iteratee$1) {
+    if (items == null) {
+        return undefined;
+    }
+    return minBy$1.minBy(Array.from(items), iteratee.iteratee(iteratee$1 ?? identity.identity));
+}
+
+exports.minBy = minBy;
Index: node_modules/es-toolkit/dist/compat/math/minBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/minBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/minBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { minBy as minBy$1 } from '../../array/minBy.mjs';
+import { identity } from '../../function/identity.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function minBy(items, iteratee$1) {
+    if (items == null) {
+        return undefined;
+    }
+    return minBy$1(Array.from(items), iteratee(iteratee$1 ?? identity));
+}
+
+export { minBy };
Index: node_modules/es-toolkit/dist/compat/math/multiply.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/multiply.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/multiply.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Multiply two numbers.
+ *
+ * If either of the numbers is `NaN`, the function returns `NaN`.
+ *
+ * @param {number} value The first number in a multiplication
+ * @param {number} other The second number in a multiplication
+ * @returns {number} The product of value and other
+ *
+ * @example
+ * multiply(2, 3); // => 6
+ * multiply(2, NaN); // => NaN
+ * multiply(NaN, 3); // => NaN
+ * multiply(NaN, NaN); // => NaN
+ */
+declare function multiply(value: number, other: number): number;
+
+export { multiply };
Index: node_modules/es-toolkit/dist/compat/math/multiply.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/multiply.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/multiply.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Multiply two numbers.
+ *
+ * If either of the numbers is `NaN`, the function returns `NaN`.
+ *
+ * @param {number} value The first number in a multiplication
+ * @param {number} other The second number in a multiplication
+ * @returns {number} The product of value and other
+ *
+ * @example
+ * multiply(2, 3); // => 6
+ * multiply(2, NaN); // => NaN
+ * multiply(NaN, 3); // => NaN
+ * multiply(NaN, NaN); // => NaN
+ */
+declare function multiply(value: number, other: number): number;
+
+export { multiply };
Index: node_modules/es-toolkit/dist/compat/math/multiply.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/multiply.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/multiply.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('../util/toNumber.js');
+const toString = require('../util/toString.js');
+
+function multiply(value, other) {
+    if (value === undefined && other === undefined) {
+        return 1;
+    }
+    if (value === undefined || other === undefined) {
+        return value ?? other;
+    }
+    if (typeof value === 'string' || typeof other === 'string') {
+        value = toString.toString(value);
+        other = toString.toString(other);
+    }
+    else {
+        value = toNumber.toNumber(value);
+        other = toNumber.toNumber(other);
+    }
+    return value * other;
+}
+
+exports.multiply = multiply;
Index: node_modules/es-toolkit/dist/compat/math/multiply.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/multiply.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/multiply.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { toNumber } from '../util/toNumber.mjs';
+import { toString } from '../util/toString.mjs';
+
+function multiply(value, other) {
+    if (value === undefined && other === undefined) {
+        return 1;
+    }
+    if (value === undefined || other === undefined) {
+        return value ?? other;
+    }
+    if (typeof value === 'string' || typeof other === 'string') {
+        value = toString(value);
+        other = toString(other);
+    }
+    else {
+        value = toNumber(value);
+        other = toNumber(other);
+    }
+    return value * other;
+}
+
+export { multiply };
Index: node_modules/es-toolkit/dist/compat/math/parseInt.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/parseInt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/parseInt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts `string` to an integer of the specified radix. If `radix` is undefined or 0, a `radix` of 10 is used unless `string` is a hexadecimal, in which case a `radix` of 16 is used.
+ *
+ * @param {string} string The string to convert to an integer.
+ * @param {number} radix The radix to use when converting the string to an integer. Defaults to `0`.
+ * @param {unknown} guard Enables use as an iteratee for methods like `Array#map`.
+ * @returns {number} Returns the converted integer.
+ *
+ * @example
+ * parseInt('08'); // => 8
+ * parseInt('0x20'); // => 32
+ *
+ * parseInt('08', 10); // => 8
+ * parseInt('0x20', 16); // => 32
+ *
+ * ['6', '08', '10'].map(parseInt); // => [6, 8, 10]
+ */
+declare function parseInt(string: string, radix?: number): number;
+
+export { parseInt };
Index: node_modules/es-toolkit/dist/compat/math/parseInt.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/parseInt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/parseInt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts `string` to an integer of the specified radix. If `radix` is undefined or 0, a `radix` of 10 is used unless `string` is a hexadecimal, in which case a `radix` of 16 is used.
+ *
+ * @param {string} string The string to convert to an integer.
+ * @param {number} radix The radix to use when converting the string to an integer. Defaults to `0`.
+ * @param {unknown} guard Enables use as an iteratee for methods like `Array#map`.
+ * @returns {number} Returns the converted integer.
+ *
+ * @example
+ * parseInt('08'); // => 8
+ * parseInt('0x20'); // => 32
+ *
+ * parseInt('08', 10); // => 8
+ * parseInt('0x20', 16); // => 32
+ *
+ * ['6', '08', '10'].map(parseInt); // => [6, 8, 10]
+ */
+declare function parseInt(string: string, radix?: number): number;
+
+export { parseInt };
Index: node_modules/es-toolkit/dist/compat/math/parseInt.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/parseInt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/parseInt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function parseInt(string, radix = 0, guard) {
+    if (guard) {
+        radix = 0;
+    }
+    return Number.parseInt(string, radix);
+}
+
+exports.parseInt = parseInt;
Index: node_modules/es-toolkit/dist/compat/math/parseInt.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/parseInt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/parseInt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function parseInt(string, radix = 0, guard) {
+    if (guard) {
+        radix = 0;
+    }
+    return Number.parseInt(string, radix);
+}
+
+export { parseInt };
Index: node_modules/es-toolkit/dist/compat/math/random.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/random.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/random.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+/**
+ * Generate a random number between 0 and 1.
+ * @param {boolean} [floating] - Whether to return a floating point number. Defaults to true.
+ * @returns {number} A random number between 0 and 1.
+ * @example
+ * random(); // Returns a random number between 0 and 1
+ * random(true); // Returns a random floating point number between 0 and 1
+ * random(false); // Returns a random integer between 0 and 1
+ */
+declare function random(floating?: boolean): number;
+/**
+ * Generate a random number between 0 and max.
+ * @param {number} max - The upper bound (exclusive).
+ * @param {boolean} [floating] - Whether to return a floating point number. Defaults to true.
+ * @returns {number} A random number between 0 and max.
+ * @example
+ * random(5); // Returns a random number between 0 and 5
+ * random(10, true); // Returns a random floating point number between 0 and 10
+ * random(3, false); // Returns a random integer between 0 and 3
+ */
+declare function random(max: number, floating?: boolean): number;
+/**
+ * Generate a random number between min and max.
+ * @param {number} min - The lower bound (inclusive).
+ * @param {number} max - The upper bound (exclusive).
+ * @param {boolean} [floating] - Whether to return a floating point number. Defaults to true.
+ * @returns {number} A random number between min and max.
+ * @example
+ * random(1, 5); // Returns a random number between 1 and 5
+ * random(0, 10, true); // Returns a random floating point number between 0 and 10
+ * random(1, 6, false); // Returns a random integer between 1 and 6
+ */
+declare function random(min: number, max: number, floating?: boolean): number;
+/**
+ * Generate a random number between 0 and min, using guard object for special cases.
+ * @param {number} min - The upper bound (exclusive).
+ * @param {string | number} index - The index or key to check in the guard object.
+ * @param {object} guard - The guard object to validate the parameters.
+ * @returns {number} A random number between 0 and min.
+ * @example
+ * const guard = { 5: 5 };
+ * random(5, 5, guard); // Returns a random number between 0 and 5
+ */
+declare function random(min: number, index: string | number, guard: object): number;
+
+export { random };
Index: node_modules/es-toolkit/dist/compat/math/random.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/random.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/random.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+/**
+ * Generate a random number between 0 and 1.
+ * @param {boolean} [floating] - Whether to return a floating point number. Defaults to true.
+ * @returns {number} A random number between 0 and 1.
+ * @example
+ * random(); // Returns a random number between 0 and 1
+ * random(true); // Returns a random floating point number between 0 and 1
+ * random(false); // Returns a random integer between 0 and 1
+ */
+declare function random(floating?: boolean): number;
+/**
+ * Generate a random number between 0 and max.
+ * @param {number} max - The upper bound (exclusive).
+ * @param {boolean} [floating] - Whether to return a floating point number. Defaults to true.
+ * @returns {number} A random number between 0 and max.
+ * @example
+ * random(5); // Returns a random number between 0 and 5
+ * random(10, true); // Returns a random floating point number between 0 and 10
+ * random(3, false); // Returns a random integer between 0 and 3
+ */
+declare function random(max: number, floating?: boolean): number;
+/**
+ * Generate a random number between min and max.
+ * @param {number} min - The lower bound (inclusive).
+ * @param {number} max - The upper bound (exclusive).
+ * @param {boolean} [floating] - Whether to return a floating point number. Defaults to true.
+ * @returns {number} A random number between min and max.
+ * @example
+ * random(1, 5); // Returns a random number between 1 and 5
+ * random(0, 10, true); // Returns a random floating point number between 0 and 10
+ * random(1, 6, false); // Returns a random integer between 1 and 6
+ */
+declare function random(min: number, max: number, floating?: boolean): number;
+/**
+ * Generate a random number between 0 and min, using guard object for special cases.
+ * @param {number} min - The upper bound (exclusive).
+ * @param {string | number} index - The index or key to check in the guard object.
+ * @param {object} guard - The guard object to validate the parameters.
+ * @returns {number} A random number between 0 and min.
+ * @example
+ * const guard = { 5: 5 };
+ * random(5, 5, guard); // Returns a random number between 0 and 5
+ */
+declare function random(min: number, index: string | number, guard: object): number;
+
+export { random };
Index: node_modules/es-toolkit/dist/compat/math/random.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/random.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/random.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const clamp = require('./clamp.js');
+const random$1 = require('../../math/random.js');
+const randomInt = require('../../math/randomInt.js');
+
+function random(...args) {
+    let minimum = 0;
+    let maximum = 1;
+    let floating = false;
+    switch (args.length) {
+        case 1: {
+            if (typeof args[0] === 'boolean') {
+                floating = args[0];
+            }
+            else {
+                maximum = args[0];
+            }
+            break;
+        }
+        case 2: {
+            if (typeof args[1] === 'boolean') {
+                maximum = args[0];
+                floating = args[1];
+            }
+            else {
+                minimum = args[0];
+                maximum = args[1];
+            }
+        }
+        case 3: {
+            if (typeof args[2] === 'object' && args[2] != null && args[2][args[1]] === args[0]) {
+                minimum = 0;
+                maximum = args[0];
+                floating = false;
+            }
+            else {
+                minimum = args[0];
+                maximum = args[1];
+                floating = args[2];
+            }
+        }
+    }
+    if (typeof minimum !== 'number') {
+        minimum = Number(minimum);
+    }
+    if (typeof maximum !== 'number') {
+        minimum = Number(maximum);
+    }
+    if (!minimum) {
+        minimum = 0;
+    }
+    if (!maximum) {
+        maximum = 0;
+    }
+    if (minimum > maximum) {
+        [minimum, maximum] = [maximum, minimum];
+    }
+    minimum = clamp.clamp(minimum, -Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
+    maximum = clamp.clamp(maximum, -Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
+    if (minimum === maximum) {
+        return minimum;
+    }
+    if (floating) {
+        return random$1.random(minimum, maximum + 1);
+    }
+    else {
+        return randomInt.randomInt(minimum, maximum + 1);
+    }
+}
+
+exports.random = random;
Index: node_modules/es-toolkit/dist/compat/math/random.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/random.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/random.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+import { clamp } from './clamp.mjs';
+import { random as random$1 } from '../../math/random.mjs';
+import { randomInt } from '../../math/randomInt.mjs';
+
+function random(...args) {
+    let minimum = 0;
+    let maximum = 1;
+    let floating = false;
+    switch (args.length) {
+        case 1: {
+            if (typeof args[0] === 'boolean') {
+                floating = args[0];
+            }
+            else {
+                maximum = args[0];
+            }
+            break;
+        }
+        case 2: {
+            if (typeof args[1] === 'boolean') {
+                maximum = args[0];
+                floating = args[1];
+            }
+            else {
+                minimum = args[0];
+                maximum = args[1];
+            }
+        }
+        case 3: {
+            if (typeof args[2] === 'object' && args[2] != null && args[2][args[1]] === args[0]) {
+                minimum = 0;
+                maximum = args[0];
+                floating = false;
+            }
+            else {
+                minimum = args[0];
+                maximum = args[1];
+                floating = args[2];
+            }
+        }
+    }
+    if (typeof minimum !== 'number') {
+        minimum = Number(minimum);
+    }
+    if (typeof maximum !== 'number') {
+        minimum = Number(maximum);
+    }
+    if (!minimum) {
+        minimum = 0;
+    }
+    if (!maximum) {
+        maximum = 0;
+    }
+    if (minimum > maximum) {
+        [minimum, maximum] = [maximum, minimum];
+    }
+    minimum = clamp(minimum, -Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
+    maximum = clamp(maximum, -Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
+    if (minimum === maximum) {
+        return minimum;
+    }
+    if (floating) {
+        return random$1(minimum, maximum + 1);
+    }
+    else {
+        return randomInt(minimum, maximum + 1);
+    }
+}
+
+export { random };
Index: node_modules/es-toolkit/dist/compat/math/range.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/range.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/range.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Creates an array of numbers progressing from `start` up to, but not including, `end`.
+ *
+ * @param {number} start - The starting number of the range (inclusive)
+ * @param {number} end - The end number of the range (exclusive)
+ * @param {number} step - The value to increment or decrement by
+ * @returns {number[]} An array of numbers from start to end
+ * @example
+ * range(4)
+ * // => [0, 1, 2, 3]
+ *
+ * range(1, 5)
+ * // => [1, 2, 3, 4]
+ *
+ * range(0, 20, 5)
+ * // => [0, 5, 10, 15]
+ */
+declare function range(start: number, end?: number, step?: number): number[];
+/**
+ * Creates an array of numbers progressing from 0 up to, but not including, `end`.
+ * Used internally when range is called as an iteratee.
+ *
+ * @param {number} end - The end of the range (exclusive)
+ * @param {string|number} index - The index argument passed to the iteratee
+ * @param {object} guard - The guard object passed to the iteratee
+ * @returns {number[]} An array of numbers from 0 to end
+ * @example
+ * [1, 2, 3].map(range)
+ * // => [[0], [0, 1], [0, 1, 2]]
+ */
+declare function range(end: number, index: string | number, guard: object): number[];
+
+export { range };
Index: node_modules/es-toolkit/dist/compat/math/range.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/range.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/range.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Creates an array of numbers progressing from `start` up to, but not including, `end`.
+ *
+ * @param {number} start - The starting number of the range (inclusive)
+ * @param {number} end - The end number of the range (exclusive)
+ * @param {number} step - The value to increment or decrement by
+ * @returns {number[]} An array of numbers from start to end
+ * @example
+ * range(4)
+ * // => [0, 1, 2, 3]
+ *
+ * range(1, 5)
+ * // => [1, 2, 3, 4]
+ *
+ * range(0, 20, 5)
+ * // => [0, 5, 10, 15]
+ */
+declare function range(start: number, end?: number, step?: number): number[];
+/**
+ * Creates an array of numbers progressing from 0 up to, but not including, `end`.
+ * Used internally when range is called as an iteratee.
+ *
+ * @param {number} end - The end of the range (exclusive)
+ * @param {string|number} index - The index argument passed to the iteratee
+ * @param {object} guard - The guard object passed to the iteratee
+ * @returns {number[]} An array of numbers from 0 to end
+ * @example
+ * [1, 2, 3].map(range)
+ * // => [[0], [0, 1], [0, 1, 2]]
+ */
+declare function range(end: number, index: string | number, guard: object): number[];
+
+export { range };
Index: node_modules/es-toolkit/dist/compat/math/range.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isIterateeCall = require('../_internal/isIterateeCall.js');
+const toFinite = require('../util/toFinite.js');
+
+function range(start, end, step) {
+    if (step && typeof step !== 'number' && isIterateeCall.isIterateeCall(start, end, step)) {
+        end = step = undefined;
+    }
+    start = toFinite.toFinite(start);
+    if (end === undefined) {
+        end = start;
+        start = 0;
+    }
+    else {
+        end = toFinite.toFinite(end);
+    }
+    step = step === undefined ? (start < end ? 1 : -1) : toFinite.toFinite(step);
+    const length = Math.max(Math.ceil((end - start) / (step || 1)), 0);
+    const result = new Array(length);
+    for (let index = 0; index < length; index++) {
+        result[index] = start;
+        start += step;
+    }
+    return result;
+}
+
+exports.range = range;
Index: node_modules/es-toolkit/dist/compat/math/range.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/range.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/range.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import { isIterateeCall } from '../_internal/isIterateeCall.mjs';
+import { toFinite } from '../util/toFinite.mjs';
+
+function range(start, end, step) {
+    if (step && typeof step !== 'number' && isIterateeCall(start, end, step)) {
+        end = step = undefined;
+    }
+    start = toFinite(start);
+    if (end === undefined) {
+        end = start;
+        start = 0;
+    }
+    else {
+        end = toFinite(end);
+    }
+    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
+    const length = Math.max(Math.ceil((end - start) / (step || 1)), 0);
+    const result = new Array(length);
+    for (let index = 0; index < length; index++) {
+        result[index] = start;
+        start += step;
+    }
+    return result;
+}
+
+export { range };
Index: node_modules/es-toolkit/dist/compat/math/rangeRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/rangeRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/rangeRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates an array of numbers from `start` to `end` with optional `step`.
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} [end] - The end number of the range (exclusive).
+ * @param {number} [step] - The step value for the range.
+ * @returns {number[]} An array of numbers from `start` to `end` with the specified `step`.
+ * @example
+ * // Returns [0, 1, 2, 3]
+ * rangeRight(4);
+ * @example
+ * // Returns [0, 2, 4, 6]
+ * rangeRight(0, 8, 2);
+ * @example
+ * // Returns [5, 4, 3, 2, 1]
+ * rangeRight(1, 6);
+ */
+declare function rangeRight(start: number, end?: number, step?: number): number[];
+/**
+ * Creates an array of numbers from 0 to `end` with step 1.
+ * Used when called as an iteratee for methods like `_.map`.
+ * @param {number} end - The end number of the range (exclusive).
+ * @param {string | number} index - The index parameter (used for iteratee calls).
+ * @param {object} guard - The guard parameter (used for iteratee calls).
+ * @returns {number[]} An array of numbers from 0 to `end` with step 1.
+ * @example
+ * // Returns [0, 1, 2, 3]
+ * rangeRight(4, 'index', {});
+ */
+declare function rangeRight(end: number, index: string | number, guard: object): number[];
+
+export { rangeRight };
Index: node_modules/es-toolkit/dist/compat/math/rangeRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/rangeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/rangeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates an array of numbers from `start` to `end` with optional `step`.
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} [end] - The end number of the range (exclusive).
+ * @param {number} [step] - The step value for the range.
+ * @returns {number[]} An array of numbers from `start` to `end` with the specified `step`.
+ * @example
+ * // Returns [0, 1, 2, 3]
+ * rangeRight(4);
+ * @example
+ * // Returns [0, 2, 4, 6]
+ * rangeRight(0, 8, 2);
+ * @example
+ * // Returns [5, 4, 3, 2, 1]
+ * rangeRight(1, 6);
+ */
+declare function rangeRight(start: number, end?: number, step?: number): number[];
+/**
+ * Creates an array of numbers from 0 to `end` with step 1.
+ * Used when called as an iteratee for methods like `_.map`.
+ * @param {number} end - The end number of the range (exclusive).
+ * @param {string | number} index - The index parameter (used for iteratee calls).
+ * @param {object} guard - The guard parameter (used for iteratee calls).
+ * @returns {number[]} An array of numbers from 0 to `end` with step 1.
+ * @example
+ * // Returns [0, 1, 2, 3]
+ * rangeRight(4, 'index', {});
+ */
+declare function rangeRight(end: number, index: string | number, guard: object): number[];
+
+export { rangeRight };
Index: node_modules/es-toolkit/dist/compat/math/rangeRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/rangeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/rangeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isIterateeCall = require('../_internal/isIterateeCall.js');
+const toFinite = require('../util/toFinite.js');
+
+function rangeRight(start, end, step) {
+    if (step && typeof step !== 'number' && isIterateeCall.isIterateeCall(start, end, step)) {
+        end = step = undefined;
+    }
+    start = toFinite.toFinite(start);
+    if (end === undefined) {
+        end = start;
+        start = 0;
+    }
+    else {
+        end = toFinite.toFinite(end);
+    }
+    step = step === undefined ? (start < end ? 1 : -1) : toFinite.toFinite(step);
+    const length = Math.max(Math.ceil((end - start) / (step || 1)), 0);
+    const result = new Array(length);
+    for (let index = length - 1; index >= 0; index--) {
+        result[index] = start;
+        start += step;
+    }
+    return result;
+}
+
+exports.rangeRight = rangeRight;
Index: node_modules/es-toolkit/dist/compat/math/rangeRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/rangeRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/rangeRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import { isIterateeCall } from '../_internal/isIterateeCall.mjs';
+import { toFinite } from '../util/toFinite.mjs';
+
+function rangeRight(start, end, step) {
+    if (step && typeof step !== 'number' && isIterateeCall(start, end, step)) {
+        end = step = undefined;
+    }
+    start = toFinite(start);
+    if (end === undefined) {
+        end = start;
+        start = 0;
+    }
+    else {
+        end = toFinite(end);
+    }
+    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
+    const length = Math.max(Math.ceil((end - start) / (step || 1)), 0);
+    const result = new Array(length);
+    for (let index = length - 1; index >= 0; index--) {
+        result[index] = start;
+        start += step;
+    }
+    return result;
+}
+
+export { rangeRight };
Index: node_modules/es-toolkit/dist/compat/math/round.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/round.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/round.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Computes number rounded to precision.
+ *
+ * @param {number} number  The number to round.
+ * @param {number} precision The precision to round to.
+ * @returns {number} Returns the rounded number.
+ *
+ * @example
+ * round(4.006); // => 4
+ * round(4.006, 2); // => 4.01
+ * round(4060, -2); // => 4100
+ */
+declare function round(number: number, precision?: number): number;
+
+export { round };
Index: node_modules/es-toolkit/dist/compat/math/round.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/round.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/round.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Computes number rounded to precision.
+ *
+ * @param {number} number  The number to round.
+ * @param {number} precision The precision to round to.
+ * @returns {number} Returns the rounded number.
+ *
+ * @example
+ * round(4.006); // => 4
+ * round(4.006, 2); // => 4.01
+ * round(4060, -2); // => 4100
+ */
+declare function round(number: number, precision?: number): number;
+
+export { round };
Index: node_modules/es-toolkit/dist/compat/math/round.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const decimalAdjust = require('../_internal/decimalAdjust.js');
+
+function round(number, precision = 0) {
+    return decimalAdjust.decimalAdjust('round', number, precision);
+}
+
+exports.round = round;
Index: node_modules/es-toolkit/dist/compat/math/round.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/round.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/round.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { decimalAdjust } from '../_internal/decimalAdjust.mjs';
+
+function round(number, precision = 0) {
+    return decimalAdjust('round', number, precision);
+}
+
+export { round };
Index: node_modules/es-toolkit/dist/compat/math/subtract.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/subtract.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/subtract.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Subtracts one number from another.
+ *
+ * If either of the numbers is `NaN`, the function returns `NaN`.
+ *
+ * @param {number} value The first number. (minuend)
+ * @param {number} other The second number.(subtrahend)
+ * @returns {number} The difference of the two numbers, or `NaN` if any input is `NaN`.
+ *
+ * @example
+ * subtract(6, 3); // => 3
+ * subtract(6, NaN); // => NaN
+ * subtract(NaN, 3); // => NaN
+ */
+declare function subtract(value: number, other: number): number;
+
+export { subtract };
Index: node_modules/es-toolkit/dist/compat/math/subtract.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/subtract.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/subtract.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Subtracts one number from another.
+ *
+ * If either of the numbers is `NaN`, the function returns `NaN`.
+ *
+ * @param {number} value The first number. (minuend)
+ * @param {number} other The second number.(subtrahend)
+ * @returns {number} The difference of the two numbers, or `NaN` if any input is `NaN`.
+ *
+ * @example
+ * subtract(6, 3); // => 3
+ * subtract(6, NaN); // => NaN
+ * subtract(NaN, 3); // => NaN
+ */
+declare function subtract(value: number, other: number): number;
+
+export { subtract };
Index: node_modules/es-toolkit/dist/compat/math/subtract.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/subtract.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/subtract.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('../util/toNumber.js');
+const toString = require('../util/toString.js');
+
+function subtract(value, other) {
+    if (value === undefined && other === undefined) {
+        return 0;
+    }
+    if (value === undefined || other === undefined) {
+        return value ?? other;
+    }
+    if (typeof value === 'string' || typeof other === 'string') {
+        value = toString.toString(value);
+        other = toString.toString(other);
+    }
+    else {
+        value = toNumber.toNumber(value);
+        other = toNumber.toNumber(other);
+    }
+    return value - other;
+}
+
+exports.subtract = subtract;
Index: node_modules/es-toolkit/dist/compat/math/subtract.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/subtract.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/subtract.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { toNumber } from '../util/toNumber.mjs';
+import { toString } from '../util/toString.mjs';
+
+function subtract(value, other) {
+    if (value === undefined && other === undefined) {
+        return 0;
+    }
+    if (value === undefined || other === undefined) {
+        return value ?? other;
+    }
+    if (typeof value === 'string' || typeof other === 'string') {
+        value = toString(value);
+        other = toString(other);
+    }
+    else {
+        value = toNumber(value);
+        other = toNumber(other);
+    }
+    return value - other;
+}
+
+export { subtract };
Index: node_modules/es-toolkit/dist/compat/math/sum.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/sum.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/sum.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Computes the sum of the values that are returned by the `iteratee` function.
+ *
+ * It does not coerce values to `number`.
+ *
+ * @param {ArrayLike<any> | null | undefined} array - The array to iterate over.
+ * @returns {number} Returns the sum.
+ *
+ * @example
+ * sum([1, 2, 3]); // => 6
+ * sum([1n, 2n, 3n]); // => 6n
+ * sum(["1", "2"]); // => "12"
+ * sum([1, undefined, 2]); // => 3
+ * sum(null); // => 0
+ * sum(undefined); // => 0
+ */
+declare function sum(array: ArrayLike<any> | null | undefined): number;
+
+export { sum };
Index: node_modules/es-toolkit/dist/compat/math/sum.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/sum.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/sum.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Computes the sum of the values that are returned by the `iteratee` function.
+ *
+ * It does not coerce values to `number`.
+ *
+ * @param {ArrayLike<any> | null | undefined} array - The array to iterate over.
+ * @returns {number} Returns the sum.
+ *
+ * @example
+ * sum([1, 2, 3]); // => 6
+ * sum([1n, 2n, 3n]); // => 6n
+ * sum(["1", "2"]); // => "12"
+ * sum([1, undefined, 2]); // => 3
+ * sum(null); // => 0
+ * sum(undefined); // => 0
+ */
+declare function sum(array: ArrayLike<any> | null | undefined): number;
+
+export { sum };
Index: node_modules/es-toolkit/dist/compat/math/sum.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sumBy = require('./sumBy.js');
+
+function sum(array) {
+    return sumBy.sumBy(array);
+}
+
+exports.sum = sum;
Index: node_modules/es-toolkit/dist/compat/math/sum.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/sum.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/sum.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { sumBy } from './sumBy.mjs';
+
+function sum(array) {
+    return sumBy(array);
+}
+
+export { sum };
Index: node_modules/es-toolkit/dist/compat/math/sumBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/sumBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/sumBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Computes the sum of the values that are returned by the `iteratee` function.
+ *
+ * It does not coerce values to `number`.
+ *
+ * @template T - The type of the array elements.
+ * @param {ArrayLike<T> | null | undefined} array - The array to iterate over.
+ * @param {((value: T) => number) | string} iteratee - The function invoked per iteration.
+ * @returns {number} Returns the sum.
+ *
+ * @example
+ * sumBy([1, undefined, 2], value => value); // => 3
+ * sumBy(null); // => 0
+ * sumBy(undefined); // => 0
+ * sumBy([1, 2, 3]); // => 6
+ * sumBy([1n, 2n, 3n]); // => 6n
+ * sumBy([{ a: "1" }, { a: "2" }], object => object.a); // => "12"
+ */
+declare function sumBy<T>(array: ArrayLike<T> | null | undefined, iteratee?: ((value: T) => number) | string): number;
+
+export { sumBy };
Index: node_modules/es-toolkit/dist/compat/math/sumBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/math/sumBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/sumBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Computes the sum of the values that are returned by the `iteratee` function.
+ *
+ * It does not coerce values to `number`.
+ *
+ * @template T - The type of the array elements.
+ * @param {ArrayLike<T> | null | undefined} array - The array to iterate over.
+ * @param {((value: T) => number) | string} iteratee - The function invoked per iteration.
+ * @returns {number} Returns the sum.
+ *
+ * @example
+ * sumBy([1, undefined, 2], value => value); // => 3
+ * sumBy(null); // => 0
+ * sumBy(undefined); // => 0
+ * sumBy([1, 2, 3]); // => 6
+ * sumBy([1n, 2n, 3n]); // => 6n
+ * sumBy([{ a: "1" }, { a: "2" }], object => object.a); // => "12"
+ */
+declare function sumBy<T>(array: ArrayLike<T> | null | undefined, iteratee?: ((value: T) => number) | string): number;
+
+export { sumBy };
Index: node_modules/es-toolkit/dist/compat/math/sumBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/math/sumBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/sumBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const iteratee = require('../util/iteratee.js');
+
+function sumBy(array, iteratee$1) {
+    if (!array || !array.length) {
+        return 0;
+    }
+    if (iteratee$1 != null) {
+        iteratee$1 = iteratee.iteratee(iteratee$1);
+    }
+    let result = undefined;
+    for (let i = 0; i < array.length; i++) {
+        const current = iteratee$1 ? iteratee$1(array[i]) : array[i];
+        if (current !== undefined) {
+            if (result === undefined) {
+                result = current;
+            }
+            else {
+                result += current;
+            }
+        }
+    }
+    return result;
+}
+
+exports.sumBy = sumBy;
Index: node_modules/es-toolkit/dist/compat/math/sumBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/math/sumBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/math/sumBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import { iteratee } from '../util/iteratee.mjs';
+
+function sumBy(array, iteratee$1) {
+    if (!array || !array.length) {
+        return 0;
+    }
+    if (iteratee$1 != null) {
+        iteratee$1 = iteratee(iteratee$1);
+    }
+    let result = undefined;
+    for (let i = 0; i < array.length; i++) {
+        const current = iteratee$1 ? iteratee$1(array[i]) : array[i];
+        if (current !== undefined) {
+            if (result === undefined) {
+                result = current;
+            }
+            else {
+                result += current;
+            }
+        }
+    }
+    return result;
+}
+
+export { sumBy };
Index: node_modules/es-toolkit/dist/compat/object/assign.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assign.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assign.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+/**
+ * Assigns properties from one source object to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source - The source object whose properties will be assigned to the target object.
+ * @returns {T & U} The updated target object with properties from the source object assigned.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ * const result = assign(target, source);
+ * // => { a: 1, b: 3, c: 4 }
+ */
+declare function assign<T, U>(object: T, source: U): T & U;
+/**
+ * Assigns properties from two source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @returns {T & U & V} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const result = assign(target, source1, source2);
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assign<T, U, V>(object: T, source1: U, source2: V): T & U & V;
+/**
+ * Assigns properties from three source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @returns {T & U & V & W} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const result = assign(target, source1, source2, source3);
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assign<T, U, V, W>(object: T, source1: U, source2: V, source3: W): T & U & V & W;
+/**
+ * Assigns properties from four source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @template X - The type of the fourth source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {X} source4 - The fourth source object whose properties will be assigned to the target object.
+ * @returns {T & U & V & W & X} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ * const result = assign(target, source1, source2, source3, source4);
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function assign<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;
+/**
+ * Assigns properties from a target object to itself.
+ *
+ * @template T - The type of the target object.
+ * @param {T} object - The target object.
+ * @returns {T} The target object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const result = assign(target);
+ * // => { a: 1, b: 2 }
+ */
+declare function assign<T>(object: T): T;
+/**
+ * Assigns properties from multiple source objects to a target object.
+ *
+ * @param {any} object - The target object to which properties will be assigned.
+ * @param {...any[]} otherArgs - The source objects whose properties will be assigned to the target object.
+ * @returns {any} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const result = assign(target, { b: 2 }, { c: 3 }, { d: 4 });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assign(object: any, ...otherArgs: any[]): any;
+
+export { assign };
Index: node_modules/es-toolkit/dist/compat/object/assign.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assign.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assign.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+/**
+ * Assigns properties from one source object to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source - The source object whose properties will be assigned to the target object.
+ * @returns {T & U} The updated target object with properties from the source object assigned.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ * const result = assign(target, source);
+ * // => { a: 1, b: 3, c: 4 }
+ */
+declare function assign<T, U>(object: T, source: U): T & U;
+/**
+ * Assigns properties from two source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @returns {T & U & V} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const result = assign(target, source1, source2);
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assign<T, U, V>(object: T, source1: U, source2: V): T & U & V;
+/**
+ * Assigns properties from three source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @returns {T & U & V & W} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const result = assign(target, source1, source2, source3);
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assign<T, U, V, W>(object: T, source1: U, source2: V, source3: W): T & U & V & W;
+/**
+ * Assigns properties from four source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @template X - The type of the fourth source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {X} source4 - The fourth source object whose properties will be assigned to the target object.
+ * @returns {T & U & V & W & X} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ * const result = assign(target, source1, source2, source3, source4);
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function assign<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;
+/**
+ * Assigns properties from a target object to itself.
+ *
+ * @template T - The type of the target object.
+ * @param {T} object - The target object.
+ * @returns {T} The target object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const result = assign(target);
+ * // => { a: 1, b: 2 }
+ */
+declare function assign<T>(object: T): T;
+/**
+ * Assigns properties from multiple source objects to a target object.
+ *
+ * @param {any} object - The target object to which properties will be assigned.
+ * @param {...any[]} otherArgs - The source objects whose properties will be assigned to the target object.
+ * @returns {any} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const result = assign(target, { b: 2 }, { c: 3 }, { d: 4 });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assign(object: any, ...otherArgs: any[]): any;
+
+export { assign };
Index: node_modules/es-toolkit/dist/compat/object/assign.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assign.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assign.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keys = require('./keys.js');
+const eq = require('../util/eq.js');
+
+function assign(object, ...sources) {
+    for (let i = 0; i < sources.length; i++) {
+        assignImpl(object, sources[i]);
+    }
+    return object;
+}
+function assignImpl(object, source) {
+    const keys$1 = keys.keys(source);
+    for (let i = 0; i < keys$1.length; i++) {
+        const key = keys$1[i];
+        if (!(key in object) || !eq.eq(object[key], source[key])) {
+            object[key] = source[key];
+        }
+    }
+}
+
+exports.assign = assign;
Index: node_modules/es-toolkit/dist/compat/object/assign.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assign.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assign.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { keys } from './keys.mjs';
+import { eq } from '../util/eq.mjs';
+
+function assign(object, ...sources) {
+    for (let i = 0; i < sources.length; i++) {
+        assignImpl(object, sources[i]);
+    }
+    return object;
+}
+function assignImpl(object, source) {
+    const keys$1 = keys(source);
+    for (let i = 0; i < keys$1.length; i++) {
+        const key = keys$1[i];
+        if (!(key in object) || !eq(object[key], source[key])) {
+            object[key] = source[key];
+        }
+    }
+}
+
+export { assign };
Index: node_modules/es-toolkit/dist/compat/object/assignIn.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,111 @@
+/**
+ * Assigns own and inherited properties from one source object to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source - The source object whose properties will be assigned to the target object.
+ * @returns {T & U} The updated target object with properties from the source object assigned.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ * const result = assignIn(target, source);
+ * // => { a: 1, b: 3, c: 4 }
+ */
+declare function assignIn<T, U>(object: T, source: U): T & U;
+/**
+ * Assigns own and inherited properties from two source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @returns {T & U & V} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const result = assignIn(target, source1, source2);
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignIn<T, U, V>(object: T, source1: U, source2: V): T & U & V;
+/**
+ * Assigns own and inherited properties from three source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @returns {T & U & V & W} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const result = assignIn(target, source1, source2, source3);
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assignIn<T, U, V, W>(object: T, source1: U, source2: V, source3: W): T & U & V & W;
+/**
+ * Assigns own and inherited properties from four source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @template X - The type of the fourth source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {X} source4 - The fourth source object whose properties will be assigned to the target object.
+ * @returns {T & U & V & W & X} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ * const result = assignIn(target, source1, source2, source3, source4);
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function assignIn<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;
+/**
+ * Returns the target object as-is.
+ *
+ * @template T - The type of the target object.
+ * @param {T} object - The target object.
+ * @returns {T} The target object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const result = assignIn(target);
+ * // => { a: 1, b: 2 }
+ */
+declare function assignIn<T>(object: T): T;
+/**
+ * Assigns own and inherited properties from multiple source objects to a target object.
+ *
+ * @template R - The type of the result.
+ * @param {any} object - The target object to which properties will be assigned.
+ * @param {...any[]} otherArgs - The source objects whose properties will be assigned to the target object.
+ * @returns {R} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const result = assignIn(target, { b: 2 }, { c: 3 }, { d: 4 });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assignIn<R>(object: any, ...otherArgs: any[]): R;
+
+export { assignIn };
Index: node_modules/es-toolkit/dist/compat/object/assignIn.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,111 @@
+/**
+ * Assigns own and inherited properties from one source object to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source - The source object whose properties will be assigned to the target object.
+ * @returns {T & U} The updated target object with properties from the source object assigned.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ * const result = assignIn(target, source);
+ * // => { a: 1, b: 3, c: 4 }
+ */
+declare function assignIn<T, U>(object: T, source: U): T & U;
+/**
+ * Assigns own and inherited properties from two source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @returns {T & U & V} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const result = assignIn(target, source1, source2);
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignIn<T, U, V>(object: T, source1: U, source2: V): T & U & V;
+/**
+ * Assigns own and inherited properties from three source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @returns {T & U & V & W} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const result = assignIn(target, source1, source2, source3);
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assignIn<T, U, V, W>(object: T, source1: U, source2: V, source3: W): T & U & V & W;
+/**
+ * Assigns own and inherited properties from four source objects to a target object.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @template X - The type of the fourth source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {X} source4 - The fourth source object whose properties will be assigned to the target object.
+ * @returns {T & U & V & W & X} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ * const result = assignIn(target, source1, source2, source3, source4);
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function assignIn<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;
+/**
+ * Returns the target object as-is.
+ *
+ * @template T - The type of the target object.
+ * @param {T} object - The target object.
+ * @returns {T} The target object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const result = assignIn(target);
+ * // => { a: 1, b: 2 }
+ */
+declare function assignIn<T>(object: T): T;
+/**
+ * Assigns own and inherited properties from multiple source objects to a target object.
+ *
+ * @template R - The type of the result.
+ * @param {any} object - The target object to which properties will be assigned.
+ * @param {...any[]} otherArgs - The source objects whose properties will be assigned to the target object.
+ * @returns {R} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const result = assignIn(target, { b: 2 }, { c: 3 }, { d: 4 });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assignIn<R>(object: any, ...otherArgs: any[]): R;
+
+export { assignIn };
Index: node_modules/es-toolkit/dist/compat/object/assignIn.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keysIn = require('./keysIn.js');
+const eq = require('../util/eq.js');
+
+function assignIn(object, ...sources) {
+    for (let i = 0; i < sources.length; i++) {
+        assignInImpl(object, sources[i]);
+    }
+    return object;
+}
+function assignInImpl(object, source) {
+    const keys = keysIn.keysIn(source);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        if (!(key in object) || !eq.eq(object[key], source[key])) {
+            object[key] = source[key];
+        }
+    }
+}
+
+exports.assignIn = assignIn;
Index: node_modules/es-toolkit/dist/compat/object/assignIn.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { keysIn } from './keysIn.mjs';
+import { eq } from '../util/eq.mjs';
+
+function assignIn(object, ...sources) {
+    for (let i = 0; i < sources.length; i++) {
+        assignInImpl(object, sources[i]);
+    }
+    return object;
+}
+function assignInImpl(object, source) {
+    const keys = keysIn(source);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        if (!(key in object) || !eq(object[key], source[key])) {
+            object[key] = source[key];
+        }
+    }
+}
+
+export { assignIn };
Index: node_modules/es-toolkit/dist/compat/object/assignInWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignInWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignInWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,126 @@
+type AssignCustomizer = (objectValue: any, sourceValue: any, key?: string, object?: {}, source?: {}) => any;
+/**
+ * Assigns own and inherited properties from one source object to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source - The source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U} The updated target object with properties from the source object assigned.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ * const result = assignInWith(target, source, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 4 }
+ */
+declare function assignInWith<T, U>(object: T, source: U, customizer: AssignCustomizer): T & U;
+/**
+ * Assigns own and inherited properties from two source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const result = assignInWith(target, source1, source2, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignInWith<T, U, V>(object: T, source1: U, source2: V, customizer: AssignCustomizer): T & U & V;
+/**
+ * Assigns own and inherited properties from three source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V & W} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const result = assignInWith(target, source1, source2, source3, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assignInWith<T, U, V, W>(object: T, source1: U, source2: V, source3: W, customizer: AssignCustomizer): T & U & V & W;
+/**
+ * Assigns own and inherited properties from four source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @template X - The type of the fourth source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {X} source4 - The fourth source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V & W & X} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ * const result = assignInWith(target, source1, source2, source3, source4, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function assignInWith<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X, customizer: AssignCustomizer): T & U & V & W & X;
+/**
+ * Returns the target object as-is.
+ *
+ * @template T - The type of the target object.
+ * @param {T} object - The target object.
+ * @returns {T} The target object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const result = assignInWith(target);
+ * // => { a: 1, b: 2 }
+ */
+declare function assignInWith<T>(object: T): T;
+/**
+ * Assigns own and inherited properties from multiple source objects to a target object using a customizer function.
+ *
+ * @template R - The type of the result.
+ * @param {any} object - The target object to which properties will be assigned.
+ * @param {...any[]} otherArgs - The source objects and customizer function.
+ * @returns {R} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const result = assignInWith(target, { b: 2 }, { c: 3 }, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignInWith<R>(object: any, ...otherArgs: any[]): R;
+
+export { assignInWith };
Index: node_modules/es-toolkit/dist/compat/object/assignInWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignInWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignInWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,126 @@
+type AssignCustomizer = (objectValue: any, sourceValue: any, key?: string, object?: {}, source?: {}) => any;
+/**
+ * Assigns own and inherited properties from one source object to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source - The source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U} The updated target object with properties from the source object assigned.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ * const result = assignInWith(target, source, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 4 }
+ */
+declare function assignInWith<T, U>(object: T, source: U, customizer: AssignCustomizer): T & U;
+/**
+ * Assigns own and inherited properties from two source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const result = assignInWith(target, source1, source2, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignInWith<T, U, V>(object: T, source1: U, source2: V, customizer: AssignCustomizer): T & U & V;
+/**
+ * Assigns own and inherited properties from three source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V & W} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const result = assignInWith(target, source1, source2, source3, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assignInWith<T, U, V, W>(object: T, source1: U, source2: V, source3: W, customizer: AssignCustomizer): T & U & V & W;
+/**
+ * Assigns own and inherited properties from four source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @template X - The type of the fourth source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {X} source4 - The fourth source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V & W & X} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ * const result = assignInWith(target, source1, source2, source3, source4, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function assignInWith<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X, customizer: AssignCustomizer): T & U & V & W & X;
+/**
+ * Returns the target object as-is.
+ *
+ * @template T - The type of the target object.
+ * @param {T} object - The target object.
+ * @returns {T} The target object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const result = assignInWith(target);
+ * // => { a: 1, b: 2 }
+ */
+declare function assignInWith<T>(object: T): T;
+/**
+ * Assigns own and inherited properties from multiple source objects to a target object using a customizer function.
+ *
+ * @template R - The type of the result.
+ * @param {any} object - The target object to which properties will be assigned.
+ * @param {...any[]} otherArgs - The source objects and customizer function.
+ * @returns {R} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const result = assignInWith(target, { b: 2 }, { c: 3 }, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignInWith<R>(object: any, ...otherArgs: any[]): R;
+
+export { assignInWith };
Index: node_modules/es-toolkit/dist/compat/object/assignInWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignInWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignInWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keysIn = require('./keysIn.js');
+const eq = require('../util/eq.js');
+
+function assignInWith(object, ...sources) {
+    let getValueToAssign = sources[sources.length - 1];
+    if (typeof getValueToAssign === 'function') {
+        sources.pop();
+    }
+    else {
+        getValueToAssign = undefined;
+    }
+    for (let i = 0; i < sources.length; i++) {
+        assignInWithImpl(object, sources[i], getValueToAssign);
+    }
+    return object;
+}
+function assignInWithImpl(object, source, getValueToAssign) {
+    const keys = keysIn.keysIn(source);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const objValue = object[key];
+        const srcValue = source[key];
+        const newValue = getValueToAssign?.(objValue, srcValue, key, object, source) ?? srcValue;
+        if (!(key in object) || !eq.eq(objValue, newValue)) {
+            object[key] = newValue;
+        }
+    }
+}
+
+exports.assignInWith = assignInWith;
Index: node_modules/es-toolkit/dist/compat/object/assignInWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignInWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignInWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { keysIn } from './keysIn.mjs';
+import { eq } from '../util/eq.mjs';
+
+function assignInWith(object, ...sources) {
+    let getValueToAssign = sources[sources.length - 1];
+    if (typeof getValueToAssign === 'function') {
+        sources.pop();
+    }
+    else {
+        getValueToAssign = undefined;
+    }
+    for (let i = 0; i < sources.length; i++) {
+        assignInWithImpl(object, sources[i], getValueToAssign);
+    }
+    return object;
+}
+function assignInWithImpl(object, source, getValueToAssign) {
+    const keys = keysIn(source);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const objValue = object[key];
+        const srcValue = source[key];
+        const newValue = getValueToAssign?.(objValue, srcValue, key, object, source) ?? srcValue;
+        if (!(key in object) || !eq(objValue, newValue)) {
+            object[key] = newValue;
+        }
+    }
+}
+
+export { assignInWith };
Index: node_modules/es-toolkit/dist/compat/object/assignWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,126 @@
+type AssignCustomizer = (objectValue: any, sourceValue: any, key?: string, object?: {}, source?: {}) => any;
+/**
+ * Assigns own properties from one source object to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source - The source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U} The updated target object with properties from the source object assigned.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ * const result = assignWith(target, source, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 4 }
+ */
+declare function assignWith<T, U>(object: T, source: U, customizer: AssignCustomizer): T & U;
+/**
+ * Assigns own properties from two source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const result = assignWith(target, source1, source2, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignWith<T, U, V>(object: T, source1: U, source2: V, customizer: AssignCustomizer): T & U & V;
+/**
+ * Assigns own properties from three source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V & W} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const result = assignWith(target, source1, source2, source3, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assignWith<T, U, V, W>(object: T, source1: U, source2: V, source3: W, customizer: AssignCustomizer): T & U & V & W;
+/**
+ * Assigns own properties from four source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @template X - The type of the fourth source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {X} source4 - The fourth source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V & W & X} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ * const result = assignWith(target, source1, source2, source3, source4, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function assignWith<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X, customizer: AssignCustomizer): T & U & V & W & X;
+/**
+ * Returns the target object as-is.
+ *
+ * @template T - The type of the target object.
+ * @param {T} object - The target object.
+ * @returns {T} The target object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const result = assignWith(target);
+ * // => { a: 1, b: 2 }
+ */
+declare function assignWith<T>(object: T): T;
+/**
+ * Assigns own properties from multiple source objects to a target object using a customizer function.
+ *
+ * @template R - The type of the result.
+ * @param {any} object - The target object to which properties will be assigned.
+ * @param {...any[]} otherArgs - The source objects and customizer function.
+ * @returns {R} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const result = assignWith(target, { b: 2 }, { c: 3 }, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignWith<R>(object: any, ...otherArgs: any[]): R;
+
+export { assignWith };
Index: node_modules/es-toolkit/dist/compat/object/assignWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,126 @@
+type AssignCustomizer = (objectValue: any, sourceValue: any, key?: string, object?: {}, source?: {}) => any;
+/**
+ * Assigns own properties from one source object to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source - The source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U} The updated target object with properties from the source object assigned.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ * const result = assignWith(target, source, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 4 }
+ */
+declare function assignWith<T, U>(object: T, source: U, customizer: AssignCustomizer): T & U;
+/**
+ * Assigns own properties from two source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const result = assignWith(target, source1, source2, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignWith<T, U, V>(object: T, source1: U, source2: V, customizer: AssignCustomizer): T & U & V;
+/**
+ * Assigns own properties from three source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V & W} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const result = assignWith(target, source1, source2, source3, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function assignWith<T, U, V, W>(object: T, source1: U, source2: V, source3: W, customizer: AssignCustomizer): T & U & V & W;
+/**
+ * Assigns own properties from four source objects to a target object using a customizer function.
+ *
+ * @template T - The type of the target object.
+ * @template U - The type of the first source object.
+ * @template V - The type of the second source object.
+ * @template W - The type of the third source object.
+ * @template X - The type of the fourth source object.
+ * @param {T} object - The target object to which properties will be assigned.
+ * @param {U} source1 - The first source object whose properties will be assigned to the target object.
+ * @param {V} source2 - The second source object whose properties will be assigned to the target object.
+ * @param {W} source3 - The third source object whose properties will be assigned to the target object.
+ * @param {X} source4 - The fourth source object whose properties will be assigned to the target object.
+ * @param {AssignCustomizer} customizer - The function to customize assigned values.
+ * @returns {T & U & V & W & X} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ * const result = assignWith(target, source1, source2, source3, source4, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function assignWith<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X, customizer: AssignCustomizer): T & U & V & W & X;
+/**
+ * Returns the target object as-is.
+ *
+ * @template T - The type of the target object.
+ * @param {T} object - The target object.
+ * @returns {T} The target object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const result = assignWith(target);
+ * // => { a: 1, b: 2 }
+ */
+declare function assignWith<T>(object: T): T;
+/**
+ * Assigns own properties from multiple source objects to a target object using a customizer function.
+ *
+ * @template R - The type of the result.
+ * @param {any} object - The target object to which properties will be assigned.
+ * @param {...any[]} otherArgs - The source objects and customizer function.
+ * @returns {R} The updated target object with properties from the source objects assigned.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const result = assignWith(target, { b: 2 }, { c: 3 }, (objValue, srcValue) => {
+ *   return objValue === undefined ? srcValue : objValue;
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function assignWith<R>(object: any, ...otherArgs: any[]): R;
+
+export { assignWith };
Index: node_modules/es-toolkit/dist/compat/object/assignWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keys = require('./keys.js');
+const eq = require('../util/eq.js');
+
+function assignWith(object, ...sources) {
+    let getValueToAssign = sources[sources.length - 1];
+    if (typeof getValueToAssign === 'function') {
+        sources.pop();
+    }
+    else {
+        getValueToAssign = undefined;
+    }
+    for (let i = 0; i < sources.length; i++) {
+        assignWithImpl(object, sources[i], getValueToAssign);
+    }
+    return object;
+}
+function assignWithImpl(object, source, getValueToAssign) {
+    const keys$1 = keys.keys(source);
+    for (let i = 0; i < keys$1.length; i++) {
+        const key = keys$1[i];
+        const objValue = object[key];
+        const srcValue = source[key];
+        const newValue = getValueToAssign?.(objValue, srcValue, key, object, source) ?? srcValue;
+        if (!(key in object) || !eq.eq(objValue, newValue)) {
+            object[key] = newValue;
+        }
+    }
+}
+
+exports.assignWith = assignWith;
Index: node_modules/es-toolkit/dist/compat/object/assignWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/assignWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/assignWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { keys } from './keys.mjs';
+import { eq } from '../util/eq.mjs';
+
+function assignWith(object, ...sources) {
+    let getValueToAssign = sources[sources.length - 1];
+    if (typeof getValueToAssign === 'function') {
+        sources.pop();
+    }
+    else {
+        getValueToAssign = undefined;
+    }
+    for (let i = 0; i < sources.length; i++) {
+        assignWithImpl(object, sources[i], getValueToAssign);
+    }
+    return object;
+}
+function assignWithImpl(object, source, getValueToAssign) {
+    const keys$1 = keys(source);
+    for (let i = 0; i < keys$1.length; i++) {
+        const key = keys$1[i];
+        const objValue = object[key];
+        const srcValue = source[key];
+        const newValue = getValueToAssign?.(objValue, srcValue, key, object, source) ?? srcValue;
+        if (!(key in object) || !eq(objValue, newValue)) {
+            object[key] = newValue;
+        }
+    }
+}
+
+export { assignWith };
Index: node_modules/es-toolkit/dist/compat/object/at.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/at.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/at.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+type PropertyName = string | number | symbol;
+type Many<T> = T | readonly T[];
+type PropertyPath = Many<PropertyName>;
+/**
+ * Gets values at given paths from a dictionary or numeric dictionary.
+ *
+ * @template T - The type of the values in the dictionary.
+ * @param {Record<string, T> | Record<number, T> | null | undefined} object - The dictionary to query.
+ * @param {...PropertyPath[]} props - The property paths to get values for.
+ * @returns {T[]} Returns an array of the picked values.
+ *
+ * @example
+ * const object = { 'a': 1, 'b': 2, 'c': 3 };
+ * at(object, 'a', 'c');
+ * // => [1, 3]
+ */
+declare function at<T>(object: Record<string, T> | Record<number, T> | null | undefined, ...props: PropertyPath[]): T[];
+/**
+ * Gets values at given keys from an object.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} object - The object to query.
+ * @param {...Array<Many<keyof T>>} props - The property keys to get values for.
+ * @returns {Array<T[keyof T]>} Returns an array of the picked values.
+ *
+ * @example
+ * const object = { 'a': 1, 'b': 2, 'c': 3 };
+ * at(object, 'a', 'c');
+ * // => [1, 3]
+ */
+declare function at<T extends object>(object: T | null | undefined, ...props: Array<Many<keyof T>>): Array<T[keyof T]>;
+
+export { at };
Index: node_modules/es-toolkit/dist/compat/object/at.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/at.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/at.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+type PropertyName = string | number | symbol;
+type Many<T> = T | readonly T[];
+type PropertyPath = Many<PropertyName>;
+/**
+ * Gets values at given paths from a dictionary or numeric dictionary.
+ *
+ * @template T - The type of the values in the dictionary.
+ * @param {Record<string, T> | Record<number, T> | null | undefined} object - The dictionary to query.
+ * @param {...PropertyPath[]} props - The property paths to get values for.
+ * @returns {T[]} Returns an array of the picked values.
+ *
+ * @example
+ * const object = { 'a': 1, 'b': 2, 'c': 3 };
+ * at(object, 'a', 'c');
+ * // => [1, 3]
+ */
+declare function at<T>(object: Record<string, T> | Record<number, T> | null | undefined, ...props: PropertyPath[]): T[];
+/**
+ * Gets values at given keys from an object.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} object - The object to query.
+ * @param {...Array<Many<keyof T>>} props - The property keys to get values for.
+ * @returns {Array<T[keyof T]>} Returns an array of the picked values.
+ *
+ * @example
+ * const object = { 'a': 1, 'b': 2, 'c': 3 };
+ * at(object, 'a', 'c');
+ * // => [1, 3]
+ */
+declare function at<T extends object>(object: T | null | undefined, ...props: Array<Many<keyof T>>): Array<T[keyof T]>;
+
+export { at };
Index: node_modules/es-toolkit/dist/compat/object/at.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/at.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/at.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const get = require('./get.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isString = require('../predicate/isString.js');
+
+function at(object, ...paths) {
+    if (paths.length === 0) {
+        return [];
+    }
+    const allPaths = [];
+    for (let i = 0; i < paths.length; i++) {
+        const path = paths[i];
+        if (!isArrayLike.isArrayLike(path) || isString.isString(path)) {
+            allPaths.push(path);
+            continue;
+        }
+        for (let j = 0; j < path.length; j++) {
+            allPaths.push(path[j]);
+        }
+    }
+    const result = [];
+    for (let i = 0; i < allPaths.length; i++) {
+        result.push(get.get(object, allPaths[i]));
+    }
+    return result;
+}
+
+exports.at = at;
Index: node_modules/es-toolkit/dist/compat/object/at.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/at.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/at.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { get } from './get.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isString } from '../predicate/isString.mjs';
+
+function at(object, ...paths) {
+    if (paths.length === 0) {
+        return [];
+    }
+    const allPaths = [];
+    for (let i = 0; i < paths.length; i++) {
+        const path = paths[i];
+        if (!isArrayLike(path) || isString(path)) {
+            allPaths.push(path);
+            continue;
+        }
+        for (let j = 0; j < path.length; j++) {
+            allPaths.push(path[j]);
+        }
+    }
+    const result = [];
+    for (let i = 0; i < allPaths.length; i++) {
+        result.push(get(object, allPaths[i]));
+    }
+    return result;
+}
+
+export { at };
Index: node_modules/es-toolkit/dist/compat/object/clone.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/clone.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/clone.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates a shallow clone of the given object.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @returns {T} - A shallow clone of the given object.
+ *
+ * @example
+ * // Clone a primitive objs
+ * const num = 29;
+ * const clonedNum = clone(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num) ; // true
+ *
+ * @example
+ * // Clone an array
+ * const arr = [1, 2, 3];
+ * const clonedArr = clone(arr);
+ * console.log(clonedArr); // [1, 2, 3]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an object
+ * const obj = { a: 1, b: 'es-toolkit', c: [1, 2, 3] };
+ * const clonedObj = clone(obj);
+ * console.log(clonedObj); // { a: 1, b: 'es-toolkit', c: [1, 2, 3] }
+ * console.log(clonedObj === obj); // false
+ */
+declare function clone<T>(obj: T): T;
+
+export { clone };
Index: node_modules/es-toolkit/dist/compat/object/clone.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/clone.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/clone.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates a shallow clone of the given object.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @returns {T} - A shallow clone of the given object.
+ *
+ * @example
+ * // Clone a primitive objs
+ * const num = 29;
+ * const clonedNum = clone(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num) ; // true
+ *
+ * @example
+ * // Clone an array
+ * const arr = [1, 2, 3];
+ * const clonedArr = clone(arr);
+ * console.log(clonedArr); // [1, 2, 3]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an object
+ * const obj = { a: 1, b: 'es-toolkit', c: [1, 2, 3] };
+ * const clonedObj = clone(obj);
+ * console.log(clonedObj); // { a: 1, b: 'es-toolkit', c: [1, 2, 3] }
+ * console.log(clonedObj === obj); // false
+ */
+declare function clone<T>(obj: T): T;
+
+export { clone };
Index: node_modules/es-toolkit/dist/compat/object/clone.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/clone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/clone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,164 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isPrimitive = require('../../predicate/isPrimitive.js');
+const getTag = require('../_internal/getTag.js');
+const tags = require('../_internal/tags.js');
+const isArray = require('../predicate/isArray.js');
+const isTypedArray = require('../predicate/isTypedArray.js');
+
+function clone(obj) {
+    if (isPrimitive.isPrimitive(obj)) {
+        return obj;
+    }
+    const tag = getTag.getTag(obj);
+    if (!isCloneableObject(obj)) {
+        return {};
+    }
+    if (isArray.isArray(obj)) {
+        const result = Array.from(obj);
+        if (obj.length > 0 && typeof obj[0] === 'string' && Object.hasOwn(obj, 'index')) {
+            result.index = obj.index;
+            result.input = obj.input;
+        }
+        return result;
+    }
+    if (isTypedArray.isTypedArray(obj)) {
+        const typedArray = obj;
+        const Ctor = typedArray.constructor;
+        return new Ctor(typedArray.buffer, typedArray.byteOffset, typedArray.length);
+    }
+    if (tag === tags.arrayBufferTag) {
+        return new ArrayBuffer(obj.byteLength);
+    }
+    if (tag === tags.dataViewTag) {
+        const dataView = obj;
+        const buffer = dataView.buffer;
+        const byteOffset = dataView.byteOffset;
+        const byteLength = dataView.byteLength;
+        const clonedBuffer = new ArrayBuffer(byteLength);
+        const srcView = new Uint8Array(buffer, byteOffset, byteLength);
+        const destView = new Uint8Array(clonedBuffer);
+        destView.set(srcView);
+        return new DataView(clonedBuffer);
+    }
+    if (tag === tags.booleanTag || tag === tags.numberTag || tag === tags.stringTag) {
+        const Ctor = obj.constructor;
+        const clone = new Ctor(obj.valueOf());
+        if (tag === tags.stringTag) {
+            cloneStringObjectProperties(clone, obj);
+        }
+        else {
+            copyOwnProperties(clone, obj);
+        }
+        return clone;
+    }
+    if (tag === tags.dateTag) {
+        return new Date(Number(obj));
+    }
+    if (tag === tags.regexpTag) {
+        const regExp = obj;
+        const clone = new RegExp(regExp.source, regExp.flags);
+        clone.lastIndex = regExp.lastIndex;
+        return clone;
+    }
+    if (tag === tags.symbolTag) {
+        return Object(Symbol.prototype.valueOf.call(obj));
+    }
+    if (tag === tags.mapTag) {
+        const map = obj;
+        const result = new Map();
+        map.forEach((obj, key) => {
+            result.set(key, obj);
+        });
+        return result;
+    }
+    if (tag === tags.setTag) {
+        const set = obj;
+        const result = new Set();
+        set.forEach(obj => {
+            result.add(obj);
+        });
+        return result;
+    }
+    if (tag === tags.argumentsTag) {
+        const args = obj;
+        const result = {};
+        copyOwnProperties(result, args);
+        result.length = args.length;
+        result[Symbol.iterator] = args[Symbol.iterator];
+        return result;
+    }
+    const result = {};
+    copyPrototype(result, obj);
+    copyOwnProperties(result, obj);
+    copySymbolProperties(result, obj);
+    return result;
+}
+function isCloneableObject(object) {
+    switch (getTag.getTag(object)) {
+        case tags.argumentsTag:
+        case tags.arrayTag:
+        case tags.arrayBufferTag:
+        case tags.dataViewTag:
+        case tags.booleanTag:
+        case tags.dateTag:
+        case tags.float32ArrayTag:
+        case tags.float64ArrayTag:
+        case tags.int8ArrayTag:
+        case tags.int16ArrayTag:
+        case tags.int32ArrayTag:
+        case tags.mapTag:
+        case tags.numberTag:
+        case tags.objectTag:
+        case tags.regexpTag:
+        case tags.setTag:
+        case tags.stringTag:
+        case tags.symbolTag:
+        case tags.uint8ArrayTag:
+        case tags.uint8ClampedArrayTag:
+        case tags.uint16ArrayTag:
+        case tags.uint32ArrayTag: {
+            return true;
+        }
+        default: {
+            return false;
+        }
+    }
+}
+function copyOwnProperties(target, source) {
+    for (const key in source) {
+        if (Object.hasOwn(source, key)) {
+            target[key] = source[key];
+        }
+    }
+}
+function copySymbolProperties(target, source) {
+    const symbols = Object.getOwnPropertySymbols(source);
+    for (let i = 0; i < symbols.length; i++) {
+        const symbol = symbols[i];
+        if (Object.prototype.propertyIsEnumerable.call(source, symbol)) {
+            target[symbol] = source[symbol];
+        }
+    }
+}
+function cloneStringObjectProperties(target, source) {
+    const stringLength = source.valueOf().length;
+    for (const key in source) {
+        if (Object.hasOwn(source, key) && (Number.isNaN(Number(key)) || Number(key) >= stringLength)) {
+            target[key] = source[key];
+        }
+    }
+}
+function copyPrototype(target, source) {
+    const proto = Object.getPrototypeOf(source);
+    if (proto !== null) {
+        const Ctor = source.constructor;
+        if (typeof Ctor === 'function') {
+            Object.setPrototypeOf(target, proto);
+        }
+    }
+}
+
+exports.clone = clone;
Index: node_modules/es-toolkit/dist/compat/object/clone.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/clone.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/clone.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,160 @@
+import { isPrimitive } from '../../predicate/isPrimitive.mjs';
+import { getTag } from '../_internal/getTag.mjs';
+import { arrayBufferTag, dataViewTag, booleanTag, numberTag, stringTag, dateTag, regexpTag, symbolTag, mapTag, setTag, argumentsTag, uint32ArrayTag, uint16ArrayTag, uint8ClampedArrayTag, uint8ArrayTag, objectTag, int32ArrayTag, int16ArrayTag, int8ArrayTag, float64ArrayTag, float32ArrayTag, arrayTag } from '../_internal/tags.mjs';
+import { isArray } from '../predicate/isArray.mjs';
+import { isTypedArray } from '../predicate/isTypedArray.mjs';
+
+function clone(obj) {
+    if (isPrimitive(obj)) {
+        return obj;
+    }
+    const tag = getTag(obj);
+    if (!isCloneableObject(obj)) {
+        return {};
+    }
+    if (isArray(obj)) {
+        const result = Array.from(obj);
+        if (obj.length > 0 && typeof obj[0] === 'string' && Object.hasOwn(obj, 'index')) {
+            result.index = obj.index;
+            result.input = obj.input;
+        }
+        return result;
+    }
+    if (isTypedArray(obj)) {
+        const typedArray = obj;
+        const Ctor = typedArray.constructor;
+        return new Ctor(typedArray.buffer, typedArray.byteOffset, typedArray.length);
+    }
+    if (tag === arrayBufferTag) {
+        return new ArrayBuffer(obj.byteLength);
+    }
+    if (tag === dataViewTag) {
+        const dataView = obj;
+        const buffer = dataView.buffer;
+        const byteOffset = dataView.byteOffset;
+        const byteLength = dataView.byteLength;
+        const clonedBuffer = new ArrayBuffer(byteLength);
+        const srcView = new Uint8Array(buffer, byteOffset, byteLength);
+        const destView = new Uint8Array(clonedBuffer);
+        destView.set(srcView);
+        return new DataView(clonedBuffer);
+    }
+    if (tag === booleanTag || tag === numberTag || tag === stringTag) {
+        const Ctor = obj.constructor;
+        const clone = new Ctor(obj.valueOf());
+        if (tag === stringTag) {
+            cloneStringObjectProperties(clone, obj);
+        }
+        else {
+            copyOwnProperties(clone, obj);
+        }
+        return clone;
+    }
+    if (tag === dateTag) {
+        return new Date(Number(obj));
+    }
+    if (tag === regexpTag) {
+        const regExp = obj;
+        const clone = new RegExp(regExp.source, regExp.flags);
+        clone.lastIndex = regExp.lastIndex;
+        return clone;
+    }
+    if (tag === symbolTag) {
+        return Object(Symbol.prototype.valueOf.call(obj));
+    }
+    if (tag === mapTag) {
+        const map = obj;
+        const result = new Map();
+        map.forEach((obj, key) => {
+            result.set(key, obj);
+        });
+        return result;
+    }
+    if (tag === setTag) {
+        const set = obj;
+        const result = new Set();
+        set.forEach(obj => {
+            result.add(obj);
+        });
+        return result;
+    }
+    if (tag === argumentsTag) {
+        const args = obj;
+        const result = {};
+        copyOwnProperties(result, args);
+        result.length = args.length;
+        result[Symbol.iterator] = args[Symbol.iterator];
+        return result;
+    }
+    const result = {};
+    copyPrototype(result, obj);
+    copyOwnProperties(result, obj);
+    copySymbolProperties(result, obj);
+    return result;
+}
+function isCloneableObject(object) {
+    switch (getTag(object)) {
+        case argumentsTag:
+        case arrayTag:
+        case arrayBufferTag:
+        case dataViewTag:
+        case booleanTag:
+        case dateTag:
+        case float32ArrayTag:
+        case float64ArrayTag:
+        case int8ArrayTag:
+        case int16ArrayTag:
+        case int32ArrayTag:
+        case mapTag:
+        case numberTag:
+        case objectTag:
+        case regexpTag:
+        case setTag:
+        case stringTag:
+        case symbolTag:
+        case uint8ArrayTag:
+        case uint8ClampedArrayTag:
+        case uint16ArrayTag:
+        case uint32ArrayTag: {
+            return true;
+        }
+        default: {
+            return false;
+        }
+    }
+}
+function copyOwnProperties(target, source) {
+    for (const key in source) {
+        if (Object.hasOwn(source, key)) {
+            target[key] = source[key];
+        }
+    }
+}
+function copySymbolProperties(target, source) {
+    const symbols = Object.getOwnPropertySymbols(source);
+    for (let i = 0; i < symbols.length; i++) {
+        const symbol = symbols[i];
+        if (Object.prototype.propertyIsEnumerable.call(source, symbol)) {
+            target[symbol] = source[symbol];
+        }
+    }
+}
+function cloneStringObjectProperties(target, source) {
+    const stringLength = source.valueOf().length;
+    for (const key in source) {
+        if (Object.hasOwn(source, key) && (Number.isNaN(Number(key)) || Number(key) >= stringLength)) {
+            target[key] = source[key];
+        }
+    }
+}
+function copyPrototype(target, source) {
+    const proto = Object.getPrototypeOf(source);
+    if (proto !== null) {
+        const Ctor = source.constructor;
+        if (typeof Ctor === 'function') {
+            Object.setPrototypeOf(target, proto);
+        }
+    }
+}
+
+export { clone };
Index: node_modules/es-toolkit/dist/compat/object/cloneDeep.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+/**
+ * Creates a deep clone of the given object.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @returns {T} - A deep clone of the given object.
+ *
+ * @example
+ * // Clone a primitive values
+ * const num = 29;
+ * const clonedNum = clone(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num) ; // true
+ *
+ * @example
+ * // Clone an array
+ * const arr = [1, 2, 3];
+ * const clonedArr = clone(arr);
+ * console.log(clonedArr); // [1, 2, 3]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an array with nested objects
+ * const arr = [1, { a: 1 }, [1, 2, 3]];
+ * const clonedArr = clone(arr);
+ * arr[1].a = 2;
+ * console.log(arr); // [2, { a: 2 }, [1, 2, 3]]
+ * console.log(clonedArr); // [1, { a: 1 }, [1, 2, 3]]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an object
+ * const obj = { a: 1, b: 'es-toolkit', c: [1, 2, 3] };
+ * const clonedObj = clone(obj);
+ * console.log(clonedObj); // { a: 1, b: 'es-toolkit', c: [1, 2, 3] }
+ * console.log(clonedObj === obj); // false
+ *
+ * @example
+ * // Clone an object with nested objects
+ * const obj = { a: 1, b: { c: 1 } };
+ * const clonedObj = clone(obj);
+ * obj.b.c = 2;
+ * console.log(obj); // { a: 1, b: { c: 2 } }
+ * console.log(clonedObj); // { a: 1, b: { c: 1 } }
+ * console.log(clonedObj === obj); // false
+ */
+declare function cloneDeep<T>(obj: T): T;
+
+export { cloneDeep };
Index: node_modules/es-toolkit/dist/compat/object/cloneDeep.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+/**
+ * Creates a deep clone of the given object.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @returns {T} - A deep clone of the given object.
+ *
+ * @example
+ * // Clone a primitive values
+ * const num = 29;
+ * const clonedNum = clone(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num) ; // true
+ *
+ * @example
+ * // Clone an array
+ * const arr = [1, 2, 3];
+ * const clonedArr = clone(arr);
+ * console.log(clonedArr); // [1, 2, 3]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an array with nested objects
+ * const arr = [1, { a: 1 }, [1, 2, 3]];
+ * const clonedArr = clone(arr);
+ * arr[1].a = 2;
+ * console.log(arr); // [2, { a: 2 }, [1, 2, 3]]
+ * console.log(clonedArr); // [1, { a: 1 }, [1, 2, 3]]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an object
+ * const obj = { a: 1, b: 'es-toolkit', c: [1, 2, 3] };
+ * const clonedObj = clone(obj);
+ * console.log(clonedObj); // { a: 1, b: 'es-toolkit', c: [1, 2, 3] }
+ * console.log(clonedObj === obj); // false
+ *
+ * @example
+ * // Clone an object with nested objects
+ * const obj = { a: 1, b: { c: 1 } };
+ * const clonedObj = clone(obj);
+ * obj.b.c = 2;
+ * console.log(obj); // { a: 1, b: { c: 2 } }
+ * console.log(clonedObj); // { a: 1, b: { c: 1 } }
+ * console.log(clonedObj === obj); // false
+ */
+declare function cloneDeep<T>(obj: T): T;
+
+export { cloneDeep };
Index: node_modules/es-toolkit/dist/compat/object/cloneDeep.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const cloneDeepWith = require('./cloneDeepWith.js');
+
+function cloneDeep(obj) {
+    return cloneDeepWith.cloneDeepWith(obj);
+}
+
+exports.cloneDeep = cloneDeep;
Index: node_modules/es-toolkit/dist/compat/object/cloneDeep.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { cloneDeepWith } from './cloneDeepWith.mjs';
+
+function cloneDeep(obj) {
+    return cloneDeepWith(obj);
+}
+
+export { cloneDeep };
Index: node_modules/es-toolkit/dist/compat/object/cloneDeepWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneDeepWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneDeepWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+type CloneDeepWithCustomizer<TObject> = (value: any, key: number | string | undefined, object: TObject | undefined, stack: any) => any;
+/**
+ * Creates a deep clone of the given value using a customizer function.
+ *
+ * @template T - The type of the value.
+ * @param {T} value - The value to clone.
+ * @param {CloneDeepWithCustomizer<T>} customizer - A function to customize the cloning process.
+ * @returns {any} - A deep clone of the given value.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * const clonedObj = cloneDeepWith(obj, (value) => {
+ *   if (typeof value === 'number') {
+ *     return value * 2;
+ *   }
+ * });
+ * // => { a: 2, b: 4 }
+ */
+declare function cloneDeepWith<T>(value: T, customizer: CloneDeepWithCustomizer<T>): any;
+/**
+ * Creates a deep clone of the given value.
+ *
+ * @template T - The type of the value.
+ * @param {T} value - The value to clone.
+ * @returns {T} - A deep clone of the given value.
+ *
+ * @example
+ * const obj = { a: 1, b: { c: 2 } };
+ * const clonedObj = cloneDeepWith(obj);
+ * // => { a: 1, b: { c: 2 } }
+ */
+declare function cloneDeepWith<T>(value: T): T;
+
+export { cloneDeepWith };
Index: node_modules/es-toolkit/dist/compat/object/cloneDeepWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneDeepWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneDeepWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+type CloneDeepWithCustomizer<TObject> = (value: any, key: number | string | undefined, object: TObject | undefined, stack: any) => any;
+/**
+ * Creates a deep clone of the given value using a customizer function.
+ *
+ * @template T - The type of the value.
+ * @param {T} value - The value to clone.
+ * @param {CloneDeepWithCustomizer<T>} customizer - A function to customize the cloning process.
+ * @returns {any} - A deep clone of the given value.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * const clonedObj = cloneDeepWith(obj, (value) => {
+ *   if (typeof value === 'number') {
+ *     return value * 2;
+ *   }
+ * });
+ * // => { a: 2, b: 4 }
+ */
+declare function cloneDeepWith<T>(value: T, customizer: CloneDeepWithCustomizer<T>): any;
+/**
+ * Creates a deep clone of the given value.
+ *
+ * @template T - The type of the value.
+ * @param {T} value - The value to clone.
+ * @returns {T} - A deep clone of the given value.
+ *
+ * @example
+ * const obj = { a: 1, b: { c: 2 } };
+ * const clonedObj = cloneDeepWith(obj);
+ * // => { a: 1, b: { c: 2 } }
+ */
+declare function cloneDeepWith<T>(value: T): T;
+
+export { cloneDeepWith };
Index: node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const cloneDeepWith$1 = require('../../object/cloneDeepWith.js');
+const tags = require('../_internal/tags.js');
+
+function cloneDeepWith(obj, customizer) {
+    return cloneDeepWith$1.cloneDeepWith(obj, (value, key, object, stack) => {
+        const cloned = customizer?.(value, key, object, stack);
+        if (cloned !== undefined) {
+            return cloned;
+        }
+        if (typeof obj !== 'object') {
+            return undefined;
+        }
+        switch (Object.prototype.toString.call(obj)) {
+            case tags.numberTag:
+            case tags.stringTag:
+            case tags.booleanTag: {
+                const result = new obj.constructor(obj?.valueOf());
+                cloneDeepWith$1.copyProperties(result, obj);
+                return result;
+            }
+            case tags.argumentsTag: {
+                const result = {};
+                cloneDeepWith$1.copyProperties(result, obj);
+                result.length = obj.length;
+                result[Symbol.iterator] = obj[Symbol.iterator];
+                return result;
+            }
+            default: {
+                return undefined;
+            }
+        }
+    });
+}
+
+exports.cloneDeepWith = cloneDeepWith;
Index: node_modules/es-toolkit/dist/compat/object/cloneDeepWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneDeepWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneDeepWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import { cloneDeepWith as cloneDeepWith$1, copyProperties } from '../../object/cloneDeepWith.mjs';
+import { argumentsTag, booleanTag, stringTag, numberTag } from '../_internal/tags.mjs';
+
+function cloneDeepWith(obj, customizer) {
+    return cloneDeepWith$1(obj, (value, key, object, stack) => {
+        const cloned = customizer?.(value, key, object, stack);
+        if (cloned !== undefined) {
+            return cloned;
+        }
+        if (typeof obj !== 'object') {
+            return undefined;
+        }
+        switch (Object.prototype.toString.call(obj)) {
+            case numberTag:
+            case stringTag:
+            case booleanTag: {
+                const result = new obj.constructor(obj?.valueOf());
+                copyProperties(result, obj);
+                return result;
+            }
+            case argumentsTag: {
+                const result = {};
+                copyProperties(result, obj);
+                result.length = obj.length;
+                result[Symbol.iterator] = obj[Symbol.iterator];
+                return result;
+            }
+            default: {
+                return undefined;
+            }
+        }
+    });
+}
+
+export { cloneDeepWith };
Index: node_modules/es-toolkit/dist/compat/object/cloneWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+type CloneWithCustomizer<T, R> = (value: T, key: number | string | undefined, object: any, stack: any) => R;
+/**
+ * Creates a shallow clone of a value with customizer that returns a specific result type.
+ *
+ * @template T - The type of the value to clone.
+ * @template R - The result type extending primitive types or objects.
+ * @param {T} value - The value to clone.
+ * @param {CloneWithCustomizer<T, R>} customizer - The function to customize cloning.
+ * @returns {R} Returns the cloned value.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * const cloned = cloneWith(obj, (value) => {
+ *   if (typeof value === 'object') {
+ *     return JSON.parse(JSON.stringify(value));
+ *   }
+ * });
+ * // => { a: 1, b: 2 }
+ */
+declare function cloneWith<T, R extends object | string | number | boolean | null>(value: T, customizer: CloneWithCustomizer<T, R>): R;
+/**
+ * Creates a shallow clone of a value with optional customizer.
+ *
+ * @template T - The type of the value to clone.
+ * @template R - The result type.
+ * @param {T} value - The value to clone.
+ * @param {CloneWithCustomizer<T, R | undefined>} customizer - The function to customize cloning.
+ * @returns {R | T} Returns the cloned value or the customized result.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * const cloned = cloneWith(obj, (value) => {
+ *   if (typeof value === 'number') {
+ *     return value * 2;
+ *   }
+ * });
+ * // => { a: 2, b: 4 }
+ */
+declare function cloneWith<T, R>(value: T, customizer: CloneWithCustomizer<T, R | undefined>): R | T;
+/**
+ * Creates a shallow clone of a value.
+ *
+ * @template T - The type of the value to clone.
+ * @param {T} value - The value to clone.
+ * @returns {T} Returns the cloned value.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * const cloned = cloneWith(obj);
+ * // => { a: 1, b: 2 }
+ */
+declare function cloneWith<T>(value: T): T;
+
+export { cloneWith };
Index: node_modules/es-toolkit/dist/compat/object/cloneWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+type CloneWithCustomizer<T, R> = (value: T, key: number | string | undefined, object: any, stack: any) => R;
+/**
+ * Creates a shallow clone of a value with customizer that returns a specific result type.
+ *
+ * @template T - The type of the value to clone.
+ * @template R - The result type extending primitive types or objects.
+ * @param {T} value - The value to clone.
+ * @param {CloneWithCustomizer<T, R>} customizer - The function to customize cloning.
+ * @returns {R} Returns the cloned value.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * const cloned = cloneWith(obj, (value) => {
+ *   if (typeof value === 'object') {
+ *     return JSON.parse(JSON.stringify(value));
+ *   }
+ * });
+ * // => { a: 1, b: 2 }
+ */
+declare function cloneWith<T, R extends object | string | number | boolean | null>(value: T, customizer: CloneWithCustomizer<T, R>): R;
+/**
+ * Creates a shallow clone of a value with optional customizer.
+ *
+ * @template T - The type of the value to clone.
+ * @template R - The result type.
+ * @param {T} value - The value to clone.
+ * @param {CloneWithCustomizer<T, R | undefined>} customizer - The function to customize cloning.
+ * @returns {R | T} Returns the cloned value or the customized result.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * const cloned = cloneWith(obj, (value) => {
+ *   if (typeof value === 'number') {
+ *     return value * 2;
+ *   }
+ * });
+ * // => { a: 2, b: 4 }
+ */
+declare function cloneWith<T, R>(value: T, customizer: CloneWithCustomizer<T, R | undefined>): R | T;
+/**
+ * Creates a shallow clone of a value.
+ *
+ * @template T - The type of the value to clone.
+ * @param {T} value - The value to clone.
+ * @returns {T} Returns the cloned value.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * const cloned = cloneWith(obj);
+ * // => { a: 1, b: 2 }
+ */
+declare function cloneWith<T>(value: T): T;
+
+export { cloneWith };
Index: node_modules/es-toolkit/dist/compat/object/cloneWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const clone = require('./clone.js');
+
+function cloneWith(value, customizer) {
+    if (!customizer) {
+        return clone.clone(value);
+    }
+    const result = customizer(value);
+    if (result !== undefined) {
+        return result;
+    }
+    return clone.clone(value);
+}
+
+exports.cloneWith = cloneWith;
Index: node_modules/es-toolkit/dist/compat/object/cloneWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/cloneWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/cloneWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { clone } from './clone.mjs';
+
+function cloneWith(value, customizer) {
+    if (!customizer) {
+        return clone(value);
+    }
+    const result = customizer(value);
+    if (result !== undefined) {
+        return result;
+    }
+    return clone(value);
+}
+
+export { cloneWith };
Index: node_modules/es-toolkit/dist/compat/object/create.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/create.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/create.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Creates an object that inherits from the prototype object.
+ *
+ * If `properties` are provided, they will be added to the new object.
+ * Only string-keyed enumerable properties directly owned by the `properties` object are copied.
+ * Inherited properties or those with `Symbol` keys are not copied.
+ *
+ * @template T - The prototype object type.
+ * @template U - The properties object type.
+ * @param {T} prototype - The object to inherit from.
+ * @param {U} properties - The properties to assign to the created object.
+ * @returns {T & U} The new object.
+ */
+declare function create<T extends object, U extends object>(prototype: T, properties?: U): T & U;
+
+export { create };
Index: node_modules/es-toolkit/dist/compat/object/create.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/create.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/create.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Creates an object that inherits from the prototype object.
+ *
+ * If `properties` are provided, they will be added to the new object.
+ * Only string-keyed enumerable properties directly owned by the `properties` object are copied.
+ * Inherited properties or those with `Symbol` keys are not copied.
+ *
+ * @template T - The prototype object type.
+ * @template U - The properties object type.
+ * @param {T} prototype - The object to inherit from.
+ * @param {U} properties - The properties to assign to the created object.
+ * @returns {T & U} The new object.
+ */
+declare function create<T extends object, U extends object>(prototype: T, properties?: U): T & U;
+
+export { create };
Index: node_modules/es-toolkit/dist/compat/object/create.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/create.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/create.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keys = require('./keys.js');
+const assignValue = require('../_internal/assignValue.js');
+const isObject = require('../predicate/isObject.js');
+
+function create(prototype, properties) {
+    const proto = isObject.isObject(prototype) ? Object.create(prototype) : {};
+    if (properties != null) {
+        const propsKeys = keys.keys(properties);
+        for (let i = 0; i < propsKeys.length; i++) {
+            const key = propsKeys[i];
+            const propsValue = properties[key];
+            assignValue.assignValue(proto, key, propsValue);
+        }
+    }
+    return proto;
+}
+
+exports.create = create;
Index: node_modules/es-toolkit/dist/compat/object/create.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/create.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/create.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import { keys } from './keys.mjs';
+import { assignValue } from '../_internal/assignValue.mjs';
+import { isObject } from '../predicate/isObject.mjs';
+
+function create(prototype, properties) {
+    const proto = isObject(prototype) ? Object.create(prototype) : {};
+    if (properties != null) {
+        const propsKeys = keys(properties);
+        for (let i = 0; i < propsKeys.length; i++) {
+            const key = propsKeys[i];
+            const propsValue = properties[key];
+            assignValue(proto, key, propsValue);
+        }
+    }
+    return proto;
+}
+
+export { create };
Index: node_modules/es-toolkit/dist/compat/object/defaults.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/defaults.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/defaults.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,100 @@
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @template S - The type of the object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S} source - The object that specifies the default values to apply.
+ * @returns {NonNullable<S & T>} The `object` that has been updated with default values from `source`.
+ *
+ * @example
+ * defaults({ a: 1 }, { b: 2 }); // { a: 1, b: 2 }
+ * defaults({ a: undefined }, { a: 1 }); // { a: 1 }
+ */
+declare function defaults<T, S>(object: T, source: S): NonNullable<S & T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @returns {NonNullable<S2 & S1 & T>} The `object` that has been updated with default values from `source1` and `source2`.
+ *
+ * @example
+ * defaults({ a: 1 }, { b: 2 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
+ * defaults({ a: undefined }, { a: 1 }, { b: 2 }); // { a: 1, b: 2 }
+ */
+declare function defaults<T, S1, S2>(object: T, source1: S1, source2: S2): NonNullable<S2 & S1 & T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @template S3 - The type of the third object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @param {S3} source3 - The third object that specifies the default values to apply.
+ * @returns {NonNullable<S3 & S2 & S1 & T>} The `object` that has been updated with default values from `source1`, `source2`, and `source3`.
+ *
+ * @example
+ * defaults({ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }); // { a: 1, b: 2, c: 3, d: 4 }
+ * defaults({ a: undefined }, { a: 1 }, { b: 2 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
+ */
+declare function defaults<T, S1, S2, S3>(object: T, source1: S1, source2: S2, source3: S3): NonNullable<S3 & S2 & S1 & T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @template S3 - The type of the third object that provides default values.
+ * @template S4 - The type of the fourth object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @param {S3} source3 - The third object that specifies the default values to apply.
+ * @param {S4} source4 - The fourth object that specifies the default values to apply.
+ * @returns {NonNullable<S4 & S3 & S2 & S1 & T>} The `object` that has been updated with default values from `source1`, `source2`, `source3`, and `source4`.
+ *
+ * @example
+ * defaults({ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }, { e: 5 }); // { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ * defaults({ a: undefined }, { a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }); // { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function defaults<T, S1, S2, S3, S4>(object: T, source1: S1, source2: S2, source3: S3, source4: S4): NonNullable<S4 & S3 & S2 & S1 & T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @param {T} object - The target object that will receive default values.
+ * @returns {NonNullable<T>} The `object` that has been updated with default values.
+ *
+ * @example
+ * defaults({ a: 1 }); // { a: 1 }
+ * defaults({ a: undefined }); // { a: undefined }
+ */
+declare function defaults<T>(object: T): NonNullable<T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @param {any} object - The target object that will receive default values.
+ * @param {...any[]} sources - The objects that specify the default values to apply.
+ * @returns {any} The `object` that has been updated with default values from `sources`.
+ *
+ * @example
+ * defaults({}, { a: 1 }, { b: 2 }); // { a: 1, b: 2 }
+ * defaults({ a: undefined }, { a: 1 }); // { a: 1 }
+ */
+declare function defaults(object: any, ...sources: any[]): any;
+
+export { defaults };
Index: node_modules/es-toolkit/dist/compat/object/defaults.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/defaults.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,100 @@
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @template S - The type of the object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S} source - The object that specifies the default values to apply.
+ * @returns {NonNullable<S & T>} The `object` that has been updated with default values from `source`.
+ *
+ * @example
+ * defaults({ a: 1 }, { b: 2 }); // { a: 1, b: 2 }
+ * defaults({ a: undefined }, { a: 1 }); // { a: 1 }
+ */
+declare function defaults<T, S>(object: T, source: S): NonNullable<S & T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @returns {NonNullable<S2 & S1 & T>} The `object` that has been updated with default values from `source1` and `source2`.
+ *
+ * @example
+ * defaults({ a: 1 }, { b: 2 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
+ * defaults({ a: undefined }, { a: 1 }, { b: 2 }); // { a: 1, b: 2 }
+ */
+declare function defaults<T, S1, S2>(object: T, source1: S1, source2: S2): NonNullable<S2 & S1 & T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @template S3 - The type of the third object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @param {S3} source3 - The third object that specifies the default values to apply.
+ * @returns {NonNullable<S3 & S2 & S1 & T>} The `object` that has been updated with default values from `source1`, `source2`, and `source3`.
+ *
+ * @example
+ * defaults({ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }); // { a: 1, b: 2, c: 3, d: 4 }
+ * defaults({ a: undefined }, { a: 1 }, { b: 2 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
+ */
+declare function defaults<T, S1, S2, S3>(object: T, source1: S1, source2: S2, source3: S3): NonNullable<S3 & S2 & S1 & T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @template S3 - The type of the third object that provides default values.
+ * @template S4 - The type of the fourth object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @param {S3} source3 - The third object that specifies the default values to apply.
+ * @param {S4} source4 - The fourth object that specifies the default values to apply.
+ * @returns {NonNullable<S4 & S3 & S2 & S1 & T>} The `object` that has been updated with default values from `source1`, `source2`, `source3`, and `source4`.
+ *
+ * @example
+ * defaults({ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }, { e: 5 }); // { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ * defaults({ a: undefined }, { a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }); // { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function defaults<T, S1, S2, S3, S4>(object: T, source1: S1, source2: S2, source3: S3, source4: S4): NonNullable<S4 & S3 & S2 & S1 & T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @template T - The type of the object being processed.
+ * @param {T} object - The target object that will receive default values.
+ * @returns {NonNullable<T>} The `object` that has been updated with default values.
+ *
+ * @example
+ * defaults({ a: 1 }); // { a: 1 }
+ * defaults({ a: undefined }); // { a: undefined }
+ */
+declare function defaults<T>(object: T): NonNullable<T>;
+/**
+ * Assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * @param {any} object - The target object that will receive default values.
+ * @param {...any[]} sources - The objects that specify the default values to apply.
+ * @returns {any} The `object` that has been updated with default values from `sources`.
+ *
+ * @example
+ * defaults({}, { a: 1 }, { b: 2 }); // { a: 1, b: 2 }
+ * defaults({ a: undefined }, { a: 1 }); // { a: 1 }
+ */
+declare function defaults(object: any, ...sources: any[]): any;
+
+export { defaults };
Index: node_modules/es-toolkit/dist/compat/object/defaults.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/defaults.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/defaults.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isIterateeCall = require('../_internal/isIterateeCall.js');
+const eq = require('../util/eq.js');
+
+function defaults(object, ...sources) {
+    object = Object(object);
+    const objectProto = Object.prototype;
+    let length = sources.length;
+    const guard = length > 2 ? sources[2] : undefined;
+    if (guard && isIterateeCall.isIterateeCall(sources[0], sources[1], guard)) {
+        length = 1;
+    }
+    for (let i = 0; i < length; i++) {
+        const source = sources[i];
+        const keys = Object.keys(source);
+        for (let j = 0; j < keys.length; j++) {
+            const key = keys[j];
+            const value = object[key];
+            if (value === undefined ||
+                (!Object.hasOwn(object, key) && eq.eq(value, objectProto[key]))) {
+                object[key] = source[key];
+            }
+        }
+    }
+    return object;
+}
+
+exports.defaults = defaults;
Index: node_modules/es-toolkit/dist/compat/object/defaults.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/defaults.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/defaults.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { isIterateeCall } from '../_internal/isIterateeCall.mjs';
+import { eq } from '../util/eq.mjs';
+
+function defaults(object, ...sources) {
+    object = Object(object);
+    const objectProto = Object.prototype;
+    let length = sources.length;
+    const guard = length > 2 ? sources[2] : undefined;
+    if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+        length = 1;
+    }
+    for (let i = 0; i < length; i++) {
+        const source = sources[i];
+        const keys = Object.keys(source);
+        for (let j = 0; j < keys.length; j++) {
+            const key = keys[j];
+            const value = object[key];
+            if (value === undefined ||
+                (!Object.hasOwn(object, key) && eq(value, objectProto[key]))) {
+                object[key] = source[key];
+            }
+        }
+    }
+    return object;
+}
+
+export { defaults };
Index: node_modules/es-toolkit/dist/compat/object/defaultsDeep.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/defaultsDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/defaultsDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Recursively assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * Similar to `defaults` but recursively applies default values to nested objects.
+ * Source objects are applied in order from left to right, and once a property has been assigned a value,
+ * any subsequent values for that property will be ignored.
+ *
+ * Note: This function modifies the first argument, `object`.
+ *
+ * @template T - The type of the object being processed.
+ * @param {any} target - The target object that will receive default values.
+ * @param {any[]} sources - One or more source objects that specify default values to apply.
+ * @returns {any} The `object` that has been updated with default values from all sources, recursively merging nested objects.
+ *
+ * @example
+ * defaultsDeep({ a: { b: 2 } }, { a: { b: 3, c: 3 }, d: 4 }); // { a: { b: 2, c: 3 }, d: 4 }
+ * defaultsDeep({ a: { b: undefined } }, { a: { b: 1 } }); // { a: { b: 1 } }
+ * defaultsDeep({ a: null }, { a: { b: 1 } }); // { a: null }
+ */
+declare function defaultsDeep(target: any, ...sources: any[]): any;
+
+export { defaultsDeep };
Index: node_modules/es-toolkit/dist/compat/object/defaultsDeep.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/defaultsDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/defaultsDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Recursively assigns default values to an `object`, ensuring that certain properties do not remain `undefined`.
+ * It sets default values for properties that are either `undefined` or inherited from `Object.prototype`.
+ *
+ * Similar to `defaults` but recursively applies default values to nested objects.
+ * Source objects are applied in order from left to right, and once a property has been assigned a value,
+ * any subsequent values for that property will be ignored.
+ *
+ * Note: This function modifies the first argument, `object`.
+ *
+ * @template T - The type of the object being processed.
+ * @param {any} target - The target object that will receive default values.
+ * @param {any[]} sources - One or more source objects that specify default values to apply.
+ * @returns {any} The `object` that has been updated with default values from all sources, recursively merging nested objects.
+ *
+ * @example
+ * defaultsDeep({ a: { b: 2 } }, { a: { b: 3, c: 3 }, d: 4 }); // { a: { b: 2, c: 3 }, d: 4 }
+ * defaultsDeep({ a: { b: undefined } }, { a: { b: 1 } }); // { a: { b: 1 } }
+ * defaultsDeep({ a: null }, { a: { b: 1 } }); // { a: null }
+ */
+declare function defaultsDeep(target: any, ...sources: any[]): any;
+
+export { defaultsDeep };
Index: node_modules/es-toolkit/dist/compat/object/defaultsDeep.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/defaultsDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/defaultsDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,66 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isPlainObject = require('../predicate/isPlainObject.js');
+
+function defaultsDeep(target, ...sources) {
+    target = Object(target);
+    for (let i = 0; i < sources.length; i++) {
+        const source = sources[i];
+        if (source != null) {
+            defaultsDeepRecursive(target, source, new WeakMap());
+        }
+    }
+    return target;
+}
+function defaultsDeepRecursive(target, source, stack) {
+    for (const key in source) {
+        const sourceValue = source[key];
+        const targetValue = target[key];
+        if (targetValue === undefined || !Object.hasOwn(target, key)) {
+            target[key] = handleMissingProperty(sourceValue, stack);
+            continue;
+        }
+        if (stack.get(sourceValue) === targetValue) {
+            continue;
+        }
+        handleExistingProperty(targetValue, sourceValue, stack);
+    }
+}
+function handleMissingProperty(sourceValue, stack) {
+    if (stack.has(sourceValue)) {
+        return stack.get(sourceValue);
+    }
+    if (isPlainObject.isPlainObject(sourceValue)) {
+        const newObj = {};
+        stack.set(sourceValue, newObj);
+        defaultsDeepRecursive(newObj, sourceValue, stack);
+        return newObj;
+    }
+    return sourceValue;
+}
+function handleExistingProperty(targetValue, sourceValue, stack) {
+    if (isPlainObject.isPlainObject(targetValue) && isPlainObject.isPlainObject(sourceValue)) {
+        stack.set(sourceValue, targetValue);
+        defaultsDeepRecursive(targetValue, sourceValue, stack);
+        return;
+    }
+    if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
+        stack.set(sourceValue, targetValue);
+        mergeArrays(targetValue, sourceValue, stack);
+    }
+}
+function mergeArrays(targetArray, sourceArray, stack) {
+    const minLength = Math.min(sourceArray.length, targetArray.length);
+    for (let i = 0; i < minLength; i++) {
+        if (isPlainObject.isPlainObject(targetArray[i]) && isPlainObject.isPlainObject(sourceArray[i])) {
+            defaultsDeepRecursive(targetArray[i], sourceArray[i], stack);
+        }
+    }
+    for (let i = minLength; i < sourceArray.length; i++) {
+        targetArray.push(sourceArray[i]);
+    }
+}
+
+exports.defaultsDeep = defaultsDeep;
Index: node_modules/es-toolkit/dist/compat/object/defaultsDeep.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/defaultsDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/defaultsDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+import { isPlainObject } from '../predicate/isPlainObject.mjs';
+
+function defaultsDeep(target, ...sources) {
+    target = Object(target);
+    for (let i = 0; i < sources.length; i++) {
+        const source = sources[i];
+        if (source != null) {
+            defaultsDeepRecursive(target, source, new WeakMap());
+        }
+    }
+    return target;
+}
+function defaultsDeepRecursive(target, source, stack) {
+    for (const key in source) {
+        const sourceValue = source[key];
+        const targetValue = target[key];
+        if (targetValue === undefined || !Object.hasOwn(target, key)) {
+            target[key] = handleMissingProperty(sourceValue, stack);
+            continue;
+        }
+        if (stack.get(sourceValue) === targetValue) {
+            continue;
+        }
+        handleExistingProperty(targetValue, sourceValue, stack);
+    }
+}
+function handleMissingProperty(sourceValue, stack) {
+    if (stack.has(sourceValue)) {
+        return stack.get(sourceValue);
+    }
+    if (isPlainObject(sourceValue)) {
+        const newObj = {};
+        stack.set(sourceValue, newObj);
+        defaultsDeepRecursive(newObj, sourceValue, stack);
+        return newObj;
+    }
+    return sourceValue;
+}
+function handleExistingProperty(targetValue, sourceValue, stack) {
+    if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {
+        stack.set(sourceValue, targetValue);
+        defaultsDeepRecursive(targetValue, sourceValue, stack);
+        return;
+    }
+    if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
+        stack.set(sourceValue, targetValue);
+        mergeArrays(targetValue, sourceValue, stack);
+    }
+}
+function mergeArrays(targetArray, sourceArray, stack) {
+    const minLength = Math.min(sourceArray.length, targetArray.length);
+    for (let i = 0; i < minLength; i++) {
+        if (isPlainObject(targetArray[i]) && isPlainObject(sourceArray[i])) {
+            defaultsDeepRecursive(targetArray[i], sourceArray[i], stack);
+        }
+    }
+    for (let i = minLength; i < sourceArray.length; i++) {
+        targetArray.push(sourceArray[i]);
+    }
+}
+
+export { defaultsDeep };
Index: node_modules/es-toolkit/dist/compat/object/findKey.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/findKey.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/findKey.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { ObjectIteratee } from '../_internal/ObjectIteratee.mjs';
+
+/**
+ * Finds the key of the first element that matches the given predicate.
+ *
+ * This function determines the type of the predicate and delegates the search
+ * to the appropriate helper function. It supports predicates as functions, objects,
+ * arrays, or strings.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} obj - The object to inspect.
+ * @param {ObjectIteratee<T>} predicate - The predicate to match.
+ * @returns {string | undefined} Returns the key of the matched element, else `undefined`.
+ */
+declare function findKey<T>(obj: T | null | undefined, predicate?: ObjectIteratee<T>): string | undefined;
+
+export { findKey };
Index: node_modules/es-toolkit/dist/compat/object/findKey.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/findKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/findKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { ObjectIteratee } from '../_internal/ObjectIteratee.js';
+
+/**
+ * Finds the key of the first element that matches the given predicate.
+ *
+ * This function determines the type of the predicate and delegates the search
+ * to the appropriate helper function. It supports predicates as functions, objects,
+ * arrays, or strings.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} obj - The object to inspect.
+ * @param {ObjectIteratee<T>} predicate - The predicate to match.
+ * @returns {string | undefined} Returns the key of the matched element, else `undefined`.
+ */
+declare function findKey<T>(obj: T | null | undefined, predicate?: ObjectIteratee<T>): string | undefined;
+
+export { findKey };
Index: node_modules/es-toolkit/dist/compat/object/findKey.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/findKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/findKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const findKey$1 = require('../../object/findKey.js');
+const identity = require('../function/identity.js');
+const isObject = require('../predicate/isObject.js');
+const iteratee = require('../util/iteratee.js');
+
+function findKey(obj, predicate) {
+    if (!isObject.isObject(obj)) {
+        return undefined;
+    }
+    const iteratee$1 = iteratee.iteratee(predicate ?? identity.identity);
+    return findKey$1.findKey(obj, iteratee$1);
+}
+
+exports.findKey = findKey;
Index: node_modules/es-toolkit/dist/compat/object/findKey.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/findKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/findKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { findKey as findKey$1 } from '../../object/findKey.mjs';
+import { identity } from '../function/identity.mjs';
+import { isObject } from '../predicate/isObject.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function findKey(obj, predicate) {
+    if (!isObject(obj)) {
+        return undefined;
+    }
+    const iteratee$1 = iteratee(predicate ?? identity);
+    return findKey$1(obj, iteratee$1);
+}
+
+export { findKey };
Index: node_modules/es-toolkit/dist/compat/object/findLastKey.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/findLastKey.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/findLastKey.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { ObjectIteratee } from '../_internal/ObjectIteratee.mjs';
+
+/**
+ * Finds the key of the last element that matches the given predicate.
+ *
+ * This function determines the type of the predicate and delegates the search
+ * to the appropriate helper function. It supports predicates as functions, objects,
+ * arrays, or strings.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} obj - The object to inspect.
+ * @param {ObjectIteratee<T>} predicate - The predicate to match.
+ * @returns {string | undefined} Returns the key of the matched element, else `undefined`.
+ */
+declare function findLastKey<T>(obj: T | null | undefined, predicate?: ObjectIteratee<T>): string | undefined;
+
+export { findLastKey };
Index: node_modules/es-toolkit/dist/compat/object/findLastKey.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/findLastKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/findLastKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { ObjectIteratee } from '../_internal/ObjectIteratee.js';
+
+/**
+ * Finds the key of the last element that matches the given predicate.
+ *
+ * This function determines the type of the predicate and delegates the search
+ * to the appropriate helper function. It supports predicates as functions, objects,
+ * arrays, or strings.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} obj - The object to inspect.
+ * @param {ObjectIteratee<T>} predicate - The predicate to match.
+ * @returns {string | undefined} Returns the key of the matched element, else `undefined`.
+ */
+declare function findLastKey<T>(obj: T | null | undefined, predicate?: ObjectIteratee<T>): string | undefined;
+
+export { findLastKey };
Index: node_modules/es-toolkit/dist/compat/object/findLastKey.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/findLastKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/findLastKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../function/identity.js');
+const isObject = require('../predicate/isObject.js');
+const iteratee = require('../util/iteratee.js');
+
+function findLastKey(obj, predicate) {
+    if (!isObject.isObject(obj)) {
+        return undefined;
+    }
+    const iteratee$1 = iteratee.iteratee(predicate ?? identity.identity);
+    const keys = Object.keys(obj);
+    return keys.findLast(key => iteratee$1(obj[key], key, obj));
+}
+
+exports.findLastKey = findLastKey;
Index: node_modules/es-toolkit/dist/compat/object/findLastKey.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/findLastKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/findLastKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { identity } from '../function/identity.mjs';
+import { isObject } from '../predicate/isObject.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function findLastKey(obj, predicate) {
+    if (!isObject(obj)) {
+        return undefined;
+    }
+    const iteratee$1 = iteratee(predicate ?? identity);
+    const keys = Object.keys(obj);
+    return keys.findLast(key => iteratee$1(obj[key], key, obj));
+}
+
+export { findLastKey };
Index: node_modules/es-toolkit/dist/compat/object/forIn.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+/**
+ * Iterates over an object and invokes the `iteratee` function for each property.
+ *
+ * Iterates over string keyed properties including inherited properties.
+ *
+ * The iteration is terminated early if the `iteratee` function returns `false`.
+ *
+ * @template T - The type of the object
+ * @param {T} object - The object to iterate over
+ * @param {(value: T[keyof T], key: string, obj: T) => any} iteratee - The function invoked per iteration
+ * @returns {T} Returns the object
+ *
+ * @example
+ * // Iterate over all properties including inherited ones
+ * const obj = { a: 1, b: 2 };
+ * forIn(obj, (value, key) => {
+ *   console.log(key, value);
+ * });
+ * // Output: 'a' 1, 'b' 2
+ *
+ * // Early termination
+ * forIn(obj, (value, key) => {
+ *   console.log(key, value);
+ *   return key !== 'a'; // stop after 'a'
+ * });
+ * // Output: 'a' 1
+ */
+declare function forIn<T>(object: T, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T;
+/**
+ * Iterates over an object and invokes the `iteratee` function for each property.
+ *
+ * Iterates over string keyed properties including inherited properties.
+ *
+ * The iteration is terminated early if the `iteratee` function returns `false`.
+ *
+ * @template T - The type of the object
+ * @param {T | null | undefined} object - The object to iterate over
+ * @param {(value: T[keyof T], key: string, obj: T) => any} iteratee - The function invoked per iteration
+ * @returns {T | null | undefined} Returns the object
+ *
+ * @example
+ * // Iterate over all properties including inherited ones
+ * const obj = { a: 1, b: 2 };
+ * forIn(obj, (value, key) => {
+ *   console.log(key, value);
+ * });
+ * // Output: 'a' 1, 'b' 2
+ *
+ * // Early termination
+ * forIn(obj, (value, key) => {
+ *   console.log(key, value);
+ *   return key !== 'a'; // stop after 'a'
+ * });
+ * // Output: 'a' 1
+ */
+declare function forIn<T>(object: T | null | undefined, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T | null | undefined;
+
+export { forIn };
Index: node_modules/es-toolkit/dist/compat/object/forIn.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+/**
+ * Iterates over an object and invokes the `iteratee` function for each property.
+ *
+ * Iterates over string keyed properties including inherited properties.
+ *
+ * The iteration is terminated early if the `iteratee` function returns `false`.
+ *
+ * @template T - The type of the object
+ * @param {T} object - The object to iterate over
+ * @param {(value: T[keyof T], key: string, obj: T) => any} iteratee - The function invoked per iteration
+ * @returns {T} Returns the object
+ *
+ * @example
+ * // Iterate over all properties including inherited ones
+ * const obj = { a: 1, b: 2 };
+ * forIn(obj, (value, key) => {
+ *   console.log(key, value);
+ * });
+ * // Output: 'a' 1, 'b' 2
+ *
+ * // Early termination
+ * forIn(obj, (value, key) => {
+ *   console.log(key, value);
+ *   return key !== 'a'; // stop after 'a'
+ * });
+ * // Output: 'a' 1
+ */
+declare function forIn<T>(object: T, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T;
+/**
+ * Iterates over an object and invokes the `iteratee` function for each property.
+ *
+ * Iterates over string keyed properties including inherited properties.
+ *
+ * The iteration is terminated early if the `iteratee` function returns `false`.
+ *
+ * @template T - The type of the object
+ * @param {T | null | undefined} object - The object to iterate over
+ * @param {(value: T[keyof T], key: string, obj: T) => any} iteratee - The function invoked per iteration
+ * @returns {T | null | undefined} Returns the object
+ *
+ * @example
+ * // Iterate over all properties including inherited ones
+ * const obj = { a: 1, b: 2 };
+ * forIn(obj, (value, key) => {
+ *   console.log(key, value);
+ * });
+ * // Output: 'a' 1, 'b' 2
+ *
+ * // Early termination
+ * forIn(obj, (value, key) => {
+ *   console.log(key, value);
+ *   return key !== 'a'; // stop after 'a'
+ * });
+ * // Output: 'a' 1
+ */
+declare function forIn<T>(object: T | null | undefined, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T | null | undefined;
+
+export { forIn };
Index: node_modules/es-toolkit/dist/compat/object/forIn.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+
+function forIn(object, iteratee = identity.identity) {
+    if (object == null) {
+        return object;
+    }
+    for (const key in object) {
+        const result = iteratee(object[key], key, object);
+        if (result === false) {
+            break;
+        }
+    }
+    return object;
+}
+
+exports.forIn = forIn;
Index: node_modules/es-toolkit/dist/compat/object/forIn.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { identity } from '../../function/identity.mjs';
+
+function forIn(object, iteratee = identity) {
+    if (object == null) {
+        return object;
+    }
+    for (const key in object) {
+        const result = iteratee(object[key], key, object);
+        if (result === false) {
+            break;
+        }
+    }
+    return object;
+}
+
+export { forIn };
Index: node_modules/es-toolkit/dist/compat/object/forInRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forInRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forInRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+/**
+ * Iterates over an object in reverse order and invokes the `iteratee` function for each property.
+ *
+ * Iterates over string keyed properties including inherited properties in reverse order.
+ *
+ * The iteration is terminated early if the `iteratee` function returns `false`.
+ *
+ * @template T - The type of the object
+ * @param {T} object - The object to iterate over
+ * @param {(value: T[keyof T], key: string, collection: T) => any} iteratee - The function invoked per iteration
+ * @returns {T} Returns the object
+ *
+ * @example
+ * // Iterate over all properties including inherited ones
+ * const obj = { a: 1, b: 2 };
+ * forInRight(obj, (value, key) => {
+ *   console.log(key, value);
+ * });
+ * // Output: 'b' 2, 'a' 1
+ *
+ * // Early termination
+ * forInRight(obj, (value, key) => {
+ *   console.log(key, value);
+ *   return key !== 'a'; // stop after 'a'
+ * });
+ * // Output: 'b' 2
+ */
+declare function forInRight<T>(object: T, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T;
+/**
+ * Iterates over an object in reverse order and invokes the `iteratee` function for each property.
+ *
+ * Iterates over string keyed properties including inherited properties in reverse order.
+ *
+ * The iteration is terminated early if the `iteratee` function returns `false`.
+ *
+ * @template T - The type of the object
+ * @param {T | null | undefined} object - The object to iterate over
+ * @param {(value: T[keyof T], key: string, obj: T) => any} iteratee - The function invoked per iteration
+ * @returns {T | null | undefined} Returns the object
+ *
+ * @example
+ * // Iterate over all properties including inherited ones
+ * const obj = { a: 1, b: 2 };
+ * forInRight(obj, (value, key) => {
+ *   console.log(key, value);
+ * });
+ * // Output: 'b' 2, 'a' 1
+ *
+ * // Early termination
+ * forInRight(obj, (value, key) => {
+ *   console.log(key, value);
+ *   return key !== 'a'; // stop after 'a'
+ * });
+ * // Output: 'b' 2
+ */
+declare function forInRight<T>(object: T | null | undefined, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T | null | undefined;
+
+export { forInRight };
Index: node_modules/es-toolkit/dist/compat/object/forInRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forInRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forInRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+/**
+ * Iterates over an object in reverse order and invokes the `iteratee` function for each property.
+ *
+ * Iterates over string keyed properties including inherited properties in reverse order.
+ *
+ * The iteration is terminated early if the `iteratee` function returns `false`.
+ *
+ * @template T - The type of the object
+ * @param {T} object - The object to iterate over
+ * @param {(value: T[keyof T], key: string, collection: T) => any} iteratee - The function invoked per iteration
+ * @returns {T} Returns the object
+ *
+ * @example
+ * // Iterate over all properties including inherited ones
+ * const obj = { a: 1, b: 2 };
+ * forInRight(obj, (value, key) => {
+ *   console.log(key, value);
+ * });
+ * // Output: 'b' 2, 'a' 1
+ *
+ * // Early termination
+ * forInRight(obj, (value, key) => {
+ *   console.log(key, value);
+ *   return key !== 'a'; // stop after 'a'
+ * });
+ * // Output: 'b' 2
+ */
+declare function forInRight<T>(object: T, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T;
+/**
+ * Iterates over an object in reverse order and invokes the `iteratee` function for each property.
+ *
+ * Iterates over string keyed properties including inherited properties in reverse order.
+ *
+ * The iteration is terminated early if the `iteratee` function returns `false`.
+ *
+ * @template T - The type of the object
+ * @param {T | null | undefined} object - The object to iterate over
+ * @param {(value: T[keyof T], key: string, obj: T) => any} iteratee - The function invoked per iteration
+ * @returns {T | null | undefined} Returns the object
+ *
+ * @example
+ * // Iterate over all properties including inherited ones
+ * const obj = { a: 1, b: 2 };
+ * forInRight(obj, (value, key) => {
+ *   console.log(key, value);
+ * });
+ * // Output: 'b' 2, 'a' 1
+ *
+ * // Early termination
+ * forInRight(obj, (value, key) => {
+ *   console.log(key, value);
+ *   return key !== 'a'; // stop after 'a'
+ * });
+ * // Output: 'b' 2
+ */
+declare function forInRight<T>(object: T | null | undefined, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T | null | undefined;
+
+export { forInRight };
Index: node_modules/es-toolkit/dist/compat/object/forInRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forInRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forInRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+
+function forInRight(object, iteratee = identity.identity) {
+    if (object == null) {
+        return object;
+    }
+    const keys = [];
+    for (const key in object) {
+        keys.push(key);
+    }
+    for (let i = keys.length - 1; i >= 0; i--) {
+        const key = keys[i];
+        const result = iteratee(object[key], key, object);
+        if (result === false) {
+            break;
+        }
+    }
+    return object;
+}
+
+exports.forInRight = forInRight;
Index: node_modules/es-toolkit/dist/compat/object/forInRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forInRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forInRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { identity } from '../../function/identity.mjs';
+
+function forInRight(object, iteratee = identity) {
+    if (object == null) {
+        return object;
+    }
+    const keys = [];
+    for (const key in object) {
+        keys.push(key);
+    }
+    for (let i = keys.length - 1; i >= 0; i--) {
+        const key = keys[i];
+        const result = iteratee(object[key], key, object);
+        if (result === false) {
+            break;
+        }
+    }
+    return object;
+}
+
+export { forInRight };
Index: node_modules/es-toolkit/dist/compat/object/forOwn.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forOwn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forOwn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+/**
+ * Iterates over an object's properties and calls the `iteratee` function for each property.
+ *
+ * It only iterates over the object's own properties, not including inherited properties or properties with `Symbol` keys.
+ *
+ * The `iteratee` function can terminate the iteration early by returning `false`.
+ *
+ * @template T - The type of the object.
+ * @param {T} object The object to iterate over.
+ * @param {(value: T[keyof T], key: string, collection: T) => any} [iteratee=identity] The function invoked per iteration. If not provided, the identity function will be used.
+ * @return {T} Returns object.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * forOwn(new Foo(), function(value, key) {
+ *   console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+declare function forOwn<T>(object: T, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T;
+/**
+ * Iterates over an object's properties and calls the `iteratee` function for each property.
+ *
+ * It only iterates over the object's own properties, not including inherited properties or properties with `Symbol` keys.
+ *
+ * The `iteratee` function can terminate the iteration early by returning `false`.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} object The object to iterate over.
+ * @param {(value: T[keyof T], key: string, collection: T) => any} [iteratee=identity] The function invoked per iteration. If not provided, the identity function will be used.
+ * @return {T | null | undefined} Returns object.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * forOwn(new Foo(), function(value, key) {
+ *   console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+declare function forOwn<T>(object: T | null | undefined, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T | null | undefined;
+
+export { forOwn };
Index: node_modules/es-toolkit/dist/compat/object/forOwn.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forOwn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forOwn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+/**
+ * Iterates over an object's properties and calls the `iteratee` function for each property.
+ *
+ * It only iterates over the object's own properties, not including inherited properties or properties with `Symbol` keys.
+ *
+ * The `iteratee` function can terminate the iteration early by returning `false`.
+ *
+ * @template T - The type of the object.
+ * @param {T} object The object to iterate over.
+ * @param {(value: T[keyof T], key: string, collection: T) => any} [iteratee=identity] The function invoked per iteration. If not provided, the identity function will be used.
+ * @return {T} Returns object.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * forOwn(new Foo(), function(value, key) {
+ *   console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+declare function forOwn<T>(object: T, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T;
+/**
+ * Iterates over an object's properties and calls the `iteratee` function for each property.
+ *
+ * It only iterates over the object's own properties, not including inherited properties or properties with `Symbol` keys.
+ *
+ * The `iteratee` function can terminate the iteration early by returning `false`.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} object The object to iterate over.
+ * @param {(value: T[keyof T], key: string, collection: T) => any} [iteratee=identity] The function invoked per iteration. If not provided, the identity function will be used.
+ * @return {T | null | undefined} Returns object.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * forOwn(new Foo(), function(value, key) {
+ *   console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+declare function forOwn<T>(object: T | null | undefined, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T | null | undefined;
+
+export { forOwn };
Index: node_modules/es-toolkit/dist/compat/object/forOwn.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forOwn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forOwn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keys = require('./keys.js');
+const identity = require('../../function/identity.js');
+
+function forOwn(object, iteratee = identity.identity) {
+    if (object == null) {
+        return object;
+    }
+    const iterable = Object(object);
+    const keys$1 = keys.keys(object);
+    for (let i = 0; i < keys$1.length; ++i) {
+        const key = keys$1[i];
+        if (iteratee(iterable[key], key, iterable) === false) {
+            break;
+        }
+    }
+    return object;
+}
+
+exports.forOwn = forOwn;
Index: node_modules/es-toolkit/dist/compat/object/forOwn.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forOwn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forOwn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import { keys } from './keys.mjs';
+import { identity } from '../../function/identity.mjs';
+
+function forOwn(object, iteratee = identity) {
+    if (object == null) {
+        return object;
+    }
+    const iterable = Object(object);
+    const keys$1 = keys(object);
+    for (let i = 0; i < keys$1.length; ++i) {
+        const key = keys$1[i];
+        if (iteratee(iterable[key], key, iterable) === false) {
+            break;
+        }
+    }
+    return object;
+}
+
+export { forOwn };
Index: node_modules/es-toolkit/dist/compat/object/forOwnRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forOwnRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forOwnRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+/**
+ * Iterates over an object's properties in reverse order and calls the `iteratee` function for each property.
+ *
+ * It only iterates over the object's own properties, not including inherited properties or properties with `Symbol` keys.
+ *
+ * The `iteratee` function can terminate the iteration early by returning `false`.
+ *
+ * @template T - The type of the object.
+ * @param {T} object The object to iterate over.
+ * @param {(value: T[keyof T], key: string, collection: T) => any} [iteratee=identity] The function invoked per iteration. If not provided, the identity function will be used.
+ * @return {T} Returns object.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * forOwnRight(new Foo(), function(value, key) {
+ *   console.log(key);
+ * });
+ * // => Logs 'b' then 'a' (iteration order is not guaranteed).
+ */
+declare function forOwnRight<T>(object: T, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T;
+/**
+ * Iterates over an object's properties in reverse order and calls the `iteratee` function for each property.
+ *
+ * It only iterates over the object's own properties, not including inherited properties or properties with `Symbol` keys.
+ *
+ * The `iteratee` function can terminate the iteration early by returning `false`.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} object The object to iterate over.
+ * @param {(value: T[keyof T], key: string, collection: T) => any} [iteratee=identity] The function invoked per iteration. If not provided, the identity function will be used.
+ * @return {T | null | undefined} Returns object.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * forOwnRight(new Foo(), function(value, key) {
+ *   console.log(key);
+ * });
+ * // => Logs 'b' then 'a' (iteration order is not guaranteed).
+ */
+declare function forOwnRight<T>(object: T | null | undefined, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T | null | undefined;
+
+export { forOwnRight };
Index: node_modules/es-toolkit/dist/compat/object/forOwnRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forOwnRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forOwnRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+/**
+ * Iterates over an object's properties in reverse order and calls the `iteratee` function for each property.
+ *
+ * It only iterates over the object's own properties, not including inherited properties or properties with `Symbol` keys.
+ *
+ * The `iteratee` function can terminate the iteration early by returning `false`.
+ *
+ * @template T - The type of the object.
+ * @param {T} object The object to iterate over.
+ * @param {(value: T[keyof T], key: string, collection: T) => any} [iteratee=identity] The function invoked per iteration. If not provided, the identity function will be used.
+ * @return {T} Returns object.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * forOwnRight(new Foo(), function(value, key) {
+ *   console.log(key);
+ * });
+ * // => Logs 'b' then 'a' (iteration order is not guaranteed).
+ */
+declare function forOwnRight<T>(object: T, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T;
+/**
+ * Iterates over an object's properties in reverse order and calls the `iteratee` function for each property.
+ *
+ * It only iterates over the object's own properties, not including inherited properties or properties with `Symbol` keys.
+ *
+ * The `iteratee` function can terminate the iteration early by returning `false`.
+ *
+ * @template T - The type of the object.
+ * @param {T | null | undefined} object The object to iterate over.
+ * @param {(value: T[keyof T], key: string, collection: T) => any} [iteratee=identity] The function invoked per iteration. If not provided, the identity function will be used.
+ * @return {T | null | undefined} Returns object.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * forOwnRight(new Foo(), function(value, key) {
+ *   console.log(key);
+ * });
+ * // => Logs 'b' then 'a' (iteration order is not guaranteed).
+ */
+declare function forOwnRight<T>(object: T | null | undefined, iteratee?: (value: T[keyof T], key: string, collection: T) => any): T | null | undefined;
+
+export { forOwnRight };
Index: node_modules/es-toolkit/dist/compat/object/forOwnRight.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forOwnRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forOwnRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keys = require('./keys.js');
+const identity = require('../../function/identity.js');
+
+function forOwnRight(object, iteratee = identity.identity) {
+    if (object == null) {
+        return object;
+    }
+    const iterable = Object(object);
+    const keys$1 = keys.keys(object);
+    for (let i = keys$1.length - 1; i >= 0; --i) {
+        const key = keys$1[i];
+        if (iteratee(iterable[key], key, iterable) === false) {
+            break;
+        }
+    }
+    return object;
+}
+
+exports.forOwnRight = forOwnRight;
Index: node_modules/es-toolkit/dist/compat/object/forOwnRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/forOwnRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/forOwnRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import { keys } from './keys.mjs';
+import { identity } from '../../function/identity.mjs';
+
+function forOwnRight(object, iteratee = identity) {
+    if (object == null) {
+        return object;
+    }
+    const iterable = Object(object);
+    const keys$1 = keys(object);
+    for (let i = keys$1.length - 1; i >= 0; --i) {
+        const key = keys$1[i];
+        if (iteratee(iterable[key], key, iterable) === false) {
+            break;
+        }
+    }
+    return object;
+}
+
+export { forOwnRight };
Index: node_modules/es-toolkit/dist/compat/object/fromPairs.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/fromPairs.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/fromPairs.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+type PropertyName = string | number | symbol;
+/**
+ * Converts an array of key-value pairs into an object.
+ *
+ * @template T - The type of the values.
+ * @param {ArrayLike<[PropertyName, T]> | null | undefined} pairs - An array of key-value pairs.
+ * @returns {Record<string, T>} - An object where keys are strings and values are of type T.
+ *
+ * @example
+ * const pairs = [['a', 1], ['b', 2]];
+ * const result = fromPairs(pairs);
+ * // => { a: 1, b: 2 }
+ */
+declare function fromPairs<T>(pairs: ArrayLike<[PropertyName, T]> | null | undefined): Record<string, T>;
+/**
+ * Converts an array of key-value pairs into an object.
+ *
+ * @param {ArrayLike<any[]> | null | undefined} pairs - An array of key-value pairs.
+ * @returns {Record<string, any>} - An object where keys are strings and values can be any type.
+ *
+ * @example
+ * const pairs = [['a', 1], ['b', 'hello']];
+ * const result = fromPairs(pairs);
+ * // => { a: 1, b: 'hello' }
+ */
+declare function fromPairs(pairs: ArrayLike<any[]> | null | undefined): Record<string, any>;
+
+export { fromPairs };
Index: node_modules/es-toolkit/dist/compat/object/fromPairs.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/fromPairs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/fromPairs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+type PropertyName = string | number | symbol;
+/**
+ * Converts an array of key-value pairs into an object.
+ *
+ * @template T - The type of the values.
+ * @param {ArrayLike<[PropertyName, T]> | null | undefined} pairs - An array of key-value pairs.
+ * @returns {Record<string, T>} - An object where keys are strings and values are of type T.
+ *
+ * @example
+ * const pairs = [['a', 1], ['b', 2]];
+ * const result = fromPairs(pairs);
+ * // => { a: 1, b: 2 }
+ */
+declare function fromPairs<T>(pairs: ArrayLike<[PropertyName, T]> | null | undefined): Record<string, T>;
+/**
+ * Converts an array of key-value pairs into an object.
+ *
+ * @param {ArrayLike<any[]> | null | undefined} pairs - An array of key-value pairs.
+ * @returns {Record<string, any>} - An object where keys are strings and values can be any type.
+ *
+ * @example
+ * const pairs = [['a', 1], ['b', 'hello']];
+ * const result = fromPairs(pairs);
+ * // => { a: 1, b: 'hello' }
+ */
+declare function fromPairs(pairs: ArrayLike<any[]> | null | undefined): Record<string, any>;
+
+export { fromPairs };
Index: node_modules/es-toolkit/dist/compat/object/fromPairs.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/fromPairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/fromPairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLike = require('../predicate/isArrayLike.js');
+
+function fromPairs(pairs) {
+    if (!isArrayLike.isArrayLike(pairs)) {
+        return {};
+    }
+    const result = {};
+    for (let i = 0; i < pairs.length; i++) {
+        const [key, value] = pairs[i];
+        result[key] = value;
+    }
+    return result;
+}
+
+exports.fromPairs = fromPairs;
Index: node_modules/es-toolkit/dist/compat/object/fromPairs.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/fromPairs.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/fromPairs.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+
+function fromPairs(pairs) {
+    if (!isArrayLike(pairs)) {
+        return {};
+    }
+    const result = {};
+    for (let i = 0; i < pairs.length; i++) {
+        const [key, value] = pairs[i];
+        result[key] = value;
+    }
+    return result;
+}
+
+export { fromPairs };
Index: node_modules/es-toolkit/dist/compat/object/functions.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/functions.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/functions.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates an array of property names from an object where the property values are functions.
+ *
+ * @param {any} object - The object to inspect.
+ * @returns {string[]} - An array of function property names.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = () => 'a';
+ *   this.b = () => 'b';
+ * }
+ *
+ * Foo.prototype.c = () => 'c';
+ *
+ * functions(new Foo);
+ * // => ['a', 'b']
+ */
+declare function functions(object: any): string[];
+
+export { functions };
Index: node_modules/es-toolkit/dist/compat/object/functions.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/functions.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/functions.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates an array of property names from an object where the property values are functions.
+ *
+ * @param {any} object - The object to inspect.
+ * @returns {string[]} - An array of function property names.
+ *
+ * @example
+ * function Foo() {
+ *   this.a = () => 'a';
+ *   this.b = () => 'b';
+ * }
+ *
+ * Foo.prototype.c = () => 'c';
+ *
+ * functions(new Foo);
+ * // => ['a', 'b']
+ */
+declare function functions(object: any): string[];
+
+export { functions };
Index: node_modules/es-toolkit/dist/compat/object/functions.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/functions.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/functions.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keys = require('./keys.js');
+
+function functions(object) {
+    if (object == null) {
+        return [];
+    }
+    return keys.keys(object).filter(key => typeof object[key] === 'function');
+}
+
+exports.functions = functions;
Index: node_modules/es-toolkit/dist/compat/object/functions.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/functions.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/functions.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { keys } from './keys.mjs';
+
+function functions(object) {
+    if (object == null) {
+        return [];
+    }
+    return keys(object).filter(key => typeof object[key] === 'function');
+}
+
+export { functions };
Index: node_modules/es-toolkit/dist/compat/object/functionsIn.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/functionsIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/functionsIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Returns an array of property names whose values are functions, including inherited properties.
+ *
+ * @param {*} object The object to inspect.
+ * @returns {Array} Returns the function names.
+ * @example
+ *
+ * function Foo() {
+ *   this.a = function() { return 'a'; };
+ *   this.b = function() { return 'b'; };
+ * }
+ *
+ * Foo.prototype.c = function() { return 'c'; };
+ *
+ * functionsIn(new Foo);
+ * // => ['a', 'b', 'c']
+ */
+declare function functionsIn<T extends {}>(object: any): string[];
+
+export { functionsIn };
Index: node_modules/es-toolkit/dist/compat/object/functionsIn.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/functionsIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/functionsIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Returns an array of property names whose values are functions, including inherited properties.
+ *
+ * @param {*} object The object to inspect.
+ * @returns {Array} Returns the function names.
+ * @example
+ *
+ * function Foo() {
+ *   this.a = function() { return 'a'; };
+ *   this.b = function() { return 'b'; };
+ * }
+ *
+ * Foo.prototype.c = function() { return 'c'; };
+ *
+ * functionsIn(new Foo);
+ * // => ['a', 'b', 'c']
+ */
+declare function functionsIn<T extends {}>(object: any): string[];
+
+export { functionsIn };
Index: node_modules/es-toolkit/dist/compat/object/functionsIn.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/functionsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/functionsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isFunction = require('../../predicate/isFunction.js');
+
+function functionsIn(object) {
+    if (object == null) {
+        return [];
+    }
+    const result = [];
+    for (const key in object) {
+        if (isFunction.isFunction(object[key])) {
+            result.push(key);
+        }
+    }
+    return result;
+}
+
+exports.functionsIn = functionsIn;
Index: node_modules/es-toolkit/dist/compat/object/functionsIn.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/functionsIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/functionsIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { isFunction } from '../../predicate/isFunction.mjs';
+
+function functionsIn(object) {
+    if (object == null) {
+        return [];
+    }
+    const result = [];
+    for (const key in object) {
+        if (isFunction(object[key])) {
+            result.push(key);
+        }
+    }
+    return result;
+}
+
+export { functionsIn };
Index: node_modules/es-toolkit/dist/compat/object/get.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/get.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/get.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,327 @@
+import { GetFieldType } from '../_internal/GetFieldType.mjs';
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey
+ * @param {TObject} object - The object to query.
+ * @param {TKey | [TKey]} path - The path of the property to get.
+ * @returns {TObject[TKey]} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * get(object, 'a[0].b.c');
+ * // => 3
+ */
+declare function get<TObject extends object, TKey extends keyof TObject>(object: TObject, path: TKey | [TKey]): TObject[TKey];
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {TKey | [TKey]} path - The path of the property to get.
+ * @returns {TObject[TKey] | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * get(object, 'a[0].b.c');
+ * // => 3
+ */
+declare function get<TObject extends object, TKey extends keyof TObject>(object: TObject | null | undefined, path: TKey | [TKey]): TObject[TKey] | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey
+ * @template TDefault
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {TKey | [TKey]} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<TObject[TKey], undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * get(object, 'a[0].b.c', 'default');
+ * // => 3
+ */
+declare function get<TObject extends object, TKey extends keyof TObject, TDefault>(object: TObject | null | undefined, path: TKey | [TKey], defaultValue: TDefault): Exclude<TObject[TKey], undefined> | TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @param {TObject} object - The object to query.
+ * @param {[TKey1, TKey2]} path - The path of the property to get.
+ * @returns {TObject[TKey1][TKey2]} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': 2 } };
+ * get(object, ['a', 'b']);
+ * // => 2
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof TObject[TKey1]>(object: TObject, path: [TKey1, TKey2]): TObject[TKey1][TKey2];
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2]} path - The path of the property to get.
+ * @returns {NonNullable<TObject[TKey1]>[TKey2] | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': 2 } };
+ * get(object, ['a', 'b']);
+ * // => 2
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>>(object: TObject | null | undefined, path: [TKey1, TKey2]): NonNullable<TObject[TKey1]>[TKey2] | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TDefault
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2]} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<NonNullable<TObject[TKey1]>[TKey2], undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': 2 } };
+ * get(object, ['a', 'b'], 'default');
+ * // => 2
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TDefault>(object: TObject | null | undefined, path: [TKey1, TKey2], defaultValue: TDefault): Exclude<NonNullable<TObject[TKey1]>[TKey2], undefined> | TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @param {TObject} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3]} path - The path of the property to get.
+ * @returns {TObject[TKey1][TKey2][TKey3]} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': 3 } } };
+ * get(object, ['a', 'b', 'c']);
+ * // => 3
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof TObject[TKey1], TKey3 extends keyof TObject[TKey1][TKey2]>(object: TObject, path: [TKey1, TKey2, TKey3]): TObject[TKey1][TKey2][TKey3];
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3]} path - The path of the property to get.
+ * @returns {NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3] | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': 3 } } };
+ * get(object, ['a', 'b', 'c']);
+ * // => 3
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3]): NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3] | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @template TDefault
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3]} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3], undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': 3 } } };
+ * get(object, ['a', 'b', 'c'], 'default');
+ * // => 3
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>, TDefault>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3], defaultValue: TDefault): Exclude<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3], undefined> | TDefault;
+/**
+ * Gets the value at path of object.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @template TKey4
+ * @param {TObject} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3, TKey4]} path - The path of the property to get.
+ * @returns {TObject[TKey1][TKey2][TKey3][TKey4]} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': { 'd': 4 } } } };
+ * get(object, ['a', 'b', 'c', 'd']);
+ * // => 4
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof TObject[TKey1], TKey3 extends keyof TObject[TKey1][TKey2], TKey4 extends keyof TObject[TKey1][TKey2][TKey3]>(object: TObject, path: [TKey1, TKey2, TKey3, TKey4]): TObject[TKey1][TKey2][TKey3][TKey4];
+/**
+ * Gets the value at path of object. If the resolved value is undefined, undefined is returned.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @template TKey4
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3, TKey4]} path - The path of the property to get.
+ * @returns {NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>[TKey4] | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': { 'd': 4 } } } };
+ * get(object, ['a', 'b', 'c', 'd']);
+ * // => 4
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>, TKey4 extends keyof NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3, TKey4]): NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>[TKey4] | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @template TKey4
+ * @template TDefault
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3, TKey4]} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>[TKey4], undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': { 'd': 4 } } } };
+ * get(object, ['a', 'b', 'c', 'd'], 'default');
+ * // => 4
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>, TKey4 extends keyof NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>, TDefault>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3, TKey4], defaultValue: TDefault): Exclude<NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>[TKey4], undefined> | TDefault;
+/**
+ * Gets the value at path of object.
+ *
+ * @template T
+ * @param {Record<number, T>} object - The object to query.
+ * @param {number} path - The path of the property to get.
+ * @returns {T} Returns the resolved value.
+ *
+ * @example
+ * const object = { 0: 'a', 1: 'b', 2: 'c' };
+ * get(object, 1);
+ * // => 'b'
+ */
+declare function get<T>(object: Record<number, T>, path: number): T;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, undefined is returned.
+ *
+ * @template T
+ * @param {Record<number, T> | null | undefined} object - The object to query.
+ * @param {number} path - The path of the property to get.
+ * @returns {T | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 0: 'a', 1: 'b', 2: 'c' };
+ * get(object, 1);
+ * // => 'b'
+ */
+declare function get<T>(object: Record<number, T> | null | undefined, path: number): T | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template T
+ * @template TDefault
+ * @param {Record<number, T> | null | undefined} object - The object to query.
+ * @param {number} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {T | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 0: 'a', 1: 'b', 2: 'c' };
+ * get(object, 1, 'default');
+ * // => 'b'
+ */
+declare function get<T, TDefault>(object: Record<number, T> | null | undefined, path: number, defaultValue: TDefault): T | TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TDefault
+ * @param {null | undefined} object - The object to query.
+ * @param {PropertyPath} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {TDefault} Returns the default value.
+ *
+ * @example
+ * get(null, 'a.b.c', 'default');
+ * // => 'default'
+ */
+declare function get<TDefault>(object: null | undefined, path: PropertyPath, defaultValue: TDefault): TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, undefined is returned.
+ *
+ * @param {null | undefined} object - The object to query.
+ * @param {PropertyPath} path - The path of the property to get.
+ * @returns {undefined} Returns undefined.
+ *
+ * @example
+ * get(null, 'a.b.c');
+ * // => undefined
+ */
+declare function get(object: null | undefined, path: PropertyPath): undefined;
+/**
+ * Gets the value at path of object using type-safe path.
+ *
+ * @template TObject
+ * @template TPath
+ * @param {TObject} data - The object to query.
+ * @param {TPath} path - The path of the property to get.
+ * @returns {string extends TPath ? any : GetFieldType<TObject, TPath>} Returns the resolved value.
+ *
+ * @example
+ * const object = { a: { b: { c: 1 } } };
+ * get(object, 'a.b.c');
+ * // => 1
+ */
+declare function get<TObject, TPath extends string>(data: TObject, path: TPath): string extends TPath ? any : GetFieldType<TObject, TPath>;
+/**
+ * Gets the value at path of object using type-safe path. If the resolved value is undefined, the defaultValue is returned.
+ *
+ * @template TObject
+ * @template TPath
+ * @template TDefault
+ * @param {TObject} data - The object to query.
+ * @param {TPath} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { a: { b: { c: 1 } } };
+ * get(object, 'a.b.d', 'default');
+ * // => 'default'
+ */
+declare function get<TObject, TPath extends string, TDefault = GetFieldType<TObject, TPath>>(data: TObject, path: TPath, defaultValue: TDefault): Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned.
+ *
+ * @param {any} object - The object to query.
+ * @param {PropertyPath} path - The path of the property to get.
+ * @param {any} [defaultValue] - The value returned if the resolved value is undefined.
+ * @returns {any} Returns the resolved value.
+ *
+ * @example
+ * const object = { a: { b: { c: 1 } } };
+ * get(object, 'a.b.c', 'default');
+ * // => 1
+ */
+declare function get(object: any, path: PropertyPath, defaultValue?: any): any;
+
+export { get };
Index: node_modules/es-toolkit/dist/compat/object/get.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/get.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/get.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,327 @@
+import { GetFieldType } from '../_internal/GetFieldType.js';
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey
+ * @param {TObject} object - The object to query.
+ * @param {TKey | [TKey]} path - The path of the property to get.
+ * @returns {TObject[TKey]} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * get(object, 'a[0].b.c');
+ * // => 3
+ */
+declare function get<TObject extends object, TKey extends keyof TObject>(object: TObject, path: TKey | [TKey]): TObject[TKey];
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {TKey | [TKey]} path - The path of the property to get.
+ * @returns {TObject[TKey] | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * get(object, 'a[0].b.c');
+ * // => 3
+ */
+declare function get<TObject extends object, TKey extends keyof TObject>(object: TObject | null | undefined, path: TKey | [TKey]): TObject[TKey] | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey
+ * @template TDefault
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {TKey | [TKey]} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<TObject[TKey], undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * get(object, 'a[0].b.c', 'default');
+ * // => 3
+ */
+declare function get<TObject extends object, TKey extends keyof TObject, TDefault>(object: TObject | null | undefined, path: TKey | [TKey], defaultValue: TDefault): Exclude<TObject[TKey], undefined> | TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @param {TObject} object - The object to query.
+ * @param {[TKey1, TKey2]} path - The path of the property to get.
+ * @returns {TObject[TKey1][TKey2]} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': 2 } };
+ * get(object, ['a', 'b']);
+ * // => 2
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof TObject[TKey1]>(object: TObject, path: [TKey1, TKey2]): TObject[TKey1][TKey2];
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2]} path - The path of the property to get.
+ * @returns {NonNullable<TObject[TKey1]>[TKey2] | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': 2 } };
+ * get(object, ['a', 'b']);
+ * // => 2
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>>(object: TObject | null | undefined, path: [TKey1, TKey2]): NonNullable<TObject[TKey1]>[TKey2] | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TDefault
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2]} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<NonNullable<TObject[TKey1]>[TKey2], undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': 2 } };
+ * get(object, ['a', 'b'], 'default');
+ * // => 2
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TDefault>(object: TObject | null | undefined, path: [TKey1, TKey2], defaultValue: TDefault): Exclude<NonNullable<TObject[TKey1]>[TKey2], undefined> | TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @param {TObject} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3]} path - The path of the property to get.
+ * @returns {TObject[TKey1][TKey2][TKey3]} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': 3 } } };
+ * get(object, ['a', 'b', 'c']);
+ * // => 3
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof TObject[TKey1], TKey3 extends keyof TObject[TKey1][TKey2]>(object: TObject, path: [TKey1, TKey2, TKey3]): TObject[TKey1][TKey2][TKey3];
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3]} path - The path of the property to get.
+ * @returns {NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3] | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': 3 } } };
+ * get(object, ['a', 'b', 'c']);
+ * // => 3
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3]): NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3] | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @template TDefault
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3]} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3], undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': 3 } } };
+ * get(object, ['a', 'b', 'c'], 'default');
+ * // => 3
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>, TDefault>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3], defaultValue: TDefault): Exclude<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3], undefined> | TDefault;
+/**
+ * Gets the value at path of object.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @template TKey4
+ * @param {TObject} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3, TKey4]} path - The path of the property to get.
+ * @returns {TObject[TKey1][TKey2][TKey3][TKey4]} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': { 'd': 4 } } } };
+ * get(object, ['a', 'b', 'c', 'd']);
+ * // => 4
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof TObject[TKey1], TKey3 extends keyof TObject[TKey1][TKey2], TKey4 extends keyof TObject[TKey1][TKey2][TKey3]>(object: TObject, path: [TKey1, TKey2, TKey3, TKey4]): TObject[TKey1][TKey2][TKey3][TKey4];
+/**
+ * Gets the value at path of object. If the resolved value is undefined, undefined is returned.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @template TKey4
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3, TKey4]} path - The path of the property to get.
+ * @returns {NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>[TKey4] | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': { 'd': 4 } } } };
+ * get(object, ['a', 'b', 'c', 'd']);
+ * // => 4
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>, TKey4 extends keyof NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3, TKey4]): NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>[TKey4] | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TObject
+ * @template TKey1
+ * @template TKey2
+ * @template TKey3
+ * @template TKey4
+ * @template TDefault
+ * @param {TObject | null | undefined} object - The object to query.
+ * @param {[TKey1, TKey2, TKey3, TKey4]} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>[TKey4], undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 'a': { 'b': { 'c': { 'd': 4 } } } };
+ * get(object, ['a', 'b', 'c', 'd'], 'default');
+ * // => 4
+ */
+declare function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof NonNullable<TObject[TKey1]>, TKey3 extends keyof NonNullable<NonNullable<TObject[TKey1]>[TKey2]>, TKey4 extends keyof NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>, TDefault>(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3, TKey4], defaultValue: TDefault): Exclude<NonNullable<NonNullable<NonNullable<TObject[TKey1]>[TKey2]>[TKey3]>[TKey4], undefined> | TDefault;
+/**
+ * Gets the value at path of object.
+ *
+ * @template T
+ * @param {Record<number, T>} object - The object to query.
+ * @param {number} path - The path of the property to get.
+ * @returns {T} Returns the resolved value.
+ *
+ * @example
+ * const object = { 0: 'a', 1: 'b', 2: 'c' };
+ * get(object, 1);
+ * // => 'b'
+ */
+declare function get<T>(object: Record<number, T>, path: number): T;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, undefined is returned.
+ *
+ * @template T
+ * @param {Record<number, T> | null | undefined} object - The object to query.
+ * @param {number} path - The path of the property to get.
+ * @returns {T | undefined} Returns the resolved value.
+ *
+ * @example
+ * const object = { 0: 'a', 1: 'b', 2: 'c' };
+ * get(object, 1);
+ * // => 'b'
+ */
+declare function get<T>(object: Record<number, T> | null | undefined, path: number): T | undefined;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template T
+ * @template TDefault
+ * @param {Record<number, T> | null | undefined} object - The object to query.
+ * @param {number} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {T | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { 0: 'a', 1: 'b', 2: 'c' };
+ * get(object, 1, 'default');
+ * // => 'b'
+ */
+declare function get<T, TDefault>(object: Record<number, T> | null | undefined, path: number, defaultValue: TDefault): T | TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.
+ *
+ * @template TDefault
+ * @param {null | undefined} object - The object to query.
+ * @param {PropertyPath} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {TDefault} Returns the default value.
+ *
+ * @example
+ * get(null, 'a.b.c', 'default');
+ * // => 'default'
+ */
+declare function get<TDefault>(object: null | undefined, path: PropertyPath, defaultValue: TDefault): TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, undefined is returned.
+ *
+ * @param {null | undefined} object - The object to query.
+ * @param {PropertyPath} path - The path of the property to get.
+ * @returns {undefined} Returns undefined.
+ *
+ * @example
+ * get(null, 'a.b.c');
+ * // => undefined
+ */
+declare function get(object: null | undefined, path: PropertyPath): undefined;
+/**
+ * Gets the value at path of object using type-safe path.
+ *
+ * @template TObject
+ * @template TPath
+ * @param {TObject} data - The object to query.
+ * @param {TPath} path - The path of the property to get.
+ * @returns {string extends TPath ? any : GetFieldType<TObject, TPath>} Returns the resolved value.
+ *
+ * @example
+ * const object = { a: { b: { c: 1 } } };
+ * get(object, 'a.b.c');
+ * // => 1
+ */
+declare function get<TObject, TPath extends string>(data: TObject, path: TPath): string extends TPath ? any : GetFieldType<TObject, TPath>;
+/**
+ * Gets the value at path of object using type-safe path. If the resolved value is undefined, the defaultValue is returned.
+ *
+ * @template TObject
+ * @template TPath
+ * @template TDefault
+ * @param {TObject} data - The object to query.
+ * @param {TPath} path - The path of the property to get.
+ * @param {TDefault} defaultValue - The value returned if the resolved value is undefined.
+ * @returns {Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault} Returns the resolved value.
+ *
+ * @example
+ * const object = { a: { b: { c: 1 } } };
+ * get(object, 'a.b.d', 'default');
+ * // => 'default'
+ */
+declare function get<TObject, TPath extends string, TDefault = GetFieldType<TObject, TPath>>(data: TObject, path: TPath, defaultValue: TDefault): Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault;
+/**
+ * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned.
+ *
+ * @param {any} object - The object to query.
+ * @param {PropertyPath} path - The path of the property to get.
+ * @param {any} [defaultValue] - The value returned if the resolved value is undefined.
+ * @returns {any} Returns the resolved value.
+ *
+ * @example
+ * const object = { a: { b: { c: 1 } } };
+ * get(object, 'a.b.c', 'default');
+ * // => 1
+ */
+declare function get(object: any, path: PropertyPath, defaultValue?: any): any;
+
+export { get };
Index: node_modules/es-toolkit/dist/compat/object/get.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/get.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/get.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isUnsafeProperty = require('../../_internal/isUnsafeProperty.js');
+const isDeepKey = require('../_internal/isDeepKey.js');
+const toKey = require('../_internal/toKey.js');
+const toPath = require('../util/toPath.js');
+
+function get(object, path, defaultValue) {
+    if (object == null) {
+        return defaultValue;
+    }
+    switch (typeof path) {
+        case 'string': {
+            if (isUnsafeProperty.isUnsafeProperty(path)) {
+                return defaultValue;
+            }
+            const result = object[path];
+            if (result === undefined) {
+                if (isDeepKey.isDeepKey(path)) {
+                    return get(object, toPath.toPath(path), defaultValue);
+                }
+                else {
+                    return defaultValue;
+                }
+            }
+            return result;
+        }
+        case 'number':
+        case 'symbol': {
+            if (typeof path === 'number') {
+                path = toKey.toKey(path);
+            }
+            const result = object[path];
+            if (result === undefined) {
+                return defaultValue;
+            }
+            return result;
+        }
+        default: {
+            if (Array.isArray(path)) {
+                return getWithPath(object, path, defaultValue);
+            }
+            if (Object.is(path?.valueOf(), -0)) {
+                path = '-0';
+            }
+            else {
+                path = String(path);
+            }
+            if (isUnsafeProperty.isUnsafeProperty(path)) {
+                return defaultValue;
+            }
+            const result = object[path];
+            if (result === undefined) {
+                return defaultValue;
+            }
+            return result;
+        }
+    }
+}
+function getWithPath(object, path, defaultValue) {
+    if (path.length === 0) {
+        return defaultValue;
+    }
+    let current = object;
+    for (let index = 0; index < path.length; index++) {
+        if (current == null) {
+            return defaultValue;
+        }
+        if (isUnsafeProperty.isUnsafeProperty(path[index])) {
+            return defaultValue;
+        }
+        current = current[path[index]];
+    }
+    if (current === undefined) {
+        return defaultValue;
+    }
+    return current;
+}
+
+exports.get = get;
Index: node_modules/es-toolkit/dist/compat/object/get.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/get.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/get.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,78 @@
+import { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';
+import { isDeepKey } from '../_internal/isDeepKey.mjs';
+import { toKey } from '../_internal/toKey.mjs';
+import { toPath } from '../util/toPath.mjs';
+
+function get(object, path, defaultValue) {
+    if (object == null) {
+        return defaultValue;
+    }
+    switch (typeof path) {
+        case 'string': {
+            if (isUnsafeProperty(path)) {
+                return defaultValue;
+            }
+            const result = object[path];
+            if (result === undefined) {
+                if (isDeepKey(path)) {
+                    return get(object, toPath(path), defaultValue);
+                }
+                else {
+                    return defaultValue;
+                }
+            }
+            return result;
+        }
+        case 'number':
+        case 'symbol': {
+            if (typeof path === 'number') {
+                path = toKey(path);
+            }
+            const result = object[path];
+            if (result === undefined) {
+                return defaultValue;
+            }
+            return result;
+        }
+        default: {
+            if (Array.isArray(path)) {
+                return getWithPath(object, path, defaultValue);
+            }
+            if (Object.is(path?.valueOf(), -0)) {
+                path = '-0';
+            }
+            else {
+                path = String(path);
+            }
+            if (isUnsafeProperty(path)) {
+                return defaultValue;
+            }
+            const result = object[path];
+            if (result === undefined) {
+                return defaultValue;
+            }
+            return result;
+        }
+    }
+}
+function getWithPath(object, path, defaultValue) {
+    if (path.length === 0) {
+        return defaultValue;
+    }
+    let current = object;
+    for (let index = 0; index < path.length; index++) {
+        if (current == null) {
+            return defaultValue;
+        }
+        if (isUnsafeProperty(path[index])) {
+            return defaultValue;
+        }
+        current = current[path[index]];
+    }
+    if (current === undefined) {
+        return defaultValue;
+    }
+    return current;
+}
+
+export { get };
Index: node_modules/es-toolkit/dist/compat/object/has.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/has.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/has.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Checks if a given path exists within an object.
+ *
+ * @template T
+ * @template K
+ * @param {T} object - The object to query.
+ * @param {K} path - The path to check.
+ * @returns {object is T & { [P in K]: P extends keyof T ? T[P] : Record<string, unknown> extends T ? T[keyof T] : unknown } & { [key: symbol]: unknown }} Returns a type guard indicating if the path exists in the object.
+ *
+ * @example
+ * const obj = { a: 1, b: { c: 2 } };
+ *
+ * if (has(obj, 'a')) {
+ *   console.log(obj.a); // TypeScript knows obj.a exists
+ * }
+ *
+ * if (has(obj, 'b')) {
+ *   console.log(obj.b.c); // TypeScript knows obj.b exists
+ * }
+ */
+declare function has<T, K extends PropertyKey>(object: T, path: K): object is T & {
+    [P in K]: P extends keyof T ? T[P] : Record<string, unknown> extends T ? T[keyof T] : unknown;
+} & {
+    [key: symbol]: unknown;
+};
+/**
+ * Checks if a given path exists within an object.
+ *
+ * @template T
+ * @param {T} object - The object to query.
+ * @param {PropertyPath} path - The path to check. This can be a single property key,
+ *        an array of property keys, or a string representing a deep path.
+ * @returns {boolean} Returns `true` if the path exists in the object, `false` otherwise.
+ *
+ * @example
+ * const obj = { a: { b: { c: 3 } } };
+ *
+ * has(obj, 'a'); // true
+ * has(obj, ['a', 'b']); // true
+ * has(obj, ['a', 'b', 'c']); // true
+ * has(obj, 'a.b.c'); // true
+ * has(obj, 'a.b.d'); // false
+ * has(obj, ['a', 'b', 'c', 'd']); // false
+ * has([], 0); // false
+ * has([1, 2, 3], 2); // true
+ * has([1, 2, 3], 5); // false
+ */
+declare function has<T>(object: T, path: PropertyPath): boolean;
+
+export { has };
Index: node_modules/es-toolkit/dist/compat/object/has.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/has.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/has.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Checks if a given path exists within an object.
+ *
+ * @template T
+ * @template K
+ * @param {T} object - The object to query.
+ * @param {K} path - The path to check.
+ * @returns {object is T & { [P in K]: P extends keyof T ? T[P] : Record<string, unknown> extends T ? T[keyof T] : unknown } & { [key: symbol]: unknown }} Returns a type guard indicating if the path exists in the object.
+ *
+ * @example
+ * const obj = { a: 1, b: { c: 2 } };
+ *
+ * if (has(obj, 'a')) {
+ *   console.log(obj.a); // TypeScript knows obj.a exists
+ * }
+ *
+ * if (has(obj, 'b')) {
+ *   console.log(obj.b.c); // TypeScript knows obj.b exists
+ * }
+ */
+declare function has<T, K extends PropertyKey>(object: T, path: K): object is T & {
+    [P in K]: P extends keyof T ? T[P] : Record<string, unknown> extends T ? T[keyof T] : unknown;
+} & {
+    [key: symbol]: unknown;
+};
+/**
+ * Checks if a given path exists within an object.
+ *
+ * @template T
+ * @param {T} object - The object to query.
+ * @param {PropertyPath} path - The path to check. This can be a single property key,
+ *        an array of property keys, or a string representing a deep path.
+ * @returns {boolean} Returns `true` if the path exists in the object, `false` otherwise.
+ *
+ * @example
+ * const obj = { a: { b: { c: 3 } } };
+ *
+ * has(obj, 'a'); // true
+ * has(obj, ['a', 'b']); // true
+ * has(obj, ['a', 'b', 'c']); // true
+ * has(obj, 'a.b.c'); // true
+ * has(obj, 'a.b.d'); // false
+ * has(obj, ['a', 'b', 'c', 'd']); // false
+ * has([], 0); // false
+ * has([1, 2, 3], 2); // true
+ * has([1, 2, 3], 5); // false
+ */
+declare function has<T>(object: T, path: PropertyPath): boolean;
+
+export { has };
Index: node_modules/es-toolkit/dist/compat/object/has.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/has.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/has.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isDeepKey = require('../_internal/isDeepKey.js');
+const isIndex = require('../_internal/isIndex.js');
+const isArguments = require('../predicate/isArguments.js');
+const toPath = require('../util/toPath.js');
+
+function has(object, path) {
+    let resolvedPath;
+    if (Array.isArray(path)) {
+        resolvedPath = path;
+    }
+    else if (typeof path === 'string' && isDeepKey.isDeepKey(path) && object?.[path] == null) {
+        resolvedPath = toPath.toPath(path);
+    }
+    else {
+        resolvedPath = [path];
+    }
+    if (resolvedPath.length === 0) {
+        return false;
+    }
+    let current = object;
+    for (let i = 0; i < resolvedPath.length; i++) {
+        const key = resolvedPath[i];
+        if (current == null || !Object.hasOwn(current, key)) {
+            const isSparseIndex = (Array.isArray(current) || isArguments.isArguments(current)) && isIndex.isIndex(key) && key < current.length;
+            if (!isSparseIndex) {
+                return false;
+            }
+        }
+        current = current[key];
+    }
+    return true;
+}
+
+exports.has = has;
Index: node_modules/es-toolkit/dist/compat/object/has.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/has.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/has.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import { isDeepKey } from '../_internal/isDeepKey.mjs';
+import { isIndex } from '../_internal/isIndex.mjs';
+import { isArguments } from '../predicate/isArguments.mjs';
+import { toPath } from '../util/toPath.mjs';
+
+function has(object, path) {
+    let resolvedPath;
+    if (Array.isArray(path)) {
+        resolvedPath = path;
+    }
+    else if (typeof path === 'string' && isDeepKey(path) && object?.[path] == null) {
+        resolvedPath = toPath(path);
+    }
+    else {
+        resolvedPath = [path];
+    }
+    if (resolvedPath.length === 0) {
+        return false;
+    }
+    let current = object;
+    for (let i = 0; i < resolvedPath.length; i++) {
+        const key = resolvedPath[i];
+        if (current == null || !Object.hasOwn(current, key)) {
+            const isSparseIndex = (Array.isArray(current) || isArguments(current)) && isIndex(key) && key < current.length;
+            if (!isSparseIndex) {
+                return false;
+            }
+        }
+        current = current[key];
+    }
+    return true;
+}
+
+export { has };
Index: node_modules/es-toolkit/dist/compat/object/hasIn.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/hasIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/hasIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Checks if a given path exists in an object, **including inherited properties**.
+ *
+ * You can provide the path as a single property key, an array of property keys,
+ * or a string representing a deep path.
+ *
+ * Unlike `has`, which only checks for own properties, `hasIn` also checks for properties
+ * in the prototype chain.
+ *
+ * If the path is an index and the object is an array or an arguments object, the function will verify
+ * if the index is valid and within the bounds of the array or arguments object, even if the array or
+ * arguments object is sparse (i.e., not all indexes are defined).
+ *
+ * @template T
+ * @param {T} object - The object to query.
+ * @param {PropertyPath} path - The path to check. This can be a single property key,
+ *        an array of property keys, or a string representing a deep path.
+ * @returns {boolean} Returns `true` if the path exists (own or inherited), `false` otherwise.
+ *
+ * @example
+ *
+ * const obj = { a: { b: { c: 3 } } };
+ *
+ * hasIn(obj, 'a'); // true
+ * hasIn(obj, ['a', 'b']); // true
+ * hasIn(obj, ['a', 'b', 'c']); // true
+ * hasIn(obj, 'a.b.c'); // true
+ * hasIn(obj, 'a.b.d'); // false
+ * hasIn(obj, ['a', 'b', 'c', 'd']); // false
+ *
+ * // Example with inherited properties:
+ * function Rectangle() {}
+ * Rectangle.prototype.area = function() {};
+ *
+ * const rect = new Rectangle();
+ * hasIn(rect, 'area'); // true
+ * has(rect, 'area'); // false - has only checks own properties
+ */
+declare function hasIn<T>(object: T, path: PropertyPath): boolean;
+
+export { hasIn };
Index: node_modules/es-toolkit/dist/compat/object/hasIn.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/hasIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/hasIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Checks if a given path exists in an object, **including inherited properties**.
+ *
+ * You can provide the path as a single property key, an array of property keys,
+ * or a string representing a deep path.
+ *
+ * Unlike `has`, which only checks for own properties, `hasIn` also checks for properties
+ * in the prototype chain.
+ *
+ * If the path is an index and the object is an array or an arguments object, the function will verify
+ * if the index is valid and within the bounds of the array or arguments object, even if the array or
+ * arguments object is sparse (i.e., not all indexes are defined).
+ *
+ * @template T
+ * @param {T} object - The object to query.
+ * @param {PropertyPath} path - The path to check. This can be a single property key,
+ *        an array of property keys, or a string representing a deep path.
+ * @returns {boolean} Returns `true` if the path exists (own or inherited), `false` otherwise.
+ *
+ * @example
+ *
+ * const obj = { a: { b: { c: 3 } } };
+ *
+ * hasIn(obj, 'a'); // true
+ * hasIn(obj, ['a', 'b']); // true
+ * hasIn(obj, ['a', 'b', 'c']); // true
+ * hasIn(obj, 'a.b.c'); // true
+ * hasIn(obj, 'a.b.d'); // false
+ * hasIn(obj, ['a', 'b', 'c', 'd']); // false
+ *
+ * // Example with inherited properties:
+ * function Rectangle() {}
+ * Rectangle.prototype.area = function() {};
+ *
+ * const rect = new Rectangle();
+ * hasIn(rect, 'area'); // true
+ * has(rect, 'area'); // false - has only checks own properties
+ */
+declare function hasIn<T>(object: T, path: PropertyPath): boolean;
+
+export { hasIn };
Index: node_modules/es-toolkit/dist/compat/object/hasIn.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/hasIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/hasIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isDeepKey = require('../_internal/isDeepKey.js');
+const isIndex = require('../_internal/isIndex.js');
+const isArguments = require('../predicate/isArguments.js');
+const toPath = require('../util/toPath.js');
+
+function hasIn(object, path) {
+    if (object == null) {
+        return false;
+    }
+    let resolvedPath;
+    if (Array.isArray(path)) {
+        resolvedPath = path;
+    }
+    else if (typeof path === 'string' && isDeepKey.isDeepKey(path) && object[path] == null) {
+        resolvedPath = toPath.toPath(path);
+    }
+    else {
+        resolvedPath = [path];
+    }
+    if (resolvedPath.length === 0) {
+        return false;
+    }
+    let current = object;
+    for (let i = 0; i < resolvedPath.length; i++) {
+        const key = resolvedPath[i];
+        if (current == null || !(key in Object(current))) {
+            const isSparseIndex = (Array.isArray(current) || isArguments.isArguments(current)) && isIndex.isIndex(key) && key < current.length;
+            if (!isSparseIndex) {
+                return false;
+            }
+        }
+        current = current[key];
+    }
+    return true;
+}
+
+exports.hasIn = hasIn;
Index: node_modules/es-toolkit/dist/compat/object/hasIn.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/hasIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/hasIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { isDeepKey } from '../_internal/isDeepKey.mjs';
+import { isIndex } from '../_internal/isIndex.mjs';
+import { isArguments } from '../predicate/isArguments.mjs';
+import { toPath } from '../util/toPath.mjs';
+
+function hasIn(object, path) {
+    if (object == null) {
+        return false;
+    }
+    let resolvedPath;
+    if (Array.isArray(path)) {
+        resolvedPath = path;
+    }
+    else if (typeof path === 'string' && isDeepKey(path) && object[path] == null) {
+        resolvedPath = toPath(path);
+    }
+    else {
+        resolvedPath = [path];
+    }
+    if (resolvedPath.length === 0) {
+        return false;
+    }
+    let current = object;
+    for (let i = 0; i < resolvedPath.length; i++) {
+        const key = resolvedPath[i];
+        if (current == null || !(key in Object(current))) {
+            const isSparseIndex = (Array.isArray(current) || isArguments(current)) && isIndex(key) && key < current.length;
+            if (!isSparseIndex) {
+                return false;
+            }
+        }
+        current = current[key];
+    }
+    return true;
+}
+
+export { hasIn };
Index: node_modules/es-toolkit/dist/compat/object/invert.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/invert.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/invert.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+/**
+ * Inverts the keys and values of an object.
+ *
+ * @param {object} object - The object to invert.
+ * @returns {Record<string, string>} - Returns the new inverted object.
+ *
+ * @example
+ * invert({ a: 1, b: 2, c: 3 });
+ * // => { '1': 'a', '2': 'b', '3': 'c' }
+ */
+declare function invert(object: object): Record<string, string>;
+
+export { invert };
Index: node_modules/es-toolkit/dist/compat/object/invert.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/invert.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/invert.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+/**
+ * Inverts the keys and values of an object.
+ *
+ * @param {object} object - The object to invert.
+ * @returns {Record<string, string>} - Returns the new inverted object.
+ *
+ * @example
+ * invert({ a: 1, b: 2, c: 3 });
+ * // => { '1': 'a', '2': 'b', '3': 'c' }
+ */
+declare function invert(object: object): Record<string, string>;
+
+export { invert };
Index: node_modules/es-toolkit/dist/compat/object/invert.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/invert.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/invert.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const invert$1 = require('../../object/invert.js');
+
+function invert(obj) {
+    return invert$1.invert(obj);
+}
+
+exports.invert = invert;
Index: node_modules/es-toolkit/dist/compat/object/invert.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/invert.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/invert.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { invert as invert$1 } from '../../object/invert.mjs';
+
+function invert(obj) {
+    return invert$1(obj);
+}
+
+export { invert };
Index: node_modules/es-toolkit/dist/compat/object/invertBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/invertBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/invertBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.mjs';
+
+/**
+ * Creates a new object that reverses the keys and values of the given object, similar to the invert.
+ * The values of the new object are arrays of keys that correspond to the value returned by the `iteratee` function.
+ *
+ * @param {Record<string|number, T>} object - The object to iterate over
+ * @param {ValueIteratee<T>} [iteratee] - Optional function to transform values into keys
+ * @returns {Record<string, string[]>} An object with transformed values as keys and arrays of original keys as values
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 1 };
+ * invertBy(obj); // => { '1': ['a', 'c'], '2': ['b'] }
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 1 };
+ * invertBy(obj, value => `group${value}`); // => { 'group1': ['a', 'c'], 'group2': ['b'] }
+ */
+declare function invertBy<T>(object: Record<string, T> | Record<number, T> | null | undefined, interatee?: ValueIteratee<T>): Record<string, string[]>;
+/**
+ * Creates a new object that reverses the keys and values of the given object, similar to the invert.
+ * The values of the new object are arrays of keys that correspond to the value returned by the `iteratee` function.
+ *
+ * @param {T} object - The object to iterate over
+ * @param {ValueIteratee<T[keyof T]>} [iteratee] - Optional function to transform values into keys
+ * @returns {Record<string, string[]>} An object with transformed values as keys and arrays of original keys as values
+ *
+ * @example
+ * const obj = { foo: { id: 1 }, bar: { id: 2 }, baz: { id: 1 } };
+ * invertBy(obj, value => String(value.id)); // => { '1': ['foo', 'baz'], '2': ['bar'] }
+ */
+declare function invertBy<T extends object>(object: T | null | undefined, interatee?: ValueIteratee<T[keyof T]>): Record<string, string[]>;
+
+export { invertBy };
Index: node_modules/es-toolkit/dist/compat/object/invertBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/invertBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/invertBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import { ValueIteratee } from '../_internal/ValueIteratee.js';
+
+/**
+ * Creates a new object that reverses the keys and values of the given object, similar to the invert.
+ * The values of the new object are arrays of keys that correspond to the value returned by the `iteratee` function.
+ *
+ * @param {Record<string|number, T>} object - The object to iterate over
+ * @param {ValueIteratee<T>} [iteratee] - Optional function to transform values into keys
+ * @returns {Record<string, string[]>} An object with transformed values as keys and arrays of original keys as values
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 1 };
+ * invertBy(obj); // => { '1': ['a', 'c'], '2': ['b'] }
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 1 };
+ * invertBy(obj, value => `group${value}`); // => { 'group1': ['a', 'c'], 'group2': ['b'] }
+ */
+declare function invertBy<T>(object: Record<string, T> | Record<number, T> | null | undefined, interatee?: ValueIteratee<T>): Record<string, string[]>;
+/**
+ * Creates a new object that reverses the keys and values of the given object, similar to the invert.
+ * The values of the new object are arrays of keys that correspond to the value returned by the `iteratee` function.
+ *
+ * @param {T} object - The object to iterate over
+ * @param {ValueIteratee<T[keyof T]>} [iteratee] - Optional function to transform values into keys
+ * @returns {Record<string, string[]>} An object with transformed values as keys and arrays of original keys as values
+ *
+ * @example
+ * const obj = { foo: { id: 1 }, bar: { id: 2 }, baz: { id: 1 } };
+ * invertBy(obj, value => String(value.id)); // => { '1': ['foo', 'baz'], '2': ['bar'] }
+ */
+declare function invertBy<T extends object>(object: T | null | undefined, interatee?: ValueIteratee<T[keyof T]>): Record<string, string[]>;
+
+export { invertBy };
Index: node_modules/es-toolkit/dist/compat/object/invertBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/invertBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/invertBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const isNil = require('../../predicate/isNil.js');
+const iteratee = require('../util/iteratee.js');
+
+function invertBy(object, iteratee$1) {
+    const result = {};
+    if (isNil.isNil(object)) {
+        return result;
+    }
+    if (iteratee$1 == null) {
+        iteratee$1 = identity.identity;
+    }
+    const keys = Object.keys(object);
+    const getString = iteratee.iteratee(iteratee$1);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        const valueStr = getString(value);
+        if (Array.isArray(result[valueStr])) {
+            result[valueStr].push(key);
+        }
+        else {
+            result[valueStr] = [key];
+        }
+    }
+    return result;
+}
+
+exports.invertBy = invertBy;
Index: node_modules/es-toolkit/dist/compat/object/invertBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/invertBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/invertBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import { identity } from '../../function/identity.mjs';
+import { isNil } from '../../predicate/isNil.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function invertBy(object, iteratee$1) {
+    const result = {};
+    if (isNil(object)) {
+        return result;
+    }
+    if (iteratee$1 == null) {
+        iteratee$1 = identity;
+    }
+    const keys = Object.keys(object);
+    const getString = iteratee(iteratee$1);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        const valueStr = getString(value);
+        if (Array.isArray(result[valueStr])) {
+            result[valueStr].push(key);
+        }
+        else {
+            result[valueStr] = [key];
+        }
+    }
+    return result;
+}
+
+export { invertBy };
Index: node_modules/es-toolkit/dist/compat/object/keys.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/keys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/keys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * Non-object values are coerced to objects.
+ *
+ * @param {object} object The object to query.
+ * @returns {string[]} Returns the array of property names.
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ * Foo.prototype.c = 3;
+ * keys(new Foo); // ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * keys('hi'); // ['0', '1']
+ * keys([1, 2, 3]); // ['0', '1', '2']
+ * keys({ a: 1, b: 2 }); // ['a', 'b']
+ */
+declare function keys(object?: any): string[];
+
+export { keys };
Index: node_modules/es-toolkit/dist/compat/object/keys.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/keys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/keys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * Non-object values are coerced to objects.
+ *
+ * @param {object} object The object to query.
+ * @returns {string[]} Returns the array of property names.
+ * @example
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ * Foo.prototype.c = 3;
+ * keys(new Foo); // ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * keys('hi'); // ['0', '1']
+ * keys([1, 2, 3]); // ['0', '1', '2']
+ * keys({ a: 1, b: 2 }); // ['a', 'b']
+ */
+declare function keys(object?: any): string[];
+
+export { keys };
Index: node_modules/es-toolkit/dist/compat/object/keys.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/keys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/keys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isBuffer = require('../../predicate/isBuffer.js');
+const isPrototype = require('../_internal/isPrototype.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isTypedArray = require('../predicate/isTypedArray.js');
+const times = require('../util/times.js');
+
+function keys(object) {
+    if (isArrayLike.isArrayLike(object)) {
+        return arrayLikeKeys(object);
+    }
+    const result = Object.keys(Object(object));
+    if (!isPrototype.isPrototype(object)) {
+        return result;
+    }
+    return result.filter(key => key !== 'constructor');
+}
+function arrayLikeKeys(object) {
+    const indices = times.times(object.length, index => `${index}`);
+    const filteredKeys = new Set(indices);
+    if (isBuffer.isBuffer(object)) {
+        filteredKeys.add('offset');
+        filteredKeys.add('parent');
+    }
+    if (isTypedArray.isTypedArray(object)) {
+        filteredKeys.add('buffer');
+        filteredKeys.add('byteLength');
+        filteredKeys.add('byteOffset');
+    }
+    return [...indices, ...Object.keys(object).filter(key => !filteredKeys.has(key))];
+}
+
+exports.keys = keys;
Index: node_modules/es-toolkit/dist/compat/object/keys.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/keys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/keys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+import { isBuffer } from '../../predicate/isBuffer.mjs';
+import { isPrototype } from '../_internal/isPrototype.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isTypedArray } from '../predicate/isTypedArray.mjs';
+import { times } from '../util/times.mjs';
+
+function keys(object) {
+    if (isArrayLike(object)) {
+        return arrayLikeKeys(object);
+    }
+    const result = Object.keys(Object(object));
+    if (!isPrototype(object)) {
+        return result;
+    }
+    return result.filter(key => key !== 'constructor');
+}
+function arrayLikeKeys(object) {
+    const indices = times(object.length, index => `${index}`);
+    const filteredKeys = new Set(indices);
+    if (isBuffer(object)) {
+        filteredKeys.add('offset');
+        filteredKeys.add('parent');
+    }
+    if (isTypedArray(object)) {
+        filteredKeys.add('buffer');
+        filteredKeys.add('byteLength');
+        filteredKeys.add('byteOffset');
+    }
+    return [...indices, ...Object.keys(object).filter(key => !filteredKeys.has(key))];
+}
+
+export { keys };
Index: node_modules/es-toolkit/dist/compat/object/keysIn.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/keysIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/keysIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * This function retrieves the names of string-keyed properties from an object, including those inherited from its prototype.
+ *
+ * - If the value is not an object, it is converted to an object.
+ * - Array-like objects are treated like arrays.
+ * - Sparse arrays with some missing indices are treated like dense arrays.
+ * - If the value is `null` or `undefined`, an empty array is returned.
+ * - When handling prototype objects, the `constructor` property is excluded from the results.
+ *
+ * @param {any} [object] - The object to inspect for keys.
+ * @returns {string[]} An array of string keys from the object.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * console.log(keysIn(obj)); // ['a', 'b']
+ *
+ * const arr = [1, 2, 3];
+ * console.log(keysIn(arr)); // ['0', '1', '2']
+ *
+ * function Foo() {}
+ * Foo.prototype.a = 1;
+ * console.log(keysIn(new Foo())); // ['a']
+ */
+declare function keysIn(object?: any): string[];
+
+export { keysIn };
Index: node_modules/es-toolkit/dist/compat/object/keysIn.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/keysIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/keysIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * This function retrieves the names of string-keyed properties from an object, including those inherited from its prototype.
+ *
+ * - If the value is not an object, it is converted to an object.
+ * - Array-like objects are treated like arrays.
+ * - Sparse arrays with some missing indices are treated like dense arrays.
+ * - If the value is `null` or `undefined`, an empty array is returned.
+ * - When handling prototype objects, the `constructor` property is excluded from the results.
+ *
+ * @param {any} [object] - The object to inspect for keys.
+ * @returns {string[]} An array of string keys from the object.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * console.log(keysIn(obj)); // ['a', 'b']
+ *
+ * const arr = [1, 2, 3];
+ * console.log(keysIn(arr)); // ['0', '1', '2']
+ *
+ * function Foo() {}
+ * Foo.prototype.a = 1;
+ * console.log(keysIn(new Foo())); // ['a']
+ */
+declare function keysIn(object?: any): string[];
+
+export { keysIn };
Index: node_modules/es-toolkit/dist/compat/object/keysIn.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/keysIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/keysIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isBuffer = require('../../predicate/isBuffer.js');
+const isPrototype = require('../_internal/isPrototype.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isTypedArray = require('../predicate/isTypedArray.js');
+const times = require('../util/times.js');
+
+function keysIn(object) {
+    if (object == null) {
+        return [];
+    }
+    switch (typeof object) {
+        case 'object':
+        case 'function': {
+            if (isArrayLike.isArrayLike(object)) {
+                return arrayLikeKeysIn(object);
+            }
+            if (isPrototype.isPrototype(object)) {
+                return prototypeKeysIn(object);
+            }
+            return keysInImpl(object);
+        }
+        default: {
+            return keysInImpl(Object(object));
+        }
+    }
+}
+function keysInImpl(object) {
+    const result = [];
+    for (const key in object) {
+        result.push(key);
+    }
+    return result;
+}
+function prototypeKeysIn(object) {
+    const keys = keysInImpl(object);
+    return keys.filter(key => key !== 'constructor');
+}
+function arrayLikeKeysIn(object) {
+    const indices = times.times(object.length, index => `${index}`);
+    const filteredKeys = new Set(indices);
+    if (isBuffer.isBuffer(object)) {
+        filteredKeys.add('offset');
+        filteredKeys.add('parent');
+    }
+    if (isTypedArray.isTypedArray(object)) {
+        filteredKeys.add('buffer');
+        filteredKeys.add('byteLength');
+        filteredKeys.add('byteOffset');
+    }
+    return [...indices, ...keysInImpl(object).filter(key => !filteredKeys.has(key))];
+}
+
+exports.keysIn = keysIn;
Index: node_modules/es-toolkit/dist/compat/object/keysIn.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/keysIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/keysIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+import { isBuffer } from '../../predicate/isBuffer.mjs';
+import { isPrototype } from '../_internal/isPrototype.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isTypedArray } from '../predicate/isTypedArray.mjs';
+import { times } from '../util/times.mjs';
+
+function keysIn(object) {
+    if (object == null) {
+        return [];
+    }
+    switch (typeof object) {
+        case 'object':
+        case 'function': {
+            if (isArrayLike(object)) {
+                return arrayLikeKeysIn(object);
+            }
+            if (isPrototype(object)) {
+                return prototypeKeysIn(object);
+            }
+            return keysInImpl(object);
+        }
+        default: {
+            return keysInImpl(Object(object));
+        }
+    }
+}
+function keysInImpl(object) {
+    const result = [];
+    for (const key in object) {
+        result.push(key);
+    }
+    return result;
+}
+function prototypeKeysIn(object) {
+    const keys = keysInImpl(object);
+    return keys.filter(key => key !== 'constructor');
+}
+function arrayLikeKeysIn(object) {
+    const indices = times(object.length, index => `${index}`);
+    const filteredKeys = new Set(indices);
+    if (isBuffer(object)) {
+        filteredKeys.add('offset');
+        filteredKeys.add('parent');
+    }
+    if (isTypedArray(object)) {
+        filteredKeys.add('buffer');
+        filteredKeys.add('byteLength');
+        filteredKeys.add('byteOffset');
+    }
+    return [...indices, ...keysInImpl(object).filter(key => !filteredKeys.has(key))];
+}
+
+export { keysIn };
Index: node_modules/es-toolkit/dist/compat/object/mapKeys.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mapKeys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mapKeys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { ListIteratee } from '../_internal/ListIteratee.mjs';
+import { ObjectIteratee } from '../_internal/ObjectIteratee.mjs';
+
+/**
+ * Creates an object with the same values as `object` and keys generated by running each own enumerable string keyed property through `iteratee`.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} object - The object to iterate over.
+ * @param {ValueIteratee<T>} [iteratee] - The function invoked per iteration.
+ * @returns {Record<string, T>} - Returns the new mapped object.
+ *
+ * @example
+ * mapKeys([1, 2, 3], (value, index) => `key${index}`);
+ * // => { 'key0': 1, 'key1': 2, 'key2': 3 }
+ */
+declare function mapKeys<T>(object: ArrayLike<T> | null | undefined, iteratee?: ListIteratee<T>): Record<string, T>;
+/**
+ * Creates an object with the same values as `object` and keys generated by running each own enumerable string keyed property through `iteratee`.
+ *
+ * @template T
+ * @param {T | null | undefined} object - The object to iterate over.
+ * @param {ValueIteratee<T[keyof T]>} [iteratee] - The function invoked per iteration.
+ * @returns {Record<string, T[keyof T]>} - Returns the new mapped object.
+ *
+ * @example
+ * mapKeys({ a: 1, b: 2 }, (value, key) => key + value);
+ * // => { 'a1': 1, 'b2': 2 }
+ */
+declare function mapKeys<T extends object>(object: T | null | undefined, iteratee?: ObjectIteratee<T>): Record<string, T[keyof T]>;
+
+export { mapKeys };
Index: node_modules/es-toolkit/dist/compat/object/mapKeys.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mapKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mapKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { ListIteratee } from '../_internal/ListIteratee.js';
+import { ObjectIteratee } from '../_internal/ObjectIteratee.js';
+
+/**
+ * Creates an object with the same values as `object` and keys generated by running each own enumerable string keyed property through `iteratee`.
+ *
+ * @template T
+ * @param {ArrayLike<T> | null | undefined} object - The object to iterate over.
+ * @param {ValueIteratee<T>} [iteratee] - The function invoked per iteration.
+ * @returns {Record<string, T>} - Returns the new mapped object.
+ *
+ * @example
+ * mapKeys([1, 2, 3], (value, index) => `key${index}`);
+ * // => { 'key0': 1, 'key1': 2, 'key2': 3 }
+ */
+declare function mapKeys<T>(object: ArrayLike<T> | null | undefined, iteratee?: ListIteratee<T>): Record<string, T>;
+/**
+ * Creates an object with the same values as `object` and keys generated by running each own enumerable string keyed property through `iteratee`.
+ *
+ * @template T
+ * @param {T | null | undefined} object - The object to iterate over.
+ * @param {ValueIteratee<T[keyof T]>} [iteratee] - The function invoked per iteration.
+ * @returns {Record<string, T[keyof T]>} - Returns the new mapped object.
+ *
+ * @example
+ * mapKeys({ a: 1, b: 2 }, (value, key) => key + value);
+ * // => { 'a1': 1, 'b2': 2 }
+ */
+declare function mapKeys<T extends object>(object: T | null | undefined, iteratee?: ObjectIteratee<T>): Record<string, T[keyof T]>;
+
+export { mapKeys };
Index: node_modules/es-toolkit/dist/compat/object/mapKeys.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mapKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mapKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const mapKeys$1 = require('../../object/mapKeys.js');
+const iteratee = require('../util/iteratee.js');
+
+function mapKeys(object, getNewKey = identity.identity) {
+    if (object == null) {
+        return {};
+    }
+    return mapKeys$1.mapKeys(object, iteratee.iteratee(getNewKey));
+}
+
+exports.mapKeys = mapKeys;
Index: node_modules/es-toolkit/dist/compat/object/mapKeys.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mapKeys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mapKeys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { identity } from '../../function/identity.mjs';
+import { mapKeys as mapKeys$1 } from '../../object/mapKeys.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function mapKeys(object, getNewKey = identity) {
+    if (object == null) {
+        return {};
+    }
+    return mapKeys$1(object, iteratee(getNewKey));
+}
+
+export { mapKeys };
Index: node_modules/es-toolkit/dist/compat/object/mapValues.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mapValues.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mapValues.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,130 @@
+import { ArrayIterator } from '../_internal/ArrayIterator.mjs';
+import { ObjectIterator } from '../_internal/ObjectIterator.mjs';
+import { StringIterator } from '../_internal/StringIterator.mjs';
+
+/**
+ * Creates a new object by mapping each character in a string to a value.
+ * @param obj - The string to iterate over
+ * @param callback - The function invoked per character
+ * @returns A new object with numeric keys and mapped values
+ * @example
+ * mapValues('abc', (char) => char.toUpperCase())
+ * // => { '0': 'A', '1': 'B', '2': 'C' }
+ */
+declare function mapValues<T>(obj: string | null | undefined, callback: StringIterator<T>): Record<number, T>;
+/**
+ * Creates a new object by mapping each element in an array to a value.
+ * @param array - The array to iterate over
+ * @param callback - The function invoked per element
+ * @returns A new object with numeric keys and mapped values
+ * @example
+ * mapValues([1, 2], (num) => num * 2)
+ * // => { '0': 2, '1': 4 }
+ */
+declare function mapValues<T, U>(array: T[], callback: ArrayIterator<T, U>): Record<number, U>;
+/**
+ * Creates a new object by mapping each property value in an object to a new value.
+ * @param obj - The object to iterate over
+ * @param callback - The function invoked per property
+ * @returns A new object with the same keys and mapped values
+ * @example
+ * mapValues({ a: 1, b: 2 }, (num) => num * 2)
+ * // => { a: 2, b: 4 }
+ */
+declare function mapValues<T extends object, U>(obj: T | null | undefined, callback: ObjectIterator<T, U>): {
+    [P in keyof T]: U;
+};
+/**
+ * Creates a new object by checking each value against a matcher object.
+ * @param obj - The object to iterate over
+ * @param iteratee - The object to match against
+ * @returns A new object with boolean values indicating matches
+ * @example
+ * mapValues({ a: { x: 1 }, b: { x: 2 } }, { x: 2 })
+ * // => { a: false, b: true }
+ */
+declare function mapValues<T>(obj: Record<string, T> | Record<number, T> | null | undefined, iteratee: object): Record<string, boolean>;
+/**
+ * Creates a new object by checking each value against a matcher object.
+ * @param obj - The object to iterate over
+ * @param iteratee - The object to match against
+ * @returns A new object with boolean values indicating matches
+ * @example
+ * mapValues({ a: { x: 1 }, b: { x: 2 } }, { x: 2 })
+ * // => { a: false, b: true }
+ */
+declare function mapValues<T extends object>(obj: T | null | undefined, iteratee: object): {
+    [P in keyof T]: boolean;
+};
+/**
+ * Creates a new object by extracting a property from each value.
+ * @param obj - The object to iterate over
+ * @param iteratee - The property key to extract
+ * @returns A new object with extracted property values
+ * @example
+ * mapValues({ a: { x: 1 }, b: { x: 2 } }, 'x')
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T, K extends keyof T>(obj: Record<string, T> | Record<number, T> | null | undefined, iteratee: K): Record<string, T[K]>;
+/**
+ * Creates a new object by extracting values at a path from each value.
+ * @param obj - The object to iterate over
+ * @param iteratee - The path to extract
+ * @returns A new object with extracted values
+ * @example
+ * mapValues({ a: { x: { y: 1 } }, b: { x: { y: 2 } } }, 'x.y')
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T>(obj: Record<string, T> | Record<number, T> | null | undefined, iteratee: string): Record<string, any>;
+/**
+ * Creates a new object by extracting values at a path from each value.
+ * @param obj - The object to iterate over
+ * @param iteratee - The path to extract
+ * @returns A new object with extracted values
+ * @example
+ * mapValues({ a: { x: { y: 1 } }, b: { x: { y: 2 } } }, 'x.y')
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T extends object>(obj: T | null | undefined, iteratee: string): {
+    [P in keyof T]: any;
+};
+/**
+ * Creates a new object from a string using identity function.
+ * @param obj - The string to convert
+ * @returns A new object with characters as values
+ * @example
+ * mapValues('abc')
+ * // => { '0': 'a', '1': 'b', '2': 'c' }
+ */
+declare function mapValues(obj: string | null | undefined): Record<number, string>;
+/**
+ * Creates a new object using identity function.
+ * @param obj - The object to clone
+ * @returns A new object with the same values
+ * @example
+ * mapValues({ a: 1, b: 2 })
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T>(obj: Record<string, T> | Record<number, T> | null | undefined): Record<string, T>;
+/**
+ * Creates a new object using identity function.
+ * @param obj - The object to clone
+ * @returns A new object with the same values
+ * @example
+ * mapValues({ a: 1, b: 2 })
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T extends object>(obj: T): T;
+/**
+ * Creates a new object using identity function.
+ * @param obj - The object to clone
+ * @returns A new object with the same values, or empty object if input is null/undefined
+ * @example
+ * mapValues({ a: 1, b: 2 })
+ * // => { a: 1, b: 2 }
+ * mapValues(null)
+ * // => {}
+ */
+declare function mapValues<T extends object>(obj: T | null | undefined): Partial<T>;
+
+export { mapValues };
Index: node_modules/es-toolkit/dist/compat/object/mapValues.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mapValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mapValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,130 @@
+import { ArrayIterator } from '../_internal/ArrayIterator.js';
+import { ObjectIterator } from '../_internal/ObjectIterator.js';
+import { StringIterator } from '../_internal/StringIterator.js';
+
+/**
+ * Creates a new object by mapping each character in a string to a value.
+ * @param obj - The string to iterate over
+ * @param callback - The function invoked per character
+ * @returns A new object with numeric keys and mapped values
+ * @example
+ * mapValues('abc', (char) => char.toUpperCase())
+ * // => { '0': 'A', '1': 'B', '2': 'C' }
+ */
+declare function mapValues<T>(obj: string | null | undefined, callback: StringIterator<T>): Record<number, T>;
+/**
+ * Creates a new object by mapping each element in an array to a value.
+ * @param array - The array to iterate over
+ * @param callback - The function invoked per element
+ * @returns A new object with numeric keys and mapped values
+ * @example
+ * mapValues([1, 2], (num) => num * 2)
+ * // => { '0': 2, '1': 4 }
+ */
+declare function mapValues<T, U>(array: T[], callback: ArrayIterator<T, U>): Record<number, U>;
+/**
+ * Creates a new object by mapping each property value in an object to a new value.
+ * @param obj - The object to iterate over
+ * @param callback - The function invoked per property
+ * @returns A new object with the same keys and mapped values
+ * @example
+ * mapValues({ a: 1, b: 2 }, (num) => num * 2)
+ * // => { a: 2, b: 4 }
+ */
+declare function mapValues<T extends object, U>(obj: T | null | undefined, callback: ObjectIterator<T, U>): {
+    [P in keyof T]: U;
+};
+/**
+ * Creates a new object by checking each value against a matcher object.
+ * @param obj - The object to iterate over
+ * @param iteratee - The object to match against
+ * @returns A new object with boolean values indicating matches
+ * @example
+ * mapValues({ a: { x: 1 }, b: { x: 2 } }, { x: 2 })
+ * // => { a: false, b: true }
+ */
+declare function mapValues<T>(obj: Record<string, T> | Record<number, T> | null | undefined, iteratee: object): Record<string, boolean>;
+/**
+ * Creates a new object by checking each value against a matcher object.
+ * @param obj - The object to iterate over
+ * @param iteratee - The object to match against
+ * @returns A new object with boolean values indicating matches
+ * @example
+ * mapValues({ a: { x: 1 }, b: { x: 2 } }, { x: 2 })
+ * // => { a: false, b: true }
+ */
+declare function mapValues<T extends object>(obj: T | null | undefined, iteratee: object): {
+    [P in keyof T]: boolean;
+};
+/**
+ * Creates a new object by extracting a property from each value.
+ * @param obj - The object to iterate over
+ * @param iteratee - The property key to extract
+ * @returns A new object with extracted property values
+ * @example
+ * mapValues({ a: { x: 1 }, b: { x: 2 } }, 'x')
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T, K extends keyof T>(obj: Record<string, T> | Record<number, T> | null | undefined, iteratee: K): Record<string, T[K]>;
+/**
+ * Creates a new object by extracting values at a path from each value.
+ * @param obj - The object to iterate over
+ * @param iteratee - The path to extract
+ * @returns A new object with extracted values
+ * @example
+ * mapValues({ a: { x: { y: 1 } }, b: { x: { y: 2 } } }, 'x.y')
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T>(obj: Record<string, T> | Record<number, T> | null | undefined, iteratee: string): Record<string, any>;
+/**
+ * Creates a new object by extracting values at a path from each value.
+ * @param obj - The object to iterate over
+ * @param iteratee - The path to extract
+ * @returns A new object with extracted values
+ * @example
+ * mapValues({ a: { x: { y: 1 } }, b: { x: { y: 2 } } }, 'x.y')
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T extends object>(obj: T | null | undefined, iteratee: string): {
+    [P in keyof T]: any;
+};
+/**
+ * Creates a new object from a string using identity function.
+ * @param obj - The string to convert
+ * @returns A new object with characters as values
+ * @example
+ * mapValues('abc')
+ * // => { '0': 'a', '1': 'b', '2': 'c' }
+ */
+declare function mapValues(obj: string | null | undefined): Record<number, string>;
+/**
+ * Creates a new object using identity function.
+ * @param obj - The object to clone
+ * @returns A new object with the same values
+ * @example
+ * mapValues({ a: 1, b: 2 })
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T>(obj: Record<string, T> | Record<number, T> | null | undefined): Record<string, T>;
+/**
+ * Creates a new object using identity function.
+ * @param obj - The object to clone
+ * @returns A new object with the same values
+ * @example
+ * mapValues({ a: 1, b: 2 })
+ * // => { a: 1, b: 2 }
+ */
+declare function mapValues<T extends object>(obj: T): T;
+/**
+ * Creates a new object using identity function.
+ * @param obj - The object to clone
+ * @returns A new object with the same values, or empty object if input is null/undefined
+ * @example
+ * mapValues({ a: 1, b: 2 })
+ * // => { a: 1, b: 2 }
+ * mapValues(null)
+ * // => {}
+ */
+declare function mapValues<T extends object>(obj: T | null | undefined): Partial<T>;
+
+export { mapValues };
Index: node_modules/es-toolkit/dist/compat/object/mapValues.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mapValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mapValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const mapValues$1 = require('../../object/mapValues.js');
+const iteratee = require('../util/iteratee.js');
+
+function mapValues(object, getNewValue = identity.identity) {
+    if (object == null) {
+        return {};
+    }
+    return mapValues$1.mapValues(object, iteratee.iteratee(getNewValue));
+}
+
+exports.mapValues = mapValues;
Index: node_modules/es-toolkit/dist/compat/object/mapValues.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mapValues.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mapValues.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { identity } from '../../function/identity.mjs';
+import { mapValues as mapValues$1 } from '../../object/mapValues.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function mapValues(object, getNewValue = identity) {
+    if (object == null) {
+        return {};
+    }
+    return mapValues$1(object, iteratee(getNewValue));
+}
+
+export { mapValues };
Index: node_modules/es-toolkit/dist/compat/object/merge.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/merge.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/merge.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,84 @@
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @template T
+ * @template U
+ * @param {T} object - The destination object.
+ * @param {U} source - The source object.
+ * @returns {T & U} - Returns `object`.
+ *
+ * @example
+ * const object = { a: [{ b: 2 }, { d: 4 }] };
+ * const other = { a: [{ c: 3 }, { e: 5 }] };
+ * merge(object, other);
+ * // => { a: [{ b: 2, c: 3 }, { d: 4, e: 5 }] }
+ */
+declare function merge<T, U>(object: T, source: U): T & U;
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @template T
+ * @template U
+ * @template V
+ * @param {T} object - The destination object.
+ * @param {U} source1 - The first source object.
+ * @param {V} source2 - The second source object.
+ * @returns {T & U & V} - Returns `object`.
+ *
+ * @example
+ * merge({ a: 1 }, { b: 2 }, { c: 3 });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function merge<T, U, V>(object: T, source1: U, source2: V): T & U & V;
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @template T
+ * @template U
+ * @template V
+ * @template W
+ * @param {T} object - The destination object.
+ * @param {U} source1 - The first source object.
+ * @param {V} source2 - The second source object.
+ * @param {W} source3 - The third source object.
+ * @returns {T & U & V & W} - Returns `object`.
+ *
+ * @example
+ * merge({ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function merge<T, U, V, W>(object: T, source1: U, source2: V, source3: W): T & U & V & W;
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @template T
+ * @template U
+ * @template V
+ * @template W
+ * @template X
+ * @param {T} object - The destination object.
+ * @param {U} source1 - The first source object.
+ * @param {V} source2 - The second source object.
+ * @param {W} source3 - The third source object.
+ * @param {X} source4 - The fourth source object.
+ * @returns {T & U & V & W & X} - Returns `object`.
+ *
+ * @example
+ * merge({ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }, { e: 5 });
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function merge<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @param {any} object - The destination object.
+ * @param {...any[]} otherArgs - The source objects.
+ * @returns {any} - Returns `object`.
+ *
+ * @example
+ * merge({ a: 1 }, { b: 2 }, { c: 3 });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function merge(object: any, ...otherArgs: any[]): any;
+
+export { merge };
Index: node_modules/es-toolkit/dist/compat/object/merge.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/merge.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/merge.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,84 @@
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @template T
+ * @template U
+ * @param {T} object - The destination object.
+ * @param {U} source - The source object.
+ * @returns {T & U} - Returns `object`.
+ *
+ * @example
+ * const object = { a: [{ b: 2 }, { d: 4 }] };
+ * const other = { a: [{ c: 3 }, { e: 5 }] };
+ * merge(object, other);
+ * // => { a: [{ b: 2, c: 3 }, { d: 4, e: 5 }] }
+ */
+declare function merge<T, U>(object: T, source: U): T & U;
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @template T
+ * @template U
+ * @template V
+ * @param {T} object - The destination object.
+ * @param {U} source1 - The first source object.
+ * @param {V} source2 - The second source object.
+ * @returns {T & U & V} - Returns `object`.
+ *
+ * @example
+ * merge({ a: 1 }, { b: 2 }, { c: 3 });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function merge<T, U, V>(object: T, source1: U, source2: V): T & U & V;
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @template T
+ * @template U
+ * @template V
+ * @template W
+ * @param {T} object - The destination object.
+ * @param {U} source1 - The first source object.
+ * @param {V} source2 - The second source object.
+ * @param {W} source3 - The third source object.
+ * @returns {T & U & V & W} - Returns `object`.
+ *
+ * @example
+ * merge({ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function merge<T, U, V, W>(object: T, source1: U, source2: V, source3: W): T & U & V & W;
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @template T
+ * @template U
+ * @template V
+ * @template W
+ * @template X
+ * @param {T} object - The destination object.
+ * @param {U} source1 - The first source object.
+ * @param {V} source2 - The second source object.
+ * @param {W} source3 - The third source object.
+ * @param {X} source4 - The fourth source object.
+ * @returns {T & U & V & W & X} - Returns `object`.
+ *
+ * @example
+ * merge({ a: 1 }, { b: 2 }, { c: 3 }, { d: 4 }, { e: 5 });
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function merge<T, U, V, W, X>(object: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X;
+/**
+ * Recursively merges own and inherited enumerable string keyed properties of source objects into the destination object.
+ *
+ * @param {any} object - The destination object.
+ * @param {...any[]} otherArgs - The source objects.
+ * @returns {any} - Returns `object`.
+ *
+ * @example
+ * merge({ a: 1 }, { b: 2 }, { c: 3 });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function merge(object: any, ...otherArgs: any[]): any;
+
+export { merge };
Index: node_modules/es-toolkit/dist/compat/object/merge.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const mergeWith = require('./mergeWith.js');
+const noop = require('../../function/noop.js');
+
+function merge(object, ...sources) {
+    return mergeWith.mergeWith(object, ...sources, noop.noop);
+}
+
+exports.merge = merge;
Index: node_modules/es-toolkit/dist/compat/object/merge.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/merge.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/merge.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { mergeWith } from './mergeWith.mjs';
+import { noop } from '../../function/noop.mjs';
+
+function merge(object, ...sources) {
+    return mergeWith(object, ...sources, noop);
+}
+
+export { merge };
Index: node_modules/es-toolkit/dist/compat/object/mergeWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mergeWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mergeWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,125 @@
+type MergeWithCustomizer = (objValue: any, srcValue: any, key: string, object: any, source: any, stack: any) => any;
+/**
+ * Merges the properties of a source object into the target object using a customizer function.
+ *
+ * @template TObject
+ * @template TSource
+ * @param {TObject} object - The target object into which the source object properties will be merged.
+ * @param {TSource} source - The source object whose properties will be merged into the target object.
+ * @param {MergeWithCustomizer} customizer - The function to customize assigned values.
+ * @returns {TObject & TSource} Returns the updated target object with properties from the source object merged in.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ *
+ * const result = mergeWith(target, source, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ *   }
+ * });
+ * // => { a: 1, b: 5, c: 4 }
+ */
+declare function mergeWith<TObject, TSource>(object: TObject, source: TSource, customizer: MergeWithCustomizer): TObject & TSource;
+/**
+ * Merges the properties of two source objects into the target object using a customizer function.
+ *
+ * @template TObject
+ * @template TSource1
+ * @template TSource2
+ * @param {TObject} object - The target object into which the source objects properties will be merged.
+ * @param {TSource1} source1 - The first source object.
+ * @param {TSource2} source2 - The second source object.
+ * @param {MergeWithCustomizer} customizer - The function to customize assigned values.
+ * @returns {TObject & TSource1 & TSource2} Returns the updated target object with properties from the source objects merged in.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ *
+ * const result = mergeWith(target, source1, source2, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ *   }
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function mergeWith<TObject, TSource1, TSource2>(object: TObject, source1: TSource1, source2: TSource2, customizer: MergeWithCustomizer): TObject & TSource1 & TSource2;
+/**
+ * Merges the properties of three source objects into the target object using a customizer function.
+ *
+ * @template TObject
+ * @template TSource1
+ * @template TSource2
+ * @template TSource3
+ * @param {TObject} object - The target object into which the source objects properties will be merged.
+ * @param {TSource1} source1 - The first source object.
+ * @param {TSource2} source2 - The second source object.
+ * @param {TSource3} source3 - The third source object.
+ * @param {MergeWithCustomizer} customizer - The function to customize assigned values.
+ * @returns {TObject & TSource1 & TSource2 & TSource3} Returns the updated target object with properties from the source objects merged in.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ *
+ * const result = mergeWith(target, source1, source2, source3, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ *   }
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function mergeWith<TObject, TSource1, TSource2, TSource3>(object: TObject, source1: TSource1, source2: TSource2, source3: TSource3, customizer: MergeWithCustomizer): TObject & TSource1 & TSource2 & TSource3;
+/**
+ * Merges the properties of four source objects into the target object using a customizer function.
+ *
+ * @template TObject
+ * @template TSource1
+ * @template TSource2
+ * @template TSource3
+ * @template TSource4
+ * @param {TObject} object - The target object into which the source objects properties will be merged.
+ * @param {TSource1} source1 - The first source object.
+ * @param {TSource2} source2 - The second source object.
+ * @param {TSource3} source3 - The third source object.
+ * @param {TSource4} source4 - The fourth source object.
+ * @param {MergeWithCustomizer} customizer - The function to customize assigned values.
+ * @returns {TObject & TSource1 & TSource2 & TSource3 & TSource4} Returns the updated target object with properties from the source objects merged in.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ *
+ * const result = mergeWith(target, source1, source2, source3, source4, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ *   }
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function mergeWith<TObject, TSource1, TSource2, TSource3, TSource4>(object: TObject, source1: TSource1, source2: TSource2, source3: TSource3, source4: TSource4, customizer: MergeWithCustomizer): TObject & TSource1 & TSource2 & TSource3 & TSource4;
+/**
+ * Merges the properties of one or more source objects into the target object.
+ *
+ * @param {any} object - The target object into which the source object properties will be merged.
+ * @param {...any} otherArgs - Additional source objects to merge into the target object, including the custom `merge` function.
+ * @returns {any} The updated target object with properties from the source object(s) merged in.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ *
+ * const result = mergeWith(target, source, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ */
+declare function mergeWith(object: any, ...otherArgs: any[]): any;
+
+export { mergeWith };
Index: node_modules/es-toolkit/dist/compat/object/mergeWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mergeWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mergeWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,125 @@
+type MergeWithCustomizer = (objValue: any, srcValue: any, key: string, object: any, source: any, stack: any) => any;
+/**
+ * Merges the properties of a source object into the target object using a customizer function.
+ *
+ * @template TObject
+ * @template TSource
+ * @param {TObject} object - The target object into which the source object properties will be merged.
+ * @param {TSource} source - The source object whose properties will be merged into the target object.
+ * @param {MergeWithCustomizer} customizer - The function to customize assigned values.
+ * @returns {TObject & TSource} Returns the updated target object with properties from the source object merged in.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ *
+ * const result = mergeWith(target, source, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ *   }
+ * });
+ * // => { a: 1, b: 5, c: 4 }
+ */
+declare function mergeWith<TObject, TSource>(object: TObject, source: TSource, customizer: MergeWithCustomizer): TObject & TSource;
+/**
+ * Merges the properties of two source objects into the target object using a customizer function.
+ *
+ * @template TObject
+ * @template TSource1
+ * @template TSource2
+ * @param {TObject} object - The target object into which the source objects properties will be merged.
+ * @param {TSource1} source1 - The first source object.
+ * @param {TSource2} source2 - The second source object.
+ * @param {MergeWithCustomizer} customizer - The function to customize assigned values.
+ * @returns {TObject & TSource1 & TSource2} Returns the updated target object with properties from the source objects merged in.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ *
+ * const result = mergeWith(target, source1, source2, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ *   }
+ * });
+ * // => { a: 1, b: 2, c: 3 }
+ */
+declare function mergeWith<TObject, TSource1, TSource2>(object: TObject, source1: TSource1, source2: TSource2, customizer: MergeWithCustomizer): TObject & TSource1 & TSource2;
+/**
+ * Merges the properties of three source objects into the target object using a customizer function.
+ *
+ * @template TObject
+ * @template TSource1
+ * @template TSource2
+ * @template TSource3
+ * @param {TObject} object - The target object into which the source objects properties will be merged.
+ * @param {TSource1} source1 - The first source object.
+ * @param {TSource2} source2 - The second source object.
+ * @param {TSource3} source3 - The third source object.
+ * @param {MergeWithCustomizer} customizer - The function to customize assigned values.
+ * @returns {TObject & TSource1 & TSource2 & TSource3} Returns the updated target object with properties from the source objects merged in.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ *
+ * const result = mergeWith(target, source1, source2, source3, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ *   }
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4 }
+ */
+declare function mergeWith<TObject, TSource1, TSource2, TSource3>(object: TObject, source1: TSource1, source2: TSource2, source3: TSource3, customizer: MergeWithCustomizer): TObject & TSource1 & TSource2 & TSource3;
+/**
+ * Merges the properties of four source objects into the target object using a customizer function.
+ *
+ * @template TObject
+ * @template TSource1
+ * @template TSource2
+ * @template TSource3
+ * @template TSource4
+ * @param {TObject} object - The target object into which the source objects properties will be merged.
+ * @param {TSource1} source1 - The first source object.
+ * @param {TSource2} source2 - The second source object.
+ * @param {TSource3} source3 - The third source object.
+ * @param {TSource4} source4 - The fourth source object.
+ * @param {MergeWithCustomizer} customizer - The function to customize assigned values.
+ * @returns {TObject & TSource1 & TSource2 & TSource3 & TSource4} Returns the updated target object with properties from the source objects merged in.
+ *
+ * @example
+ * const target = { a: 1 };
+ * const source1 = { b: 2 };
+ * const source2 = { c: 3 };
+ * const source3 = { d: 4 };
+ * const source4 = { e: 5 };
+ *
+ * const result = mergeWith(target, source1, source2, source3, source4, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ *   }
+ * });
+ * // => { a: 1, b: 2, c: 3, d: 4, e: 5 }
+ */
+declare function mergeWith<TObject, TSource1, TSource2, TSource3, TSource4>(object: TObject, source1: TSource1, source2: TSource2, source3: TSource3, source4: TSource4, customizer: MergeWithCustomizer): TObject & TSource1 & TSource2 & TSource3 & TSource4;
+/**
+ * Merges the properties of one or more source objects into the target object.
+ *
+ * @param {any} object - The target object into which the source object properties will be merged.
+ * @param {...any} otherArgs - Additional source objects to merge into the target object, including the custom `merge` function.
+ * @returns {any} The updated target object with properties from the source object(s) merged in.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ *
+ * const result = mergeWith(target, source, (objValue, srcValue) => {
+ *   if (typeof objValue === 'number' && typeof srcValue === 'number') {
+ *     return objValue + srcValue;
+ */
+declare function mergeWith(object: any, ...otherArgs: any[]): any;
+
+export { mergeWith };
Index: node_modules/es-toolkit/dist/compat/object/mergeWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mergeWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mergeWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,96 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const cloneDeep = require('./cloneDeep.js');
+const isUnsafeProperty = require('../../_internal/isUnsafeProperty.js');
+const clone = require('../../object/clone.js');
+const isPrimitive = require('../../predicate/isPrimitive.js');
+const getSymbols = require('../_internal/getSymbols.js');
+const isArguments = require('../predicate/isArguments.js');
+const isObjectLike = require('../predicate/isObjectLike.js');
+const isPlainObject = require('../predicate/isPlainObject.js');
+const isTypedArray = require('../predicate/isTypedArray.js');
+
+function mergeWith(object, ...otherArgs) {
+    const sources = otherArgs.slice(0, -1);
+    const merge = otherArgs[otherArgs.length - 1];
+    let result = object;
+    for (let i = 0; i < sources.length; i++) {
+        const source = sources[i];
+        result = mergeWithDeep(result, source, merge, new Map());
+    }
+    return result;
+}
+function mergeWithDeep(target, source, merge, stack) {
+    if (isPrimitive.isPrimitive(target)) {
+        target = Object(target);
+    }
+    if (source == null || typeof source !== 'object') {
+        return target;
+    }
+    if (stack.has(source)) {
+        return clone.clone(stack.get(source));
+    }
+    stack.set(source, target);
+    if (Array.isArray(source)) {
+        source = source.slice();
+        for (let i = 0; i < source.length; i++) {
+            source[i] = source[i] ?? undefined;
+        }
+    }
+    const sourceKeys = [...Object.keys(source), ...getSymbols.getSymbols(source)];
+    for (let i = 0; i < sourceKeys.length; i++) {
+        const key = sourceKeys[i];
+        if (isUnsafeProperty.isUnsafeProperty(key)) {
+            continue;
+        }
+        let sourceValue = source[key];
+        let targetValue = target[key];
+        if (isArguments.isArguments(sourceValue)) {
+            sourceValue = { ...sourceValue };
+        }
+        if (isArguments.isArguments(targetValue)) {
+            targetValue = { ...targetValue };
+        }
+        if (typeof Buffer !== 'undefined' && Buffer.isBuffer(sourceValue)) {
+            sourceValue = cloneDeep.cloneDeep(sourceValue);
+        }
+        if (Array.isArray(sourceValue)) {
+            if (typeof targetValue === 'object' && targetValue != null) {
+                const cloned = [];
+                const targetKeys = Reflect.ownKeys(targetValue);
+                for (let i = 0; i < targetKeys.length; i++) {
+                    const targetKey = targetKeys[i];
+                    cloned[targetKey] = targetValue[targetKey];
+                }
+                targetValue = cloned;
+            }
+            else {
+                targetValue = [];
+            }
+        }
+        const merged = merge(targetValue, sourceValue, key, target, source, stack);
+        if (merged !== undefined) {
+            target[key] = merged;
+        }
+        else if (Array.isArray(sourceValue)) {
+            target[key] = mergeWithDeep(targetValue, sourceValue, merge, stack);
+        }
+        else if (isObjectLike.isObjectLike(targetValue) && isObjectLike.isObjectLike(sourceValue)) {
+            target[key] = mergeWithDeep(targetValue, sourceValue, merge, stack);
+        }
+        else if (targetValue == null && isPlainObject.isPlainObject(sourceValue)) {
+            target[key] = mergeWithDeep({}, sourceValue, merge, stack);
+        }
+        else if (targetValue == null && isTypedArray.isTypedArray(sourceValue)) {
+            target[key] = cloneDeep.cloneDeep(sourceValue);
+        }
+        else if (targetValue === undefined || sourceValue !== undefined) {
+            target[key] = sourceValue;
+        }
+    }
+    return target;
+}
+
+exports.mergeWith = mergeWith;
Index: node_modules/es-toolkit/dist/compat/object/mergeWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/mergeWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/mergeWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,92 @@
+import { cloneDeep } from './cloneDeep.mjs';
+import { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';
+import { clone } from '../../object/clone.mjs';
+import { isPrimitive } from '../../predicate/isPrimitive.mjs';
+import { getSymbols } from '../_internal/getSymbols.mjs';
+import { isArguments } from '../predicate/isArguments.mjs';
+import { isObjectLike } from '../predicate/isObjectLike.mjs';
+import { isPlainObject } from '../predicate/isPlainObject.mjs';
+import { isTypedArray } from '../predicate/isTypedArray.mjs';
+
+function mergeWith(object, ...otherArgs) {
+    const sources = otherArgs.slice(0, -1);
+    const merge = otherArgs[otherArgs.length - 1];
+    let result = object;
+    for (let i = 0; i < sources.length; i++) {
+        const source = sources[i];
+        result = mergeWithDeep(result, source, merge, new Map());
+    }
+    return result;
+}
+function mergeWithDeep(target, source, merge, stack) {
+    if (isPrimitive(target)) {
+        target = Object(target);
+    }
+    if (source == null || typeof source !== 'object') {
+        return target;
+    }
+    if (stack.has(source)) {
+        return clone(stack.get(source));
+    }
+    stack.set(source, target);
+    if (Array.isArray(source)) {
+        source = source.slice();
+        for (let i = 0; i < source.length; i++) {
+            source[i] = source[i] ?? undefined;
+        }
+    }
+    const sourceKeys = [...Object.keys(source), ...getSymbols(source)];
+    for (let i = 0; i < sourceKeys.length; i++) {
+        const key = sourceKeys[i];
+        if (isUnsafeProperty(key)) {
+            continue;
+        }
+        let sourceValue = source[key];
+        let targetValue = target[key];
+        if (isArguments(sourceValue)) {
+            sourceValue = { ...sourceValue };
+        }
+        if (isArguments(targetValue)) {
+            targetValue = { ...targetValue };
+        }
+        if (typeof Buffer !== 'undefined' && Buffer.isBuffer(sourceValue)) {
+            sourceValue = cloneDeep(sourceValue);
+        }
+        if (Array.isArray(sourceValue)) {
+            if (typeof targetValue === 'object' && targetValue != null) {
+                const cloned = [];
+                const targetKeys = Reflect.ownKeys(targetValue);
+                for (let i = 0; i < targetKeys.length; i++) {
+                    const targetKey = targetKeys[i];
+                    cloned[targetKey] = targetValue[targetKey];
+                }
+                targetValue = cloned;
+            }
+            else {
+                targetValue = [];
+            }
+        }
+        const merged = merge(targetValue, sourceValue, key, target, source, stack);
+        if (merged !== undefined) {
+            target[key] = merged;
+        }
+        else if (Array.isArray(sourceValue)) {
+            target[key] = mergeWithDeep(targetValue, sourceValue, merge, stack);
+        }
+        else if (isObjectLike(targetValue) && isObjectLike(sourceValue)) {
+            target[key] = mergeWithDeep(targetValue, sourceValue, merge, stack);
+        }
+        else if (targetValue == null && isPlainObject(sourceValue)) {
+            target[key] = mergeWithDeep({}, sourceValue, merge, stack);
+        }
+        else if (targetValue == null && isTypedArray(sourceValue)) {
+            target[key] = cloneDeep(sourceValue);
+        }
+        else if (targetValue === undefined || sourceValue !== undefined) {
+            target[key] = sourceValue;
+        }
+    }
+    return target;
+}
+
+export { mergeWith };
Index: node_modules/es-toolkit/dist/compat/object/omit.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/omit.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/omit.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+import { Many } from '../_internal/Many.mjs';
+
+/**
+ * Creates a new object with specified keys omitted.
+ *
+ * @template T - The type of object.
+ * @template K - The type of keys to omit.
+ * @param {T | null | undefined} object - The object to omit keys from.
+ * @param {...K} paths - The keys to be omitted from the object.
+ * @returns {Pick<T, Exclude<keyof T, K[number]>>} A new object with the specified keys omitted.
+ *
+ * @example
+ * omit({ a: 1, b: 2, c: 3 }, 'a', 'c');
+ * // => { b: 2 }
+ */
+declare function omit<T extends object, K extends PropertyKey[]>(object: T | null | undefined, ...paths: K): Pick<T, Exclude<keyof T, K[number]>>;
+/**
+ * Creates a new object with specified keys omitted.
+ *
+ * @template T - The type of object.
+ * @template K - The type of keys to omit.
+ * @param {T | null | undefined} object - The object to omit keys from.
+ * @param {...Array<Many<K>>} paths - The keys to be omitted from the object.
+ * @returns {Omit<T, K>} A new object with the specified keys omitted.
+ *
+ * @example
+ * omit({ a: 1, b: 2, c: 3 }, 'a', ['b', 'c']);
+ * // => {}
+ */
+declare function omit<T extends object, K extends keyof T>(object: T | null | undefined, ...paths: Array<Many<K>>): Omit<T, K>;
+/**
+ * Creates a new object with specified keys omitted.
+ *
+ * @template T - The type of object.
+ * @param {T | null | undefined} object - The object to omit keys from.
+ * @param {...Array<Many<PropertyKey>>} paths - The keys to be omitted from the object.
+ * @returns {Partial<T>} A new object with the specified keys omitted.
+ *
+ * @example
+ * omit({ a: 1, b: 2, c: 3 }, 'a', 'b');
+ * // => { c: 3 }
+ */
+declare function omit<T extends object>(object: T | null | undefined, ...paths: Array<Many<PropertyKey>>): Partial<T>;
+
+export { omit };
Index: node_modules/es-toolkit/dist/compat/object/omit.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/omit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/omit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+import { Many } from '../_internal/Many.js';
+
+/**
+ * Creates a new object with specified keys omitted.
+ *
+ * @template T - The type of object.
+ * @template K - The type of keys to omit.
+ * @param {T | null | undefined} object - The object to omit keys from.
+ * @param {...K} paths - The keys to be omitted from the object.
+ * @returns {Pick<T, Exclude<keyof T, K[number]>>} A new object with the specified keys omitted.
+ *
+ * @example
+ * omit({ a: 1, b: 2, c: 3 }, 'a', 'c');
+ * // => { b: 2 }
+ */
+declare function omit<T extends object, K extends PropertyKey[]>(object: T | null | undefined, ...paths: K): Pick<T, Exclude<keyof T, K[number]>>;
+/**
+ * Creates a new object with specified keys omitted.
+ *
+ * @template T - The type of object.
+ * @template K - The type of keys to omit.
+ * @param {T | null | undefined} object - The object to omit keys from.
+ * @param {...Array<Many<K>>} paths - The keys to be omitted from the object.
+ * @returns {Omit<T, K>} A new object with the specified keys omitted.
+ *
+ * @example
+ * omit({ a: 1, b: 2, c: 3 }, 'a', ['b', 'c']);
+ * // => {}
+ */
+declare function omit<T extends object, K extends keyof T>(object: T | null | undefined, ...paths: Array<Many<K>>): Omit<T, K>;
+/**
+ * Creates a new object with specified keys omitted.
+ *
+ * @template T - The type of object.
+ * @param {T | null | undefined} object - The object to omit keys from.
+ * @param {...Array<Many<PropertyKey>>} paths - The keys to be omitted from the object.
+ * @returns {Partial<T>} A new object with the specified keys omitted.
+ *
+ * @example
+ * omit({ a: 1, b: 2, c: 3 }, 'a', 'b');
+ * // => { c: 3 }
+ */
+declare function omit<T extends object>(object: T | null | undefined, ...paths: Array<Many<PropertyKey>>): Partial<T>;
+
+export { omit };
Index: node_modules/es-toolkit/dist/compat/object/omit.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/omit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/omit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const unset = require('./unset.js');
+const cloneDeep = require('../../object/cloneDeep.js');
+
+function omit(obj, ...keysArr) {
+    if (obj == null) {
+        return {};
+    }
+    const result = cloneDeep.cloneDeep(obj);
+    for (let i = 0; i < keysArr.length; i++) {
+        let keys = keysArr[i];
+        switch (typeof keys) {
+            case 'object': {
+                if (!Array.isArray(keys)) {
+                    keys = Array.from(keys);
+                }
+                for (let j = 0; j < keys.length; j++) {
+                    const key = keys[j];
+                    unset.unset(result, key);
+                }
+                break;
+            }
+            case 'string':
+            case 'symbol':
+            case 'number': {
+                unset.unset(result, keys);
+                break;
+            }
+        }
+    }
+    return result;
+}
+
+exports.omit = omit;
Index: node_modules/es-toolkit/dist/compat/object/omit.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/omit.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/omit.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { unset } from './unset.mjs';
+import { cloneDeep } from '../../object/cloneDeep.mjs';
+
+function omit(obj, ...keysArr) {
+    if (obj == null) {
+        return {};
+    }
+    const result = cloneDeep(obj);
+    for (let i = 0; i < keysArr.length; i++) {
+        let keys = keysArr[i];
+        switch (typeof keys) {
+            case 'object': {
+                if (!Array.isArray(keys)) {
+                    keys = Array.from(keys);
+                }
+                for (let j = 0; j < keys.length; j++) {
+                    const key = keys[j];
+                    unset(result, key);
+                }
+                break;
+            }
+            case 'string':
+            case 'symbol':
+            case 'number': {
+                unset(result, keys);
+                break;
+            }
+        }
+    }
+    return result;
+}
+
+export { omit };
Index: node_modules/es-toolkit/dist/compat/object/omitBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/omitBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/omitBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+import { ValueKeyIteratee } from '../_internal/ValueKeyIteratee.mjs';
+
+/**
+ * Creates a new object composed of the properties that do not satisfy the predicate function.
+ *
+ * @template T
+ * @param {Record<string, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T>} predicate - The function invoked per property.
+ * @returns {Record<string, T>} Returns the new object.
+ *
+ * @example
+ * omitBy({ 'a': 1, 'b': '2', 'c': 3 }, isString);
+ * // => { 'a': 1, 'c': 3 }
+ */
+declare function omitBy<T>(object: Record<string, T> | null | undefined, predicate?: ValueKeyIteratee<T>): Record<string, T>;
+/**
+ * Creates a new object composed of the properties that do not satisfy the predicate function.
+ *
+ * @template T
+ * @param {Record<number, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T>} predicate - The function invoked per property.
+ * @returns {Record<number, T>} Returns the new object.
+ *
+ * @example
+ * omitBy({ 0: 1, 1: '2', 2: 3 }, isString);
+ * // => { 0: 1, 2: 3 }
+ */
+declare function omitBy<T>(object: Record<number, T> | null | undefined, predicate?: ValueKeyIteratee<T>): Record<number, T>;
+/**
+ * Creates a new object composed of the properties that do not satisfy the predicate function.
+ *
+ * @template T
+ * @param {T | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T[keyof T]>} predicate - The function invoked per property.
+ * @returns {Partial<T>} Returns the new object.
+ *
+ * @example
+ * omitBy({ 'a': 1, 'b': '2', 'c': 3 }, isString);
+ * // => { 'a': 1, 'c': 3 }
+ */
+declare function omitBy<T extends object>(object: T | null | undefined, predicate: ValueKeyIteratee<T[keyof T]>): Partial<T>;
+
+export { omitBy };
Index: node_modules/es-toolkit/dist/compat/object/omitBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/omitBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/omitBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+import { ValueKeyIteratee } from '../_internal/ValueKeyIteratee.js';
+
+/**
+ * Creates a new object composed of the properties that do not satisfy the predicate function.
+ *
+ * @template T
+ * @param {Record<string, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T>} predicate - The function invoked per property.
+ * @returns {Record<string, T>} Returns the new object.
+ *
+ * @example
+ * omitBy({ 'a': 1, 'b': '2', 'c': 3 }, isString);
+ * // => { 'a': 1, 'c': 3 }
+ */
+declare function omitBy<T>(object: Record<string, T> | null | undefined, predicate?: ValueKeyIteratee<T>): Record<string, T>;
+/**
+ * Creates a new object composed of the properties that do not satisfy the predicate function.
+ *
+ * @template T
+ * @param {Record<number, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T>} predicate - The function invoked per property.
+ * @returns {Record<number, T>} Returns the new object.
+ *
+ * @example
+ * omitBy({ 0: 1, 1: '2', 2: 3 }, isString);
+ * // => { 0: 1, 2: 3 }
+ */
+declare function omitBy<T>(object: Record<number, T> | null | undefined, predicate?: ValueKeyIteratee<T>): Record<number, T>;
+/**
+ * Creates a new object composed of the properties that do not satisfy the predicate function.
+ *
+ * @template T
+ * @param {T | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T[keyof T]>} predicate - The function invoked per property.
+ * @returns {Partial<T>} Returns the new object.
+ *
+ * @example
+ * omitBy({ 'a': 1, 'b': '2', 'c': 3 }, isString);
+ * // => { 'a': 1, 'c': 3 }
+ */
+declare function omitBy<T extends object>(object: T | null | undefined, predicate: ValueKeyIteratee<T[keyof T]>): Partial<T>;
+
+export { omitBy };
Index: node_modules/es-toolkit/dist/compat/object/omitBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/omitBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/omitBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keysIn = require('./keysIn.js');
+const range = require('../../math/range.js');
+const getSymbolsIn = require('../_internal/getSymbolsIn.js');
+const identity = require('../function/identity.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isSymbol = require('../predicate/isSymbol.js');
+const iteratee = require('../util/iteratee.js');
+
+function omitBy(object, shouldOmit) {
+    if (object == null) {
+        return {};
+    }
+    const result = {};
+    const predicate = iteratee.iteratee(shouldOmit ?? identity.identity);
+    const keys = isArrayLike.isArrayLike(object)
+        ? range.range(0, object.length)
+        : [...keysIn.keysIn(object), ...getSymbolsIn.getSymbolsIn(object)];
+    for (let i = 0; i < keys.length; i++) {
+        const key = (isSymbol.isSymbol(keys[i]) ? keys[i] : keys[i].toString());
+        const value = object[key];
+        if (!predicate(value, key, object)) {
+            result[key] = value;
+        }
+    }
+    return result;
+}
+
+exports.omitBy = omitBy;
Index: node_modules/es-toolkit/dist/compat/object/omitBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/omitBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/omitBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import { keysIn } from './keysIn.mjs';
+import { range } from '../../math/range.mjs';
+import { getSymbolsIn } from '../_internal/getSymbolsIn.mjs';
+import { identity } from '../function/identity.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isSymbol } from '../predicate/isSymbol.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function omitBy(object, shouldOmit) {
+    if (object == null) {
+        return {};
+    }
+    const result = {};
+    const predicate = iteratee(shouldOmit ?? identity);
+    const keys = isArrayLike(object)
+        ? range(0, object.length)
+        : [...keysIn(object), ...getSymbolsIn(object)];
+    for (let i = 0; i < keys.length; i++) {
+        const key = (isSymbol(keys[i]) ? keys[i] : keys[i].toString());
+        const value = object[key];
+        if (!predicate(value, key, object)) {
+            result[key] = value;
+        }
+    }
+    return result;
+}
+
+export { omitBy };
Index: node_modules/es-toolkit/dist/compat/object/pick.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/pick.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/pick.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import { Many } from '../_internal/Many.mjs';
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Creates a new object composed of the picked object properties.
+ *
+ * @template T - The type of object.
+ * @template U - The type of keys to pick.
+ * @param {T} object - The object to pick keys from.
+ * @param {...Array<Many<U>>} props - An array of keys to be picked from the object.
+ * @returns {Pick<T, U>} A new object with the specified keys picked.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const result = pick(obj, ['a', 'c']);
+ * // result will be { a: 1, c: 3 }
+ */
+declare function pick<T extends object, U extends keyof T>(object: T, ...props: Array<Many<U>>): Pick<T, U>;
+/**
+ * Creates a new object composed of the picked object properties.
+ *
+ * @template T - The type of object.
+ * @param {T | null | undefined} object - The object to pick keys from.
+ * @param {...Array<Many<PropertyPath>>} props - An array of keys to be picked from the object.
+ * @returns {Partial<T>} A new object with the specified keys picked.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const result = pick(obj, ['a', 'c']);
+ * // result will be { a: 1, c: 3 }
+ */
+declare function pick<T>(object: T | null | undefined, ...props: Array<Many<PropertyPath>>): Partial<T>;
+
+export { pick };
Index: node_modules/es-toolkit/dist/compat/object/pick.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/pick.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/pick.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import { Many } from '../_internal/Many.js';
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Creates a new object composed of the picked object properties.
+ *
+ * @template T - The type of object.
+ * @template U - The type of keys to pick.
+ * @param {T} object - The object to pick keys from.
+ * @param {...Array<Many<U>>} props - An array of keys to be picked from the object.
+ * @returns {Pick<T, U>} A new object with the specified keys picked.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const result = pick(obj, ['a', 'c']);
+ * // result will be { a: 1, c: 3 }
+ */
+declare function pick<T extends object, U extends keyof T>(object: T, ...props: Array<Many<U>>): Pick<T, U>;
+/**
+ * Creates a new object composed of the picked object properties.
+ *
+ * @template T - The type of object.
+ * @param {T | null | undefined} object - The object to pick keys from.
+ * @param {...Array<Many<PropertyPath>>} props - An array of keys to be picked from the object.
+ * @returns {Partial<T>} A new object with the specified keys picked.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const result = pick(obj, ['a', 'c']);
+ * // result will be { a: 1, c: 3 }
+ */
+declare function pick<T>(object: T | null | undefined, ...props: Array<Many<PropertyPath>>): Partial<T>;
+
+export { pick };
Index: node_modules/es-toolkit/dist/compat/object/pick.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/pick.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/pick.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const get = require('./get.js');
+const has = require('./has.js');
+const set = require('./set.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isNil = require('../predicate/isNil.js');
+
+function pick(obj, ...keysArr) {
+    if (isNil.isNil(obj)) {
+        return {};
+    }
+    const result = {};
+    for (let i = 0; i < keysArr.length; i++) {
+        let keys = keysArr[i];
+        switch (typeof keys) {
+            case 'object': {
+                if (!Array.isArray(keys)) {
+                    if (isArrayLike.isArrayLike(keys)) {
+                        keys = Array.from(keys);
+                    }
+                    else {
+                        keys = [keys];
+                    }
+                }
+                break;
+            }
+            case 'string':
+            case 'symbol':
+            case 'number': {
+                keys = [keys];
+                break;
+            }
+        }
+        for (const key of keys) {
+            const value = get.get(obj, key);
+            if (value === undefined && !has.has(obj, key)) {
+                continue;
+            }
+            if (typeof key === 'string' && Object.hasOwn(obj, key)) {
+                result[key] = value;
+            }
+            else {
+                set.set(result, key, value);
+            }
+        }
+    }
+    return result;
+}
+
+exports.pick = pick;
Index: node_modules/es-toolkit/dist/compat/object/pick.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/pick.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/pick.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+import { get } from './get.mjs';
+import { has } from './has.mjs';
+import { set } from './set.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isNil } from '../predicate/isNil.mjs';
+
+function pick(obj, ...keysArr) {
+    if (isNil(obj)) {
+        return {};
+    }
+    const result = {};
+    for (let i = 0; i < keysArr.length; i++) {
+        let keys = keysArr[i];
+        switch (typeof keys) {
+            case 'object': {
+                if (!Array.isArray(keys)) {
+                    if (isArrayLike(keys)) {
+                        keys = Array.from(keys);
+                    }
+                    else {
+                        keys = [keys];
+                    }
+                }
+                break;
+            }
+            case 'string':
+            case 'symbol':
+            case 'number': {
+                keys = [keys];
+                break;
+            }
+        }
+        for (const key of keys) {
+            const value = get(obj, key);
+            if (value === undefined && !has(obj, key)) {
+                continue;
+            }
+            if (typeof key === 'string' && Object.hasOwn(obj, key)) {
+                result[key] = value;
+            }
+            else {
+                set(result, key, value);
+            }
+        }
+    }
+    return result;
+}
+
+export { pick };
Index: node_modules/es-toolkit/dist/compat/object/pickBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/pickBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/pickBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+import { ValueKeyIteratee } from '../_internal/ValueKeyIteratee.mjs';
+import { ValueKeyIterateeTypeGuard } from '../_internal/ValueKeyIterateeTypeGuard.mjs';
+
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object values.
+ * @template S - The type of filtered values.
+ * @param {Record<string, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIterateeTypeGuard<T, S>} predicate - The function invoked per property.
+ * @returns {Record<string, S>} Returns the new filtered object.
+ *
+ * @example
+ * const users = {
+ *   'fred': { 'user': 'fred', 'age': 40 },
+ *   'pebbles': { 'user': 'pebbles', 'age': 1 }
+ * };
+ * pickBy(users, ({ age }) => age < 40);
+ * // => { 'pebbles': { 'user': 'pebbles', 'age': 1 } }
+ */
+declare function pickBy<T, S extends T>(object: Record<string, T> | null | undefined, predicate: ValueKeyIterateeTypeGuard<T, S>): Record<string, S>;
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object values.
+ * @template S - The type of filtered values.
+ * @param {Record<number, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIterateeTypeGuard<T, S>} predicate - The function invoked per property.
+ * @returns {Record<number, S>} Returns the new filtered object.
+ *
+ * @example
+ * const array = [1, 2, 3, 4];
+ * pickBy(array, (value) => value % 2 === 0);
+ * // => { 1: 2, 3: 4 }
+ */
+declare function pickBy<T, S extends T>(object: Record<number, T> | null | undefined, predicate: ValueKeyIterateeTypeGuard<T, S>): Record<number, S>;
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object values.
+ * @param {Record<string, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T>} [predicate] - The function invoked per property.
+ * @returns {Record<string, T>} Returns the new filtered object.
+ *
+ * @example
+ * const object = { 'a': 1, 'b': '2', 'c': 3 };
+ * pickBy(object, (value) => typeof value === 'string');
+ * // => { 'b': '2' }
+ */
+declare function pickBy<T>(object: Record<string, T> | null | undefined, predicate?: ValueKeyIteratee<T>): Record<string, T>;
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object values.
+ * @param {Record<number, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T>} [predicate] - The function invoked per property.
+ * @returns {Record<number, T>} Returns the new filtered object.
+ *
+ * @example
+ * const array = [1, 2, 3, 4];
+ * pickBy(array, (value) => value > 2);
+ * // => { 2: 3, 3: 4 }
+ */
+declare function pickBy<T>(object: Record<number, T> | null | undefined, predicate?: ValueKeyIteratee<T>): Record<number, T>;
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object.
+ * @param {T | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T[keyof T]>} [predicate] - The function invoked per property.
+ * @returns {Partial<T>} Returns the new filtered object.
+ *
+ * @example
+ * const object = { 'a': 1, 'b': '2', 'c': 3 };
+ * pickBy(object, (value) => typeof value === 'string');
+ * // => { 'b': '2' }
+ */
+declare function pickBy<T extends object>(object: T | null | undefined, predicate?: ValueKeyIteratee<T[keyof T]>): Partial<T>;
+
+export { pickBy };
Index: node_modules/es-toolkit/dist/compat/object/pickBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/pickBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/pickBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+import { ValueKeyIteratee } from '../_internal/ValueKeyIteratee.js';
+import { ValueKeyIterateeTypeGuard } from '../_internal/ValueKeyIterateeTypeGuard.js';
+
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object values.
+ * @template S - The type of filtered values.
+ * @param {Record<string, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIterateeTypeGuard<T, S>} predicate - The function invoked per property.
+ * @returns {Record<string, S>} Returns the new filtered object.
+ *
+ * @example
+ * const users = {
+ *   'fred': { 'user': 'fred', 'age': 40 },
+ *   'pebbles': { 'user': 'pebbles', 'age': 1 }
+ * };
+ * pickBy(users, ({ age }) => age < 40);
+ * // => { 'pebbles': { 'user': 'pebbles', 'age': 1 } }
+ */
+declare function pickBy<T, S extends T>(object: Record<string, T> | null | undefined, predicate: ValueKeyIterateeTypeGuard<T, S>): Record<string, S>;
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object values.
+ * @template S - The type of filtered values.
+ * @param {Record<number, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIterateeTypeGuard<T, S>} predicate - The function invoked per property.
+ * @returns {Record<number, S>} Returns the new filtered object.
+ *
+ * @example
+ * const array = [1, 2, 3, 4];
+ * pickBy(array, (value) => value % 2 === 0);
+ * // => { 1: 2, 3: 4 }
+ */
+declare function pickBy<T, S extends T>(object: Record<number, T> | null | undefined, predicate: ValueKeyIterateeTypeGuard<T, S>): Record<number, S>;
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object values.
+ * @param {Record<string, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T>} [predicate] - The function invoked per property.
+ * @returns {Record<string, T>} Returns the new filtered object.
+ *
+ * @example
+ * const object = { 'a': 1, 'b': '2', 'c': 3 };
+ * pickBy(object, (value) => typeof value === 'string');
+ * // => { 'b': '2' }
+ */
+declare function pickBy<T>(object: Record<string, T> | null | undefined, predicate?: ValueKeyIteratee<T>): Record<string, T>;
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object values.
+ * @param {Record<number, T> | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T>} [predicate] - The function invoked per property.
+ * @returns {Record<number, T>} Returns the new filtered object.
+ *
+ * @example
+ * const array = [1, 2, 3, 4];
+ * pickBy(array, (value) => value > 2);
+ * // => { 2: 3, 3: 4 }
+ */
+declare function pickBy<T>(object: Record<number, T> | null | undefined, predicate?: ValueKeyIteratee<T>): Record<number, T>;
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * @template T - The type of object.
+ * @param {T | null | undefined} object - The source object.
+ * @param {ValueKeyIteratee<T[keyof T]>} [predicate] - The function invoked per property.
+ * @returns {Partial<T>} Returns the new filtered object.
+ *
+ * @example
+ * const object = { 'a': 1, 'b': '2', 'c': 3 };
+ * pickBy(object, (value) => typeof value === 'string');
+ * // => { 'b': '2' }
+ */
+declare function pickBy<T extends object>(object: T | null | undefined, predicate?: ValueKeyIteratee<T[keyof T]>): Partial<T>;
+
+export { pickBy };
Index: node_modules/es-toolkit/dist/compat/object/pickBy.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/pickBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/pickBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keysIn = require('./keysIn.js');
+const range = require('../../math/range.js');
+const getSymbolsIn = require('../_internal/getSymbolsIn.js');
+const identity = require('../function/identity.js');
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isSymbol = require('../predicate/isSymbol.js');
+const iteratee = require('../util/iteratee.js');
+
+function pickBy(obj, shouldPick) {
+    if (obj == null) {
+        return {};
+    }
+    const predicate = iteratee.iteratee(shouldPick ?? identity.identity);
+    const result = {};
+    const keys = isArrayLike.isArrayLike(obj) ? range.range(0, obj.length) : [...keysIn.keysIn(obj), ...getSymbolsIn.getSymbolsIn(obj)];
+    for (let i = 0; i < keys.length; i++) {
+        const key = (isSymbol.isSymbol(keys[i]) ? keys[i] : keys[i].toString());
+        const value = obj[key];
+        if (predicate(value, key, obj)) {
+            result[key] = value;
+        }
+    }
+    return result;
+}
+
+exports.pickBy = pickBy;
Index: node_modules/es-toolkit/dist/compat/object/pickBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/pickBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/pickBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import { keysIn } from './keysIn.mjs';
+import { range } from '../../math/range.mjs';
+import { getSymbolsIn } from '../_internal/getSymbolsIn.mjs';
+import { identity } from '../function/identity.mjs';
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isSymbol } from '../predicate/isSymbol.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function pickBy(obj, shouldPick) {
+    if (obj == null) {
+        return {};
+    }
+    const predicate = iteratee(shouldPick ?? identity);
+    const result = {};
+    const keys = isArrayLike(obj) ? range(0, obj.length) : [...keysIn(obj), ...getSymbolsIn(obj)];
+    for (let i = 0; i < keys.length; i++) {
+        const key = (isSymbol(keys[i]) ? keys[i] : keys[i].toString());
+        const value = obj[key];
+        if (predicate(value, key, obj)) {
+            result[key] = value;
+        }
+    }
+    return result;
+}
+
+export { pickBy };
Index: node_modules/es-toolkit/dist/compat/object/property.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/property.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/property.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+declare function property<T, R>(path: PropertyPath): (obj: T) => R;
+
+export { property };
Index: node_modules/es-toolkit/dist/compat/object/property.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/property.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/property.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+declare function property<T, R>(path: PropertyPath): (obj: T) => R;
+
+export { property };
Index: node_modules/es-toolkit/dist/compat/object/property.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/property.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/property.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const get = require('./get.js');
+
+function property(path) {
+    return function (object) {
+        return get.get(object, path);
+    };
+}
+
+exports.property = property;
Index: node_modules/es-toolkit/dist/compat/object/property.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/property.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/property.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { get } from './get.mjs';
+
+function property(path) {
+    return function (object) {
+        return get(object, path);
+    };
+}
+
+export { property };
Index: node_modules/es-toolkit/dist/compat/object/propertyOf.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/propertyOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/propertyOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+declare function propertyOf<T extends {}>(object: T): (path: PropertyPath) => any;
+
+export { propertyOf };
Index: node_modules/es-toolkit/dist/compat/object/propertyOf.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/propertyOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/propertyOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+declare function propertyOf<T extends {}>(object: T): (path: PropertyPath) => any;
+
+export { propertyOf };
Index: node_modules/es-toolkit/dist/compat/object/propertyOf.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/propertyOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/propertyOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const get = require('./get.js');
+
+function propertyOf(object) {
+    return function (path) {
+        return get.get(object, path);
+    };
+}
+
+exports.propertyOf = propertyOf;
Index: node_modules/es-toolkit/dist/compat/object/propertyOf.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/propertyOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/propertyOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { get } from './get.mjs';
+
+function propertyOf(object) {
+    return function (path) {
+        return get(object, path);
+    };
+}
+
+export { propertyOf };
Index: node_modules/es-toolkit/dist/compat/object/result.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/result.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/result.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Retrieves the value at a given path of an object.
+ * If the resolved value is a function, it is invoked with the object as its `this` context.
+ * If the value is `undefined`, the `defaultValue` is returned.
+ *
+ * @template T - The type of object.
+ * @template R - The type of the value to return.
+ * @param {T} object - The object to query.
+ * @param {PropertyPath} path - The path of the property to get.
+ * @param {R | ((...args: any[]) => R)} [defaultValue] - The value returned if the resolved value is `undefined`.
+ * @returns {R} - Returns the resolved value.
+ *
+ * @example
+ * const obj = { a: { b: { c: 3 } } };
+ * result(obj, 'a.b.c');
+ * // => 3
+ *
+ * @example
+ * const obj = { a: () => 5 };
+ * result(obj, 'a');
+ * // => 5 (calls the function `a` and returns its result)
+ *
+ * @example
+ * const obj = { a: { b: null } };
+ * result(obj, 'a.b.c', 'default');
+ * // => 'default'
+ *
+ * @example
+ * const obj = { a: { b: { c: 3 } } };
+ * result(obj, 'a.b.d', () => 'default');
+ * // => 'default'
+ */
+declare function result<R>(object: any, path: PropertyPath, defaultValue?: R | ((...args: any[]) => R)): R;
+
+export { result };
Index: node_modules/es-toolkit/dist/compat/object/result.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/result.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/result.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Retrieves the value at a given path of an object.
+ * If the resolved value is a function, it is invoked with the object as its `this` context.
+ * If the value is `undefined`, the `defaultValue` is returned.
+ *
+ * @template T - The type of object.
+ * @template R - The type of the value to return.
+ * @param {T} object - The object to query.
+ * @param {PropertyPath} path - The path of the property to get.
+ * @param {R | ((...args: any[]) => R)} [defaultValue] - The value returned if the resolved value is `undefined`.
+ * @returns {R} - Returns the resolved value.
+ *
+ * @example
+ * const obj = { a: { b: { c: 3 } } };
+ * result(obj, 'a.b.c');
+ * // => 3
+ *
+ * @example
+ * const obj = { a: () => 5 };
+ * result(obj, 'a');
+ * // => 5 (calls the function `a` and returns its result)
+ *
+ * @example
+ * const obj = { a: { b: null } };
+ * result(obj, 'a.b.c', 'default');
+ * // => 'default'
+ *
+ * @example
+ * const obj = { a: { b: { c: 3 } } };
+ * result(obj, 'a.b.d', () => 'default');
+ * // => 'default'
+ */
+declare function result<R>(object: any, path: PropertyPath, defaultValue?: R | ((...args: any[]) => R)): R;
+
+export { result };
Index: node_modules/es-toolkit/dist/compat/object/result.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/result.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/result.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isKey = require('../_internal/isKey.js');
+const toKey = require('../_internal/toKey.js');
+const toPath = require('../util/toPath.js');
+const toString = require('../util/toString.js');
+
+function result(object, path, defaultValue) {
+    if (isKey.isKey(path, object)) {
+        path = [path];
+    }
+    else if (!Array.isArray(path)) {
+        path = toPath.toPath(toString.toString(path));
+    }
+    const pathLength = Math.max(path.length, 1);
+    for (let index = 0; index < pathLength; index++) {
+        const value = object == null ? undefined : object[toKey.toKey(path[index])];
+        if (value === undefined) {
+            return typeof defaultValue === 'function' ? defaultValue.call(object) : defaultValue;
+        }
+        object = typeof value === 'function' ? value.call(object) : value;
+    }
+    return object;
+}
+
+exports.result = result;
Index: node_modules/es-toolkit/dist/compat/object/result.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/result.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/result.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import { isKey } from '../_internal/isKey.mjs';
+import { toKey } from '../_internal/toKey.mjs';
+import { toPath } from '../util/toPath.mjs';
+import { toString } from '../util/toString.mjs';
+
+function result(object, path, defaultValue) {
+    if (isKey(path, object)) {
+        path = [path];
+    }
+    else if (!Array.isArray(path)) {
+        path = toPath(toString(path));
+    }
+    const pathLength = Math.max(path.length, 1);
+    for (let index = 0; index < pathLength; index++) {
+        const value = object == null ? undefined : object[toKey(path[index])];
+        if (value === undefined) {
+            return typeof defaultValue === 'function' ? defaultValue.call(object) : defaultValue;
+        }
+        object = typeof value === 'function' ? value.call(object) : value;
+    }
+    return object;
+}
+
+export { result };
Index: node_modules/es-toolkit/dist/compat/object/set.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/set.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/set.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Sets the value at the specified path of the given object. If any part of the path does not exist, it will be created.
+ *
+ * @template T - The type of the object.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to set.
+ * @param {any} value - The value to set.
+ * @returns {T} - The modified object.
+ *
+ * @example
+ * // Set a value in a nested object
+ * const obj = { a: { b: { c: 3 } } };
+ * set(obj, 'a.b.c', 4);
+ * console.log(obj.a.b.c); // 4
+ *
+ * @example
+ * // Set a value in an array
+ * const arr = [1, 2, 3];
+ * set(arr, 1, 4);
+ * console.log(arr[1]); // 4
+ *
+ * @example
+ * // Create non-existent path and set value
+ * const obj = {};
+ * set(obj, 'a.b.c', 4);
+ * console.log(obj); // { a: { b: { c: 4 } } }
+ */
+declare function set<T extends object>(object: T, path: PropertyPath, value: any): T;
+/**
+ * Sets the value at the specified path of the given object. If any part of the path does not exist, it will be created.
+ *
+ * @template R - The return type.
+ * @param {object} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to set.
+ * @param {any} value - The value to set.
+ * @returns {R} - The modified object.
+ *
+ * @example
+ * // Set a value in a nested object
+ * const obj = { a: { b: { c: 3 } } };
+ * set(obj, 'a.b.c', 4);
+ * console.log(obj.a.b.c); // 4
+ *
+ * @example
+ * // Set a value in an array
+ * const arr = [1, 2, 3];
+ * set(arr, 1, 4);
+ * console.log(arr[1]); // 4
+ *
+ * @example
+ * // Create non-existent path and set value
+ * const obj = {};
+ * set(obj, 'a.b.c', 4);
+ * console.log(obj); // { a: { b: { c: 4 } } }
+ */
+declare function set<R>(object: object, path: PropertyPath, value: any): R;
+
+export { set };
Index: node_modules/es-toolkit/dist/compat/object/set.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/set.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/set.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Sets the value at the specified path of the given object. If any part of the path does not exist, it will be created.
+ *
+ * @template T - The type of the object.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to set.
+ * @param {any} value - The value to set.
+ * @returns {T} - The modified object.
+ *
+ * @example
+ * // Set a value in a nested object
+ * const obj = { a: { b: { c: 3 } } };
+ * set(obj, 'a.b.c', 4);
+ * console.log(obj.a.b.c); // 4
+ *
+ * @example
+ * // Set a value in an array
+ * const arr = [1, 2, 3];
+ * set(arr, 1, 4);
+ * console.log(arr[1]); // 4
+ *
+ * @example
+ * // Create non-existent path and set value
+ * const obj = {};
+ * set(obj, 'a.b.c', 4);
+ * console.log(obj); // { a: { b: { c: 4 } } }
+ */
+declare function set<T extends object>(object: T, path: PropertyPath, value: any): T;
+/**
+ * Sets the value at the specified path of the given object. If any part of the path does not exist, it will be created.
+ *
+ * @template R - The return type.
+ * @param {object} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to set.
+ * @param {any} value - The value to set.
+ * @returns {R} - The modified object.
+ *
+ * @example
+ * // Set a value in a nested object
+ * const obj = { a: { b: { c: 3 } } };
+ * set(obj, 'a.b.c', 4);
+ * console.log(obj.a.b.c); // 4
+ *
+ * @example
+ * // Set a value in an array
+ * const arr = [1, 2, 3];
+ * set(arr, 1, 4);
+ * console.log(arr[1]); // 4
+ *
+ * @example
+ * // Create non-existent path and set value
+ * const obj = {};
+ * set(obj, 'a.b.c', 4);
+ * console.log(obj); // { a: { b: { c: 4 } } }
+ */
+declare function set<R>(object: object, path: PropertyPath, value: any): R;
+
+export { set };
Index: node_modules/es-toolkit/dist/compat/object/set.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/set.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/set.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const updateWith = require('./updateWith.js');
+
+function set(obj, path, value) {
+    return updateWith.updateWith(obj, path, () => value, () => undefined);
+}
+
+exports.set = set;
Index: node_modules/es-toolkit/dist/compat/object/set.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/set.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/set.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { updateWith } from './updateWith.mjs';
+
+function set(obj, path, value) {
+    return updateWith(obj, path, () => value, () => undefined);
+}
+
+export { set };
Index: node_modules/es-toolkit/dist/compat/object/setWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/setWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/setWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Sets the value at the specified path of the given object using a customizer function.
+ * If any part of the path does not exist, it will be created based on the customizer's result.
+ *
+ * The customizer is invoked to produce the objects of the path. If the customizer returns
+ * a value, that value is used for the current path segment. If the customizer returns
+ * `undefined`, the method will create an appropriate object based on the path - an array
+ * if the next path segment is a valid array index, or an object otherwise.
+ *
+ * @template T - The type of the object.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to set.
+ * @param {any} value - The value to set.
+ * @param {(nsValue: any, key: string, nsObject: T) => any} [customizer] - The function to customize assigned values.
+ * @returns {T} - The modified object.
+ *
+ * @example
+ * // Set a value with a customizer that creates arrays for numeric path segments
+ * const object = {};
+ * setWith(object, '[0][1]', 'a', (value) => Array.isArray(value) ? value : []);
+ * // => { '0': ['a'] }
+ */
+declare function setWith<T extends object>(object: T, path: PropertyPath, value: any, customizer?: (nsValue: any, key: string, nsObject: T) => any): T;
+/**
+ * Sets the value at the specified path of the given object using a customizer function.
+ * If any part of the path does not exist, it will be created based on the customizer's result.
+ *
+ * The customizer is invoked to produce the objects of the path. If the customizer returns
+ * a value, that value is used for the current path segment. If the customizer returns
+ * `undefined`, the method will create an appropriate object based on the path - an array
+ * if the next path segment is a valid array index, or an object otherwise.
+ *
+ * @template T - The type of the object.
+ * @template R - The type of the return value.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to set.
+ * @param {any} value - The value to set.
+ * @param {(nsValue: any, key: string, nsObject: T) => any} [customizer] - The function to customize assigned values.
+ * @returns {R} - The modified object.
+ *
+ * @example
+ * // Set a value with a customizer that creates arrays for numeric path segments
+ * const object = {};
+ * setWith(object, '[0][1]', 'a', (value) => Array.isArray(value) ? value : []);
+ * // => { '0': ['a'] }
+ */
+declare function setWith<T extends object, R>(object: T, path: PropertyPath, value: any, customizer?: (nsValue: any, key: string, nsObject: T) => any): R;
+
+export { setWith };
Index: node_modules/es-toolkit/dist/compat/object/setWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/setWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/setWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Sets the value at the specified path of the given object using a customizer function.
+ * If any part of the path does not exist, it will be created based on the customizer's result.
+ *
+ * The customizer is invoked to produce the objects of the path. If the customizer returns
+ * a value, that value is used for the current path segment. If the customizer returns
+ * `undefined`, the method will create an appropriate object based on the path - an array
+ * if the next path segment is a valid array index, or an object otherwise.
+ *
+ * @template T - The type of the object.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to set.
+ * @param {any} value - The value to set.
+ * @param {(nsValue: any, key: string, nsObject: T) => any} [customizer] - The function to customize assigned values.
+ * @returns {T} - The modified object.
+ *
+ * @example
+ * // Set a value with a customizer that creates arrays for numeric path segments
+ * const object = {};
+ * setWith(object, '[0][1]', 'a', (value) => Array.isArray(value) ? value : []);
+ * // => { '0': ['a'] }
+ */
+declare function setWith<T extends object>(object: T, path: PropertyPath, value: any, customizer?: (nsValue: any, key: string, nsObject: T) => any): T;
+/**
+ * Sets the value at the specified path of the given object using a customizer function.
+ * If any part of the path does not exist, it will be created based on the customizer's result.
+ *
+ * The customizer is invoked to produce the objects of the path. If the customizer returns
+ * a value, that value is used for the current path segment. If the customizer returns
+ * `undefined`, the method will create an appropriate object based on the path - an array
+ * if the next path segment is a valid array index, or an object otherwise.
+ *
+ * @template T - The type of the object.
+ * @template R - The type of the return value.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to set.
+ * @param {any} value - The value to set.
+ * @param {(nsValue: any, key: string, nsObject: T) => any} [customizer] - The function to customize assigned values.
+ * @returns {R} - The modified object.
+ *
+ * @example
+ * // Set a value with a customizer that creates arrays for numeric path segments
+ * const object = {};
+ * setWith(object, '[0][1]', 'a', (value) => Array.isArray(value) ? value : []);
+ * // => { '0': ['a'] }
+ */
+declare function setWith<T extends object, R>(object: T, path: PropertyPath, value: any, customizer?: (nsValue: any, key: string, nsObject: T) => any): R;
+
+export { setWith };
Index: node_modules/es-toolkit/dist/compat/object/setWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/setWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/setWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const updateWith = require('./updateWith.js');
+
+function setWith(obj, path, value, customizer) {
+    let customizerFn;
+    if (typeof customizer === 'function') {
+        customizerFn = customizer;
+    }
+    else {
+        customizerFn = () => undefined;
+    }
+    return updateWith.updateWith(obj, path, () => value, customizerFn);
+}
+
+exports.setWith = setWith;
Index: node_modules/es-toolkit/dist/compat/object/setWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/setWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/setWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { updateWith } from './updateWith.mjs';
+
+function setWith(obj, path, value, customizer) {
+    let customizerFn;
+    if (typeof customizer === 'function') {
+        customizerFn = customizer;
+    }
+    else {
+        customizerFn = () => undefined;
+    }
+    return updateWith(obj, path, () => value, customizerFn);
+}
+
+export { setWith };
Index: node_modules/es-toolkit/dist/compat/object/toDefaulted.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toDefaulted.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toDefaulted.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,122 @@
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @param {T} object - The target object.
+ * @returns {T} The cloned object.
+ */
+declare function toDefaulted<T extends object>(object: T): T;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S - The type of the object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S} source - The object that specifies the default values to apply.
+ * @returns {NonNullable<T & S>} A new object that combines the target and default values, ensuring no properties are left undefined.
+ */
+declare function toDefaulted<T extends object, S extends object>(object: T, source: S): NonNullable<T & S>;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @returns {NonNullable<T & S1 & S2>} A new object that combines the target and default values, ensuring no properties are left undefined.
+ */
+declare function toDefaulted<T extends object, S1 extends object, S2 extends object>(object: T, source1: S1, source2: S2): NonNullable<T & S1 & S2>;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @template S3 - The type of the third object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @param {S3} source3 - The third object that specifies the default values to apply.
+ * @returns {NonNullable<T & S1 & S2 & S3>} A new object that combines the target and default values, ensuring no properties are left undefined.
+ */
+declare function toDefaulted<T extends object, S1 extends object, S2 extends object, S3 extends object>(object: T, source1: S1, source2: S2, source3: S3): NonNullable<T & S1 & S2 & S3>;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @template S3 - The type of the third object that provides default values.
+ * @template S4 - The type of the fourth object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @param {S3} source3 - The third object that specifies the default values to apply.
+ * @param {S4} source4 - The fourth object that specifies the default values to apply.
+ * @returns {NonNullable<T & S1 & S2 & S3 & S4>} A new object that combines the target and default values, ensuring no properties are left undefined.
+ */
+declare function toDefaulted<T extends object, S1 extends object, S2 extends object, S3 extends object, S4 extends object>(object: T, source1: S1, source2: S2, source3: S3, source4: S4): NonNullable<T & S1 & S2 & S3 & S4>;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S - The type of the objects that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S[]} sources - The objects that specifies the default values to apply.
+ * @returns {object} A new object that combines the target and default values, ensuring no properties are left undefined.
+ *
+ * @example
+ * toDefaulted({ a: 1 }, { a: 2, b: 2 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
+ * toDefaulted({ a: 1, b: 2 }, { b: 3 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
+ * toDefaulted({ a: null }, { a: 1 }); // { a: null }
+ * toDefaulted({ a: undefined }, { a: 1 }); // { a: 1 }
+ */
+declare function toDefaulted<T extends object, S extends object>(object: T, ...sources: S[]): object;
+
+export { toDefaulted };
Index: node_modules/es-toolkit/dist/compat/object/toDefaulted.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toDefaulted.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toDefaulted.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,122 @@
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @param {T} object - The target object.
+ * @returns {T} The cloned object.
+ */
+declare function toDefaulted<T extends object>(object: T): T;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S - The type of the object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S} source - The object that specifies the default values to apply.
+ * @returns {NonNullable<T & S>} A new object that combines the target and default values, ensuring no properties are left undefined.
+ */
+declare function toDefaulted<T extends object, S extends object>(object: T, source: S): NonNullable<T & S>;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @returns {NonNullable<T & S1 & S2>} A new object that combines the target and default values, ensuring no properties are left undefined.
+ */
+declare function toDefaulted<T extends object, S1 extends object, S2 extends object>(object: T, source1: S1, source2: S2): NonNullable<T & S1 & S2>;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @template S3 - The type of the third object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @param {S3} source3 - The third object that specifies the default values to apply.
+ * @returns {NonNullable<T & S1 & S2 & S3>} A new object that combines the target and default values, ensuring no properties are left undefined.
+ */
+declare function toDefaulted<T extends object, S1 extends object, S2 extends object, S3 extends object>(object: T, source1: S1, source2: S2, source3: S3): NonNullable<T & S1 & S2 & S3>;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S1 - The type of the first object that provides default values.
+ * @template S2 - The type of the second object that provides default values.
+ * @template S3 - The type of the third object that provides default values.
+ * @template S4 - The type of the fourth object that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S1} source1 - The first object that specifies the default values to apply.
+ * @param {S2} source2 - The second object that specifies the default values to apply.
+ * @param {S3} source3 - The third object that specifies the default values to apply.
+ * @param {S4} source4 - The fourth object that specifies the default values to apply.
+ * @returns {NonNullable<T & S1 & S2 & S3 & S4>} A new object that combines the target and default values, ensuring no properties are left undefined.
+ */
+declare function toDefaulted<T extends object, S1 extends object, S2 extends object, S3 extends object, S4 extends object>(object: T, source1: S1, source2: S2, source3: S3, source4: S4): NonNullable<T & S1 & S2 & S3 & S4>;
+/**
+ * Creates a new object based on the provided `object`, applying default values from the `sources` to ensure that no properties are left `undefined`.
+ * It assigns default values to properties that are either `undefined` or come from `Object.prototype`.
+ *
+ * You can provide multiple source objects to set these default values,
+ * and they will be applied in the order they are given, from left to right.
+ * Once a property has been set, any later values for that property will be ignored.
+ *
+ * Note: This function creates a new object. If you want to modify the `object`, use the `defaults` function instead.
+ *
+ * @template T - The type of the object being processed.
+ * @template S - The type of the objects that provides default values.
+ * @param {T} object - The target object that will receive default values.
+ * @param {S[]} sources - The objects that specifies the default values to apply.
+ * @returns {object} A new object that combines the target and default values, ensuring no properties are left undefined.
+ *
+ * @example
+ * toDefaulted({ a: 1 }, { a: 2, b: 2 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
+ * toDefaulted({ a: 1, b: 2 }, { b: 3 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
+ * toDefaulted({ a: null }, { a: 1 }); // { a: null }
+ * toDefaulted({ a: undefined }, { a: 1 }); // { a: 1 }
+ */
+declare function toDefaulted<T extends object, S extends object>(object: T, ...sources: S[]): object;
+
+export { toDefaulted };
Index: node_modules/es-toolkit/dist/compat/object/toDefaulted.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toDefaulted.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toDefaulted.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const cloneDeep = require('./cloneDeep.js');
+const defaults = require('./defaults.js');
+
+function toDefaulted(object, ...sources) {
+    const cloned = cloneDeep.cloneDeep(object);
+    return defaults.defaults(cloned, ...sources);
+}
+
+exports.toDefaulted = toDefaulted;
Index: node_modules/es-toolkit/dist/compat/object/toDefaulted.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toDefaulted.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toDefaulted.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { cloneDeep } from './cloneDeep.mjs';
+import { defaults } from './defaults.mjs';
+
+function toDefaulted(object, ...sources) {
+    const cloned = cloneDeep(object);
+    return defaults(cloned, ...sources);
+}
+
+export { toDefaulted };
Index: node_modules/es-toolkit/dist/compat/object/toPairs.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toPairs.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toPairs.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Creates an array of key-value pairs from an object.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T>} object - The object to query.
+ * @returns {Array<[string, T]>} Returns the array of key-value pairs.
+ *
+ * @example
+ * const object = { a: 1, b: 2 };
+ * toPairs(object); // [['a', 1], ['b', 2]]
+ */
+declare function toPairs<T>(object?: Record<string, T> | Record<number, T>): Array<[string, T]>;
+/**
+ * Creates an array of key-value pairs from an object.
+ *
+ * @param {object} object - The object to query.
+ * @returns {Array<[string, any]>} Returns the array of key-value pairs.
+ *
+ * @example
+ * const object = { a: 1, b: 2 };
+ * toPairs(object); // [['a', 1], ['b', 2]]
+ */
+declare function toPairs(object?: object): Array<[string, any]>;
+
+export { toPairs };
Index: node_modules/es-toolkit/dist/compat/object/toPairs.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toPairs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toPairs.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Creates an array of key-value pairs from an object.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T>} object - The object to query.
+ * @returns {Array<[string, T]>} Returns the array of key-value pairs.
+ *
+ * @example
+ * const object = { a: 1, b: 2 };
+ * toPairs(object); // [['a', 1], ['b', 2]]
+ */
+declare function toPairs<T>(object?: Record<string, T> | Record<number, T>): Array<[string, T]>;
+/**
+ * Creates an array of key-value pairs from an object.
+ *
+ * @param {object} object - The object to query.
+ * @returns {Array<[string, any]>} Returns the array of key-value pairs.
+ *
+ * @example
+ * const object = { a: 1, b: 2 };
+ * toPairs(object); // [['a', 1], ['b', 2]]
+ */
+declare function toPairs(object?: object): Array<[string, any]>;
+
+export { toPairs };
Index: node_modules/es-toolkit/dist/compat/object/toPairs.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toPairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toPairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keys = require('./keys.js');
+const mapToEntries = require('../_internal/mapToEntries.js');
+const setToEntries = require('../_internal/setToEntries.js');
+
+function toPairs(object) {
+    if (object == null) {
+        return [];
+    }
+    if (object instanceof Set) {
+        return setToEntries.setToEntries(object);
+    }
+    if (object instanceof Map) {
+        return mapToEntries.mapToEntries(object);
+    }
+    const keys$1 = keys.keys(object);
+    const result = new Array(keys$1.length);
+    for (let i = 0; i < keys$1.length; i++) {
+        const key = keys$1[i];
+        const value = object[key];
+        result[i] = [key, value];
+    }
+    return result;
+}
+
+exports.toPairs = toPairs;
Index: node_modules/es-toolkit/dist/compat/object/toPairs.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toPairs.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toPairs.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import { keys } from './keys.mjs';
+import { mapToEntries } from '../_internal/mapToEntries.mjs';
+import { setToEntries } from '../_internal/setToEntries.mjs';
+
+function toPairs(object) {
+    if (object == null) {
+        return [];
+    }
+    if (object instanceof Set) {
+        return setToEntries(object);
+    }
+    if (object instanceof Map) {
+        return mapToEntries(object);
+    }
+    const keys$1 = keys(object);
+    const result = new Array(keys$1.length);
+    for (let i = 0; i < keys$1.length; i++) {
+        const key = keys$1[i];
+        const value = object[key];
+        result[i] = [key, value];
+    }
+    return result;
+}
+
+export { toPairs };
Index: node_modules/es-toolkit/dist/compat/object/toPairsIn.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toPairsIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toPairsIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Creates an array of key-value pairs from an object, including inherited properties.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T>} object - The object to query.
+ * @returns {Array<[string, T]>} Returns the array of key-value pairs.
+ *
+ * @example
+ * const object = { a: 1, b: 2 };
+ * toPairsIn(object); // [['a', 1], ['b', 2]]
+ */
+declare function toPairsIn<T>(object?: Record<string, T> | Record<number, T>): Array<[string, T]>;
+/**
+ * Creates an array of key-value pairs from an object, including inherited properties.
+ *
+ * @param {object} object - The object to query.
+ * @returns {Array<[string, any]>} Returns the array of key-value pairs.
+ *
+ * @example
+ * const object = { a: 1, b: 2 };
+ * toPairsIn(object); // [['a', 1], ['b', 2]]
+ */
+declare function toPairsIn(object?: object): Array<[string, any]>;
+
+export { toPairsIn };
Index: node_modules/es-toolkit/dist/compat/object/toPairsIn.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toPairsIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toPairsIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Creates an array of key-value pairs from an object, including inherited properties.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T>} object - The object to query.
+ * @returns {Array<[string, T]>} Returns the array of key-value pairs.
+ *
+ * @example
+ * const object = { a: 1, b: 2 };
+ * toPairsIn(object); // [['a', 1], ['b', 2]]
+ */
+declare function toPairsIn<T>(object?: Record<string, T> | Record<number, T>): Array<[string, T]>;
+/**
+ * Creates an array of key-value pairs from an object, including inherited properties.
+ *
+ * @param {object} object - The object to query.
+ * @returns {Array<[string, any]>} Returns the array of key-value pairs.
+ *
+ * @example
+ * const object = { a: 1, b: 2 };
+ * toPairsIn(object); // [['a', 1], ['b', 2]]
+ */
+declare function toPairsIn(object?: object): Array<[string, any]>;
+
+export { toPairsIn };
Index: node_modules/es-toolkit/dist/compat/object/toPairsIn.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toPairsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toPairsIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keysIn = require('./keysIn.js');
+const mapToEntries = require('../_internal/mapToEntries.js');
+const setToEntries = require('../_internal/setToEntries.js');
+
+function toPairsIn(object) {
+    if (object == null) {
+        return [];
+    }
+    if (object instanceof Set) {
+        return setToEntries.setToEntries(object);
+    }
+    if (object instanceof Map) {
+        return mapToEntries.mapToEntries(object);
+    }
+    const keys = keysIn.keysIn(object);
+    const result = new Array(keys.length);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        result[i] = [key, value];
+    }
+    return result;
+}
+
+exports.toPairsIn = toPairsIn;
Index: node_modules/es-toolkit/dist/compat/object/toPairsIn.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/toPairsIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/toPairsIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import { keysIn } from './keysIn.mjs';
+import { mapToEntries } from '../_internal/mapToEntries.mjs';
+import { setToEntries } from '../_internal/setToEntries.mjs';
+
+function toPairsIn(object) {
+    if (object == null) {
+        return [];
+    }
+    if (object instanceof Set) {
+        return setToEntries(object);
+    }
+    if (object instanceof Map) {
+        return mapToEntries(object);
+    }
+    const keys = keysIn(object);
+    const result = new Array(keys.length);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        result[i] = [key, value];
+    }
+    return result;
+}
+
+export { toPairsIn };
Index: node_modules/es-toolkit/dist/compat/object/transform.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/transform.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/transform.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @template T - The type of object.
+ * @template R - The type of accumulator.
+ * @param {readonly T[]} object - The array to iterate over.
+ * @param {(acc: R, curr: T, index: number, arr: T[]) => void} iteratee - The function invoked per iteration.
+ * @param {R} [accumulator] - The initial value.
+ * @returns {R} Returns the accumulated value.
+ *
+ * @example
+ * const array = [2, 3, 4];
+ * transform(array, (acc, value) => { acc.push(value * 2); }, []);
+ * // => [4, 6, 8]
+ */
+declare function transform<T, R>(object: readonly T[], iteratee: (acc: R, curr: T, index: number, arr: T[]) => void, accumulator?: R): R;
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @template T - The type of object.
+ * @template R - The type of accumulator.
+ * @param {Record<string, T>} object - The object to iterate over.
+ * @param {(acc: R, curr: T, key: string, dict: Record<string, T>) => void} iteratee - The function invoked per iteration.
+ * @param {R} [accumulator] - The initial value.
+ * @returns {R} Returns the accumulated value.
+ *
+ * @example
+ * const obj = { 'a': 1, 'b': 2, 'c': 1 };
+ * transform(obj, (result, value, key) => { (result[value] || (result[value] = [])).push(key) }, {});
+ * // => { '1': ['a', 'c'], '2': ['b'] }
+ */
+declare function transform<T, R>(object: Record<string, T>, iteratee: (acc: R, curr: T, key: string, dict: Record<string, T>) => void, accumulator?: R): R;
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @template T - The type of object.
+ * @template R - The type of accumulator.
+ * @param {T} object - The object to iterate over.
+ * @param {(acc: R, curr: T[keyof T], key: keyof T, dict: Record<keyof T, T[keyof T]>) => void} iteratee - The function invoked per iteration.
+ * @param {R} [accumulator] - The initial value.
+ * @returns {R} Returns the accumulated value.
+ *
+ * @example
+ * const obj = { x: 1, y: 2, z: 3 };
+ * transform(obj, (acc, value, key) => { acc[key] = value * 2; }, {});
+ * // => { x: 2, y: 4, z: 6 }
+ */
+declare function transform<T extends object, R>(object: T, iteratee: (acc: R, curr: T[keyof T], key: keyof T, dict: Record<keyof T, T[keyof T]>) => void, accumulator?: R): R;
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @param {any[]} object - The array to iterate over.
+ * @returns {any[]} Returns the accumulated value.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * transform(array);
+ * // => [1, 2, 3]
+ */
+declare function transform(object: any[]): any[];
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @param {object} object - The object to iterate over.
+ * @returns {Record<string, any>} Returns the accumulated value.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * transform(obj);
+ * // => { a: 1, b: 2 }
+ */
+declare function transform(object: object): Record<string, any>;
+
+export { transform };
Index: node_modules/es-toolkit/dist/compat/object/transform.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/transform.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/transform.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @template T - The type of object.
+ * @template R - The type of accumulator.
+ * @param {readonly T[]} object - The array to iterate over.
+ * @param {(acc: R, curr: T, index: number, arr: T[]) => void} iteratee - The function invoked per iteration.
+ * @param {R} [accumulator] - The initial value.
+ * @returns {R} Returns the accumulated value.
+ *
+ * @example
+ * const array = [2, 3, 4];
+ * transform(array, (acc, value) => { acc.push(value * 2); }, []);
+ * // => [4, 6, 8]
+ */
+declare function transform<T, R>(object: readonly T[], iteratee: (acc: R, curr: T, index: number, arr: T[]) => void, accumulator?: R): R;
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @template T - The type of object.
+ * @template R - The type of accumulator.
+ * @param {Record<string, T>} object - The object to iterate over.
+ * @param {(acc: R, curr: T, key: string, dict: Record<string, T>) => void} iteratee - The function invoked per iteration.
+ * @param {R} [accumulator] - The initial value.
+ * @returns {R} Returns the accumulated value.
+ *
+ * @example
+ * const obj = { 'a': 1, 'b': 2, 'c': 1 };
+ * transform(obj, (result, value, key) => { (result[value] || (result[value] = [])).push(key) }, {});
+ * // => { '1': ['a', 'c'], '2': ['b'] }
+ */
+declare function transform<T, R>(object: Record<string, T>, iteratee: (acc: R, curr: T, key: string, dict: Record<string, T>) => void, accumulator?: R): R;
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @template T - The type of object.
+ * @template R - The type of accumulator.
+ * @param {T} object - The object to iterate over.
+ * @param {(acc: R, curr: T[keyof T], key: keyof T, dict: Record<keyof T, T[keyof T]>) => void} iteratee - The function invoked per iteration.
+ * @param {R} [accumulator] - The initial value.
+ * @returns {R} Returns the accumulated value.
+ *
+ * @example
+ * const obj = { x: 1, y: 2, z: 3 };
+ * transform(obj, (acc, value, key) => { acc[key] = value * 2; }, {});
+ * // => { x: 2, y: 4, z: 6 }
+ */
+declare function transform<T extends object, R>(object: T, iteratee: (acc: R, curr: T[keyof T], key: keyof T, dict: Record<keyof T, T[keyof T]>) => void, accumulator?: R): R;
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @param {any[]} object - The array to iterate over.
+ * @returns {any[]} Returns the accumulated value.
+ *
+ * @example
+ * const array = [1, 2, 3];
+ * transform(array);
+ * // => [1, 2, 3]
+ */
+declare function transform(object: any[]): any[];
+/**
+ * Traverses object values and creates a new object by accumulating them in the desired form.
+ *
+ * @param {object} object - The object to iterate over.
+ * @returns {Record<string, any>} Returns the accumulated value.
+ *
+ * @example
+ * const obj = { a: 1, b: 2 };
+ * transform(obj);
+ * // => { a: 1, b: 2 }
+ */
+declare function transform(object: object): Record<string, any>;
+
+export { transform };
Index: node_modules/es-toolkit/dist/compat/object/transform.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/transform.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/transform.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const isFunction = require('../../predicate/isFunction.js');
+const forEach = require('../array/forEach.js');
+const isBuffer = require('../predicate/isBuffer.js');
+const isObject = require('../predicate/isObject.js');
+const isTypedArray = require('../predicate/isTypedArray.js');
+const iteratee = require('../util/iteratee.js');
+
+function transform(object, iteratee$1 = identity.identity, accumulator) {
+    const isArrayOrBufferOrTypedArray = Array.isArray(object) || isBuffer.isBuffer(object) || isTypedArray.isTypedArray(object);
+    iteratee$1 = iteratee.iteratee(iteratee$1);
+    if (accumulator == null) {
+        if (isArrayOrBufferOrTypedArray) {
+            accumulator = [];
+        }
+        else if (isObject.isObject(object) && isFunction.isFunction(object.constructor)) {
+            accumulator = Object.create(Object.getPrototypeOf(object));
+        }
+        else {
+            accumulator = {};
+        }
+    }
+    if (object == null) {
+        return accumulator;
+    }
+    forEach.forEach(object, (value, key, object) => iteratee$1(accumulator, value, key, object));
+    return accumulator;
+}
+
+exports.transform = transform;
Index: node_modules/es-toolkit/dist/compat/object/transform.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/transform.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/transform.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { identity } from '../../function/identity.mjs';
+import { isFunction } from '../../predicate/isFunction.mjs';
+import { forEach } from '../array/forEach.mjs';
+import { isBuffer } from '../predicate/isBuffer.mjs';
+import { isObject } from '../predicate/isObject.mjs';
+import { isTypedArray } from '../predicate/isTypedArray.mjs';
+import { iteratee } from '../util/iteratee.mjs';
+
+function transform(object, iteratee$1 = identity, accumulator) {
+    const isArrayOrBufferOrTypedArray = Array.isArray(object) || isBuffer(object) || isTypedArray(object);
+    iteratee$1 = iteratee(iteratee$1);
+    if (accumulator == null) {
+        if (isArrayOrBufferOrTypedArray) {
+            accumulator = [];
+        }
+        else if (isObject(object) && isFunction(object.constructor)) {
+            accumulator = Object.create(Object.getPrototypeOf(object));
+        }
+        else {
+            accumulator = {};
+        }
+    }
+    if (object == null) {
+        return accumulator;
+    }
+    forEach(object, (value, key, object) => iteratee$1(accumulator, value, key, object));
+    return accumulator;
+}
+
+export { transform };
Index: node_modules/es-toolkit/dist/compat/object/unset.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/unset.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/unset.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Removes the property at the given path of the object.
+ *
+ * @param {unknown} obj - The object to modify.
+ * @param {PropertyKey | readonly PropertyKey[]} path - The path of the property to unset.
+ * @returns {boolean} - Returns true if the property is deleted, else false.
+ *
+ * @example
+ * const obj = { a: { b: { c: 42 } } };
+ * unset(obj, 'a.b.c'); // true
+ * console.log(obj); // { a: { b: {} } }
+ *
+ * @example
+ * const obj = { a: { b: { c: 42 } } };
+ * unset(obj, ['a', 'b', 'c']); // true
+ * console.log(obj); // { a: { b: {} } }
+ */
+declare function unset(obj: any, path: PropertyKey | readonly PropertyKey[]): boolean;
+
+export { unset };
Index: node_modules/es-toolkit/dist/compat/object/unset.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/unset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/unset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Removes the property at the given path of the object.
+ *
+ * @param {unknown} obj - The object to modify.
+ * @param {PropertyKey | readonly PropertyKey[]} path - The path of the property to unset.
+ * @returns {boolean} - Returns true if the property is deleted, else false.
+ *
+ * @example
+ * const obj = { a: { b: { c: 42 } } };
+ * unset(obj, 'a.b.c'); // true
+ * console.log(obj); // { a: { b: {} } }
+ *
+ * @example
+ * const obj = { a: { b: { c: 42 } } };
+ * unset(obj, ['a', 'b', 'c']); // true
+ * console.log(obj); // { a: { b: {} } }
+ */
+declare function unset(obj: any, path: PropertyKey | readonly PropertyKey[]): boolean;
+
+export { unset };
Index: node_modules/es-toolkit/dist/compat/object/unset.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/unset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/unset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const get = require('./get.js');
+const isUnsafeProperty = require('../../_internal/isUnsafeProperty.js');
+const isDeepKey = require('../_internal/isDeepKey.js');
+const toKey = require('../_internal/toKey.js');
+const toPath = require('../util/toPath.js');
+
+function unset(obj, path) {
+    if (obj == null) {
+        return true;
+    }
+    switch (typeof path) {
+        case 'symbol':
+        case 'number':
+        case 'object': {
+            if (Array.isArray(path)) {
+                return unsetWithPath(obj, path);
+            }
+            if (typeof path === 'number') {
+                path = toKey.toKey(path);
+            }
+            else if (typeof path === 'object') {
+                if (Object.is(path?.valueOf(), -0)) {
+                    path = '-0';
+                }
+                else {
+                    path = String(path);
+                }
+            }
+            if (isUnsafeProperty.isUnsafeProperty(path)) {
+                return false;
+            }
+            if (obj?.[path] === undefined) {
+                return true;
+            }
+            try {
+                delete obj[path];
+                return true;
+            }
+            catch {
+                return false;
+            }
+        }
+        case 'string': {
+            if (obj?.[path] === undefined && isDeepKey.isDeepKey(path)) {
+                return unsetWithPath(obj, toPath.toPath(path));
+            }
+            if (isUnsafeProperty.isUnsafeProperty(path)) {
+                return false;
+            }
+            try {
+                delete obj[path];
+                return true;
+            }
+            catch {
+                return false;
+            }
+        }
+    }
+}
+function unsetWithPath(obj, path) {
+    const parent = get.get(obj, path.slice(0, -1), obj);
+    const lastKey = path[path.length - 1];
+    if (parent?.[lastKey] === undefined) {
+        return true;
+    }
+    if (isUnsafeProperty.isUnsafeProperty(lastKey)) {
+        return false;
+    }
+    try {
+        delete parent[lastKey];
+        return true;
+    }
+    catch {
+        return false;
+    }
+}
+
+exports.unset = unset;
Index: node_modules/es-toolkit/dist/compat/object/unset.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/unset.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/unset.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,78 @@
+import { get } from './get.mjs';
+import { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';
+import { isDeepKey } from '../_internal/isDeepKey.mjs';
+import { toKey } from '../_internal/toKey.mjs';
+import { toPath } from '../util/toPath.mjs';
+
+function unset(obj, path) {
+    if (obj == null) {
+        return true;
+    }
+    switch (typeof path) {
+        case 'symbol':
+        case 'number':
+        case 'object': {
+            if (Array.isArray(path)) {
+                return unsetWithPath(obj, path);
+            }
+            if (typeof path === 'number') {
+                path = toKey(path);
+            }
+            else if (typeof path === 'object') {
+                if (Object.is(path?.valueOf(), -0)) {
+                    path = '-0';
+                }
+                else {
+                    path = String(path);
+                }
+            }
+            if (isUnsafeProperty(path)) {
+                return false;
+            }
+            if (obj?.[path] === undefined) {
+                return true;
+            }
+            try {
+                delete obj[path];
+                return true;
+            }
+            catch {
+                return false;
+            }
+        }
+        case 'string': {
+            if (obj?.[path] === undefined && isDeepKey(path)) {
+                return unsetWithPath(obj, toPath(path));
+            }
+            if (isUnsafeProperty(path)) {
+                return false;
+            }
+            try {
+                delete obj[path];
+                return true;
+            }
+            catch {
+                return false;
+            }
+        }
+    }
+}
+function unsetWithPath(obj, path) {
+    const parent = get(obj, path.slice(0, -1), obj);
+    const lastKey = path[path.length - 1];
+    if (parent?.[lastKey] === undefined) {
+        return true;
+    }
+    if (isUnsafeProperty(lastKey)) {
+        return false;
+    }
+    try {
+        delete parent[lastKey];
+        return true;
+    }
+    catch {
+        return false;
+    }
+}
+
+export { unset };
Index: node_modules/es-toolkit/dist/compat/object/update.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/update.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/update.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Updates the value at the specified path of the given object using an updater function.
+ * If any part of the path does not exist, it will be created.
+ *
+ * @param {object} obj - The object to modify.
+ * @param {PropertyPath} path - The path of the property to update.
+ * @param {(value: any) => any} updater - The function to produce the updated value.
+ * @returns {any} - The modified object.
+ */
+declare function update(obj: object, path: PropertyPath, updater: (value: any) => any): any;
+
+export { update };
Index: node_modules/es-toolkit/dist/compat/object/update.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/update.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/update.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Updates the value at the specified path of the given object using an updater function.
+ * If any part of the path does not exist, it will be created.
+ *
+ * @param {object} obj - The object to modify.
+ * @param {PropertyPath} path - The path of the property to update.
+ * @param {(value: any) => any} updater - The function to produce the updated value.
+ * @returns {any} - The modified object.
+ */
+declare function update(obj: object, path: PropertyPath, updater: (value: any) => any): any;
+
+export { update };
Index: node_modules/es-toolkit/dist/compat/object/update.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/update.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/update.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const updateWith = require('./updateWith.js');
+
+function update(obj, path, updater) {
+    return updateWith.updateWith(obj, path, updater, () => undefined);
+}
+
+exports.update = update;
Index: node_modules/es-toolkit/dist/compat/object/update.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/update.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/update.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { updateWith } from './updateWith.mjs';
+
+function update(obj, path, updater) {
+    return updateWith(obj, path, updater, () => undefined);
+}
+
+export { update };
Index: node_modules/es-toolkit/dist/compat/object/updateWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/updateWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/updateWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Updates the value at the specified path of the given object using an updater function and a customizer.
+ * If any part of the path does not exist, it will be created.
+ *
+ * @template T - The type of the object.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to update.
+ * @param {(oldValue: any) => any} updater - The function to produce the updated value.
+ * @param {(value: any, key: string, object: T) => any} customizer - The function to customize the update process.
+ * @returns {T} - The modified object.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * updateWith(object, 'a[0].b.c', (n) => n * n);
+ * // => { 'a': [{ 'b': { 'c': 9 } }] }
+ */
+declare function updateWith<T extends object>(object: T, path: PropertyPath, updater: (oldValue: any) => any, customizer?: (value: any, key: string, object: T) => any): T;
+/**
+ * Updates the value at the specified path of the given object using an updater function and a customizer.
+ * If any part of the path does not exist, it will be created.
+ *
+ * @template T - The type of the object.
+ * @template R - The type of the return value.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to update.
+ * @param {(oldValue: any) => any} updater - The function to produce the updated value.
+ * @param {(value: any, key: string, object: T) => any} customizer - The function to customize the update process.
+ * @returns {R} - The modified object.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * updateWith(object, 'a[0].b.c', (n) => n * n);
+ * // => { 'a': [{ 'b': { 'c': 9 } }] }
+ */
+declare function updateWith<T extends object, R>(object: T, path: PropertyPath, updater: (oldValue: any) => any, customizer?: (value: any, key: string, object: T) => any): R;
+
+export { updateWith };
Index: node_modules/es-toolkit/dist/compat/object/updateWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/updateWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/updateWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Updates the value at the specified path of the given object using an updater function and a customizer.
+ * If any part of the path does not exist, it will be created.
+ *
+ * @template T - The type of the object.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to update.
+ * @param {(oldValue: any) => any} updater - The function to produce the updated value.
+ * @param {(value: any, key: string, object: T) => any} customizer - The function to customize the update process.
+ * @returns {T} - The modified object.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * updateWith(object, 'a[0].b.c', (n) => n * n);
+ * // => { 'a': [{ 'b': { 'c': 9 } }] }
+ */
+declare function updateWith<T extends object>(object: T, path: PropertyPath, updater: (oldValue: any) => any, customizer?: (value: any, key: string, object: T) => any): T;
+/**
+ * Updates the value at the specified path of the given object using an updater function and a customizer.
+ * If any part of the path does not exist, it will be created.
+ *
+ * @template T - The type of the object.
+ * @template R - The type of the return value.
+ * @param {T} object - The object to modify.
+ * @param {PropertyPath} path - The path of the property to update.
+ * @param {(oldValue: any) => any} updater - The function to produce the updated value.
+ * @param {(value: any, key: string, object: T) => any} customizer - The function to customize the update process.
+ * @returns {R} - The modified object.
+ *
+ * @example
+ * const object = { 'a': [{ 'b': { 'c': 3 } }] };
+ * updateWith(object, 'a[0].b.c', (n) => n * n);
+ * // => { 'a': [{ 'b': { 'c': 9 } }] }
+ */
+declare function updateWith<T extends object, R>(object: T, path: PropertyPath, updater: (oldValue: any) => any, customizer?: (value: any, key: string, object: T) => any): R;
+
+export { updateWith };
Index: node_modules/es-toolkit/dist/compat/object/updateWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/updateWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/updateWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isUnsafeProperty = require('../../_internal/isUnsafeProperty.js');
+const assignValue = require('../_internal/assignValue.js');
+const isIndex = require('../_internal/isIndex.js');
+const isKey = require('../_internal/isKey.js');
+const toKey = require('../_internal/toKey.js');
+const isObject = require('../predicate/isObject.js');
+const toPath = require('../util/toPath.js');
+
+function updateWith(obj, path, updater, customizer) {
+    if (obj == null && !isObject.isObject(obj)) {
+        return obj;
+    }
+    const resolvedPath = isKey.isKey(path, obj)
+        ? [path]
+        : Array.isArray(path)
+            ? path
+            : typeof path === 'string'
+                ? toPath.toPath(path)
+                : [path];
+    let current = obj;
+    for (let i = 0; i < resolvedPath.length && current != null; i++) {
+        const key = toKey.toKey(resolvedPath[i]);
+        if (isUnsafeProperty.isUnsafeProperty(key)) {
+            continue;
+        }
+        let newValue;
+        if (i === resolvedPath.length - 1) {
+            newValue = updater(current[key]);
+        }
+        else {
+            const objValue = current[key];
+            const customizerResult = customizer?.(objValue, key, obj);
+            newValue =
+                customizerResult !== undefined
+                    ? customizerResult
+                    : isObject.isObject(objValue)
+                        ? objValue
+                        : isIndex.isIndex(resolvedPath[i + 1])
+                            ? []
+                            : {};
+        }
+        assignValue.assignValue(current, key, newValue);
+        current = current[key];
+    }
+    return obj;
+}
+
+exports.updateWith = updateWith;
Index: node_modules/es-toolkit/dist/compat/object/updateWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/updateWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/updateWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+import { isUnsafeProperty } from '../../_internal/isUnsafeProperty.mjs';
+import { assignValue } from '../_internal/assignValue.mjs';
+import { isIndex } from '../_internal/isIndex.mjs';
+import { isKey } from '../_internal/isKey.mjs';
+import { toKey } from '../_internal/toKey.mjs';
+import { isObject } from '../predicate/isObject.mjs';
+import { toPath } from '../util/toPath.mjs';
+
+function updateWith(obj, path, updater, customizer) {
+    if (obj == null && !isObject(obj)) {
+        return obj;
+    }
+    const resolvedPath = isKey(path, obj)
+        ? [path]
+        : Array.isArray(path)
+            ? path
+            : typeof path === 'string'
+                ? toPath(path)
+                : [path];
+    let current = obj;
+    for (let i = 0; i < resolvedPath.length && current != null; i++) {
+        const key = toKey(resolvedPath[i]);
+        if (isUnsafeProperty(key)) {
+            continue;
+        }
+        let newValue;
+        if (i === resolvedPath.length - 1) {
+            newValue = updater(current[key]);
+        }
+        else {
+            const objValue = current[key];
+            const customizerResult = customizer?.(objValue, key, obj);
+            newValue =
+                customizerResult !== undefined
+                    ? customizerResult
+                    : isObject(objValue)
+                        ? objValue
+                        : isIndex(resolvedPath[i + 1])
+                            ? []
+                            : {};
+        }
+        assignValue(current, key, newValue);
+        current = current[key];
+    }
+    return obj;
+}
+
+export { updateWith };
Index: node_modules/es-toolkit/dist/compat/object/values.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/values.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/values.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+/**
+ * Creates an array of the own enumerable property values of `object`.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | ArrayLike<T> | null | undefined} object - The object to query.
+ * @returns {T[]} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * values(obj); // => [1, 2, 3]
+ */
+declare function values<T>(object: Record<string, T> | Record<number, T> | ArrayLike<T> | null | undefined): T[];
+/**
+ * Creates an array of the own enumerable property values of `object`.
+ *
+ * @template T
+ * @param {T | null | undefined} object - The object to query.
+ * @returns {Array<T[keyof T]>} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * values(obj); // => [1, 2, 3]
+ */
+declare function values<T extends object>(object: T | null | undefined): Array<T[keyof T]>;
+/**
+ * Creates an array of the own enumerable property values of `object`.
+ *
+ * @param {any} object - The object to query.
+ * @returns {any[]} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * values(obj); // => [1, 2, 3]
+ */
+declare function values(object: any): any[];
+
+export { values };
Index: node_modules/es-toolkit/dist/compat/object/values.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/values.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/values.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+/**
+ * Creates an array of the own enumerable property values of `object`.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | ArrayLike<T> | null | undefined} object - The object to query.
+ * @returns {T[]} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * values(obj); // => [1, 2, 3]
+ */
+declare function values<T>(object: Record<string, T> | Record<number, T> | ArrayLike<T> | null | undefined): T[];
+/**
+ * Creates an array of the own enumerable property values of `object`.
+ *
+ * @template T
+ * @param {T | null | undefined} object - The object to query.
+ * @returns {Array<T[keyof T]>} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * values(obj); // => [1, 2, 3]
+ */
+declare function values<T extends object>(object: T | null | undefined): Array<T[keyof T]>;
+/**
+ * Creates an array of the own enumerable property values of `object`.
+ *
+ * @param {any} object - The object to query.
+ * @returns {any[]} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * values(obj); // => [1, 2, 3]
+ */
+declare function values(object: any): any[];
+
+export { values };
Index: node_modules/es-toolkit/dist/compat/object/values.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/values.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/values.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function values(object) {
+    if (object == null) {
+        return [];
+    }
+    return Object.values(object);
+}
+
+exports.values = values;
Index: node_modules/es-toolkit/dist/compat/object/values.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/values.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/values.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function values(object) {
+    if (object == null) {
+        return [];
+    }
+    return Object.values(object);
+}
+
+export { values };
Index: node_modules/es-toolkit/dist/compat/object/valuesIn.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/valuesIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/valuesIn.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Retrieves the values from an object, including those inherited from its prototype.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | ArrayLike<T> | null | undefined} object - The object to query.
+ * @returns {T[]} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * valuesIn(obj); // => [1, 2, 3]
+ */
+declare function valuesIn<T>(object: Record<string, T> | Record<number, T> | ArrayLike<T> | null | undefined): T[];
+/**
+ * Retrieves the values from an object, including those inherited from its prototype.
+ *
+ * @template T
+ * @param {T | null | undefined} object - The object to query.
+ * @returns {Array<T[keyof T]>} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * valuesIn(obj); // => [1, 2, 3]
+ */
+declare function valuesIn<T extends object>(object: T | null | undefined): Array<T[keyof T]>;
+
+export { valuesIn };
Index: node_modules/es-toolkit/dist/compat/object/valuesIn.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/object/valuesIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/valuesIn.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Retrieves the values from an object, including those inherited from its prototype.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | ArrayLike<T> | null | undefined} object - The object to query.
+ * @returns {T[]} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * valuesIn(obj); // => [1, 2, 3]
+ */
+declare function valuesIn<T>(object: Record<string, T> | Record<number, T> | ArrayLike<T> | null | undefined): T[];
+/**
+ * Retrieves the values from an object, including those inherited from its prototype.
+ *
+ * @template T
+ * @param {T | null | undefined} object - The object to query.
+ * @returns {Array<T[keyof T]>} Returns an array of property values.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * valuesIn(obj); // => [1, 2, 3]
+ */
+declare function valuesIn<T extends object>(object: T | null | undefined): Array<T[keyof T]>;
+
+export { valuesIn };
Index: node_modules/es-toolkit/dist/compat/object/valuesIn.js
===================================================================
--- node_modules/es-toolkit/dist/compat/object/valuesIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/valuesIn.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keysIn = require('./keysIn.js');
+
+function valuesIn(object) {
+    const keys = keysIn.keysIn(object);
+    const result = new Array(keys.length);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        result[i] = object[key];
+    }
+    return result;
+}
+
+exports.valuesIn = valuesIn;
Index: node_modules/es-toolkit/dist/compat/object/valuesIn.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/object/valuesIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/object/valuesIn.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { keysIn } from './keysIn.mjs';
+
+function valuesIn(object) {
+    const keys = keysIn(object);
+    const result = new Array(keys.length);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        result[i] = object[key];
+    }
+    return result;
+}
+
+export { valuesIn };
Index: node_modules/es-toolkit/dist/compat/predicate/conforms.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/conforms.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/conforms.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import { ConformsPredicateObject } from '../_internal/ConformsPredicateObject.mjs';
+
+/**
+ * Creates a function that invokes the predicate properties of `source` with the corresponding property values of a given object, returning `true` if all predicates return truthy, else `false`.
+ *
+ * Note: The created function is equivalent to `conformsTo` with source partially applied.
+ *
+ * @param {Record<PropertyKey, (value: any) => boolean>} source The object of property predicates to conform to.
+ * @returns {(object: Record<PropertyKey, any>) => boolean} Returns the new spec function.
+ *
+ * @example
+ * const isPositive = (n) => n > 0;
+ * const isEven = (n) => n % 2 === 0;
+ * const predicates = { a: isPositive, b: isEven };
+ * const conform = conforms(predicates);
+ *
+ * console.log(conform({ a: 2, b: 4 })); // true
+ * console.log(conform({ a: -1, b: 4 })); // false
+ * console.log(conform({ a: 2, b: 3 })); // false
+ * console.log(conform({ a: 0, b: 2 })); // false
+ */
+declare function conforms<T>(source: ConformsPredicateObject<T>): (value: T) => boolean;
+
+export { conforms };
Index: node_modules/es-toolkit/dist/compat/predicate/conforms.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/conforms.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/conforms.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import { ConformsPredicateObject } from '../_internal/ConformsPredicateObject.js';
+
+/**
+ * Creates a function that invokes the predicate properties of `source` with the corresponding property values of a given object, returning `true` if all predicates return truthy, else `false`.
+ *
+ * Note: The created function is equivalent to `conformsTo` with source partially applied.
+ *
+ * @param {Record<PropertyKey, (value: any) => boolean>} source The object of property predicates to conform to.
+ * @returns {(object: Record<PropertyKey, any>) => boolean} Returns the new spec function.
+ *
+ * @example
+ * const isPositive = (n) => n > 0;
+ * const isEven = (n) => n % 2 === 0;
+ * const predicates = { a: isPositive, b: isEven };
+ * const conform = conforms(predicates);
+ *
+ * console.log(conform({ a: 2, b: 4 })); // true
+ * console.log(conform({ a: -1, b: 4 })); // false
+ * console.log(conform({ a: 2, b: 3 })); // false
+ * console.log(conform({ a: 0, b: 2 })); // false
+ */
+declare function conforms<T>(source: ConformsPredicateObject<T>): (value: T) => boolean;
+
+export { conforms };
Index: node_modules/es-toolkit/dist/compat/predicate/conforms.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/conforms.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/conforms.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const conformsTo = require('./conformsTo.js');
+const cloneDeep = require('../../object/cloneDeep.js');
+
+function conforms(source) {
+    source = cloneDeep.cloneDeep(source);
+    return function (object) {
+        return conformsTo.conformsTo(object, source);
+    };
+}
+
+exports.conforms = conforms;
Index: node_modules/es-toolkit/dist/compat/predicate/conforms.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/conforms.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/conforms.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { conformsTo } from './conformsTo.mjs';
+import { cloneDeep } from '../../object/cloneDeep.mjs';
+
+function conforms(source) {
+    source = cloneDeep(source);
+    return function (object) {
+        return conformsTo(object, source);
+    };
+}
+
+export { conforms };
Index: node_modules/es-toolkit/dist/compat/predicate/conformsTo.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/conformsTo.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/conformsTo.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+import { ConformsPredicateObject } from '../_internal/ConformsPredicateObject.mjs';
+
+/**
+ * Checks if `object` conforms to `source` by invoking the predicate properties of `source` with the corresponding property values of `object`.
+ *
+ * Note: This method is equivalent to `conforms` when source is partially applied.
+ *
+ * @template T - The type of the target object.
+ * @param {T} target The object to inspect.
+ * @param {ConformsPredicateObject<T>} source The object of property predicates to conform to.
+ * @returns {boolean} Returns `true` if `object` conforms, else `false`.
+ *
+ * @example
+ *
+ * const object = { 'a': 1, 'b': 2 };
+ * const source = {
+ *   'a': (n) => n > 0,
+ *   'b': (n) => n > 1
+ * };
+ *
+ * console.log(conformsTo(object, source)); // => true
+ *
+ * const source2 = {
+ *   'a': (n) => n > 1,
+ *   'b': (n) => n > 1
+ * };
+ *
+ * console.log(conformsTo(object, source2)); // => false
+ */
+declare function conformsTo<T>(target: T, source: ConformsPredicateObject<T>): boolean;
+
+export { conformsTo };
Index: node_modules/es-toolkit/dist/compat/predicate/conformsTo.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/conformsTo.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/conformsTo.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+import { ConformsPredicateObject } from '../_internal/ConformsPredicateObject.js';
+
+/**
+ * Checks if `object` conforms to `source` by invoking the predicate properties of `source` with the corresponding property values of `object`.
+ *
+ * Note: This method is equivalent to `conforms` when source is partially applied.
+ *
+ * @template T - The type of the target object.
+ * @param {T} target The object to inspect.
+ * @param {ConformsPredicateObject<T>} source The object of property predicates to conform to.
+ * @returns {boolean} Returns `true` if `object` conforms, else `false`.
+ *
+ * @example
+ *
+ * const object = { 'a': 1, 'b': 2 };
+ * const source = {
+ *   'a': (n) => n > 0,
+ *   'b': (n) => n > 1
+ * };
+ *
+ * console.log(conformsTo(object, source)); // => true
+ *
+ * const source2 = {
+ *   'a': (n) => n > 1,
+ *   'b': (n) => n > 1
+ * };
+ *
+ * console.log(conformsTo(object, source2)); // => false
+ */
+declare function conformsTo<T>(target: T, source: ConformsPredicateObject<T>): boolean;
+
+export { conformsTo };
Index: node_modules/es-toolkit/dist/compat/predicate/conformsTo.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/conformsTo.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/conformsTo.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function conformsTo(target, source) {
+    if (source == null) {
+        return true;
+    }
+    if (target == null) {
+        return Object.keys(source).length === 0;
+    }
+    const keys = Object.keys(source);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const predicate = source[key];
+        const value = target[key];
+        if (value === undefined && !(key in target)) {
+            return false;
+        }
+        if (typeof predicate === 'function' && !predicate(value)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+exports.conformsTo = conformsTo;
Index: node_modules/es-toolkit/dist/compat/predicate/conformsTo.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/conformsTo.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/conformsTo.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+function conformsTo(target, source) {
+    if (source == null) {
+        return true;
+    }
+    if (target == null) {
+        return Object.keys(source).length === 0;
+    }
+    const keys = Object.keys(source);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const predicate = source[key];
+        const value = target[key];
+        if (value === undefined && !(key in target)) {
+            return false;
+        }
+        if (typeof predicate === 'function' && !predicate(value)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+export { conformsTo };
Index: node_modules/es-toolkit/dist/compat/predicate/isArguments.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArguments.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArguments.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is an arguments object.
+ *
+ * This function tests whether the provided value is an arguments object or not.
+ * It returns `true` if the value is an arguments object, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an arguments object.
+ *
+ * @param {any} value - The value to test if it is an arguments object.
+ * @returns {value is IArguments} `true` if the value is an arguments, `false` otherwise.
+ *
+ * @example
+ * const args = (function() { return arguments; })();
+ * const strictArgs = (function() { 'use strict'; return arguments; })();
+ * const value = [1, 2, 3];
+ *
+ * console.log(isArguments(args)); // true
+ * console.log(isArguments(strictArgs)); // true
+ * console.log(isArguments(value)); // false
+ */
+declare function isArguments(value?: any): value is IArguments;
+
+export { isArguments };
Index: node_modules/es-toolkit/dist/compat/predicate/isArguments.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArguments.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArguments.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is an arguments object.
+ *
+ * This function tests whether the provided value is an arguments object or not.
+ * It returns `true` if the value is an arguments object, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an arguments object.
+ *
+ * @param {any} value - The value to test if it is an arguments object.
+ * @returns {value is IArguments} `true` if the value is an arguments, `false` otherwise.
+ *
+ * @example
+ * const args = (function() { return arguments; })();
+ * const strictArgs = (function() { 'use strict'; return arguments; })();
+ * const value = [1, 2, 3];
+ *
+ * console.log(isArguments(args)); // true
+ * console.log(isArguments(strictArgs)); // true
+ * console.log(isArguments(value)); // false
+ */
+declare function isArguments(value?: any): value is IArguments;
+
+export { isArguments };
Index: node_modules/es-toolkit/dist/compat/predicate/isArguments.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArguments.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArguments.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const getTag = require('../_internal/getTag.js');
+
+function isArguments(value) {
+    return value !== null && typeof value === 'object' && getTag.getTag(value) === '[object Arguments]';
+}
+
+exports.isArguments = isArguments;
Index: node_modules/es-toolkit/dist/compat/predicate/isArguments.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArguments.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArguments.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { getTag } from '../_internal/getTag.mjs';
+
+function isArguments(value) {
+    return value !== null && typeof value === 'object' && getTag(value) === '[object Arguments]';
+}
+
+export { isArguments };
Index: node_modules/es-toolkit/dist/compat/predicate/isArray.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Checks if the given value is an array.
+ *
+ * This function tests whether the provided value is an array or not.
+ * It returns `true` if the value is an array, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an array.
+ *
+ * @param {any} value - The value to test if it is an array.
+ * @returns {value is any[]} `true` if the value is an array, `false` otherwise.
+ *
+ * @example
+ * const value1 = [1, 2, 3];
+ * const value2 = 'abc';
+ * const value3 = () => {};
+ *
+ * console.log(isArray(value1)); // true
+ * console.log(isArray(value2)); // false
+ * console.log(isArray(value3)); // false
+ */
+declare function isArray(value?: any): value is any[];
+/**
+ * Checks if the given value is an array with generic type support.
+ *
+ * This function tests whether the provided value is an array or not.
+ * It returns `true` if the value is an array, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {any} value - The value to test if it is an array.
+ * @returns {value is any[]} `true` if the value is an array, `false` otherwise.
+ *
+ * @example
+ * const value1 = [1, 2, 3];
+ * const value2 = 'abc';
+ * const value3 = () => {};
+ *
+ * console.log(isArray<number>(value1)); // true
+ * console.log(isArray<string>(value2)); // false
+ * console.log(isArray<Function>(value3)); // false
+ */
+declare function isArray<T>(value?: any): value is any[];
+
+export { isArray };
Index: node_modules/es-toolkit/dist/compat/predicate/isArray.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Checks if the given value is an array.
+ *
+ * This function tests whether the provided value is an array or not.
+ * It returns `true` if the value is an array, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an array.
+ *
+ * @param {any} value - The value to test if it is an array.
+ * @returns {value is any[]} `true` if the value is an array, `false` otherwise.
+ *
+ * @example
+ * const value1 = [1, 2, 3];
+ * const value2 = 'abc';
+ * const value3 = () => {};
+ *
+ * console.log(isArray(value1)); // true
+ * console.log(isArray(value2)); // false
+ * console.log(isArray(value3)); // false
+ */
+declare function isArray(value?: any): value is any[];
+/**
+ * Checks if the given value is an array with generic type support.
+ *
+ * This function tests whether the provided value is an array or not.
+ * It returns `true` if the value is an array, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an array.
+ *
+ * @template T - The type of elements in the array.
+ * @param {any} value - The value to test if it is an array.
+ * @returns {value is any[]} `true` if the value is an array, `false` otherwise.
+ *
+ * @example
+ * const value1 = [1, 2, 3];
+ * const value2 = 'abc';
+ * const value3 = () => {};
+ *
+ * console.log(isArray<number>(value1)); // true
+ * console.log(isArray<string>(value2)); // false
+ * console.log(isArray<Function>(value3)); // false
+ */
+declare function isArray<T>(value?: any): value is any[];
+
+export { isArray };
Index: node_modules/es-toolkit/dist/compat/predicate/isArray.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isArray(value) {
+    return Array.isArray(value);
+}
+
+exports.isArray = isArray;
Index: node_modules/es-toolkit/dist/compat/predicate/isArray.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isArray(value) {
+    return Array.isArray(value);
+}
+
+export { isArray };
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `ArrayBuffer`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `ArrayBuffer`.
+ *
+ * @param {any} value The value to check if it is a `ArrayBuffer`.
+ * @returns {value is ArrayBuffer} Returns `true` if `value` is a `ArrayBuffer`, else `false`.
+ *
+ * @example
+ * const value1 = new ArrayBuffer();
+ * const value2 = new Array();
+ * const value3 = new Map();
+ *
+ * console.log(isArrayBuffer(value1)); // true
+ * console.log(isArrayBuffer(value2)); // false
+ * console.log(isArrayBuffer(value3)); // false
+ */
+declare function isArrayBuffer(value?: any): value is ArrayBuffer;
+
+export { isArrayBuffer };
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `ArrayBuffer`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `ArrayBuffer`.
+ *
+ * @param {any} value The value to check if it is a `ArrayBuffer`.
+ * @returns {value is ArrayBuffer} Returns `true` if `value` is a `ArrayBuffer`, else `false`.
+ *
+ * @example
+ * const value1 = new ArrayBuffer();
+ * const value2 = new Array();
+ * const value3 = new Map();
+ *
+ * console.log(isArrayBuffer(value1)); // true
+ * console.log(isArrayBuffer(value2)); // false
+ * console.log(isArrayBuffer(value3)); // false
+ */
+declare function isArrayBuffer(value?: any): value is ArrayBuffer;
+
+export { isArrayBuffer };
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayBuffer$1 = require('../../predicate/isArrayBuffer.js');
+
+function isArrayBuffer(value) {
+    return isArrayBuffer$1.isArrayBuffer(value);
+}
+
+exports.isArrayBuffer = isArrayBuffer;
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayBuffer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isArrayBuffer as isArrayBuffer$1 } from '../../predicate/isArrayBuffer.mjs';
+
+function isArrayBuffer(value) {
+    return isArrayBuffer$1(value);
+}
+
+export { isArrayBuffer };
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayLike.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayLike.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayLike.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Checks if `value` is array-like. This overload is for compatibility with lodash type checking.
+ *
+ * @param {T} t The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+declare function isArrayLike<T extends {
+    __lodashAnyHack: any;
+}>(t: T): boolean;
+/**
+ * Checks if `value` is array-like. Functions, null, and undefined are never array-like.
+ *
+ * @param {((...args: any[]) => any) | null | undefined} value The value to check.
+ * @returns {value is never} Returns `false` for functions, null, and undefined.
+ */
+declare function isArrayLike(value: ((...args: any[]) => any) | null | undefined): value is never;
+/**
+ * Checks if `value` is array-like.
+ *
+ * @param {any} value The value to check.
+ * @returns {value is { length: number }} Returns `true` if `value` is array-like, else `false`.
+ */
+declare function isArrayLike(value: any): value is {
+    length: number;
+};
+
+export { isArrayLike };
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayLike.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayLike.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayLike.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Checks if `value` is array-like. This overload is for compatibility with lodash type checking.
+ *
+ * @param {T} t The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+declare function isArrayLike<T extends {
+    __lodashAnyHack: any;
+}>(t: T): boolean;
+/**
+ * Checks if `value` is array-like. Functions, null, and undefined are never array-like.
+ *
+ * @param {((...args: any[]) => any) | null | undefined} value The value to check.
+ * @returns {value is never} Returns `false` for functions, null, and undefined.
+ */
+declare function isArrayLike(value: ((...args: any[]) => any) | null | undefined): value is never;
+/**
+ * Checks if `value` is array-like.
+ *
+ * @param {any} value The value to check.
+ * @returns {value is { length: number }} Returns `true` if `value` is array-like, else `false`.
+ */
+declare function isArrayLike(value: any): value is {
+    length: number;
+};
+
+export { isArrayLike };
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isLength = require('../../predicate/isLength.js');
+
+function isArrayLike(value) {
+    return value != null && typeof value !== 'function' && isLength.isLength(value.length);
+}
+
+exports.isArrayLike = isArrayLike;
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayLike.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayLike.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayLike.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isLength } from '../../predicate/isLength.mjs';
+
+function isArrayLike(value) {
+    return value != null && typeof value !== 'function' && isLength(value.length);
+}
+
+export { isArrayLike };
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+declare function isArrayLikeObject<T extends {
+    __lodashAnyHack: any;
+}>(value: T): boolean;
+declare function isArrayLikeObject(value: ((...args: any[]) => any) | Function | string | boolean | number | null | undefined): value is never;
+declare function isArrayLikeObject(value: any): value is object & {
+    length: number;
+};
+
+export { isArrayLikeObject };
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+declare function isArrayLikeObject<T extends {
+    __lodashAnyHack: any;
+}>(value: T): boolean;
+declare function isArrayLikeObject(value: ((...args: any[]) => any) | Function | string | boolean | number | null | undefined): value is never;
+declare function isArrayLikeObject(value: any): value is object & {
+    length: number;
+};
+
+export { isArrayLikeObject };
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLike = require('./isArrayLike.js');
+const isObjectLike = require('./isObjectLike.js');
+
+function isArrayLikeObject(value) {
+    return isObjectLike.isObjectLike(value) && isArrayLike.isArrayLike(value);
+}
+
+exports.isArrayLikeObject = isArrayLikeObject;
Index: node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { isArrayLike } from './isArrayLike.mjs';
+import { isObjectLike } from './isObjectLike.mjs';
+
+function isArrayLikeObject(value) {
+    return isObjectLike(value) && isArrayLike(value);
+}
+
+export { isArrayLikeObject };
Index: node_modules/es-toolkit/dist/compat/predicate/isBoolean.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isBoolean.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isBoolean.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Checks if the given value is boolean.
+ *
+ * This function tests whether the provided value is strictly `boolean`.
+ * It returns `true` if the value is `boolean`, and `false` otherwise.
+ *
+ *  This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `boolean`.
+ *
+ * @param {any} value - The Value to test if it is boolean.
+ * @returns {value is boolean} True if the value is boolean, false otherwise.
+ *
+ * @example
+ *
+ * const value1 = true;
+ * const value2 = 0;
+ * const value3 = 'abc';
+ *
+ * console.log(isBoolean(value1)); // true
+ * console.log(isBoolean(value2)); // false
+ * console.log(isBoolean(value3)); // false
+ *
+ */
+declare function isBoolean(value?: any): value is boolean;
+
+export { isBoolean };
Index: node_modules/es-toolkit/dist/compat/predicate/isBoolean.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isBoolean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isBoolean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Checks if the given value is boolean.
+ *
+ * This function tests whether the provided value is strictly `boolean`.
+ * It returns `true` if the value is `boolean`, and `false` otherwise.
+ *
+ *  This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `boolean`.
+ *
+ * @param {any} value - The Value to test if it is boolean.
+ * @returns {value is boolean} True if the value is boolean, false otherwise.
+ *
+ * @example
+ *
+ * const value1 = true;
+ * const value2 = 0;
+ * const value3 = 'abc';
+ *
+ * console.log(isBoolean(value1)); // true
+ * console.log(isBoolean(value2)); // false
+ * console.log(isBoolean(value3)); // false
+ *
+ */
+declare function isBoolean(value?: any): value is boolean;
+
+export { isBoolean };
Index: node_modules/es-toolkit/dist/compat/predicate/isBoolean.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isBoolean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isBoolean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isBoolean(value) {
+    return typeof value === 'boolean' || value instanceof Boolean;
+}
+
+exports.isBoolean = isBoolean;
Index: node_modules/es-toolkit/dist/compat/predicate/isBoolean.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isBoolean.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isBoolean.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isBoolean(value) {
+    return typeof value === 'boolean' || value instanceof Boolean;
+}
+
+export { isBoolean };
Index: node_modules/es-toolkit/dist/compat/predicate/isBuffer.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isBuffer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isBuffer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Checks if the given value is a Buffer instance.
+ *
+ * This function tests whether the provided value is an instance of Buffer.
+ * It returns `true` if the value is a Buffer, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Buffer`.
+ *
+ * @param {any} x - The value to check if it is a Buffer.
+ * @returns {boolean} Returns `true` if `x` is a Buffer, else `false`.
+ *
+ * @example
+ * const buffer = Buffer.from("test");
+ * console.log(isBuffer(buffer)); // true
+ *
+ * const notBuffer = "not a buffer";
+ * console.log(isBuffer(notBuffer)); // false
+ */
+declare function isBuffer(x?: any): boolean;
+
+export { isBuffer };
Index: node_modules/es-toolkit/dist/compat/predicate/isBuffer.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Checks if the given value is a Buffer instance.
+ *
+ * This function tests whether the provided value is an instance of Buffer.
+ * It returns `true` if the value is a Buffer, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Buffer`.
+ *
+ * @param {any} x - The value to check if it is a Buffer.
+ * @returns {boolean} Returns `true` if `x` is a Buffer, else `false`.
+ *
+ * @example
+ * const buffer = Buffer.from("test");
+ * console.log(isBuffer(buffer)); // true
+ *
+ * const notBuffer = "not a buffer";
+ * console.log(isBuffer(notBuffer)); // false
+ */
+declare function isBuffer(x?: any): boolean;
+
+export { isBuffer };
Index: node_modules/es-toolkit/dist/compat/predicate/isBuffer.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isBuffer$1 = require('../../predicate/isBuffer.js');
+
+function isBuffer(x) {
+    return isBuffer$1.isBuffer(x);
+}
+
+exports.isBuffer = isBuffer;
Index: node_modules/es-toolkit/dist/compat/predicate/isBuffer.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isBuffer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isBuffer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isBuffer as isBuffer$1 } from '../../predicate/isBuffer.mjs';
+
+function isBuffer(x) {
+    return isBuffer$1(x);
+}
+
+export { isBuffer };
Index: node_modules/es-toolkit/dist/compat/predicate/isDate.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isDate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isDate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a Date object.
+ *
+ * @param {any} value The value to check.
+ * @returns {value is Date} Returns `true` if `value` is a Date object, `false` otherwise.
+ *
+ * @example
+ * const value1 = new Date();
+ * const value2 = '2024-01-01';
+ *
+ * console.log(isDate(value1)); // true
+ * console.log(isDate(value2)); // false
+ */
+declare function isDate(value?: any): value is Date;
+
+export { isDate };
Index: node_modules/es-toolkit/dist/compat/predicate/isDate.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isDate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isDate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a Date object.
+ *
+ * @param {any} value The value to check.
+ * @returns {value is Date} Returns `true` if `value` is a Date object, `false` otherwise.
+ *
+ * @example
+ * const value1 = new Date();
+ * const value2 = '2024-01-01';
+ *
+ * console.log(isDate(value1)); // true
+ * console.log(isDate(value2)); // false
+ */
+declare function isDate(value?: any): value is Date;
+
+export { isDate };
Index: node_modules/es-toolkit/dist/compat/predicate/isDate.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isDate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isDate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isDate$1 = require('../../predicate/isDate.js');
+
+function isDate(value) {
+    return isDate$1.isDate(value);
+}
+
+exports.isDate = isDate;
Index: node_modules/es-toolkit/dist/compat/predicate/isDate.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isDate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isDate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isDate as isDate$1 } from '../../predicate/isDate.mjs';
+
+function isDate(value) {
+    return isDate$1(value);
+}
+
+export { isDate };
Index: node_modules/es-toolkit/dist/compat/predicate/isElement.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isElement.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isElement.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+/**
+ * Checks if `value` is likely a DOM element.
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
+ *
+ * @example
+ * console.log(isElement(document.body)); // true
+ * console.log(isElement('<body>')); // false
+ */
+declare function isElement(value?: any): boolean;
+
+export { isElement };
Index: node_modules/es-toolkit/dist/compat/predicate/isElement.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isElement.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isElement.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+/**
+ * Checks if `value` is likely a DOM element.
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
+ *
+ * @example
+ * console.log(isElement(document.body)); // true
+ * console.log(isElement('<body>')); // false
+ */
+declare function isElement(value?: any): boolean;
+
+export { isElement };
Index: node_modules/es-toolkit/dist/compat/predicate/isElement.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isElement.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isElement.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isObjectLike = require('./isObjectLike.js');
+const isPlainObject = require('./isPlainObject.js');
+
+function isElement(value) {
+    return isObjectLike.isObjectLike(value) && value.nodeType === 1 && !isPlainObject.isPlainObject(value);
+}
+
+exports.isElement = isElement;
Index: node_modules/es-toolkit/dist/compat/predicate/isElement.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isElement.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isElement.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { isObjectLike } from './isObjectLike.mjs';
+import { isPlainObject } from './isPlainObject.mjs';
+
+function isElement(value) {
+    return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
+}
+
+export { isElement };
Index: node_modules/es-toolkit/dist/compat/predicate/isEmpty.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isEmpty.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isEmpty.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { EmptyObjectOf } from '../_internal/EmptyObjectOf.mjs';
+
+declare function isEmpty<T extends {
+    __trapAny: any;
+}>(value?: T): boolean;
+declare function isEmpty(value: string): value is '';
+declare function isEmpty(value: Map<any, any> | Set<any> | ArrayLike<any> | null | undefined): boolean;
+declare function isEmpty(value: object): boolean;
+declare function isEmpty<T extends object>(value: T | null | undefined): value is EmptyObjectOf<T> | null | undefined;
+declare function isEmpty(value?: any): boolean;
+
+export { isEmpty };
Index: node_modules/es-toolkit/dist/compat/predicate/isEmpty.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isEmpty.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isEmpty.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { EmptyObjectOf } from '../_internal/EmptyObjectOf.js';
+
+declare function isEmpty<T extends {
+    __trapAny: any;
+}>(value?: T): boolean;
+declare function isEmpty(value: string): value is '';
+declare function isEmpty(value: Map<any, any> | Set<any> | ArrayLike<any> | null | undefined): boolean;
+declare function isEmpty(value: object): boolean;
+declare function isEmpty<T extends object>(value: T | null | undefined): value is EmptyObjectOf<T> | null | undefined;
+declare function isEmpty(value?: any): boolean;
+
+export { isEmpty };
Index: node_modules/es-toolkit/dist/compat/predicate/isEmpty.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isEmpty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isEmpty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArguments = require('./isArguments.js');
+const isArrayLike = require('./isArrayLike.js');
+const isTypedArray = require('./isTypedArray.js');
+const isPrototype = require('../_internal/isPrototype.js');
+
+function isEmpty(value) {
+    if (value == null) {
+        return true;
+    }
+    if (isArrayLike.isArrayLike(value)) {
+        if (typeof value.splice !== 'function' &&
+            typeof value !== 'string' &&
+            (typeof Buffer === 'undefined' || !Buffer.isBuffer(value)) &&
+            !isTypedArray.isTypedArray(value) &&
+            !isArguments.isArguments(value)) {
+            return false;
+        }
+        return value.length === 0;
+    }
+    if (typeof value === 'object') {
+        if (value instanceof Map || value instanceof Set) {
+            return value.size === 0;
+        }
+        const keys = Object.keys(value);
+        if (isPrototype.isPrototype(value)) {
+            return keys.filter(x => x !== 'constructor').length === 0;
+        }
+        return keys.length === 0;
+    }
+    return true;
+}
+
+exports.isEmpty = isEmpty;
Index: node_modules/es-toolkit/dist/compat/predicate/isEmpty.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isEmpty.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isEmpty.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { isArguments } from './isArguments.mjs';
+import { isArrayLike } from './isArrayLike.mjs';
+import { isTypedArray } from './isTypedArray.mjs';
+import { isPrototype } from '../_internal/isPrototype.mjs';
+
+function isEmpty(value) {
+    if (value == null) {
+        return true;
+    }
+    if (isArrayLike(value)) {
+        if (typeof value.splice !== 'function' &&
+            typeof value !== 'string' &&
+            (typeof Buffer === 'undefined' || !Buffer.isBuffer(value)) &&
+            !isTypedArray(value) &&
+            !isArguments(value)) {
+            return false;
+        }
+        return value.length === 0;
+    }
+    if (typeof value === 'object') {
+        if (value instanceof Map || value instanceof Set) {
+            return value.size === 0;
+        }
+        const keys = Object.keys(value);
+        if (isPrototype(value)) {
+            return keys.filter(x => x !== 'constructor').length === 0;
+        }
+        return keys.length === 0;
+    }
+    return true;
+}
+
+export { isEmpty };
Index: node_modules/es-toolkit/dist/compat/predicate/isEqualWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isEqualWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isEqualWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { IsEqualCustomizer } from '../_internal/IsEqualCustomizer.mjs';
+
+/**
+ * Compares two values for equality using a custom comparison function.
+ *
+ * The custom function allows for fine-tuned control over the comparison process. If it returns a boolean, that result determines the equality. If it returns undefined, the function falls back to the default equality comparison.
+ *
+ * This function also uses the custom equality function to compare values inside objects,
+ * arrays, maps, sets, and other complex structures, ensuring a deep comparison.
+ *
+ * This approach provides flexibility in handling complex comparisons while maintaining efficient default behavior for simpler cases.
+ *
+ * The custom comparison function can take up to six parameters:
+ * - `x`: The value from the first object `a`.
+ * - `y`: The value from the second object `b`.
+ * - `property`: The property key used to get `x` and `y`.
+ * - `xParent`: The parent of the first value `x`.
+ * - `yParent`: The parent of the second value `y`.
+ * - `stack`: An internal stack (Map) to handle circular references.
+ *
+ * @param {unknown} a - The first value to compare.
+ * @param {unknown} b - The second value to compare.
+ * @param {(x: any, y: any, property?: PropertyKey, xParent?: any, yParent?: any, stack?: Map<any, any>) => boolean | void} [areValuesEqual=noop] - A function to customize the comparison.
+ *   If it returns a boolean, that result will be used. If it returns undefined,
+ *   the default equality comparison will be used.
+ * @returns {boolean} `true` if the values are equal according to the customizer, otherwise `false`.
+ *
+ * @example
+ * const customizer = (a, b) => {
+ *   if (typeof a === 'string' && typeof b === 'string') {
+ *     return a.toLowerCase() === b.toLowerCase();
+ *   }
+ * };
+ * isEqualWith('Hello', 'hello', customizer); // true
+ * isEqualWith({ a: 'Hello' }, { a: 'hello' }, customizer); // true
+ * isEqualWith([1, 2, 3], [1, 2, 3], customizer); // true
+ */
+declare function isEqualWith(a: any, b: any, areValuesEqual?: IsEqualCustomizer): boolean;
+
+export { isEqualWith };
Index: node_modules/es-toolkit/dist/compat/predicate/isEqualWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isEqualWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isEqualWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { IsEqualCustomizer } from '../_internal/IsEqualCustomizer.js';
+
+/**
+ * Compares two values for equality using a custom comparison function.
+ *
+ * The custom function allows for fine-tuned control over the comparison process. If it returns a boolean, that result determines the equality. If it returns undefined, the function falls back to the default equality comparison.
+ *
+ * This function also uses the custom equality function to compare values inside objects,
+ * arrays, maps, sets, and other complex structures, ensuring a deep comparison.
+ *
+ * This approach provides flexibility in handling complex comparisons while maintaining efficient default behavior for simpler cases.
+ *
+ * The custom comparison function can take up to six parameters:
+ * - `x`: The value from the first object `a`.
+ * - `y`: The value from the second object `b`.
+ * - `property`: The property key used to get `x` and `y`.
+ * - `xParent`: The parent of the first value `x`.
+ * - `yParent`: The parent of the second value `y`.
+ * - `stack`: An internal stack (Map) to handle circular references.
+ *
+ * @param {unknown} a - The first value to compare.
+ * @param {unknown} b - The second value to compare.
+ * @param {(x: any, y: any, property?: PropertyKey, xParent?: any, yParent?: any, stack?: Map<any, any>) => boolean | void} [areValuesEqual=noop] - A function to customize the comparison.
+ *   If it returns a boolean, that result will be used. If it returns undefined,
+ *   the default equality comparison will be used.
+ * @returns {boolean} `true` if the values are equal according to the customizer, otherwise `false`.
+ *
+ * @example
+ * const customizer = (a, b) => {
+ *   if (typeof a === 'string' && typeof b === 'string') {
+ *     return a.toLowerCase() === b.toLowerCase();
+ *   }
+ * };
+ * isEqualWith('Hello', 'hello', customizer); // true
+ * isEqualWith({ a: 'Hello' }, { a: 'hello' }, customizer); // true
+ * isEqualWith([1, 2, 3], [1, 2, 3], customizer); // true
+ */
+declare function isEqualWith(a: any, b: any, areValuesEqual?: IsEqualCustomizer): boolean;
+
+export { isEqualWith };
Index: node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const after = require('../../function/after.js');
+const isEqualWith$1 = require('../../predicate/isEqualWith.js');
+
+function isEqualWith(a, b, areValuesEqual) {
+    if (typeof areValuesEqual !== 'function') {
+        areValuesEqual = () => undefined;
+    }
+    return isEqualWith$1.isEqualWith(a, b, (...args) => {
+        const result = areValuesEqual(...args);
+        if (result !== undefined) {
+            return Boolean(result);
+        }
+        if (a instanceof Map && b instanceof Map) {
+            return isEqualWith(Array.from(a), Array.from(b), after.after(2, areValuesEqual));
+        }
+        if (a instanceof Set && b instanceof Set) {
+            return isEqualWith(Array.from(a), Array.from(b), after.after(2, areValuesEqual));
+        }
+    });
+}
+
+exports.isEqualWith = isEqualWith;
Index: node_modules/es-toolkit/dist/compat/predicate/isEqualWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isEqualWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isEqualWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { after } from '../../function/after.mjs';
+import { isEqualWith as isEqualWith$1 } from '../../predicate/isEqualWith.mjs';
+
+function isEqualWith(a, b, areValuesEqual) {
+    if (typeof areValuesEqual !== 'function') {
+        areValuesEqual = () => undefined;
+    }
+    return isEqualWith$1(a, b, (...args) => {
+        const result = areValuesEqual(...args);
+        if (result !== undefined) {
+            return Boolean(result);
+        }
+        if (a instanceof Map && b instanceof Map) {
+            return isEqualWith(Array.from(a), Array.from(b), after(2, areValuesEqual));
+        }
+        if (a instanceof Set && b instanceof Set) {
+            return isEqualWith(Array.from(a), Array.from(b), after(2, areValuesEqual));
+        }
+    });
+}
+
+export { isEqualWith };
Index: node_modules/es-toolkit/dist/compat/predicate/isError.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isError.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isError.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is an Error object.
+ *
+ * @param {any} value The value to check.
+ * @returns {value is Error} Returns `true` if `value` is an Error object, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * console.log(isError(new Error())); // true
+ * console.log(isError('Error')); // false
+ * console.log(isError({ name: 'Error', message: '' })); // false
+ * ```
+ */
+declare function isError(value: any): value is Error;
+
+export { isError };
Index: node_modules/es-toolkit/dist/compat/predicate/isError.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is an Error object.
+ *
+ * @param {any} value The value to check.
+ * @returns {value is Error} Returns `true` if `value` is an Error object, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * console.log(isError(new Error())); // true
+ * console.log(isError('Error')); // false
+ * console.log(isError({ name: 'Error', message: '' })); // false
+ * ```
+ */
+declare function isError(value: any): value is Error;
+
+export { isError };
Index: node_modules/es-toolkit/dist/compat/predicate/isError.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const getTag = require('../_internal/getTag.js');
+
+function isError(value) {
+    return getTag.getTag(value) === '[object Error]';
+}
+
+exports.isError = isError;
Index: node_modules/es-toolkit/dist/compat/predicate/isError.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isError.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isError.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { getTag } from '../_internal/getTag.mjs';
+
+function isError(value) {
+    return getTag(value) === '[object Error]';
+}
+
+export { isError };
Index: node_modules/es-toolkit/dist/compat/predicate/isFinite.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isFinite.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isFinite.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if `value` is a finite number.
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a finite number, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * const value1 = 100;
+ * const value2 = Infinity;
+ * const value3 = '100';
+ *
+ * console.log(isFinite(value1)); // true
+ * console.log(isFinite(value2)); // false
+ * console.log(isFinite(value3)); // false
+ * ```
+ */
+declare function isFinite(value?: any): boolean;
+
+export { isFinite };
Index: node_modules/es-toolkit/dist/compat/predicate/isFinite.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isFinite.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isFinite.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if `value` is a finite number.
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a finite number, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * const value1 = 100;
+ * const value2 = Infinity;
+ * const value3 = '100';
+ *
+ * console.log(isFinite(value1)); // true
+ * console.log(isFinite(value2)); // false
+ * console.log(isFinite(value3)); // false
+ * ```
+ */
+declare function isFinite(value?: any): boolean;
+
+export { isFinite };
Index: node_modules/es-toolkit/dist/compat/predicate/isFinite.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isFinite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isFinite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isFinite(value) {
+    return Number.isFinite(value);
+}
+
+exports.isFinite = isFinite;
Index: node_modules/es-toolkit/dist/compat/predicate/isFinite.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isFinite.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isFinite.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isFinite(value) {
+    return Number.isFinite(value);
+}
+
+export { isFinite };
Index: node_modules/es-toolkit/dist/compat/predicate/isFunction.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isFunction.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isFunction.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a function.
+ *
+ * @param {any} value The value to check.
+ * @returns {value is (...args: any[]) => any} Returns `true` if `value` is a function, else `false`.
+ *
+ * @example
+ * isFunction(Array.prototype.slice); // true
+ * isFunction(async function () {}); // true
+ * isFunction(function* () {}); // true
+ * isFunction(Proxy); // true
+ * isFunction(Int8Array); // true
+ */
+declare function isFunction(value: any): value is (...args: any[]) => any;
+
+export { isFunction };
Index: node_modules/es-toolkit/dist/compat/predicate/isFunction.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isFunction.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isFunction.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a function.
+ *
+ * @param {any} value The value to check.
+ * @returns {value is (...args: any[]) => any} Returns `true` if `value` is a function, else `false`.
+ *
+ * @example
+ * isFunction(Array.prototype.slice); // true
+ * isFunction(async function () {}); // true
+ * isFunction(function* () {}); // true
+ * isFunction(Proxy); // true
+ * isFunction(Int8Array); // true
+ */
+declare function isFunction(value: any): value is (...args: any[]) => any;
+
+export { isFunction };
Index: node_modules/es-toolkit/dist/compat/predicate/isFunction.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isFunction.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isFunction.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isFunction(value) {
+    return typeof value === 'function';
+}
+
+exports.isFunction = isFunction;
Index: node_modules/es-toolkit/dist/compat/predicate/isFunction.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isFunction.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isFunction.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isFunction(value) {
+    return typeof value === 'function';
+}
+
+export { isFunction };
Index: node_modules/es-toolkit/dist/compat/predicate/isInteger.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isInteger.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isInteger.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if `value` is an integer.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `number`.
+ *
+ * @param {any} value - The value to check
+ * @returns {boolean} `true` if `value` is integer, otherwise `false`.
+ *
+ * @example
+ * isInteger(3); // Returns: true
+ * isInteger(Infinity); // Returns: false
+ * isInteger('3'); // Returns: false
+ * isInteger([]); // Returns: false
+ */
+declare function isInteger(value?: any): boolean;
+
+export { isInteger };
Index: node_modules/es-toolkit/dist/compat/predicate/isInteger.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if `value` is an integer.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `number`.
+ *
+ * @param {any} value - The value to check
+ * @returns {boolean} `true` if `value` is integer, otherwise `false`.
+ *
+ * @example
+ * isInteger(3); // Returns: true
+ * isInteger(Infinity); // Returns: false
+ * isInteger('3'); // Returns: false
+ * isInteger([]); // Returns: false
+ */
+declare function isInteger(value?: any): boolean;
+
+export { isInteger };
Index: node_modules/es-toolkit/dist/compat/predicate/isInteger.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isInteger(value) {
+    return Number.isInteger(value);
+}
+
+exports.isInteger = isInteger;
Index: node_modules/es-toolkit/dist/compat/predicate/isInteger.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isInteger.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isInteger.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isInteger(value) {
+    return Number.isInteger(value);
+}
+
+export { isInteger };
Index: node_modules/es-toolkit/dist/compat/predicate/isLength.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isLength.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isLength.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * Checks if a given value is a valid length.
+ *
+ * A valid length is of type `number`, is a non-negative integer, and is less than or equal to
+ * JavaScript's maximum safe integer (`Number.MAX_SAFE_INTEGER`).
+ * It returns `true` if the value is a valid length, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the
+ * argument to a valid length (`number`).
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ *
+ * @example
+ * isLength(0); // true
+ * isLength(42); // true
+ * isLength(-1); // false
+ * isLength(1.5); // false
+ * isLength(Number.MAX_SAFE_INTEGER); // true
+ * isLength(Number.MAX_SAFE_INTEGER + 1); // false
+ */
+declare function isLength(value?: any): boolean;
+
+export { isLength };
Index: node_modules/es-toolkit/dist/compat/predicate/isLength.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * Checks if a given value is a valid length.
+ *
+ * A valid length is of type `number`, is a non-negative integer, and is less than or equal to
+ * JavaScript's maximum safe integer (`Number.MAX_SAFE_INTEGER`).
+ * It returns `true` if the value is a valid length, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the
+ * argument to a valid length (`number`).
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ *
+ * @example
+ * isLength(0); // true
+ * isLength(42); // true
+ * isLength(-1); // false
+ * isLength(1.5); // false
+ * isLength(Number.MAX_SAFE_INTEGER); // true
+ * isLength(Number.MAX_SAFE_INTEGER + 1); // false
+ */
+declare function isLength(value?: any): boolean;
+
+export { isLength };
Index: node_modules/es-toolkit/dist/compat/predicate/isLength.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isLength(value) {
+    return Number.isSafeInteger(value) && value >= 0;
+}
+
+exports.isLength = isLength;
Index: node_modules/es-toolkit/dist/compat/predicate/isLength.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isLength.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isLength.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isLength(value) {
+    return Number.isSafeInteger(value) && value >= 0;
+}
+
+export { isLength };
Index: node_modules/es-toolkit/dist/compat/predicate/isMap.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Map`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Map`.
+ *
+ * @param {unknown} value The value to check if it is a `Map`.
+ * @returns {value is Map<any, any>} Returns `true` if `value` is a `Map`, else `false`.
+ *
+ * @example
+ * const value1 = new Map();
+ * const value2 = new Set();
+ * const value3 = new WeakMap();
+ *
+ * console.log(isMap(value1)); // true
+ * console.log(isMap(value2)); // false
+ * console.log(isMap(value3)); // false
+ */
+declare function isMap(value?: any): value is Map<any, any>;
+
+export { isMap };
Index: node_modules/es-toolkit/dist/compat/predicate/isMap.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Map`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Map`.
+ *
+ * @param {unknown} value The value to check if it is a `Map`.
+ * @returns {value is Map<any, any>} Returns `true` if `value` is a `Map`, else `false`.
+ *
+ * @example
+ * const value1 = new Map();
+ * const value2 = new Set();
+ * const value3 = new WeakMap();
+ *
+ * console.log(isMap(value1)); // true
+ * console.log(isMap(value2)); // false
+ * console.log(isMap(value3)); // false
+ */
+declare function isMap(value?: any): value is Map<any, any>;
+
+export { isMap };
Index: node_modules/es-toolkit/dist/compat/predicate/isMap.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isMap$1 = require('../../predicate/isMap.js');
+
+function isMap(value) {
+    return isMap$1.isMap(value);
+}
+
+exports.isMap = isMap;
Index: node_modules/es-toolkit/dist/compat/predicate/isMap.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isMap as isMap$1 } from '../../predicate/isMap.mjs';
+
+function isMap(value) {
+    return isMap$1(value);
+}
+
+export { isMap };
Index: node_modules/es-toolkit/dist/compat/predicate/isMatch.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMatch.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMatch.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Checks if the target matches the source by comparing their structures and values.
+ * This function supports deep comparison for objects, arrays, maps, and sets.
+ *
+ * @param {object} target - The target value to match against.
+ * @param {object} source - The source value to match with.
+ * @returns {boolean} - Returns `true` if the target matches the source, otherwise `false`.
+ *
+ * @example
+ * // Basic usage
+ * isMatch({ a: 1, b: 2 }, { a: 1 }); // true
+ *
+ * @example
+ * // Matching arrays
+ * isMatch([1, 2, 3], [1, 2, 3]); // true
+ *
+ * @example
+ * // Matching maps
+ * const targetMap = new Map([['key1', 'value1'], ['key2', 'value2']]);
+ * const sourceMap = new Map([['key1', 'value1']]);
+ * isMatch(targetMap, sourceMap); // true
+ *
+ * @example
+ * // Matching sets
+ * const targetSet = new Set([1, 2, 3]);
+ * const sourceSet = new Set([1, 2]);
+ * isMatch(targetSet, sourceSet); // true
+ */
+declare function isMatch(target: object, source: object): boolean;
+
+export { isMatch };
Index: node_modules/es-toolkit/dist/compat/predicate/isMatch.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMatch.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMatch.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Checks if the target matches the source by comparing their structures and values.
+ * This function supports deep comparison for objects, arrays, maps, and sets.
+ *
+ * @param {object} target - The target value to match against.
+ * @param {object} source - The source value to match with.
+ * @returns {boolean} - Returns `true` if the target matches the source, otherwise `false`.
+ *
+ * @example
+ * // Basic usage
+ * isMatch({ a: 1, b: 2 }, { a: 1 }); // true
+ *
+ * @example
+ * // Matching arrays
+ * isMatch([1, 2, 3], [1, 2, 3]); // true
+ *
+ * @example
+ * // Matching maps
+ * const targetMap = new Map([['key1', 'value1'], ['key2', 'value2']]);
+ * const sourceMap = new Map([['key1', 'value1']]);
+ * isMatch(targetMap, sourceMap); // true
+ *
+ * @example
+ * // Matching sets
+ * const targetSet = new Set([1, 2, 3]);
+ * const sourceSet = new Set([1, 2]);
+ * isMatch(targetSet, sourceSet); // true
+ */
+declare function isMatch(target: object, source: object): boolean;
+
+export { isMatch };
Index: node_modules/es-toolkit/dist/compat/predicate/isMatch.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMatch.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMatch.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isMatchWith = require('./isMatchWith.js');
+
+function isMatch(target, source) {
+    return isMatchWith.isMatchWith(target, source, () => undefined);
+}
+
+exports.isMatch = isMatch;
Index: node_modules/es-toolkit/dist/compat/predicate/isMatch.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMatch.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMatch.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isMatchWith } from './isMatchWith.mjs';
+
+function isMatch(target, source) {
+    return isMatchWith(target, source, () => undefined);
+}
+
+export { isMatch };
Index: node_modules/es-toolkit/dist/compat/predicate/isMatchWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMatchWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMatchWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import { IsMatchWithCustomizer } from '../_internal/IsMatchWithCustomizer.mjs';
+
+/**
+ * Performs a deep comparison between a target value and a source pattern to determine if they match,
+ * using a custom comparison function for fine-grained control over the matching logic.
+ *
+ * @param {object} target - The value to be tested for matching
+ * @param {object} source - The pattern/template to match against
+ * @param {IsMatchWithCustomizer} compare - Custom comparison function for fine-grained control
+ * @returns {boolean} `true` if the target matches the source pattern, `false` otherwise
+ *
+ * @example
+ * // Basic matching with custom comparator
+ * const caseInsensitiveCompare = (objVal, srcVal) => {
+ *   if (typeof objVal === 'string' && typeof srcVal === 'string') {
+ *     return objVal.toLowerCase() === srcVal.toLowerCase();
+ *   }
+ *   return undefined;
+ * };
+ *
+ * isMatchWith(
+ *   { name: 'JOHN', age: 30 },
+ *   { name: 'john' },
+ *   caseInsensitiveCompare
+ * ); // true
+ */
+declare function isMatchWith(target: object, source: object, compare: IsMatchWithCustomizer): boolean;
+
+export { isMatchWith };
Index: node_modules/es-toolkit/dist/compat/predicate/isMatchWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMatchWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMatchWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import { IsMatchWithCustomizer } from '../_internal/IsMatchWithCustomizer.js';
+
+/**
+ * Performs a deep comparison between a target value and a source pattern to determine if they match,
+ * using a custom comparison function for fine-grained control over the matching logic.
+ *
+ * @param {object} target - The value to be tested for matching
+ * @param {object} source - The pattern/template to match against
+ * @param {IsMatchWithCustomizer} compare - Custom comparison function for fine-grained control
+ * @returns {boolean} `true` if the target matches the source pattern, `false` otherwise
+ *
+ * @example
+ * // Basic matching with custom comparator
+ * const caseInsensitiveCompare = (objVal, srcVal) => {
+ *   if (typeof objVal === 'string' && typeof srcVal === 'string') {
+ *     return objVal.toLowerCase() === srcVal.toLowerCase();
+ *   }
+ *   return undefined;
+ * };
+ *
+ * isMatchWith(
+ *   { name: 'JOHN', age: 30 },
+ *   { name: 'john' },
+ *   caseInsensitiveCompare
+ * ); // true
+ */
+declare function isMatchWith(target: object, source: object, compare: IsMatchWithCustomizer): boolean;
+
+export { isMatchWith };
Index: node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,159 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isMatch = require('./isMatch.js');
+const isObject = require('./isObject.js');
+const isPrimitive = require('../../predicate/isPrimitive.js');
+const eq = require('../util/eq.js');
+
+function isMatchWith(target, source, compare) {
+    if (typeof compare !== 'function') {
+        return isMatch.isMatch(target, source);
+    }
+    return isMatchWithInternal(target, source, function doesMatch(objValue, srcValue, key, object, source, stack) {
+        const isEqual = compare(objValue, srcValue, key, object, source, stack);
+        if (isEqual !== undefined) {
+            return Boolean(isEqual);
+        }
+        return isMatchWithInternal(objValue, srcValue, doesMatch, stack);
+    }, new Map());
+}
+function isMatchWithInternal(target, source, compare, stack) {
+    if (source === target) {
+        return true;
+    }
+    switch (typeof source) {
+        case 'object': {
+            return isObjectMatch(target, source, compare, stack);
+        }
+        case 'function': {
+            const sourceKeys = Object.keys(source);
+            if (sourceKeys.length > 0) {
+                return isMatchWithInternal(target, { ...source }, compare, stack);
+            }
+            return eq.eq(target, source);
+        }
+        default: {
+            if (!isObject.isObject(target)) {
+                return eq.eq(target, source);
+            }
+            if (typeof source === 'string') {
+                return source === '';
+            }
+            return true;
+        }
+    }
+}
+function isObjectMatch(target, source, compare, stack) {
+    if (source == null) {
+        return true;
+    }
+    if (Array.isArray(source)) {
+        return isArrayMatch(target, source, compare, stack);
+    }
+    if (source instanceof Map) {
+        return isMapMatch(target, source, compare, stack);
+    }
+    if (source instanceof Set) {
+        return isSetMatch(target, source, compare, stack);
+    }
+    const keys = Object.keys(source);
+    if (target == null) {
+        return keys.length === 0;
+    }
+    if (keys.length === 0) {
+        return true;
+    }
+    if (stack && stack.has(source)) {
+        return stack.get(source) === target;
+    }
+    if (stack) {
+        stack.set(source, target);
+    }
+    try {
+        for (let i = 0; i < keys.length; i++) {
+            const key = keys[i];
+            if (!isPrimitive.isPrimitive(target) && !(key in target)) {
+                return false;
+            }
+            if (source[key] === undefined && target[key] !== undefined) {
+                return false;
+            }
+            if (source[key] === null && target[key] !== null) {
+                return false;
+            }
+            const isEqual = compare(target[key], source[key], key, target, source, stack);
+            if (!isEqual) {
+                return false;
+            }
+        }
+        return true;
+    }
+    finally {
+        if (stack) {
+            stack.delete(source);
+        }
+    }
+}
+function isMapMatch(target, source, compare, stack) {
+    if (source.size === 0) {
+        return true;
+    }
+    if (!(target instanceof Map)) {
+        return false;
+    }
+    for (const [key, sourceValue] of source.entries()) {
+        const targetValue = target.get(key);
+        const isEqual = compare(targetValue, sourceValue, key, target, source, stack);
+        if (isEqual === false) {
+            return false;
+        }
+    }
+    return true;
+}
+function isArrayMatch(target, source, compare, stack) {
+    if (source.length === 0) {
+        return true;
+    }
+    if (!Array.isArray(target)) {
+        return false;
+    }
+    const countedIndex = new Set();
+    for (let i = 0; i < source.length; i++) {
+        const sourceItem = source[i];
+        let found = false;
+        for (let j = 0; j < target.length; j++) {
+            if (countedIndex.has(j)) {
+                continue;
+            }
+            const targetItem = target[j];
+            let matches = false;
+            const isEqual = compare(targetItem, sourceItem, i, target, source, stack);
+            if (isEqual) {
+                matches = true;
+            }
+            if (matches) {
+                countedIndex.add(j);
+                found = true;
+                break;
+            }
+        }
+        if (!found) {
+            return false;
+        }
+    }
+    return true;
+}
+function isSetMatch(target, source, compare, stack) {
+    if (source.size === 0) {
+        return true;
+    }
+    if (!(target instanceof Set)) {
+        return false;
+    }
+    return isArrayMatch([...target], [...source], compare, stack);
+}
+
+exports.isMatchWith = isMatchWith;
+exports.isSetMatch = isSetMatch;
Index: node_modules/es-toolkit/dist/compat/predicate/isMatchWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isMatchWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isMatchWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,154 @@
+import { isMatch } from './isMatch.mjs';
+import { isObject } from './isObject.mjs';
+import { isPrimitive } from '../../predicate/isPrimitive.mjs';
+import { eq } from '../util/eq.mjs';
+
+function isMatchWith(target, source, compare) {
+    if (typeof compare !== 'function') {
+        return isMatch(target, source);
+    }
+    return isMatchWithInternal(target, source, function doesMatch(objValue, srcValue, key, object, source, stack) {
+        const isEqual = compare(objValue, srcValue, key, object, source, stack);
+        if (isEqual !== undefined) {
+            return Boolean(isEqual);
+        }
+        return isMatchWithInternal(objValue, srcValue, doesMatch, stack);
+    }, new Map());
+}
+function isMatchWithInternal(target, source, compare, stack) {
+    if (source === target) {
+        return true;
+    }
+    switch (typeof source) {
+        case 'object': {
+            return isObjectMatch(target, source, compare, stack);
+        }
+        case 'function': {
+            const sourceKeys = Object.keys(source);
+            if (sourceKeys.length > 0) {
+                return isMatchWithInternal(target, { ...source }, compare, stack);
+            }
+            return eq(target, source);
+        }
+        default: {
+            if (!isObject(target)) {
+                return eq(target, source);
+            }
+            if (typeof source === 'string') {
+                return source === '';
+            }
+            return true;
+        }
+    }
+}
+function isObjectMatch(target, source, compare, stack) {
+    if (source == null) {
+        return true;
+    }
+    if (Array.isArray(source)) {
+        return isArrayMatch(target, source, compare, stack);
+    }
+    if (source instanceof Map) {
+        return isMapMatch(target, source, compare, stack);
+    }
+    if (source instanceof Set) {
+        return isSetMatch(target, source, compare, stack);
+    }
+    const keys = Object.keys(source);
+    if (target == null) {
+        return keys.length === 0;
+    }
+    if (keys.length === 0) {
+        return true;
+    }
+    if (stack && stack.has(source)) {
+        return stack.get(source) === target;
+    }
+    if (stack) {
+        stack.set(source, target);
+    }
+    try {
+        for (let i = 0; i < keys.length; i++) {
+            const key = keys[i];
+            if (!isPrimitive(target) && !(key in target)) {
+                return false;
+            }
+            if (source[key] === undefined && target[key] !== undefined) {
+                return false;
+            }
+            if (source[key] === null && target[key] !== null) {
+                return false;
+            }
+            const isEqual = compare(target[key], source[key], key, target, source, stack);
+            if (!isEqual) {
+                return false;
+            }
+        }
+        return true;
+    }
+    finally {
+        if (stack) {
+            stack.delete(source);
+        }
+    }
+}
+function isMapMatch(target, source, compare, stack) {
+    if (source.size === 0) {
+        return true;
+    }
+    if (!(target instanceof Map)) {
+        return false;
+    }
+    for (const [key, sourceValue] of source.entries()) {
+        const targetValue = target.get(key);
+        const isEqual = compare(targetValue, sourceValue, key, target, source, stack);
+        if (isEqual === false) {
+            return false;
+        }
+    }
+    return true;
+}
+function isArrayMatch(target, source, compare, stack) {
+    if (source.length === 0) {
+        return true;
+    }
+    if (!Array.isArray(target)) {
+        return false;
+    }
+    const countedIndex = new Set();
+    for (let i = 0; i < source.length; i++) {
+        const sourceItem = source[i];
+        let found = false;
+        for (let j = 0; j < target.length; j++) {
+            if (countedIndex.has(j)) {
+                continue;
+            }
+            const targetItem = target[j];
+            let matches = false;
+            const isEqual = compare(targetItem, sourceItem, i, target, source, stack);
+            if (isEqual) {
+                matches = true;
+            }
+            if (matches) {
+                countedIndex.add(j);
+                found = true;
+                break;
+            }
+        }
+        if (!found) {
+            return false;
+        }
+    }
+    return true;
+}
+function isSetMatch(target, source, compare, stack) {
+    if (source.size === 0) {
+        return true;
+    }
+    if (!(target instanceof Set)) {
+        return false;
+    }
+    return isArrayMatch([...target], [...source], compare, stack);
+}
+
+export { isMatchWith, isSetMatch };
Index: node_modules/es-toolkit/dist/compat/predicate/isNaN.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNaN.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNaN.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if the value is NaN.
+ *
+ * @param {any} value - The value to check.
+ * @returns {boolean} `true` if the value is NaN, `false` otherwise.
+ *
+ * @example
+ * isNaN(NaN); // true
+ * isNaN(0); // false
+ * isNaN('NaN'); // false
+ * isNaN(undefined); // false
+ */
+declare function isNaN(value?: any): boolean;
+
+export { isNaN };
Index: node_modules/es-toolkit/dist/compat/predicate/isNaN.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNaN.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNaN.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if the value is NaN.
+ *
+ * @param {any} value - The value to check.
+ * @returns {boolean} `true` if the value is NaN, `false` otherwise.
+ *
+ * @example
+ * isNaN(NaN); // true
+ * isNaN(0); // false
+ * isNaN('NaN'); // false
+ * isNaN(undefined); // false
+ */
+declare function isNaN(value?: any): boolean;
+
+export { isNaN };
Index: node_modules/es-toolkit/dist/compat/predicate/isNaN.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNaN.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNaN.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isNaN(value) {
+    return Number.isNaN(value);
+}
+
+exports.isNaN = isNaN;
Index: node_modules/es-toolkit/dist/compat/predicate/isNaN.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNaN.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNaN.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isNaN(value) {
+    return Number.isNaN(value);
+}
+
+export { isNaN };
Index: node_modules/es-toolkit/dist/compat/predicate/isNative.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNative.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNative.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Checks if a given value is a native function.
+ *
+ * This function tests whether the provided value is a native function implemented by the JavaScript engine.
+ * It returns `true` if the value is a native function, and `false` otherwise.
+ *
+ * @param {any} value - The value to test for native function.
+ * @returns {value is (...args: any[]) => any} `true` if the value is a native function, `false` otherwise.
+ *
+ * @example
+ * const value1 = Array.prototype.push;
+ * const value2 = () => {};
+ * const result1 = isNative(value1); // true
+ * const result2 = isNative(value2); // false
+ */
+declare function isNative(value: any): value is (...args: any[]) => any;
+
+export { isNative };
Index: node_modules/es-toolkit/dist/compat/predicate/isNative.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNative.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNative.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Checks if a given value is a native function.
+ *
+ * This function tests whether the provided value is a native function implemented by the JavaScript engine.
+ * It returns `true` if the value is a native function, and `false` otherwise.
+ *
+ * @param {any} value - The value to test for native function.
+ * @returns {value is (...args: any[]) => any} `true` if the value is a native function, `false` otherwise.
+ *
+ * @example
+ * const value1 = Array.prototype.push;
+ * const value2 = () => {};
+ * const result1 = isNative(value1); // true
+ * const result2 = isNative(value2); // false
+ */
+declare function isNative(value: any): value is (...args: any[]) => any;
+
+export { isNative };
Index: node_modules/es-toolkit/dist/compat/predicate/isNative.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNative.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNative.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const functionToString = Function.prototype.toString;
+const REGEXP_SYNTAX_CHARS = /[\\^$.*+?()[\]{}|]/g;
+const IS_NATIVE_FUNCTION_REGEXP = RegExp(`^${functionToString
+    .call(Object.prototype.hasOwnProperty)
+    .replace(REGEXP_SYNTAX_CHARS, '\\$&')
+    .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?')}$`);
+function isNative(value) {
+    if (typeof value !== 'function') {
+        return false;
+    }
+    if (globalThis?.['__core-js_shared__'] != null) {
+        throw new Error('Unsupported core-js use. Try https://npms.io/search?q=ponyfill.');
+    }
+    return IS_NATIVE_FUNCTION_REGEXP.test(functionToString.call(value));
+}
+
+exports.isNative = isNative;
Index: node_modules/es-toolkit/dist/compat/predicate/isNative.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNative.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNative.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+const functionToString = Function.prototype.toString;
+const REGEXP_SYNTAX_CHARS = /[\\^$.*+?()[\]{}|]/g;
+const IS_NATIVE_FUNCTION_REGEXP = RegExp(`^${functionToString
+    .call(Object.prototype.hasOwnProperty)
+    .replace(REGEXP_SYNTAX_CHARS, '\\$&')
+    .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?')}$`);
+function isNative(value) {
+    if (typeof value !== 'function') {
+        return false;
+    }
+    if (globalThis?.['__core-js_shared__'] != null) {
+        throw new Error('Unsupported core-js use. Try https://npms.io/search?q=ponyfill.');
+    }
+    return IS_NATIVE_FUNCTION_REGEXP.test(functionToString.call(value));
+}
+
+export { isNative };
Index: node_modules/es-toolkit/dist/compat/predicate/isNil.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNil.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNil.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Checks if a given value is null or undefined.
+ *
+ * This function tests whether the provided value is either `null` or `undefined`.
+ * It returns `true` if the value is `null` or `undefined`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `null` or `undefined`.
+ *
+ * @param {any} x - The value to test for null or undefined.
+ * @returns {x is null | undefined} `true` if the value is null or undefined, `false` otherwise.
+ *
+ * @example
+ * const value1 = null;
+ * const value2 = undefined;
+ * const value3 = 42;
+ * const result1 = isNil(value1); // true
+ * const result2 = isNil(value2); // true
+ * const result3 = isNil(value3); // false
+ */
+declare function isNil(x: any): x is null | undefined;
+
+export { isNil };
Index: node_modules/es-toolkit/dist/compat/predicate/isNil.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Checks if a given value is null or undefined.
+ *
+ * This function tests whether the provided value is either `null` or `undefined`.
+ * It returns `true` if the value is `null` or `undefined`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `null` or `undefined`.
+ *
+ * @param {any} x - The value to test for null or undefined.
+ * @returns {x is null | undefined} `true` if the value is null or undefined, `false` otherwise.
+ *
+ * @example
+ * const value1 = null;
+ * const value2 = undefined;
+ * const value3 = 42;
+ * const result1 = isNil(value1); // true
+ * const result2 = isNil(value2); // true
+ * const result3 = isNil(value3); // false
+ */
+declare function isNil(x: any): x is null | undefined;
+
+export { isNil };
Index: node_modules/es-toolkit/dist/compat/predicate/isNil.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isNil(x) {
+    return x == null;
+}
+
+exports.isNil = isNil;
Index: node_modules/es-toolkit/dist/compat/predicate/isNil.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNil.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNil.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isNil(x) {
+    return x == null;
+}
+
+export { isNil };
Index: node_modules/es-toolkit/dist/compat/predicate/isNull.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNull.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNull.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Checks if `value` is `null`.
+ *
+ * @param {any} value - The value to check.
+ * @returns {value is null} Returns `true` if `value` is `null`, else `false`.
+ *
+ * @example
+ * isNull(null); // true
+ * isNull(undefined); // false
+ * isNull(0); // false
+ */
+declare function isNull(value: any): value is null;
+
+export { isNull };
Index: node_modules/es-toolkit/dist/compat/predicate/isNull.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Checks if `value` is `null`.
+ *
+ * @param {any} value - The value to check.
+ * @returns {value is null} Returns `true` if `value` is `null`, else `false`.
+ *
+ * @example
+ * isNull(null); // true
+ * isNull(undefined); // false
+ * isNull(0); // false
+ */
+declare function isNull(value: any): value is null;
+
+export { isNull };
Index: node_modules/es-toolkit/dist/compat/predicate/isNull.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isNull(value) {
+    return value === null;
+}
+
+exports.isNull = isNull;
Index: node_modules/es-toolkit/dist/compat/predicate/isNull.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNull.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNull.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isNull(value) {
+    return value === null;
+}
+
+export { isNull };
Index: node_modules/es-toolkit/dist/compat/predicate/isNumber.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNumber.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNumber.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is a number.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `number`.
+ *
+ * @param {any} value The value to check if it is a number.
+ * @returns {value is number} Returns `true` if `value` is a number, else `false`.
+ *
+ * @example
+ * const value1 = 123;
+ * const value2 = 'abc';
+ * const value3 = true;
+ *
+ * console.log(isNumber(value1)); // true
+ * console.log(isNumber(value2)); // false
+ * console.log(isNumber(value3)); // false
+ */
+declare function isNumber(value?: any): value is number;
+
+export { isNumber };
Index: node_modules/es-toolkit/dist/compat/predicate/isNumber.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is a number.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `number`.
+ *
+ * @param {any} value The value to check if it is a number.
+ * @returns {value is number} Returns `true` if `value` is a number, else `false`.
+ *
+ * @example
+ * const value1 = 123;
+ * const value2 = 'abc';
+ * const value3 = true;
+ *
+ * console.log(isNumber(value1)); // true
+ * console.log(isNumber(value2)); // false
+ * console.log(isNumber(value3)); // false
+ */
+declare function isNumber(value?: any): value is number;
+
+export { isNumber };
Index: node_modules/es-toolkit/dist/compat/predicate/isNumber.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isNumber(value) {
+    return typeof value === 'number' || value instanceof Number;
+}
+
+exports.isNumber = isNumber;
Index: node_modules/es-toolkit/dist/compat/predicate/isNumber.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isNumber.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isNumber.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isNumber(value) {
+    return typeof value === 'number' || value instanceof Number;
+}
+
+export { isNumber };
Index: node_modules/es-toolkit/dist/compat/predicate/isObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Checks if the given value is an object. An object is a value that is
+ * not a primitive type (string, number, boolean, symbol, null, or undefined).
+ *
+ * This function tests whether the provided value is an object or not.
+ * It returns `true` if the value is an object, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an object value.
+ *
+ * @param {any} value - The value to check if it is an object.
+ * @returns {value is object} `true` if the value is an object, `false` otherwise.
+ *
+ * @example
+ * const value1 = {};
+ * const value2 = [1, 2, 3];
+ * const value3 = () => {};
+ * const value4 = null;
+ *
+ * console.log(isObject(value1)); // true
+ * console.log(isObject(value2)); // true
+ * console.log(isObject(value3)); // true
+ * console.log(isObject(value4)); // false
+ */
+declare function isObject(value?: any): value is object;
+
+export { isObject };
Index: node_modules/es-toolkit/dist/compat/predicate/isObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Checks if the given value is an object. An object is a value that is
+ * not a primitive type (string, number, boolean, symbol, null, or undefined).
+ *
+ * This function tests whether the provided value is an object or not.
+ * It returns `true` if the value is an object, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an object value.
+ *
+ * @param {any} value - The value to check if it is an object.
+ * @returns {value is object} `true` if the value is an object, `false` otherwise.
+ *
+ * @example
+ * const value1 = {};
+ * const value2 = [1, 2, 3];
+ * const value3 = () => {};
+ * const value4 = null;
+ *
+ * console.log(isObject(value1)); // true
+ * console.log(isObject(value2)); // true
+ * console.log(isObject(value3)); // true
+ * console.log(isObject(value4)); // false
+ */
+declare function isObject(value?: any): value is object;
+
+export { isObject };
Index: node_modules/es-toolkit/dist/compat/predicate/isObject.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isObject(value) {
+    return value !== null && (typeof value === 'object' || typeof value === 'function');
+}
+
+exports.isObject = isObject;
Index: node_modules/es-toolkit/dist/compat/predicate/isObject.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isObject(value) {
+    return value !== null && (typeof value === 'object' || typeof value === 'function');
+}
+
+export { isObject };
Index: node_modules/es-toolkit/dist/compat/predicate/isObjectLike.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isObjectLike.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isObjectLike.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Checks if the given value is object-like.
+ *
+ * A value is object-like if its type is object and it is not null.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an object-like value.
+ *
+ * @param {any} value - The value to test if it is an object-like.
+ * @returns {boolean} `true` if the value is an object-like, `false` otherwise.
+ *
+ * @example
+ * const value1 = { a: 1 };
+ * const value2 = [1, 2, 3];
+ * const value3 = 'abc';
+ * const value4 = () => {};
+ * const value5 = null;
+ *
+ * console.log(isObjectLike(value1)); // true
+ * console.log(isObjectLike(value2)); // true
+ * console.log(isObjectLike(value3)); // false
+ * console.log(isObjectLike(value4)); // false
+ * console.log(isObjectLike(value5)); // false
+ */
+declare function isObjectLike(value?: any): boolean;
+
+export { isObjectLike };
Index: node_modules/es-toolkit/dist/compat/predicate/isObjectLike.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isObjectLike.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isObjectLike.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Checks if the given value is object-like.
+ *
+ * A value is object-like if its type is object and it is not null.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to an object-like value.
+ *
+ * @param {any} value - The value to test if it is an object-like.
+ * @returns {boolean} `true` if the value is an object-like, `false` otherwise.
+ *
+ * @example
+ * const value1 = { a: 1 };
+ * const value2 = [1, 2, 3];
+ * const value3 = 'abc';
+ * const value4 = () => {};
+ * const value5 = null;
+ *
+ * console.log(isObjectLike(value1)); // true
+ * console.log(isObjectLike(value2)); // true
+ * console.log(isObjectLike(value3)); // false
+ * console.log(isObjectLike(value4)); // false
+ * console.log(isObjectLike(value5)); // false
+ */
+declare function isObjectLike(value?: any): boolean;
+
+export { isObjectLike };
Index: node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isObjectLike(value) {
+    return typeof value === 'object' && value !== null;
+}
+
+exports.isObjectLike = isObjectLike;
Index: node_modules/es-toolkit/dist/compat/predicate/isObjectLike.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isObjectLike.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isObjectLike.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isObjectLike(value) {
+    return typeof value === 'object' && value !== null;
+}
+
+export { isObjectLike };
Index: node_modules/es-toolkit/dist/compat/predicate/isPlainObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isPlainObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isPlainObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Checks if a given value is a plain object.
+ *
+ * A plain object is an object created by the `{}` literal, `new Object()`, or
+ * `Object.create(null)`.
+ *
+ * This function also handles objects with custom
+ * `Symbol.toStringTag` properties.
+ *
+ * `Symbol.toStringTag` is a built-in symbol that a constructor can use to customize the
+ * default string description of objects.
+ *
+ * @param {any} [object] - The value to check.
+ * @returns {boolean} - True if the value is a plain object, otherwise false.
+ *
+ * @example
+ * console.log(isPlainObject({})); // true
+ * console.log(isPlainObject([])); // false
+ * console.log(isPlainObject(null)); // false
+ * console.log(isPlainObject(Object.create(null))); // true
+ * console.log(isPlainObject(new Map())); // false
+ */
+declare function isPlainObject(object?: any): boolean;
+
+export { isPlainObject };
Index: node_modules/es-toolkit/dist/compat/predicate/isPlainObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Checks if a given value is a plain object.
+ *
+ * A plain object is an object created by the `{}` literal, `new Object()`, or
+ * `Object.create(null)`.
+ *
+ * This function also handles objects with custom
+ * `Symbol.toStringTag` properties.
+ *
+ * `Symbol.toStringTag` is a built-in symbol that a constructor can use to customize the
+ * default string description of objects.
+ *
+ * @param {any} [object] - The value to check.
+ * @returns {boolean} - True if the value is a plain object, otherwise false.
+ *
+ * @example
+ * console.log(isPlainObject({})); // true
+ * console.log(isPlainObject([])); // false
+ * console.log(isPlainObject(null)); // false
+ * console.log(isPlainObject(Object.create(null))); // true
+ * console.log(isPlainObject(new Map())); // false
+ */
+declare function isPlainObject(object?: any): boolean;
+
+export { isPlainObject };
Index: node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isPlainObject(object) {
+    if (typeof object !== 'object') {
+        return false;
+    }
+    if (object == null) {
+        return false;
+    }
+    if (Object.getPrototypeOf(object) === null) {
+        return true;
+    }
+    if (Object.prototype.toString.call(object) !== '[object Object]') {
+        const tag = object[Symbol.toStringTag];
+        if (tag == null) {
+            return false;
+        }
+        const isTagReadonly = !Object.getOwnPropertyDescriptor(object, Symbol.toStringTag)?.writable;
+        if (isTagReadonly) {
+            return false;
+        }
+        return object.toString() === `[object ${tag}]`;
+    }
+    let proto = object;
+    while (Object.getPrototypeOf(proto) !== null) {
+        proto = Object.getPrototypeOf(proto);
+    }
+    return Object.getPrototypeOf(object) === proto;
+}
+
+exports.isPlainObject = isPlainObject;
Index: node_modules/es-toolkit/dist/compat/predicate/isPlainObject.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isPlainObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isPlainObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+function isPlainObject(object) {
+    if (typeof object !== 'object') {
+        return false;
+    }
+    if (object == null) {
+        return false;
+    }
+    if (Object.getPrototypeOf(object) === null) {
+        return true;
+    }
+    if (Object.prototype.toString.call(object) !== '[object Object]') {
+        const tag = object[Symbol.toStringTag];
+        if (tag == null) {
+            return false;
+        }
+        const isTagReadonly = !Object.getOwnPropertyDescriptor(object, Symbol.toStringTag)?.writable;
+        if (isTagReadonly) {
+            return false;
+        }
+        return object.toString() === `[object ${tag}]`;
+    }
+    let proto = object;
+    while (Object.getPrototypeOf(proto) !== null) {
+        proto = Object.getPrototypeOf(proto);
+    }
+    return Object.getPrototypeOf(object) === proto;
+}
+
+export { isPlainObject };
Index: node_modules/es-toolkit/dist/compat/predicate/isRegExp.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isRegExp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isRegExp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a RegExp.
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a RegExp, `false` otherwise.
+ *
+ * @example
+ * const value1 = /abc/;
+ * const value2 = '/abc/';
+ *
+ * console.log(isRegExp(value1)); // true
+ * console.log(isRegExp(value2)); // false
+ */
+declare function isRegExp(value?: any): value is RegExp;
+
+export { isRegExp };
Index: node_modules/es-toolkit/dist/compat/predicate/isRegExp.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a RegExp.
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a RegExp, `false` otherwise.
+ *
+ * @example
+ * const value1 = /abc/;
+ * const value2 = '/abc/';
+ *
+ * console.log(isRegExp(value1)); // true
+ * console.log(isRegExp(value2)); // false
+ */
+declare function isRegExp(value?: any): value is RegExp;
+
+export { isRegExp };
Index: node_modules/es-toolkit/dist/compat/predicate/isRegExp.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isRegExp$1 = require('../../predicate/isRegExp.js');
+
+function isRegExp(value) {
+    return isRegExp$1.isRegExp(value);
+}
+
+exports.isRegExp = isRegExp;
Index: node_modules/es-toolkit/dist/compat/predicate/isRegExp.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isRegExp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isRegExp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isRegExp as isRegExp$1 } from '../../predicate/isRegExp.mjs';
+
+function isRegExp(value) {
+    return isRegExp$1(value);
+}
+
+export { isRegExp };
Index: node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if `value` is a safe integer (between -(2^53 – 1) and (2^53 – 1), inclusive).
+ *
+ * A safe integer is an integer that can be precisely represented as a `number` in JavaScript,
+ * without any other integer being rounded to it.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `number`.
+ *
+ * @param {unknown} value - The value to check
+ * @returns {boolean} `true` if `value` is an integer and between the safe values, otherwise `false`
+ *
+ * @example
+ * isSafeInteger(3); // Returns: true
+ * isSafeInteger(Number.MIN_SAFE_INTEGER - 1); // Returns: false
+ * isSafeInteger(1n); // Returns: false
+ * isSafeInteger('1'); // Returns: false
+ */
+declare function isSafeInteger(value: any): boolean;
+
+export { isSafeInteger };
Index: node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if `value` is a safe integer (between -(2^53 – 1) and (2^53 – 1), inclusive).
+ *
+ * A safe integer is an integer that can be precisely represented as a `number` in JavaScript,
+ * without any other integer being rounded to it.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `number`.
+ *
+ * @param {unknown} value - The value to check
+ * @returns {boolean} `true` if `value` is an integer and between the safe values, otherwise `false`
+ *
+ * @example
+ * isSafeInteger(3); // Returns: true
+ * isSafeInteger(Number.MIN_SAFE_INTEGER - 1); // Returns: false
+ * isSafeInteger(1n); // Returns: false
+ * isSafeInteger('1'); // Returns: false
+ */
+declare function isSafeInteger(value: any): boolean;
+
+export { isSafeInteger };
Index: node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isSafeInteger(value) {
+    return Number.isSafeInteger(value);
+}
+
+exports.isSafeInteger = isSafeInteger;
Index: node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSafeInteger.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isSafeInteger(value) {
+    return Number.isSafeInteger(value);
+}
+
+export { isSafeInteger };
Index: node_modules/es-toolkit/dist/compat/predicate/isSet.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSet.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSet.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Set`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Set`.
+ *
+ * @param {unknown} value The value to check if it is a `Set`.
+ * @returns {value is Set<any>} Returns `true` if `value` is a `Set`, else `false`.
+ *
+ * @example
+ * const value1 = new Set();
+ * const value2 = new Map();
+ * const value3 = new WeakSet();
+ *
+ * console.log(isSet(value1)); // true
+ * console.log(isSet(value2)); // false
+ * console.log(isSet(value3)); // false
+ */
+declare function isSet(value?: any): value is Set<any>;
+
+export { isSet };
Index: node_modules/es-toolkit/dist/compat/predicate/isSet.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Set`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Set`.
+ *
+ * @param {unknown} value The value to check if it is a `Set`.
+ * @returns {value is Set<any>} Returns `true` if `value` is a `Set`, else `false`.
+ *
+ * @example
+ * const value1 = new Set();
+ * const value2 = new Map();
+ * const value3 = new WeakSet();
+ *
+ * console.log(isSet(value1)); // true
+ * console.log(isSet(value2)); // false
+ * console.log(isSet(value3)); // false
+ */
+declare function isSet(value?: any): value is Set<any>;
+
+export { isSet };
Index: node_modules/es-toolkit/dist/compat/predicate/isSet.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isSet$1 = require('../../predicate/isSet.js');
+
+function isSet(value) {
+    return isSet$1.isSet(value);
+}
+
+exports.isSet = isSet;
Index: node_modules/es-toolkit/dist/compat/predicate/isSet.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSet.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSet.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isSet as isSet$1 } from '../../predicate/isSet.mjs';
+
+function isSet(value) {
+    return isSet$1(value);
+}
+
+export { isSet };
Index: node_modules/es-toolkit/dist/compat/predicate/isString.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is string.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `string`.
+ *
+ * @param {unknown} value The value to check if it is string.
+ * @returns {value is string} Returns `true` if `value` is a string, else `false`.
+ *
+ * @example
+ * const value1 = 'abc';
+ * const value2 = 123;
+ * const value3 = true;
+ *
+ * console.log(isString(value1)); // true
+ * console.log(isString(value2)); // false
+ * console.log(isString(value3)); // false
+ */
+declare function isString(value?: any): value is string;
+
+export { isString };
Index: node_modules/es-toolkit/dist/compat/predicate/isString.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is string.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `string`.
+ *
+ * @param {unknown} value The value to check if it is string.
+ * @returns {value is string} Returns `true` if `value` is a string, else `false`.
+ *
+ * @example
+ * const value1 = 'abc';
+ * const value2 = 123;
+ * const value3 = true;
+ *
+ * console.log(isString(value1)); // true
+ * console.log(isString(value2)); // false
+ * console.log(isString(value3)); // false
+ */
+declare function isString(value?: any): value is string;
+
+export { isString };
Index: node_modules/es-toolkit/dist/compat/predicate/isString.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isString(value) {
+    return typeof value === 'string' || value instanceof String;
+}
+
+exports.isString = isString;
Index: node_modules/es-toolkit/dist/compat/predicate/isString.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isString(value) {
+    return typeof value === 'string' || value instanceof String;
+}
+
+export { isString };
Index: node_modules/es-toolkit/dist/compat/predicate/isSymbol.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSymbol.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSymbol.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Check whether a value is a symbol.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `symbol`.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is symbol} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ * isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * isSymbol('abc');
+ * // => false
+ */
+declare function isSymbol(value: any): value is symbol;
+
+export { isSymbol };
Index: node_modules/es-toolkit/dist/compat/predicate/isSymbol.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSymbol.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSymbol.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Check whether a value is a symbol.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `symbol`.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is symbol} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ * isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * isSymbol('abc');
+ * // => false
+ */
+declare function isSymbol(value: any): value is symbol;
+
+export { isSymbol };
Index: node_modules/es-toolkit/dist/compat/predicate/isSymbol.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSymbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSymbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isSymbol(value) {
+    return typeof value === 'symbol' || value instanceof Symbol;
+}
+
+exports.isSymbol = isSymbol;
Index: node_modules/es-toolkit/dist/compat/predicate/isSymbol.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isSymbol.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isSymbol.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isSymbol(value) {
+    return typeof value === 'symbol' || value instanceof Symbol;
+}
+
+export { isSymbol };
Index: node_modules/es-toolkit/dist/compat/predicate/isTypedArray.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isTypedArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isTypedArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Checks if a value is a TypedArray.
+ * @param {any} x The value to check.
+ * @returns {boolean} Returns true if `x` is a TypedArray, false otherwise.
+ *
+ * @example
+ * const arr = new Uint8Array([1, 2, 3]);
+ * isTypedArray(arr); // true
+ *
+ * const regularArray = [1, 2, 3];
+ * isTypedArray(regularArray); // false
+ *
+ * const buffer = new ArrayBuffer(16);
+ * isTypedArray(buffer); // false
+ */
+declare function isTypedArray(x: any): boolean;
+
+export { isTypedArray };
Index: node_modules/es-toolkit/dist/compat/predicate/isTypedArray.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isTypedArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isTypedArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Checks if a value is a TypedArray.
+ * @param {any} x The value to check.
+ * @returns {boolean} Returns true if `x` is a TypedArray, false otherwise.
+ *
+ * @example
+ * const arr = new Uint8Array([1, 2, 3]);
+ * isTypedArray(arr); // true
+ *
+ * const regularArray = [1, 2, 3];
+ * isTypedArray(regularArray); // false
+ *
+ * const buffer = new ArrayBuffer(16);
+ * isTypedArray(buffer); // false
+ */
+declare function isTypedArray(x: any): boolean;
+
+export { isTypedArray };
Index: node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isTypedArray$1 = require('../../predicate/isTypedArray.js');
+
+function isTypedArray(x) {
+    return isTypedArray$1.isTypedArray(x);
+}
+
+exports.isTypedArray = isTypedArray;
Index: node_modules/es-toolkit/dist/compat/predicate/isTypedArray.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isTypedArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isTypedArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isTypedArray as isTypedArray$1 } from '../../predicate/isTypedArray.mjs';
+
+function isTypedArray(x) {
+    return isTypedArray$1(x);
+}
+
+export { isTypedArray };
Index: node_modules/es-toolkit/dist/compat/predicate/isUndefined.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isUndefined.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isUndefined.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is undefined.
+ *
+ * This function tests whether the provided value is strictly equal to `undefined`.
+ * It returns `true` if the value is `undefined`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `undefined`.
+ *
+ * @param {any} x - The value to test if it is undefined.
+ * @returns {x is undefined} true if the value is undefined, false otherwise.
+ *
+ * @example
+ * const value1 = undefined;
+ * const value2 = null;
+ * const value3 = 42;
+ *
+ * console.log(isUndefined(value1)); // true
+ * console.log(isUndefined(value2)); // false
+ * console.log(isUndefined(value3)); // false
+ */
+declare function isUndefined(x: any): x is undefined;
+
+export { isUndefined };
Index: node_modules/es-toolkit/dist/compat/predicate/isUndefined.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isUndefined.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isUndefined.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is undefined.
+ *
+ * This function tests whether the provided value is strictly equal to `undefined`.
+ * It returns `true` if the value is `undefined`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `undefined`.
+ *
+ * @param {any} x - The value to test if it is undefined.
+ * @returns {x is undefined} true if the value is undefined, false otherwise.
+ *
+ * @example
+ * const value1 = undefined;
+ * const value2 = null;
+ * const value3 = 42;
+ *
+ * console.log(isUndefined(value1)); // true
+ * console.log(isUndefined(value2)); // false
+ * console.log(isUndefined(value3)); // false
+ */
+declare function isUndefined(x: any): x is undefined;
+
+export { isUndefined };
Index: node_modules/es-toolkit/dist/compat/predicate/isUndefined.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isUndefined.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isUndefined.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isUndefined$1 = require('../../predicate/isUndefined.js');
+
+function isUndefined(x) {
+    return isUndefined$1.isUndefined(x);
+}
+
+exports.isUndefined = isUndefined;
Index: node_modules/es-toolkit/dist/compat/predicate/isUndefined.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isUndefined.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isUndefined.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isUndefined as isUndefined$1 } from '../../predicate/isUndefined.mjs';
+
+function isUndefined(x) {
+    return isUndefined$1(x);
+}
+
+export { isUndefined };
Index: node_modules/es-toolkit/dist/compat/predicate/isWeakMap.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isWeakMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isWeakMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is a `WeakMap`.
+ *
+ * This function tests whether the provided value is an instance of `WeakMap`.
+ * It returns `true` if the value is a `WeakMap`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `WeakMap`.
+ *
+ * @param {unknown} value - The value to test if it is a `WeakMap`.
+ * @returns {value is WeakMap<WeakKey, any>} true if the value is a `WeakMap`, false otherwise.
+ *
+ * @example
+ * const value1 = new WeakMap();
+ * const value2 = new Map();
+ * const value3 = new Set();
+ *
+ * console.log(isWeakMap(value1)); // true
+ * console.log(isWeakMap(value2)); // false
+ * console.log(isWeakMap(value3)); // false
+ */
+declare function isWeakMap(value?: any): value is WeakMap<object, any>;
+
+export { isWeakMap };
Index: node_modules/es-toolkit/dist/compat/predicate/isWeakMap.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isWeakMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isWeakMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is a `WeakMap`.
+ *
+ * This function tests whether the provided value is an instance of `WeakMap`.
+ * It returns `true` if the value is a `WeakMap`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `WeakMap`.
+ *
+ * @param {unknown} value - The value to test if it is a `WeakMap`.
+ * @returns {value is WeakMap<WeakKey, any>} true if the value is a `WeakMap`, false otherwise.
+ *
+ * @example
+ * const value1 = new WeakMap();
+ * const value2 = new Map();
+ * const value3 = new Set();
+ *
+ * console.log(isWeakMap(value1)); // true
+ * console.log(isWeakMap(value2)); // false
+ * console.log(isWeakMap(value3)); // false
+ */
+declare function isWeakMap(value?: any): value is WeakMap<object, any>;
+
+export { isWeakMap };
Index: node_modules/es-toolkit/dist/compat/predicate/isWeakMap.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isWeakMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isWeakMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isWeakMap$1 = require('../../predicate/isWeakMap.js');
+
+function isWeakMap(value) {
+    return isWeakMap$1.isWeakMap(value);
+}
+
+exports.isWeakMap = isWeakMap;
Index: node_modules/es-toolkit/dist/compat/predicate/isWeakMap.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isWeakMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isWeakMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isWeakMap as isWeakMap$1 } from '../../predicate/isWeakMap.mjs';
+
+function isWeakMap(value) {
+    return isWeakMap$1(value);
+}
+
+export { isWeakMap };
Index: node_modules/es-toolkit/dist/compat/predicate/isWeakSet.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isWeakSet.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isWeakSet.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is a `WeakSet`.
+ *
+ * This function tests whether the provided value is an instance of `WeakSet`.
+ * It returns `true` if the value is a `WeakSet`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `WeakSet`.
+ *
+ * @param {unknown} value - The value to test if it is a `WeakSet`.
+ * @returns {value is WeakSet<WeakKey>} true if the value is a `WeakSet`, false otherwise.
+ *
+ * @example
+ * const value1 = new WeakSet();
+ * const value2 = new Map();
+ * const value3 = new Set();
+ *
+ * console.log(isWeakSet(value1)); // true
+ * console.log(isWeakSet(value2)); // false
+ * console.log(isWeakSet(value3)); // false
+ */
+declare function isWeakSet(value?: any): value is WeakSet<object>;
+
+export { isWeakSet };
Index: node_modules/es-toolkit/dist/compat/predicate/isWeakSet.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isWeakSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isWeakSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is a `WeakSet`.
+ *
+ * This function tests whether the provided value is an instance of `WeakSet`.
+ * It returns `true` if the value is a `WeakSet`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `WeakSet`.
+ *
+ * @param {unknown} value - The value to test if it is a `WeakSet`.
+ * @returns {value is WeakSet<WeakKey>} true if the value is a `WeakSet`, false otherwise.
+ *
+ * @example
+ * const value1 = new WeakSet();
+ * const value2 = new Map();
+ * const value3 = new Set();
+ *
+ * console.log(isWeakSet(value1)); // true
+ * console.log(isWeakSet(value2)); // false
+ * console.log(isWeakSet(value3)); // false
+ */
+declare function isWeakSet(value?: any): value is WeakSet<object>;
+
+export { isWeakSet };
Index: node_modules/es-toolkit/dist/compat/predicate/isWeakSet.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isWeakSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isWeakSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isWeakSet$1 = require('../../predicate/isWeakSet.js');
+
+function isWeakSet(value) {
+    return isWeakSet$1.isWeakSet(value);
+}
+
+exports.isWeakSet = isWeakSet;
Index: node_modules/es-toolkit/dist/compat/predicate/isWeakSet.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/isWeakSet.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/isWeakSet.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { isWeakSet as isWeakSet$1 } from '../../predicate/isWeakSet.mjs';
+
+function isWeakSet(value) {
+    return isWeakSet$1(value);
+}
+
+export { isWeakSet };
Index: node_modules/es-toolkit/dist/compat/predicate/matches.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/matches.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/matches.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Creates a function that performs a deep comparison between a given target and the source object.
+ *
+ * @template T
+ * @param {T} source - The source object to create the matcher from.
+ * @returns {(value: any) => boolean} Returns a function that takes a target object and returns `true` if the target matches the source, otherwise `false`.
+ *
+ * @example
+ * const matcher = matches({ a: 1, b: 2 });
+ * matcher({ a: 1, b: 2, c: 3 }); // true
+ * matcher({ a: 1, c: 3 }); // false
+ */
+declare function matches<T>(source: T): (value: any) => boolean;
+/**
+ * Creates a function that performs a deep comparison between a given target and the source object.
+ *
+ * @template T
+ * @template V
+ * @param {T} source - The source object to create the matcher from.
+ * @returns {(value: V) => boolean} Returns a function that takes a target object and returns `true` if the target matches the source, otherwise `false`.
+ *
+ * @example
+ * const matcher = matches<{ a: number }, { a: number; b?: number }>({ a: 1 });
+ * matcher({ a: 1, b: 2 }); // true
+ * matcher({ a: 2 }); // false
+ */
+declare function matches<T, V>(source: T): (value: V) => boolean;
+
+export { matches };
Index: node_modules/es-toolkit/dist/compat/predicate/matches.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/matches.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/matches.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Creates a function that performs a deep comparison between a given target and the source object.
+ *
+ * @template T
+ * @param {T} source - The source object to create the matcher from.
+ * @returns {(value: any) => boolean} Returns a function that takes a target object and returns `true` if the target matches the source, otherwise `false`.
+ *
+ * @example
+ * const matcher = matches({ a: 1, b: 2 });
+ * matcher({ a: 1, b: 2, c: 3 }); // true
+ * matcher({ a: 1, c: 3 }); // false
+ */
+declare function matches<T>(source: T): (value: any) => boolean;
+/**
+ * Creates a function that performs a deep comparison between a given target and the source object.
+ *
+ * @template T
+ * @template V
+ * @param {T} source - The source object to create the matcher from.
+ * @returns {(value: V) => boolean} Returns a function that takes a target object and returns `true` if the target matches the source, otherwise `false`.
+ *
+ * @example
+ * const matcher = matches<{ a: number }, { a: number; b?: number }>({ a: 1 });
+ * matcher({ a: 1, b: 2 }); // true
+ * matcher({ a: 2 }); // false
+ */
+declare function matches<T, V>(source: T): (value: V) => boolean;
+
+export { matches };
Index: node_modules/es-toolkit/dist/compat/predicate/matches.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/matches.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/matches.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isMatch = require('./isMatch.js');
+const cloneDeep = require('../../object/cloneDeep.js');
+
+function matches(source) {
+    source = cloneDeep.cloneDeep(source);
+    return (target) => {
+        return isMatch.isMatch(target, source);
+    };
+}
+
+exports.matches = matches;
Index: node_modules/es-toolkit/dist/compat/predicate/matches.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/matches.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/matches.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { isMatch } from './isMatch.mjs';
+import { cloneDeep } from '../../object/cloneDeep.mjs';
+
+function matches(source) {
+    source = cloneDeep(source);
+    return (target) => {
+        return isMatch(target, source);
+    };
+}
+
+export { matches };
Index: node_modules/es-toolkit/dist/compat/predicate/matchesProperty.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/matchesProperty.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/matchesProperty.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+import { PropertyPath } from '../_internal/PropertyPath.mjs';
+
+/**
+ * Creates a function that checks if a given target object matches a specific property value.
+ *
+ * @template T
+ * @template V
+ * @param {PropertyPath} path - The property path to check within the target object.
+ * @param {T} srcValue - The value to compare against the property value in the target object.
+ * @returns {(value: any) => boolean} Returns a function that takes a target object and returns
+ *     `true` if the property value at the given path in the target object matches the provided value,
+ *     otherwise returns `false`.
+ *
+ * @example
+ * const checkName = matchesProperty('name', 'Alice');
+ * console.log(checkName({ name: 'Alice' })); // true
+ * console.log(checkName({ name: 'Bob' })); // false
+ */
+declare function matchesProperty<T>(path: PropertyPath, srcValue: T): (value: any) => boolean;
+/**
+ * Creates a function that checks if a given target object matches a specific property value.
+ *
+ * @template T
+ * @template V
+ * @param {PropertyPath} path - The property path to check within the target object.
+ * @param {T} srcValue - The value to compare against the property value in the target object.
+ * @returns {(value: V) => boolean} Returns a function that takes a target object and returns
+ *     `true` if the property value at the given path in the target object matches the provided value,
+ *     otherwise returns `false`.
+ *
+ * @example
+ * const checkNested = matchesProperty(['address', 'city'], 'New York');
+ * console.log(checkNested({ address: { city: 'New York' } })); // true
+ * console.log(checkNested({ address: { city: 'Los Angeles' } })); // false
+ */
+declare function matchesProperty<T, V>(path: PropertyPath, srcValue: T): (value: V) => boolean;
+
+export { matchesProperty };
Index: node_modules/es-toolkit/dist/compat/predicate/matchesProperty.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/matchesProperty.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/matchesProperty.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+import { PropertyPath } from '../_internal/PropertyPath.js';
+
+/**
+ * Creates a function that checks if a given target object matches a specific property value.
+ *
+ * @template T
+ * @template V
+ * @param {PropertyPath} path - The property path to check within the target object.
+ * @param {T} srcValue - The value to compare against the property value in the target object.
+ * @returns {(value: any) => boolean} Returns a function that takes a target object and returns
+ *     `true` if the property value at the given path in the target object matches the provided value,
+ *     otherwise returns `false`.
+ *
+ * @example
+ * const checkName = matchesProperty('name', 'Alice');
+ * console.log(checkName({ name: 'Alice' })); // true
+ * console.log(checkName({ name: 'Bob' })); // false
+ */
+declare function matchesProperty<T>(path: PropertyPath, srcValue: T): (value: any) => boolean;
+/**
+ * Creates a function that checks if a given target object matches a specific property value.
+ *
+ * @template T
+ * @template V
+ * @param {PropertyPath} path - The property path to check within the target object.
+ * @param {T} srcValue - The value to compare against the property value in the target object.
+ * @returns {(value: V) => boolean} Returns a function that takes a target object and returns
+ *     `true` if the property value at the given path in the target object matches the provided value,
+ *     otherwise returns `false`.
+ *
+ * @example
+ * const checkNested = matchesProperty(['address', 'city'], 'New York');
+ * console.log(checkNested({ address: { city: 'New York' } })); // true
+ * console.log(checkNested({ address: { city: 'Los Angeles' } })); // false
+ */
+declare function matchesProperty<T, V>(path: PropertyPath, srcValue: T): (value: V) => boolean;
+
+export { matchesProperty };
Index: node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isMatch = require('./isMatch.js');
+const toKey = require('../_internal/toKey.js');
+const cloneDeep = require('../object/cloneDeep.js');
+const get = require('../object/get.js');
+const has = require('../object/has.js');
+
+function matchesProperty(property, source) {
+    switch (typeof property) {
+        case 'object': {
+            if (Object.is(property?.valueOf(), -0)) {
+                property = '-0';
+            }
+            break;
+        }
+        case 'number': {
+            property = toKey.toKey(property);
+            break;
+        }
+    }
+    source = cloneDeep.cloneDeep(source);
+    return function (target) {
+        const result = get.get(target, property);
+        if (result === undefined) {
+            return has.has(target, property);
+        }
+        if (source === undefined) {
+            return result === undefined;
+        }
+        return isMatch.isMatch(result, source);
+    };
+}
+
+exports.matchesProperty = matchesProperty;
Index: node_modules/es-toolkit/dist/compat/predicate/matchesProperty.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/predicate/matchesProperty.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/predicate/matchesProperty.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { isMatch } from './isMatch.mjs';
+import { toKey } from '../_internal/toKey.mjs';
+import { cloneDeep } from '../object/cloneDeep.mjs';
+import { get } from '../object/get.mjs';
+import { has } from '../object/has.mjs';
+
+function matchesProperty(property, source) {
+    switch (typeof property) {
+        case 'object': {
+            if (Object.is(property?.valueOf(), -0)) {
+                property = '-0';
+            }
+            break;
+        }
+        case 'number': {
+            property = toKey(property);
+            break;
+        }
+    }
+    source = cloneDeep(source);
+    return function (target) {
+        const result = get(target, property);
+        if (result === undefined) {
+            return has(target, property);
+        }
+        if (source === undefined) {
+            return result === undefined;
+        }
+        return isMatch(result, source);
+    };
+}
+
+export { matchesProperty };
Index: node_modules/es-toolkit/dist/compat/string/camelCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/camelCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/camelCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Converts a string to camel case.
+ *
+ * Camel case is the naming convention in which the first word is written in lowercase and
+ * each subsequent word begins with a capital letter, concatenated without any separator characters.
+ *
+ * @param {string | object} str - The string that is to be changed to camel case.
+ * @returns {string} - The converted string to camel case.
+ *
+ * @example
+ * const convertedStr1 = camelCase('camelCase') // returns 'camelCase'
+ * const convertedStr2 = camelCase('some whitespace') // returns 'someWhitespace'
+ * const convertedStr3 = camelCase('hyphen-text') // returns 'hyphenText'
+ * const convertedStr4 = camelCase('HTTPRequest') // returns 'httpRequest'
+ */
+declare function camelCase(str?: string): string;
+
+export { camelCase };
Index: node_modules/es-toolkit/dist/compat/string/camelCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/camelCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/camelCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Converts a string to camel case.
+ *
+ * Camel case is the naming convention in which the first word is written in lowercase and
+ * each subsequent word begins with a capital letter, concatenated without any separator characters.
+ *
+ * @param {string | object} str - The string that is to be changed to camel case.
+ * @returns {string} - The converted string to camel case.
+ *
+ * @example
+ * const convertedStr1 = camelCase('camelCase') // returns 'camelCase'
+ * const convertedStr2 = camelCase('some whitespace') // returns 'someWhitespace'
+ * const convertedStr3 = camelCase('hyphen-text') // returns 'hyphenText'
+ * const convertedStr4 = camelCase('HTTPRequest') // returns 'httpRequest'
+ */
+declare function camelCase(str?: string): string;
+
+export { camelCase };
Index: node_modules/es-toolkit/dist/compat/string/camelCase.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/camelCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/camelCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const camelCase$1 = require('../../string/camelCase.js');
+const normalizeForCase = require('../_internal/normalizeForCase.js');
+
+function camelCase(str) {
+    return camelCase$1.camelCase(normalizeForCase.normalizeForCase(str));
+}
+
+exports.camelCase = camelCase;
Index: node_modules/es-toolkit/dist/compat/string/camelCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/camelCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/camelCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { camelCase as camelCase$1 } from '../../string/camelCase.mjs';
+import { normalizeForCase } from '../_internal/normalizeForCase.mjs';
+
+function camelCase(str) {
+    return camelCase$1(normalizeForCase(str));
+}
+
+export { camelCase };
Index: node_modules/es-toolkit/dist/compat/string/capitalize.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/capitalize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/capitalize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to upper case and the remaining to lower case.
+ *
+ * @param {string} string - The string to capitalize.
+ * @returns {string} - The capitalized string.
+ *
+ * @example
+ * const convertedStr1 = capitalize('fred') // returns 'Fred'
+ * const convertedStr2 = capitalize('FRED') // returns 'Fred'
+ * const convertedStr3 = capitalize('') // returns ''
+ */
+declare function capitalize<T extends string>(str?: T): string extends T ? string : Capitalize<Lowercase<T>>;
+
+export { capitalize };
Index: node_modules/es-toolkit/dist/compat/string/capitalize.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/capitalize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/capitalize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to upper case and the remaining to lower case.
+ *
+ * @param {string} string - The string to capitalize.
+ * @returns {string} - The capitalized string.
+ *
+ * @example
+ * const convertedStr1 = capitalize('fred') // returns 'Fred'
+ * const convertedStr2 = capitalize('FRED') // returns 'Fred'
+ * const convertedStr3 = capitalize('') // returns ''
+ */
+declare function capitalize<T extends string>(str?: T): string extends T ? string : Capitalize<Lowercase<T>>;
+
+export { capitalize };
Index: node_modules/es-toolkit/dist/compat/string/capitalize.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/capitalize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/capitalize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const capitalize$1 = require('../../string/capitalize.js');
+const toString = require('../util/toString.js');
+
+function capitalize(str) {
+    return capitalize$1.capitalize(toString.toString(str));
+}
+
+exports.capitalize = capitalize;
Index: node_modules/es-toolkit/dist/compat/string/capitalize.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/capitalize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/capitalize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { capitalize as capitalize$1 } from '../../string/capitalize.mjs';
+import { toString } from '../util/toString.mjs';
+
+function capitalize(str) {
+    return capitalize$1(toString(str));
+}
+
+export { capitalize };
Index: node_modules/es-toolkit/dist/compat/string/deburr.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/deburr.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/deburr.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Converts a string by replacing special characters and diacritical marks with their ASCII equivalents.
+ * For example, "Crème brûlée" becomes "Creme brulee".
+ *
+ * @param {string} str - The input string to be deburred.
+ * @returns {string} - The deburred string with special characters replaced by their ASCII equivalents.
+ *
+ * @example
+ * // Basic usage:
+ * deburr('Æthelred') // returns 'Aethelred'
+ *
+ * @example
+ * // Handling diacritical marks:
+ * deburr('München') // returns 'Munchen'
+ *
+ * @example
+ * // Special characters:
+ * deburr('Crème brûlée') // returns 'Creme brulee'
+ */
+declare function deburr(str?: string): string;
+
+export { deburr };
Index: node_modules/es-toolkit/dist/compat/string/deburr.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/deburr.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/deburr.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Converts a string by replacing special characters and diacritical marks with their ASCII equivalents.
+ * For example, "Crème brûlée" becomes "Creme brulee".
+ *
+ * @param {string} str - The input string to be deburred.
+ * @returns {string} - The deburred string with special characters replaced by their ASCII equivalents.
+ *
+ * @example
+ * // Basic usage:
+ * deburr('Æthelred') // returns 'Aethelred'
+ *
+ * @example
+ * // Handling diacritical marks:
+ * deburr('München') // returns 'Munchen'
+ *
+ * @example
+ * // Special characters:
+ * deburr('Crème brûlée') // returns 'Creme brulee'
+ */
+declare function deburr(str?: string): string;
+
+export { deburr };
Index: node_modules/es-toolkit/dist/compat/string/deburr.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/deburr.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/deburr.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const deburr$1 = require('../../string/deburr.js');
+const toString = require('../util/toString.js');
+
+function deburr(str) {
+    return deburr$1.deburr(toString.toString(str));
+}
+
+exports.deburr = deburr;
Index: node_modules/es-toolkit/dist/compat/string/deburr.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/deburr.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/deburr.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { deburr as deburr$1 } from '../../string/deburr.mjs';
+import { toString } from '../util/toString.mjs';
+
+function deburr(str) {
+    return deburr$1(toString(str));
+}
+
+export { deburr };
Index: node_modules/es-toolkit/dist/compat/string/endsWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/endsWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/endsWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a string contains another string at the end of the string.
+ *
+ * Checks if one string endsWith another string. Optional position parameter to offset searching before a certain index.
+ *
+ * @param {string} str - The string that might contain the target string.
+ * @param {string} target - The string to search for.
+ * @param {number} position - An optional position from the start to search up to this index
+ * @returns {boolean} - True if the str string ends with the target string.
+ *
+ * @example
+ * const isPrefix = endsWith('fooBar', 'foo') // returns true
+ * const isPrefix = endsWith('fooBar', 'bar') // returns false
+ * const isPrefix = endsWith('fooBar', 'abc') // returns false
+ * const isPrefix = endsWith('fooBar', 'foo', 3) // returns true
+ * const isPrefix = endsWith('fooBar', 'abc', 5) // returns false
+ */
+declare function endsWith(str?: string, target?: string, position?: number): boolean;
+
+export { endsWith };
Index: node_modules/es-toolkit/dist/compat/string/endsWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/endsWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/endsWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a string contains another string at the end of the string.
+ *
+ * Checks if one string endsWith another string. Optional position parameter to offset searching before a certain index.
+ *
+ * @param {string} str - The string that might contain the target string.
+ * @param {string} target - The string to search for.
+ * @param {number} position - An optional position from the start to search up to this index
+ * @returns {boolean} - True if the str string ends with the target string.
+ *
+ * @example
+ * const isPrefix = endsWith('fooBar', 'foo') // returns true
+ * const isPrefix = endsWith('fooBar', 'bar') // returns false
+ * const isPrefix = endsWith('fooBar', 'abc') // returns false
+ * const isPrefix = endsWith('fooBar', 'foo', 3) // returns true
+ * const isPrefix = endsWith('fooBar', 'abc', 5) // returns false
+ */
+declare function endsWith(str?: string, target?: string, position?: number): boolean;
+
+export { endsWith };
Index: node_modules/es-toolkit/dist/compat/string/endsWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/endsWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/endsWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function endsWith(str, target, position) {
+    if (str == null || target == null) {
+        return false;
+    }
+    if (position == null) {
+        position = str.length;
+    }
+    return str.endsWith(target, position);
+}
+
+exports.endsWith = endsWith;
Index: node_modules/es-toolkit/dist/compat/string/endsWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/endsWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/endsWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function endsWith(str, target, position) {
+    if (str == null || target == null) {
+        return false;
+    }
+    if (position == null) {
+        position = str.length;
+    }
+    return str.endsWith(target, position);
+}
+
+export { endsWith };
Index: node_modules/es-toolkit/dist/compat/string/escape.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/escape.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/escape.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the characters "&", "<", ">", '"', and "'" in `str` to their corresponding HTML entities.
+ * For example, "<" becomes "&lt;".
+ *
+ * @param {string} str  The string to escape.
+ * @returns {string} Returns the escaped string.
+ *
+ * @example
+ * escape('This is a <div> element.'); // returns 'This is a &lt;div&gt; element.'
+ * escape('This is a "quote"'); // returns 'This is a &quot;quote&quot;'
+ * escape("This is a 'quote'"); // returns 'This is a &#39;quote&#39;'
+ * escape('This is a & symbol'); // returns 'This is a &amp; symbol'
+ */
+declare function escape(string?: string): string;
+
+export { escape };
Index: node_modules/es-toolkit/dist/compat/string/escape.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/escape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/escape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the characters "&", "<", ">", '"', and "'" in `str` to their corresponding HTML entities.
+ * For example, "<" becomes "&lt;".
+ *
+ * @param {string} str  The string to escape.
+ * @returns {string} Returns the escaped string.
+ *
+ * @example
+ * escape('This is a <div> element.'); // returns 'This is a &lt;div&gt; element.'
+ * escape('This is a "quote"'); // returns 'This is a &quot;quote&quot;'
+ * escape("This is a 'quote'"); // returns 'This is a &#39;quote&#39;'
+ * escape('This is a & symbol'); // returns 'This is a &amp; symbol'
+ */
+declare function escape(string?: string): string;
+
+export { escape };
Index: node_modules/es-toolkit/dist/compat/string/escape.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/escape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/escape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const escape$1 = require('../../string/escape.js');
+const toString = require('../util/toString.js');
+
+function escape(string) {
+    return escape$1.escape(toString.toString(string));
+}
+
+exports.escape = escape;
Index: node_modules/es-toolkit/dist/compat/string/escape.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/escape.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/escape.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { escape as escape$1 } from '../../string/escape.mjs';
+import { toString } from '../util/toString.mjs';
+
+function escape(string) {
+    return escape$1(toString(string));
+}
+
+export { escape };
Index: node_modules/es-toolkit/dist/compat/string/escapeRegExp.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/escapeRegExp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/escapeRegExp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Escapes the RegExp special characters "^", "$", "\\", ".", "*", "+", "?", "(", ")", "[", "]", "{", "}", and "|" in `str`.
+ *
+ * @param {string} str The string to escape.
+ * @returns {string} Returns the escaped string.
+ *
+ * @example
+ * import { escapeRegExp } from 'es-toolkit/string';
+ *
+ * escapeRegExp('[es-toolkit](https://es-toolkit.dev/)'); // returns '\[es-toolkit\]\(https://es-toolkit\.dev/\)'
+ */
+declare function escapeRegExp(str?: string): string;
+
+export { escapeRegExp };
Index: node_modules/es-toolkit/dist/compat/string/escapeRegExp.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/escapeRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/escapeRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Escapes the RegExp special characters "^", "$", "\\", ".", "*", "+", "?", "(", ")", "[", "]", "{", "}", and "|" in `str`.
+ *
+ * @param {string} str The string to escape.
+ * @returns {string} Returns the escaped string.
+ *
+ * @example
+ * import { escapeRegExp } from 'es-toolkit/string';
+ *
+ * escapeRegExp('[es-toolkit](https://es-toolkit.dev/)'); // returns '\[es-toolkit\]\(https://es-toolkit\.dev/\)'
+ */
+declare function escapeRegExp(str?: string): string;
+
+export { escapeRegExp };
Index: node_modules/es-toolkit/dist/compat/string/escapeRegExp.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/escapeRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/escapeRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const escapeRegExp$1 = require('../../string/escapeRegExp.js');
+const toString = require('../util/toString.js');
+
+function escapeRegExp(str) {
+    return escapeRegExp$1.escapeRegExp(toString.toString(str));
+}
+
+exports.escapeRegExp = escapeRegExp;
Index: node_modules/es-toolkit/dist/compat/string/escapeRegExp.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/escapeRegExp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/escapeRegExp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { escapeRegExp as escapeRegExp$1 } from '../../string/escapeRegExp.mjs';
+import { toString } from '../util/toString.mjs';
+
+function escapeRegExp(str) {
+    return escapeRegExp$1(toString(str));
+}
+
+export { escapeRegExp };
Index: node_modules/es-toolkit/dist/compat/string/kebabCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/kebabCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/kebabCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to kebab case.
+ *
+ * Kebab case is the naming convention in which each word is written in lowercase and separated by a dash (-) character.
+ *
+ * @param {string | object} str - The string that is to be changed to kebab case.
+ * @returns {string} - The converted string to kebab case.
+ *
+ * @example
+ * const convertedStr1 = kebabCase('camelCase') // returns 'camel-case'
+ * const convertedStr2 = kebabCase('some whitespace') // returns 'some-whitespace'
+ * const convertedStr3 = kebabCase('hyphen-text') // returns 'hyphen-text'
+ * const convertedStr4 = kebabCase('HTTPRequest') // returns 'http-request'
+ */
+declare function kebabCase(str?: string): string;
+
+export { kebabCase };
Index: node_modules/es-toolkit/dist/compat/string/kebabCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/kebabCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/kebabCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to kebab case.
+ *
+ * Kebab case is the naming convention in which each word is written in lowercase and separated by a dash (-) character.
+ *
+ * @param {string | object} str - The string that is to be changed to kebab case.
+ * @returns {string} - The converted string to kebab case.
+ *
+ * @example
+ * const convertedStr1 = kebabCase('camelCase') // returns 'camel-case'
+ * const convertedStr2 = kebabCase('some whitespace') // returns 'some-whitespace'
+ * const convertedStr3 = kebabCase('hyphen-text') // returns 'hyphen-text'
+ * const convertedStr4 = kebabCase('HTTPRequest') // returns 'http-request'
+ */
+declare function kebabCase(str?: string): string;
+
+export { kebabCase };
Index: node_modules/es-toolkit/dist/compat/string/kebabCase.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/kebabCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/kebabCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const kebabCase$1 = require('../../string/kebabCase.js');
+const normalizeForCase = require('../_internal/normalizeForCase.js');
+
+function kebabCase(str) {
+    return kebabCase$1.kebabCase(normalizeForCase.normalizeForCase(str));
+}
+
+exports.kebabCase = kebabCase;
Index: node_modules/es-toolkit/dist/compat/string/kebabCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/kebabCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/kebabCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { kebabCase as kebabCase$1 } from '../../string/kebabCase.mjs';
+import { normalizeForCase } from '../_internal/normalizeForCase.mjs';
+
+function kebabCase(str) {
+    return kebabCase$1(normalizeForCase(str));
+}
+
+export { kebabCase };
Index: node_modules/es-toolkit/dist/compat/string/lowerCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/lowerCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/lowerCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to lower case.
+ *
+ * Lower case is the naming convention in which each word is written in lowercase and separated by an space ( ) character.
+ *
+ * @param {string | object} str - The string that is to be changed to lower case.
+ * @returns {string} - The converted string to lower case.
+ *
+ * @example
+ * const convertedStr1 = lowerCase('camelCase') // returns 'camel case'
+ * const convertedStr2 = lowerCase('some whitespace') // returns 'some whitespace'
+ * const convertedStr3 = lowerCase('hyphen-text') // returns 'hyphen text'
+ * const convertedStr4 = lowerCase('HTTPRequest') // returns 'http request'
+ */
+declare function lowerCase(str?: string): string;
+
+export { lowerCase };
Index: node_modules/es-toolkit/dist/compat/string/lowerCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/lowerCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/lowerCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to lower case.
+ *
+ * Lower case is the naming convention in which each word is written in lowercase and separated by an space ( ) character.
+ *
+ * @param {string | object} str - The string that is to be changed to lower case.
+ * @returns {string} - The converted string to lower case.
+ *
+ * @example
+ * const convertedStr1 = lowerCase('camelCase') // returns 'camel case'
+ * const convertedStr2 = lowerCase('some whitespace') // returns 'some whitespace'
+ * const convertedStr3 = lowerCase('hyphen-text') // returns 'hyphen text'
+ * const convertedStr4 = lowerCase('HTTPRequest') // returns 'http request'
+ */
+declare function lowerCase(str?: string): string;
+
+export { lowerCase };
Index: node_modules/es-toolkit/dist/compat/string/lowerCase.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/lowerCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/lowerCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const lowerCase$1 = require('../../string/lowerCase.js');
+const normalizeForCase = require('../_internal/normalizeForCase.js');
+
+function lowerCase(str) {
+    return lowerCase$1.lowerCase(normalizeForCase.normalizeForCase(str));
+}
+
+exports.lowerCase = lowerCase;
Index: node_modules/es-toolkit/dist/compat/string/lowerCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/lowerCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/lowerCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { lowerCase as lowerCase$1 } from '../../string/lowerCase.mjs';
+import { normalizeForCase } from '../_internal/normalizeForCase.mjs';
+
+function lowerCase(str) {
+    return lowerCase$1(normalizeForCase(str));
+}
+
+export { lowerCase };
Index: node_modules/es-toolkit/dist/compat/string/lowerFirst.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/lowerFirst.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/lowerFirst.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to lower case.
+ *
+ * @param {string} str - The string that is to be changed
+ * @returns {string} - The converted string.
+ *
+ * @example
+ * const convertedStr1 = lowerCase('fred') // returns 'fred'
+ * const convertedStr2 = lowerCase('Fred') // returns 'fred'
+ * const convertedStr3 = lowerCase('FRED') // returns 'fRED'
+ */
+declare function lowerFirst<T extends string = string>(str?: T): Uncapitalize<T>;
+
+export { lowerFirst };
Index: node_modules/es-toolkit/dist/compat/string/lowerFirst.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/lowerFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/lowerFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to lower case.
+ *
+ * @param {string} str - The string that is to be changed
+ * @returns {string} - The converted string.
+ *
+ * @example
+ * const convertedStr1 = lowerCase('fred') // returns 'fred'
+ * const convertedStr2 = lowerCase('Fred') // returns 'fred'
+ * const convertedStr3 = lowerCase('FRED') // returns 'fRED'
+ */
+declare function lowerFirst<T extends string = string>(str?: T): Uncapitalize<T>;
+
+export { lowerFirst };
Index: node_modules/es-toolkit/dist/compat/string/lowerFirst.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/lowerFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/lowerFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const lowerFirst$1 = require('../../string/lowerFirst.js');
+const toString = require('../util/toString.js');
+
+function lowerFirst(str) {
+    return lowerFirst$1.lowerFirst(toString.toString(str));
+}
+
+exports.lowerFirst = lowerFirst;
Index: node_modules/es-toolkit/dist/compat/string/lowerFirst.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/lowerFirst.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/lowerFirst.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { lowerFirst as lowerFirst$1 } from '../../string/lowerFirst.mjs';
+import { toString } from '../util/toString.mjs';
+
+function lowerFirst(str) {
+    return lowerFirst$1(toString(str));
+}
+
+export { lowerFirst };
Index: node_modules/es-toolkit/dist/compat/string/pad.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/pad.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/pad.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Pads string on the left and right sides if it's shorter than length. Padding characters are truncated if they can't be evenly divided by length.
+ * If the length is less than or equal to the original string's length, or if the padding character is an empty string, the original string is returned unchanged.
+ *
+ * @param {string} str - The string to pad.
+ * @param {number} [length] - The length of the resulting string once padded.
+ * @param {string} [chars] - The character(s) to use for padding.
+ * @returns {string} - The padded string, or the original string if padding is not required.
+ *
+ * @example
+ * const result1 = pad('abc', 8);         // result will be '  abc   '
+ * const result2 = pad('abc', 8, '_-');   // result will be '_-abc_-_'
+ * const result3 = pad('abc', 3);         // result will be 'abc'
+ * const result4 = pad('abc', 2);         // result will be 'abc'
+ *
+ */
+declare function pad(str?: string, length?: number, chars?: string): string;
+
+export { pad };
Index: node_modules/es-toolkit/dist/compat/string/pad.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/pad.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/pad.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Pads string on the left and right sides if it's shorter than length. Padding characters are truncated if they can't be evenly divided by length.
+ * If the length is less than or equal to the original string's length, or if the padding character is an empty string, the original string is returned unchanged.
+ *
+ * @param {string} str - The string to pad.
+ * @param {number} [length] - The length of the resulting string once padded.
+ * @param {string} [chars] - The character(s) to use for padding.
+ * @returns {string} - The padded string, or the original string if padding is not required.
+ *
+ * @example
+ * const result1 = pad('abc', 8);         // result will be '  abc   '
+ * const result2 = pad('abc', 8, '_-');   // result will be '_-abc_-_'
+ * const result3 = pad('abc', 3);         // result will be 'abc'
+ * const result4 = pad('abc', 2);         // result will be 'abc'
+ *
+ */
+declare function pad(str?: string, length?: number, chars?: string): string;
+
+export { pad };
Index: node_modules/es-toolkit/dist/compat/string/pad.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/pad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/pad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const pad$1 = require('../../string/pad.js');
+const toString = require('../util/toString.js');
+
+function pad(str, length, chars) {
+    return pad$1.pad(toString.toString(str), length, chars);
+}
+
+exports.pad = pad;
Index: node_modules/es-toolkit/dist/compat/string/pad.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/pad.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/pad.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { pad as pad$1 } from '../../string/pad.mjs';
+import { toString } from '../util/toString.mjs';
+
+function pad(str, length, chars) {
+    return pad$1(toString(str), length, chars);
+}
+
+export { pad };
Index: node_modules/es-toolkit/dist/compat/string/padEnd.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/padEnd.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/padEnd.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Pads the end of a string with a given character until it reaches the specified length.
+ *
+ * If the length is less than or equal to the original string's length, or if the padding character is an empty string,
+ * the original string is returned unchanged.
+ *
+ * @param {string} str - The string to pad.
+ * @param {number} [length] - The length of the resulting string once padded.
+ * @param {string} [chars] - The character(s) to use for padding.
+ * @returns {string} - The padded string, or the original string if padding is not required.
+ *
+ * @example
+ * const result1 = padEnd('abc', 6);          // result will be 'abc   '
+ * const result2 = padEnd('abc', 6, '_-');    // result will be 'abc_-_'
+ * const result3 = padEnd('abc', 3);          // result will be 'abc'
+ * const result4 = padEnd('abc', 2);          // result will be 'abc'
+ */
+declare function padEnd(str?: string, length?: number, chars?: string): string;
+
+export { padEnd };
Index: node_modules/es-toolkit/dist/compat/string/padEnd.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/padEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/padEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Pads the end of a string with a given character until it reaches the specified length.
+ *
+ * If the length is less than or equal to the original string's length, or if the padding character is an empty string,
+ * the original string is returned unchanged.
+ *
+ * @param {string} str - The string to pad.
+ * @param {number} [length] - The length of the resulting string once padded.
+ * @param {string} [chars] - The character(s) to use for padding.
+ * @returns {string} - The padded string, or the original string if padding is not required.
+ *
+ * @example
+ * const result1 = padEnd('abc', 6);          // result will be 'abc   '
+ * const result2 = padEnd('abc', 6, '_-');    // result will be 'abc_-_'
+ * const result3 = padEnd('abc', 3);          // result will be 'abc'
+ * const result4 = padEnd('abc', 2);          // result will be 'abc'
+ */
+declare function padEnd(str?: string, length?: number, chars?: string): string;
+
+export { padEnd };
Index: node_modules/es-toolkit/dist/compat/string/padEnd.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/padEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/padEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toString = require('../util/toString.js');
+
+function padEnd(str, length = 0, chars = ' ') {
+    return toString.toString(str).padEnd(length, chars);
+}
+
+exports.padEnd = padEnd;
Index: node_modules/es-toolkit/dist/compat/string/padEnd.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/padEnd.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/padEnd.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { toString } from '../util/toString.mjs';
+
+function padEnd(str, length = 0, chars = ' ') {
+    return toString(str).padEnd(length, chars);
+}
+
+export { padEnd };
Index: node_modules/es-toolkit/dist/compat/string/padStart.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/padStart.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/padStart.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Pads the start of a string with a given character until it reaches the specified length.
+ *
+ * If the length is less than or equal to the original string's length, or if the padding character is an empty string,
+ * the original string is returned unchanged.
+ *
+ * @param {string} str - The string to pad.
+ * @param {number} [length] - The length of the resulting string once padded.
+ * @param {string} [chars] - The character(s) to use for padding.
+ * @returns {string} - The padded string, or the original string if padding is not required.
+ *
+ * @example
+ * const result1 = padStart('abc', 6);          // result will be '   abc'
+ * const result2 = padStart('abc', 6, '_-');    // result will be '_-_abc'
+ * const result3 = padStart('abc', 3);          // result will be 'abc'
+ * const result4 = padStart('abc', 2);          // result will be 'abc'
+ */
+declare function padStart(str?: string, length?: number, chars?: string): string;
+
+export { padStart };
Index: node_modules/es-toolkit/dist/compat/string/padStart.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/padStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/padStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Pads the start of a string with a given character until it reaches the specified length.
+ *
+ * If the length is less than or equal to the original string's length, or if the padding character is an empty string,
+ * the original string is returned unchanged.
+ *
+ * @param {string} str - The string to pad.
+ * @param {number} [length] - The length of the resulting string once padded.
+ * @param {string} [chars] - The character(s) to use for padding.
+ * @returns {string} - The padded string, or the original string if padding is not required.
+ *
+ * @example
+ * const result1 = padStart('abc', 6);          // result will be '   abc'
+ * const result2 = padStart('abc', 6, '_-');    // result will be '_-_abc'
+ * const result3 = padStart('abc', 3);          // result will be 'abc'
+ * const result4 = padStart('abc', 2);          // result will be 'abc'
+ */
+declare function padStart(str?: string, length?: number, chars?: string): string;
+
+export { padStart };
Index: node_modules/es-toolkit/dist/compat/string/padStart.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/padStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/padStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toString = require('../util/toString.js');
+
+function padStart(str, length = 0, chars = ' ') {
+    return toString.toString(str).padStart(length, chars);
+}
+
+exports.padStart = padStart;
Index: node_modules/es-toolkit/dist/compat/string/padStart.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/padStart.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/padStart.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { toString } from '../util/toString.mjs';
+
+function padStart(str, length = 0, chars = ' ') {
+    return toString(str).padStart(length, chars);
+}
+
+export { padStart };
Index: node_modules/es-toolkit/dist/compat/string/repeat.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/repeat.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/repeat.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Repeats the given string n times.
+ *
+ * If n is less than 1, an empty string is returned, or if the string is an empty string,
+ * the original string is returned unchanged.
+ *
+ * @param {string} str - The string to repeat.
+ * @param {number} n - The number of times to repeat the string.
+ * @returns {string} - The repeated string, or an empty string if n is less than 1.
+ *
+ * @example
+ * repeat('abc', 0); // ''
+ * repeat('abc', 2); // 'abcabc'
+ */
+declare function repeat(str?: string, n?: number): string;
+
+export { repeat };
Index: node_modules/es-toolkit/dist/compat/string/repeat.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/repeat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/repeat.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Repeats the given string n times.
+ *
+ * If n is less than 1, an empty string is returned, or if the string is an empty string,
+ * the original string is returned unchanged.
+ *
+ * @param {string} str - The string to repeat.
+ * @param {number} n - The number of times to repeat the string.
+ * @returns {string} - The repeated string, or an empty string if n is less than 1.
+ *
+ * @example
+ * repeat('abc', 0); // ''
+ * repeat('abc', 2); // 'abcabc'
+ */
+declare function repeat(str?: string, n?: number): string;
+
+export { repeat };
Index: node_modules/es-toolkit/dist/compat/string/repeat.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/repeat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/repeat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isIterateeCall = require('../_internal/isIterateeCall.js');
+const toInteger = require('../util/toInteger.js');
+const toString = require('../util/toString.js');
+
+function repeat(str, n, guard) {
+    if (guard ? isIterateeCall.isIterateeCall(str, n, guard) : n === undefined) {
+        n = 1;
+    }
+    else {
+        n = toInteger.toInteger(n);
+    }
+    return toString.toString(str).repeat(n);
+}
+
+exports.repeat = repeat;
Index: node_modules/es-toolkit/dist/compat/string/repeat.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/repeat.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/repeat.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { isIterateeCall } from '../_internal/isIterateeCall.mjs';
+import { toInteger } from '../util/toInteger.mjs';
+import { toString } from '../util/toString.mjs';
+
+function repeat(str, n, guard) {
+    if (guard ? isIterateeCall(str, n, guard) : n === undefined) {
+        n = 1;
+    }
+    else {
+        n = toInteger(n);
+    }
+    return toString(str).repeat(n);
+}
+
+export { repeat };
Index: node_modules/es-toolkit/dist/compat/string/replace.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/replace.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/replace.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+type ReplaceFunction = (match: string, ...args: any[]) => string;
+declare function replace(string: string, pattern: RegExp | string, replacement: ReplaceFunction | string): string;
+declare function replace(pattern: RegExp | string, replacement: ReplaceFunction | string): string;
+
+export { replace };
Index: node_modules/es-toolkit/dist/compat/string/replace.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/replace.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/replace.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+type ReplaceFunction = (match: string, ...args: any[]) => string;
+declare function replace(string: string, pattern: RegExp | string, replacement: ReplaceFunction | string): string;
+declare function replace(pattern: RegExp | string, replacement: ReplaceFunction | string): string;
+
+export { replace };
Index: node_modules/es-toolkit/dist/compat/string/replace.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/replace.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/replace.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toString = require('../util/toString.js');
+
+function replace(target, pattern, replacement) {
+    if (arguments.length < 3) {
+        return toString.toString(target);
+    }
+    return toString.toString(target).replace(pattern, replacement);
+}
+
+exports.replace = replace;
Index: node_modules/es-toolkit/dist/compat/string/replace.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/replace.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/replace.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { toString } from '../util/toString.mjs';
+
+function replace(target, pattern, replacement) {
+    if (arguments.length < 3) {
+        return toString(target);
+    }
+    return toString(target).replace(pattern, replacement);
+}
+
+export { replace };
Index: node_modules/es-toolkit/dist/compat/string/snakeCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/snakeCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/snakeCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to snake case.
+ *
+ * Snake case is the naming convention in which each word is written in lowercase and separated by an underscore (_) character.
+ *
+ * @param {string | object} str - The string that is to be changed to snake case.
+ * @returns {string} - The converted string to snake case.
+ *
+ * @example
+ * const convertedStr1 = snakeCase('camelCase') // returns 'camel_case'
+ * const convertedStr2 = snakeCase('some whitespace') // returns 'some_whitespace'
+ * const convertedStr3 = snakeCase('hyphen-text') // returns 'hyphen_text'
+ * const convertedStr4 = snakeCase('HTTPRequest') // returns 'http_request'
+ */
+declare function snakeCase(str?: string): string;
+
+export { snakeCase };
Index: node_modules/es-toolkit/dist/compat/string/snakeCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/snakeCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/snakeCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to snake case.
+ *
+ * Snake case is the naming convention in which each word is written in lowercase and separated by an underscore (_) character.
+ *
+ * @param {string | object} str - The string that is to be changed to snake case.
+ * @returns {string} - The converted string to snake case.
+ *
+ * @example
+ * const convertedStr1 = snakeCase('camelCase') // returns 'camel_case'
+ * const convertedStr2 = snakeCase('some whitespace') // returns 'some_whitespace'
+ * const convertedStr3 = snakeCase('hyphen-text') // returns 'hyphen_text'
+ * const convertedStr4 = snakeCase('HTTPRequest') // returns 'http_request'
+ */
+declare function snakeCase(str?: string): string;
+
+export { snakeCase };
Index: node_modules/es-toolkit/dist/compat/string/snakeCase.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/snakeCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/snakeCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const snakeCase$1 = require('../../string/snakeCase.js');
+const normalizeForCase = require('../_internal/normalizeForCase.js');
+
+function snakeCase(str) {
+    return snakeCase$1.snakeCase(normalizeForCase.normalizeForCase(str));
+}
+
+exports.snakeCase = snakeCase;
Index: node_modules/es-toolkit/dist/compat/string/snakeCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/snakeCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/snakeCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { snakeCase as snakeCase$1 } from '../../string/snakeCase.mjs';
+import { normalizeForCase } from '../_internal/normalizeForCase.mjs';
+
+function snakeCase(str) {
+    return snakeCase$1(normalizeForCase(str));
+}
+
+export { snakeCase };
Index: node_modules/es-toolkit/dist/compat/string/split.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/split.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/split.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+/**
+ * Splits the input string by the specified `separator`
+ * and returns a new array containing the split segments.
+ *
+ * @param {string | null | undefined} [string=''] The string to split.
+ * @param {RegExp|string} [separator] The separator pattern to split by.
+ * @param {number} [limit] The length to truncate results to.
+ * @returns {Array} Returns the string segments.
+ *
+ * @example
+ * split('a-b-c', '-');
+ * // => ['a', 'b', 'c']
+ *
+ * split('a-b-c', '-', 2);
+ * // => ['a', 'b']
+ */
+declare function split(string: string | null | undefined, separator?: RegExp | string, limit?: number): string[];
+/**
+ * Splits the input string by the specified `separator`
+ * and returns a new array containing the split segments.
+ *
+ * @param {string | null | undefined} [string=''] The string to split.
+ * @param {RegExp|string} [separator] The separator pattern to split by.
+ * @param {number} [limit] The length to truncate results to.
+ * @returns {Array} Returns the string segments.
+ *
+ * @example
+ * split('a-b-c', '-');
+ * // => ['a', 'b', 'c']
+ *
+ * split('a-b-c', '-', 2);
+ * // => ['a', 'b']
+ */
+declare function split(string: string | null | undefined, index: string | number, guard: object): string[];
+
+export { split };
Index: node_modules/es-toolkit/dist/compat/string/split.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/split.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/split.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+/**
+ * Splits the input string by the specified `separator`
+ * and returns a new array containing the split segments.
+ *
+ * @param {string | null | undefined} [string=''] The string to split.
+ * @param {RegExp|string} [separator] The separator pattern to split by.
+ * @param {number} [limit] The length to truncate results to.
+ * @returns {Array} Returns the string segments.
+ *
+ * @example
+ * split('a-b-c', '-');
+ * // => ['a', 'b', 'c']
+ *
+ * split('a-b-c', '-', 2);
+ * // => ['a', 'b']
+ */
+declare function split(string: string | null | undefined, separator?: RegExp | string, limit?: number): string[];
+/**
+ * Splits the input string by the specified `separator`
+ * and returns a new array containing the split segments.
+ *
+ * @param {string | null | undefined} [string=''] The string to split.
+ * @param {RegExp|string} [separator] The separator pattern to split by.
+ * @param {number} [limit] The length to truncate results to.
+ * @returns {Array} Returns the string segments.
+ *
+ * @example
+ * split('a-b-c', '-');
+ * // => ['a', 'b', 'c']
+ *
+ * split('a-b-c', '-', 2);
+ * // => ['a', 'b']
+ */
+declare function split(string: string | null | undefined, index: string | number, guard: object): string[];
+
+export { split };
Index: node_modules/es-toolkit/dist/compat/string/split.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/split.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/split.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toString = require('../util/toString.js');
+
+function split(string, separator, limit) {
+    return toString.toString(string).split(separator, limit);
+}
+
+exports.split = split;
Index: node_modules/es-toolkit/dist/compat/string/split.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/split.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/split.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { toString } from '../util/toString.mjs';
+
+function split(string, separator, limit) {
+    return toString(string).split(separator, limit);
+}
+
+export { split };
Index: node_modules/es-toolkit/dist/compat/string/startCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/startCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/startCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the first character of each word in a string to uppercase and the remaining characters to lowercase.
+ *
+ * Start case is the naming convention in which each word is written with an initial capital letter.
+ * @param {string | object} str - The string to convert.
+ * @returns {string} The converted string.
+ *
+ * @example
+ * const result1 = startCase('hello world');  // result will be 'Hello World'
+ * const result2 = startCase('HELLO WORLD');  // result will be 'HELLO WORLD'
+ * const result3 = startCase('hello-world');  // result will be 'Hello World'
+ * const result4 = startCase('hello_world');  // result will be 'Hello World'
+ */
+declare function startCase(str?: string): string;
+
+export { startCase };
Index: node_modules/es-toolkit/dist/compat/string/startCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/startCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/startCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the first character of each word in a string to uppercase and the remaining characters to lowercase.
+ *
+ * Start case is the naming convention in which each word is written with an initial capital letter.
+ * @param {string | object} str - The string to convert.
+ * @returns {string} The converted string.
+ *
+ * @example
+ * const result1 = startCase('hello world');  // result will be 'Hello World'
+ * const result2 = startCase('HELLO WORLD');  // result will be 'HELLO WORLD'
+ * const result3 = startCase('hello-world');  // result will be 'Hello World'
+ * const result4 = startCase('hello_world');  // result will be 'Hello World'
+ */
+declare function startCase(str?: string): string;
+
+export { startCase };
Index: node_modules/es-toolkit/dist/compat/string/startCase.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/startCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/startCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const words = require('../../string/words.js');
+const normalizeForCase = require('../_internal/normalizeForCase.js');
+
+function startCase(str) {
+    const words$1 = words.words(normalizeForCase.normalizeForCase(str).trim());
+    let result = '';
+    for (let i = 0; i < words$1.length; i++) {
+        const word = words$1[i];
+        if (result) {
+            result += ' ';
+        }
+        if (word === word.toUpperCase()) {
+            result += word;
+        }
+        else {
+            result += word[0].toUpperCase() + word.slice(1).toLowerCase();
+        }
+    }
+    return result;
+}
+
+exports.startCase = startCase;
Index: node_modules/es-toolkit/dist/compat/string/startCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/startCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/startCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { words } from '../../string/words.mjs';
+import { normalizeForCase } from '../_internal/normalizeForCase.mjs';
+
+function startCase(str) {
+    const words$1 = words(normalizeForCase(str).trim());
+    let result = '';
+    for (let i = 0; i < words$1.length; i++) {
+        const word = words$1[i];
+        if (result) {
+            result += ' ';
+        }
+        if (word === word.toUpperCase()) {
+            result += word;
+        }
+        else {
+            result += word[0].toUpperCase() + word.slice(1).toLowerCase();
+        }
+    }
+    return result;
+}
+
+export { startCase };
Index: node_modules/es-toolkit/dist/compat/string/startsWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/startsWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/startsWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a string contains another string at the beginning of the string.
+ *
+ * Checks if one string startsWith another string. Optional position parameter to start searching from a certain index.
+ *
+ * @param {string} str - The string that might contain the target string.
+ * @param {string} target - The string to search for.
+ * @param {number} position - An optional offset to start searching in the str string
+ * @returns {boolean} - True if the str string starts with the target string.
+ *
+ * @example
+ * const isPrefix = startsWith('fooBar', 'foo') // returns true
+ * const isPrefix = startsWith('fooBar', 'bar') // returns false
+ * const isPrefix = startsWith('fooBar', 'abc') // returns false
+ * const isPrefix = startsWith('fooBar', 'Bar', 2) // returns true
+ * const isPrefix = startsWith('fooBar', 'Bar', 5) // returns false
+ */
+declare function startsWith(str?: string, target?: string, position?: number): boolean;
+
+export { startsWith };
Index: node_modules/es-toolkit/dist/compat/string/startsWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/startsWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/startsWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a string contains another string at the beginning of the string.
+ *
+ * Checks if one string startsWith another string. Optional position parameter to start searching from a certain index.
+ *
+ * @param {string} str - The string that might contain the target string.
+ * @param {string} target - The string to search for.
+ * @param {number} position - An optional offset to start searching in the str string
+ * @returns {boolean} - True if the str string starts with the target string.
+ *
+ * @example
+ * const isPrefix = startsWith('fooBar', 'foo') // returns true
+ * const isPrefix = startsWith('fooBar', 'bar') // returns false
+ * const isPrefix = startsWith('fooBar', 'abc') // returns false
+ * const isPrefix = startsWith('fooBar', 'Bar', 2) // returns true
+ * const isPrefix = startsWith('fooBar', 'Bar', 5) // returns false
+ */
+declare function startsWith(str?: string, target?: string, position?: number): boolean;
+
+export { startsWith };
Index: node_modules/es-toolkit/dist/compat/string/startsWith.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/startsWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/startsWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function startsWith(str, target, position) {
+    if (str == null || target == null) {
+        return false;
+    }
+    if (position == null) {
+        position = 0;
+    }
+    return str.startsWith(target, position);
+}
+
+exports.startsWith = startsWith;
Index: node_modules/es-toolkit/dist/compat/string/startsWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/startsWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/startsWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function startsWith(str, target, position) {
+    if (str == null || target == null) {
+        return false;
+    }
+    if (position == null) {
+        position = 0;
+    }
+    return str.startsWith(target, position);
+}
+
+export { startsWith };
Index: node_modules/es-toolkit/dist/compat/string/template.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/template.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/template.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import { escape } from './escape.mjs';
+
+declare const templateSettings: {
+    escape: RegExp;
+    evaluate: RegExp;
+    interpolate: RegExp;
+    variable: string;
+    imports: {
+        _: {
+            escape: typeof escape;
+            template: typeof template;
+        };
+    };
+};
+interface TemplateOptions {
+    escape?: RegExp | null | undefined;
+    evaluate?: RegExp | null | undefined;
+    interpolate?: RegExp | null | undefined;
+    variable?: string | undefined;
+    imports?: Record<string, any> | undefined;
+    sourceURL?: string;
+}
+interface TemplateExecutor {
+    (data?: object): string;
+    source: string;
+}
+declare function template(string?: string, options?: TemplateOptions): TemplateExecutor;
+
+export { template, templateSettings };
Index: node_modules/es-toolkit/dist/compat/string/template.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/template.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/template.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import { escape } from './escape.js';
+
+declare const templateSettings: {
+    escape: RegExp;
+    evaluate: RegExp;
+    interpolate: RegExp;
+    variable: string;
+    imports: {
+        _: {
+            escape: typeof escape;
+            template: typeof template;
+        };
+    };
+};
+interface TemplateOptions {
+    escape?: RegExp | null | undefined;
+    evaluate?: RegExp | null | undefined;
+    interpolate?: RegExp | null | undefined;
+    variable?: string | undefined;
+    imports?: Record<string, any> | undefined;
+    sourceURL?: string;
+}
+interface TemplateExecutor {
+    (data?: object): string;
+    source: string;
+}
+declare function template(string?: string, options?: TemplateOptions): TemplateExecutor;
+
+export { template, templateSettings };
Index: node_modules/es-toolkit/dist/compat/string/template.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/template.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/template.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,91 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const escape = require('./escape.js');
+const attempt = require('../function/attempt.js');
+const defaults = require('../object/defaults.js');
+const toString = require('../util/toString.js');
+
+const esTemplateRegExp = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+const unEscapedRegExp = /['\n\r\u2028\u2029\\]/g;
+const noMatchExp = /($^)/;
+const escapeMap = new Map([
+    ['\\', '\\'],
+    ["'", "'"],
+    ['\n', 'n'],
+    ['\r', 'r'],
+    ['\u2028', 'u2028'],
+    ['\u2029', 'u2029'],
+]);
+function escapeString(match) {
+    return `\\${escapeMap.get(match)}`;
+}
+const templateSettings = {
+    escape: /<%-([\s\S]+?)%>/g,
+    evaluate: /<%([\s\S]+?)%>/g,
+    interpolate: /<%=([\s\S]+?)%>/g,
+    variable: '',
+    imports: {
+        _: {
+            escape: escape.escape,
+            template,
+        },
+    },
+};
+function template(string, options, guard) {
+    string = toString.toString(string);
+    if (guard) {
+        options = templateSettings;
+    }
+    options = defaults.defaults({ ...options }, templateSettings);
+    const delimitersRegExp = new RegExp([
+        options.escape?.source ?? noMatchExp.source,
+        options.interpolate?.source ?? noMatchExp.source,
+        options.interpolate ? esTemplateRegExp.source : noMatchExp.source,
+        options.evaluate?.source ?? noMatchExp.source,
+        '$',
+    ].join('|'), 'g');
+    let lastIndex = 0;
+    let isEvaluated = false;
+    let source = `__p += ''`;
+    for (const match of string.matchAll(delimitersRegExp)) {
+        const [fullMatch, escapeValue, interpolateValue, esTemplateValue, evaluateValue] = match;
+        const { index } = match;
+        source += ` + '${string.slice(lastIndex, index).replace(unEscapedRegExp, escapeString)}'`;
+        if (escapeValue) {
+            source += ` + _.escape(${escapeValue})`;
+        }
+        if (interpolateValue) {
+            source += ` + ((${interpolateValue}) == null ? '' : ${interpolateValue})`;
+        }
+        else if (esTemplateValue) {
+            source += ` + ((${esTemplateValue}) == null ? '' : ${esTemplateValue})`;
+        }
+        if (evaluateValue) {
+            source += `;\n${evaluateValue};\n __p += ''`;
+            isEvaluated = true;
+        }
+        lastIndex = index + fullMatch.length;
+    }
+    const imports = defaults.defaults({ ...options.imports }, templateSettings.imports);
+    const importsKeys = Object.keys(imports);
+    const importValues = Object.values(imports);
+    const sourceURL = `//# sourceURL=${options.sourceURL ? String(options.sourceURL).replace(/[\r\n]/g, ' ') : `es-toolkit.templateSource[${Date.now()}]`}\n`;
+    const compiledFunction = `function(${options.variable || 'obj'}) {
+    let __p = '';
+    ${options.variable ? '' : 'if (obj == null) { obj = {}; }'}
+    ${isEvaluated ? `function print() { __p += Array.prototype.join.call(arguments, ''); }` : ''}
+    ${options.variable ? source : `with(obj) {\n${source}\n}`}
+    return __p;
+  }`;
+    const result = attempt.attempt(() => new Function(...importsKeys, `${sourceURL}return ${compiledFunction}`)(...importValues));
+    result.source = compiledFunction;
+    if (result instanceof Error) {
+        throw result;
+    }
+    return result;
+}
+
+exports.template = template;
+exports.templateSettings = templateSettings;
Index: node_modules/es-toolkit/dist/compat/string/template.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/template.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/template.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+import { escape } from './escape.mjs';
+import { attempt } from '../function/attempt.mjs';
+import { defaults } from '../object/defaults.mjs';
+import { toString } from '../util/toString.mjs';
+
+const esTemplateRegExp = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+const unEscapedRegExp = /['\n\r\u2028\u2029\\]/g;
+const noMatchExp = /($^)/;
+const escapeMap = new Map([
+    ['\\', '\\'],
+    ["'", "'"],
+    ['\n', 'n'],
+    ['\r', 'r'],
+    ['\u2028', 'u2028'],
+    ['\u2029', 'u2029'],
+]);
+function escapeString(match) {
+    return `\\${escapeMap.get(match)}`;
+}
+const templateSettings = {
+    escape: /<%-([\s\S]+?)%>/g,
+    evaluate: /<%([\s\S]+?)%>/g,
+    interpolate: /<%=([\s\S]+?)%>/g,
+    variable: '',
+    imports: {
+        _: {
+            escape,
+            template,
+        },
+    },
+};
+function template(string, options, guard) {
+    string = toString(string);
+    if (guard) {
+        options = templateSettings;
+    }
+    options = defaults({ ...options }, templateSettings);
+    const delimitersRegExp = new RegExp([
+        options.escape?.source ?? noMatchExp.source,
+        options.interpolate?.source ?? noMatchExp.source,
+        options.interpolate ? esTemplateRegExp.source : noMatchExp.source,
+        options.evaluate?.source ?? noMatchExp.source,
+        '$',
+    ].join('|'), 'g');
+    let lastIndex = 0;
+    let isEvaluated = false;
+    let source = `__p += ''`;
+    for (const match of string.matchAll(delimitersRegExp)) {
+        const [fullMatch, escapeValue, interpolateValue, esTemplateValue, evaluateValue] = match;
+        const { index } = match;
+        source += ` + '${string.slice(lastIndex, index).replace(unEscapedRegExp, escapeString)}'`;
+        if (escapeValue) {
+            source += ` + _.escape(${escapeValue})`;
+        }
+        if (interpolateValue) {
+            source += ` + ((${interpolateValue}) == null ? '' : ${interpolateValue})`;
+        }
+        else if (esTemplateValue) {
+            source += ` + ((${esTemplateValue}) == null ? '' : ${esTemplateValue})`;
+        }
+        if (evaluateValue) {
+            source += `;\n${evaluateValue};\n __p += ''`;
+            isEvaluated = true;
+        }
+        lastIndex = index + fullMatch.length;
+    }
+    const imports = defaults({ ...options.imports }, templateSettings.imports);
+    const importsKeys = Object.keys(imports);
+    const importValues = Object.values(imports);
+    const sourceURL = `//# sourceURL=${options.sourceURL ? String(options.sourceURL).replace(/[\r\n]/g, ' ') : `es-toolkit.templateSource[${Date.now()}]`}\n`;
+    const compiledFunction = `function(${options.variable || 'obj'}) {
+    let __p = '';
+    ${options.variable ? '' : 'if (obj == null) { obj = {}; }'}
+    ${isEvaluated ? `function print() { __p += Array.prototype.join.call(arguments, ''); }` : ''}
+    ${options.variable ? source : `with(obj) {\n${source}\n}`}
+    return __p;
+  }`;
+    const result = attempt(() => new Function(...importsKeys, `${sourceURL}return ${compiledFunction}`)(...importValues));
+    result.source = compiledFunction;
+    if (result instanceof Error) {
+        throw result;
+    }
+    return result;
+}
+
+export { template, templateSettings };
Index: node_modules/es-toolkit/dist/compat/string/toLower.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/toLower.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/toLower.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts the given value to a string and transforms it to lower case.
+ * The function can handle various input types by first converting them to strings.
+ *
+ * @param {unknown} [value=''] The value to convert.
+ * @returns {string} Returns the lower cased string.
+ * @example
+ *
+ * toLower('--FOO-BAR--');
+ * // => '--foo-bar--'
+ *
+ * toLower(null);
+ * // => ''
+ *
+ * toLower([1, 2, 3]);
+ * // => '1,2,3'
+ */
+declare function toLower<T extends string = string>(value?: T): Lowercase<T>;
+
+export { toLower };
Index: node_modules/es-toolkit/dist/compat/string/toLower.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/toLower.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/toLower.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts the given value to a string and transforms it to lower case.
+ * The function can handle various input types by first converting them to strings.
+ *
+ * @param {unknown} [value=''] The value to convert.
+ * @returns {string} Returns the lower cased string.
+ * @example
+ *
+ * toLower('--FOO-BAR--');
+ * // => '--foo-bar--'
+ *
+ * toLower(null);
+ * // => ''
+ *
+ * toLower([1, 2, 3]);
+ * // => '1,2,3'
+ */
+declare function toLower<T extends string = string>(value?: T): Lowercase<T>;
+
+export { toLower };
Index: node_modules/es-toolkit/dist/compat/string/toLower.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/toLower.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/toLower.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toString = require('../util/toString.js');
+
+function toLower(value) {
+    return toString.toString(value).toLowerCase();
+}
+
+exports.toLower = toLower;
Index: node_modules/es-toolkit/dist/compat/string/toLower.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/toLower.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/toLower.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { toString } from '../util/toString.mjs';
+
+function toLower(value) {
+    return toString(value).toLowerCase();
+}
+
+export { toLower };
Index: node_modules/es-toolkit/dist/compat/string/toUpper.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/toUpper.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/toUpper.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts `string`, as a whole, to upper case just like
+ * [String#toUpperCase](https://mdn.io/toUpperCase).
+ *
+ * @param {unknown} [value=''] The value to convert.
+ * @returns {string} Returns the upper cased string.
+ * @example
+ *
+ * toUpper('--foo-bar--');
+ * // => '--FOO-BAR--'
+ *
+ * toUpper(null);
+ * // => ''
+ *
+ * toUpper([1, 2, 3]);
+ * // => '1,2,3'
+ */
+declare function toUpper<T extends string = string>(value?: T): Uppercase<T>;
+
+export { toUpper };
Index: node_modules/es-toolkit/dist/compat/string/toUpper.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/toUpper.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/toUpper.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts `string`, as a whole, to upper case just like
+ * [String#toUpperCase](https://mdn.io/toUpperCase).
+ *
+ * @param {unknown} [value=''] The value to convert.
+ * @returns {string} Returns the upper cased string.
+ * @example
+ *
+ * toUpper('--foo-bar--');
+ * // => '--FOO-BAR--'
+ *
+ * toUpper(null);
+ * // => ''
+ *
+ * toUpper([1, 2, 3]);
+ * // => '1,2,3'
+ */
+declare function toUpper<T extends string = string>(value?: T): Uppercase<T>;
+
+export { toUpper };
Index: node_modules/es-toolkit/dist/compat/string/toUpper.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/toUpper.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/toUpper.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toString = require('../util/toString.js');
+
+function toUpper(value) {
+    return toString.toString(value).toUpperCase();
+}
+
+exports.toUpper = toUpper;
Index: node_modules/es-toolkit/dist/compat/string/toUpper.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/toUpper.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/toUpper.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { toString } from '../util/toString.mjs';
+
+function toUpper(value) {
+    return toString(value).toUpperCase();
+}
+
+export { toUpper };
Index: node_modules/es-toolkit/dist/compat/string/trim.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trim.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trim.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/**
+ * Removes leading and trailing whitespace or specified characters from a string.
+ *
+ * @param {string} str - The string from which leading and trailing characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the end of the string. Defaults to `" "`.
+ * @returns {string} - The resulting string after the specified leading and trailing characters have been removed.
+ *
+ * @example
+ * trim("  hello  "); // "hello"
+ * trim("--hello--", "-"); // "hello"
+ * trim("##hello##", ["#", "o"]); // "hell"
+ */
+declare function trim(string?: string, chars?: string): string;
+/**
+ * Removes leading and trailing whitespace or specified characters from a string.
+ *
+ * @param {string} str - The string from which leading and trailing characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the end of the string. Defaults to `" "`.
+ * @returns {string} - The resulting string after the specified leading and trailing characters have been removed.
+ *
+ * @example
+ * trim("  hello  "); // "hello"
+ * trim("--hello--", "-"); // "hello"
+ * trim("##hello##", ["#", "o"]); // "hell"
+ */
+declare function trim(string: string, index: string | number, guard: object): string;
+
+export { trim };
Index: node_modules/es-toolkit/dist/compat/string/trim.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trim.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trim.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/**
+ * Removes leading and trailing whitespace or specified characters from a string.
+ *
+ * @param {string} str - The string from which leading and trailing characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the end of the string. Defaults to `" "`.
+ * @returns {string} - The resulting string after the specified leading and trailing characters have been removed.
+ *
+ * @example
+ * trim("  hello  "); // "hello"
+ * trim("--hello--", "-"); // "hello"
+ * trim("##hello##", ["#", "o"]); // "hell"
+ */
+declare function trim(string?: string, chars?: string): string;
+/**
+ * Removes leading and trailing whitespace or specified characters from a string.
+ *
+ * @param {string} str - The string from which leading and trailing characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the end of the string. Defaults to `" "`.
+ * @returns {string} - The resulting string after the specified leading and trailing characters have been removed.
+ *
+ * @example
+ * trim("  hello  "); // "hello"
+ * trim("--hello--", "-"); // "hello"
+ * trim("##hello##", ["#", "o"]); // "hell"
+ */
+declare function trim(string: string, index: string | number, guard: object): string;
+
+export { trim };
Index: node_modules/es-toolkit/dist/compat/string/trim.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const trim$1 = require('../../string/trim.js');
+
+function trim(str, chars, guard) {
+    if (str == null) {
+        return '';
+    }
+    if (guard != null || chars == null) {
+        return str.toString().trim();
+    }
+    switch (typeof chars) {
+        case 'object': {
+            if (Array.isArray(chars)) {
+                return trim$1.trim(str, chars.flatMap(x => x.toString().split('')));
+            }
+            else {
+                return trim$1.trim(str, chars.toString().split(''));
+            }
+        }
+        default: {
+            return trim$1.trim(str, chars.toString().split(''));
+        }
+    }
+}
+
+exports.trim = trim;
Index: node_modules/es-toolkit/dist/compat/string/trim.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trim.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trim.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import { trim as trim$1 } from '../../string/trim.mjs';
+
+function trim(str, chars, guard) {
+    if (str == null) {
+        return '';
+    }
+    if (guard != null || chars == null) {
+        return str.toString().trim();
+    }
+    switch (typeof chars) {
+        case 'object': {
+            if (Array.isArray(chars)) {
+                return trim$1(str, chars.flatMap(x => x.toString().split('')));
+            }
+            else {
+                return trim$1(str, chars.toString().split(''));
+            }
+        }
+        default: {
+            return trim$1(str, chars.toString().split(''));
+        }
+    }
+}
+
+export { trim };
Index: node_modules/es-toolkit/dist/compat/string/trimEnd.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trimEnd.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trimEnd.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Removes trailing whitespace or specified characters from a string.
+ *
+ * @param {string} string - The string to trim.
+ * @param {string} chars - The characters to trim from the end of the string.
+ * @returns {string} Returns the trimmed string.
+ *
+ * @example
+ * trimEnd('  abc  ');
+ * // => '  abc'
+ *
+ * trimEnd('-_-abc-_-', '_-');
+ * // => '-_-abc'
+ */
+declare function trimEnd(string?: string, chars?: string): string;
+/**
+ * Removes trailing whitespace or specified characters from a string.
+ *
+ * @param {string} string - The string to trim.
+ * @param {string | number} index - The index parameter (used with guard).
+ * @param {object} guard - Enables use as an iteratee for methods like `map`.
+ * @returns {string} Returns the trimmed string.
+ *
+ * @example
+ * trimEnd('  abc  ', 0, {});
+ * // => '  abc'
+ */
+declare function trimEnd(string: string, index: string | number, guard: object): string;
+
+export { trimEnd };
Index: node_modules/es-toolkit/dist/compat/string/trimEnd.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trimEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trimEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Removes trailing whitespace or specified characters from a string.
+ *
+ * @param {string} string - The string to trim.
+ * @param {string} chars - The characters to trim from the end of the string.
+ * @returns {string} Returns the trimmed string.
+ *
+ * @example
+ * trimEnd('  abc  ');
+ * // => '  abc'
+ *
+ * trimEnd('-_-abc-_-', '_-');
+ * // => '-_-abc'
+ */
+declare function trimEnd(string?: string, chars?: string): string;
+/**
+ * Removes trailing whitespace or specified characters from a string.
+ *
+ * @param {string} string - The string to trim.
+ * @param {string | number} index - The index parameter (used with guard).
+ * @param {object} guard - Enables use as an iteratee for methods like `map`.
+ * @returns {string} Returns the trimmed string.
+ *
+ * @example
+ * trimEnd('  abc  ', 0, {});
+ * // => '  abc'
+ */
+declare function trimEnd(string: string, index: string | number, guard: object): string;
+
+export { trimEnd };
Index: node_modules/es-toolkit/dist/compat/string/trimEnd.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trimEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trimEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const trimEnd$1 = require('../../string/trimEnd.js');
+
+function trimEnd(str, chars, guard) {
+    if (str == null) {
+        return '';
+    }
+    if (guard != null || chars == null) {
+        return str.toString().trimEnd();
+    }
+    return trimEnd$1.trimEnd(str, chars.toString().split(''));
+}
+
+exports.trimEnd = trimEnd;
Index: node_modules/es-toolkit/dist/compat/string/trimEnd.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trimEnd.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trimEnd.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { trimEnd as trimEnd$1 } from '../../string/trimEnd.mjs';
+
+function trimEnd(str, chars, guard) {
+    if (str == null) {
+        return '';
+    }
+    if (guard != null || chars == null) {
+        return str.toString().trimEnd();
+    }
+    return trimEnd$1(str, chars.toString().split(''));
+}
+
+export { trimEnd };
Index: node_modules/es-toolkit/dist/compat/string/trimStart.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trimStart.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trimStart.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Removes leading whitespace or specified characters from a string.
+ *
+ * @param {string} string - The string to trim.
+ * @param {string} chars - The characters to trim from the start of the string.
+ * @returns {string} Returns the trimmed string.
+ *
+ * @example
+ * trimStart('  abc  ');
+ * // => 'abc  '
+ *
+ * trimStart('-_-abc-_-', '_-');
+ * // => 'abc-_-'
+ */
+declare function trimStart(string?: string, chars?: string): string;
+/**
+ * Removes leading whitespace or specified characters from a string.
+ *
+ * @param {string} string - The string to trim.
+ * @param {string | number} index - The index parameter (used with guard).
+ * @param {object} guard - Enables use as an iteratee for methods like `map`.
+ * @returns {string} Returns the trimmed string.
+ *
+ * @example
+ * trimStart('  abc  ', 0, {});
+ * // => 'abc  '
+ */
+declare function trimStart(string: string, index: string | number, guard: object): string;
+
+export { trimStart };
Index: node_modules/es-toolkit/dist/compat/string/trimStart.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trimStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trimStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Removes leading whitespace or specified characters from a string.
+ *
+ * @param {string} string - The string to trim.
+ * @param {string} chars - The characters to trim from the start of the string.
+ * @returns {string} Returns the trimmed string.
+ *
+ * @example
+ * trimStart('  abc  ');
+ * // => 'abc  '
+ *
+ * trimStart('-_-abc-_-', '_-');
+ * // => 'abc-_-'
+ */
+declare function trimStart(string?: string, chars?: string): string;
+/**
+ * Removes leading whitespace or specified characters from a string.
+ *
+ * @param {string} string - The string to trim.
+ * @param {string | number} index - The index parameter (used with guard).
+ * @param {object} guard - Enables use as an iteratee for methods like `map`.
+ * @returns {string} Returns the trimmed string.
+ *
+ * @example
+ * trimStart('  abc  ', 0, {});
+ * // => 'abc  '
+ */
+declare function trimStart(string: string, index: string | number, guard: object): string;
+
+export { trimStart };
Index: node_modules/es-toolkit/dist/compat/string/trimStart.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trimStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trimStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const trimStart$1 = require('../../string/trimStart.js');
+
+function trimStart(str, chars, guard) {
+    if (str == null) {
+        return '';
+    }
+    if (guard != null || chars == null) {
+        return str.toString().trimStart();
+    }
+    return trimStart$1.trimStart(str, chars.toString().split(''));
+}
+
+exports.trimStart = trimStart;
Index: node_modules/es-toolkit/dist/compat/string/trimStart.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/trimStart.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/trimStart.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { trimStart as trimStart$1 } from '../../string/trimStart.mjs';
+
+function trimStart(str, chars, guard) {
+    if (str == null) {
+        return '';
+    }
+    if (guard != null || chars == null) {
+        return str.toString().trimStart();
+    }
+    return trimStart$1(str, chars.toString().split(''));
+}
+
+export { trimStart };
Index: node_modules/es-toolkit/dist/compat/string/truncate.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/truncate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/truncate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+type TruncateOptions = {
+    length?: number;
+    separator?: string | RegExp;
+    omission?: string;
+};
+/**
+ * This regex might more completely detect unicode, but it is slower and this project
+ * desires to mimic the behavior of lodash.
+ */
+/**
+ * Truncates `string` if it's longer than the given maximum string length.
+ * The last characters of the truncated string are replaced with the omission
+ * string which defaults to "...".
+ *
+ * @param {string} [string=''] The string to truncate.
+ * @param {Object} [options={}] The options object.
+ * @param {number} [options.length=30] The maximum string length.
+ * @param {string} [options.omission='...'] The string to indicate text is omitted.
+ * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
+ *
+ * @example
+ * const test = 'hi-diddly-ho there, neighborino';
+ * const truncatedStr1 = truncate(test) // returns 'hi-diddly-ho there, neighbo...'
+ * const truncatedStr2 = truncate(test, { length: 24, separator: ' ' }) // returns 'hi-diddly-ho there,...'
+ * const truncatedStr3 = truncate(test, { length: 24, separator: /,? +/ }) // returns 'hi-diddly-ho there...'
+ * const truncatedStr4 = truncate(test, { omission: ' [...]' }) // returns 'hi-diddly-ho there, neig [...]'
+ * const truncatedStr5 = truncate('ABC', { length: 3 }) // returns 'ABC'
+ * const truncatedStr6 = truncate('ABC', { length: 2 }) // returns '...'
+ * const truncatedStr7 = truncate('¥§✈✉🤓', { length: 5 }) // returns '¥§✈✉🤓'
+ * const truncatedStr8 = truncate('¥§✈✉🤓', { length: 4, omission: '…' }) // returns '¥§✈…'
+ */
+declare function truncate(string?: string, options?: TruncateOptions): string;
+
+export { truncate };
Index: node_modules/es-toolkit/dist/compat/string/truncate.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/truncate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/truncate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+type TruncateOptions = {
+    length?: number;
+    separator?: string | RegExp;
+    omission?: string;
+};
+/**
+ * This regex might more completely detect unicode, but it is slower and this project
+ * desires to mimic the behavior of lodash.
+ */
+/**
+ * Truncates `string` if it's longer than the given maximum string length.
+ * The last characters of the truncated string are replaced with the omission
+ * string which defaults to "...".
+ *
+ * @param {string} [string=''] The string to truncate.
+ * @param {Object} [options={}] The options object.
+ * @param {number} [options.length=30] The maximum string length.
+ * @param {string} [options.omission='...'] The string to indicate text is omitted.
+ * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
+ *
+ * @example
+ * const test = 'hi-diddly-ho there, neighborino';
+ * const truncatedStr1 = truncate(test) // returns 'hi-diddly-ho there, neighbo...'
+ * const truncatedStr2 = truncate(test, { length: 24, separator: ' ' }) // returns 'hi-diddly-ho there,...'
+ * const truncatedStr3 = truncate(test, { length: 24, separator: /,? +/ }) // returns 'hi-diddly-ho there...'
+ * const truncatedStr4 = truncate(test, { omission: ' [...]' }) // returns 'hi-diddly-ho there, neig [...]'
+ * const truncatedStr5 = truncate('ABC', { length: 3 }) // returns 'ABC'
+ * const truncatedStr6 = truncate('ABC', { length: 2 }) // returns '...'
+ * const truncatedStr7 = truncate('¥§✈✉🤓', { length: 5 }) // returns '¥§✈✉🤓'
+ * const truncatedStr8 = truncate('¥§✈✉🤓', { length: 4, omission: '…' }) // returns '¥§✈…'
+ */
+declare function truncate(string?: string, options?: TruncateOptions): string;
+
+export { truncate };
Index: node_modules/es-toolkit/dist/compat/string/truncate.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/truncate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/truncate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isObject = require('../predicate/isObject.js');
+
+const regexMultiByte = /[\u200d\ud800-\udfff\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff\ufe0e\ufe0f]/;
+function truncate(string, options) {
+    string = string != null ? `${string}` : '';
+    let length = 30;
+    let omission = '...';
+    if (isObject.isObject(options)) {
+        length = parseLength(options.length);
+        omission = 'omission' in options ? `${options.omission}` : '...';
+    }
+    let i = string.length;
+    const lengthOmission = Array.from(omission).length;
+    const lengthBase = Math.max(length - lengthOmission, 0);
+    let strArray = undefined;
+    const unicode = regexMultiByte.test(string);
+    if (unicode) {
+        strArray = Array.from(string);
+        i = strArray.length;
+    }
+    if (length >= i) {
+        return string;
+    }
+    if (i <= lengthOmission) {
+        return omission;
+    }
+    let base = strArray === undefined ? string.slice(0, lengthBase) : strArray?.slice(0, lengthBase).join('');
+    const separator = options?.separator;
+    if (!separator) {
+        base += omission;
+        return base;
+    }
+    const search = separator instanceof RegExp ? separator.source : separator;
+    const flags = 'u' + (separator instanceof RegExp ? separator.flags.replace('u', '') : '');
+    const withoutSeparator = new RegExp(`(?<result>.*(?:(?!${search}).))(?:${search})`, flags).exec(base);
+    return (!withoutSeparator?.groups ? base : withoutSeparator.groups.result) + omission;
+}
+function parseLength(length) {
+    if (length == null) {
+        return 30;
+    }
+    if (length <= 0) {
+        return 0;
+    }
+    return length;
+}
+
+exports.truncate = truncate;
Index: node_modules/es-toolkit/dist/compat/string/truncate.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/truncate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/truncate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+import { isObject } from '../predicate/isObject.mjs';
+
+const regexMultiByte = /[\u200d\ud800-\udfff\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff\ufe0e\ufe0f]/;
+function truncate(string, options) {
+    string = string != null ? `${string}` : '';
+    let length = 30;
+    let omission = '...';
+    if (isObject(options)) {
+        length = parseLength(options.length);
+        omission = 'omission' in options ? `${options.omission}` : '...';
+    }
+    let i = string.length;
+    const lengthOmission = Array.from(omission).length;
+    const lengthBase = Math.max(length - lengthOmission, 0);
+    let strArray = undefined;
+    const unicode = regexMultiByte.test(string);
+    if (unicode) {
+        strArray = Array.from(string);
+        i = strArray.length;
+    }
+    if (length >= i) {
+        return string;
+    }
+    if (i <= lengthOmission) {
+        return omission;
+    }
+    let base = strArray === undefined ? string.slice(0, lengthBase) : strArray?.slice(0, lengthBase).join('');
+    const separator = options?.separator;
+    if (!separator) {
+        base += omission;
+        return base;
+    }
+    const search = separator instanceof RegExp ? separator.source : separator;
+    const flags = 'u' + (separator instanceof RegExp ? separator.flags.replace('u', '') : '');
+    const withoutSeparator = new RegExp(`(?<result>.*(?:(?!${search}).))(?:${search})`, flags).exec(base);
+    return (!withoutSeparator?.groups ? base : withoutSeparator.groups.result) + omission;
+}
+function parseLength(length) {
+    if (length == null) {
+        return 30;
+    }
+    if (length <= 0) {
+        return 0;
+    }
+    return length;
+}
+
+export { truncate };
Index: node_modules/es-toolkit/dist/compat/string/unescape.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/unescape.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/unescape.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the HTML entities `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `str` to their corresponding characters.
+ * It is the inverse of `escape`.
+ *
+ * @param {string} str The string to unescape.
+ * @returns {string} Returns the unescaped string.
+ *
+ * @example
+ * unescape('This is a &lt;div&gt; element.'); // returns 'This is a <div> element.'
+ * unescape('This is a &quot;quote&quot;'); // returns 'This is a "quote"'
+ * unescape('This is a &#39;quote&#39;'); // returns 'This is a 'quote''
+ * unescape('This is a &amp; symbol'); // returns 'This is a & symbol'
+ */
+declare function unescape(str?: string): string;
+
+export { unescape };
Index: node_modules/es-toolkit/dist/compat/string/unescape.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/unescape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/unescape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the HTML entities `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `str` to their corresponding characters.
+ * It is the inverse of `escape`.
+ *
+ * @param {string} str The string to unescape.
+ * @returns {string} Returns the unescaped string.
+ *
+ * @example
+ * unescape('This is a &lt;div&gt; element.'); // returns 'This is a <div> element.'
+ * unescape('This is a &quot;quote&quot;'); // returns 'This is a "quote"'
+ * unescape('This is a &#39;quote&#39;'); // returns 'This is a 'quote''
+ * unescape('This is a &amp; symbol'); // returns 'This is a & symbol'
+ */
+declare function unescape(str?: string): string;
+
+export { unescape };
Index: node_modules/es-toolkit/dist/compat/string/unescape.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/unescape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/unescape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const unescape$1 = require('../../string/unescape.js');
+const toString = require('../util/toString.js');
+
+function unescape(str) {
+    return unescape$1.unescape(toString.toString(str));
+}
+
+exports.unescape = unescape;
Index: node_modules/es-toolkit/dist/compat/string/unescape.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/unescape.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/unescape.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { unescape as unescape$1 } from '../../string/unescape.mjs';
+import { toString } from '../util/toString.mjs';
+
+function unescape(str) {
+    return unescape$1(toString(str));
+}
+
+export { unescape };
Index: node_modules/es-toolkit/dist/compat/string/upperCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/upperCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/upperCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to upper case.
+ *
+ * Upper case is the naming convention in which each word is written in uppercase and separated by an space ( ) character.
+ *
+ * @param {string | object} str - The string that is to be changed to upper case.
+ * @returns {string} - The converted string to upper case.
+ *
+ * @example
+ * const convertedStr1 = upperCase('camelCase') // returns 'CAMEL CASE'
+ * const convertedStr2 = upperCase('some whitespace') // returns 'SOME WHITESPACE'
+ * const convertedStr3 = upperCase('hyphen-text') // returns 'HYPHEN TEXT'
+ * const convertedStr4 = upperCase('HTTPRequest') // returns 'HTTP REQUEST'
+ */
+declare function upperCase(str?: string): string;
+
+export { upperCase };
Index: node_modules/es-toolkit/dist/compat/string/upperCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/upperCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/upperCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to upper case.
+ *
+ * Upper case is the naming convention in which each word is written in uppercase and separated by an space ( ) character.
+ *
+ * @param {string | object} str - The string that is to be changed to upper case.
+ * @returns {string} - The converted string to upper case.
+ *
+ * @example
+ * const convertedStr1 = upperCase('camelCase') // returns 'CAMEL CASE'
+ * const convertedStr2 = upperCase('some whitespace') // returns 'SOME WHITESPACE'
+ * const convertedStr3 = upperCase('hyphen-text') // returns 'HYPHEN TEXT'
+ * const convertedStr4 = upperCase('HTTPRequest') // returns 'HTTP REQUEST'
+ */
+declare function upperCase(str?: string): string;
+
+export { upperCase };
Index: node_modules/es-toolkit/dist/compat/string/upperCase.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/upperCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/upperCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const upperCase$1 = require('../../string/upperCase.js');
+const normalizeForCase = require('../_internal/normalizeForCase.js');
+
+function upperCase(str) {
+    return upperCase$1.upperCase(normalizeForCase.normalizeForCase(str));
+}
+
+exports.upperCase = upperCase;
Index: node_modules/es-toolkit/dist/compat/string/upperCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/upperCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/upperCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { upperCase as upperCase$1 } from '../../string/upperCase.mjs';
+import { normalizeForCase } from '../_internal/normalizeForCase.mjs';
+
+function upperCase(str) {
+    return upperCase$1(normalizeForCase(str));
+}
+
+export { upperCase };
Index: node_modules/es-toolkit/dist/compat/string/upperFirst.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/upperFirst.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/upperFirst.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to upper case.
+ *
+ * @param {string} str - The string that is to be changed
+ * @returns {string} - The converted string.
+ *
+ * @example
+ * const convertedStr1 = upperFirst('fred') // returns 'Fred'
+ * const convertedStr2 = upperFirst('Fred') // returns 'Fred'
+ * const convertedStr3 = upperFirst('FRED') // returns 'FRED'
+ */
+declare function upperFirst<T extends string = string>(str?: T): Capitalize<T>;
+
+export { upperFirst };
Index: node_modules/es-toolkit/dist/compat/string/upperFirst.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/upperFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/upperFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to upper case.
+ *
+ * @param {string} str - The string that is to be changed
+ * @returns {string} - The converted string.
+ *
+ * @example
+ * const convertedStr1 = upperFirst('fred') // returns 'Fred'
+ * const convertedStr2 = upperFirst('Fred') // returns 'Fred'
+ * const convertedStr3 = upperFirst('FRED') // returns 'FRED'
+ */
+declare function upperFirst<T extends string = string>(str?: T): Capitalize<T>;
+
+export { upperFirst };
Index: node_modules/es-toolkit/dist/compat/string/upperFirst.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/upperFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/upperFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const upperFirst$1 = require('../../string/upperFirst.js');
+const toString = require('../util/toString.js');
+
+function upperFirst(str) {
+    return upperFirst$1.upperFirst(toString.toString(str));
+}
+
+exports.upperFirst = upperFirst;
Index: node_modules/es-toolkit/dist/compat/string/upperFirst.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/upperFirst.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/upperFirst.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { upperFirst as upperFirst$1 } from '../../string/upperFirst.mjs';
+import { toString } from '../util/toString.mjs';
+
+function upperFirst(str) {
+    return upperFirst$1(toString(str));
+}
+
+export { upperFirst };
Index: node_modules/es-toolkit/dist/compat/string/words.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/words.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/words.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Splits `string` into an array of its words.
+ *
+ * @param {string | object} str - The string or object that is to be split into words.
+ * @param {RegExp | string} [pattern] - The pattern to match words.
+ * @returns {string[]} - Returns the words of `string`.
+ *
+ * @example
+ * const wordsArray1 = words('fred, barney, & pebbles');
+ * // => ['fred', 'barney', 'pebbles']
+ *
+ */
+declare function words(string?: string, pattern?: string | RegExp): string[];
+/**
+ * Splits `string` into an array of its words.
+ *
+ * @param {string | object} str - The string or object that is to be split into words.
+ * @param {RegExp | string} [pattern] - The pattern to match words.
+ * @returns {string[]} - Returns the words of `string`.
+ *
+ * @example
+ * const wordsArray1 = words('fred, barney, & pebbles');
+ * // => ['fred', 'barney', 'pebbles']
+ */
+declare function words(string: string, index: string | number, guard: object): string[];
+
+export { words };
Index: node_modules/es-toolkit/dist/compat/string/words.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/string/words.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/words.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Splits `string` into an array of its words.
+ *
+ * @param {string | object} str - The string or object that is to be split into words.
+ * @param {RegExp | string} [pattern] - The pattern to match words.
+ * @returns {string[]} - Returns the words of `string`.
+ *
+ * @example
+ * const wordsArray1 = words('fred, barney, & pebbles');
+ * // => ['fred', 'barney', 'pebbles']
+ *
+ */
+declare function words(string?: string, pattern?: string | RegExp): string[];
+/**
+ * Splits `string` into an array of its words.
+ *
+ * @param {string | object} str - The string or object that is to be split into words.
+ * @param {RegExp | string} [pattern] - The pattern to match words.
+ * @returns {string[]} - Returns the words of `string`.
+ *
+ * @example
+ * const wordsArray1 = words('fred, barney, & pebbles');
+ * // => ['fred', 'barney', 'pebbles']
+ */
+declare function words(string: string, index: string | number, guard: object): string[];
+
+export { words };
Index: node_modules/es-toolkit/dist/compat/string/words.js
===================================================================
--- node_modules/es-toolkit/dist/compat/string/words.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/words.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toString = require('../util/toString.js');
+
+const rNonCharLatin = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\xd7\\xf7';
+const rUnicodeUpper = '\\p{Lu}';
+const rUnicodeLower = '\\p{Ll}';
+const rMisc = '(?:[\\p{Lm}\\p{Lo}]\\p{M}*)';
+const rNumber = '\\d';
+const rUnicodeOptContrLower = "(?:['\u2019](?:d|ll|m|re|s|t|ve))?";
+const rUnicodeOptContrUpper = "(?:['\u2019](?:D|LL|M|RE|S|T|VE))?";
+const rUnicodeBreak = `[\\p{Z}\\p{P}${rNonCharLatin}]`;
+const rUnicodeMiscUpper = `(?:${rUnicodeUpper}|${rMisc})`;
+const rUnicodeMiscLower = `(?:${rUnicodeLower}|${rMisc})`;
+const rUnicodeWord = RegExp([
+    `${rUnicodeUpper}?${rUnicodeLower}+${rUnicodeOptContrLower}(?=${rUnicodeBreak}|${rUnicodeUpper}|$)`,
+    `${rUnicodeMiscUpper}+${rUnicodeOptContrUpper}(?=${rUnicodeBreak}|${rUnicodeUpper}${rUnicodeMiscLower}|$)`,
+    `${rUnicodeUpper}?${rUnicodeMiscLower}+${rUnicodeOptContrLower}`,
+    `${rUnicodeUpper}+${rUnicodeOptContrUpper}`,
+    `${rNumber}*(?:1ST|2ND|3RD|(?![123])${rNumber}TH)(?=\\b|[a-z_])`,
+    `${rNumber}*(?:1st|2nd|3rd|(?![123])${rNumber}th)(?=\\b|[A-Z_])`,
+    `${rNumber}+`,
+    '\\p{Emoji_Presentation}',
+    '\\p{Extended_Pictographic}',
+].join('|'), 'gu');
+function words(str, pattern = rUnicodeWord, guard) {
+    const input = toString.toString(str);
+    if (guard) {
+        pattern = rUnicodeWord;
+    }
+    if (typeof pattern === 'number') {
+        pattern = pattern.toString();
+    }
+    const words = Array.from(input.match(pattern) ?? []);
+    return words.filter(x => x !== '');
+}
+
+exports.words = words;
Index: node_modules/es-toolkit/dist/compat/string/words.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/string/words.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/string/words.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import { toString } from '../util/toString.mjs';
+
+const rNonCharLatin = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\xd7\\xf7';
+const rUnicodeUpper = '\\p{Lu}';
+const rUnicodeLower = '\\p{Ll}';
+const rMisc = '(?:[\\p{Lm}\\p{Lo}]\\p{M}*)';
+const rNumber = '\\d';
+const rUnicodeOptContrLower = "(?:['\u2019](?:d|ll|m|re|s|t|ve))?";
+const rUnicodeOptContrUpper = "(?:['\u2019](?:D|LL|M|RE|S|T|VE))?";
+const rUnicodeBreak = `[\\p{Z}\\p{P}${rNonCharLatin}]`;
+const rUnicodeMiscUpper = `(?:${rUnicodeUpper}|${rMisc})`;
+const rUnicodeMiscLower = `(?:${rUnicodeLower}|${rMisc})`;
+const rUnicodeWord = RegExp([
+    `${rUnicodeUpper}?${rUnicodeLower}+${rUnicodeOptContrLower}(?=${rUnicodeBreak}|${rUnicodeUpper}|$)`,
+    `${rUnicodeMiscUpper}+${rUnicodeOptContrUpper}(?=${rUnicodeBreak}|${rUnicodeUpper}${rUnicodeMiscLower}|$)`,
+    `${rUnicodeUpper}?${rUnicodeMiscLower}+${rUnicodeOptContrLower}`,
+    `${rUnicodeUpper}+${rUnicodeOptContrUpper}`,
+    `${rNumber}*(?:1ST|2ND|3RD|(?![123])${rNumber}TH)(?=\\b|[a-z_])`,
+    `${rNumber}*(?:1st|2nd|3rd|(?![123])${rNumber}th)(?=\\b|[A-Z_])`,
+    `${rNumber}+`,
+    '\\p{Emoji_Presentation}',
+    '\\p{Extended_Pictographic}',
+].join('|'), 'gu');
+function words(str, pattern = rUnicodeWord, guard) {
+    const input = toString(str);
+    if (guard) {
+        pattern = rUnicodeWord;
+    }
+    if (typeof pattern === 'number') {
+        pattern = pattern.toString();
+    }
+    const words = Array.from(input.match(pattern) ?? []);
+    return words.filter(x => x !== '');
+}
+
+export { words };
Index: node_modules/es-toolkit/dist/compat/toolkit.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/toolkit.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/toolkit.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import * as compat from './compat.mjs';
+
+type ToolkitFn = (value: any) => any;
+type Compat = typeof compat;
+interface Toolkit extends ToolkitFn, Compat {
+}
+declare const toolkit: Toolkit;
+
+export { type Toolkit, toolkit };
Index: node_modules/es-toolkit/dist/compat/toolkit.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/toolkit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/toolkit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import * as compat from './compat.js';
+
+type ToolkitFn = (value: any) => any;
+type Compat = typeof compat;
+interface Toolkit extends ToolkitFn, Compat {
+}
+declare const toolkit: Toolkit;
+
+export { type Toolkit, toolkit };
Index: node_modules/es-toolkit/dist/compat/toolkit.js
===================================================================
--- node_modules/es-toolkit/dist/compat/toolkit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/toolkit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const compat = require('./compat.js');
+
+const toolkit = ((value) => {
+    return value;
+});
+Object.assign(toolkit, compat);
+toolkit.partial.placeholder = toolkit;
+toolkit.partialRight.placeholder = toolkit;
+
+exports.toolkit = toolkit;
Index: node_modules/es-toolkit/dist/compat/toolkit.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/toolkit.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/toolkit.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import * as compat from './compat.mjs';
+
+const toolkit = ((value) => {
+    return value;
+});
+Object.assign(toolkit, compat);
+toolkit.partial.placeholder = toolkit;
+toolkit.partialRight.placeholder = toolkit;
+
+export { toolkit };
Index: node_modules/es-toolkit/dist/compat/util/bindAll.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/bindAll.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/bindAll.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { Many } from '../_internal/Many.mjs';
+
+/**
+ * Binds methods of an object to the object itself, overwriting the existing method.
+ * Method names may be specified as individual arguments or as arrays of method names.
+ *
+ * @template T - The type of the object.
+ * @param {T} object - The object to bind methods to.
+ * @param {Array<Many<string>>} [methodNames] - The method names to bind, specified individually or in arrays.
+ * @returns {T} - Returns the object.
+ *
+ * @example
+ * const view = {
+ *   'label': 'docs',
+ *   'click': function() {
+ *     console.log('clicked ' + this.label);
+ *   }
+ * };
+ *
+ * bindAll(view, ['click']);
+ * jQuery(element).on('click', view.click);
+ * // => Logs 'clicked docs' when clicked.
+ *
+ * @example
+ * // Using individual method names
+ * bindAll(view, 'click');
+ * // => Same as above
+ */
+declare function bindAll<T>(object: T, ...methodNames: Array<Many<string>>): T;
+
+export { bindAll };
Index: node_modules/es-toolkit/dist/compat/util/bindAll.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/bindAll.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/bindAll.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { Many } from '../_internal/Many.js';
+
+/**
+ * Binds methods of an object to the object itself, overwriting the existing method.
+ * Method names may be specified as individual arguments or as arrays of method names.
+ *
+ * @template T - The type of the object.
+ * @param {T} object - The object to bind methods to.
+ * @param {Array<Many<string>>} [methodNames] - The method names to bind, specified individually or in arrays.
+ * @returns {T} - Returns the object.
+ *
+ * @example
+ * const view = {
+ *   'label': 'docs',
+ *   'click': function() {
+ *     console.log('clicked ' + this.label);
+ *   }
+ * };
+ *
+ * bindAll(view, ['click']);
+ * jQuery(element).on('click', view.click);
+ * // => Logs 'clicked docs' when clicked.
+ *
+ * @example
+ * // Using individual method names
+ * bindAll(view, 'click');
+ * // => Same as above
+ */
+declare function bindAll<T>(object: T, ...methodNames: Array<Many<string>>): T;
+
+export { bindAll };
Index: node_modules/es-toolkit/dist/compat/util/bindAll.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/bindAll.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/bindAll.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isFunction = require('../../predicate/isFunction.js');
+const isArray = require('../predicate/isArray.js');
+const isObject = require('../predicate/isObject.js');
+const toString = require('./toString.js');
+
+function bindAll(object, ...methodNames) {
+    if (object == null) {
+        return object;
+    }
+    if (!isObject.isObject(object)) {
+        return object;
+    }
+    if (isArray.isArray(object) && methodNames.length === 0) {
+        return object;
+    }
+    const methods = [];
+    for (let i = 0; i < methodNames.length; i++) {
+        const name = methodNames[i];
+        if (isArray.isArray(name)) {
+            methods.push(...name);
+        }
+        else if (name && typeof name === 'object' && 'length' in name) {
+            methods.push(...Array.from(name));
+        }
+        else {
+            methods.push(name);
+        }
+    }
+    if (methods.length === 0) {
+        return object;
+    }
+    for (let i = 0; i < methods.length; i++) {
+        const key = methods[i];
+        const stringKey = toString.toString(key);
+        const func = object[stringKey];
+        if (isFunction.isFunction(func)) {
+            object[stringKey] = func.bind(object);
+        }
+    }
+    return object;
+}
+
+exports.bindAll = bindAll;
Index: node_modules/es-toolkit/dist/compat/util/bindAll.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/bindAll.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/bindAll.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+import { isFunction } from '../../predicate/isFunction.mjs';
+import { isArray } from '../predicate/isArray.mjs';
+import { isObject } from '../predicate/isObject.mjs';
+import { toString } from './toString.mjs';
+
+function bindAll(object, ...methodNames) {
+    if (object == null) {
+        return object;
+    }
+    if (!isObject(object)) {
+        return object;
+    }
+    if (isArray(object) && methodNames.length === 0) {
+        return object;
+    }
+    const methods = [];
+    for (let i = 0; i < methodNames.length; i++) {
+        const name = methodNames[i];
+        if (isArray(name)) {
+            methods.push(...name);
+        }
+        else if (name && typeof name === 'object' && 'length' in name) {
+            methods.push(...Array.from(name));
+        }
+        else {
+            methods.push(name);
+        }
+    }
+    if (methods.length === 0) {
+        return object;
+    }
+    for (let i = 0; i < methods.length; i++) {
+        const key = methods[i];
+        const stringKey = toString(key);
+        const func = object[stringKey];
+        if (isFunction(func)) {
+            object[stringKey] = func.bind(object);
+        }
+    }
+    return object;
+}
+
+export { bindAll };
Index: node_modules/es-toolkit/dist/compat/util/cond.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/cond.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/cond.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+/**
+ * Creates a function that checks conditions one by one and runs the matching function.
+ *
+ * Each pair consists of a condition (predicate) and a function to run.
+ * The function goes through each condition in order until it finds one that's true.
+ * When it finds a true condition, it runs the corresponding function and returns its result.
+ * If none of the conditions are true, it returns undefined.
+ *
+ * @param {Array<Array>} pairs - Array of pairs. Each pair consists of a predicate function and a function to run.
+ * @returns {(...args: any[]) => unknown} A new composite function that checks conditions and runs the matching function.
+ * @example
+ *
+ * const func = cond([
+ *   [matches({ a: 1 }), constant('matches A')],
+ *   [conforms({ b: isNumber }), constant('matches B')],
+ *   [stubTrue, constant('no match')]
+ * ]);
+ *
+ * func({ a: 1, b: 2 });
+ * // => 'matches A'
+ *
+ * func({ a: 0, b: 1 });
+ * // => 'matches B'
+ *
+ * func({ a: '1', b: '2' });
+ * // => 'no match'
+ */
+declare function cond<R>(pairs: Array<[truthy: () => boolean, falsey: () => R]>): () => R;
+/**
+ * Creates a function that checks conditions one by one and runs the matching function.
+ *
+ * Each pair consists of a condition (predicate) and a function to run.
+ * The function goes through each condition in order until it finds one that's true.
+ * When it finds a true condition, it runs the corresponding function and returns its result.
+ * If none of the conditions are true, it returns undefined.
+ *
+ * @param {Array<Array>} pairs - Array of pairs. Each pair consists of a predicate function and a function to run.
+ * @returns {(...args: any[]) => unknown} A new composite function that checks conditions and runs the matching function.
+ * @example
+ *
+ * const func = cond([
+ *   [matches({ a: 1 }), constant('matches A')],
+ *   [conforms({ b: isNumber }), constant('matches B')],
+ *   [stubTrue, constant('no match')]
+ * ]);
+ *
+ * func({ a: 1, b: 2 });
+ * // => 'matches A'
+ *
+ * func({ a: 0, b: 1 });
+ * // => 'matches B'
+ *
+ * func({ a: '1', b: '2' });
+ * // => 'no match'
+ */
+declare function cond<T, R>(pairs: Array<[truthy: (val: T) => boolean, falsey: (val: T) => R]>): (val: T) => R;
+
+export { cond };
Index: node_modules/es-toolkit/dist/compat/util/cond.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/cond.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/cond.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+/**
+ * Creates a function that checks conditions one by one and runs the matching function.
+ *
+ * Each pair consists of a condition (predicate) and a function to run.
+ * The function goes through each condition in order until it finds one that's true.
+ * When it finds a true condition, it runs the corresponding function and returns its result.
+ * If none of the conditions are true, it returns undefined.
+ *
+ * @param {Array<Array>} pairs - Array of pairs. Each pair consists of a predicate function and a function to run.
+ * @returns {(...args: any[]) => unknown} A new composite function that checks conditions and runs the matching function.
+ * @example
+ *
+ * const func = cond([
+ *   [matches({ a: 1 }), constant('matches A')],
+ *   [conforms({ b: isNumber }), constant('matches B')],
+ *   [stubTrue, constant('no match')]
+ * ]);
+ *
+ * func({ a: 1, b: 2 });
+ * // => 'matches A'
+ *
+ * func({ a: 0, b: 1 });
+ * // => 'matches B'
+ *
+ * func({ a: '1', b: '2' });
+ * // => 'no match'
+ */
+declare function cond<R>(pairs: Array<[truthy: () => boolean, falsey: () => R]>): () => R;
+/**
+ * Creates a function that checks conditions one by one and runs the matching function.
+ *
+ * Each pair consists of a condition (predicate) and a function to run.
+ * The function goes through each condition in order until it finds one that's true.
+ * When it finds a true condition, it runs the corresponding function and returns its result.
+ * If none of the conditions are true, it returns undefined.
+ *
+ * @param {Array<Array>} pairs - Array of pairs. Each pair consists of a predicate function and a function to run.
+ * @returns {(...args: any[]) => unknown} A new composite function that checks conditions and runs the matching function.
+ * @example
+ *
+ * const func = cond([
+ *   [matches({ a: 1 }), constant('matches A')],
+ *   [conforms({ b: isNumber }), constant('matches B')],
+ *   [stubTrue, constant('no match')]
+ * ]);
+ *
+ * func({ a: 1, b: 2 });
+ * // => 'matches A'
+ *
+ * func({ a: 0, b: 1 });
+ * // => 'matches B'
+ *
+ * func({ a: '1', b: '2' });
+ * // => 'no match'
+ */
+declare function cond<T, R>(pairs: Array<[truthy: (val: T) => boolean, falsey: (val: T) => R]>): (val: T) => R;
+
+export { cond };
Index: node_modules/es-toolkit/dist/compat/util/cond.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/cond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/cond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const iteratee = require('./iteratee.js');
+const isFunction = require('../../predicate/isFunction.js');
+
+function cond(pairs) {
+    const length = pairs.length;
+    const processedPairs = pairs.map(pair => {
+        const predicate = pair[0];
+        const func = pair[1];
+        if (!isFunction.isFunction(func)) {
+            throw new TypeError('Expected a function');
+        }
+        return [iteratee.iteratee(predicate), func];
+    });
+    return function (...args) {
+        for (let i = 0; i < length; i++) {
+            const pair = processedPairs[i];
+            const predicate = pair[0];
+            const func = pair[1];
+            if (predicate.apply(this, args)) {
+                return func.apply(this, args);
+            }
+        }
+    };
+}
+
+exports.cond = cond;
Index: node_modules/es-toolkit/dist/compat/util/cond.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/cond.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/cond.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import { iteratee } from './iteratee.mjs';
+import { isFunction } from '../../predicate/isFunction.mjs';
+
+function cond(pairs) {
+    const length = pairs.length;
+    const processedPairs = pairs.map(pair => {
+        const predicate = pair[0];
+        const func = pair[1];
+        if (!isFunction(func)) {
+            throw new TypeError('Expected a function');
+        }
+        return [iteratee(predicate), func];
+    });
+    return function (...args) {
+        for (let i = 0; i < length; i++) {
+            const pair = processedPairs[i];
+            const predicate = pair[0];
+            const func = pair[1];
+            if (predicate.apply(this, args)) {
+                return func.apply(this, args);
+            }
+        }
+    };
+}
+
+export { cond };
Index: node_modules/es-toolkit/dist/compat/util/constant.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/constant.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/constant.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Creates a new function that always returns `value`.
+ *
+ * @template T - The type of the value to return.
+ * @param {T} value - The value to return from the new function.
+ * @returns {() => T} Returns the new constant function.
+ */
+declare function constant<T>(value: T): () => T;
+
+export { constant };
Index: node_modules/es-toolkit/dist/compat/util/constant.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/constant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/constant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Creates a new function that always returns `value`.
+ *
+ * @template T - The type of the value to return.
+ * @param {T} value - The value to return from the new function.
+ * @returns {() => T} Returns the new constant function.
+ */
+declare function constant<T>(value: T): () => T;
+
+export { constant };
Index: node_modules/es-toolkit/dist/compat/util/constant.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function constant(value) {
+    return () => value;
+}
+
+exports.constant = constant;
Index: node_modules/es-toolkit/dist/compat/util/constant.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/constant.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/constant.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function constant(value) {
+    return () => value;
+}
+
+export { constant };
Index: node_modules/es-toolkit/dist/compat/util/defaultTo.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/defaultTo.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/defaultTo.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Returns the default value for `null`, `undefined`, and `NaN`.
+ *
+ * @template T - The type of the value parameter
+ * @param {T | null | undefined} value - The value to check.
+ * @param {T} defaultValue - The default value to return if the first value is null, undefined, or NaN.
+ * @returns {T} Returns either the first value or the default value.
+ */
+declare function defaultTo<T>(value: T | null | undefined, defaultValue: T): T;
+/**
+ * Returns the default value for `null`, `undefined`, and `NaN`.
+ *
+ * @template T - The type of the value parameter
+ * @template D - The type of the defaultValue parameter
+ * @param {T | null | undefined} value - The value to check.
+ * @param {D} defaultValue - The default value to return if the first value is null, undefined, or NaN.
+ * @returns {T | D} Returns either the first value or the default value.
+ */
+declare function defaultTo<T, D>(value: T | null | undefined, defaultValue: D): T | D;
+
+export { defaultTo };
Index: node_modules/es-toolkit/dist/compat/util/defaultTo.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/defaultTo.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/defaultTo.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Returns the default value for `null`, `undefined`, and `NaN`.
+ *
+ * @template T - The type of the value parameter
+ * @param {T | null | undefined} value - The value to check.
+ * @param {T} defaultValue - The default value to return if the first value is null, undefined, or NaN.
+ * @returns {T} Returns either the first value or the default value.
+ */
+declare function defaultTo<T>(value: T | null | undefined, defaultValue: T): T;
+/**
+ * Returns the default value for `null`, `undefined`, and `NaN`.
+ *
+ * @template T - The type of the value parameter
+ * @template D - The type of the defaultValue parameter
+ * @param {T | null | undefined} value - The value to check.
+ * @param {D} defaultValue - The default value to return if the first value is null, undefined, or NaN.
+ * @returns {T | D} Returns either the first value or the default value.
+ */
+declare function defaultTo<T, D>(value: T | null | undefined, defaultValue: D): T | D;
+
+export { defaultTo };
Index: node_modules/es-toolkit/dist/compat/util/defaultTo.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/defaultTo.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/defaultTo.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function defaultTo(value, defaultValue) {
+    if (value == null || Number.isNaN(value)) {
+        return defaultValue;
+    }
+    return value;
+}
+
+exports.defaultTo = defaultTo;
Index: node_modules/es-toolkit/dist/compat/util/defaultTo.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/defaultTo.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/defaultTo.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function defaultTo(value, defaultValue) {
+    if (value == null || Number.isNaN(value)) {
+        return defaultValue;
+    }
+    return value;
+}
+
+export { defaultTo };
Index: node_modules/es-toolkit/dist/compat/util/eq.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/eq.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/eq.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Performs a `SameValueZero` comparison between two values to determine if they are equivalent.
+ *
+ * @param {any} value - The value to compare.
+ * @param {any} other - The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ *
+ * @example
+ * eq(1, 1); // true
+ * eq(0, -0); // true
+ * eq(NaN, NaN); // true
+ * eq('a', Object('a')); // false
+ */
+declare function eq(value: any, other: any): boolean;
+
+export { eq };
Index: node_modules/es-toolkit/dist/compat/util/eq.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/eq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/eq.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Performs a `SameValueZero` comparison between two values to determine if they are equivalent.
+ *
+ * @param {any} value - The value to compare.
+ * @param {any} other - The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ *
+ * @example
+ * eq(1, 1); // true
+ * eq(0, -0); // true
+ * eq(NaN, NaN); // true
+ * eq('a', Object('a')); // false
+ */
+declare function eq(value: any, other: any): boolean;
+
+export { eq };
Index: node_modules/es-toolkit/dist/compat/util/eq.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/eq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/eq.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function eq(value, other) {
+    return value === other || (Number.isNaN(value) && Number.isNaN(other));
+}
+
+exports.eq = eq;
Index: node_modules/es-toolkit/dist/compat/util/eq.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/eq.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/eq.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function eq(value, other) {
+    return value === other || (Number.isNaN(value) && Number.isNaN(other));
+}
+
+export { eq };
Index: node_modules/es-toolkit/dist/compat/util/gt.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/gt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/gt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if value is greater than other.
+ *
+ * @param {any} value The value to compare.
+ * @param {any} other The other value to compare.
+ * @returns {boolean} Returns `true` if value is greater than other, else `false`.
+ *
+ * @example
+ * gt(3, 1); // true
+ * gt(3, 3); // false
+ * gt(1, 3); // false
+ */
+declare function gt(value: any, other: any): boolean;
+
+export { gt };
Index: node_modules/es-toolkit/dist/compat/util/gt.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/gt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/gt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if value is greater than other.
+ *
+ * @param {any} value The value to compare.
+ * @param {any} other The other value to compare.
+ * @returns {boolean} Returns `true` if value is greater than other, else `false`.
+ *
+ * @example
+ * gt(3, 1); // true
+ * gt(3, 3); // false
+ * gt(1, 3); // false
+ */
+declare function gt(value: any, other: any): boolean;
+
+export { gt };
Index: node_modules/es-toolkit/dist/compat/util/gt.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/gt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/gt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('./toNumber.js');
+
+function gt(value, other) {
+    if (typeof value === 'string' && typeof other === 'string') {
+        return value > other;
+    }
+    return toNumber.toNumber(value) > toNumber.toNumber(other);
+}
+
+exports.gt = gt;
Index: node_modules/es-toolkit/dist/compat/util/gt.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/gt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/gt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { toNumber } from './toNumber.mjs';
+
+function gt(value, other) {
+    if (typeof value === 'string' && typeof other === 'string') {
+        return value > other;
+    }
+    return toNumber(value) > toNumber(other);
+}
+
+export { gt };
Index: node_modules/es-toolkit/dist/compat/util/gte.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/gte.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/gte.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if value is greater than or equal to other.
+ *
+ * @param {any} value The value to compare.
+ * @param {any} other The other value to compare.
+ * @returns {boolean} Returns `true` if value is greater than or equal to other, else `false`.
+ *
+ * @example
+ * gte(3, 1); // => true
+ * gte(3, 3); // => true
+ * gte(1, 3); // => false
+ */
+declare function gte(value: any, other: any): boolean;
+
+export { gte };
Index: node_modules/es-toolkit/dist/compat/util/gte.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/gte.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/gte.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if value is greater than or equal to other.
+ *
+ * @param {any} value The value to compare.
+ * @param {any} other The other value to compare.
+ * @returns {boolean} Returns `true` if value is greater than or equal to other, else `false`.
+ *
+ * @example
+ * gte(3, 1); // => true
+ * gte(3, 3); // => true
+ * gte(1, 3); // => false
+ */
+declare function gte(value: any, other: any): boolean;
+
+export { gte };
Index: node_modules/es-toolkit/dist/compat/util/gte.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/gte.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/gte.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('./toNumber.js');
+
+function gte(value, other) {
+    if (typeof value === 'string' && typeof other === 'string') {
+        return value >= other;
+    }
+    return toNumber.toNumber(value) >= toNumber.toNumber(other);
+}
+
+exports.gte = gte;
Index: node_modules/es-toolkit/dist/compat/util/gte.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/gte.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/gte.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { toNumber } from './toNumber.mjs';
+
+function gte(value, other) {
+    if (typeof value === 'string' && typeof other === 'string') {
+        return value >= other;
+    }
+    return toNumber(value) >= toNumber(other);
+}
+
+export { gte };
Index: node_modules/es-toolkit/dist/compat/util/invoke.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/invoke.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/invoke.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Invokes the method at `path` of `object` with the given arguments.
+ *
+ * @param {unknown} object - The object to query.
+ * @param {PropertyKey | PropertyKey[]} path - The path of the method to invoke.
+ * @param {any[]} args - The arguments to invoke the method with.
+ * @returns {any} - Returns the result of the invoked method.
+ *
+ * @example
+ * const object = {
+ *   a: {
+ *     b: function (x, y) {
+ *       return x + y;
+ *     }
+ *   }
+ * };
+ *
+ * invoke(object, 'a.b', [1, 2]); // => 3
+ * invoke(object, ['a', 'b'], [1, 2]); // => 3
+ */
+declare function invoke(object: any, path: PropertyKey | readonly PropertyKey[], ...args: any[]): any;
+
+export { invoke };
Index: node_modules/es-toolkit/dist/compat/util/invoke.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/invoke.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/invoke.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Invokes the method at `path` of `object` with the given arguments.
+ *
+ * @param {unknown} object - The object to query.
+ * @param {PropertyKey | PropertyKey[]} path - The path of the method to invoke.
+ * @param {any[]} args - The arguments to invoke the method with.
+ * @returns {any} - Returns the result of the invoked method.
+ *
+ * @example
+ * const object = {
+ *   a: {
+ *     b: function (x, y) {
+ *       return x + y;
+ *     }
+ *   }
+ * };
+ *
+ * invoke(object, 'a.b', [1, 2]); // => 3
+ * invoke(object, ['a', 'b'], [1, 2]); // => 3
+ */
+declare function invoke(object: any, path: PropertyKey | readonly PropertyKey[], ...args: any[]): any;
+
+export { invoke };
Index: node_modules/es-toolkit/dist/compat/util/invoke.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/invoke.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/invoke.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toPath = require('./toPath.js');
+const toKey = require('../_internal/toKey.js');
+const last = require('../array/last.js');
+const get = require('../object/get.js');
+
+function invoke(object, path, ...args) {
+    args = args.flat(1);
+    if (object == null) {
+        return;
+    }
+    switch (typeof path) {
+        case 'string': {
+            if (typeof object === 'object' && Object.hasOwn(object, path)) {
+                return invokeImpl(object, [path], args);
+            }
+            return invokeImpl(object, toPath.toPath(path), args);
+        }
+        case 'number':
+        case 'symbol': {
+            return invokeImpl(object, [path], args);
+        }
+        default: {
+            if (Array.isArray(path)) {
+                return invokeImpl(object, path, args);
+            }
+            else {
+                return invokeImpl(object, [path], args);
+            }
+        }
+    }
+}
+function invokeImpl(object, path, args) {
+    const parent = get.get(object, path.slice(0, -1), object);
+    if (parent == null) {
+        return undefined;
+    }
+    let lastKey = last.last(path);
+    const lastValue = lastKey?.valueOf();
+    if (typeof lastValue === 'number') {
+        lastKey = toKey.toKey(lastValue);
+    }
+    else {
+        lastKey = String(lastKey);
+    }
+    const func = get.get(parent, lastKey);
+    return func?.apply(parent, args);
+}
+
+exports.invoke = invoke;
Index: node_modules/es-toolkit/dist/compat/util/invoke.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/invoke.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/invoke.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+import { toPath } from './toPath.mjs';
+import { toKey } from '../_internal/toKey.mjs';
+import { last } from '../array/last.mjs';
+import { get } from '../object/get.mjs';
+
+function invoke(object, path, ...args) {
+    args = args.flat(1);
+    if (object == null) {
+        return;
+    }
+    switch (typeof path) {
+        case 'string': {
+            if (typeof object === 'object' && Object.hasOwn(object, path)) {
+                return invokeImpl(object, [path], args);
+            }
+            return invokeImpl(object, toPath(path), args);
+        }
+        case 'number':
+        case 'symbol': {
+            return invokeImpl(object, [path], args);
+        }
+        default: {
+            if (Array.isArray(path)) {
+                return invokeImpl(object, path, args);
+            }
+            else {
+                return invokeImpl(object, [path], args);
+            }
+        }
+    }
+}
+function invokeImpl(object, path, args) {
+    const parent = get(object, path.slice(0, -1), object);
+    if (parent == null) {
+        return undefined;
+    }
+    let lastKey = last(path);
+    const lastValue = lastKey?.valueOf();
+    if (typeof lastValue === 'number') {
+        lastKey = toKey(lastValue);
+    }
+    else {
+        lastKey = String(lastKey);
+    }
+    const func = get(parent, lastKey);
+    return func?.apply(parent, args);
+}
+
+export { invoke };
Index: node_modules/es-toolkit/dist/compat/util/iteratee.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/iteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/iteratee.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Returns the provided function as-is when it is a function type.
+ *
+ * @template F - The function type
+ * @param {F} func - The function to return
+ * @returns {F} Returns the provided function unchanged
+ *
+ * @example
+ * const fn = (x: number) => x * 2;
+ * const iterateeFn = iteratee(fn);
+ * iterateeFn(4); // => 8
+ */
+declare function iteratee<F extends (...args: any[]) => any>(func: F): F;
+/**
+ * Creates an iteratee function based on the provided property key or object.
+ * If given a property key, returns a function that gets that property from objects.
+ * If given an object, returns a function that matches objects against the provided one.
+ *
+ * @param {PropertyKey | object} func - The value to convert to an iteratee
+ * @returns {Function} Returns the iteratee function
+ *
+ * @example
+ * // With property key
+ * const getLength = iteratee('length');
+ * getLength([1,2,3]); // => 3
+ *
+ * // With object
+ * const matchObj = iteratee({ x: 1, y: 2 });
+ * matchObj({ x: 1, y: 2, z: 3 }); // => true
+ */
+declare function iteratee(func: PropertyKey | object): (...args: any[]) => any;
+
+export { iteratee };
Index: node_modules/es-toolkit/dist/compat/util/iteratee.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/iteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/iteratee.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Returns the provided function as-is when it is a function type.
+ *
+ * @template F - The function type
+ * @param {F} func - The function to return
+ * @returns {F} Returns the provided function unchanged
+ *
+ * @example
+ * const fn = (x: number) => x * 2;
+ * const iterateeFn = iteratee(fn);
+ * iterateeFn(4); // => 8
+ */
+declare function iteratee<F extends (...args: any[]) => any>(func: F): F;
+/**
+ * Creates an iteratee function based on the provided property key or object.
+ * If given a property key, returns a function that gets that property from objects.
+ * If given an object, returns a function that matches objects against the provided one.
+ *
+ * @param {PropertyKey | object} func - The value to convert to an iteratee
+ * @returns {Function} Returns the iteratee function
+ *
+ * @example
+ * // With property key
+ * const getLength = iteratee('length');
+ * getLength([1,2,3]); // => 3
+ *
+ * // With object
+ * const matchObj = iteratee({ x: 1, y: 2 });
+ * matchObj({ x: 1, y: 2, z: 3 }); // => true
+ */
+declare function iteratee(func: PropertyKey | object): (...args: any[]) => any;
+
+export { iteratee };
Index: node_modules/es-toolkit/dist/compat/util/iteratee.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/iteratee.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/iteratee.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const identity = require('../../function/identity.js');
+const property = require('../object/property.js');
+const matches = require('../predicate/matches.js');
+const matchesProperty = require('../predicate/matchesProperty.js');
+
+function iteratee(value) {
+    if (value == null) {
+        return identity.identity;
+    }
+    switch (typeof value) {
+        case 'function': {
+            return value;
+        }
+        case 'object': {
+            if (Array.isArray(value) && value.length === 2) {
+                return matchesProperty.matchesProperty(value[0], value[1]);
+            }
+            return matches.matches(value);
+        }
+        case 'string':
+        case 'symbol':
+        case 'number': {
+            return property.property(value);
+        }
+    }
+}
+
+exports.iteratee = iteratee;
Index: node_modules/es-toolkit/dist/compat/util/iteratee.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/iteratee.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/iteratee.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import { identity } from '../../function/identity.mjs';
+import { property } from '../object/property.mjs';
+import { matches } from '../predicate/matches.mjs';
+import { matchesProperty } from '../predicate/matchesProperty.mjs';
+
+function iteratee(value) {
+    if (value == null) {
+        return identity;
+    }
+    switch (typeof value) {
+        case 'function': {
+            return value;
+        }
+        case 'object': {
+            if (Array.isArray(value) && value.length === 2) {
+                return matchesProperty(value[0], value[1]);
+            }
+            return matches(value);
+        }
+        case 'string':
+        case 'symbol':
+        case 'number': {
+            return property(value);
+        }
+    }
+}
+
+export { iteratee };
Index: node_modules/es-toolkit/dist/compat/util/lt.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/lt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/lt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if value is less than other.
+ *
+ * @param {any} value The value to compare.
+ * @param {any} other The other value to compare.
+ * @returns {boolean} Returns `true` if value is less than other, else `false`.
+ *
+ * @example
+ * lt(1, 3); // true
+ * lt(3, 3); // false
+ * lt(3, 1); // false
+ */
+declare function lt(value: any, other: any): boolean;
+
+export { lt };
Index: node_modules/es-toolkit/dist/compat/util/lt.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/lt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/lt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if value is less than other.
+ *
+ * @param {any} value The value to compare.
+ * @param {any} other The other value to compare.
+ * @returns {boolean} Returns `true` if value is less than other, else `false`.
+ *
+ * @example
+ * lt(1, 3); // true
+ * lt(3, 3); // false
+ * lt(3, 1); // false
+ */
+declare function lt(value: any, other: any): boolean;
+
+export { lt };
Index: node_modules/es-toolkit/dist/compat/util/lt.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/lt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/lt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('./toNumber.js');
+
+function lt(value, other) {
+    if (typeof value === 'string' && typeof other === 'string') {
+        return value < other;
+    }
+    return toNumber.toNumber(value) < toNumber.toNumber(other);
+}
+
+exports.lt = lt;
Index: node_modules/es-toolkit/dist/compat/util/lt.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/lt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/lt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { toNumber } from './toNumber.mjs';
+
+function lt(value, other) {
+    if (typeof value === 'string' && typeof other === 'string') {
+        return value < other;
+    }
+    return toNumber(value) < toNumber(other);
+}
+
+export { lt };
Index: node_modules/es-toolkit/dist/compat/util/lte.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/lte.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/lte.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if value is less than or equal to other.
+ *
+ * @param {any} value The value to compare.
+ * @param {any} other The other value to compare.
+ * @returns {boolean} Returns `true` if value is less than or equal to other, else `false`.
+ *
+ * @example
+ * lte(1, 3); // => true
+ * lte(3, 3); // => true
+ * lte(3, 1); // => false
+ */
+declare function lte(value: any, other: any): boolean;
+
+export { lte };
Index: node_modules/es-toolkit/dist/compat/util/lte.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/lte.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/lte.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Checks if value is less than or equal to other.
+ *
+ * @param {any} value The value to compare.
+ * @param {any} other The other value to compare.
+ * @returns {boolean} Returns `true` if value is less than or equal to other, else `false`.
+ *
+ * @example
+ * lte(1, 3); // => true
+ * lte(3, 3); // => true
+ * lte(3, 1); // => false
+ */
+declare function lte(value: any, other: any): boolean;
+
+export { lte };
Index: node_modules/es-toolkit/dist/compat/util/lte.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/lte.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/lte.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('./toNumber.js');
+
+function lte(value, other) {
+    if (typeof value === 'string' && typeof other === 'string') {
+        return value <= other;
+    }
+    return toNumber.toNumber(value) <= toNumber.toNumber(other);
+}
+
+exports.lte = lte;
Index: node_modules/es-toolkit/dist/compat/util/lte.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/lte.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/lte.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { toNumber } from './toNumber.mjs';
+
+function lte(value, other) {
+    if (typeof value === 'string' && typeof other === 'string') {
+        return value <= other;
+    }
+    return toNumber(value) <= toNumber(other);
+}
+
+export { lte };
Index: node_modules/es-toolkit/dist/compat/util/method.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/method.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/method.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates a function that invokes the method at `path` of a given object with the provided arguments.
+ *
+ * @param {PropertyKey | PropertyKey[]} path - The path of the method to invoke.
+ * @param {...any} args - The arguments to invoke the method with.
+ * @returns {(object?: unknown) => any} - Returns a new function that takes an object and invokes the method at `path` with `args`.
+ *
+ * @example
+ * const object = {
+ *   a: {
+ *     b: function (x, y) {
+ *       return x + y;
+ *     }
+ *   }
+ * };
+ *
+ * const add = method('a.b', 1, 2);
+ * console.log(add(object)); // => 3
+ */
+declare function method(path: PropertyKey | readonly PropertyKey[], ...args: any[]): (object: any) => any;
+
+export { method };
Index: node_modules/es-toolkit/dist/compat/util/method.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/method.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/method.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates a function that invokes the method at `path` of a given object with the provided arguments.
+ *
+ * @param {PropertyKey | PropertyKey[]} path - The path of the method to invoke.
+ * @param {...any} args - The arguments to invoke the method with.
+ * @returns {(object?: unknown) => any} - Returns a new function that takes an object and invokes the method at `path` with `args`.
+ *
+ * @example
+ * const object = {
+ *   a: {
+ *     b: function (x, y) {
+ *       return x + y;
+ *     }
+ *   }
+ * };
+ *
+ * const add = method('a.b', 1, 2);
+ * console.log(add(object)); // => 3
+ */
+declare function method(path: PropertyKey | readonly PropertyKey[], ...args: any[]): (object: any) => any;
+
+export { method };
Index: node_modules/es-toolkit/dist/compat/util/method.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/method.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/method.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const invoke = require('./invoke.js');
+
+function method(path, ...args) {
+    return function (object) {
+        return invoke.invoke(object, path, args);
+    };
+}
+
+exports.method = method;
Index: node_modules/es-toolkit/dist/compat/util/method.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/method.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/method.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { invoke } from './invoke.mjs';
+
+function method(path, ...args) {
+    return function (object) {
+        return invoke(object, path, args);
+    };
+}
+
+export { method };
Index: node_modules/es-toolkit/dist/compat/util/methodOf.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/methodOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/methodOf.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates a function that invokes the method at a given path of `object` with the provided arguments.
+ *
+ * @param {object} object - The object to query.
+ * @param {...any} args - The arguments to invoke the method with.
+ * @returns {(path: PropertyKey | PropertyKey[]) => any} - Returns a new function that takes a path and invokes the method at `path` with `args`.
+ *
+ * @example
+ * const object = {
+ *  a: {
+ *   b: function (x, y) {
+ *    return x + y;
+ *    }
+ *   }
+ * };
+ *
+ * const add = methodOf(object, 1, 2);
+ * console.log(add('a.b')); // => 3
+ */
+declare function methodOf(object: object, ...args: any[]): (path: PropertyKey | readonly PropertyKey[]) => any;
+
+export { methodOf };
Index: node_modules/es-toolkit/dist/compat/util/methodOf.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/methodOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/methodOf.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates a function that invokes the method at a given path of `object` with the provided arguments.
+ *
+ * @param {object} object - The object to query.
+ * @param {...any} args - The arguments to invoke the method with.
+ * @returns {(path: PropertyKey | PropertyKey[]) => any} - Returns a new function that takes a path and invokes the method at `path` with `args`.
+ *
+ * @example
+ * const object = {
+ *  a: {
+ *   b: function (x, y) {
+ *    return x + y;
+ *    }
+ *   }
+ * };
+ *
+ * const add = methodOf(object, 1, 2);
+ * console.log(add('a.b')); // => 3
+ */
+declare function methodOf(object: object, ...args: any[]): (path: PropertyKey | readonly PropertyKey[]) => any;
+
+export { methodOf };
Index: node_modules/es-toolkit/dist/compat/util/methodOf.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/methodOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/methodOf.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const invoke = require('./invoke.js');
+
+function methodOf(object, ...args) {
+    return function (path) {
+        return invoke.invoke(object, path, args);
+    };
+}
+
+exports.methodOf = methodOf;
Index: node_modules/es-toolkit/dist/compat/util/methodOf.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/methodOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/methodOf.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { invoke } from './invoke.mjs';
+
+function methodOf(object, ...args) {
+    return function (path) {
+        return invoke(object, path, args);
+    };
+}
+
+export { methodOf };
Index: node_modules/es-toolkit/dist/compat/util/now.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/now.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/now.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Returns the number of milliseconds elapsed since January 1, 1970 00:00:00 UTC.
+ *
+ * @returns {number} The current time in milliseconds.
+ *
+ * @example
+ * const currentTime = now();
+ * console.log(currentTime); // Outputs the current time in milliseconds
+ *
+ * @example
+ * const startTime = now();
+ * // Some time-consuming operation
+ * const endTime = now();
+ * console.log(`Operation took ${endTime - startTime} milliseconds`);
+ */
+declare function now(): number;
+
+export { now };
Index: node_modules/es-toolkit/dist/compat/util/now.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/now.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/now.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Returns the number of milliseconds elapsed since January 1, 1970 00:00:00 UTC.
+ *
+ * @returns {number} The current time in milliseconds.
+ *
+ * @example
+ * const currentTime = now();
+ * console.log(currentTime); // Outputs the current time in milliseconds
+ *
+ * @example
+ * const startTime = now();
+ * // Some time-consuming operation
+ * const endTime = now();
+ * console.log(`Operation took ${endTime - startTime} milliseconds`);
+ */
+declare function now(): number;
+
+export { now };
Index: node_modules/es-toolkit/dist/compat/util/now.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/now.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/now.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function now() {
+    return Date.now();
+}
+
+exports.now = now;
Index: node_modules/es-toolkit/dist/compat/util/now.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/now.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/now.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function now() {
+    return Date.now();
+}
+
+export { now };
Index: node_modules/es-toolkit/dist/compat/util/over.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/over.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/over.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Creates a function that invokes given functions and returns their results as an array.
+ *
+ * @param {Array<Iteratee | Iteratee[]>} iteratees - The iteratees to invoke.
+ * @returns {(...args: any[]) => unknown[]} Returns the new function.
+ *
+ * @example
+ * const func = over([Math.max, Math.min]);
+ * const func2 = over(Math.max, Math.min); // same as above
+ * func(1, 2, 3, 4);
+ * // => [4, 1]
+ * func2(1, 2, 3, 4);
+ * // => [4, 1]
+ *
+ * const func = over(['a', 'b']);
+ * func({ a: 1, b: 2 });
+ * // => [1, 2]
+ *
+ * const func = over([{ a: 1 }, { b: 2 }]);
+ * func({ a: 1, b: 2 });
+ * // => [true, false]
+ *
+ * const func = over([['a', 1], ['b', 2]]);
+ * func({ a: 1, b: 2 });
+ * // => [true, true]
+ */
+declare function over<T>(...iteratees: Array<((...args: any[]) => T) | ReadonlyArray<(...args: any[]) => T>>): (...args: any[]) => T[];
+
+export { over };
Index: node_modules/es-toolkit/dist/compat/util/over.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/over.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/over.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Creates a function that invokes given functions and returns their results as an array.
+ *
+ * @param {Array<Iteratee | Iteratee[]>} iteratees - The iteratees to invoke.
+ * @returns {(...args: any[]) => unknown[]} Returns the new function.
+ *
+ * @example
+ * const func = over([Math.max, Math.min]);
+ * const func2 = over(Math.max, Math.min); // same as above
+ * func(1, 2, 3, 4);
+ * // => [4, 1]
+ * func2(1, 2, 3, 4);
+ * // => [4, 1]
+ *
+ * const func = over(['a', 'b']);
+ * func({ a: 1, b: 2 });
+ * // => [1, 2]
+ *
+ * const func = over([{ a: 1 }, { b: 2 }]);
+ * func({ a: 1, b: 2 });
+ * // => [true, false]
+ *
+ * const func = over([['a', 1], ['b', 2]]);
+ * func({ a: 1, b: 2 });
+ * // => [true, true]
+ */
+declare function over<T>(...iteratees: Array<((...args: any[]) => T) | ReadonlyArray<(...args: any[]) => T>>): (...args: any[]) => T[];
+
+export { over };
Index: node_modules/es-toolkit/dist/compat/util/over.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/over.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/over.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const iteratee = require('./iteratee.js');
+
+function over(...iteratees) {
+    if (iteratees.length === 1 && Array.isArray(iteratees[0])) {
+        iteratees = iteratees[0];
+    }
+    const funcs = iteratees.map(item => iteratee.iteratee(item));
+    return function (...args) {
+        return funcs.map(func => func.apply(this, args));
+    };
+}
+
+exports.over = over;
Index: node_modules/es-toolkit/dist/compat/util/over.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/over.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/over.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { iteratee } from './iteratee.mjs';
+
+function over(...iteratees) {
+    if (iteratees.length === 1 && Array.isArray(iteratees[0])) {
+        iteratees = iteratees[0];
+    }
+    const funcs = iteratees.map(item => iteratee(item));
+    return function (...args) {
+        return funcs.map(func => func.apply(this, args));
+    };
+}
+
+export { over };
Index: node_modules/es-toolkit/dist/compat/util/overEvery.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/overEvery.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/overEvery.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+/**
+ * Creates a predicate function that checks if a value satisfies all of the given predicates.
+ *
+ * @template T - The type of the value to be checked.
+ * @template U - The first possible type that the value could match.
+ * @template V - The second possible type that the value could match.
+ *
+ * @param {(value: T) => value is U} predicate1 - A function that checks if the value matches type `U`.
+ * @param {(value: T) => value is V} predicate2 - A function that checks if the value matches type `V`.
+ *
+ * @returns {(value: T) => value is U & V} A function that takes a value and returns `true` if all predicates return truthy.
+ *
+ * @example
+ * const func = overEvery(
+ *   (value) => typeof value === 'string',
+ *   (value) => value === 'hello'
+ * );
+ *
+ * func("hello"); // true
+ * func("world"); // false
+ * func(42); // false
+ */
+declare function overEvery<T, U extends T, V extends T>(predicate1: (value: T) => value is U, predicate2: (value: T) => value is V): (value: T) => value is U & V;
+/**
+ * Creates a function that checks if all of the given predicates return truthy for the provided values.
+ *
+ * @template T - The type of the values to be checked.
+ *
+ * @param {...Array<((...values: T[]) => boolean) | ReadonlyArray<(...values: T[]) => boolean>>} predicates -
+ *   A list of predicates or arrays of predicates. Each predicate is a function that takes one or more values of
+ *   type `T` and returns a boolean indicating whether the condition is satisfied for those values.
+ *
+ * @returns {(...values: T[]) => boolean} A function that takes a list of values and returns `true` if all of the
+ *   predicates return truthy for the provided values, and `false` otherwise.
+ *
+ * @example
+ * const func = overEvery(
+ *   (value) => typeof value === 'string',
+ *   (value) => value.length > 3
+ * );
+ *
+ * func("hello"); // true
+ * func("hi"); // false
+ * func(42); // false
+ *
+ * @example
+ * const func = overEvery([
+ *   (value) => value.a > 0,
+ *   (value) => value.b > 0
+ * ]);
+ *
+ * func({ a: 1, b: 2 }); // true
+ * func({ a: 0, b: 2 }); // false
+ *
+ * @example
+ * const func = overEvery(
+ *   (a, b) => typeof a === 'string' && typeof b === 'string',
+ *   (a, b) => a.length > 3 && b.length > 3
+ * );
+ *
+ * func("hello", "world"); // true
+ * func("hi", "world"); // false
+ * func(1, 10); // false
+ */
+declare function overEvery<T>(...predicates: Array<((...args: T[]) => boolean) | ReadonlyArray<(...args: T[]) => boolean>>): (...args: T[]) => boolean;
+
+export { overEvery };
Index: node_modules/es-toolkit/dist/compat/util/overEvery.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/overEvery.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/overEvery.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+/**
+ * Creates a predicate function that checks if a value satisfies all of the given predicates.
+ *
+ * @template T - The type of the value to be checked.
+ * @template U - The first possible type that the value could match.
+ * @template V - The second possible type that the value could match.
+ *
+ * @param {(value: T) => value is U} predicate1 - A function that checks if the value matches type `U`.
+ * @param {(value: T) => value is V} predicate2 - A function that checks if the value matches type `V`.
+ *
+ * @returns {(value: T) => value is U & V} A function that takes a value and returns `true` if all predicates return truthy.
+ *
+ * @example
+ * const func = overEvery(
+ *   (value) => typeof value === 'string',
+ *   (value) => value === 'hello'
+ * );
+ *
+ * func("hello"); // true
+ * func("world"); // false
+ * func(42); // false
+ */
+declare function overEvery<T, U extends T, V extends T>(predicate1: (value: T) => value is U, predicate2: (value: T) => value is V): (value: T) => value is U & V;
+/**
+ * Creates a function that checks if all of the given predicates return truthy for the provided values.
+ *
+ * @template T - The type of the values to be checked.
+ *
+ * @param {...Array<((...values: T[]) => boolean) | ReadonlyArray<(...values: T[]) => boolean>>} predicates -
+ *   A list of predicates or arrays of predicates. Each predicate is a function that takes one or more values of
+ *   type `T` and returns a boolean indicating whether the condition is satisfied for those values.
+ *
+ * @returns {(...values: T[]) => boolean} A function that takes a list of values and returns `true` if all of the
+ *   predicates return truthy for the provided values, and `false` otherwise.
+ *
+ * @example
+ * const func = overEvery(
+ *   (value) => typeof value === 'string',
+ *   (value) => value.length > 3
+ * );
+ *
+ * func("hello"); // true
+ * func("hi"); // false
+ * func(42); // false
+ *
+ * @example
+ * const func = overEvery([
+ *   (value) => value.a > 0,
+ *   (value) => value.b > 0
+ * ]);
+ *
+ * func({ a: 1, b: 2 }); // true
+ * func({ a: 0, b: 2 }); // false
+ *
+ * @example
+ * const func = overEvery(
+ *   (a, b) => typeof a === 'string' && typeof b === 'string',
+ *   (a, b) => a.length > 3 && b.length > 3
+ * );
+ *
+ * func("hello", "world"); // true
+ * func("hi", "world"); // false
+ * func(1, 10); // false
+ */
+declare function overEvery<T>(...predicates: Array<((...args: T[]) => boolean) | ReadonlyArray<(...args: T[]) => boolean>>): (...args: T[]) => boolean;
+
+export { overEvery };
Index: node_modules/es-toolkit/dist/compat/util/overEvery.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/overEvery.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/overEvery.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const iteratee = require('./iteratee.js');
+
+function overEvery(...predicates) {
+    return function (...values) {
+        for (let i = 0; i < predicates.length; ++i) {
+            const predicate = predicates[i];
+            if (!Array.isArray(predicate)) {
+                if (!iteratee.iteratee(predicate).apply(this, values)) {
+                    return false;
+                }
+                continue;
+            }
+            for (let j = 0; j < predicate.length; ++j) {
+                if (!iteratee.iteratee(predicate[j]).apply(this, values)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    };
+}
+
+exports.overEvery = overEvery;
Index: node_modules/es-toolkit/dist/compat/util/overEvery.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/overEvery.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/overEvery.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { iteratee } from './iteratee.mjs';
+
+function overEvery(...predicates) {
+    return function (...values) {
+        for (let i = 0; i < predicates.length; ++i) {
+            const predicate = predicates[i];
+            if (!Array.isArray(predicate)) {
+                if (!iteratee(predicate).apply(this, values)) {
+                    return false;
+                }
+                continue;
+            }
+            for (let j = 0; j < predicate.length; ++j) {
+                if (!iteratee(predicate[j]).apply(this, values)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    };
+}
+
+export { overEvery };
Index: node_modules/es-toolkit/dist/compat/util/overSome.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/overSome.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/overSome.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+/**
+ * Creates a predicate function that checks if a value satisfies at least one of the given predicates.
+ *
+ * @template T - The type of the value to be checked.
+ * @template U - The first possible type that the value could match.
+ * @template V - The second possible type that the value could match.
+ *
+ * @param {(value: T) => value is U} predicate1 - A function that checks if the value matches type `U`.
+ * @param {(value: T) => value is V} predicate2 - A function that checks if the value matches type `V`.
+ *
+ * @returns {(value: T) => value is U | V} A function that takes a value and returns `true` if any predicates return truthy.
+ *
+ * @example
+ * const func = overSome(
+ *   (value) => typeof value === 'string',
+ *   (value) => typeof value === 'number'
+ * );
+ *
+ * func("hello"); // true
+ * func(42); // true
+ * func([]); // false
+ */
+declare function overSome<T, U extends T, V extends T>(predicate1: (value: T) => value is U, predicate2: (value: T) => value is V): (value: T) => value is U | V;
+/**
+ * Creates a function that checks if any of the given predicates return truthy for the provided values.
+ *
+ * @template T - The type of the values to be checked.
+ *
+ * @param {...Array<((...values: T[]) => boolean) | ReadonlyArray<(...values: T[]) => boolean>>} predicates -
+ *   A list of predicates or arrays of predicates. Each predicate is a function that takes one or more values of
+ *   type `T` and returns a boolean indicating whether the condition is satisfied for those values.
+ *
+ * @returns {(...values: T[]) => boolean} A function that takes a list of values and returns `true` if any of the
+ *   predicates return truthy for the provided values, and `false` otherwise.
+ *
+ * @example
+ * const func = overSome(
+ *   (value) => typeof value === 'string',
+ *   (value) => typeof value === 'number',
+ *   (value) => typeof value === 'symbol'
+ * );
+ *
+ * func("hello"); // true
+ * func(42); // true
+ * func(Symbol()); // true
+ * func([]); // false
+ *
+ * @example
+ * const func = overSome([
+ *   (value) => value.a > 0,
+ *   (value) => value.b > 0
+ * ]);
+ *
+ * func({ a: 0, b: 2 }); // true
+ * func({ a: 0, b: 0 }); // false
+ *
+ * @example
+ * const func = overSome(
+ *   (a, b) => typeof a === 'string' && typeof b === 'string',
+ *   (a, b) => a > 0 && b > 0
+ * );
+ *
+ * func("hello", "world"); // true
+ * func(1, 10); // true
+ * func(0, 2); // false
+ */
+declare function overSome<T>(...predicates: Array<((...values: T[]) => boolean) | ReadonlyArray<(...values: T[]) => boolean>>): (...values: T[]) => boolean;
+
+export { overSome };
Index: node_modules/es-toolkit/dist/compat/util/overSome.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/overSome.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/overSome.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+/**
+ * Creates a predicate function that checks if a value satisfies at least one of the given predicates.
+ *
+ * @template T - The type of the value to be checked.
+ * @template U - The first possible type that the value could match.
+ * @template V - The second possible type that the value could match.
+ *
+ * @param {(value: T) => value is U} predicate1 - A function that checks if the value matches type `U`.
+ * @param {(value: T) => value is V} predicate2 - A function that checks if the value matches type `V`.
+ *
+ * @returns {(value: T) => value is U | V} A function that takes a value and returns `true` if any predicates return truthy.
+ *
+ * @example
+ * const func = overSome(
+ *   (value) => typeof value === 'string',
+ *   (value) => typeof value === 'number'
+ * );
+ *
+ * func("hello"); // true
+ * func(42); // true
+ * func([]); // false
+ */
+declare function overSome<T, U extends T, V extends T>(predicate1: (value: T) => value is U, predicate2: (value: T) => value is V): (value: T) => value is U | V;
+/**
+ * Creates a function that checks if any of the given predicates return truthy for the provided values.
+ *
+ * @template T - The type of the values to be checked.
+ *
+ * @param {...Array<((...values: T[]) => boolean) | ReadonlyArray<(...values: T[]) => boolean>>} predicates -
+ *   A list of predicates or arrays of predicates. Each predicate is a function that takes one or more values of
+ *   type `T` and returns a boolean indicating whether the condition is satisfied for those values.
+ *
+ * @returns {(...values: T[]) => boolean} A function that takes a list of values and returns `true` if any of the
+ *   predicates return truthy for the provided values, and `false` otherwise.
+ *
+ * @example
+ * const func = overSome(
+ *   (value) => typeof value === 'string',
+ *   (value) => typeof value === 'number',
+ *   (value) => typeof value === 'symbol'
+ * );
+ *
+ * func("hello"); // true
+ * func(42); // true
+ * func(Symbol()); // true
+ * func([]); // false
+ *
+ * @example
+ * const func = overSome([
+ *   (value) => value.a > 0,
+ *   (value) => value.b > 0
+ * ]);
+ *
+ * func({ a: 0, b: 2 }); // true
+ * func({ a: 0, b: 0 }); // false
+ *
+ * @example
+ * const func = overSome(
+ *   (a, b) => typeof a === 'string' && typeof b === 'string',
+ *   (a, b) => a > 0 && b > 0
+ * );
+ *
+ * func("hello", "world"); // true
+ * func(1, 10); // true
+ * func(0, 2); // false
+ */
+declare function overSome<T>(...predicates: Array<((...values: T[]) => boolean) | ReadonlyArray<(...values: T[]) => boolean>>): (...values: T[]) => boolean;
+
+export { overSome };
Index: node_modules/es-toolkit/dist/compat/util/overSome.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/overSome.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/overSome.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const iteratee = require('./iteratee.js');
+
+function overSome(...predicates) {
+    return function (...values) {
+        for (let i = 0; i < predicates.length; ++i) {
+            const predicate = predicates[i];
+            if (!Array.isArray(predicate)) {
+                if (iteratee.iteratee(predicate).apply(this, values)) {
+                    return true;
+                }
+                continue;
+            }
+            for (let j = 0; j < predicate.length; ++j) {
+                if (iteratee.iteratee(predicate[j]).apply(this, values)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    };
+}
+
+exports.overSome = overSome;
Index: node_modules/es-toolkit/dist/compat/util/overSome.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/overSome.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/overSome.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { iteratee } from './iteratee.mjs';
+
+function overSome(...predicates) {
+    return function (...values) {
+        for (let i = 0; i < predicates.length; ++i) {
+            const predicate = predicates[i];
+            if (!Array.isArray(predicate)) {
+                if (iteratee(predicate).apply(this, values)) {
+                    return true;
+                }
+                continue;
+            }
+            for (let j = 0; j < predicate.length; ++j) {
+                if (iteratee(predicate[j]).apply(this, values)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    };
+}
+
+export { overSome };
Index: node_modules/es-toolkit/dist/compat/util/stubArray.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Returns a new empty array.
+ *
+ * @returns {Array} A new empty array.
+ * @example
+ * stubArray() // Returns []
+ */
+declare function stubArray(): any[];
+
+export { stubArray };
Index: node_modules/es-toolkit/dist/compat/util/stubArray.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Returns a new empty array.
+ *
+ * @returns {Array} A new empty array.
+ * @example
+ * stubArray() // Returns []
+ */
+declare function stubArray(): any[];
+
+export { stubArray };
Index: node_modules/es-toolkit/dist/compat/util/stubArray.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function stubArray() {
+    return [];
+}
+
+exports.stubArray = stubArray;
Index: node_modules/es-toolkit/dist/compat/util/stubArray.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function stubArray() {
+    return [];
+}
+
+export { stubArray };
Index: node_modules/es-toolkit/dist/compat/util/stubFalse.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubFalse.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubFalse.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Returns false.
+ *
+ * @returns {boolean} false.
+ * @example
+ * stubFalse() // Returns false
+ */
+declare function stubFalse(): false;
+/**
+ * Returns false.
+ *
+ * @returns {boolean} false.
+ * @example
+ * stubFalse() // Returns false
+ */
+declare function stubFalse(): false;
+
+export { stubFalse };
Index: node_modules/es-toolkit/dist/compat/util/stubFalse.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubFalse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubFalse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Returns false.
+ *
+ * @returns {boolean} false.
+ * @example
+ * stubFalse() // Returns false
+ */
+declare function stubFalse(): false;
+/**
+ * Returns false.
+ *
+ * @returns {boolean} false.
+ * @example
+ * stubFalse() // Returns false
+ */
+declare function stubFalse(): false;
+
+export { stubFalse };
Index: node_modules/es-toolkit/dist/compat/util/stubFalse.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubFalse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubFalse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function stubFalse() {
+    return false;
+}
+
+exports.stubFalse = stubFalse;
Index: node_modules/es-toolkit/dist/compat/util/stubFalse.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubFalse.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubFalse.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function stubFalse() {
+    return false;
+}
+
+export { stubFalse };
Index: node_modules/es-toolkit/dist/compat/util/stubObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Returns an empty object.
+ *
+ * @returns {Object} An empty object.
+ * @example
+ * stubObject() // Returns {}
+ */
+declare function stubObject(): any;
+
+export { stubObject };
Index: node_modules/es-toolkit/dist/compat/util/stubObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Returns an empty object.
+ *
+ * @returns {Object} An empty object.
+ * @example
+ * stubObject() // Returns {}
+ */
+declare function stubObject(): any;
+
+export { stubObject };
Index: node_modules/es-toolkit/dist/compat/util/stubObject.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function stubObject() {
+    return {};
+}
+
+exports.stubObject = stubObject;
Index: node_modules/es-toolkit/dist/compat/util/stubObject.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function stubObject() {
+    return {};
+}
+
+export { stubObject };
Index: node_modules/es-toolkit/dist/compat/util/stubString.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Returns an empty string.
+ *
+ * @returns {string} An empty string.
+ * @example
+ * stubString() // Returns ''
+ */
+declare function stubString(): string;
+
+export { stubString };
Index: node_modules/es-toolkit/dist/compat/util/stubString.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Returns an empty string.
+ *
+ * @returns {string} An empty string.
+ * @example
+ * stubString() // Returns ''
+ */
+declare function stubString(): string;
+
+export { stubString };
Index: node_modules/es-toolkit/dist/compat/util/stubString.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function stubString() {
+    return '';
+}
+
+exports.stubString = stubString;
Index: node_modules/es-toolkit/dist/compat/util/stubString.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function stubString() {
+    return '';
+}
+
+export { stubString };
Index: node_modules/es-toolkit/dist/compat/util/stubTrue.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubTrue.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubTrue.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Returns true.
+ *
+ * @returns {boolean} true.
+ * @example
+ * stubTrue() // Returns true
+ */
+declare function stubTrue(): true;
+/**
+ * Returns true.
+ *
+ * @returns {boolean} true.
+ * @example
+ * stubTrue() // Returns true
+ */
+declare function stubTrue(): true;
+
+export { stubTrue };
Index: node_modules/es-toolkit/dist/compat/util/stubTrue.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubTrue.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubTrue.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Returns true.
+ *
+ * @returns {boolean} true.
+ * @example
+ * stubTrue() // Returns true
+ */
+declare function stubTrue(): true;
+/**
+ * Returns true.
+ *
+ * @returns {boolean} true.
+ * @example
+ * stubTrue() // Returns true
+ */
+declare function stubTrue(): true;
+
+export { stubTrue };
Index: node_modules/es-toolkit/dist/compat/util/stubTrue.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubTrue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubTrue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function stubTrue() {
+    return true;
+}
+
+exports.stubTrue = stubTrue;
Index: node_modules/es-toolkit/dist/compat/util/stubTrue.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/stubTrue.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/stubTrue.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function stubTrue() {
+    return true;
+}
+
+export { stubTrue };
Index: node_modules/es-toolkit/dist/compat/util/times.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/times.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/times.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Invokes the iteratee function n times, returning an array of the results.
+ *
+ * @template T The return type of the iteratee function.
+ * @param {number} n - The number of times to invoke iteratee.
+ * @param {(num: number) => T} iteratee - The function to invoke for each index.
+ * @returns {T[]} An array containing the results of invoking iteratee n times.
+ * @example
+ * times(3, (i) => i * 2); // => [0, 2, 4]
+ * times(2, () => 'es-toolkit'); // => ['es-toolkit', 'es-toolkit']
+ */
+declare function times<T>(n: number, iteratee: (num: number) => T): T[];
+/**
+ * Invokes the default iteratee function n times, returning an array of indices.
+ *
+ * @param {number} n - The number of times to invoke the default iteratee.
+ * @returns {number[]} An array containing indices from 0 to n-1.
+ * @example
+ * times(3); // => [0, 1, 2]
+ */
+declare function times(n: number): number[];
+
+export { times };
Index: node_modules/es-toolkit/dist/compat/util/times.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/times.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/times.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Invokes the iteratee function n times, returning an array of the results.
+ *
+ * @template T The return type of the iteratee function.
+ * @param {number} n - The number of times to invoke iteratee.
+ * @param {(num: number) => T} iteratee - The function to invoke for each index.
+ * @returns {T[]} An array containing the results of invoking iteratee n times.
+ * @example
+ * times(3, (i) => i * 2); // => [0, 2, 4]
+ * times(2, () => 'es-toolkit'); // => ['es-toolkit', 'es-toolkit']
+ */
+declare function times<T>(n: number, iteratee: (num: number) => T): T[];
+/**
+ * Invokes the default iteratee function n times, returning an array of indices.
+ *
+ * @param {number} n - The number of times to invoke the default iteratee.
+ * @returns {number[]} An array containing indices from 0 to n-1.
+ * @example
+ * times(3); // => [0, 1, 2]
+ */
+declare function times(n: number): number[];
+
+export { times };
Index: node_modules/es-toolkit/dist/compat/util/times.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/times.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/times.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toInteger = require('./toInteger.js');
+
+function times(n, getValue) {
+    n = toInteger.toInteger(n);
+    if (n < 1 || !Number.isSafeInteger(n)) {
+        return [];
+    }
+    const result = new Array(n);
+    for (let i = 0; i < n; i++) {
+        result[i] = typeof getValue === 'function' ? getValue(i) : i;
+    }
+    return result;
+}
+
+exports.times = times;
Index: node_modules/es-toolkit/dist/compat/util/times.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/times.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/times.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { toInteger } from './toInteger.mjs';
+
+function times(n, getValue) {
+    n = toInteger(n);
+    if (n < 1 || !Number.isSafeInteger(n)) {
+        return [];
+    }
+    const result = new Array(n);
+    for (let i = 0; i < n; i++) {
+        result[i] = typeof getValue === 'function' ? getValue(i) : i;
+    }
+    return result;
+}
+
+export { times };
Index: node_modules/es-toolkit/dist/compat/util/toArray.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Converts a record or null/undefined to an array of its values.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | null | undefined} value - The record or null/undefined to convert.
+ * @returns {T[]} Returns an array of the record's values or an empty array if null/undefined.
+ *
+ * @example
+ * toArray({ 'a': 1, 'b': 2 }) // => returns [1, 2]
+ * toArray(null) // => returns []
+ */
+declare function toArray<T>(value: Record<string, T> | Record<number, T> | null | undefined): T[];
+/**
+ * Converts a value to an array of its values.
+ *
+ * @template T
+ * @param {T} value - The value to convert.
+ * @returns {Array<T[keyof T]>} Returns an array of the value's values.
+ *
+ * @example
+ * toArray({ x: 10, y: 20 }) // => returns [10, 20]
+ * toArray('abc') // => returns ['a', 'b', 'c']
+ */
+declare function toArray<T>(value: T): Array<T[keyof T]>;
+/**
+ * Converts an undefined value to an empty array.
+ *
+ * @returns {any[]} Returns an empty array.
+ *
+ * @example
+ * toArray() // => returns []
+ */
+declare function toArray(): any[];
+
+export { toArray };
Index: node_modules/es-toolkit/dist/compat/util/toArray.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Converts a record or null/undefined to an array of its values.
+ *
+ * @template T
+ * @param {Record<string, T> | Record<number, T> | null | undefined} value - The record or null/undefined to convert.
+ * @returns {T[]} Returns an array of the record's values or an empty array if null/undefined.
+ *
+ * @example
+ * toArray({ 'a': 1, 'b': 2 }) // => returns [1, 2]
+ * toArray(null) // => returns []
+ */
+declare function toArray<T>(value: Record<string, T> | Record<number, T> | null | undefined): T[];
+/**
+ * Converts a value to an array of its values.
+ *
+ * @template T
+ * @param {T} value - The value to convert.
+ * @returns {Array<T[keyof T]>} Returns an array of the value's values.
+ *
+ * @example
+ * toArray({ x: 10, y: 20 }) // => returns [10, 20]
+ * toArray('abc') // => returns ['a', 'b', 'c']
+ */
+declare function toArray<T>(value: T): Array<T[keyof T]>;
+/**
+ * Converts an undefined value to an empty array.
+ *
+ * @returns {any[]} Returns an empty array.
+ *
+ * @example
+ * toArray() // => returns []
+ */
+declare function toArray(): any[];
+
+export { toArray };
Index: node_modules/es-toolkit/dist/compat/util/toArray.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayLike = require('../predicate/isArrayLike.js');
+const isMap = require('../predicate/isMap.js');
+
+function toArray(value) {
+    if (value == null) {
+        return [];
+    }
+    if (isArrayLike.isArrayLike(value) || isMap.isMap(value)) {
+        return Array.from(value);
+    }
+    if (typeof value === 'object') {
+        return Object.values(value);
+    }
+    return [];
+}
+
+exports.toArray = toArray;
Index: node_modules/es-toolkit/dist/compat/util/toArray.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { isArrayLike } from '../predicate/isArrayLike.mjs';
+import { isMap } from '../predicate/isMap.mjs';
+
+function toArray(value) {
+    if (value == null) {
+        return [];
+    }
+    if (isArrayLike(value) || isMap(value)) {
+        return Array.from(value);
+    }
+    if (typeof value === 'object') {
+        return Object.values(value);
+    }
+    return [];
+}
+
+export { toArray };
Index: node_modules/es-toolkit/dist/compat/util/toFinite.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toFinite.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toFinite.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts `value` to a finite number.
+ *
+ * @param {unknown} value - The value to convert.
+ * @returns {number} Returns the number.
+ *
+ * @example
+ * toNumber(3.2); // => 3.2
+ * toNumber(Number.MIN_VALUE); // => 5e-324
+ * toNumber(Infinity); // => 1.7976931348623157e+308
+ * toNumber('3.2'); // => 3.2
+ * toNumber(Symbol.iterator); // => 0
+ * toNumber(NaN); // => 0
+ */
+declare function toFinite(value: any): number;
+
+export { toFinite };
Index: node_modules/es-toolkit/dist/compat/util/toFinite.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toFinite.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toFinite.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts `value` to a finite number.
+ *
+ * @param {unknown} value - The value to convert.
+ * @returns {number} Returns the number.
+ *
+ * @example
+ * toNumber(3.2); // => 3.2
+ * toNumber(Number.MIN_VALUE); // => 5e-324
+ * toNumber(Infinity); // => 1.7976931348623157e+308
+ * toNumber('3.2'); // => 3.2
+ * toNumber(Symbol.iterator); // => 0
+ * toNumber(NaN); // => 0
+ */
+declare function toFinite(value: any): number;
+
+export { toFinite };
Index: node_modules/es-toolkit/dist/compat/util/toFinite.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toFinite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toFinite.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toNumber = require('./toNumber.js');
+
+function toFinite(value) {
+    if (!value) {
+        return value === 0 ? value : 0;
+    }
+    value = toNumber.toNumber(value);
+    if (value === Infinity || value === -Infinity) {
+        const sign = value < 0 ? -1 : 1;
+        return sign * Number.MAX_VALUE;
+    }
+    return value === value ? value : 0;
+}
+
+exports.toFinite = toFinite;
Index: node_modules/es-toolkit/dist/compat/util/toFinite.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toFinite.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toFinite.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { toNumber } from './toNumber.mjs';
+
+function toFinite(value) {
+    if (!value) {
+        return value === 0 ? value : 0;
+    }
+    value = toNumber(value);
+    if (value === Infinity || value === -Infinity) {
+        const sign = value < 0 ? -1 : 1;
+        return sign * Number.MAX_VALUE;
+    }
+    return value === value ? value : 0;
+}
+
+export { toFinite };
Index: node_modules/es-toolkit/dist/compat/util/toInteger.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toInteger.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toInteger.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts `value` to an integer.
+ *
+ * This function first converts `value` to a finite number. If the result has any decimal places,
+ * they are removed by rounding down to the nearest whole number.
+ *
+ * @param {unknown} value - The value to convert.
+ * @returns {number} Returns the number.
+ *
+ * @example
+ * toInteger(3.2); // => 3
+ * toInteger(Number.MIN_VALUE); // => 0
+ * toInteger(Infinity); // => 1.7976931348623157e+308
+ * toInteger('3.2'); // => 3
+ * toInteger(Symbol.iterator); // => 0
+ * toInteger(NaN); // => 0
+ */
+declare function toInteger(value: any): number;
+
+export { toInteger };
Index: node_modules/es-toolkit/dist/compat/util/toInteger.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts `value` to an integer.
+ *
+ * This function first converts `value` to a finite number. If the result has any decimal places,
+ * they are removed by rounding down to the nearest whole number.
+ *
+ * @param {unknown} value - The value to convert.
+ * @returns {number} Returns the number.
+ *
+ * @example
+ * toInteger(3.2); // => 3
+ * toInteger(Number.MIN_VALUE); // => 0
+ * toInteger(Infinity); // => 1.7976931348623157e+308
+ * toInteger('3.2'); // => 3
+ * toInteger(Symbol.iterator); // => 0
+ * toInteger(NaN); // => 0
+ */
+declare function toInteger(value: any): number;
+
+export { toInteger };
Index: node_modules/es-toolkit/dist/compat/util/toInteger.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toFinite = require('./toFinite.js');
+
+function toInteger(value) {
+    const finite = toFinite.toFinite(value);
+    const remainder = finite % 1;
+    return remainder ? finite - remainder : finite;
+}
+
+exports.toInteger = toInteger;
Index: node_modules/es-toolkit/dist/compat/util/toInteger.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toInteger.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toInteger.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { toFinite } from './toFinite.mjs';
+
+function toInteger(value) {
+    const finite = toFinite(value);
+    const remainder = finite % 1;
+    return remainder ? finite - remainder : finite;
+}
+
+export { toInteger };
Index: node_modules/es-toolkit/dist/compat/util/toLength.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toLength.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toLength.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Converts the value to a valid index. A valid index is an integer that is greater than or equal to `0` and less than or equal to `2^32 - 1`.
+ *
+ * It converts the given value to a number and floors it to an integer. If the value is less than `0`, it returns `0`. If the value exceeds `2^32 - 1`, it returns `2^32 - 1`.
+ *
+ * @param {unknown} value - The value to convert to a valid index.
+ * @returns {number} The converted value.
+ *
+ * @example
+ * toLength(3.2)  // => 3
+ * toLength(-1)   // => 0
+ * toLength(1.9)  // => 1
+ * toLength('42') // => 42
+ * toLength(null) // => 0
+ */
+declare function toLength(value: any): number;
+
+export { toLength };
Index: node_modules/es-toolkit/dist/compat/util/toLength.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Converts the value to a valid index. A valid index is an integer that is greater than or equal to `0` and less than or equal to `2^32 - 1`.
+ *
+ * It converts the given value to a number and floors it to an integer. If the value is less than `0`, it returns `0`. If the value exceeds `2^32 - 1`, it returns `2^32 - 1`.
+ *
+ * @param {unknown} value - The value to convert to a valid index.
+ * @returns {number} The converted value.
+ *
+ * @example
+ * toLength(3.2)  // => 3
+ * toLength(-1)   // => 0
+ * toLength(1.9)  // => 1
+ * toLength('42') // => 42
+ * toLength(null) // => 0
+ */
+declare function toLength(value: any): number;
+
+export { toLength };
Index: node_modules/es-toolkit/dist/compat/util/toLength.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const MAX_ARRAY_LENGTH = require('../_internal/MAX_ARRAY_LENGTH.js');
+const clamp = require('../math/clamp.js');
+
+function toLength(value) {
+    if (value == null) {
+        return 0;
+    }
+    const length = Math.floor(Number(value));
+    return clamp.clamp(length, 0, MAX_ARRAY_LENGTH.MAX_ARRAY_LENGTH);
+}
+
+exports.toLength = toLength;
Index: node_modules/es-toolkit/dist/compat/util/toLength.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toLength.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toLength.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { MAX_ARRAY_LENGTH } from '../_internal/MAX_ARRAY_LENGTH.mjs';
+import { clamp } from '../math/clamp.mjs';
+
+function toLength(value) {
+    if (value == null) {
+        return 0;
+    }
+    const length = Math.floor(Number(value));
+    return clamp(length, 0, MAX_ARRAY_LENGTH);
+}
+
+export { toLength };
Index: node_modules/es-toolkit/dist/compat/util/toNumber.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toNumber.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toNumber.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Converts `value` to a number.
+ *
+ * Unlike `Number()`, this function returns `NaN` for symbols.
+ *
+ * @param {unknown} value - The value to convert.
+ * @returns {number} Returns the number.
+ *
+ * @example
+ * toNumber(3.2); // => 3.2
+ * toNumber(Number.MIN_VALUE); // => 5e-324
+ * toNumber(Infinity); // => Infinity
+ * toNumber('3.2'); // => 3.2
+ * toNumber(Symbol.iterator); // => NaN
+ * toNumber(NaN); // => NaN
+ */
+declare function toNumber(value: any): number;
+
+export { toNumber };
Index: node_modules/es-toolkit/dist/compat/util/toNumber.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Converts `value` to a number.
+ *
+ * Unlike `Number()`, this function returns `NaN` for symbols.
+ *
+ * @param {unknown} value - The value to convert.
+ * @returns {number} Returns the number.
+ *
+ * @example
+ * toNumber(3.2); // => 3.2
+ * toNumber(Number.MIN_VALUE); // => 5e-324
+ * toNumber(Infinity); // => Infinity
+ * toNumber('3.2'); // => 3.2
+ * toNumber(Symbol.iterator); // => NaN
+ * toNumber(NaN); // => NaN
+ */
+declare function toNumber(value: any): number;
+
+export { toNumber };
Index: node_modules/es-toolkit/dist/compat/util/toNumber.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isSymbol = require('../predicate/isSymbol.js');
+
+function toNumber(value) {
+    if (isSymbol.isSymbol(value)) {
+        return NaN;
+    }
+    return Number(value);
+}
+
+exports.toNumber = toNumber;
Index: node_modules/es-toolkit/dist/compat/util/toNumber.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toNumber.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toNumber.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { isSymbol } from '../predicate/isSymbol.mjs';
+
+function toNumber(value) {
+    if (isSymbol(value)) {
+        return NaN;
+    }
+    return Number(value);
+}
+
+export { toNumber };
Index: node_modules/es-toolkit/dist/compat/util/toPath.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toPath.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toPath.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts a deep key string into an array of path segments.
+ *
+ * This function takes a string representing a deep key (e.g., 'a.b.c' or 'a[b][c]') and breaks it down into an array of strings, each representing a segment of the path.
+ *
+ * @param {any} deepKey - The deep key string to convert.
+ * @returns {string[]} An array of strings, each representing a segment of the path.
+ *
+ * Examples:
+ *
+ * toPath('a.b.c') // Returns ['a', 'b', 'c']
+ * toPath('a[b][c]') // Returns ['a', 'b', 'c']
+ * toPath('.a.b.c') // Returns ['', 'a', 'b', 'c']
+ * toPath('a["b.c"].d') // Returns ['a', 'b.c', 'd']
+ * toPath('') // Returns []
+ * toPath('.a[b].c.d[e]["f.g"].h') // Returns ['', 'a', 'b', 'c', 'd', 'e', 'f.g', 'h']
+ */
+declare function toPath(deepKey: any): string[];
+
+export { toPath };
Index: node_modules/es-toolkit/dist/compat/util/toPath.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toPath.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toPath.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts a deep key string into an array of path segments.
+ *
+ * This function takes a string representing a deep key (e.g., 'a.b.c' or 'a[b][c]') and breaks it down into an array of strings, each representing a segment of the path.
+ *
+ * @param {any} deepKey - The deep key string to convert.
+ * @returns {string[]} An array of strings, each representing a segment of the path.
+ *
+ * Examples:
+ *
+ * toPath('a.b.c') // Returns ['a', 'b', 'c']
+ * toPath('a[b][c]') // Returns ['a', 'b', 'c']
+ * toPath('.a.b.c') // Returns ['', 'a', 'b', 'c']
+ * toPath('a["b.c"].d') // Returns ['a', 'b.c', 'd']
+ * toPath('') // Returns []
+ * toPath('.a[b].c.d[e]["f.g"].h') // Returns ['', 'a', 'b', 'c', 'd', 'e', 'f.g', 'h']
+ */
+declare function toPath(deepKey: any): string[];
+
+export { toPath };
Index: node_modules/es-toolkit/dist/compat/util/toPath.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toPath.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toPath.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,72 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function toPath(deepKey) {
+    const result = [];
+    const length = deepKey.length;
+    if (length === 0) {
+        return result;
+    }
+    let index = 0;
+    let key = '';
+    let quoteChar = '';
+    let bracket = false;
+    if (deepKey.charCodeAt(0) === 46) {
+        result.push('');
+        index++;
+    }
+    while (index < length) {
+        const char = deepKey[index];
+        if (quoteChar) {
+            if (char === '\\' && index + 1 < length) {
+                index++;
+                key += deepKey[index];
+            }
+            else if (char === quoteChar) {
+                quoteChar = '';
+            }
+            else {
+                key += char;
+            }
+        }
+        else if (bracket) {
+            if (char === '"' || char === "'") {
+                quoteChar = char;
+            }
+            else if (char === ']') {
+                bracket = false;
+                result.push(key);
+                key = '';
+            }
+            else {
+                key += char;
+            }
+        }
+        else {
+            if (char === '[') {
+                bracket = true;
+                if (key) {
+                    result.push(key);
+                    key = '';
+                }
+            }
+            else if (char === '.') {
+                if (key) {
+                    result.push(key);
+                    key = '';
+                }
+            }
+            else {
+                key += char;
+            }
+        }
+        index++;
+    }
+    if (key) {
+        result.push(key);
+    }
+    return result;
+}
+
+exports.toPath = toPath;
Index: node_modules/es-toolkit/dist/compat/util/toPath.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toPath.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toPath.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+function toPath(deepKey) {
+    const result = [];
+    const length = deepKey.length;
+    if (length === 0) {
+        return result;
+    }
+    let index = 0;
+    let key = '';
+    let quoteChar = '';
+    let bracket = false;
+    if (deepKey.charCodeAt(0) === 46) {
+        result.push('');
+        index++;
+    }
+    while (index < length) {
+        const char = deepKey[index];
+        if (quoteChar) {
+            if (char === '\\' && index + 1 < length) {
+                index++;
+                key += deepKey[index];
+            }
+            else if (char === quoteChar) {
+                quoteChar = '';
+            }
+            else {
+                key += char;
+            }
+        }
+        else if (bracket) {
+            if (char === '"' || char === "'") {
+                quoteChar = char;
+            }
+            else if (char === ']') {
+                bracket = false;
+                result.push(key);
+                key = '';
+            }
+            else {
+                key += char;
+            }
+        }
+        else {
+            if (char === '[') {
+                bracket = true;
+                if (key) {
+                    result.push(key);
+                    key = '';
+                }
+            }
+            else if (char === '.') {
+                if (key) {
+                    result.push(key);
+                    key = '';
+                }
+            }
+            else {
+                key += char;
+            }
+        }
+        index++;
+    }
+    if (key) {
+        result.push(key);
+    }
+    return result;
+}
+
+export { toPath };
Index: node_modules/es-toolkit/dist/compat/util/toPlainObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toPlainObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toPlainObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts value to a plain object flattening inherited enumerable string keyed properties of value to own properties of the plain object.
+ *
+ * @param {any} value The value to convert.
+ * @returns {any} Returns the converted plain object.
+ *
+ * @example
+ * function Foo() {
+ *   this.b = 2;
+ * }
+ * Foo.prototype.c = 3;
+ * toPlainObject(new Foo()); // { b: 2, c: 3 }
+ */
+declare function toPlainObject(value?: any): any;
+
+export { toPlainObject };
Index: node_modules/es-toolkit/dist/compat/util/toPlainObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts value to a plain object flattening inherited enumerable string keyed properties of value to own properties of the plain object.
+ *
+ * @param {any} value The value to convert.
+ * @returns {any} Returns the converted plain object.
+ *
+ * @example
+ * function Foo() {
+ *   this.b = 2;
+ * }
+ * Foo.prototype.c = 3;
+ * toPlainObject(new Foo()); // { b: 2, c: 3 }
+ */
+declare function toPlainObject(value?: any): any;
+
+export { toPlainObject };
Index: node_modules/es-toolkit/dist/compat/util/toPlainObject.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const keysIn = require('../object/keysIn.js');
+
+function toPlainObject(value) {
+    const plainObject = {};
+    const valueKeys = keysIn.keysIn(value);
+    for (let i = 0; i < valueKeys.length; i++) {
+        const key = valueKeys[i];
+        const objValue = value[key];
+        if (key === '__proto__') {
+            Object.defineProperty(plainObject, key, {
+                configurable: true,
+                enumerable: true,
+                value: objValue,
+                writable: true,
+            });
+        }
+        else {
+            plainObject[key] = objValue;
+        }
+    }
+    return plainObject;
+}
+
+exports.toPlainObject = toPlainObject;
Index: node_modules/es-toolkit/dist/compat/util/toPlainObject.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toPlainObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toPlainObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import { keysIn } from '../object/keysIn.mjs';
+
+function toPlainObject(value) {
+    const plainObject = {};
+    const valueKeys = keysIn(value);
+    for (let i = 0; i < valueKeys.length; i++) {
+        const key = valueKeys[i];
+        const objValue = value[key];
+        if (key === '__proto__') {
+            Object.defineProperty(plainObject, key, {
+                configurable: true,
+                enumerable: true,
+                value: objValue,
+                writable: true,
+            });
+        }
+        else {
+            plainObject[key] = objValue;
+        }
+    }
+    return plainObject;
+}
+
+export { toPlainObject };
Index: node_modules/es-toolkit/dist/compat/util/toSafeInteger.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toSafeInteger.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toSafeInteger.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts `value` to a safe integer.
+ *
+ * A safe integer can be compared and represented correctly.
+ *
+ * @param {any} value - The value to convert.
+ * @returns {number} Returns the value converted to a safe integer.
+ *
+ * @example
+ * toSafeInteger(3.2); // => 3
+ * toSafeInteger(Number.MAX_VALUE); // => 9007199254740991
+ * toSafeInteger(Infinity); // => 9007199254740991
+ * toSafeInteger('3.2'); // => 3
+ * toSafeInteger(NaN); // => 0
+ * toSafeInteger(null); // => 0
+ * toSafeInteger(-Infinity); // => -9007199254740991
+ */
+declare function toSafeInteger(value: any): number;
+
+export { toSafeInteger };
Index: node_modules/es-toolkit/dist/compat/util/toSafeInteger.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toSafeInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toSafeInteger.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Converts `value` to a safe integer.
+ *
+ * A safe integer can be compared and represented correctly.
+ *
+ * @param {any} value - The value to convert.
+ * @returns {number} Returns the value converted to a safe integer.
+ *
+ * @example
+ * toSafeInteger(3.2); // => 3
+ * toSafeInteger(Number.MAX_VALUE); // => 9007199254740991
+ * toSafeInteger(Infinity); // => 9007199254740991
+ * toSafeInteger('3.2'); // => 3
+ * toSafeInteger(NaN); // => 0
+ * toSafeInteger(null); // => 0
+ * toSafeInteger(-Infinity); // => -9007199254740991
+ */
+declare function toSafeInteger(value: any): number;
+
+export { toSafeInteger };
Index: node_modules/es-toolkit/dist/compat/util/toSafeInteger.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toSafeInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toSafeInteger.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const toInteger = require('./toInteger.js');
+const MAX_SAFE_INTEGER = require('../_internal/MAX_SAFE_INTEGER.js');
+const clamp = require('../math/clamp.js');
+
+function toSafeInteger(value) {
+    if (value == null) {
+        return 0;
+    }
+    return clamp.clamp(toInteger.toInteger(value), -MAX_SAFE_INTEGER.MAX_SAFE_INTEGER, MAX_SAFE_INTEGER.MAX_SAFE_INTEGER);
+}
+
+exports.toSafeInteger = toSafeInteger;
Index: node_modules/es-toolkit/dist/compat/util/toSafeInteger.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toSafeInteger.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toSafeInteger.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { toInteger } from './toInteger.mjs';
+import { MAX_SAFE_INTEGER } from '../_internal/MAX_SAFE_INTEGER.mjs';
+import { clamp } from '../math/clamp.mjs';
+
+function toSafeInteger(value) {
+    if (value == null) {
+        return 0;
+    }
+    return clamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);
+}
+
+export { toSafeInteger };
Index: node_modules/es-toolkit/dist/compat/util/toString.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Converts `value` to a string.
+ *
+ * An empty string is returned for `null` and `undefined` values.
+ * The sign of `-0` is preserved.
+ *
+ * @param {any} value - The value to convert.
+ * @returns {string} Returns the converted string.
+ *
+ * @example
+ * toString(null) // returns ''
+ * toString(undefined) // returns ''
+ * toString(-0) // returns '-0'
+ * toString([1, 2, -0]) // returns '1,2,-0'
+ * toString([Symbol('a'), Symbol('b')]) // returns 'Symbol(a),Symbol(b)'
+ */
+declare function toString(value: any): string;
+
+export { toString };
Index: node_modules/es-toolkit/dist/compat/util/toString.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Converts `value` to a string.
+ *
+ * An empty string is returned for `null` and `undefined` values.
+ * The sign of `-0` is preserved.
+ *
+ * @param {any} value - The value to convert.
+ * @returns {string} Returns the converted string.
+ *
+ * @example
+ * toString(null) // returns ''
+ * toString(undefined) // returns ''
+ * toString(-0) // returns '-0'
+ * toString([1, 2, -0]) // returns '1,2,-0'
+ * toString([Symbol('a'), Symbol('b')]) // returns 'Symbol(a),Symbol(b)'
+ */
+declare function toString(value: any): string;
+
+export { toString };
Index: node_modules/es-toolkit/dist/compat/util/toString.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function toString(value) {
+    if (value == null) {
+        return '';
+    }
+    if (typeof value === 'string') {
+        return value;
+    }
+    if (Array.isArray(value)) {
+        return value.map(toString).join(',');
+    }
+    const result = String(value);
+    if (result === '0' && Object.is(Number(value), -0)) {
+        return '-0';
+    }
+    return result;
+}
+
+exports.toString = toString;
Index: node_modules/es-toolkit/dist/compat/util/toString.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/toString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/toString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+function toString(value) {
+    if (value == null) {
+        return '';
+    }
+    if (typeof value === 'string') {
+        return value;
+    }
+    if (Array.isArray(value)) {
+        return value.map(toString).join(',');
+    }
+    const result = String(value);
+    if (result === '0' && Object.is(Number(value), -0)) {
+        return '-0';
+    }
+    return result;
+}
+
+export { toString };
Index: node_modules/es-toolkit/dist/compat/util/uniqueId.d.mts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/uniqueId.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/uniqueId.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Generates a unique identifier, optionally prefixed with a given string.
+ *
+ * @param {string} [prefix] - An optional string to prefix the unique identifier.
+ *                            If not provided or not a string, only the unique
+ *                            numeric identifier is returned.
+ * @returns {string} A string containing the unique identifier, with the optional
+ *                   prefix if provided.
+ *
+ * @example
+ * // Generate a unique ID with a prefix
+ * uniqueId('user_');  // => 'user_1'
+ *
+ * @example
+ * // Generate a unique ID without a prefix
+ * uniqueId();  // => '2'
+ *
+ * @example
+ * // Subsequent calls increment the internal counter
+ * uniqueId('item_');  // => 'item_3'
+ * uniqueId();         // => '4'
+ */
+declare function uniqueId(prefix?: string): string;
+
+export { uniqueId };
Index: node_modules/es-toolkit/dist/compat/util/uniqueId.d.ts
===================================================================
--- node_modules/es-toolkit/dist/compat/util/uniqueId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/uniqueId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Generates a unique identifier, optionally prefixed with a given string.
+ *
+ * @param {string} [prefix] - An optional string to prefix the unique identifier.
+ *                            If not provided or not a string, only the unique
+ *                            numeric identifier is returned.
+ * @returns {string} A string containing the unique identifier, with the optional
+ *                   prefix if provided.
+ *
+ * @example
+ * // Generate a unique ID with a prefix
+ * uniqueId('user_');  // => 'user_1'
+ *
+ * @example
+ * // Generate a unique ID without a prefix
+ * uniqueId();  // => '2'
+ *
+ * @example
+ * // Subsequent calls increment the internal counter
+ * uniqueId('item_');  // => 'item_3'
+ * uniqueId();         // => '4'
+ */
+declare function uniqueId(prefix?: string): string;
+
+export { uniqueId };
Index: node_modules/es-toolkit/dist/compat/util/uniqueId.js
===================================================================
--- node_modules/es-toolkit/dist/compat/util/uniqueId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/uniqueId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+let idCounter = 0;
+function uniqueId(prefix = '') {
+    const id = ++idCounter;
+    return `${prefix}${id}`;
+}
+
+exports.uniqueId = uniqueId;
Index: node_modules/es-toolkit/dist/compat/util/uniqueId.mjs
===================================================================
--- node_modules/es-toolkit/dist/compat/util/uniqueId.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/compat/util/uniqueId.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+let idCounter = 0;
+function uniqueId(prefix = '') {
+    const id = ++idCounter;
+    return `${prefix}${id}`;
+}
+
+export { uniqueId };
Index: node_modules/es-toolkit/dist/error/AbortError.d.mts
===================================================================
--- node_modules/es-toolkit/dist/error/AbortError.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/AbortError.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+/**
+ * An error class representing an aborted operation.
+ * @augments Error
+ */
+declare class AbortError extends Error {
+    constructor(message?: string);
+}
+
+export { AbortError };
Index: node_modules/es-toolkit/dist/error/AbortError.d.ts
===================================================================
--- node_modules/es-toolkit/dist/error/AbortError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/AbortError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+/**
+ * An error class representing an aborted operation.
+ * @augments Error
+ */
+declare class AbortError extends Error {
+    constructor(message?: string);
+}
+
+export { AbortError };
Index: node_modules/es-toolkit/dist/error/AbortError.js
===================================================================
--- node_modules/es-toolkit/dist/error/AbortError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/AbortError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+class AbortError extends Error {
+    constructor(message = 'The operation was aborted') {
+        super(message);
+        this.name = 'AbortError';
+    }
+}
+
+exports.AbortError = AbortError;
Index: node_modules/es-toolkit/dist/error/AbortError.mjs
===================================================================
--- node_modules/es-toolkit/dist/error/AbortError.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/AbortError.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+class AbortError extends Error {
+    constructor(message = 'The operation was aborted') {
+        super(message);
+        this.name = 'AbortError';
+    }
+}
+
+export { AbortError };
Index: node_modules/es-toolkit/dist/error/TimeoutError.d.mts
===================================================================
--- node_modules/es-toolkit/dist/error/TimeoutError.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/TimeoutError.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+/**
+ * An error class representing an timeout operation.
+ * @augments Error
+ */
+declare class TimeoutError extends Error {
+    constructor(message?: string);
+}
+
+export { TimeoutError };
Index: node_modules/es-toolkit/dist/error/TimeoutError.d.ts
===================================================================
--- node_modules/es-toolkit/dist/error/TimeoutError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/TimeoutError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+/**
+ * An error class representing an timeout operation.
+ * @augments Error
+ */
+declare class TimeoutError extends Error {
+    constructor(message?: string);
+}
+
+export { TimeoutError };
Index: node_modules/es-toolkit/dist/error/TimeoutError.js
===================================================================
--- node_modules/es-toolkit/dist/error/TimeoutError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/TimeoutError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+class TimeoutError extends Error {
+    constructor(message = 'The operation was timed out') {
+        super(message);
+        this.name = 'TimeoutError';
+    }
+}
+
+exports.TimeoutError = TimeoutError;
Index: node_modules/es-toolkit/dist/error/TimeoutError.mjs
===================================================================
--- node_modules/es-toolkit/dist/error/TimeoutError.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/TimeoutError.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+class TimeoutError extends Error {
+    constructor(message = 'The operation was timed out') {
+        super(message);
+        this.name = 'TimeoutError';
+    }
+}
+
+export { TimeoutError };
Index: node_modules/es-toolkit/dist/error/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/error/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export { AbortError } from './AbortError.mjs';
+export { TimeoutError } from './TimeoutError.mjs';
Index: node_modules/es-toolkit/dist/error/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/error/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export { AbortError } from './AbortError.js';
+export { TimeoutError } from './TimeoutError.js';
Index: node_modules/es-toolkit/dist/error/index.js
===================================================================
--- node_modules/es-toolkit/dist/error/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const AbortError = require('./AbortError.js');
+const TimeoutError = require('./TimeoutError.js');
+
+
+
+exports.AbortError = AbortError.AbortError;
+exports.TimeoutError = TimeoutError.TimeoutError;
Index: node_modules/es-toolkit/dist/error/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/error/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/error/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export { AbortError } from './AbortError.mjs';
+export { TimeoutError } from './TimeoutError.mjs';
Index: node_modules/es-toolkit/dist/function/after.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/after.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/after.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates a function that only executes starting from the `n`-th call.
+ * The provided function will be invoked starting from the `n`-th call.
+ *
+ * This is particularly useful for scenarios involving events or asynchronous operations
+ * where an action should occur only after a certain number of invocations.
+ *
+ * @template F - The type of the function to be invoked.
+ * @param {number} n - The number of calls required for `func` to execute.
+ * @param {F} func - The function to be invoked.
+ * @returns {(...args: Parameters<F>) => ReturnType<F> | undefined} - A new function that:
+ * - Tracks the number of calls.
+ * - Invokes `func` starting from the `n`-th call.
+ * - Returns `undefined` if fewer than `n` calls have been made.
+ * @throws {Error} - Throws an error if `n` is negative.
+ * @example
+ *
+ * const afterFn = after(3, () => {
+ *  console.log("called")
+ * });
+ *
+ * // Will not log anything.
+ * afterFn()
+ * // Will not log anything.
+ * afterFn()
+ * // Will log 'called'.
+ * afterFn()
+ */
+declare function after<F extends (...args: any[]) => any>(n: number, func: F): (...args: Parameters<F>) => ReturnType<F> | undefined;
+
+export { after };
Index: node_modules/es-toolkit/dist/function/after.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/after.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/after.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates a function that only executes starting from the `n`-th call.
+ * The provided function will be invoked starting from the `n`-th call.
+ *
+ * This is particularly useful for scenarios involving events or asynchronous operations
+ * where an action should occur only after a certain number of invocations.
+ *
+ * @template F - The type of the function to be invoked.
+ * @param {number} n - The number of calls required for `func` to execute.
+ * @param {F} func - The function to be invoked.
+ * @returns {(...args: Parameters<F>) => ReturnType<F> | undefined} - A new function that:
+ * - Tracks the number of calls.
+ * - Invokes `func` starting from the `n`-th call.
+ * - Returns `undefined` if fewer than `n` calls have been made.
+ * @throws {Error} - Throws an error if `n` is negative.
+ * @example
+ *
+ * const afterFn = after(3, () => {
+ *  console.log("called")
+ * });
+ *
+ * // Will not log anything.
+ * afterFn()
+ * // Will not log anything.
+ * afterFn()
+ * // Will log 'called'.
+ * afterFn()
+ */
+declare function after<F extends (...args: any[]) => any>(n: number, func: F): (...args: Parameters<F>) => ReturnType<F> | undefined;
+
+export { after };
Index: node_modules/es-toolkit/dist/function/after.js
===================================================================
--- node_modules/es-toolkit/dist/function/after.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/after.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function after(n, func) {
+    if (!Number.isInteger(n) || n < 0) {
+        throw new Error(`n must be a non-negative integer.`);
+    }
+    let counter = 0;
+    return (...args) => {
+        if (++counter >= n) {
+            return func(...args);
+        }
+        return undefined;
+    };
+}
+
+exports.after = after;
Index: node_modules/es-toolkit/dist/function/after.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/after.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/after.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+function after(n, func) {
+    if (!Number.isInteger(n) || n < 0) {
+        throw new Error(`n must be a non-negative integer.`);
+    }
+    let counter = 0;
+    return (...args) => {
+        if (++counter >= n) {
+            return func(...args);
+        }
+        return undefined;
+    };
+}
+
+export { after };
Index: node_modules/es-toolkit/dist/function/ary.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/ary.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/ary.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Creates a function that invokes func, with up to n arguments, ignoring any additional arguments.
+ *
+ * @template F - The type of the function.
+ * @param {F} func - The function to cap arguments for.
+ * @param {number} n - The arity cap.
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new capped function.
+ *
+ * @example
+ * function fn(a: number, b: number, c: number) {
+ *   return Array.from(arguments);
+ * }
+ *
+ * ary(fn, 0)(1, 2, 3) // []
+ * ary(fn, 1)(1, 2, 3) // [1]
+ * ary(fn, 2)(1, 2, 3) // [1, 2]
+ * ary(fn, 3)(1, 2, 3) // [1, 2, 3]
+ */
+declare function ary<F extends (...args: any[]) => any>(func: F, n: number): (...args: any[]) => ReturnType<F>;
+
+export { ary };
Index: node_modules/es-toolkit/dist/function/ary.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/ary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/ary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Creates a function that invokes func, with up to n arguments, ignoring any additional arguments.
+ *
+ * @template F - The type of the function.
+ * @param {F} func - The function to cap arguments for.
+ * @param {number} n - The arity cap.
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new capped function.
+ *
+ * @example
+ * function fn(a: number, b: number, c: number) {
+ *   return Array.from(arguments);
+ * }
+ *
+ * ary(fn, 0)(1, 2, 3) // []
+ * ary(fn, 1)(1, 2, 3) // [1]
+ * ary(fn, 2)(1, 2, 3) // [1, 2]
+ * ary(fn, 3)(1, 2, 3) // [1, 2, 3]
+ */
+declare function ary<F extends (...args: any[]) => any>(func: F, n: number): (...args: any[]) => ReturnType<F>;
+
+export { ary };
Index: node_modules/es-toolkit/dist/function/ary.js
===================================================================
--- node_modules/es-toolkit/dist/function/ary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/ary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function ary(func, n) {
+    return function (...args) {
+        return func.apply(this, args.slice(0, n));
+    };
+}
+
+exports.ary = ary;
Index: node_modules/es-toolkit/dist/function/ary.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/ary.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/ary.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+function ary(func, n) {
+    return function (...args) {
+        return func.apply(this, args.slice(0, n));
+    };
+}
+
+export { ary };
Index: node_modules/es-toolkit/dist/function/asyncNoop.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/asyncNoop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/asyncNoop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+/**
+ * An asynchronous no-operation function that does nothing.
+ * This can be used as a placeholder or default function.
+ *
+ * @example
+ * asyncNoop(); // Does nothing
+ *
+ * @returns {Promise<void>} This function returns a Promise that resolves to undefined.
+ */
+declare function asyncNoop(): Promise<void>;
+
+export { asyncNoop };
Index: node_modules/es-toolkit/dist/function/asyncNoop.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/asyncNoop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/asyncNoop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+/**
+ * An asynchronous no-operation function that does nothing.
+ * This can be used as a placeholder or default function.
+ *
+ * @example
+ * asyncNoop(); // Does nothing
+ *
+ * @returns {Promise<void>} This function returns a Promise that resolves to undefined.
+ */
+declare function asyncNoop(): Promise<void>;
+
+export { asyncNoop };
Index: node_modules/es-toolkit/dist/function/asyncNoop.js
===================================================================
--- node_modules/es-toolkit/dist/function/asyncNoop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/asyncNoop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+async function asyncNoop() { }
+
+exports.asyncNoop = asyncNoop;
Index: node_modules/es-toolkit/dist/function/asyncNoop.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/asyncNoop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/asyncNoop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+async function asyncNoop() { }
+
+export { asyncNoop };
Index: node_modules/es-toolkit/dist/function/before.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/before.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/before.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates a function that limits the number of times the given function (`func`) can be called.
+ *
+ * @template F - The type of the function to be invoked.
+ * @param {number} n - The number of times the returned function is allowed to call `func` before stopping.
+ * - If `n` is 0, `func` will never be called.
+ * - If `n` is a positive integer, `func` will be called up to `n-1` times.
+ * @param {F} func - The function to be called with the limit applied.
+ * @returns {(...args: Parameters<F>) => ReturnType<F> | undefined} - A new function that:
+ * - Tracks the number of calls.
+ * - Invokes `func` until the `n-1`-th call.
+ * - Returns `undefined` if the number of calls reaches or exceeds `n`, stopping further calls.
+ * @throws {Error} - Throw an error if `n` is negative.
+ * @example
+ *
+ * const beforeFn = before(3, () => {
+ *  console.log("called");
+ * })
+ *
+ * // Will log 'called'.
+ * beforeFn();
+ *
+ * // Will log 'called'.
+ * beforeFn();
+ *
+ * // Will not log anything.
+ * beforeFn();
+ */
+declare function before<F extends (...args: any[]) => any>(n: number, func: F): (...args: Parameters<F>) => ReturnType<F> | undefined;
+
+export { before };
Index: node_modules/es-toolkit/dist/function/before.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/before.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/before.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates a function that limits the number of times the given function (`func`) can be called.
+ *
+ * @template F - The type of the function to be invoked.
+ * @param {number} n - The number of times the returned function is allowed to call `func` before stopping.
+ * - If `n` is 0, `func` will never be called.
+ * - If `n` is a positive integer, `func` will be called up to `n-1` times.
+ * @param {F} func - The function to be called with the limit applied.
+ * @returns {(...args: Parameters<F>) => ReturnType<F> | undefined} - A new function that:
+ * - Tracks the number of calls.
+ * - Invokes `func` until the `n-1`-th call.
+ * - Returns `undefined` if the number of calls reaches or exceeds `n`, stopping further calls.
+ * @throws {Error} - Throw an error if `n` is negative.
+ * @example
+ *
+ * const beforeFn = before(3, () => {
+ *  console.log("called");
+ * })
+ *
+ * // Will log 'called'.
+ * beforeFn();
+ *
+ * // Will log 'called'.
+ * beforeFn();
+ *
+ * // Will not log anything.
+ * beforeFn();
+ */
+declare function before<F extends (...args: any[]) => any>(n: number, func: F): (...args: Parameters<F>) => ReturnType<F> | undefined;
+
+export { before };
Index: node_modules/es-toolkit/dist/function/before.js
===================================================================
--- node_modules/es-toolkit/dist/function/before.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/before.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function before(n, func) {
+    if (!Number.isInteger(n) || n < 0) {
+        throw new Error('n must be a non-negative integer.');
+    }
+    let counter = 0;
+    return (...args) => {
+        if (++counter < n) {
+            return func(...args);
+        }
+        return undefined;
+    };
+}
+
+exports.before = before;
Index: node_modules/es-toolkit/dist/function/before.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/before.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/before.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+function before(n, func) {
+    if (!Number.isInteger(n) || n < 0) {
+        throw new Error('n must be a non-negative integer.');
+    }
+    let counter = 0;
+    return (...args) => {
+        if (++counter < n) {
+            return func(...args);
+        }
+        return undefined;
+    };
+}
+
+export { before };
Index: node_modules/es-toolkit/dist/function/curry.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/curry.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/curry.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,126 @@
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {() => R} func - The function to curry.
+ * @returns {() => R} A curried function.
+ *
+ * @example
+ * function noArgFunc() {
+ *   return 42;
+ * }
+ * const curriedNoArgFunc = curry(noArgFunc);
+ * console.log(curriedNoArgFunc()); // 42
+ */
+declare function curry<R>(func: () => R): () => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p: P) => R} func - The function to curry.
+ * @returns {(p: P) => R} A curried function.
+ *
+ * @example
+ * function oneArgFunc(a: number) {
+ *   return a * 2;
+ * }
+ * const curriedOneArgFunc = curry(oneArgFunc);
+ * console.log(curriedOneArgFunc(5)); // 10
+ */
+declare function curry<P, R>(func: (p: P) => R): (p: P) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p1: P1, p2: P2) => R} func - The function to curry.
+ * @returns {(p1: P1) => (p2: P2) => R} A curried function.
+ *
+ * @example
+ * function twoArgFunc(a: number, b: number) {
+ *   return a + b;
+ * }
+ * const curriedTwoArgFunc = curry(twoArgFunc);
+ * const add5 = curriedTwoArgFunc(5);
+ * console.log(add5(10)); // 15
+ */
+declare function curry<P1, P2, R>(func: (p1: P1, p2: P2) => R): (p1: P1) => (p2: P2) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3) => R} func - The function to curry.
+ * @returns {(p1: P1) => (p2: P2) => (p3: P3) => R} A curried function.
+ *
+ * @example
+ * function threeArgFunc(a: number, b: number, c: number) {
+ *   return a + b + c;
+ * }
+ * const curriedThreeArgFunc = curry(threeArgFunc);
+ * const add1 = curriedThreeArgFunc(1);
+ * const add3 = add1(2);
+ * console.log(add3(3)); // 6
+ */
+declare function curry<P1, P2, P3, R>(func: (p1: P1, p2: P2, p3: P3) => R): (p1: P1) => (p2: P2) => (p3: P3) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3, p4: P4) => R} func - The function to curry.
+ * @returns {(p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => R} A curried function.
+ *
+ * @example
+ * function fourArgFunc(a: number, b: number, c: number, d: number) {
+ *   return a + b + c + d;
+ * }
+ * const curriedFourArgFunc = curry(fourArgFunc);
+ * const add1 = curriedFourArgFunc(1);
+ * const add3 = add1(2);
+ * const add6 = add3(3);
+ * console.log(add6(4)); // 10
+ */
+declare function curry<P1, P2, P3, P4, R>(func: (p1: P1, p2: P2, p3: P3, p4: P4) => R): (p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) => R} func - The function to curry.
+ * @returns {(p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => (p5: P5) => R} A curried function.
+ *
+ * @example
+ * function fiveArgFunc(a: number, b: number, c: number, d: number, e: number) {
+ *   return a + b + c + d + e;
+ * }
+ * const curriedFiveArgFunc = curry(fiveArgFunc);
+ * const add1 = curriedFiveArgFunc(1);
+ * const add3 = add1(2);
+ * const add6 = add3(3);
+ * const add10 = add6(4);
+ * console.log(add10(5)); // 15
+ */
+declare function curry<P1, P2, P3, P4, P5, R>(func: (p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) => R): (p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => (p5: P5) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(...args: any[]) => any} func - The function to curry.
+ * @returns {(...args: any[]) => any} A curried function that can be called with a single argument at a time.
+ *
+ * @example
+ * function sum(a: number, b: number, c: number) {
+ *   return a + b + c;
+ * }
+ *
+ * const curriedSum = curry(sum);
+ *
+ * // The parameter `a` should be given the value `10`.
+ * const add10 = curriedSum(10);
+ *
+ * // The parameter `b` should be given the value `15`.
+ * const add25 = add10(15);
+ *
+ * // The parameter `c` should be given the value `5`. The function 'sum' has received all its arguments and will now return a value.
+ * const result = add25(5);
+ */
+declare function curry(func: (...args: any[]) => any): (...args: any[]) => any;
+
+export { curry };
Index: node_modules/es-toolkit/dist/function/curry.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/curry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/curry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,126 @@
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {() => R} func - The function to curry.
+ * @returns {() => R} A curried function.
+ *
+ * @example
+ * function noArgFunc() {
+ *   return 42;
+ * }
+ * const curriedNoArgFunc = curry(noArgFunc);
+ * console.log(curriedNoArgFunc()); // 42
+ */
+declare function curry<R>(func: () => R): () => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p: P) => R} func - The function to curry.
+ * @returns {(p: P) => R} A curried function.
+ *
+ * @example
+ * function oneArgFunc(a: number) {
+ *   return a * 2;
+ * }
+ * const curriedOneArgFunc = curry(oneArgFunc);
+ * console.log(curriedOneArgFunc(5)); // 10
+ */
+declare function curry<P, R>(func: (p: P) => R): (p: P) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p1: P1, p2: P2) => R} func - The function to curry.
+ * @returns {(p1: P1) => (p2: P2) => R} A curried function.
+ *
+ * @example
+ * function twoArgFunc(a: number, b: number) {
+ *   return a + b;
+ * }
+ * const curriedTwoArgFunc = curry(twoArgFunc);
+ * const add5 = curriedTwoArgFunc(5);
+ * console.log(add5(10)); // 15
+ */
+declare function curry<P1, P2, R>(func: (p1: P1, p2: P2) => R): (p1: P1) => (p2: P2) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3) => R} func - The function to curry.
+ * @returns {(p1: P1) => (p2: P2) => (p3: P3) => R} A curried function.
+ *
+ * @example
+ * function threeArgFunc(a: number, b: number, c: number) {
+ *   return a + b + c;
+ * }
+ * const curriedThreeArgFunc = curry(threeArgFunc);
+ * const add1 = curriedThreeArgFunc(1);
+ * const add3 = add1(2);
+ * console.log(add3(3)); // 6
+ */
+declare function curry<P1, P2, P3, R>(func: (p1: P1, p2: P2, p3: P3) => R): (p1: P1) => (p2: P2) => (p3: P3) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3, p4: P4) => R} func - The function to curry.
+ * @returns {(p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => R} A curried function.
+ *
+ * @example
+ * function fourArgFunc(a: number, b: number, c: number, d: number) {
+ *   return a + b + c + d;
+ * }
+ * const curriedFourArgFunc = curry(fourArgFunc);
+ * const add1 = curriedFourArgFunc(1);
+ * const add3 = add1(2);
+ * const add6 = add3(3);
+ * console.log(add6(4)); // 10
+ */
+declare function curry<P1, P2, P3, P4, R>(func: (p1: P1, p2: P2, p3: P3, p4: P4) => R): (p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) => R} func - The function to curry.
+ * @returns {(p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => (p5: P5) => R} A curried function.
+ *
+ * @example
+ * function fiveArgFunc(a: number, b: number, c: number, d: number, e: number) {
+ *   return a + b + c + d + e;
+ * }
+ * const curriedFiveArgFunc = curry(fiveArgFunc);
+ * const add1 = curriedFiveArgFunc(1);
+ * const add3 = add1(2);
+ * const add6 = add3(3);
+ * const add10 = add6(4);
+ * console.log(add10(5)); // 15
+ */
+declare function curry<P1, P2, P3, P4, P5, R>(func: (p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) => R): (p1: P1) => (p2: P2) => (p3: P3) => (p4: P4) => (p5: P5) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * @param {(...args: any[]) => any} func - The function to curry.
+ * @returns {(...args: any[]) => any} A curried function that can be called with a single argument at a time.
+ *
+ * @example
+ * function sum(a: number, b: number, c: number) {
+ *   return a + b + c;
+ * }
+ *
+ * const curriedSum = curry(sum);
+ *
+ * // The parameter `a` should be given the value `10`.
+ * const add10 = curriedSum(10);
+ *
+ * // The parameter `b` should be given the value `15`.
+ * const add25 = add10(15);
+ *
+ * // The parameter `c` should be given the value `5`. The function 'sum' has received all its arguments and will now return a value.
+ * const result = add25(5);
+ */
+declare function curry(func: (...args: any[]) => any): (...args: any[]) => any;
+
+export { curry };
Index: node_modules/es-toolkit/dist/function/curry.js
===================================================================
--- node_modules/es-toolkit/dist/function/curry.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/curry.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function curry(func) {
+    if (func.length === 0 || func.length === 1) {
+        return func;
+    }
+    return function (arg) {
+        return makeCurry(func, func.length, [arg]);
+    };
+}
+function makeCurry(origin, argsLength, args) {
+    if (args.length === argsLength) {
+        return origin(...args);
+    }
+    else {
+        const next = function (arg) {
+            return makeCurry(origin, argsLength, [...args, arg]);
+        };
+        return next;
+    }
+}
+
+exports.curry = curry;
Index: node_modules/es-toolkit/dist/function/curry.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/curry.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/curry.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+function curry(func) {
+    if (func.length === 0 || func.length === 1) {
+        return func;
+    }
+    return function (arg) {
+        return makeCurry(func, func.length, [arg]);
+    };
+}
+function makeCurry(origin, argsLength, args) {
+    if (args.length === argsLength) {
+        return origin(...args);
+    }
+    else {
+        const next = function (arg) {
+            return makeCurry(origin, argsLength, [...args, arg]);
+        };
+        return next;
+    }
+}
+
+export { curry };
Index: node_modules/es-toolkit/dist/function/curryRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/curryRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/curryRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,140 @@
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {() => R} func - The function to curry.
+ * @returns {() => R} A curried function.
+ *
+ * @example
+ * function noArgFunc() {
+ *  return 42;
+ * }
+ * const curriedNoArgFunc = curryRight(noArgFunc);
+ * console.log(curriedNoArgFunc()); // 42
+ */
+declare function curryRight<R>(func: () => R): () => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p: P) => R} func - The function to curry.
+ * @returns {(p: P) => R} A curried function.
+ *
+ * @example
+ * function oneArgFunc(a: number) {
+ *   return a * 2;
+ * }
+ * const curriedOneArgFunc = curryRight(oneArgFunc);
+ * console.log(curriedOneArgFunc(5)); // 10
+ */
+declare function curryRight<P, R>(func: (p: P) => R): (p: P) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p1: P1, p2: P2) => R} func - The function to curry.
+ * @returns {(p2: P2) => (p1: P1) => R} A curried function.
+ *
+ * @example
+ * function twoArgFunc(a: number, b: number) {
+ *  return [a, b];
+ * }
+ * const curriedTwoArgFunc = curryRight(twoArgFunc);
+ * const func = curriedTwoArgFunc(1);
+ * console.log(func(2)); // [2, 1]
+ */
+declare function curryRight<P1, P2, R>(func: (p1: P1, p2: P2) => R): (p2: P2) => (p1: P1) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3) => R} func - The function to curry.
+ * @returns {(p3: P3) => (p2: P2) => (p1: P1) => R} A curried function.
+ *
+ * @example
+ * function threeArgFunc(a: number, b: number, c: number) {
+ *   return [a, b, c];
+ * }
+ * const curriedThreeArgFunc = curryRight(threeArgFunc);
+ * const func = curriedThreeArgFunc(1);
+ * const func2 = func(2);
+ * console.log(func2(3)); // [3, 2, 1]
+ */
+declare function curryRight<P1, P2, P3, R>(func: (p1: P1, p2: P2, p3: P3) => R): (p3: P3) => (p2: P2) => (p1: P1) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3, p4: P4) => R} func - The function to curry.
+ * @returns {(p4: P4) => (p3: P3) => (p2: P2) => (p1: P1) => R} A curried function.
+ *
+ * @example
+ * function fourArgFunc(a: number, b: number, c: number, d: number) {
+ *  return [a, b, c, d];
+ * }
+ * const curriedFourArgFunc = curryRight(fourArgFunc);
+ * const func = curriedFourArgFunc(1);
+ * const func2 = func(2);
+ * const func3 = func2(3);
+ * console.log(func3(4)); // [4, 3, 2, 1]
+ */
+declare function curryRight<P1, P2, P3, P4, R>(func: (p1: P1, p2: P2, p3: P3, p4: P4) => R): (p4: P4) => (p3: P3) => (p2: P2) => (p1: P1) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) => R} func - The function to curry.
+ * @returns {(p5: P5) => (p4: P4) => (p3: P3) => (p2: P2) => (p1: P1) => R} A curried function.
+ *
+ * @example
+ * function fiveArgFunc(a: number, b: number, c: number, d: number, e: number) {
+ *   return [a, b, c, d, e];
+ * }
+ * const curriedFiveArgFunc = curryRight(fiveArgFunc);
+ * const func = curriedFiveArgFunc(1);
+ * const func2 = func(2);
+ * const func3 = func2(3);
+ * const func4 = func3(4);
+ * console.log(func4(5)); // [5, 4, 3, 2, 1]
+ */
+declare function curryRight<P1, P2, P3, P4, P5, R>(func: (p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) => R): (p5: P5) => (p4: P4) => (p3: P3) => (p2: P2) => (p1: P1) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(...args: any[]) => any} func - The function to curry.
+ * @returns {(...args: any[]) => any} A curried function.
+ *
+ * @example
+ * function sum(a: number, b: number, c: number) {
+ *   return a + b + c;
+ * }
+ *
+ * const curriedSum = curryRight(sum);
+ *
+ * // The parameter `c` should be given the value `10`.
+ * const add10 = curriedSum(10);
+ *
+ * // The parameter `b` should be given the value `15`.
+ * const add25 = add10(15);
+ *
+ * // The parameter `a` should be given the value `5`. The function 'sum' has received all its arguments and will now return a value.
+ * const result = add25(5); // 30
+ */
+declare function curryRight(func: (...args: any[]) => any): (...args: any[]) => any;
+
+export { curryRight };
Index: node_modules/es-toolkit/dist/function/curryRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/curryRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/curryRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,140 @@
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {() => R} func - The function to curry.
+ * @returns {() => R} A curried function.
+ *
+ * @example
+ * function noArgFunc() {
+ *  return 42;
+ * }
+ * const curriedNoArgFunc = curryRight(noArgFunc);
+ * console.log(curriedNoArgFunc()); // 42
+ */
+declare function curryRight<R>(func: () => R): () => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p: P) => R} func - The function to curry.
+ * @returns {(p: P) => R} A curried function.
+ *
+ * @example
+ * function oneArgFunc(a: number) {
+ *   return a * 2;
+ * }
+ * const curriedOneArgFunc = curryRight(oneArgFunc);
+ * console.log(curriedOneArgFunc(5)); // 10
+ */
+declare function curryRight<P, R>(func: (p: P) => R): (p: P) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p1: P1, p2: P2) => R} func - The function to curry.
+ * @returns {(p2: P2) => (p1: P1) => R} A curried function.
+ *
+ * @example
+ * function twoArgFunc(a: number, b: number) {
+ *  return [a, b];
+ * }
+ * const curriedTwoArgFunc = curryRight(twoArgFunc);
+ * const func = curriedTwoArgFunc(1);
+ * console.log(func(2)); // [2, 1]
+ */
+declare function curryRight<P1, P2, R>(func: (p1: P1, p2: P2) => R): (p2: P2) => (p1: P1) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3) => R} func - The function to curry.
+ * @returns {(p3: P3) => (p2: P2) => (p1: P1) => R} A curried function.
+ *
+ * @example
+ * function threeArgFunc(a: number, b: number, c: number) {
+ *   return [a, b, c];
+ * }
+ * const curriedThreeArgFunc = curryRight(threeArgFunc);
+ * const func = curriedThreeArgFunc(1);
+ * const func2 = func(2);
+ * console.log(func2(3)); // [3, 2, 1]
+ */
+declare function curryRight<P1, P2, P3, R>(func: (p1: P1, p2: P2, p3: P3) => R): (p3: P3) => (p2: P2) => (p1: P1) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3, p4: P4) => R} func - The function to curry.
+ * @returns {(p4: P4) => (p3: P3) => (p2: P2) => (p1: P1) => R} A curried function.
+ *
+ * @example
+ * function fourArgFunc(a: number, b: number, c: number, d: number) {
+ *  return [a, b, c, d];
+ * }
+ * const curriedFourArgFunc = curryRight(fourArgFunc);
+ * const func = curriedFourArgFunc(1);
+ * const func2 = func(2);
+ * const func3 = func2(3);
+ * console.log(func3(4)); // [4, 3, 2, 1]
+ */
+declare function curryRight<P1, P2, P3, P4, R>(func: (p1: P1, p2: P2, p3: P3, p4: P4) => R): (p4: P4) => (p3: P3) => (p2: P2) => (p1: P1) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) => R} func - The function to curry.
+ * @returns {(p5: P5) => (p4: P4) => (p3: P3) => (p2: P2) => (p1: P1) => R} A curried function.
+ *
+ * @example
+ * function fiveArgFunc(a: number, b: number, c: number, d: number, e: number) {
+ *   return [a, b, c, d, e];
+ * }
+ * const curriedFiveArgFunc = curryRight(fiveArgFunc);
+ * const func = curriedFiveArgFunc(1);
+ * const func2 = func(2);
+ * const func3 = func2(3);
+ * const func4 = func3(4);
+ * console.log(func4(5)); // [5, 4, 3, 2, 1]
+ */
+declare function curryRight<P1, P2, P3, P4, P5, R>(func: (p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) => R): (p5: P5) => (p4: P4) => (p3: P3) => (p2: P2) => (p1: P1) => R;
+/**
+ * Curries a function, allowing it to be called with a single argument at a time and returning a new function that takes the next argument.
+ * This process continues until all arguments have been provided, at which point the original function is called with all accumulated arguments.
+ *
+ * Unlike `curry`, this function curries the function from right to left.
+ *
+ * @param {(...args: any[]) => any} func - The function to curry.
+ * @returns {(...args: any[]) => any} A curried function.
+ *
+ * @example
+ * function sum(a: number, b: number, c: number) {
+ *   return a + b + c;
+ * }
+ *
+ * const curriedSum = curryRight(sum);
+ *
+ * // The parameter `c` should be given the value `10`.
+ * const add10 = curriedSum(10);
+ *
+ * // The parameter `b` should be given the value `15`.
+ * const add25 = add10(15);
+ *
+ * // The parameter `a` should be given the value `5`. The function 'sum' has received all its arguments and will now return a value.
+ * const result = add25(5); // 30
+ */
+declare function curryRight(func: (...args: any[]) => any): (...args: any[]) => any;
+
+export { curryRight };
Index: node_modules/es-toolkit/dist/function/curryRight.js
===================================================================
--- node_modules/es-toolkit/dist/function/curryRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/curryRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function curryRight(func) {
+    if (func.length === 0 || func.length === 1) {
+        return func;
+    }
+    return function (arg) {
+        return makeCurryRight(func, func.length, [arg]);
+    };
+}
+function makeCurryRight(origin, argsLength, args) {
+    if (args.length === argsLength) {
+        return origin(...args);
+    }
+    else {
+        const next = function (arg) {
+            return makeCurryRight(origin, argsLength, [arg, ...args]);
+        };
+        return next;
+    }
+}
+
+exports.curryRight = curryRight;
Index: node_modules/es-toolkit/dist/function/curryRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/curryRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/curryRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+function curryRight(func) {
+    if (func.length === 0 || func.length === 1) {
+        return func;
+    }
+    return function (arg) {
+        return makeCurryRight(func, func.length, [arg]);
+    };
+}
+function makeCurryRight(origin, argsLength, args) {
+    if (args.length === argsLength) {
+        return origin(...args);
+    }
+    else {
+        const next = function (arg) {
+            return makeCurryRight(origin, argsLength, [arg, ...args]);
+        };
+        return next;
+    }
+}
+
+export { curryRight };
Index: node_modules/es-toolkit/dist/function/debounce.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/debounce.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/debounce.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+interface DebounceOptions {
+    /**
+     * An optional AbortSignal to cancel the debounced function.
+     */
+    signal?: AbortSignal;
+    /**
+     * An optional array specifying whether the function should be invoked on the leading edge, trailing edge, or both.
+     * If `edges` includes "leading", the function will be invoked at the start of the delay period.
+     * If `edges` includes "trailing", the function will be invoked at the end of the delay period.
+     * If both "leading" and "trailing" are included, the function will be invoked at both the start and end of the delay period.
+     * @default ["trailing"]
+     */
+    edges?: Array<'leading' | 'trailing'>;
+}
+interface DebouncedFunction<F extends (...args: any[]) => void> {
+    (...args: Parameters<F>): void;
+    /**
+     * Schedules the execution of the debounced function after the specified debounce delay.
+     * This method resets any existing timer, ensuring that the function is only invoked
+     * after the delay has elapsed since the last call to the debounced function.
+     * It is typically called internally whenever the debounced function is invoked.
+     *
+     * @returns {void}
+     */
+    schedule: () => void;
+    /**
+     * Cancels any pending execution of the debounced function.
+     * This method clears the active timer and resets any stored context or arguments.
+     */
+    cancel: () => void;
+    /**
+     * Immediately invokes the debounced function if there is a pending execution.
+     * This method executes the function right away if there is a pending execution.
+     */
+    flush: () => void;
+}
+/**
+ * Creates a debounced function that delays invoking the provided function until after `debounceMs` milliseconds
+ * have elapsed since the last time the debounced function was invoked. The debounced function also has a `cancel`
+ * method to cancel any pending execution.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to debounce.
+ * @param {number} debounceMs - The number of milliseconds to delay.
+ * @param {DebounceOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the debounced function.
+ * @returns A new debounced function with a `cancel` method.
+ *
+ * @example
+ * const debouncedFunction = debounce(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' after 1 second if not called again in that time
+ * debouncedFunction();
+ *
+ * // Will not log anything as the previous call is canceled
+ * debouncedFunction.cancel();
+ *
+ * // With AbortSignal
+ * const controller = new AbortController();
+ * const signal = controller.signal;
+ * const debouncedWithSignal = debounce(() => {
+ *  console.log('Function executed');
+ * }, 1000, { signal });
+ *
+ * debouncedWithSignal();
+ *
+ * // Will cancel the debounced function call
+ * controller.abort();
+ */
+declare function debounce<F extends (...args: any[]) => void>(func: F, debounceMs: number, { signal, edges }?: DebounceOptions): DebouncedFunction<F>;
+
+export { type DebouncedFunction, debounce };
Index: node_modules/es-toolkit/dist/function/debounce.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/debounce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/debounce.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+interface DebounceOptions {
+    /**
+     * An optional AbortSignal to cancel the debounced function.
+     */
+    signal?: AbortSignal;
+    /**
+     * An optional array specifying whether the function should be invoked on the leading edge, trailing edge, or both.
+     * If `edges` includes "leading", the function will be invoked at the start of the delay period.
+     * If `edges` includes "trailing", the function will be invoked at the end of the delay period.
+     * If both "leading" and "trailing" are included, the function will be invoked at both the start and end of the delay period.
+     * @default ["trailing"]
+     */
+    edges?: Array<'leading' | 'trailing'>;
+}
+interface DebouncedFunction<F extends (...args: any[]) => void> {
+    (...args: Parameters<F>): void;
+    /**
+     * Schedules the execution of the debounced function after the specified debounce delay.
+     * This method resets any existing timer, ensuring that the function is only invoked
+     * after the delay has elapsed since the last call to the debounced function.
+     * It is typically called internally whenever the debounced function is invoked.
+     *
+     * @returns {void}
+     */
+    schedule: () => void;
+    /**
+     * Cancels any pending execution of the debounced function.
+     * This method clears the active timer and resets any stored context or arguments.
+     */
+    cancel: () => void;
+    /**
+     * Immediately invokes the debounced function if there is a pending execution.
+     * This method executes the function right away if there is a pending execution.
+     */
+    flush: () => void;
+}
+/**
+ * Creates a debounced function that delays invoking the provided function until after `debounceMs` milliseconds
+ * have elapsed since the last time the debounced function was invoked. The debounced function also has a `cancel`
+ * method to cancel any pending execution.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to debounce.
+ * @param {number} debounceMs - The number of milliseconds to delay.
+ * @param {DebounceOptions} options - The options object
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the debounced function.
+ * @returns A new debounced function with a `cancel` method.
+ *
+ * @example
+ * const debouncedFunction = debounce(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' after 1 second if not called again in that time
+ * debouncedFunction();
+ *
+ * // Will not log anything as the previous call is canceled
+ * debouncedFunction.cancel();
+ *
+ * // With AbortSignal
+ * const controller = new AbortController();
+ * const signal = controller.signal;
+ * const debouncedWithSignal = debounce(() => {
+ *  console.log('Function executed');
+ * }, 1000, { signal });
+ *
+ * debouncedWithSignal();
+ *
+ * // Will cancel the debounced function call
+ * controller.abort();
+ */
+declare function debounce<F extends (...args: any[]) => void>(func: F, debounceMs: number, { signal, edges }?: DebounceOptions): DebouncedFunction<F>;
+
+export { type DebouncedFunction, debounce };
Index: node_modules/es-toolkit/dist/function/debounce.js
===================================================================
--- node_modules/es-toolkit/dist/function/debounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/debounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,66 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function debounce(func, debounceMs, { signal, edges } = {}) {
+    let pendingThis = undefined;
+    let pendingArgs = null;
+    const leading = edges != null && edges.includes('leading');
+    const trailing = edges == null || edges.includes('trailing');
+    const invoke = () => {
+        if (pendingArgs !== null) {
+            func.apply(pendingThis, pendingArgs);
+            pendingThis = undefined;
+            pendingArgs = null;
+        }
+    };
+    const onTimerEnd = () => {
+        if (trailing) {
+            invoke();
+        }
+        cancel();
+    };
+    let timeoutId = null;
+    const schedule = () => {
+        if (timeoutId != null) {
+            clearTimeout(timeoutId);
+        }
+        timeoutId = setTimeout(() => {
+            timeoutId = null;
+            onTimerEnd();
+        }, debounceMs);
+    };
+    const cancelTimer = () => {
+        if (timeoutId !== null) {
+            clearTimeout(timeoutId);
+            timeoutId = null;
+        }
+    };
+    const cancel = () => {
+        cancelTimer();
+        pendingThis = undefined;
+        pendingArgs = null;
+    };
+    const flush = () => {
+        invoke();
+    };
+    const debounced = function (...args) {
+        if (signal?.aborted) {
+            return;
+        }
+        pendingThis = this;
+        pendingArgs = args;
+        const isFirstCall = timeoutId == null;
+        schedule();
+        if (leading && isFirstCall) {
+            invoke();
+        }
+    };
+    debounced.schedule = schedule;
+    debounced.cancel = cancel;
+    debounced.flush = flush;
+    signal?.addEventListener('abort', cancel, { once: true });
+    return debounced;
+}
+
+exports.debounce = debounce;
Index: node_modules/es-toolkit/dist/function/debounce.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/debounce.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/debounce.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+function debounce(func, debounceMs, { signal, edges } = {}) {
+    let pendingThis = undefined;
+    let pendingArgs = null;
+    const leading = edges != null && edges.includes('leading');
+    const trailing = edges == null || edges.includes('trailing');
+    const invoke = () => {
+        if (pendingArgs !== null) {
+            func.apply(pendingThis, pendingArgs);
+            pendingThis = undefined;
+            pendingArgs = null;
+        }
+    };
+    const onTimerEnd = () => {
+        if (trailing) {
+            invoke();
+        }
+        cancel();
+    };
+    let timeoutId = null;
+    const schedule = () => {
+        if (timeoutId != null) {
+            clearTimeout(timeoutId);
+        }
+        timeoutId = setTimeout(() => {
+            timeoutId = null;
+            onTimerEnd();
+        }, debounceMs);
+    };
+    const cancelTimer = () => {
+        if (timeoutId !== null) {
+            clearTimeout(timeoutId);
+            timeoutId = null;
+        }
+    };
+    const cancel = () => {
+        cancelTimer();
+        pendingThis = undefined;
+        pendingArgs = null;
+    };
+    const flush = () => {
+        invoke();
+    };
+    const debounced = function (...args) {
+        if (signal?.aborted) {
+            return;
+        }
+        pendingThis = this;
+        pendingArgs = args;
+        const isFirstCall = timeoutId == null;
+        schedule();
+        if (leading && isFirstCall) {
+            invoke();
+        }
+    };
+    debounced.schedule = schedule;
+    debounced.cancel = cancel;
+    debounced.flush = flush;
+    signal?.addEventListener('abort', cancel, { once: true });
+    return debounced;
+}
+
+export { debounce };
Index: node_modules/es-toolkit/dist/function/flow.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/flow.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/flow.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,132 @@
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {() => R} f The function to invoke.
+ * @returns {() => R} Returns the new composite function.
+ *
+ * @example
+ * function noArgFunc() {
+ *  return 42;
+ * }
+ *
+ * const combined = flow(noArgFunc);
+ * console.log(combined()); // 42
+ */
+declare function flow<R>(f: () => R): () => R;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R} f1 The function to invoke.
+ * @returns {(...args: A) => R} Returns the new composite function.
+ *
+ * @example
+ * function oneArgFunc(a: number) {
+ *   return a * 2;
+ * }
+ *
+ * const combined = flow(oneArgFunc);
+ * console.log(combined(5)); // 10
+ */
+declare function flow<A extends any[], R>(f1: (...args: A) => R): (...args: A) => R;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @returns {(...args: A) => R2} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flow(add, square);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flow<A extends any[], R1, R2>(f1: (...args: A) => R1, f2: (a: R1) => R2): (...args: A) => R2;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @returns {(...args: A) => R3} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (...args: A) => R3;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R3) => R4} f4 The function to invoke.
+ * @returns {(...args: A) => R4} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toStr = (n: number) => n.toString();
+ *
+ * const combined = flow(add, square, double, toStr);
+ * console.log(combined(1, 2)); // '18'
+ */
+declare function flow<A extends any[], R1, R2, R3, R4>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (...args: A) => R4;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R3) => R4} f4 The function to invoke.
+ * @param {(a: R4) => R5} f5 The function to invoke.
+ * @returns {(...args: A) => R5} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toStr = (n: number) => n.toString();
+ * const split = (s: string) => s.split('');
+ *
+ * const combined = flow(add, square, double, toStr, split);
+ * console.log(combined(1, 2)); // ['1', '8']
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (...args: A) => R5;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {Array<(...args: any[]) => any>} funcs The functions to invoke.
+ * @returns {(...args: any[]) => any} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flow(add, square);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flow(...funcs: Array<(...args: any[]) => any>): (...args: any[]) => any;
+
+export { flow };
Index: node_modules/es-toolkit/dist/function/flow.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/flow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/flow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,132 @@
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {() => R} f The function to invoke.
+ * @returns {() => R} Returns the new composite function.
+ *
+ * @example
+ * function noArgFunc() {
+ *  return 42;
+ * }
+ *
+ * const combined = flow(noArgFunc);
+ * console.log(combined()); // 42
+ */
+declare function flow<R>(f: () => R): () => R;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R} f1 The function to invoke.
+ * @returns {(...args: A) => R} Returns the new composite function.
+ *
+ * @example
+ * function oneArgFunc(a: number) {
+ *   return a * 2;
+ * }
+ *
+ * const combined = flow(oneArgFunc);
+ * console.log(combined(5)); // 10
+ */
+declare function flow<A extends any[], R>(f1: (...args: A) => R): (...args: A) => R;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @returns {(...args: A) => R2} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flow(add, square);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flow<A extends any[], R1, R2>(f1: (...args: A) => R1, f2: (a: R1) => R2): (...args: A) => R2;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @returns {(...args: A) => R3} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flow(add, square, double);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flow<A extends any[], R1, R2, R3>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3): (...args: A) => R3;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R3) => R4} f4 The function to invoke.
+ * @returns {(...args: A) => R4} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toStr = (n: number) => n.toString();
+ *
+ * const combined = flow(add, square, double, toStr);
+ * console.log(combined(1, 2)); // '18'
+ */
+declare function flow<A extends any[], R1, R2, R3, R4>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4): (...args: A) => R4;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R3) => R4} f4 The function to invoke.
+ * @param {(a: R4) => R5} f5 The function to invoke.
+ * @returns {(...args: A) => R5} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toStr = (n: number) => n.toString();
+ * const split = (s: string) => s.split('');
+ *
+ * const combined = flow(add, square, double, toStr, split);
+ * console.log(combined(1, 2)); // ['1', '8']
+ */
+declare function flow<A extends any[], R1, R2, R3, R4, R5>(f1: (...args: A) => R1, f2: (a: R1) => R2, f3: (a: R2) => R3, f4: (a: R3) => R4, f5: (a: R4) => R5): (...args: A) => R5;
+/**
+ * Creates a new function that executes the given functions in sequence. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * @param {Array<(...args: any[]) => any>} funcs The functions to invoke.
+ * @returns {(...args: any[]) => any} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flow(add, square);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flow(...funcs: Array<(...args: any[]) => any>): (...args: any[]) => any;
+
+export { flow };
Index: node_modules/es-toolkit/dist/function/flow.js
===================================================================
--- node_modules/es-toolkit/dist/function/flow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/flow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function flow(...funcs) {
+    return function (...args) {
+        let result = funcs.length ? funcs[0].apply(this, args) : args[0];
+        for (let i = 1; i < funcs.length; i++) {
+            result = funcs[i].call(this, result);
+        }
+        return result;
+    };
+}
+
+exports.flow = flow;
Index: node_modules/es-toolkit/dist/function/flow.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/flow.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/flow.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function flow(...funcs) {
+    return function (...args) {
+        let result = funcs.length ? funcs[0].apply(this, args) : args[0];
+        for (let i = 1; i < funcs.length; i++) {
+            result = funcs[i].call(this, result);
+        }
+        return result;
+    };
+}
+
+export { flow };
Index: node_modules/es-toolkit/dist/function/flowRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/flowRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/flowRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,144 @@
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {() => R} f The function to invoke.
+ * @returns {() => R} Returns the new composite function.
+ *
+ * @example
+ * function noArgFunc() {
+ *   return 42;
+ * }
+ * const combined = flowRight(noArgFunc);
+ * console.log(combined()); // 42
+ */
+declare function flowRight<R>(f: () => R): () => R;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(...args: A) => R} f1 The function to invoke.
+ * @returns {(...args: A) => R} Returns the new composite function.
+ *
+ * @example
+ * function oneArgFunc(a: number) {
+ *  return a * 2;
+ * }
+ * const combined = flowRight(oneArgFunc);
+ * console.log(combined(5)); // 10
+ */
+declare function flowRight<A extends any[], R>(f1: (...args: A) => R): (...args: A) => R;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @returns {(...args: A) => R2} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flowRight(square, add);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flowRight<A extends any[], R1, R2>(f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R2;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @returns {(...args: A) => R3} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flowRight(double, square, add);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flowRight<A extends any[], R1, R2, R3>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R3;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(a: R3) => R4} f4 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @returns {(...args: A) => R4} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toStr = (n: number) => n.toString();
+ *
+ * const combined = flowRight(toStr, double, square, add);
+ * console.log(combined(1, 2));  // '18'
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R4;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(a: R4) => R5} f5 The function to invoke.
+ * @param {(a: R3) => R4} f4 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @returns {(...args: A) => R5} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toStr = (n: number) => n.toString();
+ * const split = (s: string) => s.split('');
+ *
+ * const combined = flowRight(split, toStr, double, square, add);
+ * console.log(combined(1, 2)); // ['1', '8']
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4, R5>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R5;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(...args: any[]) => any} funcs The functions to invoke.
+ * @returns {(...args: any[]) => any} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flowRight(square, add);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flowRight(...funcs: Array<(...args: any[]) => any>): (...args: any[]) => any;
+
+export { flowRight };
Index: node_modules/es-toolkit/dist/function/flowRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/flowRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/flowRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,144 @@
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {() => R} f The function to invoke.
+ * @returns {() => R} Returns the new composite function.
+ *
+ * @example
+ * function noArgFunc() {
+ *   return 42;
+ * }
+ * const combined = flowRight(noArgFunc);
+ * console.log(combined()); // 42
+ */
+declare function flowRight<R>(f: () => R): () => R;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(...args: A) => R} f1 The function to invoke.
+ * @returns {(...args: A) => R} Returns the new composite function.
+ *
+ * @example
+ * function oneArgFunc(a: number) {
+ *  return a * 2;
+ * }
+ * const combined = flowRight(oneArgFunc);
+ * console.log(combined(5)); // 10
+ */
+declare function flowRight<A extends any[], R>(f1: (...args: A) => R): (...args: A) => R;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @returns {(...args: A) => R2} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flowRight(square, add);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flowRight<A extends any[], R1, R2>(f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R2;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @returns {(...args: A) => R3} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ *
+ * const combined = flowRight(double, square, add);
+ * console.log(combined(1, 2)); // 18
+ */
+declare function flowRight<A extends any[], R1, R2, R3>(f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R3;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(a: R3) => R4} f4 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @returns {(...args: A) => R4} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toStr = (n: number) => n.toString();
+ *
+ * const combined = flowRight(toStr, double, square, add);
+ * console.log(combined(1, 2));  // '18'
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4>(f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R4;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(a: R4) => R5} f5 The function to invoke.
+ * @param {(a: R3) => R4} f4 The function to invoke.
+ * @param {(a: R2) => R3} f3 The function to invoke.
+ * @param {(a: R1) => R2} f2 The function to invoke.
+ * @param {(...args: A) => R1} f1 The function to invoke.
+ * @returns {(...args: A) => R5} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ * const double = (n: number) => n * 2;
+ * const toStr = (n: number) => n.toString();
+ * const split = (s: string) => s.split('');
+ *
+ * const combined = flowRight(split, toStr, double, square, add);
+ * console.log(combined(1, 2)); // ['1', '8']
+ */
+declare function flowRight<A extends any[], R1, R2, R3, R4, R5>(f5: (a: R4) => R5, f4: (a: R3) => R4, f3: (a: R2) => R3, f2: (a: R1) => R2, f1: (...args: A) => R1): (...args: A) => R5;
+/**
+ * Creates a new function that executes the given functions in sequence from right to left. The return value of the previous function is passed as an argument to the next function.
+ *
+ * The `this` context of the returned function is also passed to the functions provided as parameters.
+ *
+ * This method is like `flow` except that it creates a function that invokes the given functions from right to left.
+ *
+ * @param {(...args: any[]) => any} funcs The functions to invoke.
+ * @returns {(...args: any[]) => any} Returns the new composite function.
+ *
+ * @example
+ * const add = (x: number, y: number) => x + y;
+ * const square = (n: number) => n * n;
+ *
+ * const combined = flowRight(square, add);
+ * console.log(combined(1, 2)); // 9
+ */
+declare function flowRight(...funcs: Array<(...args: any[]) => any>): (...args: any[]) => any;
+
+export { flowRight };
Index: node_modules/es-toolkit/dist/function/flowRight.js
===================================================================
--- node_modules/es-toolkit/dist/function/flowRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/flowRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const flow = require('./flow.js');
+
+function flowRight(...funcs) {
+    return flow.flow(...funcs.reverse());
+}
+
+exports.flowRight = flowRight;
Index: node_modules/es-toolkit/dist/function/flowRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/flowRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/flowRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { flow } from './flow.mjs';
+
+function flowRight(...funcs) {
+    return flow(...funcs.reverse());
+}
+
+export { flowRight };
Index: node_modules/es-toolkit/dist/function/identity.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/identity.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/identity.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Returns the input value unchanged.
+ *
+ * @template T - The type of the input value.
+ * @param {T} x - The value to be returned.
+ * @returns {T} The input value.
+ *
+ * @example
+ * // Returns 5
+ * identity(5);
+ *
+ * @example
+ * // Returns 'hello'
+ * identity('hello');
+ *
+ * @example
+ * // Returns { key: 'value' }
+ * identity({ key: 'value' });
+ */
+declare function identity<T>(x: T): T;
+
+export { identity };
Index: node_modules/es-toolkit/dist/function/identity.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/identity.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/identity.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Returns the input value unchanged.
+ *
+ * @template T - The type of the input value.
+ * @param {T} x - The value to be returned.
+ * @returns {T} The input value.
+ *
+ * @example
+ * // Returns 5
+ * identity(5);
+ *
+ * @example
+ * // Returns 'hello'
+ * identity('hello');
+ *
+ * @example
+ * // Returns { key: 'value' }
+ * identity({ key: 'value' });
+ */
+declare function identity<T>(x: T): T;
+
+export { identity };
Index: node_modules/es-toolkit/dist/function/identity.js
===================================================================
--- node_modules/es-toolkit/dist/function/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function identity(x) {
+    return x;
+}
+
+exports.identity = identity;
Index: node_modules/es-toolkit/dist/function/identity.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/identity.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/identity.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function identity(x) {
+    return x;
+}
+
+export { identity };
Index: node_modules/es-toolkit/dist/function/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+export { after } from './after.mjs';
+export { ary } from './ary.mjs';
+export { asyncNoop } from './asyncNoop.mjs';
+export { before } from './before.mjs';
+export { curry } from './curry.mjs';
+export { curryRight } from './curryRight.mjs';
+export { DebouncedFunction, debounce } from './debounce.mjs';
+export { flow } from './flow.mjs';
+export { flowRight } from './flowRight.mjs';
+export { identity } from './identity.mjs';
+export { MemoizeCache, memoize } from './memoize.mjs';
+export { negate } from './negate.mjs';
+export { noop } from './noop.mjs';
+export { once } from './once.mjs';
+export { partial } from './partial.mjs';
+export { partialRight } from './partialRight.mjs';
+export { rest } from './rest.mjs';
+export { retry } from './retry.mjs';
+export { spread } from './spread.mjs';
+export { ThrottledFunction, throttle } from './throttle.mjs';
+export { unary } from './unary.mjs';
Index: node_modules/es-toolkit/dist/function/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+export { after } from './after.js';
+export { ary } from './ary.js';
+export { asyncNoop } from './asyncNoop.js';
+export { before } from './before.js';
+export { curry } from './curry.js';
+export { curryRight } from './curryRight.js';
+export { DebouncedFunction, debounce } from './debounce.js';
+export { flow } from './flow.js';
+export { flowRight } from './flowRight.js';
+export { identity } from './identity.js';
+export { MemoizeCache, memoize } from './memoize.js';
+export { negate } from './negate.js';
+export { noop } from './noop.js';
+export { once } from './once.js';
+export { partial } from './partial.js';
+export { partialRight } from './partialRight.js';
+export { rest } from './rest.js';
+export { retry } from './retry.js';
+export { spread } from './spread.js';
+export { ThrottledFunction, throttle } from './throttle.js';
+export { unary } from './unary.js';
Index: node_modules/es-toolkit/dist/function/index.js
===================================================================
--- node_modules/es-toolkit/dist/function/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const after = require('./after.js');
+const ary = require('./ary.js');
+const asyncNoop = require('./asyncNoop.js');
+const before = require('./before.js');
+const curry = require('./curry.js');
+const curryRight = require('./curryRight.js');
+const debounce = require('./debounce.js');
+const flow = require('./flow.js');
+const flowRight = require('./flowRight.js');
+const identity = require('./identity.js');
+const memoize = require('./memoize.js');
+const negate = require('./negate.js');
+const noop = require('./noop.js');
+const once = require('./once.js');
+const partial = require('./partial.js');
+const partialRight = require('./partialRight.js');
+const rest = require('./rest.js');
+const retry = require('./retry.js');
+const spread = require('./spread.js');
+const throttle = require('./throttle.js');
+const unary = require('./unary.js');
+
+
+
+exports.after = after.after;
+exports.ary = ary.ary;
+exports.asyncNoop = asyncNoop.asyncNoop;
+exports.before = before.before;
+exports.curry = curry.curry;
+exports.curryRight = curryRight.curryRight;
+exports.debounce = debounce.debounce;
+exports.flow = flow.flow;
+exports.flowRight = flowRight.flowRight;
+exports.identity = identity.identity;
+exports.memoize = memoize.memoize;
+exports.negate = negate.negate;
+exports.noop = noop.noop;
+exports.once = once.once;
+exports.partial = partial.partial;
+exports.partialRight = partialRight.partialRight;
+exports.rest = rest.rest;
+exports.retry = retry.retry;
+exports.spread = spread.spread;
+exports.throttle = throttle.throttle;
+exports.unary = unary.unary;
Index: node_modules/es-toolkit/dist/function/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+export { after } from './after.mjs';
+export { ary } from './ary.mjs';
+export { asyncNoop } from './asyncNoop.mjs';
+export { before } from './before.mjs';
+export { curry } from './curry.mjs';
+export { curryRight } from './curryRight.mjs';
+export { debounce } from './debounce.mjs';
+export { flow } from './flow.mjs';
+export { flowRight } from './flowRight.mjs';
+export { identity } from './identity.mjs';
+export { memoize } from './memoize.mjs';
+export { negate } from './negate.mjs';
+export { noop } from './noop.mjs';
+export { once } from './once.mjs';
+export { partial } from './partial.mjs';
+export { partialRight } from './partialRight.mjs';
+export { rest } from './rest.mjs';
+export { retry } from './retry.mjs';
+export { spread } from './spread.mjs';
+export { throttle } from './throttle.mjs';
+export { unary } from './unary.mjs';
Index: node_modules/es-toolkit/dist/function/memoize.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/memoize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/memoize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,124 @@
+/**
+ * Creates a memoized version of the provided function. The memoized function caches
+ * results based on the argument it receives, so if the same argument is passed again,
+ * it returns the cached result instead of recomputing it.
+ *
+ * This function works with functions that take zero or just one argument. If your function
+ * originally takes multiple arguments, you should refactor it to take a single object or array
+ * that combines those arguments.
+ *
+ * If the argument is not primitive (e.g., arrays or objects), provide a
+ * `getCacheKey` function to generate a unique cache key for proper caching.
+ *
+ * @template F - The type of the function to be memoized.
+ * @param {F} fn - The function to be memoized. It should accept a single argument and return a value.
+ * @param {MemoizeOptions<Parameters<F>[0], ReturnType<F>>} [options={}] - Optional configuration for the memoization.
+ * @param {MemoizeCache<any, V>} [options.cache] - The cache object used to store results. Defaults to a new `Map`.
+ * @param {(args: A) => unknown} [options.getCacheKey] - An optional function to generate a unique cache key for each argument.
+ *
+ * @returns The memoized function with an additional `cache` property that exposes the internal cache.
+ *
+ * @example
+ * // Example using the default cache
+ * const add = (x: number) => x + 10;
+ * const memoizedAdd = memoize(add);
+ *
+ * console.log(memoizedAdd(5)); // 15
+ * console.log(memoizedAdd(5)); // 15 (cached result)
+ * console.log(memoizedAdd.cache.size); // 1
+ *
+ * @example
+ * // Example using a custom resolver
+ * const sum = (arr: number[]) => arr.reduce((x, y) => x + y, 0);
+ * const memoizedSum = memoize(sum, { getCacheKey: (arr: number[]) => arr.join(',') });
+ * console.log(memoizedSum([1, 2])); // 3
+ * console.log(memoizedSum([1, 2])); // 3 (cached result)
+ * console.log(memoizedSum.cache.size); // 1
+ *
+ * @example
+ * // Example using a custom cache implementation
+ * class CustomCache<K, T> implements MemoizeCache<K, T> {
+ *   private cache = new Map<K, T>();
+ *
+ *   set(key: K, value: T): void {
+ *     this.cache.set(key, value);
+ *   }
+ *
+ *   get(key: K): T | undefined {
+ *     return this.cache.get(key);
+ *   }
+ *
+ *   has(key: K): boolean {
+ *     return this.cache.has(key);
+ *   }
+ *
+ *   delete(key: K): boolean {
+ *     return this.cache.delete(key);
+ *   }
+ *
+ *   clear(): void {
+ *     this.cache.clear();
+ *   }
+ *
+ *   get size(): number {
+ *     return this.cache.size;
+ *   }
+ * }
+ * const customCache = new CustomCache<string, number>();
+ * const memoizedSumWithCustomCache = memoize(sum, { cache: customCache });
+ * console.log(memoizedSumWithCustomCache([1, 2])); // 3
+ * console.log(memoizedSumWithCustomCache([1, 2])); // 3 (cached result)
+ * console.log(memoizedAddWithCustomCache.cache.size); // 1
+ */
+declare function memoize<F extends (...args: any) => any>(fn: F, options?: {
+    cache?: MemoizeCache<any, ReturnType<F>>;
+    getCacheKey?: (args: Parameters<F>[0]) => unknown;
+}): F & {
+    cache: MemoizeCache<any, ReturnType<F>>;
+};
+/**
+ * Represents a cache for memoization, allowing storage and retrieval of computed values.
+ *
+ * @template K - The type of keys used to store values in the cache.
+ * @template V - The type of values stored in the cache.
+ */
+interface MemoizeCache<K, V> {
+    /**
+     * Stores a value in the cache with the specified key.
+     *
+     * @param key - The key to associate with the value.
+     * @param value - The value to store in the cache.
+     */
+    set(key: K, value: V): void;
+    /**
+     * Retrieves a value from the cache by its key.
+     *
+     * @param key - The key of the value to retrieve.
+     * @returns The value associated with the key, or undefined if the key does not exist.
+     */
+    get(key: K): V | undefined;
+    /**
+     * Checks if a value exists in the cache for the specified key.
+     *
+     * @param key - The key to check for existence in the cache.
+     * @returns True if the cache contains the key, false otherwise.
+     */
+    has(key: K): boolean;
+    /**
+     * Deletes a value from the cache by its key.
+     *
+     * @param key - The key of the value to delete.
+     * @returns True if the value was successfully deleted, false otherwise.
+     */
+    delete(key: K): boolean | void;
+    /**
+     * Clears all values from the cache.
+     */
+    clear(): void;
+    /**
+     * The number of entries in the cache.
+     */
+    size: number;
+}
+
+export { type MemoizeCache, memoize };
Index: node_modules/es-toolkit/dist/function/memoize.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/memoize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/memoize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,124 @@
+/**
+ * Creates a memoized version of the provided function. The memoized function caches
+ * results based on the argument it receives, so if the same argument is passed again,
+ * it returns the cached result instead of recomputing it.
+ *
+ * This function works with functions that take zero or just one argument. If your function
+ * originally takes multiple arguments, you should refactor it to take a single object or array
+ * that combines those arguments.
+ *
+ * If the argument is not primitive (e.g., arrays or objects), provide a
+ * `getCacheKey` function to generate a unique cache key for proper caching.
+ *
+ * @template F - The type of the function to be memoized.
+ * @param {F} fn - The function to be memoized. It should accept a single argument and return a value.
+ * @param {MemoizeOptions<Parameters<F>[0], ReturnType<F>>} [options={}] - Optional configuration for the memoization.
+ * @param {MemoizeCache<any, V>} [options.cache] - The cache object used to store results. Defaults to a new `Map`.
+ * @param {(args: A) => unknown} [options.getCacheKey] - An optional function to generate a unique cache key for each argument.
+ *
+ * @returns The memoized function with an additional `cache` property that exposes the internal cache.
+ *
+ * @example
+ * // Example using the default cache
+ * const add = (x: number) => x + 10;
+ * const memoizedAdd = memoize(add);
+ *
+ * console.log(memoizedAdd(5)); // 15
+ * console.log(memoizedAdd(5)); // 15 (cached result)
+ * console.log(memoizedAdd.cache.size); // 1
+ *
+ * @example
+ * // Example using a custom resolver
+ * const sum = (arr: number[]) => arr.reduce((x, y) => x + y, 0);
+ * const memoizedSum = memoize(sum, { getCacheKey: (arr: number[]) => arr.join(',') });
+ * console.log(memoizedSum([1, 2])); // 3
+ * console.log(memoizedSum([1, 2])); // 3 (cached result)
+ * console.log(memoizedSum.cache.size); // 1
+ *
+ * @example
+ * // Example using a custom cache implementation
+ * class CustomCache<K, T> implements MemoizeCache<K, T> {
+ *   private cache = new Map<K, T>();
+ *
+ *   set(key: K, value: T): void {
+ *     this.cache.set(key, value);
+ *   }
+ *
+ *   get(key: K): T | undefined {
+ *     return this.cache.get(key);
+ *   }
+ *
+ *   has(key: K): boolean {
+ *     return this.cache.has(key);
+ *   }
+ *
+ *   delete(key: K): boolean {
+ *     return this.cache.delete(key);
+ *   }
+ *
+ *   clear(): void {
+ *     this.cache.clear();
+ *   }
+ *
+ *   get size(): number {
+ *     return this.cache.size;
+ *   }
+ * }
+ * const customCache = new CustomCache<string, number>();
+ * const memoizedSumWithCustomCache = memoize(sum, { cache: customCache });
+ * console.log(memoizedSumWithCustomCache([1, 2])); // 3
+ * console.log(memoizedSumWithCustomCache([1, 2])); // 3 (cached result)
+ * console.log(memoizedAddWithCustomCache.cache.size); // 1
+ */
+declare function memoize<F extends (...args: any) => any>(fn: F, options?: {
+    cache?: MemoizeCache<any, ReturnType<F>>;
+    getCacheKey?: (args: Parameters<F>[0]) => unknown;
+}): F & {
+    cache: MemoizeCache<any, ReturnType<F>>;
+};
+/**
+ * Represents a cache for memoization, allowing storage and retrieval of computed values.
+ *
+ * @template K - The type of keys used to store values in the cache.
+ * @template V - The type of values stored in the cache.
+ */
+interface MemoizeCache<K, V> {
+    /**
+     * Stores a value in the cache with the specified key.
+     *
+     * @param key - The key to associate with the value.
+     * @param value - The value to store in the cache.
+     */
+    set(key: K, value: V): void;
+    /**
+     * Retrieves a value from the cache by its key.
+     *
+     * @param key - The key of the value to retrieve.
+     * @returns The value associated with the key, or undefined if the key does not exist.
+     */
+    get(key: K): V | undefined;
+    /**
+     * Checks if a value exists in the cache for the specified key.
+     *
+     * @param key - The key to check for existence in the cache.
+     * @returns True if the cache contains the key, false otherwise.
+     */
+    has(key: K): boolean;
+    /**
+     * Deletes a value from the cache by its key.
+     *
+     * @param key - The key of the value to delete.
+     * @returns True if the value was successfully deleted, false otherwise.
+     */
+    delete(key: K): boolean | void;
+    /**
+     * Clears all values from the cache.
+     */
+    clear(): void;
+    /**
+     * The number of entries in the cache.
+     */
+    size: number;
+}
+
+export { type MemoizeCache, memoize };
Index: node_modules/es-toolkit/dist/function/memoize.js
===================================================================
--- node_modules/es-toolkit/dist/function/memoize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/memoize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function memoize(fn, options = {}) {
+    const { cache = new Map(), getCacheKey } = options;
+    const memoizedFn = function (arg) {
+        const key = getCacheKey ? getCacheKey(arg) : arg;
+        if (cache.has(key)) {
+            return cache.get(key);
+        }
+        const result = fn.call(this, arg);
+        cache.set(key, result);
+        return result;
+    };
+    memoizedFn.cache = cache;
+    return memoizedFn;
+}
+
+exports.memoize = memoize;
Index: node_modules/es-toolkit/dist/function/memoize.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/memoize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/memoize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+function memoize(fn, options = {}) {
+    const { cache = new Map(), getCacheKey } = options;
+    const memoizedFn = function (arg) {
+        const key = getCacheKey ? getCacheKey(arg) : arg;
+        if (cache.has(key)) {
+            return cache.get(key);
+        }
+        const result = fn.call(this, arg);
+        cache.set(key, result);
+        return result;
+    };
+    memoizedFn.cache = cache;
+    return memoizedFn;
+}
+
+export { memoize };
Index: node_modules/es-toolkit/dist/function/negate.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/negate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/negate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Creates a function that negates the result of the predicate function.
+ *
+ * @template F - The type of the function to negate.
+ * @param {F} func - The function to negate.
+ * @returns {F} The new negated function, which negates the boolean result of `func`.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5, 6];
+ * const isEven = (n: number) => n % 2 === 0;
+ * const result = array.filter(negate(isEven));
+ * // result will be [1, 3, 5]
+ */
+declare function negate<F extends (...args: any[]) => boolean>(func: F): F;
+
+export { negate };
Index: node_modules/es-toolkit/dist/function/negate.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/negate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/negate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Creates a function that negates the result of the predicate function.
+ *
+ * @template F - The type of the function to negate.
+ * @param {F} func - The function to negate.
+ * @returns {F} The new negated function, which negates the boolean result of `func`.
+ *
+ * @example
+ * const array = [1, 2, 3, 4, 5, 6];
+ * const isEven = (n: number) => n % 2 === 0;
+ * const result = array.filter(negate(isEven));
+ * // result will be [1, 3, 5]
+ */
+declare function negate<F extends (...args: any[]) => boolean>(func: F): F;
+
+export { negate };
Index: node_modules/es-toolkit/dist/function/negate.js
===================================================================
--- node_modules/es-toolkit/dist/function/negate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/negate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function negate(func) {
+    return ((...args) => !func(...args));
+}
+
+exports.negate = negate;
Index: node_modules/es-toolkit/dist/function/negate.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/negate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/negate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function negate(func) {
+    return ((...args) => !func(...args));
+}
+
+export { negate };
Index: node_modules/es-toolkit/dist/function/noop.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/noop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/noop.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+/**
+ * A no-operation function that does nothing.
+ * This can be used as a placeholder or default function.
+ *
+ * @example
+ * noop(); // Does nothing
+ *
+ * @returns {void} This function does not return anything.
+ */
+declare function noop(): void;
+
+export { noop };
Index: node_modules/es-toolkit/dist/function/noop.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/noop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/noop.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+/**
+ * A no-operation function that does nothing.
+ * This can be used as a placeholder or default function.
+ *
+ * @example
+ * noop(); // Does nothing
+ *
+ * @returns {void} This function does not return anything.
+ */
+declare function noop(): void;
+
+export { noop };
Index: node_modules/es-toolkit/dist/function/noop.js
===================================================================
--- node_modules/es-toolkit/dist/function/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function noop() { }
+
+exports.noop = noop;
Index: node_modules/es-toolkit/dist/function/noop.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/noop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/noop.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+function noop() { }
+
+export { noop };
Index: node_modules/es-toolkit/dist/function/once.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/once.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/once.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Creates a function that is restricted to invoking func once. Repeat calls to the function return the value of the first invocation.
+ *
+ * @template F - The type of the function.
+ * @param {F} func - The function to restrict.
+ * @returns {F} Returns the new restricted function.
+ *
+ * @example
+ * const initialize = once(createApplication);
+ *
+ * initialize();
+ * initialize();
+ * // => `createApplication` is invoked once
+ */
+declare function once<F extends (...args: any[]) => any>(func: F): F;
+
+export { once };
Index: node_modules/es-toolkit/dist/function/once.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/once.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/once.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Creates a function that is restricted to invoking func once. Repeat calls to the function return the value of the first invocation.
+ *
+ * @template F - The type of the function.
+ * @param {F} func - The function to restrict.
+ * @returns {F} Returns the new restricted function.
+ *
+ * @example
+ * const initialize = once(createApplication);
+ *
+ * initialize();
+ * initialize();
+ * // => `createApplication` is invoked once
+ */
+declare function once<F extends (...args: any[]) => any>(func: F): F;
+
+export { once };
Index: node_modules/es-toolkit/dist/function/once.js
===================================================================
--- node_modules/es-toolkit/dist/function/once.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/once.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function once(func) {
+    let called = false;
+    let cache;
+    return function (...args) {
+        if (!called) {
+            called = true;
+            cache = func(...args);
+        }
+        return cache;
+    };
+}
+
+exports.once = once;
Index: node_modules/es-toolkit/dist/function/once.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/once.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/once.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+function once(func) {
+    let called = false;
+    let cache;
+    return function (...args) {
+        if (!called) {
+            called = true;
+            cache = func(...args);
+        }
+        return cache;
+    };
+}
+
+export { once };
Index: node_modules/es-toolkit/dist/function/partial.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/partial.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/partial.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,551 @@
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(): R} A new function that takes no arguments and returns the result of the original function.
+ *
+ * @example
+ * const addOne = (x: number) => x + 1;
+ * const addOneToFive = partial(addOne, 5);
+ * console.log(addOneToFive()); // => 6
+ */
+declare function partial<T1, R>(func: (arg1: T1) => R, arg1: T1): () => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number) => x * y;
+ * const double = partial(multiply, 2);
+ * console.log(double(5)); // => 10
+ */
+declare function partial<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, arg1: T1): (arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2): R} func The function to partially apply.
+ * @param {Placeholder} placeholder The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @returns {function(arg1: T1): R} A new function that takes the first argument and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const greetWithHello = partial(greet, partial.placeholder, 'John');
+ * console.log(greetWithHello('Hello')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, placeholder: Placeholder, arg2: T2): (arg1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(arg2: T2, arg3: T3): R} A new function that takes the second and third arguments and returns the result of the original function.
+ *
+ * @example
+ * const sumThree = (a: number, b: number, c: number) => a + b + c;
+ * const addFive = partial(sumThree, 5);
+ * console.log(addFive(3, 2)); // => 10
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1): (arg2: T2, arg3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @returns {function(arg1: T1, arg3: T3): R} A new function that takes the first and third arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const greetWithPlaceholder = partial(greet, partial.placeholder, 'John');
+ * console.log(greetWithPlaceholder('Hello')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: Placeholder, arg2: T2): (arg1: T1, arg3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(arg1: T1, arg2: T2): R} A new function that takes the first and second arguments and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number) => x * y * z;
+ * const multiplyWithPlaceholders = partial(multiply, partial.placeholder, partial.placeholder, 2);
+ * console.log(multiplyWithPlaceholders(3, 4)); // => 24
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: Placeholder, arg2: Placeholder, arg3: T3): (arg1: T1, arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const greetWithPlaceholder = partial(greet, 'Hello', partial.placeholder);
+ * console.log(greetWithPlaceholder('John')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: Placeholder, arg3: T3): (arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The first argument to apply.
+ * @param {T2} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const greetWithPlaceholder = partial(greet, 'Hello', partial.placeholder);
+ * console.log(greetWithPlaceholder('John')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, plc1: Placeholder, arg2: T2, arg3: T3): (arg1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number, w: number) => x * y * z * w;
+ * const double = partial(multiply, 2);
+ * console.log(double(5, 4, 3)); // => 120
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1): (arg2: T2, arg3: T3, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1, arg2: T2): R} A new function that takes the first and second arguments and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number, w: number) => x * y * z * w;
+ * const multiplyWithPlaceholders = partial(multiply, partial.placeholder, partial.placeholder, 2, 3);
+ * console.log(multiplyWithPlaceholders(4, 5)); // => 120
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: Placeholder, arg3: T3, arg4: T4): (arg1: T1, arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @returns {function(arg3: T3, arg4: T4): R} A new function that takes the third and fourth arguments and returns the result of the original function.
+ *
+ * @example
+ * const sumFour = (a: number, b: number, c: number, d: number) => a + b + c + d;
+ * const addOneAndTwo = partial(sumFour, 1, 2);
+ * console.log(addOneAndTwo(3, 4)); // => 10
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2): (arg3: T3, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg2: T2, arg4: T4): R} A new function that takes the second and fourth arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting}, ${name}${punctuation}`;
+ * const greetWithPlaceholder = partial(greet, 'Hello', partial.placeholder, '!');
+ * console.log(greetWithPlaceholder('John')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: T3): (arg2: T2, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1, arg3: T3): R} A new function that takes the first and third arguments and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number, w: number) => x * y * z * w;
+ * const multiplyWithPlaceholder = partial(multiply, partial.placeholder, 2, 3);
+ * console.log(multiplyWithPlaceholder(4)); // => 24
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: T2, arg3: T3): (arg1: T1, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1, arg3: T3): R} A new function that takes the first and third arguments and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: T2, arg3: Placeholder, arg4: T4): (arg1: T1, arg3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1, arg2: T2): R} A new function that takes the first and second arguments and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number, w: number) => x * y * z * w;
+ * const multiplyWithPlaceholders = partial(multiply, partial.placeholder, partial.placeholder, 2, 3);
+ * console.log(multiplyWithPlaceholders(4, 5)); // => 120
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: Placeholder, arg3: T3, arg4: T4): (arg1: T1, arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(arg4: T4): R} A new function that takes the fourth argument and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: T3): (arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg3: T3): R} A new function that takes the third argument and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: Placeholder, arg4: T4): (arg3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: T3, arg4: T4): (arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1): R} A new function that takes the first argument and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: T2, arg3: T3, arg4: T4): (arg1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template R The return type of the function.
+ * @param {function(...args: TS): R} func The function to partially apply.
+ * @returns {function(...args: TS): R} A new function that takes the same arguments as the original function.
+ *
+ * @example
+ * const add = (...numbers: number[]) => numbers.reduce((sum, n) => sum + n, 0);
+ * const addFive = partial(add, 5);
+ * console.log(addFive(1, 2, 3)); // => 11
+ */
+declare function partial<TS extends any[], R>(func: (...args: TS) => R): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, ...args: TS): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(...args: TS): R} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, ...names: string[]) => `${greeting}, ${names.join(', ')}!`;
+ * const greetHello = partial(greet, 'Hello');
+ * console.log(greetHello('Alice', 'Bob')); // => 'Hello, Alice, Bob!'
+ */
+declare function partial<TS extends any[], T1, R>(func: (arg1: T1, ...args: TS) => R, arg1: T1): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, ...args: TS): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @returns {function(...args: TS): R} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting}, ${name}${punctuation}`;
+ * const greetWithHello = partial(greet, 'Hello', '!');
+ * console.log(greetWithHello('John')); // => 'Hello, John!'
+ */
+declare function partial<TS extends any[], T1, T2, R>(func: (arg1: T1, arg2: T2, ...args: TS) => R, t1: T1, arg2: T2): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(t1: T1, arg2: T2, arg3: T3, ...args: TS): R} func The function to partially apply.
+ * @param {T1} t1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(...args: TS): R} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting}, ${name}${punctuation}`;
+ * const greetWithHello = partial(greet, 'Hello', 'John', '!');
+ * console.log(greetWithHello()); // => 'Hello, John!'
+ */
+declare function partial<TS extends any[], T1, T2, T3, R>(func: (t1: T1, arg2: T2, arg3: T3, ...args: TS) => R, t1: T1, arg2: T2, arg3: T3): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(t1: T1, arg2: T2, arg3: T3, arg4: T4, ...args: TS): R} func The function to partially apply.
+ * @param {T1} t1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(...args: TS): R} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting}, ${name}${punctuation}`;
+ * const greetWithHello = partial(greet, 'Hello', 'John', '!');
+ * console.log(greetWithHello()); // => 'Hello, John!'
+ */
+declare function partial<TS extends any[], T1, T2, T3, T4, R>(func: (t1: T1, arg2: T2, arg3: T3, arg4: T4, ...args: TS) => R, t1: T1, arg2: T2, arg3: T3, arg4: T4): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template F The type of the function to partially apply.
+ * @param {F} func The function to partially apply.
+ * @param {...any[]} partialArgs The arguments to be partially applied.
+ * @returns {function(...args: any[]): ReturnType<F>} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const add = (...numbers: number[]) => numbers.reduce((sum, n) => sum + n, 0);
+ * const addFive = partial(add, 5);
+ * console.log(addFive(1, 2, 3)); // => 11
+ */
+declare function partial<F extends (...args: any[]) => any>(func: F, ...partialArgs: any[]): (...args: any[]) => ReturnType<F>;
+declare namespace partial {
+    var placeholder: typeof placeholderSymbol;
+}
+declare const placeholderSymbol: unique symbol;
+type Placeholder = typeof placeholderSymbol;
+
+export { partial };
Index: node_modules/es-toolkit/dist/function/partial.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/partial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/partial.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,551 @@
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(): R} A new function that takes no arguments and returns the result of the original function.
+ *
+ * @example
+ * const addOne = (x: number) => x + 1;
+ * const addOneToFive = partial(addOne, 5);
+ * console.log(addOneToFive()); // => 6
+ */
+declare function partial<T1, R>(func: (arg1: T1) => R, arg1: T1): () => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number) => x * y;
+ * const double = partial(multiply, 2);
+ * console.log(double(5)); // => 10
+ */
+declare function partial<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, arg1: T1): (arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2): R} func The function to partially apply.
+ * @param {Placeholder} placeholder The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @returns {function(arg1: T1): R} A new function that takes the first argument and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const greetWithHello = partial(greet, partial.placeholder, 'John');
+ * console.log(greetWithHello('Hello')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, placeholder: Placeholder, arg2: T2): (arg1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(arg2: T2, arg3: T3): R} A new function that takes the second and third arguments and returns the result of the original function.
+ *
+ * @example
+ * const sumThree = (a: number, b: number, c: number) => a + b + c;
+ * const addFive = partial(sumThree, 5);
+ * console.log(addFive(3, 2)); // => 10
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1): (arg2: T2, arg3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @returns {function(arg1: T1, arg3: T3): R} A new function that takes the first and third arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const greetWithPlaceholder = partial(greet, partial.placeholder, 'John');
+ * console.log(greetWithPlaceholder('Hello')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: Placeholder, arg2: T2): (arg1: T1, arg3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(arg1: T1, arg2: T2): R} A new function that takes the first and second arguments and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number) => x * y * z;
+ * const multiplyWithPlaceholders = partial(multiply, partial.placeholder, partial.placeholder, 2);
+ * console.log(multiplyWithPlaceholders(3, 4)); // => 24
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: Placeholder, arg2: Placeholder, arg3: T3): (arg1: T1, arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const greetWithPlaceholder = partial(greet, 'Hello', partial.placeholder);
+ * console.log(greetWithPlaceholder('John')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: Placeholder, arg3: T3): (arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The first argument to apply.
+ * @param {T2} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;
+ * const greetWithPlaceholder = partial(greet, 'Hello', partial.placeholder);
+ * console.log(greetWithPlaceholder('John')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, plc1: Placeholder, arg2: T2, arg3: T3): (arg1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number, w: number) => x * y * z * w;
+ * const double = partial(multiply, 2);
+ * console.log(double(5, 4, 3)); // => 120
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1): (arg2: T2, arg3: T3, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1, arg2: T2): R} A new function that takes the first and second arguments and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number, w: number) => x * y * z * w;
+ * const multiplyWithPlaceholders = partial(multiply, partial.placeholder, partial.placeholder, 2, 3);
+ * console.log(multiplyWithPlaceholders(4, 5)); // => 120
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: Placeholder, arg3: T3, arg4: T4): (arg1: T1, arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @returns {function(arg3: T3, arg4: T4): R} A new function that takes the third and fourth arguments and returns the result of the original function.
+ *
+ * @example
+ * const sumFour = (a: number, b: number, c: number, d: number) => a + b + c + d;
+ * const addOneAndTwo = partial(sumFour, 1, 2);
+ * console.log(addOneAndTwo(3, 4)); // => 10
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2): (arg3: T3, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg2: T2, arg4: T4): R} A new function that takes the second and fourth arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting}, ${name}${punctuation}`;
+ * const greetWithPlaceholder = partial(greet, 'Hello', partial.placeholder, '!');
+ * console.log(greetWithPlaceholder('John')); // => 'Hello, John!'
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: T3): (arg2: T2, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1, arg3: T3): R} A new function that takes the first and third arguments and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number, w: number) => x * y * z * w;
+ * const multiplyWithPlaceholder = partial(multiply, partial.placeholder, 2, 3);
+ * console.log(multiplyWithPlaceholder(4)); // => 24
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: T2, arg3: T3): (arg1: T1, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1, arg3: T3): R} A new function that takes the first and third arguments and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: T2, arg3: Placeholder, arg4: T4): (arg1: T1, arg3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1, arg2: T2): R} A new function that takes the first and second arguments and returns the result of the original function.
+ *
+ * @example
+ * const multiply = (x: number, y: number, z: number, w: number) => x * y * z * w;
+ * const multiplyWithPlaceholders = partial(multiply, partial.placeholder, partial.placeholder, 2, 3);
+ * console.log(multiplyWithPlaceholders(4, 5)); // => 120
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: Placeholder, arg3: T3, arg4: T4): (arg1: T1, arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(arg4: T4): R} A new function that takes the fourth argument and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: T3): (arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg3: T3): R} A new function that takes the third argument and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: Placeholder, arg4: T4): (arg3: T3) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg2: T2): R} A new function that takes the second argument and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: T3, arg4: T4): (arg2: T2) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R} func The function to partially apply.
+ * @param {Placeholder} arg1 The placeholder for the first argument.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(arg1: T1): R} A new function that takes the first argument and returns the result of the original function.
+ */
+declare function partial<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: Placeholder, arg2: T2, arg3: T3, arg4: T4): (arg1: T1) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template R The return type of the function.
+ * @param {function(...args: TS): R} func The function to partially apply.
+ * @returns {function(...args: TS): R} A new function that takes the same arguments as the original function.
+ *
+ * @example
+ * const add = (...numbers: number[]) => numbers.reduce((sum, n) => sum + n, 0);
+ * const addFive = partial(add, 5);
+ * console.log(addFive(1, 2, 3)); // => 11
+ */
+declare function partial<TS extends any[], R>(func: (...args: TS) => R): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, ...args: TS): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @returns {function(...args: TS): R} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, ...names: string[]) => `${greeting}, ${names.join(', ')}!`;
+ * const greetHello = partial(greet, 'Hello');
+ * console.log(greetHello('Alice', 'Bob')); // => 'Hello, Alice, Bob!'
+ */
+declare function partial<TS extends any[], T1, R>(func: (arg1: T1, ...args: TS) => R, arg1: T1): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {function(arg1: T1, arg2: T2, ...args: TS): R} func The function to partially apply.
+ * @param {T1} arg1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @returns {function(...args: TS): R} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting}, ${name}${punctuation}`;
+ * const greetWithHello = partial(greet, 'Hello', '!');
+ * console.log(greetWithHello('John')); // => 'Hello, John!'
+ */
+declare function partial<TS extends any[], T1, T2, R>(func: (arg1: T1, arg2: T2, ...args: TS) => R, t1: T1, arg2: T2): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {function(t1: T1, arg2: T2, arg3: T3, ...args: TS): R} func The function to partially apply.
+ * @param {T1} t1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @returns {function(...args: TS): R} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting}, ${name}${punctuation}`;
+ * const greetWithHello = partial(greet, 'Hello', 'John', '!');
+ * console.log(greetWithHello()); // => 'Hello, John!'
+ */
+declare function partial<TS extends any[], T1, T2, T3, R>(func: (t1: T1, arg2: T2, arg3: T3, ...args: TS) => R, t1: T1, arg2: T2, arg3: T3): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template TS The types of the arguments.
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {function(t1: T1, arg2: T2, arg3: T3, arg4: T4, ...args: TS): R} func The function to partially apply.
+ * @param {T1} t1 The first argument to apply.
+ * @param {T2} arg2 The second argument to apply.
+ * @param {T3} arg3 The third argument to apply.
+ * @param {T4} arg4 The fourth argument to apply.
+ * @returns {function(...args: TS): R} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const greet = (greeting: string, name: string, punctuation: string) => `${greeting}, ${name}${punctuation}`;
+ * const greetWithHello = partial(greet, 'Hello', 'John', '!');
+ * console.log(greetWithHello()); // => 'Hello, John!'
+ */
+declare function partial<TS extends any[], T1, T2, T3, T4, R>(func: (t1: T1, arg2: T2, arg3: T3, arg4: T4, ...args: TS) => R, t1: T1, arg2: T2, arg3: T3, arg4: T4): (...args: TS) => R;
+/**
+ * Creates a function that invokes `func` with `partialArgs` prepended to the arguments it receives. This method is like `bind` except it does not alter the `this` binding.
+ *
+ * The partial.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template F The type of the function to partially apply.
+ * @param {F} func The function to partially apply.
+ * @param {...any[]} partialArgs The arguments to be partially applied.
+ * @returns {function(...args: any[]): ReturnType<F>} A new function that takes the remaining arguments and returns the result of the original function.
+ *
+ * @example
+ * const add = (...numbers: number[]) => numbers.reduce((sum, n) => sum + n, 0);
+ * const addFive = partial(add, 5);
+ * console.log(addFive(1, 2, 3)); // => 11
+ */
+declare function partial<F extends (...args: any[]) => any>(func: F, ...partialArgs: any[]): (...args: any[]) => ReturnType<F>;
+declare namespace partial {
+    var placeholder: typeof placeholderSymbol;
+}
+declare const placeholderSymbol: unique symbol;
+type Placeholder = typeof placeholderSymbol;
+
+export { partial };
Index: node_modules/es-toolkit/dist/function/partial.js
===================================================================
--- node_modules/es-toolkit/dist/function/partial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/partial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function partial(func, ...partialArgs) {
+    return partialImpl(func, placeholderSymbol, ...partialArgs);
+}
+function partialImpl(func, placeholder, ...partialArgs) {
+    const partialed = function (...providedArgs) {
+        let providedArgsIndex = 0;
+        const substitutedArgs = partialArgs
+            .slice()
+            .map(arg => (arg === placeholder ? providedArgs[providedArgsIndex++] : arg));
+        const remainingArgs = providedArgs.slice(providedArgsIndex);
+        return func.apply(this, substitutedArgs.concat(remainingArgs));
+    };
+    if (func.prototype) {
+        partialed.prototype = Object.create(func.prototype);
+    }
+    return partialed;
+}
+const placeholderSymbol = Symbol('partial.placeholder');
+partial.placeholder = placeholderSymbol;
+
+exports.partial = partial;
+exports.partialImpl = partialImpl;
Index: node_modules/es-toolkit/dist/function/partial.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/partial.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/partial.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+function partial(func, ...partialArgs) {
+    return partialImpl(func, placeholderSymbol, ...partialArgs);
+}
+function partialImpl(func, placeholder, ...partialArgs) {
+    const partialed = function (...providedArgs) {
+        let providedArgsIndex = 0;
+        const substitutedArgs = partialArgs
+            .slice()
+            .map(arg => (arg === placeholder ? providedArgs[providedArgsIndex++] : arg));
+        const remainingArgs = providedArgs.slice(providedArgsIndex);
+        return func.apply(this, substitutedArgs.concat(remainingArgs));
+    };
+    if (func.prototype) {
+        partialed.prototype = Object.create(func.prototype);
+    }
+    return partialed;
+}
+const placeholderSymbol = Symbol('partial.placeholder');
+partial.placeholder = placeholderSymbol;
+
+export { partial, partialImpl };
Index: node_modules/es-toolkit/dist/function/partialRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/partialRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/partialRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,628 @@
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template R The return type of the function.
+ * @param {() => R} func The function to invoke.
+ * @returns {() => R} Returns the new function.
+ * @example
+ * const getValue = () => 42;
+ * const getValueFunc = partialRight(getValue);
+ * console.log(getValueFunc()); // => 42
+ */
+declare function partialRight<R>(func: () => R): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @returns {() => R} Returns the new partially applied function.
+ * @example
+ * const addOne = (num: number) => num + 1;
+ * const addOneFunc = partialRight(addOne, 1);
+ * console.log(addOneFunc()); // => 2
+ */
+declare function partialRight<T1, R>(func: (arg1: T1) => R, arg1: T1): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1) => R} func The function to partially apply arguments to.
+ * @returns {(arg1: T1) => R} Returns the new partially applied function.
+ * @example
+ * const multiplyBy = (factor: number) => (num: number) => num * factor;
+ * const double = partialRight(multiplyBy(2));
+ * console.log(double(5)); // => 10
+ */
+declare function partialRight<T1, R>(func: (arg1: T1) => R): (arg1: T1) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @returns {() => R} Returns the new partially applied function.
+ * @example
+ * const greet = (name: string) => `Hello, ${name}!`;
+ * const greetJohn = partialRight(greet, 'John');
+ * console.log(greetJohn()); // => 'Hello, John!'
+ */
+declare function partialRight<T1, R>(func: (arg1: T1) => R, arg1: T1): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2) => R} func The function to partially apply arguments to.
+ * @returns {(arg1: T1, arg2: T2) => R} Returns the new partially applied function.
+ * @example
+ * const subtract = (a: number, b: number) => a - b;
+ * const subtractFive = partialRight(subtract);
+ * console.log(subtractFive(10, 5)); // => 5
+ */
+declare function partialRight<T1, T2, R>(func: (arg1: T1, arg2: T2) => R): (arg1: T1, arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @returns {(arg2: T2) => R} Returns the new partially applied function.
+ * @example
+ * const concat = (a: string, b: string) => a + b;
+ * const concatWithHello = partialRight(concat, 'Hello', partialRight.placeholder);
+ * console.log(concatWithHello(' World!')); // => 'Hello World!'
+ */
+declare function partialRight<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, arg1: T1, arg2: Placeholder): (arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @returns {(arg1: T1) => R} Returns the new partially applied function.
+ * @example
+ * const divide = (a: number, b: number) => a / b;
+ * const divideByTwo = partialRight(divide, 2);
+ * console.log(divideByTwo(10)); // => 5
+ */
+declare function partialRight<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, arg2: T2): (arg1: T1) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @returns {() => R} Returns the new partially applied function.
+ * @example
+ * const multiply = (a: number, b: number) => a * b;
+ * const multiplyByThreeAndFour = partialRight(multiply, 3, 4);
+ * console.log(multiplyByThreeAndFour()); // => 12
+ */
+declare function partialRight<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, arg1: T1, arg2: T2): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @returns {(arg1: T1, arg2: T2, arg3: T3) => R} Returns the new partially applied function.
+ * @example
+ * const sumThree = (a: number, b: number, c: number) => a + b + c;
+ * const sumWithFive = partialRight(sumThree);
+ * console.log(sumWithFive(1, 2, 5)); // => 8
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R): (arg1: T1, arg2: T2, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @returns {(arg2: T2, arg3: T3) => R} Returns the new partially applied function.
+ * @example
+ * const formatDate = (day: number, month: number, year: number) => `${day}/${month}/${year}`;
+ * const formatDateWithDay = partialRight(formatDate, 1, partialRight.placeholder, partialRight.placeholder);
+ * console.log(formatDateWithDay(12, 2023)); // => '1/12/2023'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: Placeholder, arg3: Placeholder): (arg2: T2, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @returns {(arg1: T1, arg3: T3) => R} Returns the new partially applied function.
+ * @example
+ * const createUser = (name: string, age: number, country: string) => `${name}, ${age} years old from ${country}`;
+ * const createUserFromUSA = partialRight(createUser, 'USA', partialRight.placeholder);
+ * console.log(createUserFromUSA('John', 30)); // => 'John, 30 years old from USA'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg2: T2, arg3: Placeholder): (arg1: T1, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @returns {(arg3: T3) => R} Returns the new partially applied function.
+ * @example
+ * const logMessage = (level: string, message: string, timestamp: string) => `[${level}] ${message} at ${timestamp}`;
+ * const logError = partialRight(logMessage, 'ERROR', '2023-10-01');
+ * console.log(logError('Something went wrong!')); // => '[ERROR] Something went wrong! at 2023-10-01'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: T2, arg3: Placeholder): (arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @returns {(arg1: T1, arg2: T2) => R} Returns the new partially applied function.
+ * @example
+ * const calculateArea = (length: number, width: number) => length * width;
+ * const calculateAreaWithWidth = partialRight(calculateArea, 5);
+ * console.log(calculateAreaWithWidth(10)); // => 50
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg3: T3): (arg1: T1, arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @returns {(arg2: T2) => R} Returns the new partially applied function.
+ * @example
+ * const formatCurrency = (amount: number, currency: string) => `${amount} ${currency}`;
+ * const formatUSD = partialRight(formatCurrency, 100, partialRight.placeholder);
+ * console.log(formatUSD('USD')); // => '100 USD'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: Placeholder, arg3: T3): (arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @returns {(arg1: T1) => R} Returns the new partially applied function.
+ * @example
+ * const createProfile = (name: string, age: number, country: string) => `${name}, ${age} from ${country}`;
+ * const createProfileFromCanada = partialRight(createProfile, 'Canada', 'John');
+ * console.log(createProfileFromCanada(30)); // => 'John, 30 from Canada'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg2: T2, arg3: T3): (arg1: T1) => R;
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: T2, arg3: T3): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @returns {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} Returns a new function that takes four arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg2: T2, arg3: T3, arg4: T4) => R} Returns a new function that takes the second, third, and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: Placeholder, arg4: Placeholder): (arg2: T2, arg3: T3, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg1: T1, arg3: T3, arg4: T4) => R} Returns a new function that takes the first, third, and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg2: T2, arg3: Placeholder, arg4: Placeholder): (arg1: T1, arg3: T3, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg3: T3, arg4: T4) => R} Returns a new function that takes the third and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: Placeholder, arg4: Placeholder): (arg3: T3, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg1: T1, arg2: T2, arg4: T4) => R} Returns a new function that takes the first, second, and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg3: T3, arg4: Placeholder): (arg1: T1, arg2: T2, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with the first argument, a placeholder for the second argument,
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg2: T2, arg4: T4) => R} Returns a new function that takes the second and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: T3, arg4: Placeholder): (arg2: T2, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg1: T1, arg4: T4) => R} Returns a new function that takes the first and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg2: T2, arg3: T3, arg4: Placeholder): (arg1: T1, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg4: T4) => R} Returns a new function that takes the fourth argument.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: T3, arg4: Placeholder): (arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg1: T1, arg2: T2, arg3: T3) => R} Returns a new function that takes the first, second, and third arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg4: T4): (arg1: T1, arg2: T2, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg2: T2, arg3: T3) => R} Returns a new function that takes the second and third arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: Placeholder, arg4: T4): (arg2: T2, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg1: T1, arg3: T3) => R} Returns a new function that takes the first and third arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg2: T2, arg3: Placeholder, arg4: T4): (arg1: T1, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg3: T3) => R} Returns a new function that takes the third argument.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: Placeholder, arg4: T4): (arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg1: T1, arg2: T2) => R} Returns a new function that takes the first and second arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg3: T3, arg4: T4): (arg1: T1, arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg2: T2) => R} Returns a new function that takes the second argument.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: T3, arg4: T4): (arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg1: T1) => R} Returns a new function that takes the first argument.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg2: T2, arg3: T3, arg4: T4): (arg1: T1) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {() => R} Returns the new partially applied function.
+ * @example
+ * const concatenate = (a: string, b: string, c: string, d: string) => a + b + c + d;
+ * const concatenateHelloWorld = partialRight(concatenate, 'Hello', ' ', 'World', '!');
+ * console.log(concatenateHelloWorld()); // => 'Hello World!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: T3, arg4: T4): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template F The type of the function to partially apply.
+ * @param {F} func The function to partially apply arguments to.
+ * @param {...any[]} args The arguments to be partially applied.
+ * @returns {function(...args: any[]): ReturnType<F>} Returns the new partially applied function.
+ * @example
+ * const log = (...messages: string[]) => console.log(...messages);
+ * const logError = partialRight(log, 'Error:');
+ * logError('Something went wrong!'); // => 'Error: Something went wrong!'
+ */
+declare function partialRight(func: (...args: any[]) => any, ...args: any[]): (...args: any[]) => any;
+declare namespace partialRight {
+    var placeholder: typeof placeholderSymbol;
+}
+declare const placeholderSymbol: unique symbol;
+type Placeholder = typeof placeholderSymbol;
+
+export { partialRight };
Index: node_modules/es-toolkit/dist/function/partialRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/partialRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/partialRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,628 @@
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template R The return type of the function.
+ * @param {() => R} func The function to invoke.
+ * @returns {() => R} Returns the new function.
+ * @example
+ * const getValue = () => 42;
+ * const getValueFunc = partialRight(getValue);
+ * console.log(getValueFunc()); // => 42
+ */
+declare function partialRight<R>(func: () => R): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @returns {() => R} Returns the new partially applied function.
+ * @example
+ * const addOne = (num: number) => num + 1;
+ * const addOneFunc = partialRight(addOne, 1);
+ * console.log(addOneFunc()); // => 2
+ */
+declare function partialRight<T1, R>(func: (arg1: T1) => R, arg1: T1): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1) => R} func The function to partially apply arguments to.
+ * @returns {(arg1: T1) => R} Returns the new partially applied function.
+ * @example
+ * const multiplyBy = (factor: number) => (num: number) => num * factor;
+ * const double = partialRight(multiplyBy(2));
+ * console.log(double(5)); // => 10
+ */
+declare function partialRight<T1, R>(func: (arg1: T1) => R): (arg1: T1) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @returns {() => R} Returns the new partially applied function.
+ * @example
+ * const greet = (name: string) => `Hello, ${name}!`;
+ * const greetJohn = partialRight(greet, 'John');
+ * console.log(greetJohn()); // => 'Hello, John!'
+ */
+declare function partialRight<T1, R>(func: (arg1: T1) => R, arg1: T1): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2) => R} func The function to partially apply arguments to.
+ * @returns {(arg1: T1, arg2: T2) => R} Returns the new partially applied function.
+ * @example
+ * const subtract = (a: number, b: number) => a - b;
+ * const subtractFive = partialRight(subtract);
+ * console.log(subtractFive(10, 5)); // => 5
+ */
+declare function partialRight<T1, T2, R>(func: (arg1: T1, arg2: T2) => R): (arg1: T1, arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @returns {(arg2: T2) => R} Returns the new partially applied function.
+ * @example
+ * const concat = (a: string, b: string) => a + b;
+ * const concatWithHello = partialRight(concat, 'Hello', partialRight.placeholder);
+ * console.log(concatWithHello(' World!')); // => 'Hello World!'
+ */
+declare function partialRight<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, arg1: T1, arg2: Placeholder): (arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @returns {(arg1: T1) => R} Returns the new partially applied function.
+ * @example
+ * const divide = (a: number, b: number) => a / b;
+ * const divideByTwo = partialRight(divide, 2);
+ * console.log(divideByTwo(10)); // => 5
+ */
+declare function partialRight<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, arg2: T2): (arg1: T1) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @returns {() => R} Returns the new partially applied function.
+ * @example
+ * const multiply = (a: number, b: number) => a * b;
+ * const multiplyByThreeAndFour = partialRight(multiply, 3, 4);
+ * console.log(multiplyByThreeAndFour()); // => 12
+ */
+declare function partialRight<T1, T2, R>(func: (arg1: T1, arg2: T2) => R, arg1: T1, arg2: T2): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @returns {(arg1: T1, arg2: T2, arg3: T3) => R} Returns the new partially applied function.
+ * @example
+ * const sumThree = (a: number, b: number, c: number) => a + b + c;
+ * const sumWithFive = partialRight(sumThree);
+ * console.log(sumWithFive(1, 2, 5)); // => 8
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R): (arg1: T1, arg2: T2, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @returns {(arg2: T2, arg3: T3) => R} Returns the new partially applied function.
+ * @example
+ * const formatDate = (day: number, month: number, year: number) => `${day}/${month}/${year}`;
+ * const formatDateWithDay = partialRight(formatDate, 1, partialRight.placeholder, partialRight.placeholder);
+ * console.log(formatDateWithDay(12, 2023)); // => '1/12/2023'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: Placeholder, arg3: Placeholder): (arg2: T2, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @returns {(arg1: T1, arg3: T3) => R} Returns the new partially applied function.
+ * @example
+ * const createUser = (name: string, age: number, country: string) => `${name}, ${age} years old from ${country}`;
+ * const createUserFromUSA = partialRight(createUser, 'USA', partialRight.placeholder);
+ * console.log(createUserFromUSA('John', 30)); // => 'John, 30 years old from USA'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg2: T2, arg3: Placeholder): (arg1: T1, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @returns {(arg3: T3) => R} Returns the new partially applied function.
+ * @example
+ * const logMessage = (level: string, message: string, timestamp: string) => `[${level}] ${message} at ${timestamp}`;
+ * const logError = partialRight(logMessage, 'ERROR', '2023-10-01');
+ * console.log(logError('Something went wrong!')); // => '[ERROR] Something went wrong! at 2023-10-01'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: T2, arg3: Placeholder): (arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @returns {(arg1: T1, arg2: T2) => R} Returns the new partially applied function.
+ * @example
+ * const calculateArea = (length: number, width: number) => length * width;
+ * const calculateAreaWithWidth = partialRight(calculateArea, 5);
+ * console.log(calculateAreaWithWidth(10)); // => 50
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg3: T3): (arg1: T1, arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @returns {(arg2: T2) => R} Returns the new partially applied function.
+ * @example
+ * const formatCurrency = (amount: number, currency: string) => `${amount} ${currency}`;
+ * const formatUSD = partialRight(formatCurrency, 100, partialRight.placeholder);
+ * console.log(formatUSD('USD')); // => '100 USD'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: Placeholder, arg3: T3): (arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @returns {(arg1: T1) => R} Returns the new partially applied function.
+ * @example
+ * const createProfile = (name: string, age: number, country: string) => `${name}, ${age} from ${country}`;
+ * const createProfileFromCanada = partialRight(createProfile, 'Canada', 'John');
+ * console.log(createProfileFromCanada(30)); // => 'John, 30 from Canada'
+ */
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg2: T2, arg3: T3): (arg1: T1) => R;
+declare function partialRight<T1, T2, T3, R>(func: (arg1: T1, arg2: T2, arg3: T3) => R, arg1: T1, arg2: T2, arg3: T3): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @returns {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} Returns a new function that takes four arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg2: T2, arg3: T3, arg4: T4) => R} Returns a new function that takes the second, third, and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: Placeholder, arg4: Placeholder): (arg2: T2, arg3: T3, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg1: T1, arg3: T3, arg4: T4) => R} Returns a new function that takes the first, third, and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg2: T2, arg3: Placeholder, arg4: Placeholder): (arg1: T1, arg3: T3, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg3: T3, arg4: T4) => R} Returns a new function that takes the third and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: Placeholder, arg4: Placeholder): (arg3: T3, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg1: T1, arg2: T2, arg4: T4) => R} Returns a new function that takes the first, second, and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg3: T3, arg4: Placeholder): (arg1: T1, arg2: T2, arg4: T4) => R;
+/**
+ * Creates a function that invokes `func` with the first argument, a placeholder for the second argument,
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg2: T2, arg4: T4) => R} Returns a new function that takes the second and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: T3, arg4: Placeholder): (arg2: T2, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg1: T1, arg4: T4) => R} Returns a new function that takes the first and fourth arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg2: T2, arg3: T3, arg4: Placeholder): (arg1: T1, arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {Placeholder} arg4 The placeholder for the fourth argument.
+ * @returns {(arg4: T4) => R} Returns a new function that takes the fourth argument.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: T3, arg4: Placeholder): (arg4: T4) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg1: T1, arg2: T2, arg3: T3) => R} Returns a new function that takes the first, second, and third arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg4: T4): (arg1: T1, arg2: T2, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg2: T2, arg3: T3) => R} Returns a new function that takes the second and third arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: Placeholder, arg4: T4): (arg2: T2, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg1: T1, arg3: T3) => R} Returns a new function that takes the first and third arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg2: T2, arg3: Placeholder, arg4: T4): (arg1: T1, arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {Placeholder} arg3 The placeholder for the third argument.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg3: T3) => R} Returns a new function that takes the third argument.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: Placeholder, arg4: T4): (arg3: T3) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg1: T1, arg2: T2) => R} Returns a new function that takes the first and second arguments.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg3: T3, arg4: T4): (arg1: T1, arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {Placeholder} arg2 The placeholder for the second argument.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg2: T2) => R} Returns a new function that takes the second argument.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: Placeholder, arg3: T3, arg4: T4): (arg2: T2) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {(arg1: T1) => R} Returns a new function that takes the first argument.
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg2: T2, arg3: T3, arg4: T4): (arg1: T1) => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template T1 The type of the first argument.
+ * @template T2 The type of the second argument.
+ * @template T3 The type of the third argument.
+ * @template T4 The type of the fourth argument.
+ * @template R The return type of the function.
+ * @param {(arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R} func The function to partially apply arguments to.
+ * @param {T1} arg1 The first argument to be partially applied.
+ * @param {T2} arg2 The second argument to be partially applied.
+ * @param {T3} arg3 The third argument to be partially applied.
+ * @param {T4} arg4 The fourth argument to be partially applied.
+ * @returns {() => R} Returns the new partially applied function.
+ * @example
+ * const concatenate = (a: string, b: string, c: string, d: string) => a + b + c + d;
+ * const concatenateHelloWorld = partialRight(concatenate, 'Hello', ' ', 'World', '!');
+ * console.log(concatenateHelloWorld()); // => 'Hello World!'
+ */
+declare function partialRight<T1, T2, T3, T4, R>(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => R, arg1: T1, arg2: T2, arg3: T3, arg4: T4): () => R;
+/**
+ * This method is like `partial` except that partially applied arguments are appended to the arguments it receives.
+ *
+ * The partialRight.placeholder value, which defaults to a `symbol`, may be used as a placeholder for partially applied arguments.
+ *
+ * Note: This method doesn't set the `length` property of partially applied functions.
+ *
+ * @template F The type of the function to partially apply.
+ * @param {F} func The function to partially apply arguments to.
+ * @param {...any[]} args The arguments to be partially applied.
+ * @returns {function(...args: any[]): ReturnType<F>} Returns the new partially applied function.
+ * @example
+ * const log = (...messages: string[]) => console.log(...messages);
+ * const logError = partialRight(log, 'Error:');
+ * logError('Something went wrong!'); // => 'Error: Something went wrong!'
+ */
+declare function partialRight(func: (...args: any[]) => any, ...args: any[]): (...args: any[]) => any;
+declare namespace partialRight {
+    var placeholder: typeof placeholderSymbol;
+}
+declare const placeholderSymbol: unique symbol;
+type Placeholder = typeof placeholderSymbol;
+
+export { partialRight };
Index: node_modules/es-toolkit/dist/function/partialRight.js
===================================================================
--- node_modules/es-toolkit/dist/function/partialRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/partialRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function partialRight(func, ...partialArgs) {
+    return partialRightImpl(func, placeholderSymbol, ...partialArgs);
+}
+function partialRightImpl(func, placeholder, ...partialArgs) {
+    const partialedRight = function (...providedArgs) {
+        const placeholderLength = partialArgs.filter(arg => arg === placeholder).length;
+        const rangeLength = Math.max(providedArgs.length - placeholderLength, 0);
+        const remainingArgs = providedArgs.slice(0, rangeLength);
+        let providedArgsIndex = rangeLength;
+        const substitutedArgs = partialArgs
+            .slice()
+            .map(arg => (arg === placeholder ? providedArgs[providedArgsIndex++] : arg));
+        return func.apply(this, remainingArgs.concat(substitutedArgs));
+    };
+    if (func.prototype) {
+        partialedRight.prototype = Object.create(func.prototype);
+    }
+    return partialedRight;
+}
+const placeholderSymbol = Symbol('partialRight.placeholder');
+partialRight.placeholder = placeholderSymbol;
+
+exports.partialRight = partialRight;
+exports.partialRightImpl = partialRightImpl;
Index: node_modules/es-toolkit/dist/function/partialRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/partialRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/partialRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+function partialRight(func, ...partialArgs) {
+    return partialRightImpl(func, placeholderSymbol, ...partialArgs);
+}
+function partialRightImpl(func, placeholder, ...partialArgs) {
+    const partialedRight = function (...providedArgs) {
+        const placeholderLength = partialArgs.filter(arg => arg === placeholder).length;
+        const rangeLength = Math.max(providedArgs.length - placeholderLength, 0);
+        const remainingArgs = providedArgs.slice(0, rangeLength);
+        let providedArgsIndex = rangeLength;
+        const substitutedArgs = partialArgs
+            .slice()
+            .map(arg => (arg === placeholder ? providedArgs[providedArgsIndex++] : arg));
+        return func.apply(this, remainingArgs.concat(substitutedArgs));
+    };
+    if (func.prototype) {
+        partialedRight.prototype = Object.create(func.prototype);
+    }
+    return partialedRight;
+}
+const placeholderSymbol = Symbol('partialRight.placeholder');
+partialRight.placeholder = placeholderSymbol;
+
+export { partialRight, partialRightImpl };
Index: node_modules/es-toolkit/dist/function/rest.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/rest.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/rest.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Creates a function that transforms the arguments of the provided function `func`.
+ * The transformed arguments are passed to `func` such that the arguments starting from a specified index
+ * are grouped into an array, while the previous arguments are passed as individual elements.
+ *
+ * @template F - The type of the function being transformed.
+ * @param {F} func - The function whose arguments are to be transformed.
+ * @param {number} [startIndex=func.length - 1] - The index from which to start grouping the remaining arguments into an array.
+ *                                            Defaults to `func.length - 1`, grouping all arguments after the last parameter.
+ * @returns {(...args: any[]) => ReturnType<F>} A new function that, when called, returns the result of calling `func` with the transformed arguments.
+ *
+ * The transformed arguments are:
+ * - The first `start` arguments as individual elements.
+ * - The remaining arguments from index `start` onward grouped into an array.
+ * @example
+ * function fn(a, b, c) {
+ *   return [a, b, c];
+ * }
+ *
+ * // Using default start index (func.length - 1, which is 2 in this case)
+ * const transformedFn = rest(fn);
+ * console.log(transformedFn(1, 2, 3, 4)); // [1, 2, [3, 4]]
+ *
+ * // Using start index 1
+ * const transformedFnWithStart = rest(fn, 1);
+ * console.log(transformedFnWithStart(1, 2, 3, 4)); // [1, [2, 3, 4]]
+ *
+ * // With fewer arguments than the start index
+ * console.log(transformedFn(1)); // [1, undefined, []]
+ */
+declare function rest<F extends (...args: any[]) => any>(func: F, startIndex?: number): (...args: any[]) => ReturnType<F>;
+
+export { rest };
Index: node_modules/es-toolkit/dist/function/rest.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/rest.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/rest.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+/**
+ * Creates a function that transforms the arguments of the provided function `func`.
+ * The transformed arguments are passed to `func` such that the arguments starting from a specified index
+ * are grouped into an array, while the previous arguments are passed as individual elements.
+ *
+ * @template F - The type of the function being transformed.
+ * @param {F} func - The function whose arguments are to be transformed.
+ * @param {number} [startIndex=func.length - 1] - The index from which to start grouping the remaining arguments into an array.
+ *                                            Defaults to `func.length - 1`, grouping all arguments after the last parameter.
+ * @returns {(...args: any[]) => ReturnType<F>} A new function that, when called, returns the result of calling `func` with the transformed arguments.
+ *
+ * The transformed arguments are:
+ * - The first `start` arguments as individual elements.
+ * - The remaining arguments from index `start` onward grouped into an array.
+ * @example
+ * function fn(a, b, c) {
+ *   return [a, b, c];
+ * }
+ *
+ * // Using default start index (func.length - 1, which is 2 in this case)
+ * const transformedFn = rest(fn);
+ * console.log(transformedFn(1, 2, 3, 4)); // [1, 2, [3, 4]]
+ *
+ * // Using start index 1
+ * const transformedFnWithStart = rest(fn, 1);
+ * console.log(transformedFnWithStart(1, 2, 3, 4)); // [1, [2, 3, 4]]
+ *
+ * // With fewer arguments than the start index
+ * console.log(transformedFn(1)); // [1, undefined, []]
+ */
+declare function rest<F extends (...args: any[]) => any>(func: F, startIndex?: number): (...args: any[]) => ReturnType<F>;
+
+export { rest };
Index: node_modules/es-toolkit/dist/function/rest.js
===================================================================
--- node_modules/es-toolkit/dist/function/rest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/rest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function rest(func, startIndex = func.length - 1) {
+    return function (...args) {
+        const rest = args.slice(startIndex);
+        const params = args.slice(0, startIndex);
+        while (params.length < startIndex) {
+            params.push(undefined);
+        }
+        return func.apply(this, [...params, rest]);
+    };
+}
+
+exports.rest = rest;
Index: node_modules/es-toolkit/dist/function/rest.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/rest.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/rest.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function rest(func, startIndex = func.length - 1) {
+    return function (...args) {
+        const rest = args.slice(startIndex);
+        const params = args.slice(0, startIndex);
+        while (params.length < startIndex) {
+            params.push(undefined);
+        }
+        return func.apply(this, [...params, rest]);
+    };
+}
+
+export { rest };
Index: node_modules/es-toolkit/dist/function/retry.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/retry.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/retry.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+interface RetryOptions {
+    /**
+     * Delay between retries. Can be a static number (milliseconds) or a function
+     * that computes delay dynamically based on the current attempt.
+     *
+     * @default 0
+     * @example
+     * delay: (attempts) => attempt * 50
+     */
+    delay?: number | ((attempts: number) => number);
+    /**
+     * The number of retries to attempt.
+     * @default Number.POSITIVE_INFINITY
+     */
+    retries?: number;
+    /**
+     * An AbortSignal to cancel the retry operation.
+     */
+    signal?: AbortSignal;
+}
+/**
+ * Retries a function that returns a promise until it resolves successfully.
+ *
+ * @template T
+ * @param {() => Promise<T>} func - The function to retry.
+ * @returns {Promise<T>} A promise that resolves with the value of the successful function call.
+ *
+ * @example
+ * // Basic usage with default retry options
+ * retry(() => fetchData()).then(data => console.log(data));
+ */
+declare function retry<T>(func: () => Promise<T>): Promise<T>;
+/**
+ * Retries a function that returns a promise a specified number of times.
+ *
+ * @template T
+ * @param {() => Promise<T>} func - The function to retry. It should return a promise.
+ * @param {number} retries - The number of retries to attempt. Default is Infinity.
+ * @returns {Promise<T>} A promise that resolves with the value of the successful function call.
+ *
+ * @example
+ * // Retry a function up to 3 times
+ * retry(() => fetchData(), 3).then(data => console.log(data));
+ */
+declare function retry<T>(func: () => Promise<T>, retries: number): Promise<T>;
+/**
+ * Retries a function that returns a promise with specified options.
+ *
+ * @template T
+ * @param {() => Promise<T>} func - The function to retry. It should return a promise.
+ * @param {RetryOptions} options - Options to configure the retry behavior.
+ * @param {number | ((attempts: number) => number)} [options.delay=0] - Delay(milliseconds) between retries.
+ * @param {number} [options.retries=Infinity] - The number of retries to attempt.
+ * @param {AbortSignal} [options.signal] - An AbortSignal to cancel the retry operation.
+ * @returns {Promise<T>} A promise that resolves with the value of the successful function call.
+ *
+ * @example
+ * // Retry a function with a delay of 1000ms between attempts
+ * retry(() => fetchData(), { delay: 1000, times: 5 }).then(data => console.log(data));
+ *
+ * @example
+ * // Retry a function with a fixed delay
+ * retry(() => fetchData(), { delay: 1000, retries: 5 });
+ *
+ * // Retry a function with a delay increasing linearly by 50ms per attempt
+ * retry(() => fetchData(), { delay: (attempts) => attempt * 50, retries: 5 });
+ *
+ * @example
+ * // Retry a function with exponential backoff + jitter (max delay 10 seconds)
+ * retry(() => fetchData(), {
+ *   delay: (attempts) => Math.min(Math.random() * 100 * 2 ** attempts, 10000),
+ *   retries: 5
+ * });
+ */
+declare function retry<T>(func: () => Promise<T>, options: RetryOptions): Promise<T>;
+
+export { retry };
Index: node_modules/es-toolkit/dist/function/retry.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/retry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/retry.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+interface RetryOptions {
+    /**
+     * Delay between retries. Can be a static number (milliseconds) or a function
+     * that computes delay dynamically based on the current attempt.
+     *
+     * @default 0
+     * @example
+     * delay: (attempts) => attempt * 50
+     */
+    delay?: number | ((attempts: number) => number);
+    /**
+     * The number of retries to attempt.
+     * @default Number.POSITIVE_INFINITY
+     */
+    retries?: number;
+    /**
+     * An AbortSignal to cancel the retry operation.
+     */
+    signal?: AbortSignal;
+}
+/**
+ * Retries a function that returns a promise until it resolves successfully.
+ *
+ * @template T
+ * @param {() => Promise<T>} func - The function to retry.
+ * @returns {Promise<T>} A promise that resolves with the value of the successful function call.
+ *
+ * @example
+ * // Basic usage with default retry options
+ * retry(() => fetchData()).then(data => console.log(data));
+ */
+declare function retry<T>(func: () => Promise<T>): Promise<T>;
+/**
+ * Retries a function that returns a promise a specified number of times.
+ *
+ * @template T
+ * @param {() => Promise<T>} func - The function to retry. It should return a promise.
+ * @param {number} retries - The number of retries to attempt. Default is Infinity.
+ * @returns {Promise<T>} A promise that resolves with the value of the successful function call.
+ *
+ * @example
+ * // Retry a function up to 3 times
+ * retry(() => fetchData(), 3).then(data => console.log(data));
+ */
+declare function retry<T>(func: () => Promise<T>, retries: number): Promise<T>;
+/**
+ * Retries a function that returns a promise with specified options.
+ *
+ * @template T
+ * @param {() => Promise<T>} func - The function to retry. It should return a promise.
+ * @param {RetryOptions} options - Options to configure the retry behavior.
+ * @param {number | ((attempts: number) => number)} [options.delay=0] - Delay(milliseconds) between retries.
+ * @param {number} [options.retries=Infinity] - The number of retries to attempt.
+ * @param {AbortSignal} [options.signal] - An AbortSignal to cancel the retry operation.
+ * @returns {Promise<T>} A promise that resolves with the value of the successful function call.
+ *
+ * @example
+ * // Retry a function with a delay of 1000ms between attempts
+ * retry(() => fetchData(), { delay: 1000, times: 5 }).then(data => console.log(data));
+ *
+ * @example
+ * // Retry a function with a fixed delay
+ * retry(() => fetchData(), { delay: 1000, retries: 5 });
+ *
+ * // Retry a function with a delay increasing linearly by 50ms per attempt
+ * retry(() => fetchData(), { delay: (attempts) => attempt * 50, retries: 5 });
+ *
+ * @example
+ * // Retry a function with exponential backoff + jitter (max delay 10 seconds)
+ * retry(() => fetchData(), {
+ *   delay: (attempts) => Math.min(Math.random() * 100 * 2 ** attempts, 10000),
+ *   retries: 5
+ * });
+ */
+declare function retry<T>(func: () => Promise<T>, options: RetryOptions): Promise<T>;
+
+export { retry };
Index: node_modules/es-toolkit/dist/function/retry.js
===================================================================
--- node_modules/es-toolkit/dist/function/retry.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/retry.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const delay = require('../promise/delay.js');
+
+const DEFAULT_DELAY = 0;
+const DEFAULT_RETRIES = Number.POSITIVE_INFINITY;
+async function retry(func, _options) {
+    let delay$1;
+    let retries;
+    let signal;
+    if (typeof _options === 'number') {
+        delay$1 = DEFAULT_DELAY;
+        retries = _options;
+        signal = undefined;
+    }
+    else {
+        delay$1 = _options?.delay ?? DEFAULT_DELAY;
+        retries = _options?.retries ?? DEFAULT_RETRIES;
+        signal = _options?.signal;
+    }
+    let error;
+    for (let attempts = 0; attempts < retries; attempts++) {
+        if (signal?.aborted) {
+            throw error ?? new Error(`The retry operation was aborted due to an abort signal.`);
+        }
+        try {
+            return await func();
+        }
+        catch (err) {
+            error = err;
+            const currentDelay = typeof delay$1 === 'function' ? delay$1(attempts) : delay$1;
+            await delay.delay(currentDelay);
+        }
+    }
+    throw error;
+}
+
+exports.retry = retry;
Index: node_modules/es-toolkit/dist/function/retry.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/retry.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/retry.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import { delay } from '../promise/delay.mjs';
+
+const DEFAULT_DELAY = 0;
+const DEFAULT_RETRIES = Number.POSITIVE_INFINITY;
+async function retry(func, _options) {
+    let delay$1;
+    let retries;
+    let signal;
+    if (typeof _options === 'number') {
+        delay$1 = DEFAULT_DELAY;
+        retries = _options;
+        signal = undefined;
+    }
+    else {
+        delay$1 = _options?.delay ?? DEFAULT_DELAY;
+        retries = _options?.retries ?? DEFAULT_RETRIES;
+        signal = _options?.signal;
+    }
+    let error;
+    for (let attempts = 0; attempts < retries; attempts++) {
+        if (signal?.aborted) {
+            throw error ?? new Error(`The retry operation was aborted due to an abort signal.`);
+        }
+        try {
+            return await func();
+        }
+        catch (err) {
+            error = err;
+            const currentDelay = typeof delay$1 === 'function' ? delay$1(attempts) : delay$1;
+            await delay(currentDelay);
+        }
+    }
+    throw error;
+}
+
+export { retry };
Index: node_modules/es-toolkit/dist/function/spread.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/spread.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/spread.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Creates a new function that spreads elements of an array argument into individual arguments
+ * for the original function.
+ *
+ * @template F - A function type with any number of parameters and any return type.
+ * @param {F} func - The function to be transformed. It can be any function with any number of arguments.
+ * @returns {(argsArr: Parameters<F>) => ReturnType<F>} - A new function that takes an array of arguments and returns the result of calling the original function with those arguments.
+ *
+ * @example
+ * function add(a, b) {
+ *   return a + b;
+ * }
+ *
+ * const spreadAdd = spread(add);
+ * console.log(spreadAdd([1, 2])); // Output: 3
+ */
+declare function spread<F extends (...args: any[]) => any>(func: F): (argsArr: Parameters<F>) => ReturnType<F>;
+
+export { spread };
Index: node_modules/es-toolkit/dist/function/spread.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/spread.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/spread.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Creates a new function that spreads elements of an array argument into individual arguments
+ * for the original function.
+ *
+ * @template F - A function type with any number of parameters and any return type.
+ * @param {F} func - The function to be transformed. It can be any function with any number of arguments.
+ * @returns {(argsArr: Parameters<F>) => ReturnType<F>} - A new function that takes an array of arguments and returns the result of calling the original function with those arguments.
+ *
+ * @example
+ * function add(a, b) {
+ *   return a + b;
+ * }
+ *
+ * const spreadAdd = spread(add);
+ * console.log(spreadAdd([1, 2])); // Output: 3
+ */
+declare function spread<F extends (...args: any[]) => any>(func: F): (argsArr: Parameters<F>) => ReturnType<F>;
+
+export { spread };
Index: node_modules/es-toolkit/dist/function/spread.js
===================================================================
--- node_modules/es-toolkit/dist/function/spread.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/spread.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function spread(func) {
+    return function (argsArr) {
+        return func.apply(this, argsArr);
+    };
+}
+
+exports.spread = spread;
Index: node_modules/es-toolkit/dist/function/spread.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/spread.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/spread.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+function spread(func) {
+    return function (argsArr) {
+        return func.apply(this, argsArr);
+    };
+}
+
+export { spread };
Index: node_modules/es-toolkit/dist/function/throttle.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/throttle.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/throttle.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+interface ThrottleOptions {
+    /**
+     * An optional AbortSignal to cancel the debounced function.
+     */
+    signal?: AbortSignal;
+    /**
+     * An optional array specifying whether the function should be invoked on the leading edge, trailing edge, or both.
+     * If `edges` includes "leading", the function will be invoked at the start of the delay period.
+     * If `edges` includes "trailing", the function will be invoked at the end of the delay period.
+     * If both "leading" and "trailing" are included, the function will be invoked at both the start and end of the delay period.
+     * @default ["leading", "trailing"]
+     */
+    edges?: Array<'leading' | 'trailing'>;
+}
+interface ThrottledFunction<F extends (...args: any[]) => void> {
+    (...args: Parameters<F>): void;
+    cancel: () => void;
+    flush: () => void;
+}
+/**
+ * Creates a throttled function that only invokes the provided function at most once
+ * per every `throttleMs` milliseconds. Subsequent calls to the throttled function
+ * within the wait time will not trigger the execution of the original function.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to throttle.
+ * @param {number} throttleMs - The number of milliseconds to throttle executions to.
+ * @returns {(...args: Parameters<F>) => void} A new throttled function that accepts the same parameters as the original function.
+ *
+ * @example
+ * const throttledFunction = throttle(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' immediately
+ * throttledFunction();
+ *
+ * // Will not log anything as it is within the throttle time
+ * throttledFunction();
+ *
+ * // After 1 second
+ * setTimeout(() => {
+ *   throttledFunction(); // Will log 'Function executed'
+ * }, 1000);
+ */
+declare function throttle<F extends (...args: any[]) => void>(func: F, throttleMs: number, { signal, edges }?: ThrottleOptions): ThrottledFunction<F>;
+
+export { type ThrottledFunction, throttle };
Index: node_modules/es-toolkit/dist/function/throttle.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/throttle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/throttle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+interface ThrottleOptions {
+    /**
+     * An optional AbortSignal to cancel the debounced function.
+     */
+    signal?: AbortSignal;
+    /**
+     * An optional array specifying whether the function should be invoked on the leading edge, trailing edge, or both.
+     * If `edges` includes "leading", the function will be invoked at the start of the delay period.
+     * If `edges` includes "trailing", the function will be invoked at the end of the delay period.
+     * If both "leading" and "trailing" are included, the function will be invoked at both the start and end of the delay period.
+     * @default ["leading", "trailing"]
+     */
+    edges?: Array<'leading' | 'trailing'>;
+}
+interface ThrottledFunction<F extends (...args: any[]) => void> {
+    (...args: Parameters<F>): void;
+    cancel: () => void;
+    flush: () => void;
+}
+/**
+ * Creates a throttled function that only invokes the provided function at most once
+ * per every `throttleMs` milliseconds. Subsequent calls to the throttled function
+ * within the wait time will not trigger the execution of the original function.
+ *
+ * @template F - The type of function.
+ * @param {F} func - The function to throttle.
+ * @param {number} throttleMs - The number of milliseconds to throttle executions to.
+ * @returns {(...args: Parameters<F>) => void} A new throttled function that accepts the same parameters as the original function.
+ *
+ * @example
+ * const throttledFunction = throttle(() => {
+ *   console.log('Function executed');
+ * }, 1000);
+ *
+ * // Will log 'Function executed' immediately
+ * throttledFunction();
+ *
+ * // Will not log anything as it is within the throttle time
+ * throttledFunction();
+ *
+ * // After 1 second
+ * setTimeout(() => {
+ *   throttledFunction(); // Will log 'Function executed'
+ * }, 1000);
+ */
+declare function throttle<F extends (...args: any[]) => void>(func: F, throttleMs: number, { signal, edges }?: ThrottleOptions): ThrottledFunction<F>;
+
+export { type ThrottledFunction, throttle };
Index: node_modules/es-toolkit/dist/function/throttle.js
===================================================================
--- node_modules/es-toolkit/dist/function/throttle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/throttle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const debounce = require('./debounce.js');
+
+function throttle(func, throttleMs, { signal, edges = ['leading', 'trailing'] } = {}) {
+    let pendingAt = null;
+    const debounced = debounce.debounce(func, throttleMs, { signal, edges });
+    const throttled = function (...args) {
+        if (pendingAt == null) {
+            pendingAt = Date.now();
+        }
+        else {
+            if (Date.now() - pendingAt >= throttleMs) {
+                pendingAt = Date.now();
+                debounced.cancel();
+            }
+        }
+        debounced(...args);
+    };
+    throttled.cancel = debounced.cancel;
+    throttled.flush = debounced.flush;
+    return throttled;
+}
+
+exports.throttle = throttle;
Index: node_modules/es-toolkit/dist/function/throttle.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/throttle.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/throttle.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { debounce } from './debounce.mjs';
+
+function throttle(func, throttleMs, { signal, edges = ['leading', 'trailing'] } = {}) {
+    let pendingAt = null;
+    const debounced = debounce(func, throttleMs, { signal, edges });
+    const throttled = function (...args) {
+        if (pendingAt == null) {
+            pendingAt = Date.now();
+        }
+        else {
+            if (Date.now() - pendingAt >= throttleMs) {
+                pendingAt = Date.now();
+                debounced.cancel();
+            }
+        }
+        debounced(...args);
+    };
+    throttled.cancel = debounced.cancel;
+    throttled.flush = debounced.flush;
+    return throttled;
+}
+
+export { throttle };
Index: node_modules/es-toolkit/dist/function/unary.d.mts
===================================================================
--- node_modules/es-toolkit/dist/function/unary.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/unary.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Creates a function that accepts up to one argument, ignoring any additional arguments.
+ *
+ * @template F - The type of the function.
+ * @param {F} func - The function to cap arguments for.
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new capped function.
+ *
+ * @example
+ * function fn(a, b, c) {
+ *   console.log(arguments);
+ * }
+ *
+ * unary(fn)(1, 2, 3); // [Arguments] { '0': 1 }
+ */
+declare function unary<F extends (...args: any[]) => any>(func: F): (...args: any[]) => ReturnType<F>;
+
+export { unary };
Index: node_modules/es-toolkit/dist/function/unary.d.ts
===================================================================
--- node_modules/es-toolkit/dist/function/unary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/unary.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Creates a function that accepts up to one argument, ignoring any additional arguments.
+ *
+ * @template F - The type of the function.
+ * @param {F} func - The function to cap arguments for.
+ * @returns {(...args: any[]) => ReturnType<F>} Returns the new capped function.
+ *
+ * @example
+ * function fn(a, b, c) {
+ *   console.log(arguments);
+ * }
+ *
+ * unary(fn)(1, 2, 3); // [Arguments] { '0': 1 }
+ */
+declare function unary<F extends (...args: any[]) => any>(func: F): (...args: any[]) => ReturnType<F>;
+
+export { unary };
Index: node_modules/es-toolkit/dist/function/unary.js
===================================================================
--- node_modules/es-toolkit/dist/function/unary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/unary.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const ary = require('./ary.js');
+
+function unary(func) {
+    return ary.ary(func, 1);
+}
+
+exports.unary = unary;
Index: node_modules/es-toolkit/dist/function/unary.mjs
===================================================================
--- node_modules/es-toolkit/dist/function/unary.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/function/unary.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { ary } from './ary.mjs';
+
+function unary(func) {
+    return ary(func, 1);
+}
+
+export { unary };
Index: node_modules/es-toolkit/dist/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,172 @@
+export { at } from './array/at.mjs';
+export { chunk } from './array/chunk.mjs';
+export { compact } from './array/compact.mjs';
+export { countBy } from './array/countBy.mjs';
+export { difference } from './array/difference.mjs';
+export { differenceBy } from './array/differenceBy.mjs';
+export { differenceWith } from './array/differenceWith.mjs';
+export { drop } from './array/drop.mjs';
+export { dropRight } from './array/dropRight.mjs';
+export { dropRightWhile } from './array/dropRightWhile.mjs';
+export { dropWhile } from './array/dropWhile.mjs';
+export { fill } from './array/fill.mjs';
+export { flatMap } from './array/flatMap.mjs';
+export { flatMapDeep } from './array/flatMapDeep.mjs';
+export { flatten } from './array/flatten.mjs';
+export { flattenDeep } from './array/flattenDeep.mjs';
+export { forEachRight } from './array/forEachRight.mjs';
+export { groupBy } from './array/groupBy.mjs';
+export { head } from './array/head.mjs';
+export { initial } from './array/initial.mjs';
+export { intersection } from './array/intersection.mjs';
+export { intersectionBy } from './array/intersectionBy.mjs';
+export { intersectionWith } from './array/intersectionWith.mjs';
+export { isSubset } from './array/isSubset.mjs';
+export { isSubsetWith } from './array/isSubsetWith.mjs';
+export { keyBy } from './array/keyBy.mjs';
+export { last } from './array/last.mjs';
+export { maxBy } from './array/maxBy.mjs';
+export { minBy } from './array/minBy.mjs';
+export { orderBy } from './array/orderBy.mjs';
+export { partition } from './array/partition.mjs';
+export { pull } from './array/pull.mjs';
+export { pullAt } from './array/pullAt.mjs';
+export { remove } from './array/remove.mjs';
+export { sample } from './array/sample.mjs';
+export { sampleSize } from './array/sampleSize.mjs';
+export { shuffle } from './array/shuffle.mjs';
+export { sortBy } from './array/sortBy.mjs';
+export { tail } from './array/tail.mjs';
+export { take } from './array/take.mjs';
+export { takeRight } from './array/takeRight.mjs';
+export { takeRightWhile } from './array/takeRightWhile.mjs';
+export { takeWhile } from './array/takeWhile.mjs';
+export { toFilled } from './array/toFilled.mjs';
+export { union } from './array/union.mjs';
+export { unionBy } from './array/unionBy.mjs';
+export { unionWith } from './array/unionWith.mjs';
+export { uniq } from './array/uniq.mjs';
+export { uniqBy } from './array/uniqBy.mjs';
+export { uniqWith } from './array/uniqWith.mjs';
+export { unzip } from './array/unzip.mjs';
+export { unzipWith } from './array/unzipWith.mjs';
+export { windowed } from './array/windowed.mjs';
+export { without } from './array/without.mjs';
+export { xor } from './array/xor.mjs';
+export { xorBy } from './array/xorBy.mjs';
+export { xorWith } from './array/xorWith.mjs';
+export { zip } from './array/zip.mjs';
+export { zipObject } from './array/zipObject.mjs';
+export { zipWith } from './array/zipWith.mjs';
+export { AbortError } from './error/AbortError.mjs';
+export { TimeoutError } from './error/TimeoutError.mjs';
+export { after } from './function/after.mjs';
+export { ary } from './function/ary.mjs';
+export { asyncNoop } from './function/asyncNoop.mjs';
+export { before } from './function/before.mjs';
+export { curry } from './function/curry.mjs';
+export { curryRight } from './function/curryRight.mjs';
+export { DebouncedFunction, debounce } from './function/debounce.mjs';
+export { flow } from './function/flow.mjs';
+export { flowRight } from './function/flowRight.mjs';
+export { identity } from './function/identity.mjs';
+export { MemoizeCache, memoize } from './function/memoize.mjs';
+export { negate } from './function/negate.mjs';
+export { noop } from './function/noop.mjs';
+export { once } from './function/once.mjs';
+export { partial } from './function/partial.mjs';
+export { partialRight } from './function/partialRight.mjs';
+export { rest } from './function/rest.mjs';
+export { retry } from './function/retry.mjs';
+export { spread } from './function/spread.mjs';
+export { ThrottledFunction, throttle } from './function/throttle.mjs';
+export { unary } from './function/unary.mjs';
+export { clamp } from './math/clamp.mjs';
+export { inRange } from './math/inRange.mjs';
+export { mean } from './math/mean.mjs';
+export { meanBy } from './math/meanBy.mjs';
+export { median } from './math/median.mjs';
+export { medianBy } from './math/medianBy.mjs';
+export { random } from './math/random.mjs';
+export { randomInt } from './math/randomInt.mjs';
+export { range } from './math/range.mjs';
+export { rangeRight } from './math/rangeRight.mjs';
+export { round } from './math/round.mjs';
+export { sum } from './math/sum.mjs';
+export { sumBy } from './math/sumBy.mjs';
+export { clone } from './object/clone.mjs';
+export { cloneDeep } from './object/cloneDeep.mjs';
+export { cloneDeepWith } from './object/cloneDeepWith.mjs';
+export { findKey } from './object/findKey.mjs';
+export { flattenObject } from './object/flattenObject.mjs';
+export { invert } from './object/invert.mjs';
+export { mapKeys } from './object/mapKeys.mjs';
+export { mapValues } from './object/mapValues.mjs';
+export { merge } from './object/merge.mjs';
+export { mergeWith } from './object/mergeWith.mjs';
+export { omit } from './object/omit.mjs';
+export { omitBy } from './object/omitBy.mjs';
+export { pick } from './object/pick.mjs';
+export { pickBy } from './object/pickBy.mjs';
+export { toCamelCaseKeys } from './object/toCamelCaseKeys.mjs';
+export { toMerged } from './object/toMerged.mjs';
+export { toSnakeCaseKeys } from './object/toSnakeCaseKeys.mjs';
+export { isArrayBuffer } from './predicate/isArrayBuffer.mjs';
+export { isBlob } from './predicate/isBlob.mjs';
+export { isBoolean } from './predicate/isBoolean.mjs';
+export { isBrowser } from './predicate/isBrowser.mjs';
+export { isBuffer } from './predicate/isBuffer.mjs';
+export { isDate } from './predicate/isDate.mjs';
+export { isEqual } from './predicate/isEqual.mjs';
+export { isEqualWith } from './predicate/isEqualWith.mjs';
+export { isError } from './predicate/isError.mjs';
+export { isFile } from './predicate/isFile.mjs';
+export { isFunction } from './predicate/isFunction.mjs';
+export { isJSON } from './predicate/isJSON.mjs';
+export { isJSONArray, isJSONObject, isJSONValue } from './predicate/isJSONValue.mjs';
+export { isLength } from './predicate/isLength.mjs';
+export { isMap } from './predicate/isMap.mjs';
+export { isNil } from './predicate/isNil.mjs';
+export { isNode } from './predicate/isNode.mjs';
+export { isNotNil } from './predicate/isNotNil.mjs';
+export { isNull } from './predicate/isNull.mjs';
+export { isPlainObject } from './predicate/isPlainObject.mjs';
+export { isPrimitive } from './predicate/isPrimitive.mjs';
+export { isPromise } from './predicate/isPromise.mjs';
+export { isRegExp } from './predicate/isRegExp.mjs';
+export { isSet } from './predicate/isSet.mjs';
+export { isString } from './predicate/isString.mjs';
+export { isSymbol } from './predicate/isSymbol.mjs';
+export { isTypedArray } from './predicate/isTypedArray.mjs';
+export { isUndefined } from './predicate/isUndefined.mjs';
+export { isWeakMap } from './predicate/isWeakMap.mjs';
+export { isWeakSet } from './predicate/isWeakSet.mjs';
+export { delay } from './promise/delay.mjs';
+export { Mutex } from './promise/mutex.mjs';
+export { Semaphore } from './promise/semaphore.mjs';
+export { timeout } from './promise/timeout.mjs';
+export { withTimeout } from './promise/withTimeout.mjs';
+export { camelCase } from './string/camelCase.mjs';
+export { capitalize } from './string/capitalize.mjs';
+export { constantCase } from './string/constantCase.mjs';
+export { deburr } from './string/deburr.mjs';
+export { escape } from './string/escape.mjs';
+export { escapeRegExp } from './string/escapeRegExp.mjs';
+export { kebabCase } from './string/kebabCase.mjs';
+export { lowerCase } from './string/lowerCase.mjs';
+export { lowerFirst } from './string/lowerFirst.mjs';
+export { pad } from './string/pad.mjs';
+export { pascalCase } from './string/pascalCase.mjs';
+export { reverseString } from './string/reverseString.mjs';
+export { snakeCase } from './string/snakeCase.mjs';
+export { startCase } from './string/startCase.mjs';
+export { trim } from './string/trim.mjs';
+export { trimEnd } from './string/trimEnd.mjs';
+export { trimStart } from './string/trimStart.mjs';
+export { unescape } from './string/unescape.mjs';
+export { upperCase } from './string/upperCase.mjs';
+export { upperFirst } from './string/upperFirst.mjs';
+export { words } from './string/words.mjs';
+export { attempt } from './util/attempt.mjs';
+export { attemptAsync } from './util/attemptAsync.mjs';
+export { invariant as assert, invariant } from './util/invariant.mjs';
Index: node_modules/es-toolkit/dist/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,172 @@
+export { at } from './array/at.js';
+export { chunk } from './array/chunk.js';
+export { compact } from './array/compact.js';
+export { countBy } from './array/countBy.js';
+export { difference } from './array/difference.js';
+export { differenceBy } from './array/differenceBy.js';
+export { differenceWith } from './array/differenceWith.js';
+export { drop } from './array/drop.js';
+export { dropRight } from './array/dropRight.js';
+export { dropRightWhile } from './array/dropRightWhile.js';
+export { dropWhile } from './array/dropWhile.js';
+export { fill } from './array/fill.js';
+export { flatMap } from './array/flatMap.js';
+export { flatMapDeep } from './array/flatMapDeep.js';
+export { flatten } from './array/flatten.js';
+export { flattenDeep } from './array/flattenDeep.js';
+export { forEachRight } from './array/forEachRight.js';
+export { groupBy } from './array/groupBy.js';
+export { head } from './array/head.js';
+export { initial } from './array/initial.js';
+export { intersection } from './array/intersection.js';
+export { intersectionBy } from './array/intersectionBy.js';
+export { intersectionWith } from './array/intersectionWith.js';
+export { isSubset } from './array/isSubset.js';
+export { isSubsetWith } from './array/isSubsetWith.js';
+export { keyBy } from './array/keyBy.js';
+export { last } from './array/last.js';
+export { maxBy } from './array/maxBy.js';
+export { minBy } from './array/minBy.js';
+export { orderBy } from './array/orderBy.js';
+export { partition } from './array/partition.js';
+export { pull } from './array/pull.js';
+export { pullAt } from './array/pullAt.js';
+export { remove } from './array/remove.js';
+export { sample } from './array/sample.js';
+export { sampleSize } from './array/sampleSize.js';
+export { shuffle } from './array/shuffle.js';
+export { sortBy } from './array/sortBy.js';
+export { tail } from './array/tail.js';
+export { take } from './array/take.js';
+export { takeRight } from './array/takeRight.js';
+export { takeRightWhile } from './array/takeRightWhile.js';
+export { takeWhile } from './array/takeWhile.js';
+export { toFilled } from './array/toFilled.js';
+export { union } from './array/union.js';
+export { unionBy } from './array/unionBy.js';
+export { unionWith } from './array/unionWith.js';
+export { uniq } from './array/uniq.js';
+export { uniqBy } from './array/uniqBy.js';
+export { uniqWith } from './array/uniqWith.js';
+export { unzip } from './array/unzip.js';
+export { unzipWith } from './array/unzipWith.js';
+export { windowed } from './array/windowed.js';
+export { without } from './array/without.js';
+export { xor } from './array/xor.js';
+export { xorBy } from './array/xorBy.js';
+export { xorWith } from './array/xorWith.js';
+export { zip } from './array/zip.js';
+export { zipObject } from './array/zipObject.js';
+export { zipWith } from './array/zipWith.js';
+export { AbortError } from './error/AbortError.js';
+export { TimeoutError } from './error/TimeoutError.js';
+export { after } from './function/after.js';
+export { ary } from './function/ary.js';
+export { asyncNoop } from './function/asyncNoop.js';
+export { before } from './function/before.js';
+export { curry } from './function/curry.js';
+export { curryRight } from './function/curryRight.js';
+export { DebouncedFunction, debounce } from './function/debounce.js';
+export { flow } from './function/flow.js';
+export { flowRight } from './function/flowRight.js';
+export { identity } from './function/identity.js';
+export { MemoizeCache, memoize } from './function/memoize.js';
+export { negate } from './function/negate.js';
+export { noop } from './function/noop.js';
+export { once } from './function/once.js';
+export { partial } from './function/partial.js';
+export { partialRight } from './function/partialRight.js';
+export { rest } from './function/rest.js';
+export { retry } from './function/retry.js';
+export { spread } from './function/spread.js';
+export { ThrottledFunction, throttle } from './function/throttle.js';
+export { unary } from './function/unary.js';
+export { clamp } from './math/clamp.js';
+export { inRange } from './math/inRange.js';
+export { mean } from './math/mean.js';
+export { meanBy } from './math/meanBy.js';
+export { median } from './math/median.js';
+export { medianBy } from './math/medianBy.js';
+export { random } from './math/random.js';
+export { randomInt } from './math/randomInt.js';
+export { range } from './math/range.js';
+export { rangeRight } from './math/rangeRight.js';
+export { round } from './math/round.js';
+export { sum } from './math/sum.js';
+export { sumBy } from './math/sumBy.js';
+export { clone } from './object/clone.js';
+export { cloneDeep } from './object/cloneDeep.js';
+export { cloneDeepWith } from './object/cloneDeepWith.js';
+export { findKey } from './object/findKey.js';
+export { flattenObject } from './object/flattenObject.js';
+export { invert } from './object/invert.js';
+export { mapKeys } from './object/mapKeys.js';
+export { mapValues } from './object/mapValues.js';
+export { merge } from './object/merge.js';
+export { mergeWith } from './object/mergeWith.js';
+export { omit } from './object/omit.js';
+export { omitBy } from './object/omitBy.js';
+export { pick } from './object/pick.js';
+export { pickBy } from './object/pickBy.js';
+export { toCamelCaseKeys } from './object/toCamelCaseKeys.js';
+export { toMerged } from './object/toMerged.js';
+export { toSnakeCaseKeys } from './object/toSnakeCaseKeys.js';
+export { isArrayBuffer } from './predicate/isArrayBuffer.js';
+export { isBlob } from './predicate/isBlob.js';
+export { isBoolean } from './predicate/isBoolean.js';
+export { isBrowser } from './predicate/isBrowser.js';
+export { isBuffer } from './predicate/isBuffer.js';
+export { isDate } from './predicate/isDate.js';
+export { isEqual } from './predicate/isEqual.js';
+export { isEqualWith } from './predicate/isEqualWith.js';
+export { isError } from './predicate/isError.js';
+export { isFile } from './predicate/isFile.js';
+export { isFunction } from './predicate/isFunction.js';
+export { isJSON } from './predicate/isJSON.js';
+export { isJSONArray, isJSONObject, isJSONValue } from './predicate/isJSONValue.js';
+export { isLength } from './predicate/isLength.js';
+export { isMap } from './predicate/isMap.js';
+export { isNil } from './predicate/isNil.js';
+export { isNode } from './predicate/isNode.js';
+export { isNotNil } from './predicate/isNotNil.js';
+export { isNull } from './predicate/isNull.js';
+export { isPlainObject } from './predicate/isPlainObject.js';
+export { isPrimitive } from './predicate/isPrimitive.js';
+export { isPromise } from './predicate/isPromise.js';
+export { isRegExp } from './predicate/isRegExp.js';
+export { isSet } from './predicate/isSet.js';
+export { isString } from './predicate/isString.js';
+export { isSymbol } from './predicate/isSymbol.js';
+export { isTypedArray } from './predicate/isTypedArray.js';
+export { isUndefined } from './predicate/isUndefined.js';
+export { isWeakMap } from './predicate/isWeakMap.js';
+export { isWeakSet } from './predicate/isWeakSet.js';
+export { delay } from './promise/delay.js';
+export { Mutex } from './promise/mutex.js';
+export { Semaphore } from './promise/semaphore.js';
+export { timeout } from './promise/timeout.js';
+export { withTimeout } from './promise/withTimeout.js';
+export { camelCase } from './string/camelCase.js';
+export { capitalize } from './string/capitalize.js';
+export { constantCase } from './string/constantCase.js';
+export { deburr } from './string/deburr.js';
+export { escape } from './string/escape.js';
+export { escapeRegExp } from './string/escapeRegExp.js';
+export { kebabCase } from './string/kebabCase.js';
+export { lowerCase } from './string/lowerCase.js';
+export { lowerFirst } from './string/lowerFirst.js';
+export { pad } from './string/pad.js';
+export { pascalCase } from './string/pascalCase.js';
+export { reverseString } from './string/reverseString.js';
+export { snakeCase } from './string/snakeCase.js';
+export { startCase } from './string/startCase.js';
+export { trim } from './string/trim.js';
+export { trimEnd } from './string/trimEnd.js';
+export { trimStart } from './string/trimStart.js';
+export { unescape } from './string/unescape.js';
+export { upperCase } from './string/upperCase.js';
+export { upperFirst } from './string/upperFirst.js';
+export { words } from './string/words.js';
+export { attempt } from './util/attempt.js';
+export { attemptAsync } from './util/attemptAsync.js';
+export { invariant as assert, invariant } from './util/invariant.js';
Index: node_modules/es-toolkit/dist/index.js
===================================================================
--- node_modules/es-toolkit/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,354 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const at = require('./array/at.js');
+const chunk = require('./array/chunk.js');
+const compact = require('./array/compact.js');
+const countBy = require('./array/countBy.js');
+const difference = require('./array/difference.js');
+const differenceBy = require('./array/differenceBy.js');
+const differenceWith = require('./array/differenceWith.js');
+const drop = require('./array/drop.js');
+const dropRight = require('./array/dropRight.js');
+const dropRightWhile = require('./array/dropRightWhile.js');
+const dropWhile = require('./array/dropWhile.js');
+const fill = require('./array/fill.js');
+const flatMap = require('./array/flatMap.js');
+const flatMapDeep = require('./array/flatMapDeep.js');
+const flatten = require('./array/flatten.js');
+const flattenDeep = require('./array/flattenDeep.js');
+const forEachRight = require('./array/forEachRight.js');
+const groupBy = require('./array/groupBy.js');
+const head = require('./array/head.js');
+const initial = require('./array/initial.js');
+const intersection = require('./array/intersection.js');
+const intersectionBy = require('./array/intersectionBy.js');
+const intersectionWith = require('./array/intersectionWith.js');
+const isSubset = require('./array/isSubset.js');
+const isSubsetWith = require('./array/isSubsetWith.js');
+const keyBy = require('./array/keyBy.js');
+const last = require('./array/last.js');
+const maxBy = require('./array/maxBy.js');
+const minBy = require('./array/minBy.js');
+const orderBy = require('./array/orderBy.js');
+const partition = require('./array/partition.js');
+const pull = require('./array/pull.js');
+const pullAt = require('./array/pullAt.js');
+const remove = require('./array/remove.js');
+const sample = require('./array/sample.js');
+const sampleSize = require('./array/sampleSize.js');
+const shuffle = require('./array/shuffle.js');
+const sortBy = require('./array/sortBy.js');
+const tail = require('./array/tail.js');
+const take = require('./array/take.js');
+const takeRight = require('./array/takeRight.js');
+const takeRightWhile = require('./array/takeRightWhile.js');
+const takeWhile = require('./array/takeWhile.js');
+const toFilled = require('./array/toFilled.js');
+const union = require('./array/union.js');
+const unionBy = require('./array/unionBy.js');
+const unionWith = require('./array/unionWith.js');
+const uniq = require('./array/uniq.js');
+const uniqBy = require('./array/uniqBy.js');
+const uniqWith = require('./array/uniqWith.js');
+const unzip = require('./array/unzip.js');
+const unzipWith = require('./array/unzipWith.js');
+const windowed = require('./array/windowed.js');
+const without = require('./array/without.js');
+const xor = require('./array/xor.js');
+const xorBy = require('./array/xorBy.js');
+const xorWith = require('./array/xorWith.js');
+const zip = require('./array/zip.js');
+const zipObject = require('./array/zipObject.js');
+const zipWith = require('./array/zipWith.js');
+const AbortError = require('./error/AbortError.js');
+const TimeoutError = require('./error/TimeoutError.js');
+const after = require('./function/after.js');
+const ary = require('./function/ary.js');
+const asyncNoop = require('./function/asyncNoop.js');
+const before = require('./function/before.js');
+const curry = require('./function/curry.js');
+const curryRight = require('./function/curryRight.js');
+const debounce = require('./function/debounce.js');
+const flow = require('./function/flow.js');
+const flowRight = require('./function/flowRight.js');
+const identity = require('./function/identity.js');
+const memoize = require('./function/memoize.js');
+const negate = require('./function/negate.js');
+const noop = require('./function/noop.js');
+const once = require('./function/once.js');
+const partial = require('./function/partial.js');
+const partialRight = require('./function/partialRight.js');
+const rest = require('./function/rest.js');
+const retry = require('./function/retry.js');
+const spread = require('./function/spread.js');
+const throttle = require('./function/throttle.js');
+const unary = require('./function/unary.js');
+const clamp = require('./math/clamp.js');
+const inRange = require('./math/inRange.js');
+const mean = require('./math/mean.js');
+const meanBy = require('./math/meanBy.js');
+const median = require('./math/median.js');
+const medianBy = require('./math/medianBy.js');
+const random = require('./math/random.js');
+const randomInt = require('./math/randomInt.js');
+const range = require('./math/range.js');
+const rangeRight = require('./math/rangeRight.js');
+const round = require('./math/round.js');
+const sum = require('./math/sum.js');
+const sumBy = require('./math/sumBy.js');
+const clone = require('./object/clone.js');
+const cloneDeep = require('./object/cloneDeep.js');
+const cloneDeepWith = require('./object/cloneDeepWith.js');
+const findKey = require('./object/findKey.js');
+const flattenObject = require('./object/flattenObject.js');
+const invert = require('./object/invert.js');
+const mapKeys = require('./object/mapKeys.js');
+const mapValues = require('./object/mapValues.js');
+const merge = require('./object/merge.js');
+const mergeWith = require('./object/mergeWith.js');
+const omit = require('./object/omit.js');
+const omitBy = require('./object/omitBy.js');
+const pick = require('./object/pick.js');
+const pickBy = require('./object/pickBy.js');
+const toCamelCaseKeys = require('./object/toCamelCaseKeys.js');
+const toMerged = require('./object/toMerged.js');
+const toSnakeCaseKeys = require('./object/toSnakeCaseKeys.js');
+const isArrayBuffer = require('./predicate/isArrayBuffer.js');
+const isBlob = require('./predicate/isBlob.js');
+const isBoolean = require('./predicate/isBoolean.js');
+const isBrowser = require('./predicate/isBrowser.js');
+const isBuffer = require('./predicate/isBuffer.js');
+const isDate = require('./predicate/isDate.js');
+const isEqual = require('./predicate/isEqual.js');
+const isEqualWith = require('./predicate/isEqualWith.js');
+const isError = require('./predicate/isError.js');
+const isFile = require('./predicate/isFile.js');
+const isFunction = require('./predicate/isFunction.js');
+const isJSON = require('./predicate/isJSON.js');
+const isJSONValue = require('./predicate/isJSONValue.js');
+const isLength = require('./predicate/isLength.js');
+const isMap = require('./predicate/isMap.js');
+const isNil = require('./predicate/isNil.js');
+const isNode = require('./predicate/isNode.js');
+const isNotNil = require('./predicate/isNotNil.js');
+const isNull = require('./predicate/isNull.js');
+const isPlainObject = require('./predicate/isPlainObject.js');
+const isPrimitive = require('./predicate/isPrimitive.js');
+const isPromise = require('./predicate/isPromise.js');
+const isRegExp = require('./predicate/isRegExp.js');
+const isSet = require('./predicate/isSet.js');
+const isString = require('./predicate/isString.js');
+const isSymbol = require('./predicate/isSymbol.js');
+const isTypedArray = require('./predicate/isTypedArray.js');
+const isUndefined = require('./predicate/isUndefined.js');
+const isWeakMap = require('./predicate/isWeakMap.js');
+const isWeakSet = require('./predicate/isWeakSet.js');
+const delay = require('./promise/delay.js');
+const mutex = require('./promise/mutex.js');
+const semaphore = require('./promise/semaphore.js');
+const timeout = require('./promise/timeout.js');
+const withTimeout = require('./promise/withTimeout.js');
+const camelCase = require('./string/camelCase.js');
+const capitalize = require('./string/capitalize.js');
+const constantCase = require('./string/constantCase.js');
+const deburr = require('./string/deburr.js');
+const escape = require('./string/escape.js');
+const escapeRegExp = require('./string/escapeRegExp.js');
+const kebabCase = require('./string/kebabCase.js');
+const lowerCase = require('./string/lowerCase.js');
+const lowerFirst = require('./string/lowerFirst.js');
+const pad = require('./string/pad.js');
+const pascalCase = require('./string/pascalCase.js');
+const reverseString = require('./string/reverseString.js');
+const snakeCase = require('./string/snakeCase.js');
+const startCase = require('./string/startCase.js');
+const trim = require('./string/trim.js');
+const trimEnd = require('./string/trimEnd.js');
+const trimStart = require('./string/trimStart.js');
+const unescape = require('./string/unescape.js');
+const upperCase = require('./string/upperCase.js');
+const upperFirst = require('./string/upperFirst.js');
+const words = require('./string/words.js');
+const attempt = require('./util/attempt.js');
+const attemptAsync = require('./util/attemptAsync.js');
+const invariant = require('./util/invariant.js');
+
+
+
+exports.at = at.at;
+exports.chunk = chunk.chunk;
+exports.compact = compact.compact;
+exports.countBy = countBy.countBy;
+exports.difference = difference.difference;
+exports.differenceBy = differenceBy.differenceBy;
+exports.differenceWith = differenceWith.differenceWith;
+exports.drop = drop.drop;
+exports.dropRight = dropRight.dropRight;
+exports.dropRightWhile = dropRightWhile.dropRightWhile;
+exports.dropWhile = dropWhile.dropWhile;
+exports.fill = fill.fill;
+exports.flatMap = flatMap.flatMap;
+exports.flatMapDeep = flatMapDeep.flatMapDeep;
+exports.flatten = flatten.flatten;
+exports.flattenDeep = flattenDeep.flattenDeep;
+exports.forEachRight = forEachRight.forEachRight;
+exports.groupBy = groupBy.groupBy;
+exports.head = head.head;
+exports.initial = initial.initial;
+exports.intersection = intersection.intersection;
+exports.intersectionBy = intersectionBy.intersectionBy;
+exports.intersectionWith = intersectionWith.intersectionWith;
+exports.isSubset = isSubset.isSubset;
+exports.isSubsetWith = isSubsetWith.isSubsetWith;
+exports.keyBy = keyBy.keyBy;
+exports.last = last.last;
+exports.maxBy = maxBy.maxBy;
+exports.minBy = minBy.minBy;
+exports.orderBy = orderBy.orderBy;
+exports.partition = partition.partition;
+exports.pull = pull.pull;
+exports.pullAt = pullAt.pullAt;
+exports.remove = remove.remove;
+exports.sample = sample.sample;
+exports.sampleSize = sampleSize.sampleSize;
+exports.shuffle = shuffle.shuffle;
+exports.sortBy = sortBy.sortBy;
+exports.tail = tail.tail;
+exports.take = take.take;
+exports.takeRight = takeRight.takeRight;
+exports.takeRightWhile = takeRightWhile.takeRightWhile;
+exports.takeWhile = takeWhile.takeWhile;
+exports.toFilled = toFilled.toFilled;
+exports.union = union.union;
+exports.unionBy = unionBy.unionBy;
+exports.unionWith = unionWith.unionWith;
+exports.uniq = uniq.uniq;
+exports.uniqBy = uniqBy.uniqBy;
+exports.uniqWith = uniqWith.uniqWith;
+exports.unzip = unzip.unzip;
+exports.unzipWith = unzipWith.unzipWith;
+exports.windowed = windowed.windowed;
+exports.without = without.without;
+exports.xor = xor.xor;
+exports.xorBy = xorBy.xorBy;
+exports.xorWith = xorWith.xorWith;
+exports.zip = zip.zip;
+exports.zipObject = zipObject.zipObject;
+exports.zipWith = zipWith.zipWith;
+exports.AbortError = AbortError.AbortError;
+exports.TimeoutError = TimeoutError.TimeoutError;
+exports.after = after.after;
+exports.ary = ary.ary;
+exports.asyncNoop = asyncNoop.asyncNoop;
+exports.before = before.before;
+exports.curry = curry.curry;
+exports.curryRight = curryRight.curryRight;
+exports.debounce = debounce.debounce;
+exports.flow = flow.flow;
+exports.flowRight = flowRight.flowRight;
+exports.identity = identity.identity;
+exports.memoize = memoize.memoize;
+exports.negate = negate.negate;
+exports.noop = noop.noop;
+exports.once = once.once;
+exports.partial = partial.partial;
+exports.partialRight = partialRight.partialRight;
+exports.rest = rest.rest;
+exports.retry = retry.retry;
+exports.spread = spread.spread;
+exports.throttle = throttle.throttle;
+exports.unary = unary.unary;
+exports.clamp = clamp.clamp;
+exports.inRange = inRange.inRange;
+exports.mean = mean.mean;
+exports.meanBy = meanBy.meanBy;
+exports.median = median.median;
+exports.medianBy = medianBy.medianBy;
+exports.random = random.random;
+exports.randomInt = randomInt.randomInt;
+exports.range = range.range;
+exports.rangeRight = rangeRight.rangeRight;
+exports.round = round.round;
+exports.sum = sum.sum;
+exports.sumBy = sumBy.sumBy;
+exports.clone = clone.clone;
+exports.cloneDeep = cloneDeep.cloneDeep;
+exports.cloneDeepWith = cloneDeepWith.cloneDeepWith;
+exports.findKey = findKey.findKey;
+exports.flattenObject = flattenObject.flattenObject;
+exports.invert = invert.invert;
+exports.mapKeys = mapKeys.mapKeys;
+exports.mapValues = mapValues.mapValues;
+exports.merge = merge.merge;
+exports.mergeWith = mergeWith.mergeWith;
+exports.omit = omit.omit;
+exports.omitBy = omitBy.omitBy;
+exports.pick = pick.pick;
+exports.pickBy = pickBy.pickBy;
+exports.toCamelCaseKeys = toCamelCaseKeys.toCamelCaseKeys;
+exports.toMerged = toMerged.toMerged;
+exports.toSnakeCaseKeys = toSnakeCaseKeys.toSnakeCaseKeys;
+exports.isArrayBuffer = isArrayBuffer.isArrayBuffer;
+exports.isBlob = isBlob.isBlob;
+exports.isBoolean = isBoolean.isBoolean;
+exports.isBrowser = isBrowser.isBrowser;
+exports.isBuffer = isBuffer.isBuffer;
+exports.isDate = isDate.isDate;
+exports.isEqual = isEqual.isEqual;
+exports.isEqualWith = isEqualWith.isEqualWith;
+exports.isError = isError.isError;
+exports.isFile = isFile.isFile;
+exports.isFunction = isFunction.isFunction;
+exports.isJSON = isJSON.isJSON;
+exports.isJSONArray = isJSONValue.isJSONArray;
+exports.isJSONObject = isJSONValue.isJSONObject;
+exports.isJSONValue = isJSONValue.isJSONValue;
+exports.isLength = isLength.isLength;
+exports.isMap = isMap.isMap;
+exports.isNil = isNil.isNil;
+exports.isNode = isNode.isNode;
+exports.isNotNil = isNotNil.isNotNil;
+exports.isNull = isNull.isNull;
+exports.isPlainObject = isPlainObject.isPlainObject;
+exports.isPrimitive = isPrimitive.isPrimitive;
+exports.isPromise = isPromise.isPromise;
+exports.isRegExp = isRegExp.isRegExp;
+exports.isSet = isSet.isSet;
+exports.isString = isString.isString;
+exports.isSymbol = isSymbol.isSymbol;
+exports.isTypedArray = isTypedArray.isTypedArray;
+exports.isUndefined = isUndefined.isUndefined;
+exports.isWeakMap = isWeakMap.isWeakMap;
+exports.isWeakSet = isWeakSet.isWeakSet;
+exports.delay = delay.delay;
+exports.Mutex = mutex.Mutex;
+exports.Semaphore = semaphore.Semaphore;
+exports.timeout = timeout.timeout;
+exports.withTimeout = withTimeout.withTimeout;
+exports.camelCase = camelCase.camelCase;
+exports.capitalize = capitalize.capitalize;
+exports.constantCase = constantCase.constantCase;
+exports.deburr = deburr.deburr;
+exports.escape = escape.escape;
+exports.escapeRegExp = escapeRegExp.escapeRegExp;
+exports.kebabCase = kebabCase.kebabCase;
+exports.lowerCase = lowerCase.lowerCase;
+exports.lowerFirst = lowerFirst.lowerFirst;
+exports.pad = pad.pad;
+exports.pascalCase = pascalCase.pascalCase;
+exports.reverseString = reverseString.reverseString;
+exports.snakeCase = snakeCase.snakeCase;
+exports.startCase = startCase.startCase;
+exports.trim = trim.trim;
+exports.trimEnd = trimEnd.trimEnd;
+exports.trimStart = trimStart.trimStart;
+exports.unescape = unescape.unescape;
+exports.upperCase = upperCase.upperCase;
+exports.upperFirst = upperFirst.upperFirst;
+exports.words = words.words;
+exports.attempt = attempt.attempt;
+exports.attemptAsync = attemptAsync.attemptAsync;
+exports.assert = invariant.invariant;
+exports.invariant = invariant.invariant;
Index: node_modules/es-toolkit/dist/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,172 @@
+export { at } from './array/at.mjs';
+export { chunk } from './array/chunk.mjs';
+export { compact } from './array/compact.mjs';
+export { countBy } from './array/countBy.mjs';
+export { difference } from './array/difference.mjs';
+export { differenceBy } from './array/differenceBy.mjs';
+export { differenceWith } from './array/differenceWith.mjs';
+export { drop } from './array/drop.mjs';
+export { dropRight } from './array/dropRight.mjs';
+export { dropRightWhile } from './array/dropRightWhile.mjs';
+export { dropWhile } from './array/dropWhile.mjs';
+export { fill } from './array/fill.mjs';
+export { flatMap } from './array/flatMap.mjs';
+export { flatMapDeep } from './array/flatMapDeep.mjs';
+export { flatten } from './array/flatten.mjs';
+export { flattenDeep } from './array/flattenDeep.mjs';
+export { forEachRight } from './array/forEachRight.mjs';
+export { groupBy } from './array/groupBy.mjs';
+export { head } from './array/head.mjs';
+export { initial } from './array/initial.mjs';
+export { intersection } from './array/intersection.mjs';
+export { intersectionBy } from './array/intersectionBy.mjs';
+export { intersectionWith } from './array/intersectionWith.mjs';
+export { isSubset } from './array/isSubset.mjs';
+export { isSubsetWith } from './array/isSubsetWith.mjs';
+export { keyBy } from './array/keyBy.mjs';
+export { last } from './array/last.mjs';
+export { maxBy } from './array/maxBy.mjs';
+export { minBy } from './array/minBy.mjs';
+export { orderBy } from './array/orderBy.mjs';
+export { partition } from './array/partition.mjs';
+export { pull } from './array/pull.mjs';
+export { pullAt } from './array/pullAt.mjs';
+export { remove } from './array/remove.mjs';
+export { sample } from './array/sample.mjs';
+export { sampleSize } from './array/sampleSize.mjs';
+export { shuffle } from './array/shuffle.mjs';
+export { sortBy } from './array/sortBy.mjs';
+export { tail } from './array/tail.mjs';
+export { take } from './array/take.mjs';
+export { takeRight } from './array/takeRight.mjs';
+export { takeRightWhile } from './array/takeRightWhile.mjs';
+export { takeWhile } from './array/takeWhile.mjs';
+export { toFilled } from './array/toFilled.mjs';
+export { union } from './array/union.mjs';
+export { unionBy } from './array/unionBy.mjs';
+export { unionWith } from './array/unionWith.mjs';
+export { uniq } from './array/uniq.mjs';
+export { uniqBy } from './array/uniqBy.mjs';
+export { uniqWith } from './array/uniqWith.mjs';
+export { unzip } from './array/unzip.mjs';
+export { unzipWith } from './array/unzipWith.mjs';
+export { windowed } from './array/windowed.mjs';
+export { without } from './array/without.mjs';
+export { xor } from './array/xor.mjs';
+export { xorBy } from './array/xorBy.mjs';
+export { xorWith } from './array/xorWith.mjs';
+export { zip } from './array/zip.mjs';
+export { zipObject } from './array/zipObject.mjs';
+export { zipWith } from './array/zipWith.mjs';
+export { AbortError } from './error/AbortError.mjs';
+export { TimeoutError } from './error/TimeoutError.mjs';
+export { after } from './function/after.mjs';
+export { ary } from './function/ary.mjs';
+export { asyncNoop } from './function/asyncNoop.mjs';
+export { before } from './function/before.mjs';
+export { curry } from './function/curry.mjs';
+export { curryRight } from './function/curryRight.mjs';
+export { debounce } from './function/debounce.mjs';
+export { flow } from './function/flow.mjs';
+export { flowRight } from './function/flowRight.mjs';
+export { identity } from './function/identity.mjs';
+export { memoize } from './function/memoize.mjs';
+export { negate } from './function/negate.mjs';
+export { noop } from './function/noop.mjs';
+export { once } from './function/once.mjs';
+export { partial } from './function/partial.mjs';
+export { partialRight } from './function/partialRight.mjs';
+export { rest } from './function/rest.mjs';
+export { retry } from './function/retry.mjs';
+export { spread } from './function/spread.mjs';
+export { throttle } from './function/throttle.mjs';
+export { unary } from './function/unary.mjs';
+export { clamp } from './math/clamp.mjs';
+export { inRange } from './math/inRange.mjs';
+export { mean } from './math/mean.mjs';
+export { meanBy } from './math/meanBy.mjs';
+export { median } from './math/median.mjs';
+export { medianBy } from './math/medianBy.mjs';
+export { random } from './math/random.mjs';
+export { randomInt } from './math/randomInt.mjs';
+export { range } from './math/range.mjs';
+export { rangeRight } from './math/rangeRight.mjs';
+export { round } from './math/round.mjs';
+export { sum } from './math/sum.mjs';
+export { sumBy } from './math/sumBy.mjs';
+export { clone } from './object/clone.mjs';
+export { cloneDeep } from './object/cloneDeep.mjs';
+export { cloneDeepWith } from './object/cloneDeepWith.mjs';
+export { findKey } from './object/findKey.mjs';
+export { flattenObject } from './object/flattenObject.mjs';
+export { invert } from './object/invert.mjs';
+export { mapKeys } from './object/mapKeys.mjs';
+export { mapValues } from './object/mapValues.mjs';
+export { merge } from './object/merge.mjs';
+export { mergeWith } from './object/mergeWith.mjs';
+export { omit } from './object/omit.mjs';
+export { omitBy } from './object/omitBy.mjs';
+export { pick } from './object/pick.mjs';
+export { pickBy } from './object/pickBy.mjs';
+export { toCamelCaseKeys } from './object/toCamelCaseKeys.mjs';
+export { toMerged } from './object/toMerged.mjs';
+export { toSnakeCaseKeys } from './object/toSnakeCaseKeys.mjs';
+export { isArrayBuffer } from './predicate/isArrayBuffer.mjs';
+export { isBlob } from './predicate/isBlob.mjs';
+export { isBoolean } from './predicate/isBoolean.mjs';
+export { isBrowser } from './predicate/isBrowser.mjs';
+export { isBuffer } from './predicate/isBuffer.mjs';
+export { isDate } from './predicate/isDate.mjs';
+export { isEqual } from './predicate/isEqual.mjs';
+export { isEqualWith } from './predicate/isEqualWith.mjs';
+export { isError } from './predicate/isError.mjs';
+export { isFile } from './predicate/isFile.mjs';
+export { isFunction } from './predicate/isFunction.mjs';
+export { isJSON } from './predicate/isJSON.mjs';
+export { isJSONArray, isJSONObject, isJSONValue } from './predicate/isJSONValue.mjs';
+export { isLength } from './predicate/isLength.mjs';
+export { isMap } from './predicate/isMap.mjs';
+export { isNil } from './predicate/isNil.mjs';
+export { isNode } from './predicate/isNode.mjs';
+export { isNotNil } from './predicate/isNotNil.mjs';
+export { isNull } from './predicate/isNull.mjs';
+export { isPlainObject } from './predicate/isPlainObject.mjs';
+export { isPrimitive } from './predicate/isPrimitive.mjs';
+export { isPromise } from './predicate/isPromise.mjs';
+export { isRegExp } from './predicate/isRegExp.mjs';
+export { isSet } from './predicate/isSet.mjs';
+export { isString } from './predicate/isString.mjs';
+export { isSymbol } from './predicate/isSymbol.mjs';
+export { isTypedArray } from './predicate/isTypedArray.mjs';
+export { isUndefined } from './predicate/isUndefined.mjs';
+export { isWeakMap } from './predicate/isWeakMap.mjs';
+export { isWeakSet } from './predicate/isWeakSet.mjs';
+export { delay } from './promise/delay.mjs';
+export { Mutex } from './promise/mutex.mjs';
+export { Semaphore } from './promise/semaphore.mjs';
+export { timeout } from './promise/timeout.mjs';
+export { withTimeout } from './promise/withTimeout.mjs';
+export { camelCase } from './string/camelCase.mjs';
+export { capitalize } from './string/capitalize.mjs';
+export { constantCase } from './string/constantCase.mjs';
+export { deburr } from './string/deburr.mjs';
+export { escape } from './string/escape.mjs';
+export { escapeRegExp } from './string/escapeRegExp.mjs';
+export { kebabCase } from './string/kebabCase.mjs';
+export { lowerCase } from './string/lowerCase.mjs';
+export { lowerFirst } from './string/lowerFirst.mjs';
+export { pad } from './string/pad.mjs';
+export { pascalCase } from './string/pascalCase.mjs';
+export { reverseString } from './string/reverseString.mjs';
+export { snakeCase } from './string/snakeCase.mjs';
+export { startCase } from './string/startCase.mjs';
+export { trim } from './string/trim.mjs';
+export { trimEnd } from './string/trimEnd.mjs';
+export { trimStart } from './string/trimStart.mjs';
+export { unescape } from './string/unescape.mjs';
+export { upperCase } from './string/upperCase.mjs';
+export { upperFirst } from './string/upperFirst.mjs';
+export { words } from './string/words.mjs';
+export { attempt } from './util/attempt.mjs';
+export { attemptAsync } from './util/attemptAsync.mjs';
+export { invariant as assert, invariant } from './util/invariant.mjs';
Index: node_modules/es-toolkit/dist/math/clamp.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/clamp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/clamp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+/**
+ * Clamps a number within the inclusive upper bound.
+ *
+ * This function takes a number and a maximum bound, and returns the number clamped within the specified upper bound.
+ * If only one bound is provided, it returns the minimum of the value and the bound.
+ *
+ * @param {number} value - The number to clamp.
+ * @param {number} maximum - The maximum bound to clamp the number.
+ * @returns {number} The clamped number within the specified upper bound.
+ *
+ * @example
+ * const result1 = clamp(10, 5); // result1 will be 5, as 10 is clamped to the bound 5
+ */
+declare function clamp(value: number, maximum: number): number;
+/**
+ * Clamps a number within the inclusive lower and upper bounds.
+ *
+ * This function takes a number and two bounds, and returns the number clamped within the specified bounds.
+ *
+ * @param {number} value - The number to clamp.
+ * @param {number} minimum - The minimum bound to clamp the number.
+ * @param {number} maximum - The maximum bound to clamp the number.
+ * @returns {number} The clamped number within the specified bounds.
+ *
+ * @example
+ * const result2 = clamp(10, 5, 15); // result2 will be 10, as it is within the bounds 5 and 15
+ * const result3 = clamp(2, 5, 15); // result3 will be 5, as 2 is clamped to the lower bound 5
+ * const result4 = clamp(20, 5, 15); // result4 will be 15, as 20 is clamped to the upper bound 15
+ */
+declare function clamp(value: number, minimum: number, maximum: number): number;
+
+export { clamp };
Index: node_modules/es-toolkit/dist/math/clamp.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/clamp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/clamp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+/**
+ * Clamps a number within the inclusive upper bound.
+ *
+ * This function takes a number and a maximum bound, and returns the number clamped within the specified upper bound.
+ * If only one bound is provided, it returns the minimum of the value and the bound.
+ *
+ * @param {number} value - The number to clamp.
+ * @param {number} maximum - The maximum bound to clamp the number.
+ * @returns {number} The clamped number within the specified upper bound.
+ *
+ * @example
+ * const result1 = clamp(10, 5); // result1 will be 5, as 10 is clamped to the bound 5
+ */
+declare function clamp(value: number, maximum: number): number;
+/**
+ * Clamps a number within the inclusive lower and upper bounds.
+ *
+ * This function takes a number and two bounds, and returns the number clamped within the specified bounds.
+ *
+ * @param {number} value - The number to clamp.
+ * @param {number} minimum - The minimum bound to clamp the number.
+ * @param {number} maximum - The maximum bound to clamp the number.
+ * @returns {number} The clamped number within the specified bounds.
+ *
+ * @example
+ * const result2 = clamp(10, 5, 15); // result2 will be 10, as it is within the bounds 5 and 15
+ * const result3 = clamp(2, 5, 15); // result3 will be 5, as 2 is clamped to the lower bound 5
+ * const result4 = clamp(20, 5, 15); // result4 will be 15, as 20 is clamped to the upper bound 15
+ */
+declare function clamp(value: number, minimum: number, maximum: number): number;
+
+export { clamp };
Index: node_modules/es-toolkit/dist/math/clamp.js
===================================================================
--- node_modules/es-toolkit/dist/math/clamp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/clamp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function clamp(value, bound1, bound2) {
+    if (bound2 == null) {
+        return Math.min(value, bound1);
+    }
+    return Math.min(Math.max(value, bound1), bound2);
+}
+
+exports.clamp = clamp;
Index: node_modules/es-toolkit/dist/math/clamp.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/clamp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/clamp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function clamp(value, bound1, bound2) {
+    if (bound2 == null) {
+        return Math.min(value, bound1);
+    }
+    return Math.min(Math.max(value, bound1), bound2);
+}
+
+export { clamp };
Index: node_modules/es-toolkit/dist/math/inRange.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/inRange.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/inRange.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Checks if the value is less than the maximum.
+ *
+ * @param {number} value The value to check.
+ * @param {number} maximum The upper bound of the range (exclusive).
+ * @returns {boolean} `true` if the value is less than the maximum, otherwise `false`.
+ *
+ * @example
+ * const result = inRange(3, 5); // result will be true.
+ * const result2 = inRange(5, 5); // result2 will be false.
+ */
+declare function inRange(value: number, maximum: number): boolean;
+/**
+ * Checks if the value is within the range defined by minimum (inclusive) and maximum (exclusive).
+ *
+ * @param {number} value The value to check.
+ * @param {number} minimum The lower bound of the range (inclusive).
+ * @param {number} maximum The upper bound of the range (exclusive).
+ * @returns {boolean} `true` if the value is within the specified range, otherwise `false`.
+ *
+ * @example
+ * const result = inRange(3, 2, 5); // result will be true.
+ * const result2 = inRange(1, 2, 5); // result2 will be false.
+ */
+declare function inRange(value: number, minimum: number, maximum: number): boolean;
+
+export { inRange };
Index: node_modules/es-toolkit/dist/math/inRange.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/inRange.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/inRange.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * Checks if the value is less than the maximum.
+ *
+ * @param {number} value The value to check.
+ * @param {number} maximum The upper bound of the range (exclusive).
+ * @returns {boolean} `true` if the value is less than the maximum, otherwise `false`.
+ *
+ * @example
+ * const result = inRange(3, 5); // result will be true.
+ * const result2 = inRange(5, 5); // result2 will be false.
+ */
+declare function inRange(value: number, maximum: number): boolean;
+/**
+ * Checks if the value is within the range defined by minimum (inclusive) and maximum (exclusive).
+ *
+ * @param {number} value The value to check.
+ * @param {number} minimum The lower bound of the range (inclusive).
+ * @param {number} maximum The upper bound of the range (exclusive).
+ * @returns {boolean} `true` if the value is within the specified range, otherwise `false`.
+ *
+ * @example
+ * const result = inRange(3, 2, 5); // result will be true.
+ * const result2 = inRange(1, 2, 5); // result2 will be false.
+ */
+declare function inRange(value: number, minimum: number, maximum: number): boolean;
+
+export { inRange };
Index: node_modules/es-toolkit/dist/math/inRange.js
===================================================================
--- node_modules/es-toolkit/dist/math/inRange.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/inRange.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function inRange(value, minimum, maximum) {
+    if (maximum == null) {
+        maximum = minimum;
+        minimum = 0;
+    }
+    if (minimum >= maximum) {
+        throw new Error('The maximum value must be greater than the minimum value.');
+    }
+    return minimum <= value && value < maximum;
+}
+
+exports.inRange = inRange;
Index: node_modules/es-toolkit/dist/math/inRange.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/inRange.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/inRange.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function inRange(value, minimum, maximum) {
+    if (maximum == null) {
+        maximum = minimum;
+        minimum = 0;
+    }
+    if (minimum >= maximum) {
+        throw new Error('The maximum value must be greater than the minimum value.');
+    }
+    return minimum <= value && value < maximum;
+}
+
+export { inRange };
Index: node_modules/es-toolkit/dist/math/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+export { clamp } from './clamp.mjs';
+export { inRange } from './inRange.mjs';
+export { mean } from './mean.mjs';
+export { meanBy } from './meanBy.mjs';
+export { median } from './median.mjs';
+export { medianBy } from './medianBy.mjs';
+export { random } from './random.mjs';
+export { randomInt } from './randomInt.mjs';
+export { range } from './range.mjs';
+export { rangeRight } from './rangeRight.mjs';
+export { round } from './round.mjs';
+export { sum } from './sum.mjs';
+export { sumBy } from './sumBy.mjs';
Index: node_modules/es-toolkit/dist/math/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+export { clamp } from './clamp.js';
+export { inRange } from './inRange.js';
+export { mean } from './mean.js';
+export { meanBy } from './meanBy.js';
+export { median } from './median.js';
+export { medianBy } from './medianBy.js';
+export { random } from './random.js';
+export { randomInt } from './randomInt.js';
+export { range } from './range.js';
+export { rangeRight } from './rangeRight.js';
+export { round } from './round.js';
+export { sum } from './sum.js';
+export { sumBy } from './sumBy.js';
Index: node_modules/es-toolkit/dist/math/index.js
===================================================================
--- node_modules/es-toolkit/dist/math/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const clamp = require('./clamp.js');
+const inRange = require('./inRange.js');
+const mean = require('./mean.js');
+const meanBy = require('./meanBy.js');
+const median = require('./median.js');
+const medianBy = require('./medianBy.js');
+const random = require('./random.js');
+const randomInt = require('./randomInt.js');
+const range = require('./range.js');
+const rangeRight = require('./rangeRight.js');
+const round = require('./round.js');
+const sum = require('./sum.js');
+const sumBy = require('./sumBy.js');
+
+
+
+exports.clamp = clamp.clamp;
+exports.inRange = inRange.inRange;
+exports.mean = mean.mean;
+exports.meanBy = meanBy.meanBy;
+exports.median = median.median;
+exports.medianBy = medianBy.medianBy;
+exports.random = random.random;
+exports.randomInt = randomInt.randomInt;
+exports.range = range.range;
+exports.rangeRight = rangeRight.rangeRight;
+exports.round = round.round;
+exports.sum = sum.sum;
+exports.sumBy = sumBy.sumBy;
Index: node_modules/es-toolkit/dist/math/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+export { clamp } from './clamp.mjs';
+export { inRange } from './inRange.mjs';
+export { mean } from './mean.mjs';
+export { meanBy } from './meanBy.mjs';
+export { median } from './median.mjs';
+export { medianBy } from './medianBy.mjs';
+export { random } from './random.mjs';
+export { randomInt } from './randomInt.mjs';
+export { range } from './range.mjs';
+export { rangeRight } from './rangeRight.mjs';
+export { round } from './round.mjs';
+export { sum } from './sum.mjs';
+export { sumBy } from './sumBy.mjs';
Index: node_modules/es-toolkit/dist/math/mean.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/mean.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/mean.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Calculates the average of an array of numbers.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @param {number[]} nums - An array of numbers to calculate the average.
+ * @returns {number} The average of all the numbers in the array.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * const result = mean(numbers);
+ * // result will be 3
+ */
+declare function mean(nums: readonly number[]): number;
+
+export { mean };
Index: node_modules/es-toolkit/dist/math/mean.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/mean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/mean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Calculates the average of an array of numbers.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @param {number[]} nums - An array of numbers to calculate the average.
+ * @returns {number} The average of all the numbers in the array.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * const result = mean(numbers);
+ * // result will be 3
+ */
+declare function mean(nums: readonly number[]): number;
+
+export { mean };
Index: node_modules/es-toolkit/dist/math/mean.js
===================================================================
--- node_modules/es-toolkit/dist/math/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const sum = require('./sum.js');
+
+function mean(nums) {
+    return sum.sum(nums) / nums.length;
+}
+
+exports.mean = mean;
Index: node_modules/es-toolkit/dist/math/mean.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/mean.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/mean.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { sum } from './sum.mjs';
+
+function mean(nums) {
+    return sum(nums) / nums.length;
+}
+
+export { mean };
Index: node_modules/es-toolkit/dist/math/meanBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/meanBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/meanBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Calculates the average of an array of numbers when applying
+ * the `getValue` function to each element.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items An array to calculate the average.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {number} The average of all the numbers as determined by the `getValue` function.
+ *
+ * @example
+ * meanBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: 2
+ * meanBy([], x => x.a); // Returns: NaN
+ */
+declare function meanBy<T>(items: readonly T[], getValue: (element: T) => number): number;
+
+export { meanBy };
Index: node_modules/es-toolkit/dist/math/meanBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/meanBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/meanBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Calculates the average of an array of numbers when applying
+ * the `getValue` function to each element.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items An array to calculate the average.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {number} The average of all the numbers as determined by the `getValue` function.
+ *
+ * @example
+ * meanBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: 2
+ * meanBy([], x => x.a); // Returns: NaN
+ */
+declare function meanBy<T>(items: readonly T[], getValue: (element: T) => number): number;
+
+export { meanBy };
Index: node_modules/es-toolkit/dist/math/meanBy.js
===================================================================
--- node_modules/es-toolkit/dist/math/meanBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/meanBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const mean = require('./mean.js');
+
+function meanBy(items, getValue) {
+    const nums = items.map(x => getValue(x));
+    return mean.mean(nums);
+}
+
+exports.meanBy = meanBy;
Index: node_modules/es-toolkit/dist/math/meanBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/meanBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/meanBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { mean } from './mean.mjs';
+
+function meanBy(items, getValue) {
+    const nums = items.map(x => getValue(x));
+    return mean(nums);
+}
+
+export { meanBy };
Index: node_modules/es-toolkit/dist/math/median.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/median.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/median.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Calculates the median of an array of numbers.
+ *
+ * The median is the middle value of a sorted array.
+ * If the array has an odd number of elements, the median is the middle value.
+ * If the array has an even number of elements, it returns the average of the two middle values.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @param {number[]} nums - An array of numbers to calculate the median.
+ * @returns {number} The median of all the numbers in the array.
+ *
+ * @example
+ * const arrayWithOddNumberOfElements = [1, 2, 3, 4, 5];
+ * const result = median(arrayWithOddNumberOfElements);
+ * // result will be 3
+ *
+ * @example
+ * const arrayWithEvenNumberOfElements = [1, 2, 3, 4];
+ * const result = median(arrayWithEvenNumberOfElements);
+ * // result will be 2.5
+ */
+declare function median(nums: readonly number[]): number;
+
+export { median };
Index: node_modules/es-toolkit/dist/math/median.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/median.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/median.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Calculates the median of an array of numbers.
+ *
+ * The median is the middle value of a sorted array.
+ * If the array has an odd number of elements, the median is the middle value.
+ * If the array has an even number of elements, it returns the average of the two middle values.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @param {number[]} nums - An array of numbers to calculate the median.
+ * @returns {number} The median of all the numbers in the array.
+ *
+ * @example
+ * const arrayWithOddNumberOfElements = [1, 2, 3, 4, 5];
+ * const result = median(arrayWithOddNumberOfElements);
+ * // result will be 3
+ *
+ * @example
+ * const arrayWithEvenNumberOfElements = [1, 2, 3, 4];
+ * const result = median(arrayWithEvenNumberOfElements);
+ * // result will be 2.5
+ */
+declare function median(nums: readonly number[]): number;
+
+export { median };
Index: node_modules/es-toolkit/dist/math/median.js
===================================================================
--- node_modules/es-toolkit/dist/math/median.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/median.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function median(nums) {
+    if (nums.length === 0) {
+        return NaN;
+    }
+    const sorted = nums.slice().sort((a, b) => a - b);
+    const middleIndex = Math.floor(sorted.length / 2);
+    if (sorted.length % 2 === 0) {
+        return (sorted[middleIndex - 1] + sorted[middleIndex]) / 2;
+    }
+    else {
+        return sorted[middleIndex];
+    }
+}
+
+exports.median = median;
Index: node_modules/es-toolkit/dist/math/median.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/median.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/median.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+function median(nums) {
+    if (nums.length === 0) {
+        return NaN;
+    }
+    const sorted = nums.slice().sort((a, b) => a - b);
+    const middleIndex = Math.floor(sorted.length / 2);
+    if (sorted.length % 2 === 0) {
+        return (sorted[middleIndex - 1] + sorted[middleIndex]) / 2;
+    }
+    else {
+        return sorted[middleIndex];
+    }
+}
+
+export { median };
Index: node_modules/es-toolkit/dist/math/medianBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/medianBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/medianBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Calculates the median of an array of elements when applying
+ * the `getValue` function to each element.
+ *
+ * The median is the middle value of a sorted array.
+ * If the array has an odd number of elements, the median is the middle value.
+ * If the array has an even number of elements, it returns the average of the two middle values.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items An array to calculate the median.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {number} The median of all the numbers as determined by the `getValue` function.
+ *
+ * @example
+ * medianBy([{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }, { a: 5 }], x => x.a); // Returns: 3
+ * medianBy([{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }], x => x.a); // Returns: 2.5
+ * medianBy([], x => x.a); // Returns: NaN
+ */
+declare function medianBy<T>(items: readonly T[], getValue: (element: T) => number): number;
+
+export { medianBy };
Index: node_modules/es-toolkit/dist/math/medianBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/medianBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/medianBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Calculates the median of an array of elements when applying
+ * the `getValue` function to each element.
+ *
+ * The median is the middle value of a sorted array.
+ * If the array has an odd number of elements, the median is the middle value.
+ * If the array has an even number of elements, it returns the average of the two middle values.
+ *
+ * If the array is empty, this function returns `NaN`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items An array to calculate the median.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {number} The median of all the numbers as determined by the `getValue` function.
+ *
+ * @example
+ * medianBy([{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }, { a: 5 }], x => x.a); // Returns: 3
+ * medianBy([{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }], x => x.a); // Returns: 2.5
+ * medianBy([], x => x.a); // Returns: NaN
+ */
+declare function medianBy<T>(items: readonly T[], getValue: (element: T) => number): number;
+
+export { medianBy };
Index: node_modules/es-toolkit/dist/math/medianBy.js
===================================================================
--- node_modules/es-toolkit/dist/math/medianBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/medianBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const median = require('./median.js');
+
+function medianBy(items, getValue) {
+    const nums = items.map(x => getValue(x));
+    return median.median(nums);
+}
+
+exports.medianBy = medianBy;
Index: node_modules/es-toolkit/dist/math/medianBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/medianBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/medianBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { median } from './median.mjs';
+
+function medianBy(items, getValue) {
+    const nums = items.map(x => getValue(x));
+    return median(nums);
+}
+
+export { medianBy };
Index: node_modules/es-toolkit/dist/math/random.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/random.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/random.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Generate a random number within the given range.
+ *
+ * If only one argument is provided, a number between `0` and the given number is returned.
+ *
+ * @param {number} maximum - The upper bound (exclusive).
+ * @returns {number} A random number between 0 (inclusive) and maximum (exclusive). The number can be an integer or a decimal.
+ * @throws {Error} Throws an error if `maximum` is not greater than `0`.
+ *
+ * @example
+ * const result1 = random(5); // Returns a random number between 0 and 5.
+ * const result2 = random(0); // If the `maximum` is less than or equal to 0, an error is thrown.
+ */
+declare function random(maximum: number): number;
+/**
+ * Generate a random number within the given range.
+ *
+ * @param {number} minimum - The lower bound (inclusive).
+ * @param {number} maximum - The upper bound (exclusive).
+ * @returns {number} A random number between minimum (inclusive) and maximum (exclusive). The number can be an integer or a decimal.
+ * @throws {Error} Throws an error if `maximum` is not greater than `minimum`.
+ *
+ * @example
+ * const result1 = random(0, 5); // Returns a random number between 0 and 5.
+ * const result2 = random(5, 0); // If the minimum is greater than the maximum, an error is thrown.
+ * const result3 = random(5, 5); // If the minimum is equal to the maximum, an error is thrown.
+ */
+declare function random(minimum: number, maximum: number): number;
+
+export { random };
Index: node_modules/es-toolkit/dist/math/random.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/random.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/random.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+/**
+ * Generate a random number within the given range.
+ *
+ * If only one argument is provided, a number between `0` and the given number is returned.
+ *
+ * @param {number} maximum - The upper bound (exclusive).
+ * @returns {number} A random number between 0 (inclusive) and maximum (exclusive). The number can be an integer or a decimal.
+ * @throws {Error} Throws an error if `maximum` is not greater than `0`.
+ *
+ * @example
+ * const result1 = random(5); // Returns a random number between 0 and 5.
+ * const result2 = random(0); // If the `maximum` is less than or equal to 0, an error is thrown.
+ */
+declare function random(maximum: number): number;
+/**
+ * Generate a random number within the given range.
+ *
+ * @param {number} minimum - The lower bound (inclusive).
+ * @param {number} maximum - The upper bound (exclusive).
+ * @returns {number} A random number between minimum (inclusive) and maximum (exclusive). The number can be an integer or a decimal.
+ * @throws {Error} Throws an error if `maximum` is not greater than `minimum`.
+ *
+ * @example
+ * const result1 = random(0, 5); // Returns a random number between 0 and 5.
+ * const result2 = random(5, 0); // If the minimum is greater than the maximum, an error is thrown.
+ * const result3 = random(5, 5); // If the minimum is equal to the maximum, an error is thrown.
+ */
+declare function random(minimum: number, maximum: number): number;
+
+export { random };
Index: node_modules/es-toolkit/dist/math/random.js
===================================================================
--- node_modules/es-toolkit/dist/math/random.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/random.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function random(minimum, maximum) {
+    if (maximum == null) {
+        maximum = minimum;
+        minimum = 0;
+    }
+    if (minimum >= maximum) {
+        throw new Error('Invalid input: The maximum value must be greater than the minimum value.');
+    }
+    return Math.random() * (maximum - minimum) + minimum;
+}
+
+exports.random = random;
Index: node_modules/es-toolkit/dist/math/random.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/random.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/random.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function random(minimum, maximum) {
+    if (maximum == null) {
+        maximum = minimum;
+        minimum = 0;
+    }
+    if (minimum >= maximum) {
+        throw new Error('Invalid input: The maximum value must be greater than the minimum value.');
+    }
+    return Math.random() * (maximum - minimum) + minimum;
+}
+
+export { random };
Index: node_modules/es-toolkit/dist/math/randomInt.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/randomInt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/randomInt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Generates a random integer between 0 (inclusive) and the given maximum (exclusive).
+ *
+ * @param {number} maximum - The upper bound (exclusive).
+ * @returns {number} A random integer between 0 (inclusive) and maximum (exclusive).
+ * @throws {Error} Throws an error if `maximum` is not greater than `0`.
+ *
+ * @example
+ * const result = randomInt(5); // result will be a random integer between 0 (inclusive) and 5 (exclusive)
+ */
+declare function randomInt(maximum: number): number;
+/**
+ * Generates a random integer between minimum (inclusive) and maximum (exclusive).
+ *
+ * @param {number} minimum - The lower bound (inclusive).
+ * @param {number} maximum - The upper bound (exclusive).
+ * @returns {number} A random integer between minimum (inclusive) and maximum (exclusive).
+ * @throws {Error} Throws an error if `maximum` is not greater than `minimum`.
+ *
+ * @example
+ * const result = randomInt(0, 5); // result will be a random integer between 0 (inclusive) and 5 (exclusive)
+ * const result2 = randomInt(5, 0); // This will throw an error
+ */
+declare function randomInt(minimum: number, maximum: number): number;
+
+export { randomInt };
Index: node_modules/es-toolkit/dist/math/randomInt.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/randomInt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/randomInt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Generates a random integer between 0 (inclusive) and the given maximum (exclusive).
+ *
+ * @param {number} maximum - The upper bound (exclusive).
+ * @returns {number} A random integer between 0 (inclusive) and maximum (exclusive).
+ * @throws {Error} Throws an error if `maximum` is not greater than `0`.
+ *
+ * @example
+ * const result = randomInt(5); // result will be a random integer between 0 (inclusive) and 5 (exclusive)
+ */
+declare function randomInt(maximum: number): number;
+/**
+ * Generates a random integer between minimum (inclusive) and maximum (exclusive).
+ *
+ * @param {number} minimum - The lower bound (inclusive).
+ * @param {number} maximum - The upper bound (exclusive).
+ * @returns {number} A random integer between minimum (inclusive) and maximum (exclusive).
+ * @throws {Error} Throws an error if `maximum` is not greater than `minimum`.
+ *
+ * @example
+ * const result = randomInt(0, 5); // result will be a random integer between 0 (inclusive) and 5 (exclusive)
+ * const result2 = randomInt(5, 0); // This will throw an error
+ */
+declare function randomInt(minimum: number, maximum: number): number;
+
+export { randomInt };
Index: node_modules/es-toolkit/dist/math/randomInt.js
===================================================================
--- node_modules/es-toolkit/dist/math/randomInt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/randomInt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const random = require('./random.js');
+
+function randomInt(minimum, maximum) {
+    return Math.floor(random.random(minimum, maximum));
+}
+
+exports.randomInt = randomInt;
Index: node_modules/es-toolkit/dist/math/randomInt.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/randomInt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/randomInt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { random } from './random.mjs';
+
+function randomInt(minimum, maximum) {
+    return Math.floor(random(minimum, maximum));
+}
+
+export { randomInt };
Index: node_modules/es-toolkit/dist/math/range.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/range.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/range.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Returns an array of numbers from `0` (inclusive) to `end` (exclusive), incrementing by `1`.
+ *
+ * @param {number} end - The end number of the range (exclusive).
+ * @returns {number[]} An array of numbers from `0` (inclusive) to `end` (exclusive) with a step of `1`.
+ *
+ * @example
+ * // Returns [0, 1, 2, 3]
+ * range(4);
+ */
+declare function range(end: number): number[];
+/**
+ * Returns an array of numbers from `start` (inclusive) to `end` (exclusive), incrementing by `1`.
+ *
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} end - The end number of the range (exclusive).
+ * @returns {number[]} An array of numbers from `start` (inclusive) to `end` (exclusive) with a step of `1`.
+ *
+ * @example
+ * // Returns [1, 2, 3]
+ * range(1, 4);
+ */
+declare function range(start: number, end: number): number[];
+/**
+ * Returns an array of numbers from `start` (inclusive) to `end` (exclusive), incrementing by `step`.
+ *
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} end - The end number of the range (exclusive).
+ * @param {number} step - The step value for the range.
+ * @returns {number[]} An array of numbers from `start` (inclusive) to `end` (exclusive) with the specified `step`.
+ *
+ * @example
+ * // Returns [0, 5, 10, 15]
+ * range(0, 20, 5);
+ */
+declare function range(start: number, end: number, step: number): number[];
+
+export { range };
Index: node_modules/es-toolkit/dist/math/range.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/range.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/range.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Returns an array of numbers from `0` (inclusive) to `end` (exclusive), incrementing by `1`.
+ *
+ * @param {number} end - The end number of the range (exclusive).
+ * @returns {number[]} An array of numbers from `0` (inclusive) to `end` (exclusive) with a step of `1`.
+ *
+ * @example
+ * // Returns [0, 1, 2, 3]
+ * range(4);
+ */
+declare function range(end: number): number[];
+/**
+ * Returns an array of numbers from `start` (inclusive) to `end` (exclusive), incrementing by `1`.
+ *
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} end - The end number of the range (exclusive).
+ * @returns {number[]} An array of numbers from `start` (inclusive) to `end` (exclusive) with a step of `1`.
+ *
+ * @example
+ * // Returns [1, 2, 3]
+ * range(1, 4);
+ */
+declare function range(start: number, end: number): number[];
+/**
+ * Returns an array of numbers from `start` (inclusive) to `end` (exclusive), incrementing by `step`.
+ *
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} end - The end number of the range (exclusive).
+ * @param {number} step - The step value for the range.
+ * @returns {number[]} An array of numbers from `start` (inclusive) to `end` (exclusive) with the specified `step`.
+ *
+ * @example
+ * // Returns [0, 5, 10, 15]
+ * range(0, 20, 5);
+ */
+declare function range(start: number, end: number, step: number): number[];
+
+export { range };
Index: node_modules/es-toolkit/dist/math/range.js
===================================================================
--- node_modules/es-toolkit/dist/math/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function range(start, end, step = 1) {
+    if (end == null) {
+        end = start;
+        start = 0;
+    }
+    if (!Number.isInteger(step) || step === 0) {
+        throw new Error(`The step value must be a non-zero integer.`);
+    }
+    const length = Math.max(Math.ceil((end - start) / step), 0);
+    const result = new Array(length);
+    for (let i = 0; i < length; i++) {
+        result[i] = start + i * step;
+    }
+    return result;
+}
+
+exports.range = range;
Index: node_modules/es-toolkit/dist/math/range.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/range.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/range.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+function range(start, end, step = 1) {
+    if (end == null) {
+        end = start;
+        start = 0;
+    }
+    if (!Number.isInteger(step) || step === 0) {
+        throw new Error(`The step value must be a non-zero integer.`);
+    }
+    const length = Math.max(Math.ceil((end - start) / step), 0);
+    const result = new Array(length);
+    for (let i = 0; i < length; i++) {
+        result[i] = start + i * step;
+    }
+    return result;
+}
+
+export { range };
Index: node_modules/es-toolkit/dist/math/rangeRight.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/rangeRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/rangeRight.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Returns an array of numbers from `end` (exclusive) to `0` (inclusive), decrementing by `1`.
+ *
+ * @param {number} end - The end number of the range (exclusive).
+ * @returns {number[]} An array of numbers from `end` (exclusive) to `0` (inclusive) with a step of `1`.
+ *
+ * @example
+ * // Returns [3, 2, 1, 0]
+ * rangeRight(4);
+ */
+declare function rangeRight(end: number): number[];
+/**
+ * Returns an array of numbers from `end` (exclusive) to `start` (inclusive), decrementing by `1`.
+ *
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} end - The end number of the range (exclusive).
+ * @returns {number[]} An array of numbers from `end` (exclusive) to `start` (inclusive) with a step of `1`.
+ *
+ * @example
+ * // Returns [3, 2, 1]
+ * rangeRight(1, 4);
+ */
+declare function rangeRight(start: number, end: number): number[];
+/**
+ * Returns an array of numbers from `end` (exclusive) to `start` (inclusive), decrementing by `step`.
+ *
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} end - The end number of the range (exclusive).
+ * @param {number} step - The step value for the range.
+ * @returns {number[]} An array of numbers from `end` (exclusive) to `start` (inclusive) with the specified `step`.
+ *
+ * @example
+ * // Returns [15, 10, 5, 0]
+ * rangeRight(0, 20, 5);
+ */
+declare function rangeRight(start: number, end: number, step: number): number[];
+
+export { rangeRight };
Index: node_modules/es-toolkit/dist/math/rangeRight.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/rangeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/rangeRight.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Returns an array of numbers from `end` (exclusive) to `0` (inclusive), decrementing by `1`.
+ *
+ * @param {number} end - The end number of the range (exclusive).
+ * @returns {number[]} An array of numbers from `end` (exclusive) to `0` (inclusive) with a step of `1`.
+ *
+ * @example
+ * // Returns [3, 2, 1, 0]
+ * rangeRight(4);
+ */
+declare function rangeRight(end: number): number[];
+/**
+ * Returns an array of numbers from `end` (exclusive) to `start` (inclusive), decrementing by `1`.
+ *
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} end - The end number of the range (exclusive).
+ * @returns {number[]} An array of numbers from `end` (exclusive) to `start` (inclusive) with a step of `1`.
+ *
+ * @example
+ * // Returns [3, 2, 1]
+ * rangeRight(1, 4);
+ */
+declare function rangeRight(start: number, end: number): number[];
+/**
+ * Returns an array of numbers from `end` (exclusive) to `start` (inclusive), decrementing by `step`.
+ *
+ * @param {number} start - The starting number of the range (inclusive).
+ * @param {number} end - The end number of the range (exclusive).
+ * @param {number} step - The step value for the range.
+ * @returns {number[]} An array of numbers from `end` (exclusive) to `start` (inclusive) with the specified `step`.
+ *
+ * @example
+ * // Returns [15, 10, 5, 0]
+ * rangeRight(0, 20, 5);
+ */
+declare function rangeRight(start: number, end: number, step: number): number[];
+
+export { rangeRight };
Index: node_modules/es-toolkit/dist/math/rangeRight.js
===================================================================
--- node_modules/es-toolkit/dist/math/rangeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/rangeRight.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function rangeRight(start, end, step = 1) {
+    if (end == null) {
+        end = start;
+        start = 0;
+    }
+    if (!Number.isInteger(step) || step === 0) {
+        throw new Error(`The step value must be a non-zero integer.`);
+    }
+    const length = Math.max(Math.ceil((end - start) / step), 0);
+    const result = new Array(length);
+    for (let i = 0; i < length; i++) {
+        result[i] = start + (length - i - 1) * step;
+    }
+    return result;
+}
+
+exports.rangeRight = rangeRight;
Index: node_modules/es-toolkit/dist/math/rangeRight.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/rangeRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/rangeRight.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+function rangeRight(start, end, step = 1) {
+    if (end == null) {
+        end = start;
+        start = 0;
+    }
+    if (!Number.isInteger(step) || step === 0) {
+        throw new Error(`The step value must be a non-zero integer.`);
+    }
+    const length = Math.max(Math.ceil((end - start) / step), 0);
+    const result = new Array(length);
+    for (let i = 0; i < length; i++) {
+        result[i] = start + (length - i - 1) * step;
+    }
+    return result;
+}
+
+export { rangeRight };
Index: node_modules/es-toolkit/dist/math/round.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/round.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/round.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Rounds a number to a specified precision.
+ *
+ * This function takes a number and an optional precision value, and returns the number rounded
+ * to the specified number of decimal places.
+ *
+ * @param {number} value - The number to round.
+ * @param {number} [precision=0] - The number of decimal places to round to. Defaults to 0.
+ * @returns {number} The rounded number.
+ * @throws {Error} Throws an error if `Precision` is not integer.
+ *
+ * @example
+ * const result1 = round(1.2345); // result1 will be 1
+ * const result2 = round(1.2345, 2); // result2 will be 1.23
+ * const result3 = round(1.2345, 3); // result3 will be 1.235
+ * const result4 = round(1.2345, 3.1); // This will throw an error
+ */
+declare function round(value: number, precision?: number): number;
+
+export { round };
Index: node_modules/es-toolkit/dist/math/round.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/round.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/round.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Rounds a number to a specified precision.
+ *
+ * This function takes a number and an optional precision value, and returns the number rounded
+ * to the specified number of decimal places.
+ *
+ * @param {number} value - The number to round.
+ * @param {number} [precision=0] - The number of decimal places to round to. Defaults to 0.
+ * @returns {number} The rounded number.
+ * @throws {Error} Throws an error if `Precision` is not integer.
+ *
+ * @example
+ * const result1 = round(1.2345); // result1 will be 1
+ * const result2 = round(1.2345, 2); // result2 will be 1.23
+ * const result3 = round(1.2345, 3); // result3 will be 1.235
+ * const result4 = round(1.2345, 3.1); // This will throw an error
+ */
+declare function round(value: number, precision?: number): number;
+
+export { round };
Index: node_modules/es-toolkit/dist/math/round.js
===================================================================
--- node_modules/es-toolkit/dist/math/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function round(value, precision = 0) {
+    if (!Number.isInteger(precision)) {
+        throw new Error('Precision must be an integer.');
+    }
+    const multiplier = Math.pow(10, precision);
+    return Math.round(value * multiplier) / multiplier;
+}
+
+exports.round = round;
Index: node_modules/es-toolkit/dist/math/round.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/round.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/round.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+function round(value, precision = 0) {
+    if (!Number.isInteger(precision)) {
+        throw new Error('Precision must be an integer.');
+    }
+    const multiplier = Math.pow(10, precision);
+    return Math.round(value * multiplier) / multiplier;
+}
+
+export { round };
Index: node_modules/es-toolkit/dist/math/sum.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/sum.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/sum.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Calculates the sum of an array of numbers.
+ *
+ * This function takes an array of numbers and returns the sum of all the elements in the array.
+ *
+ * @param {number[]} nums - An array of numbers to be summed.
+ * @returns {number} The sum of all the numbers in the array.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * const result = sum(numbers);
+ * // result will be 15
+ */
+declare function sum(nums: readonly number[]): number;
+
+export { sum };
Index: node_modules/es-toolkit/dist/math/sum.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/sum.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/sum.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Calculates the sum of an array of numbers.
+ *
+ * This function takes an array of numbers and returns the sum of all the elements in the array.
+ *
+ * @param {number[]} nums - An array of numbers to be summed.
+ * @returns {number} The sum of all the numbers in the array.
+ *
+ * @example
+ * const numbers = [1, 2, 3, 4, 5];
+ * const result = sum(numbers);
+ * // result will be 15
+ */
+declare function sum(nums: readonly number[]): number;
+
+export { sum };
Index: node_modules/es-toolkit/dist/math/sum.js
===================================================================
--- node_modules/es-toolkit/dist/math/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function sum(nums) {
+    let result = 0;
+    for (let i = 0; i < nums.length; i++) {
+        result += nums[i];
+    }
+    return result;
+}
+
+exports.sum = sum;
Index: node_modules/es-toolkit/dist/math/sum.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/sum.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/sum.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+function sum(nums) {
+    let result = 0;
+    for (let i = 0; i < nums.length; i++) {
+        result += nums[i];
+    }
+    return result;
+}
+
+export { sum };
Index: node_modules/es-toolkit/dist/math/sumBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/math/sumBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/sumBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Calculates the sum of an array of numbers when applying
+ * the `getValue` function to each element.
+ *
+ * If the array is empty, this function returns `0`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items An array to calculate the sum.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {number} The sum of all the numbers as determined by the `getValue` function.
+ *
+ * @example
+ * sumBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: 6
+ * sumBy([], x => x.a); // Returns: 0
+ */
+declare function sumBy<T>(items: readonly T[], getValue: (element: T) => number): number;
+
+export { sumBy };
Index: node_modules/es-toolkit/dist/math/sumBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/math/sumBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/sumBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Calculates the sum of an array of numbers when applying
+ * the `getValue` function to each element.
+ *
+ * If the array is empty, this function returns `0`.
+ *
+ * @template T - The type of elements in the array.
+ * @param {T[]} items An array to calculate the sum.
+ * @param {(element: T) => number} getValue A function that selects a numeric value from each element.
+ * @returns {number} The sum of all the numbers as determined by the `getValue` function.
+ *
+ * @example
+ * sumBy([{ a: 1 }, { a: 2 }, { a: 3 }], x => x.a); // Returns: 6
+ * sumBy([], x => x.a); // Returns: 0
+ */
+declare function sumBy<T>(items: readonly T[], getValue: (element: T) => number): number;
+
+export { sumBy };
Index: node_modules/es-toolkit/dist/math/sumBy.js
===================================================================
--- node_modules/es-toolkit/dist/math/sumBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/sumBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function sumBy(items, getValue) {
+    let result = 0;
+    for (let i = 0; i < items.length; i++) {
+        result += getValue(items[i]);
+    }
+    return result;
+}
+
+exports.sumBy = sumBy;
Index: node_modules/es-toolkit/dist/math/sumBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/math/sumBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/math/sumBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+function sumBy(items, getValue) {
+    let result = 0;
+    for (let i = 0; i < items.length; i++) {
+        result += getValue(items[i]);
+    }
+    return result;
+}
+
+export { sumBy };
Index: node_modules/es-toolkit/dist/object/clone.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/clone.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/clone.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates a shallow clone of the given object.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @returns {T} - A shallow clone of the given object.
+ *
+ * @example
+ * // Clone a primitive values
+ * const num = 29;
+ * const clonedNum = clone(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num) ; // true
+ *
+ * @example
+ * // Clone an array
+ * const arr = [1, 2, 3];
+ * const clonedArr = clone(arr);
+ * console.log(clonedArr); // [1, 2, 3]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an object
+ * const obj = { a: 1, b: 'es-toolkit', c: [1, 2, 3] };
+ * const clonedObj = clone(obj);
+ * console.log(clonedObj); // { a: 1, b: 'es-toolkit', c: [1, 2, 3] }
+ * console.log(clonedObj === obj); // false
+ */
+declare function clone<T>(obj: T): T;
+
+export { clone };
Index: node_modules/es-toolkit/dist/object/clone.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/clone.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/clone.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Creates a shallow clone of the given object.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @returns {T} - A shallow clone of the given object.
+ *
+ * @example
+ * // Clone a primitive values
+ * const num = 29;
+ * const clonedNum = clone(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num) ; // true
+ *
+ * @example
+ * // Clone an array
+ * const arr = [1, 2, 3];
+ * const clonedArr = clone(arr);
+ * console.log(clonedArr); // [1, 2, 3]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an object
+ * const obj = { a: 1, b: 'es-toolkit', c: [1, 2, 3] };
+ * const clonedObj = clone(obj);
+ * console.log(clonedObj); // { a: 1, b: 'es-toolkit', c: [1, 2, 3] }
+ * console.log(clonedObj === obj); // false
+ */
+declare function clone<T>(obj: T): T;
+
+export { clone };
Index: node_modules/es-toolkit/dist/object/clone.js
===================================================================
--- node_modules/es-toolkit/dist/object/clone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/clone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isPrimitive = require('../predicate/isPrimitive.js');
+const isTypedArray = require('../predicate/isTypedArray.js');
+
+function clone(obj) {
+    if (isPrimitive.isPrimitive(obj)) {
+        return obj;
+    }
+    if (Array.isArray(obj) ||
+        isTypedArray.isTypedArray(obj) ||
+        obj instanceof ArrayBuffer ||
+        (typeof SharedArrayBuffer !== 'undefined' && obj instanceof SharedArrayBuffer)) {
+        return obj.slice(0);
+    }
+    const prototype = Object.getPrototypeOf(obj);
+    const Constructor = prototype.constructor;
+    if (obj instanceof Date || obj instanceof Map || obj instanceof Set) {
+        return new Constructor(obj);
+    }
+    if (obj instanceof RegExp) {
+        const newRegExp = new Constructor(obj);
+        newRegExp.lastIndex = obj.lastIndex;
+        return newRegExp;
+    }
+    if (obj instanceof DataView) {
+        return new Constructor(obj.buffer.slice(0));
+    }
+    if (obj instanceof Error) {
+        const newError = new Constructor(obj.message);
+        newError.stack = obj.stack;
+        newError.name = obj.name;
+        newError.cause = obj.cause;
+        return newError;
+    }
+    if (typeof File !== 'undefined' && obj instanceof File) {
+        const newFile = new Constructor([obj], obj.name, { type: obj.type, lastModified: obj.lastModified });
+        return newFile;
+    }
+    if (typeof obj === 'object') {
+        const newObject = Object.create(prototype);
+        return Object.assign(newObject, obj);
+    }
+    return obj;
+}
+
+exports.clone = clone;
Index: node_modules/es-toolkit/dist/object/clone.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/clone.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/clone.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+import { isPrimitive } from '../predicate/isPrimitive.mjs';
+import { isTypedArray } from '../predicate/isTypedArray.mjs';
+
+function clone(obj) {
+    if (isPrimitive(obj)) {
+        return obj;
+    }
+    if (Array.isArray(obj) ||
+        isTypedArray(obj) ||
+        obj instanceof ArrayBuffer ||
+        (typeof SharedArrayBuffer !== 'undefined' && obj instanceof SharedArrayBuffer)) {
+        return obj.slice(0);
+    }
+    const prototype = Object.getPrototypeOf(obj);
+    const Constructor = prototype.constructor;
+    if (obj instanceof Date || obj instanceof Map || obj instanceof Set) {
+        return new Constructor(obj);
+    }
+    if (obj instanceof RegExp) {
+        const newRegExp = new Constructor(obj);
+        newRegExp.lastIndex = obj.lastIndex;
+        return newRegExp;
+    }
+    if (obj instanceof DataView) {
+        return new Constructor(obj.buffer.slice(0));
+    }
+    if (obj instanceof Error) {
+        const newError = new Constructor(obj.message);
+        newError.stack = obj.stack;
+        newError.name = obj.name;
+        newError.cause = obj.cause;
+        return newError;
+    }
+    if (typeof File !== 'undefined' && obj instanceof File) {
+        const newFile = new Constructor([obj], obj.name, { type: obj.type, lastModified: obj.lastModified });
+        return newFile;
+    }
+    if (typeof obj === 'object') {
+        const newObject = Object.create(prototype);
+        return Object.assign(newObject, obj);
+    }
+    return obj;
+}
+
+export { clone };
Index: node_modules/es-toolkit/dist/object/cloneDeep.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/cloneDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/cloneDeep.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+/**
+ * Creates a deep clone of the given object.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @returns {T} - A deep clone of the given object.
+ *
+ * @example
+ * // Clone a primitive values
+ * const num = 29;
+ * const clonedNum = clone(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num) ; // true
+ *
+ * @example
+ * // Clone an array
+ * const arr = [1, 2, 3];
+ * const clonedArr = clone(arr);
+ * console.log(clonedArr); // [1, 2, 3]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an array with nested objects
+ * const arr = [1, { a: 1 }, [1, 2, 3]];
+ * const clonedArr = clone(arr);
+ * arr[1].a = 2;
+ * console.log(arr); // [2, { a: 2 }, [1, 2, 3]]
+ * console.log(clonedArr); // [1, { a: 1 }, [1, 2, 3]]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an object
+ * const obj = { a: 1, b: 'es-toolkit', c: [1, 2, 3] };
+ * const clonedObj = clone(obj);
+ * console.log(clonedObj); // { a: 1, b: 'es-toolkit', c: [1, 2, 3] }
+ * console.log(clonedObj === obj); // false
+ *
+ * @example
+ * // Clone an object with nested objects
+ * const obj = { a: 1, b: { c: 1 } };
+ * const clonedObj = clone(obj);
+ * obj.b.c = 2;
+ * console.log(obj); // { a: 1, b: { c: 2 } }
+ * console.log(clonedObj); // { a: 1, b: { c: 1 } }
+ * console.log(clonedObj === obj); // false
+ */
+declare function cloneDeep<T>(obj: T): T;
+
+export { cloneDeep };
Index: node_modules/es-toolkit/dist/object/cloneDeep.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/cloneDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/cloneDeep.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+/**
+ * Creates a deep clone of the given object.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @returns {T} - A deep clone of the given object.
+ *
+ * @example
+ * // Clone a primitive values
+ * const num = 29;
+ * const clonedNum = clone(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num) ; // true
+ *
+ * @example
+ * // Clone an array
+ * const arr = [1, 2, 3];
+ * const clonedArr = clone(arr);
+ * console.log(clonedArr); // [1, 2, 3]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an array with nested objects
+ * const arr = [1, { a: 1 }, [1, 2, 3]];
+ * const clonedArr = clone(arr);
+ * arr[1].a = 2;
+ * console.log(arr); // [2, { a: 2 }, [1, 2, 3]]
+ * console.log(clonedArr); // [1, { a: 1 }, [1, 2, 3]]
+ * console.log(clonedArr === arr); // false
+ *
+ * @example
+ * // Clone an object
+ * const obj = { a: 1, b: 'es-toolkit', c: [1, 2, 3] };
+ * const clonedObj = clone(obj);
+ * console.log(clonedObj); // { a: 1, b: 'es-toolkit', c: [1, 2, 3] }
+ * console.log(clonedObj === obj); // false
+ *
+ * @example
+ * // Clone an object with nested objects
+ * const obj = { a: 1, b: { c: 1 } };
+ * const clonedObj = clone(obj);
+ * obj.b.c = 2;
+ * console.log(obj); // { a: 1, b: { c: 2 } }
+ * console.log(clonedObj); // { a: 1, b: { c: 1 } }
+ * console.log(clonedObj === obj); // false
+ */
+declare function cloneDeep<T>(obj: T): T;
+
+export { cloneDeep };
Index: node_modules/es-toolkit/dist/object/cloneDeep.js
===================================================================
--- node_modules/es-toolkit/dist/object/cloneDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/cloneDeep.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const cloneDeepWith = require('./cloneDeepWith.js');
+
+function cloneDeep(obj) {
+    return cloneDeepWith.cloneDeepWithImpl(obj, undefined, obj, new Map(), undefined);
+}
+
+exports.cloneDeep = cloneDeep;
Index: node_modules/es-toolkit/dist/object/cloneDeep.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/cloneDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/cloneDeep.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { cloneDeepWithImpl } from './cloneDeepWith.mjs';
+
+function cloneDeep(obj) {
+    return cloneDeepWithImpl(obj, undefined, obj, new Map(), undefined);
+}
+
+export { cloneDeep };
Index: node_modules/es-toolkit/dist/object/cloneDeepWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/cloneDeepWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/cloneDeepWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+/**
+ * Deeply clones the given object.
+ *
+ * You can customize the deep cloning process using the `cloneValue` function.
+ * The function takes the current value `value`, the property name `key`, and the entire object `obj` as arguments.
+ * If the function returns a value, that value is used;
+ * if it returns `undefined`, the default cloning method is used.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @param {Function} [cloneValue] - A function to customize the cloning process.
+ * @returns {T} - A deep clone of the given object.
+ *
+ * @example
+ * // Clone a primitive value
+ * const num = 29;
+ * const clonedNum = cloneDeepWith(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num); // true
+ *
+ * @example
+ * // Clone an object with a customizer
+ * const obj = { a: 1, b: 2 };
+ * const clonedObj = cloneDeepWith(obj, (value) => {
+ *   if (typeof value === 'number') {
+ *     return value * 2; // Double the number
+ *   }
+ * });
+ * console.log(clonedObj); // { a: 2, b: 4 }
+ * console.log(clonedObj === obj); // false
+ *
+ * @example
+ * // Clone an array with a customizer
+ * const arr = [1, 2, 3];
+ * const clonedArr = cloneDeepWith(arr, (value) => {
+ *   return value + 1; // Increment each value
+ * });
+ * console.log(clonedArr); // [2, 3, 4]
+ * console.log(clonedArr === arr); // false
+ */
+declare function cloneDeepWith<T>(obj: T, cloneValue: (value: any, key: PropertyKey | undefined, obj: T, stack: Map<any, any>) => any): T;
+
+export { cloneDeepWith };
Index: node_modules/es-toolkit/dist/object/cloneDeepWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/cloneDeepWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/cloneDeepWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+/**
+ * Deeply clones the given object.
+ *
+ * You can customize the deep cloning process using the `cloneValue` function.
+ * The function takes the current value `value`, the property name `key`, and the entire object `obj` as arguments.
+ * If the function returns a value, that value is used;
+ * if it returns `undefined`, the default cloning method is used.
+ *
+ * @template T - The type of the object.
+ * @param {T} obj - The object to clone.
+ * @param {Function} [cloneValue] - A function to customize the cloning process.
+ * @returns {T} - A deep clone of the given object.
+ *
+ * @example
+ * // Clone a primitive value
+ * const num = 29;
+ * const clonedNum = cloneDeepWith(num);
+ * console.log(clonedNum); // 29
+ * console.log(clonedNum === num); // true
+ *
+ * @example
+ * // Clone an object with a customizer
+ * const obj = { a: 1, b: 2 };
+ * const clonedObj = cloneDeepWith(obj, (value) => {
+ *   if (typeof value === 'number') {
+ *     return value * 2; // Double the number
+ *   }
+ * });
+ * console.log(clonedObj); // { a: 2, b: 4 }
+ * console.log(clonedObj === obj); // false
+ *
+ * @example
+ * // Clone an array with a customizer
+ * const arr = [1, 2, 3];
+ * const clonedArr = cloneDeepWith(arr, (value) => {
+ *   return value + 1; // Increment each value
+ * });
+ * console.log(clonedArr); // [2, 3, 4]
+ * console.log(clonedArr === arr); // false
+ */
+declare function cloneDeepWith<T>(obj: T, cloneValue: (value: any, key: PropertyKey | undefined, obj: T, stack: Map<any, any>) => any): T;
+
+export { cloneDeepWith };
Index: node_modules/es-toolkit/dist/object/cloneDeepWith.js
===================================================================
--- node_modules/es-toolkit/dist/object/cloneDeepWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/cloneDeepWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,160 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const getSymbols = require('../compat/_internal/getSymbols.js');
+const getTag = require('../compat/_internal/getTag.js');
+const tags = require('../compat/_internal/tags.js');
+const isPrimitive = require('../predicate/isPrimitive.js');
+const isTypedArray = require('../predicate/isTypedArray.js');
+
+function cloneDeepWith(obj, cloneValue) {
+    return cloneDeepWithImpl(obj, undefined, obj, new Map(), cloneValue);
+}
+function cloneDeepWithImpl(valueToClone, keyToClone, objectToClone, stack = new Map(), cloneValue = undefined) {
+    const cloned = cloneValue?.(valueToClone, keyToClone, objectToClone, stack);
+    if (cloned !== undefined) {
+        return cloned;
+    }
+    if (isPrimitive.isPrimitive(valueToClone)) {
+        return valueToClone;
+    }
+    if (stack.has(valueToClone)) {
+        return stack.get(valueToClone);
+    }
+    if (Array.isArray(valueToClone)) {
+        const result = new Array(valueToClone.length);
+        stack.set(valueToClone, result);
+        for (let i = 0; i < valueToClone.length; i++) {
+            result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);
+        }
+        if (Object.hasOwn(valueToClone, 'index')) {
+            result.index = valueToClone.index;
+        }
+        if (Object.hasOwn(valueToClone, 'input')) {
+            result.input = valueToClone.input;
+        }
+        return result;
+    }
+    if (valueToClone instanceof Date) {
+        return new Date(valueToClone.getTime());
+    }
+    if (valueToClone instanceof RegExp) {
+        const result = new RegExp(valueToClone.source, valueToClone.flags);
+        result.lastIndex = valueToClone.lastIndex;
+        return result;
+    }
+    if (valueToClone instanceof Map) {
+        const result = new Map();
+        stack.set(valueToClone, result);
+        for (const [key, value] of valueToClone) {
+            result.set(key, cloneDeepWithImpl(value, key, objectToClone, stack, cloneValue));
+        }
+        return result;
+    }
+    if (valueToClone instanceof Set) {
+        const result = new Set();
+        stack.set(valueToClone, result);
+        for (const value of valueToClone) {
+            result.add(cloneDeepWithImpl(value, undefined, objectToClone, stack, cloneValue));
+        }
+        return result;
+    }
+    if (typeof Buffer !== 'undefined' && Buffer.isBuffer(valueToClone)) {
+        return valueToClone.subarray();
+    }
+    if (isTypedArray.isTypedArray(valueToClone)) {
+        const result = new (Object.getPrototypeOf(valueToClone).constructor)(valueToClone.length);
+        stack.set(valueToClone, result);
+        for (let i = 0; i < valueToClone.length; i++) {
+            result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);
+        }
+        return result;
+    }
+    if (valueToClone instanceof ArrayBuffer ||
+        (typeof SharedArrayBuffer !== 'undefined' && valueToClone instanceof SharedArrayBuffer)) {
+        return valueToClone.slice(0);
+    }
+    if (valueToClone instanceof DataView) {
+        const result = new DataView(valueToClone.buffer.slice(0), valueToClone.byteOffset, valueToClone.byteLength);
+        stack.set(valueToClone, result);
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    if (typeof File !== 'undefined' && valueToClone instanceof File) {
+        const result = new File([valueToClone], valueToClone.name, {
+            type: valueToClone.type,
+        });
+        stack.set(valueToClone, result);
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    if (valueToClone instanceof Blob) {
+        const result = new Blob([valueToClone], { type: valueToClone.type });
+        stack.set(valueToClone, result);
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    if (valueToClone instanceof Error) {
+        const result = new valueToClone.constructor();
+        stack.set(valueToClone, result);
+        result.message = valueToClone.message;
+        result.name = valueToClone.name;
+        result.stack = valueToClone.stack;
+        result.cause = valueToClone.cause;
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    if (typeof valueToClone === 'object' && isCloneableObject(valueToClone)) {
+        const result = Object.create(Object.getPrototypeOf(valueToClone));
+        stack.set(valueToClone, result);
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    return valueToClone;
+}
+function copyProperties(target, source, objectToClone = target, stack, cloneValue) {
+    const keys = [...Object.keys(source), ...getSymbols.getSymbols(source)];
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const descriptor = Object.getOwnPropertyDescriptor(target, key);
+        if (descriptor == null || descriptor.writable) {
+            target[key] = cloneDeepWithImpl(source[key], key, objectToClone, stack, cloneValue);
+        }
+    }
+}
+function isCloneableObject(object) {
+    switch (getTag.getTag(object)) {
+        case tags.argumentsTag:
+        case tags.arrayTag:
+        case tags.arrayBufferTag:
+        case tags.dataViewTag:
+        case tags.booleanTag:
+        case tags.dateTag:
+        case tags.float32ArrayTag:
+        case tags.float64ArrayTag:
+        case tags.int8ArrayTag:
+        case tags.int16ArrayTag:
+        case tags.int32ArrayTag:
+        case tags.mapTag:
+        case tags.numberTag:
+        case tags.objectTag:
+        case tags.regexpTag:
+        case tags.setTag:
+        case tags.stringTag:
+        case tags.symbolTag:
+        case tags.uint8ArrayTag:
+        case tags.uint8ClampedArrayTag:
+        case tags.uint16ArrayTag:
+        case tags.uint32ArrayTag: {
+            return true;
+        }
+        default: {
+            return false;
+        }
+    }
+}
+
+exports.cloneDeepWith = cloneDeepWith;
+exports.cloneDeepWithImpl = cloneDeepWithImpl;
+exports.copyProperties = copyProperties;
Index: node_modules/es-toolkit/dist/object/cloneDeepWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/cloneDeepWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/cloneDeepWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,154 @@
+import { getSymbols } from '../compat/_internal/getSymbols.mjs';
+import { getTag } from '../compat/_internal/getTag.mjs';
+import { uint32ArrayTag, uint16ArrayTag, uint8ClampedArrayTag, uint8ArrayTag, symbolTag, stringTag, setTag, regexpTag, objectTag, numberTag, mapTag, int32ArrayTag, int16ArrayTag, int8ArrayTag, float64ArrayTag, float32ArrayTag, dateTag, booleanTag, dataViewTag, arrayBufferTag, arrayTag, argumentsTag } from '../compat/_internal/tags.mjs';
+import { isPrimitive } from '../predicate/isPrimitive.mjs';
+import { isTypedArray } from '../predicate/isTypedArray.mjs';
+
+function cloneDeepWith(obj, cloneValue) {
+    return cloneDeepWithImpl(obj, undefined, obj, new Map(), cloneValue);
+}
+function cloneDeepWithImpl(valueToClone, keyToClone, objectToClone, stack = new Map(), cloneValue = undefined) {
+    const cloned = cloneValue?.(valueToClone, keyToClone, objectToClone, stack);
+    if (cloned !== undefined) {
+        return cloned;
+    }
+    if (isPrimitive(valueToClone)) {
+        return valueToClone;
+    }
+    if (stack.has(valueToClone)) {
+        return stack.get(valueToClone);
+    }
+    if (Array.isArray(valueToClone)) {
+        const result = new Array(valueToClone.length);
+        stack.set(valueToClone, result);
+        for (let i = 0; i < valueToClone.length; i++) {
+            result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);
+        }
+        if (Object.hasOwn(valueToClone, 'index')) {
+            result.index = valueToClone.index;
+        }
+        if (Object.hasOwn(valueToClone, 'input')) {
+            result.input = valueToClone.input;
+        }
+        return result;
+    }
+    if (valueToClone instanceof Date) {
+        return new Date(valueToClone.getTime());
+    }
+    if (valueToClone instanceof RegExp) {
+        const result = new RegExp(valueToClone.source, valueToClone.flags);
+        result.lastIndex = valueToClone.lastIndex;
+        return result;
+    }
+    if (valueToClone instanceof Map) {
+        const result = new Map();
+        stack.set(valueToClone, result);
+        for (const [key, value] of valueToClone) {
+            result.set(key, cloneDeepWithImpl(value, key, objectToClone, stack, cloneValue));
+        }
+        return result;
+    }
+    if (valueToClone instanceof Set) {
+        const result = new Set();
+        stack.set(valueToClone, result);
+        for (const value of valueToClone) {
+            result.add(cloneDeepWithImpl(value, undefined, objectToClone, stack, cloneValue));
+        }
+        return result;
+    }
+    if (typeof Buffer !== 'undefined' && Buffer.isBuffer(valueToClone)) {
+        return valueToClone.subarray();
+    }
+    if (isTypedArray(valueToClone)) {
+        const result = new (Object.getPrototypeOf(valueToClone).constructor)(valueToClone.length);
+        stack.set(valueToClone, result);
+        for (let i = 0; i < valueToClone.length; i++) {
+            result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);
+        }
+        return result;
+    }
+    if (valueToClone instanceof ArrayBuffer ||
+        (typeof SharedArrayBuffer !== 'undefined' && valueToClone instanceof SharedArrayBuffer)) {
+        return valueToClone.slice(0);
+    }
+    if (valueToClone instanceof DataView) {
+        const result = new DataView(valueToClone.buffer.slice(0), valueToClone.byteOffset, valueToClone.byteLength);
+        stack.set(valueToClone, result);
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    if (typeof File !== 'undefined' && valueToClone instanceof File) {
+        const result = new File([valueToClone], valueToClone.name, {
+            type: valueToClone.type,
+        });
+        stack.set(valueToClone, result);
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    if (valueToClone instanceof Blob) {
+        const result = new Blob([valueToClone], { type: valueToClone.type });
+        stack.set(valueToClone, result);
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    if (valueToClone instanceof Error) {
+        const result = new valueToClone.constructor();
+        stack.set(valueToClone, result);
+        result.message = valueToClone.message;
+        result.name = valueToClone.name;
+        result.stack = valueToClone.stack;
+        result.cause = valueToClone.cause;
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    if (typeof valueToClone === 'object' && isCloneableObject(valueToClone)) {
+        const result = Object.create(Object.getPrototypeOf(valueToClone));
+        stack.set(valueToClone, result);
+        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
+        return result;
+    }
+    return valueToClone;
+}
+function copyProperties(target, source, objectToClone = target, stack, cloneValue) {
+    const keys = [...Object.keys(source), ...getSymbols(source)];
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const descriptor = Object.getOwnPropertyDescriptor(target, key);
+        if (descriptor == null || descriptor.writable) {
+            target[key] = cloneDeepWithImpl(source[key], key, objectToClone, stack, cloneValue);
+        }
+    }
+}
+function isCloneableObject(object) {
+    switch (getTag(object)) {
+        case argumentsTag:
+        case arrayTag:
+        case arrayBufferTag:
+        case dataViewTag:
+        case booleanTag:
+        case dateTag:
+        case float32ArrayTag:
+        case float64ArrayTag:
+        case int8ArrayTag:
+        case int16ArrayTag:
+        case int32ArrayTag:
+        case mapTag:
+        case numberTag:
+        case objectTag:
+        case regexpTag:
+        case setTag:
+        case stringTag:
+        case symbolTag:
+        case uint8ArrayTag:
+        case uint8ClampedArrayTag:
+        case uint16ArrayTag:
+        case uint32ArrayTag: {
+            return true;
+        }
+        default: {
+            return false;
+        }
+    }
+}
+
+export { cloneDeepWith, cloneDeepWithImpl, copyProperties };
Index: node_modules/es-toolkit/dist/object/findKey.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/findKey.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/findKey.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Finds the key of the first element in the object that satisfies the provided testing function.
+ *
+ * @param {T} obj - The object to search.
+ * @param {(value: T[keyof T], key: keyof T, obj: T) => boolean} predicate - The function to execute on each value in the object. It takes three arguments:
+ *   - value: The current value being processed in the object.
+ *   - key: The key of the current value being processed in the object.
+ *   - obj: The object that findKey was called upon.
+ * @returns {keyof T | undefined} The key of the first element in the object that passes the test, or undefined if no element passes.
+ *
+ * @example
+ * const users = {
+ *   'barney':  { 'age': 36, 'active': true },
+ *   'fred':    { 'age': 40, 'active': false },
+ *   'pebbles': { 'age': 1,  'active': true }
+ * };
+ * findKey(users, function(o) { return o.age < 40; }); => 'barney'
+ */
+declare function findKey<T extends Record<any, any>>(obj: T, predicate: (value: T[keyof T], key: keyof T, obj: T) => boolean): keyof T | undefined;
+
+export { findKey };
Index: node_modules/es-toolkit/dist/object/findKey.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/findKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/findKey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Finds the key of the first element in the object that satisfies the provided testing function.
+ *
+ * @param {T} obj - The object to search.
+ * @param {(value: T[keyof T], key: keyof T, obj: T) => boolean} predicate - The function to execute on each value in the object. It takes three arguments:
+ *   - value: The current value being processed in the object.
+ *   - key: The key of the current value being processed in the object.
+ *   - obj: The object that findKey was called upon.
+ * @returns {keyof T | undefined} The key of the first element in the object that passes the test, or undefined if no element passes.
+ *
+ * @example
+ * const users = {
+ *   'barney':  { 'age': 36, 'active': true },
+ *   'fred':    { 'age': 40, 'active': false },
+ *   'pebbles': { 'age': 1,  'active': true }
+ * };
+ * findKey(users, function(o) { return o.age < 40; }); => 'barney'
+ */
+declare function findKey<T extends Record<any, any>>(obj: T, predicate: (value: T[keyof T], key: keyof T, obj: T) => boolean): keyof T | undefined;
+
+export { findKey };
Index: node_modules/es-toolkit/dist/object/findKey.js
===================================================================
--- node_modules/es-toolkit/dist/object/findKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/findKey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function findKey(obj, predicate) {
+    const keys = Object.keys(obj);
+    return keys.find(key => predicate(obj[key], key, obj));
+}
+
+exports.findKey = findKey;
Index: node_modules/es-toolkit/dist/object/findKey.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/findKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/findKey.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+function findKey(obj, predicate) {
+    const keys = Object.keys(obj);
+    return keys.find(key => predicate(obj[key], key, obj));
+}
+
+export { findKey };
Index: node_modules/es-toolkit/dist/object/flattenObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/flattenObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/flattenObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+interface FlattenObjectOptions {
+    /**
+     * The delimiter to use between nested keys.
+     * @default '.'
+     */
+    delimiter?: string;
+}
+/**
+ * Flattens a nested object into a single level object with delimiter-separated keys.
+ *
+ * @param {object} object - The object to flatten.
+ * @param {string} [options.delimiter='.'] - The delimiter to use between nested keys.
+ * @returns {Record<string, any>} - The flattened object.
+ *
+ * @example
+ * const nestedObject = {
+ *   a: {
+ *     b: {
+ *       c: 1
+ *     }
+ *   },
+ *   d: [2, 3]
+ * };
+ *
+ * const flattened = flattenObject(nestedObject);
+ * console.log(flattened);
+ * // Output:
+ * // {
+ * //   'a.b.c': 1,
+ * //   'd.0': 2,
+ * //   'd.1': 3
+ * // }
+ */
+declare function flattenObject(object: object, { delimiter }?: FlattenObjectOptions): Record<string, any>;
+
+export { flattenObject };
Index: node_modules/es-toolkit/dist/object/flattenObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/flattenObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/flattenObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+interface FlattenObjectOptions {
+    /**
+     * The delimiter to use between nested keys.
+     * @default '.'
+     */
+    delimiter?: string;
+}
+/**
+ * Flattens a nested object into a single level object with delimiter-separated keys.
+ *
+ * @param {object} object - The object to flatten.
+ * @param {string} [options.delimiter='.'] - The delimiter to use between nested keys.
+ * @returns {Record<string, any>} - The flattened object.
+ *
+ * @example
+ * const nestedObject = {
+ *   a: {
+ *     b: {
+ *       c: 1
+ *     }
+ *   },
+ *   d: [2, 3]
+ * };
+ *
+ * const flattened = flattenObject(nestedObject);
+ * console.log(flattened);
+ * // Output:
+ * // {
+ * //   'a.b.c': 1,
+ * //   'd.0': 2,
+ * //   'd.1': 3
+ * // }
+ */
+declare function flattenObject(object: object, { delimiter }?: FlattenObjectOptions): Record<string, any>;
+
+export { flattenObject };
Index: node_modules/es-toolkit/dist/object/flattenObject.js
===================================================================
--- node_modules/es-toolkit/dist/object/flattenObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/flattenObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isPlainObject = require('../predicate/isPlainObject.js');
+
+function flattenObject(object, { delimiter = '.' } = {}) {
+    return flattenObjectImpl(object, '', delimiter);
+}
+function flattenObjectImpl(object, prefix = '', delimiter = '.') {
+    const result = {};
+    const keys = Object.keys(object);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        const prefixedKey = prefix ? `${prefix}${delimiter}${key}` : key;
+        if (isPlainObject.isPlainObject(value) && Object.keys(value).length > 0) {
+            Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
+            continue;
+        }
+        if (Array.isArray(value)) {
+            Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
+            continue;
+        }
+        result[prefixedKey] = value;
+    }
+    return result;
+}
+
+exports.flattenObject = flattenObject;
Index: node_modules/es-toolkit/dist/object/flattenObject.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/flattenObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/flattenObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import { isPlainObject } from '../predicate/isPlainObject.mjs';
+
+function flattenObject(object, { delimiter = '.' } = {}) {
+    return flattenObjectImpl(object, '', delimiter);
+}
+function flattenObjectImpl(object, prefix = '', delimiter = '.') {
+    const result = {};
+    const keys = Object.keys(object);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        const prefixedKey = prefix ? `${prefix}${delimiter}${key}` : key;
+        if (isPlainObject(value) && Object.keys(value).length > 0) {
+            Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
+            continue;
+        }
+        if (Array.isArray(value)) {
+            Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
+            continue;
+        }
+        result[prefixedKey] = value;
+    }
+    return result;
+}
+
+export { flattenObject };
Index: node_modules/es-toolkit/dist/object/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+export { clone } from './clone.mjs';
+export { cloneDeep } from './cloneDeep.mjs';
+export { cloneDeepWith } from './cloneDeepWith.mjs';
+export { findKey } from './findKey.mjs';
+export { flattenObject } from './flattenObject.mjs';
+export { invert } from './invert.mjs';
+export { mapKeys } from './mapKeys.mjs';
+export { mapValues } from './mapValues.mjs';
+export { merge } from './merge.mjs';
+export { mergeWith } from './mergeWith.mjs';
+export { omit } from './omit.mjs';
+export { omitBy } from './omitBy.mjs';
+export { pick } from './pick.mjs';
+export { pickBy } from './pickBy.mjs';
+export { toCamelCaseKeys } from './toCamelCaseKeys.mjs';
+export { toMerged } from './toMerged.mjs';
+export { toSnakeCaseKeys } from './toSnakeCaseKeys.mjs';
Index: node_modules/es-toolkit/dist/object/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+export { clone } from './clone.js';
+export { cloneDeep } from './cloneDeep.js';
+export { cloneDeepWith } from './cloneDeepWith.js';
+export { findKey } from './findKey.js';
+export { flattenObject } from './flattenObject.js';
+export { invert } from './invert.js';
+export { mapKeys } from './mapKeys.js';
+export { mapValues } from './mapValues.js';
+export { merge } from './merge.js';
+export { mergeWith } from './mergeWith.js';
+export { omit } from './omit.js';
+export { omitBy } from './omitBy.js';
+export { pick } from './pick.js';
+export { pickBy } from './pickBy.js';
+export { toCamelCaseKeys } from './toCamelCaseKeys.js';
+export { toMerged } from './toMerged.js';
+export { toSnakeCaseKeys } from './toSnakeCaseKeys.js';
Index: node_modules/es-toolkit/dist/object/index.js
===================================================================
--- node_modules/es-toolkit/dist/object/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const clone = require('./clone.js');
+const cloneDeep = require('./cloneDeep.js');
+const cloneDeepWith = require('./cloneDeepWith.js');
+const findKey = require('./findKey.js');
+const flattenObject = require('./flattenObject.js');
+const invert = require('./invert.js');
+const mapKeys = require('./mapKeys.js');
+const mapValues = require('./mapValues.js');
+const merge = require('./merge.js');
+const mergeWith = require('./mergeWith.js');
+const omit = require('./omit.js');
+const omitBy = require('./omitBy.js');
+const pick = require('./pick.js');
+const pickBy = require('./pickBy.js');
+const toCamelCaseKeys = require('./toCamelCaseKeys.js');
+const toMerged = require('./toMerged.js');
+const toSnakeCaseKeys = require('./toSnakeCaseKeys.js');
+
+
+
+exports.clone = clone.clone;
+exports.cloneDeep = cloneDeep.cloneDeep;
+exports.cloneDeepWith = cloneDeepWith.cloneDeepWith;
+exports.findKey = findKey.findKey;
+exports.flattenObject = flattenObject.flattenObject;
+exports.invert = invert.invert;
+exports.mapKeys = mapKeys.mapKeys;
+exports.mapValues = mapValues.mapValues;
+exports.merge = merge.merge;
+exports.mergeWith = mergeWith.mergeWith;
+exports.omit = omit.omit;
+exports.omitBy = omitBy.omitBy;
+exports.pick = pick.pick;
+exports.pickBy = pickBy.pickBy;
+exports.toCamelCaseKeys = toCamelCaseKeys.toCamelCaseKeys;
+exports.toMerged = toMerged.toMerged;
+exports.toSnakeCaseKeys = toSnakeCaseKeys.toSnakeCaseKeys;
Index: node_modules/es-toolkit/dist/object/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+export { clone } from './clone.mjs';
+export { cloneDeep } from './cloneDeep.mjs';
+export { cloneDeepWith } from './cloneDeepWith.mjs';
+export { findKey } from './findKey.mjs';
+export { flattenObject } from './flattenObject.mjs';
+export { invert } from './invert.mjs';
+export { mapKeys } from './mapKeys.mjs';
+export { mapValues } from './mapValues.mjs';
+export { merge } from './merge.mjs';
+export { mergeWith } from './mergeWith.mjs';
+export { omit } from './omit.mjs';
+export { omitBy } from './omitBy.mjs';
+export { pick } from './pick.mjs';
+export { pickBy } from './pickBy.mjs';
+export { toCamelCaseKeys } from './toCamelCaseKeys.mjs';
+export { toMerged } from './toMerged.mjs';
+export { toSnakeCaseKeys } from './toSnakeCaseKeys.mjs';
Index: node_modules/es-toolkit/dist/object/invert.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/invert.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/invert.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Inverts the keys and values of an object. The keys of the input object become the values of the output object and vice versa.
+ *
+ * This function takes an object and creates a new object by inverting its keys and values. If the input object has duplicate values,
+ * the key of the last occurrence will be used as the value for the new key in the output object. It effectively creates a reverse mapping
+ * of the input object's key-value pairs.
+ *
+ * @template K - Type of the keys in the input object (string, number, symbol)
+ * @template V - Type of the values in the input object (string, number, symbol)
+ * @param {Record<K, V>} obj - The input object whose keys and values are to be inverted
+ * @returns {Record<V, K>} - A new object with keys and values inverted
+ *
+ * @example
+ * invert({ a: 1, b: 2, c: 3 }); // { 1: 'a', 2: 'b', 3: 'c' }
+ * invert({ 1: 'a', 2: 'b', 3: 'c' }); // { a: '1', b: '2', c: '3' }
+ * invert({ a: 1, 2: 'b', c: 3, 4: 'd' }); // { 1: 'a', b: '2', 3: 'c', d: '4' }
+ * invert({ a: Symbol('sym1'), b: Symbol('sym2') }); // { [Symbol('sym1')]: 'a', [Symbol('sym2')]: 'b' }
+ */
+declare function invert<K extends PropertyKey, V extends PropertyKey>(obj: Record<K, V>): Record<V, K>;
+
+export { invert };
Index: node_modules/es-toolkit/dist/object/invert.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/invert.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/invert.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Inverts the keys and values of an object. The keys of the input object become the values of the output object and vice versa.
+ *
+ * This function takes an object and creates a new object by inverting its keys and values. If the input object has duplicate values,
+ * the key of the last occurrence will be used as the value for the new key in the output object. It effectively creates a reverse mapping
+ * of the input object's key-value pairs.
+ *
+ * @template K - Type of the keys in the input object (string, number, symbol)
+ * @template V - Type of the values in the input object (string, number, symbol)
+ * @param {Record<K, V>} obj - The input object whose keys and values are to be inverted
+ * @returns {Record<V, K>} - A new object with keys and values inverted
+ *
+ * @example
+ * invert({ a: 1, b: 2, c: 3 }); // { 1: 'a', 2: 'b', 3: 'c' }
+ * invert({ 1: 'a', 2: 'b', 3: 'c' }); // { a: '1', b: '2', c: '3' }
+ * invert({ a: 1, 2: 'b', c: 3, 4: 'd' }); // { 1: 'a', b: '2', 3: 'c', d: '4' }
+ * invert({ a: Symbol('sym1'), b: Symbol('sym2') }); // { [Symbol('sym1')]: 'a', [Symbol('sym2')]: 'b' }
+ */
+declare function invert<K extends PropertyKey, V extends PropertyKey>(obj: Record<K, V>): Record<V, K>;
+
+export { invert };
Index: node_modules/es-toolkit/dist/object/invert.js
===================================================================
--- node_modules/es-toolkit/dist/object/invert.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/invert.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function invert(obj) {
+    const result = {};
+    const keys = Object.keys(obj);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = obj[key];
+        result[value] = key;
+    }
+    return result;
+}
+
+exports.invert = invert;
Index: node_modules/es-toolkit/dist/object/invert.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/invert.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/invert.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function invert(obj) {
+    const result = {};
+    const keys = Object.keys(obj);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = obj[key];
+        result[value] = key;
+    }
+    return result;
+}
+
+export { invert };
Index: node_modules/es-toolkit/dist/object/mapKeys.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/mapKeys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mapKeys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates a new object with the same values as the given object, but with keys generated
+ * by running each own enumerable property of the object through the iteratee function.
+ *
+ * @template T - The type of the object.
+ * @template K - The type of the new keys generated by the iteratee function.
+ *
+ * @param {T} object - The object to iterate over.
+ * @param {(value: T[keyof T], key: keyof T, object: T) => K} getNewKey - The function invoked per own enumerable property.
+ * @returns {Record<K, T[keyof T]>} - Returns the new mapped object.
+ *
+ * @example
+ * // Example usage:
+ * const obj = { a: 1, b: 2 };
+ * const result = mapKeys(obj, (value, key) => key + value);
+ * console.log(result); // { a1: 1, b2: 2 }
+ */
+declare function mapKeys<T extends Record<PropertyKey, any>, K extends PropertyKey>(object: T, getNewKey: (value: T[keyof T], key: keyof T, object: T) => K): Record<K, T[keyof T]>;
+
+export { mapKeys };
Index: node_modules/es-toolkit/dist/object/mapKeys.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/mapKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mapKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates a new object with the same values as the given object, but with keys generated
+ * by running each own enumerable property of the object through the iteratee function.
+ *
+ * @template T - The type of the object.
+ * @template K - The type of the new keys generated by the iteratee function.
+ *
+ * @param {T} object - The object to iterate over.
+ * @param {(value: T[keyof T], key: keyof T, object: T) => K} getNewKey - The function invoked per own enumerable property.
+ * @returns {Record<K, T[keyof T]>} - Returns the new mapped object.
+ *
+ * @example
+ * // Example usage:
+ * const obj = { a: 1, b: 2 };
+ * const result = mapKeys(obj, (value, key) => key + value);
+ * console.log(result); // { a1: 1, b2: 2 }
+ */
+declare function mapKeys<T extends Record<PropertyKey, any>, K extends PropertyKey>(object: T, getNewKey: (value: T[keyof T], key: keyof T, object: T) => K): Record<K, T[keyof T]>;
+
+export { mapKeys };
Index: node_modules/es-toolkit/dist/object/mapKeys.js
===================================================================
--- node_modules/es-toolkit/dist/object/mapKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mapKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function mapKeys(object, getNewKey) {
+    const result = {};
+    const keys = Object.keys(object);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        result[getNewKey(value, key, object)] = value;
+    }
+    return result;
+}
+
+exports.mapKeys = mapKeys;
Index: node_modules/es-toolkit/dist/object/mapKeys.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/mapKeys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mapKeys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function mapKeys(object, getNewKey) {
+    const result = {};
+    const keys = Object.keys(object);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        result[getNewKey(value, key, object)] = value;
+    }
+    return result;
+}
+
+export { mapKeys };
Index: node_modules/es-toolkit/dist/object/mapValues.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/mapValues.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mapValues.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Creates a new object with the same keys as the given object, but with values generated
+ * by running each own enumerable property of the object through the iteratee function.
+ *
+ * @template T - The type of the object.
+ * @template K - The type of the keys in the object.
+ * @template V - The type of the new values generated by the iteratee function.
+ *
+ * @param {T} object - The object to iterate over.
+ * @param {(value: T[K], key: K, object: T) => V} getNewValue - The function invoked per own enumerable property.
+ * @returns {Record<K, V>} - Returns the new mapped object.
+ *
+ * @example
+ * // Example usage:
+ * const obj = { a: 1, b: 2 };
+ * const result = mapValues(obj, (value) => value * 2);
+ * console.log(result); // { a: 2, b: 4 }
+ */
+declare function mapValues<T extends object, K extends keyof T, V>(object: T, getNewValue: (value: T[K], key: K, object: T) => V): Record<K, V>;
+
+export { mapValues };
Index: node_modules/es-toolkit/dist/object/mapValues.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/mapValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mapValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Creates a new object with the same keys as the given object, but with values generated
+ * by running each own enumerable property of the object through the iteratee function.
+ *
+ * @template T - The type of the object.
+ * @template K - The type of the keys in the object.
+ * @template V - The type of the new values generated by the iteratee function.
+ *
+ * @param {T} object - The object to iterate over.
+ * @param {(value: T[K], key: K, object: T) => V} getNewValue - The function invoked per own enumerable property.
+ * @returns {Record<K, V>} - Returns the new mapped object.
+ *
+ * @example
+ * // Example usage:
+ * const obj = { a: 1, b: 2 };
+ * const result = mapValues(obj, (value) => value * 2);
+ * console.log(result); // { a: 2, b: 4 }
+ */
+declare function mapValues<T extends object, K extends keyof T, V>(object: T, getNewValue: (value: T[K], key: K, object: T) => V): Record<K, V>;
+
+export { mapValues };
Index: node_modules/es-toolkit/dist/object/mapValues.js
===================================================================
--- node_modules/es-toolkit/dist/object/mapValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mapValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function mapValues(object, getNewValue) {
+    const result = {};
+    const keys = Object.keys(object);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        result[key] = getNewValue(value, key, object);
+    }
+    return result;
+}
+
+exports.mapValues = mapValues;
Index: node_modules/es-toolkit/dist/object/mapValues.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/mapValues.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mapValues.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function mapValues(object, getNewValue) {
+    const result = {};
+    const keys = Object.keys(object);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = object[key];
+        result[key] = getNewValue(value, key, object);
+    }
+    return result;
+}
+
+export { mapValues };
Index: node_modules/es-toolkit/dist/object/merge.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/merge.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/merge.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+/**
+ * Merges the properties of the source object into the target object.
+ *
+ * This function performs a deep merge, meaning nested objects and arrays are merged recursively.
+ * If a property in the source object is an array or an object and the corresponding property in the target object is also an array or object, they will be merged.
+ * If a property in the source object is undefined, it will not overwrite a defined property in the target object.
+ *
+ * Note that this function mutates the target object.
+ *
+ * @param {T} target - The target object into which the source object properties will be merged. This object is modified in place.
+ * @param {S} source - The source object whose properties will be merged into the target object.
+ * @returns {T & S} The updated target object with properties from the source object merged in.
+ *
+ * @template T - Type of the target object.
+ * @template S - Type of the source object.
+ *
+ * @example
+ * const target = { a: 1, b: { x: 1, y: 2 } };
+ * const source = { b: { y: 3, z: 4 }, c: 5 };
+ *
+ * const result = merge(target, source);
+ * console.log(result);
+ * // Output: { a: 1, b: { x: 1, y: 3, z: 4 }, c: 5 }
+ *
+ * @example
+ * const target = { a: [1, 2], b: { x: 1 } };
+ * const source = { a: [3], b: { y: 2 } };
+ *
+ * const result = merge(target, source);
+ * console.log(result);
+ * // Output: { a: [3, 2], b: { x: 1, y: 2 } }
+ *
+ * @example
+ * const target = { a: null };
+ * const source = { a: [1, 2, 3] };
+ *
+ * const result = merge(target, source);
+ * console.log(result);
+ * // Output: { a: [1, 2, 3] }
+ */
+declare function merge<T extends Record<PropertyKey, any>, S extends Record<PropertyKey, any>>(target: T, source: S): T & S;
+
+export { merge };
Index: node_modules/es-toolkit/dist/object/merge.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/merge.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/merge.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+/**
+ * Merges the properties of the source object into the target object.
+ *
+ * This function performs a deep merge, meaning nested objects and arrays are merged recursively.
+ * If a property in the source object is an array or an object and the corresponding property in the target object is also an array or object, they will be merged.
+ * If a property in the source object is undefined, it will not overwrite a defined property in the target object.
+ *
+ * Note that this function mutates the target object.
+ *
+ * @param {T} target - The target object into which the source object properties will be merged. This object is modified in place.
+ * @param {S} source - The source object whose properties will be merged into the target object.
+ * @returns {T & S} The updated target object with properties from the source object merged in.
+ *
+ * @template T - Type of the target object.
+ * @template S - Type of the source object.
+ *
+ * @example
+ * const target = { a: 1, b: { x: 1, y: 2 } };
+ * const source = { b: { y: 3, z: 4 }, c: 5 };
+ *
+ * const result = merge(target, source);
+ * console.log(result);
+ * // Output: { a: 1, b: { x: 1, y: 3, z: 4 }, c: 5 }
+ *
+ * @example
+ * const target = { a: [1, 2], b: { x: 1 } };
+ * const source = { a: [3], b: { y: 2 } };
+ *
+ * const result = merge(target, source);
+ * console.log(result);
+ * // Output: { a: [3, 2], b: { x: 1, y: 2 } }
+ *
+ * @example
+ * const target = { a: null };
+ * const source = { a: [1, 2, 3] };
+ *
+ * const result = merge(target, source);
+ * console.log(result);
+ * // Output: { a: [1, 2, 3] }
+ */
+declare function merge<T extends Record<PropertyKey, any>, S extends Record<PropertyKey, any>>(target: T, source: S): T & S;
+
+export { merge };
Index: node_modules/es-toolkit/dist/object/merge.js
===================================================================
--- node_modules/es-toolkit/dist/object/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isUnsafeProperty = require('../_internal/isUnsafeProperty.js');
+const isPlainObject = require('../predicate/isPlainObject.js');
+
+function merge(target, source) {
+    const sourceKeys = Object.keys(source);
+    for (let i = 0; i < sourceKeys.length; i++) {
+        const key = sourceKeys[i];
+        if (isUnsafeProperty.isUnsafeProperty(key)) {
+            continue;
+        }
+        const sourceValue = source[key];
+        const targetValue = target[key];
+        if (Array.isArray(sourceValue)) {
+            if (Array.isArray(targetValue)) {
+                target[key] = merge(targetValue, sourceValue);
+            }
+            else {
+                target[key] = merge([], sourceValue);
+            }
+        }
+        else if (isPlainObject.isPlainObject(sourceValue)) {
+            if (isPlainObject.isPlainObject(targetValue)) {
+                target[key] = merge(targetValue, sourceValue);
+            }
+            else {
+                target[key] = merge({}, sourceValue);
+            }
+        }
+        else if (targetValue === undefined || sourceValue !== undefined) {
+            target[key] = sourceValue;
+        }
+    }
+    return target;
+}
+
+exports.merge = merge;
Index: node_modules/es-toolkit/dist/object/merge.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/merge.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/merge.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+import { isUnsafeProperty } from '../_internal/isUnsafeProperty.mjs';
+import { isPlainObject } from '../predicate/isPlainObject.mjs';
+
+function merge(target, source) {
+    const sourceKeys = Object.keys(source);
+    for (let i = 0; i < sourceKeys.length; i++) {
+        const key = sourceKeys[i];
+        if (isUnsafeProperty(key)) {
+            continue;
+        }
+        const sourceValue = source[key];
+        const targetValue = target[key];
+        if (Array.isArray(sourceValue)) {
+            if (Array.isArray(targetValue)) {
+                target[key] = merge(targetValue, sourceValue);
+            }
+            else {
+                target[key] = merge([], sourceValue);
+            }
+        }
+        else if (isPlainObject(sourceValue)) {
+            if (isPlainObject(targetValue)) {
+                target[key] = merge(targetValue, sourceValue);
+            }
+            else {
+                target[key] = merge({}, sourceValue);
+            }
+        }
+        else if (targetValue === undefined || sourceValue !== undefined) {
+            target[key] = sourceValue;
+        }
+    }
+    return target;
+}
+
+export { merge };
Index: node_modules/es-toolkit/dist/object/mergeWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/mergeWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mergeWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+/**
+ * Merges the properties of the source object into the target object.
+ *
+ * You can provide a custom `merge` function to control how properties are merged. It should return the value to be set in the target object.
+ *
+ * If it returns `undefined`, a default deep merge will be applied for arrays and objects:
+ *
+ * - If a property in the source object is an array or an object and the corresponding property in the target object is also an array or object, they will be merged.
+ * - If a property in the source object is undefined, it will not overwrite a defined property in the target object.
+ *
+ * Note that this function mutates the target object.
+ *
+ * @param {T} target - The target object into which the source object properties will be merged. This object is modified in place.
+ * @param {S} source - The source object whose properties will be merged into the target object.
+ * @param {(targetValue: any, sourceValue: any, key: string, target: T, source: S) => any} merge - A custom merge function that defines how properties should be combined. It receives the following arguments:
+ *   - `targetValue`: The current value of the property in the target object.
+ *   - `sourceValue`: The value of the property in the source object.
+ *   - `key`: The key of the property being merged.
+ *   - `target`: The target object.
+ *   - `source`: The source object.
+ *
+ * @returns {T & S} The updated target object with properties from the source object merged in.
+ *
+ * @template T - Type of the target object.
+ * @template S - Type of the source object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ *
+ * mergeWith(target, source, (targetValue, sourceValue) => {
+ *   if (typeof targetValue === 'number' && typeof sourceValue === 'number') {
+ *     return targetValue + sourceValue;
+ *   }
+ * });
+ * // Returns { a: 1, b: 5, c: 4 }
+ * @example
+ * const target = { a: [1], b: [2] };
+ * const source = { a: [3], b: [4] };
+ *
+ * const result = mergeWith(target, source, (objValue, srcValue) => {
+ *   if (Array.isArray(objValue)) {
+ *     return objValue.concat(srcValue);
+ *   }
+ * });
+ *
+ * expect(result).toEqual({ a: [1, 3], b: [2, 4] });
+ */
+declare function mergeWith<T extends Record<PropertyKey, any>, S extends Record<PropertyKey, any>>(target: T, source: S, merge: (targetValue: any, sourceValue: any, key: string, target: T, source: S) => any): T & S;
+
+export { mergeWith };
Index: node_modules/es-toolkit/dist/object/mergeWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/mergeWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mergeWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+/**
+ * Merges the properties of the source object into the target object.
+ *
+ * You can provide a custom `merge` function to control how properties are merged. It should return the value to be set in the target object.
+ *
+ * If it returns `undefined`, a default deep merge will be applied for arrays and objects:
+ *
+ * - If a property in the source object is an array or an object and the corresponding property in the target object is also an array or object, they will be merged.
+ * - If a property in the source object is undefined, it will not overwrite a defined property in the target object.
+ *
+ * Note that this function mutates the target object.
+ *
+ * @param {T} target - The target object into which the source object properties will be merged. This object is modified in place.
+ * @param {S} source - The source object whose properties will be merged into the target object.
+ * @param {(targetValue: any, sourceValue: any, key: string, target: T, source: S) => any} merge - A custom merge function that defines how properties should be combined. It receives the following arguments:
+ *   - `targetValue`: The current value of the property in the target object.
+ *   - `sourceValue`: The value of the property in the source object.
+ *   - `key`: The key of the property being merged.
+ *   - `target`: The target object.
+ *   - `source`: The source object.
+ *
+ * @returns {T & S} The updated target object with properties from the source object merged in.
+ *
+ * @template T - Type of the target object.
+ * @template S - Type of the source object.
+ *
+ * @example
+ * const target = { a: 1, b: 2 };
+ * const source = { b: 3, c: 4 };
+ *
+ * mergeWith(target, source, (targetValue, sourceValue) => {
+ *   if (typeof targetValue === 'number' && typeof sourceValue === 'number') {
+ *     return targetValue + sourceValue;
+ *   }
+ * });
+ * // Returns { a: 1, b: 5, c: 4 }
+ * @example
+ * const target = { a: [1], b: [2] };
+ * const source = { a: [3], b: [4] };
+ *
+ * const result = mergeWith(target, source, (objValue, srcValue) => {
+ *   if (Array.isArray(objValue)) {
+ *     return objValue.concat(srcValue);
+ *   }
+ * });
+ *
+ * expect(result).toEqual({ a: [1, 3], b: [2, 4] });
+ */
+declare function mergeWith<T extends Record<PropertyKey, any>, S extends Record<PropertyKey, any>>(target: T, source: S, merge: (targetValue: any, sourceValue: any, key: string, target: T, source: S) => any): T & S;
+
+export { mergeWith };
Index: node_modules/es-toolkit/dist/object/mergeWith.js
===================================================================
--- node_modules/es-toolkit/dist/object/mergeWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mergeWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isUnsafeProperty = require('../_internal/isUnsafeProperty.js');
+const isObjectLike = require('../compat/predicate/isObjectLike.js');
+
+function mergeWith(target, source, merge) {
+    const sourceKeys = Object.keys(source);
+    for (let i = 0; i < sourceKeys.length; i++) {
+        const key = sourceKeys[i];
+        if (isUnsafeProperty.isUnsafeProperty(key)) {
+            continue;
+        }
+        const sourceValue = source[key];
+        const targetValue = target[key];
+        const merged = merge(targetValue, sourceValue, key, target, source);
+        if (merged !== undefined) {
+            target[key] = merged;
+        }
+        else if (Array.isArray(sourceValue)) {
+            target[key] = mergeWith(targetValue ?? [], sourceValue, merge);
+        }
+        else if (isObjectLike.isObjectLike(targetValue) && isObjectLike.isObjectLike(sourceValue)) {
+            target[key] = mergeWith(targetValue ?? {}, sourceValue, merge);
+        }
+        else if (targetValue === undefined || sourceValue !== undefined) {
+            target[key] = sourceValue;
+        }
+    }
+    return target;
+}
+
+exports.mergeWith = mergeWith;
Index: node_modules/es-toolkit/dist/object/mergeWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/mergeWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/mergeWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { isUnsafeProperty } from '../_internal/isUnsafeProperty.mjs';
+import { isObjectLike } from '../compat/predicate/isObjectLike.mjs';
+
+function mergeWith(target, source, merge) {
+    const sourceKeys = Object.keys(source);
+    for (let i = 0; i < sourceKeys.length; i++) {
+        const key = sourceKeys[i];
+        if (isUnsafeProperty(key)) {
+            continue;
+        }
+        const sourceValue = source[key];
+        const targetValue = target[key];
+        const merged = merge(targetValue, sourceValue, key, target, source);
+        if (merged !== undefined) {
+            target[key] = merged;
+        }
+        else if (Array.isArray(sourceValue)) {
+            target[key] = mergeWith(targetValue ?? [], sourceValue, merge);
+        }
+        else if (isObjectLike(targetValue) && isObjectLike(sourceValue)) {
+            target[key] = mergeWith(targetValue ?? {}, sourceValue, merge);
+        }
+        else if (targetValue === undefined || sourceValue !== undefined) {
+            target[key] = sourceValue;
+        }
+    }
+    return target;
+}
+
+export { mergeWith };
Index: node_modules/es-toolkit/dist/object/omit.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/omit.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/omit.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates a new object with specified keys omitted.
+ *
+ * This function takes an object and an array of keys, and returns a new object that
+ * excludes the properties corresponding to the specified keys.
+ *
+ * @template T - The type of object.
+ * @template K - The type of keys in object.
+ * @param {T} obj - The object to omit keys from.
+ * @param {K[]} keys - An array of keys to be omitted from the object.
+ * @returns {Omit<T, K>} A new object with the specified keys omitted.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const result = omit(obj, ['b', 'c']);
+ * // result will be { a: 1 }
+ */
+declare function omit<T extends Record<string, any>, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K>;
+
+export { omit };
Index: node_modules/es-toolkit/dist/object/omit.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/omit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/omit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates a new object with specified keys omitted.
+ *
+ * This function takes an object and an array of keys, and returns a new object that
+ * excludes the properties corresponding to the specified keys.
+ *
+ * @template T - The type of object.
+ * @template K - The type of keys in object.
+ * @param {T} obj - The object to omit keys from.
+ * @param {K[]} keys - An array of keys to be omitted from the object.
+ * @returns {Omit<T, K>} A new object with the specified keys omitted.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const result = omit(obj, ['b', 'c']);
+ * // result will be { a: 1 }
+ */
+declare function omit<T extends Record<string, any>, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K>;
+
+export { omit };
Index: node_modules/es-toolkit/dist/object/omit.js
===================================================================
--- node_modules/es-toolkit/dist/object/omit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/omit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function omit(obj, keys) {
+    const result = { ...obj };
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        delete result[key];
+    }
+    return result;
+}
+
+exports.omit = omit;
Index: node_modules/es-toolkit/dist/object/omit.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/omit.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/omit.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+function omit(obj, keys) {
+    const result = { ...obj };
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        delete result[key];
+    }
+    return result;
+}
+
+export { omit };
Index: node_modules/es-toolkit/dist/object/omitBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/omitBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/omitBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates a new object composed of the properties that do not satisfy the predicate function.
+ *
+ * This function takes an object and a predicate function, and returns a new object that
+ * includes only the properties for which the predicate function returns false.
+ *
+ * @template T - The type of object.
+ * @param {T} obj - The object to omit properties from.
+ * @param {(value: T[string], key: keyof T) => boolean} shouldOmit - A predicate function that determines
+ * whether a property should be omitted. It takes the property's key and value as arguments and returns `true`
+ * if the property should be omitted, and `false` otherwise.
+ * @returns {Partial<T>} A new object with the properties that do not satisfy the predicate function.
+ *
+ * @example
+ * const obj = { a: 1, b: 'omit', c: 3 };
+ * const shouldOmit = (value) => typeof value === 'string';
+ * const result = omitBy(obj, shouldOmit);
+ * // result will be { a: 1, c: 3 }
+ */
+declare function omitBy<T extends Record<string, any>>(obj: T, shouldOmit: (value: T[keyof T], key: keyof T) => boolean): Partial<T>;
+
+export { omitBy };
Index: node_modules/es-toolkit/dist/object/omitBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/omitBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/omitBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates a new object composed of the properties that do not satisfy the predicate function.
+ *
+ * This function takes an object and a predicate function, and returns a new object that
+ * includes only the properties for which the predicate function returns false.
+ *
+ * @template T - The type of object.
+ * @param {T} obj - The object to omit properties from.
+ * @param {(value: T[string], key: keyof T) => boolean} shouldOmit - A predicate function that determines
+ * whether a property should be omitted. It takes the property's key and value as arguments and returns `true`
+ * if the property should be omitted, and `false` otherwise.
+ * @returns {Partial<T>} A new object with the properties that do not satisfy the predicate function.
+ *
+ * @example
+ * const obj = { a: 1, b: 'omit', c: 3 };
+ * const shouldOmit = (value) => typeof value === 'string';
+ * const result = omitBy(obj, shouldOmit);
+ * // result will be { a: 1, c: 3 }
+ */
+declare function omitBy<T extends Record<string, any>>(obj: T, shouldOmit: (value: T[keyof T], key: keyof T) => boolean): Partial<T>;
+
+export { omitBy };
Index: node_modules/es-toolkit/dist/object/omitBy.js
===================================================================
--- node_modules/es-toolkit/dist/object/omitBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/omitBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function omitBy(obj, shouldOmit) {
+    const result = {};
+    const keys = Object.keys(obj);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = obj[key];
+        if (!shouldOmit(value, key)) {
+            result[key] = value;
+        }
+    }
+    return result;
+}
+
+exports.omitBy = omitBy;
Index: node_modules/es-toolkit/dist/object/omitBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/omitBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/omitBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+function omitBy(obj, shouldOmit) {
+    const result = {};
+    const keys = Object.keys(obj);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = obj[key];
+        if (!shouldOmit(value, key)) {
+            result[key] = value;
+        }
+    }
+    return result;
+}
+
+export { omitBy };
Index: node_modules/es-toolkit/dist/object/pick.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/pick.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/pick.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates a new object composed of the picked object properties.
+ *
+ * This function takes an object and an array of keys, and returns a new object that
+ * includes only the properties corresponding to the specified keys.
+ *
+ * @template T - The type of object.
+ * @template K - The type of keys in object.
+ * @param {T} obj - The object to pick keys from.
+ * @param {K[]} keys - An array of keys to be picked from the object.
+ * @returns {Pick<T, K>} A new object with the specified keys picked.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const result = pick(obj, ['a', 'c']);
+ * // result will be { a: 1, c: 3 }
+ */
+declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: readonly K[]): Pick<T, K>;
+
+export { pick };
Index: node_modules/es-toolkit/dist/object/pick.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/pick.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/pick.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Creates a new object composed of the picked object properties.
+ *
+ * This function takes an object and an array of keys, and returns a new object that
+ * includes only the properties corresponding to the specified keys.
+ *
+ * @template T - The type of object.
+ * @template K - The type of keys in object.
+ * @param {T} obj - The object to pick keys from.
+ * @param {K[]} keys - An array of keys to be picked from the object.
+ * @returns {Pick<T, K>} A new object with the specified keys picked.
+ *
+ * @example
+ * const obj = { a: 1, b: 2, c: 3 };
+ * const result = pick(obj, ['a', 'c']);
+ * // result will be { a: 1, c: 3 }
+ */
+declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: readonly K[]): Pick<T, K>;
+
+export { pick };
Index: node_modules/es-toolkit/dist/object/pick.js
===================================================================
--- node_modules/es-toolkit/dist/object/pick.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/pick.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function pick(obj, keys) {
+    const result = {};
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        if (Object.hasOwn(obj, key)) {
+            result[key] = obj[key];
+        }
+    }
+    return result;
+}
+
+exports.pick = pick;
Index: node_modules/es-toolkit/dist/object/pick.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/pick.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/pick.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+function pick(obj, keys) {
+    const result = {};
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        if (Object.hasOwn(obj, key)) {
+            result[key] = obj[key];
+        }
+    }
+    return result;
+}
+
+export { pick };
Index: node_modules/es-toolkit/dist/object/pickBy.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/pickBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/pickBy.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * This function takes an object and a predicate function, and returns a new object that
+ * includes only the properties for which the predicate function returns true.
+ *
+ * @template T - The type of object.
+ * @param {T} obj - The object to pick properties from.
+ * @param {(value: T[keyof T], key: keyof T) => boolean} shouldPick - A predicate function that determines
+ * whether a property should be picked. It takes the property's key and value as arguments and returns `true`
+ * if the property should be picked, and `false` otherwise.
+ * @returns {Partial<T>} A new object with the properties that satisfy the predicate function.
+ *
+ * @example
+ * const obj = { a: 1, b: 'pick', c: 3 };
+ * const shouldPick = (value) => typeof value === 'string';
+ * const result = pickBy(obj, shouldPick);
+ * // result will be { b: 'pick' }
+ */
+declare function pickBy<T extends Record<string, any>>(obj: T, shouldPick: (value: T[keyof T], key: keyof T) => boolean): Partial<T>;
+
+export { pickBy };
Index: node_modules/es-toolkit/dist/object/pickBy.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/pickBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/pickBy.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Creates a new object composed of the properties that satisfy the predicate function.
+ *
+ * This function takes an object and a predicate function, and returns a new object that
+ * includes only the properties for which the predicate function returns true.
+ *
+ * @template T - The type of object.
+ * @param {T} obj - The object to pick properties from.
+ * @param {(value: T[keyof T], key: keyof T) => boolean} shouldPick - A predicate function that determines
+ * whether a property should be picked. It takes the property's key and value as arguments and returns `true`
+ * if the property should be picked, and `false` otherwise.
+ * @returns {Partial<T>} A new object with the properties that satisfy the predicate function.
+ *
+ * @example
+ * const obj = { a: 1, b: 'pick', c: 3 };
+ * const shouldPick = (value) => typeof value === 'string';
+ * const result = pickBy(obj, shouldPick);
+ * // result will be { b: 'pick' }
+ */
+declare function pickBy<T extends Record<string, any>>(obj: T, shouldPick: (value: T[keyof T], key: keyof T) => boolean): Partial<T>;
+
+export { pickBy };
Index: node_modules/es-toolkit/dist/object/pickBy.js
===================================================================
--- node_modules/es-toolkit/dist/object/pickBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/pickBy.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function pickBy(obj, shouldPick) {
+    const result = {};
+    const keys = Object.keys(obj);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = obj[key];
+        if (shouldPick(value, key)) {
+            result[key] = value;
+        }
+    }
+    return result;
+}
+
+exports.pickBy = pickBy;
Index: node_modules/es-toolkit/dist/object/pickBy.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/pickBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/pickBy.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+function pickBy(obj, shouldPick) {
+    const result = {};
+    const keys = Object.keys(obj);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = obj[key];
+        if (shouldPick(value, key)) {
+            result[key] = value;
+        }
+    }
+    return result;
+}
+
+export { pickBy };
Index: node_modules/es-toolkit/dist/object/toCamelCaseKeys.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/toCamelCaseKeys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toCamelCaseKeys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+type CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}` : Lowercase<S>;
+type ToCamelCaseKeys<T> = T extends any[] ? Array<ToCamelCaseKeys<T[number]>> : T extends Record<string, any> ? {
+    [K in keyof T as CamelCase<string & K>]: ToCamelCaseKeys<T[K]>;
+} : T;
+/**
+ * Creates a new object composed of the properties with keys converted to camelCase.
+ *
+ * This function takes an object and returns a new object that includes the same properties,
+ * but with all keys converted to camelCase format.
+ *
+ * @template T - The type of object.
+ * @param {T} obj - The object to convert keys from.
+ * @returns {ToCamelCaseKeys<T>} A new object with all keys converted to camelCase.
+ *
+ * @example
+ * // Example with objects
+ * const obj = { user_id: 1, first_name: 'John' };
+ * const result = toCamelCaseKeys(obj);
+ * // result will be { userId: 1, firstName: 'John' }
+ *
+ * // Example with arrays of objects
+ * const arr = [
+ *   { user_id: 1, first_name: 'John' },
+ *   { user_id: 2, first_name: 'Jane' }
+ * ];
+ * const arrResult = toCamelCaseKeys(arr);
+ * // arrResult will be [{ userId: 1, firstName: 'John' }, { userId: 2, firstName: 'Jane' }]
+ *
+ * // Example with nested objects
+ * const nested = {
+ *   user_data: {
+ *     user_id: 1,
+ *     user_address: {
+ *       street_name: 'Main St',
+ *       zip_code: '12345'
+ *     }
+ *   }
+ * };
+ * const nestedResult = toCamelCaseKeys(nested);
+ * // nestedResult will be:
+ * // {
+ * //   userData: {
+ * //     userId: 1,
+ * //     userAddress: {
+ * //       streetName: 'Main St',
+ * //       zipCode: '12345'
+ * //     }
+ * //   }
+ * // }
+ */
+declare function toCamelCaseKeys<T>(obj: T): ToCamelCaseKeys<T>;
+
+export { toCamelCaseKeys };
Index: node_modules/es-toolkit/dist/object/toCamelCaseKeys.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/toCamelCaseKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toCamelCaseKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+type CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}` : Lowercase<S>;
+type ToCamelCaseKeys<T> = T extends any[] ? Array<ToCamelCaseKeys<T[number]>> : T extends Record<string, any> ? {
+    [K in keyof T as CamelCase<string & K>]: ToCamelCaseKeys<T[K]>;
+} : T;
+/**
+ * Creates a new object composed of the properties with keys converted to camelCase.
+ *
+ * This function takes an object and returns a new object that includes the same properties,
+ * but with all keys converted to camelCase format.
+ *
+ * @template T - The type of object.
+ * @param {T} obj - The object to convert keys from.
+ * @returns {ToCamelCaseKeys<T>} A new object with all keys converted to camelCase.
+ *
+ * @example
+ * // Example with objects
+ * const obj = { user_id: 1, first_name: 'John' };
+ * const result = toCamelCaseKeys(obj);
+ * // result will be { userId: 1, firstName: 'John' }
+ *
+ * // Example with arrays of objects
+ * const arr = [
+ *   { user_id: 1, first_name: 'John' },
+ *   { user_id: 2, first_name: 'Jane' }
+ * ];
+ * const arrResult = toCamelCaseKeys(arr);
+ * // arrResult will be [{ userId: 1, firstName: 'John' }, { userId: 2, firstName: 'Jane' }]
+ *
+ * // Example with nested objects
+ * const nested = {
+ *   user_data: {
+ *     user_id: 1,
+ *     user_address: {
+ *       street_name: 'Main St',
+ *       zip_code: '12345'
+ *     }
+ *   }
+ * };
+ * const nestedResult = toCamelCaseKeys(nested);
+ * // nestedResult will be:
+ * // {
+ * //   userData: {
+ * //     userId: 1,
+ * //     userAddress: {
+ * //       streetName: 'Main St',
+ * //       zipCode: '12345'
+ * //     }
+ * //   }
+ * // }
+ */
+declare function toCamelCaseKeys<T>(obj: T): ToCamelCaseKeys<T>;
+
+export { toCamelCaseKeys };
Index: node_modules/es-toolkit/dist/object/toCamelCaseKeys.js
===================================================================
--- node_modules/es-toolkit/dist/object/toCamelCaseKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toCamelCaseKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArray = require('../compat/predicate/isArray.js');
+const isPlainObject = require('../predicate/isPlainObject.js');
+const camelCase = require('../string/camelCase.js');
+
+function toCamelCaseKeys(obj) {
+    if (isArray.isArray(obj)) {
+        return obj.map(item => toCamelCaseKeys(item));
+    }
+    if (isPlainObject.isPlainObject(obj)) {
+        const result = {};
+        const keys = Object.keys(obj);
+        for (let i = 0; i < keys.length; i++) {
+            const key = keys[i];
+            const camelKey = camelCase.camelCase(key);
+            const camelCaseKeys = toCamelCaseKeys(obj[key]);
+            result[camelKey] = camelCaseKeys;
+        }
+        return result;
+    }
+    return obj;
+}
+
+exports.toCamelCaseKeys = toCamelCaseKeys;
Index: node_modules/es-toolkit/dist/object/toCamelCaseKeys.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/toCamelCaseKeys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toCamelCaseKeys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { isArray } from '../compat/predicate/isArray.mjs';
+import { isPlainObject } from '../predicate/isPlainObject.mjs';
+import { camelCase } from '../string/camelCase.mjs';
+
+function toCamelCaseKeys(obj) {
+    if (isArray(obj)) {
+        return obj.map(item => toCamelCaseKeys(item));
+    }
+    if (isPlainObject(obj)) {
+        const result = {};
+        const keys = Object.keys(obj);
+        for (let i = 0; i < keys.length; i++) {
+            const key = keys[i];
+            const camelKey = camelCase(key);
+            const camelCaseKeys = toCamelCaseKeys(obj[key]);
+            result[camelKey] = camelCaseKeys;
+        }
+        return result;
+    }
+    return obj;
+}
+
+export { toCamelCaseKeys };
Index: node_modules/es-toolkit/dist/object/toMerged.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/toMerged.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toMerged.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Merges the properties of the source object into a deep clone of the target object.
+ * Unlike `merge`, This function does not modify the original target object.
+ *
+ * This function performs a deep merge, meaning nested objects and arrays are merged recursively.
+ *
+ * - If a property in the source object is an array or object and the corresponding property in the target object is also an array or object, they will be merged.
+ * - If a property in the source object is undefined, it will not overwrite a defined property in the target object.
+ *
+ * Note that this function does not mutate the target object.
+ *
+ * @param {T} target - The target object to be cloned and merged into. This object is not modified directly.
+ * @param {S} source - The source object whose properties will be merged into the cloned target object.
+ * @returns {T & S} A new object with properties from the source object merged into a deep clone of the target object.
+ *
+ * @template T - Type of the target object.
+ * @template S - Type of the source object.
+ *
+ * @example
+ * const target = { a: 1, b: { x: 1, y: 2 } };
+ * const source = { b: { y: 3, z: 4 }, c: 5 };
+ *
+ * const result = toMerged(target, source);
+ * console.log(result);
+ * // Output: { a: 1, b: { x: 1, y: 3, z: 4 }, c: 5 }
+ *
+ * @example
+ * const target = { a: [1, 2], b: { x: 1 } };
+ * const source = { a: [3], b: { y: 2 } };
+ *
+ * const result = toMerged(target, source);
+ * console.log(result);
+ * // Output: { a: [3, 2], b: { x: 1, y: 2 } }
+ *
+ * @example
+ * const target = { a: null };
+ * const source = { a: [1, 2, 3] };
+ *
+ * const result = toMerged(target, source);
+ * console.log(result);
+ * // Output: { a: [1, 2, 3] }
+ */
+declare function toMerged<T extends Record<PropertyKey, any>, S extends Record<PropertyKey, any>>(target: T, source: S): T & S;
+
+export { toMerged };
Index: node_modules/es-toolkit/dist/object/toMerged.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/toMerged.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toMerged.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Merges the properties of the source object into a deep clone of the target object.
+ * Unlike `merge`, This function does not modify the original target object.
+ *
+ * This function performs a deep merge, meaning nested objects and arrays are merged recursively.
+ *
+ * - If a property in the source object is an array or object and the corresponding property in the target object is also an array or object, they will be merged.
+ * - If a property in the source object is undefined, it will not overwrite a defined property in the target object.
+ *
+ * Note that this function does not mutate the target object.
+ *
+ * @param {T} target - The target object to be cloned and merged into. This object is not modified directly.
+ * @param {S} source - The source object whose properties will be merged into the cloned target object.
+ * @returns {T & S} A new object with properties from the source object merged into a deep clone of the target object.
+ *
+ * @template T - Type of the target object.
+ * @template S - Type of the source object.
+ *
+ * @example
+ * const target = { a: 1, b: { x: 1, y: 2 } };
+ * const source = { b: { y: 3, z: 4 }, c: 5 };
+ *
+ * const result = toMerged(target, source);
+ * console.log(result);
+ * // Output: { a: 1, b: { x: 1, y: 3, z: 4 }, c: 5 }
+ *
+ * @example
+ * const target = { a: [1, 2], b: { x: 1 } };
+ * const source = { a: [3], b: { y: 2 } };
+ *
+ * const result = toMerged(target, source);
+ * console.log(result);
+ * // Output: { a: [3, 2], b: { x: 1, y: 2 } }
+ *
+ * @example
+ * const target = { a: null };
+ * const source = { a: [1, 2, 3] };
+ *
+ * const result = toMerged(target, source);
+ * console.log(result);
+ * // Output: { a: [1, 2, 3] }
+ */
+declare function toMerged<T extends Record<PropertyKey, any>, S extends Record<PropertyKey, any>>(target: T, source: S): T & S;
+
+export { toMerged };
Index: node_modules/es-toolkit/dist/object/toMerged.js
===================================================================
--- node_modules/es-toolkit/dist/object/toMerged.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toMerged.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const cloneDeep = require('./cloneDeep.js');
+const merge = require('./merge.js');
+
+function toMerged(target, source) {
+    return merge.merge(cloneDeep.cloneDeep(target), source);
+}
+
+exports.toMerged = toMerged;
Index: node_modules/es-toolkit/dist/object/toMerged.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/toMerged.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toMerged.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { cloneDeep } from './cloneDeep.mjs';
+import { merge } from './merge.mjs';
+
+function toMerged(target, source) {
+    return merge(cloneDeep(target), source);
+}
+
+export { toMerged };
Index: node_modules/es-toolkit/dist/object/toSnakeCaseKeys.d.mts
===================================================================
--- node_modules/es-toolkit/dist/object/toSnakeCaseKeys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toSnakeCaseKeys.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+type SnakeCase<S extends string> = S extends `${infer P1}${infer P2}` ? P2 extends Uncapitalize<P2> ? `${Lowercase<P1>}${SnakeCase<P2>}` : `${Lowercase<P1>}_${SnakeCase<Uncapitalize<P2>>}` : Lowercase<S>;
+type ToSnakeCaseKeys<T> = T extends any[] ? Array<ToSnakeCaseKeys<T[number]>> : T extends Record<string, any> ? {
+    [K in keyof T as SnakeCase<string & K>]: ToSnakeCaseKeys<T[K]>;
+} : T;
+/**
+ * Creates a new object composed of the properties with keys converted to snake_case.
+ *
+ * This function takes an object and returns a new object that includes the same properties,
+ * but with all keys converted to snake_case format.
+ *
+ * @template T - The type of object.
+ * @param {T} obj - The object to convert keys from.
+ * @returns {ToSnakeCaseKeys<T>} A new object with all keys converted to snake_case.
+ *
+ * @example
+ * // Example with objects
+ * const obj = { userId: 1, firstName: 'John' };
+ * const result = toSnakeCaseKeys(obj);
+ * // result will be { user_id: 1, first_name: 'John' }
+ *
+ * // Example with arrays of objects
+ * const arr = [
+ *   { userId: 1, firstName: 'John' },
+ *   { userId: 2, firstName: 'Jane' }
+ * ];
+ * const arrResult = toSnakeCaseKeys(arr);
+ * // arrResult will be [{ user_id: 1, first_name: 'John' }, { user_id: 2, first_name: 'Jane' }]
+ *
+ * // Example with nested objects
+ * const nested = {
+ *   userData: {
+ *     userId: 1,
+ *     userAddress: {
+ *       streetName: 'Main St',
+ *       zipCode: '12345'
+ *     }
+ *   }
+ * };
+ * const nestedResult = toSnakeCaseKeys(nested);
+ * // nestedResult will be:
+ * // {
+ * //   user_data: {
+ * //     user_id: 1,
+ * //     user_address: {
+ * //       street_name: 'Main St',
+ * //       zip_code: '12345'
+ * //     }
+ * //   }
+ * // }
+ */
+declare function toSnakeCaseKeys<T>(obj: T): ToSnakeCaseKeys<T>;
+
+export { type ToSnakeCaseKeys, toSnakeCaseKeys };
Index: node_modules/es-toolkit/dist/object/toSnakeCaseKeys.d.ts
===================================================================
--- node_modules/es-toolkit/dist/object/toSnakeCaseKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toSnakeCaseKeys.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+type SnakeCase<S extends string> = S extends `${infer P1}${infer P2}` ? P2 extends Uncapitalize<P2> ? `${Lowercase<P1>}${SnakeCase<P2>}` : `${Lowercase<P1>}_${SnakeCase<Uncapitalize<P2>>}` : Lowercase<S>;
+type ToSnakeCaseKeys<T> = T extends any[] ? Array<ToSnakeCaseKeys<T[number]>> : T extends Record<string, any> ? {
+    [K in keyof T as SnakeCase<string & K>]: ToSnakeCaseKeys<T[K]>;
+} : T;
+/**
+ * Creates a new object composed of the properties with keys converted to snake_case.
+ *
+ * This function takes an object and returns a new object that includes the same properties,
+ * but with all keys converted to snake_case format.
+ *
+ * @template T - The type of object.
+ * @param {T} obj - The object to convert keys from.
+ * @returns {ToSnakeCaseKeys<T>} A new object with all keys converted to snake_case.
+ *
+ * @example
+ * // Example with objects
+ * const obj = { userId: 1, firstName: 'John' };
+ * const result = toSnakeCaseKeys(obj);
+ * // result will be { user_id: 1, first_name: 'John' }
+ *
+ * // Example with arrays of objects
+ * const arr = [
+ *   { userId: 1, firstName: 'John' },
+ *   { userId: 2, firstName: 'Jane' }
+ * ];
+ * const arrResult = toSnakeCaseKeys(arr);
+ * // arrResult will be [{ user_id: 1, first_name: 'John' }, { user_id: 2, first_name: 'Jane' }]
+ *
+ * // Example with nested objects
+ * const nested = {
+ *   userData: {
+ *     userId: 1,
+ *     userAddress: {
+ *       streetName: 'Main St',
+ *       zipCode: '12345'
+ *     }
+ *   }
+ * };
+ * const nestedResult = toSnakeCaseKeys(nested);
+ * // nestedResult will be:
+ * // {
+ * //   user_data: {
+ * //     user_id: 1,
+ * //     user_address: {
+ * //       street_name: 'Main St',
+ * //       zip_code: '12345'
+ * //     }
+ * //   }
+ * // }
+ */
+declare function toSnakeCaseKeys<T>(obj: T): ToSnakeCaseKeys<T>;
+
+export { type ToSnakeCaseKeys, toSnakeCaseKeys };
Index: node_modules/es-toolkit/dist/object/toSnakeCaseKeys.js
===================================================================
--- node_modules/es-toolkit/dist/object/toSnakeCaseKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toSnakeCaseKeys.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArray = require('../compat/predicate/isArray.js');
+const isPlainObject = require('../compat/predicate/isPlainObject.js');
+const snakeCase = require('../string/snakeCase.js');
+
+function toSnakeCaseKeys(obj) {
+    if (isArray.isArray(obj)) {
+        return obj.map(item => toSnakeCaseKeys(item));
+    }
+    if (isPlainObject.isPlainObject(obj)) {
+        const result = {};
+        const keys = Object.keys(obj);
+        for (let i = 0; i < keys.length; i++) {
+            const key = keys[i];
+            const snakeKey = snakeCase.snakeCase(key);
+            const snakeCaseKeys = toSnakeCaseKeys(obj[key]);
+            result[snakeKey] = snakeCaseKeys;
+        }
+        return result;
+    }
+    return obj;
+}
+
+exports.toSnakeCaseKeys = toSnakeCaseKeys;
Index: node_modules/es-toolkit/dist/object/toSnakeCaseKeys.mjs
===================================================================
--- node_modules/es-toolkit/dist/object/toSnakeCaseKeys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/object/toSnakeCaseKeys.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { isArray } from '../compat/predicate/isArray.mjs';
+import { isPlainObject } from '../compat/predicate/isPlainObject.mjs';
+import { snakeCase } from '../string/snakeCase.mjs';
+
+function toSnakeCaseKeys(obj) {
+    if (isArray(obj)) {
+        return obj.map(item => toSnakeCaseKeys(item));
+    }
+    if (isPlainObject(obj)) {
+        const result = {};
+        const keys = Object.keys(obj);
+        for (let i = 0; i < keys.length; i++) {
+            const key = keys[i];
+            const snakeKey = snakeCase(key);
+            const snakeCaseKeys = toSnakeCaseKeys(obj[key]);
+            result[snakeKey] = snakeCaseKeys;
+        }
+        return result;
+    }
+    return obj;
+}
+
+export { toSnakeCaseKeys };
Index: node_modules/es-toolkit/dist/predicate/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+export { isArrayBuffer } from './isArrayBuffer.mjs';
+export { isBlob } from './isBlob.mjs';
+export { isBoolean } from './isBoolean.mjs';
+export { isBrowser } from './isBrowser.mjs';
+export { isBuffer } from './isBuffer.mjs';
+export { isDate } from './isDate.mjs';
+export { isEqual } from './isEqual.mjs';
+export { isEqualWith } from './isEqualWith.mjs';
+export { isError } from './isError.mjs';
+export { isFile } from './isFile.mjs';
+export { isFunction } from './isFunction.mjs';
+export { isJSON } from './isJSON.mjs';
+export { isJSONArray, isJSONObject, isJSONValue } from './isJSONValue.mjs';
+export { isLength } from './isLength.mjs';
+export { isMap } from './isMap.mjs';
+export { isNil } from './isNil.mjs';
+export { isNode } from './isNode.mjs';
+export { isNotNil } from './isNotNil.mjs';
+export { isNull } from './isNull.mjs';
+export { isPlainObject } from './isPlainObject.mjs';
+export { isPrimitive } from './isPrimitive.mjs';
+export { isPromise } from './isPromise.mjs';
+export { isRegExp } from './isRegExp.mjs';
+export { isSet } from './isSet.mjs';
+export { isString } from './isString.mjs';
+export { isSymbol } from './isSymbol.mjs';
+export { isTypedArray } from './isTypedArray.mjs';
+export { isUndefined } from './isUndefined.mjs';
+export { isWeakMap } from './isWeakMap.mjs';
+export { isWeakSet } from './isWeakSet.mjs';
Index: node_modules/es-toolkit/dist/predicate/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+export { isArrayBuffer } from './isArrayBuffer.js';
+export { isBlob } from './isBlob.js';
+export { isBoolean } from './isBoolean.js';
+export { isBrowser } from './isBrowser.js';
+export { isBuffer } from './isBuffer.js';
+export { isDate } from './isDate.js';
+export { isEqual } from './isEqual.js';
+export { isEqualWith } from './isEqualWith.js';
+export { isError } from './isError.js';
+export { isFile } from './isFile.js';
+export { isFunction } from './isFunction.js';
+export { isJSON } from './isJSON.js';
+export { isJSONArray, isJSONObject, isJSONValue } from './isJSONValue.js';
+export { isLength } from './isLength.js';
+export { isMap } from './isMap.js';
+export { isNil } from './isNil.js';
+export { isNode } from './isNode.js';
+export { isNotNil } from './isNotNil.js';
+export { isNull } from './isNull.js';
+export { isPlainObject } from './isPlainObject.js';
+export { isPrimitive } from './isPrimitive.js';
+export { isPromise } from './isPromise.js';
+export { isRegExp } from './isRegExp.js';
+export { isSet } from './isSet.js';
+export { isString } from './isString.js';
+export { isSymbol } from './isSymbol.js';
+export { isTypedArray } from './isTypedArray.js';
+export { isUndefined } from './isUndefined.js';
+export { isWeakMap } from './isWeakMap.js';
+export { isWeakSet } from './isWeakSet.js';
Index: node_modules/es-toolkit/dist/predicate/index.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isArrayBuffer = require('./isArrayBuffer.js');
+const isBlob = require('./isBlob.js');
+const isBoolean = require('./isBoolean.js');
+const isBrowser = require('./isBrowser.js');
+const isBuffer = require('./isBuffer.js');
+const isDate = require('./isDate.js');
+const isEqual = require('./isEqual.js');
+const isEqualWith = require('./isEqualWith.js');
+const isError = require('./isError.js');
+const isFile = require('./isFile.js');
+const isFunction = require('./isFunction.js');
+const isJSON = require('./isJSON.js');
+const isJSONValue = require('./isJSONValue.js');
+const isLength = require('./isLength.js');
+const isMap = require('./isMap.js');
+const isNil = require('./isNil.js');
+const isNode = require('./isNode.js');
+const isNotNil = require('./isNotNil.js');
+const isNull = require('./isNull.js');
+const isPlainObject = require('./isPlainObject.js');
+const isPrimitive = require('./isPrimitive.js');
+const isPromise = require('./isPromise.js');
+const isRegExp = require('./isRegExp.js');
+const isSet = require('./isSet.js');
+const isString = require('./isString.js');
+const isSymbol = require('./isSymbol.js');
+const isTypedArray = require('./isTypedArray.js');
+const isUndefined = require('./isUndefined.js');
+const isWeakMap = require('./isWeakMap.js');
+const isWeakSet = require('./isWeakSet.js');
+
+
+
+exports.isArrayBuffer = isArrayBuffer.isArrayBuffer;
+exports.isBlob = isBlob.isBlob;
+exports.isBoolean = isBoolean.isBoolean;
+exports.isBrowser = isBrowser.isBrowser;
+exports.isBuffer = isBuffer.isBuffer;
+exports.isDate = isDate.isDate;
+exports.isEqual = isEqual.isEqual;
+exports.isEqualWith = isEqualWith.isEqualWith;
+exports.isError = isError.isError;
+exports.isFile = isFile.isFile;
+exports.isFunction = isFunction.isFunction;
+exports.isJSON = isJSON.isJSON;
+exports.isJSONArray = isJSONValue.isJSONArray;
+exports.isJSONObject = isJSONValue.isJSONObject;
+exports.isJSONValue = isJSONValue.isJSONValue;
+exports.isLength = isLength.isLength;
+exports.isMap = isMap.isMap;
+exports.isNil = isNil.isNil;
+exports.isNode = isNode.isNode;
+exports.isNotNil = isNotNil.isNotNil;
+exports.isNull = isNull.isNull;
+exports.isPlainObject = isPlainObject.isPlainObject;
+exports.isPrimitive = isPrimitive.isPrimitive;
+exports.isPromise = isPromise.isPromise;
+exports.isRegExp = isRegExp.isRegExp;
+exports.isSet = isSet.isSet;
+exports.isString = isString.isString;
+exports.isSymbol = isSymbol.isSymbol;
+exports.isTypedArray = isTypedArray.isTypedArray;
+exports.isUndefined = isUndefined.isUndefined;
+exports.isWeakMap = isWeakMap.isWeakMap;
+exports.isWeakSet = isWeakSet.isWeakSet;
Index: node_modules/es-toolkit/dist/predicate/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+export { isArrayBuffer } from './isArrayBuffer.mjs';
+export { isBlob } from './isBlob.mjs';
+export { isBoolean } from './isBoolean.mjs';
+export { isBrowser } from './isBrowser.mjs';
+export { isBuffer } from './isBuffer.mjs';
+export { isDate } from './isDate.mjs';
+export { isEqual } from './isEqual.mjs';
+export { isEqualWith } from './isEqualWith.mjs';
+export { isError } from './isError.mjs';
+export { isFile } from './isFile.mjs';
+export { isFunction } from './isFunction.mjs';
+export { isJSON } from './isJSON.mjs';
+export { isJSONArray, isJSONObject, isJSONValue } from './isJSONValue.mjs';
+export { isLength } from './isLength.mjs';
+export { isMap } from './isMap.mjs';
+export { isNil } from './isNil.mjs';
+export { isNode } from './isNode.mjs';
+export { isNotNil } from './isNotNil.mjs';
+export { isNull } from './isNull.mjs';
+export { isPlainObject } from './isPlainObject.mjs';
+export { isPrimitive } from './isPrimitive.mjs';
+export { isPromise } from './isPromise.mjs';
+export { isRegExp } from './isRegExp.mjs';
+export { isSet } from './isSet.mjs';
+export { isString } from './isString.mjs';
+export { isSymbol } from './isSymbol.mjs';
+export { isTypedArray } from './isTypedArray.mjs';
+export { isUndefined } from './isUndefined.mjs';
+export { isWeakMap } from './isWeakMap.mjs';
+export { isWeakSet } from './isWeakSet.mjs';
Index: node_modules/es-toolkit/dist/predicate/isArrayBuffer.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isArrayBuffer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isArrayBuffer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `ArrayBuffer`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `ArrayBuffer`.
+ *
+ * @param {unknown} value The value to check if it is a `ArrayBuffer`.
+ * @returns {value is ArrayBuffer} Returns `true` if `value` is a `ArrayBuffer`, else `false`.
+ *
+ * @example
+ * const value1 = new ArrayBuffer();
+ * const value2 = new Array();
+ * const value3 = new Map();
+ *
+ * console.log(isArrayBuffer(value1)); // true
+ * console.log(isArrayBuffer(value2)); // false
+ * console.log(isArrayBuffer(value3)); // false
+ */
+declare function isArrayBuffer(value: unknown): value is ArrayBuffer;
+
+export { isArrayBuffer };
Index: node_modules/es-toolkit/dist/predicate/isArrayBuffer.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isArrayBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isArrayBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `ArrayBuffer`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `ArrayBuffer`.
+ *
+ * @param {unknown} value The value to check if it is a `ArrayBuffer`.
+ * @returns {value is ArrayBuffer} Returns `true` if `value` is a `ArrayBuffer`, else `false`.
+ *
+ * @example
+ * const value1 = new ArrayBuffer();
+ * const value2 = new Array();
+ * const value3 = new Map();
+ *
+ * console.log(isArrayBuffer(value1)); // true
+ * console.log(isArrayBuffer(value2)); // false
+ * console.log(isArrayBuffer(value3)); // false
+ */
+declare function isArrayBuffer(value: unknown): value is ArrayBuffer;
+
+export { isArrayBuffer };
Index: node_modules/es-toolkit/dist/predicate/isArrayBuffer.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isArrayBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isArrayBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isArrayBuffer(value) {
+    return value instanceof ArrayBuffer;
+}
+
+exports.isArrayBuffer = isArrayBuffer;
Index: node_modules/es-toolkit/dist/predicate/isArrayBuffer.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isArrayBuffer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isArrayBuffer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isArrayBuffer(value) {
+    return value instanceof ArrayBuffer;
+}
+
+export { isArrayBuffer };
Index: node_modules/es-toolkit/dist/predicate/isBlob.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBlob.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBlob.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Checks if the given value is a Blob.
+ *
+ * This function tests whether the provided value is an instance of `Blob`.
+ * It returns `true` if the value is an instance of `Blob`, and `false` otherwise.
+ *
+ * @param {unknown} x - The value to test if it is a Blob.
+ * @returns {x is Blob} True if the value is a Blob, false otherwise.
+ *
+ * @example
+ * const value1 = new Blob();
+ * const value2 = {};
+ *
+ * console.log(isBlob(value1)); // true
+ * console.log(isBlob(value2)); // false
+ */
+declare function isBlob(x: unknown): x is Blob;
+
+export { isBlob };
Index: node_modules/es-toolkit/dist/predicate/isBlob.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBlob.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBlob.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Checks if the given value is a Blob.
+ *
+ * This function tests whether the provided value is an instance of `Blob`.
+ * It returns `true` if the value is an instance of `Blob`, and `false` otherwise.
+ *
+ * @param {unknown} x - The value to test if it is a Blob.
+ * @returns {x is Blob} True if the value is a Blob, false otherwise.
+ *
+ * @example
+ * const value1 = new Blob();
+ * const value2 = {};
+ *
+ * console.log(isBlob(value1)); // true
+ * console.log(isBlob(value2)); // false
+ */
+declare function isBlob(x: unknown): x is Blob;
+
+export { isBlob };
Index: node_modules/es-toolkit/dist/predicate/isBlob.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBlob.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBlob.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isBlob(x) {
+    if (typeof Blob === 'undefined') {
+        return false;
+    }
+    return x instanceof Blob;
+}
+
+exports.isBlob = isBlob;
Index: node_modules/es-toolkit/dist/predicate/isBlob.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBlob.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBlob.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+function isBlob(x) {
+    if (typeof Blob === 'undefined') {
+        return false;
+    }
+    return x instanceof Blob;
+}
+
+export { isBlob };
Index: node_modules/es-toolkit/dist/predicate/isBoolean.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBoolean.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBoolean.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Checks if the given value is boolean.
+ *
+ * This function tests whether the provided value is strictly `boolean`.
+ * It returns `true` if the value is `boolean`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `boolean`.
+ *
+ * @param {unknown} x - The Value to test if it is boolean.
+ * @returns {x is boolean} True if the value is boolean, false otherwise.
+ *
+ * @example
+ *
+ * const value1 = true;
+ * const value2 = 0;
+ * const value3 = 'abc';
+ *
+ * console.log(isBoolean(value1)); // true
+ * console.log(isBoolean(value2)); // false
+ * console.log(isBoolean(value3)); // false
+ *
+ */
+declare function isBoolean(x: unknown): x is boolean;
+
+export { isBoolean };
Index: node_modules/es-toolkit/dist/predicate/isBoolean.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBoolean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBoolean.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+/**
+ * Checks if the given value is boolean.
+ *
+ * This function tests whether the provided value is strictly `boolean`.
+ * It returns `true` if the value is `boolean`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `boolean`.
+ *
+ * @param {unknown} x - The Value to test if it is boolean.
+ * @returns {x is boolean} True if the value is boolean, false otherwise.
+ *
+ * @example
+ *
+ * const value1 = true;
+ * const value2 = 0;
+ * const value3 = 'abc';
+ *
+ * console.log(isBoolean(value1)); // true
+ * console.log(isBoolean(value2)); // false
+ * console.log(isBoolean(value3)); // false
+ *
+ */
+declare function isBoolean(x: unknown): x is boolean;
+
+export { isBoolean };
Index: node_modules/es-toolkit/dist/predicate/isBoolean.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBoolean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBoolean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isBoolean(x) {
+    return typeof x === 'boolean';
+}
+
+exports.isBoolean = isBoolean;
Index: node_modules/es-toolkit/dist/predicate/isBoolean.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBoolean.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBoolean.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isBoolean(x) {
+    return typeof x === 'boolean';
+}
+
+export { isBoolean };
Index: node_modules/es-toolkit/dist/predicate/isBrowser.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBrowser.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBrowser.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if the current environment is a browser.
+ *
+ * This function checks for the existence of the `window.document` property,
+ * which only exists in browser environments.
+ *
+ * @returns {boolean} `true` if the current environment is a browser, otherwise `false`.
+ *
+ * @example
+ * if (isBrowser()) {
+ *   console.log("This is running in a browser");
+ *   document.getElementById('app').innerHTML = 'Hello World';
+ * }
+ */
+declare function isBrowser(): boolean;
+
+export { isBrowser };
Index: node_modules/es-toolkit/dist/predicate/isBrowser.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBrowser.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBrowser.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if the current environment is a browser.
+ *
+ * This function checks for the existence of the `window.document` property,
+ * which only exists in browser environments.
+ *
+ * @returns {boolean} `true` if the current environment is a browser, otherwise `false`.
+ *
+ * @example
+ * if (isBrowser()) {
+ *   console.log("This is running in a browser");
+ *   document.getElementById('app').innerHTML = 'Hello World';
+ * }
+ */
+declare function isBrowser(): boolean;
+
+export { isBrowser };
Index: node_modules/es-toolkit/dist/predicate/isBrowser.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBrowser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBrowser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isBrowser() {
+    return typeof window !== 'undefined' && window?.document != null;
+}
+
+exports.isBrowser = isBrowser;
Index: node_modules/es-toolkit/dist/predicate/isBrowser.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBrowser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBrowser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isBrowser() {
+    return typeof window !== 'undefined' && window?.document != null;
+}
+
+export { isBrowser };
Index: node_modules/es-toolkit/dist/predicate/isBuffer.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBuffer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBuffer.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Checks if the given value is a Buffer instance.
+ *
+ * This function tests whether the provided value is an instance of Buffer.
+ * It returns `true` if the value is a Buffer, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Buffer`.
+ *
+ * @param {unknown} x - The value to check if it is a Buffer.
+ * @returns {boolean} Returns `true` if `x` is a Buffer, else `false`.
+ *
+ * @example
+ * const buffer = Buffer.from("test");
+ * console.log(isBuffer(buffer)); // true
+ *
+ * const notBuffer = "not a buffer";
+ * console.log(isBuffer(notBuffer)); // false
+ */
+declare function isBuffer(x: unknown): boolean;
+
+export { isBuffer };
Index: node_modules/es-toolkit/dist/predicate/isBuffer.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBuffer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Checks if the given value is a Buffer instance.
+ *
+ * This function tests whether the provided value is an instance of Buffer.
+ * It returns `true` if the value is a Buffer, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Buffer`.
+ *
+ * @param {unknown} x - The value to check if it is a Buffer.
+ * @returns {boolean} Returns `true` if `x` is a Buffer, else `false`.
+ *
+ * @example
+ * const buffer = Buffer.from("test");
+ * console.log(isBuffer(buffer)); // true
+ *
+ * const notBuffer = "not a buffer";
+ * console.log(isBuffer(notBuffer)); // false
+ */
+declare function isBuffer(x: unknown): boolean;
+
+export { isBuffer };
Index: node_modules/es-toolkit/dist/predicate/isBuffer.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBuffer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isBuffer(x) {
+    return typeof Buffer !== 'undefined' && Buffer.isBuffer(x);
+}
+
+exports.isBuffer = isBuffer;
Index: node_modules/es-toolkit/dist/predicate/isBuffer.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isBuffer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isBuffer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isBuffer(x) {
+    return typeof Buffer !== 'undefined' && Buffer.isBuffer(x);
+}
+
+export { isBuffer };
Index: node_modules/es-toolkit/dist/predicate/isDate.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isDate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isDate.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a Date object.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is Date} Returns `true` if `value` is a Date object, `false` otherwise.
+ *
+ * @example
+ * const value1 = new Date();
+ * const value2 = '2024-01-01';
+ *
+ * console.log(isDate(value1)); // true
+ * console.log(isDate(value2)); // false
+ */
+declare function isDate(value: unknown): value is Date;
+
+export { isDate };
Index: node_modules/es-toolkit/dist/predicate/isDate.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isDate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isDate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a Date object.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is Date} Returns `true` if `value` is a Date object, `false` otherwise.
+ *
+ * @example
+ * const value1 = new Date();
+ * const value2 = '2024-01-01';
+ *
+ * console.log(isDate(value1)); // true
+ * console.log(isDate(value2)); // false
+ */
+declare function isDate(value: unknown): value is Date;
+
+export { isDate };
Index: node_modules/es-toolkit/dist/predicate/isDate.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isDate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isDate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isDate(value) {
+    return value instanceof Date;
+}
+
+exports.isDate = isDate;
Index: node_modules/es-toolkit/dist/predicate/isDate.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isDate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isDate.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isDate(value) {
+    return value instanceof Date;
+}
+
+export { isDate };
Index: node_modules/es-toolkit/dist/predicate/isEqual.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isEqual.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isEqual.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if two values are equal, including support for `Date`, `RegExp`, and deep object comparison.
+ *
+ * @param {unknown} a - The first value to compare.
+ * @param {unknown} b - The second value to compare.
+ * @returns {boolean} `true` if the values are equal, otherwise `false`.
+ *
+ * @example
+ * isEqual(1, 1); // true
+ * isEqual({ a: 1 }, { a: 1 }); // true
+ * isEqual(/abc/g, /abc/g); // true
+ * isEqual(new Date('2020-01-01'), new Date('2020-01-01')); // true
+ * isEqual([1, 2, 3], [1, 2, 3]); // true
+ */
+declare function isEqual(a: any, b: any): boolean;
+
+export { isEqual };
Index: node_modules/es-toolkit/dist/predicate/isEqual.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isEqual.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isEqual.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if two values are equal, including support for `Date`, `RegExp`, and deep object comparison.
+ *
+ * @param {unknown} a - The first value to compare.
+ * @param {unknown} b - The second value to compare.
+ * @returns {boolean} `true` if the values are equal, otherwise `false`.
+ *
+ * @example
+ * isEqual(1, 1); // true
+ * isEqual({ a: 1 }, { a: 1 }); // true
+ * isEqual(/abc/g, /abc/g); // true
+ * isEqual(new Date('2020-01-01'), new Date('2020-01-01')); // true
+ * isEqual([1, 2, 3], [1, 2, 3]); // true
+ */
+declare function isEqual(a: any, b: any): boolean;
+
+export { isEqual };
Index: node_modules/es-toolkit/dist/predicate/isEqual.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isEqual.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isEqual.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isEqualWith = require('./isEqualWith.js');
+const noop = require('../function/noop.js');
+
+function isEqual(a, b) {
+    return isEqualWith.isEqualWith(a, b, noop.noop);
+}
+
+exports.isEqual = isEqual;
Index: node_modules/es-toolkit/dist/predicate/isEqual.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isEqual.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isEqual.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { isEqualWith } from './isEqualWith.mjs';
+import { noop } from '../function/noop.mjs';
+
+function isEqual(a, b) {
+    return isEqualWith(a, b, noop);
+}
+
+export { isEqual };
Index: node_modules/es-toolkit/dist/predicate/isEqualWith.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isEqualWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isEqualWith.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Compares two values for equality using a custom comparison function.
+ *
+ * The custom function allows for fine-tuned control over the comparison process. If it returns a boolean, that result determines the equality. If it returns undefined, the function falls back to the default equality comparison.
+ *
+ * This function also uses the custom equality function to compare values inside objects,
+ * arrays, maps, sets, and other complex structures, ensuring a deep comparison.
+ *
+ * This approach provides flexibility in handling complex comparisons while maintaining efficient default behavior for simpler cases.
+ *
+ * The custom comparison function can take up to six parameters:
+ * - `x`: The value from the first object `a`.
+ * - `y`: The value from the second object `b`.
+ * - `property`: The property key used to get `x` and `y`.
+ * - `xParent`: The parent of the first value `x`.
+ * - `yParent`: The parent of the second value `y`.
+ * - `stack`: An internal stack (Map) to handle circular references.
+ *
+ * @param {unknown} a - The first value to compare.
+ * @param {unknown} b - The second value to compare.
+ * @param {(x: any, y: any, property?: PropertyKey, xParent?: any, yParent?: any, stack?: Map<any, any>) => boolean | void} areValuesEqual - A function to customize the comparison.
+ *   If it returns a boolean, that result will be used. If it returns undefined,
+ *   the default equality comparison will be used.
+ * @returns {boolean} `true` if the values are equal according to the customizer, otherwise `false`.
+ *
+ * @example
+ * const customizer = (a, b) => {
+ *   if (typeof a === 'string' && typeof b === 'string') {
+ *     return a.toLowerCase() === b.toLowerCase();
+ *   }
+ * };
+ * isEqualWith('Hello', 'hello', customizer); // true
+ * isEqualWith({ a: 'Hello' }, { a: 'hello' }, customizer); // true
+ * isEqualWith([1, 2, 3], [1, 2, 3], customizer); // true
+ */
+declare function isEqualWith(a: any, b: any, areValuesEqual: (x: any, y: any, property?: PropertyKey, xParent?: any, yParent?: any, stack?: Map<any, any>) => boolean | void): boolean;
+
+export { isEqualWith };
Index: node_modules/es-toolkit/dist/predicate/isEqualWith.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isEqualWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isEqualWith.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+/**
+ * Compares two values for equality using a custom comparison function.
+ *
+ * The custom function allows for fine-tuned control over the comparison process. If it returns a boolean, that result determines the equality. If it returns undefined, the function falls back to the default equality comparison.
+ *
+ * This function also uses the custom equality function to compare values inside objects,
+ * arrays, maps, sets, and other complex structures, ensuring a deep comparison.
+ *
+ * This approach provides flexibility in handling complex comparisons while maintaining efficient default behavior for simpler cases.
+ *
+ * The custom comparison function can take up to six parameters:
+ * - `x`: The value from the first object `a`.
+ * - `y`: The value from the second object `b`.
+ * - `property`: The property key used to get `x` and `y`.
+ * - `xParent`: The parent of the first value `x`.
+ * - `yParent`: The parent of the second value `y`.
+ * - `stack`: An internal stack (Map) to handle circular references.
+ *
+ * @param {unknown} a - The first value to compare.
+ * @param {unknown} b - The second value to compare.
+ * @param {(x: any, y: any, property?: PropertyKey, xParent?: any, yParent?: any, stack?: Map<any, any>) => boolean | void} areValuesEqual - A function to customize the comparison.
+ *   If it returns a boolean, that result will be used. If it returns undefined,
+ *   the default equality comparison will be used.
+ * @returns {boolean} `true` if the values are equal according to the customizer, otherwise `false`.
+ *
+ * @example
+ * const customizer = (a, b) => {
+ *   if (typeof a === 'string' && typeof b === 'string') {
+ *     return a.toLowerCase() === b.toLowerCase();
+ *   }
+ * };
+ * isEqualWith('Hello', 'hello', customizer); // true
+ * isEqualWith({ a: 'Hello' }, { a: 'hello' }, customizer); // true
+ * isEqualWith([1, 2, 3], [1, 2, 3], customizer); // true
+ */
+declare function isEqualWith(a: any, b: any, areValuesEqual: (x: any, y: any, property?: PropertyKey, xParent?: any, yParent?: any, stack?: Map<any, any>) => boolean | void): boolean;
+
+export { isEqualWith };
Index: node_modules/es-toolkit/dist/predicate/isEqualWith.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isEqualWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isEqualWith.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,189 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isPlainObject = require('./isPlainObject.js');
+const getSymbols = require('../compat/_internal/getSymbols.js');
+const getTag = require('../compat/_internal/getTag.js');
+const tags = require('../compat/_internal/tags.js');
+const eq = require('../compat/util/eq.js');
+
+function isEqualWith(a, b, areValuesEqual) {
+    return isEqualWithImpl(a, b, undefined, undefined, undefined, undefined, areValuesEqual);
+}
+function isEqualWithImpl(a, b, property, aParent, bParent, stack, areValuesEqual) {
+    const result = areValuesEqual(a, b, property, aParent, bParent, stack);
+    if (result !== undefined) {
+        return result;
+    }
+    if (typeof a === typeof b) {
+        switch (typeof a) {
+            case 'bigint':
+            case 'string':
+            case 'boolean':
+            case 'symbol':
+            case 'undefined': {
+                return a === b;
+            }
+            case 'number': {
+                return a === b || Object.is(a, b);
+            }
+            case 'function': {
+                return a === b;
+            }
+            case 'object': {
+                return areObjectsEqual(a, b, stack, areValuesEqual);
+            }
+        }
+    }
+    return areObjectsEqual(a, b, stack, areValuesEqual);
+}
+function areObjectsEqual(a, b, stack, areValuesEqual) {
+    if (Object.is(a, b)) {
+        return true;
+    }
+    let aTag = getTag.getTag(a);
+    let bTag = getTag.getTag(b);
+    if (aTag === tags.argumentsTag) {
+        aTag = tags.objectTag;
+    }
+    if (bTag === tags.argumentsTag) {
+        bTag = tags.objectTag;
+    }
+    if (aTag !== bTag) {
+        return false;
+    }
+    switch (aTag) {
+        case tags.stringTag:
+            return a.toString() === b.toString();
+        case tags.numberTag: {
+            const x = a.valueOf();
+            const y = b.valueOf();
+            return eq.eq(x, y);
+        }
+        case tags.booleanTag:
+        case tags.dateTag:
+        case tags.symbolTag:
+            return Object.is(a.valueOf(), b.valueOf());
+        case tags.regexpTag: {
+            return a.source === b.source && a.flags === b.flags;
+        }
+        case tags.functionTag: {
+            return a === b;
+        }
+    }
+    stack = stack ?? new Map();
+    const aStack = stack.get(a);
+    const bStack = stack.get(b);
+    if (aStack != null && bStack != null) {
+        return aStack === b;
+    }
+    stack.set(a, b);
+    stack.set(b, a);
+    try {
+        switch (aTag) {
+            case tags.mapTag: {
+                if (a.size !== b.size) {
+                    return false;
+                }
+                for (const [key, value] of a.entries()) {
+                    if (!b.has(key) || !isEqualWithImpl(value, b.get(key), key, a, b, stack, areValuesEqual)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+            case tags.setTag: {
+                if (a.size !== b.size) {
+                    return false;
+                }
+                const aValues = Array.from(a.values());
+                const bValues = Array.from(b.values());
+                for (let i = 0; i < aValues.length; i++) {
+                    const aValue = aValues[i];
+                    const index = bValues.findIndex(bValue => {
+                        return isEqualWithImpl(aValue, bValue, undefined, a, b, stack, areValuesEqual);
+                    });
+                    if (index === -1) {
+                        return false;
+                    }
+                    bValues.splice(index, 1);
+                }
+                return true;
+            }
+            case tags.arrayTag:
+            case tags.uint8ArrayTag:
+            case tags.uint8ClampedArrayTag:
+            case tags.uint16ArrayTag:
+            case tags.uint32ArrayTag:
+            case tags.bigUint64ArrayTag:
+            case tags.int8ArrayTag:
+            case tags.int16ArrayTag:
+            case tags.int32ArrayTag:
+            case tags.bigInt64ArrayTag:
+            case tags.float32ArrayTag:
+            case tags.float64ArrayTag: {
+                if (typeof Buffer !== 'undefined' && Buffer.isBuffer(a) !== Buffer.isBuffer(b)) {
+                    return false;
+                }
+                if (a.length !== b.length) {
+                    return false;
+                }
+                for (let i = 0; i < a.length; i++) {
+                    if (!isEqualWithImpl(a[i], b[i], i, a, b, stack, areValuesEqual)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+            case tags.arrayBufferTag: {
+                if (a.byteLength !== b.byteLength) {
+                    return false;
+                }
+                return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);
+            }
+            case tags.dataViewTag: {
+                if (a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset) {
+                    return false;
+                }
+                return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);
+            }
+            case tags.errorTag: {
+                return a.name === b.name && a.message === b.message;
+            }
+            case tags.objectTag: {
+                const areEqualInstances = areObjectsEqual(a.constructor, b.constructor, stack, areValuesEqual) ||
+                    (isPlainObject.isPlainObject(a) && isPlainObject.isPlainObject(b));
+                if (!areEqualInstances) {
+                    return false;
+                }
+                const aKeys = [...Object.keys(a), ...getSymbols.getSymbols(a)];
+                const bKeys = [...Object.keys(b), ...getSymbols.getSymbols(b)];
+                if (aKeys.length !== bKeys.length) {
+                    return false;
+                }
+                for (let i = 0; i < aKeys.length; i++) {
+                    const propKey = aKeys[i];
+                    const aProp = a[propKey];
+                    if (!Object.hasOwn(b, propKey)) {
+                        return false;
+                    }
+                    const bProp = b[propKey];
+                    if (!isEqualWithImpl(aProp, bProp, propKey, a, b, stack, areValuesEqual)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+            default: {
+                return false;
+            }
+        }
+    }
+    finally {
+        stack.delete(a);
+        stack.delete(b);
+    }
+}
+
+exports.isEqualWith = isEqualWith;
Index: node_modules/es-toolkit/dist/predicate/isEqualWith.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isEqualWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isEqualWith.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,185 @@
+import { isPlainObject } from './isPlainObject.mjs';
+import { getSymbols } from '../compat/_internal/getSymbols.mjs';
+import { getTag } from '../compat/_internal/getTag.mjs';
+import { functionTag, regexpTag, symbolTag, dateTag, booleanTag, numberTag, stringTag, objectTag, errorTag, dataViewTag, arrayBufferTag, float64ArrayTag, float32ArrayTag, bigInt64ArrayTag, int32ArrayTag, int16ArrayTag, int8ArrayTag, bigUint64ArrayTag, uint32ArrayTag, uint16ArrayTag, uint8ClampedArrayTag, uint8ArrayTag, arrayTag, setTag, mapTag, argumentsTag } from '../compat/_internal/tags.mjs';
+import { eq } from '../compat/util/eq.mjs';
+
+function isEqualWith(a, b, areValuesEqual) {
+    return isEqualWithImpl(a, b, undefined, undefined, undefined, undefined, areValuesEqual);
+}
+function isEqualWithImpl(a, b, property, aParent, bParent, stack, areValuesEqual) {
+    const result = areValuesEqual(a, b, property, aParent, bParent, stack);
+    if (result !== undefined) {
+        return result;
+    }
+    if (typeof a === typeof b) {
+        switch (typeof a) {
+            case 'bigint':
+            case 'string':
+            case 'boolean':
+            case 'symbol':
+            case 'undefined': {
+                return a === b;
+            }
+            case 'number': {
+                return a === b || Object.is(a, b);
+            }
+            case 'function': {
+                return a === b;
+            }
+            case 'object': {
+                return areObjectsEqual(a, b, stack, areValuesEqual);
+            }
+        }
+    }
+    return areObjectsEqual(a, b, stack, areValuesEqual);
+}
+function areObjectsEqual(a, b, stack, areValuesEqual) {
+    if (Object.is(a, b)) {
+        return true;
+    }
+    let aTag = getTag(a);
+    let bTag = getTag(b);
+    if (aTag === argumentsTag) {
+        aTag = objectTag;
+    }
+    if (bTag === argumentsTag) {
+        bTag = objectTag;
+    }
+    if (aTag !== bTag) {
+        return false;
+    }
+    switch (aTag) {
+        case stringTag:
+            return a.toString() === b.toString();
+        case numberTag: {
+            const x = a.valueOf();
+            const y = b.valueOf();
+            return eq(x, y);
+        }
+        case booleanTag:
+        case dateTag:
+        case symbolTag:
+            return Object.is(a.valueOf(), b.valueOf());
+        case regexpTag: {
+            return a.source === b.source && a.flags === b.flags;
+        }
+        case functionTag: {
+            return a === b;
+        }
+    }
+    stack = stack ?? new Map();
+    const aStack = stack.get(a);
+    const bStack = stack.get(b);
+    if (aStack != null && bStack != null) {
+        return aStack === b;
+    }
+    stack.set(a, b);
+    stack.set(b, a);
+    try {
+        switch (aTag) {
+            case mapTag: {
+                if (a.size !== b.size) {
+                    return false;
+                }
+                for (const [key, value] of a.entries()) {
+                    if (!b.has(key) || !isEqualWithImpl(value, b.get(key), key, a, b, stack, areValuesEqual)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+            case setTag: {
+                if (a.size !== b.size) {
+                    return false;
+                }
+                const aValues = Array.from(a.values());
+                const bValues = Array.from(b.values());
+                for (let i = 0; i < aValues.length; i++) {
+                    const aValue = aValues[i];
+                    const index = bValues.findIndex(bValue => {
+                        return isEqualWithImpl(aValue, bValue, undefined, a, b, stack, areValuesEqual);
+                    });
+                    if (index === -1) {
+                        return false;
+                    }
+                    bValues.splice(index, 1);
+                }
+                return true;
+            }
+            case arrayTag:
+            case uint8ArrayTag:
+            case uint8ClampedArrayTag:
+            case uint16ArrayTag:
+            case uint32ArrayTag:
+            case bigUint64ArrayTag:
+            case int8ArrayTag:
+            case int16ArrayTag:
+            case int32ArrayTag:
+            case bigInt64ArrayTag:
+            case float32ArrayTag:
+            case float64ArrayTag: {
+                if (typeof Buffer !== 'undefined' && Buffer.isBuffer(a) !== Buffer.isBuffer(b)) {
+                    return false;
+                }
+                if (a.length !== b.length) {
+                    return false;
+                }
+                for (let i = 0; i < a.length; i++) {
+                    if (!isEqualWithImpl(a[i], b[i], i, a, b, stack, areValuesEqual)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+            case arrayBufferTag: {
+                if (a.byteLength !== b.byteLength) {
+                    return false;
+                }
+                return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);
+            }
+            case dataViewTag: {
+                if (a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset) {
+                    return false;
+                }
+                return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);
+            }
+            case errorTag: {
+                return a.name === b.name && a.message === b.message;
+            }
+            case objectTag: {
+                const areEqualInstances = areObjectsEqual(a.constructor, b.constructor, stack, areValuesEqual) ||
+                    (isPlainObject(a) && isPlainObject(b));
+                if (!areEqualInstances) {
+                    return false;
+                }
+                const aKeys = [...Object.keys(a), ...getSymbols(a)];
+                const bKeys = [...Object.keys(b), ...getSymbols(b)];
+                if (aKeys.length !== bKeys.length) {
+                    return false;
+                }
+                for (let i = 0; i < aKeys.length; i++) {
+                    const propKey = aKeys[i];
+                    const aProp = a[propKey];
+                    if (!Object.hasOwn(b, propKey)) {
+                        return false;
+                    }
+                    const bProp = b[propKey];
+                    if (!isEqualWithImpl(aProp, bProp, propKey, a, b, stack, areValuesEqual)) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+            default: {
+                return false;
+            }
+        }
+    }
+    finally {
+        stack.delete(a);
+        stack.delete(b);
+    }
+}
+
+export { isEqualWith };
Index: node_modules/es-toolkit/dist/predicate/isError.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isError.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isError.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is an Error object.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is Error} Returns `true` if `value` is an Error object, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * console.log(isError(new Error())); // true
+ * console.log(isError('Error')); // false
+ * console.log(isError({ name: 'Error', message: '' })); // false
+ * ```
+ */
+declare function isError(value: unknown): value is Error;
+
+export { isError };
Index: node_modules/es-toolkit/dist/predicate/isError.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isError.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is an Error object.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is Error} Returns `true` if `value` is an Error object, `false` otherwise.
+ *
+ * @example
+ * ```typescript
+ * console.log(isError(new Error())); // true
+ * console.log(isError('Error')); // false
+ * console.log(isError({ name: 'Error', message: '' })); // false
+ * ```
+ */
+declare function isError(value: unknown): value is Error;
+
+export { isError };
Index: node_modules/es-toolkit/dist/predicate/isError.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isError.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isError(value) {
+    return value instanceof Error;
+}
+
+exports.isError = isError;
Index: node_modules/es-toolkit/dist/predicate/isError.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isError.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isError.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isError(value) {
+    return value instanceof Error;
+}
+
+export { isError };
Index: node_modules/es-toolkit/dist/predicate/isFile.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isFile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isFile.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Checks if the given value is a File.
+ *
+ * This function tests whether the provided value is an instance of `File`.
+ * It returns `true` if the value is an instance of `File`, and `false` otherwise.
+ *
+ * @param {unknown} x - The value to test if it is a File.
+ * @returns {x is File} True if the value is a File, false otherwise.
+ *
+ * @example
+ * const value1 = new File(["content"], "example.txt");
+ * const value2 = {};
+ * const value3 = new Blob(["content"], { type: "text/plain" });
+ *
+ * console.log(isFile(value1)); // true
+ * console.log(isFile(value2)); // false
+ * console.log(isFile(value3)); // false
+ */
+declare function isFile(x: unknown): x is File;
+
+export { isFile };
Index: node_modules/es-toolkit/dist/predicate/isFile.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isFile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isFile.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Checks if the given value is a File.
+ *
+ * This function tests whether the provided value is an instance of `File`.
+ * It returns `true` if the value is an instance of `File`, and `false` otherwise.
+ *
+ * @param {unknown} x - The value to test if it is a File.
+ * @returns {x is File} True if the value is a File, false otherwise.
+ *
+ * @example
+ * const value1 = new File(["content"], "example.txt");
+ * const value2 = {};
+ * const value3 = new Blob(["content"], { type: "text/plain" });
+ *
+ * console.log(isFile(value1)); // true
+ * console.log(isFile(value2)); // false
+ * console.log(isFile(value3)); // false
+ */
+declare function isFile(x: unknown): x is File;
+
+export { isFile };
Index: node_modules/es-toolkit/dist/predicate/isFile.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isFile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isFile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isBlob = require('./isBlob.js');
+
+function isFile(x) {
+    if (typeof File === 'undefined') {
+        return false;
+    }
+    return isBlob.isBlob(x) && x instanceof File;
+}
+
+exports.isFile = isFile;
Index: node_modules/es-toolkit/dist/predicate/isFile.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isFile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isFile.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { isBlob } from './isBlob.mjs';
+
+function isFile(x) {
+    if (typeof File === 'undefined') {
+        return false;
+    }
+    return isBlob(x) && x instanceof File;
+}
+
+export { isFile };
Index: node_modules/es-toolkit/dist/predicate/isFunction.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isFunction.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isFunction.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a function.
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ *
+ * @example
+ * isFunction(Array.prototype.slice); // true
+ * isFunction(async function () {}); // true
+ * isFunction(function* () {}); // true
+ * isFunction(Proxy); // true
+ * isFunction(Int8Array); // true
+ */
+declare function isFunction(value: any): value is (...args: any[]) => any;
+
+export { isFunction };
Index: node_modules/es-toolkit/dist/predicate/isFunction.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isFunction.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isFunction.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a function.
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ *
+ * @example
+ * isFunction(Array.prototype.slice); // true
+ * isFunction(async function () {}); // true
+ * isFunction(function* () {}); // true
+ * isFunction(Proxy); // true
+ * isFunction(Int8Array); // true
+ */
+declare function isFunction(value: any): value is (...args: any[]) => any;
+
+export { isFunction };
Index: node_modules/es-toolkit/dist/predicate/isFunction.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isFunction.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isFunction.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isFunction(value) {
+    return typeof value === 'function';
+}
+
+exports.isFunction = isFunction;
Index: node_modules/es-toolkit/dist/predicate/isFunction.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isFunction.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isFunction.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isFunction(value) {
+    return typeof value === 'function';
+}
+
+export { isFunction };
Index: node_modules/es-toolkit/dist/predicate/isJSON.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isJSON.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isJSON.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Checks if a given value is a valid JSON string.
+ *
+ * A valid JSON string is one that can be successfully parsed using `JSON.parse()`. According to JSON
+ * specifications, valid JSON can represent:
+ * - Objects (with string keys and valid JSON values)
+ * - Arrays (containing valid JSON values)
+ * - Strings
+ * - Numbers
+ * - Booleans
+ * - null
+ *
+ * String values like `"null"`, `"true"`, `"false"`, and numeric strings (e.g., `"42"`) are considered
+ * valid JSON and will return true.
+ *
+ * This function serves as a type guard in TypeScript, narrowing the type of the argument to `string`.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid JSON string, else `false`.
+ *
+ * @example
+ * isJSON('{"name":"John","age":30}'); // true
+ * isJSON('[1,2,3]'); // true
+ * isJSON('true'); // true
+ * isJSON('invalid json'); // false
+ * isJSON({ name: 'John' }); // false (not a string)
+ * isJSON(null); // false (not a string)
+ */
+declare function isJSON(value: unknown): value is string;
+
+export { isJSON };
Index: node_modules/es-toolkit/dist/predicate/isJSON.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isJSON.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isJSON.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Checks if a given value is a valid JSON string.
+ *
+ * A valid JSON string is one that can be successfully parsed using `JSON.parse()`. According to JSON
+ * specifications, valid JSON can represent:
+ * - Objects (with string keys and valid JSON values)
+ * - Arrays (containing valid JSON values)
+ * - Strings
+ * - Numbers
+ * - Booleans
+ * - null
+ *
+ * String values like `"null"`, `"true"`, `"false"`, and numeric strings (e.g., `"42"`) are considered
+ * valid JSON and will return true.
+ *
+ * This function serves as a type guard in TypeScript, narrowing the type of the argument to `string`.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid JSON string, else `false`.
+ *
+ * @example
+ * isJSON('{"name":"John","age":30}'); // true
+ * isJSON('[1,2,3]'); // true
+ * isJSON('true'); // true
+ * isJSON('invalid json'); // false
+ * isJSON({ name: 'John' }); // false (not a string)
+ * isJSON(null); // false (not a string)
+ */
+declare function isJSON(value: unknown): value is string;
+
+export { isJSON };
Index: node_modules/es-toolkit/dist/predicate/isJSON.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isJSON.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isJSON.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isJSON(value) {
+    if (typeof value !== 'string') {
+        return false;
+    }
+    try {
+        JSON.parse(value);
+        return true;
+    }
+    catch {
+        return false;
+    }
+}
+
+exports.isJSON = isJSON;
Index: node_modules/es-toolkit/dist/predicate/isJSON.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isJSON.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isJSON.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+function isJSON(value) {
+    if (typeof value !== 'string') {
+        return false;
+    }
+    try {
+        JSON.parse(value);
+        return true;
+    }
+    catch {
+        return false;
+    }
+}
+
+export { isJSON };
Index: node_modules/es-toolkit/dist/predicate/isJSONValue.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isJSONValue.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isJSONValue.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+/**
+ * Checks if a given value is a valid JSON value.
+ *
+ * A valid JSON value can be:
+ * - null
+ * - a JSON object (an object with string keys and valid JSON values)
+ * - a JSON array (an array of valid JSON values)
+ * - a string
+ * - a number
+ * - a boolean
+ *
+ * @param {unknown} value - The value to check.
+ * @returns {boolean} - True if the value is a valid JSON value, otherwise false.
+ *
+ * @example
+ * console.log(isJSONValue(null)); // true
+ * console.log(isJSONValue({ key: "value" })); // true
+ * console.log(isJSONValue([1, 2, 3])); // true
+ * console.log(isJSONValue("Hello")); // true
+ * console.log(isJSONValue(42)); // true
+ * console.log(isJSONValue(true)); // true
+ * console.log(isJSONValue(undefined)); // false
+ * console.log(isJSONValue(() => {})); // false
+ */
+declare function isJSONValue(value: unknown): value is Record<string, any> | any[] | string | number | boolean | null;
+/**
+ * Checks if a given value is a valid JSON array.
+ *
+ * A valid JSON array is defined as an array where all items are valid JSON values.
+ *
+ * @param {unknown} value - The value to check.
+ * @returns {value is any[]} - True if the value is a valid JSON array, otherwise false.
+ *
+ * @example
+ * console.log(isJSONArray([1, 2, 3])); // true
+ * console.log(isJSONArray(["string", null, true])); // true
+ * console.log(isJSONArray([1, 2, () => {}])); // false
+ * console.log(isJSONArray("not an array")); // false
+ */
+declare function isJSONArray(value: unknown): value is any[];
+/**
+ * Checks if a value is a JSON object.
+ *
+ * A valid JSON object is defined as an object with string keys and valid JSON values.
+ *
+ * @param {unknown} obj The value to check.
+ * @returns {obj is Record<string, any>} True if `obj` is a JSON object, false otherwise.
+ *
+ * @example
+ * isJSONObject({ nested: { boolean: true, array: [1, 2, 3], string: 'test', null: null } }); // true
+ * isJSONObject({ regexp: /test/ }); // false
+ * isJSONObject(123); // false
+ */
+declare function isJSONObject(obj: unknown): obj is Record<string, any>;
+
+export { isJSONArray, isJSONObject, isJSONValue };
Index: node_modules/es-toolkit/dist/predicate/isJSONValue.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isJSONValue.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isJSONValue.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+/**
+ * Checks if a given value is a valid JSON value.
+ *
+ * A valid JSON value can be:
+ * - null
+ * - a JSON object (an object with string keys and valid JSON values)
+ * - a JSON array (an array of valid JSON values)
+ * - a string
+ * - a number
+ * - a boolean
+ *
+ * @param {unknown} value - The value to check.
+ * @returns {boolean} - True if the value is a valid JSON value, otherwise false.
+ *
+ * @example
+ * console.log(isJSONValue(null)); // true
+ * console.log(isJSONValue({ key: "value" })); // true
+ * console.log(isJSONValue([1, 2, 3])); // true
+ * console.log(isJSONValue("Hello")); // true
+ * console.log(isJSONValue(42)); // true
+ * console.log(isJSONValue(true)); // true
+ * console.log(isJSONValue(undefined)); // false
+ * console.log(isJSONValue(() => {})); // false
+ */
+declare function isJSONValue(value: unknown): value is Record<string, any> | any[] | string | number | boolean | null;
+/**
+ * Checks if a given value is a valid JSON array.
+ *
+ * A valid JSON array is defined as an array where all items are valid JSON values.
+ *
+ * @param {unknown} value - The value to check.
+ * @returns {value is any[]} - True if the value is a valid JSON array, otherwise false.
+ *
+ * @example
+ * console.log(isJSONArray([1, 2, 3])); // true
+ * console.log(isJSONArray(["string", null, true])); // true
+ * console.log(isJSONArray([1, 2, () => {}])); // false
+ * console.log(isJSONArray("not an array")); // false
+ */
+declare function isJSONArray(value: unknown): value is any[];
+/**
+ * Checks if a value is a JSON object.
+ *
+ * A valid JSON object is defined as an object with string keys and valid JSON values.
+ *
+ * @param {unknown} obj The value to check.
+ * @returns {obj is Record<string, any>} True if `obj` is a JSON object, false otherwise.
+ *
+ * @example
+ * isJSONObject({ nested: { boolean: true, array: [1, 2, 3], string: 'test', null: null } }); // true
+ * isJSONObject({ regexp: /test/ }); // false
+ * isJSONObject(123); // false
+ */
+declare function isJSONObject(obj: unknown): obj is Record<string, any>;
+
+export { isJSONArray, isJSONObject, isJSONValue };
Index: node_modules/es-toolkit/dist/predicate/isJSONValue.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isJSONValue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isJSONValue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const isPlainObject = require('./isPlainObject.js');
+
+function isJSONValue(value) {
+    switch (typeof value) {
+        case 'object': {
+            return value === null || isJSONArray(value) || isJSONObject(value);
+        }
+        case 'string':
+        case 'number':
+        case 'boolean': {
+            return true;
+        }
+        default: {
+            return false;
+        }
+    }
+}
+function isJSONArray(value) {
+    if (!Array.isArray(value)) {
+        return false;
+    }
+    return value.every(item => isJSONValue(item));
+}
+function isJSONObject(obj) {
+    if (!isPlainObject.isPlainObject(obj)) {
+        return false;
+    }
+    const keys = Reflect.ownKeys(obj);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = obj[key];
+        if (typeof key !== 'string') {
+            return false;
+        }
+        if (!isJSONValue(value)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+exports.isJSONArray = isJSONArray;
+exports.isJSONObject = isJSONObject;
+exports.isJSONValue = isJSONValue;
Index: node_modules/es-toolkit/dist/predicate/isJSONValue.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isJSONValue.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isJSONValue.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+import { isPlainObject } from './isPlainObject.mjs';
+
+function isJSONValue(value) {
+    switch (typeof value) {
+        case 'object': {
+            return value === null || isJSONArray(value) || isJSONObject(value);
+        }
+        case 'string':
+        case 'number':
+        case 'boolean': {
+            return true;
+        }
+        default: {
+            return false;
+        }
+    }
+}
+function isJSONArray(value) {
+    if (!Array.isArray(value)) {
+        return false;
+    }
+    return value.every(item => isJSONValue(item));
+}
+function isJSONObject(obj) {
+    if (!isPlainObject(obj)) {
+        return false;
+    }
+    const keys = Reflect.ownKeys(obj);
+    for (let i = 0; i < keys.length; i++) {
+        const key = keys[i];
+        const value = obj[key];
+        if (typeof key !== 'string') {
+            return false;
+        }
+        if (!isJSONValue(value)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+export { isJSONArray, isJSONObject, isJSONValue };
Index: node_modules/es-toolkit/dist/predicate/isLength.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isLength.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isLength.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * Checks if a given value is a valid length.
+ *
+ * A valid length is of type `number`, is a non-negative integer, and is less than or equal to
+ * JavaScript's maximum safe integer (`Number.MAX_SAFE_INTEGER`).
+ * It returns `true` if the value is a valid length, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the
+ * argument to a valid length (`number`).
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ *
+ * @example
+ * isLength(0); // true
+ * isLength(42); // true
+ * isLength(-1); // false
+ * isLength(1.5); // false
+ * isLength(Number.MAX_SAFE_INTEGER); // true
+ * isLength(Number.MAX_SAFE_INTEGER + 1); // false
+ */
+declare function isLength(value?: any): boolean;
+
+export { isLength };
Index: node_modules/es-toolkit/dist/predicate/isLength.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isLength.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * Checks if a given value is a valid length.
+ *
+ * A valid length is of type `number`, is a non-negative integer, and is less than or equal to
+ * JavaScript's maximum safe integer (`Number.MAX_SAFE_INTEGER`).
+ * It returns `true` if the value is a valid length, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the
+ * argument to a valid length (`number`).
+ *
+ * @param {any} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ *
+ * @example
+ * isLength(0); // true
+ * isLength(42); // true
+ * isLength(-1); // false
+ * isLength(1.5); // false
+ * isLength(Number.MAX_SAFE_INTEGER); // true
+ * isLength(Number.MAX_SAFE_INTEGER + 1); // false
+ */
+declare function isLength(value?: any): boolean;
+
+export { isLength };
Index: node_modules/es-toolkit/dist/predicate/isLength.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isLength.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isLength(value) {
+    return Number.isSafeInteger(value) && value >= 0;
+}
+
+exports.isLength = isLength;
Index: node_modules/es-toolkit/dist/predicate/isLength.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isLength.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isLength.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isLength(value) {
+    return Number.isSafeInteger(value) && value >= 0;
+}
+
+export { isLength };
Index: node_modules/es-toolkit/dist/predicate/isMap.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Map`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Map`.
+ *
+ * @param {unknown} value The value to check if it is a `Map`.
+ * @returns {value is Map<any, any>} Returns `true` if `value` is a `Map`, else `false`.
+ *
+ * @example
+ * const value1 = new Map();
+ * const value2 = new Set();
+ * const value3 = new WeakMap();
+ *
+ * console.log(isMap(value1)); // true
+ * console.log(isMap(value2)); // false
+ * console.log(isMap(value3)); // false
+ */
+declare function isMap(value: unknown): value is Map<any, any>;
+
+export { isMap };
Index: node_modules/es-toolkit/dist/predicate/isMap.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Map`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Map`.
+ *
+ * @param {unknown} value The value to check if it is a `Map`.
+ * @returns {value is Map<any, any>} Returns `true` if `value` is a `Map`, else `false`.
+ *
+ * @example
+ * const value1 = new Map();
+ * const value2 = new Set();
+ * const value3 = new WeakMap();
+ *
+ * console.log(isMap(value1)); // true
+ * console.log(isMap(value2)); // false
+ * console.log(isMap(value3)); // false
+ */
+declare function isMap(value: unknown): value is Map<any, any>;
+
+export { isMap };
Index: node_modules/es-toolkit/dist/predicate/isMap.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isMap(value) {
+    return value instanceof Map;
+}
+
+exports.isMap = isMap;
Index: node_modules/es-toolkit/dist/predicate/isMap.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isMap(value) {
+    return value instanceof Map;
+}
+
+export { isMap };
Index: node_modules/es-toolkit/dist/predicate/isNil.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNil.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNil.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Checks if a given value is null or undefined.
+ *
+ * This function tests whether the provided value is either `null` or `undefined`.
+ * It returns `true` if the value is `null` or `undefined`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `null` or `undefined`.
+ *
+ * @param {unknown} x - The value to test for null or undefined.
+ * @returns {boolean} `true` if the value is null or undefined, `false` otherwise.
+ *
+ * @example
+ * const value1 = null;
+ * const value2 = undefined;
+ * const value3 = 42;
+ * const result1 = isNil(value1); // true
+ * const result2 = isNil(value2); // true
+ * const result3 = isNil(value3); // false
+ */
+declare function isNil(x: unknown): x is null | undefined;
+
+export { isNil };
Index: node_modules/es-toolkit/dist/predicate/isNil.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Checks if a given value is null or undefined.
+ *
+ * This function tests whether the provided value is either `null` or `undefined`.
+ * It returns `true` if the value is `null` or `undefined`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `null` or `undefined`.
+ *
+ * @param {unknown} x - The value to test for null or undefined.
+ * @returns {boolean} `true` if the value is null or undefined, `false` otherwise.
+ *
+ * @example
+ * const value1 = null;
+ * const value2 = undefined;
+ * const value3 = 42;
+ * const result1 = isNil(value1); // true
+ * const result2 = isNil(value2); // true
+ * const result3 = isNil(value3); // false
+ */
+declare function isNil(x: unknown): x is null | undefined;
+
+export { isNil };
Index: node_modules/es-toolkit/dist/predicate/isNil.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isNil(x) {
+    return x == null;
+}
+
+exports.isNil = isNil;
Index: node_modules/es-toolkit/dist/predicate/isNil.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNil.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNil.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isNil(x) {
+    return x == null;
+}
+
+export { isNil };
Index: node_modules/es-toolkit/dist/predicate/isNode.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNode.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNode.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if the current environment is Node.js.
+ *
+ * This function checks for the existence of the `process.versions.node` property,
+ * which only exists in Node.js environments.
+ *
+ * @returns {boolean} `true` if the current environment is Node.js, otherwise `false`.
+ *
+ * @example
+ * if (isNode()) {
+ *   console.log('This is running in Node.js');
+ *   const fs = import('node:fs');
+ * }
+ */
+declare function isNode(): boolean;
+
+export { isNode };
Index: node_modules/es-toolkit/dist/predicate/isNode.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNode.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNode.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Checks if the current environment is Node.js.
+ *
+ * This function checks for the existence of the `process.versions.node` property,
+ * which only exists in Node.js environments.
+ *
+ * @returns {boolean} `true` if the current environment is Node.js, otherwise `false`.
+ *
+ * @example
+ * if (isNode()) {
+ *   console.log('This is running in Node.js');
+ *   const fs = import('node:fs');
+ * }
+ */
+declare function isNode(): boolean;
+
+export { isNode };
Index: node_modules/es-toolkit/dist/predicate/isNode.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNode.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNode.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isNode() {
+    return typeof process !== 'undefined' && process?.versions?.node != null;
+}
+
+exports.isNode = isNode;
Index: node_modules/es-toolkit/dist/predicate/isNode.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNode.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNode.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isNode() {
+    return typeof process !== 'undefined' && process?.versions?.node != null;
+}
+
+export { isNode };
Index: node_modules/es-toolkit/dist/predicate/isNotNil.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNotNil.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNotNil.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Checks if the given value is not null nor undefined.
+ *
+ * The main use of this function is to be used with TypeScript as a type predicate.
+ *
+ * @template T - The type of value.
+ * @param {T | null | undefined} x - The value to test if it is not null nor undefined.
+ * @returns {x is T} True if the value is not null nor undefined, false otherwise.
+ *
+ * @example
+ * // Here the type of `arr` is (number | undefined)[]
+ * const arr = [1, undefined, 3];
+ * // Here the type of `result` is number[]
+ * const result = arr.filter(isNotNil);
+ * // result will be [1, 3]
+ */
+declare function isNotNil<T>(x: T | null | undefined): x is T;
+
+export { isNotNil };
Index: node_modules/es-toolkit/dist/predicate/isNotNil.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNotNil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNotNil.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Checks if the given value is not null nor undefined.
+ *
+ * The main use of this function is to be used with TypeScript as a type predicate.
+ *
+ * @template T - The type of value.
+ * @param {T | null | undefined} x - The value to test if it is not null nor undefined.
+ * @returns {x is T} True if the value is not null nor undefined, false otherwise.
+ *
+ * @example
+ * // Here the type of `arr` is (number | undefined)[]
+ * const arr = [1, undefined, 3];
+ * // Here the type of `result` is number[]
+ * const result = arr.filter(isNotNil);
+ * // result will be [1, 3]
+ */
+declare function isNotNil<T>(x: T | null | undefined): x is T;
+
+export { isNotNil };
Index: node_modules/es-toolkit/dist/predicate/isNotNil.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNotNil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNotNil.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isNotNil(x) {
+    return x != null;
+}
+
+exports.isNotNil = isNotNil;
Index: node_modules/es-toolkit/dist/predicate/isNotNil.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNotNil.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNotNil.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isNotNil(x) {
+    return x != null;
+}
+
+export { isNotNil };
Index: node_modules/es-toolkit/dist/predicate/isNull.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNull.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNull.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is null.
+ *
+ * This function tests whether the provided value is strictly equal to `null`.
+ * It returns `true` if the value is `null`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `null`.
+ *
+ * @param {unknown} x - The value to test if it is null.
+ * @returns {x is null} True if the value is null, false otherwise.
+ *
+ * @example
+ * const value1 = null;
+ * const value2 = undefined;
+ * const value3 = 42;
+ *
+ * console.log(isNull(value1)); // true
+ * console.log(isNull(value2)); // false
+ * console.log(isNull(value3)); // false
+ */
+declare function isNull(x: unknown): x is null;
+
+export { isNull };
Index: node_modules/es-toolkit/dist/predicate/isNull.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNull.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is null.
+ *
+ * This function tests whether the provided value is strictly equal to `null`.
+ * It returns `true` if the value is `null`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `null`.
+ *
+ * @param {unknown} x - The value to test if it is null.
+ * @returns {x is null} True if the value is null, false otherwise.
+ *
+ * @example
+ * const value1 = null;
+ * const value2 = undefined;
+ * const value3 = 42;
+ *
+ * console.log(isNull(value1)); // true
+ * console.log(isNull(value2)); // false
+ * console.log(isNull(value3)); // false
+ */
+declare function isNull(x: unknown): x is null;
+
+export { isNull };
Index: node_modules/es-toolkit/dist/predicate/isNull.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNull.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isNull(x) {
+    return x === null;
+}
+
+exports.isNull = isNull;
Index: node_modules/es-toolkit/dist/predicate/isNull.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isNull.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isNull.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isNull(x) {
+    return x === null;
+}
+
+export { isNull };
Index: node_modules/es-toolkit/dist/predicate/isPlainObject.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPlainObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPlainObject.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Checks if a given value is a plain object.
+ *
+ * @param {object} value - The value to check.
+ * @returns {value is Record<PropertyKey, any>} - True if the value is a plain object, otherwise false.
+ *
+ * @example
+ * ```typescript
+ * // ✅👇 True
+ *
+ * isPlainObject({ });                       // ✅
+ * isPlainObject({ key: 'value' });          // ✅
+ * isPlainObject({ key: new Date() });       // ✅
+ * isPlainObject(new Object());              // ✅
+ * isPlainObject(Object.create(null));       // ✅
+ * isPlainObject({ nested: { key: true} });  // ✅
+ * isPlainObject(new Proxy({}, {}));         // ✅
+ * isPlainObject({ [Symbol('tag')]: 'A' });  // ✅
+ *
+ * // ✅👇 (cross-realms, node context, workers, ...)
+ * const runInNewContext = await import('node:vm').then(
+ *     (mod) => mod.runInNewContext
+ * );
+ * isPlainObject(runInNewContext('({})'));   // ✅
+ *
+ * // ❌👇 False
+ *
+ * class Test { };
+ * isPlainObject(new Test())           // ❌
+ * isPlainObject(10);                  // ❌
+ * isPlainObject(null);                // ❌
+ * isPlainObject('hello');             // ❌
+ * isPlainObject([]);                  // ❌
+ * isPlainObject(new Date());          // ❌
+ * isPlainObject(new Uint8Array([1])); // ❌
+ * isPlainObject(Buffer.from('ABC'));  // ❌
+ * isPlainObject(Promise.resolve({})); // ❌
+ * isPlainObject(Object.create({}));   // ❌
+ * isPlainObject(new (class Cls {}));  // ❌
+ * isPlainObject(globalThis);          // ❌,
+ * ```
+ */
+declare function isPlainObject(value: unknown): value is Record<PropertyKey, any>;
+
+export { isPlainObject };
Index: node_modules/es-toolkit/dist/predicate/isPlainObject.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPlainObject.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+/**
+ * Checks if a given value is a plain object.
+ *
+ * @param {object} value - The value to check.
+ * @returns {value is Record<PropertyKey, any>} - True if the value is a plain object, otherwise false.
+ *
+ * @example
+ * ```typescript
+ * // ✅👇 True
+ *
+ * isPlainObject({ });                       // ✅
+ * isPlainObject({ key: 'value' });          // ✅
+ * isPlainObject({ key: new Date() });       // ✅
+ * isPlainObject(new Object());              // ✅
+ * isPlainObject(Object.create(null));       // ✅
+ * isPlainObject({ nested: { key: true} });  // ✅
+ * isPlainObject(new Proxy({}, {}));         // ✅
+ * isPlainObject({ [Symbol('tag')]: 'A' });  // ✅
+ *
+ * // ✅👇 (cross-realms, node context, workers, ...)
+ * const runInNewContext = await import('node:vm').then(
+ *     (mod) => mod.runInNewContext
+ * );
+ * isPlainObject(runInNewContext('({})'));   // ✅
+ *
+ * // ❌👇 False
+ *
+ * class Test { };
+ * isPlainObject(new Test())           // ❌
+ * isPlainObject(10);                  // ❌
+ * isPlainObject(null);                // ❌
+ * isPlainObject('hello');             // ❌
+ * isPlainObject([]);                  // ❌
+ * isPlainObject(new Date());          // ❌
+ * isPlainObject(new Uint8Array([1])); // ❌
+ * isPlainObject(Buffer.from('ABC'));  // ❌
+ * isPlainObject(Promise.resolve({})); // ❌
+ * isPlainObject(Object.create({}));   // ❌
+ * isPlainObject(new (class Cls {}));  // ❌
+ * isPlainObject(globalThis);          // ❌,
+ * ```
+ */
+declare function isPlainObject(value: unknown): value is Record<PropertyKey, any>;
+
+export { isPlainObject };
Index: node_modules/es-toolkit/dist/predicate/isPlainObject.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPlainObject.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isPlainObject(value) {
+    if (!value || typeof value !== 'object') {
+        return false;
+    }
+    const proto = Object.getPrototypeOf(value);
+    const hasObjectPrototype = proto === null ||
+        proto === Object.prototype ||
+        Object.getPrototypeOf(proto) === null;
+    if (!hasObjectPrototype) {
+        return false;
+    }
+    return Object.prototype.toString.call(value) === '[object Object]';
+}
+
+exports.isPlainObject = isPlainObject;
Index: node_modules/es-toolkit/dist/predicate/isPlainObject.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPlainObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPlainObject.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+function isPlainObject(value) {
+    if (!value || typeof value !== 'object') {
+        return false;
+    }
+    const proto = Object.getPrototypeOf(value);
+    const hasObjectPrototype = proto === null ||
+        proto === Object.prototype ||
+        Object.getPrototypeOf(proto) === null;
+    if (!hasObjectPrototype) {
+        return false;
+    }
+    return Object.prototype.toString.call(value) === '[object Object]';
+}
+
+export { isPlainObject };
Index: node_modules/es-toolkit/dist/predicate/isPrimitive.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPrimitive.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPrimitive.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Checks whether a value is a JavaScript primitive.
+ * JavaScript primitives include null, undefined, strings, numbers, booleans, symbols, and bigints.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is
+ *     null
+ *   | undefined
+ *   | string
+ *   | number
+ *   | boolean
+ *   | symbol
+ *   | bigint} Returns true if `value` is a primitive, false otherwise.
+ *
+ * @example
+ * isPrimitive(null); // true
+ * isPrimitive(undefined); // true
+ * isPrimitive('123'); // true
+ * isPrimitive(false); // true
+ * isPrimitive(true); // true
+ * isPrimitive(Symbol('a')); // true
+ * isPrimitive(123n); // true
+ * isPrimitive({}); // false
+ * isPrimitive(new Date()); // false
+ * isPrimitive(new Map()); // false
+ * isPrimitive(new Set()); // false
+ * isPrimitive([1, 2, 3]); // false
+ */
+declare function isPrimitive(value: unknown): value is null | undefined | string | number | boolean | symbol | bigint;
+
+export { isPrimitive };
Index: node_modules/es-toolkit/dist/predicate/isPrimitive.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPrimitive.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPrimitive.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+/**
+ * Checks whether a value is a JavaScript primitive.
+ * JavaScript primitives include null, undefined, strings, numbers, booleans, symbols, and bigints.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is
+ *     null
+ *   | undefined
+ *   | string
+ *   | number
+ *   | boolean
+ *   | symbol
+ *   | bigint} Returns true if `value` is a primitive, false otherwise.
+ *
+ * @example
+ * isPrimitive(null); // true
+ * isPrimitive(undefined); // true
+ * isPrimitive('123'); // true
+ * isPrimitive(false); // true
+ * isPrimitive(true); // true
+ * isPrimitive(Symbol('a')); // true
+ * isPrimitive(123n); // true
+ * isPrimitive({}); // false
+ * isPrimitive(new Date()); // false
+ * isPrimitive(new Map()); // false
+ * isPrimitive(new Set()); // false
+ * isPrimitive([1, 2, 3]); // false
+ */
+declare function isPrimitive(value: unknown): value is null | undefined | string | number | boolean | symbol | bigint;
+
+export { isPrimitive };
Index: node_modules/es-toolkit/dist/predicate/isPrimitive.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPrimitive.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPrimitive.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isPrimitive(value) {
+    return value == null || (typeof value !== 'object' && typeof value !== 'function');
+}
+
+exports.isPrimitive = isPrimitive;
Index: node_modules/es-toolkit/dist/predicate/isPrimitive.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPrimitive.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPrimitive.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isPrimitive(value) {
+    return value == null || (typeof value !== 'object' && typeof value !== 'function');
+}
+
+export { isPrimitive };
Index: node_modules/es-toolkit/dist/predicate/isPromise.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPromise.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPromise.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Promise`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Promise`.
+ *
+ * @param {unknown} value The value to check if it is a `Promise`.
+ * @returns {value is Promise<any>} Returns `true` if `value` is a `Promise`, else `false`.
+ *
+ * @example
+ * const value1 = new Promise((resolve) => resolve());
+ * const value2 = {};
+ * const value3 = 123;
+ *
+ * console.log(isPromise(value1)); // true
+ * console.log(isPromise(value2)); // false
+ * console.log(isPromise(value3)); // false
+ */
+declare function isPromise(value: unknown): value is Promise<any>;
+
+export { isPromise };
Index: node_modules/es-toolkit/dist/predicate/isPromise.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPromise.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPromise.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Promise`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Promise`.
+ *
+ * @param {unknown} value The value to check if it is a `Promise`.
+ * @returns {value is Promise<any>} Returns `true` if `value` is a `Promise`, else `false`.
+ *
+ * @example
+ * const value1 = new Promise((resolve) => resolve());
+ * const value2 = {};
+ * const value3 = 123;
+ *
+ * console.log(isPromise(value1)); // true
+ * console.log(isPromise(value2)); // false
+ * console.log(isPromise(value3)); // false
+ */
+declare function isPromise(value: unknown): value is Promise<any>;
+
+export { isPromise };
Index: node_modules/es-toolkit/dist/predicate/isPromise.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPromise.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPromise.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isPromise(value) {
+    return value instanceof Promise;
+}
+
+exports.isPromise = isPromise;
Index: node_modules/es-toolkit/dist/predicate/isPromise.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isPromise.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isPromise.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isPromise(value) {
+    return value instanceof Promise;
+}
+
+export { isPromise };
Index: node_modules/es-toolkit/dist/predicate/isRegExp.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isRegExp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isRegExp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a RegExp.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is RegExp} Returns `true` if `value` is a RegExp, `false` otherwise.
+ *
+ * @example
+ * const value1 = /abc/;
+ * const value2 = '/abc/';
+ *
+ * console.log(isRegExp(value1)); // true
+ * console.log(isRegExp(value2)); // false
+ */
+declare function isRegExp(value: unknown): value is RegExp;
+
+export { isRegExp };
Index: node_modules/es-toolkit/dist/predicate/isRegExp.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Checks if `value` is a RegExp.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is RegExp} Returns `true` if `value` is a RegExp, `false` otherwise.
+ *
+ * @example
+ * const value1 = /abc/;
+ * const value2 = '/abc/';
+ *
+ * console.log(isRegExp(value1)); // true
+ * console.log(isRegExp(value2)); // false
+ */
+declare function isRegExp(value: unknown): value is RegExp;
+
+export { isRegExp };
Index: node_modules/es-toolkit/dist/predicate/isRegExp.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isRegExp(value) {
+    return value instanceof RegExp;
+}
+
+exports.isRegExp = isRegExp;
Index: node_modules/es-toolkit/dist/predicate/isRegExp.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isRegExp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isRegExp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isRegExp(value) {
+    return value instanceof RegExp;
+}
+
+export { isRegExp };
Index: node_modules/es-toolkit/dist/predicate/isSet.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isSet.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isSet.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Set`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Set`.
+ *
+ * @param {unknown} value The value to check if it is a `Set`.
+ * @returns {value is Set<any>} Returns `true` if `value` is a `Set`, else `false`.
+ *
+ * @example
+ * const value1 = new Set();
+ * const value2 = new Map();
+ * const value3 = new WeakSet();
+ *
+ * console.log(isSet(value1)); // true
+ * console.log(isSet(value2)); // false
+ * console.log(isSet(value3)); // false
+ */
+declare function isSet(value: unknown): value is Set<any>;
+
+export { isSet };
Index: node_modules/es-toolkit/dist/predicate/isSet.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is `Set`.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `Set`.
+ *
+ * @param {unknown} value The value to check if it is a `Set`.
+ * @returns {value is Set<any>} Returns `true` if `value` is a `Set`, else `false`.
+ *
+ * @example
+ * const value1 = new Set();
+ * const value2 = new Map();
+ * const value3 = new WeakSet();
+ *
+ * console.log(isSet(value1)); // true
+ * console.log(isSet(value2)); // false
+ * console.log(isSet(value3)); // false
+ */
+declare function isSet(value: unknown): value is Set<any>;
+
+export { isSet };
Index: node_modules/es-toolkit/dist/predicate/isSet.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isSet(value) {
+    return value instanceof Set;
+}
+
+exports.isSet = isSet;
Index: node_modules/es-toolkit/dist/predicate/isSet.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isSet.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isSet.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isSet(value) {
+    return value instanceof Set;
+}
+
+export { isSet };
Index: node_modules/es-toolkit/dist/predicate/isString.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is string.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `string`.
+ *
+ * @param {unknown} value The value to check if it is string.
+ * @returns {value is string} Returns `true` if `value` is a string, else `false`.
+ *
+ * @example
+ * const value1 = 'abc';
+ * const value2 = 123;
+ * const value3 = true;
+ *
+ * console.log(isString(value1)); // true
+ * console.log(isString(value2)); // false
+ * console.log(isString(value3)); // false
+ */
+declare function isString(value: unknown): value is string;
+
+export { isString };
Index: node_modules/es-toolkit/dist/predicate/isString.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Checks if a given value is string.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `string`.
+ *
+ * @param {unknown} value The value to check if it is string.
+ * @returns {value is string} Returns `true` if `value` is a string, else `false`.
+ *
+ * @example
+ * const value1 = 'abc';
+ * const value2 = 123;
+ * const value3 = true;
+ *
+ * console.log(isString(value1)); // true
+ * console.log(isString(value2)); // false
+ * console.log(isString(value3)); // false
+ */
+declare function isString(value: unknown): value is string;
+
+export { isString };
Index: node_modules/es-toolkit/dist/predicate/isString.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isString(value) {
+    return typeof value === 'string';
+}
+
+exports.isString = isString;
Index: node_modules/es-toolkit/dist/predicate/isString.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isString(value) {
+    return typeof value === 'string';
+}
+
+export { isString };
Index: node_modules/es-toolkit/dist/predicate/isSymbol.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isSymbol.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isSymbol.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Check whether a value is a symbol.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `symbol`.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is symbol} Returns `true` if `value` is a symbol, else `false`.
+ *
+ * @example
+ * import { isSymbol } from 'es-toolkit/predicate';
+ *
+ * isSymbol(Symbol('a')); // true
+ * isSymbol(Symbol.for('a')); // true
+ * isSymbol(Symbol.iterator); // true
+ *
+ * isSymbol(null); // false
+ * isSymbol(undefined); // false
+ * isSymbol('123'); // false
+ * isSymbol(false); // false
+ * isSymbol(123n); // false
+ * isSymbol({}); // false
+ * isSymbol([1, 2, 3]); // false
+ */
+declare function isSymbol(value: unknown): value is symbol;
+
+export { isSymbol };
Index: node_modules/es-toolkit/dist/predicate/isSymbol.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isSymbol.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isSymbol.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Check whether a value is a symbol.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `symbol`.
+ *
+ * @param {unknown} value The value to check.
+ * @returns {value is symbol} Returns `true` if `value` is a symbol, else `false`.
+ *
+ * @example
+ * import { isSymbol } from 'es-toolkit/predicate';
+ *
+ * isSymbol(Symbol('a')); // true
+ * isSymbol(Symbol.for('a')); // true
+ * isSymbol(Symbol.iterator); // true
+ *
+ * isSymbol(null); // false
+ * isSymbol(undefined); // false
+ * isSymbol('123'); // false
+ * isSymbol(false); // false
+ * isSymbol(123n); // false
+ * isSymbol({}); // false
+ * isSymbol([1, 2, 3]); // false
+ */
+declare function isSymbol(value: unknown): value is symbol;
+
+export { isSymbol };
Index: node_modules/es-toolkit/dist/predicate/isSymbol.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isSymbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isSymbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isSymbol(value) {
+    return typeof value === 'symbol';
+}
+
+exports.isSymbol = isSymbol;
Index: node_modules/es-toolkit/dist/predicate/isSymbol.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isSymbol.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isSymbol.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isSymbol(value) {
+    return typeof value === 'symbol';
+}
+
+export { isSymbol };
Index: node_modules/es-toolkit/dist/predicate/isTypedArray.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isTypedArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isTypedArray.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Checks if a value is a TypedArray.
+ * @param {unknown} x The value to check.
+ * @returns {x is
+ *     Uint8Array
+ *   | Uint8ClampedArray
+ *   | Uint16Array
+ *   | Uint32Array
+ *   | BigUint64Array
+ *   | Int8Array
+ *   | Int16Array
+ *   | Int32Array
+ *   | BigInt64Array
+ *   | Float32Array
+ *   | Float64Array} Returns true if `x` is a TypedArray, false otherwise.
+ *
+ * @example
+ * const arr = new Uint8Array([1, 2, 3]);
+ * isTypedArray(arr); // true
+ *
+ * const regularArray = [1, 2, 3];
+ * isTypedArray(regularArray); // false
+ *
+ * const buffer = new ArrayBuffer(16);
+ * isTypedArray(buffer); // false
+ */
+declare function isTypedArray(x: unknown): x is Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array;
+
+export { isTypedArray };
Index: node_modules/es-toolkit/dist/predicate/isTypedArray.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isTypedArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isTypedArray.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Checks if a value is a TypedArray.
+ * @param {unknown} x The value to check.
+ * @returns {x is
+ *     Uint8Array
+ *   | Uint8ClampedArray
+ *   | Uint16Array
+ *   | Uint32Array
+ *   | BigUint64Array
+ *   | Int8Array
+ *   | Int16Array
+ *   | Int32Array
+ *   | BigInt64Array
+ *   | Float32Array
+ *   | Float64Array} Returns true if `x` is a TypedArray, false otherwise.
+ *
+ * @example
+ * const arr = new Uint8Array([1, 2, 3]);
+ * isTypedArray(arr); // true
+ *
+ * const regularArray = [1, 2, 3];
+ * isTypedArray(regularArray); // false
+ *
+ * const buffer = new ArrayBuffer(16);
+ * isTypedArray(buffer); // false
+ */
+declare function isTypedArray(x: unknown): x is Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array;
+
+export { isTypedArray };
Index: node_modules/es-toolkit/dist/predicate/isTypedArray.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isTypedArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isTypedArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isTypedArray(x) {
+    return ArrayBuffer.isView(x) && !(x instanceof DataView);
+}
+
+exports.isTypedArray = isTypedArray;
Index: node_modules/es-toolkit/dist/predicate/isTypedArray.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isTypedArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isTypedArray.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isTypedArray(x) {
+    return ArrayBuffer.isView(x) && !(x instanceof DataView);
+}
+
+export { isTypedArray };
Index: node_modules/es-toolkit/dist/predicate/isUndefined.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isUndefined.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isUndefined.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is undefined.
+ *
+ * This function tests whether the provided value is strictly equal to `undefined`.
+ * It returns `true` if the value is `undefined`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `undefined`.
+ *
+ * @param {unknown} x - The value to test if it is undefined.
+ * @returns {x is undefined} true if the value is undefined, false otherwise.
+ *
+ * @example
+ * const value1 = undefined;
+ * const value2 = null;
+ * const value3 = 42;
+ *
+ * console.log(isUndefined(value1)); // true
+ * console.log(isUndefined(value2)); // false
+ * console.log(isUndefined(value3)); // false
+ */
+declare function isUndefined(x: any): x is undefined;
+
+export { isUndefined };
Index: node_modules/es-toolkit/dist/predicate/isUndefined.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isUndefined.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isUndefined.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is undefined.
+ *
+ * This function tests whether the provided value is strictly equal to `undefined`.
+ * It returns `true` if the value is `undefined`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `undefined`.
+ *
+ * @param {unknown} x - The value to test if it is undefined.
+ * @returns {x is undefined} true if the value is undefined, false otherwise.
+ *
+ * @example
+ * const value1 = undefined;
+ * const value2 = null;
+ * const value3 = 42;
+ *
+ * console.log(isUndefined(value1)); // true
+ * console.log(isUndefined(value2)); // false
+ * console.log(isUndefined(value3)); // false
+ */
+declare function isUndefined(x: any): x is undefined;
+
+export { isUndefined };
Index: node_modules/es-toolkit/dist/predicate/isUndefined.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isUndefined.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isUndefined.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isUndefined(x) {
+    return x === undefined;
+}
+
+exports.isUndefined = isUndefined;
Index: node_modules/es-toolkit/dist/predicate/isUndefined.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isUndefined.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isUndefined.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isUndefined(x) {
+    return x === undefined;
+}
+
+export { isUndefined };
Index: node_modules/es-toolkit/dist/predicate/isWeakMap.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isWeakMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isWeakMap.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is a `WeakMap`.
+ *
+ * This function tests whether the provided value is an instance of `WeakMap`.
+ * It returns `true` if the value is a `WeakMap`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `WeakMap`.
+ *
+ * @param {unknown} value - The value to test if it is a `WeakMap`.
+ * @returns {value is WeakMap<WeakKey, any>} true if the value is a `WeakMap`, false otherwise.
+ *
+ * @example
+ * const value1 = new WeakMap();
+ * const value2 = new Map();
+ * const value3 = new Set();
+ *
+ * console.log(isWeakMap(value1)); // true
+ * console.log(isWeakMap(value2)); // false
+ * console.log(isWeakMap(value3)); // false
+ */
+declare function isWeakMap(value: unknown): value is WeakMap<WeakKey, any>;
+
+export { isWeakMap };
Index: node_modules/es-toolkit/dist/predicate/isWeakMap.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isWeakMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isWeakMap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is a `WeakMap`.
+ *
+ * This function tests whether the provided value is an instance of `WeakMap`.
+ * It returns `true` if the value is a `WeakMap`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `WeakMap`.
+ *
+ * @param {unknown} value - The value to test if it is a `WeakMap`.
+ * @returns {value is WeakMap<WeakKey, any>} true if the value is a `WeakMap`, false otherwise.
+ *
+ * @example
+ * const value1 = new WeakMap();
+ * const value2 = new Map();
+ * const value3 = new Set();
+ *
+ * console.log(isWeakMap(value1)); // true
+ * console.log(isWeakMap(value2)); // false
+ * console.log(isWeakMap(value3)); // false
+ */
+declare function isWeakMap(value: unknown): value is WeakMap<WeakKey, any>;
+
+export { isWeakMap };
Index: node_modules/es-toolkit/dist/predicate/isWeakMap.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isWeakMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isWeakMap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isWeakMap(value) {
+    return value instanceof WeakMap;
+}
+
+exports.isWeakMap = isWeakMap;
Index: node_modules/es-toolkit/dist/predicate/isWeakMap.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isWeakMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isWeakMap.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isWeakMap(value) {
+    return value instanceof WeakMap;
+}
+
+export { isWeakMap };
Index: node_modules/es-toolkit/dist/predicate/isWeakSet.d.mts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isWeakSet.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isWeakSet.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is a `WeakSet`.
+ *
+ * This function tests whether the provided value is an instance of `WeakSet`.
+ * It returns `true` if the value is a `WeakSet`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `WeakSet`.
+ *
+ * @param {unknown} value - The value to test if it is a `WeakSet`.
+ * @returns {value is WeakSet<WeakKey>} true if the value is a `WeakSet`, false otherwise.
+ *
+ * @example
+ * const value1 = new WeakSet();
+ * const value2 = new Map();
+ * const value3 = new Set();
+ *
+ * console.log(isWeakSet(value1)); // true
+ * console.log(isWeakSet(value2)); // false
+ * console.log(isWeakSet(value3)); // false
+ */
+declare function isWeakSet(value: unknown): value is WeakSet<WeakKey>;
+
+export { isWeakSet };
Index: node_modules/es-toolkit/dist/predicate/isWeakSet.d.ts
===================================================================
--- node_modules/es-toolkit/dist/predicate/isWeakSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isWeakSet.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * Checks if the given value is a `WeakSet`.
+ *
+ * This function tests whether the provided value is an instance of `WeakSet`.
+ * It returns `true` if the value is a `WeakSet`, and `false` otherwise.
+ *
+ * This function can also serve as a type predicate in TypeScript, narrowing the type of the argument to `WeakSet`.
+ *
+ * @param {unknown} value - The value to test if it is a `WeakSet`.
+ * @returns {value is WeakSet<WeakKey>} true if the value is a `WeakSet`, false otherwise.
+ *
+ * @example
+ * const value1 = new WeakSet();
+ * const value2 = new Map();
+ * const value3 = new Set();
+ *
+ * console.log(isWeakSet(value1)); // true
+ * console.log(isWeakSet(value2)); // false
+ * console.log(isWeakSet(value3)); // false
+ */
+declare function isWeakSet(value: unknown): value is WeakSet<WeakKey>;
+
+export { isWeakSet };
Index: node_modules/es-toolkit/dist/predicate/isWeakSet.js
===================================================================
--- node_modules/es-toolkit/dist/predicate/isWeakSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isWeakSet.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function isWeakSet(value) {
+    return value instanceof WeakSet;
+}
+
+exports.isWeakSet = isWeakSet;
Index: node_modules/es-toolkit/dist/predicate/isWeakSet.mjs
===================================================================
--- node_modules/es-toolkit/dist/predicate/isWeakSet.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/predicate/isWeakSet.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function isWeakSet(value) {
+    return value instanceof WeakSet;
+}
+
+export { isWeakSet };
Index: node_modules/es-toolkit/dist/promise/delay.d.mts
===================================================================
--- node_modules/es-toolkit/dist/promise/delay.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/delay.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+interface DelayOptions {
+    signal?: AbortSignal;
+}
+/**
+ * Delays the execution of code for a specified number of milliseconds.
+ *
+ * This function returns a Promise that resolves after the specified delay, allowing you to use it
+ * with async/await to pause execution.
+ *
+ * @param {number} ms - The number of milliseconds to delay.
+ * @param {DelayOptions} options - The options object.
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the delay.
+ * @returns {Promise<void>} A Promise that resolves after the specified delay.
+ *
+ * @example
+ * async function foo() {
+ *   console.log('Start');
+ *   await delay(1000); // Delays execution for 1 second
+ *   console.log('End');
+ * }
+ *
+ * foo();
+ *
+ * // With AbortSignal
+ * const controller = new AbortController();
+ * const { signal } = controller;
+ *
+ * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms
+ * try {
+ *   await delay(100, { signal });
+ *  } catch (error) {
+ *   console.error(error); // Will log 'AbortError'
+ *  }
+ * }
+ */
+declare function delay(ms: number, { signal }?: DelayOptions): Promise<void>;
+
+export { delay };
Index: node_modules/es-toolkit/dist/promise/delay.d.ts
===================================================================
--- node_modules/es-toolkit/dist/promise/delay.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/delay.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+interface DelayOptions {
+    signal?: AbortSignal;
+}
+/**
+ * Delays the execution of code for a specified number of milliseconds.
+ *
+ * This function returns a Promise that resolves after the specified delay, allowing you to use it
+ * with async/await to pause execution.
+ *
+ * @param {number} ms - The number of milliseconds to delay.
+ * @param {DelayOptions} options - The options object.
+ * @param {AbortSignal} options.signal - An optional AbortSignal to cancel the delay.
+ * @returns {Promise<void>} A Promise that resolves after the specified delay.
+ *
+ * @example
+ * async function foo() {
+ *   console.log('Start');
+ *   await delay(1000); // Delays execution for 1 second
+ *   console.log('End');
+ * }
+ *
+ * foo();
+ *
+ * // With AbortSignal
+ * const controller = new AbortController();
+ * const { signal } = controller;
+ *
+ * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms
+ * try {
+ *   await delay(100, { signal });
+ *  } catch (error) {
+ *   console.error(error); // Will log 'AbortError'
+ *  }
+ * }
+ */
+declare function delay(ms: number, { signal }?: DelayOptions): Promise<void>;
+
+export { delay };
Index: node_modules/es-toolkit/dist/promise/delay.js
===================================================================
--- node_modules/es-toolkit/dist/promise/delay.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/delay.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const AbortError = require('../error/AbortError.js');
+
+function delay(ms, { signal } = {}) {
+    return new Promise((resolve, reject) => {
+        const abortError = () => {
+            reject(new AbortError.AbortError());
+        };
+        const abortHandler = () => {
+            clearTimeout(timeoutId);
+            abortError();
+        };
+        if (signal?.aborted) {
+            return abortError();
+        }
+        const timeoutId = setTimeout(() => {
+            signal?.removeEventListener('abort', abortHandler);
+            resolve();
+        }, ms);
+        signal?.addEventListener('abort', abortHandler, { once: true });
+    });
+}
+
+exports.delay = delay;
Index: node_modules/es-toolkit/dist/promise/delay.mjs
===================================================================
--- node_modules/es-toolkit/dist/promise/delay.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/delay.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { AbortError } from '../error/AbortError.mjs';
+
+function delay(ms, { signal } = {}) {
+    return new Promise((resolve, reject) => {
+        const abortError = () => {
+            reject(new AbortError());
+        };
+        const abortHandler = () => {
+            clearTimeout(timeoutId);
+            abortError();
+        };
+        if (signal?.aborted) {
+            return abortError();
+        }
+        const timeoutId = setTimeout(() => {
+            signal?.removeEventListener('abort', abortHandler);
+            resolve();
+        }, ms);
+        signal?.addEventListener('abort', abortHandler, { once: true });
+    });
+}
+
+export { delay };
Index: node_modules/es-toolkit/dist/promise/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/promise/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export { delay } from './delay.mjs';
+export { Mutex } from './mutex.mjs';
+export { Semaphore } from './semaphore.mjs';
+export { timeout } from './timeout.mjs';
+export { withTimeout } from './withTimeout.mjs';
Index: node_modules/es-toolkit/dist/promise/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/promise/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export { delay } from './delay.js';
+export { Mutex } from './mutex.js';
+export { Semaphore } from './semaphore.js';
+export { timeout } from './timeout.js';
+export { withTimeout } from './withTimeout.js';
Index: node_modules/es-toolkit/dist/promise/index.js
===================================================================
--- node_modules/es-toolkit/dist/promise/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const delay = require('./delay.js');
+const mutex = require('./mutex.js');
+const semaphore = require('./semaphore.js');
+const timeout = require('./timeout.js');
+const withTimeout = require('./withTimeout.js');
+
+
+
+exports.delay = delay.delay;
+exports.Mutex = mutex.Mutex;
+exports.Semaphore = semaphore.Semaphore;
+exports.timeout = timeout.timeout;
+exports.withTimeout = withTimeout.withTimeout;
Index: node_modules/es-toolkit/dist/promise/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/promise/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export { delay } from './delay.mjs';
+export { Mutex } from './mutex.mjs';
+export { Semaphore } from './semaphore.mjs';
+export { timeout } from './timeout.mjs';
+export { withTimeout } from './withTimeout.mjs';
Index: node_modules/es-toolkit/dist/promise/mutex.d.mts
===================================================================
--- node_modules/es-toolkit/dist/promise/mutex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/mutex.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+/**
+ * A Mutex (mutual exclusion lock) for async functions.
+ * It allows only one async task to access a critical section at a time.
+ *
+ * @example
+ * const mutex = new Mutex();
+ *
+ * async function criticalSection() {
+ *   await mutex.acquire();
+ *   try {
+ *     // This code section cannot be executed simultaneously
+ *   } finally {
+ *     mutex.release();
+ *   }
+ * }
+ *
+ * criticalSection();
+ * criticalSection(); // This call will wait until the first call releases the mutex.
+ */
+declare class Mutex {
+    private semaphore;
+    /**
+     * Checks if the mutex is currently locked.
+     * @returns {boolean} True if the mutex is locked, false otherwise.
+     *
+     * @example
+     * const mutex = new Mutex();
+     * console.log(mutex.isLocked); // false
+     * await mutex.acquire();
+     * console.log(mutex.isLocked); // true
+     * mutex.release();
+     * console.log(mutex.isLocked); // false
+     */
+    get isLocked(): boolean;
+    /**
+     * Acquires the mutex, blocking if necessary until it is available.
+     * @returns {Promise<void>} A promise that resolves when the mutex is acquired.
+     *
+     * @example
+     * const mutex = new Mutex();
+     * await mutex.acquire();
+     * try {
+     *   // This code section cannot be executed simultaneously
+     * } finally {
+     *   mutex.release();
+     * }
+     */
+    acquire(): Promise<void>;
+    /**
+     * Releases the mutex, allowing another waiting task to proceed.
+     *
+     * @example
+     * const mutex = new Mutex();
+     * await mutex.acquire();
+     * try {
+     *   // This code section cannot be executed simultaneously
+     * } finally {
+     *   mutex.release(); // Allows another waiting task to proceed.
+     * }
+     */
+    release(): void;
+}
+
+export { Mutex };
Index: node_modules/es-toolkit/dist/promise/mutex.d.ts
===================================================================
--- node_modules/es-toolkit/dist/promise/mutex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/mutex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+/**
+ * A Mutex (mutual exclusion lock) for async functions.
+ * It allows only one async task to access a critical section at a time.
+ *
+ * @example
+ * const mutex = new Mutex();
+ *
+ * async function criticalSection() {
+ *   await mutex.acquire();
+ *   try {
+ *     // This code section cannot be executed simultaneously
+ *   } finally {
+ *     mutex.release();
+ *   }
+ * }
+ *
+ * criticalSection();
+ * criticalSection(); // This call will wait until the first call releases the mutex.
+ */
+declare class Mutex {
+    private semaphore;
+    /**
+     * Checks if the mutex is currently locked.
+     * @returns {boolean} True if the mutex is locked, false otherwise.
+     *
+     * @example
+     * const mutex = new Mutex();
+     * console.log(mutex.isLocked); // false
+     * await mutex.acquire();
+     * console.log(mutex.isLocked); // true
+     * mutex.release();
+     * console.log(mutex.isLocked); // false
+     */
+    get isLocked(): boolean;
+    /**
+     * Acquires the mutex, blocking if necessary until it is available.
+     * @returns {Promise<void>} A promise that resolves when the mutex is acquired.
+     *
+     * @example
+     * const mutex = new Mutex();
+     * await mutex.acquire();
+     * try {
+     *   // This code section cannot be executed simultaneously
+     * } finally {
+     *   mutex.release();
+     * }
+     */
+    acquire(): Promise<void>;
+    /**
+     * Releases the mutex, allowing another waiting task to proceed.
+     *
+     * @example
+     * const mutex = new Mutex();
+     * await mutex.acquire();
+     * try {
+     *   // This code section cannot be executed simultaneously
+     * } finally {
+     *   mutex.release(); // Allows another waiting task to proceed.
+     * }
+     */
+    release(): void;
+}
+
+export { Mutex };
Index: node_modules/es-toolkit/dist/promise/mutex.js
===================================================================
--- node_modules/es-toolkit/dist/promise/mutex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/mutex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const semaphore = require('./semaphore.js');
+
+class Mutex {
+    semaphore = new semaphore.Semaphore(1);
+    get isLocked() {
+        return this.semaphore.available === 0;
+    }
+    async acquire() {
+        return this.semaphore.acquire();
+    }
+    release() {
+        this.semaphore.release();
+    }
+}
+
+exports.Mutex = Mutex;
Index: node_modules/es-toolkit/dist/promise/mutex.mjs
===================================================================
--- node_modules/es-toolkit/dist/promise/mutex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/mutex.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { Semaphore } from './semaphore.mjs';
+
+class Mutex {
+    semaphore = new Semaphore(1);
+    get isLocked() {
+        return this.semaphore.available === 0;
+    }
+    async acquire() {
+        return this.semaphore.acquire();
+    }
+    release() {
+        this.semaphore.release();
+    }
+}
+
+export { Mutex };
Index: node_modules/es-toolkit/dist/promise/semaphore.d.mts
===================================================================
--- node_modules/es-toolkit/dist/promise/semaphore.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/semaphore.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,81 @@
+/**
+ * A counting semaphore for async functions that manages available permits.
+ * Semaphores are mainly used to limit the number of concurrent async tasks.
+ *
+ * Each `acquire` operation takes a permit or waits until one is available.
+ * Each `release` operation adds a permit, potentially allowing a waiting task to proceed.
+ *
+ * The semaphore ensures fairness by maintaining a FIFO (First In, First Out) order for acquirers.
+ *
+ * @example
+ * const sema = new Semaphore(2);
+ *
+ * async function task() {
+ *   await sema.acquire();
+ *   try {
+ *     // This code can only be executed by two tasks at the same time
+ *   } finally {
+ *     sema.release();
+ *   }
+ * }
+ *
+ * task();
+ * task();
+ * task(); // This task will wait until one of the previous tasks releases the semaphore.
+ */
+declare class Semaphore {
+    /**
+     * The maximum number of concurrent operations allowed.
+     * @type {number}
+     */
+    capacity: number;
+    /**
+     * The number of available permits.
+     * @type {number}
+     */
+    available: number;
+    private deferredTasks;
+    /**
+     * Creates an instance of Semaphore.
+     * @param {number} capacity - The maximum number of concurrent operations allowed.
+     *
+     * @example
+     * const sema = new Semaphore(3); // Allows up to 3 concurrent operations.
+     */
+    constructor(capacity: number);
+    /**
+     * Acquires a semaphore, blocking if necessary until one is available.
+     * @returns {Promise<void>} A promise that resolves when the semaphore is acquired.
+     *
+     * @example
+     * const sema = new Semaphore(1);
+     *
+     * async function criticalSection() {
+     *   await sema.acquire();
+     *   try {
+     *     // This code section cannot be executed simultaneously
+     *   } finally {
+     *     sema.release();
+     *   }
+     * }
+     */
+    acquire(): Promise<void>;
+    /**
+     * Releases a semaphore, allowing one more operation to proceed.
+     *
+     * @example
+     * const sema = new Semaphore(1);
+     *
+     * async function task() {
+     *   await sema.acquire();
+     *   try {
+     *     // This code can only be executed by two tasks at the same time
+     *   } finally {
+     *     sema.release(); // Allows another waiting task to proceed.
+     *   }
+     * }
+     */
+    release(): void;
+}
+
+export { Semaphore };
Index: node_modules/es-toolkit/dist/promise/semaphore.d.ts
===================================================================
--- node_modules/es-toolkit/dist/promise/semaphore.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/semaphore.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,81 @@
+/**
+ * A counting semaphore for async functions that manages available permits.
+ * Semaphores are mainly used to limit the number of concurrent async tasks.
+ *
+ * Each `acquire` operation takes a permit or waits until one is available.
+ * Each `release` operation adds a permit, potentially allowing a waiting task to proceed.
+ *
+ * The semaphore ensures fairness by maintaining a FIFO (First In, First Out) order for acquirers.
+ *
+ * @example
+ * const sema = new Semaphore(2);
+ *
+ * async function task() {
+ *   await sema.acquire();
+ *   try {
+ *     // This code can only be executed by two tasks at the same time
+ *   } finally {
+ *     sema.release();
+ *   }
+ * }
+ *
+ * task();
+ * task();
+ * task(); // This task will wait until one of the previous tasks releases the semaphore.
+ */
+declare class Semaphore {
+    /**
+     * The maximum number of concurrent operations allowed.
+     * @type {number}
+     */
+    capacity: number;
+    /**
+     * The number of available permits.
+     * @type {number}
+     */
+    available: number;
+    private deferredTasks;
+    /**
+     * Creates an instance of Semaphore.
+     * @param {number} capacity - The maximum number of concurrent operations allowed.
+     *
+     * @example
+     * const sema = new Semaphore(3); // Allows up to 3 concurrent operations.
+     */
+    constructor(capacity: number);
+    /**
+     * Acquires a semaphore, blocking if necessary until one is available.
+     * @returns {Promise<void>} A promise that resolves when the semaphore is acquired.
+     *
+     * @example
+     * const sema = new Semaphore(1);
+     *
+     * async function criticalSection() {
+     *   await sema.acquire();
+     *   try {
+     *     // This code section cannot be executed simultaneously
+     *   } finally {
+     *     sema.release();
+     *   }
+     * }
+     */
+    acquire(): Promise<void>;
+    /**
+     * Releases a semaphore, allowing one more operation to proceed.
+     *
+     * @example
+     * const sema = new Semaphore(1);
+     *
+     * async function task() {
+     *   await sema.acquire();
+     *   try {
+     *     // This code can only be executed by two tasks at the same time
+     *   } finally {
+     *     sema.release(); // Allows another waiting task to proceed.
+     *   }
+     * }
+     */
+    release(): void;
+}
+
+export { Semaphore };
Index: node_modules/es-toolkit/dist/promise/semaphore.js
===================================================================
--- node_modules/es-toolkit/dist/promise/semaphore.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/semaphore.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+class Semaphore {
+    capacity;
+    available;
+    deferredTasks = [];
+    constructor(capacity) {
+        this.capacity = capacity;
+        this.available = capacity;
+    }
+    async acquire() {
+        if (this.available > 0) {
+            this.available--;
+            return;
+        }
+        return new Promise(resolve => {
+            this.deferredTasks.push(resolve);
+        });
+    }
+    release() {
+        const deferredTask = this.deferredTasks.shift();
+        if (deferredTask != null) {
+            deferredTask();
+            return;
+        }
+        if (this.available < this.capacity) {
+            this.available++;
+        }
+    }
+}
+
+exports.Semaphore = Semaphore;
Index: node_modules/es-toolkit/dist/promise/semaphore.mjs
===================================================================
--- node_modules/es-toolkit/dist/promise/semaphore.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/semaphore.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+class Semaphore {
+    capacity;
+    available;
+    deferredTasks = [];
+    constructor(capacity) {
+        this.capacity = capacity;
+        this.available = capacity;
+    }
+    async acquire() {
+        if (this.available > 0) {
+            this.available--;
+            return;
+        }
+        return new Promise(resolve => {
+            this.deferredTasks.push(resolve);
+        });
+    }
+    release() {
+        const deferredTask = this.deferredTasks.shift();
+        if (deferredTask != null) {
+            deferredTask();
+            return;
+        }
+        if (this.available < this.capacity) {
+            this.available++;
+        }
+    }
+}
+
+export { Semaphore };
Index: node_modules/es-toolkit/dist/promise/timeout.d.mts
===================================================================
--- node_modules/es-toolkit/dist/promise/timeout.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/timeout.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Returns a promise that rejects with a `TimeoutError` after a specified delay.
+ *
+ * @param {number} ms - The delay duration in milliseconds.
+ * @returns {Promise<never>} A promise that rejects with a `TimeoutError` after the specified delay.
+ * @throws {TimeoutError} Throws a `TimeoutError` after the specified delay.
+ *
+ * @example
+ * try {
+ *   await timeout(1000); // Timeout exception after 1 second
+ * } catch (error) {
+ *   console.error(error); // Will log 'The operation was timed out'
+ * }
+ */
+declare function timeout(ms: number): Promise<never>;
+
+export { timeout };
Index: node_modules/es-toolkit/dist/promise/timeout.d.ts
===================================================================
--- node_modules/es-toolkit/dist/promise/timeout.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/timeout.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Returns a promise that rejects with a `TimeoutError` after a specified delay.
+ *
+ * @param {number} ms - The delay duration in milliseconds.
+ * @returns {Promise<never>} A promise that rejects with a `TimeoutError` after the specified delay.
+ * @throws {TimeoutError} Throws a `TimeoutError` after the specified delay.
+ *
+ * @example
+ * try {
+ *   await timeout(1000); // Timeout exception after 1 second
+ * } catch (error) {
+ *   console.error(error); // Will log 'The operation was timed out'
+ * }
+ */
+declare function timeout(ms: number): Promise<never>;
+
+export { timeout };
Index: node_modules/es-toolkit/dist/promise/timeout.js
===================================================================
--- node_modules/es-toolkit/dist/promise/timeout.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/timeout.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const delay = require('./delay.js');
+const TimeoutError = require('../error/TimeoutError.js');
+
+async function timeout(ms) {
+    await delay.delay(ms);
+    throw new TimeoutError.TimeoutError();
+}
+
+exports.timeout = timeout;
Index: node_modules/es-toolkit/dist/promise/timeout.mjs
===================================================================
--- node_modules/es-toolkit/dist/promise/timeout.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/timeout.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { delay } from './delay.mjs';
+import { TimeoutError } from '../error/TimeoutError.mjs';
+
+async function timeout(ms) {
+    await delay(ms);
+    throw new TimeoutError();
+}
+
+export { timeout };
Index: node_modules/es-toolkit/dist/promise/withTimeout.d.mts
===================================================================
--- node_modules/es-toolkit/dist/promise/withTimeout.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/withTimeout.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/**
+ * Executes an async function and enforces a timeout.
+ *
+ * If the promise does not resolve within the specified time,
+ * the timeout will trigger and the returned promise will be rejected.
+ *
+ *
+ * @template T
+ * @param {() => Promise<T>} run - A function that returns a promise to be executed.
+ * @param {number} ms - The timeout duration in milliseconds.
+ * @returns {Promise<T>} A promise that resolves with the result of the `run` function or rejects if the timeout is reached.
+ *
+ * @example
+ * async function fetchData() {
+ *   const response = await fetch('https://example.com/data');
+ *   return response.json();
+ * }
+ *
+ * try {
+ *   const data = await withTimeout(fetchData, 1000);
+ *   console.log(data); // Logs the fetched data if `fetchData` is resolved within 1 second.
+ * } catch (error) {
+ *   console.error(error); // Will log 'TimeoutError' if `fetchData` is not resolved within 1 second.
+ * }
+ */
+declare function withTimeout<T>(run: () => Promise<T>, ms: number): Promise<T>;
+
+export { withTimeout };
Index: node_modules/es-toolkit/dist/promise/withTimeout.d.ts
===================================================================
--- node_modules/es-toolkit/dist/promise/withTimeout.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/withTimeout.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/**
+ * Executes an async function and enforces a timeout.
+ *
+ * If the promise does not resolve within the specified time,
+ * the timeout will trigger and the returned promise will be rejected.
+ *
+ *
+ * @template T
+ * @param {() => Promise<T>} run - A function that returns a promise to be executed.
+ * @param {number} ms - The timeout duration in milliseconds.
+ * @returns {Promise<T>} A promise that resolves with the result of the `run` function or rejects if the timeout is reached.
+ *
+ * @example
+ * async function fetchData() {
+ *   const response = await fetch('https://example.com/data');
+ *   return response.json();
+ * }
+ *
+ * try {
+ *   const data = await withTimeout(fetchData, 1000);
+ *   console.log(data); // Logs the fetched data if `fetchData` is resolved within 1 second.
+ * } catch (error) {
+ *   console.error(error); // Will log 'TimeoutError' if `fetchData` is not resolved within 1 second.
+ * }
+ */
+declare function withTimeout<T>(run: () => Promise<T>, ms: number): Promise<T>;
+
+export { withTimeout };
Index: node_modules/es-toolkit/dist/promise/withTimeout.js
===================================================================
--- node_modules/es-toolkit/dist/promise/withTimeout.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/withTimeout.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const timeout = require('./timeout.js');
+
+async function withTimeout(run, ms) {
+    return Promise.race([run(), timeout.timeout(ms)]);
+}
+
+exports.withTimeout = withTimeout;
Index: node_modules/es-toolkit/dist/promise/withTimeout.mjs
===================================================================
--- node_modules/es-toolkit/dist/promise/withTimeout.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/promise/withTimeout.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { timeout } from './timeout.mjs';
+
+async function withTimeout(run, ms) {
+    return Promise.race([run(), timeout(ms)]);
+}
+
+export { withTimeout };
Index: node_modules/es-toolkit/dist/string/camelCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/camelCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/camelCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Converts a string to camel case.
+ *
+ * Camel case is the naming convention in which the first word is written in lowercase and
+ * each subsequent word begins with a capital letter, concatenated without any separator characters.
+ *
+ * @param {string} str - The string that is to be changed to camel case.
+ * @returns {string} - The converted string to camel case.
+ *
+ * @example
+ * const convertedStr1 = camelCase('camelCase') // returns 'camelCase'
+ * const convertedStr2 = camelCase('some whitespace') // returns 'someWhitespace'
+ * const convertedStr3 = camelCase('hyphen-text') // returns 'hyphenText'
+ * const convertedStr4 = camelCase('HTTPRequest') // returns 'httpRequest'
+ * const convertedStr5 = camelCase('Keep unicode 😅') // returns 'keepUnicode😅'
+ */
+declare function camelCase(str: string): string;
+
+export { camelCase };
Index: node_modules/es-toolkit/dist/string/camelCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/camelCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/camelCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Converts a string to camel case.
+ *
+ * Camel case is the naming convention in which the first word is written in lowercase and
+ * each subsequent word begins with a capital letter, concatenated without any separator characters.
+ *
+ * @param {string} str - The string that is to be changed to camel case.
+ * @returns {string} - The converted string to camel case.
+ *
+ * @example
+ * const convertedStr1 = camelCase('camelCase') // returns 'camelCase'
+ * const convertedStr2 = camelCase('some whitespace') // returns 'someWhitespace'
+ * const convertedStr3 = camelCase('hyphen-text') // returns 'hyphenText'
+ * const convertedStr4 = camelCase('HTTPRequest') // returns 'httpRequest'
+ * const convertedStr5 = camelCase('Keep unicode 😅') // returns 'keepUnicode😅'
+ */
+declare function camelCase(str: string): string;
+
+export { camelCase };
Index: node_modules/es-toolkit/dist/string/camelCase.js
===================================================================
--- node_modules/es-toolkit/dist/string/camelCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/camelCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const capitalize = require('./capitalize.js');
+const words = require('./words.js');
+
+function camelCase(str) {
+    const words$1 = words.words(str);
+    if (words$1.length === 0) {
+        return '';
+    }
+    const [first, ...rest] = words$1;
+    return `${first.toLowerCase()}${rest.map(word => capitalize.capitalize(word)).join('')}`;
+}
+
+exports.camelCase = camelCase;
Index: node_modules/es-toolkit/dist/string/camelCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/camelCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/camelCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { capitalize } from './capitalize.mjs';
+import { words } from './words.mjs';
+
+function camelCase(str) {
+    const words$1 = words(str);
+    if (words$1.length === 0) {
+        return '';
+    }
+    const [first, ...rest] = words$1;
+    return `${first.toLowerCase()}${rest.map(word => capitalize(word)).join('')}`;
+}
+
+export { camelCase };
Index: node_modules/es-toolkit/dist/string/capitalize.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/capitalize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/capitalize.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Converts the first character of string to upper case and the remaining to lower case.
+ *
+ * @template T - Literal type of the string.
+ * @param {T} str - The string to be converted to uppercase.
+ * @returns {Capitalize<T>} - The capitalized string.
+ *
+ * @example
+ * const result = capitalize('fred') // returns 'Fred'
+ * const result2 = capitalize('FRED') // returns 'Fred'
+ */
+declare function capitalize<T extends string>(str: T): Capitalize<T>;
+type Capitalize<T extends string> = T extends `${infer F}${infer R}` ? `${Uppercase<F>}${Lowercase<R>}` : T;
+
+export { capitalize };
Index: node_modules/es-toolkit/dist/string/capitalize.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/capitalize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/capitalize.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Converts the first character of string to upper case and the remaining to lower case.
+ *
+ * @template T - Literal type of the string.
+ * @param {T} str - The string to be converted to uppercase.
+ * @returns {Capitalize<T>} - The capitalized string.
+ *
+ * @example
+ * const result = capitalize('fred') // returns 'Fred'
+ * const result2 = capitalize('FRED') // returns 'Fred'
+ */
+declare function capitalize<T extends string>(str: T): Capitalize<T>;
+type Capitalize<T extends string> = T extends `${infer F}${infer R}` ? `${Uppercase<F>}${Lowercase<R>}` : T;
+
+export { capitalize };
Index: node_modules/es-toolkit/dist/string/capitalize.js
===================================================================
--- node_modules/es-toolkit/dist/string/capitalize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/capitalize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function capitalize(str) {
+    return (str.charAt(0).toUpperCase() + str.slice(1).toLowerCase());
+}
+
+exports.capitalize = capitalize;
Index: node_modules/es-toolkit/dist/string/capitalize.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/capitalize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/capitalize.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function capitalize(str) {
+    return (str.charAt(0).toUpperCase() + str.slice(1).toLowerCase());
+}
+
+export { capitalize };
Index: node_modules/es-toolkit/dist/string/constantCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/constantCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/constantCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to constant case.
+ *
+ * Constant case is a naming convention where each word is written in uppercase letters and separated by an underscore (`_`). For example, `CONSTANT_CASE`.
+ *
+ * @param {string} str - The string that is to be changed to constant case.
+ * @returns {string} - The converted string to constant case.
+ *
+ * @example
+ * const convertedStr1 = constantCase('camelCase') // returns 'CAMEL_CASE'
+ * const convertedStr2 = constantCase('some whitespace') // returns 'SOME_WHITESPACE'
+ * const convertedStr3 = constantCase('hyphen-text') // returns 'HYPHEN_TEXT'
+ * const convertedStr4 = constantCase('HTTPRequest') // returns 'HTTP_REQUEST'
+ */
+declare function constantCase(str: string): string;
+
+export { constantCase };
Index: node_modules/es-toolkit/dist/string/constantCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/constantCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/constantCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to constant case.
+ *
+ * Constant case is a naming convention where each word is written in uppercase letters and separated by an underscore (`_`). For example, `CONSTANT_CASE`.
+ *
+ * @param {string} str - The string that is to be changed to constant case.
+ * @returns {string} - The converted string to constant case.
+ *
+ * @example
+ * const convertedStr1 = constantCase('camelCase') // returns 'CAMEL_CASE'
+ * const convertedStr2 = constantCase('some whitespace') // returns 'SOME_WHITESPACE'
+ * const convertedStr3 = constantCase('hyphen-text') // returns 'HYPHEN_TEXT'
+ * const convertedStr4 = constantCase('HTTPRequest') // returns 'HTTP_REQUEST'
+ */
+declare function constantCase(str: string): string;
+
+export { constantCase };
Index: node_modules/es-toolkit/dist/string/constantCase.js
===================================================================
--- node_modules/es-toolkit/dist/string/constantCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/constantCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const words = require('./words.js');
+
+function constantCase(str) {
+    const words$1 = words.words(str);
+    return words$1.map(word => word.toUpperCase()).join('_');
+}
+
+exports.constantCase = constantCase;
Index: node_modules/es-toolkit/dist/string/constantCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/constantCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/constantCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { words } from './words.mjs';
+
+function constantCase(str) {
+    const words$1 = words(str);
+    return words$1.map(word => word.toUpperCase()).join('_');
+}
+
+export { constantCase };
Index: node_modules/es-toolkit/dist/string/deburr.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/deburr.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/deburr.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Converts a string by replacing special characters and diacritical marks with their ASCII equivalents.
+ * For example, "Crème brûlée" becomes "Creme brulee".
+ *
+ * @param {string} str - The input string to be deburred.
+ * @returns {string} - The deburred string with special characters replaced by their ASCII equivalents.
+ *
+ * @example
+ * // Basic usage:
+ * deburr('Æthelred') // returns 'Aethelred'
+ *
+ * @example
+ * // Handling diacritical marks:
+ * deburr('München') // returns 'Munchen'
+ *
+ * @example
+ * // Special characters:
+ * deburr('Crème brûlée') // returns 'Creme brulee'
+ */
+declare function deburr(str: string): string;
+
+export { deburr };
Index: node_modules/es-toolkit/dist/string/deburr.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/deburr.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/deburr.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * Converts a string by replacing special characters and diacritical marks with their ASCII equivalents.
+ * For example, "Crème brûlée" becomes "Creme brulee".
+ *
+ * @param {string} str - The input string to be deburred.
+ * @returns {string} - The deburred string with special characters replaced by their ASCII equivalents.
+ *
+ * @example
+ * // Basic usage:
+ * deburr('Æthelred') // returns 'Aethelred'
+ *
+ * @example
+ * // Handling diacritical marks:
+ * deburr('München') // returns 'Munchen'
+ *
+ * @example
+ * // Special characters:
+ * deburr('Crème brûlée') // returns 'Creme brulee'
+ */
+declare function deburr(str: string): string;
+
+export { deburr };
Index: node_modules/es-toolkit/dist/string/deburr.js
===================================================================
--- node_modules/es-toolkit/dist/string/deburr.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/deburr.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const deburrMap = new Map(Object.entries({
+    Æ: 'Ae',
+    Ð: 'D',
+    Ø: 'O',
+    Þ: 'Th',
+    ß: 'ss',
+    æ: 'ae',
+    ð: 'd',
+    ø: 'o',
+    þ: 'th',
+    Đ: 'D',
+    đ: 'd',
+    Ħ: 'H',
+    ħ: 'h',
+    ı: 'i',
+    Ĳ: 'IJ',
+    ĳ: 'ij',
+    ĸ: 'k',
+    Ŀ: 'L',
+    ŀ: 'l',
+    Ł: 'L',
+    ł: 'l',
+    ŉ: "'n",
+    Ŋ: 'N',
+    ŋ: 'n',
+    Œ: 'Oe',
+    œ: 'oe',
+    Ŧ: 'T',
+    ŧ: 't',
+    ſ: 's',
+}));
+function deburr(str) {
+    str = str.normalize('NFD');
+    let result = '';
+    for (let i = 0; i < str.length; i++) {
+        const char = str[i];
+        if ((char >= '\u0300' && char <= '\u036f') || (char >= '\ufe20' && char <= '\ufe23')) {
+            continue;
+        }
+        result += deburrMap.get(char) ?? char;
+    }
+    return result;
+}
+
+exports.deburr = deburr;
Index: node_modules/es-toolkit/dist/string/deburr.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/deburr.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/deburr.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+const deburrMap = new Map(Object.entries({
+    Æ: 'Ae',
+    Ð: 'D',
+    Ø: 'O',
+    Þ: 'Th',
+    ß: 'ss',
+    æ: 'ae',
+    ð: 'd',
+    ø: 'o',
+    þ: 'th',
+    Đ: 'D',
+    đ: 'd',
+    Ħ: 'H',
+    ħ: 'h',
+    ı: 'i',
+    Ĳ: 'IJ',
+    ĳ: 'ij',
+    ĸ: 'k',
+    Ŀ: 'L',
+    ŀ: 'l',
+    Ł: 'L',
+    ł: 'l',
+    ŉ: "'n",
+    Ŋ: 'N',
+    ŋ: 'n',
+    Œ: 'Oe',
+    œ: 'oe',
+    Ŧ: 'T',
+    ŧ: 't',
+    ſ: 's',
+}));
+function deburr(str) {
+    str = str.normalize('NFD');
+    let result = '';
+    for (let i = 0; i < str.length; i++) {
+        const char = str[i];
+        if ((char >= '\u0300' && char <= '\u036f') || (char >= '\ufe20' && char <= '\ufe23')) {
+            continue;
+        }
+        result += deburrMap.get(char) ?? char;
+    }
+    return result;
+}
+
+export { deburr };
Index: node_modules/es-toolkit/dist/string/escape.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/escape.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/escape.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the characters "&", "<", ">", '"', and "'" in `str` to their corresponding HTML entities.
+ * For example, "<" becomes "&lt;".
+ *
+ * @param {string} str  The string to escape.
+ * @returns {string} Returns the escaped string.
+ *
+ * @example
+ * escape('This is a <div> element.'); // returns 'This is a &lt;div&gt; element.'
+ * escape('This is a "quote"'); // returns 'This is a &quot;quote&quot;'
+ * escape("This is a 'quote'"); // returns 'This is a &#39;quote&#39;'
+ * escape('This is a & symbol'); // returns 'This is a &amp; symbol'
+ */
+declare function escape(str: string): string;
+
+export { escape };
Index: node_modules/es-toolkit/dist/string/escape.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/escape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/escape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the characters "&", "<", ">", '"', and "'" in `str` to their corresponding HTML entities.
+ * For example, "<" becomes "&lt;".
+ *
+ * @param {string} str  The string to escape.
+ * @returns {string} Returns the escaped string.
+ *
+ * @example
+ * escape('This is a <div> element.'); // returns 'This is a &lt;div&gt; element.'
+ * escape('This is a "quote"'); // returns 'This is a &quot;quote&quot;'
+ * escape("This is a 'quote'"); // returns 'This is a &#39;quote&#39;'
+ * escape('This is a & symbol'); // returns 'This is a &amp; symbol'
+ */
+declare function escape(str: string): string;
+
+export { escape };
Index: node_modules/es-toolkit/dist/string/escape.js
===================================================================
--- node_modules/es-toolkit/dist/string/escape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/escape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const htmlEscapes = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#39;',
+};
+function escape(str) {
+    return str.replace(/[&<>"']/g, match => htmlEscapes[match]);
+}
+
+exports.escape = escape;
Index: node_modules/es-toolkit/dist/string/escape.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/escape.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/escape.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+const htmlEscapes = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#39;',
+};
+function escape(str) {
+    return str.replace(/[&<>"']/g, match => htmlEscapes[match]);
+}
+
+export { escape };
Index: node_modules/es-toolkit/dist/string/escapeRegExp.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/escapeRegExp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/escapeRegExp.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Escapes the RegExp special characters "^", "$", "\\", ".", "*", "+", "?", "(", ")", "[", "]", "{", "}", and "|" in `str`.
+ *
+ * @param {string} str The string to escape.
+ * @returns {string} Returns the escaped string.
+ *
+ * @example
+ * import { escapeRegExp } from 'es-toolkit/string';
+ *
+ * escapeRegExp('[es-toolkit](https://es-toolkit.dev/)'); // returns '\[es-toolkit\]\(https://es-toolkit\.dev/\)'
+ */
+declare function escapeRegExp(str: string): string;
+
+export { escapeRegExp };
Index: node_modules/es-toolkit/dist/string/escapeRegExp.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/escapeRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/escapeRegExp.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Escapes the RegExp special characters "^", "$", "\\", ".", "*", "+", "?", "(", ")", "[", "]", "{", "}", and "|" in `str`.
+ *
+ * @param {string} str The string to escape.
+ * @returns {string} Returns the escaped string.
+ *
+ * @example
+ * import { escapeRegExp } from 'es-toolkit/string';
+ *
+ * escapeRegExp('[es-toolkit](https://es-toolkit.dev/)'); // returns '\[es-toolkit\]\(https://es-toolkit\.dev/\)'
+ */
+declare function escapeRegExp(str: string): string;
+
+export { escapeRegExp };
Index: node_modules/es-toolkit/dist/string/escapeRegExp.js
===================================================================
--- node_modules/es-toolkit/dist/string/escapeRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/escapeRegExp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function escapeRegExp(str) {
+    return str.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
+}
+
+exports.escapeRegExp = escapeRegExp;
Index: node_modules/es-toolkit/dist/string/escapeRegExp.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/escapeRegExp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/escapeRegExp.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function escapeRegExp(str) {
+    return str.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
+}
+
+export { escapeRegExp };
Index: node_modules/es-toolkit/dist/string/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+export { camelCase } from './camelCase.mjs';
+export { capitalize } from './capitalize.mjs';
+export { constantCase } from './constantCase.mjs';
+export { deburr } from './deburr.mjs';
+export { escape } from './escape.mjs';
+export { escapeRegExp } from './escapeRegExp.mjs';
+export { kebabCase } from './kebabCase.mjs';
+export { lowerCase } from './lowerCase.mjs';
+export { lowerFirst } from './lowerFirst.mjs';
+export { pad } from './pad.mjs';
+export { pascalCase } from './pascalCase.mjs';
+export { reverseString } from './reverseString.mjs';
+export { snakeCase } from './snakeCase.mjs';
+export { startCase } from './startCase.mjs';
+export { trim } from './trim.mjs';
+export { trimEnd } from './trimEnd.mjs';
+export { trimStart } from './trimStart.mjs';
+export { unescape } from './unescape.mjs';
+export { upperCase } from './upperCase.mjs';
+export { upperFirst } from './upperFirst.mjs';
+export { words } from './words.mjs';
Index: node_modules/es-toolkit/dist/string/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+export { camelCase } from './camelCase.js';
+export { capitalize } from './capitalize.js';
+export { constantCase } from './constantCase.js';
+export { deburr } from './deburr.js';
+export { escape } from './escape.js';
+export { escapeRegExp } from './escapeRegExp.js';
+export { kebabCase } from './kebabCase.js';
+export { lowerCase } from './lowerCase.js';
+export { lowerFirst } from './lowerFirst.js';
+export { pad } from './pad.js';
+export { pascalCase } from './pascalCase.js';
+export { reverseString } from './reverseString.js';
+export { snakeCase } from './snakeCase.js';
+export { startCase } from './startCase.js';
+export { trim } from './trim.js';
+export { trimEnd } from './trimEnd.js';
+export { trimStart } from './trimStart.js';
+export { unescape } from './unescape.js';
+export { upperCase } from './upperCase.js';
+export { upperFirst } from './upperFirst.js';
+export { words } from './words.js';
Index: node_modules/es-toolkit/dist/string/index.js
===================================================================
--- node_modules/es-toolkit/dist/string/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const camelCase = require('./camelCase.js');
+const capitalize = require('./capitalize.js');
+const constantCase = require('./constantCase.js');
+const deburr = require('./deburr.js');
+const escape = require('./escape.js');
+const escapeRegExp = require('./escapeRegExp.js');
+const kebabCase = require('./kebabCase.js');
+const lowerCase = require('./lowerCase.js');
+const lowerFirst = require('./lowerFirst.js');
+const pad = require('./pad.js');
+const pascalCase = require('./pascalCase.js');
+const reverseString = require('./reverseString.js');
+const snakeCase = require('./snakeCase.js');
+const startCase = require('./startCase.js');
+const trim = require('./trim.js');
+const trimEnd = require('./trimEnd.js');
+const trimStart = require('./trimStart.js');
+const unescape = require('./unescape.js');
+const upperCase = require('./upperCase.js');
+const upperFirst = require('./upperFirst.js');
+const words = require('./words.js');
+
+
+
+exports.camelCase = camelCase.camelCase;
+exports.capitalize = capitalize.capitalize;
+exports.constantCase = constantCase.constantCase;
+exports.deburr = deburr.deburr;
+exports.escape = escape.escape;
+exports.escapeRegExp = escapeRegExp.escapeRegExp;
+exports.kebabCase = kebabCase.kebabCase;
+exports.lowerCase = lowerCase.lowerCase;
+exports.lowerFirst = lowerFirst.lowerFirst;
+exports.pad = pad.pad;
+exports.pascalCase = pascalCase.pascalCase;
+exports.reverseString = reverseString.reverseString;
+exports.snakeCase = snakeCase.snakeCase;
+exports.startCase = startCase.startCase;
+exports.trim = trim.trim;
+exports.trimEnd = trimEnd.trimEnd;
+exports.trimStart = trimStart.trimStart;
+exports.unescape = unescape.unescape;
+exports.upperCase = upperCase.upperCase;
+exports.upperFirst = upperFirst.upperFirst;
+exports.words = words.words;
Index: node_modules/es-toolkit/dist/string/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+export { camelCase } from './camelCase.mjs';
+export { capitalize } from './capitalize.mjs';
+export { constantCase } from './constantCase.mjs';
+export { deburr } from './deburr.mjs';
+export { escape } from './escape.mjs';
+export { escapeRegExp } from './escapeRegExp.mjs';
+export { kebabCase } from './kebabCase.mjs';
+export { lowerCase } from './lowerCase.mjs';
+export { lowerFirst } from './lowerFirst.mjs';
+export { pad } from './pad.mjs';
+export { pascalCase } from './pascalCase.mjs';
+export { reverseString } from './reverseString.mjs';
+export { snakeCase } from './snakeCase.mjs';
+export { startCase } from './startCase.mjs';
+export { trim } from './trim.mjs';
+export { trimEnd } from './trimEnd.mjs';
+export { trimStart } from './trimStart.mjs';
+export { unescape } from './unescape.mjs';
+export { upperCase } from './upperCase.mjs';
+export { upperFirst } from './upperFirst.mjs';
+export { words } from './words.mjs';
Index: node_modules/es-toolkit/dist/string/kebabCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/kebabCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/kebabCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to kebab case.
+ *
+ * Kebab case is the naming convention in which each word is written in lowercase and separated by a dash (-) character.
+ *
+ * @param {string} str - The string that is to be changed to kebab case.
+ * @returns {string} - The converted string to kebab case.
+ *
+ * @example
+ * const convertedStr1 = kebabCase('camelCase') // returns 'camel-case'
+ * const convertedStr2 = kebabCase('some whitespace') // returns 'some-whitespace'
+ * const convertedStr3 = kebabCase('hyphen-text') // returns 'hyphen-text'
+ * const convertedStr4 = kebabCase('HTTPRequest') // returns 'http-request'
+ */
+declare function kebabCase(str: string): string;
+
+export { kebabCase };
Index: node_modules/es-toolkit/dist/string/kebabCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/kebabCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/kebabCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to kebab case.
+ *
+ * Kebab case is the naming convention in which each word is written in lowercase and separated by a dash (-) character.
+ *
+ * @param {string} str - The string that is to be changed to kebab case.
+ * @returns {string} - The converted string to kebab case.
+ *
+ * @example
+ * const convertedStr1 = kebabCase('camelCase') // returns 'camel-case'
+ * const convertedStr2 = kebabCase('some whitespace') // returns 'some-whitespace'
+ * const convertedStr3 = kebabCase('hyphen-text') // returns 'hyphen-text'
+ * const convertedStr4 = kebabCase('HTTPRequest') // returns 'http-request'
+ */
+declare function kebabCase(str: string): string;
+
+export { kebabCase };
Index: node_modules/es-toolkit/dist/string/kebabCase.js
===================================================================
--- node_modules/es-toolkit/dist/string/kebabCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/kebabCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const words = require('./words.js');
+
+function kebabCase(str) {
+    const words$1 = words.words(str);
+    return words$1.map(word => word.toLowerCase()).join('-');
+}
+
+exports.kebabCase = kebabCase;
Index: node_modules/es-toolkit/dist/string/kebabCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/kebabCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/kebabCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { words } from './words.mjs';
+
+function kebabCase(str) {
+    const words$1 = words(str);
+    return words$1.map(word => word.toLowerCase()).join('-');
+}
+
+export { kebabCase };
Index: node_modules/es-toolkit/dist/string/lowerCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/lowerCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/lowerCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to lower case.
+ *
+ * Lower case is the naming convention in which each word is written in lowercase and separated by an space ( ) character.
+ *
+ * @param {string} str - The string that is to be changed to lower case.
+ * @returns {string} - The converted string to lower case.
+ *
+ * @example
+ * const convertedStr1 = lowerCase('camelCase') // returns 'camel case'
+ * const convertedStr2 = lowerCase('some whitespace') // returns 'some whitespace'
+ * const convertedStr3 = lowerCase('hyphen-text') // returns 'hyphen text'
+ * const convertedStr4 = lowerCase('HTTPRequest') // returns 'http request'
+ */
+declare function lowerCase(str: string): string;
+
+export { lowerCase };
Index: node_modules/es-toolkit/dist/string/lowerCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/lowerCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/lowerCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to lower case.
+ *
+ * Lower case is the naming convention in which each word is written in lowercase and separated by an space ( ) character.
+ *
+ * @param {string} str - The string that is to be changed to lower case.
+ * @returns {string} - The converted string to lower case.
+ *
+ * @example
+ * const convertedStr1 = lowerCase('camelCase') // returns 'camel case'
+ * const convertedStr2 = lowerCase('some whitespace') // returns 'some whitespace'
+ * const convertedStr3 = lowerCase('hyphen-text') // returns 'hyphen text'
+ * const convertedStr4 = lowerCase('HTTPRequest') // returns 'http request'
+ */
+declare function lowerCase(str: string): string;
+
+export { lowerCase };
Index: node_modules/es-toolkit/dist/string/lowerCase.js
===================================================================
--- node_modules/es-toolkit/dist/string/lowerCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/lowerCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const words = require('./words.js');
+
+function lowerCase(str) {
+    const words$1 = words.words(str);
+    return words$1.map(word => word.toLowerCase()).join(' ');
+}
+
+exports.lowerCase = lowerCase;
Index: node_modules/es-toolkit/dist/string/lowerCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/lowerCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/lowerCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { words } from './words.mjs';
+
+function lowerCase(str) {
+    const words$1 = words(str);
+    return words$1.map(word => word.toLowerCase()).join(' ');
+}
+
+export { lowerCase };
Index: node_modules/es-toolkit/dist/string/lowerFirst.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/lowerFirst.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/lowerFirst.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to lower case.
+ *
+ * @param {string} str - The string that is to be changed
+ * @returns {string} - The converted string.
+ *
+ * @example
+ * const convertedStr1 = lowerCase('fred') // returns 'fred'
+ * const convertedStr2 = lowerCase('Fred') // returns 'fred'
+ * const convertedStr3 = lowerCase('FRED') // returns 'fRED'
+ */
+declare function lowerFirst(str: string): string;
+
+export { lowerFirst };
Index: node_modules/es-toolkit/dist/string/lowerFirst.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/lowerFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/lowerFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to lower case.
+ *
+ * @param {string} str - The string that is to be changed
+ * @returns {string} - The converted string.
+ *
+ * @example
+ * const convertedStr1 = lowerCase('fred') // returns 'fred'
+ * const convertedStr2 = lowerCase('Fred') // returns 'fred'
+ * const convertedStr3 = lowerCase('FRED') // returns 'fRED'
+ */
+declare function lowerFirst(str: string): string;
+
+export { lowerFirst };
Index: node_modules/es-toolkit/dist/string/lowerFirst.js
===================================================================
--- node_modules/es-toolkit/dist/string/lowerFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/lowerFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function lowerFirst(str) {
+    return str.substring(0, 1).toLowerCase() + str.substring(1);
+}
+
+exports.lowerFirst = lowerFirst;
Index: node_modules/es-toolkit/dist/string/lowerFirst.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/lowerFirst.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/lowerFirst.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function lowerFirst(str) {
+    return str.substring(0, 1).toLowerCase() + str.substring(1);
+}
+
+export { lowerFirst };
Index: node_modules/es-toolkit/dist/string/pad.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/pad.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/pad.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Pads string on the left and right sides if it's shorter than length. Padding characters are truncated if they can't be evenly divided by length.
+ * If the length is less than or equal to the original string's length, or if the padding character is an empty string, the original string is returned unchanged.
+ *
+ * @param {string} str - The string to pad.
+ * @param {number} [length] - The length of the resulting string once padded.
+ * @param {string} [chars] - The character(s) to use for padding.
+ * @returns {string} - The padded string, or the original string if padding is not required.
+ *
+ * @example
+ * const result1 = pad('abc', 8);         // result will be '  abc   '
+ * const result2 = pad('abc', 8, '_-');   // result will be '_-abc_-_'
+ * const result3 = pad('abc', 3);         // result will be 'abc'
+ * const result4 = pad('abc', 2);         // result will be 'abc'
+ *
+ */
+declare function pad(str: string, length: number, chars?: string): string;
+
+export { pad };
Index: node_modules/es-toolkit/dist/string/pad.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/pad.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/pad.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Pads string on the left and right sides if it's shorter than length. Padding characters are truncated if they can't be evenly divided by length.
+ * If the length is less than or equal to the original string's length, or if the padding character is an empty string, the original string is returned unchanged.
+ *
+ * @param {string} str - The string to pad.
+ * @param {number} [length] - The length of the resulting string once padded.
+ * @param {string} [chars] - The character(s) to use for padding.
+ * @returns {string} - The padded string, or the original string if padding is not required.
+ *
+ * @example
+ * const result1 = pad('abc', 8);         // result will be '  abc   '
+ * const result2 = pad('abc', 8, '_-');   // result will be '_-abc_-_'
+ * const result3 = pad('abc', 3);         // result will be 'abc'
+ * const result4 = pad('abc', 2);         // result will be 'abc'
+ *
+ */
+declare function pad(str: string, length: number, chars?: string): string;
+
+export { pad };
Index: node_modules/es-toolkit/dist/string/pad.js
===================================================================
--- node_modules/es-toolkit/dist/string/pad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/pad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function pad(str, length, chars = ' ') {
+    return str.padStart(Math.floor((length - str.length) / 2) + str.length, chars).padEnd(length, chars);
+}
+
+exports.pad = pad;
Index: node_modules/es-toolkit/dist/string/pad.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/pad.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/pad.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function pad(str, length, chars = ' ') {
+    return str.padStart(Math.floor((length - str.length) / 2) + str.length, chars).padEnd(length, chars);
+}
+
+export { pad };
Index: node_modules/es-toolkit/dist/string/pascalCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/pascalCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/pascalCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to Pascal case.
+ *
+ * Pascal case is the naming convention in which each word is capitalized and concatenated without any separator characters.
+ *
+ * @param {string} str - The string that is to be changed to pascal case.
+ * @returns {string} - The converted string to Pascal case.
+ *
+ * @example
+ * const convertedStr1 = pascalCase('pascalCase') // returns 'PascalCase'
+ * const convertedStr2 = pascalCase('some whitespace') // returns 'SomeWhitespace'
+ * const convertedStr3 = pascalCase('hyphen-text') // returns 'HyphenText'
+ * const convertedStr4 = pascalCase('HTTPRequest') // returns 'HttpRequest'
+ */
+declare function pascalCase(str: string): string;
+
+export { pascalCase };
Index: node_modules/es-toolkit/dist/string/pascalCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/pascalCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/pascalCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to Pascal case.
+ *
+ * Pascal case is the naming convention in which each word is capitalized and concatenated without any separator characters.
+ *
+ * @param {string} str - The string that is to be changed to pascal case.
+ * @returns {string} - The converted string to Pascal case.
+ *
+ * @example
+ * const convertedStr1 = pascalCase('pascalCase') // returns 'PascalCase'
+ * const convertedStr2 = pascalCase('some whitespace') // returns 'SomeWhitespace'
+ * const convertedStr3 = pascalCase('hyphen-text') // returns 'HyphenText'
+ * const convertedStr4 = pascalCase('HTTPRequest') // returns 'HttpRequest'
+ */
+declare function pascalCase(str: string): string;
+
+export { pascalCase };
Index: node_modules/es-toolkit/dist/string/pascalCase.js
===================================================================
--- node_modules/es-toolkit/dist/string/pascalCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/pascalCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const capitalize = require('./capitalize.js');
+const words = require('./words.js');
+
+function pascalCase(str) {
+    const words$1 = words.words(str);
+    return words$1.map(word => capitalize.capitalize(word)).join('');
+}
+
+exports.pascalCase = pascalCase;
Index: node_modules/es-toolkit/dist/string/pascalCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/pascalCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/pascalCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { capitalize } from './capitalize.mjs';
+import { words } from './words.mjs';
+
+function pascalCase(str) {
+    const words$1 = words(str);
+    return words$1.map(word => capitalize(word)).join('');
+}
+
+export { pascalCase };
Index: node_modules/es-toolkit/dist/string/reverseString.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/reverseString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/reverseString.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Reverses a given string.
+ *
+ * This function takes a string as input and returns a new string that is the reverse of the input.
+ *
+ * @param {string} value - The string that is to be reversed.
+ * @returns {string} - The reversed string.
+ *
+ * @example
+ * const reversedStr1 = reverseString('hello') // returns 'olleh'
+ * const reversedStr2 = reverseString('PascalCase') // returns 'esaClacsaP'
+ * const reversedStr3 = reverseString('foo 😄 bar') // returns 'rab 😄 oof'
+ */
+declare function reverseString(value: string): string;
+
+export { reverseString };
Index: node_modules/es-toolkit/dist/string/reverseString.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/reverseString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/reverseString.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Reverses a given string.
+ *
+ * This function takes a string as input and returns a new string that is the reverse of the input.
+ *
+ * @param {string} value - The string that is to be reversed.
+ * @returns {string} - The reversed string.
+ *
+ * @example
+ * const reversedStr1 = reverseString('hello') // returns 'olleh'
+ * const reversedStr2 = reverseString('PascalCase') // returns 'esaClacsaP'
+ * const reversedStr3 = reverseString('foo 😄 bar') // returns 'rab 😄 oof'
+ */
+declare function reverseString(value: string): string;
+
+export { reverseString };
Index: node_modules/es-toolkit/dist/string/reverseString.js
===================================================================
--- node_modules/es-toolkit/dist/string/reverseString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/reverseString.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function reverseString(value) {
+    return [...value].reverse().join('');
+}
+
+exports.reverseString = reverseString;
Index: node_modules/es-toolkit/dist/string/reverseString.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/reverseString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/reverseString.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function reverseString(value) {
+    return [...value].reverse().join('');
+}
+
+export { reverseString };
Index: node_modules/es-toolkit/dist/string/snakeCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/snakeCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/snakeCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to snake case.
+ *
+ * Snake case is the naming convention in which each word is written in lowercase and separated by an underscore (_) character.
+ *
+ * @param {string} str - The string that is to be changed to snake case.
+ * @returns {string} - The converted string to snake case.
+ *
+ * @example
+ * const convertedStr1 = snakeCase('camelCase') // returns 'camel_case'
+ * const convertedStr2 = snakeCase('some whitespace') // returns 'some_whitespace'
+ * const convertedStr3 = snakeCase('hyphen-text') // returns 'hyphen_text'
+ * const convertedStr4 = snakeCase('HTTPRequest') // returns 'http_request'
+ */
+declare function snakeCase(str: string): string;
+
+export { snakeCase };
Index: node_modules/es-toolkit/dist/string/snakeCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/snakeCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/snakeCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to snake case.
+ *
+ * Snake case is the naming convention in which each word is written in lowercase and separated by an underscore (_) character.
+ *
+ * @param {string} str - The string that is to be changed to snake case.
+ * @returns {string} - The converted string to snake case.
+ *
+ * @example
+ * const convertedStr1 = snakeCase('camelCase') // returns 'camel_case'
+ * const convertedStr2 = snakeCase('some whitespace') // returns 'some_whitespace'
+ * const convertedStr3 = snakeCase('hyphen-text') // returns 'hyphen_text'
+ * const convertedStr4 = snakeCase('HTTPRequest') // returns 'http_request'
+ */
+declare function snakeCase(str: string): string;
+
+export { snakeCase };
Index: node_modules/es-toolkit/dist/string/snakeCase.js
===================================================================
--- node_modules/es-toolkit/dist/string/snakeCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/snakeCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const words = require('./words.js');
+
+function snakeCase(str) {
+    const words$1 = words.words(str);
+    return words$1.map(word => word.toLowerCase()).join('_');
+}
+
+exports.snakeCase = snakeCase;
Index: node_modules/es-toolkit/dist/string/snakeCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/snakeCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/snakeCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { words } from './words.mjs';
+
+function snakeCase(str) {
+    const words$1 = words(str);
+    return words$1.map(word => word.toLowerCase()).join('_');
+}
+
+export { snakeCase };
Index: node_modules/es-toolkit/dist/string/startCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/startCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/startCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the first character of each word in a string to uppercase and the remaining characters to lowercase.
+ *
+ * Start case is the naming convention in which each word is written with an initial capital letter.
+ * @param {string} str - The string to convert.
+ * @returns {string} The converted string.
+ *
+ * @example
+ * const result1 = startCase('hello world');  // result will be 'Hello World'
+ * const result2 = startCase('HELLO WORLD');  // result will be 'Hello World'
+ * const result3 = startCase('hello-world');  // result will be 'Hello World'
+ * const result4 = startCase('hello_world');  // result will be 'Hello World'
+ */
+declare function startCase(str: string): string;
+
+export { startCase };
Index: node_modules/es-toolkit/dist/string/startCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/startCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/startCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the first character of each word in a string to uppercase and the remaining characters to lowercase.
+ *
+ * Start case is the naming convention in which each word is written with an initial capital letter.
+ * @param {string} str - The string to convert.
+ * @returns {string} The converted string.
+ *
+ * @example
+ * const result1 = startCase('hello world');  // result will be 'Hello World'
+ * const result2 = startCase('HELLO WORLD');  // result will be 'Hello World'
+ * const result3 = startCase('hello-world');  // result will be 'Hello World'
+ * const result4 = startCase('hello_world');  // result will be 'Hello World'
+ */
+declare function startCase(str: string): string;
+
+export { startCase };
Index: node_modules/es-toolkit/dist/string/startCase.js
===================================================================
--- node_modules/es-toolkit/dist/string/startCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/startCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const words = require('./words.js');
+
+function startCase(str) {
+    const words$1 = words.words(str.trim());
+    let result = '';
+    for (let i = 0; i < words$1.length; i++) {
+        const word = words$1[i];
+        if (result) {
+            result += ' ';
+        }
+        result += word[0].toUpperCase() + word.slice(1).toLowerCase();
+    }
+    return result;
+}
+
+exports.startCase = startCase;
Index: node_modules/es-toolkit/dist/string/startCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/startCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/startCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { words } from './words.mjs';
+
+function startCase(str) {
+    const words$1 = words(str.trim());
+    let result = '';
+    for (let i = 0; i < words$1.length; i++) {
+        const word = words$1[i];
+        if (result) {
+            result += ' ';
+        }
+        result += word[0].toUpperCase() + word.slice(1).toLowerCase();
+    }
+    return result;
+}
+
+export { startCase };
Index: node_modules/es-toolkit/dist/string/trim.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/trim.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trim.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Removes leading and trailing whitespace or specified characters from a string.
+ *
+ * @param {string} str - The string from which characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the string. Can be a single character or an array of characters.
+ * @returns {string} - The resulting string after the specified characters have been removed.
+ *
+ * @example
+ * trim("  hello  "); // "hello"
+ * trim("--hello--", "-"); // "hello"
+ * trim("##hello##", ["#", "o"]); // "hell"
+ */
+declare function trim(str: string, chars?: string | string[]): string;
+
+export { trim };
Index: node_modules/es-toolkit/dist/string/trim.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/trim.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trim.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * Removes leading and trailing whitespace or specified characters from a string.
+ *
+ * @param {string} str - The string from which characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the string. Can be a single character or an array of characters.
+ * @returns {string} - The resulting string after the specified characters have been removed.
+ *
+ * @example
+ * trim("  hello  "); // "hello"
+ * trim("--hello--", "-"); // "hello"
+ * trim("##hello##", ["#", "o"]); // "hell"
+ */
+declare function trim(str: string, chars?: string | string[]): string;
+
+export { trim };
Index: node_modules/es-toolkit/dist/string/trim.js
===================================================================
--- node_modules/es-toolkit/dist/string/trim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const trimEnd = require('./trimEnd.js');
+const trimStart = require('./trimStart.js');
+
+function trim(str, chars) {
+    if (chars === undefined) {
+        return str.trim();
+    }
+    return trimStart.trimStart(trimEnd.trimEnd(str, chars), chars);
+}
+
+exports.trim = trim;
Index: node_modules/es-toolkit/dist/string/trim.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/trim.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trim.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { trimEnd } from './trimEnd.mjs';
+import { trimStart } from './trimStart.mjs';
+
+function trim(str, chars) {
+    if (chars === undefined) {
+        return str.trim();
+    }
+    return trimStart(trimEnd(str, chars), chars);
+}
+
+export { trim };
Index: node_modules/es-toolkit/dist/string/trimEnd.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/trimEnd.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trimEnd.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes trailing whitespace or specified characters from a string.
+ *
+ * If `chars` is a string, it should be a single character. To trim a string with multiple characters,
+ * provide an array instead.
+ *
+ * @param {string} str - The string from which trailing characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the end of the string.
+ * @returns {string} - The resulting string after the specified trailing character has been removed.
+ *
+ * @example
+ * const trimmedStr1 = trimEnd('hello---', '-') // returns 'hello'
+ * const trimmedStr2 = trimEnd('123000', '0') // returns '123'
+ * const trimmedStr3 = trimEnd('abcabcabc', 'c') // returns 'abcabcab'
+ * const trimmedStr4 = trimEnd('trimmedxxx', 'x') // returns 'trimmed'
+ */
+declare function trimEnd(str: string, chars?: string | string[]): string;
+
+export { trimEnd };
Index: node_modules/es-toolkit/dist/string/trimEnd.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/trimEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trimEnd.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes trailing whitespace or specified characters from a string.
+ *
+ * If `chars` is a string, it should be a single character. To trim a string with multiple characters,
+ * provide an array instead.
+ *
+ * @param {string} str - The string from which trailing characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the end of the string.
+ * @returns {string} - The resulting string after the specified trailing character has been removed.
+ *
+ * @example
+ * const trimmedStr1 = trimEnd('hello---', '-') // returns 'hello'
+ * const trimmedStr2 = trimEnd('123000', '0') // returns '123'
+ * const trimmedStr3 = trimEnd('abcabcabc', 'c') // returns 'abcabcab'
+ * const trimmedStr4 = trimEnd('trimmedxxx', 'x') // returns 'trimmed'
+ */
+declare function trimEnd(str: string, chars?: string | string[]): string;
+
+export { trimEnd };
Index: node_modules/es-toolkit/dist/string/trimEnd.js
===================================================================
--- node_modules/es-toolkit/dist/string/trimEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trimEnd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function trimEnd(str, chars) {
+    if (chars === undefined) {
+        return str.trimEnd();
+    }
+    let endIndex = str.length;
+    switch (typeof chars) {
+        case 'string': {
+            if (chars.length !== 1) {
+                throw new Error(`The 'chars' parameter should be a single character string.`);
+            }
+            while (endIndex > 0 && str[endIndex - 1] === chars) {
+                endIndex--;
+            }
+            break;
+        }
+        case 'object': {
+            while (endIndex > 0 && chars.includes(str[endIndex - 1])) {
+                endIndex--;
+            }
+        }
+    }
+    return str.substring(0, endIndex);
+}
+
+exports.trimEnd = trimEnd;
Index: node_modules/es-toolkit/dist/string/trimEnd.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/trimEnd.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trimEnd.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+function trimEnd(str, chars) {
+    if (chars === undefined) {
+        return str.trimEnd();
+    }
+    let endIndex = str.length;
+    switch (typeof chars) {
+        case 'string': {
+            if (chars.length !== 1) {
+                throw new Error(`The 'chars' parameter should be a single character string.`);
+            }
+            while (endIndex > 0 && str[endIndex - 1] === chars) {
+                endIndex--;
+            }
+            break;
+        }
+        case 'object': {
+            while (endIndex > 0 && chars.includes(str[endIndex - 1])) {
+                endIndex--;
+            }
+        }
+    }
+    return str.substring(0, endIndex);
+}
+
+export { trimEnd };
Index: node_modules/es-toolkit/dist/string/trimStart.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/trimStart.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trimStart.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes leading whitespace or specified characters from a string.
+ *
+ * If `chars` is a string, it should be a single character. To trim a string with multiple characters,
+ * provide an array instead.
+ *
+ * @param {string} str - The string from which leading characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the start of the string.
+ * @returns {string} - The resulting string after the specified leading character has been removed.
+ *
+ * @example
+ * const trimmedStr1 = trimStart('---hello', '-') // returns 'hello'
+ * const trimmedStr2 = trimStart('000123', '0') // returns '123'
+ * const trimmedStr3 = trimStart('abcabcabc', 'a') // returns 'bcabcabc'
+ * const trimmedStr4 = trimStart('xxxtrimmed', 'x') // returns 'trimmed'
+ */
+declare function trimStart(str: string, chars?: string | string[]): string;
+
+export { trimStart };
Index: node_modules/es-toolkit/dist/string/trimStart.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/trimStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trimStart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Removes leading whitespace or specified characters from a string.
+ *
+ * If `chars` is a string, it should be a single character. To trim a string with multiple characters,
+ * provide an array instead.
+ *
+ * @param {string} str - The string from which leading characters will be trimmed.
+ * @param {string | string[]} chars - The character(s) to remove from the start of the string.
+ * @returns {string} - The resulting string after the specified leading character has been removed.
+ *
+ * @example
+ * const trimmedStr1 = trimStart('---hello', '-') // returns 'hello'
+ * const trimmedStr2 = trimStart('000123', '0') // returns '123'
+ * const trimmedStr3 = trimStart('abcabcabc', 'a') // returns 'bcabcabc'
+ * const trimmedStr4 = trimStart('xxxtrimmed', 'x') // returns 'trimmed'
+ */
+declare function trimStart(str: string, chars?: string | string[]): string;
+
+export { trimStart };
Index: node_modules/es-toolkit/dist/string/trimStart.js
===================================================================
--- node_modules/es-toolkit/dist/string/trimStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trimStart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function trimStart(str, chars) {
+    if (chars === undefined) {
+        return str.trimStart();
+    }
+    let startIndex = 0;
+    switch (typeof chars) {
+        case 'string': {
+            while (startIndex < str.length && str[startIndex] === chars) {
+                startIndex++;
+            }
+            break;
+        }
+        case 'object': {
+            while (startIndex < str.length && chars.includes(str[startIndex])) {
+                startIndex++;
+            }
+        }
+    }
+    return str.substring(startIndex);
+}
+
+exports.trimStart = trimStart;
Index: node_modules/es-toolkit/dist/string/trimStart.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/trimStart.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/trimStart.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+function trimStart(str, chars) {
+    if (chars === undefined) {
+        return str.trimStart();
+    }
+    let startIndex = 0;
+    switch (typeof chars) {
+        case 'string': {
+            while (startIndex < str.length && str[startIndex] === chars) {
+                startIndex++;
+            }
+            break;
+        }
+        case 'object': {
+            while (startIndex < str.length && chars.includes(str[startIndex])) {
+                startIndex++;
+            }
+        }
+    }
+    return str.substring(startIndex);
+}
+
+export { trimStart };
Index: node_modules/es-toolkit/dist/string/unescape.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/unescape.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/unescape.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the HTML entities `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `str` to their corresponding characters.
+ * It is the inverse of `escape`.
+ *
+ * @param {string} str The string to unescape.
+ * @returns {string} Returns the unescaped string.
+ *
+ * @example
+ * unescape('This is a &lt;div&gt; element.'); // returns 'This is a <div> element.'
+ * unescape('This is a &quot;quote&quot;'); // returns 'This is a "quote"'
+ * unescape('This is a &#39;quote&#39;'); // returns 'This is a 'quote''
+ * unescape('This is a &amp; symbol'); // returns 'This is a & symbol'
+ */
+declare function unescape(str: string): string;
+
+export { unescape };
Index: node_modules/es-toolkit/dist/string/unescape.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/unescape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/unescape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * Converts the HTML entities `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `str` to their corresponding characters.
+ * It is the inverse of `escape`.
+ *
+ * @param {string} str The string to unescape.
+ * @returns {string} Returns the unescaped string.
+ *
+ * @example
+ * unescape('This is a &lt;div&gt; element.'); // returns 'This is a <div> element.'
+ * unescape('This is a &quot;quote&quot;'); // returns 'This is a "quote"'
+ * unescape('This is a &#39;quote&#39;'); // returns 'This is a 'quote''
+ * unescape('This is a &amp; symbol'); // returns 'This is a & symbol'
+ */
+declare function unescape(str: string): string;
+
+export { unescape };
Index: node_modules/es-toolkit/dist/string/unescape.js
===================================================================
--- node_modules/es-toolkit/dist/string/unescape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/unescape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const htmlUnescapes = {
+    '&amp;': '&',
+    '&lt;': '<',
+    '&gt;': '>',
+    '&quot;': '"',
+    '&#39;': "'",
+};
+function unescape(str) {
+    return str.replace(/&(?:amp|lt|gt|quot|#(0+)?39);/g, match => htmlUnescapes[match] || "'");
+}
+
+exports.unescape = unescape;
Index: node_modules/es-toolkit/dist/string/unescape.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/unescape.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/unescape.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+const htmlUnescapes = {
+    '&amp;': '&',
+    '&lt;': '<',
+    '&gt;': '>',
+    '&quot;': '"',
+    '&#39;': "'",
+};
+function unescape(str) {
+    return str.replace(/&(?:amp|lt|gt|quot|#(0+)?39);/g, match => htmlUnescapes[match] || "'");
+}
+
+export { unescape };
Index: node_modules/es-toolkit/dist/string/upperCase.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/upperCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/upperCase.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to upper case.
+ *
+ * Upper case is the naming convention in which each word is written in uppercase and separated by an space ( ) character.
+ *
+ * @param {string} str - The string that is to be changed to upper case.
+ * @returns {string} - The converted string to upper case.
+ *
+ * @example
+ * const convertedStr1 = upperCase('camelCase') // returns 'CAMEL CASE'
+ * const convertedStr2 = upperCase('some whitespace') // returns 'SOME WHITESPACE'
+ * const convertedStr3 = upperCase('hyphen-text') // returns 'HYPHEN TEXT'
+ * const convertedStr4 = upperCase('HTTPRequest') // returns 'HTTP REQUEST'
+ */
+declare function upperCase(str: string): string;
+
+export { upperCase };
Index: node_modules/es-toolkit/dist/string/upperCase.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/upperCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/upperCase.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * Converts a string to upper case.
+ *
+ * Upper case is the naming convention in which each word is written in uppercase and separated by an space ( ) character.
+ *
+ * @param {string} str - The string that is to be changed to upper case.
+ * @returns {string} - The converted string to upper case.
+ *
+ * @example
+ * const convertedStr1 = upperCase('camelCase') // returns 'CAMEL CASE'
+ * const convertedStr2 = upperCase('some whitespace') // returns 'SOME WHITESPACE'
+ * const convertedStr3 = upperCase('hyphen-text') // returns 'HYPHEN TEXT'
+ * const convertedStr4 = upperCase('HTTPRequest') // returns 'HTTP REQUEST'
+ */
+declare function upperCase(str: string): string;
+
+export { upperCase };
Index: node_modules/es-toolkit/dist/string/upperCase.js
===================================================================
--- node_modules/es-toolkit/dist/string/upperCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/upperCase.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const words = require('./words.js');
+
+function upperCase(str) {
+    const words$1 = words.words(str);
+    let result = '';
+    for (let i = 0; i < words$1.length; i++) {
+        result += words$1[i].toUpperCase();
+        if (i < words$1.length - 1) {
+            result += ' ';
+        }
+    }
+    return result;
+}
+
+exports.upperCase = upperCase;
Index: node_modules/es-toolkit/dist/string/upperCase.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/upperCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/upperCase.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { words } from './words.mjs';
+
+function upperCase(str) {
+    const words$1 = words(str);
+    let result = '';
+    for (let i = 0; i < words$1.length; i++) {
+        result += words$1[i].toUpperCase();
+        if (i < words$1.length - 1) {
+            result += ' ';
+        }
+    }
+    return result;
+}
+
+export { upperCase };
Index: node_modules/es-toolkit/dist/string/upperFirst.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/upperFirst.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/upperFirst.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to upper case.
+ *
+ * @param {string} str - The string that is to be changed
+ * @returns {string} - The converted string.
+ *
+ * @example
+ * const convertedStr1 = upperFirst('fred') // returns 'Fred'
+ * const convertedStr2 = upperFirst('Fred') // returns 'Fred'
+ * const convertedStr3 = upperFirst('FRED') // returns 'FRED'
+ */
+declare function upperFirst(str: string): string;
+
+export { upperFirst };
Index: node_modules/es-toolkit/dist/string/upperFirst.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/upperFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/upperFirst.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Converts the first character of string to upper case.
+ *
+ * @param {string} str - The string that is to be changed
+ * @returns {string} - The converted string.
+ *
+ * @example
+ * const convertedStr1 = upperFirst('fred') // returns 'Fred'
+ * const convertedStr2 = upperFirst('Fred') // returns 'Fred'
+ * const convertedStr3 = upperFirst('FRED') // returns 'FRED'
+ */
+declare function upperFirst(str: string): string;
+
+export { upperFirst };
Index: node_modules/es-toolkit/dist/string/upperFirst.js
===================================================================
--- node_modules/es-toolkit/dist/string/upperFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/upperFirst.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function upperFirst(str) {
+    return str.substring(0, 1).toUpperCase() + str.substring(1);
+}
+
+exports.upperFirst = upperFirst;
Index: node_modules/es-toolkit/dist/string/upperFirst.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/upperFirst.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/upperFirst.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+function upperFirst(str) {
+    return str.substring(0, 1).toUpperCase() + str.substring(1);
+}
+
+export { upperFirst };
Index: node_modules/es-toolkit/dist/string/words.d.mts
===================================================================
--- node_modules/es-toolkit/dist/string/words.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/words.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Splits `string` into an array of its words, treating spaces and punctuation marks as separators.
+ *
+ * @param {string} str The string to inspect.
+ * @param {RegExp | string} [pattern] The pattern to match words.
+ * @returns {string[]} Returns the words of `string`.
+ *
+ * @example
+ * words('fred, barney, & pebbles');
+ * // => ['fred', 'barney', 'pebbles']
+ *
+ * words('camelCaseHTTPRequest🚀');
+ * // => ['camel', 'Case', 'HTTP', 'Request', '🚀']
+ *
+ * words('Lunedì 18 Set')
+ * // => ['Lunedì', '18', 'Set']
+ */
+declare function words(str: string): string[];
+
+export { words };
Index: node_modules/es-toolkit/dist/string/words.d.ts
===================================================================
--- node_modules/es-toolkit/dist/string/words.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/words.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/**
+ * Splits `string` into an array of its words, treating spaces and punctuation marks as separators.
+ *
+ * @param {string} str The string to inspect.
+ * @param {RegExp | string} [pattern] The pattern to match words.
+ * @returns {string[]} Returns the words of `string`.
+ *
+ * @example
+ * words('fred, barney, & pebbles');
+ * // => ['fred', 'barney', 'pebbles']
+ *
+ * words('camelCaseHTTPRequest🚀');
+ * // => ['camel', 'Case', 'HTTP', 'Request', '🚀']
+ *
+ * words('Lunedì 18 Set')
+ * // => ['Lunedì', '18', 'Set']
+ */
+declare function words(str: string): string[];
+
+export { words };
Index: node_modules/es-toolkit/dist/string/words.js
===================================================================
--- node_modules/es-toolkit/dist/string/words.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/words.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const CASE_SPLIT_PATTERN = /\p{Lu}?\p{Ll}+|[0-9]+|\p{Lu}+(?!\p{Ll})|\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{L}+/gu;
+function words(str) {
+    return Array.from(str.match(CASE_SPLIT_PATTERN) ?? []);
+}
+
+exports.CASE_SPLIT_PATTERN = CASE_SPLIT_PATTERN;
+exports.words = words;
Index: node_modules/es-toolkit/dist/string/words.mjs
===================================================================
--- node_modules/es-toolkit/dist/string/words.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/string/words.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+const CASE_SPLIT_PATTERN = /\p{Lu}?\p{Ll}+|[0-9]+|\p{Lu}+(?!\p{Ll})|\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{L}+/gu;
+function words(str) {
+    return Array.from(str.match(CASE_SPLIT_PATTERN) ?? []);
+}
+
+export { CASE_SPLIT_PATTERN, words };
Index: node_modules/es-toolkit/dist/util/attempt.d.mts
===================================================================
--- node_modules/es-toolkit/dist/util/attempt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/attempt.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+/**
+ * Attempt to execute a function and return the result or error.
+ * Returns a tuple where:
+ * - On success: [null, Result] - First element is null, second is the result
+ * - On error: [Error, null] - First element is the caught error, second is null
+ *
+ * @template {unknown} T - The type of the result of the function.
+ * @template {unknown} E - The type of the error that can be thrown by the function.
+ * @param {() => T} func - The function to execute.
+ * @returns {[null, T] | [E, null]} A tuple containing either [null, result] or [error, null].
+ *
+ * @example
+ * // Successful execution
+ * const [error, result] = attempt(() => 42);
+ * // [null, 42]
+ *
+ * // Failed execution
+ * const [error, result] = attempt(() => {
+ *   throw new Error('Something went wrong');
+ * });
+ * // [Error, null]
+ *
+ * // With type parameter
+ * const [error, names] = attempt<string[]>(() => ['Alice', 'Bob']);
+ * // [null, ['Alice', 'Bob']]
+ *
+ * @note
+ * Important: This function is not suitable for async functions (functions that return a `Promise`).
+ * When passing an async function, it will return `[null, Promise<Result>]`, but won't catch any
+ * errors if the Promise is rejected later.
+ *
+ * For handling async functions, use the `attemptAsync` function instead:
+ * ```
+ * const [error, data] = await attemptAsync(async () => {
+ *   const response = await fetch('https://api.example.com/data');
+ *   return response.json();
+ * });
+ * ```
+ */
+declare function attempt<T, E>(func: () => T): [null, T] | [E, null];
+
+export { attempt };
Index: node_modules/es-toolkit/dist/util/attempt.d.ts
===================================================================
--- node_modules/es-toolkit/dist/util/attempt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/attempt.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+/**
+ * Attempt to execute a function and return the result or error.
+ * Returns a tuple where:
+ * - On success: [null, Result] - First element is null, second is the result
+ * - On error: [Error, null] - First element is the caught error, second is null
+ *
+ * @template {unknown} T - The type of the result of the function.
+ * @template {unknown} E - The type of the error that can be thrown by the function.
+ * @param {() => T} func - The function to execute.
+ * @returns {[null, T] | [E, null]} A tuple containing either [null, result] or [error, null].
+ *
+ * @example
+ * // Successful execution
+ * const [error, result] = attempt(() => 42);
+ * // [null, 42]
+ *
+ * // Failed execution
+ * const [error, result] = attempt(() => {
+ *   throw new Error('Something went wrong');
+ * });
+ * // [Error, null]
+ *
+ * // With type parameter
+ * const [error, names] = attempt<string[]>(() => ['Alice', 'Bob']);
+ * // [null, ['Alice', 'Bob']]
+ *
+ * @note
+ * Important: This function is not suitable for async functions (functions that return a `Promise`).
+ * When passing an async function, it will return `[null, Promise<Result>]`, but won't catch any
+ * errors if the Promise is rejected later.
+ *
+ * For handling async functions, use the `attemptAsync` function instead:
+ * ```
+ * const [error, data] = await attemptAsync(async () => {
+ *   const response = await fetch('https://api.example.com/data');
+ *   return response.json();
+ * });
+ * ```
+ */
+declare function attempt<T, E>(func: () => T): [null, T] | [E, null];
+
+export { attempt };
Index: node_modules/es-toolkit/dist/util/attempt.js
===================================================================
--- node_modules/es-toolkit/dist/util/attempt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/attempt.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function attempt(func) {
+    try {
+        return [null, func()];
+    }
+    catch (error) {
+        return [error, null];
+    }
+}
+
+exports.attempt = attempt;
Index: node_modules/es-toolkit/dist/util/attempt.mjs
===================================================================
--- node_modules/es-toolkit/dist/util/attempt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/attempt.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+function attempt(func) {
+    try {
+        return [null, func()];
+    }
+    catch (error) {
+        return [error, null];
+    }
+}
+
+export { attempt };
Index: node_modules/es-toolkit/dist/util/attemptAsync.d.mts
===================================================================
--- node_modules/es-toolkit/dist/util/attemptAsync.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/attemptAsync.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Attempt to execute an async function and return the result or error.
+ * Returns a Promise that resolves to a tuple where:
+ * - On success: [null, Result] - First element is null, second is the result
+ * - On error: [Error, null] - First element is the caught error, second is null
+ *
+ * @template {unknown} T - The type of the result of the async function.
+ * @template {unknown} E - The type of the error that can be thrown by the async function.
+ * @param {() => Promise<T>} func - The async function to execute.
+ * @returns {Promise<[null, T] | [E, null]>} A Promise that resolves to a tuple containing either [null, result] or [error, null].
+ *
+ * @example
+ * // Successful execution
+ * const [error, data] = await attemptAsync(async () => {
+ *   const response = await fetch('https://api.example.com/data');
+ *   return response.json();
+ * });
+ * // If successful: [null, { ... data ... }]
+ *
+ * // Failed execution
+ * const [error, data] = await attemptAsync(async () => {
+ *   throw new Error('Network error');
+ * });
+ * // [Error, null]
+ *
+ * // With type parameter
+ * const [error, users] = await attemptAsync<User[]>(async () => {
+ *   const response = await fetch('https://api.example.com/users');
+ *   return response.json();
+ * });
+ * // users is typed as User[]
+ */
+declare function attemptAsync<T, E>(func: () => Promise<T>): Promise<[null, T] | [E, null]>;
+
+export { attemptAsync };
Index: node_modules/es-toolkit/dist/util/attemptAsync.d.ts
===================================================================
--- node_modules/es-toolkit/dist/util/attemptAsync.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/attemptAsync.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+/**
+ * Attempt to execute an async function and return the result or error.
+ * Returns a Promise that resolves to a tuple where:
+ * - On success: [null, Result] - First element is null, second is the result
+ * - On error: [Error, null] - First element is the caught error, second is null
+ *
+ * @template {unknown} T - The type of the result of the async function.
+ * @template {unknown} E - The type of the error that can be thrown by the async function.
+ * @param {() => Promise<T>} func - The async function to execute.
+ * @returns {Promise<[null, T] | [E, null]>} A Promise that resolves to a tuple containing either [null, result] or [error, null].
+ *
+ * @example
+ * // Successful execution
+ * const [error, data] = await attemptAsync(async () => {
+ *   const response = await fetch('https://api.example.com/data');
+ *   return response.json();
+ * });
+ * // If successful: [null, { ... data ... }]
+ *
+ * // Failed execution
+ * const [error, data] = await attemptAsync(async () => {
+ *   throw new Error('Network error');
+ * });
+ * // [Error, null]
+ *
+ * // With type parameter
+ * const [error, users] = await attemptAsync<User[]>(async () => {
+ *   const response = await fetch('https://api.example.com/users');
+ *   return response.json();
+ * });
+ * // users is typed as User[]
+ */
+declare function attemptAsync<T, E>(func: () => Promise<T>): Promise<[null, T] | [E, null]>;
+
+export { attemptAsync };
Index: node_modules/es-toolkit/dist/util/attemptAsync.js
===================================================================
--- node_modules/es-toolkit/dist/util/attemptAsync.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/attemptAsync.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+async function attemptAsync(func) {
+    try {
+        const result = await func();
+        return [null, result];
+    }
+    catch (error) {
+        return [error, null];
+    }
+}
+
+exports.attemptAsync = attemptAsync;
Index: node_modules/es-toolkit/dist/util/attemptAsync.mjs
===================================================================
--- node_modules/es-toolkit/dist/util/attemptAsync.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/attemptAsync.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+async function attemptAsync(func) {
+    try {
+        const result = await func();
+        return [null, result];
+    }
+    catch (error) {
+        return [error, null];
+    }
+}
+
+export { attemptAsync };
Index: node_modules/es-toolkit/dist/util/index.d.mts
===================================================================
--- node_modules/es-toolkit/dist/util/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/index.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export { attempt } from './attempt.mjs';
+export { attemptAsync } from './attemptAsync.mjs';
+export { invariant as assert, invariant } from './invariant.mjs';
Index: node_modules/es-toolkit/dist/util/index.d.ts
===================================================================
--- node_modules/es-toolkit/dist/util/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export { attempt } from './attempt.js';
+export { attemptAsync } from './attemptAsync.js';
+export { invariant as assert, invariant } from './invariant.js';
Index: node_modules/es-toolkit/dist/util/index.js
===================================================================
--- node_modules/es-toolkit/dist/util/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+const attempt = require('./attempt.js');
+const attemptAsync = require('./attemptAsync.js');
+const invariant = require('./invariant.js');
+
+
+
+exports.attempt = attempt.attempt;
+exports.attemptAsync = attemptAsync.attemptAsync;
+exports.assert = invariant.invariant;
+exports.invariant = invariant.invariant;
Index: node_modules/es-toolkit/dist/util/index.mjs
===================================================================
--- node_modules/es-toolkit/dist/util/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export { attempt } from './attempt.mjs';
+export { attemptAsync } from './attemptAsync.mjs';
+export { invariant as assert, invariant } from './invariant.mjs';
Index: node_modules/es-toolkit/dist/util/invariant.d.mts
===================================================================
--- node_modules/es-toolkit/dist/util/invariant.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/invariant.d.mts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+/**
+ * Asserts that a given condition is true. If the condition is false, an error is thrown with the provided message.
+ *
+ * @param {unknown} condition - The condition to evaluate.
+ * @param {string} message - The error message to throw if the condition is false.
+ * @returns {void} Returns void if the condition is true.
+ * @throws {Error} Throws an error if the condition is false.
+ *
+ * @example
+ * // This call will succeed without any errors
+ * invariant(true, 'This should not throw');
+ *
+ * // This call will fail and throw an error with the message 'This should throw'
+ * invariant(false, 'This should throw');
+ */
+declare function invariant(condition: unknown, message: string): asserts condition;
+/**
+ * Asserts that a given condition is true. If the condition is false, an error is thrown with the provided error.
+ *
+ * @param {unknown} condition - The condition to evaluate.
+ * @param {Error} error - The error to throw if the condition is false.
+ * @returns {void} Returns void if the condition is true.
+ * @throws {Error} Throws an error if the condition is false.
+ *
+ * @example
+ * // This call will succeed without any errors
+ * invariant(true, new Error('This should not throw'));
+ *
+ * class CustomError extends Error {
+ *   constructor(message: string) {
+ *     super(message);
+ *   }
+ * }
+ *
+ * // This call will fail and throw an error with the message 'This should throw'
+ * invariant(false, new CustomError('This should throw'));
+ */
+declare function invariant(condition: unknown, error: Error): asserts condition;
+
+export { invariant };
Index: node_modules/es-toolkit/dist/util/invariant.d.ts
===================================================================
--- node_modules/es-toolkit/dist/util/invariant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/invariant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+/**
+ * Asserts that a given condition is true. If the condition is false, an error is thrown with the provided message.
+ *
+ * @param {unknown} condition - The condition to evaluate.
+ * @param {string} message - The error message to throw if the condition is false.
+ * @returns {void} Returns void if the condition is true.
+ * @throws {Error} Throws an error if the condition is false.
+ *
+ * @example
+ * // This call will succeed without any errors
+ * invariant(true, 'This should not throw');
+ *
+ * // This call will fail and throw an error with the message 'This should throw'
+ * invariant(false, 'This should throw');
+ */
+declare function invariant(condition: unknown, message: string): asserts condition;
+/**
+ * Asserts that a given condition is true. If the condition is false, an error is thrown with the provided error.
+ *
+ * @param {unknown} condition - The condition to evaluate.
+ * @param {Error} error - The error to throw if the condition is false.
+ * @returns {void} Returns void if the condition is true.
+ * @throws {Error} Throws an error if the condition is false.
+ *
+ * @example
+ * // This call will succeed without any errors
+ * invariant(true, new Error('This should not throw'));
+ *
+ * class CustomError extends Error {
+ *   constructor(message: string) {
+ *     super(message);
+ *   }
+ * }
+ *
+ * // This call will fail and throw an error with the message 'This should throw'
+ * invariant(false, new CustomError('This should throw'));
+ */
+declare function invariant(condition: unknown, error: Error): asserts condition;
+
+export { invariant };
Index: node_modules/es-toolkit/dist/util/invariant.js
===================================================================
--- node_modules/es-toolkit/dist/util/invariant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/invariant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+
+function invariant(condition, message) {
+    if (condition) {
+        return;
+    }
+    if (typeof message === 'string') {
+        throw new Error(message);
+    }
+    throw message;
+}
+
+exports.invariant = invariant;
Index: node_modules/es-toolkit/dist/util/invariant.mjs
===================================================================
--- node_modules/es-toolkit/dist/util/invariant.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/dist/util/invariant.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+function invariant(condition, message) {
+    if (condition) {
+        return;
+    }
+    if (typeof message === 'string') {
+        throw new Error(message);
+    }
+    throw message;
+}
+
+export { invariant };
Index: node_modules/es-toolkit/error.d.ts
===================================================================
--- node_modules/es-toolkit/error.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/error.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/error';
Index: node_modules/es-toolkit/error.js
===================================================================
--- node_modules/es-toolkit/error.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/error.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/error');
Index: node_modules/es-toolkit/function.d.ts
===================================================================
--- node_modules/es-toolkit/function.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/function.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/function';
Index: node_modules/es-toolkit/function.js
===================================================================
--- node_modules/es-toolkit/function.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/function.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/function');
Index: node_modules/es-toolkit/math.d.ts
===================================================================
--- node_modules/es-toolkit/math.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/math.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/math';
Index: node_modules/es-toolkit/math.js
===================================================================
--- node_modules/es-toolkit/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/math');
Index: node_modules/es-toolkit/object.d.ts
===================================================================
--- node_modules/es-toolkit/object.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/object.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/object';
Index: node_modules/es-toolkit/object.js
===================================================================
--- node_modules/es-toolkit/object.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/object.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/object');
Index: node_modules/es-toolkit/package.json
===================================================================
--- node_modules/es-toolkit/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,340 @@
+{
+  "name": "es-toolkit",
+  "description": "A state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations.",
+  "version": "1.39.10",
+  "homepage": "https://es-toolkit.dev",
+  "bugs": "https://github.com/toss/es-toolkit/issues",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/toss/es-toolkit.git"
+  },
+  "license": "MIT",
+  "workspaces": [
+    "docs",
+    "benchmarks"
+  ],
+  "packageManager": "yarn@4.9.1",
+  "react-native": "./dist/index.js",
+  "exports": {
+    ".": {
+      "import": {
+        "types": "./dist/index.d.mts",
+        "default": "./dist/index.mjs"
+      },
+      "require": {
+        "types": "./dist/index.d.ts",
+        "default": "./dist/index.js"
+      }
+    },
+    "./array": {
+      "import": {
+        "types": "./dist/array/index.d.mts",
+        "default": "./dist/array/index.mjs"
+      },
+      "require": {
+        "types": "./dist/array/index.d.ts",
+        "default": "./dist/array/index.js"
+      }
+    },
+    "./compat": {
+      "import": {
+        "types": "./dist/compat/index.d.mts",
+        "default": "./dist/compat/index.mjs"
+      },
+      "require": {
+        "types": "./dist/compat/index.d.ts",
+        "default": "./dist/compat/index.js"
+      }
+    },
+    "./compat/*": {
+      "default": {
+        "types": "./compat/*.d.ts",
+        "default": "./compat/*.js"
+      }
+    },
+    "./error": {
+      "import": {
+        "types": "./dist/error/index.d.mts",
+        "default": "./dist/error/index.mjs"
+      },
+      "require": {
+        "types": "./dist/error/index.d.ts",
+        "default": "./dist/error/index.js"
+      }
+    },
+    "./function": {
+      "import": {
+        "types": "./dist/function/index.d.mts",
+        "default": "./dist/function/index.mjs"
+      },
+      "require": {
+        "types": "./dist/function/index.d.ts",
+        "default": "./dist/function/index.js"
+      }
+    },
+    "./math": {
+      "import": {
+        "types": "./dist/math/index.d.mts",
+        "default": "./dist/math/index.mjs"
+      },
+      "require": {
+        "types": "./dist/math/index.d.ts",
+        "default": "./dist/math/index.js"
+      }
+    },
+    "./object": {
+      "import": {
+        "types": "./dist/object/index.d.mts",
+        "default": "./dist/object/index.mjs"
+      },
+      "require": {
+        "types": "./dist/object/index.d.ts",
+        "default": "./dist/object/index.js"
+      }
+    },
+    "./predicate": {
+      "import": {
+        "types": "./dist/predicate/index.d.mts",
+        "default": "./dist/predicate/index.mjs"
+      },
+      "require": {
+        "types": "./dist/predicate/index.d.ts",
+        "default": "./dist/predicate/index.js"
+      }
+    },
+    "./promise": {
+      "import": {
+        "types": "./dist/promise/index.d.mts",
+        "default": "./dist/promise/index.mjs"
+      },
+      "require": {
+        "types": "./dist/promise/index.d.ts",
+        "default": "./dist/promise/index.js"
+      }
+    },
+    "./string": {
+      "import": {
+        "types": "./dist/string/index.d.mts",
+        "default": "./dist/string/index.mjs"
+      },
+      "require": {
+        "types": "./dist/string/index.d.ts",
+        "default": "./dist/string/index.js"
+      }
+    },
+    "./util": {
+      "import": {
+        "types": "./dist/util/index.d.mts",
+        "default": "./dist/util/index.mjs"
+      },
+      "require": {
+        "types": "./dist/util/index.d.ts",
+        "default": "./dist/util/index.js"
+      }
+    },
+    "./package.json": "./package.json"
+  },
+  "files": [
+    "dist",
+    "compat",
+    "*.d.ts",
+    "array.js",
+    "compat.js",
+    "error.js",
+    "function.js",
+    "math.js",
+    "object.js",
+    "predicate.js",
+    "promise.js",
+    "string.js",
+    "util.js"
+  ],
+  "publishConfig": {
+    "access": "public",
+    "main": "./dist/index.js",
+    "module": "./dist/index.mjs",
+    "types": "./dist/index.d.ts",
+    "browser": "./dist/browser.global.js",
+    "exports": {
+      ".": {
+        "import": {
+          "types": "./dist/index.d.mts",
+          "default": "./dist/index.mjs"
+        },
+        "require": {
+          "types": "./dist/index.d.ts",
+          "default": "./dist/index.js"
+        }
+      },
+      "./array": {
+        "import": {
+          "types": "./dist/array/index.d.mts",
+          "default": "./dist/array/index.mjs"
+        },
+        "require": {
+          "types": "./dist/array/index.d.ts",
+          "default": "./dist/array/index.js"
+        }
+      },
+      "./compat": {
+        "import": {
+          "types": "./dist/compat/index.d.mts",
+          "default": "./dist/compat/index.mjs"
+        },
+        "require": {
+          "types": "./dist/compat/index.d.ts",
+          "default": "./dist/compat/index.js"
+        }
+      },
+      "./compat/*": {
+        "default": {
+          "types": "./compat/*.d.ts",
+          "default": "./compat/*.js"
+        }
+      },
+      "./error": {
+        "import": {
+          "types": "./dist/error/index.d.mts",
+          "default": "./dist/error/index.mjs"
+        },
+        "require": {
+          "types": "./dist/error/index.d.ts",
+          "default": "./dist/error/index.js"
+        }
+      },
+      "./function": {
+        "import": {
+          "types": "./dist/function/index.d.mts",
+          "default": "./dist/function/index.mjs"
+        },
+        "require": {
+          "types": "./dist/function/index.d.ts",
+          "default": "./dist/function/index.js"
+        }
+      },
+      "./math": {
+        "import": {
+          "types": "./dist/math/index.d.mts",
+          "default": "./dist/math/index.mjs"
+        },
+        "require": {
+          "types": "./dist/math/index.d.ts",
+          "default": "./dist/math/index.js"
+        }
+      },
+      "./object": {
+        "import": {
+          "types": "./dist/object/index.d.mts",
+          "default": "./dist/object/index.mjs"
+        },
+        "require": {
+          "types": "./dist/object/index.d.ts",
+          "default": "./dist/object/index.js"
+        }
+      },
+      "./predicate": {
+        "import": {
+          "types": "./dist/predicate/index.d.mts",
+          "default": "./dist/predicate/index.mjs"
+        },
+        "require": {
+          "types": "./dist/predicate/index.d.ts",
+          "default": "./dist/predicate/index.js"
+        }
+      },
+      "./promise": {
+        "import": {
+          "types": "./dist/promise/index.d.mts",
+          "default": "./dist/promise/index.mjs"
+        },
+        "require": {
+          "types": "./dist/promise/index.d.ts",
+          "default": "./dist/promise/index.js"
+        }
+      },
+      "./string": {
+        "import": {
+          "types": "./dist/string/index.d.mts",
+          "default": "./dist/string/index.mjs"
+        },
+        "require": {
+          "types": "./dist/string/index.d.ts",
+          "default": "./dist/string/index.js"
+        }
+      },
+      "./util": {
+        "import": {
+          "types": "./dist/util/index.d.mts",
+          "default": "./dist/util/index.mjs"
+        },
+        "require": {
+          "types": "./dist/util/index.d.ts",
+          "default": "./dist/util/index.js"
+        }
+      },
+      "./package.json": "./package.json"
+    }
+  },
+  "devDependencies": {
+    "@arethetypeswrong/cli": "^0.15.3",
+    "@changesets/changelog-github": "^0.5.0",
+    "@changesets/cli": "^2.27.1",
+    "@eslint/js": "^9.9.0",
+    "@rollup/plugin-terser": "^0.4.4",
+    "@rollup/plugin-typescript": "^12.1.0",
+    "@trivago/prettier-plugin-sort-imports": "^4.3.0",
+    "@types/broken-link-checker": "^0",
+    "@types/eslint": "^9",
+    "@types/jscodeshift": "^0.12.0",
+    "@types/lodash": "^4.17.20",
+    "@types/node": "^22.7.4",
+    "@types/tar": "^6.1.13",
+    "@typescript-eslint/parser": "^8.26.1",
+    "@vitest/coverage-istanbul": "^2.1.2",
+    "@vue/compiler-sfc": "^3.5.10",
+    "broken-link-checker": "^0.7.8",
+    "eslint": "^9.22.0",
+    "eslint-config-prettier": "^9.1.0",
+    "eslint-plugin-no-for-of-array": "^0.0.1",
+    "eslint-plugin-prettier": "^5.2.1",
+    "eslint-plugin-vue": "^9.28.0",
+    "execa": "^9.3.0",
+    "globals": "^15.9.0",
+    "happy-dom": "^16.7.3",
+    "jscodeshift": "^17.0.0",
+    "prettier": "^3.2.5",
+    "prettier-plugin-sort-re-exports": "^0.1.0",
+    "rollup": "^4.19.0",
+    "rollup-plugin-dts": "^6.1.1",
+    "tar": "^6",
+    "tslib": "^2.6.3",
+    "tsx": "^4.19.0",
+    "typescript": "^5.8.2",
+    "typescript-eslint": "^8.6.0",
+    "vercel": "^41.4.1",
+    "vitest": "^2.1.2"
+  },
+  "dependenciesMeta": {
+    "@trivago/prettier-plugin-sort-imports@4.3.0": {
+      "unplugged": true
+    },
+    "prettier-plugin-sort-re-exports@0.0.1": {
+      "unplugged": true
+    }
+  },
+  "sideEffects": false,
+  "scripts": {
+    "typecheck": "tsc --noEmit",
+    "prepack": "yarn build",
+    "build": "rollup -c rollup.config.mjs && ./.scripts/postbuild.sh",
+    "test": "vitest --coverage --typecheck",
+    "bench": "vitest bench",
+    "lint": "eslint --config eslint.config.mjs",
+    "format": "prettier --write .",
+    "transform": "jscodeshift -t ./.scripts/tests/transform-lodash-test.ts $0 && prettier --write $0"
+  },
+  "main": "./dist/index.js",
+  "browser": "./dist/browser.global.js",
+  "module": "./dist/index.mjs",
+  "types": "./dist/index.d.ts"
+}
Index: node_modules/es-toolkit/predicate.d.ts
===================================================================
--- node_modules/es-toolkit/predicate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/predicate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/predicate';
Index: node_modules/es-toolkit/predicate.js
===================================================================
--- node_modules/es-toolkit/predicate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/predicate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/predicate');
Index: node_modules/es-toolkit/promise.d.ts
===================================================================
--- node_modules/es-toolkit/promise.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/promise.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/promise';
Index: node_modules/es-toolkit/promise.js
===================================================================
--- node_modules/es-toolkit/promise.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/promise.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/promise');
Index: node_modules/es-toolkit/src/compat/_internal/Equals.d.ts
===================================================================
--- node_modules/es-toolkit/src/compat/_internal/Equals.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/src/compat/_internal/Equals.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export type Equals<T, U> = (<X>() => X extends T ? 1 : 2) extends <X>() => X extends U ? 1 : 2 ? true : false;
Index: node_modules/es-toolkit/src/compat/_internal/IsWritable.d.ts
===================================================================
--- node_modules/es-toolkit/src/compat/_internal/IsWritable.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/src/compat/_internal/IsWritable.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import type { Equals } from './Equals.d.ts';
+
+export type IsWritable<T> = Equals<{ [K in keyof T]: T[K] }, { -readonly [K in keyof T]: T[K] }>;
Index: node_modules/es-toolkit/src/compat/_internal/MutableList.d.ts
===================================================================
--- node_modules/es-toolkit/src/compat/_internal/MutableList.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/src/compat/_internal/MutableList.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+export interface MutableList<T> {
+  length: number;
+  [k: number]: T;
+}
Index: node_modules/es-toolkit/src/compat/_internal/RejectReadonly.d.ts
===================================================================
--- node_modules/es-toolkit/src/compat/_internal/RejectReadonly.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/src/compat/_internal/RejectReadonly.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import { IsWritable } from './IsWritable.d.ts';
+import { MutableList } from './MutableList.d.ts';
+
+export type RejectReadonly<T extends MutableList<unknown>> = IsWritable<T> extends true ? T : never;
Index: node_modules/es-toolkit/string.d.ts
===================================================================
--- node_modules/es-toolkit/string.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/string.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/string';
Index: node_modules/es-toolkit/string.js
===================================================================
--- node_modules/es-toolkit/string.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/string.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/string');
Index: node_modules/es-toolkit/util.d.ts
===================================================================
--- node_modules/es-toolkit/util.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/util.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './dist/util';
Index: node_modules/es-toolkit/util.js
===================================================================
--- node_modules/es-toolkit/util.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/es-toolkit/util.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+module.exports = require('./dist/util');
Index: node_modules/eventemitter3/LICENSE
===================================================================
--- node_modules/eventemitter3/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Arnout Kazemier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/eventemitter3/README.md
===================================================================
--- node_modules/eventemitter3/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,94 @@
+# EventEmitter3
+
+[![Version npm](https://img.shields.io/npm/v/eventemitter3.svg?style=flat-square)](https://www.npmjs.com/package/eventemitter3)[![CI](https://img.shields.io/github/actions/workflow/status/primus/eventemitter3/ci.yml?branch=master&label=CI&style=flat-square)](https://github.com/primus/eventemitter3/actions?query=workflow%3ACI+branch%3Amaster)[![Coverage Status](https://img.shields.io/coveralls/primus/eventemitter3/master.svg?style=flat-square)](https://coveralls.io/r/primus/eventemitter3?branch=master)
+
+[![Sauce Test Status](https://saucelabs.com/browser-matrix/eventemitter3.svg)](https://saucelabs.com/u/eventemitter3)
+
+EventEmitter3 is a high performance EventEmitter. It has been micro-optimized
+for various of code paths making this, one of, if not the fastest EventEmitter
+available for Node.js and browsers. The module is API compatible with the
+EventEmitter that ships by default with Node.js but there are some slight
+differences:
+
+- Domain support has been removed.
+- We do not `throw` an error when you emit an `error` event and nobody is
+  listening.
+- The `newListener` and `removeListener` events have been removed as they
+  are useful only in some uncommon use-cases.
+- The `setMaxListeners`, `getMaxListeners`, `prependListener` and
+  `prependOnceListener` methods are not available.
+- Support for custom context for events so there is no need to use `fn.bind`.
+- The `removeListener` method removes all matching listeners, not only the
+  first.
+
+It's a drop in replacement for existing EventEmitters, but just faster. Free
+performance, who wouldn't want that? The EventEmitter is written in EcmaScript 3
+so it will work in the oldest browsers and node versions that you need to
+support.
+
+## Installation
+
+```bash
+$ npm install --save eventemitter3
+```
+
+## CDN
+
+Recommended CDN:
+
+```text
+https://unpkg.com/eventemitter3@latest/dist/eventemitter3.umd.min.js
+```
+
+## Usage
+
+After installation the only thing you need to do is require the module:
+
+```js
+var EventEmitter = require('eventemitter3');
+```
+
+And you're ready to create your own EventEmitter instances. For the API
+documentation, please follow the official Node.js documentation:
+
+http://nodejs.org/api/events.html
+
+### Contextual emits
+
+We've upgraded the API of the `EventEmitter.on`, `EventEmitter.once` and
+`EventEmitter.removeListener` to accept an extra argument which is the `context`
+or `this` value that should be set for the emitted events. This means you no
+longer have the overhead of an event that required `fn.bind` in order to get a
+custom `this` value.
+
+```js
+var EE = new EventEmitter()
+  , context = { foo: 'bar' };
+
+function emitted() {
+  console.log(this === context); // true
+}
+
+EE.once('event-name', emitted, context);
+EE.on('another-event', emitted, context);
+EE.removeListener('another-event', emitted, context);
+```
+
+### Tests and benchmarks
+
+This module is well tested. You can run:
+
+- `npm test` to run the tests under Node.js.
+- `npm run test-browser` to run the tests in real browsers via Sauce Labs.
+
+We also have a set of benchmarks to compare EventEmitter3 with some available
+alternatives. To run the benchmarks run `npm run benchmark`.
+
+Tests and benchmarks are not included in the npm package. If you want to play
+with them you have to clone the GitHub repository.
+Note that you will have to run an additional `npm i` in the benchmarks folder
+before `npm run benchmark`.
+
+## License
+
+[MIT](LICENSE)
Index: node_modules/eventemitter3/dist/eventemitter3.esm.js
===================================================================
--- node_modules/eventemitter3/dist/eventemitter3.esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/dist/eventemitter3.esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,347 @@
+var eventemitter3Exports = {};
+var eventemitter3 = {
+  get exports(){ return eventemitter3Exports; },
+  set exports(v){ eventemitter3Exports = v; },
+};
+
+(function (module) {
+
+	var has = Object.prototype.hasOwnProperty
+	  , prefix = '~';
+
+	/**
+	 * Constructor to create a storage for our `EE` objects.
+	 * An `Events` instance is a plain object whose properties are event names.
+	 *
+	 * @constructor
+	 * @private
+	 */
+	function Events() {}
+
+	//
+	// We try to not inherit from `Object.prototype`. In some engines creating an
+	// instance in this way is faster than calling `Object.create(null)` directly.
+	// If `Object.create(null)` is not supported we prefix the event names with a
+	// character to make sure that the built-in object properties are not
+	// overridden or used as an attack vector.
+	//
+	if (Object.create) {
+	  Events.prototype = Object.create(null);
+
+	  //
+	  // This hack is needed because the `__proto__` property is still inherited in
+	  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
+	  //
+	  if (!new Events().__proto__) prefix = false;
+	}
+
+	/**
+	 * Representation of a single event listener.
+	 *
+	 * @param {Function} fn The listener function.
+	 * @param {*} context The context to invoke the listener with.
+	 * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
+	 * @constructor
+	 * @private
+	 */
+	function EE(fn, context, once) {
+	  this.fn = fn;
+	  this.context = context;
+	  this.once = once || false;
+	}
+
+	/**
+	 * Add a listener for a given event.
+	 *
+	 * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
+	 * @param {(String|Symbol)} event The event name.
+	 * @param {Function} fn The listener function.
+	 * @param {*} context The context to invoke the listener with.
+	 * @param {Boolean} once Specify if the listener is a one-time listener.
+	 * @returns {EventEmitter}
+	 * @private
+	 */
+	function addListener(emitter, event, fn, context, once) {
+	  if (typeof fn !== 'function') {
+	    throw new TypeError('The listener must be a function');
+	  }
+
+	  var listener = new EE(fn, context || emitter, once)
+	    , evt = prefix ? prefix + event : event;
+
+	  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
+	  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
+	  else emitter._events[evt] = [emitter._events[evt], listener];
+
+	  return emitter;
+	}
+
+	/**
+	 * Clear event by name.
+	 *
+	 * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
+	 * @param {(String|Symbol)} evt The Event name.
+	 * @private
+	 */
+	function clearEvent(emitter, evt) {
+	  if (--emitter._eventsCount === 0) emitter._events = new Events();
+	  else delete emitter._events[evt];
+	}
+
+	/**
+	 * Minimal `EventEmitter` interface that is molded against the Node.js
+	 * `EventEmitter` interface.
+	 *
+	 * @constructor
+	 * @public
+	 */
+	function EventEmitter() {
+	  this._events = new Events();
+	  this._eventsCount = 0;
+	}
+
+	/**
+	 * Return an array listing the events for which the emitter has registered
+	 * listeners.
+	 *
+	 * @returns {Array}
+	 * @public
+	 */
+	EventEmitter.prototype.eventNames = function eventNames() {
+	  var names = []
+	    , events
+	    , name;
+
+	  if (this._eventsCount === 0) return names;
+
+	  for (name in (events = this._events)) {
+	    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
+	  }
+
+	  if (Object.getOwnPropertySymbols) {
+	    return names.concat(Object.getOwnPropertySymbols(events));
+	  }
+
+	  return names;
+	};
+
+	/**
+	 * Return the listeners registered for a given event.
+	 *
+	 * @param {(String|Symbol)} event The event name.
+	 * @returns {Array} The registered listeners.
+	 * @public
+	 */
+	EventEmitter.prototype.listeners = function listeners(event) {
+	  var evt = prefix ? prefix + event : event
+	    , handlers = this._events[evt];
+
+	  if (!handlers) return [];
+	  if (handlers.fn) return [handlers.fn];
+
+	  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
+	    ee[i] = handlers[i].fn;
+	  }
+
+	  return ee;
+	};
+
+	/**
+	 * Return the number of listeners listening to a given event.
+	 *
+	 * @param {(String|Symbol)} event The event name.
+	 * @returns {Number} The number of listeners.
+	 * @public
+	 */
+	EventEmitter.prototype.listenerCount = function listenerCount(event) {
+	  var evt = prefix ? prefix + event : event
+	    , listeners = this._events[evt];
+
+	  if (!listeners) return 0;
+	  if (listeners.fn) return 1;
+	  return listeners.length;
+	};
+
+	/**
+	 * Calls each of the listeners registered for a given event.
+	 *
+	 * @param {(String|Symbol)} event The event name.
+	 * @returns {Boolean} `true` if the event had listeners, else `false`.
+	 * @public
+	 */
+	EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
+	  var evt = prefix ? prefix + event : event;
+
+	  if (!this._events[evt]) return false;
+
+	  var listeners = this._events[evt]
+	    , len = arguments.length
+	    , args
+	    , i;
+
+	  if (listeners.fn) {
+	    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
+
+	    switch (len) {
+	      case 1: return listeners.fn.call(listeners.context), true;
+	      case 2: return listeners.fn.call(listeners.context, a1), true;
+	      case 3: return listeners.fn.call(listeners.context, a1, a2), true;
+	      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
+	      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
+	      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
+	    }
+
+	    for (i = 1, args = new Array(len -1); i < len; i++) {
+	      args[i - 1] = arguments[i];
+	    }
+
+	    listeners.fn.apply(listeners.context, args);
+	  } else {
+	    var length = listeners.length
+	      , j;
+
+	    for (i = 0; i < length; i++) {
+	      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
+
+	      switch (len) {
+	        case 1: listeners[i].fn.call(listeners[i].context); break;
+	        case 2: listeners[i].fn.call(listeners[i].context, a1); break;
+	        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
+	        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
+	        default:
+	          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
+	            args[j - 1] = arguments[j];
+	          }
+
+	          listeners[i].fn.apply(listeners[i].context, args);
+	      }
+	    }
+	  }
+
+	  return true;
+	};
+
+	/**
+	 * Add a listener for a given event.
+	 *
+	 * @param {(String|Symbol)} event The event name.
+	 * @param {Function} fn The listener function.
+	 * @param {*} [context=this] The context to invoke the listener with.
+	 * @returns {EventEmitter} `this`.
+	 * @public
+	 */
+	EventEmitter.prototype.on = function on(event, fn, context) {
+	  return addListener(this, event, fn, context, false);
+	};
+
+	/**
+	 * Add a one-time listener for a given event.
+	 *
+	 * @param {(String|Symbol)} event The event name.
+	 * @param {Function} fn The listener function.
+	 * @param {*} [context=this] The context to invoke the listener with.
+	 * @returns {EventEmitter} `this`.
+	 * @public
+	 */
+	EventEmitter.prototype.once = function once(event, fn, context) {
+	  return addListener(this, event, fn, context, true);
+	};
+
+	/**
+	 * Remove the listeners of a given event.
+	 *
+	 * @param {(String|Symbol)} event The event name.
+	 * @param {Function} fn Only remove the listeners that match this function.
+	 * @param {*} context Only remove the listeners that have this context.
+	 * @param {Boolean} once Only remove one-time listeners.
+	 * @returns {EventEmitter} `this`.
+	 * @public
+	 */
+	EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
+	  var evt = prefix ? prefix + event : event;
+
+	  if (!this._events[evt]) return this;
+	  if (!fn) {
+	    clearEvent(this, evt);
+	    return this;
+	  }
+
+	  var listeners = this._events[evt];
+
+	  if (listeners.fn) {
+	    if (
+	      listeners.fn === fn &&
+	      (!once || listeners.once) &&
+	      (!context || listeners.context === context)
+	    ) {
+	      clearEvent(this, evt);
+	    }
+	  } else {
+	    for (var i = 0, events = [], length = listeners.length; i < length; i++) {
+	      if (
+	        listeners[i].fn !== fn ||
+	        (once && !listeners[i].once) ||
+	        (context && listeners[i].context !== context)
+	      ) {
+	        events.push(listeners[i]);
+	      }
+	    }
+
+	    //
+	    // Reset the array, or remove it completely if we have no more listeners.
+	    //
+	    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
+	    else clearEvent(this, evt);
+	  }
+
+	  return this;
+	};
+
+	/**
+	 * Remove all listeners, or those of the specified event.
+	 *
+	 * @param {(String|Symbol)} [event] The event name.
+	 * @returns {EventEmitter} `this`.
+	 * @public
+	 */
+	EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
+	  var evt;
+
+	  if (event) {
+	    evt = prefix ? prefix + event : event;
+	    if (this._events[evt]) clearEvent(this, evt);
+	  } else {
+	    this._events = new Events();
+	    this._eventsCount = 0;
+	  }
+
+	  return this;
+	};
+
+	//
+	// Alias methods names because people roll like that.
+	//
+	EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
+	EventEmitter.prototype.addListener = EventEmitter.prototype.on;
+
+	//
+	// Expose the prefix.
+	//
+	EventEmitter.prefixed = prefix;
+
+	//
+	// Allow `EventEmitter` to be imported as module namespace.
+	//
+	EventEmitter.EventEmitter = EventEmitter;
+
+	//
+	// Expose the module.
+	//
+	{
+	  module.exports = EventEmitter;
+	}
+} (eventemitter3));
+
+var EventEmitter = eventemitter3Exports;
+
+export { EventEmitter, EventEmitter as default };
Index: node_modules/eventemitter3/dist/eventemitter3.esm.min.js
===================================================================
--- node_modules/eventemitter3/dist/eventemitter3.esm.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/dist/eventemitter3.esm.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+var e={};!function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}function o(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function s(e,t,r,s,i){if("function"!=typeof r)throw new TypeError("The listener must be a function");var c=new o(r,s||e,i),f=n?n+t:t;return e._events[f]?e._events[f].fn?e._events[f]=[e._events[f],c]:e._events[f].push(c):(e._events[f]=c,e._eventsCount++),e}function i(e,t){0==--e._eventsCount?e._events=new r:delete e._events[t]}function c(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),c.prototype.eventNames=function(){var e,r,o=[];if(0===this._eventsCount)return o;for(r in e=this._events)t.call(e,r)&&o.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},c.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,s=r.length,i=new Array(s);o<s;o++)i[o]=r[o].fn;return i},c.prototype.listenerCount=function(e){var t=n?n+e:e,r=this._events[t];return r?r.fn?1:r.length:0},c.prototype.emit=function(e,t,r,o,s,i){var c=n?n+e:e;if(!this._events[c])return!1;var f,a,u=this._events[c],v=arguments.length;if(u.fn){switch(u.once&&this.removeListener(e,u.fn,void 0,!0),v){case 1:return u.fn.call(u.context),!0;case 2:return u.fn.call(u.context,t),!0;case 3:return u.fn.call(u.context,t,r),!0;case 4:return u.fn.call(u.context,t,r,o),!0;case 5:return u.fn.call(u.context,t,r,o,s),!0;case 6:return u.fn.call(u.context,t,r,o,s,i),!0}for(a=1,f=new Array(v-1);a<v;a++)f[a-1]=arguments[a];u.fn.apply(u.context,f)}else{var l,p=u.length;for(a=0;a<p;a++)switch(u[a].once&&this.removeListener(e,u[a].fn,void 0,!0),v){case 1:u[a].fn.call(u[a].context);break;case 2:u[a].fn.call(u[a].context,t);break;case 3:u[a].fn.call(u[a].context,t,r);break;case 4:u[a].fn.call(u[a].context,t,r,o);break;default:if(!f)for(l=1,f=new Array(v-1);l<v;l++)f[l-1]=arguments[l];u[a].fn.apply(u[a].context,f)}}return!0},c.prototype.on=function(e,t,n){return s(this,e,t,n,!1)},c.prototype.once=function(e,t,n){return s(this,e,t,n,!0)},c.prototype.removeListener=function(e,t,r,o){var s=n?n+e:e;if(!this._events[s])return this;if(!t)return i(this,s),this;var c=this._events[s];if(c.fn)c.fn!==t||o&&!c.once||r&&c.context!==r||i(this,s);else{for(var f=0,a=[],u=c.length;f<u;f++)(c[f].fn!==t||o&&!c[f].once||r&&c[f].context!==r)&&a.push(c[f]);a.length?this._events[s]=1===a.length?a[0]:a:i(this,s)}return this},c.prototype.removeAllListeners=function(e){var t;return e?(t=n?n+e:e,this._events[t]&&i(this,t)):(this._events=new r,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=n,c.EventEmitter=c,e.exports=c}({get exports(){return e},set exports(t){e=t}});var t=e;export{t as EventEmitter,t as default};//# sourceMappingURL=eventemitter3.esm.min.js.map
Index: node_modules/eventemitter3/dist/eventemitter3.esm.min.js.map
===================================================================
--- node_modules/eventemitter3/dist/eventemitter3.esm.min.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/dist/eventemitter3.esm.min.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"eventemitter3.esm.min.js","sources":["../index.js"],"sourcesContent":["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n"],"names":["has","Object","prototype","hasOwnProperty","prefix","Events","EE","fn","context","once","this","addListener","emitter","event","TypeError","listener","evt","_events","push","_eventsCount","clearEvent","EventEmitter","create","__proto__","eventNames","events","name","names","call","slice","getOwnPropertySymbols","concat","listeners","handlers","i","l","length","ee","Array","listenerCount","emit","a1","a2","a3","a4","a5","args","len","arguments","removeListener","undefined","apply","j","on","removeAllListeners","off","prefixed","module","exports"],"mappings":"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"}
Index: node_modules/eventemitter3/dist/eventemitter3.umd.js
===================================================================
--- node_modules/eventemitter3/dist/eventemitter3.umd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/dist/eventemitter3.umd.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,355 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventEmitter3 = factory());
+})(this, (function () { 'use strict';
+
+  var eventemitter3Exports = {};
+  var eventemitter3$1 = {
+    get exports(){ return eventemitter3Exports; },
+    set exports(v){ eventemitter3Exports = v; },
+  };
+
+  (function (module) {
+
+  	var has = Object.prototype.hasOwnProperty
+  	  , prefix = '~';
+
+  	/**
+  	 * Constructor to create a storage for our `EE` objects.
+  	 * An `Events` instance is a plain object whose properties are event names.
+  	 *
+  	 * @constructor
+  	 * @private
+  	 */
+  	function Events() {}
+
+  	//
+  	// We try to not inherit from `Object.prototype`. In some engines creating an
+  	// instance in this way is faster than calling `Object.create(null)` directly.
+  	// If `Object.create(null)` is not supported we prefix the event names with a
+  	// character to make sure that the built-in object properties are not
+  	// overridden or used as an attack vector.
+  	//
+  	if (Object.create) {
+  	  Events.prototype = Object.create(null);
+
+  	  //
+  	  // This hack is needed because the `__proto__` property is still inherited in
+  	  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
+  	  //
+  	  if (!new Events().__proto__) prefix = false;
+  	}
+
+  	/**
+  	 * Representation of a single event listener.
+  	 *
+  	 * @param {Function} fn The listener function.
+  	 * @param {*} context The context to invoke the listener with.
+  	 * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
+  	 * @constructor
+  	 * @private
+  	 */
+  	function EE(fn, context, once) {
+  	  this.fn = fn;
+  	  this.context = context;
+  	  this.once = once || false;
+  	}
+
+  	/**
+  	 * Add a listener for a given event.
+  	 *
+  	 * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
+  	 * @param {(String|Symbol)} event The event name.
+  	 * @param {Function} fn The listener function.
+  	 * @param {*} context The context to invoke the listener with.
+  	 * @param {Boolean} once Specify if the listener is a one-time listener.
+  	 * @returns {EventEmitter}
+  	 * @private
+  	 */
+  	function addListener(emitter, event, fn, context, once) {
+  	  if (typeof fn !== 'function') {
+  	    throw new TypeError('The listener must be a function');
+  	  }
+
+  	  var listener = new EE(fn, context || emitter, once)
+  	    , evt = prefix ? prefix + event : event;
+
+  	  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
+  	  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
+  	  else emitter._events[evt] = [emitter._events[evt], listener];
+
+  	  return emitter;
+  	}
+
+  	/**
+  	 * Clear event by name.
+  	 *
+  	 * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
+  	 * @param {(String|Symbol)} evt The Event name.
+  	 * @private
+  	 */
+  	function clearEvent(emitter, evt) {
+  	  if (--emitter._eventsCount === 0) emitter._events = new Events();
+  	  else delete emitter._events[evt];
+  	}
+
+  	/**
+  	 * Minimal `EventEmitter` interface that is molded against the Node.js
+  	 * `EventEmitter` interface.
+  	 *
+  	 * @constructor
+  	 * @public
+  	 */
+  	function EventEmitter() {
+  	  this._events = new Events();
+  	  this._eventsCount = 0;
+  	}
+
+  	/**
+  	 * Return an array listing the events for which the emitter has registered
+  	 * listeners.
+  	 *
+  	 * @returns {Array}
+  	 * @public
+  	 */
+  	EventEmitter.prototype.eventNames = function eventNames() {
+  	  var names = []
+  	    , events
+  	    , name;
+
+  	  if (this._eventsCount === 0) return names;
+
+  	  for (name in (events = this._events)) {
+  	    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
+  	  }
+
+  	  if (Object.getOwnPropertySymbols) {
+  	    return names.concat(Object.getOwnPropertySymbols(events));
+  	  }
+
+  	  return names;
+  	};
+
+  	/**
+  	 * Return the listeners registered for a given event.
+  	 *
+  	 * @param {(String|Symbol)} event The event name.
+  	 * @returns {Array} The registered listeners.
+  	 * @public
+  	 */
+  	EventEmitter.prototype.listeners = function listeners(event) {
+  	  var evt = prefix ? prefix + event : event
+  	    , handlers = this._events[evt];
+
+  	  if (!handlers) return [];
+  	  if (handlers.fn) return [handlers.fn];
+
+  	  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
+  	    ee[i] = handlers[i].fn;
+  	  }
+
+  	  return ee;
+  	};
+
+  	/**
+  	 * Return the number of listeners listening to a given event.
+  	 *
+  	 * @param {(String|Symbol)} event The event name.
+  	 * @returns {Number} The number of listeners.
+  	 * @public
+  	 */
+  	EventEmitter.prototype.listenerCount = function listenerCount(event) {
+  	  var evt = prefix ? prefix + event : event
+  	    , listeners = this._events[evt];
+
+  	  if (!listeners) return 0;
+  	  if (listeners.fn) return 1;
+  	  return listeners.length;
+  	};
+
+  	/**
+  	 * Calls each of the listeners registered for a given event.
+  	 *
+  	 * @param {(String|Symbol)} event The event name.
+  	 * @returns {Boolean} `true` if the event had listeners, else `false`.
+  	 * @public
+  	 */
+  	EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
+  	  var evt = prefix ? prefix + event : event;
+
+  	  if (!this._events[evt]) return false;
+
+  	  var listeners = this._events[evt]
+  	    , len = arguments.length
+  	    , args
+  	    , i;
+
+  	  if (listeners.fn) {
+  	    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
+
+  	    switch (len) {
+  	      case 1: return listeners.fn.call(listeners.context), true;
+  	      case 2: return listeners.fn.call(listeners.context, a1), true;
+  	      case 3: return listeners.fn.call(listeners.context, a1, a2), true;
+  	      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
+  	      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
+  	      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
+  	    }
+
+  	    for (i = 1, args = new Array(len -1); i < len; i++) {
+  	      args[i - 1] = arguments[i];
+  	    }
+
+  	    listeners.fn.apply(listeners.context, args);
+  	  } else {
+  	    var length = listeners.length
+  	      , j;
+
+  	    for (i = 0; i < length; i++) {
+  	      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
+
+  	      switch (len) {
+  	        case 1: listeners[i].fn.call(listeners[i].context); break;
+  	        case 2: listeners[i].fn.call(listeners[i].context, a1); break;
+  	        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
+  	        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
+  	        default:
+  	          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
+  	            args[j - 1] = arguments[j];
+  	          }
+
+  	          listeners[i].fn.apply(listeners[i].context, args);
+  	      }
+  	    }
+  	  }
+
+  	  return true;
+  	};
+
+  	/**
+  	 * Add a listener for a given event.
+  	 *
+  	 * @param {(String|Symbol)} event The event name.
+  	 * @param {Function} fn The listener function.
+  	 * @param {*} [context=this] The context to invoke the listener with.
+  	 * @returns {EventEmitter} `this`.
+  	 * @public
+  	 */
+  	EventEmitter.prototype.on = function on(event, fn, context) {
+  	  return addListener(this, event, fn, context, false);
+  	};
+
+  	/**
+  	 * Add a one-time listener for a given event.
+  	 *
+  	 * @param {(String|Symbol)} event The event name.
+  	 * @param {Function} fn The listener function.
+  	 * @param {*} [context=this] The context to invoke the listener with.
+  	 * @returns {EventEmitter} `this`.
+  	 * @public
+  	 */
+  	EventEmitter.prototype.once = function once(event, fn, context) {
+  	  return addListener(this, event, fn, context, true);
+  	};
+
+  	/**
+  	 * Remove the listeners of a given event.
+  	 *
+  	 * @param {(String|Symbol)} event The event name.
+  	 * @param {Function} fn Only remove the listeners that match this function.
+  	 * @param {*} context Only remove the listeners that have this context.
+  	 * @param {Boolean} once Only remove one-time listeners.
+  	 * @returns {EventEmitter} `this`.
+  	 * @public
+  	 */
+  	EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
+  	  var evt = prefix ? prefix + event : event;
+
+  	  if (!this._events[evt]) return this;
+  	  if (!fn) {
+  	    clearEvent(this, evt);
+  	    return this;
+  	  }
+
+  	  var listeners = this._events[evt];
+
+  	  if (listeners.fn) {
+  	    if (
+  	      listeners.fn === fn &&
+  	      (!once || listeners.once) &&
+  	      (!context || listeners.context === context)
+  	    ) {
+  	      clearEvent(this, evt);
+  	    }
+  	  } else {
+  	    for (var i = 0, events = [], length = listeners.length; i < length; i++) {
+  	      if (
+  	        listeners[i].fn !== fn ||
+  	        (once && !listeners[i].once) ||
+  	        (context && listeners[i].context !== context)
+  	      ) {
+  	        events.push(listeners[i]);
+  	      }
+  	    }
+
+  	    //
+  	    // Reset the array, or remove it completely if we have no more listeners.
+  	    //
+  	    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
+  	    else clearEvent(this, evt);
+  	  }
+
+  	  return this;
+  	};
+
+  	/**
+  	 * Remove all listeners, or those of the specified event.
+  	 *
+  	 * @param {(String|Symbol)} [event] The event name.
+  	 * @returns {EventEmitter} `this`.
+  	 * @public
+  	 */
+  	EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
+  	  var evt;
+
+  	  if (event) {
+  	    evt = prefix ? prefix + event : event;
+  	    if (this._events[evt]) clearEvent(this, evt);
+  	  } else {
+  	    this._events = new Events();
+  	    this._eventsCount = 0;
+  	  }
+
+  	  return this;
+  	};
+
+  	//
+  	// Alias methods names because people roll like that.
+  	//
+  	EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
+  	EventEmitter.prototype.addListener = EventEmitter.prototype.on;
+
+  	//
+  	// Expose the prefix.
+  	//
+  	EventEmitter.prefixed = prefix;
+
+  	//
+  	// Allow `EventEmitter` to be imported as module namespace.
+  	//
+  	EventEmitter.EventEmitter = EventEmitter;
+
+  	//
+  	// Expose the module.
+  	//
+  	{
+  	  module.exports = EventEmitter;
+  	}
+  } (eventemitter3$1));
+
+  var eventemitter3 = eventemitter3Exports;
+
+  return eventemitter3;
+
+}));
Index: node_modules/eventemitter3/dist/eventemitter3.umd.min.js
===================================================================
--- node_modules/eventemitter3/dist/eventemitter3.umd.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/dist/eventemitter3.umd.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).EventEmitter3=t()}(this,(function(){"use strict";var e={};return function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}function o(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function s(e,t,r,s,i){if("function"!=typeof r)throw new TypeError("The listener must be a function");var c=new o(r,s||e,i),f=n?n+t:t;return e._events[f]?e._events[f].fn?e._events[f]=[e._events[f],c]:e._events[f].push(c):(e._events[f]=c,e._eventsCount++),e}function i(e,t){0==--e._eventsCount?e._events=new r:delete e._events[t]}function c(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),c.prototype.eventNames=function(){var e,r,o=[];if(0===this._eventsCount)return o;for(r in e=this._events)t.call(e,r)&&o.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(e)):o},c.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,s=r.length,i=new Array(s);o<s;o++)i[o]=r[o].fn;return i},c.prototype.listenerCount=function(e){var t=n?n+e:e,r=this._events[t];return r?r.fn?1:r.length:0},c.prototype.emit=function(e,t,r,o,s,i){var c=n?n+e:e;if(!this._events[c])return!1;var f,u,a=this._events[c],l=arguments.length;if(a.fn){switch(a.once&&this.removeListener(e,a.fn,void 0,!0),l){case 1:return a.fn.call(a.context),!0;case 2:return a.fn.call(a.context,t),!0;case 3:return a.fn.call(a.context,t,r),!0;case 4:return a.fn.call(a.context,t,r,o),!0;case 5:return a.fn.call(a.context,t,r,o,s),!0;case 6:return a.fn.call(a.context,t,r,o,s,i),!0}for(u=1,f=new Array(l-1);u<l;u++)f[u-1]=arguments[u];a.fn.apply(a.context,f)}else{var p,v=a.length;for(u=0;u<v;u++)switch(a[u].once&&this.removeListener(e,a[u].fn,void 0,!0),l){case 1:a[u].fn.call(a[u].context);break;case 2:a[u].fn.call(a[u].context,t);break;case 3:a[u].fn.call(a[u].context,t,r);break;case 4:a[u].fn.call(a[u].context,t,r,o);break;default:if(!f)for(p=1,f=new Array(l-1);p<l;p++)f[p-1]=arguments[p];a[u].fn.apply(a[u].context,f)}}return!0},c.prototype.on=function(e,t,n){return s(this,e,t,n,!1)},c.prototype.once=function(e,t,n){return s(this,e,t,n,!0)},c.prototype.removeListener=function(e,t,r,o){var s=n?n+e:e;if(!this._events[s])return this;if(!t)return i(this,s),this;var c=this._events[s];if(c.fn)c.fn!==t||o&&!c.once||r&&c.context!==r||i(this,s);else{for(var f=0,u=[],a=c.length;f<a;f++)(c[f].fn!==t||o&&!c[f].once||r&&c[f].context!==r)&&u.push(c[f]);u.length?this._events[s]=1===u.length?u[0]:u:i(this,s)}return this},c.prototype.removeAllListeners=function(e){var t;return e?(t=n?n+e:e,this._events[t]&&i(this,t)):(this._events=new r,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=n,c.EventEmitter=c,e.exports=c}({get exports(){return e},set exports(t){e=t}}),e}));//# sourceMappingURL=eventemitter3.umd.min.js.map
Index: node_modules/eventemitter3/dist/eventemitter3.umd.min.js.map
===================================================================
--- node_modules/eventemitter3/dist/eventemitter3.umd.min.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/dist/eventemitter3.umd.min.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"eventemitter3.umd.min.js","sources":["../index.js"],"sourcesContent":["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n"],"names":["has","Object","prototype","hasOwnProperty","prefix","Events","EE","fn","context","once","this","addListener","emitter","event","TypeError","listener","evt","_events","push","_eventsCount","clearEvent","EventEmitter","create","__proto__","eventNames","events","name","names","call","slice","getOwnPropertySymbols","concat","listeners","handlers","i","l","length","ee","Array","listenerCount","emit","a1","a2","a3","a4","a5","args","len","arguments","removeListener","undefined","apply","j","on","removeAllListeners","off","prefixed","module","exports"],"mappings":"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"}
Index: node_modules/eventemitter3/index.d.ts
===================================================================
--- node_modules/eventemitter3/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,135 @@
+/**
+ * Minimal `EventEmitter` interface that is molded against the Node.js
+ * `EventEmitter` interface.
+ */
+declare class EventEmitter<
+  EventTypes extends EventEmitter.ValidEventTypes = string | symbol,
+  Context extends any = any
+> {
+  static prefixed: string | boolean;
+
+  /**
+   * Return an array listing the events for which the emitter has registered
+   * listeners.
+   */
+  eventNames(): Array<EventEmitter.EventNames<EventTypes>>;
+
+  /**
+   * Return the listeners registered for a given event.
+   */
+  listeners<T extends EventEmitter.EventNames<EventTypes>>(
+    event: T
+  ): Array<EventEmitter.EventListener<EventTypes, T>>;
+
+  /**
+   * Return the number of listeners listening to a given event.
+   */
+  listenerCount(event: EventEmitter.EventNames<EventTypes>): number;
+
+  /**
+   * Calls each of the listeners registered for a given event.
+   */
+  emit<T extends EventEmitter.EventNames<EventTypes>>(
+    event: T,
+    ...args: EventEmitter.EventArgs<EventTypes, T>
+  ): boolean;
+
+  /**
+   * Add a listener for a given event.
+   */
+  on<T extends EventEmitter.EventNames<EventTypes>>(
+    event: T,
+    fn: EventEmitter.EventListener<EventTypes, T>,
+    context?: Context
+  ): this;
+  addListener<T extends EventEmitter.EventNames<EventTypes>>(
+    event: T,
+    fn: EventEmitter.EventListener<EventTypes, T>,
+    context?: Context
+  ): this;
+
+  /**
+   * Add a one-time listener for a given event.
+   */
+  once<T extends EventEmitter.EventNames<EventTypes>>(
+    event: T,
+    fn: EventEmitter.EventListener<EventTypes, T>,
+    context?: Context
+  ): this;
+
+  /**
+   * Remove the listeners of a given event.
+   */
+  removeListener<T extends EventEmitter.EventNames<EventTypes>>(
+    event: T,
+    fn?: EventEmitter.EventListener<EventTypes, T>,
+    context?: Context,
+    once?: boolean
+  ): this;
+  off<T extends EventEmitter.EventNames<EventTypes>>(
+    event: T,
+    fn?: EventEmitter.EventListener<EventTypes, T>,
+    context?: Context,
+    once?: boolean
+  ): this;
+
+  /**
+   * Remove all listeners, or those of the specified event.
+   */
+  removeAllListeners(event?: EventEmitter.EventNames<EventTypes>): this;
+}
+
+declare namespace EventEmitter {
+  export interface ListenerFn<Args extends any[] = any[]> {
+    (...args: Args): void;
+  }
+
+  export interface EventEmitterStatic {
+    new <
+      EventTypes extends ValidEventTypes = string | symbol,
+      Context = any
+    >(): EventEmitter<EventTypes, Context>;
+  }
+
+  /**
+   * `object` should be in either of the following forms:
+   * ```
+   * interface EventTypes {
+   *   'event-with-parameters': any[]
+   *   'event-with-example-handler': (...args: any[]) => void
+   * }
+   * ```
+   */
+  export type ValidEventTypes = string | symbol | object;
+
+  export type EventNames<T extends ValidEventTypes> = T extends string | symbol
+    ? T
+    : keyof T;
+
+  export type ArgumentMap<T extends object> = {
+    [K in keyof T]: T[K] extends (...args: any[]) => void
+      ? Parameters<T[K]>
+      : T[K] extends any[]
+      ? T[K]
+      : any[];
+  };
+
+  export type EventListener<
+    T extends ValidEventTypes,
+    K extends EventNames<T>
+  > = T extends string | symbol
+    ? (...args: any[]) => void
+    : (
+        ...args: ArgumentMap<Exclude<T, string | symbol>>[Extract<K, keyof T>]
+      ) => void;
+
+  export type EventArgs<
+    T extends ValidEventTypes,
+    K extends EventNames<T>
+  > = Parameters<EventListener<T, K>>;
+
+  export const EventEmitter: EventEmitterStatic;
+}
+
+export { EventEmitter }
+export default EventEmitter;
Index: node_modules/eventemitter3/index.js
===================================================================
--- node_modules/eventemitter3/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,336 @@
+'use strict';
+
+var has = Object.prototype.hasOwnProperty
+  , prefix = '~';
+
+/**
+ * Constructor to create a storage for our `EE` objects.
+ * An `Events` instance is a plain object whose properties are event names.
+ *
+ * @constructor
+ * @private
+ */
+function Events() {}
+
+//
+// We try to not inherit from `Object.prototype`. In some engines creating an
+// instance in this way is faster than calling `Object.create(null)` directly.
+// If `Object.create(null)` is not supported we prefix the event names with a
+// character to make sure that the built-in object properties are not
+// overridden or used as an attack vector.
+//
+if (Object.create) {
+  Events.prototype = Object.create(null);
+
+  //
+  // This hack is needed because the `__proto__` property is still inherited in
+  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
+  //
+  if (!new Events().__proto__) prefix = false;
+}
+
+/**
+ * Representation of a single event listener.
+ *
+ * @param {Function} fn The listener function.
+ * @param {*} context The context to invoke the listener with.
+ * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
+ * @constructor
+ * @private
+ */
+function EE(fn, context, once) {
+  this.fn = fn;
+  this.context = context;
+  this.once = once || false;
+}
+
+/**
+ * Add a listener for a given event.
+ *
+ * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
+ * @param {(String|Symbol)} event The event name.
+ * @param {Function} fn The listener function.
+ * @param {*} context The context to invoke the listener with.
+ * @param {Boolean} once Specify if the listener is a one-time listener.
+ * @returns {EventEmitter}
+ * @private
+ */
+function addListener(emitter, event, fn, context, once) {
+  if (typeof fn !== 'function') {
+    throw new TypeError('The listener must be a function');
+  }
+
+  var listener = new EE(fn, context || emitter, once)
+    , evt = prefix ? prefix + event : event;
+
+  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
+  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
+  else emitter._events[evt] = [emitter._events[evt], listener];
+
+  return emitter;
+}
+
+/**
+ * Clear event by name.
+ *
+ * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
+ * @param {(String|Symbol)} evt The Event name.
+ * @private
+ */
+function clearEvent(emitter, evt) {
+  if (--emitter._eventsCount === 0) emitter._events = new Events();
+  else delete emitter._events[evt];
+}
+
+/**
+ * Minimal `EventEmitter` interface that is molded against the Node.js
+ * `EventEmitter` interface.
+ *
+ * @constructor
+ * @public
+ */
+function EventEmitter() {
+  this._events = new Events();
+  this._eventsCount = 0;
+}
+
+/**
+ * Return an array listing the events for which the emitter has registered
+ * listeners.
+ *
+ * @returns {Array}
+ * @public
+ */
+EventEmitter.prototype.eventNames = function eventNames() {
+  var names = []
+    , events
+    , name;
+
+  if (this._eventsCount === 0) return names;
+
+  for (name in (events = this._events)) {
+    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
+  }
+
+  if (Object.getOwnPropertySymbols) {
+    return names.concat(Object.getOwnPropertySymbols(events));
+  }
+
+  return names;
+};
+
+/**
+ * Return the listeners registered for a given event.
+ *
+ * @param {(String|Symbol)} event The event name.
+ * @returns {Array} The registered listeners.
+ * @public
+ */
+EventEmitter.prototype.listeners = function listeners(event) {
+  var evt = prefix ? prefix + event : event
+    , handlers = this._events[evt];
+
+  if (!handlers) return [];
+  if (handlers.fn) return [handlers.fn];
+
+  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
+    ee[i] = handlers[i].fn;
+  }
+
+  return ee;
+};
+
+/**
+ * Return the number of listeners listening to a given event.
+ *
+ * @param {(String|Symbol)} event The event name.
+ * @returns {Number} The number of listeners.
+ * @public
+ */
+EventEmitter.prototype.listenerCount = function listenerCount(event) {
+  var evt = prefix ? prefix + event : event
+    , listeners = this._events[evt];
+
+  if (!listeners) return 0;
+  if (listeners.fn) return 1;
+  return listeners.length;
+};
+
+/**
+ * Calls each of the listeners registered for a given event.
+ *
+ * @param {(String|Symbol)} event The event name.
+ * @returns {Boolean} `true` if the event had listeners, else `false`.
+ * @public
+ */
+EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
+  var evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) return false;
+
+  var listeners = this._events[evt]
+    , len = arguments.length
+    , args
+    , i;
+
+  if (listeners.fn) {
+    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
+
+    switch (len) {
+      case 1: return listeners.fn.call(listeners.context), true;
+      case 2: return listeners.fn.call(listeners.context, a1), true;
+      case 3: return listeners.fn.call(listeners.context, a1, a2), true;
+      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
+      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
+      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
+    }
+
+    for (i = 1, args = new Array(len -1); i < len; i++) {
+      args[i - 1] = arguments[i];
+    }
+
+    listeners.fn.apply(listeners.context, args);
+  } else {
+    var length = listeners.length
+      , j;
+
+    for (i = 0; i < length; i++) {
+      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
+
+      switch (len) {
+        case 1: listeners[i].fn.call(listeners[i].context); break;
+        case 2: listeners[i].fn.call(listeners[i].context, a1); break;
+        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
+        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
+        default:
+          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
+            args[j - 1] = arguments[j];
+          }
+
+          listeners[i].fn.apply(listeners[i].context, args);
+      }
+    }
+  }
+
+  return true;
+};
+
+/**
+ * Add a listener for a given event.
+ *
+ * @param {(String|Symbol)} event The event name.
+ * @param {Function} fn The listener function.
+ * @param {*} [context=this] The context to invoke the listener with.
+ * @returns {EventEmitter} `this`.
+ * @public
+ */
+EventEmitter.prototype.on = function on(event, fn, context) {
+  return addListener(this, event, fn, context, false);
+};
+
+/**
+ * Add a one-time listener for a given event.
+ *
+ * @param {(String|Symbol)} event The event name.
+ * @param {Function} fn The listener function.
+ * @param {*} [context=this] The context to invoke the listener with.
+ * @returns {EventEmitter} `this`.
+ * @public
+ */
+EventEmitter.prototype.once = function once(event, fn, context) {
+  return addListener(this, event, fn, context, true);
+};
+
+/**
+ * Remove the listeners of a given event.
+ *
+ * @param {(String|Symbol)} event The event name.
+ * @param {Function} fn Only remove the listeners that match this function.
+ * @param {*} context Only remove the listeners that have this context.
+ * @param {Boolean} once Only remove one-time listeners.
+ * @returns {EventEmitter} `this`.
+ * @public
+ */
+EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
+  var evt = prefix ? prefix + event : event;
+
+  if (!this._events[evt]) return this;
+  if (!fn) {
+    clearEvent(this, evt);
+    return this;
+  }
+
+  var listeners = this._events[evt];
+
+  if (listeners.fn) {
+    if (
+      listeners.fn === fn &&
+      (!once || listeners.once) &&
+      (!context || listeners.context === context)
+    ) {
+      clearEvent(this, evt);
+    }
+  } else {
+    for (var i = 0, events = [], length = listeners.length; i < length; i++) {
+      if (
+        listeners[i].fn !== fn ||
+        (once && !listeners[i].once) ||
+        (context && listeners[i].context !== context)
+      ) {
+        events.push(listeners[i]);
+      }
+    }
+
+    //
+    // Reset the array, or remove it completely if we have no more listeners.
+    //
+    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
+    else clearEvent(this, evt);
+  }
+
+  return this;
+};
+
+/**
+ * Remove all listeners, or those of the specified event.
+ *
+ * @param {(String|Symbol)} [event] The event name.
+ * @returns {EventEmitter} `this`.
+ * @public
+ */
+EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
+  var evt;
+
+  if (event) {
+    evt = prefix ? prefix + event : event;
+    if (this._events[evt]) clearEvent(this, evt);
+  } else {
+    this._events = new Events();
+    this._eventsCount = 0;
+  }
+
+  return this;
+};
+
+//
+// Alias methods names because people roll like that.
+//
+EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
+EventEmitter.prototype.addListener = EventEmitter.prototype.on;
+
+//
+// Expose the prefix.
+//
+EventEmitter.prefixed = prefix;
+
+//
+// Allow `EventEmitter` to be imported as module namespace.
+//
+EventEmitter.EventEmitter = EventEmitter;
+
+//
+// Expose the module.
+//
+if ('undefined' !== typeof module) {
+  module.exports = EventEmitter;
+}
Index: node_modules/eventemitter3/index.mjs
===================================================================
--- node_modules/eventemitter3/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/index.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import EventEmitter from './index.js'
+
+export { EventEmitter }
+export default EventEmitter
Index: node_modules/eventemitter3/package.json
===================================================================
--- node_modules/eventemitter3/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/eventemitter3/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+{
+  "name": "eventemitter3",
+  "version": "5.0.1",
+  "description": "EventEmitter3 focuses on performance while maintaining a Node.js AND browser compatible interface.",
+  "exports": {
+    ".": {
+      "types": "./index.d.ts",
+      "import": "./index.mjs",
+      "require": "./index.js"
+    },
+    "./package.json": "./package.json"
+  },
+  "main": "index.js",
+  "types": "index.d.ts",
+  "scripts": {
+    "rollup": "rimraf dist umd && rollup -c",
+    "benchmark": "find benchmarks/run -name '*.js' -exec benchmarks/start.sh {} \\;",
+    "test": "c8 --reporter=lcov --reporter=text mocha test/test.js",
+    "test-esm": "mocha test/test.mjs",
+    "prepublishOnly": "npm run rollup",
+    "test-browser": "node test/browser.js"
+  },
+  "files": [
+    "index.js",
+    "index.mjs",
+    "index.d.ts",
+    "dist"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/primus/eventemitter3.git"
+  },
+  "keywords": [
+    "EventEmitter",
+    "EventEmitter2",
+    "EventEmitter3",
+    "Events",
+    "addEventListener",
+    "addListener",
+    "emit",
+    "emits",
+    "emitter",
+    "event",
+    "once",
+    "pub/sub",
+    "publish",
+    "reactor",
+    "subscribe"
+  ],
+  "author": "Arnout Kazemier",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/primus/eventemitter3/issues"
+  },
+  "devDependencies": {
+    "@rollup/plugin-commonjs": "^24.0.0",
+    "@rollup/plugin-terser": "^0.4.0",
+    "assume": "^2.2.0",
+    "c8": "^7.3.1",
+    "mocha": "^10.0.0",
+    "pre-commit": "^1.2.0",
+    "rimraf": "^4.1.2",
+    "rollup": "^3.4.0",
+    "sauce-browsers": "^3.0.0",
+    "sauce-test": "^1.3.3"
+  }
+}
Index: node_modules/get-user-locale/LICENSE
===================================================================
--- node_modules/get-user-locale/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018–2024 Wojciech Maj
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/get-user-locale/README.md
===================================================================
--- node_modules/get-user-locale/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,103 @@
+[![npm](https://img.shields.io/npm/v/get-user-locale.svg)](https://www.npmjs.com/package/get-user-locale) ![downloads](https://img.shields.io/npm/dt/get-user-locale.svg) [![CI](https://github.com/wojtekmaj/get-user-locale/actions/workflows/ci.yml/badge.svg)](https://github.com/wojtekmaj/get-user-locale/actions)
+
+# Get-User-Locale
+
+A function that returns user's locale as an [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag), based on all available sources.
+
+## tl;dr
+
+- Install by executing `npm install get-user-locale` or `yarn add get-user-locale`.
+- Import by adding `import getUserLocale from 'get-user-locale'`.
+- Do stuff with it!
+  ```ts
+  const userLocale = getUserLocale();
+  ```
+
+## User guide
+
+### `getUserLocale()`
+
+A function that returns user's preferred locale as an [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag), based on all available sources.
+
+#### Sample usage
+
+```ts
+import getUserLocale from 'get-user-locale';
+
+getUserLocale(); // 'de-DE'
+```
+
+or
+
+```ts
+import { getUserLocale } from 'get-user-locale';
+
+getUserLocale(); // 'de-DE'
+```
+
+##### Options
+
+`getUserLocale()` may be called with an optional `options` argument.
+
+`options` object may contain the following properties:
+
+| Property            | Description                         | Default value |
+| ------------------- | ----------------------------------- | ------------- |
+| `fallbackLocale`    | A locale to use as a fallback.      | `en-US`       |
+| `useFallbackLocale` | Whether to use the fallback locale. | `true`        |
+
+### `getUserLocales()`
+
+A function that returns an array of user's preferred locales as an [IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag), based on all available sources.
+
+#### Sample usage
+
+```ts
+import { getUserLocales } from 'get-user-locale';
+
+getUserLocales(); // ['de-DE', 'de', 'en-US', 'en']
+```
+
+##### Options
+
+`getUserLocales()` may be called with an optional `options` argument.
+
+`options` object may contain the following properties:
+
+| Property            | Description                         | Default value |
+| ------------------- | ----------------------------------- | ------------- |
+| `fallbackLocale`    | A locale to use as a fallback.      | `en-US`       |
+| `useFallbackLocale` | Whether to use the fallback locale. | `true`        |
+
+## Technical details
+
+There are a few ways of determining user's locale:
+
+- `window.navigator.languages`
+- `window.navigator.language`
+
+`…languages` is an array of strings, `…language` is a string. Some browsers return mixed-case [IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag) (e.g. `de-DE`), while others return lowercase ones (e.g. `de-de`). Finally, non-browser environments will not return anything, so you need a fallback.
+
+Get-User-Locale does the following:
+
+- Combines all of them into one sane set of locales - in that particular order,
+- Dedupes them,
+- Fixes invalid, lowercased [IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag) (so that the part after `-` is always uppercased),
+- Adds a fallback to `en-US`, so if all else fails, you will get a result that won't crash your app.
+
+## License
+
+The MIT License.
+
+## Author
+
+<table>
+  <tr>
+    <td >
+      <img src="https://avatars.githubusercontent.com/u/5426427?v=4&s=128" width="64" height="64" alt="Wojciech Maj">
+    </td>
+    <td>
+      <a href="https://github.com/wojtekmaj">Wojciech Maj</a>
+    </td>
+  </tr>
+</table>
Index: node_modules/get-user-locale/dist/cjs/index.d.ts
===================================================================
--- node_modules/get-user-locale/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+type UserLocaleOptions = {
+    useFallbackLocale?: boolean;
+    fallbackLocale?: string;
+};
+declare function getUserLocalesInternal({ useFallbackLocale, fallbackLocale, }?: UserLocaleOptions): string[];
+export declare const getUserLocales: typeof getUserLocalesInternal;
+declare function getUserLocaleInternal(options?: undefined): string;
+declare function getUserLocaleInternal(options?: Record<string, never>): string;
+declare function getUserLocaleInternal(options?: {
+    useFallbackLocale: false;
+    fallbackLocale?: string;
+}): string | null;
+declare function getUserLocaleInternal(options?: {
+    useFallbackLocale?: true;
+    fallbackLocale?: string;
+}): string;
+export declare const getUserLocale: typeof getUserLocaleInternal;
+export default getUserLocale;
Index: node_modules/get-user-locale/dist/cjs/index.js
===================================================================
--- node_modules/get-user-locale/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getUserLocale = exports.getUserLocales = void 0;
+var mem_1 = __importDefault(require("mem"));
+function isString(el) {
+    return typeof el === 'string';
+}
+function isUnique(el, index, arr) {
+    return arr.indexOf(el) === index;
+}
+function isAllLowerCase(el) {
+    return el.toLowerCase() === el;
+}
+function fixCommas(el) {
+    return el.indexOf(',') === -1 ? el : el.split(',');
+}
+function normalizeLocale(locale) {
+    if (!locale) {
+        return locale;
+    }
+    if (locale === 'C' || locale === 'posix' || locale === 'POSIX') {
+        return 'en-US';
+    }
+    // If there's a dot (.) in the locale, it's likely in the format of "en-US.UTF-8", so we only take the first part
+    if (locale.indexOf('.') !== -1) {
+        var _a = locale.split('.')[0], actualLocale = _a === void 0 ? '' : _a;
+        return normalizeLocale(actualLocale);
+    }
+    // If there's an at sign (@) in the locale, it's likely in the format of "en-US@posix", so we only take the first part
+    if (locale.indexOf('@') !== -1) {
+        var _b = locale.split('@')[0], actualLocale = _b === void 0 ? '' : _b;
+        return normalizeLocale(actualLocale);
+    }
+    // If there's a dash (-) in the locale and it's not all lower case, it's already in the format of "en-US", so we return it
+    if (locale.indexOf('-') === -1 || !isAllLowerCase(locale)) {
+        return locale;
+    }
+    var _c = locale.split('-'), splitEl1 = _c[0], _d = _c[1], splitEl2 = _d === void 0 ? '' : _d;
+    return "".concat(splitEl1, "-").concat(splitEl2.toUpperCase());
+}
+function getUserLocalesInternal(_a) {
+    var _b = _a === void 0 ? {} : _a, _c = _b.useFallbackLocale, useFallbackLocale = _c === void 0 ? true : _c, _d = _b.fallbackLocale, fallbackLocale = _d === void 0 ? 'en-US' : _d;
+    var languageList = [];
+    if (typeof navigator !== 'undefined') {
+        var rawLanguages = navigator.languages || [];
+        var languages = [];
+        for (var _i = 0, rawLanguages_1 = rawLanguages; _i < rawLanguages_1.length; _i++) {
+            var rawLanguagesItem = rawLanguages_1[_i];
+            languages = languages.concat(fixCommas(rawLanguagesItem));
+        }
+        var rawLanguage = navigator.language;
+        var language = rawLanguage ? fixCommas(rawLanguage) : rawLanguage;
+        languageList = languageList.concat(languages, language);
+    }
+    if (useFallbackLocale) {
+        languageList.push(fallbackLocale);
+    }
+    return languageList.filter(isString).map(normalizeLocale).filter(isUnique);
+}
+exports.getUserLocales = (0, mem_1.default)(getUserLocalesInternal, { cacheKey: JSON.stringify });
+function getUserLocaleInternal(options) {
+    return (0, exports.getUserLocales)(options)[0] || null;
+}
+exports.getUserLocale = (0, mem_1.default)(getUserLocaleInternal, { cacheKey: JSON.stringify });
+exports.default = exports.getUserLocale;
Index: node_modules/get-user-locale/dist/cjs/package.json
===================================================================
--- node_modules/get-user-locale/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
Index: node_modules/get-user-locale/dist/esm/index.d.ts
===================================================================
--- node_modules/get-user-locale/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+type UserLocaleOptions = {
+    useFallbackLocale?: boolean;
+    fallbackLocale?: string;
+};
+declare function getUserLocalesInternal({ useFallbackLocale, fallbackLocale, }?: UserLocaleOptions): string[];
+export declare const getUserLocales: typeof getUserLocalesInternal;
+declare function getUserLocaleInternal(options?: undefined): string;
+declare function getUserLocaleInternal(options?: Record<string, never>): string;
+declare function getUserLocaleInternal(options?: {
+    useFallbackLocale: false;
+    fallbackLocale?: string;
+}): string | null;
+declare function getUserLocaleInternal(options?: {
+    useFallbackLocale?: true;
+    fallbackLocale?: string;
+}): string;
+export declare const getUserLocale: typeof getUserLocaleInternal;
+export default getUserLocale;
Index: node_modules/get-user-locale/dist/esm/index.js
===================================================================
--- node_modules/get-user-locale/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+import mem from 'mem';
+function isString(el) {
+    return typeof el === 'string';
+}
+function isUnique(el, index, arr) {
+    return arr.indexOf(el) === index;
+}
+function isAllLowerCase(el) {
+    return el.toLowerCase() === el;
+}
+function fixCommas(el) {
+    return el.indexOf(',') === -1 ? el : el.split(',');
+}
+function normalizeLocale(locale) {
+    if (!locale) {
+        return locale;
+    }
+    if (locale === 'C' || locale === 'posix' || locale === 'POSIX') {
+        return 'en-US';
+    }
+    // If there's a dot (.) in the locale, it's likely in the format of "en-US.UTF-8", so we only take the first part
+    if (locale.indexOf('.') !== -1) {
+        var _a = locale.split('.')[0], actualLocale = _a === void 0 ? '' : _a;
+        return normalizeLocale(actualLocale);
+    }
+    // If there's an at sign (@) in the locale, it's likely in the format of "en-US@posix", so we only take the first part
+    if (locale.indexOf('@') !== -1) {
+        var _b = locale.split('@')[0], actualLocale = _b === void 0 ? '' : _b;
+        return normalizeLocale(actualLocale);
+    }
+    // If there's a dash (-) in the locale and it's not all lower case, it's already in the format of "en-US", so we return it
+    if (locale.indexOf('-') === -1 || !isAllLowerCase(locale)) {
+        return locale;
+    }
+    var _c = locale.split('-'), splitEl1 = _c[0], _d = _c[1], splitEl2 = _d === void 0 ? '' : _d;
+    return "".concat(splitEl1, "-").concat(splitEl2.toUpperCase());
+}
+function getUserLocalesInternal(_a) {
+    var _b = _a === void 0 ? {} : _a, _c = _b.useFallbackLocale, useFallbackLocale = _c === void 0 ? true : _c, _d = _b.fallbackLocale, fallbackLocale = _d === void 0 ? 'en-US' : _d;
+    var languageList = [];
+    if (typeof navigator !== 'undefined') {
+        var rawLanguages = navigator.languages || [];
+        var languages = [];
+        for (var _i = 0, rawLanguages_1 = rawLanguages; _i < rawLanguages_1.length; _i++) {
+            var rawLanguagesItem = rawLanguages_1[_i];
+            languages = languages.concat(fixCommas(rawLanguagesItem));
+        }
+        var rawLanguage = navigator.language;
+        var language = rawLanguage ? fixCommas(rawLanguage) : rawLanguage;
+        languageList = languageList.concat(languages, language);
+    }
+    if (useFallbackLocale) {
+        languageList.push(fallbackLocale);
+    }
+    return languageList.filter(isString).map(normalizeLocale).filter(isUnique);
+}
+export var getUserLocales = mem(getUserLocalesInternal, { cacheKey: JSON.stringify });
+function getUserLocaleInternal(options) {
+    return getUserLocales(options)[0] || null;
+}
+export var getUserLocale = mem(getUserLocaleInternal, { cacheKey: JSON.stringify });
+export default getUserLocale;
Index: node_modules/get-user-locale/package.json
===================================================================
--- node_modules/get-user-locale/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+{
+  "name": "get-user-locale",
+  "version": "2.3.2",
+  "description": "Returns a list of strings representing the user's preferred languages.",
+  "type": "module",
+  "sideEffects": false,
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/esm/index.js",
+  "source": "./src/index.ts",
+  "types": "./dist/cjs/index.d.ts",
+  "exports": {
+    "import": "./dist/esm/index.js",
+    "require": "./dist/cjs/index.js"
+  },
+  "scripts": {
+    "build": "yarn build-esm && yarn build-cjs && yarn build-cjs-package",
+    "build-esm": "tsc --project tsconfig.build.json --outDir dist/esm",
+    "build-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs --moduleResolution node --verbatimModuleSyntax false",
+    "build-cjs-package": "echo '{\n  \"type\": \"commonjs\"\n}' > dist/cjs/package.json",
+    "clean": "rimraf dist",
+    "format": "prettier --check . --cache",
+    "lint": "eslint .",
+    "prepack": "yarn clean && yarn build",
+    "test": "yarn lint && yarn tsc && yarn format && yarn unit",
+    "tsc": "tsc",
+    "unit": "vitest"
+  },
+  "keywords": [
+    "locale",
+    "language",
+    "language-detection"
+  ],
+  "author": {
+    "name": "Wojciech Maj",
+    "email": "kontakt@wojtekmaj.pl"
+  },
+  "license": "MIT",
+  "dependencies": {
+    "mem": "^8.0.0"
+  },
+  "devDependencies": {
+    "eslint": "^8.56.0",
+    "eslint-config-wojtekmaj": "^1.0.0",
+    "happy-dom": "^12.6.0",
+    "husky": "^9.0.0",
+    "lint-staged": "^15.0.0",
+    "prettier": "^3.2.0",
+    "rimraf": "^3.0.0",
+    "typescript": "^5.4.2",
+    "vitest": "^1.0.2"
+  },
+  "resolutions": {
+    "eslint-plugin-import": "npm:eslint-plugin-i@^2.28.0"
+  },
+  "publishConfig": {
+    "access": "public",
+    "provenance": true
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/wojtekmaj/get-user-locale.git"
+  },
+  "funding": "https://github.com/wojtekmaj/get-user-locale?sponsor=1",
+  "packageManager": "yarn@4.1.1"
+}
Index: node_modules/get-user-locale/src/index.node.spec.ts
===================================================================
--- node_modules/get-user-locale/src/index.node.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/src/index.node.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+/**
+ * @vitest-environment node
+ */
+import { describe, expect, it } from 'vitest';
+
+import getUserLocaleDefault, { getUserLocale, getUserLocales } from './index.js';
+
+it('exports getUserLocale() by default', () => {
+  expect(getUserLocaleDefault).toBeDefined();
+  expect(getUserLocaleDefault).toBe(getUserLocale);
+});
+
+describe('getUserLocale()', () => {
+  it('returns default fallback locale when no navigator properties are given', () => {
+    expect(getUserLocale()).toEqual('en-US');
+  });
+
+  it('returns default fallback locale when no navigator properties are given and getUserLocale is called with empty options', () => {
+    expect(getUserLocale({})).toEqual('en-US');
+  });
+
+  it('returns default fallback locale when no navigator properties are given and getUserLocale is called with useFallbackLocale = true option', () => {
+    expect(getUserLocale({ useFallbackLocale: true })).toEqual('en-US');
+  });
+
+  it('returns custom fallback locale when no navigator properties are given and getUserLocale is called with fallbackLocale option', () => {
+    expect(getUserLocale({ fallbackLocale: 'de-DE' })).toEqual('de-DE');
+  });
+
+  it('returns custom fallback locale when no navigator properties are given and getUserLocale is called with fallbackLocale and useFallbackLocale = true options', () => {
+    expect(getUserLocale({ fallbackLocale: 'de-DE', useFallbackLocale: true })).toEqual('de-DE');
+  });
+
+  it('returns null when no navigator properties are given and getUserLocale is called with useFallbackLocale = false option', () => {
+    expect(getUserLocale({ useFallbackLocale: false })).toEqual(null);
+  });
+
+  it('returns null when no navigator properties are given and getUserLocale is called with fallbackLocale and useFallbackLocale = false options', () => {
+    expect(getUserLocale({ fallbackLocale: 'de-DE', useFallbackLocale: false })).toEqual(null);
+  });
+});
+
+describe('getUserLocales()', () => {
+  it('returns default fallback locale when no navigator properties are given', () => {
+    expect(getUserLocales()).toEqual(['en-US']);
+  });
+
+  it('returns default fallback locale when no navigator properties are given and getUserLocales is called with empty options', () => {
+    expect(getUserLocales({})).toEqual(['en-US']);
+  });
+
+  it('returns custom fallback locale when no navigator properties are given and getUserLocales is called with fallbackLocale option', () => {
+    expect(getUserLocales({ fallbackLocale: 'de-DE' })).toEqual(['de-DE']);
+  });
+
+  it('returns empty array when no navigator properties are given and getUserLocales is called with useFallbackLocale = false option', () => {
+    expect(getUserLocales({ useFallbackLocale: false })).toEqual([]);
+  });
+});
Index: node_modules/get-user-locale/src/index.spec.ts
===================================================================
--- node_modules/get-user-locale/src/index.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/src/index.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,293 @@
+import { describe, expect, it, vi } from 'vitest';
+
+import getUserLocaleDefault, { getUserLocale, getUserLocales } from './index.js';
+
+let mockNavigatorObject: object;
+
+/**
+ * Because unlike in the real browser navigator object will change, we need to add mock navigator
+ * object to mem cacheKey function.
+ */
+
+vi.mock('mem', async () => {
+  const { default: actualMem } = await vi.importActual<{
+    default: typeof import('mem');
+  }>('mem');
+
+  return {
+    default: vi.fn().mockImplementation((fn, options) => {
+      function cacheKeyWithNavigator(args: unknown) {
+        return JSON.stringify(mockNavigatorObject) + options.cacheKey(args);
+      }
+
+      return actualMem(fn, { cacheKey: cacheKeyWithNavigator });
+    }),
+  };
+});
+
+const navigatorLanguageProperties: (keyof Navigator)[] = ['language', 'languages'];
+
+function mockNavigator(mockNavigatorProperties: { [key in keyof Navigator]?: Navigator[key] }) {
+  for (const property of navigatorLanguageProperties) {
+    Object.defineProperty(window.navigator, property, {
+      value: mockNavigatorProperties[property],
+      configurable: true,
+    });
+  }
+
+  mockNavigatorObject = mockNavigatorProperties;
+}
+
+it('exports getUserLocale() by default', () => {
+  expect(getUserLocaleDefault).toBeDefined();
+  expect(getUserLocaleDefault).toBe(getUserLocale);
+});
+
+describe('getUserLocale()', () => {
+  it('returns valid list for Chrome', () => {
+    const navigator = {
+      language: 'pl',
+      potato: true,
+      languages: ['pl', 'en-US', 'en', 'pl-PL'],
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale()).toEqual('pl');
+  });
+
+  it('returns valid list for Firefox', () => {
+    const navigator = {
+      language: 'pl',
+      languages: ['pl', 'en-US', 'en'],
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale()).toEqual('pl');
+  });
+
+  it('returns valid list for Safari 9', () => {
+    const navigator = {
+      language: 'pl-pl', // note the lowercase
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale()).toEqual('pl-PL');
+  });
+
+  it('returns valid list for Safari 10', () => {
+    const navigator = {
+      language: 'pl-PL',
+      languages: ['pl-PL', 'pl', 'en-US', 'en'],
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale()).toEqual('pl-PL');
+  });
+
+  it('returns default fallback locale when no navigator properties are given', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale()).toEqual('en-US');
+  });
+
+  it('returns default fallback locale when no navigator properties are given and getUserLocale is called with empty options', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale({})).toEqual('en-US');
+  });
+
+  it('returns default fallback locale when no navigator properties are given and getUserLocale is called with useFallbackLocale = true option', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale({ useFallbackLocale: true })).toEqual('en-US');
+  });
+
+  it('returns custom fallback locale when no navigator properties are given and getUserLocale is called with fallbackLocale option', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale({ fallbackLocale: 'de-DE' })).toEqual('de-DE');
+  });
+
+  it('returns custom fallback locale when no navigator properties are given and getUserLocale is called with fallbackLocale and useFallbackLocale = true options', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale({ fallbackLocale: 'de-DE', useFallbackLocale: true })).toEqual('de-DE');
+  });
+
+  it('returns null when no navigator properties are given and getUserLocale is called with useFallbackLocale = false option', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale({ useFallbackLocale: false })).toEqual(null);
+  });
+
+  it('returns null when no navigator properties are given and getUserLocale is called with fallbackLocale and useFallbackLocale = false options', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocale({ fallbackLocale: 'de-DE', useFallbackLocale: false })).toEqual(null);
+  });
+});
+
+describe('getUserLocales()', () => {
+  it('returns valid list for Chrome', () => {
+    const navigator = {
+      language: 'pl',
+      languages: ['pl', 'en-US', 'en', 'pl-PL'],
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['pl', 'en-US', 'en', 'pl-PL']);
+  });
+
+  it('returns valid list for Firefox', () => {
+    const navigator = {
+      language: 'pl',
+      languages: ['pl', 'en-US', 'en'],
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['pl', 'en-US', 'en']);
+  });
+
+  it('returns valid list for Safari 9', () => {
+    const navigator = {
+      language: 'pl-pl', // note the lowercase
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['pl-PL', 'en-US']);
+  });
+
+  it('returns valid list for Safari 10', () => {
+    const navigator = {
+      language: 'pl-PL',
+      languages: ['pl-PL', 'pl', 'en-US', 'en'],
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['pl-PL', 'pl', 'en-US', 'en']);
+  });
+
+  it('returns default fallback locale when no navigator properties are given', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['en-US']);
+  });
+
+  it('returns default fallback locale when no navigator properties are given and getUserLocales is called with empty options', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales({})).toEqual(['en-US']);
+  });
+
+  it('returns custom fallback locale when no navigator properties are given and getUserLocales is called with fallbackLocale option', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales({ fallbackLocale: 'de-DE' })).toEqual(['de-DE']);
+  });
+
+  it('returns empty array when no navigator properties are given and getUserLocales is called with useFallbackLocale = false option', () => {
+    const navigator = {};
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales({ useFallbackLocale: false })).toEqual([]);
+  });
+
+  it('handles invalid navigator properties', () => {
+    const navigator = {
+      language: 'en-US,en',
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['en-US', 'en']);
+  });
+
+  it('handles POSIX locales (1)', () => {
+    const navigator = {
+      language: 'C',
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['en-US']);
+  });
+
+  it('handles POSIX locales (2)', () => {
+    const navigator = {
+      language: 'C.UTF-8',
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['en-US']);
+  });
+
+  it('handles POSIX locales (3)', () => {
+    const navigator = {
+      language: 'en-US.UTF-8',
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['en-US']);
+  });
+
+  it('handles POSIX locales (3)', () => {
+    const navigator = {
+      language: 'en-US.UTF-8',
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['en-US']);
+  });
+
+  it('handles POSIX locales (4)', () => {
+    const navigator = {
+      language: 'en-US@posix',
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['en-US']);
+  });
+
+  it('handles POSIX locales (5)', () => {
+    const navigator = {
+      language: 'posix',
+    };
+
+    mockNavigator(navigator);
+
+    expect(getUserLocales()).toEqual(['en-US']);
+  });
+});
Index: node_modules/get-user-locale/src/index.ts
===================================================================
--- node_modules/get-user-locale/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/get-user-locale/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,101 @@
+import mem from 'mem';
+
+type UserLocaleOptions = {
+  useFallbackLocale?: boolean;
+  fallbackLocale?: string;
+};
+
+function isString(el: unknown): el is string {
+  return typeof el === 'string';
+}
+
+function isUnique<T>(el: T, index: number, arr: T[]) {
+  return arr.indexOf(el) === index;
+}
+
+function isAllLowerCase(el: string) {
+  return el.toLowerCase() === el;
+}
+
+function fixCommas(el: string) {
+  return el.indexOf(',') === -1 ? el : el.split(',');
+}
+
+function normalizeLocale(locale: string): string {
+  if (!locale) {
+    return locale;
+  }
+
+  if (locale === 'C' || locale === 'posix' || locale === 'POSIX') {
+    return 'en-US';
+  }
+
+  // If there's a dot (.) in the locale, it's likely in the format of "en-US.UTF-8", so we only take the first part
+  if (locale.indexOf('.') !== -1) {
+    const [actualLocale = ''] = locale.split('.');
+
+    return normalizeLocale(actualLocale);
+  }
+
+  // If there's an at sign (@) in the locale, it's likely in the format of "en-US@posix", so we only take the first part
+  if (locale.indexOf('@') !== -1) {
+    const [actualLocale = ''] = locale.split('@');
+
+    return normalizeLocale(actualLocale);
+  }
+
+  // If there's a dash (-) in the locale and it's not all lower case, it's already in the format of "en-US", so we return it
+  if (locale.indexOf('-') === -1 || !isAllLowerCase(locale)) {
+    return locale;
+  }
+
+  const [splitEl1, splitEl2 = ''] = locale.split('-');
+
+  return `${splitEl1}-${splitEl2.toUpperCase()}`;
+}
+
+function getUserLocalesInternal({
+  useFallbackLocale = true,
+  fallbackLocale = 'en-US',
+}: UserLocaleOptions = {}): string[] {
+  let languageList: string[] = [];
+
+  if (typeof navigator !== 'undefined') {
+    const rawLanguages = navigator.languages || [];
+    let languages: string[] = [];
+    for (const rawLanguagesItem of rawLanguages) {
+      languages = languages.concat(fixCommas(rawLanguagesItem));
+    }
+
+    const rawLanguage = navigator.language;
+    const language = rawLanguage ? fixCommas(rawLanguage) : rawLanguage;
+
+    languageList = languageList.concat(languages, language);
+  }
+
+  if (useFallbackLocale) {
+    languageList.push(fallbackLocale);
+  }
+
+  return languageList.filter(isString).map(normalizeLocale).filter(isUnique);
+}
+
+export const getUserLocales = mem(getUserLocalesInternal, { cacheKey: JSON.stringify });
+
+function getUserLocaleInternal(options?: undefined): string;
+function getUserLocaleInternal(options?: Record<string, never>): string;
+function getUserLocaleInternal(options?: {
+  useFallbackLocale: false;
+  fallbackLocale?: string;
+}): string | null;
+function getUserLocaleInternal(options?: {
+  useFallbackLocale?: true;
+  fallbackLocale?: string;
+}): string;
+function getUserLocaleInternal(options?: UserLocaleOptions): string | null {
+  return getUserLocales(options)[0] || null;
+}
+
+export const getUserLocale = mem(getUserLocaleInternal, { cacheKey: JSON.stringify });
+
+export default getUserLocale;
Index: node_modules/immer/LICENSE
===================================================================
--- node_modules/immer/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Michel Weststrate
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/immer/dist/cjs/immer.cjs.development.js
===================================================================
--- node_modules/immer/dist/cjs/immer.cjs.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/cjs/immer.cjs.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1276 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/immer.ts
+var immer_exports = {};
+__export(immer_exports, {
+  Immer: () => Immer2,
+  applyPatches: () => applyPatches,
+  castDraft: () => castDraft,
+  castImmutable: () => castImmutable,
+  createDraft: () => createDraft,
+  current: () => current,
+  enableMapSet: () => enableMapSet,
+  enablePatches: () => enablePatches,
+  finishDraft: () => finishDraft,
+  freeze: () => freeze,
+  immerable: () => DRAFTABLE,
+  isDraft: () => isDraft,
+  isDraftable: () => isDraftable,
+  nothing: () => NOTHING,
+  original: () => original,
+  produce: () => produce,
+  produceWithPatches: () => produceWithPatches,
+  setAutoFreeze: () => setAutoFreeze,
+  setUseStrictShallowCopy: () => setUseStrictShallowCopy
+});
+module.exports = __toCommonJS(immer_exports);
+
+// src/utils/env.ts
+var NOTHING = Symbol.for("immer-nothing");
+var DRAFTABLE = Symbol.for("immer-draftable");
+var DRAFT_STATE = Symbol.for("immer-state");
+
+// src/utils/errors.ts
+var errors = process.env.NODE_ENV !== "production" ? [
+  // All error codes, starting by 0:
+  function(plugin) {
+    return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \`enable${plugin}()\` when initializing your application.`;
+  },
+  function(thing) {
+    return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;
+  },
+  "This object has been frozen and should not be mutated",
+  function(data) {
+    return "Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? " + data;
+  },
+  "An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.",
+  "Immer forbids circular references",
+  "The first or second argument to `produce` must be a function",
+  "The third argument to `produce` must be a function or undefined",
+  "First argument to `createDraft` must be a plain object, an array, or an immerable object",
+  "First argument to `finishDraft` must be a draft returned by `createDraft`",
+  function(thing) {
+    return `'current' expects a draft, got: ${thing}`;
+  },
+  "Object.defineProperty() cannot be used on an Immer draft",
+  "Object.setPrototypeOf() cannot be used on an Immer draft",
+  "Immer only supports deleting array indices",
+  "Immer only supports setting array indices and the 'length' property",
+  function(thing) {
+    return `'original' expects a draft, got: ${thing}`;
+  }
+  // Note: if more errors are added, the errorOffset in Patches.ts should be increased
+  // See Patches.ts for additional errors
+] : [];
+function die(error, ...args) {
+  if (process.env.NODE_ENV !== "production") {
+    const e = errors[error];
+    const msg = typeof e === "function" ? e.apply(null, args) : e;
+    throw new Error(`[Immer] ${msg}`);
+  }
+  throw new Error(
+    `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`
+  );
+}
+
+// src/utils/common.ts
+var getPrototypeOf = Object.getPrototypeOf;
+function isDraft(value) {
+  return !!value && !!value[DRAFT_STATE];
+}
+function isDraftable(value) {
+  if (!value)
+    return false;
+  return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);
+}
+var objectCtorString = Object.prototype.constructor.toString();
+function isPlainObject(value) {
+  if (!value || typeof value !== "object")
+    return false;
+  const proto = getPrototypeOf(value);
+  if (proto === null) {
+    return true;
+  }
+  const Ctor = Object.hasOwnProperty.call(proto, "constructor") && proto.constructor;
+  if (Ctor === Object)
+    return true;
+  return typeof Ctor == "function" && Function.toString.call(Ctor) === objectCtorString;
+}
+function original(value) {
+  if (!isDraft(value))
+    die(15, value);
+  return value[DRAFT_STATE].base_;
+}
+function each(obj, iter) {
+  if (getArchtype(obj) === 0 /* Object */) {
+    Reflect.ownKeys(obj).forEach((key) => {
+      iter(key, obj[key], obj);
+    });
+  } else {
+    obj.forEach((entry, index) => iter(index, entry, obj));
+  }
+}
+function getArchtype(thing) {
+  const state = thing[DRAFT_STATE];
+  return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;
+}
+function has(thing, prop) {
+  return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);
+}
+function get(thing, prop) {
+  return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];
+}
+function set(thing, propOrOldValue, value) {
+  const t = getArchtype(thing);
+  if (t === 2 /* Map */)
+    thing.set(propOrOldValue, value);
+  else if (t === 3 /* Set */) {
+    thing.add(value);
+  } else
+    thing[propOrOldValue] = value;
+}
+function is(x, y) {
+  if (x === y) {
+    return x !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+}
+function isMap(target) {
+  return target instanceof Map;
+}
+function isSet(target) {
+  return target instanceof Set;
+}
+function latest(state) {
+  return state.copy_ || state.base_;
+}
+function shallowCopy(base, strict) {
+  if (isMap(base)) {
+    return new Map(base);
+  }
+  if (isSet(base)) {
+    return new Set(base);
+  }
+  if (Array.isArray(base))
+    return Array.prototype.slice.call(base);
+  const isPlain = isPlainObject(base);
+  if (strict === true || strict === "class_only" && !isPlain) {
+    const descriptors = Object.getOwnPropertyDescriptors(base);
+    delete descriptors[DRAFT_STATE];
+    let keys = Reflect.ownKeys(descriptors);
+    for (let i = 0; i < keys.length; i++) {
+      const key = keys[i];
+      const desc = descriptors[key];
+      if (desc.writable === false) {
+        desc.writable = true;
+        desc.configurable = true;
+      }
+      if (desc.get || desc.set)
+        descriptors[key] = {
+          configurable: true,
+          writable: true,
+          // could live with !!desc.set as well here...
+          enumerable: desc.enumerable,
+          value: base[key]
+        };
+    }
+    return Object.create(getPrototypeOf(base), descriptors);
+  } else {
+    const proto = getPrototypeOf(base);
+    if (proto !== null && isPlain) {
+      return { ...base };
+    }
+    const obj = Object.create(proto);
+    return Object.assign(obj, base);
+  }
+}
+function freeze(obj, deep = false) {
+  if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))
+    return obj;
+  if (getArchtype(obj) > 1) {
+    obj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections;
+  }
+  Object.freeze(obj);
+  if (deep)
+    Object.entries(obj).forEach(([key, value]) => freeze(value, true));
+  return obj;
+}
+function dontMutateFrozenCollections() {
+  die(2);
+}
+function isFrozen(obj) {
+  return Object.isFrozen(obj);
+}
+
+// src/utils/plugins.ts
+var plugins = {};
+function getPlugin(pluginKey) {
+  const plugin = plugins[pluginKey];
+  if (!plugin) {
+    die(0, pluginKey);
+  }
+  return plugin;
+}
+function loadPlugin(pluginKey, implementation) {
+  if (!plugins[pluginKey])
+    plugins[pluginKey] = implementation;
+}
+
+// src/core/scope.ts
+var currentScope;
+function getCurrentScope() {
+  return currentScope;
+}
+function createScope(parent_, immer_) {
+  return {
+    drafts_: [],
+    parent_,
+    immer_,
+    // Whenever the modified draft contains a draft from another scope, we
+    // need to prevent auto-freezing so the unowned draft can be finalized.
+    canAutoFreeze_: true,
+    unfinalizedDrafts_: 0
+  };
+}
+function usePatchesInScope(scope, patchListener) {
+  if (patchListener) {
+    getPlugin("Patches");
+    scope.patches_ = [];
+    scope.inversePatches_ = [];
+    scope.patchListener_ = patchListener;
+  }
+}
+function revokeScope(scope) {
+  leaveScope(scope);
+  scope.drafts_.forEach(revokeDraft);
+  scope.drafts_ = null;
+}
+function leaveScope(scope) {
+  if (scope === currentScope) {
+    currentScope = scope.parent_;
+  }
+}
+function enterScope(immer2) {
+  return currentScope = createScope(currentScope, immer2);
+}
+function revokeDraft(draft) {
+  const state = draft[DRAFT_STATE];
+  if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)
+    state.revoke_();
+  else
+    state.revoked_ = true;
+}
+
+// src/core/finalize.ts
+function processResult(result, scope) {
+  scope.unfinalizedDrafts_ = scope.drafts_.length;
+  const baseDraft = scope.drafts_[0];
+  const isReplaced = result !== void 0 && result !== baseDraft;
+  if (isReplaced) {
+    if (baseDraft[DRAFT_STATE].modified_) {
+      revokeScope(scope);
+      die(4);
+    }
+    if (isDraftable(result)) {
+      result = finalize(scope, result);
+      if (!scope.parent_)
+        maybeFreeze(scope, result);
+    }
+    if (scope.patches_) {
+      getPlugin("Patches").generateReplacementPatches_(
+        baseDraft[DRAFT_STATE].base_,
+        result,
+        scope.patches_,
+        scope.inversePatches_
+      );
+    }
+  } else {
+    result = finalize(scope, baseDraft, []);
+  }
+  revokeScope(scope);
+  if (scope.patches_) {
+    scope.patchListener_(scope.patches_, scope.inversePatches_);
+  }
+  return result !== NOTHING ? result : void 0;
+}
+function finalize(rootScope, value, path) {
+  if (isFrozen(value))
+    return value;
+  const state = value[DRAFT_STATE];
+  if (!state) {
+    each(
+      value,
+      (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)
+    );
+    return value;
+  }
+  if (state.scope_ !== rootScope)
+    return value;
+  if (!state.modified_) {
+    maybeFreeze(rootScope, state.base_, true);
+    return state.base_;
+  }
+  if (!state.finalized_) {
+    state.finalized_ = true;
+    state.scope_.unfinalizedDrafts_--;
+    const result = state.copy_;
+    let resultEach = result;
+    let isSet2 = false;
+    if (state.type_ === 3 /* Set */) {
+      resultEach = new Set(result);
+      result.clear();
+      isSet2 = true;
+    }
+    each(
+      resultEach,
+      (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)
+    );
+    maybeFreeze(rootScope, result, false);
+    if (path && rootScope.patches_) {
+      getPlugin("Patches").generatePatches_(
+        state,
+        path,
+        rootScope.patches_,
+        rootScope.inversePatches_
+      );
+    }
+  }
+  return state.copy_;
+}
+function finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {
+  if (process.env.NODE_ENV !== "production" && childValue === targetObject)
+    die(5);
+  if (isDraft(childValue)) {
+    const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.
+    !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;
+    const res = finalize(rootScope, childValue, path);
+    set(targetObject, prop, res);
+    if (isDraft(res)) {
+      rootScope.canAutoFreeze_ = false;
+    } else
+      return;
+  } else if (targetIsSet) {
+    targetObject.add(childValue);
+  }
+  if (isDraftable(childValue) && !isFrozen(childValue)) {
+    if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {
+      return;
+    }
+    finalize(rootScope, childValue);
+    if ((!parentState || !parentState.scope_.parent_) && typeof prop !== "symbol" && Object.prototype.propertyIsEnumerable.call(targetObject, prop))
+      maybeFreeze(rootScope, childValue);
+  }
+}
+function maybeFreeze(scope, value, deep = false) {
+  if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {
+    freeze(value, deep);
+  }
+}
+
+// src/core/proxy.ts
+function createProxyProxy(base, parent) {
+  const isArray = Array.isArray(base);
+  const state = {
+    type_: isArray ? 1 /* Array */ : 0 /* Object */,
+    // Track which produce call this is associated with.
+    scope_: parent ? parent.scope_ : getCurrentScope(),
+    // True for both shallow and deep changes.
+    modified_: false,
+    // Used during finalization.
+    finalized_: false,
+    // Track which properties have been assigned (true) or deleted (false).
+    assigned_: {},
+    // The parent draft state.
+    parent_: parent,
+    // The base state.
+    base_: base,
+    // The base proxy.
+    draft_: null,
+    // set below
+    // The base copy with any updated values.
+    copy_: null,
+    // Called by the `produce` function.
+    revoke_: null,
+    isManual_: false
+  };
+  let target = state;
+  let traps = objectTraps;
+  if (isArray) {
+    target = [state];
+    traps = arrayTraps;
+  }
+  const { revoke, proxy } = Proxy.revocable(target, traps);
+  state.draft_ = proxy;
+  state.revoke_ = revoke;
+  return proxy;
+}
+var objectTraps = {
+  get(state, prop) {
+    if (prop === DRAFT_STATE)
+      return state;
+    const source = latest(state);
+    if (!has(source, prop)) {
+      return readPropFromProto(state, source, prop);
+    }
+    const value = source[prop];
+    if (state.finalized_ || !isDraftable(value)) {
+      return value;
+    }
+    if (value === peek(state.base_, prop)) {
+      prepareCopy(state);
+      return state.copy_[prop] = createProxy(value, state);
+    }
+    return value;
+  },
+  has(state, prop) {
+    return prop in latest(state);
+  },
+  ownKeys(state) {
+    return Reflect.ownKeys(latest(state));
+  },
+  set(state, prop, value) {
+    const desc = getDescriptorFromProto(latest(state), prop);
+    if (desc?.set) {
+      desc.set.call(state.draft_, value);
+      return true;
+    }
+    if (!state.modified_) {
+      const current2 = peek(latest(state), prop);
+      const currentState = current2?.[DRAFT_STATE];
+      if (currentState && currentState.base_ === value) {
+        state.copy_[prop] = value;
+        state.assigned_[prop] = false;
+        return true;
+      }
+      if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))
+        return true;
+      prepareCopy(state);
+      markChanged(state);
+    }
+    if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'
+    (value !== void 0 || prop in state.copy_) || // special case: NaN
+    Number.isNaN(value) && Number.isNaN(state.copy_[prop]))
+      return true;
+    state.copy_[prop] = value;
+    state.assigned_[prop] = true;
+    return true;
+  },
+  deleteProperty(state, prop) {
+    if (peek(state.base_, prop) !== void 0 || prop in state.base_) {
+      state.assigned_[prop] = false;
+      prepareCopy(state);
+      markChanged(state);
+    } else {
+      delete state.assigned_[prop];
+    }
+    if (state.copy_) {
+      delete state.copy_[prop];
+    }
+    return true;
+  },
+  // Note: We never coerce `desc.value` into an Immer draft, because we can't make
+  // the same guarantee in ES5 mode.
+  getOwnPropertyDescriptor(state, prop) {
+    const owner = latest(state);
+    const desc = Reflect.getOwnPropertyDescriptor(owner, prop);
+    if (!desc)
+      return desc;
+    return {
+      writable: true,
+      configurable: state.type_ !== 1 /* Array */ || prop !== "length",
+      enumerable: desc.enumerable,
+      value: owner[prop]
+    };
+  },
+  defineProperty() {
+    die(11);
+  },
+  getPrototypeOf(state) {
+    return getPrototypeOf(state.base_);
+  },
+  setPrototypeOf() {
+    die(12);
+  }
+};
+var arrayTraps = {};
+each(objectTraps, (key, fn) => {
+  arrayTraps[key] = function() {
+    arguments[0] = arguments[0][0];
+    return fn.apply(this, arguments);
+  };
+});
+arrayTraps.deleteProperty = function(state, prop) {
+  if (process.env.NODE_ENV !== "production" && isNaN(parseInt(prop)))
+    die(13);
+  return arrayTraps.set.call(this, state, prop, void 0);
+};
+arrayTraps.set = function(state, prop, value) {
+  if (process.env.NODE_ENV !== "production" && prop !== "length" && isNaN(parseInt(prop)))
+    die(14);
+  return objectTraps.set.call(this, state[0], prop, value, state[0]);
+};
+function peek(draft, prop) {
+  const state = draft[DRAFT_STATE];
+  const source = state ? latest(state) : draft;
+  return source[prop];
+}
+function readPropFromProto(state, source, prop) {
+  const desc = getDescriptorFromProto(source, prop);
+  return desc ? `value` in desc ? desc.value : (
+    // This is a very special case, if the prop is a getter defined by the
+    // prototype, we should invoke it with the draft as context!
+    desc.get?.call(state.draft_)
+  ) : void 0;
+}
+function getDescriptorFromProto(source, prop) {
+  if (!(prop in source))
+    return void 0;
+  let proto = getPrototypeOf(source);
+  while (proto) {
+    const desc = Object.getOwnPropertyDescriptor(proto, prop);
+    if (desc)
+      return desc;
+    proto = getPrototypeOf(proto);
+  }
+  return void 0;
+}
+function markChanged(state) {
+  if (!state.modified_) {
+    state.modified_ = true;
+    if (state.parent_) {
+      markChanged(state.parent_);
+    }
+  }
+}
+function prepareCopy(state) {
+  if (!state.copy_) {
+    state.copy_ = shallowCopy(
+      state.base_,
+      state.scope_.immer_.useStrictShallowCopy_
+    );
+  }
+}
+
+// src/core/immerClass.ts
+var Immer2 = class {
+  constructor(config) {
+    this.autoFreeze_ = true;
+    this.useStrictShallowCopy_ = false;
+    /**
+     * The `produce` function takes a value and a "recipe function" (whose
+     * return value often depends on the base state). The recipe function is
+     * free to mutate its first argument however it wants. All mutations are
+     * only ever applied to a __copy__ of the base state.
+     *
+     * Pass only a function to create a "curried producer" which relieves you
+     * from passing the recipe function every time.
+     *
+     * Only plain objects and arrays are made mutable. All other objects are
+     * considered uncopyable.
+     *
+     * Note: This function is __bound__ to its `Immer` instance.
+     *
+     * @param {any} base - the initial state
+     * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified
+     * @param {Function} patchListener - optional function that will be called with all the patches produced here
+     * @returns {any} a new state, or the initial state if nothing was modified
+     */
+    this.produce = (base, recipe, patchListener) => {
+      if (typeof base === "function" && typeof recipe !== "function") {
+        const defaultBase = recipe;
+        recipe = base;
+        const self = this;
+        return function curriedProduce(base2 = defaultBase, ...args) {
+          return self.produce(base2, (draft) => recipe.call(this, draft, ...args));
+        };
+      }
+      if (typeof recipe !== "function")
+        die(6);
+      if (patchListener !== void 0 && typeof patchListener !== "function")
+        die(7);
+      let result;
+      if (isDraftable(base)) {
+        const scope = enterScope(this);
+        const proxy = createProxy(base, void 0);
+        let hasError = true;
+        try {
+          result = recipe(proxy);
+          hasError = false;
+        } finally {
+          if (hasError)
+            revokeScope(scope);
+          else
+            leaveScope(scope);
+        }
+        usePatchesInScope(scope, patchListener);
+        return processResult(result, scope);
+      } else if (!base || typeof base !== "object") {
+        result = recipe(base);
+        if (result === void 0)
+          result = base;
+        if (result === NOTHING)
+          result = void 0;
+        if (this.autoFreeze_)
+          freeze(result, true);
+        if (patchListener) {
+          const p = [];
+          const ip = [];
+          getPlugin("Patches").generateReplacementPatches_(base, result, p, ip);
+          patchListener(p, ip);
+        }
+        return result;
+      } else
+        die(1, base);
+    };
+    this.produceWithPatches = (base, recipe) => {
+      if (typeof base === "function") {
+        return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));
+      }
+      let patches, inversePatches;
+      const result = this.produce(base, recipe, (p, ip) => {
+        patches = p;
+        inversePatches = ip;
+      });
+      return [result, patches, inversePatches];
+    };
+    if (typeof config?.autoFreeze === "boolean")
+      this.setAutoFreeze(config.autoFreeze);
+    if (typeof config?.useStrictShallowCopy === "boolean")
+      this.setUseStrictShallowCopy(config.useStrictShallowCopy);
+  }
+  createDraft(base) {
+    if (!isDraftable(base))
+      die(8);
+    if (isDraft(base))
+      base = current(base);
+    const scope = enterScope(this);
+    const proxy = createProxy(base, void 0);
+    proxy[DRAFT_STATE].isManual_ = true;
+    leaveScope(scope);
+    return proxy;
+  }
+  finishDraft(draft, patchListener) {
+    const state = draft && draft[DRAFT_STATE];
+    if (!state || !state.isManual_)
+      die(9);
+    const { scope_: scope } = state;
+    usePatchesInScope(scope, patchListener);
+    return processResult(void 0, scope);
+  }
+  /**
+   * Pass true to automatically freeze all copies created by Immer.
+   *
+   * By default, auto-freezing is enabled.
+   */
+  setAutoFreeze(value) {
+    this.autoFreeze_ = value;
+  }
+  /**
+   * Pass true to enable strict shallow copy.
+   *
+   * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.
+   */
+  setUseStrictShallowCopy(value) {
+    this.useStrictShallowCopy_ = value;
+  }
+  applyPatches(base, patches) {
+    let i;
+    for (i = patches.length - 1; i >= 0; i--) {
+      const patch = patches[i];
+      if (patch.path.length === 0 && patch.op === "replace") {
+        base = patch.value;
+        break;
+      }
+    }
+    if (i > -1) {
+      patches = patches.slice(i + 1);
+    }
+    const applyPatchesImpl = getPlugin("Patches").applyPatches_;
+    if (isDraft(base)) {
+      return applyPatchesImpl(base, patches);
+    }
+    return this.produce(
+      base,
+      (draft) => applyPatchesImpl(draft, patches)
+    );
+  }
+};
+function createProxy(value, parent) {
+  const draft = isMap(value) ? getPlugin("MapSet").proxyMap_(value, parent) : isSet(value) ? getPlugin("MapSet").proxySet_(value, parent) : createProxyProxy(value, parent);
+  const scope = parent ? parent.scope_ : getCurrentScope();
+  scope.drafts_.push(draft);
+  return draft;
+}
+
+// src/core/current.ts
+function current(value) {
+  if (!isDraft(value))
+    die(10, value);
+  return currentImpl(value);
+}
+function currentImpl(value) {
+  if (!isDraftable(value) || isFrozen(value))
+    return value;
+  const state = value[DRAFT_STATE];
+  let copy;
+  if (state) {
+    if (!state.modified_)
+      return state.base_;
+    state.finalized_ = true;
+    copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);
+  } else {
+    copy = shallowCopy(value, true);
+  }
+  each(copy, (key, childValue) => {
+    set(copy, key, currentImpl(childValue));
+  });
+  if (state) {
+    state.finalized_ = false;
+  }
+  return copy;
+}
+
+// src/plugins/patches.ts
+function enablePatches() {
+  const errorOffset = 16;
+  if (process.env.NODE_ENV !== "production") {
+    errors.push(
+      'Sets cannot have "replace" patches.',
+      function(op) {
+        return "Unsupported patch operation: " + op;
+      },
+      function(path) {
+        return "Cannot apply patch, path doesn't resolve: " + path;
+      },
+      "Patching reserved attributes like __proto__, prototype and constructor is not allowed"
+    );
+  }
+  const REPLACE = "replace";
+  const ADD = "add";
+  const REMOVE = "remove";
+  function generatePatches_(state, basePath, patches, inversePatches) {
+    switch (state.type_) {
+      case 0 /* Object */:
+      case 2 /* Map */:
+        return generatePatchesFromAssigned(
+          state,
+          basePath,
+          patches,
+          inversePatches
+        );
+      case 1 /* Array */:
+        return generateArrayPatches(state, basePath, patches, inversePatches);
+      case 3 /* Set */:
+        return generateSetPatches(
+          state,
+          basePath,
+          patches,
+          inversePatches
+        );
+    }
+  }
+  function generateArrayPatches(state, basePath, patches, inversePatches) {
+    let { base_, assigned_ } = state;
+    let copy_ = state.copy_;
+    if (copy_.length < base_.length) {
+      ;
+      [base_, copy_] = [copy_, base_];
+      [patches, inversePatches] = [inversePatches, patches];
+    }
+    for (let i = 0; i < base_.length; i++) {
+      if (assigned_[i] && copy_[i] !== base_[i]) {
+        const path = basePath.concat([i]);
+        patches.push({
+          op: REPLACE,
+          path,
+          // Need to maybe clone it, as it can in fact be the original value
+          // due to the base/copy inversion at the start of this function
+          value: clonePatchValueIfNeeded(copy_[i])
+        });
+        inversePatches.push({
+          op: REPLACE,
+          path,
+          value: clonePatchValueIfNeeded(base_[i])
+        });
+      }
+    }
+    for (let i = base_.length; i < copy_.length; i++) {
+      const path = basePath.concat([i]);
+      patches.push({
+        op: ADD,
+        path,
+        // Need to maybe clone it, as it can in fact be the original value
+        // due to the base/copy inversion at the start of this function
+        value: clonePatchValueIfNeeded(copy_[i])
+      });
+    }
+    for (let i = copy_.length - 1; base_.length <= i; --i) {
+      const path = basePath.concat([i]);
+      inversePatches.push({
+        op: REMOVE,
+        path
+      });
+    }
+  }
+  function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {
+    const { base_, copy_ } = state;
+    each(state.assigned_, (key, assignedValue) => {
+      const origValue = get(base_, key);
+      const value = get(copy_, key);
+      const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;
+      if (origValue === value && op === REPLACE)
+        return;
+      const path = basePath.concat(key);
+      patches.push(op === REMOVE ? { op, path } : { op, path, value });
+      inversePatches.push(
+        op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }
+      );
+    });
+  }
+  function generateSetPatches(state, basePath, patches, inversePatches) {
+    let { base_, copy_ } = state;
+    let i = 0;
+    base_.forEach((value) => {
+      if (!copy_.has(value)) {
+        const path = basePath.concat([i]);
+        patches.push({
+          op: REMOVE,
+          path,
+          value
+        });
+        inversePatches.unshift({
+          op: ADD,
+          path,
+          value
+        });
+      }
+      i++;
+    });
+    i = 0;
+    copy_.forEach((value) => {
+      if (!base_.has(value)) {
+        const path = basePath.concat([i]);
+        patches.push({
+          op: ADD,
+          path,
+          value
+        });
+        inversePatches.unshift({
+          op: REMOVE,
+          path,
+          value
+        });
+      }
+      i++;
+    });
+  }
+  function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {
+    patches.push({
+      op: REPLACE,
+      path: [],
+      value: replacement === NOTHING ? void 0 : replacement
+    });
+    inversePatches.push({
+      op: REPLACE,
+      path: [],
+      value: baseValue
+    });
+  }
+  function applyPatches_(draft, patches) {
+    patches.forEach((patch) => {
+      const { path, op } = patch;
+      let base = draft;
+      for (let i = 0; i < path.length - 1; i++) {
+        const parentType = getArchtype(base);
+        let p = path[i];
+        if (typeof p !== "string" && typeof p !== "number") {
+          p = "" + p;
+        }
+        if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === "__proto__" || p === "constructor"))
+          die(errorOffset + 3);
+        if (typeof base === "function" && p === "prototype")
+          die(errorOffset + 3);
+        base = get(base, p);
+        if (typeof base !== "object")
+          die(errorOffset + 2, path.join("/"));
+      }
+      const type = getArchtype(base);
+      const value = deepClonePatchValue(patch.value);
+      const key = path[path.length - 1];
+      switch (op) {
+        case REPLACE:
+          switch (type) {
+            case 2 /* Map */:
+              return base.set(key, value);
+            case 3 /* Set */:
+              die(errorOffset);
+            default:
+              return base[key] = value;
+          }
+        case ADD:
+          switch (type) {
+            case 1 /* Array */:
+              return key === "-" ? base.push(value) : base.splice(key, 0, value);
+            case 2 /* Map */:
+              return base.set(key, value);
+            case 3 /* Set */:
+              return base.add(value);
+            default:
+              return base[key] = value;
+          }
+        case REMOVE:
+          switch (type) {
+            case 1 /* Array */:
+              return base.splice(key, 1);
+            case 2 /* Map */:
+              return base.delete(key);
+            case 3 /* Set */:
+              return base.delete(patch.value);
+            default:
+              return delete base[key];
+          }
+        default:
+          die(errorOffset + 1, op);
+      }
+    });
+    return draft;
+  }
+  function deepClonePatchValue(obj) {
+    if (!isDraftable(obj))
+      return obj;
+    if (Array.isArray(obj))
+      return obj.map(deepClonePatchValue);
+    if (isMap(obj))
+      return new Map(
+        Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])
+      );
+    if (isSet(obj))
+      return new Set(Array.from(obj).map(deepClonePatchValue));
+    const cloned = Object.create(getPrototypeOf(obj));
+    for (const key in obj)
+      cloned[key] = deepClonePatchValue(obj[key]);
+    if (has(obj, DRAFTABLE))
+      cloned[DRAFTABLE] = obj[DRAFTABLE];
+    return cloned;
+  }
+  function clonePatchValueIfNeeded(obj) {
+    if (isDraft(obj)) {
+      return deepClonePatchValue(obj);
+    } else
+      return obj;
+  }
+  loadPlugin("Patches", {
+    applyPatches_,
+    generatePatches_,
+    generateReplacementPatches_
+  });
+}
+
+// src/plugins/mapset.ts
+function enableMapSet() {
+  class DraftMap extends Map {
+    constructor(target, parent) {
+      super();
+      this[DRAFT_STATE] = {
+        type_: 2 /* Map */,
+        parent_: parent,
+        scope_: parent ? parent.scope_ : getCurrentScope(),
+        modified_: false,
+        finalized_: false,
+        copy_: void 0,
+        assigned_: void 0,
+        base_: target,
+        draft_: this,
+        isManual_: false,
+        revoked_: false
+      };
+    }
+    get size() {
+      return latest(this[DRAFT_STATE]).size;
+    }
+    has(key) {
+      return latest(this[DRAFT_STATE]).has(key);
+    }
+    set(key, value) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (!latest(state).has(key) || latest(state).get(key) !== value) {
+        prepareMapCopy(state);
+        markChanged(state);
+        state.assigned_.set(key, true);
+        state.copy_.set(key, value);
+        state.assigned_.set(key, true);
+      }
+      return this;
+    }
+    delete(key) {
+      if (!this.has(key)) {
+        return false;
+      }
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareMapCopy(state);
+      markChanged(state);
+      if (state.base_.has(key)) {
+        state.assigned_.set(key, false);
+      } else {
+        state.assigned_.delete(key);
+      }
+      state.copy_.delete(key);
+      return true;
+    }
+    clear() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (latest(state).size) {
+        prepareMapCopy(state);
+        markChanged(state);
+        state.assigned_ = /* @__PURE__ */ new Map();
+        each(state.base_, (key) => {
+          state.assigned_.set(key, false);
+        });
+        state.copy_.clear();
+      }
+    }
+    forEach(cb, thisArg) {
+      const state = this[DRAFT_STATE];
+      latest(state).forEach((_value, key, _map) => {
+        cb.call(thisArg, this.get(key), key, this);
+      });
+    }
+    get(key) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      const value = latest(state).get(key);
+      if (state.finalized_ || !isDraftable(value)) {
+        return value;
+      }
+      if (value !== state.base_.get(key)) {
+        return value;
+      }
+      const draft = createProxy(value, state);
+      prepareMapCopy(state);
+      state.copy_.set(key, draft);
+      return draft;
+    }
+    keys() {
+      return latest(this[DRAFT_STATE]).keys();
+    }
+    values() {
+      const iterator = this.keys();
+      return {
+        [Symbol.iterator]: () => this.values(),
+        next: () => {
+          const r = iterator.next();
+          if (r.done)
+            return r;
+          const value = this.get(r.value);
+          return {
+            done: false,
+            value
+          };
+        }
+      };
+    }
+    entries() {
+      const iterator = this.keys();
+      return {
+        [Symbol.iterator]: () => this.entries(),
+        next: () => {
+          const r = iterator.next();
+          if (r.done)
+            return r;
+          const value = this.get(r.value);
+          return {
+            done: false,
+            value: [r.value, value]
+          };
+        }
+      };
+    }
+    [(DRAFT_STATE, Symbol.iterator)]() {
+      return this.entries();
+    }
+  }
+  function proxyMap_(target, parent) {
+    return new DraftMap(target, parent);
+  }
+  function prepareMapCopy(state) {
+    if (!state.copy_) {
+      state.assigned_ = /* @__PURE__ */ new Map();
+      state.copy_ = new Map(state.base_);
+    }
+  }
+  class DraftSet extends Set {
+    constructor(target, parent) {
+      super();
+      this[DRAFT_STATE] = {
+        type_: 3 /* Set */,
+        parent_: parent,
+        scope_: parent ? parent.scope_ : getCurrentScope(),
+        modified_: false,
+        finalized_: false,
+        copy_: void 0,
+        base_: target,
+        draft_: this,
+        drafts_: /* @__PURE__ */ new Map(),
+        revoked_: false,
+        isManual_: false
+      };
+    }
+    get size() {
+      return latest(this[DRAFT_STATE]).size;
+    }
+    has(value) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (!state.copy_) {
+        return state.base_.has(value);
+      }
+      if (state.copy_.has(value))
+        return true;
+      if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))
+        return true;
+      return false;
+    }
+    add(value) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (!this.has(value)) {
+        prepareSetCopy(state);
+        markChanged(state);
+        state.copy_.add(value);
+      }
+      return this;
+    }
+    delete(value) {
+      if (!this.has(value)) {
+        return false;
+      }
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareSetCopy(state);
+      markChanged(state);
+      return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (
+        /* istanbul ignore next */
+        false
+      ));
+    }
+    clear() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (latest(state).size) {
+        prepareSetCopy(state);
+        markChanged(state);
+        state.copy_.clear();
+      }
+    }
+    values() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareSetCopy(state);
+      return state.copy_.values();
+    }
+    entries() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareSetCopy(state);
+      return state.copy_.entries();
+    }
+    keys() {
+      return this.values();
+    }
+    [(DRAFT_STATE, Symbol.iterator)]() {
+      return this.values();
+    }
+    forEach(cb, thisArg) {
+      const iterator = this.values();
+      let result = iterator.next();
+      while (!result.done) {
+        cb.call(thisArg, result.value, result.value, this);
+        result = iterator.next();
+      }
+    }
+  }
+  function proxySet_(target, parent) {
+    return new DraftSet(target, parent);
+  }
+  function prepareSetCopy(state) {
+    if (!state.copy_) {
+      state.copy_ = /* @__PURE__ */ new Set();
+      state.base_.forEach((value) => {
+        if (isDraftable(value)) {
+          const draft = createProxy(value, state);
+          state.drafts_.set(value, draft);
+          state.copy_.add(draft);
+        } else {
+          state.copy_.add(value);
+        }
+      });
+    }
+  }
+  function assertUnrevoked(state) {
+    if (state.revoked_)
+      die(3, JSON.stringify(latest(state)));
+  }
+  loadPlugin("MapSet", { proxyMap_, proxySet_ });
+}
+
+// src/immer.ts
+var immer = new Immer2();
+var produce = immer.produce;
+var produceWithPatches = immer.produceWithPatches.bind(
+  immer
+);
+var setAutoFreeze = immer.setAutoFreeze.bind(immer);
+var setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer);
+var applyPatches = immer.applyPatches.bind(immer);
+var createDraft = immer.createDraft.bind(immer);
+var finishDraft = immer.finishDraft.bind(immer);
+function castDraft(value) {
+  return value;
+}
+function castImmutable(value) {
+  return value;
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  Immer,
+  applyPatches,
+  castDraft,
+  castImmutable,
+  createDraft,
+  current,
+  enableMapSet,
+  enablePatches,
+  finishDraft,
+  freeze,
+  immerable,
+  isDraft,
+  isDraftable,
+  nothing,
+  original,
+  produce,
+  produceWithPatches,
+  setAutoFreeze,
+  setUseStrictShallowCopy
+});
+//# sourceMappingURL=immer.cjs.development.js.map
Index: node_modules/immer/dist/cjs/immer.cjs.development.js.map
===================================================================
--- node_modules/immer/dist/cjs/immer.cjs.development.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/cjs/immer.cjs.development.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/immer.ts","../../src/utils/env.ts","../../src/utils/errors.ts","../../src/utils/common.ts","../../src/utils/plugins.ts","../../src/core/scope.ts","../../src/core/finalize.ts","../../src/core/proxy.ts","../../src/core/immerClass.ts","../../src/core/current.ts","../../src/plugins/patches.ts","../../src/plugins/mapset.ts"],"sourcesContent":["import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tWritableDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\tProducer,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze,\n\tObjectish,\n\tStrictMode\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\nexport const setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\n","// Should be no imports here!\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: unique symbol = Symbol.for(\"immer-nothing\")\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = Symbol.for(\"immer-draftable\")\n\nexport const DRAFT_STATE: unique symbol = Symbol.for(\"immer-state\")\n","export const errors =\n\tprocess.env.NODE_ENV !== \"production\"\n\t\t? [\n\t\t\t\t// All error codes, starting by 0:\n\t\t\t\tfunction(plugin: string) {\n\t\t\t\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t\t\t\t},\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t\t\t\t},\n\t\t\t\t\"This object has been frozen and should not be mutated\",\n\t\t\t\tfunction(data: any) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\t\t\t\tdata\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t\t\t\t\"Immer forbids circular references\",\n\t\t\t\t\"The first or second argument to `produce` must be a function\",\n\t\t\t\t\"The third argument to `produce` must be a function or undefined\",\n\t\t\t\t\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t\t\t\t\"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'current' expects a draft, got: ${thing}`\n\t\t\t\t},\n\t\t\t\t\"Object.defineProperty() cannot be used on an Immer draft\",\n\t\t\t\t\"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t\t\t\t\"Immer only supports deleting array indices\",\n\t\t\t\t\"Immer only supports setting array indices and the 'length' property\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'original' expects a draft, got: ${thing}`\n\t\t\t\t}\n\t\t\t\t// Note: if more errors are added, the errorOffset in Patches.ts should be increased\n\t\t\t\t// See Patches.ts for additional errors\n\t\t  ]\n\t\t: []\n\nexport function die(error: number, ...args: any[]): never {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst e = errors[error]\n\t\tconst msg = typeof e === \"function\" ? e.apply(null, args as any) : e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\tArchType,\n\tdie,\n\tStrictMode\n} from \"../internal\"\n\nexport const getPrototypeOf = Object.getPrototypeOf\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(15, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/**\n * Each iterates a map, set or array.\n * Or, if any other kind of object, all of its own properties.\n * Regardless whether they are enumerable or symbols\n */\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void\n): void\nexport function each(obj: any, iter: any) {\n\tif (getArchtype(obj) === ArchType.Object) {\n\t\tReflect.ownKeys(obj).forEach(key => {\n\t\t\titer(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): ArchType {\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_\n\t\t: Array.isArray(thing)\n\t\t? ArchType.Array\n\t\t: isMap(thing)\n\t\t? ArchType.Map\n\t\t: isSet(thing)\n\t\t? ArchType.Set\n\t\t: ArchType.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === ArchType.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === ArchType.Map) thing.set(propOrOldValue, value)\n\telse if (t === ArchType.Set) {\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any, strict: StrictMode) {\n\tif (isMap(base)) {\n\t\treturn new Map(base)\n\t}\n\tif (isSet(base)) {\n\t\treturn new Set(base)\n\t}\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\n\tconst isPlain = isPlainObject(base)\n\n\tif (strict === true || (strict === \"class_only\" && !isPlain)) {\n\t\t// Perform a strict copy\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(base)\n\t\tdelete descriptors[DRAFT_STATE as any]\n\t\tlet keys = Reflect.ownKeys(descriptors)\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key: any = keys[i]\n\t\t\tconst desc = descriptors[key]\n\t\t\tif (desc.writable === false) {\n\t\t\t\tdesc.writable = true\n\t\t\t\tdesc.configurable = true\n\t\t\t}\n\t\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t\t// with libraries that trap values, like mobx or vue\n\t\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\t\tif (desc.get || desc.set)\n\t\t\t\tdescriptors[key] = {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\t\tvalue: base[key]\n\t\t\t\t}\n\t\t}\n\t\treturn Object.create(getPrototypeOf(base), descriptors)\n\t} else {\n\t\t// perform a sloppy copy\n\t\tconst proto = getPrototypeOf(base)\n\t\tif (proto !== null && isPlain) {\n\t\t\treturn {...base} // assumption: better inner class optimization than the assign below\n\t\t}\n\t\tconst obj = Object.create(proto)\n\t\treturn Object.assign(obj, base)\n\t}\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep)\n\t\t// See #590, don't recurse into non-enumerable / Symbol properties when freezing\n\t\t// So use Object.entries (only string-like, enumerables) instead of each()\n\t\tObject.entries(obj).forEach(([key, value]) => freeze(value, true))\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tDrafted,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tArchType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: readonly Patch[]): T\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(0, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ArchType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ArchType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tArchType,\n\tgetPlugin\n} from \"../internal\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (state.type_ === ArchType.Object || state.type_ === ArchType.Array)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tArchType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(value, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path)\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result = state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// To preserve insertion order in all cases we then clear the set\n\t\t// And we let finalizeProperty know it needs to re-add non-draft children back to the target\n\t\tlet resultEach = result\n\t\tlet isSet = false\n\t\tif (state.type_ === ArchType.Set) {\n\t\t\tresultEach = new Set(result)\n\t\t\tresult.clear()\n\t\t\tisSet = true\n\t\t}\n\t\teach(resultEach, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path, isSet)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath,\n\ttargetIsSet?: boolean\n) {\n\tif (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n\t\tdie(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t} else if (targetIsSet) {\n\t\ttargetObject.add(childValue)\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// Immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\t// Per #590, we never freeze symbolic properties. Just to make sure don't accidentally interfere\n\t\t// with other frameworks.\n\t\tif (\n\t\t\t(!parentState || !parentState.scope_.parent_) &&\n\t\t\ttypeof prop !== \"symbol\" &&\n\t\t\tObject.prototype.propertyIsEnumerable.call(targetObject, prop)\n\t\t)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\t// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects\n\tif (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tgetPrototypeOf,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tArchType,\n\tImmerScope\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ArchType.Object\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ArchType.Array\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ArchType.Array : (ArchType.Object as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(value, state))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\t(state.copy_![prop] === value &&\n\t\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t\t(value !== undefined || prop in state.copy_)) ||\n\t\t\t// special case: NaN\n\t\t\t(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\tif (state.copy_) {\n\t\t\tdelete state.copy_[prop]\n\t\t}\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ArchType.Array || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop as any)))\n\t\tdie(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (\n\t\tprocess.env.NODE_ENV !== \"production\" &&\n\t\tprop !== \"length\" &&\n\t\tisNaN(parseInt(prop as any))\n\t)\n\t\tdie(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t  // prototype, we should invoke it with the draft as context!\n\t\t\t  desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {\n\tbase_: any\n\tcopy_: any\n\tscope_: ImmerScope\n}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(\n\t\t\tstate.base_,\n\t\t\tstate.scope_.immer_.useStrictShallowCopy_\n\t\t)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport type StrictMode = boolean | \"class_only\";\n\nexport class Immer implements ProducersFns {\n\tautoFreeze_: boolean = true\n\tuseStrictShallowCopy_: StrictMode = false\n\n\tconstructor(config?: {\n\t\tautoFreeze?: boolean\n\t\tuseStrictShallowCopy?: StrictMode\n\t}) {\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t\tif (typeof config?.useStrictShallowCopy === \"boolean\")\n\t\t\tthis.setUseStrictShallowCopy(config!.useStrictShallowCopy)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(1, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (!state || !state.isManual_) die(9)\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to enable strict shallow copy.\n\t *\n\t * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n\t */\n\tsetUseStrictShallowCopy(value: StrictMode) {\n\t\tthis.useStrictShallowCopy_ = value\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: createProxyProxy(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tisFrozen\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(10, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value) || isFrozen(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tif (state) {\n\t\tif (!state.modified_) return state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)\n\t} else {\n\t\tcopy = shallowCopy(value, true)\n\t}\n\t// recurse\n\teach(copy, (key, childValue) => {\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\tif (state) {\n\t\tstate.finalized_ = false\n\t}\n\treturn copy\n}\n","import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tProxyArrayState,\n\tMapState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tgetPrototypeOf,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tArchType,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING,\n\terrors\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst errorOffset = 16\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\terrors.push(\n\t\t\t'Sets cannot have \"replace\" patches.',\n\t\t\tfunction(op: string) {\n\t\t\t\treturn \"Unsupported patch operation: \" + op\n\t\t\t},\n\t\t\tfunction(path: string) {\n\t\t\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t\t\t},\n\t\t\t\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n\t\t)\n\t}\n\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ArchType.Object:\n\t\t\tcase ArchType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ArchType.Array:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ArchType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tfor (let i = copy_.length - 1; base_.length <= i; --i) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tinversePatches.push({\n\t\t\t\top: REMOVE,\n\t\t\t\tpath\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\tbaseValue: any,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: baseValue\n\t\t})\n\t}\n\n\tfunction applyPatches_<T>(draft: T, patches: readonly Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tlet p = path[i]\n\t\t\t\tif (typeof p !== \"string\" && typeof p !== \"number\") {\n\t\t\t\t\tp = \"\" + p\n\t\t\t\t}\n\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === ArchType.Object || parentType === ArchType.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\")\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(errorOffset + 2, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\tdie(errorOffset)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn key === \"-\"\n\t\t\t\t\t\t\t\t? base.push(value)\n\t\t\t\t\t\t\t\t: base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(errorOffset + 1, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue<T>(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded<T>(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n","// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tdie,\n\tArchType,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\tclass DraftMap extends Map {\n\t\t[DRAFT_STATE]: MapState\n\n\t\tconstructor(target: AnyMap, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tset(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tif (state.base_.has(key)) {\n\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t} else {\n\t\t\t\tstate.assigned_!.delete(key)\n\t\t\t}\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tforEach(cb: (value: any, key: any, self: any) => void, thisArg?: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tget(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.entries()\n\t\t}\n\t}\n\n\tfunction proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tclass DraftSet extends Set {\n\t\t[DRAFT_STATE]: SetState\n\t\tconstructor(target: AnySet, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tadd(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn this.values()\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tforEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\t}\n\tfunction proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,eAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKO,IAAM,UAAyB,OAAO,IAAI,eAAe;AAUzD,IAAM,YAA2B,OAAO,IAAI,iBAAiB;AAE7D,IAAM,cAA6B,OAAO,IAAI,aAAa;;;ACjB3D,IAAM,SACZ,QAAQ,IAAI,aAAa,eACtB;AAAA;AAAA,EAEA,SAAS,QAAgB;AACxB,WAAO,mBAAmB,yFAAyF;AAAA,EACpH;AAAA,EACA,SAAS,OAAe;AACvB,WAAO,sJAAsJ;AAAA,EAC9J;AAAA,EACA;AAAA,EACA,SAAS,MAAW;AACnB,WACC,yHACA;AAAA,EAEF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,OAAe;AACvB,WAAO,mCAAmC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,OAAe;AACvB,WAAO,oCAAoC;AAAA,EAC5C;AAAA;AAAA;AAGA,IACA,CAAC;AAEE,SAAS,IAAI,UAAkB,MAAoB;AACzD,MAAI,QAAQ,IAAI,aAAa,cAAc;AAC1C,UAAM,IAAI,OAAO,KAAK;AACtB,UAAM,MAAM,OAAO,MAAM,aAAa,EAAE,MAAM,MAAM,IAAW,IAAI;AACnE,UAAM,IAAI,MAAM,WAAW,KAAK;AAAA,EACjC;AACA,QAAM,IAAI;AAAA,IACT,8BAA8B;AAAA,EAC/B;AACD;;;ACjCO,IAAM,iBAAiB,OAAO;AAI9B,SAAS,QAAQ,OAAqB;AAC5C,SAAO,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,WAAW;AACtC;AAIO,SAAS,YAAY,OAAqB;AAChD,MAAI,CAAC;AAAO,WAAO;AACnB,SACC,cAAc,KAAK,KACnB,MAAM,QAAQ,KAAK,KACnB,CAAC,CAAC,MAAM,SAAS,KACjB,CAAC,CAAC,MAAM,cAAc,SAAS,KAC/B,MAAM,KAAK,KACX,MAAM,KAAK;AAEb;AAEA,IAAM,mBAAmB,OAAO,UAAU,YAAY,SAAS;AAExD,SAAS,cAAc,OAAqB;AAClD,MAAI,CAAC,SAAS,OAAO,UAAU;AAAU,WAAO;AAChD,QAAM,QAAQ,eAAe,KAAK;AAClC,MAAI,UAAU,MAAM;AACnB,WAAO;AAAA,EACR;AACA,QAAM,OACL,OAAO,eAAe,KAAK,OAAO,aAAa,KAAK,MAAM;AAE3D,MAAI,SAAS;AAAQ,WAAO;AAE5B,SACC,OAAO,QAAQ,cACf,SAAS,SAAS,KAAK,IAAI,MAAM;AAEnC;AAKO,SAAS,SAAS,OAA0B;AAClD,MAAI,CAAC,QAAQ,KAAK;AAAG,QAAI,IAAI,KAAK;AAClC,SAAO,MAAM,WAAW,EAAE;AAC3B;AAWO,SAAS,KAAK,KAAU,MAAW;AACzC,MAAI,YAAY,GAAG,sBAAuB;AACzC,YAAQ,QAAQ,GAAG,EAAE,QAAQ,SAAO;AACnC,WAAK,KAAK,IAAI,GAAG,GAAG,GAAG;AAAA,IACxB,CAAC;AAAA,EACF,OAAO;AACN,QAAI,QAAQ,CAAC,OAAY,UAAe,KAAK,OAAO,OAAO,GAAG,CAAC;AAAA,EAChE;AACD;AAGO,SAAS,YAAY,OAAsB;AACjD,QAAM,QAAgC,MAAM,WAAW;AACvD,SAAO,QACJ,MAAM,QACN,MAAM,QAAQ,KAAK,oBAEnB,MAAM,KAAK,kBAEX,MAAM,KAAK;AAGf;AAGO,SAAS,IAAI,OAAY,MAA4B;AAC3D,SAAO,YAAY,KAAK,oBACrB,MAAM,IAAI,IAAI,IACd,OAAO,UAAU,eAAe,KAAK,OAAO,IAAI;AACpD;AAGO,SAAS,IAAI,OAA2B,MAAwB;AAEtE,SAAO,YAAY,KAAK,oBAAqB,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI;AAC1E;AAGO,SAAS,IAAI,OAAY,gBAA6B,OAAY;AACxE,QAAM,IAAI,YAAY,KAAK;AAC3B,MAAI;AAAoB,UAAM,IAAI,gBAAgB,KAAK;AAAA,WAC9C,mBAAoB;AAC5B,UAAM,IAAI,KAAK;AAAA,EAChB;AAAO,UAAM,cAAc,IAAI;AAChC;AAGO,SAAS,GAAG,GAAQ,GAAiB;AAE3C,MAAI,MAAM,GAAG;AACZ,WAAO,MAAM,KAAK,IAAI,MAAM,IAAI;AAAA,EACjC,OAAO;AACN,WAAO,MAAM,KAAK,MAAM;AAAA,EACzB;AACD;AAGO,SAAS,MAAM,QAA+B;AACpD,SAAO,kBAAkB;AAC1B;AAGO,SAAS,MAAM,QAA+B;AACpD,SAAO,kBAAkB;AAC1B;AAEO,SAAS,OAAO,OAAwB;AAC9C,SAAO,MAAM,SAAS,MAAM;AAC7B;AAGO,SAAS,YAAY,MAAW,QAAoB;AAC1D,MAAI,MAAM,IAAI,GAAG;AAChB,WAAO,IAAI,IAAI,IAAI;AAAA,EACpB;AACA,MAAI,MAAM,IAAI,GAAG;AAChB,WAAO,IAAI,IAAI,IAAI;AAAA,EACpB;AACA,MAAI,MAAM,QAAQ,IAAI;AAAG,WAAO,MAAM,UAAU,MAAM,KAAK,IAAI;AAE/D,QAAM,UAAU,cAAc,IAAI;AAElC,MAAI,WAAW,QAAS,WAAW,gBAAgB,CAAC,SAAU;AAE7D,UAAM,cAAc,OAAO,0BAA0B,IAAI;AACzD,WAAO,YAAY,WAAkB;AACrC,QAAI,OAAO,QAAQ,QAAQ,WAAW;AACtC,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACrC,YAAM,MAAW,KAAK,CAAC;AACvB,YAAM,OAAO,YAAY,GAAG;AAC5B,UAAI,KAAK,aAAa,OAAO;AAC5B,aAAK,WAAW;AAChB,aAAK,eAAe;AAAA,MACrB;AAIA,UAAI,KAAK,OAAO,KAAK;AACpB,oBAAY,GAAG,IAAI;AAAA,UAClB,cAAc;AAAA,UACd,UAAU;AAAA;AAAA,UACV,YAAY,KAAK;AAAA,UACjB,OAAO,KAAK,GAAG;AAAA,QAChB;AAAA,IACF;AACA,WAAO,OAAO,OAAO,eAAe,IAAI,GAAG,WAAW;AAAA,EACvD,OAAO;AAEN,UAAM,QAAQ,eAAe,IAAI;AACjC,QAAI,UAAU,QAAQ,SAAS;AAC9B,aAAO,EAAC,GAAG,KAAI;AAAA,IAChB;AACA,UAAM,MAAM,OAAO,OAAO,KAAK;AAC/B,WAAO,OAAO,OAAO,KAAK,IAAI;AAAA,EAC/B;AACD;AAUO,SAAS,OAAU,KAAU,OAAgB,OAAU;AAC7D,MAAI,SAAS,GAAG,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG;AAAG,WAAO;AAC/D,MAAI,YAAY,GAAG,IAAI,GAAoB;AAC1C,QAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI,SAAS;AAAA,EAC9C;AACA,SAAO,OAAO,GAAG;AACjB,MAAI;AAGH,WAAO,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,OAAO,OAAO,IAAI,CAAC;AAClE,SAAO;AACR;AAEA,SAAS,8BAA8B;AACtC,MAAI,CAAC;AACN;AAEO,SAAS,SAAS,KAAmB;AAC3C,SAAO,OAAO,SAAS,GAAG;AAC3B;;;AC5MA,IAAM,UAoBF,CAAC;AAIE,SAAS,UACf,WACiC;AACjC,QAAM,SAAS,QAAQ,SAAS;AAChC,MAAI,CAAC,QAAQ;AACZ,QAAI,GAAG,SAAS;AAAA,EACjB;AAEA,SAAO;AACR;AAEO,SAAS,WACf,WACA,gBACO;AACP,MAAI,CAAC,QAAQ,SAAS;AAAG,YAAQ,SAAS,IAAI;AAC/C;;;AC5BA,IAAI;AAEG,SAAS,kBAAkB;AACjC,SAAO;AACR;AAEA,SAAS,YACR,SACA,QACa;AACb,SAAO;AAAA,IACN,SAAS,CAAC;AAAA,IACV;AAAA,IACA;AAAA;AAAA;AAAA,IAGA,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,EACrB;AACD;AAEO,SAAS,kBACf,OACA,eACC;AACD,MAAI,eAAe;AAClB,cAAU,SAAS;AACnB,UAAM,WAAW,CAAC;AAClB,UAAM,kBAAkB,CAAC;AACzB,UAAM,iBAAiB;AAAA,EACxB;AACD;AAEO,SAAS,YAAY,OAAmB;AAC9C,aAAW,KAAK;AAChB,QAAM,QAAQ,QAAQ,WAAW;AAEjC,QAAM,UAAU;AACjB;AAEO,SAAS,WAAW,OAAmB;AAC7C,MAAI,UAAU,cAAc;AAC3B,mBAAe,MAAM;AAAA,EACtB;AACD;AAEO,SAAS,WAAWC,QAAc;AACxC,SAAQ,eAAe,YAAY,cAAcA,MAAK;AACvD;AAEA,SAAS,YAAY,OAAgB;AACpC,QAAM,QAAoB,MAAM,WAAW;AAC3C,MAAI,MAAM,4BAA6B,MAAM;AAC5C,UAAM,QAAQ;AAAA;AACV,UAAM,WAAW;AACvB;;;AC3DO,SAAS,cAAc,QAAa,OAAmB;AAC7D,QAAM,qBAAqB,MAAM,QAAQ;AACzC,QAAM,YAAY,MAAM,QAAS,CAAC;AAClC,QAAM,aAAa,WAAW,UAAa,WAAW;AACtD,MAAI,YAAY;AACf,QAAI,UAAU,WAAW,EAAE,WAAW;AACrC,kBAAY,KAAK;AACjB,UAAI,CAAC;AAAA,IACN;AACA,QAAI,YAAY,MAAM,GAAG;AAExB,eAAS,SAAS,OAAO,MAAM;AAC/B,UAAI,CAAC,MAAM;AAAS,oBAAY,OAAO,MAAM;AAAA,IAC9C;AACA,QAAI,MAAM,UAAU;AACnB,gBAAU,SAAS,EAAE;AAAA,QACpB,UAAU,WAAW,EAAE;AAAA,QACvB;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD,OAAO;AAEN,aAAS,SAAS,OAAO,WAAW,CAAC,CAAC;AAAA,EACvC;AACA,cAAY,KAAK;AACjB,MAAI,MAAM,UAAU;AACnB,UAAM,eAAgB,MAAM,UAAU,MAAM,eAAgB;AAAA,EAC7D;AACA,SAAO,WAAW,UAAU,SAAS;AACtC;AAEA,SAAS,SAAS,WAAuB,OAAY,MAAkB;AAEtE,MAAI,SAAS,KAAK;AAAG,WAAO;AAE5B,QAAM,QAAoB,MAAM,WAAW;AAE3C,MAAI,CAAC,OAAO;AACX;AAAA,MAAK;AAAA,MAAO,CAAC,KAAK,eACjB,iBAAiB,WAAW,OAAO,OAAO,KAAK,YAAY,IAAI;AAAA,IAChE;AACA,WAAO;AAAA,EACR;AAEA,MAAI,MAAM,WAAW;AAAW,WAAO;AAEvC,MAAI,CAAC,MAAM,WAAW;AACrB,gBAAY,WAAW,MAAM,OAAO,IAAI;AACxC,WAAO,MAAM;AAAA,EACd;AAEA,MAAI,CAAC,MAAM,YAAY;AACtB,UAAM,aAAa;AACnB,UAAM,OAAO;AACb,UAAM,SAAS,MAAM;AAKrB,QAAI,aAAa;AACjB,QAAIC,SAAQ;AACZ,QAAI,MAAM,uBAAwB;AACjC,mBAAa,IAAI,IAAI,MAAM;AAC3B,aAAO,MAAM;AACb,MAAAA,SAAQ;AAAA,IACT;AACA;AAAA,MAAK;AAAA,MAAY,CAAC,KAAK,eACtB,iBAAiB,WAAW,OAAO,QAAQ,KAAK,YAAY,MAAMA,MAAK;AAAA,IACxE;AAEA,gBAAY,WAAW,QAAQ,KAAK;AAEpC,QAAI,QAAQ,UAAU,UAAU;AAC/B,gBAAU,SAAS,EAAE;AAAA,QACpB;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,UAAU;AAAA,MACX;AAAA,IACD;AAAA,EACD;AACA,SAAO,MAAM;AACd;AAEA,SAAS,iBACR,WACA,aACA,cACA,MACA,YACA,UACA,aACC;AACD,MAAI,QAAQ,IAAI,aAAa,gBAAgB,eAAe;AAC3D,QAAI,CAAC;AACN,MAAI,QAAQ,UAAU,GAAG;AACxB,UAAM,OACL,YACA,eACA,YAAa;AAAA,IACb,CAAC,IAAK,YAA8C,WAAY,IAAI,IACjE,SAAU,OAAO,IAAI,IACrB;AAEJ,UAAM,MAAM,SAAS,WAAW,YAAY,IAAI;AAChD,QAAI,cAAc,MAAM,GAAG;AAG3B,QAAI,QAAQ,GAAG,GAAG;AACjB,gBAAU,iBAAiB;AAAA,IAC5B;AAAO;AAAA,EACR,WAAW,aAAa;AACvB,iBAAa,IAAI,UAAU;AAAA,EAC5B;AAEA,MAAI,YAAY,UAAU,KAAK,CAAC,SAAS,UAAU,GAAG;AACrD,QAAI,CAAC,UAAU,OAAO,eAAe,UAAU,qBAAqB,GAAG;AAMtE;AAAA,IACD;AACA,aAAS,WAAW,UAAU;AAI9B,SACE,CAAC,eAAe,CAAC,YAAY,OAAO,YACrC,OAAO,SAAS,YAChB,OAAO,UAAU,qBAAqB,KAAK,cAAc,IAAI;AAE7D,kBAAY,WAAW,UAAU;AAAA,EACnC;AACD;AAEA,SAAS,YAAY,OAAmB,OAAY,OAAO,OAAO;AAEjE,MAAI,CAAC,MAAM,WAAW,MAAM,OAAO,eAAe,MAAM,gBAAgB;AACvE,WAAO,OAAO,IAAI;AAAA,EACnB;AACD;;;ACjHO,SAAS,iBACf,MACA,QACyB;AACzB,QAAM,UAAU,MAAM,QAAQ,IAAI;AAClC,QAAM,QAAoB;AAAA,IACzB,OAAO;AAAA;AAAA,IAEP,QAAQ,SAAS,OAAO,SAAS,gBAAgB;AAAA;AAAA,IAEjD,WAAW;AAAA;AAAA,IAEX,YAAY;AAAA;AAAA,IAEZ,WAAW,CAAC;AAAA;AAAA,IAEZ,SAAS;AAAA;AAAA,IAET,OAAO;AAAA;AAAA,IAEP,QAAQ;AAAA;AAAA;AAAA,IAER,OAAO;AAAA;AAAA,IAEP,SAAS;AAAA,IACT,WAAW;AAAA,EACZ;AAQA,MAAI,SAAY;AAChB,MAAI,QAA2C;AAC/C,MAAI,SAAS;AACZ,aAAS,CAAC,KAAK;AACf,YAAQ;AAAA,EACT;AAEA,QAAM,EAAC,QAAQ,MAAK,IAAI,MAAM,UAAU,QAAQ,KAAK;AACrD,QAAM,SAAS;AACf,QAAM,UAAU;AAChB,SAAO;AACR;AAKO,IAAM,cAAwC;AAAA,EACpD,IAAI,OAAO,MAAM;AAChB,QAAI,SAAS;AAAa,aAAO;AAEjC,UAAM,SAAS,OAAO,KAAK;AAC3B,QAAI,CAAC,IAAI,QAAQ,IAAI,GAAG;AAEvB,aAAO,kBAAkB,OAAO,QAAQ,IAAI;AAAA,IAC7C;AACA,UAAM,QAAQ,OAAO,IAAI;AACzB,QAAI,MAAM,cAAc,CAAC,YAAY,KAAK,GAAG;AAC5C,aAAO;AAAA,IACR;AAGA,QAAI,UAAU,KAAK,MAAM,OAAO,IAAI,GAAG;AACtC,kBAAY,KAAK;AACjB,aAAQ,MAAM,MAAO,IAAW,IAAI,YAAY,OAAO,KAAK;AAAA,IAC7D;AACA,WAAO;AAAA,EACR;AAAA,EACA,IAAI,OAAO,MAAM;AAChB,WAAO,QAAQ,OAAO,KAAK;AAAA,EAC5B;AAAA,EACA,QAAQ,OAAO;AACd,WAAO,QAAQ,QAAQ,OAAO,KAAK,CAAC;AAAA,EACrC;AAAA,EACA,IACC,OACA,MACA,OACC;AACD,UAAM,OAAO,uBAAuB,OAAO,KAAK,GAAG,IAAI;AACvD,QAAI,MAAM,KAAK;AAGd,WAAK,IAAI,KAAK,MAAM,QAAQ,KAAK;AACjC,aAAO;AAAA,IACR;AACA,QAAI,CAAC,MAAM,WAAW;AAGrB,YAAMC,WAAU,KAAK,OAAO,KAAK,GAAG,IAAI;AAExC,YAAM,eAAiCA,WAAU,WAAW;AAC5D,UAAI,gBAAgB,aAAa,UAAU,OAAO;AACjD,cAAM,MAAO,IAAI,IAAI;AACrB,cAAM,UAAU,IAAI,IAAI;AACxB,eAAO;AAAA,MACR;AACA,UAAI,GAAG,OAAOA,QAAO,MAAM,UAAU,UAAa,IAAI,MAAM,OAAO,IAAI;AACtE,eAAO;AACR,kBAAY,KAAK;AACjB,kBAAY,KAAK;AAAA,IAClB;AAEA,QACE,MAAM,MAAO,IAAI,MAAM;AAAA,KAEtB,UAAU,UAAa,QAAQ,MAAM;AAAA,IAEtC,OAAO,MAAM,KAAK,KAAK,OAAO,MAAM,MAAM,MAAO,IAAI,CAAC;AAEvD,aAAO;AAGR,UAAM,MAAO,IAAI,IAAI;AACrB,UAAM,UAAU,IAAI,IAAI;AACxB,WAAO;AAAA,EACR;AAAA,EACA,eAAe,OAAO,MAAc;AAEnC,QAAI,KAAK,MAAM,OAAO,IAAI,MAAM,UAAa,QAAQ,MAAM,OAAO;AACjE,YAAM,UAAU,IAAI,IAAI;AACxB,kBAAY,KAAK;AACjB,kBAAY,KAAK;AAAA,IAClB,OAAO;AAEN,aAAO,MAAM,UAAU,IAAI;AAAA,IAC5B;AACA,QAAI,MAAM,OAAO;AAChB,aAAO,MAAM,MAAM,IAAI;AAAA,IACxB;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA,EAGA,yBAAyB,OAAO,MAAM;AACrC,UAAM,QAAQ,OAAO,KAAK;AAC1B,UAAM,OAAO,QAAQ,yBAAyB,OAAO,IAAI;AACzD,QAAI,CAAC;AAAM,aAAO;AAClB,WAAO;AAAA,MACN,UAAU;AAAA,MACV,cAAc,MAAM,2BAA4B,SAAS;AAAA,MACzD,YAAY,KAAK;AAAA,MACjB,OAAO,MAAM,IAAI;AAAA,IAClB;AAAA,EACD;AAAA,EACA,iBAAiB;AAChB,QAAI,EAAE;AAAA,EACP;AAAA,EACA,eAAe,OAAO;AACrB,WAAO,eAAe,MAAM,KAAK;AAAA,EAClC;AAAA,EACA,iBAAiB;AAChB,QAAI,EAAE;AAAA,EACP;AACD;AAMA,IAAM,aAA8C,CAAC;AACrD,KAAK,aAAa,CAAC,KAAK,OAAO;AAE9B,aAAW,GAAG,IAAI,WAAW;AAC5B,cAAU,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC;AAC7B,WAAO,GAAG,MAAM,MAAM,SAAS;AAAA,EAChC;AACD,CAAC;AACD,WAAW,iBAAiB,SAAS,OAAO,MAAM;AACjD,MAAI,QAAQ,IAAI,aAAa,gBAAgB,MAAM,SAAS,IAAW,CAAC;AACvE,QAAI,EAAE;AAEP,SAAO,WAAW,IAAK,KAAK,MAAM,OAAO,MAAM,MAAS;AACzD;AACA,WAAW,MAAM,SAAS,OAAO,MAAM,OAAO;AAC7C,MACC,QAAQ,IAAI,aAAa,gBACzB,SAAS,YACT,MAAM,SAAS,IAAW,CAAC;AAE3B,QAAI,EAAE;AACP,SAAO,YAAY,IAAK,KAAK,MAAM,MAAM,CAAC,GAAG,MAAM,OAAO,MAAM,CAAC,CAAC;AACnE;AAGA,SAAS,KAAK,OAAgB,MAAmB;AAChD,QAAM,QAAQ,MAAM,WAAW;AAC/B,QAAM,SAAS,QAAQ,OAAO,KAAK,IAAI;AACvC,SAAO,OAAO,IAAI;AACnB;AAEA,SAAS,kBAAkB,OAAmB,QAAa,MAAmB;AAC7E,QAAM,OAAO,uBAAuB,QAAQ,IAAI;AAChD,SAAO,OACJ,WAAW,OACV,KAAK;AAAA;AAAA;AAAA,IAGL,KAAK,KAAK,KAAK,MAAM,MAAM;AAAA,MAC5B;AACJ;AAEA,SAAS,uBACR,QACA,MACiC;AAEjC,MAAI,EAAE,QAAQ;AAAS,WAAO;AAC9B,MAAI,QAAQ,eAAe,MAAM;AACjC,SAAO,OAAO;AACb,UAAM,OAAO,OAAO,yBAAyB,OAAO,IAAI;AACxD,QAAI;AAAM,aAAO;AACjB,YAAQ,eAAe,KAAK;AAAA,EAC7B;AACA,SAAO;AACR;AAEO,SAAS,YAAY,OAAmB;AAC9C,MAAI,CAAC,MAAM,WAAW;AACrB,UAAM,YAAY;AAClB,QAAI,MAAM,SAAS;AAClB,kBAAY,MAAM,OAAO;AAAA,IAC1B;AAAA,EACD;AACD;AAEO,SAAS,YAAY,OAIzB;AACF,MAAI,CAAC,MAAM,OAAO;AACjB,UAAM,QAAQ;AAAA,MACb,MAAM;AAAA,MACN,MAAM,OAAO,OAAO;AAAA,IACrB;AAAA,EACD;AACD;;;AChQO,IAAMC,SAAN,MAAoC;AAAA,EAI1C,YAAY,QAGT;AANH,uBAAuB;AACvB,iCAAoC;AA+BpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAoB,CAAC,MAAW,QAAc,kBAAwB;AAErE,UAAI,OAAO,SAAS,cAAc,OAAO,WAAW,YAAY;AAC/D,cAAM,cAAc;AACpB,iBAAS;AAET,cAAM,OAAO;AACb,eAAO,SAAS,eAEfC,QAAO,gBACJ,MACF;AACD,iBAAO,KAAK,QAAQA,OAAM,CAAC,UAAmB,OAAO,KAAK,MAAM,OAAO,GAAG,IAAI,CAAC;AAAA,QAChF;AAAA,MACD;AAEA,UAAI,OAAO,WAAW;AAAY,YAAI,CAAC;AACvC,UAAI,kBAAkB,UAAa,OAAO,kBAAkB;AAC3D,YAAI,CAAC;AAEN,UAAI;AAGJ,UAAI,YAAY,IAAI,GAAG;AACtB,cAAM,QAAQ,WAAW,IAAI;AAC7B,cAAM,QAAQ,YAAY,MAAM,MAAS;AACzC,YAAI,WAAW;AACf,YAAI;AACH,mBAAS,OAAO,KAAK;AACrB,qBAAW;AAAA,QACZ,UAAE;AAED,cAAI;AAAU,wBAAY,KAAK;AAAA;AAC1B,uBAAW,KAAK;AAAA,QACtB;AACA,0BAAkB,OAAO,aAAa;AACtC,eAAO,cAAc,QAAQ,KAAK;AAAA,MACnC,WAAW,CAAC,QAAQ,OAAO,SAAS,UAAU;AAC7C,iBAAS,OAAO,IAAI;AACpB,YAAI,WAAW;AAAW,mBAAS;AACnC,YAAI,WAAW;AAAS,mBAAS;AACjC,YAAI,KAAK;AAAa,iBAAO,QAAQ,IAAI;AACzC,YAAI,eAAe;AAClB,gBAAM,IAAa,CAAC;AACpB,gBAAM,KAAc,CAAC;AACrB,oBAAU,SAAS,EAAE,4BAA4B,MAAM,QAAQ,GAAG,EAAE;AACpE,wBAAc,GAAG,EAAE;AAAA,QACpB;AACA,eAAO;AAAA,MACR;AAAO,YAAI,GAAG,IAAI;AAAA,IACnB;AAEA,8BAA0C,CAAC,MAAW,WAAsB;AAE3E,UAAI,OAAO,SAAS,YAAY;AAC/B,eAAO,CAAC,UAAe,SACtB,KAAK,mBAAmB,OAAO,CAAC,UAAe,KAAK,OAAO,GAAG,IAAI,CAAC;AAAA,MACrE;AAEA,UAAI,SAAkB;AACtB,YAAM,SAAS,KAAK,QAAQ,MAAM,QAAQ,CAAC,GAAY,OAAgB;AACtE,kBAAU;AACV,yBAAiB;AAAA,MAClB,CAAC;AACD,aAAO,CAAC,QAAQ,SAAU,cAAe;AAAA,IAC1C;AA1FC,QAAI,OAAO,QAAQ,eAAe;AACjC,WAAK,cAAc,OAAQ,UAAU;AACtC,QAAI,OAAO,QAAQ,yBAAyB;AAC3C,WAAK,wBAAwB,OAAQ,oBAAoB;AAAA,EAC3D;AAAA,EAwFA,YAAiC,MAAmB;AACnD,QAAI,CAAC,YAAY,IAAI;AAAG,UAAI,CAAC;AAC7B,QAAI,QAAQ,IAAI;AAAG,aAAO,QAAQ,IAAI;AACtC,UAAM,QAAQ,WAAW,IAAI;AAC7B,UAAM,QAAQ,YAAY,MAAM,MAAS;AACzC,UAAM,WAAW,EAAE,YAAY;AAC/B,eAAW,KAAK;AAChB,WAAO;AAAA,EACR;AAAA,EAEA,YACC,OACA,eACuC;AACvC,UAAM,QAAoB,SAAU,MAAc,WAAW;AAC7D,QAAI,CAAC,SAAS,CAAC,MAAM;AAAW,UAAI,CAAC;AACrC,UAAM,EAAC,QAAQ,MAAK,IAAI;AACxB,sBAAkB,OAAO,aAAa;AACtC,WAAO,cAAc,QAAW,KAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAc,OAAgB;AAC7B,SAAK,cAAc;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAwB,OAAmB;AAC1C,SAAK,wBAAwB;AAAA,EAC9B;AAAA,EAEA,aAAkC,MAAS,SAA8B;AAGxE,QAAI;AACJ,SAAK,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AACzC,YAAM,QAAQ,QAAQ,CAAC;AACvB,UAAI,MAAM,KAAK,WAAW,KAAK,MAAM,OAAO,WAAW;AACtD,eAAO,MAAM;AACb;AAAA,MACD;AAAA,IACD;AAGA,QAAI,IAAI,IAAI;AACX,gBAAU,QAAQ,MAAM,IAAI,CAAC;AAAA,IAC9B;AAEA,UAAM,mBAAmB,UAAU,SAAS,EAAE;AAC9C,QAAI,QAAQ,IAAI,GAAG;AAElB,aAAO,iBAAiB,MAAM,OAAO;AAAA,IACtC;AAEA,WAAO,KAAK;AAAA,MAAQ;AAAA,MAAM,CAAC,UAC1B,iBAAiB,OAAO,OAAO;AAAA,IAChC;AAAA,EACD;AACD;AAEO,SAAS,YACf,OACA,QACyB;AAEzB,QAAM,QAAiB,MAAM,KAAK,IAC/B,UAAU,QAAQ,EAAE,UAAU,OAAO,MAAM,IAC3C,MAAM,KAAK,IACX,UAAU,QAAQ,EAAE,UAAU,OAAO,MAAM,IAC3C,iBAAiB,OAAO,MAAM;AAEjC,QAAM,QAAQ,SAAS,OAAO,SAAS,gBAAgB;AACvD,QAAM,QAAQ,KAAK,KAAK;AACxB,SAAO;AACR;;;AC3MO,SAAS,QAAQ,OAAiB;AACxC,MAAI,CAAC,QAAQ,KAAK;AAAG,QAAI,IAAI,KAAK;AAClC,SAAO,YAAY,KAAK;AACzB;AAEA,SAAS,YAAY,OAAiB;AACrC,MAAI,CAAC,YAAY,KAAK,KAAK,SAAS,KAAK;AAAG,WAAO;AACnD,QAAM,QAAgC,MAAM,WAAW;AACvD,MAAI;AACJ,MAAI,OAAO;AACV,QAAI,CAAC,MAAM;AAAW,aAAO,MAAM;AAEnC,UAAM,aAAa;AACnB,WAAO,YAAY,OAAO,MAAM,OAAO,OAAO,qBAAqB;AAAA,EACpE,OAAO;AACN,WAAO,YAAY,OAAO,IAAI;AAAA,EAC/B;AAEA,OAAK,MAAM,CAAC,KAAK,eAAe;AAC/B,QAAI,MAAM,KAAK,YAAY,UAAU,CAAC;AAAA,EACvC,CAAC;AACD,MAAI,OAAO;AACV,UAAM,aAAa;AAAA,EACpB;AACA,SAAO;AACR;;;ACdO,SAAS,gBAAgB;AAC/B,QAAM,cAAc;AACpB,MAAI,QAAQ,IAAI,aAAa,cAAc;AAC1C,WAAO;AAAA,MACN;AAAA,MACA,SAAS,IAAY;AACpB,eAAO,kCAAkC;AAAA,MAC1C;AAAA,MACA,SAAS,MAAc;AACtB,eAAO,+CAA+C;AAAA,MACvD;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAEA,QAAM,UAAU;AAChB,QAAM,MAAM;AACZ,QAAM,SAAS;AAEf,WAAS,iBACR,OACA,UACA,SACA,gBACO;AACP,YAAQ,MAAM,OAAO;AAAA,MACpB;AAAA,MACA;AACC,eAAO;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,MACD;AACC,eAAO,qBAAqB,OAAO,UAAU,SAAS,cAAc;AAAA,MACrE;AACC,eAAO;AAAA,UACL;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,IACF;AAAA,EACD;AAEA,WAAS,qBACR,OACA,UACA,SACA,gBACC;AACD,QAAI,EAAC,OAAO,UAAS,IAAI;AACzB,QAAI,QAAQ,MAAM;AAGlB,QAAI,MAAM,SAAS,MAAM,QAAQ;AAEhC;AAAC,OAAC,OAAO,KAAK,IAAI,CAAC,OAAO,KAAK;AAC9B,OAAC,SAAS,cAAc,IAAI,CAAC,gBAAgB,OAAO;AAAA,IACtD;AAGA,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,UAAI,UAAU,CAAC,KAAK,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG;AAC1C,cAAM,OAAO,SAAS,OAAO,CAAC,CAAC,CAAC;AAChC,gBAAQ,KAAK;AAAA,UACZ,IAAI;AAAA,UACJ;AAAA;AAAA;AAAA,UAGA,OAAO,wBAAwB,MAAM,CAAC,CAAC;AAAA,QACxC,CAAC;AACD,uBAAe,KAAK;AAAA,UACnB,IAAI;AAAA,UACJ;AAAA,UACA,OAAO,wBAAwB,MAAM,CAAC,CAAC;AAAA,QACxC,CAAC;AAAA,MACF;AAAA,IACD;AAGA,aAAS,IAAI,MAAM,QAAQ,IAAI,MAAM,QAAQ,KAAK;AACjD,YAAM,OAAO,SAAS,OAAO,CAAC,CAAC,CAAC;AAChC,cAAQ,KAAK;AAAA,QACZ,IAAI;AAAA,QACJ;AAAA;AAAA;AAAA,QAGA,OAAO,wBAAwB,MAAM,CAAC,CAAC;AAAA,MACxC,CAAC;AAAA,IACF;AACA,aAAS,IAAI,MAAM,SAAS,GAAG,MAAM,UAAU,GAAG,EAAE,GAAG;AACtD,YAAM,OAAO,SAAS,OAAO,CAAC,CAAC,CAAC;AAChC,qBAAe,KAAK;AAAA,QACnB,IAAI;AAAA,QACJ;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAGA,WAAS,4BACR,OACA,UACA,SACA,gBACC;AACD,UAAM,EAAC,OAAO,MAAK,IAAI;AACvB,SAAK,MAAM,WAAY,CAAC,KAAK,kBAAkB;AAC9C,YAAM,YAAY,IAAI,OAAO,GAAG;AAChC,YAAM,QAAQ,IAAI,OAAQ,GAAG;AAC7B,YAAM,KAAK,CAAC,gBAAgB,SAAS,IAAI,OAAO,GAAG,IAAI,UAAU;AACjE,UAAI,cAAc,SAAS,OAAO;AAAS;AAC3C,YAAM,OAAO,SAAS,OAAO,GAAU;AACvC,cAAQ,KAAK,OAAO,SAAS,EAAC,IAAI,KAAI,IAAI,EAAC,IAAI,MAAM,MAAK,CAAC;AAC3D,qBAAe;AAAA,QACd,OAAO,MACJ,EAAC,IAAI,QAAQ,KAAI,IACjB,OAAO,SACP,EAAC,IAAI,KAAK,MAAM,OAAO,wBAAwB,SAAS,EAAC,IACzD,EAAC,IAAI,SAAS,MAAM,OAAO,wBAAwB,SAAS,EAAC;AAAA,MACjE;AAAA,IACD,CAAC;AAAA,EACF;AAEA,WAAS,mBACR,OACA,UACA,SACA,gBACC;AACD,QAAI,EAAC,OAAO,MAAK,IAAI;AAErB,QAAI,IAAI;AACR,UAAM,QAAQ,CAAC,UAAe;AAC7B,UAAI,CAAC,MAAO,IAAI,KAAK,GAAG;AACvB,cAAM,OAAO,SAAS,OAAO,CAAC,CAAC,CAAC;AAChC,gBAAQ,KAAK;AAAA,UACZ,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,QACD,CAAC;AACD,uBAAe,QAAQ;AAAA,UACtB,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF;AACA;AAAA,IACD,CAAC;AACD,QAAI;AACJ,UAAO,QAAQ,CAAC,UAAe;AAC9B,UAAI,CAAC,MAAM,IAAI,KAAK,GAAG;AACtB,cAAM,OAAO,SAAS,OAAO,CAAC,CAAC,CAAC;AAChC,gBAAQ,KAAK;AAAA,UACZ,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,QACD,CAAC;AACD,uBAAe,QAAQ;AAAA,UACtB,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF;AACA;AAAA,IACD,CAAC;AAAA,EACF;AAEA,WAAS,4BACR,WACA,aACA,SACA,gBACO;AACP,YAAQ,KAAK;AAAA,MACZ,IAAI;AAAA,MACJ,MAAM,CAAC;AAAA,MACP,OAAO,gBAAgB,UAAU,SAAY;AAAA,IAC9C,CAAC;AACD,mBAAe,KAAK;AAAA,MACnB,IAAI;AAAA,MACJ,MAAM,CAAC;AAAA,MACP,OAAO;AAAA,IACR,CAAC;AAAA,EACF;AAEA,WAAS,cAAiB,OAAU,SAA8B;AACjE,YAAQ,QAAQ,WAAS;AACxB,YAAM,EAAC,MAAM,GAAE,IAAI;AAEnB,UAAI,OAAY;AAChB,eAAS,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AACzC,cAAM,aAAa,YAAY,IAAI;AACnC,YAAI,IAAI,KAAK,CAAC;AACd,YAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AACnD,cAAI,KAAK;AAAA,QACV;AAGA,aACE,iCAAkC,kCAClC,MAAM,eAAe,MAAM;AAE5B,cAAI,cAAc,CAAC;AACpB,YAAI,OAAO,SAAS,cAAc,MAAM;AACvC,cAAI,cAAc,CAAC;AACpB,eAAO,IAAI,MAAM,CAAC;AAClB,YAAI,OAAO,SAAS;AAAU,cAAI,cAAc,GAAG,KAAK,KAAK,GAAG,CAAC;AAAA,MAClE;AAEA,YAAM,OAAO,YAAY,IAAI;AAC7B,YAAM,QAAQ,oBAAoB,MAAM,KAAK;AAC7C,YAAM,MAAM,KAAK,KAAK,SAAS,CAAC;AAChC,cAAQ,IAAI;AAAA,QACX,KAAK;AACJ,kBAAQ,MAAM;AAAA,YACb;AACC,qBAAO,KAAK,IAAI,KAAK,KAAK;AAAA,YAE3B;AACC,kBAAI,WAAW;AAAA,YAChB;AAKC,qBAAQ,KAAK,GAAG,IAAI;AAAA,UACtB;AAAA,QACD,KAAK;AACJ,kBAAQ,MAAM;AAAA,YACb;AACC,qBAAO,QAAQ,MACZ,KAAK,KAAK,KAAK,IACf,KAAK,OAAO,KAAY,GAAG,KAAK;AAAA,YACpC;AACC,qBAAO,KAAK,IAAI,KAAK,KAAK;AAAA,YAC3B;AACC,qBAAO,KAAK,IAAI,KAAK;AAAA,YACtB;AACC,qBAAQ,KAAK,GAAG,IAAI;AAAA,UACtB;AAAA,QACD,KAAK;AACJ,kBAAQ,MAAM;AAAA,YACb;AACC,qBAAO,KAAK,OAAO,KAAY,CAAC;AAAA,YACjC;AACC,qBAAO,KAAK,OAAO,GAAG;AAAA,YACvB;AACC,qBAAO,KAAK,OAAO,MAAM,KAAK;AAAA,YAC/B;AACC,qBAAO,OAAO,KAAK,GAAG;AAAA,UACxB;AAAA,QACD;AACC,cAAI,cAAc,GAAG,EAAE;AAAA,MACzB;AAAA,IACD,CAAC;AAED,WAAO;AAAA,EACR;AAMA,WAAS,oBAAoB,KAAU;AACtC,QAAI,CAAC,YAAY,GAAG;AAAG,aAAO;AAC9B,QAAI,MAAM,QAAQ,GAAG;AAAG,aAAO,IAAI,IAAI,mBAAmB;AAC1D,QAAI,MAAM,GAAG;AACZ,aAAO,IAAI;AAAA,QACV,MAAM,KAAK,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;AAAA,MACtE;AACD,QAAI,MAAM,GAAG;AAAG,aAAO,IAAI,IAAI,MAAM,KAAK,GAAG,EAAE,IAAI,mBAAmB,CAAC;AACvE,UAAM,SAAS,OAAO,OAAO,eAAe,GAAG,CAAC;AAChD,eAAW,OAAO;AAAK,aAAO,GAAG,IAAI,oBAAoB,IAAI,GAAG,CAAC;AACjE,QAAI,IAAI,KAAK,SAAS;AAAG,aAAO,SAAS,IAAI,IAAI,SAAS;AAC1D,WAAO;AAAA,EACR;AAEA,WAAS,wBAA2B,KAAW;AAC9C,QAAI,QAAQ,GAAG,GAAG;AACjB,aAAO,oBAAoB,GAAG;AAAA,IAC/B;AAAO,aAAO;AAAA,EACf;AAEA,aAAW,WAAW;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AACF;;;ACzSO,SAAS,eAAe;AAC9B,QAAM,iBAAiB,IAAI;AAAA,IAG1B,YAAY,QAAgB,QAAqB;AAChD,YAAM;AACN,WAAK,WAAW,IAAI;AAAA,QACnB;AAAA,QACA,SAAS;AAAA,QACT,QAAQ,SAAS,OAAO,SAAS,gBAAgB;AAAA,QACjD,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,UAAU;AAAA,MACX;AAAA,IACD;AAAA,IAEA,IAAI,OAAe;AAClB,aAAO,OAAO,KAAK,WAAW,CAAC,EAAE;AAAA,IAClC;AAAA,IAEA,IAAI,KAAmB;AACtB,aAAO,OAAO,KAAK,WAAW,CAAC,EAAE,IAAI,GAAG;AAAA,IACzC;AAAA,IAEA,IAAI,KAAU,OAAY;AACzB,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AACrB,UAAI,CAAC,OAAO,KAAK,EAAE,IAAI,GAAG,KAAK,OAAO,KAAK,EAAE,IAAI,GAAG,MAAM,OAAO;AAChE,uBAAe,KAAK;AACpB,oBAAY,KAAK;AACjB,cAAM,UAAW,IAAI,KAAK,IAAI;AAC9B,cAAM,MAAO,IAAI,KAAK,KAAK;AAC3B,cAAM,UAAW,IAAI,KAAK,IAAI;AAAA,MAC/B;AACA,aAAO;AAAA,IACR;AAAA,IAEA,OAAO,KAAmB;AACzB,UAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AACnB,eAAO;AAAA,MACR;AAEA,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AACrB,qBAAe,KAAK;AACpB,kBAAY,KAAK;AACjB,UAAI,MAAM,MAAM,IAAI,GAAG,GAAG;AACzB,cAAM,UAAW,IAAI,KAAK,KAAK;AAAA,MAChC,OAAO;AACN,cAAM,UAAW,OAAO,GAAG;AAAA,MAC5B;AACA,YAAM,MAAO,OAAO,GAAG;AACvB,aAAO;AAAA,IACR;AAAA,IAEA,QAAQ;AACP,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AACrB,UAAI,OAAO,KAAK,EAAE,MAAM;AACvB,uBAAe,KAAK;AACpB,oBAAY,KAAK;AACjB,cAAM,YAAY,oBAAI,IAAI;AAC1B,aAAK,MAAM,OAAO,SAAO;AACxB,gBAAM,UAAW,IAAI,KAAK,KAAK;AAAA,QAChC,CAAC;AACD,cAAM,MAAO,MAAM;AAAA,MACpB;AAAA,IACD;AAAA,IAEA,QAAQ,IAA+C,SAAe;AACrE,YAAM,QAAkB,KAAK,WAAW;AACxC,aAAO,KAAK,EAAE,QAAQ,CAAC,QAAa,KAAU,SAAc;AAC3D,WAAG,KAAK,SAAS,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI;AAAA,MAC1C,CAAC;AAAA,IACF;AAAA,IAEA,IAAI,KAAe;AAClB,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AACrB,YAAM,QAAQ,OAAO,KAAK,EAAE,IAAI,GAAG;AACnC,UAAI,MAAM,cAAc,CAAC,YAAY,KAAK,GAAG;AAC5C,eAAO;AAAA,MACR;AACA,UAAI,UAAU,MAAM,MAAM,IAAI,GAAG,GAAG;AACnC,eAAO;AAAA,MACR;AAEA,YAAM,QAAQ,YAAY,OAAO,KAAK;AACtC,qBAAe,KAAK;AACpB,YAAM,MAAO,IAAI,KAAK,KAAK;AAC3B,aAAO;AAAA,IACR;AAAA,IAEA,OAA8B;AAC7B,aAAO,OAAO,KAAK,WAAW,CAAC,EAAE,KAAK;AAAA,IACvC;AAAA,IAEA,SAAgC;AAC/B,YAAM,WAAW,KAAK,KAAK;AAC3B,aAAO;AAAA,QACN,CAAC,OAAO,QAAQ,GAAG,MAAM,KAAK,OAAO;AAAA,QACrC,MAAM,MAAM;AACX,gBAAM,IAAI,SAAS,KAAK;AAExB,cAAI,EAAE;AAAM,mBAAO;AACnB,gBAAM,QAAQ,KAAK,IAAI,EAAE,KAAK;AAC9B,iBAAO;AAAA,YACN,MAAM;AAAA,YACN;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IAEA,UAAwC;AACvC,YAAM,WAAW,KAAK,KAAK;AAC3B,aAAO;AAAA,QACN,CAAC,OAAO,QAAQ,GAAG,MAAM,KAAK,QAAQ;AAAA,QACtC,MAAM,MAAM;AACX,gBAAM,IAAI,SAAS,KAAK;AAExB,cAAI,EAAE;AAAM,mBAAO;AACnB,gBAAM,QAAQ,KAAK,IAAI,EAAE,KAAK;AAC9B,iBAAO;AAAA,YACN,MAAM;AAAA,YACN,OAAO,CAAC,EAAE,OAAO,KAAK;AAAA,UACvB;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IAEA,EAtIC,aAsIA,OAAO,SAAQ,IAAI;AACnB,aAAO,KAAK,QAAQ;AAAA,IACrB;AAAA,EACD;AAEA,WAAS,UAA4B,QAAW,QAAwB;AAEvE,WAAO,IAAI,SAAS,QAAQ,MAAM;AAAA,EACnC;AAEA,WAAS,eAAe,OAAiB;AACxC,QAAI,CAAC,MAAM,OAAO;AACjB,YAAM,YAAY,oBAAI,IAAI;AAC1B,YAAM,QAAQ,IAAI,IAAI,MAAM,KAAK;AAAA,IAClC;AAAA,EACD;AAEA,QAAM,iBAAiB,IAAI;AAAA,IAE1B,YAAY,QAAgB,QAAqB;AAChD,YAAM;AACN,WAAK,WAAW,IAAI;AAAA,QACnB;AAAA,QACA,SAAS;AAAA,QACT,QAAQ,SAAS,OAAO,SAAS,gBAAgB;AAAA,QACjD,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS,oBAAI,IAAI;AAAA,QACjB,UAAU;AAAA,QACV,WAAW;AAAA,MACZ;AAAA,IACD;AAAA,IAEA,IAAI,OAAe;AAClB,aAAO,OAAO,KAAK,WAAW,CAAC,EAAE;AAAA,IAClC;AAAA,IAEA,IAAI,OAAqB;AACxB,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AAErB,UAAI,CAAC,MAAM,OAAO;AACjB,eAAO,MAAM,MAAM,IAAI,KAAK;AAAA,MAC7B;AACA,UAAI,MAAM,MAAM,IAAI,KAAK;AAAG,eAAO;AACnC,UAAI,MAAM,QAAQ,IAAI,KAAK,KAAK,MAAM,MAAM,IAAI,MAAM,QAAQ,IAAI,KAAK,CAAC;AACvE,eAAO;AACR,aAAO;AAAA,IACR;AAAA,IAEA,IAAI,OAAiB;AACpB,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AACrB,UAAI,CAAC,KAAK,IAAI,KAAK,GAAG;AACrB,uBAAe,KAAK;AACpB,oBAAY,KAAK;AACjB,cAAM,MAAO,IAAI,KAAK;AAAA,MACvB;AACA,aAAO;AAAA,IACR;AAAA,IAEA,OAAO,OAAiB;AACvB,UAAI,CAAC,KAAK,IAAI,KAAK,GAAG;AACrB,eAAO;AAAA,MACR;AAEA,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AACrB,qBAAe,KAAK;AACpB,kBAAY,KAAK;AACjB,aACC,MAAM,MAAO,OAAO,KAAK,MACxB,MAAM,QAAQ,IAAI,KAAK,IACrB,MAAM,MAAO,OAAO,MAAM,QAAQ,IAAI,KAAK,CAAC;AAAA;AAAA,QACjB;AAAA;AAAA,IAEhC;AAAA,IAEA,QAAQ;AACP,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AACrB,UAAI,OAAO,KAAK,EAAE,MAAM;AACvB,uBAAe,KAAK;AACpB,oBAAY,KAAK;AACjB,cAAM,MAAO,MAAM;AAAA,MACpB;AAAA,IACD;AAAA,IAEA,SAAgC;AAC/B,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AACrB,qBAAe,KAAK;AACpB,aAAO,MAAM,MAAO,OAAO;AAAA,IAC5B;AAAA,IAEA,UAAwC;AACvC,YAAM,QAAkB,KAAK,WAAW;AACxC,sBAAgB,KAAK;AACrB,qBAAe,KAAK;AACpB,aAAO,MAAM,MAAO,QAAQ;AAAA,IAC7B;AAAA,IAEA,OAA8B;AAC7B,aAAO,KAAK,OAAO;AAAA,IACpB;AAAA,IAEA,EA3FC,aA2FA,OAAO,SAAQ,IAAI;AACnB,aAAO,KAAK,OAAO;AAAA,IACpB;AAAA,IAEA,QAAQ,IAAS,SAAe;AAC/B,YAAM,WAAW,KAAK,OAAO;AAC7B,UAAI,SAAS,SAAS,KAAK;AAC3B,aAAO,CAAC,OAAO,MAAM;AACpB,WAAG,KAAK,SAAS,OAAO,OAAO,OAAO,OAAO,IAAI;AACjD,iBAAS,SAAS,KAAK;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AACA,WAAS,UAA4B,QAAW,QAAwB;AAEvE,WAAO,IAAI,SAAS,QAAQ,MAAM;AAAA,EACnC;AAEA,WAAS,eAAe,OAAiB;AACxC,QAAI,CAAC,MAAM,OAAO;AAEjB,YAAM,QAAQ,oBAAI,IAAI;AACtB,YAAM,MAAM,QAAQ,WAAS;AAC5B,YAAI,YAAY,KAAK,GAAG;AACvB,gBAAM,QAAQ,YAAY,OAAO,KAAK;AACtC,gBAAM,QAAQ,IAAI,OAAO,KAAK;AAC9B,gBAAM,MAAO,IAAI,KAAK;AAAA,QACvB,OAAO;AACN,gBAAM,MAAO,IAAI,KAAK;AAAA,QACvB;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAEA,WAAS,gBAAgB,OAA+C;AACvE,QAAI,MAAM;AAAU,UAAI,GAAG,KAAK,UAAU,OAAO,KAAK,CAAC,CAAC;AAAA,EACzD;AAEA,aAAW,UAAU,EAAC,WAAW,UAAS,CAAC;AAC5C;;;AXrRA,IAAM,QAAQ,IAAIC,OAAM;AAqBjB,IAAM,UAAoB,MAAM;AAMhC,IAAM,qBAA0C,MAAM,mBAAmB;AAAA,EAC/E;AACD;AAOO,IAAM,gBAAgB,MAAM,cAAc,KAAK,KAAK;AAOpD,IAAM,0BAA0B,MAAM,wBAAwB,KAAK,KAAK;AAOxE,IAAM,eAAe,MAAM,aAAa,KAAK,KAAK;AAMlD,IAAM,cAAc,MAAM,YAAY,KAAK,KAAK;AAUhD,IAAM,cAAc,MAAM,YAAY,KAAK,KAAK;AAQhD,SAAS,UAAa,OAAoB;AAChD,SAAO;AACR;AAOO,SAAS,cAAiB,OAAwB;AACxD,SAAO;AACR;","names":["Immer","immer","isSet","current","Immer","base","Immer"]}
Index: node_modules/immer/dist/cjs/immer.cjs.production.js
===================================================================
--- node_modules/immer/dist/cjs/immer.cjs.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/cjs/immer.cjs.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+"use strict";var ne=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames;var Te=Object.prototype.hasOwnProperty;var Ae=(e,t)=>{for(var r in t)ne(e,r,{get:t[r],enumerable:!0})},Ie=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of be(t))!Te.call(e,i)&&i!==r&&ne(e,i,{get:()=>t[i],enumerable:!(n=ge(t,i))||n.enumerable});return e};var De=e=>Ie(ne({},"__esModule",{value:!0}),e);var Be={};Ae(Be,{Immer:()=>J,applyPatches:()=>Ce,castDraft:()=>ke,castImmutable:()=>Ke,createDraft:()=>Re,current:()=>re,enableMapSet:()=>xe,enablePatches:()=>Pe,finishDraft:()=>ve,freeze:()=>K,immerable:()=>N,isDraft:()=>O,isDraftable:()=>A,nothing:()=>j,original:()=>le,produce:()=>Fe,produceWithPatches:()=>Ne,setAutoFreeze:()=>ze,setUseStrictShallowCopy:()=>je});module.exports=De(Be);var j=Symbol.for("immer-nothing"),N=Symbol.for("immer-draftable"),u=Symbol.for("immer-state");function h(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var z=Object.getPrototypeOf;function O(e){return!!e&&!!e[u]}function A(e){return e?ye(e)||Array.isArray(e)||!!e[N]||!!e.constructor?.[N]||v(e)||k(e):!1}var Oe=Object.prototype.constructor.toString();function ye(e){if(!e||typeof e!="object")return!1;let t=z(e);if(t===null)return!0;let r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object?!0:typeof r=="function"&&Function.toString.call(r)===Oe}function le(e){return O(e)||h(15,e),e[u].t}function _(e,t){C(e)===0?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function C(e){let t=e[u];return t?t.o:Array.isArray(e)?1:v(e)?2:k(e)?3:0}function R(e,t){return C(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function X(e,t){return C(e)===2?e.get(t):e[t]}function Q(e,t,r){let n=C(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function pe(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function v(e){return e instanceof Map}function k(e){return e instanceof Set}function T(e){return e.e||e.t}function L(e,t){if(v(e))return new Map(e);if(k(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);let r=ye(e);if(t===!0||t==="class_only"&&!r){let n=Object.getOwnPropertyDescriptors(e);delete n[u];let i=Reflect.ownKeys(n);for(let f=0;f<i.length;f++){let l=i[f],c=n[l];c.writable===!1&&(c.writable=!0,c.configurable=!0),(c.get||c.set)&&(n[l]={configurable:!0,writable:!0,enumerable:c.enumerable,value:e[l]})}return Object.create(z(e),n)}else{let n=z(e);if(n!==null&&r)return{...e};let i=Object.create(n);return Object.assign(i,e)}}function K(e,t=!1){return $(e)||O(e)||!A(e)||(C(e)>1&&(e.set=e.add=e.clear=e.delete=Me),Object.freeze(e),t&&Object.entries(e).forEach(([r,n])=>K(n,!0))),e}function Me(){h(2)}function $(e){return Object.isFrozen(e)}var ae={};function w(e){let t=ae[e];return t||h(0,e),t}function Y(e,t){ae[e]||(ae[e]=t)}var U;function B(){return U}function _e(e,t){return{a:[],i:e,p:t,P:!0,d:0}}function oe(e,t){t&&(w("Patches"),e.f=[],e.h=[],e.b=t)}function V(e){Z(e),e.a.forEach(we),e.a=null}function Z(e){e===U&&(U=e.i)}function ie(e){return U=_e(U,e)}function we(e){let t=e[u];t.o===0||t.o===1?t.x():t.m=!0}function se(e,t){t.d=t.a.length;let r=t.a[0];return e!==void 0&&e!==r?(r[u].s&&(V(t),h(4)),A(e)&&(e=ee(t,e),t.i||te(t,e)),t.f&&w("Patches").T(r[u].t,e,t.f,t.h)):e=ee(t,r,[]),V(t),t.f&&t.b(t.f,t.h),e!==j?e:void 0}function ee(e,t,r){if($(t))return t;let n=t[u];if(!n)return _(t,(i,f)=>de(e,n,t,i,f,r)),t;if(n.n!==e)return t;if(!n.s)return te(e,n.t,!0),n.t;if(!n.c){n.c=!0,n.n.d--;let i=n.e,f=i,l=!1;n.o===3&&(f=new Set(i),i.clear(),l=!0),_(f,(c,b)=>de(e,n,i,c,b,r,l)),te(e,i,!1),r&&e.f&&w("Patches").g(n,r,e.f,e.h)}return n.e}function de(e,t,r,n,i,f,l){if(O(i)){let c=f&&t&&t.o!==3&&!R(t.r,n)?f.concat(n):void 0,b=ee(e,i,c);if(Q(r,n,b),O(b))e.P=!1;else return}else l&&r.add(i);if(A(i)&&!$(i)){if(!e.p.y&&e.d<1)return;ee(e,i),(!t||!t.n.i)&&typeof n!="symbol"&&Object.prototype.propertyIsEnumerable.call(r,n)&&te(e,i)}}function te(e,t,r=!1){!e.i&&e.p.y&&e.P&&K(t,r)}function he(e,t){let r=Array.isArray(e),n={o:r?1:0,n:t?t.n:B(),s:!1,c:!1,r:{},i:t,t:e,u:null,e:null,x:null,l:!1},i=n,f=ue;r&&(i=[n],f=q);let{revoke:l,proxy:c}=Proxy.revocable(i,f);return n.u=c,n.x=l,c}var ue={get(e,t){if(t===u)return e;let r=T(e);if(!R(r,t))return Ee(e,r,t);let n=r[t];return e.c||!A(n)?n:n===ce(e.t,t)?(fe(e),e.e[t]=W(n,e)):n},has(e,t){return t in T(e)},ownKeys(e){return Reflect.ownKeys(T(e))},set(e,t,r){let n=me(T(e),t);if(n?.set)return n.set.call(e.u,r),!0;if(!e.s){let i=ce(T(e),t),f=i?.[u];if(f&&f.t===r)return e.e[t]=r,e.r[t]=!1,!0;if(pe(r,i)&&(r!==void 0||R(e.t,t)))return!0;fe(e),E(e)}return e.e[t]===r&&(r!==void 0||t in e.e)||Number.isNaN(r)&&Number.isNaN(e.e[t])||(e.e[t]=r,e.r[t]=!0),!0},deleteProperty(e,t){return ce(e.t,t)!==void 0||t in e.t?(e.r[t]=!1,fe(e),E(e)):delete e.r[t],e.e&&delete e.e[t],!0},getOwnPropertyDescriptor(e,t){let r=T(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.o!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){h(11)},getPrototypeOf(e){return z(e.t)},setPrototypeOf(){h(12)}},q={};_(ue,(e,t)=>{q[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});q.deleteProperty=function(e,t){return q.set.call(this,e,t,void 0)};q.set=function(e,t,r){return ue.set.call(this,e[0],t,r,e[0])};function ce(e,t){let r=e[u];return(r?T(r):e)[t]}function Ee(e,t,r){let n=me(t,r);return n?"value"in n?n.value:n.get?.call(e.u):void 0}function me(e,t){if(!(t in e))return;let r=z(e);for(;r;){let n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=z(r)}}function E(e){e.s||(e.s=!0,e.i&&E(e.i))}function fe(e){e.e||(e.e=L(e.t,e.n.p.S))}var J=class{constructor(t){this.y=!0;this.S=!1;this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){let f=r;r=t;let l=this;return function(b=f,...a){return l.produce(b,o=>r.call(this,o,...a))}}typeof r!="function"&&h(6),n!==void 0&&typeof n!="function"&&h(7);let i;if(A(t)){let f=ie(this),l=W(t,void 0),c=!0;try{i=r(l),c=!1}finally{c?V(f):Z(f)}return oe(f,n),se(i,f)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===j&&(i=void 0),this.y&&K(i,!0),n){let f=[],l=[];w("Patches").T(t,i,f,l),n(f,l)}return i}else h(1,t)};this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(l,...c)=>this.produceWithPatches(l,b=>t(b,...c));let n,i;return[this.produce(t,r,(l,c)=>{n=l,i=c}),n,i]};typeof t?.autoFreeze=="boolean"&&this.setAutoFreeze(t.autoFreeze),typeof t?.useStrictShallowCopy=="boolean"&&this.setUseStrictShallowCopy(t.useStrictShallowCopy)}createDraft(t){A(t)||h(8),O(t)&&(t=re(t));let r=ie(this),n=W(t,void 0);return n[u].l=!0,Z(r),n}finishDraft(t,r){let n=t&&t[u];(!n||!n.l)&&h(9);let{n:i}=n;return oe(i,r),se(void 0,i)}setAutoFreeze(t){this.y=t}setUseStrictShallowCopy(t){this.S=t}applyPatches(t,r){let n;for(n=r.length-1;n>=0;n--){let f=r[n];if(f.path.length===0&&f.op==="replace"){t=f.value;break}}n>-1&&(r=r.slice(n+1));let i=w("Patches").A;return O(t)?i(t,r):this.produce(t,f=>i(f,r))}};function W(e,t){let r=v(e)?w("MapSet").I(e,t):k(e)?w("MapSet").D(e,t):he(e,t);return(t?t.n:B()).a.push(r),r}function re(e){return O(e)||h(10,e),Se(e)}function Se(e){if(!A(e)||$(e))return e;let t=e[u],r;if(t){if(!t.s)return t.t;t.c=!0,r=L(e,t.n.p.S)}else r=L(e,!0);return _(r,(n,i)=>{Q(r,n,Se(i))}),t&&(t.c=!1),r}function Pe(){let t="replace",r="add",n="remove";function i(s,S,m,x){switch(s.o){case 0:case 2:return l(s,S,m,x);case 1:return f(s,S,m,x);case 3:return c(s,S,m,x)}}function f(s,S,m,x){let{t:I,r:P}=s,g=s.e;g.length<I.length&&([I,g]=[g,I],[m,x]=[x,m]);for(let y=0;y<I.length;y++)if(P[y]&&g[y]!==I[y]){let d=S.concat([y]);m.push({op:t,path:d,value:p(g[y])}),x.push({op:t,path:d,value:p(I[y])})}for(let y=I.length;y<g.length;y++){let d=S.concat([y]);m.push({op:r,path:d,value:p(g[y])})}for(let y=g.length-1;I.length<=y;--y){let d=S.concat([y]);x.push({op:n,path:d})}}function l(s,S,m,x){let{t:I,e:P}=s;_(s.r,(g,y)=>{let d=X(I,g),H=X(P,g),F=y?R(I,g)?t:r:n;if(d===H&&F===t)return;let D=S.concat(g);m.push(F===n?{op:F,path:D}:{op:F,path:D,value:H}),x.push(F===r?{op:n,path:D}:F===n?{op:r,path:D,value:p(d)}:{op:t,path:D,value:p(d)})})}function c(s,S,m,x){let{t:I,e:P}=s,g=0;I.forEach(y=>{if(!P.has(y)){let d=S.concat([g]);m.push({op:n,path:d,value:y}),x.unshift({op:r,path:d,value:y})}g++}),g=0,P.forEach(y=>{if(!I.has(y)){let d=S.concat([g]);m.push({op:r,path:d,value:y}),x.unshift({op:n,path:d,value:y})}g++})}function b(s,S,m,x){m.push({op:t,path:[],value:S===j?void 0:S}),x.push({op:t,path:[],value:s})}function a(s,S){return S.forEach(m=>{let{path:x,op:I}=m,P=s;for(let H=0;H<x.length-1;H++){let F=C(P),D=x[H];typeof D!="string"&&typeof D!="number"&&(D=""+D),(F===0||F===1)&&(D==="__proto__"||D==="constructor")&&h(16+3),typeof P=="function"&&D==="prototype"&&h(16+3),P=X(P,D),typeof P!="object"&&h(16+2,x.join("/"))}let g=C(P),y=o(m.value),d=x[x.length-1];switch(I){case t:switch(g){case 2:return P.set(d,y);case 3:h(16);default:return P[d]=y}case r:switch(g){case 1:return d==="-"?P.push(y):P.splice(d,0,y);case 2:return P.set(d,y);case 3:return P.add(y);default:return P[d]=y}case n:switch(g){case 1:return P.splice(d,1);case 2:return P.delete(d);case 3:return P.delete(m.value);default:return delete P[d]}default:h(16+1,I)}}),s}function o(s){if(!A(s))return s;if(Array.isArray(s))return s.map(o);if(v(s))return new Map(Array.from(s.entries()).map(([m,x])=>[m,o(x)]));if(k(s))return new Set(Array.from(s).map(o));let S=Object.create(z(s));for(let m in s)S[m]=o(s[m]);return R(s,N)&&(S[N]=s[N]),S}function p(s){return O(s)?o(s):s}Y("Patches",{A:a,g:i,T:b})}function xe(){class e extends Map{constructor(a,o){super();this[u]={o:2,i:o,n:o?o.n:B(),s:!1,c:!1,e:void 0,r:void 0,t:a,u:this,l:!1,m:!1}}get size(){return T(this[u]).size}has(a){return T(this[u]).has(a)}set(a,o){let p=this[u];return l(p),(!T(p).has(a)||T(p).get(a)!==o)&&(r(p),E(p),p.r.set(a,!0),p.e.set(a,o),p.r.set(a,!0)),this}delete(a){if(!this.has(a))return!1;let o=this[u];return l(o),r(o),E(o),o.t.has(a)?o.r.set(a,!1):o.r.delete(a),o.e.delete(a),!0}clear(){let a=this[u];l(a),T(a).size&&(r(a),E(a),a.r=new Map,_(a.t,o=>{a.r.set(o,!1)}),a.e.clear())}forEach(a,o){let p=this[u];T(p).forEach((s,S,m)=>{a.call(o,this.get(S),S,this)})}get(a){let o=this[u];l(o);let p=T(o).get(a);if(o.c||!A(p)||p!==o.t.get(a))return p;let s=W(p,o);return r(o),o.e.set(a,s),s}keys(){return T(this[u]).keys()}values(){let a=this.keys();return{[Symbol.iterator]:()=>this.values(),next:()=>{let o=a.next();return o.done?o:{done:!1,value:this.get(o.value)}}}}entries(){let a=this.keys();return{[Symbol.iterator]:()=>this.entries(),next:()=>{let o=a.next();if(o.done)return o;let p=this.get(o.value);return{done:!1,value:[o.value,p]}}}}[(u,Symbol.iterator)](){return this.entries()}}function t(c,b){return new e(c,b)}function r(c){c.e||(c.r=new Map,c.e=new Map(c.t))}class n extends Set{constructor(a,o){super();this[u]={o:3,i:o,n:o?o.n:B(),s:!1,c:!1,e:void 0,t:a,u:this,a:new Map,m:!1,l:!1}}get size(){return T(this[u]).size}has(a){let o=this[u];return l(o),o.e?!!(o.e.has(a)||o.a.has(a)&&o.e.has(o.a.get(a))):o.t.has(a)}add(a){let o=this[u];return l(o),this.has(a)||(f(o),E(o),o.e.add(a)),this}delete(a){if(!this.has(a))return!1;let o=this[u];return l(o),f(o),E(o),o.e.delete(a)||(o.a.has(a)?o.e.delete(o.a.get(a)):!1)}clear(){let a=this[u];l(a),T(a).size&&(f(a),E(a),a.e.clear())}values(){let a=this[u];return l(a),f(a),a.e.values()}entries(){let a=this[u];return l(a),f(a),a.e.entries()}keys(){return this.values()}[(u,Symbol.iterator)](){return this.values()}forEach(a,o){let p=this.values(),s=p.next();for(;!s.done;)a.call(o,s.value,s.value,this),s=p.next()}}function i(c,b){return new n(c,b)}function f(c){c.e||(c.e=new Set,c.t.forEach(b=>{if(A(b)){let a=W(b,c);c.a.set(b,a),c.e.add(a)}else c.e.add(b)}))}function l(c){c.m&&h(3,JSON.stringify(T(c)))}Y("MapSet",{I:t,D:i})}var M=new J,Fe=M.produce,Ne=M.produceWithPatches.bind(M),ze=M.setAutoFreeze.bind(M),je=M.setUseStrictShallowCopy.bind(M),Ce=M.applyPatches.bind(M),Re=M.createDraft.bind(M),ve=M.finishDraft.bind(M);function ke(e){return e}function Ke(e){return e}0&&(module.exports={Immer,applyPatches,castDraft,castImmutable,createDraft,current,enableMapSet,enablePatches,finishDraft,freeze,immerable,isDraft,isDraftable,nothing,original,produce,produceWithPatches,setAutoFreeze,setUseStrictShallowCopy});
+//# sourceMappingURL=immer.cjs.production.js.map
Index: node_modules/immer/dist/cjs/immer.cjs.production.js.map
===================================================================
--- node_modules/immer/dist/cjs/immer.cjs.production.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/cjs/immer.cjs.production.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/immer.ts","../../src/utils/env.ts","../../src/utils/errors.ts","../../src/utils/common.ts","../../src/utils/plugins.ts","../../src/core/scope.ts","../../src/core/finalize.ts","../../src/core/proxy.ts","../../src/core/immerClass.ts","../../src/core/current.ts","../../src/plugins/patches.ts","../../src/plugins/mapset.ts"],"sourcesContent":["import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tWritableDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\tProducer,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze,\n\tObjectish,\n\tStrictMode\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\nexport const setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\n","// Should be no imports here!\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: unique symbol = Symbol.for(\"immer-nothing\")\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = Symbol.for(\"immer-draftable\")\n\nexport const DRAFT_STATE: unique symbol = Symbol.for(\"immer-state\")\n","export const errors =\n\tprocess.env.NODE_ENV !== \"production\"\n\t\t? [\n\t\t\t\t// All error codes, starting by 0:\n\t\t\t\tfunction(plugin: string) {\n\t\t\t\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t\t\t\t},\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t\t\t\t},\n\t\t\t\t\"This object has been frozen and should not be mutated\",\n\t\t\t\tfunction(data: any) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\t\t\t\tdata\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t\t\t\t\"Immer forbids circular references\",\n\t\t\t\t\"The first or second argument to `produce` must be a function\",\n\t\t\t\t\"The third argument to `produce` must be a function or undefined\",\n\t\t\t\t\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t\t\t\t\"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'current' expects a draft, got: ${thing}`\n\t\t\t\t},\n\t\t\t\t\"Object.defineProperty() cannot be used on an Immer draft\",\n\t\t\t\t\"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t\t\t\t\"Immer only supports deleting array indices\",\n\t\t\t\t\"Immer only supports setting array indices and the 'length' property\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'original' expects a draft, got: ${thing}`\n\t\t\t\t}\n\t\t\t\t// Note: if more errors are added, the errorOffset in Patches.ts should be increased\n\t\t\t\t// See Patches.ts for additional errors\n\t\t  ]\n\t\t: []\n\nexport function die(error: number, ...args: any[]): never {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst e = errors[error]\n\t\tconst msg = typeof e === \"function\" ? e.apply(null, args as any) : e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\tArchType,\n\tdie,\n\tStrictMode\n} from \"../internal\"\n\nexport const getPrototypeOf = Object.getPrototypeOf\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(15, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/**\n * Each iterates a map, set or array.\n * Or, if any other kind of object, all of its own properties.\n * Regardless whether they are enumerable or symbols\n */\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void\n): void\nexport function each(obj: any, iter: any) {\n\tif (getArchtype(obj) === ArchType.Object) {\n\t\tReflect.ownKeys(obj).forEach(key => {\n\t\t\titer(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): ArchType {\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_\n\t\t: Array.isArray(thing)\n\t\t? ArchType.Array\n\t\t: isMap(thing)\n\t\t? ArchType.Map\n\t\t: isSet(thing)\n\t\t? ArchType.Set\n\t\t: ArchType.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === ArchType.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === ArchType.Map) thing.set(propOrOldValue, value)\n\telse if (t === ArchType.Set) {\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any, strict: StrictMode) {\n\tif (isMap(base)) {\n\t\treturn new Map(base)\n\t}\n\tif (isSet(base)) {\n\t\treturn new Set(base)\n\t}\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\n\tconst isPlain = isPlainObject(base)\n\n\tif (strict === true || (strict === \"class_only\" && !isPlain)) {\n\t\t// Perform a strict copy\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(base)\n\t\tdelete descriptors[DRAFT_STATE as any]\n\t\tlet keys = Reflect.ownKeys(descriptors)\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key: any = keys[i]\n\t\t\tconst desc = descriptors[key]\n\t\t\tif (desc.writable === false) {\n\t\t\t\tdesc.writable = true\n\t\t\t\tdesc.configurable = true\n\t\t\t}\n\t\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t\t// with libraries that trap values, like mobx or vue\n\t\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\t\tif (desc.get || desc.set)\n\t\t\t\tdescriptors[key] = {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\t\tvalue: base[key]\n\t\t\t\t}\n\t\t}\n\t\treturn Object.create(getPrototypeOf(base), descriptors)\n\t} else {\n\t\t// perform a sloppy copy\n\t\tconst proto = getPrototypeOf(base)\n\t\tif (proto !== null && isPlain) {\n\t\t\treturn {...base} // assumption: better inner class optimization than the assign below\n\t\t}\n\t\tconst obj = Object.create(proto)\n\t\treturn Object.assign(obj, base)\n\t}\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep)\n\t\t// See #590, don't recurse into non-enumerable / Symbol properties when freezing\n\t\t// So use Object.entries (only string-like, enumerables) instead of each()\n\t\tObject.entries(obj).forEach(([key, value]) => freeze(value, true))\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tDrafted,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tArchType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: readonly Patch[]): T\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(0, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ArchType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ArchType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tArchType,\n\tgetPlugin\n} from \"../internal\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (state.type_ === ArchType.Object || state.type_ === ArchType.Array)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tArchType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(value, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path)\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result = state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// To preserve insertion order in all cases we then clear the set\n\t\t// And we let finalizeProperty know it needs to re-add non-draft children back to the target\n\t\tlet resultEach = result\n\t\tlet isSet = false\n\t\tif (state.type_ === ArchType.Set) {\n\t\t\tresultEach = new Set(result)\n\t\t\tresult.clear()\n\t\t\tisSet = true\n\t\t}\n\t\teach(resultEach, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path, isSet)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath,\n\ttargetIsSet?: boolean\n) {\n\tif (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n\t\tdie(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t} else if (targetIsSet) {\n\t\ttargetObject.add(childValue)\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// Immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\t// Per #590, we never freeze symbolic properties. Just to make sure don't accidentally interfere\n\t\t// with other frameworks.\n\t\tif (\n\t\t\t(!parentState || !parentState.scope_.parent_) &&\n\t\t\ttypeof prop !== \"symbol\" &&\n\t\t\tObject.prototype.propertyIsEnumerable.call(targetObject, prop)\n\t\t)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\t// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects\n\tif (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tgetPrototypeOf,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tArchType,\n\tImmerScope\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ArchType.Object\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ArchType.Array\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ArchType.Array : (ArchType.Object as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(value, state))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\t(state.copy_![prop] === value &&\n\t\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t\t(value !== undefined || prop in state.copy_)) ||\n\t\t\t// special case: NaN\n\t\t\t(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\tif (state.copy_) {\n\t\t\tdelete state.copy_[prop]\n\t\t}\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ArchType.Array || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop as any)))\n\t\tdie(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (\n\t\tprocess.env.NODE_ENV !== \"production\" &&\n\t\tprop !== \"length\" &&\n\t\tisNaN(parseInt(prop as any))\n\t)\n\t\tdie(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t  // prototype, we should invoke it with the draft as context!\n\t\t\t  desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {\n\tbase_: any\n\tcopy_: any\n\tscope_: ImmerScope\n}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(\n\t\t\tstate.base_,\n\t\t\tstate.scope_.immer_.useStrictShallowCopy_\n\t\t)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport type StrictMode = boolean | \"class_only\";\n\nexport class Immer implements ProducersFns {\n\tautoFreeze_: boolean = true\n\tuseStrictShallowCopy_: StrictMode = false\n\n\tconstructor(config?: {\n\t\tautoFreeze?: boolean\n\t\tuseStrictShallowCopy?: StrictMode\n\t}) {\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t\tif (typeof config?.useStrictShallowCopy === \"boolean\")\n\t\t\tthis.setUseStrictShallowCopy(config!.useStrictShallowCopy)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(1, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (!state || !state.isManual_) die(9)\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to enable strict shallow copy.\n\t *\n\t * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n\t */\n\tsetUseStrictShallowCopy(value: StrictMode) {\n\t\tthis.useStrictShallowCopy_ = value\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: createProxyProxy(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tisFrozen\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(10, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value) || isFrozen(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tif (state) {\n\t\tif (!state.modified_) return state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)\n\t} else {\n\t\tcopy = shallowCopy(value, true)\n\t}\n\t// recurse\n\teach(copy, (key, childValue) => {\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\tif (state) {\n\t\tstate.finalized_ = false\n\t}\n\treturn copy\n}\n","import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tProxyArrayState,\n\tMapState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tgetPrototypeOf,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tArchType,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING,\n\terrors\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst errorOffset = 16\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\terrors.push(\n\t\t\t'Sets cannot have \"replace\" patches.',\n\t\t\tfunction(op: string) {\n\t\t\t\treturn \"Unsupported patch operation: \" + op\n\t\t\t},\n\t\t\tfunction(path: string) {\n\t\t\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t\t\t},\n\t\t\t\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n\t\t)\n\t}\n\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ArchType.Object:\n\t\t\tcase ArchType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ArchType.Array:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ArchType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tfor (let i = copy_.length - 1; base_.length <= i; --i) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tinversePatches.push({\n\t\t\t\top: REMOVE,\n\t\t\t\tpath\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\tbaseValue: any,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: baseValue\n\t\t})\n\t}\n\n\tfunction applyPatches_<T>(draft: T, patches: readonly Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tlet p = path[i]\n\t\t\t\tif (typeof p !== \"string\" && typeof p !== \"number\") {\n\t\t\t\t\tp = \"\" + p\n\t\t\t\t}\n\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === ArchType.Object || parentType === ArchType.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\")\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(errorOffset + 2, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\tdie(errorOffset)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn key === \"-\"\n\t\t\t\t\t\t\t\t? base.push(value)\n\t\t\t\t\t\t\t\t: base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(errorOffset + 1, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue<T>(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded<T>(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n","// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tdie,\n\tArchType,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\tclass DraftMap extends Map {\n\t\t[DRAFT_STATE]: MapState\n\n\t\tconstructor(target: AnyMap, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tset(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tif (state.base_.has(key)) {\n\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t} else {\n\t\t\t\tstate.assigned_!.delete(key)\n\t\t\t}\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tforEach(cb: (value: any, key: any, self: any) => void, thisArg?: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tget(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.entries()\n\t\t}\n\t}\n\n\tfunction proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tclass DraftSet extends Set {\n\t\t[DRAFT_STATE]: SetState\n\t\tconstructor(target: AnySet, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tadd(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn this.values()\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tforEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\t}\n\tfunction proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n"],"mappings":"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","names":["immer_exports","__export","Immer","applyPatches","castDraft","castImmutable","createDraft","current","enableMapSet","enablePatches","finishDraft","freeze","DRAFTABLE","isDraft","isDraftable","NOTHING","original","produce","produceWithPatches","setAutoFreeze","setUseStrictShallowCopy","__toCommonJS","NOTHING","DRAFTABLE","DRAFT_STATE","die","error","args","getPrototypeOf","isDraft","value","DRAFT_STATE","isDraftable","isPlainObject","DRAFTABLE","isMap","isSet","objectCtorString","proto","Ctor","original","die","base_","each","obj","iter","getArchtype","key","entry","index","thing","state","type_","has","prop","get","set","propOrOldValue","t","is","x","y","target","latest","copy_","shallowCopy","base","strict","isPlain","descriptors","keys","i","desc","freeze","deep","isFrozen","dontMutateFrozenCollections","plugins","getPlugin","pluginKey","plugin","die","loadPlugin","implementation","currentScope","getCurrentScope","createScope","parent_","immer_","drafts_","canAutoFreeze_","unfinalizedDrafts_","usePatchesInScope","scope","patchListener","getPlugin","patches_","inversePatches_","patchListener_","revokeScope","leaveScope","revokeDraft","enterScope","immer","draft","state","DRAFT_STATE","type_","revoke_","revoked_","processResult","result","scope","unfinalizedDrafts_","drafts_","baseDraft","DRAFT_STATE","modified_","revokeScope","die","isDraftable","finalize","parent_","maybeFreeze","patches_","getPlugin","generateReplacementPatches_","base_","inversePatches_","patchListener_","NOTHING","rootScope","value","path","isFrozen","state","each","key","childValue","finalizeProperty","scope_","finalized_","copy_","resultEach","isSet","type_","generatePatches_","parentState","targetObject","prop","rootPath","targetIsSet","isDraft","has","assigned_","res","set","canAutoFreeze_","immer_","autoFreeze_","deep","freeze","createProxyProxy","base","parent","isArray","state","type_","scope_","getCurrentScope","modified_","finalized_","assigned_","parent_","base_","draft_","copy_","revoke_","isManual_","target","traps","objectTraps","arrayTraps","revoke","proxy","prop","DRAFT_STATE","source","latest","has","readPropFromProto","value","isDraftable","peek","prepareCopy","createProxy","desc","getDescriptorFromProto","current","currentState","is","markChanged","owner","die","getPrototypeOf","each","key","fn","draft","proto","shallowCopy","immer_","useStrictShallowCopy_","Immer","config","autoFreeze_","useStrictShallowCopy_","base","recipe","patchListener","defaultBase","self","args","draft","die","result","isDraftable","scope","enterScope","proxy","createProxy","hasError","revokeScope","leaveScope","usePatchesInScope","processResult","NOTHING","freeze","p","ip","getPlugin","generateReplacementPatches_","state","patches","inversePatches","isDraft","current","DRAFT_STATE","isManual_","scope_","value","i","patch","applyPatchesImpl","applyPatches_","parent","isMap","proxyMap_","isSet","proxySet_","createProxyProxy","getCurrentScope","drafts_","current","value","isDraft","die","currentImpl","isDraftable","isFrozen","state","DRAFT_STATE","copy","modified_","base_","finalized_","shallowCopy","scope_","immer_","useStrictShallowCopy_","each","key","childValue","set","enablePatches","REPLACE","ADD","REMOVE","generatePatches_","state","basePath","patches","inversePatches","type_","generatePatchesFromAssigned","generateArrayPatches","generateSetPatches","base_","assigned_","copy_","i","path","clonePatchValueIfNeeded","each","key","assignedValue","origValue","get","value","op","has","generateReplacementPatches_","baseValue","replacement","NOTHING","applyPatches_","draft","patch","base","parentType","getArchtype","p","die","type","deepClonePatchValue","obj","isDraftable","isMap","k","v","isSet","cloned","getPrototypeOf","DRAFTABLE","isDraft","loadPlugin","enableMapSet","DraftMap","target","parent","DRAFT_STATE","type_","parent_","scope_","getCurrentScope","modified_","finalized_","copy_","assigned_","base_","draft_","isManual_","revoked_","latest","key","value","state","assertUnrevoked","prepareMapCopy","markChanged","each","cb","thisArg","_value","_map","isDraftable","draft","createProxy","iterator","r","proxyMap_","DraftSet","drafts_","prepareSetCopy","result","proxySet_","die","loadPlugin","immer","Immer","produce","produceWithPatches","setAutoFreeze","setUseStrictShallowCopy","applyPatches","createDraft","finishDraft","castDraft","value","castImmutable"]}
Index: node_modules/immer/dist/cjs/index.js
===================================================================
--- node_modules/immer/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./immer.cjs.production.js')
+} else {
+  module.exports = require('./immer.cjs.development.js')
+}
Index: node_modules/immer/dist/cjs/index.js.flow
===================================================================
--- node_modules/immer/dist/cjs/index.js.flow	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/cjs/index.js.flow	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,111 @@
+// @flow
+
+export interface Patch {
+	op: "replace" | "remove" | "add";
+	path: (string | number)[];
+	value?: any;
+}
+
+export type PatchListener = (patches: Patch[], inversePatches: Patch[]) => void
+
+type Base = {...} | Array<any>
+interface IProduce {
+	/**
+	 * Immer takes a state, and runs a function against it.
+	 * That function can freely mutate the state, as it will create copies-on-write.
+	 * This means that the original state will stay unchanged, and once the function finishes, the modified state is returned.
+	 *
+	 * If the first argument is a function, this is interpreted as the recipe, and will create a curried function that will execute the recipe
+	 * any time it is called with the current state.
+	 *
+	 * @param currentState - the state to start with
+	 * @param recipe - function that receives a proxy of the current state as first argument and which can be freely modified
+	 * @param initialState - if a curried function is created and this argument was given, it will be used as fallback if the curried function is called with a state of undefined
+	 * @returns The next state: a new state, or the current state if nothing was modified
+	 */
+	<S: Base>(
+		currentState: S,
+		recipe: (draftState: S) => S | void,
+		patchListener?: PatchListener
+	): S;
+	// curried invocations with initial state
+	<S: Base, A = void, B = void, C = void>(
+		recipe: (draftState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S | void,
+		initialState: S
+	): (currentState: S | void, a: A, b: B, c: C, ...extraArgs: any[]) => S;
+	// curried invocations without initial state
+	<S: Base, A = void, B = void, C = void>(
+		recipe: (draftState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S | void
+	): (currentState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S;
+}
+
+interface IProduceWithPatches {
+        /**
+         * Like `produce`, but instead of just returning the new state,
+         * a tuple is returned with [nextState, patches, inversePatches]
+         *
+         * Like produce, this function supports currying
+         */
+	<S: Base>(
+		currentState: S,
+		recipe: (draftState: S) => S | void
+	): [S, Patch[], Patch[]];
+	// curried invocations with initial state
+	<S: Base, A = void, B = void, C = void>(
+		recipe: (draftState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S | void,
+		initialState: S
+	): (currentState: S | void, a: A, b: B, c: C, ...extraArgs: any[]) => [S, Patch[], Patch[]];
+	// curried invocations without initial state
+	<S: Base, A = void, B = void, C = void>(
+		recipe: (draftState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S | void
+	): (currentState: S, a: A, b: B, c: C, ...extraArgs: any[]) => [S, Patch[], Patch[]];
+}
+
+declare export var produce: IProduce
+
+declare export var produceWithPatches: IProduceWithPatches
+
+declare export var nothing: typeof undefined
+
+declare export var immerable: Symbol
+
+/**
+ * Automatically freezes any state trees generated by immer.
+ * This protects against accidental modifications of the state tree outside of an immer function.
+ * This comes with a performance impact, so it is recommended to disable this option in production.
+ * By default it is turned on during local development, and turned off in production.
+ */
+declare export function setAutoFreeze(autoFreeze: boolean): void
+
+/**
+ * Pass false to disable strict shallow copy.
+ *
+ * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.
+ */
+declare export function setUseStrictShallowCopy(useStrictShallowCopy: boolean): void
+
+declare export function applyPatches<S>(state: S, patches: Patch[]): S
+
+declare export function original<S>(value: S): S
+
+declare export function current<S>(value: S): S
+
+declare export function isDraft(value: any): boolean
+
+/**
+ * Creates a mutable draft from an (immutable) object / array.
+ * The draft can be modified until `finishDraft` is called
+ */
+declare export function createDraft<T>(base: T): T
+
+/**
+ * Given a draft that was created using `createDraft`,
+ * finalizes the draft into a new immutable object.
+ * Optionally a patch-listener can be provided to gather the patches that are needed to construct the object.
+ */
+declare export function finishDraft<T>(base: T, listener?: PatchListener): T
+
+declare export function enableMapSet(): void
+declare export function enablePatches(): void
+
+declare export function freeze<T>(obj: T, freeze?: boolean): T
Index: node_modules/immer/dist/immer.d.ts
===================================================================
--- node_modules/immer/dist/immer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/immer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,262 @@
+/**
+ * The sentinel value returned by producers to replace the draft with undefined.
+ */
+declare const NOTHING: unique symbol;
+/**
+ * To let Immer treat your class instances as plain immutable objects
+ * (albeit with a custom prototype), you must define either an instance property
+ * or a static property on each of your custom classes.
+ *
+ * Otherwise, your class instance will never be drafted, which means it won't be
+ * safe to mutate in a produce callback.
+ */
+declare const DRAFTABLE: unique symbol;
+
+type AnyFunc = (...args: any[]) => any;
+type PrimitiveType = number | string | boolean;
+/** Object types that should never be mapped */
+type AtomicObject = Function | Promise<any> | Date | RegExp;
+/**
+ * If the lib "ES2015.Collection" is not included in tsconfig.json,
+ * types like ReadonlyArray, WeakMap etc. fall back to `any` (specified nowhere)
+ * or `{}` (from the node types), in both cases entering an infinite recursion in
+ * pattern matching type mappings
+ * This type can be used to cast these types to `void` in these cases.
+ */
+type IfAvailable<T, Fallback = void> = true | false extends (T extends never ? true : false) ? Fallback : keyof T extends never ? Fallback : T;
+/**
+ * These should also never be mapped but must be tested after regular Map and
+ * Set
+ */
+type WeakReferences = IfAvailable<WeakMap<any, any>> | IfAvailable<WeakSet<any>>;
+type WritableDraft<T> = {
+    -readonly [K in keyof T]: Draft<T[K]>;
+};
+/** Convert a readonly type into a mutable type, if possible */
+type Draft<T> = T extends PrimitiveType ? T : T extends AtomicObject ? T : T extends ReadonlyMap<infer K, infer V> ? Map<Draft<K>, Draft<V>> : T extends ReadonlySet<infer V> ? Set<Draft<V>> : T extends WeakReferences ? T : T extends object ? WritableDraft<T> : T;
+/** Convert a mutable type into a readonly type */
+type Immutable<T> = T extends PrimitiveType ? T : T extends AtomicObject ? T : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<Immutable<K>, Immutable<V>> : T extends ReadonlySet<infer V> ? ReadonlySet<Immutable<V>> : T extends WeakReferences ? T : T extends object ? {
+    readonly [K in keyof T]: Immutable<T[K]>;
+} : T;
+interface Patch {
+    op: "replace" | "remove" | "add";
+    path: (string | number)[];
+    value?: any;
+}
+type PatchListener = (patches: Patch[], inversePatches: Patch[]) => void;
+/**
+ * Utility types
+ */
+type PatchesTuple<T> = readonly [T, Patch[], Patch[]];
+type ValidRecipeReturnType<State> = State | void | undefined | (State extends undefined ? typeof NOTHING : never);
+type ReturnTypeWithPatchesIfNeeded<State, UsePatches extends boolean> = UsePatches extends true ? PatchesTuple<State> : State;
+/**
+ * Core Producer inference
+ */
+type InferRecipeFromCurried<Curried> = Curried extends (base: infer State, ...rest: infer Args) => any ? ReturnType<Curried> extends State ? (draft: Draft<State>, ...rest: Args) => ValidRecipeReturnType<Draft<State>> : never : never;
+type InferInitialStateFromCurried<Curried> = Curried extends (base: infer State, ...rest: any[]) => any ? State : never;
+type InferCurriedFromRecipe<Recipe, UsePatches extends boolean> = Recipe extends (draft: infer DraftState, ...args: infer RestArgs) => any ? ReturnType<Recipe> extends ValidRecipeReturnType<DraftState> ? (base: Immutable<DraftState>, ...args: RestArgs) => ReturnTypeWithPatchesIfNeeded<DraftState, UsePatches> : never : never;
+type InferCurriedFromInitialStateAndRecipe<State, Recipe, UsePatches extends boolean> = Recipe extends (draft: Draft<State>, ...rest: infer RestArgs) => ValidRecipeReturnType<State> ? (base?: State | undefined, ...args: RestArgs) => ReturnTypeWithPatchesIfNeeded<State, UsePatches> : never;
+/**
+ * The `produce` function takes a value and a "recipe function" (whose
+ * return value often depends on the base state). The recipe function is
+ * free to mutate its first argument however it wants. All mutations are
+ * only ever applied to a __copy__ of the base state.
+ *
+ * Pass only a function to create a "curried producer" which relieves you
+ * from passing the recipe function every time.
+ *
+ * Only plain objects and arrays are made mutable. All other objects are
+ * considered uncopyable.
+ *
+ * Note: This function is __bound__ to its `Immer` instance.
+ *
+ * @param {any} base - the initial state
+ * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified
+ * @param {Function} patchListener - optional function that will be called with all the patches produced here
+ * @returns {any} a new state, or the initial state if nothing was modified
+ */
+interface IProduce {
+    /** Curried producer that infers the recipe from the curried output function (e.g. when passing to setState) */
+    <Curried>(recipe: InferRecipeFromCurried<Curried>, initialState?: InferInitialStateFromCurried<Curried>): Curried;
+    /** Curried producer that infers curried from the recipe  */
+    <Recipe extends AnyFunc>(recipe: Recipe): InferCurriedFromRecipe<Recipe, false>;
+    /** Curried producer that infers curried from the State generic, which is explicitly passed in.  */
+    <State>(recipe: (state: Draft<State>, initialState: State) => ValidRecipeReturnType<State>): (state?: State) => State;
+    <State, Args extends any[]>(recipe: (state: Draft<State>, ...args: Args) => ValidRecipeReturnType<State>, initialState: State): (state?: State, ...args: Args) => State;
+    <State>(recipe: (state: Draft<State>) => ValidRecipeReturnType<State>): (state: State) => State;
+    <State, Args extends any[]>(recipe: (state: Draft<State>, ...args: Args) => ValidRecipeReturnType<State>): (state: State, ...args: Args) => State;
+    /** Curried producer with initial state, infers recipe from initial state */
+    <State, Recipe extends Function>(recipe: Recipe, initialState: State): InferCurriedFromInitialStateAndRecipe<State, Recipe, false>;
+    /** Normal producer */
+    <Base, D = Draft<Base>>(// By using a default inferred D, rather than Draft<Base> in the recipe, we can override it.
+    base: Base, recipe: (draft: D) => ValidRecipeReturnType<D>, listener?: PatchListener): Base;
+}
+/**
+ * Like `produce`, but instead of just returning the new state,
+ * a tuple is returned with [nextState, patches, inversePatches]
+ *
+ * Like produce, this function supports currying
+ */
+interface IProduceWithPatches {
+    <Recipe extends AnyFunc>(recipe: Recipe): InferCurriedFromRecipe<Recipe, true>;
+    <State, Recipe extends Function>(recipe: Recipe, initialState: State): InferCurriedFromInitialStateAndRecipe<State, Recipe, true>;
+    <Base, D = Draft<Base>>(base: Base, recipe: (draft: D) => ValidRecipeReturnType<D>, listener?: PatchListener): PatchesTuple<Base>;
+}
+/**
+ * The type for `recipe function`
+ */
+type Producer<T> = (draft: Draft<T>) => ValidRecipeReturnType<Draft<T>>;
+
+type Objectish = AnyObject | AnyArray | AnyMap | AnySet;
+type AnyObject = {
+    [key: string]: any;
+};
+type AnyArray = Array<any>;
+type AnySet = Set<any>;
+type AnyMap = Map<any, any>;
+
+/** Returns true if the given value is an Immer draft */
+declare function isDraft(value: any): boolean;
+/** Returns true if the given value can be drafted by Immer */
+declare function isDraftable(value: any): boolean;
+/** Get the underlying object that is represented by the given draft */
+declare function original<T>(value: T): T | undefined;
+/**
+ * Freezes draftable objects. Returns the original object.
+ * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.
+ *
+ * @param obj
+ * @param deep
+ */
+declare function freeze<T>(obj: T, deep?: boolean): T;
+
+interface ProducersFns {
+    produce: IProduce;
+    produceWithPatches: IProduceWithPatches;
+}
+type StrictMode = boolean | "class_only";
+declare class Immer implements ProducersFns {
+    autoFreeze_: boolean;
+    useStrictShallowCopy_: StrictMode;
+    constructor(config?: {
+        autoFreeze?: boolean;
+        useStrictShallowCopy?: StrictMode;
+    });
+    /**
+     * The `produce` function takes a value and a "recipe function" (whose
+     * return value often depends on the base state). The recipe function is
+     * free to mutate its first argument however it wants. All mutations are
+     * only ever applied to a __copy__ of the base state.
+     *
+     * Pass only a function to create a "curried producer" which relieves you
+     * from passing the recipe function every time.
+     *
+     * Only plain objects and arrays are made mutable. All other objects are
+     * considered uncopyable.
+     *
+     * Note: This function is __bound__ to its `Immer` instance.
+     *
+     * @param {any} base - the initial state
+     * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified
+     * @param {Function} patchListener - optional function that will be called with all the patches produced here
+     * @returns {any} a new state, or the initial state if nothing was modified
+     */
+    produce: IProduce;
+    produceWithPatches: IProduceWithPatches;
+    createDraft<T extends Objectish>(base: T): Draft<T>;
+    finishDraft<D extends Draft<any>>(draft: D, patchListener?: PatchListener): D extends Draft<infer T> ? T : never;
+    /**
+     * Pass true to automatically freeze all copies created by Immer.
+     *
+     * By default, auto-freezing is enabled.
+     */
+    setAutoFreeze(value: boolean): void;
+    /**
+     * Pass true to enable strict shallow copy.
+     *
+     * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.
+     */
+    setUseStrictShallowCopy(value: StrictMode): void;
+    applyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T;
+}
+
+/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */
+declare function current<T>(value: T): T;
+
+declare function enablePatches(): void;
+
+declare function enableMapSet(): void;
+
+/**
+ * The `produce` function takes a value and a "recipe function" (whose
+ * return value often depends on the base state). The recipe function is
+ * free to mutate its first argument however it wants. All mutations are
+ * only ever applied to a __copy__ of the base state.
+ *
+ * Pass only a function to create a "curried producer" which relieves you
+ * from passing the recipe function every time.
+ *
+ * Only plain objects and arrays are made mutable. All other objects are
+ * considered uncopyable.
+ *
+ * Note: This function is __bound__ to its `Immer` instance.
+ *
+ * @param {any} base - the initial state
+ * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified
+ * @param {Function} patchListener - optional function that will be called with all the patches produced here
+ * @returns {any} a new state, or the initial state if nothing was modified
+ */
+declare const produce: IProduce;
+/**
+ * Like `produce`, but `produceWithPatches` always returns a tuple
+ * [nextState, patches, inversePatches] (instead of just the next state)
+ */
+declare const produceWithPatches: IProduceWithPatches;
+/**
+ * Pass true to automatically freeze all copies created by Immer.
+ *
+ * Always freeze by default, even in production mode
+ */
+declare const setAutoFreeze: (value: boolean) => void;
+/**
+ * Pass true to enable strict shallow copy.
+ *
+ * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.
+ */
+declare const setUseStrictShallowCopy: (value: StrictMode) => void;
+/**
+ * Apply an array of Immer patches to the first argument.
+ *
+ * This function is a producer, which means copy-on-write is in effect.
+ */
+declare const applyPatches: <T extends Objectish>(base: T, patches: readonly Patch[]) => T;
+/**
+ * Create an Immer draft from the given base state, which may be a draft itself.
+ * The draft can be modified until you finalize it with the `finishDraft` function.
+ */
+declare const createDraft: <T extends Objectish>(base: T) => Draft<T>;
+/**
+ * Finalize an Immer draft from a `createDraft` call, returning the base state
+ * (if no changes were made) or a modified copy. The draft must *not* be
+ * mutated afterwards.
+ *
+ * Pass a function as the 2nd argument to generate Immer patches based on the
+ * changes that were made.
+ */
+declare const finishDraft: <D extends unknown>(draft: D, patchListener?: PatchListener | undefined) => D extends Draft<infer T> ? T : never;
+/**
+ * This function is actually a no-op, but can be used to cast an immutable type
+ * to an draft type and make TypeScript happy
+ *
+ * @param value
+ */
+declare function castDraft<T>(value: T): Draft<T>;
+/**
+ * This function is actually a no-op, but can be used to cast a mutable type
+ * to an immutable type and make TypeScript happy
+ * @param value
+ */
+declare function castImmutable<T>(value: T): Immutable<T>;
+
+export { Draft, Immer, Immutable, Objectish, Patch, PatchListener, Producer, StrictMode, WritableDraft, applyPatches, castDraft, castImmutable, createDraft, current, enableMapSet, enablePatches, finishDraft, freeze, DRAFTABLE as immerable, isDraft, isDraftable, NOTHING as nothing, original, produce, produceWithPatches, setAutoFreeze, setUseStrictShallowCopy };
Index: node_modules/immer/dist/immer.legacy-esm.js
===================================================================
--- node_modules/immer/dist/immer.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/immer.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1250 @@
+var __defProp = Object.defineProperty;
+var __getOwnPropSymbols = Object.getOwnPropertySymbols;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __propIsEnum = Object.prototype.propertyIsEnumerable;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __spreadValues = (a, b) => {
+  for (var prop in b || (b = {}))
+    if (__hasOwnProp.call(b, prop))
+      __defNormalProp(a, prop, b[prop]);
+  if (__getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(b)) {
+      if (__propIsEnum.call(b, prop))
+        __defNormalProp(a, prop, b[prop]);
+    }
+  return a;
+};
+
+// src/utils/env.ts
+var NOTHING = Symbol.for("immer-nothing");
+var DRAFTABLE = Symbol.for("immer-draftable");
+var DRAFT_STATE = Symbol.for("immer-state");
+
+// src/utils/errors.ts
+var errors = process.env.NODE_ENV !== "production" ? [
+  // All error codes, starting by 0:
+  function(plugin) {
+    return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \`enable${plugin}()\` when initializing your application.`;
+  },
+  function(thing) {
+    return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;
+  },
+  "This object has been frozen and should not be mutated",
+  function(data) {
+    return "Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? " + data;
+  },
+  "An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.",
+  "Immer forbids circular references",
+  "The first or second argument to `produce` must be a function",
+  "The third argument to `produce` must be a function or undefined",
+  "First argument to `createDraft` must be a plain object, an array, or an immerable object",
+  "First argument to `finishDraft` must be a draft returned by `createDraft`",
+  function(thing) {
+    return `'current' expects a draft, got: ${thing}`;
+  },
+  "Object.defineProperty() cannot be used on an Immer draft",
+  "Object.setPrototypeOf() cannot be used on an Immer draft",
+  "Immer only supports deleting array indices",
+  "Immer only supports setting array indices and the 'length' property",
+  function(thing) {
+    return `'original' expects a draft, got: ${thing}`;
+  }
+  // Note: if more errors are added, the errorOffset in Patches.ts should be increased
+  // See Patches.ts for additional errors
+] : [];
+function die(error, ...args) {
+  if (process.env.NODE_ENV !== "production") {
+    const e = errors[error];
+    const msg = typeof e === "function" ? e.apply(null, args) : e;
+    throw new Error(`[Immer] ${msg}`);
+  }
+  throw new Error(
+    `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`
+  );
+}
+
+// src/utils/common.ts
+var getPrototypeOf = Object.getPrototypeOf;
+function isDraft(value) {
+  return !!value && !!value[DRAFT_STATE];
+}
+function isDraftable(value) {
+  var _a;
+  if (!value)
+    return false;
+  return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!((_a = value.constructor) == null ? void 0 : _a[DRAFTABLE]) || isMap(value) || isSet(value);
+}
+var objectCtorString = Object.prototype.constructor.toString();
+function isPlainObject(value) {
+  if (!value || typeof value !== "object")
+    return false;
+  const proto = getPrototypeOf(value);
+  if (proto === null) {
+    return true;
+  }
+  const Ctor = Object.hasOwnProperty.call(proto, "constructor") && proto.constructor;
+  if (Ctor === Object)
+    return true;
+  return typeof Ctor == "function" && Function.toString.call(Ctor) === objectCtorString;
+}
+function original(value) {
+  if (!isDraft(value))
+    die(15, value);
+  return value[DRAFT_STATE].base_;
+}
+function each(obj, iter) {
+  if (getArchtype(obj) === 0 /* Object */) {
+    Reflect.ownKeys(obj).forEach((key) => {
+      iter(key, obj[key], obj);
+    });
+  } else {
+    obj.forEach((entry, index) => iter(index, entry, obj));
+  }
+}
+function getArchtype(thing) {
+  const state = thing[DRAFT_STATE];
+  return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;
+}
+function has(thing, prop) {
+  return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);
+}
+function get(thing, prop) {
+  return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];
+}
+function set(thing, propOrOldValue, value) {
+  const t = getArchtype(thing);
+  if (t === 2 /* Map */)
+    thing.set(propOrOldValue, value);
+  else if (t === 3 /* Set */) {
+    thing.add(value);
+  } else
+    thing[propOrOldValue] = value;
+}
+function is(x, y) {
+  if (x === y) {
+    return x !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+}
+function isMap(target) {
+  return target instanceof Map;
+}
+function isSet(target) {
+  return target instanceof Set;
+}
+function latest(state) {
+  return state.copy_ || state.base_;
+}
+function shallowCopy(base, strict) {
+  if (isMap(base)) {
+    return new Map(base);
+  }
+  if (isSet(base)) {
+    return new Set(base);
+  }
+  if (Array.isArray(base))
+    return Array.prototype.slice.call(base);
+  const isPlain = isPlainObject(base);
+  if (strict === true || strict === "class_only" && !isPlain) {
+    const descriptors = Object.getOwnPropertyDescriptors(base);
+    delete descriptors[DRAFT_STATE];
+    let keys = Reflect.ownKeys(descriptors);
+    for (let i = 0; i < keys.length; i++) {
+      const key = keys[i];
+      const desc = descriptors[key];
+      if (desc.writable === false) {
+        desc.writable = true;
+        desc.configurable = true;
+      }
+      if (desc.get || desc.set)
+        descriptors[key] = {
+          configurable: true,
+          writable: true,
+          // could live with !!desc.set as well here...
+          enumerable: desc.enumerable,
+          value: base[key]
+        };
+    }
+    return Object.create(getPrototypeOf(base), descriptors);
+  } else {
+    const proto = getPrototypeOf(base);
+    if (proto !== null && isPlain) {
+      return __spreadValues({}, base);
+    }
+    const obj = Object.create(proto);
+    return Object.assign(obj, base);
+  }
+}
+function freeze(obj, deep = false) {
+  if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))
+    return obj;
+  if (getArchtype(obj) > 1) {
+    obj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections;
+  }
+  Object.freeze(obj);
+  if (deep)
+    Object.entries(obj).forEach(([key, value]) => freeze(value, true));
+  return obj;
+}
+function dontMutateFrozenCollections() {
+  die(2);
+}
+function isFrozen(obj) {
+  return Object.isFrozen(obj);
+}
+
+// src/utils/plugins.ts
+var plugins = {};
+function getPlugin(pluginKey) {
+  const plugin = plugins[pluginKey];
+  if (!plugin) {
+    die(0, pluginKey);
+  }
+  return plugin;
+}
+function loadPlugin(pluginKey, implementation) {
+  if (!plugins[pluginKey])
+    plugins[pluginKey] = implementation;
+}
+
+// src/core/scope.ts
+var currentScope;
+function getCurrentScope() {
+  return currentScope;
+}
+function createScope(parent_, immer_) {
+  return {
+    drafts_: [],
+    parent_,
+    immer_,
+    // Whenever the modified draft contains a draft from another scope, we
+    // need to prevent auto-freezing so the unowned draft can be finalized.
+    canAutoFreeze_: true,
+    unfinalizedDrafts_: 0
+  };
+}
+function usePatchesInScope(scope, patchListener) {
+  if (patchListener) {
+    getPlugin("Patches");
+    scope.patches_ = [];
+    scope.inversePatches_ = [];
+    scope.patchListener_ = patchListener;
+  }
+}
+function revokeScope(scope) {
+  leaveScope(scope);
+  scope.drafts_.forEach(revokeDraft);
+  scope.drafts_ = null;
+}
+function leaveScope(scope) {
+  if (scope === currentScope) {
+    currentScope = scope.parent_;
+  }
+}
+function enterScope(immer2) {
+  return currentScope = createScope(currentScope, immer2);
+}
+function revokeDraft(draft) {
+  const state = draft[DRAFT_STATE];
+  if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)
+    state.revoke_();
+  else
+    state.revoked_ = true;
+}
+
+// src/core/finalize.ts
+function processResult(result, scope) {
+  scope.unfinalizedDrafts_ = scope.drafts_.length;
+  const baseDraft = scope.drafts_[0];
+  const isReplaced = result !== void 0 && result !== baseDraft;
+  if (isReplaced) {
+    if (baseDraft[DRAFT_STATE].modified_) {
+      revokeScope(scope);
+      die(4);
+    }
+    if (isDraftable(result)) {
+      result = finalize(scope, result);
+      if (!scope.parent_)
+        maybeFreeze(scope, result);
+    }
+    if (scope.patches_) {
+      getPlugin("Patches").generateReplacementPatches_(
+        baseDraft[DRAFT_STATE].base_,
+        result,
+        scope.patches_,
+        scope.inversePatches_
+      );
+    }
+  } else {
+    result = finalize(scope, baseDraft, []);
+  }
+  revokeScope(scope);
+  if (scope.patches_) {
+    scope.patchListener_(scope.patches_, scope.inversePatches_);
+  }
+  return result !== NOTHING ? result : void 0;
+}
+function finalize(rootScope, value, path) {
+  if (isFrozen(value))
+    return value;
+  const state = value[DRAFT_STATE];
+  if (!state) {
+    each(
+      value,
+      (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)
+    );
+    return value;
+  }
+  if (state.scope_ !== rootScope)
+    return value;
+  if (!state.modified_) {
+    maybeFreeze(rootScope, state.base_, true);
+    return state.base_;
+  }
+  if (!state.finalized_) {
+    state.finalized_ = true;
+    state.scope_.unfinalizedDrafts_--;
+    const result = state.copy_;
+    let resultEach = result;
+    let isSet2 = false;
+    if (state.type_ === 3 /* Set */) {
+      resultEach = new Set(result);
+      result.clear();
+      isSet2 = true;
+    }
+    each(
+      resultEach,
+      (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)
+    );
+    maybeFreeze(rootScope, result, false);
+    if (path && rootScope.patches_) {
+      getPlugin("Patches").generatePatches_(
+        state,
+        path,
+        rootScope.patches_,
+        rootScope.inversePatches_
+      );
+    }
+  }
+  return state.copy_;
+}
+function finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {
+  if (process.env.NODE_ENV !== "production" && childValue === targetObject)
+    die(5);
+  if (isDraft(childValue)) {
+    const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.
+    !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;
+    const res = finalize(rootScope, childValue, path);
+    set(targetObject, prop, res);
+    if (isDraft(res)) {
+      rootScope.canAutoFreeze_ = false;
+    } else
+      return;
+  } else if (targetIsSet) {
+    targetObject.add(childValue);
+  }
+  if (isDraftable(childValue) && !isFrozen(childValue)) {
+    if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {
+      return;
+    }
+    finalize(rootScope, childValue);
+    if ((!parentState || !parentState.scope_.parent_) && typeof prop !== "symbol" && Object.prototype.propertyIsEnumerable.call(targetObject, prop))
+      maybeFreeze(rootScope, childValue);
+  }
+}
+function maybeFreeze(scope, value, deep = false) {
+  if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {
+    freeze(value, deep);
+  }
+}
+
+// src/core/proxy.ts
+function createProxyProxy(base, parent) {
+  const isArray = Array.isArray(base);
+  const state = {
+    type_: isArray ? 1 /* Array */ : 0 /* Object */,
+    // Track which produce call this is associated with.
+    scope_: parent ? parent.scope_ : getCurrentScope(),
+    // True for both shallow and deep changes.
+    modified_: false,
+    // Used during finalization.
+    finalized_: false,
+    // Track which properties have been assigned (true) or deleted (false).
+    assigned_: {},
+    // The parent draft state.
+    parent_: parent,
+    // The base state.
+    base_: base,
+    // The base proxy.
+    draft_: null,
+    // set below
+    // The base copy with any updated values.
+    copy_: null,
+    // Called by the `produce` function.
+    revoke_: null,
+    isManual_: false
+  };
+  let target = state;
+  let traps = objectTraps;
+  if (isArray) {
+    target = [state];
+    traps = arrayTraps;
+  }
+  const { revoke, proxy } = Proxy.revocable(target, traps);
+  state.draft_ = proxy;
+  state.revoke_ = revoke;
+  return proxy;
+}
+var objectTraps = {
+  get(state, prop) {
+    if (prop === DRAFT_STATE)
+      return state;
+    const source = latest(state);
+    if (!has(source, prop)) {
+      return readPropFromProto(state, source, prop);
+    }
+    const value = source[prop];
+    if (state.finalized_ || !isDraftable(value)) {
+      return value;
+    }
+    if (value === peek(state.base_, prop)) {
+      prepareCopy(state);
+      return state.copy_[prop] = createProxy(value, state);
+    }
+    return value;
+  },
+  has(state, prop) {
+    return prop in latest(state);
+  },
+  ownKeys(state) {
+    return Reflect.ownKeys(latest(state));
+  },
+  set(state, prop, value) {
+    const desc = getDescriptorFromProto(latest(state), prop);
+    if (desc == null ? void 0 : desc.set) {
+      desc.set.call(state.draft_, value);
+      return true;
+    }
+    if (!state.modified_) {
+      const current2 = peek(latest(state), prop);
+      const currentState = current2 == null ? void 0 : current2[DRAFT_STATE];
+      if (currentState && currentState.base_ === value) {
+        state.copy_[prop] = value;
+        state.assigned_[prop] = false;
+        return true;
+      }
+      if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))
+        return true;
+      prepareCopy(state);
+      markChanged(state);
+    }
+    if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'
+    (value !== void 0 || prop in state.copy_) || // special case: NaN
+    Number.isNaN(value) && Number.isNaN(state.copy_[prop]))
+      return true;
+    state.copy_[prop] = value;
+    state.assigned_[prop] = true;
+    return true;
+  },
+  deleteProperty(state, prop) {
+    if (peek(state.base_, prop) !== void 0 || prop in state.base_) {
+      state.assigned_[prop] = false;
+      prepareCopy(state);
+      markChanged(state);
+    } else {
+      delete state.assigned_[prop];
+    }
+    if (state.copy_) {
+      delete state.copy_[prop];
+    }
+    return true;
+  },
+  // Note: We never coerce `desc.value` into an Immer draft, because we can't make
+  // the same guarantee in ES5 mode.
+  getOwnPropertyDescriptor(state, prop) {
+    const owner = latest(state);
+    const desc = Reflect.getOwnPropertyDescriptor(owner, prop);
+    if (!desc)
+      return desc;
+    return {
+      writable: true,
+      configurable: state.type_ !== 1 /* Array */ || prop !== "length",
+      enumerable: desc.enumerable,
+      value: owner[prop]
+    };
+  },
+  defineProperty() {
+    die(11);
+  },
+  getPrototypeOf(state) {
+    return getPrototypeOf(state.base_);
+  },
+  setPrototypeOf() {
+    die(12);
+  }
+};
+var arrayTraps = {};
+each(objectTraps, (key, fn) => {
+  arrayTraps[key] = function() {
+    arguments[0] = arguments[0][0];
+    return fn.apply(this, arguments);
+  };
+});
+arrayTraps.deleteProperty = function(state, prop) {
+  if (process.env.NODE_ENV !== "production" && isNaN(parseInt(prop)))
+    die(13);
+  return arrayTraps.set.call(this, state, prop, void 0);
+};
+arrayTraps.set = function(state, prop, value) {
+  if (process.env.NODE_ENV !== "production" && prop !== "length" && isNaN(parseInt(prop)))
+    die(14);
+  return objectTraps.set.call(this, state[0], prop, value, state[0]);
+};
+function peek(draft, prop) {
+  const state = draft[DRAFT_STATE];
+  const source = state ? latest(state) : draft;
+  return source[prop];
+}
+function readPropFromProto(state, source, prop) {
+  var _a;
+  const desc = getDescriptorFromProto(source, prop);
+  return desc ? `value` in desc ? desc.value : (
+    // This is a very special case, if the prop is a getter defined by the
+    // prototype, we should invoke it with the draft as context!
+    (_a = desc.get) == null ? void 0 : _a.call(state.draft_)
+  ) : void 0;
+}
+function getDescriptorFromProto(source, prop) {
+  if (!(prop in source))
+    return void 0;
+  let proto = getPrototypeOf(source);
+  while (proto) {
+    const desc = Object.getOwnPropertyDescriptor(proto, prop);
+    if (desc)
+      return desc;
+    proto = getPrototypeOf(proto);
+  }
+  return void 0;
+}
+function markChanged(state) {
+  if (!state.modified_) {
+    state.modified_ = true;
+    if (state.parent_) {
+      markChanged(state.parent_);
+    }
+  }
+}
+function prepareCopy(state) {
+  if (!state.copy_) {
+    state.copy_ = shallowCopy(
+      state.base_,
+      state.scope_.immer_.useStrictShallowCopy_
+    );
+  }
+}
+
+// src/core/immerClass.ts
+var Immer2 = class {
+  constructor(config) {
+    this.autoFreeze_ = true;
+    this.useStrictShallowCopy_ = false;
+    /**
+     * The `produce` function takes a value and a "recipe function" (whose
+     * return value often depends on the base state). The recipe function is
+     * free to mutate its first argument however it wants. All mutations are
+     * only ever applied to a __copy__ of the base state.
+     *
+     * Pass only a function to create a "curried producer" which relieves you
+     * from passing the recipe function every time.
+     *
+     * Only plain objects and arrays are made mutable. All other objects are
+     * considered uncopyable.
+     *
+     * Note: This function is __bound__ to its `Immer` instance.
+     *
+     * @param {any} base - the initial state
+     * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified
+     * @param {Function} patchListener - optional function that will be called with all the patches produced here
+     * @returns {any} a new state, or the initial state if nothing was modified
+     */
+    this.produce = (base, recipe, patchListener) => {
+      if (typeof base === "function" && typeof recipe !== "function") {
+        const defaultBase = recipe;
+        recipe = base;
+        const self = this;
+        return function curriedProduce(base2 = defaultBase, ...args) {
+          return self.produce(base2, (draft) => recipe.call(this, draft, ...args));
+        };
+      }
+      if (typeof recipe !== "function")
+        die(6);
+      if (patchListener !== void 0 && typeof patchListener !== "function")
+        die(7);
+      let result;
+      if (isDraftable(base)) {
+        const scope = enterScope(this);
+        const proxy = createProxy(base, void 0);
+        let hasError = true;
+        try {
+          result = recipe(proxy);
+          hasError = false;
+        } finally {
+          if (hasError)
+            revokeScope(scope);
+          else
+            leaveScope(scope);
+        }
+        usePatchesInScope(scope, patchListener);
+        return processResult(result, scope);
+      } else if (!base || typeof base !== "object") {
+        result = recipe(base);
+        if (result === void 0)
+          result = base;
+        if (result === NOTHING)
+          result = void 0;
+        if (this.autoFreeze_)
+          freeze(result, true);
+        if (patchListener) {
+          const p = [];
+          const ip = [];
+          getPlugin("Patches").generateReplacementPatches_(base, result, p, ip);
+          patchListener(p, ip);
+        }
+        return result;
+      } else
+        die(1, base);
+    };
+    this.produceWithPatches = (base, recipe) => {
+      if (typeof base === "function") {
+        return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));
+      }
+      let patches, inversePatches;
+      const result = this.produce(base, recipe, (p, ip) => {
+        patches = p;
+        inversePatches = ip;
+      });
+      return [result, patches, inversePatches];
+    };
+    if (typeof (config == null ? void 0 : config.autoFreeze) === "boolean")
+      this.setAutoFreeze(config.autoFreeze);
+    if (typeof (config == null ? void 0 : config.useStrictShallowCopy) === "boolean")
+      this.setUseStrictShallowCopy(config.useStrictShallowCopy);
+  }
+  createDraft(base) {
+    if (!isDraftable(base))
+      die(8);
+    if (isDraft(base))
+      base = current(base);
+    const scope = enterScope(this);
+    const proxy = createProxy(base, void 0);
+    proxy[DRAFT_STATE].isManual_ = true;
+    leaveScope(scope);
+    return proxy;
+  }
+  finishDraft(draft, patchListener) {
+    const state = draft && draft[DRAFT_STATE];
+    if (!state || !state.isManual_)
+      die(9);
+    const { scope_: scope } = state;
+    usePatchesInScope(scope, patchListener);
+    return processResult(void 0, scope);
+  }
+  /**
+   * Pass true to automatically freeze all copies created by Immer.
+   *
+   * By default, auto-freezing is enabled.
+   */
+  setAutoFreeze(value) {
+    this.autoFreeze_ = value;
+  }
+  /**
+   * Pass true to enable strict shallow copy.
+   *
+   * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.
+   */
+  setUseStrictShallowCopy(value) {
+    this.useStrictShallowCopy_ = value;
+  }
+  applyPatches(base, patches) {
+    let i;
+    for (i = patches.length - 1; i >= 0; i--) {
+      const patch = patches[i];
+      if (patch.path.length === 0 && patch.op === "replace") {
+        base = patch.value;
+        break;
+      }
+    }
+    if (i > -1) {
+      patches = patches.slice(i + 1);
+    }
+    const applyPatchesImpl = getPlugin("Patches").applyPatches_;
+    if (isDraft(base)) {
+      return applyPatchesImpl(base, patches);
+    }
+    return this.produce(
+      base,
+      (draft) => applyPatchesImpl(draft, patches)
+    );
+  }
+};
+function createProxy(value, parent) {
+  const draft = isMap(value) ? getPlugin("MapSet").proxyMap_(value, parent) : isSet(value) ? getPlugin("MapSet").proxySet_(value, parent) : createProxyProxy(value, parent);
+  const scope = parent ? parent.scope_ : getCurrentScope();
+  scope.drafts_.push(draft);
+  return draft;
+}
+
+// src/core/current.ts
+function current(value) {
+  if (!isDraft(value))
+    die(10, value);
+  return currentImpl(value);
+}
+function currentImpl(value) {
+  if (!isDraftable(value) || isFrozen(value))
+    return value;
+  const state = value[DRAFT_STATE];
+  let copy;
+  if (state) {
+    if (!state.modified_)
+      return state.base_;
+    state.finalized_ = true;
+    copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);
+  } else {
+    copy = shallowCopy(value, true);
+  }
+  each(copy, (key, childValue) => {
+    set(copy, key, currentImpl(childValue));
+  });
+  if (state) {
+    state.finalized_ = false;
+  }
+  return copy;
+}
+
+// src/plugins/patches.ts
+function enablePatches() {
+  const errorOffset = 16;
+  if (process.env.NODE_ENV !== "production") {
+    errors.push(
+      'Sets cannot have "replace" patches.',
+      function(op) {
+        return "Unsupported patch operation: " + op;
+      },
+      function(path) {
+        return "Cannot apply patch, path doesn't resolve: " + path;
+      },
+      "Patching reserved attributes like __proto__, prototype and constructor is not allowed"
+    );
+  }
+  const REPLACE = "replace";
+  const ADD = "add";
+  const REMOVE = "remove";
+  function generatePatches_(state, basePath, patches, inversePatches) {
+    switch (state.type_) {
+      case 0 /* Object */:
+      case 2 /* Map */:
+        return generatePatchesFromAssigned(
+          state,
+          basePath,
+          patches,
+          inversePatches
+        );
+      case 1 /* Array */:
+        return generateArrayPatches(state, basePath, patches, inversePatches);
+      case 3 /* Set */:
+        return generateSetPatches(
+          state,
+          basePath,
+          patches,
+          inversePatches
+        );
+    }
+  }
+  function generateArrayPatches(state, basePath, patches, inversePatches) {
+    let { base_, assigned_ } = state;
+    let copy_ = state.copy_;
+    if (copy_.length < base_.length) {
+      ;
+      [base_, copy_] = [copy_, base_];
+      [patches, inversePatches] = [inversePatches, patches];
+    }
+    for (let i = 0; i < base_.length; i++) {
+      if (assigned_[i] && copy_[i] !== base_[i]) {
+        const path = basePath.concat([i]);
+        patches.push({
+          op: REPLACE,
+          path,
+          // Need to maybe clone it, as it can in fact be the original value
+          // due to the base/copy inversion at the start of this function
+          value: clonePatchValueIfNeeded(copy_[i])
+        });
+        inversePatches.push({
+          op: REPLACE,
+          path,
+          value: clonePatchValueIfNeeded(base_[i])
+        });
+      }
+    }
+    for (let i = base_.length; i < copy_.length; i++) {
+      const path = basePath.concat([i]);
+      patches.push({
+        op: ADD,
+        path,
+        // Need to maybe clone it, as it can in fact be the original value
+        // due to the base/copy inversion at the start of this function
+        value: clonePatchValueIfNeeded(copy_[i])
+      });
+    }
+    for (let i = copy_.length - 1; base_.length <= i; --i) {
+      const path = basePath.concat([i]);
+      inversePatches.push({
+        op: REMOVE,
+        path
+      });
+    }
+  }
+  function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {
+    const { base_, copy_ } = state;
+    each(state.assigned_, (key, assignedValue) => {
+      const origValue = get(base_, key);
+      const value = get(copy_, key);
+      const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;
+      if (origValue === value && op === REPLACE)
+        return;
+      const path = basePath.concat(key);
+      patches.push(op === REMOVE ? { op, path } : { op, path, value });
+      inversePatches.push(
+        op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }
+      );
+    });
+  }
+  function generateSetPatches(state, basePath, patches, inversePatches) {
+    let { base_, copy_ } = state;
+    let i = 0;
+    base_.forEach((value) => {
+      if (!copy_.has(value)) {
+        const path = basePath.concat([i]);
+        patches.push({
+          op: REMOVE,
+          path,
+          value
+        });
+        inversePatches.unshift({
+          op: ADD,
+          path,
+          value
+        });
+      }
+      i++;
+    });
+    i = 0;
+    copy_.forEach((value) => {
+      if (!base_.has(value)) {
+        const path = basePath.concat([i]);
+        patches.push({
+          op: ADD,
+          path,
+          value
+        });
+        inversePatches.unshift({
+          op: REMOVE,
+          path,
+          value
+        });
+      }
+      i++;
+    });
+  }
+  function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {
+    patches.push({
+      op: REPLACE,
+      path: [],
+      value: replacement === NOTHING ? void 0 : replacement
+    });
+    inversePatches.push({
+      op: REPLACE,
+      path: [],
+      value: baseValue
+    });
+  }
+  function applyPatches_(draft, patches) {
+    patches.forEach((patch) => {
+      const { path, op } = patch;
+      let base = draft;
+      for (let i = 0; i < path.length - 1; i++) {
+        const parentType = getArchtype(base);
+        let p = path[i];
+        if (typeof p !== "string" && typeof p !== "number") {
+          p = "" + p;
+        }
+        if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === "__proto__" || p === "constructor"))
+          die(errorOffset + 3);
+        if (typeof base === "function" && p === "prototype")
+          die(errorOffset + 3);
+        base = get(base, p);
+        if (typeof base !== "object")
+          die(errorOffset + 2, path.join("/"));
+      }
+      const type = getArchtype(base);
+      const value = deepClonePatchValue(patch.value);
+      const key = path[path.length - 1];
+      switch (op) {
+        case REPLACE:
+          switch (type) {
+            case 2 /* Map */:
+              return base.set(key, value);
+            case 3 /* Set */:
+              die(errorOffset);
+            default:
+              return base[key] = value;
+          }
+        case ADD:
+          switch (type) {
+            case 1 /* Array */:
+              return key === "-" ? base.push(value) : base.splice(key, 0, value);
+            case 2 /* Map */:
+              return base.set(key, value);
+            case 3 /* Set */:
+              return base.add(value);
+            default:
+              return base[key] = value;
+          }
+        case REMOVE:
+          switch (type) {
+            case 1 /* Array */:
+              return base.splice(key, 1);
+            case 2 /* Map */:
+              return base.delete(key);
+            case 3 /* Set */:
+              return base.delete(patch.value);
+            default:
+              return delete base[key];
+          }
+        default:
+          die(errorOffset + 1, op);
+      }
+    });
+    return draft;
+  }
+  function deepClonePatchValue(obj) {
+    if (!isDraftable(obj))
+      return obj;
+    if (Array.isArray(obj))
+      return obj.map(deepClonePatchValue);
+    if (isMap(obj))
+      return new Map(
+        Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])
+      );
+    if (isSet(obj))
+      return new Set(Array.from(obj).map(deepClonePatchValue));
+    const cloned = Object.create(getPrototypeOf(obj));
+    for (const key in obj)
+      cloned[key] = deepClonePatchValue(obj[key]);
+    if (has(obj, DRAFTABLE))
+      cloned[DRAFTABLE] = obj[DRAFTABLE];
+    return cloned;
+  }
+  function clonePatchValueIfNeeded(obj) {
+    if (isDraft(obj)) {
+      return deepClonePatchValue(obj);
+    } else
+      return obj;
+  }
+  loadPlugin("Patches", {
+    applyPatches_,
+    generatePatches_,
+    generateReplacementPatches_
+  });
+}
+
+// src/plugins/mapset.ts
+function enableMapSet() {
+  class DraftMap extends Map {
+    constructor(target, parent) {
+      super();
+      this[DRAFT_STATE] = {
+        type_: 2 /* Map */,
+        parent_: parent,
+        scope_: parent ? parent.scope_ : getCurrentScope(),
+        modified_: false,
+        finalized_: false,
+        copy_: void 0,
+        assigned_: void 0,
+        base_: target,
+        draft_: this,
+        isManual_: false,
+        revoked_: false
+      };
+    }
+    get size() {
+      return latest(this[DRAFT_STATE]).size;
+    }
+    has(key) {
+      return latest(this[DRAFT_STATE]).has(key);
+    }
+    set(key, value) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (!latest(state).has(key) || latest(state).get(key) !== value) {
+        prepareMapCopy(state);
+        markChanged(state);
+        state.assigned_.set(key, true);
+        state.copy_.set(key, value);
+        state.assigned_.set(key, true);
+      }
+      return this;
+    }
+    delete(key) {
+      if (!this.has(key)) {
+        return false;
+      }
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareMapCopy(state);
+      markChanged(state);
+      if (state.base_.has(key)) {
+        state.assigned_.set(key, false);
+      } else {
+        state.assigned_.delete(key);
+      }
+      state.copy_.delete(key);
+      return true;
+    }
+    clear() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (latest(state).size) {
+        prepareMapCopy(state);
+        markChanged(state);
+        state.assigned_ = /* @__PURE__ */ new Map();
+        each(state.base_, (key) => {
+          state.assigned_.set(key, false);
+        });
+        state.copy_.clear();
+      }
+    }
+    forEach(cb, thisArg) {
+      const state = this[DRAFT_STATE];
+      latest(state).forEach((_value, key, _map) => {
+        cb.call(thisArg, this.get(key), key, this);
+      });
+    }
+    get(key) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      const value = latest(state).get(key);
+      if (state.finalized_ || !isDraftable(value)) {
+        return value;
+      }
+      if (value !== state.base_.get(key)) {
+        return value;
+      }
+      const draft = createProxy(value, state);
+      prepareMapCopy(state);
+      state.copy_.set(key, draft);
+      return draft;
+    }
+    keys() {
+      return latest(this[DRAFT_STATE]).keys();
+    }
+    values() {
+      const iterator = this.keys();
+      return {
+        [Symbol.iterator]: () => this.values(),
+        next: () => {
+          const r = iterator.next();
+          if (r.done)
+            return r;
+          const value = this.get(r.value);
+          return {
+            done: false,
+            value
+          };
+        }
+      };
+    }
+    entries() {
+      const iterator = this.keys();
+      return {
+        [Symbol.iterator]: () => this.entries(),
+        next: () => {
+          const r = iterator.next();
+          if (r.done)
+            return r;
+          const value = this.get(r.value);
+          return {
+            done: false,
+            value: [r.value, value]
+          };
+        }
+      };
+    }
+    [(DRAFT_STATE, Symbol.iterator)]() {
+      return this.entries();
+    }
+  }
+  function proxyMap_(target, parent) {
+    return new DraftMap(target, parent);
+  }
+  function prepareMapCopy(state) {
+    if (!state.copy_) {
+      state.assigned_ = /* @__PURE__ */ new Map();
+      state.copy_ = new Map(state.base_);
+    }
+  }
+  class DraftSet extends Set {
+    constructor(target, parent) {
+      super();
+      this[DRAFT_STATE] = {
+        type_: 3 /* Set */,
+        parent_: parent,
+        scope_: parent ? parent.scope_ : getCurrentScope(),
+        modified_: false,
+        finalized_: false,
+        copy_: void 0,
+        base_: target,
+        draft_: this,
+        drafts_: /* @__PURE__ */ new Map(),
+        revoked_: false,
+        isManual_: false
+      };
+    }
+    get size() {
+      return latest(this[DRAFT_STATE]).size;
+    }
+    has(value) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (!state.copy_) {
+        return state.base_.has(value);
+      }
+      if (state.copy_.has(value))
+        return true;
+      if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))
+        return true;
+      return false;
+    }
+    add(value) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (!this.has(value)) {
+        prepareSetCopy(state);
+        markChanged(state);
+        state.copy_.add(value);
+      }
+      return this;
+    }
+    delete(value) {
+      if (!this.has(value)) {
+        return false;
+      }
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareSetCopy(state);
+      markChanged(state);
+      return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (
+        /* istanbul ignore next */
+        false
+      ));
+    }
+    clear() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (latest(state).size) {
+        prepareSetCopy(state);
+        markChanged(state);
+        state.copy_.clear();
+      }
+    }
+    values() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareSetCopy(state);
+      return state.copy_.values();
+    }
+    entries() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareSetCopy(state);
+      return state.copy_.entries();
+    }
+    keys() {
+      return this.values();
+    }
+    [(DRAFT_STATE, Symbol.iterator)]() {
+      return this.values();
+    }
+    forEach(cb, thisArg) {
+      const iterator = this.values();
+      let result = iterator.next();
+      while (!result.done) {
+        cb.call(thisArg, result.value, result.value, this);
+        result = iterator.next();
+      }
+    }
+  }
+  function proxySet_(target, parent) {
+    return new DraftSet(target, parent);
+  }
+  function prepareSetCopy(state) {
+    if (!state.copy_) {
+      state.copy_ = /* @__PURE__ */ new Set();
+      state.base_.forEach((value) => {
+        if (isDraftable(value)) {
+          const draft = createProxy(value, state);
+          state.drafts_.set(value, draft);
+          state.copy_.add(draft);
+        } else {
+          state.copy_.add(value);
+        }
+      });
+    }
+  }
+  function assertUnrevoked(state) {
+    if (state.revoked_)
+      die(3, JSON.stringify(latest(state)));
+  }
+  loadPlugin("MapSet", { proxyMap_, proxySet_ });
+}
+
+// src/immer.ts
+var immer = new Immer2();
+var produce = immer.produce;
+var produceWithPatches = immer.produceWithPatches.bind(
+  immer
+);
+var setAutoFreeze = immer.setAutoFreeze.bind(immer);
+var setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer);
+var applyPatches = immer.applyPatches.bind(immer);
+var createDraft = immer.createDraft.bind(immer);
+var finishDraft = immer.finishDraft.bind(immer);
+function castDraft(value) {
+  return value;
+}
+function castImmutable(value) {
+  return value;
+}
+export {
+  Immer2 as Immer,
+  applyPatches,
+  castDraft,
+  castImmutable,
+  createDraft,
+  current,
+  enableMapSet,
+  enablePatches,
+  finishDraft,
+  freeze,
+  DRAFTABLE as immerable,
+  isDraft,
+  isDraftable,
+  NOTHING as nothing,
+  original,
+  produce,
+  produceWithPatches,
+  setAutoFreeze,
+  setUseStrictShallowCopy
+};
+//# sourceMappingURL=immer.legacy-esm.js.map
Index: node_modules/immer/dist/immer.legacy-esm.js.map
===================================================================
--- node_modules/immer/dist/immer.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/immer.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/utils/env.ts","../src/utils/errors.ts","../src/utils/common.ts","../src/utils/plugins.ts","../src/core/scope.ts","../src/core/finalize.ts","../src/core/proxy.ts","../src/core/immerClass.ts","../src/core/current.ts","../src/plugins/patches.ts","../src/plugins/mapset.ts","../src/immer.ts"],"sourcesContent":["// Should be no imports here!\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: unique symbol = Symbol.for(\"immer-nothing\")\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = Symbol.for(\"immer-draftable\")\n\nexport const DRAFT_STATE: unique symbol = Symbol.for(\"immer-state\")\n","export const errors =\n\tprocess.env.NODE_ENV !== \"production\"\n\t\t? [\n\t\t\t\t// All error codes, starting by 0:\n\t\t\t\tfunction(plugin: string) {\n\t\t\t\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t\t\t\t},\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t\t\t\t},\n\t\t\t\t\"This object has been frozen and should not be mutated\",\n\t\t\t\tfunction(data: any) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\t\t\t\tdata\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t\t\t\t\"Immer forbids circular references\",\n\t\t\t\t\"The first or second argument to `produce` must be a function\",\n\t\t\t\t\"The third argument to `produce` must be a function or undefined\",\n\t\t\t\t\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t\t\t\t\"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'current' expects a draft, got: ${thing}`\n\t\t\t\t},\n\t\t\t\t\"Object.defineProperty() cannot be used on an Immer draft\",\n\t\t\t\t\"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t\t\t\t\"Immer only supports deleting array indices\",\n\t\t\t\t\"Immer only supports setting array indices and the 'length' property\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'original' expects a draft, got: ${thing}`\n\t\t\t\t}\n\t\t\t\t// Note: if more errors are added, the errorOffset in Patches.ts should be increased\n\t\t\t\t// See Patches.ts for additional errors\n\t\t  ]\n\t\t: []\n\nexport function die(error: number, ...args: any[]): never {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst e = errors[error]\n\t\tconst msg = typeof e === \"function\" ? e.apply(null, args as any) : e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\tArchType,\n\tdie,\n\tStrictMode\n} from \"../internal\"\n\nexport const getPrototypeOf = Object.getPrototypeOf\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(15, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/**\n * Each iterates a map, set or array.\n * Or, if any other kind of object, all of its own properties.\n * Regardless whether they are enumerable or symbols\n */\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void\n): void\nexport function each(obj: any, iter: any) {\n\tif (getArchtype(obj) === ArchType.Object) {\n\t\tReflect.ownKeys(obj).forEach(key => {\n\t\t\titer(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): ArchType {\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_\n\t\t: Array.isArray(thing)\n\t\t? ArchType.Array\n\t\t: isMap(thing)\n\t\t? ArchType.Map\n\t\t: isSet(thing)\n\t\t? ArchType.Set\n\t\t: ArchType.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === ArchType.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === ArchType.Map) thing.set(propOrOldValue, value)\n\telse if (t === ArchType.Set) {\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any, strict: StrictMode) {\n\tif (isMap(base)) {\n\t\treturn new Map(base)\n\t}\n\tif (isSet(base)) {\n\t\treturn new Set(base)\n\t}\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\n\tconst isPlain = isPlainObject(base)\n\n\tif (strict === true || (strict === \"class_only\" && !isPlain)) {\n\t\t// Perform a strict copy\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(base)\n\t\tdelete descriptors[DRAFT_STATE as any]\n\t\tlet keys = Reflect.ownKeys(descriptors)\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key: any = keys[i]\n\t\t\tconst desc = descriptors[key]\n\t\t\tif (desc.writable === false) {\n\t\t\t\tdesc.writable = true\n\t\t\t\tdesc.configurable = true\n\t\t\t}\n\t\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t\t// with libraries that trap values, like mobx or vue\n\t\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\t\tif (desc.get || desc.set)\n\t\t\t\tdescriptors[key] = {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\t\tvalue: base[key]\n\t\t\t\t}\n\t\t}\n\t\treturn Object.create(getPrototypeOf(base), descriptors)\n\t} else {\n\t\t// perform a sloppy copy\n\t\tconst proto = getPrototypeOf(base)\n\t\tif (proto !== null && isPlain) {\n\t\t\treturn {...base} // assumption: better inner class optimization than the assign below\n\t\t}\n\t\tconst obj = Object.create(proto)\n\t\treturn Object.assign(obj, base)\n\t}\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep)\n\t\t// See #590, don't recurse into non-enumerable / Symbol properties when freezing\n\t\t// So use Object.entries (only string-like, enumerables) instead of each()\n\t\tObject.entries(obj).forEach(([key, value]) => freeze(value, true))\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tDrafted,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tArchType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: readonly Patch[]): T\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(0, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ArchType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ArchType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tArchType,\n\tgetPlugin\n} from \"../internal\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (state.type_ === ArchType.Object || state.type_ === ArchType.Array)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tArchType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(value, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path)\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result = state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// To preserve insertion order in all cases we then clear the set\n\t\t// And we let finalizeProperty know it needs to re-add non-draft children back to the target\n\t\tlet resultEach = result\n\t\tlet isSet = false\n\t\tif (state.type_ === ArchType.Set) {\n\t\t\tresultEach = new Set(result)\n\t\t\tresult.clear()\n\t\t\tisSet = true\n\t\t}\n\t\teach(resultEach, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path, isSet)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath,\n\ttargetIsSet?: boolean\n) {\n\tif (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n\t\tdie(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t} else if (targetIsSet) {\n\t\ttargetObject.add(childValue)\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// Immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\t// Per #590, we never freeze symbolic properties. Just to make sure don't accidentally interfere\n\t\t// with other frameworks.\n\t\tif (\n\t\t\t(!parentState || !parentState.scope_.parent_) &&\n\t\t\ttypeof prop !== \"symbol\" &&\n\t\t\tObject.prototype.propertyIsEnumerable.call(targetObject, prop)\n\t\t)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\t// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects\n\tif (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tgetPrototypeOf,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tArchType,\n\tImmerScope\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ArchType.Object\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ArchType.Array\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ArchType.Array : (ArchType.Object as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(value, state))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\t(state.copy_![prop] === value &&\n\t\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t\t(value !== undefined || prop in state.copy_)) ||\n\t\t\t// special case: NaN\n\t\t\t(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\tif (state.copy_) {\n\t\t\tdelete state.copy_[prop]\n\t\t}\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ArchType.Array || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop as any)))\n\t\tdie(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (\n\t\tprocess.env.NODE_ENV !== \"production\" &&\n\t\tprop !== \"length\" &&\n\t\tisNaN(parseInt(prop as any))\n\t)\n\t\tdie(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t  // prototype, we should invoke it with the draft as context!\n\t\t\t  desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {\n\tbase_: any\n\tcopy_: any\n\tscope_: ImmerScope\n}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(\n\t\t\tstate.base_,\n\t\t\tstate.scope_.immer_.useStrictShallowCopy_\n\t\t)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport type StrictMode = boolean | \"class_only\";\n\nexport class Immer implements ProducersFns {\n\tautoFreeze_: boolean = true\n\tuseStrictShallowCopy_: StrictMode = false\n\n\tconstructor(config?: {\n\t\tautoFreeze?: boolean\n\t\tuseStrictShallowCopy?: StrictMode\n\t}) {\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t\tif (typeof config?.useStrictShallowCopy === \"boolean\")\n\t\t\tthis.setUseStrictShallowCopy(config!.useStrictShallowCopy)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(1, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (!state || !state.isManual_) die(9)\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to enable strict shallow copy.\n\t *\n\t * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n\t */\n\tsetUseStrictShallowCopy(value: StrictMode) {\n\t\tthis.useStrictShallowCopy_ = value\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: createProxyProxy(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tisFrozen\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(10, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value) || isFrozen(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tif (state) {\n\t\tif (!state.modified_) return state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)\n\t} else {\n\t\tcopy = shallowCopy(value, true)\n\t}\n\t// recurse\n\teach(copy, (key, childValue) => {\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\tif (state) {\n\t\tstate.finalized_ = false\n\t}\n\treturn copy\n}\n","import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tProxyArrayState,\n\tMapState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tgetPrototypeOf,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tArchType,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING,\n\terrors\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst errorOffset = 16\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\terrors.push(\n\t\t\t'Sets cannot have \"replace\" patches.',\n\t\t\tfunction(op: string) {\n\t\t\t\treturn \"Unsupported patch operation: \" + op\n\t\t\t},\n\t\t\tfunction(path: string) {\n\t\t\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t\t\t},\n\t\t\t\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n\t\t)\n\t}\n\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ArchType.Object:\n\t\t\tcase ArchType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ArchType.Array:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ArchType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tfor (let i = copy_.length - 1; base_.length <= i; --i) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tinversePatches.push({\n\t\t\t\top: REMOVE,\n\t\t\t\tpath\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\tbaseValue: any,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: baseValue\n\t\t})\n\t}\n\n\tfunction applyPatches_<T>(draft: T, patches: readonly Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tlet p = path[i]\n\t\t\t\tif (typeof p !== \"string\" && typeof p !== \"number\") {\n\t\t\t\t\tp = \"\" + p\n\t\t\t\t}\n\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === ArchType.Object || parentType === ArchType.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\")\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(errorOffset + 2, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\tdie(errorOffset)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn key === \"-\"\n\t\t\t\t\t\t\t\t? base.push(value)\n\t\t\t\t\t\t\t\t: base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(errorOffset + 1, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue<T>(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded<T>(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n","// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tdie,\n\tArchType,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\tclass DraftMap extends Map {\n\t\t[DRAFT_STATE]: MapState\n\n\t\tconstructor(target: AnyMap, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tset(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tif (state.base_.has(key)) {\n\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t} else {\n\t\t\t\tstate.assigned_!.delete(key)\n\t\t\t}\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tforEach(cb: (value: any, key: any, self: any) => void, thisArg?: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tget(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.entries()\n\t\t}\n\t}\n\n\tfunction proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tclass DraftSet extends Set {\n\t\t[DRAFT_STATE]: SetState\n\t\tconstructor(target: AnySet, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tadd(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn this.values()\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tforEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\t}\n\tfunction proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n","import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tWritableDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\tProducer,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze,\n\tObjectish,\n\tStrictMode\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\nexport const setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\n"],"mappings":"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","names":["immer","isSet","current","Immer","base","Immer"]}
Index: node_modules/immer/dist/immer.mjs
===================================================================
--- node_modules/immer/dist/immer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/immer.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1231 @@
+// src/utils/env.ts
+var NOTHING = Symbol.for("immer-nothing");
+var DRAFTABLE = Symbol.for("immer-draftable");
+var DRAFT_STATE = Symbol.for("immer-state");
+
+// src/utils/errors.ts
+var errors = process.env.NODE_ENV !== "production" ? [
+  // All error codes, starting by 0:
+  function(plugin) {
+    return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \`enable${plugin}()\` when initializing your application.`;
+  },
+  function(thing) {
+    return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;
+  },
+  "This object has been frozen and should not be mutated",
+  function(data) {
+    return "Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? " + data;
+  },
+  "An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.",
+  "Immer forbids circular references",
+  "The first or second argument to `produce` must be a function",
+  "The third argument to `produce` must be a function or undefined",
+  "First argument to `createDraft` must be a plain object, an array, or an immerable object",
+  "First argument to `finishDraft` must be a draft returned by `createDraft`",
+  function(thing) {
+    return `'current' expects a draft, got: ${thing}`;
+  },
+  "Object.defineProperty() cannot be used on an Immer draft",
+  "Object.setPrototypeOf() cannot be used on an Immer draft",
+  "Immer only supports deleting array indices",
+  "Immer only supports setting array indices and the 'length' property",
+  function(thing) {
+    return `'original' expects a draft, got: ${thing}`;
+  }
+  // Note: if more errors are added, the errorOffset in Patches.ts should be increased
+  // See Patches.ts for additional errors
+] : [];
+function die(error, ...args) {
+  if (process.env.NODE_ENV !== "production") {
+    const e = errors[error];
+    const msg = typeof e === "function" ? e.apply(null, args) : e;
+    throw new Error(`[Immer] ${msg}`);
+  }
+  throw new Error(
+    `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`
+  );
+}
+
+// src/utils/common.ts
+var getPrototypeOf = Object.getPrototypeOf;
+function isDraft(value) {
+  return !!value && !!value[DRAFT_STATE];
+}
+function isDraftable(value) {
+  if (!value)
+    return false;
+  return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);
+}
+var objectCtorString = Object.prototype.constructor.toString();
+function isPlainObject(value) {
+  if (!value || typeof value !== "object")
+    return false;
+  const proto = getPrototypeOf(value);
+  if (proto === null) {
+    return true;
+  }
+  const Ctor = Object.hasOwnProperty.call(proto, "constructor") && proto.constructor;
+  if (Ctor === Object)
+    return true;
+  return typeof Ctor == "function" && Function.toString.call(Ctor) === objectCtorString;
+}
+function original(value) {
+  if (!isDraft(value))
+    die(15, value);
+  return value[DRAFT_STATE].base_;
+}
+function each(obj, iter) {
+  if (getArchtype(obj) === 0 /* Object */) {
+    Reflect.ownKeys(obj).forEach((key) => {
+      iter(key, obj[key], obj);
+    });
+  } else {
+    obj.forEach((entry, index) => iter(index, entry, obj));
+  }
+}
+function getArchtype(thing) {
+  const state = thing[DRAFT_STATE];
+  return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;
+}
+function has(thing, prop) {
+  return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);
+}
+function get(thing, prop) {
+  return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];
+}
+function set(thing, propOrOldValue, value) {
+  const t = getArchtype(thing);
+  if (t === 2 /* Map */)
+    thing.set(propOrOldValue, value);
+  else if (t === 3 /* Set */) {
+    thing.add(value);
+  } else
+    thing[propOrOldValue] = value;
+}
+function is(x, y) {
+  if (x === y) {
+    return x !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+}
+function isMap(target) {
+  return target instanceof Map;
+}
+function isSet(target) {
+  return target instanceof Set;
+}
+function latest(state) {
+  return state.copy_ || state.base_;
+}
+function shallowCopy(base, strict) {
+  if (isMap(base)) {
+    return new Map(base);
+  }
+  if (isSet(base)) {
+    return new Set(base);
+  }
+  if (Array.isArray(base))
+    return Array.prototype.slice.call(base);
+  const isPlain = isPlainObject(base);
+  if (strict === true || strict === "class_only" && !isPlain) {
+    const descriptors = Object.getOwnPropertyDescriptors(base);
+    delete descriptors[DRAFT_STATE];
+    let keys = Reflect.ownKeys(descriptors);
+    for (let i = 0; i < keys.length; i++) {
+      const key = keys[i];
+      const desc = descriptors[key];
+      if (desc.writable === false) {
+        desc.writable = true;
+        desc.configurable = true;
+      }
+      if (desc.get || desc.set)
+        descriptors[key] = {
+          configurable: true,
+          writable: true,
+          // could live with !!desc.set as well here...
+          enumerable: desc.enumerable,
+          value: base[key]
+        };
+    }
+    return Object.create(getPrototypeOf(base), descriptors);
+  } else {
+    const proto = getPrototypeOf(base);
+    if (proto !== null && isPlain) {
+      return { ...base };
+    }
+    const obj = Object.create(proto);
+    return Object.assign(obj, base);
+  }
+}
+function freeze(obj, deep = false) {
+  if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))
+    return obj;
+  if (getArchtype(obj) > 1) {
+    obj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections;
+  }
+  Object.freeze(obj);
+  if (deep)
+    Object.entries(obj).forEach(([key, value]) => freeze(value, true));
+  return obj;
+}
+function dontMutateFrozenCollections() {
+  die(2);
+}
+function isFrozen(obj) {
+  return Object.isFrozen(obj);
+}
+
+// src/utils/plugins.ts
+var plugins = {};
+function getPlugin(pluginKey) {
+  const plugin = plugins[pluginKey];
+  if (!plugin) {
+    die(0, pluginKey);
+  }
+  return plugin;
+}
+function loadPlugin(pluginKey, implementation) {
+  if (!plugins[pluginKey])
+    plugins[pluginKey] = implementation;
+}
+
+// src/core/scope.ts
+var currentScope;
+function getCurrentScope() {
+  return currentScope;
+}
+function createScope(parent_, immer_) {
+  return {
+    drafts_: [],
+    parent_,
+    immer_,
+    // Whenever the modified draft contains a draft from another scope, we
+    // need to prevent auto-freezing so the unowned draft can be finalized.
+    canAutoFreeze_: true,
+    unfinalizedDrafts_: 0
+  };
+}
+function usePatchesInScope(scope, patchListener) {
+  if (patchListener) {
+    getPlugin("Patches");
+    scope.patches_ = [];
+    scope.inversePatches_ = [];
+    scope.patchListener_ = patchListener;
+  }
+}
+function revokeScope(scope) {
+  leaveScope(scope);
+  scope.drafts_.forEach(revokeDraft);
+  scope.drafts_ = null;
+}
+function leaveScope(scope) {
+  if (scope === currentScope) {
+    currentScope = scope.parent_;
+  }
+}
+function enterScope(immer2) {
+  return currentScope = createScope(currentScope, immer2);
+}
+function revokeDraft(draft) {
+  const state = draft[DRAFT_STATE];
+  if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)
+    state.revoke_();
+  else
+    state.revoked_ = true;
+}
+
+// src/core/finalize.ts
+function processResult(result, scope) {
+  scope.unfinalizedDrafts_ = scope.drafts_.length;
+  const baseDraft = scope.drafts_[0];
+  const isReplaced = result !== void 0 && result !== baseDraft;
+  if (isReplaced) {
+    if (baseDraft[DRAFT_STATE].modified_) {
+      revokeScope(scope);
+      die(4);
+    }
+    if (isDraftable(result)) {
+      result = finalize(scope, result);
+      if (!scope.parent_)
+        maybeFreeze(scope, result);
+    }
+    if (scope.patches_) {
+      getPlugin("Patches").generateReplacementPatches_(
+        baseDraft[DRAFT_STATE].base_,
+        result,
+        scope.patches_,
+        scope.inversePatches_
+      );
+    }
+  } else {
+    result = finalize(scope, baseDraft, []);
+  }
+  revokeScope(scope);
+  if (scope.patches_) {
+    scope.patchListener_(scope.patches_, scope.inversePatches_);
+  }
+  return result !== NOTHING ? result : void 0;
+}
+function finalize(rootScope, value, path) {
+  if (isFrozen(value))
+    return value;
+  const state = value[DRAFT_STATE];
+  if (!state) {
+    each(
+      value,
+      (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)
+    );
+    return value;
+  }
+  if (state.scope_ !== rootScope)
+    return value;
+  if (!state.modified_) {
+    maybeFreeze(rootScope, state.base_, true);
+    return state.base_;
+  }
+  if (!state.finalized_) {
+    state.finalized_ = true;
+    state.scope_.unfinalizedDrafts_--;
+    const result = state.copy_;
+    let resultEach = result;
+    let isSet2 = false;
+    if (state.type_ === 3 /* Set */) {
+      resultEach = new Set(result);
+      result.clear();
+      isSet2 = true;
+    }
+    each(
+      resultEach,
+      (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)
+    );
+    maybeFreeze(rootScope, result, false);
+    if (path && rootScope.patches_) {
+      getPlugin("Patches").generatePatches_(
+        state,
+        path,
+        rootScope.patches_,
+        rootScope.inversePatches_
+      );
+    }
+  }
+  return state.copy_;
+}
+function finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {
+  if (process.env.NODE_ENV !== "production" && childValue === targetObject)
+    die(5);
+  if (isDraft(childValue)) {
+    const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.
+    !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;
+    const res = finalize(rootScope, childValue, path);
+    set(targetObject, prop, res);
+    if (isDraft(res)) {
+      rootScope.canAutoFreeze_ = false;
+    } else
+      return;
+  } else if (targetIsSet) {
+    targetObject.add(childValue);
+  }
+  if (isDraftable(childValue) && !isFrozen(childValue)) {
+    if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {
+      return;
+    }
+    finalize(rootScope, childValue);
+    if ((!parentState || !parentState.scope_.parent_) && typeof prop !== "symbol" && Object.prototype.propertyIsEnumerable.call(targetObject, prop))
+      maybeFreeze(rootScope, childValue);
+  }
+}
+function maybeFreeze(scope, value, deep = false) {
+  if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {
+    freeze(value, deep);
+  }
+}
+
+// src/core/proxy.ts
+function createProxyProxy(base, parent) {
+  const isArray = Array.isArray(base);
+  const state = {
+    type_: isArray ? 1 /* Array */ : 0 /* Object */,
+    // Track which produce call this is associated with.
+    scope_: parent ? parent.scope_ : getCurrentScope(),
+    // True for both shallow and deep changes.
+    modified_: false,
+    // Used during finalization.
+    finalized_: false,
+    // Track which properties have been assigned (true) or deleted (false).
+    assigned_: {},
+    // The parent draft state.
+    parent_: parent,
+    // The base state.
+    base_: base,
+    // The base proxy.
+    draft_: null,
+    // set below
+    // The base copy with any updated values.
+    copy_: null,
+    // Called by the `produce` function.
+    revoke_: null,
+    isManual_: false
+  };
+  let target = state;
+  let traps = objectTraps;
+  if (isArray) {
+    target = [state];
+    traps = arrayTraps;
+  }
+  const { revoke, proxy } = Proxy.revocable(target, traps);
+  state.draft_ = proxy;
+  state.revoke_ = revoke;
+  return proxy;
+}
+var objectTraps = {
+  get(state, prop) {
+    if (prop === DRAFT_STATE)
+      return state;
+    const source = latest(state);
+    if (!has(source, prop)) {
+      return readPropFromProto(state, source, prop);
+    }
+    const value = source[prop];
+    if (state.finalized_ || !isDraftable(value)) {
+      return value;
+    }
+    if (value === peek(state.base_, prop)) {
+      prepareCopy(state);
+      return state.copy_[prop] = createProxy(value, state);
+    }
+    return value;
+  },
+  has(state, prop) {
+    return prop in latest(state);
+  },
+  ownKeys(state) {
+    return Reflect.ownKeys(latest(state));
+  },
+  set(state, prop, value) {
+    const desc = getDescriptorFromProto(latest(state), prop);
+    if (desc?.set) {
+      desc.set.call(state.draft_, value);
+      return true;
+    }
+    if (!state.modified_) {
+      const current2 = peek(latest(state), prop);
+      const currentState = current2?.[DRAFT_STATE];
+      if (currentState && currentState.base_ === value) {
+        state.copy_[prop] = value;
+        state.assigned_[prop] = false;
+        return true;
+      }
+      if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))
+        return true;
+      prepareCopy(state);
+      markChanged(state);
+    }
+    if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'
+    (value !== void 0 || prop in state.copy_) || // special case: NaN
+    Number.isNaN(value) && Number.isNaN(state.copy_[prop]))
+      return true;
+    state.copy_[prop] = value;
+    state.assigned_[prop] = true;
+    return true;
+  },
+  deleteProperty(state, prop) {
+    if (peek(state.base_, prop) !== void 0 || prop in state.base_) {
+      state.assigned_[prop] = false;
+      prepareCopy(state);
+      markChanged(state);
+    } else {
+      delete state.assigned_[prop];
+    }
+    if (state.copy_) {
+      delete state.copy_[prop];
+    }
+    return true;
+  },
+  // Note: We never coerce `desc.value` into an Immer draft, because we can't make
+  // the same guarantee in ES5 mode.
+  getOwnPropertyDescriptor(state, prop) {
+    const owner = latest(state);
+    const desc = Reflect.getOwnPropertyDescriptor(owner, prop);
+    if (!desc)
+      return desc;
+    return {
+      writable: true,
+      configurable: state.type_ !== 1 /* Array */ || prop !== "length",
+      enumerable: desc.enumerable,
+      value: owner[prop]
+    };
+  },
+  defineProperty() {
+    die(11);
+  },
+  getPrototypeOf(state) {
+    return getPrototypeOf(state.base_);
+  },
+  setPrototypeOf() {
+    die(12);
+  }
+};
+var arrayTraps = {};
+each(objectTraps, (key, fn) => {
+  arrayTraps[key] = function() {
+    arguments[0] = arguments[0][0];
+    return fn.apply(this, arguments);
+  };
+});
+arrayTraps.deleteProperty = function(state, prop) {
+  if (process.env.NODE_ENV !== "production" && isNaN(parseInt(prop)))
+    die(13);
+  return arrayTraps.set.call(this, state, prop, void 0);
+};
+arrayTraps.set = function(state, prop, value) {
+  if (process.env.NODE_ENV !== "production" && prop !== "length" && isNaN(parseInt(prop)))
+    die(14);
+  return objectTraps.set.call(this, state[0], prop, value, state[0]);
+};
+function peek(draft, prop) {
+  const state = draft[DRAFT_STATE];
+  const source = state ? latest(state) : draft;
+  return source[prop];
+}
+function readPropFromProto(state, source, prop) {
+  const desc = getDescriptorFromProto(source, prop);
+  return desc ? `value` in desc ? desc.value : (
+    // This is a very special case, if the prop is a getter defined by the
+    // prototype, we should invoke it with the draft as context!
+    desc.get?.call(state.draft_)
+  ) : void 0;
+}
+function getDescriptorFromProto(source, prop) {
+  if (!(prop in source))
+    return void 0;
+  let proto = getPrototypeOf(source);
+  while (proto) {
+    const desc = Object.getOwnPropertyDescriptor(proto, prop);
+    if (desc)
+      return desc;
+    proto = getPrototypeOf(proto);
+  }
+  return void 0;
+}
+function markChanged(state) {
+  if (!state.modified_) {
+    state.modified_ = true;
+    if (state.parent_) {
+      markChanged(state.parent_);
+    }
+  }
+}
+function prepareCopy(state) {
+  if (!state.copy_) {
+    state.copy_ = shallowCopy(
+      state.base_,
+      state.scope_.immer_.useStrictShallowCopy_
+    );
+  }
+}
+
+// src/core/immerClass.ts
+var Immer2 = class {
+  constructor(config) {
+    this.autoFreeze_ = true;
+    this.useStrictShallowCopy_ = false;
+    /**
+     * The `produce` function takes a value and a "recipe function" (whose
+     * return value often depends on the base state). The recipe function is
+     * free to mutate its first argument however it wants. All mutations are
+     * only ever applied to a __copy__ of the base state.
+     *
+     * Pass only a function to create a "curried producer" which relieves you
+     * from passing the recipe function every time.
+     *
+     * Only plain objects and arrays are made mutable. All other objects are
+     * considered uncopyable.
+     *
+     * Note: This function is __bound__ to its `Immer` instance.
+     *
+     * @param {any} base - the initial state
+     * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified
+     * @param {Function} patchListener - optional function that will be called with all the patches produced here
+     * @returns {any} a new state, or the initial state if nothing was modified
+     */
+    this.produce = (base, recipe, patchListener) => {
+      if (typeof base === "function" && typeof recipe !== "function") {
+        const defaultBase = recipe;
+        recipe = base;
+        const self = this;
+        return function curriedProduce(base2 = defaultBase, ...args) {
+          return self.produce(base2, (draft) => recipe.call(this, draft, ...args));
+        };
+      }
+      if (typeof recipe !== "function")
+        die(6);
+      if (patchListener !== void 0 && typeof patchListener !== "function")
+        die(7);
+      let result;
+      if (isDraftable(base)) {
+        const scope = enterScope(this);
+        const proxy = createProxy(base, void 0);
+        let hasError = true;
+        try {
+          result = recipe(proxy);
+          hasError = false;
+        } finally {
+          if (hasError)
+            revokeScope(scope);
+          else
+            leaveScope(scope);
+        }
+        usePatchesInScope(scope, patchListener);
+        return processResult(result, scope);
+      } else if (!base || typeof base !== "object") {
+        result = recipe(base);
+        if (result === void 0)
+          result = base;
+        if (result === NOTHING)
+          result = void 0;
+        if (this.autoFreeze_)
+          freeze(result, true);
+        if (patchListener) {
+          const p = [];
+          const ip = [];
+          getPlugin("Patches").generateReplacementPatches_(base, result, p, ip);
+          patchListener(p, ip);
+        }
+        return result;
+      } else
+        die(1, base);
+    };
+    this.produceWithPatches = (base, recipe) => {
+      if (typeof base === "function") {
+        return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));
+      }
+      let patches, inversePatches;
+      const result = this.produce(base, recipe, (p, ip) => {
+        patches = p;
+        inversePatches = ip;
+      });
+      return [result, patches, inversePatches];
+    };
+    if (typeof config?.autoFreeze === "boolean")
+      this.setAutoFreeze(config.autoFreeze);
+    if (typeof config?.useStrictShallowCopy === "boolean")
+      this.setUseStrictShallowCopy(config.useStrictShallowCopy);
+  }
+  createDraft(base) {
+    if (!isDraftable(base))
+      die(8);
+    if (isDraft(base))
+      base = current(base);
+    const scope = enterScope(this);
+    const proxy = createProxy(base, void 0);
+    proxy[DRAFT_STATE].isManual_ = true;
+    leaveScope(scope);
+    return proxy;
+  }
+  finishDraft(draft, patchListener) {
+    const state = draft && draft[DRAFT_STATE];
+    if (!state || !state.isManual_)
+      die(9);
+    const { scope_: scope } = state;
+    usePatchesInScope(scope, patchListener);
+    return processResult(void 0, scope);
+  }
+  /**
+   * Pass true to automatically freeze all copies created by Immer.
+   *
+   * By default, auto-freezing is enabled.
+   */
+  setAutoFreeze(value) {
+    this.autoFreeze_ = value;
+  }
+  /**
+   * Pass true to enable strict shallow copy.
+   *
+   * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.
+   */
+  setUseStrictShallowCopy(value) {
+    this.useStrictShallowCopy_ = value;
+  }
+  applyPatches(base, patches) {
+    let i;
+    for (i = patches.length - 1; i >= 0; i--) {
+      const patch = patches[i];
+      if (patch.path.length === 0 && patch.op === "replace") {
+        base = patch.value;
+        break;
+      }
+    }
+    if (i > -1) {
+      patches = patches.slice(i + 1);
+    }
+    const applyPatchesImpl = getPlugin("Patches").applyPatches_;
+    if (isDraft(base)) {
+      return applyPatchesImpl(base, patches);
+    }
+    return this.produce(
+      base,
+      (draft) => applyPatchesImpl(draft, patches)
+    );
+  }
+};
+function createProxy(value, parent) {
+  const draft = isMap(value) ? getPlugin("MapSet").proxyMap_(value, parent) : isSet(value) ? getPlugin("MapSet").proxySet_(value, parent) : createProxyProxy(value, parent);
+  const scope = parent ? parent.scope_ : getCurrentScope();
+  scope.drafts_.push(draft);
+  return draft;
+}
+
+// src/core/current.ts
+function current(value) {
+  if (!isDraft(value))
+    die(10, value);
+  return currentImpl(value);
+}
+function currentImpl(value) {
+  if (!isDraftable(value) || isFrozen(value))
+    return value;
+  const state = value[DRAFT_STATE];
+  let copy;
+  if (state) {
+    if (!state.modified_)
+      return state.base_;
+    state.finalized_ = true;
+    copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);
+  } else {
+    copy = shallowCopy(value, true);
+  }
+  each(copy, (key, childValue) => {
+    set(copy, key, currentImpl(childValue));
+  });
+  if (state) {
+    state.finalized_ = false;
+  }
+  return copy;
+}
+
+// src/plugins/patches.ts
+function enablePatches() {
+  const errorOffset = 16;
+  if (process.env.NODE_ENV !== "production") {
+    errors.push(
+      'Sets cannot have "replace" patches.',
+      function(op) {
+        return "Unsupported patch operation: " + op;
+      },
+      function(path) {
+        return "Cannot apply patch, path doesn't resolve: " + path;
+      },
+      "Patching reserved attributes like __proto__, prototype and constructor is not allowed"
+    );
+  }
+  const REPLACE = "replace";
+  const ADD = "add";
+  const REMOVE = "remove";
+  function generatePatches_(state, basePath, patches, inversePatches) {
+    switch (state.type_) {
+      case 0 /* Object */:
+      case 2 /* Map */:
+        return generatePatchesFromAssigned(
+          state,
+          basePath,
+          patches,
+          inversePatches
+        );
+      case 1 /* Array */:
+        return generateArrayPatches(state, basePath, patches, inversePatches);
+      case 3 /* Set */:
+        return generateSetPatches(
+          state,
+          basePath,
+          patches,
+          inversePatches
+        );
+    }
+  }
+  function generateArrayPatches(state, basePath, patches, inversePatches) {
+    let { base_, assigned_ } = state;
+    let copy_ = state.copy_;
+    if (copy_.length < base_.length) {
+      ;
+      [base_, copy_] = [copy_, base_];
+      [patches, inversePatches] = [inversePatches, patches];
+    }
+    for (let i = 0; i < base_.length; i++) {
+      if (assigned_[i] && copy_[i] !== base_[i]) {
+        const path = basePath.concat([i]);
+        patches.push({
+          op: REPLACE,
+          path,
+          // Need to maybe clone it, as it can in fact be the original value
+          // due to the base/copy inversion at the start of this function
+          value: clonePatchValueIfNeeded(copy_[i])
+        });
+        inversePatches.push({
+          op: REPLACE,
+          path,
+          value: clonePatchValueIfNeeded(base_[i])
+        });
+      }
+    }
+    for (let i = base_.length; i < copy_.length; i++) {
+      const path = basePath.concat([i]);
+      patches.push({
+        op: ADD,
+        path,
+        // Need to maybe clone it, as it can in fact be the original value
+        // due to the base/copy inversion at the start of this function
+        value: clonePatchValueIfNeeded(copy_[i])
+      });
+    }
+    for (let i = copy_.length - 1; base_.length <= i; --i) {
+      const path = basePath.concat([i]);
+      inversePatches.push({
+        op: REMOVE,
+        path
+      });
+    }
+  }
+  function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {
+    const { base_, copy_ } = state;
+    each(state.assigned_, (key, assignedValue) => {
+      const origValue = get(base_, key);
+      const value = get(copy_, key);
+      const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;
+      if (origValue === value && op === REPLACE)
+        return;
+      const path = basePath.concat(key);
+      patches.push(op === REMOVE ? { op, path } : { op, path, value });
+      inversePatches.push(
+        op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }
+      );
+    });
+  }
+  function generateSetPatches(state, basePath, patches, inversePatches) {
+    let { base_, copy_ } = state;
+    let i = 0;
+    base_.forEach((value) => {
+      if (!copy_.has(value)) {
+        const path = basePath.concat([i]);
+        patches.push({
+          op: REMOVE,
+          path,
+          value
+        });
+        inversePatches.unshift({
+          op: ADD,
+          path,
+          value
+        });
+      }
+      i++;
+    });
+    i = 0;
+    copy_.forEach((value) => {
+      if (!base_.has(value)) {
+        const path = basePath.concat([i]);
+        patches.push({
+          op: ADD,
+          path,
+          value
+        });
+        inversePatches.unshift({
+          op: REMOVE,
+          path,
+          value
+        });
+      }
+      i++;
+    });
+  }
+  function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {
+    patches.push({
+      op: REPLACE,
+      path: [],
+      value: replacement === NOTHING ? void 0 : replacement
+    });
+    inversePatches.push({
+      op: REPLACE,
+      path: [],
+      value: baseValue
+    });
+  }
+  function applyPatches_(draft, patches) {
+    patches.forEach((patch) => {
+      const { path, op } = patch;
+      let base = draft;
+      for (let i = 0; i < path.length - 1; i++) {
+        const parentType = getArchtype(base);
+        let p = path[i];
+        if (typeof p !== "string" && typeof p !== "number") {
+          p = "" + p;
+        }
+        if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === "__proto__" || p === "constructor"))
+          die(errorOffset + 3);
+        if (typeof base === "function" && p === "prototype")
+          die(errorOffset + 3);
+        base = get(base, p);
+        if (typeof base !== "object")
+          die(errorOffset + 2, path.join("/"));
+      }
+      const type = getArchtype(base);
+      const value = deepClonePatchValue(patch.value);
+      const key = path[path.length - 1];
+      switch (op) {
+        case REPLACE:
+          switch (type) {
+            case 2 /* Map */:
+              return base.set(key, value);
+            case 3 /* Set */:
+              die(errorOffset);
+            default:
+              return base[key] = value;
+          }
+        case ADD:
+          switch (type) {
+            case 1 /* Array */:
+              return key === "-" ? base.push(value) : base.splice(key, 0, value);
+            case 2 /* Map */:
+              return base.set(key, value);
+            case 3 /* Set */:
+              return base.add(value);
+            default:
+              return base[key] = value;
+          }
+        case REMOVE:
+          switch (type) {
+            case 1 /* Array */:
+              return base.splice(key, 1);
+            case 2 /* Map */:
+              return base.delete(key);
+            case 3 /* Set */:
+              return base.delete(patch.value);
+            default:
+              return delete base[key];
+          }
+        default:
+          die(errorOffset + 1, op);
+      }
+    });
+    return draft;
+  }
+  function deepClonePatchValue(obj) {
+    if (!isDraftable(obj))
+      return obj;
+    if (Array.isArray(obj))
+      return obj.map(deepClonePatchValue);
+    if (isMap(obj))
+      return new Map(
+        Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])
+      );
+    if (isSet(obj))
+      return new Set(Array.from(obj).map(deepClonePatchValue));
+    const cloned = Object.create(getPrototypeOf(obj));
+    for (const key in obj)
+      cloned[key] = deepClonePatchValue(obj[key]);
+    if (has(obj, DRAFTABLE))
+      cloned[DRAFTABLE] = obj[DRAFTABLE];
+    return cloned;
+  }
+  function clonePatchValueIfNeeded(obj) {
+    if (isDraft(obj)) {
+      return deepClonePatchValue(obj);
+    } else
+      return obj;
+  }
+  loadPlugin("Patches", {
+    applyPatches_,
+    generatePatches_,
+    generateReplacementPatches_
+  });
+}
+
+// src/plugins/mapset.ts
+function enableMapSet() {
+  class DraftMap extends Map {
+    constructor(target, parent) {
+      super();
+      this[DRAFT_STATE] = {
+        type_: 2 /* Map */,
+        parent_: parent,
+        scope_: parent ? parent.scope_ : getCurrentScope(),
+        modified_: false,
+        finalized_: false,
+        copy_: void 0,
+        assigned_: void 0,
+        base_: target,
+        draft_: this,
+        isManual_: false,
+        revoked_: false
+      };
+    }
+    get size() {
+      return latest(this[DRAFT_STATE]).size;
+    }
+    has(key) {
+      return latest(this[DRAFT_STATE]).has(key);
+    }
+    set(key, value) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (!latest(state).has(key) || latest(state).get(key) !== value) {
+        prepareMapCopy(state);
+        markChanged(state);
+        state.assigned_.set(key, true);
+        state.copy_.set(key, value);
+        state.assigned_.set(key, true);
+      }
+      return this;
+    }
+    delete(key) {
+      if (!this.has(key)) {
+        return false;
+      }
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareMapCopy(state);
+      markChanged(state);
+      if (state.base_.has(key)) {
+        state.assigned_.set(key, false);
+      } else {
+        state.assigned_.delete(key);
+      }
+      state.copy_.delete(key);
+      return true;
+    }
+    clear() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (latest(state).size) {
+        prepareMapCopy(state);
+        markChanged(state);
+        state.assigned_ = /* @__PURE__ */ new Map();
+        each(state.base_, (key) => {
+          state.assigned_.set(key, false);
+        });
+        state.copy_.clear();
+      }
+    }
+    forEach(cb, thisArg) {
+      const state = this[DRAFT_STATE];
+      latest(state).forEach((_value, key, _map) => {
+        cb.call(thisArg, this.get(key), key, this);
+      });
+    }
+    get(key) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      const value = latest(state).get(key);
+      if (state.finalized_ || !isDraftable(value)) {
+        return value;
+      }
+      if (value !== state.base_.get(key)) {
+        return value;
+      }
+      const draft = createProxy(value, state);
+      prepareMapCopy(state);
+      state.copy_.set(key, draft);
+      return draft;
+    }
+    keys() {
+      return latest(this[DRAFT_STATE]).keys();
+    }
+    values() {
+      const iterator = this.keys();
+      return {
+        [Symbol.iterator]: () => this.values(),
+        next: () => {
+          const r = iterator.next();
+          if (r.done)
+            return r;
+          const value = this.get(r.value);
+          return {
+            done: false,
+            value
+          };
+        }
+      };
+    }
+    entries() {
+      const iterator = this.keys();
+      return {
+        [Symbol.iterator]: () => this.entries(),
+        next: () => {
+          const r = iterator.next();
+          if (r.done)
+            return r;
+          const value = this.get(r.value);
+          return {
+            done: false,
+            value: [r.value, value]
+          };
+        }
+      };
+    }
+    [(DRAFT_STATE, Symbol.iterator)]() {
+      return this.entries();
+    }
+  }
+  function proxyMap_(target, parent) {
+    return new DraftMap(target, parent);
+  }
+  function prepareMapCopy(state) {
+    if (!state.copy_) {
+      state.assigned_ = /* @__PURE__ */ new Map();
+      state.copy_ = new Map(state.base_);
+    }
+  }
+  class DraftSet extends Set {
+    constructor(target, parent) {
+      super();
+      this[DRAFT_STATE] = {
+        type_: 3 /* Set */,
+        parent_: parent,
+        scope_: parent ? parent.scope_ : getCurrentScope(),
+        modified_: false,
+        finalized_: false,
+        copy_: void 0,
+        base_: target,
+        draft_: this,
+        drafts_: /* @__PURE__ */ new Map(),
+        revoked_: false,
+        isManual_: false
+      };
+    }
+    get size() {
+      return latest(this[DRAFT_STATE]).size;
+    }
+    has(value) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (!state.copy_) {
+        return state.base_.has(value);
+      }
+      if (state.copy_.has(value))
+        return true;
+      if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))
+        return true;
+      return false;
+    }
+    add(value) {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (!this.has(value)) {
+        prepareSetCopy(state);
+        markChanged(state);
+        state.copy_.add(value);
+      }
+      return this;
+    }
+    delete(value) {
+      if (!this.has(value)) {
+        return false;
+      }
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareSetCopy(state);
+      markChanged(state);
+      return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (
+        /* istanbul ignore next */
+        false
+      ));
+    }
+    clear() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      if (latest(state).size) {
+        prepareSetCopy(state);
+        markChanged(state);
+        state.copy_.clear();
+      }
+    }
+    values() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareSetCopy(state);
+      return state.copy_.values();
+    }
+    entries() {
+      const state = this[DRAFT_STATE];
+      assertUnrevoked(state);
+      prepareSetCopy(state);
+      return state.copy_.entries();
+    }
+    keys() {
+      return this.values();
+    }
+    [(DRAFT_STATE, Symbol.iterator)]() {
+      return this.values();
+    }
+    forEach(cb, thisArg) {
+      const iterator = this.values();
+      let result = iterator.next();
+      while (!result.done) {
+        cb.call(thisArg, result.value, result.value, this);
+        result = iterator.next();
+      }
+    }
+  }
+  function proxySet_(target, parent) {
+    return new DraftSet(target, parent);
+  }
+  function prepareSetCopy(state) {
+    if (!state.copy_) {
+      state.copy_ = /* @__PURE__ */ new Set();
+      state.base_.forEach((value) => {
+        if (isDraftable(value)) {
+          const draft = createProxy(value, state);
+          state.drafts_.set(value, draft);
+          state.copy_.add(draft);
+        } else {
+          state.copy_.add(value);
+        }
+      });
+    }
+  }
+  function assertUnrevoked(state) {
+    if (state.revoked_)
+      die(3, JSON.stringify(latest(state)));
+  }
+  loadPlugin("MapSet", { proxyMap_, proxySet_ });
+}
+
+// src/immer.ts
+var immer = new Immer2();
+var produce = immer.produce;
+var produceWithPatches = immer.produceWithPatches.bind(
+  immer
+);
+var setAutoFreeze = immer.setAutoFreeze.bind(immer);
+var setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer);
+var applyPatches = immer.applyPatches.bind(immer);
+var createDraft = immer.createDraft.bind(immer);
+var finishDraft = immer.finishDraft.bind(immer);
+function castDraft(value) {
+  return value;
+}
+function castImmutable(value) {
+  return value;
+}
+export {
+  Immer2 as Immer,
+  applyPatches,
+  castDraft,
+  castImmutable,
+  createDraft,
+  current,
+  enableMapSet,
+  enablePatches,
+  finishDraft,
+  freeze,
+  DRAFTABLE as immerable,
+  isDraft,
+  isDraftable,
+  NOTHING as nothing,
+  original,
+  produce,
+  produceWithPatches,
+  setAutoFreeze,
+  setUseStrictShallowCopy
+};
+//# sourceMappingURL=immer.mjs.map
Index: node_modules/immer/dist/immer.mjs.map
===================================================================
--- node_modules/immer/dist/immer.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/immer.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/utils/env.ts","../src/utils/errors.ts","../src/utils/common.ts","../src/utils/plugins.ts","../src/core/scope.ts","../src/core/finalize.ts","../src/core/proxy.ts","../src/core/immerClass.ts","../src/core/current.ts","../src/plugins/patches.ts","../src/plugins/mapset.ts","../src/immer.ts"],"sourcesContent":["// Should be no imports here!\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: unique symbol = Symbol.for(\"immer-nothing\")\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = Symbol.for(\"immer-draftable\")\n\nexport const DRAFT_STATE: unique symbol = Symbol.for(\"immer-state\")\n","export const errors =\n\tprocess.env.NODE_ENV !== \"production\"\n\t\t? [\n\t\t\t\t// All error codes, starting by 0:\n\t\t\t\tfunction(plugin: string) {\n\t\t\t\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t\t\t\t},\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t\t\t\t},\n\t\t\t\t\"This object has been frozen and should not be mutated\",\n\t\t\t\tfunction(data: any) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\t\t\t\tdata\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t\t\t\t\"Immer forbids circular references\",\n\t\t\t\t\"The first or second argument to `produce` must be a function\",\n\t\t\t\t\"The third argument to `produce` must be a function or undefined\",\n\t\t\t\t\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t\t\t\t\"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'current' expects a draft, got: ${thing}`\n\t\t\t\t},\n\t\t\t\t\"Object.defineProperty() cannot be used on an Immer draft\",\n\t\t\t\t\"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t\t\t\t\"Immer only supports deleting array indices\",\n\t\t\t\t\"Immer only supports setting array indices and the 'length' property\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'original' expects a draft, got: ${thing}`\n\t\t\t\t}\n\t\t\t\t// Note: if more errors are added, the errorOffset in Patches.ts should be increased\n\t\t\t\t// See Patches.ts for additional errors\n\t\t  ]\n\t\t: []\n\nexport function die(error: number, ...args: any[]): never {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst e = errors[error]\n\t\tconst msg = typeof e === \"function\" ? e.apply(null, args as any) : e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\tArchType,\n\tdie,\n\tStrictMode\n} from \"../internal\"\n\nexport const getPrototypeOf = Object.getPrototypeOf\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(15, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/**\n * Each iterates a map, set or array.\n * Or, if any other kind of object, all of its own properties.\n * Regardless whether they are enumerable or symbols\n */\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void\n): void\nexport function each(obj: any, iter: any) {\n\tif (getArchtype(obj) === ArchType.Object) {\n\t\tReflect.ownKeys(obj).forEach(key => {\n\t\t\titer(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): ArchType {\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_\n\t\t: Array.isArray(thing)\n\t\t? ArchType.Array\n\t\t: isMap(thing)\n\t\t? ArchType.Map\n\t\t: isSet(thing)\n\t\t? ArchType.Set\n\t\t: ArchType.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === ArchType.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === ArchType.Map) thing.set(propOrOldValue, value)\n\telse if (t === ArchType.Set) {\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any, strict: StrictMode) {\n\tif (isMap(base)) {\n\t\treturn new Map(base)\n\t}\n\tif (isSet(base)) {\n\t\treturn new Set(base)\n\t}\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\n\tconst isPlain = isPlainObject(base)\n\n\tif (strict === true || (strict === \"class_only\" && !isPlain)) {\n\t\t// Perform a strict copy\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(base)\n\t\tdelete descriptors[DRAFT_STATE as any]\n\t\tlet keys = Reflect.ownKeys(descriptors)\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key: any = keys[i]\n\t\t\tconst desc = descriptors[key]\n\t\t\tif (desc.writable === false) {\n\t\t\t\tdesc.writable = true\n\t\t\t\tdesc.configurable = true\n\t\t\t}\n\t\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t\t// with libraries that trap values, like mobx or vue\n\t\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\t\tif (desc.get || desc.set)\n\t\t\t\tdescriptors[key] = {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\t\tvalue: base[key]\n\t\t\t\t}\n\t\t}\n\t\treturn Object.create(getPrototypeOf(base), descriptors)\n\t} else {\n\t\t// perform a sloppy copy\n\t\tconst proto = getPrototypeOf(base)\n\t\tif (proto !== null && isPlain) {\n\t\t\treturn {...base} // assumption: better inner class optimization than the assign below\n\t\t}\n\t\tconst obj = Object.create(proto)\n\t\treturn Object.assign(obj, base)\n\t}\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep)\n\t\t// See #590, don't recurse into non-enumerable / Symbol properties when freezing\n\t\t// So use Object.entries (only string-like, enumerables) instead of each()\n\t\tObject.entries(obj).forEach(([key, value]) => freeze(value, true))\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tDrafted,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tArchType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: readonly Patch[]): T\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(0, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ArchType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ArchType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tArchType,\n\tgetPlugin\n} from \"../internal\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (state.type_ === ArchType.Object || state.type_ === ArchType.Array)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tArchType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(value, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path)\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result = state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// To preserve insertion order in all cases we then clear the set\n\t\t// And we let finalizeProperty know it needs to re-add non-draft children back to the target\n\t\tlet resultEach = result\n\t\tlet isSet = false\n\t\tif (state.type_ === ArchType.Set) {\n\t\t\tresultEach = new Set(result)\n\t\t\tresult.clear()\n\t\t\tisSet = true\n\t\t}\n\t\teach(resultEach, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path, isSet)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath,\n\ttargetIsSet?: boolean\n) {\n\tif (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n\t\tdie(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t} else if (targetIsSet) {\n\t\ttargetObject.add(childValue)\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// Immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\t// Per #590, we never freeze symbolic properties. Just to make sure don't accidentally interfere\n\t\t// with other frameworks.\n\t\tif (\n\t\t\t(!parentState || !parentState.scope_.parent_) &&\n\t\t\ttypeof prop !== \"symbol\" &&\n\t\t\tObject.prototype.propertyIsEnumerable.call(targetObject, prop)\n\t\t)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\t// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects\n\tif (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tgetPrototypeOf,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tArchType,\n\tImmerScope\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ArchType.Object\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ArchType.Array\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ArchType.Array : (ArchType.Object as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(value, state))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\t(state.copy_![prop] === value &&\n\t\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t\t(value !== undefined || prop in state.copy_)) ||\n\t\t\t// special case: NaN\n\t\t\t(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\tif (state.copy_) {\n\t\t\tdelete state.copy_[prop]\n\t\t}\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ArchType.Array || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop as any)))\n\t\tdie(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (\n\t\tprocess.env.NODE_ENV !== \"production\" &&\n\t\tprop !== \"length\" &&\n\t\tisNaN(parseInt(prop as any))\n\t)\n\t\tdie(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t  // prototype, we should invoke it with the draft as context!\n\t\t\t  desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {\n\tbase_: any\n\tcopy_: any\n\tscope_: ImmerScope\n}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(\n\t\t\tstate.base_,\n\t\t\tstate.scope_.immer_.useStrictShallowCopy_\n\t\t)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport type StrictMode = boolean | \"class_only\";\n\nexport class Immer implements ProducersFns {\n\tautoFreeze_: boolean = true\n\tuseStrictShallowCopy_: StrictMode = false\n\n\tconstructor(config?: {\n\t\tautoFreeze?: boolean\n\t\tuseStrictShallowCopy?: StrictMode\n\t}) {\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t\tif (typeof config?.useStrictShallowCopy === \"boolean\")\n\t\t\tthis.setUseStrictShallowCopy(config!.useStrictShallowCopy)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(1, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (!state || !state.isManual_) die(9)\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to enable strict shallow copy.\n\t *\n\t * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n\t */\n\tsetUseStrictShallowCopy(value: StrictMode) {\n\t\tthis.useStrictShallowCopy_ = value\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: createProxyProxy(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tisFrozen\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(10, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value) || isFrozen(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tif (state) {\n\t\tif (!state.modified_) return state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)\n\t} else {\n\t\tcopy = shallowCopy(value, true)\n\t}\n\t// recurse\n\teach(copy, (key, childValue) => {\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\tif (state) {\n\t\tstate.finalized_ = false\n\t}\n\treturn copy\n}\n","import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tProxyArrayState,\n\tMapState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tgetPrototypeOf,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tArchType,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING,\n\terrors\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst errorOffset = 16\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\terrors.push(\n\t\t\t'Sets cannot have \"replace\" patches.',\n\t\t\tfunction(op: string) {\n\t\t\t\treturn \"Unsupported patch operation: \" + op\n\t\t\t},\n\t\t\tfunction(path: string) {\n\t\t\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t\t\t},\n\t\t\t\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n\t\t)\n\t}\n\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ArchType.Object:\n\t\t\tcase ArchType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ArchType.Array:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ArchType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tfor (let i = copy_.length - 1; base_.length <= i; --i) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tinversePatches.push({\n\t\t\t\top: REMOVE,\n\t\t\t\tpath\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\tbaseValue: any,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: baseValue\n\t\t})\n\t}\n\n\tfunction applyPatches_<T>(draft: T, patches: readonly Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tlet p = path[i]\n\t\t\t\tif (typeof p !== \"string\" && typeof p !== \"number\") {\n\t\t\t\t\tp = \"\" + p\n\t\t\t\t}\n\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === ArchType.Object || parentType === ArchType.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\")\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(errorOffset + 2, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\tdie(errorOffset)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn key === \"-\"\n\t\t\t\t\t\t\t\t? base.push(value)\n\t\t\t\t\t\t\t\t: base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(errorOffset + 1, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue<T>(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded<T>(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n","// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tdie,\n\tArchType,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\tclass DraftMap extends Map {\n\t\t[DRAFT_STATE]: MapState\n\n\t\tconstructor(target: AnyMap, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tset(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tif (state.base_.has(key)) {\n\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t} else {\n\t\t\t\tstate.assigned_!.delete(key)\n\t\t\t}\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tforEach(cb: (value: any, key: any, self: any) => void, thisArg?: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tget(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.entries()\n\t\t}\n\t}\n\n\tfunction proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tclass DraftSet extends Set {\n\t\t[DRAFT_STATE]: SetState\n\t\tconstructor(target: AnySet, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tadd(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn this.values()\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tforEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\t}\n\tfunction proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n","import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tWritableDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\tProducer,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze,\n\tObjectish,\n\tStrictMode\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\nexport const setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\n"],"mappings":"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","names":["immer","isSet","current","Immer","base","Immer"]}
Index: node_modules/immer/dist/immer.production.mjs
===================================================================
--- node_modules/immer/dist/immer.production.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/immer.production.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+var R=Symbol.for("immer-nothing"),z=Symbol.for("immer-draftable"),u=Symbol.for("immer-state");function h(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var N=Object.getPrototypeOf;function O(e){return!!e&&!!e[u]}function I(e){return e?ue(e)||Array.isArray(e)||!!e[z]||!!e.constructor?.[z]||v(e)||k(e):!1}var me=Object.prototype.constructor.toString();function ue(e){if(!e||typeof e!="object")return!1;let t=N(e);if(t===null)return!0;let r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object?!0:typeof r=="function"&&Function.toString.call(r)===me}function Se(e){return O(e)||h(15,e),e[u].t}function _(e,t){j(e)===0?Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)}):e.forEach((r,n)=>t(n,r,e))}function j(e){let t=e[u];return t?t.o:Array.isArray(e)?1:v(e)?2:k(e)?3:0}function C(e,t){return j(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function J(e,t){return j(e)===2?e.get(t):e[t]}function X(e,t,r){let n=j(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function ye(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function v(e){return e instanceof Map}function k(e){return e instanceof Set}function T(e){return e.e||e.t}function L(e,t){if(v(e))return new Map(e);if(k(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);let r=ue(e);if(t===!0||t==="class_only"&&!r){let n=Object.getOwnPropertyDescriptors(e);delete n[u];let i=Reflect.ownKeys(n);for(let f=0;f<i.length;f++){let l=i[f],c=n[l];c.writable===!1&&(c.writable=!0,c.configurable=!0),(c.get||c.set)&&(n[l]={configurable:!0,writable:!0,enumerable:c.enumerable,value:e[l]})}return Object.create(N(e),n)}else{let n=N(e);if(n!==null&&r)return{...e};let i=Object.create(n);return Object.assign(i,e)}}function H(e,t=!1){return $(e)||O(e)||!I(e)||(j(e)>1&&(e.set=e.add=e.clear=e.delete=Pe),Object.freeze(e),t&&Object.entries(e).forEach(([r,n])=>H(n,!0))),e}function Pe(){h(2)}function $(e){return Object.isFrozen(e)}var re={};function w(e){let t=re[e];return t||h(0,e),t}function Q(e,t){re[e]||(re[e]=t)}var U;function K(){return U}function xe(e,t){return{a:[],i:e,p:t,P:!0,d:0}}function ne(e,t){t&&(w("Patches"),e.f=[],e.h=[],e.b=t)}function V(e){Y(e),e.a.forEach(ge),e.a=null}function Y(e){e===U&&(U=e.i)}function ae(e){return U=xe(U,e)}function ge(e){let t=e[u];t.o===0||t.o===1?t.x():t.m=!0}function oe(e,t){t.d=t.a.length;let r=t.a[0];return e!==void 0&&e!==r?(r[u].s&&(V(t),h(4)),I(e)&&(e=Z(t,e),t.i||ee(t,e)),t.f&&w("Patches").T(r[u].t,e,t.f,t.h)):e=Z(t,r,[]),V(t),t.f&&t.b(t.f,t.h),e!==R?e:void 0}function Z(e,t,r){if($(t))return t;let n=t[u];if(!n)return _(t,(i,f)=>le(e,n,t,i,f,r)),t;if(n.n!==e)return t;if(!n.s)return ee(e,n.t,!0),n.t;if(!n.c){n.c=!0,n.n.d--;let i=n.e,f=i,l=!1;n.o===3&&(f=new Set(i),i.clear(),l=!0),_(f,(c,b)=>le(e,n,i,c,b,r,l)),ee(e,i,!1),r&&e.f&&w("Patches").g(n,r,e.f,e.h)}return n.e}function le(e,t,r,n,i,f,l){if(O(i)){let c=f&&t&&t.o!==3&&!C(t.r,n)?f.concat(n):void 0,b=Z(e,i,c);if(X(r,n,b),O(b))e.P=!1;else return}else l&&r.add(i);if(I(i)&&!$(i)){if(!e.p.y&&e.d<1)return;Z(e,i),(!t||!t.n.i)&&typeof n!="symbol"&&Object.prototype.propertyIsEnumerable.call(r,n)&&ee(e,i)}}function ee(e,t,r=!1){!e.i&&e.p.y&&e.P&&H(t,r)}function pe(e,t){let r=Array.isArray(e),n={o:r?1:0,n:t?t.n:K(),s:!1,c:!1,r:{},i:t,t:e,u:null,e:null,x:null,l:!1},i=n,f=ce;r&&(i=[n],f=q);let{revoke:l,proxy:c}=Proxy.revocable(i,f);return n.u=c,n.x=l,c}var ce={get(e,t){if(t===u)return e;let r=T(e);if(!C(r,t))return be(e,r,t);let n=r[t];return e.c||!I(n)?n:n===ie(e.t,t)?(se(e),e.e[t]=B(n,e)):n},has(e,t){return t in T(e)},ownKeys(e){return Reflect.ownKeys(T(e))},set(e,t,r){let n=de(T(e),t);if(n?.set)return n.set.call(e.u,r),!0;if(!e.s){let i=ie(T(e),t),f=i?.[u];if(f&&f.t===r)return e.e[t]=r,e.r[t]=!1,!0;if(ye(r,i)&&(r!==void 0||C(e.t,t)))return!0;se(e),E(e)}return e.e[t]===r&&(r!==void 0||t in e.e)||Number.isNaN(r)&&Number.isNaN(e.e[t])||(e.e[t]=r,e.r[t]=!0),!0},deleteProperty(e,t){return ie(e.t,t)!==void 0||t in e.t?(e.r[t]=!1,se(e),E(e)):delete e.r[t],e.e&&delete e.e[t],!0},getOwnPropertyDescriptor(e,t){let r=T(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.o!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){h(11)},getPrototypeOf(e){return N(e.t)},setPrototypeOf(){h(12)}},q={};_(ce,(e,t)=>{q[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});q.deleteProperty=function(e,t){return q.set.call(this,e,t,void 0)};q.set=function(e,t,r){return ce.set.call(this,e[0],t,r,e[0])};function ie(e,t){let r=e[u];return(r?T(r):e)[t]}function be(e,t,r){let n=de(t,r);return n?"value"in n?n.value:n.get?.call(e.u):void 0}function de(e,t){if(!(t in e))return;let r=N(e);for(;r;){let n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=N(r)}}function E(e){e.s||(e.s=!0,e.i&&E(e.i))}function se(e){e.e||(e.e=L(e.t,e.n.p.S))}var te=class{constructor(t){this.y=!0;this.S=!1;this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){let f=r;r=t;let l=this;return function(b=f,...a){return l.produce(b,o=>r.call(this,o,...a))}}typeof r!="function"&&h(6),n!==void 0&&typeof n!="function"&&h(7);let i;if(I(t)){let f=ae(this),l=B(t,void 0),c=!0;try{i=r(l),c=!1}finally{c?V(f):Y(f)}return ne(f,n),oe(i,f)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===R&&(i=void 0),this.y&&H(i,!0),n){let f=[],l=[];w("Patches").T(t,i,f,l),n(f,l)}return i}else h(1,t)};this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(l,...c)=>this.produceWithPatches(l,b=>t(b,...c));let n,i;return[this.produce(t,r,(l,c)=>{n=l,i=c}),n,i]};typeof t?.autoFreeze=="boolean"&&this.setAutoFreeze(t.autoFreeze),typeof t?.useStrictShallowCopy=="boolean"&&this.setUseStrictShallowCopy(t.useStrictShallowCopy)}createDraft(t){I(t)||h(8),O(t)&&(t=fe(t));let r=ae(this),n=B(t,void 0);return n[u].l=!0,Y(r),n}finishDraft(t,r){let n=t&&t[u];(!n||!n.l)&&h(9);let{n:i}=n;return ne(i,r),oe(void 0,i)}setAutoFreeze(t){this.y=t}setUseStrictShallowCopy(t){this.S=t}applyPatches(t,r){let n;for(n=r.length-1;n>=0;n--){let f=r[n];if(f.path.length===0&&f.op==="replace"){t=f.value;break}}n>-1&&(r=r.slice(n+1));let i=w("Patches").A;return O(t)?i(t,r):this.produce(t,f=>i(f,r))}};function B(e,t){let r=v(e)?w("MapSet").I(e,t):k(e)?w("MapSet").D(e,t):pe(e,t);return(t?t.n:K()).a.push(r),r}function fe(e){return O(e)||h(10,e),he(e)}function he(e){if(!I(e)||$(e))return e;let t=e[u],r;if(t){if(!t.s)return t.t;t.c=!0,r=L(e,t.n.p.S)}else r=L(e,!0);return _(r,(n,i)=>{X(r,n,he(i))}),t&&(t.c=!1),r}function Te(){let t="replace",r="add",n="remove";function i(s,S,m,x){switch(s.o){case 0:case 2:return l(s,S,m,x);case 1:return f(s,S,m,x);case 3:return c(s,S,m,x)}}function f(s,S,m,x){let{t:A,r:P}=s,g=s.e;g.length<A.length&&([A,g]=[g,A],[m,x]=[x,m]);for(let y=0;y<A.length;y++)if(P[y]&&g[y]!==A[y]){let d=S.concat([y]);m.push({op:t,path:d,value:p(g[y])}),x.push({op:t,path:d,value:p(A[y])})}for(let y=A.length;y<g.length;y++){let d=S.concat([y]);m.push({op:r,path:d,value:p(g[y])})}for(let y=g.length-1;A.length<=y;--y){let d=S.concat([y]);x.push({op:n,path:d})}}function l(s,S,m,x){let{t:A,e:P}=s;_(s.r,(g,y)=>{let d=J(A,g),W=J(P,g),F=y?C(A,g)?t:r:n;if(d===W&&F===t)return;let D=S.concat(g);m.push(F===n?{op:F,path:D}:{op:F,path:D,value:W}),x.push(F===r?{op:n,path:D}:F===n?{op:r,path:D,value:p(d)}:{op:t,path:D,value:p(d)})})}function c(s,S,m,x){let{t:A,e:P}=s,g=0;A.forEach(y=>{if(!P.has(y)){let d=S.concat([g]);m.push({op:n,path:d,value:y}),x.unshift({op:r,path:d,value:y})}g++}),g=0,P.forEach(y=>{if(!A.has(y)){let d=S.concat([g]);m.push({op:r,path:d,value:y}),x.unshift({op:n,path:d,value:y})}g++})}function b(s,S,m,x){m.push({op:t,path:[],value:S===R?void 0:S}),x.push({op:t,path:[],value:s})}function a(s,S){return S.forEach(m=>{let{path:x,op:A}=m,P=s;for(let W=0;W<x.length-1;W++){let F=j(P),D=x[W];typeof D!="string"&&typeof D!="number"&&(D=""+D),(F===0||F===1)&&(D==="__proto__"||D==="constructor")&&h(16+3),typeof P=="function"&&D==="prototype"&&h(16+3),P=J(P,D),typeof P!="object"&&h(16+2,x.join("/"))}let g=j(P),y=o(m.value),d=x[x.length-1];switch(A){case t:switch(g){case 2:return P.set(d,y);case 3:h(16);default:return P[d]=y}case r:switch(g){case 1:return d==="-"?P.push(y):P.splice(d,0,y);case 2:return P.set(d,y);case 3:return P.add(y);default:return P[d]=y}case n:switch(g){case 1:return P.splice(d,1);case 2:return P.delete(d);case 3:return P.delete(m.value);default:return delete P[d]}default:h(16+1,A)}}),s}function o(s){if(!I(s))return s;if(Array.isArray(s))return s.map(o);if(v(s))return new Map(Array.from(s.entries()).map(([m,x])=>[m,o(x)]));if(k(s))return new Set(Array.from(s).map(o));let S=Object.create(N(s));for(let m in s)S[m]=o(s[m]);return C(s,z)&&(S[z]=s[z]),S}function p(s){return O(s)?o(s):s}Q("Patches",{A:a,g:i,T:b})}function Ae(){class e extends Map{constructor(a,o){super();this[u]={o:2,i:o,n:o?o.n:K(),s:!1,c:!1,e:void 0,r:void 0,t:a,u:this,l:!1,m:!1}}get size(){return T(this[u]).size}has(a){return T(this[u]).has(a)}set(a,o){let p=this[u];return l(p),(!T(p).has(a)||T(p).get(a)!==o)&&(r(p),E(p),p.r.set(a,!0),p.e.set(a,o),p.r.set(a,!0)),this}delete(a){if(!this.has(a))return!1;let o=this[u];return l(o),r(o),E(o),o.t.has(a)?o.r.set(a,!1):o.r.delete(a),o.e.delete(a),!0}clear(){let a=this[u];l(a),T(a).size&&(r(a),E(a),a.r=new Map,_(a.t,o=>{a.r.set(o,!1)}),a.e.clear())}forEach(a,o){let p=this[u];T(p).forEach((s,S,m)=>{a.call(o,this.get(S),S,this)})}get(a){let o=this[u];l(o);let p=T(o).get(a);if(o.c||!I(p)||p!==o.t.get(a))return p;let s=B(p,o);return r(o),o.e.set(a,s),s}keys(){return T(this[u]).keys()}values(){let a=this.keys();return{[Symbol.iterator]:()=>this.values(),next:()=>{let o=a.next();return o.done?o:{done:!1,value:this.get(o.value)}}}}entries(){let a=this.keys();return{[Symbol.iterator]:()=>this.entries(),next:()=>{let o=a.next();if(o.done)return o;let p=this.get(o.value);return{done:!1,value:[o.value,p]}}}}[(u,Symbol.iterator)](){return this.entries()}}function t(c,b){return new e(c,b)}function r(c){c.e||(c.r=new Map,c.e=new Map(c.t))}class n extends Set{constructor(a,o){super();this[u]={o:3,i:o,n:o?o.n:K(),s:!1,c:!1,e:void 0,t:a,u:this,a:new Map,m:!1,l:!1}}get size(){return T(this[u]).size}has(a){let o=this[u];return l(o),o.e?!!(o.e.has(a)||o.a.has(a)&&o.e.has(o.a.get(a))):o.t.has(a)}add(a){let o=this[u];return l(o),this.has(a)||(f(o),E(o),o.e.add(a)),this}delete(a){if(!this.has(a))return!1;let o=this[u];return l(o),f(o),E(o),o.e.delete(a)||(o.a.has(a)?o.e.delete(o.a.get(a)):!1)}clear(){let a=this[u];l(a),T(a).size&&(f(a),E(a),a.e.clear())}values(){let a=this[u];return l(a),f(a),a.e.values()}entries(){let a=this[u];return l(a),f(a),a.e.entries()}keys(){return this.values()}[(u,Symbol.iterator)](){return this.values()}forEach(a,o){let p=this.values(),s=p.next();for(;!s.done;)a.call(o,s.value,s.value,this),s=p.next()}}function i(c,b){return new n(c,b)}function f(c){c.e||(c.e=new Set,c.t.forEach(b=>{if(I(b)){let a=B(b,c);c.a.set(b,a),c.e.add(a)}else c.e.add(b)}))}function l(c){c.m&&h(3,JSON.stringify(T(c)))}Q("MapSet",{I:t,D:i})}var M=new te,qt=M.produce,Jt=M.produceWithPatches.bind(M),Xt=M.setAutoFreeze.bind(M),Qt=M.setUseStrictShallowCopy.bind(M),Yt=M.applyPatches.bind(M),Zt=M.createDraft.bind(M),er=M.finishDraft.bind(M);function tr(e){return e}function rr(e){return e}export{te as Immer,Yt as applyPatches,tr as castDraft,rr as castImmutable,Zt as createDraft,fe as current,Ae as enableMapSet,Te as enablePatches,er as finishDraft,H as freeze,z as immerable,O as isDraft,I as isDraftable,R as nothing,Se as original,qt as produce,Jt as produceWithPatches,Xt as setAutoFreeze,Qt as setUseStrictShallowCopy};
+//# sourceMappingURL=immer.production.mjs.map
Index: node_modules/immer/dist/immer.production.mjs.map
===================================================================
--- node_modules/immer/dist/immer.production.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/dist/immer.production.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/utils/env.ts","../src/utils/errors.ts","../src/utils/common.ts","../src/utils/plugins.ts","../src/core/scope.ts","../src/core/finalize.ts","../src/core/proxy.ts","../src/core/immerClass.ts","../src/core/current.ts","../src/plugins/patches.ts","../src/plugins/mapset.ts","../src/immer.ts"],"sourcesContent":["// Should be no imports here!\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: unique symbol = Symbol.for(\"immer-nothing\")\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = Symbol.for(\"immer-draftable\")\n\nexport const DRAFT_STATE: unique symbol = Symbol.for(\"immer-state\")\n","export const errors =\n\tprocess.env.NODE_ENV !== \"production\"\n\t\t? [\n\t\t\t\t// All error codes, starting by 0:\n\t\t\t\tfunction(plugin: string) {\n\t\t\t\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t\t\t\t},\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t\t\t\t},\n\t\t\t\t\"This object has been frozen and should not be mutated\",\n\t\t\t\tfunction(data: any) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\t\t\t\tdata\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t\t\t\t\"Immer forbids circular references\",\n\t\t\t\t\"The first or second argument to `produce` must be a function\",\n\t\t\t\t\"The third argument to `produce` must be a function or undefined\",\n\t\t\t\t\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t\t\t\t\"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'current' expects a draft, got: ${thing}`\n\t\t\t\t},\n\t\t\t\t\"Object.defineProperty() cannot be used on an Immer draft\",\n\t\t\t\t\"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t\t\t\t\"Immer only supports deleting array indices\",\n\t\t\t\t\"Immer only supports setting array indices and the 'length' property\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'original' expects a draft, got: ${thing}`\n\t\t\t\t}\n\t\t\t\t// Note: if more errors are added, the errorOffset in Patches.ts should be increased\n\t\t\t\t// See Patches.ts for additional errors\n\t\t  ]\n\t\t: []\n\nexport function die(error: number, ...args: any[]): never {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst e = errors[error]\n\t\tconst msg = typeof e === \"function\" ? e.apply(null, args as any) : e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\tArchType,\n\tdie,\n\tStrictMode\n} from \"../internal\"\n\nexport const getPrototypeOf = Object.getPrototypeOf\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(15, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/**\n * Each iterates a map, set or array.\n * Or, if any other kind of object, all of its own properties.\n * Regardless whether they are enumerable or symbols\n */\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void\n): void\nexport function each(obj: any, iter: any) {\n\tif (getArchtype(obj) === ArchType.Object) {\n\t\tReflect.ownKeys(obj).forEach(key => {\n\t\t\titer(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): ArchType {\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_\n\t\t: Array.isArray(thing)\n\t\t? ArchType.Array\n\t\t: isMap(thing)\n\t\t? ArchType.Map\n\t\t: isSet(thing)\n\t\t? ArchType.Set\n\t\t: ArchType.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === ArchType.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === ArchType.Map) thing.set(propOrOldValue, value)\n\telse if (t === ArchType.Set) {\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any, strict: StrictMode) {\n\tif (isMap(base)) {\n\t\treturn new Map(base)\n\t}\n\tif (isSet(base)) {\n\t\treturn new Set(base)\n\t}\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\n\tconst isPlain = isPlainObject(base)\n\n\tif (strict === true || (strict === \"class_only\" && !isPlain)) {\n\t\t// Perform a strict copy\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(base)\n\t\tdelete descriptors[DRAFT_STATE as any]\n\t\tlet keys = Reflect.ownKeys(descriptors)\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key: any = keys[i]\n\t\t\tconst desc = descriptors[key]\n\t\t\tif (desc.writable === false) {\n\t\t\t\tdesc.writable = true\n\t\t\t\tdesc.configurable = true\n\t\t\t}\n\t\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t\t// with libraries that trap values, like mobx or vue\n\t\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\t\tif (desc.get || desc.set)\n\t\t\t\tdescriptors[key] = {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\t\tvalue: base[key]\n\t\t\t\t}\n\t\t}\n\t\treturn Object.create(getPrototypeOf(base), descriptors)\n\t} else {\n\t\t// perform a sloppy copy\n\t\tconst proto = getPrototypeOf(base)\n\t\tif (proto !== null && isPlain) {\n\t\t\treturn {...base} // assumption: better inner class optimization than the assign below\n\t\t}\n\t\tconst obj = Object.create(proto)\n\t\treturn Object.assign(obj, base)\n\t}\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep)\n\t\t// See #590, don't recurse into non-enumerable / Symbol properties when freezing\n\t\t// So use Object.entries (only string-like, enumerables) instead of each()\n\t\tObject.entries(obj).forEach(([key, value]) => freeze(value, true))\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tDrafted,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tArchType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: readonly Patch[]): T\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(0, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ArchType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ArchType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tArchType,\n\tgetPlugin\n} from \"../internal\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (state.type_ === ArchType.Object || state.type_ === ArchType.Array)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tArchType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(value, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path)\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result = state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// To preserve insertion order in all cases we then clear the set\n\t\t// And we let finalizeProperty know it needs to re-add non-draft children back to the target\n\t\tlet resultEach = result\n\t\tlet isSet = false\n\t\tif (state.type_ === ArchType.Set) {\n\t\t\tresultEach = new Set(result)\n\t\t\tresult.clear()\n\t\t\tisSet = true\n\t\t}\n\t\teach(resultEach, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path, isSet)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath,\n\ttargetIsSet?: boolean\n) {\n\tif (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n\t\tdie(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t} else if (targetIsSet) {\n\t\ttargetObject.add(childValue)\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// Immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\t// Per #590, we never freeze symbolic properties. Just to make sure don't accidentally interfere\n\t\t// with other frameworks.\n\t\tif (\n\t\t\t(!parentState || !parentState.scope_.parent_) &&\n\t\t\ttypeof prop !== \"symbol\" &&\n\t\t\tObject.prototype.propertyIsEnumerable.call(targetObject, prop)\n\t\t)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\t// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects\n\tif (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tgetPrototypeOf,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tArchType,\n\tImmerScope\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ArchType.Object\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ArchType.Array\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ArchType.Array : (ArchType.Object as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(value, state))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\t(state.copy_![prop] === value &&\n\t\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t\t(value !== undefined || prop in state.copy_)) ||\n\t\t\t// special case: NaN\n\t\t\t(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\tif (state.copy_) {\n\t\t\tdelete state.copy_[prop]\n\t\t}\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ArchType.Array || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop as any)))\n\t\tdie(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (\n\t\tprocess.env.NODE_ENV !== \"production\" &&\n\t\tprop !== \"length\" &&\n\t\tisNaN(parseInt(prop as any))\n\t)\n\t\tdie(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t  // prototype, we should invoke it with the draft as context!\n\t\t\t  desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {\n\tbase_: any\n\tcopy_: any\n\tscope_: ImmerScope\n}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(\n\t\t\tstate.base_,\n\t\t\tstate.scope_.immer_.useStrictShallowCopy_\n\t\t)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport type StrictMode = boolean | \"class_only\";\n\nexport class Immer implements ProducersFns {\n\tautoFreeze_: boolean = true\n\tuseStrictShallowCopy_: StrictMode = false\n\n\tconstructor(config?: {\n\t\tautoFreeze?: boolean\n\t\tuseStrictShallowCopy?: StrictMode\n\t}) {\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t\tif (typeof config?.useStrictShallowCopy === \"boolean\")\n\t\t\tthis.setUseStrictShallowCopy(config!.useStrictShallowCopy)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(1, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (!state || !state.isManual_) die(9)\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to enable strict shallow copy.\n\t *\n\t * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n\t */\n\tsetUseStrictShallowCopy(value: StrictMode) {\n\t\tthis.useStrictShallowCopy_ = value\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: createProxyProxy(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tisFrozen\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(10, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value) || isFrozen(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tif (state) {\n\t\tif (!state.modified_) return state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)\n\t} else {\n\t\tcopy = shallowCopy(value, true)\n\t}\n\t// recurse\n\teach(copy, (key, childValue) => {\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\tif (state) {\n\t\tstate.finalized_ = false\n\t}\n\treturn copy\n}\n","import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tProxyArrayState,\n\tMapState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tgetPrototypeOf,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tArchType,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING,\n\terrors\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst errorOffset = 16\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\terrors.push(\n\t\t\t'Sets cannot have \"replace\" patches.',\n\t\t\tfunction(op: string) {\n\t\t\t\treturn \"Unsupported patch operation: \" + op\n\t\t\t},\n\t\t\tfunction(path: string) {\n\t\t\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t\t\t},\n\t\t\t\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n\t\t)\n\t}\n\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ArchType.Object:\n\t\t\tcase ArchType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ArchType.Array:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ArchType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tfor (let i = copy_.length - 1; base_.length <= i; --i) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tinversePatches.push({\n\t\t\t\top: REMOVE,\n\t\t\t\tpath\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\tbaseValue: any,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: baseValue\n\t\t})\n\t}\n\n\tfunction applyPatches_<T>(draft: T, patches: readonly Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tlet p = path[i]\n\t\t\t\tif (typeof p !== \"string\" && typeof p !== \"number\") {\n\t\t\t\t\tp = \"\" + p\n\t\t\t\t}\n\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === ArchType.Object || parentType === ArchType.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\")\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(errorOffset + 2, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\tdie(errorOffset)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn key === \"-\"\n\t\t\t\t\t\t\t\t? base.push(value)\n\t\t\t\t\t\t\t\t: base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(errorOffset + 1, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue<T>(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded<T>(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n","// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tdie,\n\tArchType,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\tclass DraftMap extends Map {\n\t\t[DRAFT_STATE]: MapState\n\n\t\tconstructor(target: AnyMap, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tset(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tif (state.base_.has(key)) {\n\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t} else {\n\t\t\t\tstate.assigned_!.delete(key)\n\t\t\t}\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tforEach(cb: (value: any, key: any, self: any) => void, thisArg?: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tget(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.entries()\n\t\t}\n\t}\n\n\tfunction proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tclass DraftSet extends Set {\n\t\t[DRAFT_STATE]: SetState\n\t\tconstructor(target: AnySet, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tadd(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn this.values()\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tforEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\t}\n\tfunction proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n","import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tWritableDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\tProducer,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze,\n\tObjectish,\n\tStrictMode\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\nexport const setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\n"],"mappings":"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","names":["NOTHING","DRAFTABLE","DRAFT_STATE","die","error","args","getPrototypeOf","isDraft","value","DRAFT_STATE","isDraftable","isPlainObject","DRAFTABLE","isMap","isSet","objectCtorString","proto","Ctor","original","die","base_","each","obj","iter","getArchtype","key","entry","index","thing","state","type_","has","prop","get","set","propOrOldValue","t","is","x","y","target","latest","copy_","shallowCopy","base","strict","isPlain","descriptors","keys","i","desc","freeze","deep","isFrozen","dontMutateFrozenCollections","plugins","getPlugin","pluginKey","plugin","die","loadPlugin","implementation","currentScope","getCurrentScope","createScope","parent_","immer_","drafts_","canAutoFreeze_","unfinalizedDrafts_","usePatchesInScope","scope","patchListener","getPlugin","patches_","inversePatches_","patchListener_","revokeScope","leaveScope","revokeDraft","enterScope","immer","draft","state","DRAFT_STATE","type_","revoke_","revoked_","processResult","result","scope","unfinalizedDrafts_","drafts_","baseDraft","DRAFT_STATE","modified_","revokeScope","die","isDraftable","finalize","parent_","maybeFreeze","patches_","getPlugin","generateReplacementPatches_","base_","inversePatches_","patchListener_","NOTHING","rootScope","value","path","isFrozen","state","each","key","childValue","finalizeProperty","scope_","finalized_","copy_","resultEach","isSet","type_","generatePatches_","parentState","targetObject","prop","rootPath","targetIsSet","isDraft","has","assigned_","res","set","canAutoFreeze_","immer_","autoFreeze_","deep","freeze","createProxyProxy","base","parent","isArray","state","type_","scope_","getCurrentScope","modified_","finalized_","assigned_","parent_","base_","draft_","copy_","revoke_","isManual_","target","traps","objectTraps","arrayTraps","revoke","proxy","prop","DRAFT_STATE","source","latest","has","readPropFromProto","value","isDraftable","peek","prepareCopy","createProxy","desc","getDescriptorFromProto","current","currentState","is","markChanged","owner","die","getPrototypeOf","each","key","fn","draft","proto","shallowCopy","immer_","useStrictShallowCopy_","Immer","config","autoFreeze_","useStrictShallowCopy_","base","recipe","patchListener","defaultBase","self","args","draft","die","result","isDraftable","scope","enterScope","proxy","createProxy","hasError","revokeScope","leaveScope","usePatchesInScope","processResult","NOTHING","freeze","p","ip","getPlugin","generateReplacementPatches_","state","patches","inversePatches","isDraft","current","DRAFT_STATE","isManual_","scope_","value","i","patch","applyPatchesImpl","applyPatches_","parent","isMap","proxyMap_","isSet","proxySet_","createProxyProxy","getCurrentScope","drafts_","current","value","isDraft","die","currentImpl","isDraftable","isFrozen","state","DRAFT_STATE","copy","modified_","base_","finalized_","shallowCopy","scope_","immer_","useStrictShallowCopy_","each","key","childValue","set","enablePatches","REPLACE","ADD","REMOVE","generatePatches_","state","basePath","patches","inversePatches","type_","generatePatchesFromAssigned","generateArrayPatches","generateSetPatches","base_","assigned_","copy_","i","path","clonePatchValueIfNeeded","each","key","assignedValue","origValue","get","value","op","has","generateReplacementPatches_","baseValue","replacement","NOTHING","applyPatches_","draft","patch","base","parentType","getArchtype","p","die","type","deepClonePatchValue","obj","isDraftable","isMap","k","v","isSet","cloned","getPrototypeOf","DRAFTABLE","isDraft","loadPlugin","enableMapSet","DraftMap","target","parent","DRAFT_STATE","type_","parent_","scope_","getCurrentScope","modified_","finalized_","copy_","assigned_","base_","draft_","isManual_","revoked_","latest","key","value","state","assertUnrevoked","prepareMapCopy","markChanged","each","cb","thisArg","_value","_map","isDraftable","draft","createProxy","iterator","r","proxyMap_","DraftSet","drafts_","prepareSetCopy","result","proxySet_","die","loadPlugin","immer","Immer","produce","produceWithPatches","setAutoFreeze","setUseStrictShallowCopy","applyPatches","createDraft","finishDraft","castDraft","value","castImmutable"]}
Index: node_modules/immer/package.json
===================================================================
--- node_modules/immer/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,87 @@
+{
+  "name": "immer",
+  "version": "10.1.1",
+  "description": "Create your next immutable state by mutating the current one",
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/immer.legacy-esm.js",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "types": "./dist/immer.d.ts",
+      "import": "./dist/immer.mjs",
+      "require": "./dist/cjs/index.js"
+    }
+  },
+  "jsnext:main": "dist/immer.mjs",
+  "react-native": "./dist/immer.legacy-esm.js",
+  "source": "src/immer.ts",
+  "types": "./dist/immer.d.ts",
+  "sideEffects": false,
+  "scripts": {
+    "pretest": "yarn build",
+    "test": "jest && yarn test:build && yarn test:flow",
+    "test:perf": "cd __performance_tests__ && node add-data.mjs && node todo.mjs && node incremental.mjs && node large-obj.mjs",
+    "test:flow": "yarn flow check __tests__/flow",
+    "test:build": "NODE_ENV='production' yarn jest --config jest.config.build.js",
+    "watch": "jest --watch",
+    "coverage": "jest --coverage",
+    "coveralls": "jest --coverage && cat ./coverage/lcov.info | ./node_modules/.bin/coveralls && rm -rf ./coverage",
+    "build": "tsup",
+    "publish-docs": "cd website && GIT_USER=mweststrate USE_SSH=true yarn docusaurus deploy",
+    "start": "cd website && yarn start",
+    "test:size": "yarn build && yarn import-size --report . produce enableMapSet enablePatches",
+    "test:sizequick": "yarn build && yarn import-size . produce"
+  },
+  "husky": {
+    "hooks": {
+      "pre-commit": "pretty-quick --staged"
+    }
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/immerjs/immer.git"
+  },
+  "keywords": [
+    "immutable",
+    "mutable",
+    "copy-on-write"
+  ],
+  "author": "Michel Weststrate <info@michel.codes>",
+  "license": "MIT",
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/immer"
+  },
+  "bugs": {
+    "url": "https://github.com/immerjs/immer/issues"
+  },
+  "homepage": "https://github.com/immerjs/immer#readme",
+  "files": [
+    "dist",
+    "compat",
+    "src"
+  ],
+  "devDependencies": {
+    "@babel/core": "^7.21.3",
+    "@types/jest": "^25.1.2",
+    "coveralls": "^3.0.0",
+    "cpx2": "^3.0.0",
+    "deep-freeze": "^0.0.1",
+    "flow-bin": "^0.123.0",
+    "husky": "^1.2.0",
+    "immutable": "^3.8.2",
+    "import-size": "^1.0.2",
+    "jest": "^29.5.0",
+    "lodash": "^4.17.4",
+    "lodash.clonedeep": "^4.5.0",
+    "prettier": "1.19.1",
+    "pretty-quick": "^1.8.0",
+    "redux": "^4.0.5",
+    "rimraf": "^2.6.2",
+    "seamless-immutable": "^7.1.3",
+    "semantic-release": "^17.0.2",
+    "ts-jest": "^29.0.0",
+    "tsup": "^6.7.0",
+    "typescript": "^5.0.2"
+  }
+}
Index: node_modules/immer/readme.md
===================================================================
--- node_modules/immer/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+<img src="images/immer-logo.svg" height="200px" align="right"/>
+
+# Immer
+
+[![npm](https://img.shields.io/npm/v/immer.svg)](https://www.npmjs.com/package/immer) [![Build Status](https://github.com/immerjs/immer/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/immerjs/immer/actions?query=branch%3Amain) [![Coverage Status](https://coveralls.io/repos/github/immerjs/immer/badge.svg?branch=main)](https://coveralls.io/github/immerjs/immer?branch=main) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![OpenCollective](https://opencollective.com/immer/backers/badge.svg)](#backers) [![OpenCollective](https://opencollective.com/immer/sponsors/badge.svg)](#sponsors) [![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/immerjs/immer)
+
+_Create the next immutable state tree by simply modifying the current tree_
+
+Winner of the "Breakthrough of the year" [React open source award](https://osawards.com/react/) and "Most impactful contribution" [JavaScript open source award](https://osawards.com/javascript/) in 2019
+
+## Contribute using one-click online setup
+
+You can use Gitpod (a free online VS Code like IDE) for contributing online. With a single click it will launch a workspace and automatically:
+
+- clone the immer repo.
+- install the dependencies.
+- run `yarn run start`.
+
+so that you can start coding straight away.
+
+[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
+
+## Documentation
+
+The documentation of this package is hosted at https://immerjs.github.io/immer/
+
+## Support
+
+Did Immer make a difference to your project? Join the open collective at https://opencollective.com/immer!
+
+## Release notes
+
+https://github.com/immerjs/immer/releases
Index: node_modules/immer/src/core/current.ts
===================================================================
--- node_modules/immer/src/core/current.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/core/current.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import {
+	die,
+	isDraft,
+	shallowCopy,
+	each,
+	DRAFT_STATE,
+	set,
+	ImmerState,
+	isDraftable,
+	isFrozen
+} from "../internal"
+
+/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */
+export function current<T>(value: T): T
+export function current(value: any): any {
+	if (!isDraft(value)) die(10, value)
+	return currentImpl(value)
+}
+
+function currentImpl(value: any): any {
+	if (!isDraftable(value) || isFrozen(value)) return value
+	const state: ImmerState | undefined = value[DRAFT_STATE]
+	let copy: any
+	if (state) {
+		if (!state.modified_) return state.base_
+		// Optimization: avoid generating new drafts during copying
+		state.finalized_ = true
+		copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)
+	} else {
+		copy = shallowCopy(value, true)
+	}
+	// recurse
+	each(copy, (key, childValue) => {
+		set(copy, key, currentImpl(childValue))
+	})
+	if (state) {
+		state.finalized_ = false
+	}
+	return copy
+}
Index: node_modules/immer/src/core/finalize.ts
===================================================================
--- node_modules/immer/src/core/finalize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/core/finalize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,165 @@
+import {
+	ImmerScope,
+	DRAFT_STATE,
+	isDraftable,
+	NOTHING,
+	PatchPath,
+	each,
+	has,
+	freeze,
+	ImmerState,
+	isDraft,
+	SetState,
+	set,
+	ArchType,
+	getPlugin,
+	die,
+	revokeScope,
+	isFrozen
+} from "../internal"
+
+export function processResult(result: any, scope: ImmerScope) {
+	scope.unfinalizedDrafts_ = scope.drafts_.length
+	const baseDraft = scope.drafts_![0]
+	const isReplaced = result !== undefined && result !== baseDraft
+	if (isReplaced) {
+		if (baseDraft[DRAFT_STATE].modified_) {
+			revokeScope(scope)
+			die(4)
+		}
+		if (isDraftable(result)) {
+			// Finalize the result in case it contains (or is) a subset of the draft.
+			result = finalize(scope, result)
+			if (!scope.parent_) maybeFreeze(scope, result)
+		}
+		if (scope.patches_) {
+			getPlugin("Patches").generateReplacementPatches_(
+				baseDraft[DRAFT_STATE].base_,
+				result,
+				scope.patches_,
+				scope.inversePatches_!
+			)
+		}
+	} else {
+		// Finalize the base draft.
+		result = finalize(scope, baseDraft, [])
+	}
+	revokeScope(scope)
+	if (scope.patches_) {
+		scope.patchListener_!(scope.patches_, scope.inversePatches_!)
+	}
+	return result !== NOTHING ? result : undefined
+}
+
+function finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {
+	// Don't recurse in tho recursive data structures
+	if (isFrozen(value)) return value
+
+	const state: ImmerState = value[DRAFT_STATE]
+	// A plain object, might need freezing, might contain drafts
+	if (!state) {
+		each(value, (key, childValue) =>
+			finalizeProperty(rootScope, state, value, key, childValue, path)
+		)
+		return value
+	}
+	// Never finalize drafts owned by another scope.
+	if (state.scope_ !== rootScope) return value
+	// Unmodified draft, return the (frozen) original
+	if (!state.modified_) {
+		maybeFreeze(rootScope, state.base_, true)
+		return state.base_
+	}
+	// Not finalized yet, let's do that now
+	if (!state.finalized_) {
+		state.finalized_ = true
+		state.scope_.unfinalizedDrafts_--
+		const result = state.copy_
+		// Finalize all children of the copy
+		// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628
+		// To preserve insertion order in all cases we then clear the set
+		// And we let finalizeProperty know it needs to re-add non-draft children back to the target
+		let resultEach = result
+		let isSet = false
+		if (state.type_ === ArchType.Set) {
+			resultEach = new Set(result)
+			result.clear()
+			isSet = true
+		}
+		each(resultEach, (key, childValue) =>
+			finalizeProperty(rootScope, state, result, key, childValue, path, isSet)
+		)
+		// everything inside is frozen, we can freeze here
+		maybeFreeze(rootScope, result, false)
+		// first time finalizing, let's create those patches
+		if (path && rootScope.patches_) {
+			getPlugin("Patches").generatePatches_(
+				state,
+				path,
+				rootScope.patches_,
+				rootScope.inversePatches_!
+			)
+		}
+	}
+	return state.copy_
+}
+
+function finalizeProperty(
+	rootScope: ImmerScope,
+	parentState: undefined | ImmerState,
+	targetObject: any,
+	prop: string | number,
+	childValue: any,
+	rootPath?: PatchPath,
+	targetIsSet?: boolean
+) {
+	if (process.env.NODE_ENV !== "production" && childValue === targetObject)
+		die(5)
+	if (isDraft(childValue)) {
+		const path =
+			rootPath &&
+			parentState &&
+			parentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.
+			!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.
+				? rootPath!.concat(prop)
+				: undefined
+		// Drafts owned by `scope` are finalized here.
+		const res = finalize(rootScope, childValue, path)
+		set(targetObject, prop, res)
+		// Drafts from another scope must prevented to be frozen
+		// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze
+		if (isDraft(res)) {
+			rootScope.canAutoFreeze_ = false
+		} else return
+	} else if (targetIsSet) {
+		targetObject.add(childValue)
+	}
+	// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.
+	if (isDraftable(childValue) && !isFrozen(childValue)) {
+		if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {
+			// optimization: if an object is not a draft, and we don't have to
+			// deepfreeze everything, and we are sure that no drafts are left in the remaining object
+			// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.
+			// This benefits especially adding large data tree's without further processing.
+			// See add-data.js perf test
+			return
+		}
+		finalize(rootScope, childValue)
+		// Immer deep freezes plain objects, so if there is no parent state, we freeze as well
+		// Per #590, we never freeze symbolic properties. Just to make sure don't accidentally interfere
+		// with other frameworks.
+		if (
+			(!parentState || !parentState.scope_.parent_) &&
+			typeof prop !== "symbol" &&
+			Object.prototype.propertyIsEnumerable.call(targetObject, prop)
+		)
+			maybeFreeze(rootScope, childValue)
+	}
+}
+
+function maybeFreeze(scope: ImmerScope, value: any, deep = false) {
+	// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects
+	if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {
+		freeze(value, deep)
+	}
+}
Index: node_modules/immer/src/core/immerClass.ts
===================================================================
--- node_modules/immer/src/core/immerClass.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/core/immerClass.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,218 @@
+import {
+	IProduceWithPatches,
+	IProduce,
+	ImmerState,
+	Drafted,
+	isDraftable,
+	processResult,
+	Patch,
+	Objectish,
+	DRAFT_STATE,
+	Draft,
+	PatchListener,
+	isDraft,
+	isMap,
+	isSet,
+	createProxyProxy,
+	getPlugin,
+	die,
+	enterScope,
+	revokeScope,
+	leaveScope,
+	usePatchesInScope,
+	getCurrentScope,
+	NOTHING,
+	freeze,
+	current
+} from "../internal"
+
+interface ProducersFns {
+	produce: IProduce
+	produceWithPatches: IProduceWithPatches
+}
+
+export type StrictMode = boolean | "class_only";
+
+export class Immer implements ProducersFns {
+	autoFreeze_: boolean = true
+	useStrictShallowCopy_: StrictMode = false
+
+	constructor(config?: {
+		autoFreeze?: boolean
+		useStrictShallowCopy?: StrictMode
+	}) {
+		if (typeof config?.autoFreeze === "boolean")
+			this.setAutoFreeze(config!.autoFreeze)
+		if (typeof config?.useStrictShallowCopy === "boolean")
+			this.setUseStrictShallowCopy(config!.useStrictShallowCopy)
+	}
+
+	/**
+	 * The `produce` function takes a value and a "recipe function" (whose
+	 * return value often depends on the base state). The recipe function is
+	 * free to mutate its first argument however it wants. All mutations are
+	 * only ever applied to a __copy__ of the base state.
+	 *
+	 * Pass only a function to create a "curried producer" which relieves you
+	 * from passing the recipe function every time.
+	 *
+	 * Only plain objects and arrays are made mutable. All other objects are
+	 * considered uncopyable.
+	 *
+	 * Note: This function is __bound__ to its `Immer` instance.
+	 *
+	 * @param {any} base - the initial state
+	 * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified
+	 * @param {Function} patchListener - optional function that will be called with all the patches produced here
+	 * @returns {any} a new state, or the initial state if nothing was modified
+	 */
+	produce: IProduce = (base: any, recipe?: any, patchListener?: any) => {
+		// curried invocation
+		if (typeof base === "function" && typeof recipe !== "function") {
+			const defaultBase = recipe
+			recipe = base
+
+			const self = this
+			return function curriedProduce(
+				this: any,
+				base = defaultBase,
+				...args: any[]
+			) {
+				return self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore
+			}
+		}
+
+		if (typeof recipe !== "function") die(6)
+		if (patchListener !== undefined && typeof patchListener !== "function")
+			die(7)
+
+		let result
+
+		// Only plain objects, arrays, and "immerable classes" are drafted.
+		if (isDraftable(base)) {
+			const scope = enterScope(this)
+			const proxy = createProxy(base, undefined)
+			let hasError = true
+			try {
+				result = recipe(proxy)
+				hasError = false
+			} finally {
+				// finally instead of catch + rethrow better preserves original stack
+				if (hasError) revokeScope(scope)
+				else leaveScope(scope)
+			}
+			usePatchesInScope(scope, patchListener)
+			return processResult(result, scope)
+		} else if (!base || typeof base !== "object") {
+			result = recipe(base)
+			if (result === undefined) result = base
+			if (result === NOTHING) result = undefined
+			if (this.autoFreeze_) freeze(result, true)
+			if (patchListener) {
+				const p: Patch[] = []
+				const ip: Patch[] = []
+				getPlugin("Patches").generateReplacementPatches_(base, result, p, ip)
+				patchListener(p, ip)
+			}
+			return result
+		} else die(1, base)
+	}
+
+	produceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {
+		// curried invocation
+		if (typeof base === "function") {
+			return (state: any, ...args: any[]) =>
+				this.produceWithPatches(state, (draft: any) => base(draft, ...args))
+		}
+
+		let patches: Patch[], inversePatches: Patch[]
+		const result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {
+			patches = p
+			inversePatches = ip
+		})
+		return [result, patches!, inversePatches!]
+	}
+
+	createDraft<T extends Objectish>(base: T): Draft<T> {
+		if (!isDraftable(base)) die(8)
+		if (isDraft(base)) base = current(base)
+		const scope = enterScope(this)
+		const proxy = createProxy(base, undefined)
+		proxy[DRAFT_STATE].isManual_ = true
+		leaveScope(scope)
+		return proxy as any
+	}
+
+	finishDraft<D extends Draft<any>>(
+		draft: D,
+		patchListener?: PatchListener
+	): D extends Draft<infer T> ? T : never {
+		const state: ImmerState = draft && (draft as any)[DRAFT_STATE]
+		if (!state || !state.isManual_) die(9)
+		const {scope_: scope} = state
+		usePatchesInScope(scope, patchListener)
+		return processResult(undefined, scope)
+	}
+
+	/**
+	 * Pass true to automatically freeze all copies created by Immer.
+	 *
+	 * By default, auto-freezing is enabled.
+	 */
+	setAutoFreeze(value: boolean) {
+		this.autoFreeze_ = value
+	}
+
+	/**
+	 * Pass true to enable strict shallow copy.
+	 *
+	 * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.
+	 */
+	setUseStrictShallowCopy(value: StrictMode) {
+		this.useStrictShallowCopy_ = value
+	}
+
+	applyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T {
+		// If a patch replaces the entire state, take that replacement as base
+		// before applying patches
+		let i: number
+		for (i = patches.length - 1; i >= 0; i--) {
+			const patch = patches[i]
+			if (patch.path.length === 0 && patch.op === "replace") {
+				base = patch.value
+				break
+			}
+		}
+		// If there was a patch that replaced the entire state, start from the
+		// patch after that.
+		if (i > -1) {
+			patches = patches.slice(i + 1)
+		}
+
+		const applyPatchesImpl = getPlugin("Patches").applyPatches_
+		if (isDraft(base)) {
+			// N.B: never hits if some patch a replacement, patches are never drafts
+			return applyPatchesImpl(base, patches)
+		}
+		// Otherwise, produce a copy of the base state.
+		return this.produce(base, (draft: Drafted) =>
+			applyPatchesImpl(draft, patches)
+		)
+	}
+}
+
+export function createProxy<T extends Objectish>(
+	value: T,
+	parent?: ImmerState
+): Drafted<T, ImmerState> {
+	// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft
+	const draft: Drafted = isMap(value)
+		? getPlugin("MapSet").proxyMap_(value, parent)
+		: isSet(value)
+		? getPlugin("MapSet").proxySet_(value, parent)
+		: createProxyProxy(value, parent)
+
+	const scope = parent ? parent.scope_ : getCurrentScope()
+	scope.drafts_.push(draft)
+	return draft
+}
Index: node_modules/immer/src/core/proxy.ts
===================================================================
--- node_modules/immer/src/core/proxy.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/core/proxy.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,292 @@
+import {
+	each,
+	has,
+	is,
+	isDraftable,
+	shallowCopy,
+	latest,
+	ImmerBaseState,
+	ImmerState,
+	Drafted,
+	AnyObject,
+	AnyArray,
+	Objectish,
+	getCurrentScope,
+	getPrototypeOf,
+	DRAFT_STATE,
+	die,
+	createProxy,
+	ArchType,
+	ImmerScope
+} from "../internal"
+
+interface ProxyBaseState extends ImmerBaseState {
+	assigned_: {
+		[property: string]: boolean
+	}
+	parent_?: ImmerState
+	revoke_(): void
+}
+
+export interface ProxyObjectState extends ProxyBaseState {
+	type_: ArchType.Object
+	base_: any
+	copy_: any
+	draft_: Drafted<AnyObject, ProxyObjectState>
+}
+
+export interface ProxyArrayState extends ProxyBaseState {
+	type_: ArchType.Array
+	base_: AnyArray
+	copy_: AnyArray | null
+	draft_: Drafted<AnyArray, ProxyArrayState>
+}
+
+type ProxyState = ProxyObjectState | ProxyArrayState
+
+/**
+ * Returns a new draft of the `base` object.
+ *
+ * The second argument is the parent draft-state (used internally).
+ */
+export function createProxyProxy<T extends Objectish>(
+	base: T,
+	parent?: ImmerState
+): Drafted<T, ProxyState> {
+	const isArray = Array.isArray(base)
+	const state: ProxyState = {
+		type_: isArray ? ArchType.Array : (ArchType.Object as any),
+		// Track which produce call this is associated with.
+		scope_: parent ? parent.scope_ : getCurrentScope()!,
+		// True for both shallow and deep changes.
+		modified_: false,
+		// Used during finalization.
+		finalized_: false,
+		// Track which properties have been assigned (true) or deleted (false).
+		assigned_: {},
+		// The parent draft state.
+		parent_: parent,
+		// The base state.
+		base_: base,
+		// The base proxy.
+		draft_: null as any, // set below
+		// The base copy with any updated values.
+		copy_: null,
+		// Called by the `produce` function.
+		revoke_: null as any,
+		isManual_: false
+	}
+
+	// the traps must target something, a bit like the 'real' base.
+	// but also, we need to be able to determine from the target what the relevant state is
+	// (to avoid creating traps per instance to capture the state in closure,
+	// and to avoid creating weird hidden properties as well)
+	// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)
+	// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb
+	let target: T = state as any
+	let traps: ProxyHandler<object | Array<any>> = objectTraps
+	if (isArray) {
+		target = [state] as any
+		traps = arrayTraps
+	}
+
+	const {revoke, proxy} = Proxy.revocable(target, traps)
+	state.draft_ = proxy as any
+	state.revoke_ = revoke
+	return proxy as any
+}
+
+/**
+ * Object drafts
+ */
+export const objectTraps: ProxyHandler<ProxyState> = {
+	get(state, prop) {
+		if (prop === DRAFT_STATE) return state
+
+		const source = latest(state)
+		if (!has(source, prop)) {
+			// non-existing or non-own property...
+			return readPropFromProto(state, source, prop)
+		}
+		const value = source[prop]
+		if (state.finalized_ || !isDraftable(value)) {
+			return value
+		}
+		// Check for existing draft in modified state.
+		// Assigned values are never drafted. This catches any drafts we created, too.
+		if (value === peek(state.base_, prop)) {
+			prepareCopy(state)
+			return (state.copy_![prop as any] = createProxy(value, state))
+		}
+		return value
+	},
+	has(state, prop) {
+		return prop in latest(state)
+	},
+	ownKeys(state) {
+		return Reflect.ownKeys(latest(state))
+	},
+	set(
+		state: ProxyObjectState,
+		prop: string /* strictly not, but helps TS */,
+		value
+	) {
+		const desc = getDescriptorFromProto(latest(state), prop)
+		if (desc?.set) {
+			// special case: if this write is captured by a setter, we have
+			// to trigger it with the correct context
+			desc.set.call(state.draft_, value)
+			return true
+		}
+		if (!state.modified_) {
+			// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)
+			// from setting an existing property with value undefined to undefined (which is not a change)
+			const current = peek(latest(state), prop)
+			// special case, if we assigning the original value to a draft, we can ignore the assignment
+			const currentState: ProxyObjectState = current?.[DRAFT_STATE]
+			if (currentState && currentState.base_ === value) {
+				state.copy_![prop] = value
+				state.assigned_[prop] = false
+				return true
+			}
+			if (is(value, current) && (value !== undefined || has(state.base_, prop)))
+				return true
+			prepareCopy(state)
+			markChanged(state)
+		}
+
+		if (
+			(state.copy_![prop] === value &&
+				// special case: handle new props with value 'undefined'
+				(value !== undefined || prop in state.copy_)) ||
+			// special case: NaN
+			(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))
+		)
+			return true
+
+		// @ts-ignore
+		state.copy_![prop] = value
+		state.assigned_[prop] = true
+		return true
+	},
+	deleteProperty(state, prop: string) {
+		// The `undefined` check is a fast path for pre-existing keys.
+		if (peek(state.base_, prop) !== undefined || prop in state.base_) {
+			state.assigned_[prop] = false
+			prepareCopy(state)
+			markChanged(state)
+		} else {
+			// if an originally not assigned property was deleted
+			delete state.assigned_[prop]
+		}
+		if (state.copy_) {
+			delete state.copy_[prop]
+		}
+		return true
+	},
+	// Note: We never coerce `desc.value` into an Immer draft, because we can't make
+	// the same guarantee in ES5 mode.
+	getOwnPropertyDescriptor(state, prop) {
+		const owner = latest(state)
+		const desc = Reflect.getOwnPropertyDescriptor(owner, prop)
+		if (!desc) return desc
+		return {
+			writable: true,
+			configurable: state.type_ !== ArchType.Array || prop !== "length",
+			enumerable: desc.enumerable,
+			value: owner[prop]
+		}
+	},
+	defineProperty() {
+		die(11)
+	},
+	getPrototypeOf(state) {
+		return getPrototypeOf(state.base_)
+	},
+	setPrototypeOf() {
+		die(12)
+	}
+}
+
+/**
+ * Array drafts
+ */
+
+const arrayTraps: ProxyHandler<[ProxyArrayState]> = {}
+each(objectTraps, (key, fn) => {
+	// @ts-ignore
+	arrayTraps[key] = function() {
+		arguments[0] = arguments[0][0]
+		return fn.apply(this, arguments)
+	}
+})
+arrayTraps.deleteProperty = function(state, prop) {
+	if (process.env.NODE_ENV !== "production" && isNaN(parseInt(prop as any)))
+		die(13)
+	// @ts-ignore
+	return arrayTraps.set!.call(this, state, prop, undefined)
+}
+arrayTraps.set = function(state, prop, value) {
+	if (
+		process.env.NODE_ENV !== "production" &&
+		prop !== "length" &&
+		isNaN(parseInt(prop as any))
+	)
+		die(14)
+	return objectTraps.set!.call(this, state[0], prop, value, state[0])
+}
+
+// Access a property without creating an Immer draft.
+function peek(draft: Drafted, prop: PropertyKey) {
+	const state = draft[DRAFT_STATE]
+	const source = state ? latest(state) : draft
+	return source[prop]
+}
+
+function readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {
+	const desc = getDescriptorFromProto(source, prop)
+	return desc
+		? `value` in desc
+			? desc.value
+			: // This is a very special case, if the prop is a getter defined by the
+			  // prototype, we should invoke it with the draft as context!
+			  desc.get?.call(state.draft_)
+		: undefined
+}
+
+function getDescriptorFromProto(
+	source: any,
+	prop: PropertyKey
+): PropertyDescriptor | undefined {
+	// 'in' checks proto!
+	if (!(prop in source)) return undefined
+	let proto = getPrototypeOf(source)
+	while (proto) {
+		const desc = Object.getOwnPropertyDescriptor(proto, prop)
+		if (desc) return desc
+		proto = getPrototypeOf(proto)
+	}
+	return undefined
+}
+
+export function markChanged(state: ImmerState) {
+	if (!state.modified_) {
+		state.modified_ = true
+		if (state.parent_) {
+			markChanged(state.parent_)
+		}
+	}
+}
+
+export function prepareCopy(state: {
+	base_: any
+	copy_: any
+	scope_: ImmerScope
+}) {
+	if (!state.copy_) {
+		state.copy_ = shallowCopy(
+			state.base_,
+			state.scope_.immer_.useStrictShallowCopy_
+		)
+	}
+}
Index: node_modules/immer/src/core/scope.ts
===================================================================
--- node_modules/immer/src/core/scope.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/core/scope.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+import {
+	Patch,
+	PatchListener,
+	Drafted,
+	Immer,
+	DRAFT_STATE,
+	ImmerState,
+	ArchType,
+	getPlugin
+} from "../internal"
+
+/** Each scope represents a `produce` call. */
+
+export interface ImmerScope {
+	patches_?: Patch[]
+	inversePatches_?: Patch[]
+	canAutoFreeze_: boolean
+	drafts_: any[]
+	parent_?: ImmerScope
+	patchListener_?: PatchListener
+	immer_: Immer
+	unfinalizedDrafts_: number
+}
+
+let currentScope: ImmerScope | undefined
+
+export function getCurrentScope() {
+	return currentScope!
+}
+
+function createScope(
+	parent_: ImmerScope | undefined,
+	immer_: Immer
+): ImmerScope {
+	return {
+		drafts_: [],
+		parent_,
+		immer_,
+		// Whenever the modified draft contains a draft from another scope, we
+		// need to prevent auto-freezing so the unowned draft can be finalized.
+		canAutoFreeze_: true,
+		unfinalizedDrafts_: 0
+	}
+}
+
+export function usePatchesInScope(
+	scope: ImmerScope,
+	patchListener?: PatchListener
+) {
+	if (patchListener) {
+		getPlugin("Patches") // assert we have the plugin
+		scope.patches_ = []
+		scope.inversePatches_ = []
+		scope.patchListener_ = patchListener
+	}
+}
+
+export function revokeScope(scope: ImmerScope) {
+	leaveScope(scope)
+	scope.drafts_.forEach(revokeDraft)
+	// @ts-ignore
+	scope.drafts_ = null
+}
+
+export function leaveScope(scope: ImmerScope) {
+	if (scope === currentScope) {
+		currentScope = scope.parent_
+	}
+}
+
+export function enterScope(immer: Immer) {
+	return (currentScope = createScope(currentScope, immer))
+}
+
+function revokeDraft(draft: Drafted) {
+	const state: ImmerState = draft[DRAFT_STATE]
+	if (state.type_ === ArchType.Object || state.type_ === ArchType.Array)
+		state.revoke_()
+	else state.revoked_ = true
+}
Index: node_modules/immer/src/immer.ts
===================================================================
--- node_modules/immer/src/immer.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/immer.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+import {
+	IProduce,
+	IProduceWithPatches,
+	Immer,
+	Draft,
+	Immutable
+} from "./internal"
+
+export {
+	Draft,
+	WritableDraft,
+	Immutable,
+	Patch,
+	PatchListener,
+	Producer,
+	original,
+	current,
+	isDraft,
+	isDraftable,
+	NOTHING as nothing,
+	DRAFTABLE as immerable,
+	freeze,
+	Objectish,
+	StrictMode
+} from "./internal"
+
+const immer = new Immer()
+
+/**
+ * The `produce` function takes a value and a "recipe function" (whose
+ * return value often depends on the base state). The recipe function is
+ * free to mutate its first argument however it wants. All mutations are
+ * only ever applied to a __copy__ of the base state.
+ *
+ * Pass only a function to create a "curried producer" which relieves you
+ * from passing the recipe function every time.
+ *
+ * Only plain objects and arrays are made mutable. All other objects are
+ * considered uncopyable.
+ *
+ * Note: This function is __bound__ to its `Immer` instance.
+ *
+ * @param {any} base - the initial state
+ * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified
+ * @param {Function} patchListener - optional function that will be called with all the patches produced here
+ * @returns {any} a new state, or the initial state if nothing was modified
+ */
+export const produce: IProduce = immer.produce
+
+/**
+ * Like `produce`, but `produceWithPatches` always returns a tuple
+ * [nextState, patches, inversePatches] (instead of just the next state)
+ */
+export const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(
+	immer
+)
+
+/**
+ * Pass true to automatically freeze all copies created by Immer.
+ *
+ * Always freeze by default, even in production mode
+ */
+export const setAutoFreeze = immer.setAutoFreeze.bind(immer)
+
+/**
+ * Pass true to enable strict shallow copy.
+ *
+ * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.
+ */
+export const setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer)
+
+/**
+ * Apply an array of Immer patches to the first argument.
+ *
+ * This function is a producer, which means copy-on-write is in effect.
+ */
+export const applyPatches = immer.applyPatches.bind(immer)
+
+/**
+ * Create an Immer draft from the given base state, which may be a draft itself.
+ * The draft can be modified until you finalize it with the `finishDraft` function.
+ */
+export const createDraft = immer.createDraft.bind(immer)
+
+/**
+ * Finalize an Immer draft from a `createDraft` call, returning the base state
+ * (if no changes were made) or a modified copy. The draft must *not* be
+ * mutated afterwards.
+ *
+ * Pass a function as the 2nd argument to generate Immer patches based on the
+ * changes that were made.
+ */
+export const finishDraft = immer.finishDraft.bind(immer)
+
+/**
+ * This function is actually a no-op, but can be used to cast an immutable type
+ * to an draft type and make TypeScript happy
+ *
+ * @param value
+ */
+export function castDraft<T>(value: T): Draft<T> {
+	return value as any
+}
+
+/**
+ * This function is actually a no-op, but can be used to cast a mutable type
+ * to an immutable type and make TypeScript happy
+ * @param value
+ */
+export function castImmutable<T>(value: T): Immutable<T> {
+	return value as any
+}
+
+export {Immer}
+
+export {enablePatches} from "./plugins/patches"
+export {enableMapSet} from "./plugins/mapset"
Index: node_modules/immer/src/internal.ts
===================================================================
--- node_modules/immer/src/internal.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/internal.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+export * from "./utils/env"
+export * from "./utils/errors"
+export * from "./types/types-external"
+export * from "./types/types-internal"
+export * from "./utils/common"
+export * from "./utils/plugins"
+export * from "./core/scope"
+export * from "./core/finalize"
+export * from "./core/proxy"
+export * from "./core/immerClass"
+export * from "./core/current"
Index: node_modules/immer/src/plugins/mapset.ts
===================================================================
--- node_modules/immer/src/plugins/mapset.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/plugins/mapset.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,304 @@
+// types only!
+import {
+	ImmerState,
+	AnyMap,
+	AnySet,
+	MapState,
+	SetState,
+	DRAFT_STATE,
+	getCurrentScope,
+	latest,
+	isDraftable,
+	createProxy,
+	loadPlugin,
+	markChanged,
+	die,
+	ArchType,
+	each
+} from "../internal"
+
+export function enableMapSet() {
+	class DraftMap extends Map {
+		[DRAFT_STATE]: MapState
+
+		constructor(target: AnyMap, parent?: ImmerState) {
+			super()
+			this[DRAFT_STATE] = {
+				type_: ArchType.Map,
+				parent_: parent,
+				scope_: parent ? parent.scope_ : getCurrentScope()!,
+				modified_: false,
+				finalized_: false,
+				copy_: undefined,
+				assigned_: undefined,
+				base_: target,
+				draft_: this as any,
+				isManual_: false,
+				revoked_: false
+			}
+		}
+
+		get size(): number {
+			return latest(this[DRAFT_STATE]).size
+		}
+
+		has(key: any): boolean {
+			return latest(this[DRAFT_STATE]).has(key)
+		}
+
+		set(key: any, value: any) {
+			const state: MapState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			if (!latest(state).has(key) || latest(state).get(key) !== value) {
+				prepareMapCopy(state)
+				markChanged(state)
+				state.assigned_!.set(key, true)
+				state.copy_!.set(key, value)
+				state.assigned_!.set(key, true)
+			}
+			return this
+		}
+
+		delete(key: any): boolean {
+			if (!this.has(key)) {
+				return false
+			}
+
+			const state: MapState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			prepareMapCopy(state)
+			markChanged(state)
+			if (state.base_.has(key)) {
+				state.assigned_!.set(key, false)
+			} else {
+				state.assigned_!.delete(key)
+			}
+			state.copy_!.delete(key)
+			return true
+		}
+
+		clear() {
+			const state: MapState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			if (latest(state).size) {
+				prepareMapCopy(state)
+				markChanged(state)
+				state.assigned_ = new Map()
+				each(state.base_, key => {
+					state.assigned_!.set(key, false)
+				})
+				state.copy_!.clear()
+			}
+		}
+
+		forEach(cb: (value: any, key: any, self: any) => void, thisArg?: any) {
+			const state: MapState = this[DRAFT_STATE]
+			latest(state).forEach((_value: any, key: any, _map: any) => {
+				cb.call(thisArg, this.get(key), key, this)
+			})
+		}
+
+		get(key: any): any {
+			const state: MapState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			const value = latest(state).get(key)
+			if (state.finalized_ || !isDraftable(value)) {
+				return value
+			}
+			if (value !== state.base_.get(key)) {
+				return value // either already drafted or reassigned
+			}
+			// despite what it looks, this creates a draft only once, see above condition
+			const draft = createProxy(value, state)
+			prepareMapCopy(state)
+			state.copy_!.set(key, draft)
+			return draft
+		}
+
+		keys(): IterableIterator<any> {
+			return latest(this[DRAFT_STATE]).keys()
+		}
+
+		values(): IterableIterator<any> {
+			const iterator = this.keys()
+			return {
+				[Symbol.iterator]: () => this.values(),
+				next: () => {
+					const r = iterator.next()
+					/* istanbul ignore next */
+					if (r.done) return r
+					const value = this.get(r.value)
+					return {
+						done: false,
+						value
+					}
+				}
+			} as any
+		}
+
+		entries(): IterableIterator<[any, any]> {
+			const iterator = this.keys()
+			return {
+				[Symbol.iterator]: () => this.entries(),
+				next: () => {
+					const r = iterator.next()
+					/* istanbul ignore next */
+					if (r.done) return r
+					const value = this.get(r.value)
+					return {
+						done: false,
+						value: [r.value, value]
+					}
+				}
+			} as any
+		}
+
+		[Symbol.iterator]() {
+			return this.entries()
+		}
+	}
+
+	function proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {
+		// @ts-ignore
+		return new DraftMap(target, parent)
+	}
+
+	function prepareMapCopy(state: MapState) {
+		if (!state.copy_) {
+			state.assigned_ = new Map()
+			state.copy_ = new Map(state.base_)
+		}
+	}
+
+	class DraftSet extends Set {
+		[DRAFT_STATE]: SetState
+		constructor(target: AnySet, parent?: ImmerState) {
+			super()
+			this[DRAFT_STATE] = {
+				type_: ArchType.Set,
+				parent_: parent,
+				scope_: parent ? parent.scope_ : getCurrentScope()!,
+				modified_: false,
+				finalized_: false,
+				copy_: undefined,
+				base_: target,
+				draft_: this,
+				drafts_: new Map(),
+				revoked_: false,
+				isManual_: false
+			}
+		}
+
+		get size(): number {
+			return latest(this[DRAFT_STATE]).size
+		}
+
+		has(value: any): boolean {
+			const state: SetState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			// bit of trickery here, to be able to recognize both the value, and the draft of its value
+			if (!state.copy_) {
+				return state.base_.has(value)
+			}
+			if (state.copy_.has(value)) return true
+			if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))
+				return true
+			return false
+		}
+
+		add(value: any): any {
+			const state: SetState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			if (!this.has(value)) {
+				prepareSetCopy(state)
+				markChanged(state)
+				state.copy_!.add(value)
+			}
+			return this
+		}
+
+		delete(value: any): any {
+			if (!this.has(value)) {
+				return false
+			}
+
+			const state: SetState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			prepareSetCopy(state)
+			markChanged(state)
+			return (
+				state.copy_!.delete(value) ||
+				(state.drafts_.has(value)
+					? state.copy_!.delete(state.drafts_.get(value))
+					: /* istanbul ignore next */ false)
+			)
+		}
+
+		clear() {
+			const state: SetState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			if (latest(state).size) {
+				prepareSetCopy(state)
+				markChanged(state)
+				state.copy_!.clear()
+			}
+		}
+
+		values(): IterableIterator<any> {
+			const state: SetState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			prepareSetCopy(state)
+			return state.copy_!.values()
+		}
+
+		entries(): IterableIterator<[any, any]> {
+			const state: SetState = this[DRAFT_STATE]
+			assertUnrevoked(state)
+			prepareSetCopy(state)
+			return state.copy_!.entries()
+		}
+
+		keys(): IterableIterator<any> {
+			return this.values()
+		}
+
+		[Symbol.iterator]() {
+			return this.values()
+		}
+
+		forEach(cb: any, thisArg?: any) {
+			const iterator = this.values()
+			let result = iterator.next()
+			while (!result.done) {
+				cb.call(thisArg, result.value, result.value, this)
+				result = iterator.next()
+			}
+		}
+	}
+	function proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {
+		// @ts-ignore
+		return new DraftSet(target, parent)
+	}
+
+	function prepareSetCopy(state: SetState) {
+		if (!state.copy_) {
+			// create drafts for all entries to preserve insertion order
+			state.copy_ = new Set()
+			state.base_.forEach(value => {
+				if (isDraftable(value)) {
+					const draft = createProxy(value, state)
+					state.drafts_.set(value, draft)
+					state.copy_!.add(draft)
+				} else {
+					state.copy_!.add(value)
+				}
+			})
+		}
+	}
+
+	function assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {
+		if (state.revoked_) die(3, JSON.stringify(latest(state)))
+	}
+
+	loadPlugin("MapSet", {proxyMap_, proxySet_})
+}
Index: node_modules/immer/src/plugins/patches.ts
===================================================================
--- node_modules/immer/src/plugins/patches.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/plugins/patches.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,317 @@
+import {immerable} from "../immer"
+import {
+	ImmerState,
+	Patch,
+	SetState,
+	ProxyArrayState,
+	MapState,
+	ProxyObjectState,
+	PatchPath,
+	get,
+	each,
+	has,
+	getArchtype,
+	getPrototypeOf,
+	isSet,
+	isMap,
+	loadPlugin,
+	ArchType,
+	die,
+	isDraft,
+	isDraftable,
+	NOTHING,
+	errors
+} from "../internal"
+
+export function enablePatches() {
+	const errorOffset = 16
+	if (process.env.NODE_ENV !== "production") {
+		errors.push(
+			'Sets cannot have "replace" patches.',
+			function(op: string) {
+				return "Unsupported patch operation: " + op
+			},
+			function(path: string) {
+				return "Cannot apply patch, path doesn't resolve: " + path
+			},
+			"Patching reserved attributes like __proto__, prototype and constructor is not allowed"
+		)
+	}
+
+	const REPLACE = "replace"
+	const ADD = "add"
+	const REMOVE = "remove"
+
+	function generatePatches_(
+		state: ImmerState,
+		basePath: PatchPath,
+		patches: Patch[],
+		inversePatches: Patch[]
+	): void {
+		switch (state.type_) {
+			case ArchType.Object:
+			case ArchType.Map:
+				return generatePatchesFromAssigned(
+					state,
+					basePath,
+					patches,
+					inversePatches
+				)
+			case ArchType.Array:
+				return generateArrayPatches(state, basePath, patches, inversePatches)
+			case ArchType.Set:
+				return generateSetPatches(
+					(state as any) as SetState,
+					basePath,
+					patches,
+					inversePatches
+				)
+		}
+	}
+
+	function generateArrayPatches(
+		state: ProxyArrayState,
+		basePath: PatchPath,
+		patches: Patch[],
+		inversePatches: Patch[]
+	) {
+		let {base_, assigned_} = state
+		let copy_ = state.copy_!
+
+		// Reduce complexity by ensuring `base` is never longer.
+		if (copy_.length < base_.length) {
+			// @ts-ignore
+			;[base_, copy_] = [copy_, base_]
+			;[patches, inversePatches] = [inversePatches, patches]
+		}
+
+		// Process replaced indices.
+		for (let i = 0; i < base_.length; i++) {
+			if (assigned_[i] && copy_[i] !== base_[i]) {
+				const path = basePath.concat([i])
+				patches.push({
+					op: REPLACE,
+					path,
+					// Need to maybe clone it, as it can in fact be the original value
+					// due to the base/copy inversion at the start of this function
+					value: clonePatchValueIfNeeded(copy_[i])
+				})
+				inversePatches.push({
+					op: REPLACE,
+					path,
+					value: clonePatchValueIfNeeded(base_[i])
+				})
+			}
+		}
+
+		// Process added indices.
+		for (let i = base_.length; i < copy_.length; i++) {
+			const path = basePath.concat([i])
+			patches.push({
+				op: ADD,
+				path,
+				// Need to maybe clone it, as it can in fact be the original value
+				// due to the base/copy inversion at the start of this function
+				value: clonePatchValueIfNeeded(copy_[i])
+			})
+		}
+		for (let i = copy_.length - 1; base_.length <= i; --i) {
+			const path = basePath.concat([i])
+			inversePatches.push({
+				op: REMOVE,
+				path
+			})
+		}
+	}
+
+	// This is used for both Map objects and normal objects.
+	function generatePatchesFromAssigned(
+		state: MapState | ProxyObjectState,
+		basePath: PatchPath,
+		patches: Patch[],
+		inversePatches: Patch[]
+	) {
+		const {base_, copy_} = state
+		each(state.assigned_!, (key, assignedValue) => {
+			const origValue = get(base_, key)
+			const value = get(copy_!, key)
+			const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD
+			if (origValue === value && op === REPLACE) return
+			const path = basePath.concat(key as any)
+			patches.push(op === REMOVE ? {op, path} : {op, path, value})
+			inversePatches.push(
+				op === ADD
+					? {op: REMOVE, path}
+					: op === REMOVE
+					? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}
+					: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}
+			)
+		})
+	}
+
+	function generateSetPatches(
+		state: SetState,
+		basePath: PatchPath,
+		patches: Patch[],
+		inversePatches: Patch[]
+	) {
+		let {base_, copy_} = state
+
+		let i = 0
+		base_.forEach((value: any) => {
+			if (!copy_!.has(value)) {
+				const path = basePath.concat([i])
+				patches.push({
+					op: REMOVE,
+					path,
+					value
+				})
+				inversePatches.unshift({
+					op: ADD,
+					path,
+					value
+				})
+			}
+			i++
+		})
+		i = 0
+		copy_!.forEach((value: any) => {
+			if (!base_.has(value)) {
+				const path = basePath.concat([i])
+				patches.push({
+					op: ADD,
+					path,
+					value
+				})
+				inversePatches.unshift({
+					op: REMOVE,
+					path,
+					value
+				})
+			}
+			i++
+		})
+	}
+
+	function generateReplacementPatches_(
+		baseValue: any,
+		replacement: any,
+		patches: Patch[],
+		inversePatches: Patch[]
+	): void {
+		patches.push({
+			op: REPLACE,
+			path: [],
+			value: replacement === NOTHING ? undefined : replacement
+		})
+		inversePatches.push({
+			op: REPLACE,
+			path: [],
+			value: baseValue
+		})
+	}
+
+	function applyPatches_<T>(draft: T, patches: readonly Patch[]): T {
+		patches.forEach(patch => {
+			const {path, op} = patch
+
+			let base: any = draft
+			for (let i = 0; i < path.length - 1; i++) {
+				const parentType = getArchtype(base)
+				let p = path[i]
+				if (typeof p !== "string" && typeof p !== "number") {
+					p = "" + p
+				}
+
+				// See #738, avoid prototype pollution
+				if (
+					(parentType === ArchType.Object || parentType === ArchType.Array) &&
+					(p === "__proto__" || p === "constructor")
+				)
+					die(errorOffset + 3)
+				if (typeof base === "function" && p === "prototype")
+					die(errorOffset + 3)
+				base = get(base, p)
+				if (typeof base !== "object") die(errorOffset + 2, path.join("/"))
+			}
+
+			const type = getArchtype(base)
+			const value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411
+			const key = path[path.length - 1]
+			switch (op) {
+				case REPLACE:
+					switch (type) {
+						case ArchType.Map:
+							return base.set(key, value)
+						/* istanbul ignore next */
+						case ArchType.Set:
+							die(errorOffset)
+						default:
+							// if value is an object, then it's assigned by reference
+							// in the following add or remove ops, the value field inside the patch will also be modifyed
+							// so we use value from the cloned patch
+							// @ts-ignore
+							return (base[key] = value)
+					}
+				case ADD:
+					switch (type) {
+						case ArchType.Array:
+							return key === "-"
+								? base.push(value)
+								: base.splice(key as any, 0, value)
+						case ArchType.Map:
+							return base.set(key, value)
+						case ArchType.Set:
+							return base.add(value)
+						default:
+							return (base[key] = value)
+					}
+				case REMOVE:
+					switch (type) {
+						case ArchType.Array:
+							return base.splice(key as any, 1)
+						case ArchType.Map:
+							return base.delete(key)
+						case ArchType.Set:
+							return base.delete(patch.value)
+						default:
+							return delete base[key]
+					}
+				default:
+					die(errorOffset + 1, op)
+			}
+		})
+
+		return draft
+	}
+
+	// optimize: this is quite a performance hit, can we detect intelligently when it is needed?
+	// E.g. auto-draft when new objects from outside are assigned and modified?
+	// (See failing test when deepClone just returns obj)
+	function deepClonePatchValue<T>(obj: T): T
+	function deepClonePatchValue(obj: any) {
+		if (!isDraftable(obj)) return obj
+		if (Array.isArray(obj)) return obj.map(deepClonePatchValue)
+		if (isMap(obj))
+			return new Map(
+				Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])
+			)
+		if (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))
+		const cloned = Object.create(getPrototypeOf(obj))
+		for (const key in obj) cloned[key] = deepClonePatchValue(obj[key])
+		if (has(obj, immerable)) cloned[immerable] = obj[immerable]
+		return cloned
+	}
+
+	function clonePatchValueIfNeeded<T>(obj: T): T {
+		if (isDraft(obj)) {
+			return deepClonePatchValue(obj)
+		} else return obj
+	}
+
+	loadPlugin("Patches", {
+		applyPatches_,
+		generatePatches_,
+		generateReplacementPatches_
+	})
+}
Index: node_modules/immer/src/types/globals.d.ts
===================================================================
--- node_modules/immer/src/types/globals.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/types/globals.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+declare const __DEV__: boolean
Index: node_modules/immer/src/types/index.js.flow
===================================================================
--- node_modules/immer/src/types/index.js.flow	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/types/index.js.flow	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,111 @@
+// @flow
+
+export interface Patch {
+	op: "replace" | "remove" | "add";
+	path: (string | number)[];
+	value?: any;
+}
+
+export type PatchListener = (patches: Patch[], inversePatches: Patch[]) => void
+
+type Base = {...} | Array<any>
+interface IProduce {
+	/**
+	 * Immer takes a state, and runs a function against it.
+	 * That function can freely mutate the state, as it will create copies-on-write.
+	 * This means that the original state will stay unchanged, and once the function finishes, the modified state is returned.
+	 *
+	 * If the first argument is a function, this is interpreted as the recipe, and will create a curried function that will execute the recipe
+	 * any time it is called with the current state.
+	 *
+	 * @param currentState - the state to start with
+	 * @param recipe - function that receives a proxy of the current state as first argument and which can be freely modified
+	 * @param initialState - if a curried function is created and this argument was given, it will be used as fallback if the curried function is called with a state of undefined
+	 * @returns The next state: a new state, or the current state if nothing was modified
+	 */
+	<S: Base>(
+		currentState: S,
+		recipe: (draftState: S) => S | void,
+		patchListener?: PatchListener
+	): S;
+	// curried invocations with initial state
+	<S: Base, A = void, B = void, C = void>(
+		recipe: (draftState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S | void,
+		initialState: S
+	): (currentState: S | void, a: A, b: B, c: C, ...extraArgs: any[]) => S;
+	// curried invocations without initial state
+	<S: Base, A = void, B = void, C = void>(
+		recipe: (draftState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S | void
+	): (currentState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S;
+}
+
+interface IProduceWithPatches {
+        /**
+         * Like `produce`, but instead of just returning the new state,
+         * a tuple is returned with [nextState, patches, inversePatches]
+         *
+         * Like produce, this function supports currying
+         */
+	<S: Base>(
+		currentState: S,
+		recipe: (draftState: S) => S | void
+	): [S, Patch[], Patch[]];
+	// curried invocations with initial state
+	<S: Base, A = void, B = void, C = void>(
+		recipe: (draftState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S | void,
+		initialState: S
+	): (currentState: S | void, a: A, b: B, c: C, ...extraArgs: any[]) => [S, Patch[], Patch[]];
+	// curried invocations without initial state
+	<S: Base, A = void, B = void, C = void>(
+		recipe: (draftState: S, a: A, b: B, c: C, ...extraArgs: any[]) => S | void
+	): (currentState: S, a: A, b: B, c: C, ...extraArgs: any[]) => [S, Patch[], Patch[]];
+}
+
+declare export var produce: IProduce
+
+declare export var produceWithPatches: IProduceWithPatches
+
+declare export var nothing: typeof undefined
+
+declare export var immerable: Symbol
+
+/**
+ * Automatically freezes any state trees generated by immer.
+ * This protects against accidental modifications of the state tree outside of an immer function.
+ * This comes with a performance impact, so it is recommended to disable this option in production.
+ * By default it is turned on during local development, and turned off in production.
+ */
+declare export function setAutoFreeze(autoFreeze: boolean): void
+
+/**
+ * Pass false to disable strict shallow copy.
+ *
+ * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.
+ */
+declare export function setUseStrictShallowCopy(useStrictShallowCopy: boolean): void
+
+declare export function applyPatches<S>(state: S, patches: Patch[]): S
+
+declare export function original<S>(value: S): S
+
+declare export function current<S>(value: S): S
+
+declare export function isDraft(value: any): boolean
+
+/**
+ * Creates a mutable draft from an (immutable) object / array.
+ * The draft can be modified until `finishDraft` is called
+ */
+declare export function createDraft<T>(base: T): T
+
+/**
+ * Given a draft that was created using `createDraft`,
+ * finalizes the draft into a new immutable object.
+ * Optionally a patch-listener can be provided to gather the patches that are needed to construct the object.
+ */
+declare export function finishDraft<T>(base: T, listener?: PatchListener): T
+
+declare export function enableMapSet(): void
+declare export function enablePatches(): void
+
+declare export function freeze<T>(obj: T, freeze?: boolean): T
Index: node_modules/immer/src/types/types-external.ts
===================================================================
--- node_modules/immer/src/types/types-external.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/types/types-external.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,239 @@
+import {NOTHING} from "../internal"
+
+type AnyFunc = (...args: any[]) => any
+
+type PrimitiveType = number | string | boolean
+
+/** Object types that should never be mapped */
+type AtomicObject = Function | Promise<any> | Date | RegExp
+
+/**
+ * If the lib "ES2015.Collection" is not included in tsconfig.json,
+ * types like ReadonlyArray, WeakMap etc. fall back to `any` (specified nowhere)
+ * or `{}` (from the node types), in both cases entering an infinite recursion in
+ * pattern matching type mappings
+ * This type can be used to cast these types to `void` in these cases.
+ */
+export type IfAvailable<T, Fallback = void> =
+	// fallback if any
+	true | false extends (T extends never
+	? true
+	: false)
+		? Fallback // fallback if empty type
+		: keyof T extends never
+		? Fallback // original type
+		: T
+
+/**
+ * These should also never be mapped but must be tested after regular Map and
+ * Set
+ */
+type WeakReferences = IfAvailable<WeakMap<any, any>> | IfAvailable<WeakSet<any>>
+
+export type WritableDraft<T> = {-readonly [K in keyof T]: Draft<T[K]>}
+
+/** Convert a readonly type into a mutable type, if possible */
+export type Draft<T> = T extends PrimitiveType
+	? T
+	: T extends AtomicObject
+	? T
+	: T extends ReadonlyMap<infer K, infer V> // Map extends ReadonlyMap
+	? Map<Draft<K>, Draft<V>>
+	: T extends ReadonlySet<infer V> // Set extends ReadonlySet
+	? Set<Draft<V>>
+	: T extends WeakReferences
+	? T
+	: T extends object
+	? WritableDraft<T>
+	: T
+
+/** Convert a mutable type into a readonly type */
+export type Immutable<T> = T extends PrimitiveType
+	? T
+	: T extends AtomicObject
+	? T
+	: T extends ReadonlyMap<infer K, infer V> // Map extends ReadonlyMap
+	? ReadonlyMap<Immutable<K>, Immutable<V>>
+	: T extends ReadonlySet<infer V> // Set extends ReadonlySet
+	? ReadonlySet<Immutable<V>>
+	: T extends WeakReferences
+	? T
+	: T extends object
+	? {readonly [K in keyof T]: Immutable<T[K]>}
+	: T
+
+export interface Patch {
+	op: "replace" | "remove" | "add"
+	path: (string | number)[]
+	value?: any
+}
+
+export type PatchListener = (patches: Patch[], inversePatches: Patch[]) => void
+
+/** Converts `nothing` into `undefined` */
+type FromNothing<T> = T extends typeof NOTHING ? undefined : T
+
+/** The inferred return type of `produce` */
+export type Produced<Base, Return> = Return extends void
+	? Base
+	: FromNothing<Return>
+
+/**
+ * Utility types
+ */
+type PatchesTuple<T> = readonly [T, Patch[], Patch[]]
+
+type ValidRecipeReturnType<State> =
+	| State
+	| void
+	| undefined
+	| (State extends undefined ? typeof NOTHING : never)
+
+type ReturnTypeWithPatchesIfNeeded<
+	State,
+	UsePatches extends boolean
+> = UsePatches extends true ? PatchesTuple<State> : State
+
+/**
+ * Core Producer inference
+ */
+type InferRecipeFromCurried<Curried> = Curried extends (
+	base: infer State,
+	...rest: infer Args
+) => any // extra assertion to make sure this is a proper curried function (state, args) => state
+	? ReturnType<Curried> extends State
+		? (
+				draft: Draft<State>,
+				...rest: Args
+		  ) => ValidRecipeReturnType<Draft<State>>
+		: never
+	: never
+
+type InferInitialStateFromCurried<Curried> = Curried extends (
+	base: infer State,
+	...rest: any[]
+) => any // extra assertion to make sure this is a proper curried function (state, args) => state
+	? State
+	: never
+
+type InferCurriedFromRecipe<
+	Recipe,
+	UsePatches extends boolean
+> = Recipe extends (draft: infer DraftState, ...args: infer RestArgs) => any // verify return type
+	? ReturnType<Recipe> extends ValidRecipeReturnType<DraftState>
+		? (
+				base: Immutable<DraftState>,
+				...args: RestArgs
+		  ) => ReturnTypeWithPatchesIfNeeded<DraftState, UsePatches> // N.b. we return mutable draftstate, in case the recipe's first arg isn't read only, and that isn't expected as output either
+		: never // incorrect return type
+	: never // not a function
+
+type InferCurriedFromInitialStateAndRecipe<
+	State,
+	Recipe,
+	UsePatches extends boolean
+> = Recipe extends (
+	draft: Draft<State>,
+	...rest: infer RestArgs
+) => ValidRecipeReturnType<State>
+	? (
+			base?: State | undefined,
+			...args: RestArgs
+	  ) => ReturnTypeWithPatchesIfNeeded<State, UsePatches>
+	: never // recipe doesn't match initial state
+
+/**
+ * The `produce` function takes a value and a "recipe function" (whose
+ * return value often depends on the base state). The recipe function is
+ * free to mutate its first argument however it wants. All mutations are
+ * only ever applied to a __copy__ of the base state.
+ *
+ * Pass only a function to create a "curried producer" which relieves you
+ * from passing the recipe function every time.
+ *
+ * Only plain objects and arrays are made mutable. All other objects are
+ * considered uncopyable.
+ *
+ * Note: This function is __bound__ to its `Immer` instance.
+ *
+ * @param {any} base - the initial state
+ * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified
+ * @param {Function} patchListener - optional function that will be called with all the patches produced here
+ * @returns {any} a new state, or the initial state if nothing was modified
+ */
+export interface IProduce {
+	/** Curried producer that infers the recipe from the curried output function (e.g. when passing to setState) */
+	<Curried>(
+		recipe: InferRecipeFromCurried<Curried>,
+		initialState?: InferInitialStateFromCurried<Curried>
+	): Curried
+
+	/** Curried producer that infers curried from the recipe  */
+	<Recipe extends AnyFunc>(recipe: Recipe): InferCurriedFromRecipe<
+		Recipe,
+		false
+	>
+
+	/** Curried producer that infers curried from the State generic, which is explicitly passed in.  */
+	<State>(
+		recipe: (
+			state: Draft<State>,
+			initialState: State
+		) => ValidRecipeReturnType<State>
+	): (state?: State) => State
+	<State, Args extends any[]>(
+		recipe: (
+			state: Draft<State>,
+			...args: Args
+		) => ValidRecipeReturnType<State>,
+		initialState: State
+	): (state?: State, ...args: Args) => State
+	<State>(recipe: (state: Draft<State>) => ValidRecipeReturnType<State>): (
+		state: State
+	) => State
+	<State, Args extends any[]>(
+		recipe: (state: Draft<State>, ...args: Args) => ValidRecipeReturnType<State>
+	): (state: State, ...args: Args) => State
+
+	/** Curried producer with initial state, infers recipe from initial state */
+	<State, Recipe extends Function>(
+		recipe: Recipe,
+		initialState: State
+	): InferCurriedFromInitialStateAndRecipe<State, Recipe, false>
+
+	/** Normal producer */
+	<Base, D = Draft<Base>>( // By using a default inferred D, rather than Draft<Base> in the recipe, we can override it.
+		base: Base,
+		recipe: (draft: D) => ValidRecipeReturnType<D>,
+		listener?: PatchListener
+	): Base
+}
+
+/**
+ * Like `produce`, but instead of just returning the new state,
+ * a tuple is returned with [nextState, patches, inversePatches]
+ *
+ * Like produce, this function supports currying
+ */
+export interface IProduceWithPatches {
+	// Types copied from IProduce, wrapped with PatchesTuple
+	<Recipe extends AnyFunc>(recipe: Recipe): InferCurriedFromRecipe<Recipe, true>
+	<State, Recipe extends Function>(
+		recipe: Recipe,
+		initialState: State
+	): InferCurriedFromInitialStateAndRecipe<State, Recipe, true>
+	<Base, D = Draft<Base>>(
+		base: Base,
+		recipe: (draft: D) => ValidRecipeReturnType<D>,
+		listener?: PatchListener
+	): PatchesTuple<Base>
+}
+
+/**
+ * The type for `recipe function`
+ */
+export type Producer<T> = (draft: Draft<T>) => ValidRecipeReturnType<Draft<T>>
+
+// Fixes #507: bili doesn't export the types of this file if there is no actual source in it..
+// hopefully it get's tree-shaken away for everyone :)
+export function never_used() {}
Index: node_modules/immer/src/types/types-internal.ts
===================================================================
--- node_modules/immer/src/types/types-internal.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/types/types-internal.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+import {
+	SetState,
+	ImmerScope,
+	ProxyObjectState,
+	ProxyArrayState,
+	MapState,
+	DRAFT_STATE
+} from "../internal"
+
+export type Objectish = AnyObject | AnyArray | AnyMap | AnySet
+export type ObjectishNoSet = AnyObject | AnyArray | AnyMap
+
+export type AnyObject = {[key: string]: any}
+export type AnyArray = Array<any>
+export type AnySet = Set<any>
+export type AnyMap = Map<any, any>
+
+export const enum ArchType {
+	Object,
+	Array,
+	Map,
+	Set
+}
+
+export interface ImmerBaseState {
+	parent_?: ImmerState
+	scope_: ImmerScope
+	modified_: boolean
+	finalized_: boolean
+	isManual_: boolean
+}
+
+export type ImmerState =
+	| ProxyObjectState
+	| ProxyArrayState
+	| MapState
+	| SetState
+
+// The _internal_ type used for drafts (not to be confused with Draft, which is public facing)
+export type Drafted<Base = any, T extends ImmerState = ImmerState> = {
+	[DRAFT_STATE]: T
+} & Base
Index: node_modules/immer/src/utils/common.ts
===================================================================
--- node_modules/immer/src/utils/common.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/utils/common.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,217 @@
+import {
+	DRAFT_STATE,
+	DRAFTABLE,
+	Objectish,
+	Drafted,
+	AnyObject,
+	AnyMap,
+	AnySet,
+	ImmerState,
+	ArchType,
+	die,
+	StrictMode
+} from "../internal"
+
+export const getPrototypeOf = Object.getPrototypeOf
+
+/** Returns true if the given value is an Immer draft */
+/*#__PURE__*/
+export function isDraft(value: any): boolean {
+	return !!value && !!value[DRAFT_STATE]
+}
+
+/** Returns true if the given value can be drafted by Immer */
+/*#__PURE__*/
+export function isDraftable(value: any): boolean {
+	if (!value) return false
+	return (
+		isPlainObject(value) ||
+		Array.isArray(value) ||
+		!!value[DRAFTABLE] ||
+		!!value.constructor?.[DRAFTABLE] ||
+		isMap(value) ||
+		isSet(value)
+	)
+}
+
+const objectCtorString = Object.prototype.constructor.toString()
+/*#__PURE__*/
+export function isPlainObject(value: any): boolean {
+	if (!value || typeof value !== "object") return false
+	const proto = getPrototypeOf(value)
+	if (proto === null) {
+		return true
+	}
+	const Ctor =
+		Object.hasOwnProperty.call(proto, "constructor") && proto.constructor
+
+	if (Ctor === Object) return true
+
+	return (
+		typeof Ctor == "function" &&
+		Function.toString.call(Ctor) === objectCtorString
+	)
+}
+
+/** Get the underlying object that is represented by the given draft */
+/*#__PURE__*/
+export function original<T>(value: T): T | undefined
+export function original(value: Drafted<any>): any {
+	if (!isDraft(value)) die(15, value)
+	return value[DRAFT_STATE].base_
+}
+
+/**
+ * Each iterates a map, set or array.
+ * Or, if any other kind of object, all of its own properties.
+ * Regardless whether they are enumerable or symbols
+ */
+export function each<T extends Objectish>(
+	obj: T,
+	iter: (key: string | number, value: any, source: T) => void
+): void
+export function each(obj: any, iter: any) {
+	if (getArchtype(obj) === ArchType.Object) {
+		Reflect.ownKeys(obj).forEach(key => {
+			iter(key, obj[key], obj)
+		})
+	} else {
+		obj.forEach((entry: any, index: any) => iter(index, entry, obj))
+	}
+}
+
+/*#__PURE__*/
+export function getArchtype(thing: any): ArchType {
+	const state: undefined | ImmerState = thing[DRAFT_STATE]
+	return state
+		? state.type_
+		: Array.isArray(thing)
+		? ArchType.Array
+		: isMap(thing)
+		? ArchType.Map
+		: isSet(thing)
+		? ArchType.Set
+		: ArchType.Object
+}
+
+/*#__PURE__*/
+export function has(thing: any, prop: PropertyKey): boolean {
+	return getArchtype(thing) === ArchType.Map
+		? thing.has(prop)
+		: Object.prototype.hasOwnProperty.call(thing, prop)
+}
+
+/*#__PURE__*/
+export function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {
+	// @ts-ignore
+	return getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]
+}
+
+/*#__PURE__*/
+export function set(thing: any, propOrOldValue: PropertyKey, value: any) {
+	const t = getArchtype(thing)
+	if (t === ArchType.Map) thing.set(propOrOldValue, value)
+	else if (t === ArchType.Set) {
+		thing.add(value)
+	} else thing[propOrOldValue] = value
+}
+
+/*#__PURE__*/
+export function is(x: any, y: any): boolean {
+	// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
+	if (x === y) {
+		return x !== 0 || 1 / x === 1 / y
+	} else {
+		return x !== x && y !== y
+	}
+}
+
+/*#__PURE__*/
+export function isMap(target: any): target is AnyMap {
+	return target instanceof Map
+}
+
+/*#__PURE__*/
+export function isSet(target: any): target is AnySet {
+	return target instanceof Set
+}
+/*#__PURE__*/
+export function latest(state: ImmerState): any {
+	return state.copy_ || state.base_
+}
+
+/*#__PURE__*/
+export function shallowCopy(base: any, strict: StrictMode) {
+	if (isMap(base)) {
+		return new Map(base)
+	}
+	if (isSet(base)) {
+		return new Set(base)
+	}
+	if (Array.isArray(base)) return Array.prototype.slice.call(base)
+
+	const isPlain = isPlainObject(base)
+
+	if (strict === true || (strict === "class_only" && !isPlain)) {
+		// Perform a strict copy
+		const descriptors = Object.getOwnPropertyDescriptors(base)
+		delete descriptors[DRAFT_STATE as any]
+		let keys = Reflect.ownKeys(descriptors)
+		for (let i = 0; i < keys.length; i++) {
+			const key: any = keys[i]
+			const desc = descriptors[key]
+			if (desc.writable === false) {
+				desc.writable = true
+				desc.configurable = true
+			}
+			// like object.assign, we will read any _own_, get/set accessors. This helps in dealing
+			// with libraries that trap values, like mobx or vue
+			// unlike object.assign, non-enumerables will be copied as well
+			if (desc.get || desc.set)
+				descriptors[key] = {
+					configurable: true,
+					writable: true, // could live with !!desc.set as well here...
+					enumerable: desc.enumerable,
+					value: base[key]
+				}
+		}
+		return Object.create(getPrototypeOf(base), descriptors)
+	} else {
+		// perform a sloppy copy
+		const proto = getPrototypeOf(base)
+		if (proto !== null && isPlain) {
+			return {...base} // assumption: better inner class optimization than the assign below
+		}
+		const obj = Object.create(proto)
+		return Object.assign(obj, base)
+	}
+}
+
+/**
+ * Freezes draftable objects. Returns the original object.
+ * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.
+ *
+ * @param obj
+ * @param deep
+ */
+export function freeze<T>(obj: T, deep?: boolean): T
+export function freeze<T>(obj: any, deep: boolean = false): T {
+	if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj
+	if (getArchtype(obj) > 1 /* Map or Set */) {
+		obj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any
+	}
+	Object.freeze(obj)
+	if (deep)
+		// See #590, don't recurse into non-enumerable / Symbol properties when freezing
+		// So use Object.entries (only string-like, enumerables) instead of each()
+		Object.entries(obj).forEach(([key, value]) => freeze(value, true))
+	return obj
+}
+
+function dontMutateFrozenCollections() {
+	die(2)
+}
+
+export function isFrozen(obj: any): boolean {
+	return Object.isFrozen(obj)
+}
Index: node_modules/immer/src/utils/env.ts
===================================================================
--- node_modules/immer/src/utils/env.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/utils/env.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+// Should be no imports here!
+
+/**
+ * The sentinel value returned by producers to replace the draft with undefined.
+ */
+export const NOTHING: unique symbol = Symbol.for("immer-nothing")
+
+/**
+ * To let Immer treat your class instances as plain immutable objects
+ * (albeit with a custom prototype), you must define either an instance property
+ * or a static property on each of your custom classes.
+ *
+ * Otherwise, your class instance will never be drafted, which means it won't be
+ * safe to mutate in a produce callback.
+ */
+export const DRAFTABLE: unique symbol = Symbol.for("immer-draftable")
+
+export const DRAFT_STATE: unique symbol = Symbol.for("immer-state")
Index: node_modules/immer/src/utils/errors.ts
===================================================================
--- node_modules/immer/src/utils/errors.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/utils/errors.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+export const errors =
+	process.env.NODE_ENV !== "production"
+		? [
+				// All error codes, starting by 0:
+				function(plugin: string) {
+					return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \`enable${plugin}()\` when initializing your application.`
+				},
+				function(thing: string) {
+					return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`
+				},
+				"This object has been frozen and should not be mutated",
+				function(data: any) {
+					return (
+						"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? " +
+						data
+					)
+				},
+				"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.",
+				"Immer forbids circular references",
+				"The first or second argument to `produce` must be a function",
+				"The third argument to `produce` must be a function or undefined",
+				"First argument to `createDraft` must be a plain object, an array, or an immerable object",
+				"First argument to `finishDraft` must be a draft returned by `createDraft`",
+				function(thing: string) {
+					return `'current' expects a draft, got: ${thing}`
+				},
+				"Object.defineProperty() cannot be used on an Immer draft",
+				"Object.setPrototypeOf() cannot be used on an Immer draft",
+				"Immer only supports deleting array indices",
+				"Immer only supports setting array indices and the 'length' property",
+				function(thing: string) {
+					return `'original' expects a draft, got: ${thing}`
+				}
+				// Note: if more errors are added, the errorOffset in Patches.ts should be increased
+				// See Patches.ts for additional errors
+		  ]
+		: []
+
+export function die(error: number, ...args: any[]): never {
+	if (process.env.NODE_ENV !== "production") {
+		const e = errors[error]
+		const msg = typeof e === "function" ? e.apply(null, args as any) : e
+		throw new Error(`[Immer] ${msg}`)
+	}
+	throw new Error(
+		`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`
+	)
+}
Index: node_modules/immer/src/utils/plugins.ts
===================================================================
--- node_modules/immer/src/utils/plugins.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/immer/src/utils/plugins.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,76 @@
+import {
+	ImmerState,
+	Patch,
+	Drafted,
+	ImmerBaseState,
+	AnyMap,
+	AnySet,
+	ArchType,
+	die
+} from "../internal"
+
+/** Plugin utilities */
+const plugins: {
+	Patches?: {
+		generatePatches_(
+			state: ImmerState,
+			basePath: PatchPath,
+			patches: Patch[],
+			inversePatches: Patch[]
+		): void
+		generateReplacementPatches_(
+			base: any,
+			replacement: any,
+			patches: Patch[],
+			inversePatches: Patch[]
+		): void
+		applyPatches_<T>(draft: T, patches: readonly Patch[]): T
+	}
+	MapSet?: {
+		proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T
+		proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T
+	}
+} = {}
+
+type Plugins = typeof plugins
+
+export function getPlugin<K extends keyof Plugins>(
+	pluginKey: K
+): Exclude<Plugins[K], undefined> {
+	const plugin = plugins[pluginKey]
+	if (!plugin) {
+		die(0, pluginKey)
+	}
+	// @ts-ignore
+	return plugin
+}
+
+export function loadPlugin<K extends keyof Plugins>(
+	pluginKey: K,
+	implementation: Plugins[K]
+): void {
+	if (!plugins[pluginKey]) plugins[pluginKey] = implementation
+}
+/** Map / Set plugin */
+
+export interface MapState extends ImmerBaseState {
+	type_: ArchType.Map
+	copy_: AnyMap | undefined
+	assigned_: Map<any, boolean> | undefined
+	base_: AnyMap
+	revoked_: boolean
+	draft_: Drafted<AnyMap, MapState>
+}
+
+export interface SetState extends ImmerBaseState {
+	type_: ArchType.Set
+	copy_: AnySet | undefined
+	base_: AnySet
+	drafts_: Map<any, Drafted> // maps the original value to the draft value in the new set
+	revoked_: boolean
+	draft_: Drafted<AnySet, SetState>
+}
+
+/** Patches plugin */
+
+export type PatchPath = (string | number)[]
Index: node_modules/internmap/LICENSE
===================================================================
--- node_modules/internmap/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/internmap/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/internmap/README.md
===================================================================
--- node_modules/internmap/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/internmap/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,94 @@
+# InternMap
+
+*For live examples, see https://observablehq.com/@mbostock/internmap.*
+
+If you use dates as keys in a JavaScript Map (or as values in a Set), you may be surprised that it won’t work as you expect.
+
+```js
+dateMap = new Map([
+  [new Date(Date.UTC(2001, 0, 1)), "red"],
+  [new Date(Date.UTC(2001, 0, 1)), "green"] // distinct key!
+])
+```
+```js
+dateMap.get(new Date(Date.UTC(2001, 0, 1))) // undefined!
+```
+
+That’s because Map uses the [SameValueZero algorithm](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness) to determine key equality: for two dates to be considered the same, they must be the same instance (the same object), not just the same moment in time. This is true of the equality operator, too.
+
+```js
+{
+  const date1 = new Date(Date.UTC(2001, 0, 1));
+  const date2 = new Date(Date.UTC(2001, 0, 1));
+  return date1 === date2; // false!
+}
+```
+
+You can avoid this issue by using primitive values such as numbers or strings as keys instead. But it’s tedious and easy to forget to coerce types. (You’ll also need to do the inverse type conversion when pulling keys out of the map, say when using *map*.keys or *map*.entries, or when iterating over the map. The inverse above is new Date(*key*). Also, if you forget to coerce your key to a number when using *map*.get, it’s easy not to notice because the map won’t throw an error; it’ll simply return undefined.)
+
+```js
+numberMap = new Map([[978307200000, "red"]])
+numberMap.get(978307200000) // "red"
+numberMap.get(new Date(978307200000)) // undefined; oops!
+```
+
+Wouldn’t it be easier if Map and Set “just worked” with dates? Or with any object that supports [*object*.valueOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf)?
+
+Enter **InternMap**. [*Interning*](https://en.wikipedia.org/wiki/String_interning) refers to storing only one copy of each distinct key. An InternMap considers two Date instances representing the same moment to be equal, storing only the first instance.
+
+```js
+map = new InternMap([
+  [new Date(Date.UTC(2001, 0, 1)), "red"],
+  [new Date(Date.UTC(2001, 0, 1)), "green"] // replaces previous entry
+])
+```
+```js
+map.get(new Date(Date.UTC(2001, 0, 1))) // "green"
+```
+```js
+[...map.keys()] // [2001-01-01]
+```
+
+InternMap extends Map, so you can simply drop it in whenever you’d prefer this behavior to the SameValueZero algorithm. Because InternMap calls *object*.valueOf only for non-primitive keys, note that you can pass primitive keys, too.
+
+```js
+map.get(978307200000) // "green"; this works too!
+```
+
+InternMap keeps only the first distinct key according to its associated primitive value. Avoid adding keys to the map with inconsistent types.
+
+```js
+map2 = new InternMap([
+  [978307200000, "red"], // danger!
+  [new Date(Date.UTC(2001, 0, 1)), "blue"]
+])
+```
+```js
+map2.get(new Date(Date.UTC(2001, 0, 1))) // "blue"; this still works…
+```
+```js
+[...map2.keys()] // [978307200000]; but the key isn’t a Date
+```
+
+While InternMap uses *object*.valueOf by default to compute the intern key, you can pass a key function as a second argument to the constructor to change the behavior. For example, if you use JSON.stringify, you can use arrays as compound keys (assuming that the array elements can be serialized to JSON).
+
+```js
+map3 = new InternMap([
+  [["foo", "bar"], 1],
+  [["foo", "baz"], 2],
+  [["goo", "bee"], 3]
+], JSON.stringify)
+```
+```js
+map3.get(["foo", "baz"]) // 2
+```
+
+There’s an **InternSet** class, too.
+
+```js
+set = new InternSet([
+  new Date(Date.UTC(2000, 0, 1)),
+  new Date(Date.UTC(2001, 0, 1)),
+  new Date(Date.UTC(2001, 0, 1))
+])
+```
Index: node_modules/internmap/dist/internmap.js
===================================================================
--- node_modules/internmap/dist/internmap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/internmap/dist/internmap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,75 @@
+// https://github.com/mbostock/internmap/ v2.0.3 Copyright 2021 Mike Bostock
+(function (global, factory) {
+typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+typeof define === 'function' && define.amd ? define(['exports'], factory) :
+(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.internmap = {}));
+}(this, (function (exports) { 'use strict';
+
+class InternMap extends Map {
+  constructor(entries, key = keyof) {
+    super();
+    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
+    if (entries != null) for (const [key, value] of entries) this.set(key, value);
+  }
+  get(key) {
+    return super.get(intern_get(this, key));
+  }
+  has(key) {
+    return super.has(intern_get(this, key));
+  }
+  set(key, value) {
+    return super.set(intern_set(this, key), value);
+  }
+  delete(key) {
+    return super.delete(intern_delete(this, key));
+  }
+}
+
+class InternSet extends Set {
+  constructor(values, key = keyof) {
+    super();
+    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
+    if (values != null) for (const value of values) this.add(value);
+  }
+  has(value) {
+    return super.has(intern_get(this, value));
+  }
+  add(value) {
+    return super.add(intern_set(this, value));
+  }
+  delete(value) {
+    return super.delete(intern_delete(this, value));
+  }
+}
+
+function intern_get({_intern, _key}, value) {
+  const key = _key(value);
+  return _intern.has(key) ? _intern.get(key) : value;
+}
+
+function intern_set({_intern, _key}, value) {
+  const key = _key(value);
+  if (_intern.has(key)) return _intern.get(key);
+  _intern.set(key, value);
+  return value;
+}
+
+function intern_delete({_intern, _key}, value) {
+  const key = _key(value);
+  if (_intern.has(key)) {
+    value = _intern.get(key);
+    _intern.delete(key);
+  }
+  return value;
+}
+
+function keyof(value) {
+  return value !== null && typeof value === "object" ? value.valueOf() : value;
+}
+
+exports.InternMap = InternMap;
+exports.InternSet = InternSet;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
Index: node_modules/internmap/dist/internmap.min.js
===================================================================
--- node_modules/internmap/dist/internmap.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/internmap/dist/internmap.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+// https://github.com/mbostock/internmap/ v2.0.3 Copyright 2021 Mike Bostock
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).internmap={})}(this,(function(e){"use strict";class InternMap extends Map{constructor(e,t=r){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const[t,n]of e)this.set(t,n)}get(e){return super.get(t(this,e))}has(e){return super.has(t(this,e))}set(e,t){return super.set(n(this,e),t)}delete(e){return super.delete(s(this,e))}}class InternSet extends Set{constructor(e,t=r){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const t of e)this.add(t)}has(e){return super.has(t(this,e))}add(e){return super.add(n(this,e))}delete(e){return super.delete(s(this,e))}}function t({_intern:e,_key:t},n){const s=t(n);return e.has(s)?e.get(s):n}function n({_intern:e,_key:t},n){const s=t(n);return e.has(s)?e.get(s):(e.set(s,n),n)}function s({_intern:e,_key:t},n){const s=t(n);return e.has(s)&&(n=e.get(s),e.delete(s)),n}function r(e){return null!==e&&"object"==typeof e?e.valueOf():e}e.InternMap=InternMap,e.InternSet=InternSet,Object.defineProperty(e,"__esModule",{value:!0})}));
Index: node_modules/internmap/package.json
===================================================================
--- node_modules/internmap/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/internmap/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+{
+  "name": "internmap",
+  "version": "2.0.3",
+  "description": "Map and Set with automatic key interning",
+  "homepage": "https://github.com/mbostock/internmap/",
+  "license": "ISC",
+  "author": {
+    "name": "Mike Bostock",
+    "url": "https://bost.ocks.org/mike"
+  },
+  "type": "module",
+  "main": "src/index.js",
+  "module": "src/index.js",
+  "jsdelivr": "dist/internmap.min.js",
+  "unpkg": "dist/internmap.min.js",
+  "exports": {
+    "umd": "./dist/internmap.min.js",
+    "default": "./src/index.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/mbostock/internmap.git"
+  },
+  "files": [
+    "dist/**/*.js",
+    "src/**/*.js"
+  ],
+  "scripts": {
+    "test": "mocha 'test/**/*-test.js' && eslint src test",
+    "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+    "postpublish": "git push && git push --tags"
+  },
+  "sideEffects": false,
+  "devDependencies": {
+    "eslint": "^7.32.0",
+    "mocha": "^9.1.1",
+    "rollup": "^2.56.3",
+    "rollup-plugin-terser": "^7.0.2"
+  },
+  "engines": {
+    "node": ">=12"
+  }
+}
Index: node_modules/internmap/src/index.js
===================================================================
--- node_modules/internmap/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/internmap/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+export class InternMap extends Map {
+  constructor(entries, key = keyof) {
+    super();
+    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
+    if (entries != null) for (const [key, value] of entries) this.set(key, value);
+  }
+  get(key) {
+    return super.get(intern_get(this, key));
+  }
+  has(key) {
+    return super.has(intern_get(this, key));
+  }
+  set(key, value) {
+    return super.set(intern_set(this, key), value);
+  }
+  delete(key) {
+    return super.delete(intern_delete(this, key));
+  }
+}
+
+export class InternSet extends Set {
+  constructor(values, key = keyof) {
+    super();
+    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
+    if (values != null) for (const value of values) this.add(value);
+  }
+  has(value) {
+    return super.has(intern_get(this, value));
+  }
+  add(value) {
+    return super.add(intern_set(this, value));
+  }
+  delete(value) {
+    return super.delete(intern_delete(this, value));
+  }
+}
+
+function intern_get({_intern, _key}, value) {
+  const key = _key(value);
+  return _intern.has(key) ? _intern.get(key) : value;
+}
+
+function intern_set({_intern, _key}, value) {
+  const key = _key(value);
+  if (_intern.has(key)) return _intern.get(key);
+  _intern.set(key, value);
+  return value;
+}
+
+function intern_delete({_intern, _key}, value) {
+  const key = _key(value);
+  if (_intern.has(key)) {
+    value = _intern.get(key);
+    _intern.delete(key);
+  }
+  return value;
+}
+
+function keyof(value) {
+  return value !== null && typeof value === "object" ? value.valueOf() : value;
+}
Index: node_modules/js-tokens/CHANGELOG.md
===================================================================
--- node_modules/js-tokens/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/js-tokens/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,151 @@
+### Version 4.0.0 (2018-01-28) ###
+
+- Added: Support for ES2018. The only change needed was recognizing the `s`
+  regex flag.
+- Changed: _All_ tokens returned by the `matchToToken` function now have a
+  `closed` property. It is set to `undefined` for the tokens where “closed”
+  doesn’t make sense. This means that all tokens objects have the same shape,
+  which might improve performance.
+
+These are the breaking changes:
+
+- `'/a/s'.match(jsTokens)` no longer returns `['/', 'a', '/', 's']`, but
+  `['/a/s']`. (There are of course other variations of this.)
+- Code that rely on some token objects not having the `closed` property could
+  now behave differently.
+
+
+### Version 3.0.2 (2017-06-28) ###
+
+- No code changes. Just updates to the readme.
+
+
+### Version 3.0.1 (2017-01-30) ###
+
+- Fixed: ES2015 unicode escapes with more than 6 hex digits are now matched
+  correctly.
+
+
+### Version 3.0.0 (2017-01-11) ###
+
+This release contains one breaking change, that should [improve performance in
+V8][v8-perf]:
+
+> So how can you, as a JavaScript developer, ensure that your RegExps are fast?
+> If you are not interested in hooking into RegExp internals, make sure that
+> neither the RegExp instance, nor its prototype is modified in order to get the
+> best performance:
+>
+> ```js
+> var re = /./g;
+> re.exec('');  // Fast path.
+> re.new_property = 'slow';
+> ```
+
+This module used to export a single regex, with `.matchToToken` bolted
+on, just like in the above example. This release changes the exports of
+the module to avoid this issue.
+
+Before:
+
+```js
+import jsTokens from "js-tokens"
+// or:
+var jsTokens = require("js-tokens")
+var matchToToken = jsTokens.matchToToken
+```
+
+After:
+
+```js
+import jsTokens, {matchToToken} from "js-tokens"
+// or:
+var jsTokens = require("js-tokens").default
+var matchToToken = require("js-tokens").matchToToken
+```
+
+[v8-perf]: http://v8project.blogspot.se/2017/01/speeding-up-v8-regular-expressions.html
+
+
+### Version 2.0.0 (2016-06-19) ###
+
+- Added: Support for ES2016. In other words, support for the `**` exponentiation
+  operator.
+
+These are the breaking changes:
+
+- `'**'.match(jsTokens)` no longer returns `['*', '*']`, but `['**']`.
+- `'**='.match(jsTokens)` no longer returns `['*', '*=']`, but `['**=']`.
+
+
+### Version 1.0.3 (2016-03-27) ###
+
+- Improved: Made the regex ever so slightly smaller.
+- Updated: The readme.
+
+
+### Version 1.0.2 (2015-10-18) ###
+
+- Improved: Limited npm package contents for a smaller download. Thanks to
+  @zertosh!
+
+
+### Version 1.0.1 (2015-06-20) ###
+
+- Fixed: Declared an undeclared variable.
+
+
+### Version 1.0.0 (2015-02-26) ###
+
+- Changed: Merged the 'operator' and 'punctuation' types into 'punctuator'. That
+  type is now equivalent to the Punctuator token in the ECMAScript
+  specification. (Backwards-incompatible change.)
+- Fixed: A `-` followed by a number is now correctly matched as a punctuator
+  followed by a number. It used to be matched as just a number, but there is no
+  such thing as negative number literals. (Possibly backwards-incompatible
+  change.)
+
+
+### Version 0.4.1 (2015-02-21) ###
+
+- Added: Support for the regex `u` flag.
+
+
+### Version 0.4.0 (2015-02-21) ###
+
+- Improved: `jsTokens.matchToToken` performance.
+- Added: Support for octal and binary number literals.
+- Added: Support for template strings.
+
+
+### Version 0.3.1 (2015-01-06) ###
+
+- Fixed: Support for unicode spaces. They used to be allowed in names (which is
+  very confusing), and some unicode newlines were wrongly allowed in strings and
+  regexes.
+
+
+### Version 0.3.0 (2014-12-19) ###
+
+- Changed: The `jsTokens.names` array has been replaced with the
+  `jsTokens.matchToToken` function. The capturing groups of `jsTokens` are no
+  longer part of the public API; instead use said function. See this [gist] for
+  an example. (Backwards-incompatible change.)
+- Changed: The empty string is now considered an “invalid” token, instead an
+  “empty” token (its own group). (Backwards-incompatible change.)
+- Removed: component support. (Backwards-incompatible change.)
+
+[gist]: https://gist.github.com/lydell/be49dbf80c382c473004
+
+
+### Version 0.2.0 (2014-06-19) ###
+
+- Changed: Match ES6 function arrows (`=>`) as an operator, instead of its own
+  category (“functionArrow”), for simplicity. (Backwards-incompatible change.)
+- Added: ES6 splats (`...`) are now matched as an operator (instead of three
+  punctuations). (Backwards-incompatible change.)
+
+
+### Version 0.1.0 (2014-03-08) ###
+
+- Initial release.
Index: node_modules/js-tokens/LICENSE
===================================================================
--- node_modules/js-tokens/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/js-tokens/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: node_modules/js-tokens/README.md
===================================================================
--- node_modules/js-tokens/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/js-tokens/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,240 @@
+Overview [![Build Status](https://travis-ci.org/lydell/js-tokens.svg?branch=master)](https://travis-ci.org/lydell/js-tokens)
+========
+
+A regex that tokenizes JavaScript.
+
+```js
+var jsTokens = require("js-tokens").default
+
+var jsString = "var foo=opts.foo;\n..."
+
+jsString.match(jsTokens)
+// ["var", " ", "foo", "=", "opts", ".", "foo", ";", "\n", ...]
+```
+
+
+Installation
+============
+
+`npm install js-tokens`
+
+```js
+import jsTokens from "js-tokens"
+// or:
+var jsTokens = require("js-tokens").default
+```
+
+
+Usage
+=====
+
+### `jsTokens` ###
+
+A regex with the `g` flag that matches JavaScript tokens.
+
+The regex _always_ matches, even invalid JavaScript and the empty string.
+
+The next match is always directly after the previous.
+
+### `var token = matchToToken(match)` ###
+
+```js
+import {matchToToken} from "js-tokens"
+// or:
+var matchToToken = require("js-tokens").matchToToken
+```
+
+Takes a `match` returned by `jsTokens.exec(string)`, and returns a `{type:
+String, value: String}` object. The following types are available:
+
+- string
+- comment
+- regex
+- number
+- name
+- punctuator
+- whitespace
+- invalid
+
+Multi-line comments and strings also have a `closed` property indicating if the
+token was closed or not (see below).
+
+Comments and strings both come in several flavors. To distinguish them, check if
+the token starts with `//`, `/*`, `'`, `"` or `` ` ``.
+
+Names are ECMAScript IdentifierNames, that is, including both identifiers and
+keywords. You may use [is-keyword-js] to tell them apart.
+
+Whitespace includes both line terminators and other whitespace.
+
+[is-keyword-js]: https://github.com/crissdev/is-keyword-js
+
+
+ECMAScript support
+==================
+
+The intention is to always support the latest ECMAScript version whose feature
+set has been finalized.
+
+If adding support for a newer version requires changes, a new version with a
+major verion bump will be released.
+
+Currently, ECMAScript 2018 is supported.
+
+
+Invalid code handling
+=====================
+
+Unterminated strings are still matched as strings. JavaScript strings cannot
+contain (unescaped) newlines, so unterminated strings simply end at the end of
+the line. Unterminated template strings can contain unescaped newlines, though,
+so they go on to the end of input.
+
+Unterminated multi-line comments are also still matched as comments. They
+simply go on to the end of the input.
+
+Unterminated regex literals are likely matched as division and whatever is
+inside the regex.
+
+Invalid ASCII characters have their own capturing group.
+
+Invalid non-ASCII characters are treated as names, to simplify the matching of
+names (except unicode spaces which are treated as whitespace). Note: See also
+the [ES2018](#es2018) section.
+
+Regex literals may contain invalid regex syntax. They are still matched as
+regex literals. They may also contain repeated regex flags, to keep the regex
+simple.
+
+Strings may contain invalid escape sequences.
+
+
+Limitations
+===========
+
+Tokenizing JavaScript using regexes—in fact, _one single regex_—won’t be
+perfect. But that’s not the point either.
+
+You may compare jsTokens with [esprima] by using `esprima-compare.js`.
+See `npm run esprima-compare`!
+
+[esprima]: http://esprima.org/
+
+### Template string interpolation ###
+
+Template strings are matched as single tokens, from the starting `` ` `` to the
+ending `` ` ``, including interpolations (whose tokens are not matched
+individually).
+
+Matching template string interpolations requires recursive balancing of `{` and
+`}`—something that JavaScript regexes cannot do. Only one level of nesting is
+supported.
+
+### Division and regex literals collision ###
+
+Consider this example:
+
+```js
+var g = 9.82
+var number = bar / 2/g
+
+var regex = / 2/g
+```
+
+A human can easily understand that in the `number` line we’re dealing with
+division, and in the `regex` line we’re dealing with a regex literal. How come?
+Because humans can look at the whole code to put the `/` characters in context.
+A JavaScript regex cannot. It only sees forwards. (Well, ES2018 regexes can also
+look backwards. See the [ES2018](#es2018) section).
+
+When the `jsTokens` regex scans throught the above, it will see the following
+at the end of both the `number` and `regex` rows:
+
+```js
+/ 2/g
+```
+
+It is then impossible to know if that is a regex literal, or part of an
+expression dealing with division.
+
+Here is a similar case:
+
+```js
+foo /= 2/g
+foo(/= 2/g)
+```
+
+The first line divides the `foo` variable with `2/g`. The second line calls the
+`foo` function with the regex literal `/= 2/g`. Again, since `jsTokens` only
+sees forwards, it cannot tell the two cases apart.
+
+There are some cases where we _can_ tell division and regex literals apart,
+though.
+
+First off, we have the simple cases where there’s only one slash in the line:
+
+```js
+var foo = 2/g
+foo /= 2
+```
+
+Regex literals cannot contain newlines, so the above cases are correctly
+identified as division. Things are only problematic when there are more than
+one non-comment slash in a single line.
+
+Secondly, not every character is a valid regex flag.
+
+```js
+var number = bar / 2/e
+```
+
+The above example is also correctly identified as division, because `e` is not a
+valid regex flag. I initially wanted to future-proof by allowing `[a-zA-Z]*`
+(any letter) as flags, but it is not worth it since it increases the amount of
+ambigous cases. So only the standard `g`, `m`, `i`, `y` and `u` flags are
+allowed. This means that the above example will be identified as division as
+long as you don’t rename the `e` variable to some permutation of `gmiyus` 1 to 6
+characters long.
+
+Lastly, we can look _forward_ for information.
+
+- If the token following what looks like a regex literal is not valid after a
+  regex literal, but is valid in a division expression, then the regex literal
+  is treated as division instead. For example, a flagless regex cannot be
+  followed by a string, number or name, but all of those three can be the
+  denominator of a division.
+- Generally, if what looks like a regex literal is followed by an operator, the
+  regex literal is treated as division instead. This is because regexes are
+  seldomly used with operators (such as `+`, `*`, `&&` and `==`), but division
+  could likely be part of such an expression.
+
+Please consult the regex source and the test cases for precise information on
+when regex or division is matched (should you need to know). In short, you
+could sum it up as:
+
+If the end of a statement looks like a regex literal (even if it isn’t), it
+will be treated as one. Otherwise it should work as expected (if you write sane
+code).
+
+### ES2018 ###
+
+ES2018 added some nice regex improvements to the language.
+
+- [Unicode property escapes] should allow telling names and invalid non-ASCII
+  characters apart without blowing up the regex size.
+- [Lookbehind assertions] should allow matching telling division and regex
+  literals apart in more cases.
+- [Named capture groups] might simplify some things.
+
+These things would be nice to do, but are not critical. They probably have to
+wait until the oldest maintained Node.js LTS release supports those features.
+
+[Unicode property escapes]: http://2ality.com/2017/07/regexp-unicode-property-escapes.html
+[Lookbehind assertions]: http://2ality.com/2017/05/regexp-lookbehind-assertions.html
+[Named capture groups]: http://2ality.com/2017/05/regexp-named-capture-groups.html
+
+
+License
+=======
+
+[MIT](LICENSE).
Index: node_modules/js-tokens/index.js
===================================================================
--- node_modules/js-tokens/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/js-tokens/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell
+// License: MIT. (See LICENSE.)
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+})
+
+// This regex comes from regex.coffee, and is inserted here by generate-index.js
+// (run `npm run build`).
+exports.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g
+
+exports.matchToToken = function(match) {
+  var token = {type: "invalid", value: match[0], closed: undefined}
+       if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4])
+  else if (match[ 5]) token.type = "comment"
+  else if (match[ 6]) token.type = "comment", token.closed = !!match[7]
+  else if (match[ 8]) token.type = "regex"
+  else if (match[ 9]) token.type = "number"
+  else if (match[10]) token.type = "name"
+  else if (match[11]) token.type = "punctuator"
+  else if (match[12]) token.type = "whitespace"
+  return token
+}
Index: node_modules/js-tokens/package.json
===================================================================
--- node_modules/js-tokens/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/js-tokens/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+{
+  "name": "js-tokens",
+  "version": "4.0.0",
+  "author": "Simon Lydell",
+  "license": "MIT",
+  "description": "A regex that tokenizes JavaScript.",
+  "keywords": [
+    "JavaScript",
+    "js",
+    "token",
+    "tokenize",
+    "regex"
+  ],
+  "files": [
+    "index.js"
+  ],
+  "repository": "lydell/js-tokens",
+  "scripts": {
+    "test": "mocha --ui tdd",
+    "esprima-compare": "node esprima-compare ./index.js everything.js/es5.js",
+    "build": "node generate-index.js",
+    "dev": "npm run build && npm test"
+  },
+  "devDependencies": {
+    "coffeescript": "2.1.1",
+    "esprima": "4.0.0",
+    "everything.js": "1.0.3",
+    "mocha": "5.0.0"
+  }
+}
Index: node_modules/loose-envify/LICENSE
===================================================================
--- node_modules/loose-envify/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/loose-envify/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Andres Suarez <zertosh@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: node_modules/loose-envify/README.md
===================================================================
--- node_modules/loose-envify/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/loose-envify/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+# loose-envify
+
+[![Build Status](https://travis-ci.org/zertosh/loose-envify.svg?branch=master)](https://travis-ci.org/zertosh/loose-envify)
+
+Fast (and loose) selective `process.env` replacer using [js-tokens](https://github.com/lydell/js-tokens) instead of an AST. Works just like [envify](https://github.com/hughsk/envify) but much faster.
+
+## Gotchas
+
+* Doesn't handle broken syntax.
+* Doesn't look inside embedded expressions in template strings.
+  - **this won't work:**
+  ```js
+  console.log(`the current env is ${process.env.NODE_ENV}`);
+  ```
+* Doesn't replace oddly-spaced or oddly-commented expressions.
+  - **this won't work:**
+  ```js
+  console.log(process./*won't*/env./*work*/NODE_ENV);
+  ```
+
+## Usage/Options
+
+loose-envify has the exact same interface as [envify](https://github.com/hughsk/envify), including the CLI.
+
+## Benchmark
+
+```
+envify:
+
+  $ for i in {1..5}; do node bench/bench.js 'envify'; done
+  708ms
+  727ms
+  791ms
+  719ms
+  720ms
+
+loose-envify:
+
+  $ for i in {1..5}; do node bench/bench.js '../'; done
+  51ms
+  52ms
+  52ms
+  52ms
+  52ms
+```
Index: node_modules/loose-envify/cli.js
===================================================================
--- node_modules/loose-envify/cli.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/loose-envify/cli.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+#!/usr/bin/env node
+'use strict';
+
+var looseEnvify = require('./');
+var fs = require('fs');
+
+if (process.argv[2]) {
+  fs.createReadStream(process.argv[2], {encoding: 'utf8'})
+    .pipe(looseEnvify(process.argv[2]))
+    .pipe(process.stdout);
+} else {
+  process.stdin.resume()
+  process.stdin
+    .pipe(looseEnvify(__filename))
+    .pipe(process.stdout);
+}
Index: node_modules/loose-envify/custom.js
===================================================================
--- node_modules/loose-envify/custom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/loose-envify/custom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+// envify compatibility
+'use strict';
+
+module.exports = require('./loose-envify');
Index: node_modules/loose-envify/index.js
===================================================================
--- node_modules/loose-envify/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/loose-envify/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('./loose-envify')(process.env);
Index: node_modules/loose-envify/loose-envify.js
===================================================================
--- node_modules/loose-envify/loose-envify.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/loose-envify/loose-envify.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+'use strict';
+
+var stream = require('stream');
+var util = require('util');
+var replace = require('./replace');
+
+var jsonExtRe = /\.json$/;
+
+module.exports = function(rootEnv) {
+  rootEnv = rootEnv || process.env;
+  return function (file, trOpts) {
+    if (jsonExtRe.test(file)) {
+      return stream.PassThrough();
+    }
+    var envs = trOpts ? [rootEnv, trOpts] : [rootEnv];
+    return new LooseEnvify(envs);
+  };
+};
+
+function LooseEnvify(envs) {
+  stream.Transform.call(this);
+  this._data = '';
+  this._envs = envs;
+}
+util.inherits(LooseEnvify, stream.Transform);
+
+LooseEnvify.prototype._transform = function(buf, enc, cb) {
+  this._data += buf;
+  cb();
+};
+
+LooseEnvify.prototype._flush = function(cb) {
+  var replaced = replace(this._data, this._envs);
+  this.push(replaced);
+  cb();
+};
Index: node_modules/loose-envify/package.json
===================================================================
--- node_modules/loose-envify/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/loose-envify/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+{
+  "name": "loose-envify",
+  "version": "1.4.0",
+  "description": "Fast (and loose) selective `process.env` replacer using js-tokens instead of an AST",
+  "keywords": [
+    "environment",
+    "variables",
+    "browserify",
+    "browserify-transform",
+    "transform",
+    "source",
+    "configuration"
+  ],
+  "homepage": "https://github.com/zertosh/loose-envify",
+  "license": "MIT",
+  "author": "Andres Suarez <zertosh@gmail.com>",
+  "main": "index.js",
+  "bin": {
+    "loose-envify": "cli.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/zertosh/loose-envify.git"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "dependencies": {
+    "js-tokens": "^3.0.0 || ^4.0.0"
+  },
+  "devDependencies": {
+    "browserify": "^13.1.1",
+    "envify": "^3.4.0",
+    "tap": "^8.0.0"
+  }
+}
Index: node_modules/loose-envify/replace.js
===================================================================
--- node_modules/loose-envify/replace.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/loose-envify/replace.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+'use strict';
+
+var jsTokens = require('js-tokens').default;
+
+var processEnvRe = /\bprocess\.env\.[_$a-zA-Z][$\w]+\b/;
+var spaceOrCommentRe = /^(?:\s|\/[/*])/;
+
+function replace(src, envs) {
+  if (!processEnvRe.test(src)) {
+    return src;
+  }
+
+  var out = [];
+  var purge = envs.some(function(env) {
+    return env._ && env._.indexOf('purge') !== -1;
+  });
+
+  jsTokens.lastIndex = 0
+  var parts = src.match(jsTokens);
+
+  for (var i = 0; i < parts.length; i++) {
+    if (parts[i    ] === 'process' &&
+        parts[i + 1] === '.' &&
+        parts[i + 2] === 'env' &&
+        parts[i + 3] === '.') {
+      var prevCodeToken = getAdjacentCodeToken(-1, parts, i);
+      var nextCodeToken = getAdjacentCodeToken(1, parts, i + 4);
+      var replacement = getReplacementString(envs, parts[i + 4], purge);
+      if (prevCodeToken !== '.' &&
+          nextCodeToken !== '.' &&
+          nextCodeToken !== '=' &&
+          typeof replacement === 'string') {
+        out.push(replacement);
+        i += 4;
+        continue;
+      }
+    }
+    out.push(parts[i]);
+  }
+
+  return out.join('');
+}
+
+function getAdjacentCodeToken(dir, parts, i) {
+  while (true) {
+    var part = parts[i += dir];
+    if (!spaceOrCommentRe.test(part)) {
+      return part;
+    }
+  }
+}
+
+function getReplacementString(envs, name, purge) {
+  for (var j = 0; j < envs.length; j++) {
+    var env = envs[j];
+    if (typeof env[name] !== 'undefined') {
+      return JSON.stringify(env[name]);
+    }
+  }
+  if (purge) {
+    return 'undefined';
+  }
+}
+
+module.exports = replace;
Index: node_modules/make-event-props/LICENSE
===================================================================
--- node_modules/make-event-props/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018–2023 Wojciech Maj
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/make-event-props/README.md
===================================================================
--- node_modules/make-event-props/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+[![npm](https://img.shields.io/npm/v/make-event-props.svg)](https://www.npmjs.com/package/make-event-props) ![downloads](https://img.shields.io/npm/dt/make-event-props.svg) [![CI](https://github.com/wojtekmaj/make-event-props/workflows/CI/badge.svg)](https://github.com/wojtekmaj/make-event-props/actions)
+
+# Make-Event-Props
+
+A function that, given props, returns an object of event callback props optionally curried with additional arguments.
+
+This package allows you to pass event callback props to a rendered DOM element without the risk of applying any invalid props that could cause unwanted side effects.
+
+## tl;dr
+
+- Install by executing `npm install make-event-props` or `yarn add make-event-props`.
+- Import by adding `import makeEventProps from 'make-event-props'`.
+- Create your event props object:
+  ```ts
+  const eventProps = useMemo(
+    () => makeEventProps(props, (eventName) => additionalArgs),
+    [additionalArgs],
+  );
+  ```
+- Use your event props:
+  ```tsx
+  return <div {...eventProps} />;
+  ```
+
+## License
+
+The MIT License.
+
+## Author
+
+<table>
+  <tr>
+    <td >
+      <img src="https://avatars.githubusercontent.com/u/5426427?v=4&s=128" width="64" height="64" alt="Wojciech Maj">
+    </td>
+    <td>
+      <a href="https://github.com/wojtekmaj">Wojciech Maj</a>
+    </td>
+  </tr>
+</table>
Index: node_modules/make-event-props/dist/cjs/index.d.ts
===================================================================
--- node_modules/make-event-props/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+export declare const clipboardEvents: readonly ["onCopy", "onCut", "onPaste"];
+export declare const compositionEvents: readonly ["onCompositionEnd", "onCompositionStart", "onCompositionUpdate"];
+export declare const focusEvents: readonly ["onFocus", "onBlur"];
+export declare const formEvents: readonly ["onInput", "onInvalid", "onReset", "onSubmit"];
+export declare const imageEvents: readonly ["onLoad", "onError"];
+export declare const keyboardEvents: readonly ["onKeyDown", "onKeyPress", "onKeyUp"];
+export declare const mediaEvents: readonly ["onAbort", "onCanPlay", "onCanPlayThrough", "onDurationChange", "onEmptied", "onEncrypted", "onEnded", "onError", "onLoadedData", "onLoadedMetadata", "onLoadStart", "onPause", "onPlay", "onPlaying", "onProgress", "onRateChange", "onSeeked", "onSeeking", "onStalled", "onSuspend", "onTimeUpdate", "onVolumeChange", "onWaiting"];
+export declare const mouseEvents: readonly ["onClick", "onContextMenu", "onDoubleClick", "onMouseDown", "onMouseEnter", "onMouseLeave", "onMouseMove", "onMouseOut", "onMouseOver", "onMouseUp"];
+export declare const dragEvents: readonly ["onDrag", "onDragEnd", "onDragEnter", "onDragExit", "onDragLeave", "onDragOver", "onDragStart", "onDrop"];
+export declare const selectionEvents: readonly ["onSelect"];
+export declare const touchEvents: readonly ["onTouchCancel", "onTouchEnd", "onTouchMove", "onTouchStart"];
+export declare const pointerEvents: readonly ["onPointerDown", "onPointerMove", "onPointerUp", "onPointerCancel", "onGotPointerCapture", "onLostPointerCapture", "onPointerEnter", "onPointerLeave", "onPointerOver", "onPointerOut"];
+export declare const uiEvents: readonly ["onScroll"];
+export declare const wheelEvents: readonly ["onWheel"];
+export declare const animationEvents: readonly ["onAnimationStart", "onAnimationEnd", "onAnimationIteration"];
+export declare const transitionEvents: readonly ["onTransitionEnd"];
+export declare const otherEvents: readonly ["onToggle"];
+export declare const changeEvents: readonly ["onChange"];
+export declare const allEvents: readonly ["onCopy", "onCut", "onPaste", "onCompositionEnd", "onCompositionStart", "onCompositionUpdate", "onFocus", "onBlur", "onInput", "onInvalid", "onReset", "onSubmit", "onLoad", "onError", "onKeyDown", "onKeyPress", "onKeyUp", "onAbort", "onCanPlay", "onCanPlayThrough", "onDurationChange", "onEmptied", "onEncrypted", "onEnded", "onError", "onLoadedData", "onLoadedMetadata", "onLoadStart", "onPause", "onPlay", "onPlaying", "onProgress", "onRateChange", "onSeeked", "onSeeking", "onStalled", "onSuspend", "onTimeUpdate", "onVolumeChange", "onWaiting", "onClick", "onContextMenu", "onDoubleClick", "onMouseDown", "onMouseEnter", "onMouseLeave", "onMouseMove", "onMouseOut", "onMouseOver", "onMouseUp", "onDrag", "onDragEnd", "onDragEnter", "onDragExit", "onDragLeave", "onDragOver", "onDragStart", "onDrop", "onSelect", "onTouchCancel", "onTouchEnd", "onTouchMove", "onTouchStart", "onPointerDown", "onPointerMove", "onPointerUp", "onPointerCancel", "onGotPointerCapture", "onLostPointerCapture", "onPointerEnter", "onPointerLeave", "onPointerOver", "onPointerOut", "onScroll", "onWheel", "onAnimationStart", "onAnimationEnd", "onAnimationIteration", "onTransitionEnd", "onChange", "onToggle"];
+type AllEvents = (typeof allEvents)[number];
+type EventHandler<ArgsType> = (event: any, args: ArgsType) => void;
+type EventHandlerWithoutArgs<ArgsType, OriginalEventHandler> = OriginalEventHandler extends (event: infer Event, args: ArgsType) => void ? (event: Event) => void : never;
+export type EventProps<ArgsType> = {
+    [K in AllEvents]?: EventHandler<ArgsType>;
+};
+type Props<ArgsType> = Record<string, unknown> & EventProps<ArgsType>;
+type EventPropsWithoutArgs<ArgsType, PropsType> = {
+    [K in keyof PropsType as K extends AllEvents ? K : never]: EventHandlerWithoutArgs<ArgsType, PropsType[K]>;
+};
+/**
+ * Returns an object with on-event callback props curried with provided args.
+ * @param {Object} props Props passed to a component.
+ * @param {Function=} getArgs A function that returns argument(s) on-event callbacks
+ *   shall be curried with.
+ */
+export default function makeEventProps<ArgsType, PropsType extends Props<ArgsType> = Props<ArgsType>>(props: PropsType, getArgs?: (eventName: string) => ArgsType): EventPropsWithoutArgs<ArgsType, PropsType>;
+export {};
Index: node_modules/make-event-props/dist/cjs/index.js
===================================================================
--- node_modules/make-event-props/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,120 @@
+"use strict";
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.allEvents = exports.changeEvents = exports.otherEvents = exports.transitionEvents = exports.animationEvents = exports.wheelEvents = exports.uiEvents = exports.pointerEvents = exports.touchEvents = exports.selectionEvents = exports.dragEvents = exports.mouseEvents = exports.mediaEvents = exports.keyboardEvents = exports.imageEvents = exports.formEvents = exports.focusEvents = exports.compositionEvents = exports.clipboardEvents = void 0;
+// As defined on the list of supported events: https://reactjs.org/docs/events.html
+exports.clipboardEvents = ['onCopy', 'onCut', 'onPaste'];
+exports.compositionEvents = [
+    'onCompositionEnd',
+    'onCompositionStart',
+    'onCompositionUpdate',
+];
+exports.focusEvents = ['onFocus', 'onBlur'];
+exports.formEvents = ['onInput', 'onInvalid', 'onReset', 'onSubmit'];
+exports.imageEvents = ['onLoad', 'onError'];
+exports.keyboardEvents = ['onKeyDown', 'onKeyPress', 'onKeyUp'];
+exports.mediaEvents = [
+    'onAbort',
+    'onCanPlay',
+    'onCanPlayThrough',
+    'onDurationChange',
+    'onEmptied',
+    'onEncrypted',
+    'onEnded',
+    'onError',
+    'onLoadedData',
+    'onLoadedMetadata',
+    'onLoadStart',
+    'onPause',
+    'onPlay',
+    'onPlaying',
+    'onProgress',
+    'onRateChange',
+    'onSeeked',
+    'onSeeking',
+    'onStalled',
+    'onSuspend',
+    'onTimeUpdate',
+    'onVolumeChange',
+    'onWaiting',
+];
+exports.mouseEvents = [
+    'onClick',
+    'onContextMenu',
+    'onDoubleClick',
+    'onMouseDown',
+    'onMouseEnter',
+    'onMouseLeave',
+    'onMouseMove',
+    'onMouseOut',
+    'onMouseOver',
+    'onMouseUp',
+];
+exports.dragEvents = [
+    'onDrag',
+    'onDragEnd',
+    'onDragEnter',
+    'onDragExit',
+    'onDragLeave',
+    'onDragOver',
+    'onDragStart',
+    'onDrop',
+];
+exports.selectionEvents = ['onSelect'];
+exports.touchEvents = ['onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart'];
+exports.pointerEvents = [
+    'onPointerDown',
+    'onPointerMove',
+    'onPointerUp',
+    'onPointerCancel',
+    'onGotPointerCapture',
+    'onLostPointerCapture',
+    'onPointerEnter',
+    'onPointerLeave',
+    'onPointerOver',
+    'onPointerOut',
+];
+exports.uiEvents = ['onScroll'];
+exports.wheelEvents = ['onWheel'];
+exports.animationEvents = [
+    'onAnimationStart',
+    'onAnimationEnd',
+    'onAnimationIteration',
+];
+exports.transitionEvents = ['onTransitionEnd'];
+exports.otherEvents = ['onToggle'];
+exports.changeEvents = ['onChange'];
+exports.allEvents = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], exports.clipboardEvents, true), exports.compositionEvents, true), exports.focusEvents, true), exports.formEvents, true), exports.imageEvents, true), exports.keyboardEvents, true), exports.mediaEvents, true), exports.mouseEvents, true), exports.dragEvents, true), exports.selectionEvents, true), exports.touchEvents, true), exports.pointerEvents, true), exports.uiEvents, true), exports.wheelEvents, true), exports.animationEvents, true), exports.transitionEvents, true), exports.changeEvents, true), exports.otherEvents, true);
+/**
+ * Returns an object with on-event callback props curried with provided args.
+ * @param {Object} props Props passed to a component.
+ * @param {Function=} getArgs A function that returns argument(s) on-event callbacks
+ *   shall be curried with.
+ */
+function makeEventProps(props, getArgs) {
+    var eventProps = {};
+    exports.allEvents.forEach(function (eventName) {
+        var eventHandler = props[eventName];
+        if (!eventHandler) {
+            return;
+        }
+        if (getArgs) {
+            eventProps[eventName] = (function (event) {
+                return eventHandler(event, getArgs(eventName));
+            });
+        }
+        else {
+            eventProps[eventName] = eventHandler;
+        }
+    });
+    return eventProps;
+}
+exports.default = makeEventProps;
Index: node_modules/make-event-props/dist/cjs/index.spec.d.ts
===================================================================
--- node_modules/make-event-props/dist/cjs/index.spec.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/dist/cjs/index.spec.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/make-event-props/dist/cjs/index.spec.js
===================================================================
--- node_modules/make-event-props/dist/cjs/index.spec.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/dist/cjs/index.spec.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,223 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var vitest_1 = require("vitest");
+var index_js_1 = __importStar(require("./index.js"));
+(0, vitest_1.describe)('makeEventProps()', function () {
+    var fakeEvent = {};
+    (0, vitest_1.it)('returns object with valid and only valid event callbacks', function () {
+        var props = {
+            onClick: vitest_1.vi.fn(),
+            someInvalidProp: vitest_1.vi.fn(),
+        };
+        var result = (0, index_js_1.default)(props);
+        (0, vitest_1.expect)(result).toMatchObject({ onClick: vitest_1.expect.any(Function) });
+    });
+    (0, vitest_1.it)('calls getArgs function on event invoke if given', function () {
+        var props = {
+            onClick: vitest_1.vi.fn(),
+            someInvalidProp: vitest_1.vi.fn(),
+        };
+        var getArgs = vitest_1.vi.fn();
+        var result = (0, index_js_1.default)(props, getArgs);
+        // getArgs shall not be invoked before a given event is fired
+        (0, vitest_1.expect)(getArgs).not.toHaveBeenCalled();
+        result.onClick(fakeEvent);
+        (0, vitest_1.expect)(getArgs).toHaveBeenCalledTimes(1);
+        (0, vitest_1.expect)(getArgs).toHaveBeenCalledWith('onClick');
+    });
+    (0, vitest_1.it)('properly calls callbacks given in props given no getArgs function', function () {
+        var props = {
+            onClick: vitest_1.vi.fn(),
+        };
+        var result = (0, index_js_1.default)(props);
+        result.onClick(fakeEvent);
+        (0, vitest_1.expect)(props.onClick).toHaveBeenCalledWith(fakeEvent);
+    });
+    (0, vitest_1.it)('properly calls callbacks given in props given getArgs function', function () {
+        var props = {
+            onClick: vitest_1.vi.fn(),
+        };
+        var getArgs = vitest_1.vi.fn();
+        var args = {};
+        getArgs.mockReturnValue(args);
+        var result = (0, index_js_1.default)(props, getArgs);
+        result.onClick(fakeEvent);
+        (0, vitest_1.expect)(props.onClick).toHaveBeenCalledWith(fakeEvent, args);
+    });
+    (0, vitest_1.it)('should not filter out valid event props', function () {
+        var props = {
+            onClick: vitest_1.vi.fn(),
+        };
+        var result = (0, index_js_1.default)(props);
+        // @ts-expect-no-error
+        result.onClick;
+    });
+    (0, vitest_1.it)('should filter out invalid event props', function () {
+        var props = {
+            someInvalidProp: vitest_1.vi.fn(),
+        };
+        var result = (0, index_js_1.default)(props);
+        // @ts-expect-error-next-line
+        result.someInvalidProp;
+    });
+    (0, vitest_1.it)('should allow valid onClick handler to be passed', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-no-error
+        (0, index_js_1.default)(props);
+    });
+    (0, vitest_1.it)('should not allow invalid onClick handler to be passed', function () {
+        var props = {
+            onClick: 'potato',
+        };
+        // @ts-expect-error-next-line
+        (0, index_js_1.default)(props);
+    });
+    (0, vitest_1.it)('should allow onClick handler with extra args to be passed if getArgs is provided', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-no-error
+        (0, index_js_1.default)(props, function () { return 'hello'; });
+    });
+    (0, vitest_1.it)('should not allow onClick handler with extra args to be passed if getArgs is not provided', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-error-next-line
+        (0, index_js_1.default)(props);
+    });
+    (0, vitest_1.it)('should not allow onClick handler with extra args to be passed if getArgs is provided but returns different type', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-error-next-line
+        (0, index_js_1.default)(props, function () { return 5; });
+    });
+    (0, vitest_1.it)('should allow div onClick handler to be passed to div', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event) {
+                // Intentionally empty
+            },
+        };
+        var result = (0, index_js_1.default)(props);
+        // @ts-expect-no-error
+        (0, jsx_runtime_1.jsx)("div", { onClick: result.onClick });
+    });
+    (0, vitest_1.it)('should not allow div onClick handler to be passed to button', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event) {
+                // Intentionally empty
+            },
+        };
+        var result = (0, index_js_1.default)(props);
+        // @ts-expect-error-next-line
+        (0, jsx_runtime_1.jsx)("button", { onClick: result.onClick });
+    });
+    (0, vitest_1.it)('should allow div onClick handler with extra args to be passed to div if getArgs is provided', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        var result = (0, index_js_1.default)(props, function () { return 'hello'; });
+        // @ts-expect-no-error
+        (0, jsx_runtime_1.jsx)("div", { onClick: result.onClick });
+    });
+    (0, vitest_1.it)('should not allow div onClick handler with extra args to be passed to button if getArgs is provided', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        var result = (0, index_js_1.default)(props, function () { return 'hello'; });
+        // @ts-expect-error-next-line
+        (0, jsx_runtime_1.jsx)("button", { onClick: result.onClick });
+    });
+    (0, vitest_1.it)('should allow onClick handler with valid extra args to be passed with args explicitly typed', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-no-error
+        (0, index_js_1.default)(props, function () { return 'hello'; });
+    });
+    (0, vitest_1.it)('should not allow onClick handler with invalid extra args to be passed with args explicitly typed', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-error-next-line
+        (0, index_js_1.default)(props, function () { return 'hello'; });
+    });
+    (0, vitest_1.it)('should allow getArgs returning valid type to be passed with args explicitly typed', function () {
+        var props = {};
+        // @ts-expect-no-error
+        (0, index_js_1.default)(props, function () { return 'hello'; });
+    });
+    (0, vitest_1.it)('should not allow getArgs returning invalid type to be passed with args explicitly typed', function () {
+        var props = {};
+        // @ts-expect-error-next-line
+        (0, index_js_1.default)(props, function () { return 5; });
+    });
+});
+(0, vitest_1.describe)('allEvents', function () {
+    (0, vitest_1.it)('should contain all events', function () {
+        var sortedAllEvents = new Set(__spreadArray([], index_js_1.allEvents, true).sort());
+        (0, vitest_1.expect)(sortedAllEvents).toMatchSnapshot();
+    });
+});
Index: node_modules/make-event-props/dist/cjs/package.json
===================================================================
--- node_modules/make-event-props/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
Index: node_modules/make-event-props/dist/esm/index.d.ts
===================================================================
--- node_modules/make-event-props/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+export declare const clipboardEvents: readonly ["onCopy", "onCut", "onPaste"];
+export declare const compositionEvents: readonly ["onCompositionEnd", "onCompositionStart", "onCompositionUpdate"];
+export declare const focusEvents: readonly ["onFocus", "onBlur"];
+export declare const formEvents: readonly ["onInput", "onInvalid", "onReset", "onSubmit"];
+export declare const imageEvents: readonly ["onLoad", "onError"];
+export declare const keyboardEvents: readonly ["onKeyDown", "onKeyPress", "onKeyUp"];
+export declare const mediaEvents: readonly ["onAbort", "onCanPlay", "onCanPlayThrough", "onDurationChange", "onEmptied", "onEncrypted", "onEnded", "onError", "onLoadedData", "onLoadedMetadata", "onLoadStart", "onPause", "onPlay", "onPlaying", "onProgress", "onRateChange", "onSeeked", "onSeeking", "onStalled", "onSuspend", "onTimeUpdate", "onVolumeChange", "onWaiting"];
+export declare const mouseEvents: readonly ["onClick", "onContextMenu", "onDoubleClick", "onMouseDown", "onMouseEnter", "onMouseLeave", "onMouseMove", "onMouseOut", "onMouseOver", "onMouseUp"];
+export declare const dragEvents: readonly ["onDrag", "onDragEnd", "onDragEnter", "onDragExit", "onDragLeave", "onDragOver", "onDragStart", "onDrop"];
+export declare const selectionEvents: readonly ["onSelect"];
+export declare const touchEvents: readonly ["onTouchCancel", "onTouchEnd", "onTouchMove", "onTouchStart"];
+export declare const pointerEvents: readonly ["onPointerDown", "onPointerMove", "onPointerUp", "onPointerCancel", "onGotPointerCapture", "onLostPointerCapture", "onPointerEnter", "onPointerLeave", "onPointerOver", "onPointerOut"];
+export declare const uiEvents: readonly ["onScroll"];
+export declare const wheelEvents: readonly ["onWheel"];
+export declare const animationEvents: readonly ["onAnimationStart", "onAnimationEnd", "onAnimationIteration"];
+export declare const transitionEvents: readonly ["onTransitionEnd"];
+export declare const otherEvents: readonly ["onToggle"];
+export declare const changeEvents: readonly ["onChange"];
+export declare const allEvents: readonly ["onCopy", "onCut", "onPaste", "onCompositionEnd", "onCompositionStart", "onCompositionUpdate", "onFocus", "onBlur", "onInput", "onInvalid", "onReset", "onSubmit", "onLoad", "onError", "onKeyDown", "onKeyPress", "onKeyUp", "onAbort", "onCanPlay", "onCanPlayThrough", "onDurationChange", "onEmptied", "onEncrypted", "onEnded", "onError", "onLoadedData", "onLoadedMetadata", "onLoadStart", "onPause", "onPlay", "onPlaying", "onProgress", "onRateChange", "onSeeked", "onSeeking", "onStalled", "onSuspend", "onTimeUpdate", "onVolumeChange", "onWaiting", "onClick", "onContextMenu", "onDoubleClick", "onMouseDown", "onMouseEnter", "onMouseLeave", "onMouseMove", "onMouseOut", "onMouseOver", "onMouseUp", "onDrag", "onDragEnd", "onDragEnter", "onDragExit", "onDragLeave", "onDragOver", "onDragStart", "onDrop", "onSelect", "onTouchCancel", "onTouchEnd", "onTouchMove", "onTouchStart", "onPointerDown", "onPointerMove", "onPointerUp", "onPointerCancel", "onGotPointerCapture", "onLostPointerCapture", "onPointerEnter", "onPointerLeave", "onPointerOver", "onPointerOut", "onScroll", "onWheel", "onAnimationStart", "onAnimationEnd", "onAnimationIteration", "onTransitionEnd", "onChange", "onToggle"];
+type AllEvents = (typeof allEvents)[number];
+type EventHandler<ArgsType> = (event: any, args: ArgsType) => void;
+type EventHandlerWithoutArgs<ArgsType, OriginalEventHandler> = OriginalEventHandler extends (event: infer Event, args: ArgsType) => void ? (event: Event) => void : never;
+export type EventProps<ArgsType> = {
+    [K in AllEvents]?: EventHandler<ArgsType>;
+};
+type Props<ArgsType> = Record<string, unknown> & EventProps<ArgsType>;
+type EventPropsWithoutArgs<ArgsType, PropsType> = {
+    [K in keyof PropsType as K extends AllEvents ? K : never]: EventHandlerWithoutArgs<ArgsType, PropsType[K]>;
+};
+/**
+ * Returns an object with on-event callback props curried with provided args.
+ * @param {Object} props Props passed to a component.
+ * @param {Function=} getArgs A function that returns argument(s) on-event callbacks
+ *   shall be curried with.
+ */
+export default function makeEventProps<ArgsType, PropsType extends Props<ArgsType> = Props<ArgsType>>(props: PropsType, getArgs?: (eventName: string) => ArgsType): EventPropsWithoutArgs<ArgsType, PropsType>;
+export {};
Index: node_modules/make-event-props/dist/esm/index.js
===================================================================
--- node_modules/make-event-props/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,116 @@
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+// As defined on the list of supported events: https://reactjs.org/docs/events.html
+export var clipboardEvents = ['onCopy', 'onCut', 'onPaste'];
+export var compositionEvents = [
+    'onCompositionEnd',
+    'onCompositionStart',
+    'onCompositionUpdate',
+];
+export var focusEvents = ['onFocus', 'onBlur'];
+export var formEvents = ['onInput', 'onInvalid', 'onReset', 'onSubmit'];
+export var imageEvents = ['onLoad', 'onError'];
+export var keyboardEvents = ['onKeyDown', 'onKeyPress', 'onKeyUp'];
+export var mediaEvents = [
+    'onAbort',
+    'onCanPlay',
+    'onCanPlayThrough',
+    'onDurationChange',
+    'onEmptied',
+    'onEncrypted',
+    'onEnded',
+    'onError',
+    'onLoadedData',
+    'onLoadedMetadata',
+    'onLoadStart',
+    'onPause',
+    'onPlay',
+    'onPlaying',
+    'onProgress',
+    'onRateChange',
+    'onSeeked',
+    'onSeeking',
+    'onStalled',
+    'onSuspend',
+    'onTimeUpdate',
+    'onVolumeChange',
+    'onWaiting',
+];
+export var mouseEvents = [
+    'onClick',
+    'onContextMenu',
+    'onDoubleClick',
+    'onMouseDown',
+    'onMouseEnter',
+    'onMouseLeave',
+    'onMouseMove',
+    'onMouseOut',
+    'onMouseOver',
+    'onMouseUp',
+];
+export var dragEvents = [
+    'onDrag',
+    'onDragEnd',
+    'onDragEnter',
+    'onDragExit',
+    'onDragLeave',
+    'onDragOver',
+    'onDragStart',
+    'onDrop',
+];
+export var selectionEvents = ['onSelect'];
+export var touchEvents = ['onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart'];
+export var pointerEvents = [
+    'onPointerDown',
+    'onPointerMove',
+    'onPointerUp',
+    'onPointerCancel',
+    'onGotPointerCapture',
+    'onLostPointerCapture',
+    'onPointerEnter',
+    'onPointerLeave',
+    'onPointerOver',
+    'onPointerOut',
+];
+export var uiEvents = ['onScroll'];
+export var wheelEvents = ['onWheel'];
+export var animationEvents = [
+    'onAnimationStart',
+    'onAnimationEnd',
+    'onAnimationIteration',
+];
+export var transitionEvents = ['onTransitionEnd'];
+export var otherEvents = ['onToggle'];
+export var changeEvents = ['onChange'];
+export var allEvents = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], clipboardEvents, true), compositionEvents, true), focusEvents, true), formEvents, true), imageEvents, true), keyboardEvents, true), mediaEvents, true), mouseEvents, true), dragEvents, true), selectionEvents, true), touchEvents, true), pointerEvents, true), uiEvents, true), wheelEvents, true), animationEvents, true), transitionEvents, true), changeEvents, true), otherEvents, true);
+/**
+ * Returns an object with on-event callback props curried with provided args.
+ * @param {Object} props Props passed to a component.
+ * @param {Function=} getArgs A function that returns argument(s) on-event callbacks
+ *   shall be curried with.
+ */
+export default function makeEventProps(props, getArgs) {
+    var eventProps = {};
+    allEvents.forEach(function (eventName) {
+        var eventHandler = props[eventName];
+        if (!eventHandler) {
+            return;
+        }
+        if (getArgs) {
+            eventProps[eventName] = (function (event) {
+                return eventHandler(event, getArgs(eventName));
+            });
+        }
+        else {
+            eventProps[eventName] = eventHandler;
+        }
+    });
+    return eventProps;
+}
Index: node_modules/make-event-props/dist/esm/index.spec.d.ts
===================================================================
--- node_modules/make-event-props/dist/esm/index.spec.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/dist/esm/index.spec.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/make-event-props/dist/esm/index.spec.js
===================================================================
--- node_modules/make-event-props/dist/esm/index.spec.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/dist/esm/index.spec.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,199 @@
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+import { jsx as _jsx } from "react/jsx-runtime";
+import { describe, expect, it, vi } from 'vitest';
+import React from 'react';
+import makeEventProps, { allEvents } from './index.js';
+describe('makeEventProps()', function () {
+    var fakeEvent = {};
+    it('returns object with valid and only valid event callbacks', function () {
+        var props = {
+            onClick: vi.fn(),
+            someInvalidProp: vi.fn(),
+        };
+        var result = makeEventProps(props);
+        expect(result).toMatchObject({ onClick: expect.any(Function) });
+    });
+    it('calls getArgs function on event invoke if given', function () {
+        var props = {
+            onClick: vi.fn(),
+            someInvalidProp: vi.fn(),
+        };
+        var getArgs = vi.fn();
+        var result = makeEventProps(props, getArgs);
+        // getArgs shall not be invoked before a given event is fired
+        expect(getArgs).not.toHaveBeenCalled();
+        result.onClick(fakeEvent);
+        expect(getArgs).toHaveBeenCalledTimes(1);
+        expect(getArgs).toHaveBeenCalledWith('onClick');
+    });
+    it('properly calls callbacks given in props given no getArgs function', function () {
+        var props = {
+            onClick: vi.fn(),
+        };
+        var result = makeEventProps(props);
+        result.onClick(fakeEvent);
+        expect(props.onClick).toHaveBeenCalledWith(fakeEvent);
+    });
+    it('properly calls callbacks given in props given getArgs function', function () {
+        var props = {
+            onClick: vi.fn(),
+        };
+        var getArgs = vi.fn();
+        var args = {};
+        getArgs.mockReturnValue(args);
+        var result = makeEventProps(props, getArgs);
+        result.onClick(fakeEvent);
+        expect(props.onClick).toHaveBeenCalledWith(fakeEvent, args);
+    });
+    it('should not filter out valid event props', function () {
+        var props = {
+            onClick: vi.fn(),
+        };
+        var result = makeEventProps(props);
+        // @ts-expect-no-error
+        result.onClick;
+    });
+    it('should filter out invalid event props', function () {
+        var props = {
+            someInvalidProp: vi.fn(),
+        };
+        var result = makeEventProps(props);
+        // @ts-expect-error-next-line
+        result.someInvalidProp;
+    });
+    it('should allow valid onClick handler to be passed', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-no-error
+        makeEventProps(props);
+    });
+    it('should not allow invalid onClick handler to be passed', function () {
+        var props = {
+            onClick: 'potato',
+        };
+        // @ts-expect-error-next-line
+        makeEventProps(props);
+    });
+    it('should allow onClick handler with extra args to be passed if getArgs is provided', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-no-error
+        makeEventProps(props, function () { return 'hello'; });
+    });
+    it('should not allow onClick handler with extra args to be passed if getArgs is not provided', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-error-next-line
+        makeEventProps(props);
+    });
+    it('should not allow onClick handler with extra args to be passed if getArgs is provided but returns different type', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-error-next-line
+        makeEventProps(props, function () { return 5; });
+    });
+    it('should allow div onClick handler to be passed to div', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event) {
+                // Intentionally empty
+            },
+        };
+        var result = makeEventProps(props);
+        // @ts-expect-no-error
+        _jsx("div", { onClick: result.onClick });
+    });
+    it('should not allow div onClick handler to be passed to button', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event) {
+                // Intentionally empty
+            },
+        };
+        var result = makeEventProps(props);
+        // @ts-expect-error-next-line
+        _jsx("button", { onClick: result.onClick });
+    });
+    it('should allow div onClick handler with extra args to be passed to div if getArgs is provided', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        var result = makeEventProps(props, function () { return 'hello'; });
+        // @ts-expect-no-error
+        _jsx("div", { onClick: result.onClick });
+    });
+    it('should not allow div onClick handler with extra args to be passed to button if getArgs is provided', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        var result = makeEventProps(props, function () { return 'hello'; });
+        // @ts-expect-error-next-line
+        _jsx("button", { onClick: result.onClick });
+    });
+    it('should allow onClick handler with valid extra args to be passed with args explicitly typed', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-no-error
+        makeEventProps(props, function () { return 'hello'; });
+    });
+    it('should not allow onClick handler with invalid extra args to be passed with args explicitly typed', function () {
+        var props = {
+            // eslint-disable-next-line @typescript-eslint/no-unused-vars
+            onClick: function (event, args) {
+                // Intentionally empty
+            },
+        };
+        // @ts-expect-error-next-line
+        makeEventProps(props, function () { return 'hello'; });
+    });
+    it('should allow getArgs returning valid type to be passed with args explicitly typed', function () {
+        var props = {};
+        // @ts-expect-no-error
+        makeEventProps(props, function () { return 'hello'; });
+    });
+    it('should not allow getArgs returning invalid type to be passed with args explicitly typed', function () {
+        var props = {};
+        // @ts-expect-error-next-line
+        makeEventProps(props, function () { return 5; });
+    });
+});
+describe('allEvents', function () {
+    it('should contain all events', function () {
+        var sortedAllEvents = new Set(__spreadArray([], allEvents, true).sort());
+        expect(sortedAllEvents).toMatchSnapshot();
+    });
+});
Index: node_modules/make-event-props/package.json
===================================================================
--- node_modules/make-event-props/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+{
+  "name": "make-event-props",
+  "version": "1.6.2",
+  "description": "Returns an object with on-event callback props curried with provided args.",
+  "type": "module",
+  "sideEffects": false,
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/esm/index.js",
+  "source": "./src/index.ts",
+  "types": "./dist/cjs/index.d.ts",
+  "exports": {
+    "import": "./dist/esm/index.js",
+    "require": "./dist/cjs/index.js"
+  },
+  "scripts": {
+    "build": "yarn build-esm && yarn build-cjs && yarn build-cjs-package",
+    "build-esm": "tsc --project tsconfig.build.json --outDir dist/esm",
+    "build-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs --verbatimModuleSyntax false",
+    "build-cjs-package": "echo '{\n  \"type\": \"commonjs\"\n}' > dist/cjs/package.json",
+    "clean": "rimraf dist",
+    "lint": "eslint .",
+    "prepack": "yarn clean && yarn build",
+    "prettier": "prettier --check . --cache",
+    "test": "yarn lint && yarn tsc && yarn prettier && yarn unit",
+    "tsc": "tsc --noEmit",
+    "unit": "vitest"
+  },
+  "keywords": [
+    "react",
+    "event",
+    "event props"
+  ],
+  "author": {
+    "name": "Wojciech Maj",
+    "email": "kontakt@wojtekmaj.pl"
+  },
+  "license": "MIT",
+  "devDependencies": {
+    "@types/react": "*",
+    "eslint": "^8.26.0",
+    "eslint-config-wojtekmaj": "^0.9.0",
+    "husky": "^8.0.0",
+    "lint-staged": "^14.0.0",
+    "prettier": "^3.0.0",
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0",
+    "rimraf": "^3.0.0",
+    "typescript": "^5.0.0",
+    "vitest": "^0.34.0"
+  },
+  "publishConfig": {
+    "access": "public",
+    "provenance": true
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/wojtekmaj/make-event-props.git"
+  },
+  "funding": "https://github.com/wojtekmaj/make-event-props?sponsor=1",
+  "packageManager": "yarn@3.1.0"
+}
Index: node_modules/make-event-props/src/__snapshots__/index.spec.tsx.snap
===================================================================
--- node_modules/make-event-props/src/__snapshots__/index.spec.tsx.snap	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/src/__snapshots__/index.spec.tsx.snap	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`allEvents > should contain all events 1`] = `
+Set {
+  "onAbort",
+  "onAnimationEnd",
+  "onAnimationIteration",
+  "onAnimationStart",
+  "onBlur",
+  "onCanPlay",
+  "onCanPlayThrough",
+  "onChange",
+  "onClick",
+  "onCompositionEnd",
+  "onCompositionStart",
+  "onCompositionUpdate",
+  "onContextMenu",
+  "onCopy",
+  "onCut",
+  "onDoubleClick",
+  "onDrag",
+  "onDragEnd",
+  "onDragEnter",
+  "onDragExit",
+  "onDragLeave",
+  "onDragOver",
+  "onDragStart",
+  "onDrop",
+  "onDurationChange",
+  "onEmptied",
+  "onEncrypted",
+  "onEnded",
+  "onError",
+  "onFocus",
+  "onGotPointerCapture",
+  "onInput",
+  "onInvalid",
+  "onKeyDown",
+  "onKeyPress",
+  "onKeyUp",
+  "onLoad",
+  "onLoadStart",
+  "onLoadedData",
+  "onLoadedMetadata",
+  "onLostPointerCapture",
+  "onMouseDown",
+  "onMouseEnter",
+  "onMouseLeave",
+  "onMouseMove",
+  "onMouseOut",
+  "onMouseOver",
+  "onMouseUp",
+  "onPaste",
+  "onPause",
+  "onPlay",
+  "onPlaying",
+  "onPointerCancel",
+  "onPointerDown",
+  "onPointerEnter",
+  "onPointerLeave",
+  "onPointerMove",
+  "onPointerOut",
+  "onPointerOver",
+  "onPointerUp",
+  "onProgress",
+  "onRateChange",
+  "onReset",
+  "onScroll",
+  "onSeeked",
+  "onSeeking",
+  "onSelect",
+  "onStalled",
+  "onSubmit",
+  "onSuspend",
+  "onTimeUpdate",
+  "onToggle",
+  "onTouchCancel",
+  "onTouchEnd",
+  "onTouchMove",
+  "onTouchStart",
+  "onTransitionEnd",
+  "onVolumeChange",
+  "onWaiting",
+  "onWheel",
+}
+`;
Index: node_modules/make-event-props/src/index.spec.tsx
===================================================================
--- node_modules/make-event-props/src/index.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/src/index.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,240 @@
+import { describe, expect, it, vi } from 'vitest';
+import React from 'react';
+
+import makeEventProps, { allEvents } from './index.js';
+
+describe('makeEventProps()', () => {
+  const fakeEvent = {};
+
+  it('returns object with valid and only valid event callbacks', () => {
+    const props = {
+      onClick: vi.fn(),
+      someInvalidProp: vi.fn(),
+    };
+    const result = makeEventProps(props);
+
+    expect(result).toMatchObject({ onClick: expect.any(Function) });
+  });
+
+  it('calls getArgs function on event invoke if given', () => {
+    const props = {
+      onClick: vi.fn(),
+      someInvalidProp: vi.fn(),
+    };
+    const getArgs = vi.fn();
+    const result = makeEventProps(props, getArgs);
+
+    // getArgs shall not be invoked before a given event is fired
+    expect(getArgs).not.toHaveBeenCalled();
+
+    result.onClick(fakeEvent);
+
+    expect(getArgs).toHaveBeenCalledTimes(1);
+    expect(getArgs).toHaveBeenCalledWith('onClick');
+  });
+
+  it('properly calls callbacks given in props given no getArgs function', () => {
+    const props = {
+      onClick: vi.fn(),
+    };
+    const result = makeEventProps(props);
+
+    result.onClick(fakeEvent);
+
+    expect(props.onClick).toHaveBeenCalledWith(fakeEvent);
+  });
+
+  it('properly calls callbacks given in props given getArgs function', () => {
+    const props = {
+      onClick: vi.fn(),
+    };
+    const getArgs = vi.fn();
+    const args = {};
+    getArgs.mockReturnValue(args);
+    const result = makeEventProps(props, getArgs);
+
+    result.onClick(fakeEvent);
+
+    expect(props.onClick).toHaveBeenCalledWith(fakeEvent, args);
+  });
+
+  it('should not filter out valid event props', () => {
+    const props = {
+      onClick: vi.fn(),
+    };
+
+    const result = makeEventProps(props);
+
+    // @ts-expect-no-error
+    result.onClick;
+  });
+
+  it('should filter out invalid event props', () => {
+    const props = {
+      someInvalidProp: vi.fn(),
+    };
+
+    const result = makeEventProps(props);
+
+    // @ts-expect-error-next-line
+    result.someInvalidProp;
+  });
+
+  it('should allow valid onClick handler to be passed', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent) => {
+        // Intentionally empty
+      },
+    };
+
+    // @ts-expect-no-error
+    makeEventProps(props);
+  });
+
+  it('should not allow invalid onClick handler to be passed', () => {
+    const props = {
+      onClick: 'potato',
+    };
+
+    // @ts-expect-error-next-line
+    makeEventProps(props);
+  });
+
+  it('should allow onClick handler with extra args to be passed if getArgs is provided', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent, args: string) => {
+        // Intentionally empty
+      },
+    };
+
+    // @ts-expect-no-error
+    makeEventProps(props, () => 'hello');
+  });
+
+  it('should not allow onClick handler with extra args to be passed if getArgs is not provided', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent, args: string) => {
+        // Intentionally empty
+      },
+    };
+
+    // @ts-expect-error-next-line
+    makeEventProps(props);
+  });
+
+  it('should not allow onClick handler with extra args to be passed if getArgs is provided but returns different type', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent, args: string) => {
+        // Intentionally empty
+      },
+    };
+
+    // @ts-expect-error-next-line
+    makeEventProps(props, () => 5);
+  });
+
+  it('should allow div onClick handler to be passed to div', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent<HTMLDivElement>) => {
+        // Intentionally empty
+      },
+    };
+
+    const result = makeEventProps(props);
+
+    // @ts-expect-no-error
+    <div onClick={result.onClick} />;
+  });
+
+  it('should not allow div onClick handler to be passed to button', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent<HTMLDivElement>) => {
+        // Intentionally empty
+      },
+    };
+
+    const result = makeEventProps(props);
+
+    // @ts-expect-error-next-line
+    <button onClick={result.onClick} />;
+  });
+
+  it('should allow div onClick handler with extra args to be passed to div if getArgs is provided', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent<HTMLDivElement>, args: string) => {
+        // Intentionally empty
+      },
+    };
+
+    const result = makeEventProps(props, () => 'hello');
+
+    // @ts-expect-no-error
+    <div onClick={result.onClick} />;
+  });
+
+  it('should not allow div onClick handler with extra args to be passed to button if getArgs is provided', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent<HTMLDivElement>, args: string) => {
+        // Intentionally empty
+      },
+    };
+
+    const result = makeEventProps(props, () => 'hello');
+
+    // @ts-expect-error-next-line
+    <button onClick={result.onClick} />;
+  });
+
+  it('should allow onClick handler with valid extra args to be passed with args explicitly typed', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent<HTMLDivElement>, args: string) => {
+        // Intentionally empty
+      },
+    };
+
+    // @ts-expect-no-error
+    makeEventProps<string>(props, () => 'hello');
+  });
+
+  it('should not allow onClick handler with invalid extra args to be passed with args explicitly typed', () => {
+    const props = {
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
+      onClick: (event: React.MouseEvent<HTMLDivElement>, args: number) => {
+        // Intentionally empty
+      },
+    };
+
+    // @ts-expect-error-next-line
+    makeEventProps<string>(props, () => 'hello');
+  });
+
+  it('should allow getArgs returning valid type to be passed with args explicitly typed', () => {
+    const props = {};
+
+    // @ts-expect-no-error
+    makeEventProps<string>(props, () => 'hello');
+  });
+
+  it('should not allow getArgs returning invalid type to be passed with args explicitly typed', () => {
+    const props = {};
+
+    // @ts-expect-error-next-line
+    makeEventProps<string>(props, () => 5);
+  });
+});
+
+describe('allEvents', () => {
+  it('should contain all events', () => {
+    const sortedAllEvents = new Set([...allEvents].sort());
+    expect(sortedAllEvents).toMatchSnapshot();
+  });
+});
Index: node_modules/make-event-props/src/index.ts
===================================================================
--- node_modules/make-event-props/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/make-event-props/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,167 @@
+// As defined on the list of supported events: https://reactjs.org/docs/events.html
+export const clipboardEvents = ['onCopy', 'onCut', 'onPaste'] as const;
+export const compositionEvents = [
+  'onCompositionEnd',
+  'onCompositionStart',
+  'onCompositionUpdate',
+] as const;
+export const focusEvents = ['onFocus', 'onBlur'] as const;
+export const formEvents = ['onInput', 'onInvalid', 'onReset', 'onSubmit'] as const;
+export const imageEvents = ['onLoad', 'onError'] as const;
+export const keyboardEvents = ['onKeyDown', 'onKeyPress', 'onKeyUp'] as const;
+export const mediaEvents = [
+  'onAbort',
+  'onCanPlay',
+  'onCanPlayThrough',
+  'onDurationChange',
+  'onEmptied',
+  'onEncrypted',
+  'onEnded',
+  'onError',
+  'onLoadedData',
+  'onLoadedMetadata',
+  'onLoadStart',
+  'onPause',
+  'onPlay',
+  'onPlaying',
+  'onProgress',
+  'onRateChange',
+  'onSeeked',
+  'onSeeking',
+  'onStalled',
+  'onSuspend',
+  'onTimeUpdate',
+  'onVolumeChange',
+  'onWaiting',
+] as const;
+export const mouseEvents = [
+  'onClick',
+  'onContextMenu',
+  'onDoubleClick',
+  'onMouseDown',
+  'onMouseEnter',
+  'onMouseLeave',
+  'onMouseMove',
+  'onMouseOut',
+  'onMouseOver',
+  'onMouseUp',
+] as const;
+export const dragEvents = [
+  'onDrag',
+  'onDragEnd',
+  'onDragEnter',
+  'onDragExit',
+  'onDragLeave',
+  'onDragOver',
+  'onDragStart',
+  'onDrop',
+] as const;
+export const selectionEvents = ['onSelect'] as const;
+export const touchEvents = ['onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart'] as const;
+export const pointerEvents = [
+  'onPointerDown',
+  'onPointerMove',
+  'onPointerUp',
+  'onPointerCancel',
+  'onGotPointerCapture',
+  'onLostPointerCapture',
+  'onPointerEnter',
+  'onPointerLeave',
+  'onPointerOver',
+  'onPointerOut',
+] as const;
+export const uiEvents = ['onScroll'] as const;
+export const wheelEvents = ['onWheel'] as const;
+export const animationEvents = [
+  'onAnimationStart',
+  'onAnimationEnd',
+  'onAnimationIteration',
+] as const;
+export const transitionEvents = ['onTransitionEnd'] as const;
+export const otherEvents = ['onToggle'] as const;
+export const changeEvents = ['onChange'] as const;
+
+export const allEvents = [
+  ...clipboardEvents,
+  ...compositionEvents,
+  ...focusEvents,
+  ...formEvents,
+  ...imageEvents,
+  ...keyboardEvents,
+  ...mediaEvents,
+  ...mouseEvents,
+  ...dragEvents,
+  ...selectionEvents,
+  ...touchEvents,
+  ...pointerEvents,
+  ...uiEvents,
+  ...wheelEvents,
+  ...animationEvents,
+  ...transitionEvents,
+  ...changeEvents,
+  ...otherEvents,
+] as const;
+
+type AllEvents = (typeof allEvents)[number];
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+type EventHandler<ArgsType> = (event: any, args: ArgsType) => void;
+
+// Creates inferred type for event handler without args.
+type EventHandlerWithoutArgs<ArgsType, OriginalEventHandler> = OriginalEventHandler extends (
+  event: infer Event,
+  args: ArgsType,
+) => void
+  ? (event: Event) => void
+  : never;
+
+export type EventProps<ArgsType> = {
+  [K in AllEvents]?: EventHandler<ArgsType>;
+};
+
+type Props<ArgsType> = Record<string, unknown> & EventProps<ArgsType>;
+
+type EventPropsWithoutArgs<ArgsType, PropsType> = {
+  [K in keyof PropsType as K extends AllEvents ? K : never]: EventHandlerWithoutArgs<
+    ArgsType,
+    PropsType[K]
+  >;
+};
+
+/**
+ * Returns an object with on-event callback props curried with provided args.
+ * @param {Object} props Props passed to a component.
+ * @param {Function=} getArgs A function that returns argument(s) on-event callbacks
+ *   shall be curried with.
+ */
+export default function makeEventProps<
+  ArgsType,
+  PropsType extends Props<ArgsType> = Props<ArgsType>,
+>(
+  props: PropsType,
+  getArgs?: (eventName: string) => ArgsType,
+): EventPropsWithoutArgs<ArgsType, PropsType> {
+  const eventProps: EventPropsWithoutArgs<ArgsType, PropsType> = {} as EventPropsWithoutArgs<
+    ArgsType,
+    PropsType
+  >;
+
+  allEvents.forEach((eventName) => {
+    type EventHandlerType = EventPropsWithoutArgs<ArgsType, PropsType>[typeof eventName];
+
+    const eventHandler = props[eventName];
+
+    if (!eventHandler) {
+      return;
+    }
+
+    if (getArgs) {
+      eventProps[eventName] = ((event) =>
+        eventHandler(event, getArgs(eventName))) as EventHandlerType;
+    } else {
+      eventProps[eventName] = eventHandler as EventHandlerType;
+    }
+  });
+
+  return eventProps;
+}
Index: node_modules/map-age-cleaner/dist/index.d.ts
===================================================================
--- node_modules/map-age-cleaner/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/map-age-cleaner/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+interface Entry {
+    [key: string]: any;
+}
+interface MaxAgeEntry extends Entry {
+    maxAge: number;
+}
+/**
+ * Automatically cleanup the items in the provided `map`. The property of the expiration timestamp should be named `maxAge`.
+ *
+ * @param map - Map instance which should be cleaned up.
+ */
+export default function mapAgeCleaner<K = any, V extends MaxAgeEntry = MaxAgeEntry>(map: Map<K, V>): any;
+/**
+ * Automatically cleanup the items in the provided `map`.
+ *
+ * @param map - Map instance which should be cleaned up.
+ * @param property - Name of the property which olds the expiry timestamp.
+ */
+export default function mapAgeCleaner<K = any, V = Entry>(map: Map<K, V>, property: string): any;
+export {};
Index: node_modules/map-age-cleaner/dist/index.js
===================================================================
--- node_modules/map-age-cleaner/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/map-age-cleaner/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,92 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const p_defer_1 = __importDefault(require("p-defer"));
+function mapAgeCleaner(map, property = 'maxAge') {
+    let processingKey;
+    let processingTimer;
+    let processingDeferred;
+    const cleanup = () => __awaiter(this, void 0, void 0, function* () {
+        if (processingKey !== undefined) {
+            // If we are already processing an item, we can safely exit
+            return;
+        }
+        const setupTimer = (item) => __awaiter(this, void 0, void 0, function* () {
+            processingDeferred = p_defer_1.default();
+            const delay = item[1][property] - Date.now();
+            if (delay <= 0) {
+                // Remove the item immediately if the delay is equal to or below 0
+                map.delete(item[0]);
+                processingDeferred.resolve();
+                return;
+            }
+            // Keep track of the current processed key
+            processingKey = item[0];
+            processingTimer = setTimeout(() => {
+                // Remove the item when the timeout fires
+                map.delete(item[0]);
+                if (processingDeferred) {
+                    processingDeferred.resolve();
+                }
+            }, delay);
+            // tslint:disable-next-line:strict-type-predicates
+            if (typeof processingTimer.unref === 'function') {
+                // Don't hold up the process from exiting
+                processingTimer.unref();
+            }
+            return processingDeferred.promise;
+        });
+        try {
+            for (const entry of map) {
+                yield setupTimer(entry);
+            }
+        }
+        catch (_a) {
+            // Do nothing if an error occurs, this means the timer was cleaned up and we should stop processing
+        }
+        processingKey = undefined;
+    });
+    const reset = () => {
+        processingKey = undefined;
+        if (processingTimer !== undefined) {
+            clearTimeout(processingTimer);
+            processingTimer = undefined;
+        }
+        if (processingDeferred !== undefined) { // tslint:disable-line:early-exit
+            processingDeferred.reject(undefined);
+            processingDeferred = undefined;
+        }
+    };
+    const originalSet = map.set.bind(map);
+    map.set = (key, value) => {
+        if (map.has(key)) {
+            // If the key already exist, remove it so we can add it back at the end of the map.
+            map.delete(key);
+        }
+        // Call the original `map.set`
+        const result = originalSet(key, value);
+        // If we are already processing a key and the key added is the current processed key, stop processing it
+        if (processingKey && processingKey === key) {
+            reset();
+        }
+        // Always run the cleanup method in case it wasn't started yet
+        cleanup(); // tslint:disable-line:no-floating-promises
+        return result;
+    };
+    cleanup(); // tslint:disable-line:no-floating-promises
+    return map;
+}
+exports.default = mapAgeCleaner;
+// Add support for CJS
+module.exports = mapAgeCleaner;
+module.exports.default = mapAgeCleaner;
Index: node_modules/map-age-cleaner/license
===================================================================
--- node_modules/map-age-cleaner/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/map-age-cleaner/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sam Verschueren <sam.verschueren@gmail.com> (github.com/SamVerschueren)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: node_modules/map-age-cleaner/package.json
===================================================================
--- node_modules/map-age-cleaner/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/map-age-cleaner/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+{
+	"name": "map-age-cleaner",
+	"version": "0.1.3",
+	"description": "Automatically cleanup expired items in a Map",
+	"license": "MIT",
+	"repository": "SamVerschueren/map-age-cleaner",
+	"author": {
+		"name": "Sam Verschueren",
+		"email": "sam.verschueren@gmail.com",
+		"url": "github.com/SamVerschueren"
+	},
+	"main": "dist/index.js",
+	"engines": {
+		"node": ">=6"
+	},
+	"scripts": {
+		"prepublishOnly": "npm run build",
+		"pretest": "npm run build -- --sourceMap",
+		"test": "npm run lint && nyc ava dist/test.js",
+		"lint": "tslint --format stylish --project .",
+		"build": "npm run clean && tsc",
+		"clean": "del-cli dist"
+	},
+	"files": [
+		"dist/index.js",
+		"dist/index.d.ts"
+	],
+	"keywords": [
+		"map",
+		"age",
+		"cleaner",
+		"maxage",
+		"expire",
+		"expiration",
+		"expiring"
+	],
+	"dependencies": {
+		"p-defer": "^1.0.0"
+	},
+	"devDependencies": {
+		"@types/delay": "^2.0.1",
+		"@types/node": "^10.7.1",
+		"ava": "^0.25.0",
+		"codecov": "^3.0.0",
+		"del-cli": "^1.1.0",
+		"delay": "^3.0.0",
+		"nyc": "^12.0.0",
+		"tslint": "^5.11.0",
+		"tslint-xo": "^0.9.0",
+		"typescript": "^3.0.1"
+	},
+	"typings": "dist/index.d.ts",
+	"sideEffects": false,
+	"nyc": {
+		"exclude": [
+			"dist/test.js"
+		]
+	}
+}
Index: node_modules/map-age-cleaner/readme.md
===================================================================
--- node_modules/map-age-cleaner/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/map-age-cleaner/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+# map-age-cleaner
+
+[![Build Status](https://travis-ci.org/SamVerschueren/map-age-cleaner.svg?branch=master)](https://travis-ci.org/SamVerschueren/map-age-cleaner) [![codecov](https://codecov.io/gh/SamVerschueren/map-age-cleaner/badge.svg?branch=master)](https://codecov.io/gh/SamVerschueren/map-age-cleaner?branch=master)
+
+> Automatically cleanup expired items in a Map
+
+
+## Install
+
+```
+$ npm install map-age-cleaner
+```
+
+
+## Usage
+
+```js
+import mapAgeCleaner from 'map-age-cleaner';
+
+const map = new Map([
+	['unicorn', {data: '🦄', maxAge: Date.now() + 1000}]
+]);
+
+mapAgeCleaner(map);
+
+map.has('unicorn');
+//=> true
+
+// Wait for 1 second...
+
+map.has('unicorn');
+//=> false
+```
+
+> **Note**: Items have to be ordered ascending based on the expiry property. This means that the item which will be expired first, should be in the first position of the `Map`.
+
+
+## API
+
+### mapAgeCleaner(map, [property])
+
+Returns the `Map` instance.
+
+#### map
+
+Type: `Map`
+
+Map instance which should be cleaned up.
+
+#### property
+
+Type: `string`<br>
+Default: `maxAge`
+
+Name of the property which olds the expiry timestamp.
+
+
+## Related
+
+- [expiry-map](https://github.com/SamVerschueren/expiry-map) - A `Map` implementation with expirable items
+- [expiry-set](https://github.com/SamVerschueren/expiry-set) - A `Set` implementation with expirable keys
+- [mem](https://github.com/sindresorhus/mem) - Memoize functions
+
+
+## License
+
+MIT © [Sam Verschueren](https://github.com/SamVerschueren)
Index: node_modules/mem/dist/index.d.ts
===================================================================
--- node_modules/mem/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mem/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,118 @@
+declare type AnyFunction = (...arguments_: any) => any;
+interface CacheStorageContent<ValueType> {
+    data: ValueType;
+    maxAge: number;
+}
+interface CacheStorage<KeyType, ValueType> {
+    has: (key: KeyType) => boolean;
+    get: (key: KeyType) => CacheStorageContent<ValueType> | undefined;
+    set: (key: KeyType, value: CacheStorageContent<ValueType>) => void;
+    delete: (key: KeyType) => void;
+    clear?: () => void;
+}
+interface Options<FunctionToMemoize extends AnyFunction, CacheKeyType> {
+    /**
+    Milliseconds until the cache expires.
+
+    @default Infinity
+    */
+    readonly maxAge?: number;
+    /**
+    Determines the cache key for storing the result based on the function arguments. By default, __only the first argument is considered__ and it only works with [primitives](https://developer.mozilla.org/en-US/docs/Glossary/Primitive).
+
+    A `cacheKey` function can return any type supported by `Map` (or whatever structure you use in the `cache` option).
+
+    You can have it cache **all** the arguments by value with `JSON.stringify`, if they are compatible:
+
+    ```
+    import mem = require('mem');
+
+    mem(function_, {cacheKey: JSON.stringify});
+    ```
+
+    Or you can use a more full-featured serializer like [serialize-javascript](https://github.com/yahoo/serialize-javascript) to add support for `RegExp`, `Date` and so on.
+
+    ```
+    import mem = require('mem');
+    import serializeJavascript = require('serialize-javascript');
+
+    mem(function_, {cacheKey: serializeJavascript});
+    ```
+
+    @default arguments_ => arguments_[0]
+    @example arguments_ => JSON.stringify(arguments_)
+    */
+    readonly cacheKey?: (arguments_: Parameters<FunctionToMemoize>) => CacheKeyType;
+    /**
+    Use a different cache storage. Must implement the following methods: `.has(key)`, `.get(key)`, `.set(key, value)`, `.delete(key)`, and optionally `.clear()`. You could for example use a `WeakMap` instead or [`quick-lru`](https://github.com/sindresorhus/quick-lru) for a LRU cache.
+
+    @default new Map()
+    @example new WeakMap()
+    */
+    readonly cache?: CacheStorage<CacheKeyType, ReturnType<FunctionToMemoize>>;
+}
+/**
+[Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input.
+
+@param fn - Function to be memoized.
+
+@example
+```
+import mem = require('mem');
+
+let i = 0;
+const counter = () => ++i;
+const memoized = mem(counter);
+
+memoized('foo');
+//=> 1
+
+// Cached as it's the same arguments
+memoized('foo');
+//=> 1
+
+// Not cached anymore as the arguments changed
+memoized('bar');
+//=> 2
+
+memoized('bar');
+//=> 2
+```
+*/
+declare const mem: {
+    <FunctionToMemoize extends AnyFunction, CacheKeyType>(fn: FunctionToMemoize, { cacheKey, cache, maxAge }?: Options<FunctionToMemoize, CacheKeyType>): FunctionToMemoize;
+    /**
+    @returns A [decorator](https://github.com/tc39/proposal-decorators) to memoize class methods or static class methods.
+    
+    @example
+    ```
+    import mem = require('mem');
+    
+    class Example {
+        index = 0
+    
+        @mem.decorator()
+        counter() {
+            return ++this.index;
+        }
+    }
+    
+    class ExampleWithOptions {
+        index = 0
+    
+        @mem.decorator({maxAge: 1000})
+        counter() {
+            return ++this.index;
+        }
+    }
+    ```
+    */
+    decorator<FunctionToMemoize_1 extends AnyFunction, CacheKeyType_1>(options?: Options<FunctionToMemoize_1, CacheKeyType_1>): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
+    /**
+    Clear all cached data of a memoized function.
+    
+    @param fn - Memoized function.
+    */
+    clear(fn: AnyFunction): void;
+};
+export = mem;
Index: node_modules/mem/dist/index.js
===================================================================
--- node_modules/mem/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mem/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,116 @@
+'use strict';
+const mimicFn = require("mimic-fn");
+const mapAgeCleaner = require("map-age-cleaner");
+const decoratorInstanceMap = new WeakMap();
+const cacheStore = new WeakMap();
+/**
+[Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input.
+
+@param fn - Function to be memoized.
+
+@example
+```
+import mem = require('mem');
+
+let i = 0;
+const counter = () => ++i;
+const memoized = mem(counter);
+
+memoized('foo');
+//=> 1
+
+// Cached as it's the same arguments
+memoized('foo');
+//=> 1
+
+// Not cached anymore as the arguments changed
+memoized('bar');
+//=> 2
+
+memoized('bar');
+//=> 2
+```
+*/
+const mem = (fn, { cacheKey, cache = new Map(), maxAge } = {}) => {
+    if (typeof maxAge === 'number') {
+        // TODO: Drop after https://github.com/SamVerschueren/map-age-cleaner/issues/5
+        // @ts-expect-error
+        mapAgeCleaner(cache);
+    }
+    const memoized = function (...arguments_) {
+        const key = cacheKey ? cacheKey(arguments_) : arguments_[0];
+        const cacheItem = cache.get(key);
+        if (cacheItem) {
+            return cacheItem.data;
+        }
+        const result = fn.apply(this, arguments_);
+        cache.set(key, {
+            data: result,
+            maxAge: maxAge ? Date.now() + maxAge : Number.POSITIVE_INFINITY
+        });
+        return result;
+    };
+    mimicFn(memoized, fn, {
+        ignoreNonConfigurable: true
+    });
+    cacheStore.set(memoized, cache);
+    return memoized;
+};
+/**
+@returns A [decorator](https://github.com/tc39/proposal-decorators) to memoize class methods or static class methods.
+
+@example
+```
+import mem = require('mem');
+
+class Example {
+    index = 0
+
+    @mem.decorator()
+    counter() {
+        return ++this.index;
+    }
+}
+
+class ExampleWithOptions {
+    index = 0
+
+    @mem.decorator({maxAge: 1000})
+    counter() {
+        return ++this.index;
+    }
+}
+```
+*/
+mem.decorator = (options = {}) => (target, propertyKey, descriptor) => {
+    const input = target[propertyKey];
+    if (typeof input !== 'function') {
+        throw new TypeError('The decorated value must be a function');
+    }
+    delete descriptor.value;
+    delete descriptor.writable;
+    descriptor.get = function () {
+        if (!decoratorInstanceMap.has(this)) {
+            const value = mem(input, options);
+            decoratorInstanceMap.set(this, value);
+            return value;
+        }
+        return decoratorInstanceMap.get(this);
+    };
+};
+/**
+Clear all cached data of a memoized function.
+
+@param fn - Memoized function.
+*/
+mem.clear = (fn) => {
+    const cache = cacheStore.get(fn);
+    if (!cache) {
+        throw new TypeError('Can\'t clear a function that was not memoized!');
+    }
+    if (typeof cache.clear !== 'function') {
+        throw new TypeError('The cache Map can\'t be cleared!');
+    }
+    cache.clear();
+};
+module.exports = mem;
Index: node_modules/mem/license
===================================================================
--- node_modules/mem/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mem/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: node_modules/mem/package.json
===================================================================
--- node_modules/mem/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mem/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+{
+	"name": "mem",
+	"version": "8.1.1",
+	"description": "Memoize functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input",
+	"license": "MIT",
+	"repository": "sindresorhus/mem",
+	"funding": "https://github.com/sindresorhus/mem?sponsor=1",
+	"author": {
+		"name": "Sindre Sorhus",
+		"email": "sindresorhus@gmail.com",
+		"url": "https://sindresorhus.com"
+	},
+	"engines": {
+		"node": ">=10"
+	},
+	"scripts": {
+		"test": "xo && npm run build && tsd && ava",
+		"build": "del-cli dist && tsc",
+		"prepack": "npm run build"
+	},
+	"main": "dist",
+	"types": "dist/index.d.ts",
+	"files": [
+		"dist/index.js",
+		"dist/index.d.ts"
+	],
+	"keywords": [
+		"memoize",
+		"function",
+		"mem",
+		"memoization",
+		"cache",
+		"caching",
+		"optimize",
+		"performance",
+		"ttl",
+		"expire",
+		"promise"
+	],
+	"dependencies": {
+		"map-age-cleaner": "^0.1.3",
+		"mimic-fn": "^3.1.0"
+	},
+	"devDependencies": {
+		"@ava/typescript": "^1.1.1",
+		"@sindresorhus/tsconfig": "^0.7.0",
+		"@types/serialize-javascript": "^4.0.0",
+		"ava": "^3.15.0",
+		"del-cli": "^3.0.1",
+		"delay": "^4.4.0",
+		"serialize-javascript": "^5.0.1",
+		"tsd": "^0.13.1",
+		"typescript": "^4.0.3",
+		"xo": "^0.38.2"
+	},
+	"ava": {
+		"files": [
+			"test.ts"
+		],
+		"timeout": "1m",
+		"typescript": {
+			"rewritePaths": {
+				"./": "dist/"
+			}
+		}
+	},
+	"xo": {
+		"rules": {
+			"@typescript-eslint/member-ordering": "off",
+			"@typescript-eslint/no-var-requires": "off",
+			"@typescript-eslint/no-empty-function": "off"
+		}
+	}
+}
Index: node_modules/mem/readme.md
===================================================================
--- node_modules/mem/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mem/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,287 @@
+# mem
+
+> [Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input
+
+Memory is automatically released when an item expires or the cache is cleared.
+
+By default, **only the first argument is considered** and it only works with [primitives](https://developer.mozilla.org/en-US/docs/Glossary/Primitive). If you need to cache multiple arguments or cache `object`s *by value*, have a look at alternative [caching strategies](#caching-strategy) below.
+
+## Install
+
+```
+$ npm install mem
+```
+
+## Usage
+
+```js
+const mem = require('mem');
+
+let i = 0;
+const counter = () => ++i;
+const memoized = mem(counter);
+
+memoized('foo');
+//=> 1
+
+// Cached as it's the same argument
+memoized('foo');
+//=> 1
+
+// Not cached anymore as the argument changed
+memoized('bar');
+//=> 2
+
+memoized('bar');
+//=> 2
+
+// Only the first argument is considered by default
+memoized('bar', 'foo');
+//=> 2
+```
+
+##### Works fine with promise returning functions
+
+```js
+const mem = require('mem');
+
+let i = 0;
+const counter = async () => ++i;
+const memoized = mem(counter);
+
+(async () => {
+	console.log(await memoized());
+	//=> 1
+
+	// The return value didn't increase as it's cached
+	console.log(await memoized());
+	//=> 1
+})();
+```
+
+```js
+const mem = require('mem');
+const got = require('got');
+const delay = require('delay');
+
+const memGot = mem(got, {maxAge: 1000});
+
+(async () => {
+	await memGot('https://sindresorhus.com');
+
+	// This call is cached
+	await memGot('https://sindresorhus.com');
+
+	await delay(2000);
+
+	// This call is not cached as the cache has expired
+	await memGot('https://sindresorhus.com');
+})();
+```
+
+### Caching strategy
+
+By default, only the first argument is compared via exact equality (`===`) to determine whether a call is identical.
+
+```js
+const power = mem((a, b) => Math.power(a, b));
+
+power(2, 2); // => 4, stored in cache with the key 2 (number)
+power(2, 3); // => 4, retrieved from cache at key 2 (number), it's wrong
+```
+
+You will have to use the `cache` and `cacheKey` options appropriate to your function. In this specific case, the following could work:
+
+```js
+const power = mem((a, b) => Math.power(a, b), {
+  cacheKey: arguments_ => arguments_.join(',')
+});
+
+power(2, 2); // => 4, stored in cache with the key '2,2' (both arguments as one string)
+power(2, 3); // => 8, stored in cache with the key '2,3'
+```
+
+More advanced examples follow.
+
+#### Example: Options-like argument
+
+If your function accepts an object, it won't be memoized out of the box:
+
+```js
+const heavyMemoizedOperation = mem(heavyOperation);
+
+heavyMemoizedOperation({full: true}); // Stored in cache with the object as key
+heavyMemoizedOperation({full: true}); // Stored in cache with the object as key, again
+// The objects look the same but for JS they're two different objects
+```
+
+You might want to serialize or hash them, for example using `JSON.stringify` or something like [serialize-javascript](https://github.com/yahoo/serialize-javascript), which can also serialize `RegExp`, `Date` and so on.
+
+```js
+const heavyMemoizedOperation = mem(heavyOperation, {cacheKey: JSON.stringify});
+
+heavyMemoizedOperation({full: true}); // Stored in cache with the key '[{"full":true}]' (string)
+heavyMemoizedOperation({full: true}); // Retrieved from cache
+```
+
+The same solution also works if it accepts multiple serializable objects:
+
+```js
+const heavyMemoizedOperation = mem(heavyOperation, {cacheKey: JSON.stringify});
+
+heavyMemoizedOperation('hello', {full: true}); // Stored in cache with the key '["hello",{"full":true}]' (string)
+heavyMemoizedOperation('hello', {full: true}); // Retrieved from cache
+```
+
+#### Example: Multiple non-serializable arguments
+
+If your function accepts multiple arguments that aren't supported by `JSON.stringify` (e.g. DOM elements and functions), you can instead extend the initial exact equality (`===`) to work on multiple arguments using [`many-keys-map`](https://github.com/fregante/many-keys-map):
+
+```js
+const ManyKeysMap = require('many-keys-map');
+
+const addListener = (emitter, eventName, listener) => emitter.on(eventName, listener);
+
+const addOneListener = mem(addListener, {
+	cacheKey: arguments_ => arguments_, // Use *all* the arguments as key
+	cache: new ManyKeysMap() // Correctly handles all the arguments for exact equality
+});
+
+addOneListener(header, 'click', console.log); // `addListener` is run, and it's cached with the `arguments` array as key
+addOneListener(header, 'click', console.log); // `addListener` is not run again
+addOneListener(mainContent, 'load', console.log); // `addListener` is run, and it's cached with the `arguments` array as key
+```
+
+Better yet, if your function’s arguments are compatible with `WeakMap`, you should use [`deep-weak-map`](https://github.com/futpib/deep-weak-map) instead of `many-keys-map`. This will help avoid memory leaks.
+
+## API
+
+### mem(fn, options?)
+
+#### fn
+
+Type: `Function`
+
+Function to be memoized.
+
+#### options
+
+Type: `object`
+
+##### maxAge
+
+Type: `number`\
+Default: `Infinity`
+
+Milliseconds until the cache expires.
+
+##### cacheKey
+
+Type: `Function`\
+Default: `arguments_ => arguments_[0]`\
+Example: `arguments_ => JSON.stringify(arguments_)`
+
+Determines the cache key for storing the result based on the function arguments. By default, **only the first argument is considered**.
+
+A `cacheKey` function can return any type supported by `Map` (or whatever structure you use in the `cache` option).
+
+Refer to the [caching strategies](#caching-strategy) section for more information.
+
+##### cache
+
+Type: `object`\
+Default: `new Map()`
+
+Use a different cache storage. Must implement the following methods: `.has(key)`, `.get(key)`, `.set(key, value)`, `.delete(key)`, and optionally `.clear()`. You could for example use a `WeakMap` instead or [`quick-lru`](https://github.com/sindresorhus/quick-lru) for a LRU cache.
+
+Refer to the [caching strategies](#caching-strategy) section for more information.
+
+### mem.decorator(options)
+
+Returns a [decorator](https://github.com/tc39/proposal-decorators) to memoize class methods or static class methods.
+
+Notes:
+
+- Only class methods and getters/setters can be memoized, not regular functions (they aren't part of the proposal);
+- Only [TypeScript’s decorators](https://www.typescriptlang.org/docs/handbook/decorators.html#parameter-decorators) are supported, not [Babel’s](https://babeljs.io/docs/en/babel-plugin-proposal-decorators), which use a different version of the proposal;
+- Being an experimental feature, they need to be enabled with `--experimentalDecorators`; follow TypeScript’s docs.
+
+#### options
+
+Type: `object`
+
+Same as options for `mem()`.
+
+```ts
+import mem = require('mem');
+
+class Example {
+	index = 0
+
+	@mem.decorator()
+	counter() {
+		return ++this.index;
+	}
+}
+
+class ExampleWithOptions {
+	index = 0
+
+	@mem.decorator({maxAge: 1000})
+	counter() {
+		return ++this.index;
+	}
+}
+```
+
+### mem.clear(fn)
+
+Clear all cached data of a memoized function.
+
+#### fn
+
+Type: `Function`
+
+Memoized function.
+
+## Tips
+
+### Cache statistics
+
+If you want to know how many times your cache had a hit or a miss, you can make use of [stats-map](https://github.com/SamVerschueren/stats-map) as a replacement for the default cache.
+
+#### Example
+
+```js
+const mem = require('mem');
+const StatsMap = require('stats-map');
+const got = require('got');
+
+const cache = new StatsMap();
+const memGot = mem(got, {cache});
+
+(async () => {
+	await memGot('https://sindresorhus.com');
+	await memGot('https://sindresorhus.com');
+	await memGot('https://sindresorhus.com');
+
+	console.log(cache.stats);
+	//=> {hits: 2, misses: 1}
+})();
+```
+
+## Related
+
+- [p-memoize](https://github.com/sindresorhus/p-memoize) - Memoize promise-returning & async functions
+
+---
+
+<div align="center">
+	<b>
+		<a href="https://tidelift.com/subscription/pkg/npm-mem?utm_source=npm-mem&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
+	</b>
+	<br>
+	<sub>
+		Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
+	</sub>
+</div>
Index: node_modules/mimic-fn/index.d.ts
===================================================================
--- node_modules/mimic-fn/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mimic-fn/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+declare namespace mimicFn {
+	interface Options {
+		/**
+		Skip modifying [non-configurable properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor#Description) instead of throwing an error.
+
+		@default false
+		*/
+		readonly ignoreNonConfigurable?: boolean;
+	}
+}
+
+/**
+Modifies the `to` function to mimic the `from` function. Returns the `to` function.
+
+`name`, `displayName`, and any other properties of `from` are copied. The `length` property is not copied. Prototype, class, and inherited properties are copied.
+
+`to.toString()` will return the same as `from.toString()` but prepended with a `Wrapped with to()` comment.
+
+@param to - Mimicking function.
+@param from - Function to mimic.
+@returns The modified `to` function.
+
+@example
+```
+import mimicFn = require('mimic-fn');
+
+function foo() {}
+foo.unicorn = '🦄';
+
+function wrapper() {
+	return foo();
+}
+
+console.log(wrapper.name);
+//=> 'wrapper'
+
+mimicFn(wrapper, foo);
+
+console.log(wrapper.name);
+//=> 'foo'
+
+console.log(wrapper.unicorn);
+//=> '🦄'
+```
+*/
+declare function mimicFn<
+	ArgumentsType extends unknown[],
+	ReturnType,
+	FunctionType extends (...arguments: ArgumentsType) => ReturnType
+>(
+	to: (...arguments: ArgumentsType) => ReturnType,
+	from: FunctionType,
+	options?: mimicFn.Options,
+): FunctionType;
+
+export = mimicFn;
Index: node_modules/mimic-fn/index.js
===================================================================
--- node_modules/mimic-fn/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mimic-fn/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,75 @@
+'use strict';
+
+const copyProperty = (to, from, property, ignoreNonConfigurable) => {
+	// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.
+	// `Function#prototype` is non-writable and non-configurable so can never be modified.
+	if (property === 'length' || property === 'prototype') {
+		return;
+	}
+
+	// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.
+	if (property === 'arguments' || property === 'caller') {
+		return;
+	}
+
+	const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
+	const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
+
+	if (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
+		return;
+	}
+
+	Object.defineProperty(to, property, fromDescriptor);
+};
+
+// `Object.defineProperty()` throws if the property exists, is not configurable and either:
+//  - one its descriptors is changed
+//  - it is non-writable and its value is changed
+const canCopyProperty = function (toDescriptor, fromDescriptor) {
+	return toDescriptor === undefined || toDescriptor.configurable || (
+		toDescriptor.writable === fromDescriptor.writable &&
+		toDescriptor.enumerable === fromDescriptor.enumerable &&
+		toDescriptor.configurable === fromDescriptor.configurable &&
+		(toDescriptor.writable || toDescriptor.value === fromDescriptor.value)
+	);
+};
+
+const changePrototype = (to, from) => {
+	const fromPrototype = Object.getPrototypeOf(from);
+	if (fromPrototype === Object.getPrototypeOf(to)) {
+		return;
+	}
+
+	Object.setPrototypeOf(to, fromPrototype);
+};
+
+const wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\n${fromBody}`;
+
+const toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');
+const toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');
+
+// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.
+// We use `bind()` instead of a closure for the same reason.
+// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.
+const changeToString = (to, from, name) => {
+	const withName = name === '' ? '' : `with ${name.trim()}() `;
+	const newToString = wrappedToString.bind(null, withName, from.toString());
+	// Ensure `to.toString.toString` is non-enumerable and has the same `same`
+	Object.defineProperty(newToString, 'name', toStringName);
+	Object.defineProperty(to, 'toString', {...toStringDescriptor, value: newToString});
+};
+
+const mimicFn = (to, from, {ignoreNonConfigurable = false} = {}) => {
+	const {name} = to;
+
+	for (const property of Reflect.ownKeys(from)) {
+		copyProperty(to, from, property, ignoreNonConfigurable);
+	}
+
+	changePrototype(to, from);
+	changeToString(to, from, name);
+
+	return to;
+};
+
+module.exports = mimicFn;
Index: node_modules/mimic-fn/license
===================================================================
--- node_modules/mimic-fn/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mimic-fn/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: node_modules/mimic-fn/package.json
===================================================================
--- node_modules/mimic-fn/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mimic-fn/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+{
+	"name": "mimic-fn",
+	"version": "3.1.0",
+	"description": "Make a function mimic another one",
+	"license": "MIT",
+	"repository": "sindresorhus/mimic-fn",
+	"author": {
+		"name": "Sindre Sorhus",
+		"email": "sindresorhus@gmail.com",
+		"url": "sindresorhus.com"
+	},
+	"engines": {
+		"node": ">=8"
+	},
+	"scripts": {
+		"test": "xo && ava && tsd"
+	},
+	"files": [
+		"index.js",
+		"index.d.ts"
+	],
+	"keywords": [
+		"function",
+		"mimic",
+		"imitate",
+		"rename",
+		"copy",
+		"inherit",
+		"properties",
+		"name",
+		"func",
+		"fn",
+		"set",
+		"infer",
+		"change"
+	],
+	"devDependencies": {
+		"ava": "^2.1.0",
+		"tsd": "^0.7.1",
+		"xo": "^0.24.0"
+	}
+}
Index: node_modules/mimic-fn/readme.md
===================================================================
--- node_modules/mimic-fn/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/mimic-fn/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,95 @@
+<img src="media/logo.svg" alt="mimic-fn" width="400">
+<br>
+
+[![Build Status](https://travis-ci.org/sindresorhus/mimic-fn.svg?branch=master)](https://travis-ci.org/sindresorhus/mimic-fn)
+
+> Make a function mimic another one
+
+Useful when you wrap a function in another function and like to preserve the original name and other properties.
+
+
+## Install
+
+```
+$ npm install mimic-fn
+```
+
+
+## Usage
+
+```js
+const mimicFn = require('mimic-fn');
+
+function foo() {}
+foo.unicorn = '🦄';
+
+function wrapper() {
+	return foo();
+}
+
+console.log(wrapper.name);
+//=> 'wrapper'
+
+mimicFn(wrapper, foo);
+
+console.log(wrapper.name);
+//=> 'foo'
+
+console.log(wrapper.unicorn);
+//=> '🦄'
+
+console.log(String(wrapper));
+//=> '/* Wrapped with wrapper() */\nfunction foo() {}'
+```
+
+
+## API
+
+### mimicFn(to, from, options?)
+
+Modifies the `to` function to mimic the `from` function. Returns the `to` function.
+
+`name`, `displayName`, and any other properties of `from` are copied. The `length` property is not copied. Prototype, class, and inherited properties are copied.
+
+`to.toString()` will return the same as `from.toString()` but prepended with a `Wrapped with to()` comment.
+
+#### to
+
+Type: `Function`
+
+Mimicking function.
+
+#### from
+
+Type: `Function`
+
+Function to mimic.
+
+#### options
+
+Type: `object`
+
+##### ignoreNonConfigurable
+
+Type: `boolean`<br>
+Default: `false`
+
+Skip modifying [non-configurable properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor#Description) instead of throwing an error.
+
+## Related
+
+- [rename-fn](https://github.com/sindresorhus/rename-fn) - Rename a function
+- [keep-func-props](https://github.com/ehmicky/keep-func-props) - Wrap a function without changing its name and other properties
+
+
+---
+
+<div align="center">
+	<b>
+		<a href="https://tidelift.com/subscription/pkg/npm-mimic-fn?utm_source=npm-mimic-fn&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
+	</b>
+	<br>
+	<sub>
+		Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
+	</sub>
+</div>
Index: node_modules/p-defer/index.js
===================================================================
--- node_modules/p-defer/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/p-defer/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+'use strict';
+module.exports = () => {
+	const ret = {};
+
+	ret.promise = new Promise((resolve, reject) => {
+		ret.resolve = resolve;
+		ret.reject = reject;
+	});
+
+	return ret;
+};
Index: node_modules/p-defer/license
===================================================================
--- node_modules/p-defer/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/p-defer/license	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
Index: node_modules/p-defer/package.json
===================================================================
--- node_modules/p-defer/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/p-defer/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+{
+  "name": "p-defer",
+  "version": "1.0.0",
+  "description": "Create a deferred promise",
+  "license": "MIT",
+  "repository": "sindresorhus/p-defer",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "files": [
+    "index.js"
+  ],
+  "keywords": [
+    "promise",
+    "defer",
+    "deferred",
+    "resolve",
+    "reject",
+    "lazy",
+    "later",
+    "async",
+    "await",
+    "promises",
+    "bluebird"
+  ],
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  },
+  "xo": {
+    "esnext": true
+  }
+}
Index: node_modules/p-defer/readme.md
===================================================================
--- node_modules/p-defer/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/p-defer/readme.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+# p-defer [![Build Status](https://travis-ci.org/sindresorhus/p-defer.svg?branch=master)](https://travis-ci.org/sindresorhus/p-defer)
+
+> Create a deferred promise
+
+[**Don't use this unless you know what you're doing!**](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns#the-deferred-anti-pattern) Prefer the `Promise` constructor.
+
+
+## Install
+
+```
+$ npm install --save p-defer
+```
+
+
+## Usage
+
+```js
+const pDefer = require('p-defer');
+
+function delay(ms) {
+	const deferred = pDefer();
+	setTimeout(deferred.resolve, ms, '🦄');
+	return deferred.promise;
+}
+
+delay(100).then(console.log);
+//=> '🦄'
+```
+
+*The above is just an example. Use [`delay`](https://github.com/sindresorhus/delay) if you need to delay a promise.*
+
+
+## API
+
+### pDefer()
+
+Returns an `Object` with a `promise` property and functions to `resolve()` and `reject()`.
+
+
+## Related
+
+- [More…](https://github.com/sindresorhus/promise-fun)
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
Index: node_modules/pg-cloudflare/README.md
===================================================================
--- node_modules/pg-cloudflare/README.md	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/pg-cloudflare/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -20,5 +20,5 @@
   export default {
     ...,
-    resolve: { conditionNames: [..., "cloudflare"] },
+    resolve: { conditionNames: [..., "workerd"] },
     plugins: [
       // ignore cloudflare:sockets imports
@@ -30,9 +30,13 @@
   ```
 - `vite.config.js`
+
+  > [!NOTE]
+  > If you are using the [Cloudflare Vite plugin](https://www.npmjs.com/package/@cloudflare/vite-plugin) then the following configuration is not necessary.
+
   ```js
   export default defineConfig({
     ...,
     resolve: {
-      conditions: [..., "cloudflare"],
+      conditions: [..., "workerd"],
     },
     build: {
@@ -45,9 +49,10 @@
   })
   ```
+
 - `rollup.config.js`
   ```js
   export default defineConfig({
     ...,
-    plugins: [..., nodeResolve({ exportConditions: [..., 'cloudflare'] })],
+    plugins: [..., nodeResolve({ exportConditions: [..., 'workerd'] })],
     // don't try to bundle cloudflare:sockets
     external: [..., 'cloudflare:sockets'],
@@ -58,5 +63,5 @@
   await esbuild.build({
     ...,
-    conditions: [..., 'cloudflare'],
+    conditions: [..., 'workerd'],
   })
   ```
Index: node_modules/pg-cloudflare/package.json
===================================================================
--- node_modules/pg-cloudflare/package.json	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/pg-cloudflare/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,5 +1,5 @@
 {
   "name": "pg-cloudflare",
-  "version": "1.2.6",
+  "version": "1.2.7",
   "description": "A socket implementation that can run on Cloudflare Workers using native TCP connections.",
   "main": "dist/index.js",
@@ -12,5 +12,5 @@
   "exports": {
     ".": {
-      "cloudflare": {
+      "workerd": {
         "import": "./esm/index.mjs",
         "require": "./dist/index.js"
@@ -35,4 +35,4 @@
     "/esm"
   ],
-  "gitHead": "cd877a57612a39335a97b593111710d26126279d"
+  "gitHead": "8f8e7315e8f7c1bb01e98fdb41c8c92585510782"
 }
Index: node_modules/pg-protocol/package.json
===================================================================
--- node_modules/pg-protocol/package.json	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/pg-protocol/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,5 +1,5 @@
 {
   "name": "pg-protocol",
-  "version": "1.10.2",
+  "version": "1.10.3",
   "description": "The postgres client/server binary protocol, implemented in TypeScript",
   "main": "dist/index.js",
@@ -11,9 +11,6 @@
       "default": "./dist/index.js"
     },
-    "./dist/*": {
-      "import": "./dist/*",
-      "require": "./dist/*",
-      "default": "./dist/*"
-    }
+    "./dist/*": "./dist/*.js",
+    "./dist/*.js": "./dist/*.js"
   },
   "license": "MIT",
@@ -45,4 +42,4 @@
     "/esm"
   ],
-  "gitHead": "1a25d128177dd7c54dc4652bbb92ac7986306e3f"
+  "gitHead": "8f8e7315e8f7c1bb01e98fdb41c8c92585510782"
 }
Index: node_modules/pg/lib/client.js
===================================================================
--- node_modules/pg/lib/client.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/pg/lib/client.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -324,5 +324,5 @@
   }
 
-  // if we receieve an error event or error message
+  // if we receive an error event or error message
   // during the connection process we handle it here
   _handleErrorWhileConnecting(err) {
Index: node_modules/pg/lib/native/query.js
===================================================================
--- node_modules/pg/lib/native/query.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/pg/lib/native/query.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -20,5 +20,5 @@
   // without setting singleRowMode to true
   // this has almost no meaning because libpq
-  // reads all rows into memory befor returning any
+  // reads all rows into memory before returning any
   this._emitRowEvents = false
   this.on(
Index: node_modules/pg/lib/query.js
===================================================================
--- node_modules/pg/lib/query.js	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/pg/lib/query.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -113,5 +113,5 @@
   // the backend will send an emptyQuery message but *not* a command complete message
   // since we pipeline sync immediately after execute we don't need to do anything here
-  // unless we have rows specified, in which case we did not pipeline the intial sync call
+  // unless we have rows specified, in which case we did not pipeline the initial sync call
   handleEmptyQuery(connection) {
     if (this.rows) {
Index: node_modules/pg/package.json
===================================================================
--- node_modules/pg/package.json	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ node_modules/pg/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,5 +1,5 @@
 {
   "name": "pg",
-  "version": "8.16.2",
+  "version": "8.16.3",
   "description": "PostgreSQL client - pure javascript & libpq with the same API",
   "keywords": [
@@ -29,14 +29,11 @@
       "default": "./package.json"
     },
-    "./lib/*": {
-      "import": "./lib/*",
-      "require": "./lib/*",
-      "default": "./lib/*"
-    }
+    "./lib/*": "./lib/*.js",
+    "./lib/*.js": "./lib/*.js"
   },
   "dependencies": {
     "pg-connection-string": "^2.9.1",
     "pg-pool": "^3.10.1",
-    "pg-protocol": "^1.10.2",
+    "pg-protocol": "^1.10.3",
     "pg-types": "2.2.0",
     "pgpass": "1.0.5"
@@ -54,5 +51,5 @@
   },
   "optionalDependencies": {
-    "pg-cloudflare": "^1.2.6"
+    "pg-cloudflare": "^1.2.7"
   },
   "peerDependencies": {
@@ -76,4 +73,4 @@
     "node": ">= 16.0.0"
   },
-  "gitHead": "1a25d128177dd7c54dc4652bbb92ac7986306e3f"
+  "gitHead": "8f8e7315e8f7c1bb01e98fdb41c8c92585510782"
 }
Index: node_modules/react-chartjs-2/LICENSE
===================================================================
--- node_modules/react-chartjs-2/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+Copyright 2020 Jeremy Ayerst
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: node_modules/react-chartjs-2/LICENSE.md
===================================================================
--- node_modules/react-chartjs-2/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Jeremy Ayerst
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/react-chartjs-2/README.md
===================================================================
--- node_modules/react-chartjs-2/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,73 @@
+# react-chartjs-2
+
+<img align="right" width="150" height="150" alt="Logo" src="website/static/img/logo.svg">
+
+React components for <a href="https://www.chartjs.org">Chart.js</a>, the most popular charting library.
+
+Supports Chart.js v4 and v3.
+
+[![NPM version][npm]][npm-url]
+[![Downloads][downloads]][downloads-url]
+[![Build status][build]][build-url]
+[![Coverage status][coverage]][coverage-url]
+[![Bundle size][size]][size-url]
+
+[npm]: https://img.shields.io/npm/v/react-chartjs-2.svg
+[npm-url]: https://www.npmjs.com/package/react-chartjs-2
+
+[downloads]: https://img.shields.io/npm/dm/react-chartjs-2.svg
+[downloads-url]: https://www.npmjs.com/package/react-chartjs-2
+
+[build]: https://img.shields.io/github/actions/workflow/status/reactchartjs/react-chartjs-2/ci.yml?branch=master
+[build-url]: https://github.com/reactchartjs/react-chartjs-2/actions
+
+[coverage]: https://img.shields.io/codecov/c/github/reactchartjs/react-chartjs-2.svg
+[coverage-url]: https://app.codecov.io/gh/reactchartjs/react-chartjs-2
+
+[size]: https://img.shields.io/bundlephobia/minzip/react-chartjs-2
+[size-url]: https://bundlephobia.com/package/react-chartjs-2
+
+<br />
+<a href="#quickstart">Quickstart</a>
+<span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
+<a href="#docs">Docs</a>
+<span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
+<a href="https://stackoverflow.com/questions/tagged/react-chartjs-2">Stack Overflow</a>
+<br />
+<hr />
+
+## Quickstart
+
+Install this library with peer dependencies:
+
+```bash
+pnpm add react-chartjs-2 chart.js
+# or
+yarn add react-chartjs-2 chart.js
+# or
+npm i react-chartjs-2 chart.js
+```
+
+We recommend using `chart.js@^4.0.0`.
+
+Then, import and use individual components:
+
+```jsx
+import { Doughnut } from 'react-chartjs-2';
+
+<Doughnut data={...} />
+```
+
+## Docs
+
+- [Migration to v4](https://react-chartjs-2.js.org/docs/migration-to-v4)
+- [Working with datasets](https://react-chartjs-2.js.org/docs/working-with-datasets)
+- [Working with events](https://react-chartjs-2.js.org/docs/working-with-events)
+- [FAQ](https://react-chartjs-2.js.org/faq)
+- [Components](https://react-chartjs-2.js.org/components)
+- [Examples](https://react-chartjs-2.js.org/examples)
+
+## License
+
+[MIT Licensed](LICENSE)
+Copyright (c) 2020 Jeremy Ayerst
Index: node_modules/react-chartjs-2/dist/chart.d.ts
===================================================================
--- node_modules/react-chartjs-2/dist/chart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/chart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import type { BaseChartComponent } from './types.js';
+export declare const Chart: BaseChartComponent;
+//# sourceMappingURL=chart.d.ts.map
Index: node_modules/react-chartjs-2/dist/chart.d.ts.map
===================================================================
--- node_modules/react-chartjs-2/dist/chart.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/chart.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../src/chart.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA4B,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA8G/E,eAAO,MAAM,KAAK,EAAiC,kBAAkB,CAAC"}
Index: node_modules/react-chartjs-2/dist/index.cjs
===================================================================
--- node_modules/react-chartjs-2/dist/index.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/index.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,193 @@
+'use strict';
+
+var React = require('react');
+var chart_js = require('chart.js');
+
+const defaultDatasetIdKey = 'label';
+function reforwardRef(ref, value) {
+    if (typeof ref === 'function') {
+        ref(value);
+    } else if (ref) {
+        ref.current = value;
+    }
+}
+function setOptions(chart, nextOptions) {
+    const options = chart.options;
+    if (options && nextOptions) {
+        Object.assign(options, nextOptions);
+    }
+}
+function setLabels(currentData, nextLabels) {
+    currentData.labels = nextLabels;
+}
+function setDatasets(currentData, nextDatasets) {
+    let datasetIdKey = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : defaultDatasetIdKey;
+    const addedDatasets = [];
+    currentData.datasets = nextDatasets.map((nextDataset)=>{
+        // given the new set, find it's current match
+        const currentDataset = currentData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]);
+        // There is no original to update, so simply add new one
+        if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {
+            return {
+                ...nextDataset
+            };
+        }
+        addedDatasets.push(currentDataset);
+        Object.assign(currentDataset, nextDataset);
+        return currentDataset;
+    });
+}
+function cloneData(data) {
+    let datasetIdKey = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : defaultDatasetIdKey;
+    const nextData = {
+        labels: [],
+        datasets: []
+    };
+    setLabels(nextData, data.labels);
+    setDatasets(nextData, data.datasets, datasetIdKey);
+    return nextData;
+}
+/**
+ * Get dataset from mouse click event
+ * @param chart - Chart.js instance
+ * @param event - Mouse click event
+ * @returns Dataset
+ */ function getDatasetAtEvent(chart, event) {
+    return chart.getElementsAtEventForMode(event.nativeEvent, 'dataset', {
+        intersect: true
+    }, false);
+}
+/**
+ * Get single dataset element from mouse click event
+ * @param chart - Chart.js instance
+ * @param event - Mouse click event
+ * @returns Dataset
+ */ function getElementAtEvent(chart, event) {
+    return chart.getElementsAtEventForMode(event.nativeEvent, 'nearest', {
+        intersect: true
+    }, false);
+}
+/**
+ * Get all dataset elements from mouse click event
+ * @param chart - Chart.js instance
+ * @param event - Mouse click event
+ * @returns Dataset
+ */ function getElementsAtEvent(chart, event) {
+    return chart.getElementsAtEventForMode(event.nativeEvent, 'index', {
+        intersect: true
+    }, false);
+}
+
+function ChartComponent(props, ref) {
+    const { height = 150, width = 300, redraw = false, datasetIdKey, type, data, options, plugins = [], fallbackContent, updateMode, ...canvasProps } = props;
+    const canvasRef = React.useRef(null);
+    const chartRef = React.useRef(null);
+    const renderChart = ()=>{
+        if (!canvasRef.current) return;
+        chartRef.current = new chart_js.Chart(canvasRef.current, {
+            type,
+            data: cloneData(data, datasetIdKey),
+            options: options && {
+                ...options
+            },
+            plugins
+        });
+        reforwardRef(ref, chartRef.current);
+    };
+    const destroyChart = ()=>{
+        reforwardRef(ref, null);
+        if (chartRef.current) {
+            chartRef.current.destroy();
+            chartRef.current = null;
+        }
+    };
+    React.useEffect(()=>{
+        if (!redraw && chartRef.current && options) {
+            setOptions(chartRef.current, options);
+        }
+    }, [
+        redraw,
+        options
+    ]);
+    React.useEffect(()=>{
+        if (!redraw && chartRef.current) {
+            setLabels(chartRef.current.config.data, data.labels);
+        }
+    }, [
+        redraw,
+        data.labels
+    ]);
+    React.useEffect(()=>{
+        if (!redraw && chartRef.current && data.datasets) {
+            setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);
+        }
+    }, [
+        redraw,
+        data.datasets
+    ]);
+    React.useEffect(()=>{
+        if (!chartRef.current) return;
+        if (redraw) {
+            destroyChart();
+            setTimeout(renderChart);
+        } else {
+            chartRef.current.update(updateMode);
+        }
+    }, [
+        redraw,
+        options,
+        data.labels,
+        data.datasets,
+        updateMode
+    ]);
+    React.useEffect(()=>{
+        if (!chartRef.current) return;
+        destroyChart();
+        setTimeout(renderChart);
+    }, [
+        type
+    ]);
+    React.useEffect(()=>{
+        renderChart();
+        return ()=>destroyChart();
+    }, []);
+    return /*#__PURE__*/ React.createElement("canvas", {
+        ref: canvasRef,
+        role: "img",
+        height: height,
+        width: width,
+        ...canvasProps
+    }, fallbackContent);
+}
+const Chart = /*#__PURE__*/ React.forwardRef(ChartComponent);
+
+function createTypedChart(type, registerables) {
+    chart_js.Chart.register(registerables);
+    return /*#__PURE__*/ React.forwardRef((props, ref)=>/*#__PURE__*/ React.createElement(Chart, {
+            ...props,
+            ref: ref,
+            type: type
+        }));
+}
+const Line = /* #__PURE__ */ createTypedChart('line', chart_js.LineController);
+const Bar = /* #__PURE__ */ createTypedChart('bar', chart_js.BarController);
+const Radar = /* #__PURE__ */ createTypedChart('radar', chart_js.RadarController);
+const Doughnut = /* #__PURE__ */ createTypedChart('doughnut', chart_js.DoughnutController);
+const PolarArea = /* #__PURE__ */ createTypedChart('polarArea', chart_js.PolarAreaController);
+const Bubble = /* #__PURE__ */ createTypedChart('bubble', chart_js.BubbleController);
+const Pie = /* #__PURE__ */ createTypedChart('pie', chart_js.PieController);
+const Scatter = /* #__PURE__ */ createTypedChart('scatter', chart_js.ScatterController);
+
+exports.Bar = Bar;
+exports.Bubble = Bubble;
+exports.Chart = Chart;
+exports.Doughnut = Doughnut;
+exports.Line = Line;
+exports.Pie = Pie;
+exports.PolarArea = PolarArea;
+exports.Radar = Radar;
+exports.Scatter = Scatter;
+exports.getDatasetAtEvent = getDatasetAtEvent;
+exports.getElementAtEvent = getElementAtEvent;
+exports.getElementsAtEvent = getElementsAtEvent;
+//# sourceMappingURL=index.cjs.map
Index: node_modules/react-chartjs-2/dist/index.cjs.map
===================================================================
--- node_modules/react-chartjs-2/dist/index.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/index.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.cjs","sources":["../src/utils.ts","../src/chart.tsx","../src/typedCharts.tsx"],"sourcesContent":["import type { MouseEvent } from 'react';\nimport type {\n  ChartType,\n  ChartData,\n  DefaultDataPoint,\n  ChartDataset,\n  ChartOptions,\n  Chart,\n} from 'chart.js';\n\nimport type { ForwardedRef } from './types.js';\n\nconst defaultDatasetIdKey = 'label';\n\nexport function reforwardRef<T>(ref: ForwardedRef<T>, value: T) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}\n\nexport function setOptions<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(chart: Chart<TType, TData, TLabel>, nextOptions: ChartOptions<TType>) {\n  const options = chart.options;\n\n  if (options && nextOptions) {\n    Object.assign(options, nextOptions);\n  }\n}\n\nexport function setLabels<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(\n  currentData: ChartData<TType, TData, TLabel>,\n  nextLabels: TLabel[] | undefined\n) {\n  currentData.labels = nextLabels;\n}\n\nexport function setDatasets<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(\n  currentData: ChartData<TType, TData, TLabel>,\n  nextDatasets: ChartDataset<TType, TData>[],\n  datasetIdKey = defaultDatasetIdKey\n) {\n  const addedDatasets: ChartDataset<TType, TData>[] = [];\n\n  currentData.datasets = nextDatasets.map(\n    (nextDataset: Record<string, unknown>) => {\n      // given the new set, find it's current match\n      const currentDataset = currentData.datasets.find(\n        (dataset: Record<string, unknown>) =>\n          dataset[datasetIdKey] === nextDataset[datasetIdKey]\n      );\n\n      // There is no original to update, so simply add new one\n      if (\n        !currentDataset ||\n        !nextDataset.data ||\n        addedDatasets.includes(currentDataset)\n      ) {\n        return { ...nextDataset } as ChartDataset<TType, TData>;\n      }\n\n      addedDatasets.push(currentDataset);\n\n      Object.assign(currentDataset, nextDataset);\n\n      return currentDataset;\n    }\n  );\n}\n\nexport function cloneData<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(data: ChartData<TType, TData, TLabel>, datasetIdKey = defaultDatasetIdKey) {\n  const nextData: ChartData<TType, TData, TLabel> = {\n    labels: [],\n    datasets: [],\n  };\n\n  setLabels(nextData, data.labels);\n  setDatasets(nextData, data.datasets, datasetIdKey);\n\n  return nextData;\n}\n\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getDatasetAtEvent(\n  chart: Chart,\n  event: MouseEvent<HTMLCanvasElement>\n) {\n  return chart.getElementsAtEventForMode(\n    event.nativeEvent,\n    'dataset',\n    { intersect: true },\n    false\n  );\n}\n\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementAtEvent(\n  chart: Chart,\n  event: MouseEvent<HTMLCanvasElement>\n) {\n  return chart.getElementsAtEventForMode(\n    event.nativeEvent,\n    'nearest',\n    { intersect: true },\n    false\n  );\n}\n\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementsAtEvent(\n  chart: Chart,\n  event: MouseEvent<HTMLCanvasElement>\n) {\n  return chart.getElementsAtEventForMode(\n    event.nativeEvent,\n    'index',\n    { intersect: true },\n    false\n  );\n}\n","import React, { useEffect, useRef, forwardRef } from 'react';\nimport { Chart as ChartJS } from 'chart.js';\nimport type { ChartType, DefaultDataPoint } from 'chart.js';\n\nimport type { ForwardedRef, ChartProps, BaseChartComponent } from './types.js';\nimport {\n  reforwardRef,\n  cloneData,\n  setOptions,\n  setLabels,\n  setDatasets,\n} from './utils.js';\n\nfunction ChartComponent<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(\n  props: ChartProps<TType, TData, TLabel>,\n  ref: ForwardedRef<ChartJS<TType, TData, TLabel>>\n) {\n  const {\n    height = 150,\n    width = 300,\n    redraw = false,\n    datasetIdKey,\n    type,\n    data,\n    options,\n    plugins = [],\n    fallbackContent,\n    updateMode,\n    ...canvasProps\n  } = props;\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const chartRef = useRef<ChartJS<TType, TData, TLabel> | null>(null);\n\n  const renderChart = () => {\n    if (!canvasRef.current) return;\n\n    chartRef.current = new ChartJS(canvasRef.current, {\n      type,\n      data: cloneData(data, datasetIdKey),\n      options: options && { ...options },\n      plugins,\n    });\n\n    reforwardRef(ref, chartRef.current);\n  };\n\n  const destroyChart = () => {\n    reforwardRef(ref, null);\n\n    if (chartRef.current) {\n      chartRef.current.destroy();\n      chartRef.current = null;\n    }\n  };\n\n  useEffect(() => {\n    if (!redraw && chartRef.current && options) {\n      setOptions(chartRef.current, options);\n    }\n  }, [redraw, options]);\n\n  useEffect(() => {\n    if (!redraw && chartRef.current) {\n      setLabels(chartRef.current.config.data, data.labels);\n    }\n  }, [redraw, data.labels]);\n\n  useEffect(() => {\n    if (!redraw && chartRef.current && data.datasets) {\n      setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);\n    }\n  }, [redraw, data.datasets]);\n\n  useEffect(() => {\n    if (!chartRef.current) return;\n\n    if (redraw) {\n      destroyChart();\n      setTimeout(renderChart);\n    } else {\n      chartRef.current.update(updateMode);\n    }\n  }, [redraw, options, data.labels, data.datasets, updateMode]);\n\n  useEffect(() => {\n    if (!chartRef.current) return;\n\n    destroyChart();\n    setTimeout(renderChart);\n  }, [type]);\n\n  useEffect(() => {\n    renderChart();\n\n    return () => destroyChart();\n  }, []);\n\n  return (\n    <canvas\n      ref={canvasRef}\n      role='img'\n      height={height}\n      width={width}\n      {...canvasProps}\n    >\n      {fallbackContent}\n    </canvas>\n  );\n}\n\nexport const Chart = forwardRef(ChartComponent) as BaseChartComponent;\n","import React, { forwardRef } from 'react';\nimport {\n  Chart as ChartJS,\n  LineController,\n  BarController,\n  RadarController,\n  DoughnutController,\n  PolarAreaController,\n  BubbleController,\n  PieController,\n  ScatterController,\n} from 'chart.js';\nimport type { ChartType, ChartComponentLike } from 'chart.js';\n\nimport type {\n  ChartProps,\n  ChartJSOrUndefined,\n  TypedChartComponent,\n} from './types.js';\nimport { Chart } from './chart.js';\n\nfunction createTypedChart<T extends ChartType>(\n  type: T,\n  registerables: ChartComponentLike\n) {\n  ChartJS.register(registerables);\n\n  return forwardRef<ChartJSOrUndefined<T>, Omit<ChartProps<T>, 'type'>>(\n    (props, ref) => <Chart {...props} ref={ref} type={type} />\n  ) as TypedChartComponent<T>;\n}\n\nexport const Line = /* #__PURE__ */ createTypedChart('line', LineController);\n\nexport const Bar = /* #__PURE__ */ createTypedChart('bar', BarController);\n\nexport const Radar = /* #__PURE__ */ createTypedChart('radar', RadarController);\n\nexport const Doughnut = /* #__PURE__ */ createTypedChart(\n  'doughnut',\n  DoughnutController\n);\n\nexport const PolarArea = /* #__PURE__ */ createTypedChart(\n  'polarArea',\n  PolarAreaController\n);\n\nexport const Bubble = /* #__PURE__ */ createTypedChart(\n  'bubble',\n  BubbleController\n);\n\nexport const Pie = /* #__PURE__ */ createTypedChart('pie', PieController);\n\nexport const Scatter = /* #__PURE__ */ createTypedChart(\n  'scatter',\n  ScatterController\n);\n"],"names":["defaultDatasetIdKey","reforwardRef","ref","value","current","setOptions","chart","nextOptions","options","Object","assign","setLabels","currentData","nextLabels","labels","setDatasets","nextDatasets","datasetIdKey","addedDatasets","datasets","map","nextDataset","currentDataset","find","dataset","data","includes","push","cloneData","nextData","getDatasetAtEvent","event","getElementsAtEventForMode","nativeEvent","intersect","getElementAtEvent","getElementsAtEvent","ChartComponent","props","height","width","redraw","type","plugins","fallbackContent","updateMode","canvasProps","canvasRef","useRef","chartRef","renderChart","ChartJS","destroyChart","destroy","useEffect","config","setTimeout","update","canvas","role","Chart","forwardRef","createTypedChart","registerables","register","Line","LineController","Bar","BarController","Radar","RadarController","Doughnut","DoughnutController","PolarArea","PolarAreaController","Bubble","BubbleController","Pie","PieController","Scatter","ScatterController"],"mappings":";;;;;AAYA,MAAMA,mBAAsB,GAAA,OAAA;AAErB,SAASC,YAAAA,CAAgBC,GAAoB,EAAEC,KAAQ,EAAA;IAC5D,IAAI,OAAOD,QAAQ,UAAY,EAAA;QAC7BA,GAAIC,CAAAA,KAAAA,CAAAA;AACN,KAAA,MAAO,IAAID,GAAK,EAAA;AACdA,QAAAA,GAAAA,CAAIE,OAAO,GAAGD,KAAAA;AAChB;AACF;AAEO,SAASE,UAAAA,CAIdC,KAAkC,EAAEC,WAAgC,EAAA;IACpE,MAAMC,OAAAA,GAAUF,MAAME,OAAO;AAE7B,IAAA,IAAIA,WAAWD,WAAa,EAAA;QAC1BE,MAAOC,CAAAA,MAAM,CAACF,OAASD,EAAAA,WAAAA,CAAAA;AACzB;AACF;AAEO,SAASI,SAAAA,CAKdC,WAA4C,EAC5CC,UAAgC,EAAA;AAEhCD,IAAAA,WAAAA,CAAYE,MAAM,GAAGD,UAAAA;AACvB;AAEO,SAASE,WAAAA,CAKdH,WAA4C,EAC5CI,YAA0C,EAAA;AAC1CC,IAAAA,IAAAA,YAAAA,GAAAA,SAAejB,CAAAA,MAAAA,GAAAA,CAAAA,IAAAA,SAAAA,CAAAA,CAAAA,CAAAA,KAAAA,KAAAA,CAAAA,GAAAA,SAAAA,CAAAA,CAAAA,CAAAA,GAAAA,mBAAAA;AAEf,IAAA,MAAMkB,gBAA8C,EAAE;AAEtDN,IAAAA,WAAAA,CAAYO,QAAQ,GAAGH,YAAaI,CAAAA,GAAG,CACrC,CAACC,WAAAA,GAAAA;;AAEC,QAAA,MAAMC,cAAiBV,GAAAA,WAAAA,CAAYO,QAAQ,CAACI,IAAI,CAC9C,CAACC,OACCA,GAAAA,OAAO,CAACP,YAAAA,CAAa,KAAKI,WAAW,CAACJ,YAAa,CAAA,CAAA;;QAIvD,IACE,CAACK,kBACD,CAACD,WAAAA,CAAYI,IAAI,IACjBP,aAAAA,CAAcQ,QAAQ,CAACJ,cACvB,CAAA,EAAA;YACA,OAAO;AAAE,gBAAA,GAAGD;AAAY,aAAA;AAC1B;AAEAH,QAAAA,aAAAA,CAAcS,IAAI,CAACL,cAAAA,CAAAA;QAEnBb,MAAOC,CAAAA,MAAM,CAACY,cAAgBD,EAAAA,WAAAA,CAAAA;QAE9B,OAAOC,cAAAA;AACT,KAAA,CAAA;AAEJ;AAEO,SAASM,UAIdH,IAAqC,EAAA;AAAER,IAAAA,IAAAA,YAAAA,GAAAA,SAAejB,CAAAA,MAAAA,GAAAA,CAAAA,IAAAA,SAAAA,CAAAA,CAAAA,CAAAA,KAAAA,KAAAA,CAAAA,GAAAA,SAAAA,CAAAA,CAAAA,CAAAA,GAAAA,mBAAAA;AACtD,IAAA,MAAM6B,QAA4C,GAAA;AAChDf,QAAAA,MAAAA,EAAQ,EAAE;AACVK,QAAAA,QAAAA,EAAU;AACZ,KAAA;IAEAR,SAAUkB,CAAAA,QAAAA,EAAUJ,KAAKX,MAAM,CAAA;IAC/BC,WAAYc,CAAAA,QAAAA,EAAUJ,IAAKN,CAAAA,QAAQ,EAAEF,YAAAA,CAAAA;IAErC,OAAOY,QAAAA;AACT;AAEA;;;;;AAKC,IACM,SAASC,iBACdxB,CAAAA,KAAY,EACZyB,KAAoC,EAAA;AAEpC,IAAA,OAAOzB,MAAM0B,yBAAyB,CACpCD,KAAME,CAAAA,WAAW,EACjB,SACA,EAAA;QAAEC,SAAW,EAAA;KACb,EAAA,KAAA,CAAA;AAEJ;AAEA;;;;;AAKC,IACM,SAASC,iBACd7B,CAAAA,KAAY,EACZyB,KAAoC,EAAA;AAEpC,IAAA,OAAOzB,MAAM0B,yBAAyB,CACpCD,KAAME,CAAAA,WAAW,EACjB,SACA,EAAA;QAAEC,SAAW,EAAA;KACb,EAAA,KAAA,CAAA;AAEJ;AAEA;;;;;AAKC,IACM,SAASE,kBACd9B,CAAAA,KAAY,EACZyB,KAAoC,EAAA;AAEpC,IAAA,OAAOzB,MAAM0B,yBAAyB,CACpCD,KAAME,CAAAA,WAAW,EACjB,OACA,EAAA;QAAEC,SAAW,EAAA;KACb,EAAA,KAAA,CAAA;AAEJ;;ACzIA,SAASG,cAAAA,CAKPC,KAAuC,EACvCpC,GAAgD,EAAA;IAEhD,MAAM,EACJqC,MAAS,GAAA,GAAG,EACZC,KAAAA,GAAQ,GAAG,EACXC,MAAS,GAAA,KAAK,EACdxB,YAAY,EACZyB,IAAI,EACJjB,IAAI,EACJjB,OAAO,EACPmC,OAAAA,GAAU,EAAE,EACZC,eAAe,EACfC,UAAU,EACV,GAAGC,WAAAA,EACJ,GAAGR,KAAAA;AACJ,IAAA,MAAMS,YAAYC,YAA0B,CAAA,IAAA,CAAA;AAC5C,IAAA,MAAMC,WAAWD,YAA6C,CAAA,IAAA,CAAA;AAE9D,IAAA,MAAME,WAAc,GAAA,IAAA;QAClB,IAAI,CAACH,SAAU3C,CAAAA,OAAO,EAAE;AAExB6C,QAAAA,QAAAA,CAAS7C,OAAO,GAAG,IAAI+C,cAAQJ,CAAAA,SAAAA,CAAU3C,OAAO,EAAE;AAChDsC,YAAAA,IAAAA;AACAjB,YAAAA,IAAAA,EAAMG,UAAUH,IAAMR,EAAAA,YAAAA,CAAAA;AACtBT,YAAAA,OAAAA,EAASA,OAAW,IAAA;AAAE,gBAAA,GAAGA;AAAQ,aAAA;AACjCmC,YAAAA;AACF,SAAA,CAAA;QAEA1C,YAAaC,CAAAA,GAAAA,EAAK+C,SAAS7C,OAAO,CAAA;AACpC,KAAA;AAEA,IAAA,MAAMgD,YAAe,GAAA,IAAA;AACnBnD,QAAAA,YAAAA,CAAaC,GAAK,EAAA,IAAA,CAAA;QAElB,IAAI+C,QAAAA,CAAS7C,OAAO,EAAE;YACpB6C,QAAS7C,CAAAA,OAAO,CAACiD,OAAO,EAAA;AACxBJ,YAAAA,QAAAA,CAAS7C,OAAO,GAAG,IAAA;AACrB;AACF,KAAA;IAEAkD,eAAU,CAAA,IAAA;AACR,QAAA,IAAI,CAACb,MAAAA,IAAUQ,QAAS7C,CAAAA,OAAO,IAAII,OAAS,EAAA;YAC1CH,UAAW4C,CAAAA,QAAAA,CAAS7C,OAAO,EAAEI,OAAAA,CAAAA;AAC/B;KACC,EAAA;AAACiC,QAAAA,MAAAA;AAAQjC,QAAAA;AAAQ,KAAA,CAAA;IAEpB8C,eAAU,CAAA,IAAA;AACR,QAAA,IAAI,CAACb,MAAAA,IAAUQ,QAAS7C,CAAAA,OAAO,EAAE;YAC/BO,SAAUsC,CAAAA,QAAAA,CAAS7C,OAAO,CAACmD,MAAM,CAAC9B,IAAI,EAAEA,KAAKX,MAAM,CAAA;AACrD;KACC,EAAA;AAAC2B,QAAAA,MAAAA;AAAQhB,QAAAA,IAAAA,CAAKX;AAAO,KAAA,CAAA;IAExBwC,eAAU,CAAA,IAAA;AACR,QAAA,IAAI,CAACb,MAAUQ,IAAAA,QAAAA,CAAS7C,OAAO,IAAIqB,IAAAA,CAAKN,QAAQ,EAAE;YAChDJ,WAAYkC,CAAAA,QAAAA,CAAS7C,OAAO,CAACmD,MAAM,CAAC9B,IAAI,EAAEA,IAAKN,CAAAA,QAAQ,EAAEF,YAAAA,CAAAA;AAC3D;KACC,EAAA;AAACwB,QAAAA,MAAAA;AAAQhB,QAAAA,IAAAA,CAAKN;AAAS,KAAA,CAAA;IAE1BmC,eAAU,CAAA,IAAA;QACR,IAAI,CAACL,QAAS7C,CAAAA,OAAO,EAAE;AAEvB,QAAA,IAAIqC,MAAQ,EAAA;AACVW,YAAAA,YAAAA,EAAAA;YACAI,UAAWN,CAAAA,WAAAA,CAAAA;SACN,MAAA;YACLD,QAAS7C,CAAAA,OAAO,CAACqD,MAAM,CAACZ,UAAAA,CAAAA;AAC1B;KACC,EAAA;AAACJ,QAAAA,MAAAA;AAAQjC,QAAAA,OAAAA;AAASiB,QAAAA,IAAAA,CAAKX,MAAM;AAAEW,QAAAA,IAAAA,CAAKN,QAAQ;AAAE0B,QAAAA;AAAW,KAAA,CAAA;IAE5DS,eAAU,CAAA,IAAA;QACR,IAAI,CAACL,QAAS7C,CAAAA,OAAO,EAAE;AAEvBgD,QAAAA,YAAAA,EAAAA;QACAI,UAAWN,CAAAA,WAAAA,CAAAA;KACV,EAAA;AAACR,QAAAA;AAAK,KAAA,CAAA;IAETY,eAAU,CAAA,IAAA;AACRJ,QAAAA,WAAAA,EAAAA;AAEA,QAAA,OAAO,IAAME,YAAAA,EAAAA;AACf,KAAA,EAAG,EAAE,CAAA;AAEL,IAAA,qBACE,KAACM,CAAAA,aAAAA,CAAAA,QAAAA,EAAAA;QACCxD,GAAK6C,EAAAA,SAAAA;QACLY,IAAK,EAAA,KAAA;QACLpB,MAAQA,EAAAA,MAAAA;QACRC,KAAOA,EAAAA,KAAAA;AACN,QAAA,GAAGM;AAEHF,KAAAA,EAAAA,eAAAA,CAAAA;AAGP;AAEO,MAAMgB,KAAQC,iBAAAA,gBAAAA,CAAWxB,cAAsC;;AC7FtE,SAASyB,gBAAAA,CACPpB,IAAO,EACPqB,aAAiC,EAAA;AAEjCZ,IAAAA,cAAAA,CAAQa,QAAQ,CAACD,aAAAA,CAAAA;AAEjB,IAAA,qBAAOF,gBACL,CAAA,CAACvB,KAAOpC,EAAAA,GAAAA,iBAAQ,KAAC0D,CAAAA,aAAAA,CAAAA,KAAAA,EAAAA;AAAO,YAAA,GAAGtB,KAAK;YAAEpC,GAAKA,EAAAA,GAAAA;YAAKwC,IAAMA,EAAAA;;AAEtD;MAEauB,IAAO,mBAAgBH,gBAAAA,CAAiB,QAAQI,uBAAgB;MAEhEC,GAAM,mBAAgBL,gBAAAA,CAAiB,OAAOM,sBAAe;MAE7DC,KAAQ,mBAAgBP,gBAAAA,CAAiB,SAASQ,wBAAiB;MAEnEC,QAAW,mBAAgBT,gBAAAA,CACtC,YACAU,2BACA;MAEWC,SAAY,mBAAgBX,gBAAAA,CACvC,aACAY,4BACA;MAEWC,MAAS,mBAAgBb,gBAAAA,CACpC,UACAc,yBACA;MAEWC,GAAM,mBAAgBf,gBAAAA,CAAiB,OAAOgB,sBAAe;MAE7DC,OAAU,mBAAgBjB,gBAAAA,CACrC,WACAkB,0BACA;;;;;;;;;;;;;;;"}
Index: node_modules/react-chartjs-2/dist/index.d.ts
===================================================================
--- node_modules/react-chartjs-2/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+export type { ChartProps } from './types.js';
+export * from './chart.js';
+export * from './typedCharts.js';
+export { getDatasetAtEvent, getElementAtEvent, getElementsAtEvent, } from './utils.js';
+//# sourceMappingURL=index.d.ts.map
Index: node_modules/react-chartjs-2/dist/index.d.ts.map
===================================================================
--- node_modules/react-chartjs-2/dist/index.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/index.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
Index: node_modules/react-chartjs-2/dist/index.js
===================================================================
--- node_modules/react-chartjs-2/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,180 @@
+import React, { forwardRef, useRef, useEffect } from 'react';
+import { Chart as Chart$1, LineController, BarController, RadarController, DoughnutController, PolarAreaController, BubbleController, PieController, ScatterController } from 'chart.js';
+
+const defaultDatasetIdKey = 'label';
+function reforwardRef(ref, value) {
+    if (typeof ref === 'function') {
+        ref(value);
+    } else if (ref) {
+        ref.current = value;
+    }
+}
+function setOptions(chart, nextOptions) {
+    const options = chart.options;
+    if (options && nextOptions) {
+        Object.assign(options, nextOptions);
+    }
+}
+function setLabels(currentData, nextLabels) {
+    currentData.labels = nextLabels;
+}
+function setDatasets(currentData, nextDatasets) {
+    let datasetIdKey = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : defaultDatasetIdKey;
+    const addedDatasets = [];
+    currentData.datasets = nextDatasets.map((nextDataset)=>{
+        // given the new set, find it's current match
+        const currentDataset = currentData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]);
+        // There is no original to update, so simply add new one
+        if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {
+            return {
+                ...nextDataset
+            };
+        }
+        addedDatasets.push(currentDataset);
+        Object.assign(currentDataset, nextDataset);
+        return currentDataset;
+    });
+}
+function cloneData(data) {
+    let datasetIdKey = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : defaultDatasetIdKey;
+    const nextData = {
+        labels: [],
+        datasets: []
+    };
+    setLabels(nextData, data.labels);
+    setDatasets(nextData, data.datasets, datasetIdKey);
+    return nextData;
+}
+/**
+ * Get dataset from mouse click event
+ * @param chart - Chart.js instance
+ * @param event - Mouse click event
+ * @returns Dataset
+ */ function getDatasetAtEvent(chart, event) {
+    return chart.getElementsAtEventForMode(event.nativeEvent, 'dataset', {
+        intersect: true
+    }, false);
+}
+/**
+ * Get single dataset element from mouse click event
+ * @param chart - Chart.js instance
+ * @param event - Mouse click event
+ * @returns Dataset
+ */ function getElementAtEvent(chart, event) {
+    return chart.getElementsAtEventForMode(event.nativeEvent, 'nearest', {
+        intersect: true
+    }, false);
+}
+/**
+ * Get all dataset elements from mouse click event
+ * @param chart - Chart.js instance
+ * @param event - Mouse click event
+ * @returns Dataset
+ */ function getElementsAtEvent(chart, event) {
+    return chart.getElementsAtEventForMode(event.nativeEvent, 'index', {
+        intersect: true
+    }, false);
+}
+
+function ChartComponent(props, ref) {
+    const { height = 150, width = 300, redraw = false, datasetIdKey, type, data, options, plugins = [], fallbackContent, updateMode, ...canvasProps } = props;
+    const canvasRef = useRef(null);
+    const chartRef = useRef(null);
+    const renderChart = ()=>{
+        if (!canvasRef.current) return;
+        chartRef.current = new Chart$1(canvasRef.current, {
+            type,
+            data: cloneData(data, datasetIdKey),
+            options: options && {
+                ...options
+            },
+            plugins
+        });
+        reforwardRef(ref, chartRef.current);
+    };
+    const destroyChart = ()=>{
+        reforwardRef(ref, null);
+        if (chartRef.current) {
+            chartRef.current.destroy();
+            chartRef.current = null;
+        }
+    };
+    useEffect(()=>{
+        if (!redraw && chartRef.current && options) {
+            setOptions(chartRef.current, options);
+        }
+    }, [
+        redraw,
+        options
+    ]);
+    useEffect(()=>{
+        if (!redraw && chartRef.current) {
+            setLabels(chartRef.current.config.data, data.labels);
+        }
+    }, [
+        redraw,
+        data.labels
+    ]);
+    useEffect(()=>{
+        if (!redraw && chartRef.current && data.datasets) {
+            setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);
+        }
+    }, [
+        redraw,
+        data.datasets
+    ]);
+    useEffect(()=>{
+        if (!chartRef.current) return;
+        if (redraw) {
+            destroyChart();
+            setTimeout(renderChart);
+        } else {
+            chartRef.current.update(updateMode);
+        }
+    }, [
+        redraw,
+        options,
+        data.labels,
+        data.datasets,
+        updateMode
+    ]);
+    useEffect(()=>{
+        if (!chartRef.current) return;
+        destroyChart();
+        setTimeout(renderChart);
+    }, [
+        type
+    ]);
+    useEffect(()=>{
+        renderChart();
+        return ()=>destroyChart();
+    }, []);
+    return /*#__PURE__*/ React.createElement("canvas", {
+        ref: canvasRef,
+        role: "img",
+        height: height,
+        width: width,
+        ...canvasProps
+    }, fallbackContent);
+}
+const Chart = /*#__PURE__*/ forwardRef(ChartComponent);
+
+function createTypedChart(type, registerables) {
+    Chart$1.register(registerables);
+    return /*#__PURE__*/ forwardRef((props, ref)=>/*#__PURE__*/ React.createElement(Chart, {
+            ...props,
+            ref: ref,
+            type: type
+        }));
+}
+const Line = /* #__PURE__ */ createTypedChart('line', LineController);
+const Bar = /* #__PURE__ */ createTypedChart('bar', BarController);
+const Radar = /* #__PURE__ */ createTypedChart('radar', RadarController);
+const Doughnut = /* #__PURE__ */ createTypedChart('doughnut', DoughnutController);
+const PolarArea = /* #__PURE__ */ createTypedChart('polarArea', PolarAreaController);
+const Bubble = /* #__PURE__ */ createTypedChart('bubble', BubbleController);
+const Pie = /* #__PURE__ */ createTypedChart('pie', PieController);
+const Scatter = /* #__PURE__ */ createTypedChart('scatter', ScatterController);
+
+export { Bar, Bubble, Chart, Doughnut, Line, Pie, PolarArea, Radar, Scatter, getDatasetAtEvent, getElementAtEvent, getElementsAtEvent };
+//# sourceMappingURL=index.js.map
Index: node_modules/react-chartjs-2/dist/index.js.map
===================================================================
--- node_modules/react-chartjs-2/dist/index.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/index.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.js","sources":["../src/utils.ts","../src/chart.tsx","../src/typedCharts.tsx"],"sourcesContent":["import type { MouseEvent } from 'react';\nimport type {\n  ChartType,\n  ChartData,\n  DefaultDataPoint,\n  ChartDataset,\n  ChartOptions,\n  Chart,\n} from 'chart.js';\n\nimport type { ForwardedRef } from './types.js';\n\nconst defaultDatasetIdKey = 'label';\n\nexport function reforwardRef<T>(ref: ForwardedRef<T>, value: T) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}\n\nexport function setOptions<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(chart: Chart<TType, TData, TLabel>, nextOptions: ChartOptions<TType>) {\n  const options = chart.options;\n\n  if (options && nextOptions) {\n    Object.assign(options, nextOptions);\n  }\n}\n\nexport function setLabels<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(\n  currentData: ChartData<TType, TData, TLabel>,\n  nextLabels: TLabel[] | undefined\n) {\n  currentData.labels = nextLabels;\n}\n\nexport function setDatasets<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(\n  currentData: ChartData<TType, TData, TLabel>,\n  nextDatasets: ChartDataset<TType, TData>[],\n  datasetIdKey = defaultDatasetIdKey\n) {\n  const addedDatasets: ChartDataset<TType, TData>[] = [];\n\n  currentData.datasets = nextDatasets.map(\n    (nextDataset: Record<string, unknown>) => {\n      // given the new set, find it's current match\n      const currentDataset = currentData.datasets.find(\n        (dataset: Record<string, unknown>) =>\n          dataset[datasetIdKey] === nextDataset[datasetIdKey]\n      );\n\n      // There is no original to update, so simply add new one\n      if (\n        !currentDataset ||\n        !nextDataset.data ||\n        addedDatasets.includes(currentDataset)\n      ) {\n        return { ...nextDataset } as ChartDataset<TType, TData>;\n      }\n\n      addedDatasets.push(currentDataset);\n\n      Object.assign(currentDataset, nextDataset);\n\n      return currentDataset;\n    }\n  );\n}\n\nexport function cloneData<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(data: ChartData<TType, TData, TLabel>, datasetIdKey = defaultDatasetIdKey) {\n  const nextData: ChartData<TType, TData, TLabel> = {\n    labels: [],\n    datasets: [],\n  };\n\n  setLabels(nextData, data.labels);\n  setDatasets(nextData, data.datasets, datasetIdKey);\n\n  return nextData;\n}\n\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getDatasetAtEvent(\n  chart: Chart,\n  event: MouseEvent<HTMLCanvasElement>\n) {\n  return chart.getElementsAtEventForMode(\n    event.nativeEvent,\n    'dataset',\n    { intersect: true },\n    false\n  );\n}\n\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementAtEvent(\n  chart: Chart,\n  event: MouseEvent<HTMLCanvasElement>\n) {\n  return chart.getElementsAtEventForMode(\n    event.nativeEvent,\n    'nearest',\n    { intersect: true },\n    false\n  );\n}\n\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementsAtEvent(\n  chart: Chart,\n  event: MouseEvent<HTMLCanvasElement>\n) {\n  return chart.getElementsAtEventForMode(\n    event.nativeEvent,\n    'index',\n    { intersect: true },\n    false\n  );\n}\n","import React, { useEffect, useRef, forwardRef } from 'react';\nimport { Chart as ChartJS } from 'chart.js';\nimport type { ChartType, DefaultDataPoint } from 'chart.js';\n\nimport type { ForwardedRef, ChartProps, BaseChartComponent } from './types.js';\nimport {\n  reforwardRef,\n  cloneData,\n  setOptions,\n  setLabels,\n  setDatasets,\n} from './utils.js';\n\nfunction ChartComponent<\n  TType extends ChartType = ChartType,\n  TData = DefaultDataPoint<TType>,\n  TLabel = unknown,\n>(\n  props: ChartProps<TType, TData, TLabel>,\n  ref: ForwardedRef<ChartJS<TType, TData, TLabel>>\n) {\n  const {\n    height = 150,\n    width = 300,\n    redraw = false,\n    datasetIdKey,\n    type,\n    data,\n    options,\n    plugins = [],\n    fallbackContent,\n    updateMode,\n    ...canvasProps\n  } = props;\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const chartRef = useRef<ChartJS<TType, TData, TLabel> | null>(null);\n\n  const renderChart = () => {\n    if (!canvasRef.current) return;\n\n    chartRef.current = new ChartJS(canvasRef.current, {\n      type,\n      data: cloneData(data, datasetIdKey),\n      options: options && { ...options },\n      plugins,\n    });\n\n    reforwardRef(ref, chartRef.current);\n  };\n\n  const destroyChart = () => {\n    reforwardRef(ref, null);\n\n    if (chartRef.current) {\n      chartRef.current.destroy();\n      chartRef.current = null;\n    }\n  };\n\n  useEffect(() => {\n    if (!redraw && chartRef.current && options) {\n      setOptions(chartRef.current, options);\n    }\n  }, [redraw, options]);\n\n  useEffect(() => {\n    if (!redraw && chartRef.current) {\n      setLabels(chartRef.current.config.data, data.labels);\n    }\n  }, [redraw, data.labels]);\n\n  useEffect(() => {\n    if (!redraw && chartRef.current && data.datasets) {\n      setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);\n    }\n  }, [redraw, data.datasets]);\n\n  useEffect(() => {\n    if (!chartRef.current) return;\n\n    if (redraw) {\n      destroyChart();\n      setTimeout(renderChart);\n    } else {\n      chartRef.current.update(updateMode);\n    }\n  }, [redraw, options, data.labels, data.datasets, updateMode]);\n\n  useEffect(() => {\n    if (!chartRef.current) return;\n\n    destroyChart();\n    setTimeout(renderChart);\n  }, [type]);\n\n  useEffect(() => {\n    renderChart();\n\n    return () => destroyChart();\n  }, []);\n\n  return (\n    <canvas\n      ref={canvasRef}\n      role='img'\n      height={height}\n      width={width}\n      {...canvasProps}\n    >\n      {fallbackContent}\n    </canvas>\n  );\n}\n\nexport const Chart = forwardRef(ChartComponent) as BaseChartComponent;\n","import React, { forwardRef } from 'react';\nimport {\n  Chart as ChartJS,\n  LineController,\n  BarController,\n  RadarController,\n  DoughnutController,\n  PolarAreaController,\n  BubbleController,\n  PieController,\n  ScatterController,\n} from 'chart.js';\nimport type { ChartType, ChartComponentLike } from 'chart.js';\n\nimport type {\n  ChartProps,\n  ChartJSOrUndefined,\n  TypedChartComponent,\n} from './types.js';\nimport { Chart } from './chart.js';\n\nfunction createTypedChart<T extends ChartType>(\n  type: T,\n  registerables: ChartComponentLike\n) {\n  ChartJS.register(registerables);\n\n  return forwardRef<ChartJSOrUndefined<T>, Omit<ChartProps<T>, 'type'>>(\n    (props, ref) => <Chart {...props} ref={ref} type={type} />\n  ) as TypedChartComponent<T>;\n}\n\nexport const Line = /* #__PURE__ */ createTypedChart('line', LineController);\n\nexport const Bar = /* #__PURE__ */ createTypedChart('bar', BarController);\n\nexport const Radar = /* #__PURE__ */ createTypedChart('radar', RadarController);\n\nexport const Doughnut = /* #__PURE__ */ createTypedChart(\n  'doughnut',\n  DoughnutController\n);\n\nexport const PolarArea = /* #__PURE__ */ createTypedChart(\n  'polarArea',\n  PolarAreaController\n);\n\nexport const Bubble = /* #__PURE__ */ createTypedChart(\n  'bubble',\n  BubbleController\n);\n\nexport const Pie = /* #__PURE__ */ createTypedChart('pie', PieController);\n\nexport const Scatter = /* #__PURE__ */ createTypedChart(\n  'scatter',\n  ScatterController\n);\n"],"names":["defaultDatasetIdKey","reforwardRef","ref","value","current","setOptions","chart","nextOptions","options","Object","assign","setLabels","currentData","nextLabels","labels","setDatasets","nextDatasets","datasetIdKey","addedDatasets","datasets","map","nextDataset","currentDataset","find","dataset","data","includes","push","cloneData","nextData","getDatasetAtEvent","event","getElementsAtEventForMode","nativeEvent","intersect","getElementAtEvent","getElementsAtEvent","ChartComponent","props","height","width","redraw","type","plugins","fallbackContent","updateMode","canvasProps","canvasRef","useRef","chartRef","renderChart","ChartJS","destroyChart","destroy","useEffect","config","setTimeout","update","canvas","role","Chart","forwardRef","createTypedChart","registerables","register","Line","LineController","Bar","BarController","Radar","RadarController","Doughnut","DoughnutController","PolarArea","PolarAreaController","Bubble","BubbleController","Pie","PieController","Scatter","ScatterController"],"mappings":"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"}
Index: node_modules/react-chartjs-2/dist/typedCharts.d.ts
===================================================================
--- node_modules/react-chartjs-2/dist/typedCharts.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/typedCharts.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import type { TypedChartComponent } from './types.js';
+export declare const Line: TypedChartComponent<"line">;
+export declare const Bar: TypedChartComponent<"bar">;
+export declare const Radar: TypedChartComponent<"radar">;
+export declare const Doughnut: TypedChartComponent<"doughnut">;
+export declare const PolarArea: TypedChartComponent<"polarArea">;
+export declare const Bubble: TypedChartComponent<"bubble">;
+export declare const Pie: TypedChartComponent<"pie">;
+export declare const Scatter: TypedChartComponent<"scatter">;
+//# sourceMappingURL=typedCharts.d.ts.map
Index: node_modules/react-chartjs-2/dist/typedCharts.d.ts.map
===================================================================
--- node_modules/react-chartjs-2/dist/typedCharts.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/typedCharts.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"typedCharts.d.ts","sourceRoot":"","sources":["../src/typedCharts.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAcpB,eAAO,MAAM,IAAI,6BAA2D,CAAC;AAE7E,eAAO,MAAM,GAAG,4BAAyD,CAAC;AAE1E,eAAO,MAAM,KAAK,8BAA6D,CAAC;AAEhF,eAAO,MAAM,QAAQ,iCAGpB,CAAC;AAEF,eAAO,MAAM,SAAS,kCAGrB,CAAC;AAEF,eAAO,MAAM,MAAM,+BAGlB,CAAC;AAEF,eAAO,MAAM,GAAG,4BAAyD,CAAC;AAE1E,eAAO,MAAM,OAAO,gCAGnB,CAAC"}
Index: node_modules/react-chartjs-2/dist/types.d.ts
===================================================================
--- node_modules/react-chartjs-2/dist/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+import type { CanvasHTMLAttributes, MutableRefObject, ReactNode, JSX } from 'react';
+import type { Chart, ChartType, ChartData, ChartOptions, DefaultDataPoint, Plugin, UpdateMode } from 'chart.js';
+export type ForwardedRef<T> = ((instance: T | null) => void) | MutableRefObject<T | null> | null;
+export interface ChartProps<TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown> extends CanvasHTMLAttributes<HTMLCanvasElement> {
+    /**
+     * Chart.js chart type
+     */
+    type: TType;
+    /**
+     * The data object that is passed into the Chart.js chart
+     * @see https://www.chartjs.org/docs/latest/getting-started/
+     */
+    data: ChartData<TType, TData, TLabel>;
+    /**
+     * The options object that is passed into the Chart.js chart
+     * @see https://www.chartjs.org/docs/latest/general/options.html
+     * @default {}
+     */
+    options?: ChartOptions<TType>;
+    /**
+     * The plugins array that is passed into the Chart.js chart
+     * @see https://www.chartjs.org/docs/latest/developers/plugins.html
+     * @default []
+     */
+    plugins?: Plugin<TType>[];
+    /**
+     * Teardown and redraw chart on every update
+     * @default false
+     */
+    redraw?: boolean;
+    /**
+     * Key name to identificate dataset
+     * @default 'label'
+     */
+    datasetIdKey?: string;
+    /**
+     * A fallback for when the canvas cannot be rendered. Can be used for accessible chart descriptions
+     * @see https://www.chartjs.org/docs/latest/general/accessibility.html
+     * @default null
+     * @todo Replace with `children` prop.
+     */
+    fallbackContent?: ReactNode;
+    /**
+     * A mode string to indicate transition configuration should be used.
+     * @see https://www.chartjs.org/docs/latest/developers/api.html#update-mode
+     */
+    updateMode?: UpdateMode;
+}
+/**
+ * @todo Replace `undefined` with `null`
+ */
+export type ChartJSOrUndefined<TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown> = Chart<TType, TData, TLabel> | undefined;
+export type BaseChartComponent = <TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown>(props: ChartProps<TType, TData, TLabel> & {
+    ref?: ForwardedRef<ChartJSOrUndefined<TType, TData, TLabel>>;
+}) => JSX.Element;
+export type TypedChartComponent<TDefaultType extends ChartType> = <TData = DefaultDataPoint<TDefaultType>, TLabel = unknown>(props: Omit<ChartProps<TDefaultType, TData, TLabel>, 'type'> & {
+    ref?: ForwardedRef<ChartJSOrUndefined<TDefaultType, TData, TLabel>>;
+}) => JSX.Element;
+//# sourceMappingURL=types.d.ts.map
Index: node_modules/react-chartjs-2/dist/types.d.ts.map
===================================================================
--- node_modules/react-chartjs-2/dist/types.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/types.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,GAAG,EACJ,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,YAAY,CAAC,CAAC,IACtB,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,GAC9B,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,GAC1B,IAAI,CAAC;AAET,MAAM,WAAW,UAAU,CACzB,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAC/B,MAAM,GAAG,OAAO,CAChB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC/C;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC;IACZ;;;OAGG;IACH,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAC5B,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAC/B,MAAM,GAAG,OAAO,IACd,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAC/B,MAAM,GAAG,OAAO,EAEhB,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG;IACxC,GAAG,CAAC,EAAE,YAAY,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9D,KACE,GAAG,CAAC,OAAO,CAAC;AAEjB,MAAM,MAAM,mBAAmB,CAAC,YAAY,SAAS,SAAS,IAAI,CAChE,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,EACtC,MAAM,GAAG,OAAO,EAEhB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG;IAC7D,GAAG,CAAC,EAAE,YAAY,CAAC,kBAAkB,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;CACrE,KACE,GAAG,CAAC,OAAO,CAAC"}
Index: node_modules/react-chartjs-2/dist/utils.d.ts
===================================================================
--- node_modules/react-chartjs-2/dist/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import type { MouseEvent } from 'react';
+import type { ChartType, ChartData, DefaultDataPoint, ChartDataset, ChartOptions, Chart } from 'chart.js';
+import type { ForwardedRef } from './types.js';
+export declare function reforwardRef<T>(ref: ForwardedRef<T>, value: T): void;
+export declare function setOptions<TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown>(chart: Chart<TType, TData, TLabel>, nextOptions: ChartOptions<TType>): void;
+export declare function setLabels<TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown>(currentData: ChartData<TType, TData, TLabel>, nextLabels: TLabel[] | undefined): void;
+export declare function setDatasets<TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown>(currentData: ChartData<TType, TData, TLabel>, nextDatasets: ChartDataset<TType, TData>[], datasetIdKey?: string): void;
+export declare function cloneData<TType extends ChartType = ChartType, TData = DefaultDataPoint<TType>, TLabel = unknown>(data: ChartData<TType, TData, TLabel>, datasetIdKey?: string): ChartData<TType, TData, TLabel>;
+/**
+ * Get dataset from mouse click event
+ * @param chart - Chart.js instance
+ * @param event - Mouse click event
+ * @returns Dataset
+ */
+export declare function getDatasetAtEvent(chart: Chart, event: MouseEvent<HTMLCanvasElement>): import("chart.js").InteractionItem[];
+/**
+ * Get single dataset element from mouse click event
+ * @param chart - Chart.js instance
+ * @param event - Mouse click event
+ * @returns Dataset
+ */
+export declare function getElementAtEvent(chart: Chart, event: MouseEvent<HTMLCanvasElement>): import("chart.js").InteractionItem[];
+/**
+ * Get all dataset elements from mouse click event
+ * @param chart - Chart.js instance
+ * @param event - Mouse click event
+ * @returns Dataset
+ */
+export declare function getElementsAtEvent(chart: Chart, event: MouseEvent<HTMLCanvasElement>): import("chart.js").InteractionItem[];
+//# sourceMappingURL=utils.d.ts.map
Index: node_modules/react-chartjs-2/dist/utils.d.ts.map
===================================================================
--- node_modules/react-chartjs-2/dist/utils.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/dist/utils.d.ts.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,KAAK,EACN,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAM7D;AAED,wBAAgB,UAAU,CACxB,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAC/B,MAAM,GAAG,OAAO,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,QAMrE;AAED,wBAAgB,SAAS,CACvB,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAC/B,MAAM,GAAG,OAAO,EAEhB,WAAW,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAC5C,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,QAGjC;AAED,wBAAgB,WAAW,CACzB,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAC/B,MAAM,GAAG,OAAO,EAEhB,WAAW,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAC5C,YAAY,EAAE,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAC1C,YAAY,SAAsB,QA4BnC;AAED,wBAAgB,SAAS,CACvB,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAC/B,MAAM,GAAG,OAAO,EAChB,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,YAAY,SAAsB,mCAU1E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,wCAQrC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,wCAQrC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,wCAQrC"}
Index: node_modules/react-chartjs-2/package.json
===================================================================
--- node_modules/react-chartjs-2/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-chartjs-2/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+{
+  "name": "react-chartjs-2",
+  "type": "module",
+  "version": "5.3.0",
+  "description": "React components for Chart.js",
+  "author": "Jeremy Ayerst",
+  "homepage": "https://github.com/reactchartjs/react-chartjs-2",
+  "license": "MIT",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/reactchartjs/react-chartjs-2.git"
+  },
+  "bugs": {
+    "url": "https://github.com/reactchartjs/react-chartjs-2/issues"
+  },
+  "keywords": [
+    "chart",
+    "chart-js",
+    "chart.js",
+    "react-chartjs-2",
+    "react chart.js",
+    "react-chart.js"
+  ],
+  "sideEffects": false,
+  "types": "./dist/index.d.ts",
+  "exports": {
+    "types": "./dist/index.d.ts",
+    "import": "./dist/index.js",
+    "require": "./dist/index.cjs"
+  },
+  "publishConfig": {
+    "directory": "package"
+  },
+  "files": [
+    "dist"
+  ],
+  "peerDependencies": {
+    "chart.js": "^4.1.1",
+    "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+  },
+  "main": "./dist/index.cjs",
+  "module": "./dist/index.js",
+  "scripts": {}
+}
Index: node_modules/react-clock/LICENSE
===================================================================
--- node_modules/react-clock/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017–2024 Wojciech Maj
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/react-clock/README.md
===================================================================
--- node_modules/react-clock/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,109 @@
+[![npm](https://img.shields.io/npm/v/react-clock.svg)](https://www.npmjs.com/package/react-clock) ![downloads](https://img.shields.io/npm/dt/react-clock.svg) [![CI](https://github.com/wojtekmaj/react-clock/actions/workflows/ci.yml/badge.svg)](https://github.com/wojtekmaj/react-clock/actions)
+
+# react-clock
+
+An analog clock for your React app.
+
+## tl;dr
+
+- Install by executing `npm install react-clock` or `yarn add react-clock`.
+- Import by adding `import Clock from 'react-clock'`.
+- Use by adding `<Clock />`.
+
+## Demo
+
+A minimal demo page can be found in `sample` directory.
+
+[Online demo](https://projects.wojtekmaj.pl/react-clock/) is also available!
+
+## Installation
+
+Add react-clock to your project by executing `npm install react-clock` or `yarn add react-clock`.
+
+### Usage
+
+Here's an example of basic usage:
+
+```tsx
+import { useEffect, useState } from 'react';
+import Clock from 'react-clock';
+
+function MyApp() {
+  const [value, setValue] = useState(new Date());
+
+  useEffect(() => {
+    const interval = setInterval(() => setValue(new Date()), 1000);
+
+    return () => {
+      clearInterval(interval);
+    };
+  }, []);
+
+  return (
+    <div>
+      <p>Current time:</p>
+      <Clock value={value} />
+    </div>
+  );
+}
+```
+
+### Custom styling
+
+If you want to use default react-clock styling to build upon it, you can import react-clock's styles by using:
+
+```ts
+import 'react-clock/dist/Clock.css';
+```
+
+## User guide
+
+### Clock
+
+Displays a complete clock.
+
+#### Props
+
+| Prop name                | Description                                                                                                                                                                                                                                                    | Default value                         | Example values                                                                                      |
+| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| className                | Class name(s) that will be added along with `"react-clock"` to the main react-clock `<time>` element.                                                                                                                                                          | n/a                                   | <ul><li>String: `"class1 class2"`</li><li>Array of strings: `["class1", "class2 class3"]`</li></ul> |
+| formatHour               | Function called to override default formatting of hour marks. Can be used to use your own formatting function.                                                                                                                                                 | (default formatter)                   | `(locale, hour) => formatHour(hour, 'HH')`                                                          |
+| hourHandLength           | Hour hand length, in %.                                                                                                                                                                                                                                        | `50`                                  | `80`                                                                                                |
+| hourHandOppositeLength   | The length of the part of an hour hand on the opposite side the hand is pointing to, in %.                                                                                                                                                                     | `10`                                  | `20`                                                                                                |
+| hourHandWidth            | Hour hand width, in pixels.                                                                                                                                                                                                                                    | `4`                                   | `3`                                                                                                 |
+| hourMarksLength          | Hour marks length, in %.                                                                                                                                                                                                                                       | `10`                                  | `8`                                                                                                 |
+| hourMarksWidth           | Hour marks width, in pixels.                                                                                                                                                                                                                                   | `3`                                   | `2`                                                                                                 |
+| locale                   | Locale that should be used by the clock. Can be any [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag). **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client. | Server locale/User's browser settings | `"hu-HU"`                                                                                           |
+| minuteHandLength         | Minute hand length, in %.                                                                                                                                                                                                                                      | `70`                                  | `80`                                                                                                |
+| minuteHandOppositeLength | The length of the part of a minute hand on the opposite side the hand is pointing to, in %.                                                                                                                                                                    | `10`                                  | `20`                                                                                                |
+| minuteHandWidth          | Minute hand width, in pixels.                                                                                                                                                                                                                                  | `2`                                   | `3`                                                                                                 |
+| minuteMarksLength        | Minute marks length, in %.                                                                                                                                                                                                                                     | `6`                                   | `8`                                                                                                 |
+| minuteMarksWidth         | Minute marks width, in pixels.                                                                                                                                                                                                                                 | `1`                                   | `2`                                                                                                 |
+| renderHourMarks          | Whether hour marks shall be rendered.                                                                                                                                                                                                                          | `true`                                | `false`                                                                                             |
+| renderMinuteHand         | Whether minute hand shall be rendered.                                                                                                                                                                                                                         | `true`                                | `false`                                                                                             |
+| renderMinuteMarks        | Whether minute marks shall be rendered.                                                                                                                                                                                                                        | `true`                                | `false`                                                                                             |
+| renderNumbers            | Whether numbers shall be rendered.                                                                                                                                                                                                                             | `false`                               | `true`                                                                                              |
+| renderSecondHand         | Whether second hand shall be rendered.                                                                                                                                                                                                                         | `true`                                | `false`                                                                                             |
+| secondHandLength         | Second hand length, in %.                                                                                                                                                                                                                                      | `90`                                  | `80`                                                                                                |
+| secondHandOppositeLength | The length of the part of a second hand on the opposite side the hand is pointing to, in %.                                                                                                                                                                    | `10`                                  | `20`                                                                                                |
+| secondHandWidth          | Second hand width, in pixels.                                                                                                                                                                                                                                  | `1`                                   | `2`                                                                                                 |
+| size                     | Clock size, in pixels (e.g. `200`) or as string (e.g. `"50vw"`).                                                                                                                                                                                               | `150`                                 | <ul><li>Number: `250`</li><li>String: `"50vw"`</li></ul>                                            |
+| useMillisecondPrecision  | Whether to use millisecond precision.                                                                                                                                                                                                                          | `false`                               | `true`                                                                                              |
+| value                    | Clock value. Must be provided.                                                                                                                                                                                                                                 | n/a                                   | Date: `new Date()`                                                                                  |
+
+## License
+
+The MIT License.
+
+## Author
+
+<table>
+  <tr>
+    <td >
+      <img src="https://avatars.githubusercontent.com/u/5426427?v=4&s=128" width="64" height="64" alt="Wojciech Maj">
+    </td>
+    <td>
+      <a href="https://github.com/wojtekmaj">Wojciech Maj</a>
+    </td>
+  </tr>
+</table>
Index: node_modules/react-clock/dist/Clock.css
===================================================================
--- node_modules/react-clock/dist/Clock.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/Clock.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+.react-clock {
+  display: block;
+  position: relative;
+}
+
+.react-clock,
+.react-clock *,
+.react-clock *:before,
+.react-clock *:after {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.react-clock__face {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  border: 1px solid black;
+  border-radius: 50%;
+}
+
+.react-clock__hand {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 50%;
+  right: 50%;
+}
+
+.react-clock__hand__body {
+  position: absolute;
+  background-color: black;
+  transform: translateX(-50%);
+}
+
+.react-clock__mark {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 50%;
+  right: 50%;
+}
+
+.react-clock__mark__body {
+  position: absolute;
+  background-color: black;
+  transform: translateX(-50%);
+}
+
+.react-clock__mark__number {
+  position: absolute;
+  left: -40px;
+  width: 80px;
+  text-align: center;
+}
+
+.react-clock__second-hand__body {
+  background-color: red;
+}
Index: node_modules/react-clock/dist/cjs/Clock.d.ts
===================================================================
--- node_modules/react-clock/dist/cjs/Clock.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/Clock.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,176 @@
+import { formatHour as defaultFormatHour } from './shared/hourFormatter.js';
+import type { ClassName, HandLength, HandWidth, MarkLength, MarkWidth, OppositeHandLength } from './shared/types.js';
+export type ClockProps = {
+    /**
+     * Class name(s) that will be added along with `"react-clock"` to the main react-clock `<time>` element.
+     *
+     * @example 'class1 class2'
+     * @example ['class1', 'class2 class3']
+     */
+    className?: ClassName;
+    /**
+     * Function called to override default formatting of hour marks. Can be used to use your own formatting function.
+     *
+     * @example (locale, hour) => formatHour(hour, 'HH')
+     */
+    formatHour?: typeof defaultFormatHour;
+    /**
+     * Hour hand length, in %.
+     *
+     * @default 50
+     * @example 80
+     */
+    hourHandLength?: HandLength;
+    /**
+     * The length of the part of an hour hand on the opposite side the hand is pointing to, in %.
+     *
+     * @default 10
+     * @example 20
+     */
+    hourHandOppositeLength?: OppositeHandLength;
+    /**
+     * Hour hand width, in pixels.
+     *
+     * @default 4
+     * @example 3
+     */
+    hourHandWidth?: HandWidth;
+    /**
+     * Hour marks length, in %.
+     *
+     * @default 10
+     * @example 8
+     */
+    hourMarksLength?: MarkLength;
+    /**
+     * Hour marks width, in pixels.
+     *
+     * @default 3
+     * @example 2
+     */
+    hourMarksWidth?: MarkWidth;
+    /**
+     * Locale that should be used by the clock. Can be any [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag).
+     *
+     * **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.
+     *
+     * @example 'hu-HU'
+     */
+    locale?: string;
+    /**
+     * Minute hand length, in %.
+     *
+     * @default 70
+     * @example 80
+     */
+    minuteHandLength?: HandLength;
+    /**
+     * The length of the part of a minute hand on the opposite side the hand is pointing to, in %.
+     *
+     * @default 10
+     * @example 20
+     */
+    minuteHandOppositeLength?: OppositeHandLength;
+    /**
+     * Minute hand width, in pixels.
+     *
+     * @default 2
+     * @example 3
+     */
+    minuteHandWidth?: HandWidth;
+    /**
+     * Minute marks length, in %.
+     *
+     * @default 6
+     * @example 8
+     */
+    minuteMarksLength?: MarkLength;
+    /**
+     * Minute marks width, in pixels.
+     *
+     * @default 1
+     * @example 2
+     */
+    minuteMarksWidth?: MarkWidth;
+    /**
+     * Whether hour marks shall be rendered.
+     *
+     * @default true
+     * @example false
+     */
+    renderHourMarks?: boolean;
+    /**
+     * Whether minute hand shall be rendered.
+     *
+     * @default true
+     * @example false
+     */
+    renderMinuteHand?: boolean;
+    /**
+     * Whether minute marks shall be rendered.
+     *
+     * @default true
+     * @example false
+     */
+    renderMinuteMarks?: boolean;
+    /**
+     * Whether numbers shall be rendered.
+     *
+     * @default false
+     * @example true
+     */
+    renderNumbers?: boolean;
+    /**
+     * Whether second hand shall be rendered.
+     *
+     * @default true
+     * @example false
+     */
+    renderSecondHand?: boolean;
+    /**
+     * Second hand length, in %.
+     *
+     * @default 90
+     * @example 80
+     */
+    secondHandLength?: HandLength;
+    /**
+     * The length of the part of a second hand on the opposite side the hand is pointing to, in %.
+     *
+     * @default 10
+     * @example 20
+     */
+    secondHandOppositeLength?: OppositeHandLength;
+    /**
+     * Second hand width, in pixels.
+     *
+     * @default 1
+     * @example 2
+     */
+    secondHandWidth?: HandWidth;
+    /**
+     * Clock size, in pixels (e.g. `200`) or as string (e.g. `"50vw"`).
+     *
+     * @default 150
+     * @example 260
+     * @example '50vw'
+     */
+    size?: React.CSSProperties['width'];
+    /**
+     * Whether to use millisecond precision.
+     *
+     * @default false
+     * @example true
+     */
+    useMillisecondPrecision?: boolean;
+    /**
+     * Clock value. Must be provided.
+     *
+     * @example new Date()
+     */
+    value?: string | Date | null;
+};
+/**
+ * Displays a complete clock.
+ */
+export default function Clock({ className, formatHour, hourHandLength, hourHandOppositeLength, hourHandWidth, hourMarksLength, hourMarksWidth, locale, minuteHandLength, minuteHandOppositeLength, minuteHandWidth, minuteMarksLength, minuteMarksWidth, renderHourMarks, renderMinuteHand, renderMinuteMarks, renderNumbers, renderSecondHand, secondHandLength, secondHandOppositeLength, secondHandWidth, size, useMillisecondPrecision, value, }: ClockProps): React.ReactElement;
Index: node_modules/react-clock/dist/cjs/Clock.js
===================================================================
--- node_modules/react-clock/dist/cjs/Clock.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/Clock.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,100 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = Clock;
+var jsx_runtime_1 = require("react/jsx-runtime");
+var clsx_1 = __importDefault(require("clsx"));
+var date_utils_1 = require("@wojtekmaj/date-utils");
+var Hand_js_1 = __importDefault(require("./Hand.js"));
+var Mark_js_1 = __importDefault(require("./Mark.js"));
+var MarkNumber_js_1 = __importDefault(require("./MarkNumber.js"));
+var hourFormatter_js_1 = require("./shared/hourFormatter.js");
+var utils_js_1 = require("./shared/utils.js");
+/**
+ * Displays a complete clock.
+ */
+function Clock(_a) {
+    var className = _a.className, _b = _a.formatHour, formatHour = _b === void 0 ? hourFormatter_js_1.formatHour : _b, _c = _a.hourHandLength, hourHandLength = _c === void 0 ? 50 : _c, hourHandOppositeLength = _a.hourHandOppositeLength, _d = _a.hourHandWidth, hourHandWidth = _d === void 0 ? 4 : _d, _e = _a.hourMarksLength, hourMarksLength = _e === void 0 ? 10 : _e, _f = _a.hourMarksWidth, hourMarksWidth = _f === void 0 ? 3 : _f, locale = _a.locale, _g = _a.minuteHandLength, minuteHandLength = _g === void 0 ? 70 : _g, minuteHandOppositeLength = _a.minuteHandOppositeLength, _h = _a.minuteHandWidth, minuteHandWidth = _h === void 0 ? 2 : _h, _j = _a.minuteMarksLength, minuteMarksLength = _j === void 0 ? 6 : _j, _k = _a.minuteMarksWidth, minuteMarksWidth = _k === void 0 ? 1 : _k, _l = _a.renderHourMarks, renderHourMarks = _l === void 0 ? true : _l, _m = _a.renderMinuteHand, renderMinuteHand = _m === void 0 ? true : _m, _o = _a.renderMinuteMarks, renderMinuteMarks = _o === void 0 ? true : _o, renderNumbers = _a.renderNumbers, _p = _a.renderSecondHand, renderSecondHand = _p === void 0 ? true : _p, _q = _a.secondHandLength, secondHandLength = _q === void 0 ? 90 : _q, secondHandOppositeLength = _a.secondHandOppositeLength, _r = _a.secondHandWidth, secondHandWidth = _r === void 0 ? 1 : _r, _s = _a.size, size = _s === void 0 ? 150 : _s, useMillisecondPrecision = _a.useMillisecondPrecision, value = _a.value;
+    function renderMinuteMarksFn() {
+        if (!renderMinuteMarks) {
+            return null;
+        }
+        var minuteMarks = [];
+        for (var i = 1; i <= 60; i += 1) {
+            var isHourMark = renderHourMarks && !(i % 5);
+            if (!isHourMark) {
+                minuteMarks.push((0, jsx_runtime_1.jsx)(Mark_js_1.default, { angle: i * 6, length: minuteMarksLength, name: "minute", width: minuteMarksWidth }, "minute_".concat(i)));
+            }
+        }
+        return minuteMarks;
+    }
+    function renderHourMarksFn() {
+        if (!renderHourMarks) {
+            return null;
+        }
+        var hourMarks = [];
+        for (var i = 1; i <= 12; i += 1) {
+            hourMarks.push((0, jsx_runtime_1.jsx)(Mark_js_1.default, { angle: i * 30, length: hourMarksLength, name: "hour", width: hourMarksWidth }, "hour_".concat(i)));
+        }
+        return hourMarks;
+    }
+    function renderNumbersFn() {
+        if (!renderNumbers) {
+            return null;
+        }
+        var numbers = [];
+        for (var i = 1; i <= 12; i += 1) {
+            numbers.push((0, jsx_runtime_1.jsx)(MarkNumber_js_1.default, { angle: i * 30, length: (0, utils_js_1.safeMax)(renderHourMarks && hourMarksLength, renderMinuteMarks && minuteMarksLength, 0), name: "number", number: formatHour(locale, i) }, "number_".concat(i)));
+        }
+        return numbers;
+    }
+    function renderFace() {
+        return ((0, jsx_runtime_1.jsxs)("div", { className: "react-clock__face", children: [renderMinuteMarksFn(), renderHourMarksFn(), renderNumbersFn()] }));
+    }
+    function renderHourHandFn() {
+        var angle = value
+            ? (0, date_utils_1.getHours)(value) * 30 +
+                (0, date_utils_1.getMinutes)(value) / 2 +
+                (0, date_utils_1.getSeconds)(value) / 120 +
+                (useMillisecondPrecision ? (0, date_utils_1.getMilliseconds)(value) / 120000 : 0)
+            : 0;
+        return ((0, jsx_runtime_1.jsx)(Hand_js_1.default, { angle: angle, length: hourHandLength, name: "hour", oppositeLength: hourHandOppositeLength, width: hourHandWidth }));
+    }
+    function renderMinuteHandFn() {
+        if (!renderMinuteHand) {
+            return null;
+        }
+        var angle = value
+            ? (0, date_utils_1.getHours)(value) * 360 +
+                (0, date_utils_1.getMinutes)(value) * 6 +
+                (0, date_utils_1.getSeconds)(value) / 10 +
+                (useMillisecondPrecision ? (0, date_utils_1.getMilliseconds)(value) / 10000 : 0)
+            : 0;
+        return ((0, jsx_runtime_1.jsx)(Hand_js_1.default, { angle: angle, length: minuteHandLength, name: "minute", oppositeLength: minuteHandOppositeLength, width: minuteHandWidth }));
+    }
+    function renderSecondHandFn() {
+        if (!renderSecondHand) {
+            return null;
+        }
+        var angle = value
+            ? (0, date_utils_1.getMinutes)(value) * 360 +
+                (0, date_utils_1.getSeconds)(value) * 6 +
+                (useMillisecondPrecision ? (0, date_utils_1.getMilliseconds)(value) * 0.006 : 0)
+            : 0;
+        return ((0, jsx_runtime_1.jsx)(Hand_js_1.default, { angle: angle, length: secondHandLength, name: "second", oppositeLength: secondHandOppositeLength, width: secondHandWidth }));
+    }
+    return ((0, jsx_runtime_1.jsxs)("time", { className: (0, clsx_1.default)('react-clock', className), dateTime: value instanceof Date
+            ? // Returns a string in the format "HH:MM" or "HH:MM:SS"
+                value.toLocaleTimeString('en', {
+                    hourCycle: 'h23',
+                    hour: '2-digit',
+                    minute: renderMinuteHand ? '2-digit' : undefined,
+                    second: renderSecondHand ? '2-digit' : undefined,
+                })
+            : value || undefined, style: {
+            width: size,
+            height: size,
+        }, children: [renderFace(), renderHourHandFn(), renderMinuteHandFn(), renderSecondHandFn()] }));
+}
Index: node_modules/react-clock/dist/cjs/Hand.d.ts
===================================================================
--- node_modules/react-clock/dist/cjs/Hand.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/Hand.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import type { HandLength, HandWidth, OppositeHandLength } from './shared/types.js';
+type HandProps = {
+    angle?: number;
+    length?: HandLength;
+    name: string;
+    oppositeLength?: OppositeHandLength;
+    width?: HandWidth;
+};
+export default function Hand({ angle, name, length, oppositeLength, width, }: HandProps): React.ReactElement;
+export {};
Index: node_modules/react-clock/dist/cjs/Hand.js
===================================================================
--- node_modules/react-clock/dist/cjs/Hand.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/Hand.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = Hand;
+var jsx_runtime_1 = require("react/jsx-runtime");
+function Hand(_a) {
+    var _b = _a.angle, angle = _b === void 0 ? 0 : _b, name = _a.name, _c = _a.length, length = _c === void 0 ? 100 : _c, _d = _a.oppositeLength, oppositeLength = _d === void 0 ? 10 : _d, _e = _a.width, width = _e === void 0 ? 1 : _e;
+    return ((0, jsx_runtime_1.jsx)("div", { className: "react-clock__hand react-clock__".concat(name, "-hand"), style: {
+            transform: "rotate(".concat(angle, "deg)"),
+        }, children: (0, jsx_runtime_1.jsx)("div", { className: "react-clock__hand__body react-clock__".concat(name, "-hand__body"), style: {
+                width: "".concat(width, "px"),
+                top: "".concat(50 - length / 2, "%"),
+                bottom: "".concat(50 - oppositeLength / 2, "%"),
+            } }) }));
+}
Index: node_modules/react-clock/dist/cjs/Mark.d.ts
===================================================================
--- node_modules/react-clock/dist/cjs/Mark.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/Mark.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import type { MarkLength, MarkWidth } from './shared/types.js';
+type MarkProps = {
+    angle?: number;
+    length?: MarkLength;
+    name: string;
+    width?: MarkWidth;
+};
+declare const Mark: React.FC<MarkProps>;
+export default Mark;
Index: node_modules/react-clock/dist/cjs/Mark.js
===================================================================
--- node_modules/react-clock/dist/cjs/Mark.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/Mark.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var react_1 = require("react");
+var Mark = (0, react_1.memo)(function Mark(_a) {
+    var _b = _a.angle, angle = _b === void 0 ? 0 : _b, _c = _a.length, length = _c === void 0 ? 10 : _c, name = _a.name, _d = _a.width, width = _d === void 0 ? 1 : _d;
+    return ((0, jsx_runtime_1.jsx)("div", { className: "react-clock__mark react-clock__".concat(name, "-mark"), style: {
+            transform: "rotate(".concat(angle, "deg)"),
+        }, children: (0, jsx_runtime_1.jsx)("div", { className: "react-clock__mark__body react-clock__".concat(name, "-mark__body"), style: {
+                width: "".concat(width, "px"),
+                top: 0,
+                bottom: "".concat(100 - length / 2, "%"),
+            } }) }));
+});
+exports.default = Mark;
Index: node_modules/react-clock/dist/cjs/MarkNumber.d.ts
===================================================================
--- node_modules/react-clock/dist/cjs/MarkNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/MarkNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import type { MarkLength } from './shared/types.js';
+type MarkNumberProps = {
+    angle?: number;
+    length?: MarkLength;
+    name: string;
+    number: React.ReactNode;
+};
+declare const MarkNumber: React.FC<MarkNumberProps>;
+export default MarkNumber;
Index: node_modules/react-clock/dist/cjs/MarkNumber.js
===================================================================
--- node_modules/react-clock/dist/cjs/MarkNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/MarkNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var react_1 = require("react");
+var MarkNumber = (0, react_1.memo)(function MarkNumber(_a) {
+    var _b = _a.angle, angle = _b === void 0 ? 0 : _b, _c = _a.length, length = _c === void 0 ? 10 : _c, name = _a.name, number = _a.number;
+    return ((0, jsx_runtime_1.jsx)("div", { className: "react-clock__mark react-clock__".concat(name, "-mark"), style: {
+            transform: "rotate(".concat(angle, "deg)"),
+        }, children: (0, jsx_runtime_1.jsx)("div", { className: "react-clock__mark__number", style: {
+                transform: "rotate(-".concat(angle, "deg)"),
+                top: "".concat(length / 2, "%"),
+            }, children: number }) }));
+});
+exports.default = MarkNumber;
Index: node_modules/react-clock/dist/cjs/index.d.ts
===================================================================
--- node_modules/react-clock/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import Clock from './Clock.js';
+export type { ClockProps } from './Clock.js';
+export { Clock };
+export default Clock;
Index: node_modules/react-clock/dist/cjs/index.js
===================================================================
--- node_modules/react-clock/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Clock = void 0;
+var Clock_js_1 = __importDefault(require("./Clock.js"));
+exports.Clock = Clock_js_1.default;
+exports.default = Clock_js_1.default;
Index: node_modules/react-clock/dist/cjs/package.json
===================================================================
--- node_modules/react-clock/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
Index: node_modules/react-clock/dist/cjs/shared/hourFormatter.d.ts
===================================================================
--- node_modules/react-clock/dist/cjs/shared/hourFormatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/shared/hourFormatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare function formatHour(locale: string | undefined, hour: number): string;
Index: node_modules/react-clock/dist/cjs/shared/hourFormatter.js
===================================================================
--- node_modules/react-clock/dist/cjs/shared/hourFormatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/shared/hourFormatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.formatHour = formatHour;
+var get_user_locale_1 = __importDefault(require("get-user-locale"));
+function formatHour(locale, hour) {
+    return hour.toLocaleString(locale || (0, get_user_locale_1.default)() || undefined);
+}
Index: node_modules/react-clock/dist/cjs/shared/types.d.ts
===================================================================
--- node_modules/react-clock/dist/cjs/shared/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/shared/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export type ClassName = string | null | undefined | (string | null | undefined)[];
+export type HandLength = number;
+export type OppositeHandLength = number;
+export type HandWidth = number;
+export type MarkLength = HandLength;
+export type MarkWidth = HandWidth;
Index: node_modules/react-clock/dist/cjs/shared/types.js
===================================================================
--- node_modules/react-clock/dist/cjs/shared/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/shared/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
Index: node_modules/react-clock/dist/cjs/shared/utils.d.ts
===================================================================
--- node_modules/react-clock/dist/cjs/shared/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/shared/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare function safeMax(...args: unknown[]): number;
Index: node_modules/react-clock/dist/cjs/shared/utils.js
===================================================================
--- node_modules/react-clock/dist/cjs/shared/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/cjs/shared/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.safeMax = safeMax;
+function isValidNumber(num) {
+    return num !== null && num !== false && !Number.isNaN(Number(num));
+}
+function safeMax() {
+    var args = [];
+    for (var _i = 0; _i < arguments.length; _i++) {
+        args[_i] = arguments[_i];
+    }
+    return Math.max.apply(Math, args.filter(isValidNumber));
+}
Index: node_modules/react-clock/dist/esm/Clock.d.ts
===================================================================
--- node_modules/react-clock/dist/esm/Clock.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/Clock.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,176 @@
+import { formatHour as defaultFormatHour } from './shared/hourFormatter.js';
+import type { ClassName, HandLength, HandWidth, MarkLength, MarkWidth, OppositeHandLength } from './shared/types.js';
+export type ClockProps = {
+    /**
+     * Class name(s) that will be added along with `"react-clock"` to the main react-clock `<time>` element.
+     *
+     * @example 'class1 class2'
+     * @example ['class1', 'class2 class3']
+     */
+    className?: ClassName;
+    /**
+     * Function called to override default formatting of hour marks. Can be used to use your own formatting function.
+     *
+     * @example (locale, hour) => formatHour(hour, 'HH')
+     */
+    formatHour?: typeof defaultFormatHour;
+    /**
+     * Hour hand length, in %.
+     *
+     * @default 50
+     * @example 80
+     */
+    hourHandLength?: HandLength;
+    /**
+     * The length of the part of an hour hand on the opposite side the hand is pointing to, in %.
+     *
+     * @default 10
+     * @example 20
+     */
+    hourHandOppositeLength?: OppositeHandLength;
+    /**
+     * Hour hand width, in pixels.
+     *
+     * @default 4
+     * @example 3
+     */
+    hourHandWidth?: HandWidth;
+    /**
+     * Hour marks length, in %.
+     *
+     * @default 10
+     * @example 8
+     */
+    hourMarksLength?: MarkLength;
+    /**
+     * Hour marks width, in pixels.
+     *
+     * @default 3
+     * @example 2
+     */
+    hourMarksWidth?: MarkWidth;
+    /**
+     * Locale that should be used by the clock. Can be any [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag).
+     *
+     * **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.
+     *
+     * @example 'hu-HU'
+     */
+    locale?: string;
+    /**
+     * Minute hand length, in %.
+     *
+     * @default 70
+     * @example 80
+     */
+    minuteHandLength?: HandLength;
+    /**
+     * The length of the part of a minute hand on the opposite side the hand is pointing to, in %.
+     *
+     * @default 10
+     * @example 20
+     */
+    minuteHandOppositeLength?: OppositeHandLength;
+    /**
+     * Minute hand width, in pixels.
+     *
+     * @default 2
+     * @example 3
+     */
+    minuteHandWidth?: HandWidth;
+    /**
+     * Minute marks length, in %.
+     *
+     * @default 6
+     * @example 8
+     */
+    minuteMarksLength?: MarkLength;
+    /**
+     * Minute marks width, in pixels.
+     *
+     * @default 1
+     * @example 2
+     */
+    minuteMarksWidth?: MarkWidth;
+    /**
+     * Whether hour marks shall be rendered.
+     *
+     * @default true
+     * @example false
+     */
+    renderHourMarks?: boolean;
+    /**
+     * Whether minute hand shall be rendered.
+     *
+     * @default true
+     * @example false
+     */
+    renderMinuteHand?: boolean;
+    /**
+     * Whether minute marks shall be rendered.
+     *
+     * @default true
+     * @example false
+     */
+    renderMinuteMarks?: boolean;
+    /**
+     * Whether numbers shall be rendered.
+     *
+     * @default false
+     * @example true
+     */
+    renderNumbers?: boolean;
+    /**
+     * Whether second hand shall be rendered.
+     *
+     * @default true
+     * @example false
+     */
+    renderSecondHand?: boolean;
+    /**
+     * Second hand length, in %.
+     *
+     * @default 90
+     * @example 80
+     */
+    secondHandLength?: HandLength;
+    /**
+     * The length of the part of a second hand on the opposite side the hand is pointing to, in %.
+     *
+     * @default 10
+     * @example 20
+     */
+    secondHandOppositeLength?: OppositeHandLength;
+    /**
+     * Second hand width, in pixels.
+     *
+     * @default 1
+     * @example 2
+     */
+    secondHandWidth?: HandWidth;
+    /**
+     * Clock size, in pixels (e.g. `200`) or as string (e.g. `"50vw"`).
+     *
+     * @default 150
+     * @example 260
+     * @example '50vw'
+     */
+    size?: React.CSSProperties['width'];
+    /**
+     * Whether to use millisecond precision.
+     *
+     * @default false
+     * @example true
+     */
+    useMillisecondPrecision?: boolean;
+    /**
+     * Clock value. Must be provided.
+     *
+     * @example new Date()
+     */
+    value?: string | Date | null;
+};
+/**
+ * Displays a complete clock.
+ */
+export default function Clock({ className, formatHour, hourHandLength, hourHandOppositeLength, hourHandWidth, hourMarksLength, hourMarksWidth, locale, minuteHandLength, minuteHandOppositeLength, minuteHandWidth, minuteMarksLength, minuteMarksWidth, renderHourMarks, renderMinuteHand, renderMinuteMarks, renderNumbers, renderSecondHand, secondHandLength, secondHandOppositeLength, secondHandWidth, size, useMillisecondPrecision, value, }: ClockProps): React.ReactElement;
Index: node_modules/react-clock/dist/esm/Clock.js
===================================================================
--- node_modules/react-clock/dist/esm/Clock.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/Clock.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,94 @@
+import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
+import clsx from 'clsx';
+import { getHours, getMilliseconds, getMinutes, getSeconds } from '@wojtekmaj/date-utils';
+import Hand from './Hand.js';
+import Mark from './Mark.js';
+import MarkNumber from './MarkNumber.js';
+import { formatHour as defaultFormatHour } from './shared/hourFormatter.js';
+import { safeMax } from './shared/utils.js';
+/**
+ * Displays a complete clock.
+ */
+export default function Clock(_a) {
+    var className = _a.className, _b = _a.formatHour, formatHour = _b === void 0 ? defaultFormatHour : _b, _c = _a.hourHandLength, hourHandLength = _c === void 0 ? 50 : _c, hourHandOppositeLength = _a.hourHandOppositeLength, _d = _a.hourHandWidth, hourHandWidth = _d === void 0 ? 4 : _d, _e = _a.hourMarksLength, hourMarksLength = _e === void 0 ? 10 : _e, _f = _a.hourMarksWidth, hourMarksWidth = _f === void 0 ? 3 : _f, locale = _a.locale, _g = _a.minuteHandLength, minuteHandLength = _g === void 0 ? 70 : _g, minuteHandOppositeLength = _a.minuteHandOppositeLength, _h = _a.minuteHandWidth, minuteHandWidth = _h === void 0 ? 2 : _h, _j = _a.minuteMarksLength, minuteMarksLength = _j === void 0 ? 6 : _j, _k = _a.minuteMarksWidth, minuteMarksWidth = _k === void 0 ? 1 : _k, _l = _a.renderHourMarks, renderHourMarks = _l === void 0 ? true : _l, _m = _a.renderMinuteHand, renderMinuteHand = _m === void 0 ? true : _m, _o = _a.renderMinuteMarks, renderMinuteMarks = _o === void 0 ? true : _o, renderNumbers = _a.renderNumbers, _p = _a.renderSecondHand, renderSecondHand = _p === void 0 ? true : _p, _q = _a.secondHandLength, secondHandLength = _q === void 0 ? 90 : _q, secondHandOppositeLength = _a.secondHandOppositeLength, _r = _a.secondHandWidth, secondHandWidth = _r === void 0 ? 1 : _r, _s = _a.size, size = _s === void 0 ? 150 : _s, useMillisecondPrecision = _a.useMillisecondPrecision, value = _a.value;
+    function renderMinuteMarksFn() {
+        if (!renderMinuteMarks) {
+            return null;
+        }
+        var minuteMarks = [];
+        for (var i = 1; i <= 60; i += 1) {
+            var isHourMark = renderHourMarks && !(i % 5);
+            if (!isHourMark) {
+                minuteMarks.push(_jsx(Mark, { angle: i * 6, length: minuteMarksLength, name: "minute", width: minuteMarksWidth }, "minute_".concat(i)));
+            }
+        }
+        return minuteMarks;
+    }
+    function renderHourMarksFn() {
+        if (!renderHourMarks) {
+            return null;
+        }
+        var hourMarks = [];
+        for (var i = 1; i <= 12; i += 1) {
+            hourMarks.push(_jsx(Mark, { angle: i * 30, length: hourMarksLength, name: "hour", width: hourMarksWidth }, "hour_".concat(i)));
+        }
+        return hourMarks;
+    }
+    function renderNumbersFn() {
+        if (!renderNumbers) {
+            return null;
+        }
+        var numbers = [];
+        for (var i = 1; i <= 12; i += 1) {
+            numbers.push(_jsx(MarkNumber, { angle: i * 30, length: safeMax(renderHourMarks && hourMarksLength, renderMinuteMarks && minuteMarksLength, 0), name: "number", number: formatHour(locale, i) }, "number_".concat(i)));
+        }
+        return numbers;
+    }
+    function renderFace() {
+        return (_jsxs("div", { className: "react-clock__face", children: [renderMinuteMarksFn(), renderHourMarksFn(), renderNumbersFn()] }));
+    }
+    function renderHourHandFn() {
+        var angle = value
+            ? getHours(value) * 30 +
+                getMinutes(value) / 2 +
+                getSeconds(value) / 120 +
+                (useMillisecondPrecision ? getMilliseconds(value) / 120000 : 0)
+            : 0;
+        return (_jsx(Hand, { angle: angle, length: hourHandLength, name: "hour", oppositeLength: hourHandOppositeLength, width: hourHandWidth }));
+    }
+    function renderMinuteHandFn() {
+        if (!renderMinuteHand) {
+            return null;
+        }
+        var angle = value
+            ? getHours(value) * 360 +
+                getMinutes(value) * 6 +
+                getSeconds(value) / 10 +
+                (useMillisecondPrecision ? getMilliseconds(value) / 10000 : 0)
+            : 0;
+        return (_jsx(Hand, { angle: angle, length: minuteHandLength, name: "minute", oppositeLength: minuteHandOppositeLength, width: minuteHandWidth }));
+    }
+    function renderSecondHandFn() {
+        if (!renderSecondHand) {
+            return null;
+        }
+        var angle = value
+            ? getMinutes(value) * 360 +
+                getSeconds(value) * 6 +
+                (useMillisecondPrecision ? getMilliseconds(value) * 0.006 : 0)
+            : 0;
+        return (_jsx(Hand, { angle: angle, length: secondHandLength, name: "second", oppositeLength: secondHandOppositeLength, width: secondHandWidth }));
+    }
+    return (_jsxs("time", { className: clsx('react-clock', className), dateTime: value instanceof Date
+            ? // Returns a string in the format "HH:MM" or "HH:MM:SS"
+                value.toLocaleTimeString('en', {
+                    hourCycle: 'h23',
+                    hour: '2-digit',
+                    minute: renderMinuteHand ? '2-digit' : undefined,
+                    second: renderSecondHand ? '2-digit' : undefined,
+                })
+            : value || undefined, style: {
+            width: size,
+            height: size,
+        }, children: [renderFace(), renderHourHandFn(), renderMinuteHandFn(), renderSecondHandFn()] }));
+}
Index: node_modules/react-clock/dist/esm/Hand.d.ts
===================================================================
--- node_modules/react-clock/dist/esm/Hand.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/Hand.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import type { HandLength, HandWidth, OppositeHandLength } from './shared/types.js';
+type HandProps = {
+    angle?: number;
+    length?: HandLength;
+    name: string;
+    oppositeLength?: OppositeHandLength;
+    width?: HandWidth;
+};
+export default function Hand({ angle, name, length, oppositeLength, width, }: HandProps): React.ReactElement;
+export {};
Index: node_modules/react-clock/dist/esm/Hand.js
===================================================================
--- node_modules/react-clock/dist/esm/Hand.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/Hand.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { jsx as _jsx } from "react/jsx-runtime";
+export default function Hand(_a) {
+    var _b = _a.angle, angle = _b === void 0 ? 0 : _b, name = _a.name, _c = _a.length, length = _c === void 0 ? 100 : _c, _d = _a.oppositeLength, oppositeLength = _d === void 0 ? 10 : _d, _e = _a.width, width = _e === void 0 ? 1 : _e;
+    return (_jsx("div", { className: "react-clock__hand react-clock__".concat(name, "-hand"), style: {
+            transform: "rotate(".concat(angle, "deg)"),
+        }, children: _jsx("div", { className: "react-clock__hand__body react-clock__".concat(name, "-hand__body"), style: {
+                width: "".concat(width, "px"),
+                top: "".concat(50 - length / 2, "%"),
+                bottom: "".concat(50 - oppositeLength / 2, "%"),
+            } }) }));
+}
Index: node_modules/react-clock/dist/esm/Mark.d.ts
===================================================================
--- node_modules/react-clock/dist/esm/Mark.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/Mark.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import type { MarkLength, MarkWidth } from './shared/types.js';
+type MarkProps = {
+    angle?: number;
+    length?: MarkLength;
+    name: string;
+    width?: MarkWidth;
+};
+declare const Mark: React.FC<MarkProps>;
+export default Mark;
Index: node_modules/react-clock/dist/esm/Mark.js
===================================================================
--- node_modules/react-clock/dist/esm/Mark.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/Mark.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { jsx as _jsx } from "react/jsx-runtime";
+import { memo } from 'react';
+var Mark = memo(function Mark(_a) {
+    var _b = _a.angle, angle = _b === void 0 ? 0 : _b, _c = _a.length, length = _c === void 0 ? 10 : _c, name = _a.name, _d = _a.width, width = _d === void 0 ? 1 : _d;
+    return (_jsx("div", { className: "react-clock__mark react-clock__".concat(name, "-mark"), style: {
+            transform: "rotate(".concat(angle, "deg)"),
+        }, children: _jsx("div", { className: "react-clock__mark__body react-clock__".concat(name, "-mark__body"), style: {
+                width: "".concat(width, "px"),
+                top: 0,
+                bottom: "".concat(100 - length / 2, "%"),
+            } }) }));
+});
+export default Mark;
Index: node_modules/react-clock/dist/esm/MarkNumber.d.ts
===================================================================
--- node_modules/react-clock/dist/esm/MarkNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/MarkNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import type { MarkLength } from './shared/types.js';
+type MarkNumberProps = {
+    angle?: number;
+    length?: MarkLength;
+    name: string;
+    number: React.ReactNode;
+};
+declare const MarkNumber: React.FC<MarkNumberProps>;
+export default MarkNumber;
Index: node_modules/react-clock/dist/esm/MarkNumber.js
===================================================================
--- node_modules/react-clock/dist/esm/MarkNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/MarkNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { jsx as _jsx } from "react/jsx-runtime";
+import { memo } from 'react';
+var MarkNumber = memo(function MarkNumber(_a) {
+    var _b = _a.angle, angle = _b === void 0 ? 0 : _b, _c = _a.length, length = _c === void 0 ? 10 : _c, name = _a.name, number = _a.number;
+    return (_jsx("div", { className: "react-clock__mark react-clock__".concat(name, "-mark"), style: {
+            transform: "rotate(".concat(angle, "deg)"),
+        }, children: _jsx("div", { className: "react-clock__mark__number", style: {
+                transform: "rotate(-".concat(angle, "deg)"),
+                top: "".concat(length / 2, "%"),
+            }, children: number }) }));
+});
+export default MarkNumber;
Index: node_modules/react-clock/dist/esm/index.d.ts
===================================================================
--- node_modules/react-clock/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import Clock from './Clock.js';
+export type { ClockProps } from './Clock.js';
+export { Clock };
+export default Clock;
Index: node_modules/react-clock/dist/esm/index.js
===================================================================
--- node_modules/react-clock/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import Clock from './Clock.js';
+export { Clock };
+export default Clock;
Index: node_modules/react-clock/dist/esm/shared/hourFormatter.d.ts
===================================================================
--- node_modules/react-clock/dist/esm/shared/hourFormatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/shared/hourFormatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare function formatHour(locale: string | undefined, hour: number): string;
Index: node_modules/react-clock/dist/esm/shared/hourFormatter.js
===================================================================
--- node_modules/react-clock/dist/esm/shared/hourFormatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/shared/hourFormatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import getUserLocale from 'get-user-locale';
+export function formatHour(locale, hour) {
+    return hour.toLocaleString(locale || getUserLocale() || undefined);
+}
Index: node_modules/react-clock/dist/esm/shared/types.d.ts
===================================================================
--- node_modules/react-clock/dist/esm/shared/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/shared/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export type ClassName = string | null | undefined | (string | null | undefined)[];
+export type HandLength = number;
+export type OppositeHandLength = number;
+export type HandWidth = number;
+export type MarkLength = HandLength;
+export type MarkWidth = HandWidth;
Index: node_modules/react-clock/dist/esm/shared/types.js
===================================================================
--- node_modules/react-clock/dist/esm/shared/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/shared/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/react-clock/dist/esm/shared/utils.d.ts
===================================================================
--- node_modules/react-clock/dist/esm/shared/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/shared/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare function safeMax(...args: unknown[]): number;
Index: node_modules/react-clock/dist/esm/shared/utils.js
===================================================================
--- node_modules/react-clock/dist/esm/shared/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/dist/esm/shared/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+function isValidNumber(num) {
+    return num !== null && num !== false && !Number.isNaN(Number(num));
+}
+export function safeMax() {
+    var args = [];
+    for (var _i = 0; _i < arguments.length; _i++) {
+        args[_i] = arguments[_i];
+    }
+    return Math.max.apply(Math, args.filter(isValidNumber));
+}
Index: node_modules/react-clock/package.json
===================================================================
--- node_modules/react-clock/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,99 @@
+{
+  "name": "react-clock",
+  "version": "5.1.0",
+  "description": "An analog clock for your React app.",
+  "type": "module",
+  "sideEffects": [
+    "*.css"
+  ],
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/esm/index.js",
+  "source": "./src/index.ts",
+  "types": "./dist/cjs/index.d.ts",
+  "exports": {
+    ".": {
+      "import": "./dist/esm/index.js",
+      "require": "./dist/cjs/index.js"
+    },
+    "./*": "./*"
+  },
+  "scripts": {
+    "build": "yarn build-js && yarn copy-styles",
+    "build-js": "yarn build-js-esm && yarn build-js-cjs && yarn build-js-cjs-package",
+    "build-js-esm": "tsc --project tsconfig.build.json --outDir dist/esm",
+    "build-js-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs --moduleResolution node --verbatimModuleSyntax false",
+    "build-js-cjs-package": "echo '{\n  \"type\": \"commonjs\"\n}' > dist/cjs/package.json",
+    "clean": "rimraf dist",
+    "copy-styles": "cpy 'src/**/*.css' dist",
+    "format": "biome format",
+    "lint": "biome lint",
+    "prepack": "yarn clean && yarn build",
+    "test": "yarn lint && yarn tsc && yarn format && yarn unit",
+    "tsc": "tsc",
+    "unit": "vitest",
+    "watch": "yarn build-js-esm --watch & yarn build-js-cjs --watch & node --eval \"fs.watch('src', () => child_process.exec('yarn copy-styles'))\""
+  },
+  "keywords": [
+    "clock",
+    "digital clock",
+    "analog clock",
+    "time",
+    "react"
+  ],
+  "author": {
+    "name": "Wojciech Maj",
+    "email": "kontakt@wojtekmaj.pl"
+  },
+  "contributors": [
+    {
+      "name": "Yin Hengli",
+      "email": "yinhengliben@gmail.com"
+    }
+  ],
+  "license": "MIT",
+  "dependencies": {
+    "@wojtekmaj/date-utils": "^1.5.0",
+    "clsx": "^2.0.0",
+    "get-user-locale": "^2.2.1"
+  },
+  "devDependencies": {
+    "@biomejs/biome": "1.9.0",
+    "@testing-library/dom": "^10.0.0",
+    "@testing-library/jest-dom": "^6.0.0",
+    "@testing-library/react": "^16.0.0",
+    "@types/node": "*",
+    "@types/react": "*",
+    "@types/react-dom": "*",
+    "cpy-cli": "^5.0.0",
+    "happy-dom": "^12.6.0",
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0",
+    "rimraf": "^6.0.0",
+    "typescript": "^5.5.2",
+    "vitest": "^2.1.1"
+  },
+  "peerDependencies": {
+    "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+    "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+    "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+  },
+  "peerDependenciesMeta": {
+    "@types/react": {
+      "optional": true
+    }
+  },
+  "publishConfig": {
+    "access": "public",
+    "provenance": true
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/wojtekmaj/react-clock.git",
+    "directory": "packages/react-clock"
+  },
+  "funding": "https://github.com/wojtekmaj/react-clock?sponsor=1"
+}
Index: node_modules/react-clock/src/Clock.css
===================================================================
--- node_modules/react-clock/src/Clock.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/Clock.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+.react-clock {
+  display: block;
+  position: relative;
+}
+
+.react-clock,
+.react-clock *,
+.react-clock *:before,
+.react-clock *:after {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.react-clock__face {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  border: 1px solid black;
+  border-radius: 50%;
+}
+
+.react-clock__hand {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 50%;
+  right: 50%;
+}
+
+.react-clock__hand__body {
+  position: absolute;
+  background-color: black;
+  transform: translateX(-50%);
+}
+
+.react-clock__mark {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 50%;
+  right: 50%;
+}
+
+.react-clock__mark__body {
+  position: absolute;
+  background-color: black;
+  transform: translateX(-50%);
+}
+
+.react-clock__mark__number {
+  position: absolute;
+  left: -40px;
+  width: 80px;
+  text-align: center;
+}
+
+.react-clock__second-hand__body {
+  background-color: red;
+}
Index: node_modules/react-clock/src/Clock.spec.tsx
===================================================================
--- node_modules/react-clock/src/Clock.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/Clock.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,310 @@
+import { describe, expect, it } from 'vitest';
+
+import { render } from '@testing-library/react';
+
+import Clock from './Clock.js';
+
+describe('Clock', () => {
+  describe('<time> element', () => {
+    it('is rendered properly', () => {
+      const { container } = render(<Clock />);
+
+      const time = container.querySelector('time');
+
+      expect(time).toBeInTheDocument();
+    });
+
+    it('has 150px size by default', () => {
+      const { container } = render(<Clock />);
+
+      const time = container.querySelector('time');
+
+      expect(time).toHaveStyle('width: 150px');
+      expect(time).toHaveStyle('height: 150px');
+    });
+
+    it('has proper size when given size', () => {
+      const size = 167;
+
+      const { container } = render(<Clock size={size} />);
+
+      const time = container.querySelector('time');
+
+      expect(time).toHaveAttribute('style', `width: ${size}px; height: ${size}px;`);
+    });
+
+    it('has proper datetime attribute when given Date value', () => {
+      const date = new Date();
+
+      const { container } = render(<Clock value={date} />);
+
+      const time = container.querySelector('time');
+
+      expect(time).toHaveAttribute(
+        'datetime',
+        date.toLocaleTimeString('en', {
+          hourCycle: 'h23',
+          hour: '2-digit',
+          minute: '2-digit',
+          second: '2-digit',
+        }),
+      );
+    });
+
+    it('has proper datetime attribute when given string value', () => {
+      const date = '22:17:00';
+
+      const { container } = render(<Clock value={date} />);
+
+      const time = container.querySelector('time');
+
+      expect(time).toHaveAttribute('datetime', date);
+    });
+  });
+
+  describe('clock face', () => {
+    it('is rendered properly', () => {
+      const { container } = render(<Clock />);
+
+      const face = container.querySelector('.react-clock__face');
+
+      expect(face).toBeInTheDocument();
+    });
+
+    it('has hour and minute marks by default', () => {
+      const { container } = render(<Clock />);
+
+      const hourMarks = container.querySelectorAll('.react-clock__hour-mark');
+      const minuteMarks = container.querySelectorAll('.react-clock__minute-mark');
+
+      expect(hourMarks).toHaveLength(12);
+      expect(minuteMarks).toHaveLength(60 - 12);
+    });
+
+    it('does not have hour numbers rendered by default', () => {
+      const { container } = render(<Clock />);
+
+      const hourMarks = container.querySelectorAll('.react-clock__hour-mark');
+
+      expect(hourMarks[0]).not.toHaveTextContent('1');
+    });
+
+    it('has hour numbers given renderNumbers flag', () => {
+      const { container } = render(<Clock renderNumbers />);
+
+      const numberMarks = container.querySelectorAll('.react-clock__number-mark');
+
+      numberMarks.forEach((numberMark, index) => {
+        expect(numberMark).toHaveTextContent(`${index + 1}`);
+      });
+    });
+
+    it('uses formatHour properly if given', () => {
+      const formatHour = () => 'H';
+      const { container } = render(<Clock formatHour={formatHour} renderNumbers />);
+
+      const numberMarks = container.querySelectorAll('.react-clock__number-mark');
+
+      expect(numberMarks[0]).toHaveTextContent('H');
+    });
+
+    it('has only minute marks when renderHourMarks is false', () => {
+      const { container } = render(<Clock renderHourMarks={false} />);
+
+      const hourMarks = container.querySelectorAll('.react-clock__hour-mark');
+      const minuteMarks = container.querySelectorAll('.react-clock__minute-mark');
+
+      expect(hourMarks).toHaveLength(0);
+      expect(minuteMarks).toHaveLength(60);
+    });
+
+    it('has only hour marks when renderMinuteMarks is false', () => {
+      const { container } = render(<Clock renderMinuteMarks={false} />);
+
+      const hourMarks = container.querySelectorAll('.react-clock__hour-mark');
+      const minuteMarks = container.querySelectorAll('.react-clock__minute-mark');
+
+      expect(hourMarks).toHaveLength(12);
+      expect(minuteMarks).toHaveLength(0);
+    });
+
+    it('has no marks when renderHourMarks and renderMinuteMarks are false', () => {
+      const { container } = render(<Clock renderHourMarks={false} renderMinuteMarks={false} />);
+
+      const hourMarks = container.querySelectorAll('.react-clock__hour-mark');
+      const minuteMarks = container.querySelectorAll('.react-clock__minute-mark');
+
+      expect(hourMarks).toHaveLength(0);
+      expect(minuteMarks).toHaveLength(0);
+    });
+  });
+
+  const fullCircle = 360;
+  const hourAngle = fullCircle / 12;
+  const hourMinuteAngle = hourAngle / 60;
+  const hourSecondAngle = hourMinuteAngle / 60;
+  const hourMillisecondAngle = hourSecondAngle / 1000;
+  const minuteAngle = fullCircle / 60;
+  const minuteSecondAngle = minuteAngle / 60;
+  const minuteMillisecondAngle = minuteSecondAngle / 1000;
+  const secondAngle = fullCircle / 60;
+  const secondMillisecondAngle = secondAngle / 1000;
+
+  function getDeg(transform: string) {
+    const match = transform.match(/rotate\(([0-9.]*)deg\)/);
+
+    if (!match) {
+      throw new Error('Could not parse transform');
+    }
+
+    const deg = match[1];
+
+    if (!deg) {
+      throw new Error('Could not parse transform');
+    }
+
+    return Number.parseFloat(deg);
+  }
+
+  function getAngle(hand: HTMLElement) {
+    return getDeg(window.getComputedStyle(hand).transform) % 360;
+  }
+
+  describe('hour hand', () => {
+    it('is rendered properly', () => {
+      const { container } = render(<Clock />);
+
+      const hand = container.querySelector('.react-clock__hour-hand');
+
+      expect(hand).toBeInTheDocument();
+    });
+
+    it('is properly angled by default', () => {
+      const hour = 9;
+      const minute = 20;
+      const second = 47;
+      const date = new Date(2017, 0, 1, hour, minute, second);
+
+      const { container } = render(<Clock value={date} />);
+
+      const hand = container.querySelector('.react-clock__hour-hand') as HTMLDivElement;
+
+      expect(getAngle(hand)).toBeCloseTo(
+        hour * hourAngle + minute * hourMinuteAngle + second * hourSecondAngle,
+      );
+    });
+
+    it('is properly angled when given useMillisecondPrecision', () => {
+      const hour = 9;
+      const minute = 20;
+      const second = 47;
+      const millisecond = 321;
+      const date = new Date(2017, 0, 1, hour, minute, second, millisecond);
+
+      const { container } = render(<Clock useMillisecondPrecision value={date} />);
+
+      const hand = container.querySelector('.react-clock__hour-hand') as HTMLDivElement;
+
+      expect(getAngle(hand)).toBeCloseTo(
+        hour * hourAngle +
+          minute * hourMinuteAngle +
+          second * hourSecondAngle +
+          millisecond * hourMillisecondAngle,
+      );
+    });
+  });
+
+  describe('minute hand', () => {
+    it('is rendered properly', () => {
+      const { container } = render(<Clock />);
+
+      const hand = container.querySelector('.react-clock__minute-hand');
+
+      expect(hand).toBeInTheDocument();
+    });
+
+    it('is not rendered when renderMinuteHand is false', () => {
+      const { container } = render(<Clock renderMinuteHand={false} />);
+
+      const hand = container.querySelector('.react-clock__minute-hand');
+
+      expect(hand).not.toBeInTheDocument();
+    });
+
+    it('is properly angled by default', () => {
+      const hour = 9;
+      const minute = 20;
+      const second = 47;
+      const date = new Date(2017, 0, 1, hour, minute, second);
+
+      const { container } = render(<Clock value={date} />);
+
+      const hand = container.querySelector('.react-clock__minute-hand') as HTMLDivElement;
+
+      expect(getAngle(hand)).toBeCloseTo(minute * minuteAngle + second * minuteSecondAngle);
+    });
+
+    it('is properly angled when given useMillisecondPrecision', () => {
+      const hour = 9;
+      const minute = 20;
+      const second = 47;
+      const millisecond = 321;
+      const date = new Date(2017, 0, 1, hour, minute, second, millisecond);
+
+      const { container } = render(<Clock useMillisecondPrecision value={date} />);
+
+      const hand = container.querySelector('.react-clock__minute-hand') as HTMLDivElement;
+
+      expect(getAngle(hand)).toBeCloseTo(
+        minute * minuteAngle + second * minuteSecondAngle + millisecond * minuteMillisecondAngle,
+      );
+    });
+  });
+
+  describe('second hand', () => {
+    it('is rendered properly', () => {
+      const { container } = render(<Clock />);
+
+      const hand = container.querySelector('.react-clock__second-hand');
+
+      expect(hand).toBeInTheDocument();
+    });
+
+    it('is not rendered when renderSecondHand is false', () => {
+      const { container } = render(<Clock renderSecondHand={false} />);
+
+      const hand = container.querySelector('.react-clock__second-hand');
+
+      expect(hand).not.toBeInTheDocument();
+    });
+
+    it('is properly angled by default', () => {
+      const hour = 9;
+      const minute = 20;
+      const second = 47;
+      const date = new Date(2017, 0, 1, hour, minute, second);
+
+      const { container } = render(<Clock value={date} />);
+
+      const hand = container.querySelector('.react-clock__second-hand') as HTMLDivElement;
+
+      expect(getAngle(hand)).toBeCloseTo(second * secondAngle);
+    });
+
+    it('is properly angled when given useMillisecondPrecision', () => {
+      const hour = 9;
+      const minute = 20;
+      const second = 47;
+      const millisecond = 321;
+      const date = new Date(2017, 0, 1, hour, minute, second, millisecond);
+
+      const { container } = render(<Clock useMillisecondPrecision value={date} />);
+
+      const hand = container.querySelector('.react-clock__second-hand') as HTMLDivElement;
+
+      expect(getAngle(hand)).toBeCloseTo(
+        second * secondAngle + millisecond * secondMillisecondAngle,
+      );
+    });
+  });
+});
Index: node_modules/react-clock/src/Clock.tsx
===================================================================
--- node_modules/react-clock/src/Clock.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/Clock.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,387 @@
+import clsx from 'clsx';
+import { getHours, getMilliseconds, getMinutes, getSeconds } from '@wojtekmaj/date-utils';
+
+import Hand from './Hand.js';
+import Mark from './Mark.js';
+import MarkNumber from './MarkNumber.js';
+
+import { formatHour as defaultFormatHour } from './shared/hourFormatter.js';
+import { safeMax } from './shared/utils.js';
+
+import type {
+  ClassName,
+  HandLength,
+  HandWidth,
+  MarkLength,
+  MarkWidth,
+  OppositeHandLength,
+} from './shared/types.js';
+
+export type ClockProps = {
+  /**
+   * Class name(s) that will be added along with `"react-clock"` to the main react-clock `<time>` element.
+   *
+   * @example 'class1 class2'
+   * @example ['class1', 'class2 class3']
+   */
+  className?: ClassName;
+  /**
+   * Function called to override default formatting of hour marks. Can be used to use your own formatting function.
+   *
+   * @example (locale, hour) => formatHour(hour, 'HH')
+   */
+  formatHour?: typeof defaultFormatHour;
+  /**
+   * Hour hand length, in %.
+   *
+   * @default 50
+   * @example 80
+   */
+  hourHandLength?: HandLength;
+  /**
+   * The length of the part of an hour hand on the opposite side the hand is pointing to, in %.
+   *
+   * @default 10
+   * @example 20
+   */
+  hourHandOppositeLength?: OppositeHandLength;
+  /**
+   * Hour hand width, in pixels.
+   *
+   * @default 4
+   * @example 3
+   */
+  hourHandWidth?: HandWidth;
+  /**
+   * Hour marks length, in %.
+   *
+   * @default 10
+   * @example 8
+   */
+  hourMarksLength?: MarkLength;
+  /**
+   * Hour marks width, in pixels.
+   *
+   * @default 3
+   * @example 2
+   */
+  hourMarksWidth?: MarkWidth;
+  /**
+   * Locale that should be used by the clock. Can be any [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag).
+   *
+   * **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.
+   *
+   * @example 'hu-HU'
+   */
+  locale?: string;
+  /**
+   * Minute hand length, in %.
+   *
+   * @default 70
+   * @example 80
+   */
+  minuteHandLength?: HandLength;
+  /**
+   * The length of the part of a minute hand on the opposite side the hand is pointing to, in %.
+   *
+   * @default 10
+   * @example 20
+   */
+  minuteHandOppositeLength?: OppositeHandLength;
+  /**
+   * Minute hand width, in pixels.
+   *
+   * @default 2
+   * @example 3
+   */
+  minuteHandWidth?: HandWidth;
+  /**
+   * Minute marks length, in %.
+   *
+   * @default 6
+   * @example 8
+   */
+  minuteMarksLength?: MarkLength;
+  /**
+   * Minute marks width, in pixels.
+   *
+   * @default 1
+   * @example 2
+   */
+  minuteMarksWidth?: MarkWidth;
+  /**
+   * Whether hour marks shall be rendered.
+   *
+   * @default true
+   * @example false
+   */
+  renderHourMarks?: boolean;
+  /**
+   * Whether minute hand shall be rendered.
+   *
+   * @default true
+   * @example false
+   */
+  renderMinuteHand?: boolean;
+  /**
+   * Whether minute marks shall be rendered.
+   *
+   * @default true
+   * @example false
+   */
+  renderMinuteMarks?: boolean;
+  /**
+   * Whether numbers shall be rendered.
+   *
+   * @default false
+   * @example true
+   */
+  renderNumbers?: boolean;
+  /**
+   * Whether second hand shall be rendered.
+   *
+   * @default true
+   * @example false
+   */
+  renderSecondHand?: boolean;
+  /**
+   * Second hand length, in %.
+   *
+   * @default 90
+   * @example 80
+   */
+  secondHandLength?: HandLength;
+  /**
+   * The length of the part of a second hand on the opposite side the hand is pointing to, in %.
+   *
+   * @default 10
+   * @example 20
+   */
+  secondHandOppositeLength?: OppositeHandLength;
+  /**
+   * Second hand width, in pixels.
+   *
+   * @default 1
+   * @example 2
+   */
+  secondHandWidth?: HandWidth;
+  /**
+   * Clock size, in pixels (e.g. `200`) or as string (e.g. `"50vw"`).
+   *
+   * @default 150
+   * @example 260
+   * @example '50vw'
+   */
+  size?: React.CSSProperties['width'];
+  /**
+   * Whether to use millisecond precision.
+   *
+   * @default false
+   * @example true
+   */
+  useMillisecondPrecision?: boolean;
+  /**
+   * Clock value. Must be provided.
+   *
+   * @example new Date()
+   */
+  value?: string | Date | null;
+};
+
+/**
+ * Displays a complete clock.
+ */
+export default function Clock({
+  className,
+  formatHour = defaultFormatHour,
+  hourHandLength = 50,
+  hourHandOppositeLength,
+  hourHandWidth = 4,
+  hourMarksLength = 10,
+  hourMarksWidth = 3,
+  locale,
+  minuteHandLength = 70,
+  minuteHandOppositeLength,
+  minuteHandWidth = 2,
+  minuteMarksLength = 6,
+  minuteMarksWidth = 1,
+  renderHourMarks = true,
+  renderMinuteHand = true,
+  renderMinuteMarks = true,
+  renderNumbers,
+  renderSecondHand = true,
+  secondHandLength = 90,
+  secondHandOppositeLength,
+  secondHandWidth = 1,
+  size = 150,
+  useMillisecondPrecision,
+  value,
+}: ClockProps): React.ReactElement {
+  function renderMinuteMarksFn() {
+    if (!renderMinuteMarks) {
+      return null;
+    }
+
+    const minuteMarks = [];
+    for (let i = 1; i <= 60; i += 1) {
+      const isHourMark = renderHourMarks && !(i % 5);
+
+      if (!isHourMark) {
+        minuteMarks.push(
+          <Mark
+            key={`minute_${i}`}
+            angle={i * 6}
+            length={minuteMarksLength}
+            name="minute"
+            width={minuteMarksWidth}
+          />,
+        );
+      }
+    }
+    return minuteMarks;
+  }
+
+  function renderHourMarksFn() {
+    if (!renderHourMarks) {
+      return null;
+    }
+
+    const hourMarks = [];
+    for (let i = 1; i <= 12; i += 1) {
+      hourMarks.push(
+        <Mark
+          key={`hour_${i}`}
+          angle={i * 30}
+          length={hourMarksLength}
+          name="hour"
+          width={hourMarksWidth}
+        />,
+      );
+    }
+    return hourMarks;
+  }
+
+  function renderNumbersFn() {
+    if (!renderNumbers) {
+      return null;
+    }
+
+    const numbers = [];
+    for (let i = 1; i <= 12; i += 1) {
+      numbers.push(
+        <MarkNumber
+          key={`number_${i}`}
+          angle={i * 30}
+          length={safeMax(
+            renderHourMarks && hourMarksLength,
+            renderMinuteMarks && minuteMarksLength,
+            0,
+          )}
+          name="number"
+          number={formatHour(locale, i)}
+        />,
+      );
+    }
+    return numbers;
+  }
+
+  function renderFace() {
+    return (
+      <div className="react-clock__face">
+        {renderMinuteMarksFn()}
+        {renderHourMarksFn()}
+        {renderNumbersFn()}
+      </div>
+    );
+  }
+
+  function renderHourHandFn() {
+    const angle = value
+      ? getHours(value) * 30 +
+        getMinutes(value) / 2 +
+        getSeconds(value) / 120 +
+        (useMillisecondPrecision ? getMilliseconds(value) / 120000 : 0)
+      : 0;
+
+    return (
+      <Hand
+        angle={angle}
+        length={hourHandLength}
+        name="hour"
+        oppositeLength={hourHandOppositeLength}
+        width={hourHandWidth}
+      />
+    );
+  }
+
+  function renderMinuteHandFn() {
+    if (!renderMinuteHand) {
+      return null;
+    }
+
+    const angle = value
+      ? getHours(value) * 360 +
+        getMinutes(value) * 6 +
+        getSeconds(value) / 10 +
+        (useMillisecondPrecision ? getMilliseconds(value) / 10000 : 0)
+      : 0;
+
+    return (
+      <Hand
+        angle={angle}
+        length={minuteHandLength}
+        name="minute"
+        oppositeLength={minuteHandOppositeLength}
+        width={minuteHandWidth}
+      />
+    );
+  }
+
+  function renderSecondHandFn() {
+    if (!renderSecondHand) {
+      return null;
+    }
+
+    const angle = value
+      ? getMinutes(value) * 360 +
+        getSeconds(value) * 6 +
+        (useMillisecondPrecision ? getMilliseconds(value) * 0.006 : 0)
+      : 0;
+
+    return (
+      <Hand
+        angle={angle}
+        length={secondHandLength}
+        name="second"
+        oppositeLength={secondHandOppositeLength}
+        width={secondHandWidth}
+      />
+    );
+  }
+
+  return (
+    <time
+      className={clsx('react-clock', className)}
+      dateTime={
+        value instanceof Date
+          ? // Returns a string in the format "HH:MM" or "HH:MM:SS"
+            value.toLocaleTimeString('en', {
+              hourCycle: 'h23',
+              hour: '2-digit',
+              minute: renderMinuteHand ? '2-digit' : undefined,
+              second: renderSecondHand ? '2-digit' : undefined,
+            })
+          : value || undefined
+      }
+      style={{
+        width: size,
+        height: size,
+      }}
+    >
+      {renderFace()}
+      {renderHourHandFn()}
+      {renderMinuteHandFn()}
+      {renderSecondHandFn()}
+    </time>
+  );
+}
Index: node_modules/react-clock/src/Hand.spec.tsx
===================================================================
--- node_modules/react-clock/src/Hand.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/Hand.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+import { describe, expect, it } from 'vitest';
+import { render } from '@testing-library/react';
+
+import Hand from './Hand.js';
+
+describe('Hand', () => {
+  it('renders a hand with given name', () => {
+    const { container } = render(<Hand name="minute" />);
+
+    const hand = container.querySelector('.react-clock__hand');
+    const handBody = container.querySelector('.react-clock__hand__body');
+
+    expect(hand).toHaveClass('react-clock__minute-hand');
+    expect(handBody).toHaveClass('react-clock__minute-hand__body');
+  });
+
+  it('renders hand angled at 0° by default', () => {
+    const { container } = render(<Hand name="minute" />);
+
+    const hand = container.querySelector('.react-clock__hand');
+
+    expect(hand).toHaveStyle('transform: rotate(0deg)');
+  });
+
+  it('renders properly angled hand given angle prop', () => {
+    const { container } = render(<Hand angle={15} name="minute" />);
+
+    const hand = container.querySelector('.react-clock__hand');
+
+    expect(hand).toHaveStyle('transform: rotate(15deg)');
+  });
+
+  it('renders hand with 100% length by default', () => {
+    const { container } = render(<Hand name="minute" />);
+
+    const handBody = container.querySelector('.react-clock__hand__body');
+
+    expect(handBody).toHaveStyle('top: 0%');
+  });
+
+  it('renders hand with proper length given length prop', () => {
+    const { container } = render(<Hand length={50} name="minute" />);
+
+    const handBody = container.querySelector('.react-clock__hand__body');
+
+    expect(handBody).toHaveStyle('top: 25%');
+  });
+
+  it('renders hand with 10% oppositeLength by default', () => {
+    const { container } = render(<Hand name="minute" />);
+
+    const handBody = container.querySelector('.react-clock__hand__body');
+
+    expect(handBody).toHaveStyle('bottom: 45%');
+  });
+
+  it('renders hand with proper oppositeLength given oppositeLength prop', () => {
+    const { container } = render(<Hand name="minute" oppositeLength={50} />);
+
+    const handBody = container.querySelector('.react-clock__hand__body');
+
+    expect(handBody).toHaveStyle('bottom: 25%');
+  });
+
+  it('renders hand with 1px width by default', () => {
+    const { container } = render(<Hand name="minute" />);
+
+    const handBody = container.querySelector('.react-clock__hand__body');
+
+    expect(handBody).toHaveStyle('width: 1px');
+  });
+
+  it('renders hand with proper width given length prop', () => {
+    const { container } = render(<Hand name="minute" width={5} />);
+
+    const handBody = container.querySelector('.react-clock__hand__body');
+
+    expect(handBody).toHaveStyle('width: 5px');
+  });
+});
Index: node_modules/react-clock/src/Hand.tsx
===================================================================
--- node_modules/react-clock/src/Hand.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/Hand.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import type { HandLength, HandWidth, OppositeHandLength } from './shared/types.js';
+
+type HandProps = {
+  angle?: number;
+  length?: HandLength;
+  name: string;
+  oppositeLength?: OppositeHandLength;
+  width?: HandWidth;
+};
+
+export default function Hand({
+  angle = 0,
+  name,
+  length = 100,
+  oppositeLength = 10,
+  width = 1,
+}: HandProps): React.ReactElement {
+  return (
+    <div
+      className={`react-clock__hand react-clock__${name}-hand`}
+      style={{
+        transform: `rotate(${angle}deg)`,
+      }}
+    >
+      <div
+        className={`react-clock__hand__body react-clock__${name}-hand__body`}
+        style={{
+          width: `${width}px`,
+          top: `${50 - length / 2}%`,
+          bottom: `${50 - oppositeLength / 2}%`,
+        }}
+      />
+    </div>
+  );
+}
Index: node_modules/react-clock/src/Mark.spec.tsx
===================================================================
--- node_modules/react-clock/src/Mark.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/Mark.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+import { describe, expect, it } from 'vitest';
+import { render } from '@testing-library/react';
+
+import Mark from './Mark.js';
+
+describe('Mark', () => {
+  it('renders a hand with given name', () => {
+    const { container } = render(<Mark name="minute" />);
+
+    const mark = container.querySelector('.react-clock__mark');
+    const markBody = container.querySelector('.react-clock__mark__body');
+
+    expect(mark).toHaveClass('react-clock__minute-mark');
+    expect(markBody).toHaveClass('react-clock__minute-mark__body');
+  });
+
+  it('renders mark angled at 0° by default', () => {
+    const { container } = render(<Mark name="minute" />);
+
+    const mark = container.querySelector('.react-clock__mark');
+
+    expect(mark).toHaveStyle('transform: rotate(0deg)');
+  });
+
+  it('renders properly angled mark given angle prop', () => {
+    const { container } = render(<Mark angle={15} name="minute" />);
+
+    const mark = container.querySelector('.react-clock__mark');
+
+    expect(mark).toHaveStyle('transform: rotate(15deg)');
+  });
+
+  it('renders mark with 10% length by default', () => {
+    const { container } = render(<Mark name="minute" />);
+
+    const markBody = container.querySelector('.react-clock__mark__body');
+
+    expect(markBody).toHaveStyle('bottom: 95%');
+  });
+
+  it('renders mark with proper length given length prop', () => {
+    const { container } = render(<Mark length={50} name="minute" />);
+
+    const markBody = container.querySelector('.react-clock__mark__body');
+
+    expect(markBody).toHaveStyle('bottom: 75%');
+  });
+
+  it('renders mark with 1px width by default', () => {
+    const { container } = render(<Mark name="minute" />);
+
+    const markBody = container.querySelector('.react-clock__mark__body');
+
+    expect(markBody).toHaveStyle('width: 1px');
+  });
+
+  it('renders mark with proper length given length prop', () => {
+    const { container } = render(<Mark name="minute" width={5} />);
+
+    const markBody = container.querySelector('.react-clock__mark__body');
+
+    expect(markBody).toHaveStyle('width: 5px');
+  });
+});
Index: node_modules/react-clock/src/Mark.tsx
===================================================================
--- node_modules/react-clock/src/Mark.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/Mark.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { memo } from 'react';
+
+import type { MarkLength, MarkWidth } from './shared/types.js';
+
+type MarkProps = {
+  angle?: number;
+  length?: MarkLength;
+  name: string;
+  width?: MarkWidth;
+};
+
+const Mark: React.FC<MarkProps> = memo(function Mark({
+  angle = 0,
+  length = 10,
+  name,
+  width = 1,
+}: MarkProps): React.ReactElement {
+  return (
+    <div
+      className={`react-clock__mark react-clock__${name}-mark`}
+      style={{
+        transform: `rotate(${angle}deg)`,
+      }}
+    >
+      <div
+        className={`react-clock__mark__body react-clock__${name}-mark__body`}
+        style={{
+          width: `${width}px`,
+          top: 0,
+          bottom: `${100 - length / 2}%`,
+        }}
+      />
+    </div>
+  );
+});
+
+export default Mark;
Index: node_modules/react-clock/src/MarkNumber.spec.tsx
===================================================================
--- node_modules/react-clock/src/MarkNumber.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/MarkNumber.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { describe, expect, it } from 'vitest';
+import { render } from '@testing-library/react';
+
+import MarkNumber from './MarkNumber.js';
+
+describe('MarkNumber', () => {
+  it('renders number given number prop', () => {
+    const { container } = render(<MarkNumber name="minute" number={1} />);
+
+    const markNumber = container.querySelector('.react-clock__mark__number');
+
+    expect(markNumber).toBeInTheDocument();
+  });
+
+  it('renders number angled at 0° by default', () => {
+    const { container } = render(<MarkNumber name="minute" number={1} />);
+
+    const markNumber = container.querySelector('.react-clock__mark__number');
+
+    expect(markNumber).toHaveStyle('transform: rotate(-0deg)');
+  });
+
+  it('renders properly angled mark given angle prop', () => {
+    const { container } = render(<MarkNumber angle={15} name="minute" number={1} />);
+
+    const markNumber = container.querySelector('.react-clock__mark__number');
+
+    expect(markNumber).toHaveStyle('transform: rotate(-15deg)');
+  });
+});
Index: node_modules/react-clock/src/MarkNumber.tsx
===================================================================
--- node_modules/react-clock/src/MarkNumber.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/MarkNumber.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+import { memo } from 'react';
+
+import type { MarkLength } from './shared/types.js';
+
+type MarkNumberProps = {
+  angle?: number;
+  length?: MarkLength;
+  name: string;
+  number: React.ReactNode;
+};
+
+const MarkNumber: React.FC<MarkNumberProps> = memo(function MarkNumber({
+  angle = 0,
+  length = 10,
+  name,
+  number,
+}: MarkNumberProps): React.ReactElement {
+  return (
+    <div
+      className={`react-clock__mark react-clock__${name}-mark`}
+      style={{
+        transform: `rotate(${angle}deg)`,
+      }}
+    >
+      <div
+        className="react-clock__mark__number"
+        style={{
+          transform: `rotate(-${angle}deg)`,
+          top: `${length / 2}%`,
+        }}
+      >
+        {number}
+      </div>
+    </div>
+  );
+});
+
+export default MarkNumber;
Index: node_modules/react-clock/src/index.ts
===================================================================
--- node_modules/react-clock/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import Clock from './Clock.js';
+
+export type { ClockProps } from './Clock.js';
+
+export { Clock };
+
+export default Clock;
Index: node_modules/react-clock/src/shared/hourFormatter.ts
===================================================================
--- node_modules/react-clock/src/shared/hourFormatter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/shared/hourFormatter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import getUserLocale from 'get-user-locale';
+
+export function formatHour(locale: string | undefined, hour: number): string {
+  return hour.toLocaleString(locale || getUserLocale() || undefined);
+}
Index: node_modules/react-clock/src/shared/types.ts
===================================================================
--- node_modules/react-clock/src/shared/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/shared/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+export type ClassName = string | null | undefined | (string | null | undefined)[];
+
+export type HandLength = number; // Range<0, 100>;
+
+export type OppositeHandLength = number; // Range<-100, 100>;
+
+export type HandWidth = number; // GreaterThanOrEqualTo<0>;
+
+export type MarkLength = HandLength;
+
+export type MarkWidth = HandWidth;
Index: node_modules/react-clock/src/shared/utils.spec.ts
===================================================================
--- node_modules/react-clock/src/shared/utils.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/shared/utils.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { describe, expect, it } from 'vitest';
+import { safeMax } from './utils.js';
+
+describe('safeMax', () => {
+  it('returns -Infinity given no values', () => {
+    const result = safeMax();
+
+    expect(result).toBe(Number.NEGATIVE_INFINITY);
+  });
+
+  it('returns the largest value given valid numbers', () => {
+    const result = safeMax(3, 4, 5);
+
+    expect(result).toBe(5);
+  });
+
+  it('returns the largest value given valid numbers with zero', () => {
+    const result = safeMax(-2, -1, 0);
+
+    expect(result).toBe(0);
+  });
+
+  it('returns the largest value given valid number and null', () => {
+    const result = safeMax(3, 4, null);
+
+    expect(result).toBe(4);
+  });
+
+  it('returns the largest value given valid number and undefined', () => {
+    const result = safeMax(3, 4, undefined);
+
+    expect(result).toBe(4);
+  });
+
+  it('returns the largest value given valid numbers as strings', () => {
+    const result = safeMax('3', '4');
+
+    expect(result).toBe(4);
+  });
+});
Index: node_modules/react-clock/src/shared/utils.ts
===================================================================
--- node_modules/react-clock/src/shared/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-clock/src/shared/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+function isValidNumber(num: unknown): num is number {
+  return num !== null && num !== false && !Number.isNaN(Number(num));
+}
+
+export function safeMax(...args: unknown[]): number {
+  return Math.max(...args.filter(isValidNumber));
+}
Index: node_modules/react-dom/LICENSE
===================================================================
--- node_modules/react-dom/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/react-dom/README.md
===================================================================
--- node_modules/react-dom/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+# `react-dom`
+
+This package serves as the entry point to the DOM and server renderers for React. It is intended to be paired with the generic React package, which is shipped as `react` to npm.
+
+## Installation
+
+```sh
+npm install react react-dom
+```
+
+## Usage
+
+### In the browser
+
+```js
+import { createRoot } from 'react-dom/client';
+
+function App() {
+  return <div>Hello World</div>;
+}
+
+const root = createRoot(document.getElementById('root'));
+root.render(<App />);
+```
+
+### On the server
+
+```js
+import { renderToPipeableStream } from 'react-dom/server';
+
+function App() {
+  return <div>Hello World</div>;
+}
+
+function handleRequest(res) {
+  // ... in your server handler ...
+  const stream = renderToPipeableStream(<App />, {
+    onShellReady() {
+      res.statusCode = 200;
+      res.setHeader('Content-type', 'text/html');
+      stream.pipe(res);
+    },
+    // ...
+  });
+}
+```
+
+## API
+
+### `react-dom`
+
+See https://react.dev/reference/react-dom
+
+### `react-dom/client`
+
+See https://react.dev/reference/react-dom/client
+
+### `react-dom/server`
+
+See https://react.dev/reference/react-dom/server
Index: node_modules/react-dom/cjs/react-dom-client.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-client.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-client.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24993 @@
+/**
+ * @license React
+ * react-dom-client.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+ Modernizr 3.0.0pre (Custom Build) | MIT
+*/
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function findHook(fiber, id) {
+      for (fiber = fiber.memoizedState; null !== fiber && 0 < id; )
+        (fiber = fiber.next), id--;
+      return fiber;
+    }
+    function copyWithSetImpl(obj, path, index, value) {
+      if (index >= path.length) return value;
+      var key = path[index],
+        updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);
+      updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);
+      return updated;
+    }
+    function copyWithRename(obj, oldPath, newPath) {
+      if (oldPath.length !== newPath.length)
+        console.warn("copyWithRename() expects paths of the same length");
+      else {
+        for (var i = 0; i < newPath.length - 1; i++)
+          if (oldPath[i] !== newPath[i]) {
+            console.warn(
+              "copyWithRename() expects paths to be the same except for the deepest key"
+            );
+            return;
+          }
+        return copyWithRenameImpl(obj, oldPath, newPath, 0);
+      }
+    }
+    function copyWithRenameImpl(obj, oldPath, newPath, index) {
+      var oldKey = oldPath[index],
+        updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);
+      index + 1 === oldPath.length
+        ? ((updated[newPath[index]] = updated[oldKey]),
+          isArrayImpl(updated)
+            ? updated.splice(oldKey, 1)
+            : delete updated[oldKey])
+        : (updated[oldKey] = copyWithRenameImpl(
+            obj[oldKey],
+            oldPath,
+            newPath,
+            index + 1
+          ));
+      return updated;
+    }
+    function copyWithDeleteImpl(obj, path, index) {
+      var key = path[index],
+        updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);
+      if (index + 1 === path.length)
+        return (
+          isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key],
+          updated
+        );
+      updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);
+      return updated;
+    }
+    function shouldSuspendImpl() {
+      return !1;
+    }
+    function shouldErrorImpl() {
+      return null;
+    }
+    function warnForMissingKey() {}
+    function warnInvalidHookAccess() {
+      console.error(
+        "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"
+      );
+    }
+    function warnInvalidContextAccess() {
+      console.error(
+        "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+      );
+    }
+    function noop$2() {}
+    function setToSortedString(set) {
+      var array = [];
+      set.forEach(function (value) {
+        array.push(value);
+      });
+      return array.sort().join(", ");
+    }
+    function createFiber(tag, pendingProps, key, mode) {
+      return new FiberNode(tag, pendingProps, key, mode);
+    }
+    function scheduleRoot(root, element) {
+      root.context === emptyContextObject &&
+        (updateContainerImpl(root.current, 2, element, root, null, null),
+        flushSyncWork$1());
+    }
+    function scheduleRefresh(root, update) {
+      if (null !== resolveFamily) {
+        var staleFamilies = update.staleFamilies;
+        update = update.updatedFamilies;
+        flushPendingEffects();
+        scheduleFibersWithFamiliesRecursively(
+          root.current,
+          update,
+          staleFamilies
+        );
+        flushSyncWork$1();
+      }
+    }
+    function setRefreshHandler(handler) {
+      resolveFamily = handler;
+    }
+    function isValidContainer(node) {
+      return !(
+        !node ||
+        (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)
+      );
+    }
+    function getNearestMountedFiber(fiber) {
+      var node = fiber,
+        nearestMounted = fiber;
+      if (fiber.alternate) for (; node.return; ) node = node.return;
+      else {
+        fiber = node;
+        do
+          (node = fiber),
+            0 !== (node.flags & 4098) && (nearestMounted = node.return),
+            (fiber = node.return);
+        while (fiber);
+      }
+      return 3 === node.tag ? nearestMounted : null;
+    }
+    function getSuspenseInstanceFromFiber(fiber) {
+      if (13 === fiber.tag) {
+        var suspenseState = fiber.memoizedState;
+        null === suspenseState &&
+          ((fiber = fiber.alternate),
+          null !== fiber && (suspenseState = fiber.memoizedState));
+        if (null !== suspenseState) return suspenseState.dehydrated;
+      }
+      return null;
+    }
+    function assertIsMounted(fiber) {
+      if (getNearestMountedFiber(fiber) !== fiber)
+        throw Error("Unable to find node on an unmounted component.");
+    }
+    function findCurrentFiberUsingSlowPath(fiber) {
+      var alternate = fiber.alternate;
+      if (!alternate) {
+        alternate = getNearestMountedFiber(fiber);
+        if (null === alternate)
+          throw Error("Unable to find node on an unmounted component.");
+        return alternate !== fiber ? null : fiber;
+      }
+      for (var a = fiber, b = alternate; ; ) {
+        var parentA = a.return;
+        if (null === parentA) break;
+        var parentB = parentA.alternate;
+        if (null === parentB) {
+          b = parentA.return;
+          if (null !== b) {
+            a = b;
+            continue;
+          }
+          break;
+        }
+        if (parentA.child === parentB.child) {
+          for (parentB = parentA.child; parentB; ) {
+            if (parentB === a) return assertIsMounted(parentA), fiber;
+            if (parentB === b) return assertIsMounted(parentA), alternate;
+            parentB = parentB.sibling;
+          }
+          throw Error("Unable to find node on an unmounted component.");
+        }
+        if (a.return !== b.return) (a = parentA), (b = parentB);
+        else {
+          for (var didFindChild = !1, _child = parentA.child; _child; ) {
+            if (_child === a) {
+              didFindChild = !0;
+              a = parentA;
+              b = parentB;
+              break;
+            }
+            if (_child === b) {
+              didFindChild = !0;
+              b = parentA;
+              a = parentB;
+              break;
+            }
+            _child = _child.sibling;
+          }
+          if (!didFindChild) {
+            for (_child = parentB.child; _child; ) {
+              if (_child === a) {
+                didFindChild = !0;
+                a = parentB;
+                b = parentA;
+                break;
+              }
+              if (_child === b) {
+                didFindChild = !0;
+                b = parentB;
+                a = parentA;
+                break;
+              }
+              _child = _child.sibling;
+            }
+            if (!didFindChild)
+              throw Error(
+                "Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue."
+              );
+          }
+        }
+        if (a.alternate !== b)
+          throw Error(
+            "Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue."
+          );
+      }
+      if (3 !== a.tag)
+        throw Error("Unable to find node on an unmounted component.");
+      return a.stateNode.current === a ? fiber : alternate;
+    }
+    function findCurrentHostFiberImpl(node) {
+      var tag = node.tag;
+      if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;
+      for (node = node.child; null !== node; ) {
+        tag = findCurrentHostFiberImpl(node);
+        if (null !== tag) return tag;
+        node = node.sibling;
+      }
+      return null;
+    }
+    function getIteratorFn(maybeIterable) {
+      if (null === maybeIterable || "object" !== typeof maybeIterable)
+        return null;
+      maybeIterable =
+        (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
+        maybeIterable["@@iterator"];
+      return "function" === typeof maybeIterable ? maybeIterable : null;
+    }
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function getComponentNameFromOwner(owner) {
+      return "number" === typeof owner.tag
+        ? getComponentNameFromFiber(owner)
+        : "string" === typeof owner.name
+          ? owner.name
+          : null;
+    }
+    function getComponentNameFromFiber(fiber) {
+      var type = fiber.type;
+      switch (fiber.tag) {
+        case 31:
+          return "Activity";
+        case 24:
+          return "Cache";
+        case 9:
+          return (type._context.displayName || "Context") + ".Consumer";
+        case 10:
+          return (type.displayName || "Context") + ".Provider";
+        case 18:
+          return "DehydratedFragment";
+        case 11:
+          return (
+            (fiber = type.render),
+            (fiber = fiber.displayName || fiber.name || ""),
+            type.displayName ||
+              ("" !== fiber ? "ForwardRef(" + fiber + ")" : "ForwardRef")
+          );
+        case 7:
+          return "Fragment";
+        case 26:
+        case 27:
+        case 5:
+          return type;
+        case 4:
+          return "Portal";
+        case 3:
+          return "Root";
+        case 6:
+          return "Text";
+        case 16:
+          return getComponentNameFromType(type);
+        case 8:
+          return type === REACT_STRICT_MODE_TYPE ? "StrictMode" : "Mode";
+        case 22:
+          return "Offscreen";
+        case 12:
+          return "Profiler";
+        case 21:
+          return "Scope";
+        case 13:
+          return "Suspense";
+        case 19:
+          return "SuspenseList";
+        case 25:
+          return "TracingMarker";
+        case 1:
+        case 0:
+        case 14:
+        case 15:
+          if ("function" === typeof type)
+            return type.displayName || type.name || null;
+          if ("string" === typeof type) return type;
+          break;
+        case 29:
+          type = fiber._debugInfo;
+          if (null != type)
+            for (var i = type.length - 1; 0 <= i; i--)
+              if ("string" === typeof type[i].name) return type[i].name;
+          if (null !== fiber.return)
+            return getComponentNameFromFiber(fiber.return);
+      }
+      return null;
+    }
+    function createCursor(defaultValue) {
+      return { current: defaultValue };
+    }
+    function pop(cursor, fiber) {
+      0 > index$jscomp$0
+        ? console.error("Unexpected pop.")
+        : (fiber !== fiberStack[index$jscomp$0] &&
+            console.error("Unexpected Fiber popped."),
+          (cursor.current = valueStack[index$jscomp$0]),
+          (valueStack[index$jscomp$0] = null),
+          (fiberStack[index$jscomp$0] = null),
+          index$jscomp$0--);
+    }
+    function push(cursor, value, fiber) {
+      index$jscomp$0++;
+      valueStack[index$jscomp$0] = cursor.current;
+      fiberStack[index$jscomp$0] = fiber;
+      cursor.current = value;
+    }
+    function requiredContext(c) {
+      null === c &&
+        console.error(
+          "Expected host context to exist. This error is likely caused by a bug in React. Please file an issue."
+        );
+      return c;
+    }
+    function pushHostContainer(fiber, nextRootInstance) {
+      push(rootInstanceStackCursor, nextRootInstance, fiber);
+      push(contextFiberStackCursor, fiber, fiber);
+      push(contextStackCursor, null, fiber);
+      var nextRootContext = nextRootInstance.nodeType;
+      switch (nextRootContext) {
+        case 9:
+        case 11:
+          nextRootContext = 9 === nextRootContext ? "#document" : "#fragment";
+          nextRootInstance = (nextRootInstance =
+            nextRootInstance.documentElement)
+            ? (nextRootInstance = nextRootInstance.namespaceURI)
+              ? getOwnHostContext(nextRootInstance)
+              : HostContextNamespaceNone
+            : HostContextNamespaceNone;
+          break;
+        default:
+          if (
+            ((nextRootContext = nextRootInstance.tagName),
+            (nextRootInstance = nextRootInstance.namespaceURI))
+          )
+            (nextRootInstance = getOwnHostContext(nextRootInstance)),
+              (nextRootInstance = getChildHostContextProd(
+                nextRootInstance,
+                nextRootContext
+              ));
+          else
+            switch (nextRootContext) {
+              case "svg":
+                nextRootInstance = HostContextNamespaceSvg;
+                break;
+              case "math":
+                nextRootInstance = HostContextNamespaceMath;
+                break;
+              default:
+                nextRootInstance = HostContextNamespaceNone;
+            }
+      }
+      nextRootContext = nextRootContext.toLowerCase();
+      nextRootContext = updatedAncestorInfoDev(null, nextRootContext);
+      nextRootContext = {
+        context: nextRootInstance,
+        ancestorInfo: nextRootContext
+      };
+      pop(contextStackCursor, fiber);
+      push(contextStackCursor, nextRootContext, fiber);
+    }
+    function popHostContainer(fiber) {
+      pop(contextStackCursor, fiber);
+      pop(contextFiberStackCursor, fiber);
+      pop(rootInstanceStackCursor, fiber);
+    }
+    function getHostContext() {
+      return requiredContext(contextStackCursor.current);
+    }
+    function pushHostContext(fiber) {
+      null !== fiber.memoizedState &&
+        push(hostTransitionProviderCursor, fiber, fiber);
+      var context = requiredContext(contextStackCursor.current);
+      var type = fiber.type;
+      var nextContext = getChildHostContextProd(context.context, type);
+      type = updatedAncestorInfoDev(context.ancestorInfo, type);
+      nextContext = { context: nextContext, ancestorInfo: type };
+      context !== nextContext &&
+        (push(contextFiberStackCursor, fiber, fiber),
+        push(contextStackCursor, nextContext, fiber));
+    }
+    function popHostContext(fiber) {
+      contextFiberStackCursor.current === fiber &&
+        (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber));
+      hostTransitionProviderCursor.current === fiber &&
+        (pop(hostTransitionProviderCursor, fiber),
+        (HostTransitionContext._currentValue = NotPendingTransition));
+    }
+    function typeName(value) {
+      return (
+        ("function" === typeof Symbol &&
+          Symbol.toStringTag &&
+          value[Symbol.toStringTag]) ||
+        value.constructor.name ||
+        "Object"
+      );
+    }
+    function willCoercionThrow(value) {
+      try {
+        return testStringCoercion(value), !1;
+      } catch (e) {
+        return !0;
+      }
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkAttributeStringCoercion(value, attributeName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",
+            attributeName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkCSSPropertyStringCoercion(value, propName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",
+            propName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkFormFieldValueStringCoercion(value) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.",
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function injectInternals(internals) {
+      if ("undefined" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;
+      var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;
+      if (hook.isDisabled) return !0;
+      if (!hook.supportsFiber)
+        return (
+          console.error(
+            "The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools"
+          ),
+          !0
+        );
+      try {
+        (rendererID = hook.inject(internals)), (injectedHook = hook);
+      } catch (err) {
+        console.error("React instrumentation encountered an error: %s.", err);
+      }
+      return hook.checkDCE ? !0 : !1;
+    }
+    function setIsStrictModeForDevtools(newIsStrictMode) {
+      "function" === typeof log$1 &&
+        unstable_setDisableYieldValue(newIsStrictMode);
+      if (injectedHook && "function" === typeof injectedHook.setStrictMode)
+        try {
+          injectedHook.setStrictMode(rendererID, newIsStrictMode);
+        } catch (err) {
+          hasLoggedError ||
+            ((hasLoggedError = !0),
+            console.error(
+              "React instrumentation encountered an error: %s",
+              err
+            ));
+        }
+    }
+    function injectProfilingHooks(profilingHooks) {
+      injectedProfilingHooks = profilingHooks;
+    }
+    function markCommitStopped() {
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markCommitStopped &&
+        injectedProfilingHooks.markCommitStopped();
+    }
+    function markComponentRenderStarted(fiber) {
+      null !== injectedProfilingHooks &&
+        "function" ===
+          typeof injectedProfilingHooks.markComponentRenderStarted &&
+        injectedProfilingHooks.markComponentRenderStarted(fiber);
+    }
+    function markComponentRenderStopped() {
+      null !== injectedProfilingHooks &&
+        "function" ===
+          typeof injectedProfilingHooks.markComponentRenderStopped &&
+        injectedProfilingHooks.markComponentRenderStopped();
+    }
+    function markRenderStarted(lanes) {
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markRenderStarted &&
+        injectedProfilingHooks.markRenderStarted(lanes);
+    }
+    function markRenderStopped() {
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markRenderStopped &&
+        injectedProfilingHooks.markRenderStopped();
+    }
+    function markStateUpdateScheduled(fiber, lane) {
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markStateUpdateScheduled &&
+        injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);
+    }
+    function clz32Fallback(x) {
+      x >>>= 0;
+      return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+    }
+    function getLabelForLane(lane) {
+      if (lane & 1) return "SyncHydrationLane";
+      if (lane & 2) return "Sync";
+      if (lane & 4) return "InputContinuousHydration";
+      if (lane & 8) return "InputContinuous";
+      if (lane & 16) return "DefaultHydration";
+      if (lane & 32) return "Default";
+      if (lane & 128) return "TransitionHydration";
+      if (lane & 4194048) return "Transition";
+      if (lane & 62914560) return "Retry";
+      if (lane & 67108864) return "SelectiveHydration";
+      if (lane & 134217728) return "IdleHydration";
+      if (lane & 268435456) return "Idle";
+      if (lane & 536870912) return "Offscreen";
+      if (lane & 1073741824) return "Deferred";
+    }
+    function getHighestPriorityLanes(lanes) {
+      var pendingSyncLanes = lanes & 42;
+      if (0 !== pendingSyncLanes) return pendingSyncLanes;
+      switch (lanes & -lanes) {
+        case 1:
+          return 1;
+        case 2:
+          return 2;
+        case 4:
+          return 4;
+        case 8:
+          return 8;
+        case 16:
+          return 16;
+        case 32:
+          return 32;
+        case 64:
+          return 64;
+        case 128:
+          return 128;
+        case 256:
+        case 512:
+        case 1024:
+        case 2048:
+        case 4096:
+        case 8192:
+        case 16384:
+        case 32768:
+        case 65536:
+        case 131072:
+        case 262144:
+        case 524288:
+        case 1048576:
+        case 2097152:
+          return lanes & 4194048;
+        case 4194304:
+        case 8388608:
+        case 16777216:
+        case 33554432:
+          return lanes & 62914560;
+        case 67108864:
+          return 67108864;
+        case 134217728:
+          return 134217728;
+        case 268435456:
+          return 268435456;
+        case 536870912:
+          return 536870912;
+        case 1073741824:
+          return 0;
+        default:
+          return (
+            console.error(
+              "Should have found matching lanes. This is a bug in React."
+            ),
+            lanes
+          );
+      }
+    }
+    function getNextLanes(root, wipLanes, rootHasPendingCommit) {
+      var pendingLanes = root.pendingLanes;
+      if (0 === pendingLanes) return 0;
+      var nextLanes = 0,
+        suspendedLanes = root.suspendedLanes,
+        pingedLanes = root.pingedLanes;
+      root = root.warmLanes;
+      var nonIdlePendingLanes = pendingLanes & 134217727;
+      0 !== nonIdlePendingLanes
+        ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),
+          0 !== pendingLanes
+            ? (nextLanes = getHighestPriorityLanes(pendingLanes))
+            : ((pingedLanes &= nonIdlePendingLanes),
+              0 !== pingedLanes
+                ? (nextLanes = getHighestPriorityLanes(pingedLanes))
+                : rootHasPendingCommit ||
+                  ((rootHasPendingCommit = nonIdlePendingLanes & ~root),
+                  0 !== rootHasPendingCommit &&
+                    (nextLanes =
+                      getHighestPriorityLanes(rootHasPendingCommit)))))
+        : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),
+          0 !== nonIdlePendingLanes
+            ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))
+            : 0 !== pingedLanes
+              ? (nextLanes = getHighestPriorityLanes(pingedLanes))
+              : rootHasPendingCommit ||
+                ((rootHasPendingCommit = pendingLanes & ~root),
+                0 !== rootHasPendingCommit &&
+                  (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));
+      return 0 === nextLanes
+        ? 0
+        : 0 !== wipLanes &&
+            wipLanes !== nextLanes &&
+            0 === (wipLanes & suspendedLanes) &&
+            ((suspendedLanes = nextLanes & -nextLanes),
+            (rootHasPendingCommit = wipLanes & -wipLanes),
+            suspendedLanes >= rootHasPendingCommit ||
+              (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))
+          ? wipLanes
+          : nextLanes;
+    }
+    function checkIfRootIsPrerendering(root, renderLanes) {
+      return (
+        0 ===
+        (root.pendingLanes &
+          ~(root.suspendedLanes & ~root.pingedLanes) &
+          renderLanes)
+      );
+    }
+    function computeExpirationTime(lane, currentTime) {
+      switch (lane) {
+        case 1:
+        case 2:
+        case 4:
+        case 8:
+        case 64:
+          return currentTime + 250;
+        case 16:
+        case 32:
+        case 128:
+        case 256:
+        case 512:
+        case 1024:
+        case 2048:
+        case 4096:
+        case 8192:
+        case 16384:
+        case 32768:
+        case 65536:
+        case 131072:
+        case 262144:
+        case 524288:
+        case 1048576:
+        case 2097152:
+          return currentTime + 5e3;
+        case 4194304:
+        case 8388608:
+        case 16777216:
+        case 33554432:
+          return -1;
+        case 67108864:
+        case 134217728:
+        case 268435456:
+        case 536870912:
+        case 1073741824:
+          return -1;
+        default:
+          return (
+            console.error(
+              "Should have found matching lanes. This is a bug in React."
+            ),
+            -1
+          );
+      }
+    }
+    function claimNextTransitionLane() {
+      var lane = nextTransitionLane;
+      nextTransitionLane <<= 1;
+      0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);
+      return lane;
+    }
+    function claimNextRetryLane() {
+      var lane = nextRetryLane;
+      nextRetryLane <<= 1;
+      0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);
+      return lane;
+    }
+    function createLaneMap(initial) {
+      for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);
+      return laneMap;
+    }
+    function markRootUpdated$1(root, updateLane) {
+      root.pendingLanes |= updateLane;
+      268435456 !== updateLane &&
+        ((root.suspendedLanes = 0),
+        (root.pingedLanes = 0),
+        (root.warmLanes = 0));
+    }
+    function markRootFinished(
+      root,
+      finishedLanes,
+      remainingLanes,
+      spawnedLane,
+      updatedLanes,
+      suspendedRetryLanes
+    ) {
+      var previouslyPendingLanes = root.pendingLanes;
+      root.pendingLanes = remainingLanes;
+      root.suspendedLanes = 0;
+      root.pingedLanes = 0;
+      root.warmLanes = 0;
+      root.expiredLanes &= remainingLanes;
+      root.entangledLanes &= remainingLanes;
+      root.errorRecoveryDisabledLanes &= remainingLanes;
+      root.shellSuspendCounter = 0;
+      var entanglements = root.entanglements,
+        expirationTimes = root.expirationTimes,
+        hiddenUpdates = root.hiddenUpdates;
+      for (
+        remainingLanes = previouslyPendingLanes & ~remainingLanes;
+        0 < remainingLanes;
+
+      ) {
+        var index = 31 - clz32(remainingLanes),
+          lane = 1 << index;
+        entanglements[index] = 0;
+        expirationTimes[index] = -1;
+        var hiddenUpdatesForLane = hiddenUpdates[index];
+        if (null !== hiddenUpdatesForLane)
+          for (
+            hiddenUpdates[index] = null, index = 0;
+            index < hiddenUpdatesForLane.length;
+            index++
+          ) {
+            var update = hiddenUpdatesForLane[index];
+            null !== update && (update.lane &= -536870913);
+          }
+        remainingLanes &= ~lane;
+      }
+      0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);
+      0 !== suspendedRetryLanes &&
+        0 === updatedLanes &&
+        0 !== root.tag &&
+        (root.suspendedLanes |=
+          suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));
+    }
+    function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {
+      root.pendingLanes |= spawnedLane;
+      root.suspendedLanes &= ~spawnedLane;
+      var spawnedLaneIndex = 31 - clz32(spawnedLane);
+      root.entangledLanes |= spawnedLane;
+      root.entanglements[spawnedLaneIndex] =
+        root.entanglements[spawnedLaneIndex] |
+        1073741824 |
+        (entangledLanes & 4194090);
+    }
+    function markRootEntangled(root, entangledLanes) {
+      var rootEntangledLanes = (root.entangledLanes |= entangledLanes);
+      for (root = root.entanglements; rootEntangledLanes; ) {
+        var index = 31 - clz32(rootEntangledLanes),
+          lane = 1 << index;
+        (lane & entangledLanes) | (root[index] & entangledLanes) &&
+          (root[index] |= entangledLanes);
+        rootEntangledLanes &= ~lane;
+      }
+    }
+    function getBumpedLaneForHydrationByLane(lane) {
+      switch (lane) {
+        case 2:
+          lane = 1;
+          break;
+        case 8:
+          lane = 4;
+          break;
+        case 32:
+          lane = 16;
+          break;
+        case 256:
+        case 512:
+        case 1024:
+        case 2048:
+        case 4096:
+        case 8192:
+        case 16384:
+        case 32768:
+        case 65536:
+        case 131072:
+        case 262144:
+        case 524288:
+        case 1048576:
+        case 2097152:
+        case 4194304:
+        case 8388608:
+        case 16777216:
+        case 33554432:
+          lane = 128;
+          break;
+        case 268435456:
+          lane = 134217728;
+          break;
+        default:
+          lane = 0;
+      }
+      return lane;
+    }
+    function addFiberToLanesMap(root, fiber, lanes) {
+      if (isDevToolsPresent)
+        for (root = root.pendingUpdatersLaneMap; 0 < lanes; ) {
+          var index = 31 - clz32(lanes),
+            lane = 1 << index;
+          root[index].add(fiber);
+          lanes &= ~lane;
+        }
+    }
+    function movePendingFibersToMemoized(root, lanes) {
+      if (isDevToolsPresent)
+        for (
+          var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap,
+            memoizedUpdaters = root.memoizedUpdaters;
+          0 < lanes;
+
+        ) {
+          var index = 31 - clz32(lanes);
+          root = 1 << index;
+          index = pendingUpdatersLaneMap[index];
+          0 < index.size &&
+            (index.forEach(function (fiber) {
+              var alternate = fiber.alternate;
+              (null !== alternate && memoizedUpdaters.has(alternate)) ||
+                memoizedUpdaters.add(fiber);
+            }),
+            index.clear());
+          lanes &= ~root;
+        }
+    }
+    function lanesToEventPriority(lanes) {
+      lanes &= -lanes;
+      return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes
+        ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes
+          ? 0 !== (lanes & 134217727)
+            ? DefaultEventPriority
+            : IdleEventPriority
+          : ContinuousEventPriority
+        : DiscreteEventPriority;
+    }
+    function resolveUpdatePriority() {
+      var updatePriority = ReactDOMSharedInternals.p;
+      if (0 !== updatePriority) return updatePriority;
+      updatePriority = window.event;
+      return void 0 === updatePriority
+        ? DefaultEventPriority
+        : getEventPriority(updatePriority.type);
+    }
+    function runWithPriority(priority, fn) {
+      var previousPriority = ReactDOMSharedInternals.p;
+      try {
+        return (ReactDOMSharedInternals.p = priority), fn();
+      } finally {
+        ReactDOMSharedInternals.p = previousPriority;
+      }
+    }
+    function detachDeletedInstance(node) {
+      delete node[internalInstanceKey];
+      delete node[internalPropsKey];
+      delete node[internalEventHandlersKey];
+      delete node[internalEventHandlerListenersKey];
+      delete node[internalEventHandlesSetKey];
+    }
+    function getClosestInstanceFromNode(targetNode) {
+      var targetInst = targetNode[internalInstanceKey];
+      if (targetInst) return targetInst;
+      for (var parentNode = targetNode.parentNode; parentNode; ) {
+        if (
+          (targetInst =
+            parentNode[internalContainerInstanceKey] ||
+            parentNode[internalInstanceKey])
+        ) {
+          parentNode = targetInst.alternate;
+          if (
+            null !== targetInst.child ||
+            (null !== parentNode && null !== parentNode.child)
+          )
+            for (
+              targetNode = getParentSuspenseInstance(targetNode);
+              null !== targetNode;
+
+            ) {
+              if ((parentNode = targetNode[internalInstanceKey]))
+                return parentNode;
+              targetNode = getParentSuspenseInstance(targetNode);
+            }
+          return targetInst;
+        }
+        targetNode = parentNode;
+        parentNode = targetNode.parentNode;
+      }
+      return null;
+    }
+    function getInstanceFromNode(node) {
+      if (
+        (node = node[internalInstanceKey] || node[internalContainerInstanceKey])
+      ) {
+        var tag = node.tag;
+        if (
+          5 === tag ||
+          6 === tag ||
+          13 === tag ||
+          26 === tag ||
+          27 === tag ||
+          3 === tag
+        )
+          return node;
+      }
+      return null;
+    }
+    function getNodeFromInstance(inst) {
+      var tag = inst.tag;
+      if (5 === tag || 26 === tag || 27 === tag || 6 === tag)
+        return inst.stateNode;
+      throw Error("getNodeFromInstance: Invalid argument.");
+    }
+    function getResourcesFromRoot(root) {
+      var resources = root[internalRootNodeResourcesKey];
+      resources ||
+        (resources = root[internalRootNodeResourcesKey] =
+          { hoistableStyles: new Map(), hoistableScripts: new Map() });
+      return resources;
+    }
+    function markNodeAsHoistable(node) {
+      node[internalHoistableMarker] = !0;
+    }
+    function registerTwoPhaseEvent(registrationName, dependencies) {
+      registerDirectEvent(registrationName, dependencies);
+      registerDirectEvent(registrationName + "Capture", dependencies);
+    }
+    function registerDirectEvent(registrationName, dependencies) {
+      registrationNameDependencies[registrationName] &&
+        console.error(
+          "EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.",
+          registrationName
+        );
+      registrationNameDependencies[registrationName] = dependencies;
+      var lowerCasedName = registrationName.toLowerCase();
+      possibleRegistrationNames[lowerCasedName] = registrationName;
+      "onDoubleClick" === registrationName &&
+        (possibleRegistrationNames.ondblclick = registrationName);
+      for (
+        registrationName = 0;
+        registrationName < dependencies.length;
+        registrationName++
+      )
+        allNativeEvents.add(dependencies[registrationName]);
+    }
+    function checkControlledValueProps(tagName, props) {
+      hasReadOnlyValue[props.type] ||
+        props.onChange ||
+        props.onInput ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.value ||
+        ("select" === tagName
+          ? console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`."
+            )
+          : console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."
+            ));
+      props.onChange ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.checked ||
+        console.error(
+          "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`."
+        );
+    }
+    function isAttributeNameSafe(attributeName) {
+      if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+        return !0;
+      if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))
+        return !1;
+      if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+        return (validatedAttributeNameCache[attributeName] = !0);
+      illegalAttributeNameCache[attributeName] = !0;
+      console.error("Invalid attribute name: `%s`", attributeName);
+      return !1;
+    }
+    function getValueForAttributeOnCustomComponent(node, name, expected) {
+      if (isAttributeNameSafe(name)) {
+        if (!node.hasAttribute(name)) {
+          switch (typeof expected) {
+            case "symbol":
+            case "object":
+              return expected;
+            case "function":
+              return expected;
+            case "boolean":
+              if (!1 === expected) return expected;
+          }
+          return void 0 === expected ? void 0 : null;
+        }
+        node = node.getAttribute(name);
+        if ("" === node && !0 === expected) return !0;
+        checkAttributeStringCoercion(expected, name);
+        return node === "" + expected ? expected : node;
+      }
+    }
+    function setValueForAttribute(node, name, value) {
+      if (isAttributeNameSafe(name))
+        if (null === value) node.removeAttribute(name);
+        else {
+          switch (typeof value) {
+            case "undefined":
+            case "function":
+            case "symbol":
+              node.removeAttribute(name);
+              return;
+            case "boolean":
+              var prefix = name.toLowerCase().slice(0, 5);
+              if ("data-" !== prefix && "aria-" !== prefix) {
+                node.removeAttribute(name);
+                return;
+              }
+          }
+          checkAttributeStringCoercion(value, name);
+          node.setAttribute(name, "" + value);
+        }
+    }
+    function setValueForKnownAttribute(node, name, value) {
+      if (null === value) node.removeAttribute(name);
+      else {
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            node.removeAttribute(name);
+            return;
+        }
+        checkAttributeStringCoercion(value, name);
+        node.setAttribute(name, "" + value);
+      }
+    }
+    function setValueForNamespacedAttribute(node, namespace, name, value) {
+      if (null === value) node.removeAttribute(name);
+      else {
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            node.removeAttribute(name);
+            return;
+        }
+        checkAttributeStringCoercion(value, name);
+        node.setAttributeNS(namespace, name, "" + value);
+      }
+    }
+    function disabledLog() {}
+    function disableLogs() {
+      if (0 === disabledDepth) {
+        prevLog = console.log;
+        prevInfo = console.info;
+        prevWarn = console.warn;
+        prevError = console.error;
+        prevGroup = console.group;
+        prevGroupCollapsed = console.groupCollapsed;
+        prevGroupEnd = console.groupEnd;
+        var props = {
+          configurable: !0,
+          enumerable: !0,
+          value: disabledLog,
+          writable: !0
+        };
+        Object.defineProperties(console, {
+          info: props,
+          log: props,
+          warn: props,
+          error: props,
+          group: props,
+          groupCollapsed: props,
+          groupEnd: props
+        });
+      }
+      disabledDepth++;
+    }
+    function reenableLogs() {
+      disabledDepth--;
+      if (0 === disabledDepth) {
+        var props = { configurable: !0, enumerable: !0, writable: !0 };
+        Object.defineProperties(console, {
+          log: assign({}, props, { value: prevLog }),
+          info: assign({}, props, { value: prevInfo }),
+          warn: assign({}, props, { value: prevWarn }),
+          error: assign({}, props, { value: prevError }),
+          group: assign({}, props, { value: prevGroup }),
+          groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
+          groupEnd: assign({}, props, { value: prevGroupEnd })
+        });
+      }
+      0 > disabledDepth &&
+        console.error(
+          "disabledDepth fell below zero. This is a bug in React. Please file an issue."
+        );
+    }
+    function describeBuiltInComponentFrame(name) {
+      if (void 0 === prefix)
+        try {
+          throw Error();
+        } catch (x) {
+          var match = x.stack.trim().match(/\n( *(at )?)/);
+          prefix = (match && match[1]) || "";
+          suffix =
+            -1 < x.stack.indexOf("\n    at")
+              ? " (<anonymous>)"
+              : -1 < x.stack.indexOf("@")
+                ? "@unknown:0:0"
+                : "";
+        }
+      return "\n" + prefix + name + suffix;
+    }
+    function describeNativeComponentFrame(fn, construct) {
+      if (!fn || reentry) return "";
+      var frame = componentFrameCache.get(fn);
+      if (void 0 !== frame) return frame;
+      reentry = !0;
+      frame = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      var previousDispatcher = null;
+      previousDispatcher = ReactSharedInternals.H;
+      ReactSharedInternals.H = null;
+      disableLogs();
+      try {
+        var RunInRootFrame = {
+          DetermineComponentFrameRoot: function () {
+            try {
+              if (construct) {
+                var Fake = function () {
+                  throw Error();
+                };
+                Object.defineProperty(Fake.prototype, "props", {
+                  set: function () {
+                    throw Error();
+                  }
+                });
+                if ("object" === typeof Reflect && Reflect.construct) {
+                  try {
+                    Reflect.construct(Fake, []);
+                  } catch (x) {
+                    var control = x;
+                  }
+                  Reflect.construct(fn, [], Fake);
+                } else {
+                  try {
+                    Fake.call();
+                  } catch (x$0) {
+                    control = x$0;
+                  }
+                  fn.call(Fake.prototype);
+                }
+              } else {
+                try {
+                  throw Error();
+                } catch (x$1) {
+                  control = x$1;
+                }
+                (Fake = fn()) &&
+                  "function" === typeof Fake.catch &&
+                  Fake.catch(function () {});
+              }
+            } catch (sample) {
+              if (sample && control && "string" === typeof sample.stack)
+                return [sample.stack, control.stack];
+            }
+            return [null, null];
+          }
+        };
+        RunInRootFrame.DetermineComponentFrameRoot.displayName =
+          "DetermineComponentFrameRoot";
+        var namePropDescriptor = Object.getOwnPropertyDescriptor(
+          RunInRootFrame.DetermineComponentFrameRoot,
+          "name"
+        );
+        namePropDescriptor &&
+          namePropDescriptor.configurable &&
+          Object.defineProperty(
+            RunInRootFrame.DetermineComponentFrameRoot,
+            "name",
+            { value: "DetermineComponentFrameRoot" }
+          );
+        var _RunInRootFrame$Deter =
+            RunInRootFrame.DetermineComponentFrameRoot(),
+          sampleStack = _RunInRootFrame$Deter[0],
+          controlStack = _RunInRootFrame$Deter[1];
+        if (sampleStack && controlStack) {
+          var sampleLines = sampleStack.split("\n"),
+            controlLines = controlStack.split("\n");
+          for (
+            _RunInRootFrame$Deter = namePropDescriptor = 0;
+            namePropDescriptor < sampleLines.length &&
+            !sampleLines[namePropDescriptor].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            namePropDescriptor++;
+          for (
+            ;
+            _RunInRootFrame$Deter < controlLines.length &&
+            !controlLines[_RunInRootFrame$Deter].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            _RunInRootFrame$Deter++;
+          if (
+            namePropDescriptor === sampleLines.length ||
+            _RunInRootFrame$Deter === controlLines.length
+          )
+            for (
+              namePropDescriptor = sampleLines.length - 1,
+                _RunInRootFrame$Deter = controlLines.length - 1;
+              1 <= namePropDescriptor &&
+              0 <= _RunInRootFrame$Deter &&
+              sampleLines[namePropDescriptor] !==
+                controlLines[_RunInRootFrame$Deter];
+
+            )
+              _RunInRootFrame$Deter--;
+          for (
+            ;
+            1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;
+            namePropDescriptor--, _RunInRootFrame$Deter--
+          )
+            if (
+              sampleLines[namePropDescriptor] !==
+              controlLines[_RunInRootFrame$Deter]
+            ) {
+              if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {
+                do
+                  if (
+                    (namePropDescriptor--,
+                    _RunInRootFrame$Deter--,
+                    0 > _RunInRootFrame$Deter ||
+                      sampleLines[namePropDescriptor] !==
+                        controlLines[_RunInRootFrame$Deter])
+                  ) {
+                    var _frame =
+                      "\n" +
+                      sampleLines[namePropDescriptor].replace(
+                        " at new ",
+                        " at "
+                      );
+                    fn.displayName &&
+                      _frame.includes("<anonymous>") &&
+                      (_frame = _frame.replace("<anonymous>", fn.displayName));
+                    "function" === typeof fn &&
+                      componentFrameCache.set(fn, _frame);
+                    return _frame;
+                  }
+                while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
+              }
+              break;
+            }
+        }
+      } finally {
+        (reentry = !1),
+          (ReactSharedInternals.H = previousDispatcher),
+          reenableLogs(),
+          (Error.prepareStackTrace = frame);
+      }
+      sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "")
+        ? describeBuiltInComponentFrame(sampleLines)
+        : "";
+      "function" === typeof fn && componentFrameCache.set(fn, sampleLines);
+      return sampleLines;
+    }
+    function formatOwnerStack(error) {
+      var prevPrepareStackTrace = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      error = error.stack;
+      Error.prepareStackTrace = prevPrepareStackTrace;
+      error.startsWith("Error: react-stack-top-frame\n") &&
+        (error = error.slice(29));
+      prevPrepareStackTrace = error.indexOf("\n");
+      -1 !== prevPrepareStackTrace &&
+        (error = error.slice(prevPrepareStackTrace + 1));
+      prevPrepareStackTrace = error.indexOf("react_stack_bottom_frame");
+      -1 !== prevPrepareStackTrace &&
+        (prevPrepareStackTrace = error.lastIndexOf(
+          "\n",
+          prevPrepareStackTrace
+        ));
+      if (-1 !== prevPrepareStackTrace)
+        error = error.slice(0, prevPrepareStackTrace);
+      else return "";
+      return error;
+    }
+    function describeFiber(fiber) {
+      switch (fiber.tag) {
+        case 26:
+        case 27:
+        case 5:
+          return describeBuiltInComponentFrame(fiber.type);
+        case 16:
+          return describeBuiltInComponentFrame("Lazy");
+        case 13:
+          return describeBuiltInComponentFrame("Suspense");
+        case 19:
+          return describeBuiltInComponentFrame("SuspenseList");
+        case 0:
+        case 15:
+          return describeNativeComponentFrame(fiber.type, !1);
+        case 11:
+          return describeNativeComponentFrame(fiber.type.render, !1);
+        case 1:
+          return describeNativeComponentFrame(fiber.type, !0);
+        case 31:
+          return describeBuiltInComponentFrame("Activity");
+        default:
+          return "";
+      }
+    }
+    function getStackByFiberInDevAndProd(workInProgress) {
+      try {
+        var info = "";
+        do {
+          info += describeFiber(workInProgress);
+          var debugInfo = workInProgress._debugInfo;
+          if (debugInfo)
+            for (var i = debugInfo.length - 1; 0 <= i; i--) {
+              var entry = debugInfo[i];
+              if ("string" === typeof entry.name) {
+                var JSCompiler_temp_const = info,
+                  env = entry.env;
+                var JSCompiler_inline_result = describeBuiltInComponentFrame(
+                  entry.name + (env ? " [" + env + "]" : "")
+                );
+                info = JSCompiler_temp_const + JSCompiler_inline_result;
+              }
+            }
+          workInProgress = workInProgress.return;
+        } while (workInProgress);
+        return info;
+      } catch (x) {
+        return "\nError generating stack: " + x.message + "\n" + x.stack;
+      }
+    }
+    function describeFunctionComponentFrameWithoutLineNumber(fn) {
+      return (fn = fn ? fn.displayName || fn.name : "")
+        ? describeBuiltInComponentFrame(fn)
+        : "";
+    }
+    function getCurrentFiberOwnerNameInDevOrNull() {
+      if (null === current) return null;
+      var owner = current._debugOwner;
+      return null != owner ? getComponentNameFromOwner(owner) : null;
+    }
+    function getCurrentFiberStackInDev() {
+      if (null === current) return "";
+      var workInProgress = current;
+      try {
+        var info = "";
+        6 === workInProgress.tag && (workInProgress = workInProgress.return);
+        switch (workInProgress.tag) {
+          case 26:
+          case 27:
+          case 5:
+            info += describeBuiltInComponentFrame(workInProgress.type);
+            break;
+          case 13:
+            info += describeBuiltInComponentFrame("Suspense");
+            break;
+          case 19:
+            info += describeBuiltInComponentFrame("SuspenseList");
+            break;
+          case 31:
+            info += describeBuiltInComponentFrame("Activity");
+            break;
+          case 30:
+          case 0:
+          case 15:
+          case 1:
+            workInProgress._debugOwner ||
+              "" !== info ||
+              (info += describeFunctionComponentFrameWithoutLineNumber(
+                workInProgress.type
+              ));
+            break;
+          case 11:
+            workInProgress._debugOwner ||
+              "" !== info ||
+              (info += describeFunctionComponentFrameWithoutLineNumber(
+                workInProgress.type.render
+              ));
+        }
+        for (; workInProgress; )
+          if ("number" === typeof workInProgress.tag) {
+            var fiber = workInProgress;
+            workInProgress = fiber._debugOwner;
+            var debugStack = fiber._debugStack;
+            workInProgress &&
+              debugStack &&
+              ("string" !== typeof debugStack &&
+                (fiber._debugStack = debugStack = formatOwnerStack(debugStack)),
+              "" !== debugStack && (info += "\n" + debugStack));
+          } else if (null != workInProgress.debugStack) {
+            var ownerStack = workInProgress.debugStack;
+            (workInProgress = workInProgress.owner) &&
+              ownerStack &&
+              (info += "\n" + formatOwnerStack(ownerStack));
+          } else break;
+        var JSCompiler_inline_result = info;
+      } catch (x) {
+        JSCompiler_inline_result =
+          "\nError generating stack: " + x.message + "\n" + x.stack;
+      }
+      return JSCompiler_inline_result;
+    }
+    function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) {
+      var previousFiber = current;
+      setCurrentFiber(fiber);
+      try {
+        return null !== fiber && fiber._debugTask
+          ? fiber._debugTask.run(
+              callback.bind(null, arg0, arg1, arg2, arg3, arg4)
+            )
+          : callback(arg0, arg1, arg2, arg3, arg4);
+      } finally {
+        setCurrentFiber(previousFiber);
+      }
+      throw Error(
+        "runWithFiberInDEV should never be called in production. This is a bug in React."
+      );
+    }
+    function setCurrentFiber(fiber) {
+      ReactSharedInternals.getCurrentStack =
+        null === fiber ? null : getCurrentFiberStackInDev;
+      isRendering = !1;
+      current = fiber;
+    }
+    function getToStringValue(value) {
+      switch (typeof value) {
+        case "bigint":
+        case "boolean":
+        case "number":
+        case "string":
+        case "undefined":
+          return value;
+        case "object":
+          return checkFormFieldValueStringCoercion(value), value;
+        default:
+          return "";
+      }
+    }
+    function isCheckable(elem) {
+      var type = elem.type;
+      return (
+        (elem = elem.nodeName) &&
+        "input" === elem.toLowerCase() &&
+        ("checkbox" === type || "radio" === type)
+      );
+    }
+    function trackValueOnNode(node) {
+      var valueField = isCheckable(node) ? "checked" : "value",
+        descriptor = Object.getOwnPropertyDescriptor(
+          node.constructor.prototype,
+          valueField
+        );
+      checkFormFieldValueStringCoercion(node[valueField]);
+      var currentValue = "" + node[valueField];
+      if (
+        !node.hasOwnProperty(valueField) &&
+        "undefined" !== typeof descriptor &&
+        "function" === typeof descriptor.get &&
+        "function" === typeof descriptor.set
+      ) {
+        var get = descriptor.get,
+          set = descriptor.set;
+        Object.defineProperty(node, valueField, {
+          configurable: !0,
+          get: function () {
+            return get.call(this);
+          },
+          set: function (value) {
+            checkFormFieldValueStringCoercion(value);
+            currentValue = "" + value;
+            set.call(this, value);
+          }
+        });
+        Object.defineProperty(node, valueField, {
+          enumerable: descriptor.enumerable
+        });
+        return {
+          getValue: function () {
+            return currentValue;
+          },
+          setValue: function (value) {
+            checkFormFieldValueStringCoercion(value);
+            currentValue = "" + value;
+          },
+          stopTracking: function () {
+            node._valueTracker = null;
+            delete node[valueField];
+          }
+        };
+      }
+    }
+    function track(node) {
+      node._valueTracker || (node._valueTracker = trackValueOnNode(node));
+    }
+    function updateValueIfChanged(node) {
+      if (!node) return !1;
+      var tracker = node._valueTracker;
+      if (!tracker) return !0;
+      var lastValue = tracker.getValue();
+      var value = "";
+      node &&
+        (value = isCheckable(node)
+          ? node.checked
+            ? "true"
+            : "false"
+          : node.value);
+      node = value;
+      return node !== lastValue ? (tracker.setValue(node), !0) : !1;
+    }
+    function getActiveElement(doc) {
+      doc = doc || ("undefined" !== typeof document ? document : void 0);
+      if ("undefined" === typeof doc) return null;
+      try {
+        return doc.activeElement || doc.body;
+      } catch (e) {
+        return doc.body;
+      }
+    }
+    function escapeSelectorAttributeValueInsideDoubleQuotes(value) {
+      return value.replace(
+        escapeSelectorAttributeValueInsideDoubleQuotesRegex,
+        function (ch) {
+          return "\\" + ch.charCodeAt(0).toString(16) + " ";
+        }
+      );
+    }
+    function validateInputProps(element, props) {
+      void 0 === props.checked ||
+        void 0 === props.defaultChecked ||
+        didWarnCheckedDefaultChecked ||
+        (console.error(
+          "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+          getCurrentFiberOwnerNameInDevOrNull() || "A component",
+          props.type
+        ),
+        (didWarnCheckedDefaultChecked = !0));
+      void 0 === props.value ||
+        void 0 === props.defaultValue ||
+        didWarnValueDefaultValue$1 ||
+        (console.error(
+          "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+          getCurrentFiberOwnerNameInDevOrNull() || "A component",
+          props.type
+        ),
+        (didWarnValueDefaultValue$1 = !0));
+    }
+    function updateInput(
+      element,
+      value,
+      defaultValue,
+      lastDefaultValue,
+      checked,
+      defaultChecked,
+      type,
+      name
+    ) {
+      element.name = "";
+      null != type &&
+      "function" !== typeof type &&
+      "symbol" !== typeof type &&
+      "boolean" !== typeof type
+        ? (checkAttributeStringCoercion(type, "type"), (element.type = type))
+        : element.removeAttribute("type");
+      if (null != value)
+        if ("number" === type) {
+          if ((0 === value && "" === element.value) || element.value != value)
+            element.value = "" + getToStringValue(value);
+        } else
+          element.value !== "" + getToStringValue(value) &&
+            (element.value = "" + getToStringValue(value));
+      else
+        ("submit" !== type && "reset" !== type) ||
+          element.removeAttribute("value");
+      null != value
+        ? setDefaultValue(element, type, getToStringValue(value))
+        : null != defaultValue
+          ? setDefaultValue(element, type, getToStringValue(defaultValue))
+          : null != lastDefaultValue && element.removeAttribute("value");
+      null == checked &&
+        null != defaultChecked &&
+        (element.defaultChecked = !!defaultChecked);
+      null != checked &&
+        (element.checked =
+          checked &&
+          "function" !== typeof checked &&
+          "symbol" !== typeof checked);
+      null != name &&
+      "function" !== typeof name &&
+      "symbol" !== typeof name &&
+      "boolean" !== typeof name
+        ? (checkAttributeStringCoercion(name, "name"),
+          (element.name = "" + getToStringValue(name)))
+        : element.removeAttribute("name");
+    }
+    function initInput(
+      element,
+      value,
+      defaultValue,
+      checked,
+      defaultChecked,
+      type,
+      name,
+      isHydrating
+    ) {
+      null != type &&
+        "function" !== typeof type &&
+        "symbol" !== typeof type &&
+        "boolean" !== typeof type &&
+        (checkAttributeStringCoercion(type, "type"), (element.type = type));
+      if (null != value || null != defaultValue) {
+        if (
+          !(
+            ("submit" !== type && "reset" !== type) ||
+            (void 0 !== value && null !== value)
+          )
+        )
+          return;
+        defaultValue =
+          null != defaultValue ? "" + getToStringValue(defaultValue) : "";
+        value = null != value ? "" + getToStringValue(value) : defaultValue;
+        isHydrating || value === element.value || (element.value = value);
+        element.defaultValue = value;
+      }
+      checked = null != checked ? checked : defaultChecked;
+      checked =
+        "function" !== typeof checked &&
+        "symbol" !== typeof checked &&
+        !!checked;
+      element.checked = isHydrating ? element.checked : !!checked;
+      element.defaultChecked = !!checked;
+      null != name &&
+        "function" !== typeof name &&
+        "symbol" !== typeof name &&
+        "boolean" !== typeof name &&
+        (checkAttributeStringCoercion(name, "name"), (element.name = name));
+    }
+    function setDefaultValue(node, type, value) {
+      ("number" === type && getActiveElement(node.ownerDocument) === node) ||
+        node.defaultValue === "" + value ||
+        (node.defaultValue = "" + value);
+    }
+    function validateOptionProps(element, props) {
+      null == props.value &&
+        ("object" === typeof props.children && null !== props.children
+          ? React.Children.forEach(props.children, function (child) {
+              null == child ||
+                "string" === typeof child ||
+                "number" === typeof child ||
+                "bigint" === typeof child ||
+                didWarnInvalidChild ||
+                ((didWarnInvalidChild = !0),
+                console.error(
+                  "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>."
+                ));
+            })
+          : null == props.dangerouslySetInnerHTML ||
+            didWarnInvalidInnerHTML ||
+            ((didWarnInvalidInnerHTML = !0),
+            console.error(
+              "Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected."
+            )));
+      null == props.selected ||
+        didWarnSelectedSetOnOption ||
+        (console.error(
+          "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>."
+        ),
+        (didWarnSelectedSetOnOption = !0));
+    }
+    function getDeclarationErrorAddendum() {
+      var ownerName = getCurrentFiberOwnerNameInDevOrNull();
+      return ownerName
+        ? "\n\nCheck the render method of `" + ownerName + "`."
+        : "";
+    }
+    function updateOptions(node, multiple, propValue, setDefaultSelected) {
+      node = node.options;
+      if (multiple) {
+        multiple = {};
+        for (var i = 0; i < propValue.length; i++)
+          multiple["$" + propValue[i]] = !0;
+        for (propValue = 0; propValue < node.length; propValue++)
+          (i = multiple.hasOwnProperty("$" + node[propValue].value)),
+            node[propValue].selected !== i && (node[propValue].selected = i),
+            i && setDefaultSelected && (node[propValue].defaultSelected = !0);
+      } else {
+        propValue = "" + getToStringValue(propValue);
+        multiple = null;
+        for (i = 0; i < node.length; i++) {
+          if (node[i].value === propValue) {
+            node[i].selected = !0;
+            setDefaultSelected && (node[i].defaultSelected = !0);
+            return;
+          }
+          null !== multiple || node[i].disabled || (multiple = node[i]);
+        }
+        null !== multiple && (multiple.selected = !0);
+      }
+    }
+    function validateSelectProps(element, props) {
+      for (element = 0; element < valuePropNames.length; element++) {
+        var propName = valuePropNames[element];
+        if (null != props[propName]) {
+          var propNameIsArray = isArrayImpl(props[propName]);
+          props.multiple && !propNameIsArray
+            ? console.error(
+                "The `%s` prop supplied to <select> must be an array if `multiple` is true.%s",
+                propName,
+                getDeclarationErrorAddendum()
+              )
+            : !props.multiple &&
+              propNameIsArray &&
+              console.error(
+                "The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.%s",
+                propName,
+                getDeclarationErrorAddendum()
+              );
+        }
+      }
+      void 0 === props.value ||
+        void 0 === props.defaultValue ||
+        didWarnValueDefaultValue ||
+        (console.error(
+          "Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"
+        ),
+        (didWarnValueDefaultValue = !0));
+    }
+    function validateTextareaProps(element, props) {
+      void 0 === props.value ||
+        void 0 === props.defaultValue ||
+        didWarnValDefaultVal ||
+        (console.error(
+          "%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components",
+          getCurrentFiberOwnerNameInDevOrNull() || "A component"
+        ),
+        (didWarnValDefaultVal = !0));
+      null != props.children &&
+        null == props.value &&
+        console.error(
+          "Use the `defaultValue` or `value` props instead of setting children on <textarea>."
+        );
+    }
+    function updateTextarea(element, value, defaultValue) {
+      if (
+        null != value &&
+        ((value = "" + getToStringValue(value)),
+        value !== element.value && (element.value = value),
+        null == defaultValue)
+      ) {
+        element.defaultValue !== value && (element.defaultValue = value);
+        return;
+      }
+      element.defaultValue =
+        null != defaultValue ? "" + getToStringValue(defaultValue) : "";
+    }
+    function initTextarea(element, value, defaultValue, children) {
+      if (null == value) {
+        if (null != children) {
+          if (null != defaultValue)
+            throw Error(
+              "If you supply `defaultValue` on a <textarea>, do not pass children."
+            );
+          if (isArrayImpl(children)) {
+            if (1 < children.length)
+              throw Error("<textarea> can only have at most one child.");
+            children = children[0];
+          }
+          defaultValue = children;
+        }
+        null == defaultValue && (defaultValue = "");
+        value = defaultValue;
+      }
+      defaultValue = getToStringValue(value);
+      element.defaultValue = defaultValue;
+      children = element.textContent;
+      children === defaultValue &&
+        "" !== children &&
+        null !== children &&
+        (element.value = children);
+    }
+    function findNotableNode(node, indent) {
+      return void 0 === node.serverProps &&
+        0 === node.serverTail.length &&
+        1 === node.children.length &&
+        3 < node.distanceFromLeaf &&
+        node.distanceFromLeaf > 15 - indent
+        ? findNotableNode(node.children[0], indent)
+        : node;
+    }
+    function indentation(indent) {
+      return "  " + "  ".repeat(indent);
+    }
+    function added(indent) {
+      return "+ " + "  ".repeat(indent);
+    }
+    function removed(indent) {
+      return "- " + "  ".repeat(indent);
+    }
+    function describeFiberType(fiber) {
+      switch (fiber.tag) {
+        case 26:
+        case 27:
+        case 5:
+          return fiber.type;
+        case 16:
+          return "Lazy";
+        case 13:
+          return "Suspense";
+        case 19:
+          return "SuspenseList";
+        case 0:
+        case 15:
+          return (fiber = fiber.type), fiber.displayName || fiber.name || null;
+        case 11:
+          return (
+            (fiber = fiber.type.render), fiber.displayName || fiber.name || null
+          );
+        case 1:
+          return (fiber = fiber.type), fiber.displayName || fiber.name || null;
+        default:
+          return null;
+      }
+    }
+    function describeTextNode(content, maxLength) {
+      return needsEscaping.test(content)
+        ? ((content = JSON.stringify(content)),
+          content.length > maxLength - 2
+            ? 8 > maxLength
+              ? '{"..."}'
+              : "{" + content.slice(0, maxLength - 7) + '..."}'
+            : "{" + content + "}")
+        : content.length > maxLength
+          ? 5 > maxLength
+            ? '{"..."}'
+            : content.slice(0, maxLength - 3) + "..."
+          : content;
+    }
+    function describeTextDiff(clientText, serverProps, indent) {
+      var maxLength = 120 - 2 * indent;
+      if (null === serverProps)
+        return added(indent) + describeTextNode(clientText, maxLength) + "\n";
+      if ("string" === typeof serverProps) {
+        for (
+          var firstDiff = 0;
+          firstDiff < serverProps.length &&
+          firstDiff < clientText.length &&
+          serverProps.charCodeAt(firstDiff) ===
+            clientText.charCodeAt(firstDiff);
+          firstDiff++
+        );
+        firstDiff > maxLength - 8 &&
+          10 < firstDiff &&
+          ((clientText = "..." + clientText.slice(firstDiff - 8)),
+          (serverProps = "..." + serverProps.slice(firstDiff - 8)));
+        return (
+          added(indent) +
+          describeTextNode(clientText, maxLength) +
+          "\n" +
+          removed(indent) +
+          describeTextNode(serverProps, maxLength) +
+          "\n"
+        );
+      }
+      return (
+        indentation(indent) + describeTextNode(clientText, maxLength) + "\n"
+      );
+    }
+    function objectName(object) {
+      return Object.prototype.toString
+        .call(object)
+        .replace(/^\[object (.*)\]$/, function (m, p0) {
+          return p0;
+        });
+    }
+    function describeValue(value, maxLength) {
+      switch (typeof value) {
+        case "string":
+          return (
+            (value = JSON.stringify(value)),
+            value.length > maxLength
+              ? 5 > maxLength
+                ? '"..."'
+                : value.slice(0, maxLength - 4) + '..."'
+              : value
+          );
+        case "object":
+          if (null === value) return "null";
+          if (isArrayImpl(value)) return "[...]";
+          if (value.$$typeof === REACT_ELEMENT_TYPE)
+            return (maxLength = getComponentNameFromType(value.type))
+              ? "<" + maxLength + ">"
+              : "<...>";
+          var name = objectName(value);
+          if ("Object" === name) {
+            name = "";
+            maxLength -= 2;
+            for (var propName in value)
+              if (value.hasOwnProperty(propName)) {
+                var jsonPropName = JSON.stringify(propName);
+                jsonPropName !== '"' + propName + '"' &&
+                  (propName = jsonPropName);
+                maxLength -= propName.length - 2;
+                jsonPropName = describeValue(
+                  value[propName],
+                  15 > maxLength ? maxLength : 15
+                );
+                maxLength -= jsonPropName.length;
+                if (0 > maxLength) {
+                  name += "" === name ? "..." : ", ...";
+                  break;
+                }
+                name +=
+                  ("" === name ? "" : ",") + propName + ":" + jsonPropName;
+              }
+            return "{" + name + "}";
+          }
+          return name;
+        case "function":
+          return (maxLength = value.displayName || value.name)
+            ? "function " + maxLength
+            : "function";
+        default:
+          return String(value);
+      }
+    }
+    function describePropValue(value, maxLength) {
+      return "string" !== typeof value || needsEscaping.test(value)
+        ? "{" + describeValue(value, maxLength - 2) + "}"
+        : value.length > maxLength - 2
+          ? 5 > maxLength
+            ? '"..."'
+            : '"' + value.slice(0, maxLength - 5) + '..."'
+          : '"' + value + '"';
+    }
+    function describeExpandedElement(type, props, rowPrefix) {
+      var remainingRowLength = 120 - rowPrefix.length - type.length,
+        properties = [],
+        propName;
+      for (propName in props)
+        if (props.hasOwnProperty(propName) && "children" !== propName) {
+          var propValue = describePropValue(
+            props[propName],
+            120 - rowPrefix.length - propName.length - 1
+          );
+          remainingRowLength -= propName.length + propValue.length + 2;
+          properties.push(propName + "=" + propValue);
+        }
+      return 0 === properties.length
+        ? rowPrefix + "<" + type + ">\n"
+        : 0 < remainingRowLength
+          ? rowPrefix + "<" + type + " " + properties.join(" ") + ">\n"
+          : rowPrefix +
+            "<" +
+            type +
+            "\n" +
+            rowPrefix +
+            "  " +
+            properties.join("\n" + rowPrefix + "  ") +
+            "\n" +
+            rowPrefix +
+            ">\n";
+    }
+    function describePropertiesDiff(clientObject, serverObject, indent) {
+      var properties = "",
+        remainingServerProperties = assign({}, serverObject),
+        propName;
+      for (propName in clientObject)
+        if (clientObject.hasOwnProperty(propName)) {
+          delete remainingServerProperties[propName];
+          var maxLength = 120 - 2 * indent - propName.length - 2,
+            clientPropValue = describeValue(clientObject[propName], maxLength);
+          serverObject.hasOwnProperty(propName)
+            ? ((maxLength = describeValue(serverObject[propName], maxLength)),
+              (properties +=
+                added(indent) + propName + ": " + clientPropValue + "\n"),
+              (properties +=
+                removed(indent) + propName + ": " + maxLength + "\n"))
+            : (properties +=
+                added(indent) + propName + ": " + clientPropValue + "\n");
+        }
+      for (var _propName in remainingServerProperties)
+        remainingServerProperties.hasOwnProperty(_propName) &&
+          ((clientObject = describeValue(
+            remainingServerProperties[_propName],
+            120 - 2 * indent - _propName.length - 2
+          )),
+          (properties +=
+            removed(indent) + _propName + ": " + clientObject + "\n"));
+      return properties;
+    }
+    function describeElementDiff(type, clientProps, serverProps, indent) {
+      var content = "",
+        serverPropNames = new Map();
+      for (propName$jscomp$0 in serverProps)
+        serverProps.hasOwnProperty(propName$jscomp$0) &&
+          serverPropNames.set(
+            propName$jscomp$0.toLowerCase(),
+            propName$jscomp$0
+          );
+      if (1 === serverPropNames.size && serverPropNames.has("children"))
+        content += describeExpandedElement(
+          type,
+          clientProps,
+          indentation(indent)
+        );
+      else {
+        for (var _propName2 in clientProps)
+          if (
+            clientProps.hasOwnProperty(_propName2) &&
+            "children" !== _propName2
+          ) {
+            var maxLength$jscomp$0 =
+                120 - 2 * (indent + 1) - _propName2.length - 1,
+              serverPropName = serverPropNames.get(_propName2.toLowerCase());
+            if (void 0 !== serverPropName) {
+              serverPropNames.delete(_propName2.toLowerCase());
+              var propName$jscomp$0 = clientProps[_propName2];
+              serverPropName = serverProps[serverPropName];
+              var clientPropValue = describePropValue(
+                propName$jscomp$0,
+                maxLength$jscomp$0
+              );
+              maxLength$jscomp$0 = describePropValue(
+                serverPropName,
+                maxLength$jscomp$0
+              );
+              "object" === typeof propName$jscomp$0 &&
+              null !== propName$jscomp$0 &&
+              "object" === typeof serverPropName &&
+              null !== serverPropName &&
+              "Object" === objectName(propName$jscomp$0) &&
+              "Object" === objectName(serverPropName) &&
+              (2 < Object.keys(propName$jscomp$0).length ||
+                2 < Object.keys(serverPropName).length ||
+                -1 < clientPropValue.indexOf("...") ||
+                -1 < maxLength$jscomp$0.indexOf("..."))
+                ? (content +=
+                    indentation(indent + 1) +
+                    _propName2 +
+                    "={{\n" +
+                    describePropertiesDiff(
+                      propName$jscomp$0,
+                      serverPropName,
+                      indent + 2
+                    ) +
+                    indentation(indent + 1) +
+                    "}}\n")
+                : ((content +=
+                    added(indent + 1) +
+                    _propName2 +
+                    "=" +
+                    clientPropValue +
+                    "\n"),
+                  (content +=
+                    removed(indent + 1) +
+                    _propName2 +
+                    "=" +
+                    maxLength$jscomp$0 +
+                    "\n"));
+            } else
+              content +=
+                indentation(indent + 1) +
+                _propName2 +
+                "=" +
+                describePropValue(clientProps[_propName2], maxLength$jscomp$0) +
+                "\n";
+          }
+        serverPropNames.forEach(function (propName) {
+          if ("children" !== propName) {
+            var maxLength = 120 - 2 * (indent + 1) - propName.length - 1;
+            content +=
+              removed(indent + 1) +
+              propName +
+              "=" +
+              describePropValue(serverProps[propName], maxLength) +
+              "\n";
+          }
+        });
+        content =
+          "" === content
+            ? indentation(indent) + "<" + type + ">\n"
+            : indentation(indent) +
+              "<" +
+              type +
+              "\n" +
+              content +
+              indentation(indent) +
+              ">\n";
+      }
+      type = serverProps.children;
+      clientProps = clientProps.children;
+      if (
+        "string" === typeof type ||
+        "number" === typeof type ||
+        "bigint" === typeof type
+      ) {
+        serverPropNames = "";
+        if (
+          "string" === typeof clientProps ||
+          "number" === typeof clientProps ||
+          "bigint" === typeof clientProps
+        )
+          serverPropNames = "" + clientProps;
+        content += describeTextDiff(serverPropNames, "" + type, indent + 1);
+      } else if (
+        "string" === typeof clientProps ||
+        "number" === typeof clientProps ||
+        "bigint" === typeof clientProps
+      )
+        content =
+          null == type
+            ? content + describeTextDiff("" + clientProps, null, indent + 1)
+            : content + describeTextDiff("" + clientProps, void 0, indent + 1);
+      return content;
+    }
+    function describeSiblingFiber(fiber, indent) {
+      var type = describeFiberType(fiber);
+      if (null === type) {
+        type = "";
+        for (fiber = fiber.child; fiber; )
+          (type += describeSiblingFiber(fiber, indent)),
+            (fiber = fiber.sibling);
+        return type;
+      }
+      return indentation(indent) + "<" + type + ">\n";
+    }
+    function describeNode(node, indent) {
+      var skipToNode = findNotableNode(node, indent);
+      if (
+        skipToNode !== node &&
+        (1 !== node.children.length || node.children[0] !== skipToNode)
+      )
+        return (
+          indentation(indent) + "...\n" + describeNode(skipToNode, indent + 1)
+        );
+      skipToNode = "";
+      var debugInfo = node.fiber._debugInfo;
+      if (debugInfo)
+        for (var i = 0; i < debugInfo.length; i++) {
+          var serverComponentName = debugInfo[i].name;
+          "string" === typeof serverComponentName &&
+            ((skipToNode +=
+              indentation(indent) + "<" + serverComponentName + ">\n"),
+            indent++);
+        }
+      debugInfo = "";
+      i = node.fiber.pendingProps;
+      if (6 === node.fiber.tag)
+        (debugInfo = describeTextDiff(i, node.serverProps, indent)), indent++;
+      else if (
+        ((serverComponentName = describeFiberType(node.fiber)),
+        null !== serverComponentName)
+      )
+        if (void 0 === node.serverProps) {
+          debugInfo = indent;
+          var maxLength = 120 - 2 * debugInfo - serverComponentName.length - 2,
+            content = "";
+          for (propName in i)
+            if (i.hasOwnProperty(propName) && "children" !== propName) {
+              var propValue = describePropValue(i[propName], 15);
+              maxLength -= propName.length + propValue.length + 2;
+              if (0 > maxLength) {
+                content += " ...";
+                break;
+              }
+              content += " " + propName + "=" + propValue;
+            }
+          debugInfo =
+            indentation(debugInfo) +
+            "<" +
+            serverComponentName +
+            content +
+            ">\n";
+          indent++;
+        } else
+          null === node.serverProps
+            ? ((debugInfo = describeExpandedElement(
+                serverComponentName,
+                i,
+                added(indent)
+              )),
+              indent++)
+            : "string" === typeof node.serverProps
+              ? console.error(
+                  "Should not have matched a non HostText fiber to a Text node. This is a bug in React."
+                )
+              : ((debugInfo = describeElementDiff(
+                  serverComponentName,
+                  i,
+                  node.serverProps,
+                  indent
+                )),
+                indent++);
+      var propName = "";
+      i = node.fiber.child;
+      for (
+        serverComponentName = 0;
+        i && serverComponentName < node.children.length;
+
+      )
+        (maxLength = node.children[serverComponentName]),
+          maxLength.fiber === i
+            ? ((propName += describeNode(maxLength, indent)),
+              serverComponentName++)
+            : (propName += describeSiblingFiber(i, indent)),
+          (i = i.sibling);
+      i &&
+        0 < node.children.length &&
+        (propName += indentation(indent) + "...\n");
+      i = node.serverTail;
+      null === node.serverProps && indent--;
+      for (node = 0; node < i.length; node++)
+        (serverComponentName = i[node]),
+          (propName =
+            "string" === typeof serverComponentName
+              ? propName +
+                (removed(indent) +
+                  describeTextNode(serverComponentName, 120 - 2 * indent) +
+                  "\n")
+              : propName +
+                describeExpandedElement(
+                  serverComponentName.type,
+                  serverComponentName.props,
+                  removed(indent)
+                ));
+      return skipToNode + debugInfo + propName;
+    }
+    function describeDiff(rootNode) {
+      try {
+        return "\n\n" + describeNode(rootNode, 0);
+      } catch (x) {
+        return "";
+      }
+    }
+    function describeAncestors(ancestor, child, props) {
+      for (var fiber = child, node = null, distanceFromLeaf = 0; fiber; )
+        fiber === ancestor && (distanceFromLeaf = 0),
+          (node = {
+            fiber: fiber,
+            children: null !== node ? [node] : [],
+            serverProps:
+              fiber === child ? props : fiber === ancestor ? null : void 0,
+            serverTail: [],
+            distanceFromLeaf: distanceFromLeaf
+          }),
+          distanceFromLeaf++,
+          (fiber = fiber.return);
+      return null !== node ? describeDiff(node).replaceAll(/^[+-]/gm, ">") : "";
+    }
+    function updatedAncestorInfoDev(oldInfo, tag) {
+      var ancestorInfo = assign({}, oldInfo || emptyAncestorInfoDev),
+        info = { tag: tag };
+      -1 !== inScopeTags.indexOf(tag) &&
+        ((ancestorInfo.aTagInScope = null),
+        (ancestorInfo.buttonTagInScope = null),
+        (ancestorInfo.nobrTagInScope = null));
+      -1 !== buttonScopeTags.indexOf(tag) &&
+        (ancestorInfo.pTagInButtonScope = null);
+      -1 !== specialTags.indexOf(tag) &&
+        "address" !== tag &&
+        "div" !== tag &&
+        "p" !== tag &&
+        ((ancestorInfo.listItemTagAutoclosing = null),
+        (ancestorInfo.dlItemTagAutoclosing = null));
+      ancestorInfo.current = info;
+      "form" === tag && (ancestorInfo.formTag = info);
+      "a" === tag && (ancestorInfo.aTagInScope = info);
+      "button" === tag && (ancestorInfo.buttonTagInScope = info);
+      "nobr" === tag && (ancestorInfo.nobrTagInScope = info);
+      "p" === tag && (ancestorInfo.pTagInButtonScope = info);
+      "li" === tag && (ancestorInfo.listItemTagAutoclosing = info);
+      if ("dd" === tag || "dt" === tag)
+        ancestorInfo.dlItemTagAutoclosing = info;
+      "#document" === tag || "html" === tag
+        ? (ancestorInfo.containerTagInScope = null)
+        : ancestorInfo.containerTagInScope ||
+          (ancestorInfo.containerTagInScope = info);
+      null !== oldInfo ||
+      ("#document" !== tag && "html" !== tag && "body" !== tag)
+        ? !0 === ancestorInfo.implicitRootScope &&
+          (ancestorInfo.implicitRootScope = !1)
+        : (ancestorInfo.implicitRootScope = !0);
+      return ancestorInfo;
+    }
+    function isTagValidWithParent(tag, parentTag, implicitRootScope) {
+      switch (parentTag) {
+        case "select":
+          return (
+            "hr" === tag ||
+            "option" === tag ||
+            "optgroup" === tag ||
+            "script" === tag ||
+            "template" === tag ||
+            "#text" === tag
+          );
+        case "optgroup":
+          return "option" === tag || "#text" === tag;
+        case "option":
+          return "#text" === tag;
+        case "tr":
+          return (
+            "th" === tag ||
+            "td" === tag ||
+            "style" === tag ||
+            "script" === tag ||
+            "template" === tag
+          );
+        case "tbody":
+        case "thead":
+        case "tfoot":
+          return (
+            "tr" === tag ||
+            "style" === tag ||
+            "script" === tag ||
+            "template" === tag
+          );
+        case "colgroup":
+          return "col" === tag || "template" === tag;
+        case "table":
+          return (
+            "caption" === tag ||
+            "colgroup" === tag ||
+            "tbody" === tag ||
+            "tfoot" === tag ||
+            "thead" === tag ||
+            "style" === tag ||
+            "script" === tag ||
+            "template" === tag
+          );
+        case "head":
+          return (
+            "base" === tag ||
+            "basefont" === tag ||
+            "bgsound" === tag ||
+            "link" === tag ||
+            "meta" === tag ||
+            "title" === tag ||
+            "noscript" === tag ||
+            "noframes" === tag ||
+            "style" === tag ||
+            "script" === tag ||
+            "template" === tag
+          );
+        case "html":
+          if (implicitRootScope) break;
+          return "head" === tag || "body" === tag || "frameset" === tag;
+        case "frameset":
+          return "frame" === tag;
+        case "#document":
+          if (!implicitRootScope) return "html" === tag;
+      }
+      switch (tag) {
+        case "h1":
+        case "h2":
+        case "h3":
+        case "h4":
+        case "h5":
+        case "h6":
+          return (
+            "h1" !== parentTag &&
+            "h2" !== parentTag &&
+            "h3" !== parentTag &&
+            "h4" !== parentTag &&
+            "h5" !== parentTag &&
+            "h6" !== parentTag
+          );
+        case "rp":
+        case "rt":
+          return -1 === impliedEndTags.indexOf(parentTag);
+        case "caption":
+        case "col":
+        case "colgroup":
+        case "frameset":
+        case "frame":
+        case "tbody":
+        case "td":
+        case "tfoot":
+        case "th":
+        case "thead":
+        case "tr":
+          return null == parentTag;
+        case "head":
+          return implicitRootScope || null === parentTag;
+        case "html":
+          return (
+            (implicitRootScope && "#document" === parentTag) ||
+            null === parentTag
+          );
+        case "body":
+          return (
+            (implicitRootScope &&
+              ("#document" === parentTag || "html" === parentTag)) ||
+            null === parentTag
+          );
+      }
+      return !0;
+    }
+    function findInvalidAncestorForTag(tag, ancestorInfo) {
+      switch (tag) {
+        case "address":
+        case "article":
+        case "aside":
+        case "blockquote":
+        case "center":
+        case "details":
+        case "dialog":
+        case "dir":
+        case "div":
+        case "dl":
+        case "fieldset":
+        case "figcaption":
+        case "figure":
+        case "footer":
+        case "header":
+        case "hgroup":
+        case "main":
+        case "menu":
+        case "nav":
+        case "ol":
+        case "p":
+        case "section":
+        case "summary":
+        case "ul":
+        case "pre":
+        case "listing":
+        case "table":
+        case "hr":
+        case "xmp":
+        case "h1":
+        case "h2":
+        case "h3":
+        case "h4":
+        case "h5":
+        case "h6":
+          return ancestorInfo.pTagInButtonScope;
+        case "form":
+          return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;
+        case "li":
+          return ancestorInfo.listItemTagAutoclosing;
+        case "dd":
+        case "dt":
+          return ancestorInfo.dlItemTagAutoclosing;
+        case "button":
+          return ancestorInfo.buttonTagInScope;
+        case "a":
+          return ancestorInfo.aTagInScope;
+        case "nobr":
+          return ancestorInfo.nobrTagInScope;
+      }
+      return null;
+    }
+    function findAncestor(parent, tagName) {
+      for (; parent; ) {
+        switch (parent.tag) {
+          case 5:
+          case 26:
+          case 27:
+            if (parent.type === tagName) return parent;
+        }
+        parent = parent.return;
+      }
+      return null;
+    }
+    function validateDOMNesting(childTag, ancestorInfo) {
+      ancestorInfo = ancestorInfo || emptyAncestorInfoDev;
+      var parentInfo = ancestorInfo.current;
+      ancestorInfo = (parentInfo = isTagValidWithParent(
+        childTag,
+        parentInfo && parentInfo.tag,
+        ancestorInfo.implicitRootScope
+      )
+        ? null
+        : parentInfo)
+        ? null
+        : findInvalidAncestorForTag(childTag, ancestorInfo);
+      ancestorInfo = parentInfo || ancestorInfo;
+      if (!ancestorInfo) return !0;
+      var ancestorTag = ancestorInfo.tag;
+      ancestorInfo = String(!!parentInfo) + "|" + childTag + "|" + ancestorTag;
+      if (didWarn[ancestorInfo]) return !1;
+      didWarn[ancestorInfo] = !0;
+      var ancestor = (ancestorInfo = current)
+          ? findAncestor(ancestorInfo.return, ancestorTag)
+          : null,
+        ancestorDescription =
+          null !== ancestorInfo && null !== ancestor
+            ? describeAncestors(ancestor, ancestorInfo, null)
+            : "",
+        tagDisplayName = "<" + childTag + ">";
+      parentInfo
+        ? ((parentInfo = ""),
+          "table" === ancestorTag &&
+            "tr" === childTag &&
+            (parentInfo +=
+              " Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by the browser."),
+          console.error(
+            "In HTML, %s cannot be a child of <%s>.%s\nThis will cause a hydration error.%s",
+            tagDisplayName,
+            ancestorTag,
+            parentInfo,
+            ancestorDescription
+          ))
+        : console.error(
+            "In HTML, %s cannot be a descendant of <%s>.\nThis will cause a hydration error.%s",
+            tagDisplayName,
+            ancestorTag,
+            ancestorDescription
+          );
+      ancestorInfo &&
+        ((childTag = ancestorInfo.return),
+        null === ancestor ||
+          null === childTag ||
+          (ancestor === childTag &&
+            childTag._debugOwner === ancestorInfo._debugOwner) ||
+          runWithFiberInDEV(ancestor, function () {
+            console.error(
+              "<%s> cannot contain a nested %s.\nSee this log for the ancestor stack trace.",
+              ancestorTag,
+              tagDisplayName
+            );
+          }));
+      return !1;
+    }
+    function validateTextNesting(childText, parentTag, implicitRootScope) {
+      if (implicitRootScope || isTagValidWithParent("#text", parentTag, !1))
+        return !0;
+      implicitRootScope = "#text|" + parentTag;
+      if (didWarn[implicitRootScope]) return !1;
+      didWarn[implicitRootScope] = !0;
+      var ancestor = (implicitRootScope = current)
+        ? findAncestor(implicitRootScope, parentTag)
+        : null;
+      implicitRootScope =
+        null !== implicitRootScope && null !== ancestor
+          ? describeAncestors(
+              ancestor,
+              implicitRootScope,
+              6 !== implicitRootScope.tag ? { children: null } : null
+            )
+          : "";
+      /\S/.test(childText)
+        ? console.error(
+            "In HTML, text nodes cannot be a child of <%s>.\nThis will cause a hydration error.%s",
+            parentTag,
+            implicitRootScope
+          )
+        : console.error(
+            "In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.\nThis will cause a hydration error.%s",
+            parentTag,
+            implicitRootScope
+          );
+      return !1;
+    }
+    function setTextContent(node, text) {
+      if (text) {
+        var firstChild = node.firstChild;
+        if (
+          firstChild &&
+          firstChild === node.lastChild &&
+          3 === firstChild.nodeType
+        ) {
+          firstChild.nodeValue = text;
+          return;
+        }
+      }
+      node.textContent = text;
+    }
+    function camelize(string) {
+      return string.replace(hyphenPattern, function (_, character) {
+        return character.toUpperCase();
+      });
+    }
+    function setValueForStyle(style, styleName, value) {
+      var isCustomProperty = 0 === styleName.indexOf("--");
+      isCustomProperty ||
+        (-1 < styleName.indexOf("-")
+          ? (warnedStyleNames.hasOwnProperty(styleName) &&
+              warnedStyleNames[styleName]) ||
+            ((warnedStyleNames[styleName] = !0),
+            console.error(
+              "Unsupported style property %s. Did you mean %s?",
+              styleName,
+              camelize(styleName.replace(msPattern, "ms-"))
+            ))
+          : badVendoredStyleNamePattern.test(styleName)
+            ? (warnedStyleNames.hasOwnProperty(styleName) &&
+                warnedStyleNames[styleName]) ||
+              ((warnedStyleNames[styleName] = !0),
+              console.error(
+                "Unsupported vendor-prefixed style property %s. Did you mean %s?",
+                styleName,
+                styleName.charAt(0).toUpperCase() + styleName.slice(1)
+              ))
+            : !badStyleValueWithSemicolonPattern.test(value) ||
+              (warnedStyleValues.hasOwnProperty(value) &&
+                warnedStyleValues[value]) ||
+              ((warnedStyleValues[value] = !0),
+              console.error(
+                'Style property values shouldn\'t contain a semicolon. Try "%s: %s" instead.',
+                styleName,
+                value.replace(badStyleValueWithSemicolonPattern, "")
+              )),
+        "number" === typeof value &&
+          (isNaN(value)
+            ? warnedForNaNValue ||
+              ((warnedForNaNValue = !0),
+              console.error(
+                "`NaN` is an invalid value for the `%s` css style property.",
+                styleName
+              ))
+            : isFinite(value) ||
+              warnedForInfinityValue ||
+              ((warnedForInfinityValue = !0),
+              console.error(
+                "`Infinity` is an invalid value for the `%s` css style property.",
+                styleName
+              ))));
+      null == value || "boolean" === typeof value || "" === value
+        ? isCustomProperty
+          ? style.setProperty(styleName, "")
+          : "float" === styleName
+            ? (style.cssFloat = "")
+            : (style[styleName] = "")
+        : isCustomProperty
+          ? style.setProperty(styleName, value)
+          : "number" !== typeof value ||
+              0 === value ||
+              unitlessNumbers.has(styleName)
+            ? "float" === styleName
+              ? (style.cssFloat = value)
+              : (checkCSSPropertyStringCoercion(value, styleName),
+                (style[styleName] = ("" + value).trim()))
+            : (style[styleName] = value + "px");
+    }
+    function setValueForStyles(node, styles, prevStyles) {
+      if (null != styles && "object" !== typeof styles)
+        throw Error(
+          "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+        );
+      styles && Object.freeze(styles);
+      node = node.style;
+      if (null != prevStyles) {
+        if (styles) {
+          var expandedUpdates = {};
+          if (prevStyles)
+            for (var key in prevStyles)
+              if (prevStyles.hasOwnProperty(key) && !styles.hasOwnProperty(key))
+                for (
+                  var longhands = shorthandToLonghand[key] || [key], i = 0;
+                  i < longhands.length;
+                  i++
+                )
+                  expandedUpdates[longhands[i]] = key;
+          for (var _key in styles)
+            if (
+              styles.hasOwnProperty(_key) &&
+              (!prevStyles || prevStyles[_key] !== styles[_key])
+            )
+              for (
+                key = shorthandToLonghand[_key] || [_key], longhands = 0;
+                longhands < key.length;
+                longhands++
+              )
+                expandedUpdates[key[longhands]] = _key;
+          _key = {};
+          for (var key$jscomp$0 in styles)
+            for (
+              key = shorthandToLonghand[key$jscomp$0] || [key$jscomp$0],
+                longhands = 0;
+              longhands < key.length;
+              longhands++
+            )
+              _key[key[longhands]] = key$jscomp$0;
+          key$jscomp$0 = {};
+          for (var _key2 in expandedUpdates)
+            if (
+              ((key = expandedUpdates[_key2]),
+              (longhands = _key[_key2]) &&
+                key !== longhands &&
+                ((i = key + "," + longhands), !key$jscomp$0[i]))
+            ) {
+              key$jscomp$0[i] = !0;
+              i = console;
+              var value = styles[key];
+              i.error.call(
+                i,
+                "%s a style property during rerender (%s) when a conflicting property is set (%s) can lead to styling bugs. To avoid this, don't mix shorthand and non-shorthand properties for the same value; instead, replace the shorthand with separate values.",
+                null == value || "boolean" === typeof value || "" === value
+                  ? "Removing"
+                  : "Updating",
+                key,
+                longhands
+              );
+            }
+        }
+        for (var styleName in prevStyles)
+          !prevStyles.hasOwnProperty(styleName) ||
+            (null != styles && styles.hasOwnProperty(styleName)) ||
+            (0 === styleName.indexOf("--")
+              ? node.setProperty(styleName, "")
+              : "float" === styleName
+                ? (node.cssFloat = "")
+                : (node[styleName] = ""));
+        for (var _styleName in styles)
+          (_key2 = styles[_styleName]),
+            styles.hasOwnProperty(_styleName) &&
+              prevStyles[_styleName] !== _key2 &&
+              setValueForStyle(node, _styleName, _key2);
+      } else
+        for (expandedUpdates in styles)
+          styles.hasOwnProperty(expandedUpdates) &&
+            setValueForStyle(node, expandedUpdates, styles[expandedUpdates]);
+    }
+    function isCustomElement(tagName) {
+      if (-1 === tagName.indexOf("-")) return !1;
+      switch (tagName) {
+        case "annotation-xml":
+        case "color-profile":
+        case "font-face":
+        case "font-face-src":
+        case "font-face-uri":
+        case "font-face-format":
+        case "font-face-name":
+        case "missing-glyph":
+          return !1;
+        default:
+          return !0;
+      }
+    }
+    function getAttributeAlias(name) {
+      return aliases.get(name) || name;
+    }
+    function validateProperty$1(tagName, name) {
+      if (
+        hasOwnProperty.call(warnedProperties$1, name) &&
+        warnedProperties$1[name]
+      )
+        return !0;
+      if (rARIACamel$1.test(name)) {
+        tagName = "aria-" + name.slice(4).toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.",
+              name
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+        if (name !== tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. Did you mean `%s`?",
+              name,
+              tagName
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+      }
+      if (rARIA$1.test(name)) {
+        tagName = name.toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName) return (warnedProperties$1[name] = !0), !1;
+        name !== tagName &&
+          (console.error(
+            "Unknown ARIA attribute `%s`. Did you mean `%s`?",
+            name,
+            tagName
+          ),
+          (warnedProperties$1[name] = !0));
+      }
+      return !0;
+    }
+    function validateProperties$2(type, props) {
+      var invalidProps = [],
+        key;
+      for (key in props)
+        validateProperty$1(type, key) || invalidProps.push(key);
+      props = invalidProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === invalidProps.length
+        ? console.error(
+            "Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          )
+        : 1 < invalidProps.length &&
+          console.error(
+            "Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          );
+    }
+    function validateProperty(tagName, name, value, eventRegistry) {
+      if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])
+        return !0;
+      var lowerCasedName = name.toLowerCase();
+      if ("onfocusin" === lowerCasedName || "onfocusout" === lowerCasedName)
+        return (
+          console.error(
+            "React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "function" === typeof value &&
+        (("form" === tagName && "action" === name) ||
+          ("input" === tagName && "formAction" === name) ||
+          ("button" === tagName && "formAction" === name))
+      )
+        return !0;
+      if (null != eventRegistry) {
+        tagName = eventRegistry.possibleRegistrationNames;
+        if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))
+          return !0;
+        eventRegistry = tagName.hasOwnProperty(lowerCasedName)
+          ? tagName[lowerCasedName]
+          : null;
+        if (null != eventRegistry)
+          return (
+            console.error(
+              "Invalid event handler property `%s`. Did you mean `%s`?",
+              name,
+              eventRegistry
+            ),
+            (warnedProperties[name] = !0)
+          );
+        if (EVENT_NAME_REGEX.test(name))
+          return (
+            console.error(
+              "Unknown event handler property `%s`. It will be ignored.",
+              name
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (EVENT_NAME_REGEX.test(name))
+        return (
+          INVALID_EVENT_NAME_REGEX.test(name) &&
+            console.error(
+              "Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.",
+              name
+            ),
+          (warnedProperties[name] = !0)
+        );
+      if (rARIA.test(name) || rARIACamel.test(name)) return !0;
+      if ("innerhtml" === lowerCasedName)
+        return (
+          console.error(
+            "Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("aria" === lowerCasedName)
+        return (
+          console.error(
+            "The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "is" === lowerCasedName &&
+        null !== value &&
+        void 0 !== value &&
+        "string" !== typeof value
+      )
+        return (
+          console.error(
+            "Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.",
+            typeof value
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("number" === typeof value && isNaN(value))
+        return (
+          console.error(
+            "Received NaN for the `%s` attribute. If this is expected, cast the value to a string.",
+            name
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
+        if (
+          ((lowerCasedName = possibleStandardNames[lowerCasedName]),
+          lowerCasedName !== name)
+        )
+          return (
+            console.error(
+              "Invalid DOM property `%s`. Did you mean `%s`?",
+              name,
+              lowerCasedName
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (name !== lowerCasedName)
+        return (
+          console.error(
+            "React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.",
+            name,
+            lowerCasedName
+          ),
+          (warnedProperties[name] = !0)
+        );
+      switch (name) {
+        case "dangerouslySetInnerHTML":
+        case "children":
+        case "style":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "ref":
+          return !0;
+        case "innerText":
+        case "textContent":
+          return !0;
+      }
+      switch (typeof value) {
+        case "boolean":
+          switch (name) {
+            case "autoFocus":
+            case "checked":
+            case "multiple":
+            case "muted":
+            case "selected":
+            case "contentEditable":
+            case "spellCheck":
+            case "draggable":
+            case "value":
+            case "autoReverse":
+            case "externalResourcesRequired":
+            case "focusable":
+            case "preserveAlpha":
+            case "allowFullScreen":
+            case "async":
+            case "autoPlay":
+            case "controls":
+            case "default":
+            case "defer":
+            case "disabled":
+            case "disablePictureInPicture":
+            case "disableRemotePlayback":
+            case "formNoValidate":
+            case "hidden":
+            case "loop":
+            case "noModule":
+            case "noValidate":
+            case "open":
+            case "playsInline":
+            case "readOnly":
+            case "required":
+            case "reversed":
+            case "scoped":
+            case "seamless":
+            case "itemScope":
+            case "capture":
+            case "download":
+            case "inert":
+              return !0;
+            default:
+              lowerCasedName = name.toLowerCase().slice(0, 5);
+              if ("data-" === lowerCasedName || "aria-" === lowerCasedName)
+                return !0;
+              value
+                ? console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name
+                  )
+                : console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name,
+                    name,
+                    name
+                  );
+              return (warnedProperties[name] = !0);
+          }
+        case "function":
+        case "symbol":
+          return (warnedProperties[name] = !0), !1;
+        case "string":
+          if ("false" === value || "true" === value) {
+            switch (name) {
+              case "checked":
+              case "selected":
+              case "multiple":
+              case "muted":
+              case "allowFullScreen":
+              case "async":
+              case "autoPlay":
+              case "controls":
+              case "default":
+              case "defer":
+              case "disabled":
+              case "disablePictureInPicture":
+              case "disableRemotePlayback":
+              case "formNoValidate":
+              case "hidden":
+              case "loop":
+              case "noModule":
+              case "noValidate":
+              case "open":
+              case "playsInline":
+              case "readOnly":
+              case "required":
+              case "reversed":
+              case "scoped":
+              case "seamless":
+              case "itemScope":
+              case "inert":
+                break;
+              default:
+                return !0;
+            }
+            console.error(
+              "Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?",
+              value,
+              name,
+              "false" === value
+                ? "The browser will interpret it as a truthy value."
+                : 'Although this works, it will not work as expected if you pass the string "false".',
+              name,
+              value
+            );
+            warnedProperties[name] = !0;
+          }
+      }
+      return !0;
+    }
+    function warnUnknownProperties(type, props, eventRegistry) {
+      var unknownProps = [],
+        key;
+      for (key in props)
+        validateProperty(type, key, props[key], eventRegistry) ||
+          unknownProps.push(key);
+      props = unknownProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === unknownProps.length
+        ? console.error(
+            "Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          )
+        : 1 < unknownProps.length &&
+          console.error(
+            "Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          );
+    }
+    function sanitizeURL(url) {
+      return isJavaScriptProtocol.test("" + url)
+        ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+        : url;
+    }
+    function getEventTarget(nativeEvent) {
+      nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;
+      nativeEvent.correspondingUseElement &&
+        (nativeEvent = nativeEvent.correspondingUseElement);
+      return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;
+    }
+    function restoreStateOfTarget(target) {
+      var internalInstance = getInstanceFromNode(target);
+      if (internalInstance && (target = internalInstance.stateNode)) {
+        var props = target[internalPropsKey] || null;
+        a: switch (
+          ((target = internalInstance.stateNode), internalInstance.type)
+        ) {
+          case "input":
+            updateInput(
+              target,
+              props.value,
+              props.defaultValue,
+              props.defaultValue,
+              props.checked,
+              props.defaultChecked,
+              props.type,
+              props.name
+            );
+            internalInstance = props.name;
+            if ("radio" === props.type && null != internalInstance) {
+              for (props = target; props.parentNode; ) props = props.parentNode;
+              checkAttributeStringCoercion(internalInstance, "name");
+              props = props.querySelectorAll(
+                'input[name="' +
+                  escapeSelectorAttributeValueInsideDoubleQuotes(
+                    "" + internalInstance
+                  ) +
+                  '"][type="radio"]'
+              );
+              for (
+                internalInstance = 0;
+                internalInstance < props.length;
+                internalInstance++
+              ) {
+                var otherNode = props[internalInstance];
+                if (otherNode !== target && otherNode.form === target.form) {
+                  var otherProps = otherNode[internalPropsKey] || null;
+                  if (!otherProps)
+                    throw Error(
+                      "ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported."
+                    );
+                  updateInput(
+                    otherNode,
+                    otherProps.value,
+                    otherProps.defaultValue,
+                    otherProps.defaultValue,
+                    otherProps.checked,
+                    otherProps.defaultChecked,
+                    otherProps.type,
+                    otherProps.name
+                  );
+                }
+              }
+              for (
+                internalInstance = 0;
+                internalInstance < props.length;
+                internalInstance++
+              )
+                (otherNode = props[internalInstance]),
+                  otherNode.form === target.form &&
+                    updateValueIfChanged(otherNode);
+            }
+            break a;
+          case "textarea":
+            updateTextarea(target, props.value, props.defaultValue);
+            break a;
+          case "select":
+            (internalInstance = props.value),
+              null != internalInstance &&
+                updateOptions(target, !!props.multiple, internalInstance, !1);
+        }
+      }
+    }
+    function batchedUpdates$1(fn, a, b) {
+      if (isInsideEventHandler) return fn(a, b);
+      isInsideEventHandler = !0;
+      try {
+        var JSCompiler_inline_result = fn(a);
+        return JSCompiler_inline_result;
+      } finally {
+        if (
+          ((isInsideEventHandler = !1),
+          null !== restoreTarget || null !== restoreQueue)
+        )
+          if (
+            (flushSyncWork$1(),
+            restoreTarget &&
+              ((a = restoreTarget),
+              (fn = restoreQueue),
+              (restoreQueue = restoreTarget = null),
+              restoreStateOfTarget(a),
+              fn))
+          )
+            for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);
+      }
+    }
+    function getListener(inst, registrationName) {
+      var stateNode = inst.stateNode;
+      if (null === stateNode) return null;
+      var props = stateNode[internalPropsKey] || null;
+      if (null === props) return null;
+      stateNode = props[registrationName];
+      a: switch (registrationName) {
+        case "onClick":
+        case "onClickCapture":
+        case "onDoubleClick":
+        case "onDoubleClickCapture":
+        case "onMouseDown":
+        case "onMouseDownCapture":
+        case "onMouseMove":
+        case "onMouseMoveCapture":
+        case "onMouseUp":
+        case "onMouseUpCapture":
+        case "onMouseEnter":
+          (props = !props.disabled) ||
+            ((inst = inst.type),
+            (props = !(
+              "button" === inst ||
+              "input" === inst ||
+              "select" === inst ||
+              "textarea" === inst
+            )));
+          inst = !props;
+          break a;
+        default:
+          inst = !1;
+      }
+      if (inst) return null;
+      if (stateNode && "function" !== typeof stateNode)
+        throw Error(
+          "Expected `" +
+            registrationName +
+            "` listener to be a function, instead got a value of `" +
+            typeof stateNode +
+            "` type."
+        );
+      return stateNode;
+    }
+    function getData() {
+      if (fallbackText) return fallbackText;
+      var start,
+        startValue = startText,
+        startLength = startValue.length,
+        end,
+        endValue = "value" in root ? root.value : root.textContent,
+        endLength = endValue.length;
+      for (
+        start = 0;
+        start < startLength && startValue[start] === endValue[start];
+        start++
+      );
+      var minEnd = startLength - start;
+      for (
+        end = 1;
+        end <= minEnd &&
+        startValue[startLength - end] === endValue[endLength - end];
+        end++
+      );
+      return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));
+    }
+    function getEventCharCode(nativeEvent) {
+      var keyCode = nativeEvent.keyCode;
+      "charCode" in nativeEvent
+        ? ((nativeEvent = nativeEvent.charCode),
+          0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))
+        : (nativeEvent = keyCode);
+      10 === nativeEvent && (nativeEvent = 13);
+      return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;
+    }
+    function functionThatReturnsTrue() {
+      return !0;
+    }
+    function functionThatReturnsFalse() {
+      return !1;
+    }
+    function createSyntheticEvent(Interface) {
+      function SyntheticBaseEvent(
+        reactName,
+        reactEventType,
+        targetInst,
+        nativeEvent,
+        nativeEventTarget
+      ) {
+        this._reactName = reactName;
+        this._targetInst = targetInst;
+        this.type = reactEventType;
+        this.nativeEvent = nativeEvent;
+        this.target = nativeEventTarget;
+        this.currentTarget = null;
+        for (var propName in Interface)
+          Interface.hasOwnProperty(propName) &&
+            ((reactName = Interface[propName]),
+            (this[propName] = reactName
+              ? reactName(nativeEvent)
+              : nativeEvent[propName]));
+        this.isDefaultPrevented = (
+          null != nativeEvent.defaultPrevented
+            ? nativeEvent.defaultPrevented
+            : !1 === nativeEvent.returnValue
+        )
+          ? functionThatReturnsTrue
+          : functionThatReturnsFalse;
+        this.isPropagationStopped = functionThatReturnsFalse;
+        return this;
+      }
+      assign(SyntheticBaseEvent.prototype, {
+        preventDefault: function () {
+          this.defaultPrevented = !0;
+          var event = this.nativeEvent;
+          event &&
+            (event.preventDefault
+              ? event.preventDefault()
+              : "unknown" !== typeof event.returnValue &&
+                (event.returnValue = !1),
+            (this.isDefaultPrevented = functionThatReturnsTrue));
+        },
+        stopPropagation: function () {
+          var event = this.nativeEvent;
+          event &&
+            (event.stopPropagation
+              ? event.stopPropagation()
+              : "unknown" !== typeof event.cancelBubble &&
+                (event.cancelBubble = !0),
+            (this.isPropagationStopped = functionThatReturnsTrue));
+        },
+        persist: function () {},
+        isPersistent: functionThatReturnsTrue
+      });
+      return SyntheticBaseEvent;
+    }
+    function modifierStateGetter(keyArg) {
+      var nativeEvent = this.nativeEvent;
+      return nativeEvent.getModifierState
+        ? nativeEvent.getModifierState(keyArg)
+        : (keyArg = modifierKeyToProp[keyArg])
+          ? !!nativeEvent[keyArg]
+          : !1;
+    }
+    function getEventModifierState() {
+      return modifierStateGetter;
+    }
+    function isFallbackCompositionEnd(domEventName, nativeEvent) {
+      switch (domEventName) {
+        case "keyup":
+          return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);
+        case "keydown":
+          return nativeEvent.keyCode !== START_KEYCODE;
+        case "keypress":
+        case "mousedown":
+        case "focusout":
+          return !0;
+        default:
+          return !1;
+      }
+    }
+    function getDataFromCustomEvent(nativeEvent) {
+      nativeEvent = nativeEvent.detail;
+      return "object" === typeof nativeEvent && "data" in nativeEvent
+        ? nativeEvent.data
+        : null;
+    }
+    function getNativeBeforeInputChars(domEventName, nativeEvent) {
+      switch (domEventName) {
+        case "compositionend":
+          return getDataFromCustomEvent(nativeEvent);
+        case "keypress":
+          if (nativeEvent.which !== SPACEBAR_CODE) return null;
+          hasSpaceKeypress = !0;
+          return SPACEBAR_CHAR;
+        case "textInput":
+          return (
+            (domEventName = nativeEvent.data),
+            domEventName === SPACEBAR_CHAR && hasSpaceKeypress
+              ? null
+              : domEventName
+          );
+        default:
+          return null;
+      }
+    }
+    function getFallbackBeforeInputChars(domEventName, nativeEvent) {
+      if (isComposing)
+        return "compositionend" === domEventName ||
+          (!canUseCompositionEvent &&
+            isFallbackCompositionEnd(domEventName, nativeEvent))
+          ? ((domEventName = getData()),
+            (fallbackText = startText = root = null),
+            (isComposing = !1),
+            domEventName)
+          : null;
+      switch (domEventName) {
+        case "paste":
+          return null;
+        case "keypress":
+          if (
+            !(
+              nativeEvent.ctrlKey ||
+              nativeEvent.altKey ||
+              nativeEvent.metaKey
+            ) ||
+            (nativeEvent.ctrlKey && nativeEvent.altKey)
+          ) {
+            if (nativeEvent.char && 1 < nativeEvent.char.length)
+              return nativeEvent.char;
+            if (nativeEvent.which)
+              return String.fromCharCode(nativeEvent.which);
+          }
+          return null;
+        case "compositionend":
+          return useFallbackCompositionData && "ko" !== nativeEvent.locale
+            ? null
+            : nativeEvent.data;
+        default:
+          return null;
+      }
+    }
+    function isTextInputElement(elem) {
+      var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+      return "input" === nodeName
+        ? !!supportedInputTypes[elem.type]
+        : "textarea" === nodeName
+          ? !0
+          : !1;
+    }
+    function isEventSupported(eventNameSuffix) {
+      if (!canUseDOM) return !1;
+      eventNameSuffix = "on" + eventNameSuffix;
+      var isSupported = eventNameSuffix in document;
+      isSupported ||
+        ((isSupported = document.createElement("div")),
+        isSupported.setAttribute(eventNameSuffix, "return;"),
+        (isSupported = "function" === typeof isSupported[eventNameSuffix]));
+      return isSupported;
+    }
+    function createAndAccumulateChangeEvent(
+      dispatchQueue,
+      inst,
+      nativeEvent,
+      target
+    ) {
+      restoreTarget
+        ? restoreQueue
+          ? restoreQueue.push(target)
+          : (restoreQueue = [target])
+        : (restoreTarget = target);
+      inst = accumulateTwoPhaseListeners(inst, "onChange");
+      0 < inst.length &&
+        ((nativeEvent = new SyntheticEvent(
+          "onChange",
+          "change",
+          null,
+          nativeEvent,
+          target
+        )),
+        dispatchQueue.push({ event: nativeEvent, listeners: inst }));
+    }
+    function runEventInBatch(dispatchQueue) {
+      processDispatchQueue(dispatchQueue, 0);
+    }
+    function getInstIfValueChanged(targetInst) {
+      var targetNode = getNodeFromInstance(targetInst);
+      if (updateValueIfChanged(targetNode)) return targetInst;
+    }
+    function getTargetInstForChangeEvent(domEventName, targetInst) {
+      if ("change" === domEventName) return targetInst;
+    }
+    function stopWatchingForValueChange() {
+      activeElement$1 &&
+        (activeElement$1.detachEvent("onpropertychange", handlePropertyChange),
+        (activeElementInst$1 = activeElement$1 = null));
+    }
+    function handlePropertyChange(nativeEvent) {
+      if (
+        "value" === nativeEvent.propertyName &&
+        getInstIfValueChanged(activeElementInst$1)
+      ) {
+        var dispatchQueue = [];
+        createAndAccumulateChangeEvent(
+          dispatchQueue,
+          activeElementInst$1,
+          nativeEvent,
+          getEventTarget(nativeEvent)
+        );
+        batchedUpdates$1(runEventInBatch, dispatchQueue);
+      }
+    }
+    function handleEventsForInputEventPolyfill(
+      domEventName,
+      target,
+      targetInst
+    ) {
+      "focusin" === domEventName
+        ? (stopWatchingForValueChange(),
+          (activeElement$1 = target),
+          (activeElementInst$1 = targetInst),
+          activeElement$1.attachEvent("onpropertychange", handlePropertyChange))
+        : "focusout" === domEventName && stopWatchingForValueChange();
+    }
+    function getTargetInstForInputEventPolyfill(domEventName) {
+      if (
+        "selectionchange" === domEventName ||
+        "keyup" === domEventName ||
+        "keydown" === domEventName
+      )
+        return getInstIfValueChanged(activeElementInst$1);
+    }
+    function getTargetInstForClickEvent(domEventName, targetInst) {
+      if ("click" === domEventName) return getInstIfValueChanged(targetInst);
+    }
+    function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {
+      if ("input" === domEventName || "change" === domEventName)
+        return getInstIfValueChanged(targetInst);
+    }
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    function shallowEqual(objA, objB) {
+      if (objectIs(objA, objB)) return !0;
+      if (
+        "object" !== typeof objA ||
+        null === objA ||
+        "object" !== typeof objB ||
+        null === objB
+      )
+        return !1;
+      var keysA = Object.keys(objA),
+        keysB = Object.keys(objB);
+      if (keysA.length !== keysB.length) return !1;
+      for (keysB = 0; keysB < keysA.length; keysB++) {
+        var currentKey = keysA[keysB];
+        if (
+          !hasOwnProperty.call(objB, currentKey) ||
+          !objectIs(objA[currentKey], objB[currentKey])
+        )
+          return !1;
+      }
+      return !0;
+    }
+    function getLeafNode(node) {
+      for (; node && node.firstChild; ) node = node.firstChild;
+      return node;
+    }
+    function getNodeForCharacterOffset(root, offset) {
+      var node = getLeafNode(root);
+      root = 0;
+      for (var nodeEnd; node; ) {
+        if (3 === node.nodeType) {
+          nodeEnd = root + node.textContent.length;
+          if (root <= offset && nodeEnd >= offset)
+            return { node: node, offset: offset - root };
+          root = nodeEnd;
+        }
+        a: {
+          for (; node; ) {
+            if (node.nextSibling) {
+              node = node.nextSibling;
+              break a;
+            }
+            node = node.parentNode;
+          }
+          node = void 0;
+        }
+        node = getLeafNode(node);
+      }
+    }
+    function containsNode(outerNode, innerNode) {
+      return outerNode && innerNode
+        ? outerNode === innerNode
+          ? !0
+          : outerNode && 3 === outerNode.nodeType
+            ? !1
+            : innerNode && 3 === innerNode.nodeType
+              ? containsNode(outerNode, innerNode.parentNode)
+              : "contains" in outerNode
+                ? outerNode.contains(innerNode)
+                : outerNode.compareDocumentPosition
+                  ? !!(outerNode.compareDocumentPosition(innerNode) & 16)
+                  : !1
+        : !1;
+    }
+    function getActiveElementDeep(containerInfo) {
+      containerInfo =
+        null != containerInfo &&
+        null != containerInfo.ownerDocument &&
+        null != containerInfo.ownerDocument.defaultView
+          ? containerInfo.ownerDocument.defaultView
+          : window;
+      for (
+        var element = getActiveElement(containerInfo.document);
+        element instanceof containerInfo.HTMLIFrameElement;
+
+      ) {
+        try {
+          var JSCompiler_inline_result =
+            "string" === typeof element.contentWindow.location.href;
+        } catch (err) {
+          JSCompiler_inline_result = !1;
+        }
+        if (JSCompiler_inline_result) containerInfo = element.contentWindow;
+        else break;
+        element = getActiveElement(containerInfo.document);
+      }
+      return element;
+    }
+    function hasSelectionCapabilities(elem) {
+      var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+      return (
+        nodeName &&
+        (("input" === nodeName &&
+          ("text" === elem.type ||
+            "search" === elem.type ||
+            "tel" === elem.type ||
+            "url" === elem.type ||
+            "password" === elem.type)) ||
+          "textarea" === nodeName ||
+          "true" === elem.contentEditable)
+      );
+    }
+    function constructSelectEvent(
+      dispatchQueue,
+      nativeEvent,
+      nativeEventTarget
+    ) {
+      var doc =
+        nativeEventTarget.window === nativeEventTarget
+          ? nativeEventTarget.document
+          : 9 === nativeEventTarget.nodeType
+            ? nativeEventTarget
+            : nativeEventTarget.ownerDocument;
+      mouseDown ||
+        null == activeElement ||
+        activeElement !== getActiveElement(doc) ||
+        ((doc = activeElement),
+        "selectionStart" in doc && hasSelectionCapabilities(doc)
+          ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })
+          : ((doc = (
+              (doc.ownerDocument && doc.ownerDocument.defaultView) ||
+              window
+            ).getSelection()),
+            (doc = {
+              anchorNode: doc.anchorNode,
+              anchorOffset: doc.anchorOffset,
+              focusNode: doc.focusNode,
+              focusOffset: doc.focusOffset
+            })),
+        (lastSelection && shallowEqual(lastSelection, doc)) ||
+          ((lastSelection = doc),
+          (doc = accumulateTwoPhaseListeners(activeElementInst, "onSelect")),
+          0 < doc.length &&
+            ((nativeEvent = new SyntheticEvent(
+              "onSelect",
+              "select",
+              null,
+              nativeEvent,
+              nativeEventTarget
+            )),
+            dispatchQueue.push({ event: nativeEvent, listeners: doc }),
+            (nativeEvent.target = activeElement))));
+    }
+    function makePrefixMap(styleProp, eventName) {
+      var prefixes = {};
+      prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
+      prefixes["Webkit" + styleProp] = "webkit" + eventName;
+      prefixes["Moz" + styleProp] = "moz" + eventName;
+      return prefixes;
+    }
+    function getVendorPrefixedEventName(eventName) {
+      if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];
+      if (!vendorPrefixes[eventName]) return eventName;
+      var prefixMap = vendorPrefixes[eventName],
+        styleProp;
+      for (styleProp in prefixMap)
+        if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)
+          return (prefixedEventNames[eventName] = prefixMap[styleProp]);
+      return eventName;
+    }
+    function registerSimpleEvent(domEventName, reactName) {
+      topLevelEventsToReactNames.set(domEventName, reactName);
+      registerTwoPhaseEvent(reactName, [domEventName]);
+    }
+    function createCapturedValueAtFiber(value, source) {
+      if ("object" === typeof value && null !== value) {
+        var existing = CapturedStacks.get(value);
+        if (void 0 !== existing) return existing;
+        source = {
+          value: value,
+          source: source,
+          stack: getStackByFiberInDevAndProd(source)
+        };
+        CapturedStacks.set(value, source);
+        return source;
+      }
+      return {
+        value: value,
+        source: source,
+        stack: getStackByFiberInDevAndProd(source)
+      };
+    }
+    function finishQueueingConcurrentUpdates() {
+      for (
+        var endIndex = concurrentQueuesIndex,
+          i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);
+        i < endIndex;
+
+      ) {
+        var fiber = concurrentQueues[i];
+        concurrentQueues[i++] = null;
+        var queue = concurrentQueues[i];
+        concurrentQueues[i++] = null;
+        var update = concurrentQueues[i];
+        concurrentQueues[i++] = null;
+        var lane = concurrentQueues[i];
+        concurrentQueues[i++] = null;
+        if (null !== queue && null !== update) {
+          var pending = queue.pending;
+          null === pending
+            ? (update.next = update)
+            : ((update.next = pending.next), (pending.next = update));
+          queue.pending = update;
+        }
+        0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);
+      }
+    }
+    function enqueueUpdate$1(fiber, queue, update, lane) {
+      concurrentQueues[concurrentQueuesIndex++] = fiber;
+      concurrentQueues[concurrentQueuesIndex++] = queue;
+      concurrentQueues[concurrentQueuesIndex++] = update;
+      concurrentQueues[concurrentQueuesIndex++] = lane;
+      concurrentlyUpdatedLanes |= lane;
+      fiber.lanes |= lane;
+      fiber = fiber.alternate;
+      null !== fiber && (fiber.lanes |= lane);
+    }
+    function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {
+      enqueueUpdate$1(fiber, queue, update, lane);
+      return getRootForUpdatedFiber(fiber);
+    }
+    function enqueueConcurrentRenderForLane(fiber, lane) {
+      enqueueUpdate$1(fiber, null, null, lane);
+      return getRootForUpdatedFiber(fiber);
+    }
+    function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {
+      sourceFiber.lanes |= lane;
+      var alternate = sourceFiber.alternate;
+      null !== alternate && (alternate.lanes |= lane);
+      for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )
+        (parent.childLanes |= lane),
+          (alternate = parent.alternate),
+          null !== alternate && (alternate.childLanes |= lane),
+          22 === parent.tag &&
+            ((sourceFiber = parent.stateNode),
+            null === sourceFiber ||
+              sourceFiber._visibility & OffscreenVisible ||
+              (isHidden = !0)),
+          (sourceFiber = parent),
+          (parent = parent.return);
+      return 3 === sourceFiber.tag
+        ? ((parent = sourceFiber.stateNode),
+          isHidden &&
+            null !== update &&
+            ((isHidden = 31 - clz32(lane)),
+            (sourceFiber = parent.hiddenUpdates),
+            (alternate = sourceFiber[isHidden]),
+            null === alternate
+              ? (sourceFiber[isHidden] = [update])
+              : alternate.push(update),
+            (update.lane = lane | 536870912)),
+          parent)
+        : null;
+    }
+    function getRootForUpdatedFiber(sourceFiber) {
+      if (nestedUpdateCount > NESTED_UPDATE_LIMIT)
+        throw (
+          ((nestedPassiveUpdateCount = nestedUpdateCount = 0),
+          (rootWithPassiveNestedUpdates = rootWithNestedUpdates = null),
+          Error(
+            "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops."
+          ))
+        );
+      nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT &&
+        ((nestedPassiveUpdateCount = 0),
+        (rootWithPassiveNestedUpdates = null),
+        console.error(
+          "Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render."
+        ));
+      null === sourceFiber.alternate &&
+        0 !== (sourceFiber.flags & 4098) &&
+        warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);
+      for (var node = sourceFiber, parent = node.return; null !== parent; )
+        null === node.alternate &&
+          0 !== (node.flags & 4098) &&
+          warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber),
+          (node = parent),
+          (parent = node.return);
+      return 3 === node.tag ? node.stateNode : null;
+    }
+    function resolveFunctionForHotReloading(type) {
+      if (null === resolveFamily) return type;
+      var family = resolveFamily(type);
+      return void 0 === family ? type : family.current;
+    }
+    function resolveForwardRefForHotReloading(type) {
+      if (null === resolveFamily) return type;
+      var family = resolveFamily(type);
+      return void 0 === family
+        ? null !== type &&
+          void 0 !== type &&
+          "function" === typeof type.render &&
+          ((family = resolveFunctionForHotReloading(type.render)),
+          type.render !== family)
+          ? ((family = { $$typeof: REACT_FORWARD_REF_TYPE, render: family }),
+            void 0 !== type.displayName &&
+              (family.displayName = type.displayName),
+            family)
+          : type
+        : family.current;
+    }
+    function isCompatibleFamilyForHotReloading(fiber, element) {
+      if (null === resolveFamily) return !1;
+      var prevType = fiber.elementType;
+      element = element.type;
+      var needsCompareFamilies = !1,
+        $$typeofNextType =
+          "object" === typeof element && null !== element
+            ? element.$$typeof
+            : null;
+      switch (fiber.tag) {
+        case 1:
+          "function" === typeof element && (needsCompareFamilies = !0);
+          break;
+        case 0:
+          "function" === typeof element
+            ? (needsCompareFamilies = !0)
+            : $$typeofNextType === REACT_LAZY_TYPE &&
+              (needsCompareFamilies = !0);
+          break;
+        case 11:
+          $$typeofNextType === REACT_FORWARD_REF_TYPE
+            ? (needsCompareFamilies = !0)
+            : $$typeofNextType === REACT_LAZY_TYPE &&
+              (needsCompareFamilies = !0);
+          break;
+        case 14:
+        case 15:
+          $$typeofNextType === REACT_MEMO_TYPE
+            ? (needsCompareFamilies = !0)
+            : $$typeofNextType === REACT_LAZY_TYPE &&
+              (needsCompareFamilies = !0);
+          break;
+        default:
+          return !1;
+      }
+      return needsCompareFamilies &&
+        ((fiber = resolveFamily(prevType)),
+        void 0 !== fiber && fiber === resolveFamily(element))
+        ? !0
+        : !1;
+    }
+    function markFailedErrorBoundaryForHotReloading(fiber) {
+      null !== resolveFamily &&
+        "function" === typeof WeakSet &&
+        (null === failedBoundaries && (failedBoundaries = new WeakSet()),
+        failedBoundaries.add(fiber));
+    }
+    function scheduleFibersWithFamiliesRecursively(
+      fiber,
+      updatedFamilies,
+      staleFamilies
+    ) {
+      var alternate = fiber.alternate,
+        child = fiber.child,
+        sibling = fiber.sibling,
+        tag = fiber.tag,
+        type = fiber.type,
+        candidateType = null;
+      switch (tag) {
+        case 0:
+        case 15:
+        case 1:
+          candidateType = type;
+          break;
+        case 11:
+          candidateType = type.render;
+      }
+      if (null === resolveFamily)
+        throw Error("Expected resolveFamily to be set during hot reload.");
+      var needsRender = !1;
+      type = !1;
+      null !== candidateType &&
+        ((candidateType = resolveFamily(candidateType)),
+        void 0 !== candidateType &&
+          (staleFamilies.has(candidateType)
+            ? (type = !0)
+            : updatedFamilies.has(candidateType) &&
+              (1 === tag ? (type = !0) : (needsRender = !0))));
+      null !== failedBoundaries &&
+        (failedBoundaries.has(fiber) ||
+          (null !== alternate && failedBoundaries.has(alternate))) &&
+        (type = !0);
+      type && (fiber._debugNeedsRemount = !0);
+      if (type || needsRender)
+        (alternate = enqueueConcurrentRenderForLane(fiber, 2)),
+          null !== alternate && scheduleUpdateOnFiber(alternate, fiber, 2);
+      null === child ||
+        type ||
+        scheduleFibersWithFamiliesRecursively(
+          child,
+          updatedFamilies,
+          staleFamilies
+        );
+      null !== sibling &&
+        scheduleFibersWithFamiliesRecursively(
+          sibling,
+          updatedFamilies,
+          staleFamilies
+        );
+    }
+    function FiberNode(tag, pendingProps, key, mode) {
+      this.tag = tag;
+      this.key = key;
+      this.sibling =
+        this.child =
+        this.return =
+        this.stateNode =
+        this.type =
+        this.elementType =
+          null;
+      this.index = 0;
+      this.refCleanup = this.ref = null;
+      this.pendingProps = pendingProps;
+      this.dependencies =
+        this.memoizedState =
+        this.updateQueue =
+        this.memoizedProps =
+          null;
+      this.mode = mode;
+      this.subtreeFlags = this.flags = 0;
+      this.deletions = null;
+      this.childLanes = this.lanes = 0;
+      this.alternate = null;
+      this.actualDuration = -0;
+      this.actualStartTime = -1.1;
+      this.treeBaseDuration = this.selfBaseDuration = -0;
+      this._debugTask =
+        this._debugStack =
+        this._debugOwner =
+        this._debugInfo =
+          null;
+      this._debugNeedsRemount = !1;
+      this._debugHookTypes = null;
+      hasBadMapPolyfill ||
+        "function" !== typeof Object.preventExtensions ||
+        Object.preventExtensions(this);
+    }
+    function shouldConstruct(Component) {
+      Component = Component.prototype;
+      return !(!Component || !Component.isReactComponent);
+    }
+    function createWorkInProgress(current, pendingProps) {
+      var workInProgress = current.alternate;
+      null === workInProgress
+        ? ((workInProgress = createFiber(
+            current.tag,
+            pendingProps,
+            current.key,
+            current.mode
+          )),
+          (workInProgress.elementType = current.elementType),
+          (workInProgress.type = current.type),
+          (workInProgress.stateNode = current.stateNode),
+          (workInProgress._debugOwner = current._debugOwner),
+          (workInProgress._debugStack = current._debugStack),
+          (workInProgress._debugTask = current._debugTask),
+          (workInProgress._debugHookTypes = current._debugHookTypes),
+          (workInProgress.alternate = current),
+          (current.alternate = workInProgress))
+        : ((workInProgress.pendingProps = pendingProps),
+          (workInProgress.type = current.type),
+          (workInProgress.flags = 0),
+          (workInProgress.subtreeFlags = 0),
+          (workInProgress.deletions = null),
+          (workInProgress.actualDuration = -0),
+          (workInProgress.actualStartTime = -1.1));
+      workInProgress.flags = current.flags & 65011712;
+      workInProgress.childLanes = current.childLanes;
+      workInProgress.lanes = current.lanes;
+      workInProgress.child = current.child;
+      workInProgress.memoizedProps = current.memoizedProps;
+      workInProgress.memoizedState = current.memoizedState;
+      workInProgress.updateQueue = current.updateQueue;
+      pendingProps = current.dependencies;
+      workInProgress.dependencies =
+        null === pendingProps
+          ? null
+          : {
+              lanes: pendingProps.lanes,
+              firstContext: pendingProps.firstContext,
+              _debugThenableState: pendingProps._debugThenableState
+            };
+      workInProgress.sibling = current.sibling;
+      workInProgress.index = current.index;
+      workInProgress.ref = current.ref;
+      workInProgress.refCleanup = current.refCleanup;
+      workInProgress.selfBaseDuration = current.selfBaseDuration;
+      workInProgress.treeBaseDuration = current.treeBaseDuration;
+      workInProgress._debugInfo = current._debugInfo;
+      workInProgress._debugNeedsRemount = current._debugNeedsRemount;
+      switch (workInProgress.tag) {
+        case 0:
+        case 15:
+          workInProgress.type = resolveFunctionForHotReloading(current.type);
+          break;
+        case 1:
+          workInProgress.type = resolveFunctionForHotReloading(current.type);
+          break;
+        case 11:
+          workInProgress.type = resolveForwardRefForHotReloading(current.type);
+      }
+      return workInProgress;
+    }
+    function resetWorkInProgress(workInProgress, renderLanes) {
+      workInProgress.flags &= 65011714;
+      var current = workInProgress.alternate;
+      null === current
+        ? ((workInProgress.childLanes = 0),
+          (workInProgress.lanes = renderLanes),
+          (workInProgress.child = null),
+          (workInProgress.subtreeFlags = 0),
+          (workInProgress.memoizedProps = null),
+          (workInProgress.memoizedState = null),
+          (workInProgress.updateQueue = null),
+          (workInProgress.dependencies = null),
+          (workInProgress.stateNode = null),
+          (workInProgress.selfBaseDuration = 0),
+          (workInProgress.treeBaseDuration = 0))
+        : ((workInProgress.childLanes = current.childLanes),
+          (workInProgress.lanes = current.lanes),
+          (workInProgress.child = current.child),
+          (workInProgress.subtreeFlags = 0),
+          (workInProgress.deletions = null),
+          (workInProgress.memoizedProps = current.memoizedProps),
+          (workInProgress.memoizedState = current.memoizedState),
+          (workInProgress.updateQueue = current.updateQueue),
+          (workInProgress.type = current.type),
+          (renderLanes = current.dependencies),
+          (workInProgress.dependencies =
+            null === renderLanes
+              ? null
+              : {
+                  lanes: renderLanes.lanes,
+                  firstContext: renderLanes.firstContext,
+                  _debugThenableState: renderLanes._debugThenableState
+                }),
+          (workInProgress.selfBaseDuration = current.selfBaseDuration),
+          (workInProgress.treeBaseDuration = current.treeBaseDuration));
+      return workInProgress;
+    }
+    function createFiberFromTypeAndProps(
+      type,
+      key,
+      pendingProps,
+      owner,
+      mode,
+      lanes
+    ) {
+      var fiberTag = 0,
+        resolvedType = type;
+      if ("function" === typeof type)
+        shouldConstruct(type) && (fiberTag = 1),
+          (resolvedType = resolveFunctionForHotReloading(resolvedType));
+      else if ("string" === typeof type)
+        (fiberTag = getHostContext()),
+          (fiberTag = isHostHoistableType(type, pendingProps, fiberTag)
+            ? 26
+            : "html" === type || "head" === type || "body" === type
+              ? 27
+              : 5);
+      else
+        a: switch (type) {
+          case REACT_ACTIVITY_TYPE:
+            return (
+              (key = createFiber(31, pendingProps, key, mode)),
+              (key.elementType = REACT_ACTIVITY_TYPE),
+              (key.lanes = lanes),
+              key
+            );
+          case REACT_FRAGMENT_TYPE:
+            return createFiberFromFragment(
+              pendingProps.children,
+              mode,
+              lanes,
+              key
+            );
+          case REACT_STRICT_MODE_TYPE:
+            fiberTag = 8;
+            mode |= StrictLegacyMode;
+            mode |= StrictEffectsMode;
+            break;
+          case REACT_PROFILER_TYPE:
+            return (
+              (type = pendingProps),
+              (owner = mode),
+              "string" !== typeof type.id &&
+                console.error(
+                  'Profiler must specify an "id" of type `string` as a prop. Received the type `%s` instead.',
+                  typeof type.id
+                ),
+              (key = createFiber(12, type, key, owner | ProfileMode)),
+              (key.elementType = REACT_PROFILER_TYPE),
+              (key.lanes = lanes),
+              (key.stateNode = { effectDuration: 0, passiveEffectDuration: 0 }),
+              key
+            );
+          case REACT_SUSPENSE_TYPE:
+            return (
+              (key = createFiber(13, pendingProps, key, mode)),
+              (key.elementType = REACT_SUSPENSE_TYPE),
+              (key.lanes = lanes),
+              key
+            );
+          case REACT_SUSPENSE_LIST_TYPE:
+            return (
+              (key = createFiber(19, pendingProps, key, mode)),
+              (key.elementType = REACT_SUSPENSE_LIST_TYPE),
+              (key.lanes = lanes),
+              key
+            );
+          default:
+            if ("object" === typeof type && null !== type)
+              switch (type.$$typeof) {
+                case REACT_PROVIDER_TYPE:
+                case REACT_CONTEXT_TYPE:
+                  fiberTag = 10;
+                  break a;
+                case REACT_CONSUMER_TYPE:
+                  fiberTag = 9;
+                  break a;
+                case REACT_FORWARD_REF_TYPE:
+                  fiberTag = 11;
+                  resolvedType = resolveForwardRefForHotReloading(resolvedType);
+                  break a;
+                case REACT_MEMO_TYPE:
+                  fiberTag = 14;
+                  break a;
+                case REACT_LAZY_TYPE:
+                  fiberTag = 16;
+                  resolvedType = null;
+                  break a;
+              }
+            resolvedType = "";
+            if (
+              void 0 === type ||
+              ("object" === typeof type &&
+                null !== type &&
+                0 === Object.keys(type).length)
+            )
+              resolvedType +=
+                " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
+            null === type
+              ? (pendingProps = "null")
+              : isArrayImpl(type)
+                ? (pendingProps = "array")
+                : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE
+                  ? ((pendingProps =
+                      "<" +
+                      (getComponentNameFromType(type.type) || "Unknown") +
+                      " />"),
+                    (resolvedType =
+                      " Did you accidentally export a JSX literal instead of a component?"))
+                  : (pendingProps = typeof type);
+            (fiberTag = owner ? getComponentNameFromOwner(owner) : null) &&
+              (resolvedType +=
+                "\n\nCheck the render method of `" + fiberTag + "`.");
+            fiberTag = 29;
+            pendingProps = Error(
+              "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+                (pendingProps + "." + resolvedType)
+            );
+            resolvedType = null;
+        }
+      key = createFiber(fiberTag, pendingProps, key, mode);
+      key.elementType = type;
+      key.type = resolvedType;
+      key.lanes = lanes;
+      key._debugOwner = owner;
+      return key;
+    }
+    function createFiberFromElement(element, mode, lanes) {
+      mode = createFiberFromTypeAndProps(
+        element.type,
+        element.key,
+        element.props,
+        element._owner,
+        mode,
+        lanes
+      );
+      mode._debugOwner = element._owner;
+      mode._debugStack = element._debugStack;
+      mode._debugTask = element._debugTask;
+      return mode;
+    }
+    function createFiberFromFragment(elements, mode, lanes, key) {
+      elements = createFiber(7, elements, key, mode);
+      elements.lanes = lanes;
+      return elements;
+    }
+    function createFiberFromText(content, mode, lanes) {
+      content = createFiber(6, content, null, mode);
+      content.lanes = lanes;
+      return content;
+    }
+    function createFiberFromPortal(portal, mode, lanes) {
+      mode = createFiber(
+        4,
+        null !== portal.children ? portal.children : [],
+        portal.key,
+        mode
+      );
+      mode.lanes = lanes;
+      mode.stateNode = {
+        containerInfo: portal.containerInfo,
+        pendingChildren: null,
+        implementation: portal.implementation
+      };
+      return mode;
+    }
+    function pushTreeFork(workInProgress, totalChildren) {
+      warnIfNotHydrating();
+      forkStack[forkStackIndex++] = treeForkCount;
+      forkStack[forkStackIndex++] = treeForkProvider;
+      treeForkProvider = workInProgress;
+      treeForkCount = totalChildren;
+    }
+    function pushTreeId(workInProgress, totalChildren, index) {
+      warnIfNotHydrating();
+      idStack[idStackIndex++] = treeContextId;
+      idStack[idStackIndex++] = treeContextOverflow;
+      idStack[idStackIndex++] = treeContextProvider;
+      treeContextProvider = workInProgress;
+      var baseIdWithLeadingBit = treeContextId;
+      workInProgress = treeContextOverflow;
+      var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+      baseIdWithLeadingBit &= ~(1 << baseLength);
+      index += 1;
+      var length = 32 - clz32(totalChildren) + baseLength;
+      if (30 < length) {
+        var numberOfOverflowBits = baseLength - (baseLength % 5);
+        length = (
+          baseIdWithLeadingBit &
+          ((1 << numberOfOverflowBits) - 1)
+        ).toString(32);
+        baseIdWithLeadingBit >>= numberOfOverflowBits;
+        baseLength -= numberOfOverflowBits;
+        treeContextId =
+          (1 << (32 - clz32(totalChildren) + baseLength)) |
+          (index << baseLength) |
+          baseIdWithLeadingBit;
+        treeContextOverflow = length + workInProgress;
+      } else
+        (treeContextId =
+          (1 << length) | (index << baseLength) | baseIdWithLeadingBit),
+          (treeContextOverflow = workInProgress);
+    }
+    function pushMaterializedTreeId(workInProgress) {
+      warnIfNotHydrating();
+      null !== workInProgress.return &&
+        (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));
+    }
+    function popTreeContext(workInProgress) {
+      for (; workInProgress === treeForkProvider; )
+        (treeForkProvider = forkStack[--forkStackIndex]),
+          (forkStack[forkStackIndex] = null),
+          (treeForkCount = forkStack[--forkStackIndex]),
+          (forkStack[forkStackIndex] = null);
+      for (; workInProgress === treeContextProvider; )
+        (treeContextProvider = idStack[--idStackIndex]),
+          (idStack[idStackIndex] = null),
+          (treeContextOverflow = idStack[--idStackIndex]),
+          (idStack[idStackIndex] = null),
+          (treeContextId = idStack[--idStackIndex]),
+          (idStack[idStackIndex] = null);
+    }
+    function warnIfNotHydrating() {
+      isHydrating ||
+        console.error(
+          "Expected to be hydrating. This is a bug in React. Please file an issue."
+        );
+    }
+    function buildHydrationDiffNode(fiber, distanceFromLeaf) {
+      if (null === fiber.return) {
+        if (null === hydrationDiffRootDEV)
+          hydrationDiffRootDEV = {
+            fiber: fiber,
+            children: [],
+            serverProps: void 0,
+            serverTail: [],
+            distanceFromLeaf: distanceFromLeaf
+          };
+        else {
+          if (hydrationDiffRootDEV.fiber !== fiber)
+            throw Error(
+              "Saw multiple hydration diff roots in a pass. This is a bug in React."
+            );
+          hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf &&
+            (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf);
+        }
+        return hydrationDiffRootDEV;
+      }
+      var siblings = buildHydrationDiffNode(
+        fiber.return,
+        distanceFromLeaf + 1
+      ).children;
+      if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber)
+        return (
+          (siblings = siblings[siblings.length - 1]),
+          siblings.distanceFromLeaf > distanceFromLeaf &&
+            (siblings.distanceFromLeaf = distanceFromLeaf),
+          siblings
+        );
+      distanceFromLeaf = {
+        fiber: fiber,
+        children: [],
+        serverProps: void 0,
+        serverTail: [],
+        distanceFromLeaf: distanceFromLeaf
+      };
+      siblings.push(distanceFromLeaf);
+      return distanceFromLeaf;
+    }
+    function warnNonHydratedInstance(fiber, rejectedCandidate) {
+      didSuspendOrErrorDEV ||
+        ((fiber = buildHydrationDiffNode(fiber, 0)),
+        (fiber.serverProps = null),
+        null !== rejectedCandidate &&
+          ((rejectedCandidate =
+            describeHydratableInstanceForDevWarnings(rejectedCandidate)),
+          fiber.serverTail.push(rejectedCandidate)));
+    }
+    function throwOnHydrationMismatch(fiber) {
+      var diff = "",
+        diffRoot = hydrationDiffRootDEV;
+      null !== diffRoot &&
+        ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot)));
+      queueHydrationError(
+        createCapturedValueAtFiber(
+          Error(
+            "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" +
+              diff
+          ),
+          fiber
+        )
+      );
+      throw HydrationMismatchException;
+    }
+    function prepareToHydrateHostInstance(fiber) {
+      var didHydrate = fiber.stateNode;
+      var type = fiber.type,
+        props = fiber.memoizedProps;
+      didHydrate[internalInstanceKey] = fiber;
+      didHydrate[internalPropsKey] = props;
+      validatePropertiesInDevelopment(type, props);
+      switch (type) {
+        case "dialog":
+          listenToNonDelegatedEvent("cancel", didHydrate);
+          listenToNonDelegatedEvent("close", didHydrate);
+          break;
+        case "iframe":
+        case "object":
+        case "embed":
+          listenToNonDelegatedEvent("load", didHydrate);
+          break;
+        case "video":
+        case "audio":
+          for (type = 0; type < mediaEventTypes.length; type++)
+            listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate);
+          break;
+        case "source":
+          listenToNonDelegatedEvent("error", didHydrate);
+          break;
+        case "img":
+        case "image":
+        case "link":
+          listenToNonDelegatedEvent("error", didHydrate);
+          listenToNonDelegatedEvent("load", didHydrate);
+          break;
+        case "details":
+          listenToNonDelegatedEvent("toggle", didHydrate);
+          break;
+        case "input":
+          checkControlledValueProps("input", props);
+          listenToNonDelegatedEvent("invalid", didHydrate);
+          validateInputProps(didHydrate, props);
+          initInput(
+            didHydrate,
+            props.value,
+            props.defaultValue,
+            props.checked,
+            props.defaultChecked,
+            props.type,
+            props.name,
+            !0
+          );
+          track(didHydrate);
+          break;
+        case "option":
+          validateOptionProps(didHydrate, props);
+          break;
+        case "select":
+          checkControlledValueProps("select", props);
+          listenToNonDelegatedEvent("invalid", didHydrate);
+          validateSelectProps(didHydrate, props);
+          break;
+        case "textarea":
+          checkControlledValueProps("textarea", props),
+            listenToNonDelegatedEvent("invalid", didHydrate),
+            validateTextareaProps(didHydrate, props),
+            initTextarea(
+              didHydrate,
+              props.value,
+              props.defaultValue,
+              props.children
+            ),
+            track(didHydrate);
+      }
+      type = props.children;
+      ("string" !== typeof type &&
+        "number" !== typeof type &&
+        "bigint" !== typeof type) ||
+      didHydrate.textContent === "" + type ||
+      !0 === props.suppressHydrationWarning ||
+      checkForUnmatchedText(didHydrate.textContent, type)
+        ? (null != props.popover &&
+            (listenToNonDelegatedEvent("beforetoggle", didHydrate),
+            listenToNonDelegatedEvent("toggle", didHydrate)),
+          null != props.onScroll &&
+            listenToNonDelegatedEvent("scroll", didHydrate),
+          null != props.onScrollEnd &&
+            listenToNonDelegatedEvent("scrollend", didHydrate),
+          null != props.onClick && (didHydrate.onclick = noop$1),
+          (didHydrate = !0))
+        : (didHydrate = !1);
+      didHydrate || throwOnHydrationMismatch(fiber);
+    }
+    function popToNextHostParent(fiber) {
+      for (hydrationParentFiber = fiber.return; hydrationParentFiber; )
+        switch (hydrationParentFiber.tag) {
+          case 5:
+          case 13:
+            rootOrSingletonContext = !1;
+            return;
+          case 27:
+          case 3:
+            rootOrSingletonContext = !0;
+            return;
+          default:
+            hydrationParentFiber = hydrationParentFiber.return;
+        }
+    }
+    function popHydrationState(fiber) {
+      if (fiber !== hydrationParentFiber) return !1;
+      if (!isHydrating)
+        return popToNextHostParent(fiber), (isHydrating = !0), !1;
+      var tag = fiber.tag,
+        JSCompiler_temp;
+      if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {
+        if ((JSCompiler_temp = 5 === tag))
+          (JSCompiler_temp = fiber.type),
+            (JSCompiler_temp =
+              !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) ||
+              shouldSetTextContent(fiber.type, fiber.memoizedProps));
+        JSCompiler_temp = !JSCompiler_temp;
+      }
+      if (JSCompiler_temp && nextHydratableInstance) {
+        for (JSCompiler_temp = nextHydratableInstance; JSCompiler_temp; ) {
+          var diffNode = buildHydrationDiffNode(fiber, 0),
+            description =
+              describeHydratableInstanceForDevWarnings(JSCompiler_temp);
+          diffNode.serverTail.push(description);
+          JSCompiler_temp =
+            "Suspense" === description.type
+              ? getNextHydratableInstanceAfterSuspenseInstance(JSCompiler_temp)
+              : getNextHydratable(JSCompiler_temp.nextSibling);
+        }
+        throwOnHydrationMismatch(fiber);
+      }
+      popToNextHostParent(fiber);
+      if (13 === tag) {
+        fiber = fiber.memoizedState;
+        fiber = null !== fiber ? fiber.dehydrated : null;
+        if (!fiber)
+          throw Error(
+            "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue."
+          );
+        nextHydratableInstance =
+          getNextHydratableInstanceAfterSuspenseInstance(fiber);
+      } else
+        27 === tag
+          ? ((tag = nextHydratableInstance),
+            isSingletonScope(fiber.type)
+              ? ((fiber = previousHydratableOnEnteringScopedSingleton),
+                (previousHydratableOnEnteringScopedSingleton = null),
+                (nextHydratableInstance = fiber))
+              : (nextHydratableInstance = tag))
+          : (nextHydratableInstance = hydrationParentFiber
+              ? getNextHydratable(fiber.stateNode.nextSibling)
+              : null);
+      return !0;
+    }
+    function resetHydrationState() {
+      nextHydratableInstance = hydrationParentFiber = null;
+      didSuspendOrErrorDEV = isHydrating = !1;
+    }
+    function upgradeHydrationErrorsToRecoverable() {
+      var queuedErrors = hydrationErrors;
+      null !== queuedErrors &&
+        (null === workInProgressRootRecoverableErrors
+          ? (workInProgressRootRecoverableErrors = queuedErrors)
+          : workInProgressRootRecoverableErrors.push.apply(
+              workInProgressRootRecoverableErrors,
+              queuedErrors
+            ),
+        (hydrationErrors = null));
+      return queuedErrors;
+    }
+    function queueHydrationError(error) {
+      null === hydrationErrors
+        ? (hydrationErrors = [error])
+        : hydrationErrors.push(error);
+    }
+    function emitPendingHydrationWarnings() {
+      var diffRoot = hydrationDiffRootDEV;
+      if (null !== diffRoot) {
+        hydrationDiffRootDEV = null;
+        for (var diff = describeDiff(diffRoot); 0 < diffRoot.children.length; )
+          diffRoot = diffRoot.children[0];
+        runWithFiberInDEV(diffRoot.fiber, function () {
+          console.error(
+            "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s",
+            "https://react.dev/link/hydration-mismatch",
+            diff
+          );
+        });
+      }
+    }
+    function resetContextDependencies() {
+      lastContextDependency = currentlyRenderingFiber$1 = null;
+      isDisallowedContextReadInDEV = !1;
+    }
+    function pushProvider(providerFiber, context, nextValue) {
+      push(valueCursor, context._currentValue, providerFiber);
+      context._currentValue = nextValue;
+      push(rendererCursorDEV, context._currentRenderer, providerFiber);
+      void 0 !== context._currentRenderer &&
+        null !== context._currentRenderer &&
+        context._currentRenderer !== rendererSigil &&
+        console.error(
+          "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+        );
+      context._currentRenderer = rendererSigil;
+    }
+    function popProvider(context, providerFiber) {
+      context._currentValue = valueCursor.current;
+      var currentRenderer = rendererCursorDEV.current;
+      pop(rendererCursorDEV, providerFiber);
+      context._currentRenderer = currentRenderer;
+      pop(valueCursor, providerFiber);
+    }
+    function scheduleContextWorkOnParentPath(
+      parent,
+      renderLanes,
+      propagationRoot
+    ) {
+      for (; null !== parent; ) {
+        var alternate = parent.alternate;
+        (parent.childLanes & renderLanes) !== renderLanes
+          ? ((parent.childLanes |= renderLanes),
+            null !== alternate && (alternate.childLanes |= renderLanes))
+          : null !== alternate &&
+            (alternate.childLanes & renderLanes) !== renderLanes &&
+            (alternate.childLanes |= renderLanes);
+        if (parent === propagationRoot) break;
+        parent = parent.return;
+      }
+      parent !== propagationRoot &&
+        console.error(
+          "Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue."
+        );
+    }
+    function propagateContextChanges(
+      workInProgress,
+      contexts,
+      renderLanes,
+      forcePropagateEntireTree
+    ) {
+      var fiber = workInProgress.child;
+      null !== fiber && (fiber.return = workInProgress);
+      for (; null !== fiber; ) {
+        var list = fiber.dependencies;
+        if (null !== list) {
+          var nextFiber = fiber.child;
+          list = list.firstContext;
+          a: for (; null !== list; ) {
+            var dependency = list;
+            list = fiber;
+            for (var i = 0; i < contexts.length; i++)
+              if (dependency.context === contexts[i]) {
+                list.lanes |= renderLanes;
+                dependency = list.alternate;
+                null !== dependency && (dependency.lanes |= renderLanes);
+                scheduleContextWorkOnParentPath(
+                  list.return,
+                  renderLanes,
+                  workInProgress
+                );
+                forcePropagateEntireTree || (nextFiber = null);
+                break a;
+              }
+            list = dependency.next;
+          }
+        } else if (18 === fiber.tag) {
+          nextFiber = fiber.return;
+          if (null === nextFiber)
+            throw Error(
+              "We just came from a parent so we must have had a parent. This is a bug in React."
+            );
+          nextFiber.lanes |= renderLanes;
+          list = nextFiber.alternate;
+          null !== list && (list.lanes |= renderLanes);
+          scheduleContextWorkOnParentPath(
+            nextFiber,
+            renderLanes,
+            workInProgress
+          );
+          nextFiber = null;
+        } else nextFiber = fiber.child;
+        if (null !== nextFiber) nextFiber.return = fiber;
+        else
+          for (nextFiber = fiber; null !== nextFiber; ) {
+            if (nextFiber === workInProgress) {
+              nextFiber = null;
+              break;
+            }
+            fiber = nextFiber.sibling;
+            if (null !== fiber) {
+              fiber.return = nextFiber.return;
+              nextFiber = fiber;
+              break;
+            }
+            nextFiber = nextFiber.return;
+          }
+        fiber = nextFiber;
+      }
+    }
+    function propagateParentContextChanges(
+      current,
+      workInProgress,
+      renderLanes,
+      forcePropagateEntireTree
+    ) {
+      current = null;
+      for (
+        var parent = workInProgress, isInsidePropagationBailout = !1;
+        null !== parent;
+
+      ) {
+        if (!isInsidePropagationBailout)
+          if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;
+          else if (0 !== (parent.flags & 262144)) break;
+        if (10 === parent.tag) {
+          var currentParent = parent.alternate;
+          if (null === currentParent)
+            throw Error("Should have a current fiber. This is a bug in React.");
+          currentParent = currentParent.memoizedProps;
+          if (null !== currentParent) {
+            var context = parent.type;
+            objectIs(parent.pendingProps.value, currentParent.value) ||
+              (null !== current
+                ? current.push(context)
+                : (current = [context]));
+          }
+        } else if (parent === hostTransitionProviderCursor.current) {
+          currentParent = parent.alternate;
+          if (null === currentParent)
+            throw Error("Should have a current fiber. This is a bug in React.");
+          currentParent.memoizedState.memoizedState !==
+            parent.memoizedState.memoizedState &&
+            (null !== current
+              ? current.push(HostTransitionContext)
+              : (current = [HostTransitionContext]));
+        }
+        parent = parent.return;
+      }
+      null !== current &&
+        propagateContextChanges(
+          workInProgress,
+          current,
+          renderLanes,
+          forcePropagateEntireTree
+        );
+      workInProgress.flags |= 262144;
+    }
+    function checkIfContextChanged(currentDependencies) {
+      for (
+        currentDependencies = currentDependencies.firstContext;
+        null !== currentDependencies;
+
+      ) {
+        if (
+          !objectIs(
+            currentDependencies.context._currentValue,
+            currentDependencies.memoizedValue
+          )
+        )
+          return !0;
+        currentDependencies = currentDependencies.next;
+      }
+      return !1;
+    }
+    function prepareToReadContext(workInProgress) {
+      currentlyRenderingFiber$1 = workInProgress;
+      lastContextDependency = null;
+      workInProgress = workInProgress.dependencies;
+      null !== workInProgress && (workInProgress.firstContext = null);
+    }
+    function readContext(context) {
+      isDisallowedContextReadInDEV &&
+        console.error(
+          "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+        );
+      return readContextForConsumer(currentlyRenderingFiber$1, context);
+    }
+    function readContextDuringReconciliation(consumer, context) {
+      null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);
+      return readContextForConsumer(consumer, context);
+    }
+    function readContextForConsumer(consumer, context) {
+      var value = context._currentValue;
+      context = { context: context, memoizedValue: value, next: null };
+      if (null === lastContextDependency) {
+        if (null === consumer)
+          throw Error(
+            "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+          );
+        lastContextDependency = context;
+        consumer.dependencies = {
+          lanes: 0,
+          firstContext: context,
+          _debugThenableState: null
+        };
+        consumer.flags |= 524288;
+      } else lastContextDependency = lastContextDependency.next = context;
+      return value;
+    }
+    function createCache() {
+      return {
+        controller: new AbortControllerLocal(),
+        data: new Map(),
+        refCount: 0
+      };
+    }
+    function retainCache(cache) {
+      cache.controller.signal.aborted &&
+        console.warn(
+          "A cache instance was retained after it was already freed. This likely indicates a bug in React."
+        );
+      cache.refCount++;
+    }
+    function releaseCache(cache) {
+      cache.refCount--;
+      0 > cache.refCount &&
+        console.warn(
+          "A cache instance was released after it was already freed. This likely indicates a bug in React."
+        );
+      0 === cache.refCount &&
+        scheduleCallback$2(NormalPriority, function () {
+          cache.controller.abort();
+        });
+    }
+    function pushNestedEffectDurations() {
+      var prevEffectDuration = profilerEffectDuration;
+      profilerEffectDuration = 0;
+      return prevEffectDuration;
+    }
+    function popNestedEffectDurations(prevEffectDuration) {
+      var elapsedTime = profilerEffectDuration;
+      profilerEffectDuration = prevEffectDuration;
+      return elapsedTime;
+    }
+    function bubbleNestedEffectDurations(prevEffectDuration) {
+      var elapsedTime = profilerEffectDuration;
+      profilerEffectDuration += prevEffectDuration;
+      return elapsedTime;
+    }
+    function startProfilerTimer(fiber) {
+      profilerStartTime = now();
+      0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime);
+    }
+    function stopProfilerTimerIfRunningAndRecordDuration(fiber) {
+      if (0 <= profilerStartTime) {
+        var elapsedTime = now() - profilerStartTime;
+        fiber.actualDuration += elapsedTime;
+        fiber.selfBaseDuration = elapsedTime;
+        profilerStartTime = -1;
+      }
+    }
+    function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) {
+      if (0 <= profilerStartTime) {
+        var elapsedTime = now() - profilerStartTime;
+        fiber.actualDuration += elapsedTime;
+        profilerStartTime = -1;
+      }
+    }
+    function recordEffectDuration() {
+      if (0 <= profilerStartTime) {
+        var elapsedTime = now() - profilerStartTime;
+        profilerStartTime = -1;
+        profilerEffectDuration += elapsedTime;
+      }
+    }
+    function startEffectTimer() {
+      profilerStartTime = now();
+    }
+    function transferActualDuration(fiber) {
+      for (var child = fiber.child; child; )
+        (fiber.actualDuration += child.actualDuration), (child = child.sibling);
+    }
+    function entangleAsyncAction(transition, thenable) {
+      if (null === currentEntangledListeners) {
+        var entangledListeners = (currentEntangledListeners = []);
+        currentEntangledPendingCount = 0;
+        currentEntangledLane = requestTransitionLane();
+        currentEntangledActionThenable = {
+          status: "pending",
+          value: void 0,
+          then: function (resolve) {
+            entangledListeners.push(resolve);
+          }
+        };
+      }
+      currentEntangledPendingCount++;
+      thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);
+      return thenable;
+    }
+    function pingEngtangledActionScope() {
+      if (
+        0 === --currentEntangledPendingCount &&
+        null !== currentEntangledListeners
+      ) {
+        null !== currentEntangledActionThenable &&
+          (currentEntangledActionThenable.status = "fulfilled");
+        var listeners = currentEntangledListeners;
+        currentEntangledListeners = null;
+        currentEntangledLane = 0;
+        currentEntangledActionThenable = null;
+        for (var i = 0; i < listeners.length; i++) (0, listeners[i])();
+      }
+    }
+    function chainThenableValue(thenable, result) {
+      var listeners = [],
+        thenableWithOverride = {
+          status: "pending",
+          value: null,
+          reason: null,
+          then: function (resolve) {
+            listeners.push(resolve);
+          }
+        };
+      thenable.then(
+        function () {
+          thenableWithOverride.status = "fulfilled";
+          thenableWithOverride.value = result;
+          for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);
+        },
+        function (error) {
+          thenableWithOverride.status = "rejected";
+          thenableWithOverride.reason = error;
+          for (error = 0; error < listeners.length; error++)
+            (0, listeners[error])(void 0);
+        }
+      );
+      return thenableWithOverride;
+    }
+    function peekCacheFromPool() {
+      var cacheResumedFromPreviousRender = resumedCache.current;
+      return null !== cacheResumedFromPreviousRender
+        ? cacheResumedFromPreviousRender
+        : workInProgressRoot.pooledCache;
+    }
+    function pushTransition(offscreenWorkInProgress, prevCachePool) {
+      null === prevCachePool
+        ? push(resumedCache, resumedCache.current, offscreenWorkInProgress)
+        : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress);
+    }
+    function getSuspendedCache() {
+      var cacheFromPool = peekCacheFromPool();
+      return null === cacheFromPool
+        ? null
+        : { parent: CacheContext._currentValue, pool: cacheFromPool };
+    }
+    function createThenableState() {
+      return { didWarnAboutUncachedPromise: !1, thenables: [] };
+    }
+    function isThenableResolved(thenable) {
+      thenable = thenable.status;
+      return "fulfilled" === thenable || "rejected" === thenable;
+    }
+    function noop$3() {}
+    function trackUsedThenable(thenableState, thenable, index) {
+      null !== ReactSharedInternals.actQueue &&
+        (ReactSharedInternals.didUsePromise = !0);
+      var trackedThenables = thenableState.thenables;
+      index = trackedThenables[index];
+      void 0 === index
+        ? trackedThenables.push(thenable)
+        : index !== thenable &&
+          (thenableState.didWarnAboutUncachedPromise ||
+            ((thenableState.didWarnAboutUncachedPromise = !0),
+            console.error(
+              "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework."
+            )),
+          thenable.then(noop$3, noop$3),
+          (thenable = index));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw (
+            ((thenableState = thenable.reason),
+            checkIfUseWrappedInAsyncCatch(thenableState),
+            thenableState)
+          );
+        default:
+          if ("string" === typeof thenable.status)
+            thenable.then(noop$3, noop$3);
+          else {
+            thenableState = workInProgressRoot;
+            if (
+              null !== thenableState &&
+              100 < thenableState.shellSuspendCounter
+            )
+              throw Error(
+                "An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server."
+              );
+            thenableState = thenable;
+            thenableState.status = "pending";
+            thenableState.then(
+              function (fulfilledValue) {
+                if ("pending" === thenable.status) {
+                  var fulfilledThenable = thenable;
+                  fulfilledThenable.status = "fulfilled";
+                  fulfilledThenable.value = fulfilledValue;
+                }
+              },
+              function (error) {
+                if ("pending" === thenable.status) {
+                  var rejectedThenable = thenable;
+                  rejectedThenable.status = "rejected";
+                  rejectedThenable.reason = error;
+                }
+              }
+            );
+          }
+          switch (thenable.status) {
+            case "fulfilled":
+              return thenable.value;
+            case "rejected":
+              throw (
+                ((thenableState = thenable.reason),
+                checkIfUseWrappedInAsyncCatch(thenableState),
+                thenableState)
+              );
+          }
+          suspendedThenable = thenable;
+          needsToResetSuspendedThenableDEV = !0;
+          throw SuspenseException;
+      }
+    }
+    function getSuspendedThenable() {
+      if (null === suspendedThenable)
+        throw Error(
+          "Expected a suspended thenable. This is a bug in React. Please file an issue."
+        );
+      var thenable = suspendedThenable;
+      suspendedThenable = null;
+      needsToResetSuspendedThenableDEV = !1;
+      return thenable;
+    }
+    function checkIfUseWrappedInAsyncCatch(rejectedReason) {
+      if (
+        rejectedReason === SuspenseException ||
+        rejectedReason === SuspenseActionException
+      )
+        throw Error(
+          "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server."
+        );
+    }
+    function initializeUpdateQueue(fiber) {
+      fiber.updateQueue = {
+        baseState: fiber.memoizedState,
+        firstBaseUpdate: null,
+        lastBaseUpdate: null,
+        shared: { pending: null, lanes: 0, hiddenCallbacks: null },
+        callbacks: null
+      };
+    }
+    function cloneUpdateQueue(current, workInProgress) {
+      current = current.updateQueue;
+      workInProgress.updateQueue === current &&
+        (workInProgress.updateQueue = {
+          baseState: current.baseState,
+          firstBaseUpdate: current.firstBaseUpdate,
+          lastBaseUpdate: current.lastBaseUpdate,
+          shared: current.shared,
+          callbacks: null
+        });
+    }
+    function createUpdate(lane) {
+      return {
+        lane: lane,
+        tag: UpdateState,
+        payload: null,
+        callback: null,
+        next: null
+      };
+    }
+    function enqueueUpdate(fiber, update, lane) {
+      var updateQueue = fiber.updateQueue;
+      if (null === updateQueue) return null;
+      updateQueue = updateQueue.shared;
+      if (
+        currentlyProcessingQueue === updateQueue &&
+        !didWarnUpdateInsideUpdate
+      ) {
+        var componentName = getComponentNameFromFiber(fiber);
+        console.error(
+          "An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.\n\nPlease update the following component: %s",
+          componentName
+        );
+        didWarnUpdateInsideUpdate = !0;
+      }
+      if ((executionContext & RenderContext) !== NoContext)
+        return (
+          (componentName = updateQueue.pending),
+          null === componentName
+            ? (update.next = update)
+            : ((update.next = componentName.next),
+              (componentName.next = update)),
+          (updateQueue.pending = update),
+          (update = getRootForUpdatedFiber(fiber)),
+          markUpdateLaneFromFiberToRoot(fiber, null, lane),
+          update
+        );
+      enqueueUpdate$1(fiber, updateQueue, update, lane);
+      return getRootForUpdatedFiber(fiber);
+    }
+    function entangleTransitions(root, fiber, lane) {
+      fiber = fiber.updateQueue;
+      if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {
+        var queueLanes = fiber.lanes;
+        queueLanes &= root.pendingLanes;
+        lane |= queueLanes;
+        fiber.lanes = lane;
+        markRootEntangled(root, lane);
+      }
+    }
+    function enqueueCapturedUpdate(workInProgress, capturedUpdate) {
+      var queue = workInProgress.updateQueue,
+        current = workInProgress.alternate;
+      if (
+        null !== current &&
+        ((current = current.updateQueue), queue === current)
+      ) {
+        var newFirst = null,
+          newLast = null;
+        queue = queue.firstBaseUpdate;
+        if (null !== queue) {
+          do {
+            var clone = {
+              lane: queue.lane,
+              tag: queue.tag,
+              payload: queue.payload,
+              callback: null,
+              next: null
+            };
+            null === newLast
+              ? (newFirst = newLast = clone)
+              : (newLast = newLast.next = clone);
+            queue = queue.next;
+          } while (null !== queue);
+          null === newLast
+            ? (newFirst = newLast = capturedUpdate)
+            : (newLast = newLast.next = capturedUpdate);
+        } else newFirst = newLast = capturedUpdate;
+        queue = {
+          baseState: current.baseState,
+          firstBaseUpdate: newFirst,
+          lastBaseUpdate: newLast,
+          shared: current.shared,
+          callbacks: current.callbacks
+        };
+        workInProgress.updateQueue = queue;
+        return;
+      }
+      workInProgress = queue.lastBaseUpdate;
+      null === workInProgress
+        ? (queue.firstBaseUpdate = capturedUpdate)
+        : (workInProgress.next = capturedUpdate);
+      queue.lastBaseUpdate = capturedUpdate;
+    }
+    function suspendIfUpdateReadFromEntangledAsyncAction() {
+      if (didReadFromEntangledAsyncAction) {
+        var entangledActionThenable = currentEntangledActionThenable;
+        if (null !== entangledActionThenable) throw entangledActionThenable;
+      }
+    }
+    function processUpdateQueue(
+      workInProgress,
+      props,
+      instance$jscomp$0,
+      renderLanes
+    ) {
+      didReadFromEntangledAsyncAction = !1;
+      var queue = workInProgress.updateQueue;
+      hasForceUpdate = !1;
+      currentlyProcessingQueue = queue.shared;
+      var firstBaseUpdate = queue.firstBaseUpdate,
+        lastBaseUpdate = queue.lastBaseUpdate,
+        pendingQueue = queue.shared.pending;
+      if (null !== pendingQueue) {
+        queue.shared.pending = null;
+        var lastPendingUpdate = pendingQueue,
+          firstPendingUpdate = lastPendingUpdate.next;
+        lastPendingUpdate.next = null;
+        null === lastBaseUpdate
+          ? (firstBaseUpdate = firstPendingUpdate)
+          : (lastBaseUpdate.next = firstPendingUpdate);
+        lastBaseUpdate = lastPendingUpdate;
+        var current = workInProgress.alternate;
+        null !== current &&
+          ((current = current.updateQueue),
+          (pendingQueue = current.lastBaseUpdate),
+          pendingQueue !== lastBaseUpdate &&
+            (null === pendingQueue
+              ? (current.firstBaseUpdate = firstPendingUpdate)
+              : (pendingQueue.next = firstPendingUpdate),
+            (current.lastBaseUpdate = lastPendingUpdate)));
+      }
+      if (null !== firstBaseUpdate) {
+        var newState = queue.baseState;
+        lastBaseUpdate = 0;
+        current = firstPendingUpdate = lastPendingUpdate = null;
+        pendingQueue = firstBaseUpdate;
+        do {
+          var updateLane = pendingQueue.lane & -536870913,
+            isHiddenUpdate = updateLane !== pendingQueue.lane;
+          if (
+            isHiddenUpdate
+              ? (workInProgressRootRenderLanes & updateLane) === updateLane
+              : (renderLanes & updateLane) === updateLane
+          ) {
+            0 !== updateLane &&
+              updateLane === currentEntangledLane &&
+              (didReadFromEntangledAsyncAction = !0);
+            null !== current &&
+              (current = current.next =
+                {
+                  lane: 0,
+                  tag: pendingQueue.tag,
+                  payload: pendingQueue.payload,
+                  callback: null,
+                  next: null
+                });
+            a: {
+              updateLane = workInProgress;
+              var partialState = pendingQueue;
+              var nextProps = props,
+                instance = instance$jscomp$0;
+              switch (partialState.tag) {
+                case ReplaceState:
+                  partialState = partialState.payload;
+                  if ("function" === typeof partialState) {
+                    isDisallowedContextReadInDEV = !0;
+                    var nextState = partialState.call(
+                      instance,
+                      newState,
+                      nextProps
+                    );
+                    if (updateLane.mode & StrictLegacyMode) {
+                      setIsStrictModeForDevtools(!0);
+                      try {
+                        partialState.call(instance, newState, nextProps);
+                      } finally {
+                        setIsStrictModeForDevtools(!1);
+                      }
+                    }
+                    isDisallowedContextReadInDEV = !1;
+                    newState = nextState;
+                    break a;
+                  }
+                  newState = partialState;
+                  break a;
+                case CaptureUpdate:
+                  updateLane.flags = (updateLane.flags & -65537) | 128;
+                case UpdateState:
+                  nextState = partialState.payload;
+                  if ("function" === typeof nextState) {
+                    isDisallowedContextReadInDEV = !0;
+                    partialState = nextState.call(
+                      instance,
+                      newState,
+                      nextProps
+                    );
+                    if (updateLane.mode & StrictLegacyMode) {
+                      setIsStrictModeForDevtools(!0);
+                      try {
+                        nextState.call(instance, newState, nextProps);
+                      } finally {
+                        setIsStrictModeForDevtools(!1);
+                      }
+                    }
+                    isDisallowedContextReadInDEV = !1;
+                  } else partialState = nextState;
+                  if (null === partialState || void 0 === partialState) break a;
+                  newState = assign({}, newState, partialState);
+                  break a;
+                case ForceUpdate:
+                  hasForceUpdate = !0;
+              }
+            }
+            updateLane = pendingQueue.callback;
+            null !== updateLane &&
+              ((workInProgress.flags |= 64),
+              isHiddenUpdate && (workInProgress.flags |= 8192),
+              (isHiddenUpdate = queue.callbacks),
+              null === isHiddenUpdate
+                ? (queue.callbacks = [updateLane])
+                : isHiddenUpdate.push(updateLane));
+          } else
+            (isHiddenUpdate = {
+              lane: updateLane,
+              tag: pendingQueue.tag,
+              payload: pendingQueue.payload,
+              callback: pendingQueue.callback,
+              next: null
+            }),
+              null === current
+                ? ((firstPendingUpdate = current = isHiddenUpdate),
+                  (lastPendingUpdate = newState))
+                : (current = current.next = isHiddenUpdate),
+              (lastBaseUpdate |= updateLane);
+          pendingQueue = pendingQueue.next;
+          if (null === pendingQueue)
+            if (((pendingQueue = queue.shared.pending), null === pendingQueue))
+              break;
+            else
+              (isHiddenUpdate = pendingQueue),
+                (pendingQueue = isHiddenUpdate.next),
+                (isHiddenUpdate.next = null),
+                (queue.lastBaseUpdate = isHiddenUpdate),
+                (queue.shared.pending = null);
+        } while (1);
+        null === current && (lastPendingUpdate = newState);
+        queue.baseState = lastPendingUpdate;
+        queue.firstBaseUpdate = firstPendingUpdate;
+        queue.lastBaseUpdate = current;
+        null === firstBaseUpdate && (queue.shared.lanes = 0);
+        workInProgressRootSkippedLanes |= lastBaseUpdate;
+        workInProgress.lanes = lastBaseUpdate;
+        workInProgress.memoizedState = newState;
+      }
+      currentlyProcessingQueue = null;
+    }
+    function callCallback(callback, context) {
+      if ("function" !== typeof callback)
+        throw Error(
+          "Invalid argument passed as callback. Expected a function. Instead received: " +
+            callback
+        );
+      callback.call(context);
+    }
+    function commitHiddenCallbacks(updateQueue, context) {
+      var hiddenCallbacks = updateQueue.shared.hiddenCallbacks;
+      if (null !== hiddenCallbacks)
+        for (
+          updateQueue.shared.hiddenCallbacks = null, updateQueue = 0;
+          updateQueue < hiddenCallbacks.length;
+          updateQueue++
+        )
+          callCallback(hiddenCallbacks[updateQueue], context);
+    }
+    function commitCallbacks(updateQueue, context) {
+      var callbacks = updateQueue.callbacks;
+      if (null !== callbacks)
+        for (
+          updateQueue.callbacks = null, updateQueue = 0;
+          updateQueue < callbacks.length;
+          updateQueue++
+        )
+          callCallback(callbacks[updateQueue], context);
+    }
+    function pushHiddenContext(fiber, context) {
+      var prevEntangledRenderLanes = entangledRenderLanes;
+      push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber);
+      push(currentTreeHiddenStackCursor, context, fiber);
+      entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes;
+    }
+    function reuseHiddenContextOnStack(fiber) {
+      push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber);
+      push(
+        currentTreeHiddenStackCursor,
+        currentTreeHiddenStackCursor.current,
+        fiber
+      );
+    }
+    function popHiddenContext(fiber) {
+      entangledRenderLanes = prevEntangledRenderLanesCursor.current;
+      pop(currentTreeHiddenStackCursor, fiber);
+      pop(prevEntangledRenderLanesCursor, fiber);
+    }
+    function mountHookTypesDev() {
+      var hookName = currentHookNameInDev;
+      null === hookTypesDev
+        ? (hookTypesDev = [hookName])
+        : hookTypesDev.push(hookName);
+    }
+    function updateHookTypesDev() {
+      var hookName = currentHookNameInDev;
+      if (
+        null !== hookTypesDev &&
+        (hookTypesUpdateIndexDev++,
+        hookTypesDev[hookTypesUpdateIndexDev] !== hookName)
+      ) {
+        var componentName = getComponentNameFromFiber(currentlyRenderingFiber);
+        if (
+          !didWarnAboutMismatchedHooksForComponent.has(componentName) &&
+          (didWarnAboutMismatchedHooksForComponent.add(componentName),
+          null !== hookTypesDev)
+        ) {
+          for (var table = "", i = 0; i <= hookTypesUpdateIndexDev; i++) {
+            var oldHookName = hookTypesDev[i],
+              newHookName =
+                i === hookTypesUpdateIndexDev ? hookName : oldHookName;
+            for (
+              oldHookName = i + 1 + ". " + oldHookName;
+              30 > oldHookName.length;
+
+            )
+              oldHookName += " ";
+            oldHookName += newHookName + "\n";
+            table += oldHookName;
+          }
+          console.error(
+            "React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks\n\n   Previous render            Next render\n   ------------------------------------------------------\n%s   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+            componentName,
+            table
+          );
+        }
+      }
+    }
+    function checkDepsAreArrayDev(deps) {
+      void 0 === deps ||
+        null === deps ||
+        isArrayImpl(deps) ||
+        console.error(
+          "%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.",
+          currentHookNameInDev,
+          typeof deps
+        );
+    }
+    function warnOnUseFormStateInDev() {
+      var componentName = getComponentNameFromFiber(currentlyRenderingFiber);
+      didWarnAboutUseFormState.has(componentName) ||
+        (didWarnAboutUseFormState.add(componentName),
+        console.error(
+          "ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.",
+          componentName
+        ));
+    }
+    function throwInvalidHookError() {
+      throw Error(
+        "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+      );
+    }
+    function areHookInputsEqual(nextDeps, prevDeps) {
+      if (ignorePreviousDependencies) return !1;
+      if (null === prevDeps)
+        return (
+          console.error(
+            "%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",
+            currentHookNameInDev
+          ),
+          !1
+        );
+      nextDeps.length !== prevDeps.length &&
+        console.error(
+          "The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s",
+          currentHookNameInDev,
+          "[" + prevDeps.join(", ") + "]",
+          "[" + nextDeps.join(", ") + "]"
+        );
+      for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)
+        if (!objectIs(nextDeps[i], prevDeps[i])) return !1;
+      return !0;
+    }
+    function renderWithHooks(
+      current,
+      workInProgress,
+      Component,
+      props,
+      secondArg,
+      nextRenderLanes
+    ) {
+      renderLanes = nextRenderLanes;
+      currentlyRenderingFiber = workInProgress;
+      hookTypesDev = null !== current ? current._debugHookTypes : null;
+      hookTypesUpdateIndexDev = -1;
+      ignorePreviousDependencies =
+        null !== current && current.type !== workInProgress.type;
+      if (
+        "[object AsyncFunction]" ===
+          Object.prototype.toString.call(Component) ||
+        "[object AsyncGeneratorFunction]" ===
+          Object.prototype.toString.call(Component)
+      )
+        (nextRenderLanes = getComponentNameFromFiber(currentlyRenderingFiber)),
+          didWarnAboutAsyncClientComponent.has(nextRenderLanes) ||
+            (didWarnAboutAsyncClientComponent.add(nextRenderLanes),
+            console.error(
+              "%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.",
+              null === nextRenderLanes
+                ? "An unknown Component"
+                : "<" + nextRenderLanes + ">"
+            ));
+      workInProgress.memoizedState = null;
+      workInProgress.updateQueue = null;
+      workInProgress.lanes = 0;
+      ReactSharedInternals.H =
+        null !== current && null !== current.memoizedState
+          ? HooksDispatcherOnUpdateInDEV
+          : null !== hookTypesDev
+            ? HooksDispatcherOnMountWithHookTypesInDEV
+            : HooksDispatcherOnMountInDEV;
+      shouldDoubleInvokeUserFnsInHooksDEV = nextRenderLanes =
+        (workInProgress.mode & StrictLegacyMode) !== NoMode;
+      var children = callComponentInDEV(Component, props, secondArg);
+      shouldDoubleInvokeUserFnsInHooksDEV = !1;
+      didScheduleRenderPhaseUpdateDuringThisPass &&
+        (children = renderWithHooksAgain(
+          workInProgress,
+          Component,
+          props,
+          secondArg
+        ));
+      if (nextRenderLanes) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          children = renderWithHooksAgain(
+            workInProgress,
+            Component,
+            props,
+            secondArg
+          );
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      finishRenderingHooks(current, workInProgress);
+      return children;
+    }
+    function finishRenderingHooks(current, workInProgress) {
+      workInProgress._debugHookTypes = hookTypesDev;
+      null === workInProgress.dependencies
+        ? null !== thenableState$1 &&
+          (workInProgress.dependencies = {
+            lanes: 0,
+            firstContext: null,
+            _debugThenableState: thenableState$1
+          })
+        : (workInProgress.dependencies._debugThenableState = thenableState$1);
+      ReactSharedInternals.H = ContextOnlyDispatcher;
+      var didRenderTooFewHooks =
+        null !== currentHook && null !== currentHook.next;
+      renderLanes = 0;
+      hookTypesDev =
+        currentHookNameInDev =
+        workInProgressHook =
+        currentHook =
+        currentlyRenderingFiber =
+          null;
+      hookTypesUpdateIndexDev = -1;
+      null !== current &&
+        (current.flags & 65011712) !== (workInProgress.flags & 65011712) &&
+        console.error(
+          "Internal React error: Expected static flag was missing. Please notify the React team."
+        );
+      didScheduleRenderPhaseUpdate = !1;
+      thenableIndexCounter$1 = 0;
+      thenableState$1 = null;
+      if (didRenderTooFewHooks)
+        throw Error(
+          "Rendered fewer hooks than expected. This may be caused by an accidental early return statement."
+        );
+      null === current ||
+        didReceiveUpdate ||
+        ((current = current.dependencies),
+        null !== current &&
+          checkIfContextChanged(current) &&
+          (didReceiveUpdate = !0));
+      needsToResetSuspendedThenableDEV
+        ? ((needsToResetSuspendedThenableDEV = !1), (current = !0))
+        : (current = !1);
+      current &&
+        ((workInProgress =
+          getComponentNameFromFiber(workInProgress) || "Unknown"),
+        didWarnAboutUseWrappedInTryCatch.has(workInProgress) ||
+          didWarnAboutAsyncClientComponent.has(workInProgress) ||
+          (didWarnAboutUseWrappedInTryCatch.add(workInProgress),
+          console.error(
+            "`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary."
+          )));
+    }
+    function renderWithHooksAgain(workInProgress, Component, props, secondArg) {
+      currentlyRenderingFiber = workInProgress;
+      var numberOfReRenders = 0;
+      do {
+        didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);
+        thenableIndexCounter$1 = 0;
+        didScheduleRenderPhaseUpdateDuringThisPass = !1;
+        if (numberOfReRenders >= RE_RENDER_LIMIT)
+          throw Error(
+            "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+          );
+        numberOfReRenders += 1;
+        ignorePreviousDependencies = !1;
+        workInProgressHook = currentHook = null;
+        if (null != workInProgress.updateQueue) {
+          var children = workInProgress.updateQueue;
+          children.lastEffect = null;
+          children.events = null;
+          children.stores = null;
+          null != children.memoCache && (children.memoCache.index = 0);
+        }
+        hookTypesUpdateIndexDev = -1;
+        ReactSharedInternals.H = HooksDispatcherOnRerenderInDEV;
+        children = callComponentInDEV(Component, props, secondArg);
+      } while (didScheduleRenderPhaseUpdateDuringThisPass);
+      return children;
+    }
+    function TransitionAwareHostComponent() {
+      var dispatcher = ReactSharedInternals.H,
+        maybeThenable = dispatcher.useState()[0];
+      maybeThenable =
+        "function" === typeof maybeThenable.then
+          ? useThenable(maybeThenable)
+          : maybeThenable;
+      dispatcher = dispatcher.useState()[0];
+      (null !== currentHook ? currentHook.memoizedState : null) !==
+        dispatcher && (currentlyRenderingFiber.flags |= 1024);
+      return maybeThenable;
+    }
+    function checkDidRenderIdHook() {
+      var didRenderIdHook = 0 !== localIdCounter;
+      localIdCounter = 0;
+      return didRenderIdHook;
+    }
+    function bailoutHooks(current, workInProgress, lanes) {
+      workInProgress.updateQueue = current.updateQueue;
+      workInProgress.flags =
+        (workInProgress.mode & StrictEffectsMode) !== NoMode
+          ? workInProgress.flags & -402655237
+          : workInProgress.flags & -2053;
+      current.lanes &= ~lanes;
+    }
+    function resetHooksOnUnwind(workInProgress) {
+      if (didScheduleRenderPhaseUpdate) {
+        for (
+          workInProgress = workInProgress.memoizedState;
+          null !== workInProgress;
+
+        ) {
+          var queue = workInProgress.queue;
+          null !== queue && (queue.pending = null);
+          workInProgress = workInProgress.next;
+        }
+        didScheduleRenderPhaseUpdate = !1;
+      }
+      renderLanes = 0;
+      hookTypesDev =
+        workInProgressHook =
+        currentHook =
+        currentlyRenderingFiber =
+          null;
+      hookTypesUpdateIndexDev = -1;
+      currentHookNameInDev = null;
+      didScheduleRenderPhaseUpdateDuringThisPass = !1;
+      thenableIndexCounter$1 = localIdCounter = 0;
+      thenableState$1 = null;
+    }
+    function mountWorkInProgressHook() {
+      var hook = {
+        memoizedState: null,
+        baseState: null,
+        baseQueue: null,
+        queue: null,
+        next: null
+      };
+      null === workInProgressHook
+        ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)
+        : (workInProgressHook = workInProgressHook.next = hook);
+      return workInProgressHook;
+    }
+    function updateWorkInProgressHook() {
+      if (null === currentHook) {
+        var nextCurrentHook = currentlyRenderingFiber.alternate;
+        nextCurrentHook =
+          null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;
+      } else nextCurrentHook = currentHook.next;
+      var nextWorkInProgressHook =
+        null === workInProgressHook
+          ? currentlyRenderingFiber.memoizedState
+          : workInProgressHook.next;
+      if (null !== nextWorkInProgressHook)
+        (workInProgressHook = nextWorkInProgressHook),
+          (currentHook = nextCurrentHook);
+      else {
+        if (null === nextCurrentHook) {
+          if (null === currentlyRenderingFiber.alternate)
+            throw Error(
+              "Update hook called on initial render. This is likely a bug in React. Please file an issue."
+            );
+          throw Error("Rendered more hooks than during the previous render.");
+        }
+        currentHook = nextCurrentHook;
+        nextCurrentHook = {
+          memoizedState: currentHook.memoizedState,
+          baseState: currentHook.baseState,
+          baseQueue: currentHook.baseQueue,
+          queue: currentHook.queue,
+          next: null
+        };
+        null === workInProgressHook
+          ? (currentlyRenderingFiber.memoizedState = workInProgressHook =
+              nextCurrentHook)
+          : (workInProgressHook = workInProgressHook.next = nextCurrentHook);
+      }
+      return workInProgressHook;
+    }
+    function createFunctionComponentUpdateQueue() {
+      return { lastEffect: null, events: null, stores: null, memoCache: null };
+    }
+    function useThenable(thenable) {
+      var index = thenableIndexCounter$1;
+      thenableIndexCounter$1 += 1;
+      null === thenableState$1 && (thenableState$1 = createThenableState());
+      thenable = trackUsedThenable(thenableState$1, thenable, index);
+      index = currentlyRenderingFiber;
+      null ===
+        (null === workInProgressHook
+          ? index.memoizedState
+          : workInProgressHook.next) &&
+        ((index = index.alternate),
+        (ReactSharedInternals.H =
+          null !== index && null !== index.memoizedState
+            ? HooksDispatcherOnUpdateInDEV
+            : HooksDispatcherOnMountInDEV));
+      return thenable;
+    }
+    function use(usable) {
+      if (null !== usable && "object" === typeof usable) {
+        if ("function" === typeof usable.then) return useThenable(usable);
+        if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);
+      }
+      throw Error("An unsupported type was passed to use(): " + String(usable));
+    }
+    function useMemoCache(size) {
+      var memoCache = null,
+        updateQueue = currentlyRenderingFiber.updateQueue;
+      null !== updateQueue && (memoCache = updateQueue.memoCache);
+      if (null == memoCache) {
+        var current = currentlyRenderingFiber.alternate;
+        null !== current &&
+          ((current = current.updateQueue),
+          null !== current &&
+            ((current = current.memoCache),
+            null != current &&
+              (memoCache = {
+                data: current.data.map(function (array) {
+                  return array.slice();
+                }),
+                index: 0
+              })));
+      }
+      null == memoCache && (memoCache = { data: [], index: 0 });
+      null === updateQueue &&
+        ((updateQueue = createFunctionComponentUpdateQueue()),
+        (currentlyRenderingFiber.updateQueue = updateQueue));
+      updateQueue.memoCache = memoCache;
+      updateQueue = memoCache.data[memoCache.index];
+      if (void 0 === updateQueue || ignorePreviousDependencies)
+        for (
+          updateQueue = memoCache.data[memoCache.index] = Array(size),
+            current = 0;
+          current < size;
+          current++
+        )
+          updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;
+      else
+        updateQueue.length !== size &&
+          console.error(
+            "Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.",
+            updateQueue.length,
+            size
+          );
+      memoCache.index++;
+      return updateQueue;
+    }
+    function basicStateReducer(state, action) {
+      return "function" === typeof action ? action(state) : action;
+    }
+    function mountReducer(reducer, initialArg, init) {
+      var hook = mountWorkInProgressHook();
+      if (void 0 !== init) {
+        var initialState = init(initialArg);
+        if (shouldDoubleInvokeUserFnsInHooksDEV) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            init(initialArg);
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+      } else initialState = initialArg;
+      hook.memoizedState = hook.baseState = initialState;
+      reducer = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: reducer,
+        lastRenderedState: initialState
+      };
+      hook.queue = reducer;
+      reducer = reducer.dispatch = dispatchReducerAction.bind(
+        null,
+        currentlyRenderingFiber,
+        reducer
+      );
+      return [hook.memoizedState, reducer];
+    }
+    function updateReducer(reducer) {
+      var hook = updateWorkInProgressHook();
+      return updateReducerImpl(hook, currentHook, reducer);
+    }
+    function updateReducerImpl(hook, current, reducer) {
+      var queue = hook.queue;
+      if (null === queue)
+        throw Error(
+          "Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)"
+        );
+      queue.lastRenderedReducer = reducer;
+      var baseQueue = hook.baseQueue,
+        pendingQueue = queue.pending;
+      if (null !== pendingQueue) {
+        if (null !== baseQueue) {
+          var baseFirst = baseQueue.next;
+          baseQueue.next = pendingQueue.next;
+          pendingQueue.next = baseFirst;
+        }
+        current.baseQueue !== baseQueue &&
+          console.error(
+            "Internal error: Expected work-in-progress queue to be a clone. This is a bug in React."
+          );
+        current.baseQueue = baseQueue = pendingQueue;
+        queue.pending = null;
+      }
+      pendingQueue = hook.baseState;
+      if (null === baseQueue) hook.memoizedState = pendingQueue;
+      else {
+        current = baseQueue.next;
+        var newBaseQueueFirst = (baseFirst = null),
+          newBaseQueueLast = null,
+          update = current,
+          didReadFromEntangledAsyncAction = !1;
+        do {
+          var updateLane = update.lane & -536870913;
+          if (
+            updateLane !== update.lane
+              ? (workInProgressRootRenderLanes & updateLane) === updateLane
+              : (renderLanes & updateLane) === updateLane
+          ) {
+            var revertLane = update.revertLane;
+            if (0 === revertLane)
+              null !== newBaseQueueLast &&
+                (newBaseQueueLast = newBaseQueueLast.next =
+                  {
+                    lane: 0,
+                    revertLane: 0,
+                    action: update.action,
+                    hasEagerState: update.hasEagerState,
+                    eagerState: update.eagerState,
+                    next: null
+                  }),
+                updateLane === currentEntangledLane &&
+                  (didReadFromEntangledAsyncAction = !0);
+            else if ((renderLanes & revertLane) === revertLane) {
+              update = update.next;
+              revertLane === currentEntangledLane &&
+                (didReadFromEntangledAsyncAction = !0);
+              continue;
+            } else
+              (updateLane = {
+                lane: 0,
+                revertLane: update.revertLane,
+                action: update.action,
+                hasEagerState: update.hasEagerState,
+                eagerState: update.eagerState,
+                next: null
+              }),
+                null === newBaseQueueLast
+                  ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),
+                    (baseFirst = pendingQueue))
+                  : (newBaseQueueLast = newBaseQueueLast.next = updateLane),
+                (currentlyRenderingFiber.lanes |= revertLane),
+                (workInProgressRootSkippedLanes |= revertLane);
+            updateLane = update.action;
+            shouldDoubleInvokeUserFnsInHooksDEV &&
+              reducer(pendingQueue, updateLane);
+            pendingQueue = update.hasEagerState
+              ? update.eagerState
+              : reducer(pendingQueue, updateLane);
+          } else
+            (revertLane = {
+              lane: updateLane,
+              revertLane: update.revertLane,
+              action: update.action,
+              hasEagerState: update.hasEagerState,
+              eagerState: update.eagerState,
+              next: null
+            }),
+              null === newBaseQueueLast
+                ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),
+                  (baseFirst = pendingQueue))
+                : (newBaseQueueLast = newBaseQueueLast.next = revertLane),
+              (currentlyRenderingFiber.lanes |= updateLane),
+              (workInProgressRootSkippedLanes |= updateLane);
+          update = update.next;
+        } while (null !== update && update !== current);
+        null === newBaseQueueLast
+          ? (baseFirst = pendingQueue)
+          : (newBaseQueueLast.next = newBaseQueueFirst);
+        if (
+          !objectIs(pendingQueue, hook.memoizedState) &&
+          ((didReceiveUpdate = !0),
+          didReadFromEntangledAsyncAction &&
+            ((reducer = currentEntangledActionThenable), null !== reducer))
+        )
+          throw reducer;
+        hook.memoizedState = pendingQueue;
+        hook.baseState = baseFirst;
+        hook.baseQueue = newBaseQueueLast;
+        queue.lastRenderedState = pendingQueue;
+      }
+      null === baseQueue && (queue.lanes = 0);
+      return [hook.memoizedState, queue.dispatch];
+    }
+    function rerenderReducer(reducer) {
+      var hook = updateWorkInProgressHook(),
+        queue = hook.queue;
+      if (null === queue)
+        throw Error(
+          "Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)"
+        );
+      queue.lastRenderedReducer = reducer;
+      var dispatch = queue.dispatch,
+        lastRenderPhaseUpdate = queue.pending,
+        newState = hook.memoizedState;
+      if (null !== lastRenderPhaseUpdate) {
+        queue.pending = null;
+        var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);
+        do
+          (newState = reducer(newState, update.action)), (update = update.next);
+        while (update !== lastRenderPhaseUpdate);
+        objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);
+        hook.memoizedState = newState;
+        null === hook.baseQueue && (hook.baseState = newState);
+        queue.lastRenderedState = newState;
+      }
+      return [newState, dispatch];
+    }
+    function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
+      var fiber = currentlyRenderingFiber,
+        hook = mountWorkInProgressHook();
+      if (isHydrating) {
+        if (void 0 === getServerSnapshot)
+          throw Error(
+            "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+          );
+        var nextSnapshot = getServerSnapshot();
+        didWarnUncachedGetSnapshot ||
+          nextSnapshot === getServerSnapshot() ||
+          (console.error(
+            "The result of getServerSnapshot should be cached to avoid an infinite loop"
+          ),
+          (didWarnUncachedGetSnapshot = !0));
+      } else {
+        nextSnapshot = getSnapshot();
+        didWarnUncachedGetSnapshot ||
+          ((getServerSnapshot = getSnapshot()),
+          objectIs(nextSnapshot, getServerSnapshot) ||
+            (console.error(
+              "The result of getSnapshot should be cached to avoid an infinite loop"
+            ),
+            (didWarnUncachedGetSnapshot = !0)));
+        if (null === workInProgressRoot)
+          throw Error(
+            "Expected a work-in-progress root. This is a bug in React. Please file an issue."
+          );
+        0 !== (workInProgressRootRenderLanes & 124) ||
+          pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);
+      }
+      hook.memoizedState = nextSnapshot;
+      getServerSnapshot = { value: nextSnapshot, getSnapshot: getSnapshot };
+      hook.queue = getServerSnapshot;
+      mountEffect(
+        subscribeToStore.bind(null, fiber, getServerSnapshot, subscribe),
+        [subscribe]
+      );
+      fiber.flags |= 2048;
+      pushSimpleEffect(
+        HasEffect | Passive,
+        createEffectInstance(),
+        updateStoreInstance.bind(
+          null,
+          fiber,
+          getServerSnapshot,
+          nextSnapshot,
+          getSnapshot
+        ),
+        null
+      );
+      return nextSnapshot;
+    }
+    function updateSyncExternalStore(
+      subscribe,
+      getSnapshot,
+      getServerSnapshot
+    ) {
+      var fiber = currentlyRenderingFiber,
+        hook = updateWorkInProgressHook(),
+        isHydrating$jscomp$0 = isHydrating;
+      if (isHydrating$jscomp$0) {
+        if (void 0 === getServerSnapshot)
+          throw Error(
+            "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+          );
+        getServerSnapshot = getServerSnapshot();
+      } else if (
+        ((getServerSnapshot = getSnapshot()), !didWarnUncachedGetSnapshot)
+      ) {
+        var cachedSnapshot = getSnapshot();
+        objectIs(getServerSnapshot, cachedSnapshot) ||
+          (console.error(
+            "The result of getSnapshot should be cached to avoid an infinite loop"
+          ),
+          (didWarnUncachedGetSnapshot = !0));
+      }
+      if (
+        (cachedSnapshot = !objectIs(
+          (currentHook || hook).memoizedState,
+          getServerSnapshot
+        ))
+      )
+        (hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0);
+      hook = hook.queue;
+      var create = subscribeToStore.bind(null, fiber, hook, subscribe);
+      updateEffectImpl(2048, Passive, create, [subscribe]);
+      if (
+        hook.getSnapshot !== getSnapshot ||
+        cachedSnapshot ||
+        (null !== workInProgressHook &&
+          workInProgressHook.memoizedState.tag & HasEffect)
+      ) {
+        fiber.flags |= 2048;
+        pushSimpleEffect(
+          HasEffect | Passive,
+          createEffectInstance(),
+          updateStoreInstance.bind(
+            null,
+            fiber,
+            hook,
+            getServerSnapshot,
+            getSnapshot
+          ),
+          null
+        );
+        if (null === workInProgressRoot)
+          throw Error(
+            "Expected a work-in-progress root. This is a bug in React. Please file an issue."
+          );
+        isHydrating$jscomp$0 ||
+          0 !== (renderLanes & 124) ||
+          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);
+      }
+      return getServerSnapshot;
+    }
+    function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {
+      fiber.flags |= 16384;
+      fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };
+      getSnapshot = currentlyRenderingFiber.updateQueue;
+      null === getSnapshot
+        ? ((getSnapshot = createFunctionComponentUpdateQueue()),
+          (currentlyRenderingFiber.updateQueue = getSnapshot),
+          (getSnapshot.stores = [fiber]))
+        : ((renderedSnapshot = getSnapshot.stores),
+          null === renderedSnapshot
+            ? (getSnapshot.stores = [fiber])
+            : renderedSnapshot.push(fiber));
+    }
+    function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {
+      inst.value = nextSnapshot;
+      inst.getSnapshot = getSnapshot;
+      checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);
+    }
+    function subscribeToStore(fiber, inst, subscribe) {
+      return subscribe(function () {
+        checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);
+      });
+    }
+    function checkIfSnapshotChanged(inst) {
+      var latestGetSnapshot = inst.getSnapshot;
+      inst = inst.value;
+      try {
+        var nextValue = latestGetSnapshot();
+        return !objectIs(inst, nextValue);
+      } catch (error) {
+        return !0;
+      }
+    }
+    function forceStoreRerender(fiber) {
+      var root = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== root && scheduleUpdateOnFiber(root, fiber, 2);
+    }
+    function mountStateImpl(initialState) {
+      var hook = mountWorkInProgressHook();
+      if ("function" === typeof initialState) {
+        var initialStateInitializer = initialState;
+        initialState = initialStateInitializer();
+        if (shouldDoubleInvokeUserFnsInHooksDEV) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            initialStateInitializer();
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+      }
+      hook.memoizedState = hook.baseState = initialState;
+      hook.queue = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: basicStateReducer,
+        lastRenderedState: initialState
+      };
+      return hook;
+    }
+    function mountState(initialState) {
+      initialState = mountStateImpl(initialState);
+      var queue = initialState.queue,
+        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);
+      queue.dispatch = dispatch;
+      return [initialState.memoizedState, dispatch];
+    }
+    function mountOptimistic(passthrough) {
+      var hook = mountWorkInProgressHook();
+      hook.memoizedState = hook.baseState = passthrough;
+      var queue = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: null,
+        lastRenderedState: null
+      };
+      hook.queue = queue;
+      hook = dispatchOptimisticSetState.bind(
+        null,
+        currentlyRenderingFiber,
+        !0,
+        queue
+      );
+      queue.dispatch = hook;
+      return [passthrough, hook];
+    }
+    function updateOptimistic(passthrough, reducer) {
+      var hook = updateWorkInProgressHook();
+      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);
+    }
+    function updateOptimisticImpl(hook, current, passthrough, reducer) {
+      hook.baseState = passthrough;
+      return updateReducerImpl(
+        hook,
+        currentHook,
+        "function" === typeof reducer ? reducer : basicStateReducer
+      );
+    }
+    function rerenderOptimistic(passthrough, reducer) {
+      var hook = updateWorkInProgressHook();
+      if (null !== currentHook)
+        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);
+      hook.baseState = passthrough;
+      return [passthrough, hook.queue.dispatch];
+    }
+    function dispatchActionState(
+      fiber,
+      actionQueue,
+      setPendingState,
+      setState,
+      payload
+    ) {
+      if (isRenderPhaseUpdate(fiber))
+        throw Error("Cannot update form state while rendering.");
+      fiber = actionQueue.action;
+      if (null !== fiber) {
+        var actionNode = {
+          payload: payload,
+          action: fiber,
+          next: null,
+          isTransition: !0,
+          status: "pending",
+          value: null,
+          reason: null,
+          listeners: [],
+          then: function (listener) {
+            actionNode.listeners.push(listener);
+          }
+        };
+        null !== ReactSharedInternals.T
+          ? setPendingState(!0)
+          : (actionNode.isTransition = !1);
+        setState(actionNode);
+        setPendingState = actionQueue.pending;
+        null === setPendingState
+          ? ((actionNode.next = actionQueue.pending = actionNode),
+            runActionStateAction(actionQueue, actionNode))
+          : ((actionNode.next = setPendingState.next),
+            (actionQueue.pending = setPendingState.next = actionNode));
+      }
+    }
+    function runActionStateAction(actionQueue, node) {
+      var action = node.action,
+        payload = node.payload,
+        prevState = actionQueue.state;
+      if (node.isTransition) {
+        var prevTransition = ReactSharedInternals.T,
+          currentTransition = {};
+        ReactSharedInternals.T = currentTransition;
+        ReactSharedInternals.T._updatedFibers = new Set();
+        try {
+          var returnValue = action(prevState, payload),
+            onStartTransitionFinish = ReactSharedInternals.S;
+          null !== onStartTransitionFinish &&
+            onStartTransitionFinish(currentTransition, returnValue);
+          handleActionReturnValue(actionQueue, node, returnValue);
+        } catch (error) {
+          onActionError(actionQueue, node, error);
+        } finally {
+          (ReactSharedInternals.T = prevTransition),
+            null === prevTransition &&
+              currentTransition._updatedFibers &&
+              ((actionQueue = currentTransition._updatedFibers.size),
+              currentTransition._updatedFibers.clear(),
+              10 < actionQueue &&
+                console.warn(
+                  "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."
+                ));
+        }
+      } else
+        try {
+          (currentTransition = action(prevState, payload)),
+            handleActionReturnValue(actionQueue, node, currentTransition);
+        } catch (error$4) {
+          onActionError(actionQueue, node, error$4);
+        }
+    }
+    function handleActionReturnValue(actionQueue, node, returnValue) {
+      null !== returnValue &&
+      "object" === typeof returnValue &&
+      "function" === typeof returnValue.then
+        ? (returnValue.then(
+            function (nextState) {
+              onActionSuccess(actionQueue, node, nextState);
+            },
+            function (error) {
+              return onActionError(actionQueue, node, error);
+            }
+          ),
+          node.isTransition ||
+            console.error(
+              "An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop."
+            ))
+        : onActionSuccess(actionQueue, node, returnValue);
+    }
+    function onActionSuccess(actionQueue, actionNode, nextState) {
+      actionNode.status = "fulfilled";
+      actionNode.value = nextState;
+      notifyActionListeners(actionNode);
+      actionQueue.state = nextState;
+      actionNode = actionQueue.pending;
+      null !== actionNode &&
+        ((nextState = actionNode.next),
+        nextState === actionNode
+          ? (actionQueue.pending = null)
+          : ((nextState = nextState.next),
+            (actionNode.next = nextState),
+            runActionStateAction(actionQueue, nextState)));
+    }
+    function onActionError(actionQueue, actionNode, error) {
+      var last = actionQueue.pending;
+      actionQueue.pending = null;
+      if (null !== last) {
+        last = last.next;
+        do
+          (actionNode.status = "rejected"),
+            (actionNode.reason = error),
+            notifyActionListeners(actionNode),
+            (actionNode = actionNode.next);
+        while (actionNode !== last);
+      }
+      actionQueue.action = null;
+    }
+    function notifyActionListeners(actionNode) {
+      actionNode = actionNode.listeners;
+      for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();
+    }
+    function actionStateReducer(oldState, newState) {
+      return newState;
+    }
+    function mountActionState(action, initialStateProp) {
+      if (isHydrating) {
+        var ssrFormState = workInProgressRoot.formState;
+        if (null !== ssrFormState) {
+          a: {
+            var isMatching = currentlyRenderingFiber;
+            if (isHydrating) {
+              if (nextHydratableInstance) {
+                b: {
+                  var markerInstance = nextHydratableInstance;
+                  for (
+                    var inRootOrSingleton = rootOrSingletonContext;
+                    8 !== markerInstance.nodeType;
+
+                  ) {
+                    if (!inRootOrSingleton) {
+                      markerInstance = null;
+                      break b;
+                    }
+                    markerInstance = getNextHydratable(
+                      markerInstance.nextSibling
+                    );
+                    if (null === markerInstance) {
+                      markerInstance = null;
+                      break b;
+                    }
+                  }
+                  inRootOrSingleton = markerInstance.data;
+                  markerInstance =
+                    inRootOrSingleton === FORM_STATE_IS_MATCHING ||
+                    inRootOrSingleton === FORM_STATE_IS_NOT_MATCHING
+                      ? markerInstance
+                      : null;
+                }
+                if (markerInstance) {
+                  nextHydratableInstance = getNextHydratable(
+                    markerInstance.nextSibling
+                  );
+                  isMatching = markerInstance.data === FORM_STATE_IS_MATCHING;
+                  break a;
+                }
+              }
+              throwOnHydrationMismatch(isMatching);
+            }
+            isMatching = !1;
+          }
+          isMatching && (initialStateProp = ssrFormState[0]);
+        }
+      }
+      ssrFormState = mountWorkInProgressHook();
+      ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;
+      isMatching = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: actionStateReducer,
+        lastRenderedState: initialStateProp
+      };
+      ssrFormState.queue = isMatching;
+      ssrFormState = dispatchSetState.bind(
+        null,
+        currentlyRenderingFiber,
+        isMatching
+      );
+      isMatching.dispatch = ssrFormState;
+      isMatching = mountStateImpl(!1);
+      inRootOrSingleton = dispatchOptimisticSetState.bind(
+        null,
+        currentlyRenderingFiber,
+        !1,
+        isMatching.queue
+      );
+      isMatching = mountWorkInProgressHook();
+      markerInstance = {
+        state: initialStateProp,
+        dispatch: null,
+        action: action,
+        pending: null
+      };
+      isMatching.queue = markerInstance;
+      ssrFormState = dispatchActionState.bind(
+        null,
+        currentlyRenderingFiber,
+        markerInstance,
+        inRootOrSingleton,
+        ssrFormState
+      );
+      markerInstance.dispatch = ssrFormState;
+      isMatching.memoizedState = action;
+      return [initialStateProp, ssrFormState, !1];
+    }
+    function updateActionState(action) {
+      var stateHook = updateWorkInProgressHook();
+      return updateActionStateImpl(stateHook, currentHook, action);
+    }
+    function updateActionStateImpl(stateHook, currentStateHook, action) {
+      currentStateHook = updateReducerImpl(
+        stateHook,
+        currentStateHook,
+        actionStateReducer
+      )[0];
+      stateHook = updateReducer(basicStateReducer)[0];
+      if (
+        "object" === typeof currentStateHook &&
+        null !== currentStateHook &&
+        "function" === typeof currentStateHook.then
+      )
+        try {
+          var state = useThenable(currentStateHook);
+        } catch (x) {
+          if (x === SuspenseException) throw SuspenseActionException;
+          throw x;
+        }
+      else state = currentStateHook;
+      currentStateHook = updateWorkInProgressHook();
+      var actionQueue = currentStateHook.queue,
+        dispatch = actionQueue.dispatch;
+      action !== currentStateHook.memoizedState &&
+        ((currentlyRenderingFiber.flags |= 2048),
+        pushSimpleEffect(
+          HasEffect | Passive,
+          createEffectInstance(),
+          actionStateActionEffect.bind(null, actionQueue, action),
+          null
+        ));
+      return [state, dispatch, stateHook];
+    }
+    function actionStateActionEffect(actionQueue, action) {
+      actionQueue.action = action;
+    }
+    function rerenderActionState(action) {
+      var stateHook = updateWorkInProgressHook(),
+        currentStateHook = currentHook;
+      if (null !== currentStateHook)
+        return updateActionStateImpl(stateHook, currentStateHook, action);
+      updateWorkInProgressHook();
+      stateHook = stateHook.memoizedState;
+      currentStateHook = updateWorkInProgressHook();
+      var dispatch = currentStateHook.queue.dispatch;
+      currentStateHook.memoizedState = action;
+      return [stateHook, dispatch, !1];
+    }
+    function pushSimpleEffect(tag, inst, create, createDeps) {
+      tag = {
+        tag: tag,
+        create: create,
+        deps: createDeps,
+        inst: inst,
+        next: null
+      };
+      inst = currentlyRenderingFiber.updateQueue;
+      null === inst &&
+        ((inst = createFunctionComponentUpdateQueue()),
+        (currentlyRenderingFiber.updateQueue = inst));
+      create = inst.lastEffect;
+      null === create
+        ? (inst.lastEffect = tag.next = tag)
+        : ((createDeps = create.next),
+          (create.next = tag),
+          (tag.next = createDeps),
+          (inst.lastEffect = tag));
+      return tag;
+    }
+    function createEffectInstance() {
+      return { destroy: void 0, resource: void 0 };
+    }
+    function mountRef(initialValue) {
+      var hook = mountWorkInProgressHook();
+      initialValue = { current: initialValue };
+      return (hook.memoizedState = initialValue);
+    }
+    function mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {
+      var hook = mountWorkInProgressHook();
+      createDeps = void 0 === createDeps ? null : createDeps;
+      currentlyRenderingFiber.flags |= fiberFlags;
+      hook.memoizedState = pushSimpleEffect(
+        HasEffect | hookFlags,
+        createEffectInstance(),
+        create,
+        createDeps
+      );
+    }
+    function updateEffectImpl(fiberFlags, hookFlags, create, deps) {
+      var hook = updateWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var inst = hook.memoizedState.inst;
+      null !== currentHook &&
+      null !== deps &&
+      areHookInputsEqual(deps, currentHook.memoizedState.deps)
+        ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))
+        : ((currentlyRenderingFiber.flags |= fiberFlags),
+          (hook.memoizedState = pushSimpleEffect(
+            HasEffect | hookFlags,
+            inst,
+            create,
+            deps
+          )));
+    }
+    function mountEffect(create, createDeps) {
+      (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&
+      (currentlyRenderingFiber.mode & NoStrictPassiveEffectsMode) === NoMode
+        ? mountEffectImpl(276826112, Passive, create, createDeps)
+        : mountEffectImpl(8390656, Passive, create, createDeps);
+    }
+    function mountLayoutEffect(create, deps) {
+      var fiberFlags = 4194308;
+      (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&
+        (fiberFlags |= 134217728);
+      return mountEffectImpl(fiberFlags, Layout, create, deps);
+    }
+    function imperativeHandleEffect(create, ref) {
+      if ("function" === typeof ref) {
+        create = create();
+        var refCleanup = ref(create);
+        return function () {
+          "function" === typeof refCleanup ? refCleanup() : ref(null);
+        };
+      }
+      if (null !== ref && void 0 !== ref)
+        return (
+          ref.hasOwnProperty("current") ||
+            console.error(
+              "Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.",
+              "an object with keys {" + Object.keys(ref).join(", ") + "}"
+            ),
+          (create = create()),
+          (ref.current = create),
+          function () {
+            ref.current = null;
+          }
+        );
+    }
+    function mountImperativeHandle(ref, create, deps) {
+      "function" !== typeof create &&
+        console.error(
+          "Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",
+          null !== create ? typeof create : "null"
+        );
+      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;
+      var fiberFlags = 4194308;
+      (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&
+        (fiberFlags |= 134217728);
+      mountEffectImpl(
+        fiberFlags,
+        Layout,
+        imperativeHandleEffect.bind(null, create, ref),
+        deps
+      );
+    }
+    function updateImperativeHandle(ref, create, deps) {
+      "function" !== typeof create &&
+        console.error(
+          "Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",
+          null !== create ? typeof create : "null"
+        );
+      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;
+      updateEffectImpl(
+        4,
+        Layout,
+        imperativeHandleEffect.bind(null, create, ref),
+        deps
+      );
+    }
+    function mountCallback(callback, deps) {
+      mountWorkInProgressHook().memoizedState = [
+        callback,
+        void 0 === deps ? null : deps
+      ];
+      return callback;
+    }
+    function updateCallback(callback, deps) {
+      var hook = updateWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var prevState = hook.memoizedState;
+      if (null !== deps && areHookInputsEqual(deps, prevState[1]))
+        return prevState[0];
+      hook.memoizedState = [callback, deps];
+      return callback;
+    }
+    function mountMemo(nextCreate, deps) {
+      var hook = mountWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var nextValue = nextCreate();
+      if (shouldDoubleInvokeUserFnsInHooksDEV) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          nextCreate();
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      hook.memoizedState = [nextValue, deps];
+      return nextValue;
+    }
+    function updateMemo(nextCreate, deps) {
+      var hook = updateWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var prevState = hook.memoizedState;
+      if (null !== deps && areHookInputsEqual(deps, prevState[1]))
+        return prevState[0];
+      prevState = nextCreate();
+      if (shouldDoubleInvokeUserFnsInHooksDEV) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          nextCreate();
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      hook.memoizedState = [prevState, deps];
+      return prevState;
+    }
+    function mountDeferredValue(value, initialValue) {
+      var hook = mountWorkInProgressHook();
+      return mountDeferredValueImpl(hook, value, initialValue);
+    }
+    function updateDeferredValue(value, initialValue) {
+      var hook = updateWorkInProgressHook();
+      return updateDeferredValueImpl(
+        hook,
+        currentHook.memoizedState,
+        value,
+        initialValue
+      );
+    }
+    function rerenderDeferredValue(value, initialValue) {
+      var hook = updateWorkInProgressHook();
+      return null === currentHook
+        ? mountDeferredValueImpl(hook, value, initialValue)
+        : updateDeferredValueImpl(
+            hook,
+            currentHook.memoizedState,
+            value,
+            initialValue
+          );
+    }
+    function mountDeferredValueImpl(hook, value, initialValue) {
+      if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))
+        return (hook.memoizedState = value);
+      hook.memoizedState = initialValue;
+      hook = requestDeferredLane();
+      currentlyRenderingFiber.lanes |= hook;
+      workInProgressRootSkippedLanes |= hook;
+      return initialValue;
+    }
+    function updateDeferredValueImpl(hook, prevValue, value, initialValue) {
+      if (objectIs(value, prevValue)) return value;
+      if (null !== currentTreeHiddenStackCursor.current)
+        return (
+          (hook = mountDeferredValueImpl(hook, value, initialValue)),
+          objectIs(hook, prevValue) || (didReceiveUpdate = !0),
+          hook
+        );
+      if (0 === (renderLanes & 42))
+        return (didReceiveUpdate = !0), (hook.memoizedState = value);
+      hook = requestDeferredLane();
+      currentlyRenderingFiber.lanes |= hook;
+      workInProgressRootSkippedLanes |= hook;
+      return prevValue;
+    }
+    function startTransition(
+      fiber,
+      queue,
+      pendingState,
+      finishedState,
+      callback
+    ) {
+      var previousPriority = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p =
+        0 !== previousPriority && previousPriority < ContinuousEventPriority
+          ? previousPriority
+          : ContinuousEventPriority;
+      var prevTransition = ReactSharedInternals.T,
+        currentTransition = {};
+      ReactSharedInternals.T = currentTransition;
+      dispatchOptimisticSetState(fiber, !1, queue, pendingState);
+      currentTransition._updatedFibers = new Set();
+      try {
+        var returnValue = callback(),
+          onStartTransitionFinish = ReactSharedInternals.S;
+        null !== onStartTransitionFinish &&
+          onStartTransitionFinish(currentTransition, returnValue);
+        if (
+          null !== returnValue &&
+          "object" === typeof returnValue &&
+          "function" === typeof returnValue.then
+        ) {
+          var thenableForFinishedState = chainThenableValue(
+            returnValue,
+            finishedState
+          );
+          dispatchSetStateInternal(
+            fiber,
+            queue,
+            thenableForFinishedState,
+            requestUpdateLane(fiber)
+          );
+        } else
+          dispatchSetStateInternal(
+            fiber,
+            queue,
+            finishedState,
+            requestUpdateLane(fiber)
+          );
+      } catch (error) {
+        dispatchSetStateInternal(
+          fiber,
+          queue,
+          { then: function () {}, status: "rejected", reason: error },
+          requestUpdateLane(fiber)
+        );
+      } finally {
+        (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = prevTransition),
+          null === prevTransition &&
+            currentTransition._updatedFibers &&
+            ((fiber = currentTransition._updatedFibers.size),
+            currentTransition._updatedFibers.clear(),
+            10 < fiber &&
+              console.warn(
+                "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."
+              ));
+      }
+    }
+    function startHostTransition(formFiber, pendingState, action, formData) {
+      if (5 !== formFiber.tag)
+        throw Error(
+          "Expected the form instance to be a HostComponent. This is a bug in React."
+        );
+      var queue = ensureFormComponentIsStateful(formFiber).queue;
+      startTransition(
+        formFiber,
+        queue,
+        pendingState,
+        NotPendingTransition,
+        null === action
+          ? noop$2
+          : function () {
+              requestFormReset$1(formFiber);
+              return action(formData);
+            }
+      );
+    }
+    function ensureFormComponentIsStateful(formFiber) {
+      var existingStateHook = formFiber.memoizedState;
+      if (null !== existingStateHook) return existingStateHook;
+      existingStateHook = {
+        memoizedState: NotPendingTransition,
+        baseState: NotPendingTransition,
+        baseQueue: null,
+        queue: {
+          pending: null,
+          lanes: 0,
+          dispatch: null,
+          lastRenderedReducer: basicStateReducer,
+          lastRenderedState: NotPendingTransition
+        },
+        next: null
+      };
+      var initialResetState = {};
+      existingStateHook.next = {
+        memoizedState: initialResetState,
+        baseState: initialResetState,
+        baseQueue: null,
+        queue: {
+          pending: null,
+          lanes: 0,
+          dispatch: null,
+          lastRenderedReducer: basicStateReducer,
+          lastRenderedState: initialResetState
+        },
+        next: null
+      };
+      formFiber.memoizedState = existingStateHook;
+      formFiber = formFiber.alternate;
+      null !== formFiber && (formFiber.memoizedState = existingStateHook);
+      return existingStateHook;
+    }
+    function requestFormReset$1(formFiber) {
+      null === ReactSharedInternals.T &&
+        console.error(
+          "requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition."
+        );
+      var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;
+      dispatchSetStateInternal(
+        formFiber,
+        resetStateQueue,
+        {},
+        requestUpdateLane(formFiber)
+      );
+    }
+    function mountTransition() {
+      var stateHook = mountStateImpl(!1);
+      stateHook = startTransition.bind(
+        null,
+        currentlyRenderingFiber,
+        stateHook.queue,
+        !0,
+        !1
+      );
+      mountWorkInProgressHook().memoizedState = stateHook;
+      return [!1, stateHook];
+    }
+    function updateTransition() {
+      var booleanOrThenable = updateReducer(basicStateReducer)[0],
+        start = updateWorkInProgressHook().memoizedState;
+      return [
+        "boolean" === typeof booleanOrThenable
+          ? booleanOrThenable
+          : useThenable(booleanOrThenable),
+        start
+      ];
+    }
+    function rerenderTransition() {
+      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],
+        start = updateWorkInProgressHook().memoizedState;
+      return [
+        "boolean" === typeof booleanOrThenable
+          ? booleanOrThenable
+          : useThenable(booleanOrThenable),
+        start
+      ];
+    }
+    function useHostTransitionStatus() {
+      return readContext(HostTransitionContext);
+    }
+    function mountId() {
+      var hook = mountWorkInProgressHook(),
+        identifierPrefix = workInProgressRoot.identifierPrefix;
+      if (isHydrating) {
+        var treeId = treeContextOverflow;
+        var idWithLeadingBit = treeContextId;
+        treeId =
+          (
+            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))
+          ).toString(32) + treeId;
+        identifierPrefix = "\u00ab" + identifierPrefix + "R" + treeId;
+        treeId = localIdCounter++;
+        0 < treeId && (identifierPrefix += "H" + treeId.toString(32));
+        identifierPrefix += "\u00bb";
+      } else
+        (treeId = globalClientIdCounter++),
+          (identifierPrefix =
+            "\u00ab" + identifierPrefix + "r" + treeId.toString(32) + "\u00bb");
+      return (hook.memoizedState = identifierPrefix);
+    }
+    function mountRefresh() {
+      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(
+        null,
+        currentlyRenderingFiber
+      ));
+    }
+    function refreshCache(fiber, seedKey) {
+      for (var provider = fiber.return; null !== provider; ) {
+        switch (provider.tag) {
+          case 24:
+          case 3:
+            var lane = requestUpdateLane(provider);
+            fiber = createUpdate(lane);
+            var root = enqueueUpdate(provider, fiber, lane);
+            null !== root &&
+              (scheduleUpdateOnFiber(root, provider, lane),
+              entangleTransitions(root, provider, lane));
+            provider = createCache();
+            null !== seedKey &&
+              void 0 !== seedKey &&
+              null !== root &&
+              console.error(
+                "The seed argument is not enabled outside experimental channels."
+              );
+            fiber.payload = { cache: provider };
+            return;
+        }
+        provider = provider.return;
+      }
+    }
+    function dispatchReducerAction(fiber, queue, action) {
+      var args = arguments;
+      "function" === typeof args[3] &&
+        console.error(
+          "State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."
+        );
+      args = requestUpdateLane(fiber);
+      var update = {
+        lane: args,
+        revertLane: 0,
+        action: action,
+        hasEagerState: !1,
+        eagerState: null,
+        next: null
+      };
+      isRenderPhaseUpdate(fiber)
+        ? enqueueRenderPhaseUpdate(queue, update)
+        : ((update = enqueueConcurrentHookUpdate(fiber, queue, update, args)),
+          null !== update &&
+            (scheduleUpdateOnFiber(update, fiber, args),
+            entangleTransitionUpdate(update, queue, args)));
+      markStateUpdateScheduled(fiber, args);
+    }
+    function dispatchSetState(fiber, queue, action) {
+      var args = arguments;
+      "function" === typeof args[3] &&
+        console.error(
+          "State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."
+        );
+      args = requestUpdateLane(fiber);
+      dispatchSetStateInternal(fiber, queue, action, args);
+      markStateUpdateScheduled(fiber, args);
+    }
+    function dispatchSetStateInternal(fiber, queue, action, lane) {
+      var update = {
+        lane: lane,
+        revertLane: 0,
+        action: action,
+        hasEagerState: !1,
+        eagerState: null,
+        next: null
+      };
+      if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);
+      else {
+        var alternate = fiber.alternate;
+        if (
+          0 === fiber.lanes &&
+          (null === alternate || 0 === alternate.lanes) &&
+          ((alternate = queue.lastRenderedReducer), null !== alternate)
+        ) {
+          var prevDispatcher = ReactSharedInternals.H;
+          ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+          try {
+            var currentState = queue.lastRenderedState,
+              eagerState = alternate(currentState, action);
+            update.hasEagerState = !0;
+            update.eagerState = eagerState;
+            if (objectIs(eagerState, currentState))
+              return (
+                enqueueUpdate$1(fiber, queue, update, 0),
+                null === workInProgressRoot &&
+                  finishQueueingConcurrentUpdates(),
+                !1
+              );
+          } catch (error) {
+          } finally {
+            ReactSharedInternals.H = prevDispatcher;
+          }
+        }
+        action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);
+        if (null !== action)
+          return (
+            scheduleUpdateOnFiber(action, fiber, lane),
+            entangleTransitionUpdate(action, queue, lane),
+            !0
+          );
+      }
+      return !1;
+    }
+    function dispatchOptimisticSetState(
+      fiber,
+      throwIfDuringRender,
+      queue,
+      action
+    ) {
+      null === ReactSharedInternals.T &&
+        0 === currentEntangledLane &&
+        console.error(
+          "An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition."
+        );
+      action = {
+        lane: 2,
+        revertLane: requestTransitionLane(),
+        action: action,
+        hasEagerState: !1,
+        eagerState: null,
+        next: null
+      };
+      if (isRenderPhaseUpdate(fiber)) {
+        if (throwIfDuringRender)
+          throw Error("Cannot update optimistic state while rendering.");
+        console.error("Cannot call startTransition while rendering.");
+      } else
+        (throwIfDuringRender = enqueueConcurrentHookUpdate(
+          fiber,
+          queue,
+          action,
+          2
+        )),
+          null !== throwIfDuringRender &&
+            scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);
+      markStateUpdateScheduled(fiber, 2);
+    }
+    function isRenderPhaseUpdate(fiber) {
+      var alternate = fiber.alternate;
+      return (
+        fiber === currentlyRenderingFiber ||
+        (null !== alternate && alternate === currentlyRenderingFiber)
+      );
+    }
+    function enqueueRenderPhaseUpdate(queue, update) {
+      didScheduleRenderPhaseUpdateDuringThisPass =
+        didScheduleRenderPhaseUpdate = !0;
+      var pending = queue.pending;
+      null === pending
+        ? (update.next = update)
+        : ((update.next = pending.next), (pending.next = update));
+      queue.pending = update;
+    }
+    function entangleTransitionUpdate(root, queue, lane) {
+      if (0 !== (lane & 4194048)) {
+        var queueLanes = queue.lanes;
+        queueLanes &= root.pendingLanes;
+        lane |= queueLanes;
+        queue.lanes = lane;
+        markRootEntangled(root, lane);
+      }
+    }
+    function pushDebugInfo(debugInfo) {
+      var previousDebugInfo = currentDebugInfo;
+      null != debugInfo &&
+        (currentDebugInfo =
+          null === previousDebugInfo
+            ? debugInfo
+            : previousDebugInfo.concat(debugInfo));
+      return previousDebugInfo;
+    }
+    function validateFragmentProps(element, fiber, returnFiber) {
+      for (var keys = Object.keys(element.props), i = 0; i < keys.length; i++) {
+        var key = keys[i];
+        if ("children" !== key && "key" !== key) {
+          null === fiber &&
+            ((fiber = createFiberFromElement(element, returnFiber.mode, 0)),
+            (fiber._debugInfo = currentDebugInfo),
+            (fiber.return = returnFiber));
+          runWithFiberInDEV(
+            fiber,
+            function (erroredKey) {
+              console.error(
+                "Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",
+                erroredKey
+              );
+            },
+            key
+          );
+          break;
+        }
+      }
+    }
+    function unwrapThenable(thenable) {
+      var index = thenableIndexCounter;
+      thenableIndexCounter += 1;
+      null === thenableState && (thenableState = createThenableState());
+      return trackUsedThenable(thenableState, thenable, index);
+    }
+    function coerceRef(workInProgress, element) {
+      element = element.props.ref;
+      workInProgress.ref = void 0 !== element ? element : null;
+    }
+    function throwOnInvalidObjectType(returnFiber, newChild) {
+      if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)
+        throw Error(
+          'A React Element from an older version of React was rendered. This is not supported. It can happen if:\n- Multiple copies of the "react" package is used.\n- A library pre-bundled an old copy of "react" or "react/jsx-runtime".\n- A compiler tries to "inline" JSX instead of using the runtime.'
+        );
+      returnFiber = Object.prototype.toString.call(newChild);
+      throw Error(
+        "Objects are not valid as a React child (found: " +
+          ("[object Object]" === returnFiber
+            ? "object with keys {" + Object.keys(newChild).join(", ") + "}"
+            : returnFiber) +
+          "). If you meant to render a collection of children, use an array instead."
+      );
+    }
+    function warnOnFunctionType(returnFiber, invalidChild) {
+      var parentName = getComponentNameFromFiber(returnFiber) || "Component";
+      ownerHasFunctionTypeWarning[parentName] ||
+        ((ownerHasFunctionTypeWarning[parentName] = !0),
+        (invalidChild =
+          invalidChild.displayName || invalidChild.name || "Component"),
+        3 === returnFiber.tag
+          ? console.error(
+              "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\n  root.render(%s)",
+              invalidChild,
+              invalidChild,
+              invalidChild
+            )
+          : console.error(
+              "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\n  <%s>{%s}</%s>",
+              invalidChild,
+              invalidChild,
+              parentName,
+              invalidChild,
+              parentName
+            ));
+    }
+    function warnOnSymbolType(returnFiber, invalidChild) {
+      var parentName = getComponentNameFromFiber(returnFiber) || "Component";
+      ownerHasSymbolTypeWarning[parentName] ||
+        ((ownerHasSymbolTypeWarning[parentName] = !0),
+        (invalidChild = String(invalidChild)),
+        3 === returnFiber.tag
+          ? console.error(
+              "Symbols are not valid as a React child.\n  root.render(%s)",
+              invalidChild
+            )
+          : console.error(
+              "Symbols are not valid as a React child.\n  <%s>%s</%s>",
+              parentName,
+              invalidChild,
+              parentName
+            ));
+    }
+    function createChildReconciler(shouldTrackSideEffects) {
+      function deleteChild(returnFiber, childToDelete) {
+        if (shouldTrackSideEffects) {
+          var deletions = returnFiber.deletions;
+          null === deletions
+            ? ((returnFiber.deletions = [childToDelete]),
+              (returnFiber.flags |= 16))
+            : deletions.push(childToDelete);
+        }
+      }
+      function deleteRemainingChildren(returnFiber, currentFirstChild) {
+        if (!shouldTrackSideEffects) return null;
+        for (; null !== currentFirstChild; )
+          deleteChild(returnFiber, currentFirstChild),
+            (currentFirstChild = currentFirstChild.sibling);
+        return null;
+      }
+      function mapRemainingChildren(currentFirstChild) {
+        for (var existingChildren = new Map(); null !== currentFirstChild; )
+          null !== currentFirstChild.key
+            ? existingChildren.set(currentFirstChild.key, currentFirstChild)
+            : existingChildren.set(currentFirstChild.index, currentFirstChild),
+            (currentFirstChild = currentFirstChild.sibling);
+        return existingChildren;
+      }
+      function useFiber(fiber, pendingProps) {
+        fiber = createWorkInProgress(fiber, pendingProps);
+        fiber.index = 0;
+        fiber.sibling = null;
+        return fiber;
+      }
+      function placeChild(newFiber, lastPlacedIndex, newIndex) {
+        newFiber.index = newIndex;
+        if (!shouldTrackSideEffects)
+          return (newFiber.flags |= 1048576), lastPlacedIndex;
+        newIndex = newFiber.alternate;
+        if (null !== newIndex)
+          return (
+            (newIndex = newIndex.index),
+            newIndex < lastPlacedIndex
+              ? ((newFiber.flags |= 67108866), lastPlacedIndex)
+              : newIndex
+          );
+        newFiber.flags |= 67108866;
+        return lastPlacedIndex;
+      }
+      function placeSingleChild(newFiber) {
+        shouldTrackSideEffects &&
+          null === newFiber.alternate &&
+          (newFiber.flags |= 67108866);
+        return newFiber;
+      }
+      function updateTextNode(returnFiber, current, textContent, lanes) {
+        if (null === current || 6 !== current.tag)
+          return (
+            (current = createFiberFromText(
+              textContent,
+              returnFiber.mode,
+              lanes
+            )),
+            (current.return = returnFiber),
+            (current._debugOwner = returnFiber),
+            (current._debugTask = returnFiber._debugTask),
+            (current._debugInfo = currentDebugInfo),
+            current
+          );
+        current = useFiber(current, textContent);
+        current.return = returnFiber;
+        current._debugInfo = currentDebugInfo;
+        return current;
+      }
+      function updateElement(returnFiber, current, element, lanes) {
+        var elementType = element.type;
+        if (elementType === REACT_FRAGMENT_TYPE)
+          return (
+            (current = updateFragment(
+              returnFiber,
+              current,
+              element.props.children,
+              lanes,
+              element.key
+            )),
+            validateFragmentProps(element, current, returnFiber),
+            current
+          );
+        if (
+          null !== current &&
+          (current.elementType === elementType ||
+            isCompatibleFamilyForHotReloading(current, element) ||
+            ("object" === typeof elementType &&
+              null !== elementType &&
+              elementType.$$typeof === REACT_LAZY_TYPE &&
+              callLazyInitInDEV(elementType) === current.type))
+        )
+          return (
+            (current = useFiber(current, element.props)),
+            coerceRef(current, element),
+            (current.return = returnFiber),
+            (current._debugOwner = element._owner),
+            (current._debugInfo = currentDebugInfo),
+            current
+          );
+        current = createFiberFromElement(element, returnFiber.mode, lanes);
+        coerceRef(current, element);
+        current.return = returnFiber;
+        current._debugInfo = currentDebugInfo;
+        return current;
+      }
+      function updatePortal(returnFiber, current, portal, lanes) {
+        if (
+          null === current ||
+          4 !== current.tag ||
+          current.stateNode.containerInfo !== portal.containerInfo ||
+          current.stateNode.implementation !== portal.implementation
+        )
+          return (
+            (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),
+            (current.return = returnFiber),
+            (current._debugInfo = currentDebugInfo),
+            current
+          );
+        current = useFiber(current, portal.children || []);
+        current.return = returnFiber;
+        current._debugInfo = currentDebugInfo;
+        return current;
+      }
+      function updateFragment(returnFiber, current, fragment, lanes, key) {
+        if (null === current || 7 !== current.tag)
+          return (
+            (current = createFiberFromFragment(
+              fragment,
+              returnFiber.mode,
+              lanes,
+              key
+            )),
+            (current.return = returnFiber),
+            (current._debugOwner = returnFiber),
+            (current._debugTask = returnFiber._debugTask),
+            (current._debugInfo = currentDebugInfo),
+            current
+          );
+        current = useFiber(current, fragment);
+        current.return = returnFiber;
+        current._debugInfo = currentDebugInfo;
+        return current;
+      }
+      function createChild(returnFiber, newChild, lanes) {
+        if (
+          ("string" === typeof newChild && "" !== newChild) ||
+          "number" === typeof newChild ||
+          "bigint" === typeof newChild
+        )
+          return (
+            (newChild = createFiberFromText(
+              "" + newChild,
+              returnFiber.mode,
+              lanes
+            )),
+            (newChild.return = returnFiber),
+            (newChild._debugOwner = returnFiber),
+            (newChild._debugTask = returnFiber._debugTask),
+            (newChild._debugInfo = currentDebugInfo),
+            newChild
+          );
+        if ("object" === typeof newChild && null !== newChild) {
+          switch (newChild.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              return (
+                (lanes = createFiberFromElement(
+                  newChild,
+                  returnFiber.mode,
+                  lanes
+                )),
+                coerceRef(lanes, newChild),
+                (lanes.return = returnFiber),
+                (returnFiber = pushDebugInfo(newChild._debugInfo)),
+                (lanes._debugInfo = currentDebugInfo),
+                (currentDebugInfo = returnFiber),
+                lanes
+              );
+            case REACT_PORTAL_TYPE:
+              return (
+                (newChild = createFiberFromPortal(
+                  newChild,
+                  returnFiber.mode,
+                  lanes
+                )),
+                (newChild.return = returnFiber),
+                (newChild._debugInfo = currentDebugInfo),
+                newChild
+              );
+            case REACT_LAZY_TYPE:
+              var _prevDebugInfo = pushDebugInfo(newChild._debugInfo);
+              newChild = callLazyInitInDEV(newChild);
+              returnFiber = createChild(returnFiber, newChild, lanes);
+              currentDebugInfo = _prevDebugInfo;
+              return returnFiber;
+          }
+          if (isArrayImpl(newChild) || getIteratorFn(newChild))
+            return (
+              (lanes = createFiberFromFragment(
+                newChild,
+                returnFiber.mode,
+                lanes,
+                null
+              )),
+              (lanes.return = returnFiber),
+              (lanes._debugOwner = returnFiber),
+              (lanes._debugTask = returnFiber._debugTask),
+              (returnFiber = pushDebugInfo(newChild._debugInfo)),
+              (lanes._debugInfo = currentDebugInfo),
+              (currentDebugInfo = returnFiber),
+              lanes
+            );
+          if ("function" === typeof newChild.then)
+            return (
+              (_prevDebugInfo = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = createChild(
+                returnFiber,
+                unwrapThenable(newChild),
+                lanes
+              )),
+              (currentDebugInfo = _prevDebugInfo),
+              returnFiber
+            );
+          if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+            return createChild(
+              returnFiber,
+              readContextDuringReconciliation(returnFiber, newChild),
+              lanes
+            );
+          throwOnInvalidObjectType(returnFiber, newChild);
+        }
+        "function" === typeof newChild &&
+          warnOnFunctionType(returnFiber, newChild);
+        "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild);
+        return null;
+      }
+      function updateSlot(returnFiber, oldFiber, newChild, lanes) {
+        var key = null !== oldFiber ? oldFiber.key : null;
+        if (
+          ("string" === typeof newChild && "" !== newChild) ||
+          "number" === typeof newChild ||
+          "bigint" === typeof newChild
+        )
+          return null !== key
+            ? null
+            : updateTextNode(returnFiber, oldFiber, "" + newChild, lanes);
+        if ("object" === typeof newChild && null !== newChild) {
+          switch (newChild.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              return newChild.key === key
+                ? ((key = pushDebugInfo(newChild._debugInfo)),
+                  (returnFiber = updateElement(
+                    returnFiber,
+                    oldFiber,
+                    newChild,
+                    lanes
+                  )),
+                  (currentDebugInfo = key),
+                  returnFiber)
+                : null;
+            case REACT_PORTAL_TYPE:
+              return newChild.key === key
+                ? updatePortal(returnFiber, oldFiber, newChild, lanes)
+                : null;
+            case REACT_LAZY_TYPE:
+              return (
+                (key = pushDebugInfo(newChild._debugInfo)),
+                (newChild = callLazyInitInDEV(newChild)),
+                (returnFiber = updateSlot(
+                  returnFiber,
+                  oldFiber,
+                  newChild,
+                  lanes
+                )),
+                (currentDebugInfo = key),
+                returnFiber
+              );
+          }
+          if (isArrayImpl(newChild) || getIteratorFn(newChild)) {
+            if (null !== key) return null;
+            key = pushDebugInfo(newChild._debugInfo);
+            returnFiber = updateFragment(
+              returnFiber,
+              oldFiber,
+              newChild,
+              lanes,
+              null
+            );
+            currentDebugInfo = key;
+            return returnFiber;
+          }
+          if ("function" === typeof newChild.then)
+            return (
+              (key = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = updateSlot(
+                returnFiber,
+                oldFiber,
+                unwrapThenable(newChild),
+                lanes
+              )),
+              (currentDebugInfo = key),
+              returnFiber
+            );
+          if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+            return updateSlot(
+              returnFiber,
+              oldFiber,
+              readContextDuringReconciliation(returnFiber, newChild),
+              lanes
+            );
+          throwOnInvalidObjectType(returnFiber, newChild);
+        }
+        "function" === typeof newChild &&
+          warnOnFunctionType(returnFiber, newChild);
+        "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild);
+        return null;
+      }
+      function updateFromMap(
+        existingChildren,
+        returnFiber,
+        newIdx,
+        newChild,
+        lanes
+      ) {
+        if (
+          ("string" === typeof newChild && "" !== newChild) ||
+          "number" === typeof newChild ||
+          "bigint" === typeof newChild
+        )
+          return (
+            (existingChildren = existingChildren.get(newIdx) || null),
+            updateTextNode(returnFiber, existingChildren, "" + newChild, lanes)
+          );
+        if ("object" === typeof newChild && null !== newChild) {
+          switch (newChild.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              return (
+                (newIdx =
+                  existingChildren.get(
+                    null === newChild.key ? newIdx : newChild.key
+                  ) || null),
+                (existingChildren = pushDebugInfo(newChild._debugInfo)),
+                (returnFiber = updateElement(
+                  returnFiber,
+                  newIdx,
+                  newChild,
+                  lanes
+                )),
+                (currentDebugInfo = existingChildren),
+                returnFiber
+              );
+            case REACT_PORTAL_TYPE:
+              return (
+                (existingChildren =
+                  existingChildren.get(
+                    null === newChild.key ? newIdx : newChild.key
+                  ) || null),
+                updatePortal(returnFiber, existingChildren, newChild, lanes)
+              );
+            case REACT_LAZY_TYPE:
+              var _prevDebugInfo7 = pushDebugInfo(newChild._debugInfo);
+              newChild = callLazyInitInDEV(newChild);
+              returnFiber = updateFromMap(
+                existingChildren,
+                returnFiber,
+                newIdx,
+                newChild,
+                lanes
+              );
+              currentDebugInfo = _prevDebugInfo7;
+              return returnFiber;
+          }
+          if (isArrayImpl(newChild) || getIteratorFn(newChild))
+            return (
+              (newIdx = existingChildren.get(newIdx) || null),
+              (existingChildren = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = updateFragment(
+                returnFiber,
+                newIdx,
+                newChild,
+                lanes,
+                null
+              )),
+              (currentDebugInfo = existingChildren),
+              returnFiber
+            );
+          if ("function" === typeof newChild.then)
+            return (
+              (_prevDebugInfo7 = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = updateFromMap(
+                existingChildren,
+                returnFiber,
+                newIdx,
+                unwrapThenable(newChild),
+                lanes
+              )),
+              (currentDebugInfo = _prevDebugInfo7),
+              returnFiber
+            );
+          if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+            return updateFromMap(
+              existingChildren,
+              returnFiber,
+              newIdx,
+              readContextDuringReconciliation(returnFiber, newChild),
+              lanes
+            );
+          throwOnInvalidObjectType(returnFiber, newChild);
+        }
+        "function" === typeof newChild &&
+          warnOnFunctionType(returnFiber, newChild);
+        "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild);
+        return null;
+      }
+      function warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys) {
+        if ("object" !== typeof child || null === child) return knownKeys;
+        switch (child.$$typeof) {
+          case REACT_ELEMENT_TYPE:
+          case REACT_PORTAL_TYPE:
+            warnForMissingKey(returnFiber, workInProgress, child);
+            var key = child.key;
+            if ("string" !== typeof key) break;
+            if (null === knownKeys) {
+              knownKeys = new Set();
+              knownKeys.add(key);
+              break;
+            }
+            if (!knownKeys.has(key)) {
+              knownKeys.add(key);
+              break;
+            }
+            runWithFiberInDEV(workInProgress, function () {
+              console.error(
+                "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted \u2014 the behavior is unsupported and could change in a future version.",
+                key
+              );
+            });
+            break;
+          case REACT_LAZY_TYPE:
+            (child = callLazyInitInDEV(child)),
+              warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys);
+        }
+        return knownKeys;
+      }
+      function reconcileChildrenArray(
+        returnFiber,
+        currentFirstChild,
+        newChildren,
+        lanes
+      ) {
+        for (
+          var knownKeys = null,
+            resultingFirstChild = null,
+            previousNewFiber = null,
+            oldFiber = currentFirstChild,
+            newIdx = (currentFirstChild = 0),
+            nextOldFiber = null;
+          null !== oldFiber && newIdx < newChildren.length;
+          newIdx++
+        ) {
+          oldFiber.index > newIdx
+            ? ((nextOldFiber = oldFiber), (oldFiber = null))
+            : (nextOldFiber = oldFiber.sibling);
+          var newFiber = updateSlot(
+            returnFiber,
+            oldFiber,
+            newChildren[newIdx],
+            lanes
+          );
+          if (null === newFiber) {
+            null === oldFiber && (oldFiber = nextOldFiber);
+            break;
+          }
+          knownKeys = warnOnInvalidKey(
+            returnFiber,
+            newFiber,
+            newChildren[newIdx],
+            knownKeys
+          );
+          shouldTrackSideEffects &&
+            oldFiber &&
+            null === newFiber.alternate &&
+            deleteChild(returnFiber, oldFiber);
+          currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);
+          null === previousNewFiber
+            ? (resultingFirstChild = newFiber)
+            : (previousNewFiber.sibling = newFiber);
+          previousNewFiber = newFiber;
+          oldFiber = nextOldFiber;
+        }
+        if (newIdx === newChildren.length)
+          return (
+            deleteRemainingChildren(returnFiber, oldFiber),
+            isHydrating && pushTreeFork(returnFiber, newIdx),
+            resultingFirstChild
+          );
+        if (null === oldFiber) {
+          for (; newIdx < newChildren.length; newIdx++)
+            (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),
+              null !== oldFiber &&
+                ((knownKeys = warnOnInvalidKey(
+                  returnFiber,
+                  oldFiber,
+                  newChildren[newIdx],
+                  knownKeys
+                )),
+                (currentFirstChild = placeChild(
+                  oldFiber,
+                  currentFirstChild,
+                  newIdx
+                )),
+                null === previousNewFiber
+                  ? (resultingFirstChild = oldFiber)
+                  : (previousNewFiber.sibling = oldFiber),
+                (previousNewFiber = oldFiber));
+          isHydrating && pushTreeFork(returnFiber, newIdx);
+          return resultingFirstChild;
+        }
+        for (
+          oldFiber = mapRemainingChildren(oldFiber);
+          newIdx < newChildren.length;
+          newIdx++
+        )
+          (nextOldFiber = updateFromMap(
+            oldFiber,
+            returnFiber,
+            newIdx,
+            newChildren[newIdx],
+            lanes
+          )),
+            null !== nextOldFiber &&
+              ((knownKeys = warnOnInvalidKey(
+                returnFiber,
+                nextOldFiber,
+                newChildren[newIdx],
+                knownKeys
+              )),
+              shouldTrackSideEffects &&
+                null !== nextOldFiber.alternate &&
+                oldFiber.delete(
+                  null === nextOldFiber.key ? newIdx : nextOldFiber.key
+                ),
+              (currentFirstChild = placeChild(
+                nextOldFiber,
+                currentFirstChild,
+                newIdx
+              )),
+              null === previousNewFiber
+                ? (resultingFirstChild = nextOldFiber)
+                : (previousNewFiber.sibling = nextOldFiber),
+              (previousNewFiber = nextOldFiber));
+        shouldTrackSideEffects &&
+          oldFiber.forEach(function (child) {
+            return deleteChild(returnFiber, child);
+          });
+        isHydrating && pushTreeFork(returnFiber, newIdx);
+        return resultingFirstChild;
+      }
+      function reconcileChildrenIterator(
+        returnFiber,
+        currentFirstChild,
+        newChildren,
+        lanes
+      ) {
+        if (null == newChildren)
+          throw Error("An iterable object provided no iterator.");
+        for (
+          var resultingFirstChild = null,
+            previousNewFiber = null,
+            oldFiber = currentFirstChild,
+            newIdx = (currentFirstChild = 0),
+            nextOldFiber = null,
+            knownKeys = null,
+            step = newChildren.next();
+          null !== oldFiber && !step.done;
+          newIdx++, step = newChildren.next()
+        ) {
+          oldFiber.index > newIdx
+            ? ((nextOldFiber = oldFiber), (oldFiber = null))
+            : (nextOldFiber = oldFiber.sibling);
+          var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);
+          if (null === newFiber) {
+            null === oldFiber && (oldFiber = nextOldFiber);
+            break;
+          }
+          knownKeys = warnOnInvalidKey(
+            returnFiber,
+            newFiber,
+            step.value,
+            knownKeys
+          );
+          shouldTrackSideEffects &&
+            oldFiber &&
+            null === newFiber.alternate &&
+            deleteChild(returnFiber, oldFiber);
+          currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);
+          null === previousNewFiber
+            ? (resultingFirstChild = newFiber)
+            : (previousNewFiber.sibling = newFiber);
+          previousNewFiber = newFiber;
+          oldFiber = nextOldFiber;
+        }
+        if (step.done)
+          return (
+            deleteRemainingChildren(returnFiber, oldFiber),
+            isHydrating && pushTreeFork(returnFiber, newIdx),
+            resultingFirstChild
+          );
+        if (null === oldFiber) {
+          for (; !step.done; newIdx++, step = newChildren.next())
+            (oldFiber = createChild(returnFiber, step.value, lanes)),
+              null !== oldFiber &&
+                ((knownKeys = warnOnInvalidKey(
+                  returnFiber,
+                  oldFiber,
+                  step.value,
+                  knownKeys
+                )),
+                (currentFirstChild = placeChild(
+                  oldFiber,
+                  currentFirstChild,
+                  newIdx
+                )),
+                null === previousNewFiber
+                  ? (resultingFirstChild = oldFiber)
+                  : (previousNewFiber.sibling = oldFiber),
+                (previousNewFiber = oldFiber));
+          isHydrating && pushTreeFork(returnFiber, newIdx);
+          return resultingFirstChild;
+        }
+        for (
+          oldFiber = mapRemainingChildren(oldFiber);
+          !step.done;
+          newIdx++, step = newChildren.next()
+        )
+          (nextOldFiber = updateFromMap(
+            oldFiber,
+            returnFiber,
+            newIdx,
+            step.value,
+            lanes
+          )),
+            null !== nextOldFiber &&
+              ((knownKeys = warnOnInvalidKey(
+                returnFiber,
+                nextOldFiber,
+                step.value,
+                knownKeys
+              )),
+              shouldTrackSideEffects &&
+                null !== nextOldFiber.alternate &&
+                oldFiber.delete(
+                  null === nextOldFiber.key ? newIdx : nextOldFiber.key
+                ),
+              (currentFirstChild = placeChild(
+                nextOldFiber,
+                currentFirstChild,
+                newIdx
+              )),
+              null === previousNewFiber
+                ? (resultingFirstChild = nextOldFiber)
+                : (previousNewFiber.sibling = nextOldFiber),
+              (previousNewFiber = nextOldFiber));
+        shouldTrackSideEffects &&
+          oldFiber.forEach(function (child) {
+            return deleteChild(returnFiber, child);
+          });
+        isHydrating && pushTreeFork(returnFiber, newIdx);
+        return resultingFirstChild;
+      }
+      function reconcileChildFibersImpl(
+        returnFiber,
+        currentFirstChild,
+        newChild,
+        lanes
+      ) {
+        "object" === typeof newChild &&
+          null !== newChild &&
+          newChild.type === REACT_FRAGMENT_TYPE &&
+          null === newChild.key &&
+          (validateFragmentProps(newChild, null, returnFiber),
+          (newChild = newChild.props.children));
+        if ("object" === typeof newChild && null !== newChild) {
+          switch (newChild.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              var prevDebugInfo = pushDebugInfo(newChild._debugInfo);
+              a: {
+                for (var key = newChild.key; null !== currentFirstChild; ) {
+                  if (currentFirstChild.key === key) {
+                    key = newChild.type;
+                    if (key === REACT_FRAGMENT_TYPE) {
+                      if (7 === currentFirstChild.tag) {
+                        deleteRemainingChildren(
+                          returnFiber,
+                          currentFirstChild.sibling
+                        );
+                        lanes = useFiber(
+                          currentFirstChild,
+                          newChild.props.children
+                        );
+                        lanes.return = returnFiber;
+                        lanes._debugOwner = newChild._owner;
+                        lanes._debugInfo = currentDebugInfo;
+                        validateFragmentProps(newChild, lanes, returnFiber);
+                        returnFiber = lanes;
+                        break a;
+                      }
+                    } else if (
+                      currentFirstChild.elementType === key ||
+                      isCompatibleFamilyForHotReloading(
+                        currentFirstChild,
+                        newChild
+                      ) ||
+                      ("object" === typeof key &&
+                        null !== key &&
+                        key.$$typeof === REACT_LAZY_TYPE &&
+                        callLazyInitInDEV(key) === currentFirstChild.type)
+                    ) {
+                      deleteRemainingChildren(
+                        returnFiber,
+                        currentFirstChild.sibling
+                      );
+                      lanes = useFiber(currentFirstChild, newChild.props);
+                      coerceRef(lanes, newChild);
+                      lanes.return = returnFiber;
+                      lanes._debugOwner = newChild._owner;
+                      lanes._debugInfo = currentDebugInfo;
+                      returnFiber = lanes;
+                      break a;
+                    }
+                    deleteRemainingChildren(returnFiber, currentFirstChild);
+                    break;
+                  } else deleteChild(returnFiber, currentFirstChild);
+                  currentFirstChild = currentFirstChild.sibling;
+                }
+                newChild.type === REACT_FRAGMENT_TYPE
+                  ? ((lanes = createFiberFromFragment(
+                      newChild.props.children,
+                      returnFiber.mode,
+                      lanes,
+                      newChild.key
+                    )),
+                    (lanes.return = returnFiber),
+                    (lanes._debugOwner = returnFiber),
+                    (lanes._debugTask = returnFiber._debugTask),
+                    (lanes._debugInfo = currentDebugInfo),
+                    validateFragmentProps(newChild, lanes, returnFiber),
+                    (returnFiber = lanes))
+                  : ((lanes = createFiberFromElement(
+                      newChild,
+                      returnFiber.mode,
+                      lanes
+                    )),
+                    coerceRef(lanes, newChild),
+                    (lanes.return = returnFiber),
+                    (lanes._debugInfo = currentDebugInfo),
+                    (returnFiber = lanes));
+              }
+              returnFiber = placeSingleChild(returnFiber);
+              currentDebugInfo = prevDebugInfo;
+              return returnFiber;
+            case REACT_PORTAL_TYPE:
+              a: {
+                prevDebugInfo = newChild;
+                for (
+                  newChild = prevDebugInfo.key;
+                  null !== currentFirstChild;
+
+                ) {
+                  if (currentFirstChild.key === newChild)
+                    if (
+                      4 === currentFirstChild.tag &&
+                      currentFirstChild.stateNode.containerInfo ===
+                        prevDebugInfo.containerInfo &&
+                      currentFirstChild.stateNode.implementation ===
+                        prevDebugInfo.implementation
+                    ) {
+                      deleteRemainingChildren(
+                        returnFiber,
+                        currentFirstChild.sibling
+                      );
+                      lanes = useFiber(
+                        currentFirstChild,
+                        prevDebugInfo.children || []
+                      );
+                      lanes.return = returnFiber;
+                      returnFiber = lanes;
+                      break a;
+                    } else {
+                      deleteRemainingChildren(returnFiber, currentFirstChild);
+                      break;
+                    }
+                  else deleteChild(returnFiber, currentFirstChild);
+                  currentFirstChild = currentFirstChild.sibling;
+                }
+                lanes = createFiberFromPortal(
+                  prevDebugInfo,
+                  returnFiber.mode,
+                  lanes
+                );
+                lanes.return = returnFiber;
+                returnFiber = lanes;
+              }
+              return placeSingleChild(returnFiber);
+            case REACT_LAZY_TYPE:
+              return (
+                (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),
+                (newChild = callLazyInitInDEV(newChild)),
+                (returnFiber = reconcileChildFibersImpl(
+                  returnFiber,
+                  currentFirstChild,
+                  newChild,
+                  lanes
+                )),
+                (currentDebugInfo = prevDebugInfo),
+                returnFiber
+              );
+          }
+          if (isArrayImpl(newChild))
+            return (
+              (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = reconcileChildrenArray(
+                returnFiber,
+                currentFirstChild,
+                newChild,
+                lanes
+              )),
+              (currentDebugInfo = prevDebugInfo),
+              returnFiber
+            );
+          if (getIteratorFn(newChild)) {
+            prevDebugInfo = pushDebugInfo(newChild._debugInfo);
+            key = getIteratorFn(newChild);
+            if ("function" !== typeof key)
+              throw Error(
+                "An object is not an iterable. This error is likely caused by a bug in React. Please file an issue."
+              );
+            var newChildren = key.call(newChild);
+            if (newChildren === newChild) {
+              if (
+                0 !== returnFiber.tag ||
+                "[object GeneratorFunction]" !==
+                  Object.prototype.toString.call(returnFiber.type) ||
+                "[object Generator]" !==
+                  Object.prototype.toString.call(newChildren)
+              )
+                didWarnAboutGenerators ||
+                  console.error(
+                    "Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."
+                  ),
+                  (didWarnAboutGenerators = !0);
+            } else
+              newChild.entries !== key ||
+                didWarnAboutMaps ||
+                (console.error(
+                  "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+                ),
+                (didWarnAboutMaps = !0));
+            returnFiber = reconcileChildrenIterator(
+              returnFiber,
+              currentFirstChild,
+              newChildren,
+              lanes
+            );
+            currentDebugInfo = prevDebugInfo;
+            return returnFiber;
+          }
+          if ("function" === typeof newChild.then)
+            return (
+              (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = reconcileChildFibersImpl(
+                returnFiber,
+                currentFirstChild,
+                unwrapThenable(newChild),
+                lanes
+              )),
+              (currentDebugInfo = prevDebugInfo),
+              returnFiber
+            );
+          if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+            return reconcileChildFibersImpl(
+              returnFiber,
+              currentFirstChild,
+              readContextDuringReconciliation(returnFiber, newChild),
+              lanes
+            );
+          throwOnInvalidObjectType(returnFiber, newChild);
+        }
+        if (
+          ("string" === typeof newChild && "" !== newChild) ||
+          "number" === typeof newChild ||
+          "bigint" === typeof newChild
+        )
+          return (
+            (prevDebugInfo = "" + newChild),
+            null !== currentFirstChild && 6 === currentFirstChild.tag
+              ? (deleteRemainingChildren(
+                  returnFiber,
+                  currentFirstChild.sibling
+                ),
+                (lanes = useFiber(currentFirstChild, prevDebugInfo)),
+                (lanes.return = returnFiber),
+                (returnFiber = lanes))
+              : (deleteRemainingChildren(returnFiber, currentFirstChild),
+                (lanes = createFiberFromText(
+                  prevDebugInfo,
+                  returnFiber.mode,
+                  lanes
+                )),
+                (lanes.return = returnFiber),
+                (lanes._debugOwner = returnFiber),
+                (lanes._debugTask = returnFiber._debugTask),
+                (lanes._debugInfo = currentDebugInfo),
+                (returnFiber = lanes)),
+            placeSingleChild(returnFiber)
+          );
+        "function" === typeof newChild &&
+          warnOnFunctionType(returnFiber, newChild);
+        "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild);
+        return deleteRemainingChildren(returnFiber, currentFirstChild);
+      }
+      return function (returnFiber, currentFirstChild, newChild, lanes) {
+        var prevDebugInfo = currentDebugInfo;
+        currentDebugInfo = null;
+        try {
+          thenableIndexCounter = 0;
+          var firstChildFiber = reconcileChildFibersImpl(
+            returnFiber,
+            currentFirstChild,
+            newChild,
+            lanes
+          );
+          thenableState = null;
+          return firstChildFiber;
+        } catch (x) {
+          if (x === SuspenseException || x === SuspenseActionException) throw x;
+          var fiber = createFiber(29, x, null, returnFiber.mode);
+          fiber.lanes = lanes;
+          fiber.return = returnFiber;
+          var debugInfo = (fiber._debugInfo = currentDebugInfo);
+          fiber._debugOwner = returnFiber._debugOwner;
+          fiber._debugTask = returnFiber._debugTask;
+          if (null != debugInfo)
+            for (var i = debugInfo.length - 1; 0 <= i; i--)
+              if ("string" === typeof debugInfo[i].stack) {
+                fiber._debugOwner = debugInfo[i];
+                fiber._debugTask = debugInfo[i].debugTask;
+                break;
+              }
+          return fiber;
+        } finally {
+          currentDebugInfo = prevDebugInfo;
+        }
+      };
+    }
+    function pushPrimaryTreeSuspenseHandler(handler) {
+      var current = handler.alternate;
+      push(
+        suspenseStackCursor,
+        suspenseStackCursor.current & SubtreeSuspenseContextMask,
+        handler
+      );
+      push(suspenseHandlerStackCursor, handler, handler);
+      null === shellBoundary &&
+        (null === current || null !== currentTreeHiddenStackCursor.current
+          ? (shellBoundary = handler)
+          : null !== current.memoizedState && (shellBoundary = handler));
+    }
+    function pushOffscreenSuspenseHandler(fiber) {
+      if (22 === fiber.tag) {
+        if (
+          (push(suspenseStackCursor, suspenseStackCursor.current, fiber),
+          push(suspenseHandlerStackCursor, fiber, fiber),
+          null === shellBoundary)
+        ) {
+          var current = fiber.alternate;
+          null !== current &&
+            null !== current.memoizedState &&
+            (shellBoundary = fiber);
+        }
+      } else reuseSuspenseHandlerOnStack(fiber);
+    }
+    function reuseSuspenseHandlerOnStack(fiber) {
+      push(suspenseStackCursor, suspenseStackCursor.current, fiber);
+      push(
+        suspenseHandlerStackCursor,
+        suspenseHandlerStackCursor.current,
+        fiber
+      );
+    }
+    function popSuspenseHandler(fiber) {
+      pop(suspenseHandlerStackCursor, fiber);
+      shellBoundary === fiber && (shellBoundary = null);
+      pop(suspenseStackCursor, fiber);
+    }
+    function findFirstSuspended(row) {
+      for (var node = row; null !== node; ) {
+        if (13 === node.tag) {
+          var state = node.memoizedState;
+          if (
+            null !== state &&
+            ((state = state.dehydrated),
+            null === state ||
+              state.data === SUSPENSE_PENDING_START_DATA ||
+              isSuspenseInstanceFallback(state))
+          )
+            return node;
+        } else if (
+          19 === node.tag &&
+          void 0 !== node.memoizedProps.revealOrder
+        ) {
+          if (0 !== (node.flags & 128)) return node;
+        } else if (null !== node.child) {
+          node.child.return = node;
+          node = node.child;
+          continue;
+        }
+        if (node === row) break;
+        for (; null === node.sibling; ) {
+          if (null === node.return || node.return === row) return null;
+          node = node.return;
+        }
+        node.sibling.return = node.return;
+        node = node.sibling;
+      }
+      return null;
+    }
+    function warnOnInvalidCallback(callback) {
+      if (null !== callback && "function" !== typeof callback) {
+        var key = String(callback);
+        didWarnOnInvalidCallback.has(key) ||
+          (didWarnOnInvalidCallback.add(key),
+          console.error(
+            "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+            callback
+          ));
+      }
+    }
+    function applyDerivedStateFromProps(
+      workInProgress,
+      ctor,
+      getDerivedStateFromProps,
+      nextProps
+    ) {
+      var prevState = workInProgress.memoizedState,
+        partialState = getDerivedStateFromProps(nextProps, prevState);
+      if (workInProgress.mode & StrictLegacyMode) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          partialState = getDerivedStateFromProps(nextProps, prevState);
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      void 0 === partialState &&
+        ((ctor = getComponentNameFromType(ctor) || "Component"),
+        didWarnAboutUndefinedDerivedState.has(ctor) ||
+          (didWarnAboutUndefinedDerivedState.add(ctor),
+          console.error(
+            "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",
+            ctor
+          )));
+      prevState =
+        null === partialState || void 0 === partialState
+          ? prevState
+          : assign({}, prevState, partialState);
+      workInProgress.memoizedState = prevState;
+      0 === workInProgress.lanes &&
+        (workInProgress.updateQueue.baseState = prevState);
+    }
+    function checkShouldComponentUpdate(
+      workInProgress,
+      ctor,
+      oldProps,
+      newProps,
+      oldState,
+      newState,
+      nextContext
+    ) {
+      var instance = workInProgress.stateNode;
+      if ("function" === typeof instance.shouldComponentUpdate) {
+        oldProps = instance.shouldComponentUpdate(
+          newProps,
+          newState,
+          nextContext
+        );
+        if (workInProgress.mode & StrictLegacyMode) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            oldProps = instance.shouldComponentUpdate(
+              newProps,
+              newState,
+              nextContext
+            );
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+        void 0 === oldProps &&
+          console.error(
+            "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.",
+            getComponentNameFromType(ctor) || "Component"
+          );
+        return oldProps;
+      }
+      return ctor.prototype && ctor.prototype.isPureReactComponent
+        ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)
+        : !0;
+    }
+    function callComponentWillReceiveProps(
+      workInProgress,
+      instance,
+      newProps,
+      nextContext
+    ) {
+      var oldState = instance.state;
+      "function" === typeof instance.componentWillReceiveProps &&
+        instance.componentWillReceiveProps(newProps, nextContext);
+      "function" === typeof instance.UNSAFE_componentWillReceiveProps &&
+        instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);
+      instance.state !== oldState &&
+        ((workInProgress =
+          getComponentNameFromFiber(workInProgress) || "Component"),
+        didWarnAboutStateAssignmentForComponent.has(workInProgress) ||
+          (didWarnAboutStateAssignmentForComponent.add(workInProgress),
+          console.error(
+            "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+            workInProgress
+          )),
+        classComponentUpdater.enqueueReplaceState(
+          instance,
+          instance.state,
+          null
+        ));
+    }
+    function resolveClassComponentProps(Component, baseProps) {
+      var newProps = baseProps;
+      if ("ref" in baseProps) {
+        newProps = {};
+        for (var propName in baseProps)
+          "ref" !== propName && (newProps[propName] = baseProps[propName]);
+      }
+      if ((Component = Component.defaultProps)) {
+        newProps === baseProps && (newProps = assign({}, newProps));
+        for (var _propName in Component)
+          void 0 === newProps[_propName] &&
+            (newProps[_propName] = Component[_propName]);
+      }
+      return newProps;
+    }
+    function defaultOnUncaughtError(error) {
+      reportGlobalError(error);
+      console.warn(
+        "%s\n\n%s\n",
+        componentName
+          ? "An error occurred in the <" + componentName + "> component."
+          : "An error occurred in one of your React components.",
+        "Consider adding an error boundary to your tree to customize error handling behavior.\nVisit https://react.dev/link/error-boundaries to learn more about error boundaries."
+      );
+    }
+    function defaultOnCaughtError(error) {
+      var componentNameMessage = componentName
+          ? "The above error occurred in the <" + componentName + "> component."
+          : "The above error occurred in one of your React components.",
+        recreateMessage =
+          "React will try to recreate this component tree from scratch using the error boundary you provided, " +
+          ((errorBoundaryName || "Anonymous") + ".");
+      if (
+        "object" === typeof error &&
+        null !== error &&
+        "string" === typeof error.environmentName
+      ) {
+        var JSCompiler_inline_result = error.environmentName;
+        error = [
+          "%o\n\n%s\n\n%s\n",
+          error,
+          componentNameMessage,
+          recreateMessage
+        ].slice(0);
+        "string" === typeof error[0]
+          ? error.splice(
+              0,
+              1,
+              badgeFormat + error[0],
+              badgeStyle,
+              pad + JSCompiler_inline_result + pad,
+              resetStyle
+            )
+          : error.splice(
+              0,
+              0,
+              badgeFormat,
+              badgeStyle,
+              pad + JSCompiler_inline_result + pad,
+              resetStyle
+            );
+        error.unshift(console);
+        JSCompiler_inline_result = bind.apply(console.error, error);
+        JSCompiler_inline_result();
+      } else
+        console.error(
+          "%o\n\n%s\n\n%s\n",
+          error,
+          componentNameMessage,
+          recreateMessage
+        );
+    }
+    function defaultOnRecoverableError(error) {
+      reportGlobalError(error);
+    }
+    function logUncaughtError(root, errorInfo) {
+      try {
+        componentName = errorInfo.source
+          ? getComponentNameFromFiber(errorInfo.source)
+          : null;
+        errorBoundaryName = null;
+        var error = errorInfo.value;
+        if (null !== ReactSharedInternals.actQueue)
+          ReactSharedInternals.thrownErrors.push(error);
+        else {
+          var onUncaughtError = root.onUncaughtError;
+          onUncaughtError(error, { componentStack: errorInfo.stack });
+        }
+      } catch (e$5) {
+        setTimeout(function () {
+          throw e$5;
+        });
+      }
+    }
+    function logCaughtError(root, boundary, errorInfo) {
+      try {
+        componentName = errorInfo.source
+          ? getComponentNameFromFiber(errorInfo.source)
+          : null;
+        errorBoundaryName = getComponentNameFromFiber(boundary);
+        var onCaughtError = root.onCaughtError;
+        onCaughtError(errorInfo.value, {
+          componentStack: errorInfo.stack,
+          errorBoundary: 1 === boundary.tag ? boundary.stateNode : null
+        });
+      } catch (e$6) {
+        setTimeout(function () {
+          throw e$6;
+        });
+      }
+    }
+    function createRootErrorUpdate(root, errorInfo, lane) {
+      lane = createUpdate(lane);
+      lane.tag = CaptureUpdate;
+      lane.payload = { element: null };
+      lane.callback = function () {
+        runWithFiberInDEV(errorInfo.source, logUncaughtError, root, errorInfo);
+      };
+      return lane;
+    }
+    function createClassErrorUpdate(lane) {
+      lane = createUpdate(lane);
+      lane.tag = CaptureUpdate;
+      return lane;
+    }
+    function initializeClassErrorUpdate(update, root, fiber, errorInfo) {
+      var getDerivedStateFromError = fiber.type.getDerivedStateFromError;
+      if ("function" === typeof getDerivedStateFromError) {
+        var error = errorInfo.value;
+        update.payload = function () {
+          return getDerivedStateFromError(error);
+        };
+        update.callback = function () {
+          markFailedErrorBoundaryForHotReloading(fiber);
+          runWithFiberInDEV(
+            errorInfo.source,
+            logCaughtError,
+            root,
+            fiber,
+            errorInfo
+          );
+        };
+      }
+      var inst = fiber.stateNode;
+      null !== inst &&
+        "function" === typeof inst.componentDidCatch &&
+        (update.callback = function () {
+          markFailedErrorBoundaryForHotReloading(fiber);
+          runWithFiberInDEV(
+            errorInfo.source,
+            logCaughtError,
+            root,
+            fiber,
+            errorInfo
+          );
+          "function" !== typeof getDerivedStateFromError &&
+            (null === legacyErrorBoundariesThatAlreadyFailed
+              ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))
+              : legacyErrorBoundariesThatAlreadyFailed.add(this));
+          callComponentDidCatchInDEV(this, errorInfo);
+          "function" === typeof getDerivedStateFromError ||
+            (0 === (fiber.lanes & 2) &&
+              console.error(
+                "%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.",
+                getComponentNameFromFiber(fiber) || "Unknown"
+              ));
+        });
+    }
+    function throwException(
+      root,
+      returnFiber,
+      sourceFiber,
+      value,
+      rootRenderLanes
+    ) {
+      sourceFiber.flags |= 32768;
+      isDevToolsPresent && restorePendingUpdaters(root, rootRenderLanes);
+      if (
+        null !== value &&
+        "object" === typeof value &&
+        "function" === typeof value.then
+      ) {
+        returnFiber = sourceFiber.alternate;
+        null !== returnFiber &&
+          propagateParentContextChanges(
+            returnFiber,
+            sourceFiber,
+            rootRenderLanes,
+            !0
+          );
+        isHydrating && (didSuspendOrErrorDEV = !0);
+        sourceFiber = suspenseHandlerStackCursor.current;
+        if (null !== sourceFiber) {
+          switch (sourceFiber.tag) {
+            case 13:
+              return (
+                null === shellBoundary
+                  ? renderDidSuspendDelayIfPossible()
+                  : null === sourceFiber.alternate &&
+                    workInProgressRootExitStatus === RootInProgress &&
+                    (workInProgressRootExitStatus = RootSuspended),
+                (sourceFiber.flags &= -257),
+                (sourceFiber.flags |= 65536),
+                (sourceFiber.lanes = rootRenderLanes),
+                value === noopSuspenseyCommitThenable
+                  ? (sourceFiber.flags |= 16384)
+                  : ((returnFiber = sourceFiber.updateQueue),
+                    null === returnFiber
+                      ? (sourceFiber.updateQueue = new Set([value]))
+                      : returnFiber.add(value),
+                    attachPingListener(root, value, rootRenderLanes)),
+                !1
+              );
+            case 22:
+              return (
+                (sourceFiber.flags |= 65536),
+                value === noopSuspenseyCommitThenable
+                  ? (sourceFiber.flags |= 16384)
+                  : ((returnFiber = sourceFiber.updateQueue),
+                    null === returnFiber
+                      ? ((returnFiber = {
+                          transitions: null,
+                          markerInstances: null,
+                          retryQueue: new Set([value])
+                        }),
+                        (sourceFiber.updateQueue = returnFiber))
+                      : ((sourceFiber = returnFiber.retryQueue),
+                        null === sourceFiber
+                          ? (returnFiber.retryQueue = new Set([value]))
+                          : sourceFiber.add(value)),
+                    attachPingListener(root, value, rootRenderLanes)),
+                !1
+              );
+          }
+          throw Error(
+            "Unexpected Suspense handler tag (" +
+              sourceFiber.tag +
+              "). This is a bug in React."
+          );
+        }
+        attachPingListener(root, value, rootRenderLanes);
+        renderDidSuspendDelayIfPossible();
+        return !1;
+      }
+      if (isHydrating)
+        return (
+          (didSuspendOrErrorDEV = !0),
+          (returnFiber = suspenseHandlerStackCursor.current),
+          null !== returnFiber
+            ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),
+              (returnFiber.flags |= 65536),
+              (returnFiber.lanes = rootRenderLanes),
+              value !== HydrationMismatchException &&
+                queueHydrationError(
+                  createCapturedValueAtFiber(
+                    Error(
+                      "There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.",
+                      { cause: value }
+                    ),
+                    sourceFiber
+                  )
+                ))
+            : (value !== HydrationMismatchException &&
+                queueHydrationError(
+                  createCapturedValueAtFiber(
+                    Error(
+                      "There was an error while hydrating but React was able to recover by instead client rendering the entire root.",
+                      { cause: value }
+                    ),
+                    sourceFiber
+                  )
+                ),
+              (root = root.current.alternate),
+              (root.flags |= 65536),
+              (rootRenderLanes &= -rootRenderLanes),
+              (root.lanes |= rootRenderLanes),
+              (value = createCapturedValueAtFiber(value, sourceFiber)),
+              (rootRenderLanes = createRootErrorUpdate(
+                root.stateNode,
+                value,
+                rootRenderLanes
+              )),
+              enqueueCapturedUpdate(root, rootRenderLanes),
+              workInProgressRootExitStatus !== RootSuspendedWithDelay &&
+                (workInProgressRootExitStatus = RootErrored)),
+          !1
+        );
+      var error = createCapturedValueAtFiber(
+        Error(
+          "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.",
+          { cause: value }
+        ),
+        sourceFiber
+      );
+      null === workInProgressRootConcurrentErrors
+        ? (workInProgressRootConcurrentErrors = [error])
+        : workInProgressRootConcurrentErrors.push(error);
+      workInProgressRootExitStatus !== RootSuspendedWithDelay &&
+        (workInProgressRootExitStatus = RootErrored);
+      if (null === returnFiber) return !0;
+      value = createCapturedValueAtFiber(value, sourceFiber);
+      sourceFiber = returnFiber;
+      do {
+        switch (sourceFiber.tag) {
+          case 3:
+            return (
+              (sourceFiber.flags |= 65536),
+              (root = rootRenderLanes & -rootRenderLanes),
+              (sourceFiber.lanes |= root),
+              (root = createRootErrorUpdate(
+                sourceFiber.stateNode,
+                value,
+                root
+              )),
+              enqueueCapturedUpdate(sourceFiber, root),
+              !1
+            );
+          case 1:
+            if (
+              ((returnFiber = sourceFiber.type),
+              (error = sourceFiber.stateNode),
+              0 === (sourceFiber.flags & 128) &&
+                ("function" === typeof returnFiber.getDerivedStateFromError ||
+                  (null !== error &&
+                    "function" === typeof error.componentDidCatch &&
+                    (null === legacyErrorBoundariesThatAlreadyFailed ||
+                      !legacyErrorBoundariesThatAlreadyFailed.has(error)))))
+            )
+              return (
+                (sourceFiber.flags |= 65536),
+                (rootRenderLanes &= -rootRenderLanes),
+                (sourceFiber.lanes |= rootRenderLanes),
+                (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),
+                initializeClassErrorUpdate(
+                  rootRenderLanes,
+                  root,
+                  sourceFiber,
+                  value
+                ),
+                enqueueCapturedUpdate(sourceFiber, rootRenderLanes),
+                !1
+              );
+        }
+        sourceFiber = sourceFiber.return;
+      } while (null !== sourceFiber);
+      return !1;
+    }
+    function reconcileChildren(
+      current,
+      workInProgress,
+      nextChildren,
+      renderLanes
+    ) {
+      workInProgress.child =
+        null === current
+          ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)
+          : reconcileChildFibers(
+              workInProgress,
+              current.child,
+              nextChildren,
+              renderLanes
+            );
+    }
+    function updateForwardRef(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      Component = Component.render;
+      var ref = workInProgress.ref;
+      if ("ref" in nextProps) {
+        var propsWithoutRef = {};
+        for (var key in nextProps)
+          "ref" !== key && (propsWithoutRef[key] = nextProps[key]);
+      } else propsWithoutRef = nextProps;
+      prepareToReadContext(workInProgress);
+      markComponentRenderStarted(workInProgress);
+      nextProps = renderWithHooks(
+        current,
+        workInProgress,
+        Component,
+        propsWithoutRef,
+        ref,
+        renderLanes
+      );
+      key = checkDidRenderIdHook();
+      markComponentRenderStopped();
+      if (null !== current && !didReceiveUpdate)
+        return (
+          bailoutHooks(current, workInProgress, renderLanes),
+          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+        );
+      isHydrating && key && pushMaterializedTreeId(workInProgress);
+      workInProgress.flags |= 1;
+      reconcileChildren(current, workInProgress, nextProps, renderLanes);
+      return workInProgress.child;
+    }
+    function updateMemoComponent(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      if (null === current) {
+        var type = Component.type;
+        if (
+          "function" === typeof type &&
+          !shouldConstruct(type) &&
+          void 0 === type.defaultProps &&
+          null === Component.compare
+        )
+          return (
+            (Component = resolveFunctionForHotReloading(type)),
+            (workInProgress.tag = 15),
+            (workInProgress.type = Component),
+            validateFunctionComponentInDev(workInProgress, type),
+            updateSimpleMemoComponent(
+              current,
+              workInProgress,
+              Component,
+              nextProps,
+              renderLanes
+            )
+          );
+        current = createFiberFromTypeAndProps(
+          Component.type,
+          null,
+          nextProps,
+          workInProgress,
+          workInProgress.mode,
+          renderLanes
+        );
+        current.ref = workInProgress.ref;
+        current.return = workInProgress;
+        return (workInProgress.child = current);
+      }
+      type = current.child;
+      if (!checkScheduledUpdateOrContext(current, renderLanes)) {
+        var prevProps = type.memoizedProps;
+        Component = Component.compare;
+        Component = null !== Component ? Component : shallowEqual;
+        if (
+          Component(prevProps, nextProps) &&
+          current.ref === workInProgress.ref
+        )
+          return bailoutOnAlreadyFinishedWork(
+            current,
+            workInProgress,
+            renderLanes
+          );
+      }
+      workInProgress.flags |= 1;
+      current = createWorkInProgress(type, nextProps);
+      current.ref = workInProgress.ref;
+      current.return = workInProgress;
+      return (workInProgress.child = current);
+    }
+    function updateSimpleMemoComponent(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      if (null !== current) {
+        var prevProps = current.memoizedProps;
+        if (
+          shallowEqual(prevProps, nextProps) &&
+          current.ref === workInProgress.ref &&
+          workInProgress.type === current.type
+        )
+          if (
+            ((didReceiveUpdate = !1),
+            (workInProgress.pendingProps = nextProps = prevProps),
+            checkScheduledUpdateOrContext(current, renderLanes))
+          )
+            0 !== (current.flags & 131072) && (didReceiveUpdate = !0);
+          else
+            return (
+              (workInProgress.lanes = current.lanes),
+              bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+            );
+      }
+      return updateFunctionComponent(
+        current,
+        workInProgress,
+        Component,
+        nextProps,
+        renderLanes
+      );
+    }
+    function updateOffscreenComponent(current, workInProgress, renderLanes) {
+      var nextProps = workInProgress.pendingProps,
+        nextChildren = nextProps.children,
+        prevState = null !== current ? current.memoizedState : null;
+      if ("hidden" === nextProps.mode) {
+        if (0 !== (workInProgress.flags & 128)) {
+          nextProps =
+            null !== prevState
+              ? prevState.baseLanes | renderLanes
+              : renderLanes;
+          if (null !== current) {
+            nextChildren = workInProgress.child = current.child;
+            for (prevState = 0; null !== nextChildren; )
+              (prevState =
+                prevState | nextChildren.lanes | nextChildren.childLanes),
+                (nextChildren = nextChildren.sibling);
+            workInProgress.childLanes = prevState & ~nextProps;
+          } else (workInProgress.childLanes = 0), (workInProgress.child = null);
+          return deferHiddenOffscreenComponent(
+            current,
+            workInProgress,
+            nextProps,
+            renderLanes
+          );
+        }
+        if (0 !== (renderLanes & 536870912))
+          (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),
+            null !== current &&
+              pushTransition(
+                workInProgress,
+                null !== prevState ? prevState.cachePool : null
+              ),
+            null !== prevState
+              ? pushHiddenContext(workInProgress, prevState)
+              : reuseHiddenContextOnStack(workInProgress),
+            pushOffscreenSuspenseHandler(workInProgress);
+        else
+          return (
+            (workInProgress.lanes = workInProgress.childLanes = 536870912),
+            deferHiddenOffscreenComponent(
+              current,
+              workInProgress,
+              null !== prevState
+                ? prevState.baseLanes | renderLanes
+                : renderLanes,
+              renderLanes
+            )
+          );
+      } else
+        null !== prevState
+          ? (pushTransition(workInProgress, prevState.cachePool),
+            pushHiddenContext(workInProgress, prevState),
+            reuseSuspenseHandlerOnStack(workInProgress),
+            (workInProgress.memoizedState = null))
+          : (null !== current && pushTransition(workInProgress, null),
+            reuseHiddenContextOnStack(workInProgress),
+            reuseSuspenseHandlerOnStack(workInProgress));
+      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
+      return workInProgress.child;
+    }
+    function deferHiddenOffscreenComponent(
+      current,
+      workInProgress,
+      nextBaseLanes,
+      renderLanes
+    ) {
+      var JSCompiler_inline_result = peekCacheFromPool();
+      JSCompiler_inline_result =
+        null === JSCompiler_inline_result
+          ? null
+          : {
+              parent: CacheContext._currentValue,
+              pool: JSCompiler_inline_result
+            };
+      workInProgress.memoizedState = {
+        baseLanes: nextBaseLanes,
+        cachePool: JSCompiler_inline_result
+      };
+      null !== current && pushTransition(workInProgress, null);
+      reuseHiddenContextOnStack(workInProgress);
+      pushOffscreenSuspenseHandler(workInProgress);
+      null !== current &&
+        propagateParentContextChanges(current, workInProgress, renderLanes, !0);
+      return null;
+    }
+    function markRef(current, workInProgress) {
+      var ref = workInProgress.ref;
+      if (null === ref)
+        null !== current &&
+          null !== current.ref &&
+          (workInProgress.flags |= 4194816);
+      else {
+        if ("function" !== typeof ref && "object" !== typeof ref)
+          throw Error(
+            "Expected ref to be a function, an object returned by React.createRef(), or undefined/null."
+          );
+        if (null === current || current.ref !== ref)
+          workInProgress.flags |= 4194816;
+      }
+    }
+    function updateFunctionComponent(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      if (
+        Component.prototype &&
+        "function" === typeof Component.prototype.render
+      ) {
+        var componentName = getComponentNameFromType(Component) || "Unknown";
+        didWarnAboutBadClass[componentName] ||
+          (console.error(
+            "The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",
+            componentName,
+            componentName
+          ),
+          (didWarnAboutBadClass[componentName] = !0));
+      }
+      workInProgress.mode & StrictLegacyMode &&
+        ReactStrictModeWarnings.recordLegacyContextWarning(
+          workInProgress,
+          null
+        );
+      null === current &&
+        (validateFunctionComponentInDev(workInProgress, workInProgress.type),
+        Component.contextTypes &&
+          ((componentName = getComponentNameFromType(Component) || "Unknown"),
+          didWarnAboutContextTypes[componentName] ||
+            ((didWarnAboutContextTypes[componentName] = !0),
+            console.error(
+              "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",
+              componentName
+            ))));
+      prepareToReadContext(workInProgress);
+      markComponentRenderStarted(workInProgress);
+      Component = renderWithHooks(
+        current,
+        workInProgress,
+        Component,
+        nextProps,
+        void 0,
+        renderLanes
+      );
+      nextProps = checkDidRenderIdHook();
+      markComponentRenderStopped();
+      if (null !== current && !didReceiveUpdate)
+        return (
+          bailoutHooks(current, workInProgress, renderLanes),
+          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+        );
+      isHydrating && nextProps && pushMaterializedTreeId(workInProgress);
+      workInProgress.flags |= 1;
+      reconcileChildren(current, workInProgress, Component, renderLanes);
+      return workInProgress.child;
+    }
+    function replayFunctionComponent(
+      current,
+      workInProgress,
+      nextProps,
+      Component,
+      secondArg,
+      renderLanes
+    ) {
+      prepareToReadContext(workInProgress);
+      markComponentRenderStarted(workInProgress);
+      hookTypesUpdateIndexDev = -1;
+      ignorePreviousDependencies =
+        null !== current && current.type !== workInProgress.type;
+      workInProgress.updateQueue = null;
+      nextProps = renderWithHooksAgain(
+        workInProgress,
+        Component,
+        nextProps,
+        secondArg
+      );
+      finishRenderingHooks(current, workInProgress);
+      Component = checkDidRenderIdHook();
+      markComponentRenderStopped();
+      if (null !== current && !didReceiveUpdate)
+        return (
+          bailoutHooks(current, workInProgress, renderLanes),
+          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+        );
+      isHydrating && Component && pushMaterializedTreeId(workInProgress);
+      workInProgress.flags |= 1;
+      reconcileChildren(current, workInProgress, nextProps, renderLanes);
+      return workInProgress.child;
+    }
+    function updateClassComponent(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      switch (shouldErrorImpl(workInProgress)) {
+        case !1:
+          var _instance = workInProgress.stateNode,
+            state = new workInProgress.type(
+              workInProgress.memoizedProps,
+              _instance.context
+            ).state;
+          _instance.updater.enqueueSetState(_instance, state, null);
+          break;
+        case !0:
+          workInProgress.flags |= 128;
+          workInProgress.flags |= 65536;
+          _instance = Error("Simulated error coming from DevTools");
+          var lane = renderLanes & -renderLanes;
+          workInProgress.lanes |= lane;
+          state = workInProgressRoot;
+          if (null === state)
+            throw Error(
+              "Expected a work-in-progress root. This is a bug in React. Please file an issue."
+            );
+          lane = createClassErrorUpdate(lane);
+          initializeClassErrorUpdate(
+            lane,
+            state,
+            workInProgress,
+            createCapturedValueAtFiber(_instance, workInProgress)
+          );
+          enqueueCapturedUpdate(workInProgress, lane);
+      }
+      prepareToReadContext(workInProgress);
+      if (null === workInProgress.stateNode) {
+        state = emptyContextObject;
+        _instance = Component.contextType;
+        "contextType" in Component &&
+          null !== _instance &&
+          (void 0 === _instance || _instance.$$typeof !== REACT_CONTEXT_TYPE) &&
+          !didWarnAboutInvalidateContextType.has(Component) &&
+          (didWarnAboutInvalidateContextType.add(Component),
+          (lane =
+            void 0 === _instance
+              ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file."
+              : "object" !== typeof _instance
+                ? " However, it is set to a " + typeof _instance + "."
+                : _instance.$$typeof === REACT_CONSUMER_TYPE
+                  ? " Did you accidentally pass the Context.Consumer instead?"
+                  : " However, it is set to an object with keys {" +
+                    Object.keys(_instance).join(", ") +
+                    "}."),
+          console.error(
+            "%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",
+            getComponentNameFromType(Component) || "Component",
+            lane
+          ));
+        "object" === typeof _instance &&
+          null !== _instance &&
+          (state = readContext(_instance));
+        _instance = new Component(nextProps, state);
+        if (workInProgress.mode & StrictLegacyMode) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            _instance = new Component(nextProps, state);
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+        state = workInProgress.memoizedState =
+          null !== _instance.state && void 0 !== _instance.state
+            ? _instance.state
+            : null;
+        _instance.updater = classComponentUpdater;
+        workInProgress.stateNode = _instance;
+        _instance._reactInternals = workInProgress;
+        _instance._reactInternalInstance = fakeInternalInstance;
+        "function" === typeof Component.getDerivedStateFromProps &&
+          null === state &&
+          ((state = getComponentNameFromType(Component) || "Component"),
+          didWarnAboutUninitializedState.has(state) ||
+            (didWarnAboutUninitializedState.add(state),
+            console.error(
+              "`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",
+              state,
+              null === _instance.state ? "null" : "undefined",
+              state
+            )));
+        if (
+          "function" === typeof Component.getDerivedStateFromProps ||
+          "function" === typeof _instance.getSnapshotBeforeUpdate
+        ) {
+          var foundWillUpdateName = (lane = state = null);
+          "function" === typeof _instance.componentWillMount &&
+          !0 !== _instance.componentWillMount.__suppressDeprecationWarning
+            ? (state = "componentWillMount")
+            : "function" === typeof _instance.UNSAFE_componentWillMount &&
+              (state = "UNSAFE_componentWillMount");
+          "function" === typeof _instance.componentWillReceiveProps &&
+          !0 !==
+            _instance.componentWillReceiveProps.__suppressDeprecationWarning
+            ? (lane = "componentWillReceiveProps")
+            : "function" ===
+                typeof _instance.UNSAFE_componentWillReceiveProps &&
+              (lane = "UNSAFE_componentWillReceiveProps");
+          "function" === typeof _instance.componentWillUpdate &&
+          !0 !== _instance.componentWillUpdate.__suppressDeprecationWarning
+            ? (foundWillUpdateName = "componentWillUpdate")
+            : "function" === typeof _instance.UNSAFE_componentWillUpdate &&
+              (foundWillUpdateName = "UNSAFE_componentWillUpdate");
+          if (null !== state || null !== lane || null !== foundWillUpdateName) {
+            _instance = getComponentNameFromType(Component) || "Component";
+            var newApiName =
+              "function" === typeof Component.getDerivedStateFromProps
+                ? "getDerivedStateFromProps()"
+                : "getSnapshotBeforeUpdate()";
+            didWarnAboutLegacyLifecyclesAndDerivedState.has(_instance) ||
+              (didWarnAboutLegacyLifecyclesAndDerivedState.add(_instance),
+              console.error(
+                "Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles",
+                _instance,
+                newApiName,
+                null !== state ? "\n  " + state : "",
+                null !== lane ? "\n  " + lane : "",
+                null !== foundWillUpdateName ? "\n  " + foundWillUpdateName : ""
+              ));
+          }
+        }
+        _instance = workInProgress.stateNode;
+        state = getComponentNameFromType(Component) || "Component";
+        _instance.render ||
+          (Component.prototype &&
+          "function" === typeof Component.prototype.render
+            ? console.error(
+                "No `render` method found on the %s instance: did you accidentally return an object from the constructor?",
+                state
+              )
+            : console.error(
+                "No `render` method found on the %s instance: you may have forgotten to define `render`.",
+                state
+              ));
+        !_instance.getInitialState ||
+          _instance.getInitialState.isReactClassApproved ||
+          _instance.state ||
+          console.error(
+            "getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",
+            state
+          );
+        _instance.getDefaultProps &&
+          !_instance.getDefaultProps.isReactClassApproved &&
+          console.error(
+            "getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",
+            state
+          );
+        _instance.contextType &&
+          console.error(
+            "contextType was defined as an instance property on %s. Use a static property to define contextType instead.",
+            state
+          );
+        Component.childContextTypes &&
+          !didWarnAboutChildContextTypes.has(Component) &&
+          (didWarnAboutChildContextTypes.add(Component),
+          console.error(
+            "%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",
+            state
+          ));
+        Component.contextTypes &&
+          !didWarnAboutContextTypes$1.has(Component) &&
+          (didWarnAboutContextTypes$1.add(Component),
+          console.error(
+            "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",
+            state
+          ));
+        "function" === typeof _instance.componentShouldUpdate &&
+          console.error(
+            "%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",
+            state
+          );
+        Component.prototype &&
+          Component.prototype.isPureReactComponent &&
+          "undefined" !== typeof _instance.shouldComponentUpdate &&
+          console.error(
+            "%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",
+            getComponentNameFromType(Component) || "A pure component"
+          );
+        "function" === typeof _instance.componentDidUnmount &&
+          console.error(
+            "%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",
+            state
+          );
+        "function" === typeof _instance.componentDidReceiveProps &&
+          console.error(
+            "%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",
+            state
+          );
+        "function" === typeof _instance.componentWillRecieveProps &&
+          console.error(
+            "%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",
+            state
+          );
+        "function" === typeof _instance.UNSAFE_componentWillRecieveProps &&
+          console.error(
+            "%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",
+            state
+          );
+        lane = _instance.props !== nextProps;
+        void 0 !== _instance.props &&
+          lane &&
+          console.error(
+            "When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",
+            state
+          );
+        _instance.defaultProps &&
+          console.error(
+            "Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",
+            state,
+            state
+          );
+        "function" !== typeof _instance.getSnapshotBeforeUpdate ||
+          "function" === typeof _instance.componentDidUpdate ||
+          didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(Component) ||
+          (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(Component),
+          console.error(
+            "%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",
+            getComponentNameFromType(Component)
+          ));
+        "function" === typeof _instance.getDerivedStateFromProps &&
+          console.error(
+            "%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+            state
+          );
+        "function" === typeof _instance.getDerivedStateFromError &&
+          console.error(
+            "%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+            state
+          );
+        "function" === typeof Component.getSnapshotBeforeUpdate &&
+          console.error(
+            "%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",
+            state
+          );
+        (lane = _instance.state) &&
+          ("object" !== typeof lane || isArrayImpl(lane)) &&
+          console.error("%s.state: must be set to an object or null", state);
+        "function" === typeof _instance.getChildContext &&
+          "object" !== typeof Component.childContextTypes &&
+          console.error(
+            "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",
+            state
+          );
+        _instance = workInProgress.stateNode;
+        _instance.props = nextProps;
+        _instance.state = workInProgress.memoizedState;
+        _instance.refs = {};
+        initializeUpdateQueue(workInProgress);
+        state = Component.contextType;
+        _instance.context =
+          "object" === typeof state && null !== state
+            ? readContext(state)
+            : emptyContextObject;
+        _instance.state === nextProps &&
+          ((state = getComponentNameFromType(Component) || "Component"),
+          didWarnAboutDirectlyAssigningPropsToState.has(state) ||
+            (didWarnAboutDirectlyAssigningPropsToState.add(state),
+            console.error(
+              "%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",
+              state
+            )));
+        workInProgress.mode & StrictLegacyMode &&
+          ReactStrictModeWarnings.recordLegacyContextWarning(
+            workInProgress,
+            _instance
+          );
+        ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(
+          workInProgress,
+          _instance
+        );
+        _instance.state = workInProgress.memoizedState;
+        state = Component.getDerivedStateFromProps;
+        "function" === typeof state &&
+          (applyDerivedStateFromProps(
+            workInProgress,
+            Component,
+            state,
+            nextProps
+          ),
+          (_instance.state = workInProgress.memoizedState));
+        "function" === typeof Component.getDerivedStateFromProps ||
+          "function" === typeof _instance.getSnapshotBeforeUpdate ||
+          ("function" !== typeof _instance.UNSAFE_componentWillMount &&
+            "function" !== typeof _instance.componentWillMount) ||
+          ((state = _instance.state),
+          "function" === typeof _instance.componentWillMount &&
+            _instance.componentWillMount(),
+          "function" === typeof _instance.UNSAFE_componentWillMount &&
+            _instance.UNSAFE_componentWillMount(),
+          state !== _instance.state &&
+            (console.error(
+              "%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+              getComponentNameFromFiber(workInProgress) || "Component"
+            ),
+            classComponentUpdater.enqueueReplaceState(
+              _instance,
+              _instance.state,
+              null
+            )),
+          processUpdateQueue(workInProgress, nextProps, _instance, renderLanes),
+          suspendIfUpdateReadFromEntangledAsyncAction(),
+          (_instance.state = workInProgress.memoizedState));
+        "function" === typeof _instance.componentDidMount &&
+          (workInProgress.flags |= 4194308);
+        (workInProgress.mode & StrictEffectsMode) !== NoMode &&
+          (workInProgress.flags |= 134217728);
+        _instance = !0;
+      } else if (null === current) {
+        _instance = workInProgress.stateNode;
+        var unresolvedOldProps = workInProgress.memoizedProps;
+        lane = resolveClassComponentProps(Component, unresolvedOldProps);
+        _instance.props = lane;
+        var oldContext = _instance.context;
+        foundWillUpdateName = Component.contextType;
+        state = emptyContextObject;
+        "object" === typeof foundWillUpdateName &&
+          null !== foundWillUpdateName &&
+          (state = readContext(foundWillUpdateName));
+        newApiName = Component.getDerivedStateFromProps;
+        foundWillUpdateName =
+          "function" === typeof newApiName ||
+          "function" === typeof _instance.getSnapshotBeforeUpdate;
+        unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;
+        foundWillUpdateName ||
+          ("function" !== typeof _instance.UNSAFE_componentWillReceiveProps &&
+            "function" !== typeof _instance.componentWillReceiveProps) ||
+          ((unresolvedOldProps || oldContext !== state) &&
+            callComponentWillReceiveProps(
+              workInProgress,
+              _instance,
+              nextProps,
+              state
+            ));
+        hasForceUpdate = !1;
+        var oldState = workInProgress.memoizedState;
+        _instance.state = oldState;
+        processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);
+        suspendIfUpdateReadFromEntangledAsyncAction();
+        oldContext = workInProgress.memoizedState;
+        unresolvedOldProps || oldState !== oldContext || hasForceUpdate
+          ? ("function" === typeof newApiName &&
+              (applyDerivedStateFromProps(
+                workInProgress,
+                Component,
+                newApiName,
+                nextProps
+              ),
+              (oldContext = workInProgress.memoizedState)),
+            (lane =
+              hasForceUpdate ||
+              checkShouldComponentUpdate(
+                workInProgress,
+                Component,
+                lane,
+                nextProps,
+                oldState,
+                oldContext,
+                state
+              ))
+              ? (foundWillUpdateName ||
+                  ("function" !== typeof _instance.UNSAFE_componentWillMount &&
+                    "function" !== typeof _instance.componentWillMount) ||
+                  ("function" === typeof _instance.componentWillMount &&
+                    _instance.componentWillMount(),
+                  "function" === typeof _instance.UNSAFE_componentWillMount &&
+                    _instance.UNSAFE_componentWillMount()),
+                "function" === typeof _instance.componentDidMount &&
+                  (workInProgress.flags |= 4194308),
+                (workInProgress.mode & StrictEffectsMode) !== NoMode &&
+                  (workInProgress.flags |= 134217728))
+              : ("function" === typeof _instance.componentDidMount &&
+                  (workInProgress.flags |= 4194308),
+                (workInProgress.mode & StrictEffectsMode) !== NoMode &&
+                  (workInProgress.flags |= 134217728),
+                (workInProgress.memoizedProps = nextProps),
+                (workInProgress.memoizedState = oldContext)),
+            (_instance.props = nextProps),
+            (_instance.state = oldContext),
+            (_instance.context = state),
+            (_instance = lane))
+          : ("function" === typeof _instance.componentDidMount &&
+              (workInProgress.flags |= 4194308),
+            (workInProgress.mode & StrictEffectsMode) !== NoMode &&
+              (workInProgress.flags |= 134217728),
+            (_instance = !1));
+      } else {
+        _instance = workInProgress.stateNode;
+        cloneUpdateQueue(current, workInProgress);
+        state = workInProgress.memoizedProps;
+        foundWillUpdateName = resolveClassComponentProps(Component, state);
+        _instance.props = foundWillUpdateName;
+        newApiName = workInProgress.pendingProps;
+        oldState = _instance.context;
+        oldContext = Component.contextType;
+        lane = emptyContextObject;
+        "object" === typeof oldContext &&
+          null !== oldContext &&
+          (lane = readContext(oldContext));
+        unresolvedOldProps = Component.getDerivedStateFromProps;
+        (oldContext =
+          "function" === typeof unresolvedOldProps ||
+          "function" === typeof _instance.getSnapshotBeforeUpdate) ||
+          ("function" !== typeof _instance.UNSAFE_componentWillReceiveProps &&
+            "function" !== typeof _instance.componentWillReceiveProps) ||
+          ((state !== newApiName || oldState !== lane) &&
+            callComponentWillReceiveProps(
+              workInProgress,
+              _instance,
+              nextProps,
+              lane
+            ));
+        hasForceUpdate = !1;
+        oldState = workInProgress.memoizedState;
+        _instance.state = oldState;
+        processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);
+        suspendIfUpdateReadFromEntangledAsyncAction();
+        var newState = workInProgress.memoizedState;
+        state !== newApiName ||
+        oldState !== newState ||
+        hasForceUpdate ||
+        (null !== current &&
+          null !== current.dependencies &&
+          checkIfContextChanged(current.dependencies))
+          ? ("function" === typeof unresolvedOldProps &&
+              (applyDerivedStateFromProps(
+                workInProgress,
+                Component,
+                unresolvedOldProps,
+                nextProps
+              ),
+              (newState = workInProgress.memoizedState)),
+            (foundWillUpdateName =
+              hasForceUpdate ||
+              checkShouldComponentUpdate(
+                workInProgress,
+                Component,
+                foundWillUpdateName,
+                nextProps,
+                oldState,
+                newState,
+                lane
+              ) ||
+              (null !== current &&
+                null !== current.dependencies &&
+                checkIfContextChanged(current.dependencies)))
+              ? (oldContext ||
+                  ("function" !== typeof _instance.UNSAFE_componentWillUpdate &&
+                    "function" !== typeof _instance.componentWillUpdate) ||
+                  ("function" === typeof _instance.componentWillUpdate &&
+                    _instance.componentWillUpdate(nextProps, newState, lane),
+                  "function" === typeof _instance.UNSAFE_componentWillUpdate &&
+                    _instance.UNSAFE_componentWillUpdate(
+                      nextProps,
+                      newState,
+                      lane
+                    )),
+                "function" === typeof _instance.componentDidUpdate &&
+                  (workInProgress.flags |= 4),
+                "function" === typeof _instance.getSnapshotBeforeUpdate &&
+                  (workInProgress.flags |= 1024))
+              : ("function" !== typeof _instance.componentDidUpdate ||
+                  (state === current.memoizedProps &&
+                    oldState === current.memoizedState) ||
+                  (workInProgress.flags |= 4),
+                "function" !== typeof _instance.getSnapshotBeforeUpdate ||
+                  (state === current.memoizedProps &&
+                    oldState === current.memoizedState) ||
+                  (workInProgress.flags |= 1024),
+                (workInProgress.memoizedProps = nextProps),
+                (workInProgress.memoizedState = newState)),
+            (_instance.props = nextProps),
+            (_instance.state = newState),
+            (_instance.context = lane),
+            (_instance = foundWillUpdateName))
+          : ("function" !== typeof _instance.componentDidUpdate ||
+              (state === current.memoizedProps &&
+                oldState === current.memoizedState) ||
+              (workInProgress.flags |= 4),
+            "function" !== typeof _instance.getSnapshotBeforeUpdate ||
+              (state === current.memoizedProps &&
+                oldState === current.memoizedState) ||
+              (workInProgress.flags |= 1024),
+            (_instance = !1));
+      }
+      lane = _instance;
+      markRef(current, workInProgress);
+      state = 0 !== (workInProgress.flags & 128);
+      if (lane || state) {
+        lane = workInProgress.stateNode;
+        setCurrentFiber(workInProgress);
+        if (state && "function" !== typeof Component.getDerivedStateFromError)
+          (Component = null), (profilerStartTime = -1);
+        else {
+          markComponentRenderStarted(workInProgress);
+          Component = callRenderInDEV(lane);
+          if (workInProgress.mode & StrictLegacyMode) {
+            setIsStrictModeForDevtools(!0);
+            try {
+              callRenderInDEV(lane);
+            } finally {
+              setIsStrictModeForDevtools(!1);
+            }
+          }
+          markComponentRenderStopped();
+        }
+        workInProgress.flags |= 1;
+        null !== current && state
+          ? ((workInProgress.child = reconcileChildFibers(
+              workInProgress,
+              current.child,
+              null,
+              renderLanes
+            )),
+            (workInProgress.child = reconcileChildFibers(
+              workInProgress,
+              null,
+              Component,
+              renderLanes
+            )))
+          : reconcileChildren(current, workInProgress, Component, renderLanes);
+        workInProgress.memoizedState = lane.state;
+        current = workInProgress.child;
+      } else
+        current = bailoutOnAlreadyFinishedWork(
+          current,
+          workInProgress,
+          renderLanes
+        );
+      renderLanes = workInProgress.stateNode;
+      _instance &&
+        renderLanes.props !== nextProps &&
+        (didWarnAboutReassigningProps ||
+          console.error(
+            "It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",
+            getComponentNameFromFiber(workInProgress) || "a component"
+          ),
+        (didWarnAboutReassigningProps = !0));
+      return current;
+    }
+    function mountHostRootWithoutHydrating(
+      current,
+      workInProgress,
+      nextChildren,
+      renderLanes
+    ) {
+      resetHydrationState();
+      workInProgress.flags |= 256;
+      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
+      return workInProgress.child;
+    }
+    function validateFunctionComponentInDev(workInProgress, Component) {
+      Component &&
+        Component.childContextTypes &&
+        console.error(
+          "childContextTypes cannot be defined on a function component.\n  %s.childContextTypes = ...",
+          Component.displayName || Component.name || "Component"
+        );
+      "function" === typeof Component.getDerivedStateFromProps &&
+        ((workInProgress = getComponentNameFromType(Component) || "Unknown"),
+        didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] ||
+          (console.error(
+            "%s: Function components do not support getDerivedStateFromProps.",
+            workInProgress
+          ),
+          (didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] =
+            !0)));
+      "object" === typeof Component.contextType &&
+        null !== Component.contextType &&
+        ((Component = getComponentNameFromType(Component) || "Unknown"),
+        didWarnAboutContextTypeOnFunctionComponent[Component] ||
+          (console.error(
+            "%s: Function components do not support contextType.",
+            Component
+          ),
+          (didWarnAboutContextTypeOnFunctionComponent[Component] = !0)));
+    }
+    function mountSuspenseOffscreenState(renderLanes) {
+      return { baseLanes: renderLanes, cachePool: getSuspendedCache() };
+    }
+    function getRemainingWorkInPrimaryTree(
+      current,
+      primaryTreeDidDefer,
+      renderLanes
+    ) {
+      current = null !== current ? current.childLanes & ~renderLanes : 0;
+      primaryTreeDidDefer && (current |= workInProgressDeferredLane);
+      return current;
+    }
+    function updateSuspenseComponent(current, workInProgress, renderLanes) {
+      var JSCompiler_object_inline_digest_2451;
+      var JSCompiler_object_inline_stack_2452 = workInProgress.pendingProps;
+      shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128);
+      var JSCompiler_object_inline_componentStack_2453 = !1;
+      var didSuspend = 0 !== (workInProgress.flags & 128);
+      (JSCompiler_object_inline_digest_2451 = didSuspend) ||
+        (JSCompiler_object_inline_digest_2451 =
+          null !== current && null === current.memoizedState
+            ? !1
+            : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback));
+      JSCompiler_object_inline_digest_2451 &&
+        ((JSCompiler_object_inline_componentStack_2453 = !0),
+        (workInProgress.flags &= -129));
+      JSCompiler_object_inline_digest_2451 = 0 !== (workInProgress.flags & 32);
+      workInProgress.flags &= -33;
+      if (null === current) {
+        if (isHydrating) {
+          JSCompiler_object_inline_componentStack_2453
+            ? pushPrimaryTreeSuspenseHandler(workInProgress)
+            : reuseSuspenseHandlerOnStack(workInProgress);
+          if (isHydrating) {
+            var JSCompiler_object_inline_message_2450 = nextHydratableInstance;
+            var JSCompiler_temp;
+            if (!(JSCompiler_temp = !JSCompiler_object_inline_message_2450)) {
+              c: {
+                var instance = JSCompiler_object_inline_message_2450;
+                for (
+                  JSCompiler_temp = rootOrSingletonContext;
+                  8 !== instance.nodeType;
+
+                ) {
+                  if (!JSCompiler_temp) {
+                    JSCompiler_temp = null;
+                    break c;
+                  }
+                  instance = getNextHydratable(instance.nextSibling);
+                  if (null === instance) {
+                    JSCompiler_temp = null;
+                    break c;
+                  }
+                }
+                JSCompiler_temp = instance;
+              }
+              null !== JSCompiler_temp
+                ? (warnIfNotHydrating(),
+                  (workInProgress.memoizedState = {
+                    dehydrated: JSCompiler_temp,
+                    treeContext:
+                      null !== treeContextProvider
+                        ? { id: treeContextId, overflow: treeContextOverflow }
+                        : null,
+                    retryLane: 536870912,
+                    hydrationErrors: null
+                  }),
+                  (instance = createFiber(18, null, null, NoMode)),
+                  (instance.stateNode = JSCompiler_temp),
+                  (instance.return = workInProgress),
+                  (workInProgress.child = instance),
+                  (hydrationParentFiber = workInProgress),
+                  (nextHydratableInstance = null),
+                  (JSCompiler_temp = !0))
+                : (JSCompiler_temp = !1);
+              JSCompiler_temp = !JSCompiler_temp;
+            }
+            JSCompiler_temp &&
+              (warnNonHydratedInstance(
+                workInProgress,
+                JSCompiler_object_inline_message_2450
+              ),
+              throwOnHydrationMismatch(workInProgress));
+          }
+          JSCompiler_object_inline_message_2450 = workInProgress.memoizedState;
+          if (
+            null !== JSCompiler_object_inline_message_2450 &&
+            ((JSCompiler_object_inline_message_2450 =
+              JSCompiler_object_inline_message_2450.dehydrated),
+            null !== JSCompiler_object_inline_message_2450)
+          )
+            return (
+              isSuspenseInstanceFallback(JSCompiler_object_inline_message_2450)
+                ? (workInProgress.lanes = 32)
+                : (workInProgress.lanes = 536870912),
+              null
+            );
+          popSuspenseHandler(workInProgress);
+        }
+        JSCompiler_object_inline_message_2450 =
+          JSCompiler_object_inline_stack_2452.children;
+        JSCompiler_object_inline_stack_2452 =
+          JSCompiler_object_inline_stack_2452.fallback;
+        if (JSCompiler_object_inline_componentStack_2453)
+          return (
+            reuseSuspenseHandlerOnStack(workInProgress),
+            (JSCompiler_object_inline_componentStack_2453 =
+              workInProgress.mode),
+            (JSCompiler_object_inline_message_2450 =
+              mountWorkInProgressOffscreenFiber(
+                {
+                  mode: "hidden",
+                  children: JSCompiler_object_inline_message_2450
+                },
+                JSCompiler_object_inline_componentStack_2453
+              )),
+            (JSCompiler_object_inline_stack_2452 = createFiberFromFragment(
+              JSCompiler_object_inline_stack_2452,
+              JSCompiler_object_inline_componentStack_2453,
+              renderLanes,
+              null
+            )),
+            (JSCompiler_object_inline_message_2450.return = workInProgress),
+            (JSCompiler_object_inline_stack_2452.return = workInProgress),
+            (JSCompiler_object_inline_message_2450.sibling =
+              JSCompiler_object_inline_stack_2452),
+            (workInProgress.child = JSCompiler_object_inline_message_2450),
+            (JSCompiler_object_inline_componentStack_2453 =
+              workInProgress.child),
+            (JSCompiler_object_inline_componentStack_2453.memoizedState =
+              mountSuspenseOffscreenState(renderLanes)),
+            (JSCompiler_object_inline_componentStack_2453.childLanes =
+              getRemainingWorkInPrimaryTree(
+                current,
+                JSCompiler_object_inline_digest_2451,
+                renderLanes
+              )),
+            (workInProgress.memoizedState = SUSPENDED_MARKER),
+            JSCompiler_object_inline_stack_2452
+          );
+        pushPrimaryTreeSuspenseHandler(workInProgress);
+        return mountSuspensePrimaryChildren(
+          workInProgress,
+          JSCompiler_object_inline_message_2450
+        );
+      }
+      var prevState = current.memoizedState;
+      if (
+        null !== prevState &&
+        ((JSCompiler_object_inline_message_2450 = prevState.dehydrated),
+        null !== JSCompiler_object_inline_message_2450)
+      ) {
+        if (didSuspend)
+          workInProgress.flags & 256
+            ? (pushPrimaryTreeSuspenseHandler(workInProgress),
+              (workInProgress.flags &= -257),
+              (workInProgress = retrySuspenseComponentWithoutHydrating(
+                current,
+                workInProgress,
+                renderLanes
+              )))
+            : null !== workInProgress.memoizedState
+              ? (reuseSuspenseHandlerOnStack(workInProgress),
+                (workInProgress.child = current.child),
+                (workInProgress.flags |= 128),
+                (workInProgress = null))
+              : (reuseSuspenseHandlerOnStack(workInProgress),
+                (JSCompiler_object_inline_componentStack_2453 =
+                  JSCompiler_object_inline_stack_2452.fallback),
+                (JSCompiler_object_inline_message_2450 = workInProgress.mode),
+                (JSCompiler_object_inline_stack_2452 =
+                  mountWorkInProgressOffscreenFiber(
+                    {
+                      mode: "visible",
+                      children: JSCompiler_object_inline_stack_2452.children
+                    },
+                    JSCompiler_object_inline_message_2450
+                  )),
+                (JSCompiler_object_inline_componentStack_2453 =
+                  createFiberFromFragment(
+                    JSCompiler_object_inline_componentStack_2453,
+                    JSCompiler_object_inline_message_2450,
+                    renderLanes,
+                    null
+                  )),
+                (JSCompiler_object_inline_componentStack_2453.flags |= 2),
+                (JSCompiler_object_inline_stack_2452.return = workInProgress),
+                (JSCompiler_object_inline_componentStack_2453.return =
+                  workInProgress),
+                (JSCompiler_object_inline_stack_2452.sibling =
+                  JSCompiler_object_inline_componentStack_2453),
+                (workInProgress.child = JSCompiler_object_inline_stack_2452),
+                reconcileChildFibers(
+                  workInProgress,
+                  current.child,
+                  null,
+                  renderLanes
+                ),
+                (JSCompiler_object_inline_stack_2452 = workInProgress.child),
+                (JSCompiler_object_inline_stack_2452.memoizedState =
+                  mountSuspenseOffscreenState(renderLanes)),
+                (JSCompiler_object_inline_stack_2452.childLanes =
+                  getRemainingWorkInPrimaryTree(
+                    current,
+                    JSCompiler_object_inline_digest_2451,
+                    renderLanes
+                  )),
+                (workInProgress.memoizedState = SUSPENDED_MARKER),
+                (workInProgress =
+                  JSCompiler_object_inline_componentStack_2453));
+        else if (
+          (pushPrimaryTreeSuspenseHandler(workInProgress),
+          isHydrating &&
+            console.error(
+              "We should not be hydrating here. This is a bug in React. Please file a bug."
+            ),
+          isSuspenseInstanceFallback(JSCompiler_object_inline_message_2450))
+        ) {
+          JSCompiler_object_inline_digest_2451 =
+            JSCompiler_object_inline_message_2450.nextSibling &&
+            JSCompiler_object_inline_message_2450.nextSibling.dataset;
+          if (JSCompiler_object_inline_digest_2451) {
+            JSCompiler_temp = JSCompiler_object_inline_digest_2451.dgst;
+            var message = JSCompiler_object_inline_digest_2451.msg;
+            instance = JSCompiler_object_inline_digest_2451.stck;
+            var componentStack = JSCompiler_object_inline_digest_2451.cstck;
+          }
+          JSCompiler_object_inline_message_2450 = message;
+          JSCompiler_object_inline_digest_2451 = JSCompiler_temp;
+          JSCompiler_object_inline_stack_2452 = instance;
+          JSCompiler_temp = JSCompiler_object_inline_componentStack_2453 =
+            componentStack;
+          JSCompiler_object_inline_componentStack_2453 =
+            JSCompiler_object_inline_message_2450
+              ? Error(JSCompiler_object_inline_message_2450)
+              : Error(
+                  "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering."
+                );
+          JSCompiler_object_inline_componentStack_2453.stack =
+            JSCompiler_object_inline_stack_2452 || "";
+          JSCompiler_object_inline_componentStack_2453.digest =
+            JSCompiler_object_inline_digest_2451;
+          JSCompiler_object_inline_digest_2451 =
+            void 0 === JSCompiler_temp ? null : JSCompiler_temp;
+          JSCompiler_object_inline_stack_2452 = {
+            value: JSCompiler_object_inline_componentStack_2453,
+            source: null,
+            stack: JSCompiler_object_inline_digest_2451
+          };
+          "string" === typeof JSCompiler_object_inline_digest_2451 &&
+            CapturedStacks.set(
+              JSCompiler_object_inline_componentStack_2453,
+              JSCompiler_object_inline_stack_2452
+            );
+          queueHydrationError(JSCompiler_object_inline_stack_2452);
+          workInProgress = retrySuspenseComponentWithoutHydrating(
+            current,
+            workInProgress,
+            renderLanes
+          );
+        } else if (
+          (didReceiveUpdate ||
+            propagateParentContextChanges(
+              current,
+              workInProgress,
+              renderLanes,
+              !1
+            ),
+          (JSCompiler_object_inline_digest_2451 =
+            0 !== (renderLanes & current.childLanes)),
+          didReceiveUpdate || JSCompiler_object_inline_digest_2451)
+        ) {
+          JSCompiler_object_inline_digest_2451 = workInProgressRoot;
+          if (
+            null !== JSCompiler_object_inline_digest_2451 &&
+            ((JSCompiler_object_inline_stack_2452 = renderLanes & -renderLanes),
+            (JSCompiler_object_inline_stack_2452 =
+              0 !== (JSCompiler_object_inline_stack_2452 & 42)
+                ? 1
+                : getBumpedLaneForHydrationByLane(
+                    JSCompiler_object_inline_stack_2452
+                  )),
+            (JSCompiler_object_inline_stack_2452 =
+              0 !==
+              (JSCompiler_object_inline_stack_2452 &
+                (JSCompiler_object_inline_digest_2451.suspendedLanes |
+                  renderLanes))
+                ? 0
+                : JSCompiler_object_inline_stack_2452),
+            0 !== JSCompiler_object_inline_stack_2452 &&
+              JSCompiler_object_inline_stack_2452 !== prevState.retryLane)
+          )
+            throw (
+              ((prevState.retryLane = JSCompiler_object_inline_stack_2452),
+              enqueueConcurrentRenderForLane(
+                current,
+                JSCompiler_object_inline_stack_2452
+              ),
+              scheduleUpdateOnFiber(
+                JSCompiler_object_inline_digest_2451,
+                current,
+                JSCompiler_object_inline_stack_2452
+              ),
+              SelectiveHydrationException)
+            );
+          JSCompiler_object_inline_message_2450.data ===
+            SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible();
+          workInProgress = retrySuspenseComponentWithoutHydrating(
+            current,
+            workInProgress,
+            renderLanes
+          );
+        } else
+          JSCompiler_object_inline_message_2450.data ===
+          SUSPENSE_PENDING_START_DATA
+            ? ((workInProgress.flags |= 192),
+              (workInProgress.child = current.child),
+              (workInProgress = null))
+            : ((current = prevState.treeContext),
+              (nextHydratableInstance = getNextHydratable(
+                JSCompiler_object_inline_message_2450.nextSibling
+              )),
+              (hydrationParentFiber = workInProgress),
+              (isHydrating = !0),
+              (hydrationErrors = null),
+              (didSuspendOrErrorDEV = !1),
+              (hydrationDiffRootDEV = null),
+              (rootOrSingletonContext = !1),
+              null !== current &&
+                (warnIfNotHydrating(),
+                (idStack[idStackIndex++] = treeContextId),
+                (idStack[idStackIndex++] = treeContextOverflow),
+                (idStack[idStackIndex++] = treeContextProvider),
+                (treeContextId = current.id),
+                (treeContextOverflow = current.overflow),
+                (treeContextProvider = workInProgress)),
+              (workInProgress = mountSuspensePrimaryChildren(
+                workInProgress,
+                JSCompiler_object_inline_stack_2452.children
+              )),
+              (workInProgress.flags |= 4096));
+        return workInProgress;
+      }
+      if (JSCompiler_object_inline_componentStack_2453)
+        return (
+          reuseSuspenseHandlerOnStack(workInProgress),
+          (JSCompiler_object_inline_componentStack_2453 =
+            JSCompiler_object_inline_stack_2452.fallback),
+          (JSCompiler_object_inline_message_2450 = workInProgress.mode),
+          (JSCompiler_temp = current.child),
+          (instance = JSCompiler_temp.sibling),
+          (JSCompiler_object_inline_stack_2452 = createWorkInProgress(
+            JSCompiler_temp,
+            {
+              mode: "hidden",
+              children: JSCompiler_object_inline_stack_2452.children
+            }
+          )),
+          (JSCompiler_object_inline_stack_2452.subtreeFlags =
+            JSCompiler_temp.subtreeFlags & 65011712),
+          null !== instance
+            ? (JSCompiler_object_inline_componentStack_2453 =
+                createWorkInProgress(
+                  instance,
+                  JSCompiler_object_inline_componentStack_2453
+                ))
+            : ((JSCompiler_object_inline_componentStack_2453 =
+                createFiberFromFragment(
+                  JSCompiler_object_inline_componentStack_2453,
+                  JSCompiler_object_inline_message_2450,
+                  renderLanes,
+                  null
+                )),
+              (JSCompiler_object_inline_componentStack_2453.flags |= 2)),
+          (JSCompiler_object_inline_componentStack_2453.return =
+            workInProgress),
+          (JSCompiler_object_inline_stack_2452.return = workInProgress),
+          (JSCompiler_object_inline_stack_2452.sibling =
+            JSCompiler_object_inline_componentStack_2453),
+          (workInProgress.child = JSCompiler_object_inline_stack_2452),
+          (JSCompiler_object_inline_stack_2452 =
+            JSCompiler_object_inline_componentStack_2453),
+          (JSCompiler_object_inline_componentStack_2453 = workInProgress.child),
+          (JSCompiler_object_inline_message_2450 = current.child.memoizedState),
+          null === JSCompiler_object_inline_message_2450
+            ? (JSCompiler_object_inline_message_2450 =
+                mountSuspenseOffscreenState(renderLanes))
+            : ((JSCompiler_temp =
+                JSCompiler_object_inline_message_2450.cachePool),
+              null !== JSCompiler_temp
+                ? ((instance = CacheContext._currentValue),
+                  (JSCompiler_temp =
+                    JSCompiler_temp.parent !== instance
+                      ? { parent: instance, pool: instance }
+                      : JSCompiler_temp))
+                : (JSCompiler_temp = getSuspendedCache()),
+              (JSCompiler_object_inline_message_2450 = {
+                baseLanes:
+                  JSCompiler_object_inline_message_2450.baseLanes | renderLanes,
+                cachePool: JSCompiler_temp
+              })),
+          (JSCompiler_object_inline_componentStack_2453.memoizedState =
+            JSCompiler_object_inline_message_2450),
+          (JSCompiler_object_inline_componentStack_2453.childLanes =
+            getRemainingWorkInPrimaryTree(
+              current,
+              JSCompiler_object_inline_digest_2451,
+              renderLanes
+            )),
+          (workInProgress.memoizedState = SUSPENDED_MARKER),
+          JSCompiler_object_inline_stack_2452
+        );
+      pushPrimaryTreeSuspenseHandler(workInProgress);
+      renderLanes = current.child;
+      current = renderLanes.sibling;
+      renderLanes = createWorkInProgress(renderLanes, {
+        mode: "visible",
+        children: JSCompiler_object_inline_stack_2452.children
+      });
+      renderLanes.return = workInProgress;
+      renderLanes.sibling = null;
+      null !== current &&
+        ((JSCompiler_object_inline_digest_2451 = workInProgress.deletions),
+        null === JSCompiler_object_inline_digest_2451
+          ? ((workInProgress.deletions = [current]),
+            (workInProgress.flags |= 16))
+          : JSCompiler_object_inline_digest_2451.push(current));
+      workInProgress.child = renderLanes;
+      workInProgress.memoizedState = null;
+      return renderLanes;
+    }
+    function mountSuspensePrimaryChildren(workInProgress, primaryChildren) {
+      primaryChildren = mountWorkInProgressOffscreenFiber(
+        { mode: "visible", children: primaryChildren },
+        workInProgress.mode
+      );
+      primaryChildren.return = workInProgress;
+      return (workInProgress.child = primaryChildren);
+    }
+    function mountWorkInProgressOffscreenFiber(offscreenProps, mode) {
+      offscreenProps = createFiber(22, offscreenProps, null, mode);
+      offscreenProps.lanes = 0;
+      offscreenProps.stateNode = {
+        _visibility: OffscreenVisible,
+        _pendingMarkers: null,
+        _retryCache: null,
+        _transitions: null
+      };
+      return offscreenProps;
+    }
+    function retrySuspenseComponentWithoutHydrating(
+      current,
+      workInProgress,
+      renderLanes
+    ) {
+      reconcileChildFibers(workInProgress, current.child, null, renderLanes);
+      current = mountSuspensePrimaryChildren(
+        workInProgress,
+        workInProgress.pendingProps.children
+      );
+      current.flags |= 2;
+      workInProgress.memoizedState = null;
+      return current;
+    }
+    function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {
+      fiber.lanes |= renderLanes;
+      var alternate = fiber.alternate;
+      null !== alternate && (alternate.lanes |= renderLanes);
+      scheduleContextWorkOnParentPath(
+        fiber.return,
+        renderLanes,
+        propagationRoot
+      );
+    }
+    function validateSuspenseListNestedChild(childSlot, index) {
+      var isAnArray = isArrayImpl(childSlot);
+      childSlot = !isAnArray && "function" === typeof getIteratorFn(childSlot);
+      return isAnArray || childSlot
+        ? ((isAnArray = isAnArray ? "array" : "iterable"),
+          console.error(
+            "A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>",
+            isAnArray,
+            index,
+            isAnArray
+          ),
+          !1)
+        : !0;
+    }
+    function initSuspenseListRenderState(
+      workInProgress,
+      isBackwards,
+      tail,
+      lastContentRow,
+      tailMode
+    ) {
+      var renderState = workInProgress.memoizedState;
+      null === renderState
+        ? (workInProgress.memoizedState = {
+            isBackwards: isBackwards,
+            rendering: null,
+            renderingStartTime: 0,
+            last: lastContentRow,
+            tail: tail,
+            tailMode: tailMode
+          })
+        : ((renderState.isBackwards = isBackwards),
+          (renderState.rendering = null),
+          (renderState.renderingStartTime = 0),
+          (renderState.last = lastContentRow),
+          (renderState.tail = tail),
+          (renderState.tailMode = tailMode));
+    }
+    function updateSuspenseListComponent(current, workInProgress, renderLanes) {
+      var nextProps = workInProgress.pendingProps,
+        revealOrder = nextProps.revealOrder,
+        tailMode = nextProps.tail;
+      nextProps = nextProps.children;
+      if (
+        void 0 !== revealOrder &&
+        "forwards" !== revealOrder &&
+        "backwards" !== revealOrder &&
+        "together" !== revealOrder &&
+        !didWarnAboutRevealOrder[revealOrder]
+      )
+        if (
+          ((didWarnAboutRevealOrder[revealOrder] = !0),
+          "string" === typeof revealOrder)
+        )
+          switch (revealOrder.toLowerCase()) {
+            case "together":
+            case "forwards":
+            case "backwards":
+              console.error(
+                '"%s" is not a valid value for revealOrder on <SuspenseList />. Use lowercase "%s" instead.',
+                revealOrder,
+                revealOrder.toLowerCase()
+              );
+              break;
+            case "forward":
+            case "backward":
+              console.error(
+                '"%s" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use "%ss" instead.',
+                revealOrder,
+                revealOrder.toLowerCase()
+              );
+              break;
+            default:
+              console.error(
+                '"%s" is not a supported revealOrder on <SuspenseList />. Did you mean "together", "forwards" or "backwards"?',
+                revealOrder
+              );
+          }
+        else
+          console.error(
+            '%s is not a supported value for revealOrder on <SuspenseList />. Did you mean "together", "forwards" or "backwards"?',
+            revealOrder
+          );
+      void 0 === tailMode ||
+        didWarnAboutTailOptions[tailMode] ||
+        ("collapsed" !== tailMode && "hidden" !== tailMode
+          ? ((didWarnAboutTailOptions[tailMode] = !0),
+            console.error(
+              '"%s" is not a supported value for tail on <SuspenseList />. Did you mean "collapsed" or "hidden"?',
+              tailMode
+            ))
+          : "forwards" !== revealOrder &&
+            "backwards" !== revealOrder &&
+            ((didWarnAboutTailOptions[tailMode] = !0),
+            console.error(
+              '<SuspenseList tail="%s" /> is only valid if revealOrder is "forwards" or "backwards". Did you mean to specify revealOrder="forwards"?',
+              tailMode
+            )));
+      a: if (
+        ("forwards" === revealOrder || "backwards" === revealOrder) &&
+        void 0 !== nextProps &&
+        null !== nextProps &&
+        !1 !== nextProps
+      )
+        if (isArrayImpl(nextProps))
+          for (var i = 0; i < nextProps.length; i++) {
+            if (!validateSuspenseListNestedChild(nextProps[i], i)) break a;
+          }
+        else if (((i = getIteratorFn(nextProps)), "function" === typeof i)) {
+          if ((i = i.call(nextProps)))
+            for (var step = i.next(), _i = 0; !step.done; step = i.next()) {
+              if (!validateSuspenseListNestedChild(step.value, _i)) break a;
+              _i++;
+            }
+        } else
+          console.error(
+            'A single row was passed to a <SuspenseList revealOrder="%s" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',
+            revealOrder
+          );
+      reconcileChildren(current, workInProgress, nextProps, renderLanes);
+      nextProps = suspenseStackCursor.current;
+      if (0 !== (nextProps & ForceSuspenseFallback))
+        (nextProps =
+          (nextProps & SubtreeSuspenseContextMask) | ForceSuspenseFallback),
+          (workInProgress.flags |= 128);
+      else {
+        if (null !== current && 0 !== (current.flags & 128))
+          a: for (current = workInProgress.child; null !== current; ) {
+            if (13 === current.tag)
+              null !== current.memoizedState &&
+                scheduleSuspenseWorkOnFiber(
+                  current,
+                  renderLanes,
+                  workInProgress
+                );
+            else if (19 === current.tag)
+              scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);
+            else if (null !== current.child) {
+              current.child.return = current;
+              current = current.child;
+              continue;
+            }
+            if (current === workInProgress) break a;
+            for (; null === current.sibling; ) {
+              if (null === current.return || current.return === workInProgress)
+                break a;
+              current = current.return;
+            }
+            current.sibling.return = current.return;
+            current = current.sibling;
+          }
+        nextProps &= SubtreeSuspenseContextMask;
+      }
+      push(suspenseStackCursor, nextProps, workInProgress);
+      switch (revealOrder) {
+        case "forwards":
+          renderLanes = workInProgress.child;
+          for (revealOrder = null; null !== renderLanes; )
+            (current = renderLanes.alternate),
+              null !== current &&
+                null === findFirstSuspended(current) &&
+                (revealOrder = renderLanes),
+              (renderLanes = renderLanes.sibling);
+          renderLanes = revealOrder;
+          null === renderLanes
+            ? ((revealOrder = workInProgress.child),
+              (workInProgress.child = null))
+            : ((revealOrder = renderLanes.sibling),
+              (renderLanes.sibling = null));
+          initSuspenseListRenderState(
+            workInProgress,
+            !1,
+            revealOrder,
+            renderLanes,
+            tailMode
+          );
+          break;
+        case "backwards":
+          renderLanes = null;
+          revealOrder = workInProgress.child;
+          for (workInProgress.child = null; null !== revealOrder; ) {
+            current = revealOrder.alternate;
+            if (null !== current && null === findFirstSuspended(current)) {
+              workInProgress.child = revealOrder;
+              break;
+            }
+            current = revealOrder.sibling;
+            revealOrder.sibling = renderLanes;
+            renderLanes = revealOrder;
+            revealOrder = current;
+          }
+          initSuspenseListRenderState(
+            workInProgress,
+            !0,
+            renderLanes,
+            null,
+            tailMode
+          );
+          break;
+        case "together":
+          initSuspenseListRenderState(workInProgress, !1, null, null, void 0);
+          break;
+        default:
+          workInProgress.memoizedState = null;
+      }
+      return workInProgress.child;
+    }
+    function bailoutOnAlreadyFinishedWork(
+      current,
+      workInProgress,
+      renderLanes
+    ) {
+      null !== current && (workInProgress.dependencies = current.dependencies);
+      profilerStartTime = -1;
+      workInProgressRootSkippedLanes |= workInProgress.lanes;
+      if (0 === (renderLanes & workInProgress.childLanes))
+        if (null !== current) {
+          if (
+            (propagateParentContextChanges(
+              current,
+              workInProgress,
+              renderLanes,
+              !1
+            ),
+            0 === (renderLanes & workInProgress.childLanes))
+          )
+            return null;
+        } else return null;
+      if (null !== current && workInProgress.child !== current.child)
+        throw Error("Resuming work not yet implemented.");
+      if (null !== workInProgress.child) {
+        current = workInProgress.child;
+        renderLanes = createWorkInProgress(current, current.pendingProps);
+        workInProgress.child = renderLanes;
+        for (renderLanes.return = workInProgress; null !== current.sibling; )
+          (current = current.sibling),
+            (renderLanes = renderLanes.sibling =
+              createWorkInProgress(current, current.pendingProps)),
+            (renderLanes.return = workInProgress);
+        renderLanes.sibling = null;
+      }
+      return workInProgress.child;
+    }
+    function checkScheduledUpdateOrContext(current, renderLanes) {
+      if (0 !== (current.lanes & renderLanes)) return !0;
+      current = current.dependencies;
+      return null !== current && checkIfContextChanged(current) ? !0 : !1;
+    }
+    function attemptEarlyBailoutIfNoScheduledUpdate(
+      current,
+      workInProgress,
+      renderLanes
+    ) {
+      switch (workInProgress.tag) {
+        case 3:
+          pushHostContainer(
+            workInProgress,
+            workInProgress.stateNode.containerInfo
+          );
+          pushProvider(
+            workInProgress,
+            CacheContext,
+            current.memoizedState.cache
+          );
+          resetHydrationState();
+          break;
+        case 27:
+        case 5:
+          pushHostContext(workInProgress);
+          break;
+        case 4:
+          pushHostContainer(
+            workInProgress,
+            workInProgress.stateNode.containerInfo
+          );
+          break;
+        case 10:
+          pushProvider(
+            workInProgress,
+            workInProgress.type,
+            workInProgress.memoizedProps.value
+          );
+          break;
+        case 12:
+          0 !== (renderLanes & workInProgress.childLanes) &&
+            (workInProgress.flags |= 4);
+          workInProgress.flags |= 2048;
+          var stateNode = workInProgress.stateNode;
+          stateNode.effectDuration = -0;
+          stateNode.passiveEffectDuration = -0;
+          break;
+        case 13:
+          stateNode = workInProgress.memoizedState;
+          if (null !== stateNode) {
+            if (null !== stateNode.dehydrated)
+              return (
+                pushPrimaryTreeSuspenseHandler(workInProgress),
+                (workInProgress.flags |= 128),
+                null
+              );
+            if (0 !== (renderLanes & workInProgress.child.childLanes))
+              return updateSuspenseComponent(
+                current,
+                workInProgress,
+                renderLanes
+              );
+            pushPrimaryTreeSuspenseHandler(workInProgress);
+            current = bailoutOnAlreadyFinishedWork(
+              current,
+              workInProgress,
+              renderLanes
+            );
+            return null !== current ? current.sibling : null;
+          }
+          pushPrimaryTreeSuspenseHandler(workInProgress);
+          break;
+        case 19:
+          var didSuspendBefore = 0 !== (current.flags & 128);
+          stateNode = 0 !== (renderLanes & workInProgress.childLanes);
+          stateNode ||
+            (propagateParentContextChanges(
+              current,
+              workInProgress,
+              renderLanes,
+              !1
+            ),
+            (stateNode = 0 !== (renderLanes & workInProgress.childLanes)));
+          if (didSuspendBefore) {
+            if (stateNode)
+              return updateSuspenseListComponent(
+                current,
+                workInProgress,
+                renderLanes
+              );
+            workInProgress.flags |= 128;
+          }
+          didSuspendBefore = workInProgress.memoizedState;
+          null !== didSuspendBefore &&
+            ((didSuspendBefore.rendering = null),
+            (didSuspendBefore.tail = null),
+            (didSuspendBefore.lastEffect = null));
+          push(
+            suspenseStackCursor,
+            suspenseStackCursor.current,
+            workInProgress
+          );
+          if (stateNode) break;
+          else return null;
+        case 22:
+        case 23:
+          return (
+            (workInProgress.lanes = 0),
+            updateOffscreenComponent(current, workInProgress, renderLanes)
+          );
+        case 24:
+          pushProvider(
+            workInProgress,
+            CacheContext,
+            current.memoizedState.cache
+          );
+      }
+      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
+    }
+    function beginWork(current, workInProgress, renderLanes) {
+      if (workInProgress._debugNeedsRemount && null !== current) {
+        renderLanes = createFiberFromTypeAndProps(
+          workInProgress.type,
+          workInProgress.key,
+          workInProgress.pendingProps,
+          workInProgress._debugOwner || null,
+          workInProgress.mode,
+          workInProgress.lanes
+        );
+        renderLanes._debugStack = workInProgress._debugStack;
+        renderLanes._debugTask = workInProgress._debugTask;
+        var returnFiber = workInProgress.return;
+        if (null === returnFiber) throw Error("Cannot swap the root fiber.");
+        current.alternate = null;
+        workInProgress.alternate = null;
+        renderLanes.index = workInProgress.index;
+        renderLanes.sibling = workInProgress.sibling;
+        renderLanes.return = workInProgress.return;
+        renderLanes.ref = workInProgress.ref;
+        renderLanes._debugInfo = workInProgress._debugInfo;
+        if (workInProgress === returnFiber.child)
+          returnFiber.child = renderLanes;
+        else {
+          var prevSibling = returnFiber.child;
+          if (null === prevSibling)
+            throw Error("Expected parent to have a child.");
+          for (; prevSibling.sibling !== workInProgress; )
+            if (((prevSibling = prevSibling.sibling), null === prevSibling))
+              throw Error("Expected to find the previous sibling.");
+          prevSibling.sibling = renderLanes;
+        }
+        workInProgress = returnFiber.deletions;
+        null === workInProgress
+          ? ((returnFiber.deletions = [current]), (returnFiber.flags |= 16))
+          : workInProgress.push(current);
+        renderLanes.flags |= 2;
+        return renderLanes;
+      }
+      if (null !== current)
+        if (
+          current.memoizedProps !== workInProgress.pendingProps ||
+          workInProgress.type !== current.type
+        )
+          didReceiveUpdate = !0;
+        else {
+          if (
+            !checkScheduledUpdateOrContext(current, renderLanes) &&
+            0 === (workInProgress.flags & 128)
+          )
+            return (
+              (didReceiveUpdate = !1),
+              attemptEarlyBailoutIfNoScheduledUpdate(
+                current,
+                workInProgress,
+                renderLanes
+              )
+            );
+          didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;
+        }
+      else {
+        didReceiveUpdate = !1;
+        if ((returnFiber = isHydrating))
+          warnIfNotHydrating(),
+            (returnFiber = 0 !== (workInProgress.flags & 1048576));
+        returnFiber &&
+          ((returnFiber = workInProgress.index),
+          warnIfNotHydrating(),
+          pushTreeId(workInProgress, treeForkCount, returnFiber));
+      }
+      workInProgress.lanes = 0;
+      switch (workInProgress.tag) {
+        case 16:
+          a: if (
+            ((returnFiber = workInProgress.pendingProps),
+            (current = callLazyInitInDEV(workInProgress.elementType)),
+            (workInProgress.type = current),
+            "function" === typeof current)
+          )
+            shouldConstruct(current)
+              ? ((returnFiber = resolveClassComponentProps(
+                  current,
+                  returnFiber
+                )),
+                (workInProgress.tag = 1),
+                (workInProgress.type = current =
+                  resolveFunctionForHotReloading(current)),
+                (workInProgress = updateClassComponent(
+                  null,
+                  workInProgress,
+                  current,
+                  returnFiber,
+                  renderLanes
+                )))
+              : ((workInProgress.tag = 0),
+                validateFunctionComponentInDev(workInProgress, current),
+                (workInProgress.type = current =
+                  resolveFunctionForHotReloading(current)),
+                (workInProgress = updateFunctionComponent(
+                  null,
+                  workInProgress,
+                  current,
+                  returnFiber,
+                  renderLanes
+                )));
+          else {
+            if (void 0 !== current && null !== current)
+              if (
+                ((prevSibling = current.$$typeof),
+                prevSibling === REACT_FORWARD_REF_TYPE)
+              ) {
+                workInProgress.tag = 11;
+                workInProgress.type = current =
+                  resolveForwardRefForHotReloading(current);
+                workInProgress = updateForwardRef(
+                  null,
+                  workInProgress,
+                  current,
+                  returnFiber,
+                  renderLanes
+                );
+                break a;
+              } else if (prevSibling === REACT_MEMO_TYPE) {
+                workInProgress.tag = 14;
+                workInProgress = updateMemoComponent(
+                  null,
+                  workInProgress,
+                  current,
+                  returnFiber,
+                  renderLanes
+                );
+                break a;
+              }
+            workInProgress = "";
+            null !== current &&
+              "object" === typeof current &&
+              current.$$typeof === REACT_LAZY_TYPE &&
+              (workInProgress =
+                " Did you wrap a component in React.lazy() more than once?");
+            current = getComponentNameFromType(current) || current;
+            throw Error(
+              "Element type is invalid. Received a promise that resolves to: " +
+                current +
+                ". Lazy element type must resolve to a class or function." +
+                workInProgress
+            );
+          }
+          return workInProgress;
+        case 0:
+          return updateFunctionComponent(
+            current,
+            workInProgress,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            renderLanes
+          );
+        case 1:
+          return (
+            (returnFiber = workInProgress.type),
+            (prevSibling = resolveClassComponentProps(
+              returnFiber,
+              workInProgress.pendingProps
+            )),
+            updateClassComponent(
+              current,
+              workInProgress,
+              returnFiber,
+              prevSibling,
+              renderLanes
+            )
+          );
+        case 3:
+          a: {
+            pushHostContainer(
+              workInProgress,
+              workInProgress.stateNode.containerInfo
+            );
+            if (null === current)
+              throw Error(
+                "Should have a current fiber. This is a bug in React."
+              );
+            returnFiber = workInProgress.pendingProps;
+            var prevState = workInProgress.memoizedState;
+            prevSibling = prevState.element;
+            cloneUpdateQueue(current, workInProgress);
+            processUpdateQueue(workInProgress, returnFiber, null, renderLanes);
+            var nextState = workInProgress.memoizedState;
+            returnFiber = nextState.cache;
+            pushProvider(workInProgress, CacheContext, returnFiber);
+            returnFiber !== prevState.cache &&
+              propagateContextChanges(
+                workInProgress,
+                [CacheContext],
+                renderLanes,
+                !0
+              );
+            suspendIfUpdateReadFromEntangledAsyncAction();
+            returnFiber = nextState.element;
+            if (prevState.isDehydrated)
+              if (
+                ((prevState = {
+                  element: returnFiber,
+                  isDehydrated: !1,
+                  cache: nextState.cache
+                }),
+                (workInProgress.updateQueue.baseState = prevState),
+                (workInProgress.memoizedState = prevState),
+                workInProgress.flags & 256)
+              ) {
+                workInProgress = mountHostRootWithoutHydrating(
+                  current,
+                  workInProgress,
+                  returnFiber,
+                  renderLanes
+                );
+                break a;
+              } else if (returnFiber !== prevSibling) {
+                prevSibling = createCapturedValueAtFiber(
+                  Error(
+                    "This root received an early update, before anything was able hydrate. Switched the entire root to client rendering."
+                  ),
+                  workInProgress
+                );
+                queueHydrationError(prevSibling);
+                workInProgress = mountHostRootWithoutHydrating(
+                  current,
+                  workInProgress,
+                  returnFiber,
+                  renderLanes
+                );
+                break a;
+              } else {
+                current = workInProgress.stateNode.containerInfo;
+                switch (current.nodeType) {
+                  case 9:
+                    current = current.body;
+                    break;
+                  default:
+                    current =
+                      "HTML" === current.nodeName
+                        ? current.ownerDocument.body
+                        : current;
+                }
+                nextHydratableInstance = getNextHydratable(current.firstChild);
+                hydrationParentFiber = workInProgress;
+                isHydrating = !0;
+                hydrationErrors = null;
+                didSuspendOrErrorDEV = !1;
+                hydrationDiffRootDEV = null;
+                rootOrSingletonContext = !0;
+                current = mountChildFibers(
+                  workInProgress,
+                  null,
+                  returnFiber,
+                  renderLanes
+                );
+                for (workInProgress.child = current; current; )
+                  (current.flags = (current.flags & -3) | 4096),
+                    (current = current.sibling);
+              }
+            else {
+              resetHydrationState();
+              if (returnFiber === prevSibling) {
+                workInProgress = bailoutOnAlreadyFinishedWork(
+                  current,
+                  workInProgress,
+                  renderLanes
+                );
+                break a;
+              }
+              reconcileChildren(
+                current,
+                workInProgress,
+                returnFiber,
+                renderLanes
+              );
+            }
+            workInProgress = workInProgress.child;
+          }
+          return workInProgress;
+        case 26:
+          return (
+            markRef(current, workInProgress),
+            null === current
+              ? (current = getResource(
+                  workInProgress.type,
+                  null,
+                  workInProgress.pendingProps,
+                  null
+                ))
+                ? (workInProgress.memoizedState = current)
+                : isHydrating ||
+                  ((current = workInProgress.type),
+                  (renderLanes = workInProgress.pendingProps),
+                  (returnFiber = requiredContext(
+                    rootInstanceStackCursor.current
+                  )),
+                  (returnFiber =
+                    getOwnerDocumentFromRootContainer(
+                      returnFiber
+                    ).createElement(current)),
+                  (returnFiber[internalInstanceKey] = workInProgress),
+                  (returnFiber[internalPropsKey] = renderLanes),
+                  setInitialProperties(returnFiber, current, renderLanes),
+                  markNodeAsHoistable(returnFiber),
+                  (workInProgress.stateNode = returnFiber))
+              : (workInProgress.memoizedState = getResource(
+                  workInProgress.type,
+                  current.memoizedProps,
+                  workInProgress.pendingProps,
+                  current.memoizedState
+                )),
+            null
+          );
+        case 27:
+          return (
+            pushHostContext(workInProgress),
+            null === current &&
+              isHydrating &&
+              ((returnFiber = requiredContext(rootInstanceStackCursor.current)),
+              (prevSibling = getHostContext()),
+              (returnFiber = workInProgress.stateNode =
+                resolveSingletonInstance(
+                  workInProgress.type,
+                  workInProgress.pendingProps,
+                  returnFiber,
+                  prevSibling,
+                  !1
+                )),
+              didSuspendOrErrorDEV ||
+                ((prevSibling = diffHydratedProperties(
+                  returnFiber,
+                  workInProgress.type,
+                  workInProgress.pendingProps,
+                  prevSibling
+                )),
+                null !== prevSibling &&
+                  (buildHydrationDiffNode(workInProgress, 0).serverProps =
+                    prevSibling)),
+              (hydrationParentFiber = workInProgress),
+              (rootOrSingletonContext = !0),
+              (prevSibling = nextHydratableInstance),
+              isSingletonScope(workInProgress.type)
+                ? ((previousHydratableOnEnteringScopedSingleton = prevSibling),
+                  (nextHydratableInstance = getNextHydratable(
+                    returnFiber.firstChild
+                  )))
+                : (nextHydratableInstance = prevSibling)),
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps.children,
+              renderLanes
+            ),
+            markRef(current, workInProgress),
+            null === current && (workInProgress.flags |= 4194304),
+            workInProgress.child
+          );
+        case 5:
+          return (
+            null === current &&
+              isHydrating &&
+              ((prevState = getHostContext()),
+              (returnFiber = validateDOMNesting(
+                workInProgress.type,
+                prevState.ancestorInfo
+              )),
+              (prevSibling = nextHydratableInstance),
+              (nextState = !prevSibling) ||
+                ((nextState = canHydrateInstance(
+                  prevSibling,
+                  workInProgress.type,
+                  workInProgress.pendingProps,
+                  rootOrSingletonContext
+                )),
+                null !== nextState
+                  ? ((workInProgress.stateNode = nextState),
+                    didSuspendOrErrorDEV ||
+                      ((prevState = diffHydratedProperties(
+                        nextState,
+                        workInProgress.type,
+                        workInProgress.pendingProps,
+                        prevState
+                      )),
+                      null !== prevState &&
+                        (buildHydrationDiffNode(workInProgress, 0).serverProps =
+                          prevState)),
+                    (hydrationParentFiber = workInProgress),
+                    (nextHydratableInstance = getNextHydratable(
+                      nextState.firstChild
+                    )),
+                    (rootOrSingletonContext = !1),
+                    (prevState = !0))
+                  : (prevState = !1),
+                (nextState = !prevState)),
+              nextState &&
+                (returnFiber &&
+                  warnNonHydratedInstance(workInProgress, prevSibling),
+                throwOnHydrationMismatch(workInProgress))),
+            pushHostContext(workInProgress),
+            (prevSibling = workInProgress.type),
+            (prevState = workInProgress.pendingProps),
+            (nextState = null !== current ? current.memoizedProps : null),
+            (returnFiber = prevState.children),
+            shouldSetTextContent(prevSibling, prevState)
+              ? (returnFiber = null)
+              : null !== nextState &&
+                shouldSetTextContent(prevSibling, nextState) &&
+                (workInProgress.flags |= 32),
+            null !== workInProgress.memoizedState &&
+              ((prevSibling = renderWithHooks(
+                current,
+                workInProgress,
+                TransitionAwareHostComponent,
+                null,
+                null,
+                renderLanes
+              )),
+              (HostTransitionContext._currentValue = prevSibling)),
+            markRef(current, workInProgress),
+            reconcileChildren(
+              current,
+              workInProgress,
+              returnFiber,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 6:
+          return (
+            null === current &&
+              isHydrating &&
+              ((current = workInProgress.pendingProps),
+              (renderLanes = getHostContext()),
+              (returnFiber = renderLanes.ancestorInfo.current),
+              (current =
+                null != returnFiber
+                  ? validateTextNesting(
+                      current,
+                      returnFiber.tag,
+                      renderLanes.ancestorInfo.implicitRootScope
+                    )
+                  : !0),
+              (renderLanes = nextHydratableInstance),
+              (returnFiber = !renderLanes) ||
+                ((returnFiber = canHydrateTextInstance(
+                  renderLanes,
+                  workInProgress.pendingProps,
+                  rootOrSingletonContext
+                )),
+                null !== returnFiber
+                  ? ((workInProgress.stateNode = returnFiber),
+                    (hydrationParentFiber = workInProgress),
+                    (nextHydratableInstance = null),
+                    (returnFiber = !0))
+                  : (returnFiber = !1),
+                (returnFiber = !returnFiber)),
+              returnFiber &&
+                (current &&
+                  warnNonHydratedInstance(workInProgress, renderLanes),
+                throwOnHydrationMismatch(workInProgress))),
+            null
+          );
+        case 13:
+          return updateSuspenseComponent(current, workInProgress, renderLanes);
+        case 4:
+          return (
+            pushHostContainer(
+              workInProgress,
+              workInProgress.stateNode.containerInfo
+            ),
+            (returnFiber = workInProgress.pendingProps),
+            null === current
+              ? (workInProgress.child = reconcileChildFibers(
+                  workInProgress,
+                  null,
+                  returnFiber,
+                  renderLanes
+                ))
+              : reconcileChildren(
+                  current,
+                  workInProgress,
+                  returnFiber,
+                  renderLanes
+                ),
+            workInProgress.child
+          );
+        case 11:
+          return updateForwardRef(
+            current,
+            workInProgress,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            renderLanes
+          );
+        case 7:
+          return (
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 8:
+          return (
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps.children,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 12:
+          return (
+            (workInProgress.flags |= 4),
+            (workInProgress.flags |= 2048),
+            (returnFiber = workInProgress.stateNode),
+            (returnFiber.effectDuration = -0),
+            (returnFiber.passiveEffectDuration = -0),
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps.children,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 10:
+          return (
+            (returnFiber = workInProgress.type),
+            (prevSibling = workInProgress.pendingProps),
+            (prevState = prevSibling.value),
+            "value" in prevSibling ||
+              hasWarnedAboutUsingNoValuePropOnContextProvider ||
+              ((hasWarnedAboutUsingNoValuePropOnContextProvider = !0),
+              console.error(
+                "The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?"
+              )),
+            pushProvider(workInProgress, returnFiber, prevState),
+            reconcileChildren(
+              current,
+              workInProgress,
+              prevSibling.children,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 9:
+          return (
+            (prevSibling = workInProgress.type._context),
+            (returnFiber = workInProgress.pendingProps.children),
+            "function" !== typeof returnFiber &&
+              console.error(
+                "A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."
+              ),
+            prepareToReadContext(workInProgress),
+            (prevSibling = readContext(prevSibling)),
+            markComponentRenderStarted(workInProgress),
+            (returnFiber = callComponentInDEV(
+              returnFiber,
+              prevSibling,
+              void 0
+            )),
+            markComponentRenderStopped(),
+            (workInProgress.flags |= 1),
+            reconcileChildren(
+              current,
+              workInProgress,
+              returnFiber,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 14:
+          return updateMemoComponent(
+            current,
+            workInProgress,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            renderLanes
+          );
+        case 15:
+          return updateSimpleMemoComponent(
+            current,
+            workInProgress,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            renderLanes
+          );
+        case 19:
+          return updateSuspenseListComponent(
+            current,
+            workInProgress,
+            renderLanes
+          );
+        case 31:
+          return (
+            (returnFiber = workInProgress.pendingProps),
+            (renderLanes = workInProgress.mode),
+            (returnFiber = {
+              mode: returnFiber.mode,
+              children: returnFiber.children
+            }),
+            null === current
+              ? ((current = mountWorkInProgressOffscreenFiber(
+                  returnFiber,
+                  renderLanes
+                )),
+                (current.ref = workInProgress.ref),
+                (workInProgress.child = current),
+                (current.return = workInProgress),
+                (workInProgress = current))
+              : ((current = createWorkInProgress(current.child, returnFiber)),
+                (current.ref = workInProgress.ref),
+                (workInProgress.child = current),
+                (current.return = workInProgress),
+                (workInProgress = current)),
+            workInProgress
+          );
+        case 22:
+          return updateOffscreenComponent(current, workInProgress, renderLanes);
+        case 24:
+          return (
+            prepareToReadContext(workInProgress),
+            (returnFiber = readContext(CacheContext)),
+            null === current
+              ? ((prevSibling = peekCacheFromPool()),
+                null === prevSibling &&
+                  ((prevSibling = workInProgressRoot),
+                  (prevState = createCache()),
+                  (prevSibling.pooledCache = prevState),
+                  retainCache(prevState),
+                  null !== prevState &&
+                    (prevSibling.pooledCacheLanes |= renderLanes),
+                  (prevSibling = prevState)),
+                (workInProgress.memoizedState = {
+                  parent: returnFiber,
+                  cache: prevSibling
+                }),
+                initializeUpdateQueue(workInProgress),
+                pushProvider(workInProgress, CacheContext, prevSibling))
+              : (0 !== (current.lanes & renderLanes) &&
+                  (cloneUpdateQueue(current, workInProgress),
+                  processUpdateQueue(workInProgress, null, null, renderLanes),
+                  suspendIfUpdateReadFromEntangledAsyncAction()),
+                (prevSibling = current.memoizedState),
+                (prevState = workInProgress.memoizedState),
+                prevSibling.parent !== returnFiber
+                  ? ((prevSibling = {
+                      parent: returnFiber,
+                      cache: returnFiber
+                    }),
+                    (workInProgress.memoizedState = prevSibling),
+                    0 === workInProgress.lanes &&
+                      (workInProgress.memoizedState =
+                        workInProgress.updateQueue.baseState =
+                          prevSibling),
+                    pushProvider(workInProgress, CacheContext, returnFiber))
+                  : ((returnFiber = prevState.cache),
+                    pushProvider(workInProgress, CacheContext, returnFiber),
+                    returnFiber !== prevSibling.cache &&
+                      propagateContextChanges(
+                        workInProgress,
+                        [CacheContext],
+                        renderLanes,
+                        !0
+                      ))),
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps.children,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 29:
+          throw workInProgress.pendingProps;
+      }
+      throw Error(
+        "Unknown unit of work tag (" +
+          workInProgress.tag +
+          "). This error is likely caused by a bug in React. Please file an issue."
+      );
+    }
+    function markUpdate(workInProgress) {
+      workInProgress.flags |= 4;
+    }
+    function preloadResourceAndSuspendIfNeeded(workInProgress, resource) {
+      if (
+        "stylesheet" !== resource.type ||
+        (resource.state.loading & Inserted) !== NotLoaded
+      )
+        workInProgress.flags &= -16777217;
+      else if (
+        ((workInProgress.flags |= 16777216), !preloadResource(resource))
+      ) {
+        resource = suspenseHandlerStackCursor.current;
+        if (
+          null !== resource &&
+          ((workInProgressRootRenderLanes & 4194048) ===
+          workInProgressRootRenderLanes
+            ? null !== shellBoundary
+            : ((workInProgressRootRenderLanes & 62914560) !==
+                workInProgressRootRenderLanes &&
+                0 === (workInProgressRootRenderLanes & 536870912)) ||
+              resource !== shellBoundary)
+        )
+          throw (
+            ((suspendedThenable = noopSuspenseyCommitThenable),
+            SuspenseyCommitException)
+          );
+        workInProgress.flags |= 8192;
+      }
+    }
+    function scheduleRetryEffect(workInProgress, retryQueue) {
+      null !== retryQueue && (workInProgress.flags |= 4);
+      workInProgress.flags & 16384 &&
+        ((retryQueue =
+          22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),
+        (workInProgress.lanes |= retryQueue),
+        (workInProgressSuspendedRetryLanes |= retryQueue));
+    }
+    function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {
+      if (!isHydrating)
+        switch (renderState.tailMode) {
+          case "hidden":
+            hasRenderedATailFallback = renderState.tail;
+            for (var lastTailNode = null; null !== hasRenderedATailFallback; )
+              null !== hasRenderedATailFallback.alternate &&
+                (lastTailNode = hasRenderedATailFallback),
+                (hasRenderedATailFallback = hasRenderedATailFallback.sibling);
+            null === lastTailNode
+              ? (renderState.tail = null)
+              : (lastTailNode.sibling = null);
+            break;
+          case "collapsed":
+            lastTailNode = renderState.tail;
+            for (var _lastTailNode = null; null !== lastTailNode; )
+              null !== lastTailNode.alternate && (_lastTailNode = lastTailNode),
+                (lastTailNode = lastTailNode.sibling);
+            null === _lastTailNode
+              ? hasRenderedATailFallback || null === renderState.tail
+                ? (renderState.tail = null)
+                : (renderState.tail.sibling = null)
+              : (_lastTailNode.sibling = null);
+        }
+    }
+    function bubbleProperties(completedWork) {
+      var didBailout =
+          null !== completedWork.alternate &&
+          completedWork.alternate.child === completedWork.child,
+        newChildLanes = 0,
+        subtreeFlags = 0;
+      if (didBailout)
+        if ((completedWork.mode & ProfileMode) !== NoMode) {
+          for (
+            var _treeBaseDuration = completedWork.selfBaseDuration,
+              _child2 = completedWork.child;
+            null !== _child2;
+
+          )
+            (newChildLanes |= _child2.lanes | _child2.childLanes),
+              (subtreeFlags |= _child2.subtreeFlags & 65011712),
+              (subtreeFlags |= _child2.flags & 65011712),
+              (_treeBaseDuration += _child2.treeBaseDuration),
+              (_child2 = _child2.sibling);
+          completedWork.treeBaseDuration = _treeBaseDuration;
+        } else
+          for (
+            _treeBaseDuration = completedWork.child;
+            null !== _treeBaseDuration;
+
+          )
+            (newChildLanes |=
+              _treeBaseDuration.lanes | _treeBaseDuration.childLanes),
+              (subtreeFlags |= _treeBaseDuration.subtreeFlags & 65011712),
+              (subtreeFlags |= _treeBaseDuration.flags & 65011712),
+              (_treeBaseDuration.return = completedWork),
+              (_treeBaseDuration = _treeBaseDuration.sibling);
+      else if ((completedWork.mode & ProfileMode) !== NoMode) {
+        _treeBaseDuration = completedWork.actualDuration;
+        _child2 = completedWork.selfBaseDuration;
+        for (var child = completedWork.child; null !== child; )
+          (newChildLanes |= child.lanes | child.childLanes),
+            (subtreeFlags |= child.subtreeFlags),
+            (subtreeFlags |= child.flags),
+            (_treeBaseDuration += child.actualDuration),
+            (_child2 += child.treeBaseDuration),
+            (child = child.sibling);
+        completedWork.actualDuration = _treeBaseDuration;
+        completedWork.treeBaseDuration = _child2;
+      } else
+        for (
+          _treeBaseDuration = completedWork.child;
+          null !== _treeBaseDuration;
+
+        )
+          (newChildLanes |=
+            _treeBaseDuration.lanes | _treeBaseDuration.childLanes),
+            (subtreeFlags |= _treeBaseDuration.subtreeFlags),
+            (subtreeFlags |= _treeBaseDuration.flags),
+            (_treeBaseDuration.return = completedWork),
+            (_treeBaseDuration = _treeBaseDuration.sibling);
+      completedWork.subtreeFlags |= subtreeFlags;
+      completedWork.childLanes = newChildLanes;
+      return didBailout;
+    }
+    function completeWork(current, workInProgress, renderLanes) {
+      var newProps = workInProgress.pendingProps;
+      popTreeContext(workInProgress);
+      switch (workInProgress.tag) {
+        case 31:
+        case 16:
+        case 15:
+        case 0:
+        case 11:
+        case 7:
+        case 8:
+        case 12:
+        case 9:
+        case 14:
+          return bubbleProperties(workInProgress), null;
+        case 1:
+          return bubbleProperties(workInProgress), null;
+        case 3:
+          renderLanes = workInProgress.stateNode;
+          newProps = null;
+          null !== current && (newProps = current.memoizedState.cache);
+          workInProgress.memoizedState.cache !== newProps &&
+            (workInProgress.flags |= 2048);
+          popProvider(CacheContext, workInProgress);
+          popHostContainer(workInProgress);
+          renderLanes.pendingContext &&
+            ((renderLanes.context = renderLanes.pendingContext),
+            (renderLanes.pendingContext = null));
+          if (null === current || null === current.child)
+            popHydrationState(workInProgress)
+              ? (emitPendingHydrationWarnings(), markUpdate(workInProgress))
+              : null === current ||
+                (current.memoizedState.isDehydrated &&
+                  0 === (workInProgress.flags & 256)) ||
+                ((workInProgress.flags |= 1024),
+                upgradeHydrationErrorsToRecoverable());
+          bubbleProperties(workInProgress);
+          return null;
+        case 26:
+          return (
+            (renderLanes = workInProgress.memoizedState),
+            null === current
+              ? (markUpdate(workInProgress),
+                null !== renderLanes
+                  ? (bubbleProperties(workInProgress),
+                    preloadResourceAndSuspendIfNeeded(
+                      workInProgress,
+                      renderLanes
+                    ))
+                  : (bubbleProperties(workInProgress),
+                    (workInProgress.flags &= -16777217)))
+              : renderLanes
+                ? renderLanes !== current.memoizedState
+                  ? (markUpdate(workInProgress),
+                    bubbleProperties(workInProgress),
+                    preloadResourceAndSuspendIfNeeded(
+                      workInProgress,
+                      renderLanes
+                    ))
+                  : (bubbleProperties(workInProgress),
+                    (workInProgress.flags &= -16777217))
+                : (current.memoizedProps !== newProps &&
+                    markUpdate(workInProgress),
+                  bubbleProperties(workInProgress),
+                  (workInProgress.flags &= -16777217)),
+            null
+          );
+        case 27:
+          popHostContext(workInProgress);
+          renderLanes = requiredContext(rootInstanceStackCursor.current);
+          var _type = workInProgress.type;
+          if (null !== current && null != workInProgress.stateNode)
+            current.memoizedProps !== newProps && markUpdate(workInProgress);
+          else {
+            if (!newProps) {
+              if (null === workInProgress.stateNode)
+                throw Error(
+                  "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."
+                );
+              bubbleProperties(workInProgress);
+              return null;
+            }
+            current = getHostContext();
+            popHydrationState(workInProgress)
+              ? prepareToHydrateHostInstance(workInProgress, current)
+              : ((current = resolveSingletonInstance(
+                  _type,
+                  newProps,
+                  renderLanes,
+                  current,
+                  !0
+                )),
+                (workInProgress.stateNode = current),
+                markUpdate(workInProgress));
+          }
+          bubbleProperties(workInProgress);
+          return null;
+        case 5:
+          popHostContext(workInProgress);
+          renderLanes = workInProgress.type;
+          if (null !== current && null != workInProgress.stateNode)
+            current.memoizedProps !== newProps && markUpdate(workInProgress);
+          else {
+            if (!newProps) {
+              if (null === workInProgress.stateNode)
+                throw Error(
+                  "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."
+                );
+              bubbleProperties(workInProgress);
+              return null;
+            }
+            _type = getHostContext();
+            if (popHydrationState(workInProgress))
+              prepareToHydrateHostInstance(workInProgress, _type);
+            else {
+              current = requiredContext(rootInstanceStackCursor.current);
+              validateDOMNesting(renderLanes, _type.ancestorInfo);
+              _type = _type.context;
+              current = getOwnerDocumentFromRootContainer(current);
+              switch (_type) {
+                case HostContextNamespaceSvg:
+                  current = current.createElementNS(SVG_NAMESPACE, renderLanes);
+                  break;
+                case HostContextNamespaceMath:
+                  current = current.createElementNS(
+                    MATH_NAMESPACE,
+                    renderLanes
+                  );
+                  break;
+                default:
+                  switch (renderLanes) {
+                    case "svg":
+                      current = current.createElementNS(
+                        SVG_NAMESPACE,
+                        renderLanes
+                      );
+                      break;
+                    case "math":
+                      current = current.createElementNS(
+                        MATH_NAMESPACE,
+                        renderLanes
+                      );
+                      break;
+                    case "script":
+                      current = current.createElement("div");
+                      current.innerHTML = "<script>\x3c/script>";
+                      current = current.removeChild(current.firstChild);
+                      break;
+                    case "select":
+                      current =
+                        "string" === typeof newProps.is
+                          ? current.createElement("select", { is: newProps.is })
+                          : current.createElement("select");
+                      newProps.multiple
+                        ? (current.multiple = !0)
+                        : newProps.size && (current.size = newProps.size);
+                      break;
+                    default:
+                      (current =
+                        "string" === typeof newProps.is
+                          ? current.createElement(renderLanes, {
+                              is: newProps.is
+                            })
+                          : current.createElement(renderLanes)),
+                        -1 === renderLanes.indexOf("-") &&
+                          (renderLanes !== renderLanes.toLowerCase() &&
+                            console.error(
+                              "<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.",
+                              renderLanes
+                            ),
+                          "[object HTMLUnknownElement]" !==
+                            Object.prototype.toString.call(current) ||
+                            hasOwnProperty.call(
+                              warnedUnknownTags,
+                              renderLanes
+                            ) ||
+                            ((warnedUnknownTags[renderLanes] = !0),
+                            console.error(
+                              "The tag <%s> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.",
+                              renderLanes
+                            )));
+                  }
+              }
+              current[internalInstanceKey] = workInProgress;
+              current[internalPropsKey] = newProps;
+              a: for (_type = workInProgress.child; null !== _type; ) {
+                if (5 === _type.tag || 6 === _type.tag)
+                  current.appendChild(_type.stateNode);
+                else if (
+                  4 !== _type.tag &&
+                  27 !== _type.tag &&
+                  null !== _type.child
+                ) {
+                  _type.child.return = _type;
+                  _type = _type.child;
+                  continue;
+                }
+                if (_type === workInProgress) break a;
+                for (; null === _type.sibling; ) {
+                  if (null === _type.return || _type.return === workInProgress)
+                    break a;
+                  _type = _type.return;
+                }
+                _type.sibling.return = _type.return;
+                _type = _type.sibling;
+              }
+              workInProgress.stateNode = current;
+              a: switch (
+                (setInitialProperties(current, renderLanes, newProps),
+                renderLanes)
+              ) {
+                case "button":
+                case "input":
+                case "select":
+                case "textarea":
+                  current = !!newProps.autoFocus;
+                  break a;
+                case "img":
+                  current = !0;
+                  break a;
+                default:
+                  current = !1;
+              }
+              current && markUpdate(workInProgress);
+            }
+          }
+          bubbleProperties(workInProgress);
+          workInProgress.flags &= -16777217;
+          return null;
+        case 6:
+          if (current && null != workInProgress.stateNode)
+            current.memoizedProps !== newProps && markUpdate(workInProgress);
+          else {
+            if (
+              "string" !== typeof newProps &&
+              null === workInProgress.stateNode
+            )
+              throw Error(
+                "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."
+              );
+            current = requiredContext(rootInstanceStackCursor.current);
+            renderLanes = getHostContext();
+            if (popHydrationState(workInProgress)) {
+              current = workInProgress.stateNode;
+              renderLanes = workInProgress.memoizedProps;
+              _type = !didSuspendOrErrorDEV;
+              newProps = null;
+              var returnFiber = hydrationParentFiber;
+              if (null !== returnFiber)
+                switch (returnFiber.tag) {
+                  case 3:
+                    _type &&
+                      ((_type = diffHydratedTextForDevWarnings(
+                        current,
+                        renderLanes,
+                        newProps
+                      )),
+                      null !== _type &&
+                        (buildHydrationDiffNode(workInProgress, 0).serverProps =
+                          _type));
+                    break;
+                  case 27:
+                  case 5:
+                    (newProps = returnFiber.memoizedProps),
+                      _type &&
+                        ((_type = diffHydratedTextForDevWarnings(
+                          current,
+                          renderLanes,
+                          newProps
+                        )),
+                        null !== _type &&
+                          (buildHydrationDiffNode(
+                            workInProgress,
+                            0
+                          ).serverProps = _type));
+                }
+              current[internalInstanceKey] = workInProgress;
+              current =
+                current.nodeValue === renderLanes ||
+                (null !== newProps &&
+                  !0 === newProps.suppressHydrationWarning) ||
+                checkForUnmatchedText(current.nodeValue, renderLanes)
+                  ? !0
+                  : !1;
+              current || throwOnHydrationMismatch(workInProgress);
+            } else
+              (_type = renderLanes.ancestorInfo.current),
+                null != _type &&
+                  validateTextNesting(
+                    newProps,
+                    _type.tag,
+                    renderLanes.ancestorInfo.implicitRootScope
+                  ),
+                (current =
+                  getOwnerDocumentFromRootContainer(current).createTextNode(
+                    newProps
+                  )),
+                (current[internalInstanceKey] = workInProgress),
+                (workInProgress.stateNode = current);
+          }
+          bubbleProperties(workInProgress);
+          return null;
+        case 13:
+          newProps = workInProgress.memoizedState;
+          if (
+            null === current ||
+            (null !== current.memoizedState &&
+              null !== current.memoizedState.dehydrated)
+          ) {
+            _type = popHydrationState(workInProgress);
+            if (null !== newProps && null !== newProps.dehydrated) {
+              if (null === current) {
+                if (!_type)
+                  throw Error(
+                    "A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React."
+                  );
+                _type = workInProgress.memoizedState;
+                _type = null !== _type ? _type.dehydrated : null;
+                if (!_type)
+                  throw Error(
+                    "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue."
+                  );
+                _type[internalInstanceKey] = workInProgress;
+                bubbleProperties(workInProgress);
+                (workInProgress.mode & ProfileMode) !== NoMode &&
+                  null !== newProps &&
+                  ((_type = workInProgress.child),
+                  null !== _type &&
+                    (workInProgress.treeBaseDuration -=
+                      _type.treeBaseDuration));
+              } else
+                emitPendingHydrationWarnings(),
+                  resetHydrationState(),
+                  0 === (workInProgress.flags & 128) &&
+                    (workInProgress.memoizedState = null),
+                  (workInProgress.flags |= 4),
+                  bubbleProperties(workInProgress),
+                  (workInProgress.mode & ProfileMode) !== NoMode &&
+                    null !== newProps &&
+                    ((_type = workInProgress.child),
+                    null !== _type &&
+                      (workInProgress.treeBaseDuration -=
+                        _type.treeBaseDuration));
+              _type = !1;
+            } else
+              (_type = upgradeHydrationErrorsToRecoverable()),
+                null !== current &&
+                  null !== current.memoizedState &&
+                  (current.memoizedState.hydrationErrors = _type),
+                (_type = !0);
+            if (!_type) {
+              if (workInProgress.flags & 256)
+                return popSuspenseHandler(workInProgress), workInProgress;
+              popSuspenseHandler(workInProgress);
+              return null;
+            }
+          }
+          popSuspenseHandler(workInProgress);
+          if (0 !== (workInProgress.flags & 128))
+            return (
+              (workInProgress.lanes = renderLanes),
+              (workInProgress.mode & ProfileMode) !== NoMode &&
+                transferActualDuration(workInProgress),
+              workInProgress
+            );
+          renderLanes = null !== newProps;
+          current = null !== current && null !== current.memoizedState;
+          renderLanes &&
+            ((newProps = workInProgress.child),
+            (_type = null),
+            null !== newProps.alternate &&
+              null !== newProps.alternate.memoizedState &&
+              null !== newProps.alternate.memoizedState.cachePool &&
+              (_type = newProps.alternate.memoizedState.cachePool.pool),
+            (returnFiber = null),
+            null !== newProps.memoizedState &&
+              null !== newProps.memoizedState.cachePool &&
+              (returnFiber = newProps.memoizedState.cachePool.pool),
+            returnFiber !== _type && (newProps.flags |= 2048));
+          renderLanes !== current &&
+            renderLanes &&
+            (workInProgress.child.flags |= 8192);
+          scheduleRetryEffect(workInProgress, workInProgress.updateQueue);
+          bubbleProperties(workInProgress);
+          (workInProgress.mode & ProfileMode) !== NoMode &&
+            renderLanes &&
+            ((current = workInProgress.child),
+            null !== current &&
+              (workInProgress.treeBaseDuration -= current.treeBaseDuration));
+          return null;
+        case 4:
+          return (
+            popHostContainer(workInProgress),
+            null === current &&
+              listenToAllSupportedEvents(
+                workInProgress.stateNode.containerInfo
+              ),
+            bubbleProperties(workInProgress),
+            null
+          );
+        case 10:
+          return (
+            popProvider(workInProgress.type, workInProgress),
+            bubbleProperties(workInProgress),
+            null
+          );
+        case 19:
+          pop(suspenseStackCursor, workInProgress);
+          _type = workInProgress.memoizedState;
+          if (null === _type) return bubbleProperties(workInProgress), null;
+          newProps = 0 !== (workInProgress.flags & 128);
+          returnFiber = _type.rendering;
+          if (null === returnFiber)
+            if (newProps) cutOffTailIfNeeded(_type, !1);
+            else {
+              if (
+                workInProgressRootExitStatus !== RootInProgress ||
+                (null !== current && 0 !== (current.flags & 128))
+              )
+                for (current = workInProgress.child; null !== current; ) {
+                  returnFiber = findFirstSuspended(current);
+                  if (null !== returnFiber) {
+                    workInProgress.flags |= 128;
+                    cutOffTailIfNeeded(_type, !1);
+                    current = returnFiber.updateQueue;
+                    workInProgress.updateQueue = current;
+                    scheduleRetryEffect(workInProgress, current);
+                    workInProgress.subtreeFlags = 0;
+                    current = renderLanes;
+                    for (
+                      renderLanes = workInProgress.child;
+                      null !== renderLanes;
+
+                    )
+                      resetWorkInProgress(renderLanes, current),
+                        (renderLanes = renderLanes.sibling);
+                    push(
+                      suspenseStackCursor,
+                      (suspenseStackCursor.current &
+                        SubtreeSuspenseContextMask) |
+                        ForceSuspenseFallback,
+                      workInProgress
+                    );
+                    return workInProgress.child;
+                  }
+                  current = current.sibling;
+                }
+              null !== _type.tail &&
+                now$1() > workInProgressRootRenderTargetTime &&
+                ((workInProgress.flags |= 128),
+                (newProps = !0),
+                cutOffTailIfNeeded(_type, !1),
+                (workInProgress.lanes = 4194304));
+            }
+          else {
+            if (!newProps)
+              if (
+                ((current = findFirstSuspended(returnFiber)), null !== current)
+              ) {
+                if (
+                  ((workInProgress.flags |= 128),
+                  (newProps = !0),
+                  (current = current.updateQueue),
+                  (workInProgress.updateQueue = current),
+                  scheduleRetryEffect(workInProgress, current),
+                  cutOffTailIfNeeded(_type, !0),
+                  null === _type.tail &&
+                    "hidden" === _type.tailMode &&
+                    !returnFiber.alternate &&
+                    !isHydrating)
+                )
+                  return bubbleProperties(workInProgress), null;
+              } else
+                2 * now$1() - _type.renderingStartTime >
+                  workInProgressRootRenderTargetTime &&
+                  536870912 !== renderLanes &&
+                  ((workInProgress.flags |= 128),
+                  (newProps = !0),
+                  cutOffTailIfNeeded(_type, !1),
+                  (workInProgress.lanes = 4194304));
+            _type.isBackwards
+              ? ((returnFiber.sibling = workInProgress.child),
+                (workInProgress.child = returnFiber))
+              : ((current = _type.last),
+                null !== current
+                  ? (current.sibling = returnFiber)
+                  : (workInProgress.child = returnFiber),
+                (_type.last = returnFiber));
+          }
+          if (null !== _type.tail)
+            return (
+              (current = _type.tail),
+              (_type.rendering = current),
+              (_type.tail = current.sibling),
+              (_type.renderingStartTime = now$1()),
+              (current.sibling = null),
+              (renderLanes = suspenseStackCursor.current),
+              (renderLanes = newProps
+                ? (renderLanes & SubtreeSuspenseContextMask) |
+                  ForceSuspenseFallback
+                : renderLanes & SubtreeSuspenseContextMask),
+              push(suspenseStackCursor, renderLanes, workInProgress),
+              current
+            );
+          bubbleProperties(workInProgress);
+          return null;
+        case 22:
+        case 23:
+          return (
+            popSuspenseHandler(workInProgress),
+            popHiddenContext(workInProgress),
+            (newProps = null !== workInProgress.memoizedState),
+            null !== current
+              ? (null !== current.memoizedState) !== newProps &&
+                (workInProgress.flags |= 8192)
+              : newProps && (workInProgress.flags |= 8192),
+            newProps
+              ? 0 !== (renderLanes & 536870912) &&
+                0 === (workInProgress.flags & 128) &&
+                (bubbleProperties(workInProgress),
+                workInProgress.subtreeFlags & 6 &&
+                  (workInProgress.flags |= 8192))
+              : bubbleProperties(workInProgress),
+            (renderLanes = workInProgress.updateQueue),
+            null !== renderLanes &&
+              scheduleRetryEffect(workInProgress, renderLanes.retryQueue),
+            (renderLanes = null),
+            null !== current &&
+              null !== current.memoizedState &&
+              null !== current.memoizedState.cachePool &&
+              (renderLanes = current.memoizedState.cachePool.pool),
+            (newProps = null),
+            null !== workInProgress.memoizedState &&
+              null !== workInProgress.memoizedState.cachePool &&
+              (newProps = workInProgress.memoizedState.cachePool.pool),
+            newProps !== renderLanes && (workInProgress.flags |= 2048),
+            null !== current && pop(resumedCache, workInProgress),
+            null
+          );
+        case 24:
+          return (
+            (renderLanes = null),
+            null !== current && (renderLanes = current.memoizedState.cache),
+            workInProgress.memoizedState.cache !== renderLanes &&
+              (workInProgress.flags |= 2048),
+            popProvider(CacheContext, workInProgress),
+            bubbleProperties(workInProgress),
+            null
+          );
+        case 25:
+          return null;
+        case 30:
+          return null;
+      }
+      throw Error(
+        "Unknown unit of work tag (" +
+          workInProgress.tag +
+          "). This error is likely caused by a bug in React. Please file an issue."
+      );
+    }
+    function unwindWork(current, workInProgress) {
+      popTreeContext(workInProgress);
+      switch (workInProgress.tag) {
+        case 1:
+          return (
+            (current = workInProgress.flags),
+            current & 65536
+              ? ((workInProgress.flags = (current & -65537) | 128),
+                (workInProgress.mode & ProfileMode) !== NoMode &&
+                  transferActualDuration(workInProgress),
+                workInProgress)
+              : null
+          );
+        case 3:
+          return (
+            popProvider(CacheContext, workInProgress),
+            popHostContainer(workInProgress),
+            (current = workInProgress.flags),
+            0 !== (current & 65536) && 0 === (current & 128)
+              ? ((workInProgress.flags = (current & -65537) | 128),
+                workInProgress)
+              : null
+          );
+        case 26:
+        case 27:
+        case 5:
+          return popHostContext(workInProgress), null;
+        case 13:
+          popSuspenseHandler(workInProgress);
+          current = workInProgress.memoizedState;
+          if (null !== current && null !== current.dehydrated) {
+            if (null === workInProgress.alternate)
+              throw Error(
+                "Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue."
+              );
+            resetHydrationState();
+          }
+          current = workInProgress.flags;
+          return current & 65536
+            ? ((workInProgress.flags = (current & -65537) | 128),
+              (workInProgress.mode & ProfileMode) !== NoMode &&
+                transferActualDuration(workInProgress),
+              workInProgress)
+            : null;
+        case 19:
+          return pop(suspenseStackCursor, workInProgress), null;
+        case 4:
+          return popHostContainer(workInProgress), null;
+        case 10:
+          return popProvider(workInProgress.type, workInProgress), null;
+        case 22:
+        case 23:
+          return (
+            popSuspenseHandler(workInProgress),
+            popHiddenContext(workInProgress),
+            null !== current && pop(resumedCache, workInProgress),
+            (current = workInProgress.flags),
+            current & 65536
+              ? ((workInProgress.flags = (current & -65537) | 128),
+                (workInProgress.mode & ProfileMode) !== NoMode &&
+                  transferActualDuration(workInProgress),
+                workInProgress)
+              : null
+          );
+        case 24:
+          return popProvider(CacheContext, workInProgress), null;
+        case 25:
+          return null;
+        default:
+          return null;
+      }
+    }
+    function unwindInterruptedWork(current, interruptedWork) {
+      popTreeContext(interruptedWork);
+      switch (interruptedWork.tag) {
+        case 3:
+          popProvider(CacheContext, interruptedWork);
+          popHostContainer(interruptedWork);
+          break;
+        case 26:
+        case 27:
+        case 5:
+          popHostContext(interruptedWork);
+          break;
+        case 4:
+          popHostContainer(interruptedWork);
+          break;
+        case 13:
+          popSuspenseHandler(interruptedWork);
+          break;
+        case 19:
+          pop(suspenseStackCursor, interruptedWork);
+          break;
+        case 10:
+          popProvider(interruptedWork.type, interruptedWork);
+          break;
+        case 22:
+        case 23:
+          popSuspenseHandler(interruptedWork);
+          popHiddenContext(interruptedWork);
+          null !== current && pop(resumedCache, interruptedWork);
+          break;
+        case 24:
+          popProvider(CacheContext, interruptedWork);
+      }
+    }
+    function shouldProfile(current) {
+      return (current.mode & ProfileMode) !== NoMode;
+    }
+    function commitHookLayoutEffects(finishedWork, hookFlags) {
+      shouldProfile(finishedWork)
+        ? (startEffectTimer(),
+          commitHookEffectListMount(hookFlags, finishedWork),
+          recordEffectDuration())
+        : commitHookEffectListMount(hookFlags, finishedWork);
+    }
+    function commitHookLayoutUnmountEffects(
+      finishedWork,
+      nearestMountedAncestor,
+      hookFlags
+    ) {
+      shouldProfile(finishedWork)
+        ? (startEffectTimer(),
+          commitHookEffectListUnmount(
+            hookFlags,
+            finishedWork,
+            nearestMountedAncestor
+          ),
+          recordEffectDuration())
+        : commitHookEffectListUnmount(
+            hookFlags,
+            finishedWork,
+            nearestMountedAncestor
+          );
+    }
+    function commitHookEffectListMount(flags, finishedWork) {
+      try {
+        var updateQueue = finishedWork.updateQueue,
+          lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;
+        if (null !== lastEffect) {
+          var firstEffect = lastEffect.next;
+          updateQueue = firstEffect;
+          do {
+            if (
+              (updateQueue.tag & flags) === flags &&
+              ((flags & Passive) !== NoFlags
+                ? null !== injectedProfilingHooks &&
+                  "function" ===
+                    typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted &&
+                  injectedProfilingHooks.markComponentPassiveEffectMountStarted(
+                    finishedWork
+                  )
+                : (flags & Layout) !== NoFlags &&
+                  null !== injectedProfilingHooks &&
+                  "function" ===
+                    typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted &&
+                  injectedProfilingHooks.markComponentLayoutEffectMountStarted(
+                    finishedWork
+                  ),
+              (lastEffect = void 0),
+              (flags & Insertion) !== NoFlags &&
+                (isRunningInsertionEffect = !0),
+              (lastEffect = runWithFiberInDEV(
+                finishedWork,
+                callCreateInDEV,
+                updateQueue
+              )),
+              (flags & Insertion) !== NoFlags &&
+                (isRunningInsertionEffect = !1),
+              (flags & Passive) !== NoFlags
+                ? null !== injectedProfilingHooks &&
+                  "function" ===
+                    typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped &&
+                  injectedProfilingHooks.markComponentPassiveEffectMountStopped()
+                : (flags & Layout) !== NoFlags &&
+                  null !== injectedProfilingHooks &&
+                  "function" ===
+                    typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped &&
+                  injectedProfilingHooks.markComponentLayoutEffectMountStopped(),
+              void 0 !== lastEffect && "function" !== typeof lastEffect)
+            ) {
+              var hookName = void 0;
+              hookName =
+                0 !== (updateQueue.tag & Layout)
+                  ? "useLayoutEffect"
+                  : 0 !== (updateQueue.tag & Insertion)
+                    ? "useInsertionEffect"
+                    : "useEffect";
+              var addendum = void 0;
+              addendum =
+                null === lastEffect
+                  ? " You returned null. If your effect does not require clean up, return undefined (or nothing)."
+                  : "function" === typeof lastEffect.then
+                    ? "\n\nIt looks like you wrote " +
+                      hookName +
+                      "(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\n\n" +
+                      hookName +
+                      "(() => {\n  async function fetchData() {\n    // You can await here\n    const response = await MyAPI.getData(someId);\n    // ...\n  }\n  fetchData();\n}, [someId]); // Or [] if effect doesn't need props or state\n\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching"
+                    : " You returned: " + lastEffect;
+              runWithFiberInDEV(
+                finishedWork,
+                function (n, a) {
+                  console.error(
+                    "%s must not return anything besides a function, which is used for clean-up.%s",
+                    n,
+                    a
+                  );
+                },
+                hookName,
+                addendum
+              );
+            }
+            updateQueue = updateQueue.next;
+          } while (updateQueue !== firstEffect);
+        }
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function commitHookEffectListUnmount(
+      flags,
+      finishedWork,
+      nearestMountedAncestor
+    ) {
+      try {
+        var updateQueue = finishedWork.updateQueue,
+          lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;
+        if (null !== lastEffect) {
+          var firstEffect = lastEffect.next;
+          updateQueue = firstEffect;
+          do {
+            if ((updateQueue.tag & flags) === flags) {
+              var inst = updateQueue.inst,
+                destroy = inst.destroy;
+              void 0 !== destroy &&
+                ((inst.destroy = void 0),
+                (flags & Passive) !== NoFlags
+                  ? null !== injectedProfilingHooks &&
+                    "function" ===
+                      typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted &&
+                    injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(
+                      finishedWork
+                    )
+                  : (flags & Layout) !== NoFlags &&
+                    null !== injectedProfilingHooks &&
+                    "function" ===
+                      typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted &&
+                    injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(
+                      finishedWork
+                    ),
+                (flags & Insertion) !== NoFlags &&
+                  (isRunningInsertionEffect = !0),
+                (lastEffect = finishedWork),
+                runWithFiberInDEV(
+                  lastEffect,
+                  callDestroyInDEV,
+                  lastEffect,
+                  nearestMountedAncestor,
+                  destroy
+                ),
+                (flags & Insertion) !== NoFlags &&
+                  (isRunningInsertionEffect = !1),
+                (flags & Passive) !== NoFlags
+                  ? null !== injectedProfilingHooks &&
+                    "function" ===
+                      typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped &&
+                    injectedProfilingHooks.markComponentPassiveEffectUnmountStopped()
+                  : (flags & Layout) !== NoFlags &&
+                    null !== injectedProfilingHooks &&
+                    "function" ===
+                      typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped &&
+                    injectedProfilingHooks.markComponentLayoutEffectUnmountStopped());
+            }
+            updateQueue = updateQueue.next;
+          } while (updateQueue !== firstEffect);
+        }
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function commitHookPassiveMountEffects(finishedWork, hookFlags) {
+      shouldProfile(finishedWork)
+        ? (startEffectTimer(),
+          commitHookEffectListMount(hookFlags, finishedWork),
+          recordEffectDuration())
+        : commitHookEffectListMount(hookFlags, finishedWork);
+    }
+    function commitHookPassiveUnmountEffects(
+      finishedWork,
+      nearestMountedAncestor,
+      hookFlags
+    ) {
+      shouldProfile(finishedWork)
+        ? (startEffectTimer(),
+          commitHookEffectListUnmount(
+            hookFlags,
+            finishedWork,
+            nearestMountedAncestor
+          ),
+          recordEffectDuration())
+        : commitHookEffectListUnmount(
+            hookFlags,
+            finishedWork,
+            nearestMountedAncestor
+          );
+    }
+    function commitClassCallbacks(finishedWork) {
+      var updateQueue = finishedWork.updateQueue;
+      if (null !== updateQueue) {
+        var instance = finishedWork.stateNode;
+        finishedWork.type.defaultProps ||
+          "ref" in finishedWork.memoizedProps ||
+          didWarnAboutReassigningProps ||
+          (instance.props !== finishedWork.memoizedProps &&
+            console.error(
+              "Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",
+              getComponentNameFromFiber(finishedWork) || "instance"
+            ),
+          instance.state !== finishedWork.memoizedState &&
+            console.error(
+              "Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",
+              getComponentNameFromFiber(finishedWork) || "instance"
+            ));
+        try {
+          runWithFiberInDEV(
+            finishedWork,
+            commitCallbacks,
+            updateQueue,
+            instance
+          );
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      }
+    }
+    function callGetSnapshotBeforeUpdates(instance, prevProps, prevState) {
+      return instance.getSnapshotBeforeUpdate(prevProps, prevState);
+    }
+    function commitClassSnapshot(finishedWork, current) {
+      var prevProps = current.memoizedProps,
+        prevState = current.memoizedState;
+      current = finishedWork.stateNode;
+      finishedWork.type.defaultProps ||
+        "ref" in finishedWork.memoizedProps ||
+        didWarnAboutReassigningProps ||
+        (current.props !== finishedWork.memoizedProps &&
+          console.error(
+            "Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",
+            getComponentNameFromFiber(finishedWork) || "instance"
+          ),
+        current.state !== finishedWork.memoizedState &&
+          console.error(
+            "Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",
+            getComponentNameFromFiber(finishedWork) || "instance"
+          ));
+      try {
+        var resolvedPrevProps = resolveClassComponentProps(
+          finishedWork.type,
+          prevProps,
+          finishedWork.elementType === finishedWork.type
+        );
+        var snapshot = runWithFiberInDEV(
+          finishedWork,
+          callGetSnapshotBeforeUpdates,
+          current,
+          resolvedPrevProps,
+          prevState
+        );
+        prevProps = didWarnAboutUndefinedSnapshotBeforeUpdate;
+        void 0 !== snapshot ||
+          prevProps.has(finishedWork.type) ||
+          (prevProps.add(finishedWork.type),
+          runWithFiberInDEV(finishedWork, function () {
+            console.error(
+              "%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.",
+              getComponentNameFromFiber(finishedWork)
+            );
+          }));
+        current.__reactInternalSnapshotBeforeUpdate = snapshot;
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function safelyCallComponentWillUnmount(
+      current,
+      nearestMountedAncestor,
+      instance
+    ) {
+      instance.props = resolveClassComponentProps(
+        current.type,
+        current.memoizedProps
+      );
+      instance.state = current.memoizedState;
+      shouldProfile(current)
+        ? (startEffectTimer(),
+          runWithFiberInDEV(
+            current,
+            callComponentWillUnmountInDEV,
+            current,
+            nearestMountedAncestor,
+            instance
+          ),
+          recordEffectDuration())
+        : runWithFiberInDEV(
+            current,
+            callComponentWillUnmountInDEV,
+            current,
+            nearestMountedAncestor,
+            instance
+          );
+    }
+    function commitAttachRef(finishedWork) {
+      var ref = finishedWork.ref;
+      if (null !== ref) {
+        switch (finishedWork.tag) {
+          case 26:
+          case 27:
+          case 5:
+            var instanceToUse = finishedWork.stateNode;
+            break;
+          case 30:
+            instanceToUse = finishedWork.stateNode;
+            break;
+          default:
+            instanceToUse = finishedWork.stateNode;
+        }
+        if ("function" === typeof ref)
+          if (shouldProfile(finishedWork))
+            try {
+              startEffectTimer(),
+                (finishedWork.refCleanup = ref(instanceToUse));
+            } finally {
+              recordEffectDuration();
+            }
+          else finishedWork.refCleanup = ref(instanceToUse);
+        else
+          "string" === typeof ref
+            ? console.error("String refs are no longer supported.")
+            : ref.hasOwnProperty("current") ||
+              console.error(
+                "Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().",
+                getComponentNameFromFiber(finishedWork)
+              ),
+            (ref.current = instanceToUse);
+      }
+    }
+    function safelyAttachRef(current, nearestMountedAncestor) {
+      try {
+        runWithFiberInDEV(current, commitAttachRef, current);
+      } catch (error) {
+        captureCommitPhaseError(current, nearestMountedAncestor, error);
+      }
+    }
+    function safelyDetachRef(current, nearestMountedAncestor) {
+      var ref = current.ref,
+        refCleanup = current.refCleanup;
+      if (null !== ref)
+        if ("function" === typeof refCleanup)
+          try {
+            if (shouldProfile(current))
+              try {
+                startEffectTimer(), runWithFiberInDEV(current, refCleanup);
+              } finally {
+                recordEffectDuration(current);
+              }
+            else runWithFiberInDEV(current, refCleanup);
+          } catch (error) {
+            captureCommitPhaseError(current, nearestMountedAncestor, error);
+          } finally {
+            (current.refCleanup = null),
+              (current = current.alternate),
+              null != current && (current.refCleanup = null);
+          }
+        else if ("function" === typeof ref)
+          try {
+            if (shouldProfile(current))
+              try {
+                startEffectTimer(), runWithFiberInDEV(current, ref, null);
+              } finally {
+                recordEffectDuration(current);
+              }
+            else runWithFiberInDEV(current, ref, null);
+          } catch (error$7) {
+            captureCommitPhaseError(current, nearestMountedAncestor, error$7);
+          }
+        else ref.current = null;
+    }
+    function commitProfiler(
+      finishedWork,
+      current,
+      commitStartTime,
+      effectDuration
+    ) {
+      var _finishedWork$memoize = finishedWork.memoizedProps,
+        id = _finishedWork$memoize.id,
+        onCommit = _finishedWork$memoize.onCommit;
+      _finishedWork$memoize = _finishedWork$memoize.onRender;
+      current = null === current ? "mount" : "update";
+      currentUpdateIsNested && (current = "nested-update");
+      "function" === typeof _finishedWork$memoize &&
+        _finishedWork$memoize(
+          id,
+          current,
+          finishedWork.actualDuration,
+          finishedWork.treeBaseDuration,
+          finishedWork.actualStartTime,
+          commitStartTime
+        );
+      "function" === typeof onCommit &&
+        onCommit(
+          finishedWork.memoizedProps.id,
+          current,
+          effectDuration,
+          commitStartTime
+        );
+    }
+    function commitProfilerPostCommitImpl(
+      finishedWork,
+      current,
+      commitStartTime,
+      passiveEffectDuration
+    ) {
+      var _finishedWork$memoize2 = finishedWork.memoizedProps;
+      finishedWork = _finishedWork$memoize2.id;
+      _finishedWork$memoize2 = _finishedWork$memoize2.onPostCommit;
+      current = null === current ? "mount" : "update";
+      currentUpdateIsNested && (current = "nested-update");
+      "function" === typeof _finishedWork$memoize2 &&
+        _finishedWork$memoize2(
+          finishedWork,
+          current,
+          passiveEffectDuration,
+          commitStartTime
+        );
+    }
+    function commitHostMount(finishedWork) {
+      var type = finishedWork.type,
+        props = finishedWork.memoizedProps,
+        instance = finishedWork.stateNode;
+      try {
+        runWithFiberInDEV(
+          finishedWork,
+          commitMount,
+          instance,
+          type,
+          props,
+          finishedWork
+        );
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function commitHostUpdate(finishedWork, newProps, oldProps) {
+      try {
+        runWithFiberInDEV(
+          finishedWork,
+          commitUpdate,
+          finishedWork.stateNode,
+          finishedWork.type,
+          oldProps,
+          newProps,
+          finishedWork
+        );
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function isHostParent(fiber) {
+      return (
+        5 === fiber.tag ||
+        3 === fiber.tag ||
+        26 === fiber.tag ||
+        (27 === fiber.tag && isSingletonScope(fiber.type)) ||
+        4 === fiber.tag
+      );
+    }
+    function getHostSibling(fiber) {
+      a: for (;;) {
+        for (; null === fiber.sibling; ) {
+          if (null === fiber.return || isHostParent(fiber.return)) return null;
+          fiber = fiber.return;
+        }
+        fiber.sibling.return = fiber.return;
+        for (
+          fiber = fiber.sibling;
+          5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;
+
+        ) {
+          if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;
+          if (fiber.flags & 2) continue a;
+          if (null === fiber.child || 4 === fiber.tag) continue a;
+          else (fiber.child.return = fiber), (fiber = fiber.child);
+        }
+        if (!(fiber.flags & 2)) return fiber.stateNode;
+      }
+    }
+    function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {
+      var tag = node.tag;
+      if (5 === tag || 6 === tag)
+        (node = node.stateNode),
+          before
+            ? (9 === parent.nodeType
+                ? parent.body
+                : "HTML" === parent.nodeName
+                  ? parent.ownerDocument.body
+                  : parent
+              ).insertBefore(node, before)
+            : ((before =
+                9 === parent.nodeType
+                  ? parent.body
+                  : "HTML" === parent.nodeName
+                    ? parent.ownerDocument.body
+                    : parent),
+              before.appendChild(node),
+              (parent = parent._reactRootContainer),
+              (null !== parent && void 0 !== parent) ||
+                null !== before.onclick ||
+                (before.onclick = noop$1));
+      else if (
+        4 !== tag &&
+        (27 === tag &&
+          isSingletonScope(node.type) &&
+          ((parent = node.stateNode), (before = null)),
+        (node = node.child),
+        null !== node)
+      )
+        for (
+          insertOrAppendPlacementNodeIntoContainer(node, before, parent),
+            node = node.sibling;
+          null !== node;
+
+        )
+          insertOrAppendPlacementNodeIntoContainer(node, before, parent),
+            (node = node.sibling);
+    }
+    function insertOrAppendPlacementNode(node, before, parent) {
+      var tag = node.tag;
+      if (5 === tag || 6 === tag)
+        (node = node.stateNode),
+          before ? parent.insertBefore(node, before) : parent.appendChild(node);
+      else if (
+        4 !== tag &&
+        (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),
+        (node = node.child),
+        null !== node)
+      )
+        for (
+          insertOrAppendPlacementNode(node, before, parent),
+            node = node.sibling;
+          null !== node;
+
+        )
+          insertOrAppendPlacementNode(node, before, parent),
+            (node = node.sibling);
+    }
+    function commitPlacement(finishedWork) {
+      for (
+        var hostParentFiber, parentFiber = finishedWork.return;
+        null !== parentFiber;
+
+      ) {
+        if (isHostParent(parentFiber)) {
+          hostParentFiber = parentFiber;
+          break;
+        }
+        parentFiber = parentFiber.return;
+      }
+      if (null == hostParentFiber)
+        throw Error(
+          "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue."
+        );
+      switch (hostParentFiber.tag) {
+        case 27:
+          hostParentFiber = hostParentFiber.stateNode;
+          parentFiber = getHostSibling(finishedWork);
+          insertOrAppendPlacementNode(
+            finishedWork,
+            parentFiber,
+            hostParentFiber
+          );
+          break;
+        case 5:
+          parentFiber = hostParentFiber.stateNode;
+          hostParentFiber.flags & 32 &&
+            (resetTextContent(parentFiber), (hostParentFiber.flags &= -33));
+          hostParentFiber = getHostSibling(finishedWork);
+          insertOrAppendPlacementNode(
+            finishedWork,
+            hostParentFiber,
+            parentFiber
+          );
+          break;
+        case 3:
+        case 4:
+          hostParentFiber = hostParentFiber.stateNode.containerInfo;
+          parentFiber = getHostSibling(finishedWork);
+          insertOrAppendPlacementNodeIntoContainer(
+            finishedWork,
+            parentFiber,
+            hostParentFiber
+          );
+          break;
+        default:
+          throw Error(
+            "Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue."
+          );
+      }
+    }
+    function commitHostSingletonAcquisition(finishedWork) {
+      var singleton = finishedWork.stateNode,
+        props = finishedWork.memoizedProps;
+      try {
+        runWithFiberInDEV(
+          finishedWork,
+          acquireSingletonInstance,
+          finishedWork.type,
+          props,
+          singleton,
+          finishedWork
+        );
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function commitBeforeMutationEffects(root, firstChild) {
+      root = root.containerInfo;
+      eventsEnabled = _enabled;
+      root = getActiveElementDeep(root);
+      if (hasSelectionCapabilities(root)) {
+        if ("selectionStart" in root)
+          var JSCompiler_temp = {
+            start: root.selectionStart,
+            end: root.selectionEnd
+          };
+        else
+          a: {
+            JSCompiler_temp =
+              ((JSCompiler_temp = root.ownerDocument) &&
+                JSCompiler_temp.defaultView) ||
+              window;
+            var selection =
+              JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();
+            if (selection && 0 !== selection.rangeCount) {
+              JSCompiler_temp = selection.anchorNode;
+              var anchorOffset = selection.anchorOffset,
+                focusNode = selection.focusNode;
+              selection = selection.focusOffset;
+              try {
+                JSCompiler_temp.nodeType, focusNode.nodeType;
+              } catch (e$2) {
+                JSCompiler_temp = null;
+                break a;
+              }
+              var length = 0,
+                start = -1,
+                end = -1,
+                indexWithinAnchor = 0,
+                indexWithinFocus = 0,
+                node = root,
+                parentNode = null;
+              b: for (;;) {
+                for (var next; ; ) {
+                  node !== JSCompiler_temp ||
+                    (0 !== anchorOffset && 3 !== node.nodeType) ||
+                    (start = length + anchorOffset);
+                  node !== focusNode ||
+                    (0 !== selection && 3 !== node.nodeType) ||
+                    (end = length + selection);
+                  3 === node.nodeType && (length += node.nodeValue.length);
+                  if (null === (next = node.firstChild)) break;
+                  parentNode = node;
+                  node = next;
+                }
+                for (;;) {
+                  if (node === root) break b;
+                  parentNode === JSCompiler_temp &&
+                    ++indexWithinAnchor === anchorOffset &&
+                    (start = length);
+                  parentNode === focusNode &&
+                    ++indexWithinFocus === selection &&
+                    (end = length);
+                  if (null !== (next = node.nextSibling)) break;
+                  node = parentNode;
+                  parentNode = node.parentNode;
+                }
+                node = next;
+              }
+              JSCompiler_temp =
+                -1 === start || -1 === end ? null : { start: start, end: end };
+            } else JSCompiler_temp = null;
+          }
+        JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };
+      } else JSCompiler_temp = null;
+      selectionInformation = {
+        focusedElem: root,
+        selectionRange: JSCompiler_temp
+      };
+      _enabled = !1;
+      for (nextEffect = firstChild; null !== nextEffect; )
+        if (
+          ((firstChild = nextEffect),
+          (root = firstChild.child),
+          0 !== (firstChild.subtreeFlags & 1024) && null !== root)
+        )
+          (root.return = firstChild), (nextEffect = root);
+        else
+          for (; null !== nextEffect; ) {
+            root = firstChild = nextEffect;
+            JSCompiler_temp = root.alternate;
+            anchorOffset = root.flags;
+            switch (root.tag) {
+              case 0:
+                break;
+              case 11:
+              case 15:
+                break;
+              case 1:
+                0 !== (anchorOffset & 1024) &&
+                  null !== JSCompiler_temp &&
+                  commitClassSnapshot(root, JSCompiler_temp);
+                break;
+              case 3:
+                if (0 !== (anchorOffset & 1024))
+                  if (
+                    ((root = root.stateNode.containerInfo),
+                    (JSCompiler_temp = root.nodeType),
+                    9 === JSCompiler_temp)
+                  )
+                    clearContainerSparingly(root);
+                  else if (1 === JSCompiler_temp)
+                    switch (root.nodeName) {
+                      case "HEAD":
+                      case "HTML":
+                      case "BODY":
+                        clearContainerSparingly(root);
+                        break;
+                      default:
+                        root.textContent = "";
+                    }
+                break;
+              case 5:
+              case 26:
+              case 27:
+              case 6:
+              case 4:
+              case 17:
+                break;
+              default:
+                if (0 !== (anchorOffset & 1024))
+                  throw Error(
+                    "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue."
+                  );
+            }
+            root = firstChild.sibling;
+            if (null !== root) {
+              root.return = firstChild.return;
+              nextEffect = root;
+              break;
+            }
+            nextEffect = firstChild.return;
+          }
+    }
+    function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {
+      var flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          flags & 4 &&
+            commitHookLayoutEffects(finishedWork, Layout | HasEffect);
+          break;
+        case 1:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          if (flags & 4)
+            if (((finishedRoot = finishedWork.stateNode), null === current))
+              finishedWork.type.defaultProps ||
+                "ref" in finishedWork.memoizedProps ||
+                didWarnAboutReassigningProps ||
+                (finishedRoot.props !== finishedWork.memoizedProps &&
+                  console.error(
+                    "Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",
+                    getComponentNameFromFiber(finishedWork) || "instance"
+                  ),
+                finishedRoot.state !== finishedWork.memoizedState &&
+                  console.error(
+                    "Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",
+                    getComponentNameFromFiber(finishedWork) || "instance"
+                  )),
+                shouldProfile(finishedWork)
+                  ? (startEffectTimer(),
+                    runWithFiberInDEV(
+                      finishedWork,
+                      callComponentDidMountInDEV,
+                      finishedWork,
+                      finishedRoot
+                    ),
+                    recordEffectDuration())
+                  : runWithFiberInDEV(
+                      finishedWork,
+                      callComponentDidMountInDEV,
+                      finishedWork,
+                      finishedRoot
+                    );
+            else {
+              var prevProps = resolveClassComponentProps(
+                finishedWork.type,
+                current.memoizedProps
+              );
+              current = current.memoizedState;
+              finishedWork.type.defaultProps ||
+                "ref" in finishedWork.memoizedProps ||
+                didWarnAboutReassigningProps ||
+                (finishedRoot.props !== finishedWork.memoizedProps &&
+                  console.error(
+                    "Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",
+                    getComponentNameFromFiber(finishedWork) || "instance"
+                  ),
+                finishedRoot.state !== finishedWork.memoizedState &&
+                  console.error(
+                    "Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",
+                    getComponentNameFromFiber(finishedWork) || "instance"
+                  ));
+              shouldProfile(finishedWork)
+                ? (startEffectTimer(),
+                  runWithFiberInDEV(
+                    finishedWork,
+                    callComponentDidUpdateInDEV,
+                    finishedWork,
+                    finishedRoot,
+                    prevProps,
+                    current,
+                    finishedRoot.__reactInternalSnapshotBeforeUpdate
+                  ),
+                  recordEffectDuration())
+                : runWithFiberInDEV(
+                    finishedWork,
+                    callComponentDidUpdateInDEV,
+                    finishedWork,
+                    finishedRoot,
+                    prevProps,
+                    current,
+                    finishedRoot.__reactInternalSnapshotBeforeUpdate
+                  );
+            }
+          flags & 64 && commitClassCallbacks(finishedWork);
+          flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 3:
+          current = pushNestedEffectDurations();
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          if (
+            flags & 64 &&
+            ((flags = finishedWork.updateQueue), null !== flags)
+          ) {
+            prevProps = null;
+            if (null !== finishedWork.child)
+              switch (finishedWork.child.tag) {
+                case 27:
+                case 5:
+                  prevProps = finishedWork.child.stateNode;
+                  break;
+                case 1:
+                  prevProps = finishedWork.child.stateNode;
+              }
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitCallbacks,
+                flags,
+                prevProps
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          }
+          finishedRoot.effectDuration += popNestedEffectDurations(current);
+          break;
+        case 27:
+          null === current &&
+            flags & 4 &&
+            commitHostSingletonAcquisition(finishedWork);
+        case 26:
+        case 5:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          null === current && flags & 4 && commitHostMount(finishedWork);
+          flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 12:
+          if (flags & 4) {
+            flags = pushNestedEffectDurations();
+            recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+            finishedRoot = finishedWork.stateNode;
+            finishedRoot.effectDuration += bubbleNestedEffectDurations(flags);
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitProfiler,
+                finishedWork,
+                current,
+                commitStartTime,
+                finishedRoot.effectDuration
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          } else recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          break;
+        case 13:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          flags & 4 &&
+            commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
+          flags & 64 &&
+            ((finishedRoot = finishedWork.memoizedState),
+            null !== finishedRoot &&
+              ((finishedRoot = finishedRoot.dehydrated),
+              null !== finishedRoot &&
+                ((finishedWork = retryDehydratedSuspenseBoundary.bind(
+                  null,
+                  finishedWork
+                )),
+                registerSuspenseInstanceRetry(finishedRoot, finishedWork))));
+          break;
+        case 22:
+          flags =
+            null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;
+          if (!flags) {
+            current =
+              (null !== current && null !== current.memoizedState) ||
+              offscreenSubtreeWasHidden;
+            prevProps = offscreenSubtreeIsHidden;
+            var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
+            offscreenSubtreeIsHidden = flags;
+            (offscreenSubtreeWasHidden = current) &&
+            !prevOffscreenSubtreeWasHidden
+              ? recursivelyTraverseReappearLayoutEffects(
+                  finishedRoot,
+                  finishedWork,
+                  0 !== (finishedWork.subtreeFlags & 8772)
+                )
+              : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+            offscreenSubtreeIsHidden = prevProps;
+            offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
+          }
+          break;
+        case 30:
+          break;
+        default:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      }
+    }
+    function detachFiberAfterEffects(fiber) {
+      var alternate = fiber.alternate;
+      null !== alternate &&
+        ((fiber.alternate = null), detachFiberAfterEffects(alternate));
+      fiber.child = null;
+      fiber.deletions = null;
+      fiber.sibling = null;
+      5 === fiber.tag &&
+        ((alternate = fiber.stateNode),
+        null !== alternate && detachDeletedInstance(alternate));
+      fiber.stateNode = null;
+      fiber._debugOwner = null;
+      fiber.return = null;
+      fiber.dependencies = null;
+      fiber.memoizedProps = null;
+      fiber.memoizedState = null;
+      fiber.pendingProps = null;
+      fiber.stateNode = null;
+      fiber.updateQueue = null;
+    }
+    function recursivelyTraverseDeletionEffects(
+      finishedRoot,
+      nearestMountedAncestor,
+      parent
+    ) {
+      for (parent = parent.child; null !== parent; )
+        commitDeletionEffectsOnFiber(
+          finishedRoot,
+          nearestMountedAncestor,
+          parent
+        ),
+          (parent = parent.sibling);
+    }
+    function commitDeletionEffectsOnFiber(
+      finishedRoot,
+      nearestMountedAncestor,
+      deletedFiber
+    ) {
+      if (
+        injectedHook &&
+        "function" === typeof injectedHook.onCommitFiberUnmount
+      )
+        try {
+          injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);
+        } catch (err) {
+          hasLoggedError ||
+            ((hasLoggedError = !0),
+            console.error(
+              "React instrumentation encountered an error: %s",
+              err
+            ));
+        }
+      switch (deletedFiber.tag) {
+        case 26:
+          offscreenSubtreeWasHidden ||
+            safelyDetachRef(deletedFiber, nearestMountedAncestor);
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          deletedFiber.memoizedState
+            ? deletedFiber.memoizedState.count--
+            : deletedFiber.stateNode &&
+              ((deletedFiber = deletedFiber.stateNode),
+              deletedFiber.parentNode.removeChild(deletedFiber));
+          break;
+        case 27:
+          offscreenSubtreeWasHidden ||
+            safelyDetachRef(deletedFiber, nearestMountedAncestor);
+          var prevHostParent = hostParent,
+            prevHostParentIsContainer = hostParentIsContainer;
+          isSingletonScope(deletedFiber.type) &&
+            ((hostParent = deletedFiber.stateNode),
+            (hostParentIsContainer = !1));
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          runWithFiberInDEV(
+            deletedFiber,
+            releaseSingletonInstance,
+            deletedFiber.stateNode
+          );
+          hostParent = prevHostParent;
+          hostParentIsContainer = prevHostParentIsContainer;
+          break;
+        case 5:
+          offscreenSubtreeWasHidden ||
+            safelyDetachRef(deletedFiber, nearestMountedAncestor);
+        case 6:
+          prevHostParent = hostParent;
+          prevHostParentIsContainer = hostParentIsContainer;
+          hostParent = null;
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          hostParent = prevHostParent;
+          hostParentIsContainer = prevHostParentIsContainer;
+          if (null !== hostParent)
+            if (hostParentIsContainer)
+              try {
+                runWithFiberInDEV(
+                  deletedFiber,
+                  removeChildFromContainer,
+                  hostParent,
+                  deletedFiber.stateNode
+                );
+              } catch (error) {
+                captureCommitPhaseError(
+                  deletedFiber,
+                  nearestMountedAncestor,
+                  error
+                );
+              }
+            else
+              try {
+                runWithFiberInDEV(
+                  deletedFiber,
+                  removeChild,
+                  hostParent,
+                  deletedFiber.stateNode
+                );
+              } catch (error) {
+                captureCommitPhaseError(
+                  deletedFiber,
+                  nearestMountedAncestor,
+                  error
+                );
+              }
+          break;
+        case 18:
+          null !== hostParent &&
+            (hostParentIsContainer
+              ? ((finishedRoot = hostParent),
+                clearSuspenseBoundary(
+                  9 === finishedRoot.nodeType
+                    ? finishedRoot.body
+                    : "HTML" === finishedRoot.nodeName
+                      ? finishedRoot.ownerDocument.body
+                      : finishedRoot,
+                  deletedFiber.stateNode
+                ),
+                retryIfBlockedOn(finishedRoot))
+              : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));
+          break;
+        case 4:
+          prevHostParent = hostParent;
+          prevHostParentIsContainer = hostParentIsContainer;
+          hostParent = deletedFiber.stateNode.containerInfo;
+          hostParentIsContainer = !0;
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          hostParent = prevHostParent;
+          hostParentIsContainer = prevHostParentIsContainer;
+          break;
+        case 0:
+        case 11:
+        case 14:
+        case 15:
+          offscreenSubtreeWasHidden ||
+            commitHookEffectListUnmount(
+              Insertion,
+              deletedFiber,
+              nearestMountedAncestor
+            );
+          offscreenSubtreeWasHidden ||
+            commitHookLayoutUnmountEffects(
+              deletedFiber,
+              nearestMountedAncestor,
+              Layout
+            );
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          break;
+        case 1:
+          offscreenSubtreeWasHidden ||
+            (safelyDetachRef(deletedFiber, nearestMountedAncestor),
+            (prevHostParent = deletedFiber.stateNode),
+            "function" === typeof prevHostParent.componentWillUnmount &&
+              safelyCallComponentWillUnmount(
+                deletedFiber,
+                nearestMountedAncestor,
+                prevHostParent
+              ));
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          break;
+        case 21:
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          break;
+        case 22:
+          offscreenSubtreeWasHidden =
+            (prevHostParent = offscreenSubtreeWasHidden) ||
+            null !== deletedFiber.memoizedState;
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          offscreenSubtreeWasHidden = prevHostParent;
+          break;
+        default:
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+      }
+    }
+    function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {
+      if (
+        null === finishedWork.memoizedState &&
+        ((finishedRoot = finishedWork.alternate),
+        null !== finishedRoot &&
+          ((finishedRoot = finishedRoot.memoizedState),
+          null !== finishedRoot &&
+            ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))
+      )
+        try {
+          runWithFiberInDEV(
+            finishedWork,
+            commitHydratedSuspenseInstance,
+            finishedRoot
+          );
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+    }
+    function getRetryCache(finishedWork) {
+      switch (finishedWork.tag) {
+        case 13:
+        case 19:
+          var retryCache = finishedWork.stateNode;
+          null === retryCache &&
+            (retryCache = finishedWork.stateNode = new PossiblyWeakSet());
+          return retryCache;
+        case 22:
+          return (
+            (finishedWork = finishedWork.stateNode),
+            (retryCache = finishedWork._retryCache),
+            null === retryCache &&
+              (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),
+            retryCache
+          );
+        default:
+          throw Error(
+            "Unexpected Suspense handler tag (" +
+              finishedWork.tag +
+              "). This is a bug in React."
+          );
+      }
+    }
+    function attachSuspenseRetryListeners(finishedWork, wakeables) {
+      var retryCache = getRetryCache(finishedWork);
+      wakeables.forEach(function (wakeable) {
+        var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);
+        if (!retryCache.has(wakeable)) {
+          retryCache.add(wakeable);
+          if (isDevToolsPresent)
+            if (null !== inProgressLanes && null !== inProgressRoot)
+              restorePendingUpdaters(inProgressRoot, inProgressLanes);
+            else
+              throw Error(
+                "Expected finished root and lanes to be set. This is a bug in React."
+              );
+          wakeable.then(retry, retry);
+        }
+      });
+    }
+    function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {
+      var deletions = parentFiber.deletions;
+      if (null !== deletions)
+        for (var i = 0; i < deletions.length; i++) {
+          var root = root$jscomp$0,
+            returnFiber = parentFiber,
+            deletedFiber = deletions[i],
+            parent = returnFiber;
+          a: for (; null !== parent; ) {
+            switch (parent.tag) {
+              case 27:
+                if (isSingletonScope(parent.type)) {
+                  hostParent = parent.stateNode;
+                  hostParentIsContainer = !1;
+                  break a;
+                }
+                break;
+              case 5:
+                hostParent = parent.stateNode;
+                hostParentIsContainer = !1;
+                break a;
+              case 3:
+              case 4:
+                hostParent = parent.stateNode.containerInfo;
+                hostParentIsContainer = !0;
+                break a;
+            }
+            parent = parent.return;
+          }
+          if (null === hostParent)
+            throw Error(
+              "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue."
+            );
+          commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);
+          hostParent = null;
+          hostParentIsContainer = !1;
+          root = deletedFiber;
+          returnFiber = root.alternate;
+          null !== returnFiber && (returnFiber.return = null);
+          root.return = null;
+        }
+      if (parentFiber.subtreeFlags & 13878)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),
+            (parentFiber = parentFiber.sibling);
+    }
+    function commitMutationEffectsOnFiber(finishedWork, root) {
+      var current = finishedWork.alternate,
+        flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 14:
+        case 15:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 4 &&
+            (commitHookEffectListUnmount(
+              Insertion | HasEffect,
+              finishedWork,
+              finishedWork.return
+            ),
+            commitHookEffectListMount(Insertion | HasEffect, finishedWork),
+            commitHookLayoutUnmountEffects(
+              finishedWork,
+              finishedWork.return,
+              Layout | HasEffect
+            ));
+          break;
+        case 1:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 512 &&
+            (offscreenSubtreeWasHidden ||
+              null === current ||
+              safelyDetachRef(current, current.return));
+          flags & 64 &&
+            offscreenSubtreeIsHidden &&
+            ((finishedWork = finishedWork.updateQueue),
+            null !== finishedWork &&
+              ((flags = finishedWork.callbacks),
+              null !== flags &&
+                ((current = finishedWork.shared.hiddenCallbacks),
+                (finishedWork.shared.hiddenCallbacks =
+                  null === current ? flags : current.concat(flags)))));
+          break;
+        case 26:
+          var hoistableRoot = currentHoistableRoot;
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 512 &&
+            (offscreenSubtreeWasHidden ||
+              null === current ||
+              safelyDetachRef(current, current.return));
+          if (flags & 4)
+            if (
+              ((root = null !== current ? current.memoizedState : null),
+              (flags = finishedWork.memoizedState),
+              null === current)
+            )
+              if (null === flags)
+                if (null === finishedWork.stateNode) {
+                  a: {
+                    flags = finishedWork.type;
+                    current = finishedWork.memoizedProps;
+                    root = hoistableRoot.ownerDocument || hoistableRoot;
+                    b: switch (flags) {
+                      case "title":
+                        hoistableRoot = root.getElementsByTagName("title")[0];
+                        if (
+                          !hoistableRoot ||
+                          hoistableRoot[internalHoistableMarker] ||
+                          hoistableRoot[internalInstanceKey] ||
+                          hoistableRoot.namespaceURI === SVG_NAMESPACE ||
+                          hoistableRoot.hasAttribute("itemprop")
+                        )
+                          (hoistableRoot = root.createElement(flags)),
+                            root.head.insertBefore(
+                              hoistableRoot,
+                              root.querySelector("head > title")
+                            );
+                        setInitialProperties(hoistableRoot, flags, current);
+                        hoistableRoot[internalInstanceKey] = finishedWork;
+                        markNodeAsHoistable(hoistableRoot);
+                        flags = hoistableRoot;
+                        break a;
+                      case "link":
+                        var maybeNodes = getHydratableHoistableCache(
+                          "link",
+                          "href",
+                          root
+                        ).get(flags + (current.href || ""));
+                        if (maybeNodes)
+                          for (var i = 0; i < maybeNodes.length; i++)
+                            if (
+                              ((hoistableRoot = maybeNodes[i]),
+                              hoistableRoot.getAttribute("href") ===
+                                (null == current.href || "" === current.href
+                                  ? null
+                                  : current.href) &&
+                                hoistableRoot.getAttribute("rel") ===
+                                  (null == current.rel ? null : current.rel) &&
+                                hoistableRoot.getAttribute("title") ===
+                                  (null == current.title
+                                    ? null
+                                    : current.title) &&
+                                hoistableRoot.getAttribute("crossorigin") ===
+                                  (null == current.crossOrigin
+                                    ? null
+                                    : current.crossOrigin))
+                            ) {
+                              maybeNodes.splice(i, 1);
+                              break b;
+                            }
+                        hoistableRoot = root.createElement(flags);
+                        setInitialProperties(hoistableRoot, flags, current);
+                        root.head.appendChild(hoistableRoot);
+                        break;
+                      case "meta":
+                        if (
+                          (maybeNodes = getHydratableHoistableCache(
+                            "meta",
+                            "content",
+                            root
+                          ).get(flags + (current.content || "")))
+                        )
+                          for (i = 0; i < maybeNodes.length; i++)
+                            if (
+                              ((hoistableRoot = maybeNodes[i]),
+                              checkAttributeStringCoercion(
+                                current.content,
+                                "content"
+                              ),
+                              hoistableRoot.getAttribute("content") ===
+                                (null == current.content
+                                  ? null
+                                  : "" + current.content) &&
+                                hoistableRoot.getAttribute("name") ===
+                                  (null == current.name
+                                    ? null
+                                    : current.name) &&
+                                hoistableRoot.getAttribute("property") ===
+                                  (null == current.property
+                                    ? null
+                                    : current.property) &&
+                                hoistableRoot.getAttribute("http-equiv") ===
+                                  (null == current.httpEquiv
+                                    ? null
+                                    : current.httpEquiv) &&
+                                hoistableRoot.getAttribute("charset") ===
+                                  (null == current.charSet
+                                    ? null
+                                    : current.charSet))
+                            ) {
+                              maybeNodes.splice(i, 1);
+                              break b;
+                            }
+                        hoistableRoot = root.createElement(flags);
+                        setInitialProperties(hoistableRoot, flags, current);
+                        root.head.appendChild(hoistableRoot);
+                        break;
+                      default:
+                        throw Error(
+                          'getNodesForType encountered a type it did not expect: "' +
+                            flags +
+                            '". This is a bug in React.'
+                        );
+                    }
+                    hoistableRoot[internalInstanceKey] = finishedWork;
+                    markNodeAsHoistable(hoistableRoot);
+                    flags = hoistableRoot;
+                  }
+                  finishedWork.stateNode = flags;
+                } else
+                  mountHoistable(
+                    hoistableRoot,
+                    finishedWork.type,
+                    finishedWork.stateNode
+                  );
+              else
+                finishedWork.stateNode = acquireResource(
+                  hoistableRoot,
+                  flags,
+                  finishedWork.memoizedProps
+                );
+            else
+              root !== flags
+                ? (null === root
+                    ? null !== current.stateNode &&
+                      ((current = current.stateNode),
+                      current.parentNode.removeChild(current))
+                    : root.count--,
+                  null === flags
+                    ? mountHoistable(
+                        hoistableRoot,
+                        finishedWork.type,
+                        finishedWork.stateNode
+                      )
+                    : acquireResource(
+                        hoistableRoot,
+                        flags,
+                        finishedWork.memoizedProps
+                      ))
+                : null === flags &&
+                  null !== finishedWork.stateNode &&
+                  commitHostUpdate(
+                    finishedWork,
+                    finishedWork.memoizedProps,
+                    current.memoizedProps
+                  );
+          break;
+        case 27:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 512 &&
+            (offscreenSubtreeWasHidden ||
+              null === current ||
+              safelyDetachRef(current, current.return));
+          null !== current &&
+            flags & 4 &&
+            commitHostUpdate(
+              finishedWork,
+              finishedWork.memoizedProps,
+              current.memoizedProps
+            );
+          break;
+        case 5:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 512 &&
+            (offscreenSubtreeWasHidden ||
+              null === current ||
+              safelyDetachRef(current, current.return));
+          if (finishedWork.flags & 32) {
+            root = finishedWork.stateNode;
+            try {
+              runWithFiberInDEV(finishedWork, resetTextContent, root);
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          }
+          flags & 4 &&
+            null != finishedWork.stateNode &&
+            ((root = finishedWork.memoizedProps),
+            commitHostUpdate(
+              finishedWork,
+              root,
+              null !== current ? current.memoizedProps : root
+            ));
+          flags & 1024 &&
+            ((needsFormReset = !0),
+            "form" !== finishedWork.type &&
+              console.error(
+                "Unexpected host component type. Expected a form. This is a bug in React."
+              ));
+          break;
+        case 6:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          if (flags & 4) {
+            if (null === finishedWork.stateNode)
+              throw Error(
+                "This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue."
+              );
+            flags = finishedWork.memoizedProps;
+            current = null !== current ? current.memoizedProps : flags;
+            root = finishedWork.stateNode;
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitTextUpdate,
+                root,
+                current,
+                flags
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          }
+          break;
+        case 3:
+          hoistableRoot = pushNestedEffectDurations();
+          tagCaches = null;
+          maybeNodes = currentHoistableRoot;
+          currentHoistableRoot = getHoistableRoot(root.containerInfo);
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          currentHoistableRoot = maybeNodes;
+          commitReconciliationEffects(finishedWork);
+          if (
+            flags & 4 &&
+            null !== current &&
+            current.memoizedState.isDehydrated
+          )
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitHydratedContainer,
+                root.containerInfo
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          needsFormReset &&
+            ((needsFormReset = !1), recursivelyResetForms(finishedWork));
+          root.effectDuration += popNestedEffectDurations(hoistableRoot);
+          break;
+        case 4:
+          flags = currentHoistableRoot;
+          currentHoistableRoot = getHoistableRoot(
+            finishedWork.stateNode.containerInfo
+          );
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          currentHoistableRoot = flags;
+          break;
+        case 12:
+          flags = pushNestedEffectDurations();
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          finishedWork.stateNode.effectDuration +=
+            bubbleNestedEffectDurations(flags);
+          break;
+        case 13:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          finishedWork.child.flags & 8192 &&
+            (null !== finishedWork.memoizedState) !==
+              (null !== current && null !== current.memoizedState) &&
+            (globalMostRecentFallbackTime = now$1());
+          flags & 4 &&
+            ((flags = finishedWork.updateQueue),
+            null !== flags &&
+              ((finishedWork.updateQueue = null),
+              attachSuspenseRetryListeners(finishedWork, flags)));
+          break;
+        case 22:
+          hoistableRoot = null !== finishedWork.memoizedState;
+          var wasHidden = null !== current && null !== current.memoizedState,
+            prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,
+            prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
+          offscreenSubtreeIsHidden =
+            prevOffscreenSubtreeIsHidden || hoistableRoot;
+          offscreenSubtreeWasHidden =
+            prevOffscreenSubtreeWasHidden || wasHidden;
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
+          offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;
+          commitReconciliationEffects(finishedWork);
+          if (flags & 8192)
+            a: for (
+              root = finishedWork.stateNode,
+                root._visibility = hoistableRoot
+                  ? root._visibility & ~OffscreenVisible
+                  : root._visibility | OffscreenVisible,
+                hoistableRoot &&
+                  (null === current ||
+                    wasHidden ||
+                    offscreenSubtreeIsHidden ||
+                    offscreenSubtreeWasHidden ||
+                    recursivelyTraverseDisappearLayoutEffects(finishedWork)),
+                current = null,
+                root = finishedWork;
+              ;
+
+            ) {
+              if (5 === root.tag || 26 === root.tag) {
+                if (null === current) {
+                  wasHidden = current = root;
+                  try {
+                    (maybeNodes = wasHidden.stateNode),
+                      hoistableRoot
+                        ? runWithFiberInDEV(wasHidden, hideInstance, maybeNodes)
+                        : runWithFiberInDEV(
+                            wasHidden,
+                            unhideInstance,
+                            wasHidden.stateNode,
+                            wasHidden.memoizedProps
+                          );
+                  } catch (error) {
+                    captureCommitPhaseError(wasHidden, wasHidden.return, error);
+                  }
+                }
+              } else if (6 === root.tag) {
+                if (null === current) {
+                  wasHidden = root;
+                  try {
+                    (i = wasHidden.stateNode),
+                      hoistableRoot
+                        ? runWithFiberInDEV(wasHidden, hideTextInstance, i)
+                        : runWithFiberInDEV(
+                            wasHidden,
+                            unhideTextInstance,
+                            i,
+                            wasHidden.memoizedProps
+                          );
+                  } catch (error) {
+                    captureCommitPhaseError(wasHidden, wasHidden.return, error);
+                  }
+                }
+              } else if (
+                ((22 !== root.tag && 23 !== root.tag) ||
+                  null === root.memoizedState ||
+                  root === finishedWork) &&
+                null !== root.child
+              ) {
+                root.child.return = root;
+                root = root.child;
+                continue;
+              }
+              if (root === finishedWork) break a;
+              for (; null === root.sibling; ) {
+                if (null === root.return || root.return === finishedWork)
+                  break a;
+                current === root && (current = null);
+                root = root.return;
+              }
+              current === root && (current = null);
+              root.sibling.return = root.return;
+              root = root.sibling;
+            }
+          flags & 4 &&
+            ((flags = finishedWork.updateQueue),
+            null !== flags &&
+              ((current = flags.retryQueue),
+              null !== current &&
+                ((flags.retryQueue = null),
+                attachSuspenseRetryListeners(finishedWork, current))));
+          break;
+        case 19:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 4 &&
+            ((flags = finishedWork.updateQueue),
+            null !== flags &&
+              ((finishedWork.updateQueue = null),
+              attachSuspenseRetryListeners(finishedWork, flags)));
+          break;
+        case 30:
+          break;
+        case 21:
+          break;
+        default:
+          recursivelyTraverseMutationEffects(root, finishedWork),
+            commitReconciliationEffects(finishedWork);
+      }
+    }
+    function commitReconciliationEffects(finishedWork) {
+      var flags = finishedWork.flags;
+      if (flags & 2) {
+        try {
+          runWithFiberInDEV(finishedWork, commitPlacement, finishedWork);
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+        finishedWork.flags &= -3;
+      }
+      flags & 4096 && (finishedWork.flags &= -4097);
+    }
+    function recursivelyResetForms(parentFiber) {
+      if (parentFiber.subtreeFlags & 1024)
+        for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+          var fiber = parentFiber;
+          recursivelyResetForms(fiber);
+          5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();
+          parentFiber = parentFiber.sibling;
+        }
+    }
+    function recursivelyTraverseLayoutEffects(root, parentFiber) {
+      if (parentFiber.subtreeFlags & 8772)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),
+            (parentFiber = parentFiber.sibling);
+    }
+    function disappearLayoutEffects(finishedWork) {
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 14:
+        case 15:
+          commitHookLayoutUnmountEffects(
+            finishedWork,
+            finishedWork.return,
+            Layout
+          );
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        case 1:
+          safelyDetachRef(finishedWork, finishedWork.return);
+          var instance = finishedWork.stateNode;
+          "function" === typeof instance.componentWillUnmount &&
+            safelyCallComponentWillUnmount(
+              finishedWork,
+              finishedWork.return,
+              instance
+            );
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        case 27:
+          runWithFiberInDEV(
+            finishedWork,
+            releaseSingletonInstance,
+            finishedWork.stateNode
+          );
+        case 26:
+        case 5:
+          safelyDetachRef(finishedWork, finishedWork.return);
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        case 22:
+          null === finishedWork.memoizedState &&
+            recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        case 30:
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        default:
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+      }
+    }
+    function recursivelyTraverseDisappearLayoutEffects(parentFiber) {
+      for (parentFiber = parentFiber.child; null !== parentFiber; )
+        disappearLayoutEffects(parentFiber),
+          (parentFiber = parentFiber.sibling);
+    }
+    function reappearLayoutEffects(
+      finishedRoot,
+      current,
+      finishedWork,
+      includeWorkInProgressEffects
+    ) {
+      var flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+          commitHookLayoutEffects(finishedWork, Layout);
+          break;
+        case 1:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+          current = finishedWork.stateNode;
+          "function" === typeof current.componentDidMount &&
+            runWithFiberInDEV(
+              finishedWork,
+              callComponentDidMountInDEV,
+              finishedWork,
+              current
+            );
+          current = finishedWork.updateQueue;
+          if (null !== current) {
+            finishedRoot = finishedWork.stateNode;
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitHiddenCallbacks,
+                current,
+                finishedRoot
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          }
+          includeWorkInProgressEffects &&
+            flags & 64 &&
+            commitClassCallbacks(finishedWork);
+          safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 27:
+          commitHostSingletonAcquisition(finishedWork);
+        case 26:
+        case 5:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+          includeWorkInProgressEffects &&
+            null === current &&
+            flags & 4 &&
+            commitHostMount(finishedWork);
+          safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 12:
+          if (includeWorkInProgressEffects && flags & 4) {
+            flags = pushNestedEffectDurations();
+            recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              includeWorkInProgressEffects
+            );
+            includeWorkInProgressEffects = finishedWork.stateNode;
+            includeWorkInProgressEffects.effectDuration +=
+              bubbleNestedEffectDurations(flags);
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitProfiler,
+                finishedWork,
+                current,
+                commitStartTime,
+                includeWorkInProgressEffects.effectDuration
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          } else
+            recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              includeWorkInProgressEffects
+            );
+          break;
+        case 13:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+          includeWorkInProgressEffects &&
+            flags & 4 &&
+            commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
+          break;
+        case 22:
+          null === finishedWork.memoizedState &&
+            recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              includeWorkInProgressEffects
+            );
+          safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 30:
+          break;
+        default:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+      }
+    }
+    function recursivelyTraverseReappearLayoutEffects(
+      finishedRoot,
+      parentFiber,
+      includeWorkInProgressEffects
+    ) {
+      includeWorkInProgressEffects =
+        includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);
+      for (parentFiber = parentFiber.child; null !== parentFiber; )
+        reappearLayoutEffects(
+          finishedRoot,
+          parentFiber.alternate,
+          parentFiber,
+          includeWorkInProgressEffects
+        ),
+          (parentFiber = parentFiber.sibling);
+    }
+    function commitOffscreenPassiveMountEffects(current, finishedWork) {
+      var previousCache = null;
+      null !== current &&
+        null !== current.memoizedState &&
+        null !== current.memoizedState.cachePool &&
+        (previousCache = current.memoizedState.cachePool.pool);
+      current = null;
+      null !== finishedWork.memoizedState &&
+        null !== finishedWork.memoizedState.cachePool &&
+        (current = finishedWork.memoizedState.cachePool.pool);
+      current !== previousCache &&
+        (null != current && retainCache(current),
+        null != previousCache && releaseCache(previousCache));
+    }
+    function commitCachePassiveMountEffect(current, finishedWork) {
+      current = null;
+      null !== finishedWork.alternate &&
+        (current = finishedWork.alternate.memoizedState.cache);
+      finishedWork = finishedWork.memoizedState.cache;
+      finishedWork !== current &&
+        (retainCache(finishedWork), null != current && releaseCache(current));
+    }
+    function recursivelyTraversePassiveMountEffects(
+      root,
+      parentFiber,
+      committedLanes,
+      committedTransitions
+    ) {
+      if (parentFiber.subtreeFlags & 10256)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          commitPassiveMountOnFiber(
+            root,
+            parentFiber,
+            committedLanes,
+            committedTransitions
+          ),
+            (parentFiber = parentFiber.sibling);
+    }
+    function commitPassiveMountOnFiber(
+      finishedRoot,
+      finishedWork,
+      committedLanes,
+      committedTransitions
+    ) {
+      var flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          flags & 2048 &&
+            commitHookPassiveMountEffects(finishedWork, Passive | HasEffect);
+          break;
+        case 1:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          break;
+        case 3:
+          var prevEffectDuration = pushNestedEffectDurations();
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          flags & 2048 &&
+            ((committedLanes = null),
+            null !== finishedWork.alternate &&
+              (committedLanes = finishedWork.alternate.memoizedState.cache),
+            (finishedWork = finishedWork.memoizedState.cache),
+            finishedWork !== committedLanes &&
+              (retainCache(finishedWork),
+              null != committedLanes && releaseCache(committedLanes)));
+          finishedRoot.passiveEffectDuration +=
+            popNestedEffectDurations(prevEffectDuration);
+          break;
+        case 12:
+          if (flags & 2048) {
+            flags = pushNestedEffectDurations();
+            recursivelyTraversePassiveMountEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions
+            );
+            finishedRoot = finishedWork.stateNode;
+            finishedRoot.passiveEffectDuration +=
+              bubbleNestedEffectDurations(flags);
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitProfilerPostCommitImpl,
+                finishedWork,
+                finishedWork.alternate,
+                commitStartTime,
+                finishedRoot.passiveEffectDuration
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          } else
+            recursivelyTraversePassiveMountEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions
+            );
+          break;
+        case 13:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          break;
+        case 23:
+          break;
+        case 22:
+          prevEffectDuration = finishedWork.stateNode;
+          var _current = finishedWork.alternate;
+          null !== finishedWork.memoizedState
+            ? prevEffectDuration._visibility & OffscreenPassiveEffectsConnected
+              ? recursivelyTraversePassiveMountEffects(
+                  finishedRoot,
+                  finishedWork,
+                  committedLanes,
+                  committedTransitions
+                )
+              : recursivelyTraverseAtomicPassiveEffects(
+                  finishedRoot,
+                  finishedWork
+                )
+            : prevEffectDuration._visibility & OffscreenPassiveEffectsConnected
+              ? recursivelyTraversePassiveMountEffects(
+                  finishedRoot,
+                  finishedWork,
+                  committedLanes,
+                  committedTransitions
+                )
+              : ((prevEffectDuration._visibility |=
+                  OffscreenPassiveEffectsConnected),
+                recursivelyTraverseReconnectPassiveEffects(
+                  finishedRoot,
+                  finishedWork,
+                  committedLanes,
+                  committedTransitions,
+                  0 !== (finishedWork.subtreeFlags & 10256)
+                ));
+          flags & 2048 &&
+            commitOffscreenPassiveMountEffects(_current, finishedWork);
+          break;
+        case 24:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          flags & 2048 &&
+            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+          break;
+        default:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+      }
+    }
+    function recursivelyTraverseReconnectPassiveEffects(
+      finishedRoot,
+      parentFiber,
+      committedLanes,
+      committedTransitions,
+      includeWorkInProgressEffects
+    ) {
+      includeWorkInProgressEffects =
+        includeWorkInProgressEffects &&
+        0 !== (parentFiber.subtreeFlags & 10256);
+      for (parentFiber = parentFiber.child; null !== parentFiber; )
+        reconnectPassiveEffects(
+          finishedRoot,
+          parentFiber,
+          committedLanes,
+          committedTransitions,
+          includeWorkInProgressEffects
+        ),
+          (parentFiber = parentFiber.sibling);
+    }
+    function reconnectPassiveEffects(
+      finishedRoot,
+      finishedWork,
+      committedLanes,
+      committedTransitions,
+      includeWorkInProgressEffects
+    ) {
+      var flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraverseReconnectPassiveEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions,
+            includeWorkInProgressEffects
+          );
+          commitHookPassiveMountEffects(finishedWork, Passive);
+          break;
+        case 23:
+          break;
+        case 22:
+          var _instance2 = finishedWork.stateNode;
+          null !== finishedWork.memoizedState
+            ? _instance2._visibility & OffscreenPassiveEffectsConnected
+              ? recursivelyTraverseReconnectPassiveEffects(
+                  finishedRoot,
+                  finishedWork,
+                  committedLanes,
+                  committedTransitions,
+                  includeWorkInProgressEffects
+                )
+              : recursivelyTraverseAtomicPassiveEffects(
+                  finishedRoot,
+                  finishedWork
+                )
+            : ((_instance2._visibility |= OffscreenPassiveEffectsConnected),
+              recursivelyTraverseReconnectPassiveEffects(
+                finishedRoot,
+                finishedWork,
+                committedLanes,
+                committedTransitions,
+                includeWorkInProgressEffects
+              ));
+          includeWorkInProgressEffects &&
+            flags & 2048 &&
+            commitOffscreenPassiveMountEffects(
+              finishedWork.alternate,
+              finishedWork
+            );
+          break;
+        case 24:
+          recursivelyTraverseReconnectPassiveEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions,
+            includeWorkInProgressEffects
+          );
+          includeWorkInProgressEffects &&
+            flags & 2048 &&
+            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+          break;
+        default:
+          recursivelyTraverseReconnectPassiveEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions,
+            includeWorkInProgressEffects
+          );
+      }
+    }
+    function recursivelyTraverseAtomicPassiveEffects(
+      finishedRoot$jscomp$0,
+      parentFiber
+    ) {
+      if (parentFiber.subtreeFlags & 10256)
+        for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+          var finishedRoot = finishedRoot$jscomp$0,
+            finishedWork = parentFiber,
+            flags = finishedWork.flags;
+          switch (finishedWork.tag) {
+            case 22:
+              recursivelyTraverseAtomicPassiveEffects(
+                finishedRoot,
+                finishedWork
+              );
+              flags & 2048 &&
+                commitOffscreenPassiveMountEffects(
+                  finishedWork.alternate,
+                  finishedWork
+                );
+              break;
+            case 24:
+              recursivelyTraverseAtomicPassiveEffects(
+                finishedRoot,
+                finishedWork
+              );
+              flags & 2048 &&
+                commitCachePassiveMountEffect(
+                  finishedWork.alternate,
+                  finishedWork
+                );
+              break;
+            default:
+              recursivelyTraverseAtomicPassiveEffects(
+                finishedRoot,
+                finishedWork
+              );
+          }
+          parentFiber = parentFiber.sibling;
+        }
+    }
+    function recursivelyAccumulateSuspenseyCommit(parentFiber) {
+      if (parentFiber.subtreeFlags & suspenseyCommitFlag)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          accumulateSuspenseyCommitOnFiber(parentFiber),
+            (parentFiber = parentFiber.sibling);
+    }
+    function accumulateSuspenseyCommitOnFiber(fiber) {
+      switch (fiber.tag) {
+        case 26:
+          recursivelyAccumulateSuspenseyCommit(fiber);
+          fiber.flags & suspenseyCommitFlag &&
+            null !== fiber.memoizedState &&
+            suspendResource(
+              currentHoistableRoot,
+              fiber.memoizedState,
+              fiber.memoizedProps
+            );
+          break;
+        case 5:
+          recursivelyAccumulateSuspenseyCommit(fiber);
+          break;
+        case 3:
+        case 4:
+          var previousHoistableRoot = currentHoistableRoot;
+          currentHoistableRoot = getHoistableRoot(
+            fiber.stateNode.containerInfo
+          );
+          recursivelyAccumulateSuspenseyCommit(fiber);
+          currentHoistableRoot = previousHoistableRoot;
+          break;
+        case 22:
+          null === fiber.memoizedState &&
+            ((previousHoistableRoot = fiber.alternate),
+            null !== previousHoistableRoot &&
+            null !== previousHoistableRoot.memoizedState
+              ? ((previousHoistableRoot = suspenseyCommitFlag),
+                (suspenseyCommitFlag = 16777216),
+                recursivelyAccumulateSuspenseyCommit(fiber),
+                (suspenseyCommitFlag = previousHoistableRoot))
+              : recursivelyAccumulateSuspenseyCommit(fiber));
+          break;
+        default:
+          recursivelyAccumulateSuspenseyCommit(fiber);
+      }
+    }
+    function detachAlternateSiblings(parentFiber) {
+      var previousFiber = parentFiber.alternate;
+      if (
+        null !== previousFiber &&
+        ((parentFiber = previousFiber.child), null !== parentFiber)
+      ) {
+        previousFiber.child = null;
+        do
+          (previousFiber = parentFiber.sibling),
+            (parentFiber.sibling = null),
+            (parentFiber = previousFiber);
+        while (null !== parentFiber);
+      }
+    }
+    function recursivelyTraversePassiveUnmountEffects(parentFiber) {
+      var deletions = parentFiber.deletions;
+      if (0 !== (parentFiber.flags & 16)) {
+        if (null !== deletions)
+          for (var i = 0; i < deletions.length; i++) {
+            var childToDelete = deletions[i];
+            nextEffect = childToDelete;
+            commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+              childToDelete,
+              parentFiber
+            );
+          }
+        detachAlternateSiblings(parentFiber);
+      }
+      if (parentFiber.subtreeFlags & 10256)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          commitPassiveUnmountOnFiber(parentFiber),
+            (parentFiber = parentFiber.sibling);
+    }
+    function commitPassiveUnmountOnFiber(finishedWork) {
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraversePassiveUnmountEffects(finishedWork);
+          finishedWork.flags & 2048 &&
+            commitHookPassiveUnmountEffects(
+              finishedWork,
+              finishedWork.return,
+              Passive | HasEffect
+            );
+          break;
+        case 3:
+          var prevEffectDuration = pushNestedEffectDurations();
+          recursivelyTraversePassiveUnmountEffects(finishedWork);
+          finishedWork.stateNode.passiveEffectDuration +=
+            popNestedEffectDurations(prevEffectDuration);
+          break;
+        case 12:
+          prevEffectDuration = pushNestedEffectDurations();
+          recursivelyTraversePassiveUnmountEffects(finishedWork);
+          finishedWork.stateNode.passiveEffectDuration +=
+            bubbleNestedEffectDurations(prevEffectDuration);
+          break;
+        case 22:
+          prevEffectDuration = finishedWork.stateNode;
+          null !== finishedWork.memoizedState &&
+          prevEffectDuration._visibility & OffscreenPassiveEffectsConnected &&
+          (null === finishedWork.return || 13 !== finishedWork.return.tag)
+            ? ((prevEffectDuration._visibility &=
+                ~OffscreenPassiveEffectsConnected),
+              recursivelyTraverseDisconnectPassiveEffects(finishedWork))
+            : recursivelyTraversePassiveUnmountEffects(finishedWork);
+          break;
+        default:
+          recursivelyTraversePassiveUnmountEffects(finishedWork);
+      }
+    }
+    function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {
+      var deletions = parentFiber.deletions;
+      if (0 !== (parentFiber.flags & 16)) {
+        if (null !== deletions)
+          for (var i = 0; i < deletions.length; i++) {
+            var childToDelete = deletions[i];
+            nextEffect = childToDelete;
+            commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+              childToDelete,
+              parentFiber
+            );
+          }
+        detachAlternateSiblings(parentFiber);
+      }
+      for (parentFiber = parentFiber.child; null !== parentFiber; )
+        disconnectPassiveEffect(parentFiber),
+          (parentFiber = parentFiber.sibling);
+    }
+    function disconnectPassiveEffect(finishedWork) {
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          commitHookPassiveUnmountEffects(
+            finishedWork,
+            finishedWork.return,
+            Passive
+          );
+          recursivelyTraverseDisconnectPassiveEffects(finishedWork);
+          break;
+        case 22:
+          var instance = finishedWork.stateNode;
+          instance._visibility & OffscreenPassiveEffectsConnected &&
+            ((instance._visibility &= ~OffscreenPassiveEffectsConnected),
+            recursivelyTraverseDisconnectPassiveEffects(finishedWork));
+          break;
+        default:
+          recursivelyTraverseDisconnectPassiveEffects(finishedWork);
+      }
+    }
+    function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+      deletedSubtreeRoot,
+      nearestMountedAncestor
+    ) {
+      for (; null !== nextEffect; ) {
+        var fiber = nextEffect,
+          current = fiber;
+        switch (current.tag) {
+          case 0:
+          case 11:
+          case 15:
+            commitHookPassiveUnmountEffects(
+              current,
+              nearestMountedAncestor,
+              Passive
+            );
+            break;
+          case 23:
+          case 22:
+            null !== current.memoizedState &&
+              null !== current.memoizedState.cachePool &&
+              ((current = current.memoizedState.cachePool.pool),
+              null != current && retainCache(current));
+            break;
+          case 24:
+            releaseCache(current.memoizedState.cache);
+        }
+        current = fiber.child;
+        if (null !== current) (current.return = fiber), (nextEffect = current);
+        else
+          a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {
+            current = nextEffect;
+            var sibling = current.sibling,
+              returnFiber = current.return;
+            detachFiberAfterEffects(current);
+            if (current === fiber) {
+              nextEffect = null;
+              break a;
+            }
+            if (null !== sibling) {
+              sibling.return = returnFiber;
+              nextEffect = sibling;
+              break a;
+            }
+            nextEffect = returnFiber;
+          }
+      }
+    }
+    function onCommitRoot() {
+      commitHooks.forEach(function (commitHook) {
+        return commitHook();
+      });
+    }
+    function isConcurrentActEnvironment() {
+      var isReactActEnvironmentGlobal =
+        "undefined" !== typeof IS_REACT_ACT_ENVIRONMENT
+          ? IS_REACT_ACT_ENVIRONMENT
+          : void 0;
+      isReactActEnvironmentGlobal ||
+        null === ReactSharedInternals.actQueue ||
+        console.error(
+          "The current testing environment is not configured to support act(...)"
+        );
+      return isReactActEnvironmentGlobal;
+    }
+    function requestUpdateLane(fiber) {
+      if (
+        (executionContext & RenderContext) !== NoContext &&
+        0 !== workInProgressRootRenderLanes
+      )
+        return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;
+      var transition = ReactSharedInternals.T;
+      return null !== transition
+        ? (transition._updatedFibers || (transition._updatedFibers = new Set()),
+          transition._updatedFibers.add(fiber),
+          (fiber = currentEntangledLane),
+          0 !== fiber ? fiber : requestTransitionLane())
+        : resolveUpdatePriority();
+    }
+    function requestDeferredLane() {
+      0 === workInProgressDeferredLane &&
+        (workInProgressDeferredLane =
+          0 === (workInProgressRootRenderLanes & 536870912) || isHydrating
+            ? claimNextTransitionLane()
+            : 536870912);
+      var suspenseHandler = suspenseHandlerStackCursor.current;
+      null !== suspenseHandler && (suspenseHandler.flags |= 32);
+      return workInProgressDeferredLane;
+    }
+    function scheduleUpdateOnFiber(root, fiber, lane) {
+      isRunningInsertionEffect &&
+        console.error("useInsertionEffect must not schedule updates.");
+      isFlushingPassiveEffects && (didScheduleUpdateDuringPassiveEffects = !0);
+      if (
+        (root === workInProgressRoot &&
+          (workInProgressSuspendedReason === SuspendedOnData ||
+            workInProgressSuspendedReason === SuspendedOnAction)) ||
+        null !== root.cancelPendingCommit
+      )
+        prepareFreshStack(root, 0),
+          markRootSuspended(
+            root,
+            workInProgressRootRenderLanes,
+            workInProgressDeferredLane,
+            !1
+          );
+      markRootUpdated$1(root, lane);
+      if (
+        0 !== (executionContext & RenderContext) &&
+        root === workInProgressRoot
+      ) {
+        if (isRendering)
+          switch (fiber.tag) {
+            case 0:
+            case 11:
+            case 15:
+              root =
+                (workInProgress && getComponentNameFromFiber(workInProgress)) ||
+                "Unknown";
+              didWarnAboutUpdateInRenderForAnotherComponent.has(root) ||
+                (didWarnAboutUpdateInRenderForAnotherComponent.add(root),
+                (fiber = getComponentNameFromFiber(fiber) || "Unknown"),
+                console.error(
+                  "Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render",
+                  fiber,
+                  root,
+                  root
+                ));
+              break;
+            case 1:
+              didWarnAboutUpdateInRender ||
+                (console.error(
+                  "Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state."
+                ),
+                (didWarnAboutUpdateInRender = !0));
+          }
+      } else
+        isDevToolsPresent && addFiberToLanesMap(root, fiber, lane),
+          warnIfUpdatesNotWrappedWithActDEV(fiber),
+          root === workInProgressRoot &&
+            ((executionContext & RenderContext) === NoContext &&
+              (workInProgressRootInterleavedUpdatedLanes |= lane),
+            workInProgressRootExitStatus === RootSuspendedWithDelay &&
+              markRootSuspended(
+                root,
+                workInProgressRootRenderLanes,
+                workInProgressDeferredLane,
+                !1
+              )),
+          ensureRootIsScheduled(root);
+    }
+    function performWorkOnRoot(root, lanes, forceSync) {
+      if ((executionContext & (RenderContext | CommitContext)) !== NoContext)
+        throw Error("Should not already be working.");
+      var shouldTimeSlice =
+          (!forceSync &&
+            0 === (lanes & 124) &&
+            0 === (lanes & root.expiredLanes)) ||
+          checkIfRootIsPrerendering(root, lanes),
+        exitStatus = shouldTimeSlice
+          ? renderRootConcurrent(root, lanes)
+          : renderRootSync(root, lanes, !0),
+        renderWasConcurrent = shouldTimeSlice;
+      do {
+        if (exitStatus === RootInProgress) {
+          workInProgressRootIsPrerendering &&
+            !shouldTimeSlice &&
+            markRootSuspended(root, lanes, 0, !1);
+          break;
+        } else {
+          forceSync = root.current.alternate;
+          if (
+            renderWasConcurrent &&
+            !isRenderConsistentWithExternalStores(forceSync)
+          ) {
+            exitStatus = renderRootSync(root, lanes, !1);
+            renderWasConcurrent = !1;
+            continue;
+          }
+          if (exitStatus === RootErrored) {
+            renderWasConcurrent = lanes;
+            if (root.errorRecoveryDisabledLanes & renderWasConcurrent)
+              var errorRetryLanes = 0;
+            else
+              (errorRetryLanes = root.pendingLanes & -536870913),
+                (errorRetryLanes =
+                  0 !== errorRetryLanes
+                    ? errorRetryLanes
+                    : errorRetryLanes & 536870912
+                      ? 536870912
+                      : 0);
+            if (0 !== errorRetryLanes) {
+              lanes = errorRetryLanes;
+              a: {
+                exitStatus = root;
+                var errorRetryLanes$jscomp$0 = errorRetryLanes;
+                errorRetryLanes = workInProgressRootConcurrentErrors;
+                var wasRootDehydrated =
+                  exitStatus.current.memoizedState.isDehydrated;
+                wasRootDehydrated &&
+                  (prepareFreshStack(
+                    exitStatus,
+                    errorRetryLanes$jscomp$0
+                  ).flags |= 256);
+                errorRetryLanes$jscomp$0 = renderRootSync(
+                  exitStatus,
+                  errorRetryLanes$jscomp$0,
+                  !1
+                );
+                if (errorRetryLanes$jscomp$0 !== RootErrored) {
+                  if (
+                    workInProgressRootDidAttachPingListener &&
+                    !wasRootDehydrated
+                  ) {
+                    exitStatus.errorRecoveryDisabledLanes |=
+                      renderWasConcurrent;
+                    workInProgressRootInterleavedUpdatedLanes |=
+                      renderWasConcurrent;
+                    exitStatus = RootSuspendedWithDelay;
+                    break a;
+                  }
+                  exitStatus = workInProgressRootRecoverableErrors;
+                  workInProgressRootRecoverableErrors = errorRetryLanes;
+                  null !== exitStatus &&
+                    (null === workInProgressRootRecoverableErrors
+                      ? (workInProgressRootRecoverableErrors = exitStatus)
+                      : workInProgressRootRecoverableErrors.push.apply(
+                          workInProgressRootRecoverableErrors,
+                          exitStatus
+                        ));
+                }
+                exitStatus = errorRetryLanes$jscomp$0;
+              }
+              renderWasConcurrent = !1;
+              if (exitStatus !== RootErrored) continue;
+            }
+          }
+          if (exitStatus === RootFatalErrored) {
+            prepareFreshStack(root, 0);
+            markRootSuspended(root, lanes, 0, !0);
+            break;
+          }
+          a: {
+            shouldTimeSlice = root;
+            switch (exitStatus) {
+              case RootInProgress:
+              case RootFatalErrored:
+                throw Error("Root did not complete. This is a bug in React.");
+              case RootSuspendedWithDelay:
+                if ((lanes & 4194048) !== lanes) break;
+              case RootSuspendedAtTheShell:
+                markRootSuspended(
+                  shouldTimeSlice,
+                  lanes,
+                  workInProgressDeferredLane,
+                  !workInProgressRootDidSkipSuspendedSiblings
+                );
+                break a;
+              case RootErrored:
+                workInProgressRootRecoverableErrors = null;
+                break;
+              case RootSuspended:
+              case RootCompleted:
+                break;
+              default:
+                throw Error("Unknown root exit status.");
+            }
+            if (null !== ReactSharedInternals.actQueue)
+              commitRoot(
+                shouldTimeSlice,
+                forceSync,
+                lanes,
+                workInProgressRootRecoverableErrors,
+                workInProgressTransitions,
+                workInProgressRootDidIncludeRecursiveRenderUpdate,
+                workInProgressDeferredLane,
+                workInProgressRootInterleavedUpdatedLanes,
+                workInProgressSuspendedRetryLanes
+              );
+            else {
+              if (
+                (lanes & 62914560) === lanes &&
+                ((renderWasConcurrent =
+                  globalMostRecentFallbackTime +
+                  FALLBACK_THROTTLE_MS -
+                  now$1()),
+                10 < renderWasConcurrent)
+              ) {
+                markRootSuspended(
+                  shouldTimeSlice,
+                  lanes,
+                  workInProgressDeferredLane,
+                  !workInProgressRootDidSkipSuspendedSiblings
+                );
+                if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;
+                shouldTimeSlice.timeoutHandle = scheduleTimeout(
+                  commitRootWhenReady.bind(
+                    null,
+                    shouldTimeSlice,
+                    forceSync,
+                    workInProgressRootRecoverableErrors,
+                    workInProgressTransitions,
+                    workInProgressRootDidIncludeRecursiveRenderUpdate,
+                    lanes,
+                    workInProgressDeferredLane,
+                    workInProgressRootInterleavedUpdatedLanes,
+                    workInProgressSuspendedRetryLanes,
+                    workInProgressRootDidSkipSuspendedSiblings,
+                    exitStatus,
+                    THROTTLED_COMMIT,
+                    renderStartTime,
+                    0
+                  ),
+                  renderWasConcurrent
+                );
+                break a;
+              }
+              commitRootWhenReady(
+                shouldTimeSlice,
+                forceSync,
+                workInProgressRootRecoverableErrors,
+                workInProgressTransitions,
+                workInProgressRootDidIncludeRecursiveRenderUpdate,
+                lanes,
+                workInProgressDeferredLane,
+                workInProgressRootInterleavedUpdatedLanes,
+                workInProgressSuspendedRetryLanes,
+                workInProgressRootDidSkipSuspendedSiblings,
+                exitStatus,
+                IMMEDIATE_COMMIT,
+                renderStartTime,
+                0
+              );
+            }
+          }
+        }
+        break;
+      } while (1);
+      ensureRootIsScheduled(root);
+    }
+    function commitRootWhenReady(
+      root,
+      finishedWork,
+      recoverableErrors,
+      transitions,
+      didIncludeRenderPhaseUpdate,
+      lanes,
+      spawnedLane,
+      updatedLanes,
+      suspendedRetryLanes,
+      didSkipSuspendedSiblings,
+      exitStatus,
+      suspendedCommitReason,
+      completedRenderStartTime,
+      completedRenderEndTime
+    ) {
+      root.timeoutHandle = noTimeout;
+      suspendedCommitReason = finishedWork.subtreeFlags;
+      if (
+        suspendedCommitReason & 8192 ||
+        16785408 === (suspendedCommitReason & 16785408)
+      )
+        if (
+          ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),
+          accumulateSuspenseyCommitOnFiber(finishedWork),
+          (suspendedCommitReason = waitForCommitToBeReady()),
+          null !== suspendedCommitReason)
+        ) {
+          root.cancelPendingCommit = suspendedCommitReason(
+            commitRoot.bind(
+              null,
+              root,
+              finishedWork,
+              lanes,
+              recoverableErrors,
+              transitions,
+              didIncludeRenderPhaseUpdate,
+              spawnedLane,
+              updatedLanes,
+              suspendedRetryLanes,
+              exitStatus,
+              SUSPENDED_COMMIT,
+              completedRenderStartTime,
+              completedRenderEndTime
+            )
+          );
+          markRootSuspended(
+            root,
+            lanes,
+            spawnedLane,
+            !didSkipSuspendedSiblings
+          );
+          return;
+        }
+      commitRoot(
+        root,
+        finishedWork,
+        lanes,
+        recoverableErrors,
+        transitions,
+        didIncludeRenderPhaseUpdate,
+        spawnedLane,
+        updatedLanes,
+        suspendedRetryLanes
+      );
+    }
+    function isRenderConsistentWithExternalStores(finishedWork) {
+      for (var node = finishedWork; ; ) {
+        var tag = node.tag;
+        if (
+          (0 === tag || 11 === tag || 15 === tag) &&
+          node.flags & 16384 &&
+          ((tag = node.updateQueue),
+          null !== tag && ((tag = tag.stores), null !== tag))
+        )
+          for (var i = 0; i < tag.length; i++) {
+            var check = tag[i],
+              getSnapshot = check.getSnapshot;
+            check = check.value;
+            try {
+              if (!objectIs(getSnapshot(), check)) return !1;
+            } catch (error) {
+              return !1;
+            }
+          }
+        tag = node.child;
+        if (node.subtreeFlags & 16384 && null !== tag)
+          (tag.return = node), (node = tag);
+        else {
+          if (node === finishedWork) break;
+          for (; null === node.sibling; ) {
+            if (null === node.return || node.return === finishedWork) return !0;
+            node = node.return;
+          }
+          node.sibling.return = node.return;
+          node = node.sibling;
+        }
+      }
+      return !0;
+    }
+    function markRootSuspended(
+      root,
+      suspendedLanes,
+      spawnedLane,
+      didAttemptEntireTree
+    ) {
+      suspendedLanes &= ~workInProgressRootPingedLanes;
+      suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;
+      root.suspendedLanes |= suspendedLanes;
+      root.pingedLanes &= ~suspendedLanes;
+      didAttemptEntireTree && (root.warmLanes |= suspendedLanes);
+      didAttemptEntireTree = root.expirationTimes;
+      for (var lanes = suspendedLanes; 0 < lanes; ) {
+        var index = 31 - clz32(lanes),
+          lane = 1 << index;
+        didAttemptEntireTree[index] = -1;
+        lanes &= ~lane;
+      }
+      0 !== spawnedLane &&
+        markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);
+    }
+    function flushSyncWork$1() {
+      return (executionContext & (RenderContext | CommitContext)) === NoContext
+        ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)
+        : !0;
+    }
+    function resetWorkInProgressStack() {
+      if (null !== workInProgress) {
+        if (workInProgressSuspendedReason === NotSuspended)
+          var interruptedWork = workInProgress.return;
+        else
+          (interruptedWork = workInProgress),
+            resetContextDependencies(),
+            resetHooksOnUnwind(interruptedWork),
+            (thenableState = null),
+            (thenableIndexCounter = 0),
+            (interruptedWork = workInProgress);
+        for (; null !== interruptedWork; )
+          unwindInterruptedWork(interruptedWork.alternate, interruptedWork),
+            (interruptedWork = interruptedWork.return);
+        workInProgress = null;
+      }
+    }
+    function prepareFreshStack(root, lanes) {
+      var timeoutHandle = root.timeoutHandle;
+      timeoutHandle !== noTimeout &&
+        ((root.timeoutHandle = noTimeout), cancelTimeout(timeoutHandle));
+      timeoutHandle = root.cancelPendingCommit;
+      null !== timeoutHandle &&
+        ((root.cancelPendingCommit = null), timeoutHandle());
+      resetWorkInProgressStack();
+      workInProgressRoot = root;
+      workInProgress = timeoutHandle = createWorkInProgress(root.current, null);
+      workInProgressRootRenderLanes = lanes;
+      workInProgressSuspendedReason = NotSuspended;
+      workInProgressThrownValue = null;
+      workInProgressRootDidSkipSuspendedSiblings = !1;
+      workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);
+      workInProgressRootDidAttachPingListener = !1;
+      workInProgressRootExitStatus = RootInProgress;
+      workInProgressSuspendedRetryLanes =
+        workInProgressDeferredLane =
+        workInProgressRootPingedLanes =
+        workInProgressRootInterleavedUpdatedLanes =
+        workInProgressRootSkippedLanes =
+          0;
+      workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =
+        null;
+      workInProgressRootDidIncludeRecursiveRenderUpdate = !1;
+      0 !== (lanes & 8) && (lanes |= lanes & 32);
+      var allEntangledLanes = root.entangledLanes;
+      if (0 !== allEntangledLanes)
+        for (
+          root = root.entanglements, allEntangledLanes &= lanes;
+          0 < allEntangledLanes;
+
+        ) {
+          var index = 31 - clz32(allEntangledLanes),
+            lane = 1 << index;
+          lanes |= root[index];
+          allEntangledLanes &= ~lane;
+        }
+      entangledRenderLanes = lanes;
+      finishQueueingConcurrentUpdates();
+      lanes = getCurrentTime();
+      1e3 < lanes - lastResetTime &&
+        ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),
+        (lastResetTime = lanes));
+      ReactStrictModeWarnings.discardPendingWarnings();
+      return timeoutHandle;
+    }
+    function handleThrow(root, thrownValue) {
+      currentlyRenderingFiber = null;
+      ReactSharedInternals.H = ContextOnlyDispatcher;
+      ReactSharedInternals.getCurrentStack = null;
+      isRendering = !1;
+      current = null;
+      thrownValue === SuspenseException ||
+      thrownValue === SuspenseActionException
+        ? ((thrownValue = getSuspendedThenable()),
+          (workInProgressSuspendedReason = SuspendedOnImmediate))
+        : thrownValue === SuspenseyCommitException
+          ? ((thrownValue = getSuspendedThenable()),
+            (workInProgressSuspendedReason = SuspendedOnInstance))
+          : (workInProgressSuspendedReason =
+              thrownValue === SelectiveHydrationException
+                ? SuspendedOnHydration
+                : null !== thrownValue &&
+                    "object" === typeof thrownValue &&
+                    "function" === typeof thrownValue.then
+                  ? SuspendedOnDeprecatedThrowPromise
+                  : SuspendedOnError);
+      workInProgressThrownValue = thrownValue;
+      var erroredWork = workInProgress;
+      if (null === erroredWork)
+        (workInProgressRootExitStatus = RootFatalErrored),
+          logUncaughtError(
+            root,
+            createCapturedValueAtFiber(thrownValue, root.current)
+          );
+      else
+        switch (
+          (erroredWork.mode & ProfileMode &&
+            stopProfilerTimerIfRunningAndRecordDuration(erroredWork),
+          markComponentRenderStopped(),
+          workInProgressSuspendedReason)
+        ) {
+          case SuspendedOnError:
+            null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markComponentErrored &&
+              injectedProfilingHooks.markComponentErrored(
+                erroredWork,
+                thrownValue,
+                workInProgressRootRenderLanes
+              );
+            break;
+          case SuspendedOnData:
+          case SuspendedOnAction:
+          case SuspendedOnImmediate:
+          case SuspendedOnDeprecatedThrowPromise:
+          case SuspendedAndReadyToContinue:
+            null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markComponentSuspended &&
+              injectedProfilingHooks.markComponentSuspended(
+                erroredWork,
+                thrownValue,
+                workInProgressRootRenderLanes
+              );
+        }
+    }
+    function pushDispatcher() {
+      var prevDispatcher = ReactSharedInternals.H;
+      ReactSharedInternals.H = ContextOnlyDispatcher;
+      return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;
+    }
+    function pushAsyncDispatcher() {
+      var prevAsyncDispatcher = ReactSharedInternals.A;
+      ReactSharedInternals.A = DefaultAsyncDispatcher;
+      return prevAsyncDispatcher;
+    }
+    function renderDidSuspendDelayIfPossible() {
+      workInProgressRootExitStatus = RootSuspendedWithDelay;
+      workInProgressRootDidSkipSuspendedSiblings ||
+        ((workInProgressRootRenderLanes & 4194048) !==
+          workInProgressRootRenderLanes &&
+          null !== suspenseHandlerStackCursor.current) ||
+        (workInProgressRootIsPrerendering = !0);
+      (0 === (workInProgressRootSkippedLanes & 134217727) &&
+        0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||
+        null === workInProgressRoot ||
+        markRootSuspended(
+          workInProgressRoot,
+          workInProgressRootRenderLanes,
+          workInProgressDeferredLane,
+          !1
+        );
+    }
+    function renderRootSync(root, lanes, shouldYieldForPrerendering) {
+      var prevExecutionContext = executionContext;
+      executionContext |= RenderContext;
+      var prevDispatcher = pushDispatcher(),
+        prevAsyncDispatcher = pushAsyncDispatcher();
+      if (
+        workInProgressRoot !== root ||
+        workInProgressRootRenderLanes !== lanes
+      ) {
+        if (isDevToolsPresent) {
+          var memoizedUpdaters = root.memoizedUpdaters;
+          0 < memoizedUpdaters.size &&
+            (restorePendingUpdaters(root, workInProgressRootRenderLanes),
+            memoizedUpdaters.clear());
+          movePendingFibersToMemoized(root, lanes);
+        }
+        workInProgressTransitions = null;
+        prepareFreshStack(root, lanes);
+      }
+      markRenderStarted(lanes);
+      lanes = !1;
+      memoizedUpdaters = workInProgressRootExitStatus;
+      a: do
+        try {
+          if (
+            workInProgressSuspendedReason !== NotSuspended &&
+            null !== workInProgress
+          ) {
+            var unitOfWork = workInProgress,
+              thrownValue = workInProgressThrownValue;
+            switch (workInProgressSuspendedReason) {
+              case SuspendedOnHydration:
+                resetWorkInProgressStack();
+                memoizedUpdaters = RootSuspendedAtTheShell;
+                break a;
+              case SuspendedOnImmediate:
+              case SuspendedOnData:
+              case SuspendedOnAction:
+              case SuspendedOnDeprecatedThrowPromise:
+                null === suspenseHandlerStackCursor.current && (lanes = !0);
+                var reason = workInProgressSuspendedReason;
+                workInProgressSuspendedReason = NotSuspended;
+                workInProgressThrownValue = null;
+                throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);
+                if (
+                  shouldYieldForPrerendering &&
+                  workInProgressRootIsPrerendering
+                ) {
+                  memoizedUpdaters = RootInProgress;
+                  break a;
+                }
+                break;
+              default:
+                (reason = workInProgressSuspendedReason),
+                  (workInProgressSuspendedReason = NotSuspended),
+                  (workInProgressThrownValue = null),
+                  throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);
+            }
+          }
+          workLoopSync();
+          memoizedUpdaters = workInProgressRootExitStatus;
+          break;
+        } catch (thrownValue$8) {
+          handleThrow(root, thrownValue$8);
+        }
+      while (1);
+      lanes && root.shellSuspendCounter++;
+      resetContextDependencies();
+      executionContext = prevExecutionContext;
+      ReactSharedInternals.H = prevDispatcher;
+      ReactSharedInternals.A = prevAsyncDispatcher;
+      markRenderStopped();
+      null === workInProgress &&
+        ((workInProgressRoot = null),
+        (workInProgressRootRenderLanes = 0),
+        finishQueueingConcurrentUpdates());
+      return memoizedUpdaters;
+    }
+    function workLoopSync() {
+      for (; null !== workInProgress; ) performUnitOfWork(workInProgress);
+    }
+    function renderRootConcurrent(root, lanes) {
+      var prevExecutionContext = executionContext;
+      executionContext |= RenderContext;
+      var prevDispatcher = pushDispatcher(),
+        prevAsyncDispatcher = pushAsyncDispatcher();
+      if (
+        workInProgressRoot !== root ||
+        workInProgressRootRenderLanes !== lanes
+      ) {
+        if (isDevToolsPresent) {
+          var memoizedUpdaters = root.memoizedUpdaters;
+          0 < memoizedUpdaters.size &&
+            (restorePendingUpdaters(root, workInProgressRootRenderLanes),
+            memoizedUpdaters.clear());
+          movePendingFibersToMemoized(root, lanes);
+        }
+        workInProgressTransitions = null;
+        workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS;
+        prepareFreshStack(root, lanes);
+      } else
+        workInProgressRootIsPrerendering = checkIfRootIsPrerendering(
+          root,
+          lanes
+        );
+      markRenderStarted(lanes);
+      a: do
+        try {
+          if (
+            workInProgressSuspendedReason !== NotSuspended &&
+            null !== workInProgress
+          )
+            b: switch (
+              ((lanes = workInProgress),
+              (memoizedUpdaters = workInProgressThrownValue),
+              workInProgressSuspendedReason)
+            ) {
+              case SuspendedOnError:
+                workInProgressSuspendedReason = NotSuspended;
+                workInProgressThrownValue = null;
+                throwAndUnwindWorkLoop(
+                  root,
+                  lanes,
+                  memoizedUpdaters,
+                  SuspendedOnError
+                );
+                break;
+              case SuspendedOnData:
+              case SuspendedOnAction:
+                if (isThenableResolved(memoizedUpdaters)) {
+                  workInProgressSuspendedReason = NotSuspended;
+                  workInProgressThrownValue = null;
+                  replaySuspendedUnitOfWork(lanes);
+                  break;
+                }
+                lanes = function () {
+                  (workInProgressSuspendedReason !== SuspendedOnData &&
+                    workInProgressSuspendedReason !== SuspendedOnAction) ||
+                    workInProgressRoot !== root ||
+                    (workInProgressSuspendedReason =
+                      SuspendedAndReadyToContinue);
+                  ensureRootIsScheduled(root);
+                };
+                memoizedUpdaters.then(lanes, lanes);
+                break a;
+              case SuspendedOnImmediate:
+                workInProgressSuspendedReason = SuspendedAndReadyToContinue;
+                break a;
+              case SuspendedOnInstance:
+                workInProgressSuspendedReason =
+                  SuspendedOnInstanceAndReadyToContinue;
+                break a;
+              case SuspendedAndReadyToContinue:
+                isThenableResolved(memoizedUpdaters)
+                  ? ((workInProgressSuspendedReason = NotSuspended),
+                    (workInProgressThrownValue = null),
+                    replaySuspendedUnitOfWork(lanes))
+                  : ((workInProgressSuspendedReason = NotSuspended),
+                    (workInProgressThrownValue = null),
+                    throwAndUnwindWorkLoop(
+                      root,
+                      lanes,
+                      memoizedUpdaters,
+                      SuspendedAndReadyToContinue
+                    ));
+                break;
+              case SuspendedOnInstanceAndReadyToContinue:
+                var resource = null;
+                switch (workInProgress.tag) {
+                  case 26:
+                    resource = workInProgress.memoizedState;
+                  case 5:
+                  case 27:
+                    var hostFiber = workInProgress;
+                    if (resource ? preloadResource(resource) : 1) {
+                      workInProgressSuspendedReason = NotSuspended;
+                      workInProgressThrownValue = null;
+                      var sibling = hostFiber.sibling;
+                      if (null !== sibling) workInProgress = sibling;
+                      else {
+                        var returnFiber = hostFiber.return;
+                        null !== returnFiber
+                          ? ((workInProgress = returnFiber),
+                            completeUnitOfWork(returnFiber))
+                          : (workInProgress = null);
+                      }
+                      break b;
+                    }
+                    break;
+                  default:
+                    console.error(
+                      "Unexpected type of fiber triggered a suspensey commit. This is a bug in React."
+                    );
+                }
+                workInProgressSuspendedReason = NotSuspended;
+                workInProgressThrownValue = null;
+                throwAndUnwindWorkLoop(
+                  root,
+                  lanes,
+                  memoizedUpdaters,
+                  SuspendedOnInstanceAndReadyToContinue
+                );
+                break;
+              case SuspendedOnDeprecatedThrowPromise:
+                workInProgressSuspendedReason = NotSuspended;
+                workInProgressThrownValue = null;
+                throwAndUnwindWorkLoop(
+                  root,
+                  lanes,
+                  memoizedUpdaters,
+                  SuspendedOnDeprecatedThrowPromise
+                );
+                break;
+              case SuspendedOnHydration:
+                resetWorkInProgressStack();
+                workInProgressRootExitStatus = RootSuspendedAtTheShell;
+                break a;
+              default:
+                throw Error(
+                  "Unexpected SuspendedReason. This is a bug in React."
+                );
+            }
+          null !== ReactSharedInternals.actQueue
+            ? workLoopSync()
+            : workLoopConcurrentByScheduler();
+          break;
+        } catch (thrownValue$9) {
+          handleThrow(root, thrownValue$9);
+        }
+      while (1);
+      resetContextDependencies();
+      ReactSharedInternals.H = prevDispatcher;
+      ReactSharedInternals.A = prevAsyncDispatcher;
+      executionContext = prevExecutionContext;
+      if (null !== workInProgress)
+        return (
+          null !== injectedProfilingHooks &&
+            "function" === typeof injectedProfilingHooks.markRenderYielded &&
+            injectedProfilingHooks.markRenderYielded(),
+          RootInProgress
+        );
+      markRenderStopped();
+      workInProgressRoot = null;
+      workInProgressRootRenderLanes = 0;
+      finishQueueingConcurrentUpdates();
+      return workInProgressRootExitStatus;
+    }
+    function workLoopConcurrentByScheduler() {
+      for (; null !== workInProgress && !shouldYield(); )
+        performUnitOfWork(workInProgress);
+    }
+    function performUnitOfWork(unitOfWork) {
+      var current = unitOfWork.alternate;
+      (unitOfWork.mode & ProfileMode) !== NoMode
+        ? (startProfilerTimer(unitOfWork),
+          (current = runWithFiberInDEV(
+            unitOfWork,
+            beginWork,
+            current,
+            unitOfWork,
+            entangledRenderLanes
+          )),
+          stopProfilerTimerIfRunningAndRecordDuration(unitOfWork))
+        : (current = runWithFiberInDEV(
+            unitOfWork,
+            beginWork,
+            current,
+            unitOfWork,
+            entangledRenderLanes
+          ));
+      unitOfWork.memoizedProps = unitOfWork.pendingProps;
+      null === current
+        ? completeUnitOfWork(unitOfWork)
+        : (workInProgress = current);
+    }
+    function replaySuspendedUnitOfWork(unitOfWork) {
+      var next = runWithFiberInDEV(unitOfWork, replayBeginWork, unitOfWork);
+      unitOfWork.memoizedProps = unitOfWork.pendingProps;
+      null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);
+    }
+    function replayBeginWork(unitOfWork) {
+      var current = unitOfWork.alternate,
+        isProfilingMode = (unitOfWork.mode & ProfileMode) !== NoMode;
+      isProfilingMode && startProfilerTimer(unitOfWork);
+      switch (unitOfWork.tag) {
+        case 15:
+        case 0:
+          current = replayFunctionComponent(
+            current,
+            unitOfWork,
+            unitOfWork.pendingProps,
+            unitOfWork.type,
+            void 0,
+            workInProgressRootRenderLanes
+          );
+          break;
+        case 11:
+          current = replayFunctionComponent(
+            current,
+            unitOfWork,
+            unitOfWork.pendingProps,
+            unitOfWork.type.render,
+            unitOfWork.ref,
+            workInProgressRootRenderLanes
+          );
+          break;
+        case 5:
+          resetHooksOnUnwind(unitOfWork);
+        default:
+          unwindInterruptedWork(current, unitOfWork),
+            (unitOfWork = workInProgress =
+              resetWorkInProgress(unitOfWork, entangledRenderLanes)),
+            (current = beginWork(current, unitOfWork, entangledRenderLanes));
+      }
+      isProfilingMode &&
+        stopProfilerTimerIfRunningAndRecordDuration(unitOfWork);
+      return current;
+    }
+    function throwAndUnwindWorkLoop(
+      root,
+      unitOfWork,
+      thrownValue,
+      suspendedReason
+    ) {
+      resetContextDependencies();
+      resetHooksOnUnwind(unitOfWork);
+      thenableState = null;
+      thenableIndexCounter = 0;
+      var returnFiber = unitOfWork.return;
+      try {
+        if (
+          throwException(
+            root,
+            returnFiber,
+            unitOfWork,
+            thrownValue,
+            workInProgressRootRenderLanes
+          )
+        ) {
+          workInProgressRootExitStatus = RootFatalErrored;
+          logUncaughtError(
+            root,
+            createCapturedValueAtFiber(thrownValue, root.current)
+          );
+          workInProgress = null;
+          return;
+        }
+      } catch (error) {
+        if (null !== returnFiber) throw ((workInProgress = returnFiber), error);
+        workInProgressRootExitStatus = RootFatalErrored;
+        logUncaughtError(
+          root,
+          createCapturedValueAtFiber(thrownValue, root.current)
+        );
+        workInProgress = null;
+        return;
+      }
+      if (unitOfWork.flags & 32768) {
+        if (isHydrating || suspendedReason === SuspendedOnError) root = !0;
+        else if (
+          workInProgressRootIsPrerendering ||
+          0 !== (workInProgressRootRenderLanes & 536870912)
+        )
+          root = !1;
+        else if (
+          ((workInProgressRootDidSkipSuspendedSiblings = root = !0),
+          suspendedReason === SuspendedOnData ||
+            suspendedReason === SuspendedOnAction ||
+            suspendedReason === SuspendedOnImmediate ||
+            suspendedReason === SuspendedOnDeprecatedThrowPromise)
+        )
+          (suspendedReason = suspenseHandlerStackCursor.current),
+            null !== suspendedReason &&
+              13 === suspendedReason.tag &&
+              (suspendedReason.flags |= 16384);
+        unwindUnitOfWork(unitOfWork, root);
+      } else completeUnitOfWork(unitOfWork);
+    }
+    function completeUnitOfWork(unitOfWork) {
+      var completedWork = unitOfWork;
+      do {
+        if (0 !== (completedWork.flags & 32768)) {
+          unwindUnitOfWork(
+            completedWork,
+            workInProgressRootDidSkipSuspendedSiblings
+          );
+          return;
+        }
+        var current = completedWork.alternate;
+        unitOfWork = completedWork.return;
+        startProfilerTimer(completedWork);
+        current = runWithFiberInDEV(
+          completedWork,
+          completeWork,
+          current,
+          completedWork,
+          entangledRenderLanes
+        );
+        (completedWork.mode & ProfileMode) !== NoMode &&
+          stopProfilerTimerIfRunningAndRecordIncompleteDuration(completedWork);
+        if (null !== current) {
+          workInProgress = current;
+          return;
+        }
+        completedWork = completedWork.sibling;
+        if (null !== completedWork) {
+          workInProgress = completedWork;
+          return;
+        }
+        workInProgress = completedWork = unitOfWork;
+      } while (null !== completedWork);
+      workInProgressRootExitStatus === RootInProgress &&
+        (workInProgressRootExitStatus = RootCompleted);
+    }
+    function unwindUnitOfWork(unitOfWork, skipSiblings) {
+      do {
+        var next = unwindWork(unitOfWork.alternate, unitOfWork);
+        if (null !== next) {
+          next.flags &= 32767;
+          workInProgress = next;
+          return;
+        }
+        if ((unitOfWork.mode & ProfileMode) !== NoMode) {
+          stopProfilerTimerIfRunningAndRecordIncompleteDuration(unitOfWork);
+          next = unitOfWork.actualDuration;
+          for (var child = unitOfWork.child; null !== child; )
+            (next += child.actualDuration), (child = child.sibling);
+          unitOfWork.actualDuration = next;
+        }
+        next = unitOfWork.return;
+        null !== next &&
+          ((next.flags |= 32768),
+          (next.subtreeFlags = 0),
+          (next.deletions = null));
+        if (
+          !skipSiblings &&
+          ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)
+        ) {
+          workInProgress = unitOfWork;
+          return;
+        }
+        workInProgress = unitOfWork = next;
+      } while (null !== unitOfWork);
+      workInProgressRootExitStatus = RootSuspendedAtTheShell;
+      workInProgress = null;
+    }
+    function commitRoot(
+      root,
+      finishedWork,
+      lanes,
+      recoverableErrors,
+      transitions,
+      didIncludeRenderPhaseUpdate,
+      spawnedLane,
+      updatedLanes,
+      suspendedRetryLanes
+    ) {
+      root.cancelPendingCommit = null;
+      do flushPendingEffects();
+      while (pendingEffectsStatus !== NO_PENDING_EFFECTS);
+      ReactStrictModeWarnings.flushLegacyContextWarning();
+      ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();
+      if ((executionContext & (RenderContext | CommitContext)) !== NoContext)
+        throw Error("Should not already be working.");
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markCommitStarted &&
+        injectedProfilingHooks.markCommitStarted(lanes);
+      if (null === finishedWork) markCommitStopped();
+      else {
+        0 === lanes &&
+          console.error(
+            "finishedLanes should not be empty during a commit. This is a bug in React."
+          );
+        if (finishedWork === root.current)
+          throw Error(
+            "Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue."
+          );
+        didIncludeRenderPhaseUpdate =
+          finishedWork.lanes | finishedWork.childLanes;
+        didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;
+        markRootFinished(
+          root,
+          lanes,
+          didIncludeRenderPhaseUpdate,
+          spawnedLane,
+          updatedLanes,
+          suspendedRetryLanes
+        );
+        root === workInProgressRoot &&
+          ((workInProgress = workInProgressRoot = null),
+          (workInProgressRootRenderLanes = 0));
+        pendingFinishedWork = finishedWork;
+        pendingEffectsRoot = root;
+        pendingEffectsLanes = lanes;
+        pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;
+        pendingPassiveTransitions = transitions;
+        pendingRecoverableErrors = recoverableErrors;
+        0 !== (finishedWork.subtreeFlags & 10256) ||
+        0 !== (finishedWork.flags & 10256)
+          ? ((root.callbackNode = null),
+            (root.callbackPriority = 0),
+            scheduleCallback$1(NormalPriority$1, function () {
+              flushPassiveEffects(!0);
+              return null;
+            }))
+          : ((root.callbackNode = null), (root.callbackPriority = 0));
+        commitStartTime = now();
+        recoverableErrors = 0 !== (finishedWork.flags & 13878);
+        if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {
+          recoverableErrors = ReactSharedInternals.T;
+          ReactSharedInternals.T = null;
+          transitions = ReactDOMSharedInternals.p;
+          ReactDOMSharedInternals.p = DiscreteEventPriority;
+          spawnedLane = executionContext;
+          executionContext |= CommitContext;
+          try {
+            commitBeforeMutationEffects(root, finishedWork, lanes);
+          } finally {
+            (executionContext = spawnedLane),
+              (ReactDOMSharedInternals.p = transitions),
+              (ReactSharedInternals.T = recoverableErrors);
+          }
+        }
+        pendingEffectsStatus = PENDING_MUTATION_PHASE;
+        flushMutationEffects();
+        flushLayoutEffects();
+        flushSpawnedWork();
+      }
+    }
+    function flushMutationEffects() {
+      if (pendingEffectsStatus === PENDING_MUTATION_PHASE) {
+        pendingEffectsStatus = NO_PENDING_EFFECTS;
+        var root = pendingEffectsRoot,
+          finishedWork = pendingFinishedWork,
+          lanes = pendingEffectsLanes,
+          rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);
+        if (
+          0 !== (finishedWork.subtreeFlags & 13878) ||
+          rootMutationHasEffect
+        ) {
+          rootMutationHasEffect = ReactSharedInternals.T;
+          ReactSharedInternals.T = null;
+          var previousPriority = ReactDOMSharedInternals.p;
+          ReactDOMSharedInternals.p = DiscreteEventPriority;
+          var prevExecutionContext = executionContext;
+          executionContext |= CommitContext;
+          try {
+            inProgressLanes = lanes;
+            inProgressRoot = root;
+            commitMutationEffectsOnFiber(finishedWork, root);
+            inProgressRoot = inProgressLanes = null;
+            lanes = selectionInformation;
+            var curFocusedElem = getActiveElementDeep(root.containerInfo),
+              priorFocusedElem = lanes.focusedElem,
+              priorSelectionRange = lanes.selectionRange;
+            if (
+              curFocusedElem !== priorFocusedElem &&
+              priorFocusedElem &&
+              priorFocusedElem.ownerDocument &&
+              containsNode(
+                priorFocusedElem.ownerDocument.documentElement,
+                priorFocusedElem
+              )
+            ) {
+              if (
+                null !== priorSelectionRange &&
+                hasSelectionCapabilities(priorFocusedElem)
+              ) {
+                var start = priorSelectionRange.start,
+                  end = priorSelectionRange.end;
+                void 0 === end && (end = start);
+                if ("selectionStart" in priorFocusedElem)
+                  (priorFocusedElem.selectionStart = start),
+                    (priorFocusedElem.selectionEnd = Math.min(
+                      end,
+                      priorFocusedElem.value.length
+                    ));
+                else {
+                  var doc = priorFocusedElem.ownerDocument || document,
+                    win = (doc && doc.defaultView) || window;
+                  if (win.getSelection) {
+                    var selection = win.getSelection(),
+                      length = priorFocusedElem.textContent.length,
+                      start$jscomp$0 = Math.min(
+                        priorSelectionRange.start,
+                        length
+                      ),
+                      end$jscomp$0 =
+                        void 0 === priorSelectionRange.end
+                          ? start$jscomp$0
+                          : Math.min(priorSelectionRange.end, length);
+                    !selection.extend &&
+                      start$jscomp$0 > end$jscomp$0 &&
+                      ((curFocusedElem = end$jscomp$0),
+                      (end$jscomp$0 = start$jscomp$0),
+                      (start$jscomp$0 = curFocusedElem));
+                    var startMarker = getNodeForCharacterOffset(
+                        priorFocusedElem,
+                        start$jscomp$0
+                      ),
+                      endMarker = getNodeForCharacterOffset(
+                        priorFocusedElem,
+                        end$jscomp$0
+                      );
+                    if (
+                      startMarker &&
+                      endMarker &&
+                      (1 !== selection.rangeCount ||
+                        selection.anchorNode !== startMarker.node ||
+                        selection.anchorOffset !== startMarker.offset ||
+                        selection.focusNode !== endMarker.node ||
+                        selection.focusOffset !== endMarker.offset)
+                    ) {
+                      var range = doc.createRange();
+                      range.setStart(startMarker.node, startMarker.offset);
+                      selection.removeAllRanges();
+                      start$jscomp$0 > end$jscomp$0
+                        ? (selection.addRange(range),
+                          selection.extend(endMarker.node, endMarker.offset))
+                        : (range.setEnd(endMarker.node, endMarker.offset),
+                          selection.addRange(range));
+                    }
+                  }
+                }
+              }
+              doc = [];
+              for (
+                selection = priorFocusedElem;
+                (selection = selection.parentNode);
+
+              )
+                1 === selection.nodeType &&
+                  doc.push({
+                    element: selection,
+                    left: selection.scrollLeft,
+                    top: selection.scrollTop
+                  });
+              "function" === typeof priorFocusedElem.focus &&
+                priorFocusedElem.focus();
+              for (
+                priorFocusedElem = 0;
+                priorFocusedElem < doc.length;
+                priorFocusedElem++
+              ) {
+                var info = doc[priorFocusedElem];
+                info.element.scrollLeft = info.left;
+                info.element.scrollTop = info.top;
+              }
+            }
+            _enabled = !!eventsEnabled;
+            selectionInformation = eventsEnabled = null;
+          } finally {
+            (executionContext = prevExecutionContext),
+              (ReactDOMSharedInternals.p = previousPriority),
+              (ReactSharedInternals.T = rootMutationHasEffect);
+          }
+        }
+        root.current = finishedWork;
+        pendingEffectsStatus = PENDING_LAYOUT_PHASE;
+      }
+    }
+    function flushLayoutEffects() {
+      if (pendingEffectsStatus === PENDING_LAYOUT_PHASE) {
+        pendingEffectsStatus = NO_PENDING_EFFECTS;
+        var root = pendingEffectsRoot,
+          finishedWork = pendingFinishedWork,
+          lanes = pendingEffectsLanes,
+          rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);
+        if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {
+          rootHasLayoutEffect = ReactSharedInternals.T;
+          ReactSharedInternals.T = null;
+          var previousPriority = ReactDOMSharedInternals.p;
+          ReactDOMSharedInternals.p = DiscreteEventPriority;
+          var prevExecutionContext = executionContext;
+          executionContext |= CommitContext;
+          try {
+            null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markLayoutEffectsStarted &&
+              injectedProfilingHooks.markLayoutEffectsStarted(lanes),
+              (inProgressLanes = lanes),
+              (inProgressRoot = root),
+              commitLayoutEffectOnFiber(
+                root,
+                finishedWork.alternate,
+                finishedWork
+              ),
+              (inProgressRoot = inProgressLanes = null),
+              null !== injectedProfilingHooks &&
+                "function" ===
+                  typeof injectedProfilingHooks.markLayoutEffectsStopped &&
+                injectedProfilingHooks.markLayoutEffectsStopped();
+          } finally {
+            (executionContext = prevExecutionContext),
+              (ReactDOMSharedInternals.p = previousPriority),
+              (ReactSharedInternals.T = rootHasLayoutEffect);
+          }
+        }
+        pendingEffectsStatus = PENDING_AFTER_MUTATION_PHASE;
+      }
+    }
+    function flushSpawnedWork() {
+      if (
+        pendingEffectsStatus === PENDING_SPAWNED_WORK ||
+        pendingEffectsStatus === PENDING_AFTER_MUTATION_PHASE
+      ) {
+        pendingEffectsStatus = NO_PENDING_EFFECTS;
+        requestPaint();
+        var root = pendingEffectsRoot,
+          finishedWork = pendingFinishedWork,
+          lanes = pendingEffectsLanes,
+          recoverableErrors = pendingRecoverableErrors,
+          rootDidHavePassiveEffects =
+            0 !== (finishedWork.subtreeFlags & 10256) ||
+            0 !== (finishedWork.flags & 10256);
+        rootDidHavePassiveEffects
+          ? (pendingEffectsStatus = PENDING_PASSIVE_PHASE)
+          : ((pendingEffectsStatus = NO_PENDING_EFFECTS),
+            (pendingFinishedWork = pendingEffectsRoot = null),
+            releaseRootPooledCache(root, root.pendingLanes),
+            (nestedPassiveUpdateCount = 0),
+            (rootWithPassiveNestedUpdates = null));
+        var remainingLanes = root.pendingLanes;
+        0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);
+        rootDidHavePassiveEffects || commitDoubleInvokeEffectsInDEV(root);
+        rootDidHavePassiveEffects = lanesToEventPriority(lanes);
+        finishedWork = finishedWork.stateNode;
+        if (
+          injectedHook &&
+          "function" === typeof injectedHook.onCommitFiberRoot
+        )
+          try {
+            var didError = 128 === (finishedWork.current.flags & 128);
+            switch (rootDidHavePassiveEffects) {
+              case DiscreteEventPriority:
+                var schedulerPriority = ImmediatePriority;
+                break;
+              case ContinuousEventPriority:
+                schedulerPriority = UserBlockingPriority;
+                break;
+              case DefaultEventPriority:
+                schedulerPriority = NormalPriority$1;
+                break;
+              case IdleEventPriority:
+                schedulerPriority = IdlePriority;
+                break;
+              default:
+                schedulerPriority = NormalPriority$1;
+            }
+            injectedHook.onCommitFiberRoot(
+              rendererID,
+              finishedWork,
+              schedulerPriority,
+              didError
+            );
+          } catch (err) {
+            hasLoggedError ||
+              ((hasLoggedError = !0),
+              console.error(
+                "React instrumentation encountered an error: %s",
+                err
+              ));
+          }
+        isDevToolsPresent && root.memoizedUpdaters.clear();
+        onCommitRoot();
+        if (null !== recoverableErrors) {
+          didError = ReactSharedInternals.T;
+          schedulerPriority = ReactDOMSharedInternals.p;
+          ReactDOMSharedInternals.p = DiscreteEventPriority;
+          ReactSharedInternals.T = null;
+          try {
+            var onRecoverableError = root.onRecoverableError;
+            for (
+              finishedWork = 0;
+              finishedWork < recoverableErrors.length;
+              finishedWork++
+            ) {
+              var recoverableError = recoverableErrors[finishedWork],
+                errorInfo = makeErrorInfo(recoverableError.stack);
+              runWithFiberInDEV(
+                recoverableError.source,
+                onRecoverableError,
+                recoverableError.value,
+                errorInfo
+              );
+            }
+          } finally {
+            (ReactSharedInternals.T = didError),
+              (ReactDOMSharedInternals.p = schedulerPriority);
+          }
+        }
+        0 !== (pendingEffectsLanes & 3) && flushPendingEffects();
+        ensureRootIsScheduled(root);
+        remainingLanes = root.pendingLanes;
+        0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)
+          ? ((nestedUpdateScheduled = !0),
+            root === rootWithNestedUpdates
+              ? nestedUpdateCount++
+              : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root)))
+          : (nestedUpdateCount = 0);
+        flushSyncWorkAcrossRoots_impl(0, !1);
+        markCommitStopped();
+      }
+    }
+    function makeErrorInfo(componentStack) {
+      componentStack = { componentStack: componentStack };
+      Object.defineProperty(componentStack, "digest", {
+        get: function () {
+          console.error(
+            'You are accessing "digest" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.'
+          );
+        }
+      });
+      return componentStack;
+    }
+    function releaseRootPooledCache(root, remainingLanes) {
+      0 === (root.pooledCacheLanes &= remainingLanes) &&
+        ((remainingLanes = root.pooledCache),
+        null != remainingLanes &&
+          ((root.pooledCache = null), releaseCache(remainingLanes)));
+    }
+    function flushPendingEffects(wasDelayedCommit) {
+      flushMutationEffects();
+      flushLayoutEffects();
+      flushSpawnedWork();
+      return flushPassiveEffects(wasDelayedCommit);
+    }
+    function flushPassiveEffects() {
+      if (pendingEffectsStatus !== PENDING_PASSIVE_PHASE) return !1;
+      var root = pendingEffectsRoot,
+        remainingLanes = pendingEffectsRemainingLanes;
+      pendingEffectsRemainingLanes = 0;
+      var renderPriority = lanesToEventPriority(pendingEffectsLanes),
+        priority =
+          0 === DefaultEventPriority || DefaultEventPriority > renderPriority
+            ? DefaultEventPriority
+            : renderPriority;
+      renderPriority = ReactSharedInternals.T;
+      var previousPriority = ReactDOMSharedInternals.p;
+      try {
+        ReactDOMSharedInternals.p = priority;
+        ReactSharedInternals.T = null;
+        priority = pendingPassiveTransitions;
+        pendingPassiveTransitions = null;
+        var root$jscomp$0 = pendingEffectsRoot,
+          lanes = pendingEffectsLanes;
+        pendingEffectsStatus = NO_PENDING_EFFECTS;
+        pendingFinishedWork = pendingEffectsRoot = null;
+        pendingEffectsLanes = 0;
+        if ((executionContext & (RenderContext | CommitContext)) !== NoContext)
+          throw Error("Cannot flush passive effects while already rendering.");
+        isFlushingPassiveEffects = !0;
+        didScheduleUpdateDuringPassiveEffects = !1;
+        null !== injectedProfilingHooks &&
+          "function" ===
+            typeof injectedProfilingHooks.markPassiveEffectsStarted &&
+          injectedProfilingHooks.markPassiveEffectsStarted(lanes);
+        var prevExecutionContext = executionContext;
+        executionContext |= CommitContext;
+        commitPassiveUnmountOnFiber(root$jscomp$0.current);
+        commitPassiveMountOnFiber(
+          root$jscomp$0,
+          root$jscomp$0.current,
+          lanes,
+          priority
+        );
+        null !== injectedProfilingHooks &&
+          "function" ===
+            typeof injectedProfilingHooks.markPassiveEffectsStopped &&
+          injectedProfilingHooks.markPassiveEffectsStopped();
+        commitDoubleInvokeEffectsInDEV(root$jscomp$0);
+        executionContext = prevExecutionContext;
+        flushSyncWorkAcrossRoots_impl(0, !1);
+        didScheduleUpdateDuringPassiveEffects
+          ? root$jscomp$0 === rootWithPassiveNestedUpdates
+            ? nestedPassiveUpdateCount++
+            : ((nestedPassiveUpdateCount = 0),
+              (rootWithPassiveNestedUpdates = root$jscomp$0))
+          : (nestedPassiveUpdateCount = 0);
+        didScheduleUpdateDuringPassiveEffects = isFlushingPassiveEffects = !1;
+        if (
+          injectedHook &&
+          "function" === typeof injectedHook.onPostCommitFiberRoot
+        )
+          try {
+            injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);
+          } catch (err) {
+            hasLoggedError ||
+              ((hasLoggedError = !0),
+              console.error(
+                "React instrumentation encountered an error: %s",
+                err
+              ));
+          }
+        var stateNode = root$jscomp$0.current.stateNode;
+        stateNode.effectDuration = 0;
+        stateNode.passiveEffectDuration = 0;
+        return !0;
+      } finally {
+        (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = renderPriority),
+          releaseRootPooledCache(root, remainingLanes);
+      }
+    }
+    function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {
+      sourceFiber = createCapturedValueAtFiber(error, sourceFiber);
+      sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);
+      rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);
+      null !== rootFiber &&
+        (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));
+    }
+    function captureCommitPhaseError(
+      sourceFiber,
+      nearestMountedAncestor,
+      error
+    ) {
+      isRunningInsertionEffect = !1;
+      if (3 === sourceFiber.tag)
+        captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);
+      else {
+        for (; null !== nearestMountedAncestor; ) {
+          if (3 === nearestMountedAncestor.tag) {
+            captureCommitPhaseErrorOnRoot(
+              nearestMountedAncestor,
+              sourceFiber,
+              error
+            );
+            return;
+          }
+          if (1 === nearestMountedAncestor.tag) {
+            var instance = nearestMountedAncestor.stateNode;
+            if (
+              "function" ===
+                typeof nearestMountedAncestor.type.getDerivedStateFromError ||
+              ("function" === typeof instance.componentDidCatch &&
+                (null === legacyErrorBoundariesThatAlreadyFailed ||
+                  !legacyErrorBoundariesThatAlreadyFailed.has(instance)))
+            ) {
+              sourceFiber = createCapturedValueAtFiber(error, sourceFiber);
+              error = createClassErrorUpdate(2);
+              instance = enqueueUpdate(nearestMountedAncestor, error, 2);
+              null !== instance &&
+                (initializeClassErrorUpdate(
+                  error,
+                  instance,
+                  nearestMountedAncestor,
+                  sourceFiber
+                ),
+                markRootUpdated$1(instance, 2),
+                ensureRootIsScheduled(instance));
+              return;
+            }
+          }
+          nearestMountedAncestor = nearestMountedAncestor.return;
+        }
+        console.error(
+          "Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.\n\nError message:\n\n%s",
+          error
+        );
+      }
+    }
+    function attachPingListener(root, wakeable, lanes) {
+      var pingCache = root.pingCache;
+      if (null === pingCache) {
+        pingCache = root.pingCache = new PossiblyWeakMap();
+        var threadIDs = new Set();
+        pingCache.set(wakeable, threadIDs);
+      } else
+        (threadIDs = pingCache.get(wakeable)),
+          void 0 === threadIDs &&
+            ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));
+      threadIDs.has(lanes) ||
+        ((workInProgressRootDidAttachPingListener = !0),
+        threadIDs.add(lanes),
+        (pingCache = pingSuspendedRoot.bind(null, root, wakeable, lanes)),
+        isDevToolsPresent && restorePendingUpdaters(root, lanes),
+        wakeable.then(pingCache, pingCache));
+    }
+    function pingSuspendedRoot(root, wakeable, pingedLanes) {
+      var pingCache = root.pingCache;
+      null !== pingCache && pingCache.delete(wakeable);
+      root.pingedLanes |= root.suspendedLanes & pingedLanes;
+      root.warmLanes &= ~pingedLanes;
+      isConcurrentActEnvironment() &&
+        null === ReactSharedInternals.actQueue &&
+        console.error(
+          "A suspended resource finished loading inside a test, but the event was not wrapped in act(...).\n\nWhen testing, code that resolves suspended data should be wrapped into act(...):\n\nact(() => {\n  /* finish loading suspended data */\n});\n/* assert on the output */\n\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act"
+        );
+      workInProgressRoot === root &&
+        (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&
+        (workInProgressRootExitStatus === RootSuspendedWithDelay ||
+        (workInProgressRootExitStatus === RootSuspended &&
+          (workInProgressRootRenderLanes & 62914560) ===
+            workInProgressRootRenderLanes &&
+          now$1() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS)
+          ? (executionContext & RenderContext) === NoContext &&
+            prepareFreshStack(root, 0)
+          : (workInProgressRootPingedLanes |= pingedLanes),
+        workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&
+          (workInProgressSuspendedRetryLanes = 0));
+      ensureRootIsScheduled(root);
+    }
+    function retryTimedOutBoundary(boundaryFiber, retryLane) {
+      0 === retryLane && (retryLane = claimNextRetryLane());
+      boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);
+      null !== boundaryFiber &&
+        (markRootUpdated$1(boundaryFiber, retryLane),
+        ensureRootIsScheduled(boundaryFiber));
+    }
+    function retryDehydratedSuspenseBoundary(boundaryFiber) {
+      var suspenseState = boundaryFiber.memoizedState,
+        retryLane = 0;
+      null !== suspenseState && (retryLane = suspenseState.retryLane);
+      retryTimedOutBoundary(boundaryFiber, retryLane);
+    }
+    function resolveRetryWakeable(boundaryFiber, wakeable) {
+      var retryLane = 0;
+      switch (boundaryFiber.tag) {
+        case 13:
+          var retryCache = boundaryFiber.stateNode;
+          var suspenseState = boundaryFiber.memoizedState;
+          null !== suspenseState && (retryLane = suspenseState.retryLane);
+          break;
+        case 19:
+          retryCache = boundaryFiber.stateNode;
+          break;
+        case 22:
+          retryCache = boundaryFiber.stateNode._retryCache;
+          break;
+        default:
+          throw Error(
+            "Pinged unknown suspense boundary type. This is probably a bug in React."
+          );
+      }
+      null !== retryCache && retryCache.delete(wakeable);
+      retryTimedOutBoundary(boundaryFiber, retryLane);
+    }
+    function recursivelyTraverseAndDoubleInvokeEffectsInDEV(
+      root$jscomp$0,
+      parentFiber,
+      isInStrictMode
+    ) {
+      if (0 !== (parentFiber.subtreeFlags & 67117056))
+        for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+          var root = root$jscomp$0,
+            fiber = parentFiber,
+            isStrictModeFiber = fiber.type === REACT_STRICT_MODE_TYPE;
+          isStrictModeFiber = isInStrictMode || isStrictModeFiber;
+          22 !== fiber.tag
+            ? fiber.flags & 67108864
+              ? isStrictModeFiber &&
+                runWithFiberInDEV(
+                  fiber,
+                  doubleInvokeEffectsOnFiber,
+                  root,
+                  fiber,
+                  (fiber.mode & NoStrictPassiveEffectsMode) === NoMode
+                )
+              : recursivelyTraverseAndDoubleInvokeEffectsInDEV(
+                  root,
+                  fiber,
+                  isStrictModeFiber
+                )
+            : null === fiber.memoizedState &&
+              (isStrictModeFiber && fiber.flags & 8192
+                ? runWithFiberInDEV(
+                    fiber,
+                    doubleInvokeEffectsOnFiber,
+                    root,
+                    fiber
+                  )
+                : fiber.subtreeFlags & 67108864 &&
+                  runWithFiberInDEV(
+                    fiber,
+                    recursivelyTraverseAndDoubleInvokeEffectsInDEV,
+                    root,
+                    fiber,
+                    isStrictModeFiber
+                  ));
+          parentFiber = parentFiber.sibling;
+        }
+    }
+    function doubleInvokeEffectsOnFiber(root, fiber) {
+      var shouldDoubleInvokePassiveEffects =
+        2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : !0;
+      setIsStrictModeForDevtools(!0);
+      try {
+        disappearLayoutEffects(fiber),
+          shouldDoubleInvokePassiveEffects && disconnectPassiveEffect(fiber),
+          reappearLayoutEffects(root, fiber.alternate, fiber, !1),
+          shouldDoubleInvokePassiveEffects &&
+            reconnectPassiveEffects(root, fiber, 0, null, !1, 0);
+      } finally {
+        setIsStrictModeForDevtools(!1);
+      }
+    }
+    function commitDoubleInvokeEffectsInDEV(root) {
+      var doubleInvokeEffects = !0;
+      root.current.mode & (StrictLegacyMode | StrictEffectsMode) ||
+        (doubleInvokeEffects = !1);
+      recursivelyTraverseAndDoubleInvokeEffectsInDEV(
+        root,
+        root.current,
+        doubleInvokeEffects
+      );
+    }
+    function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {
+      if ((executionContext & RenderContext) === NoContext) {
+        var tag = fiber.tag;
+        if (
+          3 === tag ||
+          1 === tag ||
+          0 === tag ||
+          11 === tag ||
+          14 === tag ||
+          15 === tag
+        ) {
+          tag = getComponentNameFromFiber(fiber) || "ReactComponent";
+          if (null !== didWarnStateUpdateForNotYetMountedComponent) {
+            if (didWarnStateUpdateForNotYetMountedComponent.has(tag)) return;
+            didWarnStateUpdateForNotYetMountedComponent.add(tag);
+          } else didWarnStateUpdateForNotYetMountedComponent = new Set([tag]);
+          runWithFiberInDEV(fiber, function () {
+            console.error(
+              "Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously later calls tries to update the component. Move this work to useEffect instead."
+            );
+          });
+        }
+      }
+    }
+    function restorePendingUpdaters(root, lanes) {
+      isDevToolsPresent &&
+        root.memoizedUpdaters.forEach(function (schedulingFiber) {
+          addFiberToLanesMap(root, schedulingFiber, lanes);
+        });
+    }
+    function scheduleCallback$1(priorityLevel, callback) {
+      var actQueue = ReactSharedInternals.actQueue;
+      return null !== actQueue
+        ? (actQueue.push(callback), fakeActCallbackNode$1)
+        : scheduleCallback$3(priorityLevel, callback);
+    }
+    function warnIfUpdatesNotWrappedWithActDEV(fiber) {
+      isConcurrentActEnvironment() &&
+        null === ReactSharedInternals.actQueue &&
+        runWithFiberInDEV(fiber, function () {
+          console.error(
+            "An update to %s inside a test was not wrapped in act(...).\n\nWhen testing, code that causes React state updates should be wrapped into act(...):\n\nact(() => {\n  /* fire events that update state */\n});\n/* assert on the output */\n\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act",
+            getComponentNameFromFiber(fiber)
+          );
+        });
+    }
+    function ensureRootIsScheduled(root) {
+      root !== lastScheduledRoot &&
+        null === root.next &&
+        (null === lastScheduledRoot
+          ? (firstScheduledRoot = lastScheduledRoot = root)
+          : (lastScheduledRoot = lastScheduledRoot.next = root));
+      mightHavePendingSyncWork = !0;
+      null !== ReactSharedInternals.actQueue
+        ? didScheduleMicrotask_act ||
+          ((didScheduleMicrotask_act = !0), scheduleImmediateRootScheduleTask())
+        : didScheduleMicrotask ||
+          ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());
+    }
+    function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {
+      if (!isFlushingWork && mightHavePendingSyncWork) {
+        isFlushingWork = !0;
+        do {
+          var didPerformSomeWork = !1;
+          for (var root = firstScheduledRoot; null !== root; ) {
+            if (!onlyLegacy)
+              if (0 !== syncTransitionLanes) {
+                var pendingLanes = root.pendingLanes;
+                if (0 === pendingLanes) var nextLanes = 0;
+                else {
+                  var suspendedLanes = root.suspendedLanes,
+                    pingedLanes = root.pingedLanes;
+                  nextLanes =
+                    (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;
+                  nextLanes &= pendingLanes & ~(suspendedLanes & ~pingedLanes);
+                  nextLanes =
+                    nextLanes & 201326741
+                      ? (nextLanes & 201326741) | 1
+                      : nextLanes
+                        ? nextLanes | 2
+                        : 0;
+                }
+                0 !== nextLanes &&
+                  ((didPerformSomeWork = !0),
+                  performSyncWorkOnRoot(root, nextLanes));
+              } else
+                (nextLanes = workInProgressRootRenderLanes),
+                  (nextLanes = getNextLanes(
+                    root,
+                    root === workInProgressRoot ? nextLanes : 0,
+                    null !== root.cancelPendingCommit ||
+                      root.timeoutHandle !== noTimeout
+                  )),
+                  0 === (nextLanes & 3) ||
+                    checkIfRootIsPrerendering(root, nextLanes) ||
+                    ((didPerformSomeWork = !0),
+                    performSyncWorkOnRoot(root, nextLanes));
+            root = root.next;
+          }
+        } while (didPerformSomeWork);
+        isFlushingWork = !1;
+      }
+    }
+    function processRootScheduleInImmediateTask() {
+      processRootScheduleInMicrotask();
+    }
+    function processRootScheduleInMicrotask() {
+      mightHavePendingSyncWork =
+        didScheduleMicrotask_act =
+        didScheduleMicrotask =
+          !1;
+      var syncTransitionLanes = 0;
+      0 !== currentEventTransitionLane &&
+        (shouldAttemptEagerTransition() &&
+          (syncTransitionLanes = currentEventTransitionLane),
+        (currentEventTransitionLane = 0));
+      for (
+        var currentTime = now$1(), prev = null, root = firstScheduledRoot;
+        null !== root;
+
+      ) {
+        var next = root.next,
+          nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);
+        if (0 === nextLanes)
+          (root.next = null),
+            null === prev ? (firstScheduledRoot = next) : (prev.next = next),
+            null === next && (lastScheduledRoot = prev);
+        else if (
+          ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))
+        )
+          mightHavePendingSyncWork = !0;
+        root = next;
+      }
+      flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);
+    }
+    function scheduleTaskForRootDuringMicrotask(root, currentTime) {
+      for (
+        var suspendedLanes = root.suspendedLanes,
+          pingedLanes = root.pingedLanes,
+          expirationTimes = root.expirationTimes,
+          lanes = root.pendingLanes & -62914561;
+        0 < lanes;
+
+      ) {
+        var index = 31 - clz32(lanes),
+          lane = 1 << index,
+          expirationTime = expirationTimes[index];
+        if (-1 === expirationTime) {
+          if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))
+            expirationTimes[index] = computeExpirationTime(lane, currentTime);
+        } else expirationTime <= currentTime && (root.expiredLanes |= lane);
+        lanes &= ~lane;
+      }
+      currentTime = workInProgressRoot;
+      suspendedLanes = workInProgressRootRenderLanes;
+      suspendedLanes = getNextLanes(
+        root,
+        root === currentTime ? suspendedLanes : 0,
+        null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout
+      );
+      pingedLanes = root.callbackNode;
+      if (
+        0 === suspendedLanes ||
+        (root === currentTime &&
+          (workInProgressSuspendedReason === SuspendedOnData ||
+            workInProgressSuspendedReason === SuspendedOnAction)) ||
+        null !== root.cancelPendingCommit
+      )
+        return (
+          null !== pingedLanes && cancelCallback(pingedLanes),
+          (root.callbackNode = null),
+          (root.callbackPriority = 0)
+        );
+      if (
+        0 === (suspendedLanes & 3) ||
+        checkIfRootIsPrerendering(root, suspendedLanes)
+      ) {
+        currentTime = suspendedLanes & -suspendedLanes;
+        if (
+          currentTime !== root.callbackPriority ||
+          (null !== ReactSharedInternals.actQueue &&
+            pingedLanes !== fakeActCallbackNode)
+        )
+          cancelCallback(pingedLanes);
+        else return currentTime;
+        switch (lanesToEventPriority(suspendedLanes)) {
+          case DiscreteEventPriority:
+          case ContinuousEventPriority:
+            suspendedLanes = UserBlockingPriority;
+            break;
+          case DefaultEventPriority:
+            suspendedLanes = NormalPriority$1;
+            break;
+          case IdleEventPriority:
+            suspendedLanes = IdlePriority;
+            break;
+          default:
+            suspendedLanes = NormalPriority$1;
+        }
+        pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);
+        null !== ReactSharedInternals.actQueue
+          ? (ReactSharedInternals.actQueue.push(pingedLanes),
+            (suspendedLanes = fakeActCallbackNode))
+          : (suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes));
+        root.callbackPriority = currentTime;
+        root.callbackNode = suspendedLanes;
+        return currentTime;
+      }
+      null !== pingedLanes && cancelCallback(pingedLanes);
+      root.callbackPriority = 2;
+      root.callbackNode = null;
+      return 2;
+    }
+    function performWorkOnRootViaSchedulerTask(root, didTimeout) {
+      nestedUpdateScheduled = currentUpdateIsNested = !1;
+      if (
+        pendingEffectsStatus !== NO_PENDING_EFFECTS &&
+        pendingEffectsStatus !== PENDING_PASSIVE_PHASE
+      )
+        return (root.callbackNode = null), (root.callbackPriority = 0), null;
+      var originalCallbackNode = root.callbackNode;
+      if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)
+        return null;
+      var workInProgressRootRenderLanes$jscomp$0 =
+        workInProgressRootRenderLanes;
+      workInProgressRootRenderLanes$jscomp$0 = getNextLanes(
+        root,
+        root === workInProgressRoot
+          ? workInProgressRootRenderLanes$jscomp$0
+          : 0,
+        null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout
+      );
+      if (0 === workInProgressRootRenderLanes$jscomp$0) return null;
+      performWorkOnRoot(
+        root,
+        workInProgressRootRenderLanes$jscomp$0,
+        didTimeout
+      );
+      scheduleTaskForRootDuringMicrotask(root, now$1());
+      return null != root.callbackNode &&
+        root.callbackNode === originalCallbackNode
+        ? performWorkOnRootViaSchedulerTask.bind(null, root)
+        : null;
+    }
+    function performSyncWorkOnRoot(root, lanes) {
+      if (flushPendingEffects()) return null;
+      currentUpdateIsNested = nestedUpdateScheduled;
+      nestedUpdateScheduled = !1;
+      performWorkOnRoot(root, lanes, !0);
+    }
+    function cancelCallback(callbackNode) {
+      callbackNode !== fakeActCallbackNode &&
+        null !== callbackNode &&
+        cancelCallback$1(callbackNode);
+    }
+    function scheduleImmediateRootScheduleTask() {
+      null !== ReactSharedInternals.actQueue &&
+        ReactSharedInternals.actQueue.push(function () {
+          processRootScheduleInMicrotask();
+          return null;
+        });
+      scheduleMicrotask(function () {
+        (executionContext & (RenderContext | CommitContext)) !== NoContext
+          ? scheduleCallback$3(
+              ImmediatePriority,
+              processRootScheduleInImmediateTask
+            )
+          : processRootScheduleInMicrotask();
+      });
+    }
+    function requestTransitionLane() {
+      0 === currentEventTransitionLane &&
+        (currentEventTransitionLane = claimNextTransitionLane());
+      return currentEventTransitionLane;
+    }
+    function coerceFormActionProp(actionProp) {
+      if (
+        null == actionProp ||
+        "symbol" === typeof actionProp ||
+        "boolean" === typeof actionProp
+      )
+        return null;
+      if ("function" === typeof actionProp) return actionProp;
+      checkAttributeStringCoercion(actionProp, "action");
+      return sanitizeURL("" + actionProp);
+    }
+    function createFormDataWithSubmitter(form, submitter) {
+      var temp = submitter.ownerDocument.createElement("input");
+      temp.name = submitter.name;
+      temp.value = submitter.value;
+      form.id && temp.setAttribute("form", form.id);
+      submitter.parentNode.insertBefore(temp, submitter);
+      form = new FormData(form);
+      temp.parentNode.removeChild(temp);
+      return form;
+    }
+    function extractEvents$1(
+      dispatchQueue,
+      domEventName,
+      maybeTargetInst,
+      nativeEvent,
+      nativeEventTarget
+    ) {
+      if (
+        "submit" === domEventName &&
+        maybeTargetInst &&
+        maybeTargetInst.stateNode === nativeEventTarget
+      ) {
+        var action = coerceFormActionProp(
+            (nativeEventTarget[internalPropsKey] || null).action
+          ),
+          submitter = nativeEvent.submitter;
+        submitter &&
+          ((domEventName = (domEventName = submitter[internalPropsKey] || null)
+            ? coerceFormActionProp(domEventName.formAction)
+            : submitter.getAttribute("formAction")),
+          null !== domEventName &&
+            ((action = domEventName), (submitter = null)));
+        var event = new SyntheticEvent(
+          "action",
+          "action",
+          null,
+          nativeEvent,
+          nativeEventTarget
+        );
+        dispatchQueue.push({
+          event: event,
+          listeners: [
+            {
+              instance: null,
+              listener: function () {
+                if (nativeEvent.defaultPrevented) {
+                  if (0 !== currentEventTransitionLane) {
+                    var formData = submitter
+                        ? createFormDataWithSubmitter(
+                            nativeEventTarget,
+                            submitter
+                          )
+                        : new FormData(nativeEventTarget),
+                      pendingState = {
+                        pending: !0,
+                        data: formData,
+                        method: nativeEventTarget.method,
+                        action: action
+                      };
+                    Object.freeze(pendingState);
+                    startHostTransition(
+                      maybeTargetInst,
+                      pendingState,
+                      null,
+                      formData
+                    );
+                  }
+                } else
+                  "function" === typeof action &&
+                    (event.preventDefault(),
+                    (formData = submitter
+                      ? createFormDataWithSubmitter(
+                          nativeEventTarget,
+                          submitter
+                        )
+                      : new FormData(nativeEventTarget)),
+                    (pendingState = {
+                      pending: !0,
+                      data: formData,
+                      method: nativeEventTarget.method,
+                      action: action
+                    }),
+                    Object.freeze(pendingState),
+                    startHostTransition(
+                      maybeTargetInst,
+                      pendingState,
+                      action,
+                      formData
+                    ));
+              },
+              currentTarget: nativeEventTarget
+            }
+          ]
+        });
+      }
+    }
+    function executeDispatch(event, listener, currentTarget) {
+      event.currentTarget = currentTarget;
+      try {
+        listener(event);
+      } catch (error) {
+        reportGlobalError(error);
+      }
+      event.currentTarget = null;
+    }
+    function processDispatchQueue(dispatchQueue, eventSystemFlags) {
+      eventSystemFlags = 0 !== (eventSystemFlags & 4);
+      for (var i = 0; i < dispatchQueue.length; i++) {
+        var _dispatchQueue$i = dispatchQueue[i];
+        a: {
+          var previousInstance = void 0,
+            event = _dispatchQueue$i.event;
+          _dispatchQueue$i = _dispatchQueue$i.listeners;
+          if (eventSystemFlags)
+            for (
+              var i$jscomp$0 = _dispatchQueue$i.length - 1;
+              0 <= i$jscomp$0;
+              i$jscomp$0--
+            ) {
+              var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],
+                instance = _dispatchListeners$i.instance,
+                currentTarget = _dispatchListeners$i.currentTarget;
+              _dispatchListeners$i = _dispatchListeners$i.listener;
+              if (instance !== previousInstance && event.isPropagationStopped())
+                break a;
+              null !== instance
+                ? runWithFiberInDEV(
+                    instance,
+                    executeDispatch,
+                    event,
+                    _dispatchListeners$i,
+                    currentTarget
+                  )
+                : executeDispatch(event, _dispatchListeners$i, currentTarget);
+              previousInstance = instance;
+            }
+          else
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < _dispatchQueue$i.length;
+              i$jscomp$0++
+            ) {
+              _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];
+              instance = _dispatchListeners$i.instance;
+              currentTarget = _dispatchListeners$i.currentTarget;
+              _dispatchListeners$i = _dispatchListeners$i.listener;
+              if (instance !== previousInstance && event.isPropagationStopped())
+                break a;
+              null !== instance
+                ? runWithFiberInDEV(
+                    instance,
+                    executeDispatch,
+                    event,
+                    _dispatchListeners$i,
+                    currentTarget
+                  )
+                : executeDispatch(event, _dispatchListeners$i, currentTarget);
+              previousInstance = instance;
+            }
+        }
+      }
+    }
+    function listenToNonDelegatedEvent(domEventName, targetElement) {
+      nonDelegatedEvents.has(domEventName) ||
+        console.error(
+          'Did not expect a listenToNonDelegatedEvent() call for "%s". This is a bug in React. Please file an issue.',
+          domEventName
+        );
+      var listenerSet = targetElement[internalEventHandlersKey];
+      void 0 === listenerSet &&
+        (listenerSet = targetElement[internalEventHandlersKey] = new Set());
+      var listenerSetKey = domEventName + "__bubble";
+      listenerSet.has(listenerSetKey) ||
+        (addTrappedEventListener(targetElement, domEventName, 2, !1),
+        listenerSet.add(listenerSetKey));
+    }
+    function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {
+      nonDelegatedEvents.has(domEventName) &&
+        !isCapturePhaseListener &&
+        console.error(
+          'Did not expect a listenToNativeEvent() call for "%s" in the bubble phase. This is a bug in React. Please file an issue.',
+          domEventName
+        );
+      var eventSystemFlags = 0;
+      isCapturePhaseListener && (eventSystemFlags |= 4);
+      addTrappedEventListener(
+        target,
+        domEventName,
+        eventSystemFlags,
+        isCapturePhaseListener
+      );
+    }
+    function listenToAllSupportedEvents(rootContainerElement) {
+      if (!rootContainerElement[listeningMarker]) {
+        rootContainerElement[listeningMarker] = !0;
+        allNativeEvents.forEach(function (domEventName) {
+          "selectionchange" !== domEventName &&
+            (nonDelegatedEvents.has(domEventName) ||
+              listenToNativeEvent(domEventName, !1, rootContainerElement),
+            listenToNativeEvent(domEventName, !0, rootContainerElement));
+        });
+        var ownerDocument =
+          9 === rootContainerElement.nodeType
+            ? rootContainerElement
+            : rootContainerElement.ownerDocument;
+        null === ownerDocument ||
+          ownerDocument[listeningMarker] ||
+          ((ownerDocument[listeningMarker] = !0),
+          listenToNativeEvent("selectionchange", !1, ownerDocument));
+      }
+    }
+    function addTrappedEventListener(
+      targetContainer,
+      domEventName,
+      eventSystemFlags,
+      isCapturePhaseListener
+    ) {
+      switch (getEventPriority(domEventName)) {
+        case DiscreteEventPriority:
+          var listenerWrapper = dispatchDiscreteEvent;
+          break;
+        case ContinuousEventPriority:
+          listenerWrapper = dispatchContinuousEvent;
+          break;
+        default:
+          listenerWrapper = dispatchEvent;
+      }
+      eventSystemFlags = listenerWrapper.bind(
+        null,
+        domEventName,
+        eventSystemFlags,
+        targetContainer
+      );
+      listenerWrapper = void 0;
+      !passiveBrowserEventsSupported ||
+        ("touchstart" !== domEventName &&
+          "touchmove" !== domEventName &&
+          "wheel" !== domEventName) ||
+        (listenerWrapper = !0);
+      isCapturePhaseListener
+        ? void 0 !== listenerWrapper
+          ? targetContainer.addEventListener(domEventName, eventSystemFlags, {
+              capture: !0,
+              passive: listenerWrapper
+            })
+          : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)
+        : void 0 !== listenerWrapper
+          ? targetContainer.addEventListener(domEventName, eventSystemFlags, {
+              passive: listenerWrapper
+            })
+          : targetContainer.addEventListener(
+              domEventName,
+              eventSystemFlags,
+              !1
+            );
+    }
+    function dispatchEventForPluginEventSystem(
+      domEventName,
+      eventSystemFlags,
+      nativeEvent,
+      targetInst$jscomp$0,
+      targetContainer
+    ) {
+      var ancestorInst = targetInst$jscomp$0;
+      if (
+        0 === (eventSystemFlags & 1) &&
+        0 === (eventSystemFlags & 2) &&
+        null !== targetInst$jscomp$0
+      )
+        a: for (;;) {
+          if (null === targetInst$jscomp$0) return;
+          var nodeTag = targetInst$jscomp$0.tag;
+          if (3 === nodeTag || 4 === nodeTag) {
+            var container = targetInst$jscomp$0.stateNode.containerInfo;
+            if (container === targetContainer) break;
+            if (4 === nodeTag)
+              for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {
+                var grandTag = nodeTag.tag;
+                if (
+                  (3 === grandTag || 4 === grandTag) &&
+                  nodeTag.stateNode.containerInfo === targetContainer
+                )
+                  return;
+                nodeTag = nodeTag.return;
+              }
+            for (; null !== container; ) {
+              nodeTag = getClosestInstanceFromNode(container);
+              if (null === nodeTag) return;
+              grandTag = nodeTag.tag;
+              if (
+                5 === grandTag ||
+                6 === grandTag ||
+                26 === grandTag ||
+                27 === grandTag
+              ) {
+                targetInst$jscomp$0 = ancestorInst = nodeTag;
+                continue a;
+              }
+              container = container.parentNode;
+            }
+          }
+          targetInst$jscomp$0 = targetInst$jscomp$0.return;
+        }
+      batchedUpdates$1(function () {
+        var targetInst = ancestorInst,
+          nativeEventTarget = getEventTarget(nativeEvent),
+          dispatchQueue = [];
+        a: {
+          var reactName = topLevelEventsToReactNames.get(domEventName);
+          if (void 0 !== reactName) {
+            var SyntheticEventCtor = SyntheticEvent,
+              reactEventType = domEventName;
+            switch (domEventName) {
+              case "keypress":
+                if (0 === getEventCharCode(nativeEvent)) break a;
+              case "keydown":
+              case "keyup":
+                SyntheticEventCtor = SyntheticKeyboardEvent;
+                break;
+              case "focusin":
+                reactEventType = "focus";
+                SyntheticEventCtor = SyntheticFocusEvent;
+                break;
+              case "focusout":
+                reactEventType = "blur";
+                SyntheticEventCtor = SyntheticFocusEvent;
+                break;
+              case "beforeblur":
+              case "afterblur":
+                SyntheticEventCtor = SyntheticFocusEvent;
+                break;
+              case "click":
+                if (2 === nativeEvent.button) break a;
+              case "auxclick":
+              case "dblclick":
+              case "mousedown":
+              case "mousemove":
+              case "mouseup":
+              case "mouseout":
+              case "mouseover":
+              case "contextmenu":
+                SyntheticEventCtor = SyntheticMouseEvent;
+                break;
+              case "drag":
+              case "dragend":
+              case "dragenter":
+              case "dragexit":
+              case "dragleave":
+              case "dragover":
+              case "dragstart":
+              case "drop":
+                SyntheticEventCtor = SyntheticDragEvent;
+                break;
+              case "touchcancel":
+              case "touchend":
+              case "touchmove":
+              case "touchstart":
+                SyntheticEventCtor = SyntheticTouchEvent;
+                break;
+              case ANIMATION_END:
+              case ANIMATION_ITERATION:
+              case ANIMATION_START:
+                SyntheticEventCtor = SyntheticAnimationEvent;
+                break;
+              case TRANSITION_END:
+                SyntheticEventCtor = SyntheticTransitionEvent;
+                break;
+              case "scroll":
+              case "scrollend":
+                SyntheticEventCtor = SyntheticUIEvent;
+                break;
+              case "wheel":
+                SyntheticEventCtor = SyntheticWheelEvent;
+                break;
+              case "copy":
+              case "cut":
+              case "paste":
+                SyntheticEventCtor = SyntheticClipboardEvent;
+                break;
+              case "gotpointercapture":
+              case "lostpointercapture":
+              case "pointercancel":
+              case "pointerdown":
+              case "pointermove":
+              case "pointerout":
+              case "pointerover":
+              case "pointerup":
+                SyntheticEventCtor = SyntheticPointerEvent;
+                break;
+              case "toggle":
+              case "beforetoggle":
+                SyntheticEventCtor = SyntheticToggleEvent;
+            }
+            var inCapturePhase = 0 !== (eventSystemFlags & 4),
+              accumulateTargetOnly =
+                !inCapturePhase &&
+                ("scroll" === domEventName || "scrollend" === domEventName),
+              reactEventName = inCapturePhase
+                ? null !== reactName
+                  ? reactName + "Capture"
+                  : null
+                : reactName;
+            inCapturePhase = [];
+            for (
+              var instance = targetInst, lastHostComponent;
+              null !== instance;
+
+            ) {
+              var _instance2 = instance;
+              lastHostComponent = _instance2.stateNode;
+              _instance2 = _instance2.tag;
+              (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||
+                null === lastHostComponent ||
+                null === reactEventName ||
+                ((_instance2 = getListener(instance, reactEventName)),
+                null != _instance2 &&
+                  inCapturePhase.push(
+                    createDispatchListener(
+                      instance,
+                      _instance2,
+                      lastHostComponent
+                    )
+                  ));
+              if (accumulateTargetOnly) break;
+              instance = instance.return;
+            }
+            0 < inCapturePhase.length &&
+              ((reactName = new SyntheticEventCtor(
+                reactName,
+                reactEventType,
+                null,
+                nativeEvent,
+                nativeEventTarget
+              )),
+              dispatchQueue.push({
+                event: reactName,
+                listeners: inCapturePhase
+              }));
+          }
+        }
+        if (0 === (eventSystemFlags & 7)) {
+          a: {
+            reactName =
+              "mouseover" === domEventName || "pointerover" === domEventName;
+            SyntheticEventCtor =
+              "mouseout" === domEventName || "pointerout" === domEventName;
+            if (
+              reactName &&
+              nativeEvent !== currentReplayingEvent &&
+              (reactEventType =
+                nativeEvent.relatedTarget || nativeEvent.fromElement) &&
+              (getClosestInstanceFromNode(reactEventType) ||
+                reactEventType[internalContainerInstanceKey])
+            )
+              break a;
+            if (SyntheticEventCtor || reactName) {
+              reactName =
+                nativeEventTarget.window === nativeEventTarget
+                  ? nativeEventTarget
+                  : (reactName = nativeEventTarget.ownerDocument)
+                    ? reactName.defaultView || reactName.parentWindow
+                    : window;
+              if (SyntheticEventCtor) {
+                if (
+                  ((reactEventType =
+                    nativeEvent.relatedTarget || nativeEvent.toElement),
+                  (SyntheticEventCtor = targetInst),
+                  (reactEventType = reactEventType
+                    ? getClosestInstanceFromNode(reactEventType)
+                    : null),
+                  null !== reactEventType &&
+                    ((accumulateTargetOnly =
+                      getNearestMountedFiber(reactEventType)),
+                    (inCapturePhase = reactEventType.tag),
+                    reactEventType !== accumulateTargetOnly ||
+                      (5 !== inCapturePhase &&
+                        27 !== inCapturePhase &&
+                        6 !== inCapturePhase)))
+                )
+                  reactEventType = null;
+              } else (SyntheticEventCtor = null), (reactEventType = targetInst);
+              if (SyntheticEventCtor !== reactEventType) {
+                inCapturePhase = SyntheticMouseEvent;
+                _instance2 = "onMouseLeave";
+                reactEventName = "onMouseEnter";
+                instance = "mouse";
+                if (
+                  "pointerout" === domEventName ||
+                  "pointerover" === domEventName
+                )
+                  (inCapturePhase = SyntheticPointerEvent),
+                    (_instance2 = "onPointerLeave"),
+                    (reactEventName = "onPointerEnter"),
+                    (instance = "pointer");
+                accumulateTargetOnly =
+                  null == SyntheticEventCtor
+                    ? reactName
+                    : getNodeFromInstance(SyntheticEventCtor);
+                lastHostComponent =
+                  null == reactEventType
+                    ? reactName
+                    : getNodeFromInstance(reactEventType);
+                reactName = new inCapturePhase(
+                  _instance2,
+                  instance + "leave",
+                  SyntheticEventCtor,
+                  nativeEvent,
+                  nativeEventTarget
+                );
+                reactName.target = accumulateTargetOnly;
+                reactName.relatedTarget = lastHostComponent;
+                _instance2 = null;
+                getClosestInstanceFromNode(nativeEventTarget) === targetInst &&
+                  ((inCapturePhase = new inCapturePhase(
+                    reactEventName,
+                    instance + "enter",
+                    reactEventType,
+                    nativeEvent,
+                    nativeEventTarget
+                  )),
+                  (inCapturePhase.target = lastHostComponent),
+                  (inCapturePhase.relatedTarget = accumulateTargetOnly),
+                  (_instance2 = inCapturePhase));
+                accumulateTargetOnly = _instance2;
+                if (SyntheticEventCtor && reactEventType)
+                  b: {
+                    inCapturePhase = SyntheticEventCtor;
+                    reactEventName = reactEventType;
+                    instance = 0;
+                    for (
+                      lastHostComponent = inCapturePhase;
+                      lastHostComponent;
+                      lastHostComponent = getParent(lastHostComponent)
+                    )
+                      instance++;
+                    lastHostComponent = 0;
+                    for (
+                      _instance2 = reactEventName;
+                      _instance2;
+                      _instance2 = getParent(_instance2)
+                    )
+                      lastHostComponent++;
+                    for (; 0 < instance - lastHostComponent; )
+                      (inCapturePhase = getParent(inCapturePhase)), instance--;
+                    for (; 0 < lastHostComponent - instance; )
+                      (reactEventName = getParent(reactEventName)),
+                        lastHostComponent--;
+                    for (; instance--; ) {
+                      if (
+                        inCapturePhase === reactEventName ||
+                        (null !== reactEventName &&
+                          inCapturePhase === reactEventName.alternate)
+                      )
+                        break b;
+                      inCapturePhase = getParent(inCapturePhase);
+                      reactEventName = getParent(reactEventName);
+                    }
+                    inCapturePhase = null;
+                  }
+                else inCapturePhase = null;
+                null !== SyntheticEventCtor &&
+                  accumulateEnterLeaveListenersForEvent(
+                    dispatchQueue,
+                    reactName,
+                    SyntheticEventCtor,
+                    inCapturePhase,
+                    !1
+                  );
+                null !== reactEventType &&
+                  null !== accumulateTargetOnly &&
+                  accumulateEnterLeaveListenersForEvent(
+                    dispatchQueue,
+                    accumulateTargetOnly,
+                    reactEventType,
+                    inCapturePhase,
+                    !0
+                  );
+              }
+            }
+          }
+          a: {
+            reactName = targetInst ? getNodeFromInstance(targetInst) : window;
+            SyntheticEventCtor =
+              reactName.nodeName && reactName.nodeName.toLowerCase();
+            if (
+              "select" === SyntheticEventCtor ||
+              ("input" === SyntheticEventCtor && "file" === reactName.type)
+            )
+              var getTargetInstFunc = getTargetInstForChangeEvent;
+            else if (isTextInputElement(reactName))
+              if (isInputEventSupported)
+                getTargetInstFunc = getTargetInstForInputOrChangeEvent;
+              else {
+                getTargetInstFunc = getTargetInstForInputEventPolyfill;
+                var handleEventFunc = handleEventsForInputEventPolyfill;
+              }
+            else
+              (SyntheticEventCtor = reactName.nodeName),
+                !SyntheticEventCtor ||
+                "input" !== SyntheticEventCtor.toLowerCase() ||
+                ("checkbox" !== reactName.type && "radio" !== reactName.type)
+                  ? targetInst &&
+                    isCustomElement(targetInst.elementType) &&
+                    (getTargetInstFunc = getTargetInstForChangeEvent)
+                  : (getTargetInstFunc = getTargetInstForClickEvent);
+            if (
+              getTargetInstFunc &&
+              (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))
+            ) {
+              createAndAccumulateChangeEvent(
+                dispatchQueue,
+                getTargetInstFunc,
+                nativeEvent,
+                nativeEventTarget
+              );
+              break a;
+            }
+            handleEventFunc &&
+              handleEventFunc(domEventName, reactName, targetInst);
+            "focusout" === domEventName &&
+              targetInst &&
+              "number" === reactName.type &&
+              null != targetInst.memoizedProps.value &&
+              setDefaultValue(reactName, "number", reactName.value);
+          }
+          handleEventFunc = targetInst
+            ? getNodeFromInstance(targetInst)
+            : window;
+          switch (domEventName) {
+            case "focusin":
+              if (
+                isTextInputElement(handleEventFunc) ||
+                "true" === handleEventFunc.contentEditable
+              )
+                (activeElement = handleEventFunc),
+                  (activeElementInst = targetInst),
+                  (lastSelection = null);
+              break;
+            case "focusout":
+              lastSelection = activeElementInst = activeElement = null;
+              break;
+            case "mousedown":
+              mouseDown = !0;
+              break;
+            case "contextmenu":
+            case "mouseup":
+            case "dragend":
+              mouseDown = !1;
+              constructSelectEvent(
+                dispatchQueue,
+                nativeEvent,
+                nativeEventTarget
+              );
+              break;
+            case "selectionchange":
+              if (skipSelectionChangeEvent) break;
+            case "keydown":
+            case "keyup":
+              constructSelectEvent(
+                dispatchQueue,
+                nativeEvent,
+                nativeEventTarget
+              );
+          }
+          var fallbackData;
+          if (canUseCompositionEvent)
+            b: {
+              switch (domEventName) {
+                case "compositionstart":
+                  var eventType = "onCompositionStart";
+                  break b;
+                case "compositionend":
+                  eventType = "onCompositionEnd";
+                  break b;
+                case "compositionupdate":
+                  eventType = "onCompositionUpdate";
+                  break b;
+              }
+              eventType = void 0;
+            }
+          else
+            isComposing
+              ? isFallbackCompositionEnd(domEventName, nativeEvent) &&
+                (eventType = "onCompositionEnd")
+              : "keydown" === domEventName &&
+                nativeEvent.keyCode === START_KEYCODE &&
+                (eventType = "onCompositionStart");
+          eventType &&
+            (useFallbackCompositionData &&
+              "ko" !== nativeEvent.locale &&
+              (isComposing || "onCompositionStart" !== eventType
+                ? "onCompositionEnd" === eventType &&
+                  isComposing &&
+                  (fallbackData = getData())
+                : ((root = nativeEventTarget),
+                  (startText = "value" in root ? root.value : root.textContent),
+                  (isComposing = !0))),
+            (handleEventFunc = accumulateTwoPhaseListeners(
+              targetInst,
+              eventType
+            )),
+            0 < handleEventFunc.length &&
+              ((eventType = new SyntheticCompositionEvent(
+                eventType,
+                domEventName,
+                null,
+                nativeEvent,
+                nativeEventTarget
+              )),
+              dispatchQueue.push({
+                event: eventType,
+                listeners: handleEventFunc
+              }),
+              fallbackData
+                ? (eventType.data = fallbackData)
+                : ((fallbackData = getDataFromCustomEvent(nativeEvent)),
+                  null !== fallbackData && (eventType.data = fallbackData))));
+          if (
+            (fallbackData = canUseTextInputEvent
+              ? getNativeBeforeInputChars(domEventName, nativeEvent)
+              : getFallbackBeforeInputChars(domEventName, nativeEvent))
+          )
+            (eventType = accumulateTwoPhaseListeners(
+              targetInst,
+              "onBeforeInput"
+            )),
+              0 < eventType.length &&
+                ((handleEventFunc = new SyntheticInputEvent(
+                  "onBeforeInput",
+                  "beforeinput",
+                  null,
+                  nativeEvent,
+                  nativeEventTarget
+                )),
+                dispatchQueue.push({
+                  event: handleEventFunc,
+                  listeners: eventType
+                }),
+                (handleEventFunc.data = fallbackData));
+          extractEvents$1(
+            dispatchQueue,
+            domEventName,
+            targetInst,
+            nativeEvent,
+            nativeEventTarget
+          );
+        }
+        processDispatchQueue(dispatchQueue, eventSystemFlags);
+      });
+    }
+    function createDispatchListener(instance, listener, currentTarget) {
+      return {
+        instance: instance,
+        listener: listener,
+        currentTarget: currentTarget
+      };
+    }
+    function accumulateTwoPhaseListeners(targetFiber, reactName) {
+      for (
+        var captureName = reactName + "Capture", listeners = [];
+        null !== targetFiber;
+
+      ) {
+        var _instance3 = targetFiber,
+          stateNode = _instance3.stateNode;
+        _instance3 = _instance3.tag;
+        (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||
+          null === stateNode ||
+          ((_instance3 = getListener(targetFiber, captureName)),
+          null != _instance3 &&
+            listeners.unshift(
+              createDispatchListener(targetFiber, _instance3, stateNode)
+            ),
+          (_instance3 = getListener(targetFiber, reactName)),
+          null != _instance3 &&
+            listeners.push(
+              createDispatchListener(targetFiber, _instance3, stateNode)
+            ));
+        if (3 === targetFiber.tag) return listeners;
+        targetFiber = targetFiber.return;
+      }
+      return [];
+    }
+    function getParent(inst) {
+      if (null === inst) return null;
+      do inst = inst.return;
+      while (inst && 5 !== inst.tag && 27 !== inst.tag);
+      return inst ? inst : null;
+    }
+    function accumulateEnterLeaveListenersForEvent(
+      dispatchQueue,
+      event,
+      target,
+      common,
+      inCapturePhase
+    ) {
+      for (
+        var registrationName = event._reactName, listeners = [];
+        null !== target && target !== common;
+
+      ) {
+        var _instance4 = target,
+          alternate = _instance4.alternate,
+          stateNode = _instance4.stateNode;
+        _instance4 = _instance4.tag;
+        if (null !== alternate && alternate === common) break;
+        (5 !== _instance4 && 26 !== _instance4 && 27 !== _instance4) ||
+          null === stateNode ||
+          ((alternate = stateNode),
+          inCapturePhase
+            ? ((stateNode = getListener(target, registrationName)),
+              null != stateNode &&
+                listeners.unshift(
+                  createDispatchListener(target, stateNode, alternate)
+                ))
+            : inCapturePhase ||
+              ((stateNode = getListener(target, registrationName)),
+              null != stateNode &&
+                listeners.push(
+                  createDispatchListener(target, stateNode, alternate)
+                )));
+        target = target.return;
+      }
+      0 !== listeners.length &&
+        dispatchQueue.push({ event: event, listeners: listeners });
+    }
+    function validatePropertiesInDevelopment(type, props) {
+      validateProperties$2(type, props);
+      ("input" !== type && "textarea" !== type && "select" !== type) ||
+        null == props ||
+        null !== props.value ||
+        didWarnValueNull ||
+        ((didWarnValueNull = !0),
+        "select" === type && props.multiple
+          ? console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.",
+              type
+            )
+          : console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.",
+              type
+            ));
+      var eventRegistry = {
+        registrationNameDependencies: registrationNameDependencies,
+        possibleRegistrationNames: possibleRegistrationNames
+      };
+      isCustomElement(type) ||
+        "string" === typeof props.is ||
+        warnUnknownProperties(type, props, eventRegistry);
+      props.contentEditable &&
+        !props.suppressContentEditableWarning &&
+        null != props.children &&
+        console.error(
+          "A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."
+        );
+    }
+    function warnForPropDifference(
+      propName,
+      serverValue,
+      clientValue,
+      serverDifferences
+    ) {
+      serverValue !== clientValue &&
+        ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),
+        normalizeMarkupForTextOrAttribute(serverValue) !== clientValue &&
+          (serverDifferences[propName] = serverValue));
+    }
+    function warnForExtraAttributes(
+      domElement,
+      attributeNames,
+      serverDifferences
+    ) {
+      attributeNames.forEach(function (attributeName) {
+        serverDifferences[getPropNameFromAttributeName(attributeName)] =
+          "style" === attributeName
+            ? getStylesObjectFromElement(domElement)
+            : domElement.getAttribute(attributeName);
+      });
+    }
+    function warnForInvalidEventListener(registrationName, listener) {
+      !1 === listener
+        ? console.error(
+            "Expected `%s` listener to be a function, instead got `false`.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.",
+            registrationName,
+            registrationName,
+            registrationName
+          )
+        : console.error(
+            "Expected `%s` listener to be a function, instead got a value of `%s` type.",
+            registrationName,
+            typeof listener
+          );
+    }
+    function normalizeHTML(parent, html) {
+      parent =
+        parent.namespaceURI === MATH_NAMESPACE ||
+        parent.namespaceURI === SVG_NAMESPACE
+          ? parent.ownerDocument.createElementNS(
+              parent.namespaceURI,
+              parent.tagName
+            )
+          : parent.ownerDocument.createElement(parent.tagName);
+      parent.innerHTML = html;
+      return parent.innerHTML;
+    }
+    function normalizeMarkupForTextOrAttribute(markup) {
+      willCoercionThrow(markup) &&
+        (console.error(
+          "The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.",
+          typeName(markup)
+        ),
+        testStringCoercion(markup));
+      return ("string" === typeof markup ? markup : "" + markup)
+        .replace(NORMALIZE_NEWLINES_REGEX, "\n")
+        .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, "");
+    }
+    function checkForUnmatchedText(serverText, clientText) {
+      clientText = normalizeMarkupForTextOrAttribute(clientText);
+      return normalizeMarkupForTextOrAttribute(serverText) === clientText
+        ? !0
+        : !1;
+    }
+    function noop$1() {}
+    function setProp(domElement, tag, key, value, props, prevValue) {
+      switch (key) {
+        case "children":
+          if ("string" === typeof value)
+            validateTextNesting(value, tag, !1),
+              "body" === tag ||
+                ("textarea" === tag && "" === value) ||
+                setTextContent(domElement, value);
+          else if ("number" === typeof value || "bigint" === typeof value)
+            validateTextNesting("" + value, tag, !1),
+              "body" !== tag && setTextContent(domElement, "" + value);
+          break;
+        case "className":
+          setValueForKnownAttribute(domElement, "class", value);
+          break;
+        case "tabIndex":
+          setValueForKnownAttribute(domElement, "tabindex", value);
+          break;
+        case "dir":
+        case "role":
+        case "viewBox":
+        case "width":
+        case "height":
+          setValueForKnownAttribute(domElement, key, value);
+          break;
+        case "style":
+          setValueForStyles(domElement, value, prevValue);
+          break;
+        case "data":
+          if ("object" !== tag) {
+            setValueForKnownAttribute(domElement, "data", value);
+            break;
+          }
+        case "src":
+        case "href":
+          if ("" === value && ("a" !== tag || "href" !== key)) {
+            "src" === key
+              ? console.error(
+                  'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  key,
+                  key
+                )
+              : console.error(
+                  'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  key,
+                  key
+                );
+            domElement.removeAttribute(key);
+            break;
+          }
+          if (
+            null == value ||
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          ) {
+            domElement.removeAttribute(key);
+            break;
+          }
+          checkAttributeStringCoercion(value, key);
+          value = sanitizeURL("" + value);
+          domElement.setAttribute(key, value);
+          break;
+        case "action":
+        case "formAction":
+          null != value &&
+            ("form" === tag
+              ? "formAction" === key
+                ? console.error(
+                    "You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>."
+                  )
+                : "function" === typeof value &&
+                  ((null == props.encType && null == props.method) ||
+                    didWarnFormActionMethod ||
+                    ((didWarnFormActionMethod = !0),
+                    console.error(
+                      "Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden."
+                    )),
+                  null == props.target ||
+                    didWarnFormActionTarget ||
+                    ((didWarnFormActionTarget = !0),
+                    console.error(
+                      "Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window."
+                    )))
+              : "input" === tag || "button" === tag
+                ? "action" === key
+                  ? console.error(
+                      "You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>."
+                    )
+                  : "input" !== tag ||
+                      "submit" === props.type ||
+                      "image" === props.type ||
+                      didWarnFormActionType
+                    ? "button" !== tag ||
+                      null == props.type ||
+                      "submit" === props.type ||
+                      didWarnFormActionType
+                      ? "function" === typeof value &&
+                        (null == props.name ||
+                          didWarnFormActionName ||
+                          ((didWarnFormActionName = !0),
+                          console.error(
+                            'Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'
+                          )),
+                        (null == props.formEncType &&
+                          null == props.formMethod) ||
+                          didWarnFormActionMethod ||
+                          ((didWarnFormActionMethod = !0),
+                          console.error(
+                            "Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden."
+                          )),
+                        null == props.formTarget ||
+                          didWarnFormActionTarget ||
+                          ((didWarnFormActionTarget = !0),
+                          console.error(
+                            "Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window."
+                          )))
+                      : ((didWarnFormActionType = !0),
+                        console.error(
+                          'A button can only specify a formAction along with type="submit" or no type.'
+                        ))
+                    : ((didWarnFormActionType = !0),
+                      console.error(
+                        'An input can only specify a formAction along with type="submit" or type="image".'
+                      ))
+                : "action" === key
+                  ? console.error(
+                      "You can only pass the action prop to <form>."
+                    )
+                  : console.error(
+                      "You can only pass the formAction prop to <input> or <button>."
+                    ));
+          if ("function" === typeof value) {
+            domElement.setAttribute(
+              key,
+              "javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')"
+            );
+            break;
+          } else
+            "function" === typeof prevValue &&
+              ("formAction" === key
+                ? ("input" !== tag &&
+                    setProp(domElement, tag, "name", props.name, props, null),
+                  setProp(
+                    domElement,
+                    tag,
+                    "formEncType",
+                    props.formEncType,
+                    props,
+                    null
+                  ),
+                  setProp(
+                    domElement,
+                    tag,
+                    "formMethod",
+                    props.formMethod,
+                    props,
+                    null
+                  ),
+                  setProp(
+                    domElement,
+                    tag,
+                    "formTarget",
+                    props.formTarget,
+                    props,
+                    null
+                  ))
+                : (setProp(
+                    domElement,
+                    tag,
+                    "encType",
+                    props.encType,
+                    props,
+                    null
+                  ),
+                  setProp(domElement, tag, "method", props.method, props, null),
+                  setProp(
+                    domElement,
+                    tag,
+                    "target",
+                    props.target,
+                    props,
+                    null
+                  )));
+          if (
+            null == value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          ) {
+            domElement.removeAttribute(key);
+            break;
+          }
+          checkAttributeStringCoercion(value, key);
+          value = sanitizeURL("" + value);
+          domElement.setAttribute(key, value);
+          break;
+        case "onClick":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            (domElement.onclick = noop$1));
+          break;
+        case "onScroll":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            listenToNonDelegatedEvent("scroll", domElement));
+          break;
+        case "onScrollEnd":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            listenToNonDelegatedEvent("scrollend", domElement));
+          break;
+        case "dangerouslySetInnerHTML":
+          if (null != value) {
+            if ("object" !== typeof value || !("__html" in value))
+              throw Error(
+                "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+              );
+            key = value.__html;
+            if (null != key) {
+              if (null != props.children)
+                throw Error(
+                  "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+                );
+              domElement.innerHTML = key;
+            }
+          }
+          break;
+        case "multiple":
+          domElement.multiple =
+            value && "function" !== typeof value && "symbol" !== typeof value;
+          break;
+        case "muted":
+          domElement.muted =
+            value && "function" !== typeof value && "symbol" !== typeof value;
+          break;
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "ref":
+          break;
+        case "autoFocus":
+          break;
+        case "xlinkHref":
+          if (
+            null == value ||
+            "function" === typeof value ||
+            "boolean" === typeof value ||
+            "symbol" === typeof value
+          ) {
+            domElement.removeAttribute("xlink:href");
+            break;
+          }
+          checkAttributeStringCoercion(value, key);
+          key = sanitizeURL("" + value);
+          domElement.setAttributeNS(xlinkNamespace, "xlink:href", key);
+          break;
+        case "contentEditable":
+        case "spellCheck":
+        case "draggable":
+        case "value":
+        case "autoReverse":
+        case "externalResourcesRequired":
+        case "focusable":
+        case "preserveAlpha":
+          null != value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value
+            ? (checkAttributeStringCoercion(value, key),
+              domElement.setAttribute(key, "" + value))
+            : domElement.removeAttribute(key);
+          break;
+        case "inert":
+          "" !== value ||
+            didWarnForNewBooleanPropsWithEmptyValue[key] ||
+            ((didWarnForNewBooleanPropsWithEmptyValue[key] = !0),
+            console.error(
+              "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+              key
+            ));
+        case "allowFullScreen":
+        case "async":
+        case "autoPlay":
+        case "controls":
+        case "default":
+        case "defer":
+        case "disabled":
+        case "disablePictureInPicture":
+        case "disableRemotePlayback":
+        case "formNoValidate":
+        case "hidden":
+        case "loop":
+        case "noModule":
+        case "noValidate":
+        case "open":
+        case "playsInline":
+        case "readOnly":
+        case "required":
+        case "reversed":
+        case "scoped":
+        case "seamless":
+        case "itemScope":
+          value && "function" !== typeof value && "symbol" !== typeof value
+            ? domElement.setAttribute(key, "")
+            : domElement.removeAttribute(key);
+          break;
+        case "capture":
+        case "download":
+          !0 === value
+            ? domElement.setAttribute(key, "")
+            : !1 !== value &&
+                null != value &&
+                "function" !== typeof value &&
+                "symbol" !== typeof value
+              ? (checkAttributeStringCoercion(value, key),
+                domElement.setAttribute(key, value))
+              : domElement.removeAttribute(key);
+          break;
+        case "cols":
+        case "rows":
+        case "size":
+        case "span":
+          null != value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value &&
+          !isNaN(value) &&
+          1 <= value
+            ? (checkAttributeStringCoercion(value, key),
+              domElement.setAttribute(key, value))
+            : domElement.removeAttribute(key);
+          break;
+        case "rowSpan":
+        case "start":
+          null == value ||
+          "function" === typeof value ||
+          "symbol" === typeof value ||
+          isNaN(value)
+            ? domElement.removeAttribute(key)
+            : (checkAttributeStringCoercion(value, key),
+              domElement.setAttribute(key, value));
+          break;
+        case "popover":
+          listenToNonDelegatedEvent("beforetoggle", domElement);
+          listenToNonDelegatedEvent("toggle", domElement);
+          setValueForAttribute(domElement, "popover", value);
+          break;
+        case "xlinkActuate":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:actuate",
+            value
+          );
+          break;
+        case "xlinkArcrole":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:arcrole",
+            value
+          );
+          break;
+        case "xlinkRole":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:role",
+            value
+          );
+          break;
+        case "xlinkShow":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:show",
+            value
+          );
+          break;
+        case "xlinkTitle":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:title",
+            value
+          );
+          break;
+        case "xlinkType":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:type",
+            value
+          );
+          break;
+        case "xmlBase":
+          setValueForNamespacedAttribute(
+            domElement,
+            xmlNamespace,
+            "xml:base",
+            value
+          );
+          break;
+        case "xmlLang":
+          setValueForNamespacedAttribute(
+            domElement,
+            xmlNamespace,
+            "xml:lang",
+            value
+          );
+          break;
+        case "xmlSpace":
+          setValueForNamespacedAttribute(
+            domElement,
+            xmlNamespace,
+            "xml:space",
+            value
+          );
+          break;
+        case "is":
+          null != prevValue &&
+            console.error(
+              'Cannot update the "is" prop after it has been initialized.'
+            );
+          setValueForAttribute(domElement, "is", value);
+          break;
+        case "innerText":
+        case "textContent":
+          break;
+        case "popoverTarget":
+          didWarnPopoverTargetObject ||
+            null == value ||
+            "object" !== typeof value ||
+            ((didWarnPopoverTargetObject = !0),
+            console.error(
+              "The `popoverTarget` prop expects the ID of an Element as a string. Received %s instead.",
+              value
+            ));
+        default:
+          !(2 < key.length) ||
+          ("o" !== key[0] && "O" !== key[0]) ||
+          ("n" !== key[1] && "N" !== key[1])
+            ? ((key = getAttributeAlias(key)),
+              setValueForAttribute(domElement, key, value))
+            : registrationNameDependencies.hasOwnProperty(key) &&
+              null != value &&
+              "function" !== typeof value &&
+              warnForInvalidEventListener(key, value);
+      }
+    }
+    function setPropOnCustomElement(
+      domElement,
+      tag,
+      key,
+      value,
+      props,
+      prevValue
+    ) {
+      switch (key) {
+        case "style":
+          setValueForStyles(domElement, value, prevValue);
+          break;
+        case "dangerouslySetInnerHTML":
+          if (null != value) {
+            if ("object" !== typeof value || !("__html" in value))
+              throw Error(
+                "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+              );
+            key = value.__html;
+            if (null != key) {
+              if (null != props.children)
+                throw Error(
+                  "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+                );
+              domElement.innerHTML = key;
+            }
+          }
+          break;
+        case "children":
+          "string" === typeof value
+            ? setTextContent(domElement, value)
+            : ("number" === typeof value || "bigint" === typeof value) &&
+              setTextContent(domElement, "" + value);
+          break;
+        case "onScroll":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            listenToNonDelegatedEvent("scroll", domElement));
+          break;
+        case "onScrollEnd":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            listenToNonDelegatedEvent("scrollend", domElement));
+          break;
+        case "onClick":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            (domElement.onclick = noop$1));
+          break;
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "innerHTML":
+        case "ref":
+          break;
+        case "innerText":
+        case "textContent":
+          break;
+        default:
+          if (registrationNameDependencies.hasOwnProperty(key))
+            null != value &&
+              "function" !== typeof value &&
+              warnForInvalidEventListener(key, value);
+          else
+            a: {
+              if (
+                "o" === key[0] &&
+                "n" === key[1] &&
+                ((props = key.endsWith("Capture")),
+                (tag = key.slice(2, props ? key.length - 7 : void 0)),
+                (prevValue = domElement[internalPropsKey] || null),
+                (prevValue = null != prevValue ? prevValue[key] : null),
+                "function" === typeof prevValue &&
+                  domElement.removeEventListener(tag, prevValue, props),
+                "function" === typeof value)
+              ) {
+                "function" !== typeof prevValue &&
+                  null !== prevValue &&
+                  (key in domElement
+                    ? (domElement[key] = null)
+                    : domElement.hasAttribute(key) &&
+                      domElement.removeAttribute(key));
+                domElement.addEventListener(tag, value, props);
+                break a;
+              }
+              key in domElement
+                ? (domElement[key] = value)
+                : !0 === value
+                  ? domElement.setAttribute(key, "")
+                  : setValueForAttribute(domElement, key, value);
+            }
+      }
+    }
+    function setInitialProperties(domElement, tag, props) {
+      validatePropertiesInDevelopment(tag, props);
+      switch (tag) {
+        case "div":
+        case "span":
+        case "svg":
+        case "path":
+        case "a":
+        case "g":
+        case "p":
+        case "li":
+          break;
+        case "img":
+          listenToNonDelegatedEvent("error", domElement);
+          listenToNonDelegatedEvent("load", domElement);
+          var hasSrc = !1,
+            hasSrcSet = !1,
+            propKey;
+          for (propKey in props)
+            if (props.hasOwnProperty(propKey)) {
+              var propValue = props[propKey];
+              if (null != propValue)
+                switch (propKey) {
+                  case "src":
+                    hasSrc = !0;
+                    break;
+                  case "srcSet":
+                    hasSrcSet = !0;
+                    break;
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      tag +
+                        " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    setProp(domElement, tag, propKey, propValue, props, null);
+                }
+            }
+          hasSrcSet &&
+            setProp(domElement, tag, "srcSet", props.srcSet, props, null);
+          hasSrc && setProp(domElement, tag, "src", props.src, props, null);
+          return;
+        case "input":
+          checkControlledValueProps("input", props);
+          listenToNonDelegatedEvent("invalid", domElement);
+          var defaultValue = (propKey = propValue = hasSrcSet = null),
+            checked = null,
+            defaultChecked = null;
+          for (hasSrc in props)
+            if (props.hasOwnProperty(hasSrc)) {
+              var _propValue = props[hasSrc];
+              if (null != _propValue)
+                switch (hasSrc) {
+                  case "name":
+                    hasSrcSet = _propValue;
+                    break;
+                  case "type":
+                    propValue = _propValue;
+                    break;
+                  case "checked":
+                    checked = _propValue;
+                    break;
+                  case "defaultChecked":
+                    defaultChecked = _propValue;
+                    break;
+                  case "value":
+                    propKey = _propValue;
+                    break;
+                  case "defaultValue":
+                    defaultValue = _propValue;
+                    break;
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    if (null != _propValue)
+                      throw Error(
+                        tag +
+                          " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                      );
+                    break;
+                  default:
+                    setProp(domElement, tag, hasSrc, _propValue, props, null);
+                }
+            }
+          validateInputProps(domElement, props);
+          initInput(
+            domElement,
+            propKey,
+            defaultValue,
+            checked,
+            defaultChecked,
+            propValue,
+            hasSrcSet,
+            !1
+          );
+          track(domElement);
+          return;
+        case "select":
+          checkControlledValueProps("select", props);
+          listenToNonDelegatedEvent("invalid", domElement);
+          hasSrc = propValue = propKey = null;
+          for (hasSrcSet in props)
+            if (
+              props.hasOwnProperty(hasSrcSet) &&
+              ((defaultValue = props[hasSrcSet]), null != defaultValue)
+            )
+              switch (hasSrcSet) {
+                case "value":
+                  propKey = defaultValue;
+                  break;
+                case "defaultValue":
+                  propValue = defaultValue;
+                  break;
+                case "multiple":
+                  hasSrc = defaultValue;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    hasSrcSet,
+                    defaultValue,
+                    props,
+                    null
+                  );
+              }
+          validateSelectProps(domElement, props);
+          tag = propKey;
+          props = propValue;
+          domElement.multiple = !!hasSrc;
+          null != tag
+            ? updateOptions(domElement, !!hasSrc, tag, !1)
+            : null != props && updateOptions(domElement, !!hasSrc, props, !0);
+          return;
+        case "textarea":
+          checkControlledValueProps("textarea", props);
+          listenToNonDelegatedEvent("invalid", domElement);
+          propKey = hasSrcSet = hasSrc = null;
+          for (propValue in props)
+            if (
+              props.hasOwnProperty(propValue) &&
+              ((defaultValue = props[propValue]), null != defaultValue)
+            )
+              switch (propValue) {
+                case "value":
+                  hasSrc = defaultValue;
+                  break;
+                case "defaultValue":
+                  hasSrcSet = defaultValue;
+                  break;
+                case "children":
+                  propKey = defaultValue;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  if (null != defaultValue)
+                    throw Error(
+                      "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                    );
+                  break;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    propValue,
+                    defaultValue,
+                    props,
+                    null
+                  );
+              }
+          validateTextareaProps(domElement, props);
+          initTextarea(domElement, hasSrc, hasSrcSet, propKey);
+          track(domElement);
+          return;
+        case "option":
+          validateOptionProps(domElement, props);
+          for (checked in props)
+            if (
+              props.hasOwnProperty(checked) &&
+              ((hasSrc = props[checked]), null != hasSrc)
+            )
+              switch (checked) {
+                case "selected":
+                  domElement.selected =
+                    hasSrc &&
+                    "function" !== typeof hasSrc &&
+                    "symbol" !== typeof hasSrc;
+                  break;
+                default:
+                  setProp(domElement, tag, checked, hasSrc, props, null);
+              }
+          return;
+        case "dialog":
+          listenToNonDelegatedEvent("beforetoggle", domElement);
+          listenToNonDelegatedEvent("toggle", domElement);
+          listenToNonDelegatedEvent("cancel", domElement);
+          listenToNonDelegatedEvent("close", domElement);
+          break;
+        case "iframe":
+        case "object":
+          listenToNonDelegatedEvent("load", domElement);
+          break;
+        case "video":
+        case "audio":
+          for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)
+            listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);
+          break;
+        case "image":
+          listenToNonDelegatedEvent("error", domElement);
+          listenToNonDelegatedEvent("load", domElement);
+          break;
+        case "details":
+          listenToNonDelegatedEvent("toggle", domElement);
+          break;
+        case "embed":
+        case "source":
+        case "link":
+          listenToNonDelegatedEvent("error", domElement),
+            listenToNonDelegatedEvent("load", domElement);
+        case "area":
+        case "base":
+        case "br":
+        case "col":
+        case "hr":
+        case "keygen":
+        case "meta":
+        case "param":
+        case "track":
+        case "wbr":
+        case "menuitem":
+          for (defaultChecked in props)
+            if (
+              props.hasOwnProperty(defaultChecked) &&
+              ((hasSrc = props[defaultChecked]), null != hasSrc)
+            )
+              switch (defaultChecked) {
+                case "children":
+                case "dangerouslySetInnerHTML":
+                  throw Error(
+                    tag +
+                      " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                  );
+                default:
+                  setProp(domElement, tag, defaultChecked, hasSrc, props, null);
+              }
+          return;
+        default:
+          if (isCustomElement(tag)) {
+            for (_propValue in props)
+              props.hasOwnProperty(_propValue) &&
+                ((hasSrc = props[_propValue]),
+                void 0 !== hasSrc &&
+                  setPropOnCustomElement(
+                    domElement,
+                    tag,
+                    _propValue,
+                    hasSrc,
+                    props,
+                    void 0
+                  ));
+            return;
+          }
+      }
+      for (defaultValue in props)
+        props.hasOwnProperty(defaultValue) &&
+          ((hasSrc = props[defaultValue]),
+          null != hasSrc &&
+            setProp(domElement, tag, defaultValue, hasSrc, props, null));
+    }
+    function updateProperties(domElement, tag, lastProps, nextProps) {
+      validatePropertiesInDevelopment(tag, nextProps);
+      switch (tag) {
+        case "div":
+        case "span":
+        case "svg":
+        case "path":
+        case "a":
+        case "g":
+        case "p":
+        case "li":
+          break;
+        case "input":
+          var name = null,
+            type = null,
+            value = null,
+            defaultValue = null,
+            lastDefaultValue = null,
+            checked = null,
+            defaultChecked = null;
+          for (propKey in lastProps) {
+            var lastProp = lastProps[propKey];
+            if (lastProps.hasOwnProperty(propKey) && null != lastProp)
+              switch (propKey) {
+                case "checked":
+                  break;
+                case "value":
+                  break;
+                case "defaultValue":
+                  lastDefaultValue = lastProp;
+                default:
+                  nextProps.hasOwnProperty(propKey) ||
+                    setProp(
+                      domElement,
+                      tag,
+                      propKey,
+                      null,
+                      nextProps,
+                      lastProp
+                    );
+              }
+          }
+          for (var _propKey8 in nextProps) {
+            var propKey = nextProps[_propKey8];
+            lastProp = lastProps[_propKey8];
+            if (
+              nextProps.hasOwnProperty(_propKey8) &&
+              (null != propKey || null != lastProp)
+            )
+              switch (_propKey8) {
+                case "type":
+                  type = propKey;
+                  break;
+                case "name":
+                  name = propKey;
+                  break;
+                case "checked":
+                  checked = propKey;
+                  break;
+                case "defaultChecked":
+                  defaultChecked = propKey;
+                  break;
+                case "value":
+                  value = propKey;
+                  break;
+                case "defaultValue":
+                  defaultValue = propKey;
+                  break;
+                case "children":
+                case "dangerouslySetInnerHTML":
+                  if (null != propKey)
+                    throw Error(
+                      tag +
+                        " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  break;
+                default:
+                  propKey !== lastProp &&
+                    setProp(
+                      domElement,
+                      tag,
+                      _propKey8,
+                      propKey,
+                      nextProps,
+                      lastProp
+                    );
+              }
+          }
+          tag =
+            "checkbox" === lastProps.type || "radio" === lastProps.type
+              ? null != lastProps.checked
+              : null != lastProps.value;
+          nextProps =
+            "checkbox" === nextProps.type || "radio" === nextProps.type
+              ? null != nextProps.checked
+              : null != nextProps.value;
+          tag ||
+            !nextProps ||
+            didWarnUncontrolledToControlled ||
+            (console.error(
+              "A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnUncontrolledToControlled = !0));
+          !tag ||
+            nextProps ||
+            didWarnControlledToUncontrolled ||
+            (console.error(
+              "A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnControlledToUncontrolled = !0));
+          updateInput(
+            domElement,
+            value,
+            defaultValue,
+            lastDefaultValue,
+            checked,
+            defaultChecked,
+            type,
+            name
+          );
+          return;
+        case "select":
+          propKey = value = defaultValue = _propKey8 = null;
+          for (type in lastProps)
+            if (
+              ((lastDefaultValue = lastProps[type]),
+              lastProps.hasOwnProperty(type) && null != lastDefaultValue)
+            )
+              switch (type) {
+                case "value":
+                  break;
+                case "multiple":
+                  propKey = lastDefaultValue;
+                default:
+                  nextProps.hasOwnProperty(type) ||
+                    setProp(
+                      domElement,
+                      tag,
+                      type,
+                      null,
+                      nextProps,
+                      lastDefaultValue
+                    );
+              }
+          for (name in nextProps)
+            if (
+              ((type = nextProps[name]),
+              (lastDefaultValue = lastProps[name]),
+              nextProps.hasOwnProperty(name) &&
+                (null != type || null != lastDefaultValue))
+            )
+              switch (name) {
+                case "value":
+                  _propKey8 = type;
+                  break;
+                case "defaultValue":
+                  defaultValue = type;
+                  break;
+                case "multiple":
+                  value = type;
+                default:
+                  type !== lastDefaultValue &&
+                    setProp(
+                      domElement,
+                      tag,
+                      name,
+                      type,
+                      nextProps,
+                      lastDefaultValue
+                    );
+              }
+          nextProps = defaultValue;
+          tag = value;
+          lastProps = propKey;
+          null != _propKey8
+            ? updateOptions(domElement, !!tag, _propKey8, !1)
+            : !!lastProps !== !!tag &&
+              (null != nextProps
+                ? updateOptions(domElement, !!tag, nextProps, !0)
+                : updateOptions(domElement, !!tag, tag ? [] : "", !1));
+          return;
+        case "textarea":
+          propKey = _propKey8 = null;
+          for (defaultValue in lastProps)
+            if (
+              ((name = lastProps[defaultValue]),
+              lastProps.hasOwnProperty(defaultValue) &&
+                null != name &&
+                !nextProps.hasOwnProperty(defaultValue))
+            )
+              switch (defaultValue) {
+                case "value":
+                  break;
+                case "children":
+                  break;
+                default:
+                  setProp(domElement, tag, defaultValue, null, nextProps, name);
+              }
+          for (value in nextProps)
+            if (
+              ((name = nextProps[value]),
+              (type = lastProps[value]),
+              nextProps.hasOwnProperty(value) && (null != name || null != type))
+            )
+              switch (value) {
+                case "value":
+                  _propKey8 = name;
+                  break;
+                case "defaultValue":
+                  propKey = name;
+                  break;
+                case "children":
+                  break;
+                case "dangerouslySetInnerHTML":
+                  if (null != name)
+                    throw Error(
+                      "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                    );
+                  break;
+                default:
+                  name !== type &&
+                    setProp(domElement, tag, value, name, nextProps, type);
+              }
+          updateTextarea(domElement, _propKey8, propKey);
+          return;
+        case "option":
+          for (var _propKey13 in lastProps)
+            if (
+              ((_propKey8 = lastProps[_propKey13]),
+              lastProps.hasOwnProperty(_propKey13) &&
+                null != _propKey8 &&
+                !nextProps.hasOwnProperty(_propKey13))
+            )
+              switch (_propKey13) {
+                case "selected":
+                  domElement.selected = !1;
+                  break;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    _propKey13,
+                    null,
+                    nextProps,
+                    _propKey8
+                  );
+              }
+          for (lastDefaultValue in nextProps)
+            if (
+              ((_propKey8 = nextProps[lastDefaultValue]),
+              (propKey = lastProps[lastDefaultValue]),
+              nextProps.hasOwnProperty(lastDefaultValue) &&
+                _propKey8 !== propKey &&
+                (null != _propKey8 || null != propKey))
+            )
+              switch (lastDefaultValue) {
+                case "selected":
+                  domElement.selected =
+                    _propKey8 &&
+                    "function" !== typeof _propKey8 &&
+                    "symbol" !== typeof _propKey8;
+                  break;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    lastDefaultValue,
+                    _propKey8,
+                    nextProps,
+                    propKey
+                  );
+              }
+          return;
+        case "img":
+        case "link":
+        case "area":
+        case "base":
+        case "br":
+        case "col":
+        case "embed":
+        case "hr":
+        case "keygen":
+        case "meta":
+        case "param":
+        case "source":
+        case "track":
+        case "wbr":
+        case "menuitem":
+          for (var _propKey15 in lastProps)
+            (_propKey8 = lastProps[_propKey15]),
+              lastProps.hasOwnProperty(_propKey15) &&
+                null != _propKey8 &&
+                !nextProps.hasOwnProperty(_propKey15) &&
+                setProp(
+                  domElement,
+                  tag,
+                  _propKey15,
+                  null,
+                  nextProps,
+                  _propKey8
+                );
+          for (checked in nextProps)
+            if (
+              ((_propKey8 = nextProps[checked]),
+              (propKey = lastProps[checked]),
+              nextProps.hasOwnProperty(checked) &&
+                _propKey8 !== propKey &&
+                (null != _propKey8 || null != propKey))
+            )
+              switch (checked) {
+                case "children":
+                case "dangerouslySetInnerHTML":
+                  if (null != _propKey8)
+                    throw Error(
+                      tag +
+                        " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  break;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    checked,
+                    _propKey8,
+                    nextProps,
+                    propKey
+                  );
+              }
+          return;
+        default:
+          if (isCustomElement(tag)) {
+            for (var _propKey17 in lastProps)
+              (_propKey8 = lastProps[_propKey17]),
+                lastProps.hasOwnProperty(_propKey17) &&
+                  void 0 !== _propKey8 &&
+                  !nextProps.hasOwnProperty(_propKey17) &&
+                  setPropOnCustomElement(
+                    domElement,
+                    tag,
+                    _propKey17,
+                    void 0,
+                    nextProps,
+                    _propKey8
+                  );
+            for (defaultChecked in nextProps)
+              (_propKey8 = nextProps[defaultChecked]),
+                (propKey = lastProps[defaultChecked]),
+                !nextProps.hasOwnProperty(defaultChecked) ||
+                  _propKey8 === propKey ||
+                  (void 0 === _propKey8 && void 0 === propKey) ||
+                  setPropOnCustomElement(
+                    domElement,
+                    tag,
+                    defaultChecked,
+                    _propKey8,
+                    nextProps,
+                    propKey
+                  );
+            return;
+          }
+      }
+      for (var _propKey19 in lastProps)
+        (_propKey8 = lastProps[_propKey19]),
+          lastProps.hasOwnProperty(_propKey19) &&
+            null != _propKey8 &&
+            !nextProps.hasOwnProperty(_propKey19) &&
+            setProp(domElement, tag, _propKey19, null, nextProps, _propKey8);
+      for (lastProp in nextProps)
+        (_propKey8 = nextProps[lastProp]),
+          (propKey = lastProps[lastProp]),
+          !nextProps.hasOwnProperty(lastProp) ||
+            _propKey8 === propKey ||
+            (null == _propKey8 && null == propKey) ||
+            setProp(domElement, tag, lastProp, _propKey8, nextProps, propKey);
+    }
+    function getPropNameFromAttributeName(attrName) {
+      switch (attrName) {
+        case "class":
+          return "className";
+        case "for":
+          return "htmlFor";
+        default:
+          return attrName;
+      }
+    }
+    function getStylesObjectFromElement(domElement) {
+      var serverValueInObjectForm = {};
+      domElement = domElement.style;
+      for (var i = 0; i < domElement.length; i++) {
+        var styleName = domElement[i];
+        serverValueInObjectForm[styleName] =
+          domElement.getPropertyValue(styleName);
+      }
+      return serverValueInObjectForm;
+    }
+    function diffHydratedStyles(domElement, value$jscomp$0, serverDifferences) {
+      if (null != value$jscomp$0 && "object" !== typeof value$jscomp$0)
+        console.error(
+          "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+        );
+      else {
+        var clientValue;
+        var delimiter = (clientValue = ""),
+          styleName;
+        for (styleName in value$jscomp$0)
+          if (value$jscomp$0.hasOwnProperty(styleName)) {
+            var value = value$jscomp$0[styleName];
+            null != value &&
+              "boolean" !== typeof value &&
+              "" !== value &&
+              (0 === styleName.indexOf("--")
+                ? (checkCSSPropertyStringCoercion(value, styleName),
+                  (clientValue +=
+                    delimiter + styleName + ":" + ("" + value).trim()))
+                : "number" !== typeof value ||
+                    0 === value ||
+                    unitlessNumbers.has(styleName)
+                  ? (checkCSSPropertyStringCoercion(value, styleName),
+                    (clientValue +=
+                      delimiter +
+                      styleName
+                        .replace(uppercasePattern, "-$1")
+                        .toLowerCase()
+                        .replace(msPattern$1, "-ms-") +
+                      ":" +
+                      ("" + value).trim()))
+                  : (clientValue +=
+                      delimiter +
+                      styleName
+                        .replace(uppercasePattern, "-$1")
+                        .toLowerCase()
+                        .replace(msPattern$1, "-ms-") +
+                      ":" +
+                      value +
+                      "px"),
+              (delimiter = ";"));
+          }
+        clientValue = clientValue || null;
+        value$jscomp$0 = domElement.getAttribute("style");
+        value$jscomp$0 !== clientValue &&
+          ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),
+          normalizeMarkupForTextOrAttribute(value$jscomp$0) !== clientValue &&
+            (serverDifferences.style = getStylesObjectFromElement(domElement)));
+      }
+    }
+    function hydrateAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement)
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            return;
+        }
+      else if (null != value)
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+          case "boolean":
+            break;
+          default:
+            if (
+              (checkAttributeStringCoercion(value, propKey),
+              domElement === "" + value)
+            )
+              return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function hydrateBooleanAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement) {
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+            return;
+        }
+        if (!value) return;
+      } else
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+            break;
+          default:
+            if (value) return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function hydrateBooleanishAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement)
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+            return;
+        }
+      else if (null != value)
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+            break;
+          default:
+            if (
+              (checkAttributeStringCoercion(value, attributeName),
+              domElement === "" + value)
+            )
+              return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function hydrateNumericAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement)
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            return;
+          default:
+            if (isNaN(value)) return;
+        }
+      else if (null != value)
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+          case "boolean":
+            break;
+          default:
+            if (
+              !isNaN(value) &&
+              (checkAttributeStringCoercion(value, propKey),
+              domElement === "" + value)
+            )
+              return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function hydrateSanitizedAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement)
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            return;
+        }
+      else if (null != value)
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+          case "boolean":
+            break;
+          default:
+            if (
+              (checkAttributeStringCoercion(value, propKey),
+              (attributeName = sanitizeURL("" + value)),
+              domElement === attributeName)
+            )
+              return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function diffHydratedProperties(domElement, tag, props, hostContext) {
+      for (
+        var serverDifferences = {},
+          extraAttributes = new Set(),
+          attributes = domElement.attributes,
+          i = 0;
+        i < attributes.length;
+        i++
+      )
+        switch (attributes[i].name.toLowerCase()) {
+          case "value":
+            break;
+          case "checked":
+            break;
+          case "selected":
+            break;
+          default:
+            extraAttributes.add(attributes[i].name);
+        }
+      if (isCustomElement(tag))
+        for (var propKey in props) {
+          if (props.hasOwnProperty(propKey)) {
+            var value = props[propKey];
+            if (null != value)
+              if (registrationNameDependencies.hasOwnProperty(propKey))
+                "function" !== typeof value &&
+                  warnForInvalidEventListener(propKey, value);
+              else if (!0 !== props.suppressHydrationWarning)
+                switch (propKey) {
+                  case "children":
+                    ("string" !== typeof value && "number" !== typeof value) ||
+                      warnForPropDifference(
+                        "children",
+                        domElement.textContent,
+                        value,
+                        serverDifferences
+                      );
+                    continue;
+                  case "suppressContentEditableWarning":
+                  case "suppressHydrationWarning":
+                  case "defaultValue":
+                  case "defaultChecked":
+                  case "innerHTML":
+                  case "ref":
+                    continue;
+                  case "dangerouslySetInnerHTML":
+                    attributes = domElement.innerHTML;
+                    value = value ? value.__html : void 0;
+                    null != value &&
+                      ((value = normalizeHTML(domElement, value)),
+                      warnForPropDifference(
+                        propKey,
+                        attributes,
+                        value,
+                        serverDifferences
+                      ));
+                    continue;
+                  case "style":
+                    extraAttributes.delete(propKey);
+                    diffHydratedStyles(domElement, value, serverDifferences);
+                    continue;
+                  case "offsetParent":
+                  case "offsetTop":
+                  case "offsetLeft":
+                  case "offsetWidth":
+                  case "offsetHeight":
+                  case "isContentEditable":
+                  case "outerText":
+                  case "outerHTML":
+                    extraAttributes.delete(propKey.toLowerCase());
+                    console.error(
+                      "Assignment to read-only property will result in a no-op: `%s`",
+                      propKey
+                    );
+                    continue;
+                  case "className":
+                    extraAttributes.delete("class");
+                    attributes = getValueForAttributeOnCustomComponent(
+                      domElement,
+                      "class",
+                      value
+                    );
+                    warnForPropDifference(
+                      "className",
+                      attributes,
+                      value,
+                      serverDifferences
+                    );
+                    continue;
+                  default:
+                    hostContext.context === HostContextNamespaceNone &&
+                    "svg" !== tag &&
+                    "math" !== tag
+                      ? extraAttributes.delete(propKey.toLowerCase())
+                      : extraAttributes.delete(propKey),
+                      (attributes = getValueForAttributeOnCustomComponent(
+                        domElement,
+                        propKey,
+                        value
+                      )),
+                      warnForPropDifference(
+                        propKey,
+                        attributes,
+                        value,
+                        serverDifferences
+                      );
+                }
+          }
+        }
+      else
+        for (value in props)
+          if (
+            props.hasOwnProperty(value) &&
+            ((propKey = props[value]), null != propKey)
+          )
+            if (registrationNameDependencies.hasOwnProperty(value))
+              "function" !== typeof propKey &&
+                warnForInvalidEventListener(value, propKey);
+            else if (!0 !== props.suppressHydrationWarning)
+              switch (value) {
+                case "children":
+                  ("string" !== typeof propKey &&
+                    "number" !== typeof propKey) ||
+                    warnForPropDifference(
+                      "children",
+                      domElement.textContent,
+                      propKey,
+                      serverDifferences
+                    );
+                  continue;
+                case "suppressContentEditableWarning":
+                case "suppressHydrationWarning":
+                case "value":
+                case "checked":
+                case "selected":
+                case "defaultValue":
+                case "defaultChecked":
+                case "innerHTML":
+                case "ref":
+                  continue;
+                case "dangerouslySetInnerHTML":
+                  attributes = domElement.innerHTML;
+                  propKey = propKey ? propKey.__html : void 0;
+                  null != propKey &&
+                    ((propKey = normalizeHTML(domElement, propKey)),
+                    attributes !== propKey &&
+                      (serverDifferences[value] = { __html: attributes }));
+                  continue;
+                case "className":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "class",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "tabIndex":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "tabindex",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "style":
+                  extraAttributes.delete(value);
+                  diffHydratedStyles(domElement, propKey, serverDifferences);
+                  continue;
+                case "multiple":
+                  extraAttributes.delete(value);
+                  warnForPropDifference(
+                    value,
+                    domElement.multiple,
+                    propKey,
+                    serverDifferences
+                  );
+                  continue;
+                case "muted":
+                  extraAttributes.delete(value);
+                  warnForPropDifference(
+                    value,
+                    domElement.muted,
+                    propKey,
+                    serverDifferences
+                  );
+                  continue;
+                case "autoFocus":
+                  extraAttributes.delete("autofocus");
+                  warnForPropDifference(
+                    value,
+                    domElement.autofocus,
+                    propKey,
+                    serverDifferences
+                  );
+                  continue;
+                case "data":
+                  if ("object" !== tag) {
+                    extraAttributes.delete(value);
+                    attributes = domElement.getAttribute("data");
+                    warnForPropDifference(
+                      value,
+                      attributes,
+                      propKey,
+                      serverDifferences
+                    );
+                    continue;
+                  }
+                case "src":
+                case "href":
+                  if (
+                    !(
+                      "" !== propKey ||
+                      ("a" === tag && "href" === value) ||
+                      ("object" === tag && "data" === value)
+                    )
+                  ) {
+                    "src" === value
+                      ? console.error(
+                          'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                          value,
+                          value
+                        )
+                      : console.error(
+                          'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                          value,
+                          value
+                        );
+                    continue;
+                  }
+                  hydrateSanitizedAttribute(
+                    domElement,
+                    value,
+                    value,
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "action":
+                case "formAction":
+                  attributes = domElement.getAttribute(value);
+                  if ("function" === typeof propKey) {
+                    extraAttributes.delete(value.toLowerCase());
+                    "formAction" === value
+                      ? (extraAttributes.delete("name"),
+                        extraAttributes.delete("formenctype"),
+                        extraAttributes.delete("formmethod"),
+                        extraAttributes.delete("formtarget"))
+                      : (extraAttributes.delete("enctype"),
+                        extraAttributes.delete("method"),
+                        extraAttributes.delete("target"));
+                    continue;
+                  } else if (attributes === EXPECTED_FORM_ACTION_URL) {
+                    extraAttributes.delete(value.toLowerCase());
+                    warnForPropDifference(
+                      value,
+                      "function",
+                      propKey,
+                      serverDifferences
+                    );
+                    continue;
+                  }
+                  hydrateSanitizedAttribute(
+                    domElement,
+                    value,
+                    value.toLowerCase(),
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkHref":
+                  hydrateSanitizedAttribute(
+                    domElement,
+                    value,
+                    "xlink:href",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "contentEditable":
+                  hydrateBooleanishAttribute(
+                    domElement,
+                    value,
+                    "contenteditable",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "spellCheck":
+                  hydrateBooleanishAttribute(
+                    domElement,
+                    value,
+                    "spellcheck",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "draggable":
+                case "autoReverse":
+                case "externalResourcesRequired":
+                case "focusable":
+                case "preserveAlpha":
+                  hydrateBooleanishAttribute(
+                    domElement,
+                    value,
+                    value,
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "allowFullScreen":
+                case "async":
+                case "autoPlay":
+                case "controls":
+                case "default":
+                case "defer":
+                case "disabled":
+                case "disablePictureInPicture":
+                case "disableRemotePlayback":
+                case "formNoValidate":
+                case "hidden":
+                case "loop":
+                case "noModule":
+                case "noValidate":
+                case "open":
+                case "playsInline":
+                case "readOnly":
+                case "required":
+                case "reversed":
+                case "scoped":
+                case "seamless":
+                case "itemScope":
+                  hydrateBooleanAttribute(
+                    domElement,
+                    value,
+                    value.toLowerCase(),
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "capture":
+                case "download":
+                  a: {
+                    i = domElement;
+                    var attributeName = (attributes = value),
+                      serverDifferences$jscomp$0 = serverDifferences;
+                    extraAttributes.delete(attributeName);
+                    i = i.getAttribute(attributeName);
+                    if (null === i)
+                      switch (typeof propKey) {
+                        case "undefined":
+                        case "function":
+                        case "symbol":
+                          break a;
+                        default:
+                          if (!1 === propKey) break a;
+                      }
+                    else if (null != propKey)
+                      switch (typeof propKey) {
+                        case "function":
+                        case "symbol":
+                          break;
+                        case "boolean":
+                          if (!0 === propKey && "" === i) break a;
+                          break;
+                        default:
+                          if (
+                            (checkAttributeStringCoercion(propKey, attributes),
+                            i === "" + propKey)
+                          )
+                            break a;
+                      }
+                    warnForPropDifference(
+                      attributes,
+                      i,
+                      propKey,
+                      serverDifferences$jscomp$0
+                    );
+                  }
+                  continue;
+                case "cols":
+                case "rows":
+                case "size":
+                case "span":
+                  a: {
+                    i = domElement;
+                    attributeName = attributes = value;
+                    serverDifferences$jscomp$0 = serverDifferences;
+                    extraAttributes.delete(attributeName);
+                    i = i.getAttribute(attributeName);
+                    if (null === i)
+                      switch (typeof propKey) {
+                        case "undefined":
+                        case "function":
+                        case "symbol":
+                        case "boolean":
+                          break a;
+                        default:
+                          if (isNaN(propKey) || 1 > propKey) break a;
+                      }
+                    else if (null != propKey)
+                      switch (typeof propKey) {
+                        case "function":
+                        case "symbol":
+                        case "boolean":
+                          break;
+                        default:
+                          if (
+                            !(isNaN(propKey) || 1 > propKey) &&
+                            (checkAttributeStringCoercion(propKey, attributes),
+                            i === "" + propKey)
+                          )
+                            break a;
+                      }
+                    warnForPropDifference(
+                      attributes,
+                      i,
+                      propKey,
+                      serverDifferences$jscomp$0
+                    );
+                  }
+                  continue;
+                case "rowSpan":
+                  hydrateNumericAttribute(
+                    domElement,
+                    value,
+                    "rowspan",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "start":
+                  hydrateNumericAttribute(
+                    domElement,
+                    value,
+                    value,
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xHeight":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "x-height",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkActuate":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:actuate",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkArcrole":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:arcrole",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkRole":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:role",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkShow":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:show",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkTitle":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:title",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkType":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:type",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xmlBase":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xml:base",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xmlLang":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xml:lang",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xmlSpace":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xml:space",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "inert":
+                  "" !== propKey ||
+                    didWarnForNewBooleanPropsWithEmptyValue[value] ||
+                    ((didWarnForNewBooleanPropsWithEmptyValue[value] = !0),
+                    console.error(
+                      "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+                      value
+                    ));
+                  hydrateBooleanAttribute(
+                    domElement,
+                    value,
+                    value,
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                default:
+                  if (
+                    !(2 < value.length) ||
+                    ("o" !== value[0] && "O" !== value[0]) ||
+                    ("n" !== value[1] && "N" !== value[1])
+                  ) {
+                    i = getAttributeAlias(value);
+                    attributes = !1;
+                    hostContext.context === HostContextNamespaceNone &&
+                    "svg" !== tag &&
+                    "math" !== tag
+                      ? extraAttributes.delete(i.toLowerCase())
+                      : ((attributeName = value.toLowerCase()),
+                        (attributeName = possibleStandardNames.hasOwnProperty(
+                          attributeName
+                        )
+                          ? possibleStandardNames[attributeName] || null
+                          : null),
+                        null !== attributeName &&
+                          attributeName !== value &&
+                          ((attributes = !0),
+                          extraAttributes.delete(attributeName)),
+                        extraAttributes.delete(i));
+                    a: if (
+                      ((attributeName = domElement),
+                      (serverDifferences$jscomp$0 = i),
+                      (i = propKey),
+                      isAttributeNameSafe(serverDifferences$jscomp$0))
+                    )
+                      if (
+                        attributeName.hasAttribute(serverDifferences$jscomp$0)
+                      )
+                        (attributeName = attributeName.getAttribute(
+                          serverDifferences$jscomp$0
+                        )),
+                          checkAttributeStringCoercion(
+                            i,
+                            serverDifferences$jscomp$0
+                          ),
+                          (i = attributeName === "" + i ? i : attributeName);
+                      else {
+                        switch (typeof i) {
+                          case "function":
+                          case "symbol":
+                            break a;
+                          case "boolean":
+                            if (
+                              ((attributeName = serverDifferences$jscomp$0
+                                .toLowerCase()
+                                .slice(0, 5)),
+                              "data-" !== attributeName &&
+                                "aria-" !== attributeName)
+                            )
+                              break a;
+                        }
+                        i = void 0 === i ? void 0 : null;
+                      }
+                    else i = void 0;
+                    attributes ||
+                      warnForPropDifference(
+                        value,
+                        i,
+                        propKey,
+                        serverDifferences
+                      );
+                  }
+              }
+      0 < extraAttributes.size &&
+        !0 !== props.suppressHydrationWarning &&
+        warnForExtraAttributes(domElement, extraAttributes, serverDifferences);
+      return 0 === Object.keys(serverDifferences).length
+        ? null
+        : serverDifferences;
+    }
+    function propNamesListJoin(list, combinator) {
+      switch (list.length) {
+        case 0:
+          return "";
+        case 1:
+          return list[0];
+        case 2:
+          return list[0] + " " + combinator + " " + list[1];
+        default:
+          return (
+            list.slice(0, -1).join(", ") +
+            ", " +
+            combinator +
+            " " +
+            list[list.length - 1]
+          );
+      }
+    }
+    function getOwnerDocumentFromRootContainer(rootContainerElement) {
+      return 9 === rootContainerElement.nodeType
+        ? rootContainerElement
+        : rootContainerElement.ownerDocument;
+    }
+    function getOwnHostContext(namespaceURI) {
+      switch (namespaceURI) {
+        case SVG_NAMESPACE:
+          return HostContextNamespaceSvg;
+        case MATH_NAMESPACE:
+          return HostContextNamespaceMath;
+        default:
+          return HostContextNamespaceNone;
+      }
+    }
+    function getChildHostContextProd(parentNamespace, type) {
+      if (parentNamespace === HostContextNamespaceNone)
+        switch (type) {
+          case "svg":
+            return HostContextNamespaceSvg;
+          case "math":
+            return HostContextNamespaceMath;
+          default:
+            return HostContextNamespaceNone;
+        }
+      return parentNamespace === HostContextNamespaceSvg &&
+        "foreignObject" === type
+        ? HostContextNamespaceNone
+        : parentNamespace;
+    }
+    function shouldSetTextContent(type, props) {
+      return (
+        "textarea" === type ||
+        "noscript" === type ||
+        "string" === typeof props.children ||
+        "number" === typeof props.children ||
+        "bigint" === typeof props.children ||
+        ("object" === typeof props.dangerouslySetInnerHTML &&
+          null !== props.dangerouslySetInnerHTML &&
+          null != props.dangerouslySetInnerHTML.__html)
+      );
+    }
+    function shouldAttemptEagerTransition() {
+      var event = window.event;
+      if (event && "popstate" === event.type) {
+        if (event === currentPopstateTransitionEvent) return !1;
+        currentPopstateTransitionEvent = event;
+        return !0;
+      }
+      currentPopstateTransitionEvent = null;
+      return !1;
+    }
+    function handleErrorInNextTick(error) {
+      setTimeout(function () {
+        throw error;
+      });
+    }
+    function commitMount(domElement, type, newProps) {
+      switch (type) {
+        case "button":
+        case "input":
+        case "select":
+        case "textarea":
+          newProps.autoFocus && domElement.focus();
+          break;
+        case "img":
+          newProps.src
+            ? (domElement.src = newProps.src)
+            : newProps.srcSet && (domElement.srcset = newProps.srcSet);
+      }
+    }
+    function commitUpdate(domElement, type, oldProps, newProps) {
+      updateProperties(domElement, type, oldProps, newProps);
+      domElement[internalPropsKey] = newProps;
+    }
+    function resetTextContent(domElement) {
+      setTextContent(domElement, "");
+    }
+    function commitTextUpdate(textInstance, oldText, newText) {
+      textInstance.nodeValue = newText;
+    }
+    function isSingletonScope(type) {
+      return "head" === type;
+    }
+    function removeChild(parentInstance, child) {
+      parentInstance.removeChild(child);
+    }
+    function removeChildFromContainer(container, child) {
+      (9 === container.nodeType
+        ? container.body
+        : "HTML" === container.nodeName
+          ? container.ownerDocument.body
+          : container
+      ).removeChild(child);
+    }
+    function clearSuspenseBoundary(parentInstance, suspenseInstance) {
+      var node = suspenseInstance,
+        possiblePreambleContribution = 0,
+        depth = 0;
+      do {
+        var nextNode = node.nextSibling;
+        parentInstance.removeChild(node);
+        if (nextNode && 8 === nextNode.nodeType)
+          if (((node = nextNode.data), node === SUSPENSE_END_DATA)) {
+            if (
+              0 < possiblePreambleContribution &&
+              8 > possiblePreambleContribution
+            ) {
+              node = possiblePreambleContribution;
+              var ownerDocument = parentInstance.ownerDocument;
+              node & PREAMBLE_CONTRIBUTION_HTML &&
+                releaseSingletonInstance(ownerDocument.documentElement);
+              node & PREAMBLE_CONTRIBUTION_BODY &&
+                releaseSingletonInstance(ownerDocument.body);
+              if (node & PREAMBLE_CONTRIBUTION_HEAD)
+                for (
+                  node = ownerDocument.head,
+                    releaseSingletonInstance(node),
+                    ownerDocument = node.firstChild;
+                  ownerDocument;
+
+                ) {
+                  var nextNode$jscomp$0 = ownerDocument.nextSibling,
+                    nodeName = ownerDocument.nodeName;
+                  ownerDocument[internalHoistableMarker] ||
+                    "SCRIPT" === nodeName ||
+                    "STYLE" === nodeName ||
+                    ("LINK" === nodeName &&
+                      "stylesheet" === ownerDocument.rel.toLowerCase()) ||
+                    node.removeChild(ownerDocument);
+                  ownerDocument = nextNode$jscomp$0;
+                }
+            }
+            if (0 === depth) {
+              parentInstance.removeChild(nextNode);
+              retryIfBlockedOn(suspenseInstance);
+              return;
+            }
+            depth--;
+          } else
+            node === SUSPENSE_START_DATA ||
+            node === SUSPENSE_PENDING_START_DATA ||
+            node === SUSPENSE_FALLBACK_START_DATA
+              ? depth++
+              : (possiblePreambleContribution = node.charCodeAt(0) - 48);
+        else possiblePreambleContribution = 0;
+        node = nextNode;
+      } while (node);
+      retryIfBlockedOn(suspenseInstance);
+    }
+    function hideInstance(instance) {
+      instance = instance.style;
+      "function" === typeof instance.setProperty
+        ? instance.setProperty("display", "none", "important")
+        : (instance.display = "none");
+    }
+    function hideTextInstance(textInstance) {
+      textInstance.nodeValue = "";
+    }
+    function unhideInstance(instance, props) {
+      props = props[STYLE];
+      props =
+        void 0 !== props && null !== props && props.hasOwnProperty("display")
+          ? props.display
+          : null;
+      instance.style.display =
+        null == props || "boolean" === typeof props ? "" : ("" + props).trim();
+    }
+    function unhideTextInstance(textInstance, text) {
+      textInstance.nodeValue = text;
+    }
+    function clearContainerSparingly(container) {
+      var nextNode = container.firstChild;
+      nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);
+      for (; nextNode; ) {
+        var node = nextNode;
+        nextNode = nextNode.nextSibling;
+        switch (node.nodeName) {
+          case "HTML":
+          case "HEAD":
+          case "BODY":
+            clearContainerSparingly(node);
+            detachDeletedInstance(node);
+            continue;
+          case "SCRIPT":
+          case "STYLE":
+            continue;
+          case "LINK":
+            if ("stylesheet" === node.rel.toLowerCase()) continue;
+        }
+        container.removeChild(node);
+      }
+    }
+    function canHydrateInstance(instance, type, props, inRootOrSingleton) {
+      for (; 1 === instance.nodeType; ) {
+        var anyProps = props;
+        if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {
+          if (
+            !inRootOrSingleton &&
+            ("INPUT" !== instance.nodeName || "hidden" !== instance.type)
+          )
+            break;
+        } else if (!inRootOrSingleton)
+          if ("input" === type && "hidden" === instance.type) {
+            checkAttributeStringCoercion(anyProps.name, "name");
+            var name = null == anyProps.name ? null : "" + anyProps.name;
+            if (
+              "hidden" === anyProps.type &&
+              instance.getAttribute("name") === name
+            )
+              return instance;
+          } else return instance;
+        else if (!instance[internalHoistableMarker])
+          switch (type) {
+            case "meta":
+              if (!instance.hasAttribute("itemprop")) break;
+              return instance;
+            case "link":
+              name = instance.getAttribute("rel");
+              if (
+                "stylesheet" === name &&
+                instance.hasAttribute("data-precedence")
+              )
+                break;
+              else if (
+                name !== anyProps.rel ||
+                instance.getAttribute("href") !==
+                  (null == anyProps.href || "" === anyProps.href
+                    ? null
+                    : anyProps.href) ||
+                instance.getAttribute("crossorigin") !==
+                  (null == anyProps.crossOrigin
+                    ? null
+                    : anyProps.crossOrigin) ||
+                instance.getAttribute("title") !==
+                  (null == anyProps.title ? null : anyProps.title)
+              )
+                break;
+              return instance;
+            case "style":
+              if (instance.hasAttribute("data-precedence")) break;
+              return instance;
+            case "script":
+              name = instance.getAttribute("src");
+              if (
+                (name !== (null == anyProps.src ? null : anyProps.src) ||
+                  instance.getAttribute("type") !==
+                    (null == anyProps.type ? null : anyProps.type) ||
+                  instance.getAttribute("crossorigin") !==
+                    (null == anyProps.crossOrigin
+                      ? null
+                      : anyProps.crossOrigin)) &&
+                name &&
+                instance.hasAttribute("async") &&
+                !instance.hasAttribute("itemprop")
+              )
+                break;
+              return instance;
+            default:
+              return instance;
+          }
+        instance = getNextHydratable(instance.nextSibling);
+        if (null === instance) break;
+      }
+      return null;
+    }
+    function canHydrateTextInstance(instance, text, inRootOrSingleton) {
+      if ("" === text) return null;
+      for (; 3 !== instance.nodeType; ) {
+        if (
+          (1 !== instance.nodeType ||
+            "INPUT" !== instance.nodeName ||
+            "hidden" !== instance.type) &&
+          !inRootOrSingleton
+        )
+          return null;
+        instance = getNextHydratable(instance.nextSibling);
+        if (null === instance) return null;
+      }
+      return instance;
+    }
+    function isSuspenseInstanceFallback(instance) {
+      return (
+        instance.data === SUSPENSE_FALLBACK_START_DATA ||
+        (instance.data === SUSPENSE_PENDING_START_DATA &&
+          instance.ownerDocument.readyState === DOCUMENT_READY_STATE_COMPLETE)
+      );
+    }
+    function registerSuspenseInstanceRetry(instance, callback) {
+      var ownerDocument = instance.ownerDocument;
+      if (
+        instance.data !== SUSPENSE_PENDING_START_DATA ||
+        ownerDocument.readyState === DOCUMENT_READY_STATE_COMPLETE
+      )
+        callback();
+      else {
+        var listener = function () {
+          callback();
+          ownerDocument.removeEventListener("DOMContentLoaded", listener);
+        };
+        ownerDocument.addEventListener("DOMContentLoaded", listener);
+        instance._reactRetry = listener;
+      }
+    }
+    function getNextHydratable(node) {
+      for (; null != node; node = node.nextSibling) {
+        var nodeType = node.nodeType;
+        if (1 === nodeType || 3 === nodeType) break;
+        if (8 === nodeType) {
+          nodeType = node.data;
+          if (
+            nodeType === SUSPENSE_START_DATA ||
+            nodeType === SUSPENSE_FALLBACK_START_DATA ||
+            nodeType === SUSPENSE_PENDING_START_DATA ||
+            nodeType === FORM_STATE_IS_MATCHING ||
+            nodeType === FORM_STATE_IS_NOT_MATCHING
+          )
+            break;
+          if (nodeType === SUSPENSE_END_DATA) return null;
+        }
+      }
+      return node;
+    }
+    function describeHydratableInstanceForDevWarnings(instance) {
+      if (1 === instance.nodeType) {
+        for (
+          var JSCompiler_temp_const = instance.nodeName.toLowerCase(),
+            serverDifferences = {},
+            attributes = instance.attributes,
+            i = 0;
+          i < attributes.length;
+          i++
+        ) {
+          var attr = attributes[i];
+          serverDifferences[getPropNameFromAttributeName(attr.name)] =
+            "style" === attr.name.toLowerCase()
+              ? getStylesObjectFromElement(instance)
+              : attr.value;
+        }
+        return { type: JSCompiler_temp_const, props: serverDifferences };
+      }
+      return 8 === instance.nodeType
+        ? { type: "Suspense", props: {} }
+        : instance.nodeValue;
+    }
+    function diffHydratedTextForDevWarnings(textInstance, text, parentProps) {
+      return null === parentProps ||
+        !0 !== parentProps[SUPPRESS_HYDRATION_WARNING]
+        ? (textInstance.nodeValue === text
+            ? (textInstance = null)
+            : ((text = normalizeMarkupForTextOrAttribute(text)),
+              (textInstance =
+                normalizeMarkupForTextOrAttribute(textInstance.nodeValue) ===
+                text
+                  ? null
+                  : textInstance.nodeValue)),
+          textInstance)
+        : null;
+    }
+    function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {
+      suspenseInstance = suspenseInstance.nextSibling;
+      for (var depth = 0; suspenseInstance; ) {
+        if (8 === suspenseInstance.nodeType) {
+          var data = suspenseInstance.data;
+          if (data === SUSPENSE_END_DATA) {
+            if (0 === depth)
+              return getNextHydratable(suspenseInstance.nextSibling);
+            depth--;
+          } else
+            (data !== SUSPENSE_START_DATA &&
+              data !== SUSPENSE_FALLBACK_START_DATA &&
+              data !== SUSPENSE_PENDING_START_DATA) ||
+              depth++;
+        }
+        suspenseInstance = suspenseInstance.nextSibling;
+      }
+      return null;
+    }
+    function getParentSuspenseInstance(targetInstance) {
+      targetInstance = targetInstance.previousSibling;
+      for (var depth = 0; targetInstance; ) {
+        if (8 === targetInstance.nodeType) {
+          var data = targetInstance.data;
+          if (
+            data === SUSPENSE_START_DATA ||
+            data === SUSPENSE_FALLBACK_START_DATA ||
+            data === SUSPENSE_PENDING_START_DATA
+          ) {
+            if (0 === depth) return targetInstance;
+            depth--;
+          } else data === SUSPENSE_END_DATA && depth++;
+        }
+        targetInstance = targetInstance.previousSibling;
+      }
+      return null;
+    }
+    function commitHydratedContainer(container) {
+      retryIfBlockedOn(container);
+    }
+    function commitHydratedSuspenseInstance(suspenseInstance) {
+      retryIfBlockedOn(suspenseInstance);
+    }
+    function resolveSingletonInstance(
+      type,
+      props,
+      rootContainerInstance,
+      hostContext,
+      validateDOMNestingDev
+    ) {
+      validateDOMNestingDev &&
+        validateDOMNesting(type, hostContext.ancestorInfo);
+      props = getOwnerDocumentFromRootContainer(rootContainerInstance);
+      switch (type) {
+        case "html":
+          type = props.documentElement;
+          if (!type)
+            throw Error(
+              "React expected an <html> element (document.documentElement) to exist in the Document but one was not found. React never removes the documentElement for any Document it renders into so the cause is likely in some other script running on this page."
+            );
+          return type;
+        case "head":
+          type = props.head;
+          if (!type)
+            throw Error(
+              "React expected a <head> element (document.head) to exist in the Document but one was not found. React never removes the head for any Document it renders into so the cause is likely in some other script running on this page."
+            );
+          return type;
+        case "body":
+          type = props.body;
+          if (!type)
+            throw Error(
+              "React expected a <body> element (document.body) to exist in the Document but one was not found. React never removes the body for any Document it renders into so the cause is likely in some other script running on this page."
+            );
+          return type;
+        default:
+          throw Error(
+            "resolveSingletonInstance was called with an element type that is not supported. This is a bug in React."
+          );
+      }
+    }
+    function acquireSingletonInstance(
+      type,
+      props,
+      instance,
+      internalInstanceHandle
+    ) {
+      if (
+        !instance[internalContainerInstanceKey] &&
+        getInstanceFromNode(instance)
+      ) {
+        var tagName = instance.tagName.toLowerCase();
+        console.error(
+          "You are mounting a new %s component when a previous one has not first unmounted. It is an error to render more than one %s component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.",
+          tagName,
+          tagName,
+          tagName
+        );
+      }
+      switch (type) {
+        case "html":
+        case "head":
+        case "body":
+          break;
+        default:
+          console.error(
+            "acquireSingletonInstance was called with an element type that is not supported. This is a bug in React."
+          );
+      }
+      for (tagName = instance.attributes; tagName.length; )
+        instance.removeAttributeNode(tagName[0]);
+      setInitialProperties(instance, type, props);
+      instance[internalInstanceKey] = internalInstanceHandle;
+      instance[internalPropsKey] = props;
+    }
+    function releaseSingletonInstance(instance) {
+      for (var attributes = instance.attributes; attributes.length; )
+        instance.removeAttributeNode(attributes[0]);
+      detachDeletedInstance(instance);
+    }
+    function getHoistableRoot(container) {
+      return "function" === typeof container.getRootNode
+        ? container.getRootNode()
+        : 9 === container.nodeType
+          ? container
+          : container.ownerDocument;
+    }
+    function preconnectAs(rel, href, crossOrigin) {
+      var ownerDocument = globalDocument;
+      if (ownerDocument && "string" === typeof href && href) {
+        var limitedEscapedHref =
+          escapeSelectorAttributeValueInsideDoubleQuotes(href);
+        limitedEscapedHref =
+          'link[rel="' + rel + '"][href="' + limitedEscapedHref + '"]';
+        "string" === typeof crossOrigin &&
+          (limitedEscapedHref += '[crossorigin="' + crossOrigin + '"]');
+        preconnectsSet.has(limitedEscapedHref) ||
+          (preconnectsSet.add(limitedEscapedHref),
+          (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),
+          null === ownerDocument.querySelector(limitedEscapedHref) &&
+            ((href = ownerDocument.createElement("link")),
+            setInitialProperties(href, "link", rel),
+            markNodeAsHoistable(href),
+            ownerDocument.head.appendChild(href)));
+      }
+    }
+    function getResource(type, currentProps, pendingProps, currentResource) {
+      var resourceRoot = (resourceRoot = rootInstanceStackCursor.current)
+        ? getHoistableRoot(resourceRoot)
+        : null;
+      if (!resourceRoot)
+        throw Error(
+          '"resourceRoot" was expected to exist. This is a bug in React.'
+        );
+      switch (type) {
+        case "meta":
+        case "title":
+          return null;
+        case "style":
+          return "string" === typeof pendingProps.precedence &&
+            "string" === typeof pendingProps.href
+            ? ((pendingProps = getStyleKey(pendingProps.href)),
+              (currentProps =
+                getResourcesFromRoot(resourceRoot).hoistableStyles),
+              (currentResource = currentProps.get(pendingProps)),
+              currentResource ||
+                ((currentResource = {
+                  type: "style",
+                  instance: null,
+                  count: 0,
+                  state: null
+                }),
+                currentProps.set(pendingProps, currentResource)),
+              currentResource)
+            : { type: "void", instance: null, count: 0, state: null };
+        case "link":
+          if (
+            "stylesheet" === pendingProps.rel &&
+            "string" === typeof pendingProps.href &&
+            "string" === typeof pendingProps.precedence
+          ) {
+            type = getStyleKey(pendingProps.href);
+            var _styles = getResourcesFromRoot(resourceRoot).hoistableStyles,
+              _resource = _styles.get(type);
+            if (
+              !_resource &&
+              ((resourceRoot = resourceRoot.ownerDocument || resourceRoot),
+              (_resource = {
+                type: "stylesheet",
+                instance: null,
+                count: 0,
+                state: { loading: NotLoaded, preload: null }
+              }),
+              _styles.set(type, _resource),
+              (_styles = resourceRoot.querySelector(
+                getStylesheetSelectorFromKey(type)
+              )) &&
+                !_styles._p &&
+                ((_resource.instance = _styles),
+                (_resource.state.loading = Loaded | Inserted)),
+              !preloadPropsMap.has(type))
+            ) {
+              var preloadProps = {
+                rel: "preload",
+                as: "style",
+                href: pendingProps.href,
+                crossOrigin: pendingProps.crossOrigin,
+                integrity: pendingProps.integrity,
+                media: pendingProps.media,
+                hrefLang: pendingProps.hrefLang,
+                referrerPolicy: pendingProps.referrerPolicy
+              };
+              preloadPropsMap.set(type, preloadProps);
+              _styles ||
+                preloadStylesheet(
+                  resourceRoot,
+                  type,
+                  preloadProps,
+                  _resource.state
+                );
+            }
+            if (currentProps && null === currentResource)
+              throw (
+                ((pendingProps =
+                  "\n\n  - " +
+                  describeLinkForResourceErrorDEV(currentProps) +
+                  "\n  + " +
+                  describeLinkForResourceErrorDEV(pendingProps)),
+                Error(
+                  "Expected <link> not to update to be updated to a stylesheet with precedence. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key." +
+                    pendingProps
+                ))
+              );
+            return _resource;
+          }
+          if (currentProps && null !== currentResource)
+            throw (
+              ((pendingProps =
+                "\n\n  - " +
+                describeLinkForResourceErrorDEV(currentProps) +
+                "\n  + " +
+                describeLinkForResourceErrorDEV(pendingProps)),
+              Error(
+                "Expected stylesheet with precedence to not be updated to a different kind of <link>. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key." +
+                  pendingProps
+              ))
+            );
+          return null;
+        case "script":
+          return (
+            (currentProps = pendingProps.async),
+            (pendingProps = pendingProps.src),
+            "string" === typeof pendingProps &&
+            currentProps &&
+            "function" !== typeof currentProps &&
+            "symbol" !== typeof currentProps
+              ? ((pendingProps = getScriptKey(pendingProps)),
+                (currentProps =
+                  getResourcesFromRoot(resourceRoot).hoistableScripts),
+                (currentResource = currentProps.get(pendingProps)),
+                currentResource ||
+                  ((currentResource = {
+                    type: "script",
+                    instance: null,
+                    count: 0,
+                    state: null
+                  }),
+                  currentProps.set(pendingProps, currentResource)),
+                currentResource)
+              : { type: "void", instance: null, count: 0, state: null }
+          );
+        default:
+          throw Error(
+            'getResource encountered a type it did not expect: "' +
+              type +
+              '". this is a bug in React.'
+          );
+      }
+    }
+    function describeLinkForResourceErrorDEV(props) {
+      var describedProps = 0,
+        description = "<link";
+      "string" === typeof props.rel
+        ? (describedProps++, (description += ' rel="' + props.rel + '"'))
+        : hasOwnProperty.call(props, "rel") &&
+          (describedProps++,
+          (description +=
+            ' rel="' +
+            (null === props.rel ? "null" : "invalid type " + typeof props.rel) +
+            '"'));
+      "string" === typeof props.href
+        ? (describedProps++, (description += ' href="' + props.href + '"'))
+        : hasOwnProperty.call(props, "href") &&
+          (describedProps++,
+          (description +=
+            ' href="' +
+            (null === props.href
+              ? "null"
+              : "invalid type " + typeof props.href) +
+            '"'));
+      "string" === typeof props.precedence
+        ? (describedProps++,
+          (description += ' precedence="' + props.precedence + '"'))
+        : hasOwnProperty.call(props, "precedence") &&
+          (describedProps++,
+          (description +=
+            " precedence={" +
+            (null === props.precedence
+              ? "null"
+              : "invalid type " + typeof props.precedence) +
+            "}"));
+      Object.getOwnPropertyNames(props).length > describedProps &&
+        (description += " ...");
+      return description + " />";
+    }
+    function getStyleKey(href) {
+      return (
+        'href="' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '"'
+      );
+    }
+    function getStylesheetSelectorFromKey(key) {
+      return 'link[rel="stylesheet"][' + key + "]";
+    }
+    function stylesheetPropsFromRawProps(rawProps) {
+      return assign({}, rawProps, {
+        "data-precedence": rawProps.precedence,
+        precedence: null
+      });
+    }
+    function preloadStylesheet(ownerDocument, key, preloadProps, state) {
+      ownerDocument.querySelector(
+        'link[rel="preload"][as="style"][' + key + "]"
+      )
+        ? (state.loading = Loaded)
+        : ((key = ownerDocument.createElement("link")),
+          (state.preload = key),
+          key.addEventListener("load", function () {
+            return (state.loading |= Loaded);
+          }),
+          key.addEventListener("error", function () {
+            return (state.loading |= Errored);
+          }),
+          setInitialProperties(key, "link", preloadProps),
+          markNodeAsHoistable(key),
+          ownerDocument.head.appendChild(key));
+    }
+    function getScriptKey(src) {
+      return (
+        '[src="' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '"]'
+      );
+    }
+    function getScriptSelectorFromKey(key) {
+      return "script[async]" + key;
+    }
+    function acquireResource(hoistableRoot, resource, props) {
+      resource.count++;
+      if (null === resource.instance)
+        switch (resource.type) {
+          case "style":
+            var instance = hoistableRoot.querySelector(
+              'style[data-href~="' +
+                escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +
+                '"]'
+            );
+            if (instance)
+              return (
+                (resource.instance = instance),
+                markNodeAsHoistable(instance),
+                instance
+              );
+            var styleProps = assign({}, props, {
+              "data-href": props.href,
+              "data-precedence": props.precedence,
+              href: null,
+              precedence: null
+            });
+            instance = (
+              hoistableRoot.ownerDocument || hoistableRoot
+            ).createElement("style");
+            markNodeAsHoistable(instance);
+            setInitialProperties(instance, "style", styleProps);
+            insertStylesheet(instance, props.precedence, hoistableRoot);
+            return (resource.instance = instance);
+          case "stylesheet":
+            styleProps = getStyleKey(props.href);
+            var _instance = hoistableRoot.querySelector(
+              getStylesheetSelectorFromKey(styleProps)
+            );
+            if (_instance)
+              return (
+                (resource.state.loading |= Inserted),
+                (resource.instance = _instance),
+                markNodeAsHoistable(_instance),
+                _instance
+              );
+            instance = stylesheetPropsFromRawProps(props);
+            (styleProps = preloadPropsMap.get(styleProps)) &&
+              adoptPreloadPropsForStylesheet(instance, styleProps);
+            _instance = (
+              hoistableRoot.ownerDocument || hoistableRoot
+            ).createElement("link");
+            markNodeAsHoistable(_instance);
+            var linkInstance = _instance;
+            linkInstance._p = new Promise(function (resolve, reject) {
+              linkInstance.onload = resolve;
+              linkInstance.onerror = reject;
+            });
+            setInitialProperties(_instance, "link", instance);
+            resource.state.loading |= Inserted;
+            insertStylesheet(_instance, props.precedence, hoistableRoot);
+            return (resource.instance = _instance);
+          case "script":
+            _instance = getScriptKey(props.src);
+            if (
+              (styleProps = hoistableRoot.querySelector(
+                getScriptSelectorFromKey(_instance)
+              ))
+            )
+              return (
+                (resource.instance = styleProps),
+                markNodeAsHoistable(styleProps),
+                styleProps
+              );
+            instance = props;
+            if ((styleProps = preloadPropsMap.get(_instance)))
+              (instance = assign({}, props)),
+                adoptPreloadPropsForScript(instance, styleProps);
+            hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;
+            styleProps = hoistableRoot.createElement("script");
+            markNodeAsHoistable(styleProps);
+            setInitialProperties(styleProps, "link", instance);
+            hoistableRoot.head.appendChild(styleProps);
+            return (resource.instance = styleProps);
+          case "void":
+            return null;
+          default:
+            throw Error(
+              'acquireResource encountered a resource type it did not expect: "' +
+                resource.type +
+                '". this is a bug in React.'
+            );
+        }
+      else
+        "stylesheet" === resource.type &&
+          (resource.state.loading & Inserted) === NotLoaded &&
+          ((instance = resource.instance),
+          (resource.state.loading |= Inserted),
+          insertStylesheet(instance, props.precedence, hoistableRoot));
+      return resource.instance;
+    }
+    function insertStylesheet(instance, precedence, root) {
+      for (
+        var nodes = root.querySelectorAll(
+            'link[rel="stylesheet"][data-precedence],style[data-precedence]'
+          ),
+          last = nodes.length ? nodes[nodes.length - 1] : null,
+          prior = last,
+          i = 0;
+        i < nodes.length;
+        i++
+      ) {
+        var node = nodes[i];
+        if (node.dataset.precedence === precedence) prior = node;
+        else if (prior !== last) break;
+      }
+      prior
+        ? prior.parentNode.insertBefore(instance, prior.nextSibling)
+        : ((precedence = 9 === root.nodeType ? root.head : root),
+          precedence.insertBefore(instance, precedence.firstChild));
+    }
+    function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {
+      null == stylesheetProps.crossOrigin &&
+        (stylesheetProps.crossOrigin = preloadProps.crossOrigin);
+      null == stylesheetProps.referrerPolicy &&
+        (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);
+      null == stylesheetProps.title &&
+        (stylesheetProps.title = preloadProps.title);
+    }
+    function adoptPreloadPropsForScript(scriptProps, preloadProps) {
+      null == scriptProps.crossOrigin &&
+        (scriptProps.crossOrigin = preloadProps.crossOrigin);
+      null == scriptProps.referrerPolicy &&
+        (scriptProps.referrerPolicy = preloadProps.referrerPolicy);
+      null == scriptProps.integrity &&
+        (scriptProps.integrity = preloadProps.integrity);
+    }
+    function getHydratableHoistableCache(type, keyAttribute, ownerDocument) {
+      if (null === tagCaches) {
+        var cache = new Map();
+        var caches = (tagCaches = new Map());
+        caches.set(ownerDocument, cache);
+      } else
+        (caches = tagCaches),
+          (cache = caches.get(ownerDocument)),
+          cache || ((cache = new Map()), caches.set(ownerDocument, cache));
+      if (cache.has(type)) return cache;
+      cache.set(type, null);
+      ownerDocument = ownerDocument.getElementsByTagName(type);
+      for (caches = 0; caches < ownerDocument.length; caches++) {
+        var node = ownerDocument[caches];
+        if (
+          !(
+            node[internalHoistableMarker] ||
+            node[internalInstanceKey] ||
+            ("link" === type && "stylesheet" === node.getAttribute("rel"))
+          ) &&
+          node.namespaceURI !== SVG_NAMESPACE
+        ) {
+          var nodeKey = node.getAttribute(keyAttribute) || "";
+          nodeKey = type + nodeKey;
+          var existing = cache.get(nodeKey);
+          existing ? existing.push(node) : cache.set(nodeKey, [node]);
+        }
+      }
+      return cache;
+    }
+    function mountHoistable(hoistableRoot, type, instance) {
+      hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;
+      hoistableRoot.head.insertBefore(
+        instance,
+        "title" === type ? hoistableRoot.querySelector("head > title") : null
+      );
+    }
+    function isHostHoistableType(type, props, hostContext) {
+      var outsideHostContainerContext =
+        !hostContext.ancestorInfo.containerTagInScope;
+      if (
+        hostContext.context === HostContextNamespaceSvg ||
+        null != props.itemProp
+      )
+        return (
+          !outsideHostContainerContext ||
+            null == props.itemProp ||
+            ("meta" !== type &&
+              "title" !== type &&
+              "style" !== type &&
+              "link" !== type &&
+              "script" !== type) ||
+            console.error(
+              "Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop. Otherwise, try moving this tag into the <head> or <body> of the Document.",
+              type,
+              type
+            ),
+          !1
+        );
+      switch (type) {
+        case "meta":
+        case "title":
+          return !0;
+        case "style":
+          if (
+            "string" !== typeof props.precedence ||
+            "string" !== typeof props.href ||
+            "" === props.href
+          ) {
+            outsideHostContainerContext &&
+              console.error(
+                'Cannot render a <style> outside the main document without knowing its precedence and a unique href key. React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that does not conflict with the `href` values used in any other hoisted <style> or <link rel="stylesheet" ...> tags.  Note that hoisting <style> tags is considered an advanced feature that most will not use directly. Consider moving the <style> tag to the <head> or consider adding a `precedence="default"` and `href="some unique resource identifier"`.'
+              );
+            break;
+          }
+          return !0;
+        case "link":
+          if (
+            "string" !== typeof props.rel ||
+            "string" !== typeof props.href ||
+            "" === props.href ||
+            props.onLoad ||
+            props.onError
+          ) {
+            if (
+              "stylesheet" === props.rel &&
+              "string" === typeof props.precedence
+            ) {
+              type = props.href;
+              var onError = props.onError,
+                disabled = props.disabled;
+              hostContext = [];
+              props.onLoad && hostContext.push("`onLoad`");
+              onError && hostContext.push("`onError`");
+              null != disabled && hostContext.push("`disabled`");
+              onError = propNamesListJoin(hostContext, "and");
+              onError += 1 === hostContext.length ? " prop" : " props";
+              disabled =
+                1 === hostContext.length ? "an " + onError : "the " + onError;
+              hostContext.length &&
+                console.error(
+                  'React encountered a <link rel="stylesheet" href="%s" ... /> with a `precedence` prop that also included %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',
+                  type,
+                  disabled,
+                  onError
+                );
+            }
+            outsideHostContainerContext &&
+              ("string" !== typeof props.rel ||
+              "string" !== typeof props.href ||
+              "" === props.href
+                ? console.error(
+                    "Cannot render a <link> outside the main document without a `rel` and `href` prop. Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag"
+                  )
+                : (props.onError || props.onLoad) &&
+                  console.error(
+                    "Cannot render a <link> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>."
+                  ));
+            break;
+          }
+          switch (props.rel) {
+            case "stylesheet":
+              return (
+                (type = props.precedence),
+                (props = props.disabled),
+                "string" !== typeof type &&
+                  outsideHostContainerContext &&
+                  console.error(
+                    'Cannot render a <link rel="stylesheet" /> outside the main document without knowing its precedence. Consider adding precedence="default" or moving it into the root <head> tag.'
+                  ),
+                "string" === typeof type && null == props
+              );
+            default:
+              return !0;
+          }
+        case "script":
+          type =
+            props.async &&
+            "function" !== typeof props.async &&
+            "symbol" !== typeof props.async;
+          if (
+            !type ||
+            props.onLoad ||
+            props.onError ||
+            !props.src ||
+            "string" !== typeof props.src
+          ) {
+            outsideHostContainerContext &&
+              (type
+                ? props.onLoad || props.onError
+                  ? console.error(
+                      "Cannot render a <script> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>."
+                    )
+                  : console.error(
+                      "Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop. Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or somewhere in the <body>."
+                    )
+                : console.error(
+                    'Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async="" or moving it into the root <head> tag.'
+                  ));
+            break;
+          }
+          return !0;
+        case "noscript":
+        case "template":
+          outsideHostContainerContext &&
+            console.error(
+              "Cannot render <%s> outside the main document. Try moving it into the root <head> tag.",
+              type
+            );
+      }
+      return !1;
+    }
+    function preloadResource(resource) {
+      return "stylesheet" === resource.type &&
+        (resource.state.loading & Settled) === NotLoaded
+        ? !1
+        : !0;
+    }
+    function noop() {}
+    function suspendResource(hoistableRoot, resource, props) {
+      if (null === suspendedState)
+        throw Error(
+          "Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug."
+        );
+      var state = suspendedState;
+      if (
+        "stylesheet" === resource.type &&
+        ("string" !== typeof props.media ||
+          !1 !== matchMedia(props.media).matches) &&
+        (resource.state.loading & Inserted) === NotLoaded
+      ) {
+        if (null === resource.instance) {
+          var key = getStyleKey(props.href),
+            instance = hoistableRoot.querySelector(
+              getStylesheetSelectorFromKey(key)
+            );
+          if (instance) {
+            hoistableRoot = instance._p;
+            null !== hoistableRoot &&
+              "object" === typeof hoistableRoot &&
+              "function" === typeof hoistableRoot.then &&
+              (state.count++,
+              (state = onUnsuspend.bind(state)),
+              hoistableRoot.then(state, state));
+            resource.state.loading |= Inserted;
+            resource.instance = instance;
+            markNodeAsHoistable(instance);
+            return;
+          }
+          instance = hoistableRoot.ownerDocument || hoistableRoot;
+          props = stylesheetPropsFromRawProps(props);
+          (key = preloadPropsMap.get(key)) &&
+            adoptPreloadPropsForStylesheet(props, key);
+          instance = instance.createElement("link");
+          markNodeAsHoistable(instance);
+          var linkInstance = instance;
+          linkInstance._p = new Promise(function (resolve, reject) {
+            linkInstance.onload = resolve;
+            linkInstance.onerror = reject;
+          });
+          setInitialProperties(instance, "link", props);
+          resource.instance = instance;
+        }
+        null === state.stylesheets && (state.stylesheets = new Map());
+        state.stylesheets.set(resource, hoistableRoot);
+        (hoistableRoot = resource.state.preload) &&
+          (resource.state.loading & Settled) === NotLoaded &&
+          (state.count++,
+          (resource = onUnsuspend.bind(state)),
+          hoistableRoot.addEventListener("load", resource),
+          hoistableRoot.addEventListener("error", resource));
+      }
+    }
+    function waitForCommitToBeReady() {
+      if (null === suspendedState)
+        throw Error(
+          "Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug."
+        );
+      var state = suspendedState;
+      state.stylesheets &&
+        0 === state.count &&
+        insertSuspendedStylesheets(state, state.stylesheets);
+      return 0 < state.count
+        ? function (commit) {
+            var stylesheetTimer = setTimeout(function () {
+              state.stylesheets &&
+                insertSuspendedStylesheets(state, state.stylesheets);
+              if (state.unsuspend) {
+                var unsuspend = state.unsuspend;
+                state.unsuspend = null;
+                unsuspend();
+              }
+            }, 6e4);
+            state.unsuspend = commit;
+            return function () {
+              state.unsuspend = null;
+              clearTimeout(stylesheetTimer);
+            };
+          }
+        : null;
+    }
+    function onUnsuspend() {
+      this.count--;
+      if (0 === this.count)
+        if (this.stylesheets)
+          insertSuspendedStylesheets(this, this.stylesheets);
+        else if (this.unsuspend) {
+          var unsuspend = this.unsuspend;
+          this.unsuspend = null;
+          unsuspend();
+        }
+    }
+    function insertSuspendedStylesheets(state, resources) {
+      state.stylesheets = null;
+      null !== state.unsuspend &&
+        (state.count++,
+        (precedencesByRoot = new Map()),
+        resources.forEach(insertStylesheetIntoRoot, state),
+        (precedencesByRoot = null),
+        onUnsuspend.call(state));
+    }
+    function insertStylesheetIntoRoot(root, resource) {
+      if (!(resource.state.loading & Inserted)) {
+        var precedences = precedencesByRoot.get(root);
+        if (precedences) var last = precedences.get(LAST_PRECEDENCE);
+        else {
+          precedences = new Map();
+          precedencesByRoot.set(root, precedences);
+          for (
+            var nodes = root.querySelectorAll(
+                "link[data-precedence],style[data-precedence]"
+              ),
+              i = 0;
+            i < nodes.length;
+            i++
+          ) {
+            var node = nodes[i];
+            if (
+              "LINK" === node.nodeName ||
+              "not all" !== node.getAttribute("media")
+            )
+              precedences.set(node.dataset.precedence, node), (last = node);
+          }
+          last && precedences.set(LAST_PRECEDENCE, last);
+        }
+        nodes = resource.instance;
+        node = nodes.getAttribute("data-precedence");
+        i = precedences.get(node) || last;
+        i === last && precedences.set(LAST_PRECEDENCE, nodes);
+        precedences.set(node, nodes);
+        this.count++;
+        last = onUnsuspend.bind(this);
+        nodes.addEventListener("load", last);
+        nodes.addEventListener("error", last);
+        i
+          ? i.parentNode.insertBefore(nodes, i.nextSibling)
+          : ((root = 9 === root.nodeType ? root.head : root),
+            root.insertBefore(nodes, root.firstChild));
+        resource.state.loading |= Inserted;
+      }
+    }
+    function FiberRootNode(
+      containerInfo,
+      tag,
+      hydrate,
+      identifierPrefix,
+      onUncaughtError,
+      onCaughtError,
+      onRecoverableError,
+      formState
+    ) {
+      this.tag = 1;
+      this.containerInfo = containerInfo;
+      this.pingCache = this.current = this.pendingChildren = null;
+      this.timeoutHandle = noTimeout;
+      this.callbackNode =
+        this.next =
+        this.pendingContext =
+        this.context =
+        this.cancelPendingCommit =
+          null;
+      this.callbackPriority = 0;
+      this.expirationTimes = createLaneMap(-1);
+      this.entangledLanes =
+        this.shellSuspendCounter =
+        this.errorRecoveryDisabledLanes =
+        this.expiredLanes =
+        this.warmLanes =
+        this.pingedLanes =
+        this.suspendedLanes =
+        this.pendingLanes =
+          0;
+      this.entanglements = createLaneMap(0);
+      this.hiddenUpdates = createLaneMap(null);
+      this.identifierPrefix = identifierPrefix;
+      this.onUncaughtError = onUncaughtError;
+      this.onCaughtError = onCaughtError;
+      this.onRecoverableError = onRecoverableError;
+      this.pooledCache = null;
+      this.pooledCacheLanes = 0;
+      this.formState = formState;
+      this.incompleteTransitions = new Map();
+      this.passiveEffectDuration = this.effectDuration = -0;
+      this.memoizedUpdaters = new Set();
+      containerInfo = this.pendingUpdatersLaneMap = [];
+      for (tag = 0; 31 > tag; tag++) containerInfo.push(new Set());
+      this._debugRootType = hydrate ? "hydrateRoot()" : "createRoot()";
+    }
+    function createFiberRoot(
+      containerInfo,
+      tag,
+      hydrate,
+      initialChildren,
+      hydrationCallbacks,
+      isStrictMode,
+      identifierPrefix,
+      onUncaughtError,
+      onCaughtError,
+      onRecoverableError,
+      transitionCallbacks,
+      formState
+    ) {
+      containerInfo = new FiberRootNode(
+        containerInfo,
+        tag,
+        hydrate,
+        identifierPrefix,
+        onUncaughtError,
+        onCaughtError,
+        onRecoverableError,
+        formState
+      );
+      tag = ConcurrentMode;
+      !0 === isStrictMode && (tag |= StrictLegacyMode | StrictEffectsMode);
+      isDevToolsPresent && (tag |= ProfileMode);
+      isStrictMode = createFiber(3, null, null, tag);
+      containerInfo.current = isStrictMode;
+      isStrictMode.stateNode = containerInfo;
+      tag = createCache();
+      retainCache(tag);
+      containerInfo.pooledCache = tag;
+      retainCache(tag);
+      isStrictMode.memoizedState = {
+        element: initialChildren,
+        isDehydrated: hydrate,
+        cache: tag
+      };
+      initializeUpdateQueue(isStrictMode);
+      return containerInfo;
+    }
+    function getContextForSubtree(parentComponent) {
+      if (!parentComponent) return emptyContextObject;
+      parentComponent = emptyContextObject;
+      return parentComponent;
+    }
+    function updateContainerImpl(
+      rootFiber,
+      lane,
+      element,
+      container,
+      parentComponent,
+      callback
+    ) {
+      if (
+        injectedHook &&
+        "function" === typeof injectedHook.onScheduleFiberRoot
+      )
+        try {
+          injectedHook.onScheduleFiberRoot(rendererID, container, element);
+        } catch (err) {
+          hasLoggedError ||
+            ((hasLoggedError = !0),
+            console.error(
+              "React instrumentation encountered an error: %s",
+              err
+            ));
+        }
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markRenderScheduled &&
+        injectedProfilingHooks.markRenderScheduled(lane);
+      parentComponent = getContextForSubtree(parentComponent);
+      null === container.context
+        ? (container.context = parentComponent)
+        : (container.pendingContext = parentComponent);
+      isRendering &&
+        null !== current &&
+        !didWarnAboutNestedUpdates &&
+        ((didWarnAboutNestedUpdates = !0),
+        console.error(
+          "Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.\n\nCheck the render method of %s.",
+          getComponentNameFromFiber(current) || "Unknown"
+        ));
+      container = createUpdate(lane);
+      container.payload = { element: element };
+      callback = void 0 === callback ? null : callback;
+      null !== callback &&
+        ("function" !== typeof callback &&
+          console.error(
+            "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+            callback
+          ),
+        (container.callback = callback));
+      element = enqueueUpdate(rootFiber, container, lane);
+      null !== element &&
+        (scheduleUpdateOnFiber(element, rootFiber, lane),
+        entangleTransitions(element, rootFiber, lane));
+    }
+    function markRetryLaneImpl(fiber, retryLane) {
+      fiber = fiber.memoizedState;
+      if (null !== fiber && null !== fiber.dehydrated) {
+        var a = fiber.retryLane;
+        fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;
+      }
+    }
+    function markRetryLaneIfNotHydrated(fiber, retryLane) {
+      markRetryLaneImpl(fiber, retryLane);
+      (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);
+    }
+    function attemptContinuousHydration(fiber) {
+      if (13 === fiber.tag) {
+        var root = enqueueConcurrentRenderForLane(fiber, 67108864);
+        null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);
+        markRetryLaneIfNotHydrated(fiber, 67108864);
+      }
+    }
+    function getCurrentFiberForDevTools() {
+      return current;
+    }
+    function getLaneLabelMap() {
+      for (var map = new Map(), lane = 1, index = 0; 31 > index; index++) {
+        var label = getLabelForLane(lane);
+        map.set(lane, label);
+        lane *= 2;
+      }
+      return map;
+    }
+    function dispatchDiscreteEvent(
+      domEventName,
+      eventSystemFlags,
+      container,
+      nativeEvent
+    ) {
+      var prevTransition = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      var previousPriority = ReactDOMSharedInternals.p;
+      try {
+        (ReactDOMSharedInternals.p = DiscreteEventPriority),
+          dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
+      } finally {
+        (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = prevTransition);
+      }
+    }
+    function dispatchContinuousEvent(
+      domEventName,
+      eventSystemFlags,
+      container,
+      nativeEvent
+    ) {
+      var prevTransition = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      var previousPriority = ReactDOMSharedInternals.p;
+      try {
+        (ReactDOMSharedInternals.p = ContinuousEventPriority),
+          dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
+      } finally {
+        (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = prevTransition);
+      }
+    }
+    function dispatchEvent(
+      domEventName,
+      eventSystemFlags,
+      targetContainer,
+      nativeEvent
+    ) {
+      if (_enabled) {
+        var blockedOn = findInstanceBlockingEvent(nativeEvent);
+        if (null === blockedOn)
+          dispatchEventForPluginEventSystem(
+            domEventName,
+            eventSystemFlags,
+            nativeEvent,
+            return_targetInst,
+            targetContainer
+          ),
+            clearIfContinuousEvent(domEventName, nativeEvent);
+        else if (
+          queueIfContinuousEvent(
+            blockedOn,
+            domEventName,
+            eventSystemFlags,
+            targetContainer,
+            nativeEvent
+          )
+        )
+          nativeEvent.stopPropagation();
+        else if (
+          (clearIfContinuousEvent(domEventName, nativeEvent),
+          eventSystemFlags & 4 &&
+            -1 < discreteReplayableEvents.indexOf(domEventName))
+        ) {
+          for (; null !== blockedOn; ) {
+            var fiber = getInstanceFromNode(blockedOn);
+            if (null !== fiber)
+              switch (fiber.tag) {
+                case 3:
+                  fiber = fiber.stateNode;
+                  if (fiber.current.memoizedState.isDehydrated) {
+                    var lanes = getHighestPriorityLanes(fiber.pendingLanes);
+                    if (0 !== lanes) {
+                      var root = fiber;
+                      root.pendingLanes |= 2;
+                      for (root.entangledLanes |= 2; lanes; ) {
+                        var lane = 1 << (31 - clz32(lanes));
+                        root.entanglements[1] |= lane;
+                        lanes &= ~lane;
+                      }
+                      ensureRootIsScheduled(fiber);
+                      (executionContext & (RenderContext | CommitContext)) ===
+                        NoContext &&
+                        ((workInProgressRootRenderTargetTime =
+                          now$1() + RENDER_TIMEOUT_MS),
+                        flushSyncWorkAcrossRoots_impl(0, !1));
+                    }
+                  }
+                  break;
+                case 13:
+                  (root = enqueueConcurrentRenderForLane(fiber, 2)),
+                    null !== root && scheduleUpdateOnFiber(root, fiber, 2),
+                    flushSyncWork$1(),
+                    markRetryLaneIfNotHydrated(fiber, 2);
+              }
+            fiber = findInstanceBlockingEvent(nativeEvent);
+            null === fiber &&
+              dispatchEventForPluginEventSystem(
+                domEventName,
+                eventSystemFlags,
+                nativeEvent,
+                return_targetInst,
+                targetContainer
+              );
+            if (fiber === blockedOn) break;
+            blockedOn = fiber;
+          }
+          null !== blockedOn && nativeEvent.stopPropagation();
+        } else
+          dispatchEventForPluginEventSystem(
+            domEventName,
+            eventSystemFlags,
+            nativeEvent,
+            null,
+            targetContainer
+          );
+      }
+    }
+    function findInstanceBlockingEvent(nativeEvent) {
+      nativeEvent = getEventTarget(nativeEvent);
+      return findInstanceBlockingTarget(nativeEvent);
+    }
+    function findInstanceBlockingTarget(targetNode) {
+      return_targetInst = null;
+      targetNode = getClosestInstanceFromNode(targetNode);
+      if (null !== targetNode) {
+        var nearestMounted = getNearestMountedFiber(targetNode);
+        if (null === nearestMounted) targetNode = null;
+        else {
+          var tag = nearestMounted.tag;
+          if (13 === tag) {
+            targetNode = getSuspenseInstanceFromFiber(nearestMounted);
+            if (null !== targetNode) return targetNode;
+            targetNode = null;
+          } else if (3 === tag) {
+            if (nearestMounted.stateNode.current.memoizedState.isDehydrated)
+              return 3 === nearestMounted.tag
+                ? nearestMounted.stateNode.containerInfo
+                : null;
+            targetNode = null;
+          } else nearestMounted !== targetNode && (targetNode = null);
+        }
+      }
+      return_targetInst = targetNode;
+      return null;
+    }
+    function getEventPriority(domEventName) {
+      switch (domEventName) {
+        case "beforetoggle":
+        case "cancel":
+        case "click":
+        case "close":
+        case "contextmenu":
+        case "copy":
+        case "cut":
+        case "auxclick":
+        case "dblclick":
+        case "dragend":
+        case "dragstart":
+        case "drop":
+        case "focusin":
+        case "focusout":
+        case "input":
+        case "invalid":
+        case "keydown":
+        case "keypress":
+        case "keyup":
+        case "mousedown":
+        case "mouseup":
+        case "paste":
+        case "pause":
+        case "play":
+        case "pointercancel":
+        case "pointerdown":
+        case "pointerup":
+        case "ratechange":
+        case "reset":
+        case "resize":
+        case "seeked":
+        case "submit":
+        case "toggle":
+        case "touchcancel":
+        case "touchend":
+        case "touchstart":
+        case "volumechange":
+        case "change":
+        case "selectionchange":
+        case "textInput":
+        case "compositionstart":
+        case "compositionend":
+        case "compositionupdate":
+        case "beforeblur":
+        case "afterblur":
+        case "beforeinput":
+        case "blur":
+        case "fullscreenchange":
+        case "focus":
+        case "hashchange":
+        case "popstate":
+        case "select":
+        case "selectstart":
+          return DiscreteEventPriority;
+        case "drag":
+        case "dragenter":
+        case "dragexit":
+        case "dragleave":
+        case "dragover":
+        case "mousemove":
+        case "mouseout":
+        case "mouseover":
+        case "pointermove":
+        case "pointerout":
+        case "pointerover":
+        case "scroll":
+        case "touchmove":
+        case "wheel":
+        case "mouseenter":
+        case "mouseleave":
+        case "pointerenter":
+        case "pointerleave":
+          return ContinuousEventPriority;
+        case "message":
+          switch (getCurrentPriorityLevel()) {
+            case ImmediatePriority:
+              return DiscreteEventPriority;
+            case UserBlockingPriority:
+              return ContinuousEventPriority;
+            case NormalPriority$1:
+            case LowPriority:
+              return DefaultEventPriority;
+            case IdlePriority:
+              return IdleEventPriority;
+            default:
+              return DefaultEventPriority;
+          }
+        default:
+          return DefaultEventPriority;
+      }
+    }
+    function clearIfContinuousEvent(domEventName, nativeEvent) {
+      switch (domEventName) {
+        case "focusin":
+        case "focusout":
+          queuedFocus = null;
+          break;
+        case "dragenter":
+        case "dragleave":
+          queuedDrag = null;
+          break;
+        case "mouseover":
+        case "mouseout":
+          queuedMouse = null;
+          break;
+        case "pointerover":
+        case "pointerout":
+          queuedPointers.delete(nativeEvent.pointerId);
+          break;
+        case "gotpointercapture":
+        case "lostpointercapture":
+          queuedPointerCaptures.delete(nativeEvent.pointerId);
+      }
+    }
+    function accumulateOrCreateContinuousQueuedReplayableEvent(
+      existingQueuedEvent,
+      blockedOn,
+      domEventName,
+      eventSystemFlags,
+      targetContainer,
+      nativeEvent
+    ) {
+      if (
+        null === existingQueuedEvent ||
+        existingQueuedEvent.nativeEvent !== nativeEvent
+      )
+        return (
+          (existingQueuedEvent = {
+            blockedOn: blockedOn,
+            domEventName: domEventName,
+            eventSystemFlags: eventSystemFlags,
+            nativeEvent: nativeEvent,
+            targetContainers: [targetContainer]
+          }),
+          null !== blockedOn &&
+            ((blockedOn = getInstanceFromNode(blockedOn)),
+            null !== blockedOn && attemptContinuousHydration(blockedOn)),
+          existingQueuedEvent
+        );
+      existingQueuedEvent.eventSystemFlags |= eventSystemFlags;
+      blockedOn = existingQueuedEvent.targetContainers;
+      null !== targetContainer &&
+        -1 === blockedOn.indexOf(targetContainer) &&
+        blockedOn.push(targetContainer);
+      return existingQueuedEvent;
+    }
+    function queueIfContinuousEvent(
+      blockedOn,
+      domEventName,
+      eventSystemFlags,
+      targetContainer,
+      nativeEvent
+    ) {
+      switch (domEventName) {
+        case "focusin":
+          return (
+            (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(
+              queuedFocus,
+              blockedOn,
+              domEventName,
+              eventSystemFlags,
+              targetContainer,
+              nativeEvent
+            )),
+            !0
+          );
+        case "dragenter":
+          return (
+            (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(
+              queuedDrag,
+              blockedOn,
+              domEventName,
+              eventSystemFlags,
+              targetContainer,
+              nativeEvent
+            )),
+            !0
+          );
+        case "mouseover":
+          return (
+            (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(
+              queuedMouse,
+              blockedOn,
+              domEventName,
+              eventSystemFlags,
+              targetContainer,
+              nativeEvent
+            )),
+            !0
+          );
+        case "pointerover":
+          var pointerId = nativeEvent.pointerId;
+          queuedPointers.set(
+            pointerId,
+            accumulateOrCreateContinuousQueuedReplayableEvent(
+              queuedPointers.get(pointerId) || null,
+              blockedOn,
+              domEventName,
+              eventSystemFlags,
+              targetContainer,
+              nativeEvent
+            )
+          );
+          return !0;
+        case "gotpointercapture":
+          return (
+            (pointerId = nativeEvent.pointerId),
+            queuedPointerCaptures.set(
+              pointerId,
+              accumulateOrCreateContinuousQueuedReplayableEvent(
+                queuedPointerCaptures.get(pointerId) || null,
+                blockedOn,
+                domEventName,
+                eventSystemFlags,
+                targetContainer,
+                nativeEvent
+              )
+            ),
+            !0
+          );
+      }
+      return !1;
+    }
+    function attemptExplicitHydrationTarget(queuedTarget) {
+      var targetInst = getClosestInstanceFromNode(queuedTarget.target);
+      if (null !== targetInst) {
+        var nearestMounted = getNearestMountedFiber(targetInst);
+        if (null !== nearestMounted)
+          if (((targetInst = nearestMounted.tag), 13 === targetInst)) {
+            if (
+              ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),
+              null !== targetInst)
+            ) {
+              queuedTarget.blockedOn = targetInst;
+              runWithPriority(queuedTarget.priority, function () {
+                if (13 === nearestMounted.tag) {
+                  var lane = requestUpdateLane(nearestMounted);
+                  lane = getBumpedLaneForHydrationByLane(lane);
+                  var root = enqueueConcurrentRenderForLane(
+                    nearestMounted,
+                    lane
+                  );
+                  null !== root &&
+                    scheduleUpdateOnFiber(root, nearestMounted, lane);
+                  markRetryLaneIfNotHydrated(nearestMounted, lane);
+                }
+              });
+              return;
+            }
+          } else if (
+            3 === targetInst &&
+            nearestMounted.stateNode.current.memoizedState.isDehydrated
+          ) {
+            queuedTarget.blockedOn =
+              3 === nearestMounted.tag
+                ? nearestMounted.stateNode.containerInfo
+                : null;
+            return;
+          }
+      }
+      queuedTarget.blockedOn = null;
+    }
+    function attemptReplayContinuousQueuedEvent(queuedEvent) {
+      if (null !== queuedEvent.blockedOn) return !1;
+      for (
+        var targetContainers = queuedEvent.targetContainers;
+        0 < targetContainers.length;
+
+      ) {
+        var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);
+        if (null === nextBlockedOn) {
+          nextBlockedOn = queuedEvent.nativeEvent;
+          var nativeEventClone = new nextBlockedOn.constructor(
+              nextBlockedOn.type,
+              nextBlockedOn
+            ),
+            event = nativeEventClone;
+          null !== currentReplayingEvent &&
+            console.error(
+              "Expected currently replaying event to be null. This error is likely caused by a bug in React. Please file an issue."
+            );
+          currentReplayingEvent = event;
+          nextBlockedOn.target.dispatchEvent(nativeEventClone);
+          null === currentReplayingEvent &&
+            console.error(
+              "Expected currently replaying event to not be null. This error is likely caused by a bug in React. Please file an issue."
+            );
+          currentReplayingEvent = null;
+        } else
+          return (
+            (targetContainers = getInstanceFromNode(nextBlockedOn)),
+            null !== targetContainers &&
+              attemptContinuousHydration(targetContainers),
+            (queuedEvent.blockedOn = nextBlockedOn),
+            !1
+          );
+        targetContainers.shift();
+      }
+      return !0;
+    }
+    function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {
+      attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);
+    }
+    function replayUnblockedEvents() {
+      hasScheduledReplayAttempt = !1;
+      null !== queuedFocus &&
+        attemptReplayContinuousQueuedEvent(queuedFocus) &&
+        (queuedFocus = null);
+      null !== queuedDrag &&
+        attemptReplayContinuousQueuedEvent(queuedDrag) &&
+        (queuedDrag = null);
+      null !== queuedMouse &&
+        attemptReplayContinuousQueuedEvent(queuedMouse) &&
+        (queuedMouse = null);
+      queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);
+      queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);
+    }
+    function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {
+      queuedEvent.blockedOn === unblocked &&
+        ((queuedEvent.blockedOn = null),
+        hasScheduledReplayAttempt ||
+          ((hasScheduledReplayAttempt = !0),
+          Scheduler.unstable_scheduleCallback(
+            Scheduler.unstable_NormalPriority,
+            replayUnblockedEvents
+          )));
+    }
+    function scheduleReplayQueueIfNeeded(formReplayingQueue) {
+      lastScheduledReplayQueue !== formReplayingQueue &&
+        ((lastScheduledReplayQueue = formReplayingQueue),
+        Scheduler.unstable_scheduleCallback(
+          Scheduler.unstable_NormalPriority,
+          function () {
+            lastScheduledReplayQueue === formReplayingQueue &&
+              (lastScheduledReplayQueue = null);
+            for (var i = 0; i < formReplayingQueue.length; i += 3) {
+              var form = formReplayingQueue[i],
+                submitterOrAction = formReplayingQueue[i + 1],
+                formData = formReplayingQueue[i + 2];
+              if ("function" !== typeof submitterOrAction)
+                if (
+                  null === findInstanceBlockingTarget(submitterOrAction || form)
+                )
+                  continue;
+                else break;
+              var formInst = getInstanceFromNode(form);
+              null !== formInst &&
+                (formReplayingQueue.splice(i, 3),
+                (i -= 3),
+                (form = {
+                  pending: !0,
+                  data: formData,
+                  method: form.method,
+                  action: submitterOrAction
+                }),
+                Object.freeze(form),
+                startHostTransition(
+                  formInst,
+                  form,
+                  submitterOrAction,
+                  formData
+                ));
+            }
+          }
+        ));
+    }
+    function retryIfBlockedOn(unblocked) {
+      function unblock(queuedEvent) {
+        return scheduleCallbackIfUnblocked(queuedEvent, unblocked);
+      }
+      null !== queuedFocus &&
+        scheduleCallbackIfUnblocked(queuedFocus, unblocked);
+      null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);
+      null !== queuedMouse &&
+        scheduleCallbackIfUnblocked(queuedMouse, unblocked);
+      queuedPointers.forEach(unblock);
+      queuedPointerCaptures.forEach(unblock);
+      for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {
+        var queuedTarget = queuedExplicitHydrationTargets[i];
+        queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);
+      }
+      for (
+        ;
+        0 < queuedExplicitHydrationTargets.length &&
+        ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);
+
+      )
+        attemptExplicitHydrationTarget(i),
+          null === i.blockedOn && queuedExplicitHydrationTargets.shift();
+      i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;
+      if (null != i)
+        for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {
+          var form = i[queuedTarget],
+            submitterOrAction = i[queuedTarget + 1],
+            formProps = form[internalPropsKey] || null;
+          if ("function" === typeof submitterOrAction)
+            formProps || scheduleReplayQueueIfNeeded(i);
+          else if (formProps) {
+            var action = null;
+            if (
+              submitterOrAction &&
+              submitterOrAction.hasAttribute("formAction")
+            )
+              if (
+                ((form = submitterOrAction),
+                (formProps = submitterOrAction[internalPropsKey] || null))
+              )
+                action = formProps.formAction;
+              else {
+                if (null !== findInstanceBlockingTarget(form)) continue;
+              }
+            else action = formProps.action;
+            "function" === typeof action
+              ? (i[queuedTarget + 1] = action)
+              : (i.splice(queuedTarget, 3), (queuedTarget -= 3));
+            scheduleReplayQueueIfNeeded(i);
+          }
+        }
+    }
+    function ReactDOMRoot(internalRoot) {
+      this._internalRoot = internalRoot;
+    }
+    function ReactDOMHydrationRoot(internalRoot) {
+      this._internalRoot = internalRoot;
+    }
+    function warnIfReactDOMContainerInDEV(container) {
+      container[internalContainerInstanceKey] &&
+        (container._reactRootContainer
+          ? console.error(
+              "You are calling ReactDOMClient.createRoot() on a container that was previously passed to ReactDOM.render(). This is not supported."
+            )
+          : console.error(
+              "You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it."
+            ));
+    }
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+    var Scheduler = require("scheduler"),
+      React = require("react"),
+      ReactDOM = require("react-dom"),
+      assign = Object.assign,
+      REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+      REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+      REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy");
+    Symbol.for("react.scope");
+    var REACT_ACTIVITY_TYPE = Symbol.for("react.activity");
+    Symbol.for("react.legacy_hidden");
+    Symbol.for("react.tracing_marker");
+    var REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel");
+    Symbol.for("react.view_transition");
+    var MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      isArrayImpl = Array.isArray,
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      ReactDOMSharedInternals =
+        ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      NotPending = Object.freeze({
+        pending: !1,
+        data: null,
+        method: null,
+        action: null
+      }),
+      valueStack = [];
+    var fiberStack = [];
+    var index$jscomp$0 = -1,
+      contextStackCursor = createCursor(null),
+      contextFiberStackCursor = createCursor(null),
+      rootInstanceStackCursor = createCursor(null),
+      hostTransitionProviderCursor = createCursor(null),
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      scheduleCallback$3 = Scheduler.unstable_scheduleCallback,
+      cancelCallback$1 = Scheduler.unstable_cancelCallback,
+      shouldYield = Scheduler.unstable_shouldYield,
+      requestPaint = Scheduler.unstable_requestPaint,
+      now$1 = Scheduler.unstable_now,
+      getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,
+      ImmediatePriority = Scheduler.unstable_ImmediatePriority,
+      UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,
+      NormalPriority$1 = Scheduler.unstable_NormalPriority,
+      LowPriority = Scheduler.unstable_LowPriority,
+      IdlePriority = Scheduler.unstable_IdlePriority,
+      log$1 = Scheduler.log,
+      unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,
+      rendererID = null,
+      injectedHook = null,
+      injectedProfilingHooks = null,
+      hasLoggedError = !1,
+      isDevToolsPresent = "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__,
+      clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+      log = Math.log,
+      LN2 = Math.LN2,
+      nextTransitionLane = 256,
+      nextRetryLane = 4194304,
+      DiscreteEventPriority = 2,
+      ContinuousEventPriority = 8,
+      DefaultEventPriority = 32,
+      IdleEventPriority = 268435456,
+      randomKey = Math.random().toString(36).slice(2),
+      internalInstanceKey = "__reactFiber$" + randomKey,
+      internalPropsKey = "__reactProps$" + randomKey,
+      internalContainerInstanceKey = "__reactContainer$" + randomKey,
+      internalEventHandlersKey = "__reactEvents$" + randomKey,
+      internalEventHandlerListenersKey = "__reactListeners$" + randomKey,
+      internalEventHandlesSetKey = "__reactHandles$" + randomKey,
+      internalRootNodeResourcesKey = "__reactResources$" + randomKey,
+      internalHoistableMarker = "__reactMarker$" + randomKey,
+      allNativeEvents = new Set(),
+      registrationNameDependencies = {},
+      possibleRegistrationNames = {},
+      hasReadOnlyValue = {
+        button: !0,
+        checkbox: !0,
+        image: !0,
+        hidden: !0,
+        radio: !0,
+        reset: !0,
+        submit: !0
+      },
+      VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+        "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      illegalAttributeNameCache = {},
+      validatedAttributeNameCache = {},
+      disabledDepth = 0,
+      prevLog,
+      prevInfo,
+      prevWarn,
+      prevError,
+      prevGroup,
+      prevGroupCollapsed,
+      prevGroupEnd;
+    disabledLog.__reactDisabledLog = !0;
+    var prefix,
+      suffix,
+      reentry = !1;
+    var componentFrameCache = new (
+      "function" === typeof WeakMap ? WeakMap : Map
+    )();
+    var current = null,
+      isRendering = !1,
+      escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\n"\\]/g,
+      didWarnValueDefaultValue$1 = !1,
+      didWarnCheckedDefaultChecked = !1,
+      didWarnSelectedSetOnOption = !1,
+      didWarnInvalidChild = !1,
+      didWarnInvalidInnerHTML = !1;
+    var didWarnValueDefaultValue = !1;
+    var valuePropNames = ["value", "defaultValue"],
+      didWarnValDefaultVal = !1,
+      needsEscaping = /["'&<>\n\t]|^\s|\s$/,
+      specialTags =
+        "address applet area article aside base basefont bgsound blockquote body br button caption center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p param plaintext pre script section select source style summary table tbody td template textarea tfoot th thead title tr track ul wbr xmp".split(
+          " "
+        ),
+      inScopeTags =
+        "applet caption html table td th marquee object template foreignObject desc title".split(
+          " "
+        ),
+      buttonScopeTags = inScopeTags.concat(["button"]),
+      impliedEndTags = "dd dt li option optgroup p rp rt".split(" "),
+      emptyAncestorInfoDev = {
+        current: null,
+        formTag: null,
+        aTagInScope: null,
+        buttonTagInScope: null,
+        nobrTagInScope: null,
+        pTagInButtonScope: null,
+        listItemTagAutoclosing: null,
+        dlItemTagAutoclosing: null,
+        containerTagInScope: null,
+        implicitRootScope: !1
+      },
+      didWarn = {},
+      shorthandToLonghand = {
+        animation:
+          "animationDelay animationDirection animationDuration animationFillMode animationIterationCount animationName animationPlayState animationTimingFunction".split(
+            " "
+          ),
+        background:
+          "backgroundAttachment backgroundClip backgroundColor backgroundImage backgroundOrigin backgroundPositionX backgroundPositionY backgroundRepeat backgroundSize".split(
+            " "
+          ),
+        backgroundPosition: ["backgroundPositionX", "backgroundPositionY"],
+        border:
+          "borderBottomColor borderBottomStyle borderBottomWidth borderImageOutset borderImageRepeat borderImageSlice borderImageSource borderImageWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderTopColor borderTopStyle borderTopWidth".split(
+            " "
+          ),
+        borderBlockEnd: [
+          "borderBlockEndColor",
+          "borderBlockEndStyle",
+          "borderBlockEndWidth"
+        ],
+        borderBlockStart: [
+          "borderBlockStartColor",
+          "borderBlockStartStyle",
+          "borderBlockStartWidth"
+        ],
+        borderBottom: [
+          "borderBottomColor",
+          "borderBottomStyle",
+          "borderBottomWidth"
+        ],
+        borderColor: [
+          "borderBottomColor",
+          "borderLeftColor",
+          "borderRightColor",
+          "borderTopColor"
+        ],
+        borderImage: [
+          "borderImageOutset",
+          "borderImageRepeat",
+          "borderImageSlice",
+          "borderImageSource",
+          "borderImageWidth"
+        ],
+        borderInlineEnd: [
+          "borderInlineEndColor",
+          "borderInlineEndStyle",
+          "borderInlineEndWidth"
+        ],
+        borderInlineStart: [
+          "borderInlineStartColor",
+          "borderInlineStartStyle",
+          "borderInlineStartWidth"
+        ],
+        borderLeft: ["borderLeftColor", "borderLeftStyle", "borderLeftWidth"],
+        borderRadius: [
+          "borderBottomLeftRadius",
+          "borderBottomRightRadius",
+          "borderTopLeftRadius",
+          "borderTopRightRadius"
+        ],
+        borderRight: [
+          "borderRightColor",
+          "borderRightStyle",
+          "borderRightWidth"
+        ],
+        borderStyle: [
+          "borderBottomStyle",
+          "borderLeftStyle",
+          "borderRightStyle",
+          "borderTopStyle"
+        ],
+        borderTop: ["borderTopColor", "borderTopStyle", "borderTopWidth"],
+        borderWidth: [
+          "borderBottomWidth",
+          "borderLeftWidth",
+          "borderRightWidth",
+          "borderTopWidth"
+        ],
+        columnRule: ["columnRuleColor", "columnRuleStyle", "columnRuleWidth"],
+        columns: ["columnCount", "columnWidth"],
+        flex: ["flexBasis", "flexGrow", "flexShrink"],
+        flexFlow: ["flexDirection", "flexWrap"],
+        font: "fontFamily fontFeatureSettings fontKerning fontLanguageOverride fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition fontWeight lineHeight".split(
+          " "
+        ),
+        fontVariant:
+          "fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition".split(
+            " "
+          ),
+        gap: ["columnGap", "rowGap"],
+        grid: "gridAutoColumns gridAutoFlow gridAutoRows gridTemplateAreas gridTemplateColumns gridTemplateRows".split(
+          " "
+        ),
+        gridArea: [
+          "gridColumnEnd",
+          "gridColumnStart",
+          "gridRowEnd",
+          "gridRowStart"
+        ],
+        gridColumn: ["gridColumnEnd", "gridColumnStart"],
+        gridColumnGap: ["columnGap"],
+        gridGap: ["columnGap", "rowGap"],
+        gridRow: ["gridRowEnd", "gridRowStart"],
+        gridRowGap: ["rowGap"],
+        gridTemplate: [
+          "gridTemplateAreas",
+          "gridTemplateColumns",
+          "gridTemplateRows"
+        ],
+        listStyle: ["listStyleImage", "listStylePosition", "listStyleType"],
+        margin: ["marginBottom", "marginLeft", "marginRight", "marginTop"],
+        marker: ["markerEnd", "markerMid", "markerStart"],
+        mask: "maskClip maskComposite maskImage maskMode maskOrigin maskPositionX maskPositionY maskRepeat maskSize".split(
+          " "
+        ),
+        maskPosition: ["maskPositionX", "maskPositionY"],
+        outline: ["outlineColor", "outlineStyle", "outlineWidth"],
+        overflow: ["overflowX", "overflowY"],
+        padding: ["paddingBottom", "paddingLeft", "paddingRight", "paddingTop"],
+        placeContent: ["alignContent", "justifyContent"],
+        placeItems: ["alignItems", "justifyItems"],
+        placeSelf: ["alignSelf", "justifySelf"],
+        textDecoration: [
+          "textDecorationColor",
+          "textDecorationLine",
+          "textDecorationStyle"
+        ],
+        textEmphasis: ["textEmphasisColor", "textEmphasisStyle"],
+        transition: [
+          "transitionDelay",
+          "transitionDuration",
+          "transitionProperty",
+          "transitionTimingFunction"
+        ],
+        wordWrap: ["overflowWrap"]
+      },
+      uppercasePattern = /([A-Z])/g,
+      msPattern$1 = /^ms-/,
+      badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,
+      msPattern = /^-ms-/,
+      hyphenPattern = /-(.)/g,
+      badStyleValueWithSemicolonPattern = /;\s*$/,
+      warnedStyleNames = {},
+      warnedStyleValues = {},
+      warnedForNaNValue = !1,
+      warnedForInfinityValue = !1,
+      unitlessNumbers = new Set(
+        "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+          " "
+        )
+      ),
+      MATH_NAMESPACE = "http://www.w3.org/1998/Math/MathML",
+      SVG_NAMESPACE = "http://www.w3.org/2000/svg",
+      aliases = new Map([
+        ["acceptCharset", "accept-charset"],
+        ["htmlFor", "for"],
+        ["httpEquiv", "http-equiv"],
+        ["crossOrigin", "crossorigin"],
+        ["accentHeight", "accent-height"],
+        ["alignmentBaseline", "alignment-baseline"],
+        ["arabicForm", "arabic-form"],
+        ["baselineShift", "baseline-shift"],
+        ["capHeight", "cap-height"],
+        ["clipPath", "clip-path"],
+        ["clipRule", "clip-rule"],
+        ["colorInterpolation", "color-interpolation"],
+        ["colorInterpolationFilters", "color-interpolation-filters"],
+        ["colorProfile", "color-profile"],
+        ["colorRendering", "color-rendering"],
+        ["dominantBaseline", "dominant-baseline"],
+        ["enableBackground", "enable-background"],
+        ["fillOpacity", "fill-opacity"],
+        ["fillRule", "fill-rule"],
+        ["floodColor", "flood-color"],
+        ["floodOpacity", "flood-opacity"],
+        ["fontFamily", "font-family"],
+        ["fontSize", "font-size"],
+        ["fontSizeAdjust", "font-size-adjust"],
+        ["fontStretch", "font-stretch"],
+        ["fontStyle", "font-style"],
+        ["fontVariant", "font-variant"],
+        ["fontWeight", "font-weight"],
+        ["glyphName", "glyph-name"],
+        ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+        ["glyphOrientationVertical", "glyph-orientation-vertical"],
+        ["horizAdvX", "horiz-adv-x"],
+        ["horizOriginX", "horiz-origin-x"],
+        ["imageRendering", "image-rendering"],
+        ["letterSpacing", "letter-spacing"],
+        ["lightingColor", "lighting-color"],
+        ["markerEnd", "marker-end"],
+        ["markerMid", "marker-mid"],
+        ["markerStart", "marker-start"],
+        ["overlinePosition", "overline-position"],
+        ["overlineThickness", "overline-thickness"],
+        ["paintOrder", "paint-order"],
+        ["panose-1", "panose-1"],
+        ["pointerEvents", "pointer-events"],
+        ["renderingIntent", "rendering-intent"],
+        ["shapeRendering", "shape-rendering"],
+        ["stopColor", "stop-color"],
+        ["stopOpacity", "stop-opacity"],
+        ["strikethroughPosition", "strikethrough-position"],
+        ["strikethroughThickness", "strikethrough-thickness"],
+        ["strokeDasharray", "stroke-dasharray"],
+        ["strokeDashoffset", "stroke-dashoffset"],
+        ["strokeLinecap", "stroke-linecap"],
+        ["strokeLinejoin", "stroke-linejoin"],
+        ["strokeMiterlimit", "stroke-miterlimit"],
+        ["strokeOpacity", "stroke-opacity"],
+        ["strokeWidth", "stroke-width"],
+        ["textAnchor", "text-anchor"],
+        ["textDecoration", "text-decoration"],
+        ["textRendering", "text-rendering"],
+        ["transformOrigin", "transform-origin"],
+        ["underlinePosition", "underline-position"],
+        ["underlineThickness", "underline-thickness"],
+        ["unicodeBidi", "unicode-bidi"],
+        ["unicodeRange", "unicode-range"],
+        ["unitsPerEm", "units-per-em"],
+        ["vAlphabetic", "v-alphabetic"],
+        ["vHanging", "v-hanging"],
+        ["vIdeographic", "v-ideographic"],
+        ["vMathematical", "v-mathematical"],
+        ["vectorEffect", "vector-effect"],
+        ["vertAdvY", "vert-adv-y"],
+        ["vertOriginX", "vert-origin-x"],
+        ["vertOriginY", "vert-origin-y"],
+        ["wordSpacing", "word-spacing"],
+        ["writingMode", "writing-mode"],
+        ["xmlnsXlink", "xmlns:xlink"],
+        ["xHeight", "x-height"]
+      ]),
+      possibleStandardNames = {
+        accept: "accept",
+        acceptcharset: "acceptCharset",
+        "accept-charset": "acceptCharset",
+        accesskey: "accessKey",
+        action: "action",
+        allowfullscreen: "allowFullScreen",
+        alt: "alt",
+        as: "as",
+        async: "async",
+        autocapitalize: "autoCapitalize",
+        autocomplete: "autoComplete",
+        autocorrect: "autoCorrect",
+        autofocus: "autoFocus",
+        autoplay: "autoPlay",
+        autosave: "autoSave",
+        capture: "capture",
+        cellpadding: "cellPadding",
+        cellspacing: "cellSpacing",
+        challenge: "challenge",
+        charset: "charSet",
+        checked: "checked",
+        children: "children",
+        cite: "cite",
+        class: "className",
+        classid: "classID",
+        classname: "className",
+        cols: "cols",
+        colspan: "colSpan",
+        content: "content",
+        contenteditable: "contentEditable",
+        contextmenu: "contextMenu",
+        controls: "controls",
+        controlslist: "controlsList",
+        coords: "coords",
+        crossorigin: "crossOrigin",
+        dangerouslysetinnerhtml: "dangerouslySetInnerHTML",
+        data: "data",
+        datetime: "dateTime",
+        default: "default",
+        defaultchecked: "defaultChecked",
+        defaultvalue: "defaultValue",
+        defer: "defer",
+        dir: "dir",
+        disabled: "disabled",
+        disablepictureinpicture: "disablePictureInPicture",
+        disableremoteplayback: "disableRemotePlayback",
+        download: "download",
+        draggable: "draggable",
+        enctype: "encType",
+        enterkeyhint: "enterKeyHint",
+        fetchpriority: "fetchPriority",
+        for: "htmlFor",
+        form: "form",
+        formmethod: "formMethod",
+        formaction: "formAction",
+        formenctype: "formEncType",
+        formnovalidate: "formNoValidate",
+        formtarget: "formTarget",
+        frameborder: "frameBorder",
+        headers: "headers",
+        height: "height",
+        hidden: "hidden",
+        high: "high",
+        href: "href",
+        hreflang: "hrefLang",
+        htmlfor: "htmlFor",
+        httpequiv: "httpEquiv",
+        "http-equiv": "httpEquiv",
+        icon: "icon",
+        id: "id",
+        imagesizes: "imageSizes",
+        imagesrcset: "imageSrcSet",
+        inert: "inert",
+        innerhtml: "innerHTML",
+        inputmode: "inputMode",
+        integrity: "integrity",
+        is: "is",
+        itemid: "itemID",
+        itemprop: "itemProp",
+        itemref: "itemRef",
+        itemscope: "itemScope",
+        itemtype: "itemType",
+        keyparams: "keyParams",
+        keytype: "keyType",
+        kind: "kind",
+        label: "label",
+        lang: "lang",
+        list: "list",
+        loop: "loop",
+        low: "low",
+        manifest: "manifest",
+        marginwidth: "marginWidth",
+        marginheight: "marginHeight",
+        max: "max",
+        maxlength: "maxLength",
+        media: "media",
+        mediagroup: "mediaGroup",
+        method: "method",
+        min: "min",
+        minlength: "minLength",
+        multiple: "multiple",
+        muted: "muted",
+        name: "name",
+        nomodule: "noModule",
+        nonce: "nonce",
+        novalidate: "noValidate",
+        open: "open",
+        optimum: "optimum",
+        pattern: "pattern",
+        placeholder: "placeholder",
+        playsinline: "playsInline",
+        poster: "poster",
+        preload: "preload",
+        profile: "profile",
+        radiogroup: "radioGroup",
+        readonly: "readOnly",
+        referrerpolicy: "referrerPolicy",
+        rel: "rel",
+        required: "required",
+        reversed: "reversed",
+        role: "role",
+        rows: "rows",
+        rowspan: "rowSpan",
+        sandbox: "sandbox",
+        scope: "scope",
+        scoped: "scoped",
+        scrolling: "scrolling",
+        seamless: "seamless",
+        selected: "selected",
+        shape: "shape",
+        size: "size",
+        sizes: "sizes",
+        span: "span",
+        spellcheck: "spellCheck",
+        src: "src",
+        srcdoc: "srcDoc",
+        srclang: "srcLang",
+        srcset: "srcSet",
+        start: "start",
+        step: "step",
+        style: "style",
+        summary: "summary",
+        tabindex: "tabIndex",
+        target: "target",
+        title: "title",
+        type: "type",
+        usemap: "useMap",
+        value: "value",
+        width: "width",
+        wmode: "wmode",
+        wrap: "wrap",
+        about: "about",
+        accentheight: "accentHeight",
+        "accent-height": "accentHeight",
+        accumulate: "accumulate",
+        additive: "additive",
+        alignmentbaseline: "alignmentBaseline",
+        "alignment-baseline": "alignmentBaseline",
+        allowreorder: "allowReorder",
+        alphabetic: "alphabetic",
+        amplitude: "amplitude",
+        arabicform: "arabicForm",
+        "arabic-form": "arabicForm",
+        ascent: "ascent",
+        attributename: "attributeName",
+        attributetype: "attributeType",
+        autoreverse: "autoReverse",
+        azimuth: "azimuth",
+        basefrequency: "baseFrequency",
+        baselineshift: "baselineShift",
+        "baseline-shift": "baselineShift",
+        baseprofile: "baseProfile",
+        bbox: "bbox",
+        begin: "begin",
+        bias: "bias",
+        by: "by",
+        calcmode: "calcMode",
+        capheight: "capHeight",
+        "cap-height": "capHeight",
+        clip: "clip",
+        clippath: "clipPath",
+        "clip-path": "clipPath",
+        clippathunits: "clipPathUnits",
+        cliprule: "clipRule",
+        "clip-rule": "clipRule",
+        color: "color",
+        colorinterpolation: "colorInterpolation",
+        "color-interpolation": "colorInterpolation",
+        colorinterpolationfilters: "colorInterpolationFilters",
+        "color-interpolation-filters": "colorInterpolationFilters",
+        colorprofile: "colorProfile",
+        "color-profile": "colorProfile",
+        colorrendering: "colorRendering",
+        "color-rendering": "colorRendering",
+        contentscripttype: "contentScriptType",
+        contentstyletype: "contentStyleType",
+        cursor: "cursor",
+        cx: "cx",
+        cy: "cy",
+        d: "d",
+        datatype: "datatype",
+        decelerate: "decelerate",
+        descent: "descent",
+        diffuseconstant: "diffuseConstant",
+        direction: "direction",
+        display: "display",
+        divisor: "divisor",
+        dominantbaseline: "dominantBaseline",
+        "dominant-baseline": "dominantBaseline",
+        dur: "dur",
+        dx: "dx",
+        dy: "dy",
+        edgemode: "edgeMode",
+        elevation: "elevation",
+        enablebackground: "enableBackground",
+        "enable-background": "enableBackground",
+        end: "end",
+        exponent: "exponent",
+        externalresourcesrequired: "externalResourcesRequired",
+        fill: "fill",
+        fillopacity: "fillOpacity",
+        "fill-opacity": "fillOpacity",
+        fillrule: "fillRule",
+        "fill-rule": "fillRule",
+        filter: "filter",
+        filterres: "filterRes",
+        filterunits: "filterUnits",
+        floodopacity: "floodOpacity",
+        "flood-opacity": "floodOpacity",
+        floodcolor: "floodColor",
+        "flood-color": "floodColor",
+        focusable: "focusable",
+        fontfamily: "fontFamily",
+        "font-family": "fontFamily",
+        fontsize: "fontSize",
+        "font-size": "fontSize",
+        fontsizeadjust: "fontSizeAdjust",
+        "font-size-adjust": "fontSizeAdjust",
+        fontstretch: "fontStretch",
+        "font-stretch": "fontStretch",
+        fontstyle: "fontStyle",
+        "font-style": "fontStyle",
+        fontvariant: "fontVariant",
+        "font-variant": "fontVariant",
+        fontweight: "fontWeight",
+        "font-weight": "fontWeight",
+        format: "format",
+        from: "from",
+        fx: "fx",
+        fy: "fy",
+        g1: "g1",
+        g2: "g2",
+        glyphname: "glyphName",
+        "glyph-name": "glyphName",
+        glyphorientationhorizontal: "glyphOrientationHorizontal",
+        "glyph-orientation-horizontal": "glyphOrientationHorizontal",
+        glyphorientationvertical: "glyphOrientationVertical",
+        "glyph-orientation-vertical": "glyphOrientationVertical",
+        glyphref: "glyphRef",
+        gradienttransform: "gradientTransform",
+        gradientunits: "gradientUnits",
+        hanging: "hanging",
+        horizadvx: "horizAdvX",
+        "horiz-adv-x": "horizAdvX",
+        horizoriginx: "horizOriginX",
+        "horiz-origin-x": "horizOriginX",
+        ideographic: "ideographic",
+        imagerendering: "imageRendering",
+        "image-rendering": "imageRendering",
+        in2: "in2",
+        in: "in",
+        inlist: "inlist",
+        intercept: "intercept",
+        k1: "k1",
+        k2: "k2",
+        k3: "k3",
+        k4: "k4",
+        k: "k",
+        kernelmatrix: "kernelMatrix",
+        kernelunitlength: "kernelUnitLength",
+        kerning: "kerning",
+        keypoints: "keyPoints",
+        keysplines: "keySplines",
+        keytimes: "keyTimes",
+        lengthadjust: "lengthAdjust",
+        letterspacing: "letterSpacing",
+        "letter-spacing": "letterSpacing",
+        lightingcolor: "lightingColor",
+        "lighting-color": "lightingColor",
+        limitingconeangle: "limitingConeAngle",
+        local: "local",
+        markerend: "markerEnd",
+        "marker-end": "markerEnd",
+        markerheight: "markerHeight",
+        markermid: "markerMid",
+        "marker-mid": "markerMid",
+        markerstart: "markerStart",
+        "marker-start": "markerStart",
+        markerunits: "markerUnits",
+        markerwidth: "markerWidth",
+        mask: "mask",
+        maskcontentunits: "maskContentUnits",
+        maskunits: "maskUnits",
+        mathematical: "mathematical",
+        mode: "mode",
+        numoctaves: "numOctaves",
+        offset: "offset",
+        opacity: "opacity",
+        operator: "operator",
+        order: "order",
+        orient: "orient",
+        orientation: "orientation",
+        origin: "origin",
+        overflow: "overflow",
+        overlineposition: "overlinePosition",
+        "overline-position": "overlinePosition",
+        overlinethickness: "overlineThickness",
+        "overline-thickness": "overlineThickness",
+        paintorder: "paintOrder",
+        "paint-order": "paintOrder",
+        panose1: "panose1",
+        "panose-1": "panose1",
+        pathlength: "pathLength",
+        patterncontentunits: "patternContentUnits",
+        patterntransform: "patternTransform",
+        patternunits: "patternUnits",
+        pointerevents: "pointerEvents",
+        "pointer-events": "pointerEvents",
+        points: "points",
+        pointsatx: "pointsAtX",
+        pointsaty: "pointsAtY",
+        pointsatz: "pointsAtZ",
+        popover: "popover",
+        popovertarget: "popoverTarget",
+        popovertargetaction: "popoverTargetAction",
+        prefix: "prefix",
+        preservealpha: "preserveAlpha",
+        preserveaspectratio: "preserveAspectRatio",
+        primitiveunits: "primitiveUnits",
+        property: "property",
+        r: "r",
+        radius: "radius",
+        refx: "refX",
+        refy: "refY",
+        renderingintent: "renderingIntent",
+        "rendering-intent": "renderingIntent",
+        repeatcount: "repeatCount",
+        repeatdur: "repeatDur",
+        requiredextensions: "requiredExtensions",
+        requiredfeatures: "requiredFeatures",
+        resource: "resource",
+        restart: "restart",
+        result: "result",
+        results: "results",
+        rotate: "rotate",
+        rx: "rx",
+        ry: "ry",
+        scale: "scale",
+        security: "security",
+        seed: "seed",
+        shaperendering: "shapeRendering",
+        "shape-rendering": "shapeRendering",
+        slope: "slope",
+        spacing: "spacing",
+        specularconstant: "specularConstant",
+        specularexponent: "specularExponent",
+        speed: "speed",
+        spreadmethod: "spreadMethod",
+        startoffset: "startOffset",
+        stddeviation: "stdDeviation",
+        stemh: "stemh",
+        stemv: "stemv",
+        stitchtiles: "stitchTiles",
+        stopcolor: "stopColor",
+        "stop-color": "stopColor",
+        stopopacity: "stopOpacity",
+        "stop-opacity": "stopOpacity",
+        strikethroughposition: "strikethroughPosition",
+        "strikethrough-position": "strikethroughPosition",
+        strikethroughthickness: "strikethroughThickness",
+        "strikethrough-thickness": "strikethroughThickness",
+        string: "string",
+        stroke: "stroke",
+        strokedasharray: "strokeDasharray",
+        "stroke-dasharray": "strokeDasharray",
+        strokedashoffset: "strokeDashoffset",
+        "stroke-dashoffset": "strokeDashoffset",
+        strokelinecap: "strokeLinecap",
+        "stroke-linecap": "strokeLinecap",
+        strokelinejoin: "strokeLinejoin",
+        "stroke-linejoin": "strokeLinejoin",
+        strokemiterlimit: "strokeMiterlimit",
+        "stroke-miterlimit": "strokeMiterlimit",
+        strokewidth: "strokeWidth",
+        "stroke-width": "strokeWidth",
+        strokeopacity: "strokeOpacity",
+        "stroke-opacity": "strokeOpacity",
+        suppresscontenteditablewarning: "suppressContentEditableWarning",
+        suppresshydrationwarning: "suppressHydrationWarning",
+        surfacescale: "surfaceScale",
+        systemlanguage: "systemLanguage",
+        tablevalues: "tableValues",
+        targetx: "targetX",
+        targety: "targetY",
+        textanchor: "textAnchor",
+        "text-anchor": "textAnchor",
+        textdecoration: "textDecoration",
+        "text-decoration": "textDecoration",
+        textlength: "textLength",
+        textrendering: "textRendering",
+        "text-rendering": "textRendering",
+        to: "to",
+        transform: "transform",
+        transformorigin: "transformOrigin",
+        "transform-origin": "transformOrigin",
+        typeof: "typeof",
+        u1: "u1",
+        u2: "u2",
+        underlineposition: "underlinePosition",
+        "underline-position": "underlinePosition",
+        underlinethickness: "underlineThickness",
+        "underline-thickness": "underlineThickness",
+        unicode: "unicode",
+        unicodebidi: "unicodeBidi",
+        "unicode-bidi": "unicodeBidi",
+        unicoderange: "unicodeRange",
+        "unicode-range": "unicodeRange",
+        unitsperem: "unitsPerEm",
+        "units-per-em": "unitsPerEm",
+        unselectable: "unselectable",
+        valphabetic: "vAlphabetic",
+        "v-alphabetic": "vAlphabetic",
+        values: "values",
+        vectoreffect: "vectorEffect",
+        "vector-effect": "vectorEffect",
+        version: "version",
+        vertadvy: "vertAdvY",
+        "vert-adv-y": "vertAdvY",
+        vertoriginx: "vertOriginX",
+        "vert-origin-x": "vertOriginX",
+        vertoriginy: "vertOriginY",
+        "vert-origin-y": "vertOriginY",
+        vhanging: "vHanging",
+        "v-hanging": "vHanging",
+        videographic: "vIdeographic",
+        "v-ideographic": "vIdeographic",
+        viewbox: "viewBox",
+        viewtarget: "viewTarget",
+        visibility: "visibility",
+        vmathematical: "vMathematical",
+        "v-mathematical": "vMathematical",
+        vocab: "vocab",
+        widths: "widths",
+        wordspacing: "wordSpacing",
+        "word-spacing": "wordSpacing",
+        writingmode: "writingMode",
+        "writing-mode": "writingMode",
+        x1: "x1",
+        x2: "x2",
+        x: "x",
+        xchannelselector: "xChannelSelector",
+        xheight: "xHeight",
+        "x-height": "xHeight",
+        xlinkactuate: "xlinkActuate",
+        "xlink:actuate": "xlinkActuate",
+        xlinkarcrole: "xlinkArcrole",
+        "xlink:arcrole": "xlinkArcrole",
+        xlinkhref: "xlinkHref",
+        "xlink:href": "xlinkHref",
+        xlinkrole: "xlinkRole",
+        "xlink:role": "xlinkRole",
+        xlinkshow: "xlinkShow",
+        "xlink:show": "xlinkShow",
+        xlinktitle: "xlinkTitle",
+        "xlink:title": "xlinkTitle",
+        xlinktype: "xlinkType",
+        "xlink:type": "xlinkType",
+        xmlbase: "xmlBase",
+        "xml:base": "xmlBase",
+        xmllang: "xmlLang",
+        "xml:lang": "xmlLang",
+        xmlns: "xmlns",
+        "xml:space": "xmlSpace",
+        xmlnsxlink: "xmlnsXlink",
+        "xmlns:xlink": "xmlnsXlink",
+        xmlspace: "xmlSpace",
+        y1: "y1",
+        y2: "y2",
+        y: "y",
+        ychannelselector: "yChannelSelector",
+        z: "z",
+        zoomandpan: "zoomAndPan"
+      },
+      ariaProperties = {
+        "aria-current": 0,
+        "aria-description": 0,
+        "aria-details": 0,
+        "aria-disabled": 0,
+        "aria-hidden": 0,
+        "aria-invalid": 0,
+        "aria-keyshortcuts": 0,
+        "aria-label": 0,
+        "aria-roledescription": 0,
+        "aria-autocomplete": 0,
+        "aria-checked": 0,
+        "aria-expanded": 0,
+        "aria-haspopup": 0,
+        "aria-level": 0,
+        "aria-modal": 0,
+        "aria-multiline": 0,
+        "aria-multiselectable": 0,
+        "aria-orientation": 0,
+        "aria-placeholder": 0,
+        "aria-pressed": 0,
+        "aria-readonly": 0,
+        "aria-required": 0,
+        "aria-selected": 0,
+        "aria-sort": 0,
+        "aria-valuemax": 0,
+        "aria-valuemin": 0,
+        "aria-valuenow": 0,
+        "aria-valuetext": 0,
+        "aria-atomic": 0,
+        "aria-busy": 0,
+        "aria-live": 0,
+        "aria-relevant": 0,
+        "aria-dropeffect": 0,
+        "aria-grabbed": 0,
+        "aria-activedescendant": 0,
+        "aria-colcount": 0,
+        "aria-colindex": 0,
+        "aria-colspan": 0,
+        "aria-controls": 0,
+        "aria-describedby": 0,
+        "aria-errormessage": 0,
+        "aria-flowto": 0,
+        "aria-labelledby": 0,
+        "aria-owns": 0,
+        "aria-posinset": 0,
+        "aria-rowcount": 0,
+        "aria-rowindex": 0,
+        "aria-rowspan": 0,
+        "aria-setsize": 0
+      },
+      warnedProperties$1 = {},
+      rARIA$1 = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel$1 = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      didWarnValueNull = !1,
+      warnedProperties = {},
+      EVENT_NAME_REGEX = /^on./,
+      INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,
+      rARIA = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      isJavaScriptProtocol =
+        /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i,
+      currentReplayingEvent = null,
+      restoreTarget = null,
+      restoreQueue = null,
+      isInsideEventHandler = !1,
+      canUseDOM = !(
+        "undefined" === typeof window ||
+        "undefined" === typeof window.document ||
+        "undefined" === typeof window.document.createElement
+      ),
+      passiveBrowserEventsSupported = !1;
+    if (canUseDOM)
+      try {
+        var options$jscomp$0 = {};
+        Object.defineProperty(options$jscomp$0, "passive", {
+          get: function () {
+            passiveBrowserEventsSupported = !0;
+          }
+        });
+        window.addEventListener("test", options$jscomp$0, options$jscomp$0);
+        window.removeEventListener("test", options$jscomp$0, options$jscomp$0);
+      } catch (e) {
+        passiveBrowserEventsSupported = !1;
+      }
+    var root = null,
+      startText = null,
+      fallbackText = null,
+      EventInterface = {
+        eventPhase: 0,
+        bubbles: 0,
+        cancelable: 0,
+        timeStamp: function (event) {
+          return event.timeStamp || Date.now();
+        },
+        defaultPrevented: 0,
+        isTrusted: 0
+      },
+      SyntheticEvent = createSyntheticEvent(EventInterface),
+      UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),
+      SyntheticUIEvent = createSyntheticEvent(UIEventInterface),
+      lastMovementX,
+      lastMovementY,
+      lastMouseEvent,
+      MouseEventInterface = assign({}, UIEventInterface, {
+        screenX: 0,
+        screenY: 0,
+        clientX: 0,
+        clientY: 0,
+        pageX: 0,
+        pageY: 0,
+        ctrlKey: 0,
+        shiftKey: 0,
+        altKey: 0,
+        metaKey: 0,
+        getModifierState: getEventModifierState,
+        button: 0,
+        buttons: 0,
+        relatedTarget: function (event) {
+          return void 0 === event.relatedTarget
+            ? event.fromElement === event.srcElement
+              ? event.toElement
+              : event.fromElement
+            : event.relatedTarget;
+        },
+        movementX: function (event) {
+          if ("movementX" in event) return event.movementX;
+          event !== lastMouseEvent &&
+            (lastMouseEvent && "mousemove" === event.type
+              ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),
+                (lastMovementY = event.screenY - lastMouseEvent.screenY))
+              : (lastMovementY = lastMovementX = 0),
+            (lastMouseEvent = event));
+          return lastMovementX;
+        },
+        movementY: function (event) {
+          return "movementY" in event ? event.movementY : lastMovementY;
+        }
+      }),
+      SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),
+      DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),
+      SyntheticDragEvent = createSyntheticEvent(DragEventInterface),
+      FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),
+      SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),
+      AnimationEventInterface = assign({}, EventInterface, {
+        animationName: 0,
+        elapsedTime: 0,
+        pseudoElement: 0
+      }),
+      SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),
+      ClipboardEventInterface = assign({}, EventInterface, {
+        clipboardData: function (event) {
+          return "clipboardData" in event
+            ? event.clipboardData
+            : window.clipboardData;
+        }
+      }),
+      SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),
+      CompositionEventInterface = assign({}, EventInterface, { data: 0 }),
+      SyntheticCompositionEvent = createSyntheticEvent(
+        CompositionEventInterface
+      ),
+      SyntheticInputEvent = SyntheticCompositionEvent,
+      normalizeKey = {
+        Esc: "Escape",
+        Spacebar: " ",
+        Left: "ArrowLeft",
+        Up: "ArrowUp",
+        Right: "ArrowRight",
+        Down: "ArrowDown",
+        Del: "Delete",
+        Win: "OS",
+        Menu: "ContextMenu",
+        Apps: "ContextMenu",
+        Scroll: "ScrollLock",
+        MozPrintableKey: "Unidentified"
+      },
+      translateToKey = {
+        8: "Backspace",
+        9: "Tab",
+        12: "Clear",
+        13: "Enter",
+        16: "Shift",
+        17: "Control",
+        18: "Alt",
+        19: "Pause",
+        20: "CapsLock",
+        27: "Escape",
+        32: " ",
+        33: "PageUp",
+        34: "PageDown",
+        35: "End",
+        36: "Home",
+        37: "ArrowLeft",
+        38: "ArrowUp",
+        39: "ArrowRight",
+        40: "ArrowDown",
+        45: "Insert",
+        46: "Delete",
+        112: "F1",
+        113: "F2",
+        114: "F3",
+        115: "F4",
+        116: "F5",
+        117: "F6",
+        118: "F7",
+        119: "F8",
+        120: "F9",
+        121: "F10",
+        122: "F11",
+        123: "F12",
+        144: "NumLock",
+        145: "ScrollLock",
+        224: "Meta"
+      },
+      modifierKeyToProp = {
+        Alt: "altKey",
+        Control: "ctrlKey",
+        Meta: "metaKey",
+        Shift: "shiftKey"
+      },
+      KeyboardEventInterface = assign({}, UIEventInterface, {
+        key: function (nativeEvent) {
+          if (nativeEvent.key) {
+            var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
+            if ("Unidentified" !== key) return key;
+          }
+          return "keypress" === nativeEvent.type
+            ? ((nativeEvent = getEventCharCode(nativeEvent)),
+              13 === nativeEvent ? "Enter" : String.fromCharCode(nativeEvent))
+            : "keydown" === nativeEvent.type || "keyup" === nativeEvent.type
+              ? translateToKey[nativeEvent.keyCode] || "Unidentified"
+              : "";
+        },
+        code: 0,
+        location: 0,
+        ctrlKey: 0,
+        shiftKey: 0,
+        altKey: 0,
+        metaKey: 0,
+        repeat: 0,
+        locale: 0,
+        getModifierState: getEventModifierState,
+        charCode: function (event) {
+          return "keypress" === event.type ? getEventCharCode(event) : 0;
+        },
+        keyCode: function (event) {
+          return "keydown" === event.type || "keyup" === event.type
+            ? event.keyCode
+            : 0;
+        },
+        which: function (event) {
+          return "keypress" === event.type
+            ? getEventCharCode(event)
+            : "keydown" === event.type || "keyup" === event.type
+              ? event.keyCode
+              : 0;
+        }
+      }),
+      SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),
+      PointerEventInterface = assign({}, MouseEventInterface, {
+        pointerId: 0,
+        width: 0,
+        height: 0,
+        pressure: 0,
+        tangentialPressure: 0,
+        tiltX: 0,
+        tiltY: 0,
+        twist: 0,
+        pointerType: 0,
+        isPrimary: 0
+      }),
+      SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),
+      TouchEventInterface = assign({}, UIEventInterface, {
+        touches: 0,
+        targetTouches: 0,
+        changedTouches: 0,
+        altKey: 0,
+        metaKey: 0,
+        ctrlKey: 0,
+        shiftKey: 0,
+        getModifierState: getEventModifierState
+      }),
+      SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),
+      TransitionEventInterface = assign({}, EventInterface, {
+        propertyName: 0,
+        elapsedTime: 0,
+        pseudoElement: 0
+      }),
+      SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),
+      WheelEventInterface = assign({}, MouseEventInterface, {
+        deltaX: function (event) {
+          return "deltaX" in event
+            ? event.deltaX
+            : "wheelDeltaX" in event
+              ? -event.wheelDeltaX
+              : 0;
+        },
+        deltaY: function (event) {
+          return "deltaY" in event
+            ? event.deltaY
+            : "wheelDeltaY" in event
+              ? -event.wheelDeltaY
+              : "wheelDelta" in event
+                ? -event.wheelDelta
+                : 0;
+        },
+        deltaZ: 0,
+        deltaMode: 0
+      }),
+      SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),
+      ToggleEventInterface = assign({}, EventInterface, {
+        newState: 0,
+        oldState: 0
+      }),
+      SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),
+      END_KEYCODES = [9, 13, 27, 32],
+      START_KEYCODE = 229,
+      canUseCompositionEvent = canUseDOM && "CompositionEvent" in window,
+      documentMode = null;
+    canUseDOM &&
+      "documentMode" in document &&
+      (documentMode = document.documentMode);
+    var canUseTextInputEvent =
+        canUseDOM && "TextEvent" in window && !documentMode,
+      useFallbackCompositionData =
+        canUseDOM &&
+        (!canUseCompositionEvent ||
+          (documentMode && 8 < documentMode && 11 >= documentMode)),
+      SPACEBAR_CODE = 32,
+      SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE),
+      hasSpaceKeypress = !1,
+      isComposing = !1,
+      supportedInputTypes = {
+        color: !0,
+        date: !0,
+        datetime: !0,
+        "datetime-local": !0,
+        email: !0,
+        month: !0,
+        number: !0,
+        password: !0,
+        range: !0,
+        search: !0,
+        tel: !0,
+        text: !0,
+        time: !0,
+        url: !0,
+        week: !0
+      },
+      activeElement$1 = null,
+      activeElementInst$1 = null,
+      isInputEventSupported = !1;
+    canUseDOM &&
+      (isInputEventSupported =
+        isEventSupported("input") &&
+        (!document.documentMode || 9 < document.documentMode));
+    var objectIs = "function" === typeof Object.is ? Object.is : is,
+      skipSelectionChangeEvent =
+        canUseDOM && "documentMode" in document && 11 >= document.documentMode,
+      activeElement = null,
+      activeElementInst = null,
+      lastSelection = null,
+      mouseDown = !1,
+      vendorPrefixes = {
+        animationend: makePrefixMap("Animation", "AnimationEnd"),
+        animationiteration: makePrefixMap("Animation", "AnimationIteration"),
+        animationstart: makePrefixMap("Animation", "AnimationStart"),
+        transitionrun: makePrefixMap("Transition", "TransitionRun"),
+        transitionstart: makePrefixMap("Transition", "TransitionStart"),
+        transitioncancel: makePrefixMap("Transition", "TransitionCancel"),
+        transitionend: makePrefixMap("Transition", "TransitionEnd")
+      },
+      prefixedEventNames = {},
+      style = {};
+    canUseDOM &&
+      ((style = document.createElement("div").style),
+      "AnimationEvent" in window ||
+        (delete vendorPrefixes.animationend.animation,
+        delete vendorPrefixes.animationiteration.animation,
+        delete vendorPrefixes.animationstart.animation),
+      "TransitionEvent" in window ||
+        delete vendorPrefixes.transitionend.transition);
+    var ANIMATION_END = getVendorPrefixedEventName("animationend"),
+      ANIMATION_ITERATION = getVendorPrefixedEventName("animationiteration"),
+      ANIMATION_START = getVendorPrefixedEventName("animationstart"),
+      TRANSITION_RUN = getVendorPrefixedEventName("transitionrun"),
+      TRANSITION_START = getVendorPrefixedEventName("transitionstart"),
+      TRANSITION_CANCEL = getVendorPrefixedEventName("transitioncancel"),
+      TRANSITION_END = getVendorPrefixedEventName("transitionend"),
+      topLevelEventsToReactNames = new Map(),
+      simpleEventPluginEvents =
+        "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(
+          " "
+        );
+    simpleEventPluginEvents.push("scrollEnd");
+    var CapturedStacks = new WeakMap(),
+      OffscreenVisible = 1,
+      OffscreenPassiveEffectsConnected = 2,
+      concurrentQueues = [],
+      concurrentQueuesIndex = 0,
+      concurrentlyUpdatedLanes = 0,
+      emptyContextObject = {};
+    Object.freeze(emptyContextObject);
+    var resolveFamily = null,
+      failedBoundaries = null,
+      NoMode = 0,
+      ConcurrentMode = 1,
+      ProfileMode = 2,
+      StrictLegacyMode = 8,
+      StrictEffectsMode = 16,
+      NoStrictPassiveEffectsMode = 64;
+    var hasBadMapPolyfill = !1;
+    try {
+      var nonExtensibleObject = Object.preventExtensions({});
+      new Map([[nonExtensibleObject, null]]);
+      new Set([nonExtensibleObject]);
+    } catch (e$3) {
+      hasBadMapPolyfill = !0;
+    }
+    var forkStack = [],
+      forkStackIndex = 0,
+      treeForkProvider = null,
+      treeForkCount = 0,
+      idStack = [],
+      idStackIndex = 0,
+      treeContextProvider = null,
+      treeContextId = 1,
+      treeContextOverflow = "",
+      hydrationParentFiber = null,
+      nextHydratableInstance = null,
+      isHydrating = !1,
+      didSuspendOrErrorDEV = !1,
+      hydrationDiffRootDEV = null,
+      hydrationErrors = null,
+      rootOrSingletonContext = !1,
+      HydrationMismatchException = Error(
+        "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."
+      ),
+      lastResetTime = 0;
+    if (
+      "object" === typeof performance &&
+      "function" === typeof performance.now
+    ) {
+      var localPerformance = performance;
+      var getCurrentTime = function () {
+        return localPerformance.now();
+      };
+    } else {
+      var localDate = Date;
+      getCurrentTime = function () {
+        return localDate.now();
+      };
+    }
+    var valueCursor = createCursor(null);
+    var rendererCursorDEV = createCursor(null);
+    var rendererSigil = {};
+    var currentlyRenderingFiber$1 = null,
+      lastContextDependency = null,
+      isDisallowedContextReadInDEV = !1,
+      AbortControllerLocal =
+        "undefined" !== typeof AbortController
+          ? AbortController
+          : function () {
+              var listeners = [],
+                signal = (this.signal = {
+                  aborted: !1,
+                  addEventListener: function (type, listener) {
+                    listeners.push(listener);
+                  }
+                });
+              this.abort = function () {
+                signal.aborted = !0;
+                listeners.forEach(function (listener) {
+                  return listener();
+                });
+              };
+            },
+      scheduleCallback$2 = Scheduler.unstable_scheduleCallback,
+      NormalPriority = Scheduler.unstable_NormalPriority,
+      CacheContext = {
+        $$typeof: REACT_CONTEXT_TYPE,
+        Consumer: null,
+        Provider: null,
+        _currentValue: null,
+        _currentValue2: null,
+        _threadCount: 0,
+        _currentRenderer: null,
+        _currentRenderer2: null
+      },
+      now = Scheduler.unstable_now,
+      renderStartTime = -0,
+      commitStartTime = -0,
+      profilerStartTime = -1.1,
+      profilerEffectDuration = -0,
+      currentUpdateIsNested = !1,
+      nestedUpdateScheduled = !1,
+      currentEntangledListeners = null,
+      currentEntangledPendingCount = 0,
+      currentEntangledLane = 0,
+      currentEntangledActionThenable = null,
+      prevOnStartTransitionFinish = ReactSharedInternals.S;
+    ReactSharedInternals.S = function (transition, returnValue) {
+      "object" === typeof returnValue &&
+        null !== returnValue &&
+        "function" === typeof returnValue.then &&
+        entangleAsyncAction(transition, returnValue);
+      null !== prevOnStartTransitionFinish &&
+        prevOnStartTransitionFinish(transition, returnValue);
+    };
+    var resumedCache = createCursor(null),
+      ReactStrictModeWarnings = {
+        recordUnsafeLifecycleWarnings: function () {},
+        flushPendingUnsafeLifecycleWarnings: function () {},
+        recordLegacyContextWarning: function () {},
+        flushLegacyContextWarning: function () {},
+        discardPendingWarnings: function () {}
+      },
+      pendingComponentWillMountWarnings = [],
+      pendingUNSAFE_ComponentWillMountWarnings = [],
+      pendingComponentWillReceivePropsWarnings = [],
+      pendingUNSAFE_ComponentWillReceivePropsWarnings = [],
+      pendingComponentWillUpdateWarnings = [],
+      pendingUNSAFE_ComponentWillUpdateWarnings = [],
+      didWarnAboutUnsafeLifecycles = new Set();
+    ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (
+      fiber,
+      instance
+    ) {
+      didWarnAboutUnsafeLifecycles.has(fiber.type) ||
+        ("function" === typeof instance.componentWillMount &&
+          !0 !== instance.componentWillMount.__suppressDeprecationWarning &&
+          pendingComponentWillMountWarnings.push(fiber),
+        fiber.mode & StrictLegacyMode &&
+          "function" === typeof instance.UNSAFE_componentWillMount &&
+          pendingUNSAFE_ComponentWillMountWarnings.push(fiber),
+        "function" === typeof instance.componentWillReceiveProps &&
+          !0 !==
+            instance.componentWillReceiveProps.__suppressDeprecationWarning &&
+          pendingComponentWillReceivePropsWarnings.push(fiber),
+        fiber.mode & StrictLegacyMode &&
+          "function" === typeof instance.UNSAFE_componentWillReceiveProps &&
+          pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber),
+        "function" === typeof instance.componentWillUpdate &&
+          !0 !== instance.componentWillUpdate.__suppressDeprecationWarning &&
+          pendingComponentWillUpdateWarnings.push(fiber),
+        fiber.mode & StrictLegacyMode &&
+          "function" === typeof instance.UNSAFE_componentWillUpdate &&
+          pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber));
+    };
+    ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {
+      var componentWillMountUniqueNames = new Set();
+      0 < pendingComponentWillMountWarnings.length &&
+        (pendingComponentWillMountWarnings.forEach(function (fiber) {
+          componentWillMountUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingComponentWillMountWarnings = []));
+      var UNSAFE_componentWillMountUniqueNames = new Set();
+      0 < pendingUNSAFE_ComponentWillMountWarnings.length &&
+        (pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {
+          UNSAFE_componentWillMountUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingUNSAFE_ComponentWillMountWarnings = []));
+      var componentWillReceivePropsUniqueNames = new Set();
+      0 < pendingComponentWillReceivePropsWarnings.length &&
+        (pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {
+          componentWillReceivePropsUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingComponentWillReceivePropsWarnings = []));
+      var UNSAFE_componentWillReceivePropsUniqueNames = new Set();
+      0 < pendingUNSAFE_ComponentWillReceivePropsWarnings.length &&
+        (pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(
+          function (fiber) {
+            UNSAFE_componentWillReceivePropsUniqueNames.add(
+              getComponentNameFromFiber(fiber) || "Component"
+            );
+            didWarnAboutUnsafeLifecycles.add(fiber.type);
+          }
+        ),
+        (pendingUNSAFE_ComponentWillReceivePropsWarnings = []));
+      var componentWillUpdateUniqueNames = new Set();
+      0 < pendingComponentWillUpdateWarnings.length &&
+        (pendingComponentWillUpdateWarnings.forEach(function (fiber) {
+          componentWillUpdateUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingComponentWillUpdateWarnings = []));
+      var UNSAFE_componentWillUpdateUniqueNames = new Set();
+      0 < pendingUNSAFE_ComponentWillUpdateWarnings.length &&
+        (pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {
+          UNSAFE_componentWillUpdateUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingUNSAFE_ComponentWillUpdateWarnings = []));
+      if (0 < UNSAFE_componentWillMountUniqueNames.size) {
+        var sortedNames = setToSortedString(
+          UNSAFE_componentWillMountUniqueNames
+        );
+        console.error(
+          "Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n\nPlease update the following components: %s",
+          sortedNames
+        );
+      }
+      0 < UNSAFE_componentWillReceivePropsUniqueNames.size &&
+        ((sortedNames = setToSortedString(
+          UNSAFE_componentWillReceivePropsUniqueNames
+        )),
+        console.error(
+          "Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+      0 < UNSAFE_componentWillUpdateUniqueNames.size &&
+        ((sortedNames = setToSortedString(
+          UNSAFE_componentWillUpdateUniqueNames
+        )),
+        console.error(
+          "Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+      0 < componentWillMountUniqueNames.size &&
+        ((sortedNames = setToSortedString(componentWillMountUniqueNames)),
+        console.warn(
+          "componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+      0 < componentWillReceivePropsUniqueNames.size &&
+        ((sortedNames = setToSortedString(
+          componentWillReceivePropsUniqueNames
+        )),
+        console.warn(
+          "componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\n* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+      0 < componentWillUpdateUniqueNames.size &&
+        ((sortedNames = setToSortedString(componentWillUpdateUniqueNames)),
+        console.warn(
+          "componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+    };
+    var pendingLegacyContextWarning = new Map(),
+      didWarnAboutLegacyContext = new Set();
+    ReactStrictModeWarnings.recordLegacyContextWarning = function (
+      fiber,
+      instance
+    ) {
+      var strictRoot = null;
+      for (var node = fiber; null !== node; )
+        node.mode & StrictLegacyMode && (strictRoot = node),
+          (node = node.return);
+      null === strictRoot
+        ? console.error(
+            "Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue."
+          )
+        : !didWarnAboutLegacyContext.has(fiber.type) &&
+          ((node = pendingLegacyContextWarning.get(strictRoot)),
+          null != fiber.type.contextTypes ||
+            null != fiber.type.childContextTypes ||
+            (null !== instance &&
+              "function" === typeof instance.getChildContext)) &&
+          (void 0 === node &&
+            ((node = []), pendingLegacyContextWarning.set(strictRoot, node)),
+          node.push(fiber));
+    };
+    ReactStrictModeWarnings.flushLegacyContextWarning = function () {
+      pendingLegacyContextWarning.forEach(function (fiberArray) {
+        if (0 !== fiberArray.length) {
+          var firstFiber = fiberArray[0],
+            uniqueNames = new Set();
+          fiberArray.forEach(function (fiber) {
+            uniqueNames.add(getComponentNameFromFiber(fiber) || "Component");
+            didWarnAboutLegacyContext.add(fiber.type);
+          });
+          var sortedNames = setToSortedString(uniqueNames);
+          runWithFiberInDEV(firstFiber, function () {
+            console.error(
+              "Legacy context API has been detected within a strict-mode tree.\n\nThe old API will be supported in all 16.x releases, but applications using it should migrate to the new version.\n\nPlease update the following components: %s\n\nLearn more about this warning here: https://react.dev/link/legacy-context",
+              sortedNames
+            );
+          });
+        }
+      });
+    };
+    ReactStrictModeWarnings.discardPendingWarnings = function () {
+      pendingComponentWillMountWarnings = [];
+      pendingUNSAFE_ComponentWillMountWarnings = [];
+      pendingComponentWillReceivePropsWarnings = [];
+      pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
+      pendingComponentWillUpdateWarnings = [];
+      pendingUNSAFE_ComponentWillUpdateWarnings = [];
+      pendingLegacyContextWarning = new Map();
+    };
+    var SuspenseException = Error(
+        "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+      ),
+      SuspenseyCommitException = Error(
+        "Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."
+      ),
+      SuspenseActionException = Error(
+        "Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary."
+      ),
+      noopSuspenseyCommitThenable = {
+        then: function () {
+          console.error(
+            'Internal React error: A listener was unexpectedly attached to a "noop" thenable. This is a bug in React. Please file an issue.'
+          );
+        }
+      },
+      suspendedThenable = null,
+      needsToResetSuspendedThenableDEV = !1,
+      NoFlags = 0,
+      HasEffect = 1,
+      Insertion = 2,
+      Layout = 4,
+      Passive = 8,
+      UpdateState = 0,
+      ReplaceState = 1,
+      ForceUpdate = 2,
+      CaptureUpdate = 3,
+      hasForceUpdate = !1;
+    var didWarnUpdateInsideUpdate = !1;
+    var currentlyProcessingQueue = null;
+    var didReadFromEntangledAsyncAction = !1,
+      currentTreeHiddenStackCursor = createCursor(null),
+      prevEntangledRenderLanesCursor = createCursor(0),
+      didWarnUncachedGetSnapshot;
+    var didWarnAboutMismatchedHooksForComponent = new Set();
+    var didWarnAboutUseWrappedInTryCatch = new Set();
+    var didWarnAboutAsyncClientComponent = new Set();
+    var didWarnAboutUseFormState = new Set();
+    var renderLanes = 0,
+      currentlyRenderingFiber = null,
+      currentHook = null,
+      workInProgressHook = null,
+      didScheduleRenderPhaseUpdate = !1,
+      didScheduleRenderPhaseUpdateDuringThisPass = !1,
+      shouldDoubleInvokeUserFnsInHooksDEV = !1,
+      localIdCounter = 0,
+      thenableIndexCounter$1 = 0,
+      thenableState$1 = null,
+      globalClientIdCounter = 0,
+      RE_RENDER_LIMIT = 25,
+      currentHookNameInDev = null,
+      hookTypesDev = null,
+      hookTypesUpdateIndexDev = -1,
+      ignorePreviousDependencies = !1,
+      ContextOnlyDispatcher = {
+        readContext: readContext,
+        use: use,
+        useCallback: throwInvalidHookError,
+        useContext: throwInvalidHookError,
+        useEffect: throwInvalidHookError,
+        useImperativeHandle: throwInvalidHookError,
+        useLayoutEffect: throwInvalidHookError,
+        useInsertionEffect: throwInvalidHookError,
+        useMemo: throwInvalidHookError,
+        useReducer: throwInvalidHookError,
+        useRef: throwInvalidHookError,
+        useState: throwInvalidHookError,
+        useDebugValue: throwInvalidHookError,
+        useDeferredValue: throwInvalidHookError,
+        useTransition: throwInvalidHookError,
+        useSyncExternalStore: throwInvalidHookError,
+        useId: throwInvalidHookError,
+        useHostTransitionStatus: throwInvalidHookError,
+        useFormState: throwInvalidHookError,
+        useActionState: throwInvalidHookError,
+        useOptimistic: throwInvalidHookError,
+        useMemoCache: throwInvalidHookError,
+        useCacheRefresh: throwInvalidHookError
+      },
+      HooksDispatcherOnMountInDEV = null,
+      HooksDispatcherOnMountWithHookTypesInDEV = null,
+      HooksDispatcherOnUpdateInDEV = null,
+      HooksDispatcherOnRerenderInDEV = null,
+      InvalidNestedHooksDispatcherOnMountInDEV = null,
+      InvalidNestedHooksDispatcherOnUpdateInDEV = null,
+      InvalidNestedHooksDispatcherOnRerenderInDEV = null;
+    HooksDispatcherOnMountInDEV = {
+      readContext: function (context) {
+        return readContext(context);
+      },
+      use: use,
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        return mountCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        mountHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(createDeps);
+        return mountEffect(create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        return mountImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        mountEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        return mountLayoutEffect(create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function (initialValue) {
+        currentHookNameInDev = "useRef";
+        mountHookTypesDev();
+        return mountRef(initialValue);
+      },
+      useState: function (initialState) {
+        currentHookNameInDev = "useState";
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountState(initialState);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        mountHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        mountHookTypesDev();
+        return mountDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        mountHookTypesDev();
+        return mountTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        mountHookTypesDev();
+        return mountSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        mountHookTypesDev();
+        return mountId();
+      },
+      useFormState: function (action, initialState) {
+        currentHookNameInDev = "useFormState";
+        mountHookTypesDev();
+        warnOnUseFormStateInDev();
+        return mountActionState(action, initialState);
+      },
+      useActionState: function (action, initialState) {
+        currentHookNameInDev = "useActionState";
+        mountHookTypesDev();
+        return mountActionState(action, initialState);
+      },
+      useOptimistic: function (passthrough) {
+        currentHookNameInDev = "useOptimistic";
+        mountHookTypesDev();
+        return mountOptimistic(passthrough);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useMemoCache: useMemoCache,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        mountHookTypesDev();
+        return mountRefresh();
+      }
+    };
+    HooksDispatcherOnMountWithHookTypesInDEV = {
+      readContext: function (context) {
+        return readContext(context);
+      },
+      use: use,
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        updateHookTypesDev();
+        return mountCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        updateHookTypesDev();
+        return mountEffect(create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        updateHookTypesDev();
+        return mountImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        updateHookTypesDev();
+        mountEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        updateHookTypesDev();
+        return mountLayoutEffect(create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function (initialValue) {
+        currentHookNameInDev = "useRef";
+        updateHookTypesDev();
+        return mountRef(initialValue);
+      },
+      useState: function (initialState) {
+        currentHookNameInDev = "useState";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountState(initialState);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        updateHookTypesDev();
+        return mountDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        updateHookTypesDev();
+        return mountTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        updateHookTypesDev();
+        return mountSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        updateHookTypesDev();
+        return mountId();
+      },
+      useActionState: function (action, initialState) {
+        currentHookNameInDev = "useActionState";
+        updateHookTypesDev();
+        return mountActionState(action, initialState);
+      },
+      useFormState: function (action, initialState) {
+        currentHookNameInDev = "useFormState";
+        updateHookTypesDev();
+        warnOnUseFormStateInDev();
+        return mountActionState(action, initialState);
+      },
+      useOptimistic: function (passthrough) {
+        currentHookNameInDev = "useOptimistic";
+        updateHookTypesDev();
+        return mountOptimistic(passthrough);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useMemoCache: useMemoCache,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return mountRefresh();
+      }
+    };
+    HooksDispatcherOnUpdateInDEV = {
+      readContext: function (context) {
+        return readContext(context);
+      },
+      use: use,
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        updateHookTypesDev();
+        return updateCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        updateHookTypesDev();
+        updateEffectImpl(2048, Passive, create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        updateHookTypesDev();
+        return updateImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        updateHookTypesDev();
+        return updateEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        updateHookTypesDev();
+        return updateEffectImpl(4, Layout, create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function () {
+        currentHookNameInDev = "useRef";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useState: function () {
+        currentHookNameInDev = "useState";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateReducer(basicStateReducer);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        updateHookTypesDev();
+        return updateDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        updateHookTypesDev();
+        return updateTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        updateHookTypesDev();
+        return updateSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useFormState: function (action) {
+        currentHookNameInDev = "useFormState";
+        updateHookTypesDev();
+        warnOnUseFormStateInDev();
+        return updateActionState(action);
+      },
+      useActionState: function (action) {
+        currentHookNameInDev = "useActionState";
+        updateHookTypesDev();
+        return updateActionState(action);
+      },
+      useOptimistic: function (passthrough, reducer) {
+        currentHookNameInDev = "useOptimistic";
+        updateHookTypesDev();
+        return updateOptimistic(passthrough, reducer);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useMemoCache: useMemoCache,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      }
+    };
+    HooksDispatcherOnRerenderInDEV = {
+      readContext: function (context) {
+        return readContext(context);
+      },
+      use: use,
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        updateHookTypesDev();
+        return updateCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        updateHookTypesDev();
+        updateEffectImpl(2048, Passive, create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        updateHookTypesDev();
+        return updateImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        updateHookTypesDev();
+        return updateEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        updateHookTypesDev();
+        return updateEffectImpl(4, Layout, create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;
+        try {
+          return updateMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;
+        try {
+          return rerenderReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function () {
+        currentHookNameInDev = "useRef";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useState: function () {
+        currentHookNameInDev = "useState";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;
+        try {
+          return rerenderReducer(basicStateReducer);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        updateHookTypesDev();
+        return rerenderDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        updateHookTypesDev();
+        return rerenderTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        updateHookTypesDev();
+        return updateSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useFormState: function (action) {
+        currentHookNameInDev = "useFormState";
+        updateHookTypesDev();
+        warnOnUseFormStateInDev();
+        return rerenderActionState(action);
+      },
+      useActionState: function (action) {
+        currentHookNameInDev = "useActionState";
+        updateHookTypesDev();
+        return rerenderActionState(action);
+      },
+      useOptimistic: function (passthrough, reducer) {
+        currentHookNameInDev = "useOptimistic";
+        updateHookTypesDev();
+        return rerenderOptimistic(passthrough, reducer);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useMemoCache: useMemoCache,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      }
+    };
+    InvalidNestedHooksDispatcherOnMountInDEV = {
+      readContext: function (context) {
+        warnInvalidContextAccess();
+        return readContext(context);
+      },
+      use: function (usable) {
+        warnInvalidHookAccess();
+        return use(usable);
+      },
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountEffect(create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        mountEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountLayoutEffect(create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function (initialValue) {
+        currentHookNameInDev = "useRef";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountRef(initialValue);
+      },
+      useState: function (initialState) {
+        currentHookNameInDev = "useState";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountState(initialState);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountId();
+      },
+      useFormState: function (action, initialState) {
+        currentHookNameInDev = "useFormState";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountActionState(action, initialState);
+      },
+      useActionState: function (action, initialState) {
+        currentHookNameInDev = "useActionState";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountActionState(action, initialState);
+      },
+      useOptimistic: function (passthrough) {
+        currentHookNameInDev = "useOptimistic";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountOptimistic(passthrough);
+      },
+      useMemoCache: function (size) {
+        warnInvalidHookAccess();
+        return useMemoCache(size);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        mountHookTypesDev();
+        return mountRefresh();
+      }
+    };
+    InvalidNestedHooksDispatcherOnUpdateInDEV = {
+      readContext: function (context) {
+        warnInvalidContextAccess();
+        return readContext(context);
+      },
+      use: function (usable) {
+        warnInvalidHookAccess();
+        return use(usable);
+      },
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        updateEffectImpl(2048, Passive, create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateEffectImpl(4, Layout, create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function () {
+        currentHookNameInDev = "useRef";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useState: function () {
+        currentHookNameInDev = "useState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateReducer(basicStateReducer);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useFormState: function (action) {
+        currentHookNameInDev = "useFormState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateActionState(action);
+      },
+      useActionState: function (action) {
+        currentHookNameInDev = "useActionState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateActionState(action);
+      },
+      useOptimistic: function (passthrough, reducer) {
+        currentHookNameInDev = "useOptimistic";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateOptimistic(passthrough, reducer);
+      },
+      useMemoCache: function (size) {
+        warnInvalidHookAccess();
+        return useMemoCache(size);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      }
+    };
+    InvalidNestedHooksDispatcherOnRerenderInDEV = {
+      readContext: function (context) {
+        warnInvalidContextAccess();
+        return readContext(context);
+      },
+      use: function (usable) {
+        warnInvalidHookAccess();
+        return use(usable);
+      },
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        updateEffectImpl(2048, Passive, create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateEffectImpl(4, Layout, create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return rerenderReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function () {
+        currentHookNameInDev = "useRef";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useState: function () {
+        currentHookNameInDev = "useState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return rerenderReducer(basicStateReducer);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useFormState: function (action) {
+        currentHookNameInDev = "useFormState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderActionState(action);
+      },
+      useActionState: function (action) {
+        currentHookNameInDev = "useActionState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderActionState(action);
+      },
+      useOptimistic: function (passthrough, reducer) {
+        currentHookNameInDev = "useOptimistic";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderOptimistic(passthrough, reducer);
+      },
+      useMemoCache: function (size) {
+        warnInvalidHookAccess();
+        return useMemoCache(size);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      }
+    };
+    var callComponent = {
+        react_stack_bottom_frame: function (Component, props, secondArg) {
+          var wasRendering = isRendering;
+          isRendering = !0;
+          try {
+            return Component(props, secondArg);
+          } finally {
+            isRendering = wasRendering;
+          }
+        }
+      },
+      callComponentInDEV =
+        callComponent.react_stack_bottom_frame.bind(callComponent),
+      callRender = {
+        react_stack_bottom_frame: function (instance) {
+          var wasRendering = isRendering;
+          isRendering = !0;
+          try {
+            return instance.render();
+          } finally {
+            isRendering = wasRendering;
+          }
+        }
+      },
+      callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),
+      callComponentDidMount = {
+        react_stack_bottom_frame: function (finishedWork, instance) {
+          try {
+            instance.componentDidMount();
+          } catch (error) {
+            captureCommitPhaseError(finishedWork, finishedWork.return, error);
+          }
+        }
+      },
+      callComponentDidMountInDEV =
+        callComponentDidMount.react_stack_bottom_frame.bind(
+          callComponentDidMount
+        ),
+      callComponentDidUpdate = {
+        react_stack_bottom_frame: function (
+          finishedWork,
+          instance,
+          prevProps,
+          prevState,
+          snapshot
+        ) {
+          try {
+            instance.componentDidUpdate(prevProps, prevState, snapshot);
+          } catch (error) {
+            captureCommitPhaseError(finishedWork, finishedWork.return, error);
+          }
+        }
+      },
+      callComponentDidUpdateInDEV =
+        callComponentDidUpdate.react_stack_bottom_frame.bind(
+          callComponentDidUpdate
+        ),
+      callComponentDidCatch = {
+        react_stack_bottom_frame: function (instance, errorInfo) {
+          var stack = errorInfo.stack;
+          instance.componentDidCatch(errorInfo.value, {
+            componentStack: null !== stack ? stack : ""
+          });
+        }
+      },
+      callComponentDidCatchInDEV =
+        callComponentDidCatch.react_stack_bottom_frame.bind(
+          callComponentDidCatch
+        ),
+      callComponentWillUnmount = {
+        react_stack_bottom_frame: function (
+          current,
+          nearestMountedAncestor,
+          instance
+        ) {
+          try {
+            instance.componentWillUnmount();
+          } catch (error) {
+            captureCommitPhaseError(current, nearestMountedAncestor, error);
+          }
+        }
+      },
+      callComponentWillUnmountInDEV =
+        callComponentWillUnmount.react_stack_bottom_frame.bind(
+          callComponentWillUnmount
+        ),
+      callCreate = {
+        react_stack_bottom_frame: function (effect) {
+          null != effect.resourceKind &&
+            console.error(
+              "Expected only SimpleEffects when enableUseEffectCRUDOverload is disabled, got %s",
+              effect.resourceKind
+            );
+          var create = effect.create;
+          effect = effect.inst;
+          create = create();
+          return (effect.destroy = create);
+        }
+      },
+      callCreateInDEV = callCreate.react_stack_bottom_frame.bind(callCreate),
+      callDestroy = {
+        react_stack_bottom_frame: function (
+          current,
+          nearestMountedAncestor,
+          destroy
+        ) {
+          try {
+            destroy();
+          } catch (error) {
+            captureCommitPhaseError(current, nearestMountedAncestor, error);
+          }
+        }
+      },
+      callDestroyInDEV = callDestroy.react_stack_bottom_frame.bind(callDestroy),
+      callLazyInit = {
+        react_stack_bottom_frame: function (lazy) {
+          var init = lazy._init;
+          return init(lazy._payload);
+        }
+      },
+      callLazyInitInDEV =
+        callLazyInit.react_stack_bottom_frame.bind(callLazyInit),
+      thenableState = null,
+      thenableIndexCounter = 0,
+      currentDebugInfo = null,
+      didWarnAboutMaps;
+    var didWarnAboutGenerators = (didWarnAboutMaps = !1);
+    var ownerHasKeyUseWarning = {};
+    var ownerHasFunctionTypeWarning = {};
+    var ownerHasSymbolTypeWarning = {};
+    warnForMissingKey = function (returnFiber, workInProgress, child) {
+      if (
+        null !== child &&
+        "object" === typeof child &&
+        child._store &&
+        ((!child._store.validated && null == child.key) ||
+          2 === child._store.validated)
+      ) {
+        if ("object" !== typeof child._store)
+          throw Error(
+            "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue."
+          );
+        child._store.validated = 1;
+        var componentName = getComponentNameFromFiber(returnFiber),
+          componentKey = componentName || "null";
+        if (!ownerHasKeyUseWarning[componentKey]) {
+          ownerHasKeyUseWarning[componentKey] = !0;
+          child = child._owner;
+          returnFiber = returnFiber._debugOwner;
+          var currentComponentErrorInfo = "";
+          returnFiber &&
+            "number" === typeof returnFiber.tag &&
+            (componentKey = getComponentNameFromFiber(returnFiber)) &&
+            (currentComponentErrorInfo =
+              "\n\nCheck the render method of `" + componentKey + "`.");
+          currentComponentErrorInfo ||
+            (componentName &&
+              (currentComponentErrorInfo =
+                "\n\nCheck the top-level render call using <" +
+                componentName +
+                ">."));
+          var childOwnerAppendix = "";
+          null != child &&
+            returnFiber !== child &&
+            ((componentName = null),
+            "number" === typeof child.tag
+              ? (componentName = getComponentNameFromFiber(child))
+              : "string" === typeof child.name && (componentName = child.name),
+            componentName &&
+              (childOwnerAppendix =
+                " It was passed a child from " + componentName + "."));
+          runWithFiberInDEV(workInProgress, function () {
+            console.error(
+              'Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',
+              currentComponentErrorInfo,
+              childOwnerAppendix
+            );
+          });
+        }
+      }
+    };
+    var reconcileChildFibers = createChildReconciler(!0),
+      mountChildFibers = createChildReconciler(!1),
+      suspenseHandlerStackCursor = createCursor(null),
+      shellBoundary = null,
+      SubtreeSuspenseContextMask = 1,
+      ForceSuspenseFallback = 2,
+      suspenseStackCursor = createCursor(0),
+      fakeInternalInstance = {};
+    var didWarnAboutStateAssignmentForComponent = new Set();
+    var didWarnAboutUninitializedState = new Set();
+    var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
+    var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
+    var didWarnAboutDirectlyAssigningPropsToState = new Set();
+    var didWarnAboutUndefinedDerivedState = new Set();
+    var didWarnAboutContextTypes$1 = new Set();
+    var didWarnAboutChildContextTypes = new Set();
+    var didWarnAboutInvalidateContextType = new Set();
+    var didWarnOnInvalidCallback = new Set();
+    Object.freeze(fakeInternalInstance);
+    var classComponentUpdater = {
+        enqueueSetState: function (inst, payload, callback) {
+          inst = inst._reactInternals;
+          var lane = requestUpdateLane(inst),
+            update = createUpdate(lane);
+          update.payload = payload;
+          void 0 !== callback &&
+            null !== callback &&
+            (warnOnInvalidCallback(callback), (update.callback = callback));
+          payload = enqueueUpdate(inst, update, lane);
+          null !== payload &&
+            (scheduleUpdateOnFiber(payload, inst, lane),
+            entangleTransitions(payload, inst, lane));
+          markStateUpdateScheduled(inst, lane);
+        },
+        enqueueReplaceState: function (inst, payload, callback) {
+          inst = inst._reactInternals;
+          var lane = requestUpdateLane(inst),
+            update = createUpdate(lane);
+          update.tag = ReplaceState;
+          update.payload = payload;
+          void 0 !== callback &&
+            null !== callback &&
+            (warnOnInvalidCallback(callback), (update.callback = callback));
+          payload = enqueueUpdate(inst, update, lane);
+          null !== payload &&
+            (scheduleUpdateOnFiber(payload, inst, lane),
+            entangleTransitions(payload, inst, lane));
+          markStateUpdateScheduled(inst, lane);
+        },
+        enqueueForceUpdate: function (inst, callback) {
+          inst = inst._reactInternals;
+          var lane = requestUpdateLane(inst),
+            update = createUpdate(lane);
+          update.tag = ForceUpdate;
+          void 0 !== callback &&
+            null !== callback &&
+            (warnOnInvalidCallback(callback), (update.callback = callback));
+          callback = enqueueUpdate(inst, update, lane);
+          null !== callback &&
+            (scheduleUpdateOnFiber(callback, inst, lane),
+            entangleTransitions(callback, inst, lane));
+          null !== injectedProfilingHooks &&
+            "function" ===
+              typeof injectedProfilingHooks.markForceUpdateScheduled &&
+            injectedProfilingHooks.markForceUpdateScheduled(inst, lane);
+        }
+      },
+      reportGlobalError =
+        "function" === typeof reportError
+          ? reportError
+          : function (error) {
+              if (
+                "object" === typeof window &&
+                "function" === typeof window.ErrorEvent
+              ) {
+                var event = new window.ErrorEvent("error", {
+                  bubbles: !0,
+                  cancelable: !0,
+                  message:
+                    "object" === typeof error &&
+                    null !== error &&
+                    "string" === typeof error.message
+                      ? String(error.message)
+                      : String(error),
+                  error: error
+                });
+                if (!window.dispatchEvent(event)) return;
+              } else if (
+                "object" === typeof process &&
+                "function" === typeof process.emit
+              ) {
+                process.emit("uncaughtException", error);
+                return;
+              }
+              console.error(error);
+            },
+      componentName = null,
+      errorBoundaryName = null,
+      SelectiveHydrationException = Error(
+        "This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue."
+      ),
+      didReceiveUpdate = !1;
+    var didWarnAboutBadClass = {};
+    var didWarnAboutContextTypeOnFunctionComponent = {};
+    var didWarnAboutContextTypes = {};
+    var didWarnAboutGetDerivedStateOnFunctionComponent = {};
+    var didWarnAboutReassigningProps = !1;
+    var didWarnAboutRevealOrder = {};
+    var didWarnAboutTailOptions = {};
+    var SUSPENDED_MARKER = {
+        dehydrated: null,
+        treeContext: null,
+        retryLane: 0,
+        hydrationErrors: null
+      },
+      hasWarnedAboutUsingNoValuePropOnContextProvider = !1,
+      didWarnAboutUndefinedSnapshotBeforeUpdate = null;
+    didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();
+    var offscreenSubtreeIsHidden = !1,
+      offscreenSubtreeWasHidden = !1,
+      needsFormReset = !1,
+      PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set,
+      nextEffect = null,
+      inProgressLanes = null,
+      inProgressRoot = null,
+      hostParent = null,
+      hostParentIsContainer = !1,
+      currentHoistableRoot = null,
+      suspenseyCommitFlag = 8192,
+      DefaultAsyncDispatcher = {
+        getCacheForType: function (resourceType) {
+          var cache = readContext(CacheContext),
+            cacheForType = cache.data.get(resourceType);
+          void 0 === cacheForType &&
+            ((cacheForType = resourceType()),
+            cache.data.set(resourceType, cacheForType));
+          return cacheForType;
+        },
+        getOwner: function () {
+          return current;
+        }
+      };
+    if ("function" === typeof Symbol && Symbol.for) {
+      var symbolFor = Symbol.for;
+      symbolFor("selector.component");
+      symbolFor("selector.has_pseudo_class");
+      symbolFor("selector.role");
+      symbolFor("selector.test_id");
+      symbolFor("selector.text");
+    }
+    var commitHooks = [],
+      PossiblyWeakMap = "function" === typeof WeakMap ? WeakMap : Map,
+      NoContext = 0,
+      RenderContext = 2,
+      CommitContext = 4,
+      RootInProgress = 0,
+      RootFatalErrored = 1,
+      RootErrored = 2,
+      RootSuspended = 3,
+      RootSuspendedWithDelay = 4,
+      RootSuspendedAtTheShell = 6,
+      RootCompleted = 5,
+      executionContext = NoContext,
+      workInProgressRoot = null,
+      workInProgress = null,
+      workInProgressRootRenderLanes = 0,
+      NotSuspended = 0,
+      SuspendedOnError = 1,
+      SuspendedOnData = 2,
+      SuspendedOnImmediate = 3,
+      SuspendedOnInstance = 4,
+      SuspendedOnInstanceAndReadyToContinue = 5,
+      SuspendedOnDeprecatedThrowPromise = 6,
+      SuspendedAndReadyToContinue = 7,
+      SuspendedOnHydration = 8,
+      SuspendedOnAction = 9,
+      workInProgressSuspendedReason = NotSuspended,
+      workInProgressThrownValue = null,
+      workInProgressRootDidSkipSuspendedSiblings = !1,
+      workInProgressRootIsPrerendering = !1,
+      workInProgressRootDidAttachPingListener = !1,
+      entangledRenderLanes = 0,
+      workInProgressRootExitStatus = RootInProgress,
+      workInProgressRootSkippedLanes = 0,
+      workInProgressRootInterleavedUpdatedLanes = 0,
+      workInProgressRootPingedLanes = 0,
+      workInProgressDeferredLane = 0,
+      workInProgressSuspendedRetryLanes = 0,
+      workInProgressRootConcurrentErrors = null,
+      workInProgressRootRecoverableErrors = null,
+      workInProgressRootDidIncludeRecursiveRenderUpdate = !1,
+      globalMostRecentFallbackTime = 0,
+      FALLBACK_THROTTLE_MS = 300,
+      workInProgressRootRenderTargetTime = Infinity,
+      RENDER_TIMEOUT_MS = 500,
+      workInProgressTransitions = null,
+      legacyErrorBoundariesThatAlreadyFailed = null,
+      IMMEDIATE_COMMIT = 0,
+      SUSPENDED_COMMIT = 1,
+      THROTTLED_COMMIT = 2,
+      NO_PENDING_EFFECTS = 0,
+      PENDING_MUTATION_PHASE = 1,
+      PENDING_LAYOUT_PHASE = 2,
+      PENDING_AFTER_MUTATION_PHASE = 3,
+      PENDING_SPAWNED_WORK = 4,
+      PENDING_PASSIVE_PHASE = 5,
+      pendingEffectsStatus = 0,
+      pendingEffectsRoot = null,
+      pendingFinishedWork = null,
+      pendingEffectsLanes = 0,
+      pendingEffectsRemainingLanes = 0,
+      pendingPassiveTransitions = null,
+      pendingRecoverableErrors = null,
+      NESTED_UPDATE_LIMIT = 50,
+      nestedUpdateCount = 0,
+      rootWithNestedUpdates = null,
+      isFlushingPassiveEffects = !1,
+      didScheduleUpdateDuringPassiveEffects = !1,
+      NESTED_PASSIVE_UPDATE_LIMIT = 50,
+      nestedPassiveUpdateCount = 0,
+      rootWithPassiveNestedUpdates = null,
+      isRunningInsertionEffect = !1,
+      didWarnStateUpdateForNotYetMountedComponent = null,
+      didWarnAboutUpdateInRender = !1;
+    var didWarnAboutUpdateInRenderForAnotherComponent = new Set();
+    var fakeActCallbackNode$1 = {},
+      firstScheduledRoot = null,
+      lastScheduledRoot = null,
+      didScheduleMicrotask = !1,
+      didScheduleMicrotask_act = !1,
+      mightHavePendingSyncWork = !1,
+      isFlushingWork = !1,
+      currentEventTransitionLane = 0,
+      fakeActCallbackNode = {};
+    (function () {
+      for (var i = 0; i < simpleEventPluginEvents.length; i++) {
+        var eventName = simpleEventPluginEvents[i],
+          domEventName = eventName.toLowerCase();
+        eventName = eventName[0].toUpperCase() + eventName.slice(1);
+        registerSimpleEvent(domEventName, "on" + eventName);
+      }
+      registerSimpleEvent(ANIMATION_END, "onAnimationEnd");
+      registerSimpleEvent(ANIMATION_ITERATION, "onAnimationIteration");
+      registerSimpleEvent(ANIMATION_START, "onAnimationStart");
+      registerSimpleEvent("dblclick", "onDoubleClick");
+      registerSimpleEvent("focusin", "onFocus");
+      registerSimpleEvent("focusout", "onBlur");
+      registerSimpleEvent(TRANSITION_RUN, "onTransitionRun");
+      registerSimpleEvent(TRANSITION_START, "onTransitionStart");
+      registerSimpleEvent(TRANSITION_CANCEL, "onTransitionCancel");
+      registerSimpleEvent(TRANSITION_END, "onTransitionEnd");
+    })();
+    registerDirectEvent("onMouseEnter", ["mouseout", "mouseover"]);
+    registerDirectEvent("onMouseLeave", ["mouseout", "mouseover"]);
+    registerDirectEvent("onPointerEnter", ["pointerout", "pointerover"]);
+    registerDirectEvent("onPointerLeave", ["pointerout", "pointerover"]);
+    registerTwoPhaseEvent(
+      "onChange",
+      "change click focusin focusout input keydown keyup selectionchange".split(
+        " "
+      )
+    );
+    registerTwoPhaseEvent(
+      "onSelect",
+      "focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(
+        " "
+      )
+    );
+    registerTwoPhaseEvent("onBeforeInput", [
+      "compositionend",
+      "keypress",
+      "textInput",
+      "paste"
+    ]);
+    registerTwoPhaseEvent(
+      "onCompositionEnd",
+      "compositionend focusout keydown keypress keyup mousedown".split(" ")
+    );
+    registerTwoPhaseEvent(
+      "onCompositionStart",
+      "compositionstart focusout keydown keypress keyup mousedown".split(" ")
+    );
+    registerTwoPhaseEvent(
+      "onCompositionUpdate",
+      "compositionupdate focusout keydown keypress keyup mousedown".split(" ")
+    );
+    var mediaEventTypes =
+        "abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(
+          " "
+        ),
+      nonDelegatedEvents = new Set(
+        "beforetoggle cancel close invalid load scroll scrollend toggle"
+          .split(" ")
+          .concat(mediaEventTypes)
+      ),
+      listeningMarker = "_reactListening" + Math.random().toString(36).slice(2),
+      didWarnControlledToUncontrolled = !1,
+      didWarnUncontrolledToControlled = !1,
+      didWarnFormActionType = !1,
+      didWarnFormActionName = !1,
+      didWarnFormActionTarget = !1,
+      didWarnFormActionMethod = !1,
+      didWarnPopoverTargetObject = !1;
+    var didWarnForNewBooleanPropsWithEmptyValue = {};
+    var NORMALIZE_NEWLINES_REGEX = /\r\n?/g,
+      NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g,
+      xlinkNamespace = "http://www.w3.org/1999/xlink",
+      xmlNamespace = "http://www.w3.org/XML/1998/namespace",
+      EXPECTED_FORM_ACTION_URL =
+        "javascript:throw new Error('React form unexpectedly submitted.')",
+      SUPPRESS_HYDRATION_WARNING = "suppressHydrationWarning",
+      SUSPENSE_START_DATA = "$",
+      SUSPENSE_END_DATA = "/$",
+      SUSPENSE_PENDING_START_DATA = "$?",
+      SUSPENSE_FALLBACK_START_DATA = "$!",
+      PREAMBLE_CONTRIBUTION_HTML = 1,
+      PREAMBLE_CONTRIBUTION_BODY = 2,
+      PREAMBLE_CONTRIBUTION_HEAD = 4,
+      FORM_STATE_IS_MATCHING = "F!",
+      FORM_STATE_IS_NOT_MATCHING = "F",
+      DOCUMENT_READY_STATE_COMPLETE = "complete",
+      STYLE = "style",
+      HostContextNamespaceNone = 0,
+      HostContextNamespaceSvg = 1,
+      HostContextNamespaceMath = 2,
+      eventsEnabled = null,
+      selectionInformation = null,
+      warnedUnknownTags = { dialog: !0, webview: !0 },
+      currentPopstateTransitionEvent = null,
+      scheduleTimeout = "function" === typeof setTimeout ? setTimeout : void 0,
+      cancelTimeout =
+        "function" === typeof clearTimeout ? clearTimeout : void 0,
+      noTimeout = -1,
+      localPromise = "function" === typeof Promise ? Promise : void 0,
+      scheduleMicrotask =
+        "function" === typeof queueMicrotask
+          ? queueMicrotask
+          : "undefined" !== typeof localPromise
+            ? function (callback) {
+                return localPromise
+                  .resolve(null)
+                  .then(callback)
+                  .catch(handleErrorInNextTick);
+              }
+            : scheduleTimeout,
+      previousHydratableOnEnteringScopedSingleton = null,
+      NotLoaded = 0,
+      Loaded = 1,
+      Errored = 2,
+      Settled = 3,
+      Inserted = 4,
+      preloadPropsMap = new Map(),
+      preconnectsSet = new Set(),
+      previousDispatcher = ReactDOMSharedInternals.d;
+    ReactDOMSharedInternals.d = {
+      f: function () {
+        var previousWasRendering = previousDispatcher.f(),
+          wasRendering = flushSyncWork$1();
+        return previousWasRendering || wasRendering;
+      },
+      r: function (form) {
+        var formInst = getInstanceFromNode(form);
+        null !== formInst && 5 === formInst.tag && "form" === formInst.type
+          ? requestFormReset$1(formInst)
+          : previousDispatcher.r(form);
+      },
+      D: function (href) {
+        previousDispatcher.D(href);
+        preconnectAs("dns-prefetch", href, null);
+      },
+      C: function (href, crossOrigin) {
+        previousDispatcher.C(href, crossOrigin);
+        preconnectAs("preconnect", href, crossOrigin);
+      },
+      L: function (href, as, options) {
+        previousDispatcher.L(href, as, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && href && as) {
+          var preloadSelector =
+            'link[rel="preload"][as="' +
+            escapeSelectorAttributeValueInsideDoubleQuotes(as) +
+            '"]';
+          "image" === as
+            ? options && options.imageSrcSet
+              ? ((preloadSelector +=
+                  '[imagesrcset="' +
+                  escapeSelectorAttributeValueInsideDoubleQuotes(
+                    options.imageSrcSet
+                  ) +
+                  '"]'),
+                "string" === typeof options.imageSizes &&
+                  (preloadSelector +=
+                    '[imagesizes="' +
+                    escapeSelectorAttributeValueInsideDoubleQuotes(
+                      options.imageSizes
+                    ) +
+                    '"]'))
+              : (preloadSelector +=
+                  '[href="' +
+                  escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+                  '"]')
+            : (preloadSelector +=
+                '[href="' +
+                escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+                '"]');
+          var key = preloadSelector;
+          switch (as) {
+            case "style":
+              key = getStyleKey(href);
+              break;
+            case "script":
+              key = getScriptKey(href);
+          }
+          preloadPropsMap.has(key) ||
+            ((href = assign(
+              {
+                rel: "preload",
+                href:
+                  "image" === as && options && options.imageSrcSet
+                    ? void 0
+                    : href,
+                as: as
+              },
+              options
+            )),
+            preloadPropsMap.set(key, href),
+            null !== ownerDocument.querySelector(preloadSelector) ||
+              ("style" === as &&
+                ownerDocument.querySelector(
+                  getStylesheetSelectorFromKey(key)
+                )) ||
+              ("script" === as &&
+                ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||
+              ((as = ownerDocument.createElement("link")),
+              setInitialProperties(as, "link", href),
+              markNodeAsHoistable(as),
+              ownerDocument.head.appendChild(as)));
+        }
+      },
+      m: function (href, options) {
+        previousDispatcher.m(href, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && href) {
+          var as =
+              options && "string" === typeof options.as ? options.as : "script",
+            preloadSelector =
+              'link[rel="modulepreload"][as="' +
+              escapeSelectorAttributeValueInsideDoubleQuotes(as) +
+              '"][href="' +
+              escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+              '"]',
+            key = preloadSelector;
+          switch (as) {
+            case "audioworklet":
+            case "paintworklet":
+            case "serviceworker":
+            case "sharedworker":
+            case "worker":
+            case "script":
+              key = getScriptKey(href);
+          }
+          if (
+            !preloadPropsMap.has(key) &&
+            ((href = assign({ rel: "modulepreload", href: href }, options)),
+            preloadPropsMap.set(key, href),
+            null === ownerDocument.querySelector(preloadSelector))
+          ) {
+            switch (as) {
+              case "audioworklet":
+              case "paintworklet":
+              case "serviceworker":
+              case "sharedworker":
+              case "worker":
+              case "script":
+                if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))
+                  return;
+            }
+            as = ownerDocument.createElement("link");
+            setInitialProperties(as, "link", href);
+            markNodeAsHoistable(as);
+            ownerDocument.head.appendChild(as);
+          }
+        }
+      },
+      X: function (src, options) {
+        previousDispatcher.X(src, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && src) {
+          var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,
+            key = getScriptKey(src),
+            resource = scripts.get(key);
+          resource ||
+            ((resource = ownerDocument.querySelector(
+              getScriptSelectorFromKey(key)
+            )),
+            resource ||
+              ((src = assign({ src: src, async: !0 }, options)),
+              (options = preloadPropsMap.get(key)) &&
+                adoptPreloadPropsForScript(src, options),
+              (resource = ownerDocument.createElement("script")),
+              markNodeAsHoistable(resource),
+              setInitialProperties(resource, "link", src),
+              ownerDocument.head.appendChild(resource)),
+            (resource = {
+              type: "script",
+              instance: resource,
+              count: 1,
+              state: null
+            }),
+            scripts.set(key, resource));
+        }
+      },
+      S: function (href, precedence, options) {
+        previousDispatcher.S(href, precedence, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && href) {
+          var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,
+            key = getStyleKey(href);
+          precedence = precedence || "default";
+          var resource = styles.get(key);
+          if (!resource) {
+            var state = { loading: NotLoaded, preload: null };
+            if (
+              (resource = ownerDocument.querySelector(
+                getStylesheetSelectorFromKey(key)
+              ))
+            )
+              state.loading = Loaded | Inserted;
+            else {
+              href = assign(
+                {
+                  rel: "stylesheet",
+                  href: href,
+                  "data-precedence": precedence
+                },
+                options
+              );
+              (options = preloadPropsMap.get(key)) &&
+                adoptPreloadPropsForStylesheet(href, options);
+              var link = (resource = ownerDocument.createElement("link"));
+              markNodeAsHoistable(link);
+              setInitialProperties(link, "link", href);
+              link._p = new Promise(function (resolve, reject) {
+                link.onload = resolve;
+                link.onerror = reject;
+              });
+              link.addEventListener("load", function () {
+                state.loading |= Loaded;
+              });
+              link.addEventListener("error", function () {
+                state.loading |= Errored;
+              });
+              state.loading |= Inserted;
+              insertStylesheet(resource, precedence, ownerDocument);
+            }
+            resource = {
+              type: "stylesheet",
+              instance: resource,
+              count: 1,
+              state: state
+            };
+            styles.set(key, resource);
+          }
+        }
+      },
+      M: function (src, options) {
+        previousDispatcher.M(src, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && src) {
+          var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,
+            key = getScriptKey(src),
+            resource = scripts.get(key);
+          resource ||
+            ((resource = ownerDocument.querySelector(
+              getScriptSelectorFromKey(key)
+            )),
+            resource ||
+              ((src = assign({ src: src, async: !0, type: "module" }, options)),
+              (options = preloadPropsMap.get(key)) &&
+                adoptPreloadPropsForScript(src, options),
+              (resource = ownerDocument.createElement("script")),
+              markNodeAsHoistable(resource),
+              setInitialProperties(resource, "link", src),
+              ownerDocument.head.appendChild(resource)),
+            (resource = {
+              type: "script",
+              instance: resource,
+              count: 1,
+              state: null
+            }),
+            scripts.set(key, resource));
+        }
+      }
+    };
+    var globalDocument = "undefined" === typeof document ? null : document,
+      tagCaches = null,
+      suspendedState = null,
+      LAST_PRECEDENCE = null,
+      precedencesByRoot = null,
+      NotPendingTransition = NotPending,
+      HostTransitionContext = {
+        $$typeof: REACT_CONTEXT_TYPE,
+        Provider: null,
+        Consumer: null,
+        _currentValue: NotPendingTransition,
+        _currentValue2: NotPendingTransition,
+        _threadCount: 0
+      },
+      badgeFormat = "%c%s%c ",
+      badgeStyle =
+        "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+      resetStyle = "",
+      pad = " ",
+      bind = Function.prototype.bind;
+    var didWarnAboutNestedUpdates = !1;
+    var overrideHookState = null,
+      overrideHookStateDeletePath = null,
+      overrideHookStateRenamePath = null,
+      overrideProps = null,
+      overridePropsDeletePath = null,
+      overridePropsRenamePath = null,
+      scheduleUpdate = null,
+      setErrorHandler = null,
+      setSuspenseHandler = null;
+    overrideHookState = function (fiber, id, path, value) {
+      id = findHook(fiber, id);
+      null !== id &&
+        ((path = copyWithSetImpl(id.memoizedState, path, 0, value)),
+        (id.memoizedState = path),
+        (id.baseState = path),
+        (fiber.memoizedProps = assign({}, fiber.memoizedProps)),
+        (path = enqueueConcurrentRenderForLane(fiber, 2)),
+        null !== path && scheduleUpdateOnFiber(path, fiber, 2));
+    };
+    overrideHookStateDeletePath = function (fiber, id, path) {
+      id = findHook(fiber, id);
+      null !== id &&
+        ((path = copyWithDeleteImpl(id.memoizedState, path, 0)),
+        (id.memoizedState = path),
+        (id.baseState = path),
+        (fiber.memoizedProps = assign({}, fiber.memoizedProps)),
+        (path = enqueueConcurrentRenderForLane(fiber, 2)),
+        null !== path && scheduleUpdateOnFiber(path, fiber, 2));
+    };
+    overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {
+      id = findHook(fiber, id);
+      null !== id &&
+        ((oldPath = copyWithRename(id.memoizedState, oldPath, newPath)),
+        (id.memoizedState = oldPath),
+        (id.baseState = oldPath),
+        (fiber.memoizedProps = assign({}, fiber.memoizedProps)),
+        (oldPath = enqueueConcurrentRenderForLane(fiber, 2)),
+        null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2));
+    };
+    overrideProps = function (fiber, path, value) {
+      fiber.pendingProps = copyWithSetImpl(fiber.memoizedProps, path, 0, value);
+      fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);
+      path = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== path && scheduleUpdateOnFiber(path, fiber, 2);
+    };
+    overridePropsDeletePath = function (fiber, path) {
+      fiber.pendingProps = copyWithDeleteImpl(fiber.memoizedProps, path, 0);
+      fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);
+      path = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== path && scheduleUpdateOnFiber(path, fiber, 2);
+    };
+    overridePropsRenamePath = function (fiber, oldPath, newPath) {
+      fiber.pendingProps = copyWithRename(
+        fiber.memoizedProps,
+        oldPath,
+        newPath
+      );
+      fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);
+      oldPath = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2);
+    };
+    scheduleUpdate = function (fiber) {
+      var root = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== root && scheduleUpdateOnFiber(root, fiber, 2);
+    };
+    setErrorHandler = function (newShouldErrorImpl) {
+      shouldErrorImpl = newShouldErrorImpl;
+    };
+    setSuspenseHandler = function (newShouldSuspendImpl) {
+      shouldSuspendImpl = newShouldSuspendImpl;
+    };
+    var _enabled = !0,
+      return_targetInst = null,
+      hasScheduledReplayAttempt = !1,
+      queuedFocus = null,
+      queuedDrag = null,
+      queuedMouse = null,
+      queuedPointers = new Map(),
+      queuedPointerCaptures = new Map(),
+      queuedExplicitHydrationTargets = [],
+      discreteReplayableEvents =
+        "mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(
+          " "
+        ),
+      lastScheduledReplayQueue = null;
+    ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =
+      function (children) {
+        var root = this._internalRoot;
+        if (null === root) throw Error("Cannot update an unmounted root.");
+        var args = arguments;
+        "function" === typeof args[1]
+          ? console.error(
+              "does not support the second callback argument. To execute a side effect after rendering, declare it in a component body with useEffect()."
+            )
+          : isValidContainer(args[1])
+            ? console.error(
+                "You passed a container to the second argument of root.render(...). You don't need to pass it again since you already passed it to create the root."
+              )
+            : "undefined" !== typeof args[1] &&
+              console.error(
+                "You passed a second argument to root.render(...) but it only accepts one argument."
+              );
+        args = children;
+        var current = root.current,
+          lane = requestUpdateLane(current);
+        updateContainerImpl(current, lane, args, root, null, null);
+      };
+    ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =
+      function () {
+        var args = arguments;
+        "function" === typeof args[0] &&
+          console.error(
+            "does not support a callback argument. To execute a side effect after rendering, declare it in a component body with useEffect()."
+          );
+        args = this._internalRoot;
+        if (null !== args) {
+          this._internalRoot = null;
+          var container = args.containerInfo;
+          (executionContext & (RenderContext | CommitContext)) !== NoContext &&
+            console.error(
+              "Attempted to synchronously unmount a root while React was already rendering. React cannot finish unmounting the root until the current render has completed, which may lead to a race condition."
+            );
+          updateContainerImpl(args.current, 2, null, args, null, null);
+          flushSyncWork$1();
+          container[internalContainerInstanceKey] = null;
+        }
+      };
+    ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (
+      target
+    ) {
+      if (target) {
+        var updatePriority = resolveUpdatePriority();
+        target = { blockedOn: null, target: target, priority: updatePriority };
+        for (
+          var i = 0;
+          i < queuedExplicitHydrationTargets.length &&
+          0 !== updatePriority &&
+          updatePriority < queuedExplicitHydrationTargets[i].priority;
+          i++
+        );
+        queuedExplicitHydrationTargets.splice(i, 0, target);
+        0 === i && attemptExplicitHydrationTarget(target);
+      }
+    };
+    (function () {
+      var isomorphicReactPackageVersion = React.version;
+      if ("19.1.1" !== isomorphicReactPackageVersion)
+        throw Error(
+          'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n  - react:      ' +
+            (isomorphicReactPackageVersion +
+              "\n  - react-dom:  19.1.1\nLearn more: https://react.dev/warnings/version-mismatch")
+        );
+    })();
+    ("function" === typeof Map &&
+      null != Map.prototype &&
+      "function" === typeof Map.prototype.forEach &&
+      "function" === typeof Set &&
+      null != Set.prototype &&
+      "function" === typeof Set.prototype.clear &&
+      "function" === typeof Set.prototype.forEach) ||
+      console.error(
+        "React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://react.dev/link/react-polyfills"
+      );
+    ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
+      var fiber = componentOrElement._reactInternals;
+      if (void 0 === fiber) {
+        if ("function" === typeof componentOrElement.render)
+          throw Error("Unable to find node on an unmounted component.");
+        componentOrElement = Object.keys(componentOrElement).join(",");
+        throw Error(
+          "Argument appears to not be a ReactComponent. Keys: " +
+            componentOrElement
+        );
+      }
+      componentOrElement = findCurrentFiberUsingSlowPath(fiber);
+      componentOrElement =
+        null !== componentOrElement
+          ? findCurrentHostFiberImpl(componentOrElement)
+          : null;
+      componentOrElement =
+        null === componentOrElement ? null : componentOrElement.stateNode;
+      return componentOrElement;
+    };
+    if (
+      !(function () {
+        var internals = {
+          bundleType: 1,
+          version: "19.1.1",
+          rendererPackageName: "react-dom",
+          currentDispatcherRef: ReactSharedInternals,
+          reconcilerVersion: "19.1.1"
+        };
+        internals.overrideHookState = overrideHookState;
+        internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
+        internals.overrideHookStateRenamePath = overrideHookStateRenamePath;
+        internals.overrideProps = overrideProps;
+        internals.overridePropsDeletePath = overridePropsDeletePath;
+        internals.overridePropsRenamePath = overridePropsRenamePath;
+        internals.scheduleUpdate = scheduleUpdate;
+        internals.setErrorHandler = setErrorHandler;
+        internals.setSuspenseHandler = setSuspenseHandler;
+        internals.scheduleRefresh = scheduleRefresh;
+        internals.scheduleRoot = scheduleRoot;
+        internals.setRefreshHandler = setRefreshHandler;
+        internals.getCurrentFiber = getCurrentFiberForDevTools;
+        internals.getLaneLabelMap = getLaneLabelMap;
+        internals.injectProfilingHooks = injectProfilingHooks;
+        return injectInternals(internals);
+      })() &&
+      canUseDOM &&
+      window.top === window.self &&
+      ((-1 < navigator.userAgent.indexOf("Chrome") &&
+        -1 === navigator.userAgent.indexOf("Edge")) ||
+        -1 < navigator.userAgent.indexOf("Firefox"))
+    ) {
+      var protocol = window.location.protocol;
+      /^(https?|file):$/.test(protocol) &&
+        console.info(
+          "%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools" +
+            ("file:" === protocol
+              ? "\nYou might need to use a local HTTP server (instead of file://): https://react.dev/link/react-devtools-faq"
+              : ""),
+          "font-weight:bold"
+        );
+    }
+    exports.createRoot = function (container, options) {
+      if (!isValidContainer(container))
+        throw Error("Target container is not a DOM element.");
+      warnIfReactDOMContainerInDEV(container);
+      var isStrictMode = !1,
+        identifierPrefix = "",
+        onUncaughtError = defaultOnUncaughtError,
+        onCaughtError = defaultOnCaughtError,
+        onRecoverableError = defaultOnRecoverableError,
+        transitionCallbacks = null;
+      null !== options &&
+        void 0 !== options &&
+        (options.hydrate
+          ? console.warn(
+              "hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead."
+            )
+          : "object" === typeof options &&
+            null !== options &&
+            options.$$typeof === REACT_ELEMENT_TYPE &&
+            console.error(
+              "You passed a JSX element to createRoot. You probably meant to call root.render instead. Example usage:\n\n  let root = createRoot(domContainer);\n  root.render(<App />);"
+            ),
+        !0 === options.unstable_strictMode && (isStrictMode = !0),
+        void 0 !== options.identifierPrefix &&
+          (identifierPrefix = options.identifierPrefix),
+        void 0 !== options.onUncaughtError &&
+          (onUncaughtError = options.onUncaughtError),
+        void 0 !== options.onCaughtError &&
+          (onCaughtError = options.onCaughtError),
+        void 0 !== options.onRecoverableError &&
+          (onRecoverableError = options.onRecoverableError),
+        void 0 !== options.unstable_transitionCallbacks &&
+          (transitionCallbacks = options.unstable_transitionCallbacks));
+      options = createFiberRoot(
+        container,
+        1,
+        !1,
+        null,
+        null,
+        isStrictMode,
+        identifierPrefix,
+        onUncaughtError,
+        onCaughtError,
+        onRecoverableError,
+        transitionCallbacks,
+        null
+      );
+      container[internalContainerInstanceKey] = options.current;
+      listenToAllSupportedEvents(container);
+      return new ReactDOMRoot(options);
+    };
+    exports.hydrateRoot = function (container, initialChildren, options) {
+      if (!isValidContainer(container))
+        throw Error("Target container is not a DOM element.");
+      warnIfReactDOMContainerInDEV(container);
+      void 0 === initialChildren &&
+        console.error(
+          "Must provide initial children as second argument to hydrateRoot. Example usage: hydrateRoot(domContainer, <App />)"
+        );
+      var isStrictMode = !1,
+        identifierPrefix = "",
+        onUncaughtError = defaultOnUncaughtError,
+        onCaughtError = defaultOnCaughtError,
+        onRecoverableError = defaultOnRecoverableError,
+        transitionCallbacks = null,
+        formState = null;
+      null !== options &&
+        void 0 !== options &&
+        (!0 === options.unstable_strictMode && (isStrictMode = !0),
+        void 0 !== options.identifierPrefix &&
+          (identifierPrefix = options.identifierPrefix),
+        void 0 !== options.onUncaughtError &&
+          (onUncaughtError = options.onUncaughtError),
+        void 0 !== options.onCaughtError &&
+          (onCaughtError = options.onCaughtError),
+        void 0 !== options.onRecoverableError &&
+          (onRecoverableError = options.onRecoverableError),
+        void 0 !== options.unstable_transitionCallbacks &&
+          (transitionCallbacks = options.unstable_transitionCallbacks),
+        void 0 !== options.formState && (formState = options.formState));
+      initialChildren = createFiberRoot(
+        container,
+        1,
+        !0,
+        initialChildren,
+        null != options ? options : null,
+        isStrictMode,
+        identifierPrefix,
+        onUncaughtError,
+        onCaughtError,
+        onRecoverableError,
+        transitionCallbacks,
+        formState
+      );
+      initialChildren.context = getContextForSubtree(null);
+      options = initialChildren.current;
+      isStrictMode = requestUpdateLane(options);
+      isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);
+      identifierPrefix = createUpdate(isStrictMode);
+      identifierPrefix.callback = null;
+      enqueueUpdate(options, identifierPrefix, isStrictMode);
+      options = isStrictMode;
+      initialChildren.current.lanes = options;
+      markRootUpdated$1(initialChildren, options);
+      ensureRootIsScheduled(initialChildren);
+      container[internalContainerInstanceKey] = initialChildren.current;
+      listenToAllSupportedEvents(container);
+      return new ReactDOMHydrationRoot(initialChildren);
+    };
+    exports.version = "19.1.1";
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+  })();
Index: node_modules/react-dom/cjs/react-dom-client.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-client.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-client.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15393 @@
+/**
+ * @license React
+ * react-dom-client.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+ Modernizr 3.0.0pre (Custom Build) | MIT
+*/
+"use strict";
+var Scheduler = require("scheduler"),
+  React = require("react"),
+  ReactDOM = require("react-dom");
+function formatProdErrorMessage(code) {
+  var url = "https://react.dev/errors/" + code;
+  if (1 < arguments.length) {
+    url += "?args[]=" + encodeURIComponent(arguments[1]);
+    for (var i = 2; i < arguments.length; i++)
+      url += "&args[]=" + encodeURIComponent(arguments[i]);
+  }
+  return (
+    "Minified React error #" +
+    code +
+    "; visit " +
+    url +
+    " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."
+  );
+}
+function isValidContainer(node) {
+  return !(
+    !node ||
+    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)
+  );
+}
+function getNearestMountedFiber(fiber) {
+  var node = fiber,
+    nearestMounted = fiber;
+  if (fiber.alternate) for (; node.return; ) node = node.return;
+  else {
+    fiber = node;
+    do
+      (node = fiber),
+        0 !== (node.flags & 4098) && (nearestMounted = node.return),
+        (fiber = node.return);
+    while (fiber);
+  }
+  return 3 === node.tag ? nearestMounted : null;
+}
+function getSuspenseInstanceFromFiber(fiber) {
+  if (13 === fiber.tag) {
+    var suspenseState = fiber.memoizedState;
+    null === suspenseState &&
+      ((fiber = fiber.alternate),
+      null !== fiber && (suspenseState = fiber.memoizedState));
+    if (null !== suspenseState) return suspenseState.dehydrated;
+  }
+  return null;
+}
+function assertIsMounted(fiber) {
+  if (getNearestMountedFiber(fiber) !== fiber)
+    throw Error(formatProdErrorMessage(188));
+}
+function findCurrentFiberUsingSlowPath(fiber) {
+  var alternate = fiber.alternate;
+  if (!alternate) {
+    alternate = getNearestMountedFiber(fiber);
+    if (null === alternate) throw Error(formatProdErrorMessage(188));
+    return alternate !== fiber ? null : fiber;
+  }
+  for (var a = fiber, b = alternate; ; ) {
+    var parentA = a.return;
+    if (null === parentA) break;
+    var parentB = parentA.alternate;
+    if (null === parentB) {
+      b = parentA.return;
+      if (null !== b) {
+        a = b;
+        continue;
+      }
+      break;
+    }
+    if (parentA.child === parentB.child) {
+      for (parentB = parentA.child; parentB; ) {
+        if (parentB === a) return assertIsMounted(parentA), fiber;
+        if (parentB === b) return assertIsMounted(parentA), alternate;
+        parentB = parentB.sibling;
+      }
+      throw Error(formatProdErrorMessage(188));
+    }
+    if (a.return !== b.return) (a = parentA), (b = parentB);
+    else {
+      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {
+        if (child$0 === a) {
+          didFindChild = !0;
+          a = parentA;
+          b = parentB;
+          break;
+        }
+        if (child$0 === b) {
+          didFindChild = !0;
+          b = parentA;
+          a = parentB;
+          break;
+        }
+        child$0 = child$0.sibling;
+      }
+      if (!didFindChild) {
+        for (child$0 = parentB.child; child$0; ) {
+          if (child$0 === a) {
+            didFindChild = !0;
+            a = parentB;
+            b = parentA;
+            break;
+          }
+          if (child$0 === b) {
+            didFindChild = !0;
+            b = parentB;
+            a = parentA;
+            break;
+          }
+          child$0 = child$0.sibling;
+        }
+        if (!didFindChild) throw Error(formatProdErrorMessage(189));
+      }
+    }
+    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));
+  }
+  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));
+  return a.stateNode.current === a ? fiber : alternate;
+}
+function findCurrentHostFiberImpl(node) {
+  var tag = node.tag;
+  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;
+  for (node = node.child; null !== node; ) {
+    tag = findCurrentHostFiberImpl(node);
+    if (null !== tag) return tag;
+    node = node.sibling;
+  }
+  return null;
+}
+var assign = Object.assign,
+  REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy");
+Symbol.for("react.scope");
+var REACT_ACTIVITY_TYPE = Symbol.for("react.activity");
+Symbol.for("react.legacy_hidden");
+Symbol.for("react.tracing_marker");
+var REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel");
+Symbol.for("react.view_transition");
+var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
+function getIteratorFn(maybeIterable) {
+  if (null === maybeIterable || "object" !== typeof maybeIterable) return null;
+  maybeIterable =
+    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
+    maybeIterable["@@iterator"];
+  return "function" === typeof maybeIterable ? maybeIterable : null;
+}
+var REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function getComponentNameFromType(type) {
+  if (null == type) return null;
+  if ("function" === typeof type)
+    return type.$$typeof === REACT_CLIENT_REFERENCE
+      ? null
+      : type.displayName || type.name || null;
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_FRAGMENT_TYPE:
+      return "Fragment";
+    case REACT_PROFILER_TYPE:
+      return "Profiler";
+    case REACT_STRICT_MODE_TYPE:
+      return "StrictMode";
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+    case REACT_ACTIVITY_TYPE:
+      return "Activity";
+  }
+  if ("object" === typeof type)
+    switch (type.$$typeof) {
+      case REACT_PORTAL_TYPE:
+        return "Portal";
+      case REACT_CONTEXT_TYPE:
+        return (type.displayName || "Context") + ".Provider";
+      case REACT_CONSUMER_TYPE:
+        return (type._context.displayName || "Context") + ".Consumer";
+      case REACT_FORWARD_REF_TYPE:
+        var innerType = type.render;
+        type = type.displayName;
+        type ||
+          ((type = innerType.displayName || innerType.name || ""),
+          (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+        return type;
+      case REACT_MEMO_TYPE:
+        return (
+          (innerType = type.displayName || null),
+          null !== innerType
+            ? innerType
+            : getComponentNameFromType(type.type) || "Memo"
+        );
+      case REACT_LAZY_TYPE:
+        innerType = type._payload;
+        type = type._init;
+        try {
+          return getComponentNameFromType(type(innerType));
+        } catch (x) {}
+    }
+  return null;
+}
+var isArrayImpl = Array.isArray,
+  ReactSharedInternals =
+    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  ReactDOMSharedInternals =
+    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  sharedNotPendingObject = {
+    pending: !1,
+    data: null,
+    method: null,
+    action: null
+  },
+  valueStack = [],
+  index = -1;
+function createCursor(defaultValue) {
+  return { current: defaultValue };
+}
+function pop(cursor) {
+  0 > index ||
+    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);
+}
+function push(cursor, value) {
+  index++;
+  valueStack[index] = cursor.current;
+  cursor.current = value;
+}
+var contextStackCursor = createCursor(null),
+  contextFiberStackCursor = createCursor(null),
+  rootInstanceStackCursor = createCursor(null),
+  hostTransitionProviderCursor = createCursor(null);
+function pushHostContainer(fiber, nextRootInstance) {
+  push(rootInstanceStackCursor, nextRootInstance);
+  push(contextFiberStackCursor, fiber);
+  push(contextStackCursor, null);
+  switch (nextRootInstance.nodeType) {
+    case 9:
+    case 11:
+      fiber = (fiber = nextRootInstance.documentElement)
+        ? (fiber = fiber.namespaceURI)
+          ? getOwnHostContext(fiber)
+          : 0
+        : 0;
+      break;
+    default:
+      if (
+        ((fiber = nextRootInstance.tagName),
+        (nextRootInstance = nextRootInstance.namespaceURI))
+      )
+        (nextRootInstance = getOwnHostContext(nextRootInstance)),
+          (fiber = getChildHostContextProd(nextRootInstance, fiber));
+      else
+        switch (fiber) {
+          case "svg":
+            fiber = 1;
+            break;
+          case "math":
+            fiber = 2;
+            break;
+          default:
+            fiber = 0;
+        }
+  }
+  pop(contextStackCursor);
+  push(contextStackCursor, fiber);
+}
+function popHostContainer() {
+  pop(contextStackCursor);
+  pop(contextFiberStackCursor);
+  pop(rootInstanceStackCursor);
+}
+function pushHostContext(fiber) {
+  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);
+  var context = contextStackCursor.current;
+  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);
+  context !== JSCompiler_inline_result &&
+    (push(contextFiberStackCursor, fiber),
+    push(contextStackCursor, JSCompiler_inline_result));
+}
+function popHostContext(fiber) {
+  contextFiberStackCursor.current === fiber &&
+    (pop(contextStackCursor), pop(contextFiberStackCursor));
+  hostTransitionProviderCursor.current === fiber &&
+    (pop(hostTransitionProviderCursor),
+    (HostTransitionContext._currentValue = sharedNotPendingObject));
+}
+var hasOwnProperty = Object.prototype.hasOwnProperty,
+  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,
+  cancelCallback$1 = Scheduler.unstable_cancelCallback,
+  shouldYield = Scheduler.unstable_shouldYield,
+  requestPaint = Scheduler.unstable_requestPaint,
+  now = Scheduler.unstable_now,
+  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,
+  ImmediatePriority = Scheduler.unstable_ImmediatePriority,
+  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,
+  NormalPriority$1 = Scheduler.unstable_NormalPriority,
+  LowPriority = Scheduler.unstable_LowPriority,
+  IdlePriority = Scheduler.unstable_IdlePriority,
+  log$1 = Scheduler.log,
+  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,
+  rendererID = null,
+  injectedHook = null;
+function setIsStrictModeForDevtools(newIsStrictMode) {
+  "function" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);
+  if (injectedHook && "function" === typeof injectedHook.setStrictMode)
+    try {
+      injectedHook.setStrictMode(rendererID, newIsStrictMode);
+    } catch (err) {}
+}
+var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+  log = Math.log,
+  LN2 = Math.LN2;
+function clz32Fallback(x) {
+  x >>>= 0;
+  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+}
+var nextTransitionLane = 256,
+  nextRetryLane = 4194304;
+function getHighestPriorityLanes(lanes) {
+  var pendingSyncLanes = lanes & 42;
+  if (0 !== pendingSyncLanes) return pendingSyncLanes;
+  switch (lanes & -lanes) {
+    case 1:
+      return 1;
+    case 2:
+      return 2;
+    case 4:
+      return 4;
+    case 8:
+      return 8;
+    case 16:
+      return 16;
+    case 32:
+      return 32;
+    case 64:
+      return 64;
+    case 128:
+      return 128;
+    case 256:
+    case 512:
+    case 1024:
+    case 2048:
+    case 4096:
+    case 8192:
+    case 16384:
+    case 32768:
+    case 65536:
+    case 131072:
+    case 262144:
+    case 524288:
+    case 1048576:
+    case 2097152:
+      return lanes & 4194048;
+    case 4194304:
+    case 8388608:
+    case 16777216:
+    case 33554432:
+      return lanes & 62914560;
+    case 67108864:
+      return 67108864;
+    case 134217728:
+      return 134217728;
+    case 268435456:
+      return 268435456;
+    case 536870912:
+      return 536870912;
+    case 1073741824:
+      return 0;
+    default:
+      return lanes;
+  }
+}
+function getNextLanes(root, wipLanes, rootHasPendingCommit) {
+  var pendingLanes = root.pendingLanes;
+  if (0 === pendingLanes) return 0;
+  var nextLanes = 0,
+    suspendedLanes = root.suspendedLanes,
+    pingedLanes = root.pingedLanes;
+  root = root.warmLanes;
+  var nonIdlePendingLanes = pendingLanes & 134217727;
+  0 !== nonIdlePendingLanes
+    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),
+      0 !== pendingLanes
+        ? (nextLanes = getHighestPriorityLanes(pendingLanes))
+        : ((pingedLanes &= nonIdlePendingLanes),
+          0 !== pingedLanes
+            ? (nextLanes = getHighestPriorityLanes(pingedLanes))
+            : rootHasPendingCommit ||
+              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),
+              0 !== rootHasPendingCommit &&
+                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))
+    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),
+      0 !== nonIdlePendingLanes
+        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))
+        : 0 !== pingedLanes
+          ? (nextLanes = getHighestPriorityLanes(pingedLanes))
+          : rootHasPendingCommit ||
+            ((rootHasPendingCommit = pendingLanes & ~root),
+            0 !== rootHasPendingCommit &&
+              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));
+  return 0 === nextLanes
+    ? 0
+    : 0 !== wipLanes &&
+        wipLanes !== nextLanes &&
+        0 === (wipLanes & suspendedLanes) &&
+        ((suspendedLanes = nextLanes & -nextLanes),
+        (rootHasPendingCommit = wipLanes & -wipLanes),
+        suspendedLanes >= rootHasPendingCommit ||
+          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))
+      ? wipLanes
+      : nextLanes;
+}
+function checkIfRootIsPrerendering(root, renderLanes) {
+  return (
+    0 ===
+    (root.pendingLanes &
+      ~(root.suspendedLanes & ~root.pingedLanes) &
+      renderLanes)
+  );
+}
+function computeExpirationTime(lane, currentTime) {
+  switch (lane) {
+    case 1:
+    case 2:
+    case 4:
+    case 8:
+    case 64:
+      return currentTime + 250;
+    case 16:
+    case 32:
+    case 128:
+    case 256:
+    case 512:
+    case 1024:
+    case 2048:
+    case 4096:
+    case 8192:
+    case 16384:
+    case 32768:
+    case 65536:
+    case 131072:
+    case 262144:
+    case 524288:
+    case 1048576:
+    case 2097152:
+      return currentTime + 5e3;
+    case 4194304:
+    case 8388608:
+    case 16777216:
+    case 33554432:
+      return -1;
+    case 67108864:
+    case 134217728:
+    case 268435456:
+    case 536870912:
+    case 1073741824:
+      return -1;
+    default:
+      return -1;
+  }
+}
+function claimNextTransitionLane() {
+  var lane = nextTransitionLane;
+  nextTransitionLane <<= 1;
+  0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);
+  return lane;
+}
+function claimNextRetryLane() {
+  var lane = nextRetryLane;
+  nextRetryLane <<= 1;
+  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);
+  return lane;
+}
+function createLaneMap(initial) {
+  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);
+  return laneMap;
+}
+function markRootUpdated$1(root, updateLane) {
+  root.pendingLanes |= updateLane;
+  268435456 !== updateLane &&
+    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));
+}
+function markRootFinished(
+  root,
+  finishedLanes,
+  remainingLanes,
+  spawnedLane,
+  updatedLanes,
+  suspendedRetryLanes
+) {
+  var previouslyPendingLanes = root.pendingLanes;
+  root.pendingLanes = remainingLanes;
+  root.suspendedLanes = 0;
+  root.pingedLanes = 0;
+  root.warmLanes = 0;
+  root.expiredLanes &= remainingLanes;
+  root.entangledLanes &= remainingLanes;
+  root.errorRecoveryDisabledLanes &= remainingLanes;
+  root.shellSuspendCounter = 0;
+  var entanglements = root.entanglements,
+    expirationTimes = root.expirationTimes,
+    hiddenUpdates = root.hiddenUpdates;
+  for (
+    remainingLanes = previouslyPendingLanes & ~remainingLanes;
+    0 < remainingLanes;
+
+  ) {
+    var index$5 = 31 - clz32(remainingLanes),
+      lane = 1 << index$5;
+    entanglements[index$5] = 0;
+    expirationTimes[index$5] = -1;
+    var hiddenUpdatesForLane = hiddenUpdates[index$5];
+    if (null !== hiddenUpdatesForLane)
+      for (
+        hiddenUpdates[index$5] = null, index$5 = 0;
+        index$5 < hiddenUpdatesForLane.length;
+        index$5++
+      ) {
+        var update = hiddenUpdatesForLane[index$5];
+        null !== update && (update.lane &= -536870913);
+      }
+    remainingLanes &= ~lane;
+  }
+  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);
+  0 !== suspendedRetryLanes &&
+    0 === updatedLanes &&
+    0 !== root.tag &&
+    (root.suspendedLanes |=
+      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));
+}
+function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {
+  root.pendingLanes |= spawnedLane;
+  root.suspendedLanes &= ~spawnedLane;
+  var spawnedLaneIndex = 31 - clz32(spawnedLane);
+  root.entangledLanes |= spawnedLane;
+  root.entanglements[spawnedLaneIndex] =
+    root.entanglements[spawnedLaneIndex] |
+    1073741824 |
+    (entangledLanes & 4194090);
+}
+function markRootEntangled(root, entangledLanes) {
+  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);
+  for (root = root.entanglements; rootEntangledLanes; ) {
+    var index$6 = 31 - clz32(rootEntangledLanes),
+      lane = 1 << index$6;
+    (lane & entangledLanes) | (root[index$6] & entangledLanes) &&
+      (root[index$6] |= entangledLanes);
+    rootEntangledLanes &= ~lane;
+  }
+}
+function getBumpedLaneForHydrationByLane(lane) {
+  switch (lane) {
+    case 2:
+      lane = 1;
+      break;
+    case 8:
+      lane = 4;
+      break;
+    case 32:
+      lane = 16;
+      break;
+    case 256:
+    case 512:
+    case 1024:
+    case 2048:
+    case 4096:
+    case 8192:
+    case 16384:
+    case 32768:
+    case 65536:
+    case 131072:
+    case 262144:
+    case 524288:
+    case 1048576:
+    case 2097152:
+    case 4194304:
+    case 8388608:
+    case 16777216:
+    case 33554432:
+      lane = 128;
+      break;
+    case 268435456:
+      lane = 134217728;
+      break;
+    default:
+      lane = 0;
+  }
+  return lane;
+}
+function lanesToEventPriority(lanes) {
+  lanes &= -lanes;
+  return 2 < lanes
+    ? 8 < lanes
+      ? 0 !== (lanes & 134217727)
+        ? 32
+        : 268435456
+      : 8
+    : 2;
+}
+function resolveUpdatePriority() {
+  var updatePriority = ReactDOMSharedInternals.p;
+  if (0 !== updatePriority) return updatePriority;
+  updatePriority = window.event;
+  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);
+}
+function runWithPriority(priority, fn) {
+  var previousPriority = ReactDOMSharedInternals.p;
+  try {
+    return (ReactDOMSharedInternals.p = priority), fn();
+  } finally {
+    ReactDOMSharedInternals.p = previousPriority;
+  }
+}
+var randomKey = Math.random().toString(36).slice(2),
+  internalInstanceKey = "__reactFiber$" + randomKey,
+  internalPropsKey = "__reactProps$" + randomKey,
+  internalContainerInstanceKey = "__reactContainer$" + randomKey,
+  internalEventHandlersKey = "__reactEvents$" + randomKey,
+  internalEventHandlerListenersKey = "__reactListeners$" + randomKey,
+  internalEventHandlesSetKey = "__reactHandles$" + randomKey,
+  internalRootNodeResourcesKey = "__reactResources$" + randomKey,
+  internalHoistableMarker = "__reactMarker$" + randomKey;
+function detachDeletedInstance(node) {
+  delete node[internalInstanceKey];
+  delete node[internalPropsKey];
+  delete node[internalEventHandlersKey];
+  delete node[internalEventHandlerListenersKey];
+  delete node[internalEventHandlesSetKey];
+}
+function getClosestInstanceFromNode(targetNode) {
+  var targetInst = targetNode[internalInstanceKey];
+  if (targetInst) return targetInst;
+  for (var parentNode = targetNode.parentNode; parentNode; ) {
+    if (
+      (targetInst =
+        parentNode[internalContainerInstanceKey] ||
+        parentNode[internalInstanceKey])
+    ) {
+      parentNode = targetInst.alternate;
+      if (
+        null !== targetInst.child ||
+        (null !== parentNode && null !== parentNode.child)
+      )
+        for (
+          targetNode = getParentSuspenseInstance(targetNode);
+          null !== targetNode;
+
+        ) {
+          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;
+          targetNode = getParentSuspenseInstance(targetNode);
+        }
+      return targetInst;
+    }
+    targetNode = parentNode;
+    parentNode = targetNode.parentNode;
+  }
+  return null;
+}
+function getInstanceFromNode(node) {
+  if (
+    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])
+  ) {
+    var tag = node.tag;
+    if (
+      5 === tag ||
+      6 === tag ||
+      13 === tag ||
+      26 === tag ||
+      27 === tag ||
+      3 === tag
+    )
+      return node;
+  }
+  return null;
+}
+function getNodeFromInstance(inst) {
+  var tag = inst.tag;
+  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;
+  throw Error(formatProdErrorMessage(33));
+}
+function getResourcesFromRoot(root) {
+  var resources = root[internalRootNodeResourcesKey];
+  resources ||
+    (resources = root[internalRootNodeResourcesKey] =
+      { hoistableStyles: new Map(), hoistableScripts: new Map() });
+  return resources;
+}
+function markNodeAsHoistable(node) {
+  node[internalHoistableMarker] = !0;
+}
+var allNativeEvents = new Set(),
+  registrationNameDependencies = {};
+function registerTwoPhaseEvent(registrationName, dependencies) {
+  registerDirectEvent(registrationName, dependencies);
+  registerDirectEvent(registrationName + "Capture", dependencies);
+}
+function registerDirectEvent(registrationName, dependencies) {
+  registrationNameDependencies[registrationName] = dependencies;
+  for (
+    registrationName = 0;
+    registrationName < dependencies.length;
+    registrationName++
+  )
+    allNativeEvents.add(dependencies[registrationName]);
+}
+var VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+    "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  illegalAttributeNameCache = {},
+  validatedAttributeNameCache = {};
+function isAttributeNameSafe(attributeName) {
+  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+    return !0;
+  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+    return (validatedAttributeNameCache[attributeName] = !0);
+  illegalAttributeNameCache[attributeName] = !0;
+  return !1;
+}
+function setValueForAttribute(node, name, value) {
+  if (isAttributeNameSafe(name))
+    if (null === value) node.removeAttribute(name);
+    else {
+      switch (typeof value) {
+        case "undefined":
+        case "function":
+        case "symbol":
+          node.removeAttribute(name);
+          return;
+        case "boolean":
+          var prefix$8 = name.toLowerCase().slice(0, 5);
+          if ("data-" !== prefix$8 && "aria-" !== prefix$8) {
+            node.removeAttribute(name);
+            return;
+          }
+      }
+      node.setAttribute(name, "" + value);
+    }
+}
+function setValueForKnownAttribute(node, name, value) {
+  if (null === value) node.removeAttribute(name);
+  else {
+    switch (typeof value) {
+      case "undefined":
+      case "function":
+      case "symbol":
+      case "boolean":
+        node.removeAttribute(name);
+        return;
+    }
+    node.setAttribute(name, "" + value);
+  }
+}
+function setValueForNamespacedAttribute(node, namespace, name, value) {
+  if (null === value) node.removeAttribute(name);
+  else {
+    switch (typeof value) {
+      case "undefined":
+      case "function":
+      case "symbol":
+      case "boolean":
+        node.removeAttribute(name);
+        return;
+    }
+    node.setAttributeNS(namespace, name, "" + value);
+  }
+}
+var prefix, suffix;
+function describeBuiltInComponentFrame(name) {
+  if (void 0 === prefix)
+    try {
+      throw Error();
+    } catch (x) {
+      var match = x.stack.trim().match(/\n( *(at )?)/);
+      prefix = (match && match[1]) || "";
+      suffix =
+        -1 < x.stack.indexOf("\n    at")
+          ? " (<anonymous>)"
+          : -1 < x.stack.indexOf("@")
+            ? "@unknown:0:0"
+            : "";
+    }
+  return "\n" + prefix + name + suffix;
+}
+var reentry = !1;
+function describeNativeComponentFrame(fn, construct) {
+  if (!fn || reentry) return "";
+  reentry = !0;
+  var previousPrepareStackTrace = Error.prepareStackTrace;
+  Error.prepareStackTrace = void 0;
+  try {
+    var RunInRootFrame = {
+      DetermineComponentFrameRoot: function () {
+        try {
+          if (construct) {
+            var Fake = function () {
+              throw Error();
+            };
+            Object.defineProperty(Fake.prototype, "props", {
+              set: function () {
+                throw Error();
+              }
+            });
+            if ("object" === typeof Reflect && Reflect.construct) {
+              try {
+                Reflect.construct(Fake, []);
+              } catch (x) {
+                var control = x;
+              }
+              Reflect.construct(fn, [], Fake);
+            } else {
+              try {
+                Fake.call();
+              } catch (x$9) {
+                control = x$9;
+              }
+              fn.call(Fake.prototype);
+            }
+          } else {
+            try {
+              throw Error();
+            } catch (x$10) {
+              control = x$10;
+            }
+            (Fake = fn()) &&
+              "function" === typeof Fake.catch &&
+              Fake.catch(function () {});
+          }
+        } catch (sample) {
+          if (sample && control && "string" === typeof sample.stack)
+            return [sample.stack, control.stack];
+        }
+        return [null, null];
+      }
+    };
+    RunInRootFrame.DetermineComponentFrameRoot.displayName =
+      "DetermineComponentFrameRoot";
+    var namePropDescriptor = Object.getOwnPropertyDescriptor(
+      RunInRootFrame.DetermineComponentFrameRoot,
+      "name"
+    );
+    namePropDescriptor &&
+      namePropDescriptor.configurable &&
+      Object.defineProperty(
+        RunInRootFrame.DetermineComponentFrameRoot,
+        "name",
+        { value: "DetermineComponentFrameRoot" }
+      );
+    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
+      sampleStack = _RunInRootFrame$Deter[0],
+      controlStack = _RunInRootFrame$Deter[1];
+    if (sampleStack && controlStack) {
+      var sampleLines = sampleStack.split("\n"),
+        controlLines = controlStack.split("\n");
+      for (
+        namePropDescriptor = RunInRootFrame = 0;
+        RunInRootFrame < sampleLines.length &&
+        !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot");
+
+      )
+        RunInRootFrame++;
+      for (
+        ;
+        namePropDescriptor < controlLines.length &&
+        !controlLines[namePropDescriptor].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        namePropDescriptor++;
+      if (
+        RunInRootFrame === sampleLines.length ||
+        namePropDescriptor === controlLines.length
+      )
+        for (
+          RunInRootFrame = sampleLines.length - 1,
+            namePropDescriptor = controlLines.length - 1;
+          1 <= RunInRootFrame &&
+          0 <= namePropDescriptor &&
+          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];
+
+        )
+          namePropDescriptor--;
+      for (
+        ;
+        1 <= RunInRootFrame && 0 <= namePropDescriptor;
+        RunInRootFrame--, namePropDescriptor--
+      )
+        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {
+          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {
+            do
+              if (
+                (RunInRootFrame--,
+                namePropDescriptor--,
+                0 > namePropDescriptor ||
+                  sampleLines[RunInRootFrame] !==
+                    controlLines[namePropDescriptor])
+              ) {
+                var frame =
+                  "\n" +
+                  sampleLines[RunInRootFrame].replace(" at new ", " at ");
+                fn.displayName &&
+                  frame.includes("<anonymous>") &&
+                  (frame = frame.replace("<anonymous>", fn.displayName));
+                return frame;
+              }
+            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);
+          }
+          break;
+        }
+    }
+  } finally {
+    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);
+  }
+  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "")
+    ? describeBuiltInComponentFrame(previousPrepareStackTrace)
+    : "";
+}
+function describeFiber(fiber) {
+  switch (fiber.tag) {
+    case 26:
+    case 27:
+    case 5:
+      return describeBuiltInComponentFrame(fiber.type);
+    case 16:
+      return describeBuiltInComponentFrame("Lazy");
+    case 13:
+      return describeBuiltInComponentFrame("Suspense");
+    case 19:
+      return describeBuiltInComponentFrame("SuspenseList");
+    case 0:
+    case 15:
+      return describeNativeComponentFrame(fiber.type, !1);
+    case 11:
+      return describeNativeComponentFrame(fiber.type.render, !1);
+    case 1:
+      return describeNativeComponentFrame(fiber.type, !0);
+    case 31:
+      return describeBuiltInComponentFrame("Activity");
+    default:
+      return "";
+  }
+}
+function getStackByFiberInDevAndProd(workInProgress) {
+  try {
+    var info = "";
+    do
+      (info += describeFiber(workInProgress)),
+        (workInProgress = workInProgress.return);
+    while (workInProgress);
+    return info;
+  } catch (x) {
+    return "\nError generating stack: " + x.message + "\n" + x.stack;
+  }
+}
+function getToStringValue(value) {
+  switch (typeof value) {
+    case "bigint":
+    case "boolean":
+    case "number":
+    case "string":
+    case "undefined":
+      return value;
+    case "object":
+      return value;
+    default:
+      return "";
+  }
+}
+function isCheckable(elem) {
+  var type = elem.type;
+  return (
+    (elem = elem.nodeName) &&
+    "input" === elem.toLowerCase() &&
+    ("checkbox" === type || "radio" === type)
+  );
+}
+function trackValueOnNode(node) {
+  var valueField = isCheckable(node) ? "checked" : "value",
+    descriptor = Object.getOwnPropertyDescriptor(
+      node.constructor.prototype,
+      valueField
+    ),
+    currentValue = "" + node[valueField];
+  if (
+    !node.hasOwnProperty(valueField) &&
+    "undefined" !== typeof descriptor &&
+    "function" === typeof descriptor.get &&
+    "function" === typeof descriptor.set
+  ) {
+    var get = descriptor.get,
+      set = descriptor.set;
+    Object.defineProperty(node, valueField, {
+      configurable: !0,
+      get: function () {
+        return get.call(this);
+      },
+      set: function (value) {
+        currentValue = "" + value;
+        set.call(this, value);
+      }
+    });
+    Object.defineProperty(node, valueField, {
+      enumerable: descriptor.enumerable
+    });
+    return {
+      getValue: function () {
+        return currentValue;
+      },
+      setValue: function (value) {
+        currentValue = "" + value;
+      },
+      stopTracking: function () {
+        node._valueTracker = null;
+        delete node[valueField];
+      }
+    };
+  }
+}
+function track(node) {
+  node._valueTracker || (node._valueTracker = trackValueOnNode(node));
+}
+function updateValueIfChanged(node) {
+  if (!node) return !1;
+  var tracker = node._valueTracker;
+  if (!tracker) return !0;
+  var lastValue = tracker.getValue();
+  var value = "";
+  node &&
+    (value = isCheckable(node)
+      ? node.checked
+        ? "true"
+        : "false"
+      : node.value);
+  node = value;
+  return node !== lastValue ? (tracker.setValue(node), !0) : !1;
+}
+function getActiveElement(doc) {
+  doc = doc || ("undefined" !== typeof document ? document : void 0);
+  if ("undefined" === typeof doc) return null;
+  try {
+    return doc.activeElement || doc.body;
+  } catch (e) {
+    return doc.body;
+  }
+}
+var escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\n"\\]/g;
+function escapeSelectorAttributeValueInsideDoubleQuotes(value) {
+  return value.replace(
+    escapeSelectorAttributeValueInsideDoubleQuotesRegex,
+    function (ch) {
+      return "\\" + ch.charCodeAt(0).toString(16) + " ";
+    }
+  );
+}
+function updateInput(
+  element,
+  value,
+  defaultValue,
+  lastDefaultValue,
+  checked,
+  defaultChecked,
+  type,
+  name
+) {
+  element.name = "";
+  null != type &&
+  "function" !== typeof type &&
+  "symbol" !== typeof type &&
+  "boolean" !== typeof type
+    ? (element.type = type)
+    : element.removeAttribute("type");
+  if (null != value)
+    if ("number" === type) {
+      if ((0 === value && "" === element.value) || element.value != value)
+        element.value = "" + getToStringValue(value);
+    } else
+      element.value !== "" + getToStringValue(value) &&
+        (element.value = "" + getToStringValue(value));
+  else
+    ("submit" !== type && "reset" !== type) || element.removeAttribute("value");
+  null != value
+    ? setDefaultValue(element, type, getToStringValue(value))
+    : null != defaultValue
+      ? setDefaultValue(element, type, getToStringValue(defaultValue))
+      : null != lastDefaultValue && element.removeAttribute("value");
+  null == checked &&
+    null != defaultChecked &&
+    (element.defaultChecked = !!defaultChecked);
+  null != checked &&
+    (element.checked =
+      checked && "function" !== typeof checked && "symbol" !== typeof checked);
+  null != name &&
+  "function" !== typeof name &&
+  "symbol" !== typeof name &&
+  "boolean" !== typeof name
+    ? (element.name = "" + getToStringValue(name))
+    : element.removeAttribute("name");
+}
+function initInput(
+  element,
+  value,
+  defaultValue,
+  checked,
+  defaultChecked,
+  type,
+  name,
+  isHydrating
+) {
+  null != type &&
+    "function" !== typeof type &&
+    "symbol" !== typeof type &&
+    "boolean" !== typeof type &&
+    (element.type = type);
+  if (null != value || null != defaultValue) {
+    if (
+      !(
+        ("submit" !== type && "reset" !== type) ||
+        (void 0 !== value && null !== value)
+      )
+    )
+      return;
+    defaultValue =
+      null != defaultValue ? "" + getToStringValue(defaultValue) : "";
+    value = null != value ? "" + getToStringValue(value) : defaultValue;
+    isHydrating || value === element.value || (element.value = value);
+    element.defaultValue = value;
+  }
+  checked = null != checked ? checked : defaultChecked;
+  checked =
+    "function" !== typeof checked && "symbol" !== typeof checked && !!checked;
+  element.checked = isHydrating ? element.checked : !!checked;
+  element.defaultChecked = !!checked;
+  null != name &&
+    "function" !== typeof name &&
+    "symbol" !== typeof name &&
+    "boolean" !== typeof name &&
+    (element.name = name);
+}
+function setDefaultValue(node, type, value) {
+  ("number" === type && getActiveElement(node.ownerDocument) === node) ||
+    node.defaultValue === "" + value ||
+    (node.defaultValue = "" + value);
+}
+function updateOptions(node, multiple, propValue, setDefaultSelected) {
+  node = node.options;
+  if (multiple) {
+    multiple = {};
+    for (var i = 0; i < propValue.length; i++)
+      multiple["$" + propValue[i]] = !0;
+    for (propValue = 0; propValue < node.length; propValue++)
+      (i = multiple.hasOwnProperty("$" + node[propValue].value)),
+        node[propValue].selected !== i && (node[propValue].selected = i),
+        i && setDefaultSelected && (node[propValue].defaultSelected = !0);
+  } else {
+    propValue = "" + getToStringValue(propValue);
+    multiple = null;
+    for (i = 0; i < node.length; i++) {
+      if (node[i].value === propValue) {
+        node[i].selected = !0;
+        setDefaultSelected && (node[i].defaultSelected = !0);
+        return;
+      }
+      null !== multiple || node[i].disabled || (multiple = node[i]);
+    }
+    null !== multiple && (multiple.selected = !0);
+  }
+}
+function updateTextarea(element, value, defaultValue) {
+  if (
+    null != value &&
+    ((value = "" + getToStringValue(value)),
+    value !== element.value && (element.value = value),
+    null == defaultValue)
+  ) {
+    element.defaultValue !== value && (element.defaultValue = value);
+    return;
+  }
+  element.defaultValue =
+    null != defaultValue ? "" + getToStringValue(defaultValue) : "";
+}
+function initTextarea(element, value, defaultValue, children) {
+  if (null == value) {
+    if (null != children) {
+      if (null != defaultValue) throw Error(formatProdErrorMessage(92));
+      if (isArrayImpl(children)) {
+        if (1 < children.length) throw Error(formatProdErrorMessage(93));
+        children = children[0];
+      }
+      defaultValue = children;
+    }
+    null == defaultValue && (defaultValue = "");
+    value = defaultValue;
+  }
+  defaultValue = getToStringValue(value);
+  element.defaultValue = defaultValue;
+  children = element.textContent;
+  children === defaultValue &&
+    "" !== children &&
+    null !== children &&
+    (element.value = children);
+}
+function setTextContent(node, text) {
+  if (text) {
+    var firstChild = node.firstChild;
+    if (
+      firstChild &&
+      firstChild === node.lastChild &&
+      3 === firstChild.nodeType
+    ) {
+      firstChild.nodeValue = text;
+      return;
+    }
+  }
+  node.textContent = text;
+}
+var unitlessNumbers = new Set(
+  "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+    " "
+  )
+);
+function setValueForStyle(style, styleName, value) {
+  var isCustomProperty = 0 === styleName.indexOf("--");
+  null == value || "boolean" === typeof value || "" === value
+    ? isCustomProperty
+      ? style.setProperty(styleName, "")
+      : "float" === styleName
+        ? (style.cssFloat = "")
+        : (style[styleName] = "")
+    : isCustomProperty
+      ? style.setProperty(styleName, value)
+      : "number" !== typeof value ||
+          0 === value ||
+          unitlessNumbers.has(styleName)
+        ? "float" === styleName
+          ? (style.cssFloat = value)
+          : (style[styleName] = ("" + value).trim())
+        : (style[styleName] = value + "px");
+}
+function setValueForStyles(node, styles, prevStyles) {
+  if (null != styles && "object" !== typeof styles)
+    throw Error(formatProdErrorMessage(62));
+  node = node.style;
+  if (null != prevStyles) {
+    for (var styleName in prevStyles)
+      !prevStyles.hasOwnProperty(styleName) ||
+        (null != styles && styles.hasOwnProperty(styleName)) ||
+        (0 === styleName.indexOf("--")
+          ? node.setProperty(styleName, "")
+          : "float" === styleName
+            ? (node.cssFloat = "")
+            : (node[styleName] = ""));
+    for (var styleName$16 in styles)
+      (styleName = styles[styleName$16]),
+        styles.hasOwnProperty(styleName$16) &&
+          prevStyles[styleName$16] !== styleName &&
+          setValueForStyle(node, styleName$16, styleName);
+  } else
+    for (var styleName$17 in styles)
+      styles.hasOwnProperty(styleName$17) &&
+        setValueForStyle(node, styleName$17, styles[styleName$17]);
+}
+function isCustomElement(tagName) {
+  if (-1 === tagName.indexOf("-")) return !1;
+  switch (tagName) {
+    case "annotation-xml":
+    case "color-profile":
+    case "font-face":
+    case "font-face-src":
+    case "font-face-uri":
+    case "font-face-format":
+    case "font-face-name":
+    case "missing-glyph":
+      return !1;
+    default:
+      return !0;
+  }
+}
+var aliases = new Map([
+    ["acceptCharset", "accept-charset"],
+    ["htmlFor", "for"],
+    ["httpEquiv", "http-equiv"],
+    ["crossOrigin", "crossorigin"],
+    ["accentHeight", "accent-height"],
+    ["alignmentBaseline", "alignment-baseline"],
+    ["arabicForm", "arabic-form"],
+    ["baselineShift", "baseline-shift"],
+    ["capHeight", "cap-height"],
+    ["clipPath", "clip-path"],
+    ["clipRule", "clip-rule"],
+    ["colorInterpolation", "color-interpolation"],
+    ["colorInterpolationFilters", "color-interpolation-filters"],
+    ["colorProfile", "color-profile"],
+    ["colorRendering", "color-rendering"],
+    ["dominantBaseline", "dominant-baseline"],
+    ["enableBackground", "enable-background"],
+    ["fillOpacity", "fill-opacity"],
+    ["fillRule", "fill-rule"],
+    ["floodColor", "flood-color"],
+    ["floodOpacity", "flood-opacity"],
+    ["fontFamily", "font-family"],
+    ["fontSize", "font-size"],
+    ["fontSizeAdjust", "font-size-adjust"],
+    ["fontStretch", "font-stretch"],
+    ["fontStyle", "font-style"],
+    ["fontVariant", "font-variant"],
+    ["fontWeight", "font-weight"],
+    ["glyphName", "glyph-name"],
+    ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+    ["glyphOrientationVertical", "glyph-orientation-vertical"],
+    ["horizAdvX", "horiz-adv-x"],
+    ["horizOriginX", "horiz-origin-x"],
+    ["imageRendering", "image-rendering"],
+    ["letterSpacing", "letter-spacing"],
+    ["lightingColor", "lighting-color"],
+    ["markerEnd", "marker-end"],
+    ["markerMid", "marker-mid"],
+    ["markerStart", "marker-start"],
+    ["overlinePosition", "overline-position"],
+    ["overlineThickness", "overline-thickness"],
+    ["paintOrder", "paint-order"],
+    ["panose-1", "panose-1"],
+    ["pointerEvents", "pointer-events"],
+    ["renderingIntent", "rendering-intent"],
+    ["shapeRendering", "shape-rendering"],
+    ["stopColor", "stop-color"],
+    ["stopOpacity", "stop-opacity"],
+    ["strikethroughPosition", "strikethrough-position"],
+    ["strikethroughThickness", "strikethrough-thickness"],
+    ["strokeDasharray", "stroke-dasharray"],
+    ["strokeDashoffset", "stroke-dashoffset"],
+    ["strokeLinecap", "stroke-linecap"],
+    ["strokeLinejoin", "stroke-linejoin"],
+    ["strokeMiterlimit", "stroke-miterlimit"],
+    ["strokeOpacity", "stroke-opacity"],
+    ["strokeWidth", "stroke-width"],
+    ["textAnchor", "text-anchor"],
+    ["textDecoration", "text-decoration"],
+    ["textRendering", "text-rendering"],
+    ["transformOrigin", "transform-origin"],
+    ["underlinePosition", "underline-position"],
+    ["underlineThickness", "underline-thickness"],
+    ["unicodeBidi", "unicode-bidi"],
+    ["unicodeRange", "unicode-range"],
+    ["unitsPerEm", "units-per-em"],
+    ["vAlphabetic", "v-alphabetic"],
+    ["vHanging", "v-hanging"],
+    ["vIdeographic", "v-ideographic"],
+    ["vMathematical", "v-mathematical"],
+    ["vectorEffect", "vector-effect"],
+    ["vertAdvY", "vert-adv-y"],
+    ["vertOriginX", "vert-origin-x"],
+    ["vertOriginY", "vert-origin-y"],
+    ["wordSpacing", "word-spacing"],
+    ["writingMode", "writing-mode"],
+    ["xmlnsXlink", "xmlns:xlink"],
+    ["xHeight", "x-height"]
+  ]),
+  isJavaScriptProtocol =
+    /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
+function sanitizeURL(url) {
+  return isJavaScriptProtocol.test("" + url)
+    ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+    : url;
+}
+var currentReplayingEvent = null;
+function getEventTarget(nativeEvent) {
+  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;
+  nativeEvent.correspondingUseElement &&
+    (nativeEvent = nativeEvent.correspondingUseElement);
+  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;
+}
+var restoreTarget = null,
+  restoreQueue = null;
+function restoreStateOfTarget(target) {
+  var internalInstance = getInstanceFromNode(target);
+  if (internalInstance && (target = internalInstance.stateNode)) {
+    var props = target[internalPropsKey] || null;
+    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {
+      case "input":
+        updateInput(
+          target,
+          props.value,
+          props.defaultValue,
+          props.defaultValue,
+          props.checked,
+          props.defaultChecked,
+          props.type,
+          props.name
+        );
+        internalInstance = props.name;
+        if ("radio" === props.type && null != internalInstance) {
+          for (props = target; props.parentNode; ) props = props.parentNode;
+          props = props.querySelectorAll(
+            'input[name="' +
+              escapeSelectorAttributeValueInsideDoubleQuotes(
+                "" + internalInstance
+              ) +
+              '"][type="radio"]'
+          );
+          for (
+            internalInstance = 0;
+            internalInstance < props.length;
+            internalInstance++
+          ) {
+            var otherNode = props[internalInstance];
+            if (otherNode !== target && otherNode.form === target.form) {
+              var otherProps = otherNode[internalPropsKey] || null;
+              if (!otherProps) throw Error(formatProdErrorMessage(90));
+              updateInput(
+                otherNode,
+                otherProps.value,
+                otherProps.defaultValue,
+                otherProps.defaultValue,
+                otherProps.checked,
+                otherProps.defaultChecked,
+                otherProps.type,
+                otherProps.name
+              );
+            }
+          }
+          for (
+            internalInstance = 0;
+            internalInstance < props.length;
+            internalInstance++
+          )
+            (otherNode = props[internalInstance]),
+              otherNode.form === target.form && updateValueIfChanged(otherNode);
+        }
+        break a;
+      case "textarea":
+        updateTextarea(target, props.value, props.defaultValue);
+        break a;
+      case "select":
+        (internalInstance = props.value),
+          null != internalInstance &&
+            updateOptions(target, !!props.multiple, internalInstance, !1);
+    }
+  }
+}
+var isInsideEventHandler = !1;
+function batchedUpdates$1(fn, a, b) {
+  if (isInsideEventHandler) return fn(a, b);
+  isInsideEventHandler = !0;
+  try {
+    var JSCompiler_inline_result = fn(a);
+    return JSCompiler_inline_result;
+  } finally {
+    if (
+      ((isInsideEventHandler = !1),
+      null !== restoreTarget || null !== restoreQueue)
+    )
+      if (
+        (flushSyncWork$1(),
+        restoreTarget &&
+          ((a = restoreTarget),
+          (fn = restoreQueue),
+          (restoreQueue = restoreTarget = null),
+          restoreStateOfTarget(a),
+          fn))
+      )
+        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);
+  }
+}
+function getListener(inst, registrationName) {
+  var stateNode = inst.stateNode;
+  if (null === stateNode) return null;
+  var props = stateNode[internalPropsKey] || null;
+  if (null === props) return null;
+  stateNode = props[registrationName];
+  a: switch (registrationName) {
+    case "onClick":
+    case "onClickCapture":
+    case "onDoubleClick":
+    case "onDoubleClickCapture":
+    case "onMouseDown":
+    case "onMouseDownCapture":
+    case "onMouseMove":
+    case "onMouseMoveCapture":
+    case "onMouseUp":
+    case "onMouseUpCapture":
+    case "onMouseEnter":
+      (props = !props.disabled) ||
+        ((inst = inst.type),
+        (props = !(
+          "button" === inst ||
+          "input" === inst ||
+          "select" === inst ||
+          "textarea" === inst
+        )));
+      inst = !props;
+      break a;
+    default:
+      inst = !1;
+  }
+  if (inst) return null;
+  if (stateNode && "function" !== typeof stateNode)
+    throw Error(
+      formatProdErrorMessage(231, registrationName, typeof stateNode)
+    );
+  return stateNode;
+}
+var canUseDOM = !(
+    "undefined" === typeof window ||
+    "undefined" === typeof window.document ||
+    "undefined" === typeof window.document.createElement
+  ),
+  passiveBrowserEventsSupported = !1;
+if (canUseDOM)
+  try {
+    var options = {};
+    Object.defineProperty(options, "passive", {
+      get: function () {
+        passiveBrowserEventsSupported = !0;
+      }
+    });
+    window.addEventListener("test", options, options);
+    window.removeEventListener("test", options, options);
+  } catch (e) {
+    passiveBrowserEventsSupported = !1;
+  }
+var root = null,
+  startText = null,
+  fallbackText = null;
+function getData() {
+  if (fallbackText) return fallbackText;
+  var start,
+    startValue = startText,
+    startLength = startValue.length,
+    end,
+    endValue = "value" in root ? root.value : root.textContent,
+    endLength = endValue.length;
+  for (
+    start = 0;
+    start < startLength && startValue[start] === endValue[start];
+    start++
+  );
+  var minEnd = startLength - start;
+  for (
+    end = 1;
+    end <= minEnd &&
+    startValue[startLength - end] === endValue[endLength - end];
+    end++
+  );
+  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));
+}
+function getEventCharCode(nativeEvent) {
+  var keyCode = nativeEvent.keyCode;
+  "charCode" in nativeEvent
+    ? ((nativeEvent = nativeEvent.charCode),
+      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))
+    : (nativeEvent = keyCode);
+  10 === nativeEvent && (nativeEvent = 13);
+  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;
+}
+function functionThatReturnsTrue() {
+  return !0;
+}
+function functionThatReturnsFalse() {
+  return !1;
+}
+function createSyntheticEvent(Interface) {
+  function SyntheticBaseEvent(
+    reactName,
+    reactEventType,
+    targetInst,
+    nativeEvent,
+    nativeEventTarget
+  ) {
+    this._reactName = reactName;
+    this._targetInst = targetInst;
+    this.type = reactEventType;
+    this.nativeEvent = nativeEvent;
+    this.target = nativeEventTarget;
+    this.currentTarget = null;
+    for (var propName in Interface)
+      Interface.hasOwnProperty(propName) &&
+        ((reactName = Interface[propName]),
+        (this[propName] = reactName
+          ? reactName(nativeEvent)
+          : nativeEvent[propName]));
+    this.isDefaultPrevented = (
+      null != nativeEvent.defaultPrevented
+        ? nativeEvent.defaultPrevented
+        : !1 === nativeEvent.returnValue
+    )
+      ? functionThatReturnsTrue
+      : functionThatReturnsFalse;
+    this.isPropagationStopped = functionThatReturnsFalse;
+    return this;
+  }
+  assign(SyntheticBaseEvent.prototype, {
+    preventDefault: function () {
+      this.defaultPrevented = !0;
+      var event = this.nativeEvent;
+      event &&
+        (event.preventDefault
+          ? event.preventDefault()
+          : "unknown" !== typeof event.returnValue && (event.returnValue = !1),
+        (this.isDefaultPrevented = functionThatReturnsTrue));
+    },
+    stopPropagation: function () {
+      var event = this.nativeEvent;
+      event &&
+        (event.stopPropagation
+          ? event.stopPropagation()
+          : "unknown" !== typeof event.cancelBubble &&
+            (event.cancelBubble = !0),
+        (this.isPropagationStopped = functionThatReturnsTrue));
+    },
+    persist: function () {},
+    isPersistent: functionThatReturnsTrue
+  });
+  return SyntheticBaseEvent;
+}
+var EventInterface = {
+    eventPhase: 0,
+    bubbles: 0,
+    cancelable: 0,
+    timeStamp: function (event) {
+      return event.timeStamp || Date.now();
+    },
+    defaultPrevented: 0,
+    isTrusted: 0
+  },
+  SyntheticEvent = createSyntheticEvent(EventInterface),
+  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),
+  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),
+  lastMovementX,
+  lastMovementY,
+  lastMouseEvent,
+  MouseEventInterface = assign({}, UIEventInterface, {
+    screenX: 0,
+    screenY: 0,
+    clientX: 0,
+    clientY: 0,
+    pageX: 0,
+    pageY: 0,
+    ctrlKey: 0,
+    shiftKey: 0,
+    altKey: 0,
+    metaKey: 0,
+    getModifierState: getEventModifierState,
+    button: 0,
+    buttons: 0,
+    relatedTarget: function (event) {
+      return void 0 === event.relatedTarget
+        ? event.fromElement === event.srcElement
+          ? event.toElement
+          : event.fromElement
+        : event.relatedTarget;
+    },
+    movementX: function (event) {
+      if ("movementX" in event) return event.movementX;
+      event !== lastMouseEvent &&
+        (lastMouseEvent && "mousemove" === event.type
+          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),
+            (lastMovementY = event.screenY - lastMouseEvent.screenY))
+          : (lastMovementY = lastMovementX = 0),
+        (lastMouseEvent = event));
+      return lastMovementX;
+    },
+    movementY: function (event) {
+      return "movementY" in event ? event.movementY : lastMovementY;
+    }
+  }),
+  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),
+  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),
+  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),
+  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),
+  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),
+  AnimationEventInterface = assign({}, EventInterface, {
+    animationName: 0,
+    elapsedTime: 0,
+    pseudoElement: 0
+  }),
+  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),
+  ClipboardEventInterface = assign({}, EventInterface, {
+    clipboardData: function (event) {
+      return "clipboardData" in event
+        ? event.clipboardData
+        : window.clipboardData;
+    }
+  }),
+  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),
+  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),
+  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),
+  normalizeKey = {
+    Esc: "Escape",
+    Spacebar: " ",
+    Left: "ArrowLeft",
+    Up: "ArrowUp",
+    Right: "ArrowRight",
+    Down: "ArrowDown",
+    Del: "Delete",
+    Win: "OS",
+    Menu: "ContextMenu",
+    Apps: "ContextMenu",
+    Scroll: "ScrollLock",
+    MozPrintableKey: "Unidentified"
+  },
+  translateToKey = {
+    8: "Backspace",
+    9: "Tab",
+    12: "Clear",
+    13: "Enter",
+    16: "Shift",
+    17: "Control",
+    18: "Alt",
+    19: "Pause",
+    20: "CapsLock",
+    27: "Escape",
+    32: " ",
+    33: "PageUp",
+    34: "PageDown",
+    35: "End",
+    36: "Home",
+    37: "ArrowLeft",
+    38: "ArrowUp",
+    39: "ArrowRight",
+    40: "ArrowDown",
+    45: "Insert",
+    46: "Delete",
+    112: "F1",
+    113: "F2",
+    114: "F3",
+    115: "F4",
+    116: "F5",
+    117: "F6",
+    118: "F7",
+    119: "F8",
+    120: "F9",
+    121: "F10",
+    122: "F11",
+    123: "F12",
+    144: "NumLock",
+    145: "ScrollLock",
+    224: "Meta"
+  },
+  modifierKeyToProp = {
+    Alt: "altKey",
+    Control: "ctrlKey",
+    Meta: "metaKey",
+    Shift: "shiftKey"
+  };
+function modifierStateGetter(keyArg) {
+  var nativeEvent = this.nativeEvent;
+  return nativeEvent.getModifierState
+    ? nativeEvent.getModifierState(keyArg)
+    : (keyArg = modifierKeyToProp[keyArg])
+      ? !!nativeEvent[keyArg]
+      : !1;
+}
+function getEventModifierState() {
+  return modifierStateGetter;
+}
+var KeyboardEventInterface = assign({}, UIEventInterface, {
+    key: function (nativeEvent) {
+      if (nativeEvent.key) {
+        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
+        if ("Unidentified" !== key) return key;
+      }
+      return "keypress" === nativeEvent.type
+        ? ((nativeEvent = getEventCharCode(nativeEvent)),
+          13 === nativeEvent ? "Enter" : String.fromCharCode(nativeEvent))
+        : "keydown" === nativeEvent.type || "keyup" === nativeEvent.type
+          ? translateToKey[nativeEvent.keyCode] || "Unidentified"
+          : "";
+    },
+    code: 0,
+    location: 0,
+    ctrlKey: 0,
+    shiftKey: 0,
+    altKey: 0,
+    metaKey: 0,
+    repeat: 0,
+    locale: 0,
+    getModifierState: getEventModifierState,
+    charCode: function (event) {
+      return "keypress" === event.type ? getEventCharCode(event) : 0;
+    },
+    keyCode: function (event) {
+      return "keydown" === event.type || "keyup" === event.type
+        ? event.keyCode
+        : 0;
+    },
+    which: function (event) {
+      return "keypress" === event.type
+        ? getEventCharCode(event)
+        : "keydown" === event.type || "keyup" === event.type
+          ? event.keyCode
+          : 0;
+    }
+  }),
+  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),
+  PointerEventInterface = assign({}, MouseEventInterface, {
+    pointerId: 0,
+    width: 0,
+    height: 0,
+    pressure: 0,
+    tangentialPressure: 0,
+    tiltX: 0,
+    tiltY: 0,
+    twist: 0,
+    pointerType: 0,
+    isPrimary: 0
+  }),
+  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),
+  TouchEventInterface = assign({}, UIEventInterface, {
+    touches: 0,
+    targetTouches: 0,
+    changedTouches: 0,
+    altKey: 0,
+    metaKey: 0,
+    ctrlKey: 0,
+    shiftKey: 0,
+    getModifierState: getEventModifierState
+  }),
+  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),
+  TransitionEventInterface = assign({}, EventInterface, {
+    propertyName: 0,
+    elapsedTime: 0,
+    pseudoElement: 0
+  }),
+  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),
+  WheelEventInterface = assign({}, MouseEventInterface, {
+    deltaX: function (event) {
+      return "deltaX" in event
+        ? event.deltaX
+        : "wheelDeltaX" in event
+          ? -event.wheelDeltaX
+          : 0;
+    },
+    deltaY: function (event) {
+      return "deltaY" in event
+        ? event.deltaY
+        : "wheelDeltaY" in event
+          ? -event.wheelDeltaY
+          : "wheelDelta" in event
+            ? -event.wheelDelta
+            : 0;
+    },
+    deltaZ: 0,
+    deltaMode: 0
+  }),
+  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),
+  ToggleEventInterface = assign({}, EventInterface, {
+    newState: 0,
+    oldState: 0
+  }),
+  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),
+  END_KEYCODES = [9, 13, 27, 32],
+  canUseCompositionEvent = canUseDOM && "CompositionEvent" in window,
+  documentMode = null;
+canUseDOM &&
+  "documentMode" in document &&
+  (documentMode = document.documentMode);
+var canUseTextInputEvent = canUseDOM && "TextEvent" in window && !documentMode,
+  useFallbackCompositionData =
+    canUseDOM &&
+    (!canUseCompositionEvent ||
+      (documentMode && 8 < documentMode && 11 >= documentMode)),
+  SPACEBAR_CHAR = String.fromCharCode(32),
+  hasSpaceKeypress = !1;
+function isFallbackCompositionEnd(domEventName, nativeEvent) {
+  switch (domEventName) {
+    case "keyup":
+      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);
+    case "keydown":
+      return 229 !== nativeEvent.keyCode;
+    case "keypress":
+    case "mousedown":
+    case "focusout":
+      return !0;
+    default:
+      return !1;
+  }
+}
+function getDataFromCustomEvent(nativeEvent) {
+  nativeEvent = nativeEvent.detail;
+  return "object" === typeof nativeEvent && "data" in nativeEvent
+    ? nativeEvent.data
+    : null;
+}
+var isComposing = !1;
+function getNativeBeforeInputChars(domEventName, nativeEvent) {
+  switch (domEventName) {
+    case "compositionend":
+      return getDataFromCustomEvent(nativeEvent);
+    case "keypress":
+      if (32 !== nativeEvent.which) return null;
+      hasSpaceKeypress = !0;
+      return SPACEBAR_CHAR;
+    case "textInput":
+      return (
+        (domEventName = nativeEvent.data),
+        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName
+      );
+    default:
+      return null;
+  }
+}
+function getFallbackBeforeInputChars(domEventName, nativeEvent) {
+  if (isComposing)
+    return "compositionend" === domEventName ||
+      (!canUseCompositionEvent &&
+        isFallbackCompositionEnd(domEventName, nativeEvent))
+      ? ((domEventName = getData()),
+        (fallbackText = startText = root = null),
+        (isComposing = !1),
+        domEventName)
+      : null;
+  switch (domEventName) {
+    case "paste":
+      return null;
+    case "keypress":
+      if (
+        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||
+        (nativeEvent.ctrlKey && nativeEvent.altKey)
+      ) {
+        if (nativeEvent.char && 1 < nativeEvent.char.length)
+          return nativeEvent.char;
+        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);
+      }
+      return null;
+    case "compositionend":
+      return useFallbackCompositionData && "ko" !== nativeEvent.locale
+        ? null
+        : nativeEvent.data;
+    default:
+      return null;
+  }
+}
+var supportedInputTypes = {
+  color: !0,
+  date: !0,
+  datetime: !0,
+  "datetime-local": !0,
+  email: !0,
+  month: !0,
+  number: !0,
+  password: !0,
+  range: !0,
+  search: !0,
+  tel: !0,
+  text: !0,
+  time: !0,
+  url: !0,
+  week: !0
+};
+function isTextInputElement(elem) {
+  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+  return "input" === nodeName
+    ? !!supportedInputTypes[elem.type]
+    : "textarea" === nodeName
+      ? !0
+      : !1;
+}
+function createAndAccumulateChangeEvent(
+  dispatchQueue,
+  inst,
+  nativeEvent,
+  target
+) {
+  restoreTarget
+    ? restoreQueue
+      ? restoreQueue.push(target)
+      : (restoreQueue = [target])
+    : (restoreTarget = target);
+  inst = accumulateTwoPhaseListeners(inst, "onChange");
+  0 < inst.length &&
+    ((nativeEvent = new SyntheticEvent(
+      "onChange",
+      "change",
+      null,
+      nativeEvent,
+      target
+    )),
+    dispatchQueue.push({ event: nativeEvent, listeners: inst }));
+}
+var activeElement$1 = null,
+  activeElementInst$1 = null;
+function runEventInBatch(dispatchQueue) {
+  processDispatchQueue(dispatchQueue, 0);
+}
+function getInstIfValueChanged(targetInst) {
+  var targetNode = getNodeFromInstance(targetInst);
+  if (updateValueIfChanged(targetNode)) return targetInst;
+}
+function getTargetInstForChangeEvent(domEventName, targetInst) {
+  if ("change" === domEventName) return targetInst;
+}
+var isInputEventSupported = !1;
+if (canUseDOM) {
+  var JSCompiler_inline_result$jscomp$282;
+  if (canUseDOM) {
+    var isSupported$jscomp$inline_417 = "oninput" in document;
+    if (!isSupported$jscomp$inline_417) {
+      var element$jscomp$inline_418 = document.createElement("div");
+      element$jscomp$inline_418.setAttribute("oninput", "return;");
+      isSupported$jscomp$inline_417 =
+        "function" === typeof element$jscomp$inline_418.oninput;
+    }
+    JSCompiler_inline_result$jscomp$282 = isSupported$jscomp$inline_417;
+  } else JSCompiler_inline_result$jscomp$282 = !1;
+  isInputEventSupported =
+    JSCompiler_inline_result$jscomp$282 &&
+    (!document.documentMode || 9 < document.documentMode);
+}
+function stopWatchingForValueChange() {
+  activeElement$1 &&
+    (activeElement$1.detachEvent("onpropertychange", handlePropertyChange),
+    (activeElementInst$1 = activeElement$1 = null));
+}
+function handlePropertyChange(nativeEvent) {
+  if (
+    "value" === nativeEvent.propertyName &&
+    getInstIfValueChanged(activeElementInst$1)
+  ) {
+    var dispatchQueue = [];
+    createAndAccumulateChangeEvent(
+      dispatchQueue,
+      activeElementInst$1,
+      nativeEvent,
+      getEventTarget(nativeEvent)
+    );
+    batchedUpdates$1(runEventInBatch, dispatchQueue);
+  }
+}
+function handleEventsForInputEventPolyfill(domEventName, target, targetInst) {
+  "focusin" === domEventName
+    ? (stopWatchingForValueChange(),
+      (activeElement$1 = target),
+      (activeElementInst$1 = targetInst),
+      activeElement$1.attachEvent("onpropertychange", handlePropertyChange))
+    : "focusout" === domEventName && stopWatchingForValueChange();
+}
+function getTargetInstForInputEventPolyfill(domEventName) {
+  if (
+    "selectionchange" === domEventName ||
+    "keyup" === domEventName ||
+    "keydown" === domEventName
+  )
+    return getInstIfValueChanged(activeElementInst$1);
+}
+function getTargetInstForClickEvent(domEventName, targetInst) {
+  if ("click" === domEventName) return getInstIfValueChanged(targetInst);
+}
+function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {
+  if ("input" === domEventName || "change" === domEventName)
+    return getInstIfValueChanged(targetInst);
+}
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is;
+function shallowEqual(objA, objB) {
+  if (objectIs(objA, objB)) return !0;
+  if (
+    "object" !== typeof objA ||
+    null === objA ||
+    "object" !== typeof objB ||
+    null === objB
+  )
+    return !1;
+  var keysA = Object.keys(objA),
+    keysB = Object.keys(objB);
+  if (keysA.length !== keysB.length) return !1;
+  for (keysB = 0; keysB < keysA.length; keysB++) {
+    var currentKey = keysA[keysB];
+    if (
+      !hasOwnProperty.call(objB, currentKey) ||
+      !objectIs(objA[currentKey], objB[currentKey])
+    )
+      return !1;
+  }
+  return !0;
+}
+function getLeafNode(node) {
+  for (; node && node.firstChild; ) node = node.firstChild;
+  return node;
+}
+function getNodeForCharacterOffset(root, offset) {
+  var node = getLeafNode(root);
+  root = 0;
+  for (var nodeEnd; node; ) {
+    if (3 === node.nodeType) {
+      nodeEnd = root + node.textContent.length;
+      if (root <= offset && nodeEnd >= offset)
+        return { node: node, offset: offset - root };
+      root = nodeEnd;
+    }
+    a: {
+      for (; node; ) {
+        if (node.nextSibling) {
+          node = node.nextSibling;
+          break a;
+        }
+        node = node.parentNode;
+      }
+      node = void 0;
+    }
+    node = getLeafNode(node);
+  }
+}
+function containsNode(outerNode, innerNode) {
+  return outerNode && innerNode
+    ? outerNode === innerNode
+      ? !0
+      : outerNode && 3 === outerNode.nodeType
+        ? !1
+        : innerNode && 3 === innerNode.nodeType
+          ? containsNode(outerNode, innerNode.parentNode)
+          : "contains" in outerNode
+            ? outerNode.contains(innerNode)
+            : outerNode.compareDocumentPosition
+              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)
+              : !1
+    : !1;
+}
+function getActiveElementDeep(containerInfo) {
+  containerInfo =
+    null != containerInfo &&
+    null != containerInfo.ownerDocument &&
+    null != containerInfo.ownerDocument.defaultView
+      ? containerInfo.ownerDocument.defaultView
+      : window;
+  for (
+    var element = getActiveElement(containerInfo.document);
+    element instanceof containerInfo.HTMLIFrameElement;
+
+  ) {
+    try {
+      var JSCompiler_inline_result =
+        "string" === typeof element.contentWindow.location.href;
+    } catch (err) {
+      JSCompiler_inline_result = !1;
+    }
+    if (JSCompiler_inline_result) containerInfo = element.contentWindow;
+    else break;
+    element = getActiveElement(containerInfo.document);
+  }
+  return element;
+}
+function hasSelectionCapabilities(elem) {
+  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+  return (
+    nodeName &&
+    (("input" === nodeName &&
+      ("text" === elem.type ||
+        "search" === elem.type ||
+        "tel" === elem.type ||
+        "url" === elem.type ||
+        "password" === elem.type)) ||
+      "textarea" === nodeName ||
+      "true" === elem.contentEditable)
+  );
+}
+var skipSelectionChangeEvent =
+    canUseDOM && "documentMode" in document && 11 >= document.documentMode,
+  activeElement = null,
+  activeElementInst = null,
+  lastSelection = null,
+  mouseDown = !1;
+function constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {
+  var doc =
+    nativeEventTarget.window === nativeEventTarget
+      ? nativeEventTarget.document
+      : 9 === nativeEventTarget.nodeType
+        ? nativeEventTarget
+        : nativeEventTarget.ownerDocument;
+  mouseDown ||
+    null == activeElement ||
+    activeElement !== getActiveElement(doc) ||
+    ((doc = activeElement),
+    "selectionStart" in doc && hasSelectionCapabilities(doc)
+      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })
+      : ((doc = (
+          (doc.ownerDocument && doc.ownerDocument.defaultView) ||
+          window
+        ).getSelection()),
+        (doc = {
+          anchorNode: doc.anchorNode,
+          anchorOffset: doc.anchorOffset,
+          focusNode: doc.focusNode,
+          focusOffset: doc.focusOffset
+        })),
+    (lastSelection && shallowEqual(lastSelection, doc)) ||
+      ((lastSelection = doc),
+      (doc = accumulateTwoPhaseListeners(activeElementInst, "onSelect")),
+      0 < doc.length &&
+        ((nativeEvent = new SyntheticEvent(
+          "onSelect",
+          "select",
+          null,
+          nativeEvent,
+          nativeEventTarget
+        )),
+        dispatchQueue.push({ event: nativeEvent, listeners: doc }),
+        (nativeEvent.target = activeElement))));
+}
+function makePrefixMap(styleProp, eventName) {
+  var prefixes = {};
+  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
+  prefixes["Webkit" + styleProp] = "webkit" + eventName;
+  prefixes["Moz" + styleProp] = "moz" + eventName;
+  return prefixes;
+}
+var vendorPrefixes = {
+    animationend: makePrefixMap("Animation", "AnimationEnd"),
+    animationiteration: makePrefixMap("Animation", "AnimationIteration"),
+    animationstart: makePrefixMap("Animation", "AnimationStart"),
+    transitionrun: makePrefixMap("Transition", "TransitionRun"),
+    transitionstart: makePrefixMap("Transition", "TransitionStart"),
+    transitioncancel: makePrefixMap("Transition", "TransitionCancel"),
+    transitionend: makePrefixMap("Transition", "TransitionEnd")
+  },
+  prefixedEventNames = {},
+  style = {};
+canUseDOM &&
+  ((style = document.createElement("div").style),
+  "AnimationEvent" in window ||
+    (delete vendorPrefixes.animationend.animation,
+    delete vendorPrefixes.animationiteration.animation,
+    delete vendorPrefixes.animationstart.animation),
+  "TransitionEvent" in window ||
+    delete vendorPrefixes.transitionend.transition);
+function getVendorPrefixedEventName(eventName) {
+  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];
+  if (!vendorPrefixes[eventName]) return eventName;
+  var prefixMap = vendorPrefixes[eventName],
+    styleProp;
+  for (styleProp in prefixMap)
+    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)
+      return (prefixedEventNames[eventName] = prefixMap[styleProp]);
+  return eventName;
+}
+var ANIMATION_END = getVendorPrefixedEventName("animationend"),
+  ANIMATION_ITERATION = getVendorPrefixedEventName("animationiteration"),
+  ANIMATION_START = getVendorPrefixedEventName("animationstart"),
+  TRANSITION_RUN = getVendorPrefixedEventName("transitionrun"),
+  TRANSITION_START = getVendorPrefixedEventName("transitionstart"),
+  TRANSITION_CANCEL = getVendorPrefixedEventName("transitioncancel"),
+  TRANSITION_END = getVendorPrefixedEventName("transitionend"),
+  topLevelEventsToReactNames = new Map(),
+  simpleEventPluginEvents =
+    "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(
+      " "
+    );
+simpleEventPluginEvents.push("scrollEnd");
+function registerSimpleEvent(domEventName, reactName) {
+  topLevelEventsToReactNames.set(domEventName, reactName);
+  registerTwoPhaseEvent(reactName, [domEventName]);
+}
+var CapturedStacks = new WeakMap();
+function createCapturedValueAtFiber(value, source) {
+  if ("object" === typeof value && null !== value) {
+    var existing = CapturedStacks.get(value);
+    if (void 0 !== existing) return existing;
+    source = {
+      value: value,
+      source: source,
+      stack: getStackByFiberInDevAndProd(source)
+    };
+    CapturedStacks.set(value, source);
+    return source;
+  }
+  return {
+    value: value,
+    source: source,
+    stack: getStackByFiberInDevAndProd(source)
+  };
+}
+var concurrentQueues = [],
+  concurrentQueuesIndex = 0,
+  concurrentlyUpdatedLanes = 0;
+function finishQueueingConcurrentUpdates() {
+  for (
+    var endIndex = concurrentQueuesIndex,
+      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);
+    i < endIndex;
+
+  ) {
+    var fiber = concurrentQueues[i];
+    concurrentQueues[i++] = null;
+    var queue = concurrentQueues[i];
+    concurrentQueues[i++] = null;
+    var update = concurrentQueues[i];
+    concurrentQueues[i++] = null;
+    var lane = concurrentQueues[i];
+    concurrentQueues[i++] = null;
+    if (null !== queue && null !== update) {
+      var pending = queue.pending;
+      null === pending
+        ? (update.next = update)
+        : ((update.next = pending.next), (pending.next = update));
+      queue.pending = update;
+    }
+    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);
+  }
+}
+function enqueueUpdate$1(fiber, queue, update, lane) {
+  concurrentQueues[concurrentQueuesIndex++] = fiber;
+  concurrentQueues[concurrentQueuesIndex++] = queue;
+  concurrentQueues[concurrentQueuesIndex++] = update;
+  concurrentQueues[concurrentQueuesIndex++] = lane;
+  concurrentlyUpdatedLanes |= lane;
+  fiber.lanes |= lane;
+  fiber = fiber.alternate;
+  null !== fiber && (fiber.lanes |= lane);
+}
+function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {
+  enqueueUpdate$1(fiber, queue, update, lane);
+  return getRootForUpdatedFiber(fiber);
+}
+function enqueueConcurrentRenderForLane(fiber, lane) {
+  enqueueUpdate$1(fiber, null, null, lane);
+  return getRootForUpdatedFiber(fiber);
+}
+function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {
+  sourceFiber.lanes |= lane;
+  var alternate = sourceFiber.alternate;
+  null !== alternate && (alternate.lanes |= lane);
+  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )
+    (parent.childLanes |= lane),
+      (alternate = parent.alternate),
+      null !== alternate && (alternate.childLanes |= lane),
+      22 === parent.tag &&
+        ((sourceFiber = parent.stateNode),
+        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),
+      (sourceFiber = parent),
+      (parent = parent.return);
+  return 3 === sourceFiber.tag
+    ? ((parent = sourceFiber.stateNode),
+      isHidden &&
+        null !== update &&
+        ((isHidden = 31 - clz32(lane)),
+        (sourceFiber = parent.hiddenUpdates),
+        (alternate = sourceFiber[isHidden]),
+        null === alternate
+          ? (sourceFiber[isHidden] = [update])
+          : alternate.push(update),
+        (update.lane = lane | 536870912)),
+      parent)
+    : null;
+}
+function getRootForUpdatedFiber(sourceFiber) {
+  if (50 < nestedUpdateCount)
+    throw (
+      ((nestedUpdateCount = 0),
+      (rootWithNestedUpdates = null),
+      Error(formatProdErrorMessage(185)))
+    );
+  for (var parent = sourceFiber.return; null !== parent; )
+    (sourceFiber = parent), (parent = sourceFiber.return);
+  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;
+}
+var emptyContextObject = {};
+function FiberNode(tag, pendingProps, key, mode) {
+  this.tag = tag;
+  this.key = key;
+  this.sibling =
+    this.child =
+    this.return =
+    this.stateNode =
+    this.type =
+    this.elementType =
+      null;
+  this.index = 0;
+  this.refCleanup = this.ref = null;
+  this.pendingProps = pendingProps;
+  this.dependencies =
+    this.memoizedState =
+    this.updateQueue =
+    this.memoizedProps =
+      null;
+  this.mode = mode;
+  this.subtreeFlags = this.flags = 0;
+  this.deletions = null;
+  this.childLanes = this.lanes = 0;
+  this.alternate = null;
+}
+function createFiberImplClass(tag, pendingProps, key, mode) {
+  return new FiberNode(tag, pendingProps, key, mode);
+}
+function shouldConstruct(Component) {
+  Component = Component.prototype;
+  return !(!Component || !Component.isReactComponent);
+}
+function createWorkInProgress(current, pendingProps) {
+  var workInProgress = current.alternate;
+  null === workInProgress
+    ? ((workInProgress = createFiberImplClass(
+        current.tag,
+        pendingProps,
+        current.key,
+        current.mode
+      )),
+      (workInProgress.elementType = current.elementType),
+      (workInProgress.type = current.type),
+      (workInProgress.stateNode = current.stateNode),
+      (workInProgress.alternate = current),
+      (current.alternate = workInProgress))
+    : ((workInProgress.pendingProps = pendingProps),
+      (workInProgress.type = current.type),
+      (workInProgress.flags = 0),
+      (workInProgress.subtreeFlags = 0),
+      (workInProgress.deletions = null));
+  workInProgress.flags = current.flags & 65011712;
+  workInProgress.childLanes = current.childLanes;
+  workInProgress.lanes = current.lanes;
+  workInProgress.child = current.child;
+  workInProgress.memoizedProps = current.memoizedProps;
+  workInProgress.memoizedState = current.memoizedState;
+  workInProgress.updateQueue = current.updateQueue;
+  pendingProps = current.dependencies;
+  workInProgress.dependencies =
+    null === pendingProps
+      ? null
+      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };
+  workInProgress.sibling = current.sibling;
+  workInProgress.index = current.index;
+  workInProgress.ref = current.ref;
+  workInProgress.refCleanup = current.refCleanup;
+  return workInProgress;
+}
+function resetWorkInProgress(workInProgress, renderLanes) {
+  workInProgress.flags &= 65011714;
+  var current = workInProgress.alternate;
+  null === current
+    ? ((workInProgress.childLanes = 0),
+      (workInProgress.lanes = renderLanes),
+      (workInProgress.child = null),
+      (workInProgress.subtreeFlags = 0),
+      (workInProgress.memoizedProps = null),
+      (workInProgress.memoizedState = null),
+      (workInProgress.updateQueue = null),
+      (workInProgress.dependencies = null),
+      (workInProgress.stateNode = null))
+    : ((workInProgress.childLanes = current.childLanes),
+      (workInProgress.lanes = current.lanes),
+      (workInProgress.child = current.child),
+      (workInProgress.subtreeFlags = 0),
+      (workInProgress.deletions = null),
+      (workInProgress.memoizedProps = current.memoizedProps),
+      (workInProgress.memoizedState = current.memoizedState),
+      (workInProgress.updateQueue = current.updateQueue),
+      (workInProgress.type = current.type),
+      (renderLanes = current.dependencies),
+      (workInProgress.dependencies =
+        null === renderLanes
+          ? null
+          : {
+              lanes: renderLanes.lanes,
+              firstContext: renderLanes.firstContext
+            }));
+  return workInProgress;
+}
+function createFiberFromTypeAndProps(
+  type,
+  key,
+  pendingProps,
+  owner,
+  mode,
+  lanes
+) {
+  var fiberTag = 0;
+  owner = type;
+  if ("function" === typeof type) shouldConstruct(type) && (fiberTag = 1);
+  else if ("string" === typeof type)
+    fiberTag = isHostHoistableType(
+      type,
+      pendingProps,
+      contextStackCursor.current
+    )
+      ? 26
+      : "html" === type || "head" === type || "body" === type
+        ? 27
+        : 5;
+  else
+    a: switch (type) {
+      case REACT_ACTIVITY_TYPE:
+        return (
+          (type = createFiberImplClass(31, pendingProps, key, mode)),
+          (type.elementType = REACT_ACTIVITY_TYPE),
+          (type.lanes = lanes),
+          type
+        );
+      case REACT_FRAGMENT_TYPE:
+        return createFiberFromFragment(pendingProps.children, mode, lanes, key);
+      case REACT_STRICT_MODE_TYPE:
+        fiberTag = 8;
+        mode |= 24;
+        break;
+      case REACT_PROFILER_TYPE:
+        return (
+          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),
+          (type.elementType = REACT_PROFILER_TYPE),
+          (type.lanes = lanes),
+          type
+        );
+      case REACT_SUSPENSE_TYPE:
+        return (
+          (type = createFiberImplClass(13, pendingProps, key, mode)),
+          (type.elementType = REACT_SUSPENSE_TYPE),
+          (type.lanes = lanes),
+          type
+        );
+      case REACT_SUSPENSE_LIST_TYPE:
+        return (
+          (type = createFiberImplClass(19, pendingProps, key, mode)),
+          (type.elementType = REACT_SUSPENSE_LIST_TYPE),
+          (type.lanes = lanes),
+          type
+        );
+      default:
+        if ("object" === typeof type && null !== type)
+          switch (type.$$typeof) {
+            case REACT_PROVIDER_TYPE:
+            case REACT_CONTEXT_TYPE:
+              fiberTag = 10;
+              break a;
+            case REACT_CONSUMER_TYPE:
+              fiberTag = 9;
+              break a;
+            case REACT_FORWARD_REF_TYPE:
+              fiberTag = 11;
+              break a;
+            case REACT_MEMO_TYPE:
+              fiberTag = 14;
+              break a;
+            case REACT_LAZY_TYPE:
+              fiberTag = 16;
+              owner = null;
+              break a;
+          }
+        fiberTag = 29;
+        pendingProps = Error(
+          formatProdErrorMessage(130, null === type ? "null" : typeof type, "")
+        );
+        owner = null;
+    }
+  key = createFiberImplClass(fiberTag, pendingProps, key, mode);
+  key.elementType = type;
+  key.type = owner;
+  key.lanes = lanes;
+  return key;
+}
+function createFiberFromFragment(elements, mode, lanes, key) {
+  elements = createFiberImplClass(7, elements, key, mode);
+  elements.lanes = lanes;
+  return elements;
+}
+function createFiberFromText(content, mode, lanes) {
+  content = createFiberImplClass(6, content, null, mode);
+  content.lanes = lanes;
+  return content;
+}
+function createFiberFromPortal(portal, mode, lanes) {
+  mode = createFiberImplClass(
+    4,
+    null !== portal.children ? portal.children : [],
+    portal.key,
+    mode
+  );
+  mode.lanes = lanes;
+  mode.stateNode = {
+    containerInfo: portal.containerInfo,
+    pendingChildren: null,
+    implementation: portal.implementation
+  };
+  return mode;
+}
+var forkStack = [],
+  forkStackIndex = 0,
+  treeForkProvider = null,
+  treeForkCount = 0,
+  idStack = [],
+  idStackIndex = 0,
+  treeContextProvider = null,
+  treeContextId = 1,
+  treeContextOverflow = "";
+function pushTreeFork(workInProgress, totalChildren) {
+  forkStack[forkStackIndex++] = treeForkCount;
+  forkStack[forkStackIndex++] = treeForkProvider;
+  treeForkProvider = workInProgress;
+  treeForkCount = totalChildren;
+}
+function pushTreeId(workInProgress, totalChildren, index) {
+  idStack[idStackIndex++] = treeContextId;
+  idStack[idStackIndex++] = treeContextOverflow;
+  idStack[idStackIndex++] = treeContextProvider;
+  treeContextProvider = workInProgress;
+  var baseIdWithLeadingBit = treeContextId;
+  workInProgress = treeContextOverflow;
+  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+  baseIdWithLeadingBit &= ~(1 << baseLength);
+  index += 1;
+  var length = 32 - clz32(totalChildren) + baseLength;
+  if (30 < length) {
+    var numberOfOverflowBits = baseLength - (baseLength % 5);
+    length = (
+      baseIdWithLeadingBit &
+      ((1 << numberOfOverflowBits) - 1)
+    ).toString(32);
+    baseIdWithLeadingBit >>= numberOfOverflowBits;
+    baseLength -= numberOfOverflowBits;
+    treeContextId =
+      (1 << (32 - clz32(totalChildren) + baseLength)) |
+      (index << baseLength) |
+      baseIdWithLeadingBit;
+    treeContextOverflow = length + workInProgress;
+  } else
+    (treeContextId =
+      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),
+      (treeContextOverflow = workInProgress);
+}
+function pushMaterializedTreeId(workInProgress) {
+  null !== workInProgress.return &&
+    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));
+}
+function popTreeContext(workInProgress) {
+  for (; workInProgress === treeForkProvider; )
+    (treeForkProvider = forkStack[--forkStackIndex]),
+      (forkStack[forkStackIndex] = null),
+      (treeForkCount = forkStack[--forkStackIndex]),
+      (forkStack[forkStackIndex] = null);
+  for (; workInProgress === treeContextProvider; )
+    (treeContextProvider = idStack[--idStackIndex]),
+      (idStack[idStackIndex] = null),
+      (treeContextOverflow = idStack[--idStackIndex]),
+      (idStack[idStackIndex] = null),
+      (treeContextId = idStack[--idStackIndex]),
+      (idStack[idStackIndex] = null);
+}
+var hydrationParentFiber = null,
+  nextHydratableInstance = null,
+  isHydrating = !1,
+  hydrationErrors = null,
+  rootOrSingletonContext = !1,
+  HydrationMismatchException = Error(formatProdErrorMessage(519));
+function throwOnHydrationMismatch(fiber) {
+  var error = Error(formatProdErrorMessage(418, ""));
+  queueHydrationError(createCapturedValueAtFiber(error, fiber));
+  throw HydrationMismatchException;
+}
+function prepareToHydrateHostInstance(fiber) {
+  var instance = fiber.stateNode,
+    type = fiber.type,
+    props = fiber.memoizedProps;
+  instance[internalInstanceKey] = fiber;
+  instance[internalPropsKey] = props;
+  switch (type) {
+    case "dialog":
+      listenToNonDelegatedEvent("cancel", instance);
+      listenToNonDelegatedEvent("close", instance);
+      break;
+    case "iframe":
+    case "object":
+    case "embed":
+      listenToNonDelegatedEvent("load", instance);
+      break;
+    case "video":
+    case "audio":
+      for (type = 0; type < mediaEventTypes.length; type++)
+        listenToNonDelegatedEvent(mediaEventTypes[type], instance);
+      break;
+    case "source":
+      listenToNonDelegatedEvent("error", instance);
+      break;
+    case "img":
+    case "image":
+    case "link":
+      listenToNonDelegatedEvent("error", instance);
+      listenToNonDelegatedEvent("load", instance);
+      break;
+    case "details":
+      listenToNonDelegatedEvent("toggle", instance);
+      break;
+    case "input":
+      listenToNonDelegatedEvent("invalid", instance);
+      initInput(
+        instance,
+        props.value,
+        props.defaultValue,
+        props.checked,
+        props.defaultChecked,
+        props.type,
+        props.name,
+        !0
+      );
+      track(instance);
+      break;
+    case "select":
+      listenToNonDelegatedEvent("invalid", instance);
+      break;
+    case "textarea":
+      listenToNonDelegatedEvent("invalid", instance),
+        initTextarea(instance, props.value, props.defaultValue, props.children),
+        track(instance);
+  }
+  type = props.children;
+  ("string" !== typeof type &&
+    "number" !== typeof type &&
+    "bigint" !== typeof type) ||
+  instance.textContent === "" + type ||
+  !0 === props.suppressHydrationWarning ||
+  checkForUnmatchedText(instance.textContent, type)
+    ? (null != props.popover &&
+        (listenToNonDelegatedEvent("beforetoggle", instance),
+        listenToNonDelegatedEvent("toggle", instance)),
+      null != props.onScroll && listenToNonDelegatedEvent("scroll", instance),
+      null != props.onScrollEnd &&
+        listenToNonDelegatedEvent("scrollend", instance),
+      null != props.onClick && (instance.onclick = noop$1),
+      (instance = !0))
+    : (instance = !1);
+  instance || throwOnHydrationMismatch(fiber);
+}
+function popToNextHostParent(fiber) {
+  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )
+    switch (hydrationParentFiber.tag) {
+      case 5:
+      case 13:
+        rootOrSingletonContext = !1;
+        return;
+      case 27:
+      case 3:
+        rootOrSingletonContext = !0;
+        return;
+      default:
+        hydrationParentFiber = hydrationParentFiber.return;
+    }
+}
+function popHydrationState(fiber) {
+  if (fiber !== hydrationParentFiber) return !1;
+  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;
+  var tag = fiber.tag,
+    JSCompiler_temp;
+  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {
+    if ((JSCompiler_temp = 5 === tag))
+      (JSCompiler_temp = fiber.type),
+        (JSCompiler_temp =
+          !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) ||
+          shouldSetTextContent(fiber.type, fiber.memoizedProps));
+    JSCompiler_temp = !JSCompiler_temp;
+  }
+  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);
+  popToNextHostParent(fiber);
+  if (13 === tag) {
+    fiber = fiber.memoizedState;
+    fiber = null !== fiber ? fiber.dehydrated : null;
+    if (!fiber) throw Error(formatProdErrorMessage(317));
+    a: {
+      fiber = fiber.nextSibling;
+      for (tag = 0; fiber; ) {
+        if (8 === fiber.nodeType)
+          if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) {
+            if (0 === tag) {
+              nextHydratableInstance = getNextHydratable(fiber.nextSibling);
+              break a;
+            }
+            tag--;
+          } else
+            ("$" !== JSCompiler_temp &&
+              "$!" !== JSCompiler_temp &&
+              "$?" !== JSCompiler_temp) ||
+              tag++;
+        fiber = fiber.nextSibling;
+      }
+      nextHydratableInstance = null;
+    }
+  } else
+    27 === tag
+      ? ((tag = nextHydratableInstance),
+        isSingletonScope(fiber.type)
+          ? ((fiber = previousHydratableOnEnteringScopedSingleton),
+            (previousHydratableOnEnteringScopedSingleton = null),
+            (nextHydratableInstance = fiber))
+          : (nextHydratableInstance = tag))
+      : (nextHydratableInstance = hydrationParentFiber
+          ? getNextHydratable(fiber.stateNode.nextSibling)
+          : null);
+  return !0;
+}
+function resetHydrationState() {
+  nextHydratableInstance = hydrationParentFiber = null;
+  isHydrating = !1;
+}
+function upgradeHydrationErrorsToRecoverable() {
+  var queuedErrors = hydrationErrors;
+  null !== queuedErrors &&
+    (null === workInProgressRootRecoverableErrors
+      ? (workInProgressRootRecoverableErrors = queuedErrors)
+      : workInProgressRootRecoverableErrors.push.apply(
+          workInProgressRootRecoverableErrors,
+          queuedErrors
+        ),
+    (hydrationErrors = null));
+  return queuedErrors;
+}
+function queueHydrationError(error) {
+  null === hydrationErrors
+    ? (hydrationErrors = [error])
+    : hydrationErrors.push(error);
+}
+var valueCursor = createCursor(null),
+  currentlyRenderingFiber$1 = null,
+  lastContextDependency = null;
+function pushProvider(providerFiber, context, nextValue) {
+  push(valueCursor, context._currentValue);
+  context._currentValue = nextValue;
+}
+function popProvider(context) {
+  context._currentValue = valueCursor.current;
+  pop(valueCursor);
+}
+function scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {
+  for (; null !== parent; ) {
+    var alternate = parent.alternate;
+    (parent.childLanes & renderLanes) !== renderLanes
+      ? ((parent.childLanes |= renderLanes),
+        null !== alternate && (alternate.childLanes |= renderLanes))
+      : null !== alternate &&
+        (alternate.childLanes & renderLanes) !== renderLanes &&
+        (alternate.childLanes |= renderLanes);
+    if (parent === propagationRoot) break;
+    parent = parent.return;
+  }
+}
+function propagateContextChanges(
+  workInProgress,
+  contexts,
+  renderLanes,
+  forcePropagateEntireTree
+) {
+  var fiber = workInProgress.child;
+  null !== fiber && (fiber.return = workInProgress);
+  for (; null !== fiber; ) {
+    var list = fiber.dependencies;
+    if (null !== list) {
+      var nextFiber = fiber.child;
+      list = list.firstContext;
+      a: for (; null !== list; ) {
+        var dependency = list;
+        list = fiber;
+        for (var i = 0; i < contexts.length; i++)
+          if (dependency.context === contexts[i]) {
+            list.lanes |= renderLanes;
+            dependency = list.alternate;
+            null !== dependency && (dependency.lanes |= renderLanes);
+            scheduleContextWorkOnParentPath(
+              list.return,
+              renderLanes,
+              workInProgress
+            );
+            forcePropagateEntireTree || (nextFiber = null);
+            break a;
+          }
+        list = dependency.next;
+      }
+    } else if (18 === fiber.tag) {
+      nextFiber = fiber.return;
+      if (null === nextFiber) throw Error(formatProdErrorMessage(341));
+      nextFiber.lanes |= renderLanes;
+      list = nextFiber.alternate;
+      null !== list && (list.lanes |= renderLanes);
+      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);
+      nextFiber = null;
+    } else nextFiber = fiber.child;
+    if (null !== nextFiber) nextFiber.return = fiber;
+    else
+      for (nextFiber = fiber; null !== nextFiber; ) {
+        if (nextFiber === workInProgress) {
+          nextFiber = null;
+          break;
+        }
+        fiber = nextFiber.sibling;
+        if (null !== fiber) {
+          fiber.return = nextFiber.return;
+          nextFiber = fiber;
+          break;
+        }
+        nextFiber = nextFiber.return;
+      }
+    fiber = nextFiber;
+  }
+}
+function propagateParentContextChanges(
+  current,
+  workInProgress,
+  renderLanes,
+  forcePropagateEntireTree
+) {
+  current = null;
+  for (
+    var parent = workInProgress, isInsidePropagationBailout = !1;
+    null !== parent;
+
+  ) {
+    if (!isInsidePropagationBailout)
+      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;
+      else if (0 !== (parent.flags & 262144)) break;
+    if (10 === parent.tag) {
+      var currentParent = parent.alternate;
+      if (null === currentParent) throw Error(formatProdErrorMessage(387));
+      currentParent = currentParent.memoizedProps;
+      if (null !== currentParent) {
+        var context = parent.type;
+        objectIs(parent.pendingProps.value, currentParent.value) ||
+          (null !== current ? current.push(context) : (current = [context]));
+      }
+    } else if (parent === hostTransitionProviderCursor.current) {
+      currentParent = parent.alternate;
+      if (null === currentParent) throw Error(formatProdErrorMessage(387));
+      currentParent.memoizedState.memoizedState !==
+        parent.memoizedState.memoizedState &&
+        (null !== current
+          ? current.push(HostTransitionContext)
+          : (current = [HostTransitionContext]));
+    }
+    parent = parent.return;
+  }
+  null !== current &&
+    propagateContextChanges(
+      workInProgress,
+      current,
+      renderLanes,
+      forcePropagateEntireTree
+    );
+  workInProgress.flags |= 262144;
+}
+function checkIfContextChanged(currentDependencies) {
+  for (
+    currentDependencies = currentDependencies.firstContext;
+    null !== currentDependencies;
+
+  ) {
+    if (
+      !objectIs(
+        currentDependencies.context._currentValue,
+        currentDependencies.memoizedValue
+      )
+    )
+      return !0;
+    currentDependencies = currentDependencies.next;
+  }
+  return !1;
+}
+function prepareToReadContext(workInProgress) {
+  currentlyRenderingFiber$1 = workInProgress;
+  lastContextDependency = null;
+  workInProgress = workInProgress.dependencies;
+  null !== workInProgress && (workInProgress.firstContext = null);
+}
+function readContext(context) {
+  return readContextForConsumer(currentlyRenderingFiber$1, context);
+}
+function readContextDuringReconciliation(consumer, context) {
+  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);
+  return readContextForConsumer(consumer, context);
+}
+function readContextForConsumer(consumer, context) {
+  var value = context._currentValue;
+  context = { context: context, memoizedValue: value, next: null };
+  if (null === lastContextDependency) {
+    if (null === consumer) throw Error(formatProdErrorMessage(308));
+    lastContextDependency = context;
+    consumer.dependencies = { lanes: 0, firstContext: context };
+    consumer.flags |= 524288;
+  } else lastContextDependency = lastContextDependency.next = context;
+  return value;
+}
+var AbortControllerLocal =
+    "undefined" !== typeof AbortController
+      ? AbortController
+      : function () {
+          var listeners = [],
+            signal = (this.signal = {
+              aborted: !1,
+              addEventListener: function (type, listener) {
+                listeners.push(listener);
+              }
+            });
+          this.abort = function () {
+            signal.aborted = !0;
+            listeners.forEach(function (listener) {
+              return listener();
+            });
+          };
+        },
+  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,
+  NormalPriority = Scheduler.unstable_NormalPriority,
+  CacheContext = {
+    $$typeof: REACT_CONTEXT_TYPE,
+    Consumer: null,
+    Provider: null,
+    _currentValue: null,
+    _currentValue2: null,
+    _threadCount: 0
+  };
+function createCache() {
+  return {
+    controller: new AbortControllerLocal(),
+    data: new Map(),
+    refCount: 0
+  };
+}
+function releaseCache(cache) {
+  cache.refCount--;
+  0 === cache.refCount &&
+    scheduleCallback$2(NormalPriority, function () {
+      cache.controller.abort();
+    });
+}
+var currentEntangledListeners = null,
+  currentEntangledPendingCount = 0,
+  currentEntangledLane = 0,
+  currentEntangledActionThenable = null;
+function entangleAsyncAction(transition, thenable) {
+  if (null === currentEntangledListeners) {
+    var entangledListeners = (currentEntangledListeners = []);
+    currentEntangledPendingCount = 0;
+    currentEntangledLane = requestTransitionLane();
+    currentEntangledActionThenable = {
+      status: "pending",
+      value: void 0,
+      then: function (resolve) {
+        entangledListeners.push(resolve);
+      }
+    };
+  }
+  currentEntangledPendingCount++;
+  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);
+  return thenable;
+}
+function pingEngtangledActionScope() {
+  if (
+    0 === --currentEntangledPendingCount &&
+    null !== currentEntangledListeners
+  ) {
+    null !== currentEntangledActionThenable &&
+      (currentEntangledActionThenable.status = "fulfilled");
+    var listeners = currentEntangledListeners;
+    currentEntangledListeners = null;
+    currentEntangledLane = 0;
+    currentEntangledActionThenable = null;
+    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();
+  }
+}
+function chainThenableValue(thenable, result) {
+  var listeners = [],
+    thenableWithOverride = {
+      status: "pending",
+      value: null,
+      reason: null,
+      then: function (resolve) {
+        listeners.push(resolve);
+      }
+    };
+  thenable.then(
+    function () {
+      thenableWithOverride.status = "fulfilled";
+      thenableWithOverride.value = result;
+      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);
+    },
+    function (error) {
+      thenableWithOverride.status = "rejected";
+      thenableWithOverride.reason = error;
+      for (error = 0; error < listeners.length; error++)
+        (0, listeners[error])(void 0);
+    }
+  );
+  return thenableWithOverride;
+}
+var prevOnStartTransitionFinish = ReactSharedInternals.S;
+ReactSharedInternals.S = function (transition, returnValue) {
+  "object" === typeof returnValue &&
+    null !== returnValue &&
+    "function" === typeof returnValue.then &&
+    entangleAsyncAction(transition, returnValue);
+  null !== prevOnStartTransitionFinish &&
+    prevOnStartTransitionFinish(transition, returnValue);
+};
+var resumedCache = createCursor(null);
+function peekCacheFromPool() {
+  var cacheResumedFromPreviousRender = resumedCache.current;
+  return null !== cacheResumedFromPreviousRender
+    ? cacheResumedFromPreviousRender
+    : workInProgressRoot.pooledCache;
+}
+function pushTransition(offscreenWorkInProgress, prevCachePool) {
+  null === prevCachePool
+    ? push(resumedCache, resumedCache.current)
+    : push(resumedCache, prevCachePool.pool);
+}
+function getSuspendedCache() {
+  var cacheFromPool = peekCacheFromPool();
+  return null === cacheFromPool
+    ? null
+    : { parent: CacheContext._currentValue, pool: cacheFromPool };
+}
+var SuspenseException = Error(formatProdErrorMessage(460)),
+  SuspenseyCommitException = Error(formatProdErrorMessage(474)),
+  SuspenseActionException = Error(formatProdErrorMessage(542)),
+  noopSuspenseyCommitThenable = { then: function () {} };
+function isThenableResolved(thenable) {
+  thenable = thenable.status;
+  return "fulfilled" === thenable || "rejected" === thenable;
+}
+function noop$3() {}
+function trackUsedThenable(thenableState, thenable, index) {
+  index = thenableState[index];
+  void 0 === index
+    ? thenableState.push(thenable)
+    : index !== thenable && (thenable.then(noop$3, noop$3), (thenable = index));
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw (
+        ((thenableState = thenable.reason),
+        checkIfUseWrappedInAsyncCatch(thenableState),
+        thenableState)
+      );
+    default:
+      if ("string" === typeof thenable.status) thenable.then(noop$3, noop$3);
+      else {
+        thenableState = workInProgressRoot;
+        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)
+          throw Error(formatProdErrorMessage(482));
+        thenableState = thenable;
+        thenableState.status = "pending";
+        thenableState.then(
+          function (fulfilledValue) {
+            if ("pending" === thenable.status) {
+              var fulfilledThenable = thenable;
+              fulfilledThenable.status = "fulfilled";
+              fulfilledThenable.value = fulfilledValue;
+            }
+          },
+          function (error) {
+            if ("pending" === thenable.status) {
+              var rejectedThenable = thenable;
+              rejectedThenable.status = "rejected";
+              rejectedThenable.reason = error;
+            }
+          }
+        );
+      }
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw (
+            ((thenableState = thenable.reason),
+            checkIfUseWrappedInAsyncCatch(thenableState),
+            thenableState)
+          );
+      }
+      suspendedThenable = thenable;
+      throw SuspenseException;
+  }
+}
+var suspendedThenable = null;
+function getSuspendedThenable() {
+  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));
+  var thenable = suspendedThenable;
+  suspendedThenable = null;
+  return thenable;
+}
+function checkIfUseWrappedInAsyncCatch(rejectedReason) {
+  if (
+    rejectedReason === SuspenseException ||
+    rejectedReason === SuspenseActionException
+  )
+    throw Error(formatProdErrorMessage(483));
+}
+var hasForceUpdate = !1;
+function initializeUpdateQueue(fiber) {
+  fiber.updateQueue = {
+    baseState: fiber.memoizedState,
+    firstBaseUpdate: null,
+    lastBaseUpdate: null,
+    shared: { pending: null, lanes: 0, hiddenCallbacks: null },
+    callbacks: null
+  };
+}
+function cloneUpdateQueue(current, workInProgress) {
+  current = current.updateQueue;
+  workInProgress.updateQueue === current &&
+    (workInProgress.updateQueue = {
+      baseState: current.baseState,
+      firstBaseUpdate: current.firstBaseUpdate,
+      lastBaseUpdate: current.lastBaseUpdate,
+      shared: current.shared,
+      callbacks: null
+    });
+}
+function createUpdate(lane) {
+  return { lane: lane, tag: 0, payload: null, callback: null, next: null };
+}
+function enqueueUpdate(fiber, update, lane) {
+  var updateQueue = fiber.updateQueue;
+  if (null === updateQueue) return null;
+  updateQueue = updateQueue.shared;
+  if (0 !== (executionContext & 2)) {
+    var pending = updateQueue.pending;
+    null === pending
+      ? (update.next = update)
+      : ((update.next = pending.next), (pending.next = update));
+    updateQueue.pending = update;
+    update = getRootForUpdatedFiber(fiber);
+    markUpdateLaneFromFiberToRoot(fiber, null, lane);
+    return update;
+  }
+  enqueueUpdate$1(fiber, updateQueue, update, lane);
+  return getRootForUpdatedFiber(fiber);
+}
+function entangleTransitions(root, fiber, lane) {
+  fiber = fiber.updateQueue;
+  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {
+    var queueLanes = fiber.lanes;
+    queueLanes &= root.pendingLanes;
+    lane |= queueLanes;
+    fiber.lanes = lane;
+    markRootEntangled(root, lane);
+  }
+}
+function enqueueCapturedUpdate(workInProgress, capturedUpdate) {
+  var queue = workInProgress.updateQueue,
+    current = workInProgress.alternate;
+  if (
+    null !== current &&
+    ((current = current.updateQueue), queue === current)
+  ) {
+    var newFirst = null,
+      newLast = null;
+    queue = queue.firstBaseUpdate;
+    if (null !== queue) {
+      do {
+        var clone = {
+          lane: queue.lane,
+          tag: queue.tag,
+          payload: queue.payload,
+          callback: null,
+          next: null
+        };
+        null === newLast
+          ? (newFirst = newLast = clone)
+          : (newLast = newLast.next = clone);
+        queue = queue.next;
+      } while (null !== queue);
+      null === newLast
+        ? (newFirst = newLast = capturedUpdate)
+        : (newLast = newLast.next = capturedUpdate);
+    } else newFirst = newLast = capturedUpdate;
+    queue = {
+      baseState: current.baseState,
+      firstBaseUpdate: newFirst,
+      lastBaseUpdate: newLast,
+      shared: current.shared,
+      callbacks: current.callbacks
+    };
+    workInProgress.updateQueue = queue;
+    return;
+  }
+  workInProgress = queue.lastBaseUpdate;
+  null === workInProgress
+    ? (queue.firstBaseUpdate = capturedUpdate)
+    : (workInProgress.next = capturedUpdate);
+  queue.lastBaseUpdate = capturedUpdate;
+}
+var didReadFromEntangledAsyncAction = !1;
+function suspendIfUpdateReadFromEntangledAsyncAction() {
+  if (didReadFromEntangledAsyncAction) {
+    var entangledActionThenable = currentEntangledActionThenable;
+    if (null !== entangledActionThenable) throw entangledActionThenable;
+  }
+}
+function processUpdateQueue(
+  workInProgress$jscomp$0,
+  props,
+  instance$jscomp$0,
+  renderLanes
+) {
+  didReadFromEntangledAsyncAction = !1;
+  var queue = workInProgress$jscomp$0.updateQueue;
+  hasForceUpdate = !1;
+  var firstBaseUpdate = queue.firstBaseUpdate,
+    lastBaseUpdate = queue.lastBaseUpdate,
+    pendingQueue = queue.shared.pending;
+  if (null !== pendingQueue) {
+    queue.shared.pending = null;
+    var lastPendingUpdate = pendingQueue,
+      firstPendingUpdate = lastPendingUpdate.next;
+    lastPendingUpdate.next = null;
+    null === lastBaseUpdate
+      ? (firstBaseUpdate = firstPendingUpdate)
+      : (lastBaseUpdate.next = firstPendingUpdate);
+    lastBaseUpdate = lastPendingUpdate;
+    var current = workInProgress$jscomp$0.alternate;
+    null !== current &&
+      ((current = current.updateQueue),
+      (pendingQueue = current.lastBaseUpdate),
+      pendingQueue !== lastBaseUpdate &&
+        (null === pendingQueue
+          ? (current.firstBaseUpdate = firstPendingUpdate)
+          : (pendingQueue.next = firstPendingUpdate),
+        (current.lastBaseUpdate = lastPendingUpdate)));
+  }
+  if (null !== firstBaseUpdate) {
+    var newState = queue.baseState;
+    lastBaseUpdate = 0;
+    current = firstPendingUpdate = lastPendingUpdate = null;
+    pendingQueue = firstBaseUpdate;
+    do {
+      var updateLane = pendingQueue.lane & -536870913,
+        isHiddenUpdate = updateLane !== pendingQueue.lane;
+      if (
+        isHiddenUpdate
+          ? (workInProgressRootRenderLanes & updateLane) === updateLane
+          : (renderLanes & updateLane) === updateLane
+      ) {
+        0 !== updateLane &&
+          updateLane === currentEntangledLane &&
+          (didReadFromEntangledAsyncAction = !0);
+        null !== current &&
+          (current = current.next =
+            {
+              lane: 0,
+              tag: pendingQueue.tag,
+              payload: pendingQueue.payload,
+              callback: null,
+              next: null
+            });
+        a: {
+          var workInProgress = workInProgress$jscomp$0,
+            update = pendingQueue;
+          updateLane = props;
+          var instance = instance$jscomp$0;
+          switch (update.tag) {
+            case 1:
+              workInProgress = update.payload;
+              if ("function" === typeof workInProgress) {
+                newState = workInProgress.call(instance, newState, updateLane);
+                break a;
+              }
+              newState = workInProgress;
+              break a;
+            case 3:
+              workInProgress.flags = (workInProgress.flags & -65537) | 128;
+            case 0:
+              workInProgress = update.payload;
+              updateLane =
+                "function" === typeof workInProgress
+                  ? workInProgress.call(instance, newState, updateLane)
+                  : workInProgress;
+              if (null === updateLane || void 0 === updateLane) break a;
+              newState = assign({}, newState, updateLane);
+              break a;
+            case 2:
+              hasForceUpdate = !0;
+          }
+        }
+        updateLane = pendingQueue.callback;
+        null !== updateLane &&
+          ((workInProgress$jscomp$0.flags |= 64),
+          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),
+          (isHiddenUpdate = queue.callbacks),
+          null === isHiddenUpdate
+            ? (queue.callbacks = [updateLane])
+            : isHiddenUpdate.push(updateLane));
+      } else
+        (isHiddenUpdate = {
+          lane: updateLane,
+          tag: pendingQueue.tag,
+          payload: pendingQueue.payload,
+          callback: pendingQueue.callback,
+          next: null
+        }),
+          null === current
+            ? ((firstPendingUpdate = current = isHiddenUpdate),
+              (lastPendingUpdate = newState))
+            : (current = current.next = isHiddenUpdate),
+          (lastBaseUpdate |= updateLane);
+      pendingQueue = pendingQueue.next;
+      if (null === pendingQueue)
+        if (((pendingQueue = queue.shared.pending), null === pendingQueue))
+          break;
+        else
+          (isHiddenUpdate = pendingQueue),
+            (pendingQueue = isHiddenUpdate.next),
+            (isHiddenUpdate.next = null),
+            (queue.lastBaseUpdate = isHiddenUpdate),
+            (queue.shared.pending = null);
+    } while (1);
+    null === current && (lastPendingUpdate = newState);
+    queue.baseState = lastPendingUpdate;
+    queue.firstBaseUpdate = firstPendingUpdate;
+    queue.lastBaseUpdate = current;
+    null === firstBaseUpdate && (queue.shared.lanes = 0);
+    workInProgressRootSkippedLanes |= lastBaseUpdate;
+    workInProgress$jscomp$0.lanes = lastBaseUpdate;
+    workInProgress$jscomp$0.memoizedState = newState;
+  }
+}
+function callCallback(callback, context) {
+  if ("function" !== typeof callback)
+    throw Error(formatProdErrorMessage(191, callback));
+  callback.call(context);
+}
+function commitCallbacks(updateQueue, context) {
+  var callbacks = updateQueue.callbacks;
+  if (null !== callbacks)
+    for (
+      updateQueue.callbacks = null, updateQueue = 0;
+      updateQueue < callbacks.length;
+      updateQueue++
+    )
+      callCallback(callbacks[updateQueue], context);
+}
+var currentTreeHiddenStackCursor = createCursor(null),
+  prevEntangledRenderLanesCursor = createCursor(0);
+function pushHiddenContext(fiber, context) {
+  fiber = entangledRenderLanes;
+  push(prevEntangledRenderLanesCursor, fiber);
+  push(currentTreeHiddenStackCursor, context);
+  entangledRenderLanes = fiber | context.baseLanes;
+}
+function reuseHiddenContextOnStack() {
+  push(prevEntangledRenderLanesCursor, entangledRenderLanes);
+  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);
+}
+function popHiddenContext() {
+  entangledRenderLanes = prevEntangledRenderLanesCursor.current;
+  pop(currentTreeHiddenStackCursor);
+  pop(prevEntangledRenderLanesCursor);
+}
+var renderLanes = 0,
+  currentlyRenderingFiber = null,
+  currentHook = null,
+  workInProgressHook = null,
+  didScheduleRenderPhaseUpdate = !1,
+  didScheduleRenderPhaseUpdateDuringThisPass = !1,
+  shouldDoubleInvokeUserFnsInHooksDEV = !1,
+  localIdCounter = 0,
+  thenableIndexCounter$1 = 0,
+  thenableState$1 = null,
+  globalClientIdCounter = 0;
+function throwInvalidHookError() {
+  throw Error(formatProdErrorMessage(321));
+}
+function areHookInputsEqual(nextDeps, prevDeps) {
+  if (null === prevDeps) return !1;
+  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)
+    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;
+  return !0;
+}
+function renderWithHooks(
+  current,
+  workInProgress,
+  Component,
+  props,
+  secondArg,
+  nextRenderLanes
+) {
+  renderLanes = nextRenderLanes;
+  currentlyRenderingFiber = workInProgress;
+  workInProgress.memoizedState = null;
+  workInProgress.updateQueue = null;
+  workInProgress.lanes = 0;
+  ReactSharedInternals.H =
+    null === current || null === current.memoizedState
+      ? HooksDispatcherOnMount
+      : HooksDispatcherOnUpdate;
+  shouldDoubleInvokeUserFnsInHooksDEV = !1;
+  nextRenderLanes = Component(props, secondArg);
+  shouldDoubleInvokeUserFnsInHooksDEV = !1;
+  didScheduleRenderPhaseUpdateDuringThisPass &&
+    (nextRenderLanes = renderWithHooksAgain(
+      workInProgress,
+      Component,
+      props,
+      secondArg
+    ));
+  finishRenderingHooks(current);
+  return nextRenderLanes;
+}
+function finishRenderingHooks(current) {
+  ReactSharedInternals.H = ContextOnlyDispatcher;
+  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;
+  renderLanes = 0;
+  workInProgressHook = currentHook = currentlyRenderingFiber = null;
+  didScheduleRenderPhaseUpdate = !1;
+  thenableIndexCounter$1 = 0;
+  thenableState$1 = null;
+  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));
+  null === current ||
+    didReceiveUpdate ||
+    ((current = current.dependencies),
+    null !== current &&
+      checkIfContextChanged(current) &&
+      (didReceiveUpdate = !0));
+}
+function renderWithHooksAgain(workInProgress, Component, props, secondArg) {
+  currentlyRenderingFiber = workInProgress;
+  var numberOfReRenders = 0;
+  do {
+    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);
+    thenableIndexCounter$1 = 0;
+    didScheduleRenderPhaseUpdateDuringThisPass = !1;
+    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));
+    numberOfReRenders += 1;
+    workInProgressHook = currentHook = null;
+    if (null != workInProgress.updateQueue) {
+      var children = workInProgress.updateQueue;
+      children.lastEffect = null;
+      children.events = null;
+      children.stores = null;
+      null != children.memoCache && (children.memoCache.index = 0);
+    }
+    ReactSharedInternals.H = HooksDispatcherOnRerender;
+    children = Component(props, secondArg);
+  } while (didScheduleRenderPhaseUpdateDuringThisPass);
+  return children;
+}
+function TransitionAwareHostComponent() {
+  var dispatcher = ReactSharedInternals.H,
+    maybeThenable = dispatcher.useState()[0];
+  maybeThenable =
+    "function" === typeof maybeThenable.then
+      ? useThenable(maybeThenable)
+      : maybeThenable;
+  dispatcher = dispatcher.useState()[0];
+  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&
+    (currentlyRenderingFiber.flags |= 1024);
+  return maybeThenable;
+}
+function checkDidRenderIdHook() {
+  var didRenderIdHook = 0 !== localIdCounter;
+  localIdCounter = 0;
+  return didRenderIdHook;
+}
+function bailoutHooks(current, workInProgress, lanes) {
+  workInProgress.updateQueue = current.updateQueue;
+  workInProgress.flags &= -2053;
+  current.lanes &= ~lanes;
+}
+function resetHooksOnUnwind(workInProgress) {
+  if (didScheduleRenderPhaseUpdate) {
+    for (
+      workInProgress = workInProgress.memoizedState;
+      null !== workInProgress;
+
+    ) {
+      var queue = workInProgress.queue;
+      null !== queue && (queue.pending = null);
+      workInProgress = workInProgress.next;
+    }
+    didScheduleRenderPhaseUpdate = !1;
+  }
+  renderLanes = 0;
+  workInProgressHook = currentHook = currentlyRenderingFiber = null;
+  didScheduleRenderPhaseUpdateDuringThisPass = !1;
+  thenableIndexCounter$1 = localIdCounter = 0;
+  thenableState$1 = null;
+}
+function mountWorkInProgressHook() {
+  var hook = {
+    memoizedState: null,
+    baseState: null,
+    baseQueue: null,
+    queue: null,
+    next: null
+  };
+  null === workInProgressHook
+    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)
+    : (workInProgressHook = workInProgressHook.next = hook);
+  return workInProgressHook;
+}
+function updateWorkInProgressHook() {
+  if (null === currentHook) {
+    var nextCurrentHook = currentlyRenderingFiber.alternate;
+    nextCurrentHook =
+      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;
+  } else nextCurrentHook = currentHook.next;
+  var nextWorkInProgressHook =
+    null === workInProgressHook
+      ? currentlyRenderingFiber.memoizedState
+      : workInProgressHook.next;
+  if (null !== nextWorkInProgressHook)
+    (workInProgressHook = nextWorkInProgressHook),
+      (currentHook = nextCurrentHook);
+  else {
+    if (null === nextCurrentHook) {
+      if (null === currentlyRenderingFiber.alternate)
+        throw Error(formatProdErrorMessage(467));
+      throw Error(formatProdErrorMessage(310));
+    }
+    currentHook = nextCurrentHook;
+    nextCurrentHook = {
+      memoizedState: currentHook.memoizedState,
+      baseState: currentHook.baseState,
+      baseQueue: currentHook.baseQueue,
+      queue: currentHook.queue,
+      next: null
+    };
+    null === workInProgressHook
+      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =
+          nextCurrentHook)
+      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);
+  }
+  return workInProgressHook;
+}
+function createFunctionComponentUpdateQueue() {
+  return { lastEffect: null, events: null, stores: null, memoCache: null };
+}
+function useThenable(thenable) {
+  var index = thenableIndexCounter$1;
+  thenableIndexCounter$1 += 1;
+  null === thenableState$1 && (thenableState$1 = []);
+  thenable = trackUsedThenable(thenableState$1, thenable, index);
+  index = currentlyRenderingFiber;
+  null ===
+    (null === workInProgressHook
+      ? index.memoizedState
+      : workInProgressHook.next) &&
+    ((index = index.alternate),
+    (ReactSharedInternals.H =
+      null === index || null === index.memoizedState
+        ? HooksDispatcherOnMount
+        : HooksDispatcherOnUpdate));
+  return thenable;
+}
+function use(usable) {
+  if (null !== usable && "object" === typeof usable) {
+    if ("function" === typeof usable.then) return useThenable(usable);
+    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);
+  }
+  throw Error(formatProdErrorMessage(438, String(usable)));
+}
+function useMemoCache(size) {
+  var memoCache = null,
+    updateQueue = currentlyRenderingFiber.updateQueue;
+  null !== updateQueue && (memoCache = updateQueue.memoCache);
+  if (null == memoCache) {
+    var current = currentlyRenderingFiber.alternate;
+    null !== current &&
+      ((current = current.updateQueue),
+      null !== current &&
+        ((current = current.memoCache),
+        null != current &&
+          (memoCache = {
+            data: current.data.map(function (array) {
+              return array.slice();
+            }),
+            index: 0
+          })));
+  }
+  null == memoCache && (memoCache = { data: [], index: 0 });
+  null === updateQueue &&
+    ((updateQueue = createFunctionComponentUpdateQueue()),
+    (currentlyRenderingFiber.updateQueue = updateQueue));
+  updateQueue.memoCache = memoCache;
+  updateQueue = memoCache.data[memoCache.index];
+  if (void 0 === updateQueue)
+    for (
+      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;
+      current < size;
+      current++
+    )
+      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;
+  memoCache.index++;
+  return updateQueue;
+}
+function basicStateReducer(state, action) {
+  return "function" === typeof action ? action(state) : action;
+}
+function updateReducer(reducer) {
+  var hook = updateWorkInProgressHook();
+  return updateReducerImpl(hook, currentHook, reducer);
+}
+function updateReducerImpl(hook, current, reducer) {
+  var queue = hook.queue;
+  if (null === queue) throw Error(formatProdErrorMessage(311));
+  queue.lastRenderedReducer = reducer;
+  var baseQueue = hook.baseQueue,
+    pendingQueue = queue.pending;
+  if (null !== pendingQueue) {
+    if (null !== baseQueue) {
+      var baseFirst = baseQueue.next;
+      baseQueue.next = pendingQueue.next;
+      pendingQueue.next = baseFirst;
+    }
+    current.baseQueue = baseQueue = pendingQueue;
+    queue.pending = null;
+  }
+  pendingQueue = hook.baseState;
+  if (null === baseQueue) hook.memoizedState = pendingQueue;
+  else {
+    current = baseQueue.next;
+    var newBaseQueueFirst = (baseFirst = null),
+      newBaseQueueLast = null,
+      update = current,
+      didReadFromEntangledAsyncAction$32 = !1;
+    do {
+      var updateLane = update.lane & -536870913;
+      if (
+        updateLane !== update.lane
+          ? (workInProgressRootRenderLanes & updateLane) === updateLane
+          : (renderLanes & updateLane) === updateLane
+      ) {
+        var revertLane = update.revertLane;
+        if (0 === revertLane)
+          null !== newBaseQueueLast &&
+            (newBaseQueueLast = newBaseQueueLast.next =
+              {
+                lane: 0,
+                revertLane: 0,
+                action: update.action,
+                hasEagerState: update.hasEagerState,
+                eagerState: update.eagerState,
+                next: null
+              }),
+            updateLane === currentEntangledLane &&
+              (didReadFromEntangledAsyncAction$32 = !0);
+        else if ((renderLanes & revertLane) === revertLane) {
+          update = update.next;
+          revertLane === currentEntangledLane &&
+            (didReadFromEntangledAsyncAction$32 = !0);
+          continue;
+        } else
+          (updateLane = {
+            lane: 0,
+            revertLane: update.revertLane,
+            action: update.action,
+            hasEagerState: update.hasEagerState,
+            eagerState: update.eagerState,
+            next: null
+          }),
+            null === newBaseQueueLast
+              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),
+                (baseFirst = pendingQueue))
+              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),
+            (currentlyRenderingFiber.lanes |= revertLane),
+            (workInProgressRootSkippedLanes |= revertLane);
+        updateLane = update.action;
+        shouldDoubleInvokeUserFnsInHooksDEV &&
+          reducer(pendingQueue, updateLane);
+        pendingQueue = update.hasEagerState
+          ? update.eagerState
+          : reducer(pendingQueue, updateLane);
+      } else
+        (revertLane = {
+          lane: updateLane,
+          revertLane: update.revertLane,
+          action: update.action,
+          hasEagerState: update.hasEagerState,
+          eagerState: update.eagerState,
+          next: null
+        }),
+          null === newBaseQueueLast
+            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),
+              (baseFirst = pendingQueue))
+            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),
+          (currentlyRenderingFiber.lanes |= updateLane),
+          (workInProgressRootSkippedLanes |= updateLane);
+      update = update.next;
+    } while (null !== update && update !== current);
+    null === newBaseQueueLast
+      ? (baseFirst = pendingQueue)
+      : (newBaseQueueLast.next = newBaseQueueFirst);
+    if (
+      !objectIs(pendingQueue, hook.memoizedState) &&
+      ((didReceiveUpdate = !0),
+      didReadFromEntangledAsyncAction$32 &&
+        ((reducer = currentEntangledActionThenable), null !== reducer))
+    )
+      throw reducer;
+    hook.memoizedState = pendingQueue;
+    hook.baseState = baseFirst;
+    hook.baseQueue = newBaseQueueLast;
+    queue.lastRenderedState = pendingQueue;
+  }
+  null === baseQueue && (queue.lanes = 0);
+  return [hook.memoizedState, queue.dispatch];
+}
+function rerenderReducer(reducer) {
+  var hook = updateWorkInProgressHook(),
+    queue = hook.queue;
+  if (null === queue) throw Error(formatProdErrorMessage(311));
+  queue.lastRenderedReducer = reducer;
+  var dispatch = queue.dispatch,
+    lastRenderPhaseUpdate = queue.pending,
+    newState = hook.memoizedState;
+  if (null !== lastRenderPhaseUpdate) {
+    queue.pending = null;
+    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);
+    do (newState = reducer(newState, update.action)), (update = update.next);
+    while (update !== lastRenderPhaseUpdate);
+    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);
+    hook.memoizedState = newState;
+    null === hook.baseQueue && (hook.baseState = newState);
+    queue.lastRenderedState = newState;
+  }
+  return [newState, dispatch];
+}
+function updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
+  var fiber = currentlyRenderingFiber,
+    hook = updateWorkInProgressHook(),
+    isHydrating$jscomp$0 = isHydrating;
+  if (isHydrating$jscomp$0) {
+    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));
+    getServerSnapshot = getServerSnapshot();
+  } else getServerSnapshot = getSnapshot();
+  var snapshotChanged = !objectIs(
+    (currentHook || hook).memoizedState,
+    getServerSnapshot
+  );
+  snapshotChanged &&
+    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));
+  hook = hook.queue;
+  var create = subscribeToStore.bind(null, fiber, hook, subscribe);
+  updateEffectImpl(2048, 8, create, [subscribe]);
+  if (
+    hook.getSnapshot !== getSnapshot ||
+    snapshotChanged ||
+    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)
+  ) {
+    fiber.flags |= 2048;
+    pushSimpleEffect(
+      9,
+      createEffectInstance(),
+      updateStoreInstance.bind(
+        null,
+        fiber,
+        hook,
+        getServerSnapshot,
+        getSnapshot
+      ),
+      null
+    );
+    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));
+    isHydrating$jscomp$0 ||
+      0 !== (renderLanes & 124) ||
+      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);
+  }
+  return getServerSnapshot;
+}
+function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {
+  fiber.flags |= 16384;
+  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };
+  getSnapshot = currentlyRenderingFiber.updateQueue;
+  null === getSnapshot
+    ? ((getSnapshot = createFunctionComponentUpdateQueue()),
+      (currentlyRenderingFiber.updateQueue = getSnapshot),
+      (getSnapshot.stores = [fiber]))
+    : ((renderedSnapshot = getSnapshot.stores),
+      null === renderedSnapshot
+        ? (getSnapshot.stores = [fiber])
+        : renderedSnapshot.push(fiber));
+}
+function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {
+  inst.value = nextSnapshot;
+  inst.getSnapshot = getSnapshot;
+  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);
+}
+function subscribeToStore(fiber, inst, subscribe) {
+  return subscribe(function () {
+    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);
+  });
+}
+function checkIfSnapshotChanged(inst) {
+  var latestGetSnapshot = inst.getSnapshot;
+  inst = inst.value;
+  try {
+    var nextValue = latestGetSnapshot();
+    return !objectIs(inst, nextValue);
+  } catch (error) {
+    return !0;
+  }
+}
+function forceStoreRerender(fiber) {
+  var root = enqueueConcurrentRenderForLane(fiber, 2);
+  null !== root && scheduleUpdateOnFiber(root, fiber, 2);
+}
+function mountStateImpl(initialState) {
+  var hook = mountWorkInProgressHook();
+  if ("function" === typeof initialState) {
+    var initialStateInitializer = initialState;
+    initialState = initialStateInitializer();
+    if (shouldDoubleInvokeUserFnsInHooksDEV) {
+      setIsStrictModeForDevtools(!0);
+      try {
+        initialStateInitializer();
+      } finally {
+        setIsStrictModeForDevtools(!1);
+      }
+    }
+  }
+  hook.memoizedState = hook.baseState = initialState;
+  hook.queue = {
+    pending: null,
+    lanes: 0,
+    dispatch: null,
+    lastRenderedReducer: basicStateReducer,
+    lastRenderedState: initialState
+  };
+  return hook;
+}
+function updateOptimisticImpl(hook, current, passthrough, reducer) {
+  hook.baseState = passthrough;
+  return updateReducerImpl(
+    hook,
+    currentHook,
+    "function" === typeof reducer ? reducer : basicStateReducer
+  );
+}
+function dispatchActionState(
+  fiber,
+  actionQueue,
+  setPendingState,
+  setState,
+  payload
+) {
+  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));
+  fiber = actionQueue.action;
+  if (null !== fiber) {
+    var actionNode = {
+      payload: payload,
+      action: fiber,
+      next: null,
+      isTransition: !0,
+      status: "pending",
+      value: null,
+      reason: null,
+      listeners: [],
+      then: function (listener) {
+        actionNode.listeners.push(listener);
+      }
+    };
+    null !== ReactSharedInternals.T
+      ? setPendingState(!0)
+      : (actionNode.isTransition = !1);
+    setState(actionNode);
+    setPendingState = actionQueue.pending;
+    null === setPendingState
+      ? ((actionNode.next = actionQueue.pending = actionNode),
+        runActionStateAction(actionQueue, actionNode))
+      : ((actionNode.next = setPendingState.next),
+        (actionQueue.pending = setPendingState.next = actionNode));
+  }
+}
+function runActionStateAction(actionQueue, node) {
+  var action = node.action,
+    payload = node.payload,
+    prevState = actionQueue.state;
+  if (node.isTransition) {
+    var prevTransition = ReactSharedInternals.T,
+      currentTransition = {};
+    ReactSharedInternals.T = currentTransition;
+    try {
+      var returnValue = action(prevState, payload),
+        onStartTransitionFinish = ReactSharedInternals.S;
+      null !== onStartTransitionFinish &&
+        onStartTransitionFinish(currentTransition, returnValue);
+      handleActionReturnValue(actionQueue, node, returnValue);
+    } catch (error) {
+      onActionError(actionQueue, node, error);
+    } finally {
+      ReactSharedInternals.T = prevTransition;
+    }
+  } else
+    try {
+      (prevTransition = action(prevState, payload)),
+        handleActionReturnValue(actionQueue, node, prevTransition);
+    } catch (error$38) {
+      onActionError(actionQueue, node, error$38);
+    }
+}
+function handleActionReturnValue(actionQueue, node, returnValue) {
+  null !== returnValue &&
+  "object" === typeof returnValue &&
+  "function" === typeof returnValue.then
+    ? returnValue.then(
+        function (nextState) {
+          onActionSuccess(actionQueue, node, nextState);
+        },
+        function (error) {
+          return onActionError(actionQueue, node, error);
+        }
+      )
+    : onActionSuccess(actionQueue, node, returnValue);
+}
+function onActionSuccess(actionQueue, actionNode, nextState) {
+  actionNode.status = "fulfilled";
+  actionNode.value = nextState;
+  notifyActionListeners(actionNode);
+  actionQueue.state = nextState;
+  actionNode = actionQueue.pending;
+  null !== actionNode &&
+    ((nextState = actionNode.next),
+    nextState === actionNode
+      ? (actionQueue.pending = null)
+      : ((nextState = nextState.next),
+        (actionNode.next = nextState),
+        runActionStateAction(actionQueue, nextState)));
+}
+function onActionError(actionQueue, actionNode, error) {
+  var last = actionQueue.pending;
+  actionQueue.pending = null;
+  if (null !== last) {
+    last = last.next;
+    do
+      (actionNode.status = "rejected"),
+        (actionNode.reason = error),
+        notifyActionListeners(actionNode),
+        (actionNode = actionNode.next);
+    while (actionNode !== last);
+  }
+  actionQueue.action = null;
+}
+function notifyActionListeners(actionNode) {
+  actionNode = actionNode.listeners;
+  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();
+}
+function actionStateReducer(oldState, newState) {
+  return newState;
+}
+function mountActionState(action, initialStateProp) {
+  if (isHydrating) {
+    var ssrFormState = workInProgressRoot.formState;
+    if (null !== ssrFormState) {
+      a: {
+        var JSCompiler_inline_result = currentlyRenderingFiber;
+        if (isHydrating) {
+          if (nextHydratableInstance) {
+            b: {
+              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;
+              for (
+                var inRootOrSingleton = rootOrSingletonContext;
+                8 !== JSCompiler_inline_result$jscomp$0.nodeType;
+
+              ) {
+                if (!inRootOrSingleton) {
+                  JSCompiler_inline_result$jscomp$0 = null;
+                  break b;
+                }
+                JSCompiler_inline_result$jscomp$0 = getNextHydratable(
+                  JSCompiler_inline_result$jscomp$0.nextSibling
+                );
+                if (null === JSCompiler_inline_result$jscomp$0) {
+                  JSCompiler_inline_result$jscomp$0 = null;
+                  break b;
+                }
+              }
+              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;
+              JSCompiler_inline_result$jscomp$0 =
+                "F!" === inRootOrSingleton || "F" === inRootOrSingleton
+                  ? JSCompiler_inline_result$jscomp$0
+                  : null;
+            }
+            if (JSCompiler_inline_result$jscomp$0) {
+              nextHydratableInstance = getNextHydratable(
+                JSCompiler_inline_result$jscomp$0.nextSibling
+              );
+              JSCompiler_inline_result =
+                "F!" === JSCompiler_inline_result$jscomp$0.data;
+              break a;
+            }
+          }
+          throwOnHydrationMismatch(JSCompiler_inline_result);
+        }
+        JSCompiler_inline_result = !1;
+      }
+      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);
+    }
+  }
+  ssrFormState = mountWorkInProgressHook();
+  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;
+  JSCompiler_inline_result = {
+    pending: null,
+    lanes: 0,
+    dispatch: null,
+    lastRenderedReducer: actionStateReducer,
+    lastRenderedState: initialStateProp
+  };
+  ssrFormState.queue = JSCompiler_inline_result;
+  ssrFormState = dispatchSetState.bind(
+    null,
+    currentlyRenderingFiber,
+    JSCompiler_inline_result
+  );
+  JSCompiler_inline_result.dispatch = ssrFormState;
+  JSCompiler_inline_result = mountStateImpl(!1);
+  inRootOrSingleton = dispatchOptimisticSetState.bind(
+    null,
+    currentlyRenderingFiber,
+    !1,
+    JSCompiler_inline_result.queue
+  );
+  JSCompiler_inline_result = mountWorkInProgressHook();
+  JSCompiler_inline_result$jscomp$0 = {
+    state: initialStateProp,
+    dispatch: null,
+    action: action,
+    pending: null
+  };
+  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;
+  ssrFormState = dispatchActionState.bind(
+    null,
+    currentlyRenderingFiber,
+    JSCompiler_inline_result$jscomp$0,
+    inRootOrSingleton,
+    ssrFormState
+  );
+  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;
+  JSCompiler_inline_result.memoizedState = action;
+  return [initialStateProp, ssrFormState, !1];
+}
+function updateActionState(action) {
+  var stateHook = updateWorkInProgressHook();
+  return updateActionStateImpl(stateHook, currentHook, action);
+}
+function updateActionStateImpl(stateHook, currentStateHook, action) {
+  currentStateHook = updateReducerImpl(
+    stateHook,
+    currentStateHook,
+    actionStateReducer
+  )[0];
+  stateHook = updateReducer(basicStateReducer)[0];
+  if (
+    "object" === typeof currentStateHook &&
+    null !== currentStateHook &&
+    "function" === typeof currentStateHook.then
+  )
+    try {
+      var state = useThenable(currentStateHook);
+    } catch (x) {
+      if (x === SuspenseException) throw SuspenseActionException;
+      throw x;
+    }
+  else state = currentStateHook;
+  currentStateHook = updateWorkInProgressHook();
+  var actionQueue = currentStateHook.queue,
+    dispatch = actionQueue.dispatch;
+  action !== currentStateHook.memoizedState &&
+    ((currentlyRenderingFiber.flags |= 2048),
+    pushSimpleEffect(
+      9,
+      createEffectInstance(),
+      actionStateActionEffect.bind(null, actionQueue, action),
+      null
+    ));
+  return [state, dispatch, stateHook];
+}
+function actionStateActionEffect(actionQueue, action) {
+  actionQueue.action = action;
+}
+function rerenderActionState(action) {
+  var stateHook = updateWorkInProgressHook(),
+    currentStateHook = currentHook;
+  if (null !== currentStateHook)
+    return updateActionStateImpl(stateHook, currentStateHook, action);
+  updateWorkInProgressHook();
+  stateHook = stateHook.memoizedState;
+  currentStateHook = updateWorkInProgressHook();
+  var dispatch = currentStateHook.queue.dispatch;
+  currentStateHook.memoizedState = action;
+  return [stateHook, dispatch, !1];
+}
+function pushSimpleEffect(tag, inst, create, createDeps) {
+  tag = { tag: tag, create: create, deps: createDeps, inst: inst, next: null };
+  inst = currentlyRenderingFiber.updateQueue;
+  null === inst &&
+    ((inst = createFunctionComponentUpdateQueue()),
+    (currentlyRenderingFiber.updateQueue = inst));
+  create = inst.lastEffect;
+  null === create
+    ? (inst.lastEffect = tag.next = tag)
+    : ((createDeps = create.next),
+      (create.next = tag),
+      (tag.next = createDeps),
+      (inst.lastEffect = tag));
+  return tag;
+}
+function createEffectInstance() {
+  return { destroy: void 0, resource: void 0 };
+}
+function updateRef() {
+  return updateWorkInProgressHook().memoizedState;
+}
+function mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {
+  var hook = mountWorkInProgressHook();
+  createDeps = void 0 === createDeps ? null : createDeps;
+  currentlyRenderingFiber.flags |= fiberFlags;
+  hook.memoizedState = pushSimpleEffect(
+    1 | hookFlags,
+    createEffectInstance(),
+    create,
+    createDeps
+  );
+}
+function updateEffectImpl(fiberFlags, hookFlags, create, deps) {
+  var hook = updateWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  var inst = hook.memoizedState.inst;
+  null !== currentHook &&
+  null !== deps &&
+  areHookInputsEqual(deps, currentHook.memoizedState.deps)
+    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))
+    : ((currentlyRenderingFiber.flags |= fiberFlags),
+      (hook.memoizedState = pushSimpleEffect(
+        1 | hookFlags,
+        inst,
+        create,
+        deps
+      )));
+}
+function mountEffect(create, createDeps) {
+  mountEffectImpl(8390656, 8, create, createDeps);
+}
+function updateEffect(create, createDeps) {
+  updateEffectImpl(2048, 8, create, createDeps);
+}
+function updateInsertionEffect(create, deps) {
+  return updateEffectImpl(4, 2, create, deps);
+}
+function updateLayoutEffect(create, deps) {
+  return updateEffectImpl(4, 4, create, deps);
+}
+function imperativeHandleEffect(create, ref) {
+  if ("function" === typeof ref) {
+    create = create();
+    var refCleanup = ref(create);
+    return function () {
+      "function" === typeof refCleanup ? refCleanup() : ref(null);
+    };
+  }
+  if (null !== ref && void 0 !== ref)
+    return (
+      (create = create()),
+      (ref.current = create),
+      function () {
+        ref.current = null;
+      }
+    );
+}
+function updateImperativeHandle(ref, create, deps) {
+  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;
+  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);
+}
+function mountDebugValue() {}
+function updateCallback(callback, deps) {
+  var hook = updateWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  var prevState = hook.memoizedState;
+  if (null !== deps && areHookInputsEqual(deps, prevState[1]))
+    return prevState[0];
+  hook.memoizedState = [callback, deps];
+  return callback;
+}
+function updateMemo(nextCreate, deps) {
+  var hook = updateWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  var prevState = hook.memoizedState;
+  if (null !== deps && areHookInputsEqual(deps, prevState[1]))
+    return prevState[0];
+  prevState = nextCreate();
+  if (shouldDoubleInvokeUserFnsInHooksDEV) {
+    setIsStrictModeForDevtools(!0);
+    try {
+      nextCreate();
+    } finally {
+      setIsStrictModeForDevtools(!1);
+    }
+  }
+  hook.memoizedState = [prevState, deps];
+  return prevState;
+}
+function mountDeferredValueImpl(hook, value, initialValue) {
+  if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))
+    return (hook.memoizedState = value);
+  hook.memoizedState = initialValue;
+  hook = requestDeferredLane();
+  currentlyRenderingFiber.lanes |= hook;
+  workInProgressRootSkippedLanes |= hook;
+  return initialValue;
+}
+function updateDeferredValueImpl(hook, prevValue, value, initialValue) {
+  if (objectIs(value, prevValue)) return value;
+  if (null !== currentTreeHiddenStackCursor.current)
+    return (
+      (hook = mountDeferredValueImpl(hook, value, initialValue)),
+      objectIs(hook, prevValue) || (didReceiveUpdate = !0),
+      hook
+    );
+  if (0 === (renderLanes & 42))
+    return (didReceiveUpdate = !0), (hook.memoizedState = value);
+  hook = requestDeferredLane();
+  currentlyRenderingFiber.lanes |= hook;
+  workInProgressRootSkippedLanes |= hook;
+  return prevValue;
+}
+function startTransition(fiber, queue, pendingState, finishedState, callback) {
+  var previousPriority = ReactDOMSharedInternals.p;
+  ReactDOMSharedInternals.p =
+    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;
+  var prevTransition = ReactSharedInternals.T,
+    currentTransition = {};
+  ReactSharedInternals.T = currentTransition;
+  dispatchOptimisticSetState(fiber, !1, queue, pendingState);
+  try {
+    var returnValue = callback(),
+      onStartTransitionFinish = ReactSharedInternals.S;
+    null !== onStartTransitionFinish &&
+      onStartTransitionFinish(currentTransition, returnValue);
+    if (
+      null !== returnValue &&
+      "object" === typeof returnValue &&
+      "function" === typeof returnValue.then
+    ) {
+      var thenableForFinishedState = chainThenableValue(
+        returnValue,
+        finishedState
+      );
+      dispatchSetStateInternal(
+        fiber,
+        queue,
+        thenableForFinishedState,
+        requestUpdateLane(fiber)
+      );
+    } else
+      dispatchSetStateInternal(
+        fiber,
+        queue,
+        finishedState,
+        requestUpdateLane(fiber)
+      );
+  } catch (error) {
+    dispatchSetStateInternal(
+      fiber,
+      queue,
+      { then: function () {}, status: "rejected", reason: error },
+      requestUpdateLane()
+    );
+  } finally {
+    (ReactDOMSharedInternals.p = previousPriority),
+      (ReactSharedInternals.T = prevTransition);
+  }
+}
+function noop$2() {}
+function startHostTransition(formFiber, pendingState, action, formData) {
+  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));
+  var queue = ensureFormComponentIsStateful(formFiber).queue;
+  startTransition(
+    formFiber,
+    queue,
+    pendingState,
+    sharedNotPendingObject,
+    null === action
+      ? noop$2
+      : function () {
+          requestFormReset$1(formFiber);
+          return action(formData);
+        }
+  );
+}
+function ensureFormComponentIsStateful(formFiber) {
+  var existingStateHook = formFiber.memoizedState;
+  if (null !== existingStateHook) return existingStateHook;
+  existingStateHook = {
+    memoizedState: sharedNotPendingObject,
+    baseState: sharedNotPendingObject,
+    baseQueue: null,
+    queue: {
+      pending: null,
+      lanes: 0,
+      dispatch: null,
+      lastRenderedReducer: basicStateReducer,
+      lastRenderedState: sharedNotPendingObject
+    },
+    next: null
+  };
+  var initialResetState = {};
+  existingStateHook.next = {
+    memoizedState: initialResetState,
+    baseState: initialResetState,
+    baseQueue: null,
+    queue: {
+      pending: null,
+      lanes: 0,
+      dispatch: null,
+      lastRenderedReducer: basicStateReducer,
+      lastRenderedState: initialResetState
+    },
+    next: null
+  };
+  formFiber.memoizedState = existingStateHook;
+  formFiber = formFiber.alternate;
+  null !== formFiber && (formFiber.memoizedState = existingStateHook);
+  return existingStateHook;
+}
+function requestFormReset$1(formFiber) {
+  var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;
+  dispatchSetStateInternal(formFiber, resetStateQueue, {}, requestUpdateLane());
+}
+function useHostTransitionStatus() {
+  return readContext(HostTransitionContext);
+}
+function updateId() {
+  return updateWorkInProgressHook().memoizedState;
+}
+function updateRefresh() {
+  return updateWorkInProgressHook().memoizedState;
+}
+function refreshCache(fiber) {
+  for (var provider = fiber.return; null !== provider; ) {
+    switch (provider.tag) {
+      case 24:
+      case 3:
+        var lane = requestUpdateLane();
+        fiber = createUpdate(lane);
+        var root$41 = enqueueUpdate(provider, fiber, lane);
+        null !== root$41 &&
+          (scheduleUpdateOnFiber(root$41, provider, lane),
+          entangleTransitions(root$41, provider, lane));
+        provider = { cache: createCache() };
+        fiber.payload = provider;
+        return;
+    }
+    provider = provider.return;
+  }
+}
+function dispatchReducerAction(fiber, queue, action) {
+  var lane = requestUpdateLane();
+  action = {
+    lane: lane,
+    revertLane: 0,
+    action: action,
+    hasEagerState: !1,
+    eagerState: null,
+    next: null
+  };
+  isRenderPhaseUpdate(fiber)
+    ? enqueueRenderPhaseUpdate(queue, action)
+    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),
+      null !== action &&
+        (scheduleUpdateOnFiber(action, fiber, lane),
+        entangleTransitionUpdate(action, queue, lane)));
+}
+function dispatchSetState(fiber, queue, action) {
+  var lane = requestUpdateLane();
+  dispatchSetStateInternal(fiber, queue, action, lane);
+}
+function dispatchSetStateInternal(fiber, queue, action, lane) {
+  var update = {
+    lane: lane,
+    revertLane: 0,
+    action: action,
+    hasEagerState: !1,
+    eagerState: null,
+    next: null
+  };
+  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);
+  else {
+    var alternate = fiber.alternate;
+    if (
+      0 === fiber.lanes &&
+      (null === alternate || 0 === alternate.lanes) &&
+      ((alternate = queue.lastRenderedReducer), null !== alternate)
+    )
+      try {
+        var currentState = queue.lastRenderedState,
+          eagerState = alternate(currentState, action);
+        update.hasEagerState = !0;
+        update.eagerState = eagerState;
+        if (objectIs(eagerState, currentState))
+          return (
+            enqueueUpdate$1(fiber, queue, update, 0),
+            null === workInProgressRoot && finishQueueingConcurrentUpdates(),
+            !1
+          );
+      } catch (error) {
+      } finally {
+      }
+    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);
+    if (null !== action)
+      return (
+        scheduleUpdateOnFiber(action, fiber, lane),
+        entangleTransitionUpdate(action, queue, lane),
+        !0
+      );
+  }
+  return !1;
+}
+function dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {
+  action = {
+    lane: 2,
+    revertLane: requestTransitionLane(),
+    action: action,
+    hasEagerState: !1,
+    eagerState: null,
+    next: null
+  };
+  if (isRenderPhaseUpdate(fiber)) {
+    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));
+  } else
+    (throwIfDuringRender = enqueueConcurrentHookUpdate(
+      fiber,
+      queue,
+      action,
+      2
+    )),
+      null !== throwIfDuringRender &&
+        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);
+}
+function isRenderPhaseUpdate(fiber) {
+  var alternate = fiber.alternate;
+  return (
+    fiber === currentlyRenderingFiber ||
+    (null !== alternate && alternate === currentlyRenderingFiber)
+  );
+}
+function enqueueRenderPhaseUpdate(queue, update) {
+  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =
+    !0;
+  var pending = queue.pending;
+  null === pending
+    ? (update.next = update)
+    : ((update.next = pending.next), (pending.next = update));
+  queue.pending = update;
+}
+function entangleTransitionUpdate(root, queue, lane) {
+  if (0 !== (lane & 4194048)) {
+    var queueLanes = queue.lanes;
+    queueLanes &= root.pendingLanes;
+    lane |= queueLanes;
+    queue.lanes = lane;
+    markRootEntangled(root, lane);
+  }
+}
+var ContextOnlyDispatcher = {
+    readContext: readContext,
+    use: use,
+    useCallback: throwInvalidHookError,
+    useContext: throwInvalidHookError,
+    useEffect: throwInvalidHookError,
+    useImperativeHandle: throwInvalidHookError,
+    useLayoutEffect: throwInvalidHookError,
+    useInsertionEffect: throwInvalidHookError,
+    useMemo: throwInvalidHookError,
+    useReducer: throwInvalidHookError,
+    useRef: throwInvalidHookError,
+    useState: throwInvalidHookError,
+    useDebugValue: throwInvalidHookError,
+    useDeferredValue: throwInvalidHookError,
+    useTransition: throwInvalidHookError,
+    useSyncExternalStore: throwInvalidHookError,
+    useId: throwInvalidHookError,
+    useHostTransitionStatus: throwInvalidHookError,
+    useFormState: throwInvalidHookError,
+    useActionState: throwInvalidHookError,
+    useOptimistic: throwInvalidHookError,
+    useMemoCache: throwInvalidHookError,
+    useCacheRefresh: throwInvalidHookError
+  },
+  HooksDispatcherOnMount = {
+    readContext: readContext,
+    use: use,
+    useCallback: function (callback, deps) {
+      mountWorkInProgressHook().memoizedState = [
+        callback,
+        void 0 === deps ? null : deps
+      ];
+      return callback;
+    },
+    useContext: readContext,
+    useEffect: mountEffect,
+    useImperativeHandle: function (ref, create, deps) {
+      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;
+      mountEffectImpl(
+        4194308,
+        4,
+        imperativeHandleEffect.bind(null, create, ref),
+        deps
+      );
+    },
+    useLayoutEffect: function (create, deps) {
+      return mountEffectImpl(4194308, 4, create, deps);
+    },
+    useInsertionEffect: function (create, deps) {
+      mountEffectImpl(4, 2, create, deps);
+    },
+    useMemo: function (nextCreate, deps) {
+      var hook = mountWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var nextValue = nextCreate();
+      if (shouldDoubleInvokeUserFnsInHooksDEV) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          nextCreate();
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      hook.memoizedState = [nextValue, deps];
+      return nextValue;
+    },
+    useReducer: function (reducer, initialArg, init) {
+      var hook = mountWorkInProgressHook();
+      if (void 0 !== init) {
+        var initialState = init(initialArg);
+        if (shouldDoubleInvokeUserFnsInHooksDEV) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            init(initialArg);
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+      } else initialState = initialArg;
+      hook.memoizedState = hook.baseState = initialState;
+      reducer = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: reducer,
+        lastRenderedState: initialState
+      };
+      hook.queue = reducer;
+      reducer = reducer.dispatch = dispatchReducerAction.bind(
+        null,
+        currentlyRenderingFiber,
+        reducer
+      );
+      return [hook.memoizedState, reducer];
+    },
+    useRef: function (initialValue) {
+      var hook = mountWorkInProgressHook();
+      initialValue = { current: initialValue };
+      return (hook.memoizedState = initialValue);
+    },
+    useState: function (initialState) {
+      initialState = mountStateImpl(initialState);
+      var queue = initialState.queue,
+        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);
+      queue.dispatch = dispatch;
+      return [initialState.memoizedState, dispatch];
+    },
+    useDebugValue: mountDebugValue,
+    useDeferredValue: function (value, initialValue) {
+      var hook = mountWorkInProgressHook();
+      return mountDeferredValueImpl(hook, value, initialValue);
+    },
+    useTransition: function () {
+      var stateHook = mountStateImpl(!1);
+      stateHook = startTransition.bind(
+        null,
+        currentlyRenderingFiber,
+        stateHook.queue,
+        !0,
+        !1
+      );
+      mountWorkInProgressHook().memoizedState = stateHook;
+      return [!1, stateHook];
+    },
+    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
+      var fiber = currentlyRenderingFiber,
+        hook = mountWorkInProgressHook();
+      if (isHydrating) {
+        if (void 0 === getServerSnapshot)
+          throw Error(formatProdErrorMessage(407));
+        getServerSnapshot = getServerSnapshot();
+      } else {
+        getServerSnapshot = getSnapshot();
+        if (null === workInProgressRoot)
+          throw Error(formatProdErrorMessage(349));
+        0 !== (workInProgressRootRenderLanes & 124) ||
+          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);
+      }
+      hook.memoizedState = getServerSnapshot;
+      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };
+      hook.queue = inst;
+      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [
+        subscribe
+      ]);
+      fiber.flags |= 2048;
+      pushSimpleEffect(
+        9,
+        createEffectInstance(),
+        updateStoreInstance.bind(
+          null,
+          fiber,
+          inst,
+          getServerSnapshot,
+          getSnapshot
+        ),
+        null
+      );
+      return getServerSnapshot;
+    },
+    useId: function () {
+      var hook = mountWorkInProgressHook(),
+        identifierPrefix = workInProgressRoot.identifierPrefix;
+      if (isHydrating) {
+        var JSCompiler_inline_result = treeContextOverflow;
+        var idWithLeadingBit = treeContextId;
+        JSCompiler_inline_result =
+          (
+            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))
+          ).toString(32) + JSCompiler_inline_result;
+        identifierPrefix =
+          "\u00ab" + identifierPrefix + "R" + JSCompiler_inline_result;
+        JSCompiler_inline_result = localIdCounter++;
+        0 < JSCompiler_inline_result &&
+          (identifierPrefix += "H" + JSCompiler_inline_result.toString(32));
+        identifierPrefix += "\u00bb";
+      } else
+        (JSCompiler_inline_result = globalClientIdCounter++),
+          (identifierPrefix =
+            "\u00ab" +
+            identifierPrefix +
+            "r" +
+            JSCompiler_inline_result.toString(32) +
+            "\u00bb");
+      return (hook.memoizedState = identifierPrefix);
+    },
+    useHostTransitionStatus: useHostTransitionStatus,
+    useFormState: mountActionState,
+    useActionState: mountActionState,
+    useOptimistic: function (passthrough) {
+      var hook = mountWorkInProgressHook();
+      hook.memoizedState = hook.baseState = passthrough;
+      var queue = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: null,
+        lastRenderedState: null
+      };
+      hook.queue = queue;
+      hook = dispatchOptimisticSetState.bind(
+        null,
+        currentlyRenderingFiber,
+        !0,
+        queue
+      );
+      queue.dispatch = hook;
+      return [passthrough, hook];
+    },
+    useMemoCache: useMemoCache,
+    useCacheRefresh: function () {
+      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(
+        null,
+        currentlyRenderingFiber
+      ));
+    }
+  },
+  HooksDispatcherOnUpdate = {
+    readContext: readContext,
+    use: use,
+    useCallback: updateCallback,
+    useContext: readContext,
+    useEffect: updateEffect,
+    useImperativeHandle: updateImperativeHandle,
+    useInsertionEffect: updateInsertionEffect,
+    useLayoutEffect: updateLayoutEffect,
+    useMemo: updateMemo,
+    useReducer: updateReducer,
+    useRef: updateRef,
+    useState: function () {
+      return updateReducer(basicStateReducer);
+    },
+    useDebugValue: mountDebugValue,
+    useDeferredValue: function (value, initialValue) {
+      var hook = updateWorkInProgressHook();
+      return updateDeferredValueImpl(
+        hook,
+        currentHook.memoizedState,
+        value,
+        initialValue
+      );
+    },
+    useTransition: function () {
+      var booleanOrThenable = updateReducer(basicStateReducer)[0],
+        start = updateWorkInProgressHook().memoizedState;
+      return [
+        "boolean" === typeof booleanOrThenable
+          ? booleanOrThenable
+          : useThenable(booleanOrThenable),
+        start
+      ];
+    },
+    useSyncExternalStore: updateSyncExternalStore,
+    useId: updateId,
+    useHostTransitionStatus: useHostTransitionStatus,
+    useFormState: updateActionState,
+    useActionState: updateActionState,
+    useOptimistic: function (passthrough, reducer) {
+      var hook = updateWorkInProgressHook();
+      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);
+    },
+    useMemoCache: useMemoCache,
+    useCacheRefresh: updateRefresh
+  },
+  HooksDispatcherOnRerender = {
+    readContext: readContext,
+    use: use,
+    useCallback: updateCallback,
+    useContext: readContext,
+    useEffect: updateEffect,
+    useImperativeHandle: updateImperativeHandle,
+    useInsertionEffect: updateInsertionEffect,
+    useLayoutEffect: updateLayoutEffect,
+    useMemo: updateMemo,
+    useReducer: rerenderReducer,
+    useRef: updateRef,
+    useState: function () {
+      return rerenderReducer(basicStateReducer);
+    },
+    useDebugValue: mountDebugValue,
+    useDeferredValue: function (value, initialValue) {
+      var hook = updateWorkInProgressHook();
+      return null === currentHook
+        ? mountDeferredValueImpl(hook, value, initialValue)
+        : updateDeferredValueImpl(
+            hook,
+            currentHook.memoizedState,
+            value,
+            initialValue
+          );
+    },
+    useTransition: function () {
+      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],
+        start = updateWorkInProgressHook().memoizedState;
+      return [
+        "boolean" === typeof booleanOrThenable
+          ? booleanOrThenable
+          : useThenable(booleanOrThenable),
+        start
+      ];
+    },
+    useSyncExternalStore: updateSyncExternalStore,
+    useId: updateId,
+    useHostTransitionStatus: useHostTransitionStatus,
+    useFormState: rerenderActionState,
+    useActionState: rerenderActionState,
+    useOptimistic: function (passthrough, reducer) {
+      var hook = updateWorkInProgressHook();
+      if (null !== currentHook)
+        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);
+      hook.baseState = passthrough;
+      return [passthrough, hook.queue.dispatch];
+    },
+    useMemoCache: useMemoCache,
+    useCacheRefresh: updateRefresh
+  },
+  thenableState = null,
+  thenableIndexCounter = 0;
+function unwrapThenable(thenable) {
+  var index = thenableIndexCounter;
+  thenableIndexCounter += 1;
+  null === thenableState && (thenableState = []);
+  return trackUsedThenable(thenableState, thenable, index);
+}
+function coerceRef(workInProgress, element) {
+  element = element.props.ref;
+  workInProgress.ref = void 0 !== element ? element : null;
+}
+function throwOnInvalidObjectType(returnFiber, newChild) {
+  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)
+    throw Error(formatProdErrorMessage(525));
+  returnFiber = Object.prototype.toString.call(newChild);
+  throw Error(
+    formatProdErrorMessage(
+      31,
+      "[object Object]" === returnFiber
+        ? "object with keys {" + Object.keys(newChild).join(", ") + "}"
+        : returnFiber
+    )
+  );
+}
+function resolveLazy(lazyType) {
+  var init = lazyType._init;
+  return init(lazyType._payload);
+}
+function createChildReconciler(shouldTrackSideEffects) {
+  function deleteChild(returnFiber, childToDelete) {
+    if (shouldTrackSideEffects) {
+      var deletions = returnFiber.deletions;
+      null === deletions
+        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))
+        : deletions.push(childToDelete);
+    }
+  }
+  function deleteRemainingChildren(returnFiber, currentFirstChild) {
+    if (!shouldTrackSideEffects) return null;
+    for (; null !== currentFirstChild; )
+      deleteChild(returnFiber, currentFirstChild),
+        (currentFirstChild = currentFirstChild.sibling);
+    return null;
+  }
+  function mapRemainingChildren(currentFirstChild) {
+    for (var existingChildren = new Map(); null !== currentFirstChild; )
+      null !== currentFirstChild.key
+        ? existingChildren.set(currentFirstChild.key, currentFirstChild)
+        : existingChildren.set(currentFirstChild.index, currentFirstChild),
+        (currentFirstChild = currentFirstChild.sibling);
+    return existingChildren;
+  }
+  function useFiber(fiber, pendingProps) {
+    fiber = createWorkInProgress(fiber, pendingProps);
+    fiber.index = 0;
+    fiber.sibling = null;
+    return fiber;
+  }
+  function placeChild(newFiber, lastPlacedIndex, newIndex) {
+    newFiber.index = newIndex;
+    if (!shouldTrackSideEffects)
+      return (newFiber.flags |= 1048576), lastPlacedIndex;
+    newIndex = newFiber.alternate;
+    if (null !== newIndex)
+      return (
+        (newIndex = newIndex.index),
+        newIndex < lastPlacedIndex
+          ? ((newFiber.flags |= 67108866), lastPlacedIndex)
+          : newIndex
+      );
+    newFiber.flags |= 67108866;
+    return lastPlacedIndex;
+  }
+  function placeSingleChild(newFiber) {
+    shouldTrackSideEffects &&
+      null === newFiber.alternate &&
+      (newFiber.flags |= 67108866);
+    return newFiber;
+  }
+  function updateTextNode(returnFiber, current, textContent, lanes) {
+    if (null === current || 6 !== current.tag)
+      return (
+        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),
+        (current.return = returnFiber),
+        current
+      );
+    current = useFiber(current, textContent);
+    current.return = returnFiber;
+    return current;
+  }
+  function updateElement(returnFiber, current, element, lanes) {
+    var elementType = element.type;
+    if (elementType === REACT_FRAGMENT_TYPE)
+      return updateFragment(
+        returnFiber,
+        current,
+        element.props.children,
+        lanes,
+        element.key
+      );
+    if (
+      null !== current &&
+      (current.elementType === elementType ||
+        ("object" === typeof elementType &&
+          null !== elementType &&
+          elementType.$$typeof === REACT_LAZY_TYPE &&
+          resolveLazy(elementType) === current.type))
+    )
+      return (
+        (current = useFiber(current, element.props)),
+        coerceRef(current, element),
+        (current.return = returnFiber),
+        current
+      );
+    current = createFiberFromTypeAndProps(
+      element.type,
+      element.key,
+      element.props,
+      null,
+      returnFiber.mode,
+      lanes
+    );
+    coerceRef(current, element);
+    current.return = returnFiber;
+    return current;
+  }
+  function updatePortal(returnFiber, current, portal, lanes) {
+    if (
+      null === current ||
+      4 !== current.tag ||
+      current.stateNode.containerInfo !== portal.containerInfo ||
+      current.stateNode.implementation !== portal.implementation
+    )
+      return (
+        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),
+        (current.return = returnFiber),
+        current
+      );
+    current = useFiber(current, portal.children || []);
+    current.return = returnFiber;
+    return current;
+  }
+  function updateFragment(returnFiber, current, fragment, lanes, key) {
+    if (null === current || 7 !== current.tag)
+      return (
+        (current = createFiberFromFragment(
+          fragment,
+          returnFiber.mode,
+          lanes,
+          key
+        )),
+        (current.return = returnFiber),
+        current
+      );
+    current = useFiber(current, fragment);
+    current.return = returnFiber;
+    return current;
+  }
+  function createChild(returnFiber, newChild, lanes) {
+    if (
+      ("string" === typeof newChild && "" !== newChild) ||
+      "number" === typeof newChild ||
+      "bigint" === typeof newChild
+    )
+      return (
+        (newChild = createFiberFromText(
+          "" + newChild,
+          returnFiber.mode,
+          lanes
+        )),
+        (newChild.return = returnFiber),
+        newChild
+      );
+    if ("object" === typeof newChild && null !== newChild) {
+      switch (newChild.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          return (
+            (lanes = createFiberFromTypeAndProps(
+              newChild.type,
+              newChild.key,
+              newChild.props,
+              null,
+              returnFiber.mode,
+              lanes
+            )),
+            coerceRef(lanes, newChild),
+            (lanes.return = returnFiber),
+            lanes
+          );
+        case REACT_PORTAL_TYPE:
+          return (
+            (newChild = createFiberFromPortal(
+              newChild,
+              returnFiber.mode,
+              lanes
+            )),
+            (newChild.return = returnFiber),
+            newChild
+          );
+        case REACT_LAZY_TYPE:
+          var init = newChild._init;
+          newChild = init(newChild._payload);
+          return createChild(returnFiber, newChild, lanes);
+      }
+      if (isArrayImpl(newChild) || getIteratorFn(newChild))
+        return (
+          (newChild = createFiberFromFragment(
+            newChild,
+            returnFiber.mode,
+            lanes,
+            null
+          )),
+          (newChild.return = returnFiber),
+          newChild
+        );
+      if ("function" === typeof newChild.then)
+        return createChild(returnFiber, unwrapThenable(newChild), lanes);
+      if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+        return createChild(
+          returnFiber,
+          readContextDuringReconciliation(returnFiber, newChild),
+          lanes
+        );
+      throwOnInvalidObjectType(returnFiber, newChild);
+    }
+    return null;
+  }
+  function updateSlot(returnFiber, oldFiber, newChild, lanes) {
+    var key = null !== oldFiber ? oldFiber.key : null;
+    if (
+      ("string" === typeof newChild && "" !== newChild) ||
+      "number" === typeof newChild ||
+      "bigint" === typeof newChild
+    )
+      return null !== key
+        ? null
+        : updateTextNode(returnFiber, oldFiber, "" + newChild, lanes);
+    if ("object" === typeof newChild && null !== newChild) {
+      switch (newChild.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          return newChild.key === key
+            ? updateElement(returnFiber, oldFiber, newChild, lanes)
+            : null;
+        case REACT_PORTAL_TYPE:
+          return newChild.key === key
+            ? updatePortal(returnFiber, oldFiber, newChild, lanes)
+            : null;
+        case REACT_LAZY_TYPE:
+          return (
+            (key = newChild._init),
+            (newChild = key(newChild._payload)),
+            updateSlot(returnFiber, oldFiber, newChild, lanes)
+          );
+      }
+      if (isArrayImpl(newChild) || getIteratorFn(newChild))
+        return null !== key
+          ? null
+          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);
+      if ("function" === typeof newChild.then)
+        return updateSlot(
+          returnFiber,
+          oldFiber,
+          unwrapThenable(newChild),
+          lanes
+        );
+      if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+        return updateSlot(
+          returnFiber,
+          oldFiber,
+          readContextDuringReconciliation(returnFiber, newChild),
+          lanes
+        );
+      throwOnInvalidObjectType(returnFiber, newChild);
+    }
+    return null;
+  }
+  function updateFromMap(
+    existingChildren,
+    returnFiber,
+    newIdx,
+    newChild,
+    lanes
+  ) {
+    if (
+      ("string" === typeof newChild && "" !== newChild) ||
+      "number" === typeof newChild ||
+      "bigint" === typeof newChild
+    )
+      return (
+        (existingChildren = existingChildren.get(newIdx) || null),
+        updateTextNode(returnFiber, existingChildren, "" + newChild, lanes)
+      );
+    if ("object" === typeof newChild && null !== newChild) {
+      switch (newChild.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          return (
+            (existingChildren =
+              existingChildren.get(
+                null === newChild.key ? newIdx : newChild.key
+              ) || null),
+            updateElement(returnFiber, existingChildren, newChild, lanes)
+          );
+        case REACT_PORTAL_TYPE:
+          return (
+            (existingChildren =
+              existingChildren.get(
+                null === newChild.key ? newIdx : newChild.key
+              ) || null),
+            updatePortal(returnFiber, existingChildren, newChild, lanes)
+          );
+        case REACT_LAZY_TYPE:
+          var init = newChild._init;
+          newChild = init(newChild._payload);
+          return updateFromMap(
+            existingChildren,
+            returnFiber,
+            newIdx,
+            newChild,
+            lanes
+          );
+      }
+      if (isArrayImpl(newChild) || getIteratorFn(newChild))
+        return (
+          (existingChildren = existingChildren.get(newIdx) || null),
+          updateFragment(returnFiber, existingChildren, newChild, lanes, null)
+        );
+      if ("function" === typeof newChild.then)
+        return updateFromMap(
+          existingChildren,
+          returnFiber,
+          newIdx,
+          unwrapThenable(newChild),
+          lanes
+        );
+      if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+        return updateFromMap(
+          existingChildren,
+          returnFiber,
+          newIdx,
+          readContextDuringReconciliation(returnFiber, newChild),
+          lanes
+        );
+      throwOnInvalidObjectType(returnFiber, newChild);
+    }
+    return null;
+  }
+  function reconcileChildrenArray(
+    returnFiber,
+    currentFirstChild,
+    newChildren,
+    lanes
+  ) {
+    for (
+      var resultingFirstChild = null,
+        previousNewFiber = null,
+        oldFiber = currentFirstChild,
+        newIdx = (currentFirstChild = 0),
+        nextOldFiber = null;
+      null !== oldFiber && newIdx < newChildren.length;
+      newIdx++
+    ) {
+      oldFiber.index > newIdx
+        ? ((nextOldFiber = oldFiber), (oldFiber = null))
+        : (nextOldFiber = oldFiber.sibling);
+      var newFiber = updateSlot(
+        returnFiber,
+        oldFiber,
+        newChildren[newIdx],
+        lanes
+      );
+      if (null === newFiber) {
+        null === oldFiber && (oldFiber = nextOldFiber);
+        break;
+      }
+      shouldTrackSideEffects &&
+        oldFiber &&
+        null === newFiber.alternate &&
+        deleteChild(returnFiber, oldFiber);
+      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);
+      null === previousNewFiber
+        ? (resultingFirstChild = newFiber)
+        : (previousNewFiber.sibling = newFiber);
+      previousNewFiber = newFiber;
+      oldFiber = nextOldFiber;
+    }
+    if (newIdx === newChildren.length)
+      return (
+        deleteRemainingChildren(returnFiber, oldFiber),
+        isHydrating && pushTreeFork(returnFiber, newIdx),
+        resultingFirstChild
+      );
+    if (null === oldFiber) {
+      for (; newIdx < newChildren.length; newIdx++)
+        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),
+          null !== oldFiber &&
+            ((currentFirstChild = placeChild(
+              oldFiber,
+              currentFirstChild,
+              newIdx
+            )),
+            null === previousNewFiber
+              ? (resultingFirstChild = oldFiber)
+              : (previousNewFiber.sibling = oldFiber),
+            (previousNewFiber = oldFiber));
+      isHydrating && pushTreeFork(returnFiber, newIdx);
+      return resultingFirstChild;
+    }
+    for (
+      oldFiber = mapRemainingChildren(oldFiber);
+      newIdx < newChildren.length;
+      newIdx++
+    )
+      (nextOldFiber = updateFromMap(
+        oldFiber,
+        returnFiber,
+        newIdx,
+        newChildren[newIdx],
+        lanes
+      )),
+        null !== nextOldFiber &&
+          (shouldTrackSideEffects &&
+            null !== nextOldFiber.alternate &&
+            oldFiber.delete(
+              null === nextOldFiber.key ? newIdx : nextOldFiber.key
+            ),
+          (currentFirstChild = placeChild(
+            nextOldFiber,
+            currentFirstChild,
+            newIdx
+          )),
+          null === previousNewFiber
+            ? (resultingFirstChild = nextOldFiber)
+            : (previousNewFiber.sibling = nextOldFiber),
+          (previousNewFiber = nextOldFiber));
+    shouldTrackSideEffects &&
+      oldFiber.forEach(function (child) {
+        return deleteChild(returnFiber, child);
+      });
+    isHydrating && pushTreeFork(returnFiber, newIdx);
+    return resultingFirstChild;
+  }
+  function reconcileChildrenIterator(
+    returnFiber,
+    currentFirstChild,
+    newChildren,
+    lanes
+  ) {
+    if (null == newChildren) throw Error(formatProdErrorMessage(151));
+    for (
+      var resultingFirstChild = null,
+        previousNewFiber = null,
+        oldFiber = currentFirstChild,
+        newIdx = (currentFirstChild = 0),
+        nextOldFiber = null,
+        step = newChildren.next();
+      null !== oldFiber && !step.done;
+      newIdx++, step = newChildren.next()
+    ) {
+      oldFiber.index > newIdx
+        ? ((nextOldFiber = oldFiber), (oldFiber = null))
+        : (nextOldFiber = oldFiber.sibling);
+      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);
+      if (null === newFiber) {
+        null === oldFiber && (oldFiber = nextOldFiber);
+        break;
+      }
+      shouldTrackSideEffects &&
+        oldFiber &&
+        null === newFiber.alternate &&
+        deleteChild(returnFiber, oldFiber);
+      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);
+      null === previousNewFiber
+        ? (resultingFirstChild = newFiber)
+        : (previousNewFiber.sibling = newFiber);
+      previousNewFiber = newFiber;
+      oldFiber = nextOldFiber;
+    }
+    if (step.done)
+      return (
+        deleteRemainingChildren(returnFiber, oldFiber),
+        isHydrating && pushTreeFork(returnFiber, newIdx),
+        resultingFirstChild
+      );
+    if (null === oldFiber) {
+      for (; !step.done; newIdx++, step = newChildren.next())
+        (step = createChild(returnFiber, step.value, lanes)),
+          null !== step &&
+            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),
+            null === previousNewFiber
+              ? (resultingFirstChild = step)
+              : (previousNewFiber.sibling = step),
+            (previousNewFiber = step));
+      isHydrating && pushTreeFork(returnFiber, newIdx);
+      return resultingFirstChild;
+    }
+    for (
+      oldFiber = mapRemainingChildren(oldFiber);
+      !step.done;
+      newIdx++, step = newChildren.next()
+    )
+      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),
+        null !== step &&
+          (shouldTrackSideEffects &&
+            null !== step.alternate &&
+            oldFiber.delete(null === step.key ? newIdx : step.key),
+          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),
+          null === previousNewFiber
+            ? (resultingFirstChild = step)
+            : (previousNewFiber.sibling = step),
+          (previousNewFiber = step));
+    shouldTrackSideEffects &&
+      oldFiber.forEach(function (child) {
+        return deleteChild(returnFiber, child);
+      });
+    isHydrating && pushTreeFork(returnFiber, newIdx);
+    return resultingFirstChild;
+  }
+  function reconcileChildFibersImpl(
+    returnFiber,
+    currentFirstChild,
+    newChild,
+    lanes
+  ) {
+    "object" === typeof newChild &&
+      null !== newChild &&
+      newChild.type === REACT_FRAGMENT_TYPE &&
+      null === newChild.key &&
+      (newChild = newChild.props.children);
+    if ("object" === typeof newChild && null !== newChild) {
+      switch (newChild.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          a: {
+            for (var key = newChild.key; null !== currentFirstChild; ) {
+              if (currentFirstChild.key === key) {
+                key = newChild.type;
+                if (key === REACT_FRAGMENT_TYPE) {
+                  if (7 === currentFirstChild.tag) {
+                    deleteRemainingChildren(
+                      returnFiber,
+                      currentFirstChild.sibling
+                    );
+                    lanes = useFiber(
+                      currentFirstChild,
+                      newChild.props.children
+                    );
+                    lanes.return = returnFiber;
+                    returnFiber = lanes;
+                    break a;
+                  }
+                } else if (
+                  currentFirstChild.elementType === key ||
+                  ("object" === typeof key &&
+                    null !== key &&
+                    key.$$typeof === REACT_LAZY_TYPE &&
+                    resolveLazy(key) === currentFirstChild.type)
+                ) {
+                  deleteRemainingChildren(
+                    returnFiber,
+                    currentFirstChild.sibling
+                  );
+                  lanes = useFiber(currentFirstChild, newChild.props);
+                  coerceRef(lanes, newChild);
+                  lanes.return = returnFiber;
+                  returnFiber = lanes;
+                  break a;
+                }
+                deleteRemainingChildren(returnFiber, currentFirstChild);
+                break;
+              } else deleteChild(returnFiber, currentFirstChild);
+              currentFirstChild = currentFirstChild.sibling;
+            }
+            newChild.type === REACT_FRAGMENT_TYPE
+              ? ((lanes = createFiberFromFragment(
+                  newChild.props.children,
+                  returnFiber.mode,
+                  lanes,
+                  newChild.key
+                )),
+                (lanes.return = returnFiber),
+                (returnFiber = lanes))
+              : ((lanes = createFiberFromTypeAndProps(
+                  newChild.type,
+                  newChild.key,
+                  newChild.props,
+                  null,
+                  returnFiber.mode,
+                  lanes
+                )),
+                coerceRef(lanes, newChild),
+                (lanes.return = returnFiber),
+                (returnFiber = lanes));
+          }
+          return placeSingleChild(returnFiber);
+        case REACT_PORTAL_TYPE:
+          a: {
+            for (key = newChild.key; null !== currentFirstChild; ) {
+              if (currentFirstChild.key === key)
+                if (
+                  4 === currentFirstChild.tag &&
+                  currentFirstChild.stateNode.containerInfo ===
+                    newChild.containerInfo &&
+                  currentFirstChild.stateNode.implementation ===
+                    newChild.implementation
+                ) {
+                  deleteRemainingChildren(
+                    returnFiber,
+                    currentFirstChild.sibling
+                  );
+                  lanes = useFiber(currentFirstChild, newChild.children || []);
+                  lanes.return = returnFiber;
+                  returnFiber = lanes;
+                  break a;
+                } else {
+                  deleteRemainingChildren(returnFiber, currentFirstChild);
+                  break;
+                }
+              else deleteChild(returnFiber, currentFirstChild);
+              currentFirstChild = currentFirstChild.sibling;
+            }
+            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);
+            lanes.return = returnFiber;
+            returnFiber = lanes;
+          }
+          return placeSingleChild(returnFiber);
+        case REACT_LAZY_TYPE:
+          return (
+            (key = newChild._init),
+            (newChild = key(newChild._payload)),
+            reconcileChildFibersImpl(
+              returnFiber,
+              currentFirstChild,
+              newChild,
+              lanes
+            )
+          );
+      }
+      if (isArrayImpl(newChild))
+        return reconcileChildrenArray(
+          returnFiber,
+          currentFirstChild,
+          newChild,
+          lanes
+        );
+      if (getIteratorFn(newChild)) {
+        key = getIteratorFn(newChild);
+        if ("function" !== typeof key) throw Error(formatProdErrorMessage(150));
+        newChild = key.call(newChild);
+        return reconcileChildrenIterator(
+          returnFiber,
+          currentFirstChild,
+          newChild,
+          lanes
+        );
+      }
+      if ("function" === typeof newChild.then)
+        return reconcileChildFibersImpl(
+          returnFiber,
+          currentFirstChild,
+          unwrapThenable(newChild),
+          lanes
+        );
+      if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+        return reconcileChildFibersImpl(
+          returnFiber,
+          currentFirstChild,
+          readContextDuringReconciliation(returnFiber, newChild),
+          lanes
+        );
+      throwOnInvalidObjectType(returnFiber, newChild);
+    }
+    return ("string" === typeof newChild && "" !== newChild) ||
+      "number" === typeof newChild ||
+      "bigint" === typeof newChild
+      ? ((newChild = "" + newChild),
+        null !== currentFirstChild && 6 === currentFirstChild.tag
+          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),
+            (lanes = useFiber(currentFirstChild, newChild)),
+            (lanes.return = returnFiber),
+            (returnFiber = lanes))
+          : (deleteRemainingChildren(returnFiber, currentFirstChild),
+            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),
+            (lanes.return = returnFiber),
+            (returnFiber = lanes)),
+        placeSingleChild(returnFiber))
+      : deleteRemainingChildren(returnFiber, currentFirstChild);
+  }
+  return function (returnFiber, currentFirstChild, newChild, lanes) {
+    try {
+      thenableIndexCounter = 0;
+      var firstChildFiber = reconcileChildFibersImpl(
+        returnFiber,
+        currentFirstChild,
+        newChild,
+        lanes
+      );
+      thenableState = null;
+      return firstChildFiber;
+    } catch (x) {
+      if (x === SuspenseException || x === SuspenseActionException) throw x;
+      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);
+      fiber.lanes = lanes;
+      fiber.return = returnFiber;
+      return fiber;
+    } finally {
+    }
+  };
+}
+var reconcileChildFibers = createChildReconciler(!0),
+  mountChildFibers = createChildReconciler(!1),
+  suspenseHandlerStackCursor = createCursor(null),
+  shellBoundary = null;
+function pushPrimaryTreeSuspenseHandler(handler) {
+  var current = handler.alternate;
+  push(suspenseStackCursor, suspenseStackCursor.current & 1);
+  push(suspenseHandlerStackCursor, handler);
+  null === shellBoundary &&
+    (null === current || null !== currentTreeHiddenStackCursor.current
+      ? (shellBoundary = handler)
+      : null !== current.memoizedState && (shellBoundary = handler));
+}
+function pushOffscreenSuspenseHandler(fiber) {
+  if (22 === fiber.tag) {
+    if (
+      (push(suspenseStackCursor, suspenseStackCursor.current),
+      push(suspenseHandlerStackCursor, fiber),
+      null === shellBoundary)
+    ) {
+      var current = fiber.alternate;
+      null !== current &&
+        null !== current.memoizedState &&
+        (shellBoundary = fiber);
+    }
+  } else reuseSuspenseHandlerOnStack(fiber);
+}
+function reuseSuspenseHandlerOnStack() {
+  push(suspenseStackCursor, suspenseStackCursor.current);
+  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);
+}
+function popSuspenseHandler(fiber) {
+  pop(suspenseHandlerStackCursor);
+  shellBoundary === fiber && (shellBoundary = null);
+  pop(suspenseStackCursor);
+}
+var suspenseStackCursor = createCursor(0);
+function findFirstSuspended(row) {
+  for (var node = row; null !== node; ) {
+    if (13 === node.tag) {
+      var state = node.memoizedState;
+      if (
+        null !== state &&
+        ((state = state.dehydrated),
+        null === state ||
+          "$?" === state.data ||
+          isSuspenseInstanceFallback(state))
+      )
+        return node;
+    } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {
+      if (0 !== (node.flags & 128)) return node;
+    } else if (null !== node.child) {
+      node.child.return = node;
+      node = node.child;
+      continue;
+    }
+    if (node === row) break;
+    for (; null === node.sibling; ) {
+      if (null === node.return || node.return === row) return null;
+      node = node.return;
+    }
+    node.sibling.return = node.return;
+    node = node.sibling;
+  }
+  return null;
+}
+function applyDerivedStateFromProps(
+  workInProgress,
+  ctor,
+  getDerivedStateFromProps,
+  nextProps
+) {
+  ctor = workInProgress.memoizedState;
+  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);
+  getDerivedStateFromProps =
+    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps
+      ? ctor
+      : assign({}, ctor, getDerivedStateFromProps);
+  workInProgress.memoizedState = getDerivedStateFromProps;
+  0 === workInProgress.lanes &&
+    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);
+}
+var classComponentUpdater = {
+  enqueueSetState: function (inst, payload, callback) {
+    inst = inst._reactInternals;
+    var lane = requestUpdateLane(),
+      update = createUpdate(lane);
+    update.payload = payload;
+    void 0 !== callback && null !== callback && (update.callback = callback);
+    payload = enqueueUpdate(inst, update, lane);
+    null !== payload &&
+      (scheduleUpdateOnFiber(payload, inst, lane),
+      entangleTransitions(payload, inst, lane));
+  },
+  enqueueReplaceState: function (inst, payload, callback) {
+    inst = inst._reactInternals;
+    var lane = requestUpdateLane(),
+      update = createUpdate(lane);
+    update.tag = 1;
+    update.payload = payload;
+    void 0 !== callback && null !== callback && (update.callback = callback);
+    payload = enqueueUpdate(inst, update, lane);
+    null !== payload &&
+      (scheduleUpdateOnFiber(payload, inst, lane),
+      entangleTransitions(payload, inst, lane));
+  },
+  enqueueForceUpdate: function (inst, callback) {
+    inst = inst._reactInternals;
+    var lane = requestUpdateLane(),
+      update = createUpdate(lane);
+    update.tag = 2;
+    void 0 !== callback && null !== callback && (update.callback = callback);
+    callback = enqueueUpdate(inst, update, lane);
+    null !== callback &&
+      (scheduleUpdateOnFiber(callback, inst, lane),
+      entangleTransitions(callback, inst, lane));
+  }
+};
+function checkShouldComponentUpdate(
+  workInProgress,
+  ctor,
+  oldProps,
+  newProps,
+  oldState,
+  newState,
+  nextContext
+) {
+  workInProgress = workInProgress.stateNode;
+  return "function" === typeof workInProgress.shouldComponentUpdate
+    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)
+    : ctor.prototype && ctor.prototype.isPureReactComponent
+      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)
+      : !0;
+}
+function callComponentWillReceiveProps(
+  workInProgress,
+  instance,
+  newProps,
+  nextContext
+) {
+  workInProgress = instance.state;
+  "function" === typeof instance.componentWillReceiveProps &&
+    instance.componentWillReceiveProps(newProps, nextContext);
+  "function" === typeof instance.UNSAFE_componentWillReceiveProps &&
+    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);
+  instance.state !== workInProgress &&
+    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);
+}
+function resolveClassComponentProps(Component, baseProps) {
+  var newProps = baseProps;
+  if ("ref" in baseProps) {
+    newProps = {};
+    for (var propName in baseProps)
+      "ref" !== propName && (newProps[propName] = baseProps[propName]);
+  }
+  if ((Component = Component.defaultProps)) {
+    newProps === baseProps && (newProps = assign({}, newProps));
+    for (var propName$73 in Component)
+      void 0 === newProps[propName$73] &&
+        (newProps[propName$73] = Component[propName$73]);
+  }
+  return newProps;
+}
+var reportGlobalError =
+  "function" === typeof reportError
+    ? reportError
+    : function (error) {
+        if (
+          "object" === typeof window &&
+          "function" === typeof window.ErrorEvent
+        ) {
+          var event = new window.ErrorEvent("error", {
+            bubbles: !0,
+            cancelable: !0,
+            message:
+              "object" === typeof error &&
+              null !== error &&
+              "string" === typeof error.message
+                ? String(error.message)
+                : String(error),
+            error: error
+          });
+          if (!window.dispatchEvent(event)) return;
+        } else if (
+          "object" === typeof process &&
+          "function" === typeof process.emit
+        ) {
+          process.emit("uncaughtException", error);
+          return;
+        }
+        console.error(error);
+      };
+function defaultOnUncaughtError(error) {
+  reportGlobalError(error);
+}
+function defaultOnCaughtError(error) {
+  console.error(error);
+}
+function defaultOnRecoverableError(error) {
+  reportGlobalError(error);
+}
+function logUncaughtError(root, errorInfo) {
+  try {
+    var onUncaughtError = root.onUncaughtError;
+    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });
+  } catch (e$74) {
+    setTimeout(function () {
+      throw e$74;
+    });
+  }
+}
+function logCaughtError(root, boundary, errorInfo) {
+  try {
+    var onCaughtError = root.onCaughtError;
+    onCaughtError(errorInfo.value, {
+      componentStack: errorInfo.stack,
+      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null
+    });
+  } catch (e$75) {
+    setTimeout(function () {
+      throw e$75;
+    });
+  }
+}
+function createRootErrorUpdate(root, errorInfo, lane) {
+  lane = createUpdate(lane);
+  lane.tag = 3;
+  lane.payload = { element: null };
+  lane.callback = function () {
+    logUncaughtError(root, errorInfo);
+  };
+  return lane;
+}
+function createClassErrorUpdate(lane) {
+  lane = createUpdate(lane);
+  lane.tag = 3;
+  return lane;
+}
+function initializeClassErrorUpdate(update, root, fiber, errorInfo) {
+  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;
+  if ("function" === typeof getDerivedStateFromError) {
+    var error = errorInfo.value;
+    update.payload = function () {
+      return getDerivedStateFromError(error);
+    };
+    update.callback = function () {
+      logCaughtError(root, fiber, errorInfo);
+    };
+  }
+  var inst = fiber.stateNode;
+  null !== inst &&
+    "function" === typeof inst.componentDidCatch &&
+    (update.callback = function () {
+      logCaughtError(root, fiber, errorInfo);
+      "function" !== typeof getDerivedStateFromError &&
+        (null === legacyErrorBoundariesThatAlreadyFailed
+          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))
+          : legacyErrorBoundariesThatAlreadyFailed.add(this));
+      var stack = errorInfo.stack;
+      this.componentDidCatch(errorInfo.value, {
+        componentStack: null !== stack ? stack : ""
+      });
+    });
+}
+function throwException(
+  root,
+  returnFiber,
+  sourceFiber,
+  value,
+  rootRenderLanes
+) {
+  sourceFiber.flags |= 32768;
+  if (
+    null !== value &&
+    "object" === typeof value &&
+    "function" === typeof value.then
+  ) {
+    returnFiber = sourceFiber.alternate;
+    null !== returnFiber &&
+      propagateParentContextChanges(
+        returnFiber,
+        sourceFiber,
+        rootRenderLanes,
+        !0
+      );
+    sourceFiber = suspenseHandlerStackCursor.current;
+    if (null !== sourceFiber) {
+      switch (sourceFiber.tag) {
+        case 13:
+          return (
+            null === shellBoundary
+              ? renderDidSuspendDelayIfPossible()
+              : null === sourceFiber.alternate &&
+                0 === workInProgressRootExitStatus &&
+                (workInProgressRootExitStatus = 3),
+            (sourceFiber.flags &= -257),
+            (sourceFiber.flags |= 65536),
+            (sourceFiber.lanes = rootRenderLanes),
+            value === noopSuspenseyCommitThenable
+              ? (sourceFiber.flags |= 16384)
+              : ((returnFiber = sourceFiber.updateQueue),
+                null === returnFiber
+                  ? (sourceFiber.updateQueue = new Set([value]))
+                  : returnFiber.add(value),
+                attachPingListener(root, value, rootRenderLanes)),
+            !1
+          );
+        case 22:
+          return (
+            (sourceFiber.flags |= 65536),
+            value === noopSuspenseyCommitThenable
+              ? (sourceFiber.flags |= 16384)
+              : ((returnFiber = sourceFiber.updateQueue),
+                null === returnFiber
+                  ? ((returnFiber = {
+                      transitions: null,
+                      markerInstances: null,
+                      retryQueue: new Set([value])
+                    }),
+                    (sourceFiber.updateQueue = returnFiber))
+                  : ((sourceFiber = returnFiber.retryQueue),
+                    null === sourceFiber
+                      ? (returnFiber.retryQueue = new Set([value]))
+                      : sourceFiber.add(value)),
+                attachPingListener(root, value, rootRenderLanes)),
+            !1
+          );
+      }
+      throw Error(formatProdErrorMessage(435, sourceFiber.tag));
+    }
+    attachPingListener(root, value, rootRenderLanes);
+    renderDidSuspendDelayIfPossible();
+    return !1;
+  }
+  if (isHydrating)
+    return (
+      (returnFiber = suspenseHandlerStackCursor.current),
+      null !== returnFiber
+        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),
+          (returnFiber.flags |= 65536),
+          (returnFiber.lanes = rootRenderLanes),
+          value !== HydrationMismatchException &&
+            ((root = Error(formatProdErrorMessage(422), { cause: value })),
+            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))
+        : (value !== HydrationMismatchException &&
+            ((returnFiber = Error(formatProdErrorMessage(423), {
+              cause: value
+            })),
+            queueHydrationError(
+              createCapturedValueAtFiber(returnFiber, sourceFiber)
+            )),
+          (root = root.current.alternate),
+          (root.flags |= 65536),
+          (rootRenderLanes &= -rootRenderLanes),
+          (root.lanes |= rootRenderLanes),
+          (value = createCapturedValueAtFiber(value, sourceFiber)),
+          (rootRenderLanes = createRootErrorUpdate(
+            root.stateNode,
+            value,
+            rootRenderLanes
+          )),
+          enqueueCapturedUpdate(root, rootRenderLanes),
+          4 !== workInProgressRootExitStatus &&
+            (workInProgressRootExitStatus = 2)),
+      !1
+    );
+  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });
+  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);
+  null === workInProgressRootConcurrentErrors
+    ? (workInProgressRootConcurrentErrors = [wrapperError])
+    : workInProgressRootConcurrentErrors.push(wrapperError);
+  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);
+  if (null === returnFiber) return !0;
+  value = createCapturedValueAtFiber(value, sourceFiber);
+  sourceFiber = returnFiber;
+  do {
+    switch (sourceFiber.tag) {
+      case 3:
+        return (
+          (sourceFiber.flags |= 65536),
+          (root = rootRenderLanes & -rootRenderLanes),
+          (sourceFiber.lanes |= root),
+          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),
+          enqueueCapturedUpdate(sourceFiber, root),
+          !1
+        );
+      case 1:
+        if (
+          ((returnFiber = sourceFiber.type),
+          (wrapperError = sourceFiber.stateNode),
+          0 === (sourceFiber.flags & 128) &&
+            ("function" === typeof returnFiber.getDerivedStateFromError ||
+              (null !== wrapperError &&
+                "function" === typeof wrapperError.componentDidCatch &&
+                (null === legacyErrorBoundariesThatAlreadyFailed ||
+                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))
+        )
+          return (
+            (sourceFiber.flags |= 65536),
+            (rootRenderLanes &= -rootRenderLanes),
+            (sourceFiber.lanes |= rootRenderLanes),
+            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),
+            initializeClassErrorUpdate(
+              rootRenderLanes,
+              root,
+              sourceFiber,
+              value
+            ),
+            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),
+            !1
+          );
+    }
+    sourceFiber = sourceFiber.return;
+  } while (null !== sourceFiber);
+  return !1;
+}
+var SelectiveHydrationException = Error(formatProdErrorMessage(461)),
+  didReceiveUpdate = !1;
+function reconcileChildren(current, workInProgress, nextChildren, renderLanes) {
+  workInProgress.child =
+    null === current
+      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)
+      : reconcileChildFibers(
+          workInProgress,
+          current.child,
+          nextChildren,
+          renderLanes
+        );
+}
+function updateForwardRef(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  Component = Component.render;
+  var ref = workInProgress.ref;
+  if ("ref" in nextProps) {
+    var propsWithoutRef = {};
+    for (var key in nextProps)
+      "ref" !== key && (propsWithoutRef[key] = nextProps[key]);
+  } else propsWithoutRef = nextProps;
+  prepareToReadContext(workInProgress);
+  nextProps = renderWithHooks(
+    current,
+    workInProgress,
+    Component,
+    propsWithoutRef,
+    ref,
+    renderLanes
+  );
+  key = checkDidRenderIdHook();
+  if (null !== current && !didReceiveUpdate)
+    return (
+      bailoutHooks(current, workInProgress, renderLanes),
+      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+    );
+  isHydrating && key && pushMaterializedTreeId(workInProgress);
+  workInProgress.flags |= 1;
+  reconcileChildren(current, workInProgress, nextProps, renderLanes);
+  return workInProgress.child;
+}
+function updateMemoComponent(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  if (null === current) {
+    var type = Component.type;
+    if (
+      "function" === typeof type &&
+      !shouldConstruct(type) &&
+      void 0 === type.defaultProps &&
+      null === Component.compare
+    )
+      return (
+        (workInProgress.tag = 15),
+        (workInProgress.type = type),
+        updateSimpleMemoComponent(
+          current,
+          workInProgress,
+          type,
+          nextProps,
+          renderLanes
+        )
+      );
+    current = createFiberFromTypeAndProps(
+      Component.type,
+      null,
+      nextProps,
+      workInProgress,
+      workInProgress.mode,
+      renderLanes
+    );
+    current.ref = workInProgress.ref;
+    current.return = workInProgress;
+    return (workInProgress.child = current);
+  }
+  type = current.child;
+  if (!checkScheduledUpdateOrContext(current, renderLanes)) {
+    var prevProps = type.memoizedProps;
+    Component = Component.compare;
+    Component = null !== Component ? Component : shallowEqual;
+    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)
+      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
+  }
+  workInProgress.flags |= 1;
+  current = createWorkInProgress(type, nextProps);
+  current.ref = workInProgress.ref;
+  current.return = workInProgress;
+  return (workInProgress.child = current);
+}
+function updateSimpleMemoComponent(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  if (null !== current) {
+    var prevProps = current.memoizedProps;
+    if (
+      shallowEqual(prevProps, nextProps) &&
+      current.ref === workInProgress.ref
+    )
+      if (
+        ((didReceiveUpdate = !1),
+        (workInProgress.pendingProps = nextProps = prevProps),
+        checkScheduledUpdateOrContext(current, renderLanes))
+      )
+        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);
+      else
+        return (
+          (workInProgress.lanes = current.lanes),
+          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+        );
+  }
+  return updateFunctionComponent(
+    current,
+    workInProgress,
+    Component,
+    nextProps,
+    renderLanes
+  );
+}
+function updateOffscreenComponent(current, workInProgress, renderLanes) {
+  var nextProps = workInProgress.pendingProps,
+    nextChildren = nextProps.children,
+    prevState = null !== current ? current.memoizedState : null;
+  if ("hidden" === nextProps.mode) {
+    if (0 !== (workInProgress.flags & 128)) {
+      nextProps =
+        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;
+      if (null !== current) {
+        nextChildren = workInProgress.child = current.child;
+        for (prevState = 0; null !== nextChildren; )
+          (prevState =
+            prevState | nextChildren.lanes | nextChildren.childLanes),
+            (nextChildren = nextChildren.sibling);
+        workInProgress.childLanes = prevState & ~nextProps;
+      } else (workInProgress.childLanes = 0), (workInProgress.child = null);
+      return deferHiddenOffscreenComponent(
+        current,
+        workInProgress,
+        nextProps,
+        renderLanes
+      );
+    }
+    if (0 !== (renderLanes & 536870912))
+      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),
+        null !== current &&
+          pushTransition(
+            workInProgress,
+            null !== prevState ? prevState.cachePool : null
+          ),
+        null !== prevState
+          ? pushHiddenContext(workInProgress, prevState)
+          : reuseHiddenContextOnStack(),
+        pushOffscreenSuspenseHandler(workInProgress);
+    else
+      return (
+        (workInProgress.lanes = workInProgress.childLanes = 536870912),
+        deferHiddenOffscreenComponent(
+          current,
+          workInProgress,
+          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,
+          renderLanes
+        )
+      );
+  } else
+    null !== prevState
+      ? (pushTransition(workInProgress, prevState.cachePool),
+        pushHiddenContext(workInProgress, prevState),
+        reuseSuspenseHandlerOnStack(workInProgress),
+        (workInProgress.memoizedState = null))
+      : (null !== current && pushTransition(workInProgress, null),
+        reuseHiddenContextOnStack(),
+        reuseSuspenseHandlerOnStack(workInProgress));
+  reconcileChildren(current, workInProgress, nextChildren, renderLanes);
+  return workInProgress.child;
+}
+function deferHiddenOffscreenComponent(
+  current,
+  workInProgress,
+  nextBaseLanes,
+  renderLanes
+) {
+  var JSCompiler_inline_result = peekCacheFromPool();
+  JSCompiler_inline_result =
+    null === JSCompiler_inline_result
+      ? null
+      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };
+  workInProgress.memoizedState = {
+    baseLanes: nextBaseLanes,
+    cachePool: JSCompiler_inline_result
+  };
+  null !== current && pushTransition(workInProgress, null);
+  reuseHiddenContextOnStack();
+  pushOffscreenSuspenseHandler(workInProgress);
+  null !== current &&
+    propagateParentContextChanges(current, workInProgress, renderLanes, !0);
+  return null;
+}
+function markRef(current, workInProgress) {
+  var ref = workInProgress.ref;
+  if (null === ref)
+    null !== current &&
+      null !== current.ref &&
+      (workInProgress.flags |= 4194816);
+  else {
+    if ("function" !== typeof ref && "object" !== typeof ref)
+      throw Error(formatProdErrorMessage(284));
+    if (null === current || current.ref !== ref)
+      workInProgress.flags |= 4194816;
+  }
+}
+function updateFunctionComponent(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  prepareToReadContext(workInProgress);
+  Component = renderWithHooks(
+    current,
+    workInProgress,
+    Component,
+    nextProps,
+    void 0,
+    renderLanes
+  );
+  nextProps = checkDidRenderIdHook();
+  if (null !== current && !didReceiveUpdate)
+    return (
+      bailoutHooks(current, workInProgress, renderLanes),
+      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+    );
+  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);
+  workInProgress.flags |= 1;
+  reconcileChildren(current, workInProgress, Component, renderLanes);
+  return workInProgress.child;
+}
+function replayFunctionComponent(
+  current,
+  workInProgress,
+  nextProps,
+  Component,
+  secondArg,
+  renderLanes
+) {
+  prepareToReadContext(workInProgress);
+  workInProgress.updateQueue = null;
+  nextProps = renderWithHooksAgain(
+    workInProgress,
+    Component,
+    nextProps,
+    secondArg
+  );
+  finishRenderingHooks(current);
+  Component = checkDidRenderIdHook();
+  if (null !== current && !didReceiveUpdate)
+    return (
+      bailoutHooks(current, workInProgress, renderLanes),
+      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+    );
+  isHydrating && Component && pushMaterializedTreeId(workInProgress);
+  workInProgress.flags |= 1;
+  reconcileChildren(current, workInProgress, nextProps, renderLanes);
+  return workInProgress.child;
+}
+function updateClassComponent(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  prepareToReadContext(workInProgress);
+  if (null === workInProgress.stateNode) {
+    var context = emptyContextObject,
+      contextType = Component.contextType;
+    "object" === typeof contextType &&
+      null !== contextType &&
+      (context = readContext(contextType));
+    context = new Component(nextProps, context);
+    workInProgress.memoizedState =
+      null !== context.state && void 0 !== context.state ? context.state : null;
+    context.updater = classComponentUpdater;
+    workInProgress.stateNode = context;
+    context._reactInternals = workInProgress;
+    context = workInProgress.stateNode;
+    context.props = nextProps;
+    context.state = workInProgress.memoizedState;
+    context.refs = {};
+    initializeUpdateQueue(workInProgress);
+    contextType = Component.contextType;
+    context.context =
+      "object" === typeof contextType && null !== contextType
+        ? readContext(contextType)
+        : emptyContextObject;
+    context.state = workInProgress.memoizedState;
+    contextType = Component.getDerivedStateFromProps;
+    "function" === typeof contextType &&
+      (applyDerivedStateFromProps(
+        workInProgress,
+        Component,
+        contextType,
+        nextProps
+      ),
+      (context.state = workInProgress.memoizedState));
+    "function" === typeof Component.getDerivedStateFromProps ||
+      "function" === typeof context.getSnapshotBeforeUpdate ||
+      ("function" !== typeof context.UNSAFE_componentWillMount &&
+        "function" !== typeof context.componentWillMount) ||
+      ((contextType = context.state),
+      "function" === typeof context.componentWillMount &&
+        context.componentWillMount(),
+      "function" === typeof context.UNSAFE_componentWillMount &&
+        context.UNSAFE_componentWillMount(),
+      contextType !== context.state &&
+        classComponentUpdater.enqueueReplaceState(context, context.state, null),
+      processUpdateQueue(workInProgress, nextProps, context, renderLanes),
+      suspendIfUpdateReadFromEntangledAsyncAction(),
+      (context.state = workInProgress.memoizedState));
+    "function" === typeof context.componentDidMount &&
+      (workInProgress.flags |= 4194308);
+    nextProps = !0;
+  } else if (null === current) {
+    context = workInProgress.stateNode;
+    var unresolvedOldProps = workInProgress.memoizedProps,
+      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);
+    context.props = oldProps;
+    var oldContext = context.context,
+      contextType$jscomp$0 = Component.contextType;
+    contextType = emptyContextObject;
+    "object" === typeof contextType$jscomp$0 &&
+      null !== contextType$jscomp$0 &&
+      (contextType = readContext(contextType$jscomp$0));
+    var getDerivedStateFromProps = Component.getDerivedStateFromProps;
+    contextType$jscomp$0 =
+      "function" === typeof getDerivedStateFromProps ||
+      "function" === typeof context.getSnapshotBeforeUpdate;
+    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;
+    contextType$jscomp$0 ||
+      ("function" !== typeof context.UNSAFE_componentWillReceiveProps &&
+        "function" !== typeof context.componentWillReceiveProps) ||
+      ((unresolvedOldProps || oldContext !== contextType) &&
+        callComponentWillReceiveProps(
+          workInProgress,
+          context,
+          nextProps,
+          contextType
+        ));
+    hasForceUpdate = !1;
+    var oldState = workInProgress.memoizedState;
+    context.state = oldState;
+    processUpdateQueue(workInProgress, nextProps, context, renderLanes);
+    suspendIfUpdateReadFromEntangledAsyncAction();
+    oldContext = workInProgress.memoizedState;
+    unresolvedOldProps || oldState !== oldContext || hasForceUpdate
+      ? ("function" === typeof getDerivedStateFromProps &&
+          (applyDerivedStateFromProps(
+            workInProgress,
+            Component,
+            getDerivedStateFromProps,
+            nextProps
+          ),
+          (oldContext = workInProgress.memoizedState)),
+        (oldProps =
+          hasForceUpdate ||
+          checkShouldComponentUpdate(
+            workInProgress,
+            Component,
+            oldProps,
+            nextProps,
+            oldState,
+            oldContext,
+            contextType
+          ))
+          ? (contextType$jscomp$0 ||
+              ("function" !== typeof context.UNSAFE_componentWillMount &&
+                "function" !== typeof context.componentWillMount) ||
+              ("function" === typeof context.componentWillMount &&
+                context.componentWillMount(),
+              "function" === typeof context.UNSAFE_componentWillMount &&
+                context.UNSAFE_componentWillMount()),
+            "function" === typeof context.componentDidMount &&
+              (workInProgress.flags |= 4194308))
+          : ("function" === typeof context.componentDidMount &&
+              (workInProgress.flags |= 4194308),
+            (workInProgress.memoizedProps = nextProps),
+            (workInProgress.memoizedState = oldContext)),
+        (context.props = nextProps),
+        (context.state = oldContext),
+        (context.context = contextType),
+        (nextProps = oldProps))
+      : ("function" === typeof context.componentDidMount &&
+          (workInProgress.flags |= 4194308),
+        (nextProps = !1));
+  } else {
+    context = workInProgress.stateNode;
+    cloneUpdateQueue(current, workInProgress);
+    contextType = workInProgress.memoizedProps;
+    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);
+    context.props = contextType$jscomp$0;
+    getDerivedStateFromProps = workInProgress.pendingProps;
+    oldState = context.context;
+    oldContext = Component.contextType;
+    oldProps = emptyContextObject;
+    "object" === typeof oldContext &&
+      null !== oldContext &&
+      (oldProps = readContext(oldContext));
+    unresolvedOldProps = Component.getDerivedStateFromProps;
+    (oldContext =
+      "function" === typeof unresolvedOldProps ||
+      "function" === typeof context.getSnapshotBeforeUpdate) ||
+      ("function" !== typeof context.UNSAFE_componentWillReceiveProps &&
+        "function" !== typeof context.componentWillReceiveProps) ||
+      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&
+        callComponentWillReceiveProps(
+          workInProgress,
+          context,
+          nextProps,
+          oldProps
+        ));
+    hasForceUpdate = !1;
+    oldState = workInProgress.memoizedState;
+    context.state = oldState;
+    processUpdateQueue(workInProgress, nextProps, context, renderLanes);
+    suspendIfUpdateReadFromEntangledAsyncAction();
+    var newState = workInProgress.memoizedState;
+    contextType !== getDerivedStateFromProps ||
+    oldState !== newState ||
+    hasForceUpdate ||
+    (null !== current &&
+      null !== current.dependencies &&
+      checkIfContextChanged(current.dependencies))
+      ? ("function" === typeof unresolvedOldProps &&
+          (applyDerivedStateFromProps(
+            workInProgress,
+            Component,
+            unresolvedOldProps,
+            nextProps
+          ),
+          (newState = workInProgress.memoizedState)),
+        (contextType$jscomp$0 =
+          hasForceUpdate ||
+          checkShouldComponentUpdate(
+            workInProgress,
+            Component,
+            contextType$jscomp$0,
+            nextProps,
+            oldState,
+            newState,
+            oldProps
+          ) ||
+          (null !== current &&
+            null !== current.dependencies &&
+            checkIfContextChanged(current.dependencies)))
+          ? (oldContext ||
+              ("function" !== typeof context.UNSAFE_componentWillUpdate &&
+                "function" !== typeof context.componentWillUpdate) ||
+              ("function" === typeof context.componentWillUpdate &&
+                context.componentWillUpdate(nextProps, newState, oldProps),
+              "function" === typeof context.UNSAFE_componentWillUpdate &&
+                context.UNSAFE_componentWillUpdate(
+                  nextProps,
+                  newState,
+                  oldProps
+                )),
+            "function" === typeof context.componentDidUpdate &&
+              (workInProgress.flags |= 4),
+            "function" === typeof context.getSnapshotBeforeUpdate &&
+              (workInProgress.flags |= 1024))
+          : ("function" !== typeof context.componentDidUpdate ||
+              (contextType === current.memoizedProps &&
+                oldState === current.memoizedState) ||
+              (workInProgress.flags |= 4),
+            "function" !== typeof context.getSnapshotBeforeUpdate ||
+              (contextType === current.memoizedProps &&
+                oldState === current.memoizedState) ||
+              (workInProgress.flags |= 1024),
+            (workInProgress.memoizedProps = nextProps),
+            (workInProgress.memoizedState = newState)),
+        (context.props = nextProps),
+        (context.state = newState),
+        (context.context = oldProps),
+        (nextProps = contextType$jscomp$0))
+      : ("function" !== typeof context.componentDidUpdate ||
+          (contextType === current.memoizedProps &&
+            oldState === current.memoizedState) ||
+          (workInProgress.flags |= 4),
+        "function" !== typeof context.getSnapshotBeforeUpdate ||
+          (contextType === current.memoizedProps &&
+            oldState === current.memoizedState) ||
+          (workInProgress.flags |= 1024),
+        (nextProps = !1));
+  }
+  context = nextProps;
+  markRef(current, workInProgress);
+  nextProps = 0 !== (workInProgress.flags & 128);
+  context || nextProps
+    ? ((context = workInProgress.stateNode),
+      (Component =
+        nextProps && "function" !== typeof Component.getDerivedStateFromError
+          ? null
+          : context.render()),
+      (workInProgress.flags |= 1),
+      null !== current && nextProps
+        ? ((workInProgress.child = reconcileChildFibers(
+            workInProgress,
+            current.child,
+            null,
+            renderLanes
+          )),
+          (workInProgress.child = reconcileChildFibers(
+            workInProgress,
+            null,
+            Component,
+            renderLanes
+          )))
+        : reconcileChildren(current, workInProgress, Component, renderLanes),
+      (workInProgress.memoizedState = context.state),
+      (current = workInProgress.child))
+    : (current = bailoutOnAlreadyFinishedWork(
+        current,
+        workInProgress,
+        renderLanes
+      ));
+  return current;
+}
+function mountHostRootWithoutHydrating(
+  current,
+  workInProgress,
+  nextChildren,
+  renderLanes
+) {
+  resetHydrationState();
+  workInProgress.flags |= 256;
+  reconcileChildren(current, workInProgress, nextChildren, renderLanes);
+  return workInProgress.child;
+}
+var SUSPENDED_MARKER = {
+  dehydrated: null,
+  treeContext: null,
+  retryLane: 0,
+  hydrationErrors: null
+};
+function mountSuspenseOffscreenState(renderLanes) {
+  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };
+}
+function getRemainingWorkInPrimaryTree(
+  current,
+  primaryTreeDidDefer,
+  renderLanes
+) {
+  current = null !== current ? current.childLanes & ~renderLanes : 0;
+  primaryTreeDidDefer && (current |= workInProgressDeferredLane);
+  return current;
+}
+function updateSuspenseComponent(current, workInProgress, renderLanes) {
+  var nextProps = workInProgress.pendingProps,
+    showFallback = !1,
+    didSuspend = 0 !== (workInProgress.flags & 128),
+    JSCompiler_temp;
+  (JSCompiler_temp = didSuspend) ||
+    (JSCompiler_temp =
+      null !== current && null === current.memoizedState
+        ? !1
+        : 0 !== (suspenseStackCursor.current & 2));
+  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));
+  JSCompiler_temp = 0 !== (workInProgress.flags & 32);
+  workInProgress.flags &= -33;
+  if (null === current) {
+    if (isHydrating) {
+      showFallback
+        ? pushPrimaryTreeSuspenseHandler(workInProgress)
+        : reuseSuspenseHandlerOnStack(workInProgress);
+      if (isHydrating) {
+        var nextInstance = nextHydratableInstance,
+          JSCompiler_temp$jscomp$0;
+        if ((JSCompiler_temp$jscomp$0 = nextInstance)) {
+          c: {
+            JSCompiler_temp$jscomp$0 = nextInstance;
+            for (
+              nextInstance = rootOrSingletonContext;
+              8 !== JSCompiler_temp$jscomp$0.nodeType;
+
+            ) {
+              if (!nextInstance) {
+                nextInstance = null;
+                break c;
+              }
+              JSCompiler_temp$jscomp$0 = getNextHydratable(
+                JSCompiler_temp$jscomp$0.nextSibling
+              );
+              if (null === JSCompiler_temp$jscomp$0) {
+                nextInstance = null;
+                break c;
+              }
+            }
+            nextInstance = JSCompiler_temp$jscomp$0;
+          }
+          null !== nextInstance
+            ? ((workInProgress.memoizedState = {
+                dehydrated: nextInstance,
+                treeContext:
+                  null !== treeContextProvider
+                    ? { id: treeContextId, overflow: treeContextOverflow }
+                    : null,
+                retryLane: 536870912,
+                hydrationErrors: null
+              }),
+              (JSCompiler_temp$jscomp$0 = createFiberImplClass(
+                18,
+                null,
+                null,
+                0
+              )),
+              (JSCompiler_temp$jscomp$0.stateNode = nextInstance),
+              (JSCompiler_temp$jscomp$0.return = workInProgress),
+              (workInProgress.child = JSCompiler_temp$jscomp$0),
+              (hydrationParentFiber = workInProgress),
+              (nextHydratableInstance = null),
+              (JSCompiler_temp$jscomp$0 = !0))
+            : (JSCompiler_temp$jscomp$0 = !1);
+        }
+        JSCompiler_temp$jscomp$0 || throwOnHydrationMismatch(workInProgress);
+      }
+      nextInstance = workInProgress.memoizedState;
+      if (
+        null !== nextInstance &&
+        ((nextInstance = nextInstance.dehydrated), null !== nextInstance)
+      )
+        return (
+          isSuspenseInstanceFallback(nextInstance)
+            ? (workInProgress.lanes = 32)
+            : (workInProgress.lanes = 536870912),
+          null
+        );
+      popSuspenseHandler(workInProgress);
+    }
+    nextInstance = nextProps.children;
+    nextProps = nextProps.fallback;
+    if (showFallback)
+      return (
+        reuseSuspenseHandlerOnStack(workInProgress),
+        (showFallback = workInProgress.mode),
+        (nextInstance = mountWorkInProgressOffscreenFiber(
+          { mode: "hidden", children: nextInstance },
+          showFallback
+        )),
+        (nextProps = createFiberFromFragment(
+          nextProps,
+          showFallback,
+          renderLanes,
+          null
+        )),
+        (nextInstance.return = workInProgress),
+        (nextProps.return = workInProgress),
+        (nextInstance.sibling = nextProps),
+        (workInProgress.child = nextInstance),
+        (showFallback = workInProgress.child),
+        (showFallback.memoizedState = mountSuspenseOffscreenState(renderLanes)),
+        (showFallback.childLanes = getRemainingWorkInPrimaryTree(
+          current,
+          JSCompiler_temp,
+          renderLanes
+        )),
+        (workInProgress.memoizedState = SUSPENDED_MARKER),
+        nextProps
+      );
+    pushPrimaryTreeSuspenseHandler(workInProgress);
+    return mountSuspensePrimaryChildren(workInProgress, nextInstance);
+  }
+  JSCompiler_temp$jscomp$0 = current.memoizedState;
+  if (
+    null !== JSCompiler_temp$jscomp$0 &&
+    ((nextInstance = JSCompiler_temp$jscomp$0.dehydrated),
+    null !== nextInstance)
+  ) {
+    if (didSuspend)
+      workInProgress.flags & 256
+        ? (pushPrimaryTreeSuspenseHandler(workInProgress),
+          (workInProgress.flags &= -257),
+          (workInProgress = retrySuspenseComponentWithoutHydrating(
+            current,
+            workInProgress,
+            renderLanes
+          )))
+        : null !== workInProgress.memoizedState
+          ? (reuseSuspenseHandlerOnStack(workInProgress),
+            (workInProgress.child = current.child),
+            (workInProgress.flags |= 128),
+            (workInProgress = null))
+          : (reuseSuspenseHandlerOnStack(workInProgress),
+            (showFallback = nextProps.fallback),
+            (nextInstance = workInProgress.mode),
+            (nextProps = mountWorkInProgressOffscreenFiber(
+              { mode: "visible", children: nextProps.children },
+              nextInstance
+            )),
+            (showFallback = createFiberFromFragment(
+              showFallback,
+              nextInstance,
+              renderLanes,
+              null
+            )),
+            (showFallback.flags |= 2),
+            (nextProps.return = workInProgress),
+            (showFallback.return = workInProgress),
+            (nextProps.sibling = showFallback),
+            (workInProgress.child = nextProps),
+            reconcileChildFibers(
+              workInProgress,
+              current.child,
+              null,
+              renderLanes
+            ),
+            (nextProps = workInProgress.child),
+            (nextProps.memoizedState =
+              mountSuspenseOffscreenState(renderLanes)),
+            (nextProps.childLanes = getRemainingWorkInPrimaryTree(
+              current,
+              JSCompiler_temp,
+              renderLanes
+            )),
+            (workInProgress.memoizedState = SUSPENDED_MARKER),
+            (workInProgress = showFallback));
+    else if (
+      (pushPrimaryTreeSuspenseHandler(workInProgress),
+      isSuspenseInstanceFallback(nextInstance))
+    ) {
+      JSCompiler_temp =
+        nextInstance.nextSibling && nextInstance.nextSibling.dataset;
+      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;
+      JSCompiler_temp = digest;
+      nextProps = Error(formatProdErrorMessage(419));
+      nextProps.stack = "";
+      nextProps.digest = JSCompiler_temp;
+      queueHydrationError({ value: nextProps, source: null, stack: null });
+      workInProgress = retrySuspenseComponentWithoutHydrating(
+        current,
+        workInProgress,
+        renderLanes
+      );
+    } else if (
+      (didReceiveUpdate ||
+        propagateParentContextChanges(current, workInProgress, renderLanes, !1),
+      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),
+      didReceiveUpdate || JSCompiler_temp)
+    ) {
+      JSCompiler_temp = workInProgressRoot;
+      if (
+        null !== JSCompiler_temp &&
+        ((nextProps = renderLanes & -renderLanes),
+        (nextProps =
+          0 !== (nextProps & 42)
+            ? 1
+            : getBumpedLaneForHydrationByLane(nextProps)),
+        (nextProps =
+          0 !== (nextProps & (JSCompiler_temp.suspendedLanes | renderLanes))
+            ? 0
+            : nextProps),
+        0 !== nextProps && nextProps !== JSCompiler_temp$jscomp$0.retryLane)
+      )
+        throw (
+          ((JSCompiler_temp$jscomp$0.retryLane = nextProps),
+          enqueueConcurrentRenderForLane(current, nextProps),
+          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),
+          SelectiveHydrationException)
+        );
+      "$?" === nextInstance.data || renderDidSuspendDelayIfPossible();
+      workInProgress = retrySuspenseComponentWithoutHydrating(
+        current,
+        workInProgress,
+        renderLanes
+      );
+    } else
+      "$?" === nextInstance.data
+        ? ((workInProgress.flags |= 192),
+          (workInProgress.child = current.child),
+          (workInProgress = null))
+        : ((current = JSCompiler_temp$jscomp$0.treeContext),
+          (nextHydratableInstance = getNextHydratable(
+            nextInstance.nextSibling
+          )),
+          (hydrationParentFiber = workInProgress),
+          (isHydrating = !0),
+          (hydrationErrors = null),
+          (rootOrSingletonContext = !1),
+          null !== current &&
+            ((idStack[idStackIndex++] = treeContextId),
+            (idStack[idStackIndex++] = treeContextOverflow),
+            (idStack[idStackIndex++] = treeContextProvider),
+            (treeContextId = current.id),
+            (treeContextOverflow = current.overflow),
+            (treeContextProvider = workInProgress)),
+          (workInProgress = mountSuspensePrimaryChildren(
+            workInProgress,
+            nextProps.children
+          )),
+          (workInProgress.flags |= 4096));
+    return workInProgress;
+  }
+  if (showFallback)
+    return (
+      reuseSuspenseHandlerOnStack(workInProgress),
+      (showFallback = nextProps.fallback),
+      (nextInstance = workInProgress.mode),
+      (JSCompiler_temp$jscomp$0 = current.child),
+      (digest = JSCompiler_temp$jscomp$0.sibling),
+      (nextProps = createWorkInProgress(JSCompiler_temp$jscomp$0, {
+        mode: "hidden",
+        children: nextProps.children
+      })),
+      (nextProps.subtreeFlags =
+        JSCompiler_temp$jscomp$0.subtreeFlags & 65011712),
+      null !== digest
+        ? (showFallback = createWorkInProgress(digest, showFallback))
+        : ((showFallback = createFiberFromFragment(
+            showFallback,
+            nextInstance,
+            renderLanes,
+            null
+          )),
+          (showFallback.flags |= 2)),
+      (showFallback.return = workInProgress),
+      (nextProps.return = workInProgress),
+      (nextProps.sibling = showFallback),
+      (workInProgress.child = nextProps),
+      (nextProps = showFallback),
+      (showFallback = workInProgress.child),
+      (nextInstance = current.child.memoizedState),
+      null === nextInstance
+        ? (nextInstance = mountSuspenseOffscreenState(renderLanes))
+        : ((JSCompiler_temp$jscomp$0 = nextInstance.cachePool),
+          null !== JSCompiler_temp$jscomp$0
+            ? ((digest = CacheContext._currentValue),
+              (JSCompiler_temp$jscomp$0 =
+                JSCompiler_temp$jscomp$0.parent !== digest
+                  ? { parent: digest, pool: digest }
+                  : JSCompiler_temp$jscomp$0))
+            : (JSCompiler_temp$jscomp$0 = getSuspendedCache()),
+          (nextInstance = {
+            baseLanes: nextInstance.baseLanes | renderLanes,
+            cachePool: JSCompiler_temp$jscomp$0
+          })),
+      (showFallback.memoizedState = nextInstance),
+      (showFallback.childLanes = getRemainingWorkInPrimaryTree(
+        current,
+        JSCompiler_temp,
+        renderLanes
+      )),
+      (workInProgress.memoizedState = SUSPENDED_MARKER),
+      nextProps
+    );
+  pushPrimaryTreeSuspenseHandler(workInProgress);
+  renderLanes = current.child;
+  current = renderLanes.sibling;
+  renderLanes = createWorkInProgress(renderLanes, {
+    mode: "visible",
+    children: nextProps.children
+  });
+  renderLanes.return = workInProgress;
+  renderLanes.sibling = null;
+  null !== current &&
+    ((JSCompiler_temp = workInProgress.deletions),
+    null === JSCompiler_temp
+      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))
+      : JSCompiler_temp.push(current));
+  workInProgress.child = renderLanes;
+  workInProgress.memoizedState = null;
+  return renderLanes;
+}
+function mountSuspensePrimaryChildren(workInProgress, primaryChildren) {
+  primaryChildren = mountWorkInProgressOffscreenFiber(
+    { mode: "visible", children: primaryChildren },
+    workInProgress.mode
+  );
+  primaryChildren.return = workInProgress;
+  return (workInProgress.child = primaryChildren);
+}
+function mountWorkInProgressOffscreenFiber(offscreenProps, mode) {
+  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);
+  offscreenProps.lanes = 0;
+  offscreenProps.stateNode = {
+    _visibility: 1,
+    _pendingMarkers: null,
+    _retryCache: null,
+    _transitions: null
+  };
+  return offscreenProps;
+}
+function retrySuspenseComponentWithoutHydrating(
+  current,
+  workInProgress,
+  renderLanes
+) {
+  reconcileChildFibers(workInProgress, current.child, null, renderLanes);
+  current = mountSuspensePrimaryChildren(
+    workInProgress,
+    workInProgress.pendingProps.children
+  );
+  current.flags |= 2;
+  workInProgress.memoizedState = null;
+  return current;
+}
+function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {
+  fiber.lanes |= renderLanes;
+  var alternate = fiber.alternate;
+  null !== alternate && (alternate.lanes |= renderLanes);
+  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);
+}
+function initSuspenseListRenderState(
+  workInProgress,
+  isBackwards,
+  tail,
+  lastContentRow,
+  tailMode
+) {
+  var renderState = workInProgress.memoizedState;
+  null === renderState
+    ? (workInProgress.memoizedState = {
+        isBackwards: isBackwards,
+        rendering: null,
+        renderingStartTime: 0,
+        last: lastContentRow,
+        tail: tail,
+        tailMode: tailMode
+      })
+    : ((renderState.isBackwards = isBackwards),
+      (renderState.rendering = null),
+      (renderState.renderingStartTime = 0),
+      (renderState.last = lastContentRow),
+      (renderState.tail = tail),
+      (renderState.tailMode = tailMode));
+}
+function updateSuspenseListComponent(current, workInProgress, renderLanes) {
+  var nextProps = workInProgress.pendingProps,
+    revealOrder = nextProps.revealOrder,
+    tailMode = nextProps.tail;
+  reconcileChildren(current, workInProgress, nextProps.children, renderLanes);
+  nextProps = suspenseStackCursor.current;
+  if (0 !== (nextProps & 2))
+    (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);
+  else {
+    if (null !== current && 0 !== (current.flags & 128))
+      a: for (current = workInProgress.child; null !== current; ) {
+        if (13 === current.tag)
+          null !== current.memoizedState &&
+            scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);
+        else if (19 === current.tag)
+          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);
+        else if (null !== current.child) {
+          current.child.return = current;
+          current = current.child;
+          continue;
+        }
+        if (current === workInProgress) break a;
+        for (; null === current.sibling; ) {
+          if (null === current.return || current.return === workInProgress)
+            break a;
+          current = current.return;
+        }
+        current.sibling.return = current.return;
+        current = current.sibling;
+      }
+    nextProps &= 1;
+  }
+  push(suspenseStackCursor, nextProps);
+  switch (revealOrder) {
+    case "forwards":
+      renderLanes = workInProgress.child;
+      for (revealOrder = null; null !== renderLanes; )
+        (current = renderLanes.alternate),
+          null !== current &&
+            null === findFirstSuspended(current) &&
+            (revealOrder = renderLanes),
+          (renderLanes = renderLanes.sibling);
+      renderLanes = revealOrder;
+      null === renderLanes
+        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))
+        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));
+      initSuspenseListRenderState(
+        workInProgress,
+        !1,
+        revealOrder,
+        renderLanes,
+        tailMode
+      );
+      break;
+    case "backwards":
+      renderLanes = null;
+      revealOrder = workInProgress.child;
+      for (workInProgress.child = null; null !== revealOrder; ) {
+        current = revealOrder.alternate;
+        if (null !== current && null === findFirstSuspended(current)) {
+          workInProgress.child = revealOrder;
+          break;
+        }
+        current = revealOrder.sibling;
+        revealOrder.sibling = renderLanes;
+        renderLanes = revealOrder;
+        revealOrder = current;
+      }
+      initSuspenseListRenderState(
+        workInProgress,
+        !0,
+        renderLanes,
+        null,
+        tailMode
+      );
+      break;
+    case "together":
+      initSuspenseListRenderState(workInProgress, !1, null, null, void 0);
+      break;
+    default:
+      workInProgress.memoizedState = null;
+  }
+  return workInProgress.child;
+}
+function bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {
+  null !== current && (workInProgress.dependencies = current.dependencies);
+  workInProgressRootSkippedLanes |= workInProgress.lanes;
+  if (0 === (renderLanes & workInProgress.childLanes))
+    if (null !== current) {
+      if (
+        (propagateParentContextChanges(
+          current,
+          workInProgress,
+          renderLanes,
+          !1
+        ),
+        0 === (renderLanes & workInProgress.childLanes))
+      )
+        return null;
+    } else return null;
+  if (null !== current && workInProgress.child !== current.child)
+    throw Error(formatProdErrorMessage(153));
+  if (null !== workInProgress.child) {
+    current = workInProgress.child;
+    renderLanes = createWorkInProgress(current, current.pendingProps);
+    workInProgress.child = renderLanes;
+    for (renderLanes.return = workInProgress; null !== current.sibling; )
+      (current = current.sibling),
+        (renderLanes = renderLanes.sibling =
+          createWorkInProgress(current, current.pendingProps)),
+        (renderLanes.return = workInProgress);
+    renderLanes.sibling = null;
+  }
+  return workInProgress.child;
+}
+function checkScheduledUpdateOrContext(current, renderLanes) {
+  if (0 !== (current.lanes & renderLanes)) return !0;
+  current = current.dependencies;
+  return null !== current && checkIfContextChanged(current) ? !0 : !1;
+}
+function attemptEarlyBailoutIfNoScheduledUpdate(
+  current,
+  workInProgress,
+  renderLanes
+) {
+  switch (workInProgress.tag) {
+    case 3:
+      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
+      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);
+      resetHydrationState();
+      break;
+    case 27:
+    case 5:
+      pushHostContext(workInProgress);
+      break;
+    case 4:
+      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
+      break;
+    case 10:
+      pushProvider(
+        workInProgress,
+        workInProgress.type,
+        workInProgress.memoizedProps.value
+      );
+      break;
+    case 13:
+      var state = workInProgress.memoizedState;
+      if (null !== state) {
+        if (null !== state.dehydrated)
+          return (
+            pushPrimaryTreeSuspenseHandler(workInProgress),
+            (workInProgress.flags |= 128),
+            null
+          );
+        if (0 !== (renderLanes & workInProgress.child.childLanes))
+          return updateSuspenseComponent(current, workInProgress, renderLanes);
+        pushPrimaryTreeSuspenseHandler(workInProgress);
+        current = bailoutOnAlreadyFinishedWork(
+          current,
+          workInProgress,
+          renderLanes
+        );
+        return null !== current ? current.sibling : null;
+      }
+      pushPrimaryTreeSuspenseHandler(workInProgress);
+      break;
+    case 19:
+      var didSuspendBefore = 0 !== (current.flags & 128);
+      state = 0 !== (renderLanes & workInProgress.childLanes);
+      state ||
+        (propagateParentContextChanges(
+          current,
+          workInProgress,
+          renderLanes,
+          !1
+        ),
+        (state = 0 !== (renderLanes & workInProgress.childLanes)));
+      if (didSuspendBefore) {
+        if (state)
+          return updateSuspenseListComponent(
+            current,
+            workInProgress,
+            renderLanes
+          );
+        workInProgress.flags |= 128;
+      }
+      didSuspendBefore = workInProgress.memoizedState;
+      null !== didSuspendBefore &&
+        ((didSuspendBefore.rendering = null),
+        (didSuspendBefore.tail = null),
+        (didSuspendBefore.lastEffect = null));
+      push(suspenseStackCursor, suspenseStackCursor.current);
+      if (state) break;
+      else return null;
+    case 22:
+    case 23:
+      return (
+        (workInProgress.lanes = 0),
+        updateOffscreenComponent(current, workInProgress, renderLanes)
+      );
+    case 24:
+      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);
+  }
+  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
+}
+function beginWork(current, workInProgress, renderLanes) {
+  if (null !== current)
+    if (current.memoizedProps !== workInProgress.pendingProps)
+      didReceiveUpdate = !0;
+    else {
+      if (
+        !checkScheduledUpdateOrContext(current, renderLanes) &&
+        0 === (workInProgress.flags & 128)
+      )
+        return (
+          (didReceiveUpdate = !1),
+          attemptEarlyBailoutIfNoScheduledUpdate(
+            current,
+            workInProgress,
+            renderLanes
+          )
+        );
+      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;
+    }
+  else
+    (didReceiveUpdate = !1),
+      isHydrating &&
+        0 !== (workInProgress.flags & 1048576) &&
+        pushTreeId(workInProgress, treeForkCount, workInProgress.index);
+  workInProgress.lanes = 0;
+  switch (workInProgress.tag) {
+    case 16:
+      a: {
+        current = workInProgress.pendingProps;
+        var lazyComponent = workInProgress.elementType,
+          init = lazyComponent._init;
+        lazyComponent = init(lazyComponent._payload);
+        workInProgress.type = lazyComponent;
+        if ("function" === typeof lazyComponent)
+          shouldConstruct(lazyComponent)
+            ? ((current = resolveClassComponentProps(lazyComponent, current)),
+              (workInProgress.tag = 1),
+              (workInProgress = updateClassComponent(
+                null,
+                workInProgress,
+                lazyComponent,
+                current,
+                renderLanes
+              )))
+            : ((workInProgress.tag = 0),
+              (workInProgress = updateFunctionComponent(
+                null,
+                workInProgress,
+                lazyComponent,
+                current,
+                renderLanes
+              )));
+        else {
+          if (void 0 !== lazyComponent && null !== lazyComponent)
+            if (
+              ((init = lazyComponent.$$typeof), init === REACT_FORWARD_REF_TYPE)
+            ) {
+              workInProgress.tag = 11;
+              workInProgress = updateForwardRef(
+                null,
+                workInProgress,
+                lazyComponent,
+                current,
+                renderLanes
+              );
+              break a;
+            } else if (init === REACT_MEMO_TYPE) {
+              workInProgress.tag = 14;
+              workInProgress = updateMemoComponent(
+                null,
+                workInProgress,
+                lazyComponent,
+                current,
+                renderLanes
+              );
+              break a;
+            }
+          workInProgress =
+            getComponentNameFromType(lazyComponent) || lazyComponent;
+          throw Error(formatProdErrorMessage(306, workInProgress, ""));
+        }
+      }
+      return workInProgress;
+    case 0:
+      return updateFunctionComponent(
+        current,
+        workInProgress,
+        workInProgress.type,
+        workInProgress.pendingProps,
+        renderLanes
+      );
+    case 1:
+      return (
+        (lazyComponent = workInProgress.type),
+        (init = resolveClassComponentProps(
+          lazyComponent,
+          workInProgress.pendingProps
+        )),
+        updateClassComponent(
+          current,
+          workInProgress,
+          lazyComponent,
+          init,
+          renderLanes
+        )
+      );
+    case 3:
+      a: {
+        pushHostContainer(
+          workInProgress,
+          workInProgress.stateNode.containerInfo
+        );
+        if (null === current) throw Error(formatProdErrorMessage(387));
+        lazyComponent = workInProgress.pendingProps;
+        var prevState = workInProgress.memoizedState;
+        init = prevState.element;
+        cloneUpdateQueue(current, workInProgress);
+        processUpdateQueue(workInProgress, lazyComponent, null, renderLanes);
+        var nextState = workInProgress.memoizedState;
+        lazyComponent = nextState.cache;
+        pushProvider(workInProgress, CacheContext, lazyComponent);
+        lazyComponent !== prevState.cache &&
+          propagateContextChanges(
+            workInProgress,
+            [CacheContext],
+            renderLanes,
+            !0
+          );
+        suspendIfUpdateReadFromEntangledAsyncAction();
+        lazyComponent = nextState.element;
+        if (prevState.isDehydrated)
+          if (
+            ((prevState = {
+              element: lazyComponent,
+              isDehydrated: !1,
+              cache: nextState.cache
+            }),
+            (workInProgress.updateQueue.baseState = prevState),
+            (workInProgress.memoizedState = prevState),
+            workInProgress.flags & 256)
+          ) {
+            workInProgress = mountHostRootWithoutHydrating(
+              current,
+              workInProgress,
+              lazyComponent,
+              renderLanes
+            );
+            break a;
+          } else if (lazyComponent !== init) {
+            init = createCapturedValueAtFiber(
+              Error(formatProdErrorMessage(424)),
+              workInProgress
+            );
+            queueHydrationError(init);
+            workInProgress = mountHostRootWithoutHydrating(
+              current,
+              workInProgress,
+              lazyComponent,
+              renderLanes
+            );
+            break a;
+          } else {
+            current = workInProgress.stateNode.containerInfo;
+            switch (current.nodeType) {
+              case 9:
+                current = current.body;
+                break;
+              default:
+                current =
+                  "HTML" === current.nodeName
+                    ? current.ownerDocument.body
+                    : current;
+            }
+            nextHydratableInstance = getNextHydratable(current.firstChild);
+            hydrationParentFiber = workInProgress;
+            isHydrating = !0;
+            hydrationErrors = null;
+            rootOrSingletonContext = !0;
+            renderLanes = mountChildFibers(
+              workInProgress,
+              null,
+              lazyComponent,
+              renderLanes
+            );
+            for (workInProgress.child = renderLanes; renderLanes; )
+              (renderLanes.flags = (renderLanes.flags & -3) | 4096),
+                (renderLanes = renderLanes.sibling);
+          }
+        else {
+          resetHydrationState();
+          if (lazyComponent === init) {
+            workInProgress = bailoutOnAlreadyFinishedWork(
+              current,
+              workInProgress,
+              renderLanes
+            );
+            break a;
+          }
+          reconcileChildren(
+            current,
+            workInProgress,
+            lazyComponent,
+            renderLanes
+          );
+        }
+        workInProgress = workInProgress.child;
+      }
+      return workInProgress;
+    case 26:
+      return (
+        markRef(current, workInProgress),
+        null === current
+          ? (renderLanes = getResource(
+              workInProgress.type,
+              null,
+              workInProgress.pendingProps,
+              null
+            ))
+            ? (workInProgress.memoizedState = renderLanes)
+            : isHydrating ||
+              ((renderLanes = workInProgress.type),
+              (current = workInProgress.pendingProps),
+              (lazyComponent = getOwnerDocumentFromRootContainer(
+                rootInstanceStackCursor.current
+              ).createElement(renderLanes)),
+              (lazyComponent[internalInstanceKey] = workInProgress),
+              (lazyComponent[internalPropsKey] = current),
+              setInitialProperties(lazyComponent, renderLanes, current),
+              markNodeAsHoistable(lazyComponent),
+              (workInProgress.stateNode = lazyComponent))
+          : (workInProgress.memoizedState = getResource(
+              workInProgress.type,
+              current.memoizedProps,
+              workInProgress.pendingProps,
+              current.memoizedState
+            )),
+        null
+      );
+    case 27:
+      return (
+        pushHostContext(workInProgress),
+        null === current &&
+          isHydrating &&
+          ((lazyComponent = workInProgress.stateNode =
+            resolveSingletonInstance(
+              workInProgress.type,
+              workInProgress.pendingProps,
+              rootInstanceStackCursor.current
+            )),
+          (hydrationParentFiber = workInProgress),
+          (rootOrSingletonContext = !0),
+          (init = nextHydratableInstance),
+          isSingletonScope(workInProgress.type)
+            ? ((previousHydratableOnEnteringScopedSingleton = init),
+              (nextHydratableInstance = getNextHydratable(
+                lazyComponent.firstChild
+              )))
+            : (nextHydratableInstance = init)),
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps.children,
+          renderLanes
+        ),
+        markRef(current, workInProgress),
+        null === current && (workInProgress.flags |= 4194304),
+        workInProgress.child
+      );
+    case 5:
+      if (null === current && isHydrating) {
+        if ((init = lazyComponent = nextHydratableInstance))
+          (lazyComponent = canHydrateInstance(
+            lazyComponent,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            rootOrSingletonContext
+          )),
+            null !== lazyComponent
+              ? ((workInProgress.stateNode = lazyComponent),
+                (hydrationParentFiber = workInProgress),
+                (nextHydratableInstance = getNextHydratable(
+                  lazyComponent.firstChild
+                )),
+                (rootOrSingletonContext = !1),
+                (init = !0))
+              : (init = !1);
+        init || throwOnHydrationMismatch(workInProgress);
+      }
+      pushHostContext(workInProgress);
+      init = workInProgress.type;
+      prevState = workInProgress.pendingProps;
+      nextState = null !== current ? current.memoizedProps : null;
+      lazyComponent = prevState.children;
+      shouldSetTextContent(init, prevState)
+        ? (lazyComponent = null)
+        : null !== nextState &&
+          shouldSetTextContent(init, nextState) &&
+          (workInProgress.flags |= 32);
+      null !== workInProgress.memoizedState &&
+        ((init = renderWithHooks(
+          current,
+          workInProgress,
+          TransitionAwareHostComponent,
+          null,
+          null,
+          renderLanes
+        )),
+        (HostTransitionContext._currentValue = init));
+      markRef(current, workInProgress);
+      reconcileChildren(current, workInProgress, lazyComponent, renderLanes);
+      return workInProgress.child;
+    case 6:
+      if (null === current && isHydrating) {
+        if ((current = renderLanes = nextHydratableInstance))
+          (renderLanes = canHydrateTextInstance(
+            renderLanes,
+            workInProgress.pendingProps,
+            rootOrSingletonContext
+          )),
+            null !== renderLanes
+              ? ((workInProgress.stateNode = renderLanes),
+                (hydrationParentFiber = workInProgress),
+                (nextHydratableInstance = null),
+                (current = !0))
+              : (current = !1);
+        current || throwOnHydrationMismatch(workInProgress);
+      }
+      return null;
+    case 13:
+      return updateSuspenseComponent(current, workInProgress, renderLanes);
+    case 4:
+      return (
+        pushHostContainer(
+          workInProgress,
+          workInProgress.stateNode.containerInfo
+        ),
+        (lazyComponent = workInProgress.pendingProps),
+        null === current
+          ? (workInProgress.child = reconcileChildFibers(
+              workInProgress,
+              null,
+              lazyComponent,
+              renderLanes
+            ))
+          : reconcileChildren(
+              current,
+              workInProgress,
+              lazyComponent,
+              renderLanes
+            ),
+        workInProgress.child
+      );
+    case 11:
+      return updateForwardRef(
+        current,
+        workInProgress,
+        workInProgress.type,
+        workInProgress.pendingProps,
+        renderLanes
+      );
+    case 7:
+      return (
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 8:
+      return (
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps.children,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 12:
+      return (
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps.children,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 10:
+      return (
+        (lazyComponent = workInProgress.pendingProps),
+        pushProvider(workInProgress, workInProgress.type, lazyComponent.value),
+        reconcileChildren(
+          current,
+          workInProgress,
+          lazyComponent.children,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 9:
+      return (
+        (init = workInProgress.type._context),
+        (lazyComponent = workInProgress.pendingProps.children),
+        prepareToReadContext(workInProgress),
+        (init = readContext(init)),
+        (lazyComponent = lazyComponent(init)),
+        (workInProgress.flags |= 1),
+        reconcileChildren(current, workInProgress, lazyComponent, renderLanes),
+        workInProgress.child
+      );
+    case 14:
+      return updateMemoComponent(
+        current,
+        workInProgress,
+        workInProgress.type,
+        workInProgress.pendingProps,
+        renderLanes
+      );
+    case 15:
+      return updateSimpleMemoComponent(
+        current,
+        workInProgress,
+        workInProgress.type,
+        workInProgress.pendingProps,
+        renderLanes
+      );
+    case 19:
+      return updateSuspenseListComponent(current, workInProgress, renderLanes);
+    case 31:
+      return (
+        (lazyComponent = workInProgress.pendingProps),
+        (renderLanes = workInProgress.mode),
+        (lazyComponent = {
+          mode: lazyComponent.mode,
+          children: lazyComponent.children
+        }),
+        null === current
+          ? ((renderLanes = mountWorkInProgressOffscreenFiber(
+              lazyComponent,
+              renderLanes
+            )),
+            (renderLanes.ref = workInProgress.ref),
+            (workInProgress.child = renderLanes),
+            (renderLanes.return = workInProgress),
+            (workInProgress = renderLanes))
+          : ((renderLanes = createWorkInProgress(current.child, lazyComponent)),
+            (renderLanes.ref = workInProgress.ref),
+            (workInProgress.child = renderLanes),
+            (renderLanes.return = workInProgress),
+            (workInProgress = renderLanes)),
+        workInProgress
+      );
+    case 22:
+      return updateOffscreenComponent(current, workInProgress, renderLanes);
+    case 24:
+      return (
+        prepareToReadContext(workInProgress),
+        (lazyComponent = readContext(CacheContext)),
+        null === current
+          ? ((init = peekCacheFromPool()),
+            null === init &&
+              ((init = workInProgressRoot),
+              (prevState = createCache()),
+              (init.pooledCache = prevState),
+              prevState.refCount++,
+              null !== prevState && (init.pooledCacheLanes |= renderLanes),
+              (init = prevState)),
+            (workInProgress.memoizedState = {
+              parent: lazyComponent,
+              cache: init
+            }),
+            initializeUpdateQueue(workInProgress),
+            pushProvider(workInProgress, CacheContext, init))
+          : (0 !== (current.lanes & renderLanes) &&
+              (cloneUpdateQueue(current, workInProgress),
+              processUpdateQueue(workInProgress, null, null, renderLanes),
+              suspendIfUpdateReadFromEntangledAsyncAction()),
+            (init = current.memoizedState),
+            (prevState = workInProgress.memoizedState),
+            init.parent !== lazyComponent
+              ? ((init = { parent: lazyComponent, cache: lazyComponent }),
+                (workInProgress.memoizedState = init),
+                0 === workInProgress.lanes &&
+                  (workInProgress.memoizedState =
+                    workInProgress.updateQueue.baseState =
+                      init),
+                pushProvider(workInProgress, CacheContext, lazyComponent))
+              : ((lazyComponent = prevState.cache),
+                pushProvider(workInProgress, CacheContext, lazyComponent),
+                lazyComponent !== init.cache &&
+                  propagateContextChanges(
+                    workInProgress,
+                    [CacheContext],
+                    renderLanes,
+                    !0
+                  ))),
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps.children,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 29:
+      throw workInProgress.pendingProps;
+  }
+  throw Error(formatProdErrorMessage(156, workInProgress.tag));
+}
+function markUpdate(workInProgress) {
+  workInProgress.flags |= 4;
+}
+function preloadResourceAndSuspendIfNeeded(workInProgress, resource) {
+  if ("stylesheet" !== resource.type || 0 !== (resource.state.loading & 4))
+    workInProgress.flags &= -16777217;
+  else if (((workInProgress.flags |= 16777216), !preloadResource(resource))) {
+    resource = suspenseHandlerStackCursor.current;
+    if (
+      null !== resource &&
+      ((workInProgressRootRenderLanes & 4194048) ===
+      workInProgressRootRenderLanes
+        ? null !== shellBoundary
+        : ((workInProgressRootRenderLanes & 62914560) !==
+            workInProgressRootRenderLanes &&
+            0 === (workInProgressRootRenderLanes & 536870912)) ||
+          resource !== shellBoundary)
+    )
+      throw (
+        ((suspendedThenable = noopSuspenseyCommitThenable),
+        SuspenseyCommitException)
+      );
+    workInProgress.flags |= 8192;
+  }
+}
+function scheduleRetryEffect(workInProgress, retryQueue) {
+  null !== retryQueue && (workInProgress.flags |= 4);
+  workInProgress.flags & 16384 &&
+    ((retryQueue =
+      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),
+    (workInProgress.lanes |= retryQueue),
+    (workInProgressSuspendedRetryLanes |= retryQueue));
+}
+function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {
+  if (!isHydrating)
+    switch (renderState.tailMode) {
+      case "hidden":
+        hasRenderedATailFallback = renderState.tail;
+        for (var lastTailNode = null; null !== hasRenderedATailFallback; )
+          null !== hasRenderedATailFallback.alternate &&
+            (lastTailNode = hasRenderedATailFallback),
+            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);
+        null === lastTailNode
+          ? (renderState.tail = null)
+          : (lastTailNode.sibling = null);
+        break;
+      case "collapsed":
+        lastTailNode = renderState.tail;
+        for (var lastTailNode$113 = null; null !== lastTailNode; )
+          null !== lastTailNode.alternate && (lastTailNode$113 = lastTailNode),
+            (lastTailNode = lastTailNode.sibling);
+        null === lastTailNode$113
+          ? hasRenderedATailFallback || null === renderState.tail
+            ? (renderState.tail = null)
+            : (renderState.tail.sibling = null)
+          : (lastTailNode$113.sibling = null);
+    }
+}
+function bubbleProperties(completedWork) {
+  var didBailout =
+      null !== completedWork.alternate &&
+      completedWork.alternate.child === completedWork.child,
+    newChildLanes = 0,
+    subtreeFlags = 0;
+  if (didBailout)
+    for (var child$114 = completedWork.child; null !== child$114; )
+      (newChildLanes |= child$114.lanes | child$114.childLanes),
+        (subtreeFlags |= child$114.subtreeFlags & 65011712),
+        (subtreeFlags |= child$114.flags & 65011712),
+        (child$114.return = completedWork),
+        (child$114 = child$114.sibling);
+  else
+    for (child$114 = completedWork.child; null !== child$114; )
+      (newChildLanes |= child$114.lanes | child$114.childLanes),
+        (subtreeFlags |= child$114.subtreeFlags),
+        (subtreeFlags |= child$114.flags),
+        (child$114.return = completedWork),
+        (child$114 = child$114.sibling);
+  completedWork.subtreeFlags |= subtreeFlags;
+  completedWork.childLanes = newChildLanes;
+  return didBailout;
+}
+function completeWork(current, workInProgress, renderLanes) {
+  var newProps = workInProgress.pendingProps;
+  popTreeContext(workInProgress);
+  switch (workInProgress.tag) {
+    case 31:
+    case 16:
+    case 15:
+    case 0:
+    case 11:
+    case 7:
+    case 8:
+    case 12:
+    case 9:
+    case 14:
+      return bubbleProperties(workInProgress), null;
+    case 1:
+      return bubbleProperties(workInProgress), null;
+    case 3:
+      renderLanes = workInProgress.stateNode;
+      newProps = null;
+      null !== current && (newProps = current.memoizedState.cache);
+      workInProgress.memoizedState.cache !== newProps &&
+        (workInProgress.flags |= 2048);
+      popProvider(CacheContext);
+      popHostContainer();
+      renderLanes.pendingContext &&
+        ((renderLanes.context = renderLanes.pendingContext),
+        (renderLanes.pendingContext = null));
+      if (null === current || null === current.child)
+        popHydrationState(workInProgress)
+          ? markUpdate(workInProgress)
+          : null === current ||
+            (current.memoizedState.isDehydrated &&
+              0 === (workInProgress.flags & 256)) ||
+            ((workInProgress.flags |= 1024),
+            upgradeHydrationErrorsToRecoverable());
+      bubbleProperties(workInProgress);
+      return null;
+    case 26:
+      return (
+        (renderLanes = workInProgress.memoizedState),
+        null === current
+          ? (markUpdate(workInProgress),
+            null !== renderLanes
+              ? (bubbleProperties(workInProgress),
+                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))
+              : (bubbleProperties(workInProgress),
+                (workInProgress.flags &= -16777217)))
+          : renderLanes
+            ? renderLanes !== current.memoizedState
+              ? (markUpdate(workInProgress),
+                bubbleProperties(workInProgress),
+                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))
+              : (bubbleProperties(workInProgress),
+                (workInProgress.flags &= -16777217))
+            : (current.memoizedProps !== newProps && markUpdate(workInProgress),
+              bubbleProperties(workInProgress),
+              (workInProgress.flags &= -16777217)),
+        null
+      );
+    case 27:
+      popHostContext(workInProgress);
+      renderLanes = rootInstanceStackCursor.current;
+      var type = workInProgress.type;
+      if (null !== current && null != workInProgress.stateNode)
+        current.memoizedProps !== newProps && markUpdate(workInProgress);
+      else {
+        if (!newProps) {
+          if (null === workInProgress.stateNode)
+            throw Error(formatProdErrorMessage(166));
+          bubbleProperties(workInProgress);
+          return null;
+        }
+        current = contextStackCursor.current;
+        popHydrationState(workInProgress)
+          ? prepareToHydrateHostInstance(workInProgress, current)
+          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),
+            (workInProgress.stateNode = current),
+            markUpdate(workInProgress));
+      }
+      bubbleProperties(workInProgress);
+      return null;
+    case 5:
+      popHostContext(workInProgress);
+      renderLanes = workInProgress.type;
+      if (null !== current && null != workInProgress.stateNode)
+        current.memoizedProps !== newProps && markUpdate(workInProgress);
+      else {
+        if (!newProps) {
+          if (null === workInProgress.stateNode)
+            throw Error(formatProdErrorMessage(166));
+          bubbleProperties(workInProgress);
+          return null;
+        }
+        current = contextStackCursor.current;
+        if (popHydrationState(workInProgress))
+          prepareToHydrateHostInstance(workInProgress, current);
+        else {
+          type = getOwnerDocumentFromRootContainer(
+            rootInstanceStackCursor.current
+          );
+          switch (current) {
+            case 1:
+              current = type.createElementNS(
+                "http://www.w3.org/2000/svg",
+                renderLanes
+              );
+              break;
+            case 2:
+              current = type.createElementNS(
+                "http://www.w3.org/1998/Math/MathML",
+                renderLanes
+              );
+              break;
+            default:
+              switch (renderLanes) {
+                case "svg":
+                  current = type.createElementNS(
+                    "http://www.w3.org/2000/svg",
+                    renderLanes
+                  );
+                  break;
+                case "math":
+                  current = type.createElementNS(
+                    "http://www.w3.org/1998/Math/MathML",
+                    renderLanes
+                  );
+                  break;
+                case "script":
+                  current = type.createElement("div");
+                  current.innerHTML = "<script>\x3c/script>";
+                  current = current.removeChild(current.firstChild);
+                  break;
+                case "select":
+                  current =
+                    "string" === typeof newProps.is
+                      ? type.createElement("select", { is: newProps.is })
+                      : type.createElement("select");
+                  newProps.multiple
+                    ? (current.multiple = !0)
+                    : newProps.size && (current.size = newProps.size);
+                  break;
+                default:
+                  current =
+                    "string" === typeof newProps.is
+                      ? type.createElement(renderLanes, { is: newProps.is })
+                      : type.createElement(renderLanes);
+              }
+          }
+          current[internalInstanceKey] = workInProgress;
+          current[internalPropsKey] = newProps;
+          a: for (type = workInProgress.child; null !== type; ) {
+            if (5 === type.tag || 6 === type.tag)
+              current.appendChild(type.stateNode);
+            else if (4 !== type.tag && 27 !== type.tag && null !== type.child) {
+              type.child.return = type;
+              type = type.child;
+              continue;
+            }
+            if (type === workInProgress) break a;
+            for (; null === type.sibling; ) {
+              if (null === type.return || type.return === workInProgress)
+                break a;
+              type = type.return;
+            }
+            type.sibling.return = type.return;
+            type = type.sibling;
+          }
+          workInProgress.stateNode = current;
+          a: switch (
+            (setInitialProperties(current, renderLanes, newProps), renderLanes)
+          ) {
+            case "button":
+            case "input":
+            case "select":
+            case "textarea":
+              current = !!newProps.autoFocus;
+              break a;
+            case "img":
+              current = !0;
+              break a;
+            default:
+              current = !1;
+          }
+          current && markUpdate(workInProgress);
+        }
+      }
+      bubbleProperties(workInProgress);
+      workInProgress.flags &= -16777217;
+      return null;
+    case 6:
+      if (current && null != workInProgress.stateNode)
+        current.memoizedProps !== newProps && markUpdate(workInProgress);
+      else {
+        if ("string" !== typeof newProps && null === workInProgress.stateNode)
+          throw Error(formatProdErrorMessage(166));
+        current = rootInstanceStackCursor.current;
+        if (popHydrationState(workInProgress)) {
+          current = workInProgress.stateNode;
+          renderLanes = workInProgress.memoizedProps;
+          newProps = null;
+          type = hydrationParentFiber;
+          if (null !== type)
+            switch (type.tag) {
+              case 27:
+              case 5:
+                newProps = type.memoizedProps;
+            }
+          current[internalInstanceKey] = workInProgress;
+          current =
+            current.nodeValue === renderLanes ||
+            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||
+            checkForUnmatchedText(current.nodeValue, renderLanes)
+              ? !0
+              : !1;
+          current || throwOnHydrationMismatch(workInProgress);
+        } else
+          (current =
+            getOwnerDocumentFromRootContainer(current).createTextNode(
+              newProps
+            )),
+            (current[internalInstanceKey] = workInProgress),
+            (workInProgress.stateNode = current);
+      }
+      bubbleProperties(workInProgress);
+      return null;
+    case 13:
+      newProps = workInProgress.memoizedState;
+      if (
+        null === current ||
+        (null !== current.memoizedState &&
+          null !== current.memoizedState.dehydrated)
+      ) {
+        type = popHydrationState(workInProgress);
+        if (null !== newProps && null !== newProps.dehydrated) {
+          if (null === current) {
+            if (!type) throw Error(formatProdErrorMessage(318));
+            type = workInProgress.memoizedState;
+            type = null !== type ? type.dehydrated : null;
+            if (!type) throw Error(formatProdErrorMessage(317));
+            type[internalInstanceKey] = workInProgress;
+          } else
+            resetHydrationState(),
+              0 === (workInProgress.flags & 128) &&
+                (workInProgress.memoizedState = null),
+              (workInProgress.flags |= 4);
+          bubbleProperties(workInProgress);
+          type = !1;
+        } else
+          (type = upgradeHydrationErrorsToRecoverable()),
+            null !== current &&
+              null !== current.memoizedState &&
+              (current.memoizedState.hydrationErrors = type),
+            (type = !0);
+        if (!type) {
+          if (workInProgress.flags & 256)
+            return popSuspenseHandler(workInProgress), workInProgress;
+          popSuspenseHandler(workInProgress);
+          return null;
+        }
+      }
+      popSuspenseHandler(workInProgress);
+      if (0 !== (workInProgress.flags & 128))
+        return (workInProgress.lanes = renderLanes), workInProgress;
+      renderLanes = null !== newProps;
+      current = null !== current && null !== current.memoizedState;
+      if (renderLanes) {
+        newProps = workInProgress.child;
+        type = null;
+        null !== newProps.alternate &&
+          null !== newProps.alternate.memoizedState &&
+          null !== newProps.alternate.memoizedState.cachePool &&
+          (type = newProps.alternate.memoizedState.cachePool.pool);
+        var cache$127 = null;
+        null !== newProps.memoizedState &&
+          null !== newProps.memoizedState.cachePool &&
+          (cache$127 = newProps.memoizedState.cachePool.pool);
+        cache$127 !== type && (newProps.flags |= 2048);
+      }
+      renderLanes !== current &&
+        renderLanes &&
+        (workInProgress.child.flags |= 8192);
+      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);
+      bubbleProperties(workInProgress);
+      return null;
+    case 4:
+      return (
+        popHostContainer(),
+        null === current &&
+          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),
+        bubbleProperties(workInProgress),
+        null
+      );
+    case 10:
+      return (
+        popProvider(workInProgress.type), bubbleProperties(workInProgress), null
+      );
+    case 19:
+      pop(suspenseStackCursor);
+      type = workInProgress.memoizedState;
+      if (null === type) return bubbleProperties(workInProgress), null;
+      newProps = 0 !== (workInProgress.flags & 128);
+      cache$127 = type.rendering;
+      if (null === cache$127)
+        if (newProps) cutOffTailIfNeeded(type, !1);
+        else {
+          if (
+            0 !== workInProgressRootExitStatus ||
+            (null !== current && 0 !== (current.flags & 128))
+          )
+            for (current = workInProgress.child; null !== current; ) {
+              cache$127 = findFirstSuspended(current);
+              if (null !== cache$127) {
+                workInProgress.flags |= 128;
+                cutOffTailIfNeeded(type, !1);
+                current = cache$127.updateQueue;
+                workInProgress.updateQueue = current;
+                scheduleRetryEffect(workInProgress, current);
+                workInProgress.subtreeFlags = 0;
+                current = renderLanes;
+                for (renderLanes = workInProgress.child; null !== renderLanes; )
+                  resetWorkInProgress(renderLanes, current),
+                    (renderLanes = renderLanes.sibling);
+                push(
+                  suspenseStackCursor,
+                  (suspenseStackCursor.current & 1) | 2
+                );
+                return workInProgress.child;
+              }
+              current = current.sibling;
+            }
+          null !== type.tail &&
+            now() > workInProgressRootRenderTargetTime &&
+            ((workInProgress.flags |= 128),
+            (newProps = !0),
+            cutOffTailIfNeeded(type, !1),
+            (workInProgress.lanes = 4194304));
+        }
+      else {
+        if (!newProps)
+          if (((current = findFirstSuspended(cache$127)), null !== current)) {
+            if (
+              ((workInProgress.flags |= 128),
+              (newProps = !0),
+              (current = current.updateQueue),
+              (workInProgress.updateQueue = current),
+              scheduleRetryEffect(workInProgress, current),
+              cutOffTailIfNeeded(type, !0),
+              null === type.tail &&
+                "hidden" === type.tailMode &&
+                !cache$127.alternate &&
+                !isHydrating)
+            )
+              return bubbleProperties(workInProgress), null;
+          } else
+            2 * now() - type.renderingStartTime >
+              workInProgressRootRenderTargetTime &&
+              536870912 !== renderLanes &&
+              ((workInProgress.flags |= 128),
+              (newProps = !0),
+              cutOffTailIfNeeded(type, !1),
+              (workInProgress.lanes = 4194304));
+        type.isBackwards
+          ? ((cache$127.sibling = workInProgress.child),
+            (workInProgress.child = cache$127))
+          : ((current = type.last),
+            null !== current
+              ? (current.sibling = cache$127)
+              : (workInProgress.child = cache$127),
+            (type.last = cache$127));
+      }
+      if (null !== type.tail)
+        return (
+          (workInProgress = type.tail),
+          (type.rendering = workInProgress),
+          (type.tail = workInProgress.sibling),
+          (type.renderingStartTime = now()),
+          (workInProgress.sibling = null),
+          (current = suspenseStackCursor.current),
+          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),
+          workInProgress
+        );
+      bubbleProperties(workInProgress);
+      return null;
+    case 22:
+    case 23:
+      return (
+        popSuspenseHandler(workInProgress),
+        popHiddenContext(),
+        (newProps = null !== workInProgress.memoizedState),
+        null !== current
+          ? (null !== current.memoizedState) !== newProps &&
+            (workInProgress.flags |= 8192)
+          : newProps && (workInProgress.flags |= 8192),
+        newProps
+          ? 0 !== (renderLanes & 536870912) &&
+            0 === (workInProgress.flags & 128) &&
+            (bubbleProperties(workInProgress),
+            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))
+          : bubbleProperties(workInProgress),
+        (renderLanes = workInProgress.updateQueue),
+        null !== renderLanes &&
+          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),
+        (renderLanes = null),
+        null !== current &&
+          null !== current.memoizedState &&
+          null !== current.memoizedState.cachePool &&
+          (renderLanes = current.memoizedState.cachePool.pool),
+        (newProps = null),
+        null !== workInProgress.memoizedState &&
+          null !== workInProgress.memoizedState.cachePool &&
+          (newProps = workInProgress.memoizedState.cachePool.pool),
+        newProps !== renderLanes && (workInProgress.flags |= 2048),
+        null !== current && pop(resumedCache),
+        null
+      );
+    case 24:
+      return (
+        (renderLanes = null),
+        null !== current && (renderLanes = current.memoizedState.cache),
+        workInProgress.memoizedState.cache !== renderLanes &&
+          (workInProgress.flags |= 2048),
+        popProvider(CacheContext),
+        bubbleProperties(workInProgress),
+        null
+      );
+    case 25:
+      return null;
+    case 30:
+      return null;
+  }
+  throw Error(formatProdErrorMessage(156, workInProgress.tag));
+}
+function unwindWork(current, workInProgress) {
+  popTreeContext(workInProgress);
+  switch (workInProgress.tag) {
+    case 1:
+      return (
+        (current = workInProgress.flags),
+        current & 65536
+          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)
+          : null
+      );
+    case 3:
+      return (
+        popProvider(CacheContext),
+        popHostContainer(),
+        (current = workInProgress.flags),
+        0 !== (current & 65536) && 0 === (current & 128)
+          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)
+          : null
+      );
+    case 26:
+    case 27:
+    case 5:
+      return popHostContext(workInProgress), null;
+    case 13:
+      popSuspenseHandler(workInProgress);
+      current = workInProgress.memoizedState;
+      if (null !== current && null !== current.dehydrated) {
+        if (null === workInProgress.alternate)
+          throw Error(formatProdErrorMessage(340));
+        resetHydrationState();
+      }
+      current = workInProgress.flags;
+      return current & 65536
+        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)
+        : null;
+    case 19:
+      return pop(suspenseStackCursor), null;
+    case 4:
+      return popHostContainer(), null;
+    case 10:
+      return popProvider(workInProgress.type), null;
+    case 22:
+    case 23:
+      return (
+        popSuspenseHandler(workInProgress),
+        popHiddenContext(),
+        null !== current && pop(resumedCache),
+        (current = workInProgress.flags),
+        current & 65536
+          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)
+          : null
+      );
+    case 24:
+      return popProvider(CacheContext), null;
+    case 25:
+      return null;
+    default:
+      return null;
+  }
+}
+function unwindInterruptedWork(current, interruptedWork) {
+  popTreeContext(interruptedWork);
+  switch (interruptedWork.tag) {
+    case 3:
+      popProvider(CacheContext);
+      popHostContainer();
+      break;
+    case 26:
+    case 27:
+    case 5:
+      popHostContext(interruptedWork);
+      break;
+    case 4:
+      popHostContainer();
+      break;
+    case 13:
+      popSuspenseHandler(interruptedWork);
+      break;
+    case 19:
+      pop(suspenseStackCursor);
+      break;
+    case 10:
+      popProvider(interruptedWork.type);
+      break;
+    case 22:
+    case 23:
+      popSuspenseHandler(interruptedWork);
+      popHiddenContext();
+      null !== current && pop(resumedCache);
+      break;
+    case 24:
+      popProvider(CacheContext);
+  }
+}
+function commitHookEffectListMount(flags, finishedWork) {
+  try {
+    var updateQueue = finishedWork.updateQueue,
+      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;
+    if (null !== lastEffect) {
+      var firstEffect = lastEffect.next;
+      updateQueue = firstEffect;
+      do {
+        if ((updateQueue.tag & flags) === flags) {
+          lastEffect = void 0;
+          var create = updateQueue.create,
+            inst = updateQueue.inst;
+          lastEffect = create();
+          inst.destroy = lastEffect;
+        }
+        updateQueue = updateQueue.next;
+      } while (updateQueue !== firstEffect);
+    }
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+function commitHookEffectListUnmount(
+  flags,
+  finishedWork,
+  nearestMountedAncestor$jscomp$0
+) {
+  try {
+    var updateQueue = finishedWork.updateQueue,
+      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;
+    if (null !== lastEffect) {
+      var firstEffect = lastEffect.next;
+      updateQueue = firstEffect;
+      do {
+        if ((updateQueue.tag & flags) === flags) {
+          var inst = updateQueue.inst,
+            destroy = inst.destroy;
+          if (void 0 !== destroy) {
+            inst.destroy = void 0;
+            lastEffect = finishedWork;
+            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,
+              destroy_ = destroy;
+            try {
+              destroy_();
+            } catch (error) {
+              captureCommitPhaseError(
+                lastEffect,
+                nearestMountedAncestor,
+                error
+              );
+            }
+          }
+        }
+        updateQueue = updateQueue.next;
+      } while (updateQueue !== firstEffect);
+    }
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+function commitClassCallbacks(finishedWork) {
+  var updateQueue = finishedWork.updateQueue;
+  if (null !== updateQueue) {
+    var instance = finishedWork.stateNode;
+    try {
+      commitCallbacks(updateQueue, instance);
+    } catch (error) {
+      captureCommitPhaseError(finishedWork, finishedWork.return, error);
+    }
+  }
+}
+function safelyCallComponentWillUnmount(
+  current,
+  nearestMountedAncestor,
+  instance
+) {
+  instance.props = resolveClassComponentProps(
+    current.type,
+    current.memoizedProps
+  );
+  instance.state = current.memoizedState;
+  try {
+    instance.componentWillUnmount();
+  } catch (error) {
+    captureCommitPhaseError(current, nearestMountedAncestor, error);
+  }
+}
+function safelyAttachRef(current, nearestMountedAncestor) {
+  try {
+    var ref = current.ref;
+    if (null !== ref) {
+      switch (current.tag) {
+        case 26:
+        case 27:
+        case 5:
+          var instanceToUse = current.stateNode;
+          break;
+        case 30:
+          instanceToUse = current.stateNode;
+          break;
+        default:
+          instanceToUse = current.stateNode;
+      }
+      "function" === typeof ref
+        ? (current.refCleanup = ref(instanceToUse))
+        : (ref.current = instanceToUse);
+    }
+  } catch (error) {
+    captureCommitPhaseError(current, nearestMountedAncestor, error);
+  }
+}
+function safelyDetachRef(current, nearestMountedAncestor) {
+  var ref = current.ref,
+    refCleanup = current.refCleanup;
+  if (null !== ref)
+    if ("function" === typeof refCleanup)
+      try {
+        refCleanup();
+      } catch (error) {
+        captureCommitPhaseError(current, nearestMountedAncestor, error);
+      } finally {
+        (current.refCleanup = null),
+          (current = current.alternate),
+          null != current && (current.refCleanup = null);
+      }
+    else if ("function" === typeof ref)
+      try {
+        ref(null);
+      } catch (error$143) {
+        captureCommitPhaseError(current, nearestMountedAncestor, error$143);
+      }
+    else ref.current = null;
+}
+function commitHostMount(finishedWork) {
+  var type = finishedWork.type,
+    props = finishedWork.memoizedProps,
+    instance = finishedWork.stateNode;
+  try {
+    a: switch (type) {
+      case "button":
+      case "input":
+      case "select":
+      case "textarea":
+        props.autoFocus && instance.focus();
+        break a;
+      case "img":
+        props.src
+          ? (instance.src = props.src)
+          : props.srcSet && (instance.srcset = props.srcSet);
+    }
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+function commitHostUpdate(finishedWork, newProps, oldProps) {
+  try {
+    var domElement = finishedWork.stateNode;
+    updateProperties(domElement, finishedWork.type, oldProps, newProps);
+    domElement[internalPropsKey] = newProps;
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+function isHostParent(fiber) {
+  return (
+    5 === fiber.tag ||
+    3 === fiber.tag ||
+    26 === fiber.tag ||
+    (27 === fiber.tag && isSingletonScope(fiber.type)) ||
+    4 === fiber.tag
+  );
+}
+function getHostSibling(fiber) {
+  a: for (;;) {
+    for (; null === fiber.sibling; ) {
+      if (null === fiber.return || isHostParent(fiber.return)) return null;
+      fiber = fiber.return;
+    }
+    fiber.sibling.return = fiber.return;
+    for (
+      fiber = fiber.sibling;
+      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;
+
+    ) {
+      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;
+      if (fiber.flags & 2) continue a;
+      if (null === fiber.child || 4 === fiber.tag) continue a;
+      else (fiber.child.return = fiber), (fiber = fiber.child);
+    }
+    if (!(fiber.flags & 2)) return fiber.stateNode;
+  }
+}
+function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {
+  var tag = node.tag;
+  if (5 === tag || 6 === tag)
+    (node = node.stateNode),
+      before
+        ? (9 === parent.nodeType
+            ? parent.body
+            : "HTML" === parent.nodeName
+              ? parent.ownerDocument.body
+              : parent
+          ).insertBefore(node, before)
+        : ((before =
+            9 === parent.nodeType
+              ? parent.body
+              : "HTML" === parent.nodeName
+                ? parent.ownerDocument.body
+                : parent),
+          before.appendChild(node),
+          (parent = parent._reactRootContainer),
+          (null !== parent && void 0 !== parent) ||
+            null !== before.onclick ||
+            (before.onclick = noop$1));
+  else if (
+    4 !== tag &&
+    (27 === tag &&
+      isSingletonScope(node.type) &&
+      ((parent = node.stateNode), (before = null)),
+    (node = node.child),
+    null !== node)
+  )
+    for (
+      insertOrAppendPlacementNodeIntoContainer(node, before, parent),
+        node = node.sibling;
+      null !== node;
+
+    )
+      insertOrAppendPlacementNodeIntoContainer(node, before, parent),
+        (node = node.sibling);
+}
+function insertOrAppendPlacementNode(node, before, parent) {
+  var tag = node.tag;
+  if (5 === tag || 6 === tag)
+    (node = node.stateNode),
+      before ? parent.insertBefore(node, before) : parent.appendChild(node);
+  else if (
+    4 !== tag &&
+    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),
+    (node = node.child),
+    null !== node)
+  )
+    for (
+      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;
+      null !== node;
+
+    )
+      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);
+}
+function commitHostSingletonAcquisition(finishedWork) {
+  var singleton = finishedWork.stateNode,
+    props = finishedWork.memoizedProps;
+  try {
+    for (
+      var type = finishedWork.type, attributes = singleton.attributes;
+      attributes.length;
+
+    )
+      singleton.removeAttributeNode(attributes[0]);
+    setInitialProperties(singleton, type, props);
+    singleton[internalInstanceKey] = finishedWork;
+    singleton[internalPropsKey] = props;
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+var offscreenSubtreeIsHidden = !1,
+  offscreenSubtreeWasHidden = !1,
+  needsFormReset = !1,
+  PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set,
+  nextEffect = null;
+function commitBeforeMutationEffects(root, firstChild) {
+  root = root.containerInfo;
+  eventsEnabled = _enabled;
+  root = getActiveElementDeep(root);
+  if (hasSelectionCapabilities(root)) {
+    if ("selectionStart" in root)
+      var JSCompiler_temp = {
+        start: root.selectionStart,
+        end: root.selectionEnd
+      };
+    else
+      a: {
+        JSCompiler_temp =
+          ((JSCompiler_temp = root.ownerDocument) &&
+            JSCompiler_temp.defaultView) ||
+          window;
+        var selection =
+          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();
+        if (selection && 0 !== selection.rangeCount) {
+          JSCompiler_temp = selection.anchorNode;
+          var anchorOffset = selection.anchorOffset,
+            focusNode = selection.focusNode;
+          selection = selection.focusOffset;
+          try {
+            JSCompiler_temp.nodeType, focusNode.nodeType;
+          } catch (e$20) {
+            JSCompiler_temp = null;
+            break a;
+          }
+          var length = 0,
+            start = -1,
+            end = -1,
+            indexWithinAnchor = 0,
+            indexWithinFocus = 0,
+            node = root,
+            parentNode = null;
+          b: for (;;) {
+            for (var next; ; ) {
+              node !== JSCompiler_temp ||
+                (0 !== anchorOffset && 3 !== node.nodeType) ||
+                (start = length + anchorOffset);
+              node !== focusNode ||
+                (0 !== selection && 3 !== node.nodeType) ||
+                (end = length + selection);
+              3 === node.nodeType && (length += node.nodeValue.length);
+              if (null === (next = node.firstChild)) break;
+              parentNode = node;
+              node = next;
+            }
+            for (;;) {
+              if (node === root) break b;
+              parentNode === JSCompiler_temp &&
+                ++indexWithinAnchor === anchorOffset &&
+                (start = length);
+              parentNode === focusNode &&
+                ++indexWithinFocus === selection &&
+                (end = length);
+              if (null !== (next = node.nextSibling)) break;
+              node = parentNode;
+              parentNode = node.parentNode;
+            }
+            node = next;
+          }
+          JSCompiler_temp =
+            -1 === start || -1 === end ? null : { start: start, end: end };
+        } else JSCompiler_temp = null;
+      }
+    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };
+  } else JSCompiler_temp = null;
+  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };
+  _enabled = !1;
+  for (nextEffect = firstChild; null !== nextEffect; )
+    if (
+      ((firstChild = nextEffect),
+      (root = firstChild.child),
+      0 !== (firstChild.subtreeFlags & 1024) && null !== root)
+    )
+      (root.return = firstChild), (nextEffect = root);
+    else
+      for (; null !== nextEffect; ) {
+        firstChild = nextEffect;
+        focusNode = firstChild.alternate;
+        root = firstChild.flags;
+        switch (firstChild.tag) {
+          case 0:
+            break;
+          case 11:
+          case 15:
+            break;
+          case 1:
+            if (0 !== (root & 1024) && null !== focusNode) {
+              root = void 0;
+              JSCompiler_temp = firstChild;
+              anchorOffset = focusNode.memoizedProps;
+              focusNode = focusNode.memoizedState;
+              selection = JSCompiler_temp.stateNode;
+              try {
+                var resolvedPrevProps = resolveClassComponentProps(
+                  JSCompiler_temp.type,
+                  anchorOffset,
+                  JSCompiler_temp.elementType === JSCompiler_temp.type
+                );
+                root = selection.getSnapshotBeforeUpdate(
+                  resolvedPrevProps,
+                  focusNode
+                );
+                selection.__reactInternalSnapshotBeforeUpdate = root;
+              } catch (error) {
+                captureCommitPhaseError(
+                  JSCompiler_temp,
+                  JSCompiler_temp.return,
+                  error
+                );
+              }
+            }
+            break;
+          case 3:
+            if (0 !== (root & 1024))
+              if (
+                ((root = firstChild.stateNode.containerInfo),
+                (JSCompiler_temp = root.nodeType),
+                9 === JSCompiler_temp)
+              )
+                clearContainerSparingly(root);
+              else if (1 === JSCompiler_temp)
+                switch (root.nodeName) {
+                  case "HEAD":
+                  case "HTML":
+                  case "BODY":
+                    clearContainerSparingly(root);
+                    break;
+                  default:
+                    root.textContent = "";
+                }
+            break;
+          case 5:
+          case 26:
+          case 27:
+          case 6:
+          case 4:
+          case 17:
+            break;
+          default:
+            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));
+        }
+        root = firstChild.sibling;
+        if (null !== root) {
+          root.return = firstChild.return;
+          nextEffect = root;
+          break;
+        }
+        nextEffect = firstChild.return;
+      }
+}
+function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {
+  var flags = finishedWork.flags;
+  switch (finishedWork.tag) {
+    case 0:
+    case 11:
+    case 15:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      flags & 4 && commitHookEffectListMount(5, finishedWork);
+      break;
+    case 1:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      if (flags & 4)
+        if (((finishedRoot = finishedWork.stateNode), null === current))
+          try {
+            finishedRoot.componentDidMount();
+          } catch (error) {
+            captureCommitPhaseError(finishedWork, finishedWork.return, error);
+          }
+        else {
+          var prevProps = resolveClassComponentProps(
+            finishedWork.type,
+            current.memoizedProps
+          );
+          current = current.memoizedState;
+          try {
+            finishedRoot.componentDidUpdate(
+              prevProps,
+              current,
+              finishedRoot.__reactInternalSnapshotBeforeUpdate
+            );
+          } catch (error$142) {
+            captureCommitPhaseError(
+              finishedWork,
+              finishedWork.return,
+              error$142
+            );
+          }
+        }
+      flags & 64 && commitClassCallbacks(finishedWork);
+      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);
+      break;
+    case 3:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      if (
+        flags & 64 &&
+        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)
+      ) {
+        current = null;
+        if (null !== finishedWork.child)
+          switch (finishedWork.child.tag) {
+            case 27:
+            case 5:
+              current = finishedWork.child.stateNode;
+              break;
+            case 1:
+              current = finishedWork.child.stateNode;
+          }
+        try {
+          commitCallbacks(finishedRoot, current);
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      }
+      break;
+    case 27:
+      null === current &&
+        flags & 4 &&
+        commitHostSingletonAcquisition(finishedWork);
+    case 26:
+    case 5:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      null === current && flags & 4 && commitHostMount(finishedWork);
+      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);
+      break;
+    case 12:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      break;
+    case 13:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
+      flags & 64 &&
+        ((finishedRoot = finishedWork.memoizedState),
+        null !== finishedRoot &&
+          ((finishedRoot = finishedRoot.dehydrated),
+          null !== finishedRoot &&
+            ((finishedWork = retryDehydratedSuspenseBoundary.bind(
+              null,
+              finishedWork
+            )),
+            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));
+      break;
+    case 22:
+      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;
+      if (!flags) {
+        current =
+          (null !== current && null !== current.memoizedState) ||
+          offscreenSubtreeWasHidden;
+        prevProps = offscreenSubtreeIsHidden;
+        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
+        offscreenSubtreeIsHidden = flags;
+        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden
+          ? recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              0 !== (finishedWork.subtreeFlags & 8772)
+            )
+          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+        offscreenSubtreeIsHidden = prevProps;
+        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
+      }
+      break;
+    case 30:
+      break;
+    default:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+  }
+}
+function detachFiberAfterEffects(fiber) {
+  var alternate = fiber.alternate;
+  null !== alternate &&
+    ((fiber.alternate = null), detachFiberAfterEffects(alternate));
+  fiber.child = null;
+  fiber.deletions = null;
+  fiber.sibling = null;
+  5 === fiber.tag &&
+    ((alternate = fiber.stateNode),
+    null !== alternate && detachDeletedInstance(alternate));
+  fiber.stateNode = null;
+  fiber.return = null;
+  fiber.dependencies = null;
+  fiber.memoizedProps = null;
+  fiber.memoizedState = null;
+  fiber.pendingProps = null;
+  fiber.stateNode = null;
+  fiber.updateQueue = null;
+}
+var hostParent = null,
+  hostParentIsContainer = !1;
+function recursivelyTraverseDeletionEffects(
+  finishedRoot,
+  nearestMountedAncestor,
+  parent
+) {
+  for (parent = parent.child; null !== parent; )
+    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),
+      (parent = parent.sibling);
+}
+function commitDeletionEffectsOnFiber(
+  finishedRoot,
+  nearestMountedAncestor,
+  deletedFiber
+) {
+  if (injectedHook && "function" === typeof injectedHook.onCommitFiberUnmount)
+    try {
+      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);
+    } catch (err) {}
+  switch (deletedFiber.tag) {
+    case 26:
+      offscreenSubtreeWasHidden ||
+        safelyDetachRef(deletedFiber, nearestMountedAncestor);
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      deletedFiber.memoizedState
+        ? deletedFiber.memoizedState.count--
+        : deletedFiber.stateNode &&
+          ((deletedFiber = deletedFiber.stateNode),
+          deletedFiber.parentNode.removeChild(deletedFiber));
+      break;
+    case 27:
+      offscreenSubtreeWasHidden ||
+        safelyDetachRef(deletedFiber, nearestMountedAncestor);
+      var prevHostParent = hostParent,
+        prevHostParentIsContainer = hostParentIsContainer;
+      isSingletonScope(deletedFiber.type) &&
+        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      releaseSingletonInstance(deletedFiber.stateNode);
+      hostParent = prevHostParent;
+      hostParentIsContainer = prevHostParentIsContainer;
+      break;
+    case 5:
+      offscreenSubtreeWasHidden ||
+        safelyDetachRef(deletedFiber, nearestMountedAncestor);
+    case 6:
+      prevHostParent = hostParent;
+      prevHostParentIsContainer = hostParentIsContainer;
+      hostParent = null;
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      hostParent = prevHostParent;
+      hostParentIsContainer = prevHostParentIsContainer;
+      if (null !== hostParent)
+        if (hostParentIsContainer)
+          try {
+            (9 === hostParent.nodeType
+              ? hostParent.body
+              : "HTML" === hostParent.nodeName
+                ? hostParent.ownerDocument.body
+                : hostParent
+            ).removeChild(deletedFiber.stateNode);
+          } catch (error) {
+            captureCommitPhaseError(
+              deletedFiber,
+              nearestMountedAncestor,
+              error
+            );
+          }
+        else
+          try {
+            hostParent.removeChild(deletedFiber.stateNode);
+          } catch (error) {
+            captureCommitPhaseError(
+              deletedFiber,
+              nearestMountedAncestor,
+              error
+            );
+          }
+      break;
+    case 18:
+      null !== hostParent &&
+        (hostParentIsContainer
+          ? ((finishedRoot = hostParent),
+            clearSuspenseBoundary(
+              9 === finishedRoot.nodeType
+                ? finishedRoot.body
+                : "HTML" === finishedRoot.nodeName
+                  ? finishedRoot.ownerDocument.body
+                  : finishedRoot,
+              deletedFiber.stateNode
+            ),
+            retryIfBlockedOn(finishedRoot))
+          : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));
+      break;
+    case 4:
+      prevHostParent = hostParent;
+      prevHostParentIsContainer = hostParentIsContainer;
+      hostParent = deletedFiber.stateNode.containerInfo;
+      hostParentIsContainer = !0;
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      hostParent = prevHostParent;
+      hostParentIsContainer = prevHostParentIsContainer;
+      break;
+    case 0:
+    case 11:
+    case 14:
+    case 15:
+      offscreenSubtreeWasHidden ||
+        commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);
+      offscreenSubtreeWasHidden ||
+        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      break;
+    case 1:
+      offscreenSubtreeWasHidden ||
+        (safelyDetachRef(deletedFiber, nearestMountedAncestor),
+        (prevHostParent = deletedFiber.stateNode),
+        "function" === typeof prevHostParent.componentWillUnmount &&
+          safelyCallComponentWillUnmount(
+            deletedFiber,
+            nearestMountedAncestor,
+            prevHostParent
+          ));
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      break;
+    case 21:
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      break;
+    case 22:
+      offscreenSubtreeWasHidden =
+        (prevHostParent = offscreenSubtreeWasHidden) ||
+        null !== deletedFiber.memoizedState;
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      offscreenSubtreeWasHidden = prevHostParent;
+      break;
+    default:
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+  }
+}
+function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {
+  if (
+    null === finishedWork.memoizedState &&
+    ((finishedRoot = finishedWork.alternate),
+    null !== finishedRoot &&
+      ((finishedRoot = finishedRoot.memoizedState),
+      null !== finishedRoot &&
+        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))
+  )
+    try {
+      retryIfBlockedOn(finishedRoot);
+    } catch (error) {
+      captureCommitPhaseError(finishedWork, finishedWork.return, error);
+    }
+}
+function getRetryCache(finishedWork) {
+  switch (finishedWork.tag) {
+    case 13:
+    case 19:
+      var retryCache = finishedWork.stateNode;
+      null === retryCache &&
+        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());
+      return retryCache;
+    case 22:
+      return (
+        (finishedWork = finishedWork.stateNode),
+        (retryCache = finishedWork._retryCache),
+        null === retryCache &&
+          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),
+        retryCache
+      );
+    default:
+      throw Error(formatProdErrorMessage(435, finishedWork.tag));
+  }
+}
+function attachSuspenseRetryListeners(finishedWork, wakeables) {
+  var retryCache = getRetryCache(finishedWork);
+  wakeables.forEach(function (wakeable) {
+    var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);
+    retryCache.has(wakeable) ||
+      (retryCache.add(wakeable), wakeable.then(retry, retry));
+  });
+}
+function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {
+  var deletions = parentFiber.deletions;
+  if (null !== deletions)
+    for (var i = 0; i < deletions.length; i++) {
+      var childToDelete = deletions[i],
+        root = root$jscomp$0,
+        returnFiber = parentFiber,
+        parent = returnFiber;
+      a: for (; null !== parent; ) {
+        switch (parent.tag) {
+          case 27:
+            if (isSingletonScope(parent.type)) {
+              hostParent = parent.stateNode;
+              hostParentIsContainer = !1;
+              break a;
+            }
+            break;
+          case 5:
+            hostParent = parent.stateNode;
+            hostParentIsContainer = !1;
+            break a;
+          case 3:
+          case 4:
+            hostParent = parent.stateNode.containerInfo;
+            hostParentIsContainer = !0;
+            break a;
+        }
+        parent = parent.return;
+      }
+      if (null === hostParent) throw Error(formatProdErrorMessage(160));
+      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);
+      hostParent = null;
+      hostParentIsContainer = !1;
+      root = childToDelete.alternate;
+      null !== root && (root.return = null);
+      childToDelete.return = null;
+    }
+  if (parentFiber.subtreeFlags & 13878)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),
+        (parentFiber = parentFiber.sibling);
+}
+var currentHoistableRoot = null;
+function commitMutationEffectsOnFiber(finishedWork, root) {
+  var current = finishedWork.alternate,
+    flags = finishedWork.flags;
+  switch (finishedWork.tag) {
+    case 0:
+    case 11:
+    case 14:
+    case 15:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 4 &&
+        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),
+        commitHookEffectListMount(3, finishedWork),
+        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));
+      break;
+    case 1:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 512 &&
+        (offscreenSubtreeWasHidden ||
+          null === current ||
+          safelyDetachRef(current, current.return));
+      flags & 64 &&
+        offscreenSubtreeIsHidden &&
+        ((finishedWork = finishedWork.updateQueue),
+        null !== finishedWork &&
+          ((flags = finishedWork.callbacks),
+          null !== flags &&
+            ((current = finishedWork.shared.hiddenCallbacks),
+            (finishedWork.shared.hiddenCallbacks =
+              null === current ? flags : current.concat(flags)))));
+      break;
+    case 26:
+      var hoistableRoot = currentHoistableRoot;
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 512 &&
+        (offscreenSubtreeWasHidden ||
+          null === current ||
+          safelyDetachRef(current, current.return));
+      if (flags & 4) {
+        var currentResource = null !== current ? current.memoizedState : null;
+        flags = finishedWork.memoizedState;
+        if (null === current)
+          if (null === flags)
+            if (null === finishedWork.stateNode) {
+              a: {
+                flags = finishedWork.type;
+                current = finishedWork.memoizedProps;
+                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;
+                b: switch (flags) {
+                  case "title":
+                    currentResource =
+                      hoistableRoot.getElementsByTagName("title")[0];
+                    if (
+                      !currentResource ||
+                      currentResource[internalHoistableMarker] ||
+                      currentResource[internalInstanceKey] ||
+                      "http://www.w3.org/2000/svg" ===
+                        currentResource.namespaceURI ||
+                      currentResource.hasAttribute("itemprop")
+                    )
+                      (currentResource = hoistableRoot.createElement(flags)),
+                        hoistableRoot.head.insertBefore(
+                          currentResource,
+                          hoistableRoot.querySelector("head > title")
+                        );
+                    setInitialProperties(currentResource, flags, current);
+                    currentResource[internalInstanceKey] = finishedWork;
+                    markNodeAsHoistable(currentResource);
+                    flags = currentResource;
+                    break a;
+                  case "link":
+                    var maybeNodes = getHydratableHoistableCache(
+                      "link",
+                      "href",
+                      hoistableRoot
+                    ).get(flags + (current.href || ""));
+                    if (maybeNodes)
+                      for (var i = 0; i < maybeNodes.length; i++)
+                        if (
+                          ((currentResource = maybeNodes[i]),
+                          currentResource.getAttribute("href") ===
+                            (null == current.href || "" === current.href
+                              ? null
+                              : current.href) &&
+                            currentResource.getAttribute("rel") ===
+                              (null == current.rel ? null : current.rel) &&
+                            currentResource.getAttribute("title") ===
+                              (null == current.title ? null : current.title) &&
+                            currentResource.getAttribute("crossorigin") ===
+                              (null == current.crossOrigin
+                                ? null
+                                : current.crossOrigin))
+                        ) {
+                          maybeNodes.splice(i, 1);
+                          break b;
+                        }
+                    currentResource = hoistableRoot.createElement(flags);
+                    setInitialProperties(currentResource, flags, current);
+                    hoistableRoot.head.appendChild(currentResource);
+                    break;
+                  case "meta":
+                    if (
+                      (maybeNodes = getHydratableHoistableCache(
+                        "meta",
+                        "content",
+                        hoistableRoot
+                      ).get(flags + (current.content || "")))
+                    )
+                      for (i = 0; i < maybeNodes.length; i++)
+                        if (
+                          ((currentResource = maybeNodes[i]),
+                          currentResource.getAttribute("content") ===
+                            (null == current.content
+                              ? null
+                              : "" + current.content) &&
+                            currentResource.getAttribute("name") ===
+                              (null == current.name ? null : current.name) &&
+                            currentResource.getAttribute("property") ===
+                              (null == current.property
+                                ? null
+                                : current.property) &&
+                            currentResource.getAttribute("http-equiv") ===
+                              (null == current.httpEquiv
+                                ? null
+                                : current.httpEquiv) &&
+                            currentResource.getAttribute("charset") ===
+                              (null == current.charSet
+                                ? null
+                                : current.charSet))
+                        ) {
+                          maybeNodes.splice(i, 1);
+                          break b;
+                        }
+                    currentResource = hoistableRoot.createElement(flags);
+                    setInitialProperties(currentResource, flags, current);
+                    hoistableRoot.head.appendChild(currentResource);
+                    break;
+                  default:
+                    throw Error(formatProdErrorMessage(468, flags));
+                }
+                currentResource[internalInstanceKey] = finishedWork;
+                markNodeAsHoistable(currentResource);
+                flags = currentResource;
+              }
+              finishedWork.stateNode = flags;
+            } else
+              mountHoistable(
+                hoistableRoot,
+                finishedWork.type,
+                finishedWork.stateNode
+              );
+          else
+            finishedWork.stateNode = acquireResource(
+              hoistableRoot,
+              flags,
+              finishedWork.memoizedProps
+            );
+        else
+          currentResource !== flags
+            ? (null === currentResource
+                ? null !== current.stateNode &&
+                  ((current = current.stateNode),
+                  current.parentNode.removeChild(current))
+                : currentResource.count--,
+              null === flags
+                ? mountHoistable(
+                    hoistableRoot,
+                    finishedWork.type,
+                    finishedWork.stateNode
+                  )
+                : acquireResource(
+                    hoistableRoot,
+                    flags,
+                    finishedWork.memoizedProps
+                  ))
+            : null === flags &&
+              null !== finishedWork.stateNode &&
+              commitHostUpdate(
+                finishedWork,
+                finishedWork.memoizedProps,
+                current.memoizedProps
+              );
+      }
+      break;
+    case 27:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 512 &&
+        (offscreenSubtreeWasHidden ||
+          null === current ||
+          safelyDetachRef(current, current.return));
+      null !== current &&
+        flags & 4 &&
+        commitHostUpdate(
+          finishedWork,
+          finishedWork.memoizedProps,
+          current.memoizedProps
+        );
+      break;
+    case 5:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 512 &&
+        (offscreenSubtreeWasHidden ||
+          null === current ||
+          safelyDetachRef(current, current.return));
+      if (finishedWork.flags & 32) {
+        hoistableRoot = finishedWork.stateNode;
+        try {
+          setTextContent(hoistableRoot, "");
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      }
+      flags & 4 &&
+        null != finishedWork.stateNode &&
+        ((hoistableRoot = finishedWork.memoizedProps),
+        commitHostUpdate(
+          finishedWork,
+          hoistableRoot,
+          null !== current ? current.memoizedProps : hoistableRoot
+        ));
+      flags & 1024 && (needsFormReset = !0);
+      break;
+    case 6:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      if (flags & 4) {
+        if (null === finishedWork.stateNode)
+          throw Error(formatProdErrorMessage(162));
+        flags = finishedWork.memoizedProps;
+        current = finishedWork.stateNode;
+        try {
+          current.nodeValue = flags;
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      }
+      break;
+    case 3:
+      tagCaches = null;
+      hoistableRoot = currentHoistableRoot;
+      currentHoistableRoot = getHoistableRoot(root.containerInfo);
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      currentHoistableRoot = hoistableRoot;
+      commitReconciliationEffects(finishedWork);
+      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)
+        try {
+          retryIfBlockedOn(root.containerInfo);
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      needsFormReset &&
+        ((needsFormReset = !1), recursivelyResetForms(finishedWork));
+      break;
+    case 4:
+      flags = currentHoistableRoot;
+      currentHoistableRoot = getHoistableRoot(
+        finishedWork.stateNode.containerInfo
+      );
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      currentHoistableRoot = flags;
+      break;
+    case 12:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      break;
+    case 13:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      finishedWork.child.flags & 8192 &&
+        (null !== finishedWork.memoizedState) !==
+          (null !== current && null !== current.memoizedState) &&
+        (globalMostRecentFallbackTime = now());
+      flags & 4 &&
+        ((flags = finishedWork.updateQueue),
+        null !== flags &&
+          ((finishedWork.updateQueue = null),
+          attachSuspenseRetryListeners(finishedWork, flags)));
+      break;
+    case 22:
+      hoistableRoot = null !== finishedWork.memoizedState;
+      var wasHidden = null !== current && null !== current.memoizedState,
+        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,
+        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
+      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;
+      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
+      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;
+      commitReconciliationEffects(finishedWork);
+      if (flags & 8192)
+        a: for (
+          root = finishedWork.stateNode,
+            root._visibility = hoistableRoot
+              ? root._visibility & -2
+              : root._visibility | 1,
+            hoistableRoot &&
+              (null === current ||
+                wasHidden ||
+                offscreenSubtreeIsHidden ||
+                offscreenSubtreeWasHidden ||
+                recursivelyTraverseDisappearLayoutEffects(finishedWork)),
+            current = null,
+            root = finishedWork;
+          ;
+
+        ) {
+          if (5 === root.tag || 26 === root.tag) {
+            if (null === current) {
+              wasHidden = current = root;
+              try {
+                if (((currentResource = wasHidden.stateNode), hoistableRoot))
+                  (maybeNodes = currentResource.style),
+                    "function" === typeof maybeNodes.setProperty
+                      ? maybeNodes.setProperty("display", "none", "important")
+                      : (maybeNodes.display = "none");
+                else {
+                  i = wasHidden.stateNode;
+                  var styleProp = wasHidden.memoizedProps.style,
+                    display =
+                      void 0 !== styleProp &&
+                      null !== styleProp &&
+                      styleProp.hasOwnProperty("display")
+                        ? styleProp.display
+                        : null;
+                  i.style.display =
+                    null == display || "boolean" === typeof display
+                      ? ""
+                      : ("" + display).trim();
+                }
+              } catch (error) {
+                captureCommitPhaseError(wasHidden, wasHidden.return, error);
+              }
+            }
+          } else if (6 === root.tag) {
+            if (null === current) {
+              wasHidden = root;
+              try {
+                wasHidden.stateNode.nodeValue = hoistableRoot
+                  ? ""
+                  : wasHidden.memoizedProps;
+              } catch (error) {
+                captureCommitPhaseError(wasHidden, wasHidden.return, error);
+              }
+            }
+          } else if (
+            ((22 !== root.tag && 23 !== root.tag) ||
+              null === root.memoizedState ||
+              root === finishedWork) &&
+            null !== root.child
+          ) {
+            root.child.return = root;
+            root = root.child;
+            continue;
+          }
+          if (root === finishedWork) break a;
+          for (; null === root.sibling; ) {
+            if (null === root.return || root.return === finishedWork) break a;
+            current === root && (current = null);
+            root = root.return;
+          }
+          current === root && (current = null);
+          root.sibling.return = root.return;
+          root = root.sibling;
+        }
+      flags & 4 &&
+        ((flags = finishedWork.updateQueue),
+        null !== flags &&
+          ((current = flags.retryQueue),
+          null !== current &&
+            ((flags.retryQueue = null),
+            attachSuspenseRetryListeners(finishedWork, current))));
+      break;
+    case 19:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 4 &&
+        ((flags = finishedWork.updateQueue),
+        null !== flags &&
+          ((finishedWork.updateQueue = null),
+          attachSuspenseRetryListeners(finishedWork, flags)));
+      break;
+    case 30:
+      break;
+    case 21:
+      break;
+    default:
+      recursivelyTraverseMutationEffects(root, finishedWork),
+        commitReconciliationEffects(finishedWork);
+  }
+}
+function commitReconciliationEffects(finishedWork) {
+  var flags = finishedWork.flags;
+  if (flags & 2) {
+    try {
+      for (
+        var hostParentFiber, parentFiber = finishedWork.return;
+        null !== parentFiber;
+
+      ) {
+        if (isHostParent(parentFiber)) {
+          hostParentFiber = parentFiber;
+          break;
+        }
+        parentFiber = parentFiber.return;
+      }
+      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));
+      switch (hostParentFiber.tag) {
+        case 27:
+          var parent = hostParentFiber.stateNode,
+            before = getHostSibling(finishedWork);
+          insertOrAppendPlacementNode(finishedWork, before, parent);
+          break;
+        case 5:
+          var parent$144 = hostParentFiber.stateNode;
+          hostParentFiber.flags & 32 &&
+            (setTextContent(parent$144, ""), (hostParentFiber.flags &= -33));
+          var before$145 = getHostSibling(finishedWork);
+          insertOrAppendPlacementNode(finishedWork, before$145, parent$144);
+          break;
+        case 3:
+        case 4:
+          var parent$146 = hostParentFiber.stateNode.containerInfo,
+            before$147 = getHostSibling(finishedWork);
+          insertOrAppendPlacementNodeIntoContainer(
+            finishedWork,
+            before$147,
+            parent$146
+          );
+          break;
+        default:
+          throw Error(formatProdErrorMessage(161));
+      }
+    } catch (error) {
+      captureCommitPhaseError(finishedWork, finishedWork.return, error);
+    }
+    finishedWork.flags &= -3;
+  }
+  flags & 4096 && (finishedWork.flags &= -4097);
+}
+function recursivelyResetForms(parentFiber) {
+  if (parentFiber.subtreeFlags & 1024)
+    for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+      var fiber = parentFiber;
+      recursivelyResetForms(fiber);
+      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();
+      parentFiber = parentFiber.sibling;
+    }
+}
+function recursivelyTraverseLayoutEffects(root, parentFiber) {
+  if (parentFiber.subtreeFlags & 8772)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),
+        (parentFiber = parentFiber.sibling);
+}
+function recursivelyTraverseDisappearLayoutEffects(parentFiber) {
+  for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+    var finishedWork = parentFiber;
+    switch (finishedWork.tag) {
+      case 0:
+      case 11:
+      case 14:
+      case 15:
+        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      case 1:
+        safelyDetachRef(finishedWork, finishedWork.return);
+        var instance = finishedWork.stateNode;
+        "function" === typeof instance.componentWillUnmount &&
+          safelyCallComponentWillUnmount(
+            finishedWork,
+            finishedWork.return,
+            instance
+          );
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      case 27:
+        releaseSingletonInstance(finishedWork.stateNode);
+      case 26:
+      case 5:
+        safelyDetachRef(finishedWork, finishedWork.return);
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      case 22:
+        null === finishedWork.memoizedState &&
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      case 30:
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      default:
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+    }
+    parentFiber = parentFiber.sibling;
+  }
+}
+function recursivelyTraverseReappearLayoutEffects(
+  finishedRoot$jscomp$0,
+  parentFiber,
+  includeWorkInProgressEffects
+) {
+  includeWorkInProgressEffects =
+    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);
+  for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+    var current = parentFiber.alternate,
+      finishedRoot = finishedRoot$jscomp$0,
+      finishedWork = parentFiber,
+      flags = finishedWork.flags;
+    switch (finishedWork.tag) {
+      case 0:
+      case 11:
+      case 15:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+        commitHookEffectListMount(4, finishedWork);
+        break;
+      case 1:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+        current = finishedWork;
+        finishedRoot = current.stateNode;
+        if ("function" === typeof finishedRoot.componentDidMount)
+          try {
+            finishedRoot.componentDidMount();
+          } catch (error) {
+            captureCommitPhaseError(current, current.return, error);
+          }
+        current = finishedWork;
+        finishedRoot = current.updateQueue;
+        if (null !== finishedRoot) {
+          var instance = current.stateNode;
+          try {
+            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;
+            if (null !== hiddenCallbacks)
+              for (
+                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;
+                finishedRoot < hiddenCallbacks.length;
+                finishedRoot++
+              )
+                callCallback(hiddenCallbacks[finishedRoot], instance);
+          } catch (error) {
+            captureCommitPhaseError(current, current.return, error);
+          }
+        }
+        includeWorkInProgressEffects &&
+          flags & 64 &&
+          commitClassCallbacks(finishedWork);
+        safelyAttachRef(finishedWork, finishedWork.return);
+        break;
+      case 27:
+        commitHostSingletonAcquisition(finishedWork);
+      case 26:
+      case 5:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+        includeWorkInProgressEffects &&
+          null === current &&
+          flags & 4 &&
+          commitHostMount(finishedWork);
+        safelyAttachRef(finishedWork, finishedWork.return);
+        break;
+      case 12:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+        break;
+      case 13:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+        includeWorkInProgressEffects &&
+          flags & 4 &&
+          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
+        break;
+      case 22:
+        null === finishedWork.memoizedState &&
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+        safelyAttachRef(finishedWork, finishedWork.return);
+        break;
+      case 30:
+        break;
+      default:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+    }
+    parentFiber = parentFiber.sibling;
+  }
+}
+function commitOffscreenPassiveMountEffects(current, finishedWork) {
+  var previousCache = null;
+  null !== current &&
+    null !== current.memoizedState &&
+    null !== current.memoizedState.cachePool &&
+    (previousCache = current.memoizedState.cachePool.pool);
+  current = null;
+  null !== finishedWork.memoizedState &&
+    null !== finishedWork.memoizedState.cachePool &&
+    (current = finishedWork.memoizedState.cachePool.pool);
+  current !== previousCache &&
+    (null != current && current.refCount++,
+    null != previousCache && releaseCache(previousCache));
+}
+function commitCachePassiveMountEffect(current, finishedWork) {
+  current = null;
+  null !== finishedWork.alternate &&
+    (current = finishedWork.alternate.memoizedState.cache);
+  finishedWork = finishedWork.memoizedState.cache;
+  finishedWork !== current &&
+    (finishedWork.refCount++, null != current && releaseCache(current));
+}
+function recursivelyTraversePassiveMountEffects(
+  root,
+  parentFiber,
+  committedLanes,
+  committedTransitions
+) {
+  if (parentFiber.subtreeFlags & 10256)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      commitPassiveMountOnFiber(
+        root,
+        parentFiber,
+        committedLanes,
+        committedTransitions
+      ),
+        (parentFiber = parentFiber.sibling);
+}
+function commitPassiveMountOnFiber(
+  finishedRoot,
+  finishedWork,
+  committedLanes,
+  committedTransitions
+) {
+  var flags = finishedWork.flags;
+  switch (finishedWork.tag) {
+    case 0:
+    case 11:
+    case 15:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      flags & 2048 && commitHookEffectListMount(9, finishedWork);
+      break;
+    case 1:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      break;
+    case 3:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      flags & 2048 &&
+        ((finishedRoot = null),
+        null !== finishedWork.alternate &&
+          (finishedRoot = finishedWork.alternate.memoizedState.cache),
+        (finishedWork = finishedWork.memoizedState.cache),
+        finishedWork !== finishedRoot &&
+          (finishedWork.refCount++,
+          null != finishedRoot && releaseCache(finishedRoot)));
+      break;
+    case 12:
+      if (flags & 2048) {
+        recursivelyTraversePassiveMountEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions
+        );
+        finishedRoot = finishedWork.stateNode;
+        try {
+          var _finishedWork$memoize2 = finishedWork.memoizedProps,
+            id = _finishedWork$memoize2.id,
+            onPostCommit = _finishedWork$memoize2.onPostCommit;
+          "function" === typeof onPostCommit &&
+            onPostCommit(
+              id,
+              null === finishedWork.alternate ? "mount" : "update",
+              finishedRoot.passiveEffectDuration,
+              -0
+            );
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      } else
+        recursivelyTraversePassiveMountEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions
+        );
+      break;
+    case 13:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      break;
+    case 23:
+      break;
+    case 22:
+      _finishedWork$memoize2 = finishedWork.stateNode;
+      id = finishedWork.alternate;
+      null !== finishedWork.memoizedState
+        ? _finishedWork$memoize2._visibility & 2
+          ? recursivelyTraversePassiveMountEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions
+            )
+          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)
+        : _finishedWork$memoize2._visibility & 2
+          ? recursivelyTraversePassiveMountEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions
+            )
+          : ((_finishedWork$memoize2._visibility |= 2),
+            recursivelyTraverseReconnectPassiveEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions,
+              0 !== (finishedWork.subtreeFlags & 10256)
+            ));
+      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);
+      break;
+    case 24:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      flags & 2048 &&
+        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+      break;
+    default:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+  }
+}
+function recursivelyTraverseReconnectPassiveEffects(
+  finishedRoot$jscomp$0,
+  parentFiber,
+  committedLanes$jscomp$0,
+  committedTransitions$jscomp$0,
+  includeWorkInProgressEffects
+) {
+  includeWorkInProgressEffects =
+    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 10256);
+  for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+    var finishedRoot = finishedRoot$jscomp$0,
+      finishedWork = parentFiber,
+      committedLanes = committedLanes$jscomp$0,
+      committedTransitions = committedTransitions$jscomp$0,
+      flags = finishedWork.flags;
+    switch (finishedWork.tag) {
+      case 0:
+      case 11:
+      case 15:
+        recursivelyTraverseReconnectPassiveEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions,
+          includeWorkInProgressEffects
+        );
+        commitHookEffectListMount(8, finishedWork);
+        break;
+      case 23:
+        break;
+      case 22:
+        var instance = finishedWork.stateNode;
+        null !== finishedWork.memoizedState
+          ? instance._visibility & 2
+            ? recursivelyTraverseReconnectPassiveEffects(
+                finishedRoot,
+                finishedWork,
+                committedLanes,
+                committedTransitions,
+                includeWorkInProgressEffects
+              )
+            : recursivelyTraverseAtomicPassiveEffects(
+                finishedRoot,
+                finishedWork
+              )
+          : ((instance._visibility |= 2),
+            recursivelyTraverseReconnectPassiveEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions,
+              includeWorkInProgressEffects
+            ));
+        includeWorkInProgressEffects &&
+          flags & 2048 &&
+          commitOffscreenPassiveMountEffects(
+            finishedWork.alternate,
+            finishedWork
+          );
+        break;
+      case 24:
+        recursivelyTraverseReconnectPassiveEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions,
+          includeWorkInProgressEffects
+        );
+        includeWorkInProgressEffects &&
+          flags & 2048 &&
+          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+        break;
+      default:
+        recursivelyTraverseReconnectPassiveEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions,
+          includeWorkInProgressEffects
+        );
+    }
+    parentFiber = parentFiber.sibling;
+  }
+}
+function recursivelyTraverseAtomicPassiveEffects(
+  finishedRoot$jscomp$0,
+  parentFiber
+) {
+  if (parentFiber.subtreeFlags & 10256)
+    for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+      var finishedRoot = finishedRoot$jscomp$0,
+        finishedWork = parentFiber,
+        flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 22:
+          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);
+          flags & 2048 &&
+            commitOffscreenPassiveMountEffects(
+              finishedWork.alternate,
+              finishedWork
+            );
+          break;
+        case 24:
+          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);
+          flags & 2048 &&
+            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+          break;
+        default:
+          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);
+      }
+      parentFiber = parentFiber.sibling;
+    }
+}
+var suspenseyCommitFlag = 8192;
+function recursivelyAccumulateSuspenseyCommit(parentFiber) {
+  if (parentFiber.subtreeFlags & suspenseyCommitFlag)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      accumulateSuspenseyCommitOnFiber(parentFiber),
+        (parentFiber = parentFiber.sibling);
+}
+function accumulateSuspenseyCommitOnFiber(fiber) {
+  switch (fiber.tag) {
+    case 26:
+      recursivelyAccumulateSuspenseyCommit(fiber);
+      fiber.flags & suspenseyCommitFlag &&
+        null !== fiber.memoizedState &&
+        suspendResource(
+          currentHoistableRoot,
+          fiber.memoizedState,
+          fiber.memoizedProps
+        );
+      break;
+    case 5:
+      recursivelyAccumulateSuspenseyCommit(fiber);
+      break;
+    case 3:
+    case 4:
+      var previousHoistableRoot = currentHoistableRoot;
+      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);
+      recursivelyAccumulateSuspenseyCommit(fiber);
+      currentHoistableRoot = previousHoistableRoot;
+      break;
+    case 22:
+      null === fiber.memoizedState &&
+        ((previousHoistableRoot = fiber.alternate),
+        null !== previousHoistableRoot &&
+        null !== previousHoistableRoot.memoizedState
+          ? ((previousHoistableRoot = suspenseyCommitFlag),
+            (suspenseyCommitFlag = 16777216),
+            recursivelyAccumulateSuspenseyCommit(fiber),
+            (suspenseyCommitFlag = previousHoistableRoot))
+          : recursivelyAccumulateSuspenseyCommit(fiber));
+      break;
+    default:
+      recursivelyAccumulateSuspenseyCommit(fiber);
+  }
+}
+function detachAlternateSiblings(parentFiber) {
+  var previousFiber = parentFiber.alternate;
+  if (
+    null !== previousFiber &&
+    ((parentFiber = previousFiber.child), null !== parentFiber)
+  ) {
+    previousFiber.child = null;
+    do
+      (previousFiber = parentFiber.sibling),
+        (parentFiber.sibling = null),
+        (parentFiber = previousFiber);
+    while (null !== parentFiber);
+  }
+}
+function recursivelyTraversePassiveUnmountEffects(parentFiber) {
+  var deletions = parentFiber.deletions;
+  if (0 !== (parentFiber.flags & 16)) {
+    if (null !== deletions)
+      for (var i = 0; i < deletions.length; i++) {
+        var childToDelete = deletions[i];
+        nextEffect = childToDelete;
+        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+          childToDelete,
+          parentFiber
+        );
+      }
+    detachAlternateSiblings(parentFiber);
+  }
+  if (parentFiber.subtreeFlags & 10256)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      commitPassiveUnmountOnFiber(parentFiber),
+        (parentFiber = parentFiber.sibling);
+}
+function commitPassiveUnmountOnFiber(finishedWork) {
+  switch (finishedWork.tag) {
+    case 0:
+    case 11:
+    case 15:
+      recursivelyTraversePassiveUnmountEffects(finishedWork);
+      finishedWork.flags & 2048 &&
+        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);
+      break;
+    case 3:
+      recursivelyTraversePassiveUnmountEffects(finishedWork);
+      break;
+    case 12:
+      recursivelyTraversePassiveUnmountEffects(finishedWork);
+      break;
+    case 22:
+      var instance = finishedWork.stateNode;
+      null !== finishedWork.memoizedState &&
+      instance._visibility & 2 &&
+      (null === finishedWork.return || 13 !== finishedWork.return.tag)
+        ? ((instance._visibility &= -3),
+          recursivelyTraverseDisconnectPassiveEffects(finishedWork))
+        : recursivelyTraversePassiveUnmountEffects(finishedWork);
+      break;
+    default:
+      recursivelyTraversePassiveUnmountEffects(finishedWork);
+  }
+}
+function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {
+  var deletions = parentFiber.deletions;
+  if (0 !== (parentFiber.flags & 16)) {
+    if (null !== deletions)
+      for (var i = 0; i < deletions.length; i++) {
+        var childToDelete = deletions[i];
+        nextEffect = childToDelete;
+        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+          childToDelete,
+          parentFiber
+        );
+      }
+    detachAlternateSiblings(parentFiber);
+  }
+  for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+    deletions = parentFiber;
+    switch (deletions.tag) {
+      case 0:
+      case 11:
+      case 15:
+        commitHookEffectListUnmount(8, deletions, deletions.return);
+        recursivelyTraverseDisconnectPassiveEffects(deletions);
+        break;
+      case 22:
+        i = deletions.stateNode;
+        i._visibility & 2 &&
+          ((i._visibility &= -3),
+          recursivelyTraverseDisconnectPassiveEffects(deletions));
+        break;
+      default:
+        recursivelyTraverseDisconnectPassiveEffects(deletions);
+    }
+    parentFiber = parentFiber.sibling;
+  }
+}
+function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+  deletedSubtreeRoot,
+  nearestMountedAncestor
+) {
+  for (; null !== nextEffect; ) {
+    var fiber = nextEffect;
+    switch (fiber.tag) {
+      case 0:
+      case 11:
+      case 15:
+        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);
+        break;
+      case 23:
+      case 22:
+        if (
+          null !== fiber.memoizedState &&
+          null !== fiber.memoizedState.cachePool
+        ) {
+          var cache = fiber.memoizedState.cachePool.pool;
+          null != cache && cache.refCount++;
+        }
+        break;
+      case 24:
+        releaseCache(fiber.memoizedState.cache);
+    }
+    cache = fiber.child;
+    if (null !== cache) (cache.return = fiber), (nextEffect = cache);
+    else
+      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {
+        cache = nextEffect;
+        var sibling = cache.sibling,
+          returnFiber = cache.return;
+        detachFiberAfterEffects(cache);
+        if (cache === fiber) {
+          nextEffect = null;
+          break a;
+        }
+        if (null !== sibling) {
+          sibling.return = returnFiber;
+          nextEffect = sibling;
+          break a;
+        }
+        nextEffect = returnFiber;
+      }
+  }
+}
+var DefaultAsyncDispatcher = {
+    getCacheForType: function (resourceType) {
+      var cache = readContext(CacheContext),
+        cacheForType = cache.data.get(resourceType);
+      void 0 === cacheForType &&
+        ((cacheForType = resourceType()),
+        cache.data.set(resourceType, cacheForType));
+      return cacheForType;
+    }
+  },
+  PossiblyWeakMap = "function" === typeof WeakMap ? WeakMap : Map,
+  executionContext = 0,
+  workInProgressRoot = null,
+  workInProgress = null,
+  workInProgressRootRenderLanes = 0,
+  workInProgressSuspendedReason = 0,
+  workInProgressThrownValue = null,
+  workInProgressRootDidSkipSuspendedSiblings = !1,
+  workInProgressRootIsPrerendering = !1,
+  workInProgressRootDidAttachPingListener = !1,
+  entangledRenderLanes = 0,
+  workInProgressRootExitStatus = 0,
+  workInProgressRootSkippedLanes = 0,
+  workInProgressRootInterleavedUpdatedLanes = 0,
+  workInProgressRootPingedLanes = 0,
+  workInProgressDeferredLane = 0,
+  workInProgressSuspendedRetryLanes = 0,
+  workInProgressRootConcurrentErrors = null,
+  workInProgressRootRecoverableErrors = null,
+  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,
+  globalMostRecentFallbackTime = 0,
+  workInProgressRootRenderTargetTime = Infinity,
+  workInProgressTransitions = null,
+  legacyErrorBoundariesThatAlreadyFailed = null,
+  pendingEffectsStatus = 0,
+  pendingEffectsRoot = null,
+  pendingFinishedWork = null,
+  pendingEffectsLanes = 0,
+  pendingEffectsRemainingLanes = 0,
+  pendingPassiveTransitions = null,
+  pendingRecoverableErrors = null,
+  nestedUpdateCount = 0,
+  rootWithNestedUpdates = null;
+function requestUpdateLane() {
+  if (0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes)
+    return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;
+  if (null !== ReactSharedInternals.T) {
+    var actionScopeLane = currentEntangledLane;
+    return 0 !== actionScopeLane ? actionScopeLane : requestTransitionLane();
+  }
+  return resolveUpdatePriority();
+}
+function requestDeferredLane() {
+  0 === workInProgressDeferredLane &&
+    (workInProgressDeferredLane =
+      0 === (workInProgressRootRenderLanes & 536870912) || isHydrating
+        ? claimNextTransitionLane()
+        : 536870912);
+  var suspenseHandler = suspenseHandlerStackCursor.current;
+  null !== suspenseHandler && (suspenseHandler.flags |= 32);
+  return workInProgressDeferredLane;
+}
+function scheduleUpdateOnFiber(root, fiber, lane) {
+  if (
+    (root === workInProgressRoot &&
+      (2 === workInProgressSuspendedReason ||
+        9 === workInProgressSuspendedReason)) ||
+    null !== root.cancelPendingCommit
+  )
+    prepareFreshStack(root, 0),
+      markRootSuspended(
+        root,
+        workInProgressRootRenderLanes,
+        workInProgressDeferredLane,
+        !1
+      );
+  markRootUpdated$1(root, lane);
+  if (0 === (executionContext & 2) || root !== workInProgressRoot)
+    root === workInProgressRoot &&
+      (0 === (executionContext & 2) &&
+        (workInProgressRootInterleavedUpdatedLanes |= lane),
+      4 === workInProgressRootExitStatus &&
+        markRootSuspended(
+          root,
+          workInProgressRootRenderLanes,
+          workInProgressDeferredLane,
+          !1
+        )),
+      ensureRootIsScheduled(root);
+}
+function performWorkOnRoot(root$jscomp$0, lanes, forceSync) {
+  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));
+  var shouldTimeSlice =
+      (!forceSync &&
+        0 === (lanes & 124) &&
+        0 === (lanes & root$jscomp$0.expiredLanes)) ||
+      checkIfRootIsPrerendering(root$jscomp$0, lanes),
+    exitStatus = shouldTimeSlice
+      ? renderRootConcurrent(root$jscomp$0, lanes)
+      : renderRootSync(root$jscomp$0, lanes, !0),
+    renderWasConcurrent = shouldTimeSlice;
+  do {
+    if (0 === exitStatus) {
+      workInProgressRootIsPrerendering &&
+        !shouldTimeSlice &&
+        markRootSuspended(root$jscomp$0, lanes, 0, !1);
+      break;
+    } else {
+      forceSync = root$jscomp$0.current.alternate;
+      if (
+        renderWasConcurrent &&
+        !isRenderConsistentWithExternalStores(forceSync)
+      ) {
+        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);
+        renderWasConcurrent = !1;
+        continue;
+      }
+      if (2 === exitStatus) {
+        renderWasConcurrent = lanes;
+        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)
+          var JSCompiler_inline_result = 0;
+        else
+          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),
+            (JSCompiler_inline_result =
+              0 !== JSCompiler_inline_result
+                ? JSCompiler_inline_result
+                : JSCompiler_inline_result & 536870912
+                  ? 536870912
+                  : 0);
+        if (0 !== JSCompiler_inline_result) {
+          lanes = JSCompiler_inline_result;
+          a: {
+            var root = root$jscomp$0;
+            exitStatus = workInProgressRootConcurrentErrors;
+            var wasRootDehydrated = root.current.memoizedState.isDehydrated;
+            wasRootDehydrated &&
+              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);
+            JSCompiler_inline_result = renderRootSync(
+              root,
+              JSCompiler_inline_result,
+              !1
+            );
+            if (2 !== JSCompiler_inline_result) {
+              if (
+                workInProgressRootDidAttachPingListener &&
+                !wasRootDehydrated
+              ) {
+                root.errorRecoveryDisabledLanes |= renderWasConcurrent;
+                workInProgressRootInterleavedUpdatedLanes |=
+                  renderWasConcurrent;
+                exitStatus = 4;
+                break a;
+              }
+              renderWasConcurrent = workInProgressRootRecoverableErrors;
+              workInProgressRootRecoverableErrors = exitStatus;
+              null !== renderWasConcurrent &&
+                (null === workInProgressRootRecoverableErrors
+                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)
+                  : workInProgressRootRecoverableErrors.push.apply(
+                      workInProgressRootRecoverableErrors,
+                      renderWasConcurrent
+                    ));
+            }
+            exitStatus = JSCompiler_inline_result;
+          }
+          renderWasConcurrent = !1;
+          if (2 !== exitStatus) continue;
+        }
+      }
+      if (1 === exitStatus) {
+        prepareFreshStack(root$jscomp$0, 0);
+        markRootSuspended(root$jscomp$0, lanes, 0, !0);
+        break;
+      }
+      a: {
+        shouldTimeSlice = root$jscomp$0;
+        renderWasConcurrent = exitStatus;
+        switch (renderWasConcurrent) {
+          case 0:
+          case 1:
+            throw Error(formatProdErrorMessage(345));
+          case 4:
+            if ((lanes & 4194048) !== lanes) break;
+          case 6:
+            markRootSuspended(
+              shouldTimeSlice,
+              lanes,
+              workInProgressDeferredLane,
+              !workInProgressRootDidSkipSuspendedSiblings
+            );
+            break a;
+          case 2:
+            workInProgressRootRecoverableErrors = null;
+            break;
+          case 3:
+          case 5:
+            break;
+          default:
+            throw Error(formatProdErrorMessage(329));
+        }
+        if (
+          (lanes & 62914560) === lanes &&
+          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),
+          10 < exitStatus)
+        ) {
+          markRootSuspended(
+            shouldTimeSlice,
+            lanes,
+            workInProgressDeferredLane,
+            !workInProgressRootDidSkipSuspendedSiblings
+          );
+          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;
+          shouldTimeSlice.timeoutHandle = scheduleTimeout(
+            commitRootWhenReady.bind(
+              null,
+              shouldTimeSlice,
+              forceSync,
+              workInProgressRootRecoverableErrors,
+              workInProgressTransitions,
+              workInProgressRootDidIncludeRecursiveRenderUpdate,
+              lanes,
+              workInProgressDeferredLane,
+              workInProgressRootInterleavedUpdatedLanes,
+              workInProgressSuspendedRetryLanes,
+              workInProgressRootDidSkipSuspendedSiblings,
+              renderWasConcurrent,
+              2,
+              -0,
+              0
+            ),
+            exitStatus
+          );
+          break a;
+        }
+        commitRootWhenReady(
+          shouldTimeSlice,
+          forceSync,
+          workInProgressRootRecoverableErrors,
+          workInProgressTransitions,
+          workInProgressRootDidIncludeRecursiveRenderUpdate,
+          lanes,
+          workInProgressDeferredLane,
+          workInProgressRootInterleavedUpdatedLanes,
+          workInProgressSuspendedRetryLanes,
+          workInProgressRootDidSkipSuspendedSiblings,
+          renderWasConcurrent,
+          0,
+          -0,
+          0
+        );
+      }
+    }
+    break;
+  } while (1);
+  ensureRootIsScheduled(root$jscomp$0);
+}
+function commitRootWhenReady(
+  root,
+  finishedWork,
+  recoverableErrors,
+  transitions,
+  didIncludeRenderPhaseUpdate,
+  lanes,
+  spawnedLane,
+  updatedLanes,
+  suspendedRetryLanes,
+  didSkipSuspendedSiblings,
+  exitStatus,
+  suspendedCommitReason,
+  completedRenderStartTime,
+  completedRenderEndTime
+) {
+  root.timeoutHandle = -1;
+  suspendedCommitReason = finishedWork.subtreeFlags;
+  if (
+    suspendedCommitReason & 8192 ||
+    16785408 === (suspendedCommitReason & 16785408)
+  )
+    if (
+      ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),
+      accumulateSuspenseyCommitOnFiber(finishedWork),
+      (suspendedCommitReason = waitForCommitToBeReady()),
+      null !== suspendedCommitReason)
+    ) {
+      root.cancelPendingCommit = suspendedCommitReason(
+        commitRoot.bind(
+          null,
+          root,
+          finishedWork,
+          lanes,
+          recoverableErrors,
+          transitions,
+          didIncludeRenderPhaseUpdate,
+          spawnedLane,
+          updatedLanes,
+          suspendedRetryLanes,
+          exitStatus,
+          1,
+          completedRenderStartTime,
+          completedRenderEndTime
+        )
+      );
+      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);
+      return;
+    }
+  commitRoot(
+    root,
+    finishedWork,
+    lanes,
+    recoverableErrors,
+    transitions,
+    didIncludeRenderPhaseUpdate,
+    spawnedLane,
+    updatedLanes,
+    suspendedRetryLanes
+  );
+}
+function isRenderConsistentWithExternalStores(finishedWork) {
+  for (var node = finishedWork; ; ) {
+    var tag = node.tag;
+    if (
+      (0 === tag || 11 === tag || 15 === tag) &&
+      node.flags & 16384 &&
+      ((tag = node.updateQueue),
+      null !== tag && ((tag = tag.stores), null !== tag))
+    )
+      for (var i = 0; i < tag.length; i++) {
+        var check = tag[i],
+          getSnapshot = check.getSnapshot;
+        check = check.value;
+        try {
+          if (!objectIs(getSnapshot(), check)) return !1;
+        } catch (error) {
+          return !1;
+        }
+      }
+    tag = node.child;
+    if (node.subtreeFlags & 16384 && null !== tag)
+      (tag.return = node), (node = tag);
+    else {
+      if (node === finishedWork) break;
+      for (; null === node.sibling; ) {
+        if (null === node.return || node.return === finishedWork) return !0;
+        node = node.return;
+      }
+      node.sibling.return = node.return;
+      node = node.sibling;
+    }
+  }
+  return !0;
+}
+function markRootSuspended(
+  root,
+  suspendedLanes,
+  spawnedLane,
+  didAttemptEntireTree
+) {
+  suspendedLanes &= ~workInProgressRootPingedLanes;
+  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;
+  root.suspendedLanes |= suspendedLanes;
+  root.pingedLanes &= ~suspendedLanes;
+  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);
+  didAttemptEntireTree = root.expirationTimes;
+  for (var lanes = suspendedLanes; 0 < lanes; ) {
+    var index$4 = 31 - clz32(lanes),
+      lane = 1 << index$4;
+    didAttemptEntireTree[index$4] = -1;
+    lanes &= ~lane;
+  }
+  0 !== spawnedLane &&
+    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);
+}
+function flushSyncWork$1() {
+  return 0 === (executionContext & 6)
+    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)
+    : !0;
+}
+function resetWorkInProgressStack() {
+  if (null !== workInProgress) {
+    if (0 === workInProgressSuspendedReason)
+      var interruptedWork = workInProgress.return;
+    else
+      (interruptedWork = workInProgress),
+        (lastContextDependency = currentlyRenderingFiber$1 = null),
+        resetHooksOnUnwind(interruptedWork),
+        (thenableState = null),
+        (thenableIndexCounter = 0),
+        (interruptedWork = workInProgress);
+    for (; null !== interruptedWork; )
+      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),
+        (interruptedWork = interruptedWork.return);
+    workInProgress = null;
+  }
+}
+function prepareFreshStack(root, lanes) {
+  var timeoutHandle = root.timeoutHandle;
+  -1 !== timeoutHandle &&
+    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));
+  timeoutHandle = root.cancelPendingCommit;
+  null !== timeoutHandle &&
+    ((root.cancelPendingCommit = null), timeoutHandle());
+  resetWorkInProgressStack();
+  workInProgressRoot = root;
+  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);
+  workInProgressRootRenderLanes = lanes;
+  workInProgressSuspendedReason = 0;
+  workInProgressThrownValue = null;
+  workInProgressRootDidSkipSuspendedSiblings = !1;
+  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);
+  workInProgressRootDidAttachPingListener = !1;
+  workInProgressSuspendedRetryLanes =
+    workInProgressDeferredLane =
+    workInProgressRootPingedLanes =
+    workInProgressRootInterleavedUpdatedLanes =
+    workInProgressRootSkippedLanes =
+    workInProgressRootExitStatus =
+      0;
+  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =
+    null;
+  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;
+  0 !== (lanes & 8) && (lanes |= lanes & 32);
+  var allEntangledLanes = root.entangledLanes;
+  if (0 !== allEntangledLanes)
+    for (
+      root = root.entanglements, allEntangledLanes &= lanes;
+      0 < allEntangledLanes;
+
+    ) {
+      var index$2 = 31 - clz32(allEntangledLanes),
+        lane = 1 << index$2;
+      lanes |= root[index$2];
+      allEntangledLanes &= ~lane;
+    }
+  entangledRenderLanes = lanes;
+  finishQueueingConcurrentUpdates();
+  return timeoutHandle;
+}
+function handleThrow(root, thrownValue) {
+  currentlyRenderingFiber = null;
+  ReactSharedInternals.H = ContextOnlyDispatcher;
+  thrownValue === SuspenseException || thrownValue === SuspenseActionException
+    ? ((thrownValue = getSuspendedThenable()),
+      (workInProgressSuspendedReason = 3))
+    : thrownValue === SuspenseyCommitException
+      ? ((thrownValue = getSuspendedThenable()),
+        (workInProgressSuspendedReason = 4))
+      : (workInProgressSuspendedReason =
+          thrownValue === SelectiveHydrationException
+            ? 8
+            : null !== thrownValue &&
+                "object" === typeof thrownValue &&
+                "function" === typeof thrownValue.then
+              ? 6
+              : 1);
+  workInProgressThrownValue = thrownValue;
+  null === workInProgress &&
+    ((workInProgressRootExitStatus = 1),
+    logUncaughtError(
+      root,
+      createCapturedValueAtFiber(thrownValue, root.current)
+    ));
+}
+function pushDispatcher() {
+  var prevDispatcher = ReactSharedInternals.H;
+  ReactSharedInternals.H = ContextOnlyDispatcher;
+  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;
+}
+function pushAsyncDispatcher() {
+  var prevAsyncDispatcher = ReactSharedInternals.A;
+  ReactSharedInternals.A = DefaultAsyncDispatcher;
+  return prevAsyncDispatcher;
+}
+function renderDidSuspendDelayIfPossible() {
+  workInProgressRootExitStatus = 4;
+  workInProgressRootDidSkipSuspendedSiblings ||
+    ((workInProgressRootRenderLanes & 4194048) !==
+      workInProgressRootRenderLanes &&
+      null !== suspenseHandlerStackCursor.current) ||
+    (workInProgressRootIsPrerendering = !0);
+  (0 === (workInProgressRootSkippedLanes & 134217727) &&
+    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||
+    null === workInProgressRoot ||
+    markRootSuspended(
+      workInProgressRoot,
+      workInProgressRootRenderLanes,
+      workInProgressDeferredLane,
+      !1
+    );
+}
+function renderRootSync(root, lanes, shouldYieldForPrerendering) {
+  var prevExecutionContext = executionContext;
+  executionContext |= 2;
+  var prevDispatcher = pushDispatcher(),
+    prevAsyncDispatcher = pushAsyncDispatcher();
+  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)
+    (workInProgressTransitions = null), prepareFreshStack(root, lanes);
+  lanes = !1;
+  var exitStatus = workInProgressRootExitStatus;
+  a: do
+    try {
+      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {
+        var unitOfWork = workInProgress,
+          thrownValue = workInProgressThrownValue;
+        switch (workInProgressSuspendedReason) {
+          case 8:
+            resetWorkInProgressStack();
+            exitStatus = 6;
+            break a;
+          case 3:
+          case 2:
+          case 9:
+          case 6:
+            null === suspenseHandlerStackCursor.current && (lanes = !0);
+            var reason = workInProgressSuspendedReason;
+            workInProgressSuspendedReason = 0;
+            workInProgressThrownValue = null;
+            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);
+            if (
+              shouldYieldForPrerendering &&
+              workInProgressRootIsPrerendering
+            ) {
+              exitStatus = 0;
+              break a;
+            }
+            break;
+          default:
+            (reason = workInProgressSuspendedReason),
+              (workInProgressSuspendedReason = 0),
+              (workInProgressThrownValue = null),
+              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);
+        }
+      }
+      workLoopSync();
+      exitStatus = workInProgressRootExitStatus;
+      break;
+    } catch (thrownValue$167) {
+      handleThrow(root, thrownValue$167);
+    }
+  while (1);
+  lanes && root.shellSuspendCounter++;
+  lastContextDependency = currentlyRenderingFiber$1 = null;
+  executionContext = prevExecutionContext;
+  ReactSharedInternals.H = prevDispatcher;
+  ReactSharedInternals.A = prevAsyncDispatcher;
+  null === workInProgress &&
+    ((workInProgressRoot = null),
+    (workInProgressRootRenderLanes = 0),
+    finishQueueingConcurrentUpdates());
+  return exitStatus;
+}
+function workLoopSync() {
+  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);
+}
+function renderRootConcurrent(root, lanes) {
+  var prevExecutionContext = executionContext;
+  executionContext |= 2;
+  var prevDispatcher = pushDispatcher(),
+    prevAsyncDispatcher = pushAsyncDispatcher();
+  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes
+    ? ((workInProgressTransitions = null),
+      (workInProgressRootRenderTargetTime = now() + 500),
+      prepareFreshStack(root, lanes))
+    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(
+        root,
+        lanes
+      ));
+  a: do
+    try {
+      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {
+        lanes = workInProgress;
+        var thrownValue = workInProgressThrownValue;
+        b: switch (workInProgressSuspendedReason) {
+          case 1:
+            workInProgressSuspendedReason = 0;
+            workInProgressThrownValue = null;
+            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);
+            break;
+          case 2:
+          case 9:
+            if (isThenableResolved(thrownValue)) {
+              workInProgressSuspendedReason = 0;
+              workInProgressThrownValue = null;
+              replaySuspendedUnitOfWork(lanes);
+              break;
+            }
+            lanes = function () {
+              (2 !== workInProgressSuspendedReason &&
+                9 !== workInProgressSuspendedReason) ||
+                workInProgressRoot !== root ||
+                (workInProgressSuspendedReason = 7);
+              ensureRootIsScheduled(root);
+            };
+            thrownValue.then(lanes, lanes);
+            break a;
+          case 3:
+            workInProgressSuspendedReason = 7;
+            break a;
+          case 4:
+            workInProgressSuspendedReason = 5;
+            break a;
+          case 7:
+            isThenableResolved(thrownValue)
+              ? ((workInProgressSuspendedReason = 0),
+                (workInProgressThrownValue = null),
+                replaySuspendedUnitOfWork(lanes))
+              : ((workInProgressSuspendedReason = 0),
+                (workInProgressThrownValue = null),
+                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));
+            break;
+          case 5:
+            var resource = null;
+            switch (workInProgress.tag) {
+              case 26:
+                resource = workInProgress.memoizedState;
+              case 5:
+              case 27:
+                var hostFiber = workInProgress;
+                if (resource ? preloadResource(resource) : 1) {
+                  workInProgressSuspendedReason = 0;
+                  workInProgressThrownValue = null;
+                  var sibling = hostFiber.sibling;
+                  if (null !== sibling) workInProgress = sibling;
+                  else {
+                    var returnFiber = hostFiber.return;
+                    null !== returnFiber
+                      ? ((workInProgress = returnFiber),
+                        completeUnitOfWork(returnFiber))
+                      : (workInProgress = null);
+                  }
+                  break b;
+                }
+            }
+            workInProgressSuspendedReason = 0;
+            workInProgressThrownValue = null;
+            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);
+            break;
+          case 6:
+            workInProgressSuspendedReason = 0;
+            workInProgressThrownValue = null;
+            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);
+            break;
+          case 8:
+            resetWorkInProgressStack();
+            workInProgressRootExitStatus = 6;
+            break a;
+          default:
+            throw Error(formatProdErrorMessage(462));
+        }
+      }
+      workLoopConcurrentByScheduler();
+      break;
+    } catch (thrownValue$169) {
+      handleThrow(root, thrownValue$169);
+    }
+  while (1);
+  lastContextDependency = currentlyRenderingFiber$1 = null;
+  ReactSharedInternals.H = prevDispatcher;
+  ReactSharedInternals.A = prevAsyncDispatcher;
+  executionContext = prevExecutionContext;
+  if (null !== workInProgress) return 0;
+  workInProgressRoot = null;
+  workInProgressRootRenderLanes = 0;
+  finishQueueingConcurrentUpdates();
+  return workInProgressRootExitStatus;
+}
+function workLoopConcurrentByScheduler() {
+  for (; null !== workInProgress && !shouldYield(); )
+    performUnitOfWork(workInProgress);
+}
+function performUnitOfWork(unitOfWork) {
+  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);
+  unitOfWork.memoizedProps = unitOfWork.pendingProps;
+  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);
+}
+function replaySuspendedUnitOfWork(unitOfWork) {
+  var next = unitOfWork;
+  var current = next.alternate;
+  switch (next.tag) {
+    case 15:
+    case 0:
+      next = replayFunctionComponent(
+        current,
+        next,
+        next.pendingProps,
+        next.type,
+        void 0,
+        workInProgressRootRenderLanes
+      );
+      break;
+    case 11:
+      next = replayFunctionComponent(
+        current,
+        next,
+        next.pendingProps,
+        next.type.render,
+        next.ref,
+        workInProgressRootRenderLanes
+      );
+      break;
+    case 5:
+      resetHooksOnUnwind(next);
+    default:
+      unwindInterruptedWork(current, next),
+        (next = workInProgress =
+          resetWorkInProgress(next, entangledRenderLanes)),
+        (next = beginWork(current, next, entangledRenderLanes));
+  }
+  unitOfWork.memoizedProps = unitOfWork.pendingProps;
+  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);
+}
+function throwAndUnwindWorkLoop(
+  root,
+  unitOfWork,
+  thrownValue,
+  suspendedReason
+) {
+  lastContextDependency = currentlyRenderingFiber$1 = null;
+  resetHooksOnUnwind(unitOfWork);
+  thenableState = null;
+  thenableIndexCounter = 0;
+  var returnFiber = unitOfWork.return;
+  try {
+    if (
+      throwException(
+        root,
+        returnFiber,
+        unitOfWork,
+        thrownValue,
+        workInProgressRootRenderLanes
+      )
+    ) {
+      workInProgressRootExitStatus = 1;
+      logUncaughtError(
+        root,
+        createCapturedValueAtFiber(thrownValue, root.current)
+      );
+      workInProgress = null;
+      return;
+    }
+  } catch (error) {
+    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);
+    workInProgressRootExitStatus = 1;
+    logUncaughtError(
+      root,
+      createCapturedValueAtFiber(thrownValue, root.current)
+    );
+    workInProgress = null;
+    return;
+  }
+  if (unitOfWork.flags & 32768) {
+    if (isHydrating || 1 === suspendedReason) root = !0;
+    else if (
+      workInProgressRootIsPrerendering ||
+      0 !== (workInProgressRootRenderLanes & 536870912)
+    )
+      root = !1;
+    else if (
+      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),
+      2 === suspendedReason ||
+        9 === suspendedReason ||
+        3 === suspendedReason ||
+        6 === suspendedReason)
+    )
+      (suspendedReason = suspenseHandlerStackCursor.current),
+        null !== suspendedReason &&
+          13 === suspendedReason.tag &&
+          (suspendedReason.flags |= 16384);
+    unwindUnitOfWork(unitOfWork, root);
+  } else completeUnitOfWork(unitOfWork);
+}
+function completeUnitOfWork(unitOfWork) {
+  var completedWork = unitOfWork;
+  do {
+    if (0 !== (completedWork.flags & 32768)) {
+      unwindUnitOfWork(
+        completedWork,
+        workInProgressRootDidSkipSuspendedSiblings
+      );
+      return;
+    }
+    unitOfWork = completedWork.return;
+    var next = completeWork(
+      completedWork.alternate,
+      completedWork,
+      entangledRenderLanes
+    );
+    if (null !== next) {
+      workInProgress = next;
+      return;
+    }
+    completedWork = completedWork.sibling;
+    if (null !== completedWork) {
+      workInProgress = completedWork;
+      return;
+    }
+    workInProgress = completedWork = unitOfWork;
+  } while (null !== completedWork);
+  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);
+}
+function unwindUnitOfWork(unitOfWork, skipSiblings) {
+  do {
+    var next = unwindWork(unitOfWork.alternate, unitOfWork);
+    if (null !== next) {
+      next.flags &= 32767;
+      workInProgress = next;
+      return;
+    }
+    next = unitOfWork.return;
+    null !== next &&
+      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));
+    if (
+      !skipSiblings &&
+      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)
+    ) {
+      workInProgress = unitOfWork;
+      return;
+    }
+    workInProgress = unitOfWork = next;
+  } while (null !== unitOfWork);
+  workInProgressRootExitStatus = 6;
+  workInProgress = null;
+}
+function commitRoot(
+  root,
+  finishedWork,
+  lanes,
+  recoverableErrors,
+  transitions,
+  didIncludeRenderPhaseUpdate,
+  spawnedLane,
+  updatedLanes,
+  suspendedRetryLanes
+) {
+  root.cancelPendingCommit = null;
+  do flushPendingEffects();
+  while (0 !== pendingEffectsStatus);
+  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));
+  if (null !== finishedWork) {
+    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));
+    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;
+    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;
+    markRootFinished(
+      root,
+      lanes,
+      didIncludeRenderPhaseUpdate,
+      spawnedLane,
+      updatedLanes,
+      suspendedRetryLanes
+    );
+    root === workInProgressRoot &&
+      ((workInProgress = workInProgressRoot = null),
+      (workInProgressRootRenderLanes = 0));
+    pendingFinishedWork = finishedWork;
+    pendingEffectsRoot = root;
+    pendingEffectsLanes = lanes;
+    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;
+    pendingPassiveTransitions = transitions;
+    pendingRecoverableErrors = recoverableErrors;
+    0 !== (finishedWork.subtreeFlags & 10256) ||
+    0 !== (finishedWork.flags & 10256)
+      ? ((root.callbackNode = null),
+        (root.callbackPriority = 0),
+        scheduleCallback$1(NormalPriority$1, function () {
+          flushPassiveEffects(!0);
+          return null;
+        }))
+      : ((root.callbackNode = null), (root.callbackPriority = 0));
+    recoverableErrors = 0 !== (finishedWork.flags & 13878);
+    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {
+      recoverableErrors = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      transitions = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p = 2;
+      spawnedLane = executionContext;
+      executionContext |= 4;
+      try {
+        commitBeforeMutationEffects(root, finishedWork, lanes);
+      } finally {
+        (executionContext = spawnedLane),
+          (ReactDOMSharedInternals.p = transitions),
+          (ReactSharedInternals.T = recoverableErrors);
+      }
+    }
+    pendingEffectsStatus = 1;
+    flushMutationEffects();
+    flushLayoutEffects();
+    flushSpawnedWork();
+  }
+}
+function flushMutationEffects() {
+  if (1 === pendingEffectsStatus) {
+    pendingEffectsStatus = 0;
+    var root = pendingEffectsRoot,
+      finishedWork = pendingFinishedWork,
+      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);
+    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {
+      rootMutationHasEffect = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      var previousPriority = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p = 2;
+      var prevExecutionContext = executionContext;
+      executionContext |= 4;
+      try {
+        commitMutationEffectsOnFiber(finishedWork, root);
+        var priorSelectionInformation = selectionInformation,
+          curFocusedElem = getActiveElementDeep(root.containerInfo),
+          priorFocusedElem = priorSelectionInformation.focusedElem,
+          priorSelectionRange = priorSelectionInformation.selectionRange;
+        if (
+          curFocusedElem !== priorFocusedElem &&
+          priorFocusedElem &&
+          priorFocusedElem.ownerDocument &&
+          containsNode(
+            priorFocusedElem.ownerDocument.documentElement,
+            priorFocusedElem
+          )
+        ) {
+          if (
+            null !== priorSelectionRange &&
+            hasSelectionCapabilities(priorFocusedElem)
+          ) {
+            var start = priorSelectionRange.start,
+              end = priorSelectionRange.end;
+            void 0 === end && (end = start);
+            if ("selectionStart" in priorFocusedElem)
+              (priorFocusedElem.selectionStart = start),
+                (priorFocusedElem.selectionEnd = Math.min(
+                  end,
+                  priorFocusedElem.value.length
+                ));
+            else {
+              var doc = priorFocusedElem.ownerDocument || document,
+                win = (doc && doc.defaultView) || window;
+              if (win.getSelection) {
+                var selection = win.getSelection(),
+                  length = priorFocusedElem.textContent.length,
+                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),
+                  end$jscomp$0 =
+                    void 0 === priorSelectionRange.end
+                      ? start$jscomp$0
+                      : Math.min(priorSelectionRange.end, length);
+                !selection.extend &&
+                  start$jscomp$0 > end$jscomp$0 &&
+                  ((curFocusedElem = end$jscomp$0),
+                  (end$jscomp$0 = start$jscomp$0),
+                  (start$jscomp$0 = curFocusedElem));
+                var startMarker = getNodeForCharacterOffset(
+                    priorFocusedElem,
+                    start$jscomp$0
+                  ),
+                  endMarker = getNodeForCharacterOffset(
+                    priorFocusedElem,
+                    end$jscomp$0
+                  );
+                if (
+                  startMarker &&
+                  endMarker &&
+                  (1 !== selection.rangeCount ||
+                    selection.anchorNode !== startMarker.node ||
+                    selection.anchorOffset !== startMarker.offset ||
+                    selection.focusNode !== endMarker.node ||
+                    selection.focusOffset !== endMarker.offset)
+                ) {
+                  var range = doc.createRange();
+                  range.setStart(startMarker.node, startMarker.offset);
+                  selection.removeAllRanges();
+                  start$jscomp$0 > end$jscomp$0
+                    ? (selection.addRange(range),
+                      selection.extend(endMarker.node, endMarker.offset))
+                    : (range.setEnd(endMarker.node, endMarker.offset),
+                      selection.addRange(range));
+                }
+              }
+            }
+          }
+          doc = [];
+          for (
+            selection = priorFocusedElem;
+            (selection = selection.parentNode);
+
+          )
+            1 === selection.nodeType &&
+              doc.push({
+                element: selection,
+                left: selection.scrollLeft,
+                top: selection.scrollTop
+              });
+          "function" === typeof priorFocusedElem.focus &&
+            priorFocusedElem.focus();
+          for (
+            priorFocusedElem = 0;
+            priorFocusedElem < doc.length;
+            priorFocusedElem++
+          ) {
+            var info = doc[priorFocusedElem];
+            info.element.scrollLeft = info.left;
+            info.element.scrollTop = info.top;
+          }
+        }
+        _enabled = !!eventsEnabled;
+        selectionInformation = eventsEnabled = null;
+      } finally {
+        (executionContext = prevExecutionContext),
+          (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = rootMutationHasEffect);
+      }
+    }
+    root.current = finishedWork;
+    pendingEffectsStatus = 2;
+  }
+}
+function flushLayoutEffects() {
+  if (2 === pendingEffectsStatus) {
+    pendingEffectsStatus = 0;
+    var root = pendingEffectsRoot,
+      finishedWork = pendingFinishedWork,
+      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);
+    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {
+      rootHasLayoutEffect = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      var previousPriority = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p = 2;
+      var prevExecutionContext = executionContext;
+      executionContext |= 4;
+      try {
+        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);
+      } finally {
+        (executionContext = prevExecutionContext),
+          (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = rootHasLayoutEffect);
+      }
+    }
+    pendingEffectsStatus = 3;
+  }
+}
+function flushSpawnedWork() {
+  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {
+    pendingEffectsStatus = 0;
+    requestPaint();
+    var root = pendingEffectsRoot,
+      finishedWork = pendingFinishedWork,
+      lanes = pendingEffectsLanes,
+      recoverableErrors = pendingRecoverableErrors;
+    0 !== (finishedWork.subtreeFlags & 10256) ||
+    0 !== (finishedWork.flags & 10256)
+      ? (pendingEffectsStatus = 5)
+      : ((pendingEffectsStatus = 0),
+        (pendingFinishedWork = pendingEffectsRoot = null),
+        releaseRootPooledCache(root, root.pendingLanes));
+    var remainingLanes = root.pendingLanes;
+    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);
+    lanesToEventPriority(lanes);
+    finishedWork = finishedWork.stateNode;
+    if (injectedHook && "function" === typeof injectedHook.onCommitFiberRoot)
+      try {
+        injectedHook.onCommitFiberRoot(
+          rendererID,
+          finishedWork,
+          void 0,
+          128 === (finishedWork.current.flags & 128)
+        );
+      } catch (err) {}
+    if (null !== recoverableErrors) {
+      finishedWork = ReactSharedInternals.T;
+      remainingLanes = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p = 2;
+      ReactSharedInternals.T = null;
+      try {
+        for (
+          var onRecoverableError = root.onRecoverableError, i = 0;
+          i < recoverableErrors.length;
+          i++
+        ) {
+          var recoverableError = recoverableErrors[i];
+          onRecoverableError(recoverableError.value, {
+            componentStack: recoverableError.stack
+          });
+        }
+      } finally {
+        (ReactSharedInternals.T = finishedWork),
+          (ReactDOMSharedInternals.p = remainingLanes);
+      }
+    }
+    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();
+    ensureRootIsScheduled(root);
+    remainingLanes = root.pendingLanes;
+    0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)
+      ? root === rootWithNestedUpdates
+        ? nestedUpdateCount++
+        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))
+      : (nestedUpdateCount = 0);
+    flushSyncWorkAcrossRoots_impl(0, !1);
+  }
+}
+function releaseRootPooledCache(root, remainingLanes) {
+  0 === (root.pooledCacheLanes &= remainingLanes) &&
+    ((remainingLanes = root.pooledCache),
+    null != remainingLanes &&
+      ((root.pooledCache = null), releaseCache(remainingLanes)));
+}
+function flushPendingEffects(wasDelayedCommit) {
+  flushMutationEffects();
+  flushLayoutEffects();
+  flushSpawnedWork();
+  return flushPassiveEffects(wasDelayedCommit);
+}
+function flushPassiveEffects() {
+  if (5 !== pendingEffectsStatus) return !1;
+  var root = pendingEffectsRoot,
+    remainingLanes = pendingEffectsRemainingLanes;
+  pendingEffectsRemainingLanes = 0;
+  var renderPriority = lanesToEventPriority(pendingEffectsLanes),
+    prevTransition = ReactSharedInternals.T,
+    previousPriority = ReactDOMSharedInternals.p;
+  try {
+    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;
+    ReactSharedInternals.T = null;
+    renderPriority = pendingPassiveTransitions;
+    pendingPassiveTransitions = null;
+    var root$jscomp$0 = pendingEffectsRoot,
+      lanes = pendingEffectsLanes;
+    pendingEffectsStatus = 0;
+    pendingFinishedWork = pendingEffectsRoot = null;
+    pendingEffectsLanes = 0;
+    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));
+    var prevExecutionContext = executionContext;
+    executionContext |= 4;
+    commitPassiveUnmountOnFiber(root$jscomp$0.current);
+    commitPassiveMountOnFiber(
+      root$jscomp$0,
+      root$jscomp$0.current,
+      lanes,
+      renderPriority
+    );
+    executionContext = prevExecutionContext;
+    flushSyncWorkAcrossRoots_impl(0, !1);
+    if (
+      injectedHook &&
+      "function" === typeof injectedHook.onPostCommitFiberRoot
+    )
+      try {
+        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);
+      } catch (err) {}
+    return !0;
+  } finally {
+    (ReactDOMSharedInternals.p = previousPriority),
+      (ReactSharedInternals.T = prevTransition),
+      releaseRootPooledCache(root, remainingLanes);
+  }
+}
+function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {
+  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);
+  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);
+  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);
+  null !== rootFiber &&
+    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));
+}
+function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {
+  if (3 === sourceFiber.tag)
+    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);
+  else
+    for (; null !== nearestMountedAncestor; ) {
+      if (3 === nearestMountedAncestor.tag) {
+        captureCommitPhaseErrorOnRoot(
+          nearestMountedAncestor,
+          sourceFiber,
+          error
+        );
+        break;
+      } else if (1 === nearestMountedAncestor.tag) {
+        var instance = nearestMountedAncestor.stateNode;
+        if (
+          "function" ===
+            typeof nearestMountedAncestor.type.getDerivedStateFromError ||
+          ("function" === typeof instance.componentDidCatch &&
+            (null === legacyErrorBoundariesThatAlreadyFailed ||
+              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))
+        ) {
+          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);
+          error = createClassErrorUpdate(2);
+          instance = enqueueUpdate(nearestMountedAncestor, error, 2);
+          null !== instance &&
+            (initializeClassErrorUpdate(
+              error,
+              instance,
+              nearestMountedAncestor,
+              sourceFiber
+            ),
+            markRootUpdated$1(instance, 2),
+            ensureRootIsScheduled(instance));
+          break;
+        }
+      }
+      nearestMountedAncestor = nearestMountedAncestor.return;
+    }
+}
+function attachPingListener(root, wakeable, lanes) {
+  var pingCache = root.pingCache;
+  if (null === pingCache) {
+    pingCache = root.pingCache = new PossiblyWeakMap();
+    var threadIDs = new Set();
+    pingCache.set(wakeable, threadIDs);
+  } else
+    (threadIDs = pingCache.get(wakeable)),
+      void 0 === threadIDs &&
+        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));
+  threadIDs.has(lanes) ||
+    ((workInProgressRootDidAttachPingListener = !0),
+    threadIDs.add(lanes),
+    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),
+    wakeable.then(root, root));
+}
+function pingSuspendedRoot(root, wakeable, pingedLanes) {
+  var pingCache = root.pingCache;
+  null !== pingCache && pingCache.delete(wakeable);
+  root.pingedLanes |= root.suspendedLanes & pingedLanes;
+  root.warmLanes &= ~pingedLanes;
+  workInProgressRoot === root &&
+    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&
+    (4 === workInProgressRootExitStatus ||
+    (3 === workInProgressRootExitStatus &&
+      (workInProgressRootRenderLanes & 62914560) ===
+        workInProgressRootRenderLanes &&
+      300 > now() - globalMostRecentFallbackTime)
+      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)
+      : (workInProgressRootPingedLanes |= pingedLanes),
+    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&
+      (workInProgressSuspendedRetryLanes = 0));
+  ensureRootIsScheduled(root);
+}
+function retryTimedOutBoundary(boundaryFiber, retryLane) {
+  0 === retryLane && (retryLane = claimNextRetryLane());
+  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);
+  null !== boundaryFiber &&
+    (markRootUpdated$1(boundaryFiber, retryLane),
+    ensureRootIsScheduled(boundaryFiber));
+}
+function retryDehydratedSuspenseBoundary(boundaryFiber) {
+  var suspenseState = boundaryFiber.memoizedState,
+    retryLane = 0;
+  null !== suspenseState && (retryLane = suspenseState.retryLane);
+  retryTimedOutBoundary(boundaryFiber, retryLane);
+}
+function resolveRetryWakeable(boundaryFiber, wakeable) {
+  var retryLane = 0;
+  switch (boundaryFiber.tag) {
+    case 13:
+      var retryCache = boundaryFiber.stateNode;
+      var suspenseState = boundaryFiber.memoizedState;
+      null !== suspenseState && (retryLane = suspenseState.retryLane);
+      break;
+    case 19:
+      retryCache = boundaryFiber.stateNode;
+      break;
+    case 22:
+      retryCache = boundaryFiber.stateNode._retryCache;
+      break;
+    default:
+      throw Error(formatProdErrorMessage(314));
+  }
+  null !== retryCache && retryCache.delete(wakeable);
+  retryTimedOutBoundary(boundaryFiber, retryLane);
+}
+function scheduleCallback$1(priorityLevel, callback) {
+  return scheduleCallback$3(priorityLevel, callback);
+}
+var firstScheduledRoot = null,
+  lastScheduledRoot = null,
+  didScheduleMicrotask = !1,
+  mightHavePendingSyncWork = !1,
+  isFlushingWork = !1,
+  currentEventTransitionLane = 0;
+function ensureRootIsScheduled(root) {
+  root !== lastScheduledRoot &&
+    null === root.next &&
+    (null === lastScheduledRoot
+      ? (firstScheduledRoot = lastScheduledRoot = root)
+      : (lastScheduledRoot = lastScheduledRoot.next = root));
+  mightHavePendingSyncWork = !0;
+  didScheduleMicrotask ||
+    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());
+}
+function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {
+  if (!isFlushingWork && mightHavePendingSyncWork) {
+    isFlushingWork = !0;
+    do {
+      var didPerformSomeWork = !1;
+      for (var root$174 = firstScheduledRoot; null !== root$174; ) {
+        if (!onlyLegacy)
+          if (0 !== syncTransitionLanes) {
+            var pendingLanes = root$174.pendingLanes;
+            if (0 === pendingLanes) var JSCompiler_inline_result = 0;
+            else {
+              var suspendedLanes = root$174.suspendedLanes,
+                pingedLanes = root$174.pingedLanes;
+              JSCompiler_inline_result =
+                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;
+              JSCompiler_inline_result &=
+                pendingLanes & ~(suspendedLanes & ~pingedLanes);
+              JSCompiler_inline_result =
+                JSCompiler_inline_result & 201326741
+                  ? (JSCompiler_inline_result & 201326741) | 1
+                  : JSCompiler_inline_result
+                    ? JSCompiler_inline_result | 2
+                    : 0;
+            }
+            0 !== JSCompiler_inline_result &&
+              ((didPerformSomeWork = !0),
+              performSyncWorkOnRoot(root$174, JSCompiler_inline_result));
+          } else
+            (JSCompiler_inline_result = workInProgressRootRenderLanes),
+              (JSCompiler_inline_result = getNextLanes(
+                root$174,
+                root$174 === workInProgressRoot ? JSCompiler_inline_result : 0,
+                null !== root$174.cancelPendingCommit ||
+                  -1 !== root$174.timeoutHandle
+              )),
+              0 === (JSCompiler_inline_result & 3) ||
+                checkIfRootIsPrerendering(root$174, JSCompiler_inline_result) ||
+                ((didPerformSomeWork = !0),
+                performSyncWorkOnRoot(root$174, JSCompiler_inline_result));
+        root$174 = root$174.next;
+      }
+    } while (didPerformSomeWork);
+    isFlushingWork = !1;
+  }
+}
+function processRootScheduleInImmediateTask() {
+  processRootScheduleInMicrotask();
+}
+function processRootScheduleInMicrotask() {
+  mightHavePendingSyncWork = didScheduleMicrotask = !1;
+  var syncTransitionLanes = 0;
+  0 !== currentEventTransitionLane &&
+    (shouldAttemptEagerTransition() &&
+      (syncTransitionLanes = currentEventTransitionLane),
+    (currentEventTransitionLane = 0));
+  for (
+    var currentTime = now(), prev = null, root = firstScheduledRoot;
+    null !== root;
+
+  ) {
+    var next = root.next,
+      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);
+    if (0 === nextLanes)
+      (root.next = null),
+        null === prev ? (firstScheduledRoot = next) : (prev.next = next),
+        null === next && (lastScheduledRoot = prev);
+    else if (
+      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))
+    )
+      mightHavePendingSyncWork = !0;
+    root = next;
+  }
+  flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);
+}
+function scheduleTaskForRootDuringMicrotask(root, currentTime) {
+  for (
+    var suspendedLanes = root.suspendedLanes,
+      pingedLanes = root.pingedLanes,
+      expirationTimes = root.expirationTimes,
+      lanes = root.pendingLanes & -62914561;
+    0 < lanes;
+
+  ) {
+    var index$3 = 31 - clz32(lanes),
+      lane = 1 << index$3,
+      expirationTime = expirationTimes[index$3];
+    if (-1 === expirationTime) {
+      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))
+        expirationTimes[index$3] = computeExpirationTime(lane, currentTime);
+    } else expirationTime <= currentTime && (root.expiredLanes |= lane);
+    lanes &= ~lane;
+  }
+  currentTime = workInProgressRoot;
+  suspendedLanes = workInProgressRootRenderLanes;
+  suspendedLanes = getNextLanes(
+    root,
+    root === currentTime ? suspendedLanes : 0,
+    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle
+  );
+  pingedLanes = root.callbackNode;
+  if (
+    0 === suspendedLanes ||
+    (root === currentTime &&
+      (2 === workInProgressSuspendedReason ||
+        9 === workInProgressSuspendedReason)) ||
+    null !== root.cancelPendingCommit
+  )
+    return (
+      null !== pingedLanes &&
+        null !== pingedLanes &&
+        cancelCallback$1(pingedLanes),
+      (root.callbackNode = null),
+      (root.callbackPriority = 0)
+    );
+  if (
+    0 === (suspendedLanes & 3) ||
+    checkIfRootIsPrerendering(root, suspendedLanes)
+  ) {
+    currentTime = suspendedLanes & -suspendedLanes;
+    if (currentTime === root.callbackPriority) return currentTime;
+    null !== pingedLanes && cancelCallback$1(pingedLanes);
+    switch (lanesToEventPriority(suspendedLanes)) {
+      case 2:
+      case 8:
+        suspendedLanes = UserBlockingPriority;
+        break;
+      case 32:
+        suspendedLanes = NormalPriority$1;
+        break;
+      case 268435456:
+        suspendedLanes = IdlePriority;
+        break;
+      default:
+        suspendedLanes = NormalPriority$1;
+    }
+    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);
+    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);
+    root.callbackPriority = currentTime;
+    root.callbackNode = suspendedLanes;
+    return currentTime;
+  }
+  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);
+  root.callbackPriority = 2;
+  root.callbackNode = null;
+  return 2;
+}
+function performWorkOnRootViaSchedulerTask(root, didTimeout) {
+  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)
+    return (root.callbackNode = null), (root.callbackPriority = 0), null;
+  var originalCallbackNode = root.callbackNode;
+  if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)
+    return null;
+  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;
+  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(
+    root,
+    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,
+    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle
+  );
+  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;
+  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);
+  scheduleTaskForRootDuringMicrotask(root, now());
+  return null != root.callbackNode && root.callbackNode === originalCallbackNode
+    ? performWorkOnRootViaSchedulerTask.bind(null, root)
+    : null;
+}
+function performSyncWorkOnRoot(root, lanes) {
+  if (flushPendingEffects()) return null;
+  performWorkOnRoot(root, lanes, !0);
+}
+function scheduleImmediateRootScheduleTask() {
+  scheduleMicrotask(function () {
+    0 !== (executionContext & 6)
+      ? scheduleCallback$3(
+          ImmediatePriority,
+          processRootScheduleInImmediateTask
+        )
+      : processRootScheduleInMicrotask();
+  });
+}
+function requestTransitionLane() {
+  0 === currentEventTransitionLane &&
+    (currentEventTransitionLane = claimNextTransitionLane());
+  return currentEventTransitionLane;
+}
+function coerceFormActionProp(actionProp) {
+  return null == actionProp ||
+    "symbol" === typeof actionProp ||
+    "boolean" === typeof actionProp
+    ? null
+    : "function" === typeof actionProp
+      ? actionProp
+      : sanitizeURL("" + actionProp);
+}
+function createFormDataWithSubmitter(form, submitter) {
+  var temp = submitter.ownerDocument.createElement("input");
+  temp.name = submitter.name;
+  temp.value = submitter.value;
+  form.id && temp.setAttribute("form", form.id);
+  submitter.parentNode.insertBefore(temp, submitter);
+  form = new FormData(form);
+  temp.parentNode.removeChild(temp);
+  return form;
+}
+function extractEvents$1(
+  dispatchQueue,
+  domEventName,
+  maybeTargetInst,
+  nativeEvent,
+  nativeEventTarget
+) {
+  if (
+    "submit" === domEventName &&
+    maybeTargetInst &&
+    maybeTargetInst.stateNode === nativeEventTarget
+  ) {
+    var action = coerceFormActionProp(
+        (nativeEventTarget[internalPropsKey] || null).action
+      ),
+      submitter = nativeEvent.submitter;
+    submitter &&
+      ((domEventName = (domEventName = submitter[internalPropsKey] || null)
+        ? coerceFormActionProp(domEventName.formAction)
+        : submitter.getAttribute("formAction")),
+      null !== domEventName && ((action = domEventName), (submitter = null)));
+    var event = new SyntheticEvent(
+      "action",
+      "action",
+      null,
+      nativeEvent,
+      nativeEventTarget
+    );
+    dispatchQueue.push({
+      event: event,
+      listeners: [
+        {
+          instance: null,
+          listener: function () {
+            if (nativeEvent.defaultPrevented) {
+              if (0 !== currentEventTransitionLane) {
+                var formData = submitter
+                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)
+                  : new FormData(nativeEventTarget);
+                startHostTransition(
+                  maybeTargetInst,
+                  {
+                    pending: !0,
+                    data: formData,
+                    method: nativeEventTarget.method,
+                    action: action
+                  },
+                  null,
+                  formData
+                );
+              }
+            } else
+              "function" === typeof action &&
+                (event.preventDefault(),
+                (formData = submitter
+                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)
+                  : new FormData(nativeEventTarget)),
+                startHostTransition(
+                  maybeTargetInst,
+                  {
+                    pending: !0,
+                    data: formData,
+                    method: nativeEventTarget.method,
+                    action: action
+                  },
+                  action,
+                  formData
+                ));
+          },
+          currentTarget: nativeEventTarget
+        }
+      ]
+    });
+  }
+}
+for (
+  var i$jscomp$inline_1528 = 0;
+  i$jscomp$inline_1528 < simpleEventPluginEvents.length;
+  i$jscomp$inline_1528++
+) {
+  var eventName$jscomp$inline_1529 =
+      simpleEventPluginEvents[i$jscomp$inline_1528],
+    domEventName$jscomp$inline_1530 =
+      eventName$jscomp$inline_1529.toLowerCase(),
+    capitalizedEvent$jscomp$inline_1531 =
+      eventName$jscomp$inline_1529[0].toUpperCase() +
+      eventName$jscomp$inline_1529.slice(1);
+  registerSimpleEvent(
+    domEventName$jscomp$inline_1530,
+    "on" + capitalizedEvent$jscomp$inline_1531
+  );
+}
+registerSimpleEvent(ANIMATION_END, "onAnimationEnd");
+registerSimpleEvent(ANIMATION_ITERATION, "onAnimationIteration");
+registerSimpleEvent(ANIMATION_START, "onAnimationStart");
+registerSimpleEvent("dblclick", "onDoubleClick");
+registerSimpleEvent("focusin", "onFocus");
+registerSimpleEvent("focusout", "onBlur");
+registerSimpleEvent(TRANSITION_RUN, "onTransitionRun");
+registerSimpleEvent(TRANSITION_START, "onTransitionStart");
+registerSimpleEvent(TRANSITION_CANCEL, "onTransitionCancel");
+registerSimpleEvent(TRANSITION_END, "onTransitionEnd");
+registerDirectEvent("onMouseEnter", ["mouseout", "mouseover"]);
+registerDirectEvent("onMouseLeave", ["mouseout", "mouseover"]);
+registerDirectEvent("onPointerEnter", ["pointerout", "pointerover"]);
+registerDirectEvent("onPointerLeave", ["pointerout", "pointerover"]);
+registerTwoPhaseEvent(
+  "onChange",
+  "change click focusin focusout input keydown keyup selectionchange".split(" ")
+);
+registerTwoPhaseEvent(
+  "onSelect",
+  "focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(
+    " "
+  )
+);
+registerTwoPhaseEvent("onBeforeInput", [
+  "compositionend",
+  "keypress",
+  "textInput",
+  "paste"
+]);
+registerTwoPhaseEvent(
+  "onCompositionEnd",
+  "compositionend focusout keydown keypress keyup mousedown".split(" ")
+);
+registerTwoPhaseEvent(
+  "onCompositionStart",
+  "compositionstart focusout keydown keypress keyup mousedown".split(" ")
+);
+registerTwoPhaseEvent(
+  "onCompositionUpdate",
+  "compositionupdate focusout keydown keypress keyup mousedown".split(" ")
+);
+var mediaEventTypes =
+    "abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(
+      " "
+    ),
+  nonDelegatedEvents = new Set(
+    "beforetoggle cancel close invalid load scroll scrollend toggle"
+      .split(" ")
+      .concat(mediaEventTypes)
+  );
+function processDispatchQueue(dispatchQueue, eventSystemFlags) {
+  eventSystemFlags = 0 !== (eventSystemFlags & 4);
+  for (var i = 0; i < dispatchQueue.length; i++) {
+    var _dispatchQueue$i = dispatchQueue[i],
+      event = _dispatchQueue$i.event;
+    _dispatchQueue$i = _dispatchQueue$i.listeners;
+    a: {
+      var previousInstance = void 0;
+      if (eventSystemFlags)
+        for (
+          var i$jscomp$0 = _dispatchQueue$i.length - 1;
+          0 <= i$jscomp$0;
+          i$jscomp$0--
+        ) {
+          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],
+            instance = _dispatchListeners$i.instance,
+            currentTarget = _dispatchListeners$i.currentTarget;
+          _dispatchListeners$i = _dispatchListeners$i.listener;
+          if (instance !== previousInstance && event.isPropagationStopped())
+            break a;
+          previousInstance = _dispatchListeners$i;
+          event.currentTarget = currentTarget;
+          try {
+            previousInstance(event);
+          } catch (error) {
+            reportGlobalError(error);
+          }
+          event.currentTarget = null;
+          previousInstance = instance;
+        }
+      else
+        for (
+          i$jscomp$0 = 0;
+          i$jscomp$0 < _dispatchQueue$i.length;
+          i$jscomp$0++
+        ) {
+          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];
+          instance = _dispatchListeners$i.instance;
+          currentTarget = _dispatchListeners$i.currentTarget;
+          _dispatchListeners$i = _dispatchListeners$i.listener;
+          if (instance !== previousInstance && event.isPropagationStopped())
+            break a;
+          previousInstance = _dispatchListeners$i;
+          event.currentTarget = currentTarget;
+          try {
+            previousInstance(event);
+          } catch (error) {
+            reportGlobalError(error);
+          }
+          event.currentTarget = null;
+          previousInstance = instance;
+        }
+    }
+  }
+}
+function listenToNonDelegatedEvent(domEventName, targetElement) {
+  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];
+  void 0 === JSCompiler_inline_result &&
+    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =
+      new Set());
+  var listenerSetKey = domEventName + "__bubble";
+  JSCompiler_inline_result.has(listenerSetKey) ||
+    (addTrappedEventListener(targetElement, domEventName, 2, !1),
+    JSCompiler_inline_result.add(listenerSetKey));
+}
+function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {
+  var eventSystemFlags = 0;
+  isCapturePhaseListener && (eventSystemFlags |= 4);
+  addTrappedEventListener(
+    target,
+    domEventName,
+    eventSystemFlags,
+    isCapturePhaseListener
+  );
+}
+var listeningMarker = "_reactListening" + Math.random().toString(36).slice(2);
+function listenToAllSupportedEvents(rootContainerElement) {
+  if (!rootContainerElement[listeningMarker]) {
+    rootContainerElement[listeningMarker] = !0;
+    allNativeEvents.forEach(function (domEventName) {
+      "selectionchange" !== domEventName &&
+        (nonDelegatedEvents.has(domEventName) ||
+          listenToNativeEvent(domEventName, !1, rootContainerElement),
+        listenToNativeEvent(domEventName, !0, rootContainerElement));
+    });
+    var ownerDocument =
+      9 === rootContainerElement.nodeType
+        ? rootContainerElement
+        : rootContainerElement.ownerDocument;
+    null === ownerDocument ||
+      ownerDocument[listeningMarker] ||
+      ((ownerDocument[listeningMarker] = !0),
+      listenToNativeEvent("selectionchange", !1, ownerDocument));
+  }
+}
+function addTrappedEventListener(
+  targetContainer,
+  domEventName,
+  eventSystemFlags,
+  isCapturePhaseListener
+) {
+  switch (getEventPriority(domEventName)) {
+    case 2:
+      var listenerWrapper = dispatchDiscreteEvent;
+      break;
+    case 8:
+      listenerWrapper = dispatchContinuousEvent;
+      break;
+    default:
+      listenerWrapper = dispatchEvent;
+  }
+  eventSystemFlags = listenerWrapper.bind(
+    null,
+    domEventName,
+    eventSystemFlags,
+    targetContainer
+  );
+  listenerWrapper = void 0;
+  !passiveBrowserEventsSupported ||
+    ("touchstart" !== domEventName &&
+      "touchmove" !== domEventName &&
+      "wheel" !== domEventName) ||
+    (listenerWrapper = !0);
+  isCapturePhaseListener
+    ? void 0 !== listenerWrapper
+      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {
+          capture: !0,
+          passive: listenerWrapper
+        })
+      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)
+    : void 0 !== listenerWrapper
+      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {
+          passive: listenerWrapper
+        })
+      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);
+}
+function dispatchEventForPluginEventSystem(
+  domEventName,
+  eventSystemFlags,
+  nativeEvent,
+  targetInst$jscomp$0,
+  targetContainer
+) {
+  var ancestorInst = targetInst$jscomp$0;
+  if (
+    0 === (eventSystemFlags & 1) &&
+    0 === (eventSystemFlags & 2) &&
+    null !== targetInst$jscomp$0
+  )
+    a: for (;;) {
+      if (null === targetInst$jscomp$0) return;
+      var nodeTag = targetInst$jscomp$0.tag;
+      if (3 === nodeTag || 4 === nodeTag) {
+        var container = targetInst$jscomp$0.stateNode.containerInfo;
+        if (container === targetContainer) break;
+        if (4 === nodeTag)
+          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {
+            var grandTag = nodeTag.tag;
+            if (
+              (3 === grandTag || 4 === grandTag) &&
+              nodeTag.stateNode.containerInfo === targetContainer
+            )
+              return;
+            nodeTag = nodeTag.return;
+          }
+        for (; null !== container; ) {
+          nodeTag = getClosestInstanceFromNode(container);
+          if (null === nodeTag) return;
+          grandTag = nodeTag.tag;
+          if (
+            5 === grandTag ||
+            6 === grandTag ||
+            26 === grandTag ||
+            27 === grandTag
+          ) {
+            targetInst$jscomp$0 = ancestorInst = nodeTag;
+            continue a;
+          }
+          container = container.parentNode;
+        }
+      }
+      targetInst$jscomp$0 = targetInst$jscomp$0.return;
+    }
+  batchedUpdates$1(function () {
+    var targetInst = ancestorInst,
+      nativeEventTarget = getEventTarget(nativeEvent),
+      dispatchQueue = [];
+    a: {
+      var reactName = topLevelEventsToReactNames.get(domEventName);
+      if (void 0 !== reactName) {
+        var SyntheticEventCtor = SyntheticEvent,
+          reactEventType = domEventName;
+        switch (domEventName) {
+          case "keypress":
+            if (0 === getEventCharCode(nativeEvent)) break a;
+          case "keydown":
+          case "keyup":
+            SyntheticEventCtor = SyntheticKeyboardEvent;
+            break;
+          case "focusin":
+            reactEventType = "focus";
+            SyntheticEventCtor = SyntheticFocusEvent;
+            break;
+          case "focusout":
+            reactEventType = "blur";
+            SyntheticEventCtor = SyntheticFocusEvent;
+            break;
+          case "beforeblur":
+          case "afterblur":
+            SyntheticEventCtor = SyntheticFocusEvent;
+            break;
+          case "click":
+            if (2 === nativeEvent.button) break a;
+          case "auxclick":
+          case "dblclick":
+          case "mousedown":
+          case "mousemove":
+          case "mouseup":
+          case "mouseout":
+          case "mouseover":
+          case "contextmenu":
+            SyntheticEventCtor = SyntheticMouseEvent;
+            break;
+          case "drag":
+          case "dragend":
+          case "dragenter":
+          case "dragexit":
+          case "dragleave":
+          case "dragover":
+          case "dragstart":
+          case "drop":
+            SyntheticEventCtor = SyntheticDragEvent;
+            break;
+          case "touchcancel":
+          case "touchend":
+          case "touchmove":
+          case "touchstart":
+            SyntheticEventCtor = SyntheticTouchEvent;
+            break;
+          case ANIMATION_END:
+          case ANIMATION_ITERATION:
+          case ANIMATION_START:
+            SyntheticEventCtor = SyntheticAnimationEvent;
+            break;
+          case TRANSITION_END:
+            SyntheticEventCtor = SyntheticTransitionEvent;
+            break;
+          case "scroll":
+          case "scrollend":
+            SyntheticEventCtor = SyntheticUIEvent;
+            break;
+          case "wheel":
+            SyntheticEventCtor = SyntheticWheelEvent;
+            break;
+          case "copy":
+          case "cut":
+          case "paste":
+            SyntheticEventCtor = SyntheticClipboardEvent;
+            break;
+          case "gotpointercapture":
+          case "lostpointercapture":
+          case "pointercancel":
+          case "pointerdown":
+          case "pointermove":
+          case "pointerout":
+          case "pointerover":
+          case "pointerup":
+            SyntheticEventCtor = SyntheticPointerEvent;
+            break;
+          case "toggle":
+          case "beforetoggle":
+            SyntheticEventCtor = SyntheticToggleEvent;
+        }
+        var inCapturePhase = 0 !== (eventSystemFlags & 4),
+          accumulateTargetOnly =
+            !inCapturePhase &&
+            ("scroll" === domEventName || "scrollend" === domEventName),
+          reactEventName = inCapturePhase
+            ? null !== reactName
+              ? reactName + "Capture"
+              : null
+            : reactName;
+        inCapturePhase = [];
+        for (
+          var instance = targetInst, lastHostComponent;
+          null !== instance;
+
+        ) {
+          var _instance = instance;
+          lastHostComponent = _instance.stateNode;
+          _instance = _instance.tag;
+          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||
+            null === lastHostComponent ||
+            null === reactEventName ||
+            ((_instance = getListener(instance, reactEventName)),
+            null != _instance &&
+              inCapturePhase.push(
+                createDispatchListener(instance, _instance, lastHostComponent)
+              ));
+          if (accumulateTargetOnly) break;
+          instance = instance.return;
+        }
+        0 < inCapturePhase.length &&
+          ((reactName = new SyntheticEventCtor(
+            reactName,
+            reactEventType,
+            null,
+            nativeEvent,
+            nativeEventTarget
+          )),
+          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));
+      }
+    }
+    if (0 === (eventSystemFlags & 7)) {
+      a: {
+        reactName =
+          "mouseover" === domEventName || "pointerover" === domEventName;
+        SyntheticEventCtor =
+          "mouseout" === domEventName || "pointerout" === domEventName;
+        if (
+          reactName &&
+          nativeEvent !== currentReplayingEvent &&
+          (reactEventType =
+            nativeEvent.relatedTarget || nativeEvent.fromElement) &&
+          (getClosestInstanceFromNode(reactEventType) ||
+            reactEventType[internalContainerInstanceKey])
+        )
+          break a;
+        if (SyntheticEventCtor || reactName) {
+          reactName =
+            nativeEventTarget.window === nativeEventTarget
+              ? nativeEventTarget
+              : (reactName = nativeEventTarget.ownerDocument)
+                ? reactName.defaultView || reactName.parentWindow
+                : window;
+          if (SyntheticEventCtor) {
+            if (
+              ((reactEventType =
+                nativeEvent.relatedTarget || nativeEvent.toElement),
+              (SyntheticEventCtor = targetInst),
+              (reactEventType = reactEventType
+                ? getClosestInstanceFromNode(reactEventType)
+                : null),
+              null !== reactEventType &&
+                ((accumulateTargetOnly =
+                  getNearestMountedFiber(reactEventType)),
+                (inCapturePhase = reactEventType.tag),
+                reactEventType !== accumulateTargetOnly ||
+                  (5 !== inCapturePhase &&
+                    27 !== inCapturePhase &&
+                    6 !== inCapturePhase)))
+            )
+              reactEventType = null;
+          } else (SyntheticEventCtor = null), (reactEventType = targetInst);
+          if (SyntheticEventCtor !== reactEventType) {
+            inCapturePhase = SyntheticMouseEvent;
+            _instance = "onMouseLeave";
+            reactEventName = "onMouseEnter";
+            instance = "mouse";
+            if ("pointerout" === domEventName || "pointerover" === domEventName)
+              (inCapturePhase = SyntheticPointerEvent),
+                (_instance = "onPointerLeave"),
+                (reactEventName = "onPointerEnter"),
+                (instance = "pointer");
+            accumulateTargetOnly =
+              null == SyntheticEventCtor
+                ? reactName
+                : getNodeFromInstance(SyntheticEventCtor);
+            lastHostComponent =
+              null == reactEventType
+                ? reactName
+                : getNodeFromInstance(reactEventType);
+            reactName = new inCapturePhase(
+              _instance,
+              instance + "leave",
+              SyntheticEventCtor,
+              nativeEvent,
+              nativeEventTarget
+            );
+            reactName.target = accumulateTargetOnly;
+            reactName.relatedTarget = lastHostComponent;
+            _instance = null;
+            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&
+              ((inCapturePhase = new inCapturePhase(
+                reactEventName,
+                instance + "enter",
+                reactEventType,
+                nativeEvent,
+                nativeEventTarget
+              )),
+              (inCapturePhase.target = lastHostComponent),
+              (inCapturePhase.relatedTarget = accumulateTargetOnly),
+              (_instance = inCapturePhase));
+            accumulateTargetOnly = _instance;
+            if (SyntheticEventCtor && reactEventType)
+              b: {
+                inCapturePhase = SyntheticEventCtor;
+                reactEventName = reactEventType;
+                instance = 0;
+                for (
+                  lastHostComponent = inCapturePhase;
+                  lastHostComponent;
+                  lastHostComponent = getParent(lastHostComponent)
+                )
+                  instance++;
+                lastHostComponent = 0;
+                for (
+                  _instance = reactEventName;
+                  _instance;
+                  _instance = getParent(_instance)
+                )
+                  lastHostComponent++;
+                for (; 0 < instance - lastHostComponent; )
+                  (inCapturePhase = getParent(inCapturePhase)), instance--;
+                for (; 0 < lastHostComponent - instance; )
+                  (reactEventName = getParent(reactEventName)),
+                    lastHostComponent--;
+                for (; instance--; ) {
+                  if (
+                    inCapturePhase === reactEventName ||
+                    (null !== reactEventName &&
+                      inCapturePhase === reactEventName.alternate)
+                  )
+                    break b;
+                  inCapturePhase = getParent(inCapturePhase);
+                  reactEventName = getParent(reactEventName);
+                }
+                inCapturePhase = null;
+              }
+            else inCapturePhase = null;
+            null !== SyntheticEventCtor &&
+              accumulateEnterLeaveListenersForEvent(
+                dispatchQueue,
+                reactName,
+                SyntheticEventCtor,
+                inCapturePhase,
+                !1
+              );
+            null !== reactEventType &&
+              null !== accumulateTargetOnly &&
+              accumulateEnterLeaveListenersForEvent(
+                dispatchQueue,
+                accumulateTargetOnly,
+                reactEventType,
+                inCapturePhase,
+                !0
+              );
+          }
+        }
+      }
+      a: {
+        reactName = targetInst ? getNodeFromInstance(targetInst) : window;
+        SyntheticEventCtor =
+          reactName.nodeName && reactName.nodeName.toLowerCase();
+        if (
+          "select" === SyntheticEventCtor ||
+          ("input" === SyntheticEventCtor && "file" === reactName.type)
+        )
+          var getTargetInstFunc = getTargetInstForChangeEvent;
+        else if (isTextInputElement(reactName))
+          if (isInputEventSupported)
+            getTargetInstFunc = getTargetInstForInputOrChangeEvent;
+          else {
+            getTargetInstFunc = getTargetInstForInputEventPolyfill;
+            var handleEventFunc = handleEventsForInputEventPolyfill;
+          }
+        else
+          (SyntheticEventCtor = reactName.nodeName),
+            !SyntheticEventCtor ||
+            "input" !== SyntheticEventCtor.toLowerCase() ||
+            ("checkbox" !== reactName.type && "radio" !== reactName.type)
+              ? targetInst &&
+                isCustomElement(targetInst.elementType) &&
+                (getTargetInstFunc = getTargetInstForChangeEvent)
+              : (getTargetInstFunc = getTargetInstForClickEvent);
+        if (
+          getTargetInstFunc &&
+          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))
+        ) {
+          createAndAccumulateChangeEvent(
+            dispatchQueue,
+            getTargetInstFunc,
+            nativeEvent,
+            nativeEventTarget
+          );
+          break a;
+        }
+        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);
+        "focusout" === domEventName &&
+          targetInst &&
+          "number" === reactName.type &&
+          null != targetInst.memoizedProps.value &&
+          setDefaultValue(reactName, "number", reactName.value);
+      }
+      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;
+      switch (domEventName) {
+        case "focusin":
+          if (
+            isTextInputElement(handleEventFunc) ||
+            "true" === handleEventFunc.contentEditable
+          )
+            (activeElement = handleEventFunc),
+              (activeElementInst = targetInst),
+              (lastSelection = null);
+          break;
+        case "focusout":
+          lastSelection = activeElementInst = activeElement = null;
+          break;
+        case "mousedown":
+          mouseDown = !0;
+          break;
+        case "contextmenu":
+        case "mouseup":
+        case "dragend":
+          mouseDown = !1;
+          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
+          break;
+        case "selectionchange":
+          if (skipSelectionChangeEvent) break;
+        case "keydown":
+        case "keyup":
+          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
+      }
+      var fallbackData;
+      if (canUseCompositionEvent)
+        b: {
+          switch (domEventName) {
+            case "compositionstart":
+              var eventType = "onCompositionStart";
+              break b;
+            case "compositionend":
+              eventType = "onCompositionEnd";
+              break b;
+            case "compositionupdate":
+              eventType = "onCompositionUpdate";
+              break b;
+          }
+          eventType = void 0;
+        }
+      else
+        isComposing
+          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&
+            (eventType = "onCompositionEnd")
+          : "keydown" === domEventName &&
+            229 === nativeEvent.keyCode &&
+            (eventType = "onCompositionStart");
+      eventType &&
+        (useFallbackCompositionData &&
+          "ko" !== nativeEvent.locale &&
+          (isComposing || "onCompositionStart" !== eventType
+            ? "onCompositionEnd" === eventType &&
+              isComposing &&
+              (fallbackData = getData())
+            : ((root = nativeEventTarget),
+              (startText = "value" in root ? root.value : root.textContent),
+              (isComposing = !0))),
+        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),
+        0 < handleEventFunc.length &&
+          ((eventType = new SyntheticCompositionEvent(
+            eventType,
+            domEventName,
+            null,
+            nativeEvent,
+            nativeEventTarget
+          )),
+          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),
+          fallbackData
+            ? (eventType.data = fallbackData)
+            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),
+              null !== fallbackData && (eventType.data = fallbackData))));
+      if (
+        (fallbackData = canUseTextInputEvent
+          ? getNativeBeforeInputChars(domEventName, nativeEvent)
+          : getFallbackBeforeInputChars(domEventName, nativeEvent))
+      )
+        (eventType = accumulateTwoPhaseListeners(targetInst, "onBeforeInput")),
+          0 < eventType.length &&
+            ((handleEventFunc = new SyntheticCompositionEvent(
+              "onBeforeInput",
+              "beforeinput",
+              null,
+              nativeEvent,
+              nativeEventTarget
+            )),
+            dispatchQueue.push({
+              event: handleEventFunc,
+              listeners: eventType
+            }),
+            (handleEventFunc.data = fallbackData));
+      extractEvents$1(
+        dispatchQueue,
+        domEventName,
+        targetInst,
+        nativeEvent,
+        nativeEventTarget
+      );
+    }
+    processDispatchQueue(dispatchQueue, eventSystemFlags);
+  });
+}
+function createDispatchListener(instance, listener, currentTarget) {
+  return {
+    instance: instance,
+    listener: listener,
+    currentTarget: currentTarget
+  };
+}
+function accumulateTwoPhaseListeners(targetFiber, reactName) {
+  for (
+    var captureName = reactName + "Capture", listeners = [];
+    null !== targetFiber;
+
+  ) {
+    var _instance2 = targetFiber,
+      stateNode = _instance2.stateNode;
+    _instance2 = _instance2.tag;
+    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||
+      null === stateNode ||
+      ((_instance2 = getListener(targetFiber, captureName)),
+      null != _instance2 &&
+        listeners.unshift(
+          createDispatchListener(targetFiber, _instance2, stateNode)
+        ),
+      (_instance2 = getListener(targetFiber, reactName)),
+      null != _instance2 &&
+        listeners.push(
+          createDispatchListener(targetFiber, _instance2, stateNode)
+        ));
+    if (3 === targetFiber.tag) return listeners;
+    targetFiber = targetFiber.return;
+  }
+  return [];
+}
+function getParent(inst) {
+  if (null === inst) return null;
+  do inst = inst.return;
+  while (inst && 5 !== inst.tag && 27 !== inst.tag);
+  return inst ? inst : null;
+}
+function accumulateEnterLeaveListenersForEvent(
+  dispatchQueue,
+  event,
+  target,
+  common,
+  inCapturePhase
+) {
+  for (
+    var registrationName = event._reactName, listeners = [];
+    null !== target && target !== common;
+
+  ) {
+    var _instance3 = target,
+      alternate = _instance3.alternate,
+      stateNode = _instance3.stateNode;
+    _instance3 = _instance3.tag;
+    if (null !== alternate && alternate === common) break;
+    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||
+      null === stateNode ||
+      ((alternate = stateNode),
+      inCapturePhase
+        ? ((stateNode = getListener(target, registrationName)),
+          null != stateNode &&
+            listeners.unshift(
+              createDispatchListener(target, stateNode, alternate)
+            ))
+        : inCapturePhase ||
+          ((stateNode = getListener(target, registrationName)),
+          null != stateNode &&
+            listeners.push(
+              createDispatchListener(target, stateNode, alternate)
+            )));
+    target = target.return;
+  }
+  0 !== listeners.length &&
+    dispatchQueue.push({ event: event, listeners: listeners });
+}
+var NORMALIZE_NEWLINES_REGEX = /\r\n?/g,
+  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g;
+function normalizeMarkupForTextOrAttribute(markup) {
+  return ("string" === typeof markup ? markup : "" + markup)
+    .replace(NORMALIZE_NEWLINES_REGEX, "\n")
+    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, "");
+}
+function checkForUnmatchedText(serverText, clientText) {
+  clientText = normalizeMarkupForTextOrAttribute(clientText);
+  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;
+}
+function noop$1() {}
+function setProp(domElement, tag, key, value, props, prevValue) {
+  switch (key) {
+    case "children":
+      "string" === typeof value
+        ? "body" === tag ||
+          ("textarea" === tag && "" === value) ||
+          setTextContent(domElement, value)
+        : ("number" === typeof value || "bigint" === typeof value) &&
+          "body" !== tag &&
+          setTextContent(domElement, "" + value);
+      break;
+    case "className":
+      setValueForKnownAttribute(domElement, "class", value);
+      break;
+    case "tabIndex":
+      setValueForKnownAttribute(domElement, "tabindex", value);
+      break;
+    case "dir":
+    case "role":
+    case "viewBox":
+    case "width":
+    case "height":
+      setValueForKnownAttribute(domElement, key, value);
+      break;
+    case "style":
+      setValueForStyles(domElement, value, prevValue);
+      break;
+    case "data":
+      if ("object" !== tag) {
+        setValueForKnownAttribute(domElement, "data", value);
+        break;
+      }
+    case "src":
+    case "href":
+      if ("" === value && ("a" !== tag || "href" !== key)) {
+        domElement.removeAttribute(key);
+        break;
+      }
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      ) {
+        domElement.removeAttribute(key);
+        break;
+      }
+      value = sanitizeURL("" + value);
+      domElement.setAttribute(key, value);
+      break;
+    case "action":
+    case "formAction":
+      if ("function" === typeof value) {
+        domElement.setAttribute(
+          key,
+          "javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')"
+        );
+        break;
+      } else
+        "function" === typeof prevValue &&
+          ("formAction" === key
+            ? ("input" !== tag &&
+                setProp(domElement, tag, "name", props.name, props, null),
+              setProp(
+                domElement,
+                tag,
+                "formEncType",
+                props.formEncType,
+                props,
+                null
+              ),
+              setProp(
+                domElement,
+                tag,
+                "formMethod",
+                props.formMethod,
+                props,
+                null
+              ),
+              setProp(
+                domElement,
+                tag,
+                "formTarget",
+                props.formTarget,
+                props,
+                null
+              ))
+            : (setProp(domElement, tag, "encType", props.encType, props, null),
+              setProp(domElement, tag, "method", props.method, props, null),
+              setProp(domElement, tag, "target", props.target, props, null)));
+      if (
+        null == value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      ) {
+        domElement.removeAttribute(key);
+        break;
+      }
+      value = sanitizeURL("" + value);
+      domElement.setAttribute(key, value);
+      break;
+    case "onClick":
+      null != value && (domElement.onclick = noop$1);
+      break;
+    case "onScroll":
+      null != value && listenToNonDelegatedEvent("scroll", domElement);
+      break;
+    case "onScrollEnd":
+      null != value && listenToNonDelegatedEvent("scrollend", domElement);
+      break;
+    case "dangerouslySetInnerHTML":
+      if (null != value) {
+        if ("object" !== typeof value || !("__html" in value))
+          throw Error(formatProdErrorMessage(61));
+        key = value.__html;
+        if (null != key) {
+          if (null != props.children) throw Error(formatProdErrorMessage(60));
+          domElement.innerHTML = key;
+        }
+      }
+      break;
+    case "multiple":
+      domElement.multiple =
+        value && "function" !== typeof value && "symbol" !== typeof value;
+      break;
+    case "muted":
+      domElement.muted =
+        value && "function" !== typeof value && "symbol" !== typeof value;
+      break;
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "ref":
+      break;
+    case "autoFocus":
+      break;
+    case "xlinkHref":
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "boolean" === typeof value ||
+        "symbol" === typeof value
+      ) {
+        domElement.removeAttribute("xlink:href");
+        break;
+      }
+      key = sanitizeURL("" + value);
+      domElement.setAttributeNS(
+        "http://www.w3.org/1999/xlink",
+        "xlink:href",
+        key
+      );
+      break;
+    case "contentEditable":
+    case "spellCheck":
+    case "draggable":
+    case "value":
+    case "autoReverse":
+    case "externalResourcesRequired":
+    case "focusable":
+    case "preserveAlpha":
+      null != value && "function" !== typeof value && "symbol" !== typeof value
+        ? domElement.setAttribute(key, "" + value)
+        : domElement.removeAttribute(key);
+      break;
+    case "inert":
+    case "allowFullScreen":
+    case "async":
+    case "autoPlay":
+    case "controls":
+    case "default":
+    case "defer":
+    case "disabled":
+    case "disablePictureInPicture":
+    case "disableRemotePlayback":
+    case "formNoValidate":
+    case "hidden":
+    case "loop":
+    case "noModule":
+    case "noValidate":
+    case "open":
+    case "playsInline":
+    case "readOnly":
+    case "required":
+    case "reversed":
+    case "scoped":
+    case "seamless":
+    case "itemScope":
+      value && "function" !== typeof value && "symbol" !== typeof value
+        ? domElement.setAttribute(key, "")
+        : domElement.removeAttribute(key);
+      break;
+    case "capture":
+    case "download":
+      !0 === value
+        ? domElement.setAttribute(key, "")
+        : !1 !== value &&
+            null != value &&
+            "function" !== typeof value &&
+            "symbol" !== typeof value
+          ? domElement.setAttribute(key, value)
+          : domElement.removeAttribute(key);
+      break;
+    case "cols":
+    case "rows":
+    case "size":
+    case "span":
+      null != value &&
+      "function" !== typeof value &&
+      "symbol" !== typeof value &&
+      !isNaN(value) &&
+      1 <= value
+        ? domElement.setAttribute(key, value)
+        : domElement.removeAttribute(key);
+      break;
+    case "rowSpan":
+    case "start":
+      null == value ||
+      "function" === typeof value ||
+      "symbol" === typeof value ||
+      isNaN(value)
+        ? domElement.removeAttribute(key)
+        : domElement.setAttribute(key, value);
+      break;
+    case "popover":
+      listenToNonDelegatedEvent("beforetoggle", domElement);
+      listenToNonDelegatedEvent("toggle", domElement);
+      setValueForAttribute(domElement, "popover", value);
+      break;
+    case "xlinkActuate":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:actuate",
+        value
+      );
+      break;
+    case "xlinkArcrole":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:arcrole",
+        value
+      );
+      break;
+    case "xlinkRole":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:role",
+        value
+      );
+      break;
+    case "xlinkShow":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:show",
+        value
+      );
+      break;
+    case "xlinkTitle":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:title",
+        value
+      );
+      break;
+    case "xlinkType":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:type",
+        value
+      );
+      break;
+    case "xmlBase":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/XML/1998/namespace",
+        "xml:base",
+        value
+      );
+      break;
+    case "xmlLang":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/XML/1998/namespace",
+        "xml:lang",
+        value
+      );
+      break;
+    case "xmlSpace":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/XML/1998/namespace",
+        "xml:space",
+        value
+      );
+      break;
+    case "is":
+      setValueForAttribute(domElement, "is", value);
+      break;
+    case "innerText":
+    case "textContent":
+      break;
+    default:
+      if (
+        !(2 < key.length) ||
+        ("o" !== key[0] && "O" !== key[0]) ||
+        ("n" !== key[1] && "N" !== key[1])
+      )
+        (key = aliases.get(key) || key),
+          setValueForAttribute(domElement, key, value);
+  }
+}
+function setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {
+  switch (key) {
+    case "style":
+      setValueForStyles(domElement, value, prevValue);
+      break;
+    case "dangerouslySetInnerHTML":
+      if (null != value) {
+        if ("object" !== typeof value || !("__html" in value))
+          throw Error(formatProdErrorMessage(61));
+        key = value.__html;
+        if (null != key) {
+          if (null != props.children) throw Error(formatProdErrorMessage(60));
+          domElement.innerHTML = key;
+        }
+      }
+      break;
+    case "children":
+      "string" === typeof value
+        ? setTextContent(domElement, value)
+        : ("number" === typeof value || "bigint" === typeof value) &&
+          setTextContent(domElement, "" + value);
+      break;
+    case "onScroll":
+      null != value && listenToNonDelegatedEvent("scroll", domElement);
+      break;
+    case "onScrollEnd":
+      null != value && listenToNonDelegatedEvent("scrollend", domElement);
+      break;
+    case "onClick":
+      null != value && (domElement.onclick = noop$1);
+      break;
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "innerHTML":
+    case "ref":
+      break;
+    case "innerText":
+    case "textContent":
+      break;
+    default:
+      if (!registrationNameDependencies.hasOwnProperty(key))
+        a: {
+          if (
+            "o" === key[0] &&
+            "n" === key[1] &&
+            ((props = key.endsWith("Capture")),
+            (tag = key.slice(2, props ? key.length - 7 : void 0)),
+            (prevValue = domElement[internalPropsKey] || null),
+            (prevValue = null != prevValue ? prevValue[key] : null),
+            "function" === typeof prevValue &&
+              domElement.removeEventListener(tag, prevValue, props),
+            "function" === typeof value)
+          ) {
+            "function" !== typeof prevValue &&
+              null !== prevValue &&
+              (key in domElement
+                ? (domElement[key] = null)
+                : domElement.hasAttribute(key) &&
+                  domElement.removeAttribute(key));
+            domElement.addEventListener(tag, value, props);
+            break a;
+          }
+          key in domElement
+            ? (domElement[key] = value)
+            : !0 === value
+              ? domElement.setAttribute(key, "")
+              : setValueForAttribute(domElement, key, value);
+        }
+  }
+}
+function setInitialProperties(domElement, tag, props) {
+  switch (tag) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+    case "a":
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "img":
+      listenToNonDelegatedEvent("error", domElement);
+      listenToNonDelegatedEvent("load", domElement);
+      var hasSrc = !1,
+        hasSrcSet = !1,
+        propKey;
+      for (propKey in props)
+        if (props.hasOwnProperty(propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "src":
+                hasSrc = !0;
+                break;
+              case "srcSet":
+                hasSrcSet = !0;
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(137, tag));
+              default:
+                setProp(domElement, tag, propKey, propValue, props, null);
+            }
+        }
+      hasSrcSet &&
+        setProp(domElement, tag, "srcSet", props.srcSet, props, null);
+      hasSrc && setProp(domElement, tag, "src", props.src, props, null);
+      return;
+    case "input":
+      listenToNonDelegatedEvent("invalid", domElement);
+      var defaultValue = (propKey = propValue = hasSrcSet = null),
+        checked = null,
+        defaultChecked = null;
+      for (hasSrc in props)
+        if (props.hasOwnProperty(hasSrc)) {
+          var propValue$188 = props[hasSrc];
+          if (null != propValue$188)
+            switch (hasSrc) {
+              case "name":
+                hasSrcSet = propValue$188;
+                break;
+              case "type":
+                propValue = propValue$188;
+                break;
+              case "checked":
+                checked = propValue$188;
+                break;
+              case "defaultChecked":
+                defaultChecked = propValue$188;
+                break;
+              case "value":
+                propKey = propValue$188;
+                break;
+              case "defaultValue":
+                defaultValue = propValue$188;
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                if (null != propValue$188)
+                  throw Error(formatProdErrorMessage(137, tag));
+                break;
+              default:
+                setProp(domElement, tag, hasSrc, propValue$188, props, null);
+            }
+        }
+      initInput(
+        domElement,
+        propKey,
+        defaultValue,
+        checked,
+        defaultChecked,
+        propValue,
+        hasSrcSet,
+        !1
+      );
+      track(domElement);
+      return;
+    case "select":
+      listenToNonDelegatedEvent("invalid", domElement);
+      hasSrc = propValue = propKey = null;
+      for (hasSrcSet in props)
+        if (
+          props.hasOwnProperty(hasSrcSet) &&
+          ((defaultValue = props[hasSrcSet]), null != defaultValue)
+        )
+          switch (hasSrcSet) {
+            case "value":
+              propKey = defaultValue;
+              break;
+            case "defaultValue":
+              propValue = defaultValue;
+              break;
+            case "multiple":
+              hasSrc = defaultValue;
+            default:
+              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);
+          }
+      tag = propKey;
+      props = propValue;
+      domElement.multiple = !!hasSrc;
+      null != tag
+        ? updateOptions(domElement, !!hasSrc, tag, !1)
+        : null != props && updateOptions(domElement, !!hasSrc, props, !0);
+      return;
+    case "textarea":
+      listenToNonDelegatedEvent("invalid", domElement);
+      propKey = hasSrcSet = hasSrc = null;
+      for (propValue in props)
+        if (
+          props.hasOwnProperty(propValue) &&
+          ((defaultValue = props[propValue]), null != defaultValue)
+        )
+          switch (propValue) {
+            case "value":
+              hasSrc = defaultValue;
+              break;
+            case "defaultValue":
+              hasSrcSet = defaultValue;
+              break;
+            case "children":
+              propKey = defaultValue;
+              break;
+            case "dangerouslySetInnerHTML":
+              if (null != defaultValue) throw Error(formatProdErrorMessage(91));
+              break;
+            default:
+              setProp(domElement, tag, propValue, defaultValue, props, null);
+          }
+      initTextarea(domElement, hasSrc, hasSrcSet, propKey);
+      track(domElement);
+      return;
+    case "option":
+      for (checked in props)
+        if (
+          props.hasOwnProperty(checked) &&
+          ((hasSrc = props[checked]), null != hasSrc)
+        )
+          switch (checked) {
+            case "selected":
+              domElement.selected =
+                hasSrc &&
+                "function" !== typeof hasSrc &&
+                "symbol" !== typeof hasSrc;
+              break;
+            default:
+              setProp(domElement, tag, checked, hasSrc, props, null);
+          }
+      return;
+    case "dialog":
+      listenToNonDelegatedEvent("beforetoggle", domElement);
+      listenToNonDelegatedEvent("toggle", domElement);
+      listenToNonDelegatedEvent("cancel", domElement);
+      listenToNonDelegatedEvent("close", domElement);
+      break;
+    case "iframe":
+    case "object":
+      listenToNonDelegatedEvent("load", domElement);
+      break;
+    case "video":
+    case "audio":
+      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)
+        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);
+      break;
+    case "image":
+      listenToNonDelegatedEvent("error", domElement);
+      listenToNonDelegatedEvent("load", domElement);
+      break;
+    case "details":
+      listenToNonDelegatedEvent("toggle", domElement);
+      break;
+    case "embed":
+    case "source":
+    case "link":
+      listenToNonDelegatedEvent("error", domElement),
+        listenToNonDelegatedEvent("load", domElement);
+    case "area":
+    case "base":
+    case "br":
+    case "col":
+    case "hr":
+    case "keygen":
+    case "meta":
+    case "param":
+    case "track":
+    case "wbr":
+    case "menuitem":
+      for (defaultChecked in props)
+        if (
+          props.hasOwnProperty(defaultChecked) &&
+          ((hasSrc = props[defaultChecked]), null != hasSrc)
+        )
+          switch (defaultChecked) {
+            case "children":
+            case "dangerouslySetInnerHTML":
+              throw Error(formatProdErrorMessage(137, tag));
+            default:
+              setProp(domElement, tag, defaultChecked, hasSrc, props, null);
+          }
+      return;
+    default:
+      if (isCustomElement(tag)) {
+        for (propValue$188 in props)
+          props.hasOwnProperty(propValue$188) &&
+            ((hasSrc = props[propValue$188]),
+            void 0 !== hasSrc &&
+              setPropOnCustomElement(
+                domElement,
+                tag,
+                propValue$188,
+                hasSrc,
+                props,
+                void 0
+              ));
+        return;
+      }
+  }
+  for (defaultValue in props)
+    props.hasOwnProperty(defaultValue) &&
+      ((hasSrc = props[defaultValue]),
+      null != hasSrc &&
+        setProp(domElement, tag, defaultValue, hasSrc, props, null));
+}
+function updateProperties(domElement, tag, lastProps, nextProps) {
+  switch (tag) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+    case "a":
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "input":
+      var name = null,
+        type = null,
+        value = null,
+        defaultValue = null,
+        lastDefaultValue = null,
+        checked = null,
+        defaultChecked = null;
+      for (propKey in lastProps) {
+        var lastProp = lastProps[propKey];
+        if (lastProps.hasOwnProperty(propKey) && null != lastProp)
+          switch (propKey) {
+            case "checked":
+              break;
+            case "value":
+              break;
+            case "defaultValue":
+              lastDefaultValue = lastProp;
+            default:
+              nextProps.hasOwnProperty(propKey) ||
+                setProp(domElement, tag, propKey, null, nextProps, lastProp);
+          }
+      }
+      for (var propKey$205 in nextProps) {
+        var propKey = nextProps[propKey$205];
+        lastProp = lastProps[propKey$205];
+        if (
+          nextProps.hasOwnProperty(propKey$205) &&
+          (null != propKey || null != lastProp)
+        )
+          switch (propKey$205) {
+            case "type":
+              type = propKey;
+              break;
+            case "name":
+              name = propKey;
+              break;
+            case "checked":
+              checked = propKey;
+              break;
+            case "defaultChecked":
+              defaultChecked = propKey;
+              break;
+            case "value":
+              value = propKey;
+              break;
+            case "defaultValue":
+              defaultValue = propKey;
+              break;
+            case "children":
+            case "dangerouslySetInnerHTML":
+              if (null != propKey)
+                throw Error(formatProdErrorMessage(137, tag));
+              break;
+            default:
+              propKey !== lastProp &&
+                setProp(
+                  domElement,
+                  tag,
+                  propKey$205,
+                  propKey,
+                  nextProps,
+                  lastProp
+                );
+          }
+      }
+      updateInput(
+        domElement,
+        value,
+        defaultValue,
+        lastDefaultValue,
+        checked,
+        defaultChecked,
+        type,
+        name
+      );
+      return;
+    case "select":
+      propKey = value = defaultValue = propKey$205 = null;
+      for (type in lastProps)
+        if (
+          ((lastDefaultValue = lastProps[type]),
+          lastProps.hasOwnProperty(type) && null != lastDefaultValue)
+        )
+          switch (type) {
+            case "value":
+              break;
+            case "multiple":
+              propKey = lastDefaultValue;
+            default:
+              nextProps.hasOwnProperty(type) ||
+                setProp(
+                  domElement,
+                  tag,
+                  type,
+                  null,
+                  nextProps,
+                  lastDefaultValue
+                );
+          }
+      for (name in nextProps)
+        if (
+          ((type = nextProps[name]),
+          (lastDefaultValue = lastProps[name]),
+          nextProps.hasOwnProperty(name) &&
+            (null != type || null != lastDefaultValue))
+        )
+          switch (name) {
+            case "value":
+              propKey$205 = type;
+              break;
+            case "defaultValue":
+              defaultValue = type;
+              break;
+            case "multiple":
+              value = type;
+            default:
+              type !== lastDefaultValue &&
+                setProp(
+                  domElement,
+                  tag,
+                  name,
+                  type,
+                  nextProps,
+                  lastDefaultValue
+                );
+          }
+      tag = defaultValue;
+      lastProps = value;
+      nextProps = propKey;
+      null != propKey$205
+        ? updateOptions(domElement, !!lastProps, propKey$205, !1)
+        : !!nextProps !== !!lastProps &&
+          (null != tag
+            ? updateOptions(domElement, !!lastProps, tag, !0)
+            : updateOptions(domElement, !!lastProps, lastProps ? [] : "", !1));
+      return;
+    case "textarea":
+      propKey = propKey$205 = null;
+      for (defaultValue in lastProps)
+        if (
+          ((name = lastProps[defaultValue]),
+          lastProps.hasOwnProperty(defaultValue) &&
+            null != name &&
+            !nextProps.hasOwnProperty(defaultValue))
+        )
+          switch (defaultValue) {
+            case "value":
+              break;
+            case "children":
+              break;
+            default:
+              setProp(domElement, tag, defaultValue, null, nextProps, name);
+          }
+      for (value in nextProps)
+        if (
+          ((name = nextProps[value]),
+          (type = lastProps[value]),
+          nextProps.hasOwnProperty(value) && (null != name || null != type))
+        )
+          switch (value) {
+            case "value":
+              propKey$205 = name;
+              break;
+            case "defaultValue":
+              propKey = name;
+              break;
+            case "children":
+              break;
+            case "dangerouslySetInnerHTML":
+              if (null != name) throw Error(formatProdErrorMessage(91));
+              break;
+            default:
+              name !== type &&
+                setProp(domElement, tag, value, name, nextProps, type);
+          }
+      updateTextarea(domElement, propKey$205, propKey);
+      return;
+    case "option":
+      for (var propKey$221 in lastProps)
+        if (
+          ((propKey$205 = lastProps[propKey$221]),
+          lastProps.hasOwnProperty(propKey$221) &&
+            null != propKey$205 &&
+            !nextProps.hasOwnProperty(propKey$221))
+        )
+          switch (propKey$221) {
+            case "selected":
+              domElement.selected = !1;
+              break;
+            default:
+              setProp(
+                domElement,
+                tag,
+                propKey$221,
+                null,
+                nextProps,
+                propKey$205
+              );
+          }
+      for (lastDefaultValue in nextProps)
+        if (
+          ((propKey$205 = nextProps[lastDefaultValue]),
+          (propKey = lastProps[lastDefaultValue]),
+          nextProps.hasOwnProperty(lastDefaultValue) &&
+            propKey$205 !== propKey &&
+            (null != propKey$205 || null != propKey))
+        )
+          switch (lastDefaultValue) {
+            case "selected":
+              domElement.selected =
+                propKey$205 &&
+                "function" !== typeof propKey$205 &&
+                "symbol" !== typeof propKey$205;
+              break;
+            default:
+              setProp(
+                domElement,
+                tag,
+                lastDefaultValue,
+                propKey$205,
+                nextProps,
+                propKey
+              );
+          }
+      return;
+    case "img":
+    case "link":
+    case "area":
+    case "base":
+    case "br":
+    case "col":
+    case "embed":
+    case "hr":
+    case "keygen":
+    case "meta":
+    case "param":
+    case "source":
+    case "track":
+    case "wbr":
+    case "menuitem":
+      for (var propKey$226 in lastProps)
+        (propKey$205 = lastProps[propKey$226]),
+          lastProps.hasOwnProperty(propKey$226) &&
+            null != propKey$205 &&
+            !nextProps.hasOwnProperty(propKey$226) &&
+            setProp(domElement, tag, propKey$226, null, nextProps, propKey$205);
+      for (checked in nextProps)
+        if (
+          ((propKey$205 = nextProps[checked]),
+          (propKey = lastProps[checked]),
+          nextProps.hasOwnProperty(checked) &&
+            propKey$205 !== propKey &&
+            (null != propKey$205 || null != propKey))
+        )
+          switch (checked) {
+            case "children":
+            case "dangerouslySetInnerHTML":
+              if (null != propKey$205)
+                throw Error(formatProdErrorMessage(137, tag));
+              break;
+            default:
+              setProp(
+                domElement,
+                tag,
+                checked,
+                propKey$205,
+                nextProps,
+                propKey
+              );
+          }
+      return;
+    default:
+      if (isCustomElement(tag)) {
+        for (var propKey$231 in lastProps)
+          (propKey$205 = lastProps[propKey$231]),
+            lastProps.hasOwnProperty(propKey$231) &&
+              void 0 !== propKey$205 &&
+              !nextProps.hasOwnProperty(propKey$231) &&
+              setPropOnCustomElement(
+                domElement,
+                tag,
+                propKey$231,
+                void 0,
+                nextProps,
+                propKey$205
+              );
+        for (defaultChecked in nextProps)
+          (propKey$205 = nextProps[defaultChecked]),
+            (propKey = lastProps[defaultChecked]),
+            !nextProps.hasOwnProperty(defaultChecked) ||
+              propKey$205 === propKey ||
+              (void 0 === propKey$205 && void 0 === propKey) ||
+              setPropOnCustomElement(
+                domElement,
+                tag,
+                defaultChecked,
+                propKey$205,
+                nextProps,
+                propKey
+              );
+        return;
+      }
+  }
+  for (var propKey$236 in lastProps)
+    (propKey$205 = lastProps[propKey$236]),
+      lastProps.hasOwnProperty(propKey$236) &&
+        null != propKey$205 &&
+        !nextProps.hasOwnProperty(propKey$236) &&
+        setProp(domElement, tag, propKey$236, null, nextProps, propKey$205);
+  for (lastProp in nextProps)
+    (propKey$205 = nextProps[lastProp]),
+      (propKey = lastProps[lastProp]),
+      !nextProps.hasOwnProperty(lastProp) ||
+        propKey$205 === propKey ||
+        (null == propKey$205 && null == propKey) ||
+        setProp(domElement, tag, lastProp, propKey$205, nextProps, propKey);
+}
+var eventsEnabled = null,
+  selectionInformation = null;
+function getOwnerDocumentFromRootContainer(rootContainerElement) {
+  return 9 === rootContainerElement.nodeType
+    ? rootContainerElement
+    : rootContainerElement.ownerDocument;
+}
+function getOwnHostContext(namespaceURI) {
+  switch (namespaceURI) {
+    case "http://www.w3.org/2000/svg":
+      return 1;
+    case "http://www.w3.org/1998/Math/MathML":
+      return 2;
+    default:
+      return 0;
+  }
+}
+function getChildHostContextProd(parentNamespace, type) {
+  if (0 === parentNamespace)
+    switch (type) {
+      case "svg":
+        return 1;
+      case "math":
+        return 2;
+      default:
+        return 0;
+    }
+  return 1 === parentNamespace && "foreignObject" === type
+    ? 0
+    : parentNamespace;
+}
+function shouldSetTextContent(type, props) {
+  return (
+    "textarea" === type ||
+    "noscript" === type ||
+    "string" === typeof props.children ||
+    "number" === typeof props.children ||
+    "bigint" === typeof props.children ||
+    ("object" === typeof props.dangerouslySetInnerHTML &&
+      null !== props.dangerouslySetInnerHTML &&
+      null != props.dangerouslySetInnerHTML.__html)
+  );
+}
+var currentPopstateTransitionEvent = null;
+function shouldAttemptEagerTransition() {
+  var event = window.event;
+  if (event && "popstate" === event.type) {
+    if (event === currentPopstateTransitionEvent) return !1;
+    currentPopstateTransitionEvent = event;
+    return !0;
+  }
+  currentPopstateTransitionEvent = null;
+  return !1;
+}
+var scheduleTimeout = "function" === typeof setTimeout ? setTimeout : void 0,
+  cancelTimeout = "function" === typeof clearTimeout ? clearTimeout : void 0,
+  localPromise = "function" === typeof Promise ? Promise : void 0,
+  scheduleMicrotask =
+    "function" === typeof queueMicrotask
+      ? queueMicrotask
+      : "undefined" !== typeof localPromise
+        ? function (callback) {
+            return localPromise
+              .resolve(null)
+              .then(callback)
+              .catch(handleErrorInNextTick);
+          }
+        : scheduleTimeout;
+function handleErrorInNextTick(error) {
+  setTimeout(function () {
+    throw error;
+  });
+}
+function isSingletonScope(type) {
+  return "head" === type;
+}
+function clearSuspenseBoundary(parentInstance, suspenseInstance) {
+  var node = suspenseInstance,
+    possiblePreambleContribution = 0,
+    depth = 0;
+  do {
+    var nextNode = node.nextSibling;
+    parentInstance.removeChild(node);
+    if (nextNode && 8 === nextNode.nodeType)
+      if (((node = nextNode.data), "/$" === node)) {
+        if (
+          0 < possiblePreambleContribution &&
+          8 > possiblePreambleContribution
+        ) {
+          node = possiblePreambleContribution;
+          var ownerDocument = parentInstance.ownerDocument;
+          node & 1 && releaseSingletonInstance(ownerDocument.documentElement);
+          node & 2 && releaseSingletonInstance(ownerDocument.body);
+          if (node & 4)
+            for (
+              node = ownerDocument.head,
+                releaseSingletonInstance(node),
+                ownerDocument = node.firstChild;
+              ownerDocument;
+
+            ) {
+              var nextNode$jscomp$0 = ownerDocument.nextSibling,
+                nodeName = ownerDocument.nodeName;
+              ownerDocument[internalHoistableMarker] ||
+                "SCRIPT" === nodeName ||
+                "STYLE" === nodeName ||
+                ("LINK" === nodeName &&
+                  "stylesheet" === ownerDocument.rel.toLowerCase()) ||
+                node.removeChild(ownerDocument);
+              ownerDocument = nextNode$jscomp$0;
+            }
+        }
+        if (0 === depth) {
+          parentInstance.removeChild(nextNode);
+          retryIfBlockedOn(suspenseInstance);
+          return;
+        }
+        depth--;
+      } else
+        "$" === node || "$?" === node || "$!" === node
+          ? depth++
+          : (possiblePreambleContribution = node.charCodeAt(0) - 48);
+    else possiblePreambleContribution = 0;
+    node = nextNode;
+  } while (node);
+  retryIfBlockedOn(suspenseInstance);
+}
+function clearContainerSparingly(container) {
+  var nextNode = container.firstChild;
+  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);
+  for (; nextNode; ) {
+    var node = nextNode;
+    nextNode = nextNode.nextSibling;
+    switch (node.nodeName) {
+      case "HTML":
+      case "HEAD":
+      case "BODY":
+        clearContainerSparingly(node);
+        detachDeletedInstance(node);
+        continue;
+      case "SCRIPT":
+      case "STYLE":
+        continue;
+      case "LINK":
+        if ("stylesheet" === node.rel.toLowerCase()) continue;
+    }
+    container.removeChild(node);
+  }
+}
+function canHydrateInstance(instance, type, props, inRootOrSingleton) {
+  for (; 1 === instance.nodeType; ) {
+    var anyProps = props;
+    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {
+      if (
+        !inRootOrSingleton &&
+        ("INPUT" !== instance.nodeName || "hidden" !== instance.type)
+      )
+        break;
+    } else if (!inRootOrSingleton)
+      if ("input" === type && "hidden" === instance.type) {
+        var name = null == anyProps.name ? null : "" + anyProps.name;
+        if (
+          "hidden" === anyProps.type &&
+          instance.getAttribute("name") === name
+        )
+          return instance;
+      } else return instance;
+    else if (!instance[internalHoistableMarker])
+      switch (type) {
+        case "meta":
+          if (!instance.hasAttribute("itemprop")) break;
+          return instance;
+        case "link":
+          name = instance.getAttribute("rel");
+          if ("stylesheet" === name && instance.hasAttribute("data-precedence"))
+            break;
+          else if (
+            name !== anyProps.rel ||
+            instance.getAttribute("href") !==
+              (null == anyProps.href || "" === anyProps.href
+                ? null
+                : anyProps.href) ||
+            instance.getAttribute("crossorigin") !==
+              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||
+            instance.getAttribute("title") !==
+              (null == anyProps.title ? null : anyProps.title)
+          )
+            break;
+          return instance;
+        case "style":
+          if (instance.hasAttribute("data-precedence")) break;
+          return instance;
+        case "script":
+          name = instance.getAttribute("src");
+          if (
+            (name !== (null == anyProps.src ? null : anyProps.src) ||
+              instance.getAttribute("type") !==
+                (null == anyProps.type ? null : anyProps.type) ||
+              instance.getAttribute("crossorigin") !==
+                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&
+            name &&
+            instance.hasAttribute("async") &&
+            !instance.hasAttribute("itemprop")
+          )
+            break;
+          return instance;
+        default:
+          return instance;
+      }
+    instance = getNextHydratable(instance.nextSibling);
+    if (null === instance) break;
+  }
+  return null;
+}
+function canHydrateTextInstance(instance, text, inRootOrSingleton) {
+  if ("" === text) return null;
+  for (; 3 !== instance.nodeType; ) {
+    if (
+      (1 !== instance.nodeType ||
+        "INPUT" !== instance.nodeName ||
+        "hidden" !== instance.type) &&
+      !inRootOrSingleton
+    )
+      return null;
+    instance = getNextHydratable(instance.nextSibling);
+    if (null === instance) return null;
+  }
+  return instance;
+}
+function isSuspenseInstanceFallback(instance) {
+  return (
+    "$!" === instance.data ||
+    ("$?" === instance.data && "complete" === instance.ownerDocument.readyState)
+  );
+}
+function registerSuspenseInstanceRetry(instance, callback) {
+  var ownerDocument = instance.ownerDocument;
+  if ("$?" !== instance.data || "complete" === ownerDocument.readyState)
+    callback();
+  else {
+    var listener = function () {
+      callback();
+      ownerDocument.removeEventListener("DOMContentLoaded", listener);
+    };
+    ownerDocument.addEventListener("DOMContentLoaded", listener);
+    instance._reactRetry = listener;
+  }
+}
+function getNextHydratable(node) {
+  for (; null != node; node = node.nextSibling) {
+    var nodeType = node.nodeType;
+    if (1 === nodeType || 3 === nodeType) break;
+    if (8 === nodeType) {
+      nodeType = node.data;
+      if (
+        "$" === nodeType ||
+        "$!" === nodeType ||
+        "$?" === nodeType ||
+        "F!" === nodeType ||
+        "F" === nodeType
+      )
+        break;
+      if ("/$" === nodeType) return null;
+    }
+  }
+  return node;
+}
+var previousHydratableOnEnteringScopedSingleton = null;
+function getParentSuspenseInstance(targetInstance) {
+  targetInstance = targetInstance.previousSibling;
+  for (var depth = 0; targetInstance; ) {
+    if (8 === targetInstance.nodeType) {
+      var data = targetInstance.data;
+      if ("$" === data || "$!" === data || "$?" === data) {
+        if (0 === depth) return targetInstance;
+        depth--;
+      } else "/$" === data && depth++;
+    }
+    targetInstance = targetInstance.previousSibling;
+  }
+  return null;
+}
+function resolveSingletonInstance(type, props, rootContainerInstance) {
+  props = getOwnerDocumentFromRootContainer(rootContainerInstance);
+  switch (type) {
+    case "html":
+      type = props.documentElement;
+      if (!type) throw Error(formatProdErrorMessage(452));
+      return type;
+    case "head":
+      type = props.head;
+      if (!type) throw Error(formatProdErrorMessage(453));
+      return type;
+    case "body":
+      type = props.body;
+      if (!type) throw Error(formatProdErrorMessage(454));
+      return type;
+    default:
+      throw Error(formatProdErrorMessage(451));
+  }
+}
+function releaseSingletonInstance(instance) {
+  for (var attributes = instance.attributes; attributes.length; )
+    instance.removeAttributeNode(attributes[0]);
+  detachDeletedInstance(instance);
+}
+var preloadPropsMap = new Map(),
+  preconnectsSet = new Set();
+function getHoistableRoot(container) {
+  return "function" === typeof container.getRootNode
+    ? container.getRootNode()
+    : 9 === container.nodeType
+      ? container
+      : container.ownerDocument;
+}
+var previousDispatcher = ReactDOMSharedInternals.d;
+ReactDOMSharedInternals.d = {
+  f: flushSyncWork,
+  r: requestFormReset,
+  D: prefetchDNS,
+  C: preconnect,
+  L: preload,
+  m: preloadModule,
+  X: preinitScript,
+  S: preinitStyle,
+  M: preinitModuleScript
+};
+function flushSyncWork() {
+  var previousWasRendering = previousDispatcher.f(),
+    wasRendering = flushSyncWork$1();
+  return previousWasRendering || wasRendering;
+}
+function requestFormReset(form) {
+  var formInst = getInstanceFromNode(form);
+  null !== formInst && 5 === formInst.tag && "form" === formInst.type
+    ? requestFormReset$1(formInst)
+    : previousDispatcher.r(form);
+}
+var globalDocument = "undefined" === typeof document ? null : document;
+function preconnectAs(rel, href, crossOrigin) {
+  var ownerDocument = globalDocument;
+  if (ownerDocument && "string" === typeof href && href) {
+    var limitedEscapedHref =
+      escapeSelectorAttributeValueInsideDoubleQuotes(href);
+    limitedEscapedHref =
+      'link[rel="' + rel + '"][href="' + limitedEscapedHref + '"]';
+    "string" === typeof crossOrigin &&
+      (limitedEscapedHref += '[crossorigin="' + crossOrigin + '"]');
+    preconnectsSet.has(limitedEscapedHref) ||
+      (preconnectsSet.add(limitedEscapedHref),
+      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),
+      null === ownerDocument.querySelector(limitedEscapedHref) &&
+        ((href = ownerDocument.createElement("link")),
+        setInitialProperties(href, "link", rel),
+        markNodeAsHoistable(href),
+        ownerDocument.head.appendChild(href)));
+  }
+}
+function prefetchDNS(href) {
+  previousDispatcher.D(href);
+  preconnectAs("dns-prefetch", href, null);
+}
+function preconnect(href, crossOrigin) {
+  previousDispatcher.C(href, crossOrigin);
+  preconnectAs("preconnect", href, crossOrigin);
+}
+function preload(href, as, options) {
+  previousDispatcher.L(href, as, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && href && as) {
+    var preloadSelector =
+      'link[rel="preload"][as="' +
+      escapeSelectorAttributeValueInsideDoubleQuotes(as) +
+      '"]';
+    "image" === as
+      ? options && options.imageSrcSet
+        ? ((preloadSelector +=
+            '[imagesrcset="' +
+            escapeSelectorAttributeValueInsideDoubleQuotes(
+              options.imageSrcSet
+            ) +
+            '"]'),
+          "string" === typeof options.imageSizes &&
+            (preloadSelector +=
+              '[imagesizes="' +
+              escapeSelectorAttributeValueInsideDoubleQuotes(
+                options.imageSizes
+              ) +
+              '"]'))
+        : (preloadSelector +=
+            '[href="' +
+            escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+            '"]')
+      : (preloadSelector +=
+          '[href="' +
+          escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+          '"]');
+    var key = preloadSelector;
+    switch (as) {
+      case "style":
+        key = getStyleKey(href);
+        break;
+      case "script":
+        key = getScriptKey(href);
+    }
+    preloadPropsMap.has(key) ||
+      ((href = assign(
+        {
+          rel: "preload",
+          href:
+            "image" === as && options && options.imageSrcSet ? void 0 : href,
+          as: as
+        },
+        options
+      )),
+      preloadPropsMap.set(key, href),
+      null !== ownerDocument.querySelector(preloadSelector) ||
+        ("style" === as &&
+          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||
+        ("script" === as &&
+          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||
+        ((as = ownerDocument.createElement("link")),
+        setInitialProperties(as, "link", href),
+        markNodeAsHoistable(as),
+        ownerDocument.head.appendChild(as)));
+  }
+}
+function preloadModule(href, options) {
+  previousDispatcher.m(href, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && href) {
+    var as = options && "string" === typeof options.as ? options.as : "script",
+      preloadSelector =
+        'link[rel="modulepreload"][as="' +
+        escapeSelectorAttributeValueInsideDoubleQuotes(as) +
+        '"][href="' +
+        escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+        '"]',
+      key = preloadSelector;
+    switch (as) {
+      case "audioworklet":
+      case "paintworklet":
+      case "serviceworker":
+      case "sharedworker":
+      case "worker":
+      case "script":
+        key = getScriptKey(href);
+    }
+    if (
+      !preloadPropsMap.has(key) &&
+      ((href = assign({ rel: "modulepreload", href: href }, options)),
+      preloadPropsMap.set(key, href),
+      null === ownerDocument.querySelector(preloadSelector))
+    ) {
+      switch (as) {
+        case "audioworklet":
+        case "paintworklet":
+        case "serviceworker":
+        case "sharedworker":
+        case "worker":
+        case "script":
+          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))
+            return;
+      }
+      as = ownerDocument.createElement("link");
+      setInitialProperties(as, "link", href);
+      markNodeAsHoistable(as);
+      ownerDocument.head.appendChild(as);
+    }
+  }
+}
+function preinitStyle(href, precedence, options) {
+  previousDispatcher.S(href, precedence, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && href) {
+    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,
+      key = getStyleKey(href);
+    precedence = precedence || "default";
+    var resource = styles.get(key);
+    if (!resource) {
+      var state = { loading: 0, preload: null };
+      if (
+        (resource = ownerDocument.querySelector(
+          getStylesheetSelectorFromKey(key)
+        ))
+      )
+        state.loading = 5;
+      else {
+        href = assign(
+          { rel: "stylesheet", href: href, "data-precedence": precedence },
+          options
+        );
+        (options = preloadPropsMap.get(key)) &&
+          adoptPreloadPropsForStylesheet(href, options);
+        var link = (resource = ownerDocument.createElement("link"));
+        markNodeAsHoistable(link);
+        setInitialProperties(link, "link", href);
+        link._p = new Promise(function (resolve, reject) {
+          link.onload = resolve;
+          link.onerror = reject;
+        });
+        link.addEventListener("load", function () {
+          state.loading |= 1;
+        });
+        link.addEventListener("error", function () {
+          state.loading |= 2;
+        });
+        state.loading |= 4;
+        insertStylesheet(resource, precedence, ownerDocument);
+      }
+      resource = {
+        type: "stylesheet",
+        instance: resource,
+        count: 1,
+        state: state
+      };
+      styles.set(key, resource);
+    }
+  }
+}
+function preinitScript(src, options) {
+  previousDispatcher.X(src, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && src) {
+    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,
+      key = getScriptKey(src),
+      resource = scripts.get(key);
+    resource ||
+      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),
+      resource ||
+        ((src = assign({ src: src, async: !0 }, options)),
+        (options = preloadPropsMap.get(key)) &&
+          adoptPreloadPropsForScript(src, options),
+        (resource = ownerDocument.createElement("script")),
+        markNodeAsHoistable(resource),
+        setInitialProperties(resource, "link", src),
+        ownerDocument.head.appendChild(resource)),
+      (resource = {
+        type: "script",
+        instance: resource,
+        count: 1,
+        state: null
+      }),
+      scripts.set(key, resource));
+  }
+}
+function preinitModuleScript(src, options) {
+  previousDispatcher.M(src, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && src) {
+    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,
+      key = getScriptKey(src),
+      resource = scripts.get(key);
+    resource ||
+      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),
+      resource ||
+        ((src = assign({ src: src, async: !0, type: "module" }, options)),
+        (options = preloadPropsMap.get(key)) &&
+          adoptPreloadPropsForScript(src, options),
+        (resource = ownerDocument.createElement("script")),
+        markNodeAsHoistable(resource),
+        setInitialProperties(resource, "link", src),
+        ownerDocument.head.appendChild(resource)),
+      (resource = {
+        type: "script",
+        instance: resource,
+        count: 1,
+        state: null
+      }),
+      scripts.set(key, resource));
+  }
+}
+function getResource(type, currentProps, pendingProps, currentResource) {
+  var JSCompiler_inline_result = (JSCompiler_inline_result =
+    rootInstanceStackCursor.current)
+    ? getHoistableRoot(JSCompiler_inline_result)
+    : null;
+  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));
+  switch (type) {
+    case "meta":
+    case "title":
+      return null;
+    case "style":
+      return "string" === typeof pendingProps.precedence &&
+        "string" === typeof pendingProps.href
+        ? ((currentProps = getStyleKey(pendingProps.href)),
+          (pendingProps = getResourcesFromRoot(
+            JSCompiler_inline_result
+          ).hoistableStyles),
+          (currentResource = pendingProps.get(currentProps)),
+          currentResource ||
+            ((currentResource = {
+              type: "style",
+              instance: null,
+              count: 0,
+              state: null
+            }),
+            pendingProps.set(currentProps, currentResource)),
+          currentResource)
+        : { type: "void", instance: null, count: 0, state: null };
+    case "link":
+      if (
+        "stylesheet" === pendingProps.rel &&
+        "string" === typeof pendingProps.href &&
+        "string" === typeof pendingProps.precedence
+      ) {
+        type = getStyleKey(pendingProps.href);
+        var styles$244 = getResourcesFromRoot(
+            JSCompiler_inline_result
+          ).hoistableStyles,
+          resource$245 = styles$244.get(type);
+        resource$245 ||
+          ((JSCompiler_inline_result =
+            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),
+          (resource$245 = {
+            type: "stylesheet",
+            instance: null,
+            count: 0,
+            state: { loading: 0, preload: null }
+          }),
+          styles$244.set(type, resource$245),
+          (styles$244 = JSCompiler_inline_result.querySelector(
+            getStylesheetSelectorFromKey(type)
+          )) &&
+            !styles$244._p &&
+            ((resource$245.instance = styles$244),
+            (resource$245.state.loading = 5)),
+          preloadPropsMap.has(type) ||
+            ((pendingProps = {
+              rel: "preload",
+              as: "style",
+              href: pendingProps.href,
+              crossOrigin: pendingProps.crossOrigin,
+              integrity: pendingProps.integrity,
+              media: pendingProps.media,
+              hrefLang: pendingProps.hrefLang,
+              referrerPolicy: pendingProps.referrerPolicy
+            }),
+            preloadPropsMap.set(type, pendingProps),
+            styles$244 ||
+              preloadStylesheet(
+                JSCompiler_inline_result,
+                type,
+                pendingProps,
+                resource$245.state
+              )));
+        if (currentProps && null === currentResource)
+          throw Error(formatProdErrorMessage(528, ""));
+        return resource$245;
+      }
+      if (currentProps && null !== currentResource)
+        throw Error(formatProdErrorMessage(529, ""));
+      return null;
+    case "script":
+      return (
+        (currentProps = pendingProps.async),
+        (pendingProps = pendingProps.src),
+        "string" === typeof pendingProps &&
+        currentProps &&
+        "function" !== typeof currentProps &&
+        "symbol" !== typeof currentProps
+          ? ((currentProps = getScriptKey(pendingProps)),
+            (pendingProps = getResourcesFromRoot(
+              JSCompiler_inline_result
+            ).hoistableScripts),
+            (currentResource = pendingProps.get(currentProps)),
+            currentResource ||
+              ((currentResource = {
+                type: "script",
+                instance: null,
+                count: 0,
+                state: null
+              }),
+              pendingProps.set(currentProps, currentResource)),
+            currentResource)
+          : { type: "void", instance: null, count: 0, state: null }
+      );
+    default:
+      throw Error(formatProdErrorMessage(444, type));
+  }
+}
+function getStyleKey(href) {
+  return 'href="' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '"';
+}
+function getStylesheetSelectorFromKey(key) {
+  return 'link[rel="stylesheet"][' + key + "]";
+}
+function stylesheetPropsFromRawProps(rawProps) {
+  return assign({}, rawProps, {
+    "data-precedence": rawProps.precedence,
+    precedence: null
+  });
+}
+function preloadStylesheet(ownerDocument, key, preloadProps, state) {
+  ownerDocument.querySelector('link[rel="preload"][as="style"][' + key + "]")
+    ? (state.loading = 1)
+    : ((key = ownerDocument.createElement("link")),
+      (state.preload = key),
+      key.addEventListener("load", function () {
+        return (state.loading |= 1);
+      }),
+      key.addEventListener("error", function () {
+        return (state.loading |= 2);
+      }),
+      setInitialProperties(key, "link", preloadProps),
+      markNodeAsHoistable(key),
+      ownerDocument.head.appendChild(key));
+}
+function getScriptKey(src) {
+  return '[src="' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '"]';
+}
+function getScriptSelectorFromKey(key) {
+  return "script[async]" + key;
+}
+function acquireResource(hoistableRoot, resource, props) {
+  resource.count++;
+  if (null === resource.instance)
+    switch (resource.type) {
+      case "style":
+        var instance = hoistableRoot.querySelector(
+          'style[data-href~="' +
+            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +
+            '"]'
+        );
+        if (instance)
+          return (
+            (resource.instance = instance),
+            markNodeAsHoistable(instance),
+            instance
+          );
+        var styleProps = assign({}, props, {
+          "data-href": props.href,
+          "data-precedence": props.precedence,
+          href: null,
+          precedence: null
+        });
+        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(
+          "style"
+        );
+        markNodeAsHoistable(instance);
+        setInitialProperties(instance, "style", styleProps);
+        insertStylesheet(instance, props.precedence, hoistableRoot);
+        return (resource.instance = instance);
+      case "stylesheet":
+        styleProps = getStyleKey(props.href);
+        var instance$250 = hoistableRoot.querySelector(
+          getStylesheetSelectorFromKey(styleProps)
+        );
+        if (instance$250)
+          return (
+            (resource.state.loading |= 4),
+            (resource.instance = instance$250),
+            markNodeAsHoistable(instance$250),
+            instance$250
+          );
+        instance = stylesheetPropsFromRawProps(props);
+        (styleProps = preloadPropsMap.get(styleProps)) &&
+          adoptPreloadPropsForStylesheet(instance, styleProps);
+        instance$250 = (
+          hoistableRoot.ownerDocument || hoistableRoot
+        ).createElement("link");
+        markNodeAsHoistable(instance$250);
+        var linkInstance = instance$250;
+        linkInstance._p = new Promise(function (resolve, reject) {
+          linkInstance.onload = resolve;
+          linkInstance.onerror = reject;
+        });
+        setInitialProperties(instance$250, "link", instance);
+        resource.state.loading |= 4;
+        insertStylesheet(instance$250, props.precedence, hoistableRoot);
+        return (resource.instance = instance$250);
+      case "script":
+        instance$250 = getScriptKey(props.src);
+        if (
+          (styleProps = hoistableRoot.querySelector(
+            getScriptSelectorFromKey(instance$250)
+          ))
+        )
+          return (
+            (resource.instance = styleProps),
+            markNodeAsHoistable(styleProps),
+            styleProps
+          );
+        instance = props;
+        if ((styleProps = preloadPropsMap.get(instance$250)))
+          (instance = assign({}, props)),
+            adoptPreloadPropsForScript(instance, styleProps);
+        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;
+        styleProps = hoistableRoot.createElement("script");
+        markNodeAsHoistable(styleProps);
+        setInitialProperties(styleProps, "link", instance);
+        hoistableRoot.head.appendChild(styleProps);
+        return (resource.instance = styleProps);
+      case "void":
+        return null;
+      default:
+        throw Error(formatProdErrorMessage(443, resource.type));
+    }
+  else
+    "stylesheet" === resource.type &&
+      0 === (resource.state.loading & 4) &&
+      ((instance = resource.instance),
+      (resource.state.loading |= 4),
+      insertStylesheet(instance, props.precedence, hoistableRoot));
+  return resource.instance;
+}
+function insertStylesheet(instance, precedence, root) {
+  for (
+    var nodes = root.querySelectorAll(
+        'link[rel="stylesheet"][data-precedence],style[data-precedence]'
+      ),
+      last = nodes.length ? nodes[nodes.length - 1] : null,
+      prior = last,
+      i = 0;
+    i < nodes.length;
+    i++
+  ) {
+    var node = nodes[i];
+    if (node.dataset.precedence === precedence) prior = node;
+    else if (prior !== last) break;
+  }
+  prior
+    ? prior.parentNode.insertBefore(instance, prior.nextSibling)
+    : ((precedence = 9 === root.nodeType ? root.head : root),
+      precedence.insertBefore(instance, precedence.firstChild));
+}
+function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {
+  null == stylesheetProps.crossOrigin &&
+    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);
+  null == stylesheetProps.referrerPolicy &&
+    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);
+  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);
+}
+function adoptPreloadPropsForScript(scriptProps, preloadProps) {
+  null == scriptProps.crossOrigin &&
+    (scriptProps.crossOrigin = preloadProps.crossOrigin);
+  null == scriptProps.referrerPolicy &&
+    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);
+  null == scriptProps.integrity &&
+    (scriptProps.integrity = preloadProps.integrity);
+}
+var tagCaches = null;
+function getHydratableHoistableCache(type, keyAttribute, ownerDocument) {
+  if (null === tagCaches) {
+    var cache = new Map();
+    var caches = (tagCaches = new Map());
+    caches.set(ownerDocument, cache);
+  } else
+    (caches = tagCaches),
+      (cache = caches.get(ownerDocument)),
+      cache || ((cache = new Map()), caches.set(ownerDocument, cache));
+  if (cache.has(type)) return cache;
+  cache.set(type, null);
+  ownerDocument = ownerDocument.getElementsByTagName(type);
+  for (caches = 0; caches < ownerDocument.length; caches++) {
+    var node = ownerDocument[caches];
+    if (
+      !(
+        node[internalHoistableMarker] ||
+        node[internalInstanceKey] ||
+        ("link" === type && "stylesheet" === node.getAttribute("rel"))
+      ) &&
+      "http://www.w3.org/2000/svg" !== node.namespaceURI
+    ) {
+      var nodeKey = node.getAttribute(keyAttribute) || "";
+      nodeKey = type + nodeKey;
+      var existing = cache.get(nodeKey);
+      existing ? existing.push(node) : cache.set(nodeKey, [node]);
+    }
+  }
+  return cache;
+}
+function mountHoistable(hoistableRoot, type, instance) {
+  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;
+  hoistableRoot.head.insertBefore(
+    instance,
+    "title" === type ? hoistableRoot.querySelector("head > title") : null
+  );
+}
+function isHostHoistableType(type, props, hostContext) {
+  if (1 === hostContext || null != props.itemProp) return !1;
+  switch (type) {
+    case "meta":
+    case "title":
+      return !0;
+    case "style":
+      if (
+        "string" !== typeof props.precedence ||
+        "string" !== typeof props.href ||
+        "" === props.href
+      )
+        break;
+      return !0;
+    case "link":
+      if (
+        "string" !== typeof props.rel ||
+        "string" !== typeof props.href ||
+        "" === props.href ||
+        props.onLoad ||
+        props.onError
+      )
+        break;
+      switch (props.rel) {
+        case "stylesheet":
+          return (
+            (type = props.disabled),
+            "string" === typeof props.precedence && null == type
+          );
+        default:
+          return !0;
+      }
+    case "script":
+      if (
+        props.async &&
+        "function" !== typeof props.async &&
+        "symbol" !== typeof props.async &&
+        !props.onLoad &&
+        !props.onError &&
+        props.src &&
+        "string" === typeof props.src
+      )
+        return !0;
+  }
+  return !1;
+}
+function preloadResource(resource) {
+  return "stylesheet" === resource.type && 0 === (resource.state.loading & 3)
+    ? !1
+    : !0;
+}
+var suspendedState = null;
+function noop() {}
+function suspendResource(hoistableRoot, resource, props) {
+  if (null === suspendedState) throw Error(formatProdErrorMessage(475));
+  var state = suspendedState;
+  if (
+    "stylesheet" === resource.type &&
+    ("string" !== typeof props.media ||
+      !1 !== matchMedia(props.media).matches) &&
+    0 === (resource.state.loading & 4)
+  ) {
+    if (null === resource.instance) {
+      var key = getStyleKey(props.href),
+        instance = hoistableRoot.querySelector(
+          getStylesheetSelectorFromKey(key)
+        );
+      if (instance) {
+        hoistableRoot = instance._p;
+        null !== hoistableRoot &&
+          "object" === typeof hoistableRoot &&
+          "function" === typeof hoistableRoot.then &&
+          (state.count++,
+          (state = onUnsuspend.bind(state)),
+          hoistableRoot.then(state, state));
+        resource.state.loading |= 4;
+        resource.instance = instance;
+        markNodeAsHoistable(instance);
+        return;
+      }
+      instance = hoistableRoot.ownerDocument || hoistableRoot;
+      props = stylesheetPropsFromRawProps(props);
+      (key = preloadPropsMap.get(key)) &&
+        adoptPreloadPropsForStylesheet(props, key);
+      instance = instance.createElement("link");
+      markNodeAsHoistable(instance);
+      var linkInstance = instance;
+      linkInstance._p = new Promise(function (resolve, reject) {
+        linkInstance.onload = resolve;
+        linkInstance.onerror = reject;
+      });
+      setInitialProperties(instance, "link", props);
+      resource.instance = instance;
+    }
+    null === state.stylesheets && (state.stylesheets = new Map());
+    state.stylesheets.set(resource, hoistableRoot);
+    (hoistableRoot = resource.state.preload) &&
+      0 === (resource.state.loading & 3) &&
+      (state.count++,
+      (resource = onUnsuspend.bind(state)),
+      hoistableRoot.addEventListener("load", resource),
+      hoistableRoot.addEventListener("error", resource));
+  }
+}
+function waitForCommitToBeReady() {
+  if (null === suspendedState) throw Error(formatProdErrorMessage(475));
+  var state = suspendedState;
+  state.stylesheets &&
+    0 === state.count &&
+    insertSuspendedStylesheets(state, state.stylesheets);
+  return 0 < state.count
+    ? function (commit) {
+        var stylesheetTimer = setTimeout(function () {
+          state.stylesheets &&
+            insertSuspendedStylesheets(state, state.stylesheets);
+          if (state.unsuspend) {
+            var unsuspend = state.unsuspend;
+            state.unsuspend = null;
+            unsuspend();
+          }
+        }, 6e4);
+        state.unsuspend = commit;
+        return function () {
+          state.unsuspend = null;
+          clearTimeout(stylesheetTimer);
+        };
+      }
+    : null;
+}
+function onUnsuspend() {
+  this.count--;
+  if (0 === this.count)
+    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);
+    else if (this.unsuspend) {
+      var unsuspend = this.unsuspend;
+      this.unsuspend = null;
+      unsuspend();
+    }
+}
+var precedencesByRoot = null;
+function insertSuspendedStylesheets(state, resources) {
+  state.stylesheets = null;
+  null !== state.unsuspend &&
+    (state.count++,
+    (precedencesByRoot = new Map()),
+    resources.forEach(insertStylesheetIntoRoot, state),
+    (precedencesByRoot = null),
+    onUnsuspend.call(state));
+}
+function insertStylesheetIntoRoot(root, resource) {
+  if (!(resource.state.loading & 4)) {
+    var precedences = precedencesByRoot.get(root);
+    if (precedences) var last = precedences.get(null);
+    else {
+      precedences = new Map();
+      precedencesByRoot.set(root, precedences);
+      for (
+        var nodes = root.querySelectorAll(
+            "link[data-precedence],style[data-precedence]"
+          ),
+          i = 0;
+        i < nodes.length;
+        i++
+      ) {
+        var node = nodes[i];
+        if (
+          "LINK" === node.nodeName ||
+          "not all" !== node.getAttribute("media")
+        )
+          precedences.set(node.dataset.precedence, node), (last = node);
+      }
+      last && precedences.set(null, last);
+    }
+    nodes = resource.instance;
+    node = nodes.getAttribute("data-precedence");
+    i = precedences.get(node) || last;
+    i === last && precedences.set(null, nodes);
+    precedences.set(node, nodes);
+    this.count++;
+    last = onUnsuspend.bind(this);
+    nodes.addEventListener("load", last);
+    nodes.addEventListener("error", last);
+    i
+      ? i.parentNode.insertBefore(nodes, i.nextSibling)
+      : ((root = 9 === root.nodeType ? root.head : root),
+        root.insertBefore(nodes, root.firstChild));
+    resource.state.loading |= 4;
+  }
+}
+var HostTransitionContext = {
+  $$typeof: REACT_CONTEXT_TYPE,
+  Provider: null,
+  Consumer: null,
+  _currentValue: sharedNotPendingObject,
+  _currentValue2: sharedNotPendingObject,
+  _threadCount: 0
+};
+function FiberRootNode(
+  containerInfo,
+  tag,
+  hydrate,
+  identifierPrefix,
+  onUncaughtError,
+  onCaughtError,
+  onRecoverableError,
+  formState
+) {
+  this.tag = 1;
+  this.containerInfo = containerInfo;
+  this.pingCache = this.current = this.pendingChildren = null;
+  this.timeoutHandle = -1;
+  this.callbackNode =
+    this.next =
+    this.pendingContext =
+    this.context =
+    this.cancelPendingCommit =
+      null;
+  this.callbackPriority = 0;
+  this.expirationTimes = createLaneMap(-1);
+  this.entangledLanes =
+    this.shellSuspendCounter =
+    this.errorRecoveryDisabledLanes =
+    this.expiredLanes =
+    this.warmLanes =
+    this.pingedLanes =
+    this.suspendedLanes =
+    this.pendingLanes =
+      0;
+  this.entanglements = createLaneMap(0);
+  this.hiddenUpdates = createLaneMap(null);
+  this.identifierPrefix = identifierPrefix;
+  this.onUncaughtError = onUncaughtError;
+  this.onCaughtError = onCaughtError;
+  this.onRecoverableError = onRecoverableError;
+  this.pooledCache = null;
+  this.pooledCacheLanes = 0;
+  this.formState = formState;
+  this.incompleteTransitions = new Map();
+}
+function createFiberRoot(
+  containerInfo,
+  tag,
+  hydrate,
+  initialChildren,
+  hydrationCallbacks,
+  isStrictMode,
+  identifierPrefix,
+  onUncaughtError,
+  onCaughtError,
+  onRecoverableError,
+  transitionCallbacks,
+  formState
+) {
+  containerInfo = new FiberRootNode(
+    containerInfo,
+    tag,
+    hydrate,
+    identifierPrefix,
+    onUncaughtError,
+    onCaughtError,
+    onRecoverableError,
+    formState
+  );
+  tag = 1;
+  !0 === isStrictMode && (tag |= 24);
+  isStrictMode = createFiberImplClass(3, null, null, tag);
+  containerInfo.current = isStrictMode;
+  isStrictMode.stateNode = containerInfo;
+  tag = createCache();
+  tag.refCount++;
+  containerInfo.pooledCache = tag;
+  tag.refCount++;
+  isStrictMode.memoizedState = {
+    element: initialChildren,
+    isDehydrated: hydrate,
+    cache: tag
+  };
+  initializeUpdateQueue(isStrictMode);
+  return containerInfo;
+}
+function getContextForSubtree(parentComponent) {
+  if (!parentComponent) return emptyContextObject;
+  parentComponent = emptyContextObject;
+  return parentComponent;
+}
+function updateContainerImpl(
+  rootFiber,
+  lane,
+  element,
+  container,
+  parentComponent,
+  callback
+) {
+  parentComponent = getContextForSubtree(parentComponent);
+  null === container.context
+    ? (container.context = parentComponent)
+    : (container.pendingContext = parentComponent);
+  container = createUpdate(lane);
+  container.payload = { element: element };
+  callback = void 0 === callback ? null : callback;
+  null !== callback && (container.callback = callback);
+  element = enqueueUpdate(rootFiber, container, lane);
+  null !== element &&
+    (scheduleUpdateOnFiber(element, rootFiber, lane),
+    entangleTransitions(element, rootFiber, lane));
+}
+function markRetryLaneImpl(fiber, retryLane) {
+  fiber = fiber.memoizedState;
+  if (null !== fiber && null !== fiber.dehydrated) {
+    var a = fiber.retryLane;
+    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;
+  }
+}
+function markRetryLaneIfNotHydrated(fiber, retryLane) {
+  markRetryLaneImpl(fiber, retryLane);
+  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);
+}
+function attemptContinuousHydration(fiber) {
+  if (13 === fiber.tag) {
+    var root = enqueueConcurrentRenderForLane(fiber, 67108864);
+    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);
+    markRetryLaneIfNotHydrated(fiber, 67108864);
+  }
+}
+var _enabled = !0;
+function dispatchDiscreteEvent(
+  domEventName,
+  eventSystemFlags,
+  container,
+  nativeEvent
+) {
+  var prevTransition = ReactSharedInternals.T;
+  ReactSharedInternals.T = null;
+  var previousPriority = ReactDOMSharedInternals.p;
+  try {
+    (ReactDOMSharedInternals.p = 2),
+      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
+  } finally {
+    (ReactDOMSharedInternals.p = previousPriority),
+      (ReactSharedInternals.T = prevTransition);
+  }
+}
+function dispatchContinuousEvent(
+  domEventName,
+  eventSystemFlags,
+  container,
+  nativeEvent
+) {
+  var prevTransition = ReactSharedInternals.T;
+  ReactSharedInternals.T = null;
+  var previousPriority = ReactDOMSharedInternals.p;
+  try {
+    (ReactDOMSharedInternals.p = 8),
+      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
+  } finally {
+    (ReactDOMSharedInternals.p = previousPriority),
+      (ReactSharedInternals.T = prevTransition);
+  }
+}
+function dispatchEvent(
+  domEventName,
+  eventSystemFlags,
+  targetContainer,
+  nativeEvent
+) {
+  if (_enabled) {
+    var blockedOn = findInstanceBlockingEvent(nativeEvent);
+    if (null === blockedOn)
+      dispatchEventForPluginEventSystem(
+        domEventName,
+        eventSystemFlags,
+        nativeEvent,
+        return_targetInst,
+        targetContainer
+      ),
+        clearIfContinuousEvent(domEventName, nativeEvent);
+    else if (
+      queueIfContinuousEvent(
+        blockedOn,
+        domEventName,
+        eventSystemFlags,
+        targetContainer,
+        nativeEvent
+      )
+    )
+      nativeEvent.stopPropagation();
+    else if (
+      (clearIfContinuousEvent(domEventName, nativeEvent),
+      eventSystemFlags & 4 &&
+        -1 < discreteReplayableEvents.indexOf(domEventName))
+    ) {
+      for (; null !== blockedOn; ) {
+        var fiber = getInstanceFromNode(blockedOn);
+        if (null !== fiber)
+          switch (fiber.tag) {
+            case 3:
+              fiber = fiber.stateNode;
+              if (fiber.current.memoizedState.isDehydrated) {
+                var lanes = getHighestPriorityLanes(fiber.pendingLanes);
+                if (0 !== lanes) {
+                  var root = fiber;
+                  root.pendingLanes |= 2;
+                  for (root.entangledLanes |= 2; lanes; ) {
+                    var lane = 1 << (31 - clz32(lanes));
+                    root.entanglements[1] |= lane;
+                    lanes &= ~lane;
+                  }
+                  ensureRootIsScheduled(fiber);
+                  0 === (executionContext & 6) &&
+                    ((workInProgressRootRenderTargetTime = now() + 500),
+                    flushSyncWorkAcrossRoots_impl(0, !1));
+                }
+              }
+              break;
+            case 13:
+              (root = enqueueConcurrentRenderForLane(fiber, 2)),
+                null !== root && scheduleUpdateOnFiber(root, fiber, 2),
+                flushSyncWork$1(),
+                markRetryLaneIfNotHydrated(fiber, 2);
+          }
+        fiber = findInstanceBlockingEvent(nativeEvent);
+        null === fiber &&
+          dispatchEventForPluginEventSystem(
+            domEventName,
+            eventSystemFlags,
+            nativeEvent,
+            return_targetInst,
+            targetContainer
+          );
+        if (fiber === blockedOn) break;
+        blockedOn = fiber;
+      }
+      null !== blockedOn && nativeEvent.stopPropagation();
+    } else
+      dispatchEventForPluginEventSystem(
+        domEventName,
+        eventSystemFlags,
+        nativeEvent,
+        null,
+        targetContainer
+      );
+  }
+}
+function findInstanceBlockingEvent(nativeEvent) {
+  nativeEvent = getEventTarget(nativeEvent);
+  return findInstanceBlockingTarget(nativeEvent);
+}
+var return_targetInst = null;
+function findInstanceBlockingTarget(targetNode) {
+  return_targetInst = null;
+  targetNode = getClosestInstanceFromNode(targetNode);
+  if (null !== targetNode) {
+    var nearestMounted = getNearestMountedFiber(targetNode);
+    if (null === nearestMounted) targetNode = null;
+    else {
+      var tag = nearestMounted.tag;
+      if (13 === tag) {
+        targetNode = getSuspenseInstanceFromFiber(nearestMounted);
+        if (null !== targetNode) return targetNode;
+        targetNode = null;
+      } else if (3 === tag) {
+        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)
+          return 3 === nearestMounted.tag
+            ? nearestMounted.stateNode.containerInfo
+            : null;
+        targetNode = null;
+      } else nearestMounted !== targetNode && (targetNode = null);
+    }
+  }
+  return_targetInst = targetNode;
+  return null;
+}
+function getEventPriority(domEventName) {
+  switch (domEventName) {
+    case "beforetoggle":
+    case "cancel":
+    case "click":
+    case "close":
+    case "contextmenu":
+    case "copy":
+    case "cut":
+    case "auxclick":
+    case "dblclick":
+    case "dragend":
+    case "dragstart":
+    case "drop":
+    case "focusin":
+    case "focusout":
+    case "input":
+    case "invalid":
+    case "keydown":
+    case "keypress":
+    case "keyup":
+    case "mousedown":
+    case "mouseup":
+    case "paste":
+    case "pause":
+    case "play":
+    case "pointercancel":
+    case "pointerdown":
+    case "pointerup":
+    case "ratechange":
+    case "reset":
+    case "resize":
+    case "seeked":
+    case "submit":
+    case "toggle":
+    case "touchcancel":
+    case "touchend":
+    case "touchstart":
+    case "volumechange":
+    case "change":
+    case "selectionchange":
+    case "textInput":
+    case "compositionstart":
+    case "compositionend":
+    case "compositionupdate":
+    case "beforeblur":
+    case "afterblur":
+    case "beforeinput":
+    case "blur":
+    case "fullscreenchange":
+    case "focus":
+    case "hashchange":
+    case "popstate":
+    case "select":
+    case "selectstart":
+      return 2;
+    case "drag":
+    case "dragenter":
+    case "dragexit":
+    case "dragleave":
+    case "dragover":
+    case "mousemove":
+    case "mouseout":
+    case "mouseover":
+    case "pointermove":
+    case "pointerout":
+    case "pointerover":
+    case "scroll":
+    case "touchmove":
+    case "wheel":
+    case "mouseenter":
+    case "mouseleave":
+    case "pointerenter":
+    case "pointerleave":
+      return 8;
+    case "message":
+      switch (getCurrentPriorityLevel()) {
+        case ImmediatePriority:
+          return 2;
+        case UserBlockingPriority:
+          return 8;
+        case NormalPriority$1:
+        case LowPriority:
+          return 32;
+        case IdlePriority:
+          return 268435456;
+        default:
+          return 32;
+      }
+    default:
+      return 32;
+  }
+}
+var hasScheduledReplayAttempt = !1,
+  queuedFocus = null,
+  queuedDrag = null,
+  queuedMouse = null,
+  queuedPointers = new Map(),
+  queuedPointerCaptures = new Map(),
+  queuedExplicitHydrationTargets = [],
+  discreteReplayableEvents =
+    "mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(
+      " "
+    );
+function clearIfContinuousEvent(domEventName, nativeEvent) {
+  switch (domEventName) {
+    case "focusin":
+    case "focusout":
+      queuedFocus = null;
+      break;
+    case "dragenter":
+    case "dragleave":
+      queuedDrag = null;
+      break;
+    case "mouseover":
+    case "mouseout":
+      queuedMouse = null;
+      break;
+    case "pointerover":
+    case "pointerout":
+      queuedPointers.delete(nativeEvent.pointerId);
+      break;
+    case "gotpointercapture":
+    case "lostpointercapture":
+      queuedPointerCaptures.delete(nativeEvent.pointerId);
+  }
+}
+function accumulateOrCreateContinuousQueuedReplayableEvent(
+  existingQueuedEvent,
+  blockedOn,
+  domEventName,
+  eventSystemFlags,
+  targetContainer,
+  nativeEvent
+) {
+  if (
+    null === existingQueuedEvent ||
+    existingQueuedEvent.nativeEvent !== nativeEvent
+  )
+    return (
+      (existingQueuedEvent = {
+        blockedOn: blockedOn,
+        domEventName: domEventName,
+        eventSystemFlags: eventSystemFlags,
+        nativeEvent: nativeEvent,
+        targetContainers: [targetContainer]
+      }),
+      null !== blockedOn &&
+        ((blockedOn = getInstanceFromNode(blockedOn)),
+        null !== blockedOn && attemptContinuousHydration(blockedOn)),
+      existingQueuedEvent
+    );
+  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;
+  blockedOn = existingQueuedEvent.targetContainers;
+  null !== targetContainer &&
+    -1 === blockedOn.indexOf(targetContainer) &&
+    blockedOn.push(targetContainer);
+  return existingQueuedEvent;
+}
+function queueIfContinuousEvent(
+  blockedOn,
+  domEventName,
+  eventSystemFlags,
+  targetContainer,
+  nativeEvent
+) {
+  switch (domEventName) {
+    case "focusin":
+      return (
+        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(
+          queuedFocus,
+          blockedOn,
+          domEventName,
+          eventSystemFlags,
+          targetContainer,
+          nativeEvent
+        )),
+        !0
+      );
+    case "dragenter":
+      return (
+        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(
+          queuedDrag,
+          blockedOn,
+          domEventName,
+          eventSystemFlags,
+          targetContainer,
+          nativeEvent
+        )),
+        !0
+      );
+    case "mouseover":
+      return (
+        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(
+          queuedMouse,
+          blockedOn,
+          domEventName,
+          eventSystemFlags,
+          targetContainer,
+          nativeEvent
+        )),
+        !0
+      );
+    case "pointerover":
+      var pointerId = nativeEvent.pointerId;
+      queuedPointers.set(
+        pointerId,
+        accumulateOrCreateContinuousQueuedReplayableEvent(
+          queuedPointers.get(pointerId) || null,
+          blockedOn,
+          domEventName,
+          eventSystemFlags,
+          targetContainer,
+          nativeEvent
+        )
+      );
+      return !0;
+    case "gotpointercapture":
+      return (
+        (pointerId = nativeEvent.pointerId),
+        queuedPointerCaptures.set(
+          pointerId,
+          accumulateOrCreateContinuousQueuedReplayableEvent(
+            queuedPointerCaptures.get(pointerId) || null,
+            blockedOn,
+            domEventName,
+            eventSystemFlags,
+            targetContainer,
+            nativeEvent
+          )
+        ),
+        !0
+      );
+  }
+  return !1;
+}
+function attemptExplicitHydrationTarget(queuedTarget) {
+  var targetInst = getClosestInstanceFromNode(queuedTarget.target);
+  if (null !== targetInst) {
+    var nearestMounted = getNearestMountedFiber(targetInst);
+    if (null !== nearestMounted)
+      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {
+        if (
+          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),
+          null !== targetInst)
+        ) {
+          queuedTarget.blockedOn = targetInst;
+          runWithPriority(queuedTarget.priority, function () {
+            if (13 === nearestMounted.tag) {
+              var lane = requestUpdateLane();
+              lane = getBumpedLaneForHydrationByLane(lane);
+              var root = enqueueConcurrentRenderForLane(nearestMounted, lane);
+              null !== root &&
+                scheduleUpdateOnFiber(root, nearestMounted, lane);
+              markRetryLaneIfNotHydrated(nearestMounted, lane);
+            }
+          });
+          return;
+        }
+      } else if (
+        3 === targetInst &&
+        nearestMounted.stateNode.current.memoizedState.isDehydrated
+      ) {
+        queuedTarget.blockedOn =
+          3 === nearestMounted.tag
+            ? nearestMounted.stateNode.containerInfo
+            : null;
+        return;
+      }
+  }
+  queuedTarget.blockedOn = null;
+}
+function attemptReplayContinuousQueuedEvent(queuedEvent) {
+  if (null !== queuedEvent.blockedOn) return !1;
+  for (
+    var targetContainers = queuedEvent.targetContainers;
+    0 < targetContainers.length;
+
+  ) {
+    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);
+    if (null === nextBlockedOn) {
+      nextBlockedOn = queuedEvent.nativeEvent;
+      var nativeEventClone = new nextBlockedOn.constructor(
+        nextBlockedOn.type,
+        nextBlockedOn
+      );
+      currentReplayingEvent = nativeEventClone;
+      nextBlockedOn.target.dispatchEvent(nativeEventClone);
+      currentReplayingEvent = null;
+    } else
+      return (
+        (targetContainers = getInstanceFromNode(nextBlockedOn)),
+        null !== targetContainers &&
+          attemptContinuousHydration(targetContainers),
+        (queuedEvent.blockedOn = nextBlockedOn),
+        !1
+      );
+    targetContainers.shift();
+  }
+  return !0;
+}
+function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {
+  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);
+}
+function replayUnblockedEvents() {
+  hasScheduledReplayAttempt = !1;
+  null !== queuedFocus &&
+    attemptReplayContinuousQueuedEvent(queuedFocus) &&
+    (queuedFocus = null);
+  null !== queuedDrag &&
+    attemptReplayContinuousQueuedEvent(queuedDrag) &&
+    (queuedDrag = null);
+  null !== queuedMouse &&
+    attemptReplayContinuousQueuedEvent(queuedMouse) &&
+    (queuedMouse = null);
+  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);
+  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);
+}
+function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {
+  queuedEvent.blockedOn === unblocked &&
+    ((queuedEvent.blockedOn = null),
+    hasScheduledReplayAttempt ||
+      ((hasScheduledReplayAttempt = !0),
+      Scheduler.unstable_scheduleCallback(
+        Scheduler.unstable_NormalPriority,
+        replayUnblockedEvents
+      )));
+}
+var lastScheduledReplayQueue = null;
+function scheduleReplayQueueIfNeeded(formReplayingQueue) {
+  lastScheduledReplayQueue !== formReplayingQueue &&
+    ((lastScheduledReplayQueue = formReplayingQueue),
+    Scheduler.unstable_scheduleCallback(
+      Scheduler.unstable_NormalPriority,
+      function () {
+        lastScheduledReplayQueue === formReplayingQueue &&
+          (lastScheduledReplayQueue = null);
+        for (var i = 0; i < formReplayingQueue.length; i += 3) {
+          var form = formReplayingQueue[i],
+            submitterOrAction = formReplayingQueue[i + 1],
+            formData = formReplayingQueue[i + 2];
+          if ("function" !== typeof submitterOrAction)
+            if (null === findInstanceBlockingTarget(submitterOrAction || form))
+              continue;
+            else break;
+          var formInst = getInstanceFromNode(form);
+          null !== formInst &&
+            (formReplayingQueue.splice(i, 3),
+            (i -= 3),
+            startHostTransition(
+              formInst,
+              {
+                pending: !0,
+                data: formData,
+                method: form.method,
+                action: submitterOrAction
+              },
+              submitterOrAction,
+              formData
+            ));
+        }
+      }
+    ));
+}
+function retryIfBlockedOn(unblocked) {
+  function unblock(queuedEvent) {
+    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);
+  }
+  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);
+  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);
+  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);
+  queuedPointers.forEach(unblock);
+  queuedPointerCaptures.forEach(unblock);
+  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {
+    var queuedTarget = queuedExplicitHydrationTargets[i];
+    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);
+  }
+  for (
+    ;
+    0 < queuedExplicitHydrationTargets.length &&
+    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);
+
+  )
+    attemptExplicitHydrationTarget(i),
+      null === i.blockedOn && queuedExplicitHydrationTargets.shift();
+  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;
+  if (null != i)
+    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {
+      var form = i[queuedTarget],
+        submitterOrAction = i[queuedTarget + 1],
+        formProps = form[internalPropsKey] || null;
+      if ("function" === typeof submitterOrAction)
+        formProps || scheduleReplayQueueIfNeeded(i);
+      else if (formProps) {
+        var action = null;
+        if (submitterOrAction && submitterOrAction.hasAttribute("formAction"))
+          if (
+            ((form = submitterOrAction),
+            (formProps = submitterOrAction[internalPropsKey] || null))
+          )
+            action = formProps.formAction;
+          else {
+            if (null !== findInstanceBlockingTarget(form)) continue;
+          }
+        else action = formProps.action;
+        "function" === typeof action
+          ? (i[queuedTarget + 1] = action)
+          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));
+        scheduleReplayQueueIfNeeded(i);
+      }
+    }
+}
+function ReactDOMRoot(internalRoot) {
+  this._internalRoot = internalRoot;
+}
+ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =
+  function (children) {
+    var root = this._internalRoot;
+    if (null === root) throw Error(formatProdErrorMessage(409));
+    var current = root.current,
+      lane = requestUpdateLane();
+    updateContainerImpl(current, lane, children, root, null, null);
+  };
+ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =
+  function () {
+    var root = this._internalRoot;
+    if (null !== root) {
+      this._internalRoot = null;
+      var container = root.containerInfo;
+      updateContainerImpl(root.current, 2, null, root, null, null);
+      flushSyncWork$1();
+      container[internalContainerInstanceKey] = null;
+    }
+  };
+function ReactDOMHydrationRoot(internalRoot) {
+  this._internalRoot = internalRoot;
+}
+ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
+  if (target) {
+    var updatePriority = resolveUpdatePriority();
+    target = { blockedOn: null, target: target, priority: updatePriority };
+    for (
+      var i = 0;
+      i < queuedExplicitHydrationTargets.length &&
+      0 !== updatePriority &&
+      updatePriority < queuedExplicitHydrationTargets[i].priority;
+      i++
+    );
+    queuedExplicitHydrationTargets.splice(i, 0, target);
+    0 === i && attemptExplicitHydrationTarget(target);
+  }
+};
+var isomorphicReactPackageVersion$jscomp$inline_1785 = React.version;
+if (
+  "19.1.1" !==
+  isomorphicReactPackageVersion$jscomp$inline_1785
+)
+  throw Error(
+    formatProdErrorMessage(
+      527,
+      isomorphicReactPackageVersion$jscomp$inline_1785,
+      "19.1.1"
+    )
+  );
+ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
+  var fiber = componentOrElement._reactInternals;
+  if (void 0 === fiber) {
+    if ("function" === typeof componentOrElement.render)
+      throw Error(formatProdErrorMessage(188));
+    componentOrElement = Object.keys(componentOrElement).join(",");
+    throw Error(formatProdErrorMessage(268, componentOrElement));
+  }
+  componentOrElement = findCurrentFiberUsingSlowPath(fiber);
+  componentOrElement =
+    null !== componentOrElement
+      ? findCurrentHostFiberImpl(componentOrElement)
+      : null;
+  componentOrElement =
+    null === componentOrElement ? null : componentOrElement.stateNode;
+  return componentOrElement;
+};
+var internals$jscomp$inline_2256 = {
+  bundleType: 0,
+  version: "19.1.1",
+  rendererPackageName: "react-dom",
+  currentDispatcherRef: ReactSharedInternals,
+  reconcilerVersion: "19.1.1"
+};
+if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
+  var hook$jscomp$inline_2257 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
+  if (
+    !hook$jscomp$inline_2257.isDisabled &&
+    hook$jscomp$inline_2257.supportsFiber
+  )
+    try {
+      (rendererID = hook$jscomp$inline_2257.inject(
+        internals$jscomp$inline_2256
+      )),
+        (injectedHook = hook$jscomp$inline_2257);
+    } catch (err) {}
+}
+exports.createRoot = function (container, options) {
+  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));
+  var isStrictMode = !1,
+    identifierPrefix = "",
+    onUncaughtError = defaultOnUncaughtError,
+    onCaughtError = defaultOnCaughtError,
+    onRecoverableError = defaultOnRecoverableError,
+    transitionCallbacks = null;
+  null !== options &&
+    void 0 !== options &&
+    (!0 === options.unstable_strictMode && (isStrictMode = !0),
+    void 0 !== options.identifierPrefix &&
+      (identifierPrefix = options.identifierPrefix),
+    void 0 !== options.onUncaughtError &&
+      (onUncaughtError = options.onUncaughtError),
+    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),
+    void 0 !== options.onRecoverableError &&
+      (onRecoverableError = options.onRecoverableError),
+    void 0 !== options.unstable_transitionCallbacks &&
+      (transitionCallbacks = options.unstable_transitionCallbacks));
+  options = createFiberRoot(
+    container,
+    1,
+    !1,
+    null,
+    null,
+    isStrictMode,
+    identifierPrefix,
+    onUncaughtError,
+    onCaughtError,
+    onRecoverableError,
+    transitionCallbacks,
+    null
+  );
+  container[internalContainerInstanceKey] = options.current;
+  listenToAllSupportedEvents(container);
+  return new ReactDOMRoot(options);
+};
+exports.hydrateRoot = function (container, initialChildren, options) {
+  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));
+  var isStrictMode = !1,
+    identifierPrefix = "",
+    onUncaughtError = defaultOnUncaughtError,
+    onCaughtError = defaultOnCaughtError,
+    onRecoverableError = defaultOnRecoverableError,
+    transitionCallbacks = null,
+    formState = null;
+  null !== options &&
+    void 0 !== options &&
+    (!0 === options.unstable_strictMode && (isStrictMode = !0),
+    void 0 !== options.identifierPrefix &&
+      (identifierPrefix = options.identifierPrefix),
+    void 0 !== options.onUncaughtError &&
+      (onUncaughtError = options.onUncaughtError),
+    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),
+    void 0 !== options.onRecoverableError &&
+      (onRecoverableError = options.onRecoverableError),
+    void 0 !== options.unstable_transitionCallbacks &&
+      (transitionCallbacks = options.unstable_transitionCallbacks),
+    void 0 !== options.formState && (formState = options.formState));
+  initialChildren = createFiberRoot(
+    container,
+    1,
+    !0,
+    initialChildren,
+    null != options ? options : null,
+    isStrictMode,
+    identifierPrefix,
+    onUncaughtError,
+    onCaughtError,
+    onRecoverableError,
+    transitionCallbacks,
+    formState
+  );
+  initialChildren.context = getContextForSubtree(null);
+  options = initialChildren.current;
+  isStrictMode = requestUpdateLane();
+  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);
+  identifierPrefix = createUpdate(isStrictMode);
+  identifierPrefix.callback = null;
+  enqueueUpdate(options, identifierPrefix, isStrictMode);
+  options = isStrictMode;
+  initialChildren.current.lanes = options;
+  markRootUpdated$1(initialChildren, options);
+  ensureRootIsScheduled(initialChildren);
+  container[internalContainerInstanceKey] = initialChildren.current;
+  listenToAllSupportedEvents(container);
+  return new ReactDOMHydrationRoot(initialChildren);
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/cjs/react-dom-profiling.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-profiling.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-profiling.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25380 @@
+/**
+ * @license React
+ * react-dom-profiling.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+ Modernizr 3.0.0pre (Custom Build) | MIT
+*/
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function findHook(fiber, id) {
+      for (fiber = fiber.memoizedState; null !== fiber && 0 < id; )
+        (fiber = fiber.next), id--;
+      return fiber;
+    }
+    function copyWithSetImpl(obj, path, index, value) {
+      if (index >= path.length) return value;
+      var key = path[index],
+        updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);
+      updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);
+      return updated;
+    }
+    function copyWithRename(obj, oldPath, newPath) {
+      if (oldPath.length !== newPath.length)
+        console.warn("copyWithRename() expects paths of the same length");
+      else {
+        for (var i = 0; i < newPath.length - 1; i++)
+          if (oldPath[i] !== newPath[i]) {
+            console.warn(
+              "copyWithRename() expects paths to be the same except for the deepest key"
+            );
+            return;
+          }
+        return copyWithRenameImpl(obj, oldPath, newPath, 0);
+      }
+    }
+    function copyWithRenameImpl(obj, oldPath, newPath, index) {
+      var oldKey = oldPath[index],
+        updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);
+      index + 1 === oldPath.length
+        ? ((updated[newPath[index]] = updated[oldKey]),
+          isArrayImpl(updated)
+            ? updated.splice(oldKey, 1)
+            : delete updated[oldKey])
+        : (updated[oldKey] = copyWithRenameImpl(
+            obj[oldKey],
+            oldPath,
+            newPath,
+            index + 1
+          ));
+      return updated;
+    }
+    function copyWithDeleteImpl(obj, path, index) {
+      var key = path[index],
+        updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);
+      if (index + 1 === path.length)
+        return (
+          isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key],
+          updated
+        );
+      updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);
+      return updated;
+    }
+    function shouldSuspendImpl() {
+      return !1;
+    }
+    function shouldErrorImpl() {
+      return null;
+    }
+    function warnForMissingKey() {}
+    function warnInvalidHookAccess() {
+      console.error(
+        "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"
+      );
+    }
+    function warnInvalidContextAccess() {
+      console.error(
+        "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+      );
+    }
+    function noop$3() {}
+    function setToSortedString(set) {
+      var array = [];
+      set.forEach(function (value) {
+        array.push(value);
+      });
+      return array.sort().join(", ");
+    }
+    function createFiber(tag, pendingProps, key, mode) {
+      return new FiberNode(tag, pendingProps, key, mode);
+    }
+    function scheduleRoot(root, element) {
+      root.context === emptyContextObject &&
+        (updateContainerImpl(root.current, 2, element, root, null, null),
+        flushSyncWork$1());
+    }
+    function scheduleRefresh(root, update) {
+      if (null !== resolveFamily) {
+        var staleFamilies = update.staleFamilies;
+        update = update.updatedFamilies;
+        flushPendingEffects();
+        scheduleFibersWithFamiliesRecursively(
+          root.current,
+          update,
+          staleFamilies
+        );
+        flushSyncWork$1();
+      }
+    }
+    function setRefreshHandler(handler) {
+      resolveFamily = handler;
+    }
+    function isValidContainer(node) {
+      return !(
+        !node ||
+        (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)
+      );
+    }
+    function getNearestMountedFiber(fiber) {
+      var node = fiber,
+        nearestMounted = fiber;
+      if (fiber.alternate) for (; node.return; ) node = node.return;
+      else {
+        fiber = node;
+        do
+          (node = fiber),
+            0 !== (node.flags & 4098) && (nearestMounted = node.return),
+            (fiber = node.return);
+        while (fiber);
+      }
+      return 3 === node.tag ? nearestMounted : null;
+    }
+    function getSuspenseInstanceFromFiber(fiber) {
+      if (13 === fiber.tag) {
+        var suspenseState = fiber.memoizedState;
+        null === suspenseState &&
+          ((fiber = fiber.alternate),
+          null !== fiber && (suspenseState = fiber.memoizedState));
+        if (null !== suspenseState) return suspenseState.dehydrated;
+      }
+      return null;
+    }
+    function assertIsMounted(fiber) {
+      if (getNearestMountedFiber(fiber) !== fiber)
+        throw Error("Unable to find node on an unmounted component.");
+    }
+    function findCurrentFiberUsingSlowPath(fiber) {
+      var alternate = fiber.alternate;
+      if (!alternate) {
+        alternate = getNearestMountedFiber(fiber);
+        if (null === alternate)
+          throw Error("Unable to find node on an unmounted component.");
+        return alternate !== fiber ? null : fiber;
+      }
+      for (var a = fiber, b = alternate; ; ) {
+        var parentA = a.return;
+        if (null === parentA) break;
+        var parentB = parentA.alternate;
+        if (null === parentB) {
+          b = parentA.return;
+          if (null !== b) {
+            a = b;
+            continue;
+          }
+          break;
+        }
+        if (parentA.child === parentB.child) {
+          for (parentB = parentA.child; parentB; ) {
+            if (parentB === a) return assertIsMounted(parentA), fiber;
+            if (parentB === b) return assertIsMounted(parentA), alternate;
+            parentB = parentB.sibling;
+          }
+          throw Error("Unable to find node on an unmounted component.");
+        }
+        if (a.return !== b.return) (a = parentA), (b = parentB);
+        else {
+          for (var didFindChild = !1, _child = parentA.child; _child; ) {
+            if (_child === a) {
+              didFindChild = !0;
+              a = parentA;
+              b = parentB;
+              break;
+            }
+            if (_child === b) {
+              didFindChild = !0;
+              b = parentA;
+              a = parentB;
+              break;
+            }
+            _child = _child.sibling;
+          }
+          if (!didFindChild) {
+            for (_child = parentB.child; _child; ) {
+              if (_child === a) {
+                didFindChild = !0;
+                a = parentB;
+                b = parentA;
+                break;
+              }
+              if (_child === b) {
+                didFindChild = !0;
+                b = parentB;
+                a = parentA;
+                break;
+              }
+              _child = _child.sibling;
+            }
+            if (!didFindChild)
+              throw Error(
+                "Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue."
+              );
+          }
+        }
+        if (a.alternate !== b)
+          throw Error(
+            "Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue."
+          );
+      }
+      if (3 !== a.tag)
+        throw Error("Unable to find node on an unmounted component.");
+      return a.stateNode.current === a ? fiber : alternate;
+    }
+    function findCurrentHostFiberImpl(node) {
+      var tag = node.tag;
+      if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;
+      for (node = node.child; null !== node; ) {
+        tag = findCurrentHostFiberImpl(node);
+        if (null !== tag) return tag;
+        node = node.sibling;
+      }
+      return null;
+    }
+    function getIteratorFn(maybeIterable) {
+      if (null === maybeIterable || "object" !== typeof maybeIterable)
+        return null;
+      maybeIterable =
+        (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
+        maybeIterable["@@iterator"];
+      return "function" === typeof maybeIterable ? maybeIterable : null;
+    }
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function getComponentNameFromOwner(owner) {
+      return "number" === typeof owner.tag
+        ? getComponentNameFromFiber(owner)
+        : "string" === typeof owner.name
+          ? owner.name
+          : null;
+    }
+    function getComponentNameFromFiber(fiber) {
+      var type = fiber.type;
+      switch (fiber.tag) {
+        case 31:
+          return "Activity";
+        case 24:
+          return "Cache";
+        case 9:
+          return (type._context.displayName || "Context") + ".Consumer";
+        case 10:
+          return (type.displayName || "Context") + ".Provider";
+        case 18:
+          return "DehydratedFragment";
+        case 11:
+          return (
+            (fiber = type.render),
+            (fiber = fiber.displayName || fiber.name || ""),
+            type.displayName ||
+              ("" !== fiber ? "ForwardRef(" + fiber + ")" : "ForwardRef")
+          );
+        case 7:
+          return "Fragment";
+        case 26:
+        case 27:
+        case 5:
+          return type;
+        case 4:
+          return "Portal";
+        case 3:
+          return "Root";
+        case 6:
+          return "Text";
+        case 16:
+          return getComponentNameFromType(type);
+        case 8:
+          return type === REACT_STRICT_MODE_TYPE ? "StrictMode" : "Mode";
+        case 22:
+          return "Offscreen";
+        case 12:
+          return "Profiler";
+        case 21:
+          return "Scope";
+        case 13:
+          return "Suspense";
+        case 19:
+          return "SuspenseList";
+        case 25:
+          return "TracingMarker";
+        case 1:
+        case 0:
+        case 14:
+        case 15:
+          if ("function" === typeof type)
+            return type.displayName || type.name || null;
+          if ("string" === typeof type) return type;
+          break;
+        case 29:
+          type = fiber._debugInfo;
+          if (null != type)
+            for (var i = type.length - 1; 0 <= i; i--)
+              if ("string" === typeof type[i].name) return type[i].name;
+          if (null !== fiber.return)
+            return getComponentNameFromFiber(fiber.return);
+      }
+      return null;
+    }
+    function resolveDispatcher() {
+      var dispatcher = ReactSharedInternals.H;
+      null === dispatcher &&
+        console.error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      return dispatcher;
+    }
+    function createCursor(defaultValue) {
+      return { current: defaultValue };
+    }
+    function pop(cursor, fiber) {
+      0 > index$jscomp$0
+        ? console.error("Unexpected pop.")
+        : (fiber !== fiberStack[index$jscomp$0] &&
+            console.error("Unexpected Fiber popped."),
+          (cursor.current = valueStack[index$jscomp$0]),
+          (valueStack[index$jscomp$0] = null),
+          (fiberStack[index$jscomp$0] = null),
+          index$jscomp$0--);
+    }
+    function push(cursor, value, fiber) {
+      index$jscomp$0++;
+      valueStack[index$jscomp$0] = cursor.current;
+      fiberStack[index$jscomp$0] = fiber;
+      cursor.current = value;
+    }
+    function requiredContext(c) {
+      null === c &&
+        console.error(
+          "Expected host context to exist. This error is likely caused by a bug in React. Please file an issue."
+        );
+      return c;
+    }
+    function pushHostContainer(fiber, nextRootInstance) {
+      push(rootInstanceStackCursor, nextRootInstance, fiber);
+      push(contextFiberStackCursor, fiber, fiber);
+      push(contextStackCursor, null, fiber);
+      var nextRootContext = nextRootInstance.nodeType;
+      switch (nextRootContext) {
+        case 9:
+        case 11:
+          nextRootContext = 9 === nextRootContext ? "#document" : "#fragment";
+          nextRootInstance = (nextRootInstance =
+            nextRootInstance.documentElement)
+            ? (nextRootInstance = nextRootInstance.namespaceURI)
+              ? getOwnHostContext(nextRootInstance)
+              : HostContextNamespaceNone
+            : HostContextNamespaceNone;
+          break;
+        default:
+          if (
+            ((nextRootContext = nextRootInstance.tagName),
+            (nextRootInstance = nextRootInstance.namespaceURI))
+          )
+            (nextRootInstance = getOwnHostContext(nextRootInstance)),
+              (nextRootInstance = getChildHostContextProd(
+                nextRootInstance,
+                nextRootContext
+              ));
+          else
+            switch (nextRootContext) {
+              case "svg":
+                nextRootInstance = HostContextNamespaceSvg;
+                break;
+              case "math":
+                nextRootInstance = HostContextNamespaceMath;
+                break;
+              default:
+                nextRootInstance = HostContextNamespaceNone;
+            }
+      }
+      nextRootContext = nextRootContext.toLowerCase();
+      nextRootContext = updatedAncestorInfoDev(null, nextRootContext);
+      nextRootContext = {
+        context: nextRootInstance,
+        ancestorInfo: nextRootContext
+      };
+      pop(contextStackCursor, fiber);
+      push(contextStackCursor, nextRootContext, fiber);
+    }
+    function popHostContainer(fiber) {
+      pop(contextStackCursor, fiber);
+      pop(contextFiberStackCursor, fiber);
+      pop(rootInstanceStackCursor, fiber);
+    }
+    function getHostContext() {
+      return requiredContext(contextStackCursor.current);
+    }
+    function pushHostContext(fiber) {
+      null !== fiber.memoizedState &&
+        push(hostTransitionProviderCursor, fiber, fiber);
+      var context = requiredContext(contextStackCursor.current);
+      var type = fiber.type;
+      var nextContext = getChildHostContextProd(context.context, type);
+      type = updatedAncestorInfoDev(context.ancestorInfo, type);
+      nextContext = { context: nextContext, ancestorInfo: type };
+      context !== nextContext &&
+        (push(contextFiberStackCursor, fiber, fiber),
+        push(contextStackCursor, nextContext, fiber));
+    }
+    function popHostContext(fiber) {
+      contextFiberStackCursor.current === fiber &&
+        (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber));
+      hostTransitionProviderCursor.current === fiber &&
+        (pop(hostTransitionProviderCursor, fiber),
+        (HostTransitionContext._currentValue = NotPendingTransition));
+    }
+    function typeName(value) {
+      return (
+        ("function" === typeof Symbol &&
+          Symbol.toStringTag &&
+          value[Symbol.toStringTag]) ||
+        value.constructor.name ||
+        "Object"
+      );
+    }
+    function willCoercionThrow(value) {
+      try {
+        return testStringCoercion(value), !1;
+      } catch (e) {
+        return !0;
+      }
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkAttributeStringCoercion(value, attributeName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",
+            attributeName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkCSSPropertyStringCoercion(value, propName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",
+            propName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkFormFieldValueStringCoercion(value) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.",
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function injectInternals(internals) {
+      if ("undefined" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;
+      var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;
+      if (hook.isDisabled) return !0;
+      if (!hook.supportsFiber)
+        return (
+          console.error(
+            "The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools"
+          ),
+          !0
+        );
+      try {
+        (rendererID = hook.inject(internals)), (injectedHook = hook);
+      } catch (err) {
+        console.error("React instrumentation encountered an error: %s.", err);
+      }
+      return hook.checkDCE ? !0 : !1;
+    }
+    function setIsStrictModeForDevtools(newIsStrictMode) {
+      "function" === typeof log$1 &&
+        unstable_setDisableYieldValue(newIsStrictMode);
+      if (injectedHook && "function" === typeof injectedHook.setStrictMode)
+        try {
+          injectedHook.setStrictMode(rendererID, newIsStrictMode);
+        } catch (err) {
+          hasLoggedError ||
+            ((hasLoggedError = !0),
+            console.error(
+              "React instrumentation encountered an error: %s",
+              err
+            ));
+        }
+    }
+    function injectProfilingHooks(profilingHooks) {
+      injectedProfilingHooks = profilingHooks;
+    }
+    function markCommitStopped() {
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markCommitStopped &&
+        injectedProfilingHooks.markCommitStopped();
+    }
+    function markComponentRenderStarted(fiber) {
+      null !== injectedProfilingHooks &&
+        "function" ===
+          typeof injectedProfilingHooks.markComponentRenderStarted &&
+        injectedProfilingHooks.markComponentRenderStarted(fiber);
+    }
+    function markComponentRenderStopped() {
+      null !== injectedProfilingHooks &&
+        "function" ===
+          typeof injectedProfilingHooks.markComponentRenderStopped &&
+        injectedProfilingHooks.markComponentRenderStopped();
+    }
+    function markRenderStarted(lanes) {
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markRenderStarted &&
+        injectedProfilingHooks.markRenderStarted(lanes);
+    }
+    function markRenderStopped() {
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markRenderStopped &&
+        injectedProfilingHooks.markRenderStopped();
+    }
+    function markStateUpdateScheduled(fiber, lane) {
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markStateUpdateScheduled &&
+        injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);
+    }
+    function clz32Fallback(x) {
+      x >>>= 0;
+      return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+    }
+    function getLabelForLane(lane) {
+      if (lane & 1) return "SyncHydrationLane";
+      if (lane & 2) return "Sync";
+      if (lane & 4) return "InputContinuousHydration";
+      if (lane & 8) return "InputContinuous";
+      if (lane & 16) return "DefaultHydration";
+      if (lane & 32) return "Default";
+      if (lane & 128) return "TransitionHydration";
+      if (lane & 4194048) return "Transition";
+      if (lane & 62914560) return "Retry";
+      if (lane & 67108864) return "SelectiveHydration";
+      if (lane & 134217728) return "IdleHydration";
+      if (lane & 268435456) return "Idle";
+      if (lane & 536870912) return "Offscreen";
+      if (lane & 1073741824) return "Deferred";
+    }
+    function getHighestPriorityLanes(lanes) {
+      var pendingSyncLanes = lanes & 42;
+      if (0 !== pendingSyncLanes) return pendingSyncLanes;
+      switch (lanes & -lanes) {
+        case 1:
+          return 1;
+        case 2:
+          return 2;
+        case 4:
+          return 4;
+        case 8:
+          return 8;
+        case 16:
+          return 16;
+        case 32:
+          return 32;
+        case 64:
+          return 64;
+        case 128:
+          return 128;
+        case 256:
+        case 512:
+        case 1024:
+        case 2048:
+        case 4096:
+        case 8192:
+        case 16384:
+        case 32768:
+        case 65536:
+        case 131072:
+        case 262144:
+        case 524288:
+        case 1048576:
+        case 2097152:
+          return lanes & 4194048;
+        case 4194304:
+        case 8388608:
+        case 16777216:
+        case 33554432:
+          return lanes & 62914560;
+        case 67108864:
+          return 67108864;
+        case 134217728:
+          return 134217728;
+        case 268435456:
+          return 268435456;
+        case 536870912:
+          return 536870912;
+        case 1073741824:
+          return 0;
+        default:
+          return (
+            console.error(
+              "Should have found matching lanes. This is a bug in React."
+            ),
+            lanes
+          );
+      }
+    }
+    function getNextLanes(root, wipLanes, rootHasPendingCommit) {
+      var pendingLanes = root.pendingLanes;
+      if (0 === pendingLanes) return 0;
+      var nextLanes = 0,
+        suspendedLanes = root.suspendedLanes,
+        pingedLanes = root.pingedLanes;
+      root = root.warmLanes;
+      var nonIdlePendingLanes = pendingLanes & 134217727;
+      0 !== nonIdlePendingLanes
+        ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),
+          0 !== pendingLanes
+            ? (nextLanes = getHighestPriorityLanes(pendingLanes))
+            : ((pingedLanes &= nonIdlePendingLanes),
+              0 !== pingedLanes
+                ? (nextLanes = getHighestPriorityLanes(pingedLanes))
+                : rootHasPendingCommit ||
+                  ((rootHasPendingCommit = nonIdlePendingLanes & ~root),
+                  0 !== rootHasPendingCommit &&
+                    (nextLanes =
+                      getHighestPriorityLanes(rootHasPendingCommit)))))
+        : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),
+          0 !== nonIdlePendingLanes
+            ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))
+            : 0 !== pingedLanes
+              ? (nextLanes = getHighestPriorityLanes(pingedLanes))
+              : rootHasPendingCommit ||
+                ((rootHasPendingCommit = pendingLanes & ~root),
+                0 !== rootHasPendingCommit &&
+                  (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));
+      return 0 === nextLanes
+        ? 0
+        : 0 !== wipLanes &&
+            wipLanes !== nextLanes &&
+            0 === (wipLanes & suspendedLanes) &&
+            ((suspendedLanes = nextLanes & -nextLanes),
+            (rootHasPendingCommit = wipLanes & -wipLanes),
+            suspendedLanes >= rootHasPendingCommit ||
+              (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))
+          ? wipLanes
+          : nextLanes;
+    }
+    function checkIfRootIsPrerendering(root, renderLanes) {
+      return (
+        0 ===
+        (root.pendingLanes &
+          ~(root.suspendedLanes & ~root.pingedLanes) &
+          renderLanes)
+      );
+    }
+    function computeExpirationTime(lane, currentTime) {
+      switch (lane) {
+        case 1:
+        case 2:
+        case 4:
+        case 8:
+        case 64:
+          return currentTime + 250;
+        case 16:
+        case 32:
+        case 128:
+        case 256:
+        case 512:
+        case 1024:
+        case 2048:
+        case 4096:
+        case 8192:
+        case 16384:
+        case 32768:
+        case 65536:
+        case 131072:
+        case 262144:
+        case 524288:
+        case 1048576:
+        case 2097152:
+          return currentTime + 5e3;
+        case 4194304:
+        case 8388608:
+        case 16777216:
+        case 33554432:
+          return -1;
+        case 67108864:
+        case 134217728:
+        case 268435456:
+        case 536870912:
+        case 1073741824:
+          return -1;
+        default:
+          return (
+            console.error(
+              "Should have found matching lanes. This is a bug in React."
+            ),
+            -1
+          );
+      }
+    }
+    function claimNextTransitionLane() {
+      var lane = nextTransitionLane;
+      nextTransitionLane <<= 1;
+      0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);
+      return lane;
+    }
+    function claimNextRetryLane() {
+      var lane = nextRetryLane;
+      nextRetryLane <<= 1;
+      0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);
+      return lane;
+    }
+    function createLaneMap(initial) {
+      for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);
+      return laneMap;
+    }
+    function markRootUpdated$1(root, updateLane) {
+      root.pendingLanes |= updateLane;
+      268435456 !== updateLane &&
+        ((root.suspendedLanes = 0),
+        (root.pingedLanes = 0),
+        (root.warmLanes = 0));
+    }
+    function markRootFinished(
+      root,
+      finishedLanes,
+      remainingLanes,
+      spawnedLane,
+      updatedLanes,
+      suspendedRetryLanes
+    ) {
+      var previouslyPendingLanes = root.pendingLanes;
+      root.pendingLanes = remainingLanes;
+      root.suspendedLanes = 0;
+      root.pingedLanes = 0;
+      root.warmLanes = 0;
+      root.expiredLanes &= remainingLanes;
+      root.entangledLanes &= remainingLanes;
+      root.errorRecoveryDisabledLanes &= remainingLanes;
+      root.shellSuspendCounter = 0;
+      var entanglements = root.entanglements,
+        expirationTimes = root.expirationTimes,
+        hiddenUpdates = root.hiddenUpdates;
+      for (
+        remainingLanes = previouslyPendingLanes & ~remainingLanes;
+        0 < remainingLanes;
+
+      ) {
+        var index = 31 - clz32(remainingLanes),
+          lane = 1 << index;
+        entanglements[index] = 0;
+        expirationTimes[index] = -1;
+        var hiddenUpdatesForLane = hiddenUpdates[index];
+        if (null !== hiddenUpdatesForLane)
+          for (
+            hiddenUpdates[index] = null, index = 0;
+            index < hiddenUpdatesForLane.length;
+            index++
+          ) {
+            var update = hiddenUpdatesForLane[index];
+            null !== update && (update.lane &= -536870913);
+          }
+        remainingLanes &= ~lane;
+      }
+      0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);
+      0 !== suspendedRetryLanes &&
+        0 === updatedLanes &&
+        0 !== root.tag &&
+        (root.suspendedLanes |=
+          suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));
+    }
+    function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {
+      root.pendingLanes |= spawnedLane;
+      root.suspendedLanes &= ~spawnedLane;
+      var spawnedLaneIndex = 31 - clz32(spawnedLane);
+      root.entangledLanes |= spawnedLane;
+      root.entanglements[spawnedLaneIndex] =
+        root.entanglements[spawnedLaneIndex] |
+        1073741824 |
+        (entangledLanes & 4194090);
+    }
+    function markRootEntangled(root, entangledLanes) {
+      var rootEntangledLanes = (root.entangledLanes |= entangledLanes);
+      for (root = root.entanglements; rootEntangledLanes; ) {
+        var index = 31 - clz32(rootEntangledLanes),
+          lane = 1 << index;
+        (lane & entangledLanes) | (root[index] & entangledLanes) &&
+          (root[index] |= entangledLanes);
+        rootEntangledLanes &= ~lane;
+      }
+    }
+    function getBumpedLaneForHydrationByLane(lane) {
+      switch (lane) {
+        case 2:
+          lane = 1;
+          break;
+        case 8:
+          lane = 4;
+          break;
+        case 32:
+          lane = 16;
+          break;
+        case 256:
+        case 512:
+        case 1024:
+        case 2048:
+        case 4096:
+        case 8192:
+        case 16384:
+        case 32768:
+        case 65536:
+        case 131072:
+        case 262144:
+        case 524288:
+        case 1048576:
+        case 2097152:
+        case 4194304:
+        case 8388608:
+        case 16777216:
+        case 33554432:
+          lane = 128;
+          break;
+        case 268435456:
+          lane = 134217728;
+          break;
+        default:
+          lane = 0;
+      }
+      return lane;
+    }
+    function addFiberToLanesMap(root, fiber, lanes) {
+      if (isDevToolsPresent)
+        for (root = root.pendingUpdatersLaneMap; 0 < lanes; ) {
+          var index = 31 - clz32(lanes),
+            lane = 1 << index;
+          root[index].add(fiber);
+          lanes &= ~lane;
+        }
+    }
+    function movePendingFibersToMemoized(root, lanes) {
+      if (isDevToolsPresent)
+        for (
+          var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap,
+            memoizedUpdaters = root.memoizedUpdaters;
+          0 < lanes;
+
+        ) {
+          var index = 31 - clz32(lanes);
+          root = 1 << index;
+          index = pendingUpdatersLaneMap[index];
+          0 < index.size &&
+            (index.forEach(function (fiber) {
+              var alternate = fiber.alternate;
+              (null !== alternate && memoizedUpdaters.has(alternate)) ||
+                memoizedUpdaters.add(fiber);
+            }),
+            index.clear());
+          lanes &= ~root;
+        }
+    }
+    function lanesToEventPriority(lanes) {
+      lanes &= -lanes;
+      return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes
+        ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes
+          ? 0 !== (lanes & 134217727)
+            ? DefaultEventPriority
+            : IdleEventPriority
+          : ContinuousEventPriority
+        : DiscreteEventPriority;
+    }
+    function resolveUpdatePriority() {
+      var updatePriority = ReactDOMSharedInternals.p;
+      if (0 !== updatePriority) return updatePriority;
+      updatePriority = window.event;
+      return void 0 === updatePriority
+        ? DefaultEventPriority
+        : getEventPriority(updatePriority.type);
+    }
+    function runWithPriority(priority, fn) {
+      var previousPriority = ReactDOMSharedInternals.p;
+      try {
+        return (ReactDOMSharedInternals.p = priority), fn();
+      } finally {
+        ReactDOMSharedInternals.p = previousPriority;
+      }
+    }
+    function detachDeletedInstance(node) {
+      delete node[internalInstanceKey];
+      delete node[internalPropsKey];
+      delete node[internalEventHandlersKey];
+      delete node[internalEventHandlerListenersKey];
+      delete node[internalEventHandlesSetKey];
+    }
+    function getClosestInstanceFromNode(targetNode) {
+      var targetInst = targetNode[internalInstanceKey];
+      if (targetInst) return targetInst;
+      for (var parentNode = targetNode.parentNode; parentNode; ) {
+        if (
+          (targetInst =
+            parentNode[internalContainerInstanceKey] ||
+            parentNode[internalInstanceKey])
+        ) {
+          parentNode = targetInst.alternate;
+          if (
+            null !== targetInst.child ||
+            (null !== parentNode && null !== parentNode.child)
+          )
+            for (
+              targetNode = getParentSuspenseInstance(targetNode);
+              null !== targetNode;
+
+            ) {
+              if ((parentNode = targetNode[internalInstanceKey]))
+                return parentNode;
+              targetNode = getParentSuspenseInstance(targetNode);
+            }
+          return targetInst;
+        }
+        targetNode = parentNode;
+        parentNode = targetNode.parentNode;
+      }
+      return null;
+    }
+    function getInstanceFromNode(node) {
+      if (
+        (node = node[internalInstanceKey] || node[internalContainerInstanceKey])
+      ) {
+        var tag = node.tag;
+        if (
+          5 === tag ||
+          6 === tag ||
+          13 === tag ||
+          26 === tag ||
+          27 === tag ||
+          3 === tag
+        )
+          return node;
+      }
+      return null;
+    }
+    function getNodeFromInstance(inst) {
+      var tag = inst.tag;
+      if (5 === tag || 26 === tag || 27 === tag || 6 === tag)
+        return inst.stateNode;
+      throw Error("getNodeFromInstance: Invalid argument.");
+    }
+    function getResourcesFromRoot(root) {
+      var resources = root[internalRootNodeResourcesKey];
+      resources ||
+        (resources = root[internalRootNodeResourcesKey] =
+          { hoistableStyles: new Map(), hoistableScripts: new Map() });
+      return resources;
+    }
+    function markNodeAsHoistable(node) {
+      node[internalHoistableMarker] = !0;
+    }
+    function registerTwoPhaseEvent(registrationName, dependencies) {
+      registerDirectEvent(registrationName, dependencies);
+      registerDirectEvent(registrationName + "Capture", dependencies);
+    }
+    function registerDirectEvent(registrationName, dependencies) {
+      registrationNameDependencies[registrationName] &&
+        console.error(
+          "EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.",
+          registrationName
+        );
+      registrationNameDependencies[registrationName] = dependencies;
+      var lowerCasedName = registrationName.toLowerCase();
+      possibleRegistrationNames[lowerCasedName] = registrationName;
+      "onDoubleClick" === registrationName &&
+        (possibleRegistrationNames.ondblclick = registrationName);
+      for (
+        registrationName = 0;
+        registrationName < dependencies.length;
+        registrationName++
+      )
+        allNativeEvents.add(dependencies[registrationName]);
+    }
+    function checkControlledValueProps(tagName, props) {
+      hasReadOnlyValue[props.type] ||
+        props.onChange ||
+        props.onInput ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.value ||
+        ("select" === tagName
+          ? console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`."
+            )
+          : console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."
+            ));
+      props.onChange ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.checked ||
+        console.error(
+          "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`."
+        );
+    }
+    function isAttributeNameSafe(attributeName) {
+      if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+        return !0;
+      if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))
+        return !1;
+      if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+        return (validatedAttributeNameCache[attributeName] = !0);
+      illegalAttributeNameCache[attributeName] = !0;
+      console.error("Invalid attribute name: `%s`", attributeName);
+      return !1;
+    }
+    function getValueForAttributeOnCustomComponent(node, name, expected) {
+      if (isAttributeNameSafe(name)) {
+        if (!node.hasAttribute(name)) {
+          switch (typeof expected) {
+            case "symbol":
+            case "object":
+              return expected;
+            case "function":
+              return expected;
+            case "boolean":
+              if (!1 === expected) return expected;
+          }
+          return void 0 === expected ? void 0 : null;
+        }
+        node = node.getAttribute(name);
+        if ("" === node && !0 === expected) return !0;
+        checkAttributeStringCoercion(expected, name);
+        return node === "" + expected ? expected : node;
+      }
+    }
+    function setValueForAttribute(node, name, value) {
+      if (isAttributeNameSafe(name))
+        if (null === value) node.removeAttribute(name);
+        else {
+          switch (typeof value) {
+            case "undefined":
+            case "function":
+            case "symbol":
+              node.removeAttribute(name);
+              return;
+            case "boolean":
+              var prefix = name.toLowerCase().slice(0, 5);
+              if ("data-" !== prefix && "aria-" !== prefix) {
+                node.removeAttribute(name);
+                return;
+              }
+          }
+          checkAttributeStringCoercion(value, name);
+          node.setAttribute(name, "" + value);
+        }
+    }
+    function setValueForKnownAttribute(node, name, value) {
+      if (null === value) node.removeAttribute(name);
+      else {
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            node.removeAttribute(name);
+            return;
+        }
+        checkAttributeStringCoercion(value, name);
+        node.setAttribute(name, "" + value);
+      }
+    }
+    function setValueForNamespacedAttribute(node, namespace, name, value) {
+      if (null === value) node.removeAttribute(name);
+      else {
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            node.removeAttribute(name);
+            return;
+        }
+        checkAttributeStringCoercion(value, name);
+        node.setAttributeNS(namespace, name, "" + value);
+      }
+    }
+    function disabledLog() {}
+    function disableLogs() {
+      if (0 === disabledDepth) {
+        prevLog = console.log;
+        prevInfo = console.info;
+        prevWarn = console.warn;
+        prevError = console.error;
+        prevGroup = console.group;
+        prevGroupCollapsed = console.groupCollapsed;
+        prevGroupEnd = console.groupEnd;
+        var props = {
+          configurable: !0,
+          enumerable: !0,
+          value: disabledLog,
+          writable: !0
+        };
+        Object.defineProperties(console, {
+          info: props,
+          log: props,
+          warn: props,
+          error: props,
+          group: props,
+          groupCollapsed: props,
+          groupEnd: props
+        });
+      }
+      disabledDepth++;
+    }
+    function reenableLogs() {
+      disabledDepth--;
+      if (0 === disabledDepth) {
+        var props = { configurable: !0, enumerable: !0, writable: !0 };
+        Object.defineProperties(console, {
+          log: assign({}, props, { value: prevLog }),
+          info: assign({}, props, { value: prevInfo }),
+          warn: assign({}, props, { value: prevWarn }),
+          error: assign({}, props, { value: prevError }),
+          group: assign({}, props, { value: prevGroup }),
+          groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
+          groupEnd: assign({}, props, { value: prevGroupEnd })
+        });
+      }
+      0 > disabledDepth &&
+        console.error(
+          "disabledDepth fell below zero. This is a bug in React. Please file an issue."
+        );
+    }
+    function describeBuiltInComponentFrame(name) {
+      if (void 0 === prefix)
+        try {
+          throw Error();
+        } catch (x) {
+          var match = x.stack.trim().match(/\n( *(at )?)/);
+          prefix = (match && match[1]) || "";
+          suffix =
+            -1 < x.stack.indexOf("\n    at")
+              ? " (<anonymous>)"
+              : -1 < x.stack.indexOf("@")
+                ? "@unknown:0:0"
+                : "";
+        }
+      return "\n" + prefix + name + suffix;
+    }
+    function describeNativeComponentFrame(fn, construct) {
+      if (!fn || reentry) return "";
+      var frame = componentFrameCache.get(fn);
+      if (void 0 !== frame) return frame;
+      reentry = !0;
+      frame = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      var previousDispatcher = null;
+      previousDispatcher = ReactSharedInternals.H;
+      ReactSharedInternals.H = null;
+      disableLogs();
+      try {
+        var RunInRootFrame = {
+          DetermineComponentFrameRoot: function () {
+            try {
+              if (construct) {
+                var Fake = function () {
+                  throw Error();
+                };
+                Object.defineProperty(Fake.prototype, "props", {
+                  set: function () {
+                    throw Error();
+                  }
+                });
+                if ("object" === typeof Reflect && Reflect.construct) {
+                  try {
+                    Reflect.construct(Fake, []);
+                  } catch (x) {
+                    var control = x;
+                  }
+                  Reflect.construct(fn, [], Fake);
+                } else {
+                  try {
+                    Fake.call();
+                  } catch (x$0) {
+                    control = x$0;
+                  }
+                  fn.call(Fake.prototype);
+                }
+              } else {
+                try {
+                  throw Error();
+                } catch (x$1) {
+                  control = x$1;
+                }
+                (Fake = fn()) &&
+                  "function" === typeof Fake.catch &&
+                  Fake.catch(function () {});
+              }
+            } catch (sample) {
+              if (sample && control && "string" === typeof sample.stack)
+                return [sample.stack, control.stack];
+            }
+            return [null, null];
+          }
+        };
+        RunInRootFrame.DetermineComponentFrameRoot.displayName =
+          "DetermineComponentFrameRoot";
+        var namePropDescriptor = Object.getOwnPropertyDescriptor(
+          RunInRootFrame.DetermineComponentFrameRoot,
+          "name"
+        );
+        namePropDescriptor &&
+          namePropDescriptor.configurable &&
+          Object.defineProperty(
+            RunInRootFrame.DetermineComponentFrameRoot,
+            "name",
+            { value: "DetermineComponentFrameRoot" }
+          );
+        var _RunInRootFrame$Deter =
+            RunInRootFrame.DetermineComponentFrameRoot(),
+          sampleStack = _RunInRootFrame$Deter[0],
+          controlStack = _RunInRootFrame$Deter[1];
+        if (sampleStack && controlStack) {
+          var sampleLines = sampleStack.split("\n"),
+            controlLines = controlStack.split("\n");
+          for (
+            _RunInRootFrame$Deter = namePropDescriptor = 0;
+            namePropDescriptor < sampleLines.length &&
+            !sampleLines[namePropDescriptor].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            namePropDescriptor++;
+          for (
+            ;
+            _RunInRootFrame$Deter < controlLines.length &&
+            !controlLines[_RunInRootFrame$Deter].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            _RunInRootFrame$Deter++;
+          if (
+            namePropDescriptor === sampleLines.length ||
+            _RunInRootFrame$Deter === controlLines.length
+          )
+            for (
+              namePropDescriptor = sampleLines.length - 1,
+                _RunInRootFrame$Deter = controlLines.length - 1;
+              1 <= namePropDescriptor &&
+              0 <= _RunInRootFrame$Deter &&
+              sampleLines[namePropDescriptor] !==
+                controlLines[_RunInRootFrame$Deter];
+
+            )
+              _RunInRootFrame$Deter--;
+          for (
+            ;
+            1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;
+            namePropDescriptor--, _RunInRootFrame$Deter--
+          )
+            if (
+              sampleLines[namePropDescriptor] !==
+              controlLines[_RunInRootFrame$Deter]
+            ) {
+              if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {
+                do
+                  if (
+                    (namePropDescriptor--,
+                    _RunInRootFrame$Deter--,
+                    0 > _RunInRootFrame$Deter ||
+                      sampleLines[namePropDescriptor] !==
+                        controlLines[_RunInRootFrame$Deter])
+                  ) {
+                    var _frame =
+                      "\n" +
+                      sampleLines[namePropDescriptor].replace(
+                        " at new ",
+                        " at "
+                      );
+                    fn.displayName &&
+                      _frame.includes("<anonymous>") &&
+                      (_frame = _frame.replace("<anonymous>", fn.displayName));
+                    "function" === typeof fn &&
+                      componentFrameCache.set(fn, _frame);
+                    return _frame;
+                  }
+                while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
+              }
+              break;
+            }
+        }
+      } finally {
+        (reentry = !1),
+          (ReactSharedInternals.H = previousDispatcher),
+          reenableLogs(),
+          (Error.prepareStackTrace = frame);
+      }
+      sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "")
+        ? describeBuiltInComponentFrame(sampleLines)
+        : "";
+      "function" === typeof fn && componentFrameCache.set(fn, sampleLines);
+      return sampleLines;
+    }
+    function formatOwnerStack(error) {
+      var prevPrepareStackTrace = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      error = error.stack;
+      Error.prepareStackTrace = prevPrepareStackTrace;
+      error.startsWith("Error: react-stack-top-frame\n") &&
+        (error = error.slice(29));
+      prevPrepareStackTrace = error.indexOf("\n");
+      -1 !== prevPrepareStackTrace &&
+        (error = error.slice(prevPrepareStackTrace + 1));
+      prevPrepareStackTrace = error.indexOf("react_stack_bottom_frame");
+      -1 !== prevPrepareStackTrace &&
+        (prevPrepareStackTrace = error.lastIndexOf(
+          "\n",
+          prevPrepareStackTrace
+        ));
+      if (-1 !== prevPrepareStackTrace)
+        error = error.slice(0, prevPrepareStackTrace);
+      else return "";
+      return error;
+    }
+    function describeFiber(fiber) {
+      switch (fiber.tag) {
+        case 26:
+        case 27:
+        case 5:
+          return describeBuiltInComponentFrame(fiber.type);
+        case 16:
+          return describeBuiltInComponentFrame("Lazy");
+        case 13:
+          return describeBuiltInComponentFrame("Suspense");
+        case 19:
+          return describeBuiltInComponentFrame("SuspenseList");
+        case 0:
+        case 15:
+          return describeNativeComponentFrame(fiber.type, !1);
+        case 11:
+          return describeNativeComponentFrame(fiber.type.render, !1);
+        case 1:
+          return describeNativeComponentFrame(fiber.type, !0);
+        case 31:
+          return describeBuiltInComponentFrame("Activity");
+        default:
+          return "";
+      }
+    }
+    function getStackByFiberInDevAndProd(workInProgress) {
+      try {
+        var info = "";
+        do {
+          info += describeFiber(workInProgress);
+          var debugInfo = workInProgress._debugInfo;
+          if (debugInfo)
+            for (var i = debugInfo.length - 1; 0 <= i; i--) {
+              var entry = debugInfo[i];
+              if ("string" === typeof entry.name) {
+                var JSCompiler_temp_const = info,
+                  env = entry.env;
+                var JSCompiler_inline_result = describeBuiltInComponentFrame(
+                  entry.name + (env ? " [" + env + "]" : "")
+                );
+                info = JSCompiler_temp_const + JSCompiler_inline_result;
+              }
+            }
+          workInProgress = workInProgress.return;
+        } while (workInProgress);
+        return info;
+      } catch (x) {
+        return "\nError generating stack: " + x.message + "\n" + x.stack;
+      }
+    }
+    function describeFunctionComponentFrameWithoutLineNumber(fn) {
+      return (fn = fn ? fn.displayName || fn.name : "")
+        ? describeBuiltInComponentFrame(fn)
+        : "";
+    }
+    function getCurrentFiberOwnerNameInDevOrNull() {
+      if (null === current) return null;
+      var owner = current._debugOwner;
+      return null != owner ? getComponentNameFromOwner(owner) : null;
+    }
+    function getCurrentFiberStackInDev() {
+      if (null === current) return "";
+      var workInProgress = current;
+      try {
+        var info = "";
+        6 === workInProgress.tag && (workInProgress = workInProgress.return);
+        switch (workInProgress.tag) {
+          case 26:
+          case 27:
+          case 5:
+            info += describeBuiltInComponentFrame(workInProgress.type);
+            break;
+          case 13:
+            info += describeBuiltInComponentFrame("Suspense");
+            break;
+          case 19:
+            info += describeBuiltInComponentFrame("SuspenseList");
+            break;
+          case 31:
+            info += describeBuiltInComponentFrame("Activity");
+            break;
+          case 30:
+          case 0:
+          case 15:
+          case 1:
+            workInProgress._debugOwner ||
+              "" !== info ||
+              (info += describeFunctionComponentFrameWithoutLineNumber(
+                workInProgress.type
+              ));
+            break;
+          case 11:
+            workInProgress._debugOwner ||
+              "" !== info ||
+              (info += describeFunctionComponentFrameWithoutLineNumber(
+                workInProgress.type.render
+              ));
+        }
+        for (; workInProgress; )
+          if ("number" === typeof workInProgress.tag) {
+            var fiber = workInProgress;
+            workInProgress = fiber._debugOwner;
+            var debugStack = fiber._debugStack;
+            workInProgress &&
+              debugStack &&
+              ("string" !== typeof debugStack &&
+                (fiber._debugStack = debugStack = formatOwnerStack(debugStack)),
+              "" !== debugStack && (info += "\n" + debugStack));
+          } else if (null != workInProgress.debugStack) {
+            var ownerStack = workInProgress.debugStack;
+            (workInProgress = workInProgress.owner) &&
+              ownerStack &&
+              (info += "\n" + formatOwnerStack(ownerStack));
+          } else break;
+        var JSCompiler_inline_result = info;
+      } catch (x) {
+        JSCompiler_inline_result =
+          "\nError generating stack: " + x.message + "\n" + x.stack;
+      }
+      return JSCompiler_inline_result;
+    }
+    function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) {
+      var previousFiber = current;
+      setCurrentFiber(fiber);
+      try {
+        return null !== fiber && fiber._debugTask
+          ? fiber._debugTask.run(
+              callback.bind(null, arg0, arg1, arg2, arg3, arg4)
+            )
+          : callback(arg0, arg1, arg2, arg3, arg4);
+      } finally {
+        setCurrentFiber(previousFiber);
+      }
+      throw Error(
+        "runWithFiberInDEV should never be called in production. This is a bug in React."
+      );
+    }
+    function setCurrentFiber(fiber) {
+      ReactSharedInternals.getCurrentStack =
+        null === fiber ? null : getCurrentFiberStackInDev;
+      isRendering = !1;
+      current = fiber;
+    }
+    function getToStringValue(value) {
+      switch (typeof value) {
+        case "bigint":
+        case "boolean":
+        case "number":
+        case "string":
+        case "undefined":
+          return value;
+        case "object":
+          return checkFormFieldValueStringCoercion(value), value;
+        default:
+          return "";
+      }
+    }
+    function isCheckable(elem) {
+      var type = elem.type;
+      return (
+        (elem = elem.nodeName) &&
+        "input" === elem.toLowerCase() &&
+        ("checkbox" === type || "radio" === type)
+      );
+    }
+    function trackValueOnNode(node) {
+      var valueField = isCheckable(node) ? "checked" : "value",
+        descriptor = Object.getOwnPropertyDescriptor(
+          node.constructor.prototype,
+          valueField
+        );
+      checkFormFieldValueStringCoercion(node[valueField]);
+      var currentValue = "" + node[valueField];
+      if (
+        !node.hasOwnProperty(valueField) &&
+        "undefined" !== typeof descriptor &&
+        "function" === typeof descriptor.get &&
+        "function" === typeof descriptor.set
+      ) {
+        var get = descriptor.get,
+          set = descriptor.set;
+        Object.defineProperty(node, valueField, {
+          configurable: !0,
+          get: function () {
+            return get.call(this);
+          },
+          set: function (value) {
+            checkFormFieldValueStringCoercion(value);
+            currentValue = "" + value;
+            set.call(this, value);
+          }
+        });
+        Object.defineProperty(node, valueField, {
+          enumerable: descriptor.enumerable
+        });
+        return {
+          getValue: function () {
+            return currentValue;
+          },
+          setValue: function (value) {
+            checkFormFieldValueStringCoercion(value);
+            currentValue = "" + value;
+          },
+          stopTracking: function () {
+            node._valueTracker = null;
+            delete node[valueField];
+          }
+        };
+      }
+    }
+    function track(node) {
+      node._valueTracker || (node._valueTracker = trackValueOnNode(node));
+    }
+    function updateValueIfChanged(node) {
+      if (!node) return !1;
+      var tracker = node._valueTracker;
+      if (!tracker) return !0;
+      var lastValue = tracker.getValue();
+      var value = "";
+      node &&
+        (value = isCheckable(node)
+          ? node.checked
+            ? "true"
+            : "false"
+          : node.value);
+      node = value;
+      return node !== lastValue ? (tracker.setValue(node), !0) : !1;
+    }
+    function getActiveElement(doc) {
+      doc = doc || ("undefined" !== typeof document ? document : void 0);
+      if ("undefined" === typeof doc) return null;
+      try {
+        return doc.activeElement || doc.body;
+      } catch (e) {
+        return doc.body;
+      }
+    }
+    function escapeSelectorAttributeValueInsideDoubleQuotes(value) {
+      return value.replace(
+        escapeSelectorAttributeValueInsideDoubleQuotesRegex,
+        function (ch) {
+          return "\\" + ch.charCodeAt(0).toString(16) + " ";
+        }
+      );
+    }
+    function validateInputProps(element, props) {
+      void 0 === props.checked ||
+        void 0 === props.defaultChecked ||
+        didWarnCheckedDefaultChecked ||
+        (console.error(
+          "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+          getCurrentFiberOwnerNameInDevOrNull() || "A component",
+          props.type
+        ),
+        (didWarnCheckedDefaultChecked = !0));
+      void 0 === props.value ||
+        void 0 === props.defaultValue ||
+        didWarnValueDefaultValue$1 ||
+        (console.error(
+          "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+          getCurrentFiberOwnerNameInDevOrNull() || "A component",
+          props.type
+        ),
+        (didWarnValueDefaultValue$1 = !0));
+    }
+    function updateInput(
+      element,
+      value,
+      defaultValue,
+      lastDefaultValue,
+      checked,
+      defaultChecked,
+      type,
+      name
+    ) {
+      element.name = "";
+      null != type &&
+      "function" !== typeof type &&
+      "symbol" !== typeof type &&
+      "boolean" !== typeof type
+        ? (checkAttributeStringCoercion(type, "type"), (element.type = type))
+        : element.removeAttribute("type");
+      if (null != value)
+        if ("number" === type) {
+          if ((0 === value && "" === element.value) || element.value != value)
+            element.value = "" + getToStringValue(value);
+        } else
+          element.value !== "" + getToStringValue(value) &&
+            (element.value = "" + getToStringValue(value));
+      else
+        ("submit" !== type && "reset" !== type) ||
+          element.removeAttribute("value");
+      null != value
+        ? setDefaultValue(element, type, getToStringValue(value))
+        : null != defaultValue
+          ? setDefaultValue(element, type, getToStringValue(defaultValue))
+          : null != lastDefaultValue && element.removeAttribute("value");
+      null == checked &&
+        null != defaultChecked &&
+        (element.defaultChecked = !!defaultChecked);
+      null != checked &&
+        (element.checked =
+          checked &&
+          "function" !== typeof checked &&
+          "symbol" !== typeof checked);
+      null != name &&
+      "function" !== typeof name &&
+      "symbol" !== typeof name &&
+      "boolean" !== typeof name
+        ? (checkAttributeStringCoercion(name, "name"),
+          (element.name = "" + getToStringValue(name)))
+        : element.removeAttribute("name");
+    }
+    function initInput(
+      element,
+      value,
+      defaultValue,
+      checked,
+      defaultChecked,
+      type,
+      name,
+      isHydrating
+    ) {
+      null != type &&
+        "function" !== typeof type &&
+        "symbol" !== typeof type &&
+        "boolean" !== typeof type &&
+        (checkAttributeStringCoercion(type, "type"), (element.type = type));
+      if (null != value || null != defaultValue) {
+        if (
+          !(
+            ("submit" !== type && "reset" !== type) ||
+            (void 0 !== value && null !== value)
+          )
+        )
+          return;
+        defaultValue =
+          null != defaultValue ? "" + getToStringValue(defaultValue) : "";
+        value = null != value ? "" + getToStringValue(value) : defaultValue;
+        isHydrating || value === element.value || (element.value = value);
+        element.defaultValue = value;
+      }
+      checked = null != checked ? checked : defaultChecked;
+      checked =
+        "function" !== typeof checked &&
+        "symbol" !== typeof checked &&
+        !!checked;
+      element.checked = isHydrating ? element.checked : !!checked;
+      element.defaultChecked = !!checked;
+      null != name &&
+        "function" !== typeof name &&
+        "symbol" !== typeof name &&
+        "boolean" !== typeof name &&
+        (checkAttributeStringCoercion(name, "name"), (element.name = name));
+    }
+    function setDefaultValue(node, type, value) {
+      ("number" === type && getActiveElement(node.ownerDocument) === node) ||
+        node.defaultValue === "" + value ||
+        (node.defaultValue = "" + value);
+    }
+    function validateOptionProps(element, props) {
+      null == props.value &&
+        ("object" === typeof props.children && null !== props.children
+          ? React.Children.forEach(props.children, function (child) {
+              null == child ||
+                "string" === typeof child ||
+                "number" === typeof child ||
+                "bigint" === typeof child ||
+                didWarnInvalidChild ||
+                ((didWarnInvalidChild = !0),
+                console.error(
+                  "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>."
+                ));
+            })
+          : null == props.dangerouslySetInnerHTML ||
+            didWarnInvalidInnerHTML ||
+            ((didWarnInvalidInnerHTML = !0),
+            console.error(
+              "Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected."
+            )));
+      null == props.selected ||
+        didWarnSelectedSetOnOption ||
+        (console.error(
+          "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>."
+        ),
+        (didWarnSelectedSetOnOption = !0));
+    }
+    function getDeclarationErrorAddendum() {
+      var ownerName = getCurrentFiberOwnerNameInDevOrNull();
+      return ownerName
+        ? "\n\nCheck the render method of `" + ownerName + "`."
+        : "";
+    }
+    function updateOptions(node, multiple, propValue, setDefaultSelected) {
+      node = node.options;
+      if (multiple) {
+        multiple = {};
+        for (var i = 0; i < propValue.length; i++)
+          multiple["$" + propValue[i]] = !0;
+        for (propValue = 0; propValue < node.length; propValue++)
+          (i = multiple.hasOwnProperty("$" + node[propValue].value)),
+            node[propValue].selected !== i && (node[propValue].selected = i),
+            i && setDefaultSelected && (node[propValue].defaultSelected = !0);
+      } else {
+        propValue = "" + getToStringValue(propValue);
+        multiple = null;
+        for (i = 0; i < node.length; i++) {
+          if (node[i].value === propValue) {
+            node[i].selected = !0;
+            setDefaultSelected && (node[i].defaultSelected = !0);
+            return;
+          }
+          null !== multiple || node[i].disabled || (multiple = node[i]);
+        }
+        null !== multiple && (multiple.selected = !0);
+      }
+    }
+    function validateSelectProps(element, props) {
+      for (element = 0; element < valuePropNames.length; element++) {
+        var propName = valuePropNames[element];
+        if (null != props[propName]) {
+          var propNameIsArray = isArrayImpl(props[propName]);
+          props.multiple && !propNameIsArray
+            ? console.error(
+                "The `%s` prop supplied to <select> must be an array if `multiple` is true.%s",
+                propName,
+                getDeclarationErrorAddendum()
+              )
+            : !props.multiple &&
+              propNameIsArray &&
+              console.error(
+                "The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.%s",
+                propName,
+                getDeclarationErrorAddendum()
+              );
+        }
+      }
+      void 0 === props.value ||
+        void 0 === props.defaultValue ||
+        didWarnValueDefaultValue ||
+        (console.error(
+          "Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"
+        ),
+        (didWarnValueDefaultValue = !0));
+    }
+    function validateTextareaProps(element, props) {
+      void 0 === props.value ||
+        void 0 === props.defaultValue ||
+        didWarnValDefaultVal ||
+        (console.error(
+          "%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components",
+          getCurrentFiberOwnerNameInDevOrNull() || "A component"
+        ),
+        (didWarnValDefaultVal = !0));
+      null != props.children &&
+        null == props.value &&
+        console.error(
+          "Use the `defaultValue` or `value` props instead of setting children on <textarea>."
+        );
+    }
+    function updateTextarea(element, value, defaultValue) {
+      if (
+        null != value &&
+        ((value = "" + getToStringValue(value)),
+        value !== element.value && (element.value = value),
+        null == defaultValue)
+      ) {
+        element.defaultValue !== value && (element.defaultValue = value);
+        return;
+      }
+      element.defaultValue =
+        null != defaultValue ? "" + getToStringValue(defaultValue) : "";
+    }
+    function initTextarea(element, value, defaultValue, children) {
+      if (null == value) {
+        if (null != children) {
+          if (null != defaultValue)
+            throw Error(
+              "If you supply `defaultValue` on a <textarea>, do not pass children."
+            );
+          if (isArrayImpl(children)) {
+            if (1 < children.length)
+              throw Error("<textarea> can only have at most one child.");
+            children = children[0];
+          }
+          defaultValue = children;
+        }
+        null == defaultValue && (defaultValue = "");
+        value = defaultValue;
+      }
+      defaultValue = getToStringValue(value);
+      element.defaultValue = defaultValue;
+      children = element.textContent;
+      children === defaultValue &&
+        "" !== children &&
+        null !== children &&
+        (element.value = children);
+    }
+    function findNotableNode(node, indent) {
+      return void 0 === node.serverProps &&
+        0 === node.serverTail.length &&
+        1 === node.children.length &&
+        3 < node.distanceFromLeaf &&
+        node.distanceFromLeaf > 15 - indent
+        ? findNotableNode(node.children[0], indent)
+        : node;
+    }
+    function indentation(indent) {
+      return "  " + "  ".repeat(indent);
+    }
+    function added(indent) {
+      return "+ " + "  ".repeat(indent);
+    }
+    function removed(indent) {
+      return "- " + "  ".repeat(indent);
+    }
+    function describeFiberType(fiber) {
+      switch (fiber.tag) {
+        case 26:
+        case 27:
+        case 5:
+          return fiber.type;
+        case 16:
+          return "Lazy";
+        case 13:
+          return "Suspense";
+        case 19:
+          return "SuspenseList";
+        case 0:
+        case 15:
+          return (fiber = fiber.type), fiber.displayName || fiber.name || null;
+        case 11:
+          return (
+            (fiber = fiber.type.render), fiber.displayName || fiber.name || null
+          );
+        case 1:
+          return (fiber = fiber.type), fiber.displayName || fiber.name || null;
+        default:
+          return null;
+      }
+    }
+    function describeTextNode(content, maxLength) {
+      return needsEscaping.test(content)
+        ? ((content = JSON.stringify(content)),
+          content.length > maxLength - 2
+            ? 8 > maxLength
+              ? '{"..."}'
+              : "{" + content.slice(0, maxLength - 7) + '..."}'
+            : "{" + content + "}")
+        : content.length > maxLength
+          ? 5 > maxLength
+            ? '{"..."}'
+            : content.slice(0, maxLength - 3) + "..."
+          : content;
+    }
+    function describeTextDiff(clientText, serverProps, indent) {
+      var maxLength = 120 - 2 * indent;
+      if (null === serverProps)
+        return added(indent) + describeTextNode(clientText, maxLength) + "\n";
+      if ("string" === typeof serverProps) {
+        for (
+          var firstDiff = 0;
+          firstDiff < serverProps.length &&
+          firstDiff < clientText.length &&
+          serverProps.charCodeAt(firstDiff) ===
+            clientText.charCodeAt(firstDiff);
+          firstDiff++
+        );
+        firstDiff > maxLength - 8 &&
+          10 < firstDiff &&
+          ((clientText = "..." + clientText.slice(firstDiff - 8)),
+          (serverProps = "..." + serverProps.slice(firstDiff - 8)));
+        return (
+          added(indent) +
+          describeTextNode(clientText, maxLength) +
+          "\n" +
+          removed(indent) +
+          describeTextNode(serverProps, maxLength) +
+          "\n"
+        );
+      }
+      return (
+        indentation(indent) + describeTextNode(clientText, maxLength) + "\n"
+      );
+    }
+    function objectName(object) {
+      return Object.prototype.toString
+        .call(object)
+        .replace(/^\[object (.*)\]$/, function (m, p0) {
+          return p0;
+        });
+    }
+    function describeValue(value, maxLength) {
+      switch (typeof value) {
+        case "string":
+          return (
+            (value = JSON.stringify(value)),
+            value.length > maxLength
+              ? 5 > maxLength
+                ? '"..."'
+                : value.slice(0, maxLength - 4) + '..."'
+              : value
+          );
+        case "object":
+          if (null === value) return "null";
+          if (isArrayImpl(value)) return "[...]";
+          if (value.$$typeof === REACT_ELEMENT_TYPE)
+            return (maxLength = getComponentNameFromType(value.type))
+              ? "<" + maxLength + ">"
+              : "<...>";
+          var name = objectName(value);
+          if ("Object" === name) {
+            name = "";
+            maxLength -= 2;
+            for (var propName in value)
+              if (value.hasOwnProperty(propName)) {
+                var jsonPropName = JSON.stringify(propName);
+                jsonPropName !== '"' + propName + '"' &&
+                  (propName = jsonPropName);
+                maxLength -= propName.length - 2;
+                jsonPropName = describeValue(
+                  value[propName],
+                  15 > maxLength ? maxLength : 15
+                );
+                maxLength -= jsonPropName.length;
+                if (0 > maxLength) {
+                  name += "" === name ? "..." : ", ...";
+                  break;
+                }
+                name +=
+                  ("" === name ? "" : ",") + propName + ":" + jsonPropName;
+              }
+            return "{" + name + "}";
+          }
+          return name;
+        case "function":
+          return (maxLength = value.displayName || value.name)
+            ? "function " + maxLength
+            : "function";
+        default:
+          return String(value);
+      }
+    }
+    function describePropValue(value, maxLength) {
+      return "string" !== typeof value || needsEscaping.test(value)
+        ? "{" + describeValue(value, maxLength - 2) + "}"
+        : value.length > maxLength - 2
+          ? 5 > maxLength
+            ? '"..."'
+            : '"' + value.slice(0, maxLength - 5) + '..."'
+          : '"' + value + '"';
+    }
+    function describeExpandedElement(type, props, rowPrefix) {
+      var remainingRowLength = 120 - rowPrefix.length - type.length,
+        properties = [],
+        propName;
+      for (propName in props)
+        if (props.hasOwnProperty(propName) && "children" !== propName) {
+          var propValue = describePropValue(
+            props[propName],
+            120 - rowPrefix.length - propName.length - 1
+          );
+          remainingRowLength -= propName.length + propValue.length + 2;
+          properties.push(propName + "=" + propValue);
+        }
+      return 0 === properties.length
+        ? rowPrefix + "<" + type + ">\n"
+        : 0 < remainingRowLength
+          ? rowPrefix + "<" + type + " " + properties.join(" ") + ">\n"
+          : rowPrefix +
+            "<" +
+            type +
+            "\n" +
+            rowPrefix +
+            "  " +
+            properties.join("\n" + rowPrefix + "  ") +
+            "\n" +
+            rowPrefix +
+            ">\n";
+    }
+    function describePropertiesDiff(clientObject, serverObject, indent) {
+      var properties = "",
+        remainingServerProperties = assign({}, serverObject),
+        propName;
+      for (propName in clientObject)
+        if (clientObject.hasOwnProperty(propName)) {
+          delete remainingServerProperties[propName];
+          var maxLength = 120 - 2 * indent - propName.length - 2,
+            clientPropValue = describeValue(clientObject[propName], maxLength);
+          serverObject.hasOwnProperty(propName)
+            ? ((maxLength = describeValue(serverObject[propName], maxLength)),
+              (properties +=
+                added(indent) + propName + ": " + clientPropValue + "\n"),
+              (properties +=
+                removed(indent) + propName + ": " + maxLength + "\n"))
+            : (properties +=
+                added(indent) + propName + ": " + clientPropValue + "\n");
+        }
+      for (var _propName in remainingServerProperties)
+        remainingServerProperties.hasOwnProperty(_propName) &&
+          ((clientObject = describeValue(
+            remainingServerProperties[_propName],
+            120 - 2 * indent - _propName.length - 2
+          )),
+          (properties +=
+            removed(indent) + _propName + ": " + clientObject + "\n"));
+      return properties;
+    }
+    function describeElementDiff(type, clientProps, serverProps, indent) {
+      var content = "",
+        serverPropNames = new Map();
+      for (propName$jscomp$0 in serverProps)
+        serverProps.hasOwnProperty(propName$jscomp$0) &&
+          serverPropNames.set(
+            propName$jscomp$0.toLowerCase(),
+            propName$jscomp$0
+          );
+      if (1 === serverPropNames.size && serverPropNames.has("children"))
+        content += describeExpandedElement(
+          type,
+          clientProps,
+          indentation(indent)
+        );
+      else {
+        for (var _propName2 in clientProps)
+          if (
+            clientProps.hasOwnProperty(_propName2) &&
+            "children" !== _propName2
+          ) {
+            var maxLength$jscomp$0 =
+                120 - 2 * (indent + 1) - _propName2.length - 1,
+              serverPropName = serverPropNames.get(_propName2.toLowerCase());
+            if (void 0 !== serverPropName) {
+              serverPropNames.delete(_propName2.toLowerCase());
+              var propName$jscomp$0 = clientProps[_propName2];
+              serverPropName = serverProps[serverPropName];
+              var clientPropValue = describePropValue(
+                propName$jscomp$0,
+                maxLength$jscomp$0
+              );
+              maxLength$jscomp$0 = describePropValue(
+                serverPropName,
+                maxLength$jscomp$0
+              );
+              "object" === typeof propName$jscomp$0 &&
+              null !== propName$jscomp$0 &&
+              "object" === typeof serverPropName &&
+              null !== serverPropName &&
+              "Object" === objectName(propName$jscomp$0) &&
+              "Object" === objectName(serverPropName) &&
+              (2 < Object.keys(propName$jscomp$0).length ||
+                2 < Object.keys(serverPropName).length ||
+                -1 < clientPropValue.indexOf("...") ||
+                -1 < maxLength$jscomp$0.indexOf("..."))
+                ? (content +=
+                    indentation(indent + 1) +
+                    _propName2 +
+                    "={{\n" +
+                    describePropertiesDiff(
+                      propName$jscomp$0,
+                      serverPropName,
+                      indent + 2
+                    ) +
+                    indentation(indent + 1) +
+                    "}}\n")
+                : ((content +=
+                    added(indent + 1) +
+                    _propName2 +
+                    "=" +
+                    clientPropValue +
+                    "\n"),
+                  (content +=
+                    removed(indent + 1) +
+                    _propName2 +
+                    "=" +
+                    maxLength$jscomp$0 +
+                    "\n"));
+            } else
+              content +=
+                indentation(indent + 1) +
+                _propName2 +
+                "=" +
+                describePropValue(clientProps[_propName2], maxLength$jscomp$0) +
+                "\n";
+          }
+        serverPropNames.forEach(function (propName) {
+          if ("children" !== propName) {
+            var maxLength = 120 - 2 * (indent + 1) - propName.length - 1;
+            content +=
+              removed(indent + 1) +
+              propName +
+              "=" +
+              describePropValue(serverProps[propName], maxLength) +
+              "\n";
+          }
+        });
+        content =
+          "" === content
+            ? indentation(indent) + "<" + type + ">\n"
+            : indentation(indent) +
+              "<" +
+              type +
+              "\n" +
+              content +
+              indentation(indent) +
+              ">\n";
+      }
+      type = serverProps.children;
+      clientProps = clientProps.children;
+      if (
+        "string" === typeof type ||
+        "number" === typeof type ||
+        "bigint" === typeof type
+      ) {
+        serverPropNames = "";
+        if (
+          "string" === typeof clientProps ||
+          "number" === typeof clientProps ||
+          "bigint" === typeof clientProps
+        )
+          serverPropNames = "" + clientProps;
+        content += describeTextDiff(serverPropNames, "" + type, indent + 1);
+      } else if (
+        "string" === typeof clientProps ||
+        "number" === typeof clientProps ||
+        "bigint" === typeof clientProps
+      )
+        content =
+          null == type
+            ? content + describeTextDiff("" + clientProps, null, indent + 1)
+            : content + describeTextDiff("" + clientProps, void 0, indent + 1);
+      return content;
+    }
+    function describeSiblingFiber(fiber, indent) {
+      var type = describeFiberType(fiber);
+      if (null === type) {
+        type = "";
+        for (fiber = fiber.child; fiber; )
+          (type += describeSiblingFiber(fiber, indent)),
+            (fiber = fiber.sibling);
+        return type;
+      }
+      return indentation(indent) + "<" + type + ">\n";
+    }
+    function describeNode(node, indent) {
+      var skipToNode = findNotableNode(node, indent);
+      if (
+        skipToNode !== node &&
+        (1 !== node.children.length || node.children[0] !== skipToNode)
+      )
+        return (
+          indentation(indent) + "...\n" + describeNode(skipToNode, indent + 1)
+        );
+      skipToNode = "";
+      var debugInfo = node.fiber._debugInfo;
+      if (debugInfo)
+        for (var i = 0; i < debugInfo.length; i++) {
+          var serverComponentName = debugInfo[i].name;
+          "string" === typeof serverComponentName &&
+            ((skipToNode +=
+              indentation(indent) + "<" + serverComponentName + ">\n"),
+            indent++);
+        }
+      debugInfo = "";
+      i = node.fiber.pendingProps;
+      if (6 === node.fiber.tag)
+        (debugInfo = describeTextDiff(i, node.serverProps, indent)), indent++;
+      else if (
+        ((serverComponentName = describeFiberType(node.fiber)),
+        null !== serverComponentName)
+      )
+        if (void 0 === node.serverProps) {
+          debugInfo = indent;
+          var maxLength = 120 - 2 * debugInfo - serverComponentName.length - 2,
+            content = "";
+          for (propName in i)
+            if (i.hasOwnProperty(propName) && "children" !== propName) {
+              var propValue = describePropValue(i[propName], 15);
+              maxLength -= propName.length + propValue.length + 2;
+              if (0 > maxLength) {
+                content += " ...";
+                break;
+              }
+              content += " " + propName + "=" + propValue;
+            }
+          debugInfo =
+            indentation(debugInfo) +
+            "<" +
+            serverComponentName +
+            content +
+            ">\n";
+          indent++;
+        } else
+          null === node.serverProps
+            ? ((debugInfo = describeExpandedElement(
+                serverComponentName,
+                i,
+                added(indent)
+              )),
+              indent++)
+            : "string" === typeof node.serverProps
+              ? console.error(
+                  "Should not have matched a non HostText fiber to a Text node. This is a bug in React."
+                )
+              : ((debugInfo = describeElementDiff(
+                  serverComponentName,
+                  i,
+                  node.serverProps,
+                  indent
+                )),
+                indent++);
+      var propName = "";
+      i = node.fiber.child;
+      for (
+        serverComponentName = 0;
+        i && serverComponentName < node.children.length;
+
+      )
+        (maxLength = node.children[serverComponentName]),
+          maxLength.fiber === i
+            ? ((propName += describeNode(maxLength, indent)),
+              serverComponentName++)
+            : (propName += describeSiblingFiber(i, indent)),
+          (i = i.sibling);
+      i &&
+        0 < node.children.length &&
+        (propName += indentation(indent) + "...\n");
+      i = node.serverTail;
+      null === node.serverProps && indent--;
+      for (node = 0; node < i.length; node++)
+        (serverComponentName = i[node]),
+          (propName =
+            "string" === typeof serverComponentName
+              ? propName +
+                (removed(indent) +
+                  describeTextNode(serverComponentName, 120 - 2 * indent) +
+                  "\n")
+              : propName +
+                describeExpandedElement(
+                  serverComponentName.type,
+                  serverComponentName.props,
+                  removed(indent)
+                ));
+      return skipToNode + debugInfo + propName;
+    }
+    function describeDiff(rootNode) {
+      try {
+        return "\n\n" + describeNode(rootNode, 0);
+      } catch (x) {
+        return "";
+      }
+    }
+    function describeAncestors(ancestor, child, props) {
+      for (var fiber = child, node = null, distanceFromLeaf = 0; fiber; )
+        fiber === ancestor && (distanceFromLeaf = 0),
+          (node = {
+            fiber: fiber,
+            children: null !== node ? [node] : [],
+            serverProps:
+              fiber === child ? props : fiber === ancestor ? null : void 0,
+            serverTail: [],
+            distanceFromLeaf: distanceFromLeaf
+          }),
+          distanceFromLeaf++,
+          (fiber = fiber.return);
+      return null !== node ? describeDiff(node).replaceAll(/^[+-]/gm, ">") : "";
+    }
+    function updatedAncestorInfoDev(oldInfo, tag) {
+      var ancestorInfo = assign({}, oldInfo || emptyAncestorInfoDev),
+        info = { tag: tag };
+      -1 !== inScopeTags.indexOf(tag) &&
+        ((ancestorInfo.aTagInScope = null),
+        (ancestorInfo.buttonTagInScope = null),
+        (ancestorInfo.nobrTagInScope = null));
+      -1 !== buttonScopeTags.indexOf(tag) &&
+        (ancestorInfo.pTagInButtonScope = null);
+      -1 !== specialTags.indexOf(tag) &&
+        "address" !== tag &&
+        "div" !== tag &&
+        "p" !== tag &&
+        ((ancestorInfo.listItemTagAutoclosing = null),
+        (ancestorInfo.dlItemTagAutoclosing = null));
+      ancestorInfo.current = info;
+      "form" === tag && (ancestorInfo.formTag = info);
+      "a" === tag && (ancestorInfo.aTagInScope = info);
+      "button" === tag && (ancestorInfo.buttonTagInScope = info);
+      "nobr" === tag && (ancestorInfo.nobrTagInScope = info);
+      "p" === tag && (ancestorInfo.pTagInButtonScope = info);
+      "li" === tag && (ancestorInfo.listItemTagAutoclosing = info);
+      if ("dd" === tag || "dt" === tag)
+        ancestorInfo.dlItemTagAutoclosing = info;
+      "#document" === tag || "html" === tag
+        ? (ancestorInfo.containerTagInScope = null)
+        : ancestorInfo.containerTagInScope ||
+          (ancestorInfo.containerTagInScope = info);
+      null !== oldInfo ||
+      ("#document" !== tag && "html" !== tag && "body" !== tag)
+        ? !0 === ancestorInfo.implicitRootScope &&
+          (ancestorInfo.implicitRootScope = !1)
+        : (ancestorInfo.implicitRootScope = !0);
+      return ancestorInfo;
+    }
+    function isTagValidWithParent(tag, parentTag, implicitRootScope) {
+      switch (parentTag) {
+        case "select":
+          return (
+            "hr" === tag ||
+            "option" === tag ||
+            "optgroup" === tag ||
+            "script" === tag ||
+            "template" === tag ||
+            "#text" === tag
+          );
+        case "optgroup":
+          return "option" === tag || "#text" === tag;
+        case "option":
+          return "#text" === tag;
+        case "tr":
+          return (
+            "th" === tag ||
+            "td" === tag ||
+            "style" === tag ||
+            "script" === tag ||
+            "template" === tag
+          );
+        case "tbody":
+        case "thead":
+        case "tfoot":
+          return (
+            "tr" === tag ||
+            "style" === tag ||
+            "script" === tag ||
+            "template" === tag
+          );
+        case "colgroup":
+          return "col" === tag || "template" === tag;
+        case "table":
+          return (
+            "caption" === tag ||
+            "colgroup" === tag ||
+            "tbody" === tag ||
+            "tfoot" === tag ||
+            "thead" === tag ||
+            "style" === tag ||
+            "script" === tag ||
+            "template" === tag
+          );
+        case "head":
+          return (
+            "base" === tag ||
+            "basefont" === tag ||
+            "bgsound" === tag ||
+            "link" === tag ||
+            "meta" === tag ||
+            "title" === tag ||
+            "noscript" === tag ||
+            "noframes" === tag ||
+            "style" === tag ||
+            "script" === tag ||
+            "template" === tag
+          );
+        case "html":
+          if (implicitRootScope) break;
+          return "head" === tag || "body" === tag || "frameset" === tag;
+        case "frameset":
+          return "frame" === tag;
+        case "#document":
+          if (!implicitRootScope) return "html" === tag;
+      }
+      switch (tag) {
+        case "h1":
+        case "h2":
+        case "h3":
+        case "h4":
+        case "h5":
+        case "h6":
+          return (
+            "h1" !== parentTag &&
+            "h2" !== parentTag &&
+            "h3" !== parentTag &&
+            "h4" !== parentTag &&
+            "h5" !== parentTag &&
+            "h6" !== parentTag
+          );
+        case "rp":
+        case "rt":
+          return -1 === impliedEndTags.indexOf(parentTag);
+        case "caption":
+        case "col":
+        case "colgroup":
+        case "frameset":
+        case "frame":
+        case "tbody":
+        case "td":
+        case "tfoot":
+        case "th":
+        case "thead":
+        case "tr":
+          return null == parentTag;
+        case "head":
+          return implicitRootScope || null === parentTag;
+        case "html":
+          return (
+            (implicitRootScope && "#document" === parentTag) ||
+            null === parentTag
+          );
+        case "body":
+          return (
+            (implicitRootScope &&
+              ("#document" === parentTag || "html" === parentTag)) ||
+            null === parentTag
+          );
+      }
+      return !0;
+    }
+    function findInvalidAncestorForTag(tag, ancestorInfo) {
+      switch (tag) {
+        case "address":
+        case "article":
+        case "aside":
+        case "blockquote":
+        case "center":
+        case "details":
+        case "dialog":
+        case "dir":
+        case "div":
+        case "dl":
+        case "fieldset":
+        case "figcaption":
+        case "figure":
+        case "footer":
+        case "header":
+        case "hgroup":
+        case "main":
+        case "menu":
+        case "nav":
+        case "ol":
+        case "p":
+        case "section":
+        case "summary":
+        case "ul":
+        case "pre":
+        case "listing":
+        case "table":
+        case "hr":
+        case "xmp":
+        case "h1":
+        case "h2":
+        case "h3":
+        case "h4":
+        case "h5":
+        case "h6":
+          return ancestorInfo.pTagInButtonScope;
+        case "form":
+          return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;
+        case "li":
+          return ancestorInfo.listItemTagAutoclosing;
+        case "dd":
+        case "dt":
+          return ancestorInfo.dlItemTagAutoclosing;
+        case "button":
+          return ancestorInfo.buttonTagInScope;
+        case "a":
+          return ancestorInfo.aTagInScope;
+        case "nobr":
+          return ancestorInfo.nobrTagInScope;
+      }
+      return null;
+    }
+    function findAncestor(parent, tagName) {
+      for (; parent; ) {
+        switch (parent.tag) {
+          case 5:
+          case 26:
+          case 27:
+            if (parent.type === tagName) return parent;
+        }
+        parent = parent.return;
+      }
+      return null;
+    }
+    function validateDOMNesting(childTag, ancestorInfo) {
+      ancestorInfo = ancestorInfo || emptyAncestorInfoDev;
+      var parentInfo = ancestorInfo.current;
+      ancestorInfo = (parentInfo = isTagValidWithParent(
+        childTag,
+        parentInfo && parentInfo.tag,
+        ancestorInfo.implicitRootScope
+      )
+        ? null
+        : parentInfo)
+        ? null
+        : findInvalidAncestorForTag(childTag, ancestorInfo);
+      ancestorInfo = parentInfo || ancestorInfo;
+      if (!ancestorInfo) return !0;
+      var ancestorTag = ancestorInfo.tag;
+      ancestorInfo = String(!!parentInfo) + "|" + childTag + "|" + ancestorTag;
+      if (didWarn[ancestorInfo]) return !1;
+      didWarn[ancestorInfo] = !0;
+      var ancestor = (ancestorInfo = current)
+          ? findAncestor(ancestorInfo.return, ancestorTag)
+          : null,
+        ancestorDescription =
+          null !== ancestorInfo && null !== ancestor
+            ? describeAncestors(ancestor, ancestorInfo, null)
+            : "",
+        tagDisplayName = "<" + childTag + ">";
+      parentInfo
+        ? ((parentInfo = ""),
+          "table" === ancestorTag &&
+            "tr" === childTag &&
+            (parentInfo +=
+              " Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by the browser."),
+          console.error(
+            "In HTML, %s cannot be a child of <%s>.%s\nThis will cause a hydration error.%s",
+            tagDisplayName,
+            ancestorTag,
+            parentInfo,
+            ancestorDescription
+          ))
+        : console.error(
+            "In HTML, %s cannot be a descendant of <%s>.\nThis will cause a hydration error.%s",
+            tagDisplayName,
+            ancestorTag,
+            ancestorDescription
+          );
+      ancestorInfo &&
+        ((childTag = ancestorInfo.return),
+        null === ancestor ||
+          null === childTag ||
+          (ancestor === childTag &&
+            childTag._debugOwner === ancestorInfo._debugOwner) ||
+          runWithFiberInDEV(ancestor, function () {
+            console.error(
+              "<%s> cannot contain a nested %s.\nSee this log for the ancestor stack trace.",
+              ancestorTag,
+              tagDisplayName
+            );
+          }));
+      return !1;
+    }
+    function validateTextNesting(childText, parentTag, implicitRootScope) {
+      if (implicitRootScope || isTagValidWithParent("#text", parentTag, !1))
+        return !0;
+      implicitRootScope = "#text|" + parentTag;
+      if (didWarn[implicitRootScope]) return !1;
+      didWarn[implicitRootScope] = !0;
+      var ancestor = (implicitRootScope = current)
+        ? findAncestor(implicitRootScope, parentTag)
+        : null;
+      implicitRootScope =
+        null !== implicitRootScope && null !== ancestor
+          ? describeAncestors(
+              ancestor,
+              implicitRootScope,
+              6 !== implicitRootScope.tag ? { children: null } : null
+            )
+          : "";
+      /\S/.test(childText)
+        ? console.error(
+            "In HTML, text nodes cannot be a child of <%s>.\nThis will cause a hydration error.%s",
+            parentTag,
+            implicitRootScope
+          )
+        : console.error(
+            "In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.\nThis will cause a hydration error.%s",
+            parentTag,
+            implicitRootScope
+          );
+      return !1;
+    }
+    function setTextContent(node, text) {
+      if (text) {
+        var firstChild = node.firstChild;
+        if (
+          firstChild &&
+          firstChild === node.lastChild &&
+          3 === firstChild.nodeType
+        ) {
+          firstChild.nodeValue = text;
+          return;
+        }
+      }
+      node.textContent = text;
+    }
+    function camelize(string) {
+      return string.replace(hyphenPattern, function (_, character) {
+        return character.toUpperCase();
+      });
+    }
+    function setValueForStyle(style, styleName, value) {
+      var isCustomProperty = 0 === styleName.indexOf("--");
+      isCustomProperty ||
+        (-1 < styleName.indexOf("-")
+          ? (warnedStyleNames.hasOwnProperty(styleName) &&
+              warnedStyleNames[styleName]) ||
+            ((warnedStyleNames[styleName] = !0),
+            console.error(
+              "Unsupported style property %s. Did you mean %s?",
+              styleName,
+              camelize(styleName.replace(msPattern, "ms-"))
+            ))
+          : badVendoredStyleNamePattern.test(styleName)
+            ? (warnedStyleNames.hasOwnProperty(styleName) &&
+                warnedStyleNames[styleName]) ||
+              ((warnedStyleNames[styleName] = !0),
+              console.error(
+                "Unsupported vendor-prefixed style property %s. Did you mean %s?",
+                styleName,
+                styleName.charAt(0).toUpperCase() + styleName.slice(1)
+              ))
+            : !badStyleValueWithSemicolonPattern.test(value) ||
+              (warnedStyleValues.hasOwnProperty(value) &&
+                warnedStyleValues[value]) ||
+              ((warnedStyleValues[value] = !0),
+              console.error(
+                'Style property values shouldn\'t contain a semicolon. Try "%s: %s" instead.',
+                styleName,
+                value.replace(badStyleValueWithSemicolonPattern, "")
+              )),
+        "number" === typeof value &&
+          (isNaN(value)
+            ? warnedForNaNValue ||
+              ((warnedForNaNValue = !0),
+              console.error(
+                "`NaN` is an invalid value for the `%s` css style property.",
+                styleName
+              ))
+            : isFinite(value) ||
+              warnedForInfinityValue ||
+              ((warnedForInfinityValue = !0),
+              console.error(
+                "`Infinity` is an invalid value for the `%s` css style property.",
+                styleName
+              ))));
+      null == value || "boolean" === typeof value || "" === value
+        ? isCustomProperty
+          ? style.setProperty(styleName, "")
+          : "float" === styleName
+            ? (style.cssFloat = "")
+            : (style[styleName] = "")
+        : isCustomProperty
+          ? style.setProperty(styleName, value)
+          : "number" !== typeof value ||
+              0 === value ||
+              unitlessNumbers.has(styleName)
+            ? "float" === styleName
+              ? (style.cssFloat = value)
+              : (checkCSSPropertyStringCoercion(value, styleName),
+                (style[styleName] = ("" + value).trim()))
+            : (style[styleName] = value + "px");
+    }
+    function setValueForStyles(node, styles, prevStyles) {
+      if (null != styles && "object" !== typeof styles)
+        throw Error(
+          "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+        );
+      styles && Object.freeze(styles);
+      node = node.style;
+      if (null != prevStyles) {
+        if (styles) {
+          var expandedUpdates = {};
+          if (prevStyles)
+            for (var key in prevStyles)
+              if (prevStyles.hasOwnProperty(key) && !styles.hasOwnProperty(key))
+                for (
+                  var longhands = shorthandToLonghand[key] || [key], i = 0;
+                  i < longhands.length;
+                  i++
+                )
+                  expandedUpdates[longhands[i]] = key;
+          for (var _key in styles)
+            if (
+              styles.hasOwnProperty(_key) &&
+              (!prevStyles || prevStyles[_key] !== styles[_key])
+            )
+              for (
+                key = shorthandToLonghand[_key] || [_key], longhands = 0;
+                longhands < key.length;
+                longhands++
+              )
+                expandedUpdates[key[longhands]] = _key;
+          _key = {};
+          for (var key$jscomp$0 in styles)
+            for (
+              key = shorthandToLonghand[key$jscomp$0] || [key$jscomp$0],
+                longhands = 0;
+              longhands < key.length;
+              longhands++
+            )
+              _key[key[longhands]] = key$jscomp$0;
+          key$jscomp$0 = {};
+          for (var _key2 in expandedUpdates)
+            if (
+              ((key = expandedUpdates[_key2]),
+              (longhands = _key[_key2]) &&
+                key !== longhands &&
+                ((i = key + "," + longhands), !key$jscomp$0[i]))
+            ) {
+              key$jscomp$0[i] = !0;
+              i = console;
+              var value = styles[key];
+              i.error.call(
+                i,
+                "%s a style property during rerender (%s) when a conflicting property is set (%s) can lead to styling bugs. To avoid this, don't mix shorthand and non-shorthand properties for the same value; instead, replace the shorthand with separate values.",
+                null == value || "boolean" === typeof value || "" === value
+                  ? "Removing"
+                  : "Updating",
+                key,
+                longhands
+              );
+            }
+        }
+        for (var styleName in prevStyles)
+          !prevStyles.hasOwnProperty(styleName) ||
+            (null != styles && styles.hasOwnProperty(styleName)) ||
+            (0 === styleName.indexOf("--")
+              ? node.setProperty(styleName, "")
+              : "float" === styleName
+                ? (node.cssFloat = "")
+                : (node[styleName] = ""));
+        for (var _styleName in styles)
+          (_key2 = styles[_styleName]),
+            styles.hasOwnProperty(_styleName) &&
+              prevStyles[_styleName] !== _key2 &&
+              setValueForStyle(node, _styleName, _key2);
+      } else
+        for (expandedUpdates in styles)
+          styles.hasOwnProperty(expandedUpdates) &&
+            setValueForStyle(node, expandedUpdates, styles[expandedUpdates]);
+    }
+    function isCustomElement(tagName) {
+      if (-1 === tagName.indexOf("-")) return !1;
+      switch (tagName) {
+        case "annotation-xml":
+        case "color-profile":
+        case "font-face":
+        case "font-face-src":
+        case "font-face-uri":
+        case "font-face-format":
+        case "font-face-name":
+        case "missing-glyph":
+          return !1;
+        default:
+          return !0;
+      }
+    }
+    function getAttributeAlias(name) {
+      return aliases.get(name) || name;
+    }
+    function validateProperty$1(tagName, name) {
+      if (
+        hasOwnProperty.call(warnedProperties$1, name) &&
+        warnedProperties$1[name]
+      )
+        return !0;
+      if (rARIACamel$1.test(name)) {
+        tagName = "aria-" + name.slice(4).toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.",
+              name
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+        if (name !== tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. Did you mean `%s`?",
+              name,
+              tagName
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+      }
+      if (rARIA$1.test(name)) {
+        tagName = name.toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName) return (warnedProperties$1[name] = !0), !1;
+        name !== tagName &&
+          (console.error(
+            "Unknown ARIA attribute `%s`. Did you mean `%s`?",
+            name,
+            tagName
+          ),
+          (warnedProperties$1[name] = !0));
+      }
+      return !0;
+    }
+    function validateProperties$2(type, props) {
+      var invalidProps = [],
+        key;
+      for (key in props)
+        validateProperty$1(type, key) || invalidProps.push(key);
+      props = invalidProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === invalidProps.length
+        ? console.error(
+            "Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          )
+        : 1 < invalidProps.length &&
+          console.error(
+            "Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          );
+    }
+    function validateProperty(tagName, name, value, eventRegistry) {
+      if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])
+        return !0;
+      var lowerCasedName = name.toLowerCase();
+      if ("onfocusin" === lowerCasedName || "onfocusout" === lowerCasedName)
+        return (
+          console.error(
+            "React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "function" === typeof value &&
+        (("form" === tagName && "action" === name) ||
+          ("input" === tagName && "formAction" === name) ||
+          ("button" === tagName && "formAction" === name))
+      )
+        return !0;
+      if (null != eventRegistry) {
+        tagName = eventRegistry.possibleRegistrationNames;
+        if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))
+          return !0;
+        eventRegistry = tagName.hasOwnProperty(lowerCasedName)
+          ? tagName[lowerCasedName]
+          : null;
+        if (null != eventRegistry)
+          return (
+            console.error(
+              "Invalid event handler property `%s`. Did you mean `%s`?",
+              name,
+              eventRegistry
+            ),
+            (warnedProperties[name] = !0)
+          );
+        if (EVENT_NAME_REGEX.test(name))
+          return (
+            console.error(
+              "Unknown event handler property `%s`. It will be ignored.",
+              name
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (EVENT_NAME_REGEX.test(name))
+        return (
+          INVALID_EVENT_NAME_REGEX.test(name) &&
+            console.error(
+              "Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.",
+              name
+            ),
+          (warnedProperties[name] = !0)
+        );
+      if (rARIA.test(name) || rARIACamel.test(name)) return !0;
+      if ("innerhtml" === lowerCasedName)
+        return (
+          console.error(
+            "Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("aria" === lowerCasedName)
+        return (
+          console.error(
+            "The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "is" === lowerCasedName &&
+        null !== value &&
+        void 0 !== value &&
+        "string" !== typeof value
+      )
+        return (
+          console.error(
+            "Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.",
+            typeof value
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("number" === typeof value && isNaN(value))
+        return (
+          console.error(
+            "Received NaN for the `%s` attribute. If this is expected, cast the value to a string.",
+            name
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
+        if (
+          ((lowerCasedName = possibleStandardNames[lowerCasedName]),
+          lowerCasedName !== name)
+        )
+          return (
+            console.error(
+              "Invalid DOM property `%s`. Did you mean `%s`?",
+              name,
+              lowerCasedName
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (name !== lowerCasedName)
+        return (
+          console.error(
+            "React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.",
+            name,
+            lowerCasedName
+          ),
+          (warnedProperties[name] = !0)
+        );
+      switch (name) {
+        case "dangerouslySetInnerHTML":
+        case "children":
+        case "style":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "ref":
+          return !0;
+        case "innerText":
+        case "textContent":
+          return !0;
+      }
+      switch (typeof value) {
+        case "boolean":
+          switch (name) {
+            case "autoFocus":
+            case "checked":
+            case "multiple":
+            case "muted":
+            case "selected":
+            case "contentEditable":
+            case "spellCheck":
+            case "draggable":
+            case "value":
+            case "autoReverse":
+            case "externalResourcesRequired":
+            case "focusable":
+            case "preserveAlpha":
+            case "allowFullScreen":
+            case "async":
+            case "autoPlay":
+            case "controls":
+            case "default":
+            case "defer":
+            case "disabled":
+            case "disablePictureInPicture":
+            case "disableRemotePlayback":
+            case "formNoValidate":
+            case "hidden":
+            case "loop":
+            case "noModule":
+            case "noValidate":
+            case "open":
+            case "playsInline":
+            case "readOnly":
+            case "required":
+            case "reversed":
+            case "scoped":
+            case "seamless":
+            case "itemScope":
+            case "capture":
+            case "download":
+            case "inert":
+              return !0;
+            default:
+              lowerCasedName = name.toLowerCase().slice(0, 5);
+              if ("data-" === lowerCasedName || "aria-" === lowerCasedName)
+                return !0;
+              value
+                ? console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name
+                  )
+                : console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name,
+                    name,
+                    name
+                  );
+              return (warnedProperties[name] = !0);
+          }
+        case "function":
+        case "symbol":
+          return (warnedProperties[name] = !0), !1;
+        case "string":
+          if ("false" === value || "true" === value) {
+            switch (name) {
+              case "checked":
+              case "selected":
+              case "multiple":
+              case "muted":
+              case "allowFullScreen":
+              case "async":
+              case "autoPlay":
+              case "controls":
+              case "default":
+              case "defer":
+              case "disabled":
+              case "disablePictureInPicture":
+              case "disableRemotePlayback":
+              case "formNoValidate":
+              case "hidden":
+              case "loop":
+              case "noModule":
+              case "noValidate":
+              case "open":
+              case "playsInline":
+              case "readOnly":
+              case "required":
+              case "reversed":
+              case "scoped":
+              case "seamless":
+              case "itemScope":
+              case "inert":
+                break;
+              default:
+                return !0;
+            }
+            console.error(
+              "Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?",
+              value,
+              name,
+              "false" === value
+                ? "The browser will interpret it as a truthy value."
+                : 'Although this works, it will not work as expected if you pass the string "false".',
+              name,
+              value
+            );
+            warnedProperties[name] = !0;
+          }
+      }
+      return !0;
+    }
+    function warnUnknownProperties(type, props, eventRegistry) {
+      var unknownProps = [],
+        key;
+      for (key in props)
+        validateProperty(type, key, props[key], eventRegistry) ||
+          unknownProps.push(key);
+      props = unknownProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === unknownProps.length
+        ? console.error(
+            "Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          )
+        : 1 < unknownProps.length &&
+          console.error(
+            "Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          );
+    }
+    function sanitizeURL(url) {
+      return isJavaScriptProtocol.test("" + url)
+        ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+        : url;
+    }
+    function getEventTarget(nativeEvent) {
+      nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;
+      nativeEvent.correspondingUseElement &&
+        (nativeEvent = nativeEvent.correspondingUseElement);
+      return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;
+    }
+    function restoreStateOfTarget(target) {
+      var internalInstance = getInstanceFromNode(target);
+      if (internalInstance && (target = internalInstance.stateNode)) {
+        var props = target[internalPropsKey] || null;
+        a: switch (
+          ((target = internalInstance.stateNode), internalInstance.type)
+        ) {
+          case "input":
+            updateInput(
+              target,
+              props.value,
+              props.defaultValue,
+              props.defaultValue,
+              props.checked,
+              props.defaultChecked,
+              props.type,
+              props.name
+            );
+            internalInstance = props.name;
+            if ("radio" === props.type && null != internalInstance) {
+              for (props = target; props.parentNode; ) props = props.parentNode;
+              checkAttributeStringCoercion(internalInstance, "name");
+              props = props.querySelectorAll(
+                'input[name="' +
+                  escapeSelectorAttributeValueInsideDoubleQuotes(
+                    "" + internalInstance
+                  ) +
+                  '"][type="radio"]'
+              );
+              for (
+                internalInstance = 0;
+                internalInstance < props.length;
+                internalInstance++
+              ) {
+                var otherNode = props[internalInstance];
+                if (otherNode !== target && otherNode.form === target.form) {
+                  var otherProps = otherNode[internalPropsKey] || null;
+                  if (!otherProps)
+                    throw Error(
+                      "ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported."
+                    );
+                  updateInput(
+                    otherNode,
+                    otherProps.value,
+                    otherProps.defaultValue,
+                    otherProps.defaultValue,
+                    otherProps.checked,
+                    otherProps.defaultChecked,
+                    otherProps.type,
+                    otherProps.name
+                  );
+                }
+              }
+              for (
+                internalInstance = 0;
+                internalInstance < props.length;
+                internalInstance++
+              )
+                (otherNode = props[internalInstance]),
+                  otherNode.form === target.form &&
+                    updateValueIfChanged(otherNode);
+            }
+            break a;
+          case "textarea":
+            updateTextarea(target, props.value, props.defaultValue);
+            break a;
+          case "select":
+            (internalInstance = props.value),
+              null != internalInstance &&
+                updateOptions(target, !!props.multiple, internalInstance, !1);
+        }
+      }
+    }
+    function batchedUpdates$2(fn, a, b) {
+      if (isInsideEventHandler) return fn(a, b);
+      isInsideEventHandler = !0;
+      try {
+        var JSCompiler_inline_result = fn(a);
+        return JSCompiler_inline_result;
+      } finally {
+        if (
+          ((isInsideEventHandler = !1),
+          null !== restoreTarget || null !== restoreQueue)
+        )
+          if (
+            (flushSyncWork$1(),
+            restoreTarget &&
+              ((a = restoreTarget),
+              (fn = restoreQueue),
+              (restoreQueue = restoreTarget = null),
+              restoreStateOfTarget(a),
+              fn))
+          )
+            for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);
+      }
+    }
+    function getListener(inst, registrationName) {
+      var stateNode = inst.stateNode;
+      if (null === stateNode) return null;
+      var props = stateNode[internalPropsKey] || null;
+      if (null === props) return null;
+      stateNode = props[registrationName];
+      a: switch (registrationName) {
+        case "onClick":
+        case "onClickCapture":
+        case "onDoubleClick":
+        case "onDoubleClickCapture":
+        case "onMouseDown":
+        case "onMouseDownCapture":
+        case "onMouseMove":
+        case "onMouseMoveCapture":
+        case "onMouseUp":
+        case "onMouseUpCapture":
+        case "onMouseEnter":
+          (props = !props.disabled) ||
+            ((inst = inst.type),
+            (props = !(
+              "button" === inst ||
+              "input" === inst ||
+              "select" === inst ||
+              "textarea" === inst
+            )));
+          inst = !props;
+          break a;
+        default:
+          inst = !1;
+      }
+      if (inst) return null;
+      if (stateNode && "function" !== typeof stateNode)
+        throw Error(
+          "Expected `" +
+            registrationName +
+            "` listener to be a function, instead got a value of `" +
+            typeof stateNode +
+            "` type."
+        );
+      return stateNode;
+    }
+    function getData() {
+      if (fallbackText) return fallbackText;
+      var start,
+        startValue = startText,
+        startLength = startValue.length,
+        end,
+        endValue = "value" in root ? root.value : root.textContent,
+        endLength = endValue.length;
+      for (
+        start = 0;
+        start < startLength && startValue[start] === endValue[start];
+        start++
+      );
+      var minEnd = startLength - start;
+      for (
+        end = 1;
+        end <= minEnd &&
+        startValue[startLength - end] === endValue[endLength - end];
+        end++
+      );
+      return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));
+    }
+    function getEventCharCode(nativeEvent) {
+      var keyCode = nativeEvent.keyCode;
+      "charCode" in nativeEvent
+        ? ((nativeEvent = nativeEvent.charCode),
+          0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))
+        : (nativeEvent = keyCode);
+      10 === nativeEvent && (nativeEvent = 13);
+      return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;
+    }
+    function functionThatReturnsTrue() {
+      return !0;
+    }
+    function functionThatReturnsFalse() {
+      return !1;
+    }
+    function createSyntheticEvent(Interface) {
+      function SyntheticBaseEvent(
+        reactName,
+        reactEventType,
+        targetInst,
+        nativeEvent,
+        nativeEventTarget
+      ) {
+        this._reactName = reactName;
+        this._targetInst = targetInst;
+        this.type = reactEventType;
+        this.nativeEvent = nativeEvent;
+        this.target = nativeEventTarget;
+        this.currentTarget = null;
+        for (var propName in Interface)
+          Interface.hasOwnProperty(propName) &&
+            ((reactName = Interface[propName]),
+            (this[propName] = reactName
+              ? reactName(nativeEvent)
+              : nativeEvent[propName]));
+        this.isDefaultPrevented = (
+          null != nativeEvent.defaultPrevented
+            ? nativeEvent.defaultPrevented
+            : !1 === nativeEvent.returnValue
+        )
+          ? functionThatReturnsTrue
+          : functionThatReturnsFalse;
+        this.isPropagationStopped = functionThatReturnsFalse;
+        return this;
+      }
+      assign(SyntheticBaseEvent.prototype, {
+        preventDefault: function () {
+          this.defaultPrevented = !0;
+          var event = this.nativeEvent;
+          event &&
+            (event.preventDefault
+              ? event.preventDefault()
+              : "unknown" !== typeof event.returnValue &&
+                (event.returnValue = !1),
+            (this.isDefaultPrevented = functionThatReturnsTrue));
+        },
+        stopPropagation: function () {
+          var event = this.nativeEvent;
+          event &&
+            (event.stopPropagation
+              ? event.stopPropagation()
+              : "unknown" !== typeof event.cancelBubble &&
+                (event.cancelBubble = !0),
+            (this.isPropagationStopped = functionThatReturnsTrue));
+        },
+        persist: function () {},
+        isPersistent: functionThatReturnsTrue
+      });
+      return SyntheticBaseEvent;
+    }
+    function modifierStateGetter(keyArg) {
+      var nativeEvent = this.nativeEvent;
+      return nativeEvent.getModifierState
+        ? nativeEvent.getModifierState(keyArg)
+        : (keyArg = modifierKeyToProp[keyArg])
+          ? !!nativeEvent[keyArg]
+          : !1;
+    }
+    function getEventModifierState() {
+      return modifierStateGetter;
+    }
+    function isFallbackCompositionEnd(domEventName, nativeEvent) {
+      switch (domEventName) {
+        case "keyup":
+          return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);
+        case "keydown":
+          return nativeEvent.keyCode !== START_KEYCODE;
+        case "keypress":
+        case "mousedown":
+        case "focusout":
+          return !0;
+        default:
+          return !1;
+      }
+    }
+    function getDataFromCustomEvent(nativeEvent) {
+      nativeEvent = nativeEvent.detail;
+      return "object" === typeof nativeEvent && "data" in nativeEvent
+        ? nativeEvent.data
+        : null;
+    }
+    function getNativeBeforeInputChars(domEventName, nativeEvent) {
+      switch (domEventName) {
+        case "compositionend":
+          return getDataFromCustomEvent(nativeEvent);
+        case "keypress":
+          if (nativeEvent.which !== SPACEBAR_CODE) return null;
+          hasSpaceKeypress = !0;
+          return SPACEBAR_CHAR;
+        case "textInput":
+          return (
+            (domEventName = nativeEvent.data),
+            domEventName === SPACEBAR_CHAR && hasSpaceKeypress
+              ? null
+              : domEventName
+          );
+        default:
+          return null;
+      }
+    }
+    function getFallbackBeforeInputChars(domEventName, nativeEvent) {
+      if (isComposing)
+        return "compositionend" === domEventName ||
+          (!canUseCompositionEvent &&
+            isFallbackCompositionEnd(domEventName, nativeEvent))
+          ? ((domEventName = getData()),
+            (fallbackText = startText = root = null),
+            (isComposing = !1),
+            domEventName)
+          : null;
+      switch (domEventName) {
+        case "paste":
+          return null;
+        case "keypress":
+          if (
+            !(
+              nativeEvent.ctrlKey ||
+              nativeEvent.altKey ||
+              nativeEvent.metaKey
+            ) ||
+            (nativeEvent.ctrlKey && nativeEvent.altKey)
+          ) {
+            if (nativeEvent.char && 1 < nativeEvent.char.length)
+              return nativeEvent.char;
+            if (nativeEvent.which)
+              return String.fromCharCode(nativeEvent.which);
+          }
+          return null;
+        case "compositionend":
+          return useFallbackCompositionData && "ko" !== nativeEvent.locale
+            ? null
+            : nativeEvent.data;
+        default:
+          return null;
+      }
+    }
+    function isTextInputElement(elem) {
+      var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+      return "input" === nodeName
+        ? !!supportedInputTypes[elem.type]
+        : "textarea" === nodeName
+          ? !0
+          : !1;
+    }
+    function isEventSupported(eventNameSuffix) {
+      if (!canUseDOM) return !1;
+      eventNameSuffix = "on" + eventNameSuffix;
+      var isSupported = eventNameSuffix in document;
+      isSupported ||
+        ((isSupported = document.createElement("div")),
+        isSupported.setAttribute(eventNameSuffix, "return;"),
+        (isSupported = "function" === typeof isSupported[eventNameSuffix]));
+      return isSupported;
+    }
+    function createAndAccumulateChangeEvent(
+      dispatchQueue,
+      inst,
+      nativeEvent,
+      target
+    ) {
+      restoreTarget
+        ? restoreQueue
+          ? restoreQueue.push(target)
+          : (restoreQueue = [target])
+        : (restoreTarget = target);
+      inst = accumulateTwoPhaseListeners(inst, "onChange");
+      0 < inst.length &&
+        ((nativeEvent = new SyntheticEvent(
+          "onChange",
+          "change",
+          null,
+          nativeEvent,
+          target
+        )),
+        dispatchQueue.push({ event: nativeEvent, listeners: inst }));
+    }
+    function runEventInBatch(dispatchQueue) {
+      processDispatchQueue(dispatchQueue, 0);
+    }
+    function getInstIfValueChanged(targetInst) {
+      var targetNode = getNodeFromInstance(targetInst);
+      if (updateValueIfChanged(targetNode)) return targetInst;
+    }
+    function getTargetInstForChangeEvent(domEventName, targetInst) {
+      if ("change" === domEventName) return targetInst;
+    }
+    function stopWatchingForValueChange() {
+      activeElement$1 &&
+        (activeElement$1.detachEvent("onpropertychange", handlePropertyChange),
+        (activeElementInst$1 = activeElement$1 = null));
+    }
+    function handlePropertyChange(nativeEvent) {
+      if (
+        "value" === nativeEvent.propertyName &&
+        getInstIfValueChanged(activeElementInst$1)
+      ) {
+        var dispatchQueue = [];
+        createAndAccumulateChangeEvent(
+          dispatchQueue,
+          activeElementInst$1,
+          nativeEvent,
+          getEventTarget(nativeEvent)
+        );
+        batchedUpdates$2(runEventInBatch, dispatchQueue);
+      }
+    }
+    function handleEventsForInputEventPolyfill(
+      domEventName,
+      target,
+      targetInst
+    ) {
+      "focusin" === domEventName
+        ? (stopWatchingForValueChange(),
+          (activeElement$1 = target),
+          (activeElementInst$1 = targetInst),
+          activeElement$1.attachEvent("onpropertychange", handlePropertyChange))
+        : "focusout" === domEventName && stopWatchingForValueChange();
+    }
+    function getTargetInstForInputEventPolyfill(domEventName) {
+      if (
+        "selectionchange" === domEventName ||
+        "keyup" === domEventName ||
+        "keydown" === domEventName
+      )
+        return getInstIfValueChanged(activeElementInst$1);
+    }
+    function getTargetInstForClickEvent(domEventName, targetInst) {
+      if ("click" === domEventName) return getInstIfValueChanged(targetInst);
+    }
+    function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {
+      if ("input" === domEventName || "change" === domEventName)
+        return getInstIfValueChanged(targetInst);
+    }
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    function shallowEqual(objA, objB) {
+      if (objectIs(objA, objB)) return !0;
+      if (
+        "object" !== typeof objA ||
+        null === objA ||
+        "object" !== typeof objB ||
+        null === objB
+      )
+        return !1;
+      var keysA = Object.keys(objA),
+        keysB = Object.keys(objB);
+      if (keysA.length !== keysB.length) return !1;
+      for (keysB = 0; keysB < keysA.length; keysB++) {
+        var currentKey = keysA[keysB];
+        if (
+          !hasOwnProperty.call(objB, currentKey) ||
+          !objectIs(objA[currentKey], objB[currentKey])
+        )
+          return !1;
+      }
+      return !0;
+    }
+    function getLeafNode(node) {
+      for (; node && node.firstChild; ) node = node.firstChild;
+      return node;
+    }
+    function getNodeForCharacterOffset(root, offset) {
+      var node = getLeafNode(root);
+      root = 0;
+      for (var nodeEnd; node; ) {
+        if (3 === node.nodeType) {
+          nodeEnd = root + node.textContent.length;
+          if (root <= offset && nodeEnd >= offset)
+            return { node: node, offset: offset - root };
+          root = nodeEnd;
+        }
+        a: {
+          for (; node; ) {
+            if (node.nextSibling) {
+              node = node.nextSibling;
+              break a;
+            }
+            node = node.parentNode;
+          }
+          node = void 0;
+        }
+        node = getLeafNode(node);
+      }
+    }
+    function containsNode(outerNode, innerNode) {
+      return outerNode && innerNode
+        ? outerNode === innerNode
+          ? !0
+          : outerNode && 3 === outerNode.nodeType
+            ? !1
+            : innerNode && 3 === innerNode.nodeType
+              ? containsNode(outerNode, innerNode.parentNode)
+              : "contains" in outerNode
+                ? outerNode.contains(innerNode)
+                : outerNode.compareDocumentPosition
+                  ? !!(outerNode.compareDocumentPosition(innerNode) & 16)
+                  : !1
+        : !1;
+    }
+    function getActiveElementDeep(containerInfo) {
+      containerInfo =
+        null != containerInfo &&
+        null != containerInfo.ownerDocument &&
+        null != containerInfo.ownerDocument.defaultView
+          ? containerInfo.ownerDocument.defaultView
+          : window;
+      for (
+        var element = getActiveElement(containerInfo.document);
+        element instanceof containerInfo.HTMLIFrameElement;
+
+      ) {
+        try {
+          var JSCompiler_inline_result =
+            "string" === typeof element.contentWindow.location.href;
+        } catch (err) {
+          JSCompiler_inline_result = !1;
+        }
+        if (JSCompiler_inline_result) containerInfo = element.contentWindow;
+        else break;
+        element = getActiveElement(containerInfo.document);
+      }
+      return element;
+    }
+    function hasSelectionCapabilities(elem) {
+      var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+      return (
+        nodeName &&
+        (("input" === nodeName &&
+          ("text" === elem.type ||
+            "search" === elem.type ||
+            "tel" === elem.type ||
+            "url" === elem.type ||
+            "password" === elem.type)) ||
+          "textarea" === nodeName ||
+          "true" === elem.contentEditable)
+      );
+    }
+    function constructSelectEvent(
+      dispatchQueue,
+      nativeEvent,
+      nativeEventTarget
+    ) {
+      var doc =
+        nativeEventTarget.window === nativeEventTarget
+          ? nativeEventTarget.document
+          : 9 === nativeEventTarget.nodeType
+            ? nativeEventTarget
+            : nativeEventTarget.ownerDocument;
+      mouseDown ||
+        null == activeElement ||
+        activeElement !== getActiveElement(doc) ||
+        ((doc = activeElement),
+        "selectionStart" in doc && hasSelectionCapabilities(doc)
+          ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })
+          : ((doc = (
+              (doc.ownerDocument && doc.ownerDocument.defaultView) ||
+              window
+            ).getSelection()),
+            (doc = {
+              anchorNode: doc.anchorNode,
+              anchorOffset: doc.anchorOffset,
+              focusNode: doc.focusNode,
+              focusOffset: doc.focusOffset
+            })),
+        (lastSelection && shallowEqual(lastSelection, doc)) ||
+          ((lastSelection = doc),
+          (doc = accumulateTwoPhaseListeners(activeElementInst, "onSelect")),
+          0 < doc.length &&
+            ((nativeEvent = new SyntheticEvent(
+              "onSelect",
+              "select",
+              null,
+              nativeEvent,
+              nativeEventTarget
+            )),
+            dispatchQueue.push({ event: nativeEvent, listeners: doc }),
+            (nativeEvent.target = activeElement))));
+    }
+    function makePrefixMap(styleProp, eventName) {
+      var prefixes = {};
+      prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
+      prefixes["Webkit" + styleProp] = "webkit" + eventName;
+      prefixes["Moz" + styleProp] = "moz" + eventName;
+      return prefixes;
+    }
+    function getVendorPrefixedEventName(eventName) {
+      if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];
+      if (!vendorPrefixes[eventName]) return eventName;
+      var prefixMap = vendorPrefixes[eventName],
+        styleProp;
+      for (styleProp in prefixMap)
+        if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)
+          return (prefixedEventNames[eventName] = prefixMap[styleProp]);
+      return eventName;
+    }
+    function registerSimpleEvent(domEventName, reactName) {
+      topLevelEventsToReactNames.set(domEventName, reactName);
+      registerTwoPhaseEvent(reactName, [domEventName]);
+    }
+    function createCapturedValueAtFiber(value, source) {
+      if ("object" === typeof value && null !== value) {
+        var existing = CapturedStacks.get(value);
+        if (void 0 !== existing) return existing;
+        source = {
+          value: value,
+          source: source,
+          stack: getStackByFiberInDevAndProd(source)
+        };
+        CapturedStacks.set(value, source);
+        return source;
+      }
+      return {
+        value: value,
+        source: source,
+        stack: getStackByFiberInDevAndProd(source)
+      };
+    }
+    function finishQueueingConcurrentUpdates() {
+      for (
+        var endIndex = concurrentQueuesIndex,
+          i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);
+        i < endIndex;
+
+      ) {
+        var fiber = concurrentQueues[i];
+        concurrentQueues[i++] = null;
+        var queue = concurrentQueues[i];
+        concurrentQueues[i++] = null;
+        var update = concurrentQueues[i];
+        concurrentQueues[i++] = null;
+        var lane = concurrentQueues[i];
+        concurrentQueues[i++] = null;
+        if (null !== queue && null !== update) {
+          var pending = queue.pending;
+          null === pending
+            ? (update.next = update)
+            : ((update.next = pending.next), (pending.next = update));
+          queue.pending = update;
+        }
+        0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);
+      }
+    }
+    function enqueueUpdate$1(fiber, queue, update, lane) {
+      concurrentQueues[concurrentQueuesIndex++] = fiber;
+      concurrentQueues[concurrentQueuesIndex++] = queue;
+      concurrentQueues[concurrentQueuesIndex++] = update;
+      concurrentQueues[concurrentQueuesIndex++] = lane;
+      concurrentlyUpdatedLanes |= lane;
+      fiber.lanes |= lane;
+      fiber = fiber.alternate;
+      null !== fiber && (fiber.lanes |= lane);
+    }
+    function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {
+      enqueueUpdate$1(fiber, queue, update, lane);
+      return getRootForUpdatedFiber(fiber);
+    }
+    function enqueueConcurrentRenderForLane(fiber, lane) {
+      enqueueUpdate$1(fiber, null, null, lane);
+      return getRootForUpdatedFiber(fiber);
+    }
+    function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {
+      sourceFiber.lanes |= lane;
+      var alternate = sourceFiber.alternate;
+      null !== alternate && (alternate.lanes |= lane);
+      for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )
+        (parent.childLanes |= lane),
+          (alternate = parent.alternate),
+          null !== alternate && (alternate.childLanes |= lane),
+          22 === parent.tag &&
+            ((sourceFiber = parent.stateNode),
+            null === sourceFiber ||
+              sourceFiber._visibility & OffscreenVisible ||
+              (isHidden = !0)),
+          (sourceFiber = parent),
+          (parent = parent.return);
+      return 3 === sourceFiber.tag
+        ? ((parent = sourceFiber.stateNode),
+          isHidden &&
+            null !== update &&
+            ((isHidden = 31 - clz32(lane)),
+            (sourceFiber = parent.hiddenUpdates),
+            (alternate = sourceFiber[isHidden]),
+            null === alternate
+              ? (sourceFiber[isHidden] = [update])
+              : alternate.push(update),
+            (update.lane = lane | 536870912)),
+          parent)
+        : null;
+    }
+    function getRootForUpdatedFiber(sourceFiber) {
+      if (nestedUpdateCount > NESTED_UPDATE_LIMIT)
+        throw (
+          ((nestedPassiveUpdateCount = nestedUpdateCount = 0),
+          (rootWithPassiveNestedUpdates = rootWithNestedUpdates = null),
+          Error(
+            "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops."
+          ))
+        );
+      nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT &&
+        ((nestedPassiveUpdateCount = 0),
+        (rootWithPassiveNestedUpdates = null),
+        console.error(
+          "Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render."
+        ));
+      null === sourceFiber.alternate &&
+        0 !== (sourceFiber.flags & 4098) &&
+        warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);
+      for (var node = sourceFiber, parent = node.return; null !== parent; )
+        null === node.alternate &&
+          0 !== (node.flags & 4098) &&
+          warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber),
+          (node = parent),
+          (parent = node.return);
+      return 3 === node.tag ? node.stateNode : null;
+    }
+    function resolveFunctionForHotReloading(type) {
+      if (null === resolveFamily) return type;
+      var family = resolveFamily(type);
+      return void 0 === family ? type : family.current;
+    }
+    function resolveForwardRefForHotReloading(type) {
+      if (null === resolveFamily) return type;
+      var family = resolveFamily(type);
+      return void 0 === family
+        ? null !== type &&
+          void 0 !== type &&
+          "function" === typeof type.render &&
+          ((family = resolveFunctionForHotReloading(type.render)),
+          type.render !== family)
+          ? ((family = { $$typeof: REACT_FORWARD_REF_TYPE, render: family }),
+            void 0 !== type.displayName &&
+              (family.displayName = type.displayName),
+            family)
+          : type
+        : family.current;
+    }
+    function isCompatibleFamilyForHotReloading(fiber, element) {
+      if (null === resolveFamily) return !1;
+      var prevType = fiber.elementType;
+      element = element.type;
+      var needsCompareFamilies = !1,
+        $$typeofNextType =
+          "object" === typeof element && null !== element
+            ? element.$$typeof
+            : null;
+      switch (fiber.tag) {
+        case 1:
+          "function" === typeof element && (needsCompareFamilies = !0);
+          break;
+        case 0:
+          "function" === typeof element
+            ? (needsCompareFamilies = !0)
+            : $$typeofNextType === REACT_LAZY_TYPE &&
+              (needsCompareFamilies = !0);
+          break;
+        case 11:
+          $$typeofNextType === REACT_FORWARD_REF_TYPE
+            ? (needsCompareFamilies = !0)
+            : $$typeofNextType === REACT_LAZY_TYPE &&
+              (needsCompareFamilies = !0);
+          break;
+        case 14:
+        case 15:
+          $$typeofNextType === REACT_MEMO_TYPE
+            ? (needsCompareFamilies = !0)
+            : $$typeofNextType === REACT_LAZY_TYPE &&
+              (needsCompareFamilies = !0);
+          break;
+        default:
+          return !1;
+      }
+      return needsCompareFamilies &&
+        ((fiber = resolveFamily(prevType)),
+        void 0 !== fiber && fiber === resolveFamily(element))
+        ? !0
+        : !1;
+    }
+    function markFailedErrorBoundaryForHotReloading(fiber) {
+      null !== resolveFamily &&
+        "function" === typeof WeakSet &&
+        (null === failedBoundaries && (failedBoundaries = new WeakSet()),
+        failedBoundaries.add(fiber));
+    }
+    function scheduleFibersWithFamiliesRecursively(
+      fiber,
+      updatedFamilies,
+      staleFamilies
+    ) {
+      var alternate = fiber.alternate,
+        child = fiber.child,
+        sibling = fiber.sibling,
+        tag = fiber.tag,
+        type = fiber.type,
+        candidateType = null;
+      switch (tag) {
+        case 0:
+        case 15:
+        case 1:
+          candidateType = type;
+          break;
+        case 11:
+          candidateType = type.render;
+      }
+      if (null === resolveFamily)
+        throw Error("Expected resolveFamily to be set during hot reload.");
+      var needsRender = !1;
+      type = !1;
+      null !== candidateType &&
+        ((candidateType = resolveFamily(candidateType)),
+        void 0 !== candidateType &&
+          (staleFamilies.has(candidateType)
+            ? (type = !0)
+            : updatedFamilies.has(candidateType) &&
+              (1 === tag ? (type = !0) : (needsRender = !0))));
+      null !== failedBoundaries &&
+        (failedBoundaries.has(fiber) ||
+          (null !== alternate && failedBoundaries.has(alternate))) &&
+        (type = !0);
+      type && (fiber._debugNeedsRemount = !0);
+      if (type || needsRender)
+        (alternate = enqueueConcurrentRenderForLane(fiber, 2)),
+          null !== alternate && scheduleUpdateOnFiber(alternate, fiber, 2);
+      null === child ||
+        type ||
+        scheduleFibersWithFamiliesRecursively(
+          child,
+          updatedFamilies,
+          staleFamilies
+        );
+      null !== sibling &&
+        scheduleFibersWithFamiliesRecursively(
+          sibling,
+          updatedFamilies,
+          staleFamilies
+        );
+    }
+    function FiberNode(tag, pendingProps, key, mode) {
+      this.tag = tag;
+      this.key = key;
+      this.sibling =
+        this.child =
+        this.return =
+        this.stateNode =
+        this.type =
+        this.elementType =
+          null;
+      this.index = 0;
+      this.refCleanup = this.ref = null;
+      this.pendingProps = pendingProps;
+      this.dependencies =
+        this.memoizedState =
+        this.updateQueue =
+        this.memoizedProps =
+          null;
+      this.mode = mode;
+      this.subtreeFlags = this.flags = 0;
+      this.deletions = null;
+      this.childLanes = this.lanes = 0;
+      this.alternate = null;
+      this.actualDuration = -0;
+      this.actualStartTime = -1.1;
+      this.treeBaseDuration = this.selfBaseDuration = -0;
+      this._debugTask =
+        this._debugStack =
+        this._debugOwner =
+        this._debugInfo =
+          null;
+      this._debugNeedsRemount = !1;
+      this._debugHookTypes = null;
+      hasBadMapPolyfill ||
+        "function" !== typeof Object.preventExtensions ||
+        Object.preventExtensions(this);
+    }
+    function shouldConstruct(Component) {
+      Component = Component.prototype;
+      return !(!Component || !Component.isReactComponent);
+    }
+    function createWorkInProgress(current, pendingProps) {
+      var workInProgress = current.alternate;
+      null === workInProgress
+        ? ((workInProgress = createFiber(
+            current.tag,
+            pendingProps,
+            current.key,
+            current.mode
+          )),
+          (workInProgress.elementType = current.elementType),
+          (workInProgress.type = current.type),
+          (workInProgress.stateNode = current.stateNode),
+          (workInProgress._debugOwner = current._debugOwner),
+          (workInProgress._debugStack = current._debugStack),
+          (workInProgress._debugTask = current._debugTask),
+          (workInProgress._debugHookTypes = current._debugHookTypes),
+          (workInProgress.alternate = current),
+          (current.alternate = workInProgress))
+        : ((workInProgress.pendingProps = pendingProps),
+          (workInProgress.type = current.type),
+          (workInProgress.flags = 0),
+          (workInProgress.subtreeFlags = 0),
+          (workInProgress.deletions = null),
+          (workInProgress.actualDuration = -0),
+          (workInProgress.actualStartTime = -1.1));
+      workInProgress.flags = current.flags & 65011712;
+      workInProgress.childLanes = current.childLanes;
+      workInProgress.lanes = current.lanes;
+      workInProgress.child = current.child;
+      workInProgress.memoizedProps = current.memoizedProps;
+      workInProgress.memoizedState = current.memoizedState;
+      workInProgress.updateQueue = current.updateQueue;
+      pendingProps = current.dependencies;
+      workInProgress.dependencies =
+        null === pendingProps
+          ? null
+          : {
+              lanes: pendingProps.lanes,
+              firstContext: pendingProps.firstContext,
+              _debugThenableState: pendingProps._debugThenableState
+            };
+      workInProgress.sibling = current.sibling;
+      workInProgress.index = current.index;
+      workInProgress.ref = current.ref;
+      workInProgress.refCleanup = current.refCleanup;
+      workInProgress.selfBaseDuration = current.selfBaseDuration;
+      workInProgress.treeBaseDuration = current.treeBaseDuration;
+      workInProgress._debugInfo = current._debugInfo;
+      workInProgress._debugNeedsRemount = current._debugNeedsRemount;
+      switch (workInProgress.tag) {
+        case 0:
+        case 15:
+          workInProgress.type = resolveFunctionForHotReloading(current.type);
+          break;
+        case 1:
+          workInProgress.type = resolveFunctionForHotReloading(current.type);
+          break;
+        case 11:
+          workInProgress.type = resolveForwardRefForHotReloading(current.type);
+      }
+      return workInProgress;
+    }
+    function resetWorkInProgress(workInProgress, renderLanes) {
+      workInProgress.flags &= 65011714;
+      var current = workInProgress.alternate;
+      null === current
+        ? ((workInProgress.childLanes = 0),
+          (workInProgress.lanes = renderLanes),
+          (workInProgress.child = null),
+          (workInProgress.subtreeFlags = 0),
+          (workInProgress.memoizedProps = null),
+          (workInProgress.memoizedState = null),
+          (workInProgress.updateQueue = null),
+          (workInProgress.dependencies = null),
+          (workInProgress.stateNode = null),
+          (workInProgress.selfBaseDuration = 0),
+          (workInProgress.treeBaseDuration = 0))
+        : ((workInProgress.childLanes = current.childLanes),
+          (workInProgress.lanes = current.lanes),
+          (workInProgress.child = current.child),
+          (workInProgress.subtreeFlags = 0),
+          (workInProgress.deletions = null),
+          (workInProgress.memoizedProps = current.memoizedProps),
+          (workInProgress.memoizedState = current.memoizedState),
+          (workInProgress.updateQueue = current.updateQueue),
+          (workInProgress.type = current.type),
+          (renderLanes = current.dependencies),
+          (workInProgress.dependencies =
+            null === renderLanes
+              ? null
+              : {
+                  lanes: renderLanes.lanes,
+                  firstContext: renderLanes.firstContext,
+                  _debugThenableState: renderLanes._debugThenableState
+                }),
+          (workInProgress.selfBaseDuration = current.selfBaseDuration),
+          (workInProgress.treeBaseDuration = current.treeBaseDuration));
+      return workInProgress;
+    }
+    function createFiberFromTypeAndProps(
+      type,
+      key,
+      pendingProps,
+      owner,
+      mode,
+      lanes
+    ) {
+      var fiberTag = 0,
+        resolvedType = type;
+      if ("function" === typeof type)
+        shouldConstruct(type) && (fiberTag = 1),
+          (resolvedType = resolveFunctionForHotReloading(resolvedType));
+      else if ("string" === typeof type)
+        (fiberTag = getHostContext()),
+          (fiberTag = isHostHoistableType(type, pendingProps, fiberTag)
+            ? 26
+            : "html" === type || "head" === type || "body" === type
+              ? 27
+              : 5);
+      else
+        a: switch (type) {
+          case REACT_ACTIVITY_TYPE:
+            return (
+              (key = createFiber(31, pendingProps, key, mode)),
+              (key.elementType = REACT_ACTIVITY_TYPE),
+              (key.lanes = lanes),
+              key
+            );
+          case REACT_FRAGMENT_TYPE:
+            return createFiberFromFragment(
+              pendingProps.children,
+              mode,
+              lanes,
+              key
+            );
+          case REACT_STRICT_MODE_TYPE:
+            fiberTag = 8;
+            mode |= StrictLegacyMode;
+            mode |= StrictEffectsMode;
+            break;
+          case REACT_PROFILER_TYPE:
+            return (
+              (type = pendingProps),
+              (owner = mode),
+              "string" !== typeof type.id &&
+                console.error(
+                  'Profiler must specify an "id" of type `string` as a prop. Received the type `%s` instead.',
+                  typeof type.id
+                ),
+              (key = createFiber(12, type, key, owner | ProfileMode)),
+              (key.elementType = REACT_PROFILER_TYPE),
+              (key.lanes = lanes),
+              (key.stateNode = { effectDuration: 0, passiveEffectDuration: 0 }),
+              key
+            );
+          case REACT_SUSPENSE_TYPE:
+            return (
+              (key = createFiber(13, pendingProps, key, mode)),
+              (key.elementType = REACT_SUSPENSE_TYPE),
+              (key.lanes = lanes),
+              key
+            );
+          case REACT_SUSPENSE_LIST_TYPE:
+            return (
+              (key = createFiber(19, pendingProps, key, mode)),
+              (key.elementType = REACT_SUSPENSE_LIST_TYPE),
+              (key.lanes = lanes),
+              key
+            );
+          default:
+            if ("object" === typeof type && null !== type)
+              switch (type.$$typeof) {
+                case REACT_PROVIDER_TYPE:
+                case REACT_CONTEXT_TYPE:
+                  fiberTag = 10;
+                  break a;
+                case REACT_CONSUMER_TYPE:
+                  fiberTag = 9;
+                  break a;
+                case REACT_FORWARD_REF_TYPE:
+                  fiberTag = 11;
+                  resolvedType = resolveForwardRefForHotReloading(resolvedType);
+                  break a;
+                case REACT_MEMO_TYPE:
+                  fiberTag = 14;
+                  break a;
+                case REACT_LAZY_TYPE:
+                  fiberTag = 16;
+                  resolvedType = null;
+                  break a;
+              }
+            resolvedType = "";
+            if (
+              void 0 === type ||
+              ("object" === typeof type &&
+                null !== type &&
+                0 === Object.keys(type).length)
+            )
+              resolvedType +=
+                " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
+            null === type
+              ? (pendingProps = "null")
+              : isArrayImpl(type)
+                ? (pendingProps = "array")
+                : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE
+                  ? ((pendingProps =
+                      "<" +
+                      (getComponentNameFromType(type.type) || "Unknown") +
+                      " />"),
+                    (resolvedType =
+                      " Did you accidentally export a JSX literal instead of a component?"))
+                  : (pendingProps = typeof type);
+            (fiberTag = owner ? getComponentNameFromOwner(owner) : null) &&
+              (resolvedType +=
+                "\n\nCheck the render method of `" + fiberTag + "`.");
+            fiberTag = 29;
+            pendingProps = Error(
+              "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+                (pendingProps + "." + resolvedType)
+            );
+            resolvedType = null;
+        }
+      key = createFiber(fiberTag, pendingProps, key, mode);
+      key.elementType = type;
+      key.type = resolvedType;
+      key.lanes = lanes;
+      key._debugOwner = owner;
+      return key;
+    }
+    function createFiberFromElement(element, mode, lanes) {
+      mode = createFiberFromTypeAndProps(
+        element.type,
+        element.key,
+        element.props,
+        element._owner,
+        mode,
+        lanes
+      );
+      mode._debugOwner = element._owner;
+      mode._debugStack = element._debugStack;
+      mode._debugTask = element._debugTask;
+      return mode;
+    }
+    function createFiberFromFragment(elements, mode, lanes, key) {
+      elements = createFiber(7, elements, key, mode);
+      elements.lanes = lanes;
+      return elements;
+    }
+    function createFiberFromText(content, mode, lanes) {
+      content = createFiber(6, content, null, mode);
+      content.lanes = lanes;
+      return content;
+    }
+    function createFiberFromPortal(portal, mode, lanes) {
+      mode = createFiber(
+        4,
+        null !== portal.children ? portal.children : [],
+        portal.key,
+        mode
+      );
+      mode.lanes = lanes;
+      mode.stateNode = {
+        containerInfo: portal.containerInfo,
+        pendingChildren: null,
+        implementation: portal.implementation
+      };
+      return mode;
+    }
+    function pushTreeFork(workInProgress, totalChildren) {
+      warnIfNotHydrating();
+      forkStack[forkStackIndex++] = treeForkCount;
+      forkStack[forkStackIndex++] = treeForkProvider;
+      treeForkProvider = workInProgress;
+      treeForkCount = totalChildren;
+    }
+    function pushTreeId(workInProgress, totalChildren, index) {
+      warnIfNotHydrating();
+      idStack[idStackIndex++] = treeContextId;
+      idStack[idStackIndex++] = treeContextOverflow;
+      idStack[idStackIndex++] = treeContextProvider;
+      treeContextProvider = workInProgress;
+      var baseIdWithLeadingBit = treeContextId;
+      workInProgress = treeContextOverflow;
+      var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+      baseIdWithLeadingBit &= ~(1 << baseLength);
+      index += 1;
+      var length = 32 - clz32(totalChildren) + baseLength;
+      if (30 < length) {
+        var numberOfOverflowBits = baseLength - (baseLength % 5);
+        length = (
+          baseIdWithLeadingBit &
+          ((1 << numberOfOverflowBits) - 1)
+        ).toString(32);
+        baseIdWithLeadingBit >>= numberOfOverflowBits;
+        baseLength -= numberOfOverflowBits;
+        treeContextId =
+          (1 << (32 - clz32(totalChildren) + baseLength)) |
+          (index << baseLength) |
+          baseIdWithLeadingBit;
+        treeContextOverflow = length + workInProgress;
+      } else
+        (treeContextId =
+          (1 << length) | (index << baseLength) | baseIdWithLeadingBit),
+          (treeContextOverflow = workInProgress);
+    }
+    function pushMaterializedTreeId(workInProgress) {
+      warnIfNotHydrating();
+      null !== workInProgress.return &&
+        (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));
+    }
+    function popTreeContext(workInProgress) {
+      for (; workInProgress === treeForkProvider; )
+        (treeForkProvider = forkStack[--forkStackIndex]),
+          (forkStack[forkStackIndex] = null),
+          (treeForkCount = forkStack[--forkStackIndex]),
+          (forkStack[forkStackIndex] = null);
+      for (; workInProgress === treeContextProvider; )
+        (treeContextProvider = idStack[--idStackIndex]),
+          (idStack[idStackIndex] = null),
+          (treeContextOverflow = idStack[--idStackIndex]),
+          (idStack[idStackIndex] = null),
+          (treeContextId = idStack[--idStackIndex]),
+          (idStack[idStackIndex] = null);
+    }
+    function warnIfNotHydrating() {
+      isHydrating ||
+        console.error(
+          "Expected to be hydrating. This is a bug in React. Please file an issue."
+        );
+    }
+    function buildHydrationDiffNode(fiber, distanceFromLeaf) {
+      if (null === fiber.return) {
+        if (null === hydrationDiffRootDEV)
+          hydrationDiffRootDEV = {
+            fiber: fiber,
+            children: [],
+            serverProps: void 0,
+            serverTail: [],
+            distanceFromLeaf: distanceFromLeaf
+          };
+        else {
+          if (hydrationDiffRootDEV.fiber !== fiber)
+            throw Error(
+              "Saw multiple hydration diff roots in a pass. This is a bug in React."
+            );
+          hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf &&
+            (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf);
+        }
+        return hydrationDiffRootDEV;
+      }
+      var siblings = buildHydrationDiffNode(
+        fiber.return,
+        distanceFromLeaf + 1
+      ).children;
+      if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber)
+        return (
+          (siblings = siblings[siblings.length - 1]),
+          siblings.distanceFromLeaf > distanceFromLeaf &&
+            (siblings.distanceFromLeaf = distanceFromLeaf),
+          siblings
+        );
+      distanceFromLeaf = {
+        fiber: fiber,
+        children: [],
+        serverProps: void 0,
+        serverTail: [],
+        distanceFromLeaf: distanceFromLeaf
+      };
+      siblings.push(distanceFromLeaf);
+      return distanceFromLeaf;
+    }
+    function warnNonHydratedInstance(fiber, rejectedCandidate) {
+      didSuspendOrErrorDEV ||
+        ((fiber = buildHydrationDiffNode(fiber, 0)),
+        (fiber.serverProps = null),
+        null !== rejectedCandidate &&
+          ((rejectedCandidate =
+            describeHydratableInstanceForDevWarnings(rejectedCandidate)),
+          fiber.serverTail.push(rejectedCandidate)));
+    }
+    function throwOnHydrationMismatch(fiber) {
+      var diff = "",
+        diffRoot = hydrationDiffRootDEV;
+      null !== diffRoot &&
+        ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot)));
+      queueHydrationError(
+        createCapturedValueAtFiber(
+          Error(
+            "Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" +
+              diff
+          ),
+          fiber
+        )
+      );
+      throw HydrationMismatchException;
+    }
+    function prepareToHydrateHostInstance(fiber) {
+      var didHydrate = fiber.stateNode;
+      var type = fiber.type,
+        props = fiber.memoizedProps;
+      didHydrate[internalInstanceKey] = fiber;
+      didHydrate[internalPropsKey] = props;
+      validatePropertiesInDevelopment(type, props);
+      switch (type) {
+        case "dialog":
+          listenToNonDelegatedEvent("cancel", didHydrate);
+          listenToNonDelegatedEvent("close", didHydrate);
+          break;
+        case "iframe":
+        case "object":
+        case "embed":
+          listenToNonDelegatedEvent("load", didHydrate);
+          break;
+        case "video":
+        case "audio":
+          for (type = 0; type < mediaEventTypes.length; type++)
+            listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate);
+          break;
+        case "source":
+          listenToNonDelegatedEvent("error", didHydrate);
+          break;
+        case "img":
+        case "image":
+        case "link":
+          listenToNonDelegatedEvent("error", didHydrate);
+          listenToNonDelegatedEvent("load", didHydrate);
+          break;
+        case "details":
+          listenToNonDelegatedEvent("toggle", didHydrate);
+          break;
+        case "input":
+          checkControlledValueProps("input", props);
+          listenToNonDelegatedEvent("invalid", didHydrate);
+          validateInputProps(didHydrate, props);
+          initInput(
+            didHydrate,
+            props.value,
+            props.defaultValue,
+            props.checked,
+            props.defaultChecked,
+            props.type,
+            props.name,
+            !0
+          );
+          track(didHydrate);
+          break;
+        case "option":
+          validateOptionProps(didHydrate, props);
+          break;
+        case "select":
+          checkControlledValueProps("select", props);
+          listenToNonDelegatedEvent("invalid", didHydrate);
+          validateSelectProps(didHydrate, props);
+          break;
+        case "textarea":
+          checkControlledValueProps("textarea", props),
+            listenToNonDelegatedEvent("invalid", didHydrate),
+            validateTextareaProps(didHydrate, props),
+            initTextarea(
+              didHydrate,
+              props.value,
+              props.defaultValue,
+              props.children
+            ),
+            track(didHydrate);
+      }
+      type = props.children;
+      ("string" !== typeof type &&
+        "number" !== typeof type &&
+        "bigint" !== typeof type) ||
+      didHydrate.textContent === "" + type ||
+      !0 === props.suppressHydrationWarning ||
+      checkForUnmatchedText(didHydrate.textContent, type)
+        ? (null != props.popover &&
+            (listenToNonDelegatedEvent("beforetoggle", didHydrate),
+            listenToNonDelegatedEvent("toggle", didHydrate)),
+          null != props.onScroll &&
+            listenToNonDelegatedEvent("scroll", didHydrate),
+          null != props.onScrollEnd &&
+            listenToNonDelegatedEvent("scrollend", didHydrate),
+          null != props.onClick && (didHydrate.onclick = noop$2),
+          (didHydrate = !0))
+        : (didHydrate = !1);
+      didHydrate || throwOnHydrationMismatch(fiber);
+    }
+    function popToNextHostParent(fiber) {
+      for (hydrationParentFiber = fiber.return; hydrationParentFiber; )
+        switch (hydrationParentFiber.tag) {
+          case 5:
+          case 13:
+            rootOrSingletonContext = !1;
+            return;
+          case 27:
+          case 3:
+            rootOrSingletonContext = !0;
+            return;
+          default:
+            hydrationParentFiber = hydrationParentFiber.return;
+        }
+    }
+    function popHydrationState(fiber) {
+      if (fiber !== hydrationParentFiber) return !1;
+      if (!isHydrating)
+        return popToNextHostParent(fiber), (isHydrating = !0), !1;
+      var tag = fiber.tag,
+        JSCompiler_temp;
+      if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {
+        if ((JSCompiler_temp = 5 === tag))
+          (JSCompiler_temp = fiber.type),
+            (JSCompiler_temp =
+              !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) ||
+              shouldSetTextContent(fiber.type, fiber.memoizedProps));
+        JSCompiler_temp = !JSCompiler_temp;
+      }
+      if (JSCompiler_temp && nextHydratableInstance) {
+        for (JSCompiler_temp = nextHydratableInstance; JSCompiler_temp; ) {
+          var diffNode = buildHydrationDiffNode(fiber, 0),
+            description =
+              describeHydratableInstanceForDevWarnings(JSCompiler_temp);
+          diffNode.serverTail.push(description);
+          JSCompiler_temp =
+            "Suspense" === description.type
+              ? getNextHydratableInstanceAfterSuspenseInstance(JSCompiler_temp)
+              : getNextHydratable(JSCompiler_temp.nextSibling);
+        }
+        throwOnHydrationMismatch(fiber);
+      }
+      popToNextHostParent(fiber);
+      if (13 === tag) {
+        fiber = fiber.memoizedState;
+        fiber = null !== fiber ? fiber.dehydrated : null;
+        if (!fiber)
+          throw Error(
+            "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue."
+          );
+        nextHydratableInstance =
+          getNextHydratableInstanceAfterSuspenseInstance(fiber);
+      } else
+        27 === tag
+          ? ((tag = nextHydratableInstance),
+            isSingletonScope(fiber.type)
+              ? ((fiber = previousHydratableOnEnteringScopedSingleton),
+                (previousHydratableOnEnteringScopedSingleton = null),
+                (nextHydratableInstance = fiber))
+              : (nextHydratableInstance = tag))
+          : (nextHydratableInstance = hydrationParentFiber
+              ? getNextHydratable(fiber.stateNode.nextSibling)
+              : null);
+      return !0;
+    }
+    function resetHydrationState() {
+      nextHydratableInstance = hydrationParentFiber = null;
+      didSuspendOrErrorDEV = isHydrating = !1;
+    }
+    function upgradeHydrationErrorsToRecoverable() {
+      var queuedErrors = hydrationErrors;
+      null !== queuedErrors &&
+        (null === workInProgressRootRecoverableErrors
+          ? (workInProgressRootRecoverableErrors = queuedErrors)
+          : workInProgressRootRecoverableErrors.push.apply(
+              workInProgressRootRecoverableErrors,
+              queuedErrors
+            ),
+        (hydrationErrors = null));
+      return queuedErrors;
+    }
+    function queueHydrationError(error) {
+      null === hydrationErrors
+        ? (hydrationErrors = [error])
+        : hydrationErrors.push(error);
+    }
+    function emitPendingHydrationWarnings() {
+      var diffRoot = hydrationDiffRootDEV;
+      if (null !== diffRoot) {
+        hydrationDiffRootDEV = null;
+        for (var diff = describeDiff(diffRoot); 0 < diffRoot.children.length; )
+          diffRoot = diffRoot.children[0];
+        runWithFiberInDEV(diffRoot.fiber, function () {
+          console.error(
+            "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s",
+            "https://react.dev/link/hydration-mismatch",
+            diff
+          );
+        });
+      }
+    }
+    function resetContextDependencies() {
+      lastContextDependency = currentlyRenderingFiber$1 = null;
+      isDisallowedContextReadInDEV = !1;
+    }
+    function pushProvider(providerFiber, context, nextValue) {
+      push(valueCursor, context._currentValue, providerFiber);
+      context._currentValue = nextValue;
+      push(rendererCursorDEV, context._currentRenderer, providerFiber);
+      void 0 !== context._currentRenderer &&
+        null !== context._currentRenderer &&
+        context._currentRenderer !== rendererSigil &&
+        console.error(
+          "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+        );
+      context._currentRenderer = rendererSigil;
+    }
+    function popProvider(context, providerFiber) {
+      context._currentValue = valueCursor.current;
+      var currentRenderer = rendererCursorDEV.current;
+      pop(rendererCursorDEV, providerFiber);
+      context._currentRenderer = currentRenderer;
+      pop(valueCursor, providerFiber);
+    }
+    function scheduleContextWorkOnParentPath(
+      parent,
+      renderLanes,
+      propagationRoot
+    ) {
+      for (; null !== parent; ) {
+        var alternate = parent.alternate;
+        (parent.childLanes & renderLanes) !== renderLanes
+          ? ((parent.childLanes |= renderLanes),
+            null !== alternate && (alternate.childLanes |= renderLanes))
+          : null !== alternate &&
+            (alternate.childLanes & renderLanes) !== renderLanes &&
+            (alternate.childLanes |= renderLanes);
+        if (parent === propagationRoot) break;
+        parent = parent.return;
+      }
+      parent !== propagationRoot &&
+        console.error(
+          "Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue."
+        );
+    }
+    function propagateContextChanges(
+      workInProgress,
+      contexts,
+      renderLanes,
+      forcePropagateEntireTree
+    ) {
+      var fiber = workInProgress.child;
+      null !== fiber && (fiber.return = workInProgress);
+      for (; null !== fiber; ) {
+        var list = fiber.dependencies;
+        if (null !== list) {
+          var nextFiber = fiber.child;
+          list = list.firstContext;
+          a: for (; null !== list; ) {
+            var dependency = list;
+            list = fiber;
+            for (var i = 0; i < contexts.length; i++)
+              if (dependency.context === contexts[i]) {
+                list.lanes |= renderLanes;
+                dependency = list.alternate;
+                null !== dependency && (dependency.lanes |= renderLanes);
+                scheduleContextWorkOnParentPath(
+                  list.return,
+                  renderLanes,
+                  workInProgress
+                );
+                forcePropagateEntireTree || (nextFiber = null);
+                break a;
+              }
+            list = dependency.next;
+          }
+        } else if (18 === fiber.tag) {
+          nextFiber = fiber.return;
+          if (null === nextFiber)
+            throw Error(
+              "We just came from a parent so we must have had a parent. This is a bug in React."
+            );
+          nextFiber.lanes |= renderLanes;
+          list = nextFiber.alternate;
+          null !== list && (list.lanes |= renderLanes);
+          scheduleContextWorkOnParentPath(
+            nextFiber,
+            renderLanes,
+            workInProgress
+          );
+          nextFiber = null;
+        } else nextFiber = fiber.child;
+        if (null !== nextFiber) nextFiber.return = fiber;
+        else
+          for (nextFiber = fiber; null !== nextFiber; ) {
+            if (nextFiber === workInProgress) {
+              nextFiber = null;
+              break;
+            }
+            fiber = nextFiber.sibling;
+            if (null !== fiber) {
+              fiber.return = nextFiber.return;
+              nextFiber = fiber;
+              break;
+            }
+            nextFiber = nextFiber.return;
+          }
+        fiber = nextFiber;
+      }
+    }
+    function propagateParentContextChanges(
+      current,
+      workInProgress,
+      renderLanes,
+      forcePropagateEntireTree
+    ) {
+      current = null;
+      for (
+        var parent = workInProgress, isInsidePropagationBailout = !1;
+        null !== parent;
+
+      ) {
+        if (!isInsidePropagationBailout)
+          if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;
+          else if (0 !== (parent.flags & 262144)) break;
+        if (10 === parent.tag) {
+          var currentParent = parent.alternate;
+          if (null === currentParent)
+            throw Error("Should have a current fiber. This is a bug in React.");
+          currentParent = currentParent.memoizedProps;
+          if (null !== currentParent) {
+            var context = parent.type;
+            objectIs(parent.pendingProps.value, currentParent.value) ||
+              (null !== current
+                ? current.push(context)
+                : (current = [context]));
+          }
+        } else if (parent === hostTransitionProviderCursor.current) {
+          currentParent = parent.alternate;
+          if (null === currentParent)
+            throw Error("Should have a current fiber. This is a bug in React.");
+          currentParent.memoizedState.memoizedState !==
+            parent.memoizedState.memoizedState &&
+            (null !== current
+              ? current.push(HostTransitionContext)
+              : (current = [HostTransitionContext]));
+        }
+        parent = parent.return;
+      }
+      null !== current &&
+        propagateContextChanges(
+          workInProgress,
+          current,
+          renderLanes,
+          forcePropagateEntireTree
+        );
+      workInProgress.flags |= 262144;
+    }
+    function checkIfContextChanged(currentDependencies) {
+      for (
+        currentDependencies = currentDependencies.firstContext;
+        null !== currentDependencies;
+
+      ) {
+        if (
+          !objectIs(
+            currentDependencies.context._currentValue,
+            currentDependencies.memoizedValue
+          )
+        )
+          return !0;
+        currentDependencies = currentDependencies.next;
+      }
+      return !1;
+    }
+    function prepareToReadContext(workInProgress) {
+      currentlyRenderingFiber$1 = workInProgress;
+      lastContextDependency = null;
+      workInProgress = workInProgress.dependencies;
+      null !== workInProgress && (workInProgress.firstContext = null);
+    }
+    function readContext(context) {
+      isDisallowedContextReadInDEV &&
+        console.error(
+          "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+        );
+      return readContextForConsumer(currentlyRenderingFiber$1, context);
+    }
+    function readContextDuringReconciliation(consumer, context) {
+      null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);
+      return readContextForConsumer(consumer, context);
+    }
+    function readContextForConsumer(consumer, context) {
+      var value = context._currentValue;
+      context = { context: context, memoizedValue: value, next: null };
+      if (null === lastContextDependency) {
+        if (null === consumer)
+          throw Error(
+            "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+          );
+        lastContextDependency = context;
+        consumer.dependencies = {
+          lanes: 0,
+          firstContext: context,
+          _debugThenableState: null
+        };
+        consumer.flags |= 524288;
+      } else lastContextDependency = lastContextDependency.next = context;
+      return value;
+    }
+    function createCache() {
+      return {
+        controller: new AbortControllerLocal(),
+        data: new Map(),
+        refCount: 0
+      };
+    }
+    function retainCache(cache) {
+      cache.controller.signal.aborted &&
+        console.warn(
+          "A cache instance was retained after it was already freed. This likely indicates a bug in React."
+        );
+      cache.refCount++;
+    }
+    function releaseCache(cache) {
+      cache.refCount--;
+      0 > cache.refCount &&
+        console.warn(
+          "A cache instance was released after it was already freed. This likely indicates a bug in React."
+        );
+      0 === cache.refCount &&
+        scheduleCallback$2(NormalPriority, function () {
+          cache.controller.abort();
+        });
+    }
+    function pushNestedEffectDurations() {
+      var prevEffectDuration = profilerEffectDuration;
+      profilerEffectDuration = 0;
+      return prevEffectDuration;
+    }
+    function popNestedEffectDurations(prevEffectDuration) {
+      var elapsedTime = profilerEffectDuration;
+      profilerEffectDuration = prevEffectDuration;
+      return elapsedTime;
+    }
+    function bubbleNestedEffectDurations(prevEffectDuration) {
+      var elapsedTime = profilerEffectDuration;
+      profilerEffectDuration += prevEffectDuration;
+      return elapsedTime;
+    }
+    function startProfilerTimer(fiber) {
+      profilerStartTime = now();
+      0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime);
+    }
+    function stopProfilerTimerIfRunningAndRecordDuration(fiber) {
+      if (0 <= profilerStartTime) {
+        var elapsedTime = now() - profilerStartTime;
+        fiber.actualDuration += elapsedTime;
+        fiber.selfBaseDuration = elapsedTime;
+        profilerStartTime = -1;
+      }
+    }
+    function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) {
+      if (0 <= profilerStartTime) {
+        var elapsedTime = now() - profilerStartTime;
+        fiber.actualDuration += elapsedTime;
+        profilerStartTime = -1;
+      }
+    }
+    function recordEffectDuration() {
+      if (0 <= profilerStartTime) {
+        var elapsedTime = now() - profilerStartTime;
+        profilerStartTime = -1;
+        profilerEffectDuration += elapsedTime;
+      }
+    }
+    function startEffectTimer() {
+      profilerStartTime = now();
+    }
+    function transferActualDuration(fiber) {
+      for (var child = fiber.child; child; )
+        (fiber.actualDuration += child.actualDuration), (child = child.sibling);
+    }
+    function entangleAsyncAction(transition, thenable) {
+      if (null === currentEntangledListeners) {
+        var entangledListeners = (currentEntangledListeners = []);
+        currentEntangledPendingCount = 0;
+        currentEntangledLane = requestTransitionLane();
+        currentEntangledActionThenable = {
+          status: "pending",
+          value: void 0,
+          then: function (resolve) {
+            entangledListeners.push(resolve);
+          }
+        };
+      }
+      currentEntangledPendingCount++;
+      thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);
+      return thenable;
+    }
+    function pingEngtangledActionScope() {
+      if (
+        0 === --currentEntangledPendingCount &&
+        null !== currentEntangledListeners
+      ) {
+        null !== currentEntangledActionThenable &&
+          (currentEntangledActionThenable.status = "fulfilled");
+        var listeners = currentEntangledListeners;
+        currentEntangledListeners = null;
+        currentEntangledLane = 0;
+        currentEntangledActionThenable = null;
+        for (var i = 0; i < listeners.length; i++) (0, listeners[i])();
+      }
+    }
+    function chainThenableValue(thenable, result) {
+      var listeners = [],
+        thenableWithOverride = {
+          status: "pending",
+          value: null,
+          reason: null,
+          then: function (resolve) {
+            listeners.push(resolve);
+          }
+        };
+      thenable.then(
+        function () {
+          thenableWithOverride.status = "fulfilled";
+          thenableWithOverride.value = result;
+          for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);
+        },
+        function (error) {
+          thenableWithOverride.status = "rejected";
+          thenableWithOverride.reason = error;
+          for (error = 0; error < listeners.length; error++)
+            (0, listeners[error])(void 0);
+        }
+      );
+      return thenableWithOverride;
+    }
+    function peekCacheFromPool() {
+      var cacheResumedFromPreviousRender = resumedCache.current;
+      return null !== cacheResumedFromPreviousRender
+        ? cacheResumedFromPreviousRender
+        : workInProgressRoot.pooledCache;
+    }
+    function pushTransition(offscreenWorkInProgress, prevCachePool) {
+      null === prevCachePool
+        ? push(resumedCache, resumedCache.current, offscreenWorkInProgress)
+        : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress);
+    }
+    function getSuspendedCache() {
+      var cacheFromPool = peekCacheFromPool();
+      return null === cacheFromPool
+        ? null
+        : { parent: CacheContext._currentValue, pool: cacheFromPool };
+    }
+    function createThenableState() {
+      return { didWarnAboutUncachedPromise: !1, thenables: [] };
+    }
+    function isThenableResolved(thenable) {
+      thenable = thenable.status;
+      return "fulfilled" === thenable || "rejected" === thenable;
+    }
+    function noop$4() {}
+    function trackUsedThenable(thenableState, thenable, index) {
+      null !== ReactSharedInternals.actQueue &&
+        (ReactSharedInternals.didUsePromise = !0);
+      var trackedThenables = thenableState.thenables;
+      index = trackedThenables[index];
+      void 0 === index
+        ? trackedThenables.push(thenable)
+        : index !== thenable &&
+          (thenableState.didWarnAboutUncachedPromise ||
+            ((thenableState.didWarnAboutUncachedPromise = !0),
+            console.error(
+              "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework."
+            )),
+          thenable.then(noop$4, noop$4),
+          (thenable = index));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw (
+            ((thenableState = thenable.reason),
+            checkIfUseWrappedInAsyncCatch(thenableState),
+            thenableState)
+          );
+        default:
+          if ("string" === typeof thenable.status)
+            thenable.then(noop$4, noop$4);
+          else {
+            thenableState = workInProgressRoot;
+            if (
+              null !== thenableState &&
+              100 < thenableState.shellSuspendCounter
+            )
+              throw Error(
+                "An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server."
+              );
+            thenableState = thenable;
+            thenableState.status = "pending";
+            thenableState.then(
+              function (fulfilledValue) {
+                if ("pending" === thenable.status) {
+                  var fulfilledThenable = thenable;
+                  fulfilledThenable.status = "fulfilled";
+                  fulfilledThenable.value = fulfilledValue;
+                }
+              },
+              function (error) {
+                if ("pending" === thenable.status) {
+                  var rejectedThenable = thenable;
+                  rejectedThenable.status = "rejected";
+                  rejectedThenable.reason = error;
+                }
+              }
+            );
+          }
+          switch (thenable.status) {
+            case "fulfilled":
+              return thenable.value;
+            case "rejected":
+              throw (
+                ((thenableState = thenable.reason),
+                checkIfUseWrappedInAsyncCatch(thenableState),
+                thenableState)
+              );
+          }
+          suspendedThenable = thenable;
+          needsToResetSuspendedThenableDEV = !0;
+          throw SuspenseException;
+      }
+    }
+    function getSuspendedThenable() {
+      if (null === suspendedThenable)
+        throw Error(
+          "Expected a suspended thenable. This is a bug in React. Please file an issue."
+        );
+      var thenable = suspendedThenable;
+      suspendedThenable = null;
+      needsToResetSuspendedThenableDEV = !1;
+      return thenable;
+    }
+    function checkIfUseWrappedInAsyncCatch(rejectedReason) {
+      if (
+        rejectedReason === SuspenseException ||
+        rejectedReason === SuspenseActionException
+      )
+        throw Error(
+          "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server."
+        );
+    }
+    function initializeUpdateQueue(fiber) {
+      fiber.updateQueue = {
+        baseState: fiber.memoizedState,
+        firstBaseUpdate: null,
+        lastBaseUpdate: null,
+        shared: { pending: null, lanes: 0, hiddenCallbacks: null },
+        callbacks: null
+      };
+    }
+    function cloneUpdateQueue(current, workInProgress) {
+      current = current.updateQueue;
+      workInProgress.updateQueue === current &&
+        (workInProgress.updateQueue = {
+          baseState: current.baseState,
+          firstBaseUpdate: current.firstBaseUpdate,
+          lastBaseUpdate: current.lastBaseUpdate,
+          shared: current.shared,
+          callbacks: null
+        });
+    }
+    function createUpdate(lane) {
+      return {
+        lane: lane,
+        tag: UpdateState,
+        payload: null,
+        callback: null,
+        next: null
+      };
+    }
+    function enqueueUpdate(fiber, update, lane) {
+      var updateQueue = fiber.updateQueue;
+      if (null === updateQueue) return null;
+      updateQueue = updateQueue.shared;
+      if (
+        currentlyProcessingQueue === updateQueue &&
+        !didWarnUpdateInsideUpdate
+      ) {
+        var componentName = getComponentNameFromFiber(fiber);
+        console.error(
+          "An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.\n\nPlease update the following component: %s",
+          componentName
+        );
+        didWarnUpdateInsideUpdate = !0;
+      }
+      if ((executionContext & RenderContext) !== NoContext)
+        return (
+          (componentName = updateQueue.pending),
+          null === componentName
+            ? (update.next = update)
+            : ((update.next = componentName.next),
+              (componentName.next = update)),
+          (updateQueue.pending = update),
+          (update = getRootForUpdatedFiber(fiber)),
+          markUpdateLaneFromFiberToRoot(fiber, null, lane),
+          update
+        );
+      enqueueUpdate$1(fiber, updateQueue, update, lane);
+      return getRootForUpdatedFiber(fiber);
+    }
+    function entangleTransitions(root, fiber, lane) {
+      fiber = fiber.updateQueue;
+      if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {
+        var queueLanes = fiber.lanes;
+        queueLanes &= root.pendingLanes;
+        lane |= queueLanes;
+        fiber.lanes = lane;
+        markRootEntangled(root, lane);
+      }
+    }
+    function enqueueCapturedUpdate(workInProgress, capturedUpdate) {
+      var queue = workInProgress.updateQueue,
+        current = workInProgress.alternate;
+      if (
+        null !== current &&
+        ((current = current.updateQueue), queue === current)
+      ) {
+        var newFirst = null,
+          newLast = null;
+        queue = queue.firstBaseUpdate;
+        if (null !== queue) {
+          do {
+            var clone = {
+              lane: queue.lane,
+              tag: queue.tag,
+              payload: queue.payload,
+              callback: null,
+              next: null
+            };
+            null === newLast
+              ? (newFirst = newLast = clone)
+              : (newLast = newLast.next = clone);
+            queue = queue.next;
+          } while (null !== queue);
+          null === newLast
+            ? (newFirst = newLast = capturedUpdate)
+            : (newLast = newLast.next = capturedUpdate);
+        } else newFirst = newLast = capturedUpdate;
+        queue = {
+          baseState: current.baseState,
+          firstBaseUpdate: newFirst,
+          lastBaseUpdate: newLast,
+          shared: current.shared,
+          callbacks: current.callbacks
+        };
+        workInProgress.updateQueue = queue;
+        return;
+      }
+      workInProgress = queue.lastBaseUpdate;
+      null === workInProgress
+        ? (queue.firstBaseUpdate = capturedUpdate)
+        : (workInProgress.next = capturedUpdate);
+      queue.lastBaseUpdate = capturedUpdate;
+    }
+    function suspendIfUpdateReadFromEntangledAsyncAction() {
+      if (didReadFromEntangledAsyncAction) {
+        var entangledActionThenable = currentEntangledActionThenable;
+        if (null !== entangledActionThenable) throw entangledActionThenable;
+      }
+    }
+    function processUpdateQueue(
+      workInProgress,
+      props,
+      instance$jscomp$0,
+      renderLanes
+    ) {
+      didReadFromEntangledAsyncAction = !1;
+      var queue = workInProgress.updateQueue;
+      hasForceUpdate = !1;
+      currentlyProcessingQueue = queue.shared;
+      var firstBaseUpdate = queue.firstBaseUpdate,
+        lastBaseUpdate = queue.lastBaseUpdate,
+        pendingQueue = queue.shared.pending;
+      if (null !== pendingQueue) {
+        queue.shared.pending = null;
+        var lastPendingUpdate = pendingQueue,
+          firstPendingUpdate = lastPendingUpdate.next;
+        lastPendingUpdate.next = null;
+        null === lastBaseUpdate
+          ? (firstBaseUpdate = firstPendingUpdate)
+          : (lastBaseUpdate.next = firstPendingUpdate);
+        lastBaseUpdate = lastPendingUpdate;
+        var current = workInProgress.alternate;
+        null !== current &&
+          ((current = current.updateQueue),
+          (pendingQueue = current.lastBaseUpdate),
+          pendingQueue !== lastBaseUpdate &&
+            (null === pendingQueue
+              ? (current.firstBaseUpdate = firstPendingUpdate)
+              : (pendingQueue.next = firstPendingUpdate),
+            (current.lastBaseUpdate = lastPendingUpdate)));
+      }
+      if (null !== firstBaseUpdate) {
+        var newState = queue.baseState;
+        lastBaseUpdate = 0;
+        current = firstPendingUpdate = lastPendingUpdate = null;
+        pendingQueue = firstBaseUpdate;
+        do {
+          var updateLane = pendingQueue.lane & -536870913,
+            isHiddenUpdate = updateLane !== pendingQueue.lane;
+          if (
+            isHiddenUpdate
+              ? (workInProgressRootRenderLanes & updateLane) === updateLane
+              : (renderLanes & updateLane) === updateLane
+          ) {
+            0 !== updateLane &&
+              updateLane === currentEntangledLane &&
+              (didReadFromEntangledAsyncAction = !0);
+            null !== current &&
+              (current = current.next =
+                {
+                  lane: 0,
+                  tag: pendingQueue.tag,
+                  payload: pendingQueue.payload,
+                  callback: null,
+                  next: null
+                });
+            a: {
+              updateLane = workInProgress;
+              var partialState = pendingQueue;
+              var nextProps = props,
+                instance = instance$jscomp$0;
+              switch (partialState.tag) {
+                case ReplaceState:
+                  partialState = partialState.payload;
+                  if ("function" === typeof partialState) {
+                    isDisallowedContextReadInDEV = !0;
+                    var nextState = partialState.call(
+                      instance,
+                      newState,
+                      nextProps
+                    );
+                    if (updateLane.mode & StrictLegacyMode) {
+                      setIsStrictModeForDevtools(!0);
+                      try {
+                        partialState.call(instance, newState, nextProps);
+                      } finally {
+                        setIsStrictModeForDevtools(!1);
+                      }
+                    }
+                    isDisallowedContextReadInDEV = !1;
+                    newState = nextState;
+                    break a;
+                  }
+                  newState = partialState;
+                  break a;
+                case CaptureUpdate:
+                  updateLane.flags = (updateLane.flags & -65537) | 128;
+                case UpdateState:
+                  nextState = partialState.payload;
+                  if ("function" === typeof nextState) {
+                    isDisallowedContextReadInDEV = !0;
+                    partialState = nextState.call(
+                      instance,
+                      newState,
+                      nextProps
+                    );
+                    if (updateLane.mode & StrictLegacyMode) {
+                      setIsStrictModeForDevtools(!0);
+                      try {
+                        nextState.call(instance, newState, nextProps);
+                      } finally {
+                        setIsStrictModeForDevtools(!1);
+                      }
+                    }
+                    isDisallowedContextReadInDEV = !1;
+                  } else partialState = nextState;
+                  if (null === partialState || void 0 === partialState) break a;
+                  newState = assign({}, newState, partialState);
+                  break a;
+                case ForceUpdate:
+                  hasForceUpdate = !0;
+              }
+            }
+            updateLane = pendingQueue.callback;
+            null !== updateLane &&
+              ((workInProgress.flags |= 64),
+              isHiddenUpdate && (workInProgress.flags |= 8192),
+              (isHiddenUpdate = queue.callbacks),
+              null === isHiddenUpdate
+                ? (queue.callbacks = [updateLane])
+                : isHiddenUpdate.push(updateLane));
+          } else
+            (isHiddenUpdate = {
+              lane: updateLane,
+              tag: pendingQueue.tag,
+              payload: pendingQueue.payload,
+              callback: pendingQueue.callback,
+              next: null
+            }),
+              null === current
+                ? ((firstPendingUpdate = current = isHiddenUpdate),
+                  (lastPendingUpdate = newState))
+                : (current = current.next = isHiddenUpdate),
+              (lastBaseUpdate |= updateLane);
+          pendingQueue = pendingQueue.next;
+          if (null === pendingQueue)
+            if (((pendingQueue = queue.shared.pending), null === pendingQueue))
+              break;
+            else
+              (isHiddenUpdate = pendingQueue),
+                (pendingQueue = isHiddenUpdate.next),
+                (isHiddenUpdate.next = null),
+                (queue.lastBaseUpdate = isHiddenUpdate),
+                (queue.shared.pending = null);
+        } while (1);
+        null === current && (lastPendingUpdate = newState);
+        queue.baseState = lastPendingUpdate;
+        queue.firstBaseUpdate = firstPendingUpdate;
+        queue.lastBaseUpdate = current;
+        null === firstBaseUpdate && (queue.shared.lanes = 0);
+        workInProgressRootSkippedLanes |= lastBaseUpdate;
+        workInProgress.lanes = lastBaseUpdate;
+        workInProgress.memoizedState = newState;
+      }
+      currentlyProcessingQueue = null;
+    }
+    function callCallback(callback, context) {
+      if ("function" !== typeof callback)
+        throw Error(
+          "Invalid argument passed as callback. Expected a function. Instead received: " +
+            callback
+        );
+      callback.call(context);
+    }
+    function commitHiddenCallbacks(updateQueue, context) {
+      var hiddenCallbacks = updateQueue.shared.hiddenCallbacks;
+      if (null !== hiddenCallbacks)
+        for (
+          updateQueue.shared.hiddenCallbacks = null, updateQueue = 0;
+          updateQueue < hiddenCallbacks.length;
+          updateQueue++
+        )
+          callCallback(hiddenCallbacks[updateQueue], context);
+    }
+    function commitCallbacks(updateQueue, context) {
+      var callbacks = updateQueue.callbacks;
+      if (null !== callbacks)
+        for (
+          updateQueue.callbacks = null, updateQueue = 0;
+          updateQueue < callbacks.length;
+          updateQueue++
+        )
+          callCallback(callbacks[updateQueue], context);
+    }
+    function pushHiddenContext(fiber, context) {
+      var prevEntangledRenderLanes = entangledRenderLanes;
+      push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber);
+      push(currentTreeHiddenStackCursor, context, fiber);
+      entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes;
+    }
+    function reuseHiddenContextOnStack(fiber) {
+      push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber);
+      push(
+        currentTreeHiddenStackCursor,
+        currentTreeHiddenStackCursor.current,
+        fiber
+      );
+    }
+    function popHiddenContext(fiber) {
+      entangledRenderLanes = prevEntangledRenderLanesCursor.current;
+      pop(currentTreeHiddenStackCursor, fiber);
+      pop(prevEntangledRenderLanesCursor, fiber);
+    }
+    function mountHookTypesDev() {
+      var hookName = currentHookNameInDev;
+      null === hookTypesDev
+        ? (hookTypesDev = [hookName])
+        : hookTypesDev.push(hookName);
+    }
+    function updateHookTypesDev() {
+      var hookName = currentHookNameInDev;
+      if (
+        null !== hookTypesDev &&
+        (hookTypesUpdateIndexDev++,
+        hookTypesDev[hookTypesUpdateIndexDev] !== hookName)
+      ) {
+        var componentName = getComponentNameFromFiber(currentlyRenderingFiber);
+        if (
+          !didWarnAboutMismatchedHooksForComponent.has(componentName) &&
+          (didWarnAboutMismatchedHooksForComponent.add(componentName),
+          null !== hookTypesDev)
+        ) {
+          for (var table = "", i = 0; i <= hookTypesUpdateIndexDev; i++) {
+            var oldHookName = hookTypesDev[i],
+              newHookName =
+                i === hookTypesUpdateIndexDev ? hookName : oldHookName;
+            for (
+              oldHookName = i + 1 + ". " + oldHookName;
+              30 > oldHookName.length;
+
+            )
+              oldHookName += " ";
+            oldHookName += newHookName + "\n";
+            table += oldHookName;
+          }
+          console.error(
+            "React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks\n\n   Previous render            Next render\n   ------------------------------------------------------\n%s   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
+            componentName,
+            table
+          );
+        }
+      }
+    }
+    function checkDepsAreArrayDev(deps) {
+      void 0 === deps ||
+        null === deps ||
+        isArrayImpl(deps) ||
+        console.error(
+          "%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.",
+          currentHookNameInDev,
+          typeof deps
+        );
+    }
+    function warnOnUseFormStateInDev() {
+      var componentName = getComponentNameFromFiber(currentlyRenderingFiber);
+      didWarnAboutUseFormState.has(componentName) ||
+        (didWarnAboutUseFormState.add(componentName),
+        console.error(
+          "ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.",
+          componentName
+        ));
+    }
+    function throwInvalidHookError() {
+      throw Error(
+        "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+      );
+    }
+    function areHookInputsEqual(nextDeps, prevDeps) {
+      if (ignorePreviousDependencies) return !1;
+      if (null === prevDeps)
+        return (
+          console.error(
+            "%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",
+            currentHookNameInDev
+          ),
+          !1
+        );
+      nextDeps.length !== prevDeps.length &&
+        console.error(
+          "The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s",
+          currentHookNameInDev,
+          "[" + prevDeps.join(", ") + "]",
+          "[" + nextDeps.join(", ") + "]"
+        );
+      for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)
+        if (!objectIs(nextDeps[i], prevDeps[i])) return !1;
+      return !0;
+    }
+    function renderWithHooks(
+      current,
+      workInProgress,
+      Component,
+      props,
+      secondArg,
+      nextRenderLanes
+    ) {
+      renderLanes = nextRenderLanes;
+      currentlyRenderingFiber = workInProgress;
+      hookTypesDev = null !== current ? current._debugHookTypes : null;
+      hookTypesUpdateIndexDev = -1;
+      ignorePreviousDependencies =
+        null !== current && current.type !== workInProgress.type;
+      if (
+        "[object AsyncFunction]" ===
+          Object.prototype.toString.call(Component) ||
+        "[object AsyncGeneratorFunction]" ===
+          Object.prototype.toString.call(Component)
+      )
+        (nextRenderLanes = getComponentNameFromFiber(currentlyRenderingFiber)),
+          didWarnAboutAsyncClientComponent.has(nextRenderLanes) ||
+            (didWarnAboutAsyncClientComponent.add(nextRenderLanes),
+            console.error(
+              "%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.",
+              null === nextRenderLanes
+                ? "An unknown Component"
+                : "<" + nextRenderLanes + ">"
+            ));
+      workInProgress.memoizedState = null;
+      workInProgress.updateQueue = null;
+      workInProgress.lanes = 0;
+      ReactSharedInternals.H =
+        null !== current && null !== current.memoizedState
+          ? HooksDispatcherOnUpdateInDEV
+          : null !== hookTypesDev
+            ? HooksDispatcherOnMountWithHookTypesInDEV
+            : HooksDispatcherOnMountInDEV;
+      shouldDoubleInvokeUserFnsInHooksDEV = nextRenderLanes =
+        (workInProgress.mode & StrictLegacyMode) !== NoMode;
+      var children = callComponentInDEV(Component, props, secondArg);
+      shouldDoubleInvokeUserFnsInHooksDEV = !1;
+      didScheduleRenderPhaseUpdateDuringThisPass &&
+        (children = renderWithHooksAgain(
+          workInProgress,
+          Component,
+          props,
+          secondArg
+        ));
+      if (nextRenderLanes) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          children = renderWithHooksAgain(
+            workInProgress,
+            Component,
+            props,
+            secondArg
+          );
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      finishRenderingHooks(current, workInProgress);
+      return children;
+    }
+    function finishRenderingHooks(current, workInProgress) {
+      workInProgress._debugHookTypes = hookTypesDev;
+      null === workInProgress.dependencies
+        ? null !== thenableState$1 &&
+          (workInProgress.dependencies = {
+            lanes: 0,
+            firstContext: null,
+            _debugThenableState: thenableState$1
+          })
+        : (workInProgress.dependencies._debugThenableState = thenableState$1);
+      ReactSharedInternals.H = ContextOnlyDispatcher;
+      var didRenderTooFewHooks =
+        null !== currentHook && null !== currentHook.next;
+      renderLanes = 0;
+      hookTypesDev =
+        currentHookNameInDev =
+        workInProgressHook =
+        currentHook =
+        currentlyRenderingFiber =
+          null;
+      hookTypesUpdateIndexDev = -1;
+      null !== current &&
+        (current.flags & 65011712) !== (workInProgress.flags & 65011712) &&
+        console.error(
+          "Internal React error: Expected static flag was missing. Please notify the React team."
+        );
+      didScheduleRenderPhaseUpdate = !1;
+      thenableIndexCounter$1 = 0;
+      thenableState$1 = null;
+      if (didRenderTooFewHooks)
+        throw Error(
+          "Rendered fewer hooks than expected. This may be caused by an accidental early return statement."
+        );
+      null === current ||
+        didReceiveUpdate ||
+        ((current = current.dependencies),
+        null !== current &&
+          checkIfContextChanged(current) &&
+          (didReceiveUpdate = !0));
+      needsToResetSuspendedThenableDEV
+        ? ((needsToResetSuspendedThenableDEV = !1), (current = !0))
+        : (current = !1);
+      current &&
+        ((workInProgress =
+          getComponentNameFromFiber(workInProgress) || "Unknown"),
+        didWarnAboutUseWrappedInTryCatch.has(workInProgress) ||
+          didWarnAboutAsyncClientComponent.has(workInProgress) ||
+          (didWarnAboutUseWrappedInTryCatch.add(workInProgress),
+          console.error(
+            "`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary."
+          )));
+    }
+    function renderWithHooksAgain(workInProgress, Component, props, secondArg) {
+      currentlyRenderingFiber = workInProgress;
+      var numberOfReRenders = 0;
+      do {
+        didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);
+        thenableIndexCounter$1 = 0;
+        didScheduleRenderPhaseUpdateDuringThisPass = !1;
+        if (numberOfReRenders >= RE_RENDER_LIMIT)
+          throw Error(
+            "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+          );
+        numberOfReRenders += 1;
+        ignorePreviousDependencies = !1;
+        workInProgressHook = currentHook = null;
+        if (null != workInProgress.updateQueue) {
+          var children = workInProgress.updateQueue;
+          children.lastEffect = null;
+          children.events = null;
+          children.stores = null;
+          null != children.memoCache && (children.memoCache.index = 0);
+        }
+        hookTypesUpdateIndexDev = -1;
+        ReactSharedInternals.H = HooksDispatcherOnRerenderInDEV;
+        children = callComponentInDEV(Component, props, secondArg);
+      } while (didScheduleRenderPhaseUpdateDuringThisPass);
+      return children;
+    }
+    function TransitionAwareHostComponent() {
+      var dispatcher = ReactSharedInternals.H,
+        maybeThenable = dispatcher.useState()[0];
+      maybeThenable =
+        "function" === typeof maybeThenable.then
+          ? useThenable(maybeThenable)
+          : maybeThenable;
+      dispatcher = dispatcher.useState()[0];
+      (null !== currentHook ? currentHook.memoizedState : null) !==
+        dispatcher && (currentlyRenderingFiber.flags |= 1024);
+      return maybeThenable;
+    }
+    function checkDidRenderIdHook() {
+      var didRenderIdHook = 0 !== localIdCounter;
+      localIdCounter = 0;
+      return didRenderIdHook;
+    }
+    function bailoutHooks(current, workInProgress, lanes) {
+      workInProgress.updateQueue = current.updateQueue;
+      workInProgress.flags =
+        (workInProgress.mode & StrictEffectsMode) !== NoMode
+          ? workInProgress.flags & -402655237
+          : workInProgress.flags & -2053;
+      current.lanes &= ~lanes;
+    }
+    function resetHooksOnUnwind(workInProgress) {
+      if (didScheduleRenderPhaseUpdate) {
+        for (
+          workInProgress = workInProgress.memoizedState;
+          null !== workInProgress;
+
+        ) {
+          var queue = workInProgress.queue;
+          null !== queue && (queue.pending = null);
+          workInProgress = workInProgress.next;
+        }
+        didScheduleRenderPhaseUpdate = !1;
+      }
+      renderLanes = 0;
+      hookTypesDev =
+        workInProgressHook =
+        currentHook =
+        currentlyRenderingFiber =
+          null;
+      hookTypesUpdateIndexDev = -1;
+      currentHookNameInDev = null;
+      didScheduleRenderPhaseUpdateDuringThisPass = !1;
+      thenableIndexCounter$1 = localIdCounter = 0;
+      thenableState$1 = null;
+    }
+    function mountWorkInProgressHook() {
+      var hook = {
+        memoizedState: null,
+        baseState: null,
+        baseQueue: null,
+        queue: null,
+        next: null
+      };
+      null === workInProgressHook
+        ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)
+        : (workInProgressHook = workInProgressHook.next = hook);
+      return workInProgressHook;
+    }
+    function updateWorkInProgressHook() {
+      if (null === currentHook) {
+        var nextCurrentHook = currentlyRenderingFiber.alternate;
+        nextCurrentHook =
+          null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;
+      } else nextCurrentHook = currentHook.next;
+      var nextWorkInProgressHook =
+        null === workInProgressHook
+          ? currentlyRenderingFiber.memoizedState
+          : workInProgressHook.next;
+      if (null !== nextWorkInProgressHook)
+        (workInProgressHook = nextWorkInProgressHook),
+          (currentHook = nextCurrentHook);
+      else {
+        if (null === nextCurrentHook) {
+          if (null === currentlyRenderingFiber.alternate)
+            throw Error(
+              "Update hook called on initial render. This is likely a bug in React. Please file an issue."
+            );
+          throw Error("Rendered more hooks than during the previous render.");
+        }
+        currentHook = nextCurrentHook;
+        nextCurrentHook = {
+          memoizedState: currentHook.memoizedState,
+          baseState: currentHook.baseState,
+          baseQueue: currentHook.baseQueue,
+          queue: currentHook.queue,
+          next: null
+        };
+        null === workInProgressHook
+          ? (currentlyRenderingFiber.memoizedState = workInProgressHook =
+              nextCurrentHook)
+          : (workInProgressHook = workInProgressHook.next = nextCurrentHook);
+      }
+      return workInProgressHook;
+    }
+    function createFunctionComponentUpdateQueue() {
+      return { lastEffect: null, events: null, stores: null, memoCache: null };
+    }
+    function useThenable(thenable) {
+      var index = thenableIndexCounter$1;
+      thenableIndexCounter$1 += 1;
+      null === thenableState$1 && (thenableState$1 = createThenableState());
+      thenable = trackUsedThenable(thenableState$1, thenable, index);
+      index = currentlyRenderingFiber;
+      null ===
+        (null === workInProgressHook
+          ? index.memoizedState
+          : workInProgressHook.next) &&
+        ((index = index.alternate),
+        (ReactSharedInternals.H =
+          null !== index && null !== index.memoizedState
+            ? HooksDispatcherOnUpdateInDEV
+            : HooksDispatcherOnMountInDEV));
+      return thenable;
+    }
+    function use(usable) {
+      if (null !== usable && "object" === typeof usable) {
+        if ("function" === typeof usable.then) return useThenable(usable);
+        if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);
+      }
+      throw Error("An unsupported type was passed to use(): " + String(usable));
+    }
+    function useMemoCache(size) {
+      var memoCache = null,
+        updateQueue = currentlyRenderingFiber.updateQueue;
+      null !== updateQueue && (memoCache = updateQueue.memoCache);
+      if (null == memoCache) {
+        var current = currentlyRenderingFiber.alternate;
+        null !== current &&
+          ((current = current.updateQueue),
+          null !== current &&
+            ((current = current.memoCache),
+            null != current &&
+              (memoCache = {
+                data: current.data.map(function (array) {
+                  return array.slice();
+                }),
+                index: 0
+              })));
+      }
+      null == memoCache && (memoCache = { data: [], index: 0 });
+      null === updateQueue &&
+        ((updateQueue = createFunctionComponentUpdateQueue()),
+        (currentlyRenderingFiber.updateQueue = updateQueue));
+      updateQueue.memoCache = memoCache;
+      updateQueue = memoCache.data[memoCache.index];
+      if (void 0 === updateQueue || ignorePreviousDependencies)
+        for (
+          updateQueue = memoCache.data[memoCache.index] = Array(size),
+            current = 0;
+          current < size;
+          current++
+        )
+          updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;
+      else
+        updateQueue.length !== size &&
+          console.error(
+            "Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.",
+            updateQueue.length,
+            size
+          );
+      memoCache.index++;
+      return updateQueue;
+    }
+    function basicStateReducer(state, action) {
+      return "function" === typeof action ? action(state) : action;
+    }
+    function mountReducer(reducer, initialArg, init) {
+      var hook = mountWorkInProgressHook();
+      if (void 0 !== init) {
+        var initialState = init(initialArg);
+        if (shouldDoubleInvokeUserFnsInHooksDEV) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            init(initialArg);
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+      } else initialState = initialArg;
+      hook.memoizedState = hook.baseState = initialState;
+      reducer = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: reducer,
+        lastRenderedState: initialState
+      };
+      hook.queue = reducer;
+      reducer = reducer.dispatch = dispatchReducerAction.bind(
+        null,
+        currentlyRenderingFiber,
+        reducer
+      );
+      return [hook.memoizedState, reducer];
+    }
+    function updateReducer(reducer) {
+      var hook = updateWorkInProgressHook();
+      return updateReducerImpl(hook, currentHook, reducer);
+    }
+    function updateReducerImpl(hook, current, reducer) {
+      var queue = hook.queue;
+      if (null === queue)
+        throw Error(
+          "Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)"
+        );
+      queue.lastRenderedReducer = reducer;
+      var baseQueue = hook.baseQueue,
+        pendingQueue = queue.pending;
+      if (null !== pendingQueue) {
+        if (null !== baseQueue) {
+          var baseFirst = baseQueue.next;
+          baseQueue.next = pendingQueue.next;
+          pendingQueue.next = baseFirst;
+        }
+        current.baseQueue !== baseQueue &&
+          console.error(
+            "Internal error: Expected work-in-progress queue to be a clone. This is a bug in React."
+          );
+        current.baseQueue = baseQueue = pendingQueue;
+        queue.pending = null;
+      }
+      pendingQueue = hook.baseState;
+      if (null === baseQueue) hook.memoizedState = pendingQueue;
+      else {
+        current = baseQueue.next;
+        var newBaseQueueFirst = (baseFirst = null),
+          newBaseQueueLast = null,
+          update = current,
+          didReadFromEntangledAsyncAction = !1;
+        do {
+          var updateLane = update.lane & -536870913;
+          if (
+            updateLane !== update.lane
+              ? (workInProgressRootRenderLanes & updateLane) === updateLane
+              : (renderLanes & updateLane) === updateLane
+          ) {
+            var revertLane = update.revertLane;
+            if (0 === revertLane)
+              null !== newBaseQueueLast &&
+                (newBaseQueueLast = newBaseQueueLast.next =
+                  {
+                    lane: 0,
+                    revertLane: 0,
+                    action: update.action,
+                    hasEagerState: update.hasEagerState,
+                    eagerState: update.eagerState,
+                    next: null
+                  }),
+                updateLane === currentEntangledLane &&
+                  (didReadFromEntangledAsyncAction = !0);
+            else if ((renderLanes & revertLane) === revertLane) {
+              update = update.next;
+              revertLane === currentEntangledLane &&
+                (didReadFromEntangledAsyncAction = !0);
+              continue;
+            } else
+              (updateLane = {
+                lane: 0,
+                revertLane: update.revertLane,
+                action: update.action,
+                hasEagerState: update.hasEagerState,
+                eagerState: update.eagerState,
+                next: null
+              }),
+                null === newBaseQueueLast
+                  ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),
+                    (baseFirst = pendingQueue))
+                  : (newBaseQueueLast = newBaseQueueLast.next = updateLane),
+                (currentlyRenderingFiber.lanes |= revertLane),
+                (workInProgressRootSkippedLanes |= revertLane);
+            updateLane = update.action;
+            shouldDoubleInvokeUserFnsInHooksDEV &&
+              reducer(pendingQueue, updateLane);
+            pendingQueue = update.hasEagerState
+              ? update.eagerState
+              : reducer(pendingQueue, updateLane);
+          } else
+            (revertLane = {
+              lane: updateLane,
+              revertLane: update.revertLane,
+              action: update.action,
+              hasEagerState: update.hasEagerState,
+              eagerState: update.eagerState,
+              next: null
+            }),
+              null === newBaseQueueLast
+                ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),
+                  (baseFirst = pendingQueue))
+                : (newBaseQueueLast = newBaseQueueLast.next = revertLane),
+              (currentlyRenderingFiber.lanes |= updateLane),
+              (workInProgressRootSkippedLanes |= updateLane);
+          update = update.next;
+        } while (null !== update && update !== current);
+        null === newBaseQueueLast
+          ? (baseFirst = pendingQueue)
+          : (newBaseQueueLast.next = newBaseQueueFirst);
+        if (
+          !objectIs(pendingQueue, hook.memoizedState) &&
+          ((didReceiveUpdate = !0),
+          didReadFromEntangledAsyncAction &&
+            ((reducer = currentEntangledActionThenable), null !== reducer))
+        )
+          throw reducer;
+        hook.memoizedState = pendingQueue;
+        hook.baseState = baseFirst;
+        hook.baseQueue = newBaseQueueLast;
+        queue.lastRenderedState = pendingQueue;
+      }
+      null === baseQueue && (queue.lanes = 0);
+      return [hook.memoizedState, queue.dispatch];
+    }
+    function rerenderReducer(reducer) {
+      var hook = updateWorkInProgressHook(),
+        queue = hook.queue;
+      if (null === queue)
+        throw Error(
+          "Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)"
+        );
+      queue.lastRenderedReducer = reducer;
+      var dispatch = queue.dispatch,
+        lastRenderPhaseUpdate = queue.pending,
+        newState = hook.memoizedState;
+      if (null !== lastRenderPhaseUpdate) {
+        queue.pending = null;
+        var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);
+        do
+          (newState = reducer(newState, update.action)), (update = update.next);
+        while (update !== lastRenderPhaseUpdate);
+        objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);
+        hook.memoizedState = newState;
+        null === hook.baseQueue && (hook.baseState = newState);
+        queue.lastRenderedState = newState;
+      }
+      return [newState, dispatch];
+    }
+    function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
+      var fiber = currentlyRenderingFiber,
+        hook = mountWorkInProgressHook();
+      if (isHydrating) {
+        if (void 0 === getServerSnapshot)
+          throw Error(
+            "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+          );
+        var nextSnapshot = getServerSnapshot();
+        didWarnUncachedGetSnapshot ||
+          nextSnapshot === getServerSnapshot() ||
+          (console.error(
+            "The result of getServerSnapshot should be cached to avoid an infinite loop"
+          ),
+          (didWarnUncachedGetSnapshot = !0));
+      } else {
+        nextSnapshot = getSnapshot();
+        didWarnUncachedGetSnapshot ||
+          ((getServerSnapshot = getSnapshot()),
+          objectIs(nextSnapshot, getServerSnapshot) ||
+            (console.error(
+              "The result of getSnapshot should be cached to avoid an infinite loop"
+            ),
+            (didWarnUncachedGetSnapshot = !0)));
+        if (null === workInProgressRoot)
+          throw Error(
+            "Expected a work-in-progress root. This is a bug in React. Please file an issue."
+          );
+        0 !== (workInProgressRootRenderLanes & 124) ||
+          pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);
+      }
+      hook.memoizedState = nextSnapshot;
+      getServerSnapshot = { value: nextSnapshot, getSnapshot: getSnapshot };
+      hook.queue = getServerSnapshot;
+      mountEffect(
+        subscribeToStore.bind(null, fiber, getServerSnapshot, subscribe),
+        [subscribe]
+      );
+      fiber.flags |= 2048;
+      pushSimpleEffect(
+        HasEffect | Passive,
+        createEffectInstance(),
+        updateStoreInstance.bind(
+          null,
+          fiber,
+          getServerSnapshot,
+          nextSnapshot,
+          getSnapshot
+        ),
+        null
+      );
+      return nextSnapshot;
+    }
+    function updateSyncExternalStore(
+      subscribe,
+      getSnapshot,
+      getServerSnapshot
+    ) {
+      var fiber = currentlyRenderingFiber,
+        hook = updateWorkInProgressHook(),
+        isHydrating$jscomp$0 = isHydrating;
+      if (isHydrating$jscomp$0) {
+        if (void 0 === getServerSnapshot)
+          throw Error(
+            "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+          );
+        getServerSnapshot = getServerSnapshot();
+      } else if (
+        ((getServerSnapshot = getSnapshot()), !didWarnUncachedGetSnapshot)
+      ) {
+        var cachedSnapshot = getSnapshot();
+        objectIs(getServerSnapshot, cachedSnapshot) ||
+          (console.error(
+            "The result of getSnapshot should be cached to avoid an infinite loop"
+          ),
+          (didWarnUncachedGetSnapshot = !0));
+      }
+      if (
+        (cachedSnapshot = !objectIs(
+          (currentHook || hook).memoizedState,
+          getServerSnapshot
+        ))
+      )
+        (hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0);
+      hook = hook.queue;
+      var create = subscribeToStore.bind(null, fiber, hook, subscribe);
+      updateEffectImpl(2048, Passive, create, [subscribe]);
+      if (
+        hook.getSnapshot !== getSnapshot ||
+        cachedSnapshot ||
+        (null !== workInProgressHook &&
+          workInProgressHook.memoizedState.tag & HasEffect)
+      ) {
+        fiber.flags |= 2048;
+        pushSimpleEffect(
+          HasEffect | Passive,
+          createEffectInstance(),
+          updateStoreInstance.bind(
+            null,
+            fiber,
+            hook,
+            getServerSnapshot,
+            getSnapshot
+          ),
+          null
+        );
+        if (null === workInProgressRoot)
+          throw Error(
+            "Expected a work-in-progress root. This is a bug in React. Please file an issue."
+          );
+        isHydrating$jscomp$0 ||
+          0 !== (renderLanes & 124) ||
+          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);
+      }
+      return getServerSnapshot;
+    }
+    function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {
+      fiber.flags |= 16384;
+      fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };
+      getSnapshot = currentlyRenderingFiber.updateQueue;
+      null === getSnapshot
+        ? ((getSnapshot = createFunctionComponentUpdateQueue()),
+          (currentlyRenderingFiber.updateQueue = getSnapshot),
+          (getSnapshot.stores = [fiber]))
+        : ((renderedSnapshot = getSnapshot.stores),
+          null === renderedSnapshot
+            ? (getSnapshot.stores = [fiber])
+            : renderedSnapshot.push(fiber));
+    }
+    function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {
+      inst.value = nextSnapshot;
+      inst.getSnapshot = getSnapshot;
+      checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);
+    }
+    function subscribeToStore(fiber, inst, subscribe) {
+      return subscribe(function () {
+        checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);
+      });
+    }
+    function checkIfSnapshotChanged(inst) {
+      var latestGetSnapshot = inst.getSnapshot;
+      inst = inst.value;
+      try {
+        var nextValue = latestGetSnapshot();
+        return !objectIs(inst, nextValue);
+      } catch (error) {
+        return !0;
+      }
+    }
+    function forceStoreRerender(fiber) {
+      var root = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== root && scheduleUpdateOnFiber(root, fiber, 2);
+    }
+    function mountStateImpl(initialState) {
+      var hook = mountWorkInProgressHook();
+      if ("function" === typeof initialState) {
+        var initialStateInitializer = initialState;
+        initialState = initialStateInitializer();
+        if (shouldDoubleInvokeUserFnsInHooksDEV) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            initialStateInitializer();
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+      }
+      hook.memoizedState = hook.baseState = initialState;
+      hook.queue = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: basicStateReducer,
+        lastRenderedState: initialState
+      };
+      return hook;
+    }
+    function mountState(initialState) {
+      initialState = mountStateImpl(initialState);
+      var queue = initialState.queue,
+        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);
+      queue.dispatch = dispatch;
+      return [initialState.memoizedState, dispatch];
+    }
+    function mountOptimistic(passthrough) {
+      var hook = mountWorkInProgressHook();
+      hook.memoizedState = hook.baseState = passthrough;
+      var queue = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: null,
+        lastRenderedState: null
+      };
+      hook.queue = queue;
+      hook = dispatchOptimisticSetState.bind(
+        null,
+        currentlyRenderingFiber,
+        !0,
+        queue
+      );
+      queue.dispatch = hook;
+      return [passthrough, hook];
+    }
+    function updateOptimistic(passthrough, reducer) {
+      var hook = updateWorkInProgressHook();
+      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);
+    }
+    function updateOptimisticImpl(hook, current, passthrough, reducer) {
+      hook.baseState = passthrough;
+      return updateReducerImpl(
+        hook,
+        currentHook,
+        "function" === typeof reducer ? reducer : basicStateReducer
+      );
+    }
+    function rerenderOptimistic(passthrough, reducer) {
+      var hook = updateWorkInProgressHook();
+      if (null !== currentHook)
+        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);
+      hook.baseState = passthrough;
+      return [passthrough, hook.queue.dispatch];
+    }
+    function dispatchActionState(
+      fiber,
+      actionQueue,
+      setPendingState,
+      setState,
+      payload
+    ) {
+      if (isRenderPhaseUpdate(fiber))
+        throw Error("Cannot update form state while rendering.");
+      fiber = actionQueue.action;
+      if (null !== fiber) {
+        var actionNode = {
+          payload: payload,
+          action: fiber,
+          next: null,
+          isTransition: !0,
+          status: "pending",
+          value: null,
+          reason: null,
+          listeners: [],
+          then: function (listener) {
+            actionNode.listeners.push(listener);
+          }
+        };
+        null !== ReactSharedInternals.T
+          ? setPendingState(!0)
+          : (actionNode.isTransition = !1);
+        setState(actionNode);
+        setPendingState = actionQueue.pending;
+        null === setPendingState
+          ? ((actionNode.next = actionQueue.pending = actionNode),
+            runActionStateAction(actionQueue, actionNode))
+          : ((actionNode.next = setPendingState.next),
+            (actionQueue.pending = setPendingState.next = actionNode));
+      }
+    }
+    function runActionStateAction(actionQueue, node) {
+      var action = node.action,
+        payload = node.payload,
+        prevState = actionQueue.state;
+      if (node.isTransition) {
+        var prevTransition = ReactSharedInternals.T,
+          currentTransition = {};
+        ReactSharedInternals.T = currentTransition;
+        ReactSharedInternals.T._updatedFibers = new Set();
+        try {
+          var returnValue = action(prevState, payload),
+            onStartTransitionFinish = ReactSharedInternals.S;
+          null !== onStartTransitionFinish &&
+            onStartTransitionFinish(currentTransition, returnValue);
+          handleActionReturnValue(actionQueue, node, returnValue);
+        } catch (error) {
+          onActionError(actionQueue, node, error);
+        } finally {
+          (ReactSharedInternals.T = prevTransition),
+            null === prevTransition &&
+              currentTransition._updatedFibers &&
+              ((actionQueue = currentTransition._updatedFibers.size),
+              currentTransition._updatedFibers.clear(),
+              10 < actionQueue &&
+                console.warn(
+                  "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."
+                ));
+        }
+      } else
+        try {
+          (currentTransition = action(prevState, payload)),
+            handleActionReturnValue(actionQueue, node, currentTransition);
+        } catch (error$4) {
+          onActionError(actionQueue, node, error$4);
+        }
+    }
+    function handleActionReturnValue(actionQueue, node, returnValue) {
+      null !== returnValue &&
+      "object" === typeof returnValue &&
+      "function" === typeof returnValue.then
+        ? (returnValue.then(
+            function (nextState) {
+              onActionSuccess(actionQueue, node, nextState);
+            },
+            function (error) {
+              return onActionError(actionQueue, node, error);
+            }
+          ),
+          node.isTransition ||
+            console.error(
+              "An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop."
+            ))
+        : onActionSuccess(actionQueue, node, returnValue);
+    }
+    function onActionSuccess(actionQueue, actionNode, nextState) {
+      actionNode.status = "fulfilled";
+      actionNode.value = nextState;
+      notifyActionListeners(actionNode);
+      actionQueue.state = nextState;
+      actionNode = actionQueue.pending;
+      null !== actionNode &&
+        ((nextState = actionNode.next),
+        nextState === actionNode
+          ? (actionQueue.pending = null)
+          : ((nextState = nextState.next),
+            (actionNode.next = nextState),
+            runActionStateAction(actionQueue, nextState)));
+    }
+    function onActionError(actionQueue, actionNode, error) {
+      var last = actionQueue.pending;
+      actionQueue.pending = null;
+      if (null !== last) {
+        last = last.next;
+        do
+          (actionNode.status = "rejected"),
+            (actionNode.reason = error),
+            notifyActionListeners(actionNode),
+            (actionNode = actionNode.next);
+        while (actionNode !== last);
+      }
+      actionQueue.action = null;
+    }
+    function notifyActionListeners(actionNode) {
+      actionNode = actionNode.listeners;
+      for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();
+    }
+    function actionStateReducer(oldState, newState) {
+      return newState;
+    }
+    function mountActionState(action, initialStateProp) {
+      if (isHydrating) {
+        var ssrFormState = workInProgressRoot.formState;
+        if (null !== ssrFormState) {
+          a: {
+            var isMatching = currentlyRenderingFiber;
+            if (isHydrating) {
+              if (nextHydratableInstance) {
+                b: {
+                  var markerInstance = nextHydratableInstance;
+                  for (
+                    var inRootOrSingleton = rootOrSingletonContext;
+                    8 !== markerInstance.nodeType;
+
+                  ) {
+                    if (!inRootOrSingleton) {
+                      markerInstance = null;
+                      break b;
+                    }
+                    markerInstance = getNextHydratable(
+                      markerInstance.nextSibling
+                    );
+                    if (null === markerInstance) {
+                      markerInstance = null;
+                      break b;
+                    }
+                  }
+                  inRootOrSingleton = markerInstance.data;
+                  markerInstance =
+                    inRootOrSingleton === FORM_STATE_IS_MATCHING ||
+                    inRootOrSingleton === FORM_STATE_IS_NOT_MATCHING
+                      ? markerInstance
+                      : null;
+                }
+                if (markerInstance) {
+                  nextHydratableInstance = getNextHydratable(
+                    markerInstance.nextSibling
+                  );
+                  isMatching = markerInstance.data === FORM_STATE_IS_MATCHING;
+                  break a;
+                }
+              }
+              throwOnHydrationMismatch(isMatching);
+            }
+            isMatching = !1;
+          }
+          isMatching && (initialStateProp = ssrFormState[0]);
+        }
+      }
+      ssrFormState = mountWorkInProgressHook();
+      ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;
+      isMatching = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: actionStateReducer,
+        lastRenderedState: initialStateProp
+      };
+      ssrFormState.queue = isMatching;
+      ssrFormState = dispatchSetState.bind(
+        null,
+        currentlyRenderingFiber,
+        isMatching
+      );
+      isMatching.dispatch = ssrFormState;
+      isMatching = mountStateImpl(!1);
+      inRootOrSingleton = dispatchOptimisticSetState.bind(
+        null,
+        currentlyRenderingFiber,
+        !1,
+        isMatching.queue
+      );
+      isMatching = mountWorkInProgressHook();
+      markerInstance = {
+        state: initialStateProp,
+        dispatch: null,
+        action: action,
+        pending: null
+      };
+      isMatching.queue = markerInstance;
+      ssrFormState = dispatchActionState.bind(
+        null,
+        currentlyRenderingFiber,
+        markerInstance,
+        inRootOrSingleton,
+        ssrFormState
+      );
+      markerInstance.dispatch = ssrFormState;
+      isMatching.memoizedState = action;
+      return [initialStateProp, ssrFormState, !1];
+    }
+    function updateActionState(action) {
+      var stateHook = updateWorkInProgressHook();
+      return updateActionStateImpl(stateHook, currentHook, action);
+    }
+    function updateActionStateImpl(stateHook, currentStateHook, action) {
+      currentStateHook = updateReducerImpl(
+        stateHook,
+        currentStateHook,
+        actionStateReducer
+      )[0];
+      stateHook = updateReducer(basicStateReducer)[0];
+      if (
+        "object" === typeof currentStateHook &&
+        null !== currentStateHook &&
+        "function" === typeof currentStateHook.then
+      )
+        try {
+          var state = useThenable(currentStateHook);
+        } catch (x) {
+          if (x === SuspenseException) throw SuspenseActionException;
+          throw x;
+        }
+      else state = currentStateHook;
+      currentStateHook = updateWorkInProgressHook();
+      var actionQueue = currentStateHook.queue,
+        dispatch = actionQueue.dispatch;
+      action !== currentStateHook.memoizedState &&
+        ((currentlyRenderingFiber.flags |= 2048),
+        pushSimpleEffect(
+          HasEffect | Passive,
+          createEffectInstance(),
+          actionStateActionEffect.bind(null, actionQueue, action),
+          null
+        ));
+      return [state, dispatch, stateHook];
+    }
+    function actionStateActionEffect(actionQueue, action) {
+      actionQueue.action = action;
+    }
+    function rerenderActionState(action) {
+      var stateHook = updateWorkInProgressHook(),
+        currentStateHook = currentHook;
+      if (null !== currentStateHook)
+        return updateActionStateImpl(stateHook, currentStateHook, action);
+      updateWorkInProgressHook();
+      stateHook = stateHook.memoizedState;
+      currentStateHook = updateWorkInProgressHook();
+      var dispatch = currentStateHook.queue.dispatch;
+      currentStateHook.memoizedState = action;
+      return [stateHook, dispatch, !1];
+    }
+    function pushSimpleEffect(tag, inst, create, createDeps) {
+      tag = {
+        tag: tag,
+        create: create,
+        deps: createDeps,
+        inst: inst,
+        next: null
+      };
+      inst = currentlyRenderingFiber.updateQueue;
+      null === inst &&
+        ((inst = createFunctionComponentUpdateQueue()),
+        (currentlyRenderingFiber.updateQueue = inst));
+      create = inst.lastEffect;
+      null === create
+        ? (inst.lastEffect = tag.next = tag)
+        : ((createDeps = create.next),
+          (create.next = tag),
+          (tag.next = createDeps),
+          (inst.lastEffect = tag));
+      return tag;
+    }
+    function createEffectInstance() {
+      return { destroy: void 0, resource: void 0 };
+    }
+    function mountRef(initialValue) {
+      var hook = mountWorkInProgressHook();
+      initialValue = { current: initialValue };
+      return (hook.memoizedState = initialValue);
+    }
+    function mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {
+      var hook = mountWorkInProgressHook();
+      createDeps = void 0 === createDeps ? null : createDeps;
+      currentlyRenderingFiber.flags |= fiberFlags;
+      hook.memoizedState = pushSimpleEffect(
+        HasEffect | hookFlags,
+        createEffectInstance(),
+        create,
+        createDeps
+      );
+    }
+    function updateEffectImpl(fiberFlags, hookFlags, create, deps) {
+      var hook = updateWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var inst = hook.memoizedState.inst;
+      null !== currentHook &&
+      null !== deps &&
+      areHookInputsEqual(deps, currentHook.memoizedState.deps)
+        ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))
+        : ((currentlyRenderingFiber.flags |= fiberFlags),
+          (hook.memoizedState = pushSimpleEffect(
+            HasEffect | hookFlags,
+            inst,
+            create,
+            deps
+          )));
+    }
+    function mountEffect(create, createDeps) {
+      (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&
+      (currentlyRenderingFiber.mode & NoStrictPassiveEffectsMode) === NoMode
+        ? mountEffectImpl(276826112, Passive, create, createDeps)
+        : mountEffectImpl(8390656, Passive, create, createDeps);
+    }
+    function mountLayoutEffect(create, deps) {
+      var fiberFlags = 4194308;
+      (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&
+        (fiberFlags |= 134217728);
+      return mountEffectImpl(fiberFlags, Layout, create, deps);
+    }
+    function imperativeHandleEffect(create, ref) {
+      if ("function" === typeof ref) {
+        create = create();
+        var refCleanup = ref(create);
+        return function () {
+          "function" === typeof refCleanup ? refCleanup() : ref(null);
+        };
+      }
+      if (null !== ref && void 0 !== ref)
+        return (
+          ref.hasOwnProperty("current") ||
+            console.error(
+              "Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.",
+              "an object with keys {" + Object.keys(ref).join(", ") + "}"
+            ),
+          (create = create()),
+          (ref.current = create),
+          function () {
+            ref.current = null;
+          }
+        );
+    }
+    function mountImperativeHandle(ref, create, deps) {
+      "function" !== typeof create &&
+        console.error(
+          "Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",
+          null !== create ? typeof create : "null"
+        );
+      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;
+      var fiberFlags = 4194308;
+      (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&
+        (fiberFlags |= 134217728);
+      mountEffectImpl(
+        fiberFlags,
+        Layout,
+        imperativeHandleEffect.bind(null, create, ref),
+        deps
+      );
+    }
+    function updateImperativeHandle(ref, create, deps) {
+      "function" !== typeof create &&
+        console.error(
+          "Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",
+          null !== create ? typeof create : "null"
+        );
+      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;
+      updateEffectImpl(
+        4,
+        Layout,
+        imperativeHandleEffect.bind(null, create, ref),
+        deps
+      );
+    }
+    function mountCallback(callback, deps) {
+      mountWorkInProgressHook().memoizedState = [
+        callback,
+        void 0 === deps ? null : deps
+      ];
+      return callback;
+    }
+    function updateCallback(callback, deps) {
+      var hook = updateWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var prevState = hook.memoizedState;
+      if (null !== deps && areHookInputsEqual(deps, prevState[1]))
+        return prevState[0];
+      hook.memoizedState = [callback, deps];
+      return callback;
+    }
+    function mountMemo(nextCreate, deps) {
+      var hook = mountWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var nextValue = nextCreate();
+      if (shouldDoubleInvokeUserFnsInHooksDEV) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          nextCreate();
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      hook.memoizedState = [nextValue, deps];
+      return nextValue;
+    }
+    function updateMemo(nextCreate, deps) {
+      var hook = updateWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var prevState = hook.memoizedState;
+      if (null !== deps && areHookInputsEqual(deps, prevState[1]))
+        return prevState[0];
+      prevState = nextCreate();
+      if (shouldDoubleInvokeUserFnsInHooksDEV) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          nextCreate();
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      hook.memoizedState = [prevState, deps];
+      return prevState;
+    }
+    function mountDeferredValue(value, initialValue) {
+      var hook = mountWorkInProgressHook();
+      return mountDeferredValueImpl(hook, value, initialValue);
+    }
+    function updateDeferredValue(value, initialValue) {
+      var hook = updateWorkInProgressHook();
+      return updateDeferredValueImpl(
+        hook,
+        currentHook.memoizedState,
+        value,
+        initialValue
+      );
+    }
+    function rerenderDeferredValue(value, initialValue) {
+      var hook = updateWorkInProgressHook();
+      return null === currentHook
+        ? mountDeferredValueImpl(hook, value, initialValue)
+        : updateDeferredValueImpl(
+            hook,
+            currentHook.memoizedState,
+            value,
+            initialValue
+          );
+    }
+    function mountDeferredValueImpl(hook, value, initialValue) {
+      if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))
+        return (hook.memoizedState = value);
+      hook.memoizedState = initialValue;
+      hook = requestDeferredLane();
+      currentlyRenderingFiber.lanes |= hook;
+      workInProgressRootSkippedLanes |= hook;
+      return initialValue;
+    }
+    function updateDeferredValueImpl(hook, prevValue, value, initialValue) {
+      if (objectIs(value, prevValue)) return value;
+      if (null !== currentTreeHiddenStackCursor.current)
+        return (
+          (hook = mountDeferredValueImpl(hook, value, initialValue)),
+          objectIs(hook, prevValue) || (didReceiveUpdate = !0),
+          hook
+        );
+      if (0 === (renderLanes & 42))
+        return (didReceiveUpdate = !0), (hook.memoizedState = value);
+      hook = requestDeferredLane();
+      currentlyRenderingFiber.lanes |= hook;
+      workInProgressRootSkippedLanes |= hook;
+      return prevValue;
+    }
+    function startTransition(
+      fiber,
+      queue,
+      pendingState,
+      finishedState,
+      callback
+    ) {
+      var previousPriority = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p =
+        0 !== previousPriority && previousPriority < ContinuousEventPriority
+          ? previousPriority
+          : ContinuousEventPriority;
+      var prevTransition = ReactSharedInternals.T,
+        currentTransition = {};
+      ReactSharedInternals.T = currentTransition;
+      dispatchOptimisticSetState(fiber, !1, queue, pendingState);
+      currentTransition._updatedFibers = new Set();
+      try {
+        var returnValue = callback(),
+          onStartTransitionFinish = ReactSharedInternals.S;
+        null !== onStartTransitionFinish &&
+          onStartTransitionFinish(currentTransition, returnValue);
+        if (
+          null !== returnValue &&
+          "object" === typeof returnValue &&
+          "function" === typeof returnValue.then
+        ) {
+          var thenableForFinishedState = chainThenableValue(
+            returnValue,
+            finishedState
+          );
+          dispatchSetStateInternal(
+            fiber,
+            queue,
+            thenableForFinishedState,
+            requestUpdateLane(fiber)
+          );
+        } else
+          dispatchSetStateInternal(
+            fiber,
+            queue,
+            finishedState,
+            requestUpdateLane(fiber)
+          );
+      } catch (error) {
+        dispatchSetStateInternal(
+          fiber,
+          queue,
+          { then: function () {}, status: "rejected", reason: error },
+          requestUpdateLane(fiber)
+        );
+      } finally {
+        (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = prevTransition),
+          null === prevTransition &&
+            currentTransition._updatedFibers &&
+            ((fiber = currentTransition._updatedFibers.size),
+            currentTransition._updatedFibers.clear(),
+            10 < fiber &&
+              console.warn(
+                "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."
+              ));
+      }
+    }
+    function startHostTransition(formFiber, pendingState, action, formData) {
+      if (5 !== formFiber.tag)
+        throw Error(
+          "Expected the form instance to be a HostComponent. This is a bug in React."
+        );
+      var queue = ensureFormComponentIsStateful(formFiber).queue;
+      startTransition(
+        formFiber,
+        queue,
+        pendingState,
+        NotPendingTransition,
+        null === action
+          ? noop$3
+          : function () {
+              requestFormReset$2(formFiber);
+              return action(formData);
+            }
+      );
+    }
+    function ensureFormComponentIsStateful(formFiber) {
+      var existingStateHook = formFiber.memoizedState;
+      if (null !== existingStateHook) return existingStateHook;
+      existingStateHook = {
+        memoizedState: NotPendingTransition,
+        baseState: NotPendingTransition,
+        baseQueue: null,
+        queue: {
+          pending: null,
+          lanes: 0,
+          dispatch: null,
+          lastRenderedReducer: basicStateReducer,
+          lastRenderedState: NotPendingTransition
+        },
+        next: null
+      };
+      var initialResetState = {};
+      existingStateHook.next = {
+        memoizedState: initialResetState,
+        baseState: initialResetState,
+        baseQueue: null,
+        queue: {
+          pending: null,
+          lanes: 0,
+          dispatch: null,
+          lastRenderedReducer: basicStateReducer,
+          lastRenderedState: initialResetState
+        },
+        next: null
+      };
+      formFiber.memoizedState = existingStateHook;
+      formFiber = formFiber.alternate;
+      null !== formFiber && (formFiber.memoizedState = existingStateHook);
+      return existingStateHook;
+    }
+    function requestFormReset$2(formFiber) {
+      null === ReactSharedInternals.T &&
+        console.error(
+          "requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition."
+        );
+      var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;
+      dispatchSetStateInternal(
+        formFiber,
+        resetStateQueue,
+        {},
+        requestUpdateLane(formFiber)
+      );
+    }
+    function mountTransition() {
+      var stateHook = mountStateImpl(!1);
+      stateHook = startTransition.bind(
+        null,
+        currentlyRenderingFiber,
+        stateHook.queue,
+        !0,
+        !1
+      );
+      mountWorkInProgressHook().memoizedState = stateHook;
+      return [!1, stateHook];
+    }
+    function updateTransition() {
+      var booleanOrThenable = updateReducer(basicStateReducer)[0],
+        start = updateWorkInProgressHook().memoizedState;
+      return [
+        "boolean" === typeof booleanOrThenable
+          ? booleanOrThenable
+          : useThenable(booleanOrThenable),
+        start
+      ];
+    }
+    function rerenderTransition() {
+      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],
+        start = updateWorkInProgressHook().memoizedState;
+      return [
+        "boolean" === typeof booleanOrThenable
+          ? booleanOrThenable
+          : useThenable(booleanOrThenable),
+        start
+      ];
+    }
+    function useHostTransitionStatus() {
+      return readContext(HostTransitionContext);
+    }
+    function mountId() {
+      var hook = mountWorkInProgressHook(),
+        identifierPrefix = workInProgressRoot.identifierPrefix;
+      if (isHydrating) {
+        var treeId = treeContextOverflow;
+        var idWithLeadingBit = treeContextId;
+        treeId =
+          (
+            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))
+          ).toString(32) + treeId;
+        identifierPrefix = "\u00ab" + identifierPrefix + "R" + treeId;
+        treeId = localIdCounter++;
+        0 < treeId && (identifierPrefix += "H" + treeId.toString(32));
+        identifierPrefix += "\u00bb";
+      } else
+        (treeId = globalClientIdCounter++),
+          (identifierPrefix =
+            "\u00ab" + identifierPrefix + "r" + treeId.toString(32) + "\u00bb");
+      return (hook.memoizedState = identifierPrefix);
+    }
+    function mountRefresh() {
+      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(
+        null,
+        currentlyRenderingFiber
+      ));
+    }
+    function refreshCache(fiber, seedKey) {
+      for (var provider = fiber.return; null !== provider; ) {
+        switch (provider.tag) {
+          case 24:
+          case 3:
+            var lane = requestUpdateLane(provider);
+            fiber = createUpdate(lane);
+            var root = enqueueUpdate(provider, fiber, lane);
+            null !== root &&
+              (scheduleUpdateOnFiber(root, provider, lane),
+              entangleTransitions(root, provider, lane));
+            provider = createCache();
+            null !== seedKey &&
+              void 0 !== seedKey &&
+              null !== root &&
+              console.error(
+                "The seed argument is not enabled outside experimental channels."
+              );
+            fiber.payload = { cache: provider };
+            return;
+        }
+        provider = provider.return;
+      }
+    }
+    function dispatchReducerAction(fiber, queue, action) {
+      var args = arguments;
+      "function" === typeof args[3] &&
+        console.error(
+          "State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."
+        );
+      args = requestUpdateLane(fiber);
+      var update = {
+        lane: args,
+        revertLane: 0,
+        action: action,
+        hasEagerState: !1,
+        eagerState: null,
+        next: null
+      };
+      isRenderPhaseUpdate(fiber)
+        ? enqueueRenderPhaseUpdate(queue, update)
+        : ((update = enqueueConcurrentHookUpdate(fiber, queue, update, args)),
+          null !== update &&
+            (scheduleUpdateOnFiber(update, fiber, args),
+            entangleTransitionUpdate(update, queue, args)));
+      markStateUpdateScheduled(fiber, args);
+    }
+    function dispatchSetState(fiber, queue, action) {
+      var args = arguments;
+      "function" === typeof args[3] &&
+        console.error(
+          "State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."
+        );
+      args = requestUpdateLane(fiber);
+      dispatchSetStateInternal(fiber, queue, action, args);
+      markStateUpdateScheduled(fiber, args);
+    }
+    function dispatchSetStateInternal(fiber, queue, action, lane) {
+      var update = {
+        lane: lane,
+        revertLane: 0,
+        action: action,
+        hasEagerState: !1,
+        eagerState: null,
+        next: null
+      };
+      if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);
+      else {
+        var alternate = fiber.alternate;
+        if (
+          0 === fiber.lanes &&
+          (null === alternate || 0 === alternate.lanes) &&
+          ((alternate = queue.lastRenderedReducer), null !== alternate)
+        ) {
+          var prevDispatcher = ReactSharedInternals.H;
+          ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+          try {
+            var currentState = queue.lastRenderedState,
+              eagerState = alternate(currentState, action);
+            update.hasEagerState = !0;
+            update.eagerState = eagerState;
+            if (objectIs(eagerState, currentState))
+              return (
+                enqueueUpdate$1(fiber, queue, update, 0),
+                null === workInProgressRoot &&
+                  finishQueueingConcurrentUpdates(),
+                !1
+              );
+          } catch (error) {
+          } finally {
+            ReactSharedInternals.H = prevDispatcher;
+          }
+        }
+        action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);
+        if (null !== action)
+          return (
+            scheduleUpdateOnFiber(action, fiber, lane),
+            entangleTransitionUpdate(action, queue, lane),
+            !0
+          );
+      }
+      return !1;
+    }
+    function dispatchOptimisticSetState(
+      fiber,
+      throwIfDuringRender,
+      queue,
+      action
+    ) {
+      null === ReactSharedInternals.T &&
+        0 === currentEntangledLane &&
+        console.error(
+          "An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition."
+        );
+      action = {
+        lane: 2,
+        revertLane: requestTransitionLane(),
+        action: action,
+        hasEagerState: !1,
+        eagerState: null,
+        next: null
+      };
+      if (isRenderPhaseUpdate(fiber)) {
+        if (throwIfDuringRender)
+          throw Error("Cannot update optimistic state while rendering.");
+        console.error("Cannot call startTransition while rendering.");
+      } else
+        (throwIfDuringRender = enqueueConcurrentHookUpdate(
+          fiber,
+          queue,
+          action,
+          2
+        )),
+          null !== throwIfDuringRender &&
+            scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);
+      markStateUpdateScheduled(fiber, 2);
+    }
+    function isRenderPhaseUpdate(fiber) {
+      var alternate = fiber.alternate;
+      return (
+        fiber === currentlyRenderingFiber ||
+        (null !== alternate && alternate === currentlyRenderingFiber)
+      );
+    }
+    function enqueueRenderPhaseUpdate(queue, update) {
+      didScheduleRenderPhaseUpdateDuringThisPass =
+        didScheduleRenderPhaseUpdate = !0;
+      var pending = queue.pending;
+      null === pending
+        ? (update.next = update)
+        : ((update.next = pending.next), (pending.next = update));
+      queue.pending = update;
+    }
+    function entangleTransitionUpdate(root, queue, lane) {
+      if (0 !== (lane & 4194048)) {
+        var queueLanes = queue.lanes;
+        queueLanes &= root.pendingLanes;
+        lane |= queueLanes;
+        queue.lanes = lane;
+        markRootEntangled(root, lane);
+      }
+    }
+    function pushDebugInfo(debugInfo) {
+      var previousDebugInfo = currentDebugInfo;
+      null != debugInfo &&
+        (currentDebugInfo =
+          null === previousDebugInfo
+            ? debugInfo
+            : previousDebugInfo.concat(debugInfo));
+      return previousDebugInfo;
+    }
+    function validateFragmentProps(element, fiber, returnFiber) {
+      for (var keys = Object.keys(element.props), i = 0; i < keys.length; i++) {
+        var key = keys[i];
+        if ("children" !== key && "key" !== key) {
+          null === fiber &&
+            ((fiber = createFiberFromElement(element, returnFiber.mode, 0)),
+            (fiber._debugInfo = currentDebugInfo),
+            (fiber.return = returnFiber));
+          runWithFiberInDEV(
+            fiber,
+            function (erroredKey) {
+              console.error(
+                "Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",
+                erroredKey
+              );
+            },
+            key
+          );
+          break;
+        }
+      }
+    }
+    function unwrapThenable(thenable) {
+      var index = thenableIndexCounter;
+      thenableIndexCounter += 1;
+      null === thenableState && (thenableState = createThenableState());
+      return trackUsedThenable(thenableState, thenable, index);
+    }
+    function coerceRef(workInProgress, element) {
+      element = element.props.ref;
+      workInProgress.ref = void 0 !== element ? element : null;
+    }
+    function throwOnInvalidObjectType(returnFiber, newChild) {
+      if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)
+        throw Error(
+          'A React Element from an older version of React was rendered. This is not supported. It can happen if:\n- Multiple copies of the "react" package is used.\n- A library pre-bundled an old copy of "react" or "react/jsx-runtime".\n- A compiler tries to "inline" JSX instead of using the runtime.'
+        );
+      returnFiber = Object.prototype.toString.call(newChild);
+      throw Error(
+        "Objects are not valid as a React child (found: " +
+          ("[object Object]" === returnFiber
+            ? "object with keys {" + Object.keys(newChild).join(", ") + "}"
+            : returnFiber) +
+          "). If you meant to render a collection of children, use an array instead."
+      );
+    }
+    function warnOnFunctionType(returnFiber, invalidChild) {
+      var parentName = getComponentNameFromFiber(returnFiber) || "Component";
+      ownerHasFunctionTypeWarning[parentName] ||
+        ((ownerHasFunctionTypeWarning[parentName] = !0),
+        (invalidChild =
+          invalidChild.displayName || invalidChild.name || "Component"),
+        3 === returnFiber.tag
+          ? console.error(
+              "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\n  root.render(%s)",
+              invalidChild,
+              invalidChild,
+              invalidChild
+            )
+          : console.error(
+              "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\n  <%s>{%s}</%s>",
+              invalidChild,
+              invalidChild,
+              parentName,
+              invalidChild,
+              parentName
+            ));
+    }
+    function warnOnSymbolType(returnFiber, invalidChild) {
+      var parentName = getComponentNameFromFiber(returnFiber) || "Component";
+      ownerHasSymbolTypeWarning[parentName] ||
+        ((ownerHasSymbolTypeWarning[parentName] = !0),
+        (invalidChild = String(invalidChild)),
+        3 === returnFiber.tag
+          ? console.error(
+              "Symbols are not valid as a React child.\n  root.render(%s)",
+              invalidChild
+            )
+          : console.error(
+              "Symbols are not valid as a React child.\n  <%s>%s</%s>",
+              parentName,
+              invalidChild,
+              parentName
+            ));
+    }
+    function createChildReconciler(shouldTrackSideEffects) {
+      function deleteChild(returnFiber, childToDelete) {
+        if (shouldTrackSideEffects) {
+          var deletions = returnFiber.deletions;
+          null === deletions
+            ? ((returnFiber.deletions = [childToDelete]),
+              (returnFiber.flags |= 16))
+            : deletions.push(childToDelete);
+        }
+      }
+      function deleteRemainingChildren(returnFiber, currentFirstChild) {
+        if (!shouldTrackSideEffects) return null;
+        for (; null !== currentFirstChild; )
+          deleteChild(returnFiber, currentFirstChild),
+            (currentFirstChild = currentFirstChild.sibling);
+        return null;
+      }
+      function mapRemainingChildren(currentFirstChild) {
+        for (var existingChildren = new Map(); null !== currentFirstChild; )
+          null !== currentFirstChild.key
+            ? existingChildren.set(currentFirstChild.key, currentFirstChild)
+            : existingChildren.set(currentFirstChild.index, currentFirstChild),
+            (currentFirstChild = currentFirstChild.sibling);
+        return existingChildren;
+      }
+      function useFiber(fiber, pendingProps) {
+        fiber = createWorkInProgress(fiber, pendingProps);
+        fiber.index = 0;
+        fiber.sibling = null;
+        return fiber;
+      }
+      function placeChild(newFiber, lastPlacedIndex, newIndex) {
+        newFiber.index = newIndex;
+        if (!shouldTrackSideEffects)
+          return (newFiber.flags |= 1048576), lastPlacedIndex;
+        newIndex = newFiber.alternate;
+        if (null !== newIndex)
+          return (
+            (newIndex = newIndex.index),
+            newIndex < lastPlacedIndex
+              ? ((newFiber.flags |= 67108866), lastPlacedIndex)
+              : newIndex
+          );
+        newFiber.flags |= 67108866;
+        return lastPlacedIndex;
+      }
+      function placeSingleChild(newFiber) {
+        shouldTrackSideEffects &&
+          null === newFiber.alternate &&
+          (newFiber.flags |= 67108866);
+        return newFiber;
+      }
+      function updateTextNode(returnFiber, current, textContent, lanes) {
+        if (null === current || 6 !== current.tag)
+          return (
+            (current = createFiberFromText(
+              textContent,
+              returnFiber.mode,
+              lanes
+            )),
+            (current.return = returnFiber),
+            (current._debugOwner = returnFiber),
+            (current._debugTask = returnFiber._debugTask),
+            (current._debugInfo = currentDebugInfo),
+            current
+          );
+        current = useFiber(current, textContent);
+        current.return = returnFiber;
+        current._debugInfo = currentDebugInfo;
+        return current;
+      }
+      function updateElement(returnFiber, current, element, lanes) {
+        var elementType = element.type;
+        if (elementType === REACT_FRAGMENT_TYPE)
+          return (
+            (current = updateFragment(
+              returnFiber,
+              current,
+              element.props.children,
+              lanes,
+              element.key
+            )),
+            validateFragmentProps(element, current, returnFiber),
+            current
+          );
+        if (
+          null !== current &&
+          (current.elementType === elementType ||
+            isCompatibleFamilyForHotReloading(current, element) ||
+            ("object" === typeof elementType &&
+              null !== elementType &&
+              elementType.$$typeof === REACT_LAZY_TYPE &&
+              callLazyInitInDEV(elementType) === current.type))
+        )
+          return (
+            (current = useFiber(current, element.props)),
+            coerceRef(current, element),
+            (current.return = returnFiber),
+            (current._debugOwner = element._owner),
+            (current._debugInfo = currentDebugInfo),
+            current
+          );
+        current = createFiberFromElement(element, returnFiber.mode, lanes);
+        coerceRef(current, element);
+        current.return = returnFiber;
+        current._debugInfo = currentDebugInfo;
+        return current;
+      }
+      function updatePortal(returnFiber, current, portal, lanes) {
+        if (
+          null === current ||
+          4 !== current.tag ||
+          current.stateNode.containerInfo !== portal.containerInfo ||
+          current.stateNode.implementation !== portal.implementation
+        )
+          return (
+            (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),
+            (current.return = returnFiber),
+            (current._debugInfo = currentDebugInfo),
+            current
+          );
+        current = useFiber(current, portal.children || []);
+        current.return = returnFiber;
+        current._debugInfo = currentDebugInfo;
+        return current;
+      }
+      function updateFragment(returnFiber, current, fragment, lanes, key) {
+        if (null === current || 7 !== current.tag)
+          return (
+            (current = createFiberFromFragment(
+              fragment,
+              returnFiber.mode,
+              lanes,
+              key
+            )),
+            (current.return = returnFiber),
+            (current._debugOwner = returnFiber),
+            (current._debugTask = returnFiber._debugTask),
+            (current._debugInfo = currentDebugInfo),
+            current
+          );
+        current = useFiber(current, fragment);
+        current.return = returnFiber;
+        current._debugInfo = currentDebugInfo;
+        return current;
+      }
+      function createChild(returnFiber, newChild, lanes) {
+        if (
+          ("string" === typeof newChild && "" !== newChild) ||
+          "number" === typeof newChild ||
+          "bigint" === typeof newChild
+        )
+          return (
+            (newChild = createFiberFromText(
+              "" + newChild,
+              returnFiber.mode,
+              lanes
+            )),
+            (newChild.return = returnFiber),
+            (newChild._debugOwner = returnFiber),
+            (newChild._debugTask = returnFiber._debugTask),
+            (newChild._debugInfo = currentDebugInfo),
+            newChild
+          );
+        if ("object" === typeof newChild && null !== newChild) {
+          switch (newChild.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              return (
+                (lanes = createFiberFromElement(
+                  newChild,
+                  returnFiber.mode,
+                  lanes
+                )),
+                coerceRef(lanes, newChild),
+                (lanes.return = returnFiber),
+                (returnFiber = pushDebugInfo(newChild._debugInfo)),
+                (lanes._debugInfo = currentDebugInfo),
+                (currentDebugInfo = returnFiber),
+                lanes
+              );
+            case REACT_PORTAL_TYPE:
+              return (
+                (newChild = createFiberFromPortal(
+                  newChild,
+                  returnFiber.mode,
+                  lanes
+                )),
+                (newChild.return = returnFiber),
+                (newChild._debugInfo = currentDebugInfo),
+                newChild
+              );
+            case REACT_LAZY_TYPE:
+              var _prevDebugInfo = pushDebugInfo(newChild._debugInfo);
+              newChild = callLazyInitInDEV(newChild);
+              returnFiber = createChild(returnFiber, newChild, lanes);
+              currentDebugInfo = _prevDebugInfo;
+              return returnFiber;
+          }
+          if (isArrayImpl(newChild) || getIteratorFn(newChild))
+            return (
+              (lanes = createFiberFromFragment(
+                newChild,
+                returnFiber.mode,
+                lanes,
+                null
+              )),
+              (lanes.return = returnFiber),
+              (lanes._debugOwner = returnFiber),
+              (lanes._debugTask = returnFiber._debugTask),
+              (returnFiber = pushDebugInfo(newChild._debugInfo)),
+              (lanes._debugInfo = currentDebugInfo),
+              (currentDebugInfo = returnFiber),
+              lanes
+            );
+          if ("function" === typeof newChild.then)
+            return (
+              (_prevDebugInfo = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = createChild(
+                returnFiber,
+                unwrapThenable(newChild),
+                lanes
+              )),
+              (currentDebugInfo = _prevDebugInfo),
+              returnFiber
+            );
+          if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+            return createChild(
+              returnFiber,
+              readContextDuringReconciliation(returnFiber, newChild),
+              lanes
+            );
+          throwOnInvalidObjectType(returnFiber, newChild);
+        }
+        "function" === typeof newChild &&
+          warnOnFunctionType(returnFiber, newChild);
+        "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild);
+        return null;
+      }
+      function updateSlot(returnFiber, oldFiber, newChild, lanes) {
+        var key = null !== oldFiber ? oldFiber.key : null;
+        if (
+          ("string" === typeof newChild && "" !== newChild) ||
+          "number" === typeof newChild ||
+          "bigint" === typeof newChild
+        )
+          return null !== key
+            ? null
+            : updateTextNode(returnFiber, oldFiber, "" + newChild, lanes);
+        if ("object" === typeof newChild && null !== newChild) {
+          switch (newChild.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              return newChild.key === key
+                ? ((key = pushDebugInfo(newChild._debugInfo)),
+                  (returnFiber = updateElement(
+                    returnFiber,
+                    oldFiber,
+                    newChild,
+                    lanes
+                  )),
+                  (currentDebugInfo = key),
+                  returnFiber)
+                : null;
+            case REACT_PORTAL_TYPE:
+              return newChild.key === key
+                ? updatePortal(returnFiber, oldFiber, newChild, lanes)
+                : null;
+            case REACT_LAZY_TYPE:
+              return (
+                (key = pushDebugInfo(newChild._debugInfo)),
+                (newChild = callLazyInitInDEV(newChild)),
+                (returnFiber = updateSlot(
+                  returnFiber,
+                  oldFiber,
+                  newChild,
+                  lanes
+                )),
+                (currentDebugInfo = key),
+                returnFiber
+              );
+          }
+          if (isArrayImpl(newChild) || getIteratorFn(newChild)) {
+            if (null !== key) return null;
+            key = pushDebugInfo(newChild._debugInfo);
+            returnFiber = updateFragment(
+              returnFiber,
+              oldFiber,
+              newChild,
+              lanes,
+              null
+            );
+            currentDebugInfo = key;
+            return returnFiber;
+          }
+          if ("function" === typeof newChild.then)
+            return (
+              (key = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = updateSlot(
+                returnFiber,
+                oldFiber,
+                unwrapThenable(newChild),
+                lanes
+              )),
+              (currentDebugInfo = key),
+              returnFiber
+            );
+          if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+            return updateSlot(
+              returnFiber,
+              oldFiber,
+              readContextDuringReconciliation(returnFiber, newChild),
+              lanes
+            );
+          throwOnInvalidObjectType(returnFiber, newChild);
+        }
+        "function" === typeof newChild &&
+          warnOnFunctionType(returnFiber, newChild);
+        "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild);
+        return null;
+      }
+      function updateFromMap(
+        existingChildren,
+        returnFiber,
+        newIdx,
+        newChild,
+        lanes
+      ) {
+        if (
+          ("string" === typeof newChild && "" !== newChild) ||
+          "number" === typeof newChild ||
+          "bigint" === typeof newChild
+        )
+          return (
+            (existingChildren = existingChildren.get(newIdx) || null),
+            updateTextNode(returnFiber, existingChildren, "" + newChild, lanes)
+          );
+        if ("object" === typeof newChild && null !== newChild) {
+          switch (newChild.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              return (
+                (newIdx =
+                  existingChildren.get(
+                    null === newChild.key ? newIdx : newChild.key
+                  ) || null),
+                (existingChildren = pushDebugInfo(newChild._debugInfo)),
+                (returnFiber = updateElement(
+                  returnFiber,
+                  newIdx,
+                  newChild,
+                  lanes
+                )),
+                (currentDebugInfo = existingChildren),
+                returnFiber
+              );
+            case REACT_PORTAL_TYPE:
+              return (
+                (existingChildren =
+                  existingChildren.get(
+                    null === newChild.key ? newIdx : newChild.key
+                  ) || null),
+                updatePortal(returnFiber, existingChildren, newChild, lanes)
+              );
+            case REACT_LAZY_TYPE:
+              var _prevDebugInfo7 = pushDebugInfo(newChild._debugInfo);
+              newChild = callLazyInitInDEV(newChild);
+              returnFiber = updateFromMap(
+                existingChildren,
+                returnFiber,
+                newIdx,
+                newChild,
+                lanes
+              );
+              currentDebugInfo = _prevDebugInfo7;
+              return returnFiber;
+          }
+          if (isArrayImpl(newChild) || getIteratorFn(newChild))
+            return (
+              (newIdx = existingChildren.get(newIdx) || null),
+              (existingChildren = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = updateFragment(
+                returnFiber,
+                newIdx,
+                newChild,
+                lanes,
+                null
+              )),
+              (currentDebugInfo = existingChildren),
+              returnFiber
+            );
+          if ("function" === typeof newChild.then)
+            return (
+              (_prevDebugInfo7 = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = updateFromMap(
+                existingChildren,
+                returnFiber,
+                newIdx,
+                unwrapThenable(newChild),
+                lanes
+              )),
+              (currentDebugInfo = _prevDebugInfo7),
+              returnFiber
+            );
+          if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+            return updateFromMap(
+              existingChildren,
+              returnFiber,
+              newIdx,
+              readContextDuringReconciliation(returnFiber, newChild),
+              lanes
+            );
+          throwOnInvalidObjectType(returnFiber, newChild);
+        }
+        "function" === typeof newChild &&
+          warnOnFunctionType(returnFiber, newChild);
+        "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild);
+        return null;
+      }
+      function warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys) {
+        if ("object" !== typeof child || null === child) return knownKeys;
+        switch (child.$$typeof) {
+          case REACT_ELEMENT_TYPE:
+          case REACT_PORTAL_TYPE:
+            warnForMissingKey(returnFiber, workInProgress, child);
+            var key = child.key;
+            if ("string" !== typeof key) break;
+            if (null === knownKeys) {
+              knownKeys = new Set();
+              knownKeys.add(key);
+              break;
+            }
+            if (!knownKeys.has(key)) {
+              knownKeys.add(key);
+              break;
+            }
+            runWithFiberInDEV(workInProgress, function () {
+              console.error(
+                "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted \u2014 the behavior is unsupported and could change in a future version.",
+                key
+              );
+            });
+            break;
+          case REACT_LAZY_TYPE:
+            (child = callLazyInitInDEV(child)),
+              warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys);
+        }
+        return knownKeys;
+      }
+      function reconcileChildrenArray(
+        returnFiber,
+        currentFirstChild,
+        newChildren,
+        lanes
+      ) {
+        for (
+          var knownKeys = null,
+            resultingFirstChild = null,
+            previousNewFiber = null,
+            oldFiber = currentFirstChild,
+            newIdx = (currentFirstChild = 0),
+            nextOldFiber = null;
+          null !== oldFiber && newIdx < newChildren.length;
+          newIdx++
+        ) {
+          oldFiber.index > newIdx
+            ? ((nextOldFiber = oldFiber), (oldFiber = null))
+            : (nextOldFiber = oldFiber.sibling);
+          var newFiber = updateSlot(
+            returnFiber,
+            oldFiber,
+            newChildren[newIdx],
+            lanes
+          );
+          if (null === newFiber) {
+            null === oldFiber && (oldFiber = nextOldFiber);
+            break;
+          }
+          knownKeys = warnOnInvalidKey(
+            returnFiber,
+            newFiber,
+            newChildren[newIdx],
+            knownKeys
+          );
+          shouldTrackSideEffects &&
+            oldFiber &&
+            null === newFiber.alternate &&
+            deleteChild(returnFiber, oldFiber);
+          currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);
+          null === previousNewFiber
+            ? (resultingFirstChild = newFiber)
+            : (previousNewFiber.sibling = newFiber);
+          previousNewFiber = newFiber;
+          oldFiber = nextOldFiber;
+        }
+        if (newIdx === newChildren.length)
+          return (
+            deleteRemainingChildren(returnFiber, oldFiber),
+            isHydrating && pushTreeFork(returnFiber, newIdx),
+            resultingFirstChild
+          );
+        if (null === oldFiber) {
+          for (; newIdx < newChildren.length; newIdx++)
+            (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),
+              null !== oldFiber &&
+                ((knownKeys = warnOnInvalidKey(
+                  returnFiber,
+                  oldFiber,
+                  newChildren[newIdx],
+                  knownKeys
+                )),
+                (currentFirstChild = placeChild(
+                  oldFiber,
+                  currentFirstChild,
+                  newIdx
+                )),
+                null === previousNewFiber
+                  ? (resultingFirstChild = oldFiber)
+                  : (previousNewFiber.sibling = oldFiber),
+                (previousNewFiber = oldFiber));
+          isHydrating && pushTreeFork(returnFiber, newIdx);
+          return resultingFirstChild;
+        }
+        for (
+          oldFiber = mapRemainingChildren(oldFiber);
+          newIdx < newChildren.length;
+          newIdx++
+        )
+          (nextOldFiber = updateFromMap(
+            oldFiber,
+            returnFiber,
+            newIdx,
+            newChildren[newIdx],
+            lanes
+          )),
+            null !== nextOldFiber &&
+              ((knownKeys = warnOnInvalidKey(
+                returnFiber,
+                nextOldFiber,
+                newChildren[newIdx],
+                knownKeys
+              )),
+              shouldTrackSideEffects &&
+                null !== nextOldFiber.alternate &&
+                oldFiber.delete(
+                  null === nextOldFiber.key ? newIdx : nextOldFiber.key
+                ),
+              (currentFirstChild = placeChild(
+                nextOldFiber,
+                currentFirstChild,
+                newIdx
+              )),
+              null === previousNewFiber
+                ? (resultingFirstChild = nextOldFiber)
+                : (previousNewFiber.sibling = nextOldFiber),
+              (previousNewFiber = nextOldFiber));
+        shouldTrackSideEffects &&
+          oldFiber.forEach(function (child) {
+            return deleteChild(returnFiber, child);
+          });
+        isHydrating && pushTreeFork(returnFiber, newIdx);
+        return resultingFirstChild;
+      }
+      function reconcileChildrenIterator(
+        returnFiber,
+        currentFirstChild,
+        newChildren,
+        lanes
+      ) {
+        if (null == newChildren)
+          throw Error("An iterable object provided no iterator.");
+        for (
+          var resultingFirstChild = null,
+            previousNewFiber = null,
+            oldFiber = currentFirstChild,
+            newIdx = (currentFirstChild = 0),
+            nextOldFiber = null,
+            knownKeys = null,
+            step = newChildren.next();
+          null !== oldFiber && !step.done;
+          newIdx++, step = newChildren.next()
+        ) {
+          oldFiber.index > newIdx
+            ? ((nextOldFiber = oldFiber), (oldFiber = null))
+            : (nextOldFiber = oldFiber.sibling);
+          var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);
+          if (null === newFiber) {
+            null === oldFiber && (oldFiber = nextOldFiber);
+            break;
+          }
+          knownKeys = warnOnInvalidKey(
+            returnFiber,
+            newFiber,
+            step.value,
+            knownKeys
+          );
+          shouldTrackSideEffects &&
+            oldFiber &&
+            null === newFiber.alternate &&
+            deleteChild(returnFiber, oldFiber);
+          currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);
+          null === previousNewFiber
+            ? (resultingFirstChild = newFiber)
+            : (previousNewFiber.sibling = newFiber);
+          previousNewFiber = newFiber;
+          oldFiber = nextOldFiber;
+        }
+        if (step.done)
+          return (
+            deleteRemainingChildren(returnFiber, oldFiber),
+            isHydrating && pushTreeFork(returnFiber, newIdx),
+            resultingFirstChild
+          );
+        if (null === oldFiber) {
+          for (; !step.done; newIdx++, step = newChildren.next())
+            (oldFiber = createChild(returnFiber, step.value, lanes)),
+              null !== oldFiber &&
+                ((knownKeys = warnOnInvalidKey(
+                  returnFiber,
+                  oldFiber,
+                  step.value,
+                  knownKeys
+                )),
+                (currentFirstChild = placeChild(
+                  oldFiber,
+                  currentFirstChild,
+                  newIdx
+                )),
+                null === previousNewFiber
+                  ? (resultingFirstChild = oldFiber)
+                  : (previousNewFiber.sibling = oldFiber),
+                (previousNewFiber = oldFiber));
+          isHydrating && pushTreeFork(returnFiber, newIdx);
+          return resultingFirstChild;
+        }
+        for (
+          oldFiber = mapRemainingChildren(oldFiber);
+          !step.done;
+          newIdx++, step = newChildren.next()
+        )
+          (nextOldFiber = updateFromMap(
+            oldFiber,
+            returnFiber,
+            newIdx,
+            step.value,
+            lanes
+          )),
+            null !== nextOldFiber &&
+              ((knownKeys = warnOnInvalidKey(
+                returnFiber,
+                nextOldFiber,
+                step.value,
+                knownKeys
+              )),
+              shouldTrackSideEffects &&
+                null !== nextOldFiber.alternate &&
+                oldFiber.delete(
+                  null === nextOldFiber.key ? newIdx : nextOldFiber.key
+                ),
+              (currentFirstChild = placeChild(
+                nextOldFiber,
+                currentFirstChild,
+                newIdx
+              )),
+              null === previousNewFiber
+                ? (resultingFirstChild = nextOldFiber)
+                : (previousNewFiber.sibling = nextOldFiber),
+              (previousNewFiber = nextOldFiber));
+        shouldTrackSideEffects &&
+          oldFiber.forEach(function (child) {
+            return deleteChild(returnFiber, child);
+          });
+        isHydrating && pushTreeFork(returnFiber, newIdx);
+        return resultingFirstChild;
+      }
+      function reconcileChildFibersImpl(
+        returnFiber,
+        currentFirstChild,
+        newChild,
+        lanes
+      ) {
+        "object" === typeof newChild &&
+          null !== newChild &&
+          newChild.type === REACT_FRAGMENT_TYPE &&
+          null === newChild.key &&
+          (validateFragmentProps(newChild, null, returnFiber),
+          (newChild = newChild.props.children));
+        if ("object" === typeof newChild && null !== newChild) {
+          switch (newChild.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              var prevDebugInfo = pushDebugInfo(newChild._debugInfo);
+              a: {
+                for (var key = newChild.key; null !== currentFirstChild; ) {
+                  if (currentFirstChild.key === key) {
+                    key = newChild.type;
+                    if (key === REACT_FRAGMENT_TYPE) {
+                      if (7 === currentFirstChild.tag) {
+                        deleteRemainingChildren(
+                          returnFiber,
+                          currentFirstChild.sibling
+                        );
+                        lanes = useFiber(
+                          currentFirstChild,
+                          newChild.props.children
+                        );
+                        lanes.return = returnFiber;
+                        lanes._debugOwner = newChild._owner;
+                        lanes._debugInfo = currentDebugInfo;
+                        validateFragmentProps(newChild, lanes, returnFiber);
+                        returnFiber = lanes;
+                        break a;
+                      }
+                    } else if (
+                      currentFirstChild.elementType === key ||
+                      isCompatibleFamilyForHotReloading(
+                        currentFirstChild,
+                        newChild
+                      ) ||
+                      ("object" === typeof key &&
+                        null !== key &&
+                        key.$$typeof === REACT_LAZY_TYPE &&
+                        callLazyInitInDEV(key) === currentFirstChild.type)
+                    ) {
+                      deleteRemainingChildren(
+                        returnFiber,
+                        currentFirstChild.sibling
+                      );
+                      lanes = useFiber(currentFirstChild, newChild.props);
+                      coerceRef(lanes, newChild);
+                      lanes.return = returnFiber;
+                      lanes._debugOwner = newChild._owner;
+                      lanes._debugInfo = currentDebugInfo;
+                      returnFiber = lanes;
+                      break a;
+                    }
+                    deleteRemainingChildren(returnFiber, currentFirstChild);
+                    break;
+                  } else deleteChild(returnFiber, currentFirstChild);
+                  currentFirstChild = currentFirstChild.sibling;
+                }
+                newChild.type === REACT_FRAGMENT_TYPE
+                  ? ((lanes = createFiberFromFragment(
+                      newChild.props.children,
+                      returnFiber.mode,
+                      lanes,
+                      newChild.key
+                    )),
+                    (lanes.return = returnFiber),
+                    (lanes._debugOwner = returnFiber),
+                    (lanes._debugTask = returnFiber._debugTask),
+                    (lanes._debugInfo = currentDebugInfo),
+                    validateFragmentProps(newChild, lanes, returnFiber),
+                    (returnFiber = lanes))
+                  : ((lanes = createFiberFromElement(
+                      newChild,
+                      returnFiber.mode,
+                      lanes
+                    )),
+                    coerceRef(lanes, newChild),
+                    (lanes.return = returnFiber),
+                    (lanes._debugInfo = currentDebugInfo),
+                    (returnFiber = lanes));
+              }
+              returnFiber = placeSingleChild(returnFiber);
+              currentDebugInfo = prevDebugInfo;
+              return returnFiber;
+            case REACT_PORTAL_TYPE:
+              a: {
+                prevDebugInfo = newChild;
+                for (
+                  newChild = prevDebugInfo.key;
+                  null !== currentFirstChild;
+
+                ) {
+                  if (currentFirstChild.key === newChild)
+                    if (
+                      4 === currentFirstChild.tag &&
+                      currentFirstChild.stateNode.containerInfo ===
+                        prevDebugInfo.containerInfo &&
+                      currentFirstChild.stateNode.implementation ===
+                        prevDebugInfo.implementation
+                    ) {
+                      deleteRemainingChildren(
+                        returnFiber,
+                        currentFirstChild.sibling
+                      );
+                      lanes = useFiber(
+                        currentFirstChild,
+                        prevDebugInfo.children || []
+                      );
+                      lanes.return = returnFiber;
+                      returnFiber = lanes;
+                      break a;
+                    } else {
+                      deleteRemainingChildren(returnFiber, currentFirstChild);
+                      break;
+                    }
+                  else deleteChild(returnFiber, currentFirstChild);
+                  currentFirstChild = currentFirstChild.sibling;
+                }
+                lanes = createFiberFromPortal(
+                  prevDebugInfo,
+                  returnFiber.mode,
+                  lanes
+                );
+                lanes.return = returnFiber;
+                returnFiber = lanes;
+              }
+              return placeSingleChild(returnFiber);
+            case REACT_LAZY_TYPE:
+              return (
+                (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),
+                (newChild = callLazyInitInDEV(newChild)),
+                (returnFiber = reconcileChildFibersImpl(
+                  returnFiber,
+                  currentFirstChild,
+                  newChild,
+                  lanes
+                )),
+                (currentDebugInfo = prevDebugInfo),
+                returnFiber
+              );
+          }
+          if (isArrayImpl(newChild))
+            return (
+              (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = reconcileChildrenArray(
+                returnFiber,
+                currentFirstChild,
+                newChild,
+                lanes
+              )),
+              (currentDebugInfo = prevDebugInfo),
+              returnFiber
+            );
+          if (getIteratorFn(newChild)) {
+            prevDebugInfo = pushDebugInfo(newChild._debugInfo);
+            key = getIteratorFn(newChild);
+            if ("function" !== typeof key)
+              throw Error(
+                "An object is not an iterable. This error is likely caused by a bug in React. Please file an issue."
+              );
+            var newChildren = key.call(newChild);
+            if (newChildren === newChild) {
+              if (
+                0 !== returnFiber.tag ||
+                "[object GeneratorFunction]" !==
+                  Object.prototype.toString.call(returnFiber.type) ||
+                "[object Generator]" !==
+                  Object.prototype.toString.call(newChildren)
+              )
+                didWarnAboutGenerators ||
+                  console.error(
+                    "Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."
+                  ),
+                  (didWarnAboutGenerators = !0);
+            } else
+              newChild.entries !== key ||
+                didWarnAboutMaps ||
+                (console.error(
+                  "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+                ),
+                (didWarnAboutMaps = !0));
+            returnFiber = reconcileChildrenIterator(
+              returnFiber,
+              currentFirstChild,
+              newChildren,
+              lanes
+            );
+            currentDebugInfo = prevDebugInfo;
+            return returnFiber;
+          }
+          if ("function" === typeof newChild.then)
+            return (
+              (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),
+              (returnFiber = reconcileChildFibersImpl(
+                returnFiber,
+                currentFirstChild,
+                unwrapThenable(newChild),
+                lanes
+              )),
+              (currentDebugInfo = prevDebugInfo),
+              returnFiber
+            );
+          if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+            return reconcileChildFibersImpl(
+              returnFiber,
+              currentFirstChild,
+              readContextDuringReconciliation(returnFiber, newChild),
+              lanes
+            );
+          throwOnInvalidObjectType(returnFiber, newChild);
+        }
+        if (
+          ("string" === typeof newChild && "" !== newChild) ||
+          "number" === typeof newChild ||
+          "bigint" === typeof newChild
+        )
+          return (
+            (prevDebugInfo = "" + newChild),
+            null !== currentFirstChild && 6 === currentFirstChild.tag
+              ? (deleteRemainingChildren(
+                  returnFiber,
+                  currentFirstChild.sibling
+                ),
+                (lanes = useFiber(currentFirstChild, prevDebugInfo)),
+                (lanes.return = returnFiber),
+                (returnFiber = lanes))
+              : (deleteRemainingChildren(returnFiber, currentFirstChild),
+                (lanes = createFiberFromText(
+                  prevDebugInfo,
+                  returnFiber.mode,
+                  lanes
+                )),
+                (lanes.return = returnFiber),
+                (lanes._debugOwner = returnFiber),
+                (lanes._debugTask = returnFiber._debugTask),
+                (lanes._debugInfo = currentDebugInfo),
+                (returnFiber = lanes)),
+            placeSingleChild(returnFiber)
+          );
+        "function" === typeof newChild &&
+          warnOnFunctionType(returnFiber, newChild);
+        "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild);
+        return deleteRemainingChildren(returnFiber, currentFirstChild);
+      }
+      return function (returnFiber, currentFirstChild, newChild, lanes) {
+        var prevDebugInfo = currentDebugInfo;
+        currentDebugInfo = null;
+        try {
+          thenableIndexCounter = 0;
+          var firstChildFiber = reconcileChildFibersImpl(
+            returnFiber,
+            currentFirstChild,
+            newChild,
+            lanes
+          );
+          thenableState = null;
+          return firstChildFiber;
+        } catch (x) {
+          if (x === SuspenseException || x === SuspenseActionException) throw x;
+          var fiber = createFiber(29, x, null, returnFiber.mode);
+          fiber.lanes = lanes;
+          fiber.return = returnFiber;
+          var debugInfo = (fiber._debugInfo = currentDebugInfo);
+          fiber._debugOwner = returnFiber._debugOwner;
+          fiber._debugTask = returnFiber._debugTask;
+          if (null != debugInfo)
+            for (var i = debugInfo.length - 1; 0 <= i; i--)
+              if ("string" === typeof debugInfo[i].stack) {
+                fiber._debugOwner = debugInfo[i];
+                fiber._debugTask = debugInfo[i].debugTask;
+                break;
+              }
+          return fiber;
+        } finally {
+          currentDebugInfo = prevDebugInfo;
+        }
+      };
+    }
+    function pushPrimaryTreeSuspenseHandler(handler) {
+      var current = handler.alternate;
+      push(
+        suspenseStackCursor,
+        suspenseStackCursor.current & SubtreeSuspenseContextMask,
+        handler
+      );
+      push(suspenseHandlerStackCursor, handler, handler);
+      null === shellBoundary &&
+        (null === current || null !== currentTreeHiddenStackCursor.current
+          ? (shellBoundary = handler)
+          : null !== current.memoizedState && (shellBoundary = handler));
+    }
+    function pushOffscreenSuspenseHandler(fiber) {
+      if (22 === fiber.tag) {
+        if (
+          (push(suspenseStackCursor, suspenseStackCursor.current, fiber),
+          push(suspenseHandlerStackCursor, fiber, fiber),
+          null === shellBoundary)
+        ) {
+          var current = fiber.alternate;
+          null !== current &&
+            null !== current.memoizedState &&
+            (shellBoundary = fiber);
+        }
+      } else reuseSuspenseHandlerOnStack(fiber);
+    }
+    function reuseSuspenseHandlerOnStack(fiber) {
+      push(suspenseStackCursor, suspenseStackCursor.current, fiber);
+      push(
+        suspenseHandlerStackCursor,
+        suspenseHandlerStackCursor.current,
+        fiber
+      );
+    }
+    function popSuspenseHandler(fiber) {
+      pop(suspenseHandlerStackCursor, fiber);
+      shellBoundary === fiber && (shellBoundary = null);
+      pop(suspenseStackCursor, fiber);
+    }
+    function findFirstSuspended(row) {
+      for (var node = row; null !== node; ) {
+        if (13 === node.tag) {
+          var state = node.memoizedState;
+          if (
+            null !== state &&
+            ((state = state.dehydrated),
+            null === state ||
+              state.data === SUSPENSE_PENDING_START_DATA ||
+              isSuspenseInstanceFallback(state))
+          )
+            return node;
+        } else if (
+          19 === node.tag &&
+          void 0 !== node.memoizedProps.revealOrder
+        ) {
+          if (0 !== (node.flags & 128)) return node;
+        } else if (null !== node.child) {
+          node.child.return = node;
+          node = node.child;
+          continue;
+        }
+        if (node === row) break;
+        for (; null === node.sibling; ) {
+          if (null === node.return || node.return === row) return null;
+          node = node.return;
+        }
+        node.sibling.return = node.return;
+        node = node.sibling;
+      }
+      return null;
+    }
+    function warnOnInvalidCallback(callback) {
+      if (null !== callback && "function" !== typeof callback) {
+        var key = String(callback);
+        didWarnOnInvalidCallback.has(key) ||
+          (didWarnOnInvalidCallback.add(key),
+          console.error(
+            "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+            callback
+          ));
+      }
+    }
+    function applyDerivedStateFromProps(
+      workInProgress,
+      ctor,
+      getDerivedStateFromProps,
+      nextProps
+    ) {
+      var prevState = workInProgress.memoizedState,
+        partialState = getDerivedStateFromProps(nextProps, prevState);
+      if (workInProgress.mode & StrictLegacyMode) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          partialState = getDerivedStateFromProps(nextProps, prevState);
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      void 0 === partialState &&
+        ((ctor = getComponentNameFromType(ctor) || "Component"),
+        didWarnAboutUndefinedDerivedState.has(ctor) ||
+          (didWarnAboutUndefinedDerivedState.add(ctor),
+          console.error(
+            "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",
+            ctor
+          )));
+      prevState =
+        null === partialState || void 0 === partialState
+          ? prevState
+          : assign({}, prevState, partialState);
+      workInProgress.memoizedState = prevState;
+      0 === workInProgress.lanes &&
+        (workInProgress.updateQueue.baseState = prevState);
+    }
+    function checkShouldComponentUpdate(
+      workInProgress,
+      ctor,
+      oldProps,
+      newProps,
+      oldState,
+      newState,
+      nextContext
+    ) {
+      var instance = workInProgress.stateNode;
+      if ("function" === typeof instance.shouldComponentUpdate) {
+        oldProps = instance.shouldComponentUpdate(
+          newProps,
+          newState,
+          nextContext
+        );
+        if (workInProgress.mode & StrictLegacyMode) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            oldProps = instance.shouldComponentUpdate(
+              newProps,
+              newState,
+              nextContext
+            );
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+        void 0 === oldProps &&
+          console.error(
+            "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.",
+            getComponentNameFromType(ctor) || "Component"
+          );
+        return oldProps;
+      }
+      return ctor.prototype && ctor.prototype.isPureReactComponent
+        ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)
+        : !0;
+    }
+    function callComponentWillReceiveProps(
+      workInProgress,
+      instance,
+      newProps,
+      nextContext
+    ) {
+      var oldState = instance.state;
+      "function" === typeof instance.componentWillReceiveProps &&
+        instance.componentWillReceiveProps(newProps, nextContext);
+      "function" === typeof instance.UNSAFE_componentWillReceiveProps &&
+        instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);
+      instance.state !== oldState &&
+        ((workInProgress =
+          getComponentNameFromFiber(workInProgress) || "Component"),
+        didWarnAboutStateAssignmentForComponent.has(workInProgress) ||
+          (didWarnAboutStateAssignmentForComponent.add(workInProgress),
+          console.error(
+            "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+            workInProgress
+          )),
+        classComponentUpdater.enqueueReplaceState(
+          instance,
+          instance.state,
+          null
+        ));
+    }
+    function resolveClassComponentProps(Component, baseProps) {
+      var newProps = baseProps;
+      if ("ref" in baseProps) {
+        newProps = {};
+        for (var propName in baseProps)
+          "ref" !== propName && (newProps[propName] = baseProps[propName]);
+      }
+      if ((Component = Component.defaultProps)) {
+        newProps === baseProps && (newProps = assign({}, newProps));
+        for (var _propName in Component)
+          void 0 === newProps[_propName] &&
+            (newProps[_propName] = Component[_propName]);
+      }
+      return newProps;
+    }
+    function defaultOnUncaughtError(error) {
+      reportGlobalError(error);
+      console.warn(
+        "%s\n\n%s\n",
+        componentName
+          ? "An error occurred in the <" + componentName + "> component."
+          : "An error occurred in one of your React components.",
+        "Consider adding an error boundary to your tree to customize error handling behavior.\nVisit https://react.dev/link/error-boundaries to learn more about error boundaries."
+      );
+    }
+    function defaultOnCaughtError(error) {
+      var componentNameMessage = componentName
+          ? "The above error occurred in the <" + componentName + "> component."
+          : "The above error occurred in one of your React components.",
+        recreateMessage =
+          "React will try to recreate this component tree from scratch using the error boundary you provided, " +
+          ((errorBoundaryName || "Anonymous") + ".");
+      if (
+        "object" === typeof error &&
+        null !== error &&
+        "string" === typeof error.environmentName
+      ) {
+        var JSCompiler_inline_result = error.environmentName;
+        error = [
+          "%o\n\n%s\n\n%s\n",
+          error,
+          componentNameMessage,
+          recreateMessage
+        ].slice(0);
+        "string" === typeof error[0]
+          ? error.splice(
+              0,
+              1,
+              badgeFormat + error[0],
+              badgeStyle,
+              pad + JSCompiler_inline_result + pad,
+              resetStyle
+            )
+          : error.splice(
+              0,
+              0,
+              badgeFormat,
+              badgeStyle,
+              pad + JSCompiler_inline_result + pad,
+              resetStyle
+            );
+        error.unshift(console);
+        JSCompiler_inline_result = bind.apply(console.error, error);
+        JSCompiler_inline_result();
+      } else
+        console.error(
+          "%o\n\n%s\n\n%s\n",
+          error,
+          componentNameMessage,
+          recreateMessage
+        );
+    }
+    function defaultOnRecoverableError(error) {
+      reportGlobalError(error);
+    }
+    function logUncaughtError(root, errorInfo) {
+      try {
+        componentName = errorInfo.source
+          ? getComponentNameFromFiber(errorInfo.source)
+          : null;
+        errorBoundaryName = null;
+        var error = errorInfo.value;
+        if (null !== ReactSharedInternals.actQueue)
+          ReactSharedInternals.thrownErrors.push(error);
+        else {
+          var onUncaughtError = root.onUncaughtError;
+          onUncaughtError(error, { componentStack: errorInfo.stack });
+        }
+      } catch (e$5) {
+        setTimeout(function () {
+          throw e$5;
+        });
+      }
+    }
+    function logCaughtError(root, boundary, errorInfo) {
+      try {
+        componentName = errorInfo.source
+          ? getComponentNameFromFiber(errorInfo.source)
+          : null;
+        errorBoundaryName = getComponentNameFromFiber(boundary);
+        var onCaughtError = root.onCaughtError;
+        onCaughtError(errorInfo.value, {
+          componentStack: errorInfo.stack,
+          errorBoundary: 1 === boundary.tag ? boundary.stateNode : null
+        });
+      } catch (e$6) {
+        setTimeout(function () {
+          throw e$6;
+        });
+      }
+    }
+    function createRootErrorUpdate(root, errorInfo, lane) {
+      lane = createUpdate(lane);
+      lane.tag = CaptureUpdate;
+      lane.payload = { element: null };
+      lane.callback = function () {
+        runWithFiberInDEV(errorInfo.source, logUncaughtError, root, errorInfo);
+      };
+      return lane;
+    }
+    function createClassErrorUpdate(lane) {
+      lane = createUpdate(lane);
+      lane.tag = CaptureUpdate;
+      return lane;
+    }
+    function initializeClassErrorUpdate(update, root, fiber, errorInfo) {
+      var getDerivedStateFromError = fiber.type.getDerivedStateFromError;
+      if ("function" === typeof getDerivedStateFromError) {
+        var error = errorInfo.value;
+        update.payload = function () {
+          return getDerivedStateFromError(error);
+        };
+        update.callback = function () {
+          markFailedErrorBoundaryForHotReloading(fiber);
+          runWithFiberInDEV(
+            errorInfo.source,
+            logCaughtError,
+            root,
+            fiber,
+            errorInfo
+          );
+        };
+      }
+      var inst = fiber.stateNode;
+      null !== inst &&
+        "function" === typeof inst.componentDidCatch &&
+        (update.callback = function () {
+          markFailedErrorBoundaryForHotReloading(fiber);
+          runWithFiberInDEV(
+            errorInfo.source,
+            logCaughtError,
+            root,
+            fiber,
+            errorInfo
+          );
+          "function" !== typeof getDerivedStateFromError &&
+            (null === legacyErrorBoundariesThatAlreadyFailed
+              ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))
+              : legacyErrorBoundariesThatAlreadyFailed.add(this));
+          callComponentDidCatchInDEV(this, errorInfo);
+          "function" === typeof getDerivedStateFromError ||
+            (0 === (fiber.lanes & 2) &&
+              console.error(
+                "%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.",
+                getComponentNameFromFiber(fiber) || "Unknown"
+              ));
+        });
+    }
+    function throwException(
+      root,
+      returnFiber,
+      sourceFiber,
+      value,
+      rootRenderLanes
+    ) {
+      sourceFiber.flags |= 32768;
+      isDevToolsPresent && restorePendingUpdaters(root, rootRenderLanes);
+      if (
+        null !== value &&
+        "object" === typeof value &&
+        "function" === typeof value.then
+      ) {
+        returnFiber = sourceFiber.alternate;
+        null !== returnFiber &&
+          propagateParentContextChanges(
+            returnFiber,
+            sourceFiber,
+            rootRenderLanes,
+            !0
+          );
+        isHydrating && (didSuspendOrErrorDEV = !0);
+        sourceFiber = suspenseHandlerStackCursor.current;
+        if (null !== sourceFiber) {
+          switch (sourceFiber.tag) {
+            case 13:
+              return (
+                null === shellBoundary
+                  ? renderDidSuspendDelayIfPossible()
+                  : null === sourceFiber.alternate &&
+                    workInProgressRootExitStatus === RootInProgress &&
+                    (workInProgressRootExitStatus = RootSuspended),
+                (sourceFiber.flags &= -257),
+                (sourceFiber.flags |= 65536),
+                (sourceFiber.lanes = rootRenderLanes),
+                value === noopSuspenseyCommitThenable
+                  ? (sourceFiber.flags |= 16384)
+                  : ((returnFiber = sourceFiber.updateQueue),
+                    null === returnFiber
+                      ? (sourceFiber.updateQueue = new Set([value]))
+                      : returnFiber.add(value),
+                    attachPingListener(root, value, rootRenderLanes)),
+                !1
+              );
+            case 22:
+              return (
+                (sourceFiber.flags |= 65536),
+                value === noopSuspenseyCommitThenable
+                  ? (sourceFiber.flags |= 16384)
+                  : ((returnFiber = sourceFiber.updateQueue),
+                    null === returnFiber
+                      ? ((returnFiber = {
+                          transitions: null,
+                          markerInstances: null,
+                          retryQueue: new Set([value])
+                        }),
+                        (sourceFiber.updateQueue = returnFiber))
+                      : ((sourceFiber = returnFiber.retryQueue),
+                        null === sourceFiber
+                          ? (returnFiber.retryQueue = new Set([value]))
+                          : sourceFiber.add(value)),
+                    attachPingListener(root, value, rootRenderLanes)),
+                !1
+              );
+          }
+          throw Error(
+            "Unexpected Suspense handler tag (" +
+              sourceFiber.tag +
+              "). This is a bug in React."
+          );
+        }
+        attachPingListener(root, value, rootRenderLanes);
+        renderDidSuspendDelayIfPossible();
+        return !1;
+      }
+      if (isHydrating)
+        return (
+          (didSuspendOrErrorDEV = !0),
+          (returnFiber = suspenseHandlerStackCursor.current),
+          null !== returnFiber
+            ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),
+              (returnFiber.flags |= 65536),
+              (returnFiber.lanes = rootRenderLanes),
+              value !== HydrationMismatchException &&
+                queueHydrationError(
+                  createCapturedValueAtFiber(
+                    Error(
+                      "There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.",
+                      { cause: value }
+                    ),
+                    sourceFiber
+                  )
+                ))
+            : (value !== HydrationMismatchException &&
+                queueHydrationError(
+                  createCapturedValueAtFiber(
+                    Error(
+                      "There was an error while hydrating but React was able to recover by instead client rendering the entire root.",
+                      { cause: value }
+                    ),
+                    sourceFiber
+                  )
+                ),
+              (root = root.current.alternate),
+              (root.flags |= 65536),
+              (rootRenderLanes &= -rootRenderLanes),
+              (root.lanes |= rootRenderLanes),
+              (value = createCapturedValueAtFiber(value, sourceFiber)),
+              (rootRenderLanes = createRootErrorUpdate(
+                root.stateNode,
+                value,
+                rootRenderLanes
+              )),
+              enqueueCapturedUpdate(root, rootRenderLanes),
+              workInProgressRootExitStatus !== RootSuspendedWithDelay &&
+                (workInProgressRootExitStatus = RootErrored)),
+          !1
+        );
+      var error = createCapturedValueAtFiber(
+        Error(
+          "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.",
+          { cause: value }
+        ),
+        sourceFiber
+      );
+      null === workInProgressRootConcurrentErrors
+        ? (workInProgressRootConcurrentErrors = [error])
+        : workInProgressRootConcurrentErrors.push(error);
+      workInProgressRootExitStatus !== RootSuspendedWithDelay &&
+        (workInProgressRootExitStatus = RootErrored);
+      if (null === returnFiber) return !0;
+      value = createCapturedValueAtFiber(value, sourceFiber);
+      sourceFiber = returnFiber;
+      do {
+        switch (sourceFiber.tag) {
+          case 3:
+            return (
+              (sourceFiber.flags |= 65536),
+              (root = rootRenderLanes & -rootRenderLanes),
+              (sourceFiber.lanes |= root),
+              (root = createRootErrorUpdate(
+                sourceFiber.stateNode,
+                value,
+                root
+              )),
+              enqueueCapturedUpdate(sourceFiber, root),
+              !1
+            );
+          case 1:
+            if (
+              ((returnFiber = sourceFiber.type),
+              (error = sourceFiber.stateNode),
+              0 === (sourceFiber.flags & 128) &&
+                ("function" === typeof returnFiber.getDerivedStateFromError ||
+                  (null !== error &&
+                    "function" === typeof error.componentDidCatch &&
+                    (null === legacyErrorBoundariesThatAlreadyFailed ||
+                      !legacyErrorBoundariesThatAlreadyFailed.has(error)))))
+            )
+              return (
+                (sourceFiber.flags |= 65536),
+                (rootRenderLanes &= -rootRenderLanes),
+                (sourceFiber.lanes |= rootRenderLanes),
+                (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),
+                initializeClassErrorUpdate(
+                  rootRenderLanes,
+                  root,
+                  sourceFiber,
+                  value
+                ),
+                enqueueCapturedUpdate(sourceFiber, rootRenderLanes),
+                !1
+              );
+        }
+        sourceFiber = sourceFiber.return;
+      } while (null !== sourceFiber);
+      return !1;
+    }
+    function reconcileChildren(
+      current,
+      workInProgress,
+      nextChildren,
+      renderLanes
+    ) {
+      workInProgress.child =
+        null === current
+          ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)
+          : reconcileChildFibers(
+              workInProgress,
+              current.child,
+              nextChildren,
+              renderLanes
+            );
+    }
+    function updateForwardRef(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      Component = Component.render;
+      var ref = workInProgress.ref;
+      if ("ref" in nextProps) {
+        var propsWithoutRef = {};
+        for (var key in nextProps)
+          "ref" !== key && (propsWithoutRef[key] = nextProps[key]);
+      } else propsWithoutRef = nextProps;
+      prepareToReadContext(workInProgress);
+      markComponentRenderStarted(workInProgress);
+      nextProps = renderWithHooks(
+        current,
+        workInProgress,
+        Component,
+        propsWithoutRef,
+        ref,
+        renderLanes
+      );
+      key = checkDidRenderIdHook();
+      markComponentRenderStopped();
+      if (null !== current && !didReceiveUpdate)
+        return (
+          bailoutHooks(current, workInProgress, renderLanes),
+          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+        );
+      isHydrating && key && pushMaterializedTreeId(workInProgress);
+      workInProgress.flags |= 1;
+      reconcileChildren(current, workInProgress, nextProps, renderLanes);
+      return workInProgress.child;
+    }
+    function updateMemoComponent(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      if (null === current) {
+        var type = Component.type;
+        if (
+          "function" === typeof type &&
+          !shouldConstruct(type) &&
+          void 0 === type.defaultProps &&
+          null === Component.compare
+        )
+          return (
+            (Component = resolveFunctionForHotReloading(type)),
+            (workInProgress.tag = 15),
+            (workInProgress.type = Component),
+            validateFunctionComponentInDev(workInProgress, type),
+            updateSimpleMemoComponent(
+              current,
+              workInProgress,
+              Component,
+              nextProps,
+              renderLanes
+            )
+          );
+        current = createFiberFromTypeAndProps(
+          Component.type,
+          null,
+          nextProps,
+          workInProgress,
+          workInProgress.mode,
+          renderLanes
+        );
+        current.ref = workInProgress.ref;
+        current.return = workInProgress;
+        return (workInProgress.child = current);
+      }
+      type = current.child;
+      if (!checkScheduledUpdateOrContext(current, renderLanes)) {
+        var prevProps = type.memoizedProps;
+        Component = Component.compare;
+        Component = null !== Component ? Component : shallowEqual;
+        if (
+          Component(prevProps, nextProps) &&
+          current.ref === workInProgress.ref
+        )
+          return bailoutOnAlreadyFinishedWork(
+            current,
+            workInProgress,
+            renderLanes
+          );
+      }
+      workInProgress.flags |= 1;
+      current = createWorkInProgress(type, nextProps);
+      current.ref = workInProgress.ref;
+      current.return = workInProgress;
+      return (workInProgress.child = current);
+    }
+    function updateSimpleMemoComponent(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      if (null !== current) {
+        var prevProps = current.memoizedProps;
+        if (
+          shallowEqual(prevProps, nextProps) &&
+          current.ref === workInProgress.ref &&
+          workInProgress.type === current.type
+        )
+          if (
+            ((didReceiveUpdate = !1),
+            (workInProgress.pendingProps = nextProps = prevProps),
+            checkScheduledUpdateOrContext(current, renderLanes))
+          )
+            0 !== (current.flags & 131072) && (didReceiveUpdate = !0);
+          else
+            return (
+              (workInProgress.lanes = current.lanes),
+              bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+            );
+      }
+      return updateFunctionComponent(
+        current,
+        workInProgress,
+        Component,
+        nextProps,
+        renderLanes
+      );
+    }
+    function updateOffscreenComponent(current, workInProgress, renderLanes) {
+      var nextProps = workInProgress.pendingProps,
+        nextChildren = nextProps.children,
+        prevState = null !== current ? current.memoizedState : null;
+      if ("hidden" === nextProps.mode) {
+        if (0 !== (workInProgress.flags & 128)) {
+          nextProps =
+            null !== prevState
+              ? prevState.baseLanes | renderLanes
+              : renderLanes;
+          if (null !== current) {
+            nextChildren = workInProgress.child = current.child;
+            for (prevState = 0; null !== nextChildren; )
+              (prevState =
+                prevState | nextChildren.lanes | nextChildren.childLanes),
+                (nextChildren = nextChildren.sibling);
+            workInProgress.childLanes = prevState & ~nextProps;
+          } else (workInProgress.childLanes = 0), (workInProgress.child = null);
+          return deferHiddenOffscreenComponent(
+            current,
+            workInProgress,
+            nextProps,
+            renderLanes
+          );
+        }
+        if (0 !== (renderLanes & 536870912))
+          (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),
+            null !== current &&
+              pushTransition(
+                workInProgress,
+                null !== prevState ? prevState.cachePool : null
+              ),
+            null !== prevState
+              ? pushHiddenContext(workInProgress, prevState)
+              : reuseHiddenContextOnStack(workInProgress),
+            pushOffscreenSuspenseHandler(workInProgress);
+        else
+          return (
+            (workInProgress.lanes = workInProgress.childLanes = 536870912),
+            deferHiddenOffscreenComponent(
+              current,
+              workInProgress,
+              null !== prevState
+                ? prevState.baseLanes | renderLanes
+                : renderLanes,
+              renderLanes
+            )
+          );
+      } else
+        null !== prevState
+          ? (pushTransition(workInProgress, prevState.cachePool),
+            pushHiddenContext(workInProgress, prevState),
+            reuseSuspenseHandlerOnStack(workInProgress),
+            (workInProgress.memoizedState = null))
+          : (null !== current && pushTransition(workInProgress, null),
+            reuseHiddenContextOnStack(workInProgress),
+            reuseSuspenseHandlerOnStack(workInProgress));
+      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
+      return workInProgress.child;
+    }
+    function deferHiddenOffscreenComponent(
+      current,
+      workInProgress,
+      nextBaseLanes,
+      renderLanes
+    ) {
+      var JSCompiler_inline_result = peekCacheFromPool();
+      JSCompiler_inline_result =
+        null === JSCompiler_inline_result
+          ? null
+          : {
+              parent: CacheContext._currentValue,
+              pool: JSCompiler_inline_result
+            };
+      workInProgress.memoizedState = {
+        baseLanes: nextBaseLanes,
+        cachePool: JSCompiler_inline_result
+      };
+      null !== current && pushTransition(workInProgress, null);
+      reuseHiddenContextOnStack(workInProgress);
+      pushOffscreenSuspenseHandler(workInProgress);
+      null !== current &&
+        propagateParentContextChanges(current, workInProgress, renderLanes, !0);
+      return null;
+    }
+    function markRef(current, workInProgress) {
+      var ref = workInProgress.ref;
+      if (null === ref)
+        null !== current &&
+          null !== current.ref &&
+          (workInProgress.flags |= 4194816);
+      else {
+        if ("function" !== typeof ref && "object" !== typeof ref)
+          throw Error(
+            "Expected ref to be a function, an object returned by React.createRef(), or undefined/null."
+          );
+        if (null === current || current.ref !== ref)
+          workInProgress.flags |= 4194816;
+      }
+    }
+    function updateFunctionComponent(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      if (
+        Component.prototype &&
+        "function" === typeof Component.prototype.render
+      ) {
+        var componentName = getComponentNameFromType(Component) || "Unknown";
+        didWarnAboutBadClass[componentName] ||
+          (console.error(
+            "The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",
+            componentName,
+            componentName
+          ),
+          (didWarnAboutBadClass[componentName] = !0));
+      }
+      workInProgress.mode & StrictLegacyMode &&
+        ReactStrictModeWarnings.recordLegacyContextWarning(
+          workInProgress,
+          null
+        );
+      null === current &&
+        (validateFunctionComponentInDev(workInProgress, workInProgress.type),
+        Component.contextTypes &&
+          ((componentName = getComponentNameFromType(Component) || "Unknown"),
+          didWarnAboutContextTypes[componentName] ||
+            ((didWarnAboutContextTypes[componentName] = !0),
+            console.error(
+              "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",
+              componentName
+            ))));
+      prepareToReadContext(workInProgress);
+      markComponentRenderStarted(workInProgress);
+      Component = renderWithHooks(
+        current,
+        workInProgress,
+        Component,
+        nextProps,
+        void 0,
+        renderLanes
+      );
+      nextProps = checkDidRenderIdHook();
+      markComponentRenderStopped();
+      if (null !== current && !didReceiveUpdate)
+        return (
+          bailoutHooks(current, workInProgress, renderLanes),
+          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+        );
+      isHydrating && nextProps && pushMaterializedTreeId(workInProgress);
+      workInProgress.flags |= 1;
+      reconcileChildren(current, workInProgress, Component, renderLanes);
+      return workInProgress.child;
+    }
+    function replayFunctionComponent(
+      current,
+      workInProgress,
+      nextProps,
+      Component,
+      secondArg,
+      renderLanes
+    ) {
+      prepareToReadContext(workInProgress);
+      markComponentRenderStarted(workInProgress);
+      hookTypesUpdateIndexDev = -1;
+      ignorePreviousDependencies =
+        null !== current && current.type !== workInProgress.type;
+      workInProgress.updateQueue = null;
+      nextProps = renderWithHooksAgain(
+        workInProgress,
+        Component,
+        nextProps,
+        secondArg
+      );
+      finishRenderingHooks(current, workInProgress);
+      Component = checkDidRenderIdHook();
+      markComponentRenderStopped();
+      if (null !== current && !didReceiveUpdate)
+        return (
+          bailoutHooks(current, workInProgress, renderLanes),
+          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+        );
+      isHydrating && Component && pushMaterializedTreeId(workInProgress);
+      workInProgress.flags |= 1;
+      reconcileChildren(current, workInProgress, nextProps, renderLanes);
+      return workInProgress.child;
+    }
+    function updateClassComponent(
+      current,
+      workInProgress,
+      Component,
+      nextProps,
+      renderLanes
+    ) {
+      switch (shouldErrorImpl(workInProgress)) {
+        case !1:
+          var _instance = workInProgress.stateNode,
+            state = new workInProgress.type(
+              workInProgress.memoizedProps,
+              _instance.context
+            ).state;
+          _instance.updater.enqueueSetState(_instance, state, null);
+          break;
+        case !0:
+          workInProgress.flags |= 128;
+          workInProgress.flags |= 65536;
+          _instance = Error("Simulated error coming from DevTools");
+          var lane = renderLanes & -renderLanes;
+          workInProgress.lanes |= lane;
+          state = workInProgressRoot;
+          if (null === state)
+            throw Error(
+              "Expected a work-in-progress root. This is a bug in React. Please file an issue."
+            );
+          lane = createClassErrorUpdate(lane);
+          initializeClassErrorUpdate(
+            lane,
+            state,
+            workInProgress,
+            createCapturedValueAtFiber(_instance, workInProgress)
+          );
+          enqueueCapturedUpdate(workInProgress, lane);
+      }
+      prepareToReadContext(workInProgress);
+      if (null === workInProgress.stateNode) {
+        state = emptyContextObject;
+        _instance = Component.contextType;
+        "contextType" in Component &&
+          null !== _instance &&
+          (void 0 === _instance || _instance.$$typeof !== REACT_CONTEXT_TYPE) &&
+          !didWarnAboutInvalidateContextType.has(Component) &&
+          (didWarnAboutInvalidateContextType.add(Component),
+          (lane =
+            void 0 === _instance
+              ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file."
+              : "object" !== typeof _instance
+                ? " However, it is set to a " + typeof _instance + "."
+                : _instance.$$typeof === REACT_CONSUMER_TYPE
+                  ? " Did you accidentally pass the Context.Consumer instead?"
+                  : " However, it is set to an object with keys {" +
+                    Object.keys(_instance).join(", ") +
+                    "}."),
+          console.error(
+            "%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",
+            getComponentNameFromType(Component) || "Component",
+            lane
+          ));
+        "object" === typeof _instance &&
+          null !== _instance &&
+          (state = readContext(_instance));
+        _instance = new Component(nextProps, state);
+        if (workInProgress.mode & StrictLegacyMode) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            _instance = new Component(nextProps, state);
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+        state = workInProgress.memoizedState =
+          null !== _instance.state && void 0 !== _instance.state
+            ? _instance.state
+            : null;
+        _instance.updater = classComponentUpdater;
+        workInProgress.stateNode = _instance;
+        _instance._reactInternals = workInProgress;
+        _instance._reactInternalInstance = fakeInternalInstance;
+        "function" === typeof Component.getDerivedStateFromProps &&
+          null === state &&
+          ((state = getComponentNameFromType(Component) || "Component"),
+          didWarnAboutUninitializedState.has(state) ||
+            (didWarnAboutUninitializedState.add(state),
+            console.error(
+              "`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",
+              state,
+              null === _instance.state ? "null" : "undefined",
+              state
+            )));
+        if (
+          "function" === typeof Component.getDerivedStateFromProps ||
+          "function" === typeof _instance.getSnapshotBeforeUpdate
+        ) {
+          var foundWillUpdateName = (lane = state = null);
+          "function" === typeof _instance.componentWillMount &&
+          !0 !== _instance.componentWillMount.__suppressDeprecationWarning
+            ? (state = "componentWillMount")
+            : "function" === typeof _instance.UNSAFE_componentWillMount &&
+              (state = "UNSAFE_componentWillMount");
+          "function" === typeof _instance.componentWillReceiveProps &&
+          !0 !==
+            _instance.componentWillReceiveProps.__suppressDeprecationWarning
+            ? (lane = "componentWillReceiveProps")
+            : "function" ===
+                typeof _instance.UNSAFE_componentWillReceiveProps &&
+              (lane = "UNSAFE_componentWillReceiveProps");
+          "function" === typeof _instance.componentWillUpdate &&
+          !0 !== _instance.componentWillUpdate.__suppressDeprecationWarning
+            ? (foundWillUpdateName = "componentWillUpdate")
+            : "function" === typeof _instance.UNSAFE_componentWillUpdate &&
+              (foundWillUpdateName = "UNSAFE_componentWillUpdate");
+          if (null !== state || null !== lane || null !== foundWillUpdateName) {
+            _instance = getComponentNameFromType(Component) || "Component";
+            var newApiName =
+              "function" === typeof Component.getDerivedStateFromProps
+                ? "getDerivedStateFromProps()"
+                : "getSnapshotBeforeUpdate()";
+            didWarnAboutLegacyLifecyclesAndDerivedState.has(_instance) ||
+              (didWarnAboutLegacyLifecyclesAndDerivedState.add(_instance),
+              console.error(
+                "Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles",
+                _instance,
+                newApiName,
+                null !== state ? "\n  " + state : "",
+                null !== lane ? "\n  " + lane : "",
+                null !== foundWillUpdateName ? "\n  " + foundWillUpdateName : ""
+              ));
+          }
+        }
+        _instance = workInProgress.stateNode;
+        state = getComponentNameFromType(Component) || "Component";
+        _instance.render ||
+          (Component.prototype &&
+          "function" === typeof Component.prototype.render
+            ? console.error(
+                "No `render` method found on the %s instance: did you accidentally return an object from the constructor?",
+                state
+              )
+            : console.error(
+                "No `render` method found on the %s instance: you may have forgotten to define `render`.",
+                state
+              ));
+        !_instance.getInitialState ||
+          _instance.getInitialState.isReactClassApproved ||
+          _instance.state ||
+          console.error(
+            "getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",
+            state
+          );
+        _instance.getDefaultProps &&
+          !_instance.getDefaultProps.isReactClassApproved &&
+          console.error(
+            "getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",
+            state
+          );
+        _instance.contextType &&
+          console.error(
+            "contextType was defined as an instance property on %s. Use a static property to define contextType instead.",
+            state
+          );
+        Component.childContextTypes &&
+          !didWarnAboutChildContextTypes.has(Component) &&
+          (didWarnAboutChildContextTypes.add(Component),
+          console.error(
+            "%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",
+            state
+          ));
+        Component.contextTypes &&
+          !didWarnAboutContextTypes$1.has(Component) &&
+          (didWarnAboutContextTypes$1.add(Component),
+          console.error(
+            "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",
+            state
+          ));
+        "function" === typeof _instance.componentShouldUpdate &&
+          console.error(
+            "%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",
+            state
+          );
+        Component.prototype &&
+          Component.prototype.isPureReactComponent &&
+          "undefined" !== typeof _instance.shouldComponentUpdate &&
+          console.error(
+            "%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",
+            getComponentNameFromType(Component) || "A pure component"
+          );
+        "function" === typeof _instance.componentDidUnmount &&
+          console.error(
+            "%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",
+            state
+          );
+        "function" === typeof _instance.componentDidReceiveProps &&
+          console.error(
+            "%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",
+            state
+          );
+        "function" === typeof _instance.componentWillRecieveProps &&
+          console.error(
+            "%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",
+            state
+          );
+        "function" === typeof _instance.UNSAFE_componentWillRecieveProps &&
+          console.error(
+            "%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",
+            state
+          );
+        lane = _instance.props !== nextProps;
+        void 0 !== _instance.props &&
+          lane &&
+          console.error(
+            "When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",
+            state
+          );
+        _instance.defaultProps &&
+          console.error(
+            "Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",
+            state,
+            state
+          );
+        "function" !== typeof _instance.getSnapshotBeforeUpdate ||
+          "function" === typeof _instance.componentDidUpdate ||
+          didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(Component) ||
+          (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(Component),
+          console.error(
+            "%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",
+            getComponentNameFromType(Component)
+          ));
+        "function" === typeof _instance.getDerivedStateFromProps &&
+          console.error(
+            "%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+            state
+          );
+        "function" === typeof _instance.getDerivedStateFromError &&
+          console.error(
+            "%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+            state
+          );
+        "function" === typeof Component.getSnapshotBeforeUpdate &&
+          console.error(
+            "%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",
+            state
+          );
+        (lane = _instance.state) &&
+          ("object" !== typeof lane || isArrayImpl(lane)) &&
+          console.error("%s.state: must be set to an object or null", state);
+        "function" === typeof _instance.getChildContext &&
+          "object" !== typeof Component.childContextTypes &&
+          console.error(
+            "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",
+            state
+          );
+        _instance = workInProgress.stateNode;
+        _instance.props = nextProps;
+        _instance.state = workInProgress.memoizedState;
+        _instance.refs = {};
+        initializeUpdateQueue(workInProgress);
+        state = Component.contextType;
+        _instance.context =
+          "object" === typeof state && null !== state
+            ? readContext(state)
+            : emptyContextObject;
+        _instance.state === nextProps &&
+          ((state = getComponentNameFromType(Component) || "Component"),
+          didWarnAboutDirectlyAssigningPropsToState.has(state) ||
+            (didWarnAboutDirectlyAssigningPropsToState.add(state),
+            console.error(
+              "%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",
+              state
+            )));
+        workInProgress.mode & StrictLegacyMode &&
+          ReactStrictModeWarnings.recordLegacyContextWarning(
+            workInProgress,
+            _instance
+          );
+        ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(
+          workInProgress,
+          _instance
+        );
+        _instance.state = workInProgress.memoizedState;
+        state = Component.getDerivedStateFromProps;
+        "function" === typeof state &&
+          (applyDerivedStateFromProps(
+            workInProgress,
+            Component,
+            state,
+            nextProps
+          ),
+          (_instance.state = workInProgress.memoizedState));
+        "function" === typeof Component.getDerivedStateFromProps ||
+          "function" === typeof _instance.getSnapshotBeforeUpdate ||
+          ("function" !== typeof _instance.UNSAFE_componentWillMount &&
+            "function" !== typeof _instance.componentWillMount) ||
+          ((state = _instance.state),
+          "function" === typeof _instance.componentWillMount &&
+            _instance.componentWillMount(),
+          "function" === typeof _instance.UNSAFE_componentWillMount &&
+            _instance.UNSAFE_componentWillMount(),
+          state !== _instance.state &&
+            (console.error(
+              "%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+              getComponentNameFromFiber(workInProgress) || "Component"
+            ),
+            classComponentUpdater.enqueueReplaceState(
+              _instance,
+              _instance.state,
+              null
+            )),
+          processUpdateQueue(workInProgress, nextProps, _instance, renderLanes),
+          suspendIfUpdateReadFromEntangledAsyncAction(),
+          (_instance.state = workInProgress.memoizedState));
+        "function" === typeof _instance.componentDidMount &&
+          (workInProgress.flags |= 4194308);
+        (workInProgress.mode & StrictEffectsMode) !== NoMode &&
+          (workInProgress.flags |= 134217728);
+        _instance = !0;
+      } else if (null === current) {
+        _instance = workInProgress.stateNode;
+        var unresolvedOldProps = workInProgress.memoizedProps;
+        lane = resolveClassComponentProps(Component, unresolvedOldProps);
+        _instance.props = lane;
+        var oldContext = _instance.context;
+        foundWillUpdateName = Component.contextType;
+        state = emptyContextObject;
+        "object" === typeof foundWillUpdateName &&
+          null !== foundWillUpdateName &&
+          (state = readContext(foundWillUpdateName));
+        newApiName = Component.getDerivedStateFromProps;
+        foundWillUpdateName =
+          "function" === typeof newApiName ||
+          "function" === typeof _instance.getSnapshotBeforeUpdate;
+        unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;
+        foundWillUpdateName ||
+          ("function" !== typeof _instance.UNSAFE_componentWillReceiveProps &&
+            "function" !== typeof _instance.componentWillReceiveProps) ||
+          ((unresolvedOldProps || oldContext !== state) &&
+            callComponentWillReceiveProps(
+              workInProgress,
+              _instance,
+              nextProps,
+              state
+            ));
+        hasForceUpdate = !1;
+        var oldState = workInProgress.memoizedState;
+        _instance.state = oldState;
+        processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);
+        suspendIfUpdateReadFromEntangledAsyncAction();
+        oldContext = workInProgress.memoizedState;
+        unresolvedOldProps || oldState !== oldContext || hasForceUpdate
+          ? ("function" === typeof newApiName &&
+              (applyDerivedStateFromProps(
+                workInProgress,
+                Component,
+                newApiName,
+                nextProps
+              ),
+              (oldContext = workInProgress.memoizedState)),
+            (lane =
+              hasForceUpdate ||
+              checkShouldComponentUpdate(
+                workInProgress,
+                Component,
+                lane,
+                nextProps,
+                oldState,
+                oldContext,
+                state
+              ))
+              ? (foundWillUpdateName ||
+                  ("function" !== typeof _instance.UNSAFE_componentWillMount &&
+                    "function" !== typeof _instance.componentWillMount) ||
+                  ("function" === typeof _instance.componentWillMount &&
+                    _instance.componentWillMount(),
+                  "function" === typeof _instance.UNSAFE_componentWillMount &&
+                    _instance.UNSAFE_componentWillMount()),
+                "function" === typeof _instance.componentDidMount &&
+                  (workInProgress.flags |= 4194308),
+                (workInProgress.mode & StrictEffectsMode) !== NoMode &&
+                  (workInProgress.flags |= 134217728))
+              : ("function" === typeof _instance.componentDidMount &&
+                  (workInProgress.flags |= 4194308),
+                (workInProgress.mode & StrictEffectsMode) !== NoMode &&
+                  (workInProgress.flags |= 134217728),
+                (workInProgress.memoizedProps = nextProps),
+                (workInProgress.memoizedState = oldContext)),
+            (_instance.props = nextProps),
+            (_instance.state = oldContext),
+            (_instance.context = state),
+            (_instance = lane))
+          : ("function" === typeof _instance.componentDidMount &&
+              (workInProgress.flags |= 4194308),
+            (workInProgress.mode & StrictEffectsMode) !== NoMode &&
+              (workInProgress.flags |= 134217728),
+            (_instance = !1));
+      } else {
+        _instance = workInProgress.stateNode;
+        cloneUpdateQueue(current, workInProgress);
+        state = workInProgress.memoizedProps;
+        foundWillUpdateName = resolveClassComponentProps(Component, state);
+        _instance.props = foundWillUpdateName;
+        newApiName = workInProgress.pendingProps;
+        oldState = _instance.context;
+        oldContext = Component.contextType;
+        lane = emptyContextObject;
+        "object" === typeof oldContext &&
+          null !== oldContext &&
+          (lane = readContext(oldContext));
+        unresolvedOldProps = Component.getDerivedStateFromProps;
+        (oldContext =
+          "function" === typeof unresolvedOldProps ||
+          "function" === typeof _instance.getSnapshotBeforeUpdate) ||
+          ("function" !== typeof _instance.UNSAFE_componentWillReceiveProps &&
+            "function" !== typeof _instance.componentWillReceiveProps) ||
+          ((state !== newApiName || oldState !== lane) &&
+            callComponentWillReceiveProps(
+              workInProgress,
+              _instance,
+              nextProps,
+              lane
+            ));
+        hasForceUpdate = !1;
+        oldState = workInProgress.memoizedState;
+        _instance.state = oldState;
+        processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);
+        suspendIfUpdateReadFromEntangledAsyncAction();
+        var newState = workInProgress.memoizedState;
+        state !== newApiName ||
+        oldState !== newState ||
+        hasForceUpdate ||
+        (null !== current &&
+          null !== current.dependencies &&
+          checkIfContextChanged(current.dependencies))
+          ? ("function" === typeof unresolvedOldProps &&
+              (applyDerivedStateFromProps(
+                workInProgress,
+                Component,
+                unresolvedOldProps,
+                nextProps
+              ),
+              (newState = workInProgress.memoizedState)),
+            (foundWillUpdateName =
+              hasForceUpdate ||
+              checkShouldComponentUpdate(
+                workInProgress,
+                Component,
+                foundWillUpdateName,
+                nextProps,
+                oldState,
+                newState,
+                lane
+              ) ||
+              (null !== current &&
+                null !== current.dependencies &&
+                checkIfContextChanged(current.dependencies)))
+              ? (oldContext ||
+                  ("function" !== typeof _instance.UNSAFE_componentWillUpdate &&
+                    "function" !== typeof _instance.componentWillUpdate) ||
+                  ("function" === typeof _instance.componentWillUpdate &&
+                    _instance.componentWillUpdate(nextProps, newState, lane),
+                  "function" === typeof _instance.UNSAFE_componentWillUpdate &&
+                    _instance.UNSAFE_componentWillUpdate(
+                      nextProps,
+                      newState,
+                      lane
+                    )),
+                "function" === typeof _instance.componentDidUpdate &&
+                  (workInProgress.flags |= 4),
+                "function" === typeof _instance.getSnapshotBeforeUpdate &&
+                  (workInProgress.flags |= 1024))
+              : ("function" !== typeof _instance.componentDidUpdate ||
+                  (state === current.memoizedProps &&
+                    oldState === current.memoizedState) ||
+                  (workInProgress.flags |= 4),
+                "function" !== typeof _instance.getSnapshotBeforeUpdate ||
+                  (state === current.memoizedProps &&
+                    oldState === current.memoizedState) ||
+                  (workInProgress.flags |= 1024),
+                (workInProgress.memoizedProps = nextProps),
+                (workInProgress.memoizedState = newState)),
+            (_instance.props = nextProps),
+            (_instance.state = newState),
+            (_instance.context = lane),
+            (_instance = foundWillUpdateName))
+          : ("function" !== typeof _instance.componentDidUpdate ||
+              (state === current.memoizedProps &&
+                oldState === current.memoizedState) ||
+              (workInProgress.flags |= 4),
+            "function" !== typeof _instance.getSnapshotBeforeUpdate ||
+              (state === current.memoizedProps &&
+                oldState === current.memoizedState) ||
+              (workInProgress.flags |= 1024),
+            (_instance = !1));
+      }
+      lane = _instance;
+      markRef(current, workInProgress);
+      state = 0 !== (workInProgress.flags & 128);
+      if (lane || state) {
+        lane = workInProgress.stateNode;
+        setCurrentFiber(workInProgress);
+        if (state && "function" !== typeof Component.getDerivedStateFromError)
+          (Component = null), (profilerStartTime = -1);
+        else {
+          markComponentRenderStarted(workInProgress);
+          Component = callRenderInDEV(lane);
+          if (workInProgress.mode & StrictLegacyMode) {
+            setIsStrictModeForDevtools(!0);
+            try {
+              callRenderInDEV(lane);
+            } finally {
+              setIsStrictModeForDevtools(!1);
+            }
+          }
+          markComponentRenderStopped();
+        }
+        workInProgress.flags |= 1;
+        null !== current && state
+          ? ((workInProgress.child = reconcileChildFibers(
+              workInProgress,
+              current.child,
+              null,
+              renderLanes
+            )),
+            (workInProgress.child = reconcileChildFibers(
+              workInProgress,
+              null,
+              Component,
+              renderLanes
+            )))
+          : reconcileChildren(current, workInProgress, Component, renderLanes);
+        workInProgress.memoizedState = lane.state;
+        current = workInProgress.child;
+      } else
+        current = bailoutOnAlreadyFinishedWork(
+          current,
+          workInProgress,
+          renderLanes
+        );
+      renderLanes = workInProgress.stateNode;
+      _instance &&
+        renderLanes.props !== nextProps &&
+        (didWarnAboutReassigningProps ||
+          console.error(
+            "It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",
+            getComponentNameFromFiber(workInProgress) || "a component"
+          ),
+        (didWarnAboutReassigningProps = !0));
+      return current;
+    }
+    function mountHostRootWithoutHydrating(
+      current,
+      workInProgress,
+      nextChildren,
+      renderLanes
+    ) {
+      resetHydrationState();
+      workInProgress.flags |= 256;
+      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
+      return workInProgress.child;
+    }
+    function validateFunctionComponentInDev(workInProgress, Component) {
+      Component &&
+        Component.childContextTypes &&
+        console.error(
+          "childContextTypes cannot be defined on a function component.\n  %s.childContextTypes = ...",
+          Component.displayName || Component.name || "Component"
+        );
+      "function" === typeof Component.getDerivedStateFromProps &&
+        ((workInProgress = getComponentNameFromType(Component) || "Unknown"),
+        didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] ||
+          (console.error(
+            "%s: Function components do not support getDerivedStateFromProps.",
+            workInProgress
+          ),
+          (didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] =
+            !0)));
+      "object" === typeof Component.contextType &&
+        null !== Component.contextType &&
+        ((Component = getComponentNameFromType(Component) || "Unknown"),
+        didWarnAboutContextTypeOnFunctionComponent[Component] ||
+          (console.error(
+            "%s: Function components do not support contextType.",
+            Component
+          ),
+          (didWarnAboutContextTypeOnFunctionComponent[Component] = !0)));
+    }
+    function mountSuspenseOffscreenState(renderLanes) {
+      return { baseLanes: renderLanes, cachePool: getSuspendedCache() };
+    }
+    function getRemainingWorkInPrimaryTree(
+      current,
+      primaryTreeDidDefer,
+      renderLanes
+    ) {
+      current = null !== current ? current.childLanes & ~renderLanes : 0;
+      primaryTreeDidDefer && (current |= workInProgressDeferredLane);
+      return current;
+    }
+    function updateSuspenseComponent(current, workInProgress, renderLanes) {
+      var JSCompiler_object_inline_digest_2456;
+      var JSCompiler_object_inline_stack_2457 = workInProgress.pendingProps;
+      shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128);
+      var JSCompiler_object_inline_componentStack_2458 = !1;
+      var didSuspend = 0 !== (workInProgress.flags & 128);
+      (JSCompiler_object_inline_digest_2456 = didSuspend) ||
+        (JSCompiler_object_inline_digest_2456 =
+          null !== current && null === current.memoizedState
+            ? !1
+            : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback));
+      JSCompiler_object_inline_digest_2456 &&
+        ((JSCompiler_object_inline_componentStack_2458 = !0),
+        (workInProgress.flags &= -129));
+      JSCompiler_object_inline_digest_2456 = 0 !== (workInProgress.flags & 32);
+      workInProgress.flags &= -33;
+      if (null === current) {
+        if (isHydrating) {
+          JSCompiler_object_inline_componentStack_2458
+            ? pushPrimaryTreeSuspenseHandler(workInProgress)
+            : reuseSuspenseHandlerOnStack(workInProgress);
+          if (isHydrating) {
+            var JSCompiler_object_inline_message_2455 = nextHydratableInstance;
+            var JSCompiler_temp;
+            if (!(JSCompiler_temp = !JSCompiler_object_inline_message_2455)) {
+              c: {
+                var instance = JSCompiler_object_inline_message_2455;
+                for (
+                  JSCompiler_temp = rootOrSingletonContext;
+                  8 !== instance.nodeType;
+
+                ) {
+                  if (!JSCompiler_temp) {
+                    JSCompiler_temp = null;
+                    break c;
+                  }
+                  instance = getNextHydratable(instance.nextSibling);
+                  if (null === instance) {
+                    JSCompiler_temp = null;
+                    break c;
+                  }
+                }
+                JSCompiler_temp = instance;
+              }
+              null !== JSCompiler_temp
+                ? (warnIfNotHydrating(),
+                  (workInProgress.memoizedState = {
+                    dehydrated: JSCompiler_temp,
+                    treeContext:
+                      null !== treeContextProvider
+                        ? { id: treeContextId, overflow: treeContextOverflow }
+                        : null,
+                    retryLane: 536870912,
+                    hydrationErrors: null
+                  }),
+                  (instance = createFiber(18, null, null, NoMode)),
+                  (instance.stateNode = JSCompiler_temp),
+                  (instance.return = workInProgress),
+                  (workInProgress.child = instance),
+                  (hydrationParentFiber = workInProgress),
+                  (nextHydratableInstance = null),
+                  (JSCompiler_temp = !0))
+                : (JSCompiler_temp = !1);
+              JSCompiler_temp = !JSCompiler_temp;
+            }
+            JSCompiler_temp &&
+              (warnNonHydratedInstance(
+                workInProgress,
+                JSCompiler_object_inline_message_2455
+              ),
+              throwOnHydrationMismatch(workInProgress));
+          }
+          JSCompiler_object_inline_message_2455 = workInProgress.memoizedState;
+          if (
+            null !== JSCompiler_object_inline_message_2455 &&
+            ((JSCompiler_object_inline_message_2455 =
+              JSCompiler_object_inline_message_2455.dehydrated),
+            null !== JSCompiler_object_inline_message_2455)
+          )
+            return (
+              isSuspenseInstanceFallback(JSCompiler_object_inline_message_2455)
+                ? (workInProgress.lanes = 32)
+                : (workInProgress.lanes = 536870912),
+              null
+            );
+          popSuspenseHandler(workInProgress);
+        }
+        JSCompiler_object_inline_message_2455 =
+          JSCompiler_object_inline_stack_2457.children;
+        JSCompiler_object_inline_stack_2457 =
+          JSCompiler_object_inline_stack_2457.fallback;
+        if (JSCompiler_object_inline_componentStack_2458)
+          return (
+            reuseSuspenseHandlerOnStack(workInProgress),
+            (JSCompiler_object_inline_componentStack_2458 =
+              workInProgress.mode),
+            (JSCompiler_object_inline_message_2455 =
+              mountWorkInProgressOffscreenFiber(
+                {
+                  mode: "hidden",
+                  children: JSCompiler_object_inline_message_2455
+                },
+                JSCompiler_object_inline_componentStack_2458
+              )),
+            (JSCompiler_object_inline_stack_2457 = createFiberFromFragment(
+              JSCompiler_object_inline_stack_2457,
+              JSCompiler_object_inline_componentStack_2458,
+              renderLanes,
+              null
+            )),
+            (JSCompiler_object_inline_message_2455.return = workInProgress),
+            (JSCompiler_object_inline_stack_2457.return = workInProgress),
+            (JSCompiler_object_inline_message_2455.sibling =
+              JSCompiler_object_inline_stack_2457),
+            (workInProgress.child = JSCompiler_object_inline_message_2455),
+            (JSCompiler_object_inline_componentStack_2458 =
+              workInProgress.child),
+            (JSCompiler_object_inline_componentStack_2458.memoizedState =
+              mountSuspenseOffscreenState(renderLanes)),
+            (JSCompiler_object_inline_componentStack_2458.childLanes =
+              getRemainingWorkInPrimaryTree(
+                current,
+                JSCompiler_object_inline_digest_2456,
+                renderLanes
+              )),
+            (workInProgress.memoizedState = SUSPENDED_MARKER),
+            JSCompiler_object_inline_stack_2457
+          );
+        pushPrimaryTreeSuspenseHandler(workInProgress);
+        return mountSuspensePrimaryChildren(
+          workInProgress,
+          JSCompiler_object_inline_message_2455
+        );
+      }
+      var prevState = current.memoizedState;
+      if (
+        null !== prevState &&
+        ((JSCompiler_object_inline_message_2455 = prevState.dehydrated),
+        null !== JSCompiler_object_inline_message_2455)
+      ) {
+        if (didSuspend)
+          workInProgress.flags & 256
+            ? (pushPrimaryTreeSuspenseHandler(workInProgress),
+              (workInProgress.flags &= -257),
+              (workInProgress = retrySuspenseComponentWithoutHydrating(
+                current,
+                workInProgress,
+                renderLanes
+              )))
+            : null !== workInProgress.memoizedState
+              ? (reuseSuspenseHandlerOnStack(workInProgress),
+                (workInProgress.child = current.child),
+                (workInProgress.flags |= 128),
+                (workInProgress = null))
+              : (reuseSuspenseHandlerOnStack(workInProgress),
+                (JSCompiler_object_inline_componentStack_2458 =
+                  JSCompiler_object_inline_stack_2457.fallback),
+                (JSCompiler_object_inline_message_2455 = workInProgress.mode),
+                (JSCompiler_object_inline_stack_2457 =
+                  mountWorkInProgressOffscreenFiber(
+                    {
+                      mode: "visible",
+                      children: JSCompiler_object_inline_stack_2457.children
+                    },
+                    JSCompiler_object_inline_message_2455
+                  )),
+                (JSCompiler_object_inline_componentStack_2458 =
+                  createFiberFromFragment(
+                    JSCompiler_object_inline_componentStack_2458,
+                    JSCompiler_object_inline_message_2455,
+                    renderLanes,
+                    null
+                  )),
+                (JSCompiler_object_inline_componentStack_2458.flags |= 2),
+                (JSCompiler_object_inline_stack_2457.return = workInProgress),
+                (JSCompiler_object_inline_componentStack_2458.return =
+                  workInProgress),
+                (JSCompiler_object_inline_stack_2457.sibling =
+                  JSCompiler_object_inline_componentStack_2458),
+                (workInProgress.child = JSCompiler_object_inline_stack_2457),
+                reconcileChildFibers(
+                  workInProgress,
+                  current.child,
+                  null,
+                  renderLanes
+                ),
+                (JSCompiler_object_inline_stack_2457 = workInProgress.child),
+                (JSCompiler_object_inline_stack_2457.memoizedState =
+                  mountSuspenseOffscreenState(renderLanes)),
+                (JSCompiler_object_inline_stack_2457.childLanes =
+                  getRemainingWorkInPrimaryTree(
+                    current,
+                    JSCompiler_object_inline_digest_2456,
+                    renderLanes
+                  )),
+                (workInProgress.memoizedState = SUSPENDED_MARKER),
+                (workInProgress =
+                  JSCompiler_object_inline_componentStack_2458));
+        else if (
+          (pushPrimaryTreeSuspenseHandler(workInProgress),
+          isHydrating &&
+            console.error(
+              "We should not be hydrating here. This is a bug in React. Please file a bug."
+            ),
+          isSuspenseInstanceFallback(JSCompiler_object_inline_message_2455))
+        ) {
+          JSCompiler_object_inline_digest_2456 =
+            JSCompiler_object_inline_message_2455.nextSibling &&
+            JSCompiler_object_inline_message_2455.nextSibling.dataset;
+          if (JSCompiler_object_inline_digest_2456) {
+            JSCompiler_temp = JSCompiler_object_inline_digest_2456.dgst;
+            var message = JSCompiler_object_inline_digest_2456.msg;
+            instance = JSCompiler_object_inline_digest_2456.stck;
+            var componentStack = JSCompiler_object_inline_digest_2456.cstck;
+          }
+          JSCompiler_object_inline_message_2455 = message;
+          JSCompiler_object_inline_digest_2456 = JSCompiler_temp;
+          JSCompiler_object_inline_stack_2457 = instance;
+          JSCompiler_temp = JSCompiler_object_inline_componentStack_2458 =
+            componentStack;
+          JSCompiler_object_inline_componentStack_2458 =
+            JSCompiler_object_inline_message_2455
+              ? Error(JSCompiler_object_inline_message_2455)
+              : Error(
+                  "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering."
+                );
+          JSCompiler_object_inline_componentStack_2458.stack =
+            JSCompiler_object_inline_stack_2457 || "";
+          JSCompiler_object_inline_componentStack_2458.digest =
+            JSCompiler_object_inline_digest_2456;
+          JSCompiler_object_inline_digest_2456 =
+            void 0 === JSCompiler_temp ? null : JSCompiler_temp;
+          JSCompiler_object_inline_stack_2457 = {
+            value: JSCompiler_object_inline_componentStack_2458,
+            source: null,
+            stack: JSCompiler_object_inline_digest_2456
+          };
+          "string" === typeof JSCompiler_object_inline_digest_2456 &&
+            CapturedStacks.set(
+              JSCompiler_object_inline_componentStack_2458,
+              JSCompiler_object_inline_stack_2457
+            );
+          queueHydrationError(JSCompiler_object_inline_stack_2457);
+          workInProgress = retrySuspenseComponentWithoutHydrating(
+            current,
+            workInProgress,
+            renderLanes
+          );
+        } else if (
+          (didReceiveUpdate ||
+            propagateParentContextChanges(
+              current,
+              workInProgress,
+              renderLanes,
+              !1
+            ),
+          (JSCompiler_object_inline_digest_2456 =
+            0 !== (renderLanes & current.childLanes)),
+          didReceiveUpdate || JSCompiler_object_inline_digest_2456)
+        ) {
+          JSCompiler_object_inline_digest_2456 = workInProgressRoot;
+          if (
+            null !== JSCompiler_object_inline_digest_2456 &&
+            ((JSCompiler_object_inline_stack_2457 = renderLanes & -renderLanes),
+            (JSCompiler_object_inline_stack_2457 =
+              0 !== (JSCompiler_object_inline_stack_2457 & 42)
+                ? 1
+                : getBumpedLaneForHydrationByLane(
+                    JSCompiler_object_inline_stack_2457
+                  )),
+            (JSCompiler_object_inline_stack_2457 =
+              0 !==
+              (JSCompiler_object_inline_stack_2457 &
+                (JSCompiler_object_inline_digest_2456.suspendedLanes |
+                  renderLanes))
+                ? 0
+                : JSCompiler_object_inline_stack_2457),
+            0 !== JSCompiler_object_inline_stack_2457 &&
+              JSCompiler_object_inline_stack_2457 !== prevState.retryLane)
+          )
+            throw (
+              ((prevState.retryLane = JSCompiler_object_inline_stack_2457),
+              enqueueConcurrentRenderForLane(
+                current,
+                JSCompiler_object_inline_stack_2457
+              ),
+              scheduleUpdateOnFiber(
+                JSCompiler_object_inline_digest_2456,
+                current,
+                JSCompiler_object_inline_stack_2457
+              ),
+              SelectiveHydrationException)
+            );
+          JSCompiler_object_inline_message_2455.data ===
+            SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible();
+          workInProgress = retrySuspenseComponentWithoutHydrating(
+            current,
+            workInProgress,
+            renderLanes
+          );
+        } else
+          JSCompiler_object_inline_message_2455.data ===
+          SUSPENSE_PENDING_START_DATA
+            ? ((workInProgress.flags |= 192),
+              (workInProgress.child = current.child),
+              (workInProgress = null))
+            : ((current = prevState.treeContext),
+              (nextHydratableInstance = getNextHydratable(
+                JSCompiler_object_inline_message_2455.nextSibling
+              )),
+              (hydrationParentFiber = workInProgress),
+              (isHydrating = !0),
+              (hydrationErrors = null),
+              (didSuspendOrErrorDEV = !1),
+              (hydrationDiffRootDEV = null),
+              (rootOrSingletonContext = !1),
+              null !== current &&
+                (warnIfNotHydrating(),
+                (idStack[idStackIndex++] = treeContextId),
+                (idStack[idStackIndex++] = treeContextOverflow),
+                (idStack[idStackIndex++] = treeContextProvider),
+                (treeContextId = current.id),
+                (treeContextOverflow = current.overflow),
+                (treeContextProvider = workInProgress)),
+              (workInProgress = mountSuspensePrimaryChildren(
+                workInProgress,
+                JSCompiler_object_inline_stack_2457.children
+              )),
+              (workInProgress.flags |= 4096));
+        return workInProgress;
+      }
+      if (JSCompiler_object_inline_componentStack_2458)
+        return (
+          reuseSuspenseHandlerOnStack(workInProgress),
+          (JSCompiler_object_inline_componentStack_2458 =
+            JSCompiler_object_inline_stack_2457.fallback),
+          (JSCompiler_object_inline_message_2455 = workInProgress.mode),
+          (JSCompiler_temp = current.child),
+          (instance = JSCompiler_temp.sibling),
+          (JSCompiler_object_inline_stack_2457 = createWorkInProgress(
+            JSCompiler_temp,
+            {
+              mode: "hidden",
+              children: JSCompiler_object_inline_stack_2457.children
+            }
+          )),
+          (JSCompiler_object_inline_stack_2457.subtreeFlags =
+            JSCompiler_temp.subtreeFlags & 65011712),
+          null !== instance
+            ? (JSCompiler_object_inline_componentStack_2458 =
+                createWorkInProgress(
+                  instance,
+                  JSCompiler_object_inline_componentStack_2458
+                ))
+            : ((JSCompiler_object_inline_componentStack_2458 =
+                createFiberFromFragment(
+                  JSCompiler_object_inline_componentStack_2458,
+                  JSCompiler_object_inline_message_2455,
+                  renderLanes,
+                  null
+                )),
+              (JSCompiler_object_inline_componentStack_2458.flags |= 2)),
+          (JSCompiler_object_inline_componentStack_2458.return =
+            workInProgress),
+          (JSCompiler_object_inline_stack_2457.return = workInProgress),
+          (JSCompiler_object_inline_stack_2457.sibling =
+            JSCompiler_object_inline_componentStack_2458),
+          (workInProgress.child = JSCompiler_object_inline_stack_2457),
+          (JSCompiler_object_inline_stack_2457 =
+            JSCompiler_object_inline_componentStack_2458),
+          (JSCompiler_object_inline_componentStack_2458 = workInProgress.child),
+          (JSCompiler_object_inline_message_2455 = current.child.memoizedState),
+          null === JSCompiler_object_inline_message_2455
+            ? (JSCompiler_object_inline_message_2455 =
+                mountSuspenseOffscreenState(renderLanes))
+            : ((JSCompiler_temp =
+                JSCompiler_object_inline_message_2455.cachePool),
+              null !== JSCompiler_temp
+                ? ((instance = CacheContext._currentValue),
+                  (JSCompiler_temp =
+                    JSCompiler_temp.parent !== instance
+                      ? { parent: instance, pool: instance }
+                      : JSCompiler_temp))
+                : (JSCompiler_temp = getSuspendedCache()),
+              (JSCompiler_object_inline_message_2455 = {
+                baseLanes:
+                  JSCompiler_object_inline_message_2455.baseLanes | renderLanes,
+                cachePool: JSCompiler_temp
+              })),
+          (JSCompiler_object_inline_componentStack_2458.memoizedState =
+            JSCompiler_object_inline_message_2455),
+          (JSCompiler_object_inline_componentStack_2458.childLanes =
+            getRemainingWorkInPrimaryTree(
+              current,
+              JSCompiler_object_inline_digest_2456,
+              renderLanes
+            )),
+          (workInProgress.memoizedState = SUSPENDED_MARKER),
+          JSCompiler_object_inline_stack_2457
+        );
+      pushPrimaryTreeSuspenseHandler(workInProgress);
+      renderLanes = current.child;
+      current = renderLanes.sibling;
+      renderLanes = createWorkInProgress(renderLanes, {
+        mode: "visible",
+        children: JSCompiler_object_inline_stack_2457.children
+      });
+      renderLanes.return = workInProgress;
+      renderLanes.sibling = null;
+      null !== current &&
+        ((JSCompiler_object_inline_digest_2456 = workInProgress.deletions),
+        null === JSCompiler_object_inline_digest_2456
+          ? ((workInProgress.deletions = [current]),
+            (workInProgress.flags |= 16))
+          : JSCompiler_object_inline_digest_2456.push(current));
+      workInProgress.child = renderLanes;
+      workInProgress.memoizedState = null;
+      return renderLanes;
+    }
+    function mountSuspensePrimaryChildren(workInProgress, primaryChildren) {
+      primaryChildren = mountWorkInProgressOffscreenFiber(
+        { mode: "visible", children: primaryChildren },
+        workInProgress.mode
+      );
+      primaryChildren.return = workInProgress;
+      return (workInProgress.child = primaryChildren);
+    }
+    function mountWorkInProgressOffscreenFiber(offscreenProps, mode) {
+      offscreenProps = createFiber(22, offscreenProps, null, mode);
+      offscreenProps.lanes = 0;
+      offscreenProps.stateNode = {
+        _visibility: OffscreenVisible,
+        _pendingMarkers: null,
+        _retryCache: null,
+        _transitions: null
+      };
+      return offscreenProps;
+    }
+    function retrySuspenseComponentWithoutHydrating(
+      current,
+      workInProgress,
+      renderLanes
+    ) {
+      reconcileChildFibers(workInProgress, current.child, null, renderLanes);
+      current = mountSuspensePrimaryChildren(
+        workInProgress,
+        workInProgress.pendingProps.children
+      );
+      current.flags |= 2;
+      workInProgress.memoizedState = null;
+      return current;
+    }
+    function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {
+      fiber.lanes |= renderLanes;
+      var alternate = fiber.alternate;
+      null !== alternate && (alternate.lanes |= renderLanes);
+      scheduleContextWorkOnParentPath(
+        fiber.return,
+        renderLanes,
+        propagationRoot
+      );
+    }
+    function validateSuspenseListNestedChild(childSlot, index) {
+      var isAnArray = isArrayImpl(childSlot);
+      childSlot = !isAnArray && "function" === typeof getIteratorFn(childSlot);
+      return isAnArray || childSlot
+        ? ((isAnArray = isAnArray ? "array" : "iterable"),
+          console.error(
+            "A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>",
+            isAnArray,
+            index,
+            isAnArray
+          ),
+          !1)
+        : !0;
+    }
+    function initSuspenseListRenderState(
+      workInProgress,
+      isBackwards,
+      tail,
+      lastContentRow,
+      tailMode
+    ) {
+      var renderState = workInProgress.memoizedState;
+      null === renderState
+        ? (workInProgress.memoizedState = {
+            isBackwards: isBackwards,
+            rendering: null,
+            renderingStartTime: 0,
+            last: lastContentRow,
+            tail: tail,
+            tailMode: tailMode
+          })
+        : ((renderState.isBackwards = isBackwards),
+          (renderState.rendering = null),
+          (renderState.renderingStartTime = 0),
+          (renderState.last = lastContentRow),
+          (renderState.tail = tail),
+          (renderState.tailMode = tailMode));
+    }
+    function updateSuspenseListComponent(current, workInProgress, renderLanes) {
+      var nextProps = workInProgress.pendingProps,
+        revealOrder = nextProps.revealOrder,
+        tailMode = nextProps.tail;
+      nextProps = nextProps.children;
+      if (
+        void 0 !== revealOrder &&
+        "forwards" !== revealOrder &&
+        "backwards" !== revealOrder &&
+        "together" !== revealOrder &&
+        !didWarnAboutRevealOrder[revealOrder]
+      )
+        if (
+          ((didWarnAboutRevealOrder[revealOrder] = !0),
+          "string" === typeof revealOrder)
+        )
+          switch (revealOrder.toLowerCase()) {
+            case "together":
+            case "forwards":
+            case "backwards":
+              console.error(
+                '"%s" is not a valid value for revealOrder on <SuspenseList />. Use lowercase "%s" instead.',
+                revealOrder,
+                revealOrder.toLowerCase()
+              );
+              break;
+            case "forward":
+            case "backward":
+              console.error(
+                '"%s" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use "%ss" instead.',
+                revealOrder,
+                revealOrder.toLowerCase()
+              );
+              break;
+            default:
+              console.error(
+                '"%s" is not a supported revealOrder on <SuspenseList />. Did you mean "together", "forwards" or "backwards"?',
+                revealOrder
+              );
+          }
+        else
+          console.error(
+            '%s is not a supported value for revealOrder on <SuspenseList />. Did you mean "together", "forwards" or "backwards"?',
+            revealOrder
+          );
+      void 0 === tailMode ||
+        didWarnAboutTailOptions[tailMode] ||
+        ("collapsed" !== tailMode && "hidden" !== tailMode
+          ? ((didWarnAboutTailOptions[tailMode] = !0),
+            console.error(
+              '"%s" is not a supported value for tail on <SuspenseList />. Did you mean "collapsed" or "hidden"?',
+              tailMode
+            ))
+          : "forwards" !== revealOrder &&
+            "backwards" !== revealOrder &&
+            ((didWarnAboutTailOptions[tailMode] = !0),
+            console.error(
+              '<SuspenseList tail="%s" /> is only valid if revealOrder is "forwards" or "backwards". Did you mean to specify revealOrder="forwards"?',
+              tailMode
+            )));
+      a: if (
+        ("forwards" === revealOrder || "backwards" === revealOrder) &&
+        void 0 !== nextProps &&
+        null !== nextProps &&
+        !1 !== nextProps
+      )
+        if (isArrayImpl(nextProps))
+          for (var i = 0; i < nextProps.length; i++) {
+            if (!validateSuspenseListNestedChild(nextProps[i], i)) break a;
+          }
+        else if (((i = getIteratorFn(nextProps)), "function" === typeof i)) {
+          if ((i = i.call(nextProps)))
+            for (var step = i.next(), _i = 0; !step.done; step = i.next()) {
+              if (!validateSuspenseListNestedChild(step.value, _i)) break a;
+              _i++;
+            }
+        } else
+          console.error(
+            'A single row was passed to a <SuspenseList revealOrder="%s" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',
+            revealOrder
+          );
+      reconcileChildren(current, workInProgress, nextProps, renderLanes);
+      nextProps = suspenseStackCursor.current;
+      if (0 !== (nextProps & ForceSuspenseFallback))
+        (nextProps =
+          (nextProps & SubtreeSuspenseContextMask) | ForceSuspenseFallback),
+          (workInProgress.flags |= 128);
+      else {
+        if (null !== current && 0 !== (current.flags & 128))
+          a: for (current = workInProgress.child; null !== current; ) {
+            if (13 === current.tag)
+              null !== current.memoizedState &&
+                scheduleSuspenseWorkOnFiber(
+                  current,
+                  renderLanes,
+                  workInProgress
+                );
+            else if (19 === current.tag)
+              scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);
+            else if (null !== current.child) {
+              current.child.return = current;
+              current = current.child;
+              continue;
+            }
+            if (current === workInProgress) break a;
+            for (; null === current.sibling; ) {
+              if (null === current.return || current.return === workInProgress)
+                break a;
+              current = current.return;
+            }
+            current.sibling.return = current.return;
+            current = current.sibling;
+          }
+        nextProps &= SubtreeSuspenseContextMask;
+      }
+      push(suspenseStackCursor, nextProps, workInProgress);
+      switch (revealOrder) {
+        case "forwards":
+          renderLanes = workInProgress.child;
+          for (revealOrder = null; null !== renderLanes; )
+            (current = renderLanes.alternate),
+              null !== current &&
+                null === findFirstSuspended(current) &&
+                (revealOrder = renderLanes),
+              (renderLanes = renderLanes.sibling);
+          renderLanes = revealOrder;
+          null === renderLanes
+            ? ((revealOrder = workInProgress.child),
+              (workInProgress.child = null))
+            : ((revealOrder = renderLanes.sibling),
+              (renderLanes.sibling = null));
+          initSuspenseListRenderState(
+            workInProgress,
+            !1,
+            revealOrder,
+            renderLanes,
+            tailMode
+          );
+          break;
+        case "backwards":
+          renderLanes = null;
+          revealOrder = workInProgress.child;
+          for (workInProgress.child = null; null !== revealOrder; ) {
+            current = revealOrder.alternate;
+            if (null !== current && null === findFirstSuspended(current)) {
+              workInProgress.child = revealOrder;
+              break;
+            }
+            current = revealOrder.sibling;
+            revealOrder.sibling = renderLanes;
+            renderLanes = revealOrder;
+            revealOrder = current;
+          }
+          initSuspenseListRenderState(
+            workInProgress,
+            !0,
+            renderLanes,
+            null,
+            tailMode
+          );
+          break;
+        case "together":
+          initSuspenseListRenderState(workInProgress, !1, null, null, void 0);
+          break;
+        default:
+          workInProgress.memoizedState = null;
+      }
+      return workInProgress.child;
+    }
+    function bailoutOnAlreadyFinishedWork(
+      current,
+      workInProgress,
+      renderLanes
+    ) {
+      null !== current && (workInProgress.dependencies = current.dependencies);
+      profilerStartTime = -1;
+      workInProgressRootSkippedLanes |= workInProgress.lanes;
+      if (0 === (renderLanes & workInProgress.childLanes))
+        if (null !== current) {
+          if (
+            (propagateParentContextChanges(
+              current,
+              workInProgress,
+              renderLanes,
+              !1
+            ),
+            0 === (renderLanes & workInProgress.childLanes))
+          )
+            return null;
+        } else return null;
+      if (null !== current && workInProgress.child !== current.child)
+        throw Error("Resuming work not yet implemented.");
+      if (null !== workInProgress.child) {
+        current = workInProgress.child;
+        renderLanes = createWorkInProgress(current, current.pendingProps);
+        workInProgress.child = renderLanes;
+        for (renderLanes.return = workInProgress; null !== current.sibling; )
+          (current = current.sibling),
+            (renderLanes = renderLanes.sibling =
+              createWorkInProgress(current, current.pendingProps)),
+            (renderLanes.return = workInProgress);
+        renderLanes.sibling = null;
+      }
+      return workInProgress.child;
+    }
+    function checkScheduledUpdateOrContext(current, renderLanes) {
+      if (0 !== (current.lanes & renderLanes)) return !0;
+      current = current.dependencies;
+      return null !== current && checkIfContextChanged(current) ? !0 : !1;
+    }
+    function attemptEarlyBailoutIfNoScheduledUpdate(
+      current,
+      workInProgress,
+      renderLanes
+    ) {
+      switch (workInProgress.tag) {
+        case 3:
+          pushHostContainer(
+            workInProgress,
+            workInProgress.stateNode.containerInfo
+          );
+          pushProvider(
+            workInProgress,
+            CacheContext,
+            current.memoizedState.cache
+          );
+          resetHydrationState();
+          break;
+        case 27:
+        case 5:
+          pushHostContext(workInProgress);
+          break;
+        case 4:
+          pushHostContainer(
+            workInProgress,
+            workInProgress.stateNode.containerInfo
+          );
+          break;
+        case 10:
+          pushProvider(
+            workInProgress,
+            workInProgress.type,
+            workInProgress.memoizedProps.value
+          );
+          break;
+        case 12:
+          0 !== (renderLanes & workInProgress.childLanes) &&
+            (workInProgress.flags |= 4);
+          workInProgress.flags |= 2048;
+          var stateNode = workInProgress.stateNode;
+          stateNode.effectDuration = -0;
+          stateNode.passiveEffectDuration = -0;
+          break;
+        case 13:
+          stateNode = workInProgress.memoizedState;
+          if (null !== stateNode) {
+            if (null !== stateNode.dehydrated)
+              return (
+                pushPrimaryTreeSuspenseHandler(workInProgress),
+                (workInProgress.flags |= 128),
+                null
+              );
+            if (0 !== (renderLanes & workInProgress.child.childLanes))
+              return updateSuspenseComponent(
+                current,
+                workInProgress,
+                renderLanes
+              );
+            pushPrimaryTreeSuspenseHandler(workInProgress);
+            current = bailoutOnAlreadyFinishedWork(
+              current,
+              workInProgress,
+              renderLanes
+            );
+            return null !== current ? current.sibling : null;
+          }
+          pushPrimaryTreeSuspenseHandler(workInProgress);
+          break;
+        case 19:
+          var didSuspendBefore = 0 !== (current.flags & 128);
+          stateNode = 0 !== (renderLanes & workInProgress.childLanes);
+          stateNode ||
+            (propagateParentContextChanges(
+              current,
+              workInProgress,
+              renderLanes,
+              !1
+            ),
+            (stateNode = 0 !== (renderLanes & workInProgress.childLanes)));
+          if (didSuspendBefore) {
+            if (stateNode)
+              return updateSuspenseListComponent(
+                current,
+                workInProgress,
+                renderLanes
+              );
+            workInProgress.flags |= 128;
+          }
+          didSuspendBefore = workInProgress.memoizedState;
+          null !== didSuspendBefore &&
+            ((didSuspendBefore.rendering = null),
+            (didSuspendBefore.tail = null),
+            (didSuspendBefore.lastEffect = null));
+          push(
+            suspenseStackCursor,
+            suspenseStackCursor.current,
+            workInProgress
+          );
+          if (stateNode) break;
+          else return null;
+        case 22:
+        case 23:
+          return (
+            (workInProgress.lanes = 0),
+            updateOffscreenComponent(current, workInProgress, renderLanes)
+          );
+        case 24:
+          pushProvider(
+            workInProgress,
+            CacheContext,
+            current.memoizedState.cache
+          );
+      }
+      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
+    }
+    function beginWork(current, workInProgress, renderLanes) {
+      if (workInProgress._debugNeedsRemount && null !== current) {
+        renderLanes = createFiberFromTypeAndProps(
+          workInProgress.type,
+          workInProgress.key,
+          workInProgress.pendingProps,
+          workInProgress._debugOwner || null,
+          workInProgress.mode,
+          workInProgress.lanes
+        );
+        renderLanes._debugStack = workInProgress._debugStack;
+        renderLanes._debugTask = workInProgress._debugTask;
+        var returnFiber = workInProgress.return;
+        if (null === returnFiber) throw Error("Cannot swap the root fiber.");
+        current.alternate = null;
+        workInProgress.alternate = null;
+        renderLanes.index = workInProgress.index;
+        renderLanes.sibling = workInProgress.sibling;
+        renderLanes.return = workInProgress.return;
+        renderLanes.ref = workInProgress.ref;
+        renderLanes._debugInfo = workInProgress._debugInfo;
+        if (workInProgress === returnFiber.child)
+          returnFiber.child = renderLanes;
+        else {
+          var prevSibling = returnFiber.child;
+          if (null === prevSibling)
+            throw Error("Expected parent to have a child.");
+          for (; prevSibling.sibling !== workInProgress; )
+            if (((prevSibling = prevSibling.sibling), null === prevSibling))
+              throw Error("Expected to find the previous sibling.");
+          prevSibling.sibling = renderLanes;
+        }
+        workInProgress = returnFiber.deletions;
+        null === workInProgress
+          ? ((returnFiber.deletions = [current]), (returnFiber.flags |= 16))
+          : workInProgress.push(current);
+        renderLanes.flags |= 2;
+        return renderLanes;
+      }
+      if (null !== current)
+        if (
+          current.memoizedProps !== workInProgress.pendingProps ||
+          workInProgress.type !== current.type
+        )
+          didReceiveUpdate = !0;
+        else {
+          if (
+            !checkScheduledUpdateOrContext(current, renderLanes) &&
+            0 === (workInProgress.flags & 128)
+          )
+            return (
+              (didReceiveUpdate = !1),
+              attemptEarlyBailoutIfNoScheduledUpdate(
+                current,
+                workInProgress,
+                renderLanes
+              )
+            );
+          didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;
+        }
+      else {
+        didReceiveUpdate = !1;
+        if ((returnFiber = isHydrating))
+          warnIfNotHydrating(),
+            (returnFiber = 0 !== (workInProgress.flags & 1048576));
+        returnFiber &&
+          ((returnFiber = workInProgress.index),
+          warnIfNotHydrating(),
+          pushTreeId(workInProgress, treeForkCount, returnFiber));
+      }
+      workInProgress.lanes = 0;
+      switch (workInProgress.tag) {
+        case 16:
+          a: if (
+            ((returnFiber = workInProgress.pendingProps),
+            (current = callLazyInitInDEV(workInProgress.elementType)),
+            (workInProgress.type = current),
+            "function" === typeof current)
+          )
+            shouldConstruct(current)
+              ? ((returnFiber = resolveClassComponentProps(
+                  current,
+                  returnFiber
+                )),
+                (workInProgress.tag = 1),
+                (workInProgress.type = current =
+                  resolveFunctionForHotReloading(current)),
+                (workInProgress = updateClassComponent(
+                  null,
+                  workInProgress,
+                  current,
+                  returnFiber,
+                  renderLanes
+                )))
+              : ((workInProgress.tag = 0),
+                validateFunctionComponentInDev(workInProgress, current),
+                (workInProgress.type = current =
+                  resolveFunctionForHotReloading(current)),
+                (workInProgress = updateFunctionComponent(
+                  null,
+                  workInProgress,
+                  current,
+                  returnFiber,
+                  renderLanes
+                )));
+          else {
+            if (void 0 !== current && null !== current)
+              if (
+                ((prevSibling = current.$$typeof),
+                prevSibling === REACT_FORWARD_REF_TYPE)
+              ) {
+                workInProgress.tag = 11;
+                workInProgress.type = current =
+                  resolveForwardRefForHotReloading(current);
+                workInProgress = updateForwardRef(
+                  null,
+                  workInProgress,
+                  current,
+                  returnFiber,
+                  renderLanes
+                );
+                break a;
+              } else if (prevSibling === REACT_MEMO_TYPE) {
+                workInProgress.tag = 14;
+                workInProgress = updateMemoComponent(
+                  null,
+                  workInProgress,
+                  current,
+                  returnFiber,
+                  renderLanes
+                );
+                break a;
+              }
+            workInProgress = "";
+            null !== current &&
+              "object" === typeof current &&
+              current.$$typeof === REACT_LAZY_TYPE &&
+              (workInProgress =
+                " Did you wrap a component in React.lazy() more than once?");
+            current = getComponentNameFromType(current) || current;
+            throw Error(
+              "Element type is invalid. Received a promise that resolves to: " +
+                current +
+                ". Lazy element type must resolve to a class or function." +
+                workInProgress
+            );
+          }
+          return workInProgress;
+        case 0:
+          return updateFunctionComponent(
+            current,
+            workInProgress,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            renderLanes
+          );
+        case 1:
+          return (
+            (returnFiber = workInProgress.type),
+            (prevSibling = resolveClassComponentProps(
+              returnFiber,
+              workInProgress.pendingProps
+            )),
+            updateClassComponent(
+              current,
+              workInProgress,
+              returnFiber,
+              prevSibling,
+              renderLanes
+            )
+          );
+        case 3:
+          a: {
+            pushHostContainer(
+              workInProgress,
+              workInProgress.stateNode.containerInfo
+            );
+            if (null === current)
+              throw Error(
+                "Should have a current fiber. This is a bug in React."
+              );
+            returnFiber = workInProgress.pendingProps;
+            var prevState = workInProgress.memoizedState;
+            prevSibling = prevState.element;
+            cloneUpdateQueue(current, workInProgress);
+            processUpdateQueue(workInProgress, returnFiber, null, renderLanes);
+            var nextState = workInProgress.memoizedState;
+            returnFiber = nextState.cache;
+            pushProvider(workInProgress, CacheContext, returnFiber);
+            returnFiber !== prevState.cache &&
+              propagateContextChanges(
+                workInProgress,
+                [CacheContext],
+                renderLanes,
+                !0
+              );
+            suspendIfUpdateReadFromEntangledAsyncAction();
+            returnFiber = nextState.element;
+            if (prevState.isDehydrated)
+              if (
+                ((prevState = {
+                  element: returnFiber,
+                  isDehydrated: !1,
+                  cache: nextState.cache
+                }),
+                (workInProgress.updateQueue.baseState = prevState),
+                (workInProgress.memoizedState = prevState),
+                workInProgress.flags & 256)
+              ) {
+                workInProgress = mountHostRootWithoutHydrating(
+                  current,
+                  workInProgress,
+                  returnFiber,
+                  renderLanes
+                );
+                break a;
+              } else if (returnFiber !== prevSibling) {
+                prevSibling = createCapturedValueAtFiber(
+                  Error(
+                    "This root received an early update, before anything was able hydrate. Switched the entire root to client rendering."
+                  ),
+                  workInProgress
+                );
+                queueHydrationError(prevSibling);
+                workInProgress = mountHostRootWithoutHydrating(
+                  current,
+                  workInProgress,
+                  returnFiber,
+                  renderLanes
+                );
+                break a;
+              } else {
+                current = workInProgress.stateNode.containerInfo;
+                switch (current.nodeType) {
+                  case 9:
+                    current = current.body;
+                    break;
+                  default:
+                    current =
+                      "HTML" === current.nodeName
+                        ? current.ownerDocument.body
+                        : current;
+                }
+                nextHydratableInstance = getNextHydratable(current.firstChild);
+                hydrationParentFiber = workInProgress;
+                isHydrating = !0;
+                hydrationErrors = null;
+                didSuspendOrErrorDEV = !1;
+                hydrationDiffRootDEV = null;
+                rootOrSingletonContext = !0;
+                current = mountChildFibers(
+                  workInProgress,
+                  null,
+                  returnFiber,
+                  renderLanes
+                );
+                for (workInProgress.child = current; current; )
+                  (current.flags = (current.flags & -3) | 4096),
+                    (current = current.sibling);
+              }
+            else {
+              resetHydrationState();
+              if (returnFiber === prevSibling) {
+                workInProgress = bailoutOnAlreadyFinishedWork(
+                  current,
+                  workInProgress,
+                  renderLanes
+                );
+                break a;
+              }
+              reconcileChildren(
+                current,
+                workInProgress,
+                returnFiber,
+                renderLanes
+              );
+            }
+            workInProgress = workInProgress.child;
+          }
+          return workInProgress;
+        case 26:
+          return (
+            markRef(current, workInProgress),
+            null === current
+              ? (current = getResource(
+                  workInProgress.type,
+                  null,
+                  workInProgress.pendingProps,
+                  null
+                ))
+                ? (workInProgress.memoizedState = current)
+                : isHydrating ||
+                  ((current = workInProgress.type),
+                  (renderLanes = workInProgress.pendingProps),
+                  (returnFiber = requiredContext(
+                    rootInstanceStackCursor.current
+                  )),
+                  (returnFiber =
+                    getOwnerDocumentFromRootContainer(
+                      returnFiber
+                    ).createElement(current)),
+                  (returnFiber[internalInstanceKey] = workInProgress),
+                  (returnFiber[internalPropsKey] = renderLanes),
+                  setInitialProperties(returnFiber, current, renderLanes),
+                  markNodeAsHoistable(returnFiber),
+                  (workInProgress.stateNode = returnFiber))
+              : (workInProgress.memoizedState = getResource(
+                  workInProgress.type,
+                  current.memoizedProps,
+                  workInProgress.pendingProps,
+                  current.memoizedState
+                )),
+            null
+          );
+        case 27:
+          return (
+            pushHostContext(workInProgress),
+            null === current &&
+              isHydrating &&
+              ((returnFiber = requiredContext(rootInstanceStackCursor.current)),
+              (prevSibling = getHostContext()),
+              (returnFiber = workInProgress.stateNode =
+                resolveSingletonInstance(
+                  workInProgress.type,
+                  workInProgress.pendingProps,
+                  returnFiber,
+                  prevSibling,
+                  !1
+                )),
+              didSuspendOrErrorDEV ||
+                ((prevSibling = diffHydratedProperties(
+                  returnFiber,
+                  workInProgress.type,
+                  workInProgress.pendingProps,
+                  prevSibling
+                )),
+                null !== prevSibling &&
+                  (buildHydrationDiffNode(workInProgress, 0).serverProps =
+                    prevSibling)),
+              (hydrationParentFiber = workInProgress),
+              (rootOrSingletonContext = !0),
+              (prevSibling = nextHydratableInstance),
+              isSingletonScope(workInProgress.type)
+                ? ((previousHydratableOnEnteringScopedSingleton = prevSibling),
+                  (nextHydratableInstance = getNextHydratable(
+                    returnFiber.firstChild
+                  )))
+                : (nextHydratableInstance = prevSibling)),
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps.children,
+              renderLanes
+            ),
+            markRef(current, workInProgress),
+            null === current && (workInProgress.flags |= 4194304),
+            workInProgress.child
+          );
+        case 5:
+          return (
+            null === current &&
+              isHydrating &&
+              ((prevState = getHostContext()),
+              (returnFiber = validateDOMNesting(
+                workInProgress.type,
+                prevState.ancestorInfo
+              )),
+              (prevSibling = nextHydratableInstance),
+              (nextState = !prevSibling) ||
+                ((nextState = canHydrateInstance(
+                  prevSibling,
+                  workInProgress.type,
+                  workInProgress.pendingProps,
+                  rootOrSingletonContext
+                )),
+                null !== nextState
+                  ? ((workInProgress.stateNode = nextState),
+                    didSuspendOrErrorDEV ||
+                      ((prevState = diffHydratedProperties(
+                        nextState,
+                        workInProgress.type,
+                        workInProgress.pendingProps,
+                        prevState
+                      )),
+                      null !== prevState &&
+                        (buildHydrationDiffNode(workInProgress, 0).serverProps =
+                          prevState)),
+                    (hydrationParentFiber = workInProgress),
+                    (nextHydratableInstance = getNextHydratable(
+                      nextState.firstChild
+                    )),
+                    (rootOrSingletonContext = !1),
+                    (prevState = !0))
+                  : (prevState = !1),
+                (nextState = !prevState)),
+              nextState &&
+                (returnFiber &&
+                  warnNonHydratedInstance(workInProgress, prevSibling),
+                throwOnHydrationMismatch(workInProgress))),
+            pushHostContext(workInProgress),
+            (prevSibling = workInProgress.type),
+            (prevState = workInProgress.pendingProps),
+            (nextState = null !== current ? current.memoizedProps : null),
+            (returnFiber = prevState.children),
+            shouldSetTextContent(prevSibling, prevState)
+              ? (returnFiber = null)
+              : null !== nextState &&
+                shouldSetTextContent(prevSibling, nextState) &&
+                (workInProgress.flags |= 32),
+            null !== workInProgress.memoizedState &&
+              ((prevSibling = renderWithHooks(
+                current,
+                workInProgress,
+                TransitionAwareHostComponent,
+                null,
+                null,
+                renderLanes
+              )),
+              (HostTransitionContext._currentValue = prevSibling)),
+            markRef(current, workInProgress),
+            reconcileChildren(
+              current,
+              workInProgress,
+              returnFiber,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 6:
+          return (
+            null === current &&
+              isHydrating &&
+              ((current = workInProgress.pendingProps),
+              (renderLanes = getHostContext()),
+              (returnFiber = renderLanes.ancestorInfo.current),
+              (current =
+                null != returnFiber
+                  ? validateTextNesting(
+                      current,
+                      returnFiber.tag,
+                      renderLanes.ancestorInfo.implicitRootScope
+                    )
+                  : !0),
+              (renderLanes = nextHydratableInstance),
+              (returnFiber = !renderLanes) ||
+                ((returnFiber = canHydrateTextInstance(
+                  renderLanes,
+                  workInProgress.pendingProps,
+                  rootOrSingletonContext
+                )),
+                null !== returnFiber
+                  ? ((workInProgress.stateNode = returnFiber),
+                    (hydrationParentFiber = workInProgress),
+                    (nextHydratableInstance = null),
+                    (returnFiber = !0))
+                  : (returnFiber = !1),
+                (returnFiber = !returnFiber)),
+              returnFiber &&
+                (current &&
+                  warnNonHydratedInstance(workInProgress, renderLanes),
+                throwOnHydrationMismatch(workInProgress))),
+            null
+          );
+        case 13:
+          return updateSuspenseComponent(current, workInProgress, renderLanes);
+        case 4:
+          return (
+            pushHostContainer(
+              workInProgress,
+              workInProgress.stateNode.containerInfo
+            ),
+            (returnFiber = workInProgress.pendingProps),
+            null === current
+              ? (workInProgress.child = reconcileChildFibers(
+                  workInProgress,
+                  null,
+                  returnFiber,
+                  renderLanes
+                ))
+              : reconcileChildren(
+                  current,
+                  workInProgress,
+                  returnFiber,
+                  renderLanes
+                ),
+            workInProgress.child
+          );
+        case 11:
+          return updateForwardRef(
+            current,
+            workInProgress,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            renderLanes
+          );
+        case 7:
+          return (
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 8:
+          return (
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps.children,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 12:
+          return (
+            (workInProgress.flags |= 4),
+            (workInProgress.flags |= 2048),
+            (returnFiber = workInProgress.stateNode),
+            (returnFiber.effectDuration = -0),
+            (returnFiber.passiveEffectDuration = -0),
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps.children,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 10:
+          return (
+            (returnFiber = workInProgress.type),
+            (prevSibling = workInProgress.pendingProps),
+            (prevState = prevSibling.value),
+            "value" in prevSibling ||
+              hasWarnedAboutUsingNoValuePropOnContextProvider ||
+              ((hasWarnedAboutUsingNoValuePropOnContextProvider = !0),
+              console.error(
+                "The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?"
+              )),
+            pushProvider(workInProgress, returnFiber, prevState),
+            reconcileChildren(
+              current,
+              workInProgress,
+              prevSibling.children,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 9:
+          return (
+            (prevSibling = workInProgress.type._context),
+            (returnFiber = workInProgress.pendingProps.children),
+            "function" !== typeof returnFiber &&
+              console.error(
+                "A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."
+              ),
+            prepareToReadContext(workInProgress),
+            (prevSibling = readContext(prevSibling)),
+            markComponentRenderStarted(workInProgress),
+            (returnFiber = callComponentInDEV(
+              returnFiber,
+              prevSibling,
+              void 0
+            )),
+            markComponentRenderStopped(),
+            (workInProgress.flags |= 1),
+            reconcileChildren(
+              current,
+              workInProgress,
+              returnFiber,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 14:
+          return updateMemoComponent(
+            current,
+            workInProgress,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            renderLanes
+          );
+        case 15:
+          return updateSimpleMemoComponent(
+            current,
+            workInProgress,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            renderLanes
+          );
+        case 19:
+          return updateSuspenseListComponent(
+            current,
+            workInProgress,
+            renderLanes
+          );
+        case 31:
+          return (
+            (returnFiber = workInProgress.pendingProps),
+            (renderLanes = workInProgress.mode),
+            (returnFiber = {
+              mode: returnFiber.mode,
+              children: returnFiber.children
+            }),
+            null === current
+              ? ((current = mountWorkInProgressOffscreenFiber(
+                  returnFiber,
+                  renderLanes
+                )),
+                (current.ref = workInProgress.ref),
+                (workInProgress.child = current),
+                (current.return = workInProgress),
+                (workInProgress = current))
+              : ((current = createWorkInProgress(current.child, returnFiber)),
+                (current.ref = workInProgress.ref),
+                (workInProgress.child = current),
+                (current.return = workInProgress),
+                (workInProgress = current)),
+            workInProgress
+          );
+        case 22:
+          return updateOffscreenComponent(current, workInProgress, renderLanes);
+        case 24:
+          return (
+            prepareToReadContext(workInProgress),
+            (returnFiber = readContext(CacheContext)),
+            null === current
+              ? ((prevSibling = peekCacheFromPool()),
+                null === prevSibling &&
+                  ((prevSibling = workInProgressRoot),
+                  (prevState = createCache()),
+                  (prevSibling.pooledCache = prevState),
+                  retainCache(prevState),
+                  null !== prevState &&
+                    (prevSibling.pooledCacheLanes |= renderLanes),
+                  (prevSibling = prevState)),
+                (workInProgress.memoizedState = {
+                  parent: returnFiber,
+                  cache: prevSibling
+                }),
+                initializeUpdateQueue(workInProgress),
+                pushProvider(workInProgress, CacheContext, prevSibling))
+              : (0 !== (current.lanes & renderLanes) &&
+                  (cloneUpdateQueue(current, workInProgress),
+                  processUpdateQueue(workInProgress, null, null, renderLanes),
+                  suspendIfUpdateReadFromEntangledAsyncAction()),
+                (prevSibling = current.memoizedState),
+                (prevState = workInProgress.memoizedState),
+                prevSibling.parent !== returnFiber
+                  ? ((prevSibling = {
+                      parent: returnFiber,
+                      cache: returnFiber
+                    }),
+                    (workInProgress.memoizedState = prevSibling),
+                    0 === workInProgress.lanes &&
+                      (workInProgress.memoizedState =
+                        workInProgress.updateQueue.baseState =
+                          prevSibling),
+                    pushProvider(workInProgress, CacheContext, returnFiber))
+                  : ((returnFiber = prevState.cache),
+                    pushProvider(workInProgress, CacheContext, returnFiber),
+                    returnFiber !== prevSibling.cache &&
+                      propagateContextChanges(
+                        workInProgress,
+                        [CacheContext],
+                        renderLanes,
+                        !0
+                      ))),
+            reconcileChildren(
+              current,
+              workInProgress,
+              workInProgress.pendingProps.children,
+              renderLanes
+            ),
+            workInProgress.child
+          );
+        case 29:
+          throw workInProgress.pendingProps;
+      }
+      throw Error(
+        "Unknown unit of work tag (" +
+          workInProgress.tag +
+          "). This error is likely caused by a bug in React. Please file an issue."
+      );
+    }
+    function markUpdate(workInProgress) {
+      workInProgress.flags |= 4;
+    }
+    function preloadResourceAndSuspendIfNeeded(workInProgress, resource) {
+      if (
+        "stylesheet" !== resource.type ||
+        (resource.state.loading & Inserted) !== NotLoaded
+      )
+        workInProgress.flags &= -16777217;
+      else if (
+        ((workInProgress.flags |= 16777216), !preloadResource(resource))
+      ) {
+        resource = suspenseHandlerStackCursor.current;
+        if (
+          null !== resource &&
+          ((workInProgressRootRenderLanes & 4194048) ===
+          workInProgressRootRenderLanes
+            ? null !== shellBoundary
+            : ((workInProgressRootRenderLanes & 62914560) !==
+                workInProgressRootRenderLanes &&
+                0 === (workInProgressRootRenderLanes & 536870912)) ||
+              resource !== shellBoundary)
+        )
+          throw (
+            ((suspendedThenable = noopSuspenseyCommitThenable),
+            SuspenseyCommitException)
+          );
+        workInProgress.flags |= 8192;
+      }
+    }
+    function scheduleRetryEffect(workInProgress, retryQueue) {
+      null !== retryQueue && (workInProgress.flags |= 4);
+      workInProgress.flags & 16384 &&
+        ((retryQueue =
+          22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),
+        (workInProgress.lanes |= retryQueue),
+        (workInProgressSuspendedRetryLanes |= retryQueue));
+    }
+    function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {
+      if (!isHydrating)
+        switch (renderState.tailMode) {
+          case "hidden":
+            hasRenderedATailFallback = renderState.tail;
+            for (var lastTailNode = null; null !== hasRenderedATailFallback; )
+              null !== hasRenderedATailFallback.alternate &&
+                (lastTailNode = hasRenderedATailFallback),
+                (hasRenderedATailFallback = hasRenderedATailFallback.sibling);
+            null === lastTailNode
+              ? (renderState.tail = null)
+              : (lastTailNode.sibling = null);
+            break;
+          case "collapsed":
+            lastTailNode = renderState.tail;
+            for (var _lastTailNode = null; null !== lastTailNode; )
+              null !== lastTailNode.alternate && (_lastTailNode = lastTailNode),
+                (lastTailNode = lastTailNode.sibling);
+            null === _lastTailNode
+              ? hasRenderedATailFallback || null === renderState.tail
+                ? (renderState.tail = null)
+                : (renderState.tail.sibling = null)
+              : (_lastTailNode.sibling = null);
+        }
+    }
+    function bubbleProperties(completedWork) {
+      var didBailout =
+          null !== completedWork.alternate &&
+          completedWork.alternate.child === completedWork.child,
+        newChildLanes = 0,
+        subtreeFlags = 0;
+      if (didBailout)
+        if ((completedWork.mode & ProfileMode) !== NoMode) {
+          for (
+            var _treeBaseDuration = completedWork.selfBaseDuration,
+              _child2 = completedWork.child;
+            null !== _child2;
+
+          )
+            (newChildLanes |= _child2.lanes | _child2.childLanes),
+              (subtreeFlags |= _child2.subtreeFlags & 65011712),
+              (subtreeFlags |= _child2.flags & 65011712),
+              (_treeBaseDuration += _child2.treeBaseDuration),
+              (_child2 = _child2.sibling);
+          completedWork.treeBaseDuration = _treeBaseDuration;
+        } else
+          for (
+            _treeBaseDuration = completedWork.child;
+            null !== _treeBaseDuration;
+
+          )
+            (newChildLanes |=
+              _treeBaseDuration.lanes | _treeBaseDuration.childLanes),
+              (subtreeFlags |= _treeBaseDuration.subtreeFlags & 65011712),
+              (subtreeFlags |= _treeBaseDuration.flags & 65011712),
+              (_treeBaseDuration.return = completedWork),
+              (_treeBaseDuration = _treeBaseDuration.sibling);
+      else if ((completedWork.mode & ProfileMode) !== NoMode) {
+        _treeBaseDuration = completedWork.actualDuration;
+        _child2 = completedWork.selfBaseDuration;
+        for (var child = completedWork.child; null !== child; )
+          (newChildLanes |= child.lanes | child.childLanes),
+            (subtreeFlags |= child.subtreeFlags),
+            (subtreeFlags |= child.flags),
+            (_treeBaseDuration += child.actualDuration),
+            (_child2 += child.treeBaseDuration),
+            (child = child.sibling);
+        completedWork.actualDuration = _treeBaseDuration;
+        completedWork.treeBaseDuration = _child2;
+      } else
+        for (
+          _treeBaseDuration = completedWork.child;
+          null !== _treeBaseDuration;
+
+        )
+          (newChildLanes |=
+            _treeBaseDuration.lanes | _treeBaseDuration.childLanes),
+            (subtreeFlags |= _treeBaseDuration.subtreeFlags),
+            (subtreeFlags |= _treeBaseDuration.flags),
+            (_treeBaseDuration.return = completedWork),
+            (_treeBaseDuration = _treeBaseDuration.sibling);
+      completedWork.subtreeFlags |= subtreeFlags;
+      completedWork.childLanes = newChildLanes;
+      return didBailout;
+    }
+    function completeWork(current, workInProgress, renderLanes) {
+      var newProps = workInProgress.pendingProps;
+      popTreeContext(workInProgress);
+      switch (workInProgress.tag) {
+        case 31:
+        case 16:
+        case 15:
+        case 0:
+        case 11:
+        case 7:
+        case 8:
+        case 12:
+        case 9:
+        case 14:
+          return bubbleProperties(workInProgress), null;
+        case 1:
+          return bubbleProperties(workInProgress), null;
+        case 3:
+          renderLanes = workInProgress.stateNode;
+          newProps = null;
+          null !== current && (newProps = current.memoizedState.cache);
+          workInProgress.memoizedState.cache !== newProps &&
+            (workInProgress.flags |= 2048);
+          popProvider(CacheContext, workInProgress);
+          popHostContainer(workInProgress);
+          renderLanes.pendingContext &&
+            ((renderLanes.context = renderLanes.pendingContext),
+            (renderLanes.pendingContext = null));
+          if (null === current || null === current.child)
+            popHydrationState(workInProgress)
+              ? (emitPendingHydrationWarnings(), markUpdate(workInProgress))
+              : null === current ||
+                (current.memoizedState.isDehydrated &&
+                  0 === (workInProgress.flags & 256)) ||
+                ((workInProgress.flags |= 1024),
+                upgradeHydrationErrorsToRecoverable());
+          bubbleProperties(workInProgress);
+          return null;
+        case 26:
+          return (
+            (renderLanes = workInProgress.memoizedState),
+            null === current
+              ? (markUpdate(workInProgress),
+                null !== renderLanes
+                  ? (bubbleProperties(workInProgress),
+                    preloadResourceAndSuspendIfNeeded(
+                      workInProgress,
+                      renderLanes
+                    ))
+                  : (bubbleProperties(workInProgress),
+                    (workInProgress.flags &= -16777217)))
+              : renderLanes
+                ? renderLanes !== current.memoizedState
+                  ? (markUpdate(workInProgress),
+                    bubbleProperties(workInProgress),
+                    preloadResourceAndSuspendIfNeeded(
+                      workInProgress,
+                      renderLanes
+                    ))
+                  : (bubbleProperties(workInProgress),
+                    (workInProgress.flags &= -16777217))
+                : (current.memoizedProps !== newProps &&
+                    markUpdate(workInProgress),
+                  bubbleProperties(workInProgress),
+                  (workInProgress.flags &= -16777217)),
+            null
+          );
+        case 27:
+          popHostContext(workInProgress);
+          renderLanes = requiredContext(rootInstanceStackCursor.current);
+          var _type = workInProgress.type;
+          if (null !== current && null != workInProgress.stateNode)
+            current.memoizedProps !== newProps && markUpdate(workInProgress);
+          else {
+            if (!newProps) {
+              if (null === workInProgress.stateNode)
+                throw Error(
+                  "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."
+                );
+              bubbleProperties(workInProgress);
+              return null;
+            }
+            current = getHostContext();
+            popHydrationState(workInProgress)
+              ? prepareToHydrateHostInstance(workInProgress, current)
+              : ((current = resolveSingletonInstance(
+                  _type,
+                  newProps,
+                  renderLanes,
+                  current,
+                  !0
+                )),
+                (workInProgress.stateNode = current),
+                markUpdate(workInProgress));
+          }
+          bubbleProperties(workInProgress);
+          return null;
+        case 5:
+          popHostContext(workInProgress);
+          renderLanes = workInProgress.type;
+          if (null !== current && null != workInProgress.stateNode)
+            current.memoizedProps !== newProps && markUpdate(workInProgress);
+          else {
+            if (!newProps) {
+              if (null === workInProgress.stateNode)
+                throw Error(
+                  "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."
+                );
+              bubbleProperties(workInProgress);
+              return null;
+            }
+            _type = getHostContext();
+            if (popHydrationState(workInProgress))
+              prepareToHydrateHostInstance(workInProgress, _type);
+            else {
+              current = requiredContext(rootInstanceStackCursor.current);
+              validateDOMNesting(renderLanes, _type.ancestorInfo);
+              _type = _type.context;
+              current = getOwnerDocumentFromRootContainer(current);
+              switch (_type) {
+                case HostContextNamespaceSvg:
+                  current = current.createElementNS(SVG_NAMESPACE, renderLanes);
+                  break;
+                case HostContextNamespaceMath:
+                  current = current.createElementNS(
+                    MATH_NAMESPACE,
+                    renderLanes
+                  );
+                  break;
+                default:
+                  switch (renderLanes) {
+                    case "svg":
+                      current = current.createElementNS(
+                        SVG_NAMESPACE,
+                        renderLanes
+                      );
+                      break;
+                    case "math":
+                      current = current.createElementNS(
+                        MATH_NAMESPACE,
+                        renderLanes
+                      );
+                      break;
+                    case "script":
+                      current = current.createElement("div");
+                      current.innerHTML = "<script>\x3c/script>";
+                      current = current.removeChild(current.firstChild);
+                      break;
+                    case "select":
+                      current =
+                        "string" === typeof newProps.is
+                          ? current.createElement("select", { is: newProps.is })
+                          : current.createElement("select");
+                      newProps.multiple
+                        ? (current.multiple = !0)
+                        : newProps.size && (current.size = newProps.size);
+                      break;
+                    default:
+                      (current =
+                        "string" === typeof newProps.is
+                          ? current.createElement(renderLanes, {
+                              is: newProps.is
+                            })
+                          : current.createElement(renderLanes)),
+                        -1 === renderLanes.indexOf("-") &&
+                          (renderLanes !== renderLanes.toLowerCase() &&
+                            console.error(
+                              "<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.",
+                              renderLanes
+                            ),
+                          "[object HTMLUnknownElement]" !==
+                            Object.prototype.toString.call(current) ||
+                            hasOwnProperty.call(
+                              warnedUnknownTags,
+                              renderLanes
+                            ) ||
+                            ((warnedUnknownTags[renderLanes] = !0),
+                            console.error(
+                              "The tag <%s> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.",
+                              renderLanes
+                            )));
+                  }
+              }
+              current[internalInstanceKey] = workInProgress;
+              current[internalPropsKey] = newProps;
+              a: for (_type = workInProgress.child; null !== _type; ) {
+                if (5 === _type.tag || 6 === _type.tag)
+                  current.appendChild(_type.stateNode);
+                else if (
+                  4 !== _type.tag &&
+                  27 !== _type.tag &&
+                  null !== _type.child
+                ) {
+                  _type.child.return = _type;
+                  _type = _type.child;
+                  continue;
+                }
+                if (_type === workInProgress) break a;
+                for (; null === _type.sibling; ) {
+                  if (null === _type.return || _type.return === workInProgress)
+                    break a;
+                  _type = _type.return;
+                }
+                _type.sibling.return = _type.return;
+                _type = _type.sibling;
+              }
+              workInProgress.stateNode = current;
+              a: switch (
+                (setInitialProperties(current, renderLanes, newProps),
+                renderLanes)
+              ) {
+                case "button":
+                case "input":
+                case "select":
+                case "textarea":
+                  current = !!newProps.autoFocus;
+                  break a;
+                case "img":
+                  current = !0;
+                  break a;
+                default:
+                  current = !1;
+              }
+              current && markUpdate(workInProgress);
+            }
+          }
+          bubbleProperties(workInProgress);
+          workInProgress.flags &= -16777217;
+          return null;
+        case 6:
+          if (current && null != workInProgress.stateNode)
+            current.memoizedProps !== newProps && markUpdate(workInProgress);
+          else {
+            if (
+              "string" !== typeof newProps &&
+              null === workInProgress.stateNode
+            )
+              throw Error(
+                "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."
+              );
+            current = requiredContext(rootInstanceStackCursor.current);
+            renderLanes = getHostContext();
+            if (popHydrationState(workInProgress)) {
+              current = workInProgress.stateNode;
+              renderLanes = workInProgress.memoizedProps;
+              _type = !didSuspendOrErrorDEV;
+              newProps = null;
+              var returnFiber = hydrationParentFiber;
+              if (null !== returnFiber)
+                switch (returnFiber.tag) {
+                  case 3:
+                    _type &&
+                      ((_type = diffHydratedTextForDevWarnings(
+                        current,
+                        renderLanes,
+                        newProps
+                      )),
+                      null !== _type &&
+                        (buildHydrationDiffNode(workInProgress, 0).serverProps =
+                          _type));
+                    break;
+                  case 27:
+                  case 5:
+                    (newProps = returnFiber.memoizedProps),
+                      _type &&
+                        ((_type = diffHydratedTextForDevWarnings(
+                          current,
+                          renderLanes,
+                          newProps
+                        )),
+                        null !== _type &&
+                          (buildHydrationDiffNode(
+                            workInProgress,
+                            0
+                          ).serverProps = _type));
+                }
+              current[internalInstanceKey] = workInProgress;
+              current =
+                current.nodeValue === renderLanes ||
+                (null !== newProps &&
+                  !0 === newProps.suppressHydrationWarning) ||
+                checkForUnmatchedText(current.nodeValue, renderLanes)
+                  ? !0
+                  : !1;
+              current || throwOnHydrationMismatch(workInProgress);
+            } else
+              (_type = renderLanes.ancestorInfo.current),
+                null != _type &&
+                  validateTextNesting(
+                    newProps,
+                    _type.tag,
+                    renderLanes.ancestorInfo.implicitRootScope
+                  ),
+                (current =
+                  getOwnerDocumentFromRootContainer(current).createTextNode(
+                    newProps
+                  )),
+                (current[internalInstanceKey] = workInProgress),
+                (workInProgress.stateNode = current);
+          }
+          bubbleProperties(workInProgress);
+          return null;
+        case 13:
+          newProps = workInProgress.memoizedState;
+          if (
+            null === current ||
+            (null !== current.memoizedState &&
+              null !== current.memoizedState.dehydrated)
+          ) {
+            _type = popHydrationState(workInProgress);
+            if (null !== newProps && null !== newProps.dehydrated) {
+              if (null === current) {
+                if (!_type)
+                  throw Error(
+                    "A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React."
+                  );
+                _type = workInProgress.memoizedState;
+                _type = null !== _type ? _type.dehydrated : null;
+                if (!_type)
+                  throw Error(
+                    "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue."
+                  );
+                _type[internalInstanceKey] = workInProgress;
+                bubbleProperties(workInProgress);
+                (workInProgress.mode & ProfileMode) !== NoMode &&
+                  null !== newProps &&
+                  ((_type = workInProgress.child),
+                  null !== _type &&
+                    (workInProgress.treeBaseDuration -=
+                      _type.treeBaseDuration));
+              } else
+                emitPendingHydrationWarnings(),
+                  resetHydrationState(),
+                  0 === (workInProgress.flags & 128) &&
+                    (workInProgress.memoizedState = null),
+                  (workInProgress.flags |= 4),
+                  bubbleProperties(workInProgress),
+                  (workInProgress.mode & ProfileMode) !== NoMode &&
+                    null !== newProps &&
+                    ((_type = workInProgress.child),
+                    null !== _type &&
+                      (workInProgress.treeBaseDuration -=
+                        _type.treeBaseDuration));
+              _type = !1;
+            } else
+              (_type = upgradeHydrationErrorsToRecoverable()),
+                null !== current &&
+                  null !== current.memoizedState &&
+                  (current.memoizedState.hydrationErrors = _type),
+                (_type = !0);
+            if (!_type) {
+              if (workInProgress.flags & 256)
+                return popSuspenseHandler(workInProgress), workInProgress;
+              popSuspenseHandler(workInProgress);
+              return null;
+            }
+          }
+          popSuspenseHandler(workInProgress);
+          if (0 !== (workInProgress.flags & 128))
+            return (
+              (workInProgress.lanes = renderLanes),
+              (workInProgress.mode & ProfileMode) !== NoMode &&
+                transferActualDuration(workInProgress),
+              workInProgress
+            );
+          renderLanes = null !== newProps;
+          current = null !== current && null !== current.memoizedState;
+          renderLanes &&
+            ((newProps = workInProgress.child),
+            (_type = null),
+            null !== newProps.alternate &&
+              null !== newProps.alternate.memoizedState &&
+              null !== newProps.alternate.memoizedState.cachePool &&
+              (_type = newProps.alternate.memoizedState.cachePool.pool),
+            (returnFiber = null),
+            null !== newProps.memoizedState &&
+              null !== newProps.memoizedState.cachePool &&
+              (returnFiber = newProps.memoizedState.cachePool.pool),
+            returnFiber !== _type && (newProps.flags |= 2048));
+          renderLanes !== current &&
+            renderLanes &&
+            (workInProgress.child.flags |= 8192);
+          scheduleRetryEffect(workInProgress, workInProgress.updateQueue);
+          bubbleProperties(workInProgress);
+          (workInProgress.mode & ProfileMode) !== NoMode &&
+            renderLanes &&
+            ((current = workInProgress.child),
+            null !== current &&
+              (workInProgress.treeBaseDuration -= current.treeBaseDuration));
+          return null;
+        case 4:
+          return (
+            popHostContainer(workInProgress),
+            null === current &&
+              listenToAllSupportedEvents(
+                workInProgress.stateNode.containerInfo
+              ),
+            bubbleProperties(workInProgress),
+            null
+          );
+        case 10:
+          return (
+            popProvider(workInProgress.type, workInProgress),
+            bubbleProperties(workInProgress),
+            null
+          );
+        case 19:
+          pop(suspenseStackCursor, workInProgress);
+          _type = workInProgress.memoizedState;
+          if (null === _type) return bubbleProperties(workInProgress), null;
+          newProps = 0 !== (workInProgress.flags & 128);
+          returnFiber = _type.rendering;
+          if (null === returnFiber)
+            if (newProps) cutOffTailIfNeeded(_type, !1);
+            else {
+              if (
+                workInProgressRootExitStatus !== RootInProgress ||
+                (null !== current && 0 !== (current.flags & 128))
+              )
+                for (current = workInProgress.child; null !== current; ) {
+                  returnFiber = findFirstSuspended(current);
+                  if (null !== returnFiber) {
+                    workInProgress.flags |= 128;
+                    cutOffTailIfNeeded(_type, !1);
+                    current = returnFiber.updateQueue;
+                    workInProgress.updateQueue = current;
+                    scheduleRetryEffect(workInProgress, current);
+                    workInProgress.subtreeFlags = 0;
+                    current = renderLanes;
+                    for (
+                      renderLanes = workInProgress.child;
+                      null !== renderLanes;
+
+                    )
+                      resetWorkInProgress(renderLanes, current),
+                        (renderLanes = renderLanes.sibling);
+                    push(
+                      suspenseStackCursor,
+                      (suspenseStackCursor.current &
+                        SubtreeSuspenseContextMask) |
+                        ForceSuspenseFallback,
+                      workInProgress
+                    );
+                    return workInProgress.child;
+                  }
+                  current = current.sibling;
+                }
+              null !== _type.tail &&
+                now$1() > workInProgressRootRenderTargetTime &&
+                ((workInProgress.flags |= 128),
+                (newProps = !0),
+                cutOffTailIfNeeded(_type, !1),
+                (workInProgress.lanes = 4194304));
+            }
+          else {
+            if (!newProps)
+              if (
+                ((current = findFirstSuspended(returnFiber)), null !== current)
+              ) {
+                if (
+                  ((workInProgress.flags |= 128),
+                  (newProps = !0),
+                  (current = current.updateQueue),
+                  (workInProgress.updateQueue = current),
+                  scheduleRetryEffect(workInProgress, current),
+                  cutOffTailIfNeeded(_type, !0),
+                  null === _type.tail &&
+                    "hidden" === _type.tailMode &&
+                    !returnFiber.alternate &&
+                    !isHydrating)
+                )
+                  return bubbleProperties(workInProgress), null;
+              } else
+                2 * now$1() - _type.renderingStartTime >
+                  workInProgressRootRenderTargetTime &&
+                  536870912 !== renderLanes &&
+                  ((workInProgress.flags |= 128),
+                  (newProps = !0),
+                  cutOffTailIfNeeded(_type, !1),
+                  (workInProgress.lanes = 4194304));
+            _type.isBackwards
+              ? ((returnFiber.sibling = workInProgress.child),
+                (workInProgress.child = returnFiber))
+              : ((current = _type.last),
+                null !== current
+                  ? (current.sibling = returnFiber)
+                  : (workInProgress.child = returnFiber),
+                (_type.last = returnFiber));
+          }
+          if (null !== _type.tail)
+            return (
+              (current = _type.tail),
+              (_type.rendering = current),
+              (_type.tail = current.sibling),
+              (_type.renderingStartTime = now$1()),
+              (current.sibling = null),
+              (renderLanes = suspenseStackCursor.current),
+              (renderLanes = newProps
+                ? (renderLanes & SubtreeSuspenseContextMask) |
+                  ForceSuspenseFallback
+                : renderLanes & SubtreeSuspenseContextMask),
+              push(suspenseStackCursor, renderLanes, workInProgress),
+              current
+            );
+          bubbleProperties(workInProgress);
+          return null;
+        case 22:
+        case 23:
+          return (
+            popSuspenseHandler(workInProgress),
+            popHiddenContext(workInProgress),
+            (newProps = null !== workInProgress.memoizedState),
+            null !== current
+              ? (null !== current.memoizedState) !== newProps &&
+                (workInProgress.flags |= 8192)
+              : newProps && (workInProgress.flags |= 8192),
+            newProps
+              ? 0 !== (renderLanes & 536870912) &&
+                0 === (workInProgress.flags & 128) &&
+                (bubbleProperties(workInProgress),
+                workInProgress.subtreeFlags & 6 &&
+                  (workInProgress.flags |= 8192))
+              : bubbleProperties(workInProgress),
+            (renderLanes = workInProgress.updateQueue),
+            null !== renderLanes &&
+              scheduleRetryEffect(workInProgress, renderLanes.retryQueue),
+            (renderLanes = null),
+            null !== current &&
+              null !== current.memoizedState &&
+              null !== current.memoizedState.cachePool &&
+              (renderLanes = current.memoizedState.cachePool.pool),
+            (newProps = null),
+            null !== workInProgress.memoizedState &&
+              null !== workInProgress.memoizedState.cachePool &&
+              (newProps = workInProgress.memoizedState.cachePool.pool),
+            newProps !== renderLanes && (workInProgress.flags |= 2048),
+            null !== current && pop(resumedCache, workInProgress),
+            null
+          );
+        case 24:
+          return (
+            (renderLanes = null),
+            null !== current && (renderLanes = current.memoizedState.cache),
+            workInProgress.memoizedState.cache !== renderLanes &&
+              (workInProgress.flags |= 2048),
+            popProvider(CacheContext, workInProgress),
+            bubbleProperties(workInProgress),
+            null
+          );
+        case 25:
+          return null;
+        case 30:
+          return null;
+      }
+      throw Error(
+        "Unknown unit of work tag (" +
+          workInProgress.tag +
+          "). This error is likely caused by a bug in React. Please file an issue."
+      );
+    }
+    function unwindWork(current, workInProgress) {
+      popTreeContext(workInProgress);
+      switch (workInProgress.tag) {
+        case 1:
+          return (
+            (current = workInProgress.flags),
+            current & 65536
+              ? ((workInProgress.flags = (current & -65537) | 128),
+                (workInProgress.mode & ProfileMode) !== NoMode &&
+                  transferActualDuration(workInProgress),
+                workInProgress)
+              : null
+          );
+        case 3:
+          return (
+            popProvider(CacheContext, workInProgress),
+            popHostContainer(workInProgress),
+            (current = workInProgress.flags),
+            0 !== (current & 65536) && 0 === (current & 128)
+              ? ((workInProgress.flags = (current & -65537) | 128),
+                workInProgress)
+              : null
+          );
+        case 26:
+        case 27:
+        case 5:
+          return popHostContext(workInProgress), null;
+        case 13:
+          popSuspenseHandler(workInProgress);
+          current = workInProgress.memoizedState;
+          if (null !== current && null !== current.dehydrated) {
+            if (null === workInProgress.alternate)
+              throw Error(
+                "Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue."
+              );
+            resetHydrationState();
+          }
+          current = workInProgress.flags;
+          return current & 65536
+            ? ((workInProgress.flags = (current & -65537) | 128),
+              (workInProgress.mode & ProfileMode) !== NoMode &&
+                transferActualDuration(workInProgress),
+              workInProgress)
+            : null;
+        case 19:
+          return pop(suspenseStackCursor, workInProgress), null;
+        case 4:
+          return popHostContainer(workInProgress), null;
+        case 10:
+          return popProvider(workInProgress.type, workInProgress), null;
+        case 22:
+        case 23:
+          return (
+            popSuspenseHandler(workInProgress),
+            popHiddenContext(workInProgress),
+            null !== current && pop(resumedCache, workInProgress),
+            (current = workInProgress.flags),
+            current & 65536
+              ? ((workInProgress.flags = (current & -65537) | 128),
+                (workInProgress.mode & ProfileMode) !== NoMode &&
+                  transferActualDuration(workInProgress),
+                workInProgress)
+              : null
+          );
+        case 24:
+          return popProvider(CacheContext, workInProgress), null;
+        case 25:
+          return null;
+        default:
+          return null;
+      }
+    }
+    function unwindInterruptedWork(current, interruptedWork) {
+      popTreeContext(interruptedWork);
+      switch (interruptedWork.tag) {
+        case 3:
+          popProvider(CacheContext, interruptedWork);
+          popHostContainer(interruptedWork);
+          break;
+        case 26:
+        case 27:
+        case 5:
+          popHostContext(interruptedWork);
+          break;
+        case 4:
+          popHostContainer(interruptedWork);
+          break;
+        case 13:
+          popSuspenseHandler(interruptedWork);
+          break;
+        case 19:
+          pop(suspenseStackCursor, interruptedWork);
+          break;
+        case 10:
+          popProvider(interruptedWork.type, interruptedWork);
+          break;
+        case 22:
+        case 23:
+          popSuspenseHandler(interruptedWork);
+          popHiddenContext(interruptedWork);
+          null !== current && pop(resumedCache, interruptedWork);
+          break;
+        case 24:
+          popProvider(CacheContext, interruptedWork);
+      }
+    }
+    function shouldProfile(current) {
+      return (current.mode & ProfileMode) !== NoMode;
+    }
+    function commitHookLayoutEffects(finishedWork, hookFlags) {
+      shouldProfile(finishedWork)
+        ? (startEffectTimer(),
+          commitHookEffectListMount(hookFlags, finishedWork),
+          recordEffectDuration())
+        : commitHookEffectListMount(hookFlags, finishedWork);
+    }
+    function commitHookLayoutUnmountEffects(
+      finishedWork,
+      nearestMountedAncestor,
+      hookFlags
+    ) {
+      shouldProfile(finishedWork)
+        ? (startEffectTimer(),
+          commitHookEffectListUnmount(
+            hookFlags,
+            finishedWork,
+            nearestMountedAncestor
+          ),
+          recordEffectDuration())
+        : commitHookEffectListUnmount(
+            hookFlags,
+            finishedWork,
+            nearestMountedAncestor
+          );
+    }
+    function commitHookEffectListMount(flags, finishedWork) {
+      try {
+        var updateQueue = finishedWork.updateQueue,
+          lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;
+        if (null !== lastEffect) {
+          var firstEffect = lastEffect.next;
+          updateQueue = firstEffect;
+          do {
+            if (
+              (updateQueue.tag & flags) === flags &&
+              ((flags & Passive) !== NoFlags
+                ? null !== injectedProfilingHooks &&
+                  "function" ===
+                    typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted &&
+                  injectedProfilingHooks.markComponentPassiveEffectMountStarted(
+                    finishedWork
+                  )
+                : (flags & Layout) !== NoFlags &&
+                  null !== injectedProfilingHooks &&
+                  "function" ===
+                    typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted &&
+                  injectedProfilingHooks.markComponentLayoutEffectMountStarted(
+                    finishedWork
+                  ),
+              (lastEffect = void 0),
+              (flags & Insertion) !== NoFlags &&
+                (isRunningInsertionEffect = !0),
+              (lastEffect = runWithFiberInDEV(
+                finishedWork,
+                callCreateInDEV,
+                updateQueue
+              )),
+              (flags & Insertion) !== NoFlags &&
+                (isRunningInsertionEffect = !1),
+              (flags & Passive) !== NoFlags
+                ? null !== injectedProfilingHooks &&
+                  "function" ===
+                    typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped &&
+                  injectedProfilingHooks.markComponentPassiveEffectMountStopped()
+                : (flags & Layout) !== NoFlags &&
+                  null !== injectedProfilingHooks &&
+                  "function" ===
+                    typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped &&
+                  injectedProfilingHooks.markComponentLayoutEffectMountStopped(),
+              void 0 !== lastEffect && "function" !== typeof lastEffect)
+            ) {
+              var hookName = void 0;
+              hookName =
+                0 !== (updateQueue.tag & Layout)
+                  ? "useLayoutEffect"
+                  : 0 !== (updateQueue.tag & Insertion)
+                    ? "useInsertionEffect"
+                    : "useEffect";
+              var addendum = void 0;
+              addendum =
+                null === lastEffect
+                  ? " You returned null. If your effect does not require clean up, return undefined (or nothing)."
+                  : "function" === typeof lastEffect.then
+                    ? "\n\nIt looks like you wrote " +
+                      hookName +
+                      "(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\n\n" +
+                      hookName +
+                      "(() => {\n  async function fetchData() {\n    // You can await here\n    const response = await MyAPI.getData(someId);\n    // ...\n  }\n  fetchData();\n}, [someId]); // Or [] if effect doesn't need props or state\n\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching"
+                    : " You returned: " + lastEffect;
+              runWithFiberInDEV(
+                finishedWork,
+                function (n, a) {
+                  console.error(
+                    "%s must not return anything besides a function, which is used for clean-up.%s",
+                    n,
+                    a
+                  );
+                },
+                hookName,
+                addendum
+              );
+            }
+            updateQueue = updateQueue.next;
+          } while (updateQueue !== firstEffect);
+        }
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function commitHookEffectListUnmount(
+      flags,
+      finishedWork,
+      nearestMountedAncestor
+    ) {
+      try {
+        var updateQueue = finishedWork.updateQueue,
+          lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;
+        if (null !== lastEffect) {
+          var firstEffect = lastEffect.next;
+          updateQueue = firstEffect;
+          do {
+            if ((updateQueue.tag & flags) === flags) {
+              var inst = updateQueue.inst,
+                destroy = inst.destroy;
+              void 0 !== destroy &&
+                ((inst.destroy = void 0),
+                (flags & Passive) !== NoFlags
+                  ? null !== injectedProfilingHooks &&
+                    "function" ===
+                      typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted &&
+                    injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(
+                      finishedWork
+                    )
+                  : (flags & Layout) !== NoFlags &&
+                    null !== injectedProfilingHooks &&
+                    "function" ===
+                      typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted &&
+                    injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(
+                      finishedWork
+                    ),
+                (flags & Insertion) !== NoFlags &&
+                  (isRunningInsertionEffect = !0),
+                (lastEffect = finishedWork),
+                runWithFiberInDEV(
+                  lastEffect,
+                  callDestroyInDEV,
+                  lastEffect,
+                  nearestMountedAncestor,
+                  destroy
+                ),
+                (flags & Insertion) !== NoFlags &&
+                  (isRunningInsertionEffect = !1),
+                (flags & Passive) !== NoFlags
+                  ? null !== injectedProfilingHooks &&
+                    "function" ===
+                      typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped &&
+                    injectedProfilingHooks.markComponentPassiveEffectUnmountStopped()
+                  : (flags & Layout) !== NoFlags &&
+                    null !== injectedProfilingHooks &&
+                    "function" ===
+                      typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped &&
+                    injectedProfilingHooks.markComponentLayoutEffectUnmountStopped());
+            }
+            updateQueue = updateQueue.next;
+          } while (updateQueue !== firstEffect);
+        }
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function commitHookPassiveMountEffects(finishedWork, hookFlags) {
+      shouldProfile(finishedWork)
+        ? (startEffectTimer(),
+          commitHookEffectListMount(hookFlags, finishedWork),
+          recordEffectDuration())
+        : commitHookEffectListMount(hookFlags, finishedWork);
+    }
+    function commitHookPassiveUnmountEffects(
+      finishedWork,
+      nearestMountedAncestor,
+      hookFlags
+    ) {
+      shouldProfile(finishedWork)
+        ? (startEffectTimer(),
+          commitHookEffectListUnmount(
+            hookFlags,
+            finishedWork,
+            nearestMountedAncestor
+          ),
+          recordEffectDuration())
+        : commitHookEffectListUnmount(
+            hookFlags,
+            finishedWork,
+            nearestMountedAncestor
+          );
+    }
+    function commitClassCallbacks(finishedWork) {
+      var updateQueue = finishedWork.updateQueue;
+      if (null !== updateQueue) {
+        var instance = finishedWork.stateNode;
+        finishedWork.type.defaultProps ||
+          "ref" in finishedWork.memoizedProps ||
+          didWarnAboutReassigningProps ||
+          (instance.props !== finishedWork.memoizedProps &&
+            console.error(
+              "Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",
+              getComponentNameFromFiber(finishedWork) || "instance"
+            ),
+          instance.state !== finishedWork.memoizedState &&
+            console.error(
+              "Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",
+              getComponentNameFromFiber(finishedWork) || "instance"
+            ));
+        try {
+          runWithFiberInDEV(
+            finishedWork,
+            commitCallbacks,
+            updateQueue,
+            instance
+          );
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      }
+    }
+    function callGetSnapshotBeforeUpdates(instance, prevProps, prevState) {
+      return instance.getSnapshotBeforeUpdate(prevProps, prevState);
+    }
+    function commitClassSnapshot(finishedWork, current) {
+      var prevProps = current.memoizedProps,
+        prevState = current.memoizedState;
+      current = finishedWork.stateNode;
+      finishedWork.type.defaultProps ||
+        "ref" in finishedWork.memoizedProps ||
+        didWarnAboutReassigningProps ||
+        (current.props !== finishedWork.memoizedProps &&
+          console.error(
+            "Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",
+            getComponentNameFromFiber(finishedWork) || "instance"
+          ),
+        current.state !== finishedWork.memoizedState &&
+          console.error(
+            "Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",
+            getComponentNameFromFiber(finishedWork) || "instance"
+          ));
+      try {
+        var resolvedPrevProps = resolveClassComponentProps(
+          finishedWork.type,
+          prevProps,
+          finishedWork.elementType === finishedWork.type
+        );
+        var snapshot = runWithFiberInDEV(
+          finishedWork,
+          callGetSnapshotBeforeUpdates,
+          current,
+          resolvedPrevProps,
+          prevState
+        );
+        prevProps = didWarnAboutUndefinedSnapshotBeforeUpdate;
+        void 0 !== snapshot ||
+          prevProps.has(finishedWork.type) ||
+          (prevProps.add(finishedWork.type),
+          runWithFiberInDEV(finishedWork, function () {
+            console.error(
+              "%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.",
+              getComponentNameFromFiber(finishedWork)
+            );
+          }));
+        current.__reactInternalSnapshotBeforeUpdate = snapshot;
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function safelyCallComponentWillUnmount(
+      current,
+      nearestMountedAncestor,
+      instance
+    ) {
+      instance.props = resolveClassComponentProps(
+        current.type,
+        current.memoizedProps
+      );
+      instance.state = current.memoizedState;
+      shouldProfile(current)
+        ? (startEffectTimer(),
+          runWithFiberInDEV(
+            current,
+            callComponentWillUnmountInDEV,
+            current,
+            nearestMountedAncestor,
+            instance
+          ),
+          recordEffectDuration())
+        : runWithFiberInDEV(
+            current,
+            callComponentWillUnmountInDEV,
+            current,
+            nearestMountedAncestor,
+            instance
+          );
+    }
+    function commitAttachRef(finishedWork) {
+      var ref = finishedWork.ref;
+      if (null !== ref) {
+        switch (finishedWork.tag) {
+          case 26:
+          case 27:
+          case 5:
+            var instanceToUse = finishedWork.stateNode;
+            break;
+          case 30:
+            instanceToUse = finishedWork.stateNode;
+            break;
+          default:
+            instanceToUse = finishedWork.stateNode;
+        }
+        if ("function" === typeof ref)
+          if (shouldProfile(finishedWork))
+            try {
+              startEffectTimer(),
+                (finishedWork.refCleanup = ref(instanceToUse));
+            } finally {
+              recordEffectDuration();
+            }
+          else finishedWork.refCleanup = ref(instanceToUse);
+        else
+          "string" === typeof ref
+            ? console.error("String refs are no longer supported.")
+            : ref.hasOwnProperty("current") ||
+              console.error(
+                "Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().",
+                getComponentNameFromFiber(finishedWork)
+              ),
+            (ref.current = instanceToUse);
+      }
+    }
+    function safelyAttachRef(current, nearestMountedAncestor) {
+      try {
+        runWithFiberInDEV(current, commitAttachRef, current);
+      } catch (error) {
+        captureCommitPhaseError(current, nearestMountedAncestor, error);
+      }
+    }
+    function safelyDetachRef(current, nearestMountedAncestor) {
+      var ref = current.ref,
+        refCleanup = current.refCleanup;
+      if (null !== ref)
+        if ("function" === typeof refCleanup)
+          try {
+            if (shouldProfile(current))
+              try {
+                startEffectTimer(), runWithFiberInDEV(current, refCleanup);
+              } finally {
+                recordEffectDuration(current);
+              }
+            else runWithFiberInDEV(current, refCleanup);
+          } catch (error) {
+            captureCommitPhaseError(current, nearestMountedAncestor, error);
+          } finally {
+            (current.refCleanup = null),
+              (current = current.alternate),
+              null != current && (current.refCleanup = null);
+          }
+        else if ("function" === typeof ref)
+          try {
+            if (shouldProfile(current))
+              try {
+                startEffectTimer(), runWithFiberInDEV(current, ref, null);
+              } finally {
+                recordEffectDuration(current);
+              }
+            else runWithFiberInDEV(current, ref, null);
+          } catch (error$7) {
+            captureCommitPhaseError(current, nearestMountedAncestor, error$7);
+          }
+        else ref.current = null;
+    }
+    function commitProfiler(
+      finishedWork,
+      current,
+      commitStartTime,
+      effectDuration
+    ) {
+      var _finishedWork$memoize = finishedWork.memoizedProps,
+        id = _finishedWork$memoize.id,
+        onCommit = _finishedWork$memoize.onCommit;
+      _finishedWork$memoize = _finishedWork$memoize.onRender;
+      current = null === current ? "mount" : "update";
+      currentUpdateIsNested && (current = "nested-update");
+      "function" === typeof _finishedWork$memoize &&
+        _finishedWork$memoize(
+          id,
+          current,
+          finishedWork.actualDuration,
+          finishedWork.treeBaseDuration,
+          finishedWork.actualStartTime,
+          commitStartTime
+        );
+      "function" === typeof onCommit &&
+        onCommit(
+          finishedWork.memoizedProps.id,
+          current,
+          effectDuration,
+          commitStartTime
+        );
+    }
+    function commitProfilerPostCommitImpl(
+      finishedWork,
+      current,
+      commitStartTime,
+      passiveEffectDuration
+    ) {
+      var _finishedWork$memoize2 = finishedWork.memoizedProps;
+      finishedWork = _finishedWork$memoize2.id;
+      _finishedWork$memoize2 = _finishedWork$memoize2.onPostCommit;
+      current = null === current ? "mount" : "update";
+      currentUpdateIsNested && (current = "nested-update");
+      "function" === typeof _finishedWork$memoize2 &&
+        _finishedWork$memoize2(
+          finishedWork,
+          current,
+          passiveEffectDuration,
+          commitStartTime
+        );
+    }
+    function commitHostMount(finishedWork) {
+      var type = finishedWork.type,
+        props = finishedWork.memoizedProps,
+        instance = finishedWork.stateNode;
+      try {
+        runWithFiberInDEV(
+          finishedWork,
+          commitMount,
+          instance,
+          type,
+          props,
+          finishedWork
+        );
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function commitHostUpdate(finishedWork, newProps, oldProps) {
+      try {
+        runWithFiberInDEV(
+          finishedWork,
+          commitUpdate,
+          finishedWork.stateNode,
+          finishedWork.type,
+          oldProps,
+          newProps,
+          finishedWork
+        );
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function isHostParent(fiber) {
+      return (
+        5 === fiber.tag ||
+        3 === fiber.tag ||
+        26 === fiber.tag ||
+        (27 === fiber.tag && isSingletonScope(fiber.type)) ||
+        4 === fiber.tag
+      );
+    }
+    function getHostSibling(fiber) {
+      a: for (;;) {
+        for (; null === fiber.sibling; ) {
+          if (null === fiber.return || isHostParent(fiber.return)) return null;
+          fiber = fiber.return;
+        }
+        fiber.sibling.return = fiber.return;
+        for (
+          fiber = fiber.sibling;
+          5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;
+
+        ) {
+          if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;
+          if (fiber.flags & 2) continue a;
+          if (null === fiber.child || 4 === fiber.tag) continue a;
+          else (fiber.child.return = fiber), (fiber = fiber.child);
+        }
+        if (!(fiber.flags & 2)) return fiber.stateNode;
+      }
+    }
+    function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {
+      var tag = node.tag;
+      if (5 === tag || 6 === tag)
+        (node = node.stateNode),
+          before
+            ? (9 === parent.nodeType
+                ? parent.body
+                : "HTML" === parent.nodeName
+                  ? parent.ownerDocument.body
+                  : parent
+              ).insertBefore(node, before)
+            : ((before =
+                9 === parent.nodeType
+                  ? parent.body
+                  : "HTML" === parent.nodeName
+                    ? parent.ownerDocument.body
+                    : parent),
+              before.appendChild(node),
+              (parent = parent._reactRootContainer),
+              (null !== parent && void 0 !== parent) ||
+                null !== before.onclick ||
+                (before.onclick = noop$2));
+      else if (
+        4 !== tag &&
+        (27 === tag &&
+          isSingletonScope(node.type) &&
+          ((parent = node.stateNode), (before = null)),
+        (node = node.child),
+        null !== node)
+      )
+        for (
+          insertOrAppendPlacementNodeIntoContainer(node, before, parent),
+            node = node.sibling;
+          null !== node;
+
+        )
+          insertOrAppendPlacementNodeIntoContainer(node, before, parent),
+            (node = node.sibling);
+    }
+    function insertOrAppendPlacementNode(node, before, parent) {
+      var tag = node.tag;
+      if (5 === tag || 6 === tag)
+        (node = node.stateNode),
+          before ? parent.insertBefore(node, before) : parent.appendChild(node);
+      else if (
+        4 !== tag &&
+        (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),
+        (node = node.child),
+        null !== node)
+      )
+        for (
+          insertOrAppendPlacementNode(node, before, parent),
+            node = node.sibling;
+          null !== node;
+
+        )
+          insertOrAppendPlacementNode(node, before, parent),
+            (node = node.sibling);
+    }
+    function commitPlacement(finishedWork) {
+      for (
+        var hostParentFiber, parentFiber = finishedWork.return;
+        null !== parentFiber;
+
+      ) {
+        if (isHostParent(parentFiber)) {
+          hostParentFiber = parentFiber;
+          break;
+        }
+        parentFiber = parentFiber.return;
+      }
+      if (null == hostParentFiber)
+        throw Error(
+          "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue."
+        );
+      switch (hostParentFiber.tag) {
+        case 27:
+          hostParentFiber = hostParentFiber.stateNode;
+          parentFiber = getHostSibling(finishedWork);
+          insertOrAppendPlacementNode(
+            finishedWork,
+            parentFiber,
+            hostParentFiber
+          );
+          break;
+        case 5:
+          parentFiber = hostParentFiber.stateNode;
+          hostParentFiber.flags & 32 &&
+            (resetTextContent(parentFiber), (hostParentFiber.flags &= -33));
+          hostParentFiber = getHostSibling(finishedWork);
+          insertOrAppendPlacementNode(
+            finishedWork,
+            hostParentFiber,
+            parentFiber
+          );
+          break;
+        case 3:
+        case 4:
+          hostParentFiber = hostParentFiber.stateNode.containerInfo;
+          parentFiber = getHostSibling(finishedWork);
+          insertOrAppendPlacementNodeIntoContainer(
+            finishedWork,
+            parentFiber,
+            hostParentFiber
+          );
+          break;
+        default:
+          throw Error(
+            "Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue."
+          );
+      }
+    }
+    function commitHostSingletonAcquisition(finishedWork) {
+      var singleton = finishedWork.stateNode,
+        props = finishedWork.memoizedProps;
+      try {
+        runWithFiberInDEV(
+          finishedWork,
+          acquireSingletonInstance,
+          finishedWork.type,
+          props,
+          singleton,
+          finishedWork
+        );
+      } catch (error) {
+        captureCommitPhaseError(finishedWork, finishedWork.return, error);
+      }
+    }
+    function commitBeforeMutationEffects(root, firstChild) {
+      root = root.containerInfo;
+      eventsEnabled = _enabled;
+      root = getActiveElementDeep(root);
+      if (hasSelectionCapabilities(root)) {
+        if ("selectionStart" in root)
+          var JSCompiler_temp = {
+            start: root.selectionStart,
+            end: root.selectionEnd
+          };
+        else
+          a: {
+            JSCompiler_temp =
+              ((JSCompiler_temp = root.ownerDocument) &&
+                JSCompiler_temp.defaultView) ||
+              window;
+            var selection =
+              JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();
+            if (selection && 0 !== selection.rangeCount) {
+              JSCompiler_temp = selection.anchorNode;
+              var anchorOffset = selection.anchorOffset,
+                focusNode = selection.focusNode;
+              selection = selection.focusOffset;
+              try {
+                JSCompiler_temp.nodeType, focusNode.nodeType;
+              } catch (e$2) {
+                JSCompiler_temp = null;
+                break a;
+              }
+              var length = 0,
+                start = -1,
+                end = -1,
+                indexWithinAnchor = 0,
+                indexWithinFocus = 0,
+                node = root,
+                parentNode = null;
+              b: for (;;) {
+                for (var next; ; ) {
+                  node !== JSCompiler_temp ||
+                    (0 !== anchorOffset && 3 !== node.nodeType) ||
+                    (start = length + anchorOffset);
+                  node !== focusNode ||
+                    (0 !== selection && 3 !== node.nodeType) ||
+                    (end = length + selection);
+                  3 === node.nodeType && (length += node.nodeValue.length);
+                  if (null === (next = node.firstChild)) break;
+                  parentNode = node;
+                  node = next;
+                }
+                for (;;) {
+                  if (node === root) break b;
+                  parentNode === JSCompiler_temp &&
+                    ++indexWithinAnchor === anchorOffset &&
+                    (start = length);
+                  parentNode === focusNode &&
+                    ++indexWithinFocus === selection &&
+                    (end = length);
+                  if (null !== (next = node.nextSibling)) break;
+                  node = parentNode;
+                  parentNode = node.parentNode;
+                }
+                node = next;
+              }
+              JSCompiler_temp =
+                -1 === start || -1 === end ? null : { start: start, end: end };
+            } else JSCompiler_temp = null;
+          }
+        JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };
+      } else JSCompiler_temp = null;
+      selectionInformation = {
+        focusedElem: root,
+        selectionRange: JSCompiler_temp
+      };
+      _enabled = !1;
+      for (nextEffect = firstChild; null !== nextEffect; )
+        if (
+          ((firstChild = nextEffect),
+          (root = firstChild.child),
+          0 !== (firstChild.subtreeFlags & 1024) && null !== root)
+        )
+          (root.return = firstChild), (nextEffect = root);
+        else
+          for (; null !== nextEffect; ) {
+            root = firstChild = nextEffect;
+            JSCompiler_temp = root.alternate;
+            anchorOffset = root.flags;
+            switch (root.tag) {
+              case 0:
+                break;
+              case 11:
+              case 15:
+                break;
+              case 1:
+                0 !== (anchorOffset & 1024) &&
+                  null !== JSCompiler_temp &&
+                  commitClassSnapshot(root, JSCompiler_temp);
+                break;
+              case 3:
+                if (0 !== (anchorOffset & 1024))
+                  if (
+                    ((root = root.stateNode.containerInfo),
+                    (JSCompiler_temp = root.nodeType),
+                    9 === JSCompiler_temp)
+                  )
+                    clearContainerSparingly(root);
+                  else if (1 === JSCompiler_temp)
+                    switch (root.nodeName) {
+                      case "HEAD":
+                      case "HTML":
+                      case "BODY":
+                        clearContainerSparingly(root);
+                        break;
+                      default:
+                        root.textContent = "";
+                    }
+                break;
+              case 5:
+              case 26:
+              case 27:
+              case 6:
+              case 4:
+              case 17:
+                break;
+              default:
+                if (0 !== (anchorOffset & 1024))
+                  throw Error(
+                    "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue."
+                  );
+            }
+            root = firstChild.sibling;
+            if (null !== root) {
+              root.return = firstChild.return;
+              nextEffect = root;
+              break;
+            }
+            nextEffect = firstChild.return;
+          }
+    }
+    function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {
+      var flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          flags & 4 &&
+            commitHookLayoutEffects(finishedWork, Layout | HasEffect);
+          break;
+        case 1:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          if (flags & 4)
+            if (((finishedRoot = finishedWork.stateNode), null === current))
+              finishedWork.type.defaultProps ||
+                "ref" in finishedWork.memoizedProps ||
+                didWarnAboutReassigningProps ||
+                (finishedRoot.props !== finishedWork.memoizedProps &&
+                  console.error(
+                    "Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",
+                    getComponentNameFromFiber(finishedWork) || "instance"
+                  ),
+                finishedRoot.state !== finishedWork.memoizedState &&
+                  console.error(
+                    "Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",
+                    getComponentNameFromFiber(finishedWork) || "instance"
+                  )),
+                shouldProfile(finishedWork)
+                  ? (startEffectTimer(),
+                    runWithFiberInDEV(
+                      finishedWork,
+                      callComponentDidMountInDEV,
+                      finishedWork,
+                      finishedRoot
+                    ),
+                    recordEffectDuration())
+                  : runWithFiberInDEV(
+                      finishedWork,
+                      callComponentDidMountInDEV,
+                      finishedWork,
+                      finishedRoot
+                    );
+            else {
+              var prevProps = resolveClassComponentProps(
+                finishedWork.type,
+                current.memoizedProps
+              );
+              current = current.memoizedState;
+              finishedWork.type.defaultProps ||
+                "ref" in finishedWork.memoizedProps ||
+                didWarnAboutReassigningProps ||
+                (finishedRoot.props !== finishedWork.memoizedProps &&
+                  console.error(
+                    "Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",
+                    getComponentNameFromFiber(finishedWork) || "instance"
+                  ),
+                finishedRoot.state !== finishedWork.memoizedState &&
+                  console.error(
+                    "Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.",
+                    getComponentNameFromFiber(finishedWork) || "instance"
+                  ));
+              shouldProfile(finishedWork)
+                ? (startEffectTimer(),
+                  runWithFiberInDEV(
+                    finishedWork,
+                    callComponentDidUpdateInDEV,
+                    finishedWork,
+                    finishedRoot,
+                    prevProps,
+                    current,
+                    finishedRoot.__reactInternalSnapshotBeforeUpdate
+                  ),
+                  recordEffectDuration())
+                : runWithFiberInDEV(
+                    finishedWork,
+                    callComponentDidUpdateInDEV,
+                    finishedWork,
+                    finishedRoot,
+                    prevProps,
+                    current,
+                    finishedRoot.__reactInternalSnapshotBeforeUpdate
+                  );
+            }
+          flags & 64 && commitClassCallbacks(finishedWork);
+          flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 3:
+          current = pushNestedEffectDurations();
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          if (
+            flags & 64 &&
+            ((flags = finishedWork.updateQueue), null !== flags)
+          ) {
+            prevProps = null;
+            if (null !== finishedWork.child)
+              switch (finishedWork.child.tag) {
+                case 27:
+                case 5:
+                  prevProps = finishedWork.child.stateNode;
+                  break;
+                case 1:
+                  prevProps = finishedWork.child.stateNode;
+              }
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitCallbacks,
+                flags,
+                prevProps
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          }
+          finishedRoot.effectDuration += popNestedEffectDurations(current);
+          break;
+        case 27:
+          null === current &&
+            flags & 4 &&
+            commitHostSingletonAcquisition(finishedWork);
+        case 26:
+        case 5:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          null === current && flags & 4 && commitHostMount(finishedWork);
+          flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 12:
+          if (flags & 4) {
+            flags = pushNestedEffectDurations();
+            recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+            finishedRoot = finishedWork.stateNode;
+            finishedRoot.effectDuration += bubbleNestedEffectDurations(flags);
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitProfiler,
+                finishedWork,
+                current,
+                commitStartTime,
+                finishedRoot.effectDuration
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          } else recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          break;
+        case 13:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+          flags & 4 &&
+            commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
+          flags & 64 &&
+            ((finishedRoot = finishedWork.memoizedState),
+            null !== finishedRoot &&
+              ((finishedRoot = finishedRoot.dehydrated),
+              null !== finishedRoot &&
+                ((finishedWork = retryDehydratedSuspenseBoundary.bind(
+                  null,
+                  finishedWork
+                )),
+                registerSuspenseInstanceRetry(finishedRoot, finishedWork))));
+          break;
+        case 22:
+          flags =
+            null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;
+          if (!flags) {
+            current =
+              (null !== current && null !== current.memoizedState) ||
+              offscreenSubtreeWasHidden;
+            prevProps = offscreenSubtreeIsHidden;
+            var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
+            offscreenSubtreeIsHidden = flags;
+            (offscreenSubtreeWasHidden = current) &&
+            !prevOffscreenSubtreeWasHidden
+              ? recursivelyTraverseReappearLayoutEffects(
+                  finishedRoot,
+                  finishedWork,
+                  0 !== (finishedWork.subtreeFlags & 8772)
+                )
+              : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+            offscreenSubtreeIsHidden = prevProps;
+            offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
+          }
+          break;
+        case 30:
+          break;
+        default:
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      }
+    }
+    function detachFiberAfterEffects(fiber) {
+      var alternate = fiber.alternate;
+      null !== alternate &&
+        ((fiber.alternate = null), detachFiberAfterEffects(alternate));
+      fiber.child = null;
+      fiber.deletions = null;
+      fiber.sibling = null;
+      5 === fiber.tag &&
+        ((alternate = fiber.stateNode),
+        null !== alternate && detachDeletedInstance(alternate));
+      fiber.stateNode = null;
+      fiber._debugOwner = null;
+      fiber.return = null;
+      fiber.dependencies = null;
+      fiber.memoizedProps = null;
+      fiber.memoizedState = null;
+      fiber.pendingProps = null;
+      fiber.stateNode = null;
+      fiber.updateQueue = null;
+    }
+    function recursivelyTraverseDeletionEffects(
+      finishedRoot,
+      nearestMountedAncestor,
+      parent
+    ) {
+      for (parent = parent.child; null !== parent; )
+        commitDeletionEffectsOnFiber(
+          finishedRoot,
+          nearestMountedAncestor,
+          parent
+        ),
+          (parent = parent.sibling);
+    }
+    function commitDeletionEffectsOnFiber(
+      finishedRoot,
+      nearestMountedAncestor,
+      deletedFiber
+    ) {
+      if (
+        injectedHook &&
+        "function" === typeof injectedHook.onCommitFiberUnmount
+      )
+        try {
+          injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);
+        } catch (err) {
+          hasLoggedError ||
+            ((hasLoggedError = !0),
+            console.error(
+              "React instrumentation encountered an error: %s",
+              err
+            ));
+        }
+      switch (deletedFiber.tag) {
+        case 26:
+          offscreenSubtreeWasHidden ||
+            safelyDetachRef(deletedFiber, nearestMountedAncestor);
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          deletedFiber.memoizedState
+            ? deletedFiber.memoizedState.count--
+            : deletedFiber.stateNode &&
+              ((deletedFiber = deletedFiber.stateNode),
+              deletedFiber.parentNode.removeChild(deletedFiber));
+          break;
+        case 27:
+          offscreenSubtreeWasHidden ||
+            safelyDetachRef(deletedFiber, nearestMountedAncestor);
+          var prevHostParent = hostParent,
+            prevHostParentIsContainer = hostParentIsContainer;
+          isSingletonScope(deletedFiber.type) &&
+            ((hostParent = deletedFiber.stateNode),
+            (hostParentIsContainer = !1));
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          runWithFiberInDEV(
+            deletedFiber,
+            releaseSingletonInstance,
+            deletedFiber.stateNode
+          );
+          hostParent = prevHostParent;
+          hostParentIsContainer = prevHostParentIsContainer;
+          break;
+        case 5:
+          offscreenSubtreeWasHidden ||
+            safelyDetachRef(deletedFiber, nearestMountedAncestor);
+        case 6:
+          prevHostParent = hostParent;
+          prevHostParentIsContainer = hostParentIsContainer;
+          hostParent = null;
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          hostParent = prevHostParent;
+          hostParentIsContainer = prevHostParentIsContainer;
+          if (null !== hostParent)
+            if (hostParentIsContainer)
+              try {
+                runWithFiberInDEV(
+                  deletedFiber,
+                  removeChildFromContainer,
+                  hostParent,
+                  deletedFiber.stateNode
+                );
+              } catch (error) {
+                captureCommitPhaseError(
+                  deletedFiber,
+                  nearestMountedAncestor,
+                  error
+                );
+              }
+            else
+              try {
+                runWithFiberInDEV(
+                  deletedFiber,
+                  removeChild,
+                  hostParent,
+                  deletedFiber.stateNode
+                );
+              } catch (error) {
+                captureCommitPhaseError(
+                  deletedFiber,
+                  nearestMountedAncestor,
+                  error
+                );
+              }
+          break;
+        case 18:
+          null !== hostParent &&
+            (hostParentIsContainer
+              ? ((finishedRoot = hostParent),
+                clearSuspenseBoundary(
+                  9 === finishedRoot.nodeType
+                    ? finishedRoot.body
+                    : "HTML" === finishedRoot.nodeName
+                      ? finishedRoot.ownerDocument.body
+                      : finishedRoot,
+                  deletedFiber.stateNode
+                ),
+                retryIfBlockedOn(finishedRoot))
+              : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));
+          break;
+        case 4:
+          prevHostParent = hostParent;
+          prevHostParentIsContainer = hostParentIsContainer;
+          hostParent = deletedFiber.stateNode.containerInfo;
+          hostParentIsContainer = !0;
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          hostParent = prevHostParent;
+          hostParentIsContainer = prevHostParentIsContainer;
+          break;
+        case 0:
+        case 11:
+        case 14:
+        case 15:
+          offscreenSubtreeWasHidden ||
+            commitHookEffectListUnmount(
+              Insertion,
+              deletedFiber,
+              nearestMountedAncestor
+            );
+          offscreenSubtreeWasHidden ||
+            commitHookLayoutUnmountEffects(
+              deletedFiber,
+              nearestMountedAncestor,
+              Layout
+            );
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          break;
+        case 1:
+          offscreenSubtreeWasHidden ||
+            (safelyDetachRef(deletedFiber, nearestMountedAncestor),
+            (prevHostParent = deletedFiber.stateNode),
+            "function" === typeof prevHostParent.componentWillUnmount &&
+              safelyCallComponentWillUnmount(
+                deletedFiber,
+                nearestMountedAncestor,
+                prevHostParent
+              ));
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          break;
+        case 21:
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          break;
+        case 22:
+          offscreenSubtreeWasHidden =
+            (prevHostParent = offscreenSubtreeWasHidden) ||
+            null !== deletedFiber.memoizedState;
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+          offscreenSubtreeWasHidden = prevHostParent;
+          break;
+        default:
+          recursivelyTraverseDeletionEffects(
+            finishedRoot,
+            nearestMountedAncestor,
+            deletedFiber
+          );
+      }
+    }
+    function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {
+      if (
+        null === finishedWork.memoizedState &&
+        ((finishedRoot = finishedWork.alternate),
+        null !== finishedRoot &&
+          ((finishedRoot = finishedRoot.memoizedState),
+          null !== finishedRoot &&
+            ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))
+      )
+        try {
+          runWithFiberInDEV(
+            finishedWork,
+            commitHydratedSuspenseInstance,
+            finishedRoot
+          );
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+    }
+    function getRetryCache(finishedWork) {
+      switch (finishedWork.tag) {
+        case 13:
+        case 19:
+          var retryCache = finishedWork.stateNode;
+          null === retryCache &&
+            (retryCache = finishedWork.stateNode = new PossiblyWeakSet());
+          return retryCache;
+        case 22:
+          return (
+            (finishedWork = finishedWork.stateNode),
+            (retryCache = finishedWork._retryCache),
+            null === retryCache &&
+              (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),
+            retryCache
+          );
+        default:
+          throw Error(
+            "Unexpected Suspense handler tag (" +
+              finishedWork.tag +
+              "). This is a bug in React."
+          );
+      }
+    }
+    function attachSuspenseRetryListeners(finishedWork, wakeables) {
+      var retryCache = getRetryCache(finishedWork);
+      wakeables.forEach(function (wakeable) {
+        var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);
+        if (!retryCache.has(wakeable)) {
+          retryCache.add(wakeable);
+          if (isDevToolsPresent)
+            if (null !== inProgressLanes && null !== inProgressRoot)
+              restorePendingUpdaters(inProgressRoot, inProgressLanes);
+            else
+              throw Error(
+                "Expected finished root and lanes to be set. This is a bug in React."
+              );
+          wakeable.then(retry, retry);
+        }
+      });
+    }
+    function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {
+      var deletions = parentFiber.deletions;
+      if (null !== deletions)
+        for (var i = 0; i < deletions.length; i++) {
+          var root = root$jscomp$0,
+            returnFiber = parentFiber,
+            deletedFiber = deletions[i],
+            parent = returnFiber;
+          a: for (; null !== parent; ) {
+            switch (parent.tag) {
+              case 27:
+                if (isSingletonScope(parent.type)) {
+                  hostParent = parent.stateNode;
+                  hostParentIsContainer = !1;
+                  break a;
+                }
+                break;
+              case 5:
+                hostParent = parent.stateNode;
+                hostParentIsContainer = !1;
+                break a;
+              case 3:
+              case 4:
+                hostParent = parent.stateNode.containerInfo;
+                hostParentIsContainer = !0;
+                break a;
+            }
+            parent = parent.return;
+          }
+          if (null === hostParent)
+            throw Error(
+              "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue."
+            );
+          commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);
+          hostParent = null;
+          hostParentIsContainer = !1;
+          root = deletedFiber;
+          returnFiber = root.alternate;
+          null !== returnFiber && (returnFiber.return = null);
+          root.return = null;
+        }
+      if (parentFiber.subtreeFlags & 13878)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),
+            (parentFiber = parentFiber.sibling);
+    }
+    function commitMutationEffectsOnFiber(finishedWork, root) {
+      var current = finishedWork.alternate,
+        flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 14:
+        case 15:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 4 &&
+            (commitHookEffectListUnmount(
+              Insertion | HasEffect,
+              finishedWork,
+              finishedWork.return
+            ),
+            commitHookEffectListMount(Insertion | HasEffect, finishedWork),
+            commitHookLayoutUnmountEffects(
+              finishedWork,
+              finishedWork.return,
+              Layout | HasEffect
+            ));
+          break;
+        case 1:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 512 &&
+            (offscreenSubtreeWasHidden ||
+              null === current ||
+              safelyDetachRef(current, current.return));
+          flags & 64 &&
+            offscreenSubtreeIsHidden &&
+            ((finishedWork = finishedWork.updateQueue),
+            null !== finishedWork &&
+              ((flags = finishedWork.callbacks),
+              null !== flags &&
+                ((current = finishedWork.shared.hiddenCallbacks),
+                (finishedWork.shared.hiddenCallbacks =
+                  null === current ? flags : current.concat(flags)))));
+          break;
+        case 26:
+          var hoistableRoot = currentHoistableRoot;
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 512 &&
+            (offscreenSubtreeWasHidden ||
+              null === current ||
+              safelyDetachRef(current, current.return));
+          if (flags & 4)
+            if (
+              ((root = null !== current ? current.memoizedState : null),
+              (flags = finishedWork.memoizedState),
+              null === current)
+            )
+              if (null === flags)
+                if (null === finishedWork.stateNode) {
+                  a: {
+                    flags = finishedWork.type;
+                    current = finishedWork.memoizedProps;
+                    root = hoistableRoot.ownerDocument || hoistableRoot;
+                    b: switch (flags) {
+                      case "title":
+                        hoistableRoot = root.getElementsByTagName("title")[0];
+                        if (
+                          !hoistableRoot ||
+                          hoistableRoot[internalHoistableMarker] ||
+                          hoistableRoot[internalInstanceKey] ||
+                          hoistableRoot.namespaceURI === SVG_NAMESPACE ||
+                          hoistableRoot.hasAttribute("itemprop")
+                        )
+                          (hoistableRoot = root.createElement(flags)),
+                            root.head.insertBefore(
+                              hoistableRoot,
+                              root.querySelector("head > title")
+                            );
+                        setInitialProperties(hoistableRoot, flags, current);
+                        hoistableRoot[internalInstanceKey] = finishedWork;
+                        markNodeAsHoistable(hoistableRoot);
+                        flags = hoistableRoot;
+                        break a;
+                      case "link":
+                        var maybeNodes = getHydratableHoistableCache(
+                          "link",
+                          "href",
+                          root
+                        ).get(flags + (current.href || ""));
+                        if (maybeNodes)
+                          for (var i = 0; i < maybeNodes.length; i++)
+                            if (
+                              ((hoistableRoot = maybeNodes[i]),
+                              hoistableRoot.getAttribute("href") ===
+                                (null == current.href || "" === current.href
+                                  ? null
+                                  : current.href) &&
+                                hoistableRoot.getAttribute("rel") ===
+                                  (null == current.rel ? null : current.rel) &&
+                                hoistableRoot.getAttribute("title") ===
+                                  (null == current.title
+                                    ? null
+                                    : current.title) &&
+                                hoistableRoot.getAttribute("crossorigin") ===
+                                  (null == current.crossOrigin
+                                    ? null
+                                    : current.crossOrigin))
+                            ) {
+                              maybeNodes.splice(i, 1);
+                              break b;
+                            }
+                        hoistableRoot = root.createElement(flags);
+                        setInitialProperties(hoistableRoot, flags, current);
+                        root.head.appendChild(hoistableRoot);
+                        break;
+                      case "meta":
+                        if (
+                          (maybeNodes = getHydratableHoistableCache(
+                            "meta",
+                            "content",
+                            root
+                          ).get(flags + (current.content || "")))
+                        )
+                          for (i = 0; i < maybeNodes.length; i++)
+                            if (
+                              ((hoistableRoot = maybeNodes[i]),
+                              checkAttributeStringCoercion(
+                                current.content,
+                                "content"
+                              ),
+                              hoistableRoot.getAttribute("content") ===
+                                (null == current.content
+                                  ? null
+                                  : "" + current.content) &&
+                                hoistableRoot.getAttribute("name") ===
+                                  (null == current.name
+                                    ? null
+                                    : current.name) &&
+                                hoistableRoot.getAttribute("property") ===
+                                  (null == current.property
+                                    ? null
+                                    : current.property) &&
+                                hoistableRoot.getAttribute("http-equiv") ===
+                                  (null == current.httpEquiv
+                                    ? null
+                                    : current.httpEquiv) &&
+                                hoistableRoot.getAttribute("charset") ===
+                                  (null == current.charSet
+                                    ? null
+                                    : current.charSet))
+                            ) {
+                              maybeNodes.splice(i, 1);
+                              break b;
+                            }
+                        hoistableRoot = root.createElement(flags);
+                        setInitialProperties(hoistableRoot, flags, current);
+                        root.head.appendChild(hoistableRoot);
+                        break;
+                      default:
+                        throw Error(
+                          'getNodesForType encountered a type it did not expect: "' +
+                            flags +
+                            '". This is a bug in React.'
+                        );
+                    }
+                    hoistableRoot[internalInstanceKey] = finishedWork;
+                    markNodeAsHoistable(hoistableRoot);
+                    flags = hoistableRoot;
+                  }
+                  finishedWork.stateNode = flags;
+                } else
+                  mountHoistable(
+                    hoistableRoot,
+                    finishedWork.type,
+                    finishedWork.stateNode
+                  );
+              else
+                finishedWork.stateNode = acquireResource(
+                  hoistableRoot,
+                  flags,
+                  finishedWork.memoizedProps
+                );
+            else
+              root !== flags
+                ? (null === root
+                    ? null !== current.stateNode &&
+                      ((current = current.stateNode),
+                      current.parentNode.removeChild(current))
+                    : root.count--,
+                  null === flags
+                    ? mountHoistable(
+                        hoistableRoot,
+                        finishedWork.type,
+                        finishedWork.stateNode
+                      )
+                    : acquireResource(
+                        hoistableRoot,
+                        flags,
+                        finishedWork.memoizedProps
+                      ))
+                : null === flags &&
+                  null !== finishedWork.stateNode &&
+                  commitHostUpdate(
+                    finishedWork,
+                    finishedWork.memoizedProps,
+                    current.memoizedProps
+                  );
+          break;
+        case 27:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 512 &&
+            (offscreenSubtreeWasHidden ||
+              null === current ||
+              safelyDetachRef(current, current.return));
+          null !== current &&
+            flags & 4 &&
+            commitHostUpdate(
+              finishedWork,
+              finishedWork.memoizedProps,
+              current.memoizedProps
+            );
+          break;
+        case 5:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 512 &&
+            (offscreenSubtreeWasHidden ||
+              null === current ||
+              safelyDetachRef(current, current.return));
+          if (finishedWork.flags & 32) {
+            root = finishedWork.stateNode;
+            try {
+              runWithFiberInDEV(finishedWork, resetTextContent, root);
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          }
+          flags & 4 &&
+            null != finishedWork.stateNode &&
+            ((root = finishedWork.memoizedProps),
+            commitHostUpdate(
+              finishedWork,
+              root,
+              null !== current ? current.memoizedProps : root
+            ));
+          flags & 1024 &&
+            ((needsFormReset = !0),
+            "form" !== finishedWork.type &&
+              console.error(
+                "Unexpected host component type. Expected a form. This is a bug in React."
+              ));
+          break;
+        case 6:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          if (flags & 4) {
+            if (null === finishedWork.stateNode)
+              throw Error(
+                "This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue."
+              );
+            flags = finishedWork.memoizedProps;
+            current = null !== current ? current.memoizedProps : flags;
+            root = finishedWork.stateNode;
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitTextUpdate,
+                root,
+                current,
+                flags
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          }
+          break;
+        case 3:
+          hoistableRoot = pushNestedEffectDurations();
+          tagCaches = null;
+          maybeNodes = currentHoistableRoot;
+          currentHoistableRoot = getHoistableRoot(root.containerInfo);
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          currentHoistableRoot = maybeNodes;
+          commitReconciliationEffects(finishedWork);
+          if (
+            flags & 4 &&
+            null !== current &&
+            current.memoizedState.isDehydrated
+          )
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitHydratedContainer,
+                root.containerInfo
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          needsFormReset &&
+            ((needsFormReset = !1), recursivelyResetForms(finishedWork));
+          root.effectDuration += popNestedEffectDurations(hoistableRoot);
+          break;
+        case 4:
+          flags = currentHoistableRoot;
+          currentHoistableRoot = getHoistableRoot(
+            finishedWork.stateNode.containerInfo
+          );
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          currentHoistableRoot = flags;
+          break;
+        case 12:
+          flags = pushNestedEffectDurations();
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          finishedWork.stateNode.effectDuration +=
+            bubbleNestedEffectDurations(flags);
+          break;
+        case 13:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          finishedWork.child.flags & 8192 &&
+            (null !== finishedWork.memoizedState) !==
+              (null !== current && null !== current.memoizedState) &&
+            (globalMostRecentFallbackTime = now$1());
+          flags & 4 &&
+            ((flags = finishedWork.updateQueue),
+            null !== flags &&
+              ((finishedWork.updateQueue = null),
+              attachSuspenseRetryListeners(finishedWork, flags)));
+          break;
+        case 22:
+          hoistableRoot = null !== finishedWork.memoizedState;
+          var wasHidden = null !== current && null !== current.memoizedState,
+            prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,
+            prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
+          offscreenSubtreeIsHidden =
+            prevOffscreenSubtreeIsHidden || hoistableRoot;
+          offscreenSubtreeWasHidden =
+            prevOffscreenSubtreeWasHidden || wasHidden;
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
+          offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;
+          commitReconciliationEffects(finishedWork);
+          if (flags & 8192)
+            a: for (
+              root = finishedWork.stateNode,
+                root._visibility = hoistableRoot
+                  ? root._visibility & ~OffscreenVisible
+                  : root._visibility | OffscreenVisible,
+                hoistableRoot &&
+                  (null === current ||
+                    wasHidden ||
+                    offscreenSubtreeIsHidden ||
+                    offscreenSubtreeWasHidden ||
+                    recursivelyTraverseDisappearLayoutEffects(finishedWork)),
+                current = null,
+                root = finishedWork;
+              ;
+
+            ) {
+              if (5 === root.tag || 26 === root.tag) {
+                if (null === current) {
+                  wasHidden = current = root;
+                  try {
+                    (maybeNodes = wasHidden.stateNode),
+                      hoistableRoot
+                        ? runWithFiberInDEV(wasHidden, hideInstance, maybeNodes)
+                        : runWithFiberInDEV(
+                            wasHidden,
+                            unhideInstance,
+                            wasHidden.stateNode,
+                            wasHidden.memoizedProps
+                          );
+                  } catch (error) {
+                    captureCommitPhaseError(wasHidden, wasHidden.return, error);
+                  }
+                }
+              } else if (6 === root.tag) {
+                if (null === current) {
+                  wasHidden = root;
+                  try {
+                    (i = wasHidden.stateNode),
+                      hoistableRoot
+                        ? runWithFiberInDEV(wasHidden, hideTextInstance, i)
+                        : runWithFiberInDEV(
+                            wasHidden,
+                            unhideTextInstance,
+                            i,
+                            wasHidden.memoizedProps
+                          );
+                  } catch (error) {
+                    captureCommitPhaseError(wasHidden, wasHidden.return, error);
+                  }
+                }
+              } else if (
+                ((22 !== root.tag && 23 !== root.tag) ||
+                  null === root.memoizedState ||
+                  root === finishedWork) &&
+                null !== root.child
+              ) {
+                root.child.return = root;
+                root = root.child;
+                continue;
+              }
+              if (root === finishedWork) break a;
+              for (; null === root.sibling; ) {
+                if (null === root.return || root.return === finishedWork)
+                  break a;
+                current === root && (current = null);
+                root = root.return;
+              }
+              current === root && (current = null);
+              root.sibling.return = root.return;
+              root = root.sibling;
+            }
+          flags & 4 &&
+            ((flags = finishedWork.updateQueue),
+            null !== flags &&
+              ((current = flags.retryQueue),
+              null !== current &&
+                ((flags.retryQueue = null),
+                attachSuspenseRetryListeners(finishedWork, current))));
+          break;
+        case 19:
+          recursivelyTraverseMutationEffects(root, finishedWork);
+          commitReconciliationEffects(finishedWork);
+          flags & 4 &&
+            ((flags = finishedWork.updateQueue),
+            null !== flags &&
+              ((finishedWork.updateQueue = null),
+              attachSuspenseRetryListeners(finishedWork, flags)));
+          break;
+        case 30:
+          break;
+        case 21:
+          break;
+        default:
+          recursivelyTraverseMutationEffects(root, finishedWork),
+            commitReconciliationEffects(finishedWork);
+      }
+    }
+    function commitReconciliationEffects(finishedWork) {
+      var flags = finishedWork.flags;
+      if (flags & 2) {
+        try {
+          runWithFiberInDEV(finishedWork, commitPlacement, finishedWork);
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+        finishedWork.flags &= -3;
+      }
+      flags & 4096 && (finishedWork.flags &= -4097);
+    }
+    function recursivelyResetForms(parentFiber) {
+      if (parentFiber.subtreeFlags & 1024)
+        for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+          var fiber = parentFiber;
+          recursivelyResetForms(fiber);
+          5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();
+          parentFiber = parentFiber.sibling;
+        }
+    }
+    function recursivelyTraverseLayoutEffects(root, parentFiber) {
+      if (parentFiber.subtreeFlags & 8772)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),
+            (parentFiber = parentFiber.sibling);
+    }
+    function disappearLayoutEffects(finishedWork) {
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 14:
+        case 15:
+          commitHookLayoutUnmountEffects(
+            finishedWork,
+            finishedWork.return,
+            Layout
+          );
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        case 1:
+          safelyDetachRef(finishedWork, finishedWork.return);
+          var instance = finishedWork.stateNode;
+          "function" === typeof instance.componentWillUnmount &&
+            safelyCallComponentWillUnmount(
+              finishedWork,
+              finishedWork.return,
+              instance
+            );
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        case 27:
+          runWithFiberInDEV(
+            finishedWork,
+            releaseSingletonInstance,
+            finishedWork.stateNode
+          );
+        case 26:
+        case 5:
+          safelyDetachRef(finishedWork, finishedWork.return);
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        case 22:
+          null === finishedWork.memoizedState &&
+            recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        case 30:
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+          break;
+        default:
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+      }
+    }
+    function recursivelyTraverseDisappearLayoutEffects(parentFiber) {
+      for (parentFiber = parentFiber.child; null !== parentFiber; )
+        disappearLayoutEffects(parentFiber),
+          (parentFiber = parentFiber.sibling);
+    }
+    function reappearLayoutEffects(
+      finishedRoot,
+      current,
+      finishedWork,
+      includeWorkInProgressEffects
+    ) {
+      var flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+          commitHookLayoutEffects(finishedWork, Layout);
+          break;
+        case 1:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+          current = finishedWork.stateNode;
+          "function" === typeof current.componentDidMount &&
+            runWithFiberInDEV(
+              finishedWork,
+              callComponentDidMountInDEV,
+              finishedWork,
+              current
+            );
+          current = finishedWork.updateQueue;
+          if (null !== current) {
+            finishedRoot = finishedWork.stateNode;
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitHiddenCallbacks,
+                current,
+                finishedRoot
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          }
+          includeWorkInProgressEffects &&
+            flags & 64 &&
+            commitClassCallbacks(finishedWork);
+          safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 27:
+          commitHostSingletonAcquisition(finishedWork);
+        case 26:
+        case 5:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+          includeWorkInProgressEffects &&
+            null === current &&
+            flags & 4 &&
+            commitHostMount(finishedWork);
+          safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 12:
+          if (includeWorkInProgressEffects && flags & 4) {
+            flags = pushNestedEffectDurations();
+            recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              includeWorkInProgressEffects
+            );
+            includeWorkInProgressEffects = finishedWork.stateNode;
+            includeWorkInProgressEffects.effectDuration +=
+              bubbleNestedEffectDurations(flags);
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitProfiler,
+                finishedWork,
+                current,
+                commitStartTime,
+                includeWorkInProgressEffects.effectDuration
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          } else
+            recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              includeWorkInProgressEffects
+            );
+          break;
+        case 13:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+          includeWorkInProgressEffects &&
+            flags & 4 &&
+            commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
+          break;
+        case 22:
+          null === finishedWork.memoizedState &&
+            recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              includeWorkInProgressEffects
+            );
+          safelyAttachRef(finishedWork, finishedWork.return);
+          break;
+        case 30:
+          break;
+        default:
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+      }
+    }
+    function recursivelyTraverseReappearLayoutEffects(
+      finishedRoot,
+      parentFiber,
+      includeWorkInProgressEffects
+    ) {
+      includeWorkInProgressEffects =
+        includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);
+      for (parentFiber = parentFiber.child; null !== parentFiber; )
+        reappearLayoutEffects(
+          finishedRoot,
+          parentFiber.alternate,
+          parentFiber,
+          includeWorkInProgressEffects
+        ),
+          (parentFiber = parentFiber.sibling);
+    }
+    function commitOffscreenPassiveMountEffects(current, finishedWork) {
+      var previousCache = null;
+      null !== current &&
+        null !== current.memoizedState &&
+        null !== current.memoizedState.cachePool &&
+        (previousCache = current.memoizedState.cachePool.pool);
+      current = null;
+      null !== finishedWork.memoizedState &&
+        null !== finishedWork.memoizedState.cachePool &&
+        (current = finishedWork.memoizedState.cachePool.pool);
+      current !== previousCache &&
+        (null != current && retainCache(current),
+        null != previousCache && releaseCache(previousCache));
+    }
+    function commitCachePassiveMountEffect(current, finishedWork) {
+      current = null;
+      null !== finishedWork.alternate &&
+        (current = finishedWork.alternate.memoizedState.cache);
+      finishedWork = finishedWork.memoizedState.cache;
+      finishedWork !== current &&
+        (retainCache(finishedWork), null != current && releaseCache(current));
+    }
+    function recursivelyTraversePassiveMountEffects(
+      root,
+      parentFiber,
+      committedLanes,
+      committedTransitions
+    ) {
+      if (parentFiber.subtreeFlags & 10256)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          commitPassiveMountOnFiber(
+            root,
+            parentFiber,
+            committedLanes,
+            committedTransitions
+          ),
+            (parentFiber = parentFiber.sibling);
+    }
+    function commitPassiveMountOnFiber(
+      finishedRoot,
+      finishedWork,
+      committedLanes,
+      committedTransitions
+    ) {
+      var flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          flags & 2048 &&
+            commitHookPassiveMountEffects(finishedWork, Passive | HasEffect);
+          break;
+        case 1:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          break;
+        case 3:
+          var prevEffectDuration = pushNestedEffectDurations();
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          flags & 2048 &&
+            ((committedLanes = null),
+            null !== finishedWork.alternate &&
+              (committedLanes = finishedWork.alternate.memoizedState.cache),
+            (finishedWork = finishedWork.memoizedState.cache),
+            finishedWork !== committedLanes &&
+              (retainCache(finishedWork),
+              null != committedLanes && releaseCache(committedLanes)));
+          finishedRoot.passiveEffectDuration +=
+            popNestedEffectDurations(prevEffectDuration);
+          break;
+        case 12:
+          if (flags & 2048) {
+            flags = pushNestedEffectDurations();
+            recursivelyTraversePassiveMountEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions
+            );
+            finishedRoot = finishedWork.stateNode;
+            finishedRoot.passiveEffectDuration +=
+              bubbleNestedEffectDurations(flags);
+            try {
+              runWithFiberInDEV(
+                finishedWork,
+                commitProfilerPostCommitImpl,
+                finishedWork,
+                finishedWork.alternate,
+                commitStartTime,
+                finishedRoot.passiveEffectDuration
+              );
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+          } else
+            recursivelyTraversePassiveMountEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions
+            );
+          break;
+        case 13:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          break;
+        case 23:
+          break;
+        case 22:
+          prevEffectDuration = finishedWork.stateNode;
+          var _current = finishedWork.alternate;
+          null !== finishedWork.memoizedState
+            ? prevEffectDuration._visibility & OffscreenPassiveEffectsConnected
+              ? recursivelyTraversePassiveMountEffects(
+                  finishedRoot,
+                  finishedWork,
+                  committedLanes,
+                  committedTransitions
+                )
+              : recursivelyTraverseAtomicPassiveEffects(
+                  finishedRoot,
+                  finishedWork
+                )
+            : prevEffectDuration._visibility & OffscreenPassiveEffectsConnected
+              ? recursivelyTraversePassiveMountEffects(
+                  finishedRoot,
+                  finishedWork,
+                  committedLanes,
+                  committedTransitions
+                )
+              : ((prevEffectDuration._visibility |=
+                  OffscreenPassiveEffectsConnected),
+                recursivelyTraverseReconnectPassiveEffects(
+                  finishedRoot,
+                  finishedWork,
+                  committedLanes,
+                  committedTransitions,
+                  0 !== (finishedWork.subtreeFlags & 10256)
+                ));
+          flags & 2048 &&
+            commitOffscreenPassiveMountEffects(_current, finishedWork);
+          break;
+        case 24:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+          flags & 2048 &&
+            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+          break;
+        default:
+          recursivelyTraversePassiveMountEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions
+          );
+      }
+    }
+    function recursivelyTraverseReconnectPassiveEffects(
+      finishedRoot,
+      parentFiber,
+      committedLanes,
+      committedTransitions,
+      includeWorkInProgressEffects
+    ) {
+      includeWorkInProgressEffects =
+        includeWorkInProgressEffects &&
+        0 !== (parentFiber.subtreeFlags & 10256);
+      for (parentFiber = parentFiber.child; null !== parentFiber; )
+        reconnectPassiveEffects(
+          finishedRoot,
+          parentFiber,
+          committedLanes,
+          committedTransitions,
+          includeWorkInProgressEffects
+        ),
+          (parentFiber = parentFiber.sibling);
+    }
+    function reconnectPassiveEffects(
+      finishedRoot,
+      finishedWork,
+      committedLanes,
+      committedTransitions,
+      includeWorkInProgressEffects
+    ) {
+      var flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraverseReconnectPassiveEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions,
+            includeWorkInProgressEffects
+          );
+          commitHookPassiveMountEffects(finishedWork, Passive);
+          break;
+        case 23:
+          break;
+        case 22:
+          var _instance2 = finishedWork.stateNode;
+          null !== finishedWork.memoizedState
+            ? _instance2._visibility & OffscreenPassiveEffectsConnected
+              ? recursivelyTraverseReconnectPassiveEffects(
+                  finishedRoot,
+                  finishedWork,
+                  committedLanes,
+                  committedTransitions,
+                  includeWorkInProgressEffects
+                )
+              : recursivelyTraverseAtomicPassiveEffects(
+                  finishedRoot,
+                  finishedWork
+                )
+            : ((_instance2._visibility |= OffscreenPassiveEffectsConnected),
+              recursivelyTraverseReconnectPassiveEffects(
+                finishedRoot,
+                finishedWork,
+                committedLanes,
+                committedTransitions,
+                includeWorkInProgressEffects
+              ));
+          includeWorkInProgressEffects &&
+            flags & 2048 &&
+            commitOffscreenPassiveMountEffects(
+              finishedWork.alternate,
+              finishedWork
+            );
+          break;
+        case 24:
+          recursivelyTraverseReconnectPassiveEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions,
+            includeWorkInProgressEffects
+          );
+          includeWorkInProgressEffects &&
+            flags & 2048 &&
+            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+          break;
+        default:
+          recursivelyTraverseReconnectPassiveEffects(
+            finishedRoot,
+            finishedWork,
+            committedLanes,
+            committedTransitions,
+            includeWorkInProgressEffects
+          );
+      }
+    }
+    function recursivelyTraverseAtomicPassiveEffects(
+      finishedRoot$jscomp$0,
+      parentFiber
+    ) {
+      if (parentFiber.subtreeFlags & 10256)
+        for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+          var finishedRoot = finishedRoot$jscomp$0,
+            finishedWork = parentFiber,
+            flags = finishedWork.flags;
+          switch (finishedWork.tag) {
+            case 22:
+              recursivelyTraverseAtomicPassiveEffects(
+                finishedRoot,
+                finishedWork
+              );
+              flags & 2048 &&
+                commitOffscreenPassiveMountEffects(
+                  finishedWork.alternate,
+                  finishedWork
+                );
+              break;
+            case 24:
+              recursivelyTraverseAtomicPassiveEffects(
+                finishedRoot,
+                finishedWork
+              );
+              flags & 2048 &&
+                commitCachePassiveMountEffect(
+                  finishedWork.alternate,
+                  finishedWork
+                );
+              break;
+            default:
+              recursivelyTraverseAtomicPassiveEffects(
+                finishedRoot,
+                finishedWork
+              );
+          }
+          parentFiber = parentFiber.sibling;
+        }
+    }
+    function recursivelyAccumulateSuspenseyCommit(parentFiber) {
+      if (parentFiber.subtreeFlags & suspenseyCommitFlag)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          accumulateSuspenseyCommitOnFiber(parentFiber),
+            (parentFiber = parentFiber.sibling);
+    }
+    function accumulateSuspenseyCommitOnFiber(fiber) {
+      switch (fiber.tag) {
+        case 26:
+          recursivelyAccumulateSuspenseyCommit(fiber);
+          fiber.flags & suspenseyCommitFlag &&
+            null !== fiber.memoizedState &&
+            suspendResource(
+              currentHoistableRoot,
+              fiber.memoizedState,
+              fiber.memoizedProps
+            );
+          break;
+        case 5:
+          recursivelyAccumulateSuspenseyCommit(fiber);
+          break;
+        case 3:
+        case 4:
+          var previousHoistableRoot = currentHoistableRoot;
+          currentHoistableRoot = getHoistableRoot(
+            fiber.stateNode.containerInfo
+          );
+          recursivelyAccumulateSuspenseyCommit(fiber);
+          currentHoistableRoot = previousHoistableRoot;
+          break;
+        case 22:
+          null === fiber.memoizedState &&
+            ((previousHoistableRoot = fiber.alternate),
+            null !== previousHoistableRoot &&
+            null !== previousHoistableRoot.memoizedState
+              ? ((previousHoistableRoot = suspenseyCommitFlag),
+                (suspenseyCommitFlag = 16777216),
+                recursivelyAccumulateSuspenseyCommit(fiber),
+                (suspenseyCommitFlag = previousHoistableRoot))
+              : recursivelyAccumulateSuspenseyCommit(fiber));
+          break;
+        default:
+          recursivelyAccumulateSuspenseyCommit(fiber);
+      }
+    }
+    function detachAlternateSiblings(parentFiber) {
+      var previousFiber = parentFiber.alternate;
+      if (
+        null !== previousFiber &&
+        ((parentFiber = previousFiber.child), null !== parentFiber)
+      ) {
+        previousFiber.child = null;
+        do
+          (previousFiber = parentFiber.sibling),
+            (parentFiber.sibling = null),
+            (parentFiber = previousFiber);
+        while (null !== parentFiber);
+      }
+    }
+    function recursivelyTraversePassiveUnmountEffects(parentFiber) {
+      var deletions = parentFiber.deletions;
+      if (0 !== (parentFiber.flags & 16)) {
+        if (null !== deletions)
+          for (var i = 0; i < deletions.length; i++) {
+            var childToDelete = deletions[i];
+            nextEffect = childToDelete;
+            commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+              childToDelete,
+              parentFiber
+            );
+          }
+        detachAlternateSiblings(parentFiber);
+      }
+      if (parentFiber.subtreeFlags & 10256)
+        for (parentFiber = parentFiber.child; null !== parentFiber; )
+          commitPassiveUnmountOnFiber(parentFiber),
+            (parentFiber = parentFiber.sibling);
+    }
+    function commitPassiveUnmountOnFiber(finishedWork) {
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          recursivelyTraversePassiveUnmountEffects(finishedWork);
+          finishedWork.flags & 2048 &&
+            commitHookPassiveUnmountEffects(
+              finishedWork,
+              finishedWork.return,
+              Passive | HasEffect
+            );
+          break;
+        case 3:
+          var prevEffectDuration = pushNestedEffectDurations();
+          recursivelyTraversePassiveUnmountEffects(finishedWork);
+          finishedWork.stateNode.passiveEffectDuration +=
+            popNestedEffectDurations(prevEffectDuration);
+          break;
+        case 12:
+          prevEffectDuration = pushNestedEffectDurations();
+          recursivelyTraversePassiveUnmountEffects(finishedWork);
+          finishedWork.stateNode.passiveEffectDuration +=
+            bubbleNestedEffectDurations(prevEffectDuration);
+          break;
+        case 22:
+          prevEffectDuration = finishedWork.stateNode;
+          null !== finishedWork.memoizedState &&
+          prevEffectDuration._visibility & OffscreenPassiveEffectsConnected &&
+          (null === finishedWork.return || 13 !== finishedWork.return.tag)
+            ? ((prevEffectDuration._visibility &=
+                ~OffscreenPassiveEffectsConnected),
+              recursivelyTraverseDisconnectPassiveEffects(finishedWork))
+            : recursivelyTraversePassiveUnmountEffects(finishedWork);
+          break;
+        default:
+          recursivelyTraversePassiveUnmountEffects(finishedWork);
+      }
+    }
+    function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {
+      var deletions = parentFiber.deletions;
+      if (0 !== (parentFiber.flags & 16)) {
+        if (null !== deletions)
+          for (var i = 0; i < deletions.length; i++) {
+            var childToDelete = deletions[i];
+            nextEffect = childToDelete;
+            commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+              childToDelete,
+              parentFiber
+            );
+          }
+        detachAlternateSiblings(parentFiber);
+      }
+      for (parentFiber = parentFiber.child; null !== parentFiber; )
+        disconnectPassiveEffect(parentFiber),
+          (parentFiber = parentFiber.sibling);
+    }
+    function disconnectPassiveEffect(finishedWork) {
+      switch (finishedWork.tag) {
+        case 0:
+        case 11:
+        case 15:
+          commitHookPassiveUnmountEffects(
+            finishedWork,
+            finishedWork.return,
+            Passive
+          );
+          recursivelyTraverseDisconnectPassiveEffects(finishedWork);
+          break;
+        case 22:
+          var instance = finishedWork.stateNode;
+          instance._visibility & OffscreenPassiveEffectsConnected &&
+            ((instance._visibility &= ~OffscreenPassiveEffectsConnected),
+            recursivelyTraverseDisconnectPassiveEffects(finishedWork));
+          break;
+        default:
+          recursivelyTraverseDisconnectPassiveEffects(finishedWork);
+      }
+    }
+    function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+      deletedSubtreeRoot,
+      nearestMountedAncestor
+    ) {
+      for (; null !== nextEffect; ) {
+        var fiber = nextEffect,
+          current = fiber;
+        switch (current.tag) {
+          case 0:
+          case 11:
+          case 15:
+            commitHookPassiveUnmountEffects(
+              current,
+              nearestMountedAncestor,
+              Passive
+            );
+            break;
+          case 23:
+          case 22:
+            null !== current.memoizedState &&
+              null !== current.memoizedState.cachePool &&
+              ((current = current.memoizedState.cachePool.pool),
+              null != current && retainCache(current));
+            break;
+          case 24:
+            releaseCache(current.memoizedState.cache);
+        }
+        current = fiber.child;
+        if (null !== current) (current.return = fiber), (nextEffect = current);
+        else
+          a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {
+            current = nextEffect;
+            var sibling = current.sibling,
+              returnFiber = current.return;
+            detachFiberAfterEffects(current);
+            if (current === fiber) {
+              nextEffect = null;
+              break a;
+            }
+            if (null !== sibling) {
+              sibling.return = returnFiber;
+              nextEffect = sibling;
+              break a;
+            }
+            nextEffect = returnFiber;
+          }
+      }
+    }
+    function onCommitRoot() {
+      commitHooks.forEach(function (commitHook) {
+        return commitHook();
+      });
+    }
+    function isConcurrentActEnvironment() {
+      var isReactActEnvironmentGlobal =
+        "undefined" !== typeof IS_REACT_ACT_ENVIRONMENT
+          ? IS_REACT_ACT_ENVIRONMENT
+          : void 0;
+      isReactActEnvironmentGlobal ||
+        null === ReactSharedInternals.actQueue ||
+        console.error(
+          "The current testing environment is not configured to support act(...)"
+        );
+      return isReactActEnvironmentGlobal;
+    }
+    function requestUpdateLane(fiber) {
+      if (
+        (executionContext & RenderContext) !== NoContext &&
+        0 !== workInProgressRootRenderLanes
+      )
+        return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;
+      var transition = ReactSharedInternals.T;
+      return null !== transition
+        ? (transition._updatedFibers || (transition._updatedFibers = new Set()),
+          transition._updatedFibers.add(fiber),
+          (fiber = currentEntangledLane),
+          0 !== fiber ? fiber : requestTransitionLane())
+        : resolveUpdatePriority();
+    }
+    function requestDeferredLane() {
+      0 === workInProgressDeferredLane &&
+        (workInProgressDeferredLane =
+          0 === (workInProgressRootRenderLanes & 536870912) || isHydrating
+            ? claimNextTransitionLane()
+            : 536870912);
+      var suspenseHandler = suspenseHandlerStackCursor.current;
+      null !== suspenseHandler && (suspenseHandler.flags |= 32);
+      return workInProgressDeferredLane;
+    }
+    function scheduleUpdateOnFiber(root, fiber, lane) {
+      isRunningInsertionEffect &&
+        console.error("useInsertionEffect must not schedule updates.");
+      isFlushingPassiveEffects && (didScheduleUpdateDuringPassiveEffects = !0);
+      if (
+        (root === workInProgressRoot &&
+          (workInProgressSuspendedReason === SuspendedOnData ||
+            workInProgressSuspendedReason === SuspendedOnAction)) ||
+        null !== root.cancelPendingCommit
+      )
+        prepareFreshStack(root, 0),
+          markRootSuspended(
+            root,
+            workInProgressRootRenderLanes,
+            workInProgressDeferredLane,
+            !1
+          );
+      markRootUpdated$1(root, lane);
+      if (
+        0 !== (executionContext & RenderContext) &&
+        root === workInProgressRoot
+      ) {
+        if (isRendering)
+          switch (fiber.tag) {
+            case 0:
+            case 11:
+            case 15:
+              root =
+                (workInProgress && getComponentNameFromFiber(workInProgress)) ||
+                "Unknown";
+              didWarnAboutUpdateInRenderForAnotherComponent.has(root) ||
+                (didWarnAboutUpdateInRenderForAnotherComponent.add(root),
+                (fiber = getComponentNameFromFiber(fiber) || "Unknown"),
+                console.error(
+                  "Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render",
+                  fiber,
+                  root,
+                  root
+                ));
+              break;
+            case 1:
+              didWarnAboutUpdateInRender ||
+                (console.error(
+                  "Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state."
+                ),
+                (didWarnAboutUpdateInRender = !0));
+          }
+      } else
+        isDevToolsPresent && addFiberToLanesMap(root, fiber, lane),
+          warnIfUpdatesNotWrappedWithActDEV(fiber),
+          root === workInProgressRoot &&
+            ((executionContext & RenderContext) === NoContext &&
+              (workInProgressRootInterleavedUpdatedLanes |= lane),
+            workInProgressRootExitStatus === RootSuspendedWithDelay &&
+              markRootSuspended(
+                root,
+                workInProgressRootRenderLanes,
+                workInProgressDeferredLane,
+                !1
+              )),
+          ensureRootIsScheduled(root);
+    }
+    function performWorkOnRoot(root, lanes, forceSync) {
+      if ((executionContext & (RenderContext | CommitContext)) !== NoContext)
+        throw Error("Should not already be working.");
+      var shouldTimeSlice =
+          (!forceSync &&
+            0 === (lanes & 124) &&
+            0 === (lanes & root.expiredLanes)) ||
+          checkIfRootIsPrerendering(root, lanes),
+        exitStatus = shouldTimeSlice
+          ? renderRootConcurrent(root, lanes)
+          : renderRootSync(root, lanes, !0),
+        renderWasConcurrent = shouldTimeSlice;
+      do {
+        if (exitStatus === RootInProgress) {
+          workInProgressRootIsPrerendering &&
+            !shouldTimeSlice &&
+            markRootSuspended(root, lanes, 0, !1);
+          break;
+        } else {
+          forceSync = root.current.alternate;
+          if (
+            renderWasConcurrent &&
+            !isRenderConsistentWithExternalStores(forceSync)
+          ) {
+            exitStatus = renderRootSync(root, lanes, !1);
+            renderWasConcurrent = !1;
+            continue;
+          }
+          if (exitStatus === RootErrored) {
+            renderWasConcurrent = lanes;
+            if (root.errorRecoveryDisabledLanes & renderWasConcurrent)
+              var errorRetryLanes = 0;
+            else
+              (errorRetryLanes = root.pendingLanes & -536870913),
+                (errorRetryLanes =
+                  0 !== errorRetryLanes
+                    ? errorRetryLanes
+                    : errorRetryLanes & 536870912
+                      ? 536870912
+                      : 0);
+            if (0 !== errorRetryLanes) {
+              lanes = errorRetryLanes;
+              a: {
+                exitStatus = root;
+                var errorRetryLanes$jscomp$0 = errorRetryLanes;
+                errorRetryLanes = workInProgressRootConcurrentErrors;
+                var wasRootDehydrated =
+                  exitStatus.current.memoizedState.isDehydrated;
+                wasRootDehydrated &&
+                  (prepareFreshStack(
+                    exitStatus,
+                    errorRetryLanes$jscomp$0
+                  ).flags |= 256);
+                errorRetryLanes$jscomp$0 = renderRootSync(
+                  exitStatus,
+                  errorRetryLanes$jscomp$0,
+                  !1
+                );
+                if (errorRetryLanes$jscomp$0 !== RootErrored) {
+                  if (
+                    workInProgressRootDidAttachPingListener &&
+                    !wasRootDehydrated
+                  ) {
+                    exitStatus.errorRecoveryDisabledLanes |=
+                      renderWasConcurrent;
+                    workInProgressRootInterleavedUpdatedLanes |=
+                      renderWasConcurrent;
+                    exitStatus = RootSuspendedWithDelay;
+                    break a;
+                  }
+                  exitStatus = workInProgressRootRecoverableErrors;
+                  workInProgressRootRecoverableErrors = errorRetryLanes;
+                  null !== exitStatus &&
+                    (null === workInProgressRootRecoverableErrors
+                      ? (workInProgressRootRecoverableErrors = exitStatus)
+                      : workInProgressRootRecoverableErrors.push.apply(
+                          workInProgressRootRecoverableErrors,
+                          exitStatus
+                        ));
+                }
+                exitStatus = errorRetryLanes$jscomp$0;
+              }
+              renderWasConcurrent = !1;
+              if (exitStatus !== RootErrored) continue;
+            }
+          }
+          if (exitStatus === RootFatalErrored) {
+            prepareFreshStack(root, 0);
+            markRootSuspended(root, lanes, 0, !0);
+            break;
+          }
+          a: {
+            shouldTimeSlice = root;
+            switch (exitStatus) {
+              case RootInProgress:
+              case RootFatalErrored:
+                throw Error("Root did not complete. This is a bug in React.");
+              case RootSuspendedWithDelay:
+                if ((lanes & 4194048) !== lanes) break;
+              case RootSuspendedAtTheShell:
+                markRootSuspended(
+                  shouldTimeSlice,
+                  lanes,
+                  workInProgressDeferredLane,
+                  !workInProgressRootDidSkipSuspendedSiblings
+                );
+                break a;
+              case RootErrored:
+                workInProgressRootRecoverableErrors = null;
+                break;
+              case RootSuspended:
+              case RootCompleted:
+                break;
+              default:
+                throw Error("Unknown root exit status.");
+            }
+            if (null !== ReactSharedInternals.actQueue)
+              commitRoot(
+                shouldTimeSlice,
+                forceSync,
+                lanes,
+                workInProgressRootRecoverableErrors,
+                workInProgressTransitions,
+                workInProgressRootDidIncludeRecursiveRenderUpdate,
+                workInProgressDeferredLane,
+                workInProgressRootInterleavedUpdatedLanes,
+                workInProgressSuspendedRetryLanes
+              );
+            else {
+              if (
+                (lanes & 62914560) === lanes &&
+                ((renderWasConcurrent =
+                  globalMostRecentFallbackTime +
+                  FALLBACK_THROTTLE_MS -
+                  now$1()),
+                10 < renderWasConcurrent)
+              ) {
+                markRootSuspended(
+                  shouldTimeSlice,
+                  lanes,
+                  workInProgressDeferredLane,
+                  !workInProgressRootDidSkipSuspendedSiblings
+                );
+                if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;
+                shouldTimeSlice.timeoutHandle = scheduleTimeout(
+                  commitRootWhenReady.bind(
+                    null,
+                    shouldTimeSlice,
+                    forceSync,
+                    workInProgressRootRecoverableErrors,
+                    workInProgressTransitions,
+                    workInProgressRootDidIncludeRecursiveRenderUpdate,
+                    lanes,
+                    workInProgressDeferredLane,
+                    workInProgressRootInterleavedUpdatedLanes,
+                    workInProgressSuspendedRetryLanes,
+                    workInProgressRootDidSkipSuspendedSiblings,
+                    exitStatus,
+                    THROTTLED_COMMIT,
+                    renderStartTime,
+                    0
+                  ),
+                  renderWasConcurrent
+                );
+                break a;
+              }
+              commitRootWhenReady(
+                shouldTimeSlice,
+                forceSync,
+                workInProgressRootRecoverableErrors,
+                workInProgressTransitions,
+                workInProgressRootDidIncludeRecursiveRenderUpdate,
+                lanes,
+                workInProgressDeferredLane,
+                workInProgressRootInterleavedUpdatedLanes,
+                workInProgressSuspendedRetryLanes,
+                workInProgressRootDidSkipSuspendedSiblings,
+                exitStatus,
+                IMMEDIATE_COMMIT,
+                renderStartTime,
+                0
+              );
+            }
+          }
+        }
+        break;
+      } while (1);
+      ensureRootIsScheduled(root);
+    }
+    function commitRootWhenReady(
+      root,
+      finishedWork,
+      recoverableErrors,
+      transitions,
+      didIncludeRenderPhaseUpdate,
+      lanes,
+      spawnedLane,
+      updatedLanes,
+      suspendedRetryLanes,
+      didSkipSuspendedSiblings,
+      exitStatus,
+      suspendedCommitReason,
+      completedRenderStartTime,
+      completedRenderEndTime
+    ) {
+      root.timeoutHandle = noTimeout;
+      suspendedCommitReason = finishedWork.subtreeFlags;
+      if (
+        suspendedCommitReason & 8192 ||
+        16785408 === (suspendedCommitReason & 16785408)
+      )
+        if (
+          ((suspendedState = {
+            stylesheets: null,
+            count: 0,
+            unsuspend: noop$1
+          }),
+          accumulateSuspenseyCommitOnFiber(finishedWork),
+          (suspendedCommitReason = waitForCommitToBeReady()),
+          null !== suspendedCommitReason)
+        ) {
+          root.cancelPendingCommit = suspendedCommitReason(
+            commitRoot.bind(
+              null,
+              root,
+              finishedWork,
+              lanes,
+              recoverableErrors,
+              transitions,
+              didIncludeRenderPhaseUpdate,
+              spawnedLane,
+              updatedLanes,
+              suspendedRetryLanes,
+              exitStatus,
+              SUSPENDED_COMMIT,
+              completedRenderStartTime,
+              completedRenderEndTime
+            )
+          );
+          markRootSuspended(
+            root,
+            lanes,
+            spawnedLane,
+            !didSkipSuspendedSiblings
+          );
+          return;
+        }
+      commitRoot(
+        root,
+        finishedWork,
+        lanes,
+        recoverableErrors,
+        transitions,
+        didIncludeRenderPhaseUpdate,
+        spawnedLane,
+        updatedLanes,
+        suspendedRetryLanes
+      );
+    }
+    function isRenderConsistentWithExternalStores(finishedWork) {
+      for (var node = finishedWork; ; ) {
+        var tag = node.tag;
+        if (
+          (0 === tag || 11 === tag || 15 === tag) &&
+          node.flags & 16384 &&
+          ((tag = node.updateQueue),
+          null !== tag && ((tag = tag.stores), null !== tag))
+        )
+          for (var i = 0; i < tag.length; i++) {
+            var check = tag[i],
+              getSnapshot = check.getSnapshot;
+            check = check.value;
+            try {
+              if (!objectIs(getSnapshot(), check)) return !1;
+            } catch (error) {
+              return !1;
+            }
+          }
+        tag = node.child;
+        if (node.subtreeFlags & 16384 && null !== tag)
+          (tag.return = node), (node = tag);
+        else {
+          if (node === finishedWork) break;
+          for (; null === node.sibling; ) {
+            if (null === node.return || node.return === finishedWork) return !0;
+            node = node.return;
+          }
+          node.sibling.return = node.return;
+          node = node.sibling;
+        }
+      }
+      return !0;
+    }
+    function markRootSuspended(
+      root,
+      suspendedLanes,
+      spawnedLane,
+      didAttemptEntireTree
+    ) {
+      suspendedLanes &= ~workInProgressRootPingedLanes;
+      suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;
+      root.suspendedLanes |= suspendedLanes;
+      root.pingedLanes &= ~suspendedLanes;
+      didAttemptEntireTree && (root.warmLanes |= suspendedLanes);
+      didAttemptEntireTree = root.expirationTimes;
+      for (var lanes = suspendedLanes; 0 < lanes; ) {
+        var index = 31 - clz32(lanes),
+          lane = 1 << index;
+        didAttemptEntireTree[index] = -1;
+        lanes &= ~lane;
+      }
+      0 !== spawnedLane &&
+        markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);
+    }
+    function flushSyncWork$1() {
+      return (executionContext & (RenderContext | CommitContext)) === NoContext
+        ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)
+        : !0;
+    }
+    function resetWorkInProgressStack() {
+      if (null !== workInProgress) {
+        if (workInProgressSuspendedReason === NotSuspended)
+          var interruptedWork = workInProgress.return;
+        else
+          (interruptedWork = workInProgress),
+            resetContextDependencies(),
+            resetHooksOnUnwind(interruptedWork),
+            (thenableState = null),
+            (thenableIndexCounter = 0),
+            (interruptedWork = workInProgress);
+        for (; null !== interruptedWork; )
+          unwindInterruptedWork(interruptedWork.alternate, interruptedWork),
+            (interruptedWork = interruptedWork.return);
+        workInProgress = null;
+      }
+    }
+    function prepareFreshStack(root, lanes) {
+      var timeoutHandle = root.timeoutHandle;
+      timeoutHandle !== noTimeout &&
+        ((root.timeoutHandle = noTimeout), cancelTimeout(timeoutHandle));
+      timeoutHandle = root.cancelPendingCommit;
+      null !== timeoutHandle &&
+        ((root.cancelPendingCommit = null), timeoutHandle());
+      resetWorkInProgressStack();
+      workInProgressRoot = root;
+      workInProgress = timeoutHandle = createWorkInProgress(root.current, null);
+      workInProgressRootRenderLanes = lanes;
+      workInProgressSuspendedReason = NotSuspended;
+      workInProgressThrownValue = null;
+      workInProgressRootDidSkipSuspendedSiblings = !1;
+      workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);
+      workInProgressRootDidAttachPingListener = !1;
+      workInProgressRootExitStatus = RootInProgress;
+      workInProgressSuspendedRetryLanes =
+        workInProgressDeferredLane =
+        workInProgressRootPingedLanes =
+        workInProgressRootInterleavedUpdatedLanes =
+        workInProgressRootSkippedLanes =
+          0;
+      workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =
+        null;
+      workInProgressRootDidIncludeRecursiveRenderUpdate = !1;
+      0 !== (lanes & 8) && (lanes |= lanes & 32);
+      var allEntangledLanes = root.entangledLanes;
+      if (0 !== allEntangledLanes)
+        for (
+          root = root.entanglements, allEntangledLanes &= lanes;
+          0 < allEntangledLanes;
+
+        ) {
+          var index = 31 - clz32(allEntangledLanes),
+            lane = 1 << index;
+          lanes |= root[index];
+          allEntangledLanes &= ~lane;
+        }
+      entangledRenderLanes = lanes;
+      finishQueueingConcurrentUpdates();
+      lanes = getCurrentTime();
+      1e3 < lanes - lastResetTime &&
+        ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),
+        (lastResetTime = lanes));
+      ReactStrictModeWarnings.discardPendingWarnings();
+      return timeoutHandle;
+    }
+    function handleThrow(root, thrownValue) {
+      currentlyRenderingFiber = null;
+      ReactSharedInternals.H = ContextOnlyDispatcher;
+      ReactSharedInternals.getCurrentStack = null;
+      isRendering = !1;
+      current = null;
+      thrownValue === SuspenseException ||
+      thrownValue === SuspenseActionException
+        ? ((thrownValue = getSuspendedThenable()),
+          (workInProgressSuspendedReason = SuspendedOnImmediate))
+        : thrownValue === SuspenseyCommitException
+          ? ((thrownValue = getSuspendedThenable()),
+            (workInProgressSuspendedReason = SuspendedOnInstance))
+          : (workInProgressSuspendedReason =
+              thrownValue === SelectiveHydrationException
+                ? SuspendedOnHydration
+                : null !== thrownValue &&
+                    "object" === typeof thrownValue &&
+                    "function" === typeof thrownValue.then
+                  ? SuspendedOnDeprecatedThrowPromise
+                  : SuspendedOnError);
+      workInProgressThrownValue = thrownValue;
+      var erroredWork = workInProgress;
+      if (null === erroredWork)
+        (workInProgressRootExitStatus = RootFatalErrored),
+          logUncaughtError(
+            root,
+            createCapturedValueAtFiber(thrownValue, root.current)
+          );
+      else
+        switch (
+          (erroredWork.mode & ProfileMode &&
+            stopProfilerTimerIfRunningAndRecordDuration(erroredWork),
+          markComponentRenderStopped(),
+          workInProgressSuspendedReason)
+        ) {
+          case SuspendedOnError:
+            null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markComponentErrored &&
+              injectedProfilingHooks.markComponentErrored(
+                erroredWork,
+                thrownValue,
+                workInProgressRootRenderLanes
+              );
+            break;
+          case SuspendedOnData:
+          case SuspendedOnAction:
+          case SuspendedOnImmediate:
+          case SuspendedOnDeprecatedThrowPromise:
+          case SuspendedAndReadyToContinue:
+            null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markComponentSuspended &&
+              injectedProfilingHooks.markComponentSuspended(
+                erroredWork,
+                thrownValue,
+                workInProgressRootRenderLanes
+              );
+        }
+    }
+    function pushDispatcher() {
+      var prevDispatcher = ReactSharedInternals.H;
+      ReactSharedInternals.H = ContextOnlyDispatcher;
+      return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;
+    }
+    function pushAsyncDispatcher() {
+      var prevAsyncDispatcher = ReactSharedInternals.A;
+      ReactSharedInternals.A = DefaultAsyncDispatcher;
+      return prevAsyncDispatcher;
+    }
+    function renderDidSuspendDelayIfPossible() {
+      workInProgressRootExitStatus = RootSuspendedWithDelay;
+      workInProgressRootDidSkipSuspendedSiblings ||
+        ((workInProgressRootRenderLanes & 4194048) !==
+          workInProgressRootRenderLanes &&
+          null !== suspenseHandlerStackCursor.current) ||
+        (workInProgressRootIsPrerendering = !0);
+      (0 === (workInProgressRootSkippedLanes & 134217727) &&
+        0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||
+        null === workInProgressRoot ||
+        markRootSuspended(
+          workInProgressRoot,
+          workInProgressRootRenderLanes,
+          workInProgressDeferredLane,
+          !1
+        );
+    }
+    function renderRootSync(root, lanes, shouldYieldForPrerendering) {
+      var prevExecutionContext = executionContext;
+      executionContext |= RenderContext;
+      var prevDispatcher = pushDispatcher(),
+        prevAsyncDispatcher = pushAsyncDispatcher();
+      if (
+        workInProgressRoot !== root ||
+        workInProgressRootRenderLanes !== lanes
+      ) {
+        if (isDevToolsPresent) {
+          var memoizedUpdaters = root.memoizedUpdaters;
+          0 < memoizedUpdaters.size &&
+            (restorePendingUpdaters(root, workInProgressRootRenderLanes),
+            memoizedUpdaters.clear());
+          movePendingFibersToMemoized(root, lanes);
+        }
+        workInProgressTransitions = null;
+        prepareFreshStack(root, lanes);
+      }
+      markRenderStarted(lanes);
+      lanes = !1;
+      memoizedUpdaters = workInProgressRootExitStatus;
+      a: do
+        try {
+          if (
+            workInProgressSuspendedReason !== NotSuspended &&
+            null !== workInProgress
+          ) {
+            var unitOfWork = workInProgress,
+              thrownValue = workInProgressThrownValue;
+            switch (workInProgressSuspendedReason) {
+              case SuspendedOnHydration:
+                resetWorkInProgressStack();
+                memoizedUpdaters = RootSuspendedAtTheShell;
+                break a;
+              case SuspendedOnImmediate:
+              case SuspendedOnData:
+              case SuspendedOnAction:
+              case SuspendedOnDeprecatedThrowPromise:
+                null === suspenseHandlerStackCursor.current && (lanes = !0);
+                var reason = workInProgressSuspendedReason;
+                workInProgressSuspendedReason = NotSuspended;
+                workInProgressThrownValue = null;
+                throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);
+                if (
+                  shouldYieldForPrerendering &&
+                  workInProgressRootIsPrerendering
+                ) {
+                  memoizedUpdaters = RootInProgress;
+                  break a;
+                }
+                break;
+              default:
+                (reason = workInProgressSuspendedReason),
+                  (workInProgressSuspendedReason = NotSuspended),
+                  (workInProgressThrownValue = null),
+                  throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);
+            }
+          }
+          workLoopSync();
+          memoizedUpdaters = workInProgressRootExitStatus;
+          break;
+        } catch (thrownValue$8) {
+          handleThrow(root, thrownValue$8);
+        }
+      while (1);
+      lanes && root.shellSuspendCounter++;
+      resetContextDependencies();
+      executionContext = prevExecutionContext;
+      ReactSharedInternals.H = prevDispatcher;
+      ReactSharedInternals.A = prevAsyncDispatcher;
+      markRenderStopped();
+      null === workInProgress &&
+        ((workInProgressRoot = null),
+        (workInProgressRootRenderLanes = 0),
+        finishQueueingConcurrentUpdates());
+      return memoizedUpdaters;
+    }
+    function workLoopSync() {
+      for (; null !== workInProgress; ) performUnitOfWork(workInProgress);
+    }
+    function renderRootConcurrent(root, lanes) {
+      var prevExecutionContext = executionContext;
+      executionContext |= RenderContext;
+      var prevDispatcher = pushDispatcher(),
+        prevAsyncDispatcher = pushAsyncDispatcher();
+      if (
+        workInProgressRoot !== root ||
+        workInProgressRootRenderLanes !== lanes
+      ) {
+        if (isDevToolsPresent) {
+          var memoizedUpdaters = root.memoizedUpdaters;
+          0 < memoizedUpdaters.size &&
+            (restorePendingUpdaters(root, workInProgressRootRenderLanes),
+            memoizedUpdaters.clear());
+          movePendingFibersToMemoized(root, lanes);
+        }
+        workInProgressTransitions = null;
+        workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS;
+        prepareFreshStack(root, lanes);
+      } else
+        workInProgressRootIsPrerendering = checkIfRootIsPrerendering(
+          root,
+          lanes
+        );
+      markRenderStarted(lanes);
+      a: do
+        try {
+          if (
+            workInProgressSuspendedReason !== NotSuspended &&
+            null !== workInProgress
+          )
+            b: switch (
+              ((lanes = workInProgress),
+              (memoizedUpdaters = workInProgressThrownValue),
+              workInProgressSuspendedReason)
+            ) {
+              case SuspendedOnError:
+                workInProgressSuspendedReason = NotSuspended;
+                workInProgressThrownValue = null;
+                throwAndUnwindWorkLoop(
+                  root,
+                  lanes,
+                  memoizedUpdaters,
+                  SuspendedOnError
+                );
+                break;
+              case SuspendedOnData:
+              case SuspendedOnAction:
+                if (isThenableResolved(memoizedUpdaters)) {
+                  workInProgressSuspendedReason = NotSuspended;
+                  workInProgressThrownValue = null;
+                  replaySuspendedUnitOfWork(lanes);
+                  break;
+                }
+                lanes = function () {
+                  (workInProgressSuspendedReason !== SuspendedOnData &&
+                    workInProgressSuspendedReason !== SuspendedOnAction) ||
+                    workInProgressRoot !== root ||
+                    (workInProgressSuspendedReason =
+                      SuspendedAndReadyToContinue);
+                  ensureRootIsScheduled(root);
+                };
+                memoizedUpdaters.then(lanes, lanes);
+                break a;
+              case SuspendedOnImmediate:
+                workInProgressSuspendedReason = SuspendedAndReadyToContinue;
+                break a;
+              case SuspendedOnInstance:
+                workInProgressSuspendedReason =
+                  SuspendedOnInstanceAndReadyToContinue;
+                break a;
+              case SuspendedAndReadyToContinue:
+                isThenableResolved(memoizedUpdaters)
+                  ? ((workInProgressSuspendedReason = NotSuspended),
+                    (workInProgressThrownValue = null),
+                    replaySuspendedUnitOfWork(lanes))
+                  : ((workInProgressSuspendedReason = NotSuspended),
+                    (workInProgressThrownValue = null),
+                    throwAndUnwindWorkLoop(
+                      root,
+                      lanes,
+                      memoizedUpdaters,
+                      SuspendedAndReadyToContinue
+                    ));
+                break;
+              case SuspendedOnInstanceAndReadyToContinue:
+                var resource = null;
+                switch (workInProgress.tag) {
+                  case 26:
+                    resource = workInProgress.memoizedState;
+                  case 5:
+                  case 27:
+                    var hostFiber = workInProgress;
+                    if (resource ? preloadResource(resource) : 1) {
+                      workInProgressSuspendedReason = NotSuspended;
+                      workInProgressThrownValue = null;
+                      var sibling = hostFiber.sibling;
+                      if (null !== sibling) workInProgress = sibling;
+                      else {
+                        var returnFiber = hostFiber.return;
+                        null !== returnFiber
+                          ? ((workInProgress = returnFiber),
+                            completeUnitOfWork(returnFiber))
+                          : (workInProgress = null);
+                      }
+                      break b;
+                    }
+                    break;
+                  default:
+                    console.error(
+                      "Unexpected type of fiber triggered a suspensey commit. This is a bug in React."
+                    );
+                }
+                workInProgressSuspendedReason = NotSuspended;
+                workInProgressThrownValue = null;
+                throwAndUnwindWorkLoop(
+                  root,
+                  lanes,
+                  memoizedUpdaters,
+                  SuspendedOnInstanceAndReadyToContinue
+                );
+                break;
+              case SuspendedOnDeprecatedThrowPromise:
+                workInProgressSuspendedReason = NotSuspended;
+                workInProgressThrownValue = null;
+                throwAndUnwindWorkLoop(
+                  root,
+                  lanes,
+                  memoizedUpdaters,
+                  SuspendedOnDeprecatedThrowPromise
+                );
+                break;
+              case SuspendedOnHydration:
+                resetWorkInProgressStack();
+                workInProgressRootExitStatus = RootSuspendedAtTheShell;
+                break a;
+              default:
+                throw Error(
+                  "Unexpected SuspendedReason. This is a bug in React."
+                );
+            }
+          null !== ReactSharedInternals.actQueue
+            ? workLoopSync()
+            : workLoopConcurrentByScheduler();
+          break;
+        } catch (thrownValue$9) {
+          handleThrow(root, thrownValue$9);
+        }
+      while (1);
+      resetContextDependencies();
+      ReactSharedInternals.H = prevDispatcher;
+      ReactSharedInternals.A = prevAsyncDispatcher;
+      executionContext = prevExecutionContext;
+      if (null !== workInProgress)
+        return (
+          null !== injectedProfilingHooks &&
+            "function" === typeof injectedProfilingHooks.markRenderYielded &&
+            injectedProfilingHooks.markRenderYielded(),
+          RootInProgress
+        );
+      markRenderStopped();
+      workInProgressRoot = null;
+      workInProgressRootRenderLanes = 0;
+      finishQueueingConcurrentUpdates();
+      return workInProgressRootExitStatus;
+    }
+    function workLoopConcurrentByScheduler() {
+      for (; null !== workInProgress && !shouldYield(); )
+        performUnitOfWork(workInProgress);
+    }
+    function performUnitOfWork(unitOfWork) {
+      var current = unitOfWork.alternate;
+      (unitOfWork.mode & ProfileMode) !== NoMode
+        ? (startProfilerTimer(unitOfWork),
+          (current = runWithFiberInDEV(
+            unitOfWork,
+            beginWork,
+            current,
+            unitOfWork,
+            entangledRenderLanes
+          )),
+          stopProfilerTimerIfRunningAndRecordDuration(unitOfWork))
+        : (current = runWithFiberInDEV(
+            unitOfWork,
+            beginWork,
+            current,
+            unitOfWork,
+            entangledRenderLanes
+          ));
+      unitOfWork.memoizedProps = unitOfWork.pendingProps;
+      null === current
+        ? completeUnitOfWork(unitOfWork)
+        : (workInProgress = current);
+    }
+    function replaySuspendedUnitOfWork(unitOfWork) {
+      var next = runWithFiberInDEV(unitOfWork, replayBeginWork, unitOfWork);
+      unitOfWork.memoizedProps = unitOfWork.pendingProps;
+      null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);
+    }
+    function replayBeginWork(unitOfWork) {
+      var current = unitOfWork.alternate,
+        isProfilingMode = (unitOfWork.mode & ProfileMode) !== NoMode;
+      isProfilingMode && startProfilerTimer(unitOfWork);
+      switch (unitOfWork.tag) {
+        case 15:
+        case 0:
+          current = replayFunctionComponent(
+            current,
+            unitOfWork,
+            unitOfWork.pendingProps,
+            unitOfWork.type,
+            void 0,
+            workInProgressRootRenderLanes
+          );
+          break;
+        case 11:
+          current = replayFunctionComponent(
+            current,
+            unitOfWork,
+            unitOfWork.pendingProps,
+            unitOfWork.type.render,
+            unitOfWork.ref,
+            workInProgressRootRenderLanes
+          );
+          break;
+        case 5:
+          resetHooksOnUnwind(unitOfWork);
+        default:
+          unwindInterruptedWork(current, unitOfWork),
+            (unitOfWork = workInProgress =
+              resetWorkInProgress(unitOfWork, entangledRenderLanes)),
+            (current = beginWork(current, unitOfWork, entangledRenderLanes));
+      }
+      isProfilingMode &&
+        stopProfilerTimerIfRunningAndRecordDuration(unitOfWork);
+      return current;
+    }
+    function throwAndUnwindWorkLoop(
+      root,
+      unitOfWork,
+      thrownValue,
+      suspendedReason
+    ) {
+      resetContextDependencies();
+      resetHooksOnUnwind(unitOfWork);
+      thenableState = null;
+      thenableIndexCounter = 0;
+      var returnFiber = unitOfWork.return;
+      try {
+        if (
+          throwException(
+            root,
+            returnFiber,
+            unitOfWork,
+            thrownValue,
+            workInProgressRootRenderLanes
+          )
+        ) {
+          workInProgressRootExitStatus = RootFatalErrored;
+          logUncaughtError(
+            root,
+            createCapturedValueAtFiber(thrownValue, root.current)
+          );
+          workInProgress = null;
+          return;
+        }
+      } catch (error) {
+        if (null !== returnFiber) throw ((workInProgress = returnFiber), error);
+        workInProgressRootExitStatus = RootFatalErrored;
+        logUncaughtError(
+          root,
+          createCapturedValueAtFiber(thrownValue, root.current)
+        );
+        workInProgress = null;
+        return;
+      }
+      if (unitOfWork.flags & 32768) {
+        if (isHydrating || suspendedReason === SuspendedOnError) root = !0;
+        else if (
+          workInProgressRootIsPrerendering ||
+          0 !== (workInProgressRootRenderLanes & 536870912)
+        )
+          root = !1;
+        else if (
+          ((workInProgressRootDidSkipSuspendedSiblings = root = !0),
+          suspendedReason === SuspendedOnData ||
+            suspendedReason === SuspendedOnAction ||
+            suspendedReason === SuspendedOnImmediate ||
+            suspendedReason === SuspendedOnDeprecatedThrowPromise)
+        )
+          (suspendedReason = suspenseHandlerStackCursor.current),
+            null !== suspendedReason &&
+              13 === suspendedReason.tag &&
+              (suspendedReason.flags |= 16384);
+        unwindUnitOfWork(unitOfWork, root);
+      } else completeUnitOfWork(unitOfWork);
+    }
+    function completeUnitOfWork(unitOfWork) {
+      var completedWork = unitOfWork;
+      do {
+        if (0 !== (completedWork.flags & 32768)) {
+          unwindUnitOfWork(
+            completedWork,
+            workInProgressRootDidSkipSuspendedSiblings
+          );
+          return;
+        }
+        var current = completedWork.alternate;
+        unitOfWork = completedWork.return;
+        startProfilerTimer(completedWork);
+        current = runWithFiberInDEV(
+          completedWork,
+          completeWork,
+          current,
+          completedWork,
+          entangledRenderLanes
+        );
+        (completedWork.mode & ProfileMode) !== NoMode &&
+          stopProfilerTimerIfRunningAndRecordIncompleteDuration(completedWork);
+        if (null !== current) {
+          workInProgress = current;
+          return;
+        }
+        completedWork = completedWork.sibling;
+        if (null !== completedWork) {
+          workInProgress = completedWork;
+          return;
+        }
+        workInProgress = completedWork = unitOfWork;
+      } while (null !== completedWork);
+      workInProgressRootExitStatus === RootInProgress &&
+        (workInProgressRootExitStatus = RootCompleted);
+    }
+    function unwindUnitOfWork(unitOfWork, skipSiblings) {
+      do {
+        var next = unwindWork(unitOfWork.alternate, unitOfWork);
+        if (null !== next) {
+          next.flags &= 32767;
+          workInProgress = next;
+          return;
+        }
+        if ((unitOfWork.mode & ProfileMode) !== NoMode) {
+          stopProfilerTimerIfRunningAndRecordIncompleteDuration(unitOfWork);
+          next = unitOfWork.actualDuration;
+          for (var child = unitOfWork.child; null !== child; )
+            (next += child.actualDuration), (child = child.sibling);
+          unitOfWork.actualDuration = next;
+        }
+        next = unitOfWork.return;
+        null !== next &&
+          ((next.flags |= 32768),
+          (next.subtreeFlags = 0),
+          (next.deletions = null));
+        if (
+          !skipSiblings &&
+          ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)
+        ) {
+          workInProgress = unitOfWork;
+          return;
+        }
+        workInProgress = unitOfWork = next;
+      } while (null !== unitOfWork);
+      workInProgressRootExitStatus = RootSuspendedAtTheShell;
+      workInProgress = null;
+    }
+    function commitRoot(
+      root,
+      finishedWork,
+      lanes,
+      recoverableErrors,
+      transitions,
+      didIncludeRenderPhaseUpdate,
+      spawnedLane,
+      updatedLanes,
+      suspendedRetryLanes
+    ) {
+      root.cancelPendingCommit = null;
+      do flushPendingEffects();
+      while (pendingEffectsStatus !== NO_PENDING_EFFECTS);
+      ReactStrictModeWarnings.flushLegacyContextWarning();
+      ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();
+      if ((executionContext & (RenderContext | CommitContext)) !== NoContext)
+        throw Error("Should not already be working.");
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markCommitStarted &&
+        injectedProfilingHooks.markCommitStarted(lanes);
+      if (null === finishedWork) markCommitStopped();
+      else {
+        0 === lanes &&
+          console.error(
+            "finishedLanes should not be empty during a commit. This is a bug in React."
+          );
+        if (finishedWork === root.current)
+          throw Error(
+            "Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue."
+          );
+        didIncludeRenderPhaseUpdate =
+          finishedWork.lanes | finishedWork.childLanes;
+        didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;
+        markRootFinished(
+          root,
+          lanes,
+          didIncludeRenderPhaseUpdate,
+          spawnedLane,
+          updatedLanes,
+          suspendedRetryLanes
+        );
+        root === workInProgressRoot &&
+          ((workInProgress = workInProgressRoot = null),
+          (workInProgressRootRenderLanes = 0));
+        pendingFinishedWork = finishedWork;
+        pendingEffectsRoot = root;
+        pendingEffectsLanes = lanes;
+        pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;
+        pendingPassiveTransitions = transitions;
+        pendingRecoverableErrors = recoverableErrors;
+        0 !== (finishedWork.subtreeFlags & 10256) ||
+        0 !== (finishedWork.flags & 10256)
+          ? ((root.callbackNode = null),
+            (root.callbackPriority = 0),
+            scheduleCallback$1(NormalPriority$1, function () {
+              flushPassiveEffects(!0);
+              return null;
+            }))
+          : ((root.callbackNode = null), (root.callbackPriority = 0));
+        commitStartTime = now();
+        recoverableErrors = 0 !== (finishedWork.flags & 13878);
+        if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {
+          recoverableErrors = ReactSharedInternals.T;
+          ReactSharedInternals.T = null;
+          transitions = ReactDOMSharedInternals.p;
+          ReactDOMSharedInternals.p = DiscreteEventPriority;
+          spawnedLane = executionContext;
+          executionContext |= CommitContext;
+          try {
+            commitBeforeMutationEffects(root, finishedWork, lanes);
+          } finally {
+            (executionContext = spawnedLane),
+              (ReactDOMSharedInternals.p = transitions),
+              (ReactSharedInternals.T = recoverableErrors);
+          }
+        }
+        pendingEffectsStatus = PENDING_MUTATION_PHASE;
+        flushMutationEffects();
+        flushLayoutEffects();
+        flushSpawnedWork();
+      }
+    }
+    function flushMutationEffects() {
+      if (pendingEffectsStatus === PENDING_MUTATION_PHASE) {
+        pendingEffectsStatus = NO_PENDING_EFFECTS;
+        var root = pendingEffectsRoot,
+          finishedWork = pendingFinishedWork,
+          lanes = pendingEffectsLanes,
+          rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);
+        if (
+          0 !== (finishedWork.subtreeFlags & 13878) ||
+          rootMutationHasEffect
+        ) {
+          rootMutationHasEffect = ReactSharedInternals.T;
+          ReactSharedInternals.T = null;
+          var previousPriority = ReactDOMSharedInternals.p;
+          ReactDOMSharedInternals.p = DiscreteEventPriority;
+          var prevExecutionContext = executionContext;
+          executionContext |= CommitContext;
+          try {
+            inProgressLanes = lanes;
+            inProgressRoot = root;
+            commitMutationEffectsOnFiber(finishedWork, root);
+            inProgressRoot = inProgressLanes = null;
+            lanes = selectionInformation;
+            var curFocusedElem = getActiveElementDeep(root.containerInfo),
+              priorFocusedElem = lanes.focusedElem,
+              priorSelectionRange = lanes.selectionRange;
+            if (
+              curFocusedElem !== priorFocusedElem &&
+              priorFocusedElem &&
+              priorFocusedElem.ownerDocument &&
+              containsNode(
+                priorFocusedElem.ownerDocument.documentElement,
+                priorFocusedElem
+              )
+            ) {
+              if (
+                null !== priorSelectionRange &&
+                hasSelectionCapabilities(priorFocusedElem)
+              ) {
+                var start = priorSelectionRange.start,
+                  end = priorSelectionRange.end;
+                void 0 === end && (end = start);
+                if ("selectionStart" in priorFocusedElem)
+                  (priorFocusedElem.selectionStart = start),
+                    (priorFocusedElem.selectionEnd = Math.min(
+                      end,
+                      priorFocusedElem.value.length
+                    ));
+                else {
+                  var doc = priorFocusedElem.ownerDocument || document,
+                    win = (doc && doc.defaultView) || window;
+                  if (win.getSelection) {
+                    var selection = win.getSelection(),
+                      length = priorFocusedElem.textContent.length,
+                      start$jscomp$0 = Math.min(
+                        priorSelectionRange.start,
+                        length
+                      ),
+                      end$jscomp$0 =
+                        void 0 === priorSelectionRange.end
+                          ? start$jscomp$0
+                          : Math.min(priorSelectionRange.end, length);
+                    !selection.extend &&
+                      start$jscomp$0 > end$jscomp$0 &&
+                      ((curFocusedElem = end$jscomp$0),
+                      (end$jscomp$0 = start$jscomp$0),
+                      (start$jscomp$0 = curFocusedElem));
+                    var startMarker = getNodeForCharacterOffset(
+                        priorFocusedElem,
+                        start$jscomp$0
+                      ),
+                      endMarker = getNodeForCharacterOffset(
+                        priorFocusedElem,
+                        end$jscomp$0
+                      );
+                    if (
+                      startMarker &&
+                      endMarker &&
+                      (1 !== selection.rangeCount ||
+                        selection.anchorNode !== startMarker.node ||
+                        selection.anchorOffset !== startMarker.offset ||
+                        selection.focusNode !== endMarker.node ||
+                        selection.focusOffset !== endMarker.offset)
+                    ) {
+                      var range = doc.createRange();
+                      range.setStart(startMarker.node, startMarker.offset);
+                      selection.removeAllRanges();
+                      start$jscomp$0 > end$jscomp$0
+                        ? (selection.addRange(range),
+                          selection.extend(endMarker.node, endMarker.offset))
+                        : (range.setEnd(endMarker.node, endMarker.offset),
+                          selection.addRange(range));
+                    }
+                  }
+                }
+              }
+              doc = [];
+              for (
+                selection = priorFocusedElem;
+                (selection = selection.parentNode);
+
+              )
+                1 === selection.nodeType &&
+                  doc.push({
+                    element: selection,
+                    left: selection.scrollLeft,
+                    top: selection.scrollTop
+                  });
+              "function" === typeof priorFocusedElem.focus &&
+                priorFocusedElem.focus();
+              for (
+                priorFocusedElem = 0;
+                priorFocusedElem < doc.length;
+                priorFocusedElem++
+              ) {
+                var info = doc[priorFocusedElem];
+                info.element.scrollLeft = info.left;
+                info.element.scrollTop = info.top;
+              }
+            }
+            _enabled = !!eventsEnabled;
+            selectionInformation = eventsEnabled = null;
+          } finally {
+            (executionContext = prevExecutionContext),
+              (ReactDOMSharedInternals.p = previousPriority),
+              (ReactSharedInternals.T = rootMutationHasEffect);
+          }
+        }
+        root.current = finishedWork;
+        pendingEffectsStatus = PENDING_LAYOUT_PHASE;
+      }
+    }
+    function flushLayoutEffects() {
+      if (pendingEffectsStatus === PENDING_LAYOUT_PHASE) {
+        pendingEffectsStatus = NO_PENDING_EFFECTS;
+        var root = pendingEffectsRoot,
+          finishedWork = pendingFinishedWork,
+          lanes = pendingEffectsLanes,
+          rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);
+        if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {
+          rootHasLayoutEffect = ReactSharedInternals.T;
+          ReactSharedInternals.T = null;
+          var previousPriority = ReactDOMSharedInternals.p;
+          ReactDOMSharedInternals.p = DiscreteEventPriority;
+          var prevExecutionContext = executionContext;
+          executionContext |= CommitContext;
+          try {
+            null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markLayoutEffectsStarted &&
+              injectedProfilingHooks.markLayoutEffectsStarted(lanes),
+              (inProgressLanes = lanes),
+              (inProgressRoot = root),
+              commitLayoutEffectOnFiber(
+                root,
+                finishedWork.alternate,
+                finishedWork
+              ),
+              (inProgressRoot = inProgressLanes = null),
+              null !== injectedProfilingHooks &&
+                "function" ===
+                  typeof injectedProfilingHooks.markLayoutEffectsStopped &&
+                injectedProfilingHooks.markLayoutEffectsStopped();
+          } finally {
+            (executionContext = prevExecutionContext),
+              (ReactDOMSharedInternals.p = previousPriority),
+              (ReactSharedInternals.T = rootHasLayoutEffect);
+          }
+        }
+        pendingEffectsStatus = PENDING_AFTER_MUTATION_PHASE;
+      }
+    }
+    function flushSpawnedWork() {
+      if (
+        pendingEffectsStatus === PENDING_SPAWNED_WORK ||
+        pendingEffectsStatus === PENDING_AFTER_MUTATION_PHASE
+      ) {
+        pendingEffectsStatus = NO_PENDING_EFFECTS;
+        requestPaint();
+        var root = pendingEffectsRoot,
+          finishedWork = pendingFinishedWork,
+          lanes = pendingEffectsLanes,
+          recoverableErrors = pendingRecoverableErrors,
+          rootDidHavePassiveEffects =
+            0 !== (finishedWork.subtreeFlags & 10256) ||
+            0 !== (finishedWork.flags & 10256);
+        rootDidHavePassiveEffects
+          ? (pendingEffectsStatus = PENDING_PASSIVE_PHASE)
+          : ((pendingEffectsStatus = NO_PENDING_EFFECTS),
+            (pendingFinishedWork = pendingEffectsRoot = null),
+            releaseRootPooledCache(root, root.pendingLanes),
+            (nestedPassiveUpdateCount = 0),
+            (rootWithPassiveNestedUpdates = null));
+        var remainingLanes = root.pendingLanes;
+        0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);
+        rootDidHavePassiveEffects || commitDoubleInvokeEffectsInDEV(root);
+        rootDidHavePassiveEffects = lanesToEventPriority(lanes);
+        finishedWork = finishedWork.stateNode;
+        if (
+          injectedHook &&
+          "function" === typeof injectedHook.onCommitFiberRoot
+        )
+          try {
+            var didError = 128 === (finishedWork.current.flags & 128);
+            switch (rootDidHavePassiveEffects) {
+              case DiscreteEventPriority:
+                var schedulerPriority = ImmediatePriority;
+                break;
+              case ContinuousEventPriority:
+                schedulerPriority = UserBlockingPriority;
+                break;
+              case DefaultEventPriority:
+                schedulerPriority = NormalPriority$1;
+                break;
+              case IdleEventPriority:
+                schedulerPriority = IdlePriority;
+                break;
+              default:
+                schedulerPriority = NormalPriority$1;
+            }
+            injectedHook.onCommitFiberRoot(
+              rendererID,
+              finishedWork,
+              schedulerPriority,
+              didError
+            );
+          } catch (err) {
+            hasLoggedError ||
+              ((hasLoggedError = !0),
+              console.error(
+                "React instrumentation encountered an error: %s",
+                err
+              ));
+          }
+        isDevToolsPresent && root.memoizedUpdaters.clear();
+        onCommitRoot();
+        if (null !== recoverableErrors) {
+          didError = ReactSharedInternals.T;
+          schedulerPriority = ReactDOMSharedInternals.p;
+          ReactDOMSharedInternals.p = DiscreteEventPriority;
+          ReactSharedInternals.T = null;
+          try {
+            var onRecoverableError = root.onRecoverableError;
+            for (
+              finishedWork = 0;
+              finishedWork < recoverableErrors.length;
+              finishedWork++
+            ) {
+              var recoverableError = recoverableErrors[finishedWork],
+                errorInfo = makeErrorInfo(recoverableError.stack);
+              runWithFiberInDEV(
+                recoverableError.source,
+                onRecoverableError,
+                recoverableError.value,
+                errorInfo
+              );
+            }
+          } finally {
+            (ReactSharedInternals.T = didError),
+              (ReactDOMSharedInternals.p = schedulerPriority);
+          }
+        }
+        0 !== (pendingEffectsLanes & 3) && flushPendingEffects();
+        ensureRootIsScheduled(root);
+        remainingLanes = root.pendingLanes;
+        0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)
+          ? ((nestedUpdateScheduled = !0),
+            root === rootWithNestedUpdates
+              ? nestedUpdateCount++
+              : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root)))
+          : (nestedUpdateCount = 0);
+        flushSyncWorkAcrossRoots_impl(0, !1);
+        markCommitStopped();
+      }
+    }
+    function makeErrorInfo(componentStack) {
+      componentStack = { componentStack: componentStack };
+      Object.defineProperty(componentStack, "digest", {
+        get: function () {
+          console.error(
+            'You are accessing "digest" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.'
+          );
+        }
+      });
+      return componentStack;
+    }
+    function releaseRootPooledCache(root, remainingLanes) {
+      0 === (root.pooledCacheLanes &= remainingLanes) &&
+        ((remainingLanes = root.pooledCache),
+        null != remainingLanes &&
+          ((root.pooledCache = null), releaseCache(remainingLanes)));
+    }
+    function flushPendingEffects(wasDelayedCommit) {
+      flushMutationEffects();
+      flushLayoutEffects();
+      flushSpawnedWork();
+      return flushPassiveEffects(wasDelayedCommit);
+    }
+    function flushPassiveEffects() {
+      if (pendingEffectsStatus !== PENDING_PASSIVE_PHASE) return !1;
+      var root = pendingEffectsRoot,
+        remainingLanes = pendingEffectsRemainingLanes;
+      pendingEffectsRemainingLanes = 0;
+      var renderPriority = lanesToEventPriority(pendingEffectsLanes),
+        priority =
+          0 === DefaultEventPriority || DefaultEventPriority > renderPriority
+            ? DefaultEventPriority
+            : renderPriority;
+      renderPriority = ReactSharedInternals.T;
+      var previousPriority = ReactDOMSharedInternals.p;
+      try {
+        ReactDOMSharedInternals.p = priority;
+        ReactSharedInternals.T = null;
+        priority = pendingPassiveTransitions;
+        pendingPassiveTransitions = null;
+        var root$jscomp$0 = pendingEffectsRoot,
+          lanes = pendingEffectsLanes;
+        pendingEffectsStatus = NO_PENDING_EFFECTS;
+        pendingFinishedWork = pendingEffectsRoot = null;
+        pendingEffectsLanes = 0;
+        if ((executionContext & (RenderContext | CommitContext)) !== NoContext)
+          throw Error("Cannot flush passive effects while already rendering.");
+        isFlushingPassiveEffects = !0;
+        didScheduleUpdateDuringPassiveEffects = !1;
+        null !== injectedProfilingHooks &&
+          "function" ===
+            typeof injectedProfilingHooks.markPassiveEffectsStarted &&
+          injectedProfilingHooks.markPassiveEffectsStarted(lanes);
+        var prevExecutionContext = executionContext;
+        executionContext |= CommitContext;
+        commitPassiveUnmountOnFiber(root$jscomp$0.current);
+        commitPassiveMountOnFiber(
+          root$jscomp$0,
+          root$jscomp$0.current,
+          lanes,
+          priority
+        );
+        null !== injectedProfilingHooks &&
+          "function" ===
+            typeof injectedProfilingHooks.markPassiveEffectsStopped &&
+          injectedProfilingHooks.markPassiveEffectsStopped();
+        commitDoubleInvokeEffectsInDEV(root$jscomp$0);
+        executionContext = prevExecutionContext;
+        flushSyncWorkAcrossRoots_impl(0, !1);
+        didScheduleUpdateDuringPassiveEffects
+          ? root$jscomp$0 === rootWithPassiveNestedUpdates
+            ? nestedPassiveUpdateCount++
+            : ((nestedPassiveUpdateCount = 0),
+              (rootWithPassiveNestedUpdates = root$jscomp$0))
+          : (nestedPassiveUpdateCount = 0);
+        didScheduleUpdateDuringPassiveEffects = isFlushingPassiveEffects = !1;
+        if (
+          injectedHook &&
+          "function" === typeof injectedHook.onPostCommitFiberRoot
+        )
+          try {
+            injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);
+          } catch (err) {
+            hasLoggedError ||
+              ((hasLoggedError = !0),
+              console.error(
+                "React instrumentation encountered an error: %s",
+                err
+              ));
+          }
+        var stateNode = root$jscomp$0.current.stateNode;
+        stateNode.effectDuration = 0;
+        stateNode.passiveEffectDuration = 0;
+        return !0;
+      } finally {
+        (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = renderPriority),
+          releaseRootPooledCache(root, remainingLanes);
+      }
+    }
+    function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {
+      sourceFiber = createCapturedValueAtFiber(error, sourceFiber);
+      sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);
+      rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);
+      null !== rootFiber &&
+        (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));
+    }
+    function captureCommitPhaseError(
+      sourceFiber,
+      nearestMountedAncestor,
+      error
+    ) {
+      isRunningInsertionEffect = !1;
+      if (3 === sourceFiber.tag)
+        captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);
+      else {
+        for (; null !== nearestMountedAncestor; ) {
+          if (3 === nearestMountedAncestor.tag) {
+            captureCommitPhaseErrorOnRoot(
+              nearestMountedAncestor,
+              sourceFiber,
+              error
+            );
+            return;
+          }
+          if (1 === nearestMountedAncestor.tag) {
+            var instance = nearestMountedAncestor.stateNode;
+            if (
+              "function" ===
+                typeof nearestMountedAncestor.type.getDerivedStateFromError ||
+              ("function" === typeof instance.componentDidCatch &&
+                (null === legacyErrorBoundariesThatAlreadyFailed ||
+                  !legacyErrorBoundariesThatAlreadyFailed.has(instance)))
+            ) {
+              sourceFiber = createCapturedValueAtFiber(error, sourceFiber);
+              error = createClassErrorUpdate(2);
+              instance = enqueueUpdate(nearestMountedAncestor, error, 2);
+              null !== instance &&
+                (initializeClassErrorUpdate(
+                  error,
+                  instance,
+                  nearestMountedAncestor,
+                  sourceFiber
+                ),
+                markRootUpdated$1(instance, 2),
+                ensureRootIsScheduled(instance));
+              return;
+            }
+          }
+          nearestMountedAncestor = nearestMountedAncestor.return;
+        }
+        console.error(
+          "Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.\n\nError message:\n\n%s",
+          error
+        );
+      }
+    }
+    function attachPingListener(root, wakeable, lanes) {
+      var pingCache = root.pingCache;
+      if (null === pingCache) {
+        pingCache = root.pingCache = new PossiblyWeakMap();
+        var threadIDs = new Set();
+        pingCache.set(wakeable, threadIDs);
+      } else
+        (threadIDs = pingCache.get(wakeable)),
+          void 0 === threadIDs &&
+            ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));
+      threadIDs.has(lanes) ||
+        ((workInProgressRootDidAttachPingListener = !0),
+        threadIDs.add(lanes),
+        (pingCache = pingSuspendedRoot.bind(null, root, wakeable, lanes)),
+        isDevToolsPresent && restorePendingUpdaters(root, lanes),
+        wakeable.then(pingCache, pingCache));
+    }
+    function pingSuspendedRoot(root, wakeable, pingedLanes) {
+      var pingCache = root.pingCache;
+      null !== pingCache && pingCache.delete(wakeable);
+      root.pingedLanes |= root.suspendedLanes & pingedLanes;
+      root.warmLanes &= ~pingedLanes;
+      isConcurrentActEnvironment() &&
+        null === ReactSharedInternals.actQueue &&
+        console.error(
+          "A suspended resource finished loading inside a test, but the event was not wrapped in act(...).\n\nWhen testing, code that resolves suspended data should be wrapped into act(...):\n\nact(() => {\n  /* finish loading suspended data */\n});\n/* assert on the output */\n\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act"
+        );
+      workInProgressRoot === root &&
+        (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&
+        (workInProgressRootExitStatus === RootSuspendedWithDelay ||
+        (workInProgressRootExitStatus === RootSuspended &&
+          (workInProgressRootRenderLanes & 62914560) ===
+            workInProgressRootRenderLanes &&
+          now$1() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS)
+          ? (executionContext & RenderContext) === NoContext &&
+            prepareFreshStack(root, 0)
+          : (workInProgressRootPingedLanes |= pingedLanes),
+        workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&
+          (workInProgressSuspendedRetryLanes = 0));
+      ensureRootIsScheduled(root);
+    }
+    function retryTimedOutBoundary(boundaryFiber, retryLane) {
+      0 === retryLane && (retryLane = claimNextRetryLane());
+      boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);
+      null !== boundaryFiber &&
+        (markRootUpdated$1(boundaryFiber, retryLane),
+        ensureRootIsScheduled(boundaryFiber));
+    }
+    function retryDehydratedSuspenseBoundary(boundaryFiber) {
+      var suspenseState = boundaryFiber.memoizedState,
+        retryLane = 0;
+      null !== suspenseState && (retryLane = suspenseState.retryLane);
+      retryTimedOutBoundary(boundaryFiber, retryLane);
+    }
+    function resolveRetryWakeable(boundaryFiber, wakeable) {
+      var retryLane = 0;
+      switch (boundaryFiber.tag) {
+        case 13:
+          var retryCache = boundaryFiber.stateNode;
+          var suspenseState = boundaryFiber.memoizedState;
+          null !== suspenseState && (retryLane = suspenseState.retryLane);
+          break;
+        case 19:
+          retryCache = boundaryFiber.stateNode;
+          break;
+        case 22:
+          retryCache = boundaryFiber.stateNode._retryCache;
+          break;
+        default:
+          throw Error(
+            "Pinged unknown suspense boundary type. This is probably a bug in React."
+          );
+      }
+      null !== retryCache && retryCache.delete(wakeable);
+      retryTimedOutBoundary(boundaryFiber, retryLane);
+    }
+    function recursivelyTraverseAndDoubleInvokeEffectsInDEV(
+      root$jscomp$0,
+      parentFiber,
+      isInStrictMode
+    ) {
+      if (0 !== (parentFiber.subtreeFlags & 67117056))
+        for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+          var root = root$jscomp$0,
+            fiber = parentFiber,
+            isStrictModeFiber = fiber.type === REACT_STRICT_MODE_TYPE;
+          isStrictModeFiber = isInStrictMode || isStrictModeFiber;
+          22 !== fiber.tag
+            ? fiber.flags & 67108864
+              ? isStrictModeFiber &&
+                runWithFiberInDEV(
+                  fiber,
+                  doubleInvokeEffectsOnFiber,
+                  root,
+                  fiber,
+                  (fiber.mode & NoStrictPassiveEffectsMode) === NoMode
+                )
+              : recursivelyTraverseAndDoubleInvokeEffectsInDEV(
+                  root,
+                  fiber,
+                  isStrictModeFiber
+                )
+            : null === fiber.memoizedState &&
+              (isStrictModeFiber && fiber.flags & 8192
+                ? runWithFiberInDEV(
+                    fiber,
+                    doubleInvokeEffectsOnFiber,
+                    root,
+                    fiber
+                  )
+                : fiber.subtreeFlags & 67108864 &&
+                  runWithFiberInDEV(
+                    fiber,
+                    recursivelyTraverseAndDoubleInvokeEffectsInDEV,
+                    root,
+                    fiber,
+                    isStrictModeFiber
+                  ));
+          parentFiber = parentFiber.sibling;
+        }
+    }
+    function doubleInvokeEffectsOnFiber(root, fiber) {
+      var shouldDoubleInvokePassiveEffects =
+        2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : !0;
+      setIsStrictModeForDevtools(!0);
+      try {
+        disappearLayoutEffects(fiber),
+          shouldDoubleInvokePassiveEffects && disconnectPassiveEffect(fiber),
+          reappearLayoutEffects(root, fiber.alternate, fiber, !1),
+          shouldDoubleInvokePassiveEffects &&
+            reconnectPassiveEffects(root, fiber, 0, null, !1, 0);
+      } finally {
+        setIsStrictModeForDevtools(!1);
+      }
+    }
+    function commitDoubleInvokeEffectsInDEV(root) {
+      var doubleInvokeEffects = !0;
+      root.current.mode & (StrictLegacyMode | StrictEffectsMode) ||
+        (doubleInvokeEffects = !1);
+      recursivelyTraverseAndDoubleInvokeEffectsInDEV(
+        root,
+        root.current,
+        doubleInvokeEffects
+      );
+    }
+    function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {
+      if ((executionContext & RenderContext) === NoContext) {
+        var tag = fiber.tag;
+        if (
+          3 === tag ||
+          1 === tag ||
+          0 === tag ||
+          11 === tag ||
+          14 === tag ||
+          15 === tag
+        ) {
+          tag = getComponentNameFromFiber(fiber) || "ReactComponent";
+          if (null !== didWarnStateUpdateForNotYetMountedComponent) {
+            if (didWarnStateUpdateForNotYetMountedComponent.has(tag)) return;
+            didWarnStateUpdateForNotYetMountedComponent.add(tag);
+          } else didWarnStateUpdateForNotYetMountedComponent = new Set([tag]);
+          runWithFiberInDEV(fiber, function () {
+            console.error(
+              "Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously later calls tries to update the component. Move this work to useEffect instead."
+            );
+          });
+        }
+      }
+    }
+    function restorePendingUpdaters(root, lanes) {
+      isDevToolsPresent &&
+        root.memoizedUpdaters.forEach(function (schedulingFiber) {
+          addFiberToLanesMap(root, schedulingFiber, lanes);
+        });
+    }
+    function scheduleCallback$1(priorityLevel, callback) {
+      var actQueue = ReactSharedInternals.actQueue;
+      return null !== actQueue
+        ? (actQueue.push(callback), fakeActCallbackNode$1)
+        : scheduleCallback$3(priorityLevel, callback);
+    }
+    function warnIfUpdatesNotWrappedWithActDEV(fiber) {
+      isConcurrentActEnvironment() &&
+        null === ReactSharedInternals.actQueue &&
+        runWithFiberInDEV(fiber, function () {
+          console.error(
+            "An update to %s inside a test was not wrapped in act(...).\n\nWhen testing, code that causes React state updates should be wrapped into act(...):\n\nact(() => {\n  /* fire events that update state */\n});\n/* assert on the output */\n\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act",
+            getComponentNameFromFiber(fiber)
+          );
+        });
+    }
+    function ensureRootIsScheduled(root) {
+      root !== lastScheduledRoot &&
+        null === root.next &&
+        (null === lastScheduledRoot
+          ? (firstScheduledRoot = lastScheduledRoot = root)
+          : (lastScheduledRoot = lastScheduledRoot.next = root));
+      mightHavePendingSyncWork = !0;
+      null !== ReactSharedInternals.actQueue
+        ? didScheduleMicrotask_act ||
+          ((didScheduleMicrotask_act = !0), scheduleImmediateRootScheduleTask())
+        : didScheduleMicrotask ||
+          ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());
+    }
+    function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {
+      if (!isFlushingWork && mightHavePendingSyncWork) {
+        isFlushingWork = !0;
+        do {
+          var didPerformSomeWork = !1;
+          for (var root = firstScheduledRoot; null !== root; ) {
+            if (!onlyLegacy)
+              if (0 !== syncTransitionLanes) {
+                var pendingLanes = root.pendingLanes;
+                if (0 === pendingLanes) var nextLanes = 0;
+                else {
+                  var suspendedLanes = root.suspendedLanes,
+                    pingedLanes = root.pingedLanes;
+                  nextLanes =
+                    (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;
+                  nextLanes &= pendingLanes & ~(suspendedLanes & ~pingedLanes);
+                  nextLanes =
+                    nextLanes & 201326741
+                      ? (nextLanes & 201326741) | 1
+                      : nextLanes
+                        ? nextLanes | 2
+                        : 0;
+                }
+                0 !== nextLanes &&
+                  ((didPerformSomeWork = !0),
+                  performSyncWorkOnRoot(root, nextLanes));
+              } else
+                (nextLanes = workInProgressRootRenderLanes),
+                  (nextLanes = getNextLanes(
+                    root,
+                    root === workInProgressRoot ? nextLanes : 0,
+                    null !== root.cancelPendingCommit ||
+                      root.timeoutHandle !== noTimeout
+                  )),
+                  0 === (nextLanes & 3) ||
+                    checkIfRootIsPrerendering(root, nextLanes) ||
+                    ((didPerformSomeWork = !0),
+                    performSyncWorkOnRoot(root, nextLanes));
+            root = root.next;
+          }
+        } while (didPerformSomeWork);
+        isFlushingWork = !1;
+      }
+    }
+    function processRootScheduleInImmediateTask() {
+      processRootScheduleInMicrotask();
+    }
+    function processRootScheduleInMicrotask() {
+      mightHavePendingSyncWork =
+        didScheduleMicrotask_act =
+        didScheduleMicrotask =
+          !1;
+      var syncTransitionLanes = 0;
+      0 !== currentEventTransitionLane &&
+        (shouldAttemptEagerTransition() &&
+          (syncTransitionLanes = currentEventTransitionLane),
+        (currentEventTransitionLane = 0));
+      for (
+        var currentTime = now$1(), prev = null, root = firstScheduledRoot;
+        null !== root;
+
+      ) {
+        var next = root.next,
+          nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);
+        if (0 === nextLanes)
+          (root.next = null),
+            null === prev ? (firstScheduledRoot = next) : (prev.next = next),
+            null === next && (lastScheduledRoot = prev);
+        else if (
+          ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))
+        )
+          mightHavePendingSyncWork = !0;
+        root = next;
+      }
+      flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);
+    }
+    function scheduleTaskForRootDuringMicrotask(root, currentTime) {
+      for (
+        var suspendedLanes = root.suspendedLanes,
+          pingedLanes = root.pingedLanes,
+          expirationTimes = root.expirationTimes,
+          lanes = root.pendingLanes & -62914561;
+        0 < lanes;
+
+      ) {
+        var index = 31 - clz32(lanes),
+          lane = 1 << index,
+          expirationTime = expirationTimes[index];
+        if (-1 === expirationTime) {
+          if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))
+            expirationTimes[index] = computeExpirationTime(lane, currentTime);
+        } else expirationTime <= currentTime && (root.expiredLanes |= lane);
+        lanes &= ~lane;
+      }
+      currentTime = workInProgressRoot;
+      suspendedLanes = workInProgressRootRenderLanes;
+      suspendedLanes = getNextLanes(
+        root,
+        root === currentTime ? suspendedLanes : 0,
+        null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout
+      );
+      pingedLanes = root.callbackNode;
+      if (
+        0 === suspendedLanes ||
+        (root === currentTime &&
+          (workInProgressSuspendedReason === SuspendedOnData ||
+            workInProgressSuspendedReason === SuspendedOnAction)) ||
+        null !== root.cancelPendingCommit
+      )
+        return (
+          null !== pingedLanes && cancelCallback(pingedLanes),
+          (root.callbackNode = null),
+          (root.callbackPriority = 0)
+        );
+      if (
+        0 === (suspendedLanes & 3) ||
+        checkIfRootIsPrerendering(root, suspendedLanes)
+      ) {
+        currentTime = suspendedLanes & -suspendedLanes;
+        if (
+          currentTime !== root.callbackPriority ||
+          (null !== ReactSharedInternals.actQueue &&
+            pingedLanes !== fakeActCallbackNode)
+        )
+          cancelCallback(pingedLanes);
+        else return currentTime;
+        switch (lanesToEventPriority(suspendedLanes)) {
+          case DiscreteEventPriority:
+          case ContinuousEventPriority:
+            suspendedLanes = UserBlockingPriority;
+            break;
+          case DefaultEventPriority:
+            suspendedLanes = NormalPriority$1;
+            break;
+          case IdleEventPriority:
+            suspendedLanes = IdlePriority;
+            break;
+          default:
+            suspendedLanes = NormalPriority$1;
+        }
+        pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);
+        null !== ReactSharedInternals.actQueue
+          ? (ReactSharedInternals.actQueue.push(pingedLanes),
+            (suspendedLanes = fakeActCallbackNode))
+          : (suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes));
+        root.callbackPriority = currentTime;
+        root.callbackNode = suspendedLanes;
+        return currentTime;
+      }
+      null !== pingedLanes && cancelCallback(pingedLanes);
+      root.callbackPriority = 2;
+      root.callbackNode = null;
+      return 2;
+    }
+    function performWorkOnRootViaSchedulerTask(root, didTimeout) {
+      nestedUpdateScheduled = currentUpdateIsNested = !1;
+      if (
+        pendingEffectsStatus !== NO_PENDING_EFFECTS &&
+        pendingEffectsStatus !== PENDING_PASSIVE_PHASE
+      )
+        return (root.callbackNode = null), (root.callbackPriority = 0), null;
+      var originalCallbackNode = root.callbackNode;
+      if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)
+        return null;
+      var workInProgressRootRenderLanes$jscomp$0 =
+        workInProgressRootRenderLanes;
+      workInProgressRootRenderLanes$jscomp$0 = getNextLanes(
+        root,
+        root === workInProgressRoot
+          ? workInProgressRootRenderLanes$jscomp$0
+          : 0,
+        null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout
+      );
+      if (0 === workInProgressRootRenderLanes$jscomp$0) return null;
+      performWorkOnRoot(
+        root,
+        workInProgressRootRenderLanes$jscomp$0,
+        didTimeout
+      );
+      scheduleTaskForRootDuringMicrotask(root, now$1());
+      return null != root.callbackNode &&
+        root.callbackNode === originalCallbackNode
+        ? performWorkOnRootViaSchedulerTask.bind(null, root)
+        : null;
+    }
+    function performSyncWorkOnRoot(root, lanes) {
+      if (flushPendingEffects()) return null;
+      currentUpdateIsNested = nestedUpdateScheduled;
+      nestedUpdateScheduled = !1;
+      performWorkOnRoot(root, lanes, !0);
+    }
+    function cancelCallback(callbackNode) {
+      callbackNode !== fakeActCallbackNode &&
+        null !== callbackNode &&
+        cancelCallback$1(callbackNode);
+    }
+    function scheduleImmediateRootScheduleTask() {
+      null !== ReactSharedInternals.actQueue &&
+        ReactSharedInternals.actQueue.push(function () {
+          processRootScheduleInMicrotask();
+          return null;
+        });
+      scheduleMicrotask(function () {
+        (executionContext & (RenderContext | CommitContext)) !== NoContext
+          ? scheduleCallback$3(
+              ImmediatePriority,
+              processRootScheduleInImmediateTask
+            )
+          : processRootScheduleInMicrotask();
+      });
+    }
+    function requestTransitionLane() {
+      0 === currentEventTransitionLane &&
+        (currentEventTransitionLane = claimNextTransitionLane());
+      return currentEventTransitionLane;
+    }
+    function coerceFormActionProp(actionProp) {
+      if (
+        null == actionProp ||
+        "symbol" === typeof actionProp ||
+        "boolean" === typeof actionProp
+      )
+        return null;
+      if ("function" === typeof actionProp) return actionProp;
+      checkAttributeStringCoercion(actionProp, "action");
+      return sanitizeURL("" + actionProp);
+    }
+    function createFormDataWithSubmitter(form, submitter) {
+      var temp = submitter.ownerDocument.createElement("input");
+      temp.name = submitter.name;
+      temp.value = submitter.value;
+      form.id && temp.setAttribute("form", form.id);
+      submitter.parentNode.insertBefore(temp, submitter);
+      form = new FormData(form);
+      temp.parentNode.removeChild(temp);
+      return form;
+    }
+    function extractEvents$1(
+      dispatchQueue,
+      domEventName,
+      maybeTargetInst,
+      nativeEvent,
+      nativeEventTarget
+    ) {
+      if (
+        "submit" === domEventName &&
+        maybeTargetInst &&
+        maybeTargetInst.stateNode === nativeEventTarget
+      ) {
+        var action = coerceFormActionProp(
+            (nativeEventTarget[internalPropsKey] || null).action
+          ),
+          submitter = nativeEvent.submitter;
+        submitter &&
+          ((domEventName = (domEventName = submitter[internalPropsKey] || null)
+            ? coerceFormActionProp(domEventName.formAction)
+            : submitter.getAttribute("formAction")),
+          null !== domEventName &&
+            ((action = domEventName), (submitter = null)));
+        var event = new SyntheticEvent(
+          "action",
+          "action",
+          null,
+          nativeEvent,
+          nativeEventTarget
+        );
+        dispatchQueue.push({
+          event: event,
+          listeners: [
+            {
+              instance: null,
+              listener: function () {
+                if (nativeEvent.defaultPrevented) {
+                  if (0 !== currentEventTransitionLane) {
+                    var formData = submitter
+                        ? createFormDataWithSubmitter(
+                            nativeEventTarget,
+                            submitter
+                          )
+                        : new FormData(nativeEventTarget),
+                      pendingState = {
+                        pending: !0,
+                        data: formData,
+                        method: nativeEventTarget.method,
+                        action: action
+                      };
+                    Object.freeze(pendingState);
+                    startHostTransition(
+                      maybeTargetInst,
+                      pendingState,
+                      null,
+                      formData
+                    );
+                  }
+                } else
+                  "function" === typeof action &&
+                    (event.preventDefault(),
+                    (formData = submitter
+                      ? createFormDataWithSubmitter(
+                          nativeEventTarget,
+                          submitter
+                        )
+                      : new FormData(nativeEventTarget)),
+                    (pendingState = {
+                      pending: !0,
+                      data: formData,
+                      method: nativeEventTarget.method,
+                      action: action
+                    }),
+                    Object.freeze(pendingState),
+                    startHostTransition(
+                      maybeTargetInst,
+                      pendingState,
+                      action,
+                      formData
+                    ));
+              },
+              currentTarget: nativeEventTarget
+            }
+          ]
+        });
+      }
+    }
+    function executeDispatch(event, listener, currentTarget) {
+      event.currentTarget = currentTarget;
+      try {
+        listener(event);
+      } catch (error) {
+        reportGlobalError(error);
+      }
+      event.currentTarget = null;
+    }
+    function processDispatchQueue(dispatchQueue, eventSystemFlags) {
+      eventSystemFlags = 0 !== (eventSystemFlags & 4);
+      for (var i = 0; i < dispatchQueue.length; i++) {
+        var _dispatchQueue$i = dispatchQueue[i];
+        a: {
+          var previousInstance = void 0,
+            event = _dispatchQueue$i.event;
+          _dispatchQueue$i = _dispatchQueue$i.listeners;
+          if (eventSystemFlags)
+            for (
+              var i$jscomp$0 = _dispatchQueue$i.length - 1;
+              0 <= i$jscomp$0;
+              i$jscomp$0--
+            ) {
+              var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],
+                instance = _dispatchListeners$i.instance,
+                currentTarget = _dispatchListeners$i.currentTarget;
+              _dispatchListeners$i = _dispatchListeners$i.listener;
+              if (instance !== previousInstance && event.isPropagationStopped())
+                break a;
+              null !== instance
+                ? runWithFiberInDEV(
+                    instance,
+                    executeDispatch,
+                    event,
+                    _dispatchListeners$i,
+                    currentTarget
+                  )
+                : executeDispatch(event, _dispatchListeners$i, currentTarget);
+              previousInstance = instance;
+            }
+          else
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < _dispatchQueue$i.length;
+              i$jscomp$0++
+            ) {
+              _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];
+              instance = _dispatchListeners$i.instance;
+              currentTarget = _dispatchListeners$i.currentTarget;
+              _dispatchListeners$i = _dispatchListeners$i.listener;
+              if (instance !== previousInstance && event.isPropagationStopped())
+                break a;
+              null !== instance
+                ? runWithFiberInDEV(
+                    instance,
+                    executeDispatch,
+                    event,
+                    _dispatchListeners$i,
+                    currentTarget
+                  )
+                : executeDispatch(event, _dispatchListeners$i, currentTarget);
+              previousInstance = instance;
+            }
+        }
+      }
+    }
+    function listenToNonDelegatedEvent(domEventName, targetElement) {
+      nonDelegatedEvents.has(domEventName) ||
+        console.error(
+          'Did not expect a listenToNonDelegatedEvent() call for "%s". This is a bug in React. Please file an issue.',
+          domEventName
+        );
+      var listenerSet = targetElement[internalEventHandlersKey];
+      void 0 === listenerSet &&
+        (listenerSet = targetElement[internalEventHandlersKey] = new Set());
+      var listenerSetKey = domEventName + "__bubble";
+      listenerSet.has(listenerSetKey) ||
+        (addTrappedEventListener(targetElement, domEventName, 2, !1),
+        listenerSet.add(listenerSetKey));
+    }
+    function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {
+      nonDelegatedEvents.has(domEventName) &&
+        !isCapturePhaseListener &&
+        console.error(
+          'Did not expect a listenToNativeEvent() call for "%s" in the bubble phase. This is a bug in React. Please file an issue.',
+          domEventName
+        );
+      var eventSystemFlags = 0;
+      isCapturePhaseListener && (eventSystemFlags |= 4);
+      addTrappedEventListener(
+        target,
+        domEventName,
+        eventSystemFlags,
+        isCapturePhaseListener
+      );
+    }
+    function listenToAllSupportedEvents(rootContainerElement) {
+      if (!rootContainerElement[listeningMarker]) {
+        rootContainerElement[listeningMarker] = !0;
+        allNativeEvents.forEach(function (domEventName) {
+          "selectionchange" !== domEventName &&
+            (nonDelegatedEvents.has(domEventName) ||
+              listenToNativeEvent(domEventName, !1, rootContainerElement),
+            listenToNativeEvent(domEventName, !0, rootContainerElement));
+        });
+        var ownerDocument =
+          9 === rootContainerElement.nodeType
+            ? rootContainerElement
+            : rootContainerElement.ownerDocument;
+        null === ownerDocument ||
+          ownerDocument[listeningMarker] ||
+          ((ownerDocument[listeningMarker] = !0),
+          listenToNativeEvent("selectionchange", !1, ownerDocument));
+      }
+    }
+    function addTrappedEventListener(
+      targetContainer,
+      domEventName,
+      eventSystemFlags,
+      isCapturePhaseListener
+    ) {
+      switch (getEventPriority(domEventName)) {
+        case DiscreteEventPriority:
+          var listenerWrapper = dispatchDiscreteEvent;
+          break;
+        case ContinuousEventPriority:
+          listenerWrapper = dispatchContinuousEvent;
+          break;
+        default:
+          listenerWrapper = dispatchEvent;
+      }
+      eventSystemFlags = listenerWrapper.bind(
+        null,
+        domEventName,
+        eventSystemFlags,
+        targetContainer
+      );
+      listenerWrapper = void 0;
+      !passiveBrowserEventsSupported ||
+        ("touchstart" !== domEventName &&
+          "touchmove" !== domEventName &&
+          "wheel" !== domEventName) ||
+        (listenerWrapper = !0);
+      isCapturePhaseListener
+        ? void 0 !== listenerWrapper
+          ? targetContainer.addEventListener(domEventName, eventSystemFlags, {
+              capture: !0,
+              passive: listenerWrapper
+            })
+          : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)
+        : void 0 !== listenerWrapper
+          ? targetContainer.addEventListener(domEventName, eventSystemFlags, {
+              passive: listenerWrapper
+            })
+          : targetContainer.addEventListener(
+              domEventName,
+              eventSystemFlags,
+              !1
+            );
+    }
+    function dispatchEventForPluginEventSystem(
+      domEventName,
+      eventSystemFlags,
+      nativeEvent,
+      targetInst$jscomp$0,
+      targetContainer
+    ) {
+      var ancestorInst = targetInst$jscomp$0;
+      if (
+        0 === (eventSystemFlags & 1) &&
+        0 === (eventSystemFlags & 2) &&
+        null !== targetInst$jscomp$0
+      )
+        a: for (;;) {
+          if (null === targetInst$jscomp$0) return;
+          var nodeTag = targetInst$jscomp$0.tag;
+          if (3 === nodeTag || 4 === nodeTag) {
+            var container = targetInst$jscomp$0.stateNode.containerInfo;
+            if (container === targetContainer) break;
+            if (4 === nodeTag)
+              for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {
+                var grandTag = nodeTag.tag;
+                if (
+                  (3 === grandTag || 4 === grandTag) &&
+                  nodeTag.stateNode.containerInfo === targetContainer
+                )
+                  return;
+                nodeTag = nodeTag.return;
+              }
+            for (; null !== container; ) {
+              nodeTag = getClosestInstanceFromNode(container);
+              if (null === nodeTag) return;
+              grandTag = nodeTag.tag;
+              if (
+                5 === grandTag ||
+                6 === grandTag ||
+                26 === grandTag ||
+                27 === grandTag
+              ) {
+                targetInst$jscomp$0 = ancestorInst = nodeTag;
+                continue a;
+              }
+              container = container.parentNode;
+            }
+          }
+          targetInst$jscomp$0 = targetInst$jscomp$0.return;
+        }
+      batchedUpdates$2(function () {
+        var targetInst = ancestorInst,
+          nativeEventTarget = getEventTarget(nativeEvent),
+          dispatchQueue = [];
+        a: {
+          var reactName = topLevelEventsToReactNames.get(domEventName);
+          if (void 0 !== reactName) {
+            var SyntheticEventCtor = SyntheticEvent,
+              reactEventType = domEventName;
+            switch (domEventName) {
+              case "keypress":
+                if (0 === getEventCharCode(nativeEvent)) break a;
+              case "keydown":
+              case "keyup":
+                SyntheticEventCtor = SyntheticKeyboardEvent;
+                break;
+              case "focusin":
+                reactEventType = "focus";
+                SyntheticEventCtor = SyntheticFocusEvent;
+                break;
+              case "focusout":
+                reactEventType = "blur";
+                SyntheticEventCtor = SyntheticFocusEvent;
+                break;
+              case "beforeblur":
+              case "afterblur":
+                SyntheticEventCtor = SyntheticFocusEvent;
+                break;
+              case "click":
+                if (2 === nativeEvent.button) break a;
+              case "auxclick":
+              case "dblclick":
+              case "mousedown":
+              case "mousemove":
+              case "mouseup":
+              case "mouseout":
+              case "mouseover":
+              case "contextmenu":
+                SyntheticEventCtor = SyntheticMouseEvent;
+                break;
+              case "drag":
+              case "dragend":
+              case "dragenter":
+              case "dragexit":
+              case "dragleave":
+              case "dragover":
+              case "dragstart":
+              case "drop":
+                SyntheticEventCtor = SyntheticDragEvent;
+                break;
+              case "touchcancel":
+              case "touchend":
+              case "touchmove":
+              case "touchstart":
+                SyntheticEventCtor = SyntheticTouchEvent;
+                break;
+              case ANIMATION_END:
+              case ANIMATION_ITERATION:
+              case ANIMATION_START:
+                SyntheticEventCtor = SyntheticAnimationEvent;
+                break;
+              case TRANSITION_END:
+                SyntheticEventCtor = SyntheticTransitionEvent;
+                break;
+              case "scroll":
+              case "scrollend":
+                SyntheticEventCtor = SyntheticUIEvent;
+                break;
+              case "wheel":
+                SyntheticEventCtor = SyntheticWheelEvent;
+                break;
+              case "copy":
+              case "cut":
+              case "paste":
+                SyntheticEventCtor = SyntheticClipboardEvent;
+                break;
+              case "gotpointercapture":
+              case "lostpointercapture":
+              case "pointercancel":
+              case "pointerdown":
+              case "pointermove":
+              case "pointerout":
+              case "pointerover":
+              case "pointerup":
+                SyntheticEventCtor = SyntheticPointerEvent;
+                break;
+              case "toggle":
+              case "beforetoggle":
+                SyntheticEventCtor = SyntheticToggleEvent;
+            }
+            var inCapturePhase = 0 !== (eventSystemFlags & 4),
+              accumulateTargetOnly =
+                !inCapturePhase &&
+                ("scroll" === domEventName || "scrollend" === domEventName),
+              reactEventName = inCapturePhase
+                ? null !== reactName
+                  ? reactName + "Capture"
+                  : null
+                : reactName;
+            inCapturePhase = [];
+            for (
+              var instance = targetInst, lastHostComponent;
+              null !== instance;
+
+            ) {
+              var _instance2 = instance;
+              lastHostComponent = _instance2.stateNode;
+              _instance2 = _instance2.tag;
+              (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||
+                null === lastHostComponent ||
+                null === reactEventName ||
+                ((_instance2 = getListener(instance, reactEventName)),
+                null != _instance2 &&
+                  inCapturePhase.push(
+                    createDispatchListener(
+                      instance,
+                      _instance2,
+                      lastHostComponent
+                    )
+                  ));
+              if (accumulateTargetOnly) break;
+              instance = instance.return;
+            }
+            0 < inCapturePhase.length &&
+              ((reactName = new SyntheticEventCtor(
+                reactName,
+                reactEventType,
+                null,
+                nativeEvent,
+                nativeEventTarget
+              )),
+              dispatchQueue.push({
+                event: reactName,
+                listeners: inCapturePhase
+              }));
+          }
+        }
+        if (0 === (eventSystemFlags & 7)) {
+          a: {
+            reactName =
+              "mouseover" === domEventName || "pointerover" === domEventName;
+            SyntheticEventCtor =
+              "mouseout" === domEventName || "pointerout" === domEventName;
+            if (
+              reactName &&
+              nativeEvent !== currentReplayingEvent &&
+              (reactEventType =
+                nativeEvent.relatedTarget || nativeEvent.fromElement) &&
+              (getClosestInstanceFromNode(reactEventType) ||
+                reactEventType[internalContainerInstanceKey])
+            )
+              break a;
+            if (SyntheticEventCtor || reactName) {
+              reactName =
+                nativeEventTarget.window === nativeEventTarget
+                  ? nativeEventTarget
+                  : (reactName = nativeEventTarget.ownerDocument)
+                    ? reactName.defaultView || reactName.parentWindow
+                    : window;
+              if (SyntheticEventCtor) {
+                if (
+                  ((reactEventType =
+                    nativeEvent.relatedTarget || nativeEvent.toElement),
+                  (SyntheticEventCtor = targetInst),
+                  (reactEventType = reactEventType
+                    ? getClosestInstanceFromNode(reactEventType)
+                    : null),
+                  null !== reactEventType &&
+                    ((accumulateTargetOnly =
+                      getNearestMountedFiber(reactEventType)),
+                    (inCapturePhase = reactEventType.tag),
+                    reactEventType !== accumulateTargetOnly ||
+                      (5 !== inCapturePhase &&
+                        27 !== inCapturePhase &&
+                        6 !== inCapturePhase)))
+                )
+                  reactEventType = null;
+              } else (SyntheticEventCtor = null), (reactEventType = targetInst);
+              if (SyntheticEventCtor !== reactEventType) {
+                inCapturePhase = SyntheticMouseEvent;
+                _instance2 = "onMouseLeave";
+                reactEventName = "onMouseEnter";
+                instance = "mouse";
+                if (
+                  "pointerout" === domEventName ||
+                  "pointerover" === domEventName
+                )
+                  (inCapturePhase = SyntheticPointerEvent),
+                    (_instance2 = "onPointerLeave"),
+                    (reactEventName = "onPointerEnter"),
+                    (instance = "pointer");
+                accumulateTargetOnly =
+                  null == SyntheticEventCtor
+                    ? reactName
+                    : getNodeFromInstance(SyntheticEventCtor);
+                lastHostComponent =
+                  null == reactEventType
+                    ? reactName
+                    : getNodeFromInstance(reactEventType);
+                reactName = new inCapturePhase(
+                  _instance2,
+                  instance + "leave",
+                  SyntheticEventCtor,
+                  nativeEvent,
+                  nativeEventTarget
+                );
+                reactName.target = accumulateTargetOnly;
+                reactName.relatedTarget = lastHostComponent;
+                _instance2 = null;
+                getClosestInstanceFromNode(nativeEventTarget) === targetInst &&
+                  ((inCapturePhase = new inCapturePhase(
+                    reactEventName,
+                    instance + "enter",
+                    reactEventType,
+                    nativeEvent,
+                    nativeEventTarget
+                  )),
+                  (inCapturePhase.target = lastHostComponent),
+                  (inCapturePhase.relatedTarget = accumulateTargetOnly),
+                  (_instance2 = inCapturePhase));
+                accumulateTargetOnly = _instance2;
+                if (SyntheticEventCtor && reactEventType)
+                  b: {
+                    inCapturePhase = SyntheticEventCtor;
+                    reactEventName = reactEventType;
+                    instance = 0;
+                    for (
+                      lastHostComponent = inCapturePhase;
+                      lastHostComponent;
+                      lastHostComponent = getParent(lastHostComponent)
+                    )
+                      instance++;
+                    lastHostComponent = 0;
+                    for (
+                      _instance2 = reactEventName;
+                      _instance2;
+                      _instance2 = getParent(_instance2)
+                    )
+                      lastHostComponent++;
+                    for (; 0 < instance - lastHostComponent; )
+                      (inCapturePhase = getParent(inCapturePhase)), instance--;
+                    for (; 0 < lastHostComponent - instance; )
+                      (reactEventName = getParent(reactEventName)),
+                        lastHostComponent--;
+                    for (; instance--; ) {
+                      if (
+                        inCapturePhase === reactEventName ||
+                        (null !== reactEventName &&
+                          inCapturePhase === reactEventName.alternate)
+                      )
+                        break b;
+                      inCapturePhase = getParent(inCapturePhase);
+                      reactEventName = getParent(reactEventName);
+                    }
+                    inCapturePhase = null;
+                  }
+                else inCapturePhase = null;
+                null !== SyntheticEventCtor &&
+                  accumulateEnterLeaveListenersForEvent(
+                    dispatchQueue,
+                    reactName,
+                    SyntheticEventCtor,
+                    inCapturePhase,
+                    !1
+                  );
+                null !== reactEventType &&
+                  null !== accumulateTargetOnly &&
+                  accumulateEnterLeaveListenersForEvent(
+                    dispatchQueue,
+                    accumulateTargetOnly,
+                    reactEventType,
+                    inCapturePhase,
+                    !0
+                  );
+              }
+            }
+          }
+          a: {
+            reactName = targetInst ? getNodeFromInstance(targetInst) : window;
+            SyntheticEventCtor =
+              reactName.nodeName && reactName.nodeName.toLowerCase();
+            if (
+              "select" === SyntheticEventCtor ||
+              ("input" === SyntheticEventCtor && "file" === reactName.type)
+            )
+              var getTargetInstFunc = getTargetInstForChangeEvent;
+            else if (isTextInputElement(reactName))
+              if (isInputEventSupported)
+                getTargetInstFunc = getTargetInstForInputOrChangeEvent;
+              else {
+                getTargetInstFunc = getTargetInstForInputEventPolyfill;
+                var handleEventFunc = handleEventsForInputEventPolyfill;
+              }
+            else
+              (SyntheticEventCtor = reactName.nodeName),
+                !SyntheticEventCtor ||
+                "input" !== SyntheticEventCtor.toLowerCase() ||
+                ("checkbox" !== reactName.type && "radio" !== reactName.type)
+                  ? targetInst &&
+                    isCustomElement(targetInst.elementType) &&
+                    (getTargetInstFunc = getTargetInstForChangeEvent)
+                  : (getTargetInstFunc = getTargetInstForClickEvent);
+            if (
+              getTargetInstFunc &&
+              (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))
+            ) {
+              createAndAccumulateChangeEvent(
+                dispatchQueue,
+                getTargetInstFunc,
+                nativeEvent,
+                nativeEventTarget
+              );
+              break a;
+            }
+            handleEventFunc &&
+              handleEventFunc(domEventName, reactName, targetInst);
+            "focusout" === domEventName &&
+              targetInst &&
+              "number" === reactName.type &&
+              null != targetInst.memoizedProps.value &&
+              setDefaultValue(reactName, "number", reactName.value);
+          }
+          handleEventFunc = targetInst
+            ? getNodeFromInstance(targetInst)
+            : window;
+          switch (domEventName) {
+            case "focusin":
+              if (
+                isTextInputElement(handleEventFunc) ||
+                "true" === handleEventFunc.contentEditable
+              )
+                (activeElement = handleEventFunc),
+                  (activeElementInst = targetInst),
+                  (lastSelection = null);
+              break;
+            case "focusout":
+              lastSelection = activeElementInst = activeElement = null;
+              break;
+            case "mousedown":
+              mouseDown = !0;
+              break;
+            case "contextmenu":
+            case "mouseup":
+            case "dragend":
+              mouseDown = !1;
+              constructSelectEvent(
+                dispatchQueue,
+                nativeEvent,
+                nativeEventTarget
+              );
+              break;
+            case "selectionchange":
+              if (skipSelectionChangeEvent) break;
+            case "keydown":
+            case "keyup":
+              constructSelectEvent(
+                dispatchQueue,
+                nativeEvent,
+                nativeEventTarget
+              );
+          }
+          var fallbackData;
+          if (canUseCompositionEvent)
+            b: {
+              switch (domEventName) {
+                case "compositionstart":
+                  var eventType = "onCompositionStart";
+                  break b;
+                case "compositionend":
+                  eventType = "onCompositionEnd";
+                  break b;
+                case "compositionupdate":
+                  eventType = "onCompositionUpdate";
+                  break b;
+              }
+              eventType = void 0;
+            }
+          else
+            isComposing
+              ? isFallbackCompositionEnd(domEventName, nativeEvent) &&
+                (eventType = "onCompositionEnd")
+              : "keydown" === domEventName &&
+                nativeEvent.keyCode === START_KEYCODE &&
+                (eventType = "onCompositionStart");
+          eventType &&
+            (useFallbackCompositionData &&
+              "ko" !== nativeEvent.locale &&
+              (isComposing || "onCompositionStart" !== eventType
+                ? "onCompositionEnd" === eventType &&
+                  isComposing &&
+                  (fallbackData = getData())
+                : ((root = nativeEventTarget),
+                  (startText = "value" in root ? root.value : root.textContent),
+                  (isComposing = !0))),
+            (handleEventFunc = accumulateTwoPhaseListeners(
+              targetInst,
+              eventType
+            )),
+            0 < handleEventFunc.length &&
+              ((eventType = new SyntheticCompositionEvent(
+                eventType,
+                domEventName,
+                null,
+                nativeEvent,
+                nativeEventTarget
+              )),
+              dispatchQueue.push({
+                event: eventType,
+                listeners: handleEventFunc
+              }),
+              fallbackData
+                ? (eventType.data = fallbackData)
+                : ((fallbackData = getDataFromCustomEvent(nativeEvent)),
+                  null !== fallbackData && (eventType.data = fallbackData))));
+          if (
+            (fallbackData = canUseTextInputEvent
+              ? getNativeBeforeInputChars(domEventName, nativeEvent)
+              : getFallbackBeforeInputChars(domEventName, nativeEvent))
+          )
+            (eventType = accumulateTwoPhaseListeners(
+              targetInst,
+              "onBeforeInput"
+            )),
+              0 < eventType.length &&
+                ((handleEventFunc = new SyntheticInputEvent(
+                  "onBeforeInput",
+                  "beforeinput",
+                  null,
+                  nativeEvent,
+                  nativeEventTarget
+                )),
+                dispatchQueue.push({
+                  event: handleEventFunc,
+                  listeners: eventType
+                }),
+                (handleEventFunc.data = fallbackData));
+          extractEvents$1(
+            dispatchQueue,
+            domEventName,
+            targetInst,
+            nativeEvent,
+            nativeEventTarget
+          );
+        }
+        processDispatchQueue(dispatchQueue, eventSystemFlags);
+      });
+    }
+    function createDispatchListener(instance, listener, currentTarget) {
+      return {
+        instance: instance,
+        listener: listener,
+        currentTarget: currentTarget
+      };
+    }
+    function accumulateTwoPhaseListeners(targetFiber, reactName) {
+      for (
+        var captureName = reactName + "Capture", listeners = [];
+        null !== targetFiber;
+
+      ) {
+        var _instance3 = targetFiber,
+          stateNode = _instance3.stateNode;
+        _instance3 = _instance3.tag;
+        (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||
+          null === stateNode ||
+          ((_instance3 = getListener(targetFiber, captureName)),
+          null != _instance3 &&
+            listeners.unshift(
+              createDispatchListener(targetFiber, _instance3, stateNode)
+            ),
+          (_instance3 = getListener(targetFiber, reactName)),
+          null != _instance3 &&
+            listeners.push(
+              createDispatchListener(targetFiber, _instance3, stateNode)
+            ));
+        if (3 === targetFiber.tag) return listeners;
+        targetFiber = targetFiber.return;
+      }
+      return [];
+    }
+    function getParent(inst) {
+      if (null === inst) return null;
+      do inst = inst.return;
+      while (inst && 5 !== inst.tag && 27 !== inst.tag);
+      return inst ? inst : null;
+    }
+    function accumulateEnterLeaveListenersForEvent(
+      dispatchQueue,
+      event,
+      target,
+      common,
+      inCapturePhase
+    ) {
+      for (
+        var registrationName = event._reactName, listeners = [];
+        null !== target && target !== common;
+
+      ) {
+        var _instance4 = target,
+          alternate = _instance4.alternate,
+          stateNode = _instance4.stateNode;
+        _instance4 = _instance4.tag;
+        if (null !== alternate && alternate === common) break;
+        (5 !== _instance4 && 26 !== _instance4 && 27 !== _instance4) ||
+          null === stateNode ||
+          ((alternate = stateNode),
+          inCapturePhase
+            ? ((stateNode = getListener(target, registrationName)),
+              null != stateNode &&
+                listeners.unshift(
+                  createDispatchListener(target, stateNode, alternate)
+                ))
+            : inCapturePhase ||
+              ((stateNode = getListener(target, registrationName)),
+              null != stateNode &&
+                listeners.push(
+                  createDispatchListener(target, stateNode, alternate)
+                )));
+        target = target.return;
+      }
+      0 !== listeners.length &&
+        dispatchQueue.push({ event: event, listeners: listeners });
+    }
+    function validatePropertiesInDevelopment(type, props) {
+      validateProperties$2(type, props);
+      ("input" !== type && "textarea" !== type && "select" !== type) ||
+        null == props ||
+        null !== props.value ||
+        didWarnValueNull ||
+        ((didWarnValueNull = !0),
+        "select" === type && props.multiple
+          ? console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.",
+              type
+            )
+          : console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.",
+              type
+            ));
+      var eventRegistry = {
+        registrationNameDependencies: registrationNameDependencies,
+        possibleRegistrationNames: possibleRegistrationNames
+      };
+      isCustomElement(type) ||
+        "string" === typeof props.is ||
+        warnUnknownProperties(type, props, eventRegistry);
+      props.contentEditable &&
+        !props.suppressContentEditableWarning &&
+        null != props.children &&
+        console.error(
+          "A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."
+        );
+    }
+    function warnForPropDifference(
+      propName,
+      serverValue,
+      clientValue,
+      serverDifferences
+    ) {
+      serverValue !== clientValue &&
+        ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),
+        normalizeMarkupForTextOrAttribute(serverValue) !== clientValue &&
+          (serverDifferences[propName] = serverValue));
+    }
+    function warnForExtraAttributes(
+      domElement,
+      attributeNames,
+      serverDifferences
+    ) {
+      attributeNames.forEach(function (attributeName) {
+        serverDifferences[getPropNameFromAttributeName(attributeName)] =
+          "style" === attributeName
+            ? getStylesObjectFromElement(domElement)
+            : domElement.getAttribute(attributeName);
+      });
+    }
+    function warnForInvalidEventListener(registrationName, listener) {
+      !1 === listener
+        ? console.error(
+            "Expected `%s` listener to be a function, instead got `false`.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.",
+            registrationName,
+            registrationName,
+            registrationName
+          )
+        : console.error(
+            "Expected `%s` listener to be a function, instead got a value of `%s` type.",
+            registrationName,
+            typeof listener
+          );
+    }
+    function normalizeHTML(parent, html) {
+      parent =
+        parent.namespaceURI === MATH_NAMESPACE ||
+        parent.namespaceURI === SVG_NAMESPACE
+          ? parent.ownerDocument.createElementNS(
+              parent.namespaceURI,
+              parent.tagName
+            )
+          : parent.ownerDocument.createElement(parent.tagName);
+      parent.innerHTML = html;
+      return parent.innerHTML;
+    }
+    function normalizeMarkupForTextOrAttribute(markup) {
+      willCoercionThrow(markup) &&
+        (console.error(
+          "The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.",
+          typeName(markup)
+        ),
+        testStringCoercion(markup));
+      return ("string" === typeof markup ? markup : "" + markup)
+        .replace(NORMALIZE_NEWLINES_REGEX, "\n")
+        .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, "");
+    }
+    function checkForUnmatchedText(serverText, clientText) {
+      clientText = normalizeMarkupForTextOrAttribute(clientText);
+      return normalizeMarkupForTextOrAttribute(serverText) === clientText
+        ? !0
+        : !1;
+    }
+    function noop$2() {}
+    function setProp(domElement, tag, key, value, props, prevValue) {
+      switch (key) {
+        case "children":
+          if ("string" === typeof value)
+            validateTextNesting(value, tag, !1),
+              "body" === tag ||
+                ("textarea" === tag && "" === value) ||
+                setTextContent(domElement, value);
+          else if ("number" === typeof value || "bigint" === typeof value)
+            validateTextNesting("" + value, tag, !1),
+              "body" !== tag && setTextContent(domElement, "" + value);
+          break;
+        case "className":
+          setValueForKnownAttribute(domElement, "class", value);
+          break;
+        case "tabIndex":
+          setValueForKnownAttribute(domElement, "tabindex", value);
+          break;
+        case "dir":
+        case "role":
+        case "viewBox":
+        case "width":
+        case "height":
+          setValueForKnownAttribute(domElement, key, value);
+          break;
+        case "style":
+          setValueForStyles(domElement, value, prevValue);
+          break;
+        case "data":
+          if ("object" !== tag) {
+            setValueForKnownAttribute(domElement, "data", value);
+            break;
+          }
+        case "src":
+        case "href":
+          if ("" === value && ("a" !== tag || "href" !== key)) {
+            "src" === key
+              ? console.error(
+                  'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  key,
+                  key
+                )
+              : console.error(
+                  'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  key,
+                  key
+                );
+            domElement.removeAttribute(key);
+            break;
+          }
+          if (
+            null == value ||
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          ) {
+            domElement.removeAttribute(key);
+            break;
+          }
+          checkAttributeStringCoercion(value, key);
+          value = sanitizeURL("" + value);
+          domElement.setAttribute(key, value);
+          break;
+        case "action":
+        case "formAction":
+          null != value &&
+            ("form" === tag
+              ? "formAction" === key
+                ? console.error(
+                    "You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>."
+                  )
+                : "function" === typeof value &&
+                  ((null == props.encType && null == props.method) ||
+                    didWarnFormActionMethod ||
+                    ((didWarnFormActionMethod = !0),
+                    console.error(
+                      "Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden."
+                    )),
+                  null == props.target ||
+                    didWarnFormActionTarget ||
+                    ((didWarnFormActionTarget = !0),
+                    console.error(
+                      "Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window."
+                    )))
+              : "input" === tag || "button" === tag
+                ? "action" === key
+                  ? console.error(
+                      "You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>."
+                    )
+                  : "input" !== tag ||
+                      "submit" === props.type ||
+                      "image" === props.type ||
+                      didWarnFormActionType
+                    ? "button" !== tag ||
+                      null == props.type ||
+                      "submit" === props.type ||
+                      didWarnFormActionType
+                      ? "function" === typeof value &&
+                        (null == props.name ||
+                          didWarnFormActionName ||
+                          ((didWarnFormActionName = !0),
+                          console.error(
+                            'Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'
+                          )),
+                        (null == props.formEncType &&
+                          null == props.formMethod) ||
+                          didWarnFormActionMethod ||
+                          ((didWarnFormActionMethod = !0),
+                          console.error(
+                            "Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden."
+                          )),
+                        null == props.formTarget ||
+                          didWarnFormActionTarget ||
+                          ((didWarnFormActionTarget = !0),
+                          console.error(
+                            "Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window."
+                          )))
+                      : ((didWarnFormActionType = !0),
+                        console.error(
+                          'A button can only specify a formAction along with type="submit" or no type.'
+                        ))
+                    : ((didWarnFormActionType = !0),
+                      console.error(
+                        'An input can only specify a formAction along with type="submit" or type="image".'
+                      ))
+                : "action" === key
+                  ? console.error(
+                      "You can only pass the action prop to <form>."
+                    )
+                  : console.error(
+                      "You can only pass the formAction prop to <input> or <button>."
+                    ));
+          if ("function" === typeof value) {
+            domElement.setAttribute(
+              key,
+              "javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')"
+            );
+            break;
+          } else
+            "function" === typeof prevValue &&
+              ("formAction" === key
+                ? ("input" !== tag &&
+                    setProp(domElement, tag, "name", props.name, props, null),
+                  setProp(
+                    domElement,
+                    tag,
+                    "formEncType",
+                    props.formEncType,
+                    props,
+                    null
+                  ),
+                  setProp(
+                    domElement,
+                    tag,
+                    "formMethod",
+                    props.formMethod,
+                    props,
+                    null
+                  ),
+                  setProp(
+                    domElement,
+                    tag,
+                    "formTarget",
+                    props.formTarget,
+                    props,
+                    null
+                  ))
+                : (setProp(
+                    domElement,
+                    tag,
+                    "encType",
+                    props.encType,
+                    props,
+                    null
+                  ),
+                  setProp(domElement, tag, "method", props.method, props, null),
+                  setProp(
+                    domElement,
+                    tag,
+                    "target",
+                    props.target,
+                    props,
+                    null
+                  )));
+          if (
+            null == value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          ) {
+            domElement.removeAttribute(key);
+            break;
+          }
+          checkAttributeStringCoercion(value, key);
+          value = sanitizeURL("" + value);
+          domElement.setAttribute(key, value);
+          break;
+        case "onClick":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            (domElement.onclick = noop$2));
+          break;
+        case "onScroll":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            listenToNonDelegatedEvent("scroll", domElement));
+          break;
+        case "onScrollEnd":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            listenToNonDelegatedEvent("scrollend", domElement));
+          break;
+        case "dangerouslySetInnerHTML":
+          if (null != value) {
+            if ("object" !== typeof value || !("__html" in value))
+              throw Error(
+                "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+              );
+            key = value.__html;
+            if (null != key) {
+              if (null != props.children)
+                throw Error(
+                  "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+                );
+              domElement.innerHTML = key;
+            }
+          }
+          break;
+        case "multiple":
+          domElement.multiple =
+            value && "function" !== typeof value && "symbol" !== typeof value;
+          break;
+        case "muted":
+          domElement.muted =
+            value && "function" !== typeof value && "symbol" !== typeof value;
+          break;
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "ref":
+          break;
+        case "autoFocus":
+          break;
+        case "xlinkHref":
+          if (
+            null == value ||
+            "function" === typeof value ||
+            "boolean" === typeof value ||
+            "symbol" === typeof value
+          ) {
+            domElement.removeAttribute("xlink:href");
+            break;
+          }
+          checkAttributeStringCoercion(value, key);
+          key = sanitizeURL("" + value);
+          domElement.setAttributeNS(xlinkNamespace, "xlink:href", key);
+          break;
+        case "contentEditable":
+        case "spellCheck":
+        case "draggable":
+        case "value":
+        case "autoReverse":
+        case "externalResourcesRequired":
+        case "focusable":
+        case "preserveAlpha":
+          null != value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value
+            ? (checkAttributeStringCoercion(value, key),
+              domElement.setAttribute(key, "" + value))
+            : domElement.removeAttribute(key);
+          break;
+        case "inert":
+          "" !== value ||
+            didWarnForNewBooleanPropsWithEmptyValue[key] ||
+            ((didWarnForNewBooleanPropsWithEmptyValue[key] = !0),
+            console.error(
+              "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+              key
+            ));
+        case "allowFullScreen":
+        case "async":
+        case "autoPlay":
+        case "controls":
+        case "default":
+        case "defer":
+        case "disabled":
+        case "disablePictureInPicture":
+        case "disableRemotePlayback":
+        case "formNoValidate":
+        case "hidden":
+        case "loop":
+        case "noModule":
+        case "noValidate":
+        case "open":
+        case "playsInline":
+        case "readOnly":
+        case "required":
+        case "reversed":
+        case "scoped":
+        case "seamless":
+        case "itemScope":
+          value && "function" !== typeof value && "symbol" !== typeof value
+            ? domElement.setAttribute(key, "")
+            : domElement.removeAttribute(key);
+          break;
+        case "capture":
+        case "download":
+          !0 === value
+            ? domElement.setAttribute(key, "")
+            : !1 !== value &&
+                null != value &&
+                "function" !== typeof value &&
+                "symbol" !== typeof value
+              ? (checkAttributeStringCoercion(value, key),
+                domElement.setAttribute(key, value))
+              : domElement.removeAttribute(key);
+          break;
+        case "cols":
+        case "rows":
+        case "size":
+        case "span":
+          null != value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value &&
+          !isNaN(value) &&
+          1 <= value
+            ? (checkAttributeStringCoercion(value, key),
+              domElement.setAttribute(key, value))
+            : domElement.removeAttribute(key);
+          break;
+        case "rowSpan":
+        case "start":
+          null == value ||
+          "function" === typeof value ||
+          "symbol" === typeof value ||
+          isNaN(value)
+            ? domElement.removeAttribute(key)
+            : (checkAttributeStringCoercion(value, key),
+              domElement.setAttribute(key, value));
+          break;
+        case "popover":
+          listenToNonDelegatedEvent("beforetoggle", domElement);
+          listenToNonDelegatedEvent("toggle", domElement);
+          setValueForAttribute(domElement, "popover", value);
+          break;
+        case "xlinkActuate":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:actuate",
+            value
+          );
+          break;
+        case "xlinkArcrole":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:arcrole",
+            value
+          );
+          break;
+        case "xlinkRole":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:role",
+            value
+          );
+          break;
+        case "xlinkShow":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:show",
+            value
+          );
+          break;
+        case "xlinkTitle":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:title",
+            value
+          );
+          break;
+        case "xlinkType":
+          setValueForNamespacedAttribute(
+            domElement,
+            xlinkNamespace,
+            "xlink:type",
+            value
+          );
+          break;
+        case "xmlBase":
+          setValueForNamespacedAttribute(
+            domElement,
+            xmlNamespace,
+            "xml:base",
+            value
+          );
+          break;
+        case "xmlLang":
+          setValueForNamespacedAttribute(
+            domElement,
+            xmlNamespace,
+            "xml:lang",
+            value
+          );
+          break;
+        case "xmlSpace":
+          setValueForNamespacedAttribute(
+            domElement,
+            xmlNamespace,
+            "xml:space",
+            value
+          );
+          break;
+        case "is":
+          null != prevValue &&
+            console.error(
+              'Cannot update the "is" prop after it has been initialized.'
+            );
+          setValueForAttribute(domElement, "is", value);
+          break;
+        case "innerText":
+        case "textContent":
+          break;
+        case "popoverTarget":
+          didWarnPopoverTargetObject ||
+            null == value ||
+            "object" !== typeof value ||
+            ((didWarnPopoverTargetObject = !0),
+            console.error(
+              "The `popoverTarget` prop expects the ID of an Element as a string. Received %s instead.",
+              value
+            ));
+        default:
+          !(2 < key.length) ||
+          ("o" !== key[0] && "O" !== key[0]) ||
+          ("n" !== key[1] && "N" !== key[1])
+            ? ((key = getAttributeAlias(key)),
+              setValueForAttribute(domElement, key, value))
+            : registrationNameDependencies.hasOwnProperty(key) &&
+              null != value &&
+              "function" !== typeof value &&
+              warnForInvalidEventListener(key, value);
+      }
+    }
+    function setPropOnCustomElement(
+      domElement,
+      tag,
+      key,
+      value,
+      props,
+      prevValue
+    ) {
+      switch (key) {
+        case "style":
+          setValueForStyles(domElement, value, prevValue);
+          break;
+        case "dangerouslySetInnerHTML":
+          if (null != value) {
+            if ("object" !== typeof value || !("__html" in value))
+              throw Error(
+                "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+              );
+            key = value.__html;
+            if (null != key) {
+              if (null != props.children)
+                throw Error(
+                  "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+                );
+              domElement.innerHTML = key;
+            }
+          }
+          break;
+        case "children":
+          "string" === typeof value
+            ? setTextContent(domElement, value)
+            : ("number" === typeof value || "bigint" === typeof value) &&
+              setTextContent(domElement, "" + value);
+          break;
+        case "onScroll":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            listenToNonDelegatedEvent("scroll", domElement));
+          break;
+        case "onScrollEnd":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            listenToNonDelegatedEvent("scrollend", domElement));
+          break;
+        case "onClick":
+          null != value &&
+            ("function" !== typeof value &&
+              warnForInvalidEventListener(key, value),
+            (domElement.onclick = noop$2));
+          break;
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "innerHTML":
+        case "ref":
+          break;
+        case "innerText":
+        case "textContent":
+          break;
+        default:
+          if (registrationNameDependencies.hasOwnProperty(key))
+            null != value &&
+              "function" !== typeof value &&
+              warnForInvalidEventListener(key, value);
+          else
+            a: {
+              if (
+                "o" === key[0] &&
+                "n" === key[1] &&
+                ((props = key.endsWith("Capture")),
+                (tag = key.slice(2, props ? key.length - 7 : void 0)),
+                (prevValue = domElement[internalPropsKey] || null),
+                (prevValue = null != prevValue ? prevValue[key] : null),
+                "function" === typeof prevValue &&
+                  domElement.removeEventListener(tag, prevValue, props),
+                "function" === typeof value)
+              ) {
+                "function" !== typeof prevValue &&
+                  null !== prevValue &&
+                  (key in domElement
+                    ? (domElement[key] = null)
+                    : domElement.hasAttribute(key) &&
+                      domElement.removeAttribute(key));
+                domElement.addEventListener(tag, value, props);
+                break a;
+              }
+              key in domElement
+                ? (domElement[key] = value)
+                : !0 === value
+                  ? domElement.setAttribute(key, "")
+                  : setValueForAttribute(domElement, key, value);
+            }
+      }
+    }
+    function setInitialProperties(domElement, tag, props) {
+      validatePropertiesInDevelopment(tag, props);
+      switch (tag) {
+        case "div":
+        case "span":
+        case "svg":
+        case "path":
+        case "a":
+        case "g":
+        case "p":
+        case "li":
+          break;
+        case "img":
+          listenToNonDelegatedEvent("error", domElement);
+          listenToNonDelegatedEvent("load", domElement);
+          var hasSrc = !1,
+            hasSrcSet = !1,
+            propKey;
+          for (propKey in props)
+            if (props.hasOwnProperty(propKey)) {
+              var propValue = props[propKey];
+              if (null != propValue)
+                switch (propKey) {
+                  case "src":
+                    hasSrc = !0;
+                    break;
+                  case "srcSet":
+                    hasSrcSet = !0;
+                    break;
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      tag +
+                        " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    setProp(domElement, tag, propKey, propValue, props, null);
+                }
+            }
+          hasSrcSet &&
+            setProp(domElement, tag, "srcSet", props.srcSet, props, null);
+          hasSrc && setProp(domElement, tag, "src", props.src, props, null);
+          return;
+        case "input":
+          checkControlledValueProps("input", props);
+          listenToNonDelegatedEvent("invalid", domElement);
+          var defaultValue = (propKey = propValue = hasSrcSet = null),
+            checked = null,
+            defaultChecked = null;
+          for (hasSrc in props)
+            if (props.hasOwnProperty(hasSrc)) {
+              var _propValue = props[hasSrc];
+              if (null != _propValue)
+                switch (hasSrc) {
+                  case "name":
+                    hasSrcSet = _propValue;
+                    break;
+                  case "type":
+                    propValue = _propValue;
+                    break;
+                  case "checked":
+                    checked = _propValue;
+                    break;
+                  case "defaultChecked":
+                    defaultChecked = _propValue;
+                    break;
+                  case "value":
+                    propKey = _propValue;
+                    break;
+                  case "defaultValue":
+                    defaultValue = _propValue;
+                    break;
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    if (null != _propValue)
+                      throw Error(
+                        tag +
+                          " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                      );
+                    break;
+                  default:
+                    setProp(domElement, tag, hasSrc, _propValue, props, null);
+                }
+            }
+          validateInputProps(domElement, props);
+          initInput(
+            domElement,
+            propKey,
+            defaultValue,
+            checked,
+            defaultChecked,
+            propValue,
+            hasSrcSet,
+            !1
+          );
+          track(domElement);
+          return;
+        case "select":
+          checkControlledValueProps("select", props);
+          listenToNonDelegatedEvent("invalid", domElement);
+          hasSrc = propValue = propKey = null;
+          for (hasSrcSet in props)
+            if (
+              props.hasOwnProperty(hasSrcSet) &&
+              ((defaultValue = props[hasSrcSet]), null != defaultValue)
+            )
+              switch (hasSrcSet) {
+                case "value":
+                  propKey = defaultValue;
+                  break;
+                case "defaultValue":
+                  propValue = defaultValue;
+                  break;
+                case "multiple":
+                  hasSrc = defaultValue;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    hasSrcSet,
+                    defaultValue,
+                    props,
+                    null
+                  );
+              }
+          validateSelectProps(domElement, props);
+          tag = propKey;
+          props = propValue;
+          domElement.multiple = !!hasSrc;
+          null != tag
+            ? updateOptions(domElement, !!hasSrc, tag, !1)
+            : null != props && updateOptions(domElement, !!hasSrc, props, !0);
+          return;
+        case "textarea":
+          checkControlledValueProps("textarea", props);
+          listenToNonDelegatedEvent("invalid", domElement);
+          propKey = hasSrcSet = hasSrc = null;
+          for (propValue in props)
+            if (
+              props.hasOwnProperty(propValue) &&
+              ((defaultValue = props[propValue]), null != defaultValue)
+            )
+              switch (propValue) {
+                case "value":
+                  hasSrc = defaultValue;
+                  break;
+                case "defaultValue":
+                  hasSrcSet = defaultValue;
+                  break;
+                case "children":
+                  propKey = defaultValue;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  if (null != defaultValue)
+                    throw Error(
+                      "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                    );
+                  break;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    propValue,
+                    defaultValue,
+                    props,
+                    null
+                  );
+              }
+          validateTextareaProps(domElement, props);
+          initTextarea(domElement, hasSrc, hasSrcSet, propKey);
+          track(domElement);
+          return;
+        case "option":
+          validateOptionProps(domElement, props);
+          for (checked in props)
+            if (
+              props.hasOwnProperty(checked) &&
+              ((hasSrc = props[checked]), null != hasSrc)
+            )
+              switch (checked) {
+                case "selected":
+                  domElement.selected =
+                    hasSrc &&
+                    "function" !== typeof hasSrc &&
+                    "symbol" !== typeof hasSrc;
+                  break;
+                default:
+                  setProp(domElement, tag, checked, hasSrc, props, null);
+              }
+          return;
+        case "dialog":
+          listenToNonDelegatedEvent("beforetoggle", domElement);
+          listenToNonDelegatedEvent("toggle", domElement);
+          listenToNonDelegatedEvent("cancel", domElement);
+          listenToNonDelegatedEvent("close", domElement);
+          break;
+        case "iframe":
+        case "object":
+          listenToNonDelegatedEvent("load", domElement);
+          break;
+        case "video":
+        case "audio":
+          for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)
+            listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);
+          break;
+        case "image":
+          listenToNonDelegatedEvent("error", domElement);
+          listenToNonDelegatedEvent("load", domElement);
+          break;
+        case "details":
+          listenToNonDelegatedEvent("toggle", domElement);
+          break;
+        case "embed":
+        case "source":
+        case "link":
+          listenToNonDelegatedEvent("error", domElement),
+            listenToNonDelegatedEvent("load", domElement);
+        case "area":
+        case "base":
+        case "br":
+        case "col":
+        case "hr":
+        case "keygen":
+        case "meta":
+        case "param":
+        case "track":
+        case "wbr":
+        case "menuitem":
+          for (defaultChecked in props)
+            if (
+              props.hasOwnProperty(defaultChecked) &&
+              ((hasSrc = props[defaultChecked]), null != hasSrc)
+            )
+              switch (defaultChecked) {
+                case "children":
+                case "dangerouslySetInnerHTML":
+                  throw Error(
+                    tag +
+                      " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                  );
+                default:
+                  setProp(domElement, tag, defaultChecked, hasSrc, props, null);
+              }
+          return;
+        default:
+          if (isCustomElement(tag)) {
+            for (_propValue in props)
+              props.hasOwnProperty(_propValue) &&
+                ((hasSrc = props[_propValue]),
+                void 0 !== hasSrc &&
+                  setPropOnCustomElement(
+                    domElement,
+                    tag,
+                    _propValue,
+                    hasSrc,
+                    props,
+                    void 0
+                  ));
+            return;
+          }
+      }
+      for (defaultValue in props)
+        props.hasOwnProperty(defaultValue) &&
+          ((hasSrc = props[defaultValue]),
+          null != hasSrc &&
+            setProp(domElement, tag, defaultValue, hasSrc, props, null));
+    }
+    function updateProperties(domElement, tag, lastProps, nextProps) {
+      validatePropertiesInDevelopment(tag, nextProps);
+      switch (tag) {
+        case "div":
+        case "span":
+        case "svg":
+        case "path":
+        case "a":
+        case "g":
+        case "p":
+        case "li":
+          break;
+        case "input":
+          var name = null,
+            type = null,
+            value = null,
+            defaultValue = null,
+            lastDefaultValue = null,
+            checked = null,
+            defaultChecked = null;
+          for (propKey in lastProps) {
+            var lastProp = lastProps[propKey];
+            if (lastProps.hasOwnProperty(propKey) && null != lastProp)
+              switch (propKey) {
+                case "checked":
+                  break;
+                case "value":
+                  break;
+                case "defaultValue":
+                  lastDefaultValue = lastProp;
+                default:
+                  nextProps.hasOwnProperty(propKey) ||
+                    setProp(
+                      domElement,
+                      tag,
+                      propKey,
+                      null,
+                      nextProps,
+                      lastProp
+                    );
+              }
+          }
+          for (var _propKey8 in nextProps) {
+            var propKey = nextProps[_propKey8];
+            lastProp = lastProps[_propKey8];
+            if (
+              nextProps.hasOwnProperty(_propKey8) &&
+              (null != propKey || null != lastProp)
+            )
+              switch (_propKey8) {
+                case "type":
+                  type = propKey;
+                  break;
+                case "name":
+                  name = propKey;
+                  break;
+                case "checked":
+                  checked = propKey;
+                  break;
+                case "defaultChecked":
+                  defaultChecked = propKey;
+                  break;
+                case "value":
+                  value = propKey;
+                  break;
+                case "defaultValue":
+                  defaultValue = propKey;
+                  break;
+                case "children":
+                case "dangerouslySetInnerHTML":
+                  if (null != propKey)
+                    throw Error(
+                      tag +
+                        " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  break;
+                default:
+                  propKey !== lastProp &&
+                    setProp(
+                      domElement,
+                      tag,
+                      _propKey8,
+                      propKey,
+                      nextProps,
+                      lastProp
+                    );
+              }
+          }
+          tag =
+            "checkbox" === lastProps.type || "radio" === lastProps.type
+              ? null != lastProps.checked
+              : null != lastProps.value;
+          nextProps =
+            "checkbox" === nextProps.type || "radio" === nextProps.type
+              ? null != nextProps.checked
+              : null != nextProps.value;
+          tag ||
+            !nextProps ||
+            didWarnUncontrolledToControlled ||
+            (console.error(
+              "A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnUncontrolledToControlled = !0));
+          !tag ||
+            nextProps ||
+            didWarnControlledToUncontrolled ||
+            (console.error(
+              "A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnControlledToUncontrolled = !0));
+          updateInput(
+            domElement,
+            value,
+            defaultValue,
+            lastDefaultValue,
+            checked,
+            defaultChecked,
+            type,
+            name
+          );
+          return;
+        case "select":
+          propKey = value = defaultValue = _propKey8 = null;
+          for (type in lastProps)
+            if (
+              ((lastDefaultValue = lastProps[type]),
+              lastProps.hasOwnProperty(type) && null != lastDefaultValue)
+            )
+              switch (type) {
+                case "value":
+                  break;
+                case "multiple":
+                  propKey = lastDefaultValue;
+                default:
+                  nextProps.hasOwnProperty(type) ||
+                    setProp(
+                      domElement,
+                      tag,
+                      type,
+                      null,
+                      nextProps,
+                      lastDefaultValue
+                    );
+              }
+          for (name in nextProps)
+            if (
+              ((type = nextProps[name]),
+              (lastDefaultValue = lastProps[name]),
+              nextProps.hasOwnProperty(name) &&
+                (null != type || null != lastDefaultValue))
+            )
+              switch (name) {
+                case "value":
+                  _propKey8 = type;
+                  break;
+                case "defaultValue":
+                  defaultValue = type;
+                  break;
+                case "multiple":
+                  value = type;
+                default:
+                  type !== lastDefaultValue &&
+                    setProp(
+                      domElement,
+                      tag,
+                      name,
+                      type,
+                      nextProps,
+                      lastDefaultValue
+                    );
+              }
+          nextProps = defaultValue;
+          tag = value;
+          lastProps = propKey;
+          null != _propKey8
+            ? updateOptions(domElement, !!tag, _propKey8, !1)
+            : !!lastProps !== !!tag &&
+              (null != nextProps
+                ? updateOptions(domElement, !!tag, nextProps, !0)
+                : updateOptions(domElement, !!tag, tag ? [] : "", !1));
+          return;
+        case "textarea":
+          propKey = _propKey8 = null;
+          for (defaultValue in lastProps)
+            if (
+              ((name = lastProps[defaultValue]),
+              lastProps.hasOwnProperty(defaultValue) &&
+                null != name &&
+                !nextProps.hasOwnProperty(defaultValue))
+            )
+              switch (defaultValue) {
+                case "value":
+                  break;
+                case "children":
+                  break;
+                default:
+                  setProp(domElement, tag, defaultValue, null, nextProps, name);
+              }
+          for (value in nextProps)
+            if (
+              ((name = nextProps[value]),
+              (type = lastProps[value]),
+              nextProps.hasOwnProperty(value) && (null != name || null != type))
+            )
+              switch (value) {
+                case "value":
+                  _propKey8 = name;
+                  break;
+                case "defaultValue":
+                  propKey = name;
+                  break;
+                case "children":
+                  break;
+                case "dangerouslySetInnerHTML":
+                  if (null != name)
+                    throw Error(
+                      "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                    );
+                  break;
+                default:
+                  name !== type &&
+                    setProp(domElement, tag, value, name, nextProps, type);
+              }
+          updateTextarea(domElement, _propKey8, propKey);
+          return;
+        case "option":
+          for (var _propKey13 in lastProps)
+            if (
+              ((_propKey8 = lastProps[_propKey13]),
+              lastProps.hasOwnProperty(_propKey13) &&
+                null != _propKey8 &&
+                !nextProps.hasOwnProperty(_propKey13))
+            )
+              switch (_propKey13) {
+                case "selected":
+                  domElement.selected = !1;
+                  break;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    _propKey13,
+                    null,
+                    nextProps,
+                    _propKey8
+                  );
+              }
+          for (lastDefaultValue in nextProps)
+            if (
+              ((_propKey8 = nextProps[lastDefaultValue]),
+              (propKey = lastProps[lastDefaultValue]),
+              nextProps.hasOwnProperty(lastDefaultValue) &&
+                _propKey8 !== propKey &&
+                (null != _propKey8 || null != propKey))
+            )
+              switch (lastDefaultValue) {
+                case "selected":
+                  domElement.selected =
+                    _propKey8 &&
+                    "function" !== typeof _propKey8 &&
+                    "symbol" !== typeof _propKey8;
+                  break;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    lastDefaultValue,
+                    _propKey8,
+                    nextProps,
+                    propKey
+                  );
+              }
+          return;
+        case "img":
+        case "link":
+        case "area":
+        case "base":
+        case "br":
+        case "col":
+        case "embed":
+        case "hr":
+        case "keygen":
+        case "meta":
+        case "param":
+        case "source":
+        case "track":
+        case "wbr":
+        case "menuitem":
+          for (var _propKey15 in lastProps)
+            (_propKey8 = lastProps[_propKey15]),
+              lastProps.hasOwnProperty(_propKey15) &&
+                null != _propKey8 &&
+                !nextProps.hasOwnProperty(_propKey15) &&
+                setProp(
+                  domElement,
+                  tag,
+                  _propKey15,
+                  null,
+                  nextProps,
+                  _propKey8
+                );
+          for (checked in nextProps)
+            if (
+              ((_propKey8 = nextProps[checked]),
+              (propKey = lastProps[checked]),
+              nextProps.hasOwnProperty(checked) &&
+                _propKey8 !== propKey &&
+                (null != _propKey8 || null != propKey))
+            )
+              switch (checked) {
+                case "children":
+                case "dangerouslySetInnerHTML":
+                  if (null != _propKey8)
+                    throw Error(
+                      tag +
+                        " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  break;
+                default:
+                  setProp(
+                    domElement,
+                    tag,
+                    checked,
+                    _propKey8,
+                    nextProps,
+                    propKey
+                  );
+              }
+          return;
+        default:
+          if (isCustomElement(tag)) {
+            for (var _propKey17 in lastProps)
+              (_propKey8 = lastProps[_propKey17]),
+                lastProps.hasOwnProperty(_propKey17) &&
+                  void 0 !== _propKey8 &&
+                  !nextProps.hasOwnProperty(_propKey17) &&
+                  setPropOnCustomElement(
+                    domElement,
+                    tag,
+                    _propKey17,
+                    void 0,
+                    nextProps,
+                    _propKey8
+                  );
+            for (defaultChecked in nextProps)
+              (_propKey8 = nextProps[defaultChecked]),
+                (propKey = lastProps[defaultChecked]),
+                !nextProps.hasOwnProperty(defaultChecked) ||
+                  _propKey8 === propKey ||
+                  (void 0 === _propKey8 && void 0 === propKey) ||
+                  setPropOnCustomElement(
+                    domElement,
+                    tag,
+                    defaultChecked,
+                    _propKey8,
+                    nextProps,
+                    propKey
+                  );
+            return;
+          }
+      }
+      for (var _propKey19 in lastProps)
+        (_propKey8 = lastProps[_propKey19]),
+          lastProps.hasOwnProperty(_propKey19) &&
+            null != _propKey8 &&
+            !nextProps.hasOwnProperty(_propKey19) &&
+            setProp(domElement, tag, _propKey19, null, nextProps, _propKey8);
+      for (lastProp in nextProps)
+        (_propKey8 = nextProps[lastProp]),
+          (propKey = lastProps[lastProp]),
+          !nextProps.hasOwnProperty(lastProp) ||
+            _propKey8 === propKey ||
+            (null == _propKey8 && null == propKey) ||
+            setProp(domElement, tag, lastProp, _propKey8, nextProps, propKey);
+    }
+    function getPropNameFromAttributeName(attrName) {
+      switch (attrName) {
+        case "class":
+          return "className";
+        case "for":
+          return "htmlFor";
+        default:
+          return attrName;
+      }
+    }
+    function getStylesObjectFromElement(domElement) {
+      var serverValueInObjectForm = {};
+      domElement = domElement.style;
+      for (var i = 0; i < domElement.length; i++) {
+        var styleName = domElement[i];
+        serverValueInObjectForm[styleName] =
+          domElement.getPropertyValue(styleName);
+      }
+      return serverValueInObjectForm;
+    }
+    function diffHydratedStyles(domElement, value$jscomp$0, serverDifferences) {
+      if (null != value$jscomp$0 && "object" !== typeof value$jscomp$0)
+        console.error(
+          "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+        );
+      else {
+        var clientValue;
+        var delimiter = (clientValue = ""),
+          styleName;
+        for (styleName in value$jscomp$0)
+          if (value$jscomp$0.hasOwnProperty(styleName)) {
+            var value = value$jscomp$0[styleName];
+            null != value &&
+              "boolean" !== typeof value &&
+              "" !== value &&
+              (0 === styleName.indexOf("--")
+                ? (checkCSSPropertyStringCoercion(value, styleName),
+                  (clientValue +=
+                    delimiter + styleName + ":" + ("" + value).trim()))
+                : "number" !== typeof value ||
+                    0 === value ||
+                    unitlessNumbers.has(styleName)
+                  ? (checkCSSPropertyStringCoercion(value, styleName),
+                    (clientValue +=
+                      delimiter +
+                      styleName
+                        .replace(uppercasePattern, "-$1")
+                        .toLowerCase()
+                        .replace(msPattern$1, "-ms-") +
+                      ":" +
+                      ("" + value).trim()))
+                  : (clientValue +=
+                      delimiter +
+                      styleName
+                        .replace(uppercasePattern, "-$1")
+                        .toLowerCase()
+                        .replace(msPattern$1, "-ms-") +
+                      ":" +
+                      value +
+                      "px"),
+              (delimiter = ";"));
+          }
+        clientValue = clientValue || null;
+        value$jscomp$0 = domElement.getAttribute("style");
+        value$jscomp$0 !== clientValue &&
+          ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),
+          normalizeMarkupForTextOrAttribute(value$jscomp$0) !== clientValue &&
+            (serverDifferences.style = getStylesObjectFromElement(domElement)));
+      }
+    }
+    function hydrateAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement)
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            return;
+        }
+      else if (null != value)
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+          case "boolean":
+            break;
+          default:
+            if (
+              (checkAttributeStringCoercion(value, propKey),
+              domElement === "" + value)
+            )
+              return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function hydrateBooleanAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement) {
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+            return;
+        }
+        if (!value) return;
+      } else
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+            break;
+          default:
+            if (value) return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function hydrateBooleanishAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement)
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+            return;
+        }
+      else if (null != value)
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+            break;
+          default:
+            if (
+              (checkAttributeStringCoercion(value, attributeName),
+              domElement === "" + value)
+            )
+              return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function hydrateNumericAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement)
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            return;
+          default:
+            if (isNaN(value)) return;
+        }
+      else if (null != value)
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+          case "boolean":
+            break;
+          default:
+            if (
+              !isNaN(value) &&
+              (checkAttributeStringCoercion(value, propKey),
+              domElement === "" + value)
+            )
+              return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function hydrateSanitizedAttribute(
+      domElement,
+      propKey,
+      attributeName,
+      value,
+      extraAttributes,
+      serverDifferences
+    ) {
+      extraAttributes.delete(attributeName);
+      domElement = domElement.getAttribute(attributeName);
+      if (null === domElement)
+        switch (typeof value) {
+          case "undefined":
+          case "function":
+          case "symbol":
+          case "boolean":
+            return;
+        }
+      else if (null != value)
+        switch (typeof value) {
+          case "function":
+          case "symbol":
+          case "boolean":
+            break;
+          default:
+            if (
+              (checkAttributeStringCoercion(value, propKey),
+              (attributeName = sanitizeURL("" + value)),
+              domElement === attributeName)
+            )
+              return;
+        }
+      warnForPropDifference(propKey, domElement, value, serverDifferences);
+    }
+    function diffHydratedProperties(domElement, tag, props, hostContext) {
+      for (
+        var serverDifferences = {},
+          extraAttributes = new Set(),
+          attributes = domElement.attributes,
+          i = 0;
+        i < attributes.length;
+        i++
+      )
+        switch (attributes[i].name.toLowerCase()) {
+          case "value":
+            break;
+          case "checked":
+            break;
+          case "selected":
+            break;
+          default:
+            extraAttributes.add(attributes[i].name);
+        }
+      if (isCustomElement(tag))
+        for (var propKey in props) {
+          if (props.hasOwnProperty(propKey)) {
+            var value = props[propKey];
+            if (null != value)
+              if (registrationNameDependencies.hasOwnProperty(propKey))
+                "function" !== typeof value &&
+                  warnForInvalidEventListener(propKey, value);
+              else if (!0 !== props.suppressHydrationWarning)
+                switch (propKey) {
+                  case "children":
+                    ("string" !== typeof value && "number" !== typeof value) ||
+                      warnForPropDifference(
+                        "children",
+                        domElement.textContent,
+                        value,
+                        serverDifferences
+                      );
+                    continue;
+                  case "suppressContentEditableWarning":
+                  case "suppressHydrationWarning":
+                  case "defaultValue":
+                  case "defaultChecked":
+                  case "innerHTML":
+                  case "ref":
+                    continue;
+                  case "dangerouslySetInnerHTML":
+                    attributes = domElement.innerHTML;
+                    value = value ? value.__html : void 0;
+                    null != value &&
+                      ((value = normalizeHTML(domElement, value)),
+                      warnForPropDifference(
+                        propKey,
+                        attributes,
+                        value,
+                        serverDifferences
+                      ));
+                    continue;
+                  case "style":
+                    extraAttributes.delete(propKey);
+                    diffHydratedStyles(domElement, value, serverDifferences);
+                    continue;
+                  case "offsetParent":
+                  case "offsetTop":
+                  case "offsetLeft":
+                  case "offsetWidth":
+                  case "offsetHeight":
+                  case "isContentEditable":
+                  case "outerText":
+                  case "outerHTML":
+                    extraAttributes.delete(propKey.toLowerCase());
+                    console.error(
+                      "Assignment to read-only property will result in a no-op: `%s`",
+                      propKey
+                    );
+                    continue;
+                  case "className":
+                    extraAttributes.delete("class");
+                    attributes = getValueForAttributeOnCustomComponent(
+                      domElement,
+                      "class",
+                      value
+                    );
+                    warnForPropDifference(
+                      "className",
+                      attributes,
+                      value,
+                      serverDifferences
+                    );
+                    continue;
+                  default:
+                    hostContext.context === HostContextNamespaceNone &&
+                    "svg" !== tag &&
+                    "math" !== tag
+                      ? extraAttributes.delete(propKey.toLowerCase())
+                      : extraAttributes.delete(propKey),
+                      (attributes = getValueForAttributeOnCustomComponent(
+                        domElement,
+                        propKey,
+                        value
+                      )),
+                      warnForPropDifference(
+                        propKey,
+                        attributes,
+                        value,
+                        serverDifferences
+                      );
+                }
+          }
+        }
+      else
+        for (value in props)
+          if (
+            props.hasOwnProperty(value) &&
+            ((propKey = props[value]), null != propKey)
+          )
+            if (registrationNameDependencies.hasOwnProperty(value))
+              "function" !== typeof propKey &&
+                warnForInvalidEventListener(value, propKey);
+            else if (!0 !== props.suppressHydrationWarning)
+              switch (value) {
+                case "children":
+                  ("string" !== typeof propKey &&
+                    "number" !== typeof propKey) ||
+                    warnForPropDifference(
+                      "children",
+                      domElement.textContent,
+                      propKey,
+                      serverDifferences
+                    );
+                  continue;
+                case "suppressContentEditableWarning":
+                case "suppressHydrationWarning":
+                case "value":
+                case "checked":
+                case "selected":
+                case "defaultValue":
+                case "defaultChecked":
+                case "innerHTML":
+                case "ref":
+                  continue;
+                case "dangerouslySetInnerHTML":
+                  attributes = domElement.innerHTML;
+                  propKey = propKey ? propKey.__html : void 0;
+                  null != propKey &&
+                    ((propKey = normalizeHTML(domElement, propKey)),
+                    attributes !== propKey &&
+                      (serverDifferences[value] = { __html: attributes }));
+                  continue;
+                case "className":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "class",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "tabIndex":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "tabindex",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "style":
+                  extraAttributes.delete(value);
+                  diffHydratedStyles(domElement, propKey, serverDifferences);
+                  continue;
+                case "multiple":
+                  extraAttributes.delete(value);
+                  warnForPropDifference(
+                    value,
+                    domElement.multiple,
+                    propKey,
+                    serverDifferences
+                  );
+                  continue;
+                case "muted":
+                  extraAttributes.delete(value);
+                  warnForPropDifference(
+                    value,
+                    domElement.muted,
+                    propKey,
+                    serverDifferences
+                  );
+                  continue;
+                case "autoFocus":
+                  extraAttributes.delete("autofocus");
+                  warnForPropDifference(
+                    value,
+                    domElement.autofocus,
+                    propKey,
+                    serverDifferences
+                  );
+                  continue;
+                case "data":
+                  if ("object" !== tag) {
+                    extraAttributes.delete(value);
+                    attributes = domElement.getAttribute("data");
+                    warnForPropDifference(
+                      value,
+                      attributes,
+                      propKey,
+                      serverDifferences
+                    );
+                    continue;
+                  }
+                case "src":
+                case "href":
+                  if (
+                    !(
+                      "" !== propKey ||
+                      ("a" === tag && "href" === value) ||
+                      ("object" === tag && "data" === value)
+                    )
+                  ) {
+                    "src" === value
+                      ? console.error(
+                          'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                          value,
+                          value
+                        )
+                      : console.error(
+                          'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                          value,
+                          value
+                        );
+                    continue;
+                  }
+                  hydrateSanitizedAttribute(
+                    domElement,
+                    value,
+                    value,
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "action":
+                case "formAction":
+                  attributes = domElement.getAttribute(value);
+                  if ("function" === typeof propKey) {
+                    extraAttributes.delete(value.toLowerCase());
+                    "formAction" === value
+                      ? (extraAttributes.delete("name"),
+                        extraAttributes.delete("formenctype"),
+                        extraAttributes.delete("formmethod"),
+                        extraAttributes.delete("formtarget"))
+                      : (extraAttributes.delete("enctype"),
+                        extraAttributes.delete("method"),
+                        extraAttributes.delete("target"));
+                    continue;
+                  } else if (attributes === EXPECTED_FORM_ACTION_URL) {
+                    extraAttributes.delete(value.toLowerCase());
+                    warnForPropDifference(
+                      value,
+                      "function",
+                      propKey,
+                      serverDifferences
+                    );
+                    continue;
+                  }
+                  hydrateSanitizedAttribute(
+                    domElement,
+                    value,
+                    value.toLowerCase(),
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkHref":
+                  hydrateSanitizedAttribute(
+                    domElement,
+                    value,
+                    "xlink:href",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "contentEditable":
+                  hydrateBooleanishAttribute(
+                    domElement,
+                    value,
+                    "contenteditable",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "spellCheck":
+                  hydrateBooleanishAttribute(
+                    domElement,
+                    value,
+                    "spellcheck",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "draggable":
+                case "autoReverse":
+                case "externalResourcesRequired":
+                case "focusable":
+                case "preserveAlpha":
+                  hydrateBooleanishAttribute(
+                    domElement,
+                    value,
+                    value,
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "allowFullScreen":
+                case "async":
+                case "autoPlay":
+                case "controls":
+                case "default":
+                case "defer":
+                case "disabled":
+                case "disablePictureInPicture":
+                case "disableRemotePlayback":
+                case "formNoValidate":
+                case "hidden":
+                case "loop":
+                case "noModule":
+                case "noValidate":
+                case "open":
+                case "playsInline":
+                case "readOnly":
+                case "required":
+                case "reversed":
+                case "scoped":
+                case "seamless":
+                case "itemScope":
+                  hydrateBooleanAttribute(
+                    domElement,
+                    value,
+                    value.toLowerCase(),
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "capture":
+                case "download":
+                  a: {
+                    i = domElement;
+                    var attributeName = (attributes = value),
+                      serverDifferences$jscomp$0 = serverDifferences;
+                    extraAttributes.delete(attributeName);
+                    i = i.getAttribute(attributeName);
+                    if (null === i)
+                      switch (typeof propKey) {
+                        case "undefined":
+                        case "function":
+                        case "symbol":
+                          break a;
+                        default:
+                          if (!1 === propKey) break a;
+                      }
+                    else if (null != propKey)
+                      switch (typeof propKey) {
+                        case "function":
+                        case "symbol":
+                          break;
+                        case "boolean":
+                          if (!0 === propKey && "" === i) break a;
+                          break;
+                        default:
+                          if (
+                            (checkAttributeStringCoercion(propKey, attributes),
+                            i === "" + propKey)
+                          )
+                            break a;
+                      }
+                    warnForPropDifference(
+                      attributes,
+                      i,
+                      propKey,
+                      serverDifferences$jscomp$0
+                    );
+                  }
+                  continue;
+                case "cols":
+                case "rows":
+                case "size":
+                case "span":
+                  a: {
+                    i = domElement;
+                    attributeName = attributes = value;
+                    serverDifferences$jscomp$0 = serverDifferences;
+                    extraAttributes.delete(attributeName);
+                    i = i.getAttribute(attributeName);
+                    if (null === i)
+                      switch (typeof propKey) {
+                        case "undefined":
+                        case "function":
+                        case "symbol":
+                        case "boolean":
+                          break a;
+                        default:
+                          if (isNaN(propKey) || 1 > propKey) break a;
+                      }
+                    else if (null != propKey)
+                      switch (typeof propKey) {
+                        case "function":
+                        case "symbol":
+                        case "boolean":
+                          break;
+                        default:
+                          if (
+                            !(isNaN(propKey) || 1 > propKey) &&
+                            (checkAttributeStringCoercion(propKey, attributes),
+                            i === "" + propKey)
+                          )
+                            break a;
+                      }
+                    warnForPropDifference(
+                      attributes,
+                      i,
+                      propKey,
+                      serverDifferences$jscomp$0
+                    );
+                  }
+                  continue;
+                case "rowSpan":
+                  hydrateNumericAttribute(
+                    domElement,
+                    value,
+                    "rowspan",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "start":
+                  hydrateNumericAttribute(
+                    domElement,
+                    value,
+                    value,
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xHeight":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "x-height",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkActuate":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:actuate",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkArcrole":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:arcrole",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkRole":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:role",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkShow":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:show",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkTitle":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:title",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xlinkType":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xlink:type",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xmlBase":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xml:base",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xmlLang":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xml:lang",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "xmlSpace":
+                  hydrateAttribute(
+                    domElement,
+                    value,
+                    "xml:space",
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                case "inert":
+                  "" !== propKey ||
+                    didWarnForNewBooleanPropsWithEmptyValue[value] ||
+                    ((didWarnForNewBooleanPropsWithEmptyValue[value] = !0),
+                    console.error(
+                      "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+                      value
+                    ));
+                  hydrateBooleanAttribute(
+                    domElement,
+                    value,
+                    value,
+                    propKey,
+                    extraAttributes,
+                    serverDifferences
+                  );
+                  continue;
+                default:
+                  if (
+                    !(2 < value.length) ||
+                    ("o" !== value[0] && "O" !== value[0]) ||
+                    ("n" !== value[1] && "N" !== value[1])
+                  ) {
+                    i = getAttributeAlias(value);
+                    attributes = !1;
+                    hostContext.context === HostContextNamespaceNone &&
+                    "svg" !== tag &&
+                    "math" !== tag
+                      ? extraAttributes.delete(i.toLowerCase())
+                      : ((attributeName = value.toLowerCase()),
+                        (attributeName = possibleStandardNames.hasOwnProperty(
+                          attributeName
+                        )
+                          ? possibleStandardNames[attributeName] || null
+                          : null),
+                        null !== attributeName &&
+                          attributeName !== value &&
+                          ((attributes = !0),
+                          extraAttributes.delete(attributeName)),
+                        extraAttributes.delete(i));
+                    a: if (
+                      ((attributeName = domElement),
+                      (serverDifferences$jscomp$0 = i),
+                      (i = propKey),
+                      isAttributeNameSafe(serverDifferences$jscomp$0))
+                    )
+                      if (
+                        attributeName.hasAttribute(serverDifferences$jscomp$0)
+                      )
+                        (attributeName = attributeName.getAttribute(
+                          serverDifferences$jscomp$0
+                        )),
+                          checkAttributeStringCoercion(
+                            i,
+                            serverDifferences$jscomp$0
+                          ),
+                          (i = attributeName === "" + i ? i : attributeName);
+                      else {
+                        switch (typeof i) {
+                          case "function":
+                          case "symbol":
+                            break a;
+                          case "boolean":
+                            if (
+                              ((attributeName = serverDifferences$jscomp$0
+                                .toLowerCase()
+                                .slice(0, 5)),
+                              "data-" !== attributeName &&
+                                "aria-" !== attributeName)
+                            )
+                              break a;
+                        }
+                        i = void 0 === i ? void 0 : null;
+                      }
+                    else i = void 0;
+                    attributes ||
+                      warnForPropDifference(
+                        value,
+                        i,
+                        propKey,
+                        serverDifferences
+                      );
+                  }
+              }
+      0 < extraAttributes.size &&
+        !0 !== props.suppressHydrationWarning &&
+        warnForExtraAttributes(domElement, extraAttributes, serverDifferences);
+      return 0 === Object.keys(serverDifferences).length
+        ? null
+        : serverDifferences;
+    }
+    function propNamesListJoin(list, combinator) {
+      switch (list.length) {
+        case 0:
+          return "";
+        case 1:
+          return list[0];
+        case 2:
+          return list[0] + " " + combinator + " " + list[1];
+        default:
+          return (
+            list.slice(0, -1).join(", ") +
+            ", " +
+            combinator +
+            " " +
+            list[list.length - 1]
+          );
+      }
+    }
+    function getOwnerDocumentFromRootContainer(rootContainerElement) {
+      return 9 === rootContainerElement.nodeType
+        ? rootContainerElement
+        : rootContainerElement.ownerDocument;
+    }
+    function getOwnHostContext(namespaceURI) {
+      switch (namespaceURI) {
+        case SVG_NAMESPACE:
+          return HostContextNamespaceSvg;
+        case MATH_NAMESPACE:
+          return HostContextNamespaceMath;
+        default:
+          return HostContextNamespaceNone;
+      }
+    }
+    function getChildHostContextProd(parentNamespace, type) {
+      if (parentNamespace === HostContextNamespaceNone)
+        switch (type) {
+          case "svg":
+            return HostContextNamespaceSvg;
+          case "math":
+            return HostContextNamespaceMath;
+          default:
+            return HostContextNamespaceNone;
+        }
+      return parentNamespace === HostContextNamespaceSvg &&
+        "foreignObject" === type
+        ? HostContextNamespaceNone
+        : parentNamespace;
+    }
+    function shouldSetTextContent(type, props) {
+      return (
+        "textarea" === type ||
+        "noscript" === type ||
+        "string" === typeof props.children ||
+        "number" === typeof props.children ||
+        "bigint" === typeof props.children ||
+        ("object" === typeof props.dangerouslySetInnerHTML &&
+          null !== props.dangerouslySetInnerHTML &&
+          null != props.dangerouslySetInnerHTML.__html)
+      );
+    }
+    function shouldAttemptEagerTransition() {
+      var event = window.event;
+      if (event && "popstate" === event.type) {
+        if (event === currentPopstateTransitionEvent) return !1;
+        currentPopstateTransitionEvent = event;
+        return !0;
+      }
+      currentPopstateTransitionEvent = null;
+      return !1;
+    }
+    function handleErrorInNextTick(error) {
+      setTimeout(function () {
+        throw error;
+      });
+    }
+    function commitMount(domElement, type, newProps) {
+      switch (type) {
+        case "button":
+        case "input":
+        case "select":
+        case "textarea":
+          newProps.autoFocus && domElement.focus();
+          break;
+        case "img":
+          newProps.src
+            ? (domElement.src = newProps.src)
+            : newProps.srcSet && (domElement.srcset = newProps.srcSet);
+      }
+    }
+    function commitUpdate(domElement, type, oldProps, newProps) {
+      updateProperties(domElement, type, oldProps, newProps);
+      domElement[internalPropsKey] = newProps;
+    }
+    function resetTextContent(domElement) {
+      setTextContent(domElement, "");
+    }
+    function commitTextUpdate(textInstance, oldText, newText) {
+      textInstance.nodeValue = newText;
+    }
+    function isSingletonScope(type) {
+      return "head" === type;
+    }
+    function removeChild(parentInstance, child) {
+      parentInstance.removeChild(child);
+    }
+    function removeChildFromContainer(container, child) {
+      (9 === container.nodeType
+        ? container.body
+        : "HTML" === container.nodeName
+          ? container.ownerDocument.body
+          : container
+      ).removeChild(child);
+    }
+    function clearSuspenseBoundary(parentInstance, suspenseInstance) {
+      var node = suspenseInstance,
+        possiblePreambleContribution = 0,
+        depth = 0;
+      do {
+        var nextNode = node.nextSibling;
+        parentInstance.removeChild(node);
+        if (nextNode && 8 === nextNode.nodeType)
+          if (((node = nextNode.data), node === SUSPENSE_END_DATA)) {
+            if (
+              0 < possiblePreambleContribution &&
+              8 > possiblePreambleContribution
+            ) {
+              node = possiblePreambleContribution;
+              var ownerDocument = parentInstance.ownerDocument;
+              node & PREAMBLE_CONTRIBUTION_HTML &&
+                releaseSingletonInstance(ownerDocument.documentElement);
+              node & PREAMBLE_CONTRIBUTION_BODY &&
+                releaseSingletonInstance(ownerDocument.body);
+              if (node & PREAMBLE_CONTRIBUTION_HEAD)
+                for (
+                  node = ownerDocument.head,
+                    releaseSingletonInstance(node),
+                    ownerDocument = node.firstChild;
+                  ownerDocument;
+
+                ) {
+                  var nextNode$jscomp$0 = ownerDocument.nextSibling,
+                    nodeName = ownerDocument.nodeName;
+                  ownerDocument[internalHoistableMarker] ||
+                    "SCRIPT" === nodeName ||
+                    "STYLE" === nodeName ||
+                    ("LINK" === nodeName &&
+                      "stylesheet" === ownerDocument.rel.toLowerCase()) ||
+                    node.removeChild(ownerDocument);
+                  ownerDocument = nextNode$jscomp$0;
+                }
+            }
+            if (0 === depth) {
+              parentInstance.removeChild(nextNode);
+              retryIfBlockedOn(suspenseInstance);
+              return;
+            }
+            depth--;
+          } else
+            node === SUSPENSE_START_DATA ||
+            node === SUSPENSE_PENDING_START_DATA ||
+            node === SUSPENSE_FALLBACK_START_DATA
+              ? depth++
+              : (possiblePreambleContribution = node.charCodeAt(0) - 48);
+        else possiblePreambleContribution = 0;
+        node = nextNode;
+      } while (node);
+      retryIfBlockedOn(suspenseInstance);
+    }
+    function hideInstance(instance) {
+      instance = instance.style;
+      "function" === typeof instance.setProperty
+        ? instance.setProperty("display", "none", "important")
+        : (instance.display = "none");
+    }
+    function hideTextInstance(textInstance) {
+      textInstance.nodeValue = "";
+    }
+    function unhideInstance(instance, props) {
+      props = props[STYLE];
+      props =
+        void 0 !== props && null !== props && props.hasOwnProperty("display")
+          ? props.display
+          : null;
+      instance.style.display =
+        null == props || "boolean" === typeof props ? "" : ("" + props).trim();
+    }
+    function unhideTextInstance(textInstance, text) {
+      textInstance.nodeValue = text;
+    }
+    function clearContainerSparingly(container) {
+      var nextNode = container.firstChild;
+      nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);
+      for (; nextNode; ) {
+        var node = nextNode;
+        nextNode = nextNode.nextSibling;
+        switch (node.nodeName) {
+          case "HTML":
+          case "HEAD":
+          case "BODY":
+            clearContainerSparingly(node);
+            detachDeletedInstance(node);
+            continue;
+          case "SCRIPT":
+          case "STYLE":
+            continue;
+          case "LINK":
+            if ("stylesheet" === node.rel.toLowerCase()) continue;
+        }
+        container.removeChild(node);
+      }
+    }
+    function canHydrateInstance(instance, type, props, inRootOrSingleton) {
+      for (; 1 === instance.nodeType; ) {
+        var anyProps = props;
+        if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {
+          if (
+            !inRootOrSingleton &&
+            ("INPUT" !== instance.nodeName || "hidden" !== instance.type)
+          )
+            break;
+        } else if (!inRootOrSingleton)
+          if ("input" === type && "hidden" === instance.type) {
+            checkAttributeStringCoercion(anyProps.name, "name");
+            var name = null == anyProps.name ? null : "" + anyProps.name;
+            if (
+              "hidden" === anyProps.type &&
+              instance.getAttribute("name") === name
+            )
+              return instance;
+          } else return instance;
+        else if (!instance[internalHoistableMarker])
+          switch (type) {
+            case "meta":
+              if (!instance.hasAttribute("itemprop")) break;
+              return instance;
+            case "link":
+              name = instance.getAttribute("rel");
+              if (
+                "stylesheet" === name &&
+                instance.hasAttribute("data-precedence")
+              )
+                break;
+              else if (
+                name !== anyProps.rel ||
+                instance.getAttribute("href") !==
+                  (null == anyProps.href || "" === anyProps.href
+                    ? null
+                    : anyProps.href) ||
+                instance.getAttribute("crossorigin") !==
+                  (null == anyProps.crossOrigin
+                    ? null
+                    : anyProps.crossOrigin) ||
+                instance.getAttribute("title") !==
+                  (null == anyProps.title ? null : anyProps.title)
+              )
+                break;
+              return instance;
+            case "style":
+              if (instance.hasAttribute("data-precedence")) break;
+              return instance;
+            case "script":
+              name = instance.getAttribute("src");
+              if (
+                (name !== (null == anyProps.src ? null : anyProps.src) ||
+                  instance.getAttribute("type") !==
+                    (null == anyProps.type ? null : anyProps.type) ||
+                  instance.getAttribute("crossorigin") !==
+                    (null == anyProps.crossOrigin
+                      ? null
+                      : anyProps.crossOrigin)) &&
+                name &&
+                instance.hasAttribute("async") &&
+                !instance.hasAttribute("itemprop")
+              )
+                break;
+              return instance;
+            default:
+              return instance;
+          }
+        instance = getNextHydratable(instance.nextSibling);
+        if (null === instance) break;
+      }
+      return null;
+    }
+    function canHydrateTextInstance(instance, text, inRootOrSingleton) {
+      if ("" === text) return null;
+      for (; 3 !== instance.nodeType; ) {
+        if (
+          (1 !== instance.nodeType ||
+            "INPUT" !== instance.nodeName ||
+            "hidden" !== instance.type) &&
+          !inRootOrSingleton
+        )
+          return null;
+        instance = getNextHydratable(instance.nextSibling);
+        if (null === instance) return null;
+      }
+      return instance;
+    }
+    function isSuspenseInstanceFallback(instance) {
+      return (
+        instance.data === SUSPENSE_FALLBACK_START_DATA ||
+        (instance.data === SUSPENSE_PENDING_START_DATA &&
+          instance.ownerDocument.readyState === DOCUMENT_READY_STATE_COMPLETE)
+      );
+    }
+    function registerSuspenseInstanceRetry(instance, callback) {
+      var ownerDocument = instance.ownerDocument;
+      if (
+        instance.data !== SUSPENSE_PENDING_START_DATA ||
+        ownerDocument.readyState === DOCUMENT_READY_STATE_COMPLETE
+      )
+        callback();
+      else {
+        var listener = function () {
+          callback();
+          ownerDocument.removeEventListener("DOMContentLoaded", listener);
+        };
+        ownerDocument.addEventListener("DOMContentLoaded", listener);
+        instance._reactRetry = listener;
+      }
+    }
+    function getNextHydratable(node) {
+      for (; null != node; node = node.nextSibling) {
+        var nodeType = node.nodeType;
+        if (1 === nodeType || 3 === nodeType) break;
+        if (8 === nodeType) {
+          nodeType = node.data;
+          if (
+            nodeType === SUSPENSE_START_DATA ||
+            nodeType === SUSPENSE_FALLBACK_START_DATA ||
+            nodeType === SUSPENSE_PENDING_START_DATA ||
+            nodeType === FORM_STATE_IS_MATCHING ||
+            nodeType === FORM_STATE_IS_NOT_MATCHING
+          )
+            break;
+          if (nodeType === SUSPENSE_END_DATA) return null;
+        }
+      }
+      return node;
+    }
+    function describeHydratableInstanceForDevWarnings(instance) {
+      if (1 === instance.nodeType) {
+        for (
+          var JSCompiler_temp_const = instance.nodeName.toLowerCase(),
+            serverDifferences = {},
+            attributes = instance.attributes,
+            i = 0;
+          i < attributes.length;
+          i++
+        ) {
+          var attr = attributes[i];
+          serverDifferences[getPropNameFromAttributeName(attr.name)] =
+            "style" === attr.name.toLowerCase()
+              ? getStylesObjectFromElement(instance)
+              : attr.value;
+        }
+        return { type: JSCompiler_temp_const, props: serverDifferences };
+      }
+      return 8 === instance.nodeType
+        ? { type: "Suspense", props: {} }
+        : instance.nodeValue;
+    }
+    function diffHydratedTextForDevWarnings(textInstance, text, parentProps) {
+      return null === parentProps ||
+        !0 !== parentProps[SUPPRESS_HYDRATION_WARNING]
+        ? (textInstance.nodeValue === text
+            ? (textInstance = null)
+            : ((text = normalizeMarkupForTextOrAttribute(text)),
+              (textInstance =
+                normalizeMarkupForTextOrAttribute(textInstance.nodeValue) ===
+                text
+                  ? null
+                  : textInstance.nodeValue)),
+          textInstance)
+        : null;
+    }
+    function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {
+      suspenseInstance = suspenseInstance.nextSibling;
+      for (var depth = 0; suspenseInstance; ) {
+        if (8 === suspenseInstance.nodeType) {
+          var data = suspenseInstance.data;
+          if (data === SUSPENSE_END_DATA) {
+            if (0 === depth)
+              return getNextHydratable(suspenseInstance.nextSibling);
+            depth--;
+          } else
+            (data !== SUSPENSE_START_DATA &&
+              data !== SUSPENSE_FALLBACK_START_DATA &&
+              data !== SUSPENSE_PENDING_START_DATA) ||
+              depth++;
+        }
+        suspenseInstance = suspenseInstance.nextSibling;
+      }
+      return null;
+    }
+    function getParentSuspenseInstance(targetInstance) {
+      targetInstance = targetInstance.previousSibling;
+      for (var depth = 0; targetInstance; ) {
+        if (8 === targetInstance.nodeType) {
+          var data = targetInstance.data;
+          if (
+            data === SUSPENSE_START_DATA ||
+            data === SUSPENSE_FALLBACK_START_DATA ||
+            data === SUSPENSE_PENDING_START_DATA
+          ) {
+            if (0 === depth) return targetInstance;
+            depth--;
+          } else data === SUSPENSE_END_DATA && depth++;
+        }
+        targetInstance = targetInstance.previousSibling;
+      }
+      return null;
+    }
+    function commitHydratedContainer(container) {
+      retryIfBlockedOn(container);
+    }
+    function commitHydratedSuspenseInstance(suspenseInstance) {
+      retryIfBlockedOn(suspenseInstance);
+    }
+    function resolveSingletonInstance(
+      type,
+      props,
+      rootContainerInstance,
+      hostContext,
+      validateDOMNestingDev
+    ) {
+      validateDOMNestingDev &&
+        validateDOMNesting(type, hostContext.ancestorInfo);
+      props = getOwnerDocumentFromRootContainer(rootContainerInstance);
+      switch (type) {
+        case "html":
+          type = props.documentElement;
+          if (!type)
+            throw Error(
+              "React expected an <html> element (document.documentElement) to exist in the Document but one was not found. React never removes the documentElement for any Document it renders into so the cause is likely in some other script running on this page."
+            );
+          return type;
+        case "head":
+          type = props.head;
+          if (!type)
+            throw Error(
+              "React expected a <head> element (document.head) to exist in the Document but one was not found. React never removes the head for any Document it renders into so the cause is likely in some other script running on this page."
+            );
+          return type;
+        case "body":
+          type = props.body;
+          if (!type)
+            throw Error(
+              "React expected a <body> element (document.body) to exist in the Document but one was not found. React never removes the body for any Document it renders into so the cause is likely in some other script running on this page."
+            );
+          return type;
+        default:
+          throw Error(
+            "resolveSingletonInstance was called with an element type that is not supported. This is a bug in React."
+          );
+      }
+    }
+    function acquireSingletonInstance(
+      type,
+      props,
+      instance,
+      internalInstanceHandle
+    ) {
+      if (
+        !instance[internalContainerInstanceKey] &&
+        getInstanceFromNode(instance)
+      ) {
+        var tagName = instance.tagName.toLowerCase();
+        console.error(
+          "You are mounting a new %s component when a previous one has not first unmounted. It is an error to render more than one %s component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.",
+          tagName,
+          tagName,
+          tagName
+        );
+      }
+      switch (type) {
+        case "html":
+        case "head":
+        case "body":
+          break;
+        default:
+          console.error(
+            "acquireSingletonInstance was called with an element type that is not supported. This is a bug in React."
+          );
+      }
+      for (tagName = instance.attributes; tagName.length; )
+        instance.removeAttributeNode(tagName[0]);
+      setInitialProperties(instance, type, props);
+      instance[internalInstanceKey] = internalInstanceHandle;
+      instance[internalPropsKey] = props;
+    }
+    function releaseSingletonInstance(instance) {
+      for (var attributes = instance.attributes; attributes.length; )
+        instance.removeAttributeNode(attributes[0]);
+      detachDeletedInstance(instance);
+    }
+    function getHoistableRoot(container) {
+      return "function" === typeof container.getRootNode
+        ? container.getRootNode()
+        : 9 === container.nodeType
+          ? container
+          : container.ownerDocument;
+    }
+    function preconnectAs(rel, href, crossOrigin) {
+      var ownerDocument = globalDocument;
+      if (ownerDocument && "string" === typeof href && href) {
+        var limitedEscapedHref =
+          escapeSelectorAttributeValueInsideDoubleQuotes(href);
+        limitedEscapedHref =
+          'link[rel="' + rel + '"][href="' + limitedEscapedHref + '"]';
+        "string" === typeof crossOrigin &&
+          (limitedEscapedHref += '[crossorigin="' + crossOrigin + '"]');
+        preconnectsSet.has(limitedEscapedHref) ||
+          (preconnectsSet.add(limitedEscapedHref),
+          (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),
+          null === ownerDocument.querySelector(limitedEscapedHref) &&
+            ((href = ownerDocument.createElement("link")),
+            setInitialProperties(href, "link", rel),
+            markNodeAsHoistable(href),
+            ownerDocument.head.appendChild(href)));
+      }
+    }
+    function getResource(type, currentProps, pendingProps, currentResource) {
+      var resourceRoot = (resourceRoot = rootInstanceStackCursor.current)
+        ? getHoistableRoot(resourceRoot)
+        : null;
+      if (!resourceRoot)
+        throw Error(
+          '"resourceRoot" was expected to exist. This is a bug in React.'
+        );
+      switch (type) {
+        case "meta":
+        case "title":
+          return null;
+        case "style":
+          return "string" === typeof pendingProps.precedence &&
+            "string" === typeof pendingProps.href
+            ? ((pendingProps = getStyleKey(pendingProps.href)),
+              (currentProps =
+                getResourcesFromRoot(resourceRoot).hoistableStyles),
+              (currentResource = currentProps.get(pendingProps)),
+              currentResource ||
+                ((currentResource = {
+                  type: "style",
+                  instance: null,
+                  count: 0,
+                  state: null
+                }),
+                currentProps.set(pendingProps, currentResource)),
+              currentResource)
+            : { type: "void", instance: null, count: 0, state: null };
+        case "link":
+          if (
+            "stylesheet" === pendingProps.rel &&
+            "string" === typeof pendingProps.href &&
+            "string" === typeof pendingProps.precedence
+          ) {
+            type = getStyleKey(pendingProps.href);
+            var _styles = getResourcesFromRoot(resourceRoot).hoistableStyles,
+              _resource = _styles.get(type);
+            if (
+              !_resource &&
+              ((resourceRoot = resourceRoot.ownerDocument || resourceRoot),
+              (_resource = {
+                type: "stylesheet",
+                instance: null,
+                count: 0,
+                state: { loading: NotLoaded, preload: null }
+              }),
+              _styles.set(type, _resource),
+              (_styles = resourceRoot.querySelector(
+                getStylesheetSelectorFromKey(type)
+              )) &&
+                !_styles._p &&
+                ((_resource.instance = _styles),
+                (_resource.state.loading = Loaded | Inserted)),
+              !preloadPropsMap.has(type))
+            ) {
+              var preloadProps = {
+                rel: "preload",
+                as: "style",
+                href: pendingProps.href,
+                crossOrigin: pendingProps.crossOrigin,
+                integrity: pendingProps.integrity,
+                media: pendingProps.media,
+                hrefLang: pendingProps.hrefLang,
+                referrerPolicy: pendingProps.referrerPolicy
+              };
+              preloadPropsMap.set(type, preloadProps);
+              _styles ||
+                preloadStylesheet(
+                  resourceRoot,
+                  type,
+                  preloadProps,
+                  _resource.state
+                );
+            }
+            if (currentProps && null === currentResource)
+              throw (
+                ((pendingProps =
+                  "\n\n  - " +
+                  describeLinkForResourceErrorDEV(currentProps) +
+                  "\n  + " +
+                  describeLinkForResourceErrorDEV(pendingProps)),
+                Error(
+                  "Expected <link> not to update to be updated to a stylesheet with precedence. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key." +
+                    pendingProps
+                ))
+              );
+            return _resource;
+          }
+          if (currentProps && null !== currentResource)
+            throw (
+              ((pendingProps =
+                "\n\n  - " +
+                describeLinkForResourceErrorDEV(currentProps) +
+                "\n  + " +
+                describeLinkForResourceErrorDEV(pendingProps)),
+              Error(
+                "Expected stylesheet with precedence to not be updated to a different kind of <link>. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key." +
+                  pendingProps
+              ))
+            );
+          return null;
+        case "script":
+          return (
+            (currentProps = pendingProps.async),
+            (pendingProps = pendingProps.src),
+            "string" === typeof pendingProps &&
+            currentProps &&
+            "function" !== typeof currentProps &&
+            "symbol" !== typeof currentProps
+              ? ((pendingProps = getScriptKey(pendingProps)),
+                (currentProps =
+                  getResourcesFromRoot(resourceRoot).hoistableScripts),
+                (currentResource = currentProps.get(pendingProps)),
+                currentResource ||
+                  ((currentResource = {
+                    type: "script",
+                    instance: null,
+                    count: 0,
+                    state: null
+                  }),
+                  currentProps.set(pendingProps, currentResource)),
+                currentResource)
+              : { type: "void", instance: null, count: 0, state: null }
+          );
+        default:
+          throw Error(
+            'getResource encountered a type it did not expect: "' +
+              type +
+              '". this is a bug in React.'
+          );
+      }
+    }
+    function describeLinkForResourceErrorDEV(props) {
+      var describedProps = 0,
+        description = "<link";
+      "string" === typeof props.rel
+        ? (describedProps++, (description += ' rel="' + props.rel + '"'))
+        : hasOwnProperty.call(props, "rel") &&
+          (describedProps++,
+          (description +=
+            ' rel="' +
+            (null === props.rel ? "null" : "invalid type " + typeof props.rel) +
+            '"'));
+      "string" === typeof props.href
+        ? (describedProps++, (description += ' href="' + props.href + '"'))
+        : hasOwnProperty.call(props, "href") &&
+          (describedProps++,
+          (description +=
+            ' href="' +
+            (null === props.href
+              ? "null"
+              : "invalid type " + typeof props.href) +
+            '"'));
+      "string" === typeof props.precedence
+        ? (describedProps++,
+          (description += ' precedence="' + props.precedence + '"'))
+        : hasOwnProperty.call(props, "precedence") &&
+          (describedProps++,
+          (description +=
+            " precedence={" +
+            (null === props.precedence
+              ? "null"
+              : "invalid type " + typeof props.precedence) +
+            "}"));
+      Object.getOwnPropertyNames(props).length > describedProps &&
+        (description += " ...");
+      return description + " />";
+    }
+    function getStyleKey(href) {
+      return (
+        'href="' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '"'
+      );
+    }
+    function getStylesheetSelectorFromKey(key) {
+      return 'link[rel="stylesheet"][' + key + "]";
+    }
+    function stylesheetPropsFromRawProps(rawProps) {
+      return assign({}, rawProps, {
+        "data-precedence": rawProps.precedence,
+        precedence: null
+      });
+    }
+    function preloadStylesheet(ownerDocument, key, preloadProps, state) {
+      ownerDocument.querySelector(
+        'link[rel="preload"][as="style"][' + key + "]"
+      )
+        ? (state.loading = Loaded)
+        : ((key = ownerDocument.createElement("link")),
+          (state.preload = key),
+          key.addEventListener("load", function () {
+            return (state.loading |= Loaded);
+          }),
+          key.addEventListener("error", function () {
+            return (state.loading |= Errored);
+          }),
+          setInitialProperties(key, "link", preloadProps),
+          markNodeAsHoistable(key),
+          ownerDocument.head.appendChild(key));
+    }
+    function getScriptKey(src) {
+      return (
+        '[src="' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '"]'
+      );
+    }
+    function getScriptSelectorFromKey(key) {
+      return "script[async]" + key;
+    }
+    function acquireResource(hoistableRoot, resource, props) {
+      resource.count++;
+      if (null === resource.instance)
+        switch (resource.type) {
+          case "style":
+            var instance = hoistableRoot.querySelector(
+              'style[data-href~="' +
+                escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +
+                '"]'
+            );
+            if (instance)
+              return (
+                (resource.instance = instance),
+                markNodeAsHoistable(instance),
+                instance
+              );
+            var styleProps = assign({}, props, {
+              "data-href": props.href,
+              "data-precedence": props.precedence,
+              href: null,
+              precedence: null
+            });
+            instance = (
+              hoistableRoot.ownerDocument || hoistableRoot
+            ).createElement("style");
+            markNodeAsHoistable(instance);
+            setInitialProperties(instance, "style", styleProps);
+            insertStylesheet(instance, props.precedence, hoistableRoot);
+            return (resource.instance = instance);
+          case "stylesheet":
+            styleProps = getStyleKey(props.href);
+            var _instance = hoistableRoot.querySelector(
+              getStylesheetSelectorFromKey(styleProps)
+            );
+            if (_instance)
+              return (
+                (resource.state.loading |= Inserted),
+                (resource.instance = _instance),
+                markNodeAsHoistable(_instance),
+                _instance
+              );
+            instance = stylesheetPropsFromRawProps(props);
+            (styleProps = preloadPropsMap.get(styleProps)) &&
+              adoptPreloadPropsForStylesheet(instance, styleProps);
+            _instance = (
+              hoistableRoot.ownerDocument || hoistableRoot
+            ).createElement("link");
+            markNodeAsHoistable(_instance);
+            var linkInstance = _instance;
+            linkInstance._p = new Promise(function (resolve, reject) {
+              linkInstance.onload = resolve;
+              linkInstance.onerror = reject;
+            });
+            setInitialProperties(_instance, "link", instance);
+            resource.state.loading |= Inserted;
+            insertStylesheet(_instance, props.precedence, hoistableRoot);
+            return (resource.instance = _instance);
+          case "script":
+            _instance = getScriptKey(props.src);
+            if (
+              (styleProps = hoistableRoot.querySelector(
+                getScriptSelectorFromKey(_instance)
+              ))
+            )
+              return (
+                (resource.instance = styleProps),
+                markNodeAsHoistable(styleProps),
+                styleProps
+              );
+            instance = props;
+            if ((styleProps = preloadPropsMap.get(_instance)))
+              (instance = assign({}, props)),
+                adoptPreloadPropsForScript(instance, styleProps);
+            hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;
+            styleProps = hoistableRoot.createElement("script");
+            markNodeAsHoistable(styleProps);
+            setInitialProperties(styleProps, "link", instance);
+            hoistableRoot.head.appendChild(styleProps);
+            return (resource.instance = styleProps);
+          case "void":
+            return null;
+          default:
+            throw Error(
+              'acquireResource encountered a resource type it did not expect: "' +
+                resource.type +
+                '". this is a bug in React.'
+            );
+        }
+      else
+        "stylesheet" === resource.type &&
+          (resource.state.loading & Inserted) === NotLoaded &&
+          ((instance = resource.instance),
+          (resource.state.loading |= Inserted),
+          insertStylesheet(instance, props.precedence, hoistableRoot));
+      return resource.instance;
+    }
+    function insertStylesheet(instance, precedence, root) {
+      for (
+        var nodes = root.querySelectorAll(
+            'link[rel="stylesheet"][data-precedence],style[data-precedence]'
+          ),
+          last = nodes.length ? nodes[nodes.length - 1] : null,
+          prior = last,
+          i = 0;
+        i < nodes.length;
+        i++
+      ) {
+        var node = nodes[i];
+        if (node.dataset.precedence === precedence) prior = node;
+        else if (prior !== last) break;
+      }
+      prior
+        ? prior.parentNode.insertBefore(instance, prior.nextSibling)
+        : ((precedence = 9 === root.nodeType ? root.head : root),
+          precedence.insertBefore(instance, precedence.firstChild));
+    }
+    function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {
+      null == stylesheetProps.crossOrigin &&
+        (stylesheetProps.crossOrigin = preloadProps.crossOrigin);
+      null == stylesheetProps.referrerPolicy &&
+        (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);
+      null == stylesheetProps.title &&
+        (stylesheetProps.title = preloadProps.title);
+    }
+    function adoptPreloadPropsForScript(scriptProps, preloadProps) {
+      null == scriptProps.crossOrigin &&
+        (scriptProps.crossOrigin = preloadProps.crossOrigin);
+      null == scriptProps.referrerPolicy &&
+        (scriptProps.referrerPolicy = preloadProps.referrerPolicy);
+      null == scriptProps.integrity &&
+        (scriptProps.integrity = preloadProps.integrity);
+    }
+    function getHydratableHoistableCache(type, keyAttribute, ownerDocument) {
+      if (null === tagCaches) {
+        var cache = new Map();
+        var caches = (tagCaches = new Map());
+        caches.set(ownerDocument, cache);
+      } else
+        (caches = tagCaches),
+          (cache = caches.get(ownerDocument)),
+          cache || ((cache = new Map()), caches.set(ownerDocument, cache));
+      if (cache.has(type)) return cache;
+      cache.set(type, null);
+      ownerDocument = ownerDocument.getElementsByTagName(type);
+      for (caches = 0; caches < ownerDocument.length; caches++) {
+        var node = ownerDocument[caches];
+        if (
+          !(
+            node[internalHoistableMarker] ||
+            node[internalInstanceKey] ||
+            ("link" === type && "stylesheet" === node.getAttribute("rel"))
+          ) &&
+          node.namespaceURI !== SVG_NAMESPACE
+        ) {
+          var nodeKey = node.getAttribute(keyAttribute) || "";
+          nodeKey = type + nodeKey;
+          var existing = cache.get(nodeKey);
+          existing ? existing.push(node) : cache.set(nodeKey, [node]);
+        }
+      }
+      return cache;
+    }
+    function mountHoistable(hoistableRoot, type, instance) {
+      hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;
+      hoistableRoot.head.insertBefore(
+        instance,
+        "title" === type ? hoistableRoot.querySelector("head > title") : null
+      );
+    }
+    function isHostHoistableType(type, props, hostContext) {
+      var outsideHostContainerContext =
+        !hostContext.ancestorInfo.containerTagInScope;
+      if (
+        hostContext.context === HostContextNamespaceSvg ||
+        null != props.itemProp
+      )
+        return (
+          !outsideHostContainerContext ||
+            null == props.itemProp ||
+            ("meta" !== type &&
+              "title" !== type &&
+              "style" !== type &&
+              "link" !== type &&
+              "script" !== type) ||
+            console.error(
+              "Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop. Otherwise, try moving this tag into the <head> or <body> of the Document.",
+              type,
+              type
+            ),
+          !1
+        );
+      switch (type) {
+        case "meta":
+        case "title":
+          return !0;
+        case "style":
+          if (
+            "string" !== typeof props.precedence ||
+            "string" !== typeof props.href ||
+            "" === props.href
+          ) {
+            outsideHostContainerContext &&
+              console.error(
+                'Cannot render a <style> outside the main document without knowing its precedence and a unique href key. React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that does not conflict with the `href` values used in any other hoisted <style> or <link rel="stylesheet" ...> tags.  Note that hoisting <style> tags is considered an advanced feature that most will not use directly. Consider moving the <style> tag to the <head> or consider adding a `precedence="default"` and `href="some unique resource identifier"`.'
+              );
+            break;
+          }
+          return !0;
+        case "link":
+          if (
+            "string" !== typeof props.rel ||
+            "string" !== typeof props.href ||
+            "" === props.href ||
+            props.onLoad ||
+            props.onError
+          ) {
+            if (
+              "stylesheet" === props.rel &&
+              "string" === typeof props.precedence
+            ) {
+              type = props.href;
+              var onError = props.onError,
+                disabled = props.disabled;
+              hostContext = [];
+              props.onLoad && hostContext.push("`onLoad`");
+              onError && hostContext.push("`onError`");
+              null != disabled && hostContext.push("`disabled`");
+              onError = propNamesListJoin(hostContext, "and");
+              onError += 1 === hostContext.length ? " prop" : " props";
+              disabled =
+                1 === hostContext.length ? "an " + onError : "the " + onError;
+              hostContext.length &&
+                console.error(
+                  'React encountered a <link rel="stylesheet" href="%s" ... /> with a `precedence` prop that also included %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',
+                  type,
+                  disabled,
+                  onError
+                );
+            }
+            outsideHostContainerContext &&
+              ("string" !== typeof props.rel ||
+              "string" !== typeof props.href ||
+              "" === props.href
+                ? console.error(
+                    "Cannot render a <link> outside the main document without a `rel` and `href` prop. Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag"
+                  )
+                : (props.onError || props.onLoad) &&
+                  console.error(
+                    "Cannot render a <link> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>."
+                  ));
+            break;
+          }
+          switch (props.rel) {
+            case "stylesheet":
+              return (
+                (type = props.precedence),
+                (props = props.disabled),
+                "string" !== typeof type &&
+                  outsideHostContainerContext &&
+                  console.error(
+                    'Cannot render a <link rel="stylesheet" /> outside the main document without knowing its precedence. Consider adding precedence="default" or moving it into the root <head> tag.'
+                  ),
+                "string" === typeof type && null == props
+              );
+            default:
+              return !0;
+          }
+        case "script":
+          type =
+            props.async &&
+            "function" !== typeof props.async &&
+            "symbol" !== typeof props.async;
+          if (
+            !type ||
+            props.onLoad ||
+            props.onError ||
+            !props.src ||
+            "string" !== typeof props.src
+          ) {
+            outsideHostContainerContext &&
+              (type
+                ? props.onLoad || props.onError
+                  ? console.error(
+                      "Cannot render a <script> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>."
+                    )
+                  : console.error(
+                      "Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop. Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or somewhere in the <body>."
+                    )
+                : console.error(
+                    'Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async="" or moving it into the root <head> tag.'
+                  ));
+            break;
+          }
+          return !0;
+        case "noscript":
+        case "template":
+          outsideHostContainerContext &&
+            console.error(
+              "Cannot render <%s> outside the main document. Try moving it into the root <head> tag.",
+              type
+            );
+      }
+      return !1;
+    }
+    function preloadResource(resource) {
+      return "stylesheet" === resource.type &&
+        (resource.state.loading & Settled) === NotLoaded
+        ? !1
+        : !0;
+    }
+    function noop$1() {}
+    function suspendResource(hoistableRoot, resource, props) {
+      if (null === suspendedState)
+        throw Error(
+          "Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug."
+        );
+      var state = suspendedState;
+      if (
+        "stylesheet" === resource.type &&
+        ("string" !== typeof props.media ||
+          !1 !== matchMedia(props.media).matches) &&
+        (resource.state.loading & Inserted) === NotLoaded
+      ) {
+        if (null === resource.instance) {
+          var key = getStyleKey(props.href),
+            instance = hoistableRoot.querySelector(
+              getStylesheetSelectorFromKey(key)
+            );
+          if (instance) {
+            hoistableRoot = instance._p;
+            null !== hoistableRoot &&
+              "object" === typeof hoistableRoot &&
+              "function" === typeof hoistableRoot.then &&
+              (state.count++,
+              (state = onUnsuspend.bind(state)),
+              hoistableRoot.then(state, state));
+            resource.state.loading |= Inserted;
+            resource.instance = instance;
+            markNodeAsHoistable(instance);
+            return;
+          }
+          instance = hoistableRoot.ownerDocument || hoistableRoot;
+          props = stylesheetPropsFromRawProps(props);
+          (key = preloadPropsMap.get(key)) &&
+            adoptPreloadPropsForStylesheet(props, key);
+          instance = instance.createElement("link");
+          markNodeAsHoistable(instance);
+          var linkInstance = instance;
+          linkInstance._p = new Promise(function (resolve, reject) {
+            linkInstance.onload = resolve;
+            linkInstance.onerror = reject;
+          });
+          setInitialProperties(instance, "link", props);
+          resource.instance = instance;
+        }
+        null === state.stylesheets && (state.stylesheets = new Map());
+        state.stylesheets.set(resource, hoistableRoot);
+        (hoistableRoot = resource.state.preload) &&
+          (resource.state.loading & Settled) === NotLoaded &&
+          (state.count++,
+          (resource = onUnsuspend.bind(state)),
+          hoistableRoot.addEventListener("load", resource),
+          hoistableRoot.addEventListener("error", resource));
+      }
+    }
+    function waitForCommitToBeReady() {
+      if (null === suspendedState)
+        throw Error(
+          "Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug."
+        );
+      var state = suspendedState;
+      state.stylesheets &&
+        0 === state.count &&
+        insertSuspendedStylesheets(state, state.stylesheets);
+      return 0 < state.count
+        ? function (commit) {
+            var stylesheetTimer = setTimeout(function () {
+              state.stylesheets &&
+                insertSuspendedStylesheets(state, state.stylesheets);
+              if (state.unsuspend) {
+                var unsuspend = state.unsuspend;
+                state.unsuspend = null;
+                unsuspend();
+              }
+            }, 6e4);
+            state.unsuspend = commit;
+            return function () {
+              state.unsuspend = null;
+              clearTimeout(stylesheetTimer);
+            };
+          }
+        : null;
+    }
+    function onUnsuspend() {
+      this.count--;
+      if (0 === this.count)
+        if (this.stylesheets)
+          insertSuspendedStylesheets(this, this.stylesheets);
+        else if (this.unsuspend) {
+          var unsuspend = this.unsuspend;
+          this.unsuspend = null;
+          unsuspend();
+        }
+    }
+    function insertSuspendedStylesheets(state, resources) {
+      state.stylesheets = null;
+      null !== state.unsuspend &&
+        (state.count++,
+        (precedencesByRoot = new Map()),
+        resources.forEach(insertStylesheetIntoRoot, state),
+        (precedencesByRoot = null),
+        onUnsuspend.call(state));
+    }
+    function insertStylesheetIntoRoot(root, resource) {
+      if (!(resource.state.loading & Inserted)) {
+        var precedences = precedencesByRoot.get(root);
+        if (precedences) var last = precedences.get(LAST_PRECEDENCE);
+        else {
+          precedences = new Map();
+          precedencesByRoot.set(root, precedences);
+          for (
+            var nodes = root.querySelectorAll(
+                "link[data-precedence],style[data-precedence]"
+              ),
+              i = 0;
+            i < nodes.length;
+            i++
+          ) {
+            var node = nodes[i];
+            if (
+              "LINK" === node.nodeName ||
+              "not all" !== node.getAttribute("media")
+            )
+              precedences.set(node.dataset.precedence, node), (last = node);
+          }
+          last && precedences.set(LAST_PRECEDENCE, last);
+        }
+        nodes = resource.instance;
+        node = nodes.getAttribute("data-precedence");
+        i = precedences.get(node) || last;
+        i === last && precedences.set(LAST_PRECEDENCE, nodes);
+        precedences.set(node, nodes);
+        this.count++;
+        last = onUnsuspend.bind(this);
+        nodes.addEventListener("load", last);
+        nodes.addEventListener("error", last);
+        i
+          ? i.parentNode.insertBefore(nodes, i.nextSibling)
+          : ((root = 9 === root.nodeType ? root.head : root),
+            root.insertBefore(nodes, root.firstChild));
+        resource.state.loading |= Inserted;
+      }
+    }
+    function FiberRootNode(
+      containerInfo,
+      tag,
+      hydrate,
+      identifierPrefix,
+      onUncaughtError,
+      onCaughtError,
+      onRecoverableError,
+      formState
+    ) {
+      this.tag = 1;
+      this.containerInfo = containerInfo;
+      this.pingCache = this.current = this.pendingChildren = null;
+      this.timeoutHandle = noTimeout;
+      this.callbackNode =
+        this.next =
+        this.pendingContext =
+        this.context =
+        this.cancelPendingCommit =
+          null;
+      this.callbackPriority = 0;
+      this.expirationTimes = createLaneMap(-1);
+      this.entangledLanes =
+        this.shellSuspendCounter =
+        this.errorRecoveryDisabledLanes =
+        this.expiredLanes =
+        this.warmLanes =
+        this.pingedLanes =
+        this.suspendedLanes =
+        this.pendingLanes =
+          0;
+      this.entanglements = createLaneMap(0);
+      this.hiddenUpdates = createLaneMap(null);
+      this.identifierPrefix = identifierPrefix;
+      this.onUncaughtError = onUncaughtError;
+      this.onCaughtError = onCaughtError;
+      this.onRecoverableError = onRecoverableError;
+      this.pooledCache = null;
+      this.pooledCacheLanes = 0;
+      this.formState = formState;
+      this.incompleteTransitions = new Map();
+      this.passiveEffectDuration = this.effectDuration = -0;
+      this.memoizedUpdaters = new Set();
+      containerInfo = this.pendingUpdatersLaneMap = [];
+      for (tag = 0; 31 > tag; tag++) containerInfo.push(new Set());
+      this._debugRootType = hydrate ? "hydrateRoot()" : "createRoot()";
+    }
+    function createFiberRoot(
+      containerInfo,
+      tag,
+      hydrate,
+      initialChildren,
+      hydrationCallbacks,
+      isStrictMode,
+      identifierPrefix,
+      onUncaughtError,
+      onCaughtError,
+      onRecoverableError,
+      transitionCallbacks,
+      formState
+    ) {
+      containerInfo = new FiberRootNode(
+        containerInfo,
+        tag,
+        hydrate,
+        identifierPrefix,
+        onUncaughtError,
+        onCaughtError,
+        onRecoverableError,
+        formState
+      );
+      tag = ConcurrentMode;
+      !0 === isStrictMode && (tag |= StrictLegacyMode | StrictEffectsMode);
+      isDevToolsPresent && (tag |= ProfileMode);
+      isStrictMode = createFiber(3, null, null, tag);
+      containerInfo.current = isStrictMode;
+      isStrictMode.stateNode = containerInfo;
+      tag = createCache();
+      retainCache(tag);
+      containerInfo.pooledCache = tag;
+      retainCache(tag);
+      isStrictMode.memoizedState = {
+        element: initialChildren,
+        isDehydrated: hydrate,
+        cache: tag
+      };
+      initializeUpdateQueue(isStrictMode);
+      return containerInfo;
+    }
+    function createPortal$1(children, containerInfo, implementation) {
+      var key =
+        3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;
+      willCoercionThrow(key) &&
+        (console.error(
+          "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
+          typeName(key)
+        ),
+        testStringCoercion(key));
+      return {
+        $$typeof: REACT_PORTAL_TYPE,
+        key: null == key ? null : "" + key,
+        children: children,
+        containerInfo: containerInfo,
+        implementation: implementation
+      };
+    }
+    function getContextForSubtree(parentComponent) {
+      if (!parentComponent) return emptyContextObject;
+      parentComponent = emptyContextObject;
+      return parentComponent;
+    }
+    function updateContainerImpl(
+      rootFiber,
+      lane,
+      element,
+      container,
+      parentComponent,
+      callback
+    ) {
+      if (
+        injectedHook &&
+        "function" === typeof injectedHook.onScheduleFiberRoot
+      )
+        try {
+          injectedHook.onScheduleFiberRoot(rendererID, container, element);
+        } catch (err) {
+          hasLoggedError ||
+            ((hasLoggedError = !0),
+            console.error(
+              "React instrumentation encountered an error: %s",
+              err
+            ));
+        }
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markRenderScheduled &&
+        injectedProfilingHooks.markRenderScheduled(lane);
+      parentComponent = getContextForSubtree(parentComponent);
+      null === container.context
+        ? (container.context = parentComponent)
+        : (container.pendingContext = parentComponent);
+      isRendering &&
+        null !== current &&
+        !didWarnAboutNestedUpdates &&
+        ((didWarnAboutNestedUpdates = !0),
+        console.error(
+          "Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.\n\nCheck the render method of %s.",
+          getComponentNameFromFiber(current) || "Unknown"
+        ));
+      container = createUpdate(lane);
+      container.payload = { element: element };
+      callback = void 0 === callback ? null : callback;
+      null !== callback &&
+        ("function" !== typeof callback &&
+          console.error(
+            "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+            callback
+          ),
+        (container.callback = callback));
+      element = enqueueUpdate(rootFiber, container, lane);
+      null !== element &&
+        (scheduleUpdateOnFiber(element, rootFiber, lane),
+        entangleTransitions(element, rootFiber, lane));
+    }
+    function markRetryLaneImpl(fiber, retryLane) {
+      fiber = fiber.memoizedState;
+      if (null !== fiber && null !== fiber.dehydrated) {
+        var a = fiber.retryLane;
+        fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;
+      }
+    }
+    function markRetryLaneIfNotHydrated(fiber, retryLane) {
+      markRetryLaneImpl(fiber, retryLane);
+      (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);
+    }
+    function attemptContinuousHydration(fiber) {
+      if (13 === fiber.tag) {
+        var root = enqueueConcurrentRenderForLane(fiber, 67108864);
+        null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);
+        markRetryLaneIfNotHydrated(fiber, 67108864);
+      }
+    }
+    function getCurrentFiberForDevTools() {
+      return current;
+    }
+    function getLaneLabelMap() {
+      for (var map = new Map(), lane = 1, index = 0; 31 > index; index++) {
+        var label = getLabelForLane(lane);
+        map.set(lane, label);
+        lane *= 2;
+      }
+      return map;
+    }
+    function dispatchDiscreteEvent(
+      domEventName,
+      eventSystemFlags,
+      container,
+      nativeEvent
+    ) {
+      var prevTransition = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      var previousPriority = ReactDOMSharedInternals.p;
+      try {
+        (ReactDOMSharedInternals.p = DiscreteEventPriority),
+          dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
+      } finally {
+        (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = prevTransition);
+      }
+    }
+    function dispatchContinuousEvent(
+      domEventName,
+      eventSystemFlags,
+      container,
+      nativeEvent
+    ) {
+      var prevTransition = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      var previousPriority = ReactDOMSharedInternals.p;
+      try {
+        (ReactDOMSharedInternals.p = ContinuousEventPriority),
+          dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
+      } finally {
+        (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = prevTransition);
+      }
+    }
+    function dispatchEvent(
+      domEventName,
+      eventSystemFlags,
+      targetContainer,
+      nativeEvent
+    ) {
+      if (_enabled) {
+        var blockedOn = findInstanceBlockingEvent(nativeEvent);
+        if (null === blockedOn)
+          dispatchEventForPluginEventSystem(
+            domEventName,
+            eventSystemFlags,
+            nativeEvent,
+            return_targetInst,
+            targetContainer
+          ),
+            clearIfContinuousEvent(domEventName, nativeEvent);
+        else if (
+          queueIfContinuousEvent(
+            blockedOn,
+            domEventName,
+            eventSystemFlags,
+            targetContainer,
+            nativeEvent
+          )
+        )
+          nativeEvent.stopPropagation();
+        else if (
+          (clearIfContinuousEvent(domEventName, nativeEvent),
+          eventSystemFlags & 4 &&
+            -1 < discreteReplayableEvents.indexOf(domEventName))
+        ) {
+          for (; null !== blockedOn; ) {
+            var fiber = getInstanceFromNode(blockedOn);
+            if (null !== fiber)
+              switch (fiber.tag) {
+                case 3:
+                  fiber = fiber.stateNode;
+                  if (fiber.current.memoizedState.isDehydrated) {
+                    var lanes = getHighestPriorityLanes(fiber.pendingLanes);
+                    if (0 !== lanes) {
+                      var root = fiber;
+                      root.pendingLanes |= 2;
+                      for (root.entangledLanes |= 2; lanes; ) {
+                        var lane = 1 << (31 - clz32(lanes));
+                        root.entanglements[1] |= lane;
+                        lanes &= ~lane;
+                      }
+                      ensureRootIsScheduled(fiber);
+                      (executionContext & (RenderContext | CommitContext)) ===
+                        NoContext &&
+                        ((workInProgressRootRenderTargetTime =
+                          now$1() + RENDER_TIMEOUT_MS),
+                        flushSyncWorkAcrossRoots_impl(0, !1));
+                    }
+                  }
+                  break;
+                case 13:
+                  (root = enqueueConcurrentRenderForLane(fiber, 2)),
+                    null !== root && scheduleUpdateOnFiber(root, fiber, 2),
+                    flushSyncWork$1(),
+                    markRetryLaneIfNotHydrated(fiber, 2);
+              }
+            fiber = findInstanceBlockingEvent(nativeEvent);
+            null === fiber &&
+              dispatchEventForPluginEventSystem(
+                domEventName,
+                eventSystemFlags,
+                nativeEvent,
+                return_targetInst,
+                targetContainer
+              );
+            if (fiber === blockedOn) break;
+            blockedOn = fiber;
+          }
+          null !== blockedOn && nativeEvent.stopPropagation();
+        } else
+          dispatchEventForPluginEventSystem(
+            domEventName,
+            eventSystemFlags,
+            nativeEvent,
+            null,
+            targetContainer
+          );
+      }
+    }
+    function findInstanceBlockingEvent(nativeEvent) {
+      nativeEvent = getEventTarget(nativeEvent);
+      return findInstanceBlockingTarget(nativeEvent);
+    }
+    function findInstanceBlockingTarget(targetNode) {
+      return_targetInst = null;
+      targetNode = getClosestInstanceFromNode(targetNode);
+      if (null !== targetNode) {
+        var nearestMounted = getNearestMountedFiber(targetNode);
+        if (null === nearestMounted) targetNode = null;
+        else {
+          var tag = nearestMounted.tag;
+          if (13 === tag) {
+            targetNode = getSuspenseInstanceFromFiber(nearestMounted);
+            if (null !== targetNode) return targetNode;
+            targetNode = null;
+          } else if (3 === tag) {
+            if (nearestMounted.stateNode.current.memoizedState.isDehydrated)
+              return 3 === nearestMounted.tag
+                ? nearestMounted.stateNode.containerInfo
+                : null;
+            targetNode = null;
+          } else nearestMounted !== targetNode && (targetNode = null);
+        }
+      }
+      return_targetInst = targetNode;
+      return null;
+    }
+    function getEventPriority(domEventName) {
+      switch (domEventName) {
+        case "beforetoggle":
+        case "cancel":
+        case "click":
+        case "close":
+        case "contextmenu":
+        case "copy":
+        case "cut":
+        case "auxclick":
+        case "dblclick":
+        case "dragend":
+        case "dragstart":
+        case "drop":
+        case "focusin":
+        case "focusout":
+        case "input":
+        case "invalid":
+        case "keydown":
+        case "keypress":
+        case "keyup":
+        case "mousedown":
+        case "mouseup":
+        case "paste":
+        case "pause":
+        case "play":
+        case "pointercancel":
+        case "pointerdown":
+        case "pointerup":
+        case "ratechange":
+        case "reset":
+        case "resize":
+        case "seeked":
+        case "submit":
+        case "toggle":
+        case "touchcancel":
+        case "touchend":
+        case "touchstart":
+        case "volumechange":
+        case "change":
+        case "selectionchange":
+        case "textInput":
+        case "compositionstart":
+        case "compositionend":
+        case "compositionupdate":
+        case "beforeblur":
+        case "afterblur":
+        case "beforeinput":
+        case "blur":
+        case "fullscreenchange":
+        case "focus":
+        case "hashchange":
+        case "popstate":
+        case "select":
+        case "selectstart":
+          return DiscreteEventPriority;
+        case "drag":
+        case "dragenter":
+        case "dragexit":
+        case "dragleave":
+        case "dragover":
+        case "mousemove":
+        case "mouseout":
+        case "mouseover":
+        case "pointermove":
+        case "pointerout":
+        case "pointerover":
+        case "scroll":
+        case "touchmove":
+        case "wheel":
+        case "mouseenter":
+        case "mouseleave":
+        case "pointerenter":
+        case "pointerleave":
+          return ContinuousEventPriority;
+        case "message":
+          switch (getCurrentPriorityLevel()) {
+            case ImmediatePriority:
+              return DiscreteEventPriority;
+            case UserBlockingPriority:
+              return ContinuousEventPriority;
+            case NormalPriority$1:
+            case LowPriority:
+              return DefaultEventPriority;
+            case IdlePriority:
+              return IdleEventPriority;
+            default:
+              return DefaultEventPriority;
+          }
+        default:
+          return DefaultEventPriority;
+      }
+    }
+    function clearIfContinuousEvent(domEventName, nativeEvent) {
+      switch (domEventName) {
+        case "focusin":
+        case "focusout":
+          queuedFocus = null;
+          break;
+        case "dragenter":
+        case "dragleave":
+          queuedDrag = null;
+          break;
+        case "mouseover":
+        case "mouseout":
+          queuedMouse = null;
+          break;
+        case "pointerover":
+        case "pointerout":
+          queuedPointers.delete(nativeEvent.pointerId);
+          break;
+        case "gotpointercapture":
+        case "lostpointercapture":
+          queuedPointerCaptures.delete(nativeEvent.pointerId);
+      }
+    }
+    function accumulateOrCreateContinuousQueuedReplayableEvent(
+      existingQueuedEvent,
+      blockedOn,
+      domEventName,
+      eventSystemFlags,
+      targetContainer,
+      nativeEvent
+    ) {
+      if (
+        null === existingQueuedEvent ||
+        existingQueuedEvent.nativeEvent !== nativeEvent
+      )
+        return (
+          (existingQueuedEvent = {
+            blockedOn: blockedOn,
+            domEventName: domEventName,
+            eventSystemFlags: eventSystemFlags,
+            nativeEvent: nativeEvent,
+            targetContainers: [targetContainer]
+          }),
+          null !== blockedOn &&
+            ((blockedOn = getInstanceFromNode(blockedOn)),
+            null !== blockedOn && attemptContinuousHydration(blockedOn)),
+          existingQueuedEvent
+        );
+      existingQueuedEvent.eventSystemFlags |= eventSystemFlags;
+      blockedOn = existingQueuedEvent.targetContainers;
+      null !== targetContainer &&
+        -1 === blockedOn.indexOf(targetContainer) &&
+        blockedOn.push(targetContainer);
+      return existingQueuedEvent;
+    }
+    function queueIfContinuousEvent(
+      blockedOn,
+      domEventName,
+      eventSystemFlags,
+      targetContainer,
+      nativeEvent
+    ) {
+      switch (domEventName) {
+        case "focusin":
+          return (
+            (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(
+              queuedFocus,
+              blockedOn,
+              domEventName,
+              eventSystemFlags,
+              targetContainer,
+              nativeEvent
+            )),
+            !0
+          );
+        case "dragenter":
+          return (
+            (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(
+              queuedDrag,
+              blockedOn,
+              domEventName,
+              eventSystemFlags,
+              targetContainer,
+              nativeEvent
+            )),
+            !0
+          );
+        case "mouseover":
+          return (
+            (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(
+              queuedMouse,
+              blockedOn,
+              domEventName,
+              eventSystemFlags,
+              targetContainer,
+              nativeEvent
+            )),
+            !0
+          );
+        case "pointerover":
+          var pointerId = nativeEvent.pointerId;
+          queuedPointers.set(
+            pointerId,
+            accumulateOrCreateContinuousQueuedReplayableEvent(
+              queuedPointers.get(pointerId) || null,
+              blockedOn,
+              domEventName,
+              eventSystemFlags,
+              targetContainer,
+              nativeEvent
+            )
+          );
+          return !0;
+        case "gotpointercapture":
+          return (
+            (pointerId = nativeEvent.pointerId),
+            queuedPointerCaptures.set(
+              pointerId,
+              accumulateOrCreateContinuousQueuedReplayableEvent(
+                queuedPointerCaptures.get(pointerId) || null,
+                blockedOn,
+                domEventName,
+                eventSystemFlags,
+                targetContainer,
+                nativeEvent
+              )
+            ),
+            !0
+          );
+      }
+      return !1;
+    }
+    function attemptExplicitHydrationTarget(queuedTarget) {
+      var targetInst = getClosestInstanceFromNode(queuedTarget.target);
+      if (null !== targetInst) {
+        var nearestMounted = getNearestMountedFiber(targetInst);
+        if (null !== nearestMounted)
+          if (((targetInst = nearestMounted.tag), 13 === targetInst)) {
+            if (
+              ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),
+              null !== targetInst)
+            ) {
+              queuedTarget.blockedOn = targetInst;
+              runWithPriority(queuedTarget.priority, function () {
+                if (13 === nearestMounted.tag) {
+                  var lane = requestUpdateLane(nearestMounted);
+                  lane = getBumpedLaneForHydrationByLane(lane);
+                  var root = enqueueConcurrentRenderForLane(
+                    nearestMounted,
+                    lane
+                  );
+                  null !== root &&
+                    scheduleUpdateOnFiber(root, nearestMounted, lane);
+                  markRetryLaneIfNotHydrated(nearestMounted, lane);
+                }
+              });
+              return;
+            }
+          } else if (
+            3 === targetInst &&
+            nearestMounted.stateNode.current.memoizedState.isDehydrated
+          ) {
+            queuedTarget.blockedOn =
+              3 === nearestMounted.tag
+                ? nearestMounted.stateNode.containerInfo
+                : null;
+            return;
+          }
+      }
+      queuedTarget.blockedOn = null;
+    }
+    function attemptReplayContinuousQueuedEvent(queuedEvent) {
+      if (null !== queuedEvent.blockedOn) return !1;
+      for (
+        var targetContainers = queuedEvent.targetContainers;
+        0 < targetContainers.length;
+
+      ) {
+        var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);
+        if (null === nextBlockedOn) {
+          nextBlockedOn = queuedEvent.nativeEvent;
+          var nativeEventClone = new nextBlockedOn.constructor(
+              nextBlockedOn.type,
+              nextBlockedOn
+            ),
+            event = nativeEventClone;
+          null !== currentReplayingEvent &&
+            console.error(
+              "Expected currently replaying event to be null. This error is likely caused by a bug in React. Please file an issue."
+            );
+          currentReplayingEvent = event;
+          nextBlockedOn.target.dispatchEvent(nativeEventClone);
+          null === currentReplayingEvent &&
+            console.error(
+              "Expected currently replaying event to not be null. This error is likely caused by a bug in React. Please file an issue."
+            );
+          currentReplayingEvent = null;
+        } else
+          return (
+            (targetContainers = getInstanceFromNode(nextBlockedOn)),
+            null !== targetContainers &&
+              attemptContinuousHydration(targetContainers),
+            (queuedEvent.blockedOn = nextBlockedOn),
+            !1
+          );
+        targetContainers.shift();
+      }
+      return !0;
+    }
+    function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {
+      attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);
+    }
+    function replayUnblockedEvents() {
+      hasScheduledReplayAttempt = !1;
+      null !== queuedFocus &&
+        attemptReplayContinuousQueuedEvent(queuedFocus) &&
+        (queuedFocus = null);
+      null !== queuedDrag &&
+        attemptReplayContinuousQueuedEvent(queuedDrag) &&
+        (queuedDrag = null);
+      null !== queuedMouse &&
+        attemptReplayContinuousQueuedEvent(queuedMouse) &&
+        (queuedMouse = null);
+      queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);
+      queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);
+    }
+    function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {
+      queuedEvent.blockedOn === unblocked &&
+        ((queuedEvent.blockedOn = null),
+        hasScheduledReplayAttempt ||
+          ((hasScheduledReplayAttempt = !0),
+          Scheduler.unstable_scheduleCallback(
+            Scheduler.unstable_NormalPriority,
+            replayUnblockedEvents
+          )));
+    }
+    function scheduleReplayQueueIfNeeded(formReplayingQueue) {
+      lastScheduledReplayQueue !== formReplayingQueue &&
+        ((lastScheduledReplayQueue = formReplayingQueue),
+        Scheduler.unstable_scheduleCallback(
+          Scheduler.unstable_NormalPriority,
+          function () {
+            lastScheduledReplayQueue === formReplayingQueue &&
+              (lastScheduledReplayQueue = null);
+            for (var i = 0; i < formReplayingQueue.length; i += 3) {
+              var form = formReplayingQueue[i],
+                submitterOrAction = formReplayingQueue[i + 1],
+                formData = formReplayingQueue[i + 2];
+              if ("function" !== typeof submitterOrAction)
+                if (
+                  null === findInstanceBlockingTarget(submitterOrAction || form)
+                )
+                  continue;
+                else break;
+              var formInst = getInstanceFromNode(form);
+              null !== formInst &&
+                (formReplayingQueue.splice(i, 3),
+                (i -= 3),
+                (form = {
+                  pending: !0,
+                  data: formData,
+                  method: form.method,
+                  action: submitterOrAction
+                }),
+                Object.freeze(form),
+                startHostTransition(
+                  formInst,
+                  form,
+                  submitterOrAction,
+                  formData
+                ));
+            }
+          }
+        ));
+    }
+    function retryIfBlockedOn(unblocked) {
+      function unblock(queuedEvent) {
+        return scheduleCallbackIfUnblocked(queuedEvent, unblocked);
+      }
+      null !== queuedFocus &&
+        scheduleCallbackIfUnblocked(queuedFocus, unblocked);
+      null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);
+      null !== queuedMouse &&
+        scheduleCallbackIfUnblocked(queuedMouse, unblocked);
+      queuedPointers.forEach(unblock);
+      queuedPointerCaptures.forEach(unblock);
+      for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {
+        var queuedTarget = queuedExplicitHydrationTargets[i];
+        queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);
+      }
+      for (
+        ;
+        0 < queuedExplicitHydrationTargets.length &&
+        ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);
+
+      )
+        attemptExplicitHydrationTarget(i),
+          null === i.blockedOn && queuedExplicitHydrationTargets.shift();
+      i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;
+      if (null != i)
+        for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {
+          var form = i[queuedTarget],
+            submitterOrAction = i[queuedTarget + 1],
+            formProps = form[internalPropsKey] || null;
+          if ("function" === typeof submitterOrAction)
+            formProps || scheduleReplayQueueIfNeeded(i);
+          else if (formProps) {
+            var action = null;
+            if (
+              submitterOrAction &&
+              submitterOrAction.hasAttribute("formAction")
+            )
+              if (
+                ((form = submitterOrAction),
+                (formProps = submitterOrAction[internalPropsKey] || null))
+              )
+                action = formProps.formAction;
+              else {
+                if (null !== findInstanceBlockingTarget(form)) continue;
+              }
+            else action = formProps.action;
+            "function" === typeof action
+              ? (i[queuedTarget + 1] = action)
+              : (i.splice(queuedTarget, 3), (queuedTarget -= 3));
+            scheduleReplayQueueIfNeeded(i);
+          }
+        }
+    }
+    function ReactDOMRoot(internalRoot) {
+      this._internalRoot = internalRoot;
+    }
+    function ReactDOMHydrationRoot(internalRoot) {
+      this._internalRoot = internalRoot;
+    }
+    function warnIfReactDOMContainerInDEV(container) {
+      container[internalContainerInstanceKey] &&
+        (container._reactRootContainer
+          ? console.error(
+              "You are calling ReactDOMClient.createRoot() on a container that was previously passed to ReactDOM.render(). This is not supported."
+            )
+          : console.error(
+              "You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it."
+            ));
+    }
+    function noop() {}
+    function getCrossOriginStringAs(as, input) {
+      if ("font" === as) return "";
+      if ("string" === typeof input)
+        return "use-credentials" === input ? input : "";
+    }
+    function getValueDescriptorExpectingObjectForWarning(thing) {
+      return null === thing
+        ? "`null`"
+        : void 0 === thing
+          ? "`undefined`"
+          : "" === thing
+            ? "an empty string"
+            : 'something with type "' + typeof thing + '"';
+    }
+    function getValueDescriptorExpectingEnumForWarning(thing) {
+      return null === thing
+        ? "`null`"
+        : void 0 === thing
+          ? "`undefined`"
+          : "" === thing
+            ? "an empty string"
+            : "string" === typeof thing
+              ? JSON.stringify(thing)
+              : "number" === typeof thing
+                ? "`" + thing + "`"
+                : 'something with type "' + typeof thing + '"';
+    }
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+    var Scheduler = require("scheduler"),
+      React = require("react"),
+      ReactDOM = require("react-dom"),
+      assign = Object.assign,
+      REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+      REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+      REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy");
+    Symbol.for("react.scope");
+    var REACT_ACTIVITY_TYPE = Symbol.for("react.activity");
+    Symbol.for("react.legacy_hidden");
+    Symbol.for("react.tracing_marker");
+    var REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel");
+    Symbol.for("react.view_transition");
+    var MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      isArrayImpl = Array.isArray,
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      ReactDOMSharedInternals =
+        ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      NotPending = Object.freeze({
+        pending: !1,
+        data: null,
+        method: null,
+        action: null
+      }),
+      valueStack = [];
+    var fiberStack = [];
+    var index$jscomp$0 = -1,
+      contextStackCursor = createCursor(null),
+      contextFiberStackCursor = createCursor(null),
+      rootInstanceStackCursor = createCursor(null),
+      hostTransitionProviderCursor = createCursor(null),
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      scheduleCallback$3 = Scheduler.unstable_scheduleCallback,
+      cancelCallback$1 = Scheduler.unstable_cancelCallback,
+      shouldYield = Scheduler.unstable_shouldYield,
+      requestPaint = Scheduler.unstable_requestPaint,
+      now$1 = Scheduler.unstable_now,
+      getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,
+      ImmediatePriority = Scheduler.unstable_ImmediatePriority,
+      UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,
+      NormalPriority$1 = Scheduler.unstable_NormalPriority,
+      LowPriority = Scheduler.unstable_LowPriority,
+      IdlePriority = Scheduler.unstable_IdlePriority,
+      log$1 = Scheduler.log,
+      unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,
+      rendererID = null,
+      injectedHook = null,
+      injectedProfilingHooks = null,
+      hasLoggedError = !1,
+      isDevToolsPresent = "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__,
+      clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+      log = Math.log,
+      LN2 = Math.LN2,
+      nextTransitionLane = 256,
+      nextRetryLane = 4194304,
+      DiscreteEventPriority = 2,
+      ContinuousEventPriority = 8,
+      DefaultEventPriority = 32,
+      IdleEventPriority = 268435456,
+      randomKey = Math.random().toString(36).slice(2),
+      internalInstanceKey = "__reactFiber$" + randomKey,
+      internalPropsKey = "__reactProps$" + randomKey,
+      internalContainerInstanceKey = "__reactContainer$" + randomKey,
+      internalEventHandlersKey = "__reactEvents$" + randomKey,
+      internalEventHandlerListenersKey = "__reactListeners$" + randomKey,
+      internalEventHandlesSetKey = "__reactHandles$" + randomKey,
+      internalRootNodeResourcesKey = "__reactResources$" + randomKey,
+      internalHoistableMarker = "__reactMarker$" + randomKey,
+      allNativeEvents = new Set(),
+      registrationNameDependencies = {},
+      possibleRegistrationNames = {},
+      hasReadOnlyValue = {
+        button: !0,
+        checkbox: !0,
+        image: !0,
+        hidden: !0,
+        radio: !0,
+        reset: !0,
+        submit: !0
+      },
+      VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+        "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      illegalAttributeNameCache = {},
+      validatedAttributeNameCache = {},
+      disabledDepth = 0,
+      prevLog,
+      prevInfo,
+      prevWarn,
+      prevError,
+      prevGroup,
+      prevGroupCollapsed,
+      prevGroupEnd;
+    disabledLog.__reactDisabledLog = !0;
+    var prefix,
+      suffix,
+      reentry = !1;
+    var componentFrameCache = new (
+      "function" === typeof WeakMap ? WeakMap : Map
+    )();
+    var current = null,
+      isRendering = !1,
+      escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\n"\\]/g,
+      didWarnValueDefaultValue$1 = !1,
+      didWarnCheckedDefaultChecked = !1,
+      didWarnSelectedSetOnOption = !1,
+      didWarnInvalidChild = !1,
+      didWarnInvalidInnerHTML = !1;
+    var didWarnValueDefaultValue = !1;
+    var valuePropNames = ["value", "defaultValue"],
+      didWarnValDefaultVal = !1,
+      needsEscaping = /["'&<>\n\t]|^\s|\s$/,
+      specialTags =
+        "address applet area article aside base basefont bgsound blockquote body br button caption center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p param plaintext pre script section select source style summary table tbody td template textarea tfoot th thead title tr track ul wbr xmp".split(
+          " "
+        ),
+      inScopeTags =
+        "applet caption html table td th marquee object template foreignObject desc title".split(
+          " "
+        ),
+      buttonScopeTags = inScopeTags.concat(["button"]),
+      impliedEndTags = "dd dt li option optgroup p rp rt".split(" "),
+      emptyAncestorInfoDev = {
+        current: null,
+        formTag: null,
+        aTagInScope: null,
+        buttonTagInScope: null,
+        nobrTagInScope: null,
+        pTagInButtonScope: null,
+        listItemTagAutoclosing: null,
+        dlItemTagAutoclosing: null,
+        containerTagInScope: null,
+        implicitRootScope: !1
+      },
+      didWarn = {},
+      shorthandToLonghand = {
+        animation:
+          "animationDelay animationDirection animationDuration animationFillMode animationIterationCount animationName animationPlayState animationTimingFunction".split(
+            " "
+          ),
+        background:
+          "backgroundAttachment backgroundClip backgroundColor backgroundImage backgroundOrigin backgroundPositionX backgroundPositionY backgroundRepeat backgroundSize".split(
+            " "
+          ),
+        backgroundPosition: ["backgroundPositionX", "backgroundPositionY"],
+        border:
+          "borderBottomColor borderBottomStyle borderBottomWidth borderImageOutset borderImageRepeat borderImageSlice borderImageSource borderImageWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderTopColor borderTopStyle borderTopWidth".split(
+            " "
+          ),
+        borderBlockEnd: [
+          "borderBlockEndColor",
+          "borderBlockEndStyle",
+          "borderBlockEndWidth"
+        ],
+        borderBlockStart: [
+          "borderBlockStartColor",
+          "borderBlockStartStyle",
+          "borderBlockStartWidth"
+        ],
+        borderBottom: [
+          "borderBottomColor",
+          "borderBottomStyle",
+          "borderBottomWidth"
+        ],
+        borderColor: [
+          "borderBottomColor",
+          "borderLeftColor",
+          "borderRightColor",
+          "borderTopColor"
+        ],
+        borderImage: [
+          "borderImageOutset",
+          "borderImageRepeat",
+          "borderImageSlice",
+          "borderImageSource",
+          "borderImageWidth"
+        ],
+        borderInlineEnd: [
+          "borderInlineEndColor",
+          "borderInlineEndStyle",
+          "borderInlineEndWidth"
+        ],
+        borderInlineStart: [
+          "borderInlineStartColor",
+          "borderInlineStartStyle",
+          "borderInlineStartWidth"
+        ],
+        borderLeft: ["borderLeftColor", "borderLeftStyle", "borderLeftWidth"],
+        borderRadius: [
+          "borderBottomLeftRadius",
+          "borderBottomRightRadius",
+          "borderTopLeftRadius",
+          "borderTopRightRadius"
+        ],
+        borderRight: [
+          "borderRightColor",
+          "borderRightStyle",
+          "borderRightWidth"
+        ],
+        borderStyle: [
+          "borderBottomStyle",
+          "borderLeftStyle",
+          "borderRightStyle",
+          "borderTopStyle"
+        ],
+        borderTop: ["borderTopColor", "borderTopStyle", "borderTopWidth"],
+        borderWidth: [
+          "borderBottomWidth",
+          "borderLeftWidth",
+          "borderRightWidth",
+          "borderTopWidth"
+        ],
+        columnRule: ["columnRuleColor", "columnRuleStyle", "columnRuleWidth"],
+        columns: ["columnCount", "columnWidth"],
+        flex: ["flexBasis", "flexGrow", "flexShrink"],
+        flexFlow: ["flexDirection", "flexWrap"],
+        font: "fontFamily fontFeatureSettings fontKerning fontLanguageOverride fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition fontWeight lineHeight".split(
+          " "
+        ),
+        fontVariant:
+          "fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition".split(
+            " "
+          ),
+        gap: ["columnGap", "rowGap"],
+        grid: "gridAutoColumns gridAutoFlow gridAutoRows gridTemplateAreas gridTemplateColumns gridTemplateRows".split(
+          " "
+        ),
+        gridArea: [
+          "gridColumnEnd",
+          "gridColumnStart",
+          "gridRowEnd",
+          "gridRowStart"
+        ],
+        gridColumn: ["gridColumnEnd", "gridColumnStart"],
+        gridColumnGap: ["columnGap"],
+        gridGap: ["columnGap", "rowGap"],
+        gridRow: ["gridRowEnd", "gridRowStart"],
+        gridRowGap: ["rowGap"],
+        gridTemplate: [
+          "gridTemplateAreas",
+          "gridTemplateColumns",
+          "gridTemplateRows"
+        ],
+        listStyle: ["listStyleImage", "listStylePosition", "listStyleType"],
+        margin: ["marginBottom", "marginLeft", "marginRight", "marginTop"],
+        marker: ["markerEnd", "markerMid", "markerStart"],
+        mask: "maskClip maskComposite maskImage maskMode maskOrigin maskPositionX maskPositionY maskRepeat maskSize".split(
+          " "
+        ),
+        maskPosition: ["maskPositionX", "maskPositionY"],
+        outline: ["outlineColor", "outlineStyle", "outlineWidth"],
+        overflow: ["overflowX", "overflowY"],
+        padding: ["paddingBottom", "paddingLeft", "paddingRight", "paddingTop"],
+        placeContent: ["alignContent", "justifyContent"],
+        placeItems: ["alignItems", "justifyItems"],
+        placeSelf: ["alignSelf", "justifySelf"],
+        textDecoration: [
+          "textDecorationColor",
+          "textDecorationLine",
+          "textDecorationStyle"
+        ],
+        textEmphasis: ["textEmphasisColor", "textEmphasisStyle"],
+        transition: [
+          "transitionDelay",
+          "transitionDuration",
+          "transitionProperty",
+          "transitionTimingFunction"
+        ],
+        wordWrap: ["overflowWrap"]
+      },
+      uppercasePattern = /([A-Z])/g,
+      msPattern$1 = /^ms-/,
+      badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,
+      msPattern = /^-ms-/,
+      hyphenPattern = /-(.)/g,
+      badStyleValueWithSemicolonPattern = /;\s*$/,
+      warnedStyleNames = {},
+      warnedStyleValues = {},
+      warnedForNaNValue = !1,
+      warnedForInfinityValue = !1,
+      unitlessNumbers = new Set(
+        "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+          " "
+        )
+      ),
+      MATH_NAMESPACE = "http://www.w3.org/1998/Math/MathML",
+      SVG_NAMESPACE = "http://www.w3.org/2000/svg",
+      aliases = new Map([
+        ["acceptCharset", "accept-charset"],
+        ["htmlFor", "for"],
+        ["httpEquiv", "http-equiv"],
+        ["crossOrigin", "crossorigin"],
+        ["accentHeight", "accent-height"],
+        ["alignmentBaseline", "alignment-baseline"],
+        ["arabicForm", "arabic-form"],
+        ["baselineShift", "baseline-shift"],
+        ["capHeight", "cap-height"],
+        ["clipPath", "clip-path"],
+        ["clipRule", "clip-rule"],
+        ["colorInterpolation", "color-interpolation"],
+        ["colorInterpolationFilters", "color-interpolation-filters"],
+        ["colorProfile", "color-profile"],
+        ["colorRendering", "color-rendering"],
+        ["dominantBaseline", "dominant-baseline"],
+        ["enableBackground", "enable-background"],
+        ["fillOpacity", "fill-opacity"],
+        ["fillRule", "fill-rule"],
+        ["floodColor", "flood-color"],
+        ["floodOpacity", "flood-opacity"],
+        ["fontFamily", "font-family"],
+        ["fontSize", "font-size"],
+        ["fontSizeAdjust", "font-size-adjust"],
+        ["fontStretch", "font-stretch"],
+        ["fontStyle", "font-style"],
+        ["fontVariant", "font-variant"],
+        ["fontWeight", "font-weight"],
+        ["glyphName", "glyph-name"],
+        ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+        ["glyphOrientationVertical", "glyph-orientation-vertical"],
+        ["horizAdvX", "horiz-adv-x"],
+        ["horizOriginX", "horiz-origin-x"],
+        ["imageRendering", "image-rendering"],
+        ["letterSpacing", "letter-spacing"],
+        ["lightingColor", "lighting-color"],
+        ["markerEnd", "marker-end"],
+        ["markerMid", "marker-mid"],
+        ["markerStart", "marker-start"],
+        ["overlinePosition", "overline-position"],
+        ["overlineThickness", "overline-thickness"],
+        ["paintOrder", "paint-order"],
+        ["panose-1", "panose-1"],
+        ["pointerEvents", "pointer-events"],
+        ["renderingIntent", "rendering-intent"],
+        ["shapeRendering", "shape-rendering"],
+        ["stopColor", "stop-color"],
+        ["stopOpacity", "stop-opacity"],
+        ["strikethroughPosition", "strikethrough-position"],
+        ["strikethroughThickness", "strikethrough-thickness"],
+        ["strokeDasharray", "stroke-dasharray"],
+        ["strokeDashoffset", "stroke-dashoffset"],
+        ["strokeLinecap", "stroke-linecap"],
+        ["strokeLinejoin", "stroke-linejoin"],
+        ["strokeMiterlimit", "stroke-miterlimit"],
+        ["strokeOpacity", "stroke-opacity"],
+        ["strokeWidth", "stroke-width"],
+        ["textAnchor", "text-anchor"],
+        ["textDecoration", "text-decoration"],
+        ["textRendering", "text-rendering"],
+        ["transformOrigin", "transform-origin"],
+        ["underlinePosition", "underline-position"],
+        ["underlineThickness", "underline-thickness"],
+        ["unicodeBidi", "unicode-bidi"],
+        ["unicodeRange", "unicode-range"],
+        ["unitsPerEm", "units-per-em"],
+        ["vAlphabetic", "v-alphabetic"],
+        ["vHanging", "v-hanging"],
+        ["vIdeographic", "v-ideographic"],
+        ["vMathematical", "v-mathematical"],
+        ["vectorEffect", "vector-effect"],
+        ["vertAdvY", "vert-adv-y"],
+        ["vertOriginX", "vert-origin-x"],
+        ["vertOriginY", "vert-origin-y"],
+        ["wordSpacing", "word-spacing"],
+        ["writingMode", "writing-mode"],
+        ["xmlnsXlink", "xmlns:xlink"],
+        ["xHeight", "x-height"]
+      ]),
+      possibleStandardNames = {
+        accept: "accept",
+        acceptcharset: "acceptCharset",
+        "accept-charset": "acceptCharset",
+        accesskey: "accessKey",
+        action: "action",
+        allowfullscreen: "allowFullScreen",
+        alt: "alt",
+        as: "as",
+        async: "async",
+        autocapitalize: "autoCapitalize",
+        autocomplete: "autoComplete",
+        autocorrect: "autoCorrect",
+        autofocus: "autoFocus",
+        autoplay: "autoPlay",
+        autosave: "autoSave",
+        capture: "capture",
+        cellpadding: "cellPadding",
+        cellspacing: "cellSpacing",
+        challenge: "challenge",
+        charset: "charSet",
+        checked: "checked",
+        children: "children",
+        cite: "cite",
+        class: "className",
+        classid: "classID",
+        classname: "className",
+        cols: "cols",
+        colspan: "colSpan",
+        content: "content",
+        contenteditable: "contentEditable",
+        contextmenu: "contextMenu",
+        controls: "controls",
+        controlslist: "controlsList",
+        coords: "coords",
+        crossorigin: "crossOrigin",
+        dangerouslysetinnerhtml: "dangerouslySetInnerHTML",
+        data: "data",
+        datetime: "dateTime",
+        default: "default",
+        defaultchecked: "defaultChecked",
+        defaultvalue: "defaultValue",
+        defer: "defer",
+        dir: "dir",
+        disabled: "disabled",
+        disablepictureinpicture: "disablePictureInPicture",
+        disableremoteplayback: "disableRemotePlayback",
+        download: "download",
+        draggable: "draggable",
+        enctype: "encType",
+        enterkeyhint: "enterKeyHint",
+        fetchpriority: "fetchPriority",
+        for: "htmlFor",
+        form: "form",
+        formmethod: "formMethod",
+        formaction: "formAction",
+        formenctype: "formEncType",
+        formnovalidate: "formNoValidate",
+        formtarget: "formTarget",
+        frameborder: "frameBorder",
+        headers: "headers",
+        height: "height",
+        hidden: "hidden",
+        high: "high",
+        href: "href",
+        hreflang: "hrefLang",
+        htmlfor: "htmlFor",
+        httpequiv: "httpEquiv",
+        "http-equiv": "httpEquiv",
+        icon: "icon",
+        id: "id",
+        imagesizes: "imageSizes",
+        imagesrcset: "imageSrcSet",
+        inert: "inert",
+        innerhtml: "innerHTML",
+        inputmode: "inputMode",
+        integrity: "integrity",
+        is: "is",
+        itemid: "itemID",
+        itemprop: "itemProp",
+        itemref: "itemRef",
+        itemscope: "itemScope",
+        itemtype: "itemType",
+        keyparams: "keyParams",
+        keytype: "keyType",
+        kind: "kind",
+        label: "label",
+        lang: "lang",
+        list: "list",
+        loop: "loop",
+        low: "low",
+        manifest: "manifest",
+        marginwidth: "marginWidth",
+        marginheight: "marginHeight",
+        max: "max",
+        maxlength: "maxLength",
+        media: "media",
+        mediagroup: "mediaGroup",
+        method: "method",
+        min: "min",
+        minlength: "minLength",
+        multiple: "multiple",
+        muted: "muted",
+        name: "name",
+        nomodule: "noModule",
+        nonce: "nonce",
+        novalidate: "noValidate",
+        open: "open",
+        optimum: "optimum",
+        pattern: "pattern",
+        placeholder: "placeholder",
+        playsinline: "playsInline",
+        poster: "poster",
+        preload: "preload",
+        profile: "profile",
+        radiogroup: "radioGroup",
+        readonly: "readOnly",
+        referrerpolicy: "referrerPolicy",
+        rel: "rel",
+        required: "required",
+        reversed: "reversed",
+        role: "role",
+        rows: "rows",
+        rowspan: "rowSpan",
+        sandbox: "sandbox",
+        scope: "scope",
+        scoped: "scoped",
+        scrolling: "scrolling",
+        seamless: "seamless",
+        selected: "selected",
+        shape: "shape",
+        size: "size",
+        sizes: "sizes",
+        span: "span",
+        spellcheck: "spellCheck",
+        src: "src",
+        srcdoc: "srcDoc",
+        srclang: "srcLang",
+        srcset: "srcSet",
+        start: "start",
+        step: "step",
+        style: "style",
+        summary: "summary",
+        tabindex: "tabIndex",
+        target: "target",
+        title: "title",
+        type: "type",
+        usemap: "useMap",
+        value: "value",
+        width: "width",
+        wmode: "wmode",
+        wrap: "wrap",
+        about: "about",
+        accentheight: "accentHeight",
+        "accent-height": "accentHeight",
+        accumulate: "accumulate",
+        additive: "additive",
+        alignmentbaseline: "alignmentBaseline",
+        "alignment-baseline": "alignmentBaseline",
+        allowreorder: "allowReorder",
+        alphabetic: "alphabetic",
+        amplitude: "amplitude",
+        arabicform: "arabicForm",
+        "arabic-form": "arabicForm",
+        ascent: "ascent",
+        attributename: "attributeName",
+        attributetype: "attributeType",
+        autoreverse: "autoReverse",
+        azimuth: "azimuth",
+        basefrequency: "baseFrequency",
+        baselineshift: "baselineShift",
+        "baseline-shift": "baselineShift",
+        baseprofile: "baseProfile",
+        bbox: "bbox",
+        begin: "begin",
+        bias: "bias",
+        by: "by",
+        calcmode: "calcMode",
+        capheight: "capHeight",
+        "cap-height": "capHeight",
+        clip: "clip",
+        clippath: "clipPath",
+        "clip-path": "clipPath",
+        clippathunits: "clipPathUnits",
+        cliprule: "clipRule",
+        "clip-rule": "clipRule",
+        color: "color",
+        colorinterpolation: "colorInterpolation",
+        "color-interpolation": "colorInterpolation",
+        colorinterpolationfilters: "colorInterpolationFilters",
+        "color-interpolation-filters": "colorInterpolationFilters",
+        colorprofile: "colorProfile",
+        "color-profile": "colorProfile",
+        colorrendering: "colorRendering",
+        "color-rendering": "colorRendering",
+        contentscripttype: "contentScriptType",
+        contentstyletype: "contentStyleType",
+        cursor: "cursor",
+        cx: "cx",
+        cy: "cy",
+        d: "d",
+        datatype: "datatype",
+        decelerate: "decelerate",
+        descent: "descent",
+        diffuseconstant: "diffuseConstant",
+        direction: "direction",
+        display: "display",
+        divisor: "divisor",
+        dominantbaseline: "dominantBaseline",
+        "dominant-baseline": "dominantBaseline",
+        dur: "dur",
+        dx: "dx",
+        dy: "dy",
+        edgemode: "edgeMode",
+        elevation: "elevation",
+        enablebackground: "enableBackground",
+        "enable-background": "enableBackground",
+        end: "end",
+        exponent: "exponent",
+        externalresourcesrequired: "externalResourcesRequired",
+        fill: "fill",
+        fillopacity: "fillOpacity",
+        "fill-opacity": "fillOpacity",
+        fillrule: "fillRule",
+        "fill-rule": "fillRule",
+        filter: "filter",
+        filterres: "filterRes",
+        filterunits: "filterUnits",
+        floodopacity: "floodOpacity",
+        "flood-opacity": "floodOpacity",
+        floodcolor: "floodColor",
+        "flood-color": "floodColor",
+        focusable: "focusable",
+        fontfamily: "fontFamily",
+        "font-family": "fontFamily",
+        fontsize: "fontSize",
+        "font-size": "fontSize",
+        fontsizeadjust: "fontSizeAdjust",
+        "font-size-adjust": "fontSizeAdjust",
+        fontstretch: "fontStretch",
+        "font-stretch": "fontStretch",
+        fontstyle: "fontStyle",
+        "font-style": "fontStyle",
+        fontvariant: "fontVariant",
+        "font-variant": "fontVariant",
+        fontweight: "fontWeight",
+        "font-weight": "fontWeight",
+        format: "format",
+        from: "from",
+        fx: "fx",
+        fy: "fy",
+        g1: "g1",
+        g2: "g2",
+        glyphname: "glyphName",
+        "glyph-name": "glyphName",
+        glyphorientationhorizontal: "glyphOrientationHorizontal",
+        "glyph-orientation-horizontal": "glyphOrientationHorizontal",
+        glyphorientationvertical: "glyphOrientationVertical",
+        "glyph-orientation-vertical": "glyphOrientationVertical",
+        glyphref: "glyphRef",
+        gradienttransform: "gradientTransform",
+        gradientunits: "gradientUnits",
+        hanging: "hanging",
+        horizadvx: "horizAdvX",
+        "horiz-adv-x": "horizAdvX",
+        horizoriginx: "horizOriginX",
+        "horiz-origin-x": "horizOriginX",
+        ideographic: "ideographic",
+        imagerendering: "imageRendering",
+        "image-rendering": "imageRendering",
+        in2: "in2",
+        in: "in",
+        inlist: "inlist",
+        intercept: "intercept",
+        k1: "k1",
+        k2: "k2",
+        k3: "k3",
+        k4: "k4",
+        k: "k",
+        kernelmatrix: "kernelMatrix",
+        kernelunitlength: "kernelUnitLength",
+        kerning: "kerning",
+        keypoints: "keyPoints",
+        keysplines: "keySplines",
+        keytimes: "keyTimes",
+        lengthadjust: "lengthAdjust",
+        letterspacing: "letterSpacing",
+        "letter-spacing": "letterSpacing",
+        lightingcolor: "lightingColor",
+        "lighting-color": "lightingColor",
+        limitingconeangle: "limitingConeAngle",
+        local: "local",
+        markerend: "markerEnd",
+        "marker-end": "markerEnd",
+        markerheight: "markerHeight",
+        markermid: "markerMid",
+        "marker-mid": "markerMid",
+        markerstart: "markerStart",
+        "marker-start": "markerStart",
+        markerunits: "markerUnits",
+        markerwidth: "markerWidth",
+        mask: "mask",
+        maskcontentunits: "maskContentUnits",
+        maskunits: "maskUnits",
+        mathematical: "mathematical",
+        mode: "mode",
+        numoctaves: "numOctaves",
+        offset: "offset",
+        opacity: "opacity",
+        operator: "operator",
+        order: "order",
+        orient: "orient",
+        orientation: "orientation",
+        origin: "origin",
+        overflow: "overflow",
+        overlineposition: "overlinePosition",
+        "overline-position": "overlinePosition",
+        overlinethickness: "overlineThickness",
+        "overline-thickness": "overlineThickness",
+        paintorder: "paintOrder",
+        "paint-order": "paintOrder",
+        panose1: "panose1",
+        "panose-1": "panose1",
+        pathlength: "pathLength",
+        patterncontentunits: "patternContentUnits",
+        patterntransform: "patternTransform",
+        patternunits: "patternUnits",
+        pointerevents: "pointerEvents",
+        "pointer-events": "pointerEvents",
+        points: "points",
+        pointsatx: "pointsAtX",
+        pointsaty: "pointsAtY",
+        pointsatz: "pointsAtZ",
+        popover: "popover",
+        popovertarget: "popoverTarget",
+        popovertargetaction: "popoverTargetAction",
+        prefix: "prefix",
+        preservealpha: "preserveAlpha",
+        preserveaspectratio: "preserveAspectRatio",
+        primitiveunits: "primitiveUnits",
+        property: "property",
+        r: "r",
+        radius: "radius",
+        refx: "refX",
+        refy: "refY",
+        renderingintent: "renderingIntent",
+        "rendering-intent": "renderingIntent",
+        repeatcount: "repeatCount",
+        repeatdur: "repeatDur",
+        requiredextensions: "requiredExtensions",
+        requiredfeatures: "requiredFeatures",
+        resource: "resource",
+        restart: "restart",
+        result: "result",
+        results: "results",
+        rotate: "rotate",
+        rx: "rx",
+        ry: "ry",
+        scale: "scale",
+        security: "security",
+        seed: "seed",
+        shaperendering: "shapeRendering",
+        "shape-rendering": "shapeRendering",
+        slope: "slope",
+        spacing: "spacing",
+        specularconstant: "specularConstant",
+        specularexponent: "specularExponent",
+        speed: "speed",
+        spreadmethod: "spreadMethod",
+        startoffset: "startOffset",
+        stddeviation: "stdDeviation",
+        stemh: "stemh",
+        stemv: "stemv",
+        stitchtiles: "stitchTiles",
+        stopcolor: "stopColor",
+        "stop-color": "stopColor",
+        stopopacity: "stopOpacity",
+        "stop-opacity": "stopOpacity",
+        strikethroughposition: "strikethroughPosition",
+        "strikethrough-position": "strikethroughPosition",
+        strikethroughthickness: "strikethroughThickness",
+        "strikethrough-thickness": "strikethroughThickness",
+        string: "string",
+        stroke: "stroke",
+        strokedasharray: "strokeDasharray",
+        "stroke-dasharray": "strokeDasharray",
+        strokedashoffset: "strokeDashoffset",
+        "stroke-dashoffset": "strokeDashoffset",
+        strokelinecap: "strokeLinecap",
+        "stroke-linecap": "strokeLinecap",
+        strokelinejoin: "strokeLinejoin",
+        "stroke-linejoin": "strokeLinejoin",
+        strokemiterlimit: "strokeMiterlimit",
+        "stroke-miterlimit": "strokeMiterlimit",
+        strokewidth: "strokeWidth",
+        "stroke-width": "strokeWidth",
+        strokeopacity: "strokeOpacity",
+        "stroke-opacity": "strokeOpacity",
+        suppresscontenteditablewarning: "suppressContentEditableWarning",
+        suppresshydrationwarning: "suppressHydrationWarning",
+        surfacescale: "surfaceScale",
+        systemlanguage: "systemLanguage",
+        tablevalues: "tableValues",
+        targetx: "targetX",
+        targety: "targetY",
+        textanchor: "textAnchor",
+        "text-anchor": "textAnchor",
+        textdecoration: "textDecoration",
+        "text-decoration": "textDecoration",
+        textlength: "textLength",
+        textrendering: "textRendering",
+        "text-rendering": "textRendering",
+        to: "to",
+        transform: "transform",
+        transformorigin: "transformOrigin",
+        "transform-origin": "transformOrigin",
+        typeof: "typeof",
+        u1: "u1",
+        u2: "u2",
+        underlineposition: "underlinePosition",
+        "underline-position": "underlinePosition",
+        underlinethickness: "underlineThickness",
+        "underline-thickness": "underlineThickness",
+        unicode: "unicode",
+        unicodebidi: "unicodeBidi",
+        "unicode-bidi": "unicodeBidi",
+        unicoderange: "unicodeRange",
+        "unicode-range": "unicodeRange",
+        unitsperem: "unitsPerEm",
+        "units-per-em": "unitsPerEm",
+        unselectable: "unselectable",
+        valphabetic: "vAlphabetic",
+        "v-alphabetic": "vAlphabetic",
+        values: "values",
+        vectoreffect: "vectorEffect",
+        "vector-effect": "vectorEffect",
+        version: "version",
+        vertadvy: "vertAdvY",
+        "vert-adv-y": "vertAdvY",
+        vertoriginx: "vertOriginX",
+        "vert-origin-x": "vertOriginX",
+        vertoriginy: "vertOriginY",
+        "vert-origin-y": "vertOriginY",
+        vhanging: "vHanging",
+        "v-hanging": "vHanging",
+        videographic: "vIdeographic",
+        "v-ideographic": "vIdeographic",
+        viewbox: "viewBox",
+        viewtarget: "viewTarget",
+        visibility: "visibility",
+        vmathematical: "vMathematical",
+        "v-mathematical": "vMathematical",
+        vocab: "vocab",
+        widths: "widths",
+        wordspacing: "wordSpacing",
+        "word-spacing": "wordSpacing",
+        writingmode: "writingMode",
+        "writing-mode": "writingMode",
+        x1: "x1",
+        x2: "x2",
+        x: "x",
+        xchannelselector: "xChannelSelector",
+        xheight: "xHeight",
+        "x-height": "xHeight",
+        xlinkactuate: "xlinkActuate",
+        "xlink:actuate": "xlinkActuate",
+        xlinkarcrole: "xlinkArcrole",
+        "xlink:arcrole": "xlinkArcrole",
+        xlinkhref: "xlinkHref",
+        "xlink:href": "xlinkHref",
+        xlinkrole: "xlinkRole",
+        "xlink:role": "xlinkRole",
+        xlinkshow: "xlinkShow",
+        "xlink:show": "xlinkShow",
+        xlinktitle: "xlinkTitle",
+        "xlink:title": "xlinkTitle",
+        xlinktype: "xlinkType",
+        "xlink:type": "xlinkType",
+        xmlbase: "xmlBase",
+        "xml:base": "xmlBase",
+        xmllang: "xmlLang",
+        "xml:lang": "xmlLang",
+        xmlns: "xmlns",
+        "xml:space": "xmlSpace",
+        xmlnsxlink: "xmlnsXlink",
+        "xmlns:xlink": "xmlnsXlink",
+        xmlspace: "xmlSpace",
+        y1: "y1",
+        y2: "y2",
+        y: "y",
+        ychannelselector: "yChannelSelector",
+        z: "z",
+        zoomandpan: "zoomAndPan"
+      },
+      ariaProperties = {
+        "aria-current": 0,
+        "aria-description": 0,
+        "aria-details": 0,
+        "aria-disabled": 0,
+        "aria-hidden": 0,
+        "aria-invalid": 0,
+        "aria-keyshortcuts": 0,
+        "aria-label": 0,
+        "aria-roledescription": 0,
+        "aria-autocomplete": 0,
+        "aria-checked": 0,
+        "aria-expanded": 0,
+        "aria-haspopup": 0,
+        "aria-level": 0,
+        "aria-modal": 0,
+        "aria-multiline": 0,
+        "aria-multiselectable": 0,
+        "aria-orientation": 0,
+        "aria-placeholder": 0,
+        "aria-pressed": 0,
+        "aria-readonly": 0,
+        "aria-required": 0,
+        "aria-selected": 0,
+        "aria-sort": 0,
+        "aria-valuemax": 0,
+        "aria-valuemin": 0,
+        "aria-valuenow": 0,
+        "aria-valuetext": 0,
+        "aria-atomic": 0,
+        "aria-busy": 0,
+        "aria-live": 0,
+        "aria-relevant": 0,
+        "aria-dropeffect": 0,
+        "aria-grabbed": 0,
+        "aria-activedescendant": 0,
+        "aria-colcount": 0,
+        "aria-colindex": 0,
+        "aria-colspan": 0,
+        "aria-controls": 0,
+        "aria-describedby": 0,
+        "aria-errormessage": 0,
+        "aria-flowto": 0,
+        "aria-labelledby": 0,
+        "aria-owns": 0,
+        "aria-posinset": 0,
+        "aria-rowcount": 0,
+        "aria-rowindex": 0,
+        "aria-rowspan": 0,
+        "aria-setsize": 0
+      },
+      warnedProperties$1 = {},
+      rARIA$1 = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel$1 = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      didWarnValueNull = !1,
+      warnedProperties = {},
+      EVENT_NAME_REGEX = /^on./,
+      INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,
+      rARIA = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      isJavaScriptProtocol =
+        /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i,
+      currentReplayingEvent = null,
+      restoreTarget = null,
+      restoreQueue = null,
+      isInsideEventHandler = !1,
+      canUseDOM = !(
+        "undefined" === typeof window ||
+        "undefined" === typeof window.document ||
+        "undefined" === typeof window.document.createElement
+      ),
+      passiveBrowserEventsSupported = !1;
+    if (canUseDOM)
+      try {
+        var options$jscomp$0 = {};
+        Object.defineProperty(options$jscomp$0, "passive", {
+          get: function () {
+            passiveBrowserEventsSupported = !0;
+          }
+        });
+        window.addEventListener("test", options$jscomp$0, options$jscomp$0);
+        window.removeEventListener("test", options$jscomp$0, options$jscomp$0);
+      } catch (e) {
+        passiveBrowserEventsSupported = !1;
+      }
+    var root = null,
+      startText = null,
+      fallbackText = null,
+      EventInterface = {
+        eventPhase: 0,
+        bubbles: 0,
+        cancelable: 0,
+        timeStamp: function (event) {
+          return event.timeStamp || Date.now();
+        },
+        defaultPrevented: 0,
+        isTrusted: 0
+      },
+      SyntheticEvent = createSyntheticEvent(EventInterface),
+      UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),
+      SyntheticUIEvent = createSyntheticEvent(UIEventInterface),
+      lastMovementX,
+      lastMovementY,
+      lastMouseEvent,
+      MouseEventInterface = assign({}, UIEventInterface, {
+        screenX: 0,
+        screenY: 0,
+        clientX: 0,
+        clientY: 0,
+        pageX: 0,
+        pageY: 0,
+        ctrlKey: 0,
+        shiftKey: 0,
+        altKey: 0,
+        metaKey: 0,
+        getModifierState: getEventModifierState,
+        button: 0,
+        buttons: 0,
+        relatedTarget: function (event) {
+          return void 0 === event.relatedTarget
+            ? event.fromElement === event.srcElement
+              ? event.toElement
+              : event.fromElement
+            : event.relatedTarget;
+        },
+        movementX: function (event) {
+          if ("movementX" in event) return event.movementX;
+          event !== lastMouseEvent &&
+            (lastMouseEvent && "mousemove" === event.type
+              ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),
+                (lastMovementY = event.screenY - lastMouseEvent.screenY))
+              : (lastMovementY = lastMovementX = 0),
+            (lastMouseEvent = event));
+          return lastMovementX;
+        },
+        movementY: function (event) {
+          return "movementY" in event ? event.movementY : lastMovementY;
+        }
+      }),
+      SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),
+      DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),
+      SyntheticDragEvent = createSyntheticEvent(DragEventInterface),
+      FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),
+      SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),
+      AnimationEventInterface = assign({}, EventInterface, {
+        animationName: 0,
+        elapsedTime: 0,
+        pseudoElement: 0
+      }),
+      SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),
+      ClipboardEventInterface = assign({}, EventInterface, {
+        clipboardData: function (event) {
+          return "clipboardData" in event
+            ? event.clipboardData
+            : window.clipboardData;
+        }
+      }),
+      SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),
+      CompositionEventInterface = assign({}, EventInterface, { data: 0 }),
+      SyntheticCompositionEvent = createSyntheticEvent(
+        CompositionEventInterface
+      ),
+      SyntheticInputEvent = SyntheticCompositionEvent,
+      normalizeKey = {
+        Esc: "Escape",
+        Spacebar: " ",
+        Left: "ArrowLeft",
+        Up: "ArrowUp",
+        Right: "ArrowRight",
+        Down: "ArrowDown",
+        Del: "Delete",
+        Win: "OS",
+        Menu: "ContextMenu",
+        Apps: "ContextMenu",
+        Scroll: "ScrollLock",
+        MozPrintableKey: "Unidentified"
+      },
+      translateToKey = {
+        8: "Backspace",
+        9: "Tab",
+        12: "Clear",
+        13: "Enter",
+        16: "Shift",
+        17: "Control",
+        18: "Alt",
+        19: "Pause",
+        20: "CapsLock",
+        27: "Escape",
+        32: " ",
+        33: "PageUp",
+        34: "PageDown",
+        35: "End",
+        36: "Home",
+        37: "ArrowLeft",
+        38: "ArrowUp",
+        39: "ArrowRight",
+        40: "ArrowDown",
+        45: "Insert",
+        46: "Delete",
+        112: "F1",
+        113: "F2",
+        114: "F3",
+        115: "F4",
+        116: "F5",
+        117: "F6",
+        118: "F7",
+        119: "F8",
+        120: "F9",
+        121: "F10",
+        122: "F11",
+        123: "F12",
+        144: "NumLock",
+        145: "ScrollLock",
+        224: "Meta"
+      },
+      modifierKeyToProp = {
+        Alt: "altKey",
+        Control: "ctrlKey",
+        Meta: "metaKey",
+        Shift: "shiftKey"
+      },
+      KeyboardEventInterface = assign({}, UIEventInterface, {
+        key: function (nativeEvent) {
+          if (nativeEvent.key) {
+            var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
+            if ("Unidentified" !== key) return key;
+          }
+          return "keypress" === nativeEvent.type
+            ? ((nativeEvent = getEventCharCode(nativeEvent)),
+              13 === nativeEvent ? "Enter" : String.fromCharCode(nativeEvent))
+            : "keydown" === nativeEvent.type || "keyup" === nativeEvent.type
+              ? translateToKey[nativeEvent.keyCode] || "Unidentified"
+              : "";
+        },
+        code: 0,
+        location: 0,
+        ctrlKey: 0,
+        shiftKey: 0,
+        altKey: 0,
+        metaKey: 0,
+        repeat: 0,
+        locale: 0,
+        getModifierState: getEventModifierState,
+        charCode: function (event) {
+          return "keypress" === event.type ? getEventCharCode(event) : 0;
+        },
+        keyCode: function (event) {
+          return "keydown" === event.type || "keyup" === event.type
+            ? event.keyCode
+            : 0;
+        },
+        which: function (event) {
+          return "keypress" === event.type
+            ? getEventCharCode(event)
+            : "keydown" === event.type || "keyup" === event.type
+              ? event.keyCode
+              : 0;
+        }
+      }),
+      SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),
+      PointerEventInterface = assign({}, MouseEventInterface, {
+        pointerId: 0,
+        width: 0,
+        height: 0,
+        pressure: 0,
+        tangentialPressure: 0,
+        tiltX: 0,
+        tiltY: 0,
+        twist: 0,
+        pointerType: 0,
+        isPrimary: 0
+      }),
+      SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),
+      TouchEventInterface = assign({}, UIEventInterface, {
+        touches: 0,
+        targetTouches: 0,
+        changedTouches: 0,
+        altKey: 0,
+        metaKey: 0,
+        ctrlKey: 0,
+        shiftKey: 0,
+        getModifierState: getEventModifierState
+      }),
+      SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),
+      TransitionEventInterface = assign({}, EventInterface, {
+        propertyName: 0,
+        elapsedTime: 0,
+        pseudoElement: 0
+      }),
+      SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),
+      WheelEventInterface = assign({}, MouseEventInterface, {
+        deltaX: function (event) {
+          return "deltaX" in event
+            ? event.deltaX
+            : "wheelDeltaX" in event
+              ? -event.wheelDeltaX
+              : 0;
+        },
+        deltaY: function (event) {
+          return "deltaY" in event
+            ? event.deltaY
+            : "wheelDeltaY" in event
+              ? -event.wheelDeltaY
+              : "wheelDelta" in event
+                ? -event.wheelDelta
+                : 0;
+        },
+        deltaZ: 0,
+        deltaMode: 0
+      }),
+      SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),
+      ToggleEventInterface = assign({}, EventInterface, {
+        newState: 0,
+        oldState: 0
+      }),
+      SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),
+      END_KEYCODES = [9, 13, 27, 32],
+      START_KEYCODE = 229,
+      canUseCompositionEvent = canUseDOM && "CompositionEvent" in window,
+      documentMode = null;
+    canUseDOM &&
+      "documentMode" in document &&
+      (documentMode = document.documentMode);
+    var canUseTextInputEvent =
+        canUseDOM && "TextEvent" in window && !documentMode,
+      useFallbackCompositionData =
+        canUseDOM &&
+        (!canUseCompositionEvent ||
+          (documentMode && 8 < documentMode && 11 >= documentMode)),
+      SPACEBAR_CODE = 32,
+      SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE),
+      hasSpaceKeypress = !1,
+      isComposing = !1,
+      supportedInputTypes = {
+        color: !0,
+        date: !0,
+        datetime: !0,
+        "datetime-local": !0,
+        email: !0,
+        month: !0,
+        number: !0,
+        password: !0,
+        range: !0,
+        search: !0,
+        tel: !0,
+        text: !0,
+        time: !0,
+        url: !0,
+        week: !0
+      },
+      activeElement$1 = null,
+      activeElementInst$1 = null,
+      isInputEventSupported = !1;
+    canUseDOM &&
+      (isInputEventSupported =
+        isEventSupported("input") &&
+        (!document.documentMode || 9 < document.documentMode));
+    var objectIs = "function" === typeof Object.is ? Object.is : is,
+      skipSelectionChangeEvent =
+        canUseDOM && "documentMode" in document && 11 >= document.documentMode,
+      activeElement = null,
+      activeElementInst = null,
+      lastSelection = null,
+      mouseDown = !1,
+      vendorPrefixes = {
+        animationend: makePrefixMap("Animation", "AnimationEnd"),
+        animationiteration: makePrefixMap("Animation", "AnimationIteration"),
+        animationstart: makePrefixMap("Animation", "AnimationStart"),
+        transitionrun: makePrefixMap("Transition", "TransitionRun"),
+        transitionstart: makePrefixMap("Transition", "TransitionStart"),
+        transitioncancel: makePrefixMap("Transition", "TransitionCancel"),
+        transitionend: makePrefixMap("Transition", "TransitionEnd")
+      },
+      prefixedEventNames = {},
+      style = {};
+    canUseDOM &&
+      ((style = document.createElement("div").style),
+      "AnimationEvent" in window ||
+        (delete vendorPrefixes.animationend.animation,
+        delete vendorPrefixes.animationiteration.animation,
+        delete vendorPrefixes.animationstart.animation),
+      "TransitionEvent" in window ||
+        delete vendorPrefixes.transitionend.transition);
+    var ANIMATION_END = getVendorPrefixedEventName("animationend"),
+      ANIMATION_ITERATION = getVendorPrefixedEventName("animationiteration"),
+      ANIMATION_START = getVendorPrefixedEventName("animationstart"),
+      TRANSITION_RUN = getVendorPrefixedEventName("transitionrun"),
+      TRANSITION_START = getVendorPrefixedEventName("transitionstart"),
+      TRANSITION_CANCEL = getVendorPrefixedEventName("transitioncancel"),
+      TRANSITION_END = getVendorPrefixedEventName("transitionend"),
+      topLevelEventsToReactNames = new Map(),
+      simpleEventPluginEvents =
+        "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(
+          " "
+        );
+    simpleEventPluginEvents.push("scrollEnd");
+    var CapturedStacks = new WeakMap(),
+      OffscreenVisible = 1,
+      OffscreenPassiveEffectsConnected = 2,
+      concurrentQueues = [],
+      concurrentQueuesIndex = 0,
+      concurrentlyUpdatedLanes = 0,
+      emptyContextObject = {};
+    Object.freeze(emptyContextObject);
+    var resolveFamily = null,
+      failedBoundaries = null,
+      NoMode = 0,
+      ConcurrentMode = 1,
+      ProfileMode = 2,
+      StrictLegacyMode = 8,
+      StrictEffectsMode = 16,
+      NoStrictPassiveEffectsMode = 64;
+    var hasBadMapPolyfill = !1;
+    try {
+      var nonExtensibleObject = Object.preventExtensions({});
+      new Map([[nonExtensibleObject, null]]);
+      new Set([nonExtensibleObject]);
+    } catch (e$3) {
+      hasBadMapPolyfill = !0;
+    }
+    var forkStack = [],
+      forkStackIndex = 0,
+      treeForkProvider = null,
+      treeForkCount = 0,
+      idStack = [],
+      idStackIndex = 0,
+      treeContextProvider = null,
+      treeContextId = 1,
+      treeContextOverflow = "",
+      hydrationParentFiber = null,
+      nextHydratableInstance = null,
+      isHydrating = !1,
+      didSuspendOrErrorDEV = !1,
+      hydrationDiffRootDEV = null,
+      hydrationErrors = null,
+      rootOrSingletonContext = !1,
+      HydrationMismatchException = Error(
+        "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."
+      ),
+      lastResetTime = 0;
+    if (
+      "object" === typeof performance &&
+      "function" === typeof performance.now
+    ) {
+      var localPerformance = performance;
+      var getCurrentTime = function () {
+        return localPerformance.now();
+      };
+    } else {
+      var localDate = Date;
+      getCurrentTime = function () {
+        return localDate.now();
+      };
+    }
+    var valueCursor = createCursor(null);
+    var rendererCursorDEV = createCursor(null);
+    var rendererSigil = {};
+    var currentlyRenderingFiber$1 = null,
+      lastContextDependency = null,
+      isDisallowedContextReadInDEV = !1,
+      AbortControllerLocal =
+        "undefined" !== typeof AbortController
+          ? AbortController
+          : function () {
+              var listeners = [],
+                signal = (this.signal = {
+                  aborted: !1,
+                  addEventListener: function (type, listener) {
+                    listeners.push(listener);
+                  }
+                });
+              this.abort = function () {
+                signal.aborted = !0;
+                listeners.forEach(function (listener) {
+                  return listener();
+                });
+              };
+            },
+      scheduleCallback$2 = Scheduler.unstable_scheduleCallback,
+      NormalPriority = Scheduler.unstable_NormalPriority,
+      CacheContext = {
+        $$typeof: REACT_CONTEXT_TYPE,
+        Consumer: null,
+        Provider: null,
+        _currentValue: null,
+        _currentValue2: null,
+        _threadCount: 0,
+        _currentRenderer: null,
+        _currentRenderer2: null
+      },
+      now = Scheduler.unstable_now,
+      renderStartTime = -0,
+      commitStartTime = -0,
+      profilerStartTime = -1.1,
+      profilerEffectDuration = -0,
+      currentUpdateIsNested = !1,
+      nestedUpdateScheduled = !1,
+      currentEntangledListeners = null,
+      currentEntangledPendingCount = 0,
+      currentEntangledLane = 0,
+      currentEntangledActionThenable = null,
+      prevOnStartTransitionFinish = ReactSharedInternals.S;
+    ReactSharedInternals.S = function (transition, returnValue) {
+      "object" === typeof returnValue &&
+        null !== returnValue &&
+        "function" === typeof returnValue.then &&
+        entangleAsyncAction(transition, returnValue);
+      null !== prevOnStartTransitionFinish &&
+        prevOnStartTransitionFinish(transition, returnValue);
+    };
+    var resumedCache = createCursor(null),
+      ReactStrictModeWarnings = {
+        recordUnsafeLifecycleWarnings: function () {},
+        flushPendingUnsafeLifecycleWarnings: function () {},
+        recordLegacyContextWarning: function () {},
+        flushLegacyContextWarning: function () {},
+        discardPendingWarnings: function () {}
+      },
+      pendingComponentWillMountWarnings = [],
+      pendingUNSAFE_ComponentWillMountWarnings = [],
+      pendingComponentWillReceivePropsWarnings = [],
+      pendingUNSAFE_ComponentWillReceivePropsWarnings = [],
+      pendingComponentWillUpdateWarnings = [],
+      pendingUNSAFE_ComponentWillUpdateWarnings = [],
+      didWarnAboutUnsafeLifecycles = new Set();
+    ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (
+      fiber,
+      instance
+    ) {
+      didWarnAboutUnsafeLifecycles.has(fiber.type) ||
+        ("function" === typeof instance.componentWillMount &&
+          !0 !== instance.componentWillMount.__suppressDeprecationWarning &&
+          pendingComponentWillMountWarnings.push(fiber),
+        fiber.mode & StrictLegacyMode &&
+          "function" === typeof instance.UNSAFE_componentWillMount &&
+          pendingUNSAFE_ComponentWillMountWarnings.push(fiber),
+        "function" === typeof instance.componentWillReceiveProps &&
+          !0 !==
+            instance.componentWillReceiveProps.__suppressDeprecationWarning &&
+          pendingComponentWillReceivePropsWarnings.push(fiber),
+        fiber.mode & StrictLegacyMode &&
+          "function" === typeof instance.UNSAFE_componentWillReceiveProps &&
+          pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber),
+        "function" === typeof instance.componentWillUpdate &&
+          !0 !== instance.componentWillUpdate.__suppressDeprecationWarning &&
+          pendingComponentWillUpdateWarnings.push(fiber),
+        fiber.mode & StrictLegacyMode &&
+          "function" === typeof instance.UNSAFE_componentWillUpdate &&
+          pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber));
+    };
+    ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {
+      var componentWillMountUniqueNames = new Set();
+      0 < pendingComponentWillMountWarnings.length &&
+        (pendingComponentWillMountWarnings.forEach(function (fiber) {
+          componentWillMountUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingComponentWillMountWarnings = []));
+      var UNSAFE_componentWillMountUniqueNames = new Set();
+      0 < pendingUNSAFE_ComponentWillMountWarnings.length &&
+        (pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {
+          UNSAFE_componentWillMountUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingUNSAFE_ComponentWillMountWarnings = []));
+      var componentWillReceivePropsUniqueNames = new Set();
+      0 < pendingComponentWillReceivePropsWarnings.length &&
+        (pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {
+          componentWillReceivePropsUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingComponentWillReceivePropsWarnings = []));
+      var UNSAFE_componentWillReceivePropsUniqueNames = new Set();
+      0 < pendingUNSAFE_ComponentWillReceivePropsWarnings.length &&
+        (pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(
+          function (fiber) {
+            UNSAFE_componentWillReceivePropsUniqueNames.add(
+              getComponentNameFromFiber(fiber) || "Component"
+            );
+            didWarnAboutUnsafeLifecycles.add(fiber.type);
+          }
+        ),
+        (pendingUNSAFE_ComponentWillReceivePropsWarnings = []));
+      var componentWillUpdateUniqueNames = new Set();
+      0 < pendingComponentWillUpdateWarnings.length &&
+        (pendingComponentWillUpdateWarnings.forEach(function (fiber) {
+          componentWillUpdateUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingComponentWillUpdateWarnings = []));
+      var UNSAFE_componentWillUpdateUniqueNames = new Set();
+      0 < pendingUNSAFE_ComponentWillUpdateWarnings.length &&
+        (pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {
+          UNSAFE_componentWillUpdateUniqueNames.add(
+            getComponentNameFromFiber(fiber) || "Component"
+          );
+          didWarnAboutUnsafeLifecycles.add(fiber.type);
+        }),
+        (pendingUNSAFE_ComponentWillUpdateWarnings = []));
+      if (0 < UNSAFE_componentWillMountUniqueNames.size) {
+        var sortedNames = setToSortedString(
+          UNSAFE_componentWillMountUniqueNames
+        );
+        console.error(
+          "Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n\nPlease update the following components: %s",
+          sortedNames
+        );
+      }
+      0 < UNSAFE_componentWillReceivePropsUniqueNames.size &&
+        ((sortedNames = setToSortedString(
+          UNSAFE_componentWillReceivePropsUniqueNames
+        )),
+        console.error(
+          "Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+      0 < UNSAFE_componentWillUpdateUniqueNames.size &&
+        ((sortedNames = setToSortedString(
+          UNSAFE_componentWillUpdateUniqueNames
+        )),
+        console.error(
+          "Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+      0 < componentWillMountUniqueNames.size &&
+        ((sortedNames = setToSortedString(componentWillMountUniqueNames)),
+        console.warn(
+          "componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+      0 < componentWillReceivePropsUniqueNames.size &&
+        ((sortedNames = setToSortedString(
+          componentWillReceivePropsUniqueNames
+        )),
+        console.warn(
+          "componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\n* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+      0 < componentWillUpdateUniqueNames.size &&
+        ((sortedNames = setToSortedString(componentWillUpdateUniqueNames)),
+        console.warn(
+          "componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s",
+          sortedNames
+        ));
+    };
+    var pendingLegacyContextWarning = new Map(),
+      didWarnAboutLegacyContext = new Set();
+    ReactStrictModeWarnings.recordLegacyContextWarning = function (
+      fiber,
+      instance
+    ) {
+      var strictRoot = null;
+      for (var node = fiber; null !== node; )
+        node.mode & StrictLegacyMode && (strictRoot = node),
+          (node = node.return);
+      null === strictRoot
+        ? console.error(
+            "Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue."
+          )
+        : !didWarnAboutLegacyContext.has(fiber.type) &&
+          ((node = pendingLegacyContextWarning.get(strictRoot)),
+          null != fiber.type.contextTypes ||
+            null != fiber.type.childContextTypes ||
+            (null !== instance &&
+              "function" === typeof instance.getChildContext)) &&
+          (void 0 === node &&
+            ((node = []), pendingLegacyContextWarning.set(strictRoot, node)),
+          node.push(fiber));
+    };
+    ReactStrictModeWarnings.flushLegacyContextWarning = function () {
+      pendingLegacyContextWarning.forEach(function (fiberArray) {
+        if (0 !== fiberArray.length) {
+          var firstFiber = fiberArray[0],
+            uniqueNames = new Set();
+          fiberArray.forEach(function (fiber) {
+            uniqueNames.add(getComponentNameFromFiber(fiber) || "Component");
+            didWarnAboutLegacyContext.add(fiber.type);
+          });
+          var sortedNames = setToSortedString(uniqueNames);
+          runWithFiberInDEV(firstFiber, function () {
+            console.error(
+              "Legacy context API has been detected within a strict-mode tree.\n\nThe old API will be supported in all 16.x releases, but applications using it should migrate to the new version.\n\nPlease update the following components: %s\n\nLearn more about this warning here: https://react.dev/link/legacy-context",
+              sortedNames
+            );
+          });
+        }
+      });
+    };
+    ReactStrictModeWarnings.discardPendingWarnings = function () {
+      pendingComponentWillMountWarnings = [];
+      pendingUNSAFE_ComponentWillMountWarnings = [];
+      pendingComponentWillReceivePropsWarnings = [];
+      pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
+      pendingComponentWillUpdateWarnings = [];
+      pendingUNSAFE_ComponentWillUpdateWarnings = [];
+      pendingLegacyContextWarning = new Map();
+    };
+    var SuspenseException = Error(
+        "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+      ),
+      SuspenseyCommitException = Error(
+        "Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."
+      ),
+      SuspenseActionException = Error(
+        "Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary."
+      ),
+      noopSuspenseyCommitThenable = {
+        then: function () {
+          console.error(
+            'Internal React error: A listener was unexpectedly attached to a "noop" thenable. This is a bug in React. Please file an issue.'
+          );
+        }
+      },
+      suspendedThenable = null,
+      needsToResetSuspendedThenableDEV = !1,
+      NoFlags = 0,
+      HasEffect = 1,
+      Insertion = 2,
+      Layout = 4,
+      Passive = 8,
+      UpdateState = 0,
+      ReplaceState = 1,
+      ForceUpdate = 2,
+      CaptureUpdate = 3,
+      hasForceUpdate = !1;
+    var didWarnUpdateInsideUpdate = !1;
+    var currentlyProcessingQueue = null;
+    var didReadFromEntangledAsyncAction = !1,
+      currentTreeHiddenStackCursor = createCursor(null),
+      prevEntangledRenderLanesCursor = createCursor(0),
+      didWarnUncachedGetSnapshot;
+    var didWarnAboutMismatchedHooksForComponent = new Set();
+    var didWarnAboutUseWrappedInTryCatch = new Set();
+    var didWarnAboutAsyncClientComponent = new Set();
+    var didWarnAboutUseFormState = new Set();
+    var renderLanes = 0,
+      currentlyRenderingFiber = null,
+      currentHook = null,
+      workInProgressHook = null,
+      didScheduleRenderPhaseUpdate = !1,
+      didScheduleRenderPhaseUpdateDuringThisPass = !1,
+      shouldDoubleInvokeUserFnsInHooksDEV = !1,
+      localIdCounter = 0,
+      thenableIndexCounter$1 = 0,
+      thenableState$1 = null,
+      globalClientIdCounter = 0,
+      RE_RENDER_LIMIT = 25,
+      currentHookNameInDev = null,
+      hookTypesDev = null,
+      hookTypesUpdateIndexDev = -1,
+      ignorePreviousDependencies = !1,
+      ContextOnlyDispatcher = {
+        readContext: readContext,
+        use: use,
+        useCallback: throwInvalidHookError,
+        useContext: throwInvalidHookError,
+        useEffect: throwInvalidHookError,
+        useImperativeHandle: throwInvalidHookError,
+        useLayoutEffect: throwInvalidHookError,
+        useInsertionEffect: throwInvalidHookError,
+        useMemo: throwInvalidHookError,
+        useReducer: throwInvalidHookError,
+        useRef: throwInvalidHookError,
+        useState: throwInvalidHookError,
+        useDebugValue: throwInvalidHookError,
+        useDeferredValue: throwInvalidHookError,
+        useTransition: throwInvalidHookError,
+        useSyncExternalStore: throwInvalidHookError,
+        useId: throwInvalidHookError,
+        useHostTransitionStatus: throwInvalidHookError,
+        useFormState: throwInvalidHookError,
+        useActionState: throwInvalidHookError,
+        useOptimistic: throwInvalidHookError,
+        useMemoCache: throwInvalidHookError,
+        useCacheRefresh: throwInvalidHookError
+      },
+      HooksDispatcherOnMountInDEV = null,
+      HooksDispatcherOnMountWithHookTypesInDEV = null,
+      HooksDispatcherOnUpdateInDEV = null,
+      HooksDispatcherOnRerenderInDEV = null,
+      InvalidNestedHooksDispatcherOnMountInDEV = null,
+      InvalidNestedHooksDispatcherOnUpdateInDEV = null,
+      InvalidNestedHooksDispatcherOnRerenderInDEV = null;
+    HooksDispatcherOnMountInDEV = {
+      readContext: function (context) {
+        return readContext(context);
+      },
+      use: use,
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        return mountCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        mountHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(createDeps);
+        return mountEffect(create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        return mountImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        mountEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        return mountLayoutEffect(create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        mountHookTypesDev();
+        checkDepsAreArrayDev(deps);
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function (initialValue) {
+        currentHookNameInDev = "useRef";
+        mountHookTypesDev();
+        return mountRef(initialValue);
+      },
+      useState: function (initialState) {
+        currentHookNameInDev = "useState";
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountState(initialState);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        mountHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        mountHookTypesDev();
+        return mountDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        mountHookTypesDev();
+        return mountTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        mountHookTypesDev();
+        return mountSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        mountHookTypesDev();
+        return mountId();
+      },
+      useFormState: function (action, initialState) {
+        currentHookNameInDev = "useFormState";
+        mountHookTypesDev();
+        warnOnUseFormStateInDev();
+        return mountActionState(action, initialState);
+      },
+      useActionState: function (action, initialState) {
+        currentHookNameInDev = "useActionState";
+        mountHookTypesDev();
+        return mountActionState(action, initialState);
+      },
+      useOptimistic: function (passthrough) {
+        currentHookNameInDev = "useOptimistic";
+        mountHookTypesDev();
+        return mountOptimistic(passthrough);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useMemoCache: useMemoCache,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        mountHookTypesDev();
+        return mountRefresh();
+      }
+    };
+    HooksDispatcherOnMountWithHookTypesInDEV = {
+      readContext: function (context) {
+        return readContext(context);
+      },
+      use: use,
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        updateHookTypesDev();
+        return mountCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        updateHookTypesDev();
+        return mountEffect(create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        updateHookTypesDev();
+        return mountImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        updateHookTypesDev();
+        mountEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        updateHookTypesDev();
+        return mountLayoutEffect(create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function (initialValue) {
+        currentHookNameInDev = "useRef";
+        updateHookTypesDev();
+        return mountRef(initialValue);
+      },
+      useState: function (initialState) {
+        currentHookNameInDev = "useState";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountState(initialState);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        updateHookTypesDev();
+        return mountDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        updateHookTypesDev();
+        return mountTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        updateHookTypesDev();
+        return mountSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        updateHookTypesDev();
+        return mountId();
+      },
+      useActionState: function (action, initialState) {
+        currentHookNameInDev = "useActionState";
+        updateHookTypesDev();
+        return mountActionState(action, initialState);
+      },
+      useFormState: function (action, initialState) {
+        currentHookNameInDev = "useFormState";
+        updateHookTypesDev();
+        warnOnUseFormStateInDev();
+        return mountActionState(action, initialState);
+      },
+      useOptimistic: function (passthrough) {
+        currentHookNameInDev = "useOptimistic";
+        updateHookTypesDev();
+        return mountOptimistic(passthrough);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useMemoCache: useMemoCache,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return mountRefresh();
+      }
+    };
+    HooksDispatcherOnUpdateInDEV = {
+      readContext: function (context) {
+        return readContext(context);
+      },
+      use: use,
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        updateHookTypesDev();
+        return updateCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        updateHookTypesDev();
+        updateEffectImpl(2048, Passive, create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        updateHookTypesDev();
+        return updateImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        updateHookTypesDev();
+        return updateEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        updateHookTypesDev();
+        return updateEffectImpl(4, Layout, create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function () {
+        currentHookNameInDev = "useRef";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useState: function () {
+        currentHookNameInDev = "useState";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateReducer(basicStateReducer);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        updateHookTypesDev();
+        return updateDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        updateHookTypesDev();
+        return updateTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        updateHookTypesDev();
+        return updateSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useFormState: function (action) {
+        currentHookNameInDev = "useFormState";
+        updateHookTypesDev();
+        warnOnUseFormStateInDev();
+        return updateActionState(action);
+      },
+      useActionState: function (action) {
+        currentHookNameInDev = "useActionState";
+        updateHookTypesDev();
+        return updateActionState(action);
+      },
+      useOptimistic: function (passthrough, reducer) {
+        currentHookNameInDev = "useOptimistic";
+        updateHookTypesDev();
+        return updateOptimistic(passthrough, reducer);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useMemoCache: useMemoCache,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      }
+    };
+    HooksDispatcherOnRerenderInDEV = {
+      readContext: function (context) {
+        return readContext(context);
+      },
+      use: use,
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        updateHookTypesDev();
+        return updateCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        updateHookTypesDev();
+        updateEffectImpl(2048, Passive, create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        updateHookTypesDev();
+        return updateImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        updateHookTypesDev();
+        return updateEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        updateHookTypesDev();
+        return updateEffectImpl(4, Layout, create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;
+        try {
+          return updateMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;
+        try {
+          return rerenderReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function () {
+        currentHookNameInDev = "useRef";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useState: function () {
+        currentHookNameInDev = "useState";
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;
+        try {
+          return rerenderReducer(basicStateReducer);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        updateHookTypesDev();
+        return rerenderDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        updateHookTypesDev();
+        return rerenderTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        updateHookTypesDev();
+        return updateSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useFormState: function (action) {
+        currentHookNameInDev = "useFormState";
+        updateHookTypesDev();
+        warnOnUseFormStateInDev();
+        return rerenderActionState(action);
+      },
+      useActionState: function (action) {
+        currentHookNameInDev = "useActionState";
+        updateHookTypesDev();
+        return rerenderActionState(action);
+      },
+      useOptimistic: function (passthrough, reducer) {
+        currentHookNameInDev = "useOptimistic";
+        updateHookTypesDev();
+        return rerenderOptimistic(passthrough, reducer);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useMemoCache: useMemoCache,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      }
+    };
+    InvalidNestedHooksDispatcherOnMountInDEV = {
+      readContext: function (context) {
+        warnInvalidContextAccess();
+        return readContext(context);
+      },
+      use: function (usable) {
+        warnInvalidHookAccess();
+        return use(usable);
+      },
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountEffect(create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        mountEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountLayoutEffect(create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function (initialValue) {
+        currentHookNameInDev = "useRef";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountRef(initialValue);
+      },
+      useState: function (initialState) {
+        currentHookNameInDev = "useState";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;
+        try {
+          return mountState(initialState);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountId();
+      },
+      useFormState: function (action, initialState) {
+        currentHookNameInDev = "useFormState";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountActionState(action, initialState);
+      },
+      useActionState: function (action, initialState) {
+        currentHookNameInDev = "useActionState";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountActionState(action, initialState);
+      },
+      useOptimistic: function (passthrough) {
+        currentHookNameInDev = "useOptimistic";
+        warnInvalidHookAccess();
+        mountHookTypesDev();
+        return mountOptimistic(passthrough);
+      },
+      useMemoCache: function (size) {
+        warnInvalidHookAccess();
+        return useMemoCache(size);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        mountHookTypesDev();
+        return mountRefresh();
+      }
+    };
+    InvalidNestedHooksDispatcherOnUpdateInDEV = {
+      readContext: function (context) {
+        warnInvalidContextAccess();
+        return readContext(context);
+      },
+      use: function (usable) {
+        warnInvalidHookAccess();
+        return use(usable);
+      },
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        updateEffectImpl(2048, Passive, create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateEffectImpl(4, Layout, create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function () {
+        currentHookNameInDev = "useRef";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useState: function () {
+        currentHookNameInDev = "useState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateReducer(basicStateReducer);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useFormState: function (action) {
+        currentHookNameInDev = "useFormState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateActionState(action);
+      },
+      useActionState: function (action) {
+        currentHookNameInDev = "useActionState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateActionState(action);
+      },
+      useOptimistic: function (passthrough, reducer) {
+        currentHookNameInDev = "useOptimistic";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateOptimistic(passthrough, reducer);
+      },
+      useMemoCache: function (size) {
+        warnInvalidHookAccess();
+        return useMemoCache(size);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      }
+    };
+    InvalidNestedHooksDispatcherOnRerenderInDEV = {
+      readContext: function (context) {
+        warnInvalidContextAccess();
+        return readContext(context);
+      },
+      use: function (usable) {
+        warnInvalidHookAccess();
+        return use(usable);
+      },
+      useCallback: function (callback, deps) {
+        currentHookNameInDev = "useCallback";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateCallback(callback, deps);
+      },
+      useContext: function (context) {
+        currentHookNameInDev = "useContext";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return readContext(context);
+      },
+      useEffect: function (create, createDeps) {
+        currentHookNameInDev = "useEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        updateEffectImpl(2048, Passive, create, createDeps);
+      },
+      useImperativeHandle: function (ref, create, deps) {
+        currentHookNameInDev = "useImperativeHandle";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateImperativeHandle(ref, create, deps);
+      },
+      useInsertionEffect: function (create, deps) {
+        currentHookNameInDev = "useInsertionEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateEffectImpl(4, Insertion, create, deps);
+      },
+      useLayoutEffect: function (create, deps) {
+        currentHookNameInDev = "useLayoutEffect";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateEffectImpl(4, Layout, create, deps);
+      },
+      useMemo: function (create, deps) {
+        currentHookNameInDev = "useMemo";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return updateMemo(create, deps);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useReducer: function (reducer, initialArg, init) {
+        currentHookNameInDev = "useReducer";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return rerenderReducer(reducer, initialArg, init);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useRef: function () {
+        currentHookNameInDev = "useRef";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useState: function () {
+        currentHookNameInDev = "useState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        var prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;
+        try {
+          return rerenderReducer(basicStateReducer);
+        } finally {
+          ReactSharedInternals.H = prevDispatcher;
+        }
+      },
+      useDebugValue: function () {
+        currentHookNameInDev = "useDebugValue";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+      },
+      useDeferredValue: function (value, initialValue) {
+        currentHookNameInDev = "useDeferredValue";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderDeferredValue(value, initialValue);
+      },
+      useTransition: function () {
+        currentHookNameInDev = "useTransition";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderTransition();
+      },
+      useSyncExternalStore: function (
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      ) {
+        currentHookNameInDev = "useSyncExternalStore";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateSyncExternalStore(
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        );
+      },
+      useId: function () {
+        currentHookNameInDev = "useId";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      },
+      useFormState: function (action) {
+        currentHookNameInDev = "useFormState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderActionState(action);
+      },
+      useActionState: function (action) {
+        currentHookNameInDev = "useActionState";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderActionState(action);
+      },
+      useOptimistic: function (passthrough, reducer) {
+        currentHookNameInDev = "useOptimistic";
+        warnInvalidHookAccess();
+        updateHookTypesDev();
+        return rerenderOptimistic(passthrough, reducer);
+      },
+      useMemoCache: function (size) {
+        warnInvalidHookAccess();
+        return useMemoCache(size);
+      },
+      useHostTransitionStatus: useHostTransitionStatus,
+      useCacheRefresh: function () {
+        currentHookNameInDev = "useCacheRefresh";
+        updateHookTypesDev();
+        return updateWorkInProgressHook().memoizedState;
+      }
+    };
+    var callComponent = {
+        react_stack_bottom_frame: function (Component, props, secondArg) {
+          var wasRendering = isRendering;
+          isRendering = !0;
+          try {
+            return Component(props, secondArg);
+          } finally {
+            isRendering = wasRendering;
+          }
+        }
+      },
+      callComponentInDEV =
+        callComponent.react_stack_bottom_frame.bind(callComponent),
+      callRender = {
+        react_stack_bottom_frame: function (instance) {
+          var wasRendering = isRendering;
+          isRendering = !0;
+          try {
+            return instance.render();
+          } finally {
+            isRendering = wasRendering;
+          }
+        }
+      },
+      callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),
+      callComponentDidMount = {
+        react_stack_bottom_frame: function (finishedWork, instance) {
+          try {
+            instance.componentDidMount();
+          } catch (error) {
+            captureCommitPhaseError(finishedWork, finishedWork.return, error);
+          }
+        }
+      },
+      callComponentDidMountInDEV =
+        callComponentDidMount.react_stack_bottom_frame.bind(
+          callComponentDidMount
+        ),
+      callComponentDidUpdate = {
+        react_stack_bottom_frame: function (
+          finishedWork,
+          instance,
+          prevProps,
+          prevState,
+          snapshot
+        ) {
+          try {
+            instance.componentDidUpdate(prevProps, prevState, snapshot);
+          } catch (error) {
+            captureCommitPhaseError(finishedWork, finishedWork.return, error);
+          }
+        }
+      },
+      callComponentDidUpdateInDEV =
+        callComponentDidUpdate.react_stack_bottom_frame.bind(
+          callComponentDidUpdate
+        ),
+      callComponentDidCatch = {
+        react_stack_bottom_frame: function (instance, errorInfo) {
+          var stack = errorInfo.stack;
+          instance.componentDidCatch(errorInfo.value, {
+            componentStack: null !== stack ? stack : ""
+          });
+        }
+      },
+      callComponentDidCatchInDEV =
+        callComponentDidCatch.react_stack_bottom_frame.bind(
+          callComponentDidCatch
+        ),
+      callComponentWillUnmount = {
+        react_stack_bottom_frame: function (
+          current,
+          nearestMountedAncestor,
+          instance
+        ) {
+          try {
+            instance.componentWillUnmount();
+          } catch (error) {
+            captureCommitPhaseError(current, nearestMountedAncestor, error);
+          }
+        }
+      },
+      callComponentWillUnmountInDEV =
+        callComponentWillUnmount.react_stack_bottom_frame.bind(
+          callComponentWillUnmount
+        ),
+      callCreate = {
+        react_stack_bottom_frame: function (effect) {
+          null != effect.resourceKind &&
+            console.error(
+              "Expected only SimpleEffects when enableUseEffectCRUDOverload is disabled, got %s",
+              effect.resourceKind
+            );
+          var create = effect.create;
+          effect = effect.inst;
+          create = create();
+          return (effect.destroy = create);
+        }
+      },
+      callCreateInDEV = callCreate.react_stack_bottom_frame.bind(callCreate),
+      callDestroy = {
+        react_stack_bottom_frame: function (
+          current,
+          nearestMountedAncestor,
+          destroy
+        ) {
+          try {
+            destroy();
+          } catch (error) {
+            captureCommitPhaseError(current, nearestMountedAncestor, error);
+          }
+        }
+      },
+      callDestroyInDEV = callDestroy.react_stack_bottom_frame.bind(callDestroy),
+      callLazyInit = {
+        react_stack_bottom_frame: function (lazy) {
+          var init = lazy._init;
+          return init(lazy._payload);
+        }
+      },
+      callLazyInitInDEV =
+        callLazyInit.react_stack_bottom_frame.bind(callLazyInit),
+      thenableState = null,
+      thenableIndexCounter = 0,
+      currentDebugInfo = null,
+      didWarnAboutMaps;
+    var didWarnAboutGenerators = (didWarnAboutMaps = !1);
+    var ownerHasKeyUseWarning = {};
+    var ownerHasFunctionTypeWarning = {};
+    var ownerHasSymbolTypeWarning = {};
+    warnForMissingKey = function (returnFiber, workInProgress, child) {
+      if (
+        null !== child &&
+        "object" === typeof child &&
+        child._store &&
+        ((!child._store.validated && null == child.key) ||
+          2 === child._store.validated)
+      ) {
+        if ("object" !== typeof child._store)
+          throw Error(
+            "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue."
+          );
+        child._store.validated = 1;
+        var componentName = getComponentNameFromFiber(returnFiber),
+          componentKey = componentName || "null";
+        if (!ownerHasKeyUseWarning[componentKey]) {
+          ownerHasKeyUseWarning[componentKey] = !0;
+          child = child._owner;
+          returnFiber = returnFiber._debugOwner;
+          var currentComponentErrorInfo = "";
+          returnFiber &&
+            "number" === typeof returnFiber.tag &&
+            (componentKey = getComponentNameFromFiber(returnFiber)) &&
+            (currentComponentErrorInfo =
+              "\n\nCheck the render method of `" + componentKey + "`.");
+          currentComponentErrorInfo ||
+            (componentName &&
+              (currentComponentErrorInfo =
+                "\n\nCheck the top-level render call using <" +
+                componentName +
+                ">."));
+          var childOwnerAppendix = "";
+          null != child &&
+            returnFiber !== child &&
+            ((componentName = null),
+            "number" === typeof child.tag
+              ? (componentName = getComponentNameFromFiber(child))
+              : "string" === typeof child.name && (componentName = child.name),
+            componentName &&
+              (childOwnerAppendix =
+                " It was passed a child from " + componentName + "."));
+          runWithFiberInDEV(workInProgress, function () {
+            console.error(
+              'Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',
+              currentComponentErrorInfo,
+              childOwnerAppendix
+            );
+          });
+        }
+      }
+    };
+    var reconcileChildFibers = createChildReconciler(!0),
+      mountChildFibers = createChildReconciler(!1),
+      suspenseHandlerStackCursor = createCursor(null),
+      shellBoundary = null,
+      SubtreeSuspenseContextMask = 1,
+      ForceSuspenseFallback = 2,
+      suspenseStackCursor = createCursor(0),
+      fakeInternalInstance = {};
+    var didWarnAboutStateAssignmentForComponent = new Set();
+    var didWarnAboutUninitializedState = new Set();
+    var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
+    var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
+    var didWarnAboutDirectlyAssigningPropsToState = new Set();
+    var didWarnAboutUndefinedDerivedState = new Set();
+    var didWarnAboutContextTypes$1 = new Set();
+    var didWarnAboutChildContextTypes = new Set();
+    var didWarnAboutInvalidateContextType = new Set();
+    var didWarnOnInvalidCallback = new Set();
+    Object.freeze(fakeInternalInstance);
+    var classComponentUpdater = {
+        enqueueSetState: function (inst, payload, callback) {
+          inst = inst._reactInternals;
+          var lane = requestUpdateLane(inst),
+            update = createUpdate(lane);
+          update.payload = payload;
+          void 0 !== callback &&
+            null !== callback &&
+            (warnOnInvalidCallback(callback), (update.callback = callback));
+          payload = enqueueUpdate(inst, update, lane);
+          null !== payload &&
+            (scheduleUpdateOnFiber(payload, inst, lane),
+            entangleTransitions(payload, inst, lane));
+          markStateUpdateScheduled(inst, lane);
+        },
+        enqueueReplaceState: function (inst, payload, callback) {
+          inst = inst._reactInternals;
+          var lane = requestUpdateLane(inst),
+            update = createUpdate(lane);
+          update.tag = ReplaceState;
+          update.payload = payload;
+          void 0 !== callback &&
+            null !== callback &&
+            (warnOnInvalidCallback(callback), (update.callback = callback));
+          payload = enqueueUpdate(inst, update, lane);
+          null !== payload &&
+            (scheduleUpdateOnFiber(payload, inst, lane),
+            entangleTransitions(payload, inst, lane));
+          markStateUpdateScheduled(inst, lane);
+        },
+        enqueueForceUpdate: function (inst, callback) {
+          inst = inst._reactInternals;
+          var lane = requestUpdateLane(inst),
+            update = createUpdate(lane);
+          update.tag = ForceUpdate;
+          void 0 !== callback &&
+            null !== callback &&
+            (warnOnInvalidCallback(callback), (update.callback = callback));
+          callback = enqueueUpdate(inst, update, lane);
+          null !== callback &&
+            (scheduleUpdateOnFiber(callback, inst, lane),
+            entangleTransitions(callback, inst, lane));
+          null !== injectedProfilingHooks &&
+            "function" ===
+              typeof injectedProfilingHooks.markForceUpdateScheduled &&
+            injectedProfilingHooks.markForceUpdateScheduled(inst, lane);
+        }
+      },
+      reportGlobalError =
+        "function" === typeof reportError
+          ? reportError
+          : function (error) {
+              if (
+                "object" === typeof window &&
+                "function" === typeof window.ErrorEvent
+              ) {
+                var event = new window.ErrorEvent("error", {
+                  bubbles: !0,
+                  cancelable: !0,
+                  message:
+                    "object" === typeof error &&
+                    null !== error &&
+                    "string" === typeof error.message
+                      ? String(error.message)
+                      : String(error),
+                  error: error
+                });
+                if (!window.dispatchEvent(event)) return;
+              } else if (
+                "object" === typeof process &&
+                "function" === typeof process.emit
+              ) {
+                process.emit("uncaughtException", error);
+                return;
+              }
+              console.error(error);
+            },
+      componentName = null,
+      errorBoundaryName = null,
+      SelectiveHydrationException = Error(
+        "This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue."
+      ),
+      didReceiveUpdate = !1;
+    var didWarnAboutBadClass = {};
+    var didWarnAboutContextTypeOnFunctionComponent = {};
+    var didWarnAboutContextTypes = {};
+    var didWarnAboutGetDerivedStateOnFunctionComponent = {};
+    var didWarnAboutReassigningProps = !1;
+    var didWarnAboutRevealOrder = {};
+    var didWarnAboutTailOptions = {};
+    var SUSPENDED_MARKER = {
+        dehydrated: null,
+        treeContext: null,
+        retryLane: 0,
+        hydrationErrors: null
+      },
+      hasWarnedAboutUsingNoValuePropOnContextProvider = !1,
+      didWarnAboutUndefinedSnapshotBeforeUpdate = null;
+    didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();
+    var offscreenSubtreeIsHidden = !1,
+      offscreenSubtreeWasHidden = !1,
+      needsFormReset = !1,
+      PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set,
+      nextEffect = null,
+      inProgressLanes = null,
+      inProgressRoot = null,
+      hostParent = null,
+      hostParentIsContainer = !1,
+      currentHoistableRoot = null,
+      suspenseyCommitFlag = 8192,
+      DefaultAsyncDispatcher = {
+        getCacheForType: function (resourceType) {
+          var cache = readContext(CacheContext),
+            cacheForType = cache.data.get(resourceType);
+          void 0 === cacheForType &&
+            ((cacheForType = resourceType()),
+            cache.data.set(resourceType, cacheForType));
+          return cacheForType;
+        },
+        getOwner: function () {
+          return current;
+        }
+      };
+    if ("function" === typeof Symbol && Symbol.for) {
+      var symbolFor = Symbol.for;
+      symbolFor("selector.component");
+      symbolFor("selector.has_pseudo_class");
+      symbolFor("selector.role");
+      symbolFor("selector.test_id");
+      symbolFor("selector.text");
+    }
+    var commitHooks = [],
+      PossiblyWeakMap = "function" === typeof WeakMap ? WeakMap : Map,
+      NoContext = 0,
+      RenderContext = 2,
+      CommitContext = 4,
+      RootInProgress = 0,
+      RootFatalErrored = 1,
+      RootErrored = 2,
+      RootSuspended = 3,
+      RootSuspendedWithDelay = 4,
+      RootSuspendedAtTheShell = 6,
+      RootCompleted = 5,
+      executionContext = NoContext,
+      workInProgressRoot = null,
+      workInProgress = null,
+      workInProgressRootRenderLanes = 0,
+      NotSuspended = 0,
+      SuspendedOnError = 1,
+      SuspendedOnData = 2,
+      SuspendedOnImmediate = 3,
+      SuspendedOnInstance = 4,
+      SuspendedOnInstanceAndReadyToContinue = 5,
+      SuspendedOnDeprecatedThrowPromise = 6,
+      SuspendedAndReadyToContinue = 7,
+      SuspendedOnHydration = 8,
+      SuspendedOnAction = 9,
+      workInProgressSuspendedReason = NotSuspended,
+      workInProgressThrownValue = null,
+      workInProgressRootDidSkipSuspendedSiblings = !1,
+      workInProgressRootIsPrerendering = !1,
+      workInProgressRootDidAttachPingListener = !1,
+      entangledRenderLanes = 0,
+      workInProgressRootExitStatus = RootInProgress,
+      workInProgressRootSkippedLanes = 0,
+      workInProgressRootInterleavedUpdatedLanes = 0,
+      workInProgressRootPingedLanes = 0,
+      workInProgressDeferredLane = 0,
+      workInProgressSuspendedRetryLanes = 0,
+      workInProgressRootConcurrentErrors = null,
+      workInProgressRootRecoverableErrors = null,
+      workInProgressRootDidIncludeRecursiveRenderUpdate = !1,
+      globalMostRecentFallbackTime = 0,
+      FALLBACK_THROTTLE_MS = 300,
+      workInProgressRootRenderTargetTime = Infinity,
+      RENDER_TIMEOUT_MS = 500,
+      workInProgressTransitions = null,
+      legacyErrorBoundariesThatAlreadyFailed = null,
+      IMMEDIATE_COMMIT = 0,
+      SUSPENDED_COMMIT = 1,
+      THROTTLED_COMMIT = 2,
+      NO_PENDING_EFFECTS = 0,
+      PENDING_MUTATION_PHASE = 1,
+      PENDING_LAYOUT_PHASE = 2,
+      PENDING_AFTER_MUTATION_PHASE = 3,
+      PENDING_SPAWNED_WORK = 4,
+      PENDING_PASSIVE_PHASE = 5,
+      pendingEffectsStatus = 0,
+      pendingEffectsRoot = null,
+      pendingFinishedWork = null,
+      pendingEffectsLanes = 0,
+      pendingEffectsRemainingLanes = 0,
+      pendingPassiveTransitions = null,
+      pendingRecoverableErrors = null,
+      NESTED_UPDATE_LIMIT = 50,
+      nestedUpdateCount = 0,
+      rootWithNestedUpdates = null,
+      isFlushingPassiveEffects = !1,
+      didScheduleUpdateDuringPassiveEffects = !1,
+      NESTED_PASSIVE_UPDATE_LIMIT = 50,
+      nestedPassiveUpdateCount = 0,
+      rootWithPassiveNestedUpdates = null,
+      isRunningInsertionEffect = !1,
+      didWarnStateUpdateForNotYetMountedComponent = null,
+      didWarnAboutUpdateInRender = !1;
+    var didWarnAboutUpdateInRenderForAnotherComponent = new Set();
+    var fakeActCallbackNode$1 = {},
+      firstScheduledRoot = null,
+      lastScheduledRoot = null,
+      didScheduleMicrotask = !1,
+      didScheduleMicrotask_act = !1,
+      mightHavePendingSyncWork = !1,
+      isFlushingWork = !1,
+      currentEventTransitionLane = 0,
+      fakeActCallbackNode = {};
+    (function () {
+      for (var i = 0; i < simpleEventPluginEvents.length; i++) {
+        var eventName = simpleEventPluginEvents[i],
+          domEventName = eventName.toLowerCase();
+        eventName = eventName[0].toUpperCase() + eventName.slice(1);
+        registerSimpleEvent(domEventName, "on" + eventName);
+      }
+      registerSimpleEvent(ANIMATION_END, "onAnimationEnd");
+      registerSimpleEvent(ANIMATION_ITERATION, "onAnimationIteration");
+      registerSimpleEvent(ANIMATION_START, "onAnimationStart");
+      registerSimpleEvent("dblclick", "onDoubleClick");
+      registerSimpleEvent("focusin", "onFocus");
+      registerSimpleEvent("focusout", "onBlur");
+      registerSimpleEvent(TRANSITION_RUN, "onTransitionRun");
+      registerSimpleEvent(TRANSITION_START, "onTransitionStart");
+      registerSimpleEvent(TRANSITION_CANCEL, "onTransitionCancel");
+      registerSimpleEvent(TRANSITION_END, "onTransitionEnd");
+    })();
+    registerDirectEvent("onMouseEnter", ["mouseout", "mouseover"]);
+    registerDirectEvent("onMouseLeave", ["mouseout", "mouseover"]);
+    registerDirectEvent("onPointerEnter", ["pointerout", "pointerover"]);
+    registerDirectEvent("onPointerLeave", ["pointerout", "pointerover"]);
+    registerTwoPhaseEvent(
+      "onChange",
+      "change click focusin focusout input keydown keyup selectionchange".split(
+        " "
+      )
+    );
+    registerTwoPhaseEvent(
+      "onSelect",
+      "focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(
+        " "
+      )
+    );
+    registerTwoPhaseEvent("onBeforeInput", [
+      "compositionend",
+      "keypress",
+      "textInput",
+      "paste"
+    ]);
+    registerTwoPhaseEvent(
+      "onCompositionEnd",
+      "compositionend focusout keydown keypress keyup mousedown".split(" ")
+    );
+    registerTwoPhaseEvent(
+      "onCompositionStart",
+      "compositionstart focusout keydown keypress keyup mousedown".split(" ")
+    );
+    registerTwoPhaseEvent(
+      "onCompositionUpdate",
+      "compositionupdate focusout keydown keypress keyup mousedown".split(" ")
+    );
+    var mediaEventTypes =
+        "abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(
+          " "
+        ),
+      nonDelegatedEvents = new Set(
+        "beforetoggle cancel close invalid load scroll scrollend toggle"
+          .split(" ")
+          .concat(mediaEventTypes)
+      ),
+      listeningMarker = "_reactListening" + Math.random().toString(36).slice(2),
+      didWarnControlledToUncontrolled = !1,
+      didWarnUncontrolledToControlled = !1,
+      didWarnFormActionType = !1,
+      didWarnFormActionName = !1,
+      didWarnFormActionTarget = !1,
+      didWarnFormActionMethod = !1,
+      didWarnPopoverTargetObject = !1;
+    var didWarnForNewBooleanPropsWithEmptyValue = {};
+    var NORMALIZE_NEWLINES_REGEX = /\r\n?/g,
+      NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g,
+      xlinkNamespace = "http://www.w3.org/1999/xlink",
+      xmlNamespace = "http://www.w3.org/XML/1998/namespace",
+      EXPECTED_FORM_ACTION_URL =
+        "javascript:throw new Error('React form unexpectedly submitted.')",
+      SUPPRESS_HYDRATION_WARNING = "suppressHydrationWarning",
+      SUSPENSE_START_DATA = "$",
+      SUSPENSE_END_DATA = "/$",
+      SUSPENSE_PENDING_START_DATA = "$?",
+      SUSPENSE_FALLBACK_START_DATA = "$!",
+      PREAMBLE_CONTRIBUTION_HTML = 1,
+      PREAMBLE_CONTRIBUTION_BODY = 2,
+      PREAMBLE_CONTRIBUTION_HEAD = 4,
+      FORM_STATE_IS_MATCHING = "F!",
+      FORM_STATE_IS_NOT_MATCHING = "F",
+      DOCUMENT_READY_STATE_COMPLETE = "complete",
+      STYLE = "style",
+      HostContextNamespaceNone = 0,
+      HostContextNamespaceSvg = 1,
+      HostContextNamespaceMath = 2,
+      eventsEnabled = null,
+      selectionInformation = null,
+      warnedUnknownTags = { dialog: !0, webview: !0 },
+      currentPopstateTransitionEvent = null,
+      scheduleTimeout = "function" === typeof setTimeout ? setTimeout : void 0,
+      cancelTimeout =
+        "function" === typeof clearTimeout ? clearTimeout : void 0,
+      noTimeout = -1,
+      localPromise = "function" === typeof Promise ? Promise : void 0,
+      scheduleMicrotask =
+        "function" === typeof queueMicrotask
+          ? queueMicrotask
+          : "undefined" !== typeof localPromise
+            ? function (callback) {
+                return localPromise
+                  .resolve(null)
+                  .then(callback)
+                  .catch(handleErrorInNextTick);
+              }
+            : scheduleTimeout,
+      previousHydratableOnEnteringScopedSingleton = null,
+      NotLoaded = 0,
+      Loaded = 1,
+      Errored = 2,
+      Settled = 3,
+      Inserted = 4,
+      preloadPropsMap = new Map(),
+      preconnectsSet = new Set(),
+      previousDispatcher = ReactDOMSharedInternals.d;
+    ReactDOMSharedInternals.d = {
+      f: function () {
+        var previousWasRendering = previousDispatcher.f(),
+          wasRendering = flushSyncWork$1();
+        return previousWasRendering || wasRendering;
+      },
+      r: function (form) {
+        var formInst = getInstanceFromNode(form);
+        null !== formInst && 5 === formInst.tag && "form" === formInst.type
+          ? requestFormReset$2(formInst)
+          : previousDispatcher.r(form);
+      },
+      D: function (href) {
+        previousDispatcher.D(href);
+        preconnectAs("dns-prefetch", href, null);
+      },
+      C: function (href, crossOrigin) {
+        previousDispatcher.C(href, crossOrigin);
+        preconnectAs("preconnect", href, crossOrigin);
+      },
+      L: function (href, as, options) {
+        previousDispatcher.L(href, as, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && href && as) {
+          var preloadSelector =
+            'link[rel="preload"][as="' +
+            escapeSelectorAttributeValueInsideDoubleQuotes(as) +
+            '"]';
+          "image" === as
+            ? options && options.imageSrcSet
+              ? ((preloadSelector +=
+                  '[imagesrcset="' +
+                  escapeSelectorAttributeValueInsideDoubleQuotes(
+                    options.imageSrcSet
+                  ) +
+                  '"]'),
+                "string" === typeof options.imageSizes &&
+                  (preloadSelector +=
+                    '[imagesizes="' +
+                    escapeSelectorAttributeValueInsideDoubleQuotes(
+                      options.imageSizes
+                    ) +
+                    '"]'))
+              : (preloadSelector +=
+                  '[href="' +
+                  escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+                  '"]')
+            : (preloadSelector +=
+                '[href="' +
+                escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+                '"]');
+          var key = preloadSelector;
+          switch (as) {
+            case "style":
+              key = getStyleKey(href);
+              break;
+            case "script":
+              key = getScriptKey(href);
+          }
+          preloadPropsMap.has(key) ||
+            ((href = assign(
+              {
+                rel: "preload",
+                href:
+                  "image" === as && options && options.imageSrcSet
+                    ? void 0
+                    : href,
+                as: as
+              },
+              options
+            )),
+            preloadPropsMap.set(key, href),
+            null !== ownerDocument.querySelector(preloadSelector) ||
+              ("style" === as &&
+                ownerDocument.querySelector(
+                  getStylesheetSelectorFromKey(key)
+                )) ||
+              ("script" === as &&
+                ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||
+              ((as = ownerDocument.createElement("link")),
+              setInitialProperties(as, "link", href),
+              markNodeAsHoistable(as),
+              ownerDocument.head.appendChild(as)));
+        }
+      },
+      m: function (href, options) {
+        previousDispatcher.m(href, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && href) {
+          var as =
+              options && "string" === typeof options.as ? options.as : "script",
+            preloadSelector =
+              'link[rel="modulepreload"][as="' +
+              escapeSelectorAttributeValueInsideDoubleQuotes(as) +
+              '"][href="' +
+              escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+              '"]',
+            key = preloadSelector;
+          switch (as) {
+            case "audioworklet":
+            case "paintworklet":
+            case "serviceworker":
+            case "sharedworker":
+            case "worker":
+            case "script":
+              key = getScriptKey(href);
+          }
+          if (
+            !preloadPropsMap.has(key) &&
+            ((href = assign({ rel: "modulepreload", href: href }, options)),
+            preloadPropsMap.set(key, href),
+            null === ownerDocument.querySelector(preloadSelector))
+          ) {
+            switch (as) {
+              case "audioworklet":
+              case "paintworklet":
+              case "serviceworker":
+              case "sharedworker":
+              case "worker":
+              case "script":
+                if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))
+                  return;
+            }
+            as = ownerDocument.createElement("link");
+            setInitialProperties(as, "link", href);
+            markNodeAsHoistable(as);
+            ownerDocument.head.appendChild(as);
+          }
+        }
+      },
+      X: function (src, options) {
+        previousDispatcher.X(src, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && src) {
+          var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,
+            key = getScriptKey(src),
+            resource = scripts.get(key);
+          resource ||
+            ((resource = ownerDocument.querySelector(
+              getScriptSelectorFromKey(key)
+            )),
+            resource ||
+              ((src = assign({ src: src, async: !0 }, options)),
+              (options = preloadPropsMap.get(key)) &&
+                adoptPreloadPropsForScript(src, options),
+              (resource = ownerDocument.createElement("script")),
+              markNodeAsHoistable(resource),
+              setInitialProperties(resource, "link", src),
+              ownerDocument.head.appendChild(resource)),
+            (resource = {
+              type: "script",
+              instance: resource,
+              count: 1,
+              state: null
+            }),
+            scripts.set(key, resource));
+        }
+      },
+      S: function (href, precedence, options) {
+        previousDispatcher.S(href, precedence, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && href) {
+          var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,
+            key = getStyleKey(href);
+          precedence = precedence || "default";
+          var resource = styles.get(key);
+          if (!resource) {
+            var state = { loading: NotLoaded, preload: null };
+            if (
+              (resource = ownerDocument.querySelector(
+                getStylesheetSelectorFromKey(key)
+              ))
+            )
+              state.loading = Loaded | Inserted;
+            else {
+              href = assign(
+                {
+                  rel: "stylesheet",
+                  href: href,
+                  "data-precedence": precedence
+                },
+                options
+              );
+              (options = preloadPropsMap.get(key)) &&
+                adoptPreloadPropsForStylesheet(href, options);
+              var link = (resource = ownerDocument.createElement("link"));
+              markNodeAsHoistable(link);
+              setInitialProperties(link, "link", href);
+              link._p = new Promise(function (resolve, reject) {
+                link.onload = resolve;
+                link.onerror = reject;
+              });
+              link.addEventListener("load", function () {
+                state.loading |= Loaded;
+              });
+              link.addEventListener("error", function () {
+                state.loading |= Errored;
+              });
+              state.loading |= Inserted;
+              insertStylesheet(resource, precedence, ownerDocument);
+            }
+            resource = {
+              type: "stylesheet",
+              instance: resource,
+              count: 1,
+              state: state
+            };
+            styles.set(key, resource);
+          }
+        }
+      },
+      M: function (src, options) {
+        previousDispatcher.M(src, options);
+        var ownerDocument = globalDocument;
+        if (ownerDocument && src) {
+          var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,
+            key = getScriptKey(src),
+            resource = scripts.get(key);
+          resource ||
+            ((resource = ownerDocument.querySelector(
+              getScriptSelectorFromKey(key)
+            )),
+            resource ||
+              ((src = assign({ src: src, async: !0, type: "module" }, options)),
+              (options = preloadPropsMap.get(key)) &&
+                adoptPreloadPropsForScript(src, options),
+              (resource = ownerDocument.createElement("script")),
+              markNodeAsHoistable(resource),
+              setInitialProperties(resource, "link", src),
+              ownerDocument.head.appendChild(resource)),
+            (resource = {
+              type: "script",
+              instance: resource,
+              count: 1,
+              state: null
+            }),
+            scripts.set(key, resource));
+        }
+      }
+    };
+    var globalDocument = "undefined" === typeof document ? null : document,
+      tagCaches = null,
+      suspendedState = null,
+      LAST_PRECEDENCE = null,
+      precedencesByRoot = null,
+      NotPendingTransition = NotPending,
+      HostTransitionContext = {
+        $$typeof: REACT_CONTEXT_TYPE,
+        Provider: null,
+        Consumer: null,
+        _currentValue: NotPendingTransition,
+        _currentValue2: NotPendingTransition,
+        _threadCount: 0
+      },
+      badgeFormat = "%c%s%c ",
+      badgeStyle =
+        "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+      resetStyle = "",
+      pad = " ",
+      bind = Function.prototype.bind;
+    var didWarnAboutNestedUpdates = !1;
+    var overrideHookState = null,
+      overrideHookStateDeletePath = null,
+      overrideHookStateRenamePath = null,
+      overrideProps = null,
+      overridePropsDeletePath = null,
+      overridePropsRenamePath = null,
+      scheduleUpdate = null,
+      setErrorHandler = null,
+      setSuspenseHandler = null;
+    overrideHookState = function (fiber, id, path, value) {
+      id = findHook(fiber, id);
+      null !== id &&
+        ((path = copyWithSetImpl(id.memoizedState, path, 0, value)),
+        (id.memoizedState = path),
+        (id.baseState = path),
+        (fiber.memoizedProps = assign({}, fiber.memoizedProps)),
+        (path = enqueueConcurrentRenderForLane(fiber, 2)),
+        null !== path && scheduleUpdateOnFiber(path, fiber, 2));
+    };
+    overrideHookStateDeletePath = function (fiber, id, path) {
+      id = findHook(fiber, id);
+      null !== id &&
+        ((path = copyWithDeleteImpl(id.memoizedState, path, 0)),
+        (id.memoizedState = path),
+        (id.baseState = path),
+        (fiber.memoizedProps = assign({}, fiber.memoizedProps)),
+        (path = enqueueConcurrentRenderForLane(fiber, 2)),
+        null !== path && scheduleUpdateOnFiber(path, fiber, 2));
+    };
+    overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {
+      id = findHook(fiber, id);
+      null !== id &&
+        ((oldPath = copyWithRename(id.memoizedState, oldPath, newPath)),
+        (id.memoizedState = oldPath),
+        (id.baseState = oldPath),
+        (fiber.memoizedProps = assign({}, fiber.memoizedProps)),
+        (oldPath = enqueueConcurrentRenderForLane(fiber, 2)),
+        null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2));
+    };
+    overrideProps = function (fiber, path, value) {
+      fiber.pendingProps = copyWithSetImpl(fiber.memoizedProps, path, 0, value);
+      fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);
+      path = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== path && scheduleUpdateOnFiber(path, fiber, 2);
+    };
+    overridePropsDeletePath = function (fiber, path) {
+      fiber.pendingProps = copyWithDeleteImpl(fiber.memoizedProps, path, 0);
+      fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);
+      path = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== path && scheduleUpdateOnFiber(path, fiber, 2);
+    };
+    overridePropsRenamePath = function (fiber, oldPath, newPath) {
+      fiber.pendingProps = copyWithRename(
+        fiber.memoizedProps,
+        oldPath,
+        newPath
+      );
+      fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);
+      oldPath = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2);
+    };
+    scheduleUpdate = function (fiber) {
+      var root = enqueueConcurrentRenderForLane(fiber, 2);
+      null !== root && scheduleUpdateOnFiber(root, fiber, 2);
+    };
+    setErrorHandler = function (newShouldErrorImpl) {
+      shouldErrorImpl = newShouldErrorImpl;
+    };
+    setSuspenseHandler = function (newShouldSuspendImpl) {
+      shouldSuspendImpl = newShouldSuspendImpl;
+    };
+    var _enabled = !0,
+      return_targetInst = null,
+      hasScheduledReplayAttempt = !1,
+      queuedFocus = null,
+      queuedDrag = null,
+      queuedMouse = null,
+      queuedPointers = new Map(),
+      queuedPointerCaptures = new Map(),
+      queuedExplicitHydrationTargets = [],
+      discreteReplayableEvents =
+        "mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(
+          " "
+        ),
+      lastScheduledReplayQueue = null;
+    ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =
+      function (children) {
+        var root = this._internalRoot;
+        if (null === root) throw Error("Cannot update an unmounted root.");
+        var args = arguments;
+        "function" === typeof args[1]
+          ? console.error(
+              "does not support the second callback argument. To execute a side effect after rendering, declare it in a component body with useEffect()."
+            )
+          : isValidContainer(args[1])
+            ? console.error(
+                "You passed a container to the second argument of root.render(...). You don't need to pass it again since you already passed it to create the root."
+              )
+            : "undefined" !== typeof args[1] &&
+              console.error(
+                "You passed a second argument to root.render(...) but it only accepts one argument."
+              );
+        args = children;
+        var current = root.current,
+          lane = requestUpdateLane(current);
+        updateContainerImpl(current, lane, args, root, null, null);
+      };
+    ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =
+      function () {
+        var args = arguments;
+        "function" === typeof args[0] &&
+          console.error(
+            "does not support a callback argument. To execute a side effect after rendering, declare it in a component body with useEffect()."
+          );
+        args = this._internalRoot;
+        if (null !== args) {
+          this._internalRoot = null;
+          var container = args.containerInfo;
+          (executionContext & (RenderContext | CommitContext)) !== NoContext &&
+            console.error(
+              "Attempted to synchronously unmount a root while React was already rendering. React cannot finish unmounting the root until the current render has completed, which may lead to a race condition."
+            );
+          updateContainerImpl(args.current, 2, null, args, null, null);
+          flushSyncWork$1();
+          container[internalContainerInstanceKey] = null;
+        }
+      };
+    ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (
+      target
+    ) {
+      if (target) {
+        var updatePriority = resolveUpdatePriority();
+        target = { blockedOn: null, target: target, priority: updatePriority };
+        for (
+          var i = 0;
+          i < queuedExplicitHydrationTargets.length &&
+          0 !== updatePriority &&
+          updatePriority < queuedExplicitHydrationTargets[i].priority;
+          i++
+        );
+        queuedExplicitHydrationTargets.splice(i, 0, target);
+        0 === i && attemptExplicitHydrationTarget(target);
+      }
+    };
+    (function () {
+      var isomorphicReactPackageVersion = React.version;
+      if ("19.1.1" !== isomorphicReactPackageVersion)
+        throw Error(
+          'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n  - react:      ' +
+            (isomorphicReactPackageVersion +
+              "\n  - react-dom:  19.1.1\nLearn more: https://react.dev/warnings/version-mismatch")
+        );
+    })();
+    ("function" === typeof Map &&
+      null != Map.prototype &&
+      "function" === typeof Map.prototype.forEach &&
+      "function" === typeof Set &&
+      null != Set.prototype &&
+      "function" === typeof Set.prototype.clear &&
+      "function" === typeof Set.prototype.forEach) ||
+      console.error(
+        "React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://react.dev/link/react-polyfills"
+      );
+    ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
+      var fiber = componentOrElement._reactInternals;
+      if (void 0 === fiber) {
+        if ("function" === typeof componentOrElement.render)
+          throw Error("Unable to find node on an unmounted component.");
+        componentOrElement = Object.keys(componentOrElement).join(",");
+        throw Error(
+          "Argument appears to not be a ReactComponent. Keys: " +
+            componentOrElement
+        );
+      }
+      componentOrElement = findCurrentFiberUsingSlowPath(fiber);
+      componentOrElement =
+        null !== componentOrElement
+          ? findCurrentHostFiberImpl(componentOrElement)
+          : null;
+      componentOrElement =
+        null === componentOrElement ? null : componentOrElement.stateNode;
+      return componentOrElement;
+    };
+    if (
+      !(function () {
+        var internals = {
+          bundleType: 1,
+          version: "19.1.1",
+          rendererPackageName: "react-dom",
+          currentDispatcherRef: ReactSharedInternals,
+          reconcilerVersion: "19.1.1"
+        };
+        internals.overrideHookState = overrideHookState;
+        internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
+        internals.overrideHookStateRenamePath = overrideHookStateRenamePath;
+        internals.overrideProps = overrideProps;
+        internals.overridePropsDeletePath = overridePropsDeletePath;
+        internals.overridePropsRenamePath = overridePropsRenamePath;
+        internals.scheduleUpdate = scheduleUpdate;
+        internals.setErrorHandler = setErrorHandler;
+        internals.setSuspenseHandler = setSuspenseHandler;
+        internals.scheduleRefresh = scheduleRefresh;
+        internals.scheduleRoot = scheduleRoot;
+        internals.setRefreshHandler = setRefreshHandler;
+        internals.getCurrentFiber = getCurrentFiberForDevTools;
+        internals.getLaneLabelMap = getLaneLabelMap;
+        internals.injectProfilingHooks = injectProfilingHooks;
+        return injectInternals(internals);
+      })() &&
+      canUseDOM &&
+      window.top === window.self &&
+      ((-1 < navigator.userAgent.indexOf("Chrome") &&
+        -1 === navigator.userAgent.indexOf("Edge")) ||
+        -1 < navigator.userAgent.indexOf("Firefox"))
+    ) {
+      var protocol = window.location.protocol;
+      /^(https?|file):$/.test(protocol) &&
+        console.info(
+          "%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools" +
+            ("file:" === protocol
+              ? "\nYou might need to use a local HTTP server (instead of file://): https://react.dev/link/react-devtools-faq"
+              : ""),
+          "font-weight:bold"
+        );
+    }
+    var Internals = {
+      d: {
+        f: noop,
+        r: function () {
+          throw Error(
+            "Invalid form element. requestFormReset must be passed a form that was rendered by React."
+          );
+        },
+        D: noop,
+        C: noop,
+        L: noop,
+        m: noop,
+        X: noop,
+        S: noop,
+        M: noop
+      },
+      p: 0,
+      findDOMNode: null
+    };
+    ("function" === typeof Map &&
+      null != Map.prototype &&
+      "function" === typeof Map.prototype.forEach &&
+      "function" === typeof Set &&
+      null != Set.prototype &&
+      "function" === typeof Set.prototype.clear &&
+      "function" === typeof Set.prototype.forEach) ||
+      console.error(
+        "React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"
+      );
+    exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
+      Internals;
+    exports.createPortal = function (children, container) {
+      var key =
+        2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;
+      if (!isValidContainer(container))
+        throw Error("Target container is not a DOM element.");
+      return createPortal$1(children, container, null, key);
+    };
+    exports.createRoot = function (container, options) {
+      if (!isValidContainer(container))
+        throw Error("Target container is not a DOM element.");
+      warnIfReactDOMContainerInDEV(container);
+      var isStrictMode = !1,
+        identifierPrefix = "",
+        onUncaughtError = defaultOnUncaughtError,
+        onCaughtError = defaultOnCaughtError,
+        onRecoverableError = defaultOnRecoverableError,
+        transitionCallbacks = null;
+      null !== options &&
+        void 0 !== options &&
+        (options.hydrate
+          ? console.warn(
+              "hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead."
+            )
+          : "object" === typeof options &&
+            null !== options &&
+            options.$$typeof === REACT_ELEMENT_TYPE &&
+            console.error(
+              "You passed a JSX element to createRoot. You probably meant to call root.render instead. Example usage:\n\n  let root = createRoot(domContainer);\n  root.render(<App />);"
+            ),
+        !0 === options.unstable_strictMode && (isStrictMode = !0),
+        void 0 !== options.identifierPrefix &&
+          (identifierPrefix = options.identifierPrefix),
+        void 0 !== options.onUncaughtError &&
+          (onUncaughtError = options.onUncaughtError),
+        void 0 !== options.onCaughtError &&
+          (onCaughtError = options.onCaughtError),
+        void 0 !== options.onRecoverableError &&
+          (onRecoverableError = options.onRecoverableError),
+        void 0 !== options.unstable_transitionCallbacks &&
+          (transitionCallbacks = options.unstable_transitionCallbacks));
+      options = createFiberRoot(
+        container,
+        1,
+        !1,
+        null,
+        null,
+        isStrictMode,
+        identifierPrefix,
+        onUncaughtError,
+        onCaughtError,
+        onRecoverableError,
+        transitionCallbacks,
+        null
+      );
+      container[internalContainerInstanceKey] = options.current;
+      listenToAllSupportedEvents(container);
+      return new ReactDOMRoot(options);
+    };
+    exports.flushSync = function (fn) {
+      var previousTransition = ReactSharedInternals.T,
+        previousUpdatePriority = ReactDOMSharedInternals.p;
+      try {
+        if (
+          ((ReactSharedInternals.T = null),
+          (ReactDOMSharedInternals.p = DiscreteEventPriority),
+          fn)
+        )
+          return fn();
+      } finally {
+        (ReactSharedInternals.T = previousTransition),
+          (ReactDOMSharedInternals.p = previousUpdatePriority),
+          ReactDOMSharedInternals.d.f() &&
+            console.error(
+              "flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task."
+            );
+      }
+    };
+    exports.hydrateRoot = function (container, initialChildren, options) {
+      if (!isValidContainer(container))
+        throw Error("Target container is not a DOM element.");
+      warnIfReactDOMContainerInDEV(container);
+      void 0 === initialChildren &&
+        console.error(
+          "Must provide initial children as second argument to hydrateRoot. Example usage: hydrateRoot(domContainer, <App />)"
+        );
+      var isStrictMode = !1,
+        identifierPrefix = "",
+        onUncaughtError = defaultOnUncaughtError,
+        onCaughtError = defaultOnCaughtError,
+        onRecoverableError = defaultOnRecoverableError,
+        transitionCallbacks = null,
+        formState = null;
+      null !== options &&
+        void 0 !== options &&
+        (!0 === options.unstable_strictMode && (isStrictMode = !0),
+        void 0 !== options.identifierPrefix &&
+          (identifierPrefix = options.identifierPrefix),
+        void 0 !== options.onUncaughtError &&
+          (onUncaughtError = options.onUncaughtError),
+        void 0 !== options.onCaughtError &&
+          (onCaughtError = options.onCaughtError),
+        void 0 !== options.onRecoverableError &&
+          (onRecoverableError = options.onRecoverableError),
+        void 0 !== options.unstable_transitionCallbacks &&
+          (transitionCallbacks = options.unstable_transitionCallbacks),
+        void 0 !== options.formState && (formState = options.formState));
+      initialChildren = createFiberRoot(
+        container,
+        1,
+        !0,
+        initialChildren,
+        null != options ? options : null,
+        isStrictMode,
+        identifierPrefix,
+        onUncaughtError,
+        onCaughtError,
+        onRecoverableError,
+        transitionCallbacks,
+        formState
+      );
+      initialChildren.context = getContextForSubtree(null);
+      options = initialChildren.current;
+      isStrictMode = requestUpdateLane(options);
+      isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);
+      identifierPrefix = createUpdate(isStrictMode);
+      identifierPrefix.callback = null;
+      enqueueUpdate(options, identifierPrefix, isStrictMode);
+      options = isStrictMode;
+      initialChildren.current.lanes = options;
+      markRootUpdated$1(initialChildren, options);
+      ensureRootIsScheduled(initialChildren);
+      container[internalContainerInstanceKey] = initialChildren.current;
+      listenToAllSupportedEvents(container);
+      return new ReactDOMHydrationRoot(initialChildren);
+    };
+    exports.preconnect = function (href, options) {
+      "string" === typeof href && href
+        ? null != options && "object" !== typeof options
+          ? console.error(
+              "ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            )
+          : null != options &&
+            "string" !== typeof options.crossOrigin &&
+            console.error(
+              "ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.",
+              getValueDescriptorExpectingObjectForWarning(options.crossOrigin)
+            )
+        : console.error(
+            "ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
+            getValueDescriptorExpectingObjectForWarning(href)
+          );
+      "string" === typeof href &&
+        (options
+          ? ((options = options.crossOrigin),
+            (options =
+              "string" === typeof options
+                ? "use-credentials" === options
+                  ? options
+                  : ""
+                : void 0))
+          : (options = null),
+        ReactDOMSharedInternals.d.C(href, options));
+    };
+    exports.prefetchDNS = function (href) {
+      if ("string" !== typeof href || !href)
+        console.error(
+          "ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
+          getValueDescriptorExpectingObjectForWarning(href)
+        );
+      else if (1 < arguments.length) {
+        var options = arguments[1];
+        "object" === typeof options && options.hasOwnProperty("crossOrigin")
+          ? console.error(
+              "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            )
+          : console.error(
+              "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            );
+      }
+      "string" === typeof href && ReactDOMSharedInternals.d.D(href);
+    };
+    exports.preinit = function (href, options) {
+      "string" === typeof href && href
+        ? null == options || "object" !== typeof options
+          ? console.error(
+              "ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            )
+          : "style" !== options.as &&
+            "script" !== options.as &&
+            console.error(
+              'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are "style" and "script".',
+              getValueDescriptorExpectingEnumForWarning(options.as)
+            )
+        : console.error(
+            "ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
+            getValueDescriptorExpectingObjectForWarning(href)
+          );
+      if (
+        "string" === typeof href &&
+        options &&
+        "string" === typeof options.as
+      ) {
+        var as = options.as,
+          crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),
+          integrity =
+            "string" === typeof options.integrity ? options.integrity : void 0,
+          fetchPriority =
+            "string" === typeof options.fetchPriority
+              ? options.fetchPriority
+              : void 0;
+        "style" === as
+          ? ReactDOMSharedInternals.d.S(
+              href,
+              "string" === typeof options.precedence
+                ? options.precedence
+                : void 0,
+              {
+                crossOrigin: crossOrigin,
+                integrity: integrity,
+                fetchPriority: fetchPriority
+              }
+            )
+          : "script" === as &&
+            ReactDOMSharedInternals.d.X(href, {
+              crossOrigin: crossOrigin,
+              integrity: integrity,
+              fetchPriority: fetchPriority,
+              nonce: "string" === typeof options.nonce ? options.nonce : void 0
+            });
+      }
+    };
+    exports.preinitModule = function (href, options) {
+      var encountered = "";
+      ("string" === typeof href && href) ||
+        (encountered +=
+          " The `href` argument encountered was " +
+          getValueDescriptorExpectingObjectForWarning(href) +
+          ".");
+      void 0 !== options && "object" !== typeof options
+        ? (encountered +=
+            " The `options` argument encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options) +
+            ".")
+        : options &&
+          "as" in options &&
+          "script" !== options.as &&
+          (encountered +=
+            " The `as` option encountered was " +
+            getValueDescriptorExpectingEnumForWarning(options.as) +
+            ".");
+      if (encountered)
+        console.error(
+          "ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s",
+          encountered
+        );
+      else
+        switch (
+          ((encountered =
+            options && "string" === typeof options.as ? options.as : "script"),
+          encountered)
+        ) {
+          case "script":
+            break;
+          default:
+            (encountered =
+              getValueDescriptorExpectingEnumForWarning(encountered)),
+              console.error(
+                'ReactDOM.preinitModule(): Currently the only supported "as" type for this function is "script" but received "%s" instead. This warning was generated for `href` "%s". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',
+                encountered,
+                href
+              );
+        }
+      if ("string" === typeof href)
+        if ("object" === typeof options && null !== options) {
+          if (null == options.as || "script" === options.as)
+            (encountered = getCrossOriginStringAs(
+              options.as,
+              options.crossOrigin
+            )),
+              ReactDOMSharedInternals.d.M(href, {
+                crossOrigin: encountered,
+                integrity:
+                  "string" === typeof options.integrity
+                    ? options.integrity
+                    : void 0,
+                nonce:
+                  "string" === typeof options.nonce ? options.nonce : void 0
+              });
+        } else null == options && ReactDOMSharedInternals.d.M(href);
+    };
+    exports.preload = function (href, options) {
+      var encountered = "";
+      ("string" === typeof href && href) ||
+        (encountered +=
+          " The `href` argument encountered was " +
+          getValueDescriptorExpectingObjectForWarning(href) +
+          ".");
+      null == options || "object" !== typeof options
+        ? (encountered +=
+            " The `options` argument encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options) +
+            ".")
+        : ("string" === typeof options.as && options.as) ||
+          (encountered +=
+            " The `as` option encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options.as) +
+            ".");
+      encountered &&
+        console.error(
+          'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel="preload" as="..." />` tag.%s',
+          encountered
+        );
+      if (
+        "string" === typeof href &&
+        "object" === typeof options &&
+        null !== options &&
+        "string" === typeof options.as
+      ) {
+        encountered = options.as;
+        var crossOrigin = getCrossOriginStringAs(
+          encountered,
+          options.crossOrigin
+        );
+        ReactDOMSharedInternals.d.L(href, encountered, {
+          crossOrigin: crossOrigin,
+          integrity:
+            "string" === typeof options.integrity ? options.integrity : void 0,
+          nonce: "string" === typeof options.nonce ? options.nonce : void 0,
+          type: "string" === typeof options.type ? options.type : void 0,
+          fetchPriority:
+            "string" === typeof options.fetchPriority
+              ? options.fetchPriority
+              : void 0,
+          referrerPolicy:
+            "string" === typeof options.referrerPolicy
+              ? options.referrerPolicy
+              : void 0,
+          imageSrcSet:
+            "string" === typeof options.imageSrcSet
+              ? options.imageSrcSet
+              : void 0,
+          imageSizes:
+            "string" === typeof options.imageSizes
+              ? options.imageSizes
+              : void 0,
+          media: "string" === typeof options.media ? options.media : void 0
+        });
+      }
+    };
+    exports.preloadModule = function (href, options) {
+      var encountered = "";
+      ("string" === typeof href && href) ||
+        (encountered +=
+          " The `href` argument encountered was " +
+          getValueDescriptorExpectingObjectForWarning(href) +
+          ".");
+      void 0 !== options && "object" !== typeof options
+        ? (encountered +=
+            " The `options` argument encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options) +
+            ".")
+        : options &&
+          "as" in options &&
+          "string" !== typeof options.as &&
+          (encountered +=
+            " The `as` option encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options.as) +
+            ".");
+      encountered &&
+        console.error(
+          'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel="modulepreload" as="..." />` tag.%s',
+          encountered
+        );
+      "string" === typeof href &&
+        (options
+          ? ((encountered = getCrossOriginStringAs(
+              options.as,
+              options.crossOrigin
+            )),
+            ReactDOMSharedInternals.d.m(href, {
+              as:
+                "string" === typeof options.as && "script" !== options.as
+                  ? options.as
+                  : void 0,
+              crossOrigin: encountered,
+              integrity:
+                "string" === typeof options.integrity
+                  ? options.integrity
+                  : void 0
+            }))
+          : ReactDOMSharedInternals.d.m(href));
+    };
+    exports.requestFormReset = function (form) {
+      ReactDOMSharedInternals.d.r(form);
+    };
+    exports.unstable_batchedUpdates = function (fn, a) {
+      return fn(a);
+    };
+    exports.useFormState = function (action, initialState, permalink) {
+      return resolveDispatcher().useFormState(action, initialState, permalink);
+    };
+    exports.useFormStatus = function () {
+      return resolveDispatcher().useHostTransitionStatus();
+    };
+    exports.version = "19.1.1";
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+  })();
Index: node_modules/react-dom/cjs/react-dom-profiling.profiling.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-profiling.profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-profiling.profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16218 @@
+/**
+ * @license React
+ * react-dom-profiling.profiling.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+ Modernizr 3.0.0pre (Custom Build) | MIT
+*/
+"use strict";
+"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+  "function" ===
+    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+var Scheduler = require("scheduler"),
+  React = require("react"),
+  ReactDOM = require("react-dom");
+function formatProdErrorMessage(code) {
+  var url = "https://react.dev/errors/" + code;
+  if (1 < arguments.length) {
+    url += "?args[]=" + encodeURIComponent(arguments[1]);
+    for (var i = 2; i < arguments.length; i++)
+      url += "&args[]=" + encodeURIComponent(arguments[i]);
+  }
+  return (
+    "Minified React error #" +
+    code +
+    "; visit " +
+    url +
+    " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."
+  );
+}
+function isValidContainer(node) {
+  return !(
+    !node ||
+    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)
+  );
+}
+function getNearestMountedFiber(fiber) {
+  var node = fiber,
+    nearestMounted = fiber;
+  if (fiber.alternate) for (; node.return; ) node = node.return;
+  else {
+    fiber = node;
+    do
+      (node = fiber),
+        0 !== (node.flags & 4098) && (nearestMounted = node.return),
+        (fiber = node.return);
+    while (fiber);
+  }
+  return 3 === node.tag ? nearestMounted : null;
+}
+function getSuspenseInstanceFromFiber(fiber) {
+  if (13 === fiber.tag) {
+    var suspenseState = fiber.memoizedState;
+    null === suspenseState &&
+      ((fiber = fiber.alternate),
+      null !== fiber && (suspenseState = fiber.memoizedState));
+    if (null !== suspenseState) return suspenseState.dehydrated;
+  }
+  return null;
+}
+function assertIsMounted(fiber) {
+  if (getNearestMountedFiber(fiber) !== fiber)
+    throw Error(formatProdErrorMessage(188));
+}
+function findCurrentFiberUsingSlowPath(fiber) {
+  var alternate = fiber.alternate;
+  if (!alternate) {
+    alternate = getNearestMountedFiber(fiber);
+    if (null === alternate) throw Error(formatProdErrorMessage(188));
+    return alternate !== fiber ? null : fiber;
+  }
+  for (var a = fiber, b = alternate; ; ) {
+    var parentA = a.return;
+    if (null === parentA) break;
+    var parentB = parentA.alternate;
+    if (null === parentB) {
+      b = parentA.return;
+      if (null !== b) {
+        a = b;
+        continue;
+      }
+      break;
+    }
+    if (parentA.child === parentB.child) {
+      for (parentB = parentA.child; parentB; ) {
+        if (parentB === a) return assertIsMounted(parentA), fiber;
+        if (parentB === b) return assertIsMounted(parentA), alternate;
+        parentB = parentB.sibling;
+      }
+      throw Error(formatProdErrorMessage(188));
+    }
+    if (a.return !== b.return) (a = parentA), (b = parentB);
+    else {
+      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {
+        if (child$0 === a) {
+          didFindChild = !0;
+          a = parentA;
+          b = parentB;
+          break;
+        }
+        if (child$0 === b) {
+          didFindChild = !0;
+          b = parentA;
+          a = parentB;
+          break;
+        }
+        child$0 = child$0.sibling;
+      }
+      if (!didFindChild) {
+        for (child$0 = parentB.child; child$0; ) {
+          if (child$0 === a) {
+            didFindChild = !0;
+            a = parentB;
+            b = parentA;
+            break;
+          }
+          if (child$0 === b) {
+            didFindChild = !0;
+            b = parentB;
+            a = parentA;
+            break;
+          }
+          child$0 = child$0.sibling;
+        }
+        if (!didFindChild) throw Error(formatProdErrorMessage(189));
+      }
+    }
+    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));
+  }
+  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));
+  return a.stateNode.current === a ? fiber : alternate;
+}
+function findCurrentHostFiberImpl(node) {
+  var tag = node.tag;
+  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;
+  for (node = node.child; null !== node; ) {
+    tag = findCurrentHostFiberImpl(node);
+    if (null !== tag) return tag;
+    node = node.sibling;
+  }
+  return null;
+}
+var assign = Object.assign,
+  REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy");
+Symbol.for("react.scope");
+var REACT_ACTIVITY_TYPE = Symbol.for("react.activity");
+Symbol.for("react.legacy_hidden");
+Symbol.for("react.tracing_marker");
+var REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel");
+Symbol.for("react.view_transition");
+var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
+function getIteratorFn(maybeIterable) {
+  if (null === maybeIterable || "object" !== typeof maybeIterable) return null;
+  maybeIterable =
+    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
+    maybeIterable["@@iterator"];
+  return "function" === typeof maybeIterable ? maybeIterable : null;
+}
+var REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function getComponentNameFromType(type) {
+  if (null == type) return null;
+  if ("function" === typeof type)
+    return type.$$typeof === REACT_CLIENT_REFERENCE
+      ? null
+      : type.displayName || type.name || null;
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_FRAGMENT_TYPE:
+      return "Fragment";
+    case REACT_PROFILER_TYPE:
+      return "Profiler";
+    case REACT_STRICT_MODE_TYPE:
+      return "StrictMode";
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+    case REACT_ACTIVITY_TYPE:
+      return "Activity";
+  }
+  if ("object" === typeof type)
+    switch (type.$$typeof) {
+      case REACT_PORTAL_TYPE:
+        return "Portal";
+      case REACT_CONTEXT_TYPE:
+        return (type.displayName || "Context") + ".Provider";
+      case REACT_CONSUMER_TYPE:
+        return (type._context.displayName || "Context") + ".Consumer";
+      case REACT_FORWARD_REF_TYPE:
+        var innerType = type.render;
+        type = type.displayName;
+        type ||
+          ((type = innerType.displayName || innerType.name || ""),
+          (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+        return type;
+      case REACT_MEMO_TYPE:
+        return (
+          (innerType = type.displayName || null),
+          null !== innerType
+            ? innerType
+            : getComponentNameFromType(type.type) || "Memo"
+        );
+      case REACT_LAZY_TYPE:
+        innerType = type._payload;
+        type = type._init;
+        try {
+          return getComponentNameFromType(type(innerType));
+        } catch (x) {}
+    }
+  return null;
+}
+var isArrayImpl = Array.isArray,
+  ReactSharedInternals =
+    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  ReactDOMSharedInternals =
+    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  sharedNotPendingObject = {
+    pending: !1,
+    data: null,
+    method: null,
+    action: null
+  },
+  valueStack = [],
+  index = -1;
+function createCursor(defaultValue) {
+  return { current: defaultValue };
+}
+function pop(cursor) {
+  0 > index ||
+    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);
+}
+function push(cursor, value) {
+  index++;
+  valueStack[index] = cursor.current;
+  cursor.current = value;
+}
+var contextStackCursor = createCursor(null),
+  contextFiberStackCursor = createCursor(null),
+  rootInstanceStackCursor = createCursor(null),
+  hostTransitionProviderCursor = createCursor(null);
+function pushHostContainer(fiber, nextRootInstance) {
+  push(rootInstanceStackCursor, nextRootInstance);
+  push(contextFiberStackCursor, fiber);
+  push(contextStackCursor, null);
+  switch (nextRootInstance.nodeType) {
+    case 9:
+    case 11:
+      fiber = (fiber = nextRootInstance.documentElement)
+        ? (fiber = fiber.namespaceURI)
+          ? getOwnHostContext(fiber)
+          : 0
+        : 0;
+      break;
+    default:
+      if (
+        ((fiber = nextRootInstance.tagName),
+        (nextRootInstance = nextRootInstance.namespaceURI))
+      )
+        (nextRootInstance = getOwnHostContext(nextRootInstance)),
+          (fiber = getChildHostContextProd(nextRootInstance, fiber));
+      else
+        switch (fiber) {
+          case "svg":
+            fiber = 1;
+            break;
+          case "math":
+            fiber = 2;
+            break;
+          default:
+            fiber = 0;
+        }
+  }
+  pop(contextStackCursor);
+  push(contextStackCursor, fiber);
+}
+function popHostContainer() {
+  pop(contextStackCursor);
+  pop(contextFiberStackCursor);
+  pop(rootInstanceStackCursor);
+}
+function pushHostContext(fiber) {
+  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);
+  var context = contextStackCursor.current;
+  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);
+  context !== JSCompiler_inline_result &&
+    (push(contextFiberStackCursor, fiber),
+    push(contextStackCursor, JSCompiler_inline_result));
+}
+function popHostContext(fiber) {
+  contextFiberStackCursor.current === fiber &&
+    (pop(contextStackCursor), pop(contextFiberStackCursor));
+  hostTransitionProviderCursor.current === fiber &&
+    (pop(hostTransitionProviderCursor),
+    (HostTransitionContext._currentValue = sharedNotPendingObject));
+}
+var hasOwnProperty = Object.prototype.hasOwnProperty,
+  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,
+  cancelCallback$1 = Scheduler.unstable_cancelCallback,
+  shouldYield = Scheduler.unstable_shouldYield,
+  requestPaint = Scheduler.unstable_requestPaint,
+  now$1 = Scheduler.unstable_now,
+  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,
+  ImmediatePriority = Scheduler.unstable_ImmediatePriority,
+  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,
+  NormalPriority$1 = Scheduler.unstable_NormalPriority,
+  LowPriority = Scheduler.unstable_LowPriority,
+  IdlePriority = Scheduler.unstable_IdlePriority,
+  log$1 = Scheduler.log,
+  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,
+  rendererID = null,
+  injectedHook = null,
+  injectedProfilingHooks = null,
+  isDevToolsPresent = "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__;
+function setIsStrictModeForDevtools(newIsStrictMode) {
+  "function" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);
+  if (injectedHook && "function" === typeof injectedHook.setStrictMode)
+    try {
+      injectedHook.setStrictMode(rendererID, newIsStrictMode);
+    } catch (err) {}
+}
+function markCommitStopped() {
+  null !== injectedProfilingHooks &&
+    "function" === typeof injectedProfilingHooks.markCommitStopped &&
+    injectedProfilingHooks.markCommitStopped();
+}
+function markComponentRenderStarted(fiber) {
+  null !== injectedProfilingHooks &&
+    "function" === typeof injectedProfilingHooks.markComponentRenderStarted &&
+    injectedProfilingHooks.markComponentRenderStarted(fiber);
+}
+function markComponentRenderStopped() {
+  null !== injectedProfilingHooks &&
+    "function" === typeof injectedProfilingHooks.markComponentRenderStopped &&
+    injectedProfilingHooks.markComponentRenderStopped();
+}
+function markRenderStarted(lanes) {
+  null !== injectedProfilingHooks &&
+    "function" === typeof injectedProfilingHooks.markRenderStarted &&
+    injectedProfilingHooks.markRenderStarted(lanes);
+}
+function markRenderStopped() {
+  null !== injectedProfilingHooks &&
+    "function" === typeof injectedProfilingHooks.markRenderStopped &&
+    injectedProfilingHooks.markRenderStopped();
+}
+function markStateUpdateScheduled(fiber, lane) {
+  null !== injectedProfilingHooks &&
+    "function" === typeof injectedProfilingHooks.markStateUpdateScheduled &&
+    injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);
+}
+var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+  log = Math.log,
+  LN2 = Math.LN2;
+function clz32Fallback(x) {
+  x >>>= 0;
+  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+}
+function getLabelForLane(lane) {
+  if (lane & 1) return "SyncHydrationLane";
+  if (lane & 2) return "Sync";
+  if (lane & 4) return "InputContinuousHydration";
+  if (lane & 8) return "InputContinuous";
+  if (lane & 16) return "DefaultHydration";
+  if (lane & 32) return "Default";
+  if (lane & 128) return "TransitionHydration";
+  if (lane & 4194048) return "Transition";
+  if (lane & 62914560) return "Retry";
+  if (lane & 67108864) return "SelectiveHydration";
+  if (lane & 134217728) return "IdleHydration";
+  if (lane & 268435456) return "Idle";
+  if (lane & 536870912) return "Offscreen";
+  if (lane & 1073741824) return "Deferred";
+}
+var nextTransitionLane = 256,
+  nextRetryLane = 4194304;
+function getHighestPriorityLanes(lanes) {
+  var pendingSyncLanes = lanes & 42;
+  if (0 !== pendingSyncLanes) return pendingSyncLanes;
+  switch (lanes & -lanes) {
+    case 1:
+      return 1;
+    case 2:
+      return 2;
+    case 4:
+      return 4;
+    case 8:
+      return 8;
+    case 16:
+      return 16;
+    case 32:
+      return 32;
+    case 64:
+      return 64;
+    case 128:
+      return 128;
+    case 256:
+    case 512:
+    case 1024:
+    case 2048:
+    case 4096:
+    case 8192:
+    case 16384:
+    case 32768:
+    case 65536:
+    case 131072:
+    case 262144:
+    case 524288:
+    case 1048576:
+    case 2097152:
+      return lanes & 4194048;
+    case 4194304:
+    case 8388608:
+    case 16777216:
+    case 33554432:
+      return lanes & 62914560;
+    case 67108864:
+      return 67108864;
+    case 134217728:
+      return 134217728;
+    case 268435456:
+      return 268435456;
+    case 536870912:
+      return 536870912;
+    case 1073741824:
+      return 0;
+    default:
+      return lanes;
+  }
+}
+function getNextLanes(root, wipLanes, rootHasPendingCommit) {
+  var pendingLanes = root.pendingLanes;
+  if (0 === pendingLanes) return 0;
+  var nextLanes = 0,
+    suspendedLanes = root.suspendedLanes,
+    pingedLanes = root.pingedLanes;
+  root = root.warmLanes;
+  var nonIdlePendingLanes = pendingLanes & 134217727;
+  0 !== nonIdlePendingLanes
+    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),
+      0 !== pendingLanes
+        ? (nextLanes = getHighestPriorityLanes(pendingLanes))
+        : ((pingedLanes &= nonIdlePendingLanes),
+          0 !== pingedLanes
+            ? (nextLanes = getHighestPriorityLanes(pingedLanes))
+            : rootHasPendingCommit ||
+              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),
+              0 !== rootHasPendingCommit &&
+                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))
+    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),
+      0 !== nonIdlePendingLanes
+        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))
+        : 0 !== pingedLanes
+          ? (nextLanes = getHighestPriorityLanes(pingedLanes))
+          : rootHasPendingCommit ||
+            ((rootHasPendingCommit = pendingLanes & ~root),
+            0 !== rootHasPendingCommit &&
+              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));
+  return 0 === nextLanes
+    ? 0
+    : 0 !== wipLanes &&
+        wipLanes !== nextLanes &&
+        0 === (wipLanes & suspendedLanes) &&
+        ((suspendedLanes = nextLanes & -nextLanes),
+        (rootHasPendingCommit = wipLanes & -wipLanes),
+        suspendedLanes >= rootHasPendingCommit ||
+          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))
+      ? wipLanes
+      : nextLanes;
+}
+function checkIfRootIsPrerendering(root, renderLanes) {
+  return (
+    0 ===
+    (root.pendingLanes &
+      ~(root.suspendedLanes & ~root.pingedLanes) &
+      renderLanes)
+  );
+}
+function computeExpirationTime(lane, currentTime) {
+  switch (lane) {
+    case 1:
+    case 2:
+    case 4:
+    case 8:
+    case 64:
+      return currentTime + 250;
+    case 16:
+    case 32:
+    case 128:
+    case 256:
+    case 512:
+    case 1024:
+    case 2048:
+    case 4096:
+    case 8192:
+    case 16384:
+    case 32768:
+    case 65536:
+    case 131072:
+    case 262144:
+    case 524288:
+    case 1048576:
+    case 2097152:
+      return currentTime + 5e3;
+    case 4194304:
+    case 8388608:
+    case 16777216:
+    case 33554432:
+      return -1;
+    case 67108864:
+    case 134217728:
+    case 268435456:
+    case 536870912:
+    case 1073741824:
+      return -1;
+    default:
+      return -1;
+  }
+}
+function claimNextTransitionLane() {
+  var lane = nextTransitionLane;
+  nextTransitionLane <<= 1;
+  0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);
+  return lane;
+}
+function claimNextRetryLane() {
+  var lane = nextRetryLane;
+  nextRetryLane <<= 1;
+  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);
+  return lane;
+}
+function createLaneMap(initial) {
+  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);
+  return laneMap;
+}
+function markRootUpdated$1(root, updateLane) {
+  root.pendingLanes |= updateLane;
+  268435456 !== updateLane &&
+    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));
+}
+function markRootFinished(
+  root,
+  finishedLanes,
+  remainingLanes,
+  spawnedLane,
+  updatedLanes,
+  suspendedRetryLanes
+) {
+  var previouslyPendingLanes = root.pendingLanes;
+  root.pendingLanes = remainingLanes;
+  root.suspendedLanes = 0;
+  root.pingedLanes = 0;
+  root.warmLanes = 0;
+  root.expiredLanes &= remainingLanes;
+  root.entangledLanes &= remainingLanes;
+  root.errorRecoveryDisabledLanes &= remainingLanes;
+  root.shellSuspendCounter = 0;
+  var entanglements = root.entanglements,
+    expirationTimes = root.expirationTimes,
+    hiddenUpdates = root.hiddenUpdates;
+  for (
+    remainingLanes = previouslyPendingLanes & ~remainingLanes;
+    0 < remainingLanes;
+
+  ) {
+    var index$5 = 31 - clz32(remainingLanes),
+      lane = 1 << index$5;
+    entanglements[index$5] = 0;
+    expirationTimes[index$5] = -1;
+    var hiddenUpdatesForLane = hiddenUpdates[index$5];
+    if (null !== hiddenUpdatesForLane)
+      for (
+        hiddenUpdates[index$5] = null, index$5 = 0;
+        index$5 < hiddenUpdatesForLane.length;
+        index$5++
+      ) {
+        var update = hiddenUpdatesForLane[index$5];
+        null !== update && (update.lane &= -536870913);
+      }
+    remainingLanes &= ~lane;
+  }
+  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);
+  0 !== suspendedRetryLanes &&
+    0 === updatedLanes &&
+    0 !== root.tag &&
+    (root.suspendedLanes |=
+      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));
+}
+function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {
+  root.pendingLanes |= spawnedLane;
+  root.suspendedLanes &= ~spawnedLane;
+  var spawnedLaneIndex = 31 - clz32(spawnedLane);
+  root.entangledLanes |= spawnedLane;
+  root.entanglements[spawnedLaneIndex] =
+    root.entanglements[spawnedLaneIndex] |
+    1073741824 |
+    (entangledLanes & 4194090);
+}
+function markRootEntangled(root, entangledLanes) {
+  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);
+  for (root = root.entanglements; rootEntangledLanes; ) {
+    var index$6 = 31 - clz32(rootEntangledLanes),
+      lane = 1 << index$6;
+    (lane & entangledLanes) | (root[index$6] & entangledLanes) &&
+      (root[index$6] |= entangledLanes);
+    rootEntangledLanes &= ~lane;
+  }
+}
+function getBumpedLaneForHydrationByLane(lane) {
+  switch (lane) {
+    case 2:
+      lane = 1;
+      break;
+    case 8:
+      lane = 4;
+      break;
+    case 32:
+      lane = 16;
+      break;
+    case 256:
+    case 512:
+    case 1024:
+    case 2048:
+    case 4096:
+    case 8192:
+    case 16384:
+    case 32768:
+    case 65536:
+    case 131072:
+    case 262144:
+    case 524288:
+    case 1048576:
+    case 2097152:
+    case 4194304:
+    case 8388608:
+    case 16777216:
+    case 33554432:
+      lane = 128;
+      break;
+    case 268435456:
+      lane = 134217728;
+      break;
+    default:
+      lane = 0;
+  }
+  return lane;
+}
+function addFiberToLanesMap(root, fiber, lanes) {
+  if (isDevToolsPresent)
+    for (root = root.pendingUpdatersLaneMap; 0 < lanes; ) {
+      var index$8 = 31 - clz32(lanes),
+        lane = 1 << index$8;
+      root[index$8].add(fiber);
+      lanes &= ~lane;
+    }
+}
+function movePendingFibersToMemoized(root, lanes) {
+  if (isDevToolsPresent)
+    for (
+      var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap,
+        memoizedUpdaters = root.memoizedUpdaters;
+      0 < lanes;
+
+    ) {
+      var index$9 = 31 - clz32(lanes);
+      root = 1 << index$9;
+      index$9 = pendingUpdatersLaneMap[index$9];
+      0 < index$9.size &&
+        (index$9.forEach(function (fiber) {
+          var alternate = fiber.alternate;
+          (null !== alternate && memoizedUpdaters.has(alternate)) ||
+            memoizedUpdaters.add(fiber);
+        }),
+        index$9.clear());
+      lanes &= ~root;
+    }
+}
+function lanesToEventPriority(lanes) {
+  lanes &= -lanes;
+  return 2 < lanes
+    ? 8 < lanes
+      ? 0 !== (lanes & 134217727)
+        ? 32
+        : 268435456
+      : 8
+    : 2;
+}
+function resolveUpdatePriority() {
+  var updatePriority = ReactDOMSharedInternals.p;
+  if (0 !== updatePriority) return updatePriority;
+  updatePriority = window.event;
+  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);
+}
+function runWithPriority(priority, fn) {
+  var previousPriority = ReactDOMSharedInternals.p;
+  try {
+    return (ReactDOMSharedInternals.p = priority), fn();
+  } finally {
+    ReactDOMSharedInternals.p = previousPriority;
+  }
+}
+var randomKey = Math.random().toString(36).slice(2),
+  internalInstanceKey = "__reactFiber$" + randomKey,
+  internalPropsKey = "__reactProps$" + randomKey,
+  internalContainerInstanceKey = "__reactContainer$" + randomKey,
+  internalEventHandlersKey = "__reactEvents$" + randomKey,
+  internalEventHandlerListenersKey = "__reactListeners$" + randomKey,
+  internalEventHandlesSetKey = "__reactHandles$" + randomKey,
+  internalRootNodeResourcesKey = "__reactResources$" + randomKey,
+  internalHoistableMarker = "__reactMarker$" + randomKey;
+function detachDeletedInstance(node) {
+  delete node[internalInstanceKey];
+  delete node[internalPropsKey];
+  delete node[internalEventHandlersKey];
+  delete node[internalEventHandlerListenersKey];
+  delete node[internalEventHandlesSetKey];
+}
+function getClosestInstanceFromNode(targetNode) {
+  var targetInst = targetNode[internalInstanceKey];
+  if (targetInst) return targetInst;
+  for (var parentNode = targetNode.parentNode; parentNode; ) {
+    if (
+      (targetInst =
+        parentNode[internalContainerInstanceKey] ||
+        parentNode[internalInstanceKey])
+    ) {
+      parentNode = targetInst.alternate;
+      if (
+        null !== targetInst.child ||
+        (null !== parentNode && null !== parentNode.child)
+      )
+        for (
+          targetNode = getParentSuspenseInstance(targetNode);
+          null !== targetNode;
+
+        ) {
+          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;
+          targetNode = getParentSuspenseInstance(targetNode);
+        }
+      return targetInst;
+    }
+    targetNode = parentNode;
+    parentNode = targetNode.parentNode;
+  }
+  return null;
+}
+function getInstanceFromNode(node) {
+  if (
+    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])
+  ) {
+    var tag = node.tag;
+    if (
+      5 === tag ||
+      6 === tag ||
+      13 === tag ||
+      26 === tag ||
+      27 === tag ||
+      3 === tag
+    )
+      return node;
+  }
+  return null;
+}
+function getNodeFromInstance(inst) {
+  var tag = inst.tag;
+  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;
+  throw Error(formatProdErrorMessage(33));
+}
+function getResourcesFromRoot(root) {
+  var resources = root[internalRootNodeResourcesKey];
+  resources ||
+    (resources = root[internalRootNodeResourcesKey] =
+      { hoistableStyles: new Map(), hoistableScripts: new Map() });
+  return resources;
+}
+function markNodeAsHoistable(node) {
+  node[internalHoistableMarker] = !0;
+}
+var allNativeEvents = new Set(),
+  registrationNameDependencies = {};
+function registerTwoPhaseEvent(registrationName, dependencies) {
+  registerDirectEvent(registrationName, dependencies);
+  registerDirectEvent(registrationName + "Capture", dependencies);
+}
+function registerDirectEvent(registrationName, dependencies) {
+  registrationNameDependencies[registrationName] = dependencies;
+  for (
+    registrationName = 0;
+    registrationName < dependencies.length;
+    registrationName++
+  )
+    allNativeEvents.add(dependencies[registrationName]);
+}
+var VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+    "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  illegalAttributeNameCache = {},
+  validatedAttributeNameCache = {};
+function isAttributeNameSafe(attributeName) {
+  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+    return !0;
+  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+    return (validatedAttributeNameCache[attributeName] = !0);
+  illegalAttributeNameCache[attributeName] = !0;
+  return !1;
+}
+function setValueForAttribute(node, name, value) {
+  if (isAttributeNameSafe(name))
+    if (null === value) node.removeAttribute(name);
+    else {
+      switch (typeof value) {
+        case "undefined":
+        case "function":
+        case "symbol":
+          node.removeAttribute(name);
+          return;
+        case "boolean":
+          var prefix$10 = name.toLowerCase().slice(0, 5);
+          if ("data-" !== prefix$10 && "aria-" !== prefix$10) {
+            node.removeAttribute(name);
+            return;
+          }
+      }
+      node.setAttribute(name, "" + value);
+    }
+}
+function setValueForKnownAttribute(node, name, value) {
+  if (null === value) node.removeAttribute(name);
+  else {
+    switch (typeof value) {
+      case "undefined":
+      case "function":
+      case "symbol":
+      case "boolean":
+        node.removeAttribute(name);
+        return;
+    }
+    node.setAttribute(name, "" + value);
+  }
+}
+function setValueForNamespacedAttribute(node, namespace, name, value) {
+  if (null === value) node.removeAttribute(name);
+  else {
+    switch (typeof value) {
+      case "undefined":
+      case "function":
+      case "symbol":
+      case "boolean":
+        node.removeAttribute(name);
+        return;
+    }
+    node.setAttributeNS(namespace, name, "" + value);
+  }
+}
+var prefix, suffix;
+function describeBuiltInComponentFrame(name) {
+  if (void 0 === prefix)
+    try {
+      throw Error();
+    } catch (x) {
+      var match = x.stack.trim().match(/\n( *(at )?)/);
+      prefix = (match && match[1]) || "";
+      suffix =
+        -1 < x.stack.indexOf("\n    at")
+          ? " (<anonymous>)"
+          : -1 < x.stack.indexOf("@")
+            ? "@unknown:0:0"
+            : "";
+    }
+  return "\n" + prefix + name + suffix;
+}
+var reentry = !1;
+function describeNativeComponentFrame(fn, construct) {
+  if (!fn || reentry) return "";
+  reentry = !0;
+  var previousPrepareStackTrace = Error.prepareStackTrace;
+  Error.prepareStackTrace = void 0;
+  try {
+    var RunInRootFrame = {
+      DetermineComponentFrameRoot: function () {
+        try {
+          if (construct) {
+            var Fake = function () {
+              throw Error();
+            };
+            Object.defineProperty(Fake.prototype, "props", {
+              set: function () {
+                throw Error();
+              }
+            });
+            if ("object" === typeof Reflect && Reflect.construct) {
+              try {
+                Reflect.construct(Fake, []);
+              } catch (x) {
+                var control = x;
+              }
+              Reflect.construct(fn, [], Fake);
+            } else {
+              try {
+                Fake.call();
+              } catch (x$11) {
+                control = x$11;
+              }
+              fn.call(Fake.prototype);
+            }
+          } else {
+            try {
+              throw Error();
+            } catch (x$12) {
+              control = x$12;
+            }
+            (Fake = fn()) &&
+              "function" === typeof Fake.catch &&
+              Fake.catch(function () {});
+          }
+        } catch (sample) {
+          if (sample && control && "string" === typeof sample.stack)
+            return [sample.stack, control.stack];
+        }
+        return [null, null];
+      }
+    };
+    RunInRootFrame.DetermineComponentFrameRoot.displayName =
+      "DetermineComponentFrameRoot";
+    var namePropDescriptor = Object.getOwnPropertyDescriptor(
+      RunInRootFrame.DetermineComponentFrameRoot,
+      "name"
+    );
+    namePropDescriptor &&
+      namePropDescriptor.configurable &&
+      Object.defineProperty(
+        RunInRootFrame.DetermineComponentFrameRoot,
+        "name",
+        { value: "DetermineComponentFrameRoot" }
+      );
+    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
+      sampleStack = _RunInRootFrame$Deter[0],
+      controlStack = _RunInRootFrame$Deter[1];
+    if (sampleStack && controlStack) {
+      var sampleLines = sampleStack.split("\n"),
+        controlLines = controlStack.split("\n");
+      for (
+        namePropDescriptor = RunInRootFrame = 0;
+        RunInRootFrame < sampleLines.length &&
+        !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot");
+
+      )
+        RunInRootFrame++;
+      for (
+        ;
+        namePropDescriptor < controlLines.length &&
+        !controlLines[namePropDescriptor].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        namePropDescriptor++;
+      if (
+        RunInRootFrame === sampleLines.length ||
+        namePropDescriptor === controlLines.length
+      )
+        for (
+          RunInRootFrame = sampleLines.length - 1,
+            namePropDescriptor = controlLines.length - 1;
+          1 <= RunInRootFrame &&
+          0 <= namePropDescriptor &&
+          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];
+
+        )
+          namePropDescriptor--;
+      for (
+        ;
+        1 <= RunInRootFrame && 0 <= namePropDescriptor;
+        RunInRootFrame--, namePropDescriptor--
+      )
+        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {
+          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {
+            do
+              if (
+                (RunInRootFrame--,
+                namePropDescriptor--,
+                0 > namePropDescriptor ||
+                  sampleLines[RunInRootFrame] !==
+                    controlLines[namePropDescriptor])
+              ) {
+                var frame =
+                  "\n" +
+                  sampleLines[RunInRootFrame].replace(" at new ", " at ");
+                fn.displayName &&
+                  frame.includes("<anonymous>") &&
+                  (frame = frame.replace("<anonymous>", fn.displayName));
+                return frame;
+              }
+            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);
+          }
+          break;
+        }
+    }
+  } finally {
+    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);
+  }
+  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "")
+    ? describeBuiltInComponentFrame(previousPrepareStackTrace)
+    : "";
+}
+function describeFiber(fiber) {
+  switch (fiber.tag) {
+    case 26:
+    case 27:
+    case 5:
+      return describeBuiltInComponentFrame(fiber.type);
+    case 16:
+      return describeBuiltInComponentFrame("Lazy");
+    case 13:
+      return describeBuiltInComponentFrame("Suspense");
+    case 19:
+      return describeBuiltInComponentFrame("SuspenseList");
+    case 0:
+    case 15:
+      return describeNativeComponentFrame(fiber.type, !1);
+    case 11:
+      return describeNativeComponentFrame(fiber.type.render, !1);
+    case 1:
+      return describeNativeComponentFrame(fiber.type, !0);
+    case 31:
+      return describeBuiltInComponentFrame("Activity");
+    default:
+      return "";
+  }
+}
+function getStackByFiberInDevAndProd(workInProgress) {
+  try {
+    var info = "";
+    do
+      (info += describeFiber(workInProgress)),
+        (workInProgress = workInProgress.return);
+    while (workInProgress);
+    return info;
+  } catch (x) {
+    return "\nError generating stack: " + x.message + "\n" + x.stack;
+  }
+}
+function getToStringValue(value) {
+  switch (typeof value) {
+    case "bigint":
+    case "boolean":
+    case "number":
+    case "string":
+    case "undefined":
+      return value;
+    case "object":
+      return value;
+    default:
+      return "";
+  }
+}
+function isCheckable(elem) {
+  var type = elem.type;
+  return (
+    (elem = elem.nodeName) &&
+    "input" === elem.toLowerCase() &&
+    ("checkbox" === type || "radio" === type)
+  );
+}
+function trackValueOnNode(node) {
+  var valueField = isCheckable(node) ? "checked" : "value",
+    descriptor = Object.getOwnPropertyDescriptor(
+      node.constructor.prototype,
+      valueField
+    ),
+    currentValue = "" + node[valueField];
+  if (
+    !node.hasOwnProperty(valueField) &&
+    "undefined" !== typeof descriptor &&
+    "function" === typeof descriptor.get &&
+    "function" === typeof descriptor.set
+  ) {
+    var get = descriptor.get,
+      set = descriptor.set;
+    Object.defineProperty(node, valueField, {
+      configurable: !0,
+      get: function () {
+        return get.call(this);
+      },
+      set: function (value) {
+        currentValue = "" + value;
+        set.call(this, value);
+      }
+    });
+    Object.defineProperty(node, valueField, {
+      enumerable: descriptor.enumerable
+    });
+    return {
+      getValue: function () {
+        return currentValue;
+      },
+      setValue: function (value) {
+        currentValue = "" + value;
+      },
+      stopTracking: function () {
+        node._valueTracker = null;
+        delete node[valueField];
+      }
+    };
+  }
+}
+function track(node) {
+  node._valueTracker || (node._valueTracker = trackValueOnNode(node));
+}
+function updateValueIfChanged(node) {
+  if (!node) return !1;
+  var tracker = node._valueTracker;
+  if (!tracker) return !0;
+  var lastValue = tracker.getValue();
+  var value = "";
+  node &&
+    (value = isCheckable(node)
+      ? node.checked
+        ? "true"
+        : "false"
+      : node.value);
+  node = value;
+  return node !== lastValue ? (tracker.setValue(node), !0) : !1;
+}
+function getActiveElement(doc) {
+  doc = doc || ("undefined" !== typeof document ? document : void 0);
+  if ("undefined" === typeof doc) return null;
+  try {
+    return doc.activeElement || doc.body;
+  } catch (e) {
+    return doc.body;
+  }
+}
+var escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\n"\\]/g;
+function escapeSelectorAttributeValueInsideDoubleQuotes(value) {
+  return value.replace(
+    escapeSelectorAttributeValueInsideDoubleQuotesRegex,
+    function (ch) {
+      return "\\" + ch.charCodeAt(0).toString(16) + " ";
+    }
+  );
+}
+function updateInput(
+  element,
+  value,
+  defaultValue,
+  lastDefaultValue,
+  checked,
+  defaultChecked,
+  type,
+  name
+) {
+  element.name = "";
+  null != type &&
+  "function" !== typeof type &&
+  "symbol" !== typeof type &&
+  "boolean" !== typeof type
+    ? (element.type = type)
+    : element.removeAttribute("type");
+  if (null != value)
+    if ("number" === type) {
+      if ((0 === value && "" === element.value) || element.value != value)
+        element.value = "" + getToStringValue(value);
+    } else
+      element.value !== "" + getToStringValue(value) &&
+        (element.value = "" + getToStringValue(value));
+  else
+    ("submit" !== type && "reset" !== type) || element.removeAttribute("value");
+  null != value
+    ? setDefaultValue(element, type, getToStringValue(value))
+    : null != defaultValue
+      ? setDefaultValue(element, type, getToStringValue(defaultValue))
+      : null != lastDefaultValue && element.removeAttribute("value");
+  null == checked &&
+    null != defaultChecked &&
+    (element.defaultChecked = !!defaultChecked);
+  null != checked &&
+    (element.checked =
+      checked && "function" !== typeof checked && "symbol" !== typeof checked);
+  null != name &&
+  "function" !== typeof name &&
+  "symbol" !== typeof name &&
+  "boolean" !== typeof name
+    ? (element.name = "" + getToStringValue(name))
+    : element.removeAttribute("name");
+}
+function initInput(
+  element,
+  value,
+  defaultValue,
+  checked,
+  defaultChecked,
+  type,
+  name,
+  isHydrating
+) {
+  null != type &&
+    "function" !== typeof type &&
+    "symbol" !== typeof type &&
+    "boolean" !== typeof type &&
+    (element.type = type);
+  if (null != value || null != defaultValue) {
+    if (
+      !(
+        ("submit" !== type && "reset" !== type) ||
+        (void 0 !== value && null !== value)
+      )
+    )
+      return;
+    defaultValue =
+      null != defaultValue ? "" + getToStringValue(defaultValue) : "";
+    value = null != value ? "" + getToStringValue(value) : defaultValue;
+    isHydrating || value === element.value || (element.value = value);
+    element.defaultValue = value;
+  }
+  checked = null != checked ? checked : defaultChecked;
+  checked =
+    "function" !== typeof checked && "symbol" !== typeof checked && !!checked;
+  element.checked = isHydrating ? element.checked : !!checked;
+  element.defaultChecked = !!checked;
+  null != name &&
+    "function" !== typeof name &&
+    "symbol" !== typeof name &&
+    "boolean" !== typeof name &&
+    (element.name = name);
+}
+function setDefaultValue(node, type, value) {
+  ("number" === type && getActiveElement(node.ownerDocument) === node) ||
+    node.defaultValue === "" + value ||
+    (node.defaultValue = "" + value);
+}
+function updateOptions(node, multiple, propValue, setDefaultSelected) {
+  node = node.options;
+  if (multiple) {
+    multiple = {};
+    for (var i = 0; i < propValue.length; i++)
+      multiple["$" + propValue[i]] = !0;
+    for (propValue = 0; propValue < node.length; propValue++)
+      (i = multiple.hasOwnProperty("$" + node[propValue].value)),
+        node[propValue].selected !== i && (node[propValue].selected = i),
+        i && setDefaultSelected && (node[propValue].defaultSelected = !0);
+  } else {
+    propValue = "" + getToStringValue(propValue);
+    multiple = null;
+    for (i = 0; i < node.length; i++) {
+      if (node[i].value === propValue) {
+        node[i].selected = !0;
+        setDefaultSelected && (node[i].defaultSelected = !0);
+        return;
+      }
+      null !== multiple || node[i].disabled || (multiple = node[i]);
+    }
+    null !== multiple && (multiple.selected = !0);
+  }
+}
+function updateTextarea(element, value, defaultValue) {
+  if (
+    null != value &&
+    ((value = "" + getToStringValue(value)),
+    value !== element.value && (element.value = value),
+    null == defaultValue)
+  ) {
+    element.defaultValue !== value && (element.defaultValue = value);
+    return;
+  }
+  element.defaultValue =
+    null != defaultValue ? "" + getToStringValue(defaultValue) : "";
+}
+function initTextarea(element, value, defaultValue, children) {
+  if (null == value) {
+    if (null != children) {
+      if (null != defaultValue) throw Error(formatProdErrorMessage(92));
+      if (isArrayImpl(children)) {
+        if (1 < children.length) throw Error(formatProdErrorMessage(93));
+        children = children[0];
+      }
+      defaultValue = children;
+    }
+    null == defaultValue && (defaultValue = "");
+    value = defaultValue;
+  }
+  defaultValue = getToStringValue(value);
+  element.defaultValue = defaultValue;
+  children = element.textContent;
+  children === defaultValue &&
+    "" !== children &&
+    null !== children &&
+    (element.value = children);
+}
+function setTextContent(node, text) {
+  if (text) {
+    var firstChild = node.firstChild;
+    if (
+      firstChild &&
+      firstChild === node.lastChild &&
+      3 === firstChild.nodeType
+    ) {
+      firstChild.nodeValue = text;
+      return;
+    }
+  }
+  node.textContent = text;
+}
+var unitlessNumbers = new Set(
+  "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+    " "
+  )
+);
+function setValueForStyle(style, styleName, value) {
+  var isCustomProperty = 0 === styleName.indexOf("--");
+  null == value || "boolean" === typeof value || "" === value
+    ? isCustomProperty
+      ? style.setProperty(styleName, "")
+      : "float" === styleName
+        ? (style.cssFloat = "")
+        : (style[styleName] = "")
+    : isCustomProperty
+      ? style.setProperty(styleName, value)
+      : "number" !== typeof value ||
+          0 === value ||
+          unitlessNumbers.has(styleName)
+        ? "float" === styleName
+          ? (style.cssFloat = value)
+          : (style[styleName] = ("" + value).trim())
+        : (style[styleName] = value + "px");
+}
+function setValueForStyles(node, styles, prevStyles) {
+  if (null != styles && "object" !== typeof styles)
+    throw Error(formatProdErrorMessage(62));
+  node = node.style;
+  if (null != prevStyles) {
+    for (var styleName in prevStyles)
+      !prevStyles.hasOwnProperty(styleName) ||
+        (null != styles && styles.hasOwnProperty(styleName)) ||
+        (0 === styleName.indexOf("--")
+          ? node.setProperty(styleName, "")
+          : "float" === styleName
+            ? (node.cssFloat = "")
+            : (node[styleName] = ""));
+    for (var styleName$18 in styles)
+      (styleName = styles[styleName$18]),
+        styles.hasOwnProperty(styleName$18) &&
+          prevStyles[styleName$18] !== styleName &&
+          setValueForStyle(node, styleName$18, styleName);
+  } else
+    for (var styleName$19 in styles)
+      styles.hasOwnProperty(styleName$19) &&
+        setValueForStyle(node, styleName$19, styles[styleName$19]);
+}
+function isCustomElement(tagName) {
+  if (-1 === tagName.indexOf("-")) return !1;
+  switch (tagName) {
+    case "annotation-xml":
+    case "color-profile":
+    case "font-face":
+    case "font-face-src":
+    case "font-face-uri":
+    case "font-face-format":
+    case "font-face-name":
+    case "missing-glyph":
+      return !1;
+    default:
+      return !0;
+  }
+}
+var aliases = new Map([
+    ["acceptCharset", "accept-charset"],
+    ["htmlFor", "for"],
+    ["httpEquiv", "http-equiv"],
+    ["crossOrigin", "crossorigin"],
+    ["accentHeight", "accent-height"],
+    ["alignmentBaseline", "alignment-baseline"],
+    ["arabicForm", "arabic-form"],
+    ["baselineShift", "baseline-shift"],
+    ["capHeight", "cap-height"],
+    ["clipPath", "clip-path"],
+    ["clipRule", "clip-rule"],
+    ["colorInterpolation", "color-interpolation"],
+    ["colorInterpolationFilters", "color-interpolation-filters"],
+    ["colorProfile", "color-profile"],
+    ["colorRendering", "color-rendering"],
+    ["dominantBaseline", "dominant-baseline"],
+    ["enableBackground", "enable-background"],
+    ["fillOpacity", "fill-opacity"],
+    ["fillRule", "fill-rule"],
+    ["floodColor", "flood-color"],
+    ["floodOpacity", "flood-opacity"],
+    ["fontFamily", "font-family"],
+    ["fontSize", "font-size"],
+    ["fontSizeAdjust", "font-size-adjust"],
+    ["fontStretch", "font-stretch"],
+    ["fontStyle", "font-style"],
+    ["fontVariant", "font-variant"],
+    ["fontWeight", "font-weight"],
+    ["glyphName", "glyph-name"],
+    ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+    ["glyphOrientationVertical", "glyph-orientation-vertical"],
+    ["horizAdvX", "horiz-adv-x"],
+    ["horizOriginX", "horiz-origin-x"],
+    ["imageRendering", "image-rendering"],
+    ["letterSpacing", "letter-spacing"],
+    ["lightingColor", "lighting-color"],
+    ["markerEnd", "marker-end"],
+    ["markerMid", "marker-mid"],
+    ["markerStart", "marker-start"],
+    ["overlinePosition", "overline-position"],
+    ["overlineThickness", "overline-thickness"],
+    ["paintOrder", "paint-order"],
+    ["panose-1", "panose-1"],
+    ["pointerEvents", "pointer-events"],
+    ["renderingIntent", "rendering-intent"],
+    ["shapeRendering", "shape-rendering"],
+    ["stopColor", "stop-color"],
+    ["stopOpacity", "stop-opacity"],
+    ["strikethroughPosition", "strikethrough-position"],
+    ["strikethroughThickness", "strikethrough-thickness"],
+    ["strokeDasharray", "stroke-dasharray"],
+    ["strokeDashoffset", "stroke-dashoffset"],
+    ["strokeLinecap", "stroke-linecap"],
+    ["strokeLinejoin", "stroke-linejoin"],
+    ["strokeMiterlimit", "stroke-miterlimit"],
+    ["strokeOpacity", "stroke-opacity"],
+    ["strokeWidth", "stroke-width"],
+    ["textAnchor", "text-anchor"],
+    ["textDecoration", "text-decoration"],
+    ["textRendering", "text-rendering"],
+    ["transformOrigin", "transform-origin"],
+    ["underlinePosition", "underline-position"],
+    ["underlineThickness", "underline-thickness"],
+    ["unicodeBidi", "unicode-bidi"],
+    ["unicodeRange", "unicode-range"],
+    ["unitsPerEm", "units-per-em"],
+    ["vAlphabetic", "v-alphabetic"],
+    ["vHanging", "v-hanging"],
+    ["vIdeographic", "v-ideographic"],
+    ["vMathematical", "v-mathematical"],
+    ["vectorEffect", "vector-effect"],
+    ["vertAdvY", "vert-adv-y"],
+    ["vertOriginX", "vert-origin-x"],
+    ["vertOriginY", "vert-origin-y"],
+    ["wordSpacing", "word-spacing"],
+    ["writingMode", "writing-mode"],
+    ["xmlnsXlink", "xmlns:xlink"],
+    ["xHeight", "x-height"]
+  ]),
+  isJavaScriptProtocol =
+    /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
+function sanitizeURL(url) {
+  return isJavaScriptProtocol.test("" + url)
+    ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+    : url;
+}
+var currentReplayingEvent = null;
+function getEventTarget(nativeEvent) {
+  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;
+  nativeEvent.correspondingUseElement &&
+    (nativeEvent = nativeEvent.correspondingUseElement);
+  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;
+}
+var restoreTarget = null,
+  restoreQueue = null;
+function restoreStateOfTarget(target) {
+  var internalInstance = getInstanceFromNode(target);
+  if (internalInstance && (target = internalInstance.stateNode)) {
+    var props = target[internalPropsKey] || null;
+    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {
+      case "input":
+        updateInput(
+          target,
+          props.value,
+          props.defaultValue,
+          props.defaultValue,
+          props.checked,
+          props.defaultChecked,
+          props.type,
+          props.name
+        );
+        internalInstance = props.name;
+        if ("radio" === props.type && null != internalInstance) {
+          for (props = target; props.parentNode; ) props = props.parentNode;
+          props = props.querySelectorAll(
+            'input[name="' +
+              escapeSelectorAttributeValueInsideDoubleQuotes(
+                "" + internalInstance
+              ) +
+              '"][type="radio"]'
+          );
+          for (
+            internalInstance = 0;
+            internalInstance < props.length;
+            internalInstance++
+          ) {
+            var otherNode = props[internalInstance];
+            if (otherNode !== target && otherNode.form === target.form) {
+              var otherProps = otherNode[internalPropsKey] || null;
+              if (!otherProps) throw Error(formatProdErrorMessage(90));
+              updateInput(
+                otherNode,
+                otherProps.value,
+                otherProps.defaultValue,
+                otherProps.defaultValue,
+                otherProps.checked,
+                otherProps.defaultChecked,
+                otherProps.type,
+                otherProps.name
+              );
+            }
+          }
+          for (
+            internalInstance = 0;
+            internalInstance < props.length;
+            internalInstance++
+          )
+            (otherNode = props[internalInstance]),
+              otherNode.form === target.form && updateValueIfChanged(otherNode);
+        }
+        break a;
+      case "textarea":
+        updateTextarea(target, props.value, props.defaultValue);
+        break a;
+      case "select":
+        (internalInstance = props.value),
+          null != internalInstance &&
+            updateOptions(target, !!props.multiple, internalInstance, !1);
+    }
+  }
+}
+var isInsideEventHandler = !1;
+function batchedUpdates$2(fn, a, b) {
+  if (isInsideEventHandler) return fn(a, b);
+  isInsideEventHandler = !0;
+  try {
+    var JSCompiler_inline_result = fn(a);
+    return JSCompiler_inline_result;
+  } finally {
+    if (
+      ((isInsideEventHandler = !1),
+      null !== restoreTarget || null !== restoreQueue)
+    )
+      if (
+        (flushSyncWork$1(),
+        restoreTarget &&
+          ((a = restoreTarget),
+          (fn = restoreQueue),
+          (restoreQueue = restoreTarget = null),
+          restoreStateOfTarget(a),
+          fn))
+      )
+        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);
+  }
+}
+function getListener(inst, registrationName) {
+  var stateNode = inst.stateNode;
+  if (null === stateNode) return null;
+  var props = stateNode[internalPropsKey] || null;
+  if (null === props) return null;
+  stateNode = props[registrationName];
+  a: switch (registrationName) {
+    case "onClick":
+    case "onClickCapture":
+    case "onDoubleClick":
+    case "onDoubleClickCapture":
+    case "onMouseDown":
+    case "onMouseDownCapture":
+    case "onMouseMove":
+    case "onMouseMoveCapture":
+    case "onMouseUp":
+    case "onMouseUpCapture":
+    case "onMouseEnter":
+      (props = !props.disabled) ||
+        ((inst = inst.type),
+        (props = !(
+          "button" === inst ||
+          "input" === inst ||
+          "select" === inst ||
+          "textarea" === inst
+        )));
+      inst = !props;
+      break a;
+    default:
+      inst = !1;
+  }
+  if (inst) return null;
+  if (stateNode && "function" !== typeof stateNode)
+    throw Error(
+      formatProdErrorMessage(231, registrationName, typeof stateNode)
+    );
+  return stateNode;
+}
+var canUseDOM = !(
+    "undefined" === typeof window ||
+    "undefined" === typeof window.document ||
+    "undefined" === typeof window.document.createElement
+  ),
+  passiveBrowserEventsSupported = !1;
+if (canUseDOM)
+  try {
+    var options = {};
+    Object.defineProperty(options, "passive", {
+      get: function () {
+        passiveBrowserEventsSupported = !0;
+      }
+    });
+    window.addEventListener("test", options, options);
+    window.removeEventListener("test", options, options);
+  } catch (e) {
+    passiveBrowserEventsSupported = !1;
+  }
+var root = null,
+  startText = null,
+  fallbackText = null;
+function getData() {
+  if (fallbackText) return fallbackText;
+  var start,
+    startValue = startText,
+    startLength = startValue.length,
+    end,
+    endValue = "value" in root ? root.value : root.textContent,
+    endLength = endValue.length;
+  for (
+    start = 0;
+    start < startLength && startValue[start] === endValue[start];
+    start++
+  );
+  var minEnd = startLength - start;
+  for (
+    end = 1;
+    end <= minEnd &&
+    startValue[startLength - end] === endValue[endLength - end];
+    end++
+  );
+  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));
+}
+function getEventCharCode(nativeEvent) {
+  var keyCode = nativeEvent.keyCode;
+  "charCode" in nativeEvent
+    ? ((nativeEvent = nativeEvent.charCode),
+      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))
+    : (nativeEvent = keyCode);
+  10 === nativeEvent && (nativeEvent = 13);
+  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;
+}
+function functionThatReturnsTrue() {
+  return !0;
+}
+function functionThatReturnsFalse() {
+  return !1;
+}
+function createSyntheticEvent(Interface) {
+  function SyntheticBaseEvent(
+    reactName,
+    reactEventType,
+    targetInst,
+    nativeEvent,
+    nativeEventTarget
+  ) {
+    this._reactName = reactName;
+    this._targetInst = targetInst;
+    this.type = reactEventType;
+    this.nativeEvent = nativeEvent;
+    this.target = nativeEventTarget;
+    this.currentTarget = null;
+    for (var propName in Interface)
+      Interface.hasOwnProperty(propName) &&
+        ((reactName = Interface[propName]),
+        (this[propName] = reactName
+          ? reactName(nativeEvent)
+          : nativeEvent[propName]));
+    this.isDefaultPrevented = (
+      null != nativeEvent.defaultPrevented
+        ? nativeEvent.defaultPrevented
+        : !1 === nativeEvent.returnValue
+    )
+      ? functionThatReturnsTrue
+      : functionThatReturnsFalse;
+    this.isPropagationStopped = functionThatReturnsFalse;
+    return this;
+  }
+  assign(SyntheticBaseEvent.prototype, {
+    preventDefault: function () {
+      this.defaultPrevented = !0;
+      var event = this.nativeEvent;
+      event &&
+        (event.preventDefault
+          ? event.preventDefault()
+          : "unknown" !== typeof event.returnValue && (event.returnValue = !1),
+        (this.isDefaultPrevented = functionThatReturnsTrue));
+    },
+    stopPropagation: function () {
+      var event = this.nativeEvent;
+      event &&
+        (event.stopPropagation
+          ? event.stopPropagation()
+          : "unknown" !== typeof event.cancelBubble &&
+            (event.cancelBubble = !0),
+        (this.isPropagationStopped = functionThatReturnsTrue));
+    },
+    persist: function () {},
+    isPersistent: functionThatReturnsTrue
+  });
+  return SyntheticBaseEvent;
+}
+var EventInterface = {
+    eventPhase: 0,
+    bubbles: 0,
+    cancelable: 0,
+    timeStamp: function (event) {
+      return event.timeStamp || Date.now();
+    },
+    defaultPrevented: 0,
+    isTrusted: 0
+  },
+  SyntheticEvent = createSyntheticEvent(EventInterface),
+  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),
+  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),
+  lastMovementX,
+  lastMovementY,
+  lastMouseEvent,
+  MouseEventInterface = assign({}, UIEventInterface, {
+    screenX: 0,
+    screenY: 0,
+    clientX: 0,
+    clientY: 0,
+    pageX: 0,
+    pageY: 0,
+    ctrlKey: 0,
+    shiftKey: 0,
+    altKey: 0,
+    metaKey: 0,
+    getModifierState: getEventModifierState,
+    button: 0,
+    buttons: 0,
+    relatedTarget: function (event) {
+      return void 0 === event.relatedTarget
+        ? event.fromElement === event.srcElement
+          ? event.toElement
+          : event.fromElement
+        : event.relatedTarget;
+    },
+    movementX: function (event) {
+      if ("movementX" in event) return event.movementX;
+      event !== lastMouseEvent &&
+        (lastMouseEvent && "mousemove" === event.type
+          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),
+            (lastMovementY = event.screenY - lastMouseEvent.screenY))
+          : (lastMovementY = lastMovementX = 0),
+        (lastMouseEvent = event));
+      return lastMovementX;
+    },
+    movementY: function (event) {
+      return "movementY" in event ? event.movementY : lastMovementY;
+    }
+  }),
+  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),
+  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),
+  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),
+  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),
+  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),
+  AnimationEventInterface = assign({}, EventInterface, {
+    animationName: 0,
+    elapsedTime: 0,
+    pseudoElement: 0
+  }),
+  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),
+  ClipboardEventInterface = assign({}, EventInterface, {
+    clipboardData: function (event) {
+      return "clipboardData" in event
+        ? event.clipboardData
+        : window.clipboardData;
+    }
+  }),
+  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),
+  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),
+  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),
+  normalizeKey = {
+    Esc: "Escape",
+    Spacebar: " ",
+    Left: "ArrowLeft",
+    Up: "ArrowUp",
+    Right: "ArrowRight",
+    Down: "ArrowDown",
+    Del: "Delete",
+    Win: "OS",
+    Menu: "ContextMenu",
+    Apps: "ContextMenu",
+    Scroll: "ScrollLock",
+    MozPrintableKey: "Unidentified"
+  },
+  translateToKey = {
+    8: "Backspace",
+    9: "Tab",
+    12: "Clear",
+    13: "Enter",
+    16: "Shift",
+    17: "Control",
+    18: "Alt",
+    19: "Pause",
+    20: "CapsLock",
+    27: "Escape",
+    32: " ",
+    33: "PageUp",
+    34: "PageDown",
+    35: "End",
+    36: "Home",
+    37: "ArrowLeft",
+    38: "ArrowUp",
+    39: "ArrowRight",
+    40: "ArrowDown",
+    45: "Insert",
+    46: "Delete",
+    112: "F1",
+    113: "F2",
+    114: "F3",
+    115: "F4",
+    116: "F5",
+    117: "F6",
+    118: "F7",
+    119: "F8",
+    120: "F9",
+    121: "F10",
+    122: "F11",
+    123: "F12",
+    144: "NumLock",
+    145: "ScrollLock",
+    224: "Meta"
+  },
+  modifierKeyToProp = {
+    Alt: "altKey",
+    Control: "ctrlKey",
+    Meta: "metaKey",
+    Shift: "shiftKey"
+  };
+function modifierStateGetter(keyArg) {
+  var nativeEvent = this.nativeEvent;
+  return nativeEvent.getModifierState
+    ? nativeEvent.getModifierState(keyArg)
+    : (keyArg = modifierKeyToProp[keyArg])
+      ? !!nativeEvent[keyArg]
+      : !1;
+}
+function getEventModifierState() {
+  return modifierStateGetter;
+}
+var KeyboardEventInterface = assign({}, UIEventInterface, {
+    key: function (nativeEvent) {
+      if (nativeEvent.key) {
+        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
+        if ("Unidentified" !== key) return key;
+      }
+      return "keypress" === nativeEvent.type
+        ? ((nativeEvent = getEventCharCode(nativeEvent)),
+          13 === nativeEvent ? "Enter" : String.fromCharCode(nativeEvent))
+        : "keydown" === nativeEvent.type || "keyup" === nativeEvent.type
+          ? translateToKey[nativeEvent.keyCode] || "Unidentified"
+          : "";
+    },
+    code: 0,
+    location: 0,
+    ctrlKey: 0,
+    shiftKey: 0,
+    altKey: 0,
+    metaKey: 0,
+    repeat: 0,
+    locale: 0,
+    getModifierState: getEventModifierState,
+    charCode: function (event) {
+      return "keypress" === event.type ? getEventCharCode(event) : 0;
+    },
+    keyCode: function (event) {
+      return "keydown" === event.type || "keyup" === event.type
+        ? event.keyCode
+        : 0;
+    },
+    which: function (event) {
+      return "keypress" === event.type
+        ? getEventCharCode(event)
+        : "keydown" === event.type || "keyup" === event.type
+          ? event.keyCode
+          : 0;
+    }
+  }),
+  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),
+  PointerEventInterface = assign({}, MouseEventInterface, {
+    pointerId: 0,
+    width: 0,
+    height: 0,
+    pressure: 0,
+    tangentialPressure: 0,
+    tiltX: 0,
+    tiltY: 0,
+    twist: 0,
+    pointerType: 0,
+    isPrimary: 0
+  }),
+  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),
+  TouchEventInterface = assign({}, UIEventInterface, {
+    touches: 0,
+    targetTouches: 0,
+    changedTouches: 0,
+    altKey: 0,
+    metaKey: 0,
+    ctrlKey: 0,
+    shiftKey: 0,
+    getModifierState: getEventModifierState
+  }),
+  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),
+  TransitionEventInterface = assign({}, EventInterface, {
+    propertyName: 0,
+    elapsedTime: 0,
+    pseudoElement: 0
+  }),
+  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),
+  WheelEventInterface = assign({}, MouseEventInterface, {
+    deltaX: function (event) {
+      return "deltaX" in event
+        ? event.deltaX
+        : "wheelDeltaX" in event
+          ? -event.wheelDeltaX
+          : 0;
+    },
+    deltaY: function (event) {
+      return "deltaY" in event
+        ? event.deltaY
+        : "wheelDeltaY" in event
+          ? -event.wheelDeltaY
+          : "wheelDelta" in event
+            ? -event.wheelDelta
+            : 0;
+    },
+    deltaZ: 0,
+    deltaMode: 0
+  }),
+  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),
+  ToggleEventInterface = assign({}, EventInterface, {
+    newState: 0,
+    oldState: 0
+  }),
+  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),
+  END_KEYCODES = [9, 13, 27, 32],
+  canUseCompositionEvent = canUseDOM && "CompositionEvent" in window,
+  documentMode = null;
+canUseDOM &&
+  "documentMode" in document &&
+  (documentMode = document.documentMode);
+var canUseTextInputEvent = canUseDOM && "TextEvent" in window && !documentMode,
+  useFallbackCompositionData =
+    canUseDOM &&
+    (!canUseCompositionEvent ||
+      (documentMode && 8 < documentMode && 11 >= documentMode)),
+  SPACEBAR_CHAR = String.fromCharCode(32),
+  hasSpaceKeypress = !1;
+function isFallbackCompositionEnd(domEventName, nativeEvent) {
+  switch (domEventName) {
+    case "keyup":
+      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);
+    case "keydown":
+      return 229 !== nativeEvent.keyCode;
+    case "keypress":
+    case "mousedown":
+    case "focusout":
+      return !0;
+    default:
+      return !1;
+  }
+}
+function getDataFromCustomEvent(nativeEvent) {
+  nativeEvent = nativeEvent.detail;
+  return "object" === typeof nativeEvent && "data" in nativeEvent
+    ? nativeEvent.data
+    : null;
+}
+var isComposing = !1;
+function getNativeBeforeInputChars(domEventName, nativeEvent) {
+  switch (domEventName) {
+    case "compositionend":
+      return getDataFromCustomEvent(nativeEvent);
+    case "keypress":
+      if (32 !== nativeEvent.which) return null;
+      hasSpaceKeypress = !0;
+      return SPACEBAR_CHAR;
+    case "textInput":
+      return (
+        (domEventName = nativeEvent.data),
+        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName
+      );
+    default:
+      return null;
+  }
+}
+function getFallbackBeforeInputChars(domEventName, nativeEvent) {
+  if (isComposing)
+    return "compositionend" === domEventName ||
+      (!canUseCompositionEvent &&
+        isFallbackCompositionEnd(domEventName, nativeEvent))
+      ? ((domEventName = getData()),
+        (fallbackText = startText = root = null),
+        (isComposing = !1),
+        domEventName)
+      : null;
+  switch (domEventName) {
+    case "paste":
+      return null;
+    case "keypress":
+      if (
+        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||
+        (nativeEvent.ctrlKey && nativeEvent.altKey)
+      ) {
+        if (nativeEvent.char && 1 < nativeEvent.char.length)
+          return nativeEvent.char;
+        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);
+      }
+      return null;
+    case "compositionend":
+      return useFallbackCompositionData && "ko" !== nativeEvent.locale
+        ? null
+        : nativeEvent.data;
+    default:
+      return null;
+  }
+}
+var supportedInputTypes = {
+  color: !0,
+  date: !0,
+  datetime: !0,
+  "datetime-local": !0,
+  email: !0,
+  month: !0,
+  number: !0,
+  password: !0,
+  range: !0,
+  search: !0,
+  tel: !0,
+  text: !0,
+  time: !0,
+  url: !0,
+  week: !0
+};
+function isTextInputElement(elem) {
+  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+  return "input" === nodeName
+    ? !!supportedInputTypes[elem.type]
+    : "textarea" === nodeName
+      ? !0
+      : !1;
+}
+function createAndAccumulateChangeEvent(
+  dispatchQueue,
+  inst,
+  nativeEvent,
+  target
+) {
+  restoreTarget
+    ? restoreQueue
+      ? restoreQueue.push(target)
+      : (restoreQueue = [target])
+    : (restoreTarget = target);
+  inst = accumulateTwoPhaseListeners(inst, "onChange");
+  0 < inst.length &&
+    ((nativeEvent = new SyntheticEvent(
+      "onChange",
+      "change",
+      null,
+      nativeEvent,
+      target
+    )),
+    dispatchQueue.push({ event: nativeEvent, listeners: inst }));
+}
+var activeElement$1 = null,
+  activeElementInst$1 = null;
+function runEventInBatch(dispatchQueue) {
+  processDispatchQueue(dispatchQueue, 0);
+}
+function getInstIfValueChanged(targetInst) {
+  var targetNode = getNodeFromInstance(targetInst);
+  if (updateValueIfChanged(targetNode)) return targetInst;
+}
+function getTargetInstForChangeEvent(domEventName, targetInst) {
+  if ("change" === domEventName) return targetInst;
+}
+var isInputEventSupported = !1;
+if (canUseDOM) {
+  var JSCompiler_inline_result$jscomp$298;
+  if (canUseDOM) {
+    var isSupported$jscomp$inline_434 = "oninput" in document;
+    if (!isSupported$jscomp$inline_434) {
+      var element$jscomp$inline_435 = document.createElement("div");
+      element$jscomp$inline_435.setAttribute("oninput", "return;");
+      isSupported$jscomp$inline_434 =
+        "function" === typeof element$jscomp$inline_435.oninput;
+    }
+    JSCompiler_inline_result$jscomp$298 = isSupported$jscomp$inline_434;
+  } else JSCompiler_inline_result$jscomp$298 = !1;
+  isInputEventSupported =
+    JSCompiler_inline_result$jscomp$298 &&
+    (!document.documentMode || 9 < document.documentMode);
+}
+function stopWatchingForValueChange() {
+  activeElement$1 &&
+    (activeElement$1.detachEvent("onpropertychange", handlePropertyChange),
+    (activeElementInst$1 = activeElement$1 = null));
+}
+function handlePropertyChange(nativeEvent) {
+  if (
+    "value" === nativeEvent.propertyName &&
+    getInstIfValueChanged(activeElementInst$1)
+  ) {
+    var dispatchQueue = [];
+    createAndAccumulateChangeEvent(
+      dispatchQueue,
+      activeElementInst$1,
+      nativeEvent,
+      getEventTarget(nativeEvent)
+    );
+    batchedUpdates$2(runEventInBatch, dispatchQueue);
+  }
+}
+function handleEventsForInputEventPolyfill(domEventName, target, targetInst) {
+  "focusin" === domEventName
+    ? (stopWatchingForValueChange(),
+      (activeElement$1 = target),
+      (activeElementInst$1 = targetInst),
+      activeElement$1.attachEvent("onpropertychange", handlePropertyChange))
+    : "focusout" === domEventName && stopWatchingForValueChange();
+}
+function getTargetInstForInputEventPolyfill(domEventName) {
+  if (
+    "selectionchange" === domEventName ||
+    "keyup" === domEventName ||
+    "keydown" === domEventName
+  )
+    return getInstIfValueChanged(activeElementInst$1);
+}
+function getTargetInstForClickEvent(domEventName, targetInst) {
+  if ("click" === domEventName) return getInstIfValueChanged(targetInst);
+}
+function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {
+  if ("input" === domEventName || "change" === domEventName)
+    return getInstIfValueChanged(targetInst);
+}
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is;
+function shallowEqual(objA, objB) {
+  if (objectIs(objA, objB)) return !0;
+  if (
+    "object" !== typeof objA ||
+    null === objA ||
+    "object" !== typeof objB ||
+    null === objB
+  )
+    return !1;
+  var keysA = Object.keys(objA),
+    keysB = Object.keys(objB);
+  if (keysA.length !== keysB.length) return !1;
+  for (keysB = 0; keysB < keysA.length; keysB++) {
+    var currentKey = keysA[keysB];
+    if (
+      !hasOwnProperty.call(objB, currentKey) ||
+      !objectIs(objA[currentKey], objB[currentKey])
+    )
+      return !1;
+  }
+  return !0;
+}
+function getLeafNode(node) {
+  for (; node && node.firstChild; ) node = node.firstChild;
+  return node;
+}
+function getNodeForCharacterOffset(root, offset) {
+  var node = getLeafNode(root);
+  root = 0;
+  for (var nodeEnd; node; ) {
+    if (3 === node.nodeType) {
+      nodeEnd = root + node.textContent.length;
+      if (root <= offset && nodeEnd >= offset)
+        return { node: node, offset: offset - root };
+      root = nodeEnd;
+    }
+    a: {
+      for (; node; ) {
+        if (node.nextSibling) {
+          node = node.nextSibling;
+          break a;
+        }
+        node = node.parentNode;
+      }
+      node = void 0;
+    }
+    node = getLeafNode(node);
+  }
+}
+function containsNode(outerNode, innerNode) {
+  return outerNode && innerNode
+    ? outerNode === innerNode
+      ? !0
+      : outerNode && 3 === outerNode.nodeType
+        ? !1
+        : innerNode && 3 === innerNode.nodeType
+          ? containsNode(outerNode, innerNode.parentNode)
+          : "contains" in outerNode
+            ? outerNode.contains(innerNode)
+            : outerNode.compareDocumentPosition
+              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)
+              : !1
+    : !1;
+}
+function getActiveElementDeep(containerInfo) {
+  containerInfo =
+    null != containerInfo &&
+    null != containerInfo.ownerDocument &&
+    null != containerInfo.ownerDocument.defaultView
+      ? containerInfo.ownerDocument.defaultView
+      : window;
+  for (
+    var element = getActiveElement(containerInfo.document);
+    element instanceof containerInfo.HTMLIFrameElement;
+
+  ) {
+    try {
+      var JSCompiler_inline_result =
+        "string" === typeof element.contentWindow.location.href;
+    } catch (err) {
+      JSCompiler_inline_result = !1;
+    }
+    if (JSCompiler_inline_result) containerInfo = element.contentWindow;
+    else break;
+    element = getActiveElement(containerInfo.document);
+  }
+  return element;
+}
+function hasSelectionCapabilities(elem) {
+  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
+  return (
+    nodeName &&
+    (("input" === nodeName &&
+      ("text" === elem.type ||
+        "search" === elem.type ||
+        "tel" === elem.type ||
+        "url" === elem.type ||
+        "password" === elem.type)) ||
+      "textarea" === nodeName ||
+      "true" === elem.contentEditable)
+  );
+}
+var skipSelectionChangeEvent =
+    canUseDOM && "documentMode" in document && 11 >= document.documentMode,
+  activeElement = null,
+  activeElementInst = null,
+  lastSelection = null,
+  mouseDown = !1;
+function constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {
+  var doc =
+    nativeEventTarget.window === nativeEventTarget
+      ? nativeEventTarget.document
+      : 9 === nativeEventTarget.nodeType
+        ? nativeEventTarget
+        : nativeEventTarget.ownerDocument;
+  mouseDown ||
+    null == activeElement ||
+    activeElement !== getActiveElement(doc) ||
+    ((doc = activeElement),
+    "selectionStart" in doc && hasSelectionCapabilities(doc)
+      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })
+      : ((doc = (
+          (doc.ownerDocument && doc.ownerDocument.defaultView) ||
+          window
+        ).getSelection()),
+        (doc = {
+          anchorNode: doc.anchorNode,
+          anchorOffset: doc.anchorOffset,
+          focusNode: doc.focusNode,
+          focusOffset: doc.focusOffset
+        })),
+    (lastSelection && shallowEqual(lastSelection, doc)) ||
+      ((lastSelection = doc),
+      (doc = accumulateTwoPhaseListeners(activeElementInst, "onSelect")),
+      0 < doc.length &&
+        ((nativeEvent = new SyntheticEvent(
+          "onSelect",
+          "select",
+          null,
+          nativeEvent,
+          nativeEventTarget
+        )),
+        dispatchQueue.push({ event: nativeEvent, listeners: doc }),
+        (nativeEvent.target = activeElement))));
+}
+function makePrefixMap(styleProp, eventName) {
+  var prefixes = {};
+  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
+  prefixes["Webkit" + styleProp] = "webkit" + eventName;
+  prefixes["Moz" + styleProp] = "moz" + eventName;
+  return prefixes;
+}
+var vendorPrefixes = {
+    animationend: makePrefixMap("Animation", "AnimationEnd"),
+    animationiteration: makePrefixMap("Animation", "AnimationIteration"),
+    animationstart: makePrefixMap("Animation", "AnimationStart"),
+    transitionrun: makePrefixMap("Transition", "TransitionRun"),
+    transitionstart: makePrefixMap("Transition", "TransitionStart"),
+    transitioncancel: makePrefixMap("Transition", "TransitionCancel"),
+    transitionend: makePrefixMap("Transition", "TransitionEnd")
+  },
+  prefixedEventNames = {},
+  style = {};
+canUseDOM &&
+  ((style = document.createElement("div").style),
+  "AnimationEvent" in window ||
+    (delete vendorPrefixes.animationend.animation,
+    delete vendorPrefixes.animationiteration.animation,
+    delete vendorPrefixes.animationstart.animation),
+  "TransitionEvent" in window ||
+    delete vendorPrefixes.transitionend.transition);
+function getVendorPrefixedEventName(eventName) {
+  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];
+  if (!vendorPrefixes[eventName]) return eventName;
+  var prefixMap = vendorPrefixes[eventName],
+    styleProp;
+  for (styleProp in prefixMap)
+    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)
+      return (prefixedEventNames[eventName] = prefixMap[styleProp]);
+  return eventName;
+}
+var ANIMATION_END = getVendorPrefixedEventName("animationend"),
+  ANIMATION_ITERATION = getVendorPrefixedEventName("animationiteration"),
+  ANIMATION_START = getVendorPrefixedEventName("animationstart"),
+  TRANSITION_RUN = getVendorPrefixedEventName("transitionrun"),
+  TRANSITION_START = getVendorPrefixedEventName("transitionstart"),
+  TRANSITION_CANCEL = getVendorPrefixedEventName("transitioncancel"),
+  TRANSITION_END = getVendorPrefixedEventName("transitionend"),
+  topLevelEventsToReactNames = new Map(),
+  simpleEventPluginEvents =
+    "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(
+      " "
+    );
+simpleEventPluginEvents.push("scrollEnd");
+function registerSimpleEvent(domEventName, reactName) {
+  topLevelEventsToReactNames.set(domEventName, reactName);
+  registerTwoPhaseEvent(reactName, [domEventName]);
+}
+var CapturedStacks = new WeakMap();
+function createCapturedValueAtFiber(value, source) {
+  if ("object" === typeof value && null !== value) {
+    var existing = CapturedStacks.get(value);
+    if (void 0 !== existing) return existing;
+    source = {
+      value: value,
+      source: source,
+      stack: getStackByFiberInDevAndProd(source)
+    };
+    CapturedStacks.set(value, source);
+    return source;
+  }
+  return {
+    value: value,
+    source: source,
+    stack: getStackByFiberInDevAndProd(source)
+  };
+}
+var concurrentQueues = [],
+  concurrentQueuesIndex = 0,
+  concurrentlyUpdatedLanes = 0;
+function finishQueueingConcurrentUpdates() {
+  for (
+    var endIndex = concurrentQueuesIndex,
+      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);
+    i < endIndex;
+
+  ) {
+    var fiber = concurrentQueues[i];
+    concurrentQueues[i++] = null;
+    var queue = concurrentQueues[i];
+    concurrentQueues[i++] = null;
+    var update = concurrentQueues[i];
+    concurrentQueues[i++] = null;
+    var lane = concurrentQueues[i];
+    concurrentQueues[i++] = null;
+    if (null !== queue && null !== update) {
+      var pending = queue.pending;
+      null === pending
+        ? (update.next = update)
+        : ((update.next = pending.next), (pending.next = update));
+      queue.pending = update;
+    }
+    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);
+  }
+}
+function enqueueUpdate$1(fiber, queue, update, lane) {
+  concurrentQueues[concurrentQueuesIndex++] = fiber;
+  concurrentQueues[concurrentQueuesIndex++] = queue;
+  concurrentQueues[concurrentQueuesIndex++] = update;
+  concurrentQueues[concurrentQueuesIndex++] = lane;
+  concurrentlyUpdatedLanes |= lane;
+  fiber.lanes |= lane;
+  fiber = fiber.alternate;
+  null !== fiber && (fiber.lanes |= lane);
+}
+function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {
+  enqueueUpdate$1(fiber, queue, update, lane);
+  return getRootForUpdatedFiber(fiber);
+}
+function enqueueConcurrentRenderForLane(fiber, lane) {
+  enqueueUpdate$1(fiber, null, null, lane);
+  return getRootForUpdatedFiber(fiber);
+}
+function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {
+  sourceFiber.lanes |= lane;
+  var alternate = sourceFiber.alternate;
+  null !== alternate && (alternate.lanes |= lane);
+  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )
+    (parent.childLanes |= lane),
+      (alternate = parent.alternate),
+      null !== alternate && (alternate.childLanes |= lane),
+      22 === parent.tag &&
+        ((sourceFiber = parent.stateNode),
+        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),
+      (sourceFiber = parent),
+      (parent = parent.return);
+  return 3 === sourceFiber.tag
+    ? ((parent = sourceFiber.stateNode),
+      isHidden &&
+        null !== update &&
+        ((isHidden = 31 - clz32(lane)),
+        (sourceFiber = parent.hiddenUpdates),
+        (alternate = sourceFiber[isHidden]),
+        null === alternate
+          ? (sourceFiber[isHidden] = [update])
+          : alternate.push(update),
+        (update.lane = lane | 536870912)),
+      parent)
+    : null;
+}
+function getRootForUpdatedFiber(sourceFiber) {
+  if (50 < nestedUpdateCount)
+    throw (
+      ((nestedUpdateCount = 0),
+      (rootWithNestedUpdates = null),
+      Error(formatProdErrorMessage(185)))
+    );
+  for (var parent = sourceFiber.return; null !== parent; )
+    (sourceFiber = parent), (parent = sourceFiber.return);
+  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;
+}
+var emptyContextObject = {};
+function FiberNode(tag, pendingProps, key, mode) {
+  this.tag = tag;
+  this.key = key;
+  this.sibling =
+    this.child =
+    this.return =
+    this.stateNode =
+    this.type =
+    this.elementType =
+      null;
+  this.index = 0;
+  this.refCleanup = this.ref = null;
+  this.pendingProps = pendingProps;
+  this.dependencies =
+    this.memoizedState =
+    this.updateQueue =
+    this.memoizedProps =
+      null;
+  this.mode = mode;
+  this.subtreeFlags = this.flags = 0;
+  this.deletions = null;
+  this.childLanes = this.lanes = 0;
+  this.alternate = null;
+  this.actualDuration = -0;
+  this.actualStartTime = -1.1;
+  this.treeBaseDuration = this.selfBaseDuration = -0;
+}
+function createFiberImplClass(tag, pendingProps, key, mode) {
+  return new FiberNode(tag, pendingProps, key, mode);
+}
+function shouldConstruct(Component) {
+  Component = Component.prototype;
+  return !(!Component || !Component.isReactComponent);
+}
+function createWorkInProgress(current, pendingProps) {
+  var workInProgress = current.alternate;
+  null === workInProgress
+    ? ((workInProgress = createFiberImplClass(
+        current.tag,
+        pendingProps,
+        current.key,
+        current.mode
+      )),
+      (workInProgress.elementType = current.elementType),
+      (workInProgress.type = current.type),
+      (workInProgress.stateNode = current.stateNode),
+      (workInProgress.alternate = current),
+      (current.alternate = workInProgress))
+    : ((workInProgress.pendingProps = pendingProps),
+      (workInProgress.type = current.type),
+      (workInProgress.flags = 0),
+      (workInProgress.subtreeFlags = 0),
+      (workInProgress.deletions = null),
+      (workInProgress.actualDuration = -0),
+      (workInProgress.actualStartTime = -1.1));
+  workInProgress.flags = current.flags & 65011712;
+  workInProgress.childLanes = current.childLanes;
+  workInProgress.lanes = current.lanes;
+  workInProgress.child = current.child;
+  workInProgress.memoizedProps = current.memoizedProps;
+  workInProgress.memoizedState = current.memoizedState;
+  workInProgress.updateQueue = current.updateQueue;
+  pendingProps = current.dependencies;
+  workInProgress.dependencies =
+    null === pendingProps
+      ? null
+      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };
+  workInProgress.sibling = current.sibling;
+  workInProgress.index = current.index;
+  workInProgress.ref = current.ref;
+  workInProgress.refCleanup = current.refCleanup;
+  workInProgress.selfBaseDuration = current.selfBaseDuration;
+  workInProgress.treeBaseDuration = current.treeBaseDuration;
+  return workInProgress;
+}
+function resetWorkInProgress(workInProgress, renderLanes) {
+  workInProgress.flags &= 65011714;
+  var current = workInProgress.alternate;
+  null === current
+    ? ((workInProgress.childLanes = 0),
+      (workInProgress.lanes = renderLanes),
+      (workInProgress.child = null),
+      (workInProgress.subtreeFlags = 0),
+      (workInProgress.memoizedProps = null),
+      (workInProgress.memoizedState = null),
+      (workInProgress.updateQueue = null),
+      (workInProgress.dependencies = null),
+      (workInProgress.stateNode = null),
+      (workInProgress.selfBaseDuration = 0),
+      (workInProgress.treeBaseDuration = 0))
+    : ((workInProgress.childLanes = current.childLanes),
+      (workInProgress.lanes = current.lanes),
+      (workInProgress.child = current.child),
+      (workInProgress.subtreeFlags = 0),
+      (workInProgress.deletions = null),
+      (workInProgress.memoizedProps = current.memoizedProps),
+      (workInProgress.memoizedState = current.memoizedState),
+      (workInProgress.updateQueue = current.updateQueue),
+      (workInProgress.type = current.type),
+      (renderLanes = current.dependencies),
+      (workInProgress.dependencies =
+        null === renderLanes
+          ? null
+          : {
+              lanes: renderLanes.lanes,
+              firstContext: renderLanes.firstContext
+            }),
+      (workInProgress.selfBaseDuration = current.selfBaseDuration),
+      (workInProgress.treeBaseDuration = current.treeBaseDuration));
+  return workInProgress;
+}
+function createFiberFromTypeAndProps(
+  type,
+  key,
+  pendingProps,
+  owner,
+  mode,
+  lanes
+) {
+  var fiberTag = 0;
+  owner = type;
+  if ("function" === typeof type) shouldConstruct(type) && (fiberTag = 1);
+  else if ("string" === typeof type)
+    fiberTag = isHostHoistableType(
+      type,
+      pendingProps,
+      contextStackCursor.current
+    )
+      ? 26
+      : "html" === type || "head" === type || "body" === type
+        ? 27
+        : 5;
+  else
+    a: switch (type) {
+      case REACT_ACTIVITY_TYPE:
+        return (
+          (type = createFiberImplClass(31, pendingProps, key, mode)),
+          (type.elementType = REACT_ACTIVITY_TYPE),
+          (type.lanes = lanes),
+          type
+        );
+      case REACT_FRAGMENT_TYPE:
+        return createFiberFromFragment(pendingProps.children, mode, lanes, key);
+      case REACT_STRICT_MODE_TYPE:
+        fiberTag = 8;
+        mode |= 24;
+        break;
+      case REACT_PROFILER_TYPE:
+        return (
+          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),
+          (type.elementType = REACT_PROFILER_TYPE),
+          (type.lanes = lanes),
+          (type.stateNode = { effectDuration: 0, passiveEffectDuration: 0 }),
+          type
+        );
+      case REACT_SUSPENSE_TYPE:
+        return (
+          (type = createFiberImplClass(13, pendingProps, key, mode)),
+          (type.elementType = REACT_SUSPENSE_TYPE),
+          (type.lanes = lanes),
+          type
+        );
+      case REACT_SUSPENSE_LIST_TYPE:
+        return (
+          (type = createFiberImplClass(19, pendingProps, key, mode)),
+          (type.elementType = REACT_SUSPENSE_LIST_TYPE),
+          (type.lanes = lanes),
+          type
+        );
+      default:
+        if ("object" === typeof type && null !== type)
+          switch (type.$$typeof) {
+            case REACT_PROVIDER_TYPE:
+            case REACT_CONTEXT_TYPE:
+              fiberTag = 10;
+              break a;
+            case REACT_CONSUMER_TYPE:
+              fiberTag = 9;
+              break a;
+            case REACT_FORWARD_REF_TYPE:
+              fiberTag = 11;
+              break a;
+            case REACT_MEMO_TYPE:
+              fiberTag = 14;
+              break a;
+            case REACT_LAZY_TYPE:
+              fiberTag = 16;
+              owner = null;
+              break a;
+          }
+        fiberTag = 29;
+        pendingProps = Error(
+          formatProdErrorMessage(130, null === type ? "null" : typeof type, "")
+        );
+        owner = null;
+    }
+  key = createFiberImplClass(fiberTag, pendingProps, key, mode);
+  key.elementType = type;
+  key.type = owner;
+  key.lanes = lanes;
+  return key;
+}
+function createFiberFromFragment(elements, mode, lanes, key) {
+  elements = createFiberImplClass(7, elements, key, mode);
+  elements.lanes = lanes;
+  return elements;
+}
+function createFiberFromText(content, mode, lanes) {
+  content = createFiberImplClass(6, content, null, mode);
+  content.lanes = lanes;
+  return content;
+}
+function createFiberFromPortal(portal, mode, lanes) {
+  mode = createFiberImplClass(
+    4,
+    null !== portal.children ? portal.children : [],
+    portal.key,
+    mode
+  );
+  mode.lanes = lanes;
+  mode.stateNode = {
+    containerInfo: portal.containerInfo,
+    pendingChildren: null,
+    implementation: portal.implementation
+  };
+  return mode;
+}
+var forkStack = [],
+  forkStackIndex = 0,
+  treeForkProvider = null,
+  treeForkCount = 0,
+  idStack = [],
+  idStackIndex = 0,
+  treeContextProvider = null,
+  treeContextId = 1,
+  treeContextOverflow = "";
+function pushTreeFork(workInProgress, totalChildren) {
+  forkStack[forkStackIndex++] = treeForkCount;
+  forkStack[forkStackIndex++] = treeForkProvider;
+  treeForkProvider = workInProgress;
+  treeForkCount = totalChildren;
+}
+function pushTreeId(workInProgress, totalChildren, index) {
+  idStack[idStackIndex++] = treeContextId;
+  idStack[idStackIndex++] = treeContextOverflow;
+  idStack[idStackIndex++] = treeContextProvider;
+  treeContextProvider = workInProgress;
+  var baseIdWithLeadingBit = treeContextId;
+  workInProgress = treeContextOverflow;
+  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+  baseIdWithLeadingBit &= ~(1 << baseLength);
+  index += 1;
+  var length = 32 - clz32(totalChildren) + baseLength;
+  if (30 < length) {
+    var numberOfOverflowBits = baseLength - (baseLength % 5);
+    length = (
+      baseIdWithLeadingBit &
+      ((1 << numberOfOverflowBits) - 1)
+    ).toString(32);
+    baseIdWithLeadingBit >>= numberOfOverflowBits;
+    baseLength -= numberOfOverflowBits;
+    treeContextId =
+      (1 << (32 - clz32(totalChildren) + baseLength)) |
+      (index << baseLength) |
+      baseIdWithLeadingBit;
+    treeContextOverflow = length + workInProgress;
+  } else
+    (treeContextId =
+      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),
+      (treeContextOverflow = workInProgress);
+}
+function pushMaterializedTreeId(workInProgress) {
+  null !== workInProgress.return &&
+    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));
+}
+function popTreeContext(workInProgress) {
+  for (; workInProgress === treeForkProvider; )
+    (treeForkProvider = forkStack[--forkStackIndex]),
+      (forkStack[forkStackIndex] = null),
+      (treeForkCount = forkStack[--forkStackIndex]),
+      (forkStack[forkStackIndex] = null);
+  for (; workInProgress === treeContextProvider; )
+    (treeContextProvider = idStack[--idStackIndex]),
+      (idStack[idStackIndex] = null),
+      (treeContextOverflow = idStack[--idStackIndex]),
+      (idStack[idStackIndex] = null),
+      (treeContextId = idStack[--idStackIndex]),
+      (idStack[idStackIndex] = null);
+}
+var hydrationParentFiber = null,
+  nextHydratableInstance = null,
+  isHydrating = !1,
+  hydrationErrors = null,
+  rootOrSingletonContext = !1,
+  HydrationMismatchException = Error(formatProdErrorMessage(519));
+function throwOnHydrationMismatch(fiber) {
+  var error = Error(formatProdErrorMessage(418, ""));
+  queueHydrationError(createCapturedValueAtFiber(error, fiber));
+  throw HydrationMismatchException;
+}
+function prepareToHydrateHostInstance(fiber) {
+  var instance = fiber.stateNode,
+    type = fiber.type,
+    props = fiber.memoizedProps;
+  instance[internalInstanceKey] = fiber;
+  instance[internalPropsKey] = props;
+  switch (type) {
+    case "dialog":
+      listenToNonDelegatedEvent("cancel", instance);
+      listenToNonDelegatedEvent("close", instance);
+      break;
+    case "iframe":
+    case "object":
+    case "embed":
+      listenToNonDelegatedEvent("load", instance);
+      break;
+    case "video":
+    case "audio":
+      for (type = 0; type < mediaEventTypes.length; type++)
+        listenToNonDelegatedEvent(mediaEventTypes[type], instance);
+      break;
+    case "source":
+      listenToNonDelegatedEvent("error", instance);
+      break;
+    case "img":
+    case "image":
+    case "link":
+      listenToNonDelegatedEvent("error", instance);
+      listenToNonDelegatedEvent("load", instance);
+      break;
+    case "details":
+      listenToNonDelegatedEvent("toggle", instance);
+      break;
+    case "input":
+      listenToNonDelegatedEvent("invalid", instance);
+      initInput(
+        instance,
+        props.value,
+        props.defaultValue,
+        props.checked,
+        props.defaultChecked,
+        props.type,
+        props.name,
+        !0
+      );
+      track(instance);
+      break;
+    case "select":
+      listenToNonDelegatedEvent("invalid", instance);
+      break;
+    case "textarea":
+      listenToNonDelegatedEvent("invalid", instance),
+        initTextarea(instance, props.value, props.defaultValue, props.children),
+        track(instance);
+  }
+  type = props.children;
+  ("string" !== typeof type &&
+    "number" !== typeof type &&
+    "bigint" !== typeof type) ||
+  instance.textContent === "" + type ||
+  !0 === props.suppressHydrationWarning ||
+  checkForUnmatchedText(instance.textContent, type)
+    ? (null != props.popover &&
+        (listenToNonDelegatedEvent("beforetoggle", instance),
+        listenToNonDelegatedEvent("toggle", instance)),
+      null != props.onScroll && listenToNonDelegatedEvent("scroll", instance),
+      null != props.onScrollEnd &&
+        listenToNonDelegatedEvent("scrollend", instance),
+      null != props.onClick && (instance.onclick = noop$2),
+      (instance = !0))
+    : (instance = !1);
+  instance || throwOnHydrationMismatch(fiber);
+}
+function popToNextHostParent(fiber) {
+  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )
+    switch (hydrationParentFiber.tag) {
+      case 5:
+      case 13:
+        rootOrSingletonContext = !1;
+        return;
+      case 27:
+      case 3:
+        rootOrSingletonContext = !0;
+        return;
+      default:
+        hydrationParentFiber = hydrationParentFiber.return;
+    }
+}
+function popHydrationState(fiber) {
+  if (fiber !== hydrationParentFiber) return !1;
+  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;
+  var tag = fiber.tag,
+    JSCompiler_temp;
+  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {
+    if ((JSCompiler_temp = 5 === tag))
+      (JSCompiler_temp = fiber.type),
+        (JSCompiler_temp =
+          !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) ||
+          shouldSetTextContent(fiber.type, fiber.memoizedProps));
+    JSCompiler_temp = !JSCompiler_temp;
+  }
+  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);
+  popToNextHostParent(fiber);
+  if (13 === tag) {
+    fiber = fiber.memoizedState;
+    fiber = null !== fiber ? fiber.dehydrated : null;
+    if (!fiber) throw Error(formatProdErrorMessage(317));
+    a: {
+      fiber = fiber.nextSibling;
+      for (tag = 0; fiber; ) {
+        if (8 === fiber.nodeType)
+          if (((JSCompiler_temp = fiber.data), "/$" === JSCompiler_temp)) {
+            if (0 === tag) {
+              nextHydratableInstance = getNextHydratable(fiber.nextSibling);
+              break a;
+            }
+            tag--;
+          } else
+            ("$" !== JSCompiler_temp &&
+              "$!" !== JSCompiler_temp &&
+              "$?" !== JSCompiler_temp) ||
+              tag++;
+        fiber = fiber.nextSibling;
+      }
+      nextHydratableInstance = null;
+    }
+  } else
+    27 === tag
+      ? ((tag = nextHydratableInstance),
+        isSingletonScope(fiber.type)
+          ? ((fiber = previousHydratableOnEnteringScopedSingleton),
+            (previousHydratableOnEnteringScopedSingleton = null),
+            (nextHydratableInstance = fiber))
+          : (nextHydratableInstance = tag))
+      : (nextHydratableInstance = hydrationParentFiber
+          ? getNextHydratable(fiber.stateNode.nextSibling)
+          : null);
+  return !0;
+}
+function resetHydrationState() {
+  nextHydratableInstance = hydrationParentFiber = null;
+  isHydrating = !1;
+}
+function upgradeHydrationErrorsToRecoverable() {
+  var queuedErrors = hydrationErrors;
+  null !== queuedErrors &&
+    (null === workInProgressRootRecoverableErrors
+      ? (workInProgressRootRecoverableErrors = queuedErrors)
+      : workInProgressRootRecoverableErrors.push.apply(
+          workInProgressRootRecoverableErrors,
+          queuedErrors
+        ),
+    (hydrationErrors = null));
+  return queuedErrors;
+}
+function queueHydrationError(error) {
+  null === hydrationErrors
+    ? (hydrationErrors = [error])
+    : hydrationErrors.push(error);
+}
+var valueCursor = createCursor(null),
+  currentlyRenderingFiber$1 = null,
+  lastContextDependency = null;
+function pushProvider(providerFiber, context, nextValue) {
+  push(valueCursor, context._currentValue);
+  context._currentValue = nextValue;
+}
+function popProvider(context) {
+  context._currentValue = valueCursor.current;
+  pop(valueCursor);
+}
+function scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {
+  for (; null !== parent; ) {
+    var alternate = parent.alternate;
+    (parent.childLanes & renderLanes) !== renderLanes
+      ? ((parent.childLanes |= renderLanes),
+        null !== alternate && (alternate.childLanes |= renderLanes))
+      : null !== alternate &&
+        (alternate.childLanes & renderLanes) !== renderLanes &&
+        (alternate.childLanes |= renderLanes);
+    if (parent === propagationRoot) break;
+    parent = parent.return;
+  }
+}
+function propagateContextChanges(
+  workInProgress,
+  contexts,
+  renderLanes,
+  forcePropagateEntireTree
+) {
+  var fiber = workInProgress.child;
+  null !== fiber && (fiber.return = workInProgress);
+  for (; null !== fiber; ) {
+    var list = fiber.dependencies;
+    if (null !== list) {
+      var nextFiber = fiber.child;
+      list = list.firstContext;
+      a: for (; null !== list; ) {
+        var dependency = list;
+        list = fiber;
+        for (var i = 0; i < contexts.length; i++)
+          if (dependency.context === contexts[i]) {
+            list.lanes |= renderLanes;
+            dependency = list.alternate;
+            null !== dependency && (dependency.lanes |= renderLanes);
+            scheduleContextWorkOnParentPath(
+              list.return,
+              renderLanes,
+              workInProgress
+            );
+            forcePropagateEntireTree || (nextFiber = null);
+            break a;
+          }
+        list = dependency.next;
+      }
+    } else if (18 === fiber.tag) {
+      nextFiber = fiber.return;
+      if (null === nextFiber) throw Error(formatProdErrorMessage(341));
+      nextFiber.lanes |= renderLanes;
+      list = nextFiber.alternate;
+      null !== list && (list.lanes |= renderLanes);
+      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);
+      nextFiber = null;
+    } else nextFiber = fiber.child;
+    if (null !== nextFiber) nextFiber.return = fiber;
+    else
+      for (nextFiber = fiber; null !== nextFiber; ) {
+        if (nextFiber === workInProgress) {
+          nextFiber = null;
+          break;
+        }
+        fiber = nextFiber.sibling;
+        if (null !== fiber) {
+          fiber.return = nextFiber.return;
+          nextFiber = fiber;
+          break;
+        }
+        nextFiber = nextFiber.return;
+      }
+    fiber = nextFiber;
+  }
+}
+function propagateParentContextChanges(
+  current,
+  workInProgress,
+  renderLanes,
+  forcePropagateEntireTree
+) {
+  current = null;
+  for (
+    var parent = workInProgress, isInsidePropagationBailout = !1;
+    null !== parent;
+
+  ) {
+    if (!isInsidePropagationBailout)
+      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;
+      else if (0 !== (parent.flags & 262144)) break;
+    if (10 === parent.tag) {
+      var currentParent = parent.alternate;
+      if (null === currentParent) throw Error(formatProdErrorMessage(387));
+      currentParent = currentParent.memoizedProps;
+      if (null !== currentParent) {
+        var context = parent.type;
+        objectIs(parent.pendingProps.value, currentParent.value) ||
+          (null !== current ? current.push(context) : (current = [context]));
+      }
+    } else if (parent === hostTransitionProviderCursor.current) {
+      currentParent = parent.alternate;
+      if (null === currentParent) throw Error(formatProdErrorMessage(387));
+      currentParent.memoizedState.memoizedState !==
+        parent.memoizedState.memoizedState &&
+        (null !== current
+          ? current.push(HostTransitionContext)
+          : (current = [HostTransitionContext]));
+    }
+    parent = parent.return;
+  }
+  null !== current &&
+    propagateContextChanges(
+      workInProgress,
+      current,
+      renderLanes,
+      forcePropagateEntireTree
+    );
+  workInProgress.flags |= 262144;
+}
+function checkIfContextChanged(currentDependencies) {
+  for (
+    currentDependencies = currentDependencies.firstContext;
+    null !== currentDependencies;
+
+  ) {
+    if (
+      !objectIs(
+        currentDependencies.context._currentValue,
+        currentDependencies.memoizedValue
+      )
+    )
+      return !0;
+    currentDependencies = currentDependencies.next;
+  }
+  return !1;
+}
+function prepareToReadContext(workInProgress) {
+  currentlyRenderingFiber$1 = workInProgress;
+  lastContextDependency = null;
+  workInProgress = workInProgress.dependencies;
+  null !== workInProgress && (workInProgress.firstContext = null);
+}
+function readContext(context) {
+  return readContextForConsumer(currentlyRenderingFiber$1, context);
+}
+function readContextDuringReconciliation(consumer, context) {
+  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);
+  return readContextForConsumer(consumer, context);
+}
+function readContextForConsumer(consumer, context) {
+  var value = context._currentValue;
+  context = { context: context, memoizedValue: value, next: null };
+  if (null === lastContextDependency) {
+    if (null === consumer) throw Error(formatProdErrorMessage(308));
+    lastContextDependency = context;
+    consumer.dependencies = { lanes: 0, firstContext: context };
+    consumer.flags |= 524288;
+  } else lastContextDependency = lastContextDependency.next = context;
+  return value;
+}
+var AbortControllerLocal =
+    "undefined" !== typeof AbortController
+      ? AbortController
+      : function () {
+          var listeners = [],
+            signal = (this.signal = {
+              aborted: !1,
+              addEventListener: function (type, listener) {
+                listeners.push(listener);
+              }
+            });
+          this.abort = function () {
+            signal.aborted = !0;
+            listeners.forEach(function (listener) {
+              return listener();
+            });
+          };
+        },
+  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,
+  NormalPriority = Scheduler.unstable_NormalPriority,
+  CacheContext = {
+    $$typeof: REACT_CONTEXT_TYPE,
+    Consumer: null,
+    Provider: null,
+    _currentValue: null,
+    _currentValue2: null,
+    _threadCount: 0
+  };
+function createCache() {
+  return {
+    controller: new AbortControllerLocal(),
+    data: new Map(),
+    refCount: 0
+  };
+}
+function releaseCache(cache) {
+  cache.refCount--;
+  0 === cache.refCount &&
+    scheduleCallback$2(NormalPriority, function () {
+      cache.controller.abort();
+    });
+}
+var now = Scheduler.unstable_now,
+  commitStartTime = -0,
+  profilerStartTime = -1.1,
+  profilerEffectDuration = -0;
+function pushNestedEffectDurations() {
+  var prevEffectDuration = profilerEffectDuration;
+  profilerEffectDuration = 0;
+  return prevEffectDuration;
+}
+function popNestedEffectDurations(prevEffectDuration) {
+  var elapsedTime = profilerEffectDuration;
+  profilerEffectDuration = prevEffectDuration;
+  return elapsedTime;
+}
+function bubbleNestedEffectDurations(prevEffectDuration) {
+  var elapsedTime = profilerEffectDuration;
+  profilerEffectDuration += prevEffectDuration;
+  return elapsedTime;
+}
+var currentUpdateIsNested = !1,
+  nestedUpdateScheduled = !1;
+function startProfilerTimer(fiber) {
+  profilerStartTime = now();
+  0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime);
+}
+function stopProfilerTimerIfRunningAndRecordDuration(fiber) {
+  if (0 <= profilerStartTime) {
+    var elapsedTime = now() - profilerStartTime;
+    fiber.actualDuration += elapsedTime;
+    fiber.selfBaseDuration = elapsedTime;
+    profilerStartTime = -1;
+  }
+}
+function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) {
+  if (0 <= profilerStartTime) {
+    var elapsedTime = now() - profilerStartTime;
+    fiber.actualDuration += elapsedTime;
+    profilerStartTime = -1;
+  }
+}
+function recordEffectDuration() {
+  if (0 <= profilerStartTime) {
+    var elapsedTime = now() - profilerStartTime;
+    profilerStartTime = -1;
+    profilerEffectDuration += elapsedTime;
+  }
+}
+function startEffectTimer() {
+  profilerStartTime = now();
+}
+function transferActualDuration(fiber) {
+  for (var child = fiber.child; child; )
+    (fiber.actualDuration += child.actualDuration), (child = child.sibling);
+}
+var currentEntangledListeners = null,
+  currentEntangledPendingCount = 0,
+  currentEntangledLane = 0,
+  currentEntangledActionThenable = null;
+function entangleAsyncAction(transition, thenable) {
+  if (null === currentEntangledListeners) {
+    var entangledListeners = (currentEntangledListeners = []);
+    currentEntangledPendingCount = 0;
+    currentEntangledLane = requestTransitionLane();
+    currentEntangledActionThenable = {
+      status: "pending",
+      value: void 0,
+      then: function (resolve) {
+        entangledListeners.push(resolve);
+      }
+    };
+  }
+  currentEntangledPendingCount++;
+  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);
+  return thenable;
+}
+function pingEngtangledActionScope() {
+  if (
+    0 === --currentEntangledPendingCount &&
+    null !== currentEntangledListeners
+  ) {
+    null !== currentEntangledActionThenable &&
+      (currentEntangledActionThenable.status = "fulfilled");
+    var listeners = currentEntangledListeners;
+    currentEntangledListeners = null;
+    currentEntangledLane = 0;
+    currentEntangledActionThenable = null;
+    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();
+  }
+}
+function chainThenableValue(thenable, result) {
+  var listeners = [],
+    thenableWithOverride = {
+      status: "pending",
+      value: null,
+      reason: null,
+      then: function (resolve) {
+        listeners.push(resolve);
+      }
+    };
+  thenable.then(
+    function () {
+      thenableWithOverride.status = "fulfilled";
+      thenableWithOverride.value = result;
+      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);
+    },
+    function (error) {
+      thenableWithOverride.status = "rejected";
+      thenableWithOverride.reason = error;
+      for (error = 0; error < listeners.length; error++)
+        (0, listeners[error])(void 0);
+    }
+  );
+  return thenableWithOverride;
+}
+var prevOnStartTransitionFinish = ReactSharedInternals.S;
+ReactSharedInternals.S = function (transition, returnValue) {
+  "object" === typeof returnValue &&
+    null !== returnValue &&
+    "function" === typeof returnValue.then &&
+    entangleAsyncAction(transition, returnValue);
+  null !== prevOnStartTransitionFinish &&
+    prevOnStartTransitionFinish(transition, returnValue);
+};
+var resumedCache = createCursor(null);
+function peekCacheFromPool() {
+  var cacheResumedFromPreviousRender = resumedCache.current;
+  return null !== cacheResumedFromPreviousRender
+    ? cacheResumedFromPreviousRender
+    : workInProgressRoot.pooledCache;
+}
+function pushTransition(offscreenWorkInProgress, prevCachePool) {
+  null === prevCachePool
+    ? push(resumedCache, resumedCache.current)
+    : push(resumedCache, prevCachePool.pool);
+}
+function getSuspendedCache() {
+  var cacheFromPool = peekCacheFromPool();
+  return null === cacheFromPool
+    ? null
+    : { parent: CacheContext._currentValue, pool: cacheFromPool };
+}
+var SuspenseException = Error(formatProdErrorMessage(460)),
+  SuspenseyCommitException = Error(formatProdErrorMessage(474)),
+  SuspenseActionException = Error(formatProdErrorMessage(542)),
+  noopSuspenseyCommitThenable = { then: function () {} };
+function isThenableResolved(thenable) {
+  thenable = thenable.status;
+  return "fulfilled" === thenable || "rejected" === thenable;
+}
+function noop$4() {}
+function trackUsedThenable(thenableState, thenable, index) {
+  index = thenableState[index];
+  void 0 === index
+    ? thenableState.push(thenable)
+    : index !== thenable && (thenable.then(noop$4, noop$4), (thenable = index));
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw (
+        ((thenableState = thenable.reason),
+        checkIfUseWrappedInAsyncCatch(thenableState),
+        thenableState)
+      );
+    default:
+      if ("string" === typeof thenable.status) thenable.then(noop$4, noop$4);
+      else {
+        thenableState = workInProgressRoot;
+        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)
+          throw Error(formatProdErrorMessage(482));
+        thenableState = thenable;
+        thenableState.status = "pending";
+        thenableState.then(
+          function (fulfilledValue) {
+            if ("pending" === thenable.status) {
+              var fulfilledThenable = thenable;
+              fulfilledThenable.status = "fulfilled";
+              fulfilledThenable.value = fulfilledValue;
+            }
+          },
+          function (error) {
+            if ("pending" === thenable.status) {
+              var rejectedThenable = thenable;
+              rejectedThenable.status = "rejected";
+              rejectedThenable.reason = error;
+            }
+          }
+        );
+      }
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw (
+            ((thenableState = thenable.reason),
+            checkIfUseWrappedInAsyncCatch(thenableState),
+            thenableState)
+          );
+      }
+      suspendedThenable = thenable;
+      throw SuspenseException;
+  }
+}
+var suspendedThenable = null;
+function getSuspendedThenable() {
+  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));
+  var thenable = suspendedThenable;
+  suspendedThenable = null;
+  return thenable;
+}
+function checkIfUseWrappedInAsyncCatch(rejectedReason) {
+  if (
+    rejectedReason === SuspenseException ||
+    rejectedReason === SuspenseActionException
+  )
+    throw Error(formatProdErrorMessage(483));
+}
+var hasForceUpdate = !1;
+function initializeUpdateQueue(fiber) {
+  fiber.updateQueue = {
+    baseState: fiber.memoizedState,
+    firstBaseUpdate: null,
+    lastBaseUpdate: null,
+    shared: { pending: null, lanes: 0, hiddenCallbacks: null },
+    callbacks: null
+  };
+}
+function cloneUpdateQueue(current, workInProgress) {
+  current = current.updateQueue;
+  workInProgress.updateQueue === current &&
+    (workInProgress.updateQueue = {
+      baseState: current.baseState,
+      firstBaseUpdate: current.firstBaseUpdate,
+      lastBaseUpdate: current.lastBaseUpdate,
+      shared: current.shared,
+      callbacks: null
+    });
+}
+function createUpdate(lane) {
+  return { lane: lane, tag: 0, payload: null, callback: null, next: null };
+}
+function enqueueUpdate(fiber, update, lane) {
+  var updateQueue = fiber.updateQueue;
+  if (null === updateQueue) return null;
+  updateQueue = updateQueue.shared;
+  if (0 !== (executionContext & 2)) {
+    var pending = updateQueue.pending;
+    null === pending
+      ? (update.next = update)
+      : ((update.next = pending.next), (pending.next = update));
+    updateQueue.pending = update;
+    update = getRootForUpdatedFiber(fiber);
+    markUpdateLaneFromFiberToRoot(fiber, null, lane);
+    return update;
+  }
+  enqueueUpdate$1(fiber, updateQueue, update, lane);
+  return getRootForUpdatedFiber(fiber);
+}
+function entangleTransitions(root, fiber, lane) {
+  fiber = fiber.updateQueue;
+  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {
+    var queueLanes = fiber.lanes;
+    queueLanes &= root.pendingLanes;
+    lane |= queueLanes;
+    fiber.lanes = lane;
+    markRootEntangled(root, lane);
+  }
+}
+function enqueueCapturedUpdate(workInProgress, capturedUpdate) {
+  var queue = workInProgress.updateQueue,
+    current = workInProgress.alternate;
+  if (
+    null !== current &&
+    ((current = current.updateQueue), queue === current)
+  ) {
+    var newFirst = null,
+      newLast = null;
+    queue = queue.firstBaseUpdate;
+    if (null !== queue) {
+      do {
+        var clone = {
+          lane: queue.lane,
+          tag: queue.tag,
+          payload: queue.payload,
+          callback: null,
+          next: null
+        };
+        null === newLast
+          ? (newFirst = newLast = clone)
+          : (newLast = newLast.next = clone);
+        queue = queue.next;
+      } while (null !== queue);
+      null === newLast
+        ? (newFirst = newLast = capturedUpdate)
+        : (newLast = newLast.next = capturedUpdate);
+    } else newFirst = newLast = capturedUpdate;
+    queue = {
+      baseState: current.baseState,
+      firstBaseUpdate: newFirst,
+      lastBaseUpdate: newLast,
+      shared: current.shared,
+      callbacks: current.callbacks
+    };
+    workInProgress.updateQueue = queue;
+    return;
+  }
+  workInProgress = queue.lastBaseUpdate;
+  null === workInProgress
+    ? (queue.firstBaseUpdate = capturedUpdate)
+    : (workInProgress.next = capturedUpdate);
+  queue.lastBaseUpdate = capturedUpdate;
+}
+var didReadFromEntangledAsyncAction = !1;
+function suspendIfUpdateReadFromEntangledAsyncAction() {
+  if (didReadFromEntangledAsyncAction) {
+    var entangledActionThenable = currentEntangledActionThenable;
+    if (null !== entangledActionThenable) throw entangledActionThenable;
+  }
+}
+function processUpdateQueue(
+  workInProgress$jscomp$0,
+  props,
+  instance$jscomp$0,
+  renderLanes
+) {
+  didReadFromEntangledAsyncAction = !1;
+  var queue = workInProgress$jscomp$0.updateQueue;
+  hasForceUpdate = !1;
+  var firstBaseUpdate = queue.firstBaseUpdate,
+    lastBaseUpdate = queue.lastBaseUpdate,
+    pendingQueue = queue.shared.pending;
+  if (null !== pendingQueue) {
+    queue.shared.pending = null;
+    var lastPendingUpdate = pendingQueue,
+      firstPendingUpdate = lastPendingUpdate.next;
+    lastPendingUpdate.next = null;
+    null === lastBaseUpdate
+      ? (firstBaseUpdate = firstPendingUpdate)
+      : (lastBaseUpdate.next = firstPendingUpdate);
+    lastBaseUpdate = lastPendingUpdate;
+    var current = workInProgress$jscomp$0.alternate;
+    null !== current &&
+      ((current = current.updateQueue),
+      (pendingQueue = current.lastBaseUpdate),
+      pendingQueue !== lastBaseUpdate &&
+        (null === pendingQueue
+          ? (current.firstBaseUpdate = firstPendingUpdate)
+          : (pendingQueue.next = firstPendingUpdate),
+        (current.lastBaseUpdate = lastPendingUpdate)));
+  }
+  if (null !== firstBaseUpdate) {
+    var newState = queue.baseState;
+    lastBaseUpdate = 0;
+    current = firstPendingUpdate = lastPendingUpdate = null;
+    pendingQueue = firstBaseUpdate;
+    do {
+      var updateLane = pendingQueue.lane & -536870913,
+        isHiddenUpdate = updateLane !== pendingQueue.lane;
+      if (
+        isHiddenUpdate
+          ? (workInProgressRootRenderLanes & updateLane) === updateLane
+          : (renderLanes & updateLane) === updateLane
+      ) {
+        0 !== updateLane &&
+          updateLane === currentEntangledLane &&
+          (didReadFromEntangledAsyncAction = !0);
+        null !== current &&
+          (current = current.next =
+            {
+              lane: 0,
+              tag: pendingQueue.tag,
+              payload: pendingQueue.payload,
+              callback: null,
+              next: null
+            });
+        a: {
+          var workInProgress = workInProgress$jscomp$0,
+            update = pendingQueue;
+          updateLane = props;
+          var instance = instance$jscomp$0;
+          switch (update.tag) {
+            case 1:
+              workInProgress = update.payload;
+              if ("function" === typeof workInProgress) {
+                newState = workInProgress.call(instance, newState, updateLane);
+                break a;
+              }
+              newState = workInProgress;
+              break a;
+            case 3:
+              workInProgress.flags = (workInProgress.flags & -65537) | 128;
+            case 0:
+              workInProgress = update.payload;
+              updateLane =
+                "function" === typeof workInProgress
+                  ? workInProgress.call(instance, newState, updateLane)
+                  : workInProgress;
+              if (null === updateLane || void 0 === updateLane) break a;
+              newState = assign({}, newState, updateLane);
+              break a;
+            case 2:
+              hasForceUpdate = !0;
+          }
+        }
+        updateLane = pendingQueue.callback;
+        null !== updateLane &&
+          ((workInProgress$jscomp$0.flags |= 64),
+          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),
+          (isHiddenUpdate = queue.callbacks),
+          null === isHiddenUpdate
+            ? (queue.callbacks = [updateLane])
+            : isHiddenUpdate.push(updateLane));
+      } else
+        (isHiddenUpdate = {
+          lane: updateLane,
+          tag: pendingQueue.tag,
+          payload: pendingQueue.payload,
+          callback: pendingQueue.callback,
+          next: null
+        }),
+          null === current
+            ? ((firstPendingUpdate = current = isHiddenUpdate),
+              (lastPendingUpdate = newState))
+            : (current = current.next = isHiddenUpdate),
+          (lastBaseUpdate |= updateLane);
+      pendingQueue = pendingQueue.next;
+      if (null === pendingQueue)
+        if (((pendingQueue = queue.shared.pending), null === pendingQueue))
+          break;
+        else
+          (isHiddenUpdate = pendingQueue),
+            (pendingQueue = isHiddenUpdate.next),
+            (isHiddenUpdate.next = null),
+            (queue.lastBaseUpdate = isHiddenUpdate),
+            (queue.shared.pending = null);
+    } while (1);
+    null === current && (lastPendingUpdate = newState);
+    queue.baseState = lastPendingUpdate;
+    queue.firstBaseUpdate = firstPendingUpdate;
+    queue.lastBaseUpdate = current;
+    null === firstBaseUpdate && (queue.shared.lanes = 0);
+    workInProgressRootSkippedLanes |= lastBaseUpdate;
+    workInProgress$jscomp$0.lanes = lastBaseUpdate;
+    workInProgress$jscomp$0.memoizedState = newState;
+  }
+}
+function callCallback(callback, context) {
+  if ("function" !== typeof callback)
+    throw Error(formatProdErrorMessage(191, callback));
+  callback.call(context);
+}
+function commitCallbacks(updateQueue, context) {
+  var callbacks = updateQueue.callbacks;
+  if (null !== callbacks)
+    for (
+      updateQueue.callbacks = null, updateQueue = 0;
+      updateQueue < callbacks.length;
+      updateQueue++
+    )
+      callCallback(callbacks[updateQueue], context);
+}
+var currentTreeHiddenStackCursor = createCursor(null),
+  prevEntangledRenderLanesCursor = createCursor(0);
+function pushHiddenContext(fiber, context) {
+  fiber = entangledRenderLanes;
+  push(prevEntangledRenderLanesCursor, fiber);
+  push(currentTreeHiddenStackCursor, context);
+  entangledRenderLanes = fiber | context.baseLanes;
+}
+function reuseHiddenContextOnStack() {
+  push(prevEntangledRenderLanesCursor, entangledRenderLanes);
+  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);
+}
+function popHiddenContext() {
+  entangledRenderLanes = prevEntangledRenderLanesCursor.current;
+  pop(currentTreeHiddenStackCursor);
+  pop(prevEntangledRenderLanesCursor);
+}
+var renderLanes = 0,
+  currentlyRenderingFiber = null,
+  currentHook = null,
+  workInProgressHook = null,
+  didScheduleRenderPhaseUpdate = !1,
+  didScheduleRenderPhaseUpdateDuringThisPass = !1,
+  shouldDoubleInvokeUserFnsInHooksDEV = !1,
+  localIdCounter = 0,
+  thenableIndexCounter$1 = 0,
+  thenableState$1 = null,
+  globalClientIdCounter = 0;
+function throwInvalidHookError() {
+  throw Error(formatProdErrorMessage(321));
+}
+function areHookInputsEqual(nextDeps, prevDeps) {
+  if (null === prevDeps) return !1;
+  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)
+    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;
+  return !0;
+}
+function renderWithHooks(
+  current,
+  workInProgress,
+  Component,
+  props,
+  secondArg,
+  nextRenderLanes
+) {
+  renderLanes = nextRenderLanes;
+  currentlyRenderingFiber = workInProgress;
+  workInProgress.memoizedState = null;
+  workInProgress.updateQueue = null;
+  workInProgress.lanes = 0;
+  ReactSharedInternals.H =
+    null === current || null === current.memoizedState
+      ? HooksDispatcherOnMount
+      : HooksDispatcherOnUpdate;
+  shouldDoubleInvokeUserFnsInHooksDEV = !1;
+  nextRenderLanes = Component(props, secondArg);
+  shouldDoubleInvokeUserFnsInHooksDEV = !1;
+  didScheduleRenderPhaseUpdateDuringThisPass &&
+    (nextRenderLanes = renderWithHooksAgain(
+      workInProgress,
+      Component,
+      props,
+      secondArg
+    ));
+  finishRenderingHooks(current);
+  return nextRenderLanes;
+}
+function finishRenderingHooks(current) {
+  ReactSharedInternals.H = ContextOnlyDispatcher;
+  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;
+  renderLanes = 0;
+  workInProgressHook = currentHook = currentlyRenderingFiber = null;
+  didScheduleRenderPhaseUpdate = !1;
+  thenableIndexCounter$1 = 0;
+  thenableState$1 = null;
+  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));
+  null === current ||
+    didReceiveUpdate ||
+    ((current = current.dependencies),
+    null !== current &&
+      checkIfContextChanged(current) &&
+      (didReceiveUpdate = !0));
+}
+function renderWithHooksAgain(workInProgress, Component, props, secondArg) {
+  currentlyRenderingFiber = workInProgress;
+  var numberOfReRenders = 0;
+  do {
+    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);
+    thenableIndexCounter$1 = 0;
+    didScheduleRenderPhaseUpdateDuringThisPass = !1;
+    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));
+    numberOfReRenders += 1;
+    workInProgressHook = currentHook = null;
+    if (null != workInProgress.updateQueue) {
+      var children = workInProgress.updateQueue;
+      children.lastEffect = null;
+      children.events = null;
+      children.stores = null;
+      null != children.memoCache && (children.memoCache.index = 0);
+    }
+    ReactSharedInternals.H = HooksDispatcherOnRerender;
+    children = Component(props, secondArg);
+  } while (didScheduleRenderPhaseUpdateDuringThisPass);
+  return children;
+}
+function TransitionAwareHostComponent() {
+  var dispatcher = ReactSharedInternals.H,
+    maybeThenable = dispatcher.useState()[0];
+  maybeThenable =
+    "function" === typeof maybeThenable.then
+      ? useThenable(maybeThenable)
+      : maybeThenable;
+  dispatcher = dispatcher.useState()[0];
+  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&
+    (currentlyRenderingFiber.flags |= 1024);
+  return maybeThenable;
+}
+function checkDidRenderIdHook() {
+  var didRenderIdHook = 0 !== localIdCounter;
+  localIdCounter = 0;
+  return didRenderIdHook;
+}
+function bailoutHooks(current, workInProgress, lanes) {
+  workInProgress.updateQueue = current.updateQueue;
+  workInProgress.flags &= -2053;
+  current.lanes &= ~lanes;
+}
+function resetHooksOnUnwind(workInProgress) {
+  if (didScheduleRenderPhaseUpdate) {
+    for (
+      workInProgress = workInProgress.memoizedState;
+      null !== workInProgress;
+
+    ) {
+      var queue = workInProgress.queue;
+      null !== queue && (queue.pending = null);
+      workInProgress = workInProgress.next;
+    }
+    didScheduleRenderPhaseUpdate = !1;
+  }
+  renderLanes = 0;
+  workInProgressHook = currentHook = currentlyRenderingFiber = null;
+  didScheduleRenderPhaseUpdateDuringThisPass = !1;
+  thenableIndexCounter$1 = localIdCounter = 0;
+  thenableState$1 = null;
+}
+function mountWorkInProgressHook() {
+  var hook = {
+    memoizedState: null,
+    baseState: null,
+    baseQueue: null,
+    queue: null,
+    next: null
+  };
+  null === workInProgressHook
+    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)
+    : (workInProgressHook = workInProgressHook.next = hook);
+  return workInProgressHook;
+}
+function updateWorkInProgressHook() {
+  if (null === currentHook) {
+    var nextCurrentHook = currentlyRenderingFiber.alternate;
+    nextCurrentHook =
+      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;
+  } else nextCurrentHook = currentHook.next;
+  var nextWorkInProgressHook =
+    null === workInProgressHook
+      ? currentlyRenderingFiber.memoizedState
+      : workInProgressHook.next;
+  if (null !== nextWorkInProgressHook)
+    (workInProgressHook = nextWorkInProgressHook),
+      (currentHook = nextCurrentHook);
+  else {
+    if (null === nextCurrentHook) {
+      if (null === currentlyRenderingFiber.alternate)
+        throw Error(formatProdErrorMessage(467));
+      throw Error(formatProdErrorMessage(310));
+    }
+    currentHook = nextCurrentHook;
+    nextCurrentHook = {
+      memoizedState: currentHook.memoizedState,
+      baseState: currentHook.baseState,
+      baseQueue: currentHook.baseQueue,
+      queue: currentHook.queue,
+      next: null
+    };
+    null === workInProgressHook
+      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =
+          nextCurrentHook)
+      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);
+  }
+  return workInProgressHook;
+}
+function createFunctionComponentUpdateQueue() {
+  return { lastEffect: null, events: null, stores: null, memoCache: null };
+}
+function useThenable(thenable) {
+  var index = thenableIndexCounter$1;
+  thenableIndexCounter$1 += 1;
+  null === thenableState$1 && (thenableState$1 = []);
+  thenable = trackUsedThenable(thenableState$1, thenable, index);
+  index = currentlyRenderingFiber;
+  null ===
+    (null === workInProgressHook
+      ? index.memoizedState
+      : workInProgressHook.next) &&
+    ((index = index.alternate),
+    (ReactSharedInternals.H =
+      null === index || null === index.memoizedState
+        ? HooksDispatcherOnMount
+        : HooksDispatcherOnUpdate));
+  return thenable;
+}
+function use(usable) {
+  if (null !== usable && "object" === typeof usable) {
+    if ("function" === typeof usable.then) return useThenable(usable);
+    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);
+  }
+  throw Error(formatProdErrorMessage(438, String(usable)));
+}
+function useMemoCache(size) {
+  var memoCache = null,
+    updateQueue = currentlyRenderingFiber.updateQueue;
+  null !== updateQueue && (memoCache = updateQueue.memoCache);
+  if (null == memoCache) {
+    var current = currentlyRenderingFiber.alternate;
+    null !== current &&
+      ((current = current.updateQueue),
+      null !== current &&
+        ((current = current.memoCache),
+        null != current &&
+          (memoCache = {
+            data: current.data.map(function (array) {
+              return array.slice();
+            }),
+            index: 0
+          })));
+  }
+  null == memoCache && (memoCache = { data: [], index: 0 });
+  null === updateQueue &&
+    ((updateQueue = createFunctionComponentUpdateQueue()),
+    (currentlyRenderingFiber.updateQueue = updateQueue));
+  updateQueue.memoCache = memoCache;
+  updateQueue = memoCache.data[memoCache.index];
+  if (void 0 === updateQueue)
+    for (
+      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;
+      current < size;
+      current++
+    )
+      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;
+  memoCache.index++;
+  return updateQueue;
+}
+function basicStateReducer(state, action) {
+  return "function" === typeof action ? action(state) : action;
+}
+function updateReducer(reducer) {
+  var hook = updateWorkInProgressHook();
+  return updateReducerImpl(hook, currentHook, reducer);
+}
+function updateReducerImpl(hook, current, reducer) {
+  var queue = hook.queue;
+  if (null === queue) throw Error(formatProdErrorMessage(311));
+  queue.lastRenderedReducer = reducer;
+  var baseQueue = hook.baseQueue,
+    pendingQueue = queue.pending;
+  if (null !== pendingQueue) {
+    if (null !== baseQueue) {
+      var baseFirst = baseQueue.next;
+      baseQueue.next = pendingQueue.next;
+      pendingQueue.next = baseFirst;
+    }
+    current.baseQueue = baseQueue = pendingQueue;
+    queue.pending = null;
+  }
+  pendingQueue = hook.baseState;
+  if (null === baseQueue) hook.memoizedState = pendingQueue;
+  else {
+    current = baseQueue.next;
+    var newBaseQueueFirst = (baseFirst = null),
+      newBaseQueueLast = null,
+      update = current,
+      didReadFromEntangledAsyncAction$34 = !1;
+    do {
+      var updateLane = update.lane & -536870913;
+      if (
+        updateLane !== update.lane
+          ? (workInProgressRootRenderLanes & updateLane) === updateLane
+          : (renderLanes & updateLane) === updateLane
+      ) {
+        var revertLane = update.revertLane;
+        if (0 === revertLane)
+          null !== newBaseQueueLast &&
+            (newBaseQueueLast = newBaseQueueLast.next =
+              {
+                lane: 0,
+                revertLane: 0,
+                action: update.action,
+                hasEagerState: update.hasEagerState,
+                eagerState: update.eagerState,
+                next: null
+              }),
+            updateLane === currentEntangledLane &&
+              (didReadFromEntangledAsyncAction$34 = !0);
+        else if ((renderLanes & revertLane) === revertLane) {
+          update = update.next;
+          revertLane === currentEntangledLane &&
+            (didReadFromEntangledAsyncAction$34 = !0);
+          continue;
+        } else
+          (updateLane = {
+            lane: 0,
+            revertLane: update.revertLane,
+            action: update.action,
+            hasEagerState: update.hasEagerState,
+            eagerState: update.eagerState,
+            next: null
+          }),
+            null === newBaseQueueLast
+              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),
+                (baseFirst = pendingQueue))
+              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),
+            (currentlyRenderingFiber.lanes |= revertLane),
+            (workInProgressRootSkippedLanes |= revertLane);
+        updateLane = update.action;
+        shouldDoubleInvokeUserFnsInHooksDEV &&
+          reducer(pendingQueue, updateLane);
+        pendingQueue = update.hasEagerState
+          ? update.eagerState
+          : reducer(pendingQueue, updateLane);
+      } else
+        (revertLane = {
+          lane: updateLane,
+          revertLane: update.revertLane,
+          action: update.action,
+          hasEagerState: update.hasEagerState,
+          eagerState: update.eagerState,
+          next: null
+        }),
+          null === newBaseQueueLast
+            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),
+              (baseFirst = pendingQueue))
+            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),
+          (currentlyRenderingFiber.lanes |= updateLane),
+          (workInProgressRootSkippedLanes |= updateLane);
+      update = update.next;
+    } while (null !== update && update !== current);
+    null === newBaseQueueLast
+      ? (baseFirst = pendingQueue)
+      : (newBaseQueueLast.next = newBaseQueueFirst);
+    if (
+      !objectIs(pendingQueue, hook.memoizedState) &&
+      ((didReceiveUpdate = !0),
+      didReadFromEntangledAsyncAction$34 &&
+        ((reducer = currentEntangledActionThenable), null !== reducer))
+    )
+      throw reducer;
+    hook.memoizedState = pendingQueue;
+    hook.baseState = baseFirst;
+    hook.baseQueue = newBaseQueueLast;
+    queue.lastRenderedState = pendingQueue;
+  }
+  null === baseQueue && (queue.lanes = 0);
+  return [hook.memoizedState, queue.dispatch];
+}
+function rerenderReducer(reducer) {
+  var hook = updateWorkInProgressHook(),
+    queue = hook.queue;
+  if (null === queue) throw Error(formatProdErrorMessage(311));
+  queue.lastRenderedReducer = reducer;
+  var dispatch = queue.dispatch,
+    lastRenderPhaseUpdate = queue.pending,
+    newState = hook.memoizedState;
+  if (null !== lastRenderPhaseUpdate) {
+    queue.pending = null;
+    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);
+    do (newState = reducer(newState, update.action)), (update = update.next);
+    while (update !== lastRenderPhaseUpdate);
+    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);
+    hook.memoizedState = newState;
+    null === hook.baseQueue && (hook.baseState = newState);
+    queue.lastRenderedState = newState;
+  }
+  return [newState, dispatch];
+}
+function updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
+  var fiber = currentlyRenderingFiber,
+    hook = updateWorkInProgressHook(),
+    isHydrating$jscomp$0 = isHydrating;
+  if (isHydrating$jscomp$0) {
+    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));
+    getServerSnapshot = getServerSnapshot();
+  } else getServerSnapshot = getSnapshot();
+  var snapshotChanged = !objectIs(
+    (currentHook || hook).memoizedState,
+    getServerSnapshot
+  );
+  snapshotChanged &&
+    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));
+  hook = hook.queue;
+  var create = subscribeToStore.bind(null, fiber, hook, subscribe);
+  updateEffectImpl(2048, 8, create, [subscribe]);
+  if (
+    hook.getSnapshot !== getSnapshot ||
+    snapshotChanged ||
+    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)
+  ) {
+    fiber.flags |= 2048;
+    pushSimpleEffect(
+      9,
+      createEffectInstance(),
+      updateStoreInstance.bind(
+        null,
+        fiber,
+        hook,
+        getServerSnapshot,
+        getSnapshot
+      ),
+      null
+    );
+    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));
+    isHydrating$jscomp$0 ||
+      0 !== (renderLanes & 124) ||
+      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);
+  }
+  return getServerSnapshot;
+}
+function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {
+  fiber.flags |= 16384;
+  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };
+  getSnapshot = currentlyRenderingFiber.updateQueue;
+  null === getSnapshot
+    ? ((getSnapshot = createFunctionComponentUpdateQueue()),
+      (currentlyRenderingFiber.updateQueue = getSnapshot),
+      (getSnapshot.stores = [fiber]))
+    : ((renderedSnapshot = getSnapshot.stores),
+      null === renderedSnapshot
+        ? (getSnapshot.stores = [fiber])
+        : renderedSnapshot.push(fiber));
+}
+function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {
+  inst.value = nextSnapshot;
+  inst.getSnapshot = getSnapshot;
+  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);
+}
+function subscribeToStore(fiber, inst, subscribe) {
+  return subscribe(function () {
+    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);
+  });
+}
+function checkIfSnapshotChanged(inst) {
+  var latestGetSnapshot = inst.getSnapshot;
+  inst = inst.value;
+  try {
+    var nextValue = latestGetSnapshot();
+    return !objectIs(inst, nextValue);
+  } catch (error) {
+    return !0;
+  }
+}
+function forceStoreRerender(fiber) {
+  var root = enqueueConcurrentRenderForLane(fiber, 2);
+  null !== root && scheduleUpdateOnFiber(root, fiber, 2);
+}
+function mountStateImpl(initialState) {
+  var hook = mountWorkInProgressHook();
+  if ("function" === typeof initialState) {
+    var initialStateInitializer = initialState;
+    initialState = initialStateInitializer();
+    if (shouldDoubleInvokeUserFnsInHooksDEV) {
+      setIsStrictModeForDevtools(!0);
+      try {
+        initialStateInitializer();
+      } finally {
+        setIsStrictModeForDevtools(!1);
+      }
+    }
+  }
+  hook.memoizedState = hook.baseState = initialState;
+  hook.queue = {
+    pending: null,
+    lanes: 0,
+    dispatch: null,
+    lastRenderedReducer: basicStateReducer,
+    lastRenderedState: initialState
+  };
+  return hook;
+}
+function updateOptimisticImpl(hook, current, passthrough, reducer) {
+  hook.baseState = passthrough;
+  return updateReducerImpl(
+    hook,
+    currentHook,
+    "function" === typeof reducer ? reducer : basicStateReducer
+  );
+}
+function dispatchActionState(
+  fiber,
+  actionQueue,
+  setPendingState,
+  setState,
+  payload
+) {
+  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));
+  fiber = actionQueue.action;
+  if (null !== fiber) {
+    var actionNode = {
+      payload: payload,
+      action: fiber,
+      next: null,
+      isTransition: !0,
+      status: "pending",
+      value: null,
+      reason: null,
+      listeners: [],
+      then: function (listener) {
+        actionNode.listeners.push(listener);
+      }
+    };
+    null !== ReactSharedInternals.T
+      ? setPendingState(!0)
+      : (actionNode.isTransition = !1);
+    setState(actionNode);
+    setPendingState = actionQueue.pending;
+    null === setPendingState
+      ? ((actionNode.next = actionQueue.pending = actionNode),
+        runActionStateAction(actionQueue, actionNode))
+      : ((actionNode.next = setPendingState.next),
+        (actionQueue.pending = setPendingState.next = actionNode));
+  }
+}
+function runActionStateAction(actionQueue, node) {
+  var action = node.action,
+    payload = node.payload,
+    prevState = actionQueue.state;
+  if (node.isTransition) {
+    var prevTransition = ReactSharedInternals.T,
+      currentTransition = {};
+    ReactSharedInternals.T = currentTransition;
+    try {
+      var returnValue = action(prevState, payload),
+        onStartTransitionFinish = ReactSharedInternals.S;
+      null !== onStartTransitionFinish &&
+        onStartTransitionFinish(currentTransition, returnValue);
+      handleActionReturnValue(actionQueue, node, returnValue);
+    } catch (error) {
+      onActionError(actionQueue, node, error);
+    } finally {
+      ReactSharedInternals.T = prevTransition;
+    }
+  } else
+    try {
+      (prevTransition = action(prevState, payload)),
+        handleActionReturnValue(actionQueue, node, prevTransition);
+    } catch (error$40) {
+      onActionError(actionQueue, node, error$40);
+    }
+}
+function handleActionReturnValue(actionQueue, node, returnValue) {
+  null !== returnValue &&
+  "object" === typeof returnValue &&
+  "function" === typeof returnValue.then
+    ? returnValue.then(
+        function (nextState) {
+          onActionSuccess(actionQueue, node, nextState);
+        },
+        function (error) {
+          return onActionError(actionQueue, node, error);
+        }
+      )
+    : onActionSuccess(actionQueue, node, returnValue);
+}
+function onActionSuccess(actionQueue, actionNode, nextState) {
+  actionNode.status = "fulfilled";
+  actionNode.value = nextState;
+  notifyActionListeners(actionNode);
+  actionQueue.state = nextState;
+  actionNode = actionQueue.pending;
+  null !== actionNode &&
+    ((nextState = actionNode.next),
+    nextState === actionNode
+      ? (actionQueue.pending = null)
+      : ((nextState = nextState.next),
+        (actionNode.next = nextState),
+        runActionStateAction(actionQueue, nextState)));
+}
+function onActionError(actionQueue, actionNode, error) {
+  var last = actionQueue.pending;
+  actionQueue.pending = null;
+  if (null !== last) {
+    last = last.next;
+    do
+      (actionNode.status = "rejected"),
+        (actionNode.reason = error),
+        notifyActionListeners(actionNode),
+        (actionNode = actionNode.next);
+    while (actionNode !== last);
+  }
+  actionQueue.action = null;
+}
+function notifyActionListeners(actionNode) {
+  actionNode = actionNode.listeners;
+  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();
+}
+function actionStateReducer(oldState, newState) {
+  return newState;
+}
+function mountActionState(action, initialStateProp) {
+  if (isHydrating) {
+    var ssrFormState = workInProgressRoot.formState;
+    if (null !== ssrFormState) {
+      a: {
+        var JSCompiler_inline_result = currentlyRenderingFiber;
+        if (isHydrating) {
+          if (nextHydratableInstance) {
+            b: {
+              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;
+              for (
+                var inRootOrSingleton = rootOrSingletonContext;
+                8 !== JSCompiler_inline_result$jscomp$0.nodeType;
+
+              ) {
+                if (!inRootOrSingleton) {
+                  JSCompiler_inline_result$jscomp$0 = null;
+                  break b;
+                }
+                JSCompiler_inline_result$jscomp$0 = getNextHydratable(
+                  JSCompiler_inline_result$jscomp$0.nextSibling
+                );
+                if (null === JSCompiler_inline_result$jscomp$0) {
+                  JSCompiler_inline_result$jscomp$0 = null;
+                  break b;
+                }
+              }
+              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;
+              JSCompiler_inline_result$jscomp$0 =
+                "F!" === inRootOrSingleton || "F" === inRootOrSingleton
+                  ? JSCompiler_inline_result$jscomp$0
+                  : null;
+            }
+            if (JSCompiler_inline_result$jscomp$0) {
+              nextHydratableInstance = getNextHydratable(
+                JSCompiler_inline_result$jscomp$0.nextSibling
+              );
+              JSCompiler_inline_result =
+                "F!" === JSCompiler_inline_result$jscomp$0.data;
+              break a;
+            }
+          }
+          throwOnHydrationMismatch(JSCompiler_inline_result);
+        }
+        JSCompiler_inline_result = !1;
+      }
+      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);
+    }
+  }
+  ssrFormState = mountWorkInProgressHook();
+  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;
+  JSCompiler_inline_result = {
+    pending: null,
+    lanes: 0,
+    dispatch: null,
+    lastRenderedReducer: actionStateReducer,
+    lastRenderedState: initialStateProp
+  };
+  ssrFormState.queue = JSCompiler_inline_result;
+  ssrFormState = dispatchSetState.bind(
+    null,
+    currentlyRenderingFiber,
+    JSCompiler_inline_result
+  );
+  JSCompiler_inline_result.dispatch = ssrFormState;
+  JSCompiler_inline_result = mountStateImpl(!1);
+  inRootOrSingleton = dispatchOptimisticSetState.bind(
+    null,
+    currentlyRenderingFiber,
+    !1,
+    JSCompiler_inline_result.queue
+  );
+  JSCompiler_inline_result = mountWorkInProgressHook();
+  JSCompiler_inline_result$jscomp$0 = {
+    state: initialStateProp,
+    dispatch: null,
+    action: action,
+    pending: null
+  };
+  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;
+  ssrFormState = dispatchActionState.bind(
+    null,
+    currentlyRenderingFiber,
+    JSCompiler_inline_result$jscomp$0,
+    inRootOrSingleton,
+    ssrFormState
+  );
+  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;
+  JSCompiler_inline_result.memoizedState = action;
+  return [initialStateProp, ssrFormState, !1];
+}
+function updateActionState(action) {
+  var stateHook = updateWorkInProgressHook();
+  return updateActionStateImpl(stateHook, currentHook, action);
+}
+function updateActionStateImpl(stateHook, currentStateHook, action) {
+  currentStateHook = updateReducerImpl(
+    stateHook,
+    currentStateHook,
+    actionStateReducer
+  )[0];
+  stateHook = updateReducer(basicStateReducer)[0];
+  if (
+    "object" === typeof currentStateHook &&
+    null !== currentStateHook &&
+    "function" === typeof currentStateHook.then
+  )
+    try {
+      var state = useThenable(currentStateHook);
+    } catch (x) {
+      if (x === SuspenseException) throw SuspenseActionException;
+      throw x;
+    }
+  else state = currentStateHook;
+  currentStateHook = updateWorkInProgressHook();
+  var actionQueue = currentStateHook.queue,
+    dispatch = actionQueue.dispatch;
+  action !== currentStateHook.memoizedState &&
+    ((currentlyRenderingFiber.flags |= 2048),
+    pushSimpleEffect(
+      9,
+      createEffectInstance(),
+      actionStateActionEffect.bind(null, actionQueue, action),
+      null
+    ));
+  return [state, dispatch, stateHook];
+}
+function actionStateActionEffect(actionQueue, action) {
+  actionQueue.action = action;
+}
+function rerenderActionState(action) {
+  var stateHook = updateWorkInProgressHook(),
+    currentStateHook = currentHook;
+  if (null !== currentStateHook)
+    return updateActionStateImpl(stateHook, currentStateHook, action);
+  updateWorkInProgressHook();
+  stateHook = stateHook.memoizedState;
+  currentStateHook = updateWorkInProgressHook();
+  var dispatch = currentStateHook.queue.dispatch;
+  currentStateHook.memoizedState = action;
+  return [stateHook, dispatch, !1];
+}
+function pushSimpleEffect(tag, inst, create, createDeps) {
+  tag = { tag: tag, create: create, deps: createDeps, inst: inst, next: null };
+  inst = currentlyRenderingFiber.updateQueue;
+  null === inst &&
+    ((inst = createFunctionComponentUpdateQueue()),
+    (currentlyRenderingFiber.updateQueue = inst));
+  create = inst.lastEffect;
+  null === create
+    ? (inst.lastEffect = tag.next = tag)
+    : ((createDeps = create.next),
+      (create.next = tag),
+      (tag.next = createDeps),
+      (inst.lastEffect = tag));
+  return tag;
+}
+function createEffectInstance() {
+  return { destroy: void 0, resource: void 0 };
+}
+function updateRef() {
+  return updateWorkInProgressHook().memoizedState;
+}
+function mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {
+  var hook = mountWorkInProgressHook();
+  createDeps = void 0 === createDeps ? null : createDeps;
+  currentlyRenderingFiber.flags |= fiberFlags;
+  hook.memoizedState = pushSimpleEffect(
+    1 | hookFlags,
+    createEffectInstance(),
+    create,
+    createDeps
+  );
+}
+function updateEffectImpl(fiberFlags, hookFlags, create, deps) {
+  var hook = updateWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  var inst = hook.memoizedState.inst;
+  null !== currentHook &&
+  null !== deps &&
+  areHookInputsEqual(deps, currentHook.memoizedState.deps)
+    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))
+    : ((currentlyRenderingFiber.flags |= fiberFlags),
+      (hook.memoizedState = pushSimpleEffect(
+        1 | hookFlags,
+        inst,
+        create,
+        deps
+      )));
+}
+function mountEffect(create, createDeps) {
+  mountEffectImpl(8390656, 8, create, createDeps);
+}
+function updateEffect(create, createDeps) {
+  updateEffectImpl(2048, 8, create, createDeps);
+}
+function updateInsertionEffect(create, deps) {
+  return updateEffectImpl(4, 2, create, deps);
+}
+function updateLayoutEffect(create, deps) {
+  return updateEffectImpl(4, 4, create, deps);
+}
+function imperativeHandleEffect(create, ref) {
+  if ("function" === typeof ref) {
+    create = create();
+    var refCleanup = ref(create);
+    return function () {
+      "function" === typeof refCleanup ? refCleanup() : ref(null);
+    };
+  }
+  if (null !== ref && void 0 !== ref)
+    return (
+      (create = create()),
+      (ref.current = create),
+      function () {
+        ref.current = null;
+      }
+    );
+}
+function updateImperativeHandle(ref, create, deps) {
+  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;
+  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);
+}
+function mountDebugValue() {}
+function updateCallback(callback, deps) {
+  var hook = updateWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  var prevState = hook.memoizedState;
+  if (null !== deps && areHookInputsEqual(deps, prevState[1]))
+    return prevState[0];
+  hook.memoizedState = [callback, deps];
+  return callback;
+}
+function updateMemo(nextCreate, deps) {
+  var hook = updateWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  var prevState = hook.memoizedState;
+  if (null !== deps && areHookInputsEqual(deps, prevState[1]))
+    return prevState[0];
+  prevState = nextCreate();
+  if (shouldDoubleInvokeUserFnsInHooksDEV) {
+    setIsStrictModeForDevtools(!0);
+    try {
+      nextCreate();
+    } finally {
+      setIsStrictModeForDevtools(!1);
+    }
+  }
+  hook.memoizedState = [prevState, deps];
+  return prevState;
+}
+function mountDeferredValueImpl(hook, value, initialValue) {
+  if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))
+    return (hook.memoizedState = value);
+  hook.memoizedState = initialValue;
+  hook = requestDeferredLane();
+  currentlyRenderingFiber.lanes |= hook;
+  workInProgressRootSkippedLanes |= hook;
+  return initialValue;
+}
+function updateDeferredValueImpl(hook, prevValue, value, initialValue) {
+  if (objectIs(value, prevValue)) return value;
+  if (null !== currentTreeHiddenStackCursor.current)
+    return (
+      (hook = mountDeferredValueImpl(hook, value, initialValue)),
+      objectIs(hook, prevValue) || (didReceiveUpdate = !0),
+      hook
+    );
+  if (0 === (renderLanes & 42))
+    return (didReceiveUpdate = !0), (hook.memoizedState = value);
+  hook = requestDeferredLane();
+  currentlyRenderingFiber.lanes |= hook;
+  workInProgressRootSkippedLanes |= hook;
+  return prevValue;
+}
+function startTransition(fiber, queue, pendingState, finishedState, callback) {
+  var previousPriority = ReactDOMSharedInternals.p;
+  ReactDOMSharedInternals.p =
+    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;
+  var prevTransition = ReactSharedInternals.T,
+    currentTransition = {};
+  ReactSharedInternals.T = currentTransition;
+  dispatchOptimisticSetState(fiber, !1, queue, pendingState);
+  try {
+    var returnValue = callback(),
+      onStartTransitionFinish = ReactSharedInternals.S;
+    null !== onStartTransitionFinish &&
+      onStartTransitionFinish(currentTransition, returnValue);
+    if (
+      null !== returnValue &&
+      "object" === typeof returnValue &&
+      "function" === typeof returnValue.then
+    ) {
+      var thenableForFinishedState = chainThenableValue(
+        returnValue,
+        finishedState
+      );
+      dispatchSetStateInternal(
+        fiber,
+        queue,
+        thenableForFinishedState,
+        requestUpdateLane(fiber)
+      );
+    } else
+      dispatchSetStateInternal(
+        fiber,
+        queue,
+        finishedState,
+        requestUpdateLane(fiber)
+      );
+  } catch (error) {
+    dispatchSetStateInternal(
+      fiber,
+      queue,
+      { then: function () {}, status: "rejected", reason: error },
+      requestUpdateLane()
+    );
+  } finally {
+    (ReactDOMSharedInternals.p = previousPriority),
+      (ReactSharedInternals.T = prevTransition);
+  }
+}
+function noop$3() {}
+function startHostTransition(formFiber, pendingState, action, formData) {
+  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));
+  var queue = ensureFormComponentIsStateful(formFiber).queue;
+  startTransition(
+    formFiber,
+    queue,
+    pendingState,
+    sharedNotPendingObject,
+    null === action
+      ? noop$3
+      : function () {
+          requestFormReset$2(formFiber);
+          return action(formData);
+        }
+  );
+}
+function ensureFormComponentIsStateful(formFiber) {
+  var existingStateHook = formFiber.memoizedState;
+  if (null !== existingStateHook) return existingStateHook;
+  existingStateHook = {
+    memoizedState: sharedNotPendingObject,
+    baseState: sharedNotPendingObject,
+    baseQueue: null,
+    queue: {
+      pending: null,
+      lanes: 0,
+      dispatch: null,
+      lastRenderedReducer: basicStateReducer,
+      lastRenderedState: sharedNotPendingObject
+    },
+    next: null
+  };
+  var initialResetState = {};
+  existingStateHook.next = {
+    memoizedState: initialResetState,
+    baseState: initialResetState,
+    baseQueue: null,
+    queue: {
+      pending: null,
+      lanes: 0,
+      dispatch: null,
+      lastRenderedReducer: basicStateReducer,
+      lastRenderedState: initialResetState
+    },
+    next: null
+  };
+  formFiber.memoizedState = existingStateHook;
+  formFiber = formFiber.alternate;
+  null !== formFiber && (formFiber.memoizedState = existingStateHook);
+  return existingStateHook;
+}
+function requestFormReset$2(formFiber) {
+  var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;
+  dispatchSetStateInternal(formFiber, resetStateQueue, {}, requestUpdateLane());
+}
+function useHostTransitionStatus() {
+  return readContext(HostTransitionContext);
+}
+function updateId() {
+  return updateWorkInProgressHook().memoizedState;
+}
+function updateRefresh() {
+  return updateWorkInProgressHook().memoizedState;
+}
+function refreshCache(fiber) {
+  for (var provider = fiber.return; null !== provider; ) {
+    switch (provider.tag) {
+      case 24:
+      case 3:
+        var lane = requestUpdateLane();
+        fiber = createUpdate(lane);
+        var root$43 = enqueueUpdate(provider, fiber, lane);
+        null !== root$43 &&
+          (scheduleUpdateOnFiber(root$43, provider, lane),
+          entangleTransitions(root$43, provider, lane));
+        provider = { cache: createCache() };
+        fiber.payload = provider;
+        return;
+    }
+    provider = provider.return;
+  }
+}
+function dispatchReducerAction(fiber, queue, action) {
+  var lane = requestUpdateLane();
+  action = {
+    lane: lane,
+    revertLane: 0,
+    action: action,
+    hasEagerState: !1,
+    eagerState: null,
+    next: null
+  };
+  isRenderPhaseUpdate(fiber)
+    ? enqueueRenderPhaseUpdate(queue, action)
+    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),
+      null !== action &&
+        (scheduleUpdateOnFiber(action, fiber, lane),
+        entangleTransitionUpdate(action, queue, lane)));
+  markStateUpdateScheduled(fiber, lane);
+}
+function dispatchSetState(fiber, queue, action) {
+  var lane = requestUpdateLane();
+  dispatchSetStateInternal(fiber, queue, action, lane);
+  markStateUpdateScheduled(fiber, lane);
+}
+function dispatchSetStateInternal(fiber, queue, action, lane) {
+  var update = {
+    lane: lane,
+    revertLane: 0,
+    action: action,
+    hasEagerState: !1,
+    eagerState: null,
+    next: null
+  };
+  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);
+  else {
+    var alternate = fiber.alternate;
+    if (
+      0 === fiber.lanes &&
+      (null === alternate || 0 === alternate.lanes) &&
+      ((alternate = queue.lastRenderedReducer), null !== alternate)
+    )
+      try {
+        var currentState = queue.lastRenderedState,
+          eagerState = alternate(currentState, action);
+        update.hasEagerState = !0;
+        update.eagerState = eagerState;
+        if (objectIs(eagerState, currentState))
+          return (
+            enqueueUpdate$1(fiber, queue, update, 0),
+            null === workInProgressRoot && finishQueueingConcurrentUpdates(),
+            !1
+          );
+      } catch (error) {
+      } finally {
+      }
+    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);
+    if (null !== action)
+      return (
+        scheduleUpdateOnFiber(action, fiber, lane),
+        entangleTransitionUpdate(action, queue, lane),
+        !0
+      );
+  }
+  return !1;
+}
+function dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {
+  action = {
+    lane: 2,
+    revertLane: requestTransitionLane(),
+    action: action,
+    hasEagerState: !1,
+    eagerState: null,
+    next: null
+  };
+  if (isRenderPhaseUpdate(fiber)) {
+    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));
+  } else
+    (throwIfDuringRender = enqueueConcurrentHookUpdate(
+      fiber,
+      queue,
+      action,
+      2
+    )),
+      null !== throwIfDuringRender &&
+        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);
+  markStateUpdateScheduled(fiber, 2);
+}
+function isRenderPhaseUpdate(fiber) {
+  var alternate = fiber.alternate;
+  return (
+    fiber === currentlyRenderingFiber ||
+    (null !== alternate && alternate === currentlyRenderingFiber)
+  );
+}
+function enqueueRenderPhaseUpdate(queue, update) {
+  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =
+    !0;
+  var pending = queue.pending;
+  null === pending
+    ? (update.next = update)
+    : ((update.next = pending.next), (pending.next = update));
+  queue.pending = update;
+}
+function entangleTransitionUpdate(root, queue, lane) {
+  if (0 !== (lane & 4194048)) {
+    var queueLanes = queue.lanes;
+    queueLanes &= root.pendingLanes;
+    lane |= queueLanes;
+    queue.lanes = lane;
+    markRootEntangled(root, lane);
+  }
+}
+var ContextOnlyDispatcher = {
+    readContext: readContext,
+    use: use,
+    useCallback: throwInvalidHookError,
+    useContext: throwInvalidHookError,
+    useEffect: throwInvalidHookError,
+    useImperativeHandle: throwInvalidHookError,
+    useLayoutEffect: throwInvalidHookError,
+    useInsertionEffect: throwInvalidHookError,
+    useMemo: throwInvalidHookError,
+    useReducer: throwInvalidHookError,
+    useRef: throwInvalidHookError,
+    useState: throwInvalidHookError,
+    useDebugValue: throwInvalidHookError,
+    useDeferredValue: throwInvalidHookError,
+    useTransition: throwInvalidHookError,
+    useSyncExternalStore: throwInvalidHookError,
+    useId: throwInvalidHookError,
+    useHostTransitionStatus: throwInvalidHookError,
+    useFormState: throwInvalidHookError,
+    useActionState: throwInvalidHookError,
+    useOptimistic: throwInvalidHookError,
+    useMemoCache: throwInvalidHookError,
+    useCacheRefresh: throwInvalidHookError
+  },
+  HooksDispatcherOnMount = {
+    readContext: readContext,
+    use: use,
+    useCallback: function (callback, deps) {
+      mountWorkInProgressHook().memoizedState = [
+        callback,
+        void 0 === deps ? null : deps
+      ];
+      return callback;
+    },
+    useContext: readContext,
+    useEffect: mountEffect,
+    useImperativeHandle: function (ref, create, deps) {
+      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;
+      mountEffectImpl(
+        4194308,
+        4,
+        imperativeHandleEffect.bind(null, create, ref),
+        deps
+      );
+    },
+    useLayoutEffect: function (create, deps) {
+      return mountEffectImpl(4194308, 4, create, deps);
+    },
+    useInsertionEffect: function (create, deps) {
+      mountEffectImpl(4, 2, create, deps);
+    },
+    useMemo: function (nextCreate, deps) {
+      var hook = mountWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      var nextValue = nextCreate();
+      if (shouldDoubleInvokeUserFnsInHooksDEV) {
+        setIsStrictModeForDevtools(!0);
+        try {
+          nextCreate();
+        } finally {
+          setIsStrictModeForDevtools(!1);
+        }
+      }
+      hook.memoizedState = [nextValue, deps];
+      return nextValue;
+    },
+    useReducer: function (reducer, initialArg, init) {
+      var hook = mountWorkInProgressHook();
+      if (void 0 !== init) {
+        var initialState = init(initialArg);
+        if (shouldDoubleInvokeUserFnsInHooksDEV) {
+          setIsStrictModeForDevtools(!0);
+          try {
+            init(initialArg);
+          } finally {
+            setIsStrictModeForDevtools(!1);
+          }
+        }
+      } else initialState = initialArg;
+      hook.memoizedState = hook.baseState = initialState;
+      reducer = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: reducer,
+        lastRenderedState: initialState
+      };
+      hook.queue = reducer;
+      reducer = reducer.dispatch = dispatchReducerAction.bind(
+        null,
+        currentlyRenderingFiber,
+        reducer
+      );
+      return [hook.memoizedState, reducer];
+    },
+    useRef: function (initialValue) {
+      var hook = mountWorkInProgressHook();
+      initialValue = { current: initialValue };
+      return (hook.memoizedState = initialValue);
+    },
+    useState: function (initialState) {
+      initialState = mountStateImpl(initialState);
+      var queue = initialState.queue,
+        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);
+      queue.dispatch = dispatch;
+      return [initialState.memoizedState, dispatch];
+    },
+    useDebugValue: mountDebugValue,
+    useDeferredValue: function (value, initialValue) {
+      var hook = mountWorkInProgressHook();
+      return mountDeferredValueImpl(hook, value, initialValue);
+    },
+    useTransition: function () {
+      var stateHook = mountStateImpl(!1);
+      stateHook = startTransition.bind(
+        null,
+        currentlyRenderingFiber,
+        stateHook.queue,
+        !0,
+        !1
+      );
+      mountWorkInProgressHook().memoizedState = stateHook;
+      return [!1, stateHook];
+    },
+    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
+      var fiber = currentlyRenderingFiber,
+        hook = mountWorkInProgressHook();
+      if (isHydrating) {
+        if (void 0 === getServerSnapshot)
+          throw Error(formatProdErrorMessage(407));
+        getServerSnapshot = getServerSnapshot();
+      } else {
+        getServerSnapshot = getSnapshot();
+        if (null === workInProgressRoot)
+          throw Error(formatProdErrorMessage(349));
+        0 !== (workInProgressRootRenderLanes & 124) ||
+          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);
+      }
+      hook.memoizedState = getServerSnapshot;
+      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };
+      hook.queue = inst;
+      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [
+        subscribe
+      ]);
+      fiber.flags |= 2048;
+      pushSimpleEffect(
+        9,
+        createEffectInstance(),
+        updateStoreInstance.bind(
+          null,
+          fiber,
+          inst,
+          getServerSnapshot,
+          getSnapshot
+        ),
+        null
+      );
+      return getServerSnapshot;
+    },
+    useId: function () {
+      var hook = mountWorkInProgressHook(),
+        identifierPrefix = workInProgressRoot.identifierPrefix;
+      if (isHydrating) {
+        var JSCompiler_inline_result = treeContextOverflow;
+        var idWithLeadingBit = treeContextId;
+        JSCompiler_inline_result =
+          (
+            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))
+          ).toString(32) + JSCompiler_inline_result;
+        identifierPrefix =
+          "\u00ab" + identifierPrefix + "R" + JSCompiler_inline_result;
+        JSCompiler_inline_result = localIdCounter++;
+        0 < JSCompiler_inline_result &&
+          (identifierPrefix += "H" + JSCompiler_inline_result.toString(32));
+        identifierPrefix += "\u00bb";
+      } else
+        (JSCompiler_inline_result = globalClientIdCounter++),
+          (identifierPrefix =
+            "\u00ab" +
+            identifierPrefix +
+            "r" +
+            JSCompiler_inline_result.toString(32) +
+            "\u00bb");
+      return (hook.memoizedState = identifierPrefix);
+    },
+    useHostTransitionStatus: useHostTransitionStatus,
+    useFormState: mountActionState,
+    useActionState: mountActionState,
+    useOptimistic: function (passthrough) {
+      var hook = mountWorkInProgressHook();
+      hook.memoizedState = hook.baseState = passthrough;
+      var queue = {
+        pending: null,
+        lanes: 0,
+        dispatch: null,
+        lastRenderedReducer: null,
+        lastRenderedState: null
+      };
+      hook.queue = queue;
+      hook = dispatchOptimisticSetState.bind(
+        null,
+        currentlyRenderingFiber,
+        !0,
+        queue
+      );
+      queue.dispatch = hook;
+      return [passthrough, hook];
+    },
+    useMemoCache: useMemoCache,
+    useCacheRefresh: function () {
+      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(
+        null,
+        currentlyRenderingFiber
+      ));
+    }
+  },
+  HooksDispatcherOnUpdate = {
+    readContext: readContext,
+    use: use,
+    useCallback: updateCallback,
+    useContext: readContext,
+    useEffect: updateEffect,
+    useImperativeHandle: updateImperativeHandle,
+    useInsertionEffect: updateInsertionEffect,
+    useLayoutEffect: updateLayoutEffect,
+    useMemo: updateMemo,
+    useReducer: updateReducer,
+    useRef: updateRef,
+    useState: function () {
+      return updateReducer(basicStateReducer);
+    },
+    useDebugValue: mountDebugValue,
+    useDeferredValue: function (value, initialValue) {
+      var hook = updateWorkInProgressHook();
+      return updateDeferredValueImpl(
+        hook,
+        currentHook.memoizedState,
+        value,
+        initialValue
+      );
+    },
+    useTransition: function () {
+      var booleanOrThenable = updateReducer(basicStateReducer)[0],
+        start = updateWorkInProgressHook().memoizedState;
+      return [
+        "boolean" === typeof booleanOrThenable
+          ? booleanOrThenable
+          : useThenable(booleanOrThenable),
+        start
+      ];
+    },
+    useSyncExternalStore: updateSyncExternalStore,
+    useId: updateId,
+    useHostTransitionStatus: useHostTransitionStatus,
+    useFormState: updateActionState,
+    useActionState: updateActionState,
+    useOptimistic: function (passthrough, reducer) {
+      var hook = updateWorkInProgressHook();
+      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);
+    },
+    useMemoCache: useMemoCache,
+    useCacheRefresh: updateRefresh
+  },
+  HooksDispatcherOnRerender = {
+    readContext: readContext,
+    use: use,
+    useCallback: updateCallback,
+    useContext: readContext,
+    useEffect: updateEffect,
+    useImperativeHandle: updateImperativeHandle,
+    useInsertionEffect: updateInsertionEffect,
+    useLayoutEffect: updateLayoutEffect,
+    useMemo: updateMemo,
+    useReducer: rerenderReducer,
+    useRef: updateRef,
+    useState: function () {
+      return rerenderReducer(basicStateReducer);
+    },
+    useDebugValue: mountDebugValue,
+    useDeferredValue: function (value, initialValue) {
+      var hook = updateWorkInProgressHook();
+      return null === currentHook
+        ? mountDeferredValueImpl(hook, value, initialValue)
+        : updateDeferredValueImpl(
+            hook,
+            currentHook.memoizedState,
+            value,
+            initialValue
+          );
+    },
+    useTransition: function () {
+      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],
+        start = updateWorkInProgressHook().memoizedState;
+      return [
+        "boolean" === typeof booleanOrThenable
+          ? booleanOrThenable
+          : useThenable(booleanOrThenable),
+        start
+      ];
+    },
+    useSyncExternalStore: updateSyncExternalStore,
+    useId: updateId,
+    useHostTransitionStatus: useHostTransitionStatus,
+    useFormState: rerenderActionState,
+    useActionState: rerenderActionState,
+    useOptimistic: function (passthrough, reducer) {
+      var hook = updateWorkInProgressHook();
+      if (null !== currentHook)
+        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);
+      hook.baseState = passthrough;
+      return [passthrough, hook.queue.dispatch];
+    },
+    useMemoCache: useMemoCache,
+    useCacheRefresh: updateRefresh
+  },
+  thenableState = null,
+  thenableIndexCounter = 0;
+function unwrapThenable(thenable) {
+  var index = thenableIndexCounter;
+  thenableIndexCounter += 1;
+  null === thenableState && (thenableState = []);
+  return trackUsedThenable(thenableState, thenable, index);
+}
+function coerceRef(workInProgress, element) {
+  element = element.props.ref;
+  workInProgress.ref = void 0 !== element ? element : null;
+}
+function throwOnInvalidObjectType(returnFiber, newChild) {
+  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)
+    throw Error(formatProdErrorMessage(525));
+  returnFiber = Object.prototype.toString.call(newChild);
+  throw Error(
+    formatProdErrorMessage(
+      31,
+      "[object Object]" === returnFiber
+        ? "object with keys {" + Object.keys(newChild).join(", ") + "}"
+        : returnFiber
+    )
+  );
+}
+function resolveLazy(lazyType) {
+  var init = lazyType._init;
+  return init(lazyType._payload);
+}
+function createChildReconciler(shouldTrackSideEffects) {
+  function deleteChild(returnFiber, childToDelete) {
+    if (shouldTrackSideEffects) {
+      var deletions = returnFiber.deletions;
+      null === deletions
+        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))
+        : deletions.push(childToDelete);
+    }
+  }
+  function deleteRemainingChildren(returnFiber, currentFirstChild) {
+    if (!shouldTrackSideEffects) return null;
+    for (; null !== currentFirstChild; )
+      deleteChild(returnFiber, currentFirstChild),
+        (currentFirstChild = currentFirstChild.sibling);
+    return null;
+  }
+  function mapRemainingChildren(currentFirstChild) {
+    for (var existingChildren = new Map(); null !== currentFirstChild; )
+      null !== currentFirstChild.key
+        ? existingChildren.set(currentFirstChild.key, currentFirstChild)
+        : existingChildren.set(currentFirstChild.index, currentFirstChild),
+        (currentFirstChild = currentFirstChild.sibling);
+    return existingChildren;
+  }
+  function useFiber(fiber, pendingProps) {
+    fiber = createWorkInProgress(fiber, pendingProps);
+    fiber.index = 0;
+    fiber.sibling = null;
+    return fiber;
+  }
+  function placeChild(newFiber, lastPlacedIndex, newIndex) {
+    newFiber.index = newIndex;
+    if (!shouldTrackSideEffects)
+      return (newFiber.flags |= 1048576), lastPlacedIndex;
+    newIndex = newFiber.alternate;
+    if (null !== newIndex)
+      return (
+        (newIndex = newIndex.index),
+        newIndex < lastPlacedIndex
+          ? ((newFiber.flags |= 67108866), lastPlacedIndex)
+          : newIndex
+      );
+    newFiber.flags |= 67108866;
+    return lastPlacedIndex;
+  }
+  function placeSingleChild(newFiber) {
+    shouldTrackSideEffects &&
+      null === newFiber.alternate &&
+      (newFiber.flags |= 67108866);
+    return newFiber;
+  }
+  function updateTextNode(returnFiber, current, textContent, lanes) {
+    if (null === current || 6 !== current.tag)
+      return (
+        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),
+        (current.return = returnFiber),
+        current
+      );
+    current = useFiber(current, textContent);
+    current.return = returnFiber;
+    return current;
+  }
+  function updateElement(returnFiber, current, element, lanes) {
+    var elementType = element.type;
+    if (elementType === REACT_FRAGMENT_TYPE)
+      return updateFragment(
+        returnFiber,
+        current,
+        element.props.children,
+        lanes,
+        element.key
+      );
+    if (
+      null !== current &&
+      (current.elementType === elementType ||
+        ("object" === typeof elementType &&
+          null !== elementType &&
+          elementType.$$typeof === REACT_LAZY_TYPE &&
+          resolveLazy(elementType) === current.type))
+    )
+      return (
+        (current = useFiber(current, element.props)),
+        coerceRef(current, element),
+        (current.return = returnFiber),
+        current
+      );
+    current = createFiberFromTypeAndProps(
+      element.type,
+      element.key,
+      element.props,
+      null,
+      returnFiber.mode,
+      lanes
+    );
+    coerceRef(current, element);
+    current.return = returnFiber;
+    return current;
+  }
+  function updatePortal(returnFiber, current, portal, lanes) {
+    if (
+      null === current ||
+      4 !== current.tag ||
+      current.stateNode.containerInfo !== portal.containerInfo ||
+      current.stateNode.implementation !== portal.implementation
+    )
+      return (
+        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),
+        (current.return = returnFiber),
+        current
+      );
+    current = useFiber(current, portal.children || []);
+    current.return = returnFiber;
+    return current;
+  }
+  function updateFragment(returnFiber, current, fragment, lanes, key) {
+    if (null === current || 7 !== current.tag)
+      return (
+        (current = createFiberFromFragment(
+          fragment,
+          returnFiber.mode,
+          lanes,
+          key
+        )),
+        (current.return = returnFiber),
+        current
+      );
+    current = useFiber(current, fragment);
+    current.return = returnFiber;
+    return current;
+  }
+  function createChild(returnFiber, newChild, lanes) {
+    if (
+      ("string" === typeof newChild && "" !== newChild) ||
+      "number" === typeof newChild ||
+      "bigint" === typeof newChild
+    )
+      return (
+        (newChild = createFiberFromText(
+          "" + newChild,
+          returnFiber.mode,
+          lanes
+        )),
+        (newChild.return = returnFiber),
+        newChild
+      );
+    if ("object" === typeof newChild && null !== newChild) {
+      switch (newChild.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          return (
+            (lanes = createFiberFromTypeAndProps(
+              newChild.type,
+              newChild.key,
+              newChild.props,
+              null,
+              returnFiber.mode,
+              lanes
+            )),
+            coerceRef(lanes, newChild),
+            (lanes.return = returnFiber),
+            lanes
+          );
+        case REACT_PORTAL_TYPE:
+          return (
+            (newChild = createFiberFromPortal(
+              newChild,
+              returnFiber.mode,
+              lanes
+            )),
+            (newChild.return = returnFiber),
+            newChild
+          );
+        case REACT_LAZY_TYPE:
+          var init = newChild._init;
+          newChild = init(newChild._payload);
+          return createChild(returnFiber, newChild, lanes);
+      }
+      if (isArrayImpl(newChild) || getIteratorFn(newChild))
+        return (
+          (newChild = createFiberFromFragment(
+            newChild,
+            returnFiber.mode,
+            lanes,
+            null
+          )),
+          (newChild.return = returnFiber),
+          newChild
+        );
+      if ("function" === typeof newChild.then)
+        return createChild(returnFiber, unwrapThenable(newChild), lanes);
+      if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+        return createChild(
+          returnFiber,
+          readContextDuringReconciliation(returnFiber, newChild),
+          lanes
+        );
+      throwOnInvalidObjectType(returnFiber, newChild);
+    }
+    return null;
+  }
+  function updateSlot(returnFiber, oldFiber, newChild, lanes) {
+    var key = null !== oldFiber ? oldFiber.key : null;
+    if (
+      ("string" === typeof newChild && "" !== newChild) ||
+      "number" === typeof newChild ||
+      "bigint" === typeof newChild
+    )
+      return null !== key
+        ? null
+        : updateTextNode(returnFiber, oldFiber, "" + newChild, lanes);
+    if ("object" === typeof newChild && null !== newChild) {
+      switch (newChild.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          return newChild.key === key
+            ? updateElement(returnFiber, oldFiber, newChild, lanes)
+            : null;
+        case REACT_PORTAL_TYPE:
+          return newChild.key === key
+            ? updatePortal(returnFiber, oldFiber, newChild, lanes)
+            : null;
+        case REACT_LAZY_TYPE:
+          return (
+            (key = newChild._init),
+            (newChild = key(newChild._payload)),
+            updateSlot(returnFiber, oldFiber, newChild, lanes)
+          );
+      }
+      if (isArrayImpl(newChild) || getIteratorFn(newChild))
+        return null !== key
+          ? null
+          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);
+      if ("function" === typeof newChild.then)
+        return updateSlot(
+          returnFiber,
+          oldFiber,
+          unwrapThenable(newChild),
+          lanes
+        );
+      if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+        return updateSlot(
+          returnFiber,
+          oldFiber,
+          readContextDuringReconciliation(returnFiber, newChild),
+          lanes
+        );
+      throwOnInvalidObjectType(returnFiber, newChild);
+    }
+    return null;
+  }
+  function updateFromMap(
+    existingChildren,
+    returnFiber,
+    newIdx,
+    newChild,
+    lanes
+  ) {
+    if (
+      ("string" === typeof newChild && "" !== newChild) ||
+      "number" === typeof newChild ||
+      "bigint" === typeof newChild
+    )
+      return (
+        (existingChildren = existingChildren.get(newIdx) || null),
+        updateTextNode(returnFiber, existingChildren, "" + newChild, lanes)
+      );
+    if ("object" === typeof newChild && null !== newChild) {
+      switch (newChild.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          return (
+            (existingChildren =
+              existingChildren.get(
+                null === newChild.key ? newIdx : newChild.key
+              ) || null),
+            updateElement(returnFiber, existingChildren, newChild, lanes)
+          );
+        case REACT_PORTAL_TYPE:
+          return (
+            (existingChildren =
+              existingChildren.get(
+                null === newChild.key ? newIdx : newChild.key
+              ) || null),
+            updatePortal(returnFiber, existingChildren, newChild, lanes)
+          );
+        case REACT_LAZY_TYPE:
+          var init = newChild._init;
+          newChild = init(newChild._payload);
+          return updateFromMap(
+            existingChildren,
+            returnFiber,
+            newIdx,
+            newChild,
+            lanes
+          );
+      }
+      if (isArrayImpl(newChild) || getIteratorFn(newChild))
+        return (
+          (existingChildren = existingChildren.get(newIdx) || null),
+          updateFragment(returnFiber, existingChildren, newChild, lanes, null)
+        );
+      if ("function" === typeof newChild.then)
+        return updateFromMap(
+          existingChildren,
+          returnFiber,
+          newIdx,
+          unwrapThenable(newChild),
+          lanes
+        );
+      if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+        return updateFromMap(
+          existingChildren,
+          returnFiber,
+          newIdx,
+          readContextDuringReconciliation(returnFiber, newChild),
+          lanes
+        );
+      throwOnInvalidObjectType(returnFiber, newChild);
+    }
+    return null;
+  }
+  function reconcileChildrenArray(
+    returnFiber,
+    currentFirstChild,
+    newChildren,
+    lanes
+  ) {
+    for (
+      var resultingFirstChild = null,
+        previousNewFiber = null,
+        oldFiber = currentFirstChild,
+        newIdx = (currentFirstChild = 0),
+        nextOldFiber = null;
+      null !== oldFiber && newIdx < newChildren.length;
+      newIdx++
+    ) {
+      oldFiber.index > newIdx
+        ? ((nextOldFiber = oldFiber), (oldFiber = null))
+        : (nextOldFiber = oldFiber.sibling);
+      var newFiber = updateSlot(
+        returnFiber,
+        oldFiber,
+        newChildren[newIdx],
+        lanes
+      );
+      if (null === newFiber) {
+        null === oldFiber && (oldFiber = nextOldFiber);
+        break;
+      }
+      shouldTrackSideEffects &&
+        oldFiber &&
+        null === newFiber.alternate &&
+        deleteChild(returnFiber, oldFiber);
+      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);
+      null === previousNewFiber
+        ? (resultingFirstChild = newFiber)
+        : (previousNewFiber.sibling = newFiber);
+      previousNewFiber = newFiber;
+      oldFiber = nextOldFiber;
+    }
+    if (newIdx === newChildren.length)
+      return (
+        deleteRemainingChildren(returnFiber, oldFiber),
+        isHydrating && pushTreeFork(returnFiber, newIdx),
+        resultingFirstChild
+      );
+    if (null === oldFiber) {
+      for (; newIdx < newChildren.length; newIdx++)
+        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),
+          null !== oldFiber &&
+            ((currentFirstChild = placeChild(
+              oldFiber,
+              currentFirstChild,
+              newIdx
+            )),
+            null === previousNewFiber
+              ? (resultingFirstChild = oldFiber)
+              : (previousNewFiber.sibling = oldFiber),
+            (previousNewFiber = oldFiber));
+      isHydrating && pushTreeFork(returnFiber, newIdx);
+      return resultingFirstChild;
+    }
+    for (
+      oldFiber = mapRemainingChildren(oldFiber);
+      newIdx < newChildren.length;
+      newIdx++
+    )
+      (nextOldFiber = updateFromMap(
+        oldFiber,
+        returnFiber,
+        newIdx,
+        newChildren[newIdx],
+        lanes
+      )),
+        null !== nextOldFiber &&
+          (shouldTrackSideEffects &&
+            null !== nextOldFiber.alternate &&
+            oldFiber.delete(
+              null === nextOldFiber.key ? newIdx : nextOldFiber.key
+            ),
+          (currentFirstChild = placeChild(
+            nextOldFiber,
+            currentFirstChild,
+            newIdx
+          )),
+          null === previousNewFiber
+            ? (resultingFirstChild = nextOldFiber)
+            : (previousNewFiber.sibling = nextOldFiber),
+          (previousNewFiber = nextOldFiber));
+    shouldTrackSideEffects &&
+      oldFiber.forEach(function (child) {
+        return deleteChild(returnFiber, child);
+      });
+    isHydrating && pushTreeFork(returnFiber, newIdx);
+    return resultingFirstChild;
+  }
+  function reconcileChildrenIterator(
+    returnFiber,
+    currentFirstChild,
+    newChildren,
+    lanes
+  ) {
+    if (null == newChildren) throw Error(formatProdErrorMessage(151));
+    for (
+      var resultingFirstChild = null,
+        previousNewFiber = null,
+        oldFiber = currentFirstChild,
+        newIdx = (currentFirstChild = 0),
+        nextOldFiber = null,
+        step = newChildren.next();
+      null !== oldFiber && !step.done;
+      newIdx++, step = newChildren.next()
+    ) {
+      oldFiber.index > newIdx
+        ? ((nextOldFiber = oldFiber), (oldFiber = null))
+        : (nextOldFiber = oldFiber.sibling);
+      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);
+      if (null === newFiber) {
+        null === oldFiber && (oldFiber = nextOldFiber);
+        break;
+      }
+      shouldTrackSideEffects &&
+        oldFiber &&
+        null === newFiber.alternate &&
+        deleteChild(returnFiber, oldFiber);
+      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);
+      null === previousNewFiber
+        ? (resultingFirstChild = newFiber)
+        : (previousNewFiber.sibling = newFiber);
+      previousNewFiber = newFiber;
+      oldFiber = nextOldFiber;
+    }
+    if (step.done)
+      return (
+        deleteRemainingChildren(returnFiber, oldFiber),
+        isHydrating && pushTreeFork(returnFiber, newIdx),
+        resultingFirstChild
+      );
+    if (null === oldFiber) {
+      for (; !step.done; newIdx++, step = newChildren.next())
+        (step = createChild(returnFiber, step.value, lanes)),
+          null !== step &&
+            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),
+            null === previousNewFiber
+              ? (resultingFirstChild = step)
+              : (previousNewFiber.sibling = step),
+            (previousNewFiber = step));
+      isHydrating && pushTreeFork(returnFiber, newIdx);
+      return resultingFirstChild;
+    }
+    for (
+      oldFiber = mapRemainingChildren(oldFiber);
+      !step.done;
+      newIdx++, step = newChildren.next()
+    )
+      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),
+        null !== step &&
+          (shouldTrackSideEffects &&
+            null !== step.alternate &&
+            oldFiber.delete(null === step.key ? newIdx : step.key),
+          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),
+          null === previousNewFiber
+            ? (resultingFirstChild = step)
+            : (previousNewFiber.sibling = step),
+          (previousNewFiber = step));
+    shouldTrackSideEffects &&
+      oldFiber.forEach(function (child) {
+        return deleteChild(returnFiber, child);
+      });
+    isHydrating && pushTreeFork(returnFiber, newIdx);
+    return resultingFirstChild;
+  }
+  function reconcileChildFibersImpl(
+    returnFiber,
+    currentFirstChild,
+    newChild,
+    lanes
+  ) {
+    "object" === typeof newChild &&
+      null !== newChild &&
+      newChild.type === REACT_FRAGMENT_TYPE &&
+      null === newChild.key &&
+      (newChild = newChild.props.children);
+    if ("object" === typeof newChild && null !== newChild) {
+      switch (newChild.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          a: {
+            for (var key = newChild.key; null !== currentFirstChild; ) {
+              if (currentFirstChild.key === key) {
+                key = newChild.type;
+                if (key === REACT_FRAGMENT_TYPE) {
+                  if (7 === currentFirstChild.tag) {
+                    deleteRemainingChildren(
+                      returnFiber,
+                      currentFirstChild.sibling
+                    );
+                    lanes = useFiber(
+                      currentFirstChild,
+                      newChild.props.children
+                    );
+                    lanes.return = returnFiber;
+                    returnFiber = lanes;
+                    break a;
+                  }
+                } else if (
+                  currentFirstChild.elementType === key ||
+                  ("object" === typeof key &&
+                    null !== key &&
+                    key.$$typeof === REACT_LAZY_TYPE &&
+                    resolveLazy(key) === currentFirstChild.type)
+                ) {
+                  deleteRemainingChildren(
+                    returnFiber,
+                    currentFirstChild.sibling
+                  );
+                  lanes = useFiber(currentFirstChild, newChild.props);
+                  coerceRef(lanes, newChild);
+                  lanes.return = returnFiber;
+                  returnFiber = lanes;
+                  break a;
+                }
+                deleteRemainingChildren(returnFiber, currentFirstChild);
+                break;
+              } else deleteChild(returnFiber, currentFirstChild);
+              currentFirstChild = currentFirstChild.sibling;
+            }
+            newChild.type === REACT_FRAGMENT_TYPE
+              ? ((lanes = createFiberFromFragment(
+                  newChild.props.children,
+                  returnFiber.mode,
+                  lanes,
+                  newChild.key
+                )),
+                (lanes.return = returnFiber),
+                (returnFiber = lanes))
+              : ((lanes = createFiberFromTypeAndProps(
+                  newChild.type,
+                  newChild.key,
+                  newChild.props,
+                  null,
+                  returnFiber.mode,
+                  lanes
+                )),
+                coerceRef(lanes, newChild),
+                (lanes.return = returnFiber),
+                (returnFiber = lanes));
+          }
+          return placeSingleChild(returnFiber);
+        case REACT_PORTAL_TYPE:
+          a: {
+            for (key = newChild.key; null !== currentFirstChild; ) {
+              if (currentFirstChild.key === key)
+                if (
+                  4 === currentFirstChild.tag &&
+                  currentFirstChild.stateNode.containerInfo ===
+                    newChild.containerInfo &&
+                  currentFirstChild.stateNode.implementation ===
+                    newChild.implementation
+                ) {
+                  deleteRemainingChildren(
+                    returnFiber,
+                    currentFirstChild.sibling
+                  );
+                  lanes = useFiber(currentFirstChild, newChild.children || []);
+                  lanes.return = returnFiber;
+                  returnFiber = lanes;
+                  break a;
+                } else {
+                  deleteRemainingChildren(returnFiber, currentFirstChild);
+                  break;
+                }
+              else deleteChild(returnFiber, currentFirstChild);
+              currentFirstChild = currentFirstChild.sibling;
+            }
+            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);
+            lanes.return = returnFiber;
+            returnFiber = lanes;
+          }
+          return placeSingleChild(returnFiber);
+        case REACT_LAZY_TYPE:
+          return (
+            (key = newChild._init),
+            (newChild = key(newChild._payload)),
+            reconcileChildFibersImpl(
+              returnFiber,
+              currentFirstChild,
+              newChild,
+              lanes
+            )
+          );
+      }
+      if (isArrayImpl(newChild))
+        return reconcileChildrenArray(
+          returnFiber,
+          currentFirstChild,
+          newChild,
+          lanes
+        );
+      if (getIteratorFn(newChild)) {
+        key = getIteratorFn(newChild);
+        if ("function" !== typeof key) throw Error(formatProdErrorMessage(150));
+        newChild = key.call(newChild);
+        return reconcileChildrenIterator(
+          returnFiber,
+          currentFirstChild,
+          newChild,
+          lanes
+        );
+      }
+      if ("function" === typeof newChild.then)
+        return reconcileChildFibersImpl(
+          returnFiber,
+          currentFirstChild,
+          unwrapThenable(newChild),
+          lanes
+        );
+      if (newChild.$$typeof === REACT_CONTEXT_TYPE)
+        return reconcileChildFibersImpl(
+          returnFiber,
+          currentFirstChild,
+          readContextDuringReconciliation(returnFiber, newChild),
+          lanes
+        );
+      throwOnInvalidObjectType(returnFiber, newChild);
+    }
+    return ("string" === typeof newChild && "" !== newChild) ||
+      "number" === typeof newChild ||
+      "bigint" === typeof newChild
+      ? ((newChild = "" + newChild),
+        null !== currentFirstChild && 6 === currentFirstChild.tag
+          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),
+            (lanes = useFiber(currentFirstChild, newChild)),
+            (lanes.return = returnFiber),
+            (returnFiber = lanes))
+          : (deleteRemainingChildren(returnFiber, currentFirstChild),
+            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),
+            (lanes.return = returnFiber),
+            (returnFiber = lanes)),
+        placeSingleChild(returnFiber))
+      : deleteRemainingChildren(returnFiber, currentFirstChild);
+  }
+  return function (returnFiber, currentFirstChild, newChild, lanes) {
+    try {
+      thenableIndexCounter = 0;
+      var firstChildFiber = reconcileChildFibersImpl(
+        returnFiber,
+        currentFirstChild,
+        newChild,
+        lanes
+      );
+      thenableState = null;
+      return firstChildFiber;
+    } catch (x) {
+      if (x === SuspenseException || x === SuspenseActionException) throw x;
+      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);
+      fiber.lanes = lanes;
+      fiber.return = returnFiber;
+      return fiber;
+    } finally {
+    }
+  };
+}
+var reconcileChildFibers = createChildReconciler(!0),
+  mountChildFibers = createChildReconciler(!1),
+  suspenseHandlerStackCursor = createCursor(null),
+  shellBoundary = null;
+function pushPrimaryTreeSuspenseHandler(handler) {
+  var current = handler.alternate;
+  push(suspenseStackCursor, suspenseStackCursor.current & 1);
+  push(suspenseHandlerStackCursor, handler);
+  null === shellBoundary &&
+    (null === current || null !== currentTreeHiddenStackCursor.current
+      ? (shellBoundary = handler)
+      : null !== current.memoizedState && (shellBoundary = handler));
+}
+function pushOffscreenSuspenseHandler(fiber) {
+  if (22 === fiber.tag) {
+    if (
+      (push(suspenseStackCursor, suspenseStackCursor.current),
+      push(suspenseHandlerStackCursor, fiber),
+      null === shellBoundary)
+    ) {
+      var current = fiber.alternate;
+      null !== current &&
+        null !== current.memoizedState &&
+        (shellBoundary = fiber);
+    }
+  } else reuseSuspenseHandlerOnStack(fiber);
+}
+function reuseSuspenseHandlerOnStack() {
+  push(suspenseStackCursor, suspenseStackCursor.current);
+  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);
+}
+function popSuspenseHandler(fiber) {
+  pop(suspenseHandlerStackCursor);
+  shellBoundary === fiber && (shellBoundary = null);
+  pop(suspenseStackCursor);
+}
+var suspenseStackCursor = createCursor(0);
+function findFirstSuspended(row) {
+  for (var node = row; null !== node; ) {
+    if (13 === node.tag) {
+      var state = node.memoizedState;
+      if (
+        null !== state &&
+        ((state = state.dehydrated),
+        null === state ||
+          "$?" === state.data ||
+          isSuspenseInstanceFallback(state))
+      )
+        return node;
+    } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {
+      if (0 !== (node.flags & 128)) return node;
+    } else if (null !== node.child) {
+      node.child.return = node;
+      node = node.child;
+      continue;
+    }
+    if (node === row) break;
+    for (; null === node.sibling; ) {
+      if (null === node.return || node.return === row) return null;
+      node = node.return;
+    }
+    node.sibling.return = node.return;
+    node = node.sibling;
+  }
+  return null;
+}
+function applyDerivedStateFromProps(
+  workInProgress,
+  ctor,
+  getDerivedStateFromProps,
+  nextProps
+) {
+  ctor = workInProgress.memoizedState;
+  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);
+  getDerivedStateFromProps =
+    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps
+      ? ctor
+      : assign({}, ctor, getDerivedStateFromProps);
+  workInProgress.memoizedState = getDerivedStateFromProps;
+  0 === workInProgress.lanes &&
+    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);
+}
+var classComponentUpdater = {
+  enqueueSetState: function (inst, payload, callback) {
+    inst = inst._reactInternals;
+    var lane = requestUpdateLane(),
+      update = createUpdate(lane);
+    update.payload = payload;
+    void 0 !== callback && null !== callback && (update.callback = callback);
+    payload = enqueueUpdate(inst, update, lane);
+    null !== payload &&
+      (scheduleUpdateOnFiber(payload, inst, lane),
+      entangleTransitions(payload, inst, lane));
+    markStateUpdateScheduled(inst, lane);
+  },
+  enqueueReplaceState: function (inst, payload, callback) {
+    inst = inst._reactInternals;
+    var lane = requestUpdateLane(),
+      update = createUpdate(lane);
+    update.tag = 1;
+    update.payload = payload;
+    void 0 !== callback && null !== callback && (update.callback = callback);
+    payload = enqueueUpdate(inst, update, lane);
+    null !== payload &&
+      (scheduleUpdateOnFiber(payload, inst, lane),
+      entangleTransitions(payload, inst, lane));
+    markStateUpdateScheduled(inst, lane);
+  },
+  enqueueForceUpdate: function (inst, callback) {
+    inst = inst._reactInternals;
+    var lane = requestUpdateLane(),
+      update = createUpdate(lane);
+    update.tag = 2;
+    void 0 !== callback && null !== callback && (update.callback = callback);
+    callback = enqueueUpdate(inst, update, lane);
+    null !== callback &&
+      (scheduleUpdateOnFiber(callback, inst, lane),
+      entangleTransitions(callback, inst, lane));
+    null !== injectedProfilingHooks &&
+      "function" === typeof injectedProfilingHooks.markForceUpdateScheduled &&
+      injectedProfilingHooks.markForceUpdateScheduled(inst, lane);
+  }
+};
+function checkShouldComponentUpdate(
+  workInProgress,
+  ctor,
+  oldProps,
+  newProps,
+  oldState,
+  newState,
+  nextContext
+) {
+  workInProgress = workInProgress.stateNode;
+  return "function" === typeof workInProgress.shouldComponentUpdate
+    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)
+    : ctor.prototype && ctor.prototype.isPureReactComponent
+      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)
+      : !0;
+}
+function callComponentWillReceiveProps(
+  workInProgress,
+  instance,
+  newProps,
+  nextContext
+) {
+  workInProgress = instance.state;
+  "function" === typeof instance.componentWillReceiveProps &&
+    instance.componentWillReceiveProps(newProps, nextContext);
+  "function" === typeof instance.UNSAFE_componentWillReceiveProps &&
+    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);
+  instance.state !== workInProgress &&
+    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);
+}
+function resolveClassComponentProps(Component, baseProps) {
+  var newProps = baseProps;
+  if ("ref" in baseProps) {
+    newProps = {};
+    for (var propName in baseProps)
+      "ref" !== propName && (newProps[propName] = baseProps[propName]);
+  }
+  if ((Component = Component.defaultProps)) {
+    newProps === baseProps && (newProps = assign({}, newProps));
+    for (var propName$75 in Component)
+      void 0 === newProps[propName$75] &&
+        (newProps[propName$75] = Component[propName$75]);
+  }
+  return newProps;
+}
+var reportGlobalError =
+  "function" === typeof reportError
+    ? reportError
+    : function (error) {
+        if (
+          "object" === typeof window &&
+          "function" === typeof window.ErrorEvent
+        ) {
+          var event = new window.ErrorEvent("error", {
+            bubbles: !0,
+            cancelable: !0,
+            message:
+              "object" === typeof error &&
+              null !== error &&
+              "string" === typeof error.message
+                ? String(error.message)
+                : String(error),
+            error: error
+          });
+          if (!window.dispatchEvent(event)) return;
+        } else if (
+          "object" === typeof process &&
+          "function" === typeof process.emit
+        ) {
+          process.emit("uncaughtException", error);
+          return;
+        }
+        console.error(error);
+      };
+function defaultOnUncaughtError(error) {
+  reportGlobalError(error);
+}
+function defaultOnCaughtError(error) {
+  console.error(error);
+}
+function defaultOnRecoverableError(error) {
+  reportGlobalError(error);
+}
+function logUncaughtError(root, errorInfo) {
+  try {
+    var onUncaughtError = root.onUncaughtError;
+    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });
+  } catch (e$76) {
+    setTimeout(function () {
+      throw e$76;
+    });
+  }
+}
+function logCaughtError(root, boundary, errorInfo) {
+  try {
+    var onCaughtError = root.onCaughtError;
+    onCaughtError(errorInfo.value, {
+      componentStack: errorInfo.stack,
+      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null
+    });
+  } catch (e$77) {
+    setTimeout(function () {
+      throw e$77;
+    });
+  }
+}
+function createRootErrorUpdate(root, errorInfo, lane) {
+  lane = createUpdate(lane);
+  lane.tag = 3;
+  lane.payload = { element: null };
+  lane.callback = function () {
+    logUncaughtError(root, errorInfo);
+  };
+  return lane;
+}
+function createClassErrorUpdate(lane) {
+  lane = createUpdate(lane);
+  lane.tag = 3;
+  return lane;
+}
+function initializeClassErrorUpdate(update, root, fiber, errorInfo) {
+  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;
+  if ("function" === typeof getDerivedStateFromError) {
+    var error = errorInfo.value;
+    update.payload = function () {
+      return getDerivedStateFromError(error);
+    };
+    update.callback = function () {
+      logCaughtError(root, fiber, errorInfo);
+    };
+  }
+  var inst = fiber.stateNode;
+  null !== inst &&
+    "function" === typeof inst.componentDidCatch &&
+    (update.callback = function () {
+      logCaughtError(root, fiber, errorInfo);
+      "function" !== typeof getDerivedStateFromError &&
+        (null === legacyErrorBoundariesThatAlreadyFailed
+          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))
+          : legacyErrorBoundariesThatAlreadyFailed.add(this));
+      var stack = errorInfo.stack;
+      this.componentDidCatch(errorInfo.value, {
+        componentStack: null !== stack ? stack : ""
+      });
+    });
+}
+function throwException(
+  root,
+  returnFiber,
+  sourceFiber,
+  value,
+  rootRenderLanes
+) {
+  sourceFiber.flags |= 32768;
+  isDevToolsPresent && restorePendingUpdaters(root, rootRenderLanes);
+  if (
+    null !== value &&
+    "object" === typeof value &&
+    "function" === typeof value.then
+  ) {
+    returnFiber = sourceFiber.alternate;
+    null !== returnFiber &&
+      propagateParentContextChanges(
+        returnFiber,
+        sourceFiber,
+        rootRenderLanes,
+        !0
+      );
+    sourceFiber = suspenseHandlerStackCursor.current;
+    if (null !== sourceFiber) {
+      switch (sourceFiber.tag) {
+        case 13:
+          return (
+            null === shellBoundary
+              ? renderDidSuspendDelayIfPossible()
+              : null === sourceFiber.alternate &&
+                0 === workInProgressRootExitStatus &&
+                (workInProgressRootExitStatus = 3),
+            (sourceFiber.flags &= -257),
+            (sourceFiber.flags |= 65536),
+            (sourceFiber.lanes = rootRenderLanes),
+            value === noopSuspenseyCommitThenable
+              ? (sourceFiber.flags |= 16384)
+              : ((returnFiber = sourceFiber.updateQueue),
+                null === returnFiber
+                  ? (sourceFiber.updateQueue = new Set([value]))
+                  : returnFiber.add(value),
+                attachPingListener(root, value, rootRenderLanes)),
+            !1
+          );
+        case 22:
+          return (
+            (sourceFiber.flags |= 65536),
+            value === noopSuspenseyCommitThenable
+              ? (sourceFiber.flags |= 16384)
+              : ((returnFiber = sourceFiber.updateQueue),
+                null === returnFiber
+                  ? ((returnFiber = {
+                      transitions: null,
+                      markerInstances: null,
+                      retryQueue: new Set([value])
+                    }),
+                    (sourceFiber.updateQueue = returnFiber))
+                  : ((sourceFiber = returnFiber.retryQueue),
+                    null === sourceFiber
+                      ? (returnFiber.retryQueue = new Set([value]))
+                      : sourceFiber.add(value)),
+                attachPingListener(root, value, rootRenderLanes)),
+            !1
+          );
+      }
+      throw Error(formatProdErrorMessage(435, sourceFiber.tag));
+    }
+    attachPingListener(root, value, rootRenderLanes);
+    renderDidSuspendDelayIfPossible();
+    return !1;
+  }
+  if (isHydrating)
+    return (
+      (returnFiber = suspenseHandlerStackCursor.current),
+      null !== returnFiber
+        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),
+          (returnFiber.flags |= 65536),
+          (returnFiber.lanes = rootRenderLanes),
+          value !== HydrationMismatchException &&
+            ((root = Error(formatProdErrorMessage(422), { cause: value })),
+            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))
+        : (value !== HydrationMismatchException &&
+            ((returnFiber = Error(formatProdErrorMessage(423), {
+              cause: value
+            })),
+            queueHydrationError(
+              createCapturedValueAtFiber(returnFiber, sourceFiber)
+            )),
+          (root = root.current.alternate),
+          (root.flags |= 65536),
+          (rootRenderLanes &= -rootRenderLanes),
+          (root.lanes |= rootRenderLanes),
+          (value = createCapturedValueAtFiber(value, sourceFiber)),
+          (rootRenderLanes = createRootErrorUpdate(
+            root.stateNode,
+            value,
+            rootRenderLanes
+          )),
+          enqueueCapturedUpdate(root, rootRenderLanes),
+          4 !== workInProgressRootExitStatus &&
+            (workInProgressRootExitStatus = 2)),
+      !1
+    );
+  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });
+  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);
+  null === workInProgressRootConcurrentErrors
+    ? (workInProgressRootConcurrentErrors = [wrapperError])
+    : workInProgressRootConcurrentErrors.push(wrapperError);
+  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);
+  if (null === returnFiber) return !0;
+  value = createCapturedValueAtFiber(value, sourceFiber);
+  sourceFiber = returnFiber;
+  do {
+    switch (sourceFiber.tag) {
+      case 3:
+        return (
+          (sourceFiber.flags |= 65536),
+          (root = rootRenderLanes & -rootRenderLanes),
+          (sourceFiber.lanes |= root),
+          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),
+          enqueueCapturedUpdate(sourceFiber, root),
+          !1
+        );
+      case 1:
+        if (
+          ((returnFiber = sourceFiber.type),
+          (wrapperError = sourceFiber.stateNode),
+          0 === (sourceFiber.flags & 128) &&
+            ("function" === typeof returnFiber.getDerivedStateFromError ||
+              (null !== wrapperError &&
+                "function" === typeof wrapperError.componentDidCatch &&
+                (null === legacyErrorBoundariesThatAlreadyFailed ||
+                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))
+        )
+          return (
+            (sourceFiber.flags |= 65536),
+            (rootRenderLanes &= -rootRenderLanes),
+            (sourceFiber.lanes |= rootRenderLanes),
+            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),
+            initializeClassErrorUpdate(
+              rootRenderLanes,
+              root,
+              sourceFiber,
+              value
+            ),
+            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),
+            !1
+          );
+    }
+    sourceFiber = sourceFiber.return;
+  } while (null !== sourceFiber);
+  return !1;
+}
+var SelectiveHydrationException = Error(formatProdErrorMessage(461)),
+  didReceiveUpdate = !1;
+function reconcileChildren(current, workInProgress, nextChildren, renderLanes) {
+  workInProgress.child =
+    null === current
+      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)
+      : reconcileChildFibers(
+          workInProgress,
+          current.child,
+          nextChildren,
+          renderLanes
+        );
+}
+function updateForwardRef(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  Component = Component.render;
+  var ref = workInProgress.ref;
+  if ("ref" in nextProps) {
+    var propsWithoutRef = {};
+    for (var key in nextProps)
+      "ref" !== key && (propsWithoutRef[key] = nextProps[key]);
+  } else propsWithoutRef = nextProps;
+  prepareToReadContext(workInProgress);
+  markComponentRenderStarted(workInProgress);
+  nextProps = renderWithHooks(
+    current,
+    workInProgress,
+    Component,
+    propsWithoutRef,
+    ref,
+    renderLanes
+  );
+  key = checkDidRenderIdHook();
+  markComponentRenderStopped();
+  if (null !== current && !didReceiveUpdate)
+    return (
+      bailoutHooks(current, workInProgress, renderLanes),
+      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+    );
+  isHydrating && key && pushMaterializedTreeId(workInProgress);
+  workInProgress.flags |= 1;
+  reconcileChildren(current, workInProgress, nextProps, renderLanes);
+  return workInProgress.child;
+}
+function updateMemoComponent(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  if (null === current) {
+    var type = Component.type;
+    if (
+      "function" === typeof type &&
+      !shouldConstruct(type) &&
+      void 0 === type.defaultProps &&
+      null === Component.compare
+    )
+      return (
+        (workInProgress.tag = 15),
+        (workInProgress.type = type),
+        updateSimpleMemoComponent(
+          current,
+          workInProgress,
+          type,
+          nextProps,
+          renderLanes
+        )
+      );
+    current = createFiberFromTypeAndProps(
+      Component.type,
+      null,
+      nextProps,
+      workInProgress,
+      workInProgress.mode,
+      renderLanes
+    );
+    current.ref = workInProgress.ref;
+    current.return = workInProgress;
+    return (workInProgress.child = current);
+  }
+  type = current.child;
+  if (!checkScheduledUpdateOrContext(current, renderLanes)) {
+    var prevProps = type.memoizedProps;
+    Component = Component.compare;
+    Component = null !== Component ? Component : shallowEqual;
+    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)
+      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
+  }
+  workInProgress.flags |= 1;
+  current = createWorkInProgress(type, nextProps);
+  current.ref = workInProgress.ref;
+  current.return = workInProgress;
+  return (workInProgress.child = current);
+}
+function updateSimpleMemoComponent(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  if (null !== current) {
+    var prevProps = current.memoizedProps;
+    if (
+      shallowEqual(prevProps, nextProps) &&
+      current.ref === workInProgress.ref
+    )
+      if (
+        ((didReceiveUpdate = !1),
+        (workInProgress.pendingProps = nextProps = prevProps),
+        checkScheduledUpdateOrContext(current, renderLanes))
+      )
+        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);
+      else
+        return (
+          (workInProgress.lanes = current.lanes),
+          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+        );
+  }
+  return updateFunctionComponent(
+    current,
+    workInProgress,
+    Component,
+    nextProps,
+    renderLanes
+  );
+}
+function updateOffscreenComponent(current, workInProgress, renderLanes) {
+  var nextProps = workInProgress.pendingProps,
+    nextChildren = nextProps.children,
+    prevState = null !== current ? current.memoizedState : null;
+  if ("hidden" === nextProps.mode) {
+    if (0 !== (workInProgress.flags & 128)) {
+      nextProps =
+        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;
+      if (null !== current) {
+        nextChildren = workInProgress.child = current.child;
+        for (prevState = 0; null !== nextChildren; )
+          (prevState =
+            prevState | nextChildren.lanes | nextChildren.childLanes),
+            (nextChildren = nextChildren.sibling);
+        workInProgress.childLanes = prevState & ~nextProps;
+      } else (workInProgress.childLanes = 0), (workInProgress.child = null);
+      return deferHiddenOffscreenComponent(
+        current,
+        workInProgress,
+        nextProps,
+        renderLanes
+      );
+    }
+    if (0 !== (renderLanes & 536870912))
+      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),
+        null !== current &&
+          pushTransition(
+            workInProgress,
+            null !== prevState ? prevState.cachePool : null
+          ),
+        null !== prevState
+          ? pushHiddenContext(workInProgress, prevState)
+          : reuseHiddenContextOnStack(),
+        pushOffscreenSuspenseHandler(workInProgress);
+    else
+      return (
+        (workInProgress.lanes = workInProgress.childLanes = 536870912),
+        deferHiddenOffscreenComponent(
+          current,
+          workInProgress,
+          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,
+          renderLanes
+        )
+      );
+  } else
+    null !== prevState
+      ? (pushTransition(workInProgress, prevState.cachePool),
+        pushHiddenContext(workInProgress, prevState),
+        reuseSuspenseHandlerOnStack(workInProgress),
+        (workInProgress.memoizedState = null))
+      : (null !== current && pushTransition(workInProgress, null),
+        reuseHiddenContextOnStack(),
+        reuseSuspenseHandlerOnStack(workInProgress));
+  reconcileChildren(current, workInProgress, nextChildren, renderLanes);
+  return workInProgress.child;
+}
+function deferHiddenOffscreenComponent(
+  current,
+  workInProgress,
+  nextBaseLanes,
+  renderLanes
+) {
+  var JSCompiler_inline_result = peekCacheFromPool();
+  JSCompiler_inline_result =
+    null === JSCompiler_inline_result
+      ? null
+      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };
+  workInProgress.memoizedState = {
+    baseLanes: nextBaseLanes,
+    cachePool: JSCompiler_inline_result
+  };
+  null !== current && pushTransition(workInProgress, null);
+  reuseHiddenContextOnStack();
+  pushOffscreenSuspenseHandler(workInProgress);
+  null !== current &&
+    propagateParentContextChanges(current, workInProgress, renderLanes, !0);
+  return null;
+}
+function markRef(current, workInProgress) {
+  var ref = workInProgress.ref;
+  if (null === ref)
+    null !== current &&
+      null !== current.ref &&
+      (workInProgress.flags |= 4194816);
+  else {
+    if ("function" !== typeof ref && "object" !== typeof ref)
+      throw Error(formatProdErrorMessage(284));
+    if (null === current || current.ref !== ref)
+      workInProgress.flags |= 4194816;
+  }
+}
+function updateFunctionComponent(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  prepareToReadContext(workInProgress);
+  markComponentRenderStarted(workInProgress);
+  Component = renderWithHooks(
+    current,
+    workInProgress,
+    Component,
+    nextProps,
+    void 0,
+    renderLanes
+  );
+  nextProps = checkDidRenderIdHook();
+  markComponentRenderStopped();
+  if (null !== current && !didReceiveUpdate)
+    return (
+      bailoutHooks(current, workInProgress, renderLanes),
+      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+    );
+  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);
+  workInProgress.flags |= 1;
+  reconcileChildren(current, workInProgress, Component, renderLanes);
+  return workInProgress.child;
+}
+function replayFunctionComponent(
+  current,
+  workInProgress,
+  nextProps,
+  Component,
+  secondArg,
+  renderLanes
+) {
+  prepareToReadContext(workInProgress);
+  markComponentRenderStarted(workInProgress);
+  workInProgress.updateQueue = null;
+  nextProps = renderWithHooksAgain(
+    workInProgress,
+    Component,
+    nextProps,
+    secondArg
+  );
+  finishRenderingHooks(current);
+  Component = checkDidRenderIdHook();
+  markComponentRenderStopped();
+  if (null !== current && !didReceiveUpdate)
+    return (
+      bailoutHooks(current, workInProgress, renderLanes),
+      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)
+    );
+  isHydrating && Component && pushMaterializedTreeId(workInProgress);
+  workInProgress.flags |= 1;
+  reconcileChildren(current, workInProgress, nextProps, renderLanes);
+  return workInProgress.child;
+}
+function updateClassComponent(
+  current,
+  workInProgress,
+  Component,
+  nextProps,
+  renderLanes
+) {
+  prepareToReadContext(workInProgress);
+  if (null === workInProgress.stateNode) {
+    var context = emptyContextObject,
+      contextType = Component.contextType;
+    "object" === typeof contextType &&
+      null !== contextType &&
+      (context = readContext(contextType));
+    context = new Component(nextProps, context);
+    workInProgress.memoizedState =
+      null !== context.state && void 0 !== context.state ? context.state : null;
+    context.updater = classComponentUpdater;
+    workInProgress.stateNode = context;
+    context._reactInternals = workInProgress;
+    context = workInProgress.stateNode;
+    context.props = nextProps;
+    context.state = workInProgress.memoizedState;
+    context.refs = {};
+    initializeUpdateQueue(workInProgress);
+    contextType = Component.contextType;
+    context.context =
+      "object" === typeof contextType && null !== contextType
+        ? readContext(contextType)
+        : emptyContextObject;
+    context.state = workInProgress.memoizedState;
+    contextType = Component.getDerivedStateFromProps;
+    "function" === typeof contextType &&
+      (applyDerivedStateFromProps(
+        workInProgress,
+        Component,
+        contextType,
+        nextProps
+      ),
+      (context.state = workInProgress.memoizedState));
+    "function" === typeof Component.getDerivedStateFromProps ||
+      "function" === typeof context.getSnapshotBeforeUpdate ||
+      ("function" !== typeof context.UNSAFE_componentWillMount &&
+        "function" !== typeof context.componentWillMount) ||
+      ((contextType = context.state),
+      "function" === typeof context.componentWillMount &&
+        context.componentWillMount(),
+      "function" === typeof context.UNSAFE_componentWillMount &&
+        context.UNSAFE_componentWillMount(),
+      contextType !== context.state &&
+        classComponentUpdater.enqueueReplaceState(context, context.state, null),
+      processUpdateQueue(workInProgress, nextProps, context, renderLanes),
+      suspendIfUpdateReadFromEntangledAsyncAction(),
+      (context.state = workInProgress.memoizedState));
+    "function" === typeof context.componentDidMount &&
+      (workInProgress.flags |= 4194308);
+    nextProps = !0;
+  } else if (null === current) {
+    context = workInProgress.stateNode;
+    var unresolvedOldProps = workInProgress.memoizedProps,
+      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);
+    context.props = oldProps;
+    var oldContext = context.context,
+      contextType$jscomp$0 = Component.contextType;
+    contextType = emptyContextObject;
+    "object" === typeof contextType$jscomp$0 &&
+      null !== contextType$jscomp$0 &&
+      (contextType = readContext(contextType$jscomp$0));
+    var getDerivedStateFromProps = Component.getDerivedStateFromProps;
+    contextType$jscomp$0 =
+      "function" === typeof getDerivedStateFromProps ||
+      "function" === typeof context.getSnapshotBeforeUpdate;
+    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;
+    contextType$jscomp$0 ||
+      ("function" !== typeof context.UNSAFE_componentWillReceiveProps &&
+        "function" !== typeof context.componentWillReceiveProps) ||
+      ((unresolvedOldProps || oldContext !== contextType) &&
+        callComponentWillReceiveProps(
+          workInProgress,
+          context,
+          nextProps,
+          contextType
+        ));
+    hasForceUpdate = !1;
+    var oldState = workInProgress.memoizedState;
+    context.state = oldState;
+    processUpdateQueue(workInProgress, nextProps, context, renderLanes);
+    suspendIfUpdateReadFromEntangledAsyncAction();
+    oldContext = workInProgress.memoizedState;
+    unresolvedOldProps || oldState !== oldContext || hasForceUpdate
+      ? ("function" === typeof getDerivedStateFromProps &&
+          (applyDerivedStateFromProps(
+            workInProgress,
+            Component,
+            getDerivedStateFromProps,
+            nextProps
+          ),
+          (oldContext = workInProgress.memoizedState)),
+        (oldProps =
+          hasForceUpdate ||
+          checkShouldComponentUpdate(
+            workInProgress,
+            Component,
+            oldProps,
+            nextProps,
+            oldState,
+            oldContext,
+            contextType
+          ))
+          ? (contextType$jscomp$0 ||
+              ("function" !== typeof context.UNSAFE_componentWillMount &&
+                "function" !== typeof context.componentWillMount) ||
+              ("function" === typeof context.componentWillMount &&
+                context.componentWillMount(),
+              "function" === typeof context.UNSAFE_componentWillMount &&
+                context.UNSAFE_componentWillMount()),
+            "function" === typeof context.componentDidMount &&
+              (workInProgress.flags |= 4194308))
+          : ("function" === typeof context.componentDidMount &&
+              (workInProgress.flags |= 4194308),
+            (workInProgress.memoizedProps = nextProps),
+            (workInProgress.memoizedState = oldContext)),
+        (context.props = nextProps),
+        (context.state = oldContext),
+        (context.context = contextType),
+        (nextProps = oldProps))
+      : ("function" === typeof context.componentDidMount &&
+          (workInProgress.flags |= 4194308),
+        (nextProps = !1));
+  } else {
+    context = workInProgress.stateNode;
+    cloneUpdateQueue(current, workInProgress);
+    contextType = workInProgress.memoizedProps;
+    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);
+    context.props = contextType$jscomp$0;
+    getDerivedStateFromProps = workInProgress.pendingProps;
+    oldState = context.context;
+    oldContext = Component.contextType;
+    oldProps = emptyContextObject;
+    "object" === typeof oldContext &&
+      null !== oldContext &&
+      (oldProps = readContext(oldContext));
+    unresolvedOldProps = Component.getDerivedStateFromProps;
+    (oldContext =
+      "function" === typeof unresolvedOldProps ||
+      "function" === typeof context.getSnapshotBeforeUpdate) ||
+      ("function" !== typeof context.UNSAFE_componentWillReceiveProps &&
+        "function" !== typeof context.componentWillReceiveProps) ||
+      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&
+        callComponentWillReceiveProps(
+          workInProgress,
+          context,
+          nextProps,
+          oldProps
+        ));
+    hasForceUpdate = !1;
+    oldState = workInProgress.memoizedState;
+    context.state = oldState;
+    processUpdateQueue(workInProgress, nextProps, context, renderLanes);
+    suspendIfUpdateReadFromEntangledAsyncAction();
+    var newState = workInProgress.memoizedState;
+    contextType !== getDerivedStateFromProps ||
+    oldState !== newState ||
+    hasForceUpdate ||
+    (null !== current &&
+      null !== current.dependencies &&
+      checkIfContextChanged(current.dependencies))
+      ? ("function" === typeof unresolvedOldProps &&
+          (applyDerivedStateFromProps(
+            workInProgress,
+            Component,
+            unresolvedOldProps,
+            nextProps
+          ),
+          (newState = workInProgress.memoizedState)),
+        (contextType$jscomp$0 =
+          hasForceUpdate ||
+          checkShouldComponentUpdate(
+            workInProgress,
+            Component,
+            contextType$jscomp$0,
+            nextProps,
+            oldState,
+            newState,
+            oldProps
+          ) ||
+          (null !== current &&
+            null !== current.dependencies &&
+            checkIfContextChanged(current.dependencies)))
+          ? (oldContext ||
+              ("function" !== typeof context.UNSAFE_componentWillUpdate &&
+                "function" !== typeof context.componentWillUpdate) ||
+              ("function" === typeof context.componentWillUpdate &&
+                context.componentWillUpdate(nextProps, newState, oldProps),
+              "function" === typeof context.UNSAFE_componentWillUpdate &&
+                context.UNSAFE_componentWillUpdate(
+                  nextProps,
+                  newState,
+                  oldProps
+                )),
+            "function" === typeof context.componentDidUpdate &&
+              (workInProgress.flags |= 4),
+            "function" === typeof context.getSnapshotBeforeUpdate &&
+              (workInProgress.flags |= 1024))
+          : ("function" !== typeof context.componentDidUpdate ||
+              (contextType === current.memoizedProps &&
+                oldState === current.memoizedState) ||
+              (workInProgress.flags |= 4),
+            "function" !== typeof context.getSnapshotBeforeUpdate ||
+              (contextType === current.memoizedProps &&
+                oldState === current.memoizedState) ||
+              (workInProgress.flags |= 1024),
+            (workInProgress.memoizedProps = nextProps),
+            (workInProgress.memoizedState = newState)),
+        (context.props = nextProps),
+        (context.state = newState),
+        (context.context = oldProps),
+        (nextProps = contextType$jscomp$0))
+      : ("function" !== typeof context.componentDidUpdate ||
+          (contextType === current.memoizedProps &&
+            oldState === current.memoizedState) ||
+          (workInProgress.flags |= 4),
+        "function" !== typeof context.getSnapshotBeforeUpdate ||
+          (contextType === current.memoizedProps &&
+            oldState === current.memoizedState) ||
+          (workInProgress.flags |= 1024),
+        (nextProps = !1));
+  }
+  context = nextProps;
+  markRef(current, workInProgress);
+  nextProps = 0 !== (workInProgress.flags & 128);
+  context || nextProps
+    ? ((context = workInProgress.stateNode),
+      nextProps && "function" !== typeof Component.getDerivedStateFromError
+        ? ((Component = null), (profilerStartTime = -1))
+        : (markComponentRenderStarted(workInProgress),
+          (Component = context.render()),
+          markComponentRenderStopped()),
+      (workInProgress.flags |= 1),
+      null !== current && nextProps
+        ? ((workInProgress.child = reconcileChildFibers(
+            workInProgress,
+            current.child,
+            null,
+            renderLanes
+          )),
+          (workInProgress.child = reconcileChildFibers(
+            workInProgress,
+            null,
+            Component,
+            renderLanes
+          )))
+        : reconcileChildren(current, workInProgress, Component, renderLanes),
+      (workInProgress.memoizedState = context.state),
+      (current = workInProgress.child))
+    : (current = bailoutOnAlreadyFinishedWork(
+        current,
+        workInProgress,
+        renderLanes
+      ));
+  return current;
+}
+function mountHostRootWithoutHydrating(
+  current,
+  workInProgress,
+  nextChildren,
+  renderLanes
+) {
+  resetHydrationState();
+  workInProgress.flags |= 256;
+  reconcileChildren(current, workInProgress, nextChildren, renderLanes);
+  return workInProgress.child;
+}
+var SUSPENDED_MARKER = {
+  dehydrated: null,
+  treeContext: null,
+  retryLane: 0,
+  hydrationErrors: null
+};
+function mountSuspenseOffscreenState(renderLanes) {
+  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };
+}
+function getRemainingWorkInPrimaryTree(
+  current,
+  primaryTreeDidDefer,
+  renderLanes
+) {
+  current = null !== current ? current.childLanes & ~renderLanes : 0;
+  primaryTreeDidDefer && (current |= workInProgressDeferredLane);
+  return current;
+}
+function updateSuspenseComponent(current, workInProgress, renderLanes) {
+  var nextProps = workInProgress.pendingProps,
+    showFallback = !1,
+    didSuspend = 0 !== (workInProgress.flags & 128),
+    JSCompiler_temp;
+  (JSCompiler_temp = didSuspend) ||
+    (JSCompiler_temp =
+      null !== current && null === current.memoizedState
+        ? !1
+        : 0 !== (suspenseStackCursor.current & 2));
+  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));
+  JSCompiler_temp = 0 !== (workInProgress.flags & 32);
+  workInProgress.flags &= -33;
+  if (null === current) {
+    if (isHydrating) {
+      showFallback
+        ? pushPrimaryTreeSuspenseHandler(workInProgress)
+        : reuseSuspenseHandlerOnStack(workInProgress);
+      if (isHydrating) {
+        var nextInstance = nextHydratableInstance,
+          JSCompiler_temp$jscomp$0;
+        if ((JSCompiler_temp$jscomp$0 = nextInstance)) {
+          c: {
+            JSCompiler_temp$jscomp$0 = nextInstance;
+            for (
+              nextInstance = rootOrSingletonContext;
+              8 !== JSCompiler_temp$jscomp$0.nodeType;
+
+            ) {
+              if (!nextInstance) {
+                nextInstance = null;
+                break c;
+              }
+              JSCompiler_temp$jscomp$0 = getNextHydratable(
+                JSCompiler_temp$jscomp$0.nextSibling
+              );
+              if (null === JSCompiler_temp$jscomp$0) {
+                nextInstance = null;
+                break c;
+              }
+            }
+            nextInstance = JSCompiler_temp$jscomp$0;
+          }
+          null !== nextInstance
+            ? ((workInProgress.memoizedState = {
+                dehydrated: nextInstance,
+                treeContext:
+                  null !== treeContextProvider
+                    ? { id: treeContextId, overflow: treeContextOverflow }
+                    : null,
+                retryLane: 536870912,
+                hydrationErrors: null
+              }),
+              (JSCompiler_temp$jscomp$0 = createFiberImplClass(
+                18,
+                null,
+                null,
+                0
+              )),
+              (JSCompiler_temp$jscomp$0.stateNode = nextInstance),
+              (JSCompiler_temp$jscomp$0.return = workInProgress),
+              (workInProgress.child = JSCompiler_temp$jscomp$0),
+              (hydrationParentFiber = workInProgress),
+              (nextHydratableInstance = null),
+              (JSCompiler_temp$jscomp$0 = !0))
+            : (JSCompiler_temp$jscomp$0 = !1);
+        }
+        JSCompiler_temp$jscomp$0 || throwOnHydrationMismatch(workInProgress);
+      }
+      nextInstance = workInProgress.memoizedState;
+      if (
+        null !== nextInstance &&
+        ((nextInstance = nextInstance.dehydrated), null !== nextInstance)
+      )
+        return (
+          isSuspenseInstanceFallback(nextInstance)
+            ? (workInProgress.lanes = 32)
+            : (workInProgress.lanes = 536870912),
+          null
+        );
+      popSuspenseHandler(workInProgress);
+    }
+    nextInstance = nextProps.children;
+    nextProps = nextProps.fallback;
+    if (showFallback)
+      return (
+        reuseSuspenseHandlerOnStack(workInProgress),
+        (showFallback = workInProgress.mode),
+        (nextInstance = mountWorkInProgressOffscreenFiber(
+          { mode: "hidden", children: nextInstance },
+          showFallback
+        )),
+        (nextProps = createFiberFromFragment(
+          nextProps,
+          showFallback,
+          renderLanes,
+          null
+        )),
+        (nextInstance.return = workInProgress),
+        (nextProps.return = workInProgress),
+        (nextInstance.sibling = nextProps),
+        (workInProgress.child = nextInstance),
+        (showFallback = workInProgress.child),
+        (showFallback.memoizedState = mountSuspenseOffscreenState(renderLanes)),
+        (showFallback.childLanes = getRemainingWorkInPrimaryTree(
+          current,
+          JSCompiler_temp,
+          renderLanes
+        )),
+        (workInProgress.memoizedState = SUSPENDED_MARKER),
+        nextProps
+      );
+    pushPrimaryTreeSuspenseHandler(workInProgress);
+    return mountSuspensePrimaryChildren(workInProgress, nextInstance);
+  }
+  JSCompiler_temp$jscomp$0 = current.memoizedState;
+  if (
+    null !== JSCompiler_temp$jscomp$0 &&
+    ((nextInstance = JSCompiler_temp$jscomp$0.dehydrated),
+    null !== nextInstance)
+  ) {
+    if (didSuspend)
+      workInProgress.flags & 256
+        ? (pushPrimaryTreeSuspenseHandler(workInProgress),
+          (workInProgress.flags &= -257),
+          (workInProgress = retrySuspenseComponentWithoutHydrating(
+            current,
+            workInProgress,
+            renderLanes
+          )))
+        : null !== workInProgress.memoizedState
+          ? (reuseSuspenseHandlerOnStack(workInProgress),
+            (workInProgress.child = current.child),
+            (workInProgress.flags |= 128),
+            (workInProgress = null))
+          : (reuseSuspenseHandlerOnStack(workInProgress),
+            (showFallback = nextProps.fallback),
+            (nextInstance = workInProgress.mode),
+            (nextProps = mountWorkInProgressOffscreenFiber(
+              { mode: "visible", children: nextProps.children },
+              nextInstance
+            )),
+            (showFallback = createFiberFromFragment(
+              showFallback,
+              nextInstance,
+              renderLanes,
+              null
+            )),
+            (showFallback.flags |= 2),
+            (nextProps.return = workInProgress),
+            (showFallback.return = workInProgress),
+            (nextProps.sibling = showFallback),
+            (workInProgress.child = nextProps),
+            reconcileChildFibers(
+              workInProgress,
+              current.child,
+              null,
+              renderLanes
+            ),
+            (nextProps = workInProgress.child),
+            (nextProps.memoizedState =
+              mountSuspenseOffscreenState(renderLanes)),
+            (nextProps.childLanes = getRemainingWorkInPrimaryTree(
+              current,
+              JSCompiler_temp,
+              renderLanes
+            )),
+            (workInProgress.memoizedState = SUSPENDED_MARKER),
+            (workInProgress = showFallback));
+    else if (
+      (pushPrimaryTreeSuspenseHandler(workInProgress),
+      isSuspenseInstanceFallback(nextInstance))
+    ) {
+      JSCompiler_temp =
+        nextInstance.nextSibling && nextInstance.nextSibling.dataset;
+      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;
+      JSCompiler_temp = digest;
+      nextProps = Error(formatProdErrorMessage(419));
+      nextProps.stack = "";
+      nextProps.digest = JSCompiler_temp;
+      queueHydrationError({ value: nextProps, source: null, stack: null });
+      workInProgress = retrySuspenseComponentWithoutHydrating(
+        current,
+        workInProgress,
+        renderLanes
+      );
+    } else if (
+      (didReceiveUpdate ||
+        propagateParentContextChanges(current, workInProgress, renderLanes, !1),
+      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),
+      didReceiveUpdate || JSCompiler_temp)
+    ) {
+      JSCompiler_temp = workInProgressRoot;
+      if (
+        null !== JSCompiler_temp &&
+        ((nextProps = renderLanes & -renderLanes),
+        (nextProps =
+          0 !== (nextProps & 42)
+            ? 1
+            : getBumpedLaneForHydrationByLane(nextProps)),
+        (nextProps =
+          0 !== (nextProps & (JSCompiler_temp.suspendedLanes | renderLanes))
+            ? 0
+            : nextProps),
+        0 !== nextProps && nextProps !== JSCompiler_temp$jscomp$0.retryLane)
+      )
+        throw (
+          ((JSCompiler_temp$jscomp$0.retryLane = nextProps),
+          enqueueConcurrentRenderForLane(current, nextProps),
+          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),
+          SelectiveHydrationException)
+        );
+      "$?" === nextInstance.data || renderDidSuspendDelayIfPossible();
+      workInProgress = retrySuspenseComponentWithoutHydrating(
+        current,
+        workInProgress,
+        renderLanes
+      );
+    } else
+      "$?" === nextInstance.data
+        ? ((workInProgress.flags |= 192),
+          (workInProgress.child = current.child),
+          (workInProgress = null))
+        : ((current = JSCompiler_temp$jscomp$0.treeContext),
+          (nextHydratableInstance = getNextHydratable(
+            nextInstance.nextSibling
+          )),
+          (hydrationParentFiber = workInProgress),
+          (isHydrating = !0),
+          (hydrationErrors = null),
+          (rootOrSingletonContext = !1),
+          null !== current &&
+            ((idStack[idStackIndex++] = treeContextId),
+            (idStack[idStackIndex++] = treeContextOverflow),
+            (idStack[idStackIndex++] = treeContextProvider),
+            (treeContextId = current.id),
+            (treeContextOverflow = current.overflow),
+            (treeContextProvider = workInProgress)),
+          (workInProgress = mountSuspensePrimaryChildren(
+            workInProgress,
+            nextProps.children
+          )),
+          (workInProgress.flags |= 4096));
+    return workInProgress;
+  }
+  if (showFallback)
+    return (
+      reuseSuspenseHandlerOnStack(workInProgress),
+      (showFallback = nextProps.fallback),
+      (nextInstance = workInProgress.mode),
+      (JSCompiler_temp$jscomp$0 = current.child),
+      (digest = JSCompiler_temp$jscomp$0.sibling),
+      (nextProps = createWorkInProgress(JSCompiler_temp$jscomp$0, {
+        mode: "hidden",
+        children: nextProps.children
+      })),
+      (nextProps.subtreeFlags =
+        JSCompiler_temp$jscomp$0.subtreeFlags & 65011712),
+      null !== digest
+        ? (showFallback = createWorkInProgress(digest, showFallback))
+        : ((showFallback = createFiberFromFragment(
+            showFallback,
+            nextInstance,
+            renderLanes,
+            null
+          )),
+          (showFallback.flags |= 2)),
+      (showFallback.return = workInProgress),
+      (nextProps.return = workInProgress),
+      (nextProps.sibling = showFallback),
+      (workInProgress.child = nextProps),
+      (nextProps = showFallback),
+      (showFallback = workInProgress.child),
+      (nextInstance = current.child.memoizedState),
+      null === nextInstance
+        ? (nextInstance = mountSuspenseOffscreenState(renderLanes))
+        : ((JSCompiler_temp$jscomp$0 = nextInstance.cachePool),
+          null !== JSCompiler_temp$jscomp$0
+            ? ((digest = CacheContext._currentValue),
+              (JSCompiler_temp$jscomp$0 =
+                JSCompiler_temp$jscomp$0.parent !== digest
+                  ? { parent: digest, pool: digest }
+                  : JSCompiler_temp$jscomp$0))
+            : (JSCompiler_temp$jscomp$0 = getSuspendedCache()),
+          (nextInstance = {
+            baseLanes: nextInstance.baseLanes | renderLanes,
+            cachePool: JSCompiler_temp$jscomp$0
+          })),
+      (showFallback.memoizedState = nextInstance),
+      (showFallback.childLanes = getRemainingWorkInPrimaryTree(
+        current,
+        JSCompiler_temp,
+        renderLanes
+      )),
+      (workInProgress.memoizedState = SUSPENDED_MARKER),
+      nextProps
+    );
+  pushPrimaryTreeSuspenseHandler(workInProgress);
+  renderLanes = current.child;
+  current = renderLanes.sibling;
+  renderLanes = createWorkInProgress(renderLanes, {
+    mode: "visible",
+    children: nextProps.children
+  });
+  renderLanes.return = workInProgress;
+  renderLanes.sibling = null;
+  null !== current &&
+    ((JSCompiler_temp = workInProgress.deletions),
+    null === JSCompiler_temp
+      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))
+      : JSCompiler_temp.push(current));
+  workInProgress.child = renderLanes;
+  workInProgress.memoizedState = null;
+  return renderLanes;
+}
+function mountSuspensePrimaryChildren(workInProgress, primaryChildren) {
+  primaryChildren = mountWorkInProgressOffscreenFiber(
+    { mode: "visible", children: primaryChildren },
+    workInProgress.mode
+  );
+  primaryChildren.return = workInProgress;
+  return (workInProgress.child = primaryChildren);
+}
+function mountWorkInProgressOffscreenFiber(offscreenProps, mode) {
+  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);
+  offscreenProps.lanes = 0;
+  offscreenProps.stateNode = {
+    _visibility: 1,
+    _pendingMarkers: null,
+    _retryCache: null,
+    _transitions: null
+  };
+  return offscreenProps;
+}
+function retrySuspenseComponentWithoutHydrating(
+  current,
+  workInProgress,
+  renderLanes
+) {
+  reconcileChildFibers(workInProgress, current.child, null, renderLanes);
+  current = mountSuspensePrimaryChildren(
+    workInProgress,
+    workInProgress.pendingProps.children
+  );
+  current.flags |= 2;
+  workInProgress.memoizedState = null;
+  return current;
+}
+function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {
+  fiber.lanes |= renderLanes;
+  var alternate = fiber.alternate;
+  null !== alternate && (alternate.lanes |= renderLanes);
+  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);
+}
+function initSuspenseListRenderState(
+  workInProgress,
+  isBackwards,
+  tail,
+  lastContentRow,
+  tailMode
+) {
+  var renderState = workInProgress.memoizedState;
+  null === renderState
+    ? (workInProgress.memoizedState = {
+        isBackwards: isBackwards,
+        rendering: null,
+        renderingStartTime: 0,
+        last: lastContentRow,
+        tail: tail,
+        tailMode: tailMode
+      })
+    : ((renderState.isBackwards = isBackwards),
+      (renderState.rendering = null),
+      (renderState.renderingStartTime = 0),
+      (renderState.last = lastContentRow),
+      (renderState.tail = tail),
+      (renderState.tailMode = tailMode));
+}
+function updateSuspenseListComponent(current, workInProgress, renderLanes) {
+  var nextProps = workInProgress.pendingProps,
+    revealOrder = nextProps.revealOrder,
+    tailMode = nextProps.tail;
+  reconcileChildren(current, workInProgress, nextProps.children, renderLanes);
+  nextProps = suspenseStackCursor.current;
+  if (0 !== (nextProps & 2))
+    (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);
+  else {
+    if (null !== current && 0 !== (current.flags & 128))
+      a: for (current = workInProgress.child; null !== current; ) {
+        if (13 === current.tag)
+          null !== current.memoizedState &&
+            scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);
+        else if (19 === current.tag)
+          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);
+        else if (null !== current.child) {
+          current.child.return = current;
+          current = current.child;
+          continue;
+        }
+        if (current === workInProgress) break a;
+        for (; null === current.sibling; ) {
+          if (null === current.return || current.return === workInProgress)
+            break a;
+          current = current.return;
+        }
+        current.sibling.return = current.return;
+        current = current.sibling;
+      }
+    nextProps &= 1;
+  }
+  push(suspenseStackCursor, nextProps);
+  switch (revealOrder) {
+    case "forwards":
+      renderLanes = workInProgress.child;
+      for (revealOrder = null; null !== renderLanes; )
+        (current = renderLanes.alternate),
+          null !== current &&
+            null === findFirstSuspended(current) &&
+            (revealOrder = renderLanes),
+          (renderLanes = renderLanes.sibling);
+      renderLanes = revealOrder;
+      null === renderLanes
+        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))
+        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));
+      initSuspenseListRenderState(
+        workInProgress,
+        !1,
+        revealOrder,
+        renderLanes,
+        tailMode
+      );
+      break;
+    case "backwards":
+      renderLanes = null;
+      revealOrder = workInProgress.child;
+      for (workInProgress.child = null; null !== revealOrder; ) {
+        current = revealOrder.alternate;
+        if (null !== current && null === findFirstSuspended(current)) {
+          workInProgress.child = revealOrder;
+          break;
+        }
+        current = revealOrder.sibling;
+        revealOrder.sibling = renderLanes;
+        renderLanes = revealOrder;
+        revealOrder = current;
+      }
+      initSuspenseListRenderState(
+        workInProgress,
+        !0,
+        renderLanes,
+        null,
+        tailMode
+      );
+      break;
+    case "together":
+      initSuspenseListRenderState(workInProgress, !1, null, null, void 0);
+      break;
+    default:
+      workInProgress.memoizedState = null;
+  }
+  return workInProgress.child;
+}
+function bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {
+  null !== current && (workInProgress.dependencies = current.dependencies);
+  profilerStartTime = -1;
+  workInProgressRootSkippedLanes |= workInProgress.lanes;
+  if (0 === (renderLanes & workInProgress.childLanes))
+    if (null !== current) {
+      if (
+        (propagateParentContextChanges(
+          current,
+          workInProgress,
+          renderLanes,
+          !1
+        ),
+        0 === (renderLanes & workInProgress.childLanes))
+      )
+        return null;
+    } else return null;
+  if (null !== current && workInProgress.child !== current.child)
+    throw Error(formatProdErrorMessage(153));
+  if (null !== workInProgress.child) {
+    current = workInProgress.child;
+    renderLanes = createWorkInProgress(current, current.pendingProps);
+    workInProgress.child = renderLanes;
+    for (renderLanes.return = workInProgress; null !== current.sibling; )
+      (current = current.sibling),
+        (renderLanes = renderLanes.sibling =
+          createWorkInProgress(current, current.pendingProps)),
+        (renderLanes.return = workInProgress);
+    renderLanes.sibling = null;
+  }
+  return workInProgress.child;
+}
+function checkScheduledUpdateOrContext(current, renderLanes) {
+  if (0 !== (current.lanes & renderLanes)) return !0;
+  current = current.dependencies;
+  return null !== current && checkIfContextChanged(current) ? !0 : !1;
+}
+function attemptEarlyBailoutIfNoScheduledUpdate(
+  current,
+  workInProgress,
+  renderLanes
+) {
+  switch (workInProgress.tag) {
+    case 3:
+      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
+      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);
+      resetHydrationState();
+      break;
+    case 27:
+    case 5:
+      pushHostContext(workInProgress);
+      break;
+    case 4:
+      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
+      break;
+    case 10:
+      pushProvider(
+        workInProgress,
+        workInProgress.type,
+        workInProgress.memoizedProps.value
+      );
+      break;
+    case 12:
+      0 !== (renderLanes & workInProgress.childLanes) &&
+        (workInProgress.flags |= 4);
+      workInProgress.flags |= 2048;
+      var stateNode = workInProgress.stateNode;
+      stateNode.effectDuration = -0;
+      stateNode.passiveEffectDuration = -0;
+      break;
+    case 13:
+      stateNode = workInProgress.memoizedState;
+      if (null !== stateNode) {
+        if (null !== stateNode.dehydrated)
+          return (
+            pushPrimaryTreeSuspenseHandler(workInProgress),
+            (workInProgress.flags |= 128),
+            null
+          );
+        if (0 !== (renderLanes & workInProgress.child.childLanes))
+          return updateSuspenseComponent(current, workInProgress, renderLanes);
+        pushPrimaryTreeSuspenseHandler(workInProgress);
+        current = bailoutOnAlreadyFinishedWork(
+          current,
+          workInProgress,
+          renderLanes
+        );
+        return null !== current ? current.sibling : null;
+      }
+      pushPrimaryTreeSuspenseHandler(workInProgress);
+      break;
+    case 19:
+      var didSuspendBefore = 0 !== (current.flags & 128);
+      stateNode = 0 !== (renderLanes & workInProgress.childLanes);
+      stateNode ||
+        (propagateParentContextChanges(
+          current,
+          workInProgress,
+          renderLanes,
+          !1
+        ),
+        (stateNode = 0 !== (renderLanes & workInProgress.childLanes)));
+      if (didSuspendBefore) {
+        if (stateNode)
+          return updateSuspenseListComponent(
+            current,
+            workInProgress,
+            renderLanes
+          );
+        workInProgress.flags |= 128;
+      }
+      didSuspendBefore = workInProgress.memoizedState;
+      null !== didSuspendBefore &&
+        ((didSuspendBefore.rendering = null),
+        (didSuspendBefore.tail = null),
+        (didSuspendBefore.lastEffect = null));
+      push(suspenseStackCursor, suspenseStackCursor.current);
+      if (stateNode) break;
+      else return null;
+    case 22:
+    case 23:
+      return (
+        (workInProgress.lanes = 0),
+        updateOffscreenComponent(current, workInProgress, renderLanes)
+      );
+    case 24:
+      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);
+  }
+  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
+}
+function beginWork(current, workInProgress, renderLanes) {
+  if (null !== current)
+    if (current.memoizedProps !== workInProgress.pendingProps)
+      didReceiveUpdate = !0;
+    else {
+      if (
+        !checkScheduledUpdateOrContext(current, renderLanes) &&
+        0 === (workInProgress.flags & 128)
+      )
+        return (
+          (didReceiveUpdate = !1),
+          attemptEarlyBailoutIfNoScheduledUpdate(
+            current,
+            workInProgress,
+            renderLanes
+          )
+        );
+      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;
+    }
+  else
+    (didReceiveUpdate = !1),
+      isHydrating &&
+        0 !== (workInProgress.flags & 1048576) &&
+        pushTreeId(workInProgress, treeForkCount, workInProgress.index);
+  workInProgress.lanes = 0;
+  switch (workInProgress.tag) {
+    case 16:
+      a: {
+        current = workInProgress.pendingProps;
+        var lazyComponent = workInProgress.elementType,
+          init = lazyComponent._init;
+        lazyComponent = init(lazyComponent._payload);
+        workInProgress.type = lazyComponent;
+        if ("function" === typeof lazyComponent)
+          shouldConstruct(lazyComponent)
+            ? ((current = resolveClassComponentProps(lazyComponent, current)),
+              (workInProgress.tag = 1),
+              (workInProgress = updateClassComponent(
+                null,
+                workInProgress,
+                lazyComponent,
+                current,
+                renderLanes
+              )))
+            : ((workInProgress.tag = 0),
+              (workInProgress = updateFunctionComponent(
+                null,
+                workInProgress,
+                lazyComponent,
+                current,
+                renderLanes
+              )));
+        else {
+          if (void 0 !== lazyComponent && null !== lazyComponent)
+            if (
+              ((init = lazyComponent.$$typeof), init === REACT_FORWARD_REF_TYPE)
+            ) {
+              workInProgress.tag = 11;
+              workInProgress = updateForwardRef(
+                null,
+                workInProgress,
+                lazyComponent,
+                current,
+                renderLanes
+              );
+              break a;
+            } else if (init === REACT_MEMO_TYPE) {
+              workInProgress.tag = 14;
+              workInProgress = updateMemoComponent(
+                null,
+                workInProgress,
+                lazyComponent,
+                current,
+                renderLanes
+              );
+              break a;
+            }
+          workInProgress =
+            getComponentNameFromType(lazyComponent) || lazyComponent;
+          throw Error(formatProdErrorMessage(306, workInProgress, ""));
+        }
+      }
+      return workInProgress;
+    case 0:
+      return updateFunctionComponent(
+        current,
+        workInProgress,
+        workInProgress.type,
+        workInProgress.pendingProps,
+        renderLanes
+      );
+    case 1:
+      return (
+        (lazyComponent = workInProgress.type),
+        (init = resolveClassComponentProps(
+          lazyComponent,
+          workInProgress.pendingProps
+        )),
+        updateClassComponent(
+          current,
+          workInProgress,
+          lazyComponent,
+          init,
+          renderLanes
+        )
+      );
+    case 3:
+      a: {
+        pushHostContainer(
+          workInProgress,
+          workInProgress.stateNode.containerInfo
+        );
+        if (null === current) throw Error(formatProdErrorMessage(387));
+        lazyComponent = workInProgress.pendingProps;
+        var prevState = workInProgress.memoizedState;
+        init = prevState.element;
+        cloneUpdateQueue(current, workInProgress);
+        processUpdateQueue(workInProgress, lazyComponent, null, renderLanes);
+        var nextState = workInProgress.memoizedState;
+        lazyComponent = nextState.cache;
+        pushProvider(workInProgress, CacheContext, lazyComponent);
+        lazyComponent !== prevState.cache &&
+          propagateContextChanges(
+            workInProgress,
+            [CacheContext],
+            renderLanes,
+            !0
+          );
+        suspendIfUpdateReadFromEntangledAsyncAction();
+        lazyComponent = nextState.element;
+        if (prevState.isDehydrated)
+          if (
+            ((prevState = {
+              element: lazyComponent,
+              isDehydrated: !1,
+              cache: nextState.cache
+            }),
+            (workInProgress.updateQueue.baseState = prevState),
+            (workInProgress.memoizedState = prevState),
+            workInProgress.flags & 256)
+          ) {
+            workInProgress = mountHostRootWithoutHydrating(
+              current,
+              workInProgress,
+              lazyComponent,
+              renderLanes
+            );
+            break a;
+          } else if (lazyComponent !== init) {
+            init = createCapturedValueAtFiber(
+              Error(formatProdErrorMessage(424)),
+              workInProgress
+            );
+            queueHydrationError(init);
+            workInProgress = mountHostRootWithoutHydrating(
+              current,
+              workInProgress,
+              lazyComponent,
+              renderLanes
+            );
+            break a;
+          } else {
+            current = workInProgress.stateNode.containerInfo;
+            switch (current.nodeType) {
+              case 9:
+                current = current.body;
+                break;
+              default:
+                current =
+                  "HTML" === current.nodeName
+                    ? current.ownerDocument.body
+                    : current;
+            }
+            nextHydratableInstance = getNextHydratable(current.firstChild);
+            hydrationParentFiber = workInProgress;
+            isHydrating = !0;
+            hydrationErrors = null;
+            rootOrSingletonContext = !0;
+            renderLanes = mountChildFibers(
+              workInProgress,
+              null,
+              lazyComponent,
+              renderLanes
+            );
+            for (workInProgress.child = renderLanes; renderLanes; )
+              (renderLanes.flags = (renderLanes.flags & -3) | 4096),
+                (renderLanes = renderLanes.sibling);
+          }
+        else {
+          resetHydrationState();
+          if (lazyComponent === init) {
+            workInProgress = bailoutOnAlreadyFinishedWork(
+              current,
+              workInProgress,
+              renderLanes
+            );
+            break a;
+          }
+          reconcileChildren(
+            current,
+            workInProgress,
+            lazyComponent,
+            renderLanes
+          );
+        }
+        workInProgress = workInProgress.child;
+      }
+      return workInProgress;
+    case 26:
+      return (
+        markRef(current, workInProgress),
+        null === current
+          ? (renderLanes = getResource(
+              workInProgress.type,
+              null,
+              workInProgress.pendingProps,
+              null
+            ))
+            ? (workInProgress.memoizedState = renderLanes)
+            : isHydrating ||
+              ((renderLanes = workInProgress.type),
+              (current = workInProgress.pendingProps),
+              (lazyComponent = getOwnerDocumentFromRootContainer(
+                rootInstanceStackCursor.current
+              ).createElement(renderLanes)),
+              (lazyComponent[internalInstanceKey] = workInProgress),
+              (lazyComponent[internalPropsKey] = current),
+              setInitialProperties(lazyComponent, renderLanes, current),
+              markNodeAsHoistable(lazyComponent),
+              (workInProgress.stateNode = lazyComponent))
+          : (workInProgress.memoizedState = getResource(
+              workInProgress.type,
+              current.memoizedProps,
+              workInProgress.pendingProps,
+              current.memoizedState
+            )),
+        null
+      );
+    case 27:
+      return (
+        pushHostContext(workInProgress),
+        null === current &&
+          isHydrating &&
+          ((lazyComponent = workInProgress.stateNode =
+            resolveSingletonInstance(
+              workInProgress.type,
+              workInProgress.pendingProps,
+              rootInstanceStackCursor.current
+            )),
+          (hydrationParentFiber = workInProgress),
+          (rootOrSingletonContext = !0),
+          (init = nextHydratableInstance),
+          isSingletonScope(workInProgress.type)
+            ? ((previousHydratableOnEnteringScopedSingleton = init),
+              (nextHydratableInstance = getNextHydratable(
+                lazyComponent.firstChild
+              )))
+            : (nextHydratableInstance = init)),
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps.children,
+          renderLanes
+        ),
+        markRef(current, workInProgress),
+        null === current && (workInProgress.flags |= 4194304),
+        workInProgress.child
+      );
+    case 5:
+      if (null === current && isHydrating) {
+        if ((init = lazyComponent = nextHydratableInstance))
+          (lazyComponent = canHydrateInstance(
+            lazyComponent,
+            workInProgress.type,
+            workInProgress.pendingProps,
+            rootOrSingletonContext
+          )),
+            null !== lazyComponent
+              ? ((workInProgress.stateNode = lazyComponent),
+                (hydrationParentFiber = workInProgress),
+                (nextHydratableInstance = getNextHydratable(
+                  lazyComponent.firstChild
+                )),
+                (rootOrSingletonContext = !1),
+                (init = !0))
+              : (init = !1);
+        init || throwOnHydrationMismatch(workInProgress);
+      }
+      pushHostContext(workInProgress);
+      init = workInProgress.type;
+      prevState = workInProgress.pendingProps;
+      nextState = null !== current ? current.memoizedProps : null;
+      lazyComponent = prevState.children;
+      shouldSetTextContent(init, prevState)
+        ? (lazyComponent = null)
+        : null !== nextState &&
+          shouldSetTextContent(init, nextState) &&
+          (workInProgress.flags |= 32);
+      null !== workInProgress.memoizedState &&
+        ((init = renderWithHooks(
+          current,
+          workInProgress,
+          TransitionAwareHostComponent,
+          null,
+          null,
+          renderLanes
+        )),
+        (HostTransitionContext._currentValue = init));
+      markRef(current, workInProgress);
+      reconcileChildren(current, workInProgress, lazyComponent, renderLanes);
+      return workInProgress.child;
+    case 6:
+      if (null === current && isHydrating) {
+        if ((current = renderLanes = nextHydratableInstance))
+          (renderLanes = canHydrateTextInstance(
+            renderLanes,
+            workInProgress.pendingProps,
+            rootOrSingletonContext
+          )),
+            null !== renderLanes
+              ? ((workInProgress.stateNode = renderLanes),
+                (hydrationParentFiber = workInProgress),
+                (nextHydratableInstance = null),
+                (current = !0))
+              : (current = !1);
+        current || throwOnHydrationMismatch(workInProgress);
+      }
+      return null;
+    case 13:
+      return updateSuspenseComponent(current, workInProgress, renderLanes);
+    case 4:
+      return (
+        pushHostContainer(
+          workInProgress,
+          workInProgress.stateNode.containerInfo
+        ),
+        (lazyComponent = workInProgress.pendingProps),
+        null === current
+          ? (workInProgress.child = reconcileChildFibers(
+              workInProgress,
+              null,
+              lazyComponent,
+              renderLanes
+            ))
+          : reconcileChildren(
+              current,
+              workInProgress,
+              lazyComponent,
+              renderLanes
+            ),
+        workInProgress.child
+      );
+    case 11:
+      return updateForwardRef(
+        current,
+        workInProgress,
+        workInProgress.type,
+        workInProgress.pendingProps,
+        renderLanes
+      );
+    case 7:
+      return (
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 8:
+      return (
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps.children,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 12:
+      return (
+        (workInProgress.flags |= 4),
+        (workInProgress.flags |= 2048),
+        (lazyComponent = workInProgress.stateNode),
+        (lazyComponent.effectDuration = -0),
+        (lazyComponent.passiveEffectDuration = -0),
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps.children,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 10:
+      return (
+        (lazyComponent = workInProgress.pendingProps),
+        pushProvider(workInProgress, workInProgress.type, lazyComponent.value),
+        reconcileChildren(
+          current,
+          workInProgress,
+          lazyComponent.children,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 9:
+      return (
+        (init = workInProgress.type._context),
+        (lazyComponent = workInProgress.pendingProps.children),
+        prepareToReadContext(workInProgress),
+        (init = readContext(init)),
+        markComponentRenderStarted(workInProgress),
+        (lazyComponent = lazyComponent(init)),
+        markComponentRenderStopped(),
+        (workInProgress.flags |= 1),
+        reconcileChildren(current, workInProgress, lazyComponent, renderLanes),
+        workInProgress.child
+      );
+    case 14:
+      return updateMemoComponent(
+        current,
+        workInProgress,
+        workInProgress.type,
+        workInProgress.pendingProps,
+        renderLanes
+      );
+    case 15:
+      return updateSimpleMemoComponent(
+        current,
+        workInProgress,
+        workInProgress.type,
+        workInProgress.pendingProps,
+        renderLanes
+      );
+    case 19:
+      return updateSuspenseListComponent(current, workInProgress, renderLanes);
+    case 31:
+      return (
+        (lazyComponent = workInProgress.pendingProps),
+        (renderLanes = workInProgress.mode),
+        (lazyComponent = {
+          mode: lazyComponent.mode,
+          children: lazyComponent.children
+        }),
+        null === current
+          ? ((renderLanes = mountWorkInProgressOffscreenFiber(
+              lazyComponent,
+              renderLanes
+            )),
+            (renderLanes.ref = workInProgress.ref),
+            (workInProgress.child = renderLanes),
+            (renderLanes.return = workInProgress),
+            (workInProgress = renderLanes))
+          : ((renderLanes = createWorkInProgress(current.child, lazyComponent)),
+            (renderLanes.ref = workInProgress.ref),
+            (workInProgress.child = renderLanes),
+            (renderLanes.return = workInProgress),
+            (workInProgress = renderLanes)),
+        workInProgress
+      );
+    case 22:
+      return updateOffscreenComponent(current, workInProgress, renderLanes);
+    case 24:
+      return (
+        prepareToReadContext(workInProgress),
+        (lazyComponent = readContext(CacheContext)),
+        null === current
+          ? ((init = peekCacheFromPool()),
+            null === init &&
+              ((init = workInProgressRoot),
+              (prevState = createCache()),
+              (init.pooledCache = prevState),
+              prevState.refCount++,
+              null !== prevState && (init.pooledCacheLanes |= renderLanes),
+              (init = prevState)),
+            (workInProgress.memoizedState = {
+              parent: lazyComponent,
+              cache: init
+            }),
+            initializeUpdateQueue(workInProgress),
+            pushProvider(workInProgress, CacheContext, init))
+          : (0 !== (current.lanes & renderLanes) &&
+              (cloneUpdateQueue(current, workInProgress),
+              processUpdateQueue(workInProgress, null, null, renderLanes),
+              suspendIfUpdateReadFromEntangledAsyncAction()),
+            (init = current.memoizedState),
+            (prevState = workInProgress.memoizedState),
+            init.parent !== lazyComponent
+              ? ((init = { parent: lazyComponent, cache: lazyComponent }),
+                (workInProgress.memoizedState = init),
+                0 === workInProgress.lanes &&
+                  (workInProgress.memoizedState =
+                    workInProgress.updateQueue.baseState =
+                      init),
+                pushProvider(workInProgress, CacheContext, lazyComponent))
+              : ((lazyComponent = prevState.cache),
+                pushProvider(workInProgress, CacheContext, lazyComponent),
+                lazyComponent !== init.cache &&
+                  propagateContextChanges(
+                    workInProgress,
+                    [CacheContext],
+                    renderLanes,
+                    !0
+                  ))),
+        reconcileChildren(
+          current,
+          workInProgress,
+          workInProgress.pendingProps.children,
+          renderLanes
+        ),
+        workInProgress.child
+      );
+    case 29:
+      throw workInProgress.pendingProps;
+  }
+  throw Error(formatProdErrorMessage(156, workInProgress.tag));
+}
+function markUpdate(workInProgress) {
+  workInProgress.flags |= 4;
+}
+function preloadResourceAndSuspendIfNeeded(workInProgress, resource) {
+  if ("stylesheet" !== resource.type || 0 !== (resource.state.loading & 4))
+    workInProgress.flags &= -16777217;
+  else if (((workInProgress.flags |= 16777216), !preloadResource(resource))) {
+    resource = suspenseHandlerStackCursor.current;
+    if (
+      null !== resource &&
+      ((workInProgressRootRenderLanes & 4194048) ===
+      workInProgressRootRenderLanes
+        ? null !== shellBoundary
+        : ((workInProgressRootRenderLanes & 62914560) !==
+            workInProgressRootRenderLanes &&
+            0 === (workInProgressRootRenderLanes & 536870912)) ||
+          resource !== shellBoundary)
+    )
+      throw (
+        ((suspendedThenable = noopSuspenseyCommitThenable),
+        SuspenseyCommitException)
+      );
+    workInProgress.flags |= 8192;
+  }
+}
+function scheduleRetryEffect(workInProgress, retryQueue) {
+  null !== retryQueue && (workInProgress.flags |= 4);
+  workInProgress.flags & 16384 &&
+    ((retryQueue =
+      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),
+    (workInProgress.lanes |= retryQueue),
+    (workInProgressSuspendedRetryLanes |= retryQueue));
+}
+function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {
+  if (!isHydrating)
+    switch (renderState.tailMode) {
+      case "hidden":
+        hasRenderedATailFallback = renderState.tail;
+        for (var lastTailNode = null; null !== hasRenderedATailFallback; )
+          null !== hasRenderedATailFallback.alternate &&
+            (lastTailNode = hasRenderedATailFallback),
+            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);
+        null === lastTailNode
+          ? (renderState.tail = null)
+          : (lastTailNode.sibling = null);
+        break;
+      case "collapsed":
+        lastTailNode = renderState.tail;
+        for (var lastTailNode$116 = null; null !== lastTailNode; )
+          null !== lastTailNode.alternate && (lastTailNode$116 = lastTailNode),
+            (lastTailNode = lastTailNode.sibling);
+        null === lastTailNode$116
+          ? hasRenderedATailFallback || null === renderState.tail
+            ? (renderState.tail = null)
+            : (renderState.tail.sibling = null)
+          : (lastTailNode$116.sibling = null);
+    }
+}
+function bubbleProperties(completedWork) {
+  var didBailout =
+      null !== completedWork.alternate &&
+      completedWork.alternate.child === completedWork.child,
+    newChildLanes = 0,
+    subtreeFlags = 0;
+  if (didBailout)
+    if (0 !== (completedWork.mode & 2)) {
+      for (
+        var treeBaseDuration$118 = completedWork.selfBaseDuration,
+          child$119 = completedWork.child;
+        null !== child$119;
+
+      )
+        (newChildLanes |= child$119.lanes | child$119.childLanes),
+          (subtreeFlags |= child$119.subtreeFlags & 65011712),
+          (subtreeFlags |= child$119.flags & 65011712),
+          (treeBaseDuration$118 += child$119.treeBaseDuration),
+          (child$119 = child$119.sibling);
+      completedWork.treeBaseDuration = treeBaseDuration$118;
+    } else
+      for (
+        treeBaseDuration$118 = completedWork.child;
+        null !== treeBaseDuration$118;
+
+      )
+        (newChildLanes |=
+          treeBaseDuration$118.lanes | treeBaseDuration$118.childLanes),
+          (subtreeFlags |= treeBaseDuration$118.subtreeFlags & 65011712),
+          (subtreeFlags |= treeBaseDuration$118.flags & 65011712),
+          (treeBaseDuration$118.return = completedWork),
+          (treeBaseDuration$118 = treeBaseDuration$118.sibling);
+  else if (0 !== (completedWork.mode & 2)) {
+    treeBaseDuration$118 = completedWork.actualDuration;
+    child$119 = completedWork.selfBaseDuration;
+    for (var child = completedWork.child; null !== child; )
+      (newChildLanes |= child.lanes | child.childLanes),
+        (subtreeFlags |= child.subtreeFlags),
+        (subtreeFlags |= child.flags),
+        (treeBaseDuration$118 += child.actualDuration),
+        (child$119 += child.treeBaseDuration),
+        (child = child.sibling);
+    completedWork.actualDuration = treeBaseDuration$118;
+    completedWork.treeBaseDuration = child$119;
+  } else
+    for (
+      treeBaseDuration$118 = completedWork.child;
+      null !== treeBaseDuration$118;
+
+    )
+      (newChildLanes |=
+        treeBaseDuration$118.lanes | treeBaseDuration$118.childLanes),
+        (subtreeFlags |= treeBaseDuration$118.subtreeFlags),
+        (subtreeFlags |= treeBaseDuration$118.flags),
+        (treeBaseDuration$118.return = completedWork),
+        (treeBaseDuration$118 = treeBaseDuration$118.sibling);
+  completedWork.subtreeFlags |= subtreeFlags;
+  completedWork.childLanes = newChildLanes;
+  return didBailout;
+}
+function completeWork(current, workInProgress, renderLanes) {
+  var newProps = workInProgress.pendingProps;
+  popTreeContext(workInProgress);
+  switch (workInProgress.tag) {
+    case 31:
+    case 16:
+    case 15:
+    case 0:
+    case 11:
+    case 7:
+    case 8:
+    case 12:
+    case 9:
+    case 14:
+      return bubbleProperties(workInProgress), null;
+    case 1:
+      return bubbleProperties(workInProgress), null;
+    case 3:
+      renderLanes = workInProgress.stateNode;
+      newProps = null;
+      null !== current && (newProps = current.memoizedState.cache);
+      workInProgress.memoizedState.cache !== newProps &&
+        (workInProgress.flags |= 2048);
+      popProvider(CacheContext);
+      popHostContainer();
+      renderLanes.pendingContext &&
+        ((renderLanes.context = renderLanes.pendingContext),
+        (renderLanes.pendingContext = null));
+      if (null === current || null === current.child)
+        popHydrationState(workInProgress)
+          ? markUpdate(workInProgress)
+          : null === current ||
+            (current.memoizedState.isDehydrated &&
+              0 === (workInProgress.flags & 256)) ||
+            ((workInProgress.flags |= 1024),
+            upgradeHydrationErrorsToRecoverable());
+      bubbleProperties(workInProgress);
+      return null;
+    case 26:
+      return (
+        (renderLanes = workInProgress.memoizedState),
+        null === current
+          ? (markUpdate(workInProgress),
+            null !== renderLanes
+              ? (bubbleProperties(workInProgress),
+                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))
+              : (bubbleProperties(workInProgress),
+                (workInProgress.flags &= -16777217)))
+          : renderLanes
+            ? renderLanes !== current.memoizedState
+              ? (markUpdate(workInProgress),
+                bubbleProperties(workInProgress),
+                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))
+              : (bubbleProperties(workInProgress),
+                (workInProgress.flags &= -16777217))
+            : (current.memoizedProps !== newProps && markUpdate(workInProgress),
+              bubbleProperties(workInProgress),
+              (workInProgress.flags &= -16777217)),
+        null
+      );
+    case 27:
+      popHostContext(workInProgress);
+      renderLanes = rootInstanceStackCursor.current;
+      var type = workInProgress.type;
+      if (null !== current && null != workInProgress.stateNode)
+        current.memoizedProps !== newProps && markUpdate(workInProgress);
+      else {
+        if (!newProps) {
+          if (null === workInProgress.stateNode)
+            throw Error(formatProdErrorMessage(166));
+          bubbleProperties(workInProgress);
+          return null;
+        }
+        current = contextStackCursor.current;
+        popHydrationState(workInProgress)
+          ? prepareToHydrateHostInstance(workInProgress, current)
+          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),
+            (workInProgress.stateNode = current),
+            markUpdate(workInProgress));
+      }
+      bubbleProperties(workInProgress);
+      return null;
+    case 5:
+      popHostContext(workInProgress);
+      renderLanes = workInProgress.type;
+      if (null !== current && null != workInProgress.stateNode)
+        current.memoizedProps !== newProps && markUpdate(workInProgress);
+      else {
+        if (!newProps) {
+          if (null === workInProgress.stateNode)
+            throw Error(formatProdErrorMessage(166));
+          bubbleProperties(workInProgress);
+          return null;
+        }
+        current = contextStackCursor.current;
+        if (popHydrationState(workInProgress))
+          prepareToHydrateHostInstance(workInProgress, current);
+        else {
+          type = getOwnerDocumentFromRootContainer(
+            rootInstanceStackCursor.current
+          );
+          switch (current) {
+            case 1:
+              current = type.createElementNS(
+                "http://www.w3.org/2000/svg",
+                renderLanes
+              );
+              break;
+            case 2:
+              current = type.createElementNS(
+                "http://www.w3.org/1998/Math/MathML",
+                renderLanes
+              );
+              break;
+            default:
+              switch (renderLanes) {
+                case "svg":
+                  current = type.createElementNS(
+                    "http://www.w3.org/2000/svg",
+                    renderLanes
+                  );
+                  break;
+                case "math":
+                  current = type.createElementNS(
+                    "http://www.w3.org/1998/Math/MathML",
+                    renderLanes
+                  );
+                  break;
+                case "script":
+                  current = type.createElement("div");
+                  current.innerHTML = "<script>\x3c/script>";
+                  current = current.removeChild(current.firstChild);
+                  break;
+                case "select":
+                  current =
+                    "string" === typeof newProps.is
+                      ? type.createElement("select", { is: newProps.is })
+                      : type.createElement("select");
+                  newProps.multiple
+                    ? (current.multiple = !0)
+                    : newProps.size && (current.size = newProps.size);
+                  break;
+                default:
+                  current =
+                    "string" === typeof newProps.is
+                      ? type.createElement(renderLanes, { is: newProps.is })
+                      : type.createElement(renderLanes);
+              }
+          }
+          current[internalInstanceKey] = workInProgress;
+          current[internalPropsKey] = newProps;
+          a: for (type = workInProgress.child; null !== type; ) {
+            if (5 === type.tag || 6 === type.tag)
+              current.appendChild(type.stateNode);
+            else if (4 !== type.tag && 27 !== type.tag && null !== type.child) {
+              type.child.return = type;
+              type = type.child;
+              continue;
+            }
+            if (type === workInProgress) break a;
+            for (; null === type.sibling; ) {
+              if (null === type.return || type.return === workInProgress)
+                break a;
+              type = type.return;
+            }
+            type.sibling.return = type.return;
+            type = type.sibling;
+          }
+          workInProgress.stateNode = current;
+          a: switch (
+            (setInitialProperties(current, renderLanes, newProps), renderLanes)
+          ) {
+            case "button":
+            case "input":
+            case "select":
+            case "textarea":
+              current = !!newProps.autoFocus;
+              break a;
+            case "img":
+              current = !0;
+              break a;
+            default:
+              current = !1;
+          }
+          current && markUpdate(workInProgress);
+        }
+      }
+      bubbleProperties(workInProgress);
+      workInProgress.flags &= -16777217;
+      return null;
+    case 6:
+      if (current && null != workInProgress.stateNode)
+        current.memoizedProps !== newProps && markUpdate(workInProgress);
+      else {
+        if ("string" !== typeof newProps && null === workInProgress.stateNode)
+          throw Error(formatProdErrorMessage(166));
+        current = rootInstanceStackCursor.current;
+        if (popHydrationState(workInProgress)) {
+          current = workInProgress.stateNode;
+          renderLanes = workInProgress.memoizedProps;
+          newProps = null;
+          type = hydrationParentFiber;
+          if (null !== type)
+            switch (type.tag) {
+              case 27:
+              case 5:
+                newProps = type.memoizedProps;
+            }
+          current[internalInstanceKey] = workInProgress;
+          current =
+            current.nodeValue === renderLanes ||
+            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||
+            checkForUnmatchedText(current.nodeValue, renderLanes)
+              ? !0
+              : !1;
+          current || throwOnHydrationMismatch(workInProgress);
+        } else
+          (current =
+            getOwnerDocumentFromRootContainer(current).createTextNode(
+              newProps
+            )),
+            (current[internalInstanceKey] = workInProgress),
+            (workInProgress.stateNode = current);
+      }
+      bubbleProperties(workInProgress);
+      return null;
+    case 13:
+      newProps = workInProgress.memoizedState;
+      if (
+        null === current ||
+        (null !== current.memoizedState &&
+          null !== current.memoizedState.dehydrated)
+      ) {
+        type = popHydrationState(workInProgress);
+        if (null !== newProps && null !== newProps.dehydrated) {
+          if (null === current) {
+            if (!type) throw Error(formatProdErrorMessage(318));
+            type = workInProgress.memoizedState;
+            type = null !== type ? type.dehydrated : null;
+            if (!type) throw Error(formatProdErrorMessage(317));
+            type[internalInstanceKey] = workInProgress;
+            bubbleProperties(workInProgress);
+            0 !== (workInProgress.mode & 2) &&
+              null !== newProps &&
+              ((type = workInProgress.child),
+              null !== type &&
+                (workInProgress.treeBaseDuration -= type.treeBaseDuration));
+          } else
+            resetHydrationState(),
+              0 === (workInProgress.flags & 128) &&
+                (workInProgress.memoizedState = null),
+              (workInProgress.flags |= 4),
+              bubbleProperties(workInProgress),
+              0 !== (workInProgress.mode & 2) &&
+                null !== newProps &&
+                ((type = workInProgress.child),
+                null !== type &&
+                  (workInProgress.treeBaseDuration -= type.treeBaseDuration));
+          type = !1;
+        } else
+          (type = upgradeHydrationErrorsToRecoverable()),
+            null !== current &&
+              null !== current.memoizedState &&
+              (current.memoizedState.hydrationErrors = type),
+            (type = !0);
+        if (!type) {
+          if (workInProgress.flags & 256)
+            return popSuspenseHandler(workInProgress), workInProgress;
+          popSuspenseHandler(workInProgress);
+          return null;
+        }
+      }
+      popSuspenseHandler(workInProgress);
+      if (0 !== (workInProgress.flags & 128))
+        return (
+          (workInProgress.lanes = renderLanes),
+          0 !== (workInProgress.mode & 2) &&
+            transferActualDuration(workInProgress),
+          workInProgress
+        );
+      renderLanes = null !== newProps;
+      current = null !== current && null !== current.memoizedState;
+      if (renderLanes) {
+        newProps = workInProgress.child;
+        type = null;
+        null !== newProps.alternate &&
+          null !== newProps.alternate.memoizedState &&
+          null !== newProps.alternate.memoizedState.cachePool &&
+          (type = newProps.alternate.memoizedState.cachePool.pool);
+        var cache$135 = null;
+        null !== newProps.memoizedState &&
+          null !== newProps.memoizedState.cachePool &&
+          (cache$135 = newProps.memoizedState.cachePool.pool);
+        cache$135 !== type && (newProps.flags |= 2048);
+      }
+      renderLanes !== current &&
+        renderLanes &&
+        (workInProgress.child.flags |= 8192);
+      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);
+      bubbleProperties(workInProgress);
+      0 !== (workInProgress.mode & 2) &&
+        renderLanes &&
+        ((current = workInProgress.child),
+        null !== current &&
+          (workInProgress.treeBaseDuration -= current.treeBaseDuration));
+      return null;
+    case 4:
+      return (
+        popHostContainer(),
+        null === current &&
+          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),
+        bubbleProperties(workInProgress),
+        null
+      );
+    case 10:
+      return (
+        popProvider(workInProgress.type), bubbleProperties(workInProgress), null
+      );
+    case 19:
+      pop(suspenseStackCursor);
+      type = workInProgress.memoizedState;
+      if (null === type) return bubbleProperties(workInProgress), null;
+      newProps = 0 !== (workInProgress.flags & 128);
+      cache$135 = type.rendering;
+      if (null === cache$135)
+        if (newProps) cutOffTailIfNeeded(type, !1);
+        else {
+          if (
+            0 !== workInProgressRootExitStatus ||
+            (null !== current && 0 !== (current.flags & 128))
+          )
+            for (current = workInProgress.child; null !== current; ) {
+              cache$135 = findFirstSuspended(current);
+              if (null !== cache$135) {
+                workInProgress.flags |= 128;
+                cutOffTailIfNeeded(type, !1);
+                current = cache$135.updateQueue;
+                workInProgress.updateQueue = current;
+                scheduleRetryEffect(workInProgress, current);
+                workInProgress.subtreeFlags = 0;
+                current = renderLanes;
+                for (renderLanes = workInProgress.child; null !== renderLanes; )
+                  resetWorkInProgress(renderLanes, current),
+                    (renderLanes = renderLanes.sibling);
+                push(
+                  suspenseStackCursor,
+                  (suspenseStackCursor.current & 1) | 2
+                );
+                return workInProgress.child;
+              }
+              current = current.sibling;
+            }
+          null !== type.tail &&
+            now$1() > workInProgressRootRenderTargetTime &&
+            ((workInProgress.flags |= 128),
+            (newProps = !0),
+            cutOffTailIfNeeded(type, !1),
+            (workInProgress.lanes = 4194304));
+        }
+      else {
+        if (!newProps)
+          if (((current = findFirstSuspended(cache$135)), null !== current)) {
+            if (
+              ((workInProgress.flags |= 128),
+              (newProps = !0),
+              (current = current.updateQueue),
+              (workInProgress.updateQueue = current),
+              scheduleRetryEffect(workInProgress, current),
+              cutOffTailIfNeeded(type, !0),
+              null === type.tail &&
+                "hidden" === type.tailMode &&
+                !cache$135.alternate &&
+                !isHydrating)
+            )
+              return bubbleProperties(workInProgress), null;
+          } else
+            2 * now$1() - type.renderingStartTime >
+              workInProgressRootRenderTargetTime &&
+              536870912 !== renderLanes &&
+              ((workInProgress.flags |= 128),
+              (newProps = !0),
+              cutOffTailIfNeeded(type, !1),
+              (workInProgress.lanes = 4194304));
+        type.isBackwards
+          ? ((cache$135.sibling = workInProgress.child),
+            (workInProgress.child = cache$135))
+          : ((current = type.last),
+            null !== current
+              ? (current.sibling = cache$135)
+              : (workInProgress.child = cache$135),
+            (type.last = cache$135));
+      }
+      if (null !== type.tail)
+        return (
+          (workInProgress = type.tail),
+          (type.rendering = workInProgress),
+          (type.tail = workInProgress.sibling),
+          (type.renderingStartTime = now$1()),
+          (workInProgress.sibling = null),
+          (current = suspenseStackCursor.current),
+          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),
+          workInProgress
+        );
+      bubbleProperties(workInProgress);
+      return null;
+    case 22:
+    case 23:
+      return (
+        popSuspenseHandler(workInProgress),
+        popHiddenContext(),
+        (newProps = null !== workInProgress.memoizedState),
+        null !== current
+          ? (null !== current.memoizedState) !== newProps &&
+            (workInProgress.flags |= 8192)
+          : newProps && (workInProgress.flags |= 8192),
+        newProps
+          ? 0 !== (renderLanes & 536870912) &&
+            0 === (workInProgress.flags & 128) &&
+            (bubbleProperties(workInProgress),
+            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))
+          : bubbleProperties(workInProgress),
+        (renderLanes = workInProgress.updateQueue),
+        null !== renderLanes &&
+          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),
+        (renderLanes = null),
+        null !== current &&
+          null !== current.memoizedState &&
+          null !== current.memoizedState.cachePool &&
+          (renderLanes = current.memoizedState.cachePool.pool),
+        (newProps = null),
+        null !== workInProgress.memoizedState &&
+          null !== workInProgress.memoizedState.cachePool &&
+          (newProps = workInProgress.memoizedState.cachePool.pool),
+        newProps !== renderLanes && (workInProgress.flags |= 2048),
+        null !== current && pop(resumedCache),
+        null
+      );
+    case 24:
+      return (
+        (renderLanes = null),
+        null !== current && (renderLanes = current.memoizedState.cache),
+        workInProgress.memoizedState.cache !== renderLanes &&
+          (workInProgress.flags |= 2048),
+        popProvider(CacheContext),
+        bubbleProperties(workInProgress),
+        null
+      );
+    case 25:
+      return null;
+    case 30:
+      return null;
+  }
+  throw Error(formatProdErrorMessage(156, workInProgress.tag));
+}
+function unwindWork(current, workInProgress) {
+  popTreeContext(workInProgress);
+  switch (workInProgress.tag) {
+    case 1:
+      return (
+        (current = workInProgress.flags),
+        current & 65536
+          ? ((workInProgress.flags = (current & -65537) | 128),
+            0 !== (workInProgress.mode & 2) &&
+              transferActualDuration(workInProgress),
+            workInProgress)
+          : null
+      );
+    case 3:
+      return (
+        popProvider(CacheContext),
+        popHostContainer(),
+        (current = workInProgress.flags),
+        0 !== (current & 65536) && 0 === (current & 128)
+          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)
+          : null
+      );
+    case 26:
+    case 27:
+    case 5:
+      return popHostContext(workInProgress), null;
+    case 13:
+      popSuspenseHandler(workInProgress);
+      current = workInProgress.memoizedState;
+      if (null !== current && null !== current.dehydrated) {
+        if (null === workInProgress.alternate)
+          throw Error(formatProdErrorMessage(340));
+        resetHydrationState();
+      }
+      current = workInProgress.flags;
+      return current & 65536
+        ? ((workInProgress.flags = (current & -65537) | 128),
+          0 !== (workInProgress.mode & 2) &&
+            transferActualDuration(workInProgress),
+          workInProgress)
+        : null;
+    case 19:
+      return pop(suspenseStackCursor), null;
+    case 4:
+      return popHostContainer(), null;
+    case 10:
+      return popProvider(workInProgress.type), null;
+    case 22:
+    case 23:
+      return (
+        popSuspenseHandler(workInProgress),
+        popHiddenContext(),
+        null !== current && pop(resumedCache),
+        (current = workInProgress.flags),
+        current & 65536
+          ? ((workInProgress.flags = (current & -65537) | 128),
+            0 !== (workInProgress.mode & 2) &&
+              transferActualDuration(workInProgress),
+            workInProgress)
+          : null
+      );
+    case 24:
+      return popProvider(CacheContext), null;
+    case 25:
+      return null;
+    default:
+      return null;
+  }
+}
+function unwindInterruptedWork(current, interruptedWork) {
+  popTreeContext(interruptedWork);
+  switch (interruptedWork.tag) {
+    case 3:
+      popProvider(CacheContext);
+      popHostContainer();
+      break;
+    case 26:
+    case 27:
+    case 5:
+      popHostContext(interruptedWork);
+      break;
+    case 4:
+      popHostContainer();
+      break;
+    case 13:
+      popSuspenseHandler(interruptedWork);
+      break;
+    case 19:
+      pop(suspenseStackCursor);
+      break;
+    case 10:
+      popProvider(interruptedWork.type);
+      break;
+    case 22:
+    case 23:
+      popSuspenseHandler(interruptedWork);
+      popHiddenContext();
+      null !== current && pop(resumedCache);
+      break;
+    case 24:
+      popProvider(CacheContext);
+  }
+}
+function shouldProfile(current) {
+  return 0 !== (current.mode & 2);
+}
+function commitHookLayoutEffects(finishedWork, hookFlags) {
+  shouldProfile(finishedWork)
+    ? (startEffectTimer(),
+      commitHookEffectListMount(hookFlags, finishedWork),
+      recordEffectDuration())
+    : commitHookEffectListMount(hookFlags, finishedWork);
+}
+function commitHookLayoutUnmountEffects(
+  finishedWork,
+  nearestMountedAncestor,
+  hookFlags
+) {
+  shouldProfile(finishedWork)
+    ? (startEffectTimer(),
+      commitHookEffectListUnmount(
+        hookFlags,
+        finishedWork,
+        nearestMountedAncestor
+      ),
+      recordEffectDuration())
+    : commitHookEffectListUnmount(
+        hookFlags,
+        finishedWork,
+        nearestMountedAncestor
+      );
+}
+function commitHookEffectListMount(flags, finishedWork) {
+  try {
+    var updateQueue = finishedWork.updateQueue,
+      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;
+    if (null !== lastEffect) {
+      var firstEffect = lastEffect.next;
+      updateQueue = firstEffect;
+      do {
+        if ((updateQueue.tag & flags) === flags) {
+          0 !== (flags & 8)
+            ? null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted &&
+              injectedProfilingHooks.markComponentPassiveEffectMountStarted(
+                finishedWork
+              )
+            : 0 !== (flags & 4) &&
+              null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted &&
+              injectedProfilingHooks.markComponentLayoutEffectMountStarted(
+                finishedWork
+              );
+          lastEffect = void 0;
+          var create = updateQueue.create,
+            inst = updateQueue.inst;
+          lastEffect = create();
+          inst.destroy = lastEffect;
+          0 !== (flags & 8)
+            ? null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped &&
+              injectedProfilingHooks.markComponentPassiveEffectMountStopped()
+            : 0 !== (flags & 4) &&
+              null !== injectedProfilingHooks &&
+              "function" ===
+                typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped &&
+              injectedProfilingHooks.markComponentLayoutEffectMountStopped();
+        }
+        updateQueue = updateQueue.next;
+      } while (updateQueue !== firstEffect);
+    }
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+function commitHookEffectListUnmount(
+  flags,
+  finishedWork,
+  nearestMountedAncestor$jscomp$0
+) {
+  try {
+    var updateQueue = finishedWork.updateQueue,
+      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;
+    if (null !== lastEffect) {
+      var firstEffect = lastEffect.next;
+      updateQueue = firstEffect;
+      do {
+        if ((updateQueue.tag & flags) === flags) {
+          var inst = updateQueue.inst,
+            destroy = inst.destroy;
+          if (void 0 !== destroy) {
+            inst.destroy = void 0;
+            0 !== (flags & 8)
+              ? null !== injectedProfilingHooks &&
+                "function" ===
+                  typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted &&
+                injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(
+                  finishedWork
+                )
+              : 0 !== (flags & 4) &&
+                null !== injectedProfilingHooks &&
+                "function" ===
+                  typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted &&
+                injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(
+                  finishedWork
+                );
+            lastEffect = finishedWork;
+            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,
+              destroy_ = destroy;
+            try {
+              destroy_();
+            } catch (error) {
+              captureCommitPhaseError(
+                lastEffect,
+                nearestMountedAncestor,
+                error
+              );
+            }
+            0 !== (flags & 8)
+              ? null !== injectedProfilingHooks &&
+                "function" ===
+                  typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped &&
+                injectedProfilingHooks.markComponentPassiveEffectUnmountStopped()
+              : 0 !== (flags & 4) &&
+                null !== injectedProfilingHooks &&
+                "function" ===
+                  typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped &&
+                injectedProfilingHooks.markComponentLayoutEffectUnmountStopped();
+          }
+        }
+        updateQueue = updateQueue.next;
+      } while (updateQueue !== firstEffect);
+    }
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+function commitHookPassiveMountEffects(finishedWork, hookFlags) {
+  shouldProfile(finishedWork)
+    ? (startEffectTimer(),
+      commitHookEffectListMount(hookFlags, finishedWork),
+      recordEffectDuration())
+    : commitHookEffectListMount(hookFlags, finishedWork);
+}
+function commitHookPassiveUnmountEffects(
+  finishedWork,
+  nearestMountedAncestor,
+  hookFlags
+) {
+  shouldProfile(finishedWork)
+    ? (startEffectTimer(),
+      commitHookEffectListUnmount(
+        hookFlags,
+        finishedWork,
+        nearestMountedAncestor
+      ),
+      recordEffectDuration())
+    : commitHookEffectListUnmount(
+        hookFlags,
+        finishedWork,
+        nearestMountedAncestor
+      );
+}
+function commitClassCallbacks(finishedWork) {
+  var updateQueue = finishedWork.updateQueue;
+  if (null !== updateQueue) {
+    var instance = finishedWork.stateNode;
+    try {
+      commitCallbacks(updateQueue, instance);
+    } catch (error) {
+      captureCommitPhaseError(finishedWork, finishedWork.return, error);
+    }
+  }
+}
+function safelyCallComponentWillUnmount(
+  current,
+  nearestMountedAncestor,
+  instance
+) {
+  instance.props = resolveClassComponentProps(
+    current.type,
+    current.memoizedProps
+  );
+  instance.state = current.memoizedState;
+  if (shouldProfile(current)) {
+    startEffectTimer();
+    try {
+      instance.componentWillUnmount();
+    } catch (error) {
+      captureCommitPhaseError(current, nearestMountedAncestor, error);
+    }
+    recordEffectDuration();
+  } else
+    try {
+      instance.componentWillUnmount();
+    } catch (error$153) {
+      captureCommitPhaseError(current, nearestMountedAncestor, error$153);
+    }
+}
+function safelyAttachRef(current, nearestMountedAncestor) {
+  try {
+    var ref = current.ref;
+    if (null !== ref) {
+      switch (current.tag) {
+        case 26:
+        case 27:
+        case 5:
+          var instanceToUse = current.stateNode;
+          break;
+        case 30:
+          instanceToUse = current.stateNode;
+          break;
+        default:
+          instanceToUse = current.stateNode;
+      }
+      if ("function" === typeof ref)
+        if (shouldProfile(current))
+          try {
+            startEffectTimer(), (current.refCleanup = ref(instanceToUse));
+          } finally {
+            recordEffectDuration();
+          }
+        else current.refCleanup = ref(instanceToUse);
+      else ref.current = instanceToUse;
+    }
+  } catch (error) {
+    captureCommitPhaseError(current, nearestMountedAncestor, error);
+  }
+}
+function safelyDetachRef(current, nearestMountedAncestor) {
+  var ref = current.ref,
+    refCleanup = current.refCleanup;
+  if (null !== ref)
+    if ("function" === typeof refCleanup)
+      try {
+        if (shouldProfile(current))
+          try {
+            startEffectTimer(), refCleanup();
+          } finally {
+            recordEffectDuration(current);
+          }
+        else refCleanup();
+      } catch (error) {
+        captureCommitPhaseError(current, nearestMountedAncestor, error);
+      } finally {
+        (current.refCleanup = null),
+          (current = current.alternate),
+          null != current && (current.refCleanup = null);
+      }
+    else if ("function" === typeof ref)
+      try {
+        if (shouldProfile(current))
+          try {
+            startEffectTimer(), ref(null);
+          } finally {
+            recordEffectDuration(current);
+          }
+        else ref(null);
+      } catch (error$154) {
+        captureCommitPhaseError(current, nearestMountedAncestor, error$154);
+      }
+    else ref.current = null;
+}
+function commitProfilerUpdate(
+  finishedWork,
+  current,
+  commitStartTime,
+  effectDuration
+) {
+  try {
+    var _finishedWork$memoize = finishedWork.memoizedProps,
+      id = _finishedWork$memoize.id,
+      onCommit = _finishedWork$memoize.onCommit,
+      onRender = _finishedWork$memoize.onRender;
+    current = null === current ? "mount" : "update";
+    currentUpdateIsNested && (current = "nested-update");
+    "function" === typeof onRender &&
+      onRender(
+        id,
+        current,
+        finishedWork.actualDuration,
+        finishedWork.treeBaseDuration,
+        finishedWork.actualStartTime,
+        commitStartTime
+      );
+    "function" === typeof onCommit &&
+      onCommit(
+        finishedWork.memoizedProps.id,
+        current,
+        effectDuration,
+        commitStartTime
+      );
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+function commitHostMount(finishedWork) {
+  var type = finishedWork.type,
+    props = finishedWork.memoizedProps,
+    instance = finishedWork.stateNode;
+  try {
+    a: switch (type) {
+      case "button":
+      case "input":
+      case "select":
+      case "textarea":
+        props.autoFocus && instance.focus();
+        break a;
+      case "img":
+        props.src
+          ? (instance.src = props.src)
+          : props.srcSet && (instance.srcset = props.srcSet);
+    }
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+function commitHostUpdate(finishedWork, newProps, oldProps) {
+  try {
+    var domElement = finishedWork.stateNode;
+    updateProperties(domElement, finishedWork.type, oldProps, newProps);
+    domElement[internalPropsKey] = newProps;
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+function isHostParent(fiber) {
+  return (
+    5 === fiber.tag ||
+    3 === fiber.tag ||
+    26 === fiber.tag ||
+    (27 === fiber.tag && isSingletonScope(fiber.type)) ||
+    4 === fiber.tag
+  );
+}
+function getHostSibling(fiber) {
+  a: for (;;) {
+    for (; null === fiber.sibling; ) {
+      if (null === fiber.return || isHostParent(fiber.return)) return null;
+      fiber = fiber.return;
+    }
+    fiber.sibling.return = fiber.return;
+    for (
+      fiber = fiber.sibling;
+      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;
+
+    ) {
+      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;
+      if (fiber.flags & 2) continue a;
+      if (null === fiber.child || 4 === fiber.tag) continue a;
+      else (fiber.child.return = fiber), (fiber = fiber.child);
+    }
+    if (!(fiber.flags & 2)) return fiber.stateNode;
+  }
+}
+function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {
+  var tag = node.tag;
+  if (5 === tag || 6 === tag)
+    (node = node.stateNode),
+      before
+        ? (9 === parent.nodeType
+            ? parent.body
+            : "HTML" === parent.nodeName
+              ? parent.ownerDocument.body
+              : parent
+          ).insertBefore(node, before)
+        : ((before =
+            9 === parent.nodeType
+              ? parent.body
+              : "HTML" === parent.nodeName
+                ? parent.ownerDocument.body
+                : parent),
+          before.appendChild(node),
+          (parent = parent._reactRootContainer),
+          (null !== parent && void 0 !== parent) ||
+            null !== before.onclick ||
+            (before.onclick = noop$2));
+  else if (
+    4 !== tag &&
+    (27 === tag &&
+      isSingletonScope(node.type) &&
+      ((parent = node.stateNode), (before = null)),
+    (node = node.child),
+    null !== node)
+  )
+    for (
+      insertOrAppendPlacementNodeIntoContainer(node, before, parent),
+        node = node.sibling;
+      null !== node;
+
+    )
+      insertOrAppendPlacementNodeIntoContainer(node, before, parent),
+        (node = node.sibling);
+}
+function insertOrAppendPlacementNode(node, before, parent) {
+  var tag = node.tag;
+  if (5 === tag || 6 === tag)
+    (node = node.stateNode),
+      before ? parent.insertBefore(node, before) : parent.appendChild(node);
+  else if (
+    4 !== tag &&
+    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),
+    (node = node.child),
+    null !== node)
+  )
+    for (
+      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;
+      null !== node;
+
+    )
+      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);
+}
+function commitHostSingletonAcquisition(finishedWork) {
+  var singleton = finishedWork.stateNode,
+    props = finishedWork.memoizedProps;
+  try {
+    for (
+      var type = finishedWork.type, attributes = singleton.attributes;
+      attributes.length;
+
+    )
+      singleton.removeAttributeNode(attributes[0]);
+    setInitialProperties(singleton, type, props);
+    singleton[internalInstanceKey] = finishedWork;
+    singleton[internalPropsKey] = props;
+  } catch (error) {
+    captureCommitPhaseError(finishedWork, finishedWork.return, error);
+  }
+}
+var offscreenSubtreeIsHidden = !1,
+  offscreenSubtreeWasHidden = !1,
+  needsFormReset = !1,
+  PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set,
+  nextEffect = null,
+  inProgressLanes = null,
+  inProgressRoot = null;
+function commitBeforeMutationEffects(root, firstChild) {
+  root = root.containerInfo;
+  eventsEnabled = _enabled;
+  root = getActiveElementDeep(root);
+  if (hasSelectionCapabilities(root)) {
+    if ("selectionStart" in root)
+      var JSCompiler_temp = {
+        start: root.selectionStart,
+        end: root.selectionEnd
+      };
+    else
+      a: {
+        JSCompiler_temp =
+          ((JSCompiler_temp = root.ownerDocument) &&
+            JSCompiler_temp.defaultView) ||
+          window;
+        var selection =
+          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();
+        if (selection && 0 !== selection.rangeCount) {
+          JSCompiler_temp = selection.anchorNode;
+          var anchorOffset = selection.anchorOffset,
+            focusNode = selection.focusNode;
+          selection = selection.focusOffset;
+          try {
+            JSCompiler_temp.nodeType, focusNode.nodeType;
+          } catch (e$22) {
+            JSCompiler_temp = null;
+            break a;
+          }
+          var length = 0,
+            start = -1,
+            end = -1,
+            indexWithinAnchor = 0,
+            indexWithinFocus = 0,
+            node = root,
+            parentNode = null;
+          b: for (;;) {
+            for (var next; ; ) {
+              node !== JSCompiler_temp ||
+                (0 !== anchorOffset && 3 !== node.nodeType) ||
+                (start = length + anchorOffset);
+              node !== focusNode ||
+                (0 !== selection && 3 !== node.nodeType) ||
+                (end = length + selection);
+              3 === node.nodeType && (length += node.nodeValue.length);
+              if (null === (next = node.firstChild)) break;
+              parentNode = node;
+              node = next;
+            }
+            for (;;) {
+              if (node === root) break b;
+              parentNode === JSCompiler_temp &&
+                ++indexWithinAnchor === anchorOffset &&
+                (start = length);
+              parentNode === focusNode &&
+                ++indexWithinFocus === selection &&
+                (end = length);
+              if (null !== (next = node.nextSibling)) break;
+              node = parentNode;
+              parentNode = node.parentNode;
+            }
+            node = next;
+          }
+          JSCompiler_temp =
+            -1 === start || -1 === end ? null : { start: start, end: end };
+        } else JSCompiler_temp = null;
+      }
+    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };
+  } else JSCompiler_temp = null;
+  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };
+  _enabled = !1;
+  for (nextEffect = firstChild; null !== nextEffect; )
+    if (
+      ((firstChild = nextEffect),
+      (root = firstChild.child),
+      0 !== (firstChild.subtreeFlags & 1024) && null !== root)
+    )
+      (root.return = firstChild), (nextEffect = root);
+    else
+      for (; null !== nextEffect; ) {
+        firstChild = nextEffect;
+        focusNode = firstChild.alternate;
+        root = firstChild.flags;
+        switch (firstChild.tag) {
+          case 0:
+            break;
+          case 11:
+          case 15:
+            break;
+          case 1:
+            if (0 !== (root & 1024) && null !== focusNode) {
+              root = void 0;
+              JSCompiler_temp = firstChild;
+              anchorOffset = focusNode.memoizedProps;
+              focusNode = focusNode.memoizedState;
+              selection = JSCompiler_temp.stateNode;
+              try {
+                var resolvedPrevProps = resolveClassComponentProps(
+                  JSCompiler_temp.type,
+                  anchorOffset,
+                  JSCompiler_temp.elementType === JSCompiler_temp.type
+                );
+                root = selection.getSnapshotBeforeUpdate(
+                  resolvedPrevProps,
+                  focusNode
+                );
+                selection.__reactInternalSnapshotBeforeUpdate = root;
+              } catch (error) {
+                captureCommitPhaseError(
+                  JSCompiler_temp,
+                  JSCompiler_temp.return,
+                  error
+                );
+              }
+            }
+            break;
+          case 3:
+            if (0 !== (root & 1024))
+              if (
+                ((root = firstChild.stateNode.containerInfo),
+                (JSCompiler_temp = root.nodeType),
+                9 === JSCompiler_temp)
+              )
+                clearContainerSparingly(root);
+              else if (1 === JSCompiler_temp)
+                switch (root.nodeName) {
+                  case "HEAD":
+                  case "HTML":
+                  case "BODY":
+                    clearContainerSparingly(root);
+                    break;
+                  default:
+                    root.textContent = "";
+                }
+            break;
+          case 5:
+          case 26:
+          case 27:
+          case 6:
+          case 4:
+          case 17:
+            break;
+          default:
+            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));
+        }
+        root = firstChild.sibling;
+        if (null !== root) {
+          root.return = firstChild.return;
+          nextEffect = root;
+          break;
+        }
+        nextEffect = firstChild.return;
+      }
+}
+function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {
+  var flags = finishedWork.flags;
+  switch (finishedWork.tag) {
+    case 0:
+    case 11:
+    case 15:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      flags & 4 && commitHookLayoutEffects(finishedWork, 5);
+      break;
+    case 1:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      if (flags & 4)
+        if (((finishedRoot = finishedWork.stateNode), null === current))
+          if (shouldProfile(finishedWork)) {
+            startEffectTimer();
+            try {
+              finishedRoot.componentDidMount();
+            } catch (error) {
+              captureCommitPhaseError(finishedWork, finishedWork.return, error);
+            }
+            recordEffectDuration();
+          } else
+            try {
+              finishedRoot.componentDidMount();
+            } catch (error$150) {
+              captureCommitPhaseError(
+                finishedWork,
+                finishedWork.return,
+                error$150
+              );
+            }
+        else {
+          var prevProps = resolveClassComponentProps(
+            finishedWork.type,
+            current.memoizedProps
+          );
+          current = current.memoizedState;
+          if (shouldProfile(finishedWork)) {
+            startEffectTimer();
+            try {
+              finishedRoot.componentDidUpdate(
+                prevProps,
+                current,
+                finishedRoot.__reactInternalSnapshotBeforeUpdate
+              );
+            } catch (error$151) {
+              captureCommitPhaseError(
+                finishedWork,
+                finishedWork.return,
+                error$151
+              );
+            }
+            recordEffectDuration();
+          } else
+            try {
+              finishedRoot.componentDidUpdate(
+                prevProps,
+                current,
+                finishedRoot.__reactInternalSnapshotBeforeUpdate
+              );
+            } catch (error$152) {
+              captureCommitPhaseError(
+                finishedWork,
+                finishedWork.return,
+                error$152
+              );
+            }
+        }
+      flags & 64 && commitClassCallbacks(finishedWork);
+      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);
+      break;
+    case 3:
+      current = pushNestedEffectDurations();
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      if (flags & 64 && ((flags = finishedWork.updateQueue), null !== flags)) {
+        prevProps = null;
+        if (null !== finishedWork.child)
+          switch (finishedWork.child.tag) {
+            case 27:
+            case 5:
+              prevProps = finishedWork.child.stateNode;
+              break;
+            case 1:
+              prevProps = finishedWork.child.stateNode;
+          }
+        try {
+          commitCallbacks(flags, prevProps);
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      }
+      finishedRoot.effectDuration += popNestedEffectDurations(current);
+      break;
+    case 27:
+      null === current &&
+        flags & 4 &&
+        commitHostSingletonAcquisition(finishedWork);
+    case 26:
+    case 5:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      null === current && flags & 4 && commitHostMount(finishedWork);
+      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);
+      break;
+    case 12:
+      flags & 4
+        ? ((flags = pushNestedEffectDurations()),
+          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork),
+          (finishedRoot = finishedWork.stateNode),
+          (finishedRoot.effectDuration += bubbleNestedEffectDurations(flags)),
+          commitProfilerUpdate(
+            finishedWork,
+            current,
+            commitStartTime,
+            finishedRoot.effectDuration
+          ))
+        : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      break;
+    case 13:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
+      flags & 64 &&
+        ((finishedRoot = finishedWork.memoizedState),
+        null !== finishedRoot &&
+          ((finishedRoot = finishedRoot.dehydrated),
+          null !== finishedRoot &&
+            ((finishedWork = retryDehydratedSuspenseBoundary.bind(
+              null,
+              finishedWork
+            )),
+            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));
+      break;
+    case 22:
+      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;
+      if (!flags) {
+        current =
+          (null !== current && null !== current.memoizedState) ||
+          offscreenSubtreeWasHidden;
+        prevProps = offscreenSubtreeIsHidden;
+        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
+        offscreenSubtreeIsHidden = flags;
+        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden
+          ? recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              0 !== (finishedWork.subtreeFlags & 8772)
+            )
+          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+        offscreenSubtreeIsHidden = prevProps;
+        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
+      }
+      break;
+    case 30:
+      break;
+    default:
+      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
+  }
+}
+function detachFiberAfterEffects(fiber) {
+  var alternate = fiber.alternate;
+  null !== alternate &&
+    ((fiber.alternate = null), detachFiberAfterEffects(alternate));
+  fiber.child = null;
+  fiber.deletions = null;
+  fiber.sibling = null;
+  5 === fiber.tag &&
+    ((alternate = fiber.stateNode),
+    null !== alternate && detachDeletedInstance(alternate));
+  fiber.stateNode = null;
+  fiber.return = null;
+  fiber.dependencies = null;
+  fiber.memoizedProps = null;
+  fiber.memoizedState = null;
+  fiber.pendingProps = null;
+  fiber.stateNode = null;
+  fiber.updateQueue = null;
+}
+var hostParent = null,
+  hostParentIsContainer = !1;
+function recursivelyTraverseDeletionEffects(
+  finishedRoot,
+  nearestMountedAncestor,
+  parent
+) {
+  for (parent = parent.child; null !== parent; )
+    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),
+      (parent = parent.sibling);
+}
+function commitDeletionEffectsOnFiber(
+  finishedRoot,
+  nearestMountedAncestor,
+  deletedFiber
+) {
+  if (injectedHook && "function" === typeof injectedHook.onCommitFiberUnmount)
+    try {
+      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);
+    } catch (err) {}
+  switch (deletedFiber.tag) {
+    case 26:
+      offscreenSubtreeWasHidden ||
+        safelyDetachRef(deletedFiber, nearestMountedAncestor);
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      deletedFiber.memoizedState
+        ? deletedFiber.memoizedState.count--
+        : deletedFiber.stateNode &&
+          ((deletedFiber = deletedFiber.stateNode),
+          deletedFiber.parentNode.removeChild(deletedFiber));
+      break;
+    case 27:
+      offscreenSubtreeWasHidden ||
+        safelyDetachRef(deletedFiber, nearestMountedAncestor);
+      var prevHostParent = hostParent,
+        prevHostParentIsContainer = hostParentIsContainer;
+      isSingletonScope(deletedFiber.type) &&
+        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      releaseSingletonInstance(deletedFiber.stateNode);
+      hostParent = prevHostParent;
+      hostParentIsContainer = prevHostParentIsContainer;
+      break;
+    case 5:
+      offscreenSubtreeWasHidden ||
+        safelyDetachRef(deletedFiber, nearestMountedAncestor);
+    case 6:
+      prevHostParent = hostParent;
+      prevHostParentIsContainer = hostParentIsContainer;
+      hostParent = null;
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      hostParent = prevHostParent;
+      hostParentIsContainer = prevHostParentIsContainer;
+      if (null !== hostParent)
+        if (hostParentIsContainer)
+          try {
+            (9 === hostParent.nodeType
+              ? hostParent.body
+              : "HTML" === hostParent.nodeName
+                ? hostParent.ownerDocument.body
+                : hostParent
+            ).removeChild(deletedFiber.stateNode);
+          } catch (error) {
+            captureCommitPhaseError(
+              deletedFiber,
+              nearestMountedAncestor,
+              error
+            );
+          }
+        else
+          try {
+            hostParent.removeChild(deletedFiber.stateNode);
+          } catch (error) {
+            captureCommitPhaseError(
+              deletedFiber,
+              nearestMountedAncestor,
+              error
+            );
+          }
+      break;
+    case 18:
+      null !== hostParent &&
+        (hostParentIsContainer
+          ? ((finishedRoot = hostParent),
+            clearSuspenseBoundary(
+              9 === finishedRoot.nodeType
+                ? finishedRoot.body
+                : "HTML" === finishedRoot.nodeName
+                  ? finishedRoot.ownerDocument.body
+                  : finishedRoot,
+              deletedFiber.stateNode
+            ),
+            retryIfBlockedOn(finishedRoot))
+          : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));
+      break;
+    case 4:
+      prevHostParent = hostParent;
+      prevHostParentIsContainer = hostParentIsContainer;
+      hostParent = deletedFiber.stateNode.containerInfo;
+      hostParentIsContainer = !0;
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      hostParent = prevHostParent;
+      hostParentIsContainer = prevHostParentIsContainer;
+      break;
+    case 0:
+    case 11:
+    case 14:
+    case 15:
+      offscreenSubtreeWasHidden ||
+        commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);
+      offscreenSubtreeWasHidden ||
+        commitHookLayoutUnmountEffects(deletedFiber, nearestMountedAncestor, 4);
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      break;
+    case 1:
+      offscreenSubtreeWasHidden ||
+        (safelyDetachRef(deletedFiber, nearestMountedAncestor),
+        (prevHostParent = deletedFiber.stateNode),
+        "function" === typeof prevHostParent.componentWillUnmount &&
+          safelyCallComponentWillUnmount(
+            deletedFiber,
+            nearestMountedAncestor,
+            prevHostParent
+          ));
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      break;
+    case 21:
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      break;
+    case 22:
+      offscreenSubtreeWasHidden =
+        (prevHostParent = offscreenSubtreeWasHidden) ||
+        null !== deletedFiber.memoizedState;
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+      offscreenSubtreeWasHidden = prevHostParent;
+      break;
+    default:
+      recursivelyTraverseDeletionEffects(
+        finishedRoot,
+        nearestMountedAncestor,
+        deletedFiber
+      );
+  }
+}
+function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {
+  if (
+    null === finishedWork.memoizedState &&
+    ((finishedRoot = finishedWork.alternate),
+    null !== finishedRoot &&
+      ((finishedRoot = finishedRoot.memoizedState),
+      null !== finishedRoot &&
+        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))
+  )
+    try {
+      retryIfBlockedOn(finishedRoot);
+    } catch (error) {
+      captureCommitPhaseError(finishedWork, finishedWork.return, error);
+    }
+}
+function getRetryCache(finishedWork) {
+  switch (finishedWork.tag) {
+    case 13:
+    case 19:
+      var retryCache = finishedWork.stateNode;
+      null === retryCache &&
+        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());
+      return retryCache;
+    case 22:
+      return (
+        (finishedWork = finishedWork.stateNode),
+        (retryCache = finishedWork._retryCache),
+        null === retryCache &&
+          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),
+        retryCache
+      );
+    default:
+      throw Error(formatProdErrorMessage(435, finishedWork.tag));
+  }
+}
+function attachSuspenseRetryListeners(finishedWork, wakeables) {
+  var retryCache = getRetryCache(finishedWork);
+  wakeables.forEach(function (wakeable) {
+    var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);
+    if (!retryCache.has(wakeable)) {
+      retryCache.add(wakeable);
+      if (isDevToolsPresent)
+        if (null !== inProgressLanes && null !== inProgressRoot)
+          restorePendingUpdaters(inProgressRoot, inProgressLanes);
+        else throw Error(formatProdErrorMessage(413));
+      wakeable.then(retry, retry);
+    }
+  });
+}
+function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {
+  var deletions = parentFiber.deletions;
+  if (null !== deletions)
+    for (var i = 0; i < deletions.length; i++) {
+      var childToDelete = deletions[i],
+        root = root$jscomp$0,
+        returnFiber = parentFiber,
+        parent = returnFiber;
+      a: for (; null !== parent; ) {
+        switch (parent.tag) {
+          case 27:
+            if (isSingletonScope(parent.type)) {
+              hostParent = parent.stateNode;
+              hostParentIsContainer = !1;
+              break a;
+            }
+            break;
+          case 5:
+            hostParent = parent.stateNode;
+            hostParentIsContainer = !1;
+            break a;
+          case 3:
+          case 4:
+            hostParent = parent.stateNode.containerInfo;
+            hostParentIsContainer = !0;
+            break a;
+        }
+        parent = parent.return;
+      }
+      if (null === hostParent) throw Error(formatProdErrorMessage(160));
+      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);
+      hostParent = null;
+      hostParentIsContainer = !1;
+      root = childToDelete.alternate;
+      null !== root && (root.return = null);
+      childToDelete.return = null;
+    }
+  if (parentFiber.subtreeFlags & 13878)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),
+        (parentFiber = parentFiber.sibling);
+}
+var currentHoistableRoot = null;
+function commitMutationEffectsOnFiber(finishedWork, root) {
+  var current = finishedWork.alternate,
+    flags = finishedWork.flags;
+  switch (finishedWork.tag) {
+    case 0:
+    case 11:
+    case 14:
+    case 15:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 4 &&
+        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),
+        commitHookEffectListMount(3, finishedWork),
+        commitHookLayoutUnmountEffects(finishedWork, finishedWork.return, 5));
+      break;
+    case 1:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 512 &&
+        (offscreenSubtreeWasHidden ||
+          null === current ||
+          safelyDetachRef(current, current.return));
+      flags & 64 &&
+        offscreenSubtreeIsHidden &&
+        ((finishedWork = finishedWork.updateQueue),
+        null !== finishedWork &&
+          ((flags = finishedWork.callbacks),
+          null !== flags &&
+            ((current = finishedWork.shared.hiddenCallbacks),
+            (finishedWork.shared.hiddenCallbacks =
+              null === current ? flags : current.concat(flags)))));
+      break;
+    case 26:
+      var hoistableRoot = currentHoistableRoot;
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 512 &&
+        (offscreenSubtreeWasHidden ||
+          null === current ||
+          safelyDetachRef(current, current.return));
+      if (flags & 4)
+        if (
+          ((root = null !== current ? current.memoizedState : null),
+          (flags = finishedWork.memoizedState),
+          null === current)
+        )
+          if (null === flags)
+            if (null === finishedWork.stateNode) {
+              a: {
+                flags = finishedWork.type;
+                current = finishedWork.memoizedProps;
+                root = hoistableRoot.ownerDocument || hoistableRoot;
+                b: switch (flags) {
+                  case "title":
+                    hoistableRoot = root.getElementsByTagName("title")[0];
+                    if (
+                      !hoistableRoot ||
+                      hoistableRoot[internalHoistableMarker] ||
+                      hoistableRoot[internalInstanceKey] ||
+                      "http://www.w3.org/2000/svg" ===
+                        hoistableRoot.namespaceURI ||
+                      hoistableRoot.hasAttribute("itemprop")
+                    )
+                      (hoistableRoot = root.createElement(flags)),
+                        root.head.insertBefore(
+                          hoistableRoot,
+                          root.querySelector("head > title")
+                        );
+                    setInitialProperties(hoistableRoot, flags, current);
+                    hoistableRoot[internalInstanceKey] = finishedWork;
+                    markNodeAsHoistable(hoistableRoot);
+                    flags = hoistableRoot;
+                    break a;
+                  case "link":
+                    var maybeNodes = getHydratableHoistableCache(
+                      "link",
+                      "href",
+                      root
+                    ).get(flags + (current.href || ""));
+                    if (maybeNodes)
+                      for (var i = 0; i < maybeNodes.length; i++)
+                        if (
+                          ((hoistableRoot = maybeNodes[i]),
+                          hoistableRoot.getAttribute("href") ===
+                            (null == current.href || "" === current.href
+                              ? null
+                              : current.href) &&
+                            hoistableRoot.getAttribute("rel") ===
+                              (null == current.rel ? null : current.rel) &&
+                            hoistableRoot.getAttribute("title") ===
+                              (null == current.title ? null : current.title) &&
+                            hoistableRoot.getAttribute("crossorigin") ===
+                              (null == current.crossOrigin
+                                ? null
+                                : current.crossOrigin))
+                        ) {
+                          maybeNodes.splice(i, 1);
+                          break b;
+                        }
+                    hoistableRoot = root.createElement(flags);
+                    setInitialProperties(hoistableRoot, flags, current);
+                    root.head.appendChild(hoistableRoot);
+                    break;
+                  case "meta":
+                    if (
+                      (maybeNodes = getHydratableHoistableCache(
+                        "meta",
+                        "content",
+                        root
+                      ).get(flags + (current.content || "")))
+                    )
+                      for (i = 0; i < maybeNodes.length; i++)
+                        if (
+                          ((hoistableRoot = maybeNodes[i]),
+                          hoistableRoot.getAttribute("content") ===
+                            (null == current.content
+                              ? null
+                              : "" + current.content) &&
+                            hoistableRoot.getAttribute("name") ===
+                              (null == current.name ? null : current.name) &&
+                            hoistableRoot.getAttribute("property") ===
+                              (null == current.property
+                                ? null
+                                : current.property) &&
+                            hoistableRoot.getAttribute("http-equiv") ===
+                              (null == current.httpEquiv
+                                ? null
+                                : current.httpEquiv) &&
+                            hoistableRoot.getAttribute("charset") ===
+                              (null == current.charSet
+                                ? null
+                                : current.charSet))
+                        ) {
+                          maybeNodes.splice(i, 1);
+                          break b;
+                        }
+                    hoistableRoot = root.createElement(flags);
+                    setInitialProperties(hoistableRoot, flags, current);
+                    root.head.appendChild(hoistableRoot);
+                    break;
+                  default:
+                    throw Error(formatProdErrorMessage(468, flags));
+                }
+                hoistableRoot[internalInstanceKey] = finishedWork;
+                markNodeAsHoistable(hoistableRoot);
+                flags = hoistableRoot;
+              }
+              finishedWork.stateNode = flags;
+            } else
+              mountHoistable(
+                hoistableRoot,
+                finishedWork.type,
+                finishedWork.stateNode
+              );
+          else
+            finishedWork.stateNode = acquireResource(
+              hoistableRoot,
+              flags,
+              finishedWork.memoizedProps
+            );
+        else
+          root !== flags
+            ? (null === root
+                ? null !== current.stateNode &&
+                  ((current = current.stateNode),
+                  current.parentNode.removeChild(current))
+                : root.count--,
+              null === flags
+                ? mountHoistable(
+                    hoistableRoot,
+                    finishedWork.type,
+                    finishedWork.stateNode
+                  )
+                : acquireResource(
+                    hoistableRoot,
+                    flags,
+                    finishedWork.memoizedProps
+                  ))
+            : null === flags &&
+              null !== finishedWork.stateNode &&
+              commitHostUpdate(
+                finishedWork,
+                finishedWork.memoizedProps,
+                current.memoizedProps
+              );
+      break;
+    case 27:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 512 &&
+        (offscreenSubtreeWasHidden ||
+          null === current ||
+          safelyDetachRef(current, current.return));
+      null !== current &&
+        flags & 4 &&
+        commitHostUpdate(
+          finishedWork,
+          finishedWork.memoizedProps,
+          current.memoizedProps
+        );
+      break;
+    case 5:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 512 &&
+        (offscreenSubtreeWasHidden ||
+          null === current ||
+          safelyDetachRef(current, current.return));
+      if (finishedWork.flags & 32) {
+        root = finishedWork.stateNode;
+        try {
+          setTextContent(root, "");
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      }
+      flags & 4 &&
+        null != finishedWork.stateNode &&
+        ((root = finishedWork.memoizedProps),
+        commitHostUpdate(
+          finishedWork,
+          root,
+          null !== current ? current.memoizedProps : root
+        ));
+      flags & 1024 && (needsFormReset = !0);
+      break;
+    case 6:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      if (flags & 4) {
+        if (null === finishedWork.stateNode)
+          throw Error(formatProdErrorMessage(162));
+        flags = finishedWork.memoizedProps;
+        current = finishedWork.stateNode;
+        try {
+          current.nodeValue = flags;
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      }
+      break;
+    case 3:
+      hoistableRoot = pushNestedEffectDurations();
+      tagCaches = null;
+      maybeNodes = currentHoistableRoot;
+      currentHoistableRoot = getHoistableRoot(root.containerInfo);
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      currentHoistableRoot = maybeNodes;
+      commitReconciliationEffects(finishedWork);
+      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)
+        try {
+          retryIfBlockedOn(root.containerInfo);
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      needsFormReset &&
+        ((needsFormReset = !1), recursivelyResetForms(finishedWork));
+      root.effectDuration += popNestedEffectDurations(hoistableRoot);
+      break;
+    case 4:
+      flags = currentHoistableRoot;
+      currentHoistableRoot = getHoistableRoot(
+        finishedWork.stateNode.containerInfo
+      );
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      currentHoistableRoot = flags;
+      break;
+    case 12:
+      flags = pushNestedEffectDurations();
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      finishedWork.stateNode.effectDuration +=
+        bubbleNestedEffectDurations(flags);
+      break;
+    case 13:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      finishedWork.child.flags & 8192 &&
+        (null !== finishedWork.memoizedState) !==
+          (null !== current && null !== current.memoizedState) &&
+        (globalMostRecentFallbackTime = now$1());
+      flags & 4 &&
+        ((flags = finishedWork.updateQueue),
+        null !== flags &&
+          ((finishedWork.updateQueue = null),
+          attachSuspenseRetryListeners(finishedWork, flags)));
+      break;
+    case 22:
+      hoistableRoot = null !== finishedWork.memoizedState;
+      var wasHidden = null !== current && null !== current.memoizedState,
+        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,
+        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
+      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;
+      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
+      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;
+      commitReconciliationEffects(finishedWork);
+      if (flags & 8192)
+        a: for (
+          root = finishedWork.stateNode,
+            root._visibility = hoistableRoot
+              ? root._visibility & -2
+              : root._visibility | 1,
+            hoistableRoot &&
+              (null === current ||
+                wasHidden ||
+                offscreenSubtreeIsHidden ||
+                offscreenSubtreeWasHidden ||
+                recursivelyTraverseDisappearLayoutEffects(finishedWork)),
+            current = null,
+            root = finishedWork;
+          ;
+
+        ) {
+          if (5 === root.tag || 26 === root.tag) {
+            if (null === current) {
+              wasHidden = current = root;
+              try {
+                if (((maybeNodes = wasHidden.stateNode), hoistableRoot))
+                  (i = maybeNodes.style),
+                    "function" === typeof i.setProperty
+                      ? i.setProperty("display", "none", "important")
+                      : (i.display = "none");
+                else {
+                  var instance = wasHidden.stateNode,
+                    styleProp = wasHidden.memoizedProps.style,
+                    display =
+                      void 0 !== styleProp &&
+                      null !== styleProp &&
+                      styleProp.hasOwnProperty("display")
+                        ? styleProp.display
+                        : null;
+                  instance.style.display =
+                    null == display || "boolean" === typeof display
+                      ? ""
+                      : ("" + display).trim();
+                }
+              } catch (error) {
+                captureCommitPhaseError(wasHidden, wasHidden.return, error);
+              }
+            }
+          } else if (6 === root.tag) {
+            if (null === current) {
+              wasHidden = root;
+              try {
+                wasHidden.stateNode.nodeValue = hoistableRoot
+                  ? ""
+                  : wasHidden.memoizedProps;
+              } catch (error) {
+                captureCommitPhaseError(wasHidden, wasHidden.return, error);
+              }
+            }
+          } else if (
+            ((22 !== root.tag && 23 !== root.tag) ||
+              null === root.memoizedState ||
+              root === finishedWork) &&
+            null !== root.child
+          ) {
+            root.child.return = root;
+            root = root.child;
+            continue;
+          }
+          if (root === finishedWork) break a;
+          for (; null === root.sibling; ) {
+            if (null === root.return || root.return === finishedWork) break a;
+            current === root && (current = null);
+            root = root.return;
+          }
+          current === root && (current = null);
+          root.sibling.return = root.return;
+          root = root.sibling;
+        }
+      flags & 4 &&
+        ((flags = finishedWork.updateQueue),
+        null !== flags &&
+          ((current = flags.retryQueue),
+          null !== current &&
+            ((flags.retryQueue = null),
+            attachSuspenseRetryListeners(finishedWork, current))));
+      break;
+    case 19:
+      recursivelyTraverseMutationEffects(root, finishedWork);
+      commitReconciliationEffects(finishedWork);
+      flags & 4 &&
+        ((flags = finishedWork.updateQueue),
+        null !== flags &&
+          ((finishedWork.updateQueue = null),
+          attachSuspenseRetryListeners(finishedWork, flags)));
+      break;
+    case 30:
+      break;
+    case 21:
+      break;
+    default:
+      recursivelyTraverseMutationEffects(root, finishedWork),
+        commitReconciliationEffects(finishedWork);
+  }
+}
+function commitReconciliationEffects(finishedWork) {
+  var flags = finishedWork.flags;
+  if (flags & 2) {
+    try {
+      for (
+        var hostParentFiber, parentFiber = finishedWork.return;
+        null !== parentFiber;
+
+      ) {
+        if (isHostParent(parentFiber)) {
+          hostParentFiber = parentFiber;
+          break;
+        }
+        parentFiber = parentFiber.return;
+      }
+      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));
+      switch (hostParentFiber.tag) {
+        case 27:
+          var parent = hostParentFiber.stateNode,
+            before = getHostSibling(finishedWork);
+          insertOrAppendPlacementNode(finishedWork, before, parent);
+          break;
+        case 5:
+          var parent$155 = hostParentFiber.stateNode;
+          hostParentFiber.flags & 32 &&
+            (setTextContent(parent$155, ""), (hostParentFiber.flags &= -33));
+          var before$156 = getHostSibling(finishedWork);
+          insertOrAppendPlacementNode(finishedWork, before$156, parent$155);
+          break;
+        case 3:
+        case 4:
+          var parent$157 = hostParentFiber.stateNode.containerInfo,
+            before$158 = getHostSibling(finishedWork);
+          insertOrAppendPlacementNodeIntoContainer(
+            finishedWork,
+            before$158,
+            parent$157
+          );
+          break;
+        default:
+          throw Error(formatProdErrorMessage(161));
+      }
+    } catch (error) {
+      captureCommitPhaseError(finishedWork, finishedWork.return, error);
+    }
+    finishedWork.flags &= -3;
+  }
+  flags & 4096 && (finishedWork.flags &= -4097);
+}
+function recursivelyResetForms(parentFiber) {
+  if (parentFiber.subtreeFlags & 1024)
+    for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+      var fiber = parentFiber;
+      recursivelyResetForms(fiber);
+      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();
+      parentFiber = parentFiber.sibling;
+    }
+}
+function recursivelyTraverseLayoutEffects(root, parentFiber) {
+  if (parentFiber.subtreeFlags & 8772)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),
+        (parentFiber = parentFiber.sibling);
+}
+function recursivelyTraverseDisappearLayoutEffects(parentFiber) {
+  for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+    var finishedWork = parentFiber;
+    switch (finishedWork.tag) {
+      case 0:
+      case 11:
+      case 14:
+      case 15:
+        commitHookLayoutUnmountEffects(finishedWork, finishedWork.return, 4);
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      case 1:
+        safelyDetachRef(finishedWork, finishedWork.return);
+        var instance = finishedWork.stateNode;
+        "function" === typeof instance.componentWillUnmount &&
+          safelyCallComponentWillUnmount(
+            finishedWork,
+            finishedWork.return,
+            instance
+          );
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      case 27:
+        releaseSingletonInstance(finishedWork.stateNode);
+      case 26:
+      case 5:
+        safelyDetachRef(finishedWork, finishedWork.return);
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      case 22:
+        null === finishedWork.memoizedState &&
+          recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      case 30:
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+        break;
+      default:
+        recursivelyTraverseDisappearLayoutEffects(finishedWork);
+    }
+    parentFiber = parentFiber.sibling;
+  }
+}
+function recursivelyTraverseReappearLayoutEffects(
+  finishedRoot$jscomp$0,
+  parentFiber,
+  includeWorkInProgressEffects
+) {
+  includeWorkInProgressEffects =
+    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);
+  for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+    var current = parentFiber.alternate,
+      finishedRoot = finishedRoot$jscomp$0,
+      finishedWork = parentFiber,
+      flags = finishedWork.flags;
+    switch (finishedWork.tag) {
+      case 0:
+      case 11:
+      case 15:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+        commitHookLayoutEffects(finishedWork, 4);
+        break;
+      case 1:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+        current = finishedWork;
+        finishedRoot = current.stateNode;
+        if ("function" === typeof finishedRoot.componentDidMount)
+          try {
+            finishedRoot.componentDidMount();
+          } catch (error) {
+            captureCommitPhaseError(current, current.return, error);
+          }
+        current = finishedWork;
+        finishedRoot = current.updateQueue;
+        if (null !== finishedRoot) {
+          var instance = current.stateNode;
+          try {
+            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;
+            if (null !== hiddenCallbacks)
+              for (
+                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;
+                finishedRoot < hiddenCallbacks.length;
+                finishedRoot++
+              )
+                callCallback(hiddenCallbacks[finishedRoot], instance);
+          } catch (error) {
+            captureCommitPhaseError(current, current.return, error);
+          }
+        }
+        includeWorkInProgressEffects &&
+          flags & 64 &&
+          commitClassCallbacks(finishedWork);
+        safelyAttachRef(finishedWork, finishedWork.return);
+        break;
+      case 27:
+        commitHostSingletonAcquisition(finishedWork);
+      case 26:
+      case 5:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+        includeWorkInProgressEffects &&
+          null === current &&
+          flags & 4 &&
+          commitHostMount(finishedWork);
+        safelyAttachRef(finishedWork, finishedWork.return);
+        break;
+      case 12:
+        includeWorkInProgressEffects && flags & 4
+          ? ((flags = pushNestedEffectDurations()),
+            recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              includeWorkInProgressEffects
+            ),
+            (finishedRoot = finishedWork.stateNode),
+            (finishedRoot.effectDuration += bubbleNestedEffectDurations(flags)),
+            commitProfilerUpdate(
+              finishedWork,
+              current,
+              commitStartTime,
+              finishedRoot.effectDuration
+            ))
+          : recursivelyTraverseReappearLayoutEffects(
+              finishedRoot,
+              finishedWork,
+              includeWorkInProgressEffects
+            );
+        break;
+      case 13:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+        includeWorkInProgressEffects &&
+          flags & 4 &&
+          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
+        break;
+      case 22:
+        null === finishedWork.memoizedState &&
+          recursivelyTraverseReappearLayoutEffects(
+            finishedRoot,
+            finishedWork,
+            includeWorkInProgressEffects
+          );
+        safelyAttachRef(finishedWork, finishedWork.return);
+        break;
+      case 30:
+        break;
+      default:
+        recursivelyTraverseReappearLayoutEffects(
+          finishedRoot,
+          finishedWork,
+          includeWorkInProgressEffects
+        );
+    }
+    parentFiber = parentFiber.sibling;
+  }
+}
+function commitOffscreenPassiveMountEffects(current, finishedWork) {
+  var previousCache = null;
+  null !== current &&
+    null !== current.memoizedState &&
+    null !== current.memoizedState.cachePool &&
+    (previousCache = current.memoizedState.cachePool.pool);
+  current = null;
+  null !== finishedWork.memoizedState &&
+    null !== finishedWork.memoizedState.cachePool &&
+    (current = finishedWork.memoizedState.cachePool.pool);
+  current !== previousCache &&
+    (null != current && current.refCount++,
+    null != previousCache && releaseCache(previousCache));
+}
+function commitCachePassiveMountEffect(current, finishedWork) {
+  current = null;
+  null !== finishedWork.alternate &&
+    (current = finishedWork.alternate.memoizedState.cache);
+  finishedWork = finishedWork.memoizedState.cache;
+  finishedWork !== current &&
+    (finishedWork.refCount++, null != current && releaseCache(current));
+}
+function recursivelyTraversePassiveMountEffects(
+  root,
+  parentFiber,
+  committedLanes,
+  committedTransitions
+) {
+  if (parentFiber.subtreeFlags & 10256)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      commitPassiveMountOnFiber(
+        root,
+        parentFiber,
+        committedLanes,
+        committedTransitions
+      ),
+        (parentFiber = parentFiber.sibling);
+}
+function commitPassiveMountOnFiber(
+  finishedRoot,
+  finishedWork,
+  committedLanes,
+  committedTransitions
+) {
+  var flags = finishedWork.flags;
+  switch (finishedWork.tag) {
+    case 0:
+    case 11:
+    case 15:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      flags & 2048 && commitHookPassiveMountEffects(finishedWork, 9);
+      break;
+    case 1:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      break;
+    case 3:
+      var prevEffectDuration = pushNestedEffectDurations();
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      flags & 2048 &&
+        ((committedLanes = null),
+        null !== finishedWork.alternate &&
+          (committedLanes = finishedWork.alternate.memoizedState.cache),
+        (finishedWork = finishedWork.memoizedState.cache),
+        finishedWork !== committedLanes &&
+          (finishedWork.refCount++,
+          null != committedLanes && releaseCache(committedLanes)));
+      finishedRoot.passiveEffectDuration +=
+        popNestedEffectDurations(prevEffectDuration);
+      break;
+    case 12:
+      if (flags & 2048) {
+        flags = pushNestedEffectDurations();
+        recursivelyTraversePassiveMountEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions
+        );
+        finishedRoot = finishedWork.stateNode;
+        finishedRoot.passiveEffectDuration +=
+          bubbleNestedEffectDurations(flags);
+        try {
+          prevEffectDuration = finishedWork.memoizedProps;
+          var id = prevEffectDuration.id,
+            onPostCommit = prevEffectDuration.onPostCommit,
+            phase = null === finishedWork.alternate ? "mount" : "update";
+          currentUpdateIsNested && (phase = "nested-update");
+          "function" === typeof onPostCommit &&
+            onPostCommit(
+              id,
+              phase,
+              finishedRoot.passiveEffectDuration,
+              commitStartTime
+            );
+        } catch (error) {
+          captureCommitPhaseError(finishedWork, finishedWork.return, error);
+        }
+      } else
+        recursivelyTraversePassiveMountEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions
+        );
+      break;
+    case 13:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      break;
+    case 23:
+      break;
+    case 22:
+      prevEffectDuration = finishedWork.stateNode;
+      id = finishedWork.alternate;
+      null !== finishedWork.memoizedState
+        ? prevEffectDuration._visibility & 2
+          ? recursivelyTraversePassiveMountEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions
+            )
+          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)
+        : prevEffectDuration._visibility & 2
+          ? recursivelyTraversePassiveMountEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions
+            )
+          : ((prevEffectDuration._visibility |= 2),
+            recursivelyTraverseReconnectPassiveEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions,
+              0 !== (finishedWork.subtreeFlags & 10256)
+            ));
+      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);
+      break;
+    case 24:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+      flags & 2048 &&
+        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+      break;
+    default:
+      recursivelyTraversePassiveMountEffects(
+        finishedRoot,
+        finishedWork,
+        committedLanes,
+        committedTransitions
+      );
+  }
+}
+function recursivelyTraverseReconnectPassiveEffects(
+  finishedRoot$jscomp$0,
+  parentFiber,
+  committedLanes$jscomp$0,
+  committedTransitions$jscomp$0,
+  includeWorkInProgressEffects
+) {
+  includeWorkInProgressEffects =
+    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 10256);
+  for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+    var finishedRoot = finishedRoot$jscomp$0,
+      finishedWork = parentFiber,
+      committedLanes = committedLanes$jscomp$0,
+      committedTransitions = committedTransitions$jscomp$0,
+      flags = finishedWork.flags;
+    switch (finishedWork.tag) {
+      case 0:
+      case 11:
+      case 15:
+        recursivelyTraverseReconnectPassiveEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions,
+          includeWorkInProgressEffects
+        );
+        commitHookPassiveMountEffects(finishedWork, 8);
+        break;
+      case 23:
+        break;
+      case 22:
+        var instance = finishedWork.stateNode;
+        null !== finishedWork.memoizedState
+          ? instance._visibility & 2
+            ? recursivelyTraverseReconnectPassiveEffects(
+                finishedRoot,
+                finishedWork,
+                committedLanes,
+                committedTransitions,
+                includeWorkInProgressEffects
+              )
+            : recursivelyTraverseAtomicPassiveEffects(
+                finishedRoot,
+                finishedWork
+              )
+          : ((instance._visibility |= 2),
+            recursivelyTraverseReconnectPassiveEffects(
+              finishedRoot,
+              finishedWork,
+              committedLanes,
+              committedTransitions,
+              includeWorkInProgressEffects
+            ));
+        includeWorkInProgressEffects &&
+          flags & 2048 &&
+          commitOffscreenPassiveMountEffects(
+            finishedWork.alternate,
+            finishedWork
+          );
+        break;
+      case 24:
+        recursivelyTraverseReconnectPassiveEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions,
+          includeWorkInProgressEffects
+        );
+        includeWorkInProgressEffects &&
+          flags & 2048 &&
+          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+        break;
+      default:
+        recursivelyTraverseReconnectPassiveEffects(
+          finishedRoot,
+          finishedWork,
+          committedLanes,
+          committedTransitions,
+          includeWorkInProgressEffects
+        );
+    }
+    parentFiber = parentFiber.sibling;
+  }
+}
+function recursivelyTraverseAtomicPassiveEffects(
+  finishedRoot$jscomp$0,
+  parentFiber
+) {
+  if (parentFiber.subtreeFlags & 10256)
+    for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+      var finishedRoot = finishedRoot$jscomp$0,
+        finishedWork = parentFiber,
+        flags = finishedWork.flags;
+      switch (finishedWork.tag) {
+        case 22:
+          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);
+          flags & 2048 &&
+            commitOffscreenPassiveMountEffects(
+              finishedWork.alternate,
+              finishedWork
+            );
+          break;
+        case 24:
+          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);
+          flags & 2048 &&
+            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);
+          break;
+        default:
+          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);
+      }
+      parentFiber = parentFiber.sibling;
+    }
+}
+var suspenseyCommitFlag = 8192;
+function recursivelyAccumulateSuspenseyCommit(parentFiber) {
+  if (parentFiber.subtreeFlags & suspenseyCommitFlag)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      accumulateSuspenseyCommitOnFiber(parentFiber),
+        (parentFiber = parentFiber.sibling);
+}
+function accumulateSuspenseyCommitOnFiber(fiber) {
+  switch (fiber.tag) {
+    case 26:
+      recursivelyAccumulateSuspenseyCommit(fiber);
+      fiber.flags & suspenseyCommitFlag &&
+        null !== fiber.memoizedState &&
+        suspendResource(
+          currentHoistableRoot,
+          fiber.memoizedState,
+          fiber.memoizedProps
+        );
+      break;
+    case 5:
+      recursivelyAccumulateSuspenseyCommit(fiber);
+      break;
+    case 3:
+    case 4:
+      var previousHoistableRoot = currentHoistableRoot;
+      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);
+      recursivelyAccumulateSuspenseyCommit(fiber);
+      currentHoistableRoot = previousHoistableRoot;
+      break;
+    case 22:
+      null === fiber.memoizedState &&
+        ((previousHoistableRoot = fiber.alternate),
+        null !== previousHoistableRoot &&
+        null !== previousHoistableRoot.memoizedState
+          ? ((previousHoistableRoot = suspenseyCommitFlag),
+            (suspenseyCommitFlag = 16777216),
+            recursivelyAccumulateSuspenseyCommit(fiber),
+            (suspenseyCommitFlag = previousHoistableRoot))
+          : recursivelyAccumulateSuspenseyCommit(fiber));
+      break;
+    default:
+      recursivelyAccumulateSuspenseyCommit(fiber);
+  }
+}
+function detachAlternateSiblings(parentFiber) {
+  var previousFiber = parentFiber.alternate;
+  if (
+    null !== previousFiber &&
+    ((parentFiber = previousFiber.child), null !== parentFiber)
+  ) {
+    previousFiber.child = null;
+    do
+      (previousFiber = parentFiber.sibling),
+        (parentFiber.sibling = null),
+        (parentFiber = previousFiber);
+    while (null !== parentFiber);
+  }
+}
+function recursivelyTraversePassiveUnmountEffects(parentFiber) {
+  var deletions = parentFiber.deletions;
+  if (0 !== (parentFiber.flags & 16)) {
+    if (null !== deletions)
+      for (var i = 0; i < deletions.length; i++) {
+        var childToDelete = deletions[i];
+        nextEffect = childToDelete;
+        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+          childToDelete,
+          parentFiber
+        );
+      }
+    detachAlternateSiblings(parentFiber);
+  }
+  if (parentFiber.subtreeFlags & 10256)
+    for (parentFiber = parentFiber.child; null !== parentFiber; )
+      commitPassiveUnmountOnFiber(parentFiber),
+        (parentFiber = parentFiber.sibling);
+}
+function commitPassiveUnmountOnFiber(finishedWork) {
+  switch (finishedWork.tag) {
+    case 0:
+    case 11:
+    case 15:
+      recursivelyTraversePassiveUnmountEffects(finishedWork);
+      finishedWork.flags & 2048 &&
+        commitHookPassiveUnmountEffects(finishedWork, finishedWork.return, 9);
+      break;
+    case 3:
+      var prevEffectDuration = pushNestedEffectDurations();
+      recursivelyTraversePassiveUnmountEffects(finishedWork);
+      finishedWork.stateNode.passiveEffectDuration +=
+        popNestedEffectDurations(prevEffectDuration);
+      break;
+    case 12:
+      prevEffectDuration = pushNestedEffectDurations();
+      recursivelyTraversePassiveUnmountEffects(finishedWork);
+      finishedWork.stateNode.passiveEffectDuration +=
+        bubbleNestedEffectDurations(prevEffectDuration);
+      break;
+    case 22:
+      prevEffectDuration = finishedWork.stateNode;
+      null !== finishedWork.memoizedState &&
+      prevEffectDuration._visibility & 2 &&
+      (null === finishedWork.return || 13 !== finishedWork.return.tag)
+        ? ((prevEffectDuration._visibility &= -3),
+          recursivelyTraverseDisconnectPassiveEffects(finishedWork))
+        : recursivelyTraversePassiveUnmountEffects(finishedWork);
+      break;
+    default:
+      recursivelyTraversePassiveUnmountEffects(finishedWork);
+  }
+}
+function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {
+  var deletions = parentFiber.deletions;
+  if (0 !== (parentFiber.flags & 16)) {
+    if (null !== deletions)
+      for (var i = 0; i < deletions.length; i++) {
+        var childToDelete = deletions[i];
+        nextEffect = childToDelete;
+        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+          childToDelete,
+          parentFiber
+        );
+      }
+    detachAlternateSiblings(parentFiber);
+  }
+  for (parentFiber = parentFiber.child; null !== parentFiber; ) {
+    deletions = parentFiber;
+    switch (deletions.tag) {
+      case 0:
+      case 11:
+      case 15:
+        commitHookPassiveUnmountEffects(deletions, deletions.return, 8);
+        recursivelyTraverseDisconnectPassiveEffects(deletions);
+        break;
+      case 22:
+        i = deletions.stateNode;
+        i._visibility & 2 &&
+          ((i._visibility &= -3),
+          recursivelyTraverseDisconnectPassiveEffects(deletions));
+        break;
+      default:
+        recursivelyTraverseDisconnectPassiveEffects(deletions);
+    }
+    parentFiber = parentFiber.sibling;
+  }
+}
+function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(
+  deletedSubtreeRoot,
+  nearestMountedAncestor
+) {
+  for (; null !== nextEffect; ) {
+    var fiber = nextEffect;
+    switch (fiber.tag) {
+      case 0:
+      case 11:
+      case 15:
+        commitHookPassiveUnmountEffects(fiber, nearestMountedAncestor, 8);
+        break;
+      case 23:
+      case 22:
+        if (
+          null !== fiber.memoizedState &&
+          null !== fiber.memoizedState.cachePool
+        ) {
+          var cache = fiber.memoizedState.cachePool.pool;
+          null != cache && cache.refCount++;
+        }
+        break;
+      case 24:
+        releaseCache(fiber.memoizedState.cache);
+    }
+    cache = fiber.child;
+    if (null !== cache) (cache.return = fiber), (nextEffect = cache);
+    else
+      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {
+        cache = nextEffect;
+        var sibling = cache.sibling,
+          returnFiber = cache.return;
+        detachFiberAfterEffects(cache);
+        if (cache === fiber) {
+          nextEffect = null;
+          break a;
+        }
+        if (null !== sibling) {
+          sibling.return = returnFiber;
+          nextEffect = sibling;
+          break a;
+        }
+        nextEffect = returnFiber;
+      }
+  }
+}
+var DefaultAsyncDispatcher = {
+    getCacheForType: function (resourceType) {
+      var cache = readContext(CacheContext),
+        cacheForType = cache.data.get(resourceType);
+      void 0 === cacheForType &&
+        ((cacheForType = resourceType()),
+        cache.data.set(resourceType, cacheForType));
+      return cacheForType;
+    }
+  },
+  PossiblyWeakMap = "function" === typeof WeakMap ? WeakMap : Map,
+  executionContext = 0,
+  workInProgressRoot = null,
+  workInProgress = null,
+  workInProgressRootRenderLanes = 0,
+  workInProgressSuspendedReason = 0,
+  workInProgressThrownValue = null,
+  workInProgressRootDidSkipSuspendedSiblings = !1,
+  workInProgressRootIsPrerendering = !1,
+  workInProgressRootDidAttachPingListener = !1,
+  entangledRenderLanes = 0,
+  workInProgressRootExitStatus = 0,
+  workInProgressRootSkippedLanes = 0,
+  workInProgressRootInterleavedUpdatedLanes = 0,
+  workInProgressRootPingedLanes = 0,
+  workInProgressDeferredLane = 0,
+  workInProgressSuspendedRetryLanes = 0,
+  workInProgressRootConcurrentErrors = null,
+  workInProgressRootRecoverableErrors = null,
+  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,
+  globalMostRecentFallbackTime = 0,
+  workInProgressRootRenderTargetTime = Infinity,
+  workInProgressTransitions = null,
+  legacyErrorBoundariesThatAlreadyFailed = null,
+  pendingEffectsStatus = 0,
+  pendingEffectsRoot = null,
+  pendingFinishedWork = null,
+  pendingEffectsLanes = 0,
+  pendingEffectsRemainingLanes = 0,
+  pendingPassiveTransitions = null,
+  pendingRecoverableErrors = null,
+  nestedUpdateCount = 0,
+  rootWithNestedUpdates = null;
+function requestUpdateLane() {
+  if (0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes)
+    return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;
+  if (null !== ReactSharedInternals.T) {
+    var actionScopeLane = currentEntangledLane;
+    return 0 !== actionScopeLane ? actionScopeLane : requestTransitionLane();
+  }
+  return resolveUpdatePriority();
+}
+function requestDeferredLane() {
+  0 === workInProgressDeferredLane &&
+    (workInProgressDeferredLane =
+      0 === (workInProgressRootRenderLanes & 536870912) || isHydrating
+        ? claimNextTransitionLane()
+        : 536870912);
+  var suspenseHandler = suspenseHandlerStackCursor.current;
+  null !== suspenseHandler && (suspenseHandler.flags |= 32);
+  return workInProgressDeferredLane;
+}
+function scheduleUpdateOnFiber(root, fiber, lane) {
+  if (
+    (root === workInProgressRoot &&
+      (2 === workInProgressSuspendedReason ||
+        9 === workInProgressSuspendedReason)) ||
+    null !== root.cancelPendingCommit
+  )
+    prepareFreshStack(root, 0),
+      markRootSuspended(
+        root,
+        workInProgressRootRenderLanes,
+        workInProgressDeferredLane,
+        !1
+      );
+  markRootUpdated$1(root, lane);
+  if (0 === (executionContext & 2) || root !== workInProgressRoot)
+    isDevToolsPresent && addFiberToLanesMap(root, fiber, lane),
+      root === workInProgressRoot &&
+        (0 === (executionContext & 2) &&
+          (workInProgressRootInterleavedUpdatedLanes |= lane),
+        4 === workInProgressRootExitStatus &&
+          markRootSuspended(
+            root,
+            workInProgressRootRenderLanes,
+            workInProgressDeferredLane,
+            !1
+          )),
+      ensureRootIsScheduled(root);
+}
+function performWorkOnRoot(root$jscomp$0, lanes, forceSync) {
+  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));
+  var shouldTimeSlice =
+      (!forceSync &&
+        0 === (lanes & 124) &&
+        0 === (lanes & root$jscomp$0.expiredLanes)) ||
+      checkIfRootIsPrerendering(root$jscomp$0, lanes),
+    exitStatus = shouldTimeSlice
+      ? renderRootConcurrent(root$jscomp$0, lanes)
+      : renderRootSync(root$jscomp$0, lanes, !0),
+    renderWasConcurrent = shouldTimeSlice;
+  do {
+    if (0 === exitStatus) {
+      workInProgressRootIsPrerendering &&
+        !shouldTimeSlice &&
+        markRootSuspended(root$jscomp$0, lanes, 0, !1);
+      break;
+    } else {
+      forceSync = root$jscomp$0.current.alternate;
+      if (
+        renderWasConcurrent &&
+        !isRenderConsistentWithExternalStores(forceSync)
+      ) {
+        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);
+        renderWasConcurrent = !1;
+        continue;
+      }
+      if (2 === exitStatus) {
+        renderWasConcurrent = lanes;
+        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)
+          var JSCompiler_inline_result = 0;
+        else
+          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),
+            (JSCompiler_inline_result =
+              0 !== JSCompiler_inline_result
+                ? JSCompiler_inline_result
+                : JSCompiler_inline_result & 536870912
+                  ? 536870912
+                  : 0);
+        if (0 !== JSCompiler_inline_result) {
+          lanes = JSCompiler_inline_result;
+          a: {
+            var root = root$jscomp$0;
+            exitStatus = workInProgressRootConcurrentErrors;
+            var wasRootDehydrated = root.current.memoizedState.isDehydrated;
+            wasRootDehydrated &&
+              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);
+            JSCompiler_inline_result = renderRootSync(
+              root,
+              JSCompiler_inline_result,
+              !1
+            );
+            if (2 !== JSCompiler_inline_result) {
+              if (
+                workInProgressRootDidAttachPingListener &&
+                !wasRootDehydrated
+              ) {
+                root.errorRecoveryDisabledLanes |= renderWasConcurrent;
+                workInProgressRootInterleavedUpdatedLanes |=
+                  renderWasConcurrent;
+                exitStatus = 4;
+                break a;
+              }
+              renderWasConcurrent = workInProgressRootRecoverableErrors;
+              workInProgressRootRecoverableErrors = exitStatus;
+              null !== renderWasConcurrent &&
+                (null === workInProgressRootRecoverableErrors
+                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)
+                  : workInProgressRootRecoverableErrors.push.apply(
+                      workInProgressRootRecoverableErrors,
+                      renderWasConcurrent
+                    ));
+            }
+            exitStatus = JSCompiler_inline_result;
+          }
+          renderWasConcurrent = !1;
+          if (2 !== exitStatus) continue;
+        }
+      }
+      if (1 === exitStatus) {
+        prepareFreshStack(root$jscomp$0, 0);
+        markRootSuspended(root$jscomp$0, lanes, 0, !0);
+        break;
+      }
+      a: {
+        shouldTimeSlice = root$jscomp$0;
+        renderWasConcurrent = exitStatus;
+        switch (renderWasConcurrent) {
+          case 0:
+          case 1:
+            throw Error(formatProdErrorMessage(345));
+          case 4:
+            if ((lanes & 4194048) !== lanes) break;
+          case 6:
+            markRootSuspended(
+              shouldTimeSlice,
+              lanes,
+              workInProgressDeferredLane,
+              !workInProgressRootDidSkipSuspendedSiblings
+            );
+            break a;
+          case 2:
+            workInProgressRootRecoverableErrors = null;
+            break;
+          case 3:
+          case 5:
+            break;
+          default:
+            throw Error(formatProdErrorMessage(329));
+        }
+        if (
+          (lanes & 62914560) === lanes &&
+          ((exitStatus = globalMostRecentFallbackTime + 300 - now$1()),
+          10 < exitStatus)
+        ) {
+          markRootSuspended(
+            shouldTimeSlice,
+            lanes,
+            workInProgressDeferredLane,
+            !workInProgressRootDidSkipSuspendedSiblings
+          );
+          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;
+          shouldTimeSlice.timeoutHandle = scheduleTimeout(
+            commitRootWhenReady.bind(
+              null,
+              shouldTimeSlice,
+              forceSync,
+              workInProgressRootRecoverableErrors,
+              workInProgressTransitions,
+              workInProgressRootDidIncludeRecursiveRenderUpdate,
+              lanes,
+              workInProgressDeferredLane,
+              workInProgressRootInterleavedUpdatedLanes,
+              workInProgressSuspendedRetryLanes,
+              workInProgressRootDidSkipSuspendedSiblings,
+              renderWasConcurrent,
+              2,
+              -0,
+              0
+            ),
+            exitStatus
+          );
+          break a;
+        }
+        commitRootWhenReady(
+          shouldTimeSlice,
+          forceSync,
+          workInProgressRootRecoverableErrors,
+          workInProgressTransitions,
+          workInProgressRootDidIncludeRecursiveRenderUpdate,
+          lanes,
+          workInProgressDeferredLane,
+          workInProgressRootInterleavedUpdatedLanes,
+          workInProgressSuspendedRetryLanes,
+          workInProgressRootDidSkipSuspendedSiblings,
+          renderWasConcurrent,
+          0,
+          -0,
+          0
+        );
+      }
+    }
+    break;
+  } while (1);
+  ensureRootIsScheduled(root$jscomp$0);
+}
+function commitRootWhenReady(
+  root,
+  finishedWork,
+  recoverableErrors,
+  transitions,
+  didIncludeRenderPhaseUpdate,
+  lanes,
+  spawnedLane,
+  updatedLanes,
+  suspendedRetryLanes,
+  didSkipSuspendedSiblings,
+  exitStatus,
+  suspendedCommitReason,
+  completedRenderStartTime,
+  completedRenderEndTime
+) {
+  root.timeoutHandle = -1;
+  suspendedCommitReason = finishedWork.subtreeFlags;
+  if (
+    suspendedCommitReason & 8192 ||
+    16785408 === (suspendedCommitReason & 16785408)
+  )
+    if (
+      ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop$1 }),
+      accumulateSuspenseyCommitOnFiber(finishedWork),
+      (suspendedCommitReason = waitForCommitToBeReady()),
+      null !== suspendedCommitReason)
+    ) {
+      root.cancelPendingCommit = suspendedCommitReason(
+        commitRoot.bind(
+          null,
+          root,
+          finishedWork,
+          lanes,
+          recoverableErrors,
+          transitions,
+          didIncludeRenderPhaseUpdate,
+          spawnedLane,
+          updatedLanes,
+          suspendedRetryLanes,
+          exitStatus,
+          1,
+          completedRenderStartTime,
+          completedRenderEndTime
+        )
+      );
+      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);
+      return;
+    }
+  commitRoot(
+    root,
+    finishedWork,
+    lanes,
+    recoverableErrors,
+    transitions,
+    didIncludeRenderPhaseUpdate,
+    spawnedLane,
+    updatedLanes,
+    suspendedRetryLanes
+  );
+}
+function isRenderConsistentWithExternalStores(finishedWork) {
+  for (var node = finishedWork; ; ) {
+    var tag = node.tag;
+    if (
+      (0 === tag || 11 === tag || 15 === tag) &&
+      node.flags & 16384 &&
+      ((tag = node.updateQueue),
+      null !== tag && ((tag = tag.stores), null !== tag))
+    )
+      for (var i = 0; i < tag.length; i++) {
+        var check = tag[i],
+          getSnapshot = check.getSnapshot;
+        check = check.value;
+        try {
+          if (!objectIs(getSnapshot(), check)) return !1;
+        } catch (error) {
+          return !1;
+        }
+      }
+    tag = node.child;
+    if (node.subtreeFlags & 16384 && null !== tag)
+      (tag.return = node), (node = tag);
+    else {
+      if (node === finishedWork) break;
+      for (; null === node.sibling; ) {
+        if (null === node.return || node.return === finishedWork) return !0;
+        node = node.return;
+      }
+      node.sibling.return = node.return;
+      node = node.sibling;
+    }
+  }
+  return !0;
+}
+function markRootSuspended(
+  root,
+  suspendedLanes,
+  spawnedLane,
+  didAttemptEntireTree
+) {
+  suspendedLanes &= ~workInProgressRootPingedLanes;
+  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;
+  root.suspendedLanes |= suspendedLanes;
+  root.pingedLanes &= ~suspendedLanes;
+  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);
+  didAttemptEntireTree = root.expirationTimes;
+  for (var lanes = suspendedLanes; 0 < lanes; ) {
+    var index$4 = 31 - clz32(lanes),
+      lane = 1 << index$4;
+    didAttemptEntireTree[index$4] = -1;
+    lanes &= ~lane;
+  }
+  0 !== spawnedLane &&
+    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);
+}
+function flushSyncWork$1() {
+  return 0 === (executionContext & 6)
+    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)
+    : !0;
+}
+function resetWorkInProgressStack() {
+  if (null !== workInProgress) {
+    if (0 === workInProgressSuspendedReason)
+      var interruptedWork = workInProgress.return;
+    else
+      (interruptedWork = workInProgress),
+        (lastContextDependency = currentlyRenderingFiber$1 = null),
+        resetHooksOnUnwind(interruptedWork),
+        (thenableState = null),
+        (thenableIndexCounter = 0),
+        (interruptedWork = workInProgress);
+    for (; null !== interruptedWork; )
+      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),
+        (interruptedWork = interruptedWork.return);
+    workInProgress = null;
+  }
+}
+function prepareFreshStack(root, lanes) {
+  var timeoutHandle = root.timeoutHandle;
+  -1 !== timeoutHandle &&
+    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));
+  timeoutHandle = root.cancelPendingCommit;
+  null !== timeoutHandle &&
+    ((root.cancelPendingCommit = null), timeoutHandle());
+  resetWorkInProgressStack();
+  workInProgressRoot = root;
+  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);
+  workInProgressRootRenderLanes = lanes;
+  workInProgressSuspendedReason = 0;
+  workInProgressThrownValue = null;
+  workInProgressRootDidSkipSuspendedSiblings = !1;
+  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);
+  workInProgressRootDidAttachPingListener = !1;
+  workInProgressSuspendedRetryLanes =
+    workInProgressDeferredLane =
+    workInProgressRootPingedLanes =
+    workInProgressRootInterleavedUpdatedLanes =
+    workInProgressRootSkippedLanes =
+    workInProgressRootExitStatus =
+      0;
+  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =
+    null;
+  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;
+  0 !== (lanes & 8) && (lanes |= lanes & 32);
+  var allEntangledLanes = root.entangledLanes;
+  if (0 !== allEntangledLanes)
+    for (
+      root = root.entanglements, allEntangledLanes &= lanes;
+      0 < allEntangledLanes;
+
+    ) {
+      var index$2 = 31 - clz32(allEntangledLanes),
+        lane = 1 << index$2;
+      lanes |= root[index$2];
+      allEntangledLanes &= ~lane;
+    }
+  entangledRenderLanes = lanes;
+  finishQueueingConcurrentUpdates();
+  return timeoutHandle;
+}
+function handleThrow(root, thrownValue) {
+  currentlyRenderingFiber = null;
+  ReactSharedInternals.H = ContextOnlyDispatcher;
+  thrownValue === SuspenseException || thrownValue === SuspenseActionException
+    ? ((thrownValue = getSuspendedThenable()),
+      (workInProgressSuspendedReason = 3))
+    : thrownValue === SuspenseyCommitException
+      ? ((thrownValue = getSuspendedThenable()),
+        (workInProgressSuspendedReason = 4))
+      : (workInProgressSuspendedReason =
+          thrownValue === SelectiveHydrationException
+            ? 8
+            : null !== thrownValue &&
+                "object" === typeof thrownValue &&
+                "function" === typeof thrownValue.then
+              ? 6
+              : 1);
+  workInProgressThrownValue = thrownValue;
+  var erroredWork = workInProgress;
+  if (null === erroredWork)
+    (workInProgressRootExitStatus = 1),
+      logUncaughtError(
+        root,
+        createCapturedValueAtFiber(thrownValue, root.current)
+      );
+  else
+    switch (
+      (erroredWork.mode & 2 &&
+        stopProfilerTimerIfRunningAndRecordDuration(erroredWork),
+      markComponentRenderStopped(),
+      workInProgressSuspendedReason)
+    ) {
+      case 1:
+        null !== injectedProfilingHooks &&
+          "function" === typeof injectedProfilingHooks.markComponentErrored &&
+          injectedProfilingHooks.markComponentErrored(
+            erroredWork,
+            thrownValue,
+            workInProgressRootRenderLanes
+          );
+        break;
+      case 2:
+      case 9:
+      case 3:
+      case 6:
+      case 7:
+        null !== injectedProfilingHooks &&
+          "function" === typeof injectedProfilingHooks.markComponentSuspended &&
+          injectedProfilingHooks.markComponentSuspended(
+            erroredWork,
+            thrownValue,
+            workInProgressRootRenderLanes
+          );
+    }
+}
+function pushDispatcher() {
+  var prevDispatcher = ReactSharedInternals.H;
+  ReactSharedInternals.H = ContextOnlyDispatcher;
+  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;
+}
+function pushAsyncDispatcher() {
+  var prevAsyncDispatcher = ReactSharedInternals.A;
+  ReactSharedInternals.A = DefaultAsyncDispatcher;
+  return prevAsyncDispatcher;
+}
+function renderDidSuspendDelayIfPossible() {
+  workInProgressRootExitStatus = 4;
+  workInProgressRootDidSkipSuspendedSiblings ||
+    ((workInProgressRootRenderLanes & 4194048) !==
+      workInProgressRootRenderLanes &&
+      null !== suspenseHandlerStackCursor.current) ||
+    (workInProgressRootIsPrerendering = !0);
+  (0 === (workInProgressRootSkippedLanes & 134217727) &&
+    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||
+    null === workInProgressRoot ||
+    markRootSuspended(
+      workInProgressRoot,
+      workInProgressRootRenderLanes,
+      workInProgressDeferredLane,
+      !1
+    );
+}
+function renderRootSync(root, lanes, shouldYieldForPrerendering) {
+  var prevExecutionContext = executionContext;
+  executionContext |= 2;
+  var prevDispatcher = pushDispatcher(),
+    prevAsyncDispatcher = pushAsyncDispatcher();
+  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {
+    if (isDevToolsPresent) {
+      var memoizedUpdaters = root.memoizedUpdaters;
+      0 < memoizedUpdaters.size &&
+        (restorePendingUpdaters(root, workInProgressRootRenderLanes),
+        memoizedUpdaters.clear());
+      movePendingFibersToMemoized(root, lanes);
+    }
+    workInProgressTransitions = null;
+    prepareFreshStack(root, lanes);
+  }
+  markRenderStarted(lanes);
+  lanes = !1;
+  memoizedUpdaters = workInProgressRootExitStatus;
+  a: do
+    try {
+      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {
+        var unitOfWork = workInProgress,
+          thrownValue = workInProgressThrownValue;
+        switch (workInProgressSuspendedReason) {
+          case 8:
+            resetWorkInProgressStack();
+            memoizedUpdaters = 6;
+            break a;
+          case 3:
+          case 2:
+          case 9:
+          case 6:
+            null === suspenseHandlerStackCursor.current && (lanes = !0);
+            var reason = workInProgressSuspendedReason;
+            workInProgressSuspendedReason = 0;
+            workInProgressThrownValue = null;
+            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);
+            if (
+              shouldYieldForPrerendering &&
+              workInProgressRootIsPrerendering
+            ) {
+              memoizedUpdaters = 0;
+              break a;
+            }
+            break;
+          default:
+            (reason = workInProgressSuspendedReason),
+              (workInProgressSuspendedReason = 0),
+              (workInProgressThrownValue = null),
+              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);
+        }
+      }
+      workLoopSync();
+      memoizedUpdaters = workInProgressRootExitStatus;
+      break;
+    } catch (thrownValue$182) {
+      handleThrow(root, thrownValue$182);
+    }
+  while (1);
+  lanes && root.shellSuspendCounter++;
+  lastContextDependency = currentlyRenderingFiber$1 = null;
+  executionContext = prevExecutionContext;
+  ReactSharedInternals.H = prevDispatcher;
+  ReactSharedInternals.A = prevAsyncDispatcher;
+  markRenderStopped();
+  null === workInProgress &&
+    ((workInProgressRoot = null),
+    (workInProgressRootRenderLanes = 0),
+    finishQueueingConcurrentUpdates());
+  return memoizedUpdaters;
+}
+function workLoopSync() {
+  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);
+}
+function renderRootConcurrent(root, lanes) {
+  var prevExecutionContext = executionContext;
+  executionContext |= 2;
+  var prevDispatcher = pushDispatcher(),
+    prevAsyncDispatcher = pushAsyncDispatcher();
+  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {
+    if (isDevToolsPresent) {
+      var memoizedUpdaters = root.memoizedUpdaters;
+      0 < memoizedUpdaters.size &&
+        (restorePendingUpdaters(root, workInProgressRootRenderLanes),
+        memoizedUpdaters.clear());
+      movePendingFibersToMemoized(root, lanes);
+    }
+    workInProgressTransitions = null;
+    workInProgressRootRenderTargetTime = now$1() + 500;
+    prepareFreshStack(root, lanes);
+  } else
+    workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);
+  markRenderStarted(lanes);
+  a: do
+    try {
+      if (0 !== workInProgressSuspendedReason && null !== workInProgress)
+        b: switch (
+          ((lanes = workInProgress),
+          (memoizedUpdaters = workInProgressThrownValue),
+          workInProgressSuspendedReason)
+        ) {
+          case 1:
+            workInProgressSuspendedReason = 0;
+            workInProgressThrownValue = null;
+            throwAndUnwindWorkLoop(root, lanes, memoizedUpdaters, 1);
+            break;
+          case 2:
+          case 9:
+            if (isThenableResolved(memoizedUpdaters)) {
+              workInProgressSuspendedReason = 0;
+              workInProgressThrownValue = null;
+              replaySuspendedUnitOfWork(lanes);
+              break;
+            }
+            lanes = function () {
+              (2 !== workInProgressSuspendedReason &&
+                9 !== workInProgressSuspendedReason) ||
+                workInProgressRoot !== root ||
+                (workInProgressSuspendedReason = 7);
+              ensureRootIsScheduled(root);
+            };
+            memoizedUpdaters.then(lanes, lanes);
+            break a;
+          case 3:
+            workInProgressSuspendedReason = 7;
+            break a;
+          case 4:
+            workInProgressSuspendedReason = 5;
+            break a;
+          case 7:
+            isThenableResolved(memoizedUpdaters)
+              ? ((workInProgressSuspendedReason = 0),
+                (workInProgressThrownValue = null),
+                replaySuspendedUnitOfWork(lanes))
+              : ((workInProgressSuspendedReason = 0),
+                (workInProgressThrownValue = null),
+                throwAndUnwindWorkLoop(root, lanes, memoizedUpdaters, 7));
+            break;
+          case 5:
+            var resource = null;
+            switch (workInProgress.tag) {
+              case 26:
+                resource = workInProgress.memoizedState;
+              case 5:
+              case 27:
+                var hostFiber = workInProgress;
+                if (resource ? preloadResource(resource) : 1) {
+                  workInProgressSuspendedReason = 0;
+                  workInProgressThrownValue = null;
+                  var sibling = hostFiber.sibling;
+                  if (null !== sibling) workInProgress = sibling;
+                  else {
+                    var returnFiber = hostFiber.return;
+                    null !== returnFiber
+                      ? ((workInProgress = returnFiber),
+                        completeUnitOfWork(returnFiber))
+                      : (workInProgress = null);
+                  }
+                  break b;
+                }
+            }
+            workInProgressSuspendedReason = 0;
+            workInProgressThrownValue = null;
+            throwAndUnwindWorkLoop(root, lanes, memoizedUpdaters, 5);
+            break;
+          case 6:
+            workInProgressSuspendedReason = 0;
+            workInProgressThrownValue = null;
+            throwAndUnwindWorkLoop(root, lanes, memoizedUpdaters, 6);
+            break;
+          case 8:
+            resetWorkInProgressStack();
+            workInProgressRootExitStatus = 6;
+            break a;
+          default:
+            throw Error(formatProdErrorMessage(462));
+        }
+      workLoopConcurrentByScheduler();
+      break;
+    } catch (thrownValue$184) {
+      handleThrow(root, thrownValue$184);
+    }
+  while (1);
+  lastContextDependency = currentlyRenderingFiber$1 = null;
+  ReactSharedInternals.H = prevDispatcher;
+  ReactSharedInternals.A = prevAsyncDispatcher;
+  executionContext = prevExecutionContext;
+  if (null !== workInProgress)
+    return (
+      null !== injectedProfilingHooks &&
+        "function" === typeof injectedProfilingHooks.markRenderYielded &&
+        injectedProfilingHooks.markRenderYielded(),
+      0
+    );
+  markRenderStopped();
+  workInProgressRoot = null;
+  workInProgressRootRenderLanes = 0;
+  finishQueueingConcurrentUpdates();
+  return workInProgressRootExitStatus;
+}
+function workLoopConcurrentByScheduler() {
+  for (; null !== workInProgress && !shouldYield(); )
+    performUnitOfWork(workInProgress);
+}
+function performUnitOfWork(unitOfWork) {
+  var current = unitOfWork.alternate;
+  0 !== (unitOfWork.mode & 2)
+    ? (startProfilerTimer(unitOfWork),
+      (current = beginWork(current, unitOfWork, entangledRenderLanes)),
+      stopProfilerTimerIfRunningAndRecordDuration(unitOfWork))
+    : (current = beginWork(current, unitOfWork, entangledRenderLanes));
+  unitOfWork.memoizedProps = unitOfWork.pendingProps;
+  null === current
+    ? completeUnitOfWork(unitOfWork)
+    : (workInProgress = current);
+}
+function replaySuspendedUnitOfWork(unitOfWork) {
+  var next = unitOfWork;
+  var current = next.alternate,
+    isProfilingMode = 0 !== (next.mode & 2);
+  isProfilingMode && startProfilerTimer(next);
+  switch (next.tag) {
+    case 15:
+    case 0:
+      current = replayFunctionComponent(
+        current,
+        next,
+        next.pendingProps,
+        next.type,
+        void 0,
+        workInProgressRootRenderLanes
+      );
+      break;
+    case 11:
+      current = replayFunctionComponent(
+        current,
+        next,
+        next.pendingProps,
+        next.type.render,
+        next.ref,
+        workInProgressRootRenderLanes
+      );
+      break;
+    case 5:
+      resetHooksOnUnwind(next);
+    default:
+      unwindInterruptedWork(current, next),
+        (next = workInProgress =
+          resetWorkInProgress(next, entangledRenderLanes)),
+        (current = beginWork(current, next, entangledRenderLanes));
+  }
+  isProfilingMode && stopProfilerTimerIfRunningAndRecordDuration(next);
+  next = current;
+  unitOfWork.memoizedProps = unitOfWork.pendingProps;
+  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);
+}
+function throwAndUnwindWorkLoop(
+  root,
+  unitOfWork,
+  thrownValue,
+  suspendedReason
+) {
+  lastContextDependency = currentlyRenderingFiber$1 = null;
+  resetHooksOnUnwind(unitOfWork);
+  thenableState = null;
+  thenableIndexCounter = 0;
+  var returnFiber = unitOfWork.return;
+  try {
+    if (
+      throwException(
+        root,
+        returnFiber,
+        unitOfWork,
+        thrownValue,
+        workInProgressRootRenderLanes
+      )
+    ) {
+      workInProgressRootExitStatus = 1;
+      logUncaughtError(
+        root,
+        createCapturedValueAtFiber(thrownValue, root.current)
+      );
+      workInProgress = null;
+      return;
+    }
+  } catch (error) {
+    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);
+    workInProgressRootExitStatus = 1;
+    logUncaughtError(
+      root,
+      createCapturedValueAtFiber(thrownValue, root.current)
+    );
+    workInProgress = null;
+    return;
+  }
+  if (unitOfWork.flags & 32768) {
+    if (isHydrating || 1 === suspendedReason) root = !0;
+    else if (
+      workInProgressRootIsPrerendering ||
+      0 !== (workInProgressRootRenderLanes & 536870912)
+    )
+      root = !1;
+    else if (
+      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),
+      2 === suspendedReason ||
+        9 === suspendedReason ||
+        3 === suspendedReason ||
+        6 === suspendedReason)
+    )
+      (suspendedReason = suspenseHandlerStackCursor.current),
+        null !== suspendedReason &&
+          13 === suspendedReason.tag &&
+          (suspendedReason.flags |= 16384);
+    unwindUnitOfWork(unitOfWork, root);
+  } else completeUnitOfWork(unitOfWork);
+}
+function completeUnitOfWork(unitOfWork) {
+  var completedWork = unitOfWork;
+  do {
+    if (0 !== (completedWork.flags & 32768)) {
+      unwindUnitOfWork(
+        completedWork,
+        workInProgressRootDidSkipSuspendedSiblings
+      );
+      return;
+    }
+    var current = completedWork.alternate;
+    unitOfWork = completedWork.return;
+    startProfilerTimer(completedWork);
+    current = completeWork(current, completedWork, entangledRenderLanes);
+    0 !== (completedWork.mode & 2) &&
+      stopProfilerTimerIfRunningAndRecordIncompleteDuration(completedWork);
+    if (null !== current) {
+      workInProgress = current;
+      return;
+    }
+    completedWork = completedWork.sibling;
+    if (null !== completedWork) {
+      workInProgress = completedWork;
+      return;
+    }
+    workInProgress = completedWork = unitOfWork;
+  } while (null !== completedWork);
+  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);
+}
+function unwindUnitOfWork(unitOfWork, skipSiblings) {
+  do {
+    var next = unwindWork(unitOfWork.alternate, unitOfWork);
+    if (null !== next) {
+      next.flags &= 32767;
+      workInProgress = next;
+      return;
+    }
+    if (0 !== (unitOfWork.mode & 2)) {
+      stopProfilerTimerIfRunningAndRecordIncompleteDuration(unitOfWork);
+      next = unitOfWork.actualDuration;
+      for (var child = unitOfWork.child; null !== child; )
+        (next += child.actualDuration), (child = child.sibling);
+      unitOfWork.actualDuration = next;
+    }
+    next = unitOfWork.return;
+    null !== next &&
+      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));
+    if (
+      !skipSiblings &&
+      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)
+    ) {
+      workInProgress = unitOfWork;
+      return;
+    }
+    workInProgress = unitOfWork = next;
+  } while (null !== unitOfWork);
+  workInProgressRootExitStatus = 6;
+  workInProgress = null;
+}
+function commitRoot(
+  root,
+  finishedWork,
+  lanes,
+  recoverableErrors,
+  transitions,
+  didIncludeRenderPhaseUpdate,
+  spawnedLane,
+  updatedLanes,
+  suspendedRetryLanes
+) {
+  root.cancelPendingCommit = null;
+  do flushPendingEffects();
+  while (0 !== pendingEffectsStatus);
+  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));
+  null !== injectedProfilingHooks &&
+    "function" === typeof injectedProfilingHooks.markCommitStarted &&
+    injectedProfilingHooks.markCommitStarted(lanes);
+  if (null === finishedWork) markCommitStopped();
+  else {
+    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));
+    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;
+    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;
+    markRootFinished(
+      root,
+      lanes,
+      didIncludeRenderPhaseUpdate,
+      spawnedLane,
+      updatedLanes,
+      suspendedRetryLanes
+    );
+    root === workInProgressRoot &&
+      ((workInProgress = workInProgressRoot = null),
+      (workInProgressRootRenderLanes = 0));
+    pendingFinishedWork = finishedWork;
+    pendingEffectsRoot = root;
+    pendingEffectsLanes = lanes;
+    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;
+    pendingPassiveTransitions = transitions;
+    pendingRecoverableErrors = recoverableErrors;
+    0 !== (finishedWork.subtreeFlags & 10256) ||
+    0 !== (finishedWork.flags & 10256)
+      ? ((root.callbackNode = null),
+        (root.callbackPriority = 0),
+        scheduleCallback$1(NormalPriority$1, function () {
+          flushPassiveEffects(!0);
+          return null;
+        }))
+      : ((root.callbackNode = null), (root.callbackPriority = 0));
+    commitStartTime = now();
+    recoverableErrors = 0 !== (finishedWork.flags & 13878);
+    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {
+      recoverableErrors = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      transitions = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p = 2;
+      spawnedLane = executionContext;
+      executionContext |= 4;
+      try {
+        commitBeforeMutationEffects(root, finishedWork, lanes);
+      } finally {
+        (executionContext = spawnedLane),
+          (ReactDOMSharedInternals.p = transitions),
+          (ReactSharedInternals.T = recoverableErrors);
+      }
+    }
+    pendingEffectsStatus = 1;
+    flushMutationEffects();
+    flushLayoutEffects();
+    flushSpawnedWork();
+  }
+}
+function flushMutationEffects() {
+  if (1 === pendingEffectsStatus) {
+    pendingEffectsStatus = 0;
+    var root = pendingEffectsRoot,
+      finishedWork = pendingFinishedWork,
+      lanes = pendingEffectsLanes,
+      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);
+    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {
+      rootMutationHasEffect = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      var previousPriority = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p = 2;
+      var prevExecutionContext = executionContext;
+      executionContext |= 4;
+      try {
+        inProgressLanes = lanes;
+        inProgressRoot = root;
+        commitMutationEffectsOnFiber(finishedWork, root);
+        inProgressRoot = inProgressLanes = null;
+        lanes = selectionInformation;
+        var curFocusedElem = getActiveElementDeep(root.containerInfo),
+          priorFocusedElem = lanes.focusedElem,
+          priorSelectionRange = lanes.selectionRange;
+        if (
+          curFocusedElem !== priorFocusedElem &&
+          priorFocusedElem &&
+          priorFocusedElem.ownerDocument &&
+          containsNode(
+            priorFocusedElem.ownerDocument.documentElement,
+            priorFocusedElem
+          )
+        ) {
+          if (
+            null !== priorSelectionRange &&
+            hasSelectionCapabilities(priorFocusedElem)
+          ) {
+            var start = priorSelectionRange.start,
+              end = priorSelectionRange.end;
+            void 0 === end && (end = start);
+            if ("selectionStart" in priorFocusedElem)
+              (priorFocusedElem.selectionStart = start),
+                (priorFocusedElem.selectionEnd = Math.min(
+                  end,
+                  priorFocusedElem.value.length
+                ));
+            else {
+              var doc = priorFocusedElem.ownerDocument || document,
+                win = (doc && doc.defaultView) || window;
+              if (win.getSelection) {
+                var selection = win.getSelection(),
+                  length = priorFocusedElem.textContent.length,
+                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),
+                  end$jscomp$0 =
+                    void 0 === priorSelectionRange.end
+                      ? start$jscomp$0
+                      : Math.min(priorSelectionRange.end, length);
+                !selection.extend &&
+                  start$jscomp$0 > end$jscomp$0 &&
+                  ((curFocusedElem = end$jscomp$0),
+                  (end$jscomp$0 = start$jscomp$0),
+                  (start$jscomp$0 = curFocusedElem));
+                var startMarker = getNodeForCharacterOffset(
+                    priorFocusedElem,
+                    start$jscomp$0
+                  ),
+                  endMarker = getNodeForCharacterOffset(
+                    priorFocusedElem,
+                    end$jscomp$0
+                  );
+                if (
+                  startMarker &&
+                  endMarker &&
+                  (1 !== selection.rangeCount ||
+                    selection.anchorNode !== startMarker.node ||
+                    selection.anchorOffset !== startMarker.offset ||
+                    selection.focusNode !== endMarker.node ||
+                    selection.focusOffset !== endMarker.offset)
+                ) {
+                  var range = doc.createRange();
+                  range.setStart(startMarker.node, startMarker.offset);
+                  selection.removeAllRanges();
+                  start$jscomp$0 > end$jscomp$0
+                    ? (selection.addRange(range),
+                      selection.extend(endMarker.node, endMarker.offset))
+                    : (range.setEnd(endMarker.node, endMarker.offset),
+                      selection.addRange(range));
+                }
+              }
+            }
+          }
+          doc = [];
+          for (
+            selection = priorFocusedElem;
+            (selection = selection.parentNode);
+
+          )
+            1 === selection.nodeType &&
+              doc.push({
+                element: selection,
+                left: selection.scrollLeft,
+                top: selection.scrollTop
+              });
+          "function" === typeof priorFocusedElem.focus &&
+            priorFocusedElem.focus();
+          for (
+            priorFocusedElem = 0;
+            priorFocusedElem < doc.length;
+            priorFocusedElem++
+          ) {
+            var info = doc[priorFocusedElem];
+            info.element.scrollLeft = info.left;
+            info.element.scrollTop = info.top;
+          }
+        }
+        _enabled = !!eventsEnabled;
+        selectionInformation = eventsEnabled = null;
+      } finally {
+        (executionContext = prevExecutionContext),
+          (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = rootMutationHasEffect);
+      }
+    }
+    root.current = finishedWork;
+    pendingEffectsStatus = 2;
+  }
+}
+function flushLayoutEffects() {
+  if (2 === pendingEffectsStatus) {
+    pendingEffectsStatus = 0;
+    var root = pendingEffectsRoot,
+      finishedWork = pendingFinishedWork,
+      lanes = pendingEffectsLanes,
+      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);
+    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {
+      rootHasLayoutEffect = ReactSharedInternals.T;
+      ReactSharedInternals.T = null;
+      var previousPriority = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p = 2;
+      var prevExecutionContext = executionContext;
+      executionContext |= 4;
+      try {
+        null !== injectedProfilingHooks &&
+          "function" ===
+            typeof injectedProfilingHooks.markLayoutEffectsStarted &&
+          injectedProfilingHooks.markLayoutEffectsStarted(lanes),
+          (inProgressLanes = lanes),
+          (inProgressRoot = root),
+          commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork),
+          (inProgressRoot = inProgressLanes = null),
+          null !== injectedProfilingHooks &&
+            "function" ===
+              typeof injectedProfilingHooks.markLayoutEffectsStopped &&
+            injectedProfilingHooks.markLayoutEffectsStopped();
+      } finally {
+        (executionContext = prevExecutionContext),
+          (ReactDOMSharedInternals.p = previousPriority),
+          (ReactSharedInternals.T = rootHasLayoutEffect);
+      }
+    }
+    pendingEffectsStatus = 3;
+  }
+}
+function flushSpawnedWork() {
+  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {
+    pendingEffectsStatus = 0;
+    requestPaint();
+    var root = pendingEffectsRoot,
+      finishedWork = pendingFinishedWork,
+      lanes = pendingEffectsLanes,
+      recoverableErrors = pendingRecoverableErrors;
+    0 !== (finishedWork.subtreeFlags & 10256) ||
+    0 !== (finishedWork.flags & 10256)
+      ? (pendingEffectsStatus = 5)
+      : ((pendingEffectsStatus = 0),
+        (pendingFinishedWork = pendingEffectsRoot = null),
+        releaseRootPooledCache(root, root.pendingLanes));
+    var remainingLanes = root.pendingLanes;
+    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);
+    remainingLanes = lanesToEventPriority(lanes);
+    finishedWork = finishedWork.stateNode;
+    if (injectedHook && "function" === typeof injectedHook.onCommitFiberRoot)
+      try {
+        var didError = 128 === (finishedWork.current.flags & 128);
+        switch (remainingLanes) {
+          case 2:
+            var schedulerPriority = ImmediatePriority;
+            break;
+          case 8:
+            schedulerPriority = UserBlockingPriority;
+            break;
+          case 32:
+            schedulerPriority = NormalPriority$1;
+            break;
+          case 268435456:
+            schedulerPriority = IdlePriority;
+            break;
+          default:
+            schedulerPriority = NormalPriority$1;
+        }
+        injectedHook.onCommitFiberRoot(
+          rendererID,
+          finishedWork,
+          schedulerPriority,
+          didError
+        );
+      } catch (err) {}
+    isDevToolsPresent && root.memoizedUpdaters.clear();
+    if (null !== recoverableErrors) {
+      didError = ReactSharedInternals.T;
+      schedulerPriority = ReactDOMSharedInternals.p;
+      ReactDOMSharedInternals.p = 2;
+      ReactSharedInternals.T = null;
+      try {
+        var onRecoverableError = root.onRecoverableError;
+        for (
+          finishedWork = 0;
+          finishedWork < recoverableErrors.length;
+          finishedWork++
+        ) {
+          var recoverableError = recoverableErrors[finishedWork];
+          onRecoverableError(recoverableError.value, {
+            componentStack: recoverableError.stack
+          });
+        }
+      } finally {
+        (ReactSharedInternals.T = didError),
+          (ReactDOMSharedInternals.p = schedulerPriority);
+      }
+    }
+    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();
+    ensureRootIsScheduled(root);
+    remainingLanes = root.pendingLanes;
+    0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)
+      ? ((nestedUpdateScheduled = !0),
+        root === rootWithNestedUpdates
+          ? nestedUpdateCount++
+          : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root)))
+      : (nestedUpdateCount = 0);
+    flushSyncWorkAcrossRoots_impl(0, !1);
+    markCommitStopped();
+  }
+}
+function releaseRootPooledCache(root, remainingLanes) {
+  0 === (root.pooledCacheLanes &= remainingLanes) &&
+    ((remainingLanes = root.pooledCache),
+    null != remainingLanes &&
+      ((root.pooledCache = null), releaseCache(remainingLanes)));
+}
+function flushPendingEffects(wasDelayedCommit) {
+  flushMutationEffects();
+  flushLayoutEffects();
+  flushSpawnedWork();
+  return flushPassiveEffects(wasDelayedCommit);
+}
+function flushPassiveEffects() {
+  if (5 !== pendingEffectsStatus) return !1;
+  var root = pendingEffectsRoot,
+    remainingLanes = pendingEffectsRemainingLanes;
+  pendingEffectsRemainingLanes = 0;
+  var renderPriority = lanesToEventPriority(pendingEffectsLanes),
+    prevTransition = ReactSharedInternals.T,
+    previousPriority = ReactDOMSharedInternals.p;
+  try {
+    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;
+    ReactSharedInternals.T = null;
+    renderPriority = pendingPassiveTransitions;
+    pendingPassiveTransitions = null;
+    var root$jscomp$0 = pendingEffectsRoot,
+      lanes = pendingEffectsLanes;
+    pendingEffectsStatus = 0;
+    pendingFinishedWork = pendingEffectsRoot = null;
+    pendingEffectsLanes = 0;
+    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));
+    null !== injectedProfilingHooks &&
+      "function" === typeof injectedProfilingHooks.markPassiveEffectsStarted &&
+      injectedProfilingHooks.markPassiveEffectsStarted(lanes);
+    var prevExecutionContext = executionContext;
+    executionContext |= 4;
+    commitPassiveUnmountOnFiber(root$jscomp$0.current);
+    commitPassiveMountOnFiber(
+      root$jscomp$0,
+      root$jscomp$0.current,
+      lanes,
+      renderPriority
+    );
+    null !== injectedProfilingHooks &&
+      "function" === typeof injectedProfilingHooks.markPassiveEffectsStopped &&
+      injectedProfilingHooks.markPassiveEffectsStopped();
+    executionContext = prevExecutionContext;
+    flushSyncWorkAcrossRoots_impl(0, !1);
+    if (
+      injectedHook &&
+      "function" === typeof injectedHook.onPostCommitFiberRoot
+    )
+      try {
+        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);
+      } catch (err) {}
+    var stateNode = root$jscomp$0.current.stateNode;
+    stateNode.effectDuration = 0;
+    stateNode.passiveEffectDuration = 0;
+    return !0;
+  } finally {
+    (ReactDOMSharedInternals.p = previousPriority),
+      (ReactSharedInternals.T = prevTransition),
+      releaseRootPooledCache(root, remainingLanes);
+  }
+}
+function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {
+  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);
+  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);
+  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);
+  null !== rootFiber &&
+    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));
+}
+function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {
+  if (3 === sourceFiber.tag)
+    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);
+  else
+    for (; null !== nearestMountedAncestor; ) {
+      if (3 === nearestMountedAncestor.tag) {
+        captureCommitPhaseErrorOnRoot(
+          nearestMountedAncestor,
+          sourceFiber,
+          error
+        );
+        break;
+      } else if (1 === nearestMountedAncestor.tag) {
+        var instance = nearestMountedAncestor.stateNode;
+        if (
+          "function" ===
+            typeof nearestMountedAncestor.type.getDerivedStateFromError ||
+          ("function" === typeof instance.componentDidCatch &&
+            (null === legacyErrorBoundariesThatAlreadyFailed ||
+              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))
+        ) {
+          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);
+          error = createClassErrorUpdate(2);
+          instance = enqueueUpdate(nearestMountedAncestor, error, 2);
+          null !== instance &&
+            (initializeClassErrorUpdate(
+              error,
+              instance,
+              nearestMountedAncestor,
+              sourceFiber
+            ),
+            markRootUpdated$1(instance, 2),
+            ensureRootIsScheduled(instance));
+          break;
+        }
+      }
+      nearestMountedAncestor = nearestMountedAncestor.return;
+    }
+}
+function attachPingListener(root, wakeable, lanes) {
+  var pingCache = root.pingCache;
+  if (null === pingCache) {
+    pingCache = root.pingCache = new PossiblyWeakMap();
+    var threadIDs = new Set();
+    pingCache.set(wakeable, threadIDs);
+  } else
+    (threadIDs = pingCache.get(wakeable)),
+      void 0 === threadIDs &&
+        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));
+  threadIDs.has(lanes) ||
+    ((workInProgressRootDidAttachPingListener = !0),
+    threadIDs.add(lanes),
+    (pingCache = pingSuspendedRoot.bind(null, root, wakeable, lanes)),
+    isDevToolsPresent && restorePendingUpdaters(root, lanes),
+    wakeable.then(pingCache, pingCache));
+}
+function pingSuspendedRoot(root, wakeable, pingedLanes) {
+  var pingCache = root.pingCache;
+  null !== pingCache && pingCache.delete(wakeable);
+  root.pingedLanes |= root.suspendedLanes & pingedLanes;
+  root.warmLanes &= ~pingedLanes;
+  workInProgressRoot === root &&
+    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&
+    (4 === workInProgressRootExitStatus ||
+    (3 === workInProgressRootExitStatus &&
+      (workInProgressRootRenderLanes & 62914560) ===
+        workInProgressRootRenderLanes &&
+      300 > now$1() - globalMostRecentFallbackTime)
+      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)
+      : (workInProgressRootPingedLanes |= pingedLanes),
+    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&
+      (workInProgressSuspendedRetryLanes = 0));
+  ensureRootIsScheduled(root);
+}
+function retryTimedOutBoundary(boundaryFiber, retryLane) {
+  0 === retryLane && (retryLane = claimNextRetryLane());
+  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);
+  null !== boundaryFiber &&
+    (markRootUpdated$1(boundaryFiber, retryLane),
+    ensureRootIsScheduled(boundaryFiber));
+}
+function retryDehydratedSuspenseBoundary(boundaryFiber) {
+  var suspenseState = boundaryFiber.memoizedState,
+    retryLane = 0;
+  null !== suspenseState && (retryLane = suspenseState.retryLane);
+  retryTimedOutBoundary(boundaryFiber, retryLane);
+}
+function resolveRetryWakeable(boundaryFiber, wakeable) {
+  var retryLane = 0;
+  switch (boundaryFiber.tag) {
+    case 13:
+      var retryCache = boundaryFiber.stateNode;
+      var suspenseState = boundaryFiber.memoizedState;
+      null !== suspenseState && (retryLane = suspenseState.retryLane);
+      break;
+    case 19:
+      retryCache = boundaryFiber.stateNode;
+      break;
+    case 22:
+      retryCache = boundaryFiber.stateNode._retryCache;
+      break;
+    default:
+      throw Error(formatProdErrorMessage(314));
+  }
+  null !== retryCache && retryCache.delete(wakeable);
+  retryTimedOutBoundary(boundaryFiber, retryLane);
+}
+function restorePendingUpdaters(root, lanes) {
+  isDevToolsPresent &&
+    root.memoizedUpdaters.forEach(function (schedulingFiber) {
+      addFiberToLanesMap(root, schedulingFiber, lanes);
+    });
+}
+function scheduleCallback$1(priorityLevel, callback) {
+  return scheduleCallback$3(priorityLevel, callback);
+}
+var firstScheduledRoot = null,
+  lastScheduledRoot = null,
+  didScheduleMicrotask = !1,
+  mightHavePendingSyncWork = !1,
+  isFlushingWork = !1,
+  currentEventTransitionLane = 0;
+function ensureRootIsScheduled(root) {
+  root !== lastScheduledRoot &&
+    null === root.next &&
+    (null === lastScheduledRoot
+      ? (firstScheduledRoot = lastScheduledRoot = root)
+      : (lastScheduledRoot = lastScheduledRoot.next = root));
+  mightHavePendingSyncWork = !0;
+  didScheduleMicrotask ||
+    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());
+}
+function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {
+  if (!isFlushingWork && mightHavePendingSyncWork) {
+    isFlushingWork = !0;
+    do {
+      var didPerformSomeWork = !1;
+      for (var root$189 = firstScheduledRoot; null !== root$189; ) {
+        if (!onlyLegacy)
+          if (0 !== syncTransitionLanes) {
+            var pendingLanes = root$189.pendingLanes;
+            if (0 === pendingLanes) var JSCompiler_inline_result = 0;
+            else {
+              var suspendedLanes = root$189.suspendedLanes,
+                pingedLanes = root$189.pingedLanes;
+              JSCompiler_inline_result =
+                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;
+              JSCompiler_inline_result &=
+                pendingLanes & ~(suspendedLanes & ~pingedLanes);
+              JSCompiler_inline_result =
+                JSCompiler_inline_result & 201326741
+                  ? (JSCompiler_inline_result & 201326741) | 1
+                  : JSCompiler_inline_result
+                    ? JSCompiler_inline_result | 2
+                    : 0;
+            }
+            0 !== JSCompiler_inline_result &&
+              ((didPerformSomeWork = !0),
+              performSyncWorkOnRoot(root$189, JSCompiler_inline_result));
+          } else
+            (JSCompiler_inline_result = workInProgressRootRenderLanes),
+              (JSCompiler_inline_result = getNextLanes(
+                root$189,
+                root$189 === workInProgressRoot ? JSCompiler_inline_result : 0,
+                null !== root$189.cancelPendingCommit ||
+                  -1 !== root$189.timeoutHandle
+              )),
+              0 === (JSCompiler_inline_result & 3) ||
+                checkIfRootIsPrerendering(root$189, JSCompiler_inline_result) ||
+                ((didPerformSomeWork = !0),
+                performSyncWorkOnRoot(root$189, JSCompiler_inline_result));
+        root$189 = root$189.next;
+      }
+    } while (didPerformSomeWork);
+    isFlushingWork = !1;
+  }
+}
+function processRootScheduleInImmediateTask() {
+  processRootScheduleInMicrotask();
+}
+function processRootScheduleInMicrotask() {
+  mightHavePendingSyncWork = didScheduleMicrotask = !1;
+  var syncTransitionLanes = 0;
+  0 !== currentEventTransitionLane &&
+    (shouldAttemptEagerTransition() &&
+      (syncTransitionLanes = currentEventTransitionLane),
+    (currentEventTransitionLane = 0));
+  for (
+    var currentTime = now$1(), prev = null, root = firstScheduledRoot;
+    null !== root;
+
+  ) {
+    var next = root.next,
+      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);
+    if (0 === nextLanes)
+      (root.next = null),
+        null === prev ? (firstScheduledRoot = next) : (prev.next = next),
+        null === next && (lastScheduledRoot = prev);
+    else if (
+      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))
+    )
+      mightHavePendingSyncWork = !0;
+    root = next;
+  }
+  flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);
+}
+function scheduleTaskForRootDuringMicrotask(root, currentTime) {
+  for (
+    var suspendedLanes = root.suspendedLanes,
+      pingedLanes = root.pingedLanes,
+      expirationTimes = root.expirationTimes,
+      lanes = root.pendingLanes & -62914561;
+    0 < lanes;
+
+  ) {
+    var index$3 = 31 - clz32(lanes),
+      lane = 1 << index$3,
+      expirationTime = expirationTimes[index$3];
+    if (-1 === expirationTime) {
+      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))
+        expirationTimes[index$3] = computeExpirationTime(lane, currentTime);
+    } else expirationTime <= currentTime && (root.expiredLanes |= lane);
+    lanes &= ~lane;
+  }
+  currentTime = workInProgressRoot;
+  suspendedLanes = workInProgressRootRenderLanes;
+  suspendedLanes = getNextLanes(
+    root,
+    root === currentTime ? suspendedLanes : 0,
+    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle
+  );
+  pingedLanes = root.callbackNode;
+  if (
+    0 === suspendedLanes ||
+    (root === currentTime &&
+      (2 === workInProgressSuspendedReason ||
+        9 === workInProgressSuspendedReason)) ||
+    null !== root.cancelPendingCommit
+  )
+    return (
+      null !== pingedLanes &&
+        null !== pingedLanes &&
+        cancelCallback$1(pingedLanes),
+      (root.callbackNode = null),
+      (root.callbackPriority = 0)
+    );
+  if (
+    0 === (suspendedLanes & 3) ||
+    checkIfRootIsPrerendering(root, suspendedLanes)
+  ) {
+    currentTime = suspendedLanes & -suspendedLanes;
+    if (currentTime === root.callbackPriority) return currentTime;
+    null !== pingedLanes && cancelCallback$1(pingedLanes);
+    switch (lanesToEventPriority(suspendedLanes)) {
+      case 2:
+      case 8:
+        suspendedLanes = UserBlockingPriority;
+        break;
+      case 32:
+        suspendedLanes = NormalPriority$1;
+        break;
+      case 268435456:
+        suspendedLanes = IdlePriority;
+        break;
+      default:
+        suspendedLanes = NormalPriority$1;
+    }
+    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);
+    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);
+    root.callbackPriority = currentTime;
+    root.callbackNode = suspendedLanes;
+    return currentTime;
+  }
+  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);
+  root.callbackPriority = 2;
+  root.callbackNode = null;
+  return 2;
+}
+function performWorkOnRootViaSchedulerTask(root, didTimeout) {
+  nestedUpdateScheduled = currentUpdateIsNested = !1;
+  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)
+    return (root.callbackNode = null), (root.callbackPriority = 0), null;
+  var originalCallbackNode = root.callbackNode;
+  if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)
+    return null;
+  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;
+  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(
+    root,
+    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,
+    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle
+  );
+  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;
+  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);
+  scheduleTaskForRootDuringMicrotask(root, now$1());
+  return null != root.callbackNode && root.callbackNode === originalCallbackNode
+    ? performWorkOnRootViaSchedulerTask.bind(null, root)
+    : null;
+}
+function performSyncWorkOnRoot(root, lanes) {
+  if (flushPendingEffects()) return null;
+  currentUpdateIsNested = nestedUpdateScheduled;
+  nestedUpdateScheduled = !1;
+  performWorkOnRoot(root, lanes, !0);
+}
+function scheduleImmediateRootScheduleTask() {
+  scheduleMicrotask(function () {
+    0 !== (executionContext & 6)
+      ? scheduleCallback$3(
+          ImmediatePriority,
+          processRootScheduleInImmediateTask
+        )
+      : processRootScheduleInMicrotask();
+  });
+}
+function requestTransitionLane() {
+  0 === currentEventTransitionLane &&
+    (currentEventTransitionLane = claimNextTransitionLane());
+  return currentEventTransitionLane;
+}
+function coerceFormActionProp(actionProp) {
+  return null == actionProp ||
+    "symbol" === typeof actionProp ||
+    "boolean" === typeof actionProp
+    ? null
+    : "function" === typeof actionProp
+      ? actionProp
+      : sanitizeURL("" + actionProp);
+}
+function createFormDataWithSubmitter(form, submitter) {
+  var temp = submitter.ownerDocument.createElement("input");
+  temp.name = submitter.name;
+  temp.value = submitter.value;
+  form.id && temp.setAttribute("form", form.id);
+  submitter.parentNode.insertBefore(temp, submitter);
+  form = new FormData(form);
+  temp.parentNode.removeChild(temp);
+  return form;
+}
+function extractEvents$1(
+  dispatchQueue,
+  domEventName,
+  maybeTargetInst,
+  nativeEvent,
+  nativeEventTarget
+) {
+  if (
+    "submit" === domEventName &&
+    maybeTargetInst &&
+    maybeTargetInst.stateNode === nativeEventTarget
+  ) {
+    var action = coerceFormActionProp(
+        (nativeEventTarget[internalPropsKey] || null).action
+      ),
+      submitter = nativeEvent.submitter;
+    submitter &&
+      ((domEventName = (domEventName = submitter[internalPropsKey] || null)
+        ? coerceFormActionProp(domEventName.formAction)
+        : submitter.getAttribute("formAction")),
+      null !== domEventName && ((action = domEventName), (submitter = null)));
+    var event = new SyntheticEvent(
+      "action",
+      "action",
+      null,
+      nativeEvent,
+      nativeEventTarget
+    );
+    dispatchQueue.push({
+      event: event,
+      listeners: [
+        {
+          instance: null,
+          listener: function () {
+            if (nativeEvent.defaultPrevented) {
+              if (0 !== currentEventTransitionLane) {
+                var formData = submitter
+                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)
+                  : new FormData(nativeEventTarget);
+                startHostTransition(
+                  maybeTargetInst,
+                  {
+                    pending: !0,
+                    data: formData,
+                    method: nativeEventTarget.method,
+                    action: action
+                  },
+                  null,
+                  formData
+                );
+              }
+            } else
+              "function" === typeof action &&
+                (event.preventDefault(),
+                (formData = submitter
+                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)
+                  : new FormData(nativeEventTarget)),
+                startHostTransition(
+                  maybeTargetInst,
+                  {
+                    pending: !0,
+                    data: formData,
+                    method: nativeEventTarget.method,
+                    action: action
+                  },
+                  action,
+                  formData
+                ));
+          },
+          currentTarget: nativeEventTarget
+        }
+      ]
+    });
+  }
+}
+for (
+  var i$jscomp$inline_1622 = 0;
+  i$jscomp$inline_1622 < simpleEventPluginEvents.length;
+  i$jscomp$inline_1622++
+) {
+  var eventName$jscomp$inline_1623 =
+      simpleEventPluginEvents[i$jscomp$inline_1622],
+    domEventName$jscomp$inline_1624 =
+      eventName$jscomp$inline_1623.toLowerCase(),
+    capitalizedEvent$jscomp$inline_1625 =
+      eventName$jscomp$inline_1623[0].toUpperCase() +
+      eventName$jscomp$inline_1623.slice(1);
+  registerSimpleEvent(
+    domEventName$jscomp$inline_1624,
+    "on" + capitalizedEvent$jscomp$inline_1625
+  );
+}
+registerSimpleEvent(ANIMATION_END, "onAnimationEnd");
+registerSimpleEvent(ANIMATION_ITERATION, "onAnimationIteration");
+registerSimpleEvent(ANIMATION_START, "onAnimationStart");
+registerSimpleEvent("dblclick", "onDoubleClick");
+registerSimpleEvent("focusin", "onFocus");
+registerSimpleEvent("focusout", "onBlur");
+registerSimpleEvent(TRANSITION_RUN, "onTransitionRun");
+registerSimpleEvent(TRANSITION_START, "onTransitionStart");
+registerSimpleEvent(TRANSITION_CANCEL, "onTransitionCancel");
+registerSimpleEvent(TRANSITION_END, "onTransitionEnd");
+registerDirectEvent("onMouseEnter", ["mouseout", "mouseover"]);
+registerDirectEvent("onMouseLeave", ["mouseout", "mouseover"]);
+registerDirectEvent("onPointerEnter", ["pointerout", "pointerover"]);
+registerDirectEvent("onPointerLeave", ["pointerout", "pointerover"]);
+registerTwoPhaseEvent(
+  "onChange",
+  "change click focusin focusout input keydown keyup selectionchange".split(" ")
+);
+registerTwoPhaseEvent(
+  "onSelect",
+  "focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(
+    " "
+  )
+);
+registerTwoPhaseEvent("onBeforeInput", [
+  "compositionend",
+  "keypress",
+  "textInput",
+  "paste"
+]);
+registerTwoPhaseEvent(
+  "onCompositionEnd",
+  "compositionend focusout keydown keypress keyup mousedown".split(" ")
+);
+registerTwoPhaseEvent(
+  "onCompositionStart",
+  "compositionstart focusout keydown keypress keyup mousedown".split(" ")
+);
+registerTwoPhaseEvent(
+  "onCompositionUpdate",
+  "compositionupdate focusout keydown keypress keyup mousedown".split(" ")
+);
+var mediaEventTypes =
+    "abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(
+      " "
+    ),
+  nonDelegatedEvents = new Set(
+    "beforetoggle cancel close invalid load scroll scrollend toggle"
+      .split(" ")
+      .concat(mediaEventTypes)
+  );
+function processDispatchQueue(dispatchQueue, eventSystemFlags) {
+  eventSystemFlags = 0 !== (eventSystemFlags & 4);
+  for (var i = 0; i < dispatchQueue.length; i++) {
+    var _dispatchQueue$i = dispatchQueue[i],
+      event = _dispatchQueue$i.event;
+    _dispatchQueue$i = _dispatchQueue$i.listeners;
+    a: {
+      var previousInstance = void 0;
+      if (eventSystemFlags)
+        for (
+          var i$jscomp$0 = _dispatchQueue$i.length - 1;
+          0 <= i$jscomp$0;
+          i$jscomp$0--
+        ) {
+          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],
+            instance = _dispatchListeners$i.instance,
+            currentTarget = _dispatchListeners$i.currentTarget;
+          _dispatchListeners$i = _dispatchListeners$i.listener;
+          if (instance !== previousInstance && event.isPropagationStopped())
+            break a;
+          previousInstance = _dispatchListeners$i;
+          event.currentTarget = currentTarget;
+          try {
+            previousInstance(event);
+          } catch (error) {
+            reportGlobalError(error);
+          }
+          event.currentTarget = null;
+          previousInstance = instance;
+        }
+      else
+        for (
+          i$jscomp$0 = 0;
+          i$jscomp$0 < _dispatchQueue$i.length;
+          i$jscomp$0++
+        ) {
+          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];
+          instance = _dispatchListeners$i.instance;
+          currentTarget = _dispatchListeners$i.currentTarget;
+          _dispatchListeners$i = _dispatchListeners$i.listener;
+          if (instance !== previousInstance && event.isPropagationStopped())
+            break a;
+          previousInstance = _dispatchListeners$i;
+          event.currentTarget = currentTarget;
+          try {
+            previousInstance(event);
+          } catch (error) {
+            reportGlobalError(error);
+          }
+          event.currentTarget = null;
+          previousInstance = instance;
+        }
+    }
+  }
+}
+function listenToNonDelegatedEvent(domEventName, targetElement) {
+  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];
+  void 0 === JSCompiler_inline_result &&
+    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =
+      new Set());
+  var listenerSetKey = domEventName + "__bubble";
+  JSCompiler_inline_result.has(listenerSetKey) ||
+    (addTrappedEventListener(targetElement, domEventName, 2, !1),
+    JSCompiler_inline_result.add(listenerSetKey));
+}
+function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {
+  var eventSystemFlags = 0;
+  isCapturePhaseListener && (eventSystemFlags |= 4);
+  addTrappedEventListener(
+    target,
+    domEventName,
+    eventSystemFlags,
+    isCapturePhaseListener
+  );
+}
+var listeningMarker = "_reactListening" + Math.random().toString(36).slice(2);
+function listenToAllSupportedEvents(rootContainerElement) {
+  if (!rootContainerElement[listeningMarker]) {
+    rootContainerElement[listeningMarker] = !0;
+    allNativeEvents.forEach(function (domEventName) {
+      "selectionchange" !== domEventName &&
+        (nonDelegatedEvents.has(domEventName) ||
+          listenToNativeEvent(domEventName, !1, rootContainerElement),
+        listenToNativeEvent(domEventName, !0, rootContainerElement));
+    });
+    var ownerDocument =
+      9 === rootContainerElement.nodeType
+        ? rootContainerElement
+        : rootContainerElement.ownerDocument;
+    null === ownerDocument ||
+      ownerDocument[listeningMarker] ||
+      ((ownerDocument[listeningMarker] = !0),
+      listenToNativeEvent("selectionchange", !1, ownerDocument));
+  }
+}
+function addTrappedEventListener(
+  targetContainer,
+  domEventName,
+  eventSystemFlags,
+  isCapturePhaseListener
+) {
+  switch (getEventPriority(domEventName)) {
+    case 2:
+      var listenerWrapper = dispatchDiscreteEvent;
+      break;
+    case 8:
+      listenerWrapper = dispatchContinuousEvent;
+      break;
+    default:
+      listenerWrapper = dispatchEvent;
+  }
+  eventSystemFlags = listenerWrapper.bind(
+    null,
+    domEventName,
+    eventSystemFlags,
+    targetContainer
+  );
+  listenerWrapper = void 0;
+  !passiveBrowserEventsSupported ||
+    ("touchstart" !== domEventName &&
+      "touchmove" !== domEventName &&
+      "wheel" !== domEventName) ||
+    (listenerWrapper = !0);
+  isCapturePhaseListener
+    ? void 0 !== listenerWrapper
+      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {
+          capture: !0,
+          passive: listenerWrapper
+        })
+      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)
+    : void 0 !== listenerWrapper
+      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {
+          passive: listenerWrapper
+        })
+      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);
+}
+function dispatchEventForPluginEventSystem(
+  domEventName,
+  eventSystemFlags,
+  nativeEvent,
+  targetInst$jscomp$0,
+  targetContainer
+) {
+  var ancestorInst = targetInst$jscomp$0;
+  if (
+    0 === (eventSystemFlags & 1) &&
+    0 === (eventSystemFlags & 2) &&
+    null !== targetInst$jscomp$0
+  )
+    a: for (;;) {
+      if (null === targetInst$jscomp$0) return;
+      var nodeTag = targetInst$jscomp$0.tag;
+      if (3 === nodeTag || 4 === nodeTag) {
+        var container = targetInst$jscomp$0.stateNode.containerInfo;
+        if (container === targetContainer) break;
+        if (4 === nodeTag)
+          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {
+            var grandTag = nodeTag.tag;
+            if (
+              (3 === grandTag || 4 === grandTag) &&
+              nodeTag.stateNode.containerInfo === targetContainer
+            )
+              return;
+            nodeTag = nodeTag.return;
+          }
+        for (; null !== container; ) {
+          nodeTag = getClosestInstanceFromNode(container);
+          if (null === nodeTag) return;
+          grandTag = nodeTag.tag;
+          if (
+            5 === grandTag ||
+            6 === grandTag ||
+            26 === grandTag ||
+            27 === grandTag
+          ) {
+            targetInst$jscomp$0 = ancestorInst = nodeTag;
+            continue a;
+          }
+          container = container.parentNode;
+        }
+      }
+      targetInst$jscomp$0 = targetInst$jscomp$0.return;
+    }
+  batchedUpdates$2(function () {
+    var targetInst = ancestorInst,
+      nativeEventTarget = getEventTarget(nativeEvent),
+      dispatchQueue = [];
+    a: {
+      var reactName = topLevelEventsToReactNames.get(domEventName);
+      if (void 0 !== reactName) {
+        var SyntheticEventCtor = SyntheticEvent,
+          reactEventType = domEventName;
+        switch (domEventName) {
+          case "keypress":
+            if (0 === getEventCharCode(nativeEvent)) break a;
+          case "keydown":
+          case "keyup":
+            SyntheticEventCtor = SyntheticKeyboardEvent;
+            break;
+          case "focusin":
+            reactEventType = "focus";
+            SyntheticEventCtor = SyntheticFocusEvent;
+            break;
+          case "focusout":
+            reactEventType = "blur";
+            SyntheticEventCtor = SyntheticFocusEvent;
+            break;
+          case "beforeblur":
+          case "afterblur":
+            SyntheticEventCtor = SyntheticFocusEvent;
+            break;
+          case "click":
+            if (2 === nativeEvent.button) break a;
+          case "auxclick":
+          case "dblclick":
+          case "mousedown":
+          case "mousemove":
+          case "mouseup":
+          case "mouseout":
+          case "mouseover":
+          case "contextmenu":
+            SyntheticEventCtor = SyntheticMouseEvent;
+            break;
+          case "drag":
+          case "dragend":
+          case "dragenter":
+          case "dragexit":
+          case "dragleave":
+          case "dragover":
+          case "dragstart":
+          case "drop":
+            SyntheticEventCtor = SyntheticDragEvent;
+            break;
+          case "touchcancel":
+          case "touchend":
+          case "touchmove":
+          case "touchstart":
+            SyntheticEventCtor = SyntheticTouchEvent;
+            break;
+          case ANIMATION_END:
+          case ANIMATION_ITERATION:
+          case ANIMATION_START:
+            SyntheticEventCtor = SyntheticAnimationEvent;
+            break;
+          case TRANSITION_END:
+            SyntheticEventCtor = SyntheticTransitionEvent;
+            break;
+          case "scroll":
+          case "scrollend":
+            SyntheticEventCtor = SyntheticUIEvent;
+            break;
+          case "wheel":
+            SyntheticEventCtor = SyntheticWheelEvent;
+            break;
+          case "copy":
+          case "cut":
+          case "paste":
+            SyntheticEventCtor = SyntheticClipboardEvent;
+            break;
+          case "gotpointercapture":
+          case "lostpointercapture":
+          case "pointercancel":
+          case "pointerdown":
+          case "pointermove":
+          case "pointerout":
+          case "pointerover":
+          case "pointerup":
+            SyntheticEventCtor = SyntheticPointerEvent;
+            break;
+          case "toggle":
+          case "beforetoggle":
+            SyntheticEventCtor = SyntheticToggleEvent;
+        }
+        var inCapturePhase = 0 !== (eventSystemFlags & 4),
+          accumulateTargetOnly =
+            !inCapturePhase &&
+            ("scroll" === domEventName || "scrollend" === domEventName),
+          reactEventName = inCapturePhase
+            ? null !== reactName
+              ? reactName + "Capture"
+              : null
+            : reactName;
+        inCapturePhase = [];
+        for (
+          var instance = targetInst, lastHostComponent;
+          null !== instance;
+
+        ) {
+          var _instance = instance;
+          lastHostComponent = _instance.stateNode;
+          _instance = _instance.tag;
+          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||
+            null === lastHostComponent ||
+            null === reactEventName ||
+            ((_instance = getListener(instance, reactEventName)),
+            null != _instance &&
+              inCapturePhase.push(
+                createDispatchListener(instance, _instance, lastHostComponent)
+              ));
+          if (accumulateTargetOnly) break;
+          instance = instance.return;
+        }
+        0 < inCapturePhase.length &&
+          ((reactName = new SyntheticEventCtor(
+            reactName,
+            reactEventType,
+            null,
+            nativeEvent,
+            nativeEventTarget
+          )),
+          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));
+      }
+    }
+    if (0 === (eventSystemFlags & 7)) {
+      a: {
+        reactName =
+          "mouseover" === domEventName || "pointerover" === domEventName;
+        SyntheticEventCtor =
+          "mouseout" === domEventName || "pointerout" === domEventName;
+        if (
+          reactName &&
+          nativeEvent !== currentReplayingEvent &&
+          (reactEventType =
+            nativeEvent.relatedTarget || nativeEvent.fromElement) &&
+          (getClosestInstanceFromNode(reactEventType) ||
+            reactEventType[internalContainerInstanceKey])
+        )
+          break a;
+        if (SyntheticEventCtor || reactName) {
+          reactName =
+            nativeEventTarget.window === nativeEventTarget
+              ? nativeEventTarget
+              : (reactName = nativeEventTarget.ownerDocument)
+                ? reactName.defaultView || reactName.parentWindow
+                : window;
+          if (SyntheticEventCtor) {
+            if (
+              ((reactEventType =
+                nativeEvent.relatedTarget || nativeEvent.toElement),
+              (SyntheticEventCtor = targetInst),
+              (reactEventType = reactEventType
+                ? getClosestInstanceFromNode(reactEventType)
+                : null),
+              null !== reactEventType &&
+                ((accumulateTargetOnly =
+                  getNearestMountedFiber(reactEventType)),
+                (inCapturePhase = reactEventType.tag),
+                reactEventType !== accumulateTargetOnly ||
+                  (5 !== inCapturePhase &&
+                    27 !== inCapturePhase &&
+                    6 !== inCapturePhase)))
+            )
+              reactEventType = null;
+          } else (SyntheticEventCtor = null), (reactEventType = targetInst);
+          if (SyntheticEventCtor !== reactEventType) {
+            inCapturePhase = SyntheticMouseEvent;
+            _instance = "onMouseLeave";
+            reactEventName = "onMouseEnter";
+            instance = "mouse";
+            if ("pointerout" === domEventName || "pointerover" === domEventName)
+              (inCapturePhase = SyntheticPointerEvent),
+                (_instance = "onPointerLeave"),
+                (reactEventName = "onPointerEnter"),
+                (instance = "pointer");
+            accumulateTargetOnly =
+              null == SyntheticEventCtor
+                ? reactName
+                : getNodeFromInstance(SyntheticEventCtor);
+            lastHostComponent =
+              null == reactEventType
+                ? reactName
+                : getNodeFromInstance(reactEventType);
+            reactName = new inCapturePhase(
+              _instance,
+              instance + "leave",
+              SyntheticEventCtor,
+              nativeEvent,
+              nativeEventTarget
+            );
+            reactName.target = accumulateTargetOnly;
+            reactName.relatedTarget = lastHostComponent;
+            _instance = null;
+            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&
+              ((inCapturePhase = new inCapturePhase(
+                reactEventName,
+                instance + "enter",
+                reactEventType,
+                nativeEvent,
+                nativeEventTarget
+              )),
+              (inCapturePhase.target = lastHostComponent),
+              (inCapturePhase.relatedTarget = accumulateTargetOnly),
+              (_instance = inCapturePhase));
+            accumulateTargetOnly = _instance;
+            if (SyntheticEventCtor && reactEventType)
+              b: {
+                inCapturePhase = SyntheticEventCtor;
+                reactEventName = reactEventType;
+                instance = 0;
+                for (
+                  lastHostComponent = inCapturePhase;
+                  lastHostComponent;
+                  lastHostComponent = getParent(lastHostComponent)
+                )
+                  instance++;
+                lastHostComponent = 0;
+                for (
+                  _instance = reactEventName;
+                  _instance;
+                  _instance = getParent(_instance)
+                )
+                  lastHostComponent++;
+                for (; 0 < instance - lastHostComponent; )
+                  (inCapturePhase = getParent(inCapturePhase)), instance--;
+                for (; 0 < lastHostComponent - instance; )
+                  (reactEventName = getParent(reactEventName)),
+                    lastHostComponent--;
+                for (; instance--; ) {
+                  if (
+                    inCapturePhase === reactEventName ||
+                    (null !== reactEventName &&
+                      inCapturePhase === reactEventName.alternate)
+                  )
+                    break b;
+                  inCapturePhase = getParent(inCapturePhase);
+                  reactEventName = getParent(reactEventName);
+                }
+                inCapturePhase = null;
+              }
+            else inCapturePhase = null;
+            null !== SyntheticEventCtor &&
+              accumulateEnterLeaveListenersForEvent(
+                dispatchQueue,
+                reactName,
+                SyntheticEventCtor,
+                inCapturePhase,
+                !1
+              );
+            null !== reactEventType &&
+              null !== accumulateTargetOnly &&
+              accumulateEnterLeaveListenersForEvent(
+                dispatchQueue,
+                accumulateTargetOnly,
+                reactEventType,
+                inCapturePhase,
+                !0
+              );
+          }
+        }
+      }
+      a: {
+        reactName = targetInst ? getNodeFromInstance(targetInst) : window;
+        SyntheticEventCtor =
+          reactName.nodeName && reactName.nodeName.toLowerCase();
+        if (
+          "select" === SyntheticEventCtor ||
+          ("input" === SyntheticEventCtor && "file" === reactName.type)
+        )
+          var getTargetInstFunc = getTargetInstForChangeEvent;
+        else if (isTextInputElement(reactName))
+          if (isInputEventSupported)
+            getTargetInstFunc = getTargetInstForInputOrChangeEvent;
+          else {
+            getTargetInstFunc = getTargetInstForInputEventPolyfill;
+            var handleEventFunc = handleEventsForInputEventPolyfill;
+          }
+        else
+          (SyntheticEventCtor = reactName.nodeName),
+            !SyntheticEventCtor ||
+            "input" !== SyntheticEventCtor.toLowerCase() ||
+            ("checkbox" !== reactName.type && "radio" !== reactName.type)
+              ? targetInst &&
+                isCustomElement(targetInst.elementType) &&
+                (getTargetInstFunc = getTargetInstForChangeEvent)
+              : (getTargetInstFunc = getTargetInstForClickEvent);
+        if (
+          getTargetInstFunc &&
+          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))
+        ) {
+          createAndAccumulateChangeEvent(
+            dispatchQueue,
+            getTargetInstFunc,
+            nativeEvent,
+            nativeEventTarget
+          );
+          break a;
+        }
+        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);
+        "focusout" === domEventName &&
+          targetInst &&
+          "number" === reactName.type &&
+          null != targetInst.memoizedProps.value &&
+          setDefaultValue(reactName, "number", reactName.value);
+      }
+      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;
+      switch (domEventName) {
+        case "focusin":
+          if (
+            isTextInputElement(handleEventFunc) ||
+            "true" === handleEventFunc.contentEditable
+          )
+            (activeElement = handleEventFunc),
+              (activeElementInst = targetInst),
+              (lastSelection = null);
+          break;
+        case "focusout":
+          lastSelection = activeElementInst = activeElement = null;
+          break;
+        case "mousedown":
+          mouseDown = !0;
+          break;
+        case "contextmenu":
+        case "mouseup":
+        case "dragend":
+          mouseDown = !1;
+          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
+          break;
+        case "selectionchange":
+          if (skipSelectionChangeEvent) break;
+        case "keydown":
+        case "keyup":
+          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
+      }
+      var fallbackData;
+      if (canUseCompositionEvent)
+        b: {
+          switch (domEventName) {
+            case "compositionstart":
+              var eventType = "onCompositionStart";
+              break b;
+            case "compositionend":
+              eventType = "onCompositionEnd";
+              break b;
+            case "compositionupdate":
+              eventType = "onCompositionUpdate";
+              break b;
+          }
+          eventType = void 0;
+        }
+      else
+        isComposing
+          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&
+            (eventType = "onCompositionEnd")
+          : "keydown" === domEventName &&
+            229 === nativeEvent.keyCode &&
+            (eventType = "onCompositionStart");
+      eventType &&
+        (useFallbackCompositionData &&
+          "ko" !== nativeEvent.locale &&
+          (isComposing || "onCompositionStart" !== eventType
+            ? "onCompositionEnd" === eventType &&
+              isComposing &&
+              (fallbackData = getData())
+            : ((root = nativeEventTarget),
+              (startText = "value" in root ? root.value : root.textContent),
+              (isComposing = !0))),
+        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),
+        0 < handleEventFunc.length &&
+          ((eventType = new SyntheticCompositionEvent(
+            eventType,
+            domEventName,
+            null,
+            nativeEvent,
+            nativeEventTarget
+          )),
+          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),
+          fallbackData
+            ? (eventType.data = fallbackData)
+            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),
+              null !== fallbackData && (eventType.data = fallbackData))));
+      if (
+        (fallbackData = canUseTextInputEvent
+          ? getNativeBeforeInputChars(domEventName, nativeEvent)
+          : getFallbackBeforeInputChars(domEventName, nativeEvent))
+      )
+        (eventType = accumulateTwoPhaseListeners(targetInst, "onBeforeInput")),
+          0 < eventType.length &&
+            ((handleEventFunc = new SyntheticCompositionEvent(
+              "onBeforeInput",
+              "beforeinput",
+              null,
+              nativeEvent,
+              nativeEventTarget
+            )),
+            dispatchQueue.push({
+              event: handleEventFunc,
+              listeners: eventType
+            }),
+            (handleEventFunc.data = fallbackData));
+      extractEvents$1(
+        dispatchQueue,
+        domEventName,
+        targetInst,
+        nativeEvent,
+        nativeEventTarget
+      );
+    }
+    processDispatchQueue(dispatchQueue, eventSystemFlags);
+  });
+}
+function createDispatchListener(instance, listener, currentTarget) {
+  return {
+    instance: instance,
+    listener: listener,
+    currentTarget: currentTarget
+  };
+}
+function accumulateTwoPhaseListeners(targetFiber, reactName) {
+  for (
+    var captureName = reactName + "Capture", listeners = [];
+    null !== targetFiber;
+
+  ) {
+    var _instance2 = targetFiber,
+      stateNode = _instance2.stateNode;
+    _instance2 = _instance2.tag;
+    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||
+      null === stateNode ||
+      ((_instance2 = getListener(targetFiber, captureName)),
+      null != _instance2 &&
+        listeners.unshift(
+          createDispatchListener(targetFiber, _instance2, stateNode)
+        ),
+      (_instance2 = getListener(targetFiber, reactName)),
+      null != _instance2 &&
+        listeners.push(
+          createDispatchListener(targetFiber, _instance2, stateNode)
+        ));
+    if (3 === targetFiber.tag) return listeners;
+    targetFiber = targetFiber.return;
+  }
+  return [];
+}
+function getParent(inst) {
+  if (null === inst) return null;
+  do inst = inst.return;
+  while (inst && 5 !== inst.tag && 27 !== inst.tag);
+  return inst ? inst : null;
+}
+function accumulateEnterLeaveListenersForEvent(
+  dispatchQueue,
+  event,
+  target,
+  common,
+  inCapturePhase
+) {
+  for (
+    var registrationName = event._reactName, listeners = [];
+    null !== target && target !== common;
+
+  ) {
+    var _instance3 = target,
+      alternate = _instance3.alternate,
+      stateNode = _instance3.stateNode;
+    _instance3 = _instance3.tag;
+    if (null !== alternate && alternate === common) break;
+    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||
+      null === stateNode ||
+      ((alternate = stateNode),
+      inCapturePhase
+        ? ((stateNode = getListener(target, registrationName)),
+          null != stateNode &&
+            listeners.unshift(
+              createDispatchListener(target, stateNode, alternate)
+            ))
+        : inCapturePhase ||
+          ((stateNode = getListener(target, registrationName)),
+          null != stateNode &&
+            listeners.push(
+              createDispatchListener(target, stateNode, alternate)
+            )));
+    target = target.return;
+  }
+  0 !== listeners.length &&
+    dispatchQueue.push({ event: event, listeners: listeners });
+}
+var NORMALIZE_NEWLINES_REGEX = /\r\n?/g,
+  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g;
+function normalizeMarkupForTextOrAttribute(markup) {
+  return ("string" === typeof markup ? markup : "" + markup)
+    .replace(NORMALIZE_NEWLINES_REGEX, "\n")
+    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, "");
+}
+function checkForUnmatchedText(serverText, clientText) {
+  clientText = normalizeMarkupForTextOrAttribute(clientText);
+  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;
+}
+function noop$2() {}
+function setProp(domElement, tag, key, value, props, prevValue) {
+  switch (key) {
+    case "children":
+      "string" === typeof value
+        ? "body" === tag ||
+          ("textarea" === tag && "" === value) ||
+          setTextContent(domElement, value)
+        : ("number" === typeof value || "bigint" === typeof value) &&
+          "body" !== tag &&
+          setTextContent(domElement, "" + value);
+      break;
+    case "className":
+      setValueForKnownAttribute(domElement, "class", value);
+      break;
+    case "tabIndex":
+      setValueForKnownAttribute(domElement, "tabindex", value);
+      break;
+    case "dir":
+    case "role":
+    case "viewBox":
+    case "width":
+    case "height":
+      setValueForKnownAttribute(domElement, key, value);
+      break;
+    case "style":
+      setValueForStyles(domElement, value, prevValue);
+      break;
+    case "data":
+      if ("object" !== tag) {
+        setValueForKnownAttribute(domElement, "data", value);
+        break;
+      }
+    case "src":
+    case "href":
+      if ("" === value && ("a" !== tag || "href" !== key)) {
+        domElement.removeAttribute(key);
+        break;
+      }
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      ) {
+        domElement.removeAttribute(key);
+        break;
+      }
+      value = sanitizeURL("" + value);
+      domElement.setAttribute(key, value);
+      break;
+    case "action":
+    case "formAction":
+      if ("function" === typeof value) {
+        domElement.setAttribute(
+          key,
+          "javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')"
+        );
+        break;
+      } else
+        "function" === typeof prevValue &&
+          ("formAction" === key
+            ? ("input" !== tag &&
+                setProp(domElement, tag, "name", props.name, props, null),
+              setProp(
+                domElement,
+                tag,
+                "formEncType",
+                props.formEncType,
+                props,
+                null
+              ),
+              setProp(
+                domElement,
+                tag,
+                "formMethod",
+                props.formMethod,
+                props,
+                null
+              ),
+              setProp(
+                domElement,
+                tag,
+                "formTarget",
+                props.formTarget,
+                props,
+                null
+              ))
+            : (setProp(domElement, tag, "encType", props.encType, props, null),
+              setProp(domElement, tag, "method", props.method, props, null),
+              setProp(domElement, tag, "target", props.target, props, null)));
+      if (
+        null == value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      ) {
+        domElement.removeAttribute(key);
+        break;
+      }
+      value = sanitizeURL("" + value);
+      domElement.setAttribute(key, value);
+      break;
+    case "onClick":
+      null != value && (domElement.onclick = noop$2);
+      break;
+    case "onScroll":
+      null != value && listenToNonDelegatedEvent("scroll", domElement);
+      break;
+    case "onScrollEnd":
+      null != value && listenToNonDelegatedEvent("scrollend", domElement);
+      break;
+    case "dangerouslySetInnerHTML":
+      if (null != value) {
+        if ("object" !== typeof value || !("__html" in value))
+          throw Error(formatProdErrorMessage(61));
+        key = value.__html;
+        if (null != key) {
+          if (null != props.children) throw Error(formatProdErrorMessage(60));
+          domElement.innerHTML = key;
+        }
+      }
+      break;
+    case "multiple":
+      domElement.multiple =
+        value && "function" !== typeof value && "symbol" !== typeof value;
+      break;
+    case "muted":
+      domElement.muted =
+        value && "function" !== typeof value && "symbol" !== typeof value;
+      break;
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "ref":
+      break;
+    case "autoFocus":
+      break;
+    case "xlinkHref":
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "boolean" === typeof value ||
+        "symbol" === typeof value
+      ) {
+        domElement.removeAttribute("xlink:href");
+        break;
+      }
+      key = sanitizeURL("" + value);
+      domElement.setAttributeNS(
+        "http://www.w3.org/1999/xlink",
+        "xlink:href",
+        key
+      );
+      break;
+    case "contentEditable":
+    case "spellCheck":
+    case "draggable":
+    case "value":
+    case "autoReverse":
+    case "externalResourcesRequired":
+    case "focusable":
+    case "preserveAlpha":
+      null != value && "function" !== typeof value && "symbol" !== typeof value
+        ? domElement.setAttribute(key, "" + value)
+        : domElement.removeAttribute(key);
+      break;
+    case "inert":
+    case "allowFullScreen":
+    case "async":
+    case "autoPlay":
+    case "controls":
+    case "default":
+    case "defer":
+    case "disabled":
+    case "disablePictureInPicture":
+    case "disableRemotePlayback":
+    case "formNoValidate":
+    case "hidden":
+    case "loop":
+    case "noModule":
+    case "noValidate":
+    case "open":
+    case "playsInline":
+    case "readOnly":
+    case "required":
+    case "reversed":
+    case "scoped":
+    case "seamless":
+    case "itemScope":
+      value && "function" !== typeof value && "symbol" !== typeof value
+        ? domElement.setAttribute(key, "")
+        : domElement.removeAttribute(key);
+      break;
+    case "capture":
+    case "download":
+      !0 === value
+        ? domElement.setAttribute(key, "")
+        : !1 !== value &&
+            null != value &&
+            "function" !== typeof value &&
+            "symbol" !== typeof value
+          ? domElement.setAttribute(key, value)
+          : domElement.removeAttribute(key);
+      break;
+    case "cols":
+    case "rows":
+    case "size":
+    case "span":
+      null != value &&
+      "function" !== typeof value &&
+      "symbol" !== typeof value &&
+      !isNaN(value) &&
+      1 <= value
+        ? domElement.setAttribute(key, value)
+        : domElement.removeAttribute(key);
+      break;
+    case "rowSpan":
+    case "start":
+      null == value ||
+      "function" === typeof value ||
+      "symbol" === typeof value ||
+      isNaN(value)
+        ? domElement.removeAttribute(key)
+        : domElement.setAttribute(key, value);
+      break;
+    case "popover":
+      listenToNonDelegatedEvent("beforetoggle", domElement);
+      listenToNonDelegatedEvent("toggle", domElement);
+      setValueForAttribute(domElement, "popover", value);
+      break;
+    case "xlinkActuate":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:actuate",
+        value
+      );
+      break;
+    case "xlinkArcrole":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:arcrole",
+        value
+      );
+      break;
+    case "xlinkRole":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:role",
+        value
+      );
+      break;
+    case "xlinkShow":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:show",
+        value
+      );
+      break;
+    case "xlinkTitle":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:title",
+        value
+      );
+      break;
+    case "xlinkType":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/1999/xlink",
+        "xlink:type",
+        value
+      );
+      break;
+    case "xmlBase":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/XML/1998/namespace",
+        "xml:base",
+        value
+      );
+      break;
+    case "xmlLang":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/XML/1998/namespace",
+        "xml:lang",
+        value
+      );
+      break;
+    case "xmlSpace":
+      setValueForNamespacedAttribute(
+        domElement,
+        "http://www.w3.org/XML/1998/namespace",
+        "xml:space",
+        value
+      );
+      break;
+    case "is":
+      setValueForAttribute(domElement, "is", value);
+      break;
+    case "innerText":
+    case "textContent":
+      break;
+    default:
+      if (
+        !(2 < key.length) ||
+        ("o" !== key[0] && "O" !== key[0]) ||
+        ("n" !== key[1] && "N" !== key[1])
+      )
+        (key = aliases.get(key) || key),
+          setValueForAttribute(domElement, key, value);
+  }
+}
+function setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {
+  switch (key) {
+    case "style":
+      setValueForStyles(domElement, value, prevValue);
+      break;
+    case "dangerouslySetInnerHTML":
+      if (null != value) {
+        if ("object" !== typeof value || !("__html" in value))
+          throw Error(formatProdErrorMessage(61));
+        key = value.__html;
+        if (null != key) {
+          if (null != props.children) throw Error(formatProdErrorMessage(60));
+          domElement.innerHTML = key;
+        }
+      }
+      break;
+    case "children":
+      "string" === typeof value
+        ? setTextContent(domElement, value)
+        : ("number" === typeof value || "bigint" === typeof value) &&
+          setTextContent(domElement, "" + value);
+      break;
+    case "onScroll":
+      null != value && listenToNonDelegatedEvent("scroll", domElement);
+      break;
+    case "onScrollEnd":
+      null != value && listenToNonDelegatedEvent("scrollend", domElement);
+      break;
+    case "onClick":
+      null != value && (domElement.onclick = noop$2);
+      break;
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "innerHTML":
+    case "ref":
+      break;
+    case "innerText":
+    case "textContent":
+      break;
+    default:
+      if (!registrationNameDependencies.hasOwnProperty(key))
+        a: {
+          if (
+            "o" === key[0] &&
+            "n" === key[1] &&
+            ((props = key.endsWith("Capture")),
+            (tag = key.slice(2, props ? key.length - 7 : void 0)),
+            (prevValue = domElement[internalPropsKey] || null),
+            (prevValue = null != prevValue ? prevValue[key] : null),
+            "function" === typeof prevValue &&
+              domElement.removeEventListener(tag, prevValue, props),
+            "function" === typeof value)
+          ) {
+            "function" !== typeof prevValue &&
+              null !== prevValue &&
+              (key in domElement
+                ? (domElement[key] = null)
+                : domElement.hasAttribute(key) &&
+                  domElement.removeAttribute(key));
+            domElement.addEventListener(tag, value, props);
+            break a;
+          }
+          key in domElement
+            ? (domElement[key] = value)
+            : !0 === value
+              ? domElement.setAttribute(key, "")
+              : setValueForAttribute(domElement, key, value);
+        }
+  }
+}
+function setInitialProperties(domElement, tag, props) {
+  switch (tag) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+    case "a":
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "img":
+      listenToNonDelegatedEvent("error", domElement);
+      listenToNonDelegatedEvent("load", domElement);
+      var hasSrc = !1,
+        hasSrcSet = !1,
+        propKey;
+      for (propKey in props)
+        if (props.hasOwnProperty(propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "src":
+                hasSrc = !0;
+                break;
+              case "srcSet":
+                hasSrcSet = !0;
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(137, tag));
+              default:
+                setProp(domElement, tag, propKey, propValue, props, null);
+            }
+        }
+      hasSrcSet &&
+        setProp(domElement, tag, "srcSet", props.srcSet, props, null);
+      hasSrc && setProp(domElement, tag, "src", props.src, props, null);
+      return;
+    case "input":
+      listenToNonDelegatedEvent("invalid", domElement);
+      var defaultValue = (propKey = propValue = hasSrcSet = null),
+        checked = null,
+        defaultChecked = null;
+      for (hasSrc in props)
+        if (props.hasOwnProperty(hasSrc)) {
+          var propValue$203 = props[hasSrc];
+          if (null != propValue$203)
+            switch (hasSrc) {
+              case "name":
+                hasSrcSet = propValue$203;
+                break;
+              case "type":
+                propValue = propValue$203;
+                break;
+              case "checked":
+                checked = propValue$203;
+                break;
+              case "defaultChecked":
+                defaultChecked = propValue$203;
+                break;
+              case "value":
+                propKey = propValue$203;
+                break;
+              case "defaultValue":
+                defaultValue = propValue$203;
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                if (null != propValue$203)
+                  throw Error(formatProdErrorMessage(137, tag));
+                break;
+              default:
+                setProp(domElement, tag, hasSrc, propValue$203, props, null);
+            }
+        }
+      initInput(
+        domElement,
+        propKey,
+        defaultValue,
+        checked,
+        defaultChecked,
+        propValue,
+        hasSrcSet,
+        !1
+      );
+      track(domElement);
+      return;
+    case "select":
+      listenToNonDelegatedEvent("invalid", domElement);
+      hasSrc = propValue = propKey = null;
+      for (hasSrcSet in props)
+        if (
+          props.hasOwnProperty(hasSrcSet) &&
+          ((defaultValue = props[hasSrcSet]), null != defaultValue)
+        )
+          switch (hasSrcSet) {
+            case "value":
+              propKey = defaultValue;
+              break;
+            case "defaultValue":
+              propValue = defaultValue;
+              break;
+            case "multiple":
+              hasSrc = defaultValue;
+            default:
+              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);
+          }
+      tag = propKey;
+      props = propValue;
+      domElement.multiple = !!hasSrc;
+      null != tag
+        ? updateOptions(domElement, !!hasSrc, tag, !1)
+        : null != props && updateOptions(domElement, !!hasSrc, props, !0);
+      return;
+    case "textarea":
+      listenToNonDelegatedEvent("invalid", domElement);
+      propKey = hasSrcSet = hasSrc = null;
+      for (propValue in props)
+        if (
+          props.hasOwnProperty(propValue) &&
+          ((defaultValue = props[propValue]), null != defaultValue)
+        )
+          switch (propValue) {
+            case "value":
+              hasSrc = defaultValue;
+              break;
+            case "defaultValue":
+              hasSrcSet = defaultValue;
+              break;
+            case "children":
+              propKey = defaultValue;
+              break;
+            case "dangerouslySetInnerHTML":
+              if (null != defaultValue) throw Error(formatProdErrorMessage(91));
+              break;
+            default:
+              setProp(domElement, tag, propValue, defaultValue, props, null);
+          }
+      initTextarea(domElement, hasSrc, hasSrcSet, propKey);
+      track(domElement);
+      return;
+    case "option":
+      for (checked in props)
+        if (
+          props.hasOwnProperty(checked) &&
+          ((hasSrc = props[checked]), null != hasSrc)
+        )
+          switch (checked) {
+            case "selected":
+              domElement.selected =
+                hasSrc &&
+                "function" !== typeof hasSrc &&
+                "symbol" !== typeof hasSrc;
+              break;
+            default:
+              setProp(domElement, tag, checked, hasSrc, props, null);
+          }
+      return;
+    case "dialog":
+      listenToNonDelegatedEvent("beforetoggle", domElement);
+      listenToNonDelegatedEvent("toggle", domElement);
+      listenToNonDelegatedEvent("cancel", domElement);
+      listenToNonDelegatedEvent("close", domElement);
+      break;
+    case "iframe":
+    case "object":
+      listenToNonDelegatedEvent("load", domElement);
+      break;
+    case "video":
+    case "audio":
+      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)
+        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);
+      break;
+    case "image":
+      listenToNonDelegatedEvent("error", domElement);
+      listenToNonDelegatedEvent("load", domElement);
+      break;
+    case "details":
+      listenToNonDelegatedEvent("toggle", domElement);
+      break;
+    case "embed":
+    case "source":
+    case "link":
+      listenToNonDelegatedEvent("error", domElement),
+        listenToNonDelegatedEvent("load", domElement);
+    case "area":
+    case "base":
+    case "br":
+    case "col":
+    case "hr":
+    case "keygen":
+    case "meta":
+    case "param":
+    case "track":
+    case "wbr":
+    case "menuitem":
+      for (defaultChecked in props)
+        if (
+          props.hasOwnProperty(defaultChecked) &&
+          ((hasSrc = props[defaultChecked]), null != hasSrc)
+        )
+          switch (defaultChecked) {
+            case "children":
+            case "dangerouslySetInnerHTML":
+              throw Error(formatProdErrorMessage(137, tag));
+            default:
+              setProp(domElement, tag, defaultChecked, hasSrc, props, null);
+          }
+      return;
+    default:
+      if (isCustomElement(tag)) {
+        for (propValue$203 in props)
+          props.hasOwnProperty(propValue$203) &&
+            ((hasSrc = props[propValue$203]),
+            void 0 !== hasSrc &&
+              setPropOnCustomElement(
+                domElement,
+                tag,
+                propValue$203,
+                hasSrc,
+                props,
+                void 0
+              ));
+        return;
+      }
+  }
+  for (defaultValue in props)
+    props.hasOwnProperty(defaultValue) &&
+      ((hasSrc = props[defaultValue]),
+      null != hasSrc &&
+        setProp(domElement, tag, defaultValue, hasSrc, props, null));
+}
+function updateProperties(domElement, tag, lastProps, nextProps) {
+  switch (tag) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+    case "a":
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "input":
+      var name = null,
+        type = null,
+        value = null,
+        defaultValue = null,
+        lastDefaultValue = null,
+        checked = null,
+        defaultChecked = null;
+      for (propKey in lastProps) {
+        var lastProp = lastProps[propKey];
+        if (lastProps.hasOwnProperty(propKey) && null != lastProp)
+          switch (propKey) {
+            case "checked":
+              break;
+            case "value":
+              break;
+            case "defaultValue":
+              lastDefaultValue = lastProp;
+            default:
+              nextProps.hasOwnProperty(propKey) ||
+                setProp(domElement, tag, propKey, null, nextProps, lastProp);
+          }
+      }
+      for (var propKey$220 in nextProps) {
+        var propKey = nextProps[propKey$220];
+        lastProp = lastProps[propKey$220];
+        if (
+          nextProps.hasOwnProperty(propKey$220) &&
+          (null != propKey || null != lastProp)
+        )
+          switch (propKey$220) {
+            case "type":
+              type = propKey;
+              break;
+            case "name":
+              name = propKey;
+              break;
+            case "checked":
+              checked = propKey;
+              break;
+            case "defaultChecked":
+              defaultChecked = propKey;
+              break;
+            case "value":
+              value = propKey;
+              break;
+            case "defaultValue":
+              defaultValue = propKey;
+              break;
+            case "children":
+            case "dangerouslySetInnerHTML":
+              if (null != propKey)
+                throw Error(formatProdErrorMessage(137, tag));
+              break;
+            default:
+              propKey !== lastProp &&
+                setProp(
+                  domElement,
+                  tag,
+                  propKey$220,
+                  propKey,
+                  nextProps,
+                  lastProp
+                );
+          }
+      }
+      updateInput(
+        domElement,
+        value,
+        defaultValue,
+        lastDefaultValue,
+        checked,
+        defaultChecked,
+        type,
+        name
+      );
+      return;
+    case "select":
+      propKey = value = defaultValue = propKey$220 = null;
+      for (type in lastProps)
+        if (
+          ((lastDefaultValue = lastProps[type]),
+          lastProps.hasOwnProperty(type) && null != lastDefaultValue)
+        )
+          switch (type) {
+            case "value":
+              break;
+            case "multiple":
+              propKey = lastDefaultValue;
+            default:
+              nextProps.hasOwnProperty(type) ||
+                setProp(
+                  domElement,
+                  tag,
+                  type,
+                  null,
+                  nextProps,
+                  lastDefaultValue
+                );
+          }
+      for (name in nextProps)
+        if (
+          ((type = nextProps[name]),
+          (lastDefaultValue = lastProps[name]),
+          nextProps.hasOwnProperty(name) &&
+            (null != type || null != lastDefaultValue))
+        )
+          switch (name) {
+            case "value":
+              propKey$220 = type;
+              break;
+            case "defaultValue":
+              defaultValue = type;
+              break;
+            case "multiple":
+              value = type;
+            default:
+              type !== lastDefaultValue &&
+                setProp(
+                  domElement,
+                  tag,
+                  name,
+                  type,
+                  nextProps,
+                  lastDefaultValue
+                );
+          }
+      tag = defaultValue;
+      lastProps = value;
+      nextProps = propKey;
+      null != propKey$220
+        ? updateOptions(domElement, !!lastProps, propKey$220, !1)
+        : !!nextProps !== !!lastProps &&
+          (null != tag
+            ? updateOptions(domElement, !!lastProps, tag, !0)
+            : updateOptions(domElement, !!lastProps, lastProps ? [] : "", !1));
+      return;
+    case "textarea":
+      propKey = propKey$220 = null;
+      for (defaultValue in lastProps)
+        if (
+          ((name = lastProps[defaultValue]),
+          lastProps.hasOwnProperty(defaultValue) &&
+            null != name &&
+            !nextProps.hasOwnProperty(defaultValue))
+        )
+          switch (defaultValue) {
+            case "value":
+              break;
+            case "children":
+              break;
+            default:
+              setProp(domElement, tag, defaultValue, null, nextProps, name);
+          }
+      for (value in nextProps)
+        if (
+          ((name = nextProps[value]),
+          (type = lastProps[value]),
+          nextProps.hasOwnProperty(value) && (null != name || null != type))
+        )
+          switch (value) {
+            case "value":
+              propKey$220 = name;
+              break;
+            case "defaultValue":
+              propKey = name;
+              break;
+            case "children":
+              break;
+            case "dangerouslySetInnerHTML":
+              if (null != name) throw Error(formatProdErrorMessage(91));
+              break;
+            default:
+              name !== type &&
+                setProp(domElement, tag, value, name, nextProps, type);
+          }
+      updateTextarea(domElement, propKey$220, propKey);
+      return;
+    case "option":
+      for (var propKey$236 in lastProps)
+        if (
+          ((propKey$220 = lastProps[propKey$236]),
+          lastProps.hasOwnProperty(propKey$236) &&
+            null != propKey$220 &&
+            !nextProps.hasOwnProperty(propKey$236))
+        )
+          switch (propKey$236) {
+            case "selected":
+              domElement.selected = !1;
+              break;
+            default:
+              setProp(
+                domElement,
+                tag,
+                propKey$236,
+                null,
+                nextProps,
+                propKey$220
+              );
+          }
+      for (lastDefaultValue in nextProps)
+        if (
+          ((propKey$220 = nextProps[lastDefaultValue]),
+          (propKey = lastProps[lastDefaultValue]),
+          nextProps.hasOwnProperty(lastDefaultValue) &&
+            propKey$220 !== propKey &&
+            (null != propKey$220 || null != propKey))
+        )
+          switch (lastDefaultValue) {
+            case "selected":
+              domElement.selected =
+                propKey$220 &&
+                "function" !== typeof propKey$220 &&
+                "symbol" !== typeof propKey$220;
+              break;
+            default:
+              setProp(
+                domElement,
+                tag,
+                lastDefaultValue,
+                propKey$220,
+                nextProps,
+                propKey
+              );
+          }
+      return;
+    case "img":
+    case "link":
+    case "area":
+    case "base":
+    case "br":
+    case "col":
+    case "embed":
+    case "hr":
+    case "keygen":
+    case "meta":
+    case "param":
+    case "source":
+    case "track":
+    case "wbr":
+    case "menuitem":
+      for (var propKey$241 in lastProps)
+        (propKey$220 = lastProps[propKey$241]),
+          lastProps.hasOwnProperty(propKey$241) &&
+            null != propKey$220 &&
+            !nextProps.hasOwnProperty(propKey$241) &&
+            setProp(domElement, tag, propKey$241, null, nextProps, propKey$220);
+      for (checked in nextProps)
+        if (
+          ((propKey$220 = nextProps[checked]),
+          (propKey = lastProps[checked]),
+          nextProps.hasOwnProperty(checked) &&
+            propKey$220 !== propKey &&
+            (null != propKey$220 || null != propKey))
+        )
+          switch (checked) {
+            case "children":
+            case "dangerouslySetInnerHTML":
+              if (null != propKey$220)
+                throw Error(formatProdErrorMessage(137, tag));
+              break;
+            default:
+              setProp(
+                domElement,
+                tag,
+                checked,
+                propKey$220,
+                nextProps,
+                propKey
+              );
+          }
+      return;
+    default:
+      if (isCustomElement(tag)) {
+        for (var propKey$246 in lastProps)
+          (propKey$220 = lastProps[propKey$246]),
+            lastProps.hasOwnProperty(propKey$246) &&
+              void 0 !== propKey$220 &&
+              !nextProps.hasOwnProperty(propKey$246) &&
+              setPropOnCustomElement(
+                domElement,
+                tag,
+                propKey$246,
+                void 0,
+                nextProps,
+                propKey$220
+              );
+        for (defaultChecked in nextProps)
+          (propKey$220 = nextProps[defaultChecked]),
+            (propKey = lastProps[defaultChecked]),
+            !nextProps.hasOwnProperty(defaultChecked) ||
+              propKey$220 === propKey ||
+              (void 0 === propKey$220 && void 0 === propKey) ||
+              setPropOnCustomElement(
+                domElement,
+                tag,
+                defaultChecked,
+                propKey$220,
+                nextProps,
+                propKey
+              );
+        return;
+      }
+  }
+  for (var propKey$251 in lastProps)
+    (propKey$220 = lastProps[propKey$251]),
+      lastProps.hasOwnProperty(propKey$251) &&
+        null != propKey$220 &&
+        !nextProps.hasOwnProperty(propKey$251) &&
+        setProp(domElement, tag, propKey$251, null, nextProps, propKey$220);
+  for (lastProp in nextProps)
+    (propKey$220 = nextProps[lastProp]),
+      (propKey = lastProps[lastProp]),
+      !nextProps.hasOwnProperty(lastProp) ||
+        propKey$220 === propKey ||
+        (null == propKey$220 && null == propKey) ||
+        setProp(domElement, tag, lastProp, propKey$220, nextProps, propKey);
+}
+var eventsEnabled = null,
+  selectionInformation = null;
+function getOwnerDocumentFromRootContainer(rootContainerElement) {
+  return 9 === rootContainerElement.nodeType
+    ? rootContainerElement
+    : rootContainerElement.ownerDocument;
+}
+function getOwnHostContext(namespaceURI) {
+  switch (namespaceURI) {
+    case "http://www.w3.org/2000/svg":
+      return 1;
+    case "http://www.w3.org/1998/Math/MathML":
+      return 2;
+    default:
+      return 0;
+  }
+}
+function getChildHostContextProd(parentNamespace, type) {
+  if (0 === parentNamespace)
+    switch (type) {
+      case "svg":
+        return 1;
+      case "math":
+        return 2;
+      default:
+        return 0;
+    }
+  return 1 === parentNamespace && "foreignObject" === type
+    ? 0
+    : parentNamespace;
+}
+function shouldSetTextContent(type, props) {
+  return (
+    "textarea" === type ||
+    "noscript" === type ||
+    "string" === typeof props.children ||
+    "number" === typeof props.children ||
+    "bigint" === typeof props.children ||
+    ("object" === typeof props.dangerouslySetInnerHTML &&
+      null !== props.dangerouslySetInnerHTML &&
+      null != props.dangerouslySetInnerHTML.__html)
+  );
+}
+var currentPopstateTransitionEvent = null;
+function shouldAttemptEagerTransition() {
+  var event = window.event;
+  if (event && "popstate" === event.type) {
+    if (event === currentPopstateTransitionEvent) return !1;
+    currentPopstateTransitionEvent = event;
+    return !0;
+  }
+  currentPopstateTransitionEvent = null;
+  return !1;
+}
+var scheduleTimeout = "function" === typeof setTimeout ? setTimeout : void 0,
+  cancelTimeout = "function" === typeof clearTimeout ? clearTimeout : void 0,
+  localPromise = "function" === typeof Promise ? Promise : void 0,
+  scheduleMicrotask =
+    "function" === typeof queueMicrotask
+      ? queueMicrotask
+      : "undefined" !== typeof localPromise
+        ? function (callback) {
+            return localPromise
+              .resolve(null)
+              .then(callback)
+              .catch(handleErrorInNextTick);
+          }
+        : scheduleTimeout;
+function handleErrorInNextTick(error) {
+  setTimeout(function () {
+    throw error;
+  });
+}
+function isSingletonScope(type) {
+  return "head" === type;
+}
+function clearSuspenseBoundary(parentInstance, suspenseInstance) {
+  var node = suspenseInstance,
+    possiblePreambleContribution = 0,
+    depth = 0;
+  do {
+    var nextNode = node.nextSibling;
+    parentInstance.removeChild(node);
+    if (nextNode && 8 === nextNode.nodeType)
+      if (((node = nextNode.data), "/$" === node)) {
+        if (
+          0 < possiblePreambleContribution &&
+          8 > possiblePreambleContribution
+        ) {
+          node = possiblePreambleContribution;
+          var ownerDocument = parentInstance.ownerDocument;
+          node & 1 && releaseSingletonInstance(ownerDocument.documentElement);
+          node & 2 && releaseSingletonInstance(ownerDocument.body);
+          if (node & 4)
+            for (
+              node = ownerDocument.head,
+                releaseSingletonInstance(node),
+                ownerDocument = node.firstChild;
+              ownerDocument;
+
+            ) {
+              var nextNode$jscomp$0 = ownerDocument.nextSibling,
+                nodeName = ownerDocument.nodeName;
+              ownerDocument[internalHoistableMarker] ||
+                "SCRIPT" === nodeName ||
+                "STYLE" === nodeName ||
+                ("LINK" === nodeName &&
+                  "stylesheet" === ownerDocument.rel.toLowerCase()) ||
+                node.removeChild(ownerDocument);
+              ownerDocument = nextNode$jscomp$0;
+            }
+        }
+        if (0 === depth) {
+          parentInstance.removeChild(nextNode);
+          retryIfBlockedOn(suspenseInstance);
+          return;
+        }
+        depth--;
+      } else
+        "$" === node || "$?" === node || "$!" === node
+          ? depth++
+          : (possiblePreambleContribution = node.charCodeAt(0) - 48);
+    else possiblePreambleContribution = 0;
+    node = nextNode;
+  } while (node);
+  retryIfBlockedOn(suspenseInstance);
+}
+function clearContainerSparingly(container) {
+  var nextNode = container.firstChild;
+  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);
+  for (; nextNode; ) {
+    var node = nextNode;
+    nextNode = nextNode.nextSibling;
+    switch (node.nodeName) {
+      case "HTML":
+      case "HEAD":
+      case "BODY":
+        clearContainerSparingly(node);
+        detachDeletedInstance(node);
+        continue;
+      case "SCRIPT":
+      case "STYLE":
+        continue;
+      case "LINK":
+        if ("stylesheet" === node.rel.toLowerCase()) continue;
+    }
+    container.removeChild(node);
+  }
+}
+function canHydrateInstance(instance, type, props, inRootOrSingleton) {
+  for (; 1 === instance.nodeType; ) {
+    var anyProps = props;
+    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {
+      if (
+        !inRootOrSingleton &&
+        ("INPUT" !== instance.nodeName || "hidden" !== instance.type)
+      )
+        break;
+    } else if (!inRootOrSingleton)
+      if ("input" === type && "hidden" === instance.type) {
+        var name = null == anyProps.name ? null : "" + anyProps.name;
+        if (
+          "hidden" === anyProps.type &&
+          instance.getAttribute("name") === name
+        )
+          return instance;
+      } else return instance;
+    else if (!instance[internalHoistableMarker])
+      switch (type) {
+        case "meta":
+          if (!instance.hasAttribute("itemprop")) break;
+          return instance;
+        case "link":
+          name = instance.getAttribute("rel");
+          if ("stylesheet" === name && instance.hasAttribute("data-precedence"))
+            break;
+          else if (
+            name !== anyProps.rel ||
+            instance.getAttribute("href") !==
+              (null == anyProps.href || "" === anyProps.href
+                ? null
+                : anyProps.href) ||
+            instance.getAttribute("crossorigin") !==
+              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||
+            instance.getAttribute("title") !==
+              (null == anyProps.title ? null : anyProps.title)
+          )
+            break;
+          return instance;
+        case "style":
+          if (instance.hasAttribute("data-precedence")) break;
+          return instance;
+        case "script":
+          name = instance.getAttribute("src");
+          if (
+            (name !== (null == anyProps.src ? null : anyProps.src) ||
+              instance.getAttribute("type") !==
+                (null == anyProps.type ? null : anyProps.type) ||
+              instance.getAttribute("crossorigin") !==
+                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&
+            name &&
+            instance.hasAttribute("async") &&
+            !instance.hasAttribute("itemprop")
+          )
+            break;
+          return instance;
+        default:
+          return instance;
+      }
+    instance = getNextHydratable(instance.nextSibling);
+    if (null === instance) break;
+  }
+  return null;
+}
+function canHydrateTextInstance(instance, text, inRootOrSingleton) {
+  if ("" === text) return null;
+  for (; 3 !== instance.nodeType; ) {
+    if (
+      (1 !== instance.nodeType ||
+        "INPUT" !== instance.nodeName ||
+        "hidden" !== instance.type) &&
+      !inRootOrSingleton
+    )
+      return null;
+    instance = getNextHydratable(instance.nextSibling);
+    if (null === instance) return null;
+  }
+  return instance;
+}
+function isSuspenseInstanceFallback(instance) {
+  return (
+    "$!" === instance.data ||
+    ("$?" === instance.data && "complete" === instance.ownerDocument.readyState)
+  );
+}
+function registerSuspenseInstanceRetry(instance, callback) {
+  var ownerDocument = instance.ownerDocument;
+  if ("$?" !== instance.data || "complete" === ownerDocument.readyState)
+    callback();
+  else {
+    var listener = function () {
+      callback();
+      ownerDocument.removeEventListener("DOMContentLoaded", listener);
+    };
+    ownerDocument.addEventListener("DOMContentLoaded", listener);
+    instance._reactRetry = listener;
+  }
+}
+function getNextHydratable(node) {
+  for (; null != node; node = node.nextSibling) {
+    var nodeType = node.nodeType;
+    if (1 === nodeType || 3 === nodeType) break;
+    if (8 === nodeType) {
+      nodeType = node.data;
+      if (
+        "$" === nodeType ||
+        "$!" === nodeType ||
+        "$?" === nodeType ||
+        "F!" === nodeType ||
+        "F" === nodeType
+      )
+        break;
+      if ("/$" === nodeType) return null;
+    }
+  }
+  return node;
+}
+var previousHydratableOnEnteringScopedSingleton = null;
+function getParentSuspenseInstance(targetInstance) {
+  targetInstance = targetInstance.previousSibling;
+  for (var depth = 0; targetInstance; ) {
+    if (8 === targetInstance.nodeType) {
+      var data = targetInstance.data;
+      if ("$" === data || "$!" === data || "$?" === data) {
+        if (0 === depth) return targetInstance;
+        depth--;
+      } else "/$" === data && depth++;
+    }
+    targetInstance = targetInstance.previousSibling;
+  }
+  return null;
+}
+function resolveSingletonInstance(type, props, rootContainerInstance) {
+  props = getOwnerDocumentFromRootContainer(rootContainerInstance);
+  switch (type) {
+    case "html":
+      type = props.documentElement;
+      if (!type) throw Error(formatProdErrorMessage(452));
+      return type;
+    case "head":
+      type = props.head;
+      if (!type) throw Error(formatProdErrorMessage(453));
+      return type;
+    case "body":
+      type = props.body;
+      if (!type) throw Error(formatProdErrorMessage(454));
+      return type;
+    default:
+      throw Error(formatProdErrorMessage(451));
+  }
+}
+function releaseSingletonInstance(instance) {
+  for (var attributes = instance.attributes; attributes.length; )
+    instance.removeAttributeNode(attributes[0]);
+  detachDeletedInstance(instance);
+}
+var preloadPropsMap = new Map(),
+  preconnectsSet = new Set();
+function getHoistableRoot(container) {
+  return "function" === typeof container.getRootNode
+    ? container.getRootNode()
+    : 9 === container.nodeType
+      ? container
+      : container.ownerDocument;
+}
+var previousDispatcher = ReactDOMSharedInternals.d;
+ReactDOMSharedInternals.d = {
+  f: flushSyncWork,
+  r: requestFormReset$1,
+  D: prefetchDNS$1,
+  C: preconnect$1,
+  L: preload$1,
+  m: preloadModule$1,
+  X: preinitScript,
+  S: preinitStyle,
+  M: preinitModuleScript
+};
+function flushSyncWork() {
+  var previousWasRendering = previousDispatcher.f(),
+    wasRendering = flushSyncWork$1();
+  return previousWasRendering || wasRendering;
+}
+function requestFormReset$1(form) {
+  var formInst = getInstanceFromNode(form);
+  null !== formInst && 5 === formInst.tag && "form" === formInst.type
+    ? requestFormReset$2(formInst)
+    : previousDispatcher.r(form);
+}
+var globalDocument = "undefined" === typeof document ? null : document;
+function preconnectAs(rel, href, crossOrigin) {
+  var ownerDocument = globalDocument;
+  if (ownerDocument && "string" === typeof href && href) {
+    var limitedEscapedHref =
+      escapeSelectorAttributeValueInsideDoubleQuotes(href);
+    limitedEscapedHref =
+      'link[rel="' + rel + '"][href="' + limitedEscapedHref + '"]';
+    "string" === typeof crossOrigin &&
+      (limitedEscapedHref += '[crossorigin="' + crossOrigin + '"]');
+    preconnectsSet.has(limitedEscapedHref) ||
+      (preconnectsSet.add(limitedEscapedHref),
+      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),
+      null === ownerDocument.querySelector(limitedEscapedHref) &&
+        ((href = ownerDocument.createElement("link")),
+        setInitialProperties(href, "link", rel),
+        markNodeAsHoistable(href),
+        ownerDocument.head.appendChild(href)));
+  }
+}
+function prefetchDNS$1(href) {
+  previousDispatcher.D(href);
+  preconnectAs("dns-prefetch", href, null);
+}
+function preconnect$1(href, crossOrigin) {
+  previousDispatcher.C(href, crossOrigin);
+  preconnectAs("preconnect", href, crossOrigin);
+}
+function preload$1(href, as, options) {
+  previousDispatcher.L(href, as, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && href && as) {
+    var preloadSelector =
+      'link[rel="preload"][as="' +
+      escapeSelectorAttributeValueInsideDoubleQuotes(as) +
+      '"]';
+    "image" === as
+      ? options && options.imageSrcSet
+        ? ((preloadSelector +=
+            '[imagesrcset="' +
+            escapeSelectorAttributeValueInsideDoubleQuotes(
+              options.imageSrcSet
+            ) +
+            '"]'),
+          "string" === typeof options.imageSizes &&
+            (preloadSelector +=
+              '[imagesizes="' +
+              escapeSelectorAttributeValueInsideDoubleQuotes(
+                options.imageSizes
+              ) +
+              '"]'))
+        : (preloadSelector +=
+            '[href="' +
+            escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+            '"]')
+      : (preloadSelector +=
+          '[href="' +
+          escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+          '"]');
+    var key = preloadSelector;
+    switch (as) {
+      case "style":
+        key = getStyleKey(href);
+        break;
+      case "script":
+        key = getScriptKey(href);
+    }
+    preloadPropsMap.has(key) ||
+      ((href = assign(
+        {
+          rel: "preload",
+          href:
+            "image" === as && options && options.imageSrcSet ? void 0 : href,
+          as: as
+        },
+        options
+      )),
+      preloadPropsMap.set(key, href),
+      null !== ownerDocument.querySelector(preloadSelector) ||
+        ("style" === as &&
+          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||
+        ("script" === as &&
+          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||
+        ((as = ownerDocument.createElement("link")),
+        setInitialProperties(as, "link", href),
+        markNodeAsHoistable(as),
+        ownerDocument.head.appendChild(as)));
+  }
+}
+function preloadModule$1(href, options) {
+  previousDispatcher.m(href, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && href) {
+    var as = options && "string" === typeof options.as ? options.as : "script",
+      preloadSelector =
+        'link[rel="modulepreload"][as="' +
+        escapeSelectorAttributeValueInsideDoubleQuotes(as) +
+        '"][href="' +
+        escapeSelectorAttributeValueInsideDoubleQuotes(href) +
+        '"]',
+      key = preloadSelector;
+    switch (as) {
+      case "audioworklet":
+      case "paintworklet":
+      case "serviceworker":
+      case "sharedworker":
+      case "worker":
+      case "script":
+        key = getScriptKey(href);
+    }
+    if (
+      !preloadPropsMap.has(key) &&
+      ((href = assign({ rel: "modulepreload", href: href }, options)),
+      preloadPropsMap.set(key, href),
+      null === ownerDocument.querySelector(preloadSelector))
+    ) {
+      switch (as) {
+        case "audioworklet":
+        case "paintworklet":
+        case "serviceworker":
+        case "sharedworker":
+        case "worker":
+        case "script":
+          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))
+            return;
+      }
+      as = ownerDocument.createElement("link");
+      setInitialProperties(as, "link", href);
+      markNodeAsHoistable(as);
+      ownerDocument.head.appendChild(as);
+    }
+  }
+}
+function preinitStyle(href, precedence, options) {
+  previousDispatcher.S(href, precedence, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && href) {
+    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,
+      key = getStyleKey(href);
+    precedence = precedence || "default";
+    var resource = styles.get(key);
+    if (!resource) {
+      var state = { loading: 0, preload: null };
+      if (
+        (resource = ownerDocument.querySelector(
+          getStylesheetSelectorFromKey(key)
+        ))
+      )
+        state.loading = 5;
+      else {
+        href = assign(
+          { rel: "stylesheet", href: href, "data-precedence": precedence },
+          options
+        );
+        (options = preloadPropsMap.get(key)) &&
+          adoptPreloadPropsForStylesheet(href, options);
+        var link = (resource = ownerDocument.createElement("link"));
+        markNodeAsHoistable(link);
+        setInitialProperties(link, "link", href);
+        link._p = new Promise(function (resolve, reject) {
+          link.onload = resolve;
+          link.onerror = reject;
+        });
+        link.addEventListener("load", function () {
+          state.loading |= 1;
+        });
+        link.addEventListener("error", function () {
+          state.loading |= 2;
+        });
+        state.loading |= 4;
+        insertStylesheet(resource, precedence, ownerDocument);
+      }
+      resource = {
+        type: "stylesheet",
+        instance: resource,
+        count: 1,
+        state: state
+      };
+      styles.set(key, resource);
+    }
+  }
+}
+function preinitScript(src, options) {
+  previousDispatcher.X(src, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && src) {
+    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,
+      key = getScriptKey(src),
+      resource = scripts.get(key);
+    resource ||
+      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),
+      resource ||
+        ((src = assign({ src: src, async: !0 }, options)),
+        (options = preloadPropsMap.get(key)) &&
+          adoptPreloadPropsForScript(src, options),
+        (resource = ownerDocument.createElement("script")),
+        markNodeAsHoistable(resource),
+        setInitialProperties(resource, "link", src),
+        ownerDocument.head.appendChild(resource)),
+      (resource = {
+        type: "script",
+        instance: resource,
+        count: 1,
+        state: null
+      }),
+      scripts.set(key, resource));
+  }
+}
+function preinitModuleScript(src, options) {
+  previousDispatcher.M(src, options);
+  var ownerDocument = globalDocument;
+  if (ownerDocument && src) {
+    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,
+      key = getScriptKey(src),
+      resource = scripts.get(key);
+    resource ||
+      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),
+      resource ||
+        ((src = assign({ src: src, async: !0, type: "module" }, options)),
+        (options = preloadPropsMap.get(key)) &&
+          adoptPreloadPropsForScript(src, options),
+        (resource = ownerDocument.createElement("script")),
+        markNodeAsHoistable(resource),
+        setInitialProperties(resource, "link", src),
+        ownerDocument.head.appendChild(resource)),
+      (resource = {
+        type: "script",
+        instance: resource,
+        count: 1,
+        state: null
+      }),
+      scripts.set(key, resource));
+  }
+}
+function getResource(type, currentProps, pendingProps, currentResource) {
+  var JSCompiler_inline_result = (JSCompiler_inline_result =
+    rootInstanceStackCursor.current)
+    ? getHoistableRoot(JSCompiler_inline_result)
+    : null;
+  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));
+  switch (type) {
+    case "meta":
+    case "title":
+      return null;
+    case "style":
+      return "string" === typeof pendingProps.precedence &&
+        "string" === typeof pendingProps.href
+        ? ((currentProps = getStyleKey(pendingProps.href)),
+          (pendingProps = getResourcesFromRoot(
+            JSCompiler_inline_result
+          ).hoistableStyles),
+          (currentResource = pendingProps.get(currentProps)),
+          currentResource ||
+            ((currentResource = {
+              type: "style",
+              instance: null,
+              count: 0,
+              state: null
+            }),
+            pendingProps.set(currentProps, currentResource)),
+          currentResource)
+        : { type: "void", instance: null, count: 0, state: null };
+    case "link":
+      if (
+        "stylesheet" === pendingProps.rel &&
+        "string" === typeof pendingProps.href &&
+        "string" === typeof pendingProps.precedence
+      ) {
+        type = getStyleKey(pendingProps.href);
+        var styles$259 = getResourcesFromRoot(
+            JSCompiler_inline_result
+          ).hoistableStyles,
+          resource$260 = styles$259.get(type);
+        resource$260 ||
+          ((JSCompiler_inline_result =
+            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),
+          (resource$260 = {
+            type: "stylesheet",
+            instance: null,
+            count: 0,
+            state: { loading: 0, preload: null }
+          }),
+          styles$259.set(type, resource$260),
+          (styles$259 = JSCompiler_inline_result.querySelector(
+            getStylesheetSelectorFromKey(type)
+          )) &&
+            !styles$259._p &&
+            ((resource$260.instance = styles$259),
+            (resource$260.state.loading = 5)),
+          preloadPropsMap.has(type) ||
+            ((pendingProps = {
+              rel: "preload",
+              as: "style",
+              href: pendingProps.href,
+              crossOrigin: pendingProps.crossOrigin,
+              integrity: pendingProps.integrity,
+              media: pendingProps.media,
+              hrefLang: pendingProps.hrefLang,
+              referrerPolicy: pendingProps.referrerPolicy
+            }),
+            preloadPropsMap.set(type, pendingProps),
+            styles$259 ||
+              preloadStylesheet(
+                JSCompiler_inline_result,
+                type,
+                pendingProps,
+                resource$260.state
+              )));
+        if (currentProps && null === currentResource)
+          throw Error(formatProdErrorMessage(528, ""));
+        return resource$260;
+      }
+      if (currentProps && null !== currentResource)
+        throw Error(formatProdErrorMessage(529, ""));
+      return null;
+    case "script":
+      return (
+        (currentProps = pendingProps.async),
+        (pendingProps = pendingProps.src),
+        "string" === typeof pendingProps &&
+        currentProps &&
+        "function" !== typeof currentProps &&
+        "symbol" !== typeof currentProps
+          ? ((currentProps = getScriptKey(pendingProps)),
+            (pendingProps = getResourcesFromRoot(
+              JSCompiler_inline_result
+            ).hoistableScripts),
+            (currentResource = pendingProps.get(currentProps)),
+            currentResource ||
+              ((currentResource = {
+                type: "script",
+                instance: null,
+                count: 0,
+                state: null
+              }),
+              pendingProps.set(currentProps, currentResource)),
+            currentResource)
+          : { type: "void", instance: null, count: 0, state: null }
+      );
+    default:
+      throw Error(formatProdErrorMessage(444, type));
+  }
+}
+function getStyleKey(href) {
+  return 'href="' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '"';
+}
+function getStylesheetSelectorFromKey(key) {
+  return 'link[rel="stylesheet"][' + key + "]";
+}
+function stylesheetPropsFromRawProps(rawProps) {
+  return assign({}, rawProps, {
+    "data-precedence": rawProps.precedence,
+    precedence: null
+  });
+}
+function preloadStylesheet(ownerDocument, key, preloadProps, state) {
+  ownerDocument.querySelector('link[rel="preload"][as="style"][' + key + "]")
+    ? (state.loading = 1)
+    : ((key = ownerDocument.createElement("link")),
+      (state.preload = key),
+      key.addEventListener("load", function () {
+        return (state.loading |= 1);
+      }),
+      key.addEventListener("error", function () {
+        return (state.loading |= 2);
+      }),
+      setInitialProperties(key, "link", preloadProps),
+      markNodeAsHoistable(key),
+      ownerDocument.head.appendChild(key));
+}
+function getScriptKey(src) {
+  return '[src="' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '"]';
+}
+function getScriptSelectorFromKey(key) {
+  return "script[async]" + key;
+}
+function acquireResource(hoistableRoot, resource, props) {
+  resource.count++;
+  if (null === resource.instance)
+    switch (resource.type) {
+      case "style":
+        var instance = hoistableRoot.querySelector(
+          'style[data-href~="' +
+            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +
+            '"]'
+        );
+        if (instance)
+          return (
+            (resource.instance = instance),
+            markNodeAsHoistable(instance),
+            instance
+          );
+        var styleProps = assign({}, props, {
+          "data-href": props.href,
+          "data-precedence": props.precedence,
+          href: null,
+          precedence: null
+        });
+        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(
+          "style"
+        );
+        markNodeAsHoistable(instance);
+        setInitialProperties(instance, "style", styleProps);
+        insertStylesheet(instance, props.precedence, hoistableRoot);
+        return (resource.instance = instance);
+      case "stylesheet":
+        styleProps = getStyleKey(props.href);
+        var instance$265 = hoistableRoot.querySelector(
+          getStylesheetSelectorFromKey(styleProps)
+        );
+        if (instance$265)
+          return (
+            (resource.state.loading |= 4),
+            (resource.instance = instance$265),
+            markNodeAsHoistable(instance$265),
+            instance$265
+          );
+        instance = stylesheetPropsFromRawProps(props);
+        (styleProps = preloadPropsMap.get(styleProps)) &&
+          adoptPreloadPropsForStylesheet(instance, styleProps);
+        instance$265 = (
+          hoistableRoot.ownerDocument || hoistableRoot
+        ).createElement("link");
+        markNodeAsHoistable(instance$265);
+        var linkInstance = instance$265;
+        linkInstance._p = new Promise(function (resolve, reject) {
+          linkInstance.onload = resolve;
+          linkInstance.onerror = reject;
+        });
+        setInitialProperties(instance$265, "link", instance);
+        resource.state.loading |= 4;
+        insertStylesheet(instance$265, props.precedence, hoistableRoot);
+        return (resource.instance = instance$265);
+      case "script":
+        instance$265 = getScriptKey(props.src);
+        if (
+          (styleProps = hoistableRoot.querySelector(
+            getScriptSelectorFromKey(instance$265)
+          ))
+        )
+          return (
+            (resource.instance = styleProps),
+            markNodeAsHoistable(styleProps),
+            styleProps
+          );
+        instance = props;
+        if ((styleProps = preloadPropsMap.get(instance$265)))
+          (instance = assign({}, props)),
+            adoptPreloadPropsForScript(instance, styleProps);
+        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;
+        styleProps = hoistableRoot.createElement("script");
+        markNodeAsHoistable(styleProps);
+        setInitialProperties(styleProps, "link", instance);
+        hoistableRoot.head.appendChild(styleProps);
+        return (resource.instance = styleProps);
+      case "void":
+        return null;
+      default:
+        throw Error(formatProdErrorMessage(443, resource.type));
+    }
+  else
+    "stylesheet" === resource.type &&
+      0 === (resource.state.loading & 4) &&
+      ((instance = resource.instance),
+      (resource.state.loading |= 4),
+      insertStylesheet(instance, props.precedence, hoistableRoot));
+  return resource.instance;
+}
+function insertStylesheet(instance, precedence, root) {
+  for (
+    var nodes = root.querySelectorAll(
+        'link[rel="stylesheet"][data-precedence],style[data-precedence]'
+      ),
+      last = nodes.length ? nodes[nodes.length - 1] : null,
+      prior = last,
+      i = 0;
+    i < nodes.length;
+    i++
+  ) {
+    var node = nodes[i];
+    if (node.dataset.precedence === precedence) prior = node;
+    else if (prior !== last) break;
+  }
+  prior
+    ? prior.parentNode.insertBefore(instance, prior.nextSibling)
+    : ((precedence = 9 === root.nodeType ? root.head : root),
+      precedence.insertBefore(instance, precedence.firstChild));
+}
+function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {
+  null == stylesheetProps.crossOrigin &&
+    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);
+  null == stylesheetProps.referrerPolicy &&
+    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);
+  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);
+}
+function adoptPreloadPropsForScript(scriptProps, preloadProps) {
+  null == scriptProps.crossOrigin &&
+    (scriptProps.crossOrigin = preloadProps.crossOrigin);
+  null == scriptProps.referrerPolicy &&
+    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);
+  null == scriptProps.integrity &&
+    (scriptProps.integrity = preloadProps.integrity);
+}
+var tagCaches = null;
+function getHydratableHoistableCache(type, keyAttribute, ownerDocument) {
+  if (null === tagCaches) {
+    var cache = new Map();
+    var caches = (tagCaches = new Map());
+    caches.set(ownerDocument, cache);
+  } else
+    (caches = tagCaches),
+      (cache = caches.get(ownerDocument)),
+      cache || ((cache = new Map()), caches.set(ownerDocument, cache));
+  if (cache.has(type)) return cache;
+  cache.set(type, null);
+  ownerDocument = ownerDocument.getElementsByTagName(type);
+  for (caches = 0; caches < ownerDocument.length; caches++) {
+    var node = ownerDocument[caches];
+    if (
+      !(
+        node[internalHoistableMarker] ||
+        node[internalInstanceKey] ||
+        ("link" === type && "stylesheet" === node.getAttribute("rel"))
+      ) &&
+      "http://www.w3.org/2000/svg" !== node.namespaceURI
+    ) {
+      var nodeKey = node.getAttribute(keyAttribute) || "";
+      nodeKey = type + nodeKey;
+      var existing = cache.get(nodeKey);
+      existing ? existing.push(node) : cache.set(nodeKey, [node]);
+    }
+  }
+  return cache;
+}
+function mountHoistable(hoistableRoot, type, instance) {
+  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;
+  hoistableRoot.head.insertBefore(
+    instance,
+    "title" === type ? hoistableRoot.querySelector("head > title") : null
+  );
+}
+function isHostHoistableType(type, props, hostContext) {
+  if (1 === hostContext || null != props.itemProp) return !1;
+  switch (type) {
+    case "meta":
+    case "title":
+      return !0;
+    case "style":
+      if (
+        "string" !== typeof props.precedence ||
+        "string" !== typeof props.href ||
+        "" === props.href
+      )
+        break;
+      return !0;
+    case "link":
+      if (
+        "string" !== typeof props.rel ||
+        "string" !== typeof props.href ||
+        "" === props.href ||
+        props.onLoad ||
+        props.onError
+      )
+        break;
+      switch (props.rel) {
+        case "stylesheet":
+          return (
+            (type = props.disabled),
+            "string" === typeof props.precedence && null == type
+          );
+        default:
+          return !0;
+      }
+    case "script":
+      if (
+        props.async &&
+        "function" !== typeof props.async &&
+        "symbol" !== typeof props.async &&
+        !props.onLoad &&
+        !props.onError &&
+        props.src &&
+        "string" === typeof props.src
+      )
+        return !0;
+  }
+  return !1;
+}
+function preloadResource(resource) {
+  return "stylesheet" === resource.type && 0 === (resource.state.loading & 3)
+    ? !1
+    : !0;
+}
+var suspendedState = null;
+function noop$1() {}
+function suspendResource(hoistableRoot, resource, props) {
+  if (null === suspendedState) throw Error(formatProdErrorMessage(475));
+  var state = suspendedState;
+  if (
+    "stylesheet" === resource.type &&
+    ("string" !== typeof props.media ||
+      !1 !== matchMedia(props.media).matches) &&
+    0 === (resource.state.loading & 4)
+  ) {
+    if (null === resource.instance) {
+      var key = getStyleKey(props.href),
+        instance = hoistableRoot.querySelector(
+          getStylesheetSelectorFromKey(key)
+        );
+      if (instance) {
+        hoistableRoot = instance._p;
+        null !== hoistableRoot &&
+          "object" === typeof hoistableRoot &&
+          "function" === typeof hoistableRoot.then &&
+          (state.count++,
+          (state = onUnsuspend.bind(state)),
+          hoistableRoot.then(state, state));
+        resource.state.loading |= 4;
+        resource.instance = instance;
+        markNodeAsHoistable(instance);
+        return;
+      }
+      instance = hoistableRoot.ownerDocument || hoistableRoot;
+      props = stylesheetPropsFromRawProps(props);
+      (key = preloadPropsMap.get(key)) &&
+        adoptPreloadPropsForStylesheet(props, key);
+      instance = instance.createElement("link");
+      markNodeAsHoistable(instance);
+      var linkInstance = instance;
+      linkInstance._p = new Promise(function (resolve, reject) {
+        linkInstance.onload = resolve;
+        linkInstance.onerror = reject;
+      });
+      setInitialProperties(instance, "link", props);
+      resource.instance = instance;
+    }
+    null === state.stylesheets && (state.stylesheets = new Map());
+    state.stylesheets.set(resource, hoistableRoot);
+    (hoistableRoot = resource.state.preload) &&
+      0 === (resource.state.loading & 3) &&
+      (state.count++,
+      (resource = onUnsuspend.bind(state)),
+      hoistableRoot.addEventListener("load", resource),
+      hoistableRoot.addEventListener("error", resource));
+  }
+}
+function waitForCommitToBeReady() {
+  if (null === suspendedState) throw Error(formatProdErrorMessage(475));
+  var state = suspendedState;
+  state.stylesheets &&
+    0 === state.count &&
+    insertSuspendedStylesheets(state, state.stylesheets);
+  return 0 < state.count
+    ? function (commit) {
+        var stylesheetTimer = setTimeout(function () {
+          state.stylesheets &&
+            insertSuspendedStylesheets(state, state.stylesheets);
+          if (state.unsuspend) {
+            var unsuspend = state.unsuspend;
+            state.unsuspend = null;
+            unsuspend();
+          }
+        }, 6e4);
+        state.unsuspend = commit;
+        return function () {
+          state.unsuspend = null;
+          clearTimeout(stylesheetTimer);
+        };
+      }
+    : null;
+}
+function onUnsuspend() {
+  this.count--;
+  if (0 === this.count)
+    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);
+    else if (this.unsuspend) {
+      var unsuspend = this.unsuspend;
+      this.unsuspend = null;
+      unsuspend();
+    }
+}
+var precedencesByRoot = null;
+function insertSuspendedStylesheets(state, resources) {
+  state.stylesheets = null;
+  null !== state.unsuspend &&
+    (state.count++,
+    (precedencesByRoot = new Map()),
+    resources.forEach(insertStylesheetIntoRoot, state),
+    (precedencesByRoot = null),
+    onUnsuspend.call(state));
+}
+function insertStylesheetIntoRoot(root, resource) {
+  if (!(resource.state.loading & 4)) {
+    var precedences = precedencesByRoot.get(root);
+    if (precedences) var last = precedences.get(null);
+    else {
+      precedences = new Map();
+      precedencesByRoot.set(root, precedences);
+      for (
+        var nodes = root.querySelectorAll(
+            "link[data-precedence],style[data-precedence]"
+          ),
+          i = 0;
+        i < nodes.length;
+        i++
+      ) {
+        var node = nodes[i];
+        if (
+          "LINK" === node.nodeName ||
+          "not all" !== node.getAttribute("media")
+        )
+          precedences.set(node.dataset.precedence, node), (last = node);
+      }
+      last && precedences.set(null, last);
+    }
+    nodes = resource.instance;
+    node = nodes.getAttribute("data-precedence");
+    i = precedences.get(node) || last;
+    i === last && precedences.set(null, nodes);
+    precedences.set(node, nodes);
+    this.count++;
+    last = onUnsuspend.bind(this);
+    nodes.addEventListener("load", last);
+    nodes.addEventListener("error", last);
+    i
+      ? i.parentNode.insertBefore(nodes, i.nextSibling)
+      : ((root = 9 === root.nodeType ? root.head : root),
+        root.insertBefore(nodes, root.firstChild));
+    resource.state.loading |= 4;
+  }
+}
+var HostTransitionContext = {
+  $$typeof: REACT_CONTEXT_TYPE,
+  Provider: null,
+  Consumer: null,
+  _currentValue: sharedNotPendingObject,
+  _currentValue2: sharedNotPendingObject,
+  _threadCount: 0
+};
+function FiberRootNode(
+  containerInfo,
+  tag,
+  hydrate,
+  identifierPrefix,
+  onUncaughtError,
+  onCaughtError,
+  onRecoverableError,
+  formState
+) {
+  this.tag = 1;
+  this.containerInfo = containerInfo;
+  this.pingCache = this.current = this.pendingChildren = null;
+  this.timeoutHandle = -1;
+  this.callbackNode =
+    this.next =
+    this.pendingContext =
+    this.context =
+    this.cancelPendingCommit =
+      null;
+  this.callbackPriority = 0;
+  this.expirationTimes = createLaneMap(-1);
+  this.entangledLanes =
+    this.shellSuspendCounter =
+    this.errorRecoveryDisabledLanes =
+    this.expiredLanes =
+    this.warmLanes =
+    this.pingedLanes =
+    this.suspendedLanes =
+    this.pendingLanes =
+      0;
+  this.entanglements = createLaneMap(0);
+  this.hiddenUpdates = createLaneMap(null);
+  this.identifierPrefix = identifierPrefix;
+  this.onUncaughtError = onUncaughtError;
+  this.onCaughtError = onCaughtError;
+  this.onRecoverableError = onRecoverableError;
+  this.pooledCache = null;
+  this.pooledCacheLanes = 0;
+  this.formState = formState;
+  this.incompleteTransitions = new Map();
+  this.passiveEffectDuration = this.effectDuration = -0;
+  this.memoizedUpdaters = new Set();
+  containerInfo = this.pendingUpdatersLaneMap = [];
+  for (tag = 0; 31 > tag; tag++) containerInfo.push(new Set());
+}
+function createFiberRoot(
+  containerInfo,
+  tag,
+  hydrate,
+  initialChildren,
+  hydrationCallbacks,
+  isStrictMode,
+  identifierPrefix,
+  onUncaughtError,
+  onCaughtError,
+  onRecoverableError,
+  transitionCallbacks,
+  formState
+) {
+  containerInfo = new FiberRootNode(
+    containerInfo,
+    tag,
+    hydrate,
+    identifierPrefix,
+    onUncaughtError,
+    onCaughtError,
+    onRecoverableError,
+    formState
+  );
+  tag = 1;
+  !0 === isStrictMode && (tag |= 24);
+  isDevToolsPresent && (tag |= 2);
+  isStrictMode = createFiberImplClass(3, null, null, tag);
+  containerInfo.current = isStrictMode;
+  isStrictMode.stateNode = containerInfo;
+  tag = createCache();
+  tag.refCount++;
+  containerInfo.pooledCache = tag;
+  tag.refCount++;
+  isStrictMode.memoizedState = {
+    element: initialChildren,
+    isDehydrated: hydrate,
+    cache: tag
+  };
+  initializeUpdateQueue(isStrictMode);
+  return containerInfo;
+}
+function createPortal$1(children, containerInfo, implementation) {
+  var key =
+    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;
+  return {
+    $$typeof: REACT_PORTAL_TYPE,
+    key: null == key ? null : "" + key,
+    children: children,
+    containerInfo: containerInfo,
+    implementation: implementation
+  };
+}
+function getContextForSubtree(parentComponent) {
+  if (!parentComponent) return emptyContextObject;
+  parentComponent = emptyContextObject;
+  return parentComponent;
+}
+function updateContainerImpl(
+  rootFiber,
+  lane,
+  element,
+  container,
+  parentComponent,
+  callback
+) {
+  null !== injectedProfilingHooks &&
+    "function" === typeof injectedProfilingHooks.markRenderScheduled &&
+    injectedProfilingHooks.markRenderScheduled(lane);
+  parentComponent = getContextForSubtree(parentComponent);
+  null === container.context
+    ? (container.context = parentComponent)
+    : (container.pendingContext = parentComponent);
+  container = createUpdate(lane);
+  container.payload = { element: element };
+  callback = void 0 === callback ? null : callback;
+  null !== callback && (container.callback = callback);
+  element = enqueueUpdate(rootFiber, container, lane);
+  null !== element &&
+    (scheduleUpdateOnFiber(element, rootFiber, lane),
+    entangleTransitions(element, rootFiber, lane));
+}
+function markRetryLaneImpl(fiber, retryLane) {
+  fiber = fiber.memoizedState;
+  if (null !== fiber && null !== fiber.dehydrated) {
+    var a = fiber.retryLane;
+    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;
+  }
+}
+function markRetryLaneIfNotHydrated(fiber, retryLane) {
+  markRetryLaneImpl(fiber, retryLane);
+  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);
+}
+function attemptContinuousHydration(fiber) {
+  if (13 === fiber.tag) {
+    var root = enqueueConcurrentRenderForLane(fiber, 67108864);
+    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);
+    markRetryLaneIfNotHydrated(fiber, 67108864);
+  }
+}
+var _enabled = !0;
+function dispatchDiscreteEvent(
+  domEventName,
+  eventSystemFlags,
+  container,
+  nativeEvent
+) {
+  var prevTransition = ReactSharedInternals.T;
+  ReactSharedInternals.T = null;
+  var previousPriority = ReactDOMSharedInternals.p;
+  try {
+    (ReactDOMSharedInternals.p = 2),
+      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
+  } finally {
+    (ReactDOMSharedInternals.p = previousPriority),
+      (ReactSharedInternals.T = prevTransition);
+  }
+}
+function dispatchContinuousEvent(
+  domEventName,
+  eventSystemFlags,
+  container,
+  nativeEvent
+) {
+  var prevTransition = ReactSharedInternals.T;
+  ReactSharedInternals.T = null;
+  var previousPriority = ReactDOMSharedInternals.p;
+  try {
+    (ReactDOMSharedInternals.p = 8),
+      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
+  } finally {
+    (ReactDOMSharedInternals.p = previousPriority),
+      (ReactSharedInternals.T = prevTransition);
+  }
+}
+function dispatchEvent(
+  domEventName,
+  eventSystemFlags,
+  targetContainer,
+  nativeEvent
+) {
+  if (_enabled) {
+    var blockedOn = findInstanceBlockingEvent(nativeEvent);
+    if (null === blockedOn)
+      dispatchEventForPluginEventSystem(
+        domEventName,
+        eventSystemFlags,
+        nativeEvent,
+        return_targetInst,
+        targetContainer
+      ),
+        clearIfContinuousEvent(domEventName, nativeEvent);
+    else if (
+      queueIfContinuousEvent(
+        blockedOn,
+        domEventName,
+        eventSystemFlags,
+        targetContainer,
+        nativeEvent
+      )
+    )
+      nativeEvent.stopPropagation();
+    else if (
+      (clearIfContinuousEvent(domEventName, nativeEvent),
+      eventSystemFlags & 4 &&
+        -1 < discreteReplayableEvents.indexOf(domEventName))
+    ) {
+      for (; null !== blockedOn; ) {
+        var fiber = getInstanceFromNode(blockedOn);
+        if (null !== fiber)
+          switch (fiber.tag) {
+            case 3:
+              fiber = fiber.stateNode;
+              if (fiber.current.memoizedState.isDehydrated) {
+                var lanes = getHighestPriorityLanes(fiber.pendingLanes);
+                if (0 !== lanes) {
+                  var root = fiber;
+                  root.pendingLanes |= 2;
+                  for (root.entangledLanes |= 2; lanes; ) {
+                    var lane = 1 << (31 - clz32(lanes));
+                    root.entanglements[1] |= lane;
+                    lanes &= ~lane;
+                  }
+                  ensureRootIsScheduled(fiber);
+                  0 === (executionContext & 6) &&
+                    ((workInProgressRootRenderTargetTime = now$1() + 500),
+                    flushSyncWorkAcrossRoots_impl(0, !1));
+                }
+              }
+              break;
+            case 13:
+              (root = enqueueConcurrentRenderForLane(fiber, 2)),
+                null !== root && scheduleUpdateOnFiber(root, fiber, 2),
+                flushSyncWork$1(),
+                markRetryLaneIfNotHydrated(fiber, 2);
+          }
+        fiber = findInstanceBlockingEvent(nativeEvent);
+        null === fiber &&
+          dispatchEventForPluginEventSystem(
+            domEventName,
+            eventSystemFlags,
+            nativeEvent,
+            return_targetInst,
+            targetContainer
+          );
+        if (fiber === blockedOn) break;
+        blockedOn = fiber;
+      }
+      null !== blockedOn && nativeEvent.stopPropagation();
+    } else
+      dispatchEventForPluginEventSystem(
+        domEventName,
+        eventSystemFlags,
+        nativeEvent,
+        null,
+        targetContainer
+      );
+  }
+}
+function findInstanceBlockingEvent(nativeEvent) {
+  nativeEvent = getEventTarget(nativeEvent);
+  return findInstanceBlockingTarget(nativeEvent);
+}
+var return_targetInst = null;
+function findInstanceBlockingTarget(targetNode) {
+  return_targetInst = null;
+  targetNode = getClosestInstanceFromNode(targetNode);
+  if (null !== targetNode) {
+    var nearestMounted = getNearestMountedFiber(targetNode);
+    if (null === nearestMounted) targetNode = null;
+    else {
+      var tag = nearestMounted.tag;
+      if (13 === tag) {
+        targetNode = getSuspenseInstanceFromFiber(nearestMounted);
+        if (null !== targetNode) return targetNode;
+        targetNode = null;
+      } else if (3 === tag) {
+        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)
+          return 3 === nearestMounted.tag
+            ? nearestMounted.stateNode.containerInfo
+            : null;
+        targetNode = null;
+      } else nearestMounted !== targetNode && (targetNode = null);
+    }
+  }
+  return_targetInst = targetNode;
+  return null;
+}
+function getEventPriority(domEventName) {
+  switch (domEventName) {
+    case "beforetoggle":
+    case "cancel":
+    case "click":
+    case "close":
+    case "contextmenu":
+    case "copy":
+    case "cut":
+    case "auxclick":
+    case "dblclick":
+    case "dragend":
+    case "dragstart":
+    case "drop":
+    case "focusin":
+    case "focusout":
+    case "input":
+    case "invalid":
+    case "keydown":
+    case "keypress":
+    case "keyup":
+    case "mousedown":
+    case "mouseup":
+    case "paste":
+    case "pause":
+    case "play":
+    case "pointercancel":
+    case "pointerdown":
+    case "pointerup":
+    case "ratechange":
+    case "reset":
+    case "resize":
+    case "seeked":
+    case "submit":
+    case "toggle":
+    case "touchcancel":
+    case "touchend":
+    case "touchstart":
+    case "volumechange":
+    case "change":
+    case "selectionchange":
+    case "textInput":
+    case "compositionstart":
+    case "compositionend":
+    case "compositionupdate":
+    case "beforeblur":
+    case "afterblur":
+    case "beforeinput":
+    case "blur":
+    case "fullscreenchange":
+    case "focus":
+    case "hashchange":
+    case "popstate":
+    case "select":
+    case "selectstart":
+      return 2;
+    case "drag":
+    case "dragenter":
+    case "dragexit":
+    case "dragleave":
+    case "dragover":
+    case "mousemove":
+    case "mouseout":
+    case "mouseover":
+    case "pointermove":
+    case "pointerout":
+    case "pointerover":
+    case "scroll":
+    case "touchmove":
+    case "wheel":
+    case "mouseenter":
+    case "mouseleave":
+    case "pointerenter":
+    case "pointerleave":
+      return 8;
+    case "message":
+      switch (getCurrentPriorityLevel()) {
+        case ImmediatePriority:
+          return 2;
+        case UserBlockingPriority:
+          return 8;
+        case NormalPriority$1:
+        case LowPriority:
+          return 32;
+        case IdlePriority:
+          return 268435456;
+        default:
+          return 32;
+      }
+    default:
+      return 32;
+  }
+}
+var hasScheduledReplayAttempt = !1,
+  queuedFocus = null,
+  queuedDrag = null,
+  queuedMouse = null,
+  queuedPointers = new Map(),
+  queuedPointerCaptures = new Map(),
+  queuedExplicitHydrationTargets = [],
+  discreteReplayableEvents =
+    "mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(
+      " "
+    );
+function clearIfContinuousEvent(domEventName, nativeEvent) {
+  switch (domEventName) {
+    case "focusin":
+    case "focusout":
+      queuedFocus = null;
+      break;
+    case "dragenter":
+    case "dragleave":
+      queuedDrag = null;
+      break;
+    case "mouseover":
+    case "mouseout":
+      queuedMouse = null;
+      break;
+    case "pointerover":
+    case "pointerout":
+      queuedPointers.delete(nativeEvent.pointerId);
+      break;
+    case "gotpointercapture":
+    case "lostpointercapture":
+      queuedPointerCaptures.delete(nativeEvent.pointerId);
+  }
+}
+function accumulateOrCreateContinuousQueuedReplayableEvent(
+  existingQueuedEvent,
+  blockedOn,
+  domEventName,
+  eventSystemFlags,
+  targetContainer,
+  nativeEvent
+) {
+  if (
+    null === existingQueuedEvent ||
+    existingQueuedEvent.nativeEvent !== nativeEvent
+  )
+    return (
+      (existingQueuedEvent = {
+        blockedOn: blockedOn,
+        domEventName: domEventName,
+        eventSystemFlags: eventSystemFlags,
+        nativeEvent: nativeEvent,
+        targetContainers: [targetContainer]
+      }),
+      null !== blockedOn &&
+        ((blockedOn = getInstanceFromNode(blockedOn)),
+        null !== blockedOn && attemptContinuousHydration(blockedOn)),
+      existingQueuedEvent
+    );
+  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;
+  blockedOn = existingQueuedEvent.targetContainers;
+  null !== targetContainer &&
+    -1 === blockedOn.indexOf(targetContainer) &&
+    blockedOn.push(targetContainer);
+  return existingQueuedEvent;
+}
+function queueIfContinuousEvent(
+  blockedOn,
+  domEventName,
+  eventSystemFlags,
+  targetContainer,
+  nativeEvent
+) {
+  switch (domEventName) {
+    case "focusin":
+      return (
+        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(
+          queuedFocus,
+          blockedOn,
+          domEventName,
+          eventSystemFlags,
+          targetContainer,
+          nativeEvent
+        )),
+        !0
+      );
+    case "dragenter":
+      return (
+        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(
+          queuedDrag,
+          blockedOn,
+          domEventName,
+          eventSystemFlags,
+          targetContainer,
+          nativeEvent
+        )),
+        !0
+      );
+    case "mouseover":
+      return (
+        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(
+          queuedMouse,
+          blockedOn,
+          domEventName,
+          eventSystemFlags,
+          targetContainer,
+          nativeEvent
+        )),
+        !0
+      );
+    case "pointerover":
+      var pointerId = nativeEvent.pointerId;
+      queuedPointers.set(
+        pointerId,
+        accumulateOrCreateContinuousQueuedReplayableEvent(
+          queuedPointers.get(pointerId) || null,
+          blockedOn,
+          domEventName,
+          eventSystemFlags,
+          targetContainer,
+          nativeEvent
+        )
+      );
+      return !0;
+    case "gotpointercapture":
+      return (
+        (pointerId = nativeEvent.pointerId),
+        queuedPointerCaptures.set(
+          pointerId,
+          accumulateOrCreateContinuousQueuedReplayableEvent(
+            queuedPointerCaptures.get(pointerId) || null,
+            blockedOn,
+            domEventName,
+            eventSystemFlags,
+            targetContainer,
+            nativeEvent
+          )
+        ),
+        !0
+      );
+  }
+  return !1;
+}
+function attemptExplicitHydrationTarget(queuedTarget) {
+  var targetInst = getClosestInstanceFromNode(queuedTarget.target);
+  if (null !== targetInst) {
+    var nearestMounted = getNearestMountedFiber(targetInst);
+    if (null !== nearestMounted)
+      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {
+        if (
+          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),
+          null !== targetInst)
+        ) {
+          queuedTarget.blockedOn = targetInst;
+          runWithPriority(queuedTarget.priority, function () {
+            if (13 === nearestMounted.tag) {
+              var lane = requestUpdateLane();
+              lane = getBumpedLaneForHydrationByLane(lane);
+              var root = enqueueConcurrentRenderForLane(nearestMounted, lane);
+              null !== root &&
+                scheduleUpdateOnFiber(root, nearestMounted, lane);
+              markRetryLaneIfNotHydrated(nearestMounted, lane);
+            }
+          });
+          return;
+        }
+      } else if (
+        3 === targetInst &&
+        nearestMounted.stateNode.current.memoizedState.isDehydrated
+      ) {
+        queuedTarget.blockedOn =
+          3 === nearestMounted.tag
+            ? nearestMounted.stateNode.containerInfo
+            : null;
+        return;
+      }
+  }
+  queuedTarget.blockedOn = null;
+}
+function attemptReplayContinuousQueuedEvent(queuedEvent) {
+  if (null !== queuedEvent.blockedOn) return !1;
+  for (
+    var targetContainers = queuedEvent.targetContainers;
+    0 < targetContainers.length;
+
+  ) {
+    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);
+    if (null === nextBlockedOn) {
+      nextBlockedOn = queuedEvent.nativeEvent;
+      var nativeEventClone = new nextBlockedOn.constructor(
+        nextBlockedOn.type,
+        nextBlockedOn
+      );
+      currentReplayingEvent = nativeEventClone;
+      nextBlockedOn.target.dispatchEvent(nativeEventClone);
+      currentReplayingEvent = null;
+    } else
+      return (
+        (targetContainers = getInstanceFromNode(nextBlockedOn)),
+        null !== targetContainers &&
+          attemptContinuousHydration(targetContainers),
+        (queuedEvent.blockedOn = nextBlockedOn),
+        !1
+      );
+    targetContainers.shift();
+  }
+  return !0;
+}
+function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {
+  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);
+}
+function replayUnblockedEvents() {
+  hasScheduledReplayAttempt = !1;
+  null !== queuedFocus &&
+    attemptReplayContinuousQueuedEvent(queuedFocus) &&
+    (queuedFocus = null);
+  null !== queuedDrag &&
+    attemptReplayContinuousQueuedEvent(queuedDrag) &&
+    (queuedDrag = null);
+  null !== queuedMouse &&
+    attemptReplayContinuousQueuedEvent(queuedMouse) &&
+    (queuedMouse = null);
+  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);
+  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);
+}
+function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {
+  queuedEvent.blockedOn === unblocked &&
+    ((queuedEvent.blockedOn = null),
+    hasScheduledReplayAttempt ||
+      ((hasScheduledReplayAttempt = !0),
+      Scheduler.unstable_scheduleCallback(
+        Scheduler.unstable_NormalPriority,
+        replayUnblockedEvents
+      )));
+}
+var lastScheduledReplayQueue = null;
+function scheduleReplayQueueIfNeeded(formReplayingQueue) {
+  lastScheduledReplayQueue !== formReplayingQueue &&
+    ((lastScheduledReplayQueue = formReplayingQueue),
+    Scheduler.unstable_scheduleCallback(
+      Scheduler.unstable_NormalPriority,
+      function () {
+        lastScheduledReplayQueue === formReplayingQueue &&
+          (lastScheduledReplayQueue = null);
+        for (var i = 0; i < formReplayingQueue.length; i += 3) {
+          var form = formReplayingQueue[i],
+            submitterOrAction = formReplayingQueue[i + 1],
+            formData = formReplayingQueue[i + 2];
+          if ("function" !== typeof submitterOrAction)
+            if (null === findInstanceBlockingTarget(submitterOrAction || form))
+              continue;
+            else break;
+          var formInst = getInstanceFromNode(form);
+          null !== formInst &&
+            (formReplayingQueue.splice(i, 3),
+            (i -= 3),
+            startHostTransition(
+              formInst,
+              {
+                pending: !0,
+                data: formData,
+                method: form.method,
+                action: submitterOrAction
+              },
+              submitterOrAction,
+              formData
+            ));
+        }
+      }
+    ));
+}
+function retryIfBlockedOn(unblocked) {
+  function unblock(queuedEvent) {
+    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);
+  }
+  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);
+  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);
+  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);
+  queuedPointers.forEach(unblock);
+  queuedPointerCaptures.forEach(unblock);
+  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {
+    var queuedTarget = queuedExplicitHydrationTargets[i];
+    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);
+  }
+  for (
+    ;
+    0 < queuedExplicitHydrationTargets.length &&
+    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);
+
+  )
+    attemptExplicitHydrationTarget(i),
+      null === i.blockedOn && queuedExplicitHydrationTargets.shift();
+  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;
+  if (null != i)
+    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {
+      var form = i[queuedTarget],
+        submitterOrAction = i[queuedTarget + 1],
+        formProps = form[internalPropsKey] || null;
+      if ("function" === typeof submitterOrAction)
+        formProps || scheduleReplayQueueIfNeeded(i);
+      else if (formProps) {
+        var action = null;
+        if (submitterOrAction && submitterOrAction.hasAttribute("formAction"))
+          if (
+            ((form = submitterOrAction),
+            (formProps = submitterOrAction[internalPropsKey] || null))
+          )
+            action = formProps.formAction;
+          else {
+            if (null !== findInstanceBlockingTarget(form)) continue;
+          }
+        else action = formProps.action;
+        "function" === typeof action
+          ? (i[queuedTarget + 1] = action)
+          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));
+        scheduleReplayQueueIfNeeded(i);
+      }
+    }
+}
+function ReactDOMRoot(internalRoot) {
+  this._internalRoot = internalRoot;
+}
+ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =
+  function (children) {
+    var root = this._internalRoot;
+    if (null === root) throw Error(formatProdErrorMessage(409));
+    var current = root.current,
+      lane = requestUpdateLane();
+    updateContainerImpl(current, lane, children, root, null, null);
+  };
+ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =
+  function () {
+    var root = this._internalRoot;
+    if (null !== root) {
+      this._internalRoot = null;
+      var container = root.containerInfo;
+      updateContainerImpl(root.current, 2, null, root, null, null);
+      flushSyncWork$1();
+      container[internalContainerInstanceKey] = null;
+    }
+  };
+function ReactDOMHydrationRoot(internalRoot) {
+  this._internalRoot = internalRoot;
+}
+ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
+  if (target) {
+    var updatePriority = resolveUpdatePriority();
+    target = { blockedOn: null, target: target, priority: updatePriority };
+    for (
+      var i = 0;
+      i < queuedExplicitHydrationTargets.length &&
+      0 !== updatePriority &&
+      updatePriority < queuedExplicitHydrationTargets[i].priority;
+      i++
+    );
+    queuedExplicitHydrationTargets.splice(i, 0, target);
+    0 === i && attemptExplicitHydrationTarget(target);
+  }
+};
+var isomorphicReactPackageVersion$jscomp$inline_1881 = React.version;
+if (
+  "19.1.1" !==
+  isomorphicReactPackageVersion$jscomp$inline_1881
+)
+  throw Error(
+    formatProdErrorMessage(
+      527,
+      isomorphicReactPackageVersion$jscomp$inline_1881,
+      "19.1.1"
+    )
+  );
+ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
+  var fiber = componentOrElement._reactInternals;
+  if (void 0 === fiber) {
+    if ("function" === typeof componentOrElement.render)
+      throw Error(formatProdErrorMessage(188));
+    componentOrElement = Object.keys(componentOrElement).join(",");
+    throw Error(formatProdErrorMessage(268, componentOrElement));
+  }
+  componentOrElement = findCurrentFiberUsingSlowPath(fiber);
+  componentOrElement =
+    null !== componentOrElement
+      ? findCurrentHostFiberImpl(componentOrElement)
+      : null;
+  componentOrElement =
+    null === componentOrElement ? null : componentOrElement.stateNode;
+  return componentOrElement;
+};
+var internals$jscomp$inline_1888 = {
+  bundleType: 0,
+  version: "19.1.1",
+  rendererPackageName: "react-dom",
+  currentDispatcherRef: ReactSharedInternals,
+  reconcilerVersion: "19.1.1",
+  getLaneLabelMap: function () {
+    for (
+      var map = new Map(), lane = 1, index$282 = 0;
+      31 > index$282;
+      index$282++
+    ) {
+      var label = getLabelForLane(lane);
+      map.set(lane, label);
+      lane *= 2;
+    }
+    return map;
+  },
+  injectProfilingHooks: function (profilingHooks) {
+    injectedProfilingHooks = profilingHooks;
+  }
+};
+if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
+  var hook$jscomp$inline_2320 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
+  if (
+    !hook$jscomp$inline_2320.isDisabled &&
+    hook$jscomp$inline_2320.supportsFiber
+  )
+    try {
+      (rendererID = hook$jscomp$inline_2320.inject(
+        internals$jscomp$inline_1888
+      )),
+        (injectedHook = hook$jscomp$inline_2320);
+    } catch (err) {}
+}
+function noop() {}
+function getCrossOriginStringAs(as, input) {
+  if ("font" === as) return "";
+  if ("string" === typeof input)
+    return "use-credentials" === input ? input : "";
+}
+exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = {
+  d: {
+    f: noop,
+    r: function () {
+      throw Error(formatProdErrorMessage(522));
+    },
+    D: noop,
+    C: noop,
+    L: noop,
+    m: noop,
+    X: noop,
+    S: noop,
+    M: noop
+  },
+  p: 0,
+  findDOMNode: null
+};
+exports.createPortal = function (children, container) {
+  var key =
+    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;
+  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));
+  return createPortal$1(children, container, null, key);
+};
+exports.createRoot = function (container, options) {
+  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));
+  var isStrictMode = !1,
+    identifierPrefix = "",
+    onUncaughtError = defaultOnUncaughtError,
+    onCaughtError = defaultOnCaughtError,
+    onRecoverableError = defaultOnRecoverableError,
+    transitionCallbacks = null;
+  null !== options &&
+    void 0 !== options &&
+    (!0 === options.unstable_strictMode && (isStrictMode = !0),
+    void 0 !== options.identifierPrefix &&
+      (identifierPrefix = options.identifierPrefix),
+    void 0 !== options.onUncaughtError &&
+      (onUncaughtError = options.onUncaughtError),
+    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),
+    void 0 !== options.onRecoverableError &&
+      (onRecoverableError = options.onRecoverableError),
+    void 0 !== options.unstable_transitionCallbacks &&
+      (transitionCallbacks = options.unstable_transitionCallbacks));
+  options = createFiberRoot(
+    container,
+    1,
+    !1,
+    null,
+    null,
+    isStrictMode,
+    identifierPrefix,
+    onUncaughtError,
+    onCaughtError,
+    onRecoverableError,
+    transitionCallbacks,
+    null
+  );
+  container[internalContainerInstanceKey] = options.current;
+  listenToAllSupportedEvents(container);
+  return new ReactDOMRoot(options);
+};
+exports.flushSync = function (fn) {
+  var previousTransition = ReactSharedInternals.T,
+    previousUpdatePriority = ReactDOMSharedInternals.p;
+  try {
+    if (((ReactSharedInternals.T = null), (ReactDOMSharedInternals.p = 2), fn))
+      return fn();
+  } finally {
+    (ReactSharedInternals.T = previousTransition),
+      (ReactDOMSharedInternals.p = previousUpdatePriority),
+      ReactDOMSharedInternals.d.f();
+  }
+};
+exports.hydrateRoot = function (container, initialChildren, options) {
+  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));
+  var isStrictMode = !1,
+    identifierPrefix = "",
+    onUncaughtError = defaultOnUncaughtError,
+    onCaughtError = defaultOnCaughtError,
+    onRecoverableError = defaultOnRecoverableError,
+    transitionCallbacks = null,
+    formState = null;
+  null !== options &&
+    void 0 !== options &&
+    (!0 === options.unstable_strictMode && (isStrictMode = !0),
+    void 0 !== options.identifierPrefix &&
+      (identifierPrefix = options.identifierPrefix),
+    void 0 !== options.onUncaughtError &&
+      (onUncaughtError = options.onUncaughtError),
+    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),
+    void 0 !== options.onRecoverableError &&
+      (onRecoverableError = options.onRecoverableError),
+    void 0 !== options.unstable_transitionCallbacks &&
+      (transitionCallbacks = options.unstable_transitionCallbacks),
+    void 0 !== options.formState && (formState = options.formState));
+  initialChildren = createFiberRoot(
+    container,
+    1,
+    !0,
+    initialChildren,
+    null != options ? options : null,
+    isStrictMode,
+    identifierPrefix,
+    onUncaughtError,
+    onCaughtError,
+    onRecoverableError,
+    transitionCallbacks,
+    formState
+  );
+  initialChildren.context = getContextForSubtree(null);
+  options = initialChildren.current;
+  isStrictMode = requestUpdateLane();
+  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);
+  identifierPrefix = createUpdate(isStrictMode);
+  identifierPrefix.callback = null;
+  enqueueUpdate(options, identifierPrefix, isStrictMode);
+  options = isStrictMode;
+  initialChildren.current.lanes = options;
+  markRootUpdated$1(initialChildren, options);
+  ensureRootIsScheduled(initialChildren);
+  container[internalContainerInstanceKey] = initialChildren.current;
+  listenToAllSupportedEvents(container);
+  return new ReactDOMHydrationRoot(initialChildren);
+};
+exports.preconnect = function (href, options) {
+  "string" === typeof href &&
+    (options
+      ? ((options = options.crossOrigin),
+        (options =
+          "string" === typeof options
+            ? "use-credentials" === options
+              ? options
+              : ""
+            : void 0))
+      : (options = null),
+    ReactDOMSharedInternals.d.C(href, options));
+};
+exports.prefetchDNS = function (href) {
+  "string" === typeof href && ReactDOMSharedInternals.d.D(href);
+};
+exports.preinit = function (href, options) {
+  if ("string" === typeof href && options && "string" === typeof options.as) {
+    var as = options.as,
+      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),
+      integrity =
+        "string" === typeof options.integrity ? options.integrity : void 0,
+      fetchPriority =
+        "string" === typeof options.fetchPriority
+          ? options.fetchPriority
+          : void 0;
+    "style" === as
+      ? ReactDOMSharedInternals.d.S(
+          href,
+          "string" === typeof options.precedence ? options.precedence : void 0,
+          {
+            crossOrigin: crossOrigin,
+            integrity: integrity,
+            fetchPriority: fetchPriority
+          }
+        )
+      : "script" === as &&
+        ReactDOMSharedInternals.d.X(href, {
+          crossOrigin: crossOrigin,
+          integrity: integrity,
+          fetchPriority: fetchPriority,
+          nonce: "string" === typeof options.nonce ? options.nonce : void 0
+        });
+  }
+};
+exports.preinitModule = function (href, options) {
+  if ("string" === typeof href)
+    if ("object" === typeof options && null !== options) {
+      if (null == options.as || "script" === options.as) {
+        var crossOrigin = getCrossOriginStringAs(
+          options.as,
+          options.crossOrigin
+        );
+        ReactDOMSharedInternals.d.M(href, {
+          crossOrigin: crossOrigin,
+          integrity:
+            "string" === typeof options.integrity ? options.integrity : void 0,
+          nonce: "string" === typeof options.nonce ? options.nonce : void 0
+        });
+      }
+    } else null == options && ReactDOMSharedInternals.d.M(href);
+};
+exports.preload = function (href, options) {
+  if (
+    "string" === typeof href &&
+    "object" === typeof options &&
+    null !== options &&
+    "string" === typeof options.as
+  ) {
+    var as = options.as,
+      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);
+    ReactDOMSharedInternals.d.L(href, as, {
+      crossOrigin: crossOrigin,
+      integrity:
+        "string" === typeof options.integrity ? options.integrity : void 0,
+      nonce: "string" === typeof options.nonce ? options.nonce : void 0,
+      type: "string" === typeof options.type ? options.type : void 0,
+      fetchPriority:
+        "string" === typeof options.fetchPriority
+          ? options.fetchPriority
+          : void 0,
+      referrerPolicy:
+        "string" === typeof options.referrerPolicy
+          ? options.referrerPolicy
+          : void 0,
+      imageSrcSet:
+        "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,
+      imageSizes:
+        "string" === typeof options.imageSizes ? options.imageSizes : void 0,
+      media: "string" === typeof options.media ? options.media : void 0
+    });
+  }
+};
+exports.preloadModule = function (href, options) {
+  if ("string" === typeof href)
+    if (options) {
+      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);
+      ReactDOMSharedInternals.d.m(href, {
+        as:
+          "string" === typeof options.as && "script" !== options.as
+            ? options.as
+            : void 0,
+        crossOrigin: crossOrigin,
+        integrity:
+          "string" === typeof options.integrity ? options.integrity : void 0
+      });
+    } else ReactDOMSharedInternals.d.m(href);
+};
+exports.requestFormReset = function (form) {
+  ReactDOMSharedInternals.d.r(form);
+};
+exports.unstable_batchedUpdates = function (fn, a) {
+  return fn(a);
+};
+exports.useFormState = function (action, initialState, permalink) {
+  return ReactSharedInternals.H.useFormState(action, initialState, permalink);
+};
+exports.useFormStatus = function () {
+  return ReactSharedInternals.H.useHostTransitionStatus();
+};
+exports.version = "19.1.1";
+"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+  "function" ===
+    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+  __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
Index: node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9035 @@
+/**
+ * @license React
+ * react-dom-server-legacy.browser.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+
+
+ JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
+
+ Copyright (c) 2011 Gary Court
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function styleReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+    }
+    function scriptReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+    }
+    function objectName(object) {
+      return Object.prototype.toString
+        .call(object)
+        .replace(/^\[object (.*)\]$/, function (m, p0) {
+          return p0;
+        });
+    }
+    function describeKeyForErrorMessage(key) {
+      var encodedKey = JSON.stringify(key);
+      return '"' + key + '"' === encodedKey ? key : encodedKey;
+    }
+    function describeValueForErrorMessage(value) {
+      switch (typeof value) {
+        case "string":
+          return JSON.stringify(
+            10 >= value.length ? value : value.slice(0, 10) + "..."
+          );
+        case "object":
+          if (isArrayImpl(value)) return "[...]";
+          if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG)
+            return "client";
+          value = objectName(value);
+          return "Object" === value ? "{...}" : value;
+        case "function":
+          return value.$$typeof === CLIENT_REFERENCE_TAG
+            ? "client"
+            : (value = value.displayName || value.name)
+              ? "function " + value
+              : "function";
+        default:
+          return String(value);
+      }
+    }
+    function describeElementType(type) {
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+      }
+      if ("object" === typeof type)
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeElementType(type.render);
+          case REACT_MEMO_TYPE:
+            return describeElementType(type.type);
+          case REACT_LAZY_TYPE:
+            var payload = type._payload;
+            type = type._init;
+            try {
+              return describeElementType(type(payload));
+            } catch (x) {}
+        }
+      return "";
+    }
+    function describeObjectForErrorMessage(objectOrArray, expandedName) {
+      var objKind = objectName(objectOrArray);
+      if ("Object" !== objKind && "Array" !== objKind) return objKind;
+      var start = -1,
+        length = 0;
+      if (isArrayImpl(objectOrArray))
+        if (jsxChildrenParents.has(objectOrArray)) {
+          var type = jsxChildrenParents.get(objectOrArray);
+          objKind = "<" + describeElementType(type) + ">";
+          for (var i = 0; i < objectOrArray.length; i++) {
+            var value = objectOrArray[i];
+            value =
+              "string" === typeof value
+                ? value
+                : "object" === typeof value && null !== value
+                  ? "{" + describeObjectForErrorMessage(value) + "}"
+                  : "{" + describeValueForErrorMessage(value) + "}";
+            "" + i === expandedName
+              ? ((start = objKind.length),
+                (length = value.length),
+                (objKind += value))
+              : (objKind =
+                  15 > value.length && 40 > objKind.length + value.length
+                    ? objKind + value
+                    : objKind + "{...}");
+          }
+          objKind += "</" + describeElementType(type) + ">";
+        } else {
+          objKind = "[";
+          for (type = 0; type < objectOrArray.length; type++)
+            0 < type && (objKind += ", "),
+              (i = objectOrArray[type]),
+              (i =
+                "object" === typeof i && null !== i
+                  ? describeObjectForErrorMessage(i)
+                  : describeValueForErrorMessage(i)),
+              "" + type === expandedName
+                ? ((start = objKind.length),
+                  (length = i.length),
+                  (objKind += i))
+                : (objKind =
+                    10 > i.length && 40 > objKind.length + i.length
+                      ? objKind + i
+                      : objKind + "...");
+          objKind += "]";
+        }
+      else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE)
+        objKind = "<" + describeElementType(objectOrArray.type) + "/>";
+      else {
+        if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return "client";
+        if (jsxPropsParents.has(objectOrArray)) {
+          objKind = jsxPropsParents.get(objectOrArray);
+          objKind = "<" + (describeElementType(objKind) || "...");
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++) {
+            objKind += " ";
+            value = type[i];
+            objKind += describeKeyForErrorMessage(value) + "=";
+            var _value2 = objectOrArray[value];
+            var _substr2 =
+              value === expandedName &&
+              "object" === typeof _value2 &&
+              null !== _value2
+                ? describeObjectForErrorMessage(_value2)
+                : describeValueForErrorMessage(_value2);
+            "string" !== typeof _value2 && (_substr2 = "{" + _substr2 + "}");
+            value === expandedName
+              ? ((start = objKind.length),
+                (length = _substr2.length),
+                (objKind += _substr2))
+              : (objKind =
+                  10 > _substr2.length && 40 > objKind.length + _substr2.length
+                    ? objKind + _substr2
+                    : objKind + "...");
+          }
+          objKind += ">";
+        } else {
+          objKind = "{";
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++)
+            0 < i && (objKind += ", "),
+              (value = type[i]),
+              (objKind += describeKeyForErrorMessage(value) + ": "),
+              (_value2 = objectOrArray[value]),
+              (_value2 =
+                "object" === typeof _value2 && null !== _value2
+                  ? describeObjectForErrorMessage(_value2)
+                  : describeValueForErrorMessage(_value2)),
+              value === expandedName
+                ? ((start = objKind.length),
+                  (length = _value2.length),
+                  (objKind += _value2))
+                : (objKind =
+                    10 > _value2.length && 40 > objKind.length + _value2.length
+                      ? objKind + _value2
+                      : objKind + "...");
+          objKind += "}";
+        }
+      }
+      return void 0 === expandedName
+        ? objKind
+        : -1 < start && 0 < length
+          ? ((objectOrArray = " ".repeat(start) + "^".repeat(length)),
+            "\n  " + objKind + "\n  " + objectOrArray)
+          : "\n  " + objKind;
+    }
+    function murmurhash3_32_gc(key, seed) {
+      var remainder = key.length & 3;
+      var bytes = key.length - remainder;
+      var h1 = seed;
+      for (seed = 0; seed < bytes; ) {
+        var k1 =
+          (key.charCodeAt(seed) & 255) |
+          ((key.charCodeAt(++seed) & 255) << 8) |
+          ((key.charCodeAt(++seed) & 255) << 16) |
+          ((key.charCodeAt(++seed) & 255) << 24);
+        ++seed;
+        k1 =
+          (3432918353 * (k1 & 65535) +
+            (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295;
+        k1 = (k1 << 15) | (k1 >>> 17);
+        k1 =
+          (461845907 * (k1 & 65535) +
+            (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295;
+        h1 ^= k1;
+        h1 = (h1 << 13) | (h1 >>> 19);
+        h1 =
+          (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295;
+        h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16);
+      }
+      k1 = 0;
+      switch (remainder) {
+        case 3:
+          k1 ^= (key.charCodeAt(seed + 2) & 255) << 16;
+        case 2:
+          k1 ^= (key.charCodeAt(seed + 1) & 255) << 8;
+        case 1:
+          (k1 ^= key.charCodeAt(seed) & 255),
+            (k1 =
+              (3432918353 * (k1 & 65535) +
+                (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+              4294967295),
+            (k1 = (k1 << 15) | (k1 >>> 17)),
+            (h1 ^=
+              (461845907 * (k1 & 65535) +
+                (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+              4294967295);
+      }
+      h1 ^= key.length;
+      h1 ^= h1 >>> 16;
+      h1 =
+        (2246822507 * (h1 & 65535) +
+          (((2246822507 * (h1 >>> 16)) & 65535) << 16)) &
+        4294967295;
+      h1 ^= h1 >>> 13;
+      h1 =
+        (3266489909 * (h1 & 65535) +
+          (((3266489909 * (h1 >>> 16)) & 65535) << 16)) &
+        4294967295;
+      return (h1 ^ (h1 >>> 16)) >>> 0;
+    }
+    function typeName(value) {
+      return (
+        ("function" === typeof Symbol &&
+          Symbol.toStringTag &&
+          value[Symbol.toStringTag]) ||
+        value.constructor.name ||
+        "Object"
+      );
+    }
+    function willCoercionThrow(value) {
+      try {
+        return testStringCoercion(value), !1;
+      } catch (e) {
+        return !0;
+      }
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkAttributeStringCoercion(value, attributeName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",
+            attributeName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkCSSPropertyStringCoercion(value, propName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",
+            propName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkHtmlStringCoercion(value) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.",
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function isAttributeNameSafe(attributeName) {
+      if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+        return !0;
+      if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))
+        return !1;
+      if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+        return (validatedAttributeNameCache[attributeName] = !0);
+      illegalAttributeNameCache[attributeName] = !0;
+      console.error("Invalid attribute name: `%s`", attributeName);
+      return !1;
+    }
+    function checkControlledValueProps(tagName, props) {
+      hasReadOnlyValue[props.type] ||
+        props.onChange ||
+        props.onInput ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.value ||
+        ("select" === tagName
+          ? console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`."
+            )
+          : console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."
+            ));
+      props.onChange ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.checked ||
+        console.error(
+          "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`."
+        );
+    }
+    function validateProperty$1(tagName, name) {
+      if (
+        hasOwnProperty.call(warnedProperties$1, name) &&
+        warnedProperties$1[name]
+      )
+        return !0;
+      if (rARIACamel$1.test(name)) {
+        tagName = "aria-" + name.slice(4).toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.",
+              name
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+        if (name !== tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. Did you mean `%s`?",
+              name,
+              tagName
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+      }
+      if (rARIA$1.test(name)) {
+        tagName = name.toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName) return (warnedProperties$1[name] = !0), !1;
+        name !== tagName &&
+          (console.error(
+            "Unknown ARIA attribute `%s`. Did you mean `%s`?",
+            name,
+            tagName
+          ),
+          (warnedProperties$1[name] = !0));
+      }
+      return !0;
+    }
+    function validateProperties$2(type, props) {
+      var invalidProps = [],
+        key;
+      for (key in props)
+        validateProperty$1(type, key) || invalidProps.push(key);
+      props = invalidProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === invalidProps.length
+        ? console.error(
+            "Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          )
+        : 1 < invalidProps.length &&
+          console.error(
+            "Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          );
+    }
+    function validateProperty(tagName, name, value, eventRegistry) {
+      if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])
+        return !0;
+      var lowerCasedName = name.toLowerCase();
+      if ("onfocusin" === lowerCasedName || "onfocusout" === lowerCasedName)
+        return (
+          console.error(
+            "React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "function" === typeof value &&
+        (("form" === tagName && "action" === name) ||
+          ("input" === tagName && "formAction" === name) ||
+          ("button" === tagName && "formAction" === name))
+      )
+        return !0;
+      if (null != eventRegistry) {
+        tagName = eventRegistry.possibleRegistrationNames;
+        if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))
+          return !0;
+        eventRegistry = tagName.hasOwnProperty(lowerCasedName)
+          ? tagName[lowerCasedName]
+          : null;
+        if (null != eventRegistry)
+          return (
+            console.error(
+              "Invalid event handler property `%s`. Did you mean `%s`?",
+              name,
+              eventRegistry
+            ),
+            (warnedProperties[name] = !0)
+          );
+        if (EVENT_NAME_REGEX.test(name))
+          return (
+            console.error(
+              "Unknown event handler property `%s`. It will be ignored.",
+              name
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (EVENT_NAME_REGEX.test(name))
+        return (
+          INVALID_EVENT_NAME_REGEX.test(name) &&
+            console.error(
+              "Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.",
+              name
+            ),
+          (warnedProperties[name] = !0)
+        );
+      if (rARIA.test(name) || rARIACamel.test(name)) return !0;
+      if ("innerhtml" === lowerCasedName)
+        return (
+          console.error(
+            "Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("aria" === lowerCasedName)
+        return (
+          console.error(
+            "The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "is" === lowerCasedName &&
+        null !== value &&
+        void 0 !== value &&
+        "string" !== typeof value
+      )
+        return (
+          console.error(
+            "Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.",
+            typeof value
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("number" === typeof value && isNaN(value))
+        return (
+          console.error(
+            "Received NaN for the `%s` attribute. If this is expected, cast the value to a string.",
+            name
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
+        if (
+          ((lowerCasedName = possibleStandardNames[lowerCasedName]),
+          lowerCasedName !== name)
+        )
+          return (
+            console.error(
+              "Invalid DOM property `%s`. Did you mean `%s`?",
+              name,
+              lowerCasedName
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (name !== lowerCasedName)
+        return (
+          console.error(
+            "React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.",
+            name,
+            lowerCasedName
+          ),
+          (warnedProperties[name] = !0)
+        );
+      switch (name) {
+        case "dangerouslySetInnerHTML":
+        case "children":
+        case "style":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "ref":
+          return !0;
+        case "innerText":
+        case "textContent":
+          return !0;
+      }
+      switch (typeof value) {
+        case "boolean":
+          switch (name) {
+            case "autoFocus":
+            case "checked":
+            case "multiple":
+            case "muted":
+            case "selected":
+            case "contentEditable":
+            case "spellCheck":
+            case "draggable":
+            case "value":
+            case "autoReverse":
+            case "externalResourcesRequired":
+            case "focusable":
+            case "preserveAlpha":
+            case "allowFullScreen":
+            case "async":
+            case "autoPlay":
+            case "controls":
+            case "default":
+            case "defer":
+            case "disabled":
+            case "disablePictureInPicture":
+            case "disableRemotePlayback":
+            case "formNoValidate":
+            case "hidden":
+            case "loop":
+            case "noModule":
+            case "noValidate":
+            case "open":
+            case "playsInline":
+            case "readOnly":
+            case "required":
+            case "reversed":
+            case "scoped":
+            case "seamless":
+            case "itemScope":
+            case "capture":
+            case "download":
+            case "inert":
+              return !0;
+            default:
+              lowerCasedName = name.toLowerCase().slice(0, 5);
+              if ("data-" === lowerCasedName || "aria-" === lowerCasedName)
+                return !0;
+              value
+                ? console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name
+                  )
+                : console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name,
+                    name,
+                    name
+                  );
+              return (warnedProperties[name] = !0);
+          }
+        case "function":
+        case "symbol":
+          return (warnedProperties[name] = !0), !1;
+        case "string":
+          if ("false" === value || "true" === value) {
+            switch (name) {
+              case "checked":
+              case "selected":
+              case "multiple":
+              case "muted":
+              case "allowFullScreen":
+              case "async":
+              case "autoPlay":
+              case "controls":
+              case "default":
+              case "defer":
+              case "disabled":
+              case "disablePictureInPicture":
+              case "disableRemotePlayback":
+              case "formNoValidate":
+              case "hidden":
+              case "loop":
+              case "noModule":
+              case "noValidate":
+              case "open":
+              case "playsInline":
+              case "readOnly":
+              case "required":
+              case "reversed":
+              case "scoped":
+              case "seamless":
+              case "itemScope":
+              case "inert":
+                break;
+              default:
+                return !0;
+            }
+            console.error(
+              "Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?",
+              value,
+              name,
+              "false" === value
+                ? "The browser will interpret it as a truthy value."
+                : 'Although this works, it will not work as expected if you pass the string "false".',
+              name,
+              value
+            );
+            warnedProperties[name] = !0;
+          }
+      }
+      return !0;
+    }
+    function warnUnknownProperties(type, props, eventRegistry) {
+      var unknownProps = [],
+        key;
+      for (key in props)
+        validateProperty(type, key, props[key], eventRegistry) ||
+          unknownProps.push(key);
+      props = unknownProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === unknownProps.length
+        ? console.error(
+            "Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          )
+        : 1 < unknownProps.length &&
+          console.error(
+            "Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          );
+    }
+    function camelize(string) {
+      return string.replace(hyphenPattern, function (_, character) {
+        return character.toUpperCase();
+      });
+    }
+    function escapeTextForBrowser(text) {
+      if (
+        "boolean" === typeof text ||
+        "number" === typeof text ||
+        "bigint" === typeof text
+      )
+        return "" + text;
+      checkHtmlStringCoercion(text);
+      text = "" + text;
+      var match = matchHtmlRegExp.exec(text);
+      if (match) {
+        var html = "",
+          index,
+          lastIndex = 0;
+        for (index = match.index; index < text.length; index++) {
+          switch (text.charCodeAt(index)) {
+            case 34:
+              match = "&quot;";
+              break;
+            case 38:
+              match = "&amp;";
+              break;
+            case 39:
+              match = "&#x27;";
+              break;
+            case 60:
+              match = "&lt;";
+              break;
+            case 62:
+              match = "&gt;";
+              break;
+            default:
+              continue;
+          }
+          lastIndex !== index && (html += text.slice(lastIndex, index));
+          lastIndex = index + 1;
+          html += match;
+        }
+        text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+      }
+      return text;
+    }
+    function sanitizeURL(url) {
+      return isJavaScriptProtocol.test("" + url)
+        ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+        : url;
+    }
+    function escapeEntireInlineScriptContent(scriptText) {
+      checkHtmlStringCoercion(scriptText);
+      return ("" + scriptText).replace(scriptRegex, scriptReplacer);
+    }
+    function createResumableState(
+      identifierPrefix,
+      externalRuntimeConfig,
+      bootstrapScriptContent,
+      bootstrapScripts,
+      bootstrapModules
+    ) {
+      return {
+        idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+        nextFormID: 0,
+        streamingFormat: 0,
+        bootstrapScriptContent: bootstrapScriptContent,
+        bootstrapScripts: bootstrapScripts,
+        bootstrapModules: bootstrapModules,
+        instructions: NothingSent,
+        hasBody: !1,
+        hasHtml: !1,
+        unknownResources: {},
+        dnsResources: {},
+        connectResources: { default: {}, anonymous: {}, credentials: {} },
+        imageResources: {},
+        styleResources: {},
+        scriptResources: {},
+        moduleUnknownResources: {},
+        moduleScriptResources: {}
+      };
+    }
+    function createPreambleState() {
+      return {
+        htmlChunks: null,
+        headChunks: null,
+        bodyChunks: null,
+        contribution: NoContribution
+      };
+    }
+    function createFormatContext(insertionMode, selectedValue, tagScope) {
+      return {
+        insertionMode: insertionMode,
+        selectedValue: selectedValue,
+        tagScope: tagScope
+      };
+    }
+    function getChildFormatContext(parentContext, type, props) {
+      switch (type) {
+        case "noscript":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 1
+          );
+        case "select":
+          return createFormatContext(
+            HTML_MODE,
+            null != props.value ? props.value : props.defaultValue,
+            parentContext.tagScope
+          );
+        case "svg":
+          return createFormatContext(SVG_MODE, null, parentContext.tagScope);
+        case "picture":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 2
+          );
+        case "math":
+          return createFormatContext(MATHML_MODE, null, parentContext.tagScope);
+        case "foreignObject":
+          return createFormatContext(HTML_MODE, null, parentContext.tagScope);
+        case "table":
+          return createFormatContext(
+            HTML_TABLE_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "thead":
+        case "tbody":
+        case "tfoot":
+          return createFormatContext(
+            HTML_TABLE_BODY_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "colgroup":
+          return createFormatContext(
+            HTML_COLGROUP_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "tr":
+          return createFormatContext(
+            HTML_TABLE_ROW_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "head":
+          if (parentContext.insertionMode < HTML_MODE)
+            return createFormatContext(
+              HTML_HEAD_MODE,
+              null,
+              parentContext.tagScope
+            );
+          break;
+        case "html":
+          if (parentContext.insertionMode === ROOT_HTML_MODE)
+            return createFormatContext(
+              HTML_HTML_MODE,
+              null,
+              parentContext.tagScope
+            );
+      }
+      return parentContext.insertionMode >= HTML_TABLE_MODE ||
+        parentContext.insertionMode < HTML_MODE
+        ? createFormatContext(HTML_MODE, null, parentContext.tagScope)
+        : parentContext;
+    }
+    function pushStyleAttribute(target, style) {
+      if ("object" !== typeof style)
+        throw Error(
+          "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+        );
+      var isFirst = !0,
+        styleName;
+      for (styleName in style)
+        if (hasOwnProperty.call(style, styleName)) {
+          var styleValue = style[styleName];
+          if (
+            null != styleValue &&
+            "boolean" !== typeof styleValue &&
+            "" !== styleValue
+          ) {
+            if (0 === styleName.indexOf("--")) {
+              var nameChunk = escapeTextForBrowser(styleName);
+              checkCSSPropertyStringCoercion(styleValue, styleName);
+              styleValue = escapeTextForBrowser(("" + styleValue).trim());
+            } else {
+              nameChunk = styleName;
+              var value = styleValue;
+              if (-1 < nameChunk.indexOf("-")) {
+                var name = nameChunk;
+                (warnedStyleNames.hasOwnProperty(name) &&
+                  warnedStyleNames[name]) ||
+                  ((warnedStyleNames[name] = !0),
+                  console.error(
+                    "Unsupported style property %s. Did you mean %s?",
+                    name,
+                    camelize(name.replace(msPattern$1, "ms-"))
+                  ));
+              } else if (badVendoredStyleNamePattern.test(nameChunk))
+                (name = nameChunk),
+                  (warnedStyleNames.hasOwnProperty(name) &&
+                    warnedStyleNames[name]) ||
+                    ((warnedStyleNames[name] = !0),
+                    console.error(
+                      "Unsupported vendor-prefixed style property %s. Did you mean %s?",
+                      name,
+                      name.charAt(0).toUpperCase() + name.slice(1)
+                    ));
+              else if (badStyleValueWithSemicolonPattern.test(value)) {
+                name = nameChunk;
+                var value$jscomp$0 = value;
+                (warnedStyleValues.hasOwnProperty(value$jscomp$0) &&
+                  warnedStyleValues[value$jscomp$0]) ||
+                  ((warnedStyleValues[value$jscomp$0] = !0),
+                  console.error(
+                    'Style property values shouldn\'t contain a semicolon. Try "%s: %s" instead.',
+                    name,
+                    value$jscomp$0.replace(
+                      badStyleValueWithSemicolonPattern,
+                      ""
+                    )
+                  ));
+              }
+              "number" === typeof value &&
+                (isNaN(value)
+                  ? warnedForNaNValue ||
+                    ((warnedForNaNValue = !0),
+                    console.error(
+                      "`NaN` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    ))
+                  : isFinite(value) ||
+                    warnedForInfinityValue ||
+                    ((warnedForInfinityValue = !0),
+                    console.error(
+                      "`Infinity` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    )));
+              nameChunk = styleName;
+              value = styleNameCache.get(nameChunk);
+              void 0 !== value
+                ? (nameChunk = value)
+                : ((value = escapeTextForBrowser(
+                    nameChunk
+                      .replace(uppercasePattern, "-$1")
+                      .toLowerCase()
+                      .replace(msPattern, "-ms-")
+                  )),
+                  styleNameCache.set(nameChunk, value),
+                  (nameChunk = value));
+              "number" === typeof styleValue
+                ? (styleValue =
+                    0 === styleValue || unitlessNumbers.has(styleName)
+                      ? "" + styleValue
+                      : styleValue + "px")
+                : (checkCSSPropertyStringCoercion(styleValue, styleName),
+                  (styleValue = escapeTextForBrowser(
+                    ("" + styleValue).trim()
+                  )));
+            }
+            isFirst
+              ? ((isFirst = !1),
+                target.push(
+                  styleAttributeStart,
+                  nameChunk,
+                  styleAssign,
+                  styleValue
+                ))
+              : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+          }
+        }
+      isFirst || target.push(attributeEnd);
+    }
+    function pushBooleanAttribute(target, name, value) {
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(attributeSeparator, name, attributeEmptyString);
+    }
+    function pushStringAttribute(target, name, value) {
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        "boolean" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          name,
+          attributeAssign,
+          escapeTextForBrowser(value),
+          attributeEnd
+        );
+    }
+    function pushAdditionalFormField(value, key) {
+      this.push('<input type="hidden"');
+      validateAdditionalFormField(value);
+      pushStringAttribute(this, "name", key);
+      pushStringAttribute(this, "value", value);
+      this.push(endOfStartTagSelfClosing);
+    }
+    function validateAdditionalFormField(value) {
+      if ("string" !== typeof value)
+        throw Error(
+          "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+        );
+    }
+    function getCustomFormFields(resumableState, formAction) {
+      if ("function" === typeof formAction.$$FORM_ACTION) {
+        var id = resumableState.nextFormID++;
+        resumableState = resumableState.idPrefix + id;
+        try {
+          var customFields = formAction.$$FORM_ACTION(resumableState);
+          if (customFields) {
+            var formData = customFields.data;
+            null != formData && formData.forEach(validateAdditionalFormField);
+          }
+          return customFields;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            "function" === typeof x.then
+          )
+            throw x;
+          console.error(
+            "Failed to serialize an action for progressive enhancement:\n%s",
+            x
+          );
+        }
+      }
+      return null;
+    }
+    function pushFormActionAttribute(
+      target,
+      resumableState,
+      renderState,
+      formAction,
+      formEncType,
+      formMethod,
+      formTarget,
+      name
+    ) {
+      var formData = null;
+      if ("function" === typeof formAction) {
+        null === name ||
+          didWarnFormActionName ||
+          ((didWarnFormActionName = !0),
+          console.error(
+            'Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'
+          ));
+        (null === formEncType && null === formMethod) ||
+          didWarnFormActionMethod ||
+          ((didWarnFormActionMethod = !0),
+          console.error(
+            "Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden."
+          ));
+        null === formTarget ||
+          didWarnFormActionTarget ||
+          ((didWarnFormActionTarget = !0),
+          console.error(
+            "Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window."
+          ));
+        var customFields = getCustomFormFields(resumableState, formAction);
+        null !== customFields
+          ? ((name = customFields.name),
+            (formAction = customFields.action || ""),
+            (formEncType = customFields.encType),
+            (formMethod = customFields.method),
+            (formTarget = customFields.target),
+            (formData = customFields.data))
+          : (target.push(
+              attributeSeparator,
+              "formAction",
+              attributeAssign,
+              actionJavaScriptURL,
+              attributeEnd
+            ),
+            (formTarget = formMethod = formEncType = formAction = name = null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != name && pushAttribute(target, "name", name);
+      null != formAction && pushAttribute(target, "formAction", formAction);
+      null != formEncType && pushAttribute(target, "formEncType", formEncType);
+      null != formMethod && pushAttribute(target, "formMethod", formMethod);
+      null != formTarget && pushAttribute(target, "formTarget", formTarget);
+      return formData;
+    }
+    function pushAttribute(target, name, value) {
+      switch (name) {
+        case "className":
+          pushStringAttribute(target, "class", value);
+          break;
+        case "tabIndex":
+          pushStringAttribute(target, "tabindex", value);
+          break;
+        case "dir":
+        case "role":
+        case "viewBox":
+        case "width":
+        case "height":
+          pushStringAttribute(target, name, value);
+          break;
+        case "style":
+          pushStyleAttribute(target, value);
+          break;
+        case "src":
+        case "href":
+          if ("" === value) {
+            "src" === name
+              ? console.error(
+                  'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                )
+              : console.error(
+                  'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                );
+            break;
+          }
+        case "action":
+        case "formAction":
+          if (
+            null == value ||
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            name,
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+          break;
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "ref":
+          break;
+        case "autoFocus":
+        case "multiple":
+        case "muted":
+          pushBooleanAttribute(target, name.toLowerCase(), value);
+          break;
+        case "xlinkHref":
+          if (
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            "xlink:href",
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+          break;
+        case "contentEditable":
+        case "spellCheck":
+        case "draggable":
+        case "value":
+        case "autoReverse":
+        case "externalResourcesRequired":
+        case "focusable":
+        case "preserveAlpha":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(
+              attributeSeparator,
+              name,
+              attributeAssign,
+              escapeTextForBrowser(value),
+              attributeEnd
+            );
+          break;
+        case "inert":
+          "" !== value ||
+            didWarnForNewBooleanPropsWithEmptyValue[name] ||
+            ((didWarnForNewBooleanPropsWithEmptyValue[name] = !0),
+            console.error(
+              "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+              name
+            ));
+        case "allowFullScreen":
+        case "async":
+        case "autoPlay":
+        case "controls":
+        case "default":
+        case "defer":
+        case "disabled":
+        case "disablePictureInPicture":
+        case "disableRemotePlayback":
+        case "formNoValidate":
+        case "hidden":
+        case "loop":
+        case "noModule":
+        case "noValidate":
+        case "open":
+        case "playsInline":
+        case "readOnly":
+        case "required":
+        case "reversed":
+        case "scoped":
+        case "seamless":
+        case "itemScope":
+          value &&
+            "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(attributeSeparator, name, attributeEmptyString);
+          break;
+        case "capture":
+        case "download":
+          !0 === value
+            ? target.push(attributeSeparator, name, attributeEmptyString)
+            : !1 !== value &&
+              "function" !== typeof value &&
+              "symbol" !== typeof value &&
+              target.push(
+                attributeSeparator,
+                name,
+                attributeAssign,
+                escapeTextForBrowser(value),
+                attributeEnd
+              );
+          break;
+        case "cols":
+        case "rows":
+        case "size":
+        case "span":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            !isNaN(value) &&
+            1 <= value &&
+            target.push(
+              attributeSeparator,
+              name,
+              attributeAssign,
+              escapeTextForBrowser(value),
+              attributeEnd
+            );
+          break;
+        case "rowSpan":
+        case "start":
+          "function" === typeof value ||
+            "symbol" === typeof value ||
+            isNaN(value) ||
+            target.push(
+              attributeSeparator,
+              name,
+              attributeAssign,
+              escapeTextForBrowser(value),
+              attributeEnd
+            );
+          break;
+        case "xlinkActuate":
+          pushStringAttribute(target, "xlink:actuate", value);
+          break;
+        case "xlinkArcrole":
+          pushStringAttribute(target, "xlink:arcrole", value);
+          break;
+        case "xlinkRole":
+          pushStringAttribute(target, "xlink:role", value);
+          break;
+        case "xlinkShow":
+          pushStringAttribute(target, "xlink:show", value);
+          break;
+        case "xlinkTitle":
+          pushStringAttribute(target, "xlink:title", value);
+          break;
+        case "xlinkType":
+          pushStringAttribute(target, "xlink:type", value);
+          break;
+        case "xmlBase":
+          pushStringAttribute(target, "xml:base", value);
+          break;
+        case "xmlLang":
+          pushStringAttribute(target, "xml:lang", value);
+          break;
+        case "xmlSpace":
+          pushStringAttribute(target, "xml:space", value);
+          break;
+        default:
+          if (
+            !(2 < name.length) ||
+            ("o" !== name[0] && "O" !== name[0]) ||
+            ("n" !== name[1] && "N" !== name[1])
+          )
+            if (
+              ((name = aliases.get(name) || name), isAttributeNameSafe(name))
+            ) {
+              switch (typeof value) {
+                case "function":
+                case "symbol":
+                  return;
+                case "boolean":
+                  var prefix = name.toLowerCase().slice(0, 5);
+                  if ("data-" !== prefix && "aria-" !== prefix) return;
+              }
+              target.push(
+                attributeSeparator,
+                name,
+                attributeAssign,
+                escapeTextForBrowser(value),
+                attributeEnd
+              );
+            }
+      }
+    }
+    function pushInnerHTML(target, innerHTML, children) {
+      if (null != innerHTML) {
+        if (null != children)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        innerHTML = innerHTML.__html;
+        null !== innerHTML &&
+          void 0 !== innerHTML &&
+          (checkHtmlStringCoercion(innerHTML), target.push("" + innerHTML));
+      }
+    }
+    function checkSelectProp(props, propName) {
+      var value = props[propName];
+      null != value &&
+        ((value = isArrayImpl(value)),
+        props.multiple && !value
+          ? console.error(
+              "The `%s` prop supplied to <select> must be an array if `multiple` is true.",
+              propName
+            )
+          : !props.multiple &&
+            value &&
+            console.error(
+              "The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.",
+              propName
+            ));
+    }
+    function flattenOptionChildren(children) {
+      var content = "";
+      React.Children.forEach(children, function (child) {
+        null != child &&
+          ((content += child),
+          didWarnInvalidOptionChildren ||
+            "string" === typeof child ||
+            "number" === typeof child ||
+            "bigint" === typeof child ||
+            ((didWarnInvalidOptionChildren = !0),
+            console.error(
+              "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>."
+            )));
+      });
+      return content;
+    }
+    function injectFormReplayingRuntime(resumableState, renderState) {
+      (resumableState.instructions & 16) === NothingSent &&
+        ((resumableState.instructions |= 16),
+        renderState.bootstrapChunks.unshift(
+          renderState.startInlineScript,
+          formReplayingRuntimeScript,
+          "\x3c/script>"
+        ));
+    }
+    function pushLinkImpl(target, props) {
+      target.push(startChunkForTag("link"));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function escapeStyleTextContent(styleText) {
+      checkHtmlStringCoercion(styleText);
+      return ("" + styleText).replace(styleRegex, styleReplacer);
+    }
+    function pushSelfClosing(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  tag +
+                    " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function pushTitleImpl(target, props) {
+      target.push(startChunkForTag("title"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      props = Array.isArray(children)
+        ? 2 > children.length
+          ? children[0]
+          : null
+        : children;
+      "function" !== typeof props &&
+        "symbol" !== typeof props &&
+        null !== props &&
+        void 0 !== props &&
+        target.push(escapeTextForBrowser("" + props));
+      pushInnerHTML(target, innerHTML, children);
+      target.push(endChunkForTag("title"));
+      return null;
+    }
+    function pushScriptImpl(target, props) {
+      target.push(startChunkForTag("script"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      null != children &&
+        "string" !== typeof children &&
+        ((props =
+          "number" === typeof children
+            ? "a number for children"
+            : Array.isArray(children)
+              ? "an array for children"
+              : "something unexpected for children"),
+        console.error(
+          "A script element was rendered with %s. If script element has children it must be a single string. Consider using dangerouslySetInnerHTML or passing a plain string as children.",
+          props
+        ));
+      pushInnerHTML(target, innerHTML, children);
+      "string" === typeof children &&
+        target.push(escapeEntireInlineScriptContent(children));
+      target.push(endChunkForTag("script"));
+      return null;
+    }
+    function pushStartSingletonElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return tag;
+    }
+    function pushStartGenericElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return "string" === typeof tag
+        ? (target.push(escapeTextForBrowser(tag)), null)
+        : tag;
+    }
+    function startChunkForTag(tag) {
+      var tagStartChunk = validatedTagCache.get(tag);
+      if (void 0 === tagStartChunk) {
+        if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+        tagStartChunk = "<" + tag;
+        validatedTagCache.set(tag, tagStartChunk);
+      }
+      return tagStartChunk;
+    }
+    function pushStartInstance(
+      target$jscomp$0,
+      type,
+      props,
+      resumableState,
+      renderState,
+      preambleState,
+      hoistableState,
+      formatContext,
+      textEmbedded,
+      isFallback
+    ) {
+      validateProperties$2(type, props);
+      ("input" !== type && "textarea" !== type && "select" !== type) ||
+        null == props ||
+        null !== props.value ||
+        didWarnValueNull ||
+        ((didWarnValueNull = !0),
+        "select" === type && props.multiple
+          ? console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.",
+              type
+            )
+          : console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.",
+              type
+            ));
+      b: if (-1 === type.indexOf("-")) var JSCompiler_inline_result = !1;
+      else
+        switch (type) {
+          case "annotation-xml":
+          case "color-profile":
+          case "font-face":
+          case "font-face-src":
+          case "font-face-uri":
+          case "font-face-format":
+          case "font-face-name":
+          case "missing-glyph":
+            JSCompiler_inline_result = !1;
+            break b;
+          default:
+            JSCompiler_inline_result = !0;
+        }
+      JSCompiler_inline_result ||
+        "string" === typeof props.is ||
+        warnUnknownProperties(type, props, null);
+      !props.suppressContentEditableWarning &&
+        props.contentEditable &&
+        null != props.children &&
+        console.error(
+          "A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."
+        );
+      formatContext.insertionMode !== SVG_MODE &&
+        formatContext.insertionMode !== MATHML_MODE &&
+        -1 === type.indexOf("-") &&
+        type.toLowerCase() !== type &&
+        console.error(
+          "<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.",
+          type
+        );
+      switch (type) {
+        case "div":
+        case "span":
+        case "svg":
+        case "path":
+          break;
+        case "a":
+          target$jscomp$0.push(startChunkForTag("a"));
+          var children = null,
+            innerHTML = null,
+            propKey;
+          for (propKey in props)
+            if (hasOwnProperty.call(props, propKey)) {
+              var propValue = props[propKey];
+              if (null != propValue)
+                switch (propKey) {
+                  case "children":
+                    children = propValue;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML = propValue;
+                    break;
+                  case "href":
+                    "" === propValue
+                      ? pushStringAttribute(target$jscomp$0, "href", "")
+                      : pushAttribute(target$jscomp$0, propKey, propValue);
+                    break;
+                  default:
+                    pushAttribute(target$jscomp$0, propKey, propValue);
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML, children);
+          if ("string" === typeof children) {
+            target$jscomp$0.push(escapeTextForBrowser(children));
+            var JSCompiler_inline_result$jscomp$0 = null;
+          } else JSCompiler_inline_result$jscomp$0 = children;
+          return JSCompiler_inline_result$jscomp$0;
+        case "g":
+        case "p":
+        case "li":
+          break;
+        case "select":
+          checkControlledValueProps("select", props);
+          checkSelectProp(props, "value");
+          checkSelectProp(props, "defaultValue");
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultSelectValue ||
+            (console.error(
+              "Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultSelectValue = !0));
+          target$jscomp$0.push(startChunkForTag("select"));
+          var children$jscomp$0 = null,
+            innerHTML$jscomp$0 = null,
+            propKey$jscomp$0;
+          for (propKey$jscomp$0 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+              var propValue$jscomp$0 = props[propKey$jscomp$0];
+              if (null != propValue$jscomp$0)
+                switch (propKey$jscomp$0) {
+                  case "children":
+                    children$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "defaultValue":
+                  case "value":
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$0,
+                      propValue$jscomp$0
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+          return children$jscomp$0;
+        case "option":
+          var selectedValue = formatContext.selectedValue;
+          target$jscomp$0.push(startChunkForTag("option"));
+          var children$jscomp$1 = null,
+            value = null,
+            selected = null,
+            innerHTML$jscomp$1 = null,
+            propKey$jscomp$1;
+          for (propKey$jscomp$1 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+              var propValue$jscomp$1 = props[propKey$jscomp$1];
+              if (null != propValue$jscomp$1)
+                switch (propKey$jscomp$1) {
+                  case "children":
+                    children$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "selected":
+                    selected = propValue$jscomp$1;
+                    didWarnSelectedSetOnOption ||
+                      (console.error(
+                        "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>."
+                      ),
+                      (didWarnSelectedSetOnOption = !0));
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "value":
+                    value = propValue$jscomp$1;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$1,
+                      propValue$jscomp$1
+                    );
+                }
+            }
+          if (null != selectedValue) {
+            if (null !== value) {
+              checkAttributeStringCoercion(value, "value");
+              var stringValue = "" + value;
+            } else
+              null === innerHTML$jscomp$1 ||
+                didWarnInvalidOptionInnerHTML ||
+                ((didWarnInvalidOptionInnerHTML = !0),
+                console.error(
+                  "Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected."
+                )),
+                (stringValue = flattenOptionChildren(children$jscomp$1));
+            if (isArrayImpl(selectedValue))
+              for (var i = 0; i < selectedValue.length; i++) {
+                if (
+                  (checkAttributeStringCoercion(selectedValue[i], "value"),
+                  "" + selectedValue[i] === stringValue)
+                ) {
+                  target$jscomp$0.push(' selected=""');
+                  break;
+                }
+              }
+            else
+              checkAttributeStringCoercion(selectedValue, "select.value"),
+                "" + selectedValue === stringValue &&
+                  target$jscomp$0.push(' selected=""');
+          } else selected && target$jscomp$0.push(' selected=""');
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+          return children$jscomp$1;
+        case "textarea":
+          checkControlledValueProps("textarea", props);
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultTextareaValue ||
+            (console.error(
+              "Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultTextareaValue = !0));
+          target$jscomp$0.push(startChunkForTag("textarea"));
+          var value$jscomp$0 = null,
+            defaultValue = null,
+            children$jscomp$2 = null,
+            propKey$jscomp$2;
+          for (propKey$jscomp$2 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+              var propValue$jscomp$2 = props[propKey$jscomp$2];
+              if (null != propValue$jscomp$2)
+                switch (propKey$jscomp$2) {
+                  case "children":
+                    children$jscomp$2 = propValue$jscomp$2;
+                    break;
+                  case "value":
+                    value$jscomp$0 = propValue$jscomp$2;
+                    break;
+                  case "defaultValue":
+                    defaultValue = propValue$jscomp$2;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$2,
+                      propValue$jscomp$2
+                    );
+                }
+            }
+          null === value$jscomp$0 &&
+            null !== defaultValue &&
+            (value$jscomp$0 = defaultValue);
+          target$jscomp$0.push(endOfStartTag);
+          if (null != children$jscomp$2) {
+            console.error(
+              "Use the `defaultValue` or `value` props instead of setting children on <textarea>."
+            );
+            if (null != value$jscomp$0)
+              throw Error(
+                "If you supply `defaultValue` on a <textarea>, do not pass children."
+              );
+            if (isArrayImpl(children$jscomp$2)) {
+              if (1 < children$jscomp$2.length)
+                throw Error("<textarea> can only have at most one child.");
+              checkHtmlStringCoercion(children$jscomp$2[0]);
+              value$jscomp$0 = "" + children$jscomp$2[0];
+            }
+            checkHtmlStringCoercion(children$jscomp$2);
+            value$jscomp$0 = "" + children$jscomp$2;
+          }
+          "string" === typeof value$jscomp$0 &&
+            "\n" === value$jscomp$0[0] &&
+            target$jscomp$0.push(leadingNewline);
+          null !== value$jscomp$0 &&
+            (checkAttributeStringCoercion(value$jscomp$0, "value"),
+            target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0)));
+          return null;
+        case "input":
+          checkControlledValueProps("input", props);
+          target$jscomp$0.push(startChunkForTag("input"));
+          var name = null,
+            formAction = null,
+            formEncType = null,
+            formMethod = null,
+            formTarget = null,
+            value$jscomp$1 = null,
+            defaultValue$jscomp$0 = null,
+            checked = null,
+            defaultChecked = null,
+            propKey$jscomp$3;
+          for (propKey$jscomp$3 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+              var propValue$jscomp$3 = props[propKey$jscomp$3];
+              if (null != propValue$jscomp$3)
+                switch (propKey$jscomp$3) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  case "name":
+                    name = propValue$jscomp$3;
+                    break;
+                  case "formAction":
+                    formAction = propValue$jscomp$3;
+                    break;
+                  case "formEncType":
+                    formEncType = propValue$jscomp$3;
+                    break;
+                  case "formMethod":
+                    formMethod = propValue$jscomp$3;
+                    break;
+                  case "formTarget":
+                    formTarget = propValue$jscomp$3;
+                    break;
+                  case "defaultChecked":
+                    defaultChecked = propValue$jscomp$3;
+                    break;
+                  case "defaultValue":
+                    defaultValue$jscomp$0 = propValue$jscomp$3;
+                    break;
+                  case "checked":
+                    checked = propValue$jscomp$3;
+                    break;
+                  case "value":
+                    value$jscomp$1 = propValue$jscomp$3;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$3,
+                      propValue$jscomp$3
+                    );
+                }
+            }
+          null === formAction ||
+            "image" === props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'An input can only specify a formAction along with type="submit" or type="image".'
+            ));
+          var formData = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction,
+            formEncType,
+            formMethod,
+            formTarget,
+            name
+          );
+          null === checked ||
+            null === defaultChecked ||
+            didWarnDefaultChecked ||
+            (console.error(
+              "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultChecked = !0));
+          null === value$jscomp$1 ||
+            null === defaultValue$jscomp$0 ||
+            didWarnDefaultInputValue ||
+            (console.error(
+              "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultInputValue = !0));
+          null !== checked
+            ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+            : null !== defaultChecked &&
+              pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+          null !== value$jscomp$1
+            ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+            : null !== defaultValue$jscomp$0 &&
+              pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+          target$jscomp$0.push(endOfStartTagSelfClosing);
+          null != formData &&
+            formData.forEach(pushAdditionalFormField, target$jscomp$0);
+          return null;
+        case "button":
+          target$jscomp$0.push(startChunkForTag("button"));
+          var children$jscomp$3 = null,
+            innerHTML$jscomp$2 = null,
+            name$jscomp$0 = null,
+            formAction$jscomp$0 = null,
+            formEncType$jscomp$0 = null,
+            formMethod$jscomp$0 = null,
+            formTarget$jscomp$0 = null,
+            propKey$jscomp$4;
+          for (propKey$jscomp$4 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+              var propValue$jscomp$4 = props[propKey$jscomp$4];
+              if (null != propValue$jscomp$4)
+                switch (propKey$jscomp$4) {
+                  case "children":
+                    children$jscomp$3 = propValue$jscomp$4;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$2 = propValue$jscomp$4;
+                    break;
+                  case "name":
+                    name$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formAction":
+                    formAction$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formEncType":
+                    formEncType$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formMethod":
+                    formMethod$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formTarget":
+                    formTarget$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$4,
+                      propValue$jscomp$4
+                    );
+                }
+            }
+          null === formAction$jscomp$0 ||
+            null == props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'A button can only specify a formAction along with type="submit" or no type.'
+            ));
+          var formData$jscomp$0 = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction$jscomp$0,
+            formEncType$jscomp$0,
+            formMethod$jscomp$0,
+            formTarget$jscomp$0,
+            name$jscomp$0
+          );
+          target$jscomp$0.push(endOfStartTag);
+          null != formData$jscomp$0 &&
+            formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+          if ("string" === typeof children$jscomp$3) {
+            target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3));
+            var JSCompiler_inline_result$jscomp$1 = null;
+          } else JSCompiler_inline_result$jscomp$1 = children$jscomp$3;
+          return JSCompiler_inline_result$jscomp$1;
+        case "form":
+          target$jscomp$0.push(startChunkForTag("form"));
+          var children$jscomp$4 = null,
+            innerHTML$jscomp$3 = null,
+            formAction$jscomp$1 = null,
+            formEncType$jscomp$1 = null,
+            formMethod$jscomp$1 = null,
+            formTarget$jscomp$1 = null,
+            propKey$jscomp$5;
+          for (propKey$jscomp$5 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+              var propValue$jscomp$5 = props[propKey$jscomp$5];
+              if (null != propValue$jscomp$5)
+                switch (propKey$jscomp$5) {
+                  case "children":
+                    children$jscomp$4 = propValue$jscomp$5;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$3 = propValue$jscomp$5;
+                    break;
+                  case "action":
+                    formAction$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "encType":
+                    formEncType$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "method":
+                    formMethod$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "target":
+                    formTarget$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$5,
+                      propValue$jscomp$5
+                    );
+                }
+            }
+          var formData$jscomp$1 = null,
+            formActionName = null;
+          if ("function" === typeof formAction$jscomp$1) {
+            (null === formEncType$jscomp$1 && null === formMethod$jscomp$1) ||
+              didWarnFormActionMethod ||
+              ((didWarnFormActionMethod = !0),
+              console.error(
+                "Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden."
+              ));
+            null === formTarget$jscomp$1 ||
+              didWarnFormActionTarget ||
+              ((didWarnFormActionTarget = !0),
+              console.error(
+                "Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window."
+              ));
+            var customFields = getCustomFormFields(
+              resumableState,
+              formAction$jscomp$1
+            );
+            null !== customFields
+              ? ((formAction$jscomp$1 = customFields.action || ""),
+                (formEncType$jscomp$1 = customFields.encType),
+                (formMethod$jscomp$1 = customFields.method),
+                (formTarget$jscomp$1 = customFields.target),
+                (formData$jscomp$1 = customFields.data),
+                (formActionName = customFields.name))
+              : (target$jscomp$0.push(
+                  attributeSeparator,
+                  "action",
+                  attributeAssign,
+                  actionJavaScriptURL,
+                  attributeEnd
+                ),
+                (formTarget$jscomp$1 =
+                  formMethod$jscomp$1 =
+                  formEncType$jscomp$1 =
+                  formAction$jscomp$1 =
+                    null),
+                injectFormReplayingRuntime(resumableState, renderState));
+          }
+          null != formAction$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+          null != formEncType$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+          null != formMethod$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+          null != formTarget$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+          target$jscomp$0.push(endOfStartTag);
+          null !== formActionName &&
+            (target$jscomp$0.push('<input type="hidden"'),
+            pushStringAttribute(target$jscomp$0, "name", formActionName),
+            target$jscomp$0.push(endOfStartTagSelfClosing),
+            null != formData$jscomp$1 &&
+              formData$jscomp$1.forEach(
+                pushAdditionalFormField,
+                target$jscomp$0
+              ));
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+          if ("string" === typeof children$jscomp$4) {
+            target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4));
+            var JSCompiler_inline_result$jscomp$2 = null;
+          } else JSCompiler_inline_result$jscomp$2 = children$jscomp$4;
+          return JSCompiler_inline_result$jscomp$2;
+        case "menuitem":
+          target$jscomp$0.push(startChunkForTag("menuitem"));
+          for (var propKey$jscomp$6 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+              var propValue$jscomp$6 = props[propKey$jscomp$6];
+              if (null != propValue$jscomp$6)
+                switch (propKey$jscomp$6) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$6,
+                      propValue$jscomp$6
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          return null;
+        case "object":
+          target$jscomp$0.push(startChunkForTag("object"));
+          var children$jscomp$5 = null,
+            innerHTML$jscomp$4 = null,
+            propKey$jscomp$7;
+          for (propKey$jscomp$7 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+              var propValue$jscomp$7 = props[propKey$jscomp$7];
+              if (null != propValue$jscomp$7)
+                switch (propKey$jscomp$7) {
+                  case "children":
+                    children$jscomp$5 = propValue$jscomp$7;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$4 = propValue$jscomp$7;
+                    break;
+                  case "data":
+                    checkAttributeStringCoercion(propValue$jscomp$7, "data");
+                    var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                    if ("" === sanitizedValue) {
+                      console.error(
+                        'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                        propKey$jscomp$7,
+                        propKey$jscomp$7
+                      );
+                      break;
+                    }
+                    target$jscomp$0.push(
+                      attributeSeparator,
+                      "data",
+                      attributeAssign,
+                      escapeTextForBrowser(sanitizedValue),
+                      attributeEnd
+                    );
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$7,
+                      propValue$jscomp$7
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+          if ("string" === typeof children$jscomp$5) {
+            target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5));
+            var JSCompiler_inline_result$jscomp$3 = null;
+          } else JSCompiler_inline_result$jscomp$3 = children$jscomp$5;
+          return JSCompiler_inline_result$jscomp$3;
+        case "title":
+          var insertionMode = formatContext.insertionMode,
+            noscriptTagInScope = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$6 = props.children,
+              child = Array.isArray(children$jscomp$6)
+                ? 2 > children$jscomp$6.length
+                  ? children$jscomp$6[0]
+                  : null
+                : children$jscomp$6;
+            Array.isArray(children$jscomp$6) && 1 < children$jscomp$6.length
+              ? console.error(
+                  "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an Array with length %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert `children` of <title> tags to a single string value which is why Arrays of length greater than 1 are not supported. When using JSX it can be common to combine text nodes and value nodes. For example: <title>hello {nameOfUser}</title>. While not immediately apparent, `children` in this case is an Array with length 2. If your `children` prop is using this form try rewriting it using a template string: <title>{`hello ${nameOfUser}`}</title>.",
+                  children$jscomp$6.length
+                )
+              : "function" === typeof child || "symbol" === typeof child
+                ? console.error(
+                    "React expect children of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value.",
+                    "function" === typeof child ? "a Function" : "a Sybmol"
+                  )
+                : child &&
+                  child.toString === {}.toString &&
+                  (null != child.$$typeof
+                    ? console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that appears to be a React element which never implements a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value which is why rendering React elements is not supported. If the `children` of <title> is a React Component try moving the <title> tag into that component. If the `children` of <title> is some HTML markup change it to be Text only to be valid HTML."
+                      )
+                    : console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that does not implement a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value. Using the default `toString` method available on every object is almost certainly an error. Consider whether the `children` of this <title> is an object in error and change it to a string or number value if so. Otherwise implement a `toString` method that React can use to produce a valid <title>."
+                      ));
+          }
+          if (
+            insertionMode === SVG_MODE ||
+            noscriptTagInScope ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$4 = pushTitleImpl(
+              target$jscomp$0,
+              props
+            );
+          else
+            isFallback
+              ? (JSCompiler_inline_result$jscomp$4 = null)
+              : (pushTitleImpl(renderState.hoistableChunks, props),
+                (JSCompiler_inline_result$jscomp$4 = void 0));
+          return JSCompiler_inline_result$jscomp$4;
+        case "link":
+          var rel = props.rel,
+            href = props.href,
+            precedence = props.precedence;
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp ||
+            "string" !== typeof rel ||
+            "string" !== typeof href ||
+            "" === href
+          ) {
+            "stylesheet" === rel &&
+              "string" === typeof props.precedence &&
+              (("string" === typeof href && href) ||
+                console.error(
+                  'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and expected the `href` prop to be a non-empty string but ecountered %s instead. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop ensure there is a non-empty string `href` prop as well, otherwise remove the `precedence` prop.',
+                  null === href
+                    ? "`null`"
+                    : void 0 === href
+                      ? "`undefined`"
+                      : "" === href
+                        ? "an empty string"
+                        : 'something with type "' + typeof href + '"'
+                ));
+            pushLinkImpl(target$jscomp$0, props);
+            var JSCompiler_inline_result$jscomp$5 = null;
+          } else if ("stylesheet" === props.rel)
+            if (
+              "string" !== typeof precedence ||
+              null != props.disabled ||
+              props.onLoad ||
+              props.onError
+            ) {
+              if ("string" === typeof precedence)
+                if (null != props.disabled)
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and a `disabled` prop. The presence of the `disabled` prop indicates an intent to manage the stylesheet active state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the `disabled` prop, otherwise remove the `precedence` prop.'
+                  );
+                else if (props.onLoad || props.onError) {
+                  var propDescription =
+                    props.onLoad && props.onError
+                      ? "`onLoad` and `onError` props"
+                      : props.onLoad
+                        ? "`onLoad` prop"
+                        : "`onError` prop";
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',
+                    propDescription,
+                    propDescription
+                  );
+                }
+              JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                target$jscomp$0,
+                props
+              );
+            } else {
+              var styleQueue = renderState.styles.get(precedence),
+                resourceState = resumableState.styleResources.hasOwnProperty(
+                  href
+                )
+                  ? resumableState.styleResources[href]
+                  : void 0;
+              if (resourceState !== EXISTS) {
+                resumableState.styleResources[href] = EXISTS;
+                styleQueue ||
+                  ((styleQueue = {
+                    precedence: escapeTextForBrowser(precedence),
+                    rules: [],
+                    hrefs: [],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(precedence, styleQueue));
+                var resource = {
+                  state: PENDING$1,
+                  props: assign({}, props, {
+                    "data-precedence": props.precedence,
+                    precedence: null
+                  })
+                };
+                if (resourceState) {
+                  2 === resourceState.length &&
+                    adoptPreloadCredentials(resource.props, resourceState);
+                  var preloadResource =
+                    renderState.preloads.stylesheets.get(href);
+                  preloadResource && 0 < preloadResource.length
+                    ? (preloadResource.length = 0)
+                    : (resource.state = PRELOADED);
+                }
+                styleQueue.sheets.set(href, resource);
+                hoistableState && hoistableState.stylesheets.add(resource);
+              } else if (styleQueue) {
+                var _resource = styleQueue.sheets.get(href);
+                _resource &&
+                  hoistableState &&
+                  hoistableState.stylesheets.add(_resource);
+              }
+              textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+              JSCompiler_inline_result$jscomp$5 = null;
+            }
+          else
+            props.onLoad || props.onError
+              ? (JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                  target$jscomp$0,
+                  props
+                ))
+              : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+                (JSCompiler_inline_result$jscomp$5 = isFallback
+                  ? null
+                  : pushLinkImpl(renderState.hoistableChunks, props)));
+          return JSCompiler_inline_result$jscomp$5;
+        case "script":
+          var asyncProp = props.async;
+          if (
+            "string" !== typeof props.src ||
+            !props.src ||
+            !asyncProp ||
+            "function" === typeof asyncProp ||
+            "symbol" === typeof asyncProp ||
+            props.onLoad ||
+            props.onError ||
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$6 = pushScriptImpl(
+              target$jscomp$0,
+              props
+            );
+          else {
+            var key = props.src;
+            if ("module" === props.type) {
+              var resources = resumableState.moduleScriptResources;
+              var preloads = renderState.preloads.moduleScripts;
+            } else
+              (resources = resumableState.scriptResources),
+                (preloads = renderState.preloads.scripts);
+            var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+              ? resources[key]
+              : void 0;
+            if (resourceState$jscomp$0 !== EXISTS) {
+              resources[key] = EXISTS;
+              var scriptProps = props;
+              if (resourceState$jscomp$0) {
+                2 === resourceState$jscomp$0.length &&
+                  ((scriptProps = assign({}, props)),
+                  adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+                var preloadResource$jscomp$0 = preloads.get(key);
+                preloadResource$jscomp$0 &&
+                  (preloadResource$jscomp$0.length = 0);
+              }
+              var resource$jscomp$0 = [];
+              renderState.scripts.add(resource$jscomp$0);
+              pushScriptImpl(resource$jscomp$0, scriptProps);
+            }
+            textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+            JSCompiler_inline_result$jscomp$6 = null;
+          }
+          return JSCompiler_inline_result$jscomp$6;
+        case "style":
+          var insertionMode$jscomp$0 = formatContext.insertionMode,
+            noscriptTagInScope$jscomp$0 = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$7 = props.children,
+              child$jscomp$0 = Array.isArray(children$jscomp$7)
+                ? 2 > children$jscomp$7.length
+                  ? children$jscomp$7[0]
+                  : null
+                : children$jscomp$7;
+            ("function" === typeof child$jscomp$0 ||
+              "symbol" === typeof child$jscomp$0 ||
+              Array.isArray(child$jscomp$0)) &&
+              console.error(
+                "React expect children of <style> tags to be a string, number, or object with a `toString` method but found %s instead. In browsers style Elements can only have `Text` Nodes as children.",
+                "function" === typeof child$jscomp$0
+                  ? "a Function"
+                  : "symbol" === typeof child$jscomp$0
+                    ? "a Sybmol"
+                    : "an Array"
+              );
+          }
+          var precedence$jscomp$0 = props.precedence,
+            href$jscomp$0 = props.href;
+          if (
+            insertionMode$jscomp$0 === SVG_MODE ||
+            noscriptTagInScope$jscomp$0 ||
+            null != props.itemProp ||
+            "string" !== typeof precedence$jscomp$0 ||
+            "string" !== typeof href$jscomp$0 ||
+            "" === href$jscomp$0
+          ) {
+            target$jscomp$0.push(startChunkForTag("style"));
+            var children$jscomp$8 = null,
+              innerHTML$jscomp$5 = null,
+              propKey$jscomp$8;
+            for (propKey$jscomp$8 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+                var propValue$jscomp$8 = props[propKey$jscomp$8];
+                if (null != propValue$jscomp$8)
+                  switch (propKey$jscomp$8) {
+                    case "children":
+                      children$jscomp$8 = propValue$jscomp$8;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$5 = propValue$jscomp$8;
+                      break;
+                    default:
+                      pushAttribute(
+                        target$jscomp$0,
+                        propKey$jscomp$8,
+                        propValue$jscomp$8
+                      );
+                  }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            var child$jscomp$1 = Array.isArray(children$jscomp$8)
+              ? 2 > children$jscomp$8.length
+                ? children$jscomp$8[0]
+                : null
+              : children$jscomp$8;
+            "function" !== typeof child$jscomp$1 &&
+              "symbol" !== typeof child$jscomp$1 &&
+              null !== child$jscomp$1 &&
+              void 0 !== child$jscomp$1 &&
+              target$jscomp$0.push(escapeStyleTextContent(child$jscomp$1));
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$5,
+              children$jscomp$8
+            );
+            target$jscomp$0.push(endChunkForTag("style"));
+            var JSCompiler_inline_result$jscomp$7 = null;
+          } else {
+            href$jscomp$0.includes(" ") &&
+              console.error(
+                'React expected the `href` prop for a <style> tag opting into hoisting semantics using the `precedence` prop to not have any spaces but ecountered spaces instead. using spaces in this prop will cause hydration of this style to fail on the client. The href for the <style> where this ocurred is "%s".',
+                href$jscomp$0
+              );
+            var styleQueue$jscomp$0 =
+                renderState.styles.get(precedence$jscomp$0),
+              resourceState$jscomp$1 =
+                resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+                  ? resumableState.styleResources[href$jscomp$0]
+                  : void 0;
+            if (resourceState$jscomp$1 !== EXISTS) {
+              resumableState.styleResources[href$jscomp$0] = EXISTS;
+              resourceState$jscomp$1 &&
+                console.error(
+                  'React encountered a hoistable style tag for the same href as a preload: "%s". When using a style tag to inline styles you should not also preload it as a stylsheet.',
+                  href$jscomp$0
+                );
+              styleQueue$jscomp$0
+                ? styleQueue$jscomp$0.hrefs.push(
+                    escapeTextForBrowser(href$jscomp$0)
+                  )
+                : ((styleQueue$jscomp$0 = {
+                    precedence: escapeTextForBrowser(precedence$jscomp$0),
+                    rules: [],
+                    hrefs: [escapeTextForBrowser(href$jscomp$0)],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(
+                    precedence$jscomp$0,
+                    styleQueue$jscomp$0
+                  ));
+              var target = styleQueue$jscomp$0.rules,
+                children$jscomp$9 = null,
+                innerHTML$jscomp$6 = null,
+                propKey$jscomp$9;
+              for (propKey$jscomp$9 in props)
+                if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+                  var propValue$jscomp$9 = props[propKey$jscomp$9];
+                  if (null != propValue$jscomp$9)
+                    switch (propKey$jscomp$9) {
+                      case "children":
+                        children$jscomp$9 = propValue$jscomp$9;
+                        break;
+                      case "dangerouslySetInnerHTML":
+                        innerHTML$jscomp$6 = propValue$jscomp$9;
+                    }
+                }
+              var child$jscomp$2 = Array.isArray(children$jscomp$9)
+                ? 2 > children$jscomp$9.length
+                  ? children$jscomp$9[0]
+                  : null
+                : children$jscomp$9;
+              "function" !== typeof child$jscomp$2 &&
+                "symbol" !== typeof child$jscomp$2 &&
+                null !== child$jscomp$2 &&
+                void 0 !== child$jscomp$2 &&
+                target.push(escapeStyleTextContent(child$jscomp$2));
+              pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$9);
+            }
+            styleQueue$jscomp$0 &&
+              hoistableState &&
+              hoistableState.styles.add(styleQueue$jscomp$0);
+            textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+            JSCompiler_inline_result$jscomp$7 = void 0;
+          }
+          return JSCompiler_inline_result$jscomp$7;
+        case "meta":
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$8 = pushSelfClosing(
+              target$jscomp$0,
+              props,
+              "meta"
+            );
+          else
+            textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+              (JSCompiler_inline_result$jscomp$8 = isFallback
+                ? null
+                : "string" === typeof props.charSet
+                  ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+                  : "viewport" === props.name
+                    ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                    : pushSelfClosing(
+                        renderState.hoistableChunks,
+                        props,
+                        "meta"
+                      ));
+          return JSCompiler_inline_result$jscomp$8;
+        case "listing":
+        case "pre":
+          target$jscomp$0.push(startChunkForTag(type));
+          var children$jscomp$10 = null,
+            innerHTML$jscomp$7 = null,
+            propKey$jscomp$10;
+          for (propKey$jscomp$10 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+              var propValue$jscomp$10 = props[propKey$jscomp$10];
+              if (null != propValue$jscomp$10)
+                switch (propKey$jscomp$10) {
+                  case "children":
+                    children$jscomp$10 = propValue$jscomp$10;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$7 = propValue$jscomp$10;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$10,
+                      propValue$jscomp$10
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          if (null != innerHTML$jscomp$7) {
+            if (null != children$jscomp$10)
+              throw Error(
+                "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+              );
+            if (
+              "object" !== typeof innerHTML$jscomp$7 ||
+              !("__html" in innerHTML$jscomp$7)
+            )
+              throw Error(
+                "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+              );
+            var html = innerHTML$jscomp$7.__html;
+            null !== html &&
+              void 0 !== html &&
+              ("string" === typeof html && 0 < html.length && "\n" === html[0]
+                ? target$jscomp$0.push(leadingNewline, html)
+                : (checkHtmlStringCoercion(html),
+                  target$jscomp$0.push("" + html)));
+          }
+          "string" === typeof children$jscomp$10 &&
+            "\n" === children$jscomp$10[0] &&
+            target$jscomp$0.push(leadingNewline);
+          return children$jscomp$10;
+        case "img":
+          var src = props.src,
+            srcSet = props.srcSet;
+          if (
+            !(
+              "lazy" === props.loading ||
+              (!src && !srcSet) ||
+              ("string" !== typeof src && null != src) ||
+              ("string" !== typeof srcSet && null != srcSet)
+            ) &&
+            "low" !== props.fetchPriority &&
+            !1 === !!(formatContext.tagScope & 3) &&
+            ("string" !== typeof src ||
+              ":" !== src[4] ||
+              ("d" !== src[0] && "D" !== src[0]) ||
+              ("a" !== src[1] && "A" !== src[1]) ||
+              ("t" !== src[2] && "T" !== src[2]) ||
+              ("a" !== src[3] && "A" !== src[3])) &&
+            ("string" !== typeof srcSet ||
+              ":" !== srcSet[4] ||
+              ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+              ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+              ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+              ("a" !== srcSet[3] && "A" !== srcSet[3]))
+          ) {
+            var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+              key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+              promotablePreloads = renderState.preloads.images,
+              resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+            if (resource$jscomp$1) {
+              if (
+                "high" === props.fetchPriority ||
+                10 > renderState.highImagePreloads.size
+              )
+                promotablePreloads.delete(key$jscomp$0),
+                  renderState.highImagePreloads.add(resource$jscomp$1);
+            } else if (
+              !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+            ) {
+              resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+              var input = props.crossOrigin;
+              var crossOrigin =
+                "string" === typeof input
+                  ? "use-credentials" === input
+                    ? input
+                    : ""
+                  : void 0;
+              var headers = renderState.headers,
+                header;
+              headers &&
+              0 < headers.remainingCapacity &&
+              "string" !== typeof props.srcSet &&
+              ("high" === props.fetchPriority ||
+                500 > headers.highImagePreloads.length) &&
+              ((header = getPreloadAsHeader(src, "image", {
+                imageSrcSet: props.srcSet,
+                imageSizes: props.sizes,
+                crossOrigin: crossOrigin,
+                integrity: props.integrity,
+                nonce: props.nonce,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.refererPolicy
+              })),
+              0 <= (headers.remainingCapacity -= header.length + 2))
+                ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+                  headers.highImagePreloads &&
+                    (headers.highImagePreloads += ", "),
+                  (headers.highImagePreloads += header))
+                : ((resource$jscomp$1 = []),
+                  pushLinkImpl(resource$jscomp$1, {
+                    rel: "preload",
+                    as: "image",
+                    href: srcSet ? void 0 : src,
+                    imageSrcSet: srcSet,
+                    imageSizes: sizes,
+                    crossOrigin: crossOrigin,
+                    integrity: props.integrity,
+                    type: props.type,
+                    fetchPriority: props.fetchPriority,
+                    referrerPolicy: props.referrerPolicy
+                  }),
+                  "high" === props.fetchPriority ||
+                  10 > renderState.highImagePreloads.size
+                    ? renderState.highImagePreloads.add(resource$jscomp$1)
+                    : (renderState.bulkPreloads.add(resource$jscomp$1),
+                      promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+            }
+          }
+          return pushSelfClosing(target$jscomp$0, props, "img");
+        case "base":
+        case "area":
+        case "br":
+        case "col":
+        case "embed":
+        case "hr":
+        case "keygen":
+        case "param":
+        case "source":
+        case "track":
+        case "wbr":
+          return pushSelfClosing(target$jscomp$0, props, type);
+        case "annotation-xml":
+        case "color-profile":
+        case "font-face":
+        case "font-face-src":
+        case "font-face-uri":
+        case "font-face-format":
+        case "font-face-name":
+        case "missing-glyph":
+          break;
+        case "head":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble = preambleState || renderState.preamble;
+            if (preamble.headChunks)
+              throw Error("The `<head>` tag may only be rendered once.");
+            preamble.headChunks = [];
+            var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+              preamble.headChunks,
+              props,
+              "head"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "head"
+            );
+          return JSCompiler_inline_result$jscomp$9;
+        case "body":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble$jscomp$0 = preambleState || renderState.preamble;
+            if (preamble$jscomp$0.bodyChunks)
+              throw Error("The `<body>` tag may only be rendered once.");
+            preamble$jscomp$0.bodyChunks = [];
+            var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+              preamble$jscomp$0.bodyChunks,
+              props,
+              "body"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "body"
+            );
+          return JSCompiler_inline_result$jscomp$10;
+        case "html":
+          if (formatContext.insertionMode === ROOT_HTML_MODE) {
+            var preamble$jscomp$1 = preambleState || renderState.preamble;
+            if (preamble$jscomp$1.htmlChunks)
+              throw Error("The `<html>` tag may only be rendered once.");
+            preamble$jscomp$1.htmlChunks = [doctypeChunk];
+            var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+              preamble$jscomp$1.htmlChunks,
+              props,
+              "html"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "html"
+            );
+          return JSCompiler_inline_result$jscomp$11;
+        default:
+          if (-1 !== type.indexOf("-")) {
+            target$jscomp$0.push(startChunkForTag(type));
+            var children$jscomp$11 = null,
+              innerHTML$jscomp$8 = null,
+              propKey$jscomp$11;
+            for (propKey$jscomp$11 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+                var propValue$jscomp$11 = props[propKey$jscomp$11];
+                if (null != propValue$jscomp$11) {
+                  var attributeName = propKey$jscomp$11;
+                  switch (propKey$jscomp$11) {
+                    case "children":
+                      children$jscomp$11 = propValue$jscomp$11;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$8 = propValue$jscomp$11;
+                      break;
+                    case "style":
+                      pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                      break;
+                    case "suppressContentEditableWarning":
+                    case "suppressHydrationWarning":
+                    case "ref":
+                      break;
+                    case "className":
+                      attributeName = "class";
+                    default:
+                      if (
+                        isAttributeNameSafe(propKey$jscomp$11) &&
+                        "function" !== typeof propValue$jscomp$11 &&
+                        "symbol" !== typeof propValue$jscomp$11 &&
+                        !1 !== propValue$jscomp$11
+                      ) {
+                        if (!0 === propValue$jscomp$11)
+                          propValue$jscomp$11 = "";
+                        else if ("object" === typeof propValue$jscomp$11)
+                          continue;
+                        target$jscomp$0.push(
+                          attributeSeparator,
+                          attributeName,
+                          attributeAssign,
+                          escapeTextForBrowser(propValue$jscomp$11),
+                          attributeEnd
+                        );
+                      }
+                  }
+                }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$8,
+              children$jscomp$11
+            );
+            return children$jscomp$11;
+          }
+      }
+      return pushStartGenericElement(target$jscomp$0, props, type);
+    }
+    function endChunkForTag(tag) {
+      var chunk = endTagCache.get(tag);
+      void 0 === chunk &&
+        ((chunk = "</" + tag + ">"), endTagCache.set(tag, chunk));
+      return chunk;
+    }
+    function hoistPreambleState(renderState, preambleState) {
+      renderState = renderState.preamble;
+      null === renderState.htmlChunks &&
+        preambleState.htmlChunks &&
+        ((renderState.htmlChunks = preambleState.htmlChunks),
+        (preambleState.contribution |= 1));
+      null === renderState.headChunks &&
+        preambleState.headChunks &&
+        ((renderState.headChunks = preambleState.headChunks),
+        (preambleState.contribution |= 4));
+      null === renderState.bodyChunks &&
+        preambleState.bodyChunks &&
+        ((renderState.bodyChunks = preambleState.bodyChunks),
+        (preambleState.contribution |= 2));
+    }
+    function writeBootstrap(destination, renderState) {
+      renderState = renderState.bootstrapChunks;
+      for (var i = 0; i < renderState.length - 1; i++)
+        destination.push(renderState[i]);
+      return i < renderState.length
+        ? ((i = renderState[i]), (renderState.length = 0), destination.push(i))
+        : !0;
+    }
+    function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+      destination.push(startPendingSuspenseBoundary1);
+      if (null === id)
+        throw Error(
+          "An ID must have been assigned before we can complete the boundary."
+        );
+      destination.push(renderState.boundaryPrefix);
+      renderState = id.toString(16);
+      destination.push(renderState);
+      return destination.push(startPendingSuspenseBoundary2);
+    }
+    function writePreambleContribution(destination, preambleState) {
+      preambleState = preambleState.contribution;
+      preambleState !== NoContribution &&
+        (destination.push(boundaryPreambleContributionChunkStart),
+        destination.push("" + preambleState),
+        destination.push(boundaryPreambleContributionChunkEnd));
+    }
+    function writeStartSegment(destination, renderState, formatContext, id) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return (
+            destination.push(startSegmentHTML),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentHTML2)
+          );
+        case SVG_MODE:
+          return (
+            destination.push(startSegmentSVG),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentSVG2)
+          );
+        case MATHML_MODE:
+          return (
+            destination.push(startSegmentMathML),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentMathML2)
+          );
+        case HTML_TABLE_MODE:
+          return (
+            destination.push(startSegmentTable),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentTable2)
+          );
+        case HTML_TABLE_BODY_MODE:
+          return (
+            destination.push(startSegmentTableBody),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentTableBody2)
+          );
+        case HTML_TABLE_ROW_MODE:
+          return (
+            destination.push(startSegmentTableRow),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentTableRow2)
+          );
+        case HTML_COLGROUP_MODE:
+          return (
+            destination.push(startSegmentColGroup),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentColGroup2)
+          );
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function writeEndSegment(destination, formatContext) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return destination.push(endSegmentHTML);
+        case SVG_MODE:
+          return destination.push(endSegmentSVG);
+        case MATHML_MODE:
+          return destination.push(endSegmentMathML);
+        case HTML_TABLE_MODE:
+          return destination.push(endSegmentTable);
+        case HTML_TABLE_BODY_MODE:
+          return destination.push(endSegmentTableBody);
+        case HTML_TABLE_ROW_MODE:
+          return destination.push(endSegmentTableRow);
+        case HTML_COLGROUP_MODE:
+          return destination.push(endSegmentColGroup);
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function escapeJSStringsForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInInstructionScripts,
+        function (match) {
+          switch (match) {
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function escapeJSObjectForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInScripts,
+        function (match) {
+          switch (match) {
+            case "&":
+              return "\\u0026";
+            case ">":
+              return "\\u003e";
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function flushStyleTagsLateForBoundary(styleQueue) {
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      0 < rules.length &&
+        0 === hrefs.length &&
+        console.error(
+          "React expected to have at least one href for an a hoistable style but found none. This is a bug in React."
+        );
+      var i = 0;
+      if (hrefs.length) {
+        this.push(lateStyleTagResourceOpen1);
+        this.push(styleQueue.precedence);
+        for (this.push(lateStyleTagResourceOpen2); i < hrefs.length - 1; i++)
+          this.push(hrefs[i]), this.push(spaceSeparator);
+        this.push(hrefs[i]);
+        this.push(lateStyleTagResourceOpen3);
+        for (i = 0; i < rules.length; i++) this.push(rules[i]);
+        destinationHasCapacity = this.push(lateStyleTagTemplateClose);
+        currentlyRenderingBoundaryHasStylesToHoist = !0;
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function hasStylesToHoist(stylesheet) {
+      return stylesheet.state !== PREAMBLE
+        ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+        : !1;
+    }
+    function writeHoistablesForBoundary(
+      destination,
+      hoistableState,
+      renderState
+    ) {
+      currentlyRenderingBoundaryHasStylesToHoist = !1;
+      destinationHasCapacity = !0;
+      hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+      hoistableState.stylesheets.forEach(hasStylesToHoist);
+      currentlyRenderingBoundaryHasStylesToHoist &&
+        (renderState.stylesToHoist = !0);
+      return destinationHasCapacity;
+    }
+    function flushResource(resource) {
+      for (var i = 0; i < resource.length; i++) this.push(resource[i]);
+      resource.length = 0;
+    }
+    function flushStyleInPreamble(stylesheet) {
+      pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+      for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+        this.push(stylesheetFlushingQueue[i]);
+      stylesheetFlushingQueue.length = 0;
+      stylesheet.state = PREAMBLE;
+    }
+    function flushStylesInPreamble(styleQueue) {
+      var hasStylesheets = 0 < styleQueue.sheets.size;
+      styleQueue.sheets.forEach(flushStyleInPreamble, this);
+      styleQueue.sheets.clear();
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      if (!hasStylesheets || hrefs.length) {
+        this.push(styleTagResourceOpen1);
+        this.push(styleQueue.precedence);
+        styleQueue = 0;
+        if (hrefs.length) {
+          for (
+            this.push(styleTagResourceOpen2);
+            styleQueue < hrefs.length - 1;
+            styleQueue++
+          )
+            this.push(hrefs[styleQueue]), this.push(spaceSeparator);
+          this.push(hrefs[styleQueue]);
+        }
+        this.push(styleTagResourceOpen3);
+        for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+          this.push(rules[styleQueue]);
+        this.push(styleTagResourceClose);
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function preloadLateStyle(stylesheet) {
+      if (stylesheet.state === PENDING$1) {
+        stylesheet.state = PRELOADED;
+        var props = stylesheet.props;
+        pushLinkImpl(stylesheetFlushingQueue, {
+          rel: "preload",
+          as: "style",
+          href: stylesheet.props.href,
+          crossOrigin: props.crossOrigin,
+          fetchPriority: props.fetchPriority,
+          integrity: props.integrity,
+          media: props.media,
+          hrefLang: props.hrefLang,
+          referrerPolicy: props.referrerPolicy
+        });
+        for (
+          stylesheet = 0;
+          stylesheet < stylesheetFlushingQueue.length;
+          stylesheet++
+        )
+          this.push(stylesheetFlushingQueue[stylesheet]);
+        stylesheetFlushingQueue.length = 0;
+      }
+    }
+    function preloadLateStyles(styleQueue) {
+      styleQueue.sheets.forEach(preloadLateStyle, this);
+      styleQueue.sheets.clear();
+    }
+    function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+      destination.push(arrayFirstOpenBracket);
+      var nextArrayOpenBrackChunk = arrayFirstOpenBracket;
+      hoistableState.stylesheets.forEach(function (resource) {
+        if (resource.state !== PREAMBLE)
+          if (resource.state === LATE)
+            destination.push(nextArrayOpenBrackChunk),
+              (resource = resource.props.href),
+              checkAttributeStringCoercion(resource, "href"),
+              (resource = escapeJSObjectForInstructionScripts("" + resource)),
+              destination.push(resource),
+              destination.push(arrayCloseBracket),
+              (nextArrayOpenBrackChunk = arraySubsequentOpenBracket);
+          else {
+            destination.push(nextArrayOpenBrackChunk);
+            var precedence = resource.props["data-precedence"],
+              props = resource.props,
+              coercedHref = sanitizeURL("" + resource.props.href);
+            coercedHref = escapeJSObjectForInstructionScripts(coercedHref);
+            destination.push(coercedHref);
+            checkAttributeStringCoercion(precedence, "precedence");
+            precedence = "" + precedence;
+            destination.push(arrayInterstitial);
+            precedence = escapeJSObjectForInstructionScripts(precedence);
+            destination.push(precedence);
+            for (var propKey in props)
+              if (
+                hasOwnProperty.call(props, propKey) &&
+                ((precedence = props[propKey]), null != precedence)
+              )
+                switch (propKey) {
+                  case "href":
+                  case "rel":
+                  case "precedence":
+                  case "data-precedence":
+                    break;
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    writeStyleResourceAttributeInJS(
+                      destination,
+                      propKey,
+                      precedence
+                    );
+                }
+            destination.push(arrayCloseBracket);
+            nextArrayOpenBrackChunk = arraySubsequentOpenBracket;
+            resource.state = LATE;
+          }
+      });
+      destination.push(arrayCloseBracket);
+    }
+    function writeStyleResourceAttributeInJS(destination, name, value) {
+      var attributeName = name.toLowerCase();
+      switch (typeof value) {
+        case "function":
+        case "symbol":
+          return;
+      }
+      switch (name) {
+        case "innerHTML":
+        case "dangerouslySetInnerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "style":
+        case "ref":
+          return;
+        case "className":
+          attributeName = "class";
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        case "hidden":
+          if (!1 === value) return;
+          name = "";
+          break;
+        case "src":
+        case "href":
+          value = sanitizeURL(value);
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        default:
+          if (
+            (2 < name.length &&
+              ("o" === name[0] || "O" === name[0]) &&
+              ("n" === name[1] || "N" === name[1])) ||
+            !isAttributeNameSafe(name)
+          )
+            return;
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+      }
+      destination.push(arrayInterstitial);
+      attributeName = escapeJSObjectForInstructionScripts(attributeName);
+      destination.push(attributeName);
+      destination.push(arrayInterstitial);
+      attributeName = escapeJSObjectForInstructionScripts(name);
+      destination.push(attributeName);
+    }
+    function createHoistableState() {
+      return { styles: new Set(), stylesheets: new Set() };
+    }
+    function preloadBootstrapScriptOrModule(
+      resumableState,
+      renderState,
+      href,
+      props
+    ) {
+      (resumableState.scriptResources.hasOwnProperty(href) ||
+        resumableState.moduleScriptResources.hasOwnProperty(href)) &&
+        console.error(
+          'Internal React Error: React expected bootstrap script or module with src "%s" to not have been preloaded already. please file an issue',
+          href
+        );
+      resumableState.scriptResources[href] = EXISTS;
+      resumableState.moduleScriptResources[href] = EXISTS;
+      resumableState = [];
+      pushLinkImpl(resumableState, props);
+      renderState.bootstrapScripts.add(resumableState);
+    }
+    function adoptPreloadCredentials(target, preloadState) {
+      null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+      null == target.integrity && (target.integrity = preloadState[1]);
+    }
+    function getPreloadAsHeader(href, as, params) {
+      href = escapeHrefForLinkHeaderURLContext(href);
+      as = escapeStringForLinkHeaderQuotedParamValueContext(as, "as");
+      as = "<" + href + '>; rel=preload; as="' + as + '"';
+      for (var paramName in params)
+        hasOwnProperty.call(params, paramName) &&
+          ((href = params[paramName]),
+          "string" === typeof href &&
+            (as +=
+              "; " +
+              paramName.toLowerCase() +
+              '="' +
+              escapeStringForLinkHeaderQuotedParamValueContext(
+                href,
+                paramName
+              ) +
+              '"'));
+      return as;
+    }
+    function escapeHrefForLinkHeaderURLContext(hrefInput) {
+      checkAttributeStringCoercion(hrefInput, "href");
+      return ("" + hrefInput).replace(
+        regexForHrefInLinkHeaderURLContext,
+        escapeHrefForLinkHeaderURLContextReplacer
+      );
+    }
+    function escapeHrefForLinkHeaderURLContextReplacer(match) {
+      switch (match) {
+        case "<":
+          return "%3C";
+        case ">":
+          return "%3E";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContext(value, name) {
+      willCoercionThrow(value) &&
+        (console.error(
+          "The provided `%s` option is an unsupported type %s. This value must be coerced to a string before using it here.",
+          name,
+          typeName(value)
+        ),
+        testStringCoercion(value));
+      return ("" + value).replace(
+        regexForLinkHeaderQuotedParamValueContext,
+        escapeStringForLinkHeaderQuotedParamValueContextReplacer
+      );
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+      switch (match) {
+        case '"':
+          return "%22";
+        case "'":
+          return "%27";
+        case ";":
+          return "%3B";
+        case ",":
+          return "%2C";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function hoistStyleQueueDependency(styleQueue) {
+      this.styles.add(styleQueue);
+    }
+    function hoistStylesheetDependency(stylesheet) {
+      this.stylesheets.add(stylesheet);
+    }
+    function createRenderState(resumableState, generateStaticMarkup) {
+      var idPrefix = resumableState.idPrefix,
+        bootstrapChunks = [],
+        bootstrapScriptContent = resumableState.bootstrapScriptContent,
+        bootstrapScripts = resumableState.bootstrapScripts,
+        bootstrapModules = resumableState.bootstrapModules;
+      void 0 !== bootstrapScriptContent &&
+        bootstrapChunks.push(
+          "<script>",
+          escapeEntireInlineScriptContent(bootstrapScriptContent),
+          "\x3c/script>"
+        );
+      idPrefix = {
+        placeholderPrefix: idPrefix + "P:",
+        segmentPrefix: idPrefix + "S:",
+        boundaryPrefix: idPrefix + "B:",
+        startInlineScript: "<script>",
+        preamble: createPreambleState(),
+        externalRuntimeScript: null,
+        bootstrapChunks: bootstrapChunks,
+        importMapChunks: [],
+        onHeaders: void 0,
+        headers: null,
+        resets: {
+          font: {},
+          dns: {},
+          connect: { default: {}, anonymous: {}, credentials: {} },
+          image: {},
+          style: {}
+        },
+        charsetChunks: [],
+        viewportChunks: [],
+        hoistableChunks: [],
+        preconnects: new Set(),
+        fontPreloads: new Set(),
+        highImagePreloads: new Set(),
+        styles: new Map(),
+        bootstrapScripts: new Set(),
+        scripts: new Set(),
+        bulkPreloads: new Set(),
+        preloads: {
+          images: new Map(),
+          stylesheets: new Map(),
+          scripts: new Map(),
+          moduleScripts: new Map()
+        },
+        nonce: void 0,
+        hoistableState: null,
+        stylesToHoist: !1
+      };
+      if (void 0 !== bootstrapScripts)
+        for (
+          bootstrapScriptContent = 0;
+          bootstrapScriptContent < bootstrapScripts.length;
+          bootstrapScriptContent++
+        ) {
+          var scriptConfig = bootstrapScripts[bootstrapScriptContent],
+            src,
+            crossOrigin = void 0,
+            integrity = void 0,
+            props = {
+              rel: "preload",
+              as: "script",
+              fetchPriority: "low",
+              nonce: void 0
+            };
+          "string" === typeof scriptConfig
+            ? (props.href = src = scriptConfig)
+            : ((props.href = src = scriptConfig.src),
+              (props.integrity = integrity =
+                "string" === typeof scriptConfig.integrity
+                  ? scriptConfig.integrity
+                  : void 0),
+              (props.crossOrigin = crossOrigin =
+                "string" === typeof scriptConfig ||
+                null == scriptConfig.crossOrigin
+                  ? void 0
+                  : "use-credentials" === scriptConfig.crossOrigin
+                    ? "use-credentials"
+                    : ""));
+          preloadBootstrapScriptOrModule(resumableState, idPrefix, src, props);
+          bootstrapChunks.push('<script src="', escapeTextForBrowser(src));
+          "string" === typeof integrity &&
+            bootstrapChunks.push(
+              '" integrity="',
+              escapeTextForBrowser(integrity)
+            );
+          "string" === typeof crossOrigin &&
+            bootstrapChunks.push(
+              '" crossorigin="',
+              escapeTextForBrowser(crossOrigin)
+            );
+          bootstrapChunks.push('" async="">\x3c/script>');
+        }
+      if (void 0 !== bootstrapModules)
+        for (
+          bootstrapScripts = 0;
+          bootstrapScripts < bootstrapModules.length;
+          bootstrapScripts++
+        )
+          (bootstrapScriptContent = bootstrapModules[bootstrapScripts]),
+            (crossOrigin = src = void 0),
+            (integrity = {
+              rel: "modulepreload",
+              fetchPriority: "low",
+              nonce: void 0
+            }),
+            "string" === typeof bootstrapScriptContent
+              ? (integrity.href = scriptConfig = bootstrapScriptContent)
+              : ((integrity.href = scriptConfig = bootstrapScriptContent.src),
+                (integrity.integrity = crossOrigin =
+                  "string" === typeof bootstrapScriptContent.integrity
+                    ? bootstrapScriptContent.integrity
+                    : void 0),
+                (integrity.crossOrigin = src =
+                  "string" === typeof bootstrapScriptContent ||
+                  null == bootstrapScriptContent.crossOrigin
+                    ? void 0
+                    : "use-credentials" === bootstrapScriptContent.crossOrigin
+                      ? "use-credentials"
+                      : "")),
+            preloadBootstrapScriptOrModule(
+              resumableState,
+              idPrefix,
+              scriptConfig,
+              integrity
+            ),
+            bootstrapChunks.push(
+              '<script type="module" src="',
+              escapeTextForBrowser(scriptConfig)
+            ),
+            "string" === typeof crossOrigin &&
+              bootstrapChunks.push(
+                '" integrity="',
+                escapeTextForBrowser(crossOrigin)
+              ),
+            "string" === typeof src &&
+              bootstrapChunks.push(
+                '" crossorigin="',
+                escapeTextForBrowser(src)
+              ),
+            bootstrapChunks.push('" async="">\x3c/script>');
+      return {
+        placeholderPrefix: idPrefix.placeholderPrefix,
+        segmentPrefix: idPrefix.segmentPrefix,
+        boundaryPrefix: idPrefix.boundaryPrefix,
+        startInlineScript: idPrefix.startInlineScript,
+        preamble: idPrefix.preamble,
+        externalRuntimeScript: idPrefix.externalRuntimeScript,
+        bootstrapChunks: idPrefix.bootstrapChunks,
+        importMapChunks: idPrefix.importMapChunks,
+        onHeaders: idPrefix.onHeaders,
+        headers: idPrefix.headers,
+        resets: idPrefix.resets,
+        charsetChunks: idPrefix.charsetChunks,
+        viewportChunks: idPrefix.viewportChunks,
+        hoistableChunks: idPrefix.hoistableChunks,
+        preconnects: idPrefix.preconnects,
+        fontPreloads: idPrefix.fontPreloads,
+        highImagePreloads: idPrefix.highImagePreloads,
+        styles: idPrefix.styles,
+        bootstrapScripts: idPrefix.bootstrapScripts,
+        scripts: idPrefix.scripts,
+        bulkPreloads: idPrefix.bulkPreloads,
+        preloads: idPrefix.preloads,
+        stylesToHoist: idPrefix.stylesToHoist,
+        generateStaticMarkup: generateStaticMarkup
+      };
+    }
+    function pushTextInstance(target, text, renderState, textEmbedded) {
+      if (renderState.generateStaticMarkup)
+        return target.push(escapeTextForBrowser(text)), !1;
+      "" === text
+        ? (target = textEmbedded)
+        : (textEmbedded && target.push("\x3c!-- --\x3e"),
+          target.push(escapeTextForBrowser(text)),
+          (target = !0));
+      return target;
+    }
+    function pushSegmentFinale(
+      target,
+      renderState,
+      lastPushedText,
+      textEmbedded
+    ) {
+      renderState.generateStaticMarkup ||
+        (lastPushedText && textEmbedded && target.push("\x3c!-- --\x3e"));
+    }
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function popToNearestCommonAncestor(prev, next) {
+      if (prev !== next) {
+        prev.context._currentValue2 = prev.parentValue;
+        prev = prev.parent;
+        var parentNext = next.parent;
+        if (null === prev) {
+          if (null !== parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+        } else {
+          if (null === parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+          popToNearestCommonAncestor(prev, parentNext);
+        }
+        next.context._currentValue2 = next.value;
+      }
+    }
+    function popAllPrevious(prev) {
+      prev.context._currentValue2 = prev.parentValue;
+      prev = prev.parent;
+      null !== prev && popAllPrevious(prev);
+    }
+    function pushAllNext(next) {
+      var parentNext = next.parent;
+      null !== parentNext && pushAllNext(parentNext);
+      next.context._currentValue2 = next.value;
+    }
+    function popPreviousToCommonLevel(prev, next) {
+      prev.context._currentValue2 = prev.parentValue;
+      prev = prev.parent;
+      if (null === prev)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === next.depth
+        ? popToNearestCommonAncestor(prev, next)
+        : popPreviousToCommonLevel(prev, next);
+    }
+    function popNextToCommonLevel(prev, next) {
+      var parentNext = next.parent;
+      if (null === parentNext)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === parentNext.depth
+        ? popToNearestCommonAncestor(prev, parentNext)
+        : popNextToCommonLevel(prev, parentNext);
+      next.context._currentValue2 = next.value;
+    }
+    function switchContext(newSnapshot) {
+      var prev = currentActiveSnapshot;
+      prev !== newSnapshot &&
+        (null === prev
+          ? pushAllNext(newSnapshot)
+          : null === newSnapshot
+            ? popAllPrevious(prev)
+            : prev.depth === newSnapshot.depth
+              ? popToNearestCommonAncestor(prev, newSnapshot)
+              : prev.depth > newSnapshot.depth
+                ? popPreviousToCommonLevel(prev, newSnapshot)
+                : popNextToCommonLevel(prev, newSnapshot),
+        (currentActiveSnapshot = newSnapshot));
+    }
+    function warnOnInvalidCallback(callback) {
+      if (null !== callback && "function" !== typeof callback) {
+        var key = String(callback);
+        didWarnOnInvalidCallback.has(key) ||
+          (didWarnOnInvalidCallback.add(key),
+          console.error(
+            "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+            callback
+          ));
+      }
+    }
+    function warnNoop(publicInstance, callerName) {
+      publicInstance =
+        ((publicInstance = publicInstance.constructor) &&
+          getComponentNameFromType(publicInstance)) ||
+        "ReactClass";
+      var warningKey = publicInstance + "." + callerName;
+      didWarnAboutNoopUpdateForComponent[warningKey] ||
+        (console.error(
+          "Can only update a mounting component. This usually means you called %s() outside componentWillMount() on the server. This is a no-op.\n\nPlease check the code for the %s component.",
+          callerName,
+          publicInstance
+        ),
+        (didWarnAboutNoopUpdateForComponent[warningKey] = !0));
+    }
+    function pushTreeContext(baseContext, totalChildren, index) {
+      var baseIdWithLeadingBit = baseContext.id;
+      baseContext = baseContext.overflow;
+      var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+      baseIdWithLeadingBit &= ~(1 << baseLength);
+      index += 1;
+      var length = 32 - clz32(totalChildren) + baseLength;
+      if (30 < length) {
+        var numberOfOverflowBits = baseLength - (baseLength % 5);
+        length = (
+          baseIdWithLeadingBit &
+          ((1 << numberOfOverflowBits) - 1)
+        ).toString(32);
+        baseIdWithLeadingBit >>= numberOfOverflowBits;
+        baseLength -= numberOfOverflowBits;
+        return {
+          id:
+            (1 << (32 - clz32(totalChildren) + baseLength)) |
+            (index << baseLength) |
+            baseIdWithLeadingBit,
+          overflow: length + baseContext
+        };
+      }
+      return {
+        id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+        overflow: baseContext
+      };
+    }
+    function clz32Fallback(x) {
+      x >>>= 0;
+      return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+    }
+    function noop$2() {}
+    function trackUsedThenable(thenableState, thenable, index) {
+      index = thenableState[index];
+      void 0 === index
+        ? thenableState.push(thenable)
+        : index !== thenable &&
+          (thenable.then(noop$2, noop$2), (thenable = index));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+        default:
+          "string" === typeof thenable.status
+            ? thenable.then(noop$2, noop$2)
+            : ((thenableState = thenable),
+              (thenableState.status = "pending"),
+              thenableState.then(
+                function (fulfilledValue) {
+                  if ("pending" === thenable.status) {
+                    var fulfilledThenable = thenable;
+                    fulfilledThenable.status = "fulfilled";
+                    fulfilledThenable.value = fulfilledValue;
+                  }
+                },
+                function (error) {
+                  if ("pending" === thenable.status) {
+                    var rejectedThenable = thenable;
+                    rejectedThenable.status = "rejected";
+                    rejectedThenable.reason = error;
+                  }
+                }
+              ));
+          switch (thenable.status) {
+            case "fulfilled":
+              return thenable.value;
+            case "rejected":
+              throw thenable.reason;
+          }
+          suspendedThenable = thenable;
+          throw SuspenseException;
+      }
+    }
+    function getSuspendedThenable() {
+      if (null === suspendedThenable)
+        throw Error(
+          "Expected a suspended thenable. This is a bug in React. Please file an issue."
+        );
+      var thenable = suspendedThenable;
+      suspendedThenable = null;
+      return thenable;
+    }
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    function resolveCurrentlyRenderingComponent() {
+      if (null === currentlyRenderingComponent)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      isInHookUserCodeInDev &&
+        console.error(
+          "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"
+        );
+      return currentlyRenderingComponent;
+    }
+    function createHook() {
+      if (0 < numberOfReRenders)
+        throw Error("Rendered more hooks than during the previous render");
+      return { memoizedState: null, queue: null, next: null };
+    }
+    function createWorkInProgressHook() {
+      null === workInProgressHook
+        ? null === firstWorkInProgressHook
+          ? ((isReRender = !1),
+            (firstWorkInProgressHook = workInProgressHook = createHook()))
+          : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+        : null === workInProgressHook.next
+          ? ((isReRender = !1),
+            (workInProgressHook = workInProgressHook.next = createHook()))
+          : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+      return workInProgressHook;
+    }
+    function getThenableStateAfterSuspending() {
+      var state = thenableState;
+      thenableState = null;
+      return state;
+    }
+    function resetHooksState() {
+      isInHookUserCodeInDev = !1;
+      currentlyRenderingKeyPath =
+        currentlyRenderingRequest =
+        currentlyRenderingTask =
+        currentlyRenderingComponent =
+          null;
+      didScheduleRenderPhaseUpdate = !1;
+      firstWorkInProgressHook = null;
+      numberOfReRenders = 0;
+      workInProgressHook = renderPhaseUpdates = null;
+    }
+    function readContext(context) {
+      isInHookUserCodeInDev &&
+        console.error(
+          "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+        );
+      return context._currentValue2;
+    }
+    function basicStateReducer(state, action) {
+      return "function" === typeof action ? action(state) : action;
+    }
+    function useReducer(reducer, initialArg, init) {
+      reducer !== basicStateReducer && (currentHookNameInDev = "useReducer");
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      if (isReRender) {
+        init = workInProgressHook.queue;
+        initialArg = init.dispatch;
+        if (null !== renderPhaseUpdates) {
+          var firstRenderPhaseUpdate = renderPhaseUpdates.get(init);
+          if (void 0 !== firstRenderPhaseUpdate) {
+            renderPhaseUpdates.delete(init);
+            init = workInProgressHook.memoizedState;
+            do {
+              var action = firstRenderPhaseUpdate.action;
+              isInHookUserCodeInDev = !0;
+              init = reducer(init, action);
+              isInHookUserCodeInDev = !1;
+              firstRenderPhaseUpdate = firstRenderPhaseUpdate.next;
+            } while (null !== firstRenderPhaseUpdate);
+            workInProgressHook.memoizedState = init;
+            return [init, initialArg];
+          }
+        }
+        return [workInProgressHook.memoizedState, initialArg];
+      }
+      isInHookUserCodeInDev = !0;
+      reducer =
+        reducer === basicStateReducer
+          ? "function" === typeof initialArg
+            ? initialArg()
+            : initialArg
+          : void 0 !== init
+            ? init(initialArg)
+            : initialArg;
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = reducer;
+      reducer = workInProgressHook.queue = { last: null, dispatch: null };
+      reducer = reducer.dispatch = dispatchAction.bind(
+        null,
+        currentlyRenderingComponent,
+        reducer
+      );
+      return [workInProgressHook.memoizedState, reducer];
+    }
+    function useMemo(nextCreate, deps) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      if (null !== workInProgressHook) {
+        var prevState = workInProgressHook.memoizedState;
+        if (null !== prevState && null !== deps) {
+          a: {
+            var JSCompiler_inline_result = prevState[1];
+            if (null === JSCompiler_inline_result)
+              console.error(
+                "%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",
+                currentHookNameInDev
+              ),
+                (JSCompiler_inline_result = !1);
+            else {
+              deps.length !== JSCompiler_inline_result.length &&
+                console.error(
+                  "The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s",
+                  currentHookNameInDev,
+                  "[" + deps.join(", ") + "]",
+                  "[" + JSCompiler_inline_result.join(", ") + "]"
+                );
+              for (
+                var i = 0;
+                i < JSCompiler_inline_result.length && i < deps.length;
+                i++
+              )
+                if (!objectIs(deps[i], JSCompiler_inline_result[i])) {
+                  JSCompiler_inline_result = !1;
+                  break a;
+                }
+              JSCompiler_inline_result = !0;
+            }
+          }
+          if (JSCompiler_inline_result) return prevState[0];
+        }
+      }
+      isInHookUserCodeInDev = !0;
+      nextCreate = nextCreate();
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = [nextCreate, deps];
+      return nextCreate;
+    }
+    function dispatchAction(componentIdentity, queue, action) {
+      if (25 <= numberOfReRenders)
+        throw Error(
+          "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+        );
+      if (componentIdentity === currentlyRenderingComponent)
+        if (
+          ((didScheduleRenderPhaseUpdate = !0),
+          (componentIdentity = { action: action, next: null }),
+          null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+          (action = renderPhaseUpdates.get(queue)),
+          void 0 === action)
+        )
+          renderPhaseUpdates.set(queue, componentIdentity);
+        else {
+          for (queue = action; null !== queue.next; ) queue = queue.next;
+          queue.next = componentIdentity;
+        }
+    }
+    function unsupportedStartTransition() {
+      throw Error("startTransition cannot be called during server rendering.");
+    }
+    function unsupportedSetOptimisticState() {
+      throw Error("Cannot update optimistic state while rendering.");
+    }
+    function useActionState(action, initialState, permalink) {
+      resolveCurrentlyRenderingComponent();
+      var actionStateHookIndex = actionStateCounter++,
+        request = currentlyRenderingRequest;
+      if ("function" === typeof action.$$FORM_ACTION) {
+        var nextPostbackStateKey = null,
+          componentKeyPath = currentlyRenderingKeyPath;
+        request = request.formState;
+        var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+        if (null !== request && "function" === typeof isSignatureEqual) {
+          var postbackKey = request[1];
+          isSignatureEqual.call(action, request[2], request[3]) &&
+            ((nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  murmurhash3_32_gc(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ]),
+                    0
+                  )),
+            postbackKey === nextPostbackStateKey &&
+              ((actionStateMatchingIndex = actionStateHookIndex),
+              (initialState = request[0])));
+        }
+        var boundAction = action.bind(null, initialState);
+        action = function (payload) {
+          boundAction(payload);
+        };
+        "function" === typeof boundAction.$$FORM_ACTION &&
+          (action.$$FORM_ACTION = function (prefix) {
+            prefix = boundAction.$$FORM_ACTION(prefix);
+            void 0 !== permalink &&
+              (checkAttributeStringCoercion(permalink, "target"),
+              (permalink += ""),
+              (prefix.action = permalink));
+            var formData = prefix.data;
+            formData &&
+              (null === nextPostbackStateKey &&
+                (nextPostbackStateKey =
+                  void 0 !== permalink
+                    ? "p" + permalink
+                    : "k" +
+                      murmurhash3_32_gc(
+                        JSON.stringify([
+                          componentKeyPath,
+                          null,
+                          actionStateHookIndex
+                        ]),
+                        0
+                      )),
+              formData.append("$ACTION_KEY", nextPostbackStateKey));
+            return prefix;
+          });
+        return [initialState, action, !1];
+      }
+      var _boundAction = action.bind(null, initialState);
+      return [
+        initialState,
+        function (payload) {
+          _boundAction(payload);
+        },
+        !1
+      ];
+    }
+    function unwrapThenable(thenable) {
+      var index = thenableIndexCounter;
+      thenableIndexCounter += 1;
+      null === thenableState && (thenableState = []);
+      return trackUsedThenable(thenableState, thenable, index);
+    }
+    function unsupportedRefresh() {
+      throw Error("Cache cannot be refreshed during server rendering.");
+    }
+    function noop$1() {}
+    function disabledLog() {}
+    function disableLogs() {
+      if (0 === disabledDepth) {
+        prevLog = console.log;
+        prevInfo = console.info;
+        prevWarn = console.warn;
+        prevError = console.error;
+        prevGroup = console.group;
+        prevGroupCollapsed = console.groupCollapsed;
+        prevGroupEnd = console.groupEnd;
+        var props = {
+          configurable: !0,
+          enumerable: !0,
+          value: disabledLog,
+          writable: !0
+        };
+        Object.defineProperties(console, {
+          info: props,
+          log: props,
+          warn: props,
+          error: props,
+          group: props,
+          groupCollapsed: props,
+          groupEnd: props
+        });
+      }
+      disabledDepth++;
+    }
+    function reenableLogs() {
+      disabledDepth--;
+      if (0 === disabledDepth) {
+        var props = { configurable: !0, enumerable: !0, writable: !0 };
+        Object.defineProperties(console, {
+          log: assign({}, props, { value: prevLog }),
+          info: assign({}, props, { value: prevInfo }),
+          warn: assign({}, props, { value: prevWarn }),
+          error: assign({}, props, { value: prevError }),
+          group: assign({}, props, { value: prevGroup }),
+          groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
+          groupEnd: assign({}, props, { value: prevGroupEnd })
+        });
+      }
+      0 > disabledDepth &&
+        console.error(
+          "disabledDepth fell below zero. This is a bug in React. Please file an issue."
+        );
+    }
+    function describeBuiltInComponentFrame(name) {
+      if (void 0 === prefix)
+        try {
+          throw Error();
+        } catch (x) {
+          var match = x.stack.trim().match(/\n( *(at )?)/);
+          prefix = (match && match[1]) || "";
+          suffix =
+            -1 < x.stack.indexOf("\n    at")
+              ? " (<anonymous>)"
+              : -1 < x.stack.indexOf("@")
+                ? "@unknown:0:0"
+                : "";
+        }
+      return "\n" + prefix + name + suffix;
+    }
+    function describeNativeComponentFrame(fn, construct) {
+      if (!fn || reentry) return "";
+      var frame = componentFrameCache.get(fn);
+      if (void 0 !== frame) return frame;
+      reentry = !0;
+      frame = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      var previousDispatcher = null;
+      previousDispatcher = ReactSharedInternals.H;
+      ReactSharedInternals.H = null;
+      disableLogs();
+      try {
+        var RunInRootFrame = {
+          DetermineComponentFrameRoot: function () {
+            try {
+              if (construct) {
+                var Fake = function () {
+                  throw Error();
+                };
+                Object.defineProperty(Fake.prototype, "props", {
+                  set: function () {
+                    throw Error();
+                  }
+                });
+                if ("object" === typeof Reflect && Reflect.construct) {
+                  try {
+                    Reflect.construct(Fake, []);
+                  } catch (x) {
+                    var control = x;
+                  }
+                  Reflect.construct(fn, [], Fake);
+                } else {
+                  try {
+                    Fake.call();
+                  } catch (x$0) {
+                    control = x$0;
+                  }
+                  fn.call(Fake.prototype);
+                }
+              } else {
+                try {
+                  throw Error();
+                } catch (x$1) {
+                  control = x$1;
+                }
+                (Fake = fn()) &&
+                  "function" === typeof Fake.catch &&
+                  Fake.catch(function () {});
+              }
+            } catch (sample) {
+              if (sample && control && "string" === typeof sample.stack)
+                return [sample.stack, control.stack];
+            }
+            return [null, null];
+          }
+        };
+        RunInRootFrame.DetermineComponentFrameRoot.displayName =
+          "DetermineComponentFrameRoot";
+        var namePropDescriptor = Object.getOwnPropertyDescriptor(
+          RunInRootFrame.DetermineComponentFrameRoot,
+          "name"
+        );
+        namePropDescriptor &&
+          namePropDescriptor.configurable &&
+          Object.defineProperty(
+            RunInRootFrame.DetermineComponentFrameRoot,
+            "name",
+            { value: "DetermineComponentFrameRoot" }
+          );
+        var _RunInRootFrame$Deter =
+            RunInRootFrame.DetermineComponentFrameRoot(),
+          sampleStack = _RunInRootFrame$Deter[0],
+          controlStack = _RunInRootFrame$Deter[1];
+        if (sampleStack && controlStack) {
+          var sampleLines = sampleStack.split("\n"),
+            controlLines = controlStack.split("\n");
+          for (
+            _RunInRootFrame$Deter = namePropDescriptor = 0;
+            namePropDescriptor < sampleLines.length &&
+            !sampleLines[namePropDescriptor].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            namePropDescriptor++;
+          for (
+            ;
+            _RunInRootFrame$Deter < controlLines.length &&
+            !controlLines[_RunInRootFrame$Deter].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            _RunInRootFrame$Deter++;
+          if (
+            namePropDescriptor === sampleLines.length ||
+            _RunInRootFrame$Deter === controlLines.length
+          )
+            for (
+              namePropDescriptor = sampleLines.length - 1,
+                _RunInRootFrame$Deter = controlLines.length - 1;
+              1 <= namePropDescriptor &&
+              0 <= _RunInRootFrame$Deter &&
+              sampleLines[namePropDescriptor] !==
+                controlLines[_RunInRootFrame$Deter];
+
+            )
+              _RunInRootFrame$Deter--;
+          for (
+            ;
+            1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;
+            namePropDescriptor--, _RunInRootFrame$Deter--
+          )
+            if (
+              sampleLines[namePropDescriptor] !==
+              controlLines[_RunInRootFrame$Deter]
+            ) {
+              if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {
+                do
+                  if (
+                    (namePropDescriptor--,
+                    _RunInRootFrame$Deter--,
+                    0 > _RunInRootFrame$Deter ||
+                      sampleLines[namePropDescriptor] !==
+                        controlLines[_RunInRootFrame$Deter])
+                  ) {
+                    var _frame =
+                      "\n" +
+                      sampleLines[namePropDescriptor].replace(
+                        " at new ",
+                        " at "
+                      );
+                    fn.displayName &&
+                      _frame.includes("<anonymous>") &&
+                      (_frame = _frame.replace("<anonymous>", fn.displayName));
+                    "function" === typeof fn &&
+                      componentFrameCache.set(fn, _frame);
+                    return _frame;
+                  }
+                while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
+              }
+              break;
+            }
+        }
+      } finally {
+        (reentry = !1),
+          (ReactSharedInternals.H = previousDispatcher),
+          reenableLogs(),
+          (Error.prepareStackTrace = frame);
+      }
+      sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "")
+        ? describeBuiltInComponentFrame(sampleLines)
+        : "";
+      "function" === typeof fn && componentFrameCache.set(fn, sampleLines);
+      return sampleLines;
+    }
+    function formatOwnerStack(error) {
+      var prevPrepareStackTrace = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      error = error.stack;
+      Error.prepareStackTrace = prevPrepareStackTrace;
+      error.startsWith("Error: react-stack-top-frame\n") &&
+        (error = error.slice(29));
+      prevPrepareStackTrace = error.indexOf("\n");
+      -1 !== prevPrepareStackTrace &&
+        (error = error.slice(prevPrepareStackTrace + 1));
+      prevPrepareStackTrace = error.indexOf("react_stack_bottom_frame");
+      -1 !== prevPrepareStackTrace &&
+        (prevPrepareStackTrace = error.lastIndexOf(
+          "\n",
+          prevPrepareStackTrace
+        ));
+      if (-1 !== prevPrepareStackTrace)
+        error = error.slice(0, prevPrepareStackTrace);
+      else return "";
+      return error;
+    }
+    function describeComponentStackByType(type) {
+      if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+      if ("function" === typeof type)
+        return type.prototype && type.prototype.isReactComponent
+          ? describeNativeComponentFrame(type, !0)
+          : describeNativeComponentFrame(type, !1);
+      if ("object" === typeof type && null !== type) {
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeNativeComponentFrame(type.render, !1);
+          case REACT_MEMO_TYPE:
+            return describeNativeComponentFrame(type.type, !1);
+          case REACT_LAZY_TYPE:
+            var lazyComponent = type,
+              payload = lazyComponent._payload;
+            lazyComponent = lazyComponent._init;
+            try {
+              type = lazyComponent(payload);
+            } catch (x) {
+              return describeBuiltInComponentFrame("Lazy");
+            }
+            return describeComponentStackByType(type);
+        }
+        if ("string" === typeof type.name)
+          return (
+            (payload = type.env),
+            describeBuiltInComponentFrame(
+              type.name + (payload ? " [" + payload + "]" : "")
+            )
+          );
+      }
+      switch (type) {
+        case REACT_SUSPENSE_LIST_TYPE:
+          return describeBuiltInComponentFrame("SuspenseList");
+        case REACT_SUSPENSE_TYPE:
+          return describeBuiltInComponentFrame("Suspense");
+      }
+      return "";
+    }
+    function defaultErrorHandler(error) {
+      if (
+        "object" === typeof error &&
+        null !== error &&
+        "string" === typeof error.environmentName
+      ) {
+        var JSCompiler_inline_result = error.environmentName;
+        error = [error].slice(0);
+        "string" === typeof error[0]
+          ? error.splice(
+              0,
+              1,
+              "[%s] " + error[0],
+              " " + JSCompiler_inline_result + " "
+            )
+          : error.splice(0, 0, "[%s] ", " " + JSCompiler_inline_result + " ");
+        error.unshift(console);
+        JSCompiler_inline_result = bind.apply(console.error, error);
+        JSCompiler_inline_result();
+      } else console.error(error);
+      return null;
+    }
+    function noop() {}
+    function RequestInstance(
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var abortSet = new Set();
+      this.destination = null;
+      this.flushScheduled = !1;
+      this.resumableState = resumableState;
+      this.renderState = renderState;
+      this.rootFormatContext = rootFormatContext;
+      this.progressiveChunkSize =
+        void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+      this.status = 10;
+      this.fatalError = null;
+      this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+      this.completedPreambleSegments = this.completedRootSegment = null;
+      this.abortableTasks = abortSet;
+      this.pingedTasks = [];
+      this.clientRenderedBoundaries = [];
+      this.completedBoundaries = [];
+      this.partialBoundaries = [];
+      this.trackedPostpones = null;
+      this.onError = void 0 === onError ? defaultErrorHandler : onError;
+      this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+      this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+      this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+      this.onShellError = void 0 === onShellError ? noop : onShellError;
+      this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+      this.formState = void 0 === formState ? null : formState;
+      this.didWarnForKey = null;
+    }
+    function createRequest(
+      children,
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var now = getCurrentTime();
+      1e3 < now - lastResetTime &&
+        ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),
+        (lastResetTime = now));
+      resumableState = new RequestInstance(
+        resumableState,
+        renderState,
+        rootFormatContext,
+        progressiveChunkSize,
+        onError,
+        onAllReady,
+        onShellReady,
+        onShellError,
+        onFatalError,
+        onPostpone,
+        formState
+      );
+      renderState = createPendingSegment(
+        resumableState,
+        0,
+        null,
+        rootFormatContext,
+        !1,
+        !1
+      );
+      renderState.parentFlushed = !0;
+      children = createRenderTask(
+        resumableState,
+        null,
+        children,
+        -1,
+        null,
+        renderState,
+        null,
+        null,
+        resumableState.abortableTasks,
+        null,
+        rootFormatContext,
+        null,
+        emptyTreeContext,
+        null,
+        !1,
+        emptyContextObject,
+        null
+      );
+      pushComponentStack(children);
+      resumableState.pingedTasks.push(children);
+      return resumableState;
+    }
+    function pingTask(request, task) {
+      request.pingedTasks.push(task);
+      1 === request.pingedTasks.length &&
+        ((request.flushScheduled = null !== request.destination),
+        performWork(request));
+    }
+    function createSuspenseBoundary(
+      request,
+      fallbackAbortableTasks,
+      contentPreamble,
+      fallbackPreamble
+    ) {
+      return {
+        status: PENDING,
+        rootSegmentID: -1,
+        parentFlushed: !1,
+        pendingTasks: 0,
+        completedSegments: [],
+        byteSize: 0,
+        fallbackAbortableTasks: fallbackAbortableTasks,
+        errorDigest: null,
+        contentState: createHoistableState(),
+        fallbackState: createHoistableState(),
+        contentPreamble: contentPreamble,
+        fallbackPreamble: fallbackPreamble,
+        trackedContentKeyPath: null,
+        trackedFallbackNode: null,
+        errorMessage: null,
+        errorStack: null,
+        errorComponentStack: null
+      };
+    }
+    function createRenderTask(
+      request,
+      thenableState,
+      node,
+      childIndex,
+      blockedBoundary,
+      blockedSegment,
+      blockedPreamble,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      var task = {
+        replay: null,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: blockedSegment,
+        blockedPreamble: blockedPreamble,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createReplayTask(
+      request,
+      thenableState,
+      replay,
+      node,
+      childIndex,
+      blockedBoundary,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      replay.pendingTasks++;
+      var task = {
+        replay: replay,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: null,
+        blockedPreamble: null,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createPendingSegment(
+      request,
+      index,
+      boundary,
+      parentFormatContext,
+      lastPushedText,
+      textEmbedded
+    ) {
+      return {
+        status: PENDING,
+        parentFlushed: !1,
+        id: -1,
+        index: index,
+        chunks: [],
+        children: [],
+        preambleChildren: [],
+        parentFormatContext: parentFormatContext,
+        boundary: boundary,
+        lastPushedText: lastPushedText,
+        textEmbedded: textEmbedded
+      };
+    }
+    function getCurrentStackInDEV() {
+      if (null === currentTaskInDEV || null === currentTaskInDEV.componentStack)
+        return "";
+      var componentStack = currentTaskInDEV.componentStack;
+      try {
+        var info = "";
+        if ("string" === typeof componentStack.type)
+          info += describeBuiltInComponentFrame(componentStack.type);
+        else if ("function" === typeof componentStack.type) {
+          if (!componentStack.owner) {
+            var JSCompiler_temp_const = info,
+              fn = componentStack.type,
+              name = fn ? fn.displayName || fn.name : "";
+            var JSCompiler_inline_result = name
+              ? describeBuiltInComponentFrame(name)
+              : "";
+            info = JSCompiler_temp_const + JSCompiler_inline_result;
+          }
+        } else
+          componentStack.owner ||
+            (info += describeComponentStackByType(componentStack.type));
+        for (; componentStack; )
+          (JSCompiler_temp_const = null),
+            null != componentStack.debugStack
+              ? (JSCompiler_temp_const = formatOwnerStack(
+                  componentStack.debugStack
+                ))
+              : ((JSCompiler_inline_result = componentStack),
+                null != JSCompiler_inline_result.stack &&
+                  (JSCompiler_temp_const =
+                    "string" !== typeof JSCompiler_inline_result.stack
+                      ? (JSCompiler_inline_result.stack = formatOwnerStack(
+                          JSCompiler_inline_result.stack
+                        ))
+                      : JSCompiler_inline_result.stack)),
+            (componentStack = componentStack.owner) &&
+              JSCompiler_temp_const &&
+              (info += "\n" + JSCompiler_temp_const);
+        var JSCompiler_inline_result$jscomp$0 = info;
+      } catch (x) {
+        JSCompiler_inline_result$jscomp$0 =
+          "\nError generating stack: " + x.message + "\n" + x.stack;
+      }
+      return JSCompiler_inline_result$jscomp$0;
+    }
+    function pushServerComponentStack(task, debugInfo) {
+      if (null != debugInfo)
+        for (var i = 0; i < debugInfo.length; i++) {
+          var componentInfo = debugInfo[i];
+          "string" === typeof componentInfo.name &&
+            void 0 !== componentInfo.debugStack &&
+            ((task.componentStack = {
+              parent: task.componentStack,
+              type: componentInfo,
+              owner: componentInfo.owner,
+              stack: componentInfo.debugStack
+            }),
+            (task.debugTask = componentInfo.debugTask));
+        }
+    }
+    function pushComponentStack(task) {
+      var node = task.node;
+      if ("object" === typeof node && null !== node)
+        switch (node.$$typeof) {
+          case REACT_ELEMENT_TYPE:
+            var type = node.type,
+              owner = node._owner,
+              stack = node._debugStack;
+            pushServerComponentStack(task, node._debugInfo);
+            task.debugTask = node._debugTask;
+            task.componentStack = {
+              parent: task.componentStack,
+              type: type,
+              owner: owner,
+              stack: stack
+            };
+            break;
+          case REACT_LAZY_TYPE:
+            pushServerComponentStack(task, node._debugInfo);
+            break;
+          default:
+            "function" === typeof node.then &&
+              pushServerComponentStack(task, node._debugInfo);
+        }
+    }
+    function getThrownInfo(node$jscomp$0) {
+      var errorInfo = {};
+      node$jscomp$0 &&
+        Object.defineProperty(errorInfo, "componentStack", {
+          configurable: !0,
+          enumerable: !0,
+          get: function () {
+            try {
+              var info = "",
+                node = node$jscomp$0;
+              do
+                (info += describeComponentStackByType(node.type)),
+                  (node = node.parent);
+              while (node);
+              var stack = info;
+            } catch (x) {
+              stack = "\nError generating stack: " + x.message + "\n" + x.stack;
+            }
+            Object.defineProperty(errorInfo, "componentStack", {
+              value: stack
+            });
+            return stack;
+          }
+        });
+      return errorInfo;
+    }
+    function encodeErrorForBoundary(
+      boundary,
+      digest,
+      error,
+      thrownInfo,
+      wasAborted
+    ) {
+      boundary.errorDigest = digest;
+      error instanceof Error
+        ? ((digest = String(error.message)), (error = String(error.stack)))
+        : ((digest =
+            "object" === typeof error && null !== error
+              ? describeObjectForErrorMessage(error)
+              : String(error)),
+          (error = null));
+      wasAborted = wasAborted
+        ? "Switched to client rendering because the server rendering aborted due to:\n\n"
+        : "Switched to client rendering because the server rendering errored:\n\n";
+      boundary.errorMessage = wasAborted + digest;
+      boundary.errorStack = null !== error ? wasAborted + error : null;
+      boundary.errorComponentStack = thrownInfo.componentStack;
+    }
+    function logRecoverableError(request, error, errorInfo, debugTask) {
+      request = request.onError;
+      error = debugTask
+        ? debugTask.run(request.bind(null, error, errorInfo))
+        : request(error, errorInfo);
+      if (null != error && "string" !== typeof error)
+        console.error(
+          'onError returned something with a type other than "string". onError should return a string and may return null or undefined but must not return anything else. It received something of type "%s" instead',
+          typeof error
+        );
+      else return error;
+    }
+    function fatalError(request, error, errorInfo, debugTask) {
+      errorInfo = request.onShellError;
+      var onFatalError = request.onFatalError;
+      debugTask
+        ? (debugTask.run(errorInfo.bind(null, error)),
+          debugTask.run(onFatalError.bind(null, error)))
+        : (errorInfo(error), onFatalError(error));
+      null !== request.destination
+        ? ((request.status = CLOSED), request.destination.destroy(error))
+        : ((request.status = 13), (request.fatalError = error));
+    }
+    function renderWithHooks(
+      request,
+      task,
+      keyPath,
+      Component,
+      props,
+      secondArg
+    ) {
+      var prevThenableState = task.thenableState;
+      task.thenableState = null;
+      currentlyRenderingComponent = {};
+      currentlyRenderingTask = task;
+      currentlyRenderingRequest = request;
+      currentlyRenderingKeyPath = keyPath;
+      isInHookUserCodeInDev = !1;
+      actionStateCounter = localIdCounter = 0;
+      actionStateMatchingIndex = -1;
+      thenableIndexCounter = 0;
+      thenableState = prevThenableState;
+      for (
+        request = callComponentInDEV(Component, props, secondArg);
+        didScheduleRenderPhaseUpdate;
+
+      )
+        (didScheduleRenderPhaseUpdate = !1),
+          (actionStateCounter = localIdCounter = 0),
+          (actionStateMatchingIndex = -1),
+          (thenableIndexCounter = 0),
+          (numberOfReRenders += 1),
+          (workInProgressHook = null),
+          (request = Component(props, secondArg));
+      resetHooksState();
+      return request;
+    }
+    function finishFunctionComponent(
+      request,
+      task,
+      keyPath,
+      children,
+      hasId,
+      actionStateCount,
+      actionStateMatchingIndex
+    ) {
+      var didEmitActionStateMarkers = !1;
+      if (0 !== actionStateCount && null !== request.formState) {
+        var segment = task.blockedSegment;
+        if (null !== segment) {
+          didEmitActionStateMarkers = !0;
+          segment = segment.chunks;
+          for (var i = 0; i < actionStateCount; i++)
+            i === actionStateMatchingIndex
+              ? segment.push("\x3c!--F!--\x3e")
+              : segment.push("\x3c!--F--\x3e");
+        }
+      }
+      actionStateCount = task.keyPath;
+      task.keyPath = keyPath;
+      hasId
+        ? ((keyPath = task.treeContext),
+          (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+          renderNode(request, task, children, -1),
+          (task.treeContext = keyPath))
+        : didEmitActionStateMarkers
+          ? renderNode(request, task, children, -1)
+          : renderNodeDestructive(request, task, children, -1);
+      task.keyPath = actionStateCount;
+    }
+    function renderElement(request, task, keyPath, type, props, ref) {
+      if ("function" === typeof type)
+        if (type.prototype && type.prototype.isReactComponent) {
+          var newProps = props;
+          if ("ref" in props) {
+            newProps = {};
+            for (var propName in props)
+              "ref" !== propName && (newProps[propName] = props[propName]);
+          }
+          var defaultProps = type.defaultProps;
+          if (defaultProps) {
+            newProps === props && (newProps = assign({}, newProps, props));
+            for (var _propName in defaultProps)
+              void 0 === newProps[_propName] &&
+                (newProps[_propName] = defaultProps[_propName]);
+          }
+          var resolvedProps = newProps;
+          var context = emptyContextObject,
+            contextType = type.contextType;
+          if (
+            "contextType" in type &&
+            null !== contextType &&
+            (void 0 === contextType ||
+              contextType.$$typeof !== REACT_CONTEXT_TYPE) &&
+            !didWarnAboutInvalidateContextType.has(type)
+          ) {
+            didWarnAboutInvalidateContextType.add(type);
+            var addendum =
+              void 0 === contextType
+                ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file."
+                : "object" !== typeof contextType
+                  ? " However, it is set to a " + typeof contextType + "."
+                  : contextType.$$typeof === REACT_CONSUMER_TYPE
+                    ? " Did you accidentally pass the Context.Consumer instead?"
+                    : " However, it is set to an object with keys {" +
+                      Object.keys(contextType).join(", ") +
+                      "}.";
+            console.error(
+              "%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",
+              getComponentNameFromType(type) || "Component",
+              addendum
+            );
+          }
+          "object" === typeof contextType &&
+            null !== contextType &&
+            (context = contextType._currentValue2);
+          var instance = new type(resolvedProps, context);
+          if (
+            "function" === typeof type.getDerivedStateFromProps &&
+            (null === instance.state || void 0 === instance.state)
+          ) {
+            var componentName = getComponentNameFromType(type) || "Component";
+            didWarnAboutUninitializedState.has(componentName) ||
+              (didWarnAboutUninitializedState.add(componentName),
+              console.error(
+                "`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",
+                componentName,
+                null === instance.state ? "null" : "undefined",
+                componentName
+              ));
+          }
+          if (
+            "function" === typeof type.getDerivedStateFromProps ||
+            "function" === typeof instance.getSnapshotBeforeUpdate
+          ) {
+            var foundWillMountName = null,
+              foundWillReceivePropsName = null,
+              foundWillUpdateName = null;
+            "function" === typeof instance.componentWillMount &&
+            !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ? (foundWillMountName = "componentWillMount")
+              : "function" === typeof instance.UNSAFE_componentWillMount &&
+                (foundWillMountName = "UNSAFE_componentWillMount");
+            "function" === typeof instance.componentWillReceiveProps &&
+            !0 !==
+              instance.componentWillReceiveProps.__suppressDeprecationWarning
+              ? (foundWillReceivePropsName = "componentWillReceiveProps")
+              : "function" ===
+                  typeof instance.UNSAFE_componentWillReceiveProps &&
+                (foundWillReceivePropsName =
+                  "UNSAFE_componentWillReceiveProps");
+            "function" === typeof instance.componentWillUpdate &&
+            !0 !== instance.componentWillUpdate.__suppressDeprecationWarning
+              ? (foundWillUpdateName = "componentWillUpdate")
+              : "function" === typeof instance.UNSAFE_componentWillUpdate &&
+                (foundWillUpdateName = "UNSAFE_componentWillUpdate");
+            if (
+              null !== foundWillMountName ||
+              null !== foundWillReceivePropsName ||
+              null !== foundWillUpdateName
+            ) {
+              var _componentName =
+                  getComponentNameFromType(type) || "Component",
+                newApiName =
+                  "function" === typeof type.getDerivedStateFromProps
+                    ? "getDerivedStateFromProps()"
+                    : "getSnapshotBeforeUpdate()";
+              didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName) ||
+                (didWarnAboutLegacyLifecyclesAndDerivedState.add(
+                  _componentName
+                ),
+                console.error(
+                  "Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles",
+                  _componentName,
+                  newApiName,
+                  null !== foundWillMountName
+                    ? "\n  " + foundWillMountName
+                    : "",
+                  null !== foundWillReceivePropsName
+                    ? "\n  " + foundWillReceivePropsName
+                    : "",
+                  null !== foundWillUpdateName
+                    ? "\n  " + foundWillUpdateName
+                    : ""
+                ));
+            }
+          }
+          var name = getComponentNameFromType(type) || "Component";
+          instance.render ||
+            (type.prototype && "function" === typeof type.prototype.render
+              ? console.error(
+                  "No `render` method found on the %s instance: did you accidentally return an object from the constructor?",
+                  name
+                )
+              : console.error(
+                  "No `render` method found on the %s instance: you may have forgotten to define `render`.",
+                  name
+                ));
+          !instance.getInitialState ||
+            instance.getInitialState.isReactClassApproved ||
+            instance.state ||
+            console.error(
+              "getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",
+              name
+            );
+          instance.getDefaultProps &&
+            !instance.getDefaultProps.isReactClassApproved &&
+            console.error(
+              "getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",
+              name
+            );
+          instance.contextType &&
+            console.error(
+              "contextType was defined as an instance property on %s. Use a static property to define contextType instead.",
+              name
+            );
+          type.childContextTypes &&
+            !didWarnAboutChildContextTypes.has(type) &&
+            (didWarnAboutChildContextTypes.add(type),
+            console.error(
+              "%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          type.contextTypes &&
+            !didWarnAboutContextTypes$1.has(type) &&
+            (didWarnAboutContextTypes$1.add(type),
+            console.error(
+              "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          "function" === typeof instance.componentShouldUpdate &&
+            console.error(
+              "%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",
+              name
+            );
+          type.prototype &&
+            type.prototype.isPureReactComponent &&
+            "undefined" !== typeof instance.shouldComponentUpdate &&
+            console.error(
+              "%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",
+              getComponentNameFromType(type) || "A pure component"
+            );
+          "function" === typeof instance.componentDidUnmount &&
+            console.error(
+              "%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",
+              name
+            );
+          "function" === typeof instance.componentDidReceiveProps &&
+            console.error(
+              "%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",
+              name
+            );
+          "function" === typeof instance.componentWillRecieveProps &&
+            console.error(
+              "%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",
+              name
+            );
+          "function" === typeof instance.UNSAFE_componentWillRecieveProps &&
+            console.error(
+              "%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",
+              name
+            );
+          var hasMutatedProps = instance.props !== resolvedProps;
+          void 0 !== instance.props &&
+            hasMutatedProps &&
+            console.error(
+              "When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",
+              name
+            );
+          instance.defaultProps &&
+            console.error(
+              "Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",
+              name,
+              name
+            );
+          "function" !== typeof instance.getSnapshotBeforeUpdate ||
+            "function" === typeof instance.componentDidUpdate ||
+            didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(type) ||
+            (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(type),
+            console.error(
+              "%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",
+              getComponentNameFromType(type)
+            ));
+          "function" === typeof instance.getDerivedStateFromProps &&
+            console.error(
+              "%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof instance.getDerivedStateFromError &&
+            console.error(
+              "%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof type.getSnapshotBeforeUpdate &&
+            console.error(
+              "%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",
+              name
+            );
+          var state = instance.state;
+          state &&
+            ("object" !== typeof state || isArrayImpl(state)) &&
+            console.error("%s.state: must be set to an object or null", name);
+          "function" === typeof instance.getChildContext &&
+            "object" !== typeof type.childContextTypes &&
+            console.error(
+              "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",
+              name
+            );
+          var initialState = void 0 !== instance.state ? instance.state : null;
+          instance.updater = classComponentUpdater;
+          instance.props = resolvedProps;
+          instance.state = initialState;
+          var internalInstance = { queue: [], replace: !1 };
+          instance._reactInternals = internalInstance;
+          var contextType$jscomp$0 = type.contextType;
+          instance.context =
+            "object" === typeof contextType$jscomp$0 &&
+            null !== contextType$jscomp$0
+              ? contextType$jscomp$0._currentValue2
+              : emptyContextObject;
+          if (instance.state === resolvedProps) {
+            var componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Component";
+            didWarnAboutDirectlyAssigningPropsToState.has(
+              componentName$jscomp$0
+            ) ||
+              (didWarnAboutDirectlyAssigningPropsToState.add(
+                componentName$jscomp$0
+              ),
+              console.error(
+                "%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",
+                componentName$jscomp$0
+              ));
+          }
+          var getDerivedStateFromProps = type.getDerivedStateFromProps;
+          if ("function" === typeof getDerivedStateFromProps) {
+            var partialState = getDerivedStateFromProps(
+              resolvedProps,
+              initialState
+            );
+            if (void 0 === partialState) {
+              var componentName$jscomp$1 =
+                getComponentNameFromType(type) || "Component";
+              didWarnAboutUndefinedDerivedState.has(componentName$jscomp$1) ||
+                (didWarnAboutUndefinedDerivedState.add(componentName$jscomp$1),
+                console.error(
+                  "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",
+                  componentName$jscomp$1
+                ));
+            }
+            var JSCompiler_inline_result =
+              null === partialState || void 0 === partialState
+                ? initialState
+                : assign({}, initialState, partialState);
+            instance.state = JSCompiler_inline_result;
+          }
+          if (
+            "function" !== typeof type.getDerivedStateFromProps &&
+            "function" !== typeof instance.getSnapshotBeforeUpdate &&
+            ("function" === typeof instance.UNSAFE_componentWillMount ||
+              "function" === typeof instance.componentWillMount)
+          ) {
+            var oldState = instance.state;
+            if ("function" === typeof instance.componentWillMount) {
+              if (
+                !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ) {
+                var componentName$jscomp$2 =
+                  getComponentNameFromType(type) || "Unknown";
+                didWarnAboutDeprecatedWillMount[componentName$jscomp$2] ||
+                  (console.warn(
+                    "componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code from componentWillMount to componentDidMount (preferred in most cases) or the constructor.\n\nPlease update the following components: %s",
+                    componentName$jscomp$2
+                  ),
+                  (didWarnAboutDeprecatedWillMount[componentName$jscomp$2] =
+                    !0));
+              }
+              instance.componentWillMount();
+            }
+            "function" === typeof instance.UNSAFE_componentWillMount &&
+              instance.UNSAFE_componentWillMount();
+            oldState !== instance.state &&
+              (console.error(
+                "%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+                getComponentNameFromType(type) || "Component"
+              ),
+              classComponentUpdater.enqueueReplaceState(
+                instance,
+                instance.state,
+                null
+              ));
+            if (
+              null !== internalInstance.queue &&
+              0 < internalInstance.queue.length
+            ) {
+              var oldQueue = internalInstance.queue,
+                oldReplace = internalInstance.replace;
+              internalInstance.queue = null;
+              internalInstance.replace = !1;
+              if (oldReplace && 1 === oldQueue.length)
+                instance.state = oldQueue[0];
+              else {
+                for (
+                  var nextState = oldReplace ? oldQueue[0] : instance.state,
+                    dontMutate = !0,
+                    i = oldReplace ? 1 : 0;
+                  i < oldQueue.length;
+                  i++
+                ) {
+                  var partial = oldQueue[i],
+                    partialState$jscomp$0 =
+                      "function" === typeof partial
+                        ? partial.call(
+                            instance,
+                            nextState,
+                            resolvedProps,
+                            void 0
+                          )
+                        : partial;
+                  null != partialState$jscomp$0 &&
+                    (dontMutate
+                      ? ((dontMutate = !1),
+                        (nextState = assign(
+                          {},
+                          nextState,
+                          partialState$jscomp$0
+                        )))
+                      : assign(nextState, partialState$jscomp$0));
+                }
+                instance.state = nextState;
+              }
+            } else internalInstance.queue = null;
+          }
+          var nextChildren = callRenderInDEV(instance);
+          if (12 === request.status) throw null;
+          instance.props !== resolvedProps &&
+            (didWarnAboutReassigningProps ||
+              console.error(
+                "It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",
+                getComponentNameFromType(type) || "a component"
+              ),
+            (didWarnAboutReassigningProps = !0));
+          var prevKeyPath = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, nextChildren, -1);
+          task.keyPath = prevKeyPath;
+        } else {
+          if (type.prototype && "function" === typeof type.prototype.render) {
+            var componentName$jscomp$3 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutBadClass[componentName$jscomp$3] ||
+              (console.error(
+                "The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",
+                componentName$jscomp$3,
+                componentName$jscomp$3
+              ),
+              (didWarnAboutBadClass[componentName$jscomp$3] = !0));
+          }
+          var value = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type,
+            props,
+            void 0
+          );
+          if (12 === request.status) throw null;
+          var hasId = 0 !== localIdCounter,
+            actionStateCount = actionStateCounter,
+            actionStateMatchingIndex$jscomp$0 = actionStateMatchingIndex;
+          if (type.contextTypes) {
+            var _componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypes[_componentName$jscomp$0] ||
+              ((didWarnAboutContextTypes[_componentName$jscomp$0] = !0),
+              console.error(
+                "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",
+                _componentName$jscomp$0
+              ));
+          }
+          type &&
+            type.childContextTypes &&
+            console.error(
+              "childContextTypes cannot be defined on a function component.\n  %s.childContextTypes = ...",
+              type.displayName || type.name || "Component"
+            );
+          if ("function" === typeof type.getDerivedStateFromProps) {
+            var _componentName2 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] ||
+              (console.error(
+                "%s: Function components do not support getDerivedStateFromProps.",
+                _componentName2
+              ),
+              (didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] =
+                !0));
+          }
+          if (
+            "object" === typeof type.contextType &&
+            null !== type.contextType
+          ) {
+            var _componentName3 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypeOnFunctionComponent[_componentName3] ||
+              (console.error(
+                "%s: Function components do not support contextType.",
+                _componentName3
+              ),
+              (didWarnAboutContextTypeOnFunctionComponent[_componentName3] =
+                !0));
+          }
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            value,
+            hasId,
+            actionStateCount,
+            actionStateMatchingIndex$jscomp$0
+          );
+        }
+      else if ("string" === typeof type) {
+        var segment = task.blockedSegment;
+        if (null === segment) {
+          var children = props.children,
+            prevContext = task.formatContext,
+            prevKeyPath$jscomp$0 = task.keyPath;
+          task.formatContext = getChildFormatContext(prevContext, type, props);
+          task.keyPath = keyPath;
+          renderNode(request, task, children, -1);
+          task.formatContext = prevContext;
+          task.keyPath = prevKeyPath$jscomp$0;
+        } else {
+          var _children = pushStartInstance(
+            segment.chunks,
+            type,
+            props,
+            request.resumableState,
+            request.renderState,
+            task.blockedPreamble,
+            task.hoistableState,
+            task.formatContext,
+            segment.lastPushedText,
+            task.isFallback
+          );
+          segment.lastPushedText = !1;
+          var _prevContext = task.formatContext,
+            _prevKeyPath2 = task.keyPath;
+          task.keyPath = keyPath;
+          if (
+            (task.formatContext = getChildFormatContext(
+              _prevContext,
+              type,
+              props
+            )).insertionMode === HTML_HEAD_MODE
+          ) {
+            var preambleSegment = createPendingSegment(
+              request,
+              0,
+              null,
+              task.formatContext,
+              !1,
+              !1
+            );
+            segment.preambleChildren.push(preambleSegment);
+            var preambleTask = createRenderTask(
+              request,
+              null,
+              _children,
+              -1,
+              task.blockedBoundary,
+              preambleSegment,
+              task.blockedPreamble,
+              task.hoistableState,
+              request.abortableTasks,
+              task.keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback,
+              emptyContextObject,
+              task.debugTask
+            );
+            pushComponentStack(preambleTask);
+            request.pingedTasks.push(preambleTask);
+          } else renderNode(request, task, _children, -1);
+          task.formatContext = _prevContext;
+          task.keyPath = _prevKeyPath2;
+          a: {
+            var target = segment.chunks,
+              resumableState = request.resumableState;
+            switch (type) {
+              case "title":
+              case "style":
+              case "script":
+              case "area":
+              case "base":
+              case "br":
+              case "col":
+              case "embed":
+              case "hr":
+              case "img":
+              case "input":
+              case "keygen":
+              case "link":
+              case "meta":
+              case "param":
+              case "source":
+              case "track":
+              case "wbr":
+                break a;
+              case "body":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) {
+                  resumableState.hasBody = !0;
+                  break a;
+                }
+                break;
+              case "html":
+                if (_prevContext.insertionMode === ROOT_HTML_MODE) {
+                  resumableState.hasHtml = !0;
+                  break a;
+                }
+                break;
+              case "head":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) break a;
+            }
+            target.push(endChunkForTag(type));
+          }
+          segment.lastPushedText = !1;
+        }
+      } else {
+        switch (type) {
+          case REACT_LEGACY_HIDDEN_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_FRAGMENT_TYPE:
+            var prevKeyPath$jscomp$1 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = prevKeyPath$jscomp$1;
+            return;
+          case REACT_ACTIVITY_TYPE:
+            if ("hidden" !== props.mode) {
+              var prevKeyPath$jscomp$2 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, props.children, -1);
+              task.keyPath = prevKeyPath$jscomp$2;
+            }
+            return;
+          case REACT_SUSPENSE_LIST_TYPE:
+            var _prevKeyPath3 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = _prevKeyPath3;
+            return;
+          case REACT_VIEW_TRANSITION_TYPE:
+          case REACT_SCOPE_TYPE:
+            throw Error(
+              "ReactDOMServer does not yet support scope components."
+            );
+          case REACT_SUSPENSE_TYPE:
+            a: if (null !== task.replay) {
+              var _prevKeyPath = task.keyPath;
+              task.keyPath = keyPath;
+              var _content = props.children;
+              try {
+                renderNode(request, task, _content, -1);
+              } finally {
+                task.keyPath = _prevKeyPath;
+              }
+            } else {
+              var prevKeyPath$jscomp$3 = task.keyPath,
+                parentBoundary = task.blockedBoundary,
+                parentPreamble = task.blockedPreamble,
+                parentHoistableState = task.hoistableState,
+                parentSegment = task.blockedSegment,
+                fallback = props.fallback,
+                content = props.children,
+                fallbackAbortSet = new Set();
+              var newBoundary =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              null !== request.trackedPostpones &&
+                (newBoundary.trackedContentKeyPath = keyPath);
+              var boundarySegment = createPendingSegment(
+                request,
+                parentSegment.chunks.length,
+                newBoundary,
+                task.formatContext,
+                !1,
+                !1
+              );
+              parentSegment.children.push(boundarySegment);
+              parentSegment.lastPushedText = !1;
+              var contentRootSegment = createPendingSegment(
+                request,
+                0,
+                null,
+                task.formatContext,
+                !1,
+                !1
+              );
+              contentRootSegment.parentFlushed = !0;
+              if (null !== request.trackedPostpones) {
+                var fallbackKeyPath = [
+                    keyPath[0],
+                    "Suspense Fallback",
+                    keyPath[2]
+                  ],
+                  fallbackReplayNode = [
+                    fallbackKeyPath[1],
+                    fallbackKeyPath[2],
+                    [],
+                    null
+                  ];
+                request.trackedPostpones.workingMap.set(
+                  fallbackKeyPath,
+                  fallbackReplayNode
+                );
+                newBoundary.trackedFallbackNode = fallbackReplayNode;
+                task.blockedSegment = boundarySegment;
+                task.blockedPreamble = newBoundary.fallbackPreamble;
+                task.keyPath = fallbackKeyPath;
+                boundarySegment.status = 6;
+                try {
+                  renderNode(request, task, fallback, -1),
+                    pushSegmentFinale(
+                      boundarySegment.chunks,
+                      request.renderState,
+                      boundarySegment.lastPushedText,
+                      boundarySegment.textEmbedded
+                    ),
+                    (boundarySegment.status = COMPLETED);
+                } catch (thrownValue) {
+                  throw (
+                    ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                    thrownValue)
+                  );
+                } finally {
+                  (task.blockedSegment = parentSegment),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedPrimaryTask = createRenderTask(
+                  request,
+                  null,
+                  content,
+                  -1,
+                  newBoundary,
+                  contentRootSegment,
+                  newBoundary.contentPreamble,
+                  newBoundary.contentState,
+                  task.abortSet,
+                  keyPath,
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  task.isFallback,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedPrimaryTask);
+                request.pingedTasks.push(suspendedPrimaryTask);
+              } else {
+                task.blockedBoundary = newBoundary;
+                task.blockedPreamble = newBoundary.contentPreamble;
+                task.hoistableState = newBoundary.contentState;
+                task.blockedSegment = contentRootSegment;
+                task.keyPath = keyPath;
+                contentRootSegment.status = 6;
+                try {
+                  if (
+                    (renderNode(request, task, content, -1),
+                    pushSegmentFinale(
+                      contentRootSegment.chunks,
+                      request.renderState,
+                      contentRootSegment.lastPushedText,
+                      contentRootSegment.textEmbedded
+                    ),
+                    (contentRootSegment.status = COMPLETED),
+                    queueCompletedSegment(newBoundary, contentRootSegment),
+                    0 === newBoundary.pendingTasks &&
+                      newBoundary.status === PENDING)
+                  ) {
+                    newBoundary.status = COMPLETED;
+                    0 === request.pendingRootTasks &&
+                      task.blockedPreamble &&
+                      preparePreamble(request);
+                    break a;
+                  }
+                } catch (thrownValue$2) {
+                  newBoundary.status = CLIENT_RENDERED;
+                  if (12 === request.status) {
+                    contentRootSegment.status = 3;
+                    var error = request.fatalError;
+                  } else
+                    (contentRootSegment.status = 4), (error = thrownValue$2);
+                  var thrownInfo = getThrownInfo(task.componentStack);
+                  var errorDigest = logRecoverableError(
+                    request,
+                    error,
+                    thrownInfo,
+                    task.debugTask
+                  );
+                  encodeErrorForBoundary(
+                    newBoundary,
+                    errorDigest,
+                    error,
+                    thrownInfo,
+                    !1
+                  );
+                  untrackBoundary(request, newBoundary);
+                } finally {
+                  (task.blockedBoundary = parentBoundary),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.hoistableState = parentHoistableState),
+                    (task.blockedSegment = parentSegment),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedFallbackTask = createRenderTask(
+                  request,
+                  null,
+                  fallback,
+                  -1,
+                  parentBoundary,
+                  boundarySegment,
+                  newBoundary.fallbackPreamble,
+                  newBoundary.fallbackState,
+                  fallbackAbortSet,
+                  [keyPath[0], "Suspense Fallback", keyPath[2]],
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  !0,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedFallbackTask);
+                request.pingedTasks.push(suspendedFallbackTask);
+              }
+            }
+            return;
+        }
+        if ("object" === typeof type && null !== type)
+          switch (type.$$typeof) {
+            case REACT_FORWARD_REF_TYPE:
+              if ("ref" in props) {
+                var propsWithoutRef = {};
+                for (var key in props)
+                  "ref" !== key && (propsWithoutRef[key] = props[key]);
+              } else propsWithoutRef = props;
+              var children$jscomp$0 = renderWithHooks(
+                request,
+                task,
+                keyPath,
+                type.render,
+                propsWithoutRef,
+                ref
+              );
+              finishFunctionComponent(
+                request,
+                task,
+                keyPath,
+                children$jscomp$0,
+                0 !== localIdCounter,
+                actionStateCounter,
+                actionStateMatchingIndex
+              );
+              return;
+            case REACT_MEMO_TYPE:
+              renderElement(request, task, keyPath, type.type, props, ref);
+              return;
+            case REACT_PROVIDER_TYPE:
+            case REACT_CONTEXT_TYPE:
+              var value$jscomp$0 = props.value,
+                children$jscomp$1 = props.children;
+              var prevSnapshot = task.context;
+              var prevKeyPath$jscomp$4 = task.keyPath;
+              var prevValue = type._currentValue2;
+              type._currentValue2 = value$jscomp$0;
+              void 0 !== type._currentRenderer2 &&
+                null !== type._currentRenderer2 &&
+                type._currentRenderer2 !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer2 = rendererSigil;
+              var prevNode = currentActiveSnapshot,
+                newNode = {
+                  parent: prevNode,
+                  depth: null === prevNode ? 0 : prevNode.depth + 1,
+                  context: type,
+                  parentValue: prevValue,
+                  value: value$jscomp$0
+                };
+              currentActiveSnapshot = newNode;
+              task.context = newNode;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, children$jscomp$1, -1);
+              var prevSnapshot$jscomp$0 = currentActiveSnapshot;
+              if (null === prevSnapshot$jscomp$0)
+                throw Error(
+                  "Tried to pop a Context at the root of the app. This is a bug in React."
+                );
+              prevSnapshot$jscomp$0.context !== type &&
+                console.error(
+                  "The parent context is not the expected context. This is probably a bug in React."
+                );
+              prevSnapshot$jscomp$0.context._currentValue2 =
+                prevSnapshot$jscomp$0.parentValue;
+              void 0 !== type._currentRenderer2 &&
+                null !== type._currentRenderer2 &&
+                type._currentRenderer2 !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer2 = rendererSigil;
+              var JSCompiler_inline_result$jscomp$0 = (currentActiveSnapshot =
+                prevSnapshot$jscomp$0.parent);
+              task.context = JSCompiler_inline_result$jscomp$0;
+              task.keyPath = prevKeyPath$jscomp$4;
+              prevSnapshot !== task.context &&
+                console.error(
+                  "Popping the context provider did not return back to the original snapshot. This is a bug in React."
+                );
+              return;
+            case REACT_CONSUMER_TYPE:
+              var context$jscomp$0 = type._context,
+                render = props.children;
+              "function" !== typeof render &&
+                console.error(
+                  "A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."
+                );
+              var newChildren = render(context$jscomp$0._currentValue2),
+                prevKeyPath$jscomp$5 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, newChildren, -1);
+              task.keyPath = prevKeyPath$jscomp$5;
+              return;
+            case REACT_LAZY_TYPE:
+              var Component = callLazyInitInDEV(type);
+              if (12 === request.status) throw null;
+              renderElement(request, task, keyPath, Component, props, ref);
+              return;
+          }
+        var info = "";
+        if (
+          void 0 === type ||
+          ("object" === typeof type &&
+            null !== type &&
+            0 === Object.keys(type).length)
+        )
+          info +=
+            " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
+        throw Error(
+          "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+            ((null == type ? type : typeof type) + "." + info)
+        );
+      }
+    }
+    function resumeNode(request, task, segmentId, node, childIndex) {
+      var prevReplay = task.replay,
+        blockedBoundary = task.blockedBoundary,
+        resumedSegment = createPendingSegment(
+          request,
+          0,
+          null,
+          task.formatContext,
+          !1,
+          !1
+        );
+      resumedSegment.id = segmentId;
+      resumedSegment.parentFlushed = !0;
+      try {
+        (task.replay = null),
+          (task.blockedSegment = resumedSegment),
+          renderNode(request, task, node, childIndex),
+          (resumedSegment.status = COMPLETED),
+          null === blockedBoundary
+            ? (request.completedRootSegment = resumedSegment)
+            : (queueCompletedSegment(blockedBoundary, resumedSegment),
+              blockedBoundary.parentFlushed &&
+                request.partialBoundaries.push(blockedBoundary));
+      } finally {
+        (task.replay = prevReplay), (task.blockedSegment = null);
+      }
+    }
+    function replayElement(
+      request,
+      task,
+      keyPath,
+      name,
+      keyOrIndex,
+      childIndex,
+      type,
+      props,
+      ref,
+      replay
+    ) {
+      childIndex = replay.nodes;
+      for (var i = 0; i < childIndex.length; i++) {
+        var node = childIndex[i];
+        if (keyOrIndex === node[1]) {
+          if (4 === node.length) {
+            if (null !== name && name !== node[0])
+              throw Error(
+                "Expected the resume to render <" +
+                  node[0] +
+                  "> in this slot but instead it rendered <" +
+                  name +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            var childNodes = node[2];
+            node = node[3];
+            name = task.node;
+            task.replay = { nodes: childNodes, slots: node, pendingTasks: 1 };
+            try {
+              renderElement(request, task, keyPath, type, props, ref);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw (task.node === name && (task.replay = replay), x);
+              task.replay.pendingTasks--;
+              type = getThrownInfo(task.componentStack);
+              props = request;
+              request = task.blockedBoundary;
+              keyPath = x;
+              ref = node;
+              node = logRecoverableError(props, keyPath, type, task.debugTask);
+              abortRemainingReplayNodes(
+                props,
+                request,
+                childNodes,
+                ref,
+                keyPath,
+                node,
+                type,
+                !1
+              );
+            }
+            task.replay = replay;
+          } else {
+            if (type !== REACT_SUSPENSE_TYPE)
+              throw Error(
+                "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+                  (getComponentNameFromType(type) || "Unknown") +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            a: {
+              replay = void 0;
+              type = node[5];
+              ref = node[2];
+              name = node[3];
+              keyOrIndex = null === node[4] ? [] : node[4][2];
+              node = null === node[4] ? null : node[4][3];
+              var prevKeyPath = task.keyPath,
+                previousReplaySet = task.replay,
+                parentBoundary = task.blockedBoundary,
+                parentHoistableState = task.hoistableState,
+                content = props.children,
+                fallback = props.fallback,
+                fallbackAbortSet = new Set();
+              props =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              props.parentFlushed = !0;
+              props.rootSegmentID = type;
+              task.blockedBoundary = props;
+              task.hoistableState = props.contentState;
+              task.keyPath = keyPath;
+              task.replay = { nodes: ref, slots: name, pendingTasks: 1 };
+              try {
+                renderNode(request, task, content, -1);
+                if (
+                  1 === task.replay.pendingTasks &&
+                  0 < task.replay.nodes.length
+                )
+                  throw Error(
+                    "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                  );
+                task.replay.pendingTasks--;
+                if (0 === props.pendingTasks && props.status === PENDING) {
+                  props.status = COMPLETED;
+                  request.completedBoundaries.push(props);
+                  break a;
+                }
+              } catch (error) {
+                (props.status = CLIENT_RENDERED),
+                  (childNodes = getThrownInfo(task.componentStack)),
+                  (replay = logRecoverableError(
+                    request,
+                    error,
+                    childNodes,
+                    task.debugTask
+                  )),
+                  encodeErrorForBoundary(props, replay, error, childNodes, !1),
+                  task.replay.pendingTasks--,
+                  request.clientRenderedBoundaries.push(props);
+              } finally {
+                (task.blockedBoundary = parentBoundary),
+                  (task.hoistableState = parentHoistableState),
+                  (task.replay = previousReplaySet),
+                  (task.keyPath = prevKeyPath);
+              }
+              props = createReplayTask(
+                request,
+                null,
+                { nodes: keyOrIndex, slots: node, pendingTasks: 0 },
+                fallback,
+                -1,
+                parentBoundary,
+                props.fallbackState,
+                fallbackAbortSet,
+                [keyPath[0], "Suspense Fallback", keyPath[2]],
+                task.formatContext,
+                task.context,
+                task.treeContext,
+                task.componentStack,
+                !0,
+                emptyContextObject,
+                task.debugTask
+              );
+              pushComponentStack(props);
+              request.pingedTasks.push(props);
+            }
+          }
+          childIndex.splice(i, 1);
+          break;
+        }
+      }
+    }
+    function renderNodeDestructive(request, task, node, childIndex) {
+      null !== task.replay && "number" === typeof task.replay.slots
+        ? resumeNode(request, task, task.replay.slots, node, childIndex)
+        : ((task.node = node),
+          (task.childIndex = childIndex),
+          (node = task.componentStack),
+          (childIndex = task.debugTask),
+          pushComponentStack(task),
+          retryNode(request, task),
+          (task.componentStack = node),
+          (task.debugTask = childIndex));
+    }
+    function retryNode(request, task) {
+      var node = task.node,
+        childIndex = task.childIndex;
+      if (null !== node) {
+        if ("object" === typeof node) {
+          switch (node.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              var type = node.type,
+                key = node.key;
+              node = node.props;
+              var refProp = node.ref;
+              refProp = void 0 !== refProp ? refProp : null;
+              var debugTask = task.debugTask,
+                name = getComponentNameFromType(type);
+              key = null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+              var keyPath = [task.keyPath, name, key];
+              null !== task.replay
+                ? debugTask
+                  ? debugTask.run(
+                      replayElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        name,
+                        key,
+                        childIndex,
+                        type,
+                        node,
+                        refProp,
+                        task.replay
+                      )
+                    )
+                  : replayElement(
+                      request,
+                      task,
+                      keyPath,
+                      name,
+                      key,
+                      childIndex,
+                      type,
+                      node,
+                      refProp,
+                      task.replay
+                    )
+                : debugTask
+                  ? debugTask.run(
+                      renderElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        type,
+                        node,
+                        refProp
+                      )
+                    )
+                  : renderElement(request, task, keyPath, type, node, refProp);
+              return;
+            case REACT_PORTAL_TYPE:
+              throw Error(
+                "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+              );
+            case REACT_LAZY_TYPE:
+              node = callLazyInitInDEV(node);
+              if (12 === request.status) throw null;
+              renderNodeDestructive(request, task, node, childIndex);
+              return;
+          }
+          if (isArrayImpl(node)) {
+            renderChildrenArray(request, task, node, childIndex);
+            return;
+          }
+          null === node || "object" !== typeof node
+            ? (key = null)
+            : ((type =
+                (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+                node["@@iterator"]),
+              (key = "function" === typeof type ? type : null));
+          if (key && (type = key.call(node))) {
+            if (type === node) {
+              if (
+                -1 !== childIndex ||
+                null === task.componentStack ||
+                "function" !== typeof task.componentStack.type ||
+                "[object GeneratorFunction]" !==
+                  Object.prototype.toString.call(task.componentStack.type) ||
+                "[object Generator]" !== Object.prototype.toString.call(type)
+              )
+                didWarnAboutGenerators ||
+                  console.error(
+                    "Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."
+                  ),
+                  (didWarnAboutGenerators = !0);
+            } else
+              node.entries !== key ||
+                didWarnAboutMaps ||
+                (console.error(
+                  "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+                ),
+                (didWarnAboutMaps = !0));
+            node = type.next();
+            if (!node.done) {
+              key = [];
+              do key.push(node.value), (node = type.next());
+              while (!node.done);
+              renderChildrenArray(request, task, key, childIndex);
+            }
+            return;
+          }
+          if ("function" === typeof node.then)
+            return (
+              (task.thenableState = null),
+              renderNodeDestructive(
+                request,
+                task,
+                unwrapThenable(node),
+                childIndex
+              )
+            );
+          if (node.$$typeof === REACT_CONTEXT_TYPE)
+            return renderNodeDestructive(
+              request,
+              task,
+              node._currentValue2,
+              childIndex
+            );
+          request = Object.prototype.toString.call(node);
+          throw Error(
+            "Objects are not valid as a React child (found: " +
+              ("[object Object]" === request
+                ? "object with keys {" + Object.keys(node).join(", ") + "}"
+                : request) +
+              "). If you meant to render a collection of children, use an array instead."
+          );
+        }
+        "string" === typeof node
+          ? ((task = task.blockedSegment),
+            null !== task &&
+              (task.lastPushedText = pushTextInstance(
+                task.chunks,
+                node,
+                request.renderState,
+                task.lastPushedText
+              )))
+          : "number" === typeof node || "bigint" === typeof node
+            ? ((task = task.blockedSegment),
+              null !== task &&
+                (task.lastPushedText = pushTextInstance(
+                  task.chunks,
+                  "" + node,
+                  request.renderState,
+                  task.lastPushedText
+                )))
+            : ("function" === typeof node &&
+                ((request = node.displayName || node.name || "Component"),
+                console.error(
+                  "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.",
+                  request,
+                  request
+                )),
+              "symbol" === typeof node &&
+                console.error(
+                  "Symbols are not valid as a React child.\n  %s",
+                  String(node)
+                ));
+      }
+    }
+    function renderChildrenArray(request, task, children, childIndex) {
+      var prevKeyPath = task.keyPath,
+        previousComponentStack = task.componentStack;
+      var previousDebugTask = task.debugTask;
+      pushServerComponentStack(task, task.node._debugInfo);
+      if (
+        -1 !== childIndex &&
+        ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+        null !== task.replay)
+      ) {
+        for (
+          var replay = task.replay, replayNodes = replay.nodes, j = 0;
+          j < replayNodes.length;
+          j++
+        ) {
+          var node = replayNodes[j];
+          if (node[1] === childIndex) {
+            childIndex = node[2];
+            node = node[3];
+            task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+            try {
+              renderChildrenArray(request, task, children, -1);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw x;
+              task.replay.pendingTasks--;
+              var thrownInfo = getThrownInfo(task.componentStack);
+              children = task.blockedBoundary;
+              var error = x,
+                resumeSlots = node;
+              node = logRecoverableError(
+                request,
+                error,
+                thrownInfo,
+                task.debugTask
+              );
+              abortRemainingReplayNodes(
+                request,
+                children,
+                childIndex,
+                resumeSlots,
+                error,
+                node,
+                thrownInfo,
+                !1
+              );
+            }
+            task.replay = replay;
+            replayNodes.splice(j, 1);
+            break;
+          }
+        }
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      replay = task.treeContext;
+      replayNodes = children.length;
+      if (
+        null !== task.replay &&
+        ((j = task.replay.slots), null !== j && "object" === typeof j)
+      ) {
+        for (childIndex = 0; childIndex < replayNodes; childIndex++)
+          (node = children[childIndex]),
+            (task.treeContext = pushTreeContext(
+              replay,
+              replayNodes,
+              childIndex
+            )),
+            (error = j[childIndex]),
+            "number" === typeof error
+              ? (resumeNode(request, task, error, node, childIndex),
+                delete j[childIndex])
+              : renderNode(request, task, node, childIndex);
+        task.treeContext = replay;
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      for (j = 0; j < replayNodes; j++) {
+        childIndex = children[j];
+        resumeSlots = request;
+        node = task;
+        error = childIndex;
+        if (
+          null !== error &&
+          "object" === typeof error &&
+          (error.$$typeof === REACT_ELEMENT_TYPE ||
+            error.$$typeof === REACT_PORTAL_TYPE) &&
+          error._store &&
+          ((!error._store.validated && null == error.key) ||
+            2 === error._store.validated)
+        ) {
+          if ("object" !== typeof error._store)
+            throw Error(
+              "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue."
+            );
+          error._store.validated = 1;
+          thrownInfo = resumeSlots.didWarnForKey;
+          null == thrownInfo &&
+            (thrownInfo = resumeSlots.didWarnForKey = new WeakSet());
+          resumeSlots = node.componentStack;
+          if (null !== resumeSlots && !thrownInfo.has(resumeSlots)) {
+            thrownInfo.add(resumeSlots);
+            var componentName = getComponentNameFromType(error.type);
+            thrownInfo = error._owner;
+            var parentOwner = resumeSlots.owner;
+            resumeSlots = "";
+            if (parentOwner && "undefined" !== typeof parentOwner.type) {
+              var name = getComponentNameFromType(parentOwner.type);
+              name &&
+                (resumeSlots =
+                  "\n\nCheck the render method of `" + name + "`.");
+            }
+            resumeSlots ||
+              (componentName &&
+                (resumeSlots =
+                  "\n\nCheck the top-level render call using <" +
+                  componentName +
+                  ">."));
+            componentName = "";
+            null != thrownInfo &&
+              parentOwner !== thrownInfo &&
+              ((parentOwner = null),
+              "undefined" !== typeof thrownInfo.type
+                ? (parentOwner = getComponentNameFromType(thrownInfo.type))
+                : "string" === typeof thrownInfo.name &&
+                  (parentOwner = thrownInfo.name),
+              parentOwner &&
+                (componentName =
+                  " It was passed a child from " + parentOwner + "."));
+            thrownInfo = node.componentStack;
+            node.componentStack = {
+              parent: node.componentStack,
+              type: error.type,
+              owner: error._owner,
+              stack: error._debugStack
+            };
+            console.error(
+              'Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',
+              resumeSlots,
+              componentName
+            );
+            node.componentStack = thrownInfo;
+          }
+        }
+        task.treeContext = pushTreeContext(replay, replayNodes, j);
+        renderNode(request, task, childIndex, j);
+      }
+      task.treeContext = replay;
+      task.keyPath = prevKeyPath;
+      task.componentStack = previousComponentStack;
+      task.debugTask = previousDebugTask;
+    }
+    function untrackBoundary(request, boundary) {
+      request = request.trackedPostpones;
+      null !== request &&
+        ((boundary = boundary.trackedContentKeyPath),
+        null !== boundary &&
+          ((boundary = request.workingMap.get(boundary)),
+          void 0 !== boundary &&
+            ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+    }
+    function spawnNewSuspendedReplayTask(request, task, thenableState) {
+      return createReplayTask(
+        request,
+        thenableState,
+        task.replay,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function spawnNewSuspendedRenderTask(request, task, thenableState) {
+      var segment = task.blockedSegment,
+        newSegment = createPendingSegment(
+          request,
+          segment.chunks.length,
+          null,
+          task.formatContext,
+          segment.lastPushedText,
+          !0
+        );
+      segment.children.push(newSegment);
+      segment.lastPushedText = !1;
+      return createRenderTask(
+        request,
+        thenableState,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        newSegment,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function renderNode(request, task, node, childIndex) {
+      var previousFormatContext = task.formatContext,
+        previousContext = task.context,
+        previousKeyPath = task.keyPath,
+        previousTreeContext = task.treeContext,
+        previousComponentStack = task.componentStack,
+        previousDebugTask = task.debugTask,
+        segment = task.blockedSegment;
+      if (null === segment)
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue) {
+          if (
+            (resetHooksState(),
+            (node =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedReplayTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedReplayTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      else {
+        var childrenLength = segment.children.length,
+          chunkLength = segment.chunks.length;
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue$3) {
+          if (
+            (resetHooksState(),
+            (segment.children.length = childrenLength),
+            (segment.chunks.length = chunkLength),
+            (node =
+              thrownValue$3 === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue$3),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedRenderTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedRenderTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      }
+      task.formatContext = previousFormatContext;
+      task.context = previousContext;
+      task.keyPath = previousKeyPath;
+      task.treeContext = previousTreeContext;
+      switchContext(previousContext);
+      throw node;
+    }
+    function abortTaskSoft(task) {
+      var boundary = task.blockedBoundary;
+      task = task.blockedSegment;
+      null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+    }
+    function abortRemainingReplayNodes(
+      request$jscomp$0,
+      boundary,
+      nodes,
+      slots,
+      error$jscomp$0,
+      errorDigest$jscomp$0,
+      errorInfo$jscomp$0,
+      aborted
+    ) {
+      for (var i = 0; i < nodes.length; i++) {
+        var node = nodes[i];
+        if (4 === node.length)
+          abortRemainingReplayNodes(
+            request$jscomp$0,
+            boundary,
+            node[2],
+            node[3],
+            error$jscomp$0,
+            errorDigest$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          );
+        else {
+          var request = request$jscomp$0;
+          node = node[5];
+          var error = error$jscomp$0,
+            errorDigest = errorDigest$jscomp$0,
+            errorInfo = errorInfo$jscomp$0,
+            wasAborted = aborted,
+            resumedBoundary = createSuspenseBoundary(
+              request,
+              new Set(),
+              null,
+              null
+            );
+          resumedBoundary.parentFlushed = !0;
+          resumedBoundary.rootSegmentID = node;
+          resumedBoundary.status = CLIENT_RENDERED;
+          encodeErrorForBoundary(
+            resumedBoundary,
+            errorDigest,
+            error,
+            errorInfo,
+            wasAborted
+          );
+          resumedBoundary.parentFlushed &&
+            request.clientRenderedBoundaries.push(resumedBoundary);
+        }
+      }
+      nodes.length = 0;
+      if (null !== slots) {
+        if (null === boundary)
+          throw Error(
+            "We should not have any resumable nodes in the shell. This is a bug in React."
+          );
+        boundary.status !== CLIENT_RENDERED &&
+          ((boundary.status = CLIENT_RENDERED),
+          encodeErrorForBoundary(
+            boundary,
+            errorDigest$jscomp$0,
+            error$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          ),
+          boundary.parentFlushed &&
+            request$jscomp$0.clientRenderedBoundaries.push(boundary));
+        if ("object" === typeof slots)
+          for (var index in slots) delete slots[index];
+      }
+    }
+    function abortTask(task, request, error) {
+      var boundary = task.blockedBoundary,
+        segment = task.blockedSegment;
+      if (null !== segment) {
+        if (6 === segment.status) return;
+        segment.status = 3;
+      }
+      segment = getThrownInfo(task.componentStack);
+      if (null === boundary) {
+        if (13 !== request.status && request.status !== CLOSED) {
+          boundary = task.replay;
+          if (null === boundary) {
+            logRecoverableError(request, error, segment, null);
+            fatalError(request, error, segment, null);
+            return;
+          }
+          boundary.pendingTasks--;
+          0 === boundary.pendingTasks &&
+            0 < boundary.nodes.length &&
+            ((task = logRecoverableError(request, error, segment, null)),
+            abortRemainingReplayNodes(
+              request,
+              null,
+              boundary.nodes,
+              boundary.slots,
+              error,
+              task,
+              segment,
+              !0
+            ));
+          request.pendingRootTasks--;
+          0 === request.pendingRootTasks && completeShell(request);
+        }
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            ((boundary.status = CLIENT_RENDERED),
+            (task = logRecoverableError(request, error, segment, null)),
+            (boundary.status = CLIENT_RENDERED),
+            encodeErrorForBoundary(boundary, task, error, segment, !0),
+            untrackBoundary(request, boundary),
+            boundary.parentFlushed &&
+              request.clientRenderedBoundaries.push(boundary)),
+          boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+            return abortTask(fallbackTask, request, error);
+          }),
+          boundary.fallbackAbortableTasks.clear();
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function safelyEmitEarlyPreloads(request, shellComplete) {
+      try {
+        var renderState = request.renderState,
+          onHeaders = renderState.onHeaders;
+        if (onHeaders) {
+          var headers = renderState.headers;
+          if (headers) {
+            renderState.headers = null;
+            var linkHeader = headers.preconnects;
+            headers.fontPreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.fontPreloads));
+            headers.highImagePreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.highImagePreloads));
+            if (!shellComplete) {
+              var queueIter = renderState.styles.values(),
+                queueStep = queueIter.next();
+              b: for (
+                ;
+                0 < headers.remainingCapacity && !queueStep.done;
+                queueStep = queueIter.next()
+              )
+                for (
+                  var sheetIter = queueStep.value.sheets.values(),
+                    sheetStep = sheetIter.next();
+                  0 < headers.remainingCapacity && !sheetStep.done;
+                  sheetStep = sheetIter.next()
+                ) {
+                  var sheet = sheetStep.value,
+                    props = sheet.props,
+                    key = props.href,
+                    props$jscomp$0 = sheet.props;
+                  var header = getPreloadAsHeader(
+                    props$jscomp$0.href,
+                    "style",
+                    {
+                      crossOrigin: props$jscomp$0.crossOrigin,
+                      integrity: props$jscomp$0.integrity,
+                      nonce: props$jscomp$0.nonce,
+                      type: props$jscomp$0.type,
+                      fetchPriority: props$jscomp$0.fetchPriority,
+                      referrerPolicy: props$jscomp$0.referrerPolicy,
+                      media: props$jscomp$0.media
+                    }
+                  );
+                  if (0 <= (headers.remainingCapacity -= header.length + 2))
+                    (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                      linkHeader && (linkHeader += ", "),
+                      (linkHeader += header),
+                      (renderState.resets.style[key] =
+                        "string" === typeof props.crossOrigin ||
+                        "string" === typeof props.integrity
+                          ? [props.crossOrigin, props.integrity]
+                          : PRELOAD_NO_CREDS);
+                  else break b;
+                }
+            }
+            linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+          }
+        }
+      } catch (error) {
+        logRecoverableError(request, error, {}, null);
+      }
+    }
+    function completeShell(request) {
+      null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+      null === request.trackedPostpones && preparePreamble(request);
+      request.onShellError = noop;
+      request = request.onShellReady;
+      request();
+    }
+    function completeAll(request) {
+      safelyEmitEarlyPreloads(
+        request,
+        null === request.trackedPostpones
+          ? !0
+          : null === request.completedRootSegment ||
+              request.completedRootSegment.status !== POSTPONED
+      );
+      preparePreamble(request);
+      request = request.onAllReady;
+      request();
+    }
+    function queueCompletedSegment(boundary, segment) {
+      if (
+        0 === segment.chunks.length &&
+        1 === segment.children.length &&
+        null === segment.children[0].boundary &&
+        -1 === segment.children[0].id
+      ) {
+        var childSegment = segment.children[0];
+        childSegment.id = segment.id;
+        childSegment.parentFlushed = !0;
+        childSegment.status === COMPLETED &&
+          queueCompletedSegment(boundary, childSegment);
+      } else boundary.completedSegments.push(segment);
+    }
+    function finishedTask(request, boundary, segment) {
+      if (null === boundary) {
+        if (null !== segment && segment.parentFlushed) {
+          if (null !== request.completedRootSegment)
+            throw Error(
+              "There can only be one root segment. This is a bug in React."
+            );
+          request.completedRootSegment = segment;
+        }
+        request.pendingRootTasks--;
+        0 === request.pendingRootTasks && completeShell(request);
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            (0 === boundary.pendingTasks
+              ? (boundary.status === PENDING && (boundary.status = COMPLETED),
+                null !== segment &&
+                  segment.parentFlushed &&
+                  segment.status === COMPLETED &&
+                  queueCompletedSegment(boundary, segment),
+                boundary.parentFlushed &&
+                  request.completedBoundaries.push(boundary),
+                boundary.status === COMPLETED &&
+                  (boundary.fallbackAbortableTasks.forEach(
+                    abortTaskSoft,
+                    request
+                  ),
+                  boundary.fallbackAbortableTasks.clear(),
+                  0 === request.pendingRootTasks &&
+                    null === request.trackedPostpones &&
+                    null !== boundary.contentPreamble &&
+                    preparePreamble(request)))
+              : null !== segment &&
+                segment.parentFlushed &&
+                segment.status === COMPLETED &&
+                (queueCompletedSegment(boundary, segment),
+                1 === boundary.completedSegments.length &&
+                  boundary.parentFlushed &&
+                  request.partialBoundaries.push(boundary)));
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function performWork(request$jscomp$2) {
+      if (
+        request$jscomp$2.status !== CLOSED &&
+        13 !== request$jscomp$2.status
+      ) {
+        var prevContext = currentActiveSnapshot,
+          prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = HooksDispatcher;
+        var prevAsyncDispatcher = ReactSharedInternals.A;
+        ReactSharedInternals.A = DefaultAsyncDispatcher;
+        var prevRequest = currentRequest;
+        currentRequest = request$jscomp$2;
+        var prevGetCurrentStackImpl = ReactSharedInternals.getCurrentStack;
+        ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;
+        var prevResumableState = currentResumableState;
+        currentResumableState = request$jscomp$2.resumableState;
+        try {
+          var pingedTasks = request$jscomp$2.pingedTasks,
+            i;
+          for (i = 0; i < pingedTasks.length; i++) {
+            var request = request$jscomp$2,
+              task = pingedTasks[i],
+              segment = task.blockedSegment;
+            if (null === segment) {
+              var prevTaskInDEV = void 0,
+                request$jscomp$0 = request;
+              request = task;
+              if (0 !== request.replay.pendingTasks) {
+                switchContext(request.context);
+                prevTaskInDEV = currentTaskInDEV;
+                currentTaskInDEV = request;
+                try {
+                  "number" === typeof request.replay.slots
+                    ? resumeNode(
+                        request$jscomp$0,
+                        request,
+                        request.replay.slots,
+                        request.node,
+                        request.childIndex
+                      )
+                    : retryNode(request$jscomp$0, request);
+                  if (
+                    1 === request.replay.pendingTasks &&
+                    0 < request.replay.nodes.length
+                  )
+                    throw Error(
+                      "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                    );
+                  request.replay.pendingTasks--;
+                  request.abortSet.delete(request);
+                  finishedTask(request$jscomp$0, request.blockedBoundary, null);
+                } catch (thrownValue) {
+                  resetHooksState();
+                  var x =
+                    thrownValue === SuspenseException
+                      ? getSuspendedThenable()
+                      : thrownValue;
+                  if (
+                    "object" === typeof x &&
+                    null !== x &&
+                    "function" === typeof x.then
+                  ) {
+                    var ping = request.ping;
+                    x.then(ping, ping);
+                    request.thenableState = getThenableStateAfterSuspending();
+                  } else {
+                    request.replay.pendingTasks--;
+                    request.abortSet.delete(request);
+                    var errorInfo = getThrownInfo(request.componentStack),
+                      errorDigest = void 0,
+                      request$jscomp$1 = request$jscomp$0,
+                      boundary = request.blockedBoundary,
+                      error$jscomp$0 =
+                        12 === request$jscomp$0.status
+                          ? request$jscomp$0.fatalError
+                          : x,
+                      errorInfo$jscomp$0 = errorInfo,
+                      replayNodes = request.replay.nodes,
+                      resumeSlots = request.replay.slots;
+                    errorDigest = logRecoverableError(
+                      request$jscomp$1,
+                      error$jscomp$0,
+                      errorInfo$jscomp$0,
+                      request.debugTask
+                    );
+                    abortRemainingReplayNodes(
+                      request$jscomp$1,
+                      boundary,
+                      replayNodes,
+                      resumeSlots,
+                      error$jscomp$0,
+                      errorDigest,
+                      errorInfo$jscomp$0,
+                      !1
+                    );
+                    request$jscomp$0.pendingRootTasks--;
+                    0 === request$jscomp$0.pendingRootTasks &&
+                      completeShell(request$jscomp$0);
+                    request$jscomp$0.allPendingTasks--;
+                    0 === request$jscomp$0.allPendingTasks &&
+                      completeAll(request$jscomp$0);
+                  }
+                } finally {
+                  currentTaskInDEV = prevTaskInDEV;
+                }
+              }
+            } else if (
+              ((request$jscomp$0 = prevTaskInDEV = void 0),
+              (errorDigest = task),
+              (request$jscomp$1 = segment),
+              request$jscomp$1.status === PENDING)
+            ) {
+              request$jscomp$1.status = 6;
+              switchContext(errorDigest.context);
+              request$jscomp$0 = currentTaskInDEV;
+              currentTaskInDEV = errorDigest;
+              var childrenLength = request$jscomp$1.children.length,
+                chunkLength = request$jscomp$1.chunks.length;
+              try {
+                retryNode(request, errorDigest),
+                  pushSegmentFinale(
+                    request$jscomp$1.chunks,
+                    request.renderState,
+                    request$jscomp$1.lastPushedText,
+                    request$jscomp$1.textEmbedded
+                  ),
+                  errorDigest.abortSet.delete(errorDigest),
+                  (request$jscomp$1.status = COMPLETED),
+                  finishedTask(
+                    request,
+                    errorDigest.blockedBoundary,
+                    request$jscomp$1
+                  );
+              } catch (thrownValue) {
+                resetHooksState();
+                request$jscomp$1.children.length = childrenLength;
+                request$jscomp$1.chunks.length = chunkLength;
+                var x$jscomp$0 =
+                  thrownValue === SuspenseException
+                    ? getSuspendedThenable()
+                    : 12 === request.status
+                      ? request.fatalError
+                      : thrownValue;
+                if (
+                  "object" === typeof x$jscomp$0 &&
+                  null !== x$jscomp$0 &&
+                  "function" === typeof x$jscomp$0.then
+                ) {
+                  request$jscomp$1.status = PENDING;
+                  errorDigest.thenableState = getThenableStateAfterSuspending();
+                  var ping$jscomp$0 = errorDigest.ping;
+                  x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+                } else {
+                  var errorInfo$jscomp$1 = getThrownInfo(
+                    errorDigest.componentStack
+                  );
+                  errorDigest.abortSet.delete(errorDigest);
+                  request$jscomp$1.status = 4;
+                  var boundary$jscomp$0 = errorDigest.blockedBoundary,
+                    debugTask = errorDigest.debugTask;
+                  prevTaskInDEV = logRecoverableError(
+                    request,
+                    x$jscomp$0,
+                    errorInfo$jscomp$1,
+                    debugTask
+                  );
+                  null === boundary$jscomp$0
+                    ? fatalError(
+                        request,
+                        x$jscomp$0,
+                        errorInfo$jscomp$1,
+                        debugTask
+                      )
+                    : (boundary$jscomp$0.pendingTasks--,
+                      boundary$jscomp$0.status !== CLIENT_RENDERED &&
+                        ((boundary$jscomp$0.status = CLIENT_RENDERED),
+                        encodeErrorForBoundary(
+                          boundary$jscomp$0,
+                          prevTaskInDEV,
+                          x$jscomp$0,
+                          errorInfo$jscomp$1,
+                          !1
+                        ),
+                        untrackBoundary(request, boundary$jscomp$0),
+                        boundary$jscomp$0.parentFlushed &&
+                          request.clientRenderedBoundaries.push(
+                            boundary$jscomp$0
+                          ),
+                        0 === request.pendingRootTasks &&
+                          null === request.trackedPostpones &&
+                          null !== boundary$jscomp$0.contentPreamble &&
+                          preparePreamble(request)));
+                  request.allPendingTasks--;
+                  0 === request.allPendingTasks && completeAll(request);
+                }
+              } finally {
+                currentTaskInDEV = request$jscomp$0;
+              }
+            }
+          }
+          pingedTasks.splice(0, i);
+          null !== request$jscomp$2.destination &&
+            flushCompletedQueues(
+              request$jscomp$2,
+              request$jscomp$2.destination
+            );
+        } catch (error) {
+          (pingedTasks = {}),
+            logRecoverableError(request$jscomp$2, error, pingedTasks, null),
+            fatalError(request$jscomp$2, error, pingedTasks, null);
+        } finally {
+          (currentResumableState = prevResumableState),
+            (ReactSharedInternals.H = prevDispatcher),
+            (ReactSharedInternals.A = prevAsyncDispatcher),
+            (ReactSharedInternals.getCurrentStack = prevGetCurrentStackImpl),
+            prevDispatcher === HooksDispatcher && switchContext(prevContext),
+            (currentRequest = prevRequest);
+        }
+      }
+    }
+    function preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      segment.preambleChildren.length &&
+        collectedPreambleSegments.push(segment.preambleChildren);
+      for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+        pendingPreambles =
+          preparePreambleFromSegment(
+            request,
+            segment.children[i],
+            collectedPreambleSegments
+          ) || pendingPreambles;
+      return pendingPreambles;
+    }
+    function preparePreambleFromSegment(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return preparePreambleFromSubtree(
+          request,
+          segment,
+          collectedPreambleSegments
+        );
+      var preamble = boundary.contentPreamble,
+        fallbackPreamble = boundary.fallbackPreamble;
+      if (null === preamble || null === fallbackPreamble) return !1;
+      switch (boundary.status) {
+        case COMPLETED:
+          hoistPreambleState(request.renderState, preamble);
+          segment = boundary.completedSegments[0];
+          if (!segment)
+            throw Error(
+              "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+            );
+          return preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          );
+        case POSTPONED:
+          if (null !== request.trackedPostpones) return !0;
+        case CLIENT_RENDERED:
+          if (segment.status === COMPLETED)
+            return (
+              hoistPreambleState(request.renderState, fallbackPreamble),
+              preparePreambleFromSubtree(
+                request,
+                segment,
+                collectedPreambleSegments
+              )
+            );
+        default:
+          return !0;
+      }
+    }
+    function preparePreamble(request) {
+      if (
+        request.completedRootSegment &&
+        null === request.completedPreambleSegments
+      ) {
+        var collectedPreambleSegments = [],
+          hasPendingPreambles = preparePreambleFromSegment(
+            request,
+            request.completedRootSegment,
+            collectedPreambleSegments
+          ),
+          preamble = request.renderState.preamble;
+        if (
+          !1 === hasPendingPreambles ||
+          (preamble.headChunks && preamble.bodyChunks)
+        )
+          request.completedPreambleSegments = collectedPreambleSegments;
+      }
+    }
+    function flushSubtree(request, destination, segment, hoistableState) {
+      segment.parentFlushed = !0;
+      switch (segment.status) {
+        case PENDING:
+          segment.id = request.nextSegmentId++;
+        case POSTPONED:
+          return (
+            (hoistableState = segment.id),
+            (segment.lastPushedText = !1),
+            (segment.textEmbedded = !1),
+            (request = request.renderState),
+            destination.push(placeholder1),
+            destination.push(request.placeholderPrefix),
+            (request = hoistableState.toString(16)),
+            destination.push(request),
+            destination.push(placeholder2)
+          );
+        case COMPLETED:
+          segment.status = FLUSHED;
+          var r = !0,
+            chunks = segment.chunks,
+            chunkIdx = 0;
+          segment = segment.children;
+          for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+            for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+              destination.push(chunks[chunkIdx]);
+            r = flushSegment(request, destination, r, hoistableState);
+          }
+          for (; chunkIdx < chunks.length - 1; chunkIdx++)
+            destination.push(chunks[chunkIdx]);
+          chunkIdx < chunks.length && (r = destination.push(chunks[chunkIdx]));
+          return r;
+        default:
+          throw Error(
+            "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+          );
+      }
+    }
+    function flushSegment(request, destination, segment, hoistableState) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return flushSubtree(request, destination, segment, hoistableState);
+      boundary.parentFlushed = !0;
+      if (boundary.status === CLIENT_RENDERED) {
+        if (!request.renderState.generateStaticMarkup) {
+          var errorDigest = boundary.errorDigest,
+            errorMessage = boundary.errorMessage,
+            errorStack = boundary.errorStack,
+            errorComponentStack = boundary.errorComponentStack;
+          destination.push(startClientRenderedSuspenseBoundary);
+          destination.push(clientRenderedSuspenseBoundaryError1);
+          errorDigest &&
+            (destination.push(clientRenderedSuspenseBoundaryError1A),
+            (errorDigest = escapeTextForBrowser(errorDigest)),
+            destination.push(errorDigest),
+            destination.push(
+              clientRenderedSuspenseBoundaryErrorAttrInterstitial
+            ));
+          errorMessage &&
+            (destination.push(clientRenderedSuspenseBoundaryError1B),
+            (errorMessage = escapeTextForBrowser(errorMessage)),
+            destination.push(errorMessage),
+            destination.push(
+              clientRenderedSuspenseBoundaryErrorAttrInterstitial
+            ));
+          errorStack &&
+            (destination.push(clientRenderedSuspenseBoundaryError1C),
+            (errorStack = escapeTextForBrowser(errorStack)),
+            destination.push(errorStack),
+            destination.push(
+              clientRenderedSuspenseBoundaryErrorAttrInterstitial
+            ));
+          errorComponentStack &&
+            (destination.push(clientRenderedSuspenseBoundaryError1D),
+            (errorComponentStack = escapeTextForBrowser(errorComponentStack)),
+            destination.push(errorComponentStack),
+            destination.push(
+              clientRenderedSuspenseBoundaryErrorAttrInterstitial
+            ));
+          destination.push(clientRenderedSuspenseBoundaryError2);
+        }
+        flushSubtree(request, destination, segment, hoistableState);
+        request.renderState.generateStaticMarkup
+          ? (destination = !0)
+          : ((request = boundary.fallbackPreamble) &&
+              writePreambleContribution(destination, request),
+            (destination = destination.push(endSuspenseBoundary)));
+        return destination;
+      }
+      if (boundary.status !== COMPLETED)
+        return (
+          boundary.status === PENDING &&
+            (boundary.rootSegmentID = request.nextSegmentId++),
+          0 < boundary.completedSegments.length &&
+            request.partialBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          hoistableState &&
+            ((boundary = boundary.fallbackState),
+            boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+            boundary.stylesheets.forEach(
+              hoistStylesheetDependency,
+              hoistableState
+            )),
+          flushSubtree(request, destination, segment, hoistableState),
+          destination.push(endSuspenseBoundary)
+        );
+      if (boundary.byteSize > request.progressiveChunkSize)
+        return (
+          (boundary.rootSegmentID = request.nextSegmentId++),
+          request.completedBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          flushSubtree(request, destination, segment, hoistableState),
+          destination.push(endSuspenseBoundary)
+        );
+      hoistableState &&
+        ((segment = boundary.contentState),
+        segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+      request.renderState.generateStaticMarkup ||
+        destination.push(startCompletedSuspenseBoundary);
+      segment = boundary.completedSegments;
+      if (1 !== segment.length)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      flushSegment(request, destination, segment[0], hoistableState);
+      request.renderState.generateStaticMarkup
+        ? (destination = !0)
+        : ((request = boundary.contentPreamble) &&
+            writePreambleContribution(destination, request),
+          (destination = destination.push(endSuspenseBoundary)));
+      return destination;
+    }
+    function flushSegmentContainer(
+      request,
+      destination,
+      segment,
+      hoistableState
+    ) {
+      writeStartSegment(
+        destination,
+        request.renderState,
+        segment.parentFormatContext,
+        segment.id
+      );
+      flushSegment(request, destination, segment, hoistableState);
+      return writeEndSegment(destination, segment.parentFormatContext);
+    }
+    function flushCompletedBoundary(request, destination, boundary) {
+      for (
+        var completedSegments = boundary.completedSegments, i = 0;
+        i < completedSegments.length;
+        i++
+      )
+        flushPartiallyCompletedSegment(
+          request,
+          destination,
+          boundary,
+          completedSegments[i]
+        );
+      completedSegments.length = 0;
+      writeHoistablesForBoundary(
+        destination,
+        boundary.contentState,
+        request.renderState
+      );
+      completedSegments = request.resumableState;
+      request = request.renderState;
+      i = boundary.rootSegmentID;
+      boundary = boundary.contentState;
+      var requiresStyleInsertion = request.stylesToHoist;
+      request.stylesToHoist = !1;
+      destination.push(request.startInlineScript);
+      requiresStyleInsertion
+        ? (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+          NothingSent
+          ? ((completedSegments.instructions =
+              completedSegments.instructions |
+              SentStyleInsertionFunction |
+              SentCompleteBoundaryFunction),
+            destination.push(completeBoundaryWithStylesScript1FullBoth))
+          : (completedSegments.instructions & SentStyleInsertionFunction) ===
+              NothingSent
+            ? ((completedSegments.instructions |= SentStyleInsertionFunction),
+              destination.push(completeBoundaryWithStylesScript1FullPartial))
+            : destination.push(completeBoundaryWithStylesScript1Partial)
+        : (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+            NothingSent
+          ? ((completedSegments.instructions |= SentCompleteBoundaryFunction),
+            destination.push(completeBoundaryScript1Full))
+          : destination.push(completeBoundaryScript1Partial);
+      completedSegments = i.toString(16);
+      destination.push(request.boundaryPrefix);
+      destination.push(completedSegments);
+      destination.push(completeBoundaryScript2);
+      destination.push(request.segmentPrefix);
+      destination.push(completedSegments);
+      requiresStyleInsertion
+        ? (destination.push(completeBoundaryScript3a),
+          writeStyleResourceDependenciesInJS(destination, boundary))
+        : destination.push(completeBoundaryScript3b);
+      boundary = destination.push(completeBoundaryScriptEnd);
+      return writeBootstrap(destination, request) && boundary;
+    }
+    function flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      segment
+    ) {
+      if (segment.status === FLUSHED) return !0;
+      var hoistableState = boundary.contentState,
+        segmentID = segment.id;
+      if (-1 === segmentID) {
+        if (-1 === (segment.id = boundary.rootSegmentID))
+          throw Error(
+            "A root segment ID must have been assigned by now. This is a bug in React."
+          );
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      }
+      if (segmentID === boundary.rootSegmentID)
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      flushSegmentContainer(request, destination, segment, hoistableState);
+      boundary = request.resumableState;
+      request = request.renderState;
+      destination.push(request.startInlineScript);
+      (boundary.instructions & SentCompleteSegmentFunction) === NothingSent
+        ? ((boundary.instructions |= SentCompleteSegmentFunction),
+          destination.push(completeSegmentScript1Full))
+        : destination.push(completeSegmentScript1Partial);
+      destination.push(request.segmentPrefix);
+      segmentID = segmentID.toString(16);
+      destination.push(segmentID);
+      destination.push(completeSegmentScript2);
+      destination.push(request.placeholderPrefix);
+      destination.push(segmentID);
+      destination = destination.push(completeSegmentScriptEnd);
+      return destination;
+    }
+    function flushCompletedQueues(request, destination) {
+      try {
+        if (!(0 < request.pendingRootTasks)) {
+          var i,
+            completedRootSegment = request.completedRootSegment;
+          if (null !== completedRootSegment) {
+            if (completedRootSegment.status === POSTPONED) return;
+            var completedPreambleSegments = request.completedPreambleSegments;
+            if (null === completedPreambleSegments) return;
+            var renderState = request.renderState,
+              preamble = renderState.preamble,
+              htmlChunks = preamble.htmlChunks,
+              headChunks = preamble.headChunks,
+              i$jscomp$0;
+            if (htmlChunks) {
+              for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+                destination.push(htmlChunks[i$jscomp$0]);
+              if (headChunks)
+                for (
+                  i$jscomp$0 = 0;
+                  i$jscomp$0 < headChunks.length;
+                  i$jscomp$0++
+                )
+                  destination.push(headChunks[i$jscomp$0]);
+              else {
+                var chunk = startChunkForTag("head");
+                destination.push(chunk);
+                destination.push(endOfStartTag);
+              }
+            } else if (headChunks)
+              for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+                destination.push(headChunks[i$jscomp$0]);
+            var charsetChunks = renderState.charsetChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < charsetChunks.length;
+              i$jscomp$0++
+            )
+              destination.push(charsetChunks[i$jscomp$0]);
+            charsetChunks.length = 0;
+            renderState.preconnects.forEach(flushResource, destination);
+            renderState.preconnects.clear();
+            var viewportChunks = renderState.viewportChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < viewportChunks.length;
+              i$jscomp$0++
+            )
+              destination.push(viewportChunks[i$jscomp$0]);
+            viewportChunks.length = 0;
+            renderState.fontPreloads.forEach(flushResource, destination);
+            renderState.fontPreloads.clear();
+            renderState.highImagePreloads.forEach(flushResource, destination);
+            renderState.highImagePreloads.clear();
+            renderState.styles.forEach(flushStylesInPreamble, destination);
+            var importMapChunks = renderState.importMapChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < importMapChunks.length;
+              i$jscomp$0++
+            )
+              destination.push(importMapChunks[i$jscomp$0]);
+            importMapChunks.length = 0;
+            renderState.bootstrapScripts.forEach(flushResource, destination);
+            renderState.scripts.forEach(flushResource, destination);
+            renderState.scripts.clear();
+            renderState.bulkPreloads.forEach(flushResource, destination);
+            renderState.bulkPreloads.clear();
+            var hoistableChunks = renderState.hoistableChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < hoistableChunks.length;
+              i$jscomp$0++
+            )
+              destination.push(hoistableChunks[i$jscomp$0]);
+            for (
+              renderState = hoistableChunks.length = 0;
+              renderState < completedPreambleSegments.length;
+              renderState++
+            ) {
+              var segments = completedPreambleSegments[renderState];
+              for (preamble = 0; preamble < segments.length; preamble++)
+                flushSegment(request, destination, segments[preamble], null);
+            }
+            var preamble$jscomp$0 = request.renderState.preamble,
+              headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+            if (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) {
+              var chunk$jscomp$0 = endChunkForTag("head");
+              destination.push(chunk$jscomp$0);
+            }
+            var bodyChunks = preamble$jscomp$0.bodyChunks;
+            if (bodyChunks)
+              for (
+                completedPreambleSegments = 0;
+                completedPreambleSegments < bodyChunks.length;
+                completedPreambleSegments++
+              )
+                destination.push(bodyChunks[completedPreambleSegments]);
+            flushSegment(request, destination, completedRootSegment, null);
+            request.completedRootSegment = null;
+            writeBootstrap(destination, request.renderState);
+          }
+          var renderState$jscomp$0 = request.renderState;
+          completedRootSegment = 0;
+          var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < viewportChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            destination.push(viewportChunks$jscomp$0[completedRootSegment]);
+          viewportChunks$jscomp$0.length = 0;
+          renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+          renderState$jscomp$0.preconnects.clear();
+          renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.fontPreloads.clear();
+          renderState$jscomp$0.highImagePreloads.forEach(
+            flushResource,
+            destination
+          );
+          renderState$jscomp$0.highImagePreloads.clear();
+          renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+          renderState$jscomp$0.scripts.forEach(flushResource, destination);
+          renderState$jscomp$0.scripts.clear();
+          renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.bulkPreloads.clear();
+          var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < hoistableChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            destination.push(hoistableChunks$jscomp$0[completedRootSegment]);
+          hoistableChunks$jscomp$0.length = 0;
+          var clientRenderedBoundaries = request.clientRenderedBoundaries;
+          for (i = 0; i < clientRenderedBoundaries.length; i++) {
+            var boundary = clientRenderedBoundaries[i];
+            renderState$jscomp$0 = destination;
+            var resumableState = request.resumableState,
+              renderState$jscomp$1 = request.renderState,
+              id = boundary.rootSegmentID,
+              errorDigest = boundary.errorDigest,
+              errorMessage = boundary.errorMessage,
+              errorStack = boundary.errorStack,
+              errorComponentStack = boundary.errorComponentStack;
+            renderState$jscomp$0.push(renderState$jscomp$1.startInlineScript);
+            (resumableState.instructions & SentClientRenderFunction) ===
+            NothingSent
+              ? ((resumableState.instructions |= SentClientRenderFunction),
+                renderState$jscomp$0.push(clientRenderScript1Full))
+              : renderState$jscomp$0.push(clientRenderScript1Partial);
+            renderState$jscomp$0.push(renderState$jscomp$1.boundaryPrefix);
+            var chunk$jscomp$1 = id.toString(16);
+            renderState$jscomp$0.push(chunk$jscomp$1);
+            renderState$jscomp$0.push(clientRenderScript1A);
+            if (
+              errorDigest ||
+              errorMessage ||
+              errorStack ||
+              errorComponentStack
+            ) {
+              renderState$jscomp$0.push(clientRenderErrorScriptArgInterstitial);
+              var chunk$jscomp$2 = escapeJSStringsForInstructionScripts(
+                errorDigest || ""
+              );
+              renderState$jscomp$0.push(chunk$jscomp$2);
+            }
+            if (errorMessage || errorStack || errorComponentStack) {
+              renderState$jscomp$0.push(clientRenderErrorScriptArgInterstitial);
+              var chunk$jscomp$3 = escapeJSStringsForInstructionScripts(
+                errorMessage || ""
+              );
+              renderState$jscomp$0.push(chunk$jscomp$3);
+            }
+            if (errorStack || errorComponentStack) {
+              renderState$jscomp$0.push(clientRenderErrorScriptArgInterstitial);
+              var chunk$jscomp$4 = escapeJSStringsForInstructionScripts(
+                errorStack || ""
+              );
+              renderState$jscomp$0.push(chunk$jscomp$4);
+            }
+            if (errorComponentStack) {
+              renderState$jscomp$0.push(clientRenderErrorScriptArgInterstitial);
+              var chunk$jscomp$5 =
+                escapeJSStringsForInstructionScripts(errorComponentStack);
+              renderState$jscomp$0.push(chunk$jscomp$5);
+            }
+            var JSCompiler_inline_result = renderState$jscomp$0.push(
+              clientRenderScriptEnd
+            );
+            if (!JSCompiler_inline_result) {
+              request.destination = null;
+              i++;
+              clientRenderedBoundaries.splice(0, i);
+              return;
+            }
+          }
+          clientRenderedBoundaries.splice(0, i);
+          var completedBoundaries = request.completedBoundaries;
+          for (i = 0; i < completedBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(
+                request,
+                destination,
+                completedBoundaries[i]
+              )
+            ) {
+              request.destination = null;
+              i++;
+              completedBoundaries.splice(0, i);
+              return;
+            }
+          completedBoundaries.splice(0, i);
+          var partialBoundaries = request.partialBoundaries;
+          for (i = 0; i < partialBoundaries.length; i++) {
+            a: {
+              clientRenderedBoundaries = request;
+              boundary = destination;
+              var boundary$jscomp$0 = partialBoundaries[i],
+                completedSegments = boundary$jscomp$0.completedSegments;
+              for (
+                JSCompiler_inline_result = 0;
+                JSCompiler_inline_result < completedSegments.length;
+                JSCompiler_inline_result++
+              )
+                if (
+                  !flushPartiallyCompletedSegment(
+                    clientRenderedBoundaries,
+                    boundary,
+                    boundary$jscomp$0,
+                    completedSegments[JSCompiler_inline_result]
+                  )
+                ) {
+                  JSCompiler_inline_result++;
+                  completedSegments.splice(0, JSCompiler_inline_result);
+                  var JSCompiler_inline_result$jscomp$0 = !1;
+                  break a;
+                }
+              completedSegments.splice(0, JSCompiler_inline_result);
+              JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+                boundary,
+                boundary$jscomp$0.contentState,
+                clientRenderedBoundaries.renderState
+              );
+            }
+            if (!JSCompiler_inline_result$jscomp$0) {
+              request.destination = null;
+              i++;
+              partialBoundaries.splice(0, i);
+              return;
+            }
+          }
+          partialBoundaries.splice(0, i);
+          var largeBoundaries = request.completedBoundaries;
+          for (i = 0; i < largeBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(request, destination, largeBoundaries[i])
+            ) {
+              request.destination = null;
+              i++;
+              largeBoundaries.splice(0, i);
+              return;
+            }
+          largeBoundaries.splice(0, i);
+        }
+      } finally {
+        0 === request.allPendingTasks &&
+          0 === request.pingedTasks.length &&
+          0 === request.clientRenderedBoundaries.length &&
+          0 === request.completedBoundaries.length &&
+          ((request.flushScheduled = !1),
+          (i = request.resumableState),
+          i.hasBody &&
+            ((partialBoundaries = endChunkForTag("body")),
+            destination.push(partialBoundaries)),
+          i.hasHtml && ((i = endChunkForTag("html")), destination.push(i)),
+          0 !== request.abortableTasks.size &&
+            console.error(
+              "There was still abortable task at the root when we closed. This is a bug in React."
+            ),
+          (request.status = CLOSED),
+          destination.push(null),
+          (request.destination = null));
+      }
+    }
+    function startWork(request) {
+      request.flushScheduled = null !== request.destination;
+      performWork(request);
+      10 === request.status && (request.status = 11);
+      null === request.trackedPostpones &&
+        safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+    }
+    function enqueueFlush(request) {
+      if (
+        !1 === request.flushScheduled &&
+        0 === request.pingedTasks.length &&
+        null !== request.destination
+      ) {
+        request.flushScheduled = !0;
+        var destination = request.destination;
+        destination
+          ? flushCompletedQueues(request, destination)
+          : (request.flushScheduled = !1);
+      }
+    }
+    function startFlowing(request, destination) {
+      if (13 === request.status)
+        (request.status = CLOSED), destination.destroy(request.fatalError);
+      else if (request.status !== CLOSED && null === request.destination) {
+        request.destination = destination;
+        try {
+          flushCompletedQueues(request, destination);
+        } catch (error) {
+          (destination = {}),
+            logRecoverableError(request, error, destination, null),
+            fatalError(request, error, destination, null);
+        }
+      }
+    }
+    function abort(request, reason) {
+      if (11 === request.status || 10 === request.status) request.status = 12;
+      try {
+        var abortableTasks = request.abortableTasks;
+        if (0 < abortableTasks.size) {
+          var error =
+            void 0 === reason
+              ? Error("The render was aborted by the server without a reason.")
+              : "object" === typeof reason &&
+                  null !== reason &&
+                  "function" === typeof reason.then
+                ? Error("The render was aborted by the server with a promise.")
+                : reason;
+          request.fatalError = error;
+          abortableTasks.forEach(function (task) {
+            return abortTask(task, request, error);
+          });
+          abortableTasks.clear();
+        }
+        null !== request.destination &&
+          flushCompletedQueues(request, request.destination);
+      } catch (error$4) {
+        (reason = {}),
+          logRecoverableError(request, error$4, reason, null),
+          fatalError(request, error$4, reason, null);
+      }
+    }
+    function onError() {}
+    function renderToStringImpl(
+      children,
+      options,
+      generateStaticMarkup,
+      abortReason
+    ) {
+      var didFatal = !1,
+        fatalError = null,
+        result = "",
+        readyToStream = !1;
+      options = createResumableState(
+        options ? options.identifierPrefix : void 0
+      );
+      children = createRequest(
+        children,
+        options,
+        createRenderState(options, generateStaticMarkup),
+        createFormatContext(ROOT_HTML_MODE, null, 0),
+        Infinity,
+        onError,
+        void 0,
+        function () {
+          readyToStream = !0;
+        },
+        void 0,
+        void 0,
+        void 0
+      );
+      startWork(children);
+      abort(children, abortReason);
+      startFlowing(children, {
+        push: function (chunk) {
+          null !== chunk && (result += chunk);
+          return !0;
+        },
+        destroy: function (error) {
+          didFatal = !0;
+          fatalError = error;
+        }
+      });
+      if (didFatal && fatalError !== abortReason) throw fatalError;
+      if (!readyToStream)
+        throw Error(
+          "A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition."
+        );
+      return result;
+    }
+    var React = require("react"),
+      ReactDOM = require("react-dom"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+      REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+      REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+      REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+      REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+      MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+      isArrayImpl = Array.isArray,
+      jsxPropsParents = new WeakMap(),
+      jsxChildrenParents = new WeakMap(),
+      CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"),
+      assign = Object.assign,
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+        "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      illegalAttributeNameCache = {},
+      validatedAttributeNameCache = {},
+      unitlessNumbers = new Set(
+        "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+          " "
+        )
+      ),
+      aliases = new Map([
+        ["acceptCharset", "accept-charset"],
+        ["htmlFor", "for"],
+        ["httpEquiv", "http-equiv"],
+        ["crossOrigin", "crossorigin"],
+        ["accentHeight", "accent-height"],
+        ["alignmentBaseline", "alignment-baseline"],
+        ["arabicForm", "arabic-form"],
+        ["baselineShift", "baseline-shift"],
+        ["capHeight", "cap-height"],
+        ["clipPath", "clip-path"],
+        ["clipRule", "clip-rule"],
+        ["colorInterpolation", "color-interpolation"],
+        ["colorInterpolationFilters", "color-interpolation-filters"],
+        ["colorProfile", "color-profile"],
+        ["colorRendering", "color-rendering"],
+        ["dominantBaseline", "dominant-baseline"],
+        ["enableBackground", "enable-background"],
+        ["fillOpacity", "fill-opacity"],
+        ["fillRule", "fill-rule"],
+        ["floodColor", "flood-color"],
+        ["floodOpacity", "flood-opacity"],
+        ["fontFamily", "font-family"],
+        ["fontSize", "font-size"],
+        ["fontSizeAdjust", "font-size-adjust"],
+        ["fontStretch", "font-stretch"],
+        ["fontStyle", "font-style"],
+        ["fontVariant", "font-variant"],
+        ["fontWeight", "font-weight"],
+        ["glyphName", "glyph-name"],
+        ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+        ["glyphOrientationVertical", "glyph-orientation-vertical"],
+        ["horizAdvX", "horiz-adv-x"],
+        ["horizOriginX", "horiz-origin-x"],
+        ["imageRendering", "image-rendering"],
+        ["letterSpacing", "letter-spacing"],
+        ["lightingColor", "lighting-color"],
+        ["markerEnd", "marker-end"],
+        ["markerMid", "marker-mid"],
+        ["markerStart", "marker-start"],
+        ["overlinePosition", "overline-position"],
+        ["overlineThickness", "overline-thickness"],
+        ["paintOrder", "paint-order"],
+        ["panose-1", "panose-1"],
+        ["pointerEvents", "pointer-events"],
+        ["renderingIntent", "rendering-intent"],
+        ["shapeRendering", "shape-rendering"],
+        ["stopColor", "stop-color"],
+        ["stopOpacity", "stop-opacity"],
+        ["strikethroughPosition", "strikethrough-position"],
+        ["strikethroughThickness", "strikethrough-thickness"],
+        ["strokeDasharray", "stroke-dasharray"],
+        ["strokeDashoffset", "stroke-dashoffset"],
+        ["strokeLinecap", "stroke-linecap"],
+        ["strokeLinejoin", "stroke-linejoin"],
+        ["strokeMiterlimit", "stroke-miterlimit"],
+        ["strokeOpacity", "stroke-opacity"],
+        ["strokeWidth", "stroke-width"],
+        ["textAnchor", "text-anchor"],
+        ["textDecoration", "text-decoration"],
+        ["textRendering", "text-rendering"],
+        ["transformOrigin", "transform-origin"],
+        ["underlinePosition", "underline-position"],
+        ["underlineThickness", "underline-thickness"],
+        ["unicodeBidi", "unicode-bidi"],
+        ["unicodeRange", "unicode-range"],
+        ["unitsPerEm", "units-per-em"],
+        ["vAlphabetic", "v-alphabetic"],
+        ["vHanging", "v-hanging"],
+        ["vIdeographic", "v-ideographic"],
+        ["vMathematical", "v-mathematical"],
+        ["vectorEffect", "vector-effect"],
+        ["vertAdvY", "vert-adv-y"],
+        ["vertOriginX", "vert-origin-x"],
+        ["vertOriginY", "vert-origin-y"],
+        ["wordSpacing", "word-spacing"],
+        ["writingMode", "writing-mode"],
+        ["xmlnsXlink", "xmlns:xlink"],
+        ["xHeight", "x-height"]
+      ]),
+      hasReadOnlyValue = {
+        button: !0,
+        checkbox: !0,
+        image: !0,
+        hidden: !0,
+        radio: !0,
+        reset: !0,
+        submit: !0
+      },
+      ariaProperties = {
+        "aria-current": 0,
+        "aria-description": 0,
+        "aria-details": 0,
+        "aria-disabled": 0,
+        "aria-hidden": 0,
+        "aria-invalid": 0,
+        "aria-keyshortcuts": 0,
+        "aria-label": 0,
+        "aria-roledescription": 0,
+        "aria-autocomplete": 0,
+        "aria-checked": 0,
+        "aria-expanded": 0,
+        "aria-haspopup": 0,
+        "aria-level": 0,
+        "aria-modal": 0,
+        "aria-multiline": 0,
+        "aria-multiselectable": 0,
+        "aria-orientation": 0,
+        "aria-placeholder": 0,
+        "aria-pressed": 0,
+        "aria-readonly": 0,
+        "aria-required": 0,
+        "aria-selected": 0,
+        "aria-sort": 0,
+        "aria-valuemax": 0,
+        "aria-valuemin": 0,
+        "aria-valuenow": 0,
+        "aria-valuetext": 0,
+        "aria-atomic": 0,
+        "aria-busy": 0,
+        "aria-live": 0,
+        "aria-relevant": 0,
+        "aria-dropeffect": 0,
+        "aria-grabbed": 0,
+        "aria-activedescendant": 0,
+        "aria-colcount": 0,
+        "aria-colindex": 0,
+        "aria-colspan": 0,
+        "aria-controls": 0,
+        "aria-describedby": 0,
+        "aria-errormessage": 0,
+        "aria-flowto": 0,
+        "aria-labelledby": 0,
+        "aria-owns": 0,
+        "aria-posinset": 0,
+        "aria-rowcount": 0,
+        "aria-rowindex": 0,
+        "aria-rowspan": 0,
+        "aria-setsize": 0
+      },
+      warnedProperties$1 = {},
+      rARIA$1 = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel$1 = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      didWarnValueNull = !1,
+      possibleStandardNames = {
+        accept: "accept",
+        acceptcharset: "acceptCharset",
+        "accept-charset": "acceptCharset",
+        accesskey: "accessKey",
+        action: "action",
+        allowfullscreen: "allowFullScreen",
+        alt: "alt",
+        as: "as",
+        async: "async",
+        autocapitalize: "autoCapitalize",
+        autocomplete: "autoComplete",
+        autocorrect: "autoCorrect",
+        autofocus: "autoFocus",
+        autoplay: "autoPlay",
+        autosave: "autoSave",
+        capture: "capture",
+        cellpadding: "cellPadding",
+        cellspacing: "cellSpacing",
+        challenge: "challenge",
+        charset: "charSet",
+        checked: "checked",
+        children: "children",
+        cite: "cite",
+        class: "className",
+        classid: "classID",
+        classname: "className",
+        cols: "cols",
+        colspan: "colSpan",
+        content: "content",
+        contenteditable: "contentEditable",
+        contextmenu: "contextMenu",
+        controls: "controls",
+        controlslist: "controlsList",
+        coords: "coords",
+        crossorigin: "crossOrigin",
+        dangerouslysetinnerhtml: "dangerouslySetInnerHTML",
+        data: "data",
+        datetime: "dateTime",
+        default: "default",
+        defaultchecked: "defaultChecked",
+        defaultvalue: "defaultValue",
+        defer: "defer",
+        dir: "dir",
+        disabled: "disabled",
+        disablepictureinpicture: "disablePictureInPicture",
+        disableremoteplayback: "disableRemotePlayback",
+        download: "download",
+        draggable: "draggable",
+        enctype: "encType",
+        enterkeyhint: "enterKeyHint",
+        fetchpriority: "fetchPriority",
+        for: "htmlFor",
+        form: "form",
+        formmethod: "formMethod",
+        formaction: "formAction",
+        formenctype: "formEncType",
+        formnovalidate: "formNoValidate",
+        formtarget: "formTarget",
+        frameborder: "frameBorder",
+        headers: "headers",
+        height: "height",
+        hidden: "hidden",
+        high: "high",
+        href: "href",
+        hreflang: "hrefLang",
+        htmlfor: "htmlFor",
+        httpequiv: "httpEquiv",
+        "http-equiv": "httpEquiv",
+        icon: "icon",
+        id: "id",
+        imagesizes: "imageSizes",
+        imagesrcset: "imageSrcSet",
+        inert: "inert",
+        innerhtml: "innerHTML",
+        inputmode: "inputMode",
+        integrity: "integrity",
+        is: "is",
+        itemid: "itemID",
+        itemprop: "itemProp",
+        itemref: "itemRef",
+        itemscope: "itemScope",
+        itemtype: "itemType",
+        keyparams: "keyParams",
+        keytype: "keyType",
+        kind: "kind",
+        label: "label",
+        lang: "lang",
+        list: "list",
+        loop: "loop",
+        low: "low",
+        manifest: "manifest",
+        marginwidth: "marginWidth",
+        marginheight: "marginHeight",
+        max: "max",
+        maxlength: "maxLength",
+        media: "media",
+        mediagroup: "mediaGroup",
+        method: "method",
+        min: "min",
+        minlength: "minLength",
+        multiple: "multiple",
+        muted: "muted",
+        name: "name",
+        nomodule: "noModule",
+        nonce: "nonce",
+        novalidate: "noValidate",
+        open: "open",
+        optimum: "optimum",
+        pattern: "pattern",
+        placeholder: "placeholder",
+        playsinline: "playsInline",
+        poster: "poster",
+        preload: "preload",
+        profile: "profile",
+        radiogroup: "radioGroup",
+        readonly: "readOnly",
+        referrerpolicy: "referrerPolicy",
+        rel: "rel",
+        required: "required",
+        reversed: "reversed",
+        role: "role",
+        rows: "rows",
+        rowspan: "rowSpan",
+        sandbox: "sandbox",
+        scope: "scope",
+        scoped: "scoped",
+        scrolling: "scrolling",
+        seamless: "seamless",
+        selected: "selected",
+        shape: "shape",
+        size: "size",
+        sizes: "sizes",
+        span: "span",
+        spellcheck: "spellCheck",
+        src: "src",
+        srcdoc: "srcDoc",
+        srclang: "srcLang",
+        srcset: "srcSet",
+        start: "start",
+        step: "step",
+        style: "style",
+        summary: "summary",
+        tabindex: "tabIndex",
+        target: "target",
+        title: "title",
+        type: "type",
+        usemap: "useMap",
+        value: "value",
+        width: "width",
+        wmode: "wmode",
+        wrap: "wrap",
+        about: "about",
+        accentheight: "accentHeight",
+        "accent-height": "accentHeight",
+        accumulate: "accumulate",
+        additive: "additive",
+        alignmentbaseline: "alignmentBaseline",
+        "alignment-baseline": "alignmentBaseline",
+        allowreorder: "allowReorder",
+        alphabetic: "alphabetic",
+        amplitude: "amplitude",
+        arabicform: "arabicForm",
+        "arabic-form": "arabicForm",
+        ascent: "ascent",
+        attributename: "attributeName",
+        attributetype: "attributeType",
+        autoreverse: "autoReverse",
+        azimuth: "azimuth",
+        basefrequency: "baseFrequency",
+        baselineshift: "baselineShift",
+        "baseline-shift": "baselineShift",
+        baseprofile: "baseProfile",
+        bbox: "bbox",
+        begin: "begin",
+        bias: "bias",
+        by: "by",
+        calcmode: "calcMode",
+        capheight: "capHeight",
+        "cap-height": "capHeight",
+        clip: "clip",
+        clippath: "clipPath",
+        "clip-path": "clipPath",
+        clippathunits: "clipPathUnits",
+        cliprule: "clipRule",
+        "clip-rule": "clipRule",
+        color: "color",
+        colorinterpolation: "colorInterpolation",
+        "color-interpolation": "colorInterpolation",
+        colorinterpolationfilters: "colorInterpolationFilters",
+        "color-interpolation-filters": "colorInterpolationFilters",
+        colorprofile: "colorProfile",
+        "color-profile": "colorProfile",
+        colorrendering: "colorRendering",
+        "color-rendering": "colorRendering",
+        contentscripttype: "contentScriptType",
+        contentstyletype: "contentStyleType",
+        cursor: "cursor",
+        cx: "cx",
+        cy: "cy",
+        d: "d",
+        datatype: "datatype",
+        decelerate: "decelerate",
+        descent: "descent",
+        diffuseconstant: "diffuseConstant",
+        direction: "direction",
+        display: "display",
+        divisor: "divisor",
+        dominantbaseline: "dominantBaseline",
+        "dominant-baseline": "dominantBaseline",
+        dur: "dur",
+        dx: "dx",
+        dy: "dy",
+        edgemode: "edgeMode",
+        elevation: "elevation",
+        enablebackground: "enableBackground",
+        "enable-background": "enableBackground",
+        end: "end",
+        exponent: "exponent",
+        externalresourcesrequired: "externalResourcesRequired",
+        fill: "fill",
+        fillopacity: "fillOpacity",
+        "fill-opacity": "fillOpacity",
+        fillrule: "fillRule",
+        "fill-rule": "fillRule",
+        filter: "filter",
+        filterres: "filterRes",
+        filterunits: "filterUnits",
+        floodopacity: "floodOpacity",
+        "flood-opacity": "floodOpacity",
+        floodcolor: "floodColor",
+        "flood-color": "floodColor",
+        focusable: "focusable",
+        fontfamily: "fontFamily",
+        "font-family": "fontFamily",
+        fontsize: "fontSize",
+        "font-size": "fontSize",
+        fontsizeadjust: "fontSizeAdjust",
+        "font-size-adjust": "fontSizeAdjust",
+        fontstretch: "fontStretch",
+        "font-stretch": "fontStretch",
+        fontstyle: "fontStyle",
+        "font-style": "fontStyle",
+        fontvariant: "fontVariant",
+        "font-variant": "fontVariant",
+        fontweight: "fontWeight",
+        "font-weight": "fontWeight",
+        format: "format",
+        from: "from",
+        fx: "fx",
+        fy: "fy",
+        g1: "g1",
+        g2: "g2",
+        glyphname: "glyphName",
+        "glyph-name": "glyphName",
+        glyphorientationhorizontal: "glyphOrientationHorizontal",
+        "glyph-orientation-horizontal": "glyphOrientationHorizontal",
+        glyphorientationvertical: "glyphOrientationVertical",
+        "glyph-orientation-vertical": "glyphOrientationVertical",
+        glyphref: "glyphRef",
+        gradienttransform: "gradientTransform",
+        gradientunits: "gradientUnits",
+        hanging: "hanging",
+        horizadvx: "horizAdvX",
+        "horiz-adv-x": "horizAdvX",
+        horizoriginx: "horizOriginX",
+        "horiz-origin-x": "horizOriginX",
+        ideographic: "ideographic",
+        imagerendering: "imageRendering",
+        "image-rendering": "imageRendering",
+        in2: "in2",
+        in: "in",
+        inlist: "inlist",
+        intercept: "intercept",
+        k1: "k1",
+        k2: "k2",
+        k3: "k3",
+        k4: "k4",
+        k: "k",
+        kernelmatrix: "kernelMatrix",
+        kernelunitlength: "kernelUnitLength",
+        kerning: "kerning",
+        keypoints: "keyPoints",
+        keysplines: "keySplines",
+        keytimes: "keyTimes",
+        lengthadjust: "lengthAdjust",
+        letterspacing: "letterSpacing",
+        "letter-spacing": "letterSpacing",
+        lightingcolor: "lightingColor",
+        "lighting-color": "lightingColor",
+        limitingconeangle: "limitingConeAngle",
+        local: "local",
+        markerend: "markerEnd",
+        "marker-end": "markerEnd",
+        markerheight: "markerHeight",
+        markermid: "markerMid",
+        "marker-mid": "markerMid",
+        markerstart: "markerStart",
+        "marker-start": "markerStart",
+        markerunits: "markerUnits",
+        markerwidth: "markerWidth",
+        mask: "mask",
+        maskcontentunits: "maskContentUnits",
+        maskunits: "maskUnits",
+        mathematical: "mathematical",
+        mode: "mode",
+        numoctaves: "numOctaves",
+        offset: "offset",
+        opacity: "opacity",
+        operator: "operator",
+        order: "order",
+        orient: "orient",
+        orientation: "orientation",
+        origin: "origin",
+        overflow: "overflow",
+        overlineposition: "overlinePosition",
+        "overline-position": "overlinePosition",
+        overlinethickness: "overlineThickness",
+        "overline-thickness": "overlineThickness",
+        paintorder: "paintOrder",
+        "paint-order": "paintOrder",
+        panose1: "panose1",
+        "panose-1": "panose1",
+        pathlength: "pathLength",
+        patterncontentunits: "patternContentUnits",
+        patterntransform: "patternTransform",
+        patternunits: "patternUnits",
+        pointerevents: "pointerEvents",
+        "pointer-events": "pointerEvents",
+        points: "points",
+        pointsatx: "pointsAtX",
+        pointsaty: "pointsAtY",
+        pointsatz: "pointsAtZ",
+        popover: "popover",
+        popovertarget: "popoverTarget",
+        popovertargetaction: "popoverTargetAction",
+        prefix: "prefix",
+        preservealpha: "preserveAlpha",
+        preserveaspectratio: "preserveAspectRatio",
+        primitiveunits: "primitiveUnits",
+        property: "property",
+        r: "r",
+        radius: "radius",
+        refx: "refX",
+        refy: "refY",
+        renderingintent: "renderingIntent",
+        "rendering-intent": "renderingIntent",
+        repeatcount: "repeatCount",
+        repeatdur: "repeatDur",
+        requiredextensions: "requiredExtensions",
+        requiredfeatures: "requiredFeatures",
+        resource: "resource",
+        restart: "restart",
+        result: "result",
+        results: "results",
+        rotate: "rotate",
+        rx: "rx",
+        ry: "ry",
+        scale: "scale",
+        security: "security",
+        seed: "seed",
+        shaperendering: "shapeRendering",
+        "shape-rendering": "shapeRendering",
+        slope: "slope",
+        spacing: "spacing",
+        specularconstant: "specularConstant",
+        specularexponent: "specularExponent",
+        speed: "speed",
+        spreadmethod: "spreadMethod",
+        startoffset: "startOffset",
+        stddeviation: "stdDeviation",
+        stemh: "stemh",
+        stemv: "stemv",
+        stitchtiles: "stitchTiles",
+        stopcolor: "stopColor",
+        "stop-color": "stopColor",
+        stopopacity: "stopOpacity",
+        "stop-opacity": "stopOpacity",
+        strikethroughposition: "strikethroughPosition",
+        "strikethrough-position": "strikethroughPosition",
+        strikethroughthickness: "strikethroughThickness",
+        "strikethrough-thickness": "strikethroughThickness",
+        string: "string",
+        stroke: "stroke",
+        strokedasharray: "strokeDasharray",
+        "stroke-dasharray": "strokeDasharray",
+        strokedashoffset: "strokeDashoffset",
+        "stroke-dashoffset": "strokeDashoffset",
+        strokelinecap: "strokeLinecap",
+        "stroke-linecap": "strokeLinecap",
+        strokelinejoin: "strokeLinejoin",
+        "stroke-linejoin": "strokeLinejoin",
+        strokemiterlimit: "strokeMiterlimit",
+        "stroke-miterlimit": "strokeMiterlimit",
+        strokewidth: "strokeWidth",
+        "stroke-width": "strokeWidth",
+        strokeopacity: "strokeOpacity",
+        "stroke-opacity": "strokeOpacity",
+        suppresscontenteditablewarning: "suppressContentEditableWarning",
+        suppresshydrationwarning: "suppressHydrationWarning",
+        surfacescale: "surfaceScale",
+        systemlanguage: "systemLanguage",
+        tablevalues: "tableValues",
+        targetx: "targetX",
+        targety: "targetY",
+        textanchor: "textAnchor",
+        "text-anchor": "textAnchor",
+        textdecoration: "textDecoration",
+        "text-decoration": "textDecoration",
+        textlength: "textLength",
+        textrendering: "textRendering",
+        "text-rendering": "textRendering",
+        to: "to",
+        transform: "transform",
+        transformorigin: "transformOrigin",
+        "transform-origin": "transformOrigin",
+        typeof: "typeof",
+        u1: "u1",
+        u2: "u2",
+        underlineposition: "underlinePosition",
+        "underline-position": "underlinePosition",
+        underlinethickness: "underlineThickness",
+        "underline-thickness": "underlineThickness",
+        unicode: "unicode",
+        unicodebidi: "unicodeBidi",
+        "unicode-bidi": "unicodeBidi",
+        unicoderange: "unicodeRange",
+        "unicode-range": "unicodeRange",
+        unitsperem: "unitsPerEm",
+        "units-per-em": "unitsPerEm",
+        unselectable: "unselectable",
+        valphabetic: "vAlphabetic",
+        "v-alphabetic": "vAlphabetic",
+        values: "values",
+        vectoreffect: "vectorEffect",
+        "vector-effect": "vectorEffect",
+        version: "version",
+        vertadvy: "vertAdvY",
+        "vert-adv-y": "vertAdvY",
+        vertoriginx: "vertOriginX",
+        "vert-origin-x": "vertOriginX",
+        vertoriginy: "vertOriginY",
+        "vert-origin-y": "vertOriginY",
+        vhanging: "vHanging",
+        "v-hanging": "vHanging",
+        videographic: "vIdeographic",
+        "v-ideographic": "vIdeographic",
+        viewbox: "viewBox",
+        viewtarget: "viewTarget",
+        visibility: "visibility",
+        vmathematical: "vMathematical",
+        "v-mathematical": "vMathematical",
+        vocab: "vocab",
+        widths: "widths",
+        wordspacing: "wordSpacing",
+        "word-spacing": "wordSpacing",
+        writingmode: "writingMode",
+        "writing-mode": "writingMode",
+        x1: "x1",
+        x2: "x2",
+        x: "x",
+        xchannelselector: "xChannelSelector",
+        xheight: "xHeight",
+        "x-height": "xHeight",
+        xlinkactuate: "xlinkActuate",
+        "xlink:actuate": "xlinkActuate",
+        xlinkarcrole: "xlinkArcrole",
+        "xlink:arcrole": "xlinkArcrole",
+        xlinkhref: "xlinkHref",
+        "xlink:href": "xlinkHref",
+        xlinkrole: "xlinkRole",
+        "xlink:role": "xlinkRole",
+        xlinkshow: "xlinkShow",
+        "xlink:show": "xlinkShow",
+        xlinktitle: "xlinkTitle",
+        "xlink:title": "xlinkTitle",
+        xlinktype: "xlinkType",
+        "xlink:type": "xlinkType",
+        xmlbase: "xmlBase",
+        "xml:base": "xmlBase",
+        xmllang: "xmlLang",
+        "xml:lang": "xmlLang",
+        xmlns: "xmlns",
+        "xml:space": "xmlSpace",
+        xmlnsxlink: "xmlnsXlink",
+        "xmlns:xlink": "xmlnsXlink",
+        xmlspace: "xmlSpace",
+        y1: "y1",
+        y2: "y2",
+        y: "y",
+        ychannelselector: "yChannelSelector",
+        z: "z",
+        zoomandpan: "zoomAndPan"
+      },
+      warnedProperties = {},
+      EVENT_NAME_REGEX = /^on./,
+      INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,
+      rARIA = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,
+      msPattern$1 = /^-ms-/,
+      hyphenPattern = /-(.)/g,
+      badStyleValueWithSemicolonPattern = /;\s*$/,
+      warnedStyleNames = {},
+      warnedStyleValues = {},
+      warnedForNaNValue = !1,
+      warnedForInfinityValue = !1,
+      matchHtmlRegExp = /["'&<>]/,
+      uppercasePattern = /([A-Z])/g,
+      msPattern = /^ms-/,
+      isJavaScriptProtocol =
+        /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i,
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      ReactDOMSharedInternals =
+        ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      NotPending = Object.freeze({
+        pending: !1,
+        data: null,
+        method: null,
+        action: null
+      }),
+      previousDispatcher = ReactDOMSharedInternals.d;
+    ReactDOMSharedInternals.d = {
+      f: previousDispatcher.f,
+      r: previousDispatcher.r,
+      D: function (href) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            if (!resumableState.dnsResources.hasOwnProperty(href)) {
+              resumableState.dnsResources[href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              )
+                JSCompiler_temp =
+                  ((header =
+                    "<" +
+                    escapeHrefForLinkHeaderURLContext(href) +
+                    ">; rel=dns-prefetch"),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              JSCompiler_temp
+                ? ((renderState.resets.dns[href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((header = []),
+                  pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+                  renderState.preconnects.add(header));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.D(href);
+      },
+      C: function (href, crossOrigin) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            var bucket =
+              "use-credentials" === crossOrigin
+                ? "credentials"
+                : "string" === typeof crossOrigin
+                  ? "anonymous"
+                  : "default";
+            if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+              resumableState.connectResources[bucket][href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              ) {
+                JSCompiler_temp =
+                  "<" +
+                  escapeHrefForLinkHeaderURLContext(href) +
+                  ">; rel=preconnect";
+                if ("string" === typeof crossOrigin) {
+                  var escapedCrossOrigin =
+                    escapeStringForLinkHeaderQuotedParamValueContext(
+                      crossOrigin,
+                      "crossOrigin"
+                    );
+                  JSCompiler_temp +=
+                    '; crossorigin="' + escapedCrossOrigin + '"';
+                }
+                JSCompiler_temp =
+                  ((header = JSCompiler_temp),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              }
+              JSCompiler_temp
+                ? ((renderState.resets.connect[bucket][href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((bucket = []),
+                  pushLinkImpl(bucket, {
+                    rel: "preconnect",
+                    href: href,
+                    crossOrigin: crossOrigin
+                  }),
+                  renderState.preconnects.add(bucket));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.C(href, crossOrigin);
+      },
+      L: function (href, as, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (as && href) {
+            switch (as) {
+              case "image":
+                if (options) {
+                  var imageSrcSet = options.imageSrcSet;
+                  var imageSizes = options.imageSizes;
+                  var fetchPriority = options.fetchPriority;
+                }
+                var key = imageSrcSet
+                  ? imageSrcSet + "\n" + (imageSizes || "")
+                  : href;
+                if (resumableState.imageResources.hasOwnProperty(key)) return;
+                resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+                resumableState = renderState.headers;
+                var header;
+                resumableState &&
+                0 < resumableState.remainingCapacity &&
+                "string" !== typeof imageSrcSet &&
+                "high" === fetchPriority &&
+                ((header = getPreloadAsHeader(href, as, options)),
+                0 <= (resumableState.remainingCapacity -= header.length + 2))
+                  ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+                    resumableState.highImagePreloads &&
+                      (resumableState.highImagePreloads += ", "),
+                    (resumableState.highImagePreloads += header))
+                  : ((resumableState = []),
+                    pushLinkImpl(
+                      resumableState,
+                      assign(
+                        {
+                          rel: "preload",
+                          href: imageSrcSet ? void 0 : href,
+                          as: as
+                        },
+                        options
+                      )
+                    ),
+                    "high" === fetchPriority
+                      ? renderState.highImagePreloads.add(resumableState)
+                      : (renderState.bulkPreloads.add(resumableState),
+                        renderState.preloads.images.set(key, resumableState)));
+                break;
+              case "style":
+                if (resumableState.styleResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.styleResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.stylesheets.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                break;
+              case "script":
+                if (resumableState.scriptResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                renderState.preloads.scripts.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.scriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                break;
+              default:
+                if (resumableState.unknownResources.hasOwnProperty(as)) {
+                  if (
+                    ((imageSrcSet = resumableState.unknownResources[as]),
+                    imageSrcSet.hasOwnProperty(href))
+                  )
+                    return;
+                } else
+                  (imageSrcSet = {}),
+                    (resumableState.unknownResources[as] = imageSrcSet);
+                imageSrcSet[href] = PRELOAD_NO_CREDS;
+                if (
+                  (resumableState = renderState.headers) &&
+                  0 < resumableState.remainingCapacity &&
+                  "font" === as &&
+                  ((key = getPreloadAsHeader(href, as, options)),
+                  0 <= (resumableState.remainingCapacity -= key.length + 2))
+                )
+                  (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+                    resumableState.fontPreloads &&
+                      (resumableState.fontPreloads += ", "),
+                    (resumableState.fontPreloads += key);
+                else
+                  switch (
+                    ((resumableState = []),
+                    (href = assign(
+                      { rel: "preload", href: href, as: as },
+                      options
+                    )),
+                    pushLinkImpl(resumableState, href),
+                    as)
+                  ) {
+                    case "font":
+                      renderState.fontPreloads.add(resumableState);
+                      break;
+                    default:
+                      renderState.bulkPreloads.add(resumableState);
+                  }
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.L(href, as, options);
+      },
+      m: function (href, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            var as =
+              options && "string" === typeof options.as ? options.as : "script";
+            switch (as) {
+              case "script":
+                if (resumableState.moduleScriptResources.hasOwnProperty(href))
+                  return;
+                as = [];
+                resumableState.moduleScriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.moduleScripts.set(href, as);
+                break;
+              default:
+                if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+                  var resources = resumableState.unknownResources[as];
+                  if (resources.hasOwnProperty(href)) return;
+                } else
+                  (resources = {}),
+                    (resumableState.moduleUnknownResources[as] = resources);
+                as = [];
+                resources[href] = PRELOAD_NO_CREDS;
+            }
+            pushLinkImpl(
+              as,
+              assign({ rel: "modulepreload", href: href }, options)
+            );
+            renderState.bulkPreloads.add(as);
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.m(href, options);
+      },
+      X: function (src, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState = resumableState.scriptResources.hasOwnProperty(
+              src
+            )
+              ? resumableState.scriptResources[src]
+              : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.scriptResources[src] = EXISTS),
+              (options = assign({ src: src, async: !0 }, options)),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.scripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.X(src, options);
+      },
+      S: function (href, precedence, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            precedence = precedence || "default";
+            var styleQueue = renderState.styles.get(precedence),
+              resourceState = resumableState.styleResources.hasOwnProperty(href)
+                ? resumableState.styleResources[href]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.styleResources[href] = EXISTS),
+              styleQueue ||
+                ((styleQueue = {
+                  precedence: escapeTextForBrowser(precedence),
+                  rules: [],
+                  hrefs: [],
+                  sheets: new Map()
+                }),
+                renderState.styles.set(precedence, styleQueue)),
+              (precedence = {
+                state: PENDING$1,
+                props: assign(
+                  {
+                    rel: "stylesheet",
+                    href: href,
+                    "data-precedence": precedence
+                  },
+                  options
+                )
+              }),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(precedence.props, resourceState),
+                (renderState = renderState.preloads.stylesheets.get(href)) &&
+                0 < renderState.length
+                  ? (renderState.length = 0)
+                  : (precedence.state = PRELOADED)),
+              styleQueue.sheets.set(href, precedence),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.S(href, precedence, options);
+      },
+      M: function (src, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState =
+              resumableState.moduleScriptResources.hasOwnProperty(src)
+                ? resumableState.moduleScriptResources[src]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.moduleScriptResources[src] = EXISTS),
+              (options = assign(
+                { src: src, type: "module", async: !0 },
+                options
+              )),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.moduleScripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.M(src, options);
+      }
+    };
+    var NothingSent = 0,
+      SentCompleteSegmentFunction = 1,
+      SentCompleteBoundaryFunction = 2,
+      SentClientRenderFunction = 4,
+      SentStyleInsertionFunction = 8,
+      EXISTS = null,
+      PRELOAD_NO_CREDS = [];
+    Object.freeze(PRELOAD_NO_CREDS);
+    var scriptRegex = /(<\/|<)(s)(cript)/gi;
+    var didWarnForNewBooleanPropsWithEmptyValue = {};
+    var NoContribution = 0,
+      ROOT_HTML_MODE = 0,
+      HTML_HTML_MODE = 1,
+      HTML_MODE = 2,
+      HTML_HEAD_MODE = 3,
+      SVG_MODE = 4,
+      MATHML_MODE = 5,
+      HTML_TABLE_MODE = 6,
+      HTML_TABLE_BODY_MODE = 7,
+      HTML_TABLE_ROW_MODE = 8,
+      HTML_COLGROUP_MODE = 9,
+      styleNameCache = new Map(),
+      styleAttributeStart = ' style="',
+      styleAssign = ":",
+      styleSeparator = ";",
+      attributeSeparator = " ",
+      attributeAssign = '="',
+      attributeEnd = '"',
+      attributeEmptyString = '=""',
+      actionJavaScriptURL = escapeTextForBrowser(
+        "javascript:throw new Error('React form unexpectedly submitted.')"
+      ),
+      endOfStartTag = ">",
+      endOfStartTagSelfClosing = "/>",
+      didWarnDefaultInputValue = !1,
+      didWarnDefaultChecked = !1,
+      didWarnDefaultSelectValue = !1,
+      didWarnDefaultTextareaValue = !1,
+      didWarnInvalidOptionChildren = !1,
+      didWarnInvalidOptionInnerHTML = !1,
+      didWarnSelectedSetOnOption = !1,
+      didWarnFormActionType = !1,
+      didWarnFormActionName = !1,
+      didWarnFormActionTarget = !1,
+      didWarnFormActionMethod = !1,
+      formReplayingRuntimeScript =
+        'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});',
+      styleRegex = /(<\/|<)(s)(tyle)/gi,
+      leadingNewline = "\n",
+      VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+      validatedTagCache = new Map(),
+      endTagCache = new Map(),
+      placeholder1 = '<template id="',
+      placeholder2 = '"></template>',
+      startCompletedSuspenseBoundary = "\x3c!--$--\x3e",
+      startPendingSuspenseBoundary1 = '\x3c!--$?--\x3e<template id="',
+      startPendingSuspenseBoundary2 = '"></template>',
+      startClientRenderedSuspenseBoundary = "\x3c!--$!--\x3e",
+      endSuspenseBoundary = "\x3c!--/$--\x3e",
+      clientRenderedSuspenseBoundaryError1 = "<template",
+      clientRenderedSuspenseBoundaryErrorAttrInterstitial = '"',
+      clientRenderedSuspenseBoundaryError1A = ' data-dgst="',
+      clientRenderedSuspenseBoundaryError1B = ' data-msg="',
+      clientRenderedSuspenseBoundaryError1C = ' data-stck="',
+      clientRenderedSuspenseBoundaryError1D = ' data-cstck="',
+      clientRenderedSuspenseBoundaryError2 = "></template>",
+      boundaryPreambleContributionChunkStart = "\x3c!--",
+      boundaryPreambleContributionChunkEnd = "--\x3e",
+      startSegmentHTML = '<div hidden id="',
+      startSegmentHTML2 = '">',
+      endSegmentHTML = "</div>",
+      startSegmentSVG = '<svg aria-hidden="true" style="display:none" id="',
+      startSegmentSVG2 = '">',
+      endSegmentSVG = "</svg>",
+      startSegmentMathML = '<math aria-hidden="true" style="display:none" id="',
+      startSegmentMathML2 = '">',
+      endSegmentMathML = "</math>",
+      startSegmentTable = '<table hidden id="',
+      startSegmentTable2 = '">',
+      endSegmentTable = "</table>",
+      startSegmentTableBody = '<table hidden><tbody id="',
+      startSegmentTableBody2 = '">',
+      endSegmentTableBody = "</tbody></table>",
+      startSegmentTableRow = '<table hidden><tr id="',
+      startSegmentTableRow2 = '">',
+      endSegmentTableRow = "</tr></table>",
+      startSegmentColGroup = '<table hidden><colgroup id="',
+      startSegmentColGroup2 = '">',
+      endSegmentColGroup = "</colgroup></table>",
+      completeSegmentScript1Full =
+        '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("',
+      completeSegmentScript1Partial = '$RS("',
+      completeSegmentScript2 = '","',
+      completeSegmentScriptEnd = '")\x3c/script>',
+      completeBoundaryScript1Full =
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("',
+      completeBoundaryScript1Partial = '$RC("',
+      completeBoundaryWithStylesScript1FullBoth =
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("',
+      completeBoundaryWithStylesScript1FullPartial =
+        '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("',
+      completeBoundaryWithStylesScript1Partial = '$RR("',
+      completeBoundaryScript2 = '","',
+      completeBoundaryScript3a = '",',
+      completeBoundaryScript3b = '"',
+      completeBoundaryScriptEnd = ")\x3c/script>",
+      clientRenderScript1Full =
+        '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("',
+      clientRenderScript1Partial = '$RX("',
+      clientRenderScript1A = '"',
+      clientRenderErrorScriptArgInterstitial = ",",
+      clientRenderScriptEnd = ")\x3c/script>",
+      regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g,
+      regexForJSStringsInScripts = /[&><\u2028\u2029]/g,
+      lateStyleTagResourceOpen1 = '<style media="not all" data-precedence="',
+      lateStyleTagResourceOpen2 = '" data-href="',
+      lateStyleTagResourceOpen3 = '">',
+      lateStyleTagTemplateClose = "</style>",
+      currentlyRenderingBoundaryHasStylesToHoist = !1,
+      destinationHasCapacity = !0,
+      stylesheetFlushingQueue = [],
+      styleTagResourceOpen1 = '<style data-precedence="',
+      styleTagResourceOpen2 = '" data-href="',
+      spaceSeparator = " ",
+      styleTagResourceOpen3 = '">',
+      styleTagResourceClose = "</style>",
+      arrayFirstOpenBracket = "[",
+      arraySubsequentOpenBracket = ",[",
+      arrayInterstitial = ",",
+      arrayCloseBracket = "]",
+      PENDING$1 = 0,
+      PRELOADED = 1,
+      PREAMBLE = 2,
+      LATE = 3,
+      regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g,
+      regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g,
+      doctypeChunk = "",
+      bind = Function.prototype.bind,
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      emptyContextObject = {};
+    Object.freeze(emptyContextObject);
+    var rendererSigil = {};
+    var currentActiveSnapshot = null,
+      didWarnAboutNoopUpdateForComponent = {},
+      didWarnAboutDeprecatedWillMount = {};
+    var didWarnAboutUninitializedState = new Set();
+    var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
+    var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
+    var didWarnAboutDirectlyAssigningPropsToState = new Set();
+    var didWarnAboutUndefinedDerivedState = new Set();
+    var didWarnAboutContextTypes$1 = new Set();
+    var didWarnAboutChildContextTypes = new Set();
+    var didWarnAboutInvalidateContextType = new Set();
+    var didWarnOnInvalidCallback = new Set();
+    var classComponentUpdater = {
+        enqueueSetState: function (inst, payload, callback) {
+          var internals = inst._reactInternals;
+          null === internals.queue
+            ? warnNoop(inst, "setState")
+            : (internals.queue.push(payload),
+              void 0 !== callback &&
+                null !== callback &&
+                warnOnInvalidCallback(callback));
+        },
+        enqueueReplaceState: function (inst, payload, callback) {
+          inst = inst._reactInternals;
+          inst.replace = !0;
+          inst.queue = [payload];
+          void 0 !== callback &&
+            null !== callback &&
+            warnOnInvalidCallback(callback);
+        },
+        enqueueForceUpdate: function (inst, callback) {
+          null === inst._reactInternals.queue
+            ? warnNoop(inst, "forceUpdate")
+            : void 0 !== callback &&
+              null !== callback &&
+              warnOnInvalidCallback(callback);
+        }
+      },
+      emptyTreeContext = { id: 1, overflow: "" },
+      clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+      log = Math.log,
+      LN2 = Math.LN2,
+      SuspenseException = Error(
+        "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+      ),
+      suspendedThenable = null,
+      objectIs = "function" === typeof Object.is ? Object.is : is,
+      currentlyRenderingComponent = null,
+      currentlyRenderingTask = null,
+      currentlyRenderingRequest = null,
+      currentlyRenderingKeyPath = null,
+      firstWorkInProgressHook = null,
+      workInProgressHook = null,
+      isReRender = !1,
+      didScheduleRenderPhaseUpdate = !1,
+      localIdCounter = 0,
+      actionStateCounter = 0,
+      actionStateMatchingIndex = -1,
+      thenableIndexCounter = 0,
+      thenableState = null,
+      renderPhaseUpdates = null,
+      numberOfReRenders = 0,
+      isInHookUserCodeInDev = !1,
+      currentHookNameInDev,
+      HooksDispatcher = {
+        readContext: readContext,
+        use: function (usable) {
+          if (null !== usable && "object" === typeof usable) {
+            if ("function" === typeof usable.then)
+              return unwrapThenable(usable);
+            if (usable.$$typeof === REACT_CONTEXT_TYPE)
+              return readContext(usable);
+          }
+          throw Error(
+            "An unsupported type was passed to use(): " + String(usable)
+          );
+        },
+        useContext: function (context) {
+          currentHookNameInDev = "useContext";
+          resolveCurrentlyRenderingComponent();
+          return context._currentValue2;
+        },
+        useMemo: useMemo,
+        useReducer: useReducer,
+        useRef: function (initialValue) {
+          currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+          workInProgressHook = createWorkInProgressHook();
+          var previousRef = workInProgressHook.memoizedState;
+          return null === previousRef
+            ? ((initialValue = { current: initialValue }),
+              Object.seal(initialValue),
+              (workInProgressHook.memoizedState = initialValue))
+            : previousRef;
+        },
+        useState: function (initialState) {
+          currentHookNameInDev = "useState";
+          return useReducer(basicStateReducer, initialState);
+        },
+        useInsertionEffect: noop$1,
+        useLayoutEffect: noop$1,
+        useCallback: function (callback, deps) {
+          return useMemo(function () {
+            return callback;
+          }, deps);
+        },
+        useImperativeHandle: noop$1,
+        useEffect: noop$1,
+        useDebugValue: noop$1,
+        useDeferredValue: function (value, initialValue) {
+          resolveCurrentlyRenderingComponent();
+          return void 0 !== initialValue ? initialValue : value;
+        },
+        useTransition: function () {
+          resolveCurrentlyRenderingComponent();
+          return [!1, unsupportedStartTransition];
+        },
+        useId: function () {
+          var treeId = currentlyRenderingTask.treeContext;
+          var overflow = treeId.overflow;
+          treeId = treeId.id;
+          treeId =
+            (treeId & ~(1 << (32 - clz32(treeId) - 1))).toString(32) + overflow;
+          var resumableState = currentResumableState;
+          if (null === resumableState)
+            throw Error(
+              "Invalid hook call. Hooks can only be called inside of the body of a function component."
+            );
+          overflow = localIdCounter++;
+          treeId = "\u00ab" + resumableState.idPrefix + "R" + treeId;
+          0 < overflow && (treeId += "H" + overflow.toString(32));
+          return treeId + "\u00bb";
+        },
+        useSyncExternalStore: function (
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        ) {
+          if (void 0 === getServerSnapshot)
+            throw Error(
+              "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+            );
+          return getServerSnapshot();
+        },
+        useOptimistic: function (passthrough) {
+          resolveCurrentlyRenderingComponent();
+          return [passthrough, unsupportedSetOptimisticState];
+        },
+        useActionState: useActionState,
+        useFormState: useActionState,
+        useHostTransitionStatus: function () {
+          resolveCurrentlyRenderingComponent();
+          return NotPending;
+        },
+        useMemoCache: function (size) {
+          for (var data = Array(size), i = 0; i < size; i++)
+            data[i] = REACT_MEMO_CACHE_SENTINEL;
+          return data;
+        },
+        useCacheRefresh: function () {
+          return unsupportedRefresh;
+        }
+      },
+      currentResumableState = null,
+      currentTaskInDEV = null,
+      DefaultAsyncDispatcher = {
+        getCacheForType: function () {
+          throw Error("Not implemented.");
+        },
+        getOwner: function () {
+          return null === currentTaskInDEV
+            ? null
+            : currentTaskInDEV.componentStack;
+        }
+      },
+      disabledDepth = 0,
+      prevLog,
+      prevInfo,
+      prevWarn,
+      prevError,
+      prevGroup,
+      prevGroupCollapsed,
+      prevGroupEnd;
+    disabledLog.__reactDisabledLog = !0;
+    var prefix,
+      suffix,
+      reentry = !1;
+    var componentFrameCache = new (
+      "function" === typeof WeakMap ? WeakMap : Map
+    )();
+    var callComponent = {
+        react_stack_bottom_frame: function (Component, props, secondArg) {
+          return Component(props, secondArg);
+        }
+      },
+      callComponentInDEV =
+        callComponent.react_stack_bottom_frame.bind(callComponent),
+      callRender = {
+        react_stack_bottom_frame: function (instance) {
+          return instance.render();
+        }
+      },
+      callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),
+      callLazyInit = {
+        react_stack_bottom_frame: function (lazy) {
+          var init = lazy._init;
+          return init(lazy._payload);
+        }
+      },
+      callLazyInitInDEV =
+        callLazyInit.react_stack_bottom_frame.bind(callLazyInit),
+      lastResetTime = 0;
+    if (
+      "object" === typeof performance &&
+      "function" === typeof performance.now
+    ) {
+      var localPerformance = performance;
+      var getCurrentTime = function () {
+        return localPerformance.now();
+      };
+    } else {
+      var localDate = Date;
+      getCurrentTime = function () {
+        return localDate.now();
+      };
+    }
+    var CLIENT_RENDERED = 4,
+      PENDING = 0,
+      COMPLETED = 1,
+      FLUSHED = 2,
+      POSTPONED = 5,
+      CLOSED = 14,
+      currentRequest = null,
+      didWarnAboutBadClass = {},
+      didWarnAboutContextTypes = {},
+      didWarnAboutContextTypeOnFunctionComponent = {},
+      didWarnAboutGetDerivedStateOnFunctionComponent = {},
+      didWarnAboutReassigningProps = !1,
+      didWarnAboutGenerators = !1,
+      didWarnAboutMaps = !1;
+    exports.renderToStaticMarkup = function (children, options) {
+      return renderToStringImpl(
+        children,
+        options,
+        !0,
+        'The server used "renderToStaticMarkup" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server'
+      );
+    };
+    exports.renderToString = function (children, options) {
+      return renderToStringImpl(
+        children,
+        options,
+        !1,
+        'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server'
+      );
+    };
+    exports.version = "19.1.1";
+  })();
Index: node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5892 @@
+/**
+ * @license React
+ * react-dom-server-legacy.browser.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+
+
+ JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
+
+ Copyright (c) 2011 Gary Court
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+"use strict";
+var React = require("react"),
+  ReactDOM = require("react-dom");
+function formatProdErrorMessage(code) {
+  var url = "https://react.dev/errors/" + code;
+  if (1 < arguments.length) {
+    url += "?args[]=" + encodeURIComponent(arguments[1]);
+    for (var i = 2; i < arguments.length; i++)
+      url += "&args[]=" + encodeURIComponent(arguments[i]);
+  }
+  return (
+    "Minified React error #" +
+    code +
+    "; visit " +
+    url +
+    " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."
+  );
+}
+var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+  REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+  REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+  REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+  MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+  isArrayImpl = Array.isArray;
+function murmurhash3_32_gc(key, seed) {
+  var remainder = key.length & 3;
+  var bytes = key.length - remainder;
+  var h1 = seed;
+  for (seed = 0; seed < bytes; ) {
+    var k1 =
+      (key.charCodeAt(seed) & 255) |
+      ((key.charCodeAt(++seed) & 255) << 8) |
+      ((key.charCodeAt(++seed) & 255) << 16) |
+      ((key.charCodeAt(++seed) & 255) << 24);
+    ++seed;
+    k1 =
+      (3432918353 * (k1 & 65535) +
+        (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+      4294967295;
+    k1 = (k1 << 15) | (k1 >>> 17);
+    k1 =
+      (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+      4294967295;
+    h1 ^= k1;
+    h1 = (h1 << 13) | (h1 >>> 19);
+    h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295;
+    h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16);
+  }
+  k1 = 0;
+  switch (remainder) {
+    case 3:
+      k1 ^= (key.charCodeAt(seed + 2) & 255) << 16;
+    case 2:
+      k1 ^= (key.charCodeAt(seed + 1) & 255) << 8;
+    case 1:
+      (k1 ^= key.charCodeAt(seed) & 255),
+        (k1 =
+          (3432918353 * (k1 & 65535) +
+            (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295),
+        (k1 = (k1 << 15) | (k1 >>> 17)),
+        (h1 ^=
+          (461845907 * (k1 & 65535) +
+            (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295);
+  }
+  h1 ^= key.length;
+  h1 ^= h1 >>> 16;
+  h1 =
+    (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) &
+    4294967295;
+  h1 ^= h1 >>> 13;
+  h1 =
+    (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) &
+    4294967295;
+  return (h1 ^ (h1 >>> 16)) >>> 0;
+}
+var assign = Object.assign,
+  hasOwnProperty = Object.prototype.hasOwnProperty,
+  VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+    "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  illegalAttributeNameCache = {},
+  validatedAttributeNameCache = {};
+function isAttributeNameSafe(attributeName) {
+  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+    return !0;
+  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+    return (validatedAttributeNameCache[attributeName] = !0);
+  illegalAttributeNameCache[attributeName] = !0;
+  return !1;
+}
+var unitlessNumbers = new Set(
+    "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+      " "
+    )
+  ),
+  aliases = new Map([
+    ["acceptCharset", "accept-charset"],
+    ["htmlFor", "for"],
+    ["httpEquiv", "http-equiv"],
+    ["crossOrigin", "crossorigin"],
+    ["accentHeight", "accent-height"],
+    ["alignmentBaseline", "alignment-baseline"],
+    ["arabicForm", "arabic-form"],
+    ["baselineShift", "baseline-shift"],
+    ["capHeight", "cap-height"],
+    ["clipPath", "clip-path"],
+    ["clipRule", "clip-rule"],
+    ["colorInterpolation", "color-interpolation"],
+    ["colorInterpolationFilters", "color-interpolation-filters"],
+    ["colorProfile", "color-profile"],
+    ["colorRendering", "color-rendering"],
+    ["dominantBaseline", "dominant-baseline"],
+    ["enableBackground", "enable-background"],
+    ["fillOpacity", "fill-opacity"],
+    ["fillRule", "fill-rule"],
+    ["floodColor", "flood-color"],
+    ["floodOpacity", "flood-opacity"],
+    ["fontFamily", "font-family"],
+    ["fontSize", "font-size"],
+    ["fontSizeAdjust", "font-size-adjust"],
+    ["fontStretch", "font-stretch"],
+    ["fontStyle", "font-style"],
+    ["fontVariant", "font-variant"],
+    ["fontWeight", "font-weight"],
+    ["glyphName", "glyph-name"],
+    ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+    ["glyphOrientationVertical", "glyph-orientation-vertical"],
+    ["horizAdvX", "horiz-adv-x"],
+    ["horizOriginX", "horiz-origin-x"],
+    ["imageRendering", "image-rendering"],
+    ["letterSpacing", "letter-spacing"],
+    ["lightingColor", "lighting-color"],
+    ["markerEnd", "marker-end"],
+    ["markerMid", "marker-mid"],
+    ["markerStart", "marker-start"],
+    ["overlinePosition", "overline-position"],
+    ["overlineThickness", "overline-thickness"],
+    ["paintOrder", "paint-order"],
+    ["panose-1", "panose-1"],
+    ["pointerEvents", "pointer-events"],
+    ["renderingIntent", "rendering-intent"],
+    ["shapeRendering", "shape-rendering"],
+    ["stopColor", "stop-color"],
+    ["stopOpacity", "stop-opacity"],
+    ["strikethroughPosition", "strikethrough-position"],
+    ["strikethroughThickness", "strikethrough-thickness"],
+    ["strokeDasharray", "stroke-dasharray"],
+    ["strokeDashoffset", "stroke-dashoffset"],
+    ["strokeLinecap", "stroke-linecap"],
+    ["strokeLinejoin", "stroke-linejoin"],
+    ["strokeMiterlimit", "stroke-miterlimit"],
+    ["strokeOpacity", "stroke-opacity"],
+    ["strokeWidth", "stroke-width"],
+    ["textAnchor", "text-anchor"],
+    ["textDecoration", "text-decoration"],
+    ["textRendering", "text-rendering"],
+    ["transformOrigin", "transform-origin"],
+    ["underlinePosition", "underline-position"],
+    ["underlineThickness", "underline-thickness"],
+    ["unicodeBidi", "unicode-bidi"],
+    ["unicodeRange", "unicode-range"],
+    ["unitsPerEm", "units-per-em"],
+    ["vAlphabetic", "v-alphabetic"],
+    ["vHanging", "v-hanging"],
+    ["vIdeographic", "v-ideographic"],
+    ["vMathematical", "v-mathematical"],
+    ["vectorEffect", "vector-effect"],
+    ["vertAdvY", "vert-adv-y"],
+    ["vertOriginX", "vert-origin-x"],
+    ["vertOriginY", "vert-origin-y"],
+    ["wordSpacing", "word-spacing"],
+    ["writingMode", "writing-mode"],
+    ["xmlnsXlink", "xmlns:xlink"],
+    ["xHeight", "x-height"]
+  ]),
+  matchHtmlRegExp = /["'&<>]/;
+function escapeTextForBrowser(text) {
+  if (
+    "boolean" === typeof text ||
+    "number" === typeof text ||
+    "bigint" === typeof text
+  )
+    return "" + text;
+  text = "" + text;
+  var match = matchHtmlRegExp.exec(text);
+  if (match) {
+    var html = "",
+      index,
+      lastIndex = 0;
+    for (index = match.index; index < text.length; index++) {
+      switch (text.charCodeAt(index)) {
+        case 34:
+          match = "&quot;";
+          break;
+        case 38:
+          match = "&amp;";
+          break;
+        case 39:
+          match = "&#x27;";
+          break;
+        case 60:
+          match = "&lt;";
+          break;
+        case 62:
+          match = "&gt;";
+          break;
+        default:
+          continue;
+      }
+      lastIndex !== index && (html += text.slice(lastIndex, index));
+      lastIndex = index + 1;
+      html += match;
+    }
+    text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+  }
+  return text;
+}
+var uppercasePattern = /([A-Z])/g,
+  msPattern = /^ms-/,
+  isJavaScriptProtocol =
+    /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
+function sanitizeURL(url) {
+  return isJavaScriptProtocol.test("" + url)
+    ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+    : url;
+}
+var ReactSharedInternals =
+    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  ReactDOMSharedInternals =
+    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  sharedNotPendingObject = {
+    pending: !1,
+    data: null,
+    method: null,
+    action: null
+  },
+  previousDispatcher = ReactDOMSharedInternals.d;
+ReactDOMSharedInternals.d = {
+  f: previousDispatcher.f,
+  r: previousDispatcher.r,
+  D: prefetchDNS,
+  C: preconnect,
+  L: preload,
+  m: preloadModule,
+  X: preinitScript,
+  S: preinitStyle,
+  M: preinitModuleScript
+};
+var PRELOAD_NO_CREDS = [],
+  scriptRegex = /(<\/|<)(s)(cript)/gi;
+function scriptReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+}
+function createResumableState(
+  identifierPrefix,
+  externalRuntimeConfig,
+  bootstrapScriptContent,
+  bootstrapScripts,
+  bootstrapModules
+) {
+  return {
+    idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+    nextFormID: 0,
+    streamingFormat: 0,
+    bootstrapScriptContent: bootstrapScriptContent,
+    bootstrapScripts: bootstrapScripts,
+    bootstrapModules: bootstrapModules,
+    instructions: 0,
+    hasBody: !1,
+    hasHtml: !1,
+    unknownResources: {},
+    dnsResources: {},
+    connectResources: { default: {}, anonymous: {}, credentials: {} },
+    imageResources: {},
+    styleResources: {},
+    scriptResources: {},
+    moduleUnknownResources: {},
+    moduleScriptResources: {}
+  };
+}
+function createPreambleState() {
+  return {
+    htmlChunks: null,
+    headChunks: null,
+    bodyChunks: null,
+    contribution: 0
+  };
+}
+function createFormatContext(insertionMode, selectedValue, tagScope) {
+  return {
+    insertionMode: insertionMode,
+    selectedValue: selectedValue,
+    tagScope: tagScope
+  };
+}
+function getChildFormatContext(parentContext, type, props) {
+  switch (type) {
+    case "noscript":
+      return createFormatContext(2, null, parentContext.tagScope | 1);
+    case "select":
+      return createFormatContext(
+        2,
+        null != props.value ? props.value : props.defaultValue,
+        parentContext.tagScope
+      );
+    case "svg":
+      return createFormatContext(4, null, parentContext.tagScope);
+    case "picture":
+      return createFormatContext(2, null, parentContext.tagScope | 2);
+    case "math":
+      return createFormatContext(5, null, parentContext.tagScope);
+    case "foreignObject":
+      return createFormatContext(2, null, parentContext.tagScope);
+    case "table":
+      return createFormatContext(6, null, parentContext.tagScope);
+    case "thead":
+    case "tbody":
+    case "tfoot":
+      return createFormatContext(7, null, parentContext.tagScope);
+    case "colgroup":
+      return createFormatContext(9, null, parentContext.tagScope);
+    case "tr":
+      return createFormatContext(8, null, parentContext.tagScope);
+    case "head":
+      if (2 > parentContext.insertionMode)
+        return createFormatContext(3, null, parentContext.tagScope);
+      break;
+    case "html":
+      if (0 === parentContext.insertionMode)
+        return createFormatContext(1, null, parentContext.tagScope);
+  }
+  return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode
+    ? createFormatContext(2, null, parentContext.tagScope)
+    : parentContext;
+}
+var styleNameCache = new Map();
+function pushStyleAttribute(target, style) {
+  if ("object" !== typeof style) throw Error(formatProdErrorMessage(62));
+  var isFirst = !0,
+    styleName;
+  for (styleName in style)
+    if (hasOwnProperty.call(style, styleName)) {
+      var styleValue = style[styleName];
+      if (
+        null != styleValue &&
+        "boolean" !== typeof styleValue &&
+        "" !== styleValue
+      ) {
+        if (0 === styleName.indexOf("--")) {
+          var nameChunk = escapeTextForBrowser(styleName);
+          styleValue = escapeTextForBrowser(("" + styleValue).trim());
+        } else
+          (nameChunk = styleNameCache.get(styleName)),
+            void 0 === nameChunk &&
+              ((nameChunk = escapeTextForBrowser(
+                styleName
+                  .replace(uppercasePattern, "-$1")
+                  .toLowerCase()
+                  .replace(msPattern, "-ms-")
+              )),
+              styleNameCache.set(styleName, nameChunk)),
+            (styleValue =
+              "number" === typeof styleValue
+                ? 0 === styleValue || unitlessNumbers.has(styleName)
+                  ? "" + styleValue
+                  : styleValue + "px"
+                : escapeTextForBrowser(("" + styleValue).trim()));
+        isFirst
+          ? ((isFirst = !1),
+            target.push(' style="', nameChunk, ":", styleValue))
+          : target.push(";", nameChunk, ":", styleValue);
+      }
+    }
+  isFirst || target.push('"');
+}
+function pushBooleanAttribute(target, name, value) {
+  value &&
+    "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    target.push(" ", name, '=""');
+}
+function pushStringAttribute(target, name, value) {
+  "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    "boolean" !== typeof value &&
+    target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+}
+var actionJavaScriptURL = escapeTextForBrowser(
+  "javascript:throw new Error('React form unexpectedly submitted.')"
+);
+function pushAdditionalFormField(value, key) {
+  this.push('<input type="hidden"');
+  validateAdditionalFormField(value);
+  pushStringAttribute(this, "name", key);
+  pushStringAttribute(this, "value", value);
+  this.push("/>");
+}
+function validateAdditionalFormField(value) {
+  if ("string" !== typeof value) throw Error(formatProdErrorMessage(480));
+}
+function getCustomFormFields(resumableState, formAction) {
+  if ("function" === typeof formAction.$$FORM_ACTION) {
+    var id = resumableState.nextFormID++;
+    resumableState = resumableState.idPrefix + id;
+    try {
+      var customFields = formAction.$$FORM_ACTION(resumableState);
+      if (customFields) {
+        var formData = customFields.data;
+        null != formData && formData.forEach(validateAdditionalFormField);
+      }
+      return customFields;
+    } catch (x) {
+      if ("object" === typeof x && null !== x && "function" === typeof x.then)
+        throw x;
+    }
+  }
+  return null;
+}
+function pushFormActionAttribute(
+  target,
+  resumableState,
+  renderState,
+  formAction,
+  formEncType,
+  formMethod,
+  formTarget,
+  name
+) {
+  var formData = null;
+  if ("function" === typeof formAction) {
+    var customFields = getCustomFormFields(resumableState, formAction);
+    null !== customFields
+      ? ((name = customFields.name),
+        (formAction = customFields.action || ""),
+        (formEncType = customFields.encType),
+        (formMethod = customFields.method),
+        (formTarget = customFields.target),
+        (formData = customFields.data))
+      : (target.push(" ", "formAction", '="', actionJavaScriptURL, '"'),
+        (formTarget = formMethod = formEncType = formAction = name = null),
+        injectFormReplayingRuntime(resumableState, renderState));
+  }
+  null != name && pushAttribute(target, "name", name);
+  null != formAction && pushAttribute(target, "formAction", formAction);
+  null != formEncType && pushAttribute(target, "formEncType", formEncType);
+  null != formMethod && pushAttribute(target, "formMethod", formMethod);
+  null != formTarget && pushAttribute(target, "formTarget", formTarget);
+  return formData;
+}
+function pushAttribute(target, name, value) {
+  switch (name) {
+    case "className":
+      pushStringAttribute(target, "class", value);
+      break;
+    case "tabIndex":
+      pushStringAttribute(target, "tabindex", value);
+      break;
+    case "dir":
+    case "role":
+    case "viewBox":
+    case "width":
+    case "height":
+      pushStringAttribute(target, name, value);
+      break;
+    case "style":
+      pushStyleAttribute(target, value);
+      break;
+    case "src":
+    case "href":
+      if ("" === value) break;
+    case "action":
+    case "formAction":
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "ref":
+      break;
+    case "autoFocus":
+    case "multiple":
+    case "muted":
+      pushBooleanAttribute(target, name.toLowerCase(), value);
+      break;
+    case "xlinkHref":
+      if (
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(" ", "xlink:href", '="', escapeTextForBrowser(value), '"');
+      break;
+    case "contentEditable":
+    case "spellCheck":
+    case "draggable":
+    case "value":
+    case "autoReverse":
+    case "externalResourcesRequired":
+    case "focusable":
+    case "preserveAlpha":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "inert":
+    case "allowFullScreen":
+    case "async":
+    case "autoPlay":
+    case "controls":
+    case "default":
+    case "defer":
+    case "disabled":
+    case "disablePictureInPicture":
+    case "disableRemotePlayback":
+    case "formNoValidate":
+    case "hidden":
+    case "loop":
+    case "noModule":
+    case "noValidate":
+    case "open":
+    case "playsInline":
+    case "readOnly":
+    case "required":
+    case "reversed":
+    case "scoped":
+    case "seamless":
+    case "itemScope":
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(" ", name, '=""');
+      break;
+    case "capture":
+    case "download":
+      !0 === value
+        ? target.push(" ", name, '=""')
+        : !1 !== value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value &&
+          target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "cols":
+    case "rows":
+    case "size":
+    case "span":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        !isNaN(value) &&
+        1 <= value &&
+        target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "rowSpan":
+    case "start":
+      "function" === typeof value ||
+        "symbol" === typeof value ||
+        isNaN(value) ||
+        target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "xlinkActuate":
+      pushStringAttribute(target, "xlink:actuate", value);
+      break;
+    case "xlinkArcrole":
+      pushStringAttribute(target, "xlink:arcrole", value);
+      break;
+    case "xlinkRole":
+      pushStringAttribute(target, "xlink:role", value);
+      break;
+    case "xlinkShow":
+      pushStringAttribute(target, "xlink:show", value);
+      break;
+    case "xlinkTitle":
+      pushStringAttribute(target, "xlink:title", value);
+      break;
+    case "xlinkType":
+      pushStringAttribute(target, "xlink:type", value);
+      break;
+    case "xmlBase":
+      pushStringAttribute(target, "xml:base", value);
+      break;
+    case "xmlLang":
+      pushStringAttribute(target, "xml:lang", value);
+      break;
+    case "xmlSpace":
+      pushStringAttribute(target, "xml:space", value);
+      break;
+    default:
+      if (
+        !(2 < name.length) ||
+        ("o" !== name[0] && "O" !== name[0]) ||
+        ("n" !== name[1] && "N" !== name[1])
+      )
+        if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) {
+          switch (typeof value) {
+            case "function":
+            case "symbol":
+              return;
+            case "boolean":
+              var prefix$8 = name.toLowerCase().slice(0, 5);
+              if ("data-" !== prefix$8 && "aria-" !== prefix$8) return;
+          }
+          target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+        }
+  }
+}
+function pushInnerHTML(target, innerHTML, children) {
+  if (null != innerHTML) {
+    if (null != children) throw Error(formatProdErrorMessage(60));
+    if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+      throw Error(formatProdErrorMessage(61));
+    innerHTML = innerHTML.__html;
+    null !== innerHTML && void 0 !== innerHTML && target.push("" + innerHTML);
+  }
+}
+function flattenOptionChildren(children) {
+  var content = "";
+  React.Children.forEach(children, function (child) {
+    null != child && (content += child);
+  });
+  return content;
+}
+function injectFormReplayingRuntime(resumableState, renderState) {
+  0 === (resumableState.instructions & 16) &&
+    ((resumableState.instructions |= 16),
+    renderState.bootstrapChunks.unshift(
+      renderState.startInlineScript,
+      'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});',
+      "\x3c/script>"
+    ));
+}
+function pushLinkImpl(target, props) {
+  target.push(startChunkForTag("link"));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(formatProdErrorMessage(399, "link"));
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push("/>");
+  return null;
+}
+var styleRegex = /(<\/|<)(s)(tyle)/gi;
+function styleReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+}
+function pushSelfClosing(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(formatProdErrorMessage(399, tag));
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push("/>");
+  return null;
+}
+function pushTitleImpl(target, props) {
+  target.push(startChunkForTag("title"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  props = Array.isArray(children)
+    ? 2 > children.length
+      ? children[0]
+      : null
+    : children;
+  "function" !== typeof props &&
+    "symbol" !== typeof props &&
+    null !== props &&
+    void 0 !== props &&
+    target.push(escapeTextForBrowser("" + props));
+  pushInnerHTML(target, innerHTML, children);
+  target.push(endChunkForTag("title"));
+  return null;
+}
+function pushScriptImpl(target, props) {
+  target.push(startChunkForTag("script"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  pushInnerHTML(target, innerHTML, children);
+  "string" === typeof children &&
+    target.push(("" + children).replace(scriptRegex, scriptReplacer));
+  target.push(endChunkForTag("script"));
+  return null;
+}
+function pushStartSingletonElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  pushInnerHTML(target, innerHTML, tag);
+  return tag;
+}
+function pushStartGenericElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  pushInnerHTML(target, innerHTML, tag);
+  return "string" === typeof tag
+    ? (target.push(escapeTextForBrowser(tag)), null)
+    : tag;
+}
+var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+  validatedTagCache = new Map();
+function startChunkForTag(tag) {
+  var tagStartChunk = validatedTagCache.get(tag);
+  if (void 0 === tagStartChunk) {
+    if (!VALID_TAG_REGEX.test(tag))
+      throw Error(formatProdErrorMessage(65, tag));
+    tagStartChunk = "<" + tag;
+    validatedTagCache.set(tag, tagStartChunk);
+  }
+  return tagStartChunk;
+}
+function pushStartInstance(
+  target$jscomp$0,
+  type,
+  props,
+  resumableState,
+  renderState,
+  preambleState,
+  hoistableState,
+  formatContext,
+  textEmbedded,
+  isFallback
+) {
+  switch (type) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+      break;
+    case "a":
+      target$jscomp$0.push(startChunkForTag("a"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              case "href":
+                "" === propValue
+                  ? pushStringAttribute(target$jscomp$0, "href", "")
+                  : pushAttribute(target$jscomp$0, propKey, propValue);
+                break;
+              default:
+                pushAttribute(target$jscomp$0, propKey, propValue);
+            }
+        }
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML, children);
+      if ("string" === typeof children) {
+        target$jscomp$0.push(escapeTextForBrowser(children));
+        var JSCompiler_inline_result = null;
+      } else JSCompiler_inline_result = children;
+      return JSCompiler_inline_result;
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "select":
+      target$jscomp$0.push(startChunkForTag("select"));
+      var children$jscomp$0 = null,
+        innerHTML$jscomp$0 = null,
+        propKey$jscomp$0;
+      for (propKey$jscomp$0 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+          var propValue$jscomp$0 = props[propKey$jscomp$0];
+          if (null != propValue$jscomp$0)
+            switch (propKey$jscomp$0) {
+              case "children":
+                children$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "defaultValue":
+              case "value":
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$0,
+                  propValue$jscomp$0
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+      return children$jscomp$0;
+    case "option":
+      var selectedValue = formatContext.selectedValue;
+      target$jscomp$0.push(startChunkForTag("option"));
+      var children$jscomp$1 = null,
+        value = null,
+        selected = null,
+        innerHTML$jscomp$1 = null,
+        propKey$jscomp$1;
+      for (propKey$jscomp$1 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+          var propValue$jscomp$1 = props[propKey$jscomp$1];
+          if (null != propValue$jscomp$1)
+            switch (propKey$jscomp$1) {
+              case "children":
+                children$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "selected":
+                selected = propValue$jscomp$1;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "value":
+                value = propValue$jscomp$1;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$1,
+                  propValue$jscomp$1
+                );
+            }
+        }
+      if (null != selectedValue) {
+        var stringValue =
+          null !== value
+            ? "" + value
+            : flattenOptionChildren(children$jscomp$1);
+        if (isArrayImpl(selectedValue))
+          for (var i = 0; i < selectedValue.length; i++) {
+            if ("" + selectedValue[i] === stringValue) {
+              target$jscomp$0.push(' selected=""');
+              break;
+            }
+          }
+        else
+          "" + selectedValue === stringValue &&
+            target$jscomp$0.push(' selected=""');
+      } else selected && target$jscomp$0.push(' selected=""');
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+      return children$jscomp$1;
+    case "textarea":
+      target$jscomp$0.push(startChunkForTag("textarea"));
+      var value$jscomp$0 = null,
+        defaultValue = null,
+        children$jscomp$2 = null,
+        propKey$jscomp$2;
+      for (propKey$jscomp$2 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+          var propValue$jscomp$2 = props[propKey$jscomp$2];
+          if (null != propValue$jscomp$2)
+            switch (propKey$jscomp$2) {
+              case "children":
+                children$jscomp$2 = propValue$jscomp$2;
+                break;
+              case "value":
+                value$jscomp$0 = propValue$jscomp$2;
+                break;
+              case "defaultValue":
+                defaultValue = propValue$jscomp$2;
+                break;
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(91));
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$2,
+                  propValue$jscomp$2
+                );
+            }
+        }
+      null === value$jscomp$0 &&
+        null !== defaultValue &&
+        (value$jscomp$0 = defaultValue);
+      target$jscomp$0.push(">");
+      if (null != children$jscomp$2) {
+        if (null != value$jscomp$0) throw Error(formatProdErrorMessage(92));
+        if (isArrayImpl(children$jscomp$2)) {
+          if (1 < children$jscomp$2.length)
+            throw Error(formatProdErrorMessage(93));
+          value$jscomp$0 = "" + children$jscomp$2[0];
+        }
+        value$jscomp$0 = "" + children$jscomp$2;
+      }
+      "string" === typeof value$jscomp$0 &&
+        "\n" === value$jscomp$0[0] &&
+        target$jscomp$0.push("\n");
+      null !== value$jscomp$0 &&
+        target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0));
+      return null;
+    case "input":
+      target$jscomp$0.push(startChunkForTag("input"));
+      var name = null,
+        formAction = null,
+        formEncType = null,
+        formMethod = null,
+        formTarget = null,
+        value$jscomp$1 = null,
+        defaultValue$jscomp$0 = null,
+        checked = null,
+        defaultChecked = null,
+        propKey$jscomp$3;
+      for (propKey$jscomp$3 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+          var propValue$jscomp$3 = props[propKey$jscomp$3];
+          if (null != propValue$jscomp$3)
+            switch (propKey$jscomp$3) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(399, "input"));
+              case "name":
+                name = propValue$jscomp$3;
+                break;
+              case "formAction":
+                formAction = propValue$jscomp$3;
+                break;
+              case "formEncType":
+                formEncType = propValue$jscomp$3;
+                break;
+              case "formMethod":
+                formMethod = propValue$jscomp$3;
+                break;
+              case "formTarget":
+                formTarget = propValue$jscomp$3;
+                break;
+              case "defaultChecked":
+                defaultChecked = propValue$jscomp$3;
+                break;
+              case "defaultValue":
+                defaultValue$jscomp$0 = propValue$jscomp$3;
+                break;
+              case "checked":
+                checked = propValue$jscomp$3;
+                break;
+              case "value":
+                value$jscomp$1 = propValue$jscomp$3;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$3,
+                  propValue$jscomp$3
+                );
+            }
+        }
+      var formData = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction,
+        formEncType,
+        formMethod,
+        formTarget,
+        name
+      );
+      null !== checked
+        ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+        : null !== defaultChecked &&
+          pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+      null !== value$jscomp$1
+        ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+        : null !== defaultValue$jscomp$0 &&
+          pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+      target$jscomp$0.push("/>");
+      null != formData &&
+        formData.forEach(pushAdditionalFormField, target$jscomp$0);
+      return null;
+    case "button":
+      target$jscomp$0.push(startChunkForTag("button"));
+      var children$jscomp$3 = null,
+        innerHTML$jscomp$2 = null,
+        name$jscomp$0 = null,
+        formAction$jscomp$0 = null,
+        formEncType$jscomp$0 = null,
+        formMethod$jscomp$0 = null,
+        formTarget$jscomp$0 = null,
+        propKey$jscomp$4;
+      for (propKey$jscomp$4 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+          var propValue$jscomp$4 = props[propKey$jscomp$4];
+          if (null != propValue$jscomp$4)
+            switch (propKey$jscomp$4) {
+              case "children":
+                children$jscomp$3 = propValue$jscomp$4;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$2 = propValue$jscomp$4;
+                break;
+              case "name":
+                name$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formAction":
+                formAction$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formEncType":
+                formEncType$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formMethod":
+                formMethod$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formTarget":
+                formTarget$jscomp$0 = propValue$jscomp$4;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$4,
+                  propValue$jscomp$4
+                );
+            }
+        }
+      var formData$jscomp$0 = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction$jscomp$0,
+        formEncType$jscomp$0,
+        formMethod$jscomp$0,
+        formTarget$jscomp$0,
+        name$jscomp$0
+      );
+      target$jscomp$0.push(">");
+      null != formData$jscomp$0 &&
+        formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+      if ("string" === typeof children$jscomp$3) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3));
+        var JSCompiler_inline_result$jscomp$0 = null;
+      } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3;
+      return JSCompiler_inline_result$jscomp$0;
+    case "form":
+      target$jscomp$0.push(startChunkForTag("form"));
+      var children$jscomp$4 = null,
+        innerHTML$jscomp$3 = null,
+        formAction$jscomp$1 = null,
+        formEncType$jscomp$1 = null,
+        formMethod$jscomp$1 = null,
+        formTarget$jscomp$1 = null,
+        propKey$jscomp$5;
+      for (propKey$jscomp$5 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+          var propValue$jscomp$5 = props[propKey$jscomp$5];
+          if (null != propValue$jscomp$5)
+            switch (propKey$jscomp$5) {
+              case "children":
+                children$jscomp$4 = propValue$jscomp$5;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$3 = propValue$jscomp$5;
+                break;
+              case "action":
+                formAction$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "encType":
+                formEncType$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "method":
+                formMethod$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "target":
+                formTarget$jscomp$1 = propValue$jscomp$5;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$5,
+                  propValue$jscomp$5
+                );
+            }
+        }
+      var formData$jscomp$1 = null,
+        formActionName = null;
+      if ("function" === typeof formAction$jscomp$1) {
+        var customFields = getCustomFormFields(
+          resumableState,
+          formAction$jscomp$1
+        );
+        null !== customFields
+          ? ((formAction$jscomp$1 = customFields.action || ""),
+            (formEncType$jscomp$1 = customFields.encType),
+            (formMethod$jscomp$1 = customFields.method),
+            (formTarget$jscomp$1 = customFields.target),
+            (formData$jscomp$1 = customFields.data),
+            (formActionName = customFields.name))
+          : (target$jscomp$0.push(
+              " ",
+              "action",
+              '="',
+              actionJavaScriptURL,
+              '"'
+            ),
+            (formTarget$jscomp$1 =
+              formMethod$jscomp$1 =
+              formEncType$jscomp$1 =
+              formAction$jscomp$1 =
+                null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != formAction$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+      null != formEncType$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+      null != formMethod$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+      null != formTarget$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+      target$jscomp$0.push(">");
+      null !== formActionName &&
+        (target$jscomp$0.push('<input type="hidden"'),
+        pushStringAttribute(target$jscomp$0, "name", formActionName),
+        target$jscomp$0.push("/>"),
+        null != formData$jscomp$1 &&
+          formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0));
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+      if ("string" === typeof children$jscomp$4) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4));
+        var JSCompiler_inline_result$jscomp$1 = null;
+      } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4;
+      return JSCompiler_inline_result$jscomp$1;
+    case "menuitem":
+      target$jscomp$0.push(startChunkForTag("menuitem"));
+      for (var propKey$jscomp$6 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+          var propValue$jscomp$6 = props[propKey$jscomp$6];
+          if (null != propValue$jscomp$6)
+            switch (propKey$jscomp$6) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(400));
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$6,
+                  propValue$jscomp$6
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      return null;
+    case "object":
+      target$jscomp$0.push(startChunkForTag("object"));
+      var children$jscomp$5 = null,
+        innerHTML$jscomp$4 = null,
+        propKey$jscomp$7;
+      for (propKey$jscomp$7 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+          var propValue$jscomp$7 = props[propKey$jscomp$7];
+          if (null != propValue$jscomp$7)
+            switch (propKey$jscomp$7) {
+              case "children":
+                children$jscomp$5 = propValue$jscomp$7;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$4 = propValue$jscomp$7;
+                break;
+              case "data":
+                var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                if ("" === sanitizedValue) break;
+                target$jscomp$0.push(
+                  " ",
+                  "data",
+                  '="',
+                  escapeTextForBrowser(sanitizedValue),
+                  '"'
+                );
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$7,
+                  propValue$jscomp$7
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+      if ("string" === typeof children$jscomp$5) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5));
+        var JSCompiler_inline_result$jscomp$2 = null;
+      } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5;
+      return JSCompiler_inline_result$jscomp$2;
+    case "title":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$3 = pushTitleImpl(
+          target$jscomp$0,
+          props
+        );
+      else
+        isFallback
+          ? (JSCompiler_inline_result$jscomp$3 = null)
+          : (pushTitleImpl(renderState.hoistableChunks, props),
+            (JSCompiler_inline_result$jscomp$3 = void 0));
+      return JSCompiler_inline_result$jscomp$3;
+    case "link":
+      var rel = props.rel,
+        href = props.href,
+        precedence = props.precedence;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof rel ||
+        "string" !== typeof href ||
+        "" === href
+      ) {
+        pushLinkImpl(target$jscomp$0, props);
+        var JSCompiler_inline_result$jscomp$4 = null;
+      } else if ("stylesheet" === props.rel)
+        if (
+          "string" !== typeof precedence ||
+          null != props.disabled ||
+          props.onLoad ||
+          props.onError
+        )
+          JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+            target$jscomp$0,
+            props
+          );
+        else {
+          var styleQueue = renderState.styles.get(precedence),
+            resourceState = resumableState.styleResources.hasOwnProperty(href)
+              ? resumableState.styleResources[href]
+              : void 0;
+          if (null !== resourceState) {
+            resumableState.styleResources[href] = null;
+            styleQueue ||
+              ((styleQueue = {
+                precedence: escapeTextForBrowser(precedence),
+                rules: [],
+                hrefs: [],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence, styleQueue));
+            var resource = {
+              state: 0,
+              props: assign({}, props, {
+                "data-precedence": props.precedence,
+                precedence: null
+              })
+            };
+            if (resourceState) {
+              2 === resourceState.length &&
+                adoptPreloadCredentials(resource.props, resourceState);
+              var preloadResource = renderState.preloads.stylesheets.get(href);
+              preloadResource && 0 < preloadResource.length
+                ? (preloadResource.length = 0)
+                : (resource.state = 1);
+            }
+            styleQueue.sheets.set(href, resource);
+            hoistableState && hoistableState.stylesheets.add(resource);
+          } else if (styleQueue) {
+            var resource$9 = styleQueue.sheets.get(href);
+            resource$9 &&
+              hoistableState &&
+              hoistableState.stylesheets.add(resource$9);
+          }
+          textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+          JSCompiler_inline_result$jscomp$4 = null;
+        }
+      else
+        props.onLoad || props.onError
+          ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+              target$jscomp$0,
+              props
+            ))
+          : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+            (JSCompiler_inline_result$jscomp$4 = isFallback
+              ? null
+              : pushLinkImpl(renderState.hoistableChunks, props)));
+      return JSCompiler_inline_result$jscomp$4;
+    case "script":
+      var asyncProp = props.async;
+      if (
+        "string" !== typeof props.src ||
+        !props.src ||
+        !asyncProp ||
+        "function" === typeof asyncProp ||
+        "symbol" === typeof asyncProp ||
+        props.onLoad ||
+        props.onError ||
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$5 = pushScriptImpl(
+          target$jscomp$0,
+          props
+        );
+      else {
+        var key = props.src;
+        if ("module" === props.type) {
+          var resources = resumableState.moduleScriptResources;
+          var preloads = renderState.preloads.moduleScripts;
+        } else
+          (resources = resumableState.scriptResources),
+            (preloads = renderState.preloads.scripts);
+        var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+          ? resources[key]
+          : void 0;
+        if (null !== resourceState$jscomp$0) {
+          resources[key] = null;
+          var scriptProps = props;
+          if (resourceState$jscomp$0) {
+            2 === resourceState$jscomp$0.length &&
+              ((scriptProps = assign({}, props)),
+              adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+            var preloadResource$jscomp$0 = preloads.get(key);
+            preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0);
+          }
+          var resource$jscomp$0 = [];
+          renderState.scripts.add(resource$jscomp$0);
+          pushScriptImpl(resource$jscomp$0, scriptProps);
+        }
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+        JSCompiler_inline_result$jscomp$5 = null;
+      }
+      return JSCompiler_inline_result$jscomp$5;
+    case "style":
+      var precedence$jscomp$0 = props.precedence,
+        href$jscomp$0 = props.href;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof precedence$jscomp$0 ||
+        "string" !== typeof href$jscomp$0 ||
+        "" === href$jscomp$0
+      ) {
+        target$jscomp$0.push(startChunkForTag("style"));
+        var children$jscomp$6 = null,
+          innerHTML$jscomp$5 = null,
+          propKey$jscomp$8;
+        for (propKey$jscomp$8 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+            var propValue$jscomp$8 = props[propKey$jscomp$8];
+            if (null != propValue$jscomp$8)
+              switch (propKey$jscomp$8) {
+                case "children":
+                  children$jscomp$6 = propValue$jscomp$8;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$5 = propValue$jscomp$8;
+                  break;
+                default:
+                  pushAttribute(
+                    target$jscomp$0,
+                    propKey$jscomp$8,
+                    propValue$jscomp$8
+                  );
+              }
+          }
+        target$jscomp$0.push(">");
+        var child = Array.isArray(children$jscomp$6)
+          ? 2 > children$jscomp$6.length
+            ? children$jscomp$6[0]
+            : null
+          : children$jscomp$6;
+        "function" !== typeof child &&
+          "symbol" !== typeof child &&
+          null !== child &&
+          void 0 !== child &&
+          target$jscomp$0.push(("" + child).replace(styleRegex, styleReplacer));
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6);
+        target$jscomp$0.push(endChunkForTag("style"));
+        var JSCompiler_inline_result$jscomp$6 = null;
+      } else {
+        var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0);
+        if (
+          null !==
+          (resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+            ? resumableState.styleResources[href$jscomp$0]
+            : void 0)
+        ) {
+          resumableState.styleResources[href$jscomp$0] = null;
+          styleQueue$jscomp$0
+            ? styleQueue$jscomp$0.hrefs.push(
+                escapeTextForBrowser(href$jscomp$0)
+              )
+            : ((styleQueue$jscomp$0 = {
+                precedence: escapeTextForBrowser(precedence$jscomp$0),
+                rules: [],
+                hrefs: [escapeTextForBrowser(href$jscomp$0)],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0));
+          var target = styleQueue$jscomp$0.rules,
+            children$jscomp$7 = null,
+            innerHTML$jscomp$6 = null,
+            propKey$jscomp$9;
+          for (propKey$jscomp$9 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+              var propValue$jscomp$9 = props[propKey$jscomp$9];
+              if (null != propValue$jscomp$9)
+                switch (propKey$jscomp$9) {
+                  case "children":
+                    children$jscomp$7 = propValue$jscomp$9;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$6 = propValue$jscomp$9;
+                }
+            }
+          var child$jscomp$0 = Array.isArray(children$jscomp$7)
+            ? 2 > children$jscomp$7.length
+              ? children$jscomp$7[0]
+              : null
+            : children$jscomp$7;
+          "function" !== typeof child$jscomp$0 &&
+            "symbol" !== typeof child$jscomp$0 &&
+            null !== child$jscomp$0 &&
+            void 0 !== child$jscomp$0 &&
+            target.push(
+              ("" + child$jscomp$0).replace(styleRegex, styleReplacer)
+            );
+          pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7);
+        }
+        styleQueue$jscomp$0 &&
+          hoistableState &&
+          hoistableState.styles.add(styleQueue$jscomp$0);
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+        JSCompiler_inline_result$jscomp$6 = void 0;
+      }
+      return JSCompiler_inline_result$jscomp$6;
+    case "meta":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$7 = pushSelfClosing(
+          target$jscomp$0,
+          props,
+          "meta"
+        );
+      else
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+          (JSCompiler_inline_result$jscomp$7 = isFallback
+            ? null
+            : "string" === typeof props.charSet
+              ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+              : "viewport" === props.name
+                ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                : pushSelfClosing(renderState.hoistableChunks, props, "meta"));
+      return JSCompiler_inline_result$jscomp$7;
+    case "listing":
+    case "pre":
+      target$jscomp$0.push(startChunkForTag(type));
+      var children$jscomp$8 = null,
+        innerHTML$jscomp$7 = null,
+        propKey$jscomp$10;
+      for (propKey$jscomp$10 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+          var propValue$jscomp$10 = props[propKey$jscomp$10];
+          if (null != propValue$jscomp$10)
+            switch (propKey$jscomp$10) {
+              case "children":
+                children$jscomp$8 = propValue$jscomp$10;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$7 = propValue$jscomp$10;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$10,
+                  propValue$jscomp$10
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      if (null != innerHTML$jscomp$7) {
+        if (null != children$jscomp$8) throw Error(formatProdErrorMessage(60));
+        if (
+          "object" !== typeof innerHTML$jscomp$7 ||
+          !("__html" in innerHTML$jscomp$7)
+        )
+          throw Error(formatProdErrorMessage(61));
+        var html = innerHTML$jscomp$7.__html;
+        null !== html &&
+          void 0 !== html &&
+          ("string" === typeof html && 0 < html.length && "\n" === html[0]
+            ? target$jscomp$0.push("\n", html)
+            : target$jscomp$0.push("" + html));
+      }
+      "string" === typeof children$jscomp$8 &&
+        "\n" === children$jscomp$8[0] &&
+        target$jscomp$0.push("\n");
+      return children$jscomp$8;
+    case "img":
+      var src = props.src,
+        srcSet = props.srcSet;
+      if (
+        !(
+          "lazy" === props.loading ||
+          (!src && !srcSet) ||
+          ("string" !== typeof src && null != src) ||
+          ("string" !== typeof srcSet && null != srcSet)
+        ) &&
+        "low" !== props.fetchPriority &&
+        !1 === !!(formatContext.tagScope & 3) &&
+        ("string" !== typeof src ||
+          ":" !== src[4] ||
+          ("d" !== src[0] && "D" !== src[0]) ||
+          ("a" !== src[1] && "A" !== src[1]) ||
+          ("t" !== src[2] && "T" !== src[2]) ||
+          ("a" !== src[3] && "A" !== src[3])) &&
+        ("string" !== typeof srcSet ||
+          ":" !== srcSet[4] ||
+          ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+          ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+          ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+          ("a" !== srcSet[3] && "A" !== srcSet[3]))
+      ) {
+        var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+          key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+          promotablePreloads = renderState.preloads.images,
+          resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+        if (resource$jscomp$1) {
+          if (
+            "high" === props.fetchPriority ||
+            10 > renderState.highImagePreloads.size
+          )
+            promotablePreloads.delete(key$jscomp$0),
+              renderState.highImagePreloads.add(resource$jscomp$1);
+        } else if (
+          !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+        ) {
+          resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+          var input = props.crossOrigin;
+          var JSCompiler_inline_result$jscomp$8 =
+            "string" === typeof input
+              ? "use-credentials" === input
+                ? input
+                : ""
+              : void 0;
+          var headers = renderState.headers,
+            header;
+          headers &&
+          0 < headers.remainingCapacity &&
+          "string" !== typeof props.srcSet &&
+          ("high" === props.fetchPriority ||
+            500 > headers.highImagePreloads.length) &&
+          ((header = getPreloadAsHeader(src, "image", {
+            imageSrcSet: props.srcSet,
+            imageSizes: props.sizes,
+            crossOrigin: JSCompiler_inline_result$jscomp$8,
+            integrity: props.integrity,
+            nonce: props.nonce,
+            type: props.type,
+            fetchPriority: props.fetchPriority,
+            referrerPolicy: props.refererPolicy
+          })),
+          0 <= (headers.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+              headers.highImagePreloads && (headers.highImagePreloads += ", "),
+              (headers.highImagePreloads += header))
+            : ((resource$jscomp$1 = []),
+              pushLinkImpl(resource$jscomp$1, {
+                rel: "preload",
+                as: "image",
+                href: srcSet ? void 0 : src,
+                imageSrcSet: srcSet,
+                imageSizes: sizes,
+                crossOrigin: JSCompiler_inline_result$jscomp$8,
+                integrity: props.integrity,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.referrerPolicy
+              }),
+              "high" === props.fetchPriority ||
+              10 > renderState.highImagePreloads.size
+                ? renderState.highImagePreloads.add(resource$jscomp$1)
+                : (renderState.bulkPreloads.add(resource$jscomp$1),
+                  promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+        }
+      }
+      return pushSelfClosing(target$jscomp$0, props, "img");
+    case "base":
+    case "area":
+    case "br":
+    case "col":
+    case "embed":
+    case "hr":
+    case "keygen":
+    case "param":
+    case "source":
+    case "track":
+    case "wbr":
+      return pushSelfClosing(target$jscomp$0, props, type);
+    case "annotation-xml":
+    case "color-profile":
+    case "font-face":
+    case "font-face-src":
+    case "font-face-uri":
+    case "font-face-format":
+    case "font-face-name":
+    case "missing-glyph":
+      break;
+    case "head":
+      if (2 > formatContext.insertionMode) {
+        var preamble = preambleState || renderState.preamble;
+        if (preamble.headChunks)
+          throw Error(formatProdErrorMessage(545, "`<head>`"));
+        preamble.headChunks = [];
+        var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+          preamble.headChunks,
+          props,
+          "head"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "head"
+        );
+      return JSCompiler_inline_result$jscomp$9;
+    case "body":
+      if (2 > formatContext.insertionMode) {
+        var preamble$jscomp$0 = preambleState || renderState.preamble;
+        if (preamble$jscomp$0.bodyChunks)
+          throw Error(formatProdErrorMessage(545, "`<body>`"));
+        preamble$jscomp$0.bodyChunks = [];
+        var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+          preamble$jscomp$0.bodyChunks,
+          props,
+          "body"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "body"
+        );
+      return JSCompiler_inline_result$jscomp$10;
+    case "html":
+      if (0 === formatContext.insertionMode) {
+        var preamble$jscomp$1 = preambleState || renderState.preamble;
+        if (preamble$jscomp$1.htmlChunks)
+          throw Error(formatProdErrorMessage(545, "`<html>`"));
+        preamble$jscomp$1.htmlChunks = [""];
+        var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+          preamble$jscomp$1.htmlChunks,
+          props,
+          "html"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "html"
+        );
+      return JSCompiler_inline_result$jscomp$11;
+    default:
+      if (-1 !== type.indexOf("-")) {
+        target$jscomp$0.push(startChunkForTag(type));
+        var children$jscomp$9 = null,
+          innerHTML$jscomp$8 = null,
+          propKey$jscomp$11;
+        for (propKey$jscomp$11 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+            var propValue$jscomp$11 = props[propKey$jscomp$11];
+            if (null != propValue$jscomp$11) {
+              var attributeName = propKey$jscomp$11;
+              switch (propKey$jscomp$11) {
+                case "children":
+                  children$jscomp$9 = propValue$jscomp$11;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$8 = propValue$jscomp$11;
+                  break;
+                case "style":
+                  pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                  break;
+                case "suppressContentEditableWarning":
+                case "suppressHydrationWarning":
+                case "ref":
+                  break;
+                case "className":
+                  attributeName = "class";
+                default:
+                  if (
+                    isAttributeNameSafe(propKey$jscomp$11) &&
+                    "function" !== typeof propValue$jscomp$11 &&
+                    "symbol" !== typeof propValue$jscomp$11 &&
+                    !1 !== propValue$jscomp$11
+                  ) {
+                    if (!0 === propValue$jscomp$11) propValue$jscomp$11 = "";
+                    else if ("object" === typeof propValue$jscomp$11) continue;
+                    target$jscomp$0.push(
+                      " ",
+                      attributeName,
+                      '="',
+                      escapeTextForBrowser(propValue$jscomp$11),
+                      '"'
+                    );
+                  }
+              }
+            }
+          }
+        target$jscomp$0.push(">");
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9);
+        return children$jscomp$9;
+      }
+  }
+  return pushStartGenericElement(target$jscomp$0, props, type);
+}
+var endTagCache = new Map();
+function endChunkForTag(tag) {
+  var chunk = endTagCache.get(tag);
+  void 0 === chunk && ((chunk = "</" + tag + ">"), endTagCache.set(tag, chunk));
+  return chunk;
+}
+function hoistPreambleState(renderState, preambleState) {
+  renderState = renderState.preamble;
+  null === renderState.htmlChunks &&
+    preambleState.htmlChunks &&
+    ((renderState.htmlChunks = preambleState.htmlChunks),
+    (preambleState.contribution |= 1));
+  null === renderState.headChunks &&
+    preambleState.headChunks &&
+    ((renderState.headChunks = preambleState.headChunks),
+    (preambleState.contribution |= 4));
+  null === renderState.bodyChunks &&
+    preambleState.bodyChunks &&
+    ((renderState.bodyChunks = preambleState.bodyChunks),
+    (preambleState.contribution |= 2));
+}
+function writeBootstrap(destination, renderState) {
+  renderState = renderState.bootstrapChunks;
+  for (var i = 0; i < renderState.length - 1; i++)
+    destination.push(renderState[i]);
+  return i < renderState.length
+    ? ((i = renderState[i]), (renderState.length = 0), destination.push(i))
+    : !0;
+}
+function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+  destination.push('\x3c!--$?--\x3e<template id="');
+  if (null === id) throw Error(formatProdErrorMessage(395));
+  destination.push(renderState.boundaryPrefix);
+  renderState = id.toString(16);
+  destination.push(renderState);
+  return destination.push('"></template>');
+}
+function writePreambleContribution(destination, preambleState) {
+  preambleState = preambleState.contribution;
+  0 !== preambleState &&
+    (destination.push("\x3c!--"),
+    destination.push("" + preambleState),
+    destination.push("--\x3e"));
+}
+function writeStartSegment(destination, renderState, formatContext, id) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return (
+        destination.push('<div hidden id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 4:
+      return (
+        destination.push('<svg aria-hidden="true" style="display:none" id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 5:
+      return (
+        destination.push('<math aria-hidden="true" style="display:none" id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 6:
+      return (
+        destination.push('<table hidden id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 7:
+      return (
+        destination.push('<table hidden><tbody id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 8:
+      return (
+        destination.push('<table hidden><tr id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 9:
+      return (
+        destination.push('<table hidden><colgroup id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    default:
+      throw Error(formatProdErrorMessage(397));
+  }
+}
+function writeEndSegment(destination, formatContext) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return destination.push("</div>");
+    case 4:
+      return destination.push("</svg>");
+    case 5:
+      return destination.push("</math>");
+    case 6:
+      return destination.push("</table>");
+    case 7:
+      return destination.push("</tbody></table>");
+    case 8:
+      return destination.push("</tr></table>");
+    case 9:
+      return destination.push("</colgroup></table>");
+    default:
+      throw Error(formatProdErrorMessage(397));
+  }
+}
+var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g;
+function escapeJSStringsForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInInstructionScripts,
+    function (match) {
+      switch (match) {
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var regexForJSStringsInScripts = /[&><\u2028\u2029]/g;
+function escapeJSObjectForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInScripts,
+    function (match) {
+      switch (match) {
+        case "&":
+          return "\\u0026";
+        case ">":
+          return "\\u003e";
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var currentlyRenderingBoundaryHasStylesToHoist = !1,
+  destinationHasCapacity = !0;
+function flushStyleTagsLateForBoundary(styleQueue) {
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs,
+    i = 0;
+  if (hrefs.length) {
+    this.push('<style media="not all" data-precedence="');
+    this.push(styleQueue.precedence);
+    for (this.push('" data-href="'); i < hrefs.length - 1; i++)
+      this.push(hrefs[i]), this.push(" ");
+    this.push(hrefs[i]);
+    this.push('">');
+    for (i = 0; i < rules.length; i++) this.push(rules[i]);
+    destinationHasCapacity = this.push("</style>");
+    currentlyRenderingBoundaryHasStylesToHoist = !0;
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function hasStylesToHoist(stylesheet) {
+  return 2 !== stylesheet.state
+    ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+    : !1;
+}
+function writeHoistablesForBoundary(destination, hoistableState, renderState) {
+  currentlyRenderingBoundaryHasStylesToHoist = !1;
+  destinationHasCapacity = !0;
+  hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+  hoistableState.stylesheets.forEach(hasStylesToHoist);
+  currentlyRenderingBoundaryHasStylesToHoist &&
+    (renderState.stylesToHoist = !0);
+  return destinationHasCapacity;
+}
+function flushResource(resource) {
+  for (var i = 0; i < resource.length; i++) this.push(resource[i]);
+  resource.length = 0;
+}
+var stylesheetFlushingQueue = [];
+function flushStyleInPreamble(stylesheet) {
+  pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+  for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+    this.push(stylesheetFlushingQueue[i]);
+  stylesheetFlushingQueue.length = 0;
+  stylesheet.state = 2;
+}
+function flushStylesInPreamble(styleQueue) {
+  var hasStylesheets = 0 < styleQueue.sheets.size;
+  styleQueue.sheets.forEach(flushStyleInPreamble, this);
+  styleQueue.sheets.clear();
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs;
+  if (!hasStylesheets || hrefs.length) {
+    this.push('<style data-precedence="');
+    this.push(styleQueue.precedence);
+    styleQueue = 0;
+    if (hrefs.length) {
+      for (
+        this.push('" data-href="');
+        styleQueue < hrefs.length - 1;
+        styleQueue++
+      )
+        this.push(hrefs[styleQueue]), this.push(" ");
+      this.push(hrefs[styleQueue]);
+    }
+    this.push('">');
+    for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+      this.push(rules[styleQueue]);
+    this.push("</style>");
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function preloadLateStyle(stylesheet) {
+  if (0 === stylesheet.state) {
+    stylesheet.state = 1;
+    var props = stylesheet.props;
+    pushLinkImpl(stylesheetFlushingQueue, {
+      rel: "preload",
+      as: "style",
+      href: stylesheet.props.href,
+      crossOrigin: props.crossOrigin,
+      fetchPriority: props.fetchPriority,
+      integrity: props.integrity,
+      media: props.media,
+      hrefLang: props.hrefLang,
+      referrerPolicy: props.referrerPolicy
+    });
+    for (
+      stylesheet = 0;
+      stylesheet < stylesheetFlushingQueue.length;
+      stylesheet++
+    )
+      this.push(stylesheetFlushingQueue[stylesheet]);
+    stylesheetFlushingQueue.length = 0;
+  }
+}
+function preloadLateStyles(styleQueue) {
+  styleQueue.sheets.forEach(preloadLateStyle, this);
+  styleQueue.sheets.clear();
+}
+function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+  destination.push("[");
+  var nextArrayOpenBrackChunk = "[";
+  hoistableState.stylesheets.forEach(function (resource) {
+    if (2 !== resource.state)
+      if (3 === resource.state)
+        destination.push(nextArrayOpenBrackChunk),
+          (resource = escapeJSObjectForInstructionScripts(
+            "" + resource.props.href
+          )),
+          destination.push(resource),
+          destination.push("]"),
+          (nextArrayOpenBrackChunk = ",[");
+      else {
+        destination.push(nextArrayOpenBrackChunk);
+        var precedence = resource.props["data-precedence"],
+          props = resource.props,
+          coercedHref = sanitizeURL("" + resource.props.href);
+        coercedHref = escapeJSObjectForInstructionScripts(coercedHref);
+        destination.push(coercedHref);
+        precedence = "" + precedence;
+        destination.push(",");
+        precedence = escapeJSObjectForInstructionScripts(precedence);
+        destination.push(precedence);
+        for (var propKey in props)
+          if (
+            hasOwnProperty.call(props, propKey) &&
+            ((precedence = props[propKey]), null != precedence)
+          )
+            switch (propKey) {
+              case "href":
+              case "rel":
+              case "precedence":
+              case "data-precedence":
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(399, "link"));
+              default:
+                writeStyleResourceAttributeInJS(
+                  destination,
+                  propKey,
+                  precedence
+                );
+            }
+        destination.push("]");
+        nextArrayOpenBrackChunk = ",[";
+        resource.state = 3;
+      }
+  });
+  destination.push("]");
+}
+function writeStyleResourceAttributeInJS(destination, name, value) {
+  var attributeName = name.toLowerCase();
+  switch (typeof value) {
+    case "function":
+    case "symbol":
+      return;
+  }
+  switch (name) {
+    case "innerHTML":
+    case "dangerouslySetInnerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "style":
+    case "ref":
+      return;
+    case "className":
+      attributeName = "class";
+      name = "" + value;
+      break;
+    case "hidden":
+      if (!1 === value) return;
+      name = "";
+      break;
+    case "src":
+    case "href":
+      value = sanitizeURL(value);
+      name = "" + value;
+      break;
+    default:
+      if (
+        (2 < name.length &&
+          ("o" === name[0] || "O" === name[0]) &&
+          ("n" === name[1] || "N" === name[1])) ||
+        !isAttributeNameSafe(name)
+      )
+        return;
+      name = "" + value;
+  }
+  destination.push(",");
+  attributeName = escapeJSObjectForInstructionScripts(attributeName);
+  destination.push(attributeName);
+  destination.push(",");
+  attributeName = escapeJSObjectForInstructionScripts(name);
+  destination.push(attributeName);
+}
+function createHoistableState() {
+  return { styles: new Set(), stylesheets: new Set() };
+}
+function prefetchDNS(href) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      if (!resumableState.dnsResources.hasOwnProperty(href)) {
+        resumableState.dnsResources[href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        )
+          JSCompiler_temp =
+            ((header =
+              "<" +
+              ("" + href).replace(
+                regexForHrefInLinkHeaderURLContext,
+                escapeHrefForLinkHeaderURLContextReplacer
+              ) +
+              ">; rel=dns-prefetch"),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        JSCompiler_temp
+          ? ((renderState.resets.dns[href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((header = []),
+            pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+            renderState.preconnects.add(header));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.D(href);
+}
+function preconnect(href, crossOrigin) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      var bucket =
+        "use-credentials" === crossOrigin
+          ? "credentials"
+          : "string" === typeof crossOrigin
+            ? "anonymous"
+            : "default";
+      if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+        resumableState.connectResources[bucket][href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        ) {
+          JSCompiler_temp =
+            "<" +
+            ("" + href).replace(
+              regexForHrefInLinkHeaderURLContext,
+              escapeHrefForLinkHeaderURLContextReplacer
+            ) +
+            ">; rel=preconnect";
+          if ("string" === typeof crossOrigin) {
+            var escapedCrossOrigin = ("" + crossOrigin).replace(
+              regexForLinkHeaderQuotedParamValueContext,
+              escapeStringForLinkHeaderQuotedParamValueContextReplacer
+            );
+            JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"';
+          }
+          JSCompiler_temp =
+            ((header = JSCompiler_temp),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        }
+        JSCompiler_temp
+          ? ((renderState.resets.connect[bucket][href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((bucket = []),
+            pushLinkImpl(bucket, {
+              rel: "preconnect",
+              href: href,
+              crossOrigin: crossOrigin
+            }),
+            renderState.preconnects.add(bucket));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.C(href, crossOrigin);
+}
+function preload(href, as, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (as && href) {
+      switch (as) {
+        case "image":
+          if (options) {
+            var imageSrcSet = options.imageSrcSet;
+            var imageSizes = options.imageSizes;
+            var fetchPriority = options.fetchPriority;
+          }
+          var key = imageSrcSet
+            ? imageSrcSet + "\n" + (imageSizes || "")
+            : href;
+          if (resumableState.imageResources.hasOwnProperty(key)) return;
+          resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+          resumableState = renderState.headers;
+          var header;
+          resumableState &&
+          0 < resumableState.remainingCapacity &&
+          "string" !== typeof imageSrcSet &&
+          "high" === fetchPriority &&
+          ((header = getPreloadAsHeader(href, as, options)),
+          0 <= (resumableState.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+              resumableState.highImagePreloads &&
+                (resumableState.highImagePreloads += ", "),
+              (resumableState.highImagePreloads += header))
+            : ((resumableState = []),
+              pushLinkImpl(
+                resumableState,
+                assign(
+                  { rel: "preload", href: imageSrcSet ? void 0 : href, as: as },
+                  options
+                )
+              ),
+              "high" === fetchPriority
+                ? renderState.highImagePreloads.add(resumableState)
+                : (renderState.bulkPreloads.add(resumableState),
+                  renderState.preloads.images.set(key, resumableState)));
+          break;
+        case "style":
+          if (resumableState.styleResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.styleResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.stylesheets.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          break;
+        case "script":
+          if (resumableState.scriptResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          renderState.preloads.scripts.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.scriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          break;
+        default:
+          if (resumableState.unknownResources.hasOwnProperty(as)) {
+            if (
+              ((imageSrcSet = resumableState.unknownResources[as]),
+              imageSrcSet.hasOwnProperty(href))
+            )
+              return;
+          } else
+            (imageSrcSet = {}),
+              (resumableState.unknownResources[as] = imageSrcSet);
+          imageSrcSet[href] = PRELOAD_NO_CREDS;
+          if (
+            (resumableState = renderState.headers) &&
+            0 < resumableState.remainingCapacity &&
+            "font" === as &&
+            ((key = getPreloadAsHeader(href, as, options)),
+            0 <= (resumableState.remainingCapacity -= key.length + 2))
+          )
+            (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+              resumableState.fontPreloads &&
+                (resumableState.fontPreloads += ", "),
+              (resumableState.fontPreloads += key);
+          else
+            switch (
+              ((resumableState = []),
+              (href = assign({ rel: "preload", href: href, as: as }, options)),
+              pushLinkImpl(resumableState, href),
+              as)
+            ) {
+              case "font":
+                renderState.fontPreloads.add(resumableState);
+                break;
+              default:
+                renderState.bulkPreloads.add(resumableState);
+            }
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.L(href, as, options);
+}
+function preloadModule(href, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      var as =
+        options && "string" === typeof options.as ? options.as : "script";
+      switch (as) {
+        case "script":
+          if (resumableState.moduleScriptResources.hasOwnProperty(href)) return;
+          as = [];
+          resumableState.moduleScriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.moduleScripts.set(href, as);
+          break;
+        default:
+          if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+            var resources = resumableState.unknownResources[as];
+            if (resources.hasOwnProperty(href)) return;
+          } else
+            (resources = {}),
+              (resumableState.moduleUnknownResources[as] = resources);
+          as = [];
+          resources[href] = PRELOAD_NO_CREDS;
+      }
+      pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options));
+      renderState.bulkPreloads.add(as);
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.m(href, options);
+}
+function preinitStyle(href, precedence, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      precedence = precedence || "default";
+      var styleQueue = renderState.styles.get(precedence),
+        resourceState = resumableState.styleResources.hasOwnProperty(href)
+          ? resumableState.styleResources[href]
+          : void 0;
+      null !== resourceState &&
+        ((resumableState.styleResources[href] = null),
+        styleQueue ||
+          ((styleQueue = {
+            precedence: escapeTextForBrowser(precedence),
+            rules: [],
+            hrefs: [],
+            sheets: new Map()
+          }),
+          renderState.styles.set(precedence, styleQueue)),
+        (precedence = {
+          state: 0,
+          props: assign(
+            { rel: "stylesheet", href: href, "data-precedence": precedence },
+            options
+          )
+        }),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(precedence.props, resourceState),
+          (renderState = renderState.preloads.stylesheets.get(href)) &&
+          0 < renderState.length
+            ? (renderState.length = 0)
+            : (precedence.state = 1)),
+        styleQueue.sheets.set(href, precedence),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.S(href, precedence, options);
+}
+function preinitScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.scriptResources.hasOwnProperty(src)
+        ? resumableState.scriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.scriptResources[src] = null),
+        (options = assign({ src: src, async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.scripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.X(src, options);
+}
+function preinitModuleScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.moduleScriptResources.hasOwnProperty(
+        src
+      )
+        ? resumableState.moduleScriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.moduleScriptResources[src] = null),
+        (options = assign({ src: src, type: "module", async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.moduleScripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.M(src, options);
+}
+function adoptPreloadCredentials(target, preloadState) {
+  null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+  null == target.integrity && (target.integrity = preloadState[1]);
+}
+function getPreloadAsHeader(href, as, params) {
+  href = ("" + href).replace(
+    regexForHrefInLinkHeaderURLContext,
+    escapeHrefForLinkHeaderURLContextReplacer
+  );
+  as = ("" + as).replace(
+    regexForLinkHeaderQuotedParamValueContext,
+    escapeStringForLinkHeaderQuotedParamValueContextReplacer
+  );
+  as = "<" + href + '>; rel=preload; as="' + as + '"';
+  for (var paramName in params)
+    hasOwnProperty.call(params, paramName) &&
+      ((href = params[paramName]),
+      "string" === typeof href &&
+        (as +=
+          "; " +
+          paramName.toLowerCase() +
+          '="' +
+          ("" + href).replace(
+            regexForLinkHeaderQuotedParamValueContext,
+            escapeStringForLinkHeaderQuotedParamValueContextReplacer
+          ) +
+          '"'));
+  return as;
+}
+var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g;
+function escapeHrefForLinkHeaderURLContextReplacer(match) {
+  switch (match) {
+    case "<":
+      return "%3C";
+    case ">":
+      return "%3E";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g;
+function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+  switch (match) {
+    case '"':
+      return "%22";
+    case "'":
+      return "%27";
+    case ";":
+      return "%3B";
+    case ",":
+      return "%2C";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+function hoistStyleQueueDependency(styleQueue) {
+  this.styles.add(styleQueue);
+}
+function hoistStylesheetDependency(stylesheet) {
+  this.stylesheets.add(stylesheet);
+}
+function createRenderState(resumableState, generateStaticMarkup) {
+  var idPrefix = resumableState.idPrefix,
+    bootstrapChunks = [],
+    bootstrapScriptContent = resumableState.bootstrapScriptContent,
+    bootstrapScripts = resumableState.bootstrapScripts,
+    bootstrapModules = resumableState.bootstrapModules;
+  void 0 !== bootstrapScriptContent &&
+    bootstrapChunks.push(
+      "<script>",
+      ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer),
+      "\x3c/script>"
+    );
+  bootstrapScriptContent = idPrefix + "P:";
+  var JSCompiler_object_inline_segmentPrefix_1542 = idPrefix + "S:";
+  idPrefix += "B:";
+  var JSCompiler_object_inline_preamble_1545 = createPreambleState(),
+    JSCompiler_object_inline_preconnects_1555 = new Set(),
+    JSCompiler_object_inline_fontPreloads_1556 = new Set(),
+    JSCompiler_object_inline_highImagePreloads_1557 = new Set(),
+    JSCompiler_object_inline_styles_1558 = new Map(),
+    JSCompiler_object_inline_bootstrapScripts_1559 = new Set(),
+    JSCompiler_object_inline_scripts_1560 = new Set(),
+    JSCompiler_object_inline_bulkPreloads_1561 = new Set(),
+    JSCompiler_object_inline_preloads_1562 = {
+      images: new Map(),
+      stylesheets: new Map(),
+      scripts: new Map(),
+      moduleScripts: new Map()
+    };
+  if (void 0 !== bootstrapScripts)
+    for (var i = 0; i < bootstrapScripts.length; i++) {
+      var scriptConfig = bootstrapScripts[i],
+        src,
+        crossOrigin = void 0,
+        integrity = void 0,
+        props = {
+          rel: "preload",
+          as: "script",
+          fetchPriority: "low",
+          nonce: void 0
+        };
+      "string" === typeof scriptConfig
+        ? (props.href = src = scriptConfig)
+        : ((props.href = src = scriptConfig.src),
+          (props.integrity = integrity =
+            "string" === typeof scriptConfig.integrity
+              ? scriptConfig.integrity
+              : void 0),
+          (props.crossOrigin = crossOrigin =
+            "string" === typeof scriptConfig || null == scriptConfig.crossOrigin
+              ? void 0
+              : "use-credentials" === scriptConfig.crossOrigin
+                ? "use-credentials"
+                : ""));
+      scriptConfig = resumableState;
+      var href = src;
+      scriptConfig.scriptResources[href] = null;
+      scriptConfig.moduleScriptResources[href] = null;
+      scriptConfig = [];
+      pushLinkImpl(scriptConfig, props);
+      JSCompiler_object_inline_bootstrapScripts_1559.add(scriptConfig);
+      bootstrapChunks.push('<script src="', escapeTextForBrowser(src));
+      "string" === typeof integrity &&
+        bootstrapChunks.push('" integrity="', escapeTextForBrowser(integrity));
+      "string" === typeof crossOrigin &&
+        bootstrapChunks.push(
+          '" crossorigin="',
+          escapeTextForBrowser(crossOrigin)
+        );
+      bootstrapChunks.push('" async="">\x3c/script>');
+    }
+  if (void 0 !== bootstrapModules)
+    for (
+      bootstrapScripts = 0;
+      bootstrapScripts < bootstrapModules.length;
+      bootstrapScripts++
+    )
+      (props = bootstrapModules[bootstrapScripts]),
+        (crossOrigin = src = void 0),
+        (integrity = {
+          rel: "modulepreload",
+          fetchPriority: "low",
+          nonce: void 0
+        }),
+        "string" === typeof props
+          ? (integrity.href = i = props)
+          : ((integrity.href = i = props.src),
+            (integrity.integrity = crossOrigin =
+              "string" === typeof props.integrity ? props.integrity : void 0),
+            (integrity.crossOrigin = src =
+              "string" === typeof props || null == props.crossOrigin
+                ? void 0
+                : "use-credentials" === props.crossOrigin
+                  ? "use-credentials"
+                  : "")),
+        (props = resumableState),
+        (scriptConfig = i),
+        (props.scriptResources[scriptConfig] = null),
+        (props.moduleScriptResources[scriptConfig] = null),
+        (props = []),
+        pushLinkImpl(props, integrity),
+        JSCompiler_object_inline_bootstrapScripts_1559.add(props),
+        bootstrapChunks.push(
+          '<script type="module" src="',
+          escapeTextForBrowser(i)
+        ),
+        "string" === typeof crossOrigin &&
+          bootstrapChunks.push(
+            '" integrity="',
+            escapeTextForBrowser(crossOrigin)
+          ),
+        "string" === typeof src &&
+          bootstrapChunks.push('" crossorigin="', escapeTextForBrowser(src)),
+        bootstrapChunks.push('" async="">\x3c/script>');
+  return {
+    placeholderPrefix: bootstrapScriptContent,
+    segmentPrefix: JSCompiler_object_inline_segmentPrefix_1542,
+    boundaryPrefix: idPrefix,
+    startInlineScript: "<script>",
+    preamble: JSCompiler_object_inline_preamble_1545,
+    externalRuntimeScript: null,
+    bootstrapChunks: bootstrapChunks,
+    importMapChunks: [],
+    onHeaders: void 0,
+    headers: null,
+    resets: {
+      font: {},
+      dns: {},
+      connect: { default: {}, anonymous: {}, credentials: {} },
+      image: {},
+      style: {}
+    },
+    charsetChunks: [],
+    viewportChunks: [],
+    hoistableChunks: [],
+    preconnects: JSCompiler_object_inline_preconnects_1555,
+    fontPreloads: JSCompiler_object_inline_fontPreloads_1556,
+    highImagePreloads: JSCompiler_object_inline_highImagePreloads_1557,
+    styles: JSCompiler_object_inline_styles_1558,
+    bootstrapScripts: JSCompiler_object_inline_bootstrapScripts_1559,
+    scripts: JSCompiler_object_inline_scripts_1560,
+    bulkPreloads: JSCompiler_object_inline_bulkPreloads_1561,
+    preloads: JSCompiler_object_inline_preloads_1562,
+    stylesToHoist: !1,
+    generateStaticMarkup: generateStaticMarkup
+  };
+}
+function pushTextInstance(target, text, renderState, textEmbedded) {
+  if (renderState.generateStaticMarkup)
+    return target.push(escapeTextForBrowser(text)), !1;
+  "" === text
+    ? (target = textEmbedded)
+    : (textEmbedded && target.push("\x3c!-- --\x3e"),
+      target.push(escapeTextForBrowser(text)),
+      (target = !0));
+  return target;
+}
+function pushSegmentFinale(target, renderState, lastPushedText, textEmbedded) {
+  renderState.generateStaticMarkup ||
+    (lastPushedText && textEmbedded && target.push("\x3c!-- --\x3e"));
+}
+var bind = Function.prototype.bind,
+  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function getComponentNameFromType(type) {
+  if (null == type) return null;
+  if ("function" === typeof type)
+    return type.$$typeof === REACT_CLIENT_REFERENCE
+      ? null
+      : type.displayName || type.name || null;
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_FRAGMENT_TYPE:
+      return "Fragment";
+    case REACT_PROFILER_TYPE:
+      return "Profiler";
+    case REACT_STRICT_MODE_TYPE:
+      return "StrictMode";
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+    case REACT_ACTIVITY_TYPE:
+      return "Activity";
+  }
+  if ("object" === typeof type)
+    switch (type.$$typeof) {
+      case REACT_PORTAL_TYPE:
+        return "Portal";
+      case REACT_CONTEXT_TYPE:
+        return (type.displayName || "Context") + ".Provider";
+      case REACT_CONSUMER_TYPE:
+        return (type._context.displayName || "Context") + ".Consumer";
+      case REACT_FORWARD_REF_TYPE:
+        var innerType = type.render;
+        type = type.displayName;
+        type ||
+          ((type = innerType.displayName || innerType.name || ""),
+          (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+        return type;
+      case REACT_MEMO_TYPE:
+        return (
+          (innerType = type.displayName || null),
+          null !== innerType
+            ? innerType
+            : getComponentNameFromType(type.type) || "Memo"
+        );
+      case REACT_LAZY_TYPE:
+        innerType = type._payload;
+        type = type._init;
+        try {
+          return getComponentNameFromType(type(innerType));
+        } catch (x) {}
+    }
+  return null;
+}
+var emptyContextObject = {},
+  currentActiveSnapshot = null;
+function popToNearestCommonAncestor(prev, next) {
+  if (prev !== next) {
+    prev.context._currentValue2 = prev.parentValue;
+    prev = prev.parent;
+    var parentNext = next.parent;
+    if (null === prev) {
+      if (null !== parentNext) throw Error(formatProdErrorMessage(401));
+    } else {
+      if (null === parentNext) throw Error(formatProdErrorMessage(401));
+      popToNearestCommonAncestor(prev, parentNext);
+    }
+    next.context._currentValue2 = next.value;
+  }
+}
+function popAllPrevious(prev) {
+  prev.context._currentValue2 = prev.parentValue;
+  prev = prev.parent;
+  null !== prev && popAllPrevious(prev);
+}
+function pushAllNext(next) {
+  var parentNext = next.parent;
+  null !== parentNext && pushAllNext(parentNext);
+  next.context._currentValue2 = next.value;
+}
+function popPreviousToCommonLevel(prev, next) {
+  prev.context._currentValue2 = prev.parentValue;
+  prev = prev.parent;
+  if (null === prev) throw Error(formatProdErrorMessage(402));
+  prev.depth === next.depth
+    ? popToNearestCommonAncestor(prev, next)
+    : popPreviousToCommonLevel(prev, next);
+}
+function popNextToCommonLevel(prev, next) {
+  var parentNext = next.parent;
+  if (null === parentNext) throw Error(formatProdErrorMessage(402));
+  prev.depth === parentNext.depth
+    ? popToNearestCommonAncestor(prev, parentNext)
+    : popNextToCommonLevel(prev, parentNext);
+  next.context._currentValue2 = next.value;
+}
+function switchContext(newSnapshot) {
+  var prev = currentActiveSnapshot;
+  prev !== newSnapshot &&
+    (null === prev
+      ? pushAllNext(newSnapshot)
+      : null === newSnapshot
+        ? popAllPrevious(prev)
+        : prev.depth === newSnapshot.depth
+          ? popToNearestCommonAncestor(prev, newSnapshot)
+          : prev.depth > newSnapshot.depth
+            ? popPreviousToCommonLevel(prev, newSnapshot)
+            : popNextToCommonLevel(prev, newSnapshot),
+    (currentActiveSnapshot = newSnapshot));
+}
+var classComponentUpdater = {
+    enqueueSetState: function (inst, payload) {
+      inst = inst._reactInternals;
+      null !== inst.queue && inst.queue.push(payload);
+    },
+    enqueueReplaceState: function (inst, payload) {
+      inst = inst._reactInternals;
+      inst.replace = !0;
+      inst.queue = [payload];
+    },
+    enqueueForceUpdate: function () {}
+  },
+  emptyTreeContext = { id: 1, overflow: "" };
+function pushTreeContext(baseContext, totalChildren, index) {
+  var baseIdWithLeadingBit = baseContext.id;
+  baseContext = baseContext.overflow;
+  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+  baseIdWithLeadingBit &= ~(1 << baseLength);
+  index += 1;
+  var length = 32 - clz32(totalChildren) + baseLength;
+  if (30 < length) {
+    var numberOfOverflowBits = baseLength - (baseLength % 5);
+    length = (
+      baseIdWithLeadingBit &
+      ((1 << numberOfOverflowBits) - 1)
+    ).toString(32);
+    baseIdWithLeadingBit >>= numberOfOverflowBits;
+    baseLength -= numberOfOverflowBits;
+    return {
+      id:
+        (1 << (32 - clz32(totalChildren) + baseLength)) |
+        (index << baseLength) |
+        baseIdWithLeadingBit,
+      overflow: length + baseContext
+    };
+  }
+  return {
+    id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+    overflow: baseContext
+  };
+}
+var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+  log = Math.log,
+  LN2 = Math.LN2;
+function clz32Fallback(x) {
+  x >>>= 0;
+  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+}
+var SuspenseException = Error(formatProdErrorMessage(460));
+function noop$2() {}
+function trackUsedThenable(thenableState, thenable, index) {
+  index = thenableState[index];
+  void 0 === index
+    ? thenableState.push(thenable)
+    : index !== thenable && (thenable.then(noop$2, noop$2), (thenable = index));
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw thenable.reason;
+    default:
+      "string" === typeof thenable.status
+        ? thenable.then(noop$2, noop$2)
+        : ((thenableState = thenable),
+          (thenableState.status = "pending"),
+          thenableState.then(
+            function (fulfilledValue) {
+              if ("pending" === thenable.status) {
+                var fulfilledThenable = thenable;
+                fulfilledThenable.status = "fulfilled";
+                fulfilledThenable.value = fulfilledValue;
+              }
+            },
+            function (error) {
+              if ("pending" === thenable.status) {
+                var rejectedThenable = thenable;
+                rejectedThenable.status = "rejected";
+                rejectedThenable.reason = error;
+              }
+            }
+          ));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+      }
+      suspendedThenable = thenable;
+      throw SuspenseException;
+  }
+}
+var suspendedThenable = null;
+function getSuspendedThenable() {
+  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));
+  var thenable = suspendedThenable;
+  suspendedThenable = null;
+  return thenable;
+}
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  currentlyRenderingComponent = null,
+  currentlyRenderingTask = null,
+  currentlyRenderingRequest = null,
+  currentlyRenderingKeyPath = null,
+  firstWorkInProgressHook = null,
+  workInProgressHook = null,
+  isReRender = !1,
+  didScheduleRenderPhaseUpdate = !1,
+  localIdCounter = 0,
+  actionStateCounter = 0,
+  actionStateMatchingIndex = -1,
+  thenableIndexCounter = 0,
+  thenableState = null,
+  renderPhaseUpdates = null,
+  numberOfReRenders = 0;
+function resolveCurrentlyRenderingComponent() {
+  if (null === currentlyRenderingComponent)
+    throw Error(formatProdErrorMessage(321));
+  return currentlyRenderingComponent;
+}
+function createHook() {
+  if (0 < numberOfReRenders) throw Error(formatProdErrorMessage(312));
+  return { memoizedState: null, queue: null, next: null };
+}
+function createWorkInProgressHook() {
+  null === workInProgressHook
+    ? null === firstWorkInProgressHook
+      ? ((isReRender = !1),
+        (firstWorkInProgressHook = workInProgressHook = createHook()))
+      : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+    : null === workInProgressHook.next
+      ? ((isReRender = !1),
+        (workInProgressHook = workInProgressHook.next = createHook()))
+      : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+  return workInProgressHook;
+}
+function getThenableStateAfterSuspending() {
+  var state = thenableState;
+  thenableState = null;
+  return state;
+}
+function resetHooksState() {
+  currentlyRenderingKeyPath =
+    currentlyRenderingRequest =
+    currentlyRenderingTask =
+    currentlyRenderingComponent =
+      null;
+  didScheduleRenderPhaseUpdate = !1;
+  firstWorkInProgressHook = null;
+  numberOfReRenders = 0;
+  workInProgressHook = renderPhaseUpdates = null;
+}
+function basicStateReducer(state, action) {
+  return "function" === typeof action ? action(state) : action;
+}
+function useReducer(reducer, initialArg, init) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  if (isReRender) {
+    var queue = workInProgressHook.queue;
+    initialArg = queue.dispatch;
+    if (
+      null !== renderPhaseUpdates &&
+      ((init = renderPhaseUpdates.get(queue)), void 0 !== init)
+    ) {
+      renderPhaseUpdates.delete(queue);
+      queue = workInProgressHook.memoizedState;
+      do (queue = reducer(queue, init.action)), (init = init.next);
+      while (null !== init);
+      workInProgressHook.memoizedState = queue;
+      return [queue, initialArg];
+    }
+    return [workInProgressHook.memoizedState, initialArg];
+  }
+  reducer =
+    reducer === basicStateReducer
+      ? "function" === typeof initialArg
+        ? initialArg()
+        : initialArg
+      : void 0 !== init
+        ? init(initialArg)
+        : initialArg;
+  workInProgressHook.memoizedState = reducer;
+  reducer = workInProgressHook.queue = { last: null, dispatch: null };
+  reducer = reducer.dispatch = dispatchAction.bind(
+    null,
+    currentlyRenderingComponent,
+    reducer
+  );
+  return [workInProgressHook.memoizedState, reducer];
+}
+function useMemo(nextCreate, deps) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  if (null !== workInProgressHook) {
+    var prevState = workInProgressHook.memoizedState;
+    if (null !== prevState && null !== deps) {
+      var prevDeps = prevState[1];
+      a: if (null === prevDeps) prevDeps = !1;
+      else {
+        for (var i = 0; i < prevDeps.length && i < deps.length; i++)
+          if (!objectIs(deps[i], prevDeps[i])) {
+            prevDeps = !1;
+            break a;
+          }
+        prevDeps = !0;
+      }
+      if (prevDeps) return prevState[0];
+    }
+  }
+  nextCreate = nextCreate();
+  workInProgressHook.memoizedState = [nextCreate, deps];
+  return nextCreate;
+}
+function dispatchAction(componentIdentity, queue, action) {
+  if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));
+  if (componentIdentity === currentlyRenderingComponent)
+    if (
+      ((didScheduleRenderPhaseUpdate = !0),
+      (componentIdentity = { action: action, next: null }),
+      null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+      (action = renderPhaseUpdates.get(queue)),
+      void 0 === action)
+    )
+      renderPhaseUpdates.set(queue, componentIdentity);
+    else {
+      for (queue = action; null !== queue.next; ) queue = queue.next;
+      queue.next = componentIdentity;
+    }
+}
+function unsupportedStartTransition() {
+  throw Error(formatProdErrorMessage(394));
+}
+function unsupportedSetOptimisticState() {
+  throw Error(formatProdErrorMessage(479));
+}
+function useActionState(action, initialState, permalink) {
+  resolveCurrentlyRenderingComponent();
+  var actionStateHookIndex = actionStateCounter++,
+    request = currentlyRenderingRequest;
+  if ("function" === typeof action.$$FORM_ACTION) {
+    var nextPostbackStateKey = null,
+      componentKeyPath = currentlyRenderingKeyPath;
+    request = request.formState;
+    var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+    if (null !== request && "function" === typeof isSignatureEqual) {
+      var postbackKey = request[1];
+      isSignatureEqual.call(action, request[2], request[3]) &&
+        ((nextPostbackStateKey =
+          void 0 !== permalink
+            ? "p" + permalink
+            : "k" +
+              murmurhash3_32_gc(
+                JSON.stringify([componentKeyPath, null, actionStateHookIndex]),
+                0
+              )),
+        postbackKey === nextPostbackStateKey &&
+          ((actionStateMatchingIndex = actionStateHookIndex),
+          (initialState = request[0])));
+    }
+    var boundAction = action.bind(null, initialState);
+    action = function (payload) {
+      boundAction(payload);
+    };
+    "function" === typeof boundAction.$$FORM_ACTION &&
+      (action.$$FORM_ACTION = function (prefix) {
+        prefix = boundAction.$$FORM_ACTION(prefix);
+        void 0 !== permalink &&
+          ((permalink += ""), (prefix.action = permalink));
+        var formData = prefix.data;
+        formData &&
+          (null === nextPostbackStateKey &&
+            (nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  murmurhash3_32_gc(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ]),
+                    0
+                  )),
+          formData.append("$ACTION_KEY", nextPostbackStateKey));
+        return prefix;
+      });
+    return [initialState, action, !1];
+  }
+  var boundAction$22 = action.bind(null, initialState);
+  return [
+    initialState,
+    function (payload) {
+      boundAction$22(payload);
+    },
+    !1
+  ];
+}
+function unwrapThenable(thenable) {
+  var index = thenableIndexCounter;
+  thenableIndexCounter += 1;
+  null === thenableState && (thenableState = []);
+  return trackUsedThenable(thenableState, thenable, index);
+}
+function unsupportedRefresh() {
+  throw Error(formatProdErrorMessage(393));
+}
+function noop$1() {}
+var HooksDispatcher = {
+    readContext: function (context) {
+      return context._currentValue2;
+    },
+    use: function (usable) {
+      if (null !== usable && "object" === typeof usable) {
+        if ("function" === typeof usable.then) return unwrapThenable(usable);
+        if (usable.$$typeof === REACT_CONTEXT_TYPE)
+          return usable._currentValue2;
+      }
+      throw Error(formatProdErrorMessage(438, String(usable)));
+    },
+    useContext: function (context) {
+      resolveCurrentlyRenderingComponent();
+      return context._currentValue2;
+    },
+    useMemo: useMemo,
+    useReducer: useReducer,
+    useRef: function (initialValue) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      var previousRef = workInProgressHook.memoizedState;
+      return null === previousRef
+        ? ((initialValue = { current: initialValue }),
+          (workInProgressHook.memoizedState = initialValue))
+        : previousRef;
+    },
+    useState: function (initialState) {
+      return useReducer(basicStateReducer, initialState);
+    },
+    useInsertionEffect: noop$1,
+    useLayoutEffect: noop$1,
+    useCallback: function (callback, deps) {
+      return useMemo(function () {
+        return callback;
+      }, deps);
+    },
+    useImperativeHandle: noop$1,
+    useEffect: noop$1,
+    useDebugValue: noop$1,
+    useDeferredValue: function (value, initialValue) {
+      resolveCurrentlyRenderingComponent();
+      return void 0 !== initialValue ? initialValue : value;
+    },
+    useTransition: function () {
+      resolveCurrentlyRenderingComponent();
+      return [!1, unsupportedStartTransition];
+    },
+    useId: function () {
+      var JSCompiler_inline_result = currentlyRenderingTask.treeContext;
+      var overflow = JSCompiler_inline_result.overflow;
+      JSCompiler_inline_result = JSCompiler_inline_result.id;
+      JSCompiler_inline_result =
+        (
+          JSCompiler_inline_result &
+          ~(1 << (32 - clz32(JSCompiler_inline_result) - 1))
+        ).toString(32) + overflow;
+      var resumableState = currentResumableState;
+      if (null === resumableState) throw Error(formatProdErrorMessage(404));
+      overflow = localIdCounter++;
+      JSCompiler_inline_result =
+        "\u00ab" + resumableState.idPrefix + "R" + JSCompiler_inline_result;
+      0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32));
+      return JSCompiler_inline_result + "\u00bb";
+    },
+    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
+      if (void 0 === getServerSnapshot)
+        throw Error(formatProdErrorMessage(407));
+      return getServerSnapshot();
+    },
+    useOptimistic: function (passthrough) {
+      resolveCurrentlyRenderingComponent();
+      return [passthrough, unsupportedSetOptimisticState];
+    },
+    useActionState: useActionState,
+    useFormState: useActionState,
+    useHostTransitionStatus: function () {
+      resolveCurrentlyRenderingComponent();
+      return sharedNotPendingObject;
+    },
+    useMemoCache: function (size) {
+      for (var data = Array(size), i = 0; i < size; i++)
+        data[i] = REACT_MEMO_CACHE_SENTINEL;
+      return data;
+    },
+    useCacheRefresh: function () {
+      return unsupportedRefresh;
+    }
+  },
+  currentResumableState = null,
+  DefaultAsyncDispatcher = {
+    getCacheForType: function () {
+      throw Error(formatProdErrorMessage(248));
+    }
+  },
+  prefix,
+  suffix;
+function describeBuiltInComponentFrame(name) {
+  if (void 0 === prefix)
+    try {
+      throw Error();
+    } catch (x) {
+      var match = x.stack.trim().match(/\n( *(at )?)/);
+      prefix = (match && match[1]) || "";
+      suffix =
+        -1 < x.stack.indexOf("\n    at")
+          ? " (<anonymous>)"
+          : -1 < x.stack.indexOf("@")
+            ? "@unknown:0:0"
+            : "";
+    }
+  return "\n" + prefix + name + suffix;
+}
+var reentry = !1;
+function describeNativeComponentFrame(fn, construct) {
+  if (!fn || reentry) return "";
+  reentry = !0;
+  var previousPrepareStackTrace = Error.prepareStackTrace;
+  Error.prepareStackTrace = void 0;
+  try {
+    var RunInRootFrame = {
+      DetermineComponentFrameRoot: function () {
+        try {
+          if (construct) {
+            var Fake = function () {
+              throw Error();
+            };
+            Object.defineProperty(Fake.prototype, "props", {
+              set: function () {
+                throw Error();
+              }
+            });
+            if ("object" === typeof Reflect && Reflect.construct) {
+              try {
+                Reflect.construct(Fake, []);
+              } catch (x) {
+                var control = x;
+              }
+              Reflect.construct(fn, [], Fake);
+            } else {
+              try {
+                Fake.call();
+              } catch (x$24) {
+                control = x$24;
+              }
+              fn.call(Fake.prototype);
+            }
+          } else {
+            try {
+              throw Error();
+            } catch (x$25) {
+              control = x$25;
+            }
+            (Fake = fn()) &&
+              "function" === typeof Fake.catch &&
+              Fake.catch(function () {});
+          }
+        } catch (sample) {
+          if (sample && control && "string" === typeof sample.stack)
+            return [sample.stack, control.stack];
+        }
+        return [null, null];
+      }
+    };
+    RunInRootFrame.DetermineComponentFrameRoot.displayName =
+      "DetermineComponentFrameRoot";
+    var namePropDescriptor = Object.getOwnPropertyDescriptor(
+      RunInRootFrame.DetermineComponentFrameRoot,
+      "name"
+    );
+    namePropDescriptor &&
+      namePropDescriptor.configurable &&
+      Object.defineProperty(
+        RunInRootFrame.DetermineComponentFrameRoot,
+        "name",
+        { value: "DetermineComponentFrameRoot" }
+      );
+    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
+      sampleStack = _RunInRootFrame$Deter[0],
+      controlStack = _RunInRootFrame$Deter[1];
+    if (sampleStack && controlStack) {
+      var sampleLines = sampleStack.split("\n"),
+        controlLines = controlStack.split("\n");
+      for (
+        namePropDescriptor = RunInRootFrame = 0;
+        RunInRootFrame < sampleLines.length &&
+        !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot");
+
+      )
+        RunInRootFrame++;
+      for (
+        ;
+        namePropDescriptor < controlLines.length &&
+        !controlLines[namePropDescriptor].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        namePropDescriptor++;
+      if (
+        RunInRootFrame === sampleLines.length ||
+        namePropDescriptor === controlLines.length
+      )
+        for (
+          RunInRootFrame = sampleLines.length - 1,
+            namePropDescriptor = controlLines.length - 1;
+          1 <= RunInRootFrame &&
+          0 <= namePropDescriptor &&
+          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];
+
+        )
+          namePropDescriptor--;
+      for (
+        ;
+        1 <= RunInRootFrame && 0 <= namePropDescriptor;
+        RunInRootFrame--, namePropDescriptor--
+      )
+        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {
+          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {
+            do
+              if (
+                (RunInRootFrame--,
+                namePropDescriptor--,
+                0 > namePropDescriptor ||
+                  sampleLines[RunInRootFrame] !==
+                    controlLines[namePropDescriptor])
+              ) {
+                var frame =
+                  "\n" +
+                  sampleLines[RunInRootFrame].replace(" at new ", " at ");
+                fn.displayName &&
+                  frame.includes("<anonymous>") &&
+                  (frame = frame.replace("<anonymous>", fn.displayName));
+                return frame;
+              }
+            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);
+          }
+          break;
+        }
+    }
+  } finally {
+    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);
+  }
+  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "")
+    ? describeBuiltInComponentFrame(previousPrepareStackTrace)
+    : "";
+}
+function describeComponentStackByType(type) {
+  if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+  if ("function" === typeof type)
+    return type.prototype && type.prototype.isReactComponent
+      ? describeNativeComponentFrame(type, !0)
+      : describeNativeComponentFrame(type, !1);
+  if ("object" === typeof type && null !== type) {
+    switch (type.$$typeof) {
+      case REACT_FORWARD_REF_TYPE:
+        return describeNativeComponentFrame(type.render, !1);
+      case REACT_MEMO_TYPE:
+        return describeNativeComponentFrame(type.type, !1);
+      case REACT_LAZY_TYPE:
+        var lazyComponent = type,
+          payload = lazyComponent._payload;
+        lazyComponent = lazyComponent._init;
+        try {
+          type = lazyComponent(payload);
+        } catch (x) {
+          return describeBuiltInComponentFrame("Lazy");
+        }
+        return describeComponentStackByType(type);
+    }
+    if ("string" === typeof type.name)
+      return (
+        (payload = type.env),
+        describeBuiltInComponentFrame(
+          type.name + (payload ? " [" + payload + "]" : "")
+        )
+      );
+  }
+  switch (type) {
+    case REACT_SUSPENSE_LIST_TYPE:
+      return describeBuiltInComponentFrame("SuspenseList");
+    case REACT_SUSPENSE_TYPE:
+      return describeBuiltInComponentFrame("Suspense");
+  }
+  return "";
+}
+function defaultErrorHandler(error) {
+  if (
+    "object" === typeof error &&
+    null !== error &&
+    "string" === typeof error.environmentName
+  ) {
+    var JSCompiler_inline_result = error.environmentName;
+    error = [error].slice(0);
+    "string" === typeof error[0]
+      ? error.splice(
+          0,
+          1,
+          "[%s] " + error[0],
+          " " + JSCompiler_inline_result + " "
+        )
+      : error.splice(0, 0, "[%s] ", " " + JSCompiler_inline_result + " ");
+    error.unshift(console);
+    JSCompiler_inline_result = bind.apply(console.error, error);
+    JSCompiler_inline_result();
+  } else console.error(error);
+  return null;
+}
+function noop() {}
+function RequestInstance(
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  var abortSet = new Set();
+  this.destination = null;
+  this.flushScheduled = !1;
+  this.resumableState = resumableState;
+  this.renderState = renderState;
+  this.rootFormatContext = rootFormatContext;
+  this.progressiveChunkSize =
+    void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+  this.status = 10;
+  this.fatalError = null;
+  this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+  this.completedPreambleSegments = this.completedRootSegment = null;
+  this.abortableTasks = abortSet;
+  this.pingedTasks = [];
+  this.clientRenderedBoundaries = [];
+  this.completedBoundaries = [];
+  this.partialBoundaries = [];
+  this.trackedPostpones = null;
+  this.onError = void 0 === onError ? defaultErrorHandler : onError;
+  this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+  this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+  this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+  this.onShellError = void 0 === onShellError ? noop : onShellError;
+  this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+  this.formState = void 0 === formState ? null : formState;
+}
+function createRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  resumableState = new RequestInstance(
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    formState
+  );
+  renderState = createPendingSegment(
+    resumableState,
+    0,
+    null,
+    rootFormatContext,
+    !1,
+    !1
+  );
+  renderState.parentFlushed = !0;
+  children = createRenderTask(
+    resumableState,
+    null,
+    children,
+    -1,
+    null,
+    renderState,
+    null,
+    null,
+    resumableState.abortableTasks,
+    null,
+    rootFormatContext,
+    null,
+    emptyTreeContext,
+    null,
+    !1
+  );
+  pushComponentStack(children);
+  resumableState.pingedTasks.push(children);
+  return resumableState;
+}
+var currentRequest = null;
+function pingTask(request, task) {
+  request.pingedTasks.push(task);
+  1 === request.pingedTasks.length &&
+    ((request.flushScheduled = null !== request.destination),
+    performWork(request));
+}
+function createSuspenseBoundary(
+  request,
+  fallbackAbortableTasks,
+  contentPreamble,
+  fallbackPreamble
+) {
+  return {
+    status: 0,
+    rootSegmentID: -1,
+    parentFlushed: !1,
+    pendingTasks: 0,
+    completedSegments: [],
+    byteSize: 0,
+    fallbackAbortableTasks: fallbackAbortableTasks,
+    errorDigest: null,
+    contentState: createHoistableState(),
+    fallbackState: createHoistableState(),
+    contentPreamble: contentPreamble,
+    fallbackPreamble: fallbackPreamble,
+    trackedContentKeyPath: null,
+    trackedFallbackNode: null
+  };
+}
+function createRenderTask(
+  request,
+  thenableState,
+  node,
+  childIndex,
+  blockedBoundary,
+  blockedSegment,
+  blockedPreamble,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  var task = {
+    replay: null,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: blockedSegment,
+    blockedPreamble: blockedPreamble,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createReplayTask(
+  request,
+  thenableState,
+  replay,
+  node,
+  childIndex,
+  blockedBoundary,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  replay.pendingTasks++;
+  var task = {
+    replay: replay,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: null,
+    blockedPreamble: null,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createPendingSegment(
+  request,
+  index,
+  boundary,
+  parentFormatContext,
+  lastPushedText,
+  textEmbedded
+) {
+  return {
+    status: 0,
+    parentFlushed: !1,
+    id: -1,
+    index: index,
+    chunks: [],
+    children: [],
+    preambleChildren: [],
+    parentFormatContext: parentFormatContext,
+    boundary: boundary,
+    lastPushedText: lastPushedText,
+    textEmbedded: textEmbedded
+  };
+}
+function pushComponentStack(task) {
+  var node = task.node;
+  if ("object" === typeof node && null !== node)
+    switch (node.$$typeof) {
+      case REACT_ELEMENT_TYPE:
+        task.componentStack = { parent: task.componentStack, type: node.type };
+    }
+}
+function getThrownInfo(node$jscomp$0) {
+  var errorInfo = {};
+  node$jscomp$0 &&
+    Object.defineProperty(errorInfo, "componentStack", {
+      configurable: !0,
+      enumerable: !0,
+      get: function () {
+        try {
+          var info = "",
+            node = node$jscomp$0;
+          do
+            (info += describeComponentStackByType(node.type)),
+              (node = node.parent);
+          while (node);
+          var JSCompiler_inline_result = info;
+        } catch (x) {
+          JSCompiler_inline_result =
+            "\nError generating stack: " + x.message + "\n" + x.stack;
+        }
+        Object.defineProperty(errorInfo, "componentStack", {
+          value: JSCompiler_inline_result
+        });
+        return JSCompiler_inline_result;
+      }
+    });
+  return errorInfo;
+}
+function logRecoverableError(request, error, errorInfo) {
+  request = request.onError;
+  error = request(error, errorInfo);
+  if (null == error || "string" === typeof error) return error;
+}
+function fatalError(request, error) {
+  var onShellError = request.onShellError,
+    onFatalError = request.onFatalError;
+  onShellError(error);
+  onFatalError(error);
+  null !== request.destination
+    ? ((request.status = 14), request.destination.destroy(error))
+    : ((request.status = 13), (request.fatalError = error));
+}
+function renderWithHooks(request, task, keyPath, Component, props, secondArg) {
+  var prevThenableState = task.thenableState;
+  task.thenableState = null;
+  currentlyRenderingComponent = {};
+  currentlyRenderingTask = task;
+  currentlyRenderingRequest = request;
+  currentlyRenderingKeyPath = keyPath;
+  actionStateCounter = localIdCounter = 0;
+  actionStateMatchingIndex = -1;
+  thenableIndexCounter = 0;
+  thenableState = prevThenableState;
+  for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; )
+    (didScheduleRenderPhaseUpdate = !1),
+      (actionStateCounter = localIdCounter = 0),
+      (actionStateMatchingIndex = -1),
+      (thenableIndexCounter = 0),
+      (numberOfReRenders += 1),
+      (workInProgressHook = null),
+      (request = Component(props, secondArg));
+  resetHooksState();
+  return request;
+}
+function finishFunctionComponent(
+  request,
+  task,
+  keyPath,
+  children,
+  hasId,
+  actionStateCount,
+  actionStateMatchingIndex
+) {
+  var didEmitActionStateMarkers = !1;
+  if (0 !== actionStateCount && null !== request.formState) {
+    var segment = task.blockedSegment;
+    if (null !== segment) {
+      didEmitActionStateMarkers = !0;
+      segment = segment.chunks;
+      for (var i = 0; i < actionStateCount; i++)
+        i === actionStateMatchingIndex
+          ? segment.push("\x3c!--F!--\x3e")
+          : segment.push("\x3c!--F--\x3e");
+    }
+  }
+  actionStateCount = task.keyPath;
+  task.keyPath = keyPath;
+  hasId
+    ? ((keyPath = task.treeContext),
+      (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+      renderNode(request, task, children, -1),
+      (task.treeContext = keyPath))
+    : didEmitActionStateMarkers
+      ? renderNode(request, task, children, -1)
+      : renderNodeDestructive(request, task, children, -1);
+  task.keyPath = actionStateCount;
+}
+function renderElement(request, task, keyPath, type, props, ref) {
+  if ("function" === typeof type)
+    if (type.prototype && type.prototype.isReactComponent) {
+      var newProps = props;
+      if ("ref" in props) {
+        newProps = {};
+        for (var propName in props)
+          "ref" !== propName && (newProps[propName] = props[propName]);
+      }
+      var defaultProps = type.defaultProps;
+      if (defaultProps) {
+        newProps === props && (newProps = assign({}, newProps, props));
+        for (var propName$33 in defaultProps)
+          void 0 === newProps[propName$33] &&
+            (newProps[propName$33] = defaultProps[propName$33]);
+      }
+      props = newProps;
+      newProps = emptyContextObject;
+      defaultProps = type.contextType;
+      "object" === typeof defaultProps &&
+        null !== defaultProps &&
+        (newProps = defaultProps._currentValue2);
+      newProps = new type(props, newProps);
+      var initialState = void 0 !== newProps.state ? newProps.state : null;
+      newProps.updater = classComponentUpdater;
+      newProps.props = props;
+      newProps.state = initialState;
+      defaultProps = { queue: [], replace: !1 };
+      newProps._reactInternals = defaultProps;
+      ref = type.contextType;
+      newProps.context =
+        "object" === typeof ref && null !== ref
+          ? ref._currentValue2
+          : emptyContextObject;
+      ref = type.getDerivedStateFromProps;
+      "function" === typeof ref &&
+        ((ref = ref(props, initialState)),
+        (initialState =
+          null === ref || void 0 === ref
+            ? initialState
+            : assign({}, initialState, ref)),
+        (newProps.state = initialState));
+      if (
+        "function" !== typeof type.getDerivedStateFromProps &&
+        "function" !== typeof newProps.getSnapshotBeforeUpdate &&
+        ("function" === typeof newProps.UNSAFE_componentWillMount ||
+          "function" === typeof newProps.componentWillMount)
+      )
+        if (
+          ((type = newProps.state),
+          "function" === typeof newProps.componentWillMount &&
+            newProps.componentWillMount(),
+          "function" === typeof newProps.UNSAFE_componentWillMount &&
+            newProps.UNSAFE_componentWillMount(),
+          type !== newProps.state &&
+            classComponentUpdater.enqueueReplaceState(
+              newProps,
+              newProps.state,
+              null
+            ),
+          null !== defaultProps.queue && 0 < defaultProps.queue.length)
+        )
+          if (
+            ((type = defaultProps.queue),
+            (ref = defaultProps.replace),
+            (defaultProps.queue = null),
+            (defaultProps.replace = !1),
+            ref && 1 === type.length)
+          )
+            newProps.state = type[0];
+          else {
+            defaultProps = ref ? type[0] : newProps.state;
+            initialState = !0;
+            for (ref = ref ? 1 : 0; ref < type.length; ref++)
+              (propName$33 = type[ref]),
+                (propName$33 =
+                  "function" === typeof propName$33
+                    ? propName$33.call(newProps, defaultProps, props, void 0)
+                    : propName$33),
+                null != propName$33 &&
+                  (initialState
+                    ? ((initialState = !1),
+                      (defaultProps = assign({}, defaultProps, propName$33)))
+                    : assign(defaultProps, propName$33));
+            newProps.state = defaultProps;
+          }
+        else defaultProps.queue = null;
+      type = newProps.render();
+      if (12 === request.status) throw null;
+      props = task.keyPath;
+      task.keyPath = keyPath;
+      renderNodeDestructive(request, task, type, -1);
+      task.keyPath = props;
+    } else {
+      type = renderWithHooks(request, task, keyPath, type, props, void 0);
+      if (12 === request.status) throw null;
+      finishFunctionComponent(
+        request,
+        task,
+        keyPath,
+        type,
+        0 !== localIdCounter,
+        actionStateCounter,
+        actionStateMatchingIndex
+      );
+    }
+  else if ("string" === typeof type)
+    if (((newProps = task.blockedSegment), null === newProps))
+      (newProps = props.children),
+        (defaultProps = task.formatContext),
+        (initialState = task.keyPath),
+        (task.formatContext = getChildFormatContext(defaultProps, type, props)),
+        (task.keyPath = keyPath),
+        renderNode(request, task, newProps, -1),
+        (task.formatContext = defaultProps),
+        (task.keyPath = initialState);
+    else {
+      ref = pushStartInstance(
+        newProps.chunks,
+        type,
+        props,
+        request.resumableState,
+        request.renderState,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.formatContext,
+        newProps.lastPushedText,
+        task.isFallback
+      );
+      newProps.lastPushedText = !1;
+      defaultProps = task.formatContext;
+      initialState = task.keyPath;
+      task.keyPath = keyPath;
+      3 ===
+      (task.formatContext = getChildFormatContext(defaultProps, type, props))
+        .insertionMode
+        ? ((keyPath = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          )),
+          newProps.preambleChildren.push(keyPath),
+          (keyPath = createRenderTask(
+            request,
+            null,
+            ref,
+            -1,
+            task.blockedBoundary,
+            keyPath,
+            task.blockedPreamble,
+            task.hoistableState,
+            request.abortableTasks,
+            task.keyPath,
+            task.formatContext,
+            task.context,
+            task.treeContext,
+            task.componentStack,
+            task.isFallback
+          )),
+          pushComponentStack(keyPath),
+          request.pingedTasks.push(keyPath))
+        : renderNode(request, task, ref, -1);
+      task.formatContext = defaultProps;
+      task.keyPath = initialState;
+      a: {
+        task = newProps.chunks;
+        request = request.resumableState;
+        switch (type) {
+          case "title":
+          case "style":
+          case "script":
+          case "area":
+          case "base":
+          case "br":
+          case "col":
+          case "embed":
+          case "hr":
+          case "img":
+          case "input":
+          case "keygen":
+          case "link":
+          case "meta":
+          case "param":
+          case "source":
+          case "track":
+          case "wbr":
+            break a;
+          case "body":
+            if (1 >= defaultProps.insertionMode) {
+              request.hasBody = !0;
+              break a;
+            }
+            break;
+          case "html":
+            if (0 === defaultProps.insertionMode) {
+              request.hasHtml = !0;
+              break a;
+            }
+            break;
+          case "head":
+            if (1 >= defaultProps.insertionMode) break a;
+        }
+        task.push(endChunkForTag(type));
+      }
+      newProps.lastPushedText = !1;
+    }
+  else {
+    switch (type) {
+      case REACT_LEGACY_HIDDEN_TYPE:
+      case REACT_STRICT_MODE_TYPE:
+      case REACT_PROFILER_TYPE:
+      case REACT_FRAGMENT_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_ACTIVITY_TYPE:
+        "hidden" !== props.mode &&
+          ((type = task.keyPath),
+          (task.keyPath = keyPath),
+          renderNodeDestructive(request, task, props.children, -1),
+          (task.keyPath = type));
+        return;
+      case REACT_SUSPENSE_LIST_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_VIEW_TRANSITION_TYPE:
+      case REACT_SCOPE_TYPE:
+        throw Error(formatProdErrorMessage(343));
+      case REACT_SUSPENSE_TYPE:
+        a: if (null !== task.replay) {
+          type = task.keyPath;
+          task.keyPath = keyPath;
+          keyPath = props.children;
+          try {
+            renderNode(request, task, keyPath, -1);
+          } finally {
+            task.keyPath = type;
+          }
+        } else {
+          type = task.keyPath;
+          var parentBoundary = task.blockedBoundary;
+          ref = task.blockedPreamble;
+          var parentHoistableState = task.hoistableState;
+          propName$33 = task.blockedSegment;
+          propName = props.fallback;
+          props = props.children;
+          var fallbackAbortSet = new Set();
+          var newBoundary =
+            2 > task.formatContext.insertionMode
+              ? createSuspenseBoundary(
+                  request,
+                  fallbackAbortSet,
+                  createPreambleState(),
+                  createPreambleState()
+                )
+              : createSuspenseBoundary(request, fallbackAbortSet, null, null);
+          null !== request.trackedPostpones &&
+            (newBoundary.trackedContentKeyPath = keyPath);
+          var boundarySegment = createPendingSegment(
+            request,
+            propName$33.chunks.length,
+            newBoundary,
+            task.formatContext,
+            !1,
+            !1
+          );
+          propName$33.children.push(boundarySegment);
+          propName$33.lastPushedText = !1;
+          var contentRootSegment = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          );
+          contentRootSegment.parentFlushed = !0;
+          if (null !== request.trackedPostpones) {
+            newProps = [keyPath[0], "Suspense Fallback", keyPath[2]];
+            defaultProps = [newProps[1], newProps[2], [], null];
+            request.trackedPostpones.workingMap.set(newProps, defaultProps);
+            newBoundary.trackedFallbackNode = defaultProps;
+            task.blockedSegment = boundarySegment;
+            task.blockedPreamble = newBoundary.fallbackPreamble;
+            task.keyPath = newProps;
+            boundarySegment.status = 6;
+            try {
+              renderNode(request, task, propName, -1),
+                pushSegmentFinale(
+                  boundarySegment.chunks,
+                  request.renderState,
+                  boundarySegment.lastPushedText,
+                  boundarySegment.textEmbedded
+                ),
+                (boundarySegment.status = 1);
+            } catch (thrownValue) {
+              throw (
+                ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                thrownValue)
+              );
+            } finally {
+              (task.blockedSegment = propName$33),
+                (task.blockedPreamble = ref),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              props,
+              -1,
+              newBoundary,
+              contentRootSegment,
+              newBoundary.contentPreamble,
+              newBoundary.contentState,
+              task.abortSet,
+              keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          } else {
+            task.blockedBoundary = newBoundary;
+            task.blockedPreamble = newBoundary.contentPreamble;
+            task.hoistableState = newBoundary.contentState;
+            task.blockedSegment = contentRootSegment;
+            task.keyPath = keyPath;
+            contentRootSegment.status = 6;
+            try {
+              if (
+                (renderNode(request, task, props, -1),
+                pushSegmentFinale(
+                  contentRootSegment.chunks,
+                  request.renderState,
+                  contentRootSegment.lastPushedText,
+                  contentRootSegment.textEmbedded
+                ),
+                (contentRootSegment.status = 1),
+                queueCompletedSegment(newBoundary, contentRootSegment),
+                0 === newBoundary.pendingTasks && 0 === newBoundary.status)
+              ) {
+                newBoundary.status = 1;
+                0 === request.pendingRootTasks &&
+                  task.blockedPreamble &&
+                  preparePreamble(request);
+                break a;
+              }
+            } catch (thrownValue$28) {
+              (newBoundary.status = 4),
+                12 === request.status
+                  ? ((contentRootSegment.status = 3),
+                    (newProps = request.fatalError))
+                  : ((contentRootSegment.status = 4),
+                    (newProps = thrownValue$28)),
+                (defaultProps = getThrownInfo(task.componentStack)),
+                (initialState = logRecoverableError(
+                  request,
+                  newProps,
+                  defaultProps
+                )),
+                (newBoundary.errorDigest = initialState),
+                untrackBoundary(request, newBoundary);
+            } finally {
+              (task.blockedBoundary = parentBoundary),
+                (task.blockedPreamble = ref),
+                (task.hoistableState = parentHoistableState),
+                (task.blockedSegment = propName$33),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              propName,
+              -1,
+              parentBoundary,
+              boundarySegment,
+              newBoundary.fallbackPreamble,
+              newBoundary.fallbackState,
+              fallbackAbortSet,
+              [keyPath[0], "Suspense Fallback", keyPath[2]],
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              !0
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          }
+        }
+        return;
+    }
+    if ("object" === typeof type && null !== type)
+      switch (type.$$typeof) {
+        case REACT_FORWARD_REF_TYPE:
+          if ("ref" in props)
+            for (newBoundary in ((newProps = {}), props))
+              "ref" !== newBoundary &&
+                (newProps[newBoundary] = props[newBoundary]);
+          else newProps = props;
+          type = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type.render,
+            newProps,
+            ref
+          );
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            type,
+            0 !== localIdCounter,
+            actionStateCounter,
+            actionStateMatchingIndex
+          );
+          return;
+        case REACT_MEMO_TYPE:
+          renderElement(request, task, keyPath, type.type, props, ref);
+          return;
+        case REACT_PROVIDER_TYPE:
+        case REACT_CONTEXT_TYPE:
+          defaultProps = props.children;
+          newProps = task.keyPath;
+          props = props.value;
+          initialState = type._currentValue2;
+          type._currentValue2 = props;
+          ref = currentActiveSnapshot;
+          currentActiveSnapshot = type = {
+            parent: ref,
+            depth: null === ref ? 0 : ref.depth + 1,
+            context: type,
+            parentValue: initialState,
+            value: props
+          };
+          task.context = type;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, defaultProps, -1);
+          request = currentActiveSnapshot;
+          if (null === request) throw Error(formatProdErrorMessage(403));
+          request.context._currentValue2 = request.parentValue;
+          request = currentActiveSnapshot = request.parent;
+          task.context = request;
+          task.keyPath = newProps;
+          return;
+        case REACT_CONSUMER_TYPE:
+          props = props.children;
+          type = props(type._context._currentValue2);
+          props = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, type, -1);
+          task.keyPath = props;
+          return;
+        case REACT_LAZY_TYPE:
+          newProps = type._init;
+          type = newProps(type._payload);
+          if (12 === request.status) throw null;
+          renderElement(request, task, keyPath, type, props, ref);
+          return;
+      }
+    throw Error(
+      formatProdErrorMessage(130, null == type ? type : typeof type, "")
+    );
+  }
+}
+function resumeNode(request, task, segmentId, node, childIndex) {
+  var prevReplay = task.replay,
+    blockedBoundary = task.blockedBoundary,
+    resumedSegment = createPendingSegment(
+      request,
+      0,
+      null,
+      task.formatContext,
+      !1,
+      !1
+    );
+  resumedSegment.id = segmentId;
+  resumedSegment.parentFlushed = !0;
+  try {
+    (task.replay = null),
+      (task.blockedSegment = resumedSegment),
+      renderNode(request, task, node, childIndex),
+      (resumedSegment.status = 1),
+      null === blockedBoundary
+        ? (request.completedRootSegment = resumedSegment)
+        : (queueCompletedSegment(blockedBoundary, resumedSegment),
+          blockedBoundary.parentFlushed &&
+            request.partialBoundaries.push(blockedBoundary));
+  } finally {
+    (task.replay = prevReplay), (task.blockedSegment = null);
+  }
+}
+function renderNodeDestructive(request, task, node, childIndex) {
+  null !== task.replay && "number" === typeof task.replay.slots
+    ? resumeNode(request, task, task.replay.slots, node, childIndex)
+    : ((task.node = node),
+      (task.childIndex = childIndex),
+      (node = task.componentStack),
+      pushComponentStack(task),
+      retryNode(request, task),
+      (task.componentStack = node));
+}
+function retryNode(request, task) {
+  var node = task.node,
+    childIndex = task.childIndex;
+  if (null !== node) {
+    if ("object" === typeof node) {
+      switch (node.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          var type = node.type,
+            key = node.key,
+            props = node.props;
+          node = props.ref;
+          var ref = void 0 !== node ? node : null,
+            name = getComponentNameFromType(type),
+            keyOrIndex =
+              null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+          key = [task.keyPath, name, keyOrIndex];
+          if (null !== task.replay)
+            a: {
+              var replay = task.replay;
+              childIndex = replay.nodes;
+              for (node = 0; node < childIndex.length; node++) {
+                var node$jscomp$0 = childIndex[node];
+                if (keyOrIndex === node$jscomp$0[1]) {
+                  if (4 === node$jscomp$0.length) {
+                    if (null !== name && name !== node$jscomp$0[0])
+                      throw Error(
+                        formatProdErrorMessage(490, node$jscomp$0[0], name)
+                      );
+                    var childNodes = node$jscomp$0[2];
+                    name = node$jscomp$0[3];
+                    keyOrIndex = task.node;
+                    task.replay = {
+                      nodes: childNodes,
+                      slots: name,
+                      pendingTasks: 1
+                    };
+                    try {
+                      renderElement(request, task, key, type, props, ref);
+                      if (
+                        1 === task.replay.pendingTasks &&
+                        0 < task.replay.nodes.length
+                      )
+                        throw Error(formatProdErrorMessage(488));
+                      task.replay.pendingTasks--;
+                    } catch (x) {
+                      if (
+                        "object" === typeof x &&
+                        null !== x &&
+                        (x === SuspenseException ||
+                          "function" === typeof x.then)
+                      )
+                        throw (
+                          (task.node === keyOrIndex && (task.replay = replay),
+                          x)
+                        );
+                      task.replay.pendingTasks--;
+                      props = getThrownInfo(task.componentStack);
+                      key = task.blockedBoundary;
+                      type = x;
+                      props = logRecoverableError(request, type, props);
+                      abortRemainingReplayNodes(
+                        request,
+                        key,
+                        childNodes,
+                        name,
+                        type,
+                        props
+                      );
+                    }
+                    task.replay = replay;
+                  } else {
+                    if (type !== REACT_SUSPENSE_TYPE)
+                      throw Error(
+                        formatProdErrorMessage(
+                          490,
+                          "Suspense",
+                          getComponentNameFromType(type) || "Unknown"
+                        )
+                      );
+                    b: {
+                      replay = void 0;
+                      type = node$jscomp$0[5];
+                      ref = node$jscomp$0[2];
+                      name = node$jscomp$0[3];
+                      keyOrIndex =
+                        null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2];
+                      node$jscomp$0 =
+                        null === node$jscomp$0[4] ? null : node$jscomp$0[4][3];
+                      var prevKeyPath = task.keyPath,
+                        previousReplaySet = task.replay,
+                        parentBoundary = task.blockedBoundary,
+                        parentHoistableState = task.hoistableState,
+                        content = props.children,
+                        fallback = props.fallback,
+                        fallbackAbortSet = new Set();
+                      props =
+                        2 > task.formatContext.insertionMode
+                          ? createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              createPreambleState(),
+                              createPreambleState()
+                            )
+                          : createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              null,
+                              null
+                            );
+                      props.parentFlushed = !0;
+                      props.rootSegmentID = type;
+                      task.blockedBoundary = props;
+                      task.hoistableState = props.contentState;
+                      task.keyPath = key;
+                      task.replay = {
+                        nodes: ref,
+                        slots: name,
+                        pendingTasks: 1
+                      };
+                      try {
+                        renderNode(request, task, content, -1);
+                        if (
+                          1 === task.replay.pendingTasks &&
+                          0 < task.replay.nodes.length
+                        )
+                          throw Error(formatProdErrorMessage(488));
+                        task.replay.pendingTasks--;
+                        if (0 === props.pendingTasks && 0 === props.status) {
+                          props.status = 1;
+                          request.completedBoundaries.push(props);
+                          break b;
+                        }
+                      } catch (error) {
+                        (props.status = 4),
+                          (childNodes = getThrownInfo(task.componentStack)),
+                          (replay = logRecoverableError(
+                            request,
+                            error,
+                            childNodes
+                          )),
+                          (props.errorDigest = replay),
+                          task.replay.pendingTasks--,
+                          request.clientRenderedBoundaries.push(props);
+                      } finally {
+                        (task.blockedBoundary = parentBoundary),
+                          (task.hoistableState = parentHoistableState),
+                          (task.replay = previousReplaySet),
+                          (task.keyPath = prevKeyPath);
+                      }
+                      task = createReplayTask(
+                        request,
+                        null,
+                        {
+                          nodes: keyOrIndex,
+                          slots: node$jscomp$0,
+                          pendingTasks: 0
+                        },
+                        fallback,
+                        -1,
+                        parentBoundary,
+                        props.fallbackState,
+                        fallbackAbortSet,
+                        [key[0], "Suspense Fallback", key[2]],
+                        task.formatContext,
+                        task.context,
+                        task.treeContext,
+                        task.componentStack,
+                        !0
+                      );
+                      pushComponentStack(task);
+                      request.pingedTasks.push(task);
+                    }
+                  }
+                  childIndex.splice(node, 1);
+                  break a;
+                }
+              }
+            }
+          else renderElement(request, task, key, type, props, ref);
+          return;
+        case REACT_PORTAL_TYPE:
+          throw Error(formatProdErrorMessage(257));
+        case REACT_LAZY_TYPE:
+          childNodes = node._init;
+          node = childNodes(node._payload);
+          if (12 === request.status) throw null;
+          renderNodeDestructive(request, task, node, childIndex);
+          return;
+      }
+      if (isArrayImpl(node)) {
+        renderChildrenArray(request, task, node, childIndex);
+        return;
+      }
+      null === node || "object" !== typeof node
+        ? (childNodes = null)
+        : ((childNodes =
+            (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+            node["@@iterator"]),
+          (childNodes = "function" === typeof childNodes ? childNodes : null));
+      if (childNodes && (childNodes = childNodes.call(node))) {
+        node = childNodes.next();
+        if (!node.done) {
+          props = [];
+          do props.push(node.value), (node = childNodes.next());
+          while (!node.done);
+          renderChildrenArray(request, task, props, childIndex);
+        }
+        return;
+      }
+      if ("function" === typeof node.then)
+        return (
+          (task.thenableState = null),
+          renderNodeDestructive(request, task, unwrapThenable(node), childIndex)
+        );
+      if (node.$$typeof === REACT_CONTEXT_TYPE)
+        return renderNodeDestructive(
+          request,
+          task,
+          node._currentValue2,
+          childIndex
+        );
+      childIndex = Object.prototype.toString.call(node);
+      throw Error(
+        formatProdErrorMessage(
+          31,
+          "[object Object]" === childIndex
+            ? "object with keys {" + Object.keys(node).join(", ") + "}"
+            : childIndex
+        )
+      );
+    }
+    if ("string" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+    else if ("number" === typeof node || "bigint" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            "" + node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+  }
+}
+function renderChildrenArray(request, task, children, childIndex) {
+  var prevKeyPath = task.keyPath;
+  if (
+    -1 !== childIndex &&
+    ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+    null !== task.replay)
+  ) {
+    for (
+      var replay = task.replay, replayNodes = replay.nodes, j = 0;
+      j < replayNodes.length;
+      j++
+    ) {
+      var node = replayNodes[j];
+      if (node[1] === childIndex) {
+        childIndex = node[2];
+        node = node[3];
+        task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+        try {
+          renderChildrenArray(request, task, children, -1);
+          if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length)
+            throw Error(formatProdErrorMessage(488));
+          task.replay.pendingTasks--;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            (x === SuspenseException || "function" === typeof x.then)
+          )
+            throw x;
+          task.replay.pendingTasks--;
+          children = getThrownInfo(task.componentStack);
+          var boundary = task.blockedBoundary,
+            error = x;
+          children = logRecoverableError(request, error, children);
+          abortRemainingReplayNodes(
+            request,
+            boundary,
+            childIndex,
+            node,
+            error,
+            children
+          );
+        }
+        task.replay = replay;
+        replayNodes.splice(j, 1);
+        break;
+      }
+    }
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  replay = task.treeContext;
+  replayNodes = children.length;
+  if (
+    null !== task.replay &&
+    ((j = task.replay.slots), null !== j && "object" === typeof j)
+  ) {
+    for (childIndex = 0; childIndex < replayNodes; childIndex++)
+      (node = children[childIndex]),
+        (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)),
+        (boundary = j[childIndex]),
+        "number" === typeof boundary
+          ? (resumeNode(request, task, boundary, node, childIndex),
+            delete j[childIndex])
+          : renderNode(request, task, node, childIndex);
+    task.treeContext = replay;
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  for (j = 0; j < replayNodes; j++)
+    (childIndex = children[j]),
+      (task.treeContext = pushTreeContext(replay, replayNodes, j)),
+      renderNode(request, task, childIndex, j);
+  task.treeContext = replay;
+  task.keyPath = prevKeyPath;
+}
+function untrackBoundary(request, boundary) {
+  request = request.trackedPostpones;
+  null !== request &&
+    ((boundary = boundary.trackedContentKeyPath),
+    null !== boundary &&
+      ((boundary = request.workingMap.get(boundary)),
+      void 0 !== boundary &&
+        ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+}
+function spawnNewSuspendedReplayTask(request, task, thenableState) {
+  return createReplayTask(
+    request,
+    thenableState,
+    task.replay,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function spawnNewSuspendedRenderTask(request, task, thenableState) {
+  var segment = task.blockedSegment,
+    newSegment = createPendingSegment(
+      request,
+      segment.chunks.length,
+      null,
+      task.formatContext,
+      segment.lastPushedText,
+      !0
+    );
+  segment.children.push(newSegment);
+  segment.lastPushedText = !1;
+  return createRenderTask(
+    request,
+    thenableState,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    newSegment,
+    task.blockedPreamble,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function renderNode(request, task, node, childIndex) {
+  var previousFormatContext = task.formatContext,
+    previousContext = task.context,
+    previousKeyPath = task.keyPath,
+    previousTreeContext = task.treeContext,
+    previousComponentStack = task.componentStack,
+    segment = task.blockedSegment;
+  if (null === segment)
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue) {
+      if (
+        (resetHooksState(),
+        (node =
+          thrownValue === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedReplayTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedReplayTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  else {
+    var childrenLength = segment.children.length,
+      chunkLength = segment.chunks.length;
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue$48) {
+      if (
+        (resetHooksState(),
+        (segment.children.length = childrenLength),
+        (segment.chunks.length = chunkLength),
+        (node =
+          thrownValue$48 === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue$48),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedRenderTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedRenderTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  }
+  task.formatContext = previousFormatContext;
+  task.context = previousContext;
+  task.keyPath = previousKeyPath;
+  task.treeContext = previousTreeContext;
+  switchContext(previousContext);
+  throw node;
+}
+function abortTaskSoft(task) {
+  var boundary = task.blockedBoundary;
+  task = task.blockedSegment;
+  null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+}
+function abortRemainingReplayNodes(
+  request$jscomp$0,
+  boundary,
+  nodes,
+  slots,
+  error,
+  errorDigest$jscomp$0
+) {
+  for (var i = 0; i < nodes.length; i++) {
+    var node = nodes[i];
+    if (4 === node.length)
+      abortRemainingReplayNodes(
+        request$jscomp$0,
+        boundary,
+        node[2],
+        node[3],
+        error,
+        errorDigest$jscomp$0
+      );
+    else {
+      node = node[5];
+      var request = request$jscomp$0,
+        errorDigest = errorDigest$jscomp$0,
+        resumedBoundary = createSuspenseBoundary(
+          request,
+          new Set(),
+          null,
+          null
+        );
+      resumedBoundary.parentFlushed = !0;
+      resumedBoundary.rootSegmentID = node;
+      resumedBoundary.status = 4;
+      resumedBoundary.errorDigest = errorDigest;
+      resumedBoundary.parentFlushed &&
+        request.clientRenderedBoundaries.push(resumedBoundary);
+    }
+  }
+  nodes.length = 0;
+  if (null !== slots) {
+    if (null === boundary) throw Error(formatProdErrorMessage(487));
+    4 !== boundary.status &&
+      ((boundary.status = 4),
+      (boundary.errorDigest = errorDigest$jscomp$0),
+      boundary.parentFlushed &&
+        request$jscomp$0.clientRenderedBoundaries.push(boundary));
+    if ("object" === typeof slots) for (var index in slots) delete slots[index];
+  }
+}
+function abortTask(task, request, error) {
+  var boundary = task.blockedBoundary,
+    segment = task.blockedSegment;
+  if (null !== segment) {
+    if (6 === segment.status) return;
+    segment.status = 3;
+  }
+  segment = getThrownInfo(task.componentStack);
+  if (null === boundary) {
+    if (13 !== request.status && 14 !== request.status) {
+      boundary = task.replay;
+      if (null === boundary) {
+        logRecoverableError(request, error, segment);
+        fatalError(request, error);
+        return;
+      }
+      boundary.pendingTasks--;
+      0 === boundary.pendingTasks &&
+        0 < boundary.nodes.length &&
+        ((task = logRecoverableError(request, error, segment)),
+        abortRemainingReplayNodes(
+          request,
+          null,
+          boundary.nodes,
+          boundary.slots,
+          error,
+          task
+        ));
+      request.pendingRootTasks--;
+      0 === request.pendingRootTasks && completeShell(request);
+    }
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        ((boundary.status = 4),
+        (task = logRecoverableError(request, error, segment)),
+        (boundary.status = 4),
+        (boundary.errorDigest = task),
+        untrackBoundary(request, boundary),
+        boundary.parentFlushed &&
+          request.clientRenderedBoundaries.push(boundary)),
+      boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+        return abortTask(fallbackTask, request, error);
+      }),
+      boundary.fallbackAbortableTasks.clear();
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function safelyEmitEarlyPreloads(request, shellComplete) {
+  try {
+    var renderState = request.renderState,
+      onHeaders = renderState.onHeaders;
+    if (onHeaders) {
+      var headers = renderState.headers;
+      if (headers) {
+        renderState.headers = null;
+        var linkHeader = headers.preconnects;
+        headers.fontPreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.fontPreloads));
+        headers.highImagePreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.highImagePreloads));
+        if (!shellComplete) {
+          var queueIter = renderState.styles.values(),
+            queueStep = queueIter.next();
+          b: for (
+            ;
+            0 < headers.remainingCapacity && !queueStep.done;
+            queueStep = queueIter.next()
+          )
+            for (
+              var sheetIter = queueStep.value.sheets.values(),
+                sheetStep = sheetIter.next();
+              0 < headers.remainingCapacity && !sheetStep.done;
+              sheetStep = sheetIter.next()
+            ) {
+              var sheet = sheetStep.value,
+                props = sheet.props,
+                key = props.href,
+                props$jscomp$0 = sheet.props,
+                header = getPreloadAsHeader(props$jscomp$0.href, "style", {
+                  crossOrigin: props$jscomp$0.crossOrigin,
+                  integrity: props$jscomp$0.integrity,
+                  nonce: props$jscomp$0.nonce,
+                  type: props$jscomp$0.type,
+                  fetchPriority: props$jscomp$0.fetchPriority,
+                  referrerPolicy: props$jscomp$0.referrerPolicy,
+                  media: props$jscomp$0.media
+                });
+              if (0 <= (headers.remainingCapacity -= header.length + 2))
+                (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                  linkHeader && (linkHeader += ", "),
+                  (linkHeader += header),
+                  (renderState.resets.style[key] =
+                    "string" === typeof props.crossOrigin ||
+                    "string" === typeof props.integrity
+                      ? [props.crossOrigin, props.integrity]
+                      : PRELOAD_NO_CREDS);
+              else break b;
+            }
+        }
+        linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+      }
+    }
+  } catch (error) {
+    logRecoverableError(request, error, {});
+  }
+}
+function completeShell(request) {
+  null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+  null === request.trackedPostpones && preparePreamble(request);
+  request.onShellError = noop;
+  request = request.onShellReady;
+  request();
+}
+function completeAll(request) {
+  safelyEmitEarlyPreloads(
+    request,
+    null === request.trackedPostpones
+      ? !0
+      : null === request.completedRootSegment ||
+          5 !== request.completedRootSegment.status
+  );
+  preparePreamble(request);
+  request = request.onAllReady;
+  request();
+}
+function queueCompletedSegment(boundary, segment) {
+  if (
+    0 === segment.chunks.length &&
+    1 === segment.children.length &&
+    null === segment.children[0].boundary &&
+    -1 === segment.children[0].id
+  ) {
+    var childSegment = segment.children[0];
+    childSegment.id = segment.id;
+    childSegment.parentFlushed = !0;
+    1 === childSegment.status && queueCompletedSegment(boundary, childSegment);
+  } else boundary.completedSegments.push(segment);
+}
+function finishedTask(request, boundary, segment) {
+  if (null === boundary) {
+    if (null !== segment && segment.parentFlushed) {
+      if (null !== request.completedRootSegment)
+        throw Error(formatProdErrorMessage(389));
+      request.completedRootSegment = segment;
+    }
+    request.pendingRootTasks--;
+    0 === request.pendingRootTasks && completeShell(request);
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        (0 === boundary.pendingTasks
+          ? (0 === boundary.status && (boundary.status = 1),
+            null !== segment &&
+              segment.parentFlushed &&
+              1 === segment.status &&
+              queueCompletedSegment(boundary, segment),
+            boundary.parentFlushed &&
+              request.completedBoundaries.push(boundary),
+            1 === boundary.status &&
+              (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request),
+              boundary.fallbackAbortableTasks.clear(),
+              0 === request.pendingRootTasks &&
+                null === request.trackedPostpones &&
+                null !== boundary.contentPreamble &&
+                preparePreamble(request)))
+          : null !== segment &&
+            segment.parentFlushed &&
+            1 === segment.status &&
+            (queueCompletedSegment(boundary, segment),
+            1 === boundary.completedSegments.length &&
+              boundary.parentFlushed &&
+              request.partialBoundaries.push(boundary)));
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function performWork(request$jscomp$2) {
+  if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) {
+    var prevContext = currentActiveSnapshot,
+      prevDispatcher = ReactSharedInternals.H;
+    ReactSharedInternals.H = HooksDispatcher;
+    var prevAsyncDispatcher = ReactSharedInternals.A;
+    ReactSharedInternals.A = DefaultAsyncDispatcher;
+    var prevRequest = currentRequest;
+    currentRequest = request$jscomp$2;
+    var prevResumableState = currentResumableState;
+    currentResumableState = request$jscomp$2.resumableState;
+    try {
+      var pingedTasks = request$jscomp$2.pingedTasks,
+        i;
+      for (i = 0; i < pingedTasks.length; i++) {
+        var task = pingedTasks[i],
+          request = request$jscomp$2,
+          segment = task.blockedSegment;
+        if (null === segment) {
+          var request$jscomp$0 = request;
+          if (0 !== task.replay.pendingTasks) {
+            switchContext(task.context);
+            try {
+              "number" === typeof task.replay.slots
+                ? resumeNode(
+                    request$jscomp$0,
+                    task,
+                    task.replay.slots,
+                    task.node,
+                    task.childIndex
+                  )
+                : retryNode(request$jscomp$0, task);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(formatProdErrorMessage(488));
+              task.replay.pendingTasks--;
+              task.abortSet.delete(task);
+              finishedTask(request$jscomp$0, task.blockedBoundary, null);
+            } catch (thrownValue) {
+              resetHooksState();
+              var x =
+                thrownValue === SuspenseException
+                  ? getSuspendedThenable()
+                  : thrownValue;
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                "function" === typeof x.then
+              ) {
+                var ping = task.ping;
+                x.then(ping, ping);
+                task.thenableState = getThenableStateAfterSuspending();
+              } else {
+                task.replay.pendingTasks--;
+                task.abortSet.delete(task);
+                var errorInfo = getThrownInfo(task.componentStack);
+                request = void 0;
+                var request$jscomp$1 = request$jscomp$0,
+                  boundary = task.blockedBoundary,
+                  error$jscomp$0 =
+                    12 === request$jscomp$0.status
+                      ? request$jscomp$0.fatalError
+                      : x,
+                  replayNodes = task.replay.nodes,
+                  resumeSlots = task.replay.slots;
+                request = logRecoverableError(
+                  request$jscomp$1,
+                  error$jscomp$0,
+                  errorInfo
+                );
+                abortRemainingReplayNodes(
+                  request$jscomp$1,
+                  boundary,
+                  replayNodes,
+                  resumeSlots,
+                  error$jscomp$0,
+                  request
+                );
+                request$jscomp$0.pendingRootTasks--;
+                0 === request$jscomp$0.pendingRootTasks &&
+                  completeShell(request$jscomp$0);
+                request$jscomp$0.allPendingTasks--;
+                0 === request$jscomp$0.allPendingTasks &&
+                  completeAll(request$jscomp$0);
+              }
+            } finally {
+            }
+          }
+        } else if (
+          ((request$jscomp$0 = void 0),
+          (request$jscomp$1 = segment),
+          0 === request$jscomp$1.status)
+        ) {
+          request$jscomp$1.status = 6;
+          switchContext(task.context);
+          var childrenLength = request$jscomp$1.children.length,
+            chunkLength = request$jscomp$1.chunks.length;
+          try {
+            retryNode(request, task),
+              pushSegmentFinale(
+                request$jscomp$1.chunks,
+                request.renderState,
+                request$jscomp$1.lastPushedText,
+                request$jscomp$1.textEmbedded
+              ),
+              task.abortSet.delete(task),
+              (request$jscomp$1.status = 1),
+              finishedTask(request, task.blockedBoundary, request$jscomp$1);
+          } catch (thrownValue) {
+            resetHooksState();
+            request$jscomp$1.children.length = childrenLength;
+            request$jscomp$1.chunks.length = chunkLength;
+            var x$jscomp$0 =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : 12 === request.status
+                  ? request.fatalError
+                  : thrownValue;
+            if (
+              "object" === typeof x$jscomp$0 &&
+              null !== x$jscomp$0 &&
+              "function" === typeof x$jscomp$0.then
+            ) {
+              request$jscomp$1.status = 0;
+              task.thenableState = getThenableStateAfterSuspending();
+              var ping$jscomp$0 = task.ping;
+              x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+            } else {
+              var errorInfo$jscomp$0 = getThrownInfo(task.componentStack);
+              task.abortSet.delete(task);
+              request$jscomp$1.status = 4;
+              var boundary$jscomp$0 = task.blockedBoundary;
+              request$jscomp$0 = logRecoverableError(
+                request,
+                x$jscomp$0,
+                errorInfo$jscomp$0
+              );
+              null === boundary$jscomp$0
+                ? fatalError(request, x$jscomp$0)
+                : (boundary$jscomp$0.pendingTasks--,
+                  4 !== boundary$jscomp$0.status &&
+                    ((boundary$jscomp$0.status = 4),
+                    (boundary$jscomp$0.errorDigest = request$jscomp$0),
+                    untrackBoundary(request, boundary$jscomp$0),
+                    boundary$jscomp$0.parentFlushed &&
+                      request.clientRenderedBoundaries.push(boundary$jscomp$0),
+                    0 === request.pendingRootTasks &&
+                      null === request.trackedPostpones &&
+                      null !== boundary$jscomp$0.contentPreamble &&
+                      preparePreamble(request)));
+              request.allPendingTasks--;
+              0 === request.allPendingTasks && completeAll(request);
+            }
+          } finally {
+          }
+        }
+      }
+      pingedTasks.splice(0, i);
+      null !== request$jscomp$2.destination &&
+        flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination);
+    } catch (error) {
+      logRecoverableError(request$jscomp$2, error, {}),
+        fatalError(request$jscomp$2, error);
+    } finally {
+      (currentResumableState = prevResumableState),
+        (ReactSharedInternals.H = prevDispatcher),
+        (ReactSharedInternals.A = prevAsyncDispatcher),
+        prevDispatcher === HooksDispatcher && switchContext(prevContext),
+        (currentRequest = prevRequest);
+    }
+  }
+}
+function preparePreambleFromSubtree(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  segment.preambleChildren.length &&
+    collectedPreambleSegments.push(segment.preambleChildren);
+  for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+    pendingPreambles =
+      preparePreambleFromSegment(
+        request,
+        segment.children[i],
+        collectedPreambleSegments
+      ) || pendingPreambles;
+  return pendingPreambles;
+}
+function preparePreambleFromSegment(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    );
+  var preamble = boundary.contentPreamble,
+    fallbackPreamble = boundary.fallbackPreamble;
+  if (null === preamble || null === fallbackPreamble) return !1;
+  switch (boundary.status) {
+    case 1:
+      hoistPreambleState(request.renderState, preamble);
+      segment = boundary.completedSegments[0];
+      if (!segment) throw Error(formatProdErrorMessage(391));
+      return preparePreambleFromSubtree(
+        request,
+        segment,
+        collectedPreambleSegments
+      );
+    case 5:
+      if (null !== request.trackedPostpones) return !0;
+    case 4:
+      if (1 === segment.status)
+        return (
+          hoistPreambleState(request.renderState, fallbackPreamble),
+          preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          )
+        );
+    default:
+      return !0;
+  }
+}
+function preparePreamble(request) {
+  if (
+    request.completedRootSegment &&
+    null === request.completedPreambleSegments
+  ) {
+    var collectedPreambleSegments = [],
+      hasPendingPreambles = preparePreambleFromSegment(
+        request,
+        request.completedRootSegment,
+        collectedPreambleSegments
+      ),
+      preamble = request.renderState.preamble;
+    if (
+      !1 === hasPendingPreambles ||
+      (preamble.headChunks && preamble.bodyChunks)
+    )
+      request.completedPreambleSegments = collectedPreambleSegments;
+  }
+}
+function flushSubtree(request, destination, segment, hoistableState) {
+  segment.parentFlushed = !0;
+  switch (segment.status) {
+    case 0:
+      segment.id = request.nextSegmentId++;
+    case 5:
+      return (
+        (hoistableState = segment.id),
+        (segment.lastPushedText = !1),
+        (segment.textEmbedded = !1),
+        (request = request.renderState),
+        destination.push('<template id="'),
+        destination.push(request.placeholderPrefix),
+        (request = hoistableState.toString(16)),
+        destination.push(request),
+        destination.push('"></template>')
+      );
+    case 1:
+      segment.status = 2;
+      var r = !0,
+        chunks = segment.chunks,
+        chunkIdx = 0;
+      segment = segment.children;
+      for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+        for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+          destination.push(chunks[chunkIdx]);
+        r = flushSegment(request, destination, r, hoistableState);
+      }
+      for (; chunkIdx < chunks.length - 1; chunkIdx++)
+        destination.push(chunks[chunkIdx]);
+      chunkIdx < chunks.length && (r = destination.push(chunks[chunkIdx]));
+      return r;
+    default:
+      throw Error(formatProdErrorMessage(390));
+  }
+}
+function flushSegment(request, destination, segment, hoistableState) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return flushSubtree(request, destination, segment, hoistableState);
+  boundary.parentFlushed = !0;
+  if (4 === boundary.status) {
+    if (!request.renderState.generateStaticMarkup) {
+      var errorDigest = boundary.errorDigest;
+      destination.push("\x3c!--$!--\x3e");
+      destination.push("<template");
+      errorDigest &&
+        (destination.push(' data-dgst="'),
+        (errorDigest = escapeTextForBrowser(errorDigest)),
+        destination.push(errorDigest),
+        destination.push('"'));
+      destination.push("></template>");
+    }
+    flushSubtree(request, destination, segment, hoistableState);
+    request.renderState.generateStaticMarkup
+      ? (destination = !0)
+      : ((request = boundary.fallbackPreamble) &&
+          writePreambleContribution(destination, request),
+        (destination = destination.push("\x3c!--/$--\x3e")));
+    return destination;
+  }
+  if (1 !== boundary.status)
+    return (
+      0 === boundary.status &&
+        (boundary.rootSegmentID = request.nextSegmentId++),
+      0 < boundary.completedSegments.length &&
+        request.partialBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      hoistableState &&
+        ((boundary = boundary.fallbackState),
+        boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        boundary.stylesheets.forEach(
+          hoistStylesheetDependency,
+          hoistableState
+        )),
+      flushSubtree(request, destination, segment, hoistableState),
+      destination.push("\x3c!--/$--\x3e")
+    );
+  if (boundary.byteSize > request.progressiveChunkSize)
+    return (
+      (boundary.rootSegmentID = request.nextSegmentId++),
+      request.completedBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      flushSubtree(request, destination, segment, hoistableState),
+      destination.push("\x3c!--/$--\x3e")
+    );
+  hoistableState &&
+    ((segment = boundary.contentState),
+    segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+    segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+  request.renderState.generateStaticMarkup ||
+    destination.push("\x3c!--$--\x3e");
+  segment = boundary.completedSegments;
+  if (1 !== segment.length) throw Error(formatProdErrorMessage(391));
+  flushSegment(request, destination, segment[0], hoistableState);
+  request.renderState.generateStaticMarkup
+    ? (destination = !0)
+    : ((request = boundary.contentPreamble) &&
+        writePreambleContribution(destination, request),
+      (destination = destination.push("\x3c!--/$--\x3e")));
+  return destination;
+}
+function flushSegmentContainer(request, destination, segment, hoistableState) {
+  writeStartSegment(
+    destination,
+    request.renderState,
+    segment.parentFormatContext,
+    segment.id
+  );
+  flushSegment(request, destination, segment, hoistableState);
+  return writeEndSegment(destination, segment.parentFormatContext);
+}
+function flushCompletedBoundary(request, destination, boundary) {
+  for (
+    var completedSegments = boundary.completedSegments, i = 0;
+    i < completedSegments.length;
+    i++
+  )
+    flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      completedSegments[i]
+    );
+  completedSegments.length = 0;
+  writeHoistablesForBoundary(
+    destination,
+    boundary.contentState,
+    request.renderState
+  );
+  completedSegments = request.resumableState;
+  request = request.renderState;
+  i = boundary.rootSegmentID;
+  boundary = boundary.contentState;
+  var requiresStyleInsertion = request.stylesToHoist;
+  request.stylesToHoist = !1;
+  destination.push(request.startInlineScript);
+  requiresStyleInsertion
+    ? 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 10),
+        destination.push(
+          '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+        ))
+      : 0 === (completedSegments.instructions & 8)
+        ? ((completedSegments.instructions |= 8),
+          destination.push(
+            '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+          ))
+        : destination.push('$RR("')
+    : 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 2),
+        destination.push(
+          '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("'
+        ))
+      : destination.push('$RC("');
+  completedSegments = i.toString(16);
+  destination.push(request.boundaryPrefix);
+  destination.push(completedSegments);
+  destination.push('","');
+  destination.push(request.segmentPrefix);
+  destination.push(completedSegments);
+  requiresStyleInsertion
+    ? (destination.push('",'),
+      writeStyleResourceDependenciesInJS(destination, boundary))
+    : destination.push('"');
+  boundary = destination.push(")\x3c/script>");
+  return writeBootstrap(destination, request) && boundary;
+}
+function flushPartiallyCompletedSegment(
+  request,
+  destination,
+  boundary,
+  segment
+) {
+  if (2 === segment.status) return !0;
+  var hoistableState = boundary.contentState,
+    segmentID = segment.id;
+  if (-1 === segmentID) {
+    if (-1 === (segment.id = boundary.rootSegmentID))
+      throw Error(formatProdErrorMessage(392));
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  }
+  if (segmentID === boundary.rootSegmentID)
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  flushSegmentContainer(request, destination, segment, hoistableState);
+  boundary = request.resumableState;
+  request = request.renderState;
+  destination.push(request.startInlineScript);
+  0 === (boundary.instructions & 1)
+    ? ((boundary.instructions |= 1),
+      destination.push(
+        '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("'
+      ))
+    : destination.push('$RS("');
+  destination.push(request.segmentPrefix);
+  segmentID = segmentID.toString(16);
+  destination.push(segmentID);
+  destination.push('","');
+  destination.push(request.placeholderPrefix);
+  destination.push(segmentID);
+  destination = destination.push('")\x3c/script>');
+  return destination;
+}
+function flushCompletedQueues(request, destination) {
+  try {
+    if (!(0 < request.pendingRootTasks)) {
+      var i,
+        completedRootSegment = request.completedRootSegment;
+      if (null !== completedRootSegment) {
+        if (5 === completedRootSegment.status) return;
+        var completedPreambleSegments = request.completedPreambleSegments;
+        if (null === completedPreambleSegments) return;
+        var renderState = request.renderState,
+          preamble = renderState.preamble,
+          htmlChunks = preamble.htmlChunks,
+          headChunks = preamble.headChunks,
+          i$jscomp$0;
+        if (htmlChunks) {
+          for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+            destination.push(htmlChunks[i$jscomp$0]);
+          if (headChunks)
+            for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+              destination.push(headChunks[i$jscomp$0]);
+          else {
+            var chunk = startChunkForTag("head");
+            destination.push(chunk);
+            destination.push(">");
+          }
+        } else if (headChunks)
+          for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+            destination.push(headChunks[i$jscomp$0]);
+        var charsetChunks = renderState.charsetChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++)
+          destination.push(charsetChunks[i$jscomp$0]);
+        charsetChunks.length = 0;
+        renderState.preconnects.forEach(flushResource, destination);
+        renderState.preconnects.clear();
+        var viewportChunks = renderState.viewportChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++)
+          destination.push(viewportChunks[i$jscomp$0]);
+        viewportChunks.length = 0;
+        renderState.fontPreloads.forEach(flushResource, destination);
+        renderState.fontPreloads.clear();
+        renderState.highImagePreloads.forEach(flushResource, destination);
+        renderState.highImagePreloads.clear();
+        renderState.styles.forEach(flushStylesInPreamble, destination);
+        var importMapChunks = renderState.importMapChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++)
+          destination.push(importMapChunks[i$jscomp$0]);
+        importMapChunks.length = 0;
+        renderState.bootstrapScripts.forEach(flushResource, destination);
+        renderState.scripts.forEach(flushResource, destination);
+        renderState.scripts.clear();
+        renderState.bulkPreloads.forEach(flushResource, destination);
+        renderState.bulkPreloads.clear();
+        var hoistableChunks = renderState.hoistableChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++)
+          destination.push(hoistableChunks[i$jscomp$0]);
+        for (
+          renderState = hoistableChunks.length = 0;
+          renderState < completedPreambleSegments.length;
+          renderState++
+        ) {
+          var segments = completedPreambleSegments[renderState];
+          for (preamble = 0; preamble < segments.length; preamble++)
+            flushSegment(request, destination, segments[preamble], null);
+        }
+        var preamble$jscomp$0 = request.renderState.preamble,
+          headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+        if (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) {
+          var chunk$jscomp$0 = endChunkForTag("head");
+          destination.push(chunk$jscomp$0);
+        }
+        var bodyChunks = preamble$jscomp$0.bodyChunks;
+        if (bodyChunks)
+          for (
+            completedPreambleSegments = 0;
+            completedPreambleSegments < bodyChunks.length;
+            completedPreambleSegments++
+          )
+            destination.push(bodyChunks[completedPreambleSegments]);
+        flushSegment(request, destination, completedRootSegment, null);
+        request.completedRootSegment = null;
+        writeBootstrap(destination, request.renderState);
+      }
+      var renderState$jscomp$0 = request.renderState;
+      completedRootSegment = 0;
+      var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < viewportChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        destination.push(viewportChunks$jscomp$0[completedRootSegment]);
+      viewportChunks$jscomp$0.length = 0;
+      renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+      renderState$jscomp$0.preconnects.clear();
+      renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.fontPreloads.clear();
+      renderState$jscomp$0.highImagePreloads.forEach(
+        flushResource,
+        destination
+      );
+      renderState$jscomp$0.highImagePreloads.clear();
+      renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+      renderState$jscomp$0.scripts.forEach(flushResource, destination);
+      renderState$jscomp$0.scripts.clear();
+      renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.bulkPreloads.clear();
+      var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < hoistableChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        destination.push(hoistableChunks$jscomp$0[completedRootSegment]);
+      hoistableChunks$jscomp$0.length = 0;
+      var clientRenderedBoundaries = request.clientRenderedBoundaries;
+      for (i = 0; i < clientRenderedBoundaries.length; i++) {
+        var boundary = clientRenderedBoundaries[i];
+        renderState$jscomp$0 = destination;
+        var resumableState = request.resumableState,
+          renderState$jscomp$1 = request.renderState,
+          id = boundary.rootSegmentID,
+          errorDigest = boundary.errorDigest;
+        renderState$jscomp$0.push(renderState$jscomp$1.startInlineScript);
+        0 === (resumableState.instructions & 4)
+          ? ((resumableState.instructions |= 4),
+            renderState$jscomp$0.push(
+              '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("'
+            ))
+          : renderState$jscomp$0.push('$RX("');
+        renderState$jscomp$0.push(renderState$jscomp$1.boundaryPrefix);
+        var chunk$jscomp$1 = id.toString(16);
+        renderState$jscomp$0.push(chunk$jscomp$1);
+        renderState$jscomp$0.push('"');
+        if (errorDigest) {
+          renderState$jscomp$0.push(",");
+          var chunk$jscomp$2 = escapeJSStringsForInstructionScripts(
+            errorDigest || ""
+          );
+          renderState$jscomp$0.push(chunk$jscomp$2);
+        }
+        var JSCompiler_inline_result =
+          renderState$jscomp$0.push(")\x3c/script>");
+        if (!JSCompiler_inline_result) {
+          request.destination = null;
+          i++;
+          clientRenderedBoundaries.splice(0, i);
+          return;
+        }
+      }
+      clientRenderedBoundaries.splice(0, i);
+      var completedBoundaries = request.completedBoundaries;
+      for (i = 0; i < completedBoundaries.length; i++)
+        if (
+          !flushCompletedBoundary(request, destination, completedBoundaries[i])
+        ) {
+          request.destination = null;
+          i++;
+          completedBoundaries.splice(0, i);
+          return;
+        }
+      completedBoundaries.splice(0, i);
+      var partialBoundaries = request.partialBoundaries;
+      for (i = 0; i < partialBoundaries.length; i++) {
+        var boundary$51 = partialBoundaries[i];
+        a: {
+          clientRenderedBoundaries = request;
+          boundary = destination;
+          var completedSegments = boundary$51.completedSegments;
+          for (
+            JSCompiler_inline_result = 0;
+            JSCompiler_inline_result < completedSegments.length;
+            JSCompiler_inline_result++
+          )
+            if (
+              !flushPartiallyCompletedSegment(
+                clientRenderedBoundaries,
+                boundary,
+                boundary$51,
+                completedSegments[JSCompiler_inline_result]
+              )
+            ) {
+              JSCompiler_inline_result++;
+              completedSegments.splice(0, JSCompiler_inline_result);
+              var JSCompiler_inline_result$jscomp$0 = !1;
+              break a;
+            }
+          completedSegments.splice(0, JSCompiler_inline_result);
+          JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+            boundary,
+            boundary$51.contentState,
+            clientRenderedBoundaries.renderState
+          );
+        }
+        if (!JSCompiler_inline_result$jscomp$0) {
+          request.destination = null;
+          i++;
+          partialBoundaries.splice(0, i);
+          return;
+        }
+      }
+      partialBoundaries.splice(0, i);
+      var largeBoundaries = request.completedBoundaries;
+      for (i = 0; i < largeBoundaries.length; i++)
+        if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) {
+          request.destination = null;
+          i++;
+          largeBoundaries.splice(0, i);
+          return;
+        }
+      largeBoundaries.splice(0, i);
+    }
+  } finally {
+    0 === request.allPendingTasks &&
+      0 === request.pingedTasks.length &&
+      0 === request.clientRenderedBoundaries.length &&
+      0 === request.completedBoundaries.length &&
+      ((request.flushScheduled = !1),
+      (i = request.resumableState),
+      i.hasBody &&
+        ((partialBoundaries = endChunkForTag("body")),
+        destination.push(partialBoundaries)),
+      i.hasHtml && ((i = endChunkForTag("html")), destination.push(i)),
+      (request.status = 14),
+      destination.push(null),
+      (request.destination = null));
+  }
+}
+function enqueueFlush(request) {
+  if (
+    !1 === request.flushScheduled &&
+    0 === request.pingedTasks.length &&
+    null !== request.destination
+  ) {
+    request.flushScheduled = !0;
+    var destination = request.destination;
+    destination
+      ? flushCompletedQueues(request, destination)
+      : (request.flushScheduled = !1);
+  }
+}
+function startFlowing(request, destination) {
+  if (13 === request.status)
+    (request.status = 14), destination.destroy(request.fatalError);
+  else if (14 !== request.status && null === request.destination) {
+    request.destination = destination;
+    try {
+      flushCompletedQueues(request, destination);
+    } catch (error) {
+      logRecoverableError(request, error, {}), fatalError(request, error);
+    }
+  }
+}
+function abort(request, reason) {
+  if (11 === request.status || 10 === request.status) request.status = 12;
+  try {
+    var abortableTasks = request.abortableTasks;
+    if (0 < abortableTasks.size) {
+      var error =
+        void 0 === reason
+          ? Error(formatProdErrorMessage(432))
+          : "object" === typeof reason &&
+              null !== reason &&
+              "function" === typeof reason.then
+            ? Error(formatProdErrorMessage(530))
+            : reason;
+      request.fatalError = error;
+      abortableTasks.forEach(function (task) {
+        return abortTask(task, request, error);
+      });
+      abortableTasks.clear();
+    }
+    null !== request.destination &&
+      flushCompletedQueues(request, request.destination);
+  } catch (error$53) {
+    logRecoverableError(request, error$53, {}), fatalError(request, error$53);
+  }
+}
+function onError() {}
+function renderToStringImpl(
+  children,
+  options,
+  generateStaticMarkup,
+  abortReason
+) {
+  var didFatal = !1,
+    fatalError = null,
+    result = "",
+    readyToStream = !1;
+  options = createResumableState(options ? options.identifierPrefix : void 0);
+  children = createRequest(
+    children,
+    options,
+    createRenderState(options, generateStaticMarkup),
+    createFormatContext(0, null, 0),
+    Infinity,
+    onError,
+    void 0,
+    function () {
+      readyToStream = !0;
+    },
+    void 0,
+    void 0,
+    void 0
+  );
+  children.flushScheduled = null !== children.destination;
+  performWork(children);
+  10 === children.status && (children.status = 11);
+  null === children.trackedPostpones &&
+    safelyEmitEarlyPreloads(children, 0 === children.pendingRootTasks);
+  abort(children, abortReason);
+  startFlowing(children, {
+    push: function (chunk) {
+      null !== chunk && (result += chunk);
+      return !0;
+    },
+    destroy: function (error) {
+      didFatal = !0;
+      fatalError = error;
+    }
+  });
+  if (didFatal && fatalError !== abortReason) throw fatalError;
+  if (!readyToStream) throw Error(formatProdErrorMessage(426));
+  return result;
+}
+exports.renderToStaticMarkup = function (children, options) {
+  return renderToStringImpl(
+    children,
+    options,
+    !0,
+    'The server used "renderToStaticMarkup" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server'
+  );
+};
+exports.renderToString = function (children, options) {
+  return renderToStringImpl(
+    children,
+    options,
+    !1,
+    'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server'
+  );
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9035 @@
+/**
+ * @license React
+ * react-dom-server-legacy.node.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+
+
+ JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
+
+ Copyright (c) 2011 Gary Court
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function styleReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+    }
+    function scriptReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+    }
+    function objectName(object) {
+      return Object.prototype.toString
+        .call(object)
+        .replace(/^\[object (.*)\]$/, function (m, p0) {
+          return p0;
+        });
+    }
+    function describeKeyForErrorMessage(key) {
+      var encodedKey = JSON.stringify(key);
+      return '"' + key + '"' === encodedKey ? key : encodedKey;
+    }
+    function describeValueForErrorMessage(value) {
+      switch (typeof value) {
+        case "string":
+          return JSON.stringify(
+            10 >= value.length ? value : value.slice(0, 10) + "..."
+          );
+        case "object":
+          if (isArrayImpl(value)) return "[...]";
+          if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG)
+            return "client";
+          value = objectName(value);
+          return "Object" === value ? "{...}" : value;
+        case "function":
+          return value.$$typeof === CLIENT_REFERENCE_TAG
+            ? "client"
+            : (value = value.displayName || value.name)
+              ? "function " + value
+              : "function";
+        default:
+          return String(value);
+      }
+    }
+    function describeElementType(type) {
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+      }
+      if ("object" === typeof type)
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeElementType(type.render);
+          case REACT_MEMO_TYPE:
+            return describeElementType(type.type);
+          case REACT_LAZY_TYPE:
+            var payload = type._payload;
+            type = type._init;
+            try {
+              return describeElementType(type(payload));
+            } catch (x) {}
+        }
+      return "";
+    }
+    function describeObjectForErrorMessage(objectOrArray, expandedName) {
+      var objKind = objectName(objectOrArray);
+      if ("Object" !== objKind && "Array" !== objKind) return objKind;
+      var start = -1,
+        length = 0;
+      if (isArrayImpl(objectOrArray))
+        if (jsxChildrenParents.has(objectOrArray)) {
+          var type = jsxChildrenParents.get(objectOrArray);
+          objKind = "<" + describeElementType(type) + ">";
+          for (var i = 0; i < objectOrArray.length; i++) {
+            var value = objectOrArray[i];
+            value =
+              "string" === typeof value
+                ? value
+                : "object" === typeof value && null !== value
+                  ? "{" + describeObjectForErrorMessage(value) + "}"
+                  : "{" + describeValueForErrorMessage(value) + "}";
+            "" + i === expandedName
+              ? ((start = objKind.length),
+                (length = value.length),
+                (objKind += value))
+              : (objKind =
+                  15 > value.length && 40 > objKind.length + value.length
+                    ? objKind + value
+                    : objKind + "{...}");
+          }
+          objKind += "</" + describeElementType(type) + ">";
+        } else {
+          objKind = "[";
+          for (type = 0; type < objectOrArray.length; type++)
+            0 < type && (objKind += ", "),
+              (i = objectOrArray[type]),
+              (i =
+                "object" === typeof i && null !== i
+                  ? describeObjectForErrorMessage(i)
+                  : describeValueForErrorMessage(i)),
+              "" + type === expandedName
+                ? ((start = objKind.length),
+                  (length = i.length),
+                  (objKind += i))
+                : (objKind =
+                    10 > i.length && 40 > objKind.length + i.length
+                      ? objKind + i
+                      : objKind + "...");
+          objKind += "]";
+        }
+      else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE)
+        objKind = "<" + describeElementType(objectOrArray.type) + "/>";
+      else {
+        if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return "client";
+        if (jsxPropsParents.has(objectOrArray)) {
+          objKind = jsxPropsParents.get(objectOrArray);
+          objKind = "<" + (describeElementType(objKind) || "...");
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++) {
+            objKind += " ";
+            value = type[i];
+            objKind += describeKeyForErrorMessage(value) + "=";
+            var _value2 = objectOrArray[value];
+            var _substr2 =
+              value === expandedName &&
+              "object" === typeof _value2 &&
+              null !== _value2
+                ? describeObjectForErrorMessage(_value2)
+                : describeValueForErrorMessage(_value2);
+            "string" !== typeof _value2 && (_substr2 = "{" + _substr2 + "}");
+            value === expandedName
+              ? ((start = objKind.length),
+                (length = _substr2.length),
+                (objKind += _substr2))
+              : (objKind =
+                  10 > _substr2.length && 40 > objKind.length + _substr2.length
+                    ? objKind + _substr2
+                    : objKind + "...");
+          }
+          objKind += ">";
+        } else {
+          objKind = "{";
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++)
+            0 < i && (objKind += ", "),
+              (value = type[i]),
+              (objKind += describeKeyForErrorMessage(value) + ": "),
+              (_value2 = objectOrArray[value]),
+              (_value2 =
+                "object" === typeof _value2 && null !== _value2
+                  ? describeObjectForErrorMessage(_value2)
+                  : describeValueForErrorMessage(_value2)),
+              value === expandedName
+                ? ((start = objKind.length),
+                  (length = _value2.length),
+                  (objKind += _value2))
+                : (objKind =
+                    10 > _value2.length && 40 > objKind.length + _value2.length
+                      ? objKind + _value2
+                      : objKind + "...");
+          objKind += "}";
+        }
+      }
+      return void 0 === expandedName
+        ? objKind
+        : -1 < start && 0 < length
+          ? ((objectOrArray = " ".repeat(start) + "^".repeat(length)),
+            "\n  " + objKind + "\n  " + objectOrArray)
+          : "\n  " + objKind;
+    }
+    function murmurhash3_32_gc(key, seed) {
+      var remainder = key.length & 3;
+      var bytes = key.length - remainder;
+      var h1 = seed;
+      for (seed = 0; seed < bytes; ) {
+        var k1 =
+          (key.charCodeAt(seed) & 255) |
+          ((key.charCodeAt(++seed) & 255) << 8) |
+          ((key.charCodeAt(++seed) & 255) << 16) |
+          ((key.charCodeAt(++seed) & 255) << 24);
+        ++seed;
+        k1 =
+          (3432918353 * (k1 & 65535) +
+            (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295;
+        k1 = (k1 << 15) | (k1 >>> 17);
+        k1 =
+          (461845907 * (k1 & 65535) +
+            (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295;
+        h1 ^= k1;
+        h1 = (h1 << 13) | (h1 >>> 19);
+        h1 =
+          (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295;
+        h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16);
+      }
+      k1 = 0;
+      switch (remainder) {
+        case 3:
+          k1 ^= (key.charCodeAt(seed + 2) & 255) << 16;
+        case 2:
+          k1 ^= (key.charCodeAt(seed + 1) & 255) << 8;
+        case 1:
+          (k1 ^= key.charCodeAt(seed) & 255),
+            (k1 =
+              (3432918353 * (k1 & 65535) +
+                (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+              4294967295),
+            (k1 = (k1 << 15) | (k1 >>> 17)),
+            (h1 ^=
+              (461845907 * (k1 & 65535) +
+                (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+              4294967295);
+      }
+      h1 ^= key.length;
+      h1 ^= h1 >>> 16;
+      h1 =
+        (2246822507 * (h1 & 65535) +
+          (((2246822507 * (h1 >>> 16)) & 65535) << 16)) &
+        4294967295;
+      h1 ^= h1 >>> 13;
+      h1 =
+        (3266489909 * (h1 & 65535) +
+          (((3266489909 * (h1 >>> 16)) & 65535) << 16)) &
+        4294967295;
+      return (h1 ^ (h1 >>> 16)) >>> 0;
+    }
+    function typeName(value) {
+      return (
+        ("function" === typeof Symbol &&
+          Symbol.toStringTag &&
+          value[Symbol.toStringTag]) ||
+        value.constructor.name ||
+        "Object"
+      );
+    }
+    function willCoercionThrow(value) {
+      try {
+        return testStringCoercion(value), !1;
+      } catch (e) {
+        return !0;
+      }
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkAttributeStringCoercion(value, attributeName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",
+            attributeName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkCSSPropertyStringCoercion(value, propName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",
+            propName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkHtmlStringCoercion(value) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.",
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function isAttributeNameSafe(attributeName) {
+      if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+        return !0;
+      if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))
+        return !1;
+      if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+        return (validatedAttributeNameCache[attributeName] = !0);
+      illegalAttributeNameCache[attributeName] = !0;
+      console.error("Invalid attribute name: `%s`", attributeName);
+      return !1;
+    }
+    function checkControlledValueProps(tagName, props) {
+      hasReadOnlyValue[props.type] ||
+        props.onChange ||
+        props.onInput ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.value ||
+        ("select" === tagName
+          ? console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`."
+            )
+          : console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."
+            ));
+      props.onChange ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.checked ||
+        console.error(
+          "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`."
+        );
+    }
+    function validateProperty$1(tagName, name) {
+      if (
+        hasOwnProperty.call(warnedProperties$1, name) &&
+        warnedProperties$1[name]
+      )
+        return !0;
+      if (rARIACamel$1.test(name)) {
+        tagName = "aria-" + name.slice(4).toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.",
+              name
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+        if (name !== tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. Did you mean `%s`?",
+              name,
+              tagName
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+      }
+      if (rARIA$1.test(name)) {
+        tagName = name.toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName) return (warnedProperties$1[name] = !0), !1;
+        name !== tagName &&
+          (console.error(
+            "Unknown ARIA attribute `%s`. Did you mean `%s`?",
+            name,
+            tagName
+          ),
+          (warnedProperties$1[name] = !0));
+      }
+      return !0;
+    }
+    function validateProperties$2(type, props) {
+      var invalidProps = [],
+        key;
+      for (key in props)
+        validateProperty$1(type, key) || invalidProps.push(key);
+      props = invalidProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === invalidProps.length
+        ? console.error(
+            "Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          )
+        : 1 < invalidProps.length &&
+          console.error(
+            "Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          );
+    }
+    function validateProperty(tagName, name, value, eventRegistry) {
+      if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])
+        return !0;
+      var lowerCasedName = name.toLowerCase();
+      if ("onfocusin" === lowerCasedName || "onfocusout" === lowerCasedName)
+        return (
+          console.error(
+            "React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "function" === typeof value &&
+        (("form" === tagName && "action" === name) ||
+          ("input" === tagName && "formAction" === name) ||
+          ("button" === tagName && "formAction" === name))
+      )
+        return !0;
+      if (null != eventRegistry) {
+        tagName = eventRegistry.possibleRegistrationNames;
+        if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))
+          return !0;
+        eventRegistry = tagName.hasOwnProperty(lowerCasedName)
+          ? tagName[lowerCasedName]
+          : null;
+        if (null != eventRegistry)
+          return (
+            console.error(
+              "Invalid event handler property `%s`. Did you mean `%s`?",
+              name,
+              eventRegistry
+            ),
+            (warnedProperties[name] = !0)
+          );
+        if (EVENT_NAME_REGEX.test(name))
+          return (
+            console.error(
+              "Unknown event handler property `%s`. It will be ignored.",
+              name
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (EVENT_NAME_REGEX.test(name))
+        return (
+          INVALID_EVENT_NAME_REGEX.test(name) &&
+            console.error(
+              "Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.",
+              name
+            ),
+          (warnedProperties[name] = !0)
+        );
+      if (rARIA.test(name) || rARIACamel.test(name)) return !0;
+      if ("innerhtml" === lowerCasedName)
+        return (
+          console.error(
+            "Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("aria" === lowerCasedName)
+        return (
+          console.error(
+            "The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "is" === lowerCasedName &&
+        null !== value &&
+        void 0 !== value &&
+        "string" !== typeof value
+      )
+        return (
+          console.error(
+            "Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.",
+            typeof value
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("number" === typeof value && isNaN(value))
+        return (
+          console.error(
+            "Received NaN for the `%s` attribute. If this is expected, cast the value to a string.",
+            name
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
+        if (
+          ((lowerCasedName = possibleStandardNames[lowerCasedName]),
+          lowerCasedName !== name)
+        )
+          return (
+            console.error(
+              "Invalid DOM property `%s`. Did you mean `%s`?",
+              name,
+              lowerCasedName
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (name !== lowerCasedName)
+        return (
+          console.error(
+            "React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.",
+            name,
+            lowerCasedName
+          ),
+          (warnedProperties[name] = !0)
+        );
+      switch (name) {
+        case "dangerouslySetInnerHTML":
+        case "children":
+        case "style":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "ref":
+          return !0;
+        case "innerText":
+        case "textContent":
+          return !0;
+      }
+      switch (typeof value) {
+        case "boolean":
+          switch (name) {
+            case "autoFocus":
+            case "checked":
+            case "multiple":
+            case "muted":
+            case "selected":
+            case "contentEditable":
+            case "spellCheck":
+            case "draggable":
+            case "value":
+            case "autoReverse":
+            case "externalResourcesRequired":
+            case "focusable":
+            case "preserveAlpha":
+            case "allowFullScreen":
+            case "async":
+            case "autoPlay":
+            case "controls":
+            case "default":
+            case "defer":
+            case "disabled":
+            case "disablePictureInPicture":
+            case "disableRemotePlayback":
+            case "formNoValidate":
+            case "hidden":
+            case "loop":
+            case "noModule":
+            case "noValidate":
+            case "open":
+            case "playsInline":
+            case "readOnly":
+            case "required":
+            case "reversed":
+            case "scoped":
+            case "seamless":
+            case "itemScope":
+            case "capture":
+            case "download":
+            case "inert":
+              return !0;
+            default:
+              lowerCasedName = name.toLowerCase().slice(0, 5);
+              if ("data-" === lowerCasedName || "aria-" === lowerCasedName)
+                return !0;
+              value
+                ? console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name
+                  )
+                : console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name,
+                    name,
+                    name
+                  );
+              return (warnedProperties[name] = !0);
+          }
+        case "function":
+        case "symbol":
+          return (warnedProperties[name] = !0), !1;
+        case "string":
+          if ("false" === value || "true" === value) {
+            switch (name) {
+              case "checked":
+              case "selected":
+              case "multiple":
+              case "muted":
+              case "allowFullScreen":
+              case "async":
+              case "autoPlay":
+              case "controls":
+              case "default":
+              case "defer":
+              case "disabled":
+              case "disablePictureInPicture":
+              case "disableRemotePlayback":
+              case "formNoValidate":
+              case "hidden":
+              case "loop":
+              case "noModule":
+              case "noValidate":
+              case "open":
+              case "playsInline":
+              case "readOnly":
+              case "required":
+              case "reversed":
+              case "scoped":
+              case "seamless":
+              case "itemScope":
+              case "inert":
+                break;
+              default:
+                return !0;
+            }
+            console.error(
+              "Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?",
+              value,
+              name,
+              "false" === value
+                ? "The browser will interpret it as a truthy value."
+                : 'Although this works, it will not work as expected if you pass the string "false".',
+              name,
+              value
+            );
+            warnedProperties[name] = !0;
+          }
+      }
+      return !0;
+    }
+    function warnUnknownProperties(type, props, eventRegistry) {
+      var unknownProps = [],
+        key;
+      for (key in props)
+        validateProperty(type, key, props[key], eventRegistry) ||
+          unknownProps.push(key);
+      props = unknownProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === unknownProps.length
+        ? console.error(
+            "Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          )
+        : 1 < unknownProps.length &&
+          console.error(
+            "Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          );
+    }
+    function camelize(string) {
+      return string.replace(hyphenPattern, function (_, character) {
+        return character.toUpperCase();
+      });
+    }
+    function escapeTextForBrowser(text) {
+      if (
+        "boolean" === typeof text ||
+        "number" === typeof text ||
+        "bigint" === typeof text
+      )
+        return "" + text;
+      checkHtmlStringCoercion(text);
+      text = "" + text;
+      var match = matchHtmlRegExp.exec(text);
+      if (match) {
+        var html = "",
+          index,
+          lastIndex = 0;
+        for (index = match.index; index < text.length; index++) {
+          switch (text.charCodeAt(index)) {
+            case 34:
+              match = "&quot;";
+              break;
+            case 38:
+              match = "&amp;";
+              break;
+            case 39:
+              match = "&#x27;";
+              break;
+            case 60:
+              match = "&lt;";
+              break;
+            case 62:
+              match = "&gt;";
+              break;
+            default:
+              continue;
+          }
+          lastIndex !== index && (html += text.slice(lastIndex, index));
+          lastIndex = index + 1;
+          html += match;
+        }
+        text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+      }
+      return text;
+    }
+    function sanitizeURL(url) {
+      return isJavaScriptProtocol.test("" + url)
+        ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+        : url;
+    }
+    function escapeEntireInlineScriptContent(scriptText) {
+      checkHtmlStringCoercion(scriptText);
+      return ("" + scriptText).replace(scriptRegex, scriptReplacer);
+    }
+    function createResumableState(
+      identifierPrefix,
+      externalRuntimeConfig,
+      bootstrapScriptContent,
+      bootstrapScripts,
+      bootstrapModules
+    ) {
+      return {
+        idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+        nextFormID: 0,
+        streamingFormat: 0,
+        bootstrapScriptContent: bootstrapScriptContent,
+        bootstrapScripts: bootstrapScripts,
+        bootstrapModules: bootstrapModules,
+        instructions: NothingSent,
+        hasBody: !1,
+        hasHtml: !1,
+        unknownResources: {},
+        dnsResources: {},
+        connectResources: { default: {}, anonymous: {}, credentials: {} },
+        imageResources: {},
+        styleResources: {},
+        scriptResources: {},
+        moduleUnknownResources: {},
+        moduleScriptResources: {}
+      };
+    }
+    function createPreambleState() {
+      return {
+        htmlChunks: null,
+        headChunks: null,
+        bodyChunks: null,
+        contribution: NoContribution
+      };
+    }
+    function createFormatContext(insertionMode, selectedValue, tagScope) {
+      return {
+        insertionMode: insertionMode,
+        selectedValue: selectedValue,
+        tagScope: tagScope
+      };
+    }
+    function getChildFormatContext(parentContext, type, props) {
+      switch (type) {
+        case "noscript":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 1
+          );
+        case "select":
+          return createFormatContext(
+            HTML_MODE,
+            null != props.value ? props.value : props.defaultValue,
+            parentContext.tagScope
+          );
+        case "svg":
+          return createFormatContext(SVG_MODE, null, parentContext.tagScope);
+        case "picture":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 2
+          );
+        case "math":
+          return createFormatContext(MATHML_MODE, null, parentContext.tagScope);
+        case "foreignObject":
+          return createFormatContext(HTML_MODE, null, parentContext.tagScope);
+        case "table":
+          return createFormatContext(
+            HTML_TABLE_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "thead":
+        case "tbody":
+        case "tfoot":
+          return createFormatContext(
+            HTML_TABLE_BODY_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "colgroup":
+          return createFormatContext(
+            HTML_COLGROUP_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "tr":
+          return createFormatContext(
+            HTML_TABLE_ROW_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "head":
+          if (parentContext.insertionMode < HTML_MODE)
+            return createFormatContext(
+              HTML_HEAD_MODE,
+              null,
+              parentContext.tagScope
+            );
+          break;
+        case "html":
+          if (parentContext.insertionMode === ROOT_HTML_MODE)
+            return createFormatContext(
+              HTML_HTML_MODE,
+              null,
+              parentContext.tagScope
+            );
+      }
+      return parentContext.insertionMode >= HTML_TABLE_MODE ||
+        parentContext.insertionMode < HTML_MODE
+        ? createFormatContext(HTML_MODE, null, parentContext.tagScope)
+        : parentContext;
+    }
+    function pushStyleAttribute(target, style) {
+      if ("object" !== typeof style)
+        throw Error(
+          "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+        );
+      var isFirst = !0,
+        styleName;
+      for (styleName in style)
+        if (hasOwnProperty.call(style, styleName)) {
+          var styleValue = style[styleName];
+          if (
+            null != styleValue &&
+            "boolean" !== typeof styleValue &&
+            "" !== styleValue
+          ) {
+            if (0 === styleName.indexOf("--")) {
+              var nameChunk = escapeTextForBrowser(styleName);
+              checkCSSPropertyStringCoercion(styleValue, styleName);
+              styleValue = escapeTextForBrowser(("" + styleValue).trim());
+            } else {
+              nameChunk = styleName;
+              var value = styleValue;
+              if (-1 < nameChunk.indexOf("-")) {
+                var name = nameChunk;
+                (warnedStyleNames.hasOwnProperty(name) &&
+                  warnedStyleNames[name]) ||
+                  ((warnedStyleNames[name] = !0),
+                  console.error(
+                    "Unsupported style property %s. Did you mean %s?",
+                    name,
+                    camelize(name.replace(msPattern$1, "ms-"))
+                  ));
+              } else if (badVendoredStyleNamePattern.test(nameChunk))
+                (name = nameChunk),
+                  (warnedStyleNames.hasOwnProperty(name) &&
+                    warnedStyleNames[name]) ||
+                    ((warnedStyleNames[name] = !0),
+                    console.error(
+                      "Unsupported vendor-prefixed style property %s. Did you mean %s?",
+                      name,
+                      name.charAt(0).toUpperCase() + name.slice(1)
+                    ));
+              else if (badStyleValueWithSemicolonPattern.test(value)) {
+                name = nameChunk;
+                var value$jscomp$0 = value;
+                (warnedStyleValues.hasOwnProperty(value$jscomp$0) &&
+                  warnedStyleValues[value$jscomp$0]) ||
+                  ((warnedStyleValues[value$jscomp$0] = !0),
+                  console.error(
+                    'Style property values shouldn\'t contain a semicolon. Try "%s: %s" instead.',
+                    name,
+                    value$jscomp$0.replace(
+                      badStyleValueWithSemicolonPattern,
+                      ""
+                    )
+                  ));
+              }
+              "number" === typeof value &&
+                (isNaN(value)
+                  ? warnedForNaNValue ||
+                    ((warnedForNaNValue = !0),
+                    console.error(
+                      "`NaN` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    ))
+                  : isFinite(value) ||
+                    warnedForInfinityValue ||
+                    ((warnedForInfinityValue = !0),
+                    console.error(
+                      "`Infinity` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    )));
+              nameChunk = styleName;
+              value = styleNameCache.get(nameChunk);
+              void 0 !== value
+                ? (nameChunk = value)
+                : ((value = escapeTextForBrowser(
+                    nameChunk
+                      .replace(uppercasePattern, "-$1")
+                      .toLowerCase()
+                      .replace(msPattern, "-ms-")
+                  )),
+                  styleNameCache.set(nameChunk, value),
+                  (nameChunk = value));
+              "number" === typeof styleValue
+                ? (styleValue =
+                    0 === styleValue || unitlessNumbers.has(styleName)
+                      ? "" + styleValue
+                      : styleValue + "px")
+                : (checkCSSPropertyStringCoercion(styleValue, styleName),
+                  (styleValue = escapeTextForBrowser(
+                    ("" + styleValue).trim()
+                  )));
+            }
+            isFirst
+              ? ((isFirst = !1),
+                target.push(
+                  styleAttributeStart,
+                  nameChunk,
+                  styleAssign,
+                  styleValue
+                ))
+              : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+          }
+        }
+      isFirst || target.push(attributeEnd);
+    }
+    function pushBooleanAttribute(target, name, value) {
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(attributeSeparator, name, attributeEmptyString);
+    }
+    function pushStringAttribute(target, name, value) {
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        "boolean" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          name,
+          attributeAssign,
+          escapeTextForBrowser(value),
+          attributeEnd
+        );
+    }
+    function pushAdditionalFormField(value, key) {
+      this.push('<input type="hidden"');
+      validateAdditionalFormField(value);
+      pushStringAttribute(this, "name", key);
+      pushStringAttribute(this, "value", value);
+      this.push(endOfStartTagSelfClosing);
+    }
+    function validateAdditionalFormField(value) {
+      if ("string" !== typeof value)
+        throw Error(
+          "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+        );
+    }
+    function getCustomFormFields(resumableState, formAction) {
+      if ("function" === typeof formAction.$$FORM_ACTION) {
+        var id = resumableState.nextFormID++;
+        resumableState = resumableState.idPrefix + id;
+        try {
+          var customFields = formAction.$$FORM_ACTION(resumableState);
+          if (customFields) {
+            var formData = customFields.data;
+            null != formData && formData.forEach(validateAdditionalFormField);
+          }
+          return customFields;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            "function" === typeof x.then
+          )
+            throw x;
+          console.error(
+            "Failed to serialize an action for progressive enhancement:\n%s",
+            x
+          );
+        }
+      }
+      return null;
+    }
+    function pushFormActionAttribute(
+      target,
+      resumableState,
+      renderState,
+      formAction,
+      formEncType,
+      formMethod,
+      formTarget,
+      name
+    ) {
+      var formData = null;
+      if ("function" === typeof formAction) {
+        null === name ||
+          didWarnFormActionName ||
+          ((didWarnFormActionName = !0),
+          console.error(
+            'Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'
+          ));
+        (null === formEncType && null === formMethod) ||
+          didWarnFormActionMethod ||
+          ((didWarnFormActionMethod = !0),
+          console.error(
+            "Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden."
+          ));
+        null === formTarget ||
+          didWarnFormActionTarget ||
+          ((didWarnFormActionTarget = !0),
+          console.error(
+            "Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window."
+          ));
+        var customFields = getCustomFormFields(resumableState, formAction);
+        null !== customFields
+          ? ((name = customFields.name),
+            (formAction = customFields.action || ""),
+            (formEncType = customFields.encType),
+            (formMethod = customFields.method),
+            (formTarget = customFields.target),
+            (formData = customFields.data))
+          : (target.push(
+              attributeSeparator,
+              "formAction",
+              attributeAssign,
+              actionJavaScriptURL,
+              attributeEnd
+            ),
+            (formTarget = formMethod = formEncType = formAction = name = null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != name && pushAttribute(target, "name", name);
+      null != formAction && pushAttribute(target, "formAction", formAction);
+      null != formEncType && pushAttribute(target, "formEncType", formEncType);
+      null != formMethod && pushAttribute(target, "formMethod", formMethod);
+      null != formTarget && pushAttribute(target, "formTarget", formTarget);
+      return formData;
+    }
+    function pushAttribute(target, name, value) {
+      switch (name) {
+        case "className":
+          pushStringAttribute(target, "class", value);
+          break;
+        case "tabIndex":
+          pushStringAttribute(target, "tabindex", value);
+          break;
+        case "dir":
+        case "role":
+        case "viewBox":
+        case "width":
+        case "height":
+          pushStringAttribute(target, name, value);
+          break;
+        case "style":
+          pushStyleAttribute(target, value);
+          break;
+        case "src":
+        case "href":
+          if ("" === value) {
+            "src" === name
+              ? console.error(
+                  'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                )
+              : console.error(
+                  'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                );
+            break;
+          }
+        case "action":
+        case "formAction":
+          if (
+            null == value ||
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            name,
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+          break;
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "ref":
+          break;
+        case "autoFocus":
+        case "multiple":
+        case "muted":
+          pushBooleanAttribute(target, name.toLowerCase(), value);
+          break;
+        case "xlinkHref":
+          if (
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            "xlink:href",
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+          break;
+        case "contentEditable":
+        case "spellCheck":
+        case "draggable":
+        case "value":
+        case "autoReverse":
+        case "externalResourcesRequired":
+        case "focusable":
+        case "preserveAlpha":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(
+              attributeSeparator,
+              name,
+              attributeAssign,
+              escapeTextForBrowser(value),
+              attributeEnd
+            );
+          break;
+        case "inert":
+          "" !== value ||
+            didWarnForNewBooleanPropsWithEmptyValue[name] ||
+            ((didWarnForNewBooleanPropsWithEmptyValue[name] = !0),
+            console.error(
+              "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+              name
+            ));
+        case "allowFullScreen":
+        case "async":
+        case "autoPlay":
+        case "controls":
+        case "default":
+        case "defer":
+        case "disabled":
+        case "disablePictureInPicture":
+        case "disableRemotePlayback":
+        case "formNoValidate":
+        case "hidden":
+        case "loop":
+        case "noModule":
+        case "noValidate":
+        case "open":
+        case "playsInline":
+        case "readOnly":
+        case "required":
+        case "reversed":
+        case "scoped":
+        case "seamless":
+        case "itemScope":
+          value &&
+            "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(attributeSeparator, name, attributeEmptyString);
+          break;
+        case "capture":
+        case "download":
+          !0 === value
+            ? target.push(attributeSeparator, name, attributeEmptyString)
+            : !1 !== value &&
+              "function" !== typeof value &&
+              "symbol" !== typeof value &&
+              target.push(
+                attributeSeparator,
+                name,
+                attributeAssign,
+                escapeTextForBrowser(value),
+                attributeEnd
+              );
+          break;
+        case "cols":
+        case "rows":
+        case "size":
+        case "span":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            !isNaN(value) &&
+            1 <= value &&
+            target.push(
+              attributeSeparator,
+              name,
+              attributeAssign,
+              escapeTextForBrowser(value),
+              attributeEnd
+            );
+          break;
+        case "rowSpan":
+        case "start":
+          "function" === typeof value ||
+            "symbol" === typeof value ||
+            isNaN(value) ||
+            target.push(
+              attributeSeparator,
+              name,
+              attributeAssign,
+              escapeTextForBrowser(value),
+              attributeEnd
+            );
+          break;
+        case "xlinkActuate":
+          pushStringAttribute(target, "xlink:actuate", value);
+          break;
+        case "xlinkArcrole":
+          pushStringAttribute(target, "xlink:arcrole", value);
+          break;
+        case "xlinkRole":
+          pushStringAttribute(target, "xlink:role", value);
+          break;
+        case "xlinkShow":
+          pushStringAttribute(target, "xlink:show", value);
+          break;
+        case "xlinkTitle":
+          pushStringAttribute(target, "xlink:title", value);
+          break;
+        case "xlinkType":
+          pushStringAttribute(target, "xlink:type", value);
+          break;
+        case "xmlBase":
+          pushStringAttribute(target, "xml:base", value);
+          break;
+        case "xmlLang":
+          pushStringAttribute(target, "xml:lang", value);
+          break;
+        case "xmlSpace":
+          pushStringAttribute(target, "xml:space", value);
+          break;
+        default:
+          if (
+            !(2 < name.length) ||
+            ("o" !== name[0] && "O" !== name[0]) ||
+            ("n" !== name[1] && "N" !== name[1])
+          )
+            if (
+              ((name = aliases.get(name) || name), isAttributeNameSafe(name))
+            ) {
+              switch (typeof value) {
+                case "function":
+                case "symbol":
+                  return;
+                case "boolean":
+                  var prefix = name.toLowerCase().slice(0, 5);
+                  if ("data-" !== prefix && "aria-" !== prefix) return;
+              }
+              target.push(
+                attributeSeparator,
+                name,
+                attributeAssign,
+                escapeTextForBrowser(value),
+                attributeEnd
+              );
+            }
+      }
+    }
+    function pushInnerHTML(target, innerHTML, children) {
+      if (null != innerHTML) {
+        if (null != children)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        innerHTML = innerHTML.__html;
+        null !== innerHTML &&
+          void 0 !== innerHTML &&
+          (checkHtmlStringCoercion(innerHTML), target.push("" + innerHTML));
+      }
+    }
+    function checkSelectProp(props, propName) {
+      var value = props[propName];
+      null != value &&
+        ((value = isArrayImpl(value)),
+        props.multiple && !value
+          ? console.error(
+              "The `%s` prop supplied to <select> must be an array if `multiple` is true.",
+              propName
+            )
+          : !props.multiple &&
+            value &&
+            console.error(
+              "The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.",
+              propName
+            ));
+    }
+    function flattenOptionChildren(children) {
+      var content = "";
+      React.Children.forEach(children, function (child) {
+        null != child &&
+          ((content += child),
+          didWarnInvalidOptionChildren ||
+            "string" === typeof child ||
+            "number" === typeof child ||
+            "bigint" === typeof child ||
+            ((didWarnInvalidOptionChildren = !0),
+            console.error(
+              "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>."
+            )));
+      });
+      return content;
+    }
+    function injectFormReplayingRuntime(resumableState, renderState) {
+      (resumableState.instructions & 16) === NothingSent &&
+        ((resumableState.instructions |= 16),
+        renderState.bootstrapChunks.unshift(
+          renderState.startInlineScript,
+          formReplayingRuntimeScript,
+          "\x3c/script>"
+        ));
+    }
+    function pushLinkImpl(target, props) {
+      target.push(startChunkForTag("link"));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function escapeStyleTextContent(styleText) {
+      checkHtmlStringCoercion(styleText);
+      return ("" + styleText).replace(styleRegex, styleReplacer);
+    }
+    function pushSelfClosing(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  tag +
+                    " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function pushTitleImpl(target, props) {
+      target.push(startChunkForTag("title"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      props = Array.isArray(children)
+        ? 2 > children.length
+          ? children[0]
+          : null
+        : children;
+      "function" !== typeof props &&
+        "symbol" !== typeof props &&
+        null !== props &&
+        void 0 !== props &&
+        target.push(escapeTextForBrowser("" + props));
+      pushInnerHTML(target, innerHTML, children);
+      target.push(endChunkForTag("title"));
+      return null;
+    }
+    function pushScriptImpl(target, props) {
+      target.push(startChunkForTag("script"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      null != children &&
+        "string" !== typeof children &&
+        ((props =
+          "number" === typeof children
+            ? "a number for children"
+            : Array.isArray(children)
+              ? "an array for children"
+              : "something unexpected for children"),
+        console.error(
+          "A script element was rendered with %s. If script element has children it must be a single string. Consider using dangerouslySetInnerHTML or passing a plain string as children.",
+          props
+        ));
+      pushInnerHTML(target, innerHTML, children);
+      "string" === typeof children &&
+        target.push(escapeEntireInlineScriptContent(children));
+      target.push(endChunkForTag("script"));
+      return null;
+    }
+    function pushStartSingletonElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return tag;
+    }
+    function pushStartGenericElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return "string" === typeof tag
+        ? (target.push(escapeTextForBrowser(tag)), null)
+        : tag;
+    }
+    function startChunkForTag(tag) {
+      var tagStartChunk = validatedTagCache.get(tag);
+      if (void 0 === tagStartChunk) {
+        if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+        tagStartChunk = "<" + tag;
+        validatedTagCache.set(tag, tagStartChunk);
+      }
+      return tagStartChunk;
+    }
+    function pushStartInstance(
+      target$jscomp$0,
+      type,
+      props,
+      resumableState,
+      renderState,
+      preambleState,
+      hoistableState,
+      formatContext,
+      textEmbedded,
+      isFallback
+    ) {
+      validateProperties$2(type, props);
+      ("input" !== type && "textarea" !== type && "select" !== type) ||
+        null == props ||
+        null !== props.value ||
+        didWarnValueNull ||
+        ((didWarnValueNull = !0),
+        "select" === type && props.multiple
+          ? console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.",
+              type
+            )
+          : console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.",
+              type
+            ));
+      b: if (-1 === type.indexOf("-")) var JSCompiler_inline_result = !1;
+      else
+        switch (type) {
+          case "annotation-xml":
+          case "color-profile":
+          case "font-face":
+          case "font-face-src":
+          case "font-face-uri":
+          case "font-face-format":
+          case "font-face-name":
+          case "missing-glyph":
+            JSCompiler_inline_result = !1;
+            break b;
+          default:
+            JSCompiler_inline_result = !0;
+        }
+      JSCompiler_inline_result ||
+        "string" === typeof props.is ||
+        warnUnknownProperties(type, props, null);
+      !props.suppressContentEditableWarning &&
+        props.contentEditable &&
+        null != props.children &&
+        console.error(
+          "A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."
+        );
+      formatContext.insertionMode !== SVG_MODE &&
+        formatContext.insertionMode !== MATHML_MODE &&
+        -1 === type.indexOf("-") &&
+        type.toLowerCase() !== type &&
+        console.error(
+          "<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.",
+          type
+        );
+      switch (type) {
+        case "div":
+        case "span":
+        case "svg":
+        case "path":
+          break;
+        case "a":
+          target$jscomp$0.push(startChunkForTag("a"));
+          var children = null,
+            innerHTML = null,
+            propKey;
+          for (propKey in props)
+            if (hasOwnProperty.call(props, propKey)) {
+              var propValue = props[propKey];
+              if (null != propValue)
+                switch (propKey) {
+                  case "children":
+                    children = propValue;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML = propValue;
+                    break;
+                  case "href":
+                    "" === propValue
+                      ? pushStringAttribute(target$jscomp$0, "href", "")
+                      : pushAttribute(target$jscomp$0, propKey, propValue);
+                    break;
+                  default:
+                    pushAttribute(target$jscomp$0, propKey, propValue);
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML, children);
+          if ("string" === typeof children) {
+            target$jscomp$0.push(escapeTextForBrowser(children));
+            var JSCompiler_inline_result$jscomp$0 = null;
+          } else JSCompiler_inline_result$jscomp$0 = children;
+          return JSCompiler_inline_result$jscomp$0;
+        case "g":
+        case "p":
+        case "li":
+          break;
+        case "select":
+          checkControlledValueProps("select", props);
+          checkSelectProp(props, "value");
+          checkSelectProp(props, "defaultValue");
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultSelectValue ||
+            (console.error(
+              "Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultSelectValue = !0));
+          target$jscomp$0.push(startChunkForTag("select"));
+          var children$jscomp$0 = null,
+            innerHTML$jscomp$0 = null,
+            propKey$jscomp$0;
+          for (propKey$jscomp$0 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+              var propValue$jscomp$0 = props[propKey$jscomp$0];
+              if (null != propValue$jscomp$0)
+                switch (propKey$jscomp$0) {
+                  case "children":
+                    children$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "defaultValue":
+                  case "value":
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$0,
+                      propValue$jscomp$0
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+          return children$jscomp$0;
+        case "option":
+          var selectedValue = formatContext.selectedValue;
+          target$jscomp$0.push(startChunkForTag("option"));
+          var children$jscomp$1 = null,
+            value = null,
+            selected = null,
+            innerHTML$jscomp$1 = null,
+            propKey$jscomp$1;
+          for (propKey$jscomp$1 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+              var propValue$jscomp$1 = props[propKey$jscomp$1];
+              if (null != propValue$jscomp$1)
+                switch (propKey$jscomp$1) {
+                  case "children":
+                    children$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "selected":
+                    selected = propValue$jscomp$1;
+                    didWarnSelectedSetOnOption ||
+                      (console.error(
+                        "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>."
+                      ),
+                      (didWarnSelectedSetOnOption = !0));
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "value":
+                    value = propValue$jscomp$1;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$1,
+                      propValue$jscomp$1
+                    );
+                }
+            }
+          if (null != selectedValue) {
+            if (null !== value) {
+              checkAttributeStringCoercion(value, "value");
+              var stringValue = "" + value;
+            } else
+              null === innerHTML$jscomp$1 ||
+                didWarnInvalidOptionInnerHTML ||
+                ((didWarnInvalidOptionInnerHTML = !0),
+                console.error(
+                  "Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected."
+                )),
+                (stringValue = flattenOptionChildren(children$jscomp$1));
+            if (isArrayImpl(selectedValue))
+              for (var i = 0; i < selectedValue.length; i++) {
+                if (
+                  (checkAttributeStringCoercion(selectedValue[i], "value"),
+                  "" + selectedValue[i] === stringValue)
+                ) {
+                  target$jscomp$0.push(' selected=""');
+                  break;
+                }
+              }
+            else
+              checkAttributeStringCoercion(selectedValue, "select.value"),
+                "" + selectedValue === stringValue &&
+                  target$jscomp$0.push(' selected=""');
+          } else selected && target$jscomp$0.push(' selected=""');
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+          return children$jscomp$1;
+        case "textarea":
+          checkControlledValueProps("textarea", props);
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultTextareaValue ||
+            (console.error(
+              "Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultTextareaValue = !0));
+          target$jscomp$0.push(startChunkForTag("textarea"));
+          var value$jscomp$0 = null,
+            defaultValue = null,
+            children$jscomp$2 = null,
+            propKey$jscomp$2;
+          for (propKey$jscomp$2 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+              var propValue$jscomp$2 = props[propKey$jscomp$2];
+              if (null != propValue$jscomp$2)
+                switch (propKey$jscomp$2) {
+                  case "children":
+                    children$jscomp$2 = propValue$jscomp$2;
+                    break;
+                  case "value":
+                    value$jscomp$0 = propValue$jscomp$2;
+                    break;
+                  case "defaultValue":
+                    defaultValue = propValue$jscomp$2;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$2,
+                      propValue$jscomp$2
+                    );
+                }
+            }
+          null === value$jscomp$0 &&
+            null !== defaultValue &&
+            (value$jscomp$0 = defaultValue);
+          target$jscomp$0.push(endOfStartTag);
+          if (null != children$jscomp$2) {
+            console.error(
+              "Use the `defaultValue` or `value` props instead of setting children on <textarea>."
+            );
+            if (null != value$jscomp$0)
+              throw Error(
+                "If you supply `defaultValue` on a <textarea>, do not pass children."
+              );
+            if (isArrayImpl(children$jscomp$2)) {
+              if (1 < children$jscomp$2.length)
+                throw Error("<textarea> can only have at most one child.");
+              checkHtmlStringCoercion(children$jscomp$2[0]);
+              value$jscomp$0 = "" + children$jscomp$2[0];
+            }
+            checkHtmlStringCoercion(children$jscomp$2);
+            value$jscomp$0 = "" + children$jscomp$2;
+          }
+          "string" === typeof value$jscomp$0 &&
+            "\n" === value$jscomp$0[0] &&
+            target$jscomp$0.push(leadingNewline);
+          null !== value$jscomp$0 &&
+            (checkAttributeStringCoercion(value$jscomp$0, "value"),
+            target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0)));
+          return null;
+        case "input":
+          checkControlledValueProps("input", props);
+          target$jscomp$0.push(startChunkForTag("input"));
+          var name = null,
+            formAction = null,
+            formEncType = null,
+            formMethod = null,
+            formTarget = null,
+            value$jscomp$1 = null,
+            defaultValue$jscomp$0 = null,
+            checked = null,
+            defaultChecked = null,
+            propKey$jscomp$3;
+          for (propKey$jscomp$3 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+              var propValue$jscomp$3 = props[propKey$jscomp$3];
+              if (null != propValue$jscomp$3)
+                switch (propKey$jscomp$3) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  case "name":
+                    name = propValue$jscomp$3;
+                    break;
+                  case "formAction":
+                    formAction = propValue$jscomp$3;
+                    break;
+                  case "formEncType":
+                    formEncType = propValue$jscomp$3;
+                    break;
+                  case "formMethod":
+                    formMethod = propValue$jscomp$3;
+                    break;
+                  case "formTarget":
+                    formTarget = propValue$jscomp$3;
+                    break;
+                  case "defaultChecked":
+                    defaultChecked = propValue$jscomp$3;
+                    break;
+                  case "defaultValue":
+                    defaultValue$jscomp$0 = propValue$jscomp$3;
+                    break;
+                  case "checked":
+                    checked = propValue$jscomp$3;
+                    break;
+                  case "value":
+                    value$jscomp$1 = propValue$jscomp$3;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$3,
+                      propValue$jscomp$3
+                    );
+                }
+            }
+          null === formAction ||
+            "image" === props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'An input can only specify a formAction along with type="submit" or type="image".'
+            ));
+          var formData = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction,
+            formEncType,
+            formMethod,
+            formTarget,
+            name
+          );
+          null === checked ||
+            null === defaultChecked ||
+            didWarnDefaultChecked ||
+            (console.error(
+              "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultChecked = !0));
+          null === value$jscomp$1 ||
+            null === defaultValue$jscomp$0 ||
+            didWarnDefaultInputValue ||
+            (console.error(
+              "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultInputValue = !0));
+          null !== checked
+            ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+            : null !== defaultChecked &&
+              pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+          null !== value$jscomp$1
+            ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+            : null !== defaultValue$jscomp$0 &&
+              pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+          target$jscomp$0.push(endOfStartTagSelfClosing);
+          null != formData &&
+            formData.forEach(pushAdditionalFormField, target$jscomp$0);
+          return null;
+        case "button":
+          target$jscomp$0.push(startChunkForTag("button"));
+          var children$jscomp$3 = null,
+            innerHTML$jscomp$2 = null,
+            name$jscomp$0 = null,
+            formAction$jscomp$0 = null,
+            formEncType$jscomp$0 = null,
+            formMethod$jscomp$0 = null,
+            formTarget$jscomp$0 = null,
+            propKey$jscomp$4;
+          for (propKey$jscomp$4 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+              var propValue$jscomp$4 = props[propKey$jscomp$4];
+              if (null != propValue$jscomp$4)
+                switch (propKey$jscomp$4) {
+                  case "children":
+                    children$jscomp$3 = propValue$jscomp$4;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$2 = propValue$jscomp$4;
+                    break;
+                  case "name":
+                    name$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formAction":
+                    formAction$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formEncType":
+                    formEncType$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formMethod":
+                    formMethod$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formTarget":
+                    formTarget$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$4,
+                      propValue$jscomp$4
+                    );
+                }
+            }
+          null === formAction$jscomp$0 ||
+            null == props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'A button can only specify a formAction along with type="submit" or no type.'
+            ));
+          var formData$jscomp$0 = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction$jscomp$0,
+            formEncType$jscomp$0,
+            formMethod$jscomp$0,
+            formTarget$jscomp$0,
+            name$jscomp$0
+          );
+          target$jscomp$0.push(endOfStartTag);
+          null != formData$jscomp$0 &&
+            formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+          if ("string" === typeof children$jscomp$3) {
+            target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3));
+            var JSCompiler_inline_result$jscomp$1 = null;
+          } else JSCompiler_inline_result$jscomp$1 = children$jscomp$3;
+          return JSCompiler_inline_result$jscomp$1;
+        case "form":
+          target$jscomp$0.push(startChunkForTag("form"));
+          var children$jscomp$4 = null,
+            innerHTML$jscomp$3 = null,
+            formAction$jscomp$1 = null,
+            formEncType$jscomp$1 = null,
+            formMethod$jscomp$1 = null,
+            formTarget$jscomp$1 = null,
+            propKey$jscomp$5;
+          for (propKey$jscomp$5 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+              var propValue$jscomp$5 = props[propKey$jscomp$5];
+              if (null != propValue$jscomp$5)
+                switch (propKey$jscomp$5) {
+                  case "children":
+                    children$jscomp$4 = propValue$jscomp$5;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$3 = propValue$jscomp$5;
+                    break;
+                  case "action":
+                    formAction$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "encType":
+                    formEncType$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "method":
+                    formMethod$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "target":
+                    formTarget$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$5,
+                      propValue$jscomp$5
+                    );
+                }
+            }
+          var formData$jscomp$1 = null,
+            formActionName = null;
+          if ("function" === typeof formAction$jscomp$1) {
+            (null === formEncType$jscomp$1 && null === formMethod$jscomp$1) ||
+              didWarnFormActionMethod ||
+              ((didWarnFormActionMethod = !0),
+              console.error(
+                "Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden."
+              ));
+            null === formTarget$jscomp$1 ||
+              didWarnFormActionTarget ||
+              ((didWarnFormActionTarget = !0),
+              console.error(
+                "Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window."
+              ));
+            var customFields = getCustomFormFields(
+              resumableState,
+              formAction$jscomp$1
+            );
+            null !== customFields
+              ? ((formAction$jscomp$1 = customFields.action || ""),
+                (formEncType$jscomp$1 = customFields.encType),
+                (formMethod$jscomp$1 = customFields.method),
+                (formTarget$jscomp$1 = customFields.target),
+                (formData$jscomp$1 = customFields.data),
+                (formActionName = customFields.name))
+              : (target$jscomp$0.push(
+                  attributeSeparator,
+                  "action",
+                  attributeAssign,
+                  actionJavaScriptURL,
+                  attributeEnd
+                ),
+                (formTarget$jscomp$1 =
+                  formMethod$jscomp$1 =
+                  formEncType$jscomp$1 =
+                  formAction$jscomp$1 =
+                    null),
+                injectFormReplayingRuntime(resumableState, renderState));
+          }
+          null != formAction$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+          null != formEncType$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+          null != formMethod$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+          null != formTarget$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+          target$jscomp$0.push(endOfStartTag);
+          null !== formActionName &&
+            (target$jscomp$0.push('<input type="hidden"'),
+            pushStringAttribute(target$jscomp$0, "name", formActionName),
+            target$jscomp$0.push(endOfStartTagSelfClosing),
+            null != formData$jscomp$1 &&
+              formData$jscomp$1.forEach(
+                pushAdditionalFormField,
+                target$jscomp$0
+              ));
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+          if ("string" === typeof children$jscomp$4) {
+            target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4));
+            var JSCompiler_inline_result$jscomp$2 = null;
+          } else JSCompiler_inline_result$jscomp$2 = children$jscomp$4;
+          return JSCompiler_inline_result$jscomp$2;
+        case "menuitem":
+          target$jscomp$0.push(startChunkForTag("menuitem"));
+          for (var propKey$jscomp$6 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+              var propValue$jscomp$6 = props[propKey$jscomp$6];
+              if (null != propValue$jscomp$6)
+                switch (propKey$jscomp$6) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$6,
+                      propValue$jscomp$6
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          return null;
+        case "object":
+          target$jscomp$0.push(startChunkForTag("object"));
+          var children$jscomp$5 = null,
+            innerHTML$jscomp$4 = null,
+            propKey$jscomp$7;
+          for (propKey$jscomp$7 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+              var propValue$jscomp$7 = props[propKey$jscomp$7];
+              if (null != propValue$jscomp$7)
+                switch (propKey$jscomp$7) {
+                  case "children":
+                    children$jscomp$5 = propValue$jscomp$7;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$4 = propValue$jscomp$7;
+                    break;
+                  case "data":
+                    checkAttributeStringCoercion(propValue$jscomp$7, "data");
+                    var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                    if ("" === sanitizedValue) {
+                      console.error(
+                        'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                        propKey$jscomp$7,
+                        propKey$jscomp$7
+                      );
+                      break;
+                    }
+                    target$jscomp$0.push(
+                      attributeSeparator,
+                      "data",
+                      attributeAssign,
+                      escapeTextForBrowser(sanitizedValue),
+                      attributeEnd
+                    );
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$7,
+                      propValue$jscomp$7
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+          if ("string" === typeof children$jscomp$5) {
+            target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5));
+            var JSCompiler_inline_result$jscomp$3 = null;
+          } else JSCompiler_inline_result$jscomp$3 = children$jscomp$5;
+          return JSCompiler_inline_result$jscomp$3;
+        case "title":
+          var insertionMode = formatContext.insertionMode,
+            noscriptTagInScope = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$6 = props.children,
+              child = Array.isArray(children$jscomp$6)
+                ? 2 > children$jscomp$6.length
+                  ? children$jscomp$6[0]
+                  : null
+                : children$jscomp$6;
+            Array.isArray(children$jscomp$6) && 1 < children$jscomp$6.length
+              ? console.error(
+                  "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an Array with length %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert `children` of <title> tags to a single string value which is why Arrays of length greater than 1 are not supported. When using JSX it can be common to combine text nodes and value nodes. For example: <title>hello {nameOfUser}</title>. While not immediately apparent, `children` in this case is an Array with length 2. If your `children` prop is using this form try rewriting it using a template string: <title>{`hello ${nameOfUser}`}</title>.",
+                  children$jscomp$6.length
+                )
+              : "function" === typeof child || "symbol" === typeof child
+                ? console.error(
+                    "React expect children of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value.",
+                    "function" === typeof child ? "a Function" : "a Sybmol"
+                  )
+                : child &&
+                  child.toString === {}.toString &&
+                  (null != child.$$typeof
+                    ? console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that appears to be a React element which never implements a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value which is why rendering React elements is not supported. If the `children` of <title> is a React Component try moving the <title> tag into that component. If the `children` of <title> is some HTML markup change it to be Text only to be valid HTML."
+                      )
+                    : console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that does not implement a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value. Using the default `toString` method available on every object is almost certainly an error. Consider whether the `children` of this <title> is an object in error and change it to a string or number value if so. Otherwise implement a `toString` method that React can use to produce a valid <title>."
+                      ));
+          }
+          if (
+            insertionMode === SVG_MODE ||
+            noscriptTagInScope ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$4 = pushTitleImpl(
+              target$jscomp$0,
+              props
+            );
+          else
+            isFallback
+              ? (JSCompiler_inline_result$jscomp$4 = null)
+              : (pushTitleImpl(renderState.hoistableChunks, props),
+                (JSCompiler_inline_result$jscomp$4 = void 0));
+          return JSCompiler_inline_result$jscomp$4;
+        case "link":
+          var rel = props.rel,
+            href = props.href,
+            precedence = props.precedence;
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp ||
+            "string" !== typeof rel ||
+            "string" !== typeof href ||
+            "" === href
+          ) {
+            "stylesheet" === rel &&
+              "string" === typeof props.precedence &&
+              (("string" === typeof href && href) ||
+                console.error(
+                  'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and expected the `href` prop to be a non-empty string but ecountered %s instead. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop ensure there is a non-empty string `href` prop as well, otherwise remove the `precedence` prop.',
+                  null === href
+                    ? "`null`"
+                    : void 0 === href
+                      ? "`undefined`"
+                      : "" === href
+                        ? "an empty string"
+                        : 'something with type "' + typeof href + '"'
+                ));
+            pushLinkImpl(target$jscomp$0, props);
+            var JSCompiler_inline_result$jscomp$5 = null;
+          } else if ("stylesheet" === props.rel)
+            if (
+              "string" !== typeof precedence ||
+              null != props.disabled ||
+              props.onLoad ||
+              props.onError
+            ) {
+              if ("string" === typeof precedence)
+                if (null != props.disabled)
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and a `disabled` prop. The presence of the `disabled` prop indicates an intent to manage the stylesheet active state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the `disabled` prop, otherwise remove the `precedence` prop.'
+                  );
+                else if (props.onLoad || props.onError) {
+                  var propDescription =
+                    props.onLoad && props.onError
+                      ? "`onLoad` and `onError` props"
+                      : props.onLoad
+                        ? "`onLoad` prop"
+                        : "`onError` prop";
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',
+                    propDescription,
+                    propDescription
+                  );
+                }
+              JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                target$jscomp$0,
+                props
+              );
+            } else {
+              var styleQueue = renderState.styles.get(precedence),
+                resourceState = resumableState.styleResources.hasOwnProperty(
+                  href
+                )
+                  ? resumableState.styleResources[href]
+                  : void 0;
+              if (resourceState !== EXISTS) {
+                resumableState.styleResources[href] = EXISTS;
+                styleQueue ||
+                  ((styleQueue = {
+                    precedence: escapeTextForBrowser(precedence),
+                    rules: [],
+                    hrefs: [],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(precedence, styleQueue));
+                var resource = {
+                  state: PENDING$1,
+                  props: assign({}, props, {
+                    "data-precedence": props.precedence,
+                    precedence: null
+                  })
+                };
+                if (resourceState) {
+                  2 === resourceState.length &&
+                    adoptPreloadCredentials(resource.props, resourceState);
+                  var preloadResource =
+                    renderState.preloads.stylesheets.get(href);
+                  preloadResource && 0 < preloadResource.length
+                    ? (preloadResource.length = 0)
+                    : (resource.state = PRELOADED);
+                }
+                styleQueue.sheets.set(href, resource);
+                hoistableState && hoistableState.stylesheets.add(resource);
+              } else if (styleQueue) {
+                var _resource = styleQueue.sheets.get(href);
+                _resource &&
+                  hoistableState &&
+                  hoistableState.stylesheets.add(_resource);
+              }
+              textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+              JSCompiler_inline_result$jscomp$5 = null;
+            }
+          else
+            props.onLoad || props.onError
+              ? (JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                  target$jscomp$0,
+                  props
+                ))
+              : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+                (JSCompiler_inline_result$jscomp$5 = isFallback
+                  ? null
+                  : pushLinkImpl(renderState.hoistableChunks, props)));
+          return JSCompiler_inline_result$jscomp$5;
+        case "script":
+          var asyncProp = props.async;
+          if (
+            "string" !== typeof props.src ||
+            !props.src ||
+            !asyncProp ||
+            "function" === typeof asyncProp ||
+            "symbol" === typeof asyncProp ||
+            props.onLoad ||
+            props.onError ||
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$6 = pushScriptImpl(
+              target$jscomp$0,
+              props
+            );
+          else {
+            var key = props.src;
+            if ("module" === props.type) {
+              var resources = resumableState.moduleScriptResources;
+              var preloads = renderState.preloads.moduleScripts;
+            } else
+              (resources = resumableState.scriptResources),
+                (preloads = renderState.preloads.scripts);
+            var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+              ? resources[key]
+              : void 0;
+            if (resourceState$jscomp$0 !== EXISTS) {
+              resources[key] = EXISTS;
+              var scriptProps = props;
+              if (resourceState$jscomp$0) {
+                2 === resourceState$jscomp$0.length &&
+                  ((scriptProps = assign({}, props)),
+                  adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+                var preloadResource$jscomp$0 = preloads.get(key);
+                preloadResource$jscomp$0 &&
+                  (preloadResource$jscomp$0.length = 0);
+              }
+              var resource$jscomp$0 = [];
+              renderState.scripts.add(resource$jscomp$0);
+              pushScriptImpl(resource$jscomp$0, scriptProps);
+            }
+            textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+            JSCompiler_inline_result$jscomp$6 = null;
+          }
+          return JSCompiler_inline_result$jscomp$6;
+        case "style":
+          var insertionMode$jscomp$0 = formatContext.insertionMode,
+            noscriptTagInScope$jscomp$0 = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$7 = props.children,
+              child$jscomp$0 = Array.isArray(children$jscomp$7)
+                ? 2 > children$jscomp$7.length
+                  ? children$jscomp$7[0]
+                  : null
+                : children$jscomp$7;
+            ("function" === typeof child$jscomp$0 ||
+              "symbol" === typeof child$jscomp$0 ||
+              Array.isArray(child$jscomp$0)) &&
+              console.error(
+                "React expect children of <style> tags to be a string, number, or object with a `toString` method but found %s instead. In browsers style Elements can only have `Text` Nodes as children.",
+                "function" === typeof child$jscomp$0
+                  ? "a Function"
+                  : "symbol" === typeof child$jscomp$0
+                    ? "a Sybmol"
+                    : "an Array"
+              );
+          }
+          var precedence$jscomp$0 = props.precedence,
+            href$jscomp$0 = props.href;
+          if (
+            insertionMode$jscomp$0 === SVG_MODE ||
+            noscriptTagInScope$jscomp$0 ||
+            null != props.itemProp ||
+            "string" !== typeof precedence$jscomp$0 ||
+            "string" !== typeof href$jscomp$0 ||
+            "" === href$jscomp$0
+          ) {
+            target$jscomp$0.push(startChunkForTag("style"));
+            var children$jscomp$8 = null,
+              innerHTML$jscomp$5 = null,
+              propKey$jscomp$8;
+            for (propKey$jscomp$8 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+                var propValue$jscomp$8 = props[propKey$jscomp$8];
+                if (null != propValue$jscomp$8)
+                  switch (propKey$jscomp$8) {
+                    case "children":
+                      children$jscomp$8 = propValue$jscomp$8;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$5 = propValue$jscomp$8;
+                      break;
+                    default:
+                      pushAttribute(
+                        target$jscomp$0,
+                        propKey$jscomp$8,
+                        propValue$jscomp$8
+                      );
+                  }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            var child$jscomp$1 = Array.isArray(children$jscomp$8)
+              ? 2 > children$jscomp$8.length
+                ? children$jscomp$8[0]
+                : null
+              : children$jscomp$8;
+            "function" !== typeof child$jscomp$1 &&
+              "symbol" !== typeof child$jscomp$1 &&
+              null !== child$jscomp$1 &&
+              void 0 !== child$jscomp$1 &&
+              target$jscomp$0.push(escapeStyleTextContent(child$jscomp$1));
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$5,
+              children$jscomp$8
+            );
+            target$jscomp$0.push(endChunkForTag("style"));
+            var JSCompiler_inline_result$jscomp$7 = null;
+          } else {
+            href$jscomp$0.includes(" ") &&
+              console.error(
+                'React expected the `href` prop for a <style> tag opting into hoisting semantics using the `precedence` prop to not have any spaces but ecountered spaces instead. using spaces in this prop will cause hydration of this style to fail on the client. The href for the <style> where this ocurred is "%s".',
+                href$jscomp$0
+              );
+            var styleQueue$jscomp$0 =
+                renderState.styles.get(precedence$jscomp$0),
+              resourceState$jscomp$1 =
+                resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+                  ? resumableState.styleResources[href$jscomp$0]
+                  : void 0;
+            if (resourceState$jscomp$1 !== EXISTS) {
+              resumableState.styleResources[href$jscomp$0] = EXISTS;
+              resourceState$jscomp$1 &&
+                console.error(
+                  'React encountered a hoistable style tag for the same href as a preload: "%s". When using a style tag to inline styles you should not also preload it as a stylsheet.',
+                  href$jscomp$0
+                );
+              styleQueue$jscomp$0
+                ? styleQueue$jscomp$0.hrefs.push(
+                    escapeTextForBrowser(href$jscomp$0)
+                  )
+                : ((styleQueue$jscomp$0 = {
+                    precedence: escapeTextForBrowser(precedence$jscomp$0),
+                    rules: [],
+                    hrefs: [escapeTextForBrowser(href$jscomp$0)],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(
+                    precedence$jscomp$0,
+                    styleQueue$jscomp$0
+                  ));
+              var target = styleQueue$jscomp$0.rules,
+                children$jscomp$9 = null,
+                innerHTML$jscomp$6 = null,
+                propKey$jscomp$9;
+              for (propKey$jscomp$9 in props)
+                if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+                  var propValue$jscomp$9 = props[propKey$jscomp$9];
+                  if (null != propValue$jscomp$9)
+                    switch (propKey$jscomp$9) {
+                      case "children":
+                        children$jscomp$9 = propValue$jscomp$9;
+                        break;
+                      case "dangerouslySetInnerHTML":
+                        innerHTML$jscomp$6 = propValue$jscomp$9;
+                    }
+                }
+              var child$jscomp$2 = Array.isArray(children$jscomp$9)
+                ? 2 > children$jscomp$9.length
+                  ? children$jscomp$9[0]
+                  : null
+                : children$jscomp$9;
+              "function" !== typeof child$jscomp$2 &&
+                "symbol" !== typeof child$jscomp$2 &&
+                null !== child$jscomp$2 &&
+                void 0 !== child$jscomp$2 &&
+                target.push(escapeStyleTextContent(child$jscomp$2));
+              pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$9);
+            }
+            styleQueue$jscomp$0 &&
+              hoistableState &&
+              hoistableState.styles.add(styleQueue$jscomp$0);
+            textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+            JSCompiler_inline_result$jscomp$7 = void 0;
+          }
+          return JSCompiler_inline_result$jscomp$7;
+        case "meta":
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$8 = pushSelfClosing(
+              target$jscomp$0,
+              props,
+              "meta"
+            );
+          else
+            textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+              (JSCompiler_inline_result$jscomp$8 = isFallback
+                ? null
+                : "string" === typeof props.charSet
+                  ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+                  : "viewport" === props.name
+                    ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                    : pushSelfClosing(
+                        renderState.hoistableChunks,
+                        props,
+                        "meta"
+                      ));
+          return JSCompiler_inline_result$jscomp$8;
+        case "listing":
+        case "pre":
+          target$jscomp$0.push(startChunkForTag(type));
+          var children$jscomp$10 = null,
+            innerHTML$jscomp$7 = null,
+            propKey$jscomp$10;
+          for (propKey$jscomp$10 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+              var propValue$jscomp$10 = props[propKey$jscomp$10];
+              if (null != propValue$jscomp$10)
+                switch (propKey$jscomp$10) {
+                  case "children":
+                    children$jscomp$10 = propValue$jscomp$10;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$7 = propValue$jscomp$10;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$10,
+                      propValue$jscomp$10
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          if (null != innerHTML$jscomp$7) {
+            if (null != children$jscomp$10)
+              throw Error(
+                "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+              );
+            if (
+              "object" !== typeof innerHTML$jscomp$7 ||
+              !("__html" in innerHTML$jscomp$7)
+            )
+              throw Error(
+                "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+              );
+            var html = innerHTML$jscomp$7.__html;
+            null !== html &&
+              void 0 !== html &&
+              ("string" === typeof html && 0 < html.length && "\n" === html[0]
+                ? target$jscomp$0.push(leadingNewline, html)
+                : (checkHtmlStringCoercion(html),
+                  target$jscomp$0.push("" + html)));
+          }
+          "string" === typeof children$jscomp$10 &&
+            "\n" === children$jscomp$10[0] &&
+            target$jscomp$0.push(leadingNewline);
+          return children$jscomp$10;
+        case "img":
+          var src = props.src,
+            srcSet = props.srcSet;
+          if (
+            !(
+              "lazy" === props.loading ||
+              (!src && !srcSet) ||
+              ("string" !== typeof src && null != src) ||
+              ("string" !== typeof srcSet && null != srcSet)
+            ) &&
+            "low" !== props.fetchPriority &&
+            !1 === !!(formatContext.tagScope & 3) &&
+            ("string" !== typeof src ||
+              ":" !== src[4] ||
+              ("d" !== src[0] && "D" !== src[0]) ||
+              ("a" !== src[1] && "A" !== src[1]) ||
+              ("t" !== src[2] && "T" !== src[2]) ||
+              ("a" !== src[3] && "A" !== src[3])) &&
+            ("string" !== typeof srcSet ||
+              ":" !== srcSet[4] ||
+              ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+              ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+              ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+              ("a" !== srcSet[3] && "A" !== srcSet[3]))
+          ) {
+            var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+              key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+              promotablePreloads = renderState.preloads.images,
+              resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+            if (resource$jscomp$1) {
+              if (
+                "high" === props.fetchPriority ||
+                10 > renderState.highImagePreloads.size
+              )
+                promotablePreloads.delete(key$jscomp$0),
+                  renderState.highImagePreloads.add(resource$jscomp$1);
+            } else if (
+              !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+            ) {
+              resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+              var input = props.crossOrigin;
+              var crossOrigin =
+                "string" === typeof input
+                  ? "use-credentials" === input
+                    ? input
+                    : ""
+                  : void 0;
+              var headers = renderState.headers,
+                header;
+              headers &&
+              0 < headers.remainingCapacity &&
+              "string" !== typeof props.srcSet &&
+              ("high" === props.fetchPriority ||
+                500 > headers.highImagePreloads.length) &&
+              ((header = getPreloadAsHeader(src, "image", {
+                imageSrcSet: props.srcSet,
+                imageSizes: props.sizes,
+                crossOrigin: crossOrigin,
+                integrity: props.integrity,
+                nonce: props.nonce,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.refererPolicy
+              })),
+              0 <= (headers.remainingCapacity -= header.length + 2))
+                ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+                  headers.highImagePreloads &&
+                    (headers.highImagePreloads += ", "),
+                  (headers.highImagePreloads += header))
+                : ((resource$jscomp$1 = []),
+                  pushLinkImpl(resource$jscomp$1, {
+                    rel: "preload",
+                    as: "image",
+                    href: srcSet ? void 0 : src,
+                    imageSrcSet: srcSet,
+                    imageSizes: sizes,
+                    crossOrigin: crossOrigin,
+                    integrity: props.integrity,
+                    type: props.type,
+                    fetchPriority: props.fetchPriority,
+                    referrerPolicy: props.referrerPolicy
+                  }),
+                  "high" === props.fetchPriority ||
+                  10 > renderState.highImagePreloads.size
+                    ? renderState.highImagePreloads.add(resource$jscomp$1)
+                    : (renderState.bulkPreloads.add(resource$jscomp$1),
+                      promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+            }
+          }
+          return pushSelfClosing(target$jscomp$0, props, "img");
+        case "base":
+        case "area":
+        case "br":
+        case "col":
+        case "embed":
+        case "hr":
+        case "keygen":
+        case "param":
+        case "source":
+        case "track":
+        case "wbr":
+          return pushSelfClosing(target$jscomp$0, props, type);
+        case "annotation-xml":
+        case "color-profile":
+        case "font-face":
+        case "font-face-src":
+        case "font-face-uri":
+        case "font-face-format":
+        case "font-face-name":
+        case "missing-glyph":
+          break;
+        case "head":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble = preambleState || renderState.preamble;
+            if (preamble.headChunks)
+              throw Error("The `<head>` tag may only be rendered once.");
+            preamble.headChunks = [];
+            var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+              preamble.headChunks,
+              props,
+              "head"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "head"
+            );
+          return JSCompiler_inline_result$jscomp$9;
+        case "body":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble$jscomp$0 = preambleState || renderState.preamble;
+            if (preamble$jscomp$0.bodyChunks)
+              throw Error("The `<body>` tag may only be rendered once.");
+            preamble$jscomp$0.bodyChunks = [];
+            var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+              preamble$jscomp$0.bodyChunks,
+              props,
+              "body"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "body"
+            );
+          return JSCompiler_inline_result$jscomp$10;
+        case "html":
+          if (formatContext.insertionMode === ROOT_HTML_MODE) {
+            var preamble$jscomp$1 = preambleState || renderState.preamble;
+            if (preamble$jscomp$1.htmlChunks)
+              throw Error("The `<html>` tag may only be rendered once.");
+            preamble$jscomp$1.htmlChunks = [doctypeChunk];
+            var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+              preamble$jscomp$1.htmlChunks,
+              props,
+              "html"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "html"
+            );
+          return JSCompiler_inline_result$jscomp$11;
+        default:
+          if (-1 !== type.indexOf("-")) {
+            target$jscomp$0.push(startChunkForTag(type));
+            var children$jscomp$11 = null,
+              innerHTML$jscomp$8 = null,
+              propKey$jscomp$11;
+            for (propKey$jscomp$11 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+                var propValue$jscomp$11 = props[propKey$jscomp$11];
+                if (null != propValue$jscomp$11) {
+                  var attributeName = propKey$jscomp$11;
+                  switch (propKey$jscomp$11) {
+                    case "children":
+                      children$jscomp$11 = propValue$jscomp$11;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$8 = propValue$jscomp$11;
+                      break;
+                    case "style":
+                      pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                      break;
+                    case "suppressContentEditableWarning":
+                    case "suppressHydrationWarning":
+                    case "ref":
+                      break;
+                    case "className":
+                      attributeName = "class";
+                    default:
+                      if (
+                        isAttributeNameSafe(propKey$jscomp$11) &&
+                        "function" !== typeof propValue$jscomp$11 &&
+                        "symbol" !== typeof propValue$jscomp$11 &&
+                        !1 !== propValue$jscomp$11
+                      ) {
+                        if (!0 === propValue$jscomp$11)
+                          propValue$jscomp$11 = "";
+                        else if ("object" === typeof propValue$jscomp$11)
+                          continue;
+                        target$jscomp$0.push(
+                          attributeSeparator,
+                          attributeName,
+                          attributeAssign,
+                          escapeTextForBrowser(propValue$jscomp$11),
+                          attributeEnd
+                        );
+                      }
+                  }
+                }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$8,
+              children$jscomp$11
+            );
+            return children$jscomp$11;
+          }
+      }
+      return pushStartGenericElement(target$jscomp$0, props, type);
+    }
+    function endChunkForTag(tag) {
+      var chunk = endTagCache.get(tag);
+      void 0 === chunk &&
+        ((chunk = "</" + tag + ">"), endTagCache.set(tag, chunk));
+      return chunk;
+    }
+    function hoistPreambleState(renderState, preambleState) {
+      renderState = renderState.preamble;
+      null === renderState.htmlChunks &&
+        preambleState.htmlChunks &&
+        ((renderState.htmlChunks = preambleState.htmlChunks),
+        (preambleState.contribution |= 1));
+      null === renderState.headChunks &&
+        preambleState.headChunks &&
+        ((renderState.headChunks = preambleState.headChunks),
+        (preambleState.contribution |= 4));
+      null === renderState.bodyChunks &&
+        preambleState.bodyChunks &&
+        ((renderState.bodyChunks = preambleState.bodyChunks),
+        (preambleState.contribution |= 2));
+    }
+    function writeBootstrap(destination, renderState) {
+      renderState = renderState.bootstrapChunks;
+      for (var i = 0; i < renderState.length - 1; i++)
+        destination.push(renderState[i]);
+      return i < renderState.length
+        ? ((i = renderState[i]), (renderState.length = 0), destination.push(i))
+        : !0;
+    }
+    function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+      destination.push(startPendingSuspenseBoundary1);
+      if (null === id)
+        throw Error(
+          "An ID must have been assigned before we can complete the boundary."
+        );
+      destination.push(renderState.boundaryPrefix);
+      renderState = id.toString(16);
+      destination.push(renderState);
+      return destination.push(startPendingSuspenseBoundary2);
+    }
+    function writePreambleContribution(destination, preambleState) {
+      preambleState = preambleState.contribution;
+      preambleState !== NoContribution &&
+        (destination.push(boundaryPreambleContributionChunkStart),
+        destination.push("" + preambleState),
+        destination.push(boundaryPreambleContributionChunkEnd));
+    }
+    function writeStartSegment(destination, renderState, formatContext, id) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return (
+            destination.push(startSegmentHTML),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentHTML2)
+          );
+        case SVG_MODE:
+          return (
+            destination.push(startSegmentSVG),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentSVG2)
+          );
+        case MATHML_MODE:
+          return (
+            destination.push(startSegmentMathML),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentMathML2)
+          );
+        case HTML_TABLE_MODE:
+          return (
+            destination.push(startSegmentTable),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentTable2)
+          );
+        case HTML_TABLE_BODY_MODE:
+          return (
+            destination.push(startSegmentTableBody),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentTableBody2)
+          );
+        case HTML_TABLE_ROW_MODE:
+          return (
+            destination.push(startSegmentTableRow),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentTableRow2)
+          );
+        case HTML_COLGROUP_MODE:
+          return (
+            destination.push(startSegmentColGroup),
+            destination.push(renderState.segmentPrefix),
+            (renderState = id.toString(16)),
+            destination.push(renderState),
+            destination.push(startSegmentColGroup2)
+          );
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function writeEndSegment(destination, formatContext) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return destination.push(endSegmentHTML);
+        case SVG_MODE:
+          return destination.push(endSegmentSVG);
+        case MATHML_MODE:
+          return destination.push(endSegmentMathML);
+        case HTML_TABLE_MODE:
+          return destination.push(endSegmentTable);
+        case HTML_TABLE_BODY_MODE:
+          return destination.push(endSegmentTableBody);
+        case HTML_TABLE_ROW_MODE:
+          return destination.push(endSegmentTableRow);
+        case HTML_COLGROUP_MODE:
+          return destination.push(endSegmentColGroup);
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function escapeJSStringsForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInInstructionScripts,
+        function (match) {
+          switch (match) {
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function escapeJSObjectForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInScripts,
+        function (match) {
+          switch (match) {
+            case "&":
+              return "\\u0026";
+            case ">":
+              return "\\u003e";
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function flushStyleTagsLateForBoundary(styleQueue) {
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      0 < rules.length &&
+        0 === hrefs.length &&
+        console.error(
+          "React expected to have at least one href for an a hoistable style but found none. This is a bug in React."
+        );
+      var i = 0;
+      if (hrefs.length) {
+        this.push(lateStyleTagResourceOpen1);
+        this.push(styleQueue.precedence);
+        for (this.push(lateStyleTagResourceOpen2); i < hrefs.length - 1; i++)
+          this.push(hrefs[i]), this.push(spaceSeparator);
+        this.push(hrefs[i]);
+        this.push(lateStyleTagResourceOpen3);
+        for (i = 0; i < rules.length; i++) this.push(rules[i]);
+        destinationHasCapacity = this.push(lateStyleTagTemplateClose);
+        currentlyRenderingBoundaryHasStylesToHoist = !0;
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function hasStylesToHoist(stylesheet) {
+      return stylesheet.state !== PREAMBLE
+        ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+        : !1;
+    }
+    function writeHoistablesForBoundary(
+      destination,
+      hoistableState,
+      renderState
+    ) {
+      currentlyRenderingBoundaryHasStylesToHoist = !1;
+      destinationHasCapacity = !0;
+      hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+      hoistableState.stylesheets.forEach(hasStylesToHoist);
+      currentlyRenderingBoundaryHasStylesToHoist &&
+        (renderState.stylesToHoist = !0);
+      return destinationHasCapacity;
+    }
+    function flushResource(resource) {
+      for (var i = 0; i < resource.length; i++) this.push(resource[i]);
+      resource.length = 0;
+    }
+    function flushStyleInPreamble(stylesheet) {
+      pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+      for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+        this.push(stylesheetFlushingQueue[i]);
+      stylesheetFlushingQueue.length = 0;
+      stylesheet.state = PREAMBLE;
+    }
+    function flushStylesInPreamble(styleQueue) {
+      var hasStylesheets = 0 < styleQueue.sheets.size;
+      styleQueue.sheets.forEach(flushStyleInPreamble, this);
+      styleQueue.sheets.clear();
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      if (!hasStylesheets || hrefs.length) {
+        this.push(styleTagResourceOpen1);
+        this.push(styleQueue.precedence);
+        styleQueue = 0;
+        if (hrefs.length) {
+          for (
+            this.push(styleTagResourceOpen2);
+            styleQueue < hrefs.length - 1;
+            styleQueue++
+          )
+            this.push(hrefs[styleQueue]), this.push(spaceSeparator);
+          this.push(hrefs[styleQueue]);
+        }
+        this.push(styleTagResourceOpen3);
+        for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+          this.push(rules[styleQueue]);
+        this.push(styleTagResourceClose);
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function preloadLateStyle(stylesheet) {
+      if (stylesheet.state === PENDING$1) {
+        stylesheet.state = PRELOADED;
+        var props = stylesheet.props;
+        pushLinkImpl(stylesheetFlushingQueue, {
+          rel: "preload",
+          as: "style",
+          href: stylesheet.props.href,
+          crossOrigin: props.crossOrigin,
+          fetchPriority: props.fetchPriority,
+          integrity: props.integrity,
+          media: props.media,
+          hrefLang: props.hrefLang,
+          referrerPolicy: props.referrerPolicy
+        });
+        for (
+          stylesheet = 0;
+          stylesheet < stylesheetFlushingQueue.length;
+          stylesheet++
+        )
+          this.push(stylesheetFlushingQueue[stylesheet]);
+        stylesheetFlushingQueue.length = 0;
+      }
+    }
+    function preloadLateStyles(styleQueue) {
+      styleQueue.sheets.forEach(preloadLateStyle, this);
+      styleQueue.sheets.clear();
+    }
+    function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+      destination.push(arrayFirstOpenBracket);
+      var nextArrayOpenBrackChunk = arrayFirstOpenBracket;
+      hoistableState.stylesheets.forEach(function (resource) {
+        if (resource.state !== PREAMBLE)
+          if (resource.state === LATE)
+            destination.push(nextArrayOpenBrackChunk),
+              (resource = resource.props.href),
+              checkAttributeStringCoercion(resource, "href"),
+              (resource = escapeJSObjectForInstructionScripts("" + resource)),
+              destination.push(resource),
+              destination.push(arrayCloseBracket),
+              (nextArrayOpenBrackChunk = arraySubsequentOpenBracket);
+          else {
+            destination.push(nextArrayOpenBrackChunk);
+            var precedence = resource.props["data-precedence"],
+              props = resource.props,
+              coercedHref = sanitizeURL("" + resource.props.href);
+            coercedHref = escapeJSObjectForInstructionScripts(coercedHref);
+            destination.push(coercedHref);
+            checkAttributeStringCoercion(precedence, "precedence");
+            precedence = "" + precedence;
+            destination.push(arrayInterstitial);
+            precedence = escapeJSObjectForInstructionScripts(precedence);
+            destination.push(precedence);
+            for (var propKey in props)
+              if (
+                hasOwnProperty.call(props, propKey) &&
+                ((precedence = props[propKey]), null != precedence)
+              )
+                switch (propKey) {
+                  case "href":
+                  case "rel":
+                  case "precedence":
+                  case "data-precedence":
+                    break;
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    writeStyleResourceAttributeInJS(
+                      destination,
+                      propKey,
+                      precedence
+                    );
+                }
+            destination.push(arrayCloseBracket);
+            nextArrayOpenBrackChunk = arraySubsequentOpenBracket;
+            resource.state = LATE;
+          }
+      });
+      destination.push(arrayCloseBracket);
+    }
+    function writeStyleResourceAttributeInJS(destination, name, value) {
+      var attributeName = name.toLowerCase();
+      switch (typeof value) {
+        case "function":
+        case "symbol":
+          return;
+      }
+      switch (name) {
+        case "innerHTML":
+        case "dangerouslySetInnerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "style":
+        case "ref":
+          return;
+        case "className":
+          attributeName = "class";
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        case "hidden":
+          if (!1 === value) return;
+          name = "";
+          break;
+        case "src":
+        case "href":
+          value = sanitizeURL(value);
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        default:
+          if (
+            (2 < name.length &&
+              ("o" === name[0] || "O" === name[0]) &&
+              ("n" === name[1] || "N" === name[1])) ||
+            !isAttributeNameSafe(name)
+          )
+            return;
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+      }
+      destination.push(arrayInterstitial);
+      attributeName = escapeJSObjectForInstructionScripts(attributeName);
+      destination.push(attributeName);
+      destination.push(arrayInterstitial);
+      attributeName = escapeJSObjectForInstructionScripts(name);
+      destination.push(attributeName);
+    }
+    function createHoistableState() {
+      return { styles: new Set(), stylesheets: new Set() };
+    }
+    function preloadBootstrapScriptOrModule(
+      resumableState,
+      renderState,
+      href,
+      props
+    ) {
+      (resumableState.scriptResources.hasOwnProperty(href) ||
+        resumableState.moduleScriptResources.hasOwnProperty(href)) &&
+        console.error(
+          'Internal React Error: React expected bootstrap script or module with src "%s" to not have been preloaded already. please file an issue',
+          href
+        );
+      resumableState.scriptResources[href] = EXISTS;
+      resumableState.moduleScriptResources[href] = EXISTS;
+      resumableState = [];
+      pushLinkImpl(resumableState, props);
+      renderState.bootstrapScripts.add(resumableState);
+    }
+    function adoptPreloadCredentials(target, preloadState) {
+      null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+      null == target.integrity && (target.integrity = preloadState[1]);
+    }
+    function getPreloadAsHeader(href, as, params) {
+      href = escapeHrefForLinkHeaderURLContext(href);
+      as = escapeStringForLinkHeaderQuotedParamValueContext(as, "as");
+      as = "<" + href + '>; rel=preload; as="' + as + '"';
+      for (var paramName in params)
+        hasOwnProperty.call(params, paramName) &&
+          ((href = params[paramName]),
+          "string" === typeof href &&
+            (as +=
+              "; " +
+              paramName.toLowerCase() +
+              '="' +
+              escapeStringForLinkHeaderQuotedParamValueContext(
+                href,
+                paramName
+              ) +
+              '"'));
+      return as;
+    }
+    function escapeHrefForLinkHeaderURLContext(hrefInput) {
+      checkAttributeStringCoercion(hrefInput, "href");
+      return ("" + hrefInput).replace(
+        regexForHrefInLinkHeaderURLContext,
+        escapeHrefForLinkHeaderURLContextReplacer
+      );
+    }
+    function escapeHrefForLinkHeaderURLContextReplacer(match) {
+      switch (match) {
+        case "<":
+          return "%3C";
+        case ">":
+          return "%3E";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContext(value, name) {
+      willCoercionThrow(value) &&
+        (console.error(
+          "The provided `%s` option is an unsupported type %s. This value must be coerced to a string before using it here.",
+          name,
+          typeName(value)
+        ),
+        testStringCoercion(value));
+      return ("" + value).replace(
+        regexForLinkHeaderQuotedParamValueContext,
+        escapeStringForLinkHeaderQuotedParamValueContextReplacer
+      );
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+      switch (match) {
+        case '"':
+          return "%22";
+        case "'":
+          return "%27";
+        case ";":
+          return "%3B";
+        case ",":
+          return "%2C";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function hoistStyleQueueDependency(styleQueue) {
+      this.styles.add(styleQueue);
+    }
+    function hoistStylesheetDependency(stylesheet) {
+      this.stylesheets.add(stylesheet);
+    }
+    function createRenderState(resumableState, generateStaticMarkup) {
+      var idPrefix = resumableState.idPrefix,
+        bootstrapChunks = [],
+        bootstrapScriptContent = resumableState.bootstrapScriptContent,
+        bootstrapScripts = resumableState.bootstrapScripts,
+        bootstrapModules = resumableState.bootstrapModules;
+      void 0 !== bootstrapScriptContent &&
+        bootstrapChunks.push(
+          "<script>",
+          escapeEntireInlineScriptContent(bootstrapScriptContent),
+          "\x3c/script>"
+        );
+      idPrefix = {
+        placeholderPrefix: idPrefix + "P:",
+        segmentPrefix: idPrefix + "S:",
+        boundaryPrefix: idPrefix + "B:",
+        startInlineScript: "<script>",
+        preamble: createPreambleState(),
+        externalRuntimeScript: null,
+        bootstrapChunks: bootstrapChunks,
+        importMapChunks: [],
+        onHeaders: void 0,
+        headers: null,
+        resets: {
+          font: {},
+          dns: {},
+          connect: { default: {}, anonymous: {}, credentials: {} },
+          image: {},
+          style: {}
+        },
+        charsetChunks: [],
+        viewportChunks: [],
+        hoistableChunks: [],
+        preconnects: new Set(),
+        fontPreloads: new Set(),
+        highImagePreloads: new Set(),
+        styles: new Map(),
+        bootstrapScripts: new Set(),
+        scripts: new Set(),
+        bulkPreloads: new Set(),
+        preloads: {
+          images: new Map(),
+          stylesheets: new Map(),
+          scripts: new Map(),
+          moduleScripts: new Map()
+        },
+        nonce: void 0,
+        hoistableState: null,
+        stylesToHoist: !1
+      };
+      if (void 0 !== bootstrapScripts)
+        for (
+          bootstrapScriptContent = 0;
+          bootstrapScriptContent < bootstrapScripts.length;
+          bootstrapScriptContent++
+        ) {
+          var scriptConfig = bootstrapScripts[bootstrapScriptContent],
+            src,
+            crossOrigin = void 0,
+            integrity = void 0,
+            props = {
+              rel: "preload",
+              as: "script",
+              fetchPriority: "low",
+              nonce: void 0
+            };
+          "string" === typeof scriptConfig
+            ? (props.href = src = scriptConfig)
+            : ((props.href = src = scriptConfig.src),
+              (props.integrity = integrity =
+                "string" === typeof scriptConfig.integrity
+                  ? scriptConfig.integrity
+                  : void 0),
+              (props.crossOrigin = crossOrigin =
+                "string" === typeof scriptConfig ||
+                null == scriptConfig.crossOrigin
+                  ? void 0
+                  : "use-credentials" === scriptConfig.crossOrigin
+                    ? "use-credentials"
+                    : ""));
+          preloadBootstrapScriptOrModule(resumableState, idPrefix, src, props);
+          bootstrapChunks.push('<script src="', escapeTextForBrowser(src));
+          "string" === typeof integrity &&
+            bootstrapChunks.push(
+              '" integrity="',
+              escapeTextForBrowser(integrity)
+            );
+          "string" === typeof crossOrigin &&
+            bootstrapChunks.push(
+              '" crossorigin="',
+              escapeTextForBrowser(crossOrigin)
+            );
+          bootstrapChunks.push('" async="">\x3c/script>');
+        }
+      if (void 0 !== bootstrapModules)
+        for (
+          bootstrapScripts = 0;
+          bootstrapScripts < bootstrapModules.length;
+          bootstrapScripts++
+        )
+          (bootstrapScriptContent = bootstrapModules[bootstrapScripts]),
+            (crossOrigin = src = void 0),
+            (integrity = {
+              rel: "modulepreload",
+              fetchPriority: "low",
+              nonce: void 0
+            }),
+            "string" === typeof bootstrapScriptContent
+              ? (integrity.href = scriptConfig = bootstrapScriptContent)
+              : ((integrity.href = scriptConfig = bootstrapScriptContent.src),
+                (integrity.integrity = crossOrigin =
+                  "string" === typeof bootstrapScriptContent.integrity
+                    ? bootstrapScriptContent.integrity
+                    : void 0),
+                (integrity.crossOrigin = src =
+                  "string" === typeof bootstrapScriptContent ||
+                  null == bootstrapScriptContent.crossOrigin
+                    ? void 0
+                    : "use-credentials" === bootstrapScriptContent.crossOrigin
+                      ? "use-credentials"
+                      : "")),
+            preloadBootstrapScriptOrModule(
+              resumableState,
+              idPrefix,
+              scriptConfig,
+              integrity
+            ),
+            bootstrapChunks.push(
+              '<script type="module" src="',
+              escapeTextForBrowser(scriptConfig)
+            ),
+            "string" === typeof crossOrigin &&
+              bootstrapChunks.push(
+                '" integrity="',
+                escapeTextForBrowser(crossOrigin)
+              ),
+            "string" === typeof src &&
+              bootstrapChunks.push(
+                '" crossorigin="',
+                escapeTextForBrowser(src)
+              ),
+            bootstrapChunks.push('" async="">\x3c/script>');
+      return {
+        placeholderPrefix: idPrefix.placeholderPrefix,
+        segmentPrefix: idPrefix.segmentPrefix,
+        boundaryPrefix: idPrefix.boundaryPrefix,
+        startInlineScript: idPrefix.startInlineScript,
+        preamble: idPrefix.preamble,
+        externalRuntimeScript: idPrefix.externalRuntimeScript,
+        bootstrapChunks: idPrefix.bootstrapChunks,
+        importMapChunks: idPrefix.importMapChunks,
+        onHeaders: idPrefix.onHeaders,
+        headers: idPrefix.headers,
+        resets: idPrefix.resets,
+        charsetChunks: idPrefix.charsetChunks,
+        viewportChunks: idPrefix.viewportChunks,
+        hoistableChunks: idPrefix.hoistableChunks,
+        preconnects: idPrefix.preconnects,
+        fontPreloads: idPrefix.fontPreloads,
+        highImagePreloads: idPrefix.highImagePreloads,
+        styles: idPrefix.styles,
+        bootstrapScripts: idPrefix.bootstrapScripts,
+        scripts: idPrefix.scripts,
+        bulkPreloads: idPrefix.bulkPreloads,
+        preloads: idPrefix.preloads,
+        stylesToHoist: idPrefix.stylesToHoist,
+        generateStaticMarkup: generateStaticMarkup
+      };
+    }
+    function pushTextInstance(target, text, renderState, textEmbedded) {
+      if (renderState.generateStaticMarkup)
+        return target.push(escapeTextForBrowser(text)), !1;
+      "" === text
+        ? (target = textEmbedded)
+        : (textEmbedded && target.push("\x3c!-- --\x3e"),
+          target.push(escapeTextForBrowser(text)),
+          (target = !0));
+      return target;
+    }
+    function pushSegmentFinale(
+      target,
+      renderState,
+      lastPushedText,
+      textEmbedded
+    ) {
+      renderState.generateStaticMarkup ||
+        (lastPushedText && textEmbedded && target.push("\x3c!-- --\x3e"));
+    }
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function popToNearestCommonAncestor(prev, next) {
+      if (prev !== next) {
+        prev.context._currentValue2 = prev.parentValue;
+        prev = prev.parent;
+        var parentNext = next.parent;
+        if (null === prev) {
+          if (null !== parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+        } else {
+          if (null === parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+          popToNearestCommonAncestor(prev, parentNext);
+        }
+        next.context._currentValue2 = next.value;
+      }
+    }
+    function popAllPrevious(prev) {
+      prev.context._currentValue2 = prev.parentValue;
+      prev = prev.parent;
+      null !== prev && popAllPrevious(prev);
+    }
+    function pushAllNext(next) {
+      var parentNext = next.parent;
+      null !== parentNext && pushAllNext(parentNext);
+      next.context._currentValue2 = next.value;
+    }
+    function popPreviousToCommonLevel(prev, next) {
+      prev.context._currentValue2 = prev.parentValue;
+      prev = prev.parent;
+      if (null === prev)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === next.depth
+        ? popToNearestCommonAncestor(prev, next)
+        : popPreviousToCommonLevel(prev, next);
+    }
+    function popNextToCommonLevel(prev, next) {
+      var parentNext = next.parent;
+      if (null === parentNext)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === parentNext.depth
+        ? popToNearestCommonAncestor(prev, parentNext)
+        : popNextToCommonLevel(prev, parentNext);
+      next.context._currentValue2 = next.value;
+    }
+    function switchContext(newSnapshot) {
+      var prev = currentActiveSnapshot;
+      prev !== newSnapshot &&
+        (null === prev
+          ? pushAllNext(newSnapshot)
+          : null === newSnapshot
+            ? popAllPrevious(prev)
+            : prev.depth === newSnapshot.depth
+              ? popToNearestCommonAncestor(prev, newSnapshot)
+              : prev.depth > newSnapshot.depth
+                ? popPreviousToCommonLevel(prev, newSnapshot)
+                : popNextToCommonLevel(prev, newSnapshot),
+        (currentActiveSnapshot = newSnapshot));
+    }
+    function warnOnInvalidCallback(callback) {
+      if (null !== callback && "function" !== typeof callback) {
+        var key = String(callback);
+        didWarnOnInvalidCallback.has(key) ||
+          (didWarnOnInvalidCallback.add(key),
+          console.error(
+            "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+            callback
+          ));
+      }
+    }
+    function warnNoop(publicInstance, callerName) {
+      publicInstance =
+        ((publicInstance = publicInstance.constructor) &&
+          getComponentNameFromType(publicInstance)) ||
+        "ReactClass";
+      var warningKey = publicInstance + "." + callerName;
+      didWarnAboutNoopUpdateForComponent[warningKey] ||
+        (console.error(
+          "Can only update a mounting component. This usually means you called %s() outside componentWillMount() on the server. This is a no-op.\n\nPlease check the code for the %s component.",
+          callerName,
+          publicInstance
+        ),
+        (didWarnAboutNoopUpdateForComponent[warningKey] = !0));
+    }
+    function pushTreeContext(baseContext, totalChildren, index) {
+      var baseIdWithLeadingBit = baseContext.id;
+      baseContext = baseContext.overflow;
+      var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+      baseIdWithLeadingBit &= ~(1 << baseLength);
+      index += 1;
+      var length = 32 - clz32(totalChildren) + baseLength;
+      if (30 < length) {
+        var numberOfOverflowBits = baseLength - (baseLength % 5);
+        length = (
+          baseIdWithLeadingBit &
+          ((1 << numberOfOverflowBits) - 1)
+        ).toString(32);
+        baseIdWithLeadingBit >>= numberOfOverflowBits;
+        baseLength -= numberOfOverflowBits;
+        return {
+          id:
+            (1 << (32 - clz32(totalChildren) + baseLength)) |
+            (index << baseLength) |
+            baseIdWithLeadingBit,
+          overflow: length + baseContext
+        };
+      }
+      return {
+        id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+        overflow: baseContext
+      };
+    }
+    function clz32Fallback(x) {
+      x >>>= 0;
+      return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+    }
+    function noop$2() {}
+    function trackUsedThenable(thenableState, thenable, index) {
+      index = thenableState[index];
+      void 0 === index
+        ? thenableState.push(thenable)
+        : index !== thenable &&
+          (thenable.then(noop$2, noop$2), (thenable = index));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+        default:
+          "string" === typeof thenable.status
+            ? thenable.then(noop$2, noop$2)
+            : ((thenableState = thenable),
+              (thenableState.status = "pending"),
+              thenableState.then(
+                function (fulfilledValue) {
+                  if ("pending" === thenable.status) {
+                    var fulfilledThenable = thenable;
+                    fulfilledThenable.status = "fulfilled";
+                    fulfilledThenable.value = fulfilledValue;
+                  }
+                },
+                function (error) {
+                  if ("pending" === thenable.status) {
+                    var rejectedThenable = thenable;
+                    rejectedThenable.status = "rejected";
+                    rejectedThenable.reason = error;
+                  }
+                }
+              ));
+          switch (thenable.status) {
+            case "fulfilled":
+              return thenable.value;
+            case "rejected":
+              throw thenable.reason;
+          }
+          suspendedThenable = thenable;
+          throw SuspenseException;
+      }
+    }
+    function getSuspendedThenable() {
+      if (null === suspendedThenable)
+        throw Error(
+          "Expected a suspended thenable. This is a bug in React. Please file an issue."
+        );
+      var thenable = suspendedThenable;
+      suspendedThenable = null;
+      return thenable;
+    }
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    function resolveCurrentlyRenderingComponent() {
+      if (null === currentlyRenderingComponent)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      isInHookUserCodeInDev &&
+        console.error(
+          "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"
+        );
+      return currentlyRenderingComponent;
+    }
+    function createHook() {
+      if (0 < numberOfReRenders)
+        throw Error("Rendered more hooks than during the previous render");
+      return { memoizedState: null, queue: null, next: null };
+    }
+    function createWorkInProgressHook() {
+      null === workInProgressHook
+        ? null === firstWorkInProgressHook
+          ? ((isReRender = !1),
+            (firstWorkInProgressHook = workInProgressHook = createHook()))
+          : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+        : null === workInProgressHook.next
+          ? ((isReRender = !1),
+            (workInProgressHook = workInProgressHook.next = createHook()))
+          : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+      return workInProgressHook;
+    }
+    function getThenableStateAfterSuspending() {
+      var state = thenableState;
+      thenableState = null;
+      return state;
+    }
+    function resetHooksState() {
+      isInHookUserCodeInDev = !1;
+      currentlyRenderingKeyPath =
+        currentlyRenderingRequest =
+        currentlyRenderingTask =
+        currentlyRenderingComponent =
+          null;
+      didScheduleRenderPhaseUpdate = !1;
+      firstWorkInProgressHook = null;
+      numberOfReRenders = 0;
+      workInProgressHook = renderPhaseUpdates = null;
+    }
+    function readContext(context) {
+      isInHookUserCodeInDev &&
+        console.error(
+          "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+        );
+      return context._currentValue2;
+    }
+    function basicStateReducer(state, action) {
+      return "function" === typeof action ? action(state) : action;
+    }
+    function useReducer(reducer, initialArg, init) {
+      reducer !== basicStateReducer && (currentHookNameInDev = "useReducer");
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      if (isReRender) {
+        init = workInProgressHook.queue;
+        initialArg = init.dispatch;
+        if (null !== renderPhaseUpdates) {
+          var firstRenderPhaseUpdate = renderPhaseUpdates.get(init);
+          if (void 0 !== firstRenderPhaseUpdate) {
+            renderPhaseUpdates.delete(init);
+            init = workInProgressHook.memoizedState;
+            do {
+              var action = firstRenderPhaseUpdate.action;
+              isInHookUserCodeInDev = !0;
+              init = reducer(init, action);
+              isInHookUserCodeInDev = !1;
+              firstRenderPhaseUpdate = firstRenderPhaseUpdate.next;
+            } while (null !== firstRenderPhaseUpdate);
+            workInProgressHook.memoizedState = init;
+            return [init, initialArg];
+          }
+        }
+        return [workInProgressHook.memoizedState, initialArg];
+      }
+      isInHookUserCodeInDev = !0;
+      reducer =
+        reducer === basicStateReducer
+          ? "function" === typeof initialArg
+            ? initialArg()
+            : initialArg
+          : void 0 !== init
+            ? init(initialArg)
+            : initialArg;
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = reducer;
+      reducer = workInProgressHook.queue = { last: null, dispatch: null };
+      reducer = reducer.dispatch = dispatchAction.bind(
+        null,
+        currentlyRenderingComponent,
+        reducer
+      );
+      return [workInProgressHook.memoizedState, reducer];
+    }
+    function useMemo(nextCreate, deps) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      if (null !== workInProgressHook) {
+        var prevState = workInProgressHook.memoizedState;
+        if (null !== prevState && null !== deps) {
+          a: {
+            var JSCompiler_inline_result = prevState[1];
+            if (null === JSCompiler_inline_result)
+              console.error(
+                "%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",
+                currentHookNameInDev
+              ),
+                (JSCompiler_inline_result = !1);
+            else {
+              deps.length !== JSCompiler_inline_result.length &&
+                console.error(
+                  "The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s",
+                  currentHookNameInDev,
+                  "[" + deps.join(", ") + "]",
+                  "[" + JSCompiler_inline_result.join(", ") + "]"
+                );
+              for (
+                var i = 0;
+                i < JSCompiler_inline_result.length && i < deps.length;
+                i++
+              )
+                if (!objectIs(deps[i], JSCompiler_inline_result[i])) {
+                  JSCompiler_inline_result = !1;
+                  break a;
+                }
+              JSCompiler_inline_result = !0;
+            }
+          }
+          if (JSCompiler_inline_result) return prevState[0];
+        }
+      }
+      isInHookUserCodeInDev = !0;
+      nextCreate = nextCreate();
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = [nextCreate, deps];
+      return nextCreate;
+    }
+    function dispatchAction(componentIdentity, queue, action) {
+      if (25 <= numberOfReRenders)
+        throw Error(
+          "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+        );
+      if (componentIdentity === currentlyRenderingComponent)
+        if (
+          ((didScheduleRenderPhaseUpdate = !0),
+          (componentIdentity = { action: action, next: null }),
+          null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+          (action = renderPhaseUpdates.get(queue)),
+          void 0 === action)
+        )
+          renderPhaseUpdates.set(queue, componentIdentity);
+        else {
+          for (queue = action; null !== queue.next; ) queue = queue.next;
+          queue.next = componentIdentity;
+        }
+    }
+    function unsupportedStartTransition() {
+      throw Error("startTransition cannot be called during server rendering.");
+    }
+    function unsupportedSetOptimisticState() {
+      throw Error("Cannot update optimistic state while rendering.");
+    }
+    function useActionState(action, initialState, permalink) {
+      resolveCurrentlyRenderingComponent();
+      var actionStateHookIndex = actionStateCounter++,
+        request = currentlyRenderingRequest;
+      if ("function" === typeof action.$$FORM_ACTION) {
+        var nextPostbackStateKey = null,
+          componentKeyPath = currentlyRenderingKeyPath;
+        request = request.formState;
+        var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+        if (null !== request && "function" === typeof isSignatureEqual) {
+          var postbackKey = request[1];
+          isSignatureEqual.call(action, request[2], request[3]) &&
+            ((nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  murmurhash3_32_gc(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ]),
+                    0
+                  )),
+            postbackKey === nextPostbackStateKey &&
+              ((actionStateMatchingIndex = actionStateHookIndex),
+              (initialState = request[0])));
+        }
+        var boundAction = action.bind(null, initialState);
+        action = function (payload) {
+          boundAction(payload);
+        };
+        "function" === typeof boundAction.$$FORM_ACTION &&
+          (action.$$FORM_ACTION = function (prefix) {
+            prefix = boundAction.$$FORM_ACTION(prefix);
+            void 0 !== permalink &&
+              (checkAttributeStringCoercion(permalink, "target"),
+              (permalink += ""),
+              (prefix.action = permalink));
+            var formData = prefix.data;
+            formData &&
+              (null === nextPostbackStateKey &&
+                (nextPostbackStateKey =
+                  void 0 !== permalink
+                    ? "p" + permalink
+                    : "k" +
+                      murmurhash3_32_gc(
+                        JSON.stringify([
+                          componentKeyPath,
+                          null,
+                          actionStateHookIndex
+                        ]),
+                        0
+                      )),
+              formData.append("$ACTION_KEY", nextPostbackStateKey));
+            return prefix;
+          });
+        return [initialState, action, !1];
+      }
+      var _boundAction = action.bind(null, initialState);
+      return [
+        initialState,
+        function (payload) {
+          _boundAction(payload);
+        },
+        !1
+      ];
+    }
+    function unwrapThenable(thenable) {
+      var index = thenableIndexCounter;
+      thenableIndexCounter += 1;
+      null === thenableState && (thenableState = []);
+      return trackUsedThenable(thenableState, thenable, index);
+    }
+    function unsupportedRefresh() {
+      throw Error("Cache cannot be refreshed during server rendering.");
+    }
+    function noop$1() {}
+    function disabledLog() {}
+    function disableLogs() {
+      if (0 === disabledDepth) {
+        prevLog = console.log;
+        prevInfo = console.info;
+        prevWarn = console.warn;
+        prevError = console.error;
+        prevGroup = console.group;
+        prevGroupCollapsed = console.groupCollapsed;
+        prevGroupEnd = console.groupEnd;
+        var props = {
+          configurable: !0,
+          enumerable: !0,
+          value: disabledLog,
+          writable: !0
+        };
+        Object.defineProperties(console, {
+          info: props,
+          log: props,
+          warn: props,
+          error: props,
+          group: props,
+          groupCollapsed: props,
+          groupEnd: props
+        });
+      }
+      disabledDepth++;
+    }
+    function reenableLogs() {
+      disabledDepth--;
+      if (0 === disabledDepth) {
+        var props = { configurable: !0, enumerable: !0, writable: !0 };
+        Object.defineProperties(console, {
+          log: assign({}, props, { value: prevLog }),
+          info: assign({}, props, { value: prevInfo }),
+          warn: assign({}, props, { value: prevWarn }),
+          error: assign({}, props, { value: prevError }),
+          group: assign({}, props, { value: prevGroup }),
+          groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
+          groupEnd: assign({}, props, { value: prevGroupEnd })
+        });
+      }
+      0 > disabledDepth &&
+        console.error(
+          "disabledDepth fell below zero. This is a bug in React. Please file an issue."
+        );
+    }
+    function describeBuiltInComponentFrame(name) {
+      if (void 0 === prefix)
+        try {
+          throw Error();
+        } catch (x) {
+          var match = x.stack.trim().match(/\n( *(at )?)/);
+          prefix = (match && match[1]) || "";
+          suffix =
+            -1 < x.stack.indexOf("\n    at")
+              ? " (<anonymous>)"
+              : -1 < x.stack.indexOf("@")
+                ? "@unknown:0:0"
+                : "";
+        }
+      return "\n" + prefix + name + suffix;
+    }
+    function describeNativeComponentFrame(fn, construct) {
+      if (!fn || reentry) return "";
+      var frame = componentFrameCache.get(fn);
+      if (void 0 !== frame) return frame;
+      reentry = !0;
+      frame = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      var previousDispatcher = null;
+      previousDispatcher = ReactSharedInternals.H;
+      ReactSharedInternals.H = null;
+      disableLogs();
+      try {
+        var RunInRootFrame = {
+          DetermineComponentFrameRoot: function () {
+            try {
+              if (construct) {
+                var Fake = function () {
+                  throw Error();
+                };
+                Object.defineProperty(Fake.prototype, "props", {
+                  set: function () {
+                    throw Error();
+                  }
+                });
+                if ("object" === typeof Reflect && Reflect.construct) {
+                  try {
+                    Reflect.construct(Fake, []);
+                  } catch (x) {
+                    var control = x;
+                  }
+                  Reflect.construct(fn, [], Fake);
+                } else {
+                  try {
+                    Fake.call();
+                  } catch (x$0) {
+                    control = x$0;
+                  }
+                  fn.call(Fake.prototype);
+                }
+              } else {
+                try {
+                  throw Error();
+                } catch (x$1) {
+                  control = x$1;
+                }
+                (Fake = fn()) &&
+                  "function" === typeof Fake.catch &&
+                  Fake.catch(function () {});
+              }
+            } catch (sample) {
+              if (sample && control && "string" === typeof sample.stack)
+                return [sample.stack, control.stack];
+            }
+            return [null, null];
+          }
+        };
+        RunInRootFrame.DetermineComponentFrameRoot.displayName =
+          "DetermineComponentFrameRoot";
+        var namePropDescriptor = Object.getOwnPropertyDescriptor(
+          RunInRootFrame.DetermineComponentFrameRoot,
+          "name"
+        );
+        namePropDescriptor &&
+          namePropDescriptor.configurable &&
+          Object.defineProperty(
+            RunInRootFrame.DetermineComponentFrameRoot,
+            "name",
+            { value: "DetermineComponentFrameRoot" }
+          );
+        var _RunInRootFrame$Deter =
+            RunInRootFrame.DetermineComponentFrameRoot(),
+          sampleStack = _RunInRootFrame$Deter[0],
+          controlStack = _RunInRootFrame$Deter[1];
+        if (sampleStack && controlStack) {
+          var sampleLines = sampleStack.split("\n"),
+            controlLines = controlStack.split("\n");
+          for (
+            _RunInRootFrame$Deter = namePropDescriptor = 0;
+            namePropDescriptor < sampleLines.length &&
+            !sampleLines[namePropDescriptor].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            namePropDescriptor++;
+          for (
+            ;
+            _RunInRootFrame$Deter < controlLines.length &&
+            !controlLines[_RunInRootFrame$Deter].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            _RunInRootFrame$Deter++;
+          if (
+            namePropDescriptor === sampleLines.length ||
+            _RunInRootFrame$Deter === controlLines.length
+          )
+            for (
+              namePropDescriptor = sampleLines.length - 1,
+                _RunInRootFrame$Deter = controlLines.length - 1;
+              1 <= namePropDescriptor &&
+              0 <= _RunInRootFrame$Deter &&
+              sampleLines[namePropDescriptor] !==
+                controlLines[_RunInRootFrame$Deter];
+
+            )
+              _RunInRootFrame$Deter--;
+          for (
+            ;
+            1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;
+            namePropDescriptor--, _RunInRootFrame$Deter--
+          )
+            if (
+              sampleLines[namePropDescriptor] !==
+              controlLines[_RunInRootFrame$Deter]
+            ) {
+              if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {
+                do
+                  if (
+                    (namePropDescriptor--,
+                    _RunInRootFrame$Deter--,
+                    0 > _RunInRootFrame$Deter ||
+                      sampleLines[namePropDescriptor] !==
+                        controlLines[_RunInRootFrame$Deter])
+                  ) {
+                    var _frame =
+                      "\n" +
+                      sampleLines[namePropDescriptor].replace(
+                        " at new ",
+                        " at "
+                      );
+                    fn.displayName &&
+                      _frame.includes("<anonymous>") &&
+                      (_frame = _frame.replace("<anonymous>", fn.displayName));
+                    "function" === typeof fn &&
+                      componentFrameCache.set(fn, _frame);
+                    return _frame;
+                  }
+                while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
+              }
+              break;
+            }
+        }
+      } finally {
+        (reentry = !1),
+          (ReactSharedInternals.H = previousDispatcher),
+          reenableLogs(),
+          (Error.prepareStackTrace = frame);
+      }
+      sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "")
+        ? describeBuiltInComponentFrame(sampleLines)
+        : "";
+      "function" === typeof fn && componentFrameCache.set(fn, sampleLines);
+      return sampleLines;
+    }
+    function formatOwnerStack(error) {
+      var prevPrepareStackTrace = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      error = error.stack;
+      Error.prepareStackTrace = prevPrepareStackTrace;
+      error.startsWith("Error: react-stack-top-frame\n") &&
+        (error = error.slice(29));
+      prevPrepareStackTrace = error.indexOf("\n");
+      -1 !== prevPrepareStackTrace &&
+        (error = error.slice(prevPrepareStackTrace + 1));
+      prevPrepareStackTrace = error.indexOf("react_stack_bottom_frame");
+      -1 !== prevPrepareStackTrace &&
+        (prevPrepareStackTrace = error.lastIndexOf(
+          "\n",
+          prevPrepareStackTrace
+        ));
+      if (-1 !== prevPrepareStackTrace)
+        error = error.slice(0, prevPrepareStackTrace);
+      else return "";
+      return error;
+    }
+    function describeComponentStackByType(type) {
+      if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+      if ("function" === typeof type)
+        return type.prototype && type.prototype.isReactComponent
+          ? describeNativeComponentFrame(type, !0)
+          : describeNativeComponentFrame(type, !1);
+      if ("object" === typeof type && null !== type) {
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeNativeComponentFrame(type.render, !1);
+          case REACT_MEMO_TYPE:
+            return describeNativeComponentFrame(type.type, !1);
+          case REACT_LAZY_TYPE:
+            var lazyComponent = type,
+              payload = lazyComponent._payload;
+            lazyComponent = lazyComponent._init;
+            try {
+              type = lazyComponent(payload);
+            } catch (x) {
+              return describeBuiltInComponentFrame("Lazy");
+            }
+            return describeComponentStackByType(type);
+        }
+        if ("string" === typeof type.name)
+          return (
+            (payload = type.env),
+            describeBuiltInComponentFrame(
+              type.name + (payload ? " [" + payload + "]" : "")
+            )
+          );
+      }
+      switch (type) {
+        case REACT_SUSPENSE_LIST_TYPE:
+          return describeBuiltInComponentFrame("SuspenseList");
+        case REACT_SUSPENSE_TYPE:
+          return describeBuiltInComponentFrame("Suspense");
+      }
+      return "";
+    }
+    function defaultErrorHandler(error) {
+      if (
+        "object" === typeof error &&
+        null !== error &&
+        "string" === typeof error.environmentName
+      ) {
+        var JSCompiler_inline_result = error.environmentName;
+        error = [error].slice(0);
+        "string" === typeof error[0]
+          ? error.splice(
+              0,
+              1,
+              "[%s] " + error[0],
+              " " + JSCompiler_inline_result + " "
+            )
+          : error.splice(0, 0, "[%s] ", " " + JSCompiler_inline_result + " ");
+        error.unshift(console);
+        JSCompiler_inline_result = bind.apply(console.error, error);
+        JSCompiler_inline_result();
+      } else console.error(error);
+      return null;
+    }
+    function noop() {}
+    function RequestInstance(
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var abortSet = new Set();
+      this.destination = null;
+      this.flushScheduled = !1;
+      this.resumableState = resumableState;
+      this.renderState = renderState;
+      this.rootFormatContext = rootFormatContext;
+      this.progressiveChunkSize =
+        void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+      this.status = 10;
+      this.fatalError = null;
+      this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+      this.completedPreambleSegments = this.completedRootSegment = null;
+      this.abortableTasks = abortSet;
+      this.pingedTasks = [];
+      this.clientRenderedBoundaries = [];
+      this.completedBoundaries = [];
+      this.partialBoundaries = [];
+      this.trackedPostpones = null;
+      this.onError = void 0 === onError ? defaultErrorHandler : onError;
+      this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+      this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+      this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+      this.onShellError = void 0 === onShellError ? noop : onShellError;
+      this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+      this.formState = void 0 === formState ? null : formState;
+      this.didWarnForKey = null;
+    }
+    function createRequest(
+      children,
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var now = getCurrentTime();
+      1e3 < now - lastResetTime &&
+        ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),
+        (lastResetTime = now));
+      resumableState = new RequestInstance(
+        resumableState,
+        renderState,
+        rootFormatContext,
+        progressiveChunkSize,
+        onError,
+        onAllReady,
+        onShellReady,
+        onShellError,
+        onFatalError,
+        onPostpone,
+        formState
+      );
+      renderState = createPendingSegment(
+        resumableState,
+        0,
+        null,
+        rootFormatContext,
+        !1,
+        !1
+      );
+      renderState.parentFlushed = !0;
+      children = createRenderTask(
+        resumableState,
+        null,
+        children,
+        -1,
+        null,
+        renderState,
+        null,
+        null,
+        resumableState.abortableTasks,
+        null,
+        rootFormatContext,
+        null,
+        emptyTreeContext,
+        null,
+        !1,
+        emptyContextObject,
+        null
+      );
+      pushComponentStack(children);
+      resumableState.pingedTasks.push(children);
+      return resumableState;
+    }
+    function pingTask(request, task) {
+      request.pingedTasks.push(task);
+      1 === request.pingedTasks.length &&
+        ((request.flushScheduled = null !== request.destination),
+        performWork(request));
+    }
+    function createSuspenseBoundary(
+      request,
+      fallbackAbortableTasks,
+      contentPreamble,
+      fallbackPreamble
+    ) {
+      return {
+        status: PENDING,
+        rootSegmentID: -1,
+        parentFlushed: !1,
+        pendingTasks: 0,
+        completedSegments: [],
+        byteSize: 0,
+        fallbackAbortableTasks: fallbackAbortableTasks,
+        errorDigest: null,
+        contentState: createHoistableState(),
+        fallbackState: createHoistableState(),
+        contentPreamble: contentPreamble,
+        fallbackPreamble: fallbackPreamble,
+        trackedContentKeyPath: null,
+        trackedFallbackNode: null,
+        errorMessage: null,
+        errorStack: null,
+        errorComponentStack: null
+      };
+    }
+    function createRenderTask(
+      request,
+      thenableState,
+      node,
+      childIndex,
+      blockedBoundary,
+      blockedSegment,
+      blockedPreamble,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      var task = {
+        replay: null,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: blockedSegment,
+        blockedPreamble: blockedPreamble,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createReplayTask(
+      request,
+      thenableState,
+      replay,
+      node,
+      childIndex,
+      blockedBoundary,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      replay.pendingTasks++;
+      var task = {
+        replay: replay,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: null,
+        blockedPreamble: null,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createPendingSegment(
+      request,
+      index,
+      boundary,
+      parentFormatContext,
+      lastPushedText,
+      textEmbedded
+    ) {
+      return {
+        status: PENDING,
+        parentFlushed: !1,
+        id: -1,
+        index: index,
+        chunks: [],
+        children: [],
+        preambleChildren: [],
+        parentFormatContext: parentFormatContext,
+        boundary: boundary,
+        lastPushedText: lastPushedText,
+        textEmbedded: textEmbedded
+      };
+    }
+    function getCurrentStackInDEV() {
+      if (null === currentTaskInDEV || null === currentTaskInDEV.componentStack)
+        return "";
+      var componentStack = currentTaskInDEV.componentStack;
+      try {
+        var info = "";
+        if ("string" === typeof componentStack.type)
+          info += describeBuiltInComponentFrame(componentStack.type);
+        else if ("function" === typeof componentStack.type) {
+          if (!componentStack.owner) {
+            var JSCompiler_temp_const = info,
+              fn = componentStack.type,
+              name = fn ? fn.displayName || fn.name : "";
+            var JSCompiler_inline_result = name
+              ? describeBuiltInComponentFrame(name)
+              : "";
+            info = JSCompiler_temp_const + JSCompiler_inline_result;
+          }
+        } else
+          componentStack.owner ||
+            (info += describeComponentStackByType(componentStack.type));
+        for (; componentStack; )
+          (JSCompiler_temp_const = null),
+            null != componentStack.debugStack
+              ? (JSCompiler_temp_const = formatOwnerStack(
+                  componentStack.debugStack
+                ))
+              : ((JSCompiler_inline_result = componentStack),
+                null != JSCompiler_inline_result.stack &&
+                  (JSCompiler_temp_const =
+                    "string" !== typeof JSCompiler_inline_result.stack
+                      ? (JSCompiler_inline_result.stack = formatOwnerStack(
+                          JSCompiler_inline_result.stack
+                        ))
+                      : JSCompiler_inline_result.stack)),
+            (componentStack = componentStack.owner) &&
+              JSCompiler_temp_const &&
+              (info += "\n" + JSCompiler_temp_const);
+        var JSCompiler_inline_result$jscomp$0 = info;
+      } catch (x) {
+        JSCompiler_inline_result$jscomp$0 =
+          "\nError generating stack: " + x.message + "\n" + x.stack;
+      }
+      return JSCompiler_inline_result$jscomp$0;
+    }
+    function pushServerComponentStack(task, debugInfo) {
+      if (null != debugInfo)
+        for (var i = 0; i < debugInfo.length; i++) {
+          var componentInfo = debugInfo[i];
+          "string" === typeof componentInfo.name &&
+            void 0 !== componentInfo.debugStack &&
+            ((task.componentStack = {
+              parent: task.componentStack,
+              type: componentInfo,
+              owner: componentInfo.owner,
+              stack: componentInfo.debugStack
+            }),
+            (task.debugTask = componentInfo.debugTask));
+        }
+    }
+    function pushComponentStack(task) {
+      var node = task.node;
+      if ("object" === typeof node && null !== node)
+        switch (node.$$typeof) {
+          case REACT_ELEMENT_TYPE:
+            var type = node.type,
+              owner = node._owner,
+              stack = node._debugStack;
+            pushServerComponentStack(task, node._debugInfo);
+            task.debugTask = node._debugTask;
+            task.componentStack = {
+              parent: task.componentStack,
+              type: type,
+              owner: owner,
+              stack: stack
+            };
+            break;
+          case REACT_LAZY_TYPE:
+            pushServerComponentStack(task, node._debugInfo);
+            break;
+          default:
+            "function" === typeof node.then &&
+              pushServerComponentStack(task, node._debugInfo);
+        }
+    }
+    function getThrownInfo(node$jscomp$0) {
+      var errorInfo = {};
+      node$jscomp$0 &&
+        Object.defineProperty(errorInfo, "componentStack", {
+          configurable: !0,
+          enumerable: !0,
+          get: function () {
+            try {
+              var info = "",
+                node = node$jscomp$0;
+              do
+                (info += describeComponentStackByType(node.type)),
+                  (node = node.parent);
+              while (node);
+              var stack = info;
+            } catch (x) {
+              stack = "\nError generating stack: " + x.message + "\n" + x.stack;
+            }
+            Object.defineProperty(errorInfo, "componentStack", {
+              value: stack
+            });
+            return stack;
+          }
+        });
+      return errorInfo;
+    }
+    function encodeErrorForBoundary(
+      boundary,
+      digest,
+      error,
+      thrownInfo,
+      wasAborted
+    ) {
+      boundary.errorDigest = digest;
+      error instanceof Error
+        ? ((digest = String(error.message)), (error = String(error.stack)))
+        : ((digest =
+            "object" === typeof error && null !== error
+              ? describeObjectForErrorMessage(error)
+              : String(error)),
+          (error = null));
+      wasAborted = wasAborted
+        ? "Switched to client rendering because the server rendering aborted due to:\n\n"
+        : "Switched to client rendering because the server rendering errored:\n\n";
+      boundary.errorMessage = wasAborted + digest;
+      boundary.errorStack = null !== error ? wasAborted + error : null;
+      boundary.errorComponentStack = thrownInfo.componentStack;
+    }
+    function logRecoverableError(request, error, errorInfo, debugTask) {
+      request = request.onError;
+      error = debugTask
+        ? debugTask.run(request.bind(null, error, errorInfo))
+        : request(error, errorInfo);
+      if (null != error && "string" !== typeof error)
+        console.error(
+          'onError returned something with a type other than "string". onError should return a string and may return null or undefined but must not return anything else. It received something of type "%s" instead',
+          typeof error
+        );
+      else return error;
+    }
+    function fatalError(request, error, errorInfo, debugTask) {
+      errorInfo = request.onShellError;
+      var onFatalError = request.onFatalError;
+      debugTask
+        ? (debugTask.run(errorInfo.bind(null, error)),
+          debugTask.run(onFatalError.bind(null, error)))
+        : (errorInfo(error), onFatalError(error));
+      null !== request.destination
+        ? ((request.status = CLOSED), request.destination.destroy(error))
+        : ((request.status = 13), (request.fatalError = error));
+    }
+    function renderWithHooks(
+      request,
+      task,
+      keyPath,
+      Component,
+      props,
+      secondArg
+    ) {
+      var prevThenableState = task.thenableState;
+      task.thenableState = null;
+      currentlyRenderingComponent = {};
+      currentlyRenderingTask = task;
+      currentlyRenderingRequest = request;
+      currentlyRenderingKeyPath = keyPath;
+      isInHookUserCodeInDev = !1;
+      actionStateCounter = localIdCounter = 0;
+      actionStateMatchingIndex = -1;
+      thenableIndexCounter = 0;
+      thenableState = prevThenableState;
+      for (
+        request = callComponentInDEV(Component, props, secondArg);
+        didScheduleRenderPhaseUpdate;
+
+      )
+        (didScheduleRenderPhaseUpdate = !1),
+          (actionStateCounter = localIdCounter = 0),
+          (actionStateMatchingIndex = -1),
+          (thenableIndexCounter = 0),
+          (numberOfReRenders += 1),
+          (workInProgressHook = null),
+          (request = Component(props, secondArg));
+      resetHooksState();
+      return request;
+    }
+    function finishFunctionComponent(
+      request,
+      task,
+      keyPath,
+      children,
+      hasId,
+      actionStateCount,
+      actionStateMatchingIndex
+    ) {
+      var didEmitActionStateMarkers = !1;
+      if (0 !== actionStateCount && null !== request.formState) {
+        var segment = task.blockedSegment;
+        if (null !== segment) {
+          didEmitActionStateMarkers = !0;
+          segment = segment.chunks;
+          for (var i = 0; i < actionStateCount; i++)
+            i === actionStateMatchingIndex
+              ? segment.push("\x3c!--F!--\x3e")
+              : segment.push("\x3c!--F--\x3e");
+        }
+      }
+      actionStateCount = task.keyPath;
+      task.keyPath = keyPath;
+      hasId
+        ? ((keyPath = task.treeContext),
+          (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+          renderNode(request, task, children, -1),
+          (task.treeContext = keyPath))
+        : didEmitActionStateMarkers
+          ? renderNode(request, task, children, -1)
+          : renderNodeDestructive(request, task, children, -1);
+      task.keyPath = actionStateCount;
+    }
+    function renderElement(request, task, keyPath, type, props, ref) {
+      if ("function" === typeof type)
+        if (type.prototype && type.prototype.isReactComponent) {
+          var newProps = props;
+          if ("ref" in props) {
+            newProps = {};
+            for (var propName in props)
+              "ref" !== propName && (newProps[propName] = props[propName]);
+          }
+          var defaultProps = type.defaultProps;
+          if (defaultProps) {
+            newProps === props && (newProps = assign({}, newProps, props));
+            for (var _propName in defaultProps)
+              void 0 === newProps[_propName] &&
+                (newProps[_propName] = defaultProps[_propName]);
+          }
+          var resolvedProps = newProps;
+          var context = emptyContextObject,
+            contextType = type.contextType;
+          if (
+            "contextType" in type &&
+            null !== contextType &&
+            (void 0 === contextType ||
+              contextType.$$typeof !== REACT_CONTEXT_TYPE) &&
+            !didWarnAboutInvalidateContextType.has(type)
+          ) {
+            didWarnAboutInvalidateContextType.add(type);
+            var addendum =
+              void 0 === contextType
+                ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file."
+                : "object" !== typeof contextType
+                  ? " However, it is set to a " + typeof contextType + "."
+                  : contextType.$$typeof === REACT_CONSUMER_TYPE
+                    ? " Did you accidentally pass the Context.Consumer instead?"
+                    : " However, it is set to an object with keys {" +
+                      Object.keys(contextType).join(", ") +
+                      "}.";
+            console.error(
+              "%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",
+              getComponentNameFromType(type) || "Component",
+              addendum
+            );
+          }
+          "object" === typeof contextType &&
+            null !== contextType &&
+            (context = contextType._currentValue2);
+          var instance = new type(resolvedProps, context);
+          if (
+            "function" === typeof type.getDerivedStateFromProps &&
+            (null === instance.state || void 0 === instance.state)
+          ) {
+            var componentName = getComponentNameFromType(type) || "Component";
+            didWarnAboutUninitializedState.has(componentName) ||
+              (didWarnAboutUninitializedState.add(componentName),
+              console.error(
+                "`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",
+                componentName,
+                null === instance.state ? "null" : "undefined",
+                componentName
+              ));
+          }
+          if (
+            "function" === typeof type.getDerivedStateFromProps ||
+            "function" === typeof instance.getSnapshotBeforeUpdate
+          ) {
+            var foundWillMountName = null,
+              foundWillReceivePropsName = null,
+              foundWillUpdateName = null;
+            "function" === typeof instance.componentWillMount &&
+            !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ? (foundWillMountName = "componentWillMount")
+              : "function" === typeof instance.UNSAFE_componentWillMount &&
+                (foundWillMountName = "UNSAFE_componentWillMount");
+            "function" === typeof instance.componentWillReceiveProps &&
+            !0 !==
+              instance.componentWillReceiveProps.__suppressDeprecationWarning
+              ? (foundWillReceivePropsName = "componentWillReceiveProps")
+              : "function" ===
+                  typeof instance.UNSAFE_componentWillReceiveProps &&
+                (foundWillReceivePropsName =
+                  "UNSAFE_componentWillReceiveProps");
+            "function" === typeof instance.componentWillUpdate &&
+            !0 !== instance.componentWillUpdate.__suppressDeprecationWarning
+              ? (foundWillUpdateName = "componentWillUpdate")
+              : "function" === typeof instance.UNSAFE_componentWillUpdate &&
+                (foundWillUpdateName = "UNSAFE_componentWillUpdate");
+            if (
+              null !== foundWillMountName ||
+              null !== foundWillReceivePropsName ||
+              null !== foundWillUpdateName
+            ) {
+              var _componentName =
+                  getComponentNameFromType(type) || "Component",
+                newApiName =
+                  "function" === typeof type.getDerivedStateFromProps
+                    ? "getDerivedStateFromProps()"
+                    : "getSnapshotBeforeUpdate()";
+              didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName) ||
+                (didWarnAboutLegacyLifecyclesAndDerivedState.add(
+                  _componentName
+                ),
+                console.error(
+                  "Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles",
+                  _componentName,
+                  newApiName,
+                  null !== foundWillMountName
+                    ? "\n  " + foundWillMountName
+                    : "",
+                  null !== foundWillReceivePropsName
+                    ? "\n  " + foundWillReceivePropsName
+                    : "",
+                  null !== foundWillUpdateName
+                    ? "\n  " + foundWillUpdateName
+                    : ""
+                ));
+            }
+          }
+          var name = getComponentNameFromType(type) || "Component";
+          instance.render ||
+            (type.prototype && "function" === typeof type.prototype.render
+              ? console.error(
+                  "No `render` method found on the %s instance: did you accidentally return an object from the constructor?",
+                  name
+                )
+              : console.error(
+                  "No `render` method found on the %s instance: you may have forgotten to define `render`.",
+                  name
+                ));
+          !instance.getInitialState ||
+            instance.getInitialState.isReactClassApproved ||
+            instance.state ||
+            console.error(
+              "getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",
+              name
+            );
+          instance.getDefaultProps &&
+            !instance.getDefaultProps.isReactClassApproved &&
+            console.error(
+              "getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",
+              name
+            );
+          instance.contextType &&
+            console.error(
+              "contextType was defined as an instance property on %s. Use a static property to define contextType instead.",
+              name
+            );
+          type.childContextTypes &&
+            !didWarnAboutChildContextTypes.has(type) &&
+            (didWarnAboutChildContextTypes.add(type),
+            console.error(
+              "%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          type.contextTypes &&
+            !didWarnAboutContextTypes$1.has(type) &&
+            (didWarnAboutContextTypes$1.add(type),
+            console.error(
+              "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          "function" === typeof instance.componentShouldUpdate &&
+            console.error(
+              "%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",
+              name
+            );
+          type.prototype &&
+            type.prototype.isPureReactComponent &&
+            "undefined" !== typeof instance.shouldComponentUpdate &&
+            console.error(
+              "%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",
+              getComponentNameFromType(type) || "A pure component"
+            );
+          "function" === typeof instance.componentDidUnmount &&
+            console.error(
+              "%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",
+              name
+            );
+          "function" === typeof instance.componentDidReceiveProps &&
+            console.error(
+              "%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",
+              name
+            );
+          "function" === typeof instance.componentWillRecieveProps &&
+            console.error(
+              "%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",
+              name
+            );
+          "function" === typeof instance.UNSAFE_componentWillRecieveProps &&
+            console.error(
+              "%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",
+              name
+            );
+          var hasMutatedProps = instance.props !== resolvedProps;
+          void 0 !== instance.props &&
+            hasMutatedProps &&
+            console.error(
+              "When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",
+              name
+            );
+          instance.defaultProps &&
+            console.error(
+              "Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",
+              name,
+              name
+            );
+          "function" !== typeof instance.getSnapshotBeforeUpdate ||
+            "function" === typeof instance.componentDidUpdate ||
+            didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(type) ||
+            (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(type),
+            console.error(
+              "%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",
+              getComponentNameFromType(type)
+            ));
+          "function" === typeof instance.getDerivedStateFromProps &&
+            console.error(
+              "%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof instance.getDerivedStateFromError &&
+            console.error(
+              "%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof type.getSnapshotBeforeUpdate &&
+            console.error(
+              "%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",
+              name
+            );
+          var state = instance.state;
+          state &&
+            ("object" !== typeof state || isArrayImpl(state)) &&
+            console.error("%s.state: must be set to an object or null", name);
+          "function" === typeof instance.getChildContext &&
+            "object" !== typeof type.childContextTypes &&
+            console.error(
+              "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",
+              name
+            );
+          var initialState = void 0 !== instance.state ? instance.state : null;
+          instance.updater = classComponentUpdater;
+          instance.props = resolvedProps;
+          instance.state = initialState;
+          var internalInstance = { queue: [], replace: !1 };
+          instance._reactInternals = internalInstance;
+          var contextType$jscomp$0 = type.contextType;
+          instance.context =
+            "object" === typeof contextType$jscomp$0 &&
+            null !== contextType$jscomp$0
+              ? contextType$jscomp$0._currentValue2
+              : emptyContextObject;
+          if (instance.state === resolvedProps) {
+            var componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Component";
+            didWarnAboutDirectlyAssigningPropsToState.has(
+              componentName$jscomp$0
+            ) ||
+              (didWarnAboutDirectlyAssigningPropsToState.add(
+                componentName$jscomp$0
+              ),
+              console.error(
+                "%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",
+                componentName$jscomp$0
+              ));
+          }
+          var getDerivedStateFromProps = type.getDerivedStateFromProps;
+          if ("function" === typeof getDerivedStateFromProps) {
+            var partialState = getDerivedStateFromProps(
+              resolvedProps,
+              initialState
+            );
+            if (void 0 === partialState) {
+              var componentName$jscomp$1 =
+                getComponentNameFromType(type) || "Component";
+              didWarnAboutUndefinedDerivedState.has(componentName$jscomp$1) ||
+                (didWarnAboutUndefinedDerivedState.add(componentName$jscomp$1),
+                console.error(
+                  "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",
+                  componentName$jscomp$1
+                ));
+            }
+            var JSCompiler_inline_result =
+              null === partialState || void 0 === partialState
+                ? initialState
+                : assign({}, initialState, partialState);
+            instance.state = JSCompiler_inline_result;
+          }
+          if (
+            "function" !== typeof type.getDerivedStateFromProps &&
+            "function" !== typeof instance.getSnapshotBeforeUpdate &&
+            ("function" === typeof instance.UNSAFE_componentWillMount ||
+              "function" === typeof instance.componentWillMount)
+          ) {
+            var oldState = instance.state;
+            if ("function" === typeof instance.componentWillMount) {
+              if (
+                !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ) {
+                var componentName$jscomp$2 =
+                  getComponentNameFromType(type) || "Unknown";
+                didWarnAboutDeprecatedWillMount[componentName$jscomp$2] ||
+                  (console.warn(
+                    "componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code from componentWillMount to componentDidMount (preferred in most cases) or the constructor.\n\nPlease update the following components: %s",
+                    componentName$jscomp$2
+                  ),
+                  (didWarnAboutDeprecatedWillMount[componentName$jscomp$2] =
+                    !0));
+              }
+              instance.componentWillMount();
+            }
+            "function" === typeof instance.UNSAFE_componentWillMount &&
+              instance.UNSAFE_componentWillMount();
+            oldState !== instance.state &&
+              (console.error(
+                "%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+                getComponentNameFromType(type) || "Component"
+              ),
+              classComponentUpdater.enqueueReplaceState(
+                instance,
+                instance.state,
+                null
+              ));
+            if (
+              null !== internalInstance.queue &&
+              0 < internalInstance.queue.length
+            ) {
+              var oldQueue = internalInstance.queue,
+                oldReplace = internalInstance.replace;
+              internalInstance.queue = null;
+              internalInstance.replace = !1;
+              if (oldReplace && 1 === oldQueue.length)
+                instance.state = oldQueue[0];
+              else {
+                for (
+                  var nextState = oldReplace ? oldQueue[0] : instance.state,
+                    dontMutate = !0,
+                    i = oldReplace ? 1 : 0;
+                  i < oldQueue.length;
+                  i++
+                ) {
+                  var partial = oldQueue[i],
+                    partialState$jscomp$0 =
+                      "function" === typeof partial
+                        ? partial.call(
+                            instance,
+                            nextState,
+                            resolvedProps,
+                            void 0
+                          )
+                        : partial;
+                  null != partialState$jscomp$0 &&
+                    (dontMutate
+                      ? ((dontMutate = !1),
+                        (nextState = assign(
+                          {},
+                          nextState,
+                          partialState$jscomp$0
+                        )))
+                      : assign(nextState, partialState$jscomp$0));
+                }
+                instance.state = nextState;
+              }
+            } else internalInstance.queue = null;
+          }
+          var nextChildren = callRenderInDEV(instance);
+          if (12 === request.status) throw null;
+          instance.props !== resolvedProps &&
+            (didWarnAboutReassigningProps ||
+              console.error(
+                "It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",
+                getComponentNameFromType(type) || "a component"
+              ),
+            (didWarnAboutReassigningProps = !0));
+          var prevKeyPath = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, nextChildren, -1);
+          task.keyPath = prevKeyPath;
+        } else {
+          if (type.prototype && "function" === typeof type.prototype.render) {
+            var componentName$jscomp$3 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutBadClass[componentName$jscomp$3] ||
+              (console.error(
+                "The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",
+                componentName$jscomp$3,
+                componentName$jscomp$3
+              ),
+              (didWarnAboutBadClass[componentName$jscomp$3] = !0));
+          }
+          var value = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type,
+            props,
+            void 0
+          );
+          if (12 === request.status) throw null;
+          var hasId = 0 !== localIdCounter,
+            actionStateCount = actionStateCounter,
+            actionStateMatchingIndex$jscomp$0 = actionStateMatchingIndex;
+          if (type.contextTypes) {
+            var _componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypes[_componentName$jscomp$0] ||
+              ((didWarnAboutContextTypes[_componentName$jscomp$0] = !0),
+              console.error(
+                "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",
+                _componentName$jscomp$0
+              ));
+          }
+          type &&
+            type.childContextTypes &&
+            console.error(
+              "childContextTypes cannot be defined on a function component.\n  %s.childContextTypes = ...",
+              type.displayName || type.name || "Component"
+            );
+          if ("function" === typeof type.getDerivedStateFromProps) {
+            var _componentName2 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] ||
+              (console.error(
+                "%s: Function components do not support getDerivedStateFromProps.",
+                _componentName2
+              ),
+              (didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] =
+                !0));
+          }
+          if (
+            "object" === typeof type.contextType &&
+            null !== type.contextType
+          ) {
+            var _componentName3 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypeOnFunctionComponent[_componentName3] ||
+              (console.error(
+                "%s: Function components do not support contextType.",
+                _componentName3
+              ),
+              (didWarnAboutContextTypeOnFunctionComponent[_componentName3] =
+                !0));
+          }
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            value,
+            hasId,
+            actionStateCount,
+            actionStateMatchingIndex$jscomp$0
+          );
+        }
+      else if ("string" === typeof type) {
+        var segment = task.blockedSegment;
+        if (null === segment) {
+          var children = props.children,
+            prevContext = task.formatContext,
+            prevKeyPath$jscomp$0 = task.keyPath;
+          task.formatContext = getChildFormatContext(prevContext, type, props);
+          task.keyPath = keyPath;
+          renderNode(request, task, children, -1);
+          task.formatContext = prevContext;
+          task.keyPath = prevKeyPath$jscomp$0;
+        } else {
+          var _children = pushStartInstance(
+            segment.chunks,
+            type,
+            props,
+            request.resumableState,
+            request.renderState,
+            task.blockedPreamble,
+            task.hoistableState,
+            task.formatContext,
+            segment.lastPushedText,
+            task.isFallback
+          );
+          segment.lastPushedText = !1;
+          var _prevContext = task.formatContext,
+            _prevKeyPath2 = task.keyPath;
+          task.keyPath = keyPath;
+          if (
+            (task.formatContext = getChildFormatContext(
+              _prevContext,
+              type,
+              props
+            )).insertionMode === HTML_HEAD_MODE
+          ) {
+            var preambleSegment = createPendingSegment(
+              request,
+              0,
+              null,
+              task.formatContext,
+              !1,
+              !1
+            );
+            segment.preambleChildren.push(preambleSegment);
+            var preambleTask = createRenderTask(
+              request,
+              null,
+              _children,
+              -1,
+              task.blockedBoundary,
+              preambleSegment,
+              task.blockedPreamble,
+              task.hoistableState,
+              request.abortableTasks,
+              task.keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback,
+              emptyContextObject,
+              task.debugTask
+            );
+            pushComponentStack(preambleTask);
+            request.pingedTasks.push(preambleTask);
+          } else renderNode(request, task, _children, -1);
+          task.formatContext = _prevContext;
+          task.keyPath = _prevKeyPath2;
+          a: {
+            var target = segment.chunks,
+              resumableState = request.resumableState;
+            switch (type) {
+              case "title":
+              case "style":
+              case "script":
+              case "area":
+              case "base":
+              case "br":
+              case "col":
+              case "embed":
+              case "hr":
+              case "img":
+              case "input":
+              case "keygen":
+              case "link":
+              case "meta":
+              case "param":
+              case "source":
+              case "track":
+              case "wbr":
+                break a;
+              case "body":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) {
+                  resumableState.hasBody = !0;
+                  break a;
+                }
+                break;
+              case "html":
+                if (_prevContext.insertionMode === ROOT_HTML_MODE) {
+                  resumableState.hasHtml = !0;
+                  break a;
+                }
+                break;
+              case "head":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) break a;
+            }
+            target.push(endChunkForTag(type));
+          }
+          segment.lastPushedText = !1;
+        }
+      } else {
+        switch (type) {
+          case REACT_LEGACY_HIDDEN_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_FRAGMENT_TYPE:
+            var prevKeyPath$jscomp$1 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = prevKeyPath$jscomp$1;
+            return;
+          case REACT_ACTIVITY_TYPE:
+            if ("hidden" !== props.mode) {
+              var prevKeyPath$jscomp$2 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, props.children, -1);
+              task.keyPath = prevKeyPath$jscomp$2;
+            }
+            return;
+          case REACT_SUSPENSE_LIST_TYPE:
+            var _prevKeyPath3 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = _prevKeyPath3;
+            return;
+          case REACT_VIEW_TRANSITION_TYPE:
+          case REACT_SCOPE_TYPE:
+            throw Error(
+              "ReactDOMServer does not yet support scope components."
+            );
+          case REACT_SUSPENSE_TYPE:
+            a: if (null !== task.replay) {
+              var _prevKeyPath = task.keyPath;
+              task.keyPath = keyPath;
+              var _content = props.children;
+              try {
+                renderNode(request, task, _content, -1);
+              } finally {
+                task.keyPath = _prevKeyPath;
+              }
+            } else {
+              var prevKeyPath$jscomp$3 = task.keyPath,
+                parentBoundary = task.blockedBoundary,
+                parentPreamble = task.blockedPreamble,
+                parentHoistableState = task.hoistableState,
+                parentSegment = task.blockedSegment,
+                fallback = props.fallback,
+                content = props.children,
+                fallbackAbortSet = new Set();
+              var newBoundary =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              null !== request.trackedPostpones &&
+                (newBoundary.trackedContentKeyPath = keyPath);
+              var boundarySegment = createPendingSegment(
+                request,
+                parentSegment.chunks.length,
+                newBoundary,
+                task.formatContext,
+                !1,
+                !1
+              );
+              parentSegment.children.push(boundarySegment);
+              parentSegment.lastPushedText = !1;
+              var contentRootSegment = createPendingSegment(
+                request,
+                0,
+                null,
+                task.formatContext,
+                !1,
+                !1
+              );
+              contentRootSegment.parentFlushed = !0;
+              if (null !== request.trackedPostpones) {
+                var fallbackKeyPath = [
+                    keyPath[0],
+                    "Suspense Fallback",
+                    keyPath[2]
+                  ],
+                  fallbackReplayNode = [
+                    fallbackKeyPath[1],
+                    fallbackKeyPath[2],
+                    [],
+                    null
+                  ];
+                request.trackedPostpones.workingMap.set(
+                  fallbackKeyPath,
+                  fallbackReplayNode
+                );
+                newBoundary.trackedFallbackNode = fallbackReplayNode;
+                task.blockedSegment = boundarySegment;
+                task.blockedPreamble = newBoundary.fallbackPreamble;
+                task.keyPath = fallbackKeyPath;
+                boundarySegment.status = 6;
+                try {
+                  renderNode(request, task, fallback, -1),
+                    pushSegmentFinale(
+                      boundarySegment.chunks,
+                      request.renderState,
+                      boundarySegment.lastPushedText,
+                      boundarySegment.textEmbedded
+                    ),
+                    (boundarySegment.status = COMPLETED);
+                } catch (thrownValue) {
+                  throw (
+                    ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                    thrownValue)
+                  );
+                } finally {
+                  (task.blockedSegment = parentSegment),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedPrimaryTask = createRenderTask(
+                  request,
+                  null,
+                  content,
+                  -1,
+                  newBoundary,
+                  contentRootSegment,
+                  newBoundary.contentPreamble,
+                  newBoundary.contentState,
+                  task.abortSet,
+                  keyPath,
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  task.isFallback,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedPrimaryTask);
+                request.pingedTasks.push(suspendedPrimaryTask);
+              } else {
+                task.blockedBoundary = newBoundary;
+                task.blockedPreamble = newBoundary.contentPreamble;
+                task.hoistableState = newBoundary.contentState;
+                task.blockedSegment = contentRootSegment;
+                task.keyPath = keyPath;
+                contentRootSegment.status = 6;
+                try {
+                  if (
+                    (renderNode(request, task, content, -1),
+                    pushSegmentFinale(
+                      contentRootSegment.chunks,
+                      request.renderState,
+                      contentRootSegment.lastPushedText,
+                      contentRootSegment.textEmbedded
+                    ),
+                    (contentRootSegment.status = COMPLETED),
+                    queueCompletedSegment(newBoundary, contentRootSegment),
+                    0 === newBoundary.pendingTasks &&
+                      newBoundary.status === PENDING)
+                  ) {
+                    newBoundary.status = COMPLETED;
+                    0 === request.pendingRootTasks &&
+                      task.blockedPreamble &&
+                      preparePreamble(request);
+                    break a;
+                  }
+                } catch (thrownValue$2) {
+                  newBoundary.status = CLIENT_RENDERED;
+                  if (12 === request.status) {
+                    contentRootSegment.status = 3;
+                    var error = request.fatalError;
+                  } else
+                    (contentRootSegment.status = 4), (error = thrownValue$2);
+                  var thrownInfo = getThrownInfo(task.componentStack);
+                  var errorDigest = logRecoverableError(
+                    request,
+                    error,
+                    thrownInfo,
+                    task.debugTask
+                  );
+                  encodeErrorForBoundary(
+                    newBoundary,
+                    errorDigest,
+                    error,
+                    thrownInfo,
+                    !1
+                  );
+                  untrackBoundary(request, newBoundary);
+                } finally {
+                  (task.blockedBoundary = parentBoundary),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.hoistableState = parentHoistableState),
+                    (task.blockedSegment = parentSegment),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedFallbackTask = createRenderTask(
+                  request,
+                  null,
+                  fallback,
+                  -1,
+                  parentBoundary,
+                  boundarySegment,
+                  newBoundary.fallbackPreamble,
+                  newBoundary.fallbackState,
+                  fallbackAbortSet,
+                  [keyPath[0], "Suspense Fallback", keyPath[2]],
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  !0,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedFallbackTask);
+                request.pingedTasks.push(suspendedFallbackTask);
+              }
+            }
+            return;
+        }
+        if ("object" === typeof type && null !== type)
+          switch (type.$$typeof) {
+            case REACT_FORWARD_REF_TYPE:
+              if ("ref" in props) {
+                var propsWithoutRef = {};
+                for (var key in props)
+                  "ref" !== key && (propsWithoutRef[key] = props[key]);
+              } else propsWithoutRef = props;
+              var children$jscomp$0 = renderWithHooks(
+                request,
+                task,
+                keyPath,
+                type.render,
+                propsWithoutRef,
+                ref
+              );
+              finishFunctionComponent(
+                request,
+                task,
+                keyPath,
+                children$jscomp$0,
+                0 !== localIdCounter,
+                actionStateCounter,
+                actionStateMatchingIndex
+              );
+              return;
+            case REACT_MEMO_TYPE:
+              renderElement(request, task, keyPath, type.type, props, ref);
+              return;
+            case REACT_PROVIDER_TYPE:
+            case REACT_CONTEXT_TYPE:
+              var value$jscomp$0 = props.value,
+                children$jscomp$1 = props.children;
+              var prevSnapshot = task.context;
+              var prevKeyPath$jscomp$4 = task.keyPath;
+              var prevValue = type._currentValue2;
+              type._currentValue2 = value$jscomp$0;
+              void 0 !== type._currentRenderer2 &&
+                null !== type._currentRenderer2 &&
+                type._currentRenderer2 !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer2 = rendererSigil;
+              var prevNode = currentActiveSnapshot,
+                newNode = {
+                  parent: prevNode,
+                  depth: null === prevNode ? 0 : prevNode.depth + 1,
+                  context: type,
+                  parentValue: prevValue,
+                  value: value$jscomp$0
+                };
+              currentActiveSnapshot = newNode;
+              task.context = newNode;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, children$jscomp$1, -1);
+              var prevSnapshot$jscomp$0 = currentActiveSnapshot;
+              if (null === prevSnapshot$jscomp$0)
+                throw Error(
+                  "Tried to pop a Context at the root of the app. This is a bug in React."
+                );
+              prevSnapshot$jscomp$0.context !== type &&
+                console.error(
+                  "The parent context is not the expected context. This is probably a bug in React."
+                );
+              prevSnapshot$jscomp$0.context._currentValue2 =
+                prevSnapshot$jscomp$0.parentValue;
+              void 0 !== type._currentRenderer2 &&
+                null !== type._currentRenderer2 &&
+                type._currentRenderer2 !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer2 = rendererSigil;
+              var JSCompiler_inline_result$jscomp$0 = (currentActiveSnapshot =
+                prevSnapshot$jscomp$0.parent);
+              task.context = JSCompiler_inline_result$jscomp$0;
+              task.keyPath = prevKeyPath$jscomp$4;
+              prevSnapshot !== task.context &&
+                console.error(
+                  "Popping the context provider did not return back to the original snapshot. This is a bug in React."
+                );
+              return;
+            case REACT_CONSUMER_TYPE:
+              var context$jscomp$0 = type._context,
+                render = props.children;
+              "function" !== typeof render &&
+                console.error(
+                  "A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."
+                );
+              var newChildren = render(context$jscomp$0._currentValue2),
+                prevKeyPath$jscomp$5 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, newChildren, -1);
+              task.keyPath = prevKeyPath$jscomp$5;
+              return;
+            case REACT_LAZY_TYPE:
+              var Component = callLazyInitInDEV(type);
+              if (12 === request.status) throw null;
+              renderElement(request, task, keyPath, Component, props, ref);
+              return;
+          }
+        var info = "";
+        if (
+          void 0 === type ||
+          ("object" === typeof type &&
+            null !== type &&
+            0 === Object.keys(type).length)
+        )
+          info +=
+            " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
+        throw Error(
+          "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+            ((null == type ? type : typeof type) + "." + info)
+        );
+      }
+    }
+    function resumeNode(request, task, segmentId, node, childIndex) {
+      var prevReplay = task.replay,
+        blockedBoundary = task.blockedBoundary,
+        resumedSegment = createPendingSegment(
+          request,
+          0,
+          null,
+          task.formatContext,
+          !1,
+          !1
+        );
+      resumedSegment.id = segmentId;
+      resumedSegment.parentFlushed = !0;
+      try {
+        (task.replay = null),
+          (task.blockedSegment = resumedSegment),
+          renderNode(request, task, node, childIndex),
+          (resumedSegment.status = COMPLETED),
+          null === blockedBoundary
+            ? (request.completedRootSegment = resumedSegment)
+            : (queueCompletedSegment(blockedBoundary, resumedSegment),
+              blockedBoundary.parentFlushed &&
+                request.partialBoundaries.push(blockedBoundary));
+      } finally {
+        (task.replay = prevReplay), (task.blockedSegment = null);
+      }
+    }
+    function replayElement(
+      request,
+      task,
+      keyPath,
+      name,
+      keyOrIndex,
+      childIndex,
+      type,
+      props,
+      ref,
+      replay
+    ) {
+      childIndex = replay.nodes;
+      for (var i = 0; i < childIndex.length; i++) {
+        var node = childIndex[i];
+        if (keyOrIndex === node[1]) {
+          if (4 === node.length) {
+            if (null !== name && name !== node[0])
+              throw Error(
+                "Expected the resume to render <" +
+                  node[0] +
+                  "> in this slot but instead it rendered <" +
+                  name +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            var childNodes = node[2];
+            node = node[3];
+            name = task.node;
+            task.replay = { nodes: childNodes, slots: node, pendingTasks: 1 };
+            try {
+              renderElement(request, task, keyPath, type, props, ref);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw (task.node === name && (task.replay = replay), x);
+              task.replay.pendingTasks--;
+              type = getThrownInfo(task.componentStack);
+              props = request;
+              request = task.blockedBoundary;
+              keyPath = x;
+              ref = node;
+              node = logRecoverableError(props, keyPath, type, task.debugTask);
+              abortRemainingReplayNodes(
+                props,
+                request,
+                childNodes,
+                ref,
+                keyPath,
+                node,
+                type,
+                !1
+              );
+            }
+            task.replay = replay;
+          } else {
+            if (type !== REACT_SUSPENSE_TYPE)
+              throw Error(
+                "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+                  (getComponentNameFromType(type) || "Unknown") +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            a: {
+              replay = void 0;
+              type = node[5];
+              ref = node[2];
+              name = node[3];
+              keyOrIndex = null === node[4] ? [] : node[4][2];
+              node = null === node[4] ? null : node[4][3];
+              var prevKeyPath = task.keyPath,
+                previousReplaySet = task.replay,
+                parentBoundary = task.blockedBoundary,
+                parentHoistableState = task.hoistableState,
+                content = props.children,
+                fallback = props.fallback,
+                fallbackAbortSet = new Set();
+              props =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              props.parentFlushed = !0;
+              props.rootSegmentID = type;
+              task.blockedBoundary = props;
+              task.hoistableState = props.contentState;
+              task.keyPath = keyPath;
+              task.replay = { nodes: ref, slots: name, pendingTasks: 1 };
+              try {
+                renderNode(request, task, content, -1);
+                if (
+                  1 === task.replay.pendingTasks &&
+                  0 < task.replay.nodes.length
+                )
+                  throw Error(
+                    "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                  );
+                task.replay.pendingTasks--;
+                if (0 === props.pendingTasks && props.status === PENDING) {
+                  props.status = COMPLETED;
+                  request.completedBoundaries.push(props);
+                  break a;
+                }
+              } catch (error) {
+                (props.status = CLIENT_RENDERED),
+                  (childNodes = getThrownInfo(task.componentStack)),
+                  (replay = logRecoverableError(
+                    request,
+                    error,
+                    childNodes,
+                    task.debugTask
+                  )),
+                  encodeErrorForBoundary(props, replay, error, childNodes, !1),
+                  task.replay.pendingTasks--,
+                  request.clientRenderedBoundaries.push(props);
+              } finally {
+                (task.blockedBoundary = parentBoundary),
+                  (task.hoistableState = parentHoistableState),
+                  (task.replay = previousReplaySet),
+                  (task.keyPath = prevKeyPath);
+              }
+              props = createReplayTask(
+                request,
+                null,
+                { nodes: keyOrIndex, slots: node, pendingTasks: 0 },
+                fallback,
+                -1,
+                parentBoundary,
+                props.fallbackState,
+                fallbackAbortSet,
+                [keyPath[0], "Suspense Fallback", keyPath[2]],
+                task.formatContext,
+                task.context,
+                task.treeContext,
+                task.componentStack,
+                !0,
+                emptyContextObject,
+                task.debugTask
+              );
+              pushComponentStack(props);
+              request.pingedTasks.push(props);
+            }
+          }
+          childIndex.splice(i, 1);
+          break;
+        }
+      }
+    }
+    function renderNodeDestructive(request, task, node, childIndex) {
+      null !== task.replay && "number" === typeof task.replay.slots
+        ? resumeNode(request, task, task.replay.slots, node, childIndex)
+        : ((task.node = node),
+          (task.childIndex = childIndex),
+          (node = task.componentStack),
+          (childIndex = task.debugTask),
+          pushComponentStack(task),
+          retryNode(request, task),
+          (task.componentStack = node),
+          (task.debugTask = childIndex));
+    }
+    function retryNode(request, task) {
+      var node = task.node,
+        childIndex = task.childIndex;
+      if (null !== node) {
+        if ("object" === typeof node) {
+          switch (node.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              var type = node.type,
+                key = node.key;
+              node = node.props;
+              var refProp = node.ref;
+              refProp = void 0 !== refProp ? refProp : null;
+              var debugTask = task.debugTask,
+                name = getComponentNameFromType(type);
+              key = null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+              var keyPath = [task.keyPath, name, key];
+              null !== task.replay
+                ? debugTask
+                  ? debugTask.run(
+                      replayElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        name,
+                        key,
+                        childIndex,
+                        type,
+                        node,
+                        refProp,
+                        task.replay
+                      )
+                    )
+                  : replayElement(
+                      request,
+                      task,
+                      keyPath,
+                      name,
+                      key,
+                      childIndex,
+                      type,
+                      node,
+                      refProp,
+                      task.replay
+                    )
+                : debugTask
+                  ? debugTask.run(
+                      renderElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        type,
+                        node,
+                        refProp
+                      )
+                    )
+                  : renderElement(request, task, keyPath, type, node, refProp);
+              return;
+            case REACT_PORTAL_TYPE:
+              throw Error(
+                "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+              );
+            case REACT_LAZY_TYPE:
+              node = callLazyInitInDEV(node);
+              if (12 === request.status) throw null;
+              renderNodeDestructive(request, task, node, childIndex);
+              return;
+          }
+          if (isArrayImpl(node)) {
+            renderChildrenArray(request, task, node, childIndex);
+            return;
+          }
+          null === node || "object" !== typeof node
+            ? (key = null)
+            : ((type =
+                (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+                node["@@iterator"]),
+              (key = "function" === typeof type ? type : null));
+          if (key && (type = key.call(node))) {
+            if (type === node) {
+              if (
+                -1 !== childIndex ||
+                null === task.componentStack ||
+                "function" !== typeof task.componentStack.type ||
+                "[object GeneratorFunction]" !==
+                  Object.prototype.toString.call(task.componentStack.type) ||
+                "[object Generator]" !== Object.prototype.toString.call(type)
+              )
+                didWarnAboutGenerators ||
+                  console.error(
+                    "Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."
+                  ),
+                  (didWarnAboutGenerators = !0);
+            } else
+              node.entries !== key ||
+                didWarnAboutMaps ||
+                (console.error(
+                  "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+                ),
+                (didWarnAboutMaps = !0));
+            node = type.next();
+            if (!node.done) {
+              key = [];
+              do key.push(node.value), (node = type.next());
+              while (!node.done);
+              renderChildrenArray(request, task, key, childIndex);
+            }
+            return;
+          }
+          if ("function" === typeof node.then)
+            return (
+              (task.thenableState = null),
+              renderNodeDestructive(
+                request,
+                task,
+                unwrapThenable(node),
+                childIndex
+              )
+            );
+          if (node.$$typeof === REACT_CONTEXT_TYPE)
+            return renderNodeDestructive(
+              request,
+              task,
+              node._currentValue2,
+              childIndex
+            );
+          request = Object.prototype.toString.call(node);
+          throw Error(
+            "Objects are not valid as a React child (found: " +
+              ("[object Object]" === request
+                ? "object with keys {" + Object.keys(node).join(", ") + "}"
+                : request) +
+              "). If you meant to render a collection of children, use an array instead."
+          );
+        }
+        "string" === typeof node
+          ? ((task = task.blockedSegment),
+            null !== task &&
+              (task.lastPushedText = pushTextInstance(
+                task.chunks,
+                node,
+                request.renderState,
+                task.lastPushedText
+              )))
+          : "number" === typeof node || "bigint" === typeof node
+            ? ((task = task.blockedSegment),
+              null !== task &&
+                (task.lastPushedText = pushTextInstance(
+                  task.chunks,
+                  "" + node,
+                  request.renderState,
+                  task.lastPushedText
+                )))
+            : ("function" === typeof node &&
+                ((request = node.displayName || node.name || "Component"),
+                console.error(
+                  "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.",
+                  request,
+                  request
+                )),
+              "symbol" === typeof node &&
+                console.error(
+                  "Symbols are not valid as a React child.\n  %s",
+                  String(node)
+                ));
+      }
+    }
+    function renderChildrenArray(request, task, children, childIndex) {
+      var prevKeyPath = task.keyPath,
+        previousComponentStack = task.componentStack;
+      var previousDebugTask = task.debugTask;
+      pushServerComponentStack(task, task.node._debugInfo);
+      if (
+        -1 !== childIndex &&
+        ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+        null !== task.replay)
+      ) {
+        for (
+          var replay = task.replay, replayNodes = replay.nodes, j = 0;
+          j < replayNodes.length;
+          j++
+        ) {
+          var node = replayNodes[j];
+          if (node[1] === childIndex) {
+            childIndex = node[2];
+            node = node[3];
+            task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+            try {
+              renderChildrenArray(request, task, children, -1);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw x;
+              task.replay.pendingTasks--;
+              var thrownInfo = getThrownInfo(task.componentStack);
+              children = task.blockedBoundary;
+              var error = x,
+                resumeSlots = node;
+              node = logRecoverableError(
+                request,
+                error,
+                thrownInfo,
+                task.debugTask
+              );
+              abortRemainingReplayNodes(
+                request,
+                children,
+                childIndex,
+                resumeSlots,
+                error,
+                node,
+                thrownInfo,
+                !1
+              );
+            }
+            task.replay = replay;
+            replayNodes.splice(j, 1);
+            break;
+          }
+        }
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      replay = task.treeContext;
+      replayNodes = children.length;
+      if (
+        null !== task.replay &&
+        ((j = task.replay.slots), null !== j && "object" === typeof j)
+      ) {
+        for (childIndex = 0; childIndex < replayNodes; childIndex++)
+          (node = children[childIndex]),
+            (task.treeContext = pushTreeContext(
+              replay,
+              replayNodes,
+              childIndex
+            )),
+            (error = j[childIndex]),
+            "number" === typeof error
+              ? (resumeNode(request, task, error, node, childIndex),
+                delete j[childIndex])
+              : renderNode(request, task, node, childIndex);
+        task.treeContext = replay;
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      for (j = 0; j < replayNodes; j++) {
+        childIndex = children[j];
+        resumeSlots = request;
+        node = task;
+        error = childIndex;
+        if (
+          null !== error &&
+          "object" === typeof error &&
+          (error.$$typeof === REACT_ELEMENT_TYPE ||
+            error.$$typeof === REACT_PORTAL_TYPE) &&
+          error._store &&
+          ((!error._store.validated && null == error.key) ||
+            2 === error._store.validated)
+        ) {
+          if ("object" !== typeof error._store)
+            throw Error(
+              "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue."
+            );
+          error._store.validated = 1;
+          thrownInfo = resumeSlots.didWarnForKey;
+          null == thrownInfo &&
+            (thrownInfo = resumeSlots.didWarnForKey = new WeakSet());
+          resumeSlots = node.componentStack;
+          if (null !== resumeSlots && !thrownInfo.has(resumeSlots)) {
+            thrownInfo.add(resumeSlots);
+            var componentName = getComponentNameFromType(error.type);
+            thrownInfo = error._owner;
+            var parentOwner = resumeSlots.owner;
+            resumeSlots = "";
+            if (parentOwner && "undefined" !== typeof parentOwner.type) {
+              var name = getComponentNameFromType(parentOwner.type);
+              name &&
+                (resumeSlots =
+                  "\n\nCheck the render method of `" + name + "`.");
+            }
+            resumeSlots ||
+              (componentName &&
+                (resumeSlots =
+                  "\n\nCheck the top-level render call using <" +
+                  componentName +
+                  ">."));
+            componentName = "";
+            null != thrownInfo &&
+              parentOwner !== thrownInfo &&
+              ((parentOwner = null),
+              "undefined" !== typeof thrownInfo.type
+                ? (parentOwner = getComponentNameFromType(thrownInfo.type))
+                : "string" === typeof thrownInfo.name &&
+                  (parentOwner = thrownInfo.name),
+              parentOwner &&
+                (componentName =
+                  " It was passed a child from " + parentOwner + "."));
+            thrownInfo = node.componentStack;
+            node.componentStack = {
+              parent: node.componentStack,
+              type: error.type,
+              owner: error._owner,
+              stack: error._debugStack
+            };
+            console.error(
+              'Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',
+              resumeSlots,
+              componentName
+            );
+            node.componentStack = thrownInfo;
+          }
+        }
+        task.treeContext = pushTreeContext(replay, replayNodes, j);
+        renderNode(request, task, childIndex, j);
+      }
+      task.treeContext = replay;
+      task.keyPath = prevKeyPath;
+      task.componentStack = previousComponentStack;
+      task.debugTask = previousDebugTask;
+    }
+    function untrackBoundary(request, boundary) {
+      request = request.trackedPostpones;
+      null !== request &&
+        ((boundary = boundary.trackedContentKeyPath),
+        null !== boundary &&
+          ((boundary = request.workingMap.get(boundary)),
+          void 0 !== boundary &&
+            ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+    }
+    function spawnNewSuspendedReplayTask(request, task, thenableState) {
+      return createReplayTask(
+        request,
+        thenableState,
+        task.replay,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function spawnNewSuspendedRenderTask(request, task, thenableState) {
+      var segment = task.blockedSegment,
+        newSegment = createPendingSegment(
+          request,
+          segment.chunks.length,
+          null,
+          task.formatContext,
+          segment.lastPushedText,
+          !0
+        );
+      segment.children.push(newSegment);
+      segment.lastPushedText = !1;
+      return createRenderTask(
+        request,
+        thenableState,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        newSegment,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function renderNode(request, task, node, childIndex) {
+      var previousFormatContext = task.formatContext,
+        previousContext = task.context,
+        previousKeyPath = task.keyPath,
+        previousTreeContext = task.treeContext,
+        previousComponentStack = task.componentStack,
+        previousDebugTask = task.debugTask,
+        segment = task.blockedSegment;
+      if (null === segment)
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue) {
+          if (
+            (resetHooksState(),
+            (node =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedReplayTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedReplayTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      else {
+        var childrenLength = segment.children.length,
+          chunkLength = segment.chunks.length;
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue$3) {
+          if (
+            (resetHooksState(),
+            (segment.children.length = childrenLength),
+            (segment.chunks.length = chunkLength),
+            (node =
+              thrownValue$3 === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue$3),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedRenderTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedRenderTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      }
+      task.formatContext = previousFormatContext;
+      task.context = previousContext;
+      task.keyPath = previousKeyPath;
+      task.treeContext = previousTreeContext;
+      switchContext(previousContext);
+      throw node;
+    }
+    function abortTaskSoft(task) {
+      var boundary = task.blockedBoundary;
+      task = task.blockedSegment;
+      null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+    }
+    function abortRemainingReplayNodes(
+      request$jscomp$0,
+      boundary,
+      nodes,
+      slots,
+      error$jscomp$0,
+      errorDigest$jscomp$0,
+      errorInfo$jscomp$0,
+      aborted
+    ) {
+      for (var i = 0; i < nodes.length; i++) {
+        var node = nodes[i];
+        if (4 === node.length)
+          abortRemainingReplayNodes(
+            request$jscomp$0,
+            boundary,
+            node[2],
+            node[3],
+            error$jscomp$0,
+            errorDigest$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          );
+        else {
+          var request = request$jscomp$0;
+          node = node[5];
+          var error = error$jscomp$0,
+            errorDigest = errorDigest$jscomp$0,
+            errorInfo = errorInfo$jscomp$0,
+            wasAborted = aborted,
+            resumedBoundary = createSuspenseBoundary(
+              request,
+              new Set(),
+              null,
+              null
+            );
+          resumedBoundary.parentFlushed = !0;
+          resumedBoundary.rootSegmentID = node;
+          resumedBoundary.status = CLIENT_RENDERED;
+          encodeErrorForBoundary(
+            resumedBoundary,
+            errorDigest,
+            error,
+            errorInfo,
+            wasAborted
+          );
+          resumedBoundary.parentFlushed &&
+            request.clientRenderedBoundaries.push(resumedBoundary);
+        }
+      }
+      nodes.length = 0;
+      if (null !== slots) {
+        if (null === boundary)
+          throw Error(
+            "We should not have any resumable nodes in the shell. This is a bug in React."
+          );
+        boundary.status !== CLIENT_RENDERED &&
+          ((boundary.status = CLIENT_RENDERED),
+          encodeErrorForBoundary(
+            boundary,
+            errorDigest$jscomp$0,
+            error$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          ),
+          boundary.parentFlushed &&
+            request$jscomp$0.clientRenderedBoundaries.push(boundary));
+        if ("object" === typeof slots)
+          for (var index in slots) delete slots[index];
+      }
+    }
+    function abortTask(task, request, error) {
+      var boundary = task.blockedBoundary,
+        segment = task.blockedSegment;
+      if (null !== segment) {
+        if (6 === segment.status) return;
+        segment.status = 3;
+      }
+      segment = getThrownInfo(task.componentStack);
+      if (null === boundary) {
+        if (13 !== request.status && request.status !== CLOSED) {
+          boundary = task.replay;
+          if (null === boundary) {
+            logRecoverableError(request, error, segment, null);
+            fatalError(request, error, segment, null);
+            return;
+          }
+          boundary.pendingTasks--;
+          0 === boundary.pendingTasks &&
+            0 < boundary.nodes.length &&
+            ((task = logRecoverableError(request, error, segment, null)),
+            abortRemainingReplayNodes(
+              request,
+              null,
+              boundary.nodes,
+              boundary.slots,
+              error,
+              task,
+              segment,
+              !0
+            ));
+          request.pendingRootTasks--;
+          0 === request.pendingRootTasks && completeShell(request);
+        }
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            ((boundary.status = CLIENT_RENDERED),
+            (task = logRecoverableError(request, error, segment, null)),
+            (boundary.status = CLIENT_RENDERED),
+            encodeErrorForBoundary(boundary, task, error, segment, !0),
+            untrackBoundary(request, boundary),
+            boundary.parentFlushed &&
+              request.clientRenderedBoundaries.push(boundary)),
+          boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+            return abortTask(fallbackTask, request, error);
+          }),
+          boundary.fallbackAbortableTasks.clear();
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function safelyEmitEarlyPreloads(request, shellComplete) {
+      try {
+        var renderState = request.renderState,
+          onHeaders = renderState.onHeaders;
+        if (onHeaders) {
+          var headers = renderState.headers;
+          if (headers) {
+            renderState.headers = null;
+            var linkHeader = headers.preconnects;
+            headers.fontPreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.fontPreloads));
+            headers.highImagePreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.highImagePreloads));
+            if (!shellComplete) {
+              var queueIter = renderState.styles.values(),
+                queueStep = queueIter.next();
+              b: for (
+                ;
+                0 < headers.remainingCapacity && !queueStep.done;
+                queueStep = queueIter.next()
+              )
+                for (
+                  var sheetIter = queueStep.value.sheets.values(),
+                    sheetStep = sheetIter.next();
+                  0 < headers.remainingCapacity && !sheetStep.done;
+                  sheetStep = sheetIter.next()
+                ) {
+                  var sheet = sheetStep.value,
+                    props = sheet.props,
+                    key = props.href,
+                    props$jscomp$0 = sheet.props;
+                  var header = getPreloadAsHeader(
+                    props$jscomp$0.href,
+                    "style",
+                    {
+                      crossOrigin: props$jscomp$0.crossOrigin,
+                      integrity: props$jscomp$0.integrity,
+                      nonce: props$jscomp$0.nonce,
+                      type: props$jscomp$0.type,
+                      fetchPriority: props$jscomp$0.fetchPriority,
+                      referrerPolicy: props$jscomp$0.referrerPolicy,
+                      media: props$jscomp$0.media
+                    }
+                  );
+                  if (0 <= (headers.remainingCapacity -= header.length + 2))
+                    (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                      linkHeader && (linkHeader += ", "),
+                      (linkHeader += header),
+                      (renderState.resets.style[key] =
+                        "string" === typeof props.crossOrigin ||
+                        "string" === typeof props.integrity
+                          ? [props.crossOrigin, props.integrity]
+                          : PRELOAD_NO_CREDS);
+                  else break b;
+                }
+            }
+            linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+          }
+        }
+      } catch (error) {
+        logRecoverableError(request, error, {}, null);
+      }
+    }
+    function completeShell(request) {
+      null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+      null === request.trackedPostpones && preparePreamble(request);
+      request.onShellError = noop;
+      request = request.onShellReady;
+      request();
+    }
+    function completeAll(request) {
+      safelyEmitEarlyPreloads(
+        request,
+        null === request.trackedPostpones
+          ? !0
+          : null === request.completedRootSegment ||
+              request.completedRootSegment.status !== POSTPONED
+      );
+      preparePreamble(request);
+      request = request.onAllReady;
+      request();
+    }
+    function queueCompletedSegment(boundary, segment) {
+      if (
+        0 === segment.chunks.length &&
+        1 === segment.children.length &&
+        null === segment.children[0].boundary &&
+        -1 === segment.children[0].id
+      ) {
+        var childSegment = segment.children[0];
+        childSegment.id = segment.id;
+        childSegment.parentFlushed = !0;
+        childSegment.status === COMPLETED &&
+          queueCompletedSegment(boundary, childSegment);
+      } else boundary.completedSegments.push(segment);
+    }
+    function finishedTask(request, boundary, segment) {
+      if (null === boundary) {
+        if (null !== segment && segment.parentFlushed) {
+          if (null !== request.completedRootSegment)
+            throw Error(
+              "There can only be one root segment. This is a bug in React."
+            );
+          request.completedRootSegment = segment;
+        }
+        request.pendingRootTasks--;
+        0 === request.pendingRootTasks && completeShell(request);
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            (0 === boundary.pendingTasks
+              ? (boundary.status === PENDING && (boundary.status = COMPLETED),
+                null !== segment &&
+                  segment.parentFlushed &&
+                  segment.status === COMPLETED &&
+                  queueCompletedSegment(boundary, segment),
+                boundary.parentFlushed &&
+                  request.completedBoundaries.push(boundary),
+                boundary.status === COMPLETED &&
+                  (boundary.fallbackAbortableTasks.forEach(
+                    abortTaskSoft,
+                    request
+                  ),
+                  boundary.fallbackAbortableTasks.clear(),
+                  0 === request.pendingRootTasks &&
+                    null === request.trackedPostpones &&
+                    null !== boundary.contentPreamble &&
+                    preparePreamble(request)))
+              : null !== segment &&
+                segment.parentFlushed &&
+                segment.status === COMPLETED &&
+                (queueCompletedSegment(boundary, segment),
+                1 === boundary.completedSegments.length &&
+                  boundary.parentFlushed &&
+                  request.partialBoundaries.push(boundary)));
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function performWork(request$jscomp$2) {
+      if (
+        request$jscomp$2.status !== CLOSED &&
+        13 !== request$jscomp$2.status
+      ) {
+        var prevContext = currentActiveSnapshot,
+          prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = HooksDispatcher;
+        var prevAsyncDispatcher = ReactSharedInternals.A;
+        ReactSharedInternals.A = DefaultAsyncDispatcher;
+        var prevRequest = currentRequest;
+        currentRequest = request$jscomp$2;
+        var prevGetCurrentStackImpl = ReactSharedInternals.getCurrentStack;
+        ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;
+        var prevResumableState = currentResumableState;
+        currentResumableState = request$jscomp$2.resumableState;
+        try {
+          var pingedTasks = request$jscomp$2.pingedTasks,
+            i;
+          for (i = 0; i < pingedTasks.length; i++) {
+            var request = request$jscomp$2,
+              task = pingedTasks[i],
+              segment = task.blockedSegment;
+            if (null === segment) {
+              var prevTaskInDEV = void 0,
+                request$jscomp$0 = request;
+              request = task;
+              if (0 !== request.replay.pendingTasks) {
+                switchContext(request.context);
+                prevTaskInDEV = currentTaskInDEV;
+                currentTaskInDEV = request;
+                try {
+                  "number" === typeof request.replay.slots
+                    ? resumeNode(
+                        request$jscomp$0,
+                        request,
+                        request.replay.slots,
+                        request.node,
+                        request.childIndex
+                      )
+                    : retryNode(request$jscomp$0, request);
+                  if (
+                    1 === request.replay.pendingTasks &&
+                    0 < request.replay.nodes.length
+                  )
+                    throw Error(
+                      "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                    );
+                  request.replay.pendingTasks--;
+                  request.abortSet.delete(request);
+                  finishedTask(request$jscomp$0, request.blockedBoundary, null);
+                } catch (thrownValue) {
+                  resetHooksState();
+                  var x =
+                    thrownValue === SuspenseException
+                      ? getSuspendedThenable()
+                      : thrownValue;
+                  if (
+                    "object" === typeof x &&
+                    null !== x &&
+                    "function" === typeof x.then
+                  ) {
+                    var ping = request.ping;
+                    x.then(ping, ping);
+                    request.thenableState = getThenableStateAfterSuspending();
+                  } else {
+                    request.replay.pendingTasks--;
+                    request.abortSet.delete(request);
+                    var errorInfo = getThrownInfo(request.componentStack),
+                      errorDigest = void 0,
+                      request$jscomp$1 = request$jscomp$0,
+                      boundary = request.blockedBoundary,
+                      error$jscomp$0 =
+                        12 === request$jscomp$0.status
+                          ? request$jscomp$0.fatalError
+                          : x,
+                      errorInfo$jscomp$0 = errorInfo,
+                      replayNodes = request.replay.nodes,
+                      resumeSlots = request.replay.slots;
+                    errorDigest = logRecoverableError(
+                      request$jscomp$1,
+                      error$jscomp$0,
+                      errorInfo$jscomp$0,
+                      request.debugTask
+                    );
+                    abortRemainingReplayNodes(
+                      request$jscomp$1,
+                      boundary,
+                      replayNodes,
+                      resumeSlots,
+                      error$jscomp$0,
+                      errorDigest,
+                      errorInfo$jscomp$0,
+                      !1
+                    );
+                    request$jscomp$0.pendingRootTasks--;
+                    0 === request$jscomp$0.pendingRootTasks &&
+                      completeShell(request$jscomp$0);
+                    request$jscomp$0.allPendingTasks--;
+                    0 === request$jscomp$0.allPendingTasks &&
+                      completeAll(request$jscomp$0);
+                  }
+                } finally {
+                  currentTaskInDEV = prevTaskInDEV;
+                }
+              }
+            } else if (
+              ((request$jscomp$0 = prevTaskInDEV = void 0),
+              (errorDigest = task),
+              (request$jscomp$1 = segment),
+              request$jscomp$1.status === PENDING)
+            ) {
+              request$jscomp$1.status = 6;
+              switchContext(errorDigest.context);
+              request$jscomp$0 = currentTaskInDEV;
+              currentTaskInDEV = errorDigest;
+              var childrenLength = request$jscomp$1.children.length,
+                chunkLength = request$jscomp$1.chunks.length;
+              try {
+                retryNode(request, errorDigest),
+                  pushSegmentFinale(
+                    request$jscomp$1.chunks,
+                    request.renderState,
+                    request$jscomp$1.lastPushedText,
+                    request$jscomp$1.textEmbedded
+                  ),
+                  errorDigest.abortSet.delete(errorDigest),
+                  (request$jscomp$1.status = COMPLETED),
+                  finishedTask(
+                    request,
+                    errorDigest.blockedBoundary,
+                    request$jscomp$1
+                  );
+              } catch (thrownValue) {
+                resetHooksState();
+                request$jscomp$1.children.length = childrenLength;
+                request$jscomp$1.chunks.length = chunkLength;
+                var x$jscomp$0 =
+                  thrownValue === SuspenseException
+                    ? getSuspendedThenable()
+                    : 12 === request.status
+                      ? request.fatalError
+                      : thrownValue;
+                if (
+                  "object" === typeof x$jscomp$0 &&
+                  null !== x$jscomp$0 &&
+                  "function" === typeof x$jscomp$0.then
+                ) {
+                  request$jscomp$1.status = PENDING;
+                  errorDigest.thenableState = getThenableStateAfterSuspending();
+                  var ping$jscomp$0 = errorDigest.ping;
+                  x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+                } else {
+                  var errorInfo$jscomp$1 = getThrownInfo(
+                    errorDigest.componentStack
+                  );
+                  errorDigest.abortSet.delete(errorDigest);
+                  request$jscomp$1.status = 4;
+                  var boundary$jscomp$0 = errorDigest.blockedBoundary,
+                    debugTask = errorDigest.debugTask;
+                  prevTaskInDEV = logRecoverableError(
+                    request,
+                    x$jscomp$0,
+                    errorInfo$jscomp$1,
+                    debugTask
+                  );
+                  null === boundary$jscomp$0
+                    ? fatalError(
+                        request,
+                        x$jscomp$0,
+                        errorInfo$jscomp$1,
+                        debugTask
+                      )
+                    : (boundary$jscomp$0.pendingTasks--,
+                      boundary$jscomp$0.status !== CLIENT_RENDERED &&
+                        ((boundary$jscomp$0.status = CLIENT_RENDERED),
+                        encodeErrorForBoundary(
+                          boundary$jscomp$0,
+                          prevTaskInDEV,
+                          x$jscomp$0,
+                          errorInfo$jscomp$1,
+                          !1
+                        ),
+                        untrackBoundary(request, boundary$jscomp$0),
+                        boundary$jscomp$0.parentFlushed &&
+                          request.clientRenderedBoundaries.push(
+                            boundary$jscomp$0
+                          ),
+                        0 === request.pendingRootTasks &&
+                          null === request.trackedPostpones &&
+                          null !== boundary$jscomp$0.contentPreamble &&
+                          preparePreamble(request)));
+                  request.allPendingTasks--;
+                  0 === request.allPendingTasks && completeAll(request);
+                }
+              } finally {
+                currentTaskInDEV = request$jscomp$0;
+              }
+            }
+          }
+          pingedTasks.splice(0, i);
+          null !== request$jscomp$2.destination &&
+            flushCompletedQueues(
+              request$jscomp$2,
+              request$jscomp$2.destination
+            );
+        } catch (error) {
+          (pingedTasks = {}),
+            logRecoverableError(request$jscomp$2, error, pingedTasks, null),
+            fatalError(request$jscomp$2, error, pingedTasks, null);
+        } finally {
+          (currentResumableState = prevResumableState),
+            (ReactSharedInternals.H = prevDispatcher),
+            (ReactSharedInternals.A = prevAsyncDispatcher),
+            (ReactSharedInternals.getCurrentStack = prevGetCurrentStackImpl),
+            prevDispatcher === HooksDispatcher && switchContext(prevContext),
+            (currentRequest = prevRequest);
+        }
+      }
+    }
+    function preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      segment.preambleChildren.length &&
+        collectedPreambleSegments.push(segment.preambleChildren);
+      for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+        pendingPreambles =
+          preparePreambleFromSegment(
+            request,
+            segment.children[i],
+            collectedPreambleSegments
+          ) || pendingPreambles;
+      return pendingPreambles;
+    }
+    function preparePreambleFromSegment(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return preparePreambleFromSubtree(
+          request,
+          segment,
+          collectedPreambleSegments
+        );
+      var preamble = boundary.contentPreamble,
+        fallbackPreamble = boundary.fallbackPreamble;
+      if (null === preamble || null === fallbackPreamble) return !1;
+      switch (boundary.status) {
+        case COMPLETED:
+          hoistPreambleState(request.renderState, preamble);
+          segment = boundary.completedSegments[0];
+          if (!segment)
+            throw Error(
+              "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+            );
+          return preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          );
+        case POSTPONED:
+          if (null !== request.trackedPostpones) return !0;
+        case CLIENT_RENDERED:
+          if (segment.status === COMPLETED)
+            return (
+              hoistPreambleState(request.renderState, fallbackPreamble),
+              preparePreambleFromSubtree(
+                request,
+                segment,
+                collectedPreambleSegments
+              )
+            );
+        default:
+          return !0;
+      }
+    }
+    function preparePreamble(request) {
+      if (
+        request.completedRootSegment &&
+        null === request.completedPreambleSegments
+      ) {
+        var collectedPreambleSegments = [],
+          hasPendingPreambles = preparePreambleFromSegment(
+            request,
+            request.completedRootSegment,
+            collectedPreambleSegments
+          ),
+          preamble = request.renderState.preamble;
+        if (
+          !1 === hasPendingPreambles ||
+          (preamble.headChunks && preamble.bodyChunks)
+        )
+          request.completedPreambleSegments = collectedPreambleSegments;
+      }
+    }
+    function flushSubtree(request, destination, segment, hoistableState) {
+      segment.parentFlushed = !0;
+      switch (segment.status) {
+        case PENDING:
+          segment.id = request.nextSegmentId++;
+        case POSTPONED:
+          return (
+            (hoistableState = segment.id),
+            (segment.lastPushedText = !1),
+            (segment.textEmbedded = !1),
+            (request = request.renderState),
+            destination.push(placeholder1),
+            destination.push(request.placeholderPrefix),
+            (request = hoistableState.toString(16)),
+            destination.push(request),
+            destination.push(placeholder2)
+          );
+        case COMPLETED:
+          segment.status = FLUSHED;
+          var r = !0,
+            chunks = segment.chunks,
+            chunkIdx = 0;
+          segment = segment.children;
+          for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+            for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+              destination.push(chunks[chunkIdx]);
+            r = flushSegment(request, destination, r, hoistableState);
+          }
+          for (; chunkIdx < chunks.length - 1; chunkIdx++)
+            destination.push(chunks[chunkIdx]);
+          chunkIdx < chunks.length && (r = destination.push(chunks[chunkIdx]));
+          return r;
+        default:
+          throw Error(
+            "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+          );
+      }
+    }
+    function flushSegment(request, destination, segment, hoistableState) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return flushSubtree(request, destination, segment, hoistableState);
+      boundary.parentFlushed = !0;
+      if (boundary.status === CLIENT_RENDERED) {
+        if (!request.renderState.generateStaticMarkup) {
+          var errorDigest = boundary.errorDigest,
+            errorMessage = boundary.errorMessage,
+            errorStack = boundary.errorStack,
+            errorComponentStack = boundary.errorComponentStack;
+          destination.push(startClientRenderedSuspenseBoundary);
+          destination.push(clientRenderedSuspenseBoundaryError1);
+          errorDigest &&
+            (destination.push(clientRenderedSuspenseBoundaryError1A),
+            (errorDigest = escapeTextForBrowser(errorDigest)),
+            destination.push(errorDigest),
+            destination.push(
+              clientRenderedSuspenseBoundaryErrorAttrInterstitial
+            ));
+          errorMessage &&
+            (destination.push(clientRenderedSuspenseBoundaryError1B),
+            (errorMessage = escapeTextForBrowser(errorMessage)),
+            destination.push(errorMessage),
+            destination.push(
+              clientRenderedSuspenseBoundaryErrorAttrInterstitial
+            ));
+          errorStack &&
+            (destination.push(clientRenderedSuspenseBoundaryError1C),
+            (errorStack = escapeTextForBrowser(errorStack)),
+            destination.push(errorStack),
+            destination.push(
+              clientRenderedSuspenseBoundaryErrorAttrInterstitial
+            ));
+          errorComponentStack &&
+            (destination.push(clientRenderedSuspenseBoundaryError1D),
+            (errorComponentStack = escapeTextForBrowser(errorComponentStack)),
+            destination.push(errorComponentStack),
+            destination.push(
+              clientRenderedSuspenseBoundaryErrorAttrInterstitial
+            ));
+          destination.push(clientRenderedSuspenseBoundaryError2);
+        }
+        flushSubtree(request, destination, segment, hoistableState);
+        request.renderState.generateStaticMarkup
+          ? (destination = !0)
+          : ((request = boundary.fallbackPreamble) &&
+              writePreambleContribution(destination, request),
+            (destination = destination.push(endSuspenseBoundary)));
+        return destination;
+      }
+      if (boundary.status !== COMPLETED)
+        return (
+          boundary.status === PENDING &&
+            (boundary.rootSegmentID = request.nextSegmentId++),
+          0 < boundary.completedSegments.length &&
+            request.partialBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          hoistableState &&
+            ((boundary = boundary.fallbackState),
+            boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+            boundary.stylesheets.forEach(
+              hoistStylesheetDependency,
+              hoistableState
+            )),
+          flushSubtree(request, destination, segment, hoistableState),
+          destination.push(endSuspenseBoundary)
+        );
+      if (boundary.byteSize > request.progressiveChunkSize)
+        return (
+          (boundary.rootSegmentID = request.nextSegmentId++),
+          request.completedBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          flushSubtree(request, destination, segment, hoistableState),
+          destination.push(endSuspenseBoundary)
+        );
+      hoistableState &&
+        ((segment = boundary.contentState),
+        segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+      request.renderState.generateStaticMarkup ||
+        destination.push(startCompletedSuspenseBoundary);
+      segment = boundary.completedSegments;
+      if (1 !== segment.length)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      flushSegment(request, destination, segment[0], hoistableState);
+      request.renderState.generateStaticMarkup
+        ? (destination = !0)
+        : ((request = boundary.contentPreamble) &&
+            writePreambleContribution(destination, request),
+          (destination = destination.push(endSuspenseBoundary)));
+      return destination;
+    }
+    function flushSegmentContainer(
+      request,
+      destination,
+      segment,
+      hoistableState
+    ) {
+      writeStartSegment(
+        destination,
+        request.renderState,
+        segment.parentFormatContext,
+        segment.id
+      );
+      flushSegment(request, destination, segment, hoistableState);
+      return writeEndSegment(destination, segment.parentFormatContext);
+    }
+    function flushCompletedBoundary(request, destination, boundary) {
+      for (
+        var completedSegments = boundary.completedSegments, i = 0;
+        i < completedSegments.length;
+        i++
+      )
+        flushPartiallyCompletedSegment(
+          request,
+          destination,
+          boundary,
+          completedSegments[i]
+        );
+      completedSegments.length = 0;
+      writeHoistablesForBoundary(
+        destination,
+        boundary.contentState,
+        request.renderState
+      );
+      completedSegments = request.resumableState;
+      request = request.renderState;
+      i = boundary.rootSegmentID;
+      boundary = boundary.contentState;
+      var requiresStyleInsertion = request.stylesToHoist;
+      request.stylesToHoist = !1;
+      destination.push(request.startInlineScript);
+      requiresStyleInsertion
+        ? (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+          NothingSent
+          ? ((completedSegments.instructions =
+              completedSegments.instructions |
+              SentStyleInsertionFunction |
+              SentCompleteBoundaryFunction),
+            destination.push(completeBoundaryWithStylesScript1FullBoth))
+          : (completedSegments.instructions & SentStyleInsertionFunction) ===
+              NothingSent
+            ? ((completedSegments.instructions |= SentStyleInsertionFunction),
+              destination.push(completeBoundaryWithStylesScript1FullPartial))
+            : destination.push(completeBoundaryWithStylesScript1Partial)
+        : (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+            NothingSent
+          ? ((completedSegments.instructions |= SentCompleteBoundaryFunction),
+            destination.push(completeBoundaryScript1Full))
+          : destination.push(completeBoundaryScript1Partial);
+      completedSegments = i.toString(16);
+      destination.push(request.boundaryPrefix);
+      destination.push(completedSegments);
+      destination.push(completeBoundaryScript2);
+      destination.push(request.segmentPrefix);
+      destination.push(completedSegments);
+      requiresStyleInsertion
+        ? (destination.push(completeBoundaryScript3a),
+          writeStyleResourceDependenciesInJS(destination, boundary))
+        : destination.push(completeBoundaryScript3b);
+      boundary = destination.push(completeBoundaryScriptEnd);
+      return writeBootstrap(destination, request) && boundary;
+    }
+    function flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      segment
+    ) {
+      if (segment.status === FLUSHED) return !0;
+      var hoistableState = boundary.contentState,
+        segmentID = segment.id;
+      if (-1 === segmentID) {
+        if (-1 === (segment.id = boundary.rootSegmentID))
+          throw Error(
+            "A root segment ID must have been assigned by now. This is a bug in React."
+          );
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      }
+      if (segmentID === boundary.rootSegmentID)
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      flushSegmentContainer(request, destination, segment, hoistableState);
+      boundary = request.resumableState;
+      request = request.renderState;
+      destination.push(request.startInlineScript);
+      (boundary.instructions & SentCompleteSegmentFunction) === NothingSent
+        ? ((boundary.instructions |= SentCompleteSegmentFunction),
+          destination.push(completeSegmentScript1Full))
+        : destination.push(completeSegmentScript1Partial);
+      destination.push(request.segmentPrefix);
+      segmentID = segmentID.toString(16);
+      destination.push(segmentID);
+      destination.push(completeSegmentScript2);
+      destination.push(request.placeholderPrefix);
+      destination.push(segmentID);
+      destination = destination.push(completeSegmentScriptEnd);
+      return destination;
+    }
+    function flushCompletedQueues(request, destination) {
+      try {
+        if (!(0 < request.pendingRootTasks)) {
+          var i,
+            completedRootSegment = request.completedRootSegment;
+          if (null !== completedRootSegment) {
+            if (completedRootSegment.status === POSTPONED) return;
+            var completedPreambleSegments = request.completedPreambleSegments;
+            if (null === completedPreambleSegments) return;
+            var renderState = request.renderState,
+              preamble = renderState.preamble,
+              htmlChunks = preamble.htmlChunks,
+              headChunks = preamble.headChunks,
+              i$jscomp$0;
+            if (htmlChunks) {
+              for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+                destination.push(htmlChunks[i$jscomp$0]);
+              if (headChunks)
+                for (
+                  i$jscomp$0 = 0;
+                  i$jscomp$0 < headChunks.length;
+                  i$jscomp$0++
+                )
+                  destination.push(headChunks[i$jscomp$0]);
+              else {
+                var chunk = startChunkForTag("head");
+                destination.push(chunk);
+                destination.push(endOfStartTag);
+              }
+            } else if (headChunks)
+              for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+                destination.push(headChunks[i$jscomp$0]);
+            var charsetChunks = renderState.charsetChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < charsetChunks.length;
+              i$jscomp$0++
+            )
+              destination.push(charsetChunks[i$jscomp$0]);
+            charsetChunks.length = 0;
+            renderState.preconnects.forEach(flushResource, destination);
+            renderState.preconnects.clear();
+            var viewportChunks = renderState.viewportChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < viewportChunks.length;
+              i$jscomp$0++
+            )
+              destination.push(viewportChunks[i$jscomp$0]);
+            viewportChunks.length = 0;
+            renderState.fontPreloads.forEach(flushResource, destination);
+            renderState.fontPreloads.clear();
+            renderState.highImagePreloads.forEach(flushResource, destination);
+            renderState.highImagePreloads.clear();
+            renderState.styles.forEach(flushStylesInPreamble, destination);
+            var importMapChunks = renderState.importMapChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < importMapChunks.length;
+              i$jscomp$0++
+            )
+              destination.push(importMapChunks[i$jscomp$0]);
+            importMapChunks.length = 0;
+            renderState.bootstrapScripts.forEach(flushResource, destination);
+            renderState.scripts.forEach(flushResource, destination);
+            renderState.scripts.clear();
+            renderState.bulkPreloads.forEach(flushResource, destination);
+            renderState.bulkPreloads.clear();
+            var hoistableChunks = renderState.hoistableChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < hoistableChunks.length;
+              i$jscomp$0++
+            )
+              destination.push(hoistableChunks[i$jscomp$0]);
+            for (
+              renderState = hoistableChunks.length = 0;
+              renderState < completedPreambleSegments.length;
+              renderState++
+            ) {
+              var segments = completedPreambleSegments[renderState];
+              for (preamble = 0; preamble < segments.length; preamble++)
+                flushSegment(request, destination, segments[preamble], null);
+            }
+            var preamble$jscomp$0 = request.renderState.preamble,
+              headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+            if (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) {
+              var chunk$jscomp$0 = endChunkForTag("head");
+              destination.push(chunk$jscomp$0);
+            }
+            var bodyChunks = preamble$jscomp$0.bodyChunks;
+            if (bodyChunks)
+              for (
+                completedPreambleSegments = 0;
+                completedPreambleSegments < bodyChunks.length;
+                completedPreambleSegments++
+              )
+                destination.push(bodyChunks[completedPreambleSegments]);
+            flushSegment(request, destination, completedRootSegment, null);
+            request.completedRootSegment = null;
+            writeBootstrap(destination, request.renderState);
+          }
+          var renderState$jscomp$0 = request.renderState;
+          completedRootSegment = 0;
+          var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < viewportChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            destination.push(viewportChunks$jscomp$0[completedRootSegment]);
+          viewportChunks$jscomp$0.length = 0;
+          renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+          renderState$jscomp$0.preconnects.clear();
+          renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.fontPreloads.clear();
+          renderState$jscomp$0.highImagePreloads.forEach(
+            flushResource,
+            destination
+          );
+          renderState$jscomp$0.highImagePreloads.clear();
+          renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+          renderState$jscomp$0.scripts.forEach(flushResource, destination);
+          renderState$jscomp$0.scripts.clear();
+          renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.bulkPreloads.clear();
+          var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < hoistableChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            destination.push(hoistableChunks$jscomp$0[completedRootSegment]);
+          hoistableChunks$jscomp$0.length = 0;
+          var clientRenderedBoundaries = request.clientRenderedBoundaries;
+          for (i = 0; i < clientRenderedBoundaries.length; i++) {
+            var boundary = clientRenderedBoundaries[i];
+            renderState$jscomp$0 = destination;
+            var resumableState = request.resumableState,
+              renderState$jscomp$1 = request.renderState,
+              id = boundary.rootSegmentID,
+              errorDigest = boundary.errorDigest,
+              errorMessage = boundary.errorMessage,
+              errorStack = boundary.errorStack,
+              errorComponentStack = boundary.errorComponentStack;
+            renderState$jscomp$0.push(renderState$jscomp$1.startInlineScript);
+            (resumableState.instructions & SentClientRenderFunction) ===
+            NothingSent
+              ? ((resumableState.instructions |= SentClientRenderFunction),
+                renderState$jscomp$0.push(clientRenderScript1Full))
+              : renderState$jscomp$0.push(clientRenderScript1Partial);
+            renderState$jscomp$0.push(renderState$jscomp$1.boundaryPrefix);
+            var chunk$jscomp$1 = id.toString(16);
+            renderState$jscomp$0.push(chunk$jscomp$1);
+            renderState$jscomp$0.push(clientRenderScript1A);
+            if (
+              errorDigest ||
+              errorMessage ||
+              errorStack ||
+              errorComponentStack
+            ) {
+              renderState$jscomp$0.push(clientRenderErrorScriptArgInterstitial);
+              var chunk$jscomp$2 = escapeJSStringsForInstructionScripts(
+                errorDigest || ""
+              );
+              renderState$jscomp$0.push(chunk$jscomp$2);
+            }
+            if (errorMessage || errorStack || errorComponentStack) {
+              renderState$jscomp$0.push(clientRenderErrorScriptArgInterstitial);
+              var chunk$jscomp$3 = escapeJSStringsForInstructionScripts(
+                errorMessage || ""
+              );
+              renderState$jscomp$0.push(chunk$jscomp$3);
+            }
+            if (errorStack || errorComponentStack) {
+              renderState$jscomp$0.push(clientRenderErrorScriptArgInterstitial);
+              var chunk$jscomp$4 = escapeJSStringsForInstructionScripts(
+                errorStack || ""
+              );
+              renderState$jscomp$0.push(chunk$jscomp$4);
+            }
+            if (errorComponentStack) {
+              renderState$jscomp$0.push(clientRenderErrorScriptArgInterstitial);
+              var chunk$jscomp$5 =
+                escapeJSStringsForInstructionScripts(errorComponentStack);
+              renderState$jscomp$0.push(chunk$jscomp$5);
+            }
+            var JSCompiler_inline_result = renderState$jscomp$0.push(
+              clientRenderScriptEnd
+            );
+            if (!JSCompiler_inline_result) {
+              request.destination = null;
+              i++;
+              clientRenderedBoundaries.splice(0, i);
+              return;
+            }
+          }
+          clientRenderedBoundaries.splice(0, i);
+          var completedBoundaries = request.completedBoundaries;
+          for (i = 0; i < completedBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(
+                request,
+                destination,
+                completedBoundaries[i]
+              )
+            ) {
+              request.destination = null;
+              i++;
+              completedBoundaries.splice(0, i);
+              return;
+            }
+          completedBoundaries.splice(0, i);
+          var partialBoundaries = request.partialBoundaries;
+          for (i = 0; i < partialBoundaries.length; i++) {
+            a: {
+              clientRenderedBoundaries = request;
+              boundary = destination;
+              var boundary$jscomp$0 = partialBoundaries[i],
+                completedSegments = boundary$jscomp$0.completedSegments;
+              for (
+                JSCompiler_inline_result = 0;
+                JSCompiler_inline_result < completedSegments.length;
+                JSCompiler_inline_result++
+              )
+                if (
+                  !flushPartiallyCompletedSegment(
+                    clientRenderedBoundaries,
+                    boundary,
+                    boundary$jscomp$0,
+                    completedSegments[JSCompiler_inline_result]
+                  )
+                ) {
+                  JSCompiler_inline_result++;
+                  completedSegments.splice(0, JSCompiler_inline_result);
+                  var JSCompiler_inline_result$jscomp$0 = !1;
+                  break a;
+                }
+              completedSegments.splice(0, JSCompiler_inline_result);
+              JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+                boundary,
+                boundary$jscomp$0.contentState,
+                clientRenderedBoundaries.renderState
+              );
+            }
+            if (!JSCompiler_inline_result$jscomp$0) {
+              request.destination = null;
+              i++;
+              partialBoundaries.splice(0, i);
+              return;
+            }
+          }
+          partialBoundaries.splice(0, i);
+          var largeBoundaries = request.completedBoundaries;
+          for (i = 0; i < largeBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(request, destination, largeBoundaries[i])
+            ) {
+              request.destination = null;
+              i++;
+              largeBoundaries.splice(0, i);
+              return;
+            }
+          largeBoundaries.splice(0, i);
+        }
+      } finally {
+        0 === request.allPendingTasks &&
+          0 === request.pingedTasks.length &&
+          0 === request.clientRenderedBoundaries.length &&
+          0 === request.completedBoundaries.length &&
+          ((request.flushScheduled = !1),
+          (i = request.resumableState),
+          i.hasBody &&
+            ((partialBoundaries = endChunkForTag("body")),
+            destination.push(partialBoundaries)),
+          i.hasHtml && ((i = endChunkForTag("html")), destination.push(i)),
+          0 !== request.abortableTasks.size &&
+            console.error(
+              "There was still abortable task at the root when we closed. This is a bug in React."
+            ),
+          (request.status = CLOSED),
+          destination.push(null),
+          (request.destination = null));
+      }
+    }
+    function startWork(request) {
+      request.flushScheduled = null !== request.destination;
+      performWork(request);
+      10 === request.status && (request.status = 11);
+      null === request.trackedPostpones &&
+        safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+    }
+    function enqueueFlush(request) {
+      if (
+        !1 === request.flushScheduled &&
+        0 === request.pingedTasks.length &&
+        null !== request.destination
+      ) {
+        request.flushScheduled = !0;
+        var destination = request.destination;
+        destination
+          ? flushCompletedQueues(request, destination)
+          : (request.flushScheduled = !1);
+      }
+    }
+    function startFlowing(request, destination) {
+      if (13 === request.status)
+        (request.status = CLOSED), destination.destroy(request.fatalError);
+      else if (request.status !== CLOSED && null === request.destination) {
+        request.destination = destination;
+        try {
+          flushCompletedQueues(request, destination);
+        } catch (error) {
+          (destination = {}),
+            logRecoverableError(request, error, destination, null),
+            fatalError(request, error, destination, null);
+        }
+      }
+    }
+    function abort(request, reason) {
+      if (11 === request.status || 10 === request.status) request.status = 12;
+      try {
+        var abortableTasks = request.abortableTasks;
+        if (0 < abortableTasks.size) {
+          var error =
+            void 0 === reason
+              ? Error("The render was aborted by the server without a reason.")
+              : "object" === typeof reason &&
+                  null !== reason &&
+                  "function" === typeof reason.then
+                ? Error("The render was aborted by the server with a promise.")
+                : reason;
+          request.fatalError = error;
+          abortableTasks.forEach(function (task) {
+            return abortTask(task, request, error);
+          });
+          abortableTasks.clear();
+        }
+        null !== request.destination &&
+          flushCompletedQueues(request, request.destination);
+      } catch (error$4) {
+        (reason = {}),
+          logRecoverableError(request, error$4, reason, null),
+          fatalError(request, error$4, reason, null);
+      }
+    }
+    function onError() {}
+    function renderToStringImpl(
+      children,
+      options,
+      generateStaticMarkup,
+      abortReason
+    ) {
+      var didFatal = !1,
+        fatalError = null,
+        result = "",
+        readyToStream = !1;
+      options = createResumableState(
+        options ? options.identifierPrefix : void 0
+      );
+      children = createRequest(
+        children,
+        options,
+        createRenderState(options, generateStaticMarkup),
+        createFormatContext(ROOT_HTML_MODE, null, 0),
+        Infinity,
+        onError,
+        void 0,
+        function () {
+          readyToStream = !0;
+        },
+        void 0,
+        void 0,
+        void 0
+      );
+      startWork(children);
+      abort(children, abortReason);
+      startFlowing(children, {
+        push: function (chunk) {
+          null !== chunk && (result += chunk);
+          return !0;
+        },
+        destroy: function (error) {
+          didFatal = !0;
+          fatalError = error;
+        }
+      });
+      if (didFatal && fatalError !== abortReason) throw fatalError;
+      if (!readyToStream)
+        throw Error(
+          "A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition."
+        );
+      return result;
+    }
+    var React = require("react"),
+      ReactDOM = require("react-dom"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+      REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+      REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+      REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+      REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+      MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+      isArrayImpl = Array.isArray,
+      jsxPropsParents = new WeakMap(),
+      jsxChildrenParents = new WeakMap(),
+      CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"),
+      assign = Object.assign,
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+        "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      illegalAttributeNameCache = {},
+      validatedAttributeNameCache = {},
+      unitlessNumbers = new Set(
+        "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+          " "
+        )
+      ),
+      aliases = new Map([
+        ["acceptCharset", "accept-charset"],
+        ["htmlFor", "for"],
+        ["httpEquiv", "http-equiv"],
+        ["crossOrigin", "crossorigin"],
+        ["accentHeight", "accent-height"],
+        ["alignmentBaseline", "alignment-baseline"],
+        ["arabicForm", "arabic-form"],
+        ["baselineShift", "baseline-shift"],
+        ["capHeight", "cap-height"],
+        ["clipPath", "clip-path"],
+        ["clipRule", "clip-rule"],
+        ["colorInterpolation", "color-interpolation"],
+        ["colorInterpolationFilters", "color-interpolation-filters"],
+        ["colorProfile", "color-profile"],
+        ["colorRendering", "color-rendering"],
+        ["dominantBaseline", "dominant-baseline"],
+        ["enableBackground", "enable-background"],
+        ["fillOpacity", "fill-opacity"],
+        ["fillRule", "fill-rule"],
+        ["floodColor", "flood-color"],
+        ["floodOpacity", "flood-opacity"],
+        ["fontFamily", "font-family"],
+        ["fontSize", "font-size"],
+        ["fontSizeAdjust", "font-size-adjust"],
+        ["fontStretch", "font-stretch"],
+        ["fontStyle", "font-style"],
+        ["fontVariant", "font-variant"],
+        ["fontWeight", "font-weight"],
+        ["glyphName", "glyph-name"],
+        ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+        ["glyphOrientationVertical", "glyph-orientation-vertical"],
+        ["horizAdvX", "horiz-adv-x"],
+        ["horizOriginX", "horiz-origin-x"],
+        ["imageRendering", "image-rendering"],
+        ["letterSpacing", "letter-spacing"],
+        ["lightingColor", "lighting-color"],
+        ["markerEnd", "marker-end"],
+        ["markerMid", "marker-mid"],
+        ["markerStart", "marker-start"],
+        ["overlinePosition", "overline-position"],
+        ["overlineThickness", "overline-thickness"],
+        ["paintOrder", "paint-order"],
+        ["panose-1", "panose-1"],
+        ["pointerEvents", "pointer-events"],
+        ["renderingIntent", "rendering-intent"],
+        ["shapeRendering", "shape-rendering"],
+        ["stopColor", "stop-color"],
+        ["stopOpacity", "stop-opacity"],
+        ["strikethroughPosition", "strikethrough-position"],
+        ["strikethroughThickness", "strikethrough-thickness"],
+        ["strokeDasharray", "stroke-dasharray"],
+        ["strokeDashoffset", "stroke-dashoffset"],
+        ["strokeLinecap", "stroke-linecap"],
+        ["strokeLinejoin", "stroke-linejoin"],
+        ["strokeMiterlimit", "stroke-miterlimit"],
+        ["strokeOpacity", "stroke-opacity"],
+        ["strokeWidth", "stroke-width"],
+        ["textAnchor", "text-anchor"],
+        ["textDecoration", "text-decoration"],
+        ["textRendering", "text-rendering"],
+        ["transformOrigin", "transform-origin"],
+        ["underlinePosition", "underline-position"],
+        ["underlineThickness", "underline-thickness"],
+        ["unicodeBidi", "unicode-bidi"],
+        ["unicodeRange", "unicode-range"],
+        ["unitsPerEm", "units-per-em"],
+        ["vAlphabetic", "v-alphabetic"],
+        ["vHanging", "v-hanging"],
+        ["vIdeographic", "v-ideographic"],
+        ["vMathematical", "v-mathematical"],
+        ["vectorEffect", "vector-effect"],
+        ["vertAdvY", "vert-adv-y"],
+        ["vertOriginX", "vert-origin-x"],
+        ["vertOriginY", "vert-origin-y"],
+        ["wordSpacing", "word-spacing"],
+        ["writingMode", "writing-mode"],
+        ["xmlnsXlink", "xmlns:xlink"],
+        ["xHeight", "x-height"]
+      ]),
+      hasReadOnlyValue = {
+        button: !0,
+        checkbox: !0,
+        image: !0,
+        hidden: !0,
+        radio: !0,
+        reset: !0,
+        submit: !0
+      },
+      ariaProperties = {
+        "aria-current": 0,
+        "aria-description": 0,
+        "aria-details": 0,
+        "aria-disabled": 0,
+        "aria-hidden": 0,
+        "aria-invalid": 0,
+        "aria-keyshortcuts": 0,
+        "aria-label": 0,
+        "aria-roledescription": 0,
+        "aria-autocomplete": 0,
+        "aria-checked": 0,
+        "aria-expanded": 0,
+        "aria-haspopup": 0,
+        "aria-level": 0,
+        "aria-modal": 0,
+        "aria-multiline": 0,
+        "aria-multiselectable": 0,
+        "aria-orientation": 0,
+        "aria-placeholder": 0,
+        "aria-pressed": 0,
+        "aria-readonly": 0,
+        "aria-required": 0,
+        "aria-selected": 0,
+        "aria-sort": 0,
+        "aria-valuemax": 0,
+        "aria-valuemin": 0,
+        "aria-valuenow": 0,
+        "aria-valuetext": 0,
+        "aria-atomic": 0,
+        "aria-busy": 0,
+        "aria-live": 0,
+        "aria-relevant": 0,
+        "aria-dropeffect": 0,
+        "aria-grabbed": 0,
+        "aria-activedescendant": 0,
+        "aria-colcount": 0,
+        "aria-colindex": 0,
+        "aria-colspan": 0,
+        "aria-controls": 0,
+        "aria-describedby": 0,
+        "aria-errormessage": 0,
+        "aria-flowto": 0,
+        "aria-labelledby": 0,
+        "aria-owns": 0,
+        "aria-posinset": 0,
+        "aria-rowcount": 0,
+        "aria-rowindex": 0,
+        "aria-rowspan": 0,
+        "aria-setsize": 0
+      },
+      warnedProperties$1 = {},
+      rARIA$1 = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel$1 = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      didWarnValueNull = !1,
+      possibleStandardNames = {
+        accept: "accept",
+        acceptcharset: "acceptCharset",
+        "accept-charset": "acceptCharset",
+        accesskey: "accessKey",
+        action: "action",
+        allowfullscreen: "allowFullScreen",
+        alt: "alt",
+        as: "as",
+        async: "async",
+        autocapitalize: "autoCapitalize",
+        autocomplete: "autoComplete",
+        autocorrect: "autoCorrect",
+        autofocus: "autoFocus",
+        autoplay: "autoPlay",
+        autosave: "autoSave",
+        capture: "capture",
+        cellpadding: "cellPadding",
+        cellspacing: "cellSpacing",
+        challenge: "challenge",
+        charset: "charSet",
+        checked: "checked",
+        children: "children",
+        cite: "cite",
+        class: "className",
+        classid: "classID",
+        classname: "className",
+        cols: "cols",
+        colspan: "colSpan",
+        content: "content",
+        contenteditable: "contentEditable",
+        contextmenu: "contextMenu",
+        controls: "controls",
+        controlslist: "controlsList",
+        coords: "coords",
+        crossorigin: "crossOrigin",
+        dangerouslysetinnerhtml: "dangerouslySetInnerHTML",
+        data: "data",
+        datetime: "dateTime",
+        default: "default",
+        defaultchecked: "defaultChecked",
+        defaultvalue: "defaultValue",
+        defer: "defer",
+        dir: "dir",
+        disabled: "disabled",
+        disablepictureinpicture: "disablePictureInPicture",
+        disableremoteplayback: "disableRemotePlayback",
+        download: "download",
+        draggable: "draggable",
+        enctype: "encType",
+        enterkeyhint: "enterKeyHint",
+        fetchpriority: "fetchPriority",
+        for: "htmlFor",
+        form: "form",
+        formmethod: "formMethod",
+        formaction: "formAction",
+        formenctype: "formEncType",
+        formnovalidate: "formNoValidate",
+        formtarget: "formTarget",
+        frameborder: "frameBorder",
+        headers: "headers",
+        height: "height",
+        hidden: "hidden",
+        high: "high",
+        href: "href",
+        hreflang: "hrefLang",
+        htmlfor: "htmlFor",
+        httpequiv: "httpEquiv",
+        "http-equiv": "httpEquiv",
+        icon: "icon",
+        id: "id",
+        imagesizes: "imageSizes",
+        imagesrcset: "imageSrcSet",
+        inert: "inert",
+        innerhtml: "innerHTML",
+        inputmode: "inputMode",
+        integrity: "integrity",
+        is: "is",
+        itemid: "itemID",
+        itemprop: "itemProp",
+        itemref: "itemRef",
+        itemscope: "itemScope",
+        itemtype: "itemType",
+        keyparams: "keyParams",
+        keytype: "keyType",
+        kind: "kind",
+        label: "label",
+        lang: "lang",
+        list: "list",
+        loop: "loop",
+        low: "low",
+        manifest: "manifest",
+        marginwidth: "marginWidth",
+        marginheight: "marginHeight",
+        max: "max",
+        maxlength: "maxLength",
+        media: "media",
+        mediagroup: "mediaGroup",
+        method: "method",
+        min: "min",
+        minlength: "minLength",
+        multiple: "multiple",
+        muted: "muted",
+        name: "name",
+        nomodule: "noModule",
+        nonce: "nonce",
+        novalidate: "noValidate",
+        open: "open",
+        optimum: "optimum",
+        pattern: "pattern",
+        placeholder: "placeholder",
+        playsinline: "playsInline",
+        poster: "poster",
+        preload: "preload",
+        profile: "profile",
+        radiogroup: "radioGroup",
+        readonly: "readOnly",
+        referrerpolicy: "referrerPolicy",
+        rel: "rel",
+        required: "required",
+        reversed: "reversed",
+        role: "role",
+        rows: "rows",
+        rowspan: "rowSpan",
+        sandbox: "sandbox",
+        scope: "scope",
+        scoped: "scoped",
+        scrolling: "scrolling",
+        seamless: "seamless",
+        selected: "selected",
+        shape: "shape",
+        size: "size",
+        sizes: "sizes",
+        span: "span",
+        spellcheck: "spellCheck",
+        src: "src",
+        srcdoc: "srcDoc",
+        srclang: "srcLang",
+        srcset: "srcSet",
+        start: "start",
+        step: "step",
+        style: "style",
+        summary: "summary",
+        tabindex: "tabIndex",
+        target: "target",
+        title: "title",
+        type: "type",
+        usemap: "useMap",
+        value: "value",
+        width: "width",
+        wmode: "wmode",
+        wrap: "wrap",
+        about: "about",
+        accentheight: "accentHeight",
+        "accent-height": "accentHeight",
+        accumulate: "accumulate",
+        additive: "additive",
+        alignmentbaseline: "alignmentBaseline",
+        "alignment-baseline": "alignmentBaseline",
+        allowreorder: "allowReorder",
+        alphabetic: "alphabetic",
+        amplitude: "amplitude",
+        arabicform: "arabicForm",
+        "arabic-form": "arabicForm",
+        ascent: "ascent",
+        attributename: "attributeName",
+        attributetype: "attributeType",
+        autoreverse: "autoReverse",
+        azimuth: "azimuth",
+        basefrequency: "baseFrequency",
+        baselineshift: "baselineShift",
+        "baseline-shift": "baselineShift",
+        baseprofile: "baseProfile",
+        bbox: "bbox",
+        begin: "begin",
+        bias: "bias",
+        by: "by",
+        calcmode: "calcMode",
+        capheight: "capHeight",
+        "cap-height": "capHeight",
+        clip: "clip",
+        clippath: "clipPath",
+        "clip-path": "clipPath",
+        clippathunits: "clipPathUnits",
+        cliprule: "clipRule",
+        "clip-rule": "clipRule",
+        color: "color",
+        colorinterpolation: "colorInterpolation",
+        "color-interpolation": "colorInterpolation",
+        colorinterpolationfilters: "colorInterpolationFilters",
+        "color-interpolation-filters": "colorInterpolationFilters",
+        colorprofile: "colorProfile",
+        "color-profile": "colorProfile",
+        colorrendering: "colorRendering",
+        "color-rendering": "colorRendering",
+        contentscripttype: "contentScriptType",
+        contentstyletype: "contentStyleType",
+        cursor: "cursor",
+        cx: "cx",
+        cy: "cy",
+        d: "d",
+        datatype: "datatype",
+        decelerate: "decelerate",
+        descent: "descent",
+        diffuseconstant: "diffuseConstant",
+        direction: "direction",
+        display: "display",
+        divisor: "divisor",
+        dominantbaseline: "dominantBaseline",
+        "dominant-baseline": "dominantBaseline",
+        dur: "dur",
+        dx: "dx",
+        dy: "dy",
+        edgemode: "edgeMode",
+        elevation: "elevation",
+        enablebackground: "enableBackground",
+        "enable-background": "enableBackground",
+        end: "end",
+        exponent: "exponent",
+        externalresourcesrequired: "externalResourcesRequired",
+        fill: "fill",
+        fillopacity: "fillOpacity",
+        "fill-opacity": "fillOpacity",
+        fillrule: "fillRule",
+        "fill-rule": "fillRule",
+        filter: "filter",
+        filterres: "filterRes",
+        filterunits: "filterUnits",
+        floodopacity: "floodOpacity",
+        "flood-opacity": "floodOpacity",
+        floodcolor: "floodColor",
+        "flood-color": "floodColor",
+        focusable: "focusable",
+        fontfamily: "fontFamily",
+        "font-family": "fontFamily",
+        fontsize: "fontSize",
+        "font-size": "fontSize",
+        fontsizeadjust: "fontSizeAdjust",
+        "font-size-adjust": "fontSizeAdjust",
+        fontstretch: "fontStretch",
+        "font-stretch": "fontStretch",
+        fontstyle: "fontStyle",
+        "font-style": "fontStyle",
+        fontvariant: "fontVariant",
+        "font-variant": "fontVariant",
+        fontweight: "fontWeight",
+        "font-weight": "fontWeight",
+        format: "format",
+        from: "from",
+        fx: "fx",
+        fy: "fy",
+        g1: "g1",
+        g2: "g2",
+        glyphname: "glyphName",
+        "glyph-name": "glyphName",
+        glyphorientationhorizontal: "glyphOrientationHorizontal",
+        "glyph-orientation-horizontal": "glyphOrientationHorizontal",
+        glyphorientationvertical: "glyphOrientationVertical",
+        "glyph-orientation-vertical": "glyphOrientationVertical",
+        glyphref: "glyphRef",
+        gradienttransform: "gradientTransform",
+        gradientunits: "gradientUnits",
+        hanging: "hanging",
+        horizadvx: "horizAdvX",
+        "horiz-adv-x": "horizAdvX",
+        horizoriginx: "horizOriginX",
+        "horiz-origin-x": "horizOriginX",
+        ideographic: "ideographic",
+        imagerendering: "imageRendering",
+        "image-rendering": "imageRendering",
+        in2: "in2",
+        in: "in",
+        inlist: "inlist",
+        intercept: "intercept",
+        k1: "k1",
+        k2: "k2",
+        k3: "k3",
+        k4: "k4",
+        k: "k",
+        kernelmatrix: "kernelMatrix",
+        kernelunitlength: "kernelUnitLength",
+        kerning: "kerning",
+        keypoints: "keyPoints",
+        keysplines: "keySplines",
+        keytimes: "keyTimes",
+        lengthadjust: "lengthAdjust",
+        letterspacing: "letterSpacing",
+        "letter-spacing": "letterSpacing",
+        lightingcolor: "lightingColor",
+        "lighting-color": "lightingColor",
+        limitingconeangle: "limitingConeAngle",
+        local: "local",
+        markerend: "markerEnd",
+        "marker-end": "markerEnd",
+        markerheight: "markerHeight",
+        markermid: "markerMid",
+        "marker-mid": "markerMid",
+        markerstart: "markerStart",
+        "marker-start": "markerStart",
+        markerunits: "markerUnits",
+        markerwidth: "markerWidth",
+        mask: "mask",
+        maskcontentunits: "maskContentUnits",
+        maskunits: "maskUnits",
+        mathematical: "mathematical",
+        mode: "mode",
+        numoctaves: "numOctaves",
+        offset: "offset",
+        opacity: "opacity",
+        operator: "operator",
+        order: "order",
+        orient: "orient",
+        orientation: "orientation",
+        origin: "origin",
+        overflow: "overflow",
+        overlineposition: "overlinePosition",
+        "overline-position": "overlinePosition",
+        overlinethickness: "overlineThickness",
+        "overline-thickness": "overlineThickness",
+        paintorder: "paintOrder",
+        "paint-order": "paintOrder",
+        panose1: "panose1",
+        "panose-1": "panose1",
+        pathlength: "pathLength",
+        patterncontentunits: "patternContentUnits",
+        patterntransform: "patternTransform",
+        patternunits: "patternUnits",
+        pointerevents: "pointerEvents",
+        "pointer-events": "pointerEvents",
+        points: "points",
+        pointsatx: "pointsAtX",
+        pointsaty: "pointsAtY",
+        pointsatz: "pointsAtZ",
+        popover: "popover",
+        popovertarget: "popoverTarget",
+        popovertargetaction: "popoverTargetAction",
+        prefix: "prefix",
+        preservealpha: "preserveAlpha",
+        preserveaspectratio: "preserveAspectRatio",
+        primitiveunits: "primitiveUnits",
+        property: "property",
+        r: "r",
+        radius: "radius",
+        refx: "refX",
+        refy: "refY",
+        renderingintent: "renderingIntent",
+        "rendering-intent": "renderingIntent",
+        repeatcount: "repeatCount",
+        repeatdur: "repeatDur",
+        requiredextensions: "requiredExtensions",
+        requiredfeatures: "requiredFeatures",
+        resource: "resource",
+        restart: "restart",
+        result: "result",
+        results: "results",
+        rotate: "rotate",
+        rx: "rx",
+        ry: "ry",
+        scale: "scale",
+        security: "security",
+        seed: "seed",
+        shaperendering: "shapeRendering",
+        "shape-rendering": "shapeRendering",
+        slope: "slope",
+        spacing: "spacing",
+        specularconstant: "specularConstant",
+        specularexponent: "specularExponent",
+        speed: "speed",
+        spreadmethod: "spreadMethod",
+        startoffset: "startOffset",
+        stddeviation: "stdDeviation",
+        stemh: "stemh",
+        stemv: "stemv",
+        stitchtiles: "stitchTiles",
+        stopcolor: "stopColor",
+        "stop-color": "stopColor",
+        stopopacity: "stopOpacity",
+        "stop-opacity": "stopOpacity",
+        strikethroughposition: "strikethroughPosition",
+        "strikethrough-position": "strikethroughPosition",
+        strikethroughthickness: "strikethroughThickness",
+        "strikethrough-thickness": "strikethroughThickness",
+        string: "string",
+        stroke: "stroke",
+        strokedasharray: "strokeDasharray",
+        "stroke-dasharray": "strokeDasharray",
+        strokedashoffset: "strokeDashoffset",
+        "stroke-dashoffset": "strokeDashoffset",
+        strokelinecap: "strokeLinecap",
+        "stroke-linecap": "strokeLinecap",
+        strokelinejoin: "strokeLinejoin",
+        "stroke-linejoin": "strokeLinejoin",
+        strokemiterlimit: "strokeMiterlimit",
+        "stroke-miterlimit": "strokeMiterlimit",
+        strokewidth: "strokeWidth",
+        "stroke-width": "strokeWidth",
+        strokeopacity: "strokeOpacity",
+        "stroke-opacity": "strokeOpacity",
+        suppresscontenteditablewarning: "suppressContentEditableWarning",
+        suppresshydrationwarning: "suppressHydrationWarning",
+        surfacescale: "surfaceScale",
+        systemlanguage: "systemLanguage",
+        tablevalues: "tableValues",
+        targetx: "targetX",
+        targety: "targetY",
+        textanchor: "textAnchor",
+        "text-anchor": "textAnchor",
+        textdecoration: "textDecoration",
+        "text-decoration": "textDecoration",
+        textlength: "textLength",
+        textrendering: "textRendering",
+        "text-rendering": "textRendering",
+        to: "to",
+        transform: "transform",
+        transformorigin: "transformOrigin",
+        "transform-origin": "transformOrigin",
+        typeof: "typeof",
+        u1: "u1",
+        u2: "u2",
+        underlineposition: "underlinePosition",
+        "underline-position": "underlinePosition",
+        underlinethickness: "underlineThickness",
+        "underline-thickness": "underlineThickness",
+        unicode: "unicode",
+        unicodebidi: "unicodeBidi",
+        "unicode-bidi": "unicodeBidi",
+        unicoderange: "unicodeRange",
+        "unicode-range": "unicodeRange",
+        unitsperem: "unitsPerEm",
+        "units-per-em": "unitsPerEm",
+        unselectable: "unselectable",
+        valphabetic: "vAlphabetic",
+        "v-alphabetic": "vAlphabetic",
+        values: "values",
+        vectoreffect: "vectorEffect",
+        "vector-effect": "vectorEffect",
+        version: "version",
+        vertadvy: "vertAdvY",
+        "vert-adv-y": "vertAdvY",
+        vertoriginx: "vertOriginX",
+        "vert-origin-x": "vertOriginX",
+        vertoriginy: "vertOriginY",
+        "vert-origin-y": "vertOriginY",
+        vhanging: "vHanging",
+        "v-hanging": "vHanging",
+        videographic: "vIdeographic",
+        "v-ideographic": "vIdeographic",
+        viewbox: "viewBox",
+        viewtarget: "viewTarget",
+        visibility: "visibility",
+        vmathematical: "vMathematical",
+        "v-mathematical": "vMathematical",
+        vocab: "vocab",
+        widths: "widths",
+        wordspacing: "wordSpacing",
+        "word-spacing": "wordSpacing",
+        writingmode: "writingMode",
+        "writing-mode": "writingMode",
+        x1: "x1",
+        x2: "x2",
+        x: "x",
+        xchannelselector: "xChannelSelector",
+        xheight: "xHeight",
+        "x-height": "xHeight",
+        xlinkactuate: "xlinkActuate",
+        "xlink:actuate": "xlinkActuate",
+        xlinkarcrole: "xlinkArcrole",
+        "xlink:arcrole": "xlinkArcrole",
+        xlinkhref: "xlinkHref",
+        "xlink:href": "xlinkHref",
+        xlinkrole: "xlinkRole",
+        "xlink:role": "xlinkRole",
+        xlinkshow: "xlinkShow",
+        "xlink:show": "xlinkShow",
+        xlinktitle: "xlinkTitle",
+        "xlink:title": "xlinkTitle",
+        xlinktype: "xlinkType",
+        "xlink:type": "xlinkType",
+        xmlbase: "xmlBase",
+        "xml:base": "xmlBase",
+        xmllang: "xmlLang",
+        "xml:lang": "xmlLang",
+        xmlns: "xmlns",
+        "xml:space": "xmlSpace",
+        xmlnsxlink: "xmlnsXlink",
+        "xmlns:xlink": "xmlnsXlink",
+        xmlspace: "xmlSpace",
+        y1: "y1",
+        y2: "y2",
+        y: "y",
+        ychannelselector: "yChannelSelector",
+        z: "z",
+        zoomandpan: "zoomAndPan"
+      },
+      warnedProperties = {},
+      EVENT_NAME_REGEX = /^on./,
+      INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,
+      rARIA = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,
+      msPattern$1 = /^-ms-/,
+      hyphenPattern = /-(.)/g,
+      badStyleValueWithSemicolonPattern = /;\s*$/,
+      warnedStyleNames = {},
+      warnedStyleValues = {},
+      warnedForNaNValue = !1,
+      warnedForInfinityValue = !1,
+      matchHtmlRegExp = /["'&<>]/,
+      uppercasePattern = /([A-Z])/g,
+      msPattern = /^ms-/,
+      isJavaScriptProtocol =
+        /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i,
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      ReactDOMSharedInternals =
+        ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      NotPending = Object.freeze({
+        pending: !1,
+        data: null,
+        method: null,
+        action: null
+      }),
+      previousDispatcher = ReactDOMSharedInternals.d;
+    ReactDOMSharedInternals.d = {
+      f: previousDispatcher.f,
+      r: previousDispatcher.r,
+      D: function (href) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            if (!resumableState.dnsResources.hasOwnProperty(href)) {
+              resumableState.dnsResources[href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              )
+                JSCompiler_temp =
+                  ((header =
+                    "<" +
+                    escapeHrefForLinkHeaderURLContext(href) +
+                    ">; rel=dns-prefetch"),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              JSCompiler_temp
+                ? ((renderState.resets.dns[href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((header = []),
+                  pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+                  renderState.preconnects.add(header));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.D(href);
+      },
+      C: function (href, crossOrigin) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            var bucket =
+              "use-credentials" === crossOrigin
+                ? "credentials"
+                : "string" === typeof crossOrigin
+                  ? "anonymous"
+                  : "default";
+            if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+              resumableState.connectResources[bucket][href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              ) {
+                JSCompiler_temp =
+                  "<" +
+                  escapeHrefForLinkHeaderURLContext(href) +
+                  ">; rel=preconnect";
+                if ("string" === typeof crossOrigin) {
+                  var escapedCrossOrigin =
+                    escapeStringForLinkHeaderQuotedParamValueContext(
+                      crossOrigin,
+                      "crossOrigin"
+                    );
+                  JSCompiler_temp +=
+                    '; crossorigin="' + escapedCrossOrigin + '"';
+                }
+                JSCompiler_temp =
+                  ((header = JSCompiler_temp),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              }
+              JSCompiler_temp
+                ? ((renderState.resets.connect[bucket][href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((bucket = []),
+                  pushLinkImpl(bucket, {
+                    rel: "preconnect",
+                    href: href,
+                    crossOrigin: crossOrigin
+                  }),
+                  renderState.preconnects.add(bucket));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.C(href, crossOrigin);
+      },
+      L: function (href, as, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (as && href) {
+            switch (as) {
+              case "image":
+                if (options) {
+                  var imageSrcSet = options.imageSrcSet;
+                  var imageSizes = options.imageSizes;
+                  var fetchPriority = options.fetchPriority;
+                }
+                var key = imageSrcSet
+                  ? imageSrcSet + "\n" + (imageSizes || "")
+                  : href;
+                if (resumableState.imageResources.hasOwnProperty(key)) return;
+                resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+                resumableState = renderState.headers;
+                var header;
+                resumableState &&
+                0 < resumableState.remainingCapacity &&
+                "string" !== typeof imageSrcSet &&
+                "high" === fetchPriority &&
+                ((header = getPreloadAsHeader(href, as, options)),
+                0 <= (resumableState.remainingCapacity -= header.length + 2))
+                  ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+                    resumableState.highImagePreloads &&
+                      (resumableState.highImagePreloads += ", "),
+                    (resumableState.highImagePreloads += header))
+                  : ((resumableState = []),
+                    pushLinkImpl(
+                      resumableState,
+                      assign(
+                        {
+                          rel: "preload",
+                          href: imageSrcSet ? void 0 : href,
+                          as: as
+                        },
+                        options
+                      )
+                    ),
+                    "high" === fetchPriority
+                      ? renderState.highImagePreloads.add(resumableState)
+                      : (renderState.bulkPreloads.add(resumableState),
+                        renderState.preloads.images.set(key, resumableState)));
+                break;
+              case "style":
+                if (resumableState.styleResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.styleResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.stylesheets.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                break;
+              case "script":
+                if (resumableState.scriptResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                renderState.preloads.scripts.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.scriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                break;
+              default:
+                if (resumableState.unknownResources.hasOwnProperty(as)) {
+                  if (
+                    ((imageSrcSet = resumableState.unknownResources[as]),
+                    imageSrcSet.hasOwnProperty(href))
+                  )
+                    return;
+                } else
+                  (imageSrcSet = {}),
+                    (resumableState.unknownResources[as] = imageSrcSet);
+                imageSrcSet[href] = PRELOAD_NO_CREDS;
+                if (
+                  (resumableState = renderState.headers) &&
+                  0 < resumableState.remainingCapacity &&
+                  "font" === as &&
+                  ((key = getPreloadAsHeader(href, as, options)),
+                  0 <= (resumableState.remainingCapacity -= key.length + 2))
+                )
+                  (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+                    resumableState.fontPreloads &&
+                      (resumableState.fontPreloads += ", "),
+                    (resumableState.fontPreloads += key);
+                else
+                  switch (
+                    ((resumableState = []),
+                    (href = assign(
+                      { rel: "preload", href: href, as: as },
+                      options
+                    )),
+                    pushLinkImpl(resumableState, href),
+                    as)
+                  ) {
+                    case "font":
+                      renderState.fontPreloads.add(resumableState);
+                      break;
+                    default:
+                      renderState.bulkPreloads.add(resumableState);
+                  }
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.L(href, as, options);
+      },
+      m: function (href, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            var as =
+              options && "string" === typeof options.as ? options.as : "script";
+            switch (as) {
+              case "script":
+                if (resumableState.moduleScriptResources.hasOwnProperty(href))
+                  return;
+                as = [];
+                resumableState.moduleScriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.moduleScripts.set(href, as);
+                break;
+              default:
+                if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+                  var resources = resumableState.unknownResources[as];
+                  if (resources.hasOwnProperty(href)) return;
+                } else
+                  (resources = {}),
+                    (resumableState.moduleUnknownResources[as] = resources);
+                as = [];
+                resources[href] = PRELOAD_NO_CREDS;
+            }
+            pushLinkImpl(
+              as,
+              assign({ rel: "modulepreload", href: href }, options)
+            );
+            renderState.bulkPreloads.add(as);
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.m(href, options);
+      },
+      X: function (src, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState = resumableState.scriptResources.hasOwnProperty(
+              src
+            )
+              ? resumableState.scriptResources[src]
+              : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.scriptResources[src] = EXISTS),
+              (options = assign({ src: src, async: !0 }, options)),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.scripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.X(src, options);
+      },
+      S: function (href, precedence, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            precedence = precedence || "default";
+            var styleQueue = renderState.styles.get(precedence),
+              resourceState = resumableState.styleResources.hasOwnProperty(href)
+                ? resumableState.styleResources[href]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.styleResources[href] = EXISTS),
+              styleQueue ||
+                ((styleQueue = {
+                  precedence: escapeTextForBrowser(precedence),
+                  rules: [],
+                  hrefs: [],
+                  sheets: new Map()
+                }),
+                renderState.styles.set(precedence, styleQueue)),
+              (precedence = {
+                state: PENDING$1,
+                props: assign(
+                  {
+                    rel: "stylesheet",
+                    href: href,
+                    "data-precedence": precedence
+                  },
+                  options
+                )
+              }),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(precedence.props, resourceState),
+                (renderState = renderState.preloads.stylesheets.get(href)) &&
+                0 < renderState.length
+                  ? (renderState.length = 0)
+                  : (precedence.state = PRELOADED)),
+              styleQueue.sheets.set(href, precedence),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.S(href, precedence, options);
+      },
+      M: function (src, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState =
+              resumableState.moduleScriptResources.hasOwnProperty(src)
+                ? resumableState.moduleScriptResources[src]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.moduleScriptResources[src] = EXISTS),
+              (options = assign(
+                { src: src, type: "module", async: !0 },
+                options
+              )),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.moduleScripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.M(src, options);
+      }
+    };
+    var NothingSent = 0,
+      SentCompleteSegmentFunction = 1,
+      SentCompleteBoundaryFunction = 2,
+      SentClientRenderFunction = 4,
+      SentStyleInsertionFunction = 8,
+      EXISTS = null,
+      PRELOAD_NO_CREDS = [];
+    Object.freeze(PRELOAD_NO_CREDS);
+    var scriptRegex = /(<\/|<)(s)(cript)/gi;
+    var didWarnForNewBooleanPropsWithEmptyValue = {};
+    var NoContribution = 0,
+      ROOT_HTML_MODE = 0,
+      HTML_HTML_MODE = 1,
+      HTML_MODE = 2,
+      HTML_HEAD_MODE = 3,
+      SVG_MODE = 4,
+      MATHML_MODE = 5,
+      HTML_TABLE_MODE = 6,
+      HTML_TABLE_BODY_MODE = 7,
+      HTML_TABLE_ROW_MODE = 8,
+      HTML_COLGROUP_MODE = 9,
+      styleNameCache = new Map(),
+      styleAttributeStart = ' style="',
+      styleAssign = ":",
+      styleSeparator = ";",
+      attributeSeparator = " ",
+      attributeAssign = '="',
+      attributeEnd = '"',
+      attributeEmptyString = '=""',
+      actionJavaScriptURL = escapeTextForBrowser(
+        "javascript:throw new Error('React form unexpectedly submitted.')"
+      ),
+      endOfStartTag = ">",
+      endOfStartTagSelfClosing = "/>",
+      didWarnDefaultInputValue = !1,
+      didWarnDefaultChecked = !1,
+      didWarnDefaultSelectValue = !1,
+      didWarnDefaultTextareaValue = !1,
+      didWarnInvalidOptionChildren = !1,
+      didWarnInvalidOptionInnerHTML = !1,
+      didWarnSelectedSetOnOption = !1,
+      didWarnFormActionType = !1,
+      didWarnFormActionName = !1,
+      didWarnFormActionTarget = !1,
+      didWarnFormActionMethod = !1,
+      formReplayingRuntimeScript =
+        'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});',
+      styleRegex = /(<\/|<)(s)(tyle)/gi,
+      leadingNewline = "\n",
+      VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+      validatedTagCache = new Map(),
+      endTagCache = new Map(),
+      placeholder1 = '<template id="',
+      placeholder2 = '"></template>',
+      startCompletedSuspenseBoundary = "\x3c!--$--\x3e",
+      startPendingSuspenseBoundary1 = '\x3c!--$?--\x3e<template id="',
+      startPendingSuspenseBoundary2 = '"></template>',
+      startClientRenderedSuspenseBoundary = "\x3c!--$!--\x3e",
+      endSuspenseBoundary = "\x3c!--/$--\x3e",
+      clientRenderedSuspenseBoundaryError1 = "<template",
+      clientRenderedSuspenseBoundaryErrorAttrInterstitial = '"',
+      clientRenderedSuspenseBoundaryError1A = ' data-dgst="',
+      clientRenderedSuspenseBoundaryError1B = ' data-msg="',
+      clientRenderedSuspenseBoundaryError1C = ' data-stck="',
+      clientRenderedSuspenseBoundaryError1D = ' data-cstck="',
+      clientRenderedSuspenseBoundaryError2 = "></template>",
+      boundaryPreambleContributionChunkStart = "\x3c!--",
+      boundaryPreambleContributionChunkEnd = "--\x3e",
+      startSegmentHTML = '<div hidden id="',
+      startSegmentHTML2 = '">',
+      endSegmentHTML = "</div>",
+      startSegmentSVG = '<svg aria-hidden="true" style="display:none" id="',
+      startSegmentSVG2 = '">',
+      endSegmentSVG = "</svg>",
+      startSegmentMathML = '<math aria-hidden="true" style="display:none" id="',
+      startSegmentMathML2 = '">',
+      endSegmentMathML = "</math>",
+      startSegmentTable = '<table hidden id="',
+      startSegmentTable2 = '">',
+      endSegmentTable = "</table>",
+      startSegmentTableBody = '<table hidden><tbody id="',
+      startSegmentTableBody2 = '">',
+      endSegmentTableBody = "</tbody></table>",
+      startSegmentTableRow = '<table hidden><tr id="',
+      startSegmentTableRow2 = '">',
+      endSegmentTableRow = "</tr></table>",
+      startSegmentColGroup = '<table hidden><colgroup id="',
+      startSegmentColGroup2 = '">',
+      endSegmentColGroup = "</colgroup></table>",
+      completeSegmentScript1Full =
+        '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("',
+      completeSegmentScript1Partial = '$RS("',
+      completeSegmentScript2 = '","',
+      completeSegmentScriptEnd = '")\x3c/script>',
+      completeBoundaryScript1Full =
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("',
+      completeBoundaryScript1Partial = '$RC("',
+      completeBoundaryWithStylesScript1FullBoth =
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("',
+      completeBoundaryWithStylesScript1FullPartial =
+        '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("',
+      completeBoundaryWithStylesScript1Partial = '$RR("',
+      completeBoundaryScript2 = '","',
+      completeBoundaryScript3a = '",',
+      completeBoundaryScript3b = '"',
+      completeBoundaryScriptEnd = ")\x3c/script>",
+      clientRenderScript1Full =
+        '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("',
+      clientRenderScript1Partial = '$RX("',
+      clientRenderScript1A = '"',
+      clientRenderErrorScriptArgInterstitial = ",",
+      clientRenderScriptEnd = ")\x3c/script>",
+      regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g,
+      regexForJSStringsInScripts = /[&><\u2028\u2029]/g,
+      lateStyleTagResourceOpen1 = '<style media="not all" data-precedence="',
+      lateStyleTagResourceOpen2 = '" data-href="',
+      lateStyleTagResourceOpen3 = '">',
+      lateStyleTagTemplateClose = "</style>",
+      currentlyRenderingBoundaryHasStylesToHoist = !1,
+      destinationHasCapacity = !0,
+      stylesheetFlushingQueue = [],
+      styleTagResourceOpen1 = '<style data-precedence="',
+      styleTagResourceOpen2 = '" data-href="',
+      spaceSeparator = " ",
+      styleTagResourceOpen3 = '">',
+      styleTagResourceClose = "</style>",
+      arrayFirstOpenBracket = "[",
+      arraySubsequentOpenBracket = ",[",
+      arrayInterstitial = ",",
+      arrayCloseBracket = "]",
+      PENDING$1 = 0,
+      PRELOADED = 1,
+      PREAMBLE = 2,
+      LATE = 3,
+      regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g,
+      regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g,
+      doctypeChunk = "",
+      bind = Function.prototype.bind,
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      emptyContextObject = {};
+    Object.freeze(emptyContextObject);
+    var rendererSigil = {};
+    var currentActiveSnapshot = null,
+      didWarnAboutNoopUpdateForComponent = {},
+      didWarnAboutDeprecatedWillMount = {};
+    var didWarnAboutUninitializedState = new Set();
+    var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
+    var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
+    var didWarnAboutDirectlyAssigningPropsToState = new Set();
+    var didWarnAboutUndefinedDerivedState = new Set();
+    var didWarnAboutContextTypes$1 = new Set();
+    var didWarnAboutChildContextTypes = new Set();
+    var didWarnAboutInvalidateContextType = new Set();
+    var didWarnOnInvalidCallback = new Set();
+    var classComponentUpdater = {
+        enqueueSetState: function (inst, payload, callback) {
+          var internals = inst._reactInternals;
+          null === internals.queue
+            ? warnNoop(inst, "setState")
+            : (internals.queue.push(payload),
+              void 0 !== callback &&
+                null !== callback &&
+                warnOnInvalidCallback(callback));
+        },
+        enqueueReplaceState: function (inst, payload, callback) {
+          inst = inst._reactInternals;
+          inst.replace = !0;
+          inst.queue = [payload];
+          void 0 !== callback &&
+            null !== callback &&
+            warnOnInvalidCallback(callback);
+        },
+        enqueueForceUpdate: function (inst, callback) {
+          null === inst._reactInternals.queue
+            ? warnNoop(inst, "forceUpdate")
+            : void 0 !== callback &&
+              null !== callback &&
+              warnOnInvalidCallback(callback);
+        }
+      },
+      emptyTreeContext = { id: 1, overflow: "" },
+      clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+      log = Math.log,
+      LN2 = Math.LN2,
+      SuspenseException = Error(
+        "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+      ),
+      suspendedThenable = null,
+      objectIs = "function" === typeof Object.is ? Object.is : is,
+      currentlyRenderingComponent = null,
+      currentlyRenderingTask = null,
+      currentlyRenderingRequest = null,
+      currentlyRenderingKeyPath = null,
+      firstWorkInProgressHook = null,
+      workInProgressHook = null,
+      isReRender = !1,
+      didScheduleRenderPhaseUpdate = !1,
+      localIdCounter = 0,
+      actionStateCounter = 0,
+      actionStateMatchingIndex = -1,
+      thenableIndexCounter = 0,
+      thenableState = null,
+      renderPhaseUpdates = null,
+      numberOfReRenders = 0,
+      isInHookUserCodeInDev = !1,
+      currentHookNameInDev,
+      HooksDispatcher = {
+        readContext: readContext,
+        use: function (usable) {
+          if (null !== usable && "object" === typeof usable) {
+            if ("function" === typeof usable.then)
+              return unwrapThenable(usable);
+            if (usable.$$typeof === REACT_CONTEXT_TYPE)
+              return readContext(usable);
+          }
+          throw Error(
+            "An unsupported type was passed to use(): " + String(usable)
+          );
+        },
+        useContext: function (context) {
+          currentHookNameInDev = "useContext";
+          resolveCurrentlyRenderingComponent();
+          return context._currentValue2;
+        },
+        useMemo: useMemo,
+        useReducer: useReducer,
+        useRef: function (initialValue) {
+          currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+          workInProgressHook = createWorkInProgressHook();
+          var previousRef = workInProgressHook.memoizedState;
+          return null === previousRef
+            ? ((initialValue = { current: initialValue }),
+              Object.seal(initialValue),
+              (workInProgressHook.memoizedState = initialValue))
+            : previousRef;
+        },
+        useState: function (initialState) {
+          currentHookNameInDev = "useState";
+          return useReducer(basicStateReducer, initialState);
+        },
+        useInsertionEffect: noop$1,
+        useLayoutEffect: noop$1,
+        useCallback: function (callback, deps) {
+          return useMemo(function () {
+            return callback;
+          }, deps);
+        },
+        useImperativeHandle: noop$1,
+        useEffect: noop$1,
+        useDebugValue: noop$1,
+        useDeferredValue: function (value, initialValue) {
+          resolveCurrentlyRenderingComponent();
+          return void 0 !== initialValue ? initialValue : value;
+        },
+        useTransition: function () {
+          resolveCurrentlyRenderingComponent();
+          return [!1, unsupportedStartTransition];
+        },
+        useId: function () {
+          var treeId = currentlyRenderingTask.treeContext;
+          var overflow = treeId.overflow;
+          treeId = treeId.id;
+          treeId =
+            (treeId & ~(1 << (32 - clz32(treeId) - 1))).toString(32) + overflow;
+          var resumableState = currentResumableState;
+          if (null === resumableState)
+            throw Error(
+              "Invalid hook call. Hooks can only be called inside of the body of a function component."
+            );
+          overflow = localIdCounter++;
+          treeId = "\u00ab" + resumableState.idPrefix + "R" + treeId;
+          0 < overflow && (treeId += "H" + overflow.toString(32));
+          return treeId + "\u00bb";
+        },
+        useSyncExternalStore: function (
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        ) {
+          if (void 0 === getServerSnapshot)
+            throw Error(
+              "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+            );
+          return getServerSnapshot();
+        },
+        useOptimistic: function (passthrough) {
+          resolveCurrentlyRenderingComponent();
+          return [passthrough, unsupportedSetOptimisticState];
+        },
+        useActionState: useActionState,
+        useFormState: useActionState,
+        useHostTransitionStatus: function () {
+          resolveCurrentlyRenderingComponent();
+          return NotPending;
+        },
+        useMemoCache: function (size) {
+          for (var data = Array(size), i = 0; i < size; i++)
+            data[i] = REACT_MEMO_CACHE_SENTINEL;
+          return data;
+        },
+        useCacheRefresh: function () {
+          return unsupportedRefresh;
+        }
+      },
+      currentResumableState = null,
+      currentTaskInDEV = null,
+      DefaultAsyncDispatcher = {
+        getCacheForType: function () {
+          throw Error("Not implemented.");
+        },
+        getOwner: function () {
+          return null === currentTaskInDEV
+            ? null
+            : currentTaskInDEV.componentStack;
+        }
+      },
+      disabledDepth = 0,
+      prevLog,
+      prevInfo,
+      prevWarn,
+      prevError,
+      prevGroup,
+      prevGroupCollapsed,
+      prevGroupEnd;
+    disabledLog.__reactDisabledLog = !0;
+    var prefix,
+      suffix,
+      reentry = !1;
+    var componentFrameCache = new (
+      "function" === typeof WeakMap ? WeakMap : Map
+    )();
+    var callComponent = {
+        react_stack_bottom_frame: function (Component, props, secondArg) {
+          return Component(props, secondArg);
+        }
+      },
+      callComponentInDEV =
+        callComponent.react_stack_bottom_frame.bind(callComponent),
+      callRender = {
+        react_stack_bottom_frame: function (instance) {
+          return instance.render();
+        }
+      },
+      callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),
+      callLazyInit = {
+        react_stack_bottom_frame: function (lazy) {
+          var init = lazy._init;
+          return init(lazy._payload);
+        }
+      },
+      callLazyInitInDEV =
+        callLazyInit.react_stack_bottom_frame.bind(callLazyInit),
+      lastResetTime = 0;
+    if (
+      "object" === typeof performance &&
+      "function" === typeof performance.now
+    ) {
+      var localPerformance = performance;
+      var getCurrentTime = function () {
+        return localPerformance.now();
+      };
+    } else {
+      var localDate = Date;
+      getCurrentTime = function () {
+        return localDate.now();
+      };
+    }
+    var CLIENT_RENDERED = 4,
+      PENDING = 0,
+      COMPLETED = 1,
+      FLUSHED = 2,
+      POSTPONED = 5,
+      CLOSED = 14,
+      currentRequest = null,
+      didWarnAboutBadClass = {},
+      didWarnAboutContextTypes = {},
+      didWarnAboutContextTypeOnFunctionComponent = {},
+      didWarnAboutGetDerivedStateOnFunctionComponent = {},
+      didWarnAboutReassigningProps = !1,
+      didWarnAboutGenerators = !1,
+      didWarnAboutMaps = !1;
+    exports.renderToStaticMarkup = function (children, options) {
+      return renderToStringImpl(
+        children,
+        options,
+        !0,
+        'The server used "renderToStaticMarkup" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server'
+      );
+    };
+    exports.renderToString = function (children, options) {
+      return renderToStringImpl(
+        children,
+        options,
+        !1,
+        'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server'
+      );
+    };
+    exports.version = "19.1.1";
+  })();
Index: node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5972 @@
+/**
+ * @license React
+ * react-dom-server-legacy.node.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+
+
+ JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
+
+ Copyright (c) 2011 Gary Court
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+"use strict";
+var React = require("react"),
+  ReactDOM = require("react-dom"),
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+  REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+  REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+  REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+  MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+  isArrayImpl = Array.isArray;
+function murmurhash3_32_gc(key, seed) {
+  var remainder = key.length & 3;
+  var bytes = key.length - remainder;
+  var h1 = seed;
+  for (seed = 0; seed < bytes; ) {
+    var k1 =
+      (key.charCodeAt(seed) & 255) |
+      ((key.charCodeAt(++seed) & 255) << 8) |
+      ((key.charCodeAt(++seed) & 255) << 16) |
+      ((key.charCodeAt(++seed) & 255) << 24);
+    ++seed;
+    k1 =
+      (3432918353 * (k1 & 65535) +
+        (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+      4294967295;
+    k1 = (k1 << 15) | (k1 >>> 17);
+    k1 =
+      (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+      4294967295;
+    h1 ^= k1;
+    h1 = (h1 << 13) | (h1 >>> 19);
+    h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295;
+    h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16);
+  }
+  k1 = 0;
+  switch (remainder) {
+    case 3:
+      k1 ^= (key.charCodeAt(seed + 2) & 255) << 16;
+    case 2:
+      k1 ^= (key.charCodeAt(seed + 1) & 255) << 8;
+    case 1:
+      (k1 ^= key.charCodeAt(seed) & 255),
+        (k1 =
+          (3432918353 * (k1 & 65535) +
+            (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295),
+        (k1 = (k1 << 15) | (k1 >>> 17)),
+        (h1 ^=
+          (461845907 * (k1 & 65535) +
+            (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295);
+  }
+  h1 ^= key.length;
+  h1 ^= h1 >>> 16;
+  h1 =
+    (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) &
+    4294967295;
+  h1 ^= h1 >>> 13;
+  h1 =
+    (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) &
+    4294967295;
+  return (h1 ^ (h1 >>> 16)) >>> 0;
+}
+var assign = Object.assign,
+  hasOwnProperty = Object.prototype.hasOwnProperty,
+  VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+    "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  illegalAttributeNameCache = {},
+  validatedAttributeNameCache = {};
+function isAttributeNameSafe(attributeName) {
+  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+    return !0;
+  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+    return (validatedAttributeNameCache[attributeName] = !0);
+  illegalAttributeNameCache[attributeName] = !0;
+  return !1;
+}
+var unitlessNumbers = new Set(
+    "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+      " "
+    )
+  ),
+  aliases = new Map([
+    ["acceptCharset", "accept-charset"],
+    ["htmlFor", "for"],
+    ["httpEquiv", "http-equiv"],
+    ["crossOrigin", "crossorigin"],
+    ["accentHeight", "accent-height"],
+    ["alignmentBaseline", "alignment-baseline"],
+    ["arabicForm", "arabic-form"],
+    ["baselineShift", "baseline-shift"],
+    ["capHeight", "cap-height"],
+    ["clipPath", "clip-path"],
+    ["clipRule", "clip-rule"],
+    ["colorInterpolation", "color-interpolation"],
+    ["colorInterpolationFilters", "color-interpolation-filters"],
+    ["colorProfile", "color-profile"],
+    ["colorRendering", "color-rendering"],
+    ["dominantBaseline", "dominant-baseline"],
+    ["enableBackground", "enable-background"],
+    ["fillOpacity", "fill-opacity"],
+    ["fillRule", "fill-rule"],
+    ["floodColor", "flood-color"],
+    ["floodOpacity", "flood-opacity"],
+    ["fontFamily", "font-family"],
+    ["fontSize", "font-size"],
+    ["fontSizeAdjust", "font-size-adjust"],
+    ["fontStretch", "font-stretch"],
+    ["fontStyle", "font-style"],
+    ["fontVariant", "font-variant"],
+    ["fontWeight", "font-weight"],
+    ["glyphName", "glyph-name"],
+    ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+    ["glyphOrientationVertical", "glyph-orientation-vertical"],
+    ["horizAdvX", "horiz-adv-x"],
+    ["horizOriginX", "horiz-origin-x"],
+    ["imageRendering", "image-rendering"],
+    ["letterSpacing", "letter-spacing"],
+    ["lightingColor", "lighting-color"],
+    ["markerEnd", "marker-end"],
+    ["markerMid", "marker-mid"],
+    ["markerStart", "marker-start"],
+    ["overlinePosition", "overline-position"],
+    ["overlineThickness", "overline-thickness"],
+    ["paintOrder", "paint-order"],
+    ["panose-1", "panose-1"],
+    ["pointerEvents", "pointer-events"],
+    ["renderingIntent", "rendering-intent"],
+    ["shapeRendering", "shape-rendering"],
+    ["stopColor", "stop-color"],
+    ["stopOpacity", "stop-opacity"],
+    ["strikethroughPosition", "strikethrough-position"],
+    ["strikethroughThickness", "strikethrough-thickness"],
+    ["strokeDasharray", "stroke-dasharray"],
+    ["strokeDashoffset", "stroke-dashoffset"],
+    ["strokeLinecap", "stroke-linecap"],
+    ["strokeLinejoin", "stroke-linejoin"],
+    ["strokeMiterlimit", "stroke-miterlimit"],
+    ["strokeOpacity", "stroke-opacity"],
+    ["strokeWidth", "stroke-width"],
+    ["textAnchor", "text-anchor"],
+    ["textDecoration", "text-decoration"],
+    ["textRendering", "text-rendering"],
+    ["transformOrigin", "transform-origin"],
+    ["underlinePosition", "underline-position"],
+    ["underlineThickness", "underline-thickness"],
+    ["unicodeBidi", "unicode-bidi"],
+    ["unicodeRange", "unicode-range"],
+    ["unitsPerEm", "units-per-em"],
+    ["vAlphabetic", "v-alphabetic"],
+    ["vHanging", "v-hanging"],
+    ["vIdeographic", "v-ideographic"],
+    ["vMathematical", "v-mathematical"],
+    ["vectorEffect", "vector-effect"],
+    ["vertAdvY", "vert-adv-y"],
+    ["vertOriginX", "vert-origin-x"],
+    ["vertOriginY", "vert-origin-y"],
+    ["wordSpacing", "word-spacing"],
+    ["writingMode", "writing-mode"],
+    ["xmlnsXlink", "xmlns:xlink"],
+    ["xHeight", "x-height"]
+  ]),
+  matchHtmlRegExp = /["'&<>]/;
+function escapeTextForBrowser(text) {
+  if (
+    "boolean" === typeof text ||
+    "number" === typeof text ||
+    "bigint" === typeof text
+  )
+    return "" + text;
+  text = "" + text;
+  var match = matchHtmlRegExp.exec(text);
+  if (match) {
+    var html = "",
+      index,
+      lastIndex = 0;
+    for (index = match.index; index < text.length; index++) {
+      switch (text.charCodeAt(index)) {
+        case 34:
+          match = "&quot;";
+          break;
+        case 38:
+          match = "&amp;";
+          break;
+        case 39:
+          match = "&#x27;";
+          break;
+        case 60:
+          match = "&lt;";
+          break;
+        case 62:
+          match = "&gt;";
+          break;
+        default:
+          continue;
+      }
+      lastIndex !== index && (html += text.slice(lastIndex, index));
+      lastIndex = index + 1;
+      html += match;
+    }
+    text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+  }
+  return text;
+}
+var uppercasePattern = /([A-Z])/g,
+  msPattern = /^ms-/,
+  isJavaScriptProtocol =
+    /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
+function sanitizeURL(url) {
+  return isJavaScriptProtocol.test("" + url)
+    ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+    : url;
+}
+var ReactSharedInternals =
+    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  ReactDOMSharedInternals =
+    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  sharedNotPendingObject = {
+    pending: !1,
+    data: null,
+    method: null,
+    action: null
+  },
+  previousDispatcher = ReactDOMSharedInternals.d;
+ReactDOMSharedInternals.d = {
+  f: previousDispatcher.f,
+  r: previousDispatcher.r,
+  D: prefetchDNS,
+  C: preconnect,
+  L: preload,
+  m: preloadModule,
+  X: preinitScript,
+  S: preinitStyle,
+  M: preinitModuleScript
+};
+var PRELOAD_NO_CREDS = [],
+  scriptRegex = /(<\/|<)(s)(cript)/gi;
+function scriptReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+}
+function createResumableState(
+  identifierPrefix,
+  externalRuntimeConfig,
+  bootstrapScriptContent,
+  bootstrapScripts,
+  bootstrapModules
+) {
+  return {
+    idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+    nextFormID: 0,
+    streamingFormat: 0,
+    bootstrapScriptContent: bootstrapScriptContent,
+    bootstrapScripts: bootstrapScripts,
+    bootstrapModules: bootstrapModules,
+    instructions: 0,
+    hasBody: !1,
+    hasHtml: !1,
+    unknownResources: {},
+    dnsResources: {},
+    connectResources: { default: {}, anonymous: {}, credentials: {} },
+    imageResources: {},
+    styleResources: {},
+    scriptResources: {},
+    moduleUnknownResources: {},
+    moduleScriptResources: {}
+  };
+}
+function createPreambleState() {
+  return {
+    htmlChunks: null,
+    headChunks: null,
+    bodyChunks: null,
+    contribution: 0
+  };
+}
+function createFormatContext(insertionMode, selectedValue, tagScope) {
+  return {
+    insertionMode: insertionMode,
+    selectedValue: selectedValue,
+    tagScope: tagScope
+  };
+}
+function getChildFormatContext(parentContext, type, props) {
+  switch (type) {
+    case "noscript":
+      return createFormatContext(2, null, parentContext.tagScope | 1);
+    case "select":
+      return createFormatContext(
+        2,
+        null != props.value ? props.value : props.defaultValue,
+        parentContext.tagScope
+      );
+    case "svg":
+      return createFormatContext(4, null, parentContext.tagScope);
+    case "picture":
+      return createFormatContext(2, null, parentContext.tagScope | 2);
+    case "math":
+      return createFormatContext(5, null, parentContext.tagScope);
+    case "foreignObject":
+      return createFormatContext(2, null, parentContext.tagScope);
+    case "table":
+      return createFormatContext(6, null, parentContext.tagScope);
+    case "thead":
+    case "tbody":
+    case "tfoot":
+      return createFormatContext(7, null, parentContext.tagScope);
+    case "colgroup":
+      return createFormatContext(9, null, parentContext.tagScope);
+    case "tr":
+      return createFormatContext(8, null, parentContext.tagScope);
+    case "head":
+      if (2 > parentContext.insertionMode)
+        return createFormatContext(3, null, parentContext.tagScope);
+      break;
+    case "html":
+      if (0 === parentContext.insertionMode)
+        return createFormatContext(1, null, parentContext.tagScope);
+  }
+  return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode
+    ? createFormatContext(2, null, parentContext.tagScope)
+    : parentContext;
+}
+var styleNameCache = new Map();
+function pushStyleAttribute(target, style) {
+  if ("object" !== typeof style)
+    throw Error(
+      "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+    );
+  var isFirst = !0,
+    styleName;
+  for (styleName in style)
+    if (hasOwnProperty.call(style, styleName)) {
+      var styleValue = style[styleName];
+      if (
+        null != styleValue &&
+        "boolean" !== typeof styleValue &&
+        "" !== styleValue
+      ) {
+        if (0 === styleName.indexOf("--")) {
+          var nameChunk = escapeTextForBrowser(styleName);
+          styleValue = escapeTextForBrowser(("" + styleValue).trim());
+        } else
+          (nameChunk = styleNameCache.get(styleName)),
+            void 0 === nameChunk &&
+              ((nameChunk = escapeTextForBrowser(
+                styleName
+                  .replace(uppercasePattern, "-$1")
+                  .toLowerCase()
+                  .replace(msPattern, "-ms-")
+              )),
+              styleNameCache.set(styleName, nameChunk)),
+            (styleValue =
+              "number" === typeof styleValue
+                ? 0 === styleValue || unitlessNumbers.has(styleName)
+                  ? "" + styleValue
+                  : styleValue + "px"
+                : escapeTextForBrowser(("" + styleValue).trim()));
+        isFirst
+          ? ((isFirst = !1),
+            target.push(' style="', nameChunk, ":", styleValue))
+          : target.push(";", nameChunk, ":", styleValue);
+      }
+    }
+  isFirst || target.push('"');
+}
+function pushBooleanAttribute(target, name, value) {
+  value &&
+    "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    target.push(" ", name, '=""');
+}
+function pushStringAttribute(target, name, value) {
+  "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    "boolean" !== typeof value &&
+    target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+}
+var actionJavaScriptURL = escapeTextForBrowser(
+  "javascript:throw new Error('React form unexpectedly submitted.')"
+);
+function pushAdditionalFormField(value, key) {
+  this.push('<input type="hidden"');
+  validateAdditionalFormField(value);
+  pushStringAttribute(this, "name", key);
+  pushStringAttribute(this, "value", value);
+  this.push("/>");
+}
+function validateAdditionalFormField(value) {
+  if ("string" !== typeof value)
+    throw Error(
+      "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+    );
+}
+function getCustomFormFields(resumableState, formAction) {
+  if ("function" === typeof formAction.$$FORM_ACTION) {
+    var id = resumableState.nextFormID++;
+    resumableState = resumableState.idPrefix + id;
+    try {
+      var customFields = formAction.$$FORM_ACTION(resumableState);
+      if (customFields) {
+        var formData = customFields.data;
+        null != formData && formData.forEach(validateAdditionalFormField);
+      }
+      return customFields;
+    } catch (x) {
+      if ("object" === typeof x && null !== x && "function" === typeof x.then)
+        throw x;
+    }
+  }
+  return null;
+}
+function pushFormActionAttribute(
+  target,
+  resumableState,
+  renderState,
+  formAction,
+  formEncType,
+  formMethod,
+  formTarget,
+  name
+) {
+  var formData = null;
+  if ("function" === typeof formAction) {
+    var customFields = getCustomFormFields(resumableState, formAction);
+    null !== customFields
+      ? ((name = customFields.name),
+        (formAction = customFields.action || ""),
+        (formEncType = customFields.encType),
+        (formMethod = customFields.method),
+        (formTarget = customFields.target),
+        (formData = customFields.data))
+      : (target.push(" ", "formAction", '="', actionJavaScriptURL, '"'),
+        (formTarget = formMethod = formEncType = formAction = name = null),
+        injectFormReplayingRuntime(resumableState, renderState));
+  }
+  null != name && pushAttribute(target, "name", name);
+  null != formAction && pushAttribute(target, "formAction", formAction);
+  null != formEncType && pushAttribute(target, "formEncType", formEncType);
+  null != formMethod && pushAttribute(target, "formMethod", formMethod);
+  null != formTarget && pushAttribute(target, "formTarget", formTarget);
+  return formData;
+}
+function pushAttribute(target, name, value) {
+  switch (name) {
+    case "className":
+      pushStringAttribute(target, "class", value);
+      break;
+    case "tabIndex":
+      pushStringAttribute(target, "tabindex", value);
+      break;
+    case "dir":
+    case "role":
+    case "viewBox":
+    case "width":
+    case "height":
+      pushStringAttribute(target, name, value);
+      break;
+    case "style":
+      pushStyleAttribute(target, value);
+      break;
+    case "src":
+    case "href":
+      if ("" === value) break;
+    case "action":
+    case "formAction":
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "ref":
+      break;
+    case "autoFocus":
+    case "multiple":
+    case "muted":
+      pushBooleanAttribute(target, name.toLowerCase(), value);
+      break;
+    case "xlinkHref":
+      if (
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(" ", "xlink:href", '="', escapeTextForBrowser(value), '"');
+      break;
+    case "contentEditable":
+    case "spellCheck":
+    case "draggable":
+    case "value":
+    case "autoReverse":
+    case "externalResourcesRequired":
+    case "focusable":
+    case "preserveAlpha":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "inert":
+    case "allowFullScreen":
+    case "async":
+    case "autoPlay":
+    case "controls":
+    case "default":
+    case "defer":
+    case "disabled":
+    case "disablePictureInPicture":
+    case "disableRemotePlayback":
+    case "formNoValidate":
+    case "hidden":
+    case "loop":
+    case "noModule":
+    case "noValidate":
+    case "open":
+    case "playsInline":
+    case "readOnly":
+    case "required":
+    case "reversed":
+    case "scoped":
+    case "seamless":
+    case "itemScope":
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(" ", name, '=""');
+      break;
+    case "capture":
+    case "download":
+      !0 === value
+        ? target.push(" ", name, '=""')
+        : !1 !== value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value &&
+          target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "cols":
+    case "rows":
+    case "size":
+    case "span":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        !isNaN(value) &&
+        1 <= value &&
+        target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "rowSpan":
+    case "start":
+      "function" === typeof value ||
+        "symbol" === typeof value ||
+        isNaN(value) ||
+        target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "xlinkActuate":
+      pushStringAttribute(target, "xlink:actuate", value);
+      break;
+    case "xlinkArcrole":
+      pushStringAttribute(target, "xlink:arcrole", value);
+      break;
+    case "xlinkRole":
+      pushStringAttribute(target, "xlink:role", value);
+      break;
+    case "xlinkShow":
+      pushStringAttribute(target, "xlink:show", value);
+      break;
+    case "xlinkTitle":
+      pushStringAttribute(target, "xlink:title", value);
+      break;
+    case "xlinkType":
+      pushStringAttribute(target, "xlink:type", value);
+      break;
+    case "xmlBase":
+      pushStringAttribute(target, "xml:base", value);
+      break;
+    case "xmlLang":
+      pushStringAttribute(target, "xml:lang", value);
+      break;
+    case "xmlSpace":
+      pushStringAttribute(target, "xml:space", value);
+      break;
+    default:
+      if (
+        !(2 < name.length) ||
+        ("o" !== name[0] && "O" !== name[0]) ||
+        ("n" !== name[1] && "N" !== name[1])
+      )
+        if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) {
+          switch (typeof value) {
+            case "function":
+            case "symbol":
+              return;
+            case "boolean":
+              var prefix$8 = name.toLowerCase().slice(0, 5);
+              if ("data-" !== prefix$8 && "aria-" !== prefix$8) return;
+          }
+          target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+        }
+  }
+}
+function pushInnerHTML(target, innerHTML, children) {
+  if (null != innerHTML) {
+    if (null != children)
+      throw Error(
+        "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+      );
+    if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+      throw Error(
+        "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+      );
+    innerHTML = innerHTML.__html;
+    null !== innerHTML && void 0 !== innerHTML && target.push("" + innerHTML);
+  }
+}
+function flattenOptionChildren(children) {
+  var content = "";
+  React.Children.forEach(children, function (child) {
+    null != child && (content += child);
+  });
+  return content;
+}
+function injectFormReplayingRuntime(resumableState, renderState) {
+  0 === (resumableState.instructions & 16) &&
+    ((resumableState.instructions |= 16),
+    renderState.bootstrapChunks.unshift(
+      renderState.startInlineScript,
+      'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});',
+      "\x3c/script>"
+    ));
+}
+function pushLinkImpl(target, props) {
+  target.push(startChunkForTag("link"));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push("/>");
+  return null;
+}
+var styleRegex = /(<\/|<)(s)(tyle)/gi;
+function styleReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+}
+function pushSelfClosing(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              tag +
+                " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push("/>");
+  return null;
+}
+function pushTitleImpl(target, props) {
+  target.push(startChunkForTag("title"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  props = Array.isArray(children)
+    ? 2 > children.length
+      ? children[0]
+      : null
+    : children;
+  "function" !== typeof props &&
+    "symbol" !== typeof props &&
+    null !== props &&
+    void 0 !== props &&
+    target.push(escapeTextForBrowser("" + props));
+  pushInnerHTML(target, innerHTML, children);
+  target.push(endChunkForTag("title"));
+  return null;
+}
+function pushScriptImpl(target, props) {
+  target.push(startChunkForTag("script"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  pushInnerHTML(target, innerHTML, children);
+  "string" === typeof children &&
+    target.push(("" + children).replace(scriptRegex, scriptReplacer));
+  target.push(endChunkForTag("script"));
+  return null;
+}
+function pushStartSingletonElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  pushInnerHTML(target, innerHTML, tag);
+  return tag;
+}
+function pushStartGenericElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  pushInnerHTML(target, innerHTML, tag);
+  return "string" === typeof tag
+    ? (target.push(escapeTextForBrowser(tag)), null)
+    : tag;
+}
+var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+  validatedTagCache = new Map();
+function startChunkForTag(tag) {
+  var tagStartChunk = validatedTagCache.get(tag);
+  if (void 0 === tagStartChunk) {
+    if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+    tagStartChunk = "<" + tag;
+    validatedTagCache.set(tag, tagStartChunk);
+  }
+  return tagStartChunk;
+}
+function pushStartInstance(
+  target$jscomp$0,
+  type,
+  props,
+  resumableState,
+  renderState,
+  preambleState,
+  hoistableState,
+  formatContext,
+  textEmbedded,
+  isFallback
+) {
+  switch (type) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+      break;
+    case "a":
+      target$jscomp$0.push(startChunkForTag("a"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              case "href":
+                "" === propValue
+                  ? pushStringAttribute(target$jscomp$0, "href", "")
+                  : pushAttribute(target$jscomp$0, propKey, propValue);
+                break;
+              default:
+                pushAttribute(target$jscomp$0, propKey, propValue);
+            }
+        }
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML, children);
+      if ("string" === typeof children) {
+        target$jscomp$0.push(escapeTextForBrowser(children));
+        var JSCompiler_inline_result = null;
+      } else JSCompiler_inline_result = children;
+      return JSCompiler_inline_result;
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "select":
+      target$jscomp$0.push(startChunkForTag("select"));
+      var children$jscomp$0 = null,
+        innerHTML$jscomp$0 = null,
+        propKey$jscomp$0;
+      for (propKey$jscomp$0 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+          var propValue$jscomp$0 = props[propKey$jscomp$0];
+          if (null != propValue$jscomp$0)
+            switch (propKey$jscomp$0) {
+              case "children":
+                children$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "defaultValue":
+              case "value":
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$0,
+                  propValue$jscomp$0
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+      return children$jscomp$0;
+    case "option":
+      var selectedValue = formatContext.selectedValue;
+      target$jscomp$0.push(startChunkForTag("option"));
+      var children$jscomp$1 = null,
+        value = null,
+        selected = null,
+        innerHTML$jscomp$1 = null,
+        propKey$jscomp$1;
+      for (propKey$jscomp$1 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+          var propValue$jscomp$1 = props[propKey$jscomp$1];
+          if (null != propValue$jscomp$1)
+            switch (propKey$jscomp$1) {
+              case "children":
+                children$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "selected":
+                selected = propValue$jscomp$1;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "value":
+                value = propValue$jscomp$1;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$1,
+                  propValue$jscomp$1
+                );
+            }
+        }
+      if (null != selectedValue) {
+        var stringValue =
+          null !== value
+            ? "" + value
+            : flattenOptionChildren(children$jscomp$1);
+        if (isArrayImpl(selectedValue))
+          for (var i = 0; i < selectedValue.length; i++) {
+            if ("" + selectedValue[i] === stringValue) {
+              target$jscomp$0.push(' selected=""');
+              break;
+            }
+          }
+        else
+          "" + selectedValue === stringValue &&
+            target$jscomp$0.push(' selected=""');
+      } else selected && target$jscomp$0.push(' selected=""');
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+      return children$jscomp$1;
+    case "textarea":
+      target$jscomp$0.push(startChunkForTag("textarea"));
+      var value$jscomp$0 = null,
+        defaultValue = null,
+        children$jscomp$2 = null,
+        propKey$jscomp$2;
+      for (propKey$jscomp$2 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+          var propValue$jscomp$2 = props[propKey$jscomp$2];
+          if (null != propValue$jscomp$2)
+            switch (propKey$jscomp$2) {
+              case "children":
+                children$jscomp$2 = propValue$jscomp$2;
+                break;
+              case "value":
+                value$jscomp$0 = propValue$jscomp$2;
+                break;
+              case "defaultValue":
+                defaultValue = propValue$jscomp$2;
+                break;
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$2,
+                  propValue$jscomp$2
+                );
+            }
+        }
+      null === value$jscomp$0 &&
+        null !== defaultValue &&
+        (value$jscomp$0 = defaultValue);
+      target$jscomp$0.push(">");
+      if (null != children$jscomp$2) {
+        if (null != value$jscomp$0)
+          throw Error(
+            "If you supply `defaultValue` on a <textarea>, do not pass children."
+          );
+        if (isArrayImpl(children$jscomp$2)) {
+          if (1 < children$jscomp$2.length)
+            throw Error("<textarea> can only have at most one child.");
+          value$jscomp$0 = "" + children$jscomp$2[0];
+        }
+        value$jscomp$0 = "" + children$jscomp$2;
+      }
+      "string" === typeof value$jscomp$0 &&
+        "\n" === value$jscomp$0[0] &&
+        target$jscomp$0.push("\n");
+      null !== value$jscomp$0 &&
+        target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0));
+      return null;
+    case "input":
+      target$jscomp$0.push(startChunkForTag("input"));
+      var name = null,
+        formAction = null,
+        formEncType = null,
+        formMethod = null,
+        formTarget = null,
+        value$jscomp$1 = null,
+        defaultValue$jscomp$0 = null,
+        checked = null,
+        defaultChecked = null,
+        propKey$jscomp$3;
+      for (propKey$jscomp$3 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+          var propValue$jscomp$3 = props[propKey$jscomp$3];
+          if (null != propValue$jscomp$3)
+            switch (propKey$jscomp$3) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              case "name":
+                name = propValue$jscomp$3;
+                break;
+              case "formAction":
+                formAction = propValue$jscomp$3;
+                break;
+              case "formEncType":
+                formEncType = propValue$jscomp$3;
+                break;
+              case "formMethod":
+                formMethod = propValue$jscomp$3;
+                break;
+              case "formTarget":
+                formTarget = propValue$jscomp$3;
+                break;
+              case "defaultChecked":
+                defaultChecked = propValue$jscomp$3;
+                break;
+              case "defaultValue":
+                defaultValue$jscomp$0 = propValue$jscomp$3;
+                break;
+              case "checked":
+                checked = propValue$jscomp$3;
+                break;
+              case "value":
+                value$jscomp$1 = propValue$jscomp$3;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$3,
+                  propValue$jscomp$3
+                );
+            }
+        }
+      var formData = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction,
+        formEncType,
+        formMethod,
+        formTarget,
+        name
+      );
+      null !== checked
+        ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+        : null !== defaultChecked &&
+          pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+      null !== value$jscomp$1
+        ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+        : null !== defaultValue$jscomp$0 &&
+          pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+      target$jscomp$0.push("/>");
+      null != formData &&
+        formData.forEach(pushAdditionalFormField, target$jscomp$0);
+      return null;
+    case "button":
+      target$jscomp$0.push(startChunkForTag("button"));
+      var children$jscomp$3 = null,
+        innerHTML$jscomp$2 = null,
+        name$jscomp$0 = null,
+        formAction$jscomp$0 = null,
+        formEncType$jscomp$0 = null,
+        formMethod$jscomp$0 = null,
+        formTarget$jscomp$0 = null,
+        propKey$jscomp$4;
+      for (propKey$jscomp$4 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+          var propValue$jscomp$4 = props[propKey$jscomp$4];
+          if (null != propValue$jscomp$4)
+            switch (propKey$jscomp$4) {
+              case "children":
+                children$jscomp$3 = propValue$jscomp$4;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$2 = propValue$jscomp$4;
+                break;
+              case "name":
+                name$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formAction":
+                formAction$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formEncType":
+                formEncType$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formMethod":
+                formMethod$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formTarget":
+                formTarget$jscomp$0 = propValue$jscomp$4;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$4,
+                  propValue$jscomp$4
+                );
+            }
+        }
+      var formData$jscomp$0 = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction$jscomp$0,
+        formEncType$jscomp$0,
+        formMethod$jscomp$0,
+        formTarget$jscomp$0,
+        name$jscomp$0
+      );
+      target$jscomp$0.push(">");
+      null != formData$jscomp$0 &&
+        formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+      if ("string" === typeof children$jscomp$3) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3));
+        var JSCompiler_inline_result$jscomp$0 = null;
+      } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3;
+      return JSCompiler_inline_result$jscomp$0;
+    case "form":
+      target$jscomp$0.push(startChunkForTag("form"));
+      var children$jscomp$4 = null,
+        innerHTML$jscomp$3 = null,
+        formAction$jscomp$1 = null,
+        formEncType$jscomp$1 = null,
+        formMethod$jscomp$1 = null,
+        formTarget$jscomp$1 = null,
+        propKey$jscomp$5;
+      for (propKey$jscomp$5 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+          var propValue$jscomp$5 = props[propKey$jscomp$5];
+          if (null != propValue$jscomp$5)
+            switch (propKey$jscomp$5) {
+              case "children":
+                children$jscomp$4 = propValue$jscomp$5;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$3 = propValue$jscomp$5;
+                break;
+              case "action":
+                formAction$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "encType":
+                formEncType$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "method":
+                formMethod$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "target":
+                formTarget$jscomp$1 = propValue$jscomp$5;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$5,
+                  propValue$jscomp$5
+                );
+            }
+        }
+      var formData$jscomp$1 = null,
+        formActionName = null;
+      if ("function" === typeof formAction$jscomp$1) {
+        var customFields = getCustomFormFields(
+          resumableState,
+          formAction$jscomp$1
+        );
+        null !== customFields
+          ? ((formAction$jscomp$1 = customFields.action || ""),
+            (formEncType$jscomp$1 = customFields.encType),
+            (formMethod$jscomp$1 = customFields.method),
+            (formTarget$jscomp$1 = customFields.target),
+            (formData$jscomp$1 = customFields.data),
+            (formActionName = customFields.name))
+          : (target$jscomp$0.push(
+              " ",
+              "action",
+              '="',
+              actionJavaScriptURL,
+              '"'
+            ),
+            (formTarget$jscomp$1 =
+              formMethod$jscomp$1 =
+              formEncType$jscomp$1 =
+              formAction$jscomp$1 =
+                null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != formAction$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+      null != formEncType$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+      null != formMethod$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+      null != formTarget$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+      target$jscomp$0.push(">");
+      null !== formActionName &&
+        (target$jscomp$0.push('<input type="hidden"'),
+        pushStringAttribute(target$jscomp$0, "name", formActionName),
+        target$jscomp$0.push("/>"),
+        null != formData$jscomp$1 &&
+          formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0));
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+      if ("string" === typeof children$jscomp$4) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4));
+        var JSCompiler_inline_result$jscomp$1 = null;
+      } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4;
+      return JSCompiler_inline_result$jscomp$1;
+    case "menuitem":
+      target$jscomp$0.push(startChunkForTag("menuitem"));
+      for (var propKey$jscomp$6 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+          var propValue$jscomp$6 = props[propKey$jscomp$6];
+          if (null != propValue$jscomp$6)
+            switch (propKey$jscomp$6) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$6,
+                  propValue$jscomp$6
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      return null;
+    case "object":
+      target$jscomp$0.push(startChunkForTag("object"));
+      var children$jscomp$5 = null,
+        innerHTML$jscomp$4 = null,
+        propKey$jscomp$7;
+      for (propKey$jscomp$7 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+          var propValue$jscomp$7 = props[propKey$jscomp$7];
+          if (null != propValue$jscomp$7)
+            switch (propKey$jscomp$7) {
+              case "children":
+                children$jscomp$5 = propValue$jscomp$7;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$4 = propValue$jscomp$7;
+                break;
+              case "data":
+                var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                if ("" === sanitizedValue) break;
+                target$jscomp$0.push(
+                  " ",
+                  "data",
+                  '="',
+                  escapeTextForBrowser(sanitizedValue),
+                  '"'
+                );
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$7,
+                  propValue$jscomp$7
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+      if ("string" === typeof children$jscomp$5) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5));
+        var JSCompiler_inline_result$jscomp$2 = null;
+      } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5;
+      return JSCompiler_inline_result$jscomp$2;
+    case "title":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$3 = pushTitleImpl(
+          target$jscomp$0,
+          props
+        );
+      else
+        isFallback
+          ? (JSCompiler_inline_result$jscomp$3 = null)
+          : (pushTitleImpl(renderState.hoistableChunks, props),
+            (JSCompiler_inline_result$jscomp$3 = void 0));
+      return JSCompiler_inline_result$jscomp$3;
+    case "link":
+      var rel = props.rel,
+        href = props.href,
+        precedence = props.precedence;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof rel ||
+        "string" !== typeof href ||
+        "" === href
+      ) {
+        pushLinkImpl(target$jscomp$0, props);
+        var JSCompiler_inline_result$jscomp$4 = null;
+      } else if ("stylesheet" === props.rel)
+        if (
+          "string" !== typeof precedence ||
+          null != props.disabled ||
+          props.onLoad ||
+          props.onError
+        )
+          JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+            target$jscomp$0,
+            props
+          );
+        else {
+          var styleQueue = renderState.styles.get(precedence),
+            resourceState = resumableState.styleResources.hasOwnProperty(href)
+              ? resumableState.styleResources[href]
+              : void 0;
+          if (null !== resourceState) {
+            resumableState.styleResources[href] = null;
+            styleQueue ||
+              ((styleQueue = {
+                precedence: escapeTextForBrowser(precedence),
+                rules: [],
+                hrefs: [],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence, styleQueue));
+            var resource = {
+              state: 0,
+              props: assign({}, props, {
+                "data-precedence": props.precedence,
+                precedence: null
+              })
+            };
+            if (resourceState) {
+              2 === resourceState.length &&
+                adoptPreloadCredentials(resource.props, resourceState);
+              var preloadResource = renderState.preloads.stylesheets.get(href);
+              preloadResource && 0 < preloadResource.length
+                ? (preloadResource.length = 0)
+                : (resource.state = 1);
+            }
+            styleQueue.sheets.set(href, resource);
+            hoistableState && hoistableState.stylesheets.add(resource);
+          } else if (styleQueue) {
+            var resource$9 = styleQueue.sheets.get(href);
+            resource$9 &&
+              hoistableState &&
+              hoistableState.stylesheets.add(resource$9);
+          }
+          textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+          JSCompiler_inline_result$jscomp$4 = null;
+        }
+      else
+        props.onLoad || props.onError
+          ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+              target$jscomp$0,
+              props
+            ))
+          : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+            (JSCompiler_inline_result$jscomp$4 = isFallback
+              ? null
+              : pushLinkImpl(renderState.hoistableChunks, props)));
+      return JSCompiler_inline_result$jscomp$4;
+    case "script":
+      var asyncProp = props.async;
+      if (
+        "string" !== typeof props.src ||
+        !props.src ||
+        !asyncProp ||
+        "function" === typeof asyncProp ||
+        "symbol" === typeof asyncProp ||
+        props.onLoad ||
+        props.onError ||
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$5 = pushScriptImpl(
+          target$jscomp$0,
+          props
+        );
+      else {
+        var key = props.src;
+        if ("module" === props.type) {
+          var resources = resumableState.moduleScriptResources;
+          var preloads = renderState.preloads.moduleScripts;
+        } else
+          (resources = resumableState.scriptResources),
+            (preloads = renderState.preloads.scripts);
+        var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+          ? resources[key]
+          : void 0;
+        if (null !== resourceState$jscomp$0) {
+          resources[key] = null;
+          var scriptProps = props;
+          if (resourceState$jscomp$0) {
+            2 === resourceState$jscomp$0.length &&
+              ((scriptProps = assign({}, props)),
+              adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+            var preloadResource$jscomp$0 = preloads.get(key);
+            preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0);
+          }
+          var resource$jscomp$0 = [];
+          renderState.scripts.add(resource$jscomp$0);
+          pushScriptImpl(resource$jscomp$0, scriptProps);
+        }
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+        JSCompiler_inline_result$jscomp$5 = null;
+      }
+      return JSCompiler_inline_result$jscomp$5;
+    case "style":
+      var precedence$jscomp$0 = props.precedence,
+        href$jscomp$0 = props.href;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof precedence$jscomp$0 ||
+        "string" !== typeof href$jscomp$0 ||
+        "" === href$jscomp$0
+      ) {
+        target$jscomp$0.push(startChunkForTag("style"));
+        var children$jscomp$6 = null,
+          innerHTML$jscomp$5 = null,
+          propKey$jscomp$8;
+        for (propKey$jscomp$8 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+            var propValue$jscomp$8 = props[propKey$jscomp$8];
+            if (null != propValue$jscomp$8)
+              switch (propKey$jscomp$8) {
+                case "children":
+                  children$jscomp$6 = propValue$jscomp$8;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$5 = propValue$jscomp$8;
+                  break;
+                default:
+                  pushAttribute(
+                    target$jscomp$0,
+                    propKey$jscomp$8,
+                    propValue$jscomp$8
+                  );
+              }
+          }
+        target$jscomp$0.push(">");
+        var child = Array.isArray(children$jscomp$6)
+          ? 2 > children$jscomp$6.length
+            ? children$jscomp$6[0]
+            : null
+          : children$jscomp$6;
+        "function" !== typeof child &&
+          "symbol" !== typeof child &&
+          null !== child &&
+          void 0 !== child &&
+          target$jscomp$0.push(("" + child).replace(styleRegex, styleReplacer));
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6);
+        target$jscomp$0.push(endChunkForTag("style"));
+        var JSCompiler_inline_result$jscomp$6 = null;
+      } else {
+        var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0);
+        if (
+          null !==
+          (resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+            ? resumableState.styleResources[href$jscomp$0]
+            : void 0)
+        ) {
+          resumableState.styleResources[href$jscomp$0] = null;
+          styleQueue$jscomp$0
+            ? styleQueue$jscomp$0.hrefs.push(
+                escapeTextForBrowser(href$jscomp$0)
+              )
+            : ((styleQueue$jscomp$0 = {
+                precedence: escapeTextForBrowser(precedence$jscomp$0),
+                rules: [],
+                hrefs: [escapeTextForBrowser(href$jscomp$0)],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0));
+          var target = styleQueue$jscomp$0.rules,
+            children$jscomp$7 = null,
+            innerHTML$jscomp$6 = null,
+            propKey$jscomp$9;
+          for (propKey$jscomp$9 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+              var propValue$jscomp$9 = props[propKey$jscomp$9];
+              if (null != propValue$jscomp$9)
+                switch (propKey$jscomp$9) {
+                  case "children":
+                    children$jscomp$7 = propValue$jscomp$9;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$6 = propValue$jscomp$9;
+                }
+            }
+          var child$jscomp$0 = Array.isArray(children$jscomp$7)
+            ? 2 > children$jscomp$7.length
+              ? children$jscomp$7[0]
+              : null
+            : children$jscomp$7;
+          "function" !== typeof child$jscomp$0 &&
+            "symbol" !== typeof child$jscomp$0 &&
+            null !== child$jscomp$0 &&
+            void 0 !== child$jscomp$0 &&
+            target.push(
+              ("" + child$jscomp$0).replace(styleRegex, styleReplacer)
+            );
+          pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7);
+        }
+        styleQueue$jscomp$0 &&
+          hoistableState &&
+          hoistableState.styles.add(styleQueue$jscomp$0);
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+        JSCompiler_inline_result$jscomp$6 = void 0;
+      }
+      return JSCompiler_inline_result$jscomp$6;
+    case "meta":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$7 = pushSelfClosing(
+          target$jscomp$0,
+          props,
+          "meta"
+        );
+      else
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+          (JSCompiler_inline_result$jscomp$7 = isFallback
+            ? null
+            : "string" === typeof props.charSet
+              ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+              : "viewport" === props.name
+                ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                : pushSelfClosing(renderState.hoistableChunks, props, "meta"));
+      return JSCompiler_inline_result$jscomp$7;
+    case "listing":
+    case "pre":
+      target$jscomp$0.push(startChunkForTag(type));
+      var children$jscomp$8 = null,
+        innerHTML$jscomp$7 = null,
+        propKey$jscomp$10;
+      for (propKey$jscomp$10 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+          var propValue$jscomp$10 = props[propKey$jscomp$10];
+          if (null != propValue$jscomp$10)
+            switch (propKey$jscomp$10) {
+              case "children":
+                children$jscomp$8 = propValue$jscomp$10;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$7 = propValue$jscomp$10;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$10,
+                  propValue$jscomp$10
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      if (null != innerHTML$jscomp$7) {
+        if (null != children$jscomp$8)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if (
+          "object" !== typeof innerHTML$jscomp$7 ||
+          !("__html" in innerHTML$jscomp$7)
+        )
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        var html = innerHTML$jscomp$7.__html;
+        null !== html &&
+          void 0 !== html &&
+          ("string" === typeof html && 0 < html.length && "\n" === html[0]
+            ? target$jscomp$0.push("\n", html)
+            : target$jscomp$0.push("" + html));
+      }
+      "string" === typeof children$jscomp$8 &&
+        "\n" === children$jscomp$8[0] &&
+        target$jscomp$0.push("\n");
+      return children$jscomp$8;
+    case "img":
+      var src = props.src,
+        srcSet = props.srcSet;
+      if (
+        !(
+          "lazy" === props.loading ||
+          (!src && !srcSet) ||
+          ("string" !== typeof src && null != src) ||
+          ("string" !== typeof srcSet && null != srcSet)
+        ) &&
+        "low" !== props.fetchPriority &&
+        !1 === !!(formatContext.tagScope & 3) &&
+        ("string" !== typeof src ||
+          ":" !== src[4] ||
+          ("d" !== src[0] && "D" !== src[0]) ||
+          ("a" !== src[1] && "A" !== src[1]) ||
+          ("t" !== src[2] && "T" !== src[2]) ||
+          ("a" !== src[3] && "A" !== src[3])) &&
+        ("string" !== typeof srcSet ||
+          ":" !== srcSet[4] ||
+          ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+          ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+          ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+          ("a" !== srcSet[3] && "A" !== srcSet[3]))
+      ) {
+        var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+          key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+          promotablePreloads = renderState.preloads.images,
+          resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+        if (resource$jscomp$1) {
+          if (
+            "high" === props.fetchPriority ||
+            10 > renderState.highImagePreloads.size
+          )
+            promotablePreloads.delete(key$jscomp$0),
+              renderState.highImagePreloads.add(resource$jscomp$1);
+        } else if (
+          !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+        ) {
+          resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+          var input = props.crossOrigin;
+          var JSCompiler_inline_result$jscomp$8 =
+            "string" === typeof input
+              ? "use-credentials" === input
+                ? input
+                : ""
+              : void 0;
+          var headers = renderState.headers,
+            header;
+          headers &&
+          0 < headers.remainingCapacity &&
+          "string" !== typeof props.srcSet &&
+          ("high" === props.fetchPriority ||
+            500 > headers.highImagePreloads.length) &&
+          ((header = getPreloadAsHeader(src, "image", {
+            imageSrcSet: props.srcSet,
+            imageSizes: props.sizes,
+            crossOrigin: JSCompiler_inline_result$jscomp$8,
+            integrity: props.integrity,
+            nonce: props.nonce,
+            type: props.type,
+            fetchPriority: props.fetchPriority,
+            referrerPolicy: props.refererPolicy
+          })),
+          0 <= (headers.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+              headers.highImagePreloads && (headers.highImagePreloads += ", "),
+              (headers.highImagePreloads += header))
+            : ((resource$jscomp$1 = []),
+              pushLinkImpl(resource$jscomp$1, {
+                rel: "preload",
+                as: "image",
+                href: srcSet ? void 0 : src,
+                imageSrcSet: srcSet,
+                imageSizes: sizes,
+                crossOrigin: JSCompiler_inline_result$jscomp$8,
+                integrity: props.integrity,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.referrerPolicy
+              }),
+              "high" === props.fetchPriority ||
+              10 > renderState.highImagePreloads.size
+                ? renderState.highImagePreloads.add(resource$jscomp$1)
+                : (renderState.bulkPreloads.add(resource$jscomp$1),
+                  promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+        }
+      }
+      return pushSelfClosing(target$jscomp$0, props, "img");
+    case "base":
+    case "area":
+    case "br":
+    case "col":
+    case "embed":
+    case "hr":
+    case "keygen":
+    case "param":
+    case "source":
+    case "track":
+    case "wbr":
+      return pushSelfClosing(target$jscomp$0, props, type);
+    case "annotation-xml":
+    case "color-profile":
+    case "font-face":
+    case "font-face-src":
+    case "font-face-uri":
+    case "font-face-format":
+    case "font-face-name":
+    case "missing-glyph":
+      break;
+    case "head":
+      if (2 > formatContext.insertionMode) {
+        var preamble = preambleState || renderState.preamble;
+        if (preamble.headChunks)
+          throw Error("The `<head>` tag may only be rendered once.");
+        preamble.headChunks = [];
+        var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+          preamble.headChunks,
+          props,
+          "head"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "head"
+        );
+      return JSCompiler_inline_result$jscomp$9;
+    case "body":
+      if (2 > formatContext.insertionMode) {
+        var preamble$jscomp$0 = preambleState || renderState.preamble;
+        if (preamble$jscomp$0.bodyChunks)
+          throw Error("The `<body>` tag may only be rendered once.");
+        preamble$jscomp$0.bodyChunks = [];
+        var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+          preamble$jscomp$0.bodyChunks,
+          props,
+          "body"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "body"
+        );
+      return JSCompiler_inline_result$jscomp$10;
+    case "html":
+      if (0 === formatContext.insertionMode) {
+        var preamble$jscomp$1 = preambleState || renderState.preamble;
+        if (preamble$jscomp$1.htmlChunks)
+          throw Error("The `<html>` tag may only be rendered once.");
+        preamble$jscomp$1.htmlChunks = [""];
+        var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+          preamble$jscomp$1.htmlChunks,
+          props,
+          "html"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "html"
+        );
+      return JSCompiler_inline_result$jscomp$11;
+    default:
+      if (-1 !== type.indexOf("-")) {
+        target$jscomp$0.push(startChunkForTag(type));
+        var children$jscomp$9 = null,
+          innerHTML$jscomp$8 = null,
+          propKey$jscomp$11;
+        for (propKey$jscomp$11 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+            var propValue$jscomp$11 = props[propKey$jscomp$11];
+            if (null != propValue$jscomp$11) {
+              var attributeName = propKey$jscomp$11;
+              switch (propKey$jscomp$11) {
+                case "children":
+                  children$jscomp$9 = propValue$jscomp$11;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$8 = propValue$jscomp$11;
+                  break;
+                case "style":
+                  pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                  break;
+                case "suppressContentEditableWarning":
+                case "suppressHydrationWarning":
+                case "ref":
+                  break;
+                case "className":
+                  attributeName = "class";
+                default:
+                  if (
+                    isAttributeNameSafe(propKey$jscomp$11) &&
+                    "function" !== typeof propValue$jscomp$11 &&
+                    "symbol" !== typeof propValue$jscomp$11 &&
+                    !1 !== propValue$jscomp$11
+                  ) {
+                    if (!0 === propValue$jscomp$11) propValue$jscomp$11 = "";
+                    else if ("object" === typeof propValue$jscomp$11) continue;
+                    target$jscomp$0.push(
+                      " ",
+                      attributeName,
+                      '="',
+                      escapeTextForBrowser(propValue$jscomp$11),
+                      '"'
+                    );
+                  }
+              }
+            }
+          }
+        target$jscomp$0.push(">");
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9);
+        return children$jscomp$9;
+      }
+  }
+  return pushStartGenericElement(target$jscomp$0, props, type);
+}
+var endTagCache = new Map();
+function endChunkForTag(tag) {
+  var chunk = endTagCache.get(tag);
+  void 0 === chunk && ((chunk = "</" + tag + ">"), endTagCache.set(tag, chunk));
+  return chunk;
+}
+function hoistPreambleState(renderState, preambleState) {
+  renderState = renderState.preamble;
+  null === renderState.htmlChunks &&
+    preambleState.htmlChunks &&
+    ((renderState.htmlChunks = preambleState.htmlChunks),
+    (preambleState.contribution |= 1));
+  null === renderState.headChunks &&
+    preambleState.headChunks &&
+    ((renderState.headChunks = preambleState.headChunks),
+    (preambleState.contribution |= 4));
+  null === renderState.bodyChunks &&
+    preambleState.bodyChunks &&
+    ((renderState.bodyChunks = preambleState.bodyChunks),
+    (preambleState.contribution |= 2));
+}
+function writeBootstrap(destination, renderState) {
+  renderState = renderState.bootstrapChunks;
+  for (var i = 0; i < renderState.length - 1; i++)
+    destination.push(renderState[i]);
+  return i < renderState.length
+    ? ((i = renderState[i]), (renderState.length = 0), destination.push(i))
+    : !0;
+}
+function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+  destination.push('\x3c!--$?--\x3e<template id="');
+  if (null === id)
+    throw Error(
+      "An ID must have been assigned before we can complete the boundary."
+    );
+  destination.push(renderState.boundaryPrefix);
+  renderState = id.toString(16);
+  destination.push(renderState);
+  return destination.push('"></template>');
+}
+function writePreambleContribution(destination, preambleState) {
+  preambleState = preambleState.contribution;
+  0 !== preambleState &&
+    (destination.push("\x3c!--"),
+    destination.push("" + preambleState),
+    destination.push("--\x3e"));
+}
+function writeStartSegment(destination, renderState, formatContext, id) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return (
+        destination.push('<div hidden id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 4:
+      return (
+        destination.push('<svg aria-hidden="true" style="display:none" id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 5:
+      return (
+        destination.push('<math aria-hidden="true" style="display:none" id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 6:
+      return (
+        destination.push('<table hidden id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 7:
+      return (
+        destination.push('<table hidden><tbody id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 8:
+      return (
+        destination.push('<table hidden><tr id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    case 9:
+      return (
+        destination.push('<table hidden><colgroup id="'),
+        destination.push(renderState.segmentPrefix),
+        (renderState = id.toString(16)),
+        destination.push(renderState),
+        destination.push('">')
+      );
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+function writeEndSegment(destination, formatContext) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return destination.push("</div>");
+    case 4:
+      return destination.push("</svg>");
+    case 5:
+      return destination.push("</math>");
+    case 6:
+      return destination.push("</table>");
+    case 7:
+      return destination.push("</tbody></table>");
+    case 8:
+      return destination.push("</tr></table>");
+    case 9:
+      return destination.push("</colgroup></table>");
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g;
+function escapeJSStringsForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInInstructionScripts,
+    function (match) {
+      switch (match) {
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var regexForJSStringsInScripts = /[&><\u2028\u2029]/g;
+function escapeJSObjectForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInScripts,
+    function (match) {
+      switch (match) {
+        case "&":
+          return "\\u0026";
+        case ">":
+          return "\\u003e";
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var currentlyRenderingBoundaryHasStylesToHoist = !1,
+  destinationHasCapacity = !0;
+function flushStyleTagsLateForBoundary(styleQueue) {
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs,
+    i = 0;
+  if (hrefs.length) {
+    this.push('<style media="not all" data-precedence="');
+    this.push(styleQueue.precedence);
+    for (this.push('" data-href="'); i < hrefs.length - 1; i++)
+      this.push(hrefs[i]), this.push(" ");
+    this.push(hrefs[i]);
+    this.push('">');
+    for (i = 0; i < rules.length; i++) this.push(rules[i]);
+    destinationHasCapacity = this.push("</style>");
+    currentlyRenderingBoundaryHasStylesToHoist = !0;
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function hasStylesToHoist(stylesheet) {
+  return 2 !== stylesheet.state
+    ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+    : !1;
+}
+function writeHoistablesForBoundary(destination, hoistableState, renderState) {
+  currentlyRenderingBoundaryHasStylesToHoist = !1;
+  destinationHasCapacity = !0;
+  hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+  hoistableState.stylesheets.forEach(hasStylesToHoist);
+  currentlyRenderingBoundaryHasStylesToHoist &&
+    (renderState.stylesToHoist = !0);
+  return destinationHasCapacity;
+}
+function flushResource(resource) {
+  for (var i = 0; i < resource.length; i++) this.push(resource[i]);
+  resource.length = 0;
+}
+var stylesheetFlushingQueue = [];
+function flushStyleInPreamble(stylesheet) {
+  pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+  for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+    this.push(stylesheetFlushingQueue[i]);
+  stylesheetFlushingQueue.length = 0;
+  stylesheet.state = 2;
+}
+function flushStylesInPreamble(styleQueue) {
+  var hasStylesheets = 0 < styleQueue.sheets.size;
+  styleQueue.sheets.forEach(flushStyleInPreamble, this);
+  styleQueue.sheets.clear();
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs;
+  if (!hasStylesheets || hrefs.length) {
+    this.push('<style data-precedence="');
+    this.push(styleQueue.precedence);
+    styleQueue = 0;
+    if (hrefs.length) {
+      for (
+        this.push('" data-href="');
+        styleQueue < hrefs.length - 1;
+        styleQueue++
+      )
+        this.push(hrefs[styleQueue]), this.push(" ");
+      this.push(hrefs[styleQueue]);
+    }
+    this.push('">');
+    for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+      this.push(rules[styleQueue]);
+    this.push("</style>");
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function preloadLateStyle(stylesheet) {
+  if (0 === stylesheet.state) {
+    stylesheet.state = 1;
+    var props = stylesheet.props;
+    pushLinkImpl(stylesheetFlushingQueue, {
+      rel: "preload",
+      as: "style",
+      href: stylesheet.props.href,
+      crossOrigin: props.crossOrigin,
+      fetchPriority: props.fetchPriority,
+      integrity: props.integrity,
+      media: props.media,
+      hrefLang: props.hrefLang,
+      referrerPolicy: props.referrerPolicy
+    });
+    for (
+      stylesheet = 0;
+      stylesheet < stylesheetFlushingQueue.length;
+      stylesheet++
+    )
+      this.push(stylesheetFlushingQueue[stylesheet]);
+    stylesheetFlushingQueue.length = 0;
+  }
+}
+function preloadLateStyles(styleQueue) {
+  styleQueue.sheets.forEach(preloadLateStyle, this);
+  styleQueue.sheets.clear();
+}
+function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+  destination.push("[");
+  var nextArrayOpenBrackChunk = "[";
+  hoistableState.stylesheets.forEach(function (resource) {
+    if (2 !== resource.state)
+      if (3 === resource.state)
+        destination.push(nextArrayOpenBrackChunk),
+          (resource = escapeJSObjectForInstructionScripts(
+            "" + resource.props.href
+          )),
+          destination.push(resource),
+          destination.push("]"),
+          (nextArrayOpenBrackChunk = ",[");
+      else {
+        destination.push(nextArrayOpenBrackChunk);
+        var precedence = resource.props["data-precedence"],
+          props = resource.props,
+          coercedHref = sanitizeURL("" + resource.props.href);
+        coercedHref = escapeJSObjectForInstructionScripts(coercedHref);
+        destination.push(coercedHref);
+        precedence = "" + precedence;
+        destination.push(",");
+        precedence = escapeJSObjectForInstructionScripts(precedence);
+        destination.push(precedence);
+        for (var propKey in props)
+          if (
+            hasOwnProperty.call(props, propKey) &&
+            ((precedence = props[propKey]), null != precedence)
+          )
+            switch (propKey) {
+              case "href":
+              case "rel":
+              case "precedence":
+              case "data-precedence":
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                writeStyleResourceAttributeInJS(
+                  destination,
+                  propKey,
+                  precedence
+                );
+            }
+        destination.push("]");
+        nextArrayOpenBrackChunk = ",[";
+        resource.state = 3;
+      }
+  });
+  destination.push("]");
+}
+function writeStyleResourceAttributeInJS(destination, name, value) {
+  var attributeName = name.toLowerCase();
+  switch (typeof value) {
+    case "function":
+    case "symbol":
+      return;
+  }
+  switch (name) {
+    case "innerHTML":
+    case "dangerouslySetInnerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "style":
+    case "ref":
+      return;
+    case "className":
+      attributeName = "class";
+      name = "" + value;
+      break;
+    case "hidden":
+      if (!1 === value) return;
+      name = "";
+      break;
+    case "src":
+    case "href":
+      value = sanitizeURL(value);
+      name = "" + value;
+      break;
+    default:
+      if (
+        (2 < name.length &&
+          ("o" === name[0] || "O" === name[0]) &&
+          ("n" === name[1] || "N" === name[1])) ||
+        !isAttributeNameSafe(name)
+      )
+        return;
+      name = "" + value;
+  }
+  destination.push(",");
+  attributeName = escapeJSObjectForInstructionScripts(attributeName);
+  destination.push(attributeName);
+  destination.push(",");
+  attributeName = escapeJSObjectForInstructionScripts(name);
+  destination.push(attributeName);
+}
+function createHoistableState() {
+  return { styles: new Set(), stylesheets: new Set() };
+}
+function prefetchDNS(href) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      if (!resumableState.dnsResources.hasOwnProperty(href)) {
+        resumableState.dnsResources[href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        )
+          JSCompiler_temp =
+            ((header =
+              "<" +
+              ("" + href).replace(
+                regexForHrefInLinkHeaderURLContext,
+                escapeHrefForLinkHeaderURLContextReplacer
+              ) +
+              ">; rel=dns-prefetch"),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        JSCompiler_temp
+          ? ((renderState.resets.dns[href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((header = []),
+            pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+            renderState.preconnects.add(header));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.D(href);
+}
+function preconnect(href, crossOrigin) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      var bucket =
+        "use-credentials" === crossOrigin
+          ? "credentials"
+          : "string" === typeof crossOrigin
+            ? "anonymous"
+            : "default";
+      if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+        resumableState.connectResources[bucket][href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        ) {
+          JSCompiler_temp =
+            "<" +
+            ("" + href).replace(
+              regexForHrefInLinkHeaderURLContext,
+              escapeHrefForLinkHeaderURLContextReplacer
+            ) +
+            ">; rel=preconnect";
+          if ("string" === typeof crossOrigin) {
+            var escapedCrossOrigin = ("" + crossOrigin).replace(
+              regexForLinkHeaderQuotedParamValueContext,
+              escapeStringForLinkHeaderQuotedParamValueContextReplacer
+            );
+            JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"';
+          }
+          JSCompiler_temp =
+            ((header = JSCompiler_temp),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        }
+        JSCompiler_temp
+          ? ((renderState.resets.connect[bucket][href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((bucket = []),
+            pushLinkImpl(bucket, {
+              rel: "preconnect",
+              href: href,
+              crossOrigin: crossOrigin
+            }),
+            renderState.preconnects.add(bucket));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.C(href, crossOrigin);
+}
+function preload(href, as, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (as && href) {
+      switch (as) {
+        case "image":
+          if (options) {
+            var imageSrcSet = options.imageSrcSet;
+            var imageSizes = options.imageSizes;
+            var fetchPriority = options.fetchPriority;
+          }
+          var key = imageSrcSet
+            ? imageSrcSet + "\n" + (imageSizes || "")
+            : href;
+          if (resumableState.imageResources.hasOwnProperty(key)) return;
+          resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+          resumableState = renderState.headers;
+          var header;
+          resumableState &&
+          0 < resumableState.remainingCapacity &&
+          "string" !== typeof imageSrcSet &&
+          "high" === fetchPriority &&
+          ((header = getPreloadAsHeader(href, as, options)),
+          0 <= (resumableState.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+              resumableState.highImagePreloads &&
+                (resumableState.highImagePreloads += ", "),
+              (resumableState.highImagePreloads += header))
+            : ((resumableState = []),
+              pushLinkImpl(
+                resumableState,
+                assign(
+                  { rel: "preload", href: imageSrcSet ? void 0 : href, as: as },
+                  options
+                )
+              ),
+              "high" === fetchPriority
+                ? renderState.highImagePreloads.add(resumableState)
+                : (renderState.bulkPreloads.add(resumableState),
+                  renderState.preloads.images.set(key, resumableState)));
+          break;
+        case "style":
+          if (resumableState.styleResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.styleResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.stylesheets.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          break;
+        case "script":
+          if (resumableState.scriptResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          renderState.preloads.scripts.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.scriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          break;
+        default:
+          if (resumableState.unknownResources.hasOwnProperty(as)) {
+            if (
+              ((imageSrcSet = resumableState.unknownResources[as]),
+              imageSrcSet.hasOwnProperty(href))
+            )
+              return;
+          } else
+            (imageSrcSet = {}),
+              (resumableState.unknownResources[as] = imageSrcSet);
+          imageSrcSet[href] = PRELOAD_NO_CREDS;
+          if (
+            (resumableState = renderState.headers) &&
+            0 < resumableState.remainingCapacity &&
+            "font" === as &&
+            ((key = getPreloadAsHeader(href, as, options)),
+            0 <= (resumableState.remainingCapacity -= key.length + 2))
+          )
+            (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+              resumableState.fontPreloads &&
+                (resumableState.fontPreloads += ", "),
+              (resumableState.fontPreloads += key);
+          else
+            switch (
+              ((resumableState = []),
+              (href = assign({ rel: "preload", href: href, as: as }, options)),
+              pushLinkImpl(resumableState, href),
+              as)
+            ) {
+              case "font":
+                renderState.fontPreloads.add(resumableState);
+                break;
+              default:
+                renderState.bulkPreloads.add(resumableState);
+            }
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.L(href, as, options);
+}
+function preloadModule(href, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      var as =
+        options && "string" === typeof options.as ? options.as : "script";
+      switch (as) {
+        case "script":
+          if (resumableState.moduleScriptResources.hasOwnProperty(href)) return;
+          as = [];
+          resumableState.moduleScriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.moduleScripts.set(href, as);
+          break;
+        default:
+          if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+            var resources = resumableState.unknownResources[as];
+            if (resources.hasOwnProperty(href)) return;
+          } else
+            (resources = {}),
+              (resumableState.moduleUnknownResources[as] = resources);
+          as = [];
+          resources[href] = PRELOAD_NO_CREDS;
+      }
+      pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options));
+      renderState.bulkPreloads.add(as);
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.m(href, options);
+}
+function preinitStyle(href, precedence, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      precedence = precedence || "default";
+      var styleQueue = renderState.styles.get(precedence),
+        resourceState = resumableState.styleResources.hasOwnProperty(href)
+          ? resumableState.styleResources[href]
+          : void 0;
+      null !== resourceState &&
+        ((resumableState.styleResources[href] = null),
+        styleQueue ||
+          ((styleQueue = {
+            precedence: escapeTextForBrowser(precedence),
+            rules: [],
+            hrefs: [],
+            sheets: new Map()
+          }),
+          renderState.styles.set(precedence, styleQueue)),
+        (precedence = {
+          state: 0,
+          props: assign(
+            { rel: "stylesheet", href: href, "data-precedence": precedence },
+            options
+          )
+        }),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(precedence.props, resourceState),
+          (renderState = renderState.preloads.stylesheets.get(href)) &&
+          0 < renderState.length
+            ? (renderState.length = 0)
+            : (precedence.state = 1)),
+        styleQueue.sheets.set(href, precedence),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.S(href, precedence, options);
+}
+function preinitScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.scriptResources.hasOwnProperty(src)
+        ? resumableState.scriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.scriptResources[src] = null),
+        (options = assign({ src: src, async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.scripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.X(src, options);
+}
+function preinitModuleScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.moduleScriptResources.hasOwnProperty(
+        src
+      )
+        ? resumableState.moduleScriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.moduleScriptResources[src] = null),
+        (options = assign({ src: src, type: "module", async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.moduleScripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.M(src, options);
+}
+function adoptPreloadCredentials(target, preloadState) {
+  null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+  null == target.integrity && (target.integrity = preloadState[1]);
+}
+function getPreloadAsHeader(href, as, params) {
+  href = ("" + href).replace(
+    regexForHrefInLinkHeaderURLContext,
+    escapeHrefForLinkHeaderURLContextReplacer
+  );
+  as = ("" + as).replace(
+    regexForLinkHeaderQuotedParamValueContext,
+    escapeStringForLinkHeaderQuotedParamValueContextReplacer
+  );
+  as = "<" + href + '>; rel=preload; as="' + as + '"';
+  for (var paramName in params)
+    hasOwnProperty.call(params, paramName) &&
+      ((href = params[paramName]),
+      "string" === typeof href &&
+        (as +=
+          "; " +
+          paramName.toLowerCase() +
+          '="' +
+          ("" + href).replace(
+            regexForLinkHeaderQuotedParamValueContext,
+            escapeStringForLinkHeaderQuotedParamValueContextReplacer
+          ) +
+          '"'));
+  return as;
+}
+var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g;
+function escapeHrefForLinkHeaderURLContextReplacer(match) {
+  switch (match) {
+    case "<":
+      return "%3C";
+    case ">":
+      return "%3E";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g;
+function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+  switch (match) {
+    case '"':
+      return "%22";
+    case "'":
+      return "%27";
+    case ";":
+      return "%3B";
+    case ",":
+      return "%2C";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+function hoistStyleQueueDependency(styleQueue) {
+  this.styles.add(styleQueue);
+}
+function hoistStylesheetDependency(stylesheet) {
+  this.stylesheets.add(stylesheet);
+}
+function createRenderState(resumableState, generateStaticMarkup) {
+  var idPrefix = resumableState.idPrefix,
+    bootstrapChunks = [],
+    bootstrapScriptContent = resumableState.bootstrapScriptContent,
+    bootstrapScripts = resumableState.bootstrapScripts,
+    bootstrapModules = resumableState.bootstrapModules;
+  void 0 !== bootstrapScriptContent &&
+    bootstrapChunks.push(
+      "<script>",
+      ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer),
+      "\x3c/script>"
+    );
+  bootstrapScriptContent = idPrefix + "P:";
+  var JSCompiler_object_inline_segmentPrefix_1542 = idPrefix + "S:";
+  idPrefix += "B:";
+  var JSCompiler_object_inline_preamble_1545 = createPreambleState(),
+    JSCompiler_object_inline_preconnects_1555 = new Set(),
+    JSCompiler_object_inline_fontPreloads_1556 = new Set(),
+    JSCompiler_object_inline_highImagePreloads_1557 = new Set(),
+    JSCompiler_object_inline_styles_1558 = new Map(),
+    JSCompiler_object_inline_bootstrapScripts_1559 = new Set(),
+    JSCompiler_object_inline_scripts_1560 = new Set(),
+    JSCompiler_object_inline_bulkPreloads_1561 = new Set(),
+    JSCompiler_object_inline_preloads_1562 = {
+      images: new Map(),
+      stylesheets: new Map(),
+      scripts: new Map(),
+      moduleScripts: new Map()
+    };
+  if (void 0 !== bootstrapScripts)
+    for (var i = 0; i < bootstrapScripts.length; i++) {
+      var scriptConfig = bootstrapScripts[i],
+        src,
+        crossOrigin = void 0,
+        integrity = void 0,
+        props = {
+          rel: "preload",
+          as: "script",
+          fetchPriority: "low",
+          nonce: void 0
+        };
+      "string" === typeof scriptConfig
+        ? (props.href = src = scriptConfig)
+        : ((props.href = src = scriptConfig.src),
+          (props.integrity = integrity =
+            "string" === typeof scriptConfig.integrity
+              ? scriptConfig.integrity
+              : void 0),
+          (props.crossOrigin = crossOrigin =
+            "string" === typeof scriptConfig || null == scriptConfig.crossOrigin
+              ? void 0
+              : "use-credentials" === scriptConfig.crossOrigin
+                ? "use-credentials"
+                : ""));
+      scriptConfig = resumableState;
+      var href = src;
+      scriptConfig.scriptResources[href] = null;
+      scriptConfig.moduleScriptResources[href] = null;
+      scriptConfig = [];
+      pushLinkImpl(scriptConfig, props);
+      JSCompiler_object_inline_bootstrapScripts_1559.add(scriptConfig);
+      bootstrapChunks.push('<script src="', escapeTextForBrowser(src));
+      "string" === typeof integrity &&
+        bootstrapChunks.push('" integrity="', escapeTextForBrowser(integrity));
+      "string" === typeof crossOrigin &&
+        bootstrapChunks.push(
+          '" crossorigin="',
+          escapeTextForBrowser(crossOrigin)
+        );
+      bootstrapChunks.push('" async="">\x3c/script>');
+    }
+  if (void 0 !== bootstrapModules)
+    for (
+      bootstrapScripts = 0;
+      bootstrapScripts < bootstrapModules.length;
+      bootstrapScripts++
+    )
+      (props = bootstrapModules[bootstrapScripts]),
+        (crossOrigin = src = void 0),
+        (integrity = {
+          rel: "modulepreload",
+          fetchPriority: "low",
+          nonce: void 0
+        }),
+        "string" === typeof props
+          ? (integrity.href = i = props)
+          : ((integrity.href = i = props.src),
+            (integrity.integrity = crossOrigin =
+              "string" === typeof props.integrity ? props.integrity : void 0),
+            (integrity.crossOrigin = src =
+              "string" === typeof props || null == props.crossOrigin
+                ? void 0
+                : "use-credentials" === props.crossOrigin
+                  ? "use-credentials"
+                  : "")),
+        (props = resumableState),
+        (scriptConfig = i),
+        (props.scriptResources[scriptConfig] = null),
+        (props.moduleScriptResources[scriptConfig] = null),
+        (props = []),
+        pushLinkImpl(props, integrity),
+        JSCompiler_object_inline_bootstrapScripts_1559.add(props),
+        bootstrapChunks.push(
+          '<script type="module" src="',
+          escapeTextForBrowser(i)
+        ),
+        "string" === typeof crossOrigin &&
+          bootstrapChunks.push(
+            '" integrity="',
+            escapeTextForBrowser(crossOrigin)
+          ),
+        "string" === typeof src &&
+          bootstrapChunks.push('" crossorigin="', escapeTextForBrowser(src)),
+        bootstrapChunks.push('" async="">\x3c/script>');
+  return {
+    placeholderPrefix: bootstrapScriptContent,
+    segmentPrefix: JSCompiler_object_inline_segmentPrefix_1542,
+    boundaryPrefix: idPrefix,
+    startInlineScript: "<script>",
+    preamble: JSCompiler_object_inline_preamble_1545,
+    externalRuntimeScript: null,
+    bootstrapChunks: bootstrapChunks,
+    importMapChunks: [],
+    onHeaders: void 0,
+    headers: null,
+    resets: {
+      font: {},
+      dns: {},
+      connect: { default: {}, anonymous: {}, credentials: {} },
+      image: {},
+      style: {}
+    },
+    charsetChunks: [],
+    viewportChunks: [],
+    hoistableChunks: [],
+    preconnects: JSCompiler_object_inline_preconnects_1555,
+    fontPreloads: JSCompiler_object_inline_fontPreloads_1556,
+    highImagePreloads: JSCompiler_object_inline_highImagePreloads_1557,
+    styles: JSCompiler_object_inline_styles_1558,
+    bootstrapScripts: JSCompiler_object_inline_bootstrapScripts_1559,
+    scripts: JSCompiler_object_inline_scripts_1560,
+    bulkPreloads: JSCompiler_object_inline_bulkPreloads_1561,
+    preloads: JSCompiler_object_inline_preloads_1562,
+    stylesToHoist: !1,
+    generateStaticMarkup: generateStaticMarkup
+  };
+}
+function pushTextInstance(target, text, renderState, textEmbedded) {
+  if (renderState.generateStaticMarkup)
+    return target.push(escapeTextForBrowser(text)), !1;
+  "" === text
+    ? (target = textEmbedded)
+    : (textEmbedded && target.push("\x3c!-- --\x3e"),
+      target.push(escapeTextForBrowser(text)),
+      (target = !0));
+  return target;
+}
+function pushSegmentFinale(target, renderState, lastPushedText, textEmbedded) {
+  renderState.generateStaticMarkup ||
+    (lastPushedText && textEmbedded && target.push("\x3c!-- --\x3e"));
+}
+var bind = Function.prototype.bind,
+  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function getComponentNameFromType(type) {
+  if (null == type) return null;
+  if ("function" === typeof type)
+    return type.$$typeof === REACT_CLIENT_REFERENCE
+      ? null
+      : type.displayName || type.name || null;
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_FRAGMENT_TYPE:
+      return "Fragment";
+    case REACT_PROFILER_TYPE:
+      return "Profiler";
+    case REACT_STRICT_MODE_TYPE:
+      return "StrictMode";
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+    case REACT_ACTIVITY_TYPE:
+      return "Activity";
+  }
+  if ("object" === typeof type)
+    switch (type.$$typeof) {
+      case REACT_PORTAL_TYPE:
+        return "Portal";
+      case REACT_CONTEXT_TYPE:
+        return (type.displayName || "Context") + ".Provider";
+      case REACT_CONSUMER_TYPE:
+        return (type._context.displayName || "Context") + ".Consumer";
+      case REACT_FORWARD_REF_TYPE:
+        var innerType = type.render;
+        type = type.displayName;
+        type ||
+          ((type = innerType.displayName || innerType.name || ""),
+          (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+        return type;
+      case REACT_MEMO_TYPE:
+        return (
+          (innerType = type.displayName || null),
+          null !== innerType
+            ? innerType
+            : getComponentNameFromType(type.type) || "Memo"
+        );
+      case REACT_LAZY_TYPE:
+        innerType = type._payload;
+        type = type._init;
+        try {
+          return getComponentNameFromType(type(innerType));
+        } catch (x) {}
+    }
+  return null;
+}
+var emptyContextObject = {},
+  currentActiveSnapshot = null;
+function popToNearestCommonAncestor(prev, next) {
+  if (prev !== next) {
+    prev.context._currentValue2 = prev.parentValue;
+    prev = prev.parent;
+    var parentNext = next.parent;
+    if (null === prev) {
+      if (null !== parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+    } else {
+      if (null === parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+      popToNearestCommonAncestor(prev, parentNext);
+    }
+    next.context._currentValue2 = next.value;
+  }
+}
+function popAllPrevious(prev) {
+  prev.context._currentValue2 = prev.parentValue;
+  prev = prev.parent;
+  null !== prev && popAllPrevious(prev);
+}
+function pushAllNext(next) {
+  var parentNext = next.parent;
+  null !== parentNext && pushAllNext(parentNext);
+  next.context._currentValue2 = next.value;
+}
+function popPreviousToCommonLevel(prev, next) {
+  prev.context._currentValue2 = prev.parentValue;
+  prev = prev.parent;
+  if (null === prev)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === next.depth
+    ? popToNearestCommonAncestor(prev, next)
+    : popPreviousToCommonLevel(prev, next);
+}
+function popNextToCommonLevel(prev, next) {
+  var parentNext = next.parent;
+  if (null === parentNext)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === parentNext.depth
+    ? popToNearestCommonAncestor(prev, parentNext)
+    : popNextToCommonLevel(prev, parentNext);
+  next.context._currentValue2 = next.value;
+}
+function switchContext(newSnapshot) {
+  var prev = currentActiveSnapshot;
+  prev !== newSnapshot &&
+    (null === prev
+      ? pushAllNext(newSnapshot)
+      : null === newSnapshot
+        ? popAllPrevious(prev)
+        : prev.depth === newSnapshot.depth
+          ? popToNearestCommonAncestor(prev, newSnapshot)
+          : prev.depth > newSnapshot.depth
+            ? popPreviousToCommonLevel(prev, newSnapshot)
+            : popNextToCommonLevel(prev, newSnapshot),
+    (currentActiveSnapshot = newSnapshot));
+}
+var classComponentUpdater = {
+    enqueueSetState: function (inst, payload) {
+      inst = inst._reactInternals;
+      null !== inst.queue && inst.queue.push(payload);
+    },
+    enqueueReplaceState: function (inst, payload) {
+      inst = inst._reactInternals;
+      inst.replace = !0;
+      inst.queue = [payload];
+    },
+    enqueueForceUpdate: function () {}
+  },
+  emptyTreeContext = { id: 1, overflow: "" };
+function pushTreeContext(baseContext, totalChildren, index) {
+  var baseIdWithLeadingBit = baseContext.id;
+  baseContext = baseContext.overflow;
+  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+  baseIdWithLeadingBit &= ~(1 << baseLength);
+  index += 1;
+  var length = 32 - clz32(totalChildren) + baseLength;
+  if (30 < length) {
+    var numberOfOverflowBits = baseLength - (baseLength % 5);
+    length = (
+      baseIdWithLeadingBit &
+      ((1 << numberOfOverflowBits) - 1)
+    ).toString(32);
+    baseIdWithLeadingBit >>= numberOfOverflowBits;
+    baseLength -= numberOfOverflowBits;
+    return {
+      id:
+        (1 << (32 - clz32(totalChildren) + baseLength)) |
+        (index << baseLength) |
+        baseIdWithLeadingBit,
+      overflow: length + baseContext
+    };
+  }
+  return {
+    id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+    overflow: baseContext
+  };
+}
+var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+  log = Math.log,
+  LN2 = Math.LN2;
+function clz32Fallback(x) {
+  x >>>= 0;
+  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+}
+var SuspenseException = Error(
+  "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+);
+function noop$2() {}
+function trackUsedThenable(thenableState, thenable, index) {
+  index = thenableState[index];
+  void 0 === index
+    ? thenableState.push(thenable)
+    : index !== thenable && (thenable.then(noop$2, noop$2), (thenable = index));
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw thenable.reason;
+    default:
+      "string" === typeof thenable.status
+        ? thenable.then(noop$2, noop$2)
+        : ((thenableState = thenable),
+          (thenableState.status = "pending"),
+          thenableState.then(
+            function (fulfilledValue) {
+              if ("pending" === thenable.status) {
+                var fulfilledThenable = thenable;
+                fulfilledThenable.status = "fulfilled";
+                fulfilledThenable.value = fulfilledValue;
+              }
+            },
+            function (error) {
+              if ("pending" === thenable.status) {
+                var rejectedThenable = thenable;
+                rejectedThenable.status = "rejected";
+                rejectedThenable.reason = error;
+              }
+            }
+          ));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+      }
+      suspendedThenable = thenable;
+      throw SuspenseException;
+  }
+}
+var suspendedThenable = null;
+function getSuspendedThenable() {
+  if (null === suspendedThenable)
+    throw Error(
+      "Expected a suspended thenable. This is a bug in React. Please file an issue."
+    );
+  var thenable = suspendedThenable;
+  suspendedThenable = null;
+  return thenable;
+}
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  currentlyRenderingComponent = null,
+  currentlyRenderingTask = null,
+  currentlyRenderingRequest = null,
+  currentlyRenderingKeyPath = null,
+  firstWorkInProgressHook = null,
+  workInProgressHook = null,
+  isReRender = !1,
+  didScheduleRenderPhaseUpdate = !1,
+  localIdCounter = 0,
+  actionStateCounter = 0,
+  actionStateMatchingIndex = -1,
+  thenableIndexCounter = 0,
+  thenableState = null,
+  renderPhaseUpdates = null,
+  numberOfReRenders = 0;
+function resolveCurrentlyRenderingComponent() {
+  if (null === currentlyRenderingComponent)
+    throw Error(
+      "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+    );
+  return currentlyRenderingComponent;
+}
+function createHook() {
+  if (0 < numberOfReRenders)
+    throw Error("Rendered more hooks than during the previous render");
+  return { memoizedState: null, queue: null, next: null };
+}
+function createWorkInProgressHook() {
+  null === workInProgressHook
+    ? null === firstWorkInProgressHook
+      ? ((isReRender = !1),
+        (firstWorkInProgressHook = workInProgressHook = createHook()))
+      : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+    : null === workInProgressHook.next
+      ? ((isReRender = !1),
+        (workInProgressHook = workInProgressHook.next = createHook()))
+      : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+  return workInProgressHook;
+}
+function getThenableStateAfterSuspending() {
+  var state = thenableState;
+  thenableState = null;
+  return state;
+}
+function resetHooksState() {
+  currentlyRenderingKeyPath =
+    currentlyRenderingRequest =
+    currentlyRenderingTask =
+    currentlyRenderingComponent =
+      null;
+  didScheduleRenderPhaseUpdate = !1;
+  firstWorkInProgressHook = null;
+  numberOfReRenders = 0;
+  workInProgressHook = renderPhaseUpdates = null;
+}
+function basicStateReducer(state, action) {
+  return "function" === typeof action ? action(state) : action;
+}
+function useReducer(reducer, initialArg, init) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  if (isReRender) {
+    var queue = workInProgressHook.queue;
+    initialArg = queue.dispatch;
+    if (
+      null !== renderPhaseUpdates &&
+      ((init = renderPhaseUpdates.get(queue)), void 0 !== init)
+    ) {
+      renderPhaseUpdates.delete(queue);
+      queue = workInProgressHook.memoizedState;
+      do (queue = reducer(queue, init.action)), (init = init.next);
+      while (null !== init);
+      workInProgressHook.memoizedState = queue;
+      return [queue, initialArg];
+    }
+    return [workInProgressHook.memoizedState, initialArg];
+  }
+  reducer =
+    reducer === basicStateReducer
+      ? "function" === typeof initialArg
+        ? initialArg()
+        : initialArg
+      : void 0 !== init
+        ? init(initialArg)
+        : initialArg;
+  workInProgressHook.memoizedState = reducer;
+  reducer = workInProgressHook.queue = { last: null, dispatch: null };
+  reducer = reducer.dispatch = dispatchAction.bind(
+    null,
+    currentlyRenderingComponent,
+    reducer
+  );
+  return [workInProgressHook.memoizedState, reducer];
+}
+function useMemo(nextCreate, deps) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  if (null !== workInProgressHook) {
+    var prevState = workInProgressHook.memoizedState;
+    if (null !== prevState && null !== deps) {
+      var prevDeps = prevState[1];
+      a: if (null === prevDeps) prevDeps = !1;
+      else {
+        for (var i = 0; i < prevDeps.length && i < deps.length; i++)
+          if (!objectIs(deps[i], prevDeps[i])) {
+            prevDeps = !1;
+            break a;
+          }
+        prevDeps = !0;
+      }
+      if (prevDeps) return prevState[0];
+    }
+  }
+  nextCreate = nextCreate();
+  workInProgressHook.memoizedState = [nextCreate, deps];
+  return nextCreate;
+}
+function dispatchAction(componentIdentity, queue, action) {
+  if (25 <= numberOfReRenders)
+    throw Error(
+      "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+    );
+  if (componentIdentity === currentlyRenderingComponent)
+    if (
+      ((didScheduleRenderPhaseUpdate = !0),
+      (componentIdentity = { action: action, next: null }),
+      null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+      (action = renderPhaseUpdates.get(queue)),
+      void 0 === action)
+    )
+      renderPhaseUpdates.set(queue, componentIdentity);
+    else {
+      for (queue = action; null !== queue.next; ) queue = queue.next;
+      queue.next = componentIdentity;
+    }
+}
+function unsupportedStartTransition() {
+  throw Error("startTransition cannot be called during server rendering.");
+}
+function unsupportedSetOptimisticState() {
+  throw Error("Cannot update optimistic state while rendering.");
+}
+function useActionState(action, initialState, permalink) {
+  resolveCurrentlyRenderingComponent();
+  var actionStateHookIndex = actionStateCounter++,
+    request = currentlyRenderingRequest;
+  if ("function" === typeof action.$$FORM_ACTION) {
+    var nextPostbackStateKey = null,
+      componentKeyPath = currentlyRenderingKeyPath;
+    request = request.formState;
+    var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+    if (null !== request && "function" === typeof isSignatureEqual) {
+      var postbackKey = request[1];
+      isSignatureEqual.call(action, request[2], request[3]) &&
+        ((nextPostbackStateKey =
+          void 0 !== permalink
+            ? "p" + permalink
+            : "k" +
+              murmurhash3_32_gc(
+                JSON.stringify([componentKeyPath, null, actionStateHookIndex]),
+                0
+              )),
+        postbackKey === nextPostbackStateKey &&
+          ((actionStateMatchingIndex = actionStateHookIndex),
+          (initialState = request[0])));
+    }
+    var boundAction = action.bind(null, initialState);
+    action = function (payload) {
+      boundAction(payload);
+    };
+    "function" === typeof boundAction.$$FORM_ACTION &&
+      (action.$$FORM_ACTION = function (prefix) {
+        prefix = boundAction.$$FORM_ACTION(prefix);
+        void 0 !== permalink &&
+          ((permalink += ""), (prefix.action = permalink));
+        var formData = prefix.data;
+        formData &&
+          (null === nextPostbackStateKey &&
+            (nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  murmurhash3_32_gc(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ]),
+                    0
+                  )),
+          formData.append("$ACTION_KEY", nextPostbackStateKey));
+        return prefix;
+      });
+    return [initialState, action, !1];
+  }
+  var boundAction$22 = action.bind(null, initialState);
+  return [
+    initialState,
+    function (payload) {
+      boundAction$22(payload);
+    },
+    !1
+  ];
+}
+function unwrapThenable(thenable) {
+  var index = thenableIndexCounter;
+  thenableIndexCounter += 1;
+  null === thenableState && (thenableState = []);
+  return trackUsedThenable(thenableState, thenable, index);
+}
+function unsupportedRefresh() {
+  throw Error("Cache cannot be refreshed during server rendering.");
+}
+function noop$1() {}
+var HooksDispatcher = {
+    readContext: function (context) {
+      return context._currentValue2;
+    },
+    use: function (usable) {
+      if (null !== usable && "object" === typeof usable) {
+        if ("function" === typeof usable.then) return unwrapThenable(usable);
+        if (usable.$$typeof === REACT_CONTEXT_TYPE)
+          return usable._currentValue2;
+      }
+      throw Error("An unsupported type was passed to use(): " + String(usable));
+    },
+    useContext: function (context) {
+      resolveCurrentlyRenderingComponent();
+      return context._currentValue2;
+    },
+    useMemo: useMemo,
+    useReducer: useReducer,
+    useRef: function (initialValue) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      var previousRef = workInProgressHook.memoizedState;
+      return null === previousRef
+        ? ((initialValue = { current: initialValue }),
+          (workInProgressHook.memoizedState = initialValue))
+        : previousRef;
+    },
+    useState: function (initialState) {
+      return useReducer(basicStateReducer, initialState);
+    },
+    useInsertionEffect: noop$1,
+    useLayoutEffect: noop$1,
+    useCallback: function (callback, deps) {
+      return useMemo(function () {
+        return callback;
+      }, deps);
+    },
+    useImperativeHandle: noop$1,
+    useEffect: noop$1,
+    useDebugValue: noop$1,
+    useDeferredValue: function (value, initialValue) {
+      resolveCurrentlyRenderingComponent();
+      return void 0 !== initialValue ? initialValue : value;
+    },
+    useTransition: function () {
+      resolveCurrentlyRenderingComponent();
+      return [!1, unsupportedStartTransition];
+    },
+    useId: function () {
+      var JSCompiler_inline_result = currentlyRenderingTask.treeContext;
+      var overflow = JSCompiler_inline_result.overflow;
+      JSCompiler_inline_result = JSCompiler_inline_result.id;
+      JSCompiler_inline_result =
+        (
+          JSCompiler_inline_result &
+          ~(1 << (32 - clz32(JSCompiler_inline_result) - 1))
+        ).toString(32) + overflow;
+      var resumableState = currentResumableState;
+      if (null === resumableState)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component."
+        );
+      overflow = localIdCounter++;
+      JSCompiler_inline_result =
+        "\u00ab" + resumableState.idPrefix + "R" + JSCompiler_inline_result;
+      0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32));
+      return JSCompiler_inline_result + "\u00bb";
+    },
+    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
+      if (void 0 === getServerSnapshot)
+        throw Error(
+          "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+        );
+      return getServerSnapshot();
+    },
+    useOptimistic: function (passthrough) {
+      resolveCurrentlyRenderingComponent();
+      return [passthrough, unsupportedSetOptimisticState];
+    },
+    useActionState: useActionState,
+    useFormState: useActionState,
+    useHostTransitionStatus: function () {
+      resolveCurrentlyRenderingComponent();
+      return sharedNotPendingObject;
+    },
+    useMemoCache: function (size) {
+      for (var data = Array(size), i = 0; i < size; i++)
+        data[i] = REACT_MEMO_CACHE_SENTINEL;
+      return data;
+    },
+    useCacheRefresh: function () {
+      return unsupportedRefresh;
+    }
+  },
+  currentResumableState = null,
+  DefaultAsyncDispatcher = {
+    getCacheForType: function () {
+      throw Error("Not implemented.");
+    }
+  },
+  prefix,
+  suffix;
+function describeBuiltInComponentFrame(name) {
+  if (void 0 === prefix)
+    try {
+      throw Error();
+    } catch (x) {
+      var match = x.stack.trim().match(/\n( *(at )?)/);
+      prefix = (match && match[1]) || "";
+      suffix =
+        -1 < x.stack.indexOf("\n    at")
+          ? " (<anonymous>)"
+          : -1 < x.stack.indexOf("@")
+            ? "@unknown:0:0"
+            : "";
+    }
+  return "\n" + prefix + name + suffix;
+}
+var reentry = !1;
+function describeNativeComponentFrame(fn, construct) {
+  if (!fn || reentry) return "";
+  reentry = !0;
+  var previousPrepareStackTrace = Error.prepareStackTrace;
+  Error.prepareStackTrace = void 0;
+  try {
+    var RunInRootFrame = {
+      DetermineComponentFrameRoot: function () {
+        try {
+          if (construct) {
+            var Fake = function () {
+              throw Error();
+            };
+            Object.defineProperty(Fake.prototype, "props", {
+              set: function () {
+                throw Error();
+              }
+            });
+            if ("object" === typeof Reflect && Reflect.construct) {
+              try {
+                Reflect.construct(Fake, []);
+              } catch (x) {
+                var control = x;
+              }
+              Reflect.construct(fn, [], Fake);
+            } else {
+              try {
+                Fake.call();
+              } catch (x$24) {
+                control = x$24;
+              }
+              fn.call(Fake.prototype);
+            }
+          } else {
+            try {
+              throw Error();
+            } catch (x$25) {
+              control = x$25;
+            }
+            (Fake = fn()) &&
+              "function" === typeof Fake.catch &&
+              Fake.catch(function () {});
+          }
+        } catch (sample) {
+          if (sample && control && "string" === typeof sample.stack)
+            return [sample.stack, control.stack];
+        }
+        return [null, null];
+      }
+    };
+    RunInRootFrame.DetermineComponentFrameRoot.displayName =
+      "DetermineComponentFrameRoot";
+    var namePropDescriptor = Object.getOwnPropertyDescriptor(
+      RunInRootFrame.DetermineComponentFrameRoot,
+      "name"
+    );
+    namePropDescriptor &&
+      namePropDescriptor.configurable &&
+      Object.defineProperty(
+        RunInRootFrame.DetermineComponentFrameRoot,
+        "name",
+        { value: "DetermineComponentFrameRoot" }
+      );
+    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
+      sampleStack = _RunInRootFrame$Deter[0],
+      controlStack = _RunInRootFrame$Deter[1];
+    if (sampleStack && controlStack) {
+      var sampleLines = sampleStack.split("\n"),
+        controlLines = controlStack.split("\n");
+      for (
+        namePropDescriptor = RunInRootFrame = 0;
+        RunInRootFrame < sampleLines.length &&
+        !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot");
+
+      )
+        RunInRootFrame++;
+      for (
+        ;
+        namePropDescriptor < controlLines.length &&
+        !controlLines[namePropDescriptor].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        namePropDescriptor++;
+      if (
+        RunInRootFrame === sampleLines.length ||
+        namePropDescriptor === controlLines.length
+      )
+        for (
+          RunInRootFrame = sampleLines.length - 1,
+            namePropDescriptor = controlLines.length - 1;
+          1 <= RunInRootFrame &&
+          0 <= namePropDescriptor &&
+          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];
+
+        )
+          namePropDescriptor--;
+      for (
+        ;
+        1 <= RunInRootFrame && 0 <= namePropDescriptor;
+        RunInRootFrame--, namePropDescriptor--
+      )
+        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {
+          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {
+            do
+              if (
+                (RunInRootFrame--,
+                namePropDescriptor--,
+                0 > namePropDescriptor ||
+                  sampleLines[RunInRootFrame] !==
+                    controlLines[namePropDescriptor])
+              ) {
+                var frame =
+                  "\n" +
+                  sampleLines[RunInRootFrame].replace(" at new ", " at ");
+                fn.displayName &&
+                  frame.includes("<anonymous>") &&
+                  (frame = frame.replace("<anonymous>", fn.displayName));
+                return frame;
+              }
+            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);
+          }
+          break;
+        }
+    }
+  } finally {
+    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);
+  }
+  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "")
+    ? describeBuiltInComponentFrame(previousPrepareStackTrace)
+    : "";
+}
+function describeComponentStackByType(type) {
+  if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+  if ("function" === typeof type)
+    return type.prototype && type.prototype.isReactComponent
+      ? describeNativeComponentFrame(type, !0)
+      : describeNativeComponentFrame(type, !1);
+  if ("object" === typeof type && null !== type) {
+    switch (type.$$typeof) {
+      case REACT_FORWARD_REF_TYPE:
+        return describeNativeComponentFrame(type.render, !1);
+      case REACT_MEMO_TYPE:
+        return describeNativeComponentFrame(type.type, !1);
+      case REACT_LAZY_TYPE:
+        var lazyComponent = type,
+          payload = lazyComponent._payload;
+        lazyComponent = lazyComponent._init;
+        try {
+          type = lazyComponent(payload);
+        } catch (x) {
+          return describeBuiltInComponentFrame("Lazy");
+        }
+        return describeComponentStackByType(type);
+    }
+    if ("string" === typeof type.name)
+      return (
+        (payload = type.env),
+        describeBuiltInComponentFrame(
+          type.name + (payload ? " [" + payload + "]" : "")
+        )
+      );
+  }
+  switch (type) {
+    case REACT_SUSPENSE_LIST_TYPE:
+      return describeBuiltInComponentFrame("SuspenseList");
+    case REACT_SUSPENSE_TYPE:
+      return describeBuiltInComponentFrame("Suspense");
+  }
+  return "";
+}
+function defaultErrorHandler(error) {
+  if (
+    "object" === typeof error &&
+    null !== error &&
+    "string" === typeof error.environmentName
+  ) {
+    var JSCompiler_inline_result = error.environmentName;
+    error = [error].slice(0);
+    "string" === typeof error[0]
+      ? error.splice(
+          0,
+          1,
+          "[%s] " + error[0],
+          " " + JSCompiler_inline_result + " "
+        )
+      : error.splice(0, 0, "[%s] ", " " + JSCompiler_inline_result + " ");
+    error.unshift(console);
+    JSCompiler_inline_result = bind.apply(console.error, error);
+    JSCompiler_inline_result();
+  } else console.error(error);
+  return null;
+}
+function noop() {}
+function RequestInstance(
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  var abortSet = new Set();
+  this.destination = null;
+  this.flushScheduled = !1;
+  this.resumableState = resumableState;
+  this.renderState = renderState;
+  this.rootFormatContext = rootFormatContext;
+  this.progressiveChunkSize =
+    void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+  this.status = 10;
+  this.fatalError = null;
+  this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+  this.completedPreambleSegments = this.completedRootSegment = null;
+  this.abortableTasks = abortSet;
+  this.pingedTasks = [];
+  this.clientRenderedBoundaries = [];
+  this.completedBoundaries = [];
+  this.partialBoundaries = [];
+  this.trackedPostpones = null;
+  this.onError = void 0 === onError ? defaultErrorHandler : onError;
+  this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+  this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+  this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+  this.onShellError = void 0 === onShellError ? noop : onShellError;
+  this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+  this.formState = void 0 === formState ? null : formState;
+}
+function createRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  resumableState = new RequestInstance(
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    formState
+  );
+  renderState = createPendingSegment(
+    resumableState,
+    0,
+    null,
+    rootFormatContext,
+    !1,
+    !1
+  );
+  renderState.parentFlushed = !0;
+  children = createRenderTask(
+    resumableState,
+    null,
+    children,
+    -1,
+    null,
+    renderState,
+    null,
+    null,
+    resumableState.abortableTasks,
+    null,
+    rootFormatContext,
+    null,
+    emptyTreeContext,
+    null,
+    !1
+  );
+  pushComponentStack(children);
+  resumableState.pingedTasks.push(children);
+  return resumableState;
+}
+var currentRequest = null;
+function pingTask(request, task) {
+  request.pingedTasks.push(task);
+  1 === request.pingedTasks.length &&
+    ((request.flushScheduled = null !== request.destination),
+    performWork(request));
+}
+function createSuspenseBoundary(
+  request,
+  fallbackAbortableTasks,
+  contentPreamble,
+  fallbackPreamble
+) {
+  return {
+    status: 0,
+    rootSegmentID: -1,
+    parentFlushed: !1,
+    pendingTasks: 0,
+    completedSegments: [],
+    byteSize: 0,
+    fallbackAbortableTasks: fallbackAbortableTasks,
+    errorDigest: null,
+    contentState: createHoistableState(),
+    fallbackState: createHoistableState(),
+    contentPreamble: contentPreamble,
+    fallbackPreamble: fallbackPreamble,
+    trackedContentKeyPath: null,
+    trackedFallbackNode: null
+  };
+}
+function createRenderTask(
+  request,
+  thenableState,
+  node,
+  childIndex,
+  blockedBoundary,
+  blockedSegment,
+  blockedPreamble,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  var task = {
+    replay: null,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: blockedSegment,
+    blockedPreamble: blockedPreamble,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createReplayTask(
+  request,
+  thenableState,
+  replay,
+  node,
+  childIndex,
+  blockedBoundary,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  replay.pendingTasks++;
+  var task = {
+    replay: replay,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: null,
+    blockedPreamble: null,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createPendingSegment(
+  request,
+  index,
+  boundary,
+  parentFormatContext,
+  lastPushedText,
+  textEmbedded
+) {
+  return {
+    status: 0,
+    parentFlushed: !1,
+    id: -1,
+    index: index,
+    chunks: [],
+    children: [],
+    preambleChildren: [],
+    parentFormatContext: parentFormatContext,
+    boundary: boundary,
+    lastPushedText: lastPushedText,
+    textEmbedded: textEmbedded
+  };
+}
+function pushComponentStack(task) {
+  var node = task.node;
+  if ("object" === typeof node && null !== node)
+    switch (node.$$typeof) {
+      case REACT_ELEMENT_TYPE:
+        task.componentStack = { parent: task.componentStack, type: node.type };
+    }
+}
+function getThrownInfo(node$jscomp$0) {
+  var errorInfo = {};
+  node$jscomp$0 &&
+    Object.defineProperty(errorInfo, "componentStack", {
+      configurable: !0,
+      enumerable: !0,
+      get: function () {
+        try {
+          var info = "",
+            node = node$jscomp$0;
+          do
+            (info += describeComponentStackByType(node.type)),
+              (node = node.parent);
+          while (node);
+          var JSCompiler_inline_result = info;
+        } catch (x) {
+          JSCompiler_inline_result =
+            "\nError generating stack: " + x.message + "\n" + x.stack;
+        }
+        Object.defineProperty(errorInfo, "componentStack", {
+          value: JSCompiler_inline_result
+        });
+        return JSCompiler_inline_result;
+      }
+    });
+  return errorInfo;
+}
+function logRecoverableError(request, error, errorInfo) {
+  request = request.onError;
+  error = request(error, errorInfo);
+  if (null == error || "string" === typeof error) return error;
+}
+function fatalError(request, error) {
+  var onShellError = request.onShellError,
+    onFatalError = request.onFatalError;
+  onShellError(error);
+  onFatalError(error);
+  null !== request.destination
+    ? ((request.status = 14), request.destination.destroy(error))
+    : ((request.status = 13), (request.fatalError = error));
+}
+function renderWithHooks(request, task, keyPath, Component, props, secondArg) {
+  var prevThenableState = task.thenableState;
+  task.thenableState = null;
+  currentlyRenderingComponent = {};
+  currentlyRenderingTask = task;
+  currentlyRenderingRequest = request;
+  currentlyRenderingKeyPath = keyPath;
+  actionStateCounter = localIdCounter = 0;
+  actionStateMatchingIndex = -1;
+  thenableIndexCounter = 0;
+  thenableState = prevThenableState;
+  for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; )
+    (didScheduleRenderPhaseUpdate = !1),
+      (actionStateCounter = localIdCounter = 0),
+      (actionStateMatchingIndex = -1),
+      (thenableIndexCounter = 0),
+      (numberOfReRenders += 1),
+      (workInProgressHook = null),
+      (request = Component(props, secondArg));
+  resetHooksState();
+  return request;
+}
+function finishFunctionComponent(
+  request,
+  task,
+  keyPath,
+  children,
+  hasId,
+  actionStateCount,
+  actionStateMatchingIndex
+) {
+  var didEmitActionStateMarkers = !1;
+  if (0 !== actionStateCount && null !== request.formState) {
+    var segment = task.blockedSegment;
+    if (null !== segment) {
+      didEmitActionStateMarkers = !0;
+      segment = segment.chunks;
+      for (var i = 0; i < actionStateCount; i++)
+        i === actionStateMatchingIndex
+          ? segment.push("\x3c!--F!--\x3e")
+          : segment.push("\x3c!--F--\x3e");
+    }
+  }
+  actionStateCount = task.keyPath;
+  task.keyPath = keyPath;
+  hasId
+    ? ((keyPath = task.treeContext),
+      (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+      renderNode(request, task, children, -1),
+      (task.treeContext = keyPath))
+    : didEmitActionStateMarkers
+      ? renderNode(request, task, children, -1)
+      : renderNodeDestructive(request, task, children, -1);
+  task.keyPath = actionStateCount;
+}
+function renderElement(request, task, keyPath, type, props, ref) {
+  if ("function" === typeof type)
+    if (type.prototype && type.prototype.isReactComponent) {
+      var newProps = props;
+      if ("ref" in props) {
+        newProps = {};
+        for (var propName in props)
+          "ref" !== propName && (newProps[propName] = props[propName]);
+      }
+      var defaultProps = type.defaultProps;
+      if (defaultProps) {
+        newProps === props && (newProps = assign({}, newProps, props));
+        for (var propName$33 in defaultProps)
+          void 0 === newProps[propName$33] &&
+            (newProps[propName$33] = defaultProps[propName$33]);
+      }
+      props = newProps;
+      newProps = emptyContextObject;
+      defaultProps = type.contextType;
+      "object" === typeof defaultProps &&
+        null !== defaultProps &&
+        (newProps = defaultProps._currentValue2);
+      newProps = new type(props, newProps);
+      var initialState = void 0 !== newProps.state ? newProps.state : null;
+      newProps.updater = classComponentUpdater;
+      newProps.props = props;
+      newProps.state = initialState;
+      defaultProps = { queue: [], replace: !1 };
+      newProps._reactInternals = defaultProps;
+      ref = type.contextType;
+      newProps.context =
+        "object" === typeof ref && null !== ref
+          ? ref._currentValue2
+          : emptyContextObject;
+      ref = type.getDerivedStateFromProps;
+      "function" === typeof ref &&
+        ((ref = ref(props, initialState)),
+        (initialState =
+          null === ref || void 0 === ref
+            ? initialState
+            : assign({}, initialState, ref)),
+        (newProps.state = initialState));
+      if (
+        "function" !== typeof type.getDerivedStateFromProps &&
+        "function" !== typeof newProps.getSnapshotBeforeUpdate &&
+        ("function" === typeof newProps.UNSAFE_componentWillMount ||
+          "function" === typeof newProps.componentWillMount)
+      )
+        if (
+          ((type = newProps.state),
+          "function" === typeof newProps.componentWillMount &&
+            newProps.componentWillMount(),
+          "function" === typeof newProps.UNSAFE_componentWillMount &&
+            newProps.UNSAFE_componentWillMount(),
+          type !== newProps.state &&
+            classComponentUpdater.enqueueReplaceState(
+              newProps,
+              newProps.state,
+              null
+            ),
+          null !== defaultProps.queue && 0 < defaultProps.queue.length)
+        )
+          if (
+            ((type = defaultProps.queue),
+            (ref = defaultProps.replace),
+            (defaultProps.queue = null),
+            (defaultProps.replace = !1),
+            ref && 1 === type.length)
+          )
+            newProps.state = type[0];
+          else {
+            defaultProps = ref ? type[0] : newProps.state;
+            initialState = !0;
+            for (ref = ref ? 1 : 0; ref < type.length; ref++)
+              (propName$33 = type[ref]),
+                (propName$33 =
+                  "function" === typeof propName$33
+                    ? propName$33.call(newProps, defaultProps, props, void 0)
+                    : propName$33),
+                null != propName$33 &&
+                  (initialState
+                    ? ((initialState = !1),
+                      (defaultProps = assign({}, defaultProps, propName$33)))
+                    : assign(defaultProps, propName$33));
+            newProps.state = defaultProps;
+          }
+        else defaultProps.queue = null;
+      type = newProps.render();
+      if (12 === request.status) throw null;
+      props = task.keyPath;
+      task.keyPath = keyPath;
+      renderNodeDestructive(request, task, type, -1);
+      task.keyPath = props;
+    } else {
+      type = renderWithHooks(request, task, keyPath, type, props, void 0);
+      if (12 === request.status) throw null;
+      finishFunctionComponent(
+        request,
+        task,
+        keyPath,
+        type,
+        0 !== localIdCounter,
+        actionStateCounter,
+        actionStateMatchingIndex
+      );
+    }
+  else if ("string" === typeof type)
+    if (((newProps = task.blockedSegment), null === newProps))
+      (newProps = props.children),
+        (defaultProps = task.formatContext),
+        (initialState = task.keyPath),
+        (task.formatContext = getChildFormatContext(defaultProps, type, props)),
+        (task.keyPath = keyPath),
+        renderNode(request, task, newProps, -1),
+        (task.formatContext = defaultProps),
+        (task.keyPath = initialState);
+    else {
+      ref = pushStartInstance(
+        newProps.chunks,
+        type,
+        props,
+        request.resumableState,
+        request.renderState,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.formatContext,
+        newProps.lastPushedText,
+        task.isFallback
+      );
+      newProps.lastPushedText = !1;
+      defaultProps = task.formatContext;
+      initialState = task.keyPath;
+      task.keyPath = keyPath;
+      3 ===
+      (task.formatContext = getChildFormatContext(defaultProps, type, props))
+        .insertionMode
+        ? ((keyPath = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          )),
+          newProps.preambleChildren.push(keyPath),
+          (keyPath = createRenderTask(
+            request,
+            null,
+            ref,
+            -1,
+            task.blockedBoundary,
+            keyPath,
+            task.blockedPreamble,
+            task.hoistableState,
+            request.abortableTasks,
+            task.keyPath,
+            task.formatContext,
+            task.context,
+            task.treeContext,
+            task.componentStack,
+            task.isFallback
+          )),
+          pushComponentStack(keyPath),
+          request.pingedTasks.push(keyPath))
+        : renderNode(request, task, ref, -1);
+      task.formatContext = defaultProps;
+      task.keyPath = initialState;
+      a: {
+        task = newProps.chunks;
+        request = request.resumableState;
+        switch (type) {
+          case "title":
+          case "style":
+          case "script":
+          case "area":
+          case "base":
+          case "br":
+          case "col":
+          case "embed":
+          case "hr":
+          case "img":
+          case "input":
+          case "keygen":
+          case "link":
+          case "meta":
+          case "param":
+          case "source":
+          case "track":
+          case "wbr":
+            break a;
+          case "body":
+            if (1 >= defaultProps.insertionMode) {
+              request.hasBody = !0;
+              break a;
+            }
+            break;
+          case "html":
+            if (0 === defaultProps.insertionMode) {
+              request.hasHtml = !0;
+              break a;
+            }
+            break;
+          case "head":
+            if (1 >= defaultProps.insertionMode) break a;
+        }
+        task.push(endChunkForTag(type));
+      }
+      newProps.lastPushedText = !1;
+    }
+  else {
+    switch (type) {
+      case REACT_LEGACY_HIDDEN_TYPE:
+      case REACT_STRICT_MODE_TYPE:
+      case REACT_PROFILER_TYPE:
+      case REACT_FRAGMENT_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_ACTIVITY_TYPE:
+        "hidden" !== props.mode &&
+          ((type = task.keyPath),
+          (task.keyPath = keyPath),
+          renderNodeDestructive(request, task, props.children, -1),
+          (task.keyPath = type));
+        return;
+      case REACT_SUSPENSE_LIST_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_VIEW_TRANSITION_TYPE:
+      case REACT_SCOPE_TYPE:
+        throw Error("ReactDOMServer does not yet support scope components.");
+      case REACT_SUSPENSE_TYPE:
+        a: if (null !== task.replay) {
+          type = task.keyPath;
+          task.keyPath = keyPath;
+          keyPath = props.children;
+          try {
+            renderNode(request, task, keyPath, -1);
+          } finally {
+            task.keyPath = type;
+          }
+        } else {
+          type = task.keyPath;
+          var parentBoundary = task.blockedBoundary;
+          ref = task.blockedPreamble;
+          var parentHoistableState = task.hoistableState;
+          propName$33 = task.blockedSegment;
+          propName = props.fallback;
+          props = props.children;
+          var fallbackAbortSet = new Set();
+          var newBoundary =
+            2 > task.formatContext.insertionMode
+              ? createSuspenseBoundary(
+                  request,
+                  fallbackAbortSet,
+                  createPreambleState(),
+                  createPreambleState()
+                )
+              : createSuspenseBoundary(request, fallbackAbortSet, null, null);
+          null !== request.trackedPostpones &&
+            (newBoundary.trackedContentKeyPath = keyPath);
+          var boundarySegment = createPendingSegment(
+            request,
+            propName$33.chunks.length,
+            newBoundary,
+            task.formatContext,
+            !1,
+            !1
+          );
+          propName$33.children.push(boundarySegment);
+          propName$33.lastPushedText = !1;
+          var contentRootSegment = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          );
+          contentRootSegment.parentFlushed = !0;
+          if (null !== request.trackedPostpones) {
+            newProps = [keyPath[0], "Suspense Fallback", keyPath[2]];
+            defaultProps = [newProps[1], newProps[2], [], null];
+            request.trackedPostpones.workingMap.set(newProps, defaultProps);
+            newBoundary.trackedFallbackNode = defaultProps;
+            task.blockedSegment = boundarySegment;
+            task.blockedPreamble = newBoundary.fallbackPreamble;
+            task.keyPath = newProps;
+            boundarySegment.status = 6;
+            try {
+              renderNode(request, task, propName, -1),
+                pushSegmentFinale(
+                  boundarySegment.chunks,
+                  request.renderState,
+                  boundarySegment.lastPushedText,
+                  boundarySegment.textEmbedded
+                ),
+                (boundarySegment.status = 1);
+            } catch (thrownValue) {
+              throw (
+                ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                thrownValue)
+              );
+            } finally {
+              (task.blockedSegment = propName$33),
+                (task.blockedPreamble = ref),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              props,
+              -1,
+              newBoundary,
+              contentRootSegment,
+              newBoundary.contentPreamble,
+              newBoundary.contentState,
+              task.abortSet,
+              keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          } else {
+            task.blockedBoundary = newBoundary;
+            task.blockedPreamble = newBoundary.contentPreamble;
+            task.hoistableState = newBoundary.contentState;
+            task.blockedSegment = contentRootSegment;
+            task.keyPath = keyPath;
+            contentRootSegment.status = 6;
+            try {
+              if (
+                (renderNode(request, task, props, -1),
+                pushSegmentFinale(
+                  contentRootSegment.chunks,
+                  request.renderState,
+                  contentRootSegment.lastPushedText,
+                  contentRootSegment.textEmbedded
+                ),
+                (contentRootSegment.status = 1),
+                queueCompletedSegment(newBoundary, contentRootSegment),
+                0 === newBoundary.pendingTasks && 0 === newBoundary.status)
+              ) {
+                newBoundary.status = 1;
+                0 === request.pendingRootTasks &&
+                  task.blockedPreamble &&
+                  preparePreamble(request);
+                break a;
+              }
+            } catch (thrownValue$28) {
+              (newBoundary.status = 4),
+                12 === request.status
+                  ? ((contentRootSegment.status = 3),
+                    (newProps = request.fatalError))
+                  : ((contentRootSegment.status = 4),
+                    (newProps = thrownValue$28)),
+                (defaultProps = getThrownInfo(task.componentStack)),
+                (initialState = logRecoverableError(
+                  request,
+                  newProps,
+                  defaultProps
+                )),
+                (newBoundary.errorDigest = initialState),
+                untrackBoundary(request, newBoundary);
+            } finally {
+              (task.blockedBoundary = parentBoundary),
+                (task.blockedPreamble = ref),
+                (task.hoistableState = parentHoistableState),
+                (task.blockedSegment = propName$33),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              propName,
+              -1,
+              parentBoundary,
+              boundarySegment,
+              newBoundary.fallbackPreamble,
+              newBoundary.fallbackState,
+              fallbackAbortSet,
+              [keyPath[0], "Suspense Fallback", keyPath[2]],
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              !0
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          }
+        }
+        return;
+    }
+    if ("object" === typeof type && null !== type)
+      switch (type.$$typeof) {
+        case REACT_FORWARD_REF_TYPE:
+          if ("ref" in props)
+            for (newBoundary in ((newProps = {}), props))
+              "ref" !== newBoundary &&
+                (newProps[newBoundary] = props[newBoundary]);
+          else newProps = props;
+          type = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type.render,
+            newProps,
+            ref
+          );
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            type,
+            0 !== localIdCounter,
+            actionStateCounter,
+            actionStateMatchingIndex
+          );
+          return;
+        case REACT_MEMO_TYPE:
+          renderElement(request, task, keyPath, type.type, props, ref);
+          return;
+        case REACT_PROVIDER_TYPE:
+        case REACT_CONTEXT_TYPE:
+          defaultProps = props.children;
+          newProps = task.keyPath;
+          props = props.value;
+          initialState = type._currentValue2;
+          type._currentValue2 = props;
+          ref = currentActiveSnapshot;
+          currentActiveSnapshot = type = {
+            parent: ref,
+            depth: null === ref ? 0 : ref.depth + 1,
+            context: type,
+            parentValue: initialState,
+            value: props
+          };
+          task.context = type;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, defaultProps, -1);
+          request = currentActiveSnapshot;
+          if (null === request)
+            throw Error(
+              "Tried to pop a Context at the root of the app. This is a bug in React."
+            );
+          request.context._currentValue2 = request.parentValue;
+          request = currentActiveSnapshot = request.parent;
+          task.context = request;
+          task.keyPath = newProps;
+          return;
+        case REACT_CONSUMER_TYPE:
+          props = props.children;
+          type = props(type._context._currentValue2);
+          props = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, type, -1);
+          task.keyPath = props;
+          return;
+        case REACT_LAZY_TYPE:
+          newProps = type._init;
+          type = newProps(type._payload);
+          if (12 === request.status) throw null;
+          renderElement(request, task, keyPath, type, props, ref);
+          return;
+      }
+    throw Error(
+      "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+        ((null == type ? type : typeof type) + ".")
+    );
+  }
+}
+function resumeNode(request, task, segmentId, node, childIndex) {
+  var prevReplay = task.replay,
+    blockedBoundary = task.blockedBoundary,
+    resumedSegment = createPendingSegment(
+      request,
+      0,
+      null,
+      task.formatContext,
+      !1,
+      !1
+    );
+  resumedSegment.id = segmentId;
+  resumedSegment.parentFlushed = !0;
+  try {
+    (task.replay = null),
+      (task.blockedSegment = resumedSegment),
+      renderNode(request, task, node, childIndex),
+      (resumedSegment.status = 1),
+      null === blockedBoundary
+        ? (request.completedRootSegment = resumedSegment)
+        : (queueCompletedSegment(blockedBoundary, resumedSegment),
+          blockedBoundary.parentFlushed &&
+            request.partialBoundaries.push(blockedBoundary));
+  } finally {
+    (task.replay = prevReplay), (task.blockedSegment = null);
+  }
+}
+function renderNodeDestructive(request, task, node, childIndex) {
+  null !== task.replay && "number" === typeof task.replay.slots
+    ? resumeNode(request, task, task.replay.slots, node, childIndex)
+    : ((task.node = node),
+      (task.childIndex = childIndex),
+      (node = task.componentStack),
+      pushComponentStack(task),
+      retryNode(request, task),
+      (task.componentStack = node));
+}
+function retryNode(request, task) {
+  var node = task.node,
+    childIndex = task.childIndex;
+  if (null !== node) {
+    if ("object" === typeof node) {
+      switch (node.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          var type = node.type,
+            key = node.key,
+            props = node.props;
+          node = props.ref;
+          var ref = void 0 !== node ? node : null,
+            name = getComponentNameFromType(type),
+            keyOrIndex =
+              null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+          key = [task.keyPath, name, keyOrIndex];
+          if (null !== task.replay)
+            a: {
+              var replay = task.replay;
+              childIndex = replay.nodes;
+              for (node = 0; node < childIndex.length; node++) {
+                var node$jscomp$0 = childIndex[node];
+                if (keyOrIndex === node$jscomp$0[1]) {
+                  if (4 === node$jscomp$0.length) {
+                    if (null !== name && name !== node$jscomp$0[0])
+                      throw Error(
+                        "Expected the resume to render <" +
+                          node$jscomp$0[0] +
+                          "> in this slot but instead it rendered <" +
+                          name +
+                          ">. The tree doesn't match so React will fallback to client rendering."
+                      );
+                    var childNodes = node$jscomp$0[2];
+                    name = node$jscomp$0[3];
+                    keyOrIndex = task.node;
+                    task.replay = {
+                      nodes: childNodes,
+                      slots: name,
+                      pendingTasks: 1
+                    };
+                    try {
+                      renderElement(request, task, key, type, props, ref);
+                      if (
+                        1 === task.replay.pendingTasks &&
+                        0 < task.replay.nodes.length
+                      )
+                        throw Error(
+                          "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                        );
+                      task.replay.pendingTasks--;
+                    } catch (x) {
+                      if (
+                        "object" === typeof x &&
+                        null !== x &&
+                        (x === SuspenseException ||
+                          "function" === typeof x.then)
+                      )
+                        throw (
+                          (task.node === keyOrIndex && (task.replay = replay),
+                          x)
+                        );
+                      task.replay.pendingTasks--;
+                      props = getThrownInfo(task.componentStack);
+                      key = task.blockedBoundary;
+                      type = x;
+                      props = logRecoverableError(request, type, props);
+                      abortRemainingReplayNodes(
+                        request,
+                        key,
+                        childNodes,
+                        name,
+                        type,
+                        props
+                      );
+                    }
+                    task.replay = replay;
+                  } else {
+                    if (type !== REACT_SUSPENSE_TYPE)
+                      throw Error(
+                        "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+                          (getComponentNameFromType(type) || "Unknown") +
+                          ">. The tree doesn't match so React will fallback to client rendering."
+                      );
+                    b: {
+                      replay = void 0;
+                      type = node$jscomp$0[5];
+                      ref = node$jscomp$0[2];
+                      name = node$jscomp$0[3];
+                      keyOrIndex =
+                        null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2];
+                      node$jscomp$0 =
+                        null === node$jscomp$0[4] ? null : node$jscomp$0[4][3];
+                      var prevKeyPath = task.keyPath,
+                        previousReplaySet = task.replay,
+                        parentBoundary = task.blockedBoundary,
+                        parentHoistableState = task.hoistableState,
+                        content = props.children,
+                        fallback = props.fallback,
+                        fallbackAbortSet = new Set();
+                      props =
+                        2 > task.formatContext.insertionMode
+                          ? createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              createPreambleState(),
+                              createPreambleState()
+                            )
+                          : createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              null,
+                              null
+                            );
+                      props.parentFlushed = !0;
+                      props.rootSegmentID = type;
+                      task.blockedBoundary = props;
+                      task.hoistableState = props.contentState;
+                      task.keyPath = key;
+                      task.replay = {
+                        nodes: ref,
+                        slots: name,
+                        pendingTasks: 1
+                      };
+                      try {
+                        renderNode(request, task, content, -1);
+                        if (
+                          1 === task.replay.pendingTasks &&
+                          0 < task.replay.nodes.length
+                        )
+                          throw Error(
+                            "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                          );
+                        task.replay.pendingTasks--;
+                        if (0 === props.pendingTasks && 0 === props.status) {
+                          props.status = 1;
+                          request.completedBoundaries.push(props);
+                          break b;
+                        }
+                      } catch (error) {
+                        (props.status = 4),
+                          (childNodes = getThrownInfo(task.componentStack)),
+                          (replay = logRecoverableError(
+                            request,
+                            error,
+                            childNodes
+                          )),
+                          (props.errorDigest = replay),
+                          task.replay.pendingTasks--,
+                          request.clientRenderedBoundaries.push(props);
+                      } finally {
+                        (task.blockedBoundary = parentBoundary),
+                          (task.hoistableState = parentHoistableState),
+                          (task.replay = previousReplaySet),
+                          (task.keyPath = prevKeyPath);
+                      }
+                      task = createReplayTask(
+                        request,
+                        null,
+                        {
+                          nodes: keyOrIndex,
+                          slots: node$jscomp$0,
+                          pendingTasks: 0
+                        },
+                        fallback,
+                        -1,
+                        parentBoundary,
+                        props.fallbackState,
+                        fallbackAbortSet,
+                        [key[0], "Suspense Fallback", key[2]],
+                        task.formatContext,
+                        task.context,
+                        task.treeContext,
+                        task.componentStack,
+                        !0
+                      );
+                      pushComponentStack(task);
+                      request.pingedTasks.push(task);
+                    }
+                  }
+                  childIndex.splice(node, 1);
+                  break a;
+                }
+              }
+            }
+          else renderElement(request, task, key, type, props, ref);
+          return;
+        case REACT_PORTAL_TYPE:
+          throw Error(
+            "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+          );
+        case REACT_LAZY_TYPE:
+          childNodes = node._init;
+          node = childNodes(node._payload);
+          if (12 === request.status) throw null;
+          renderNodeDestructive(request, task, node, childIndex);
+          return;
+      }
+      if (isArrayImpl(node)) {
+        renderChildrenArray(request, task, node, childIndex);
+        return;
+      }
+      null === node || "object" !== typeof node
+        ? (childNodes = null)
+        : ((childNodes =
+            (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+            node["@@iterator"]),
+          (childNodes = "function" === typeof childNodes ? childNodes : null));
+      if (childNodes && (childNodes = childNodes.call(node))) {
+        node = childNodes.next();
+        if (!node.done) {
+          props = [];
+          do props.push(node.value), (node = childNodes.next());
+          while (!node.done);
+          renderChildrenArray(request, task, props, childIndex);
+        }
+        return;
+      }
+      if ("function" === typeof node.then)
+        return (
+          (task.thenableState = null),
+          renderNodeDestructive(request, task, unwrapThenable(node), childIndex)
+        );
+      if (node.$$typeof === REACT_CONTEXT_TYPE)
+        return renderNodeDestructive(
+          request,
+          task,
+          node._currentValue2,
+          childIndex
+        );
+      childIndex = Object.prototype.toString.call(node);
+      throw Error(
+        "Objects are not valid as a React child (found: " +
+          ("[object Object]" === childIndex
+            ? "object with keys {" + Object.keys(node).join(", ") + "}"
+            : childIndex) +
+          "). If you meant to render a collection of children, use an array instead."
+      );
+    }
+    if ("string" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+    else if ("number" === typeof node || "bigint" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            "" + node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+  }
+}
+function renderChildrenArray(request, task, children, childIndex) {
+  var prevKeyPath = task.keyPath;
+  if (
+    -1 !== childIndex &&
+    ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+    null !== task.replay)
+  ) {
+    for (
+      var replay = task.replay, replayNodes = replay.nodes, j = 0;
+      j < replayNodes.length;
+      j++
+    ) {
+      var node = replayNodes[j];
+      if (node[1] === childIndex) {
+        childIndex = node[2];
+        node = node[3];
+        task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+        try {
+          renderChildrenArray(request, task, children, -1);
+          if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length)
+            throw Error(
+              "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+            );
+          task.replay.pendingTasks--;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            (x === SuspenseException || "function" === typeof x.then)
+          )
+            throw x;
+          task.replay.pendingTasks--;
+          children = getThrownInfo(task.componentStack);
+          var boundary = task.blockedBoundary,
+            error = x;
+          children = logRecoverableError(request, error, children);
+          abortRemainingReplayNodes(
+            request,
+            boundary,
+            childIndex,
+            node,
+            error,
+            children
+          );
+        }
+        task.replay = replay;
+        replayNodes.splice(j, 1);
+        break;
+      }
+    }
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  replay = task.treeContext;
+  replayNodes = children.length;
+  if (
+    null !== task.replay &&
+    ((j = task.replay.slots), null !== j && "object" === typeof j)
+  ) {
+    for (childIndex = 0; childIndex < replayNodes; childIndex++)
+      (node = children[childIndex]),
+        (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)),
+        (boundary = j[childIndex]),
+        "number" === typeof boundary
+          ? (resumeNode(request, task, boundary, node, childIndex),
+            delete j[childIndex])
+          : renderNode(request, task, node, childIndex);
+    task.treeContext = replay;
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  for (j = 0; j < replayNodes; j++)
+    (childIndex = children[j]),
+      (task.treeContext = pushTreeContext(replay, replayNodes, j)),
+      renderNode(request, task, childIndex, j);
+  task.treeContext = replay;
+  task.keyPath = prevKeyPath;
+}
+function untrackBoundary(request, boundary) {
+  request = request.trackedPostpones;
+  null !== request &&
+    ((boundary = boundary.trackedContentKeyPath),
+    null !== boundary &&
+      ((boundary = request.workingMap.get(boundary)),
+      void 0 !== boundary &&
+        ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+}
+function spawnNewSuspendedReplayTask(request, task, thenableState) {
+  return createReplayTask(
+    request,
+    thenableState,
+    task.replay,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function spawnNewSuspendedRenderTask(request, task, thenableState) {
+  var segment = task.blockedSegment,
+    newSegment = createPendingSegment(
+      request,
+      segment.chunks.length,
+      null,
+      task.formatContext,
+      segment.lastPushedText,
+      !0
+    );
+  segment.children.push(newSegment);
+  segment.lastPushedText = !1;
+  return createRenderTask(
+    request,
+    thenableState,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    newSegment,
+    task.blockedPreamble,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function renderNode(request, task, node, childIndex) {
+  var previousFormatContext = task.formatContext,
+    previousContext = task.context,
+    previousKeyPath = task.keyPath,
+    previousTreeContext = task.treeContext,
+    previousComponentStack = task.componentStack,
+    segment = task.blockedSegment;
+  if (null === segment)
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue) {
+      if (
+        (resetHooksState(),
+        (node =
+          thrownValue === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedReplayTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedReplayTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  else {
+    var childrenLength = segment.children.length,
+      chunkLength = segment.chunks.length;
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue$48) {
+      if (
+        (resetHooksState(),
+        (segment.children.length = childrenLength),
+        (segment.chunks.length = chunkLength),
+        (node =
+          thrownValue$48 === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue$48),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedRenderTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedRenderTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  }
+  task.formatContext = previousFormatContext;
+  task.context = previousContext;
+  task.keyPath = previousKeyPath;
+  task.treeContext = previousTreeContext;
+  switchContext(previousContext);
+  throw node;
+}
+function abortTaskSoft(task) {
+  var boundary = task.blockedBoundary;
+  task = task.blockedSegment;
+  null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+}
+function abortRemainingReplayNodes(
+  request$jscomp$0,
+  boundary,
+  nodes,
+  slots,
+  error,
+  errorDigest$jscomp$0
+) {
+  for (var i = 0; i < nodes.length; i++) {
+    var node = nodes[i];
+    if (4 === node.length)
+      abortRemainingReplayNodes(
+        request$jscomp$0,
+        boundary,
+        node[2],
+        node[3],
+        error,
+        errorDigest$jscomp$0
+      );
+    else {
+      node = node[5];
+      var request = request$jscomp$0,
+        errorDigest = errorDigest$jscomp$0,
+        resumedBoundary = createSuspenseBoundary(
+          request,
+          new Set(),
+          null,
+          null
+        );
+      resumedBoundary.parentFlushed = !0;
+      resumedBoundary.rootSegmentID = node;
+      resumedBoundary.status = 4;
+      resumedBoundary.errorDigest = errorDigest;
+      resumedBoundary.parentFlushed &&
+        request.clientRenderedBoundaries.push(resumedBoundary);
+    }
+  }
+  nodes.length = 0;
+  if (null !== slots) {
+    if (null === boundary)
+      throw Error(
+        "We should not have any resumable nodes in the shell. This is a bug in React."
+      );
+    4 !== boundary.status &&
+      ((boundary.status = 4),
+      (boundary.errorDigest = errorDigest$jscomp$0),
+      boundary.parentFlushed &&
+        request$jscomp$0.clientRenderedBoundaries.push(boundary));
+    if ("object" === typeof slots) for (var index in slots) delete slots[index];
+  }
+}
+function abortTask(task, request, error) {
+  var boundary = task.blockedBoundary,
+    segment = task.blockedSegment;
+  if (null !== segment) {
+    if (6 === segment.status) return;
+    segment.status = 3;
+  }
+  segment = getThrownInfo(task.componentStack);
+  if (null === boundary) {
+    if (13 !== request.status && 14 !== request.status) {
+      boundary = task.replay;
+      if (null === boundary) {
+        logRecoverableError(request, error, segment);
+        fatalError(request, error);
+        return;
+      }
+      boundary.pendingTasks--;
+      0 === boundary.pendingTasks &&
+        0 < boundary.nodes.length &&
+        ((task = logRecoverableError(request, error, segment)),
+        abortRemainingReplayNodes(
+          request,
+          null,
+          boundary.nodes,
+          boundary.slots,
+          error,
+          task
+        ));
+      request.pendingRootTasks--;
+      0 === request.pendingRootTasks && completeShell(request);
+    }
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        ((boundary.status = 4),
+        (task = logRecoverableError(request, error, segment)),
+        (boundary.status = 4),
+        (boundary.errorDigest = task),
+        untrackBoundary(request, boundary),
+        boundary.parentFlushed &&
+          request.clientRenderedBoundaries.push(boundary)),
+      boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+        return abortTask(fallbackTask, request, error);
+      }),
+      boundary.fallbackAbortableTasks.clear();
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function safelyEmitEarlyPreloads(request, shellComplete) {
+  try {
+    var renderState = request.renderState,
+      onHeaders = renderState.onHeaders;
+    if (onHeaders) {
+      var headers = renderState.headers;
+      if (headers) {
+        renderState.headers = null;
+        var linkHeader = headers.preconnects;
+        headers.fontPreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.fontPreloads));
+        headers.highImagePreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.highImagePreloads));
+        if (!shellComplete) {
+          var queueIter = renderState.styles.values(),
+            queueStep = queueIter.next();
+          b: for (
+            ;
+            0 < headers.remainingCapacity && !queueStep.done;
+            queueStep = queueIter.next()
+          )
+            for (
+              var sheetIter = queueStep.value.sheets.values(),
+                sheetStep = sheetIter.next();
+              0 < headers.remainingCapacity && !sheetStep.done;
+              sheetStep = sheetIter.next()
+            ) {
+              var sheet = sheetStep.value,
+                props = sheet.props,
+                key = props.href,
+                props$jscomp$0 = sheet.props,
+                header = getPreloadAsHeader(props$jscomp$0.href, "style", {
+                  crossOrigin: props$jscomp$0.crossOrigin,
+                  integrity: props$jscomp$0.integrity,
+                  nonce: props$jscomp$0.nonce,
+                  type: props$jscomp$0.type,
+                  fetchPriority: props$jscomp$0.fetchPriority,
+                  referrerPolicy: props$jscomp$0.referrerPolicy,
+                  media: props$jscomp$0.media
+                });
+              if (0 <= (headers.remainingCapacity -= header.length + 2))
+                (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                  linkHeader && (linkHeader += ", "),
+                  (linkHeader += header),
+                  (renderState.resets.style[key] =
+                    "string" === typeof props.crossOrigin ||
+                    "string" === typeof props.integrity
+                      ? [props.crossOrigin, props.integrity]
+                      : PRELOAD_NO_CREDS);
+              else break b;
+            }
+        }
+        linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+      }
+    }
+  } catch (error) {
+    logRecoverableError(request, error, {});
+  }
+}
+function completeShell(request) {
+  null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+  null === request.trackedPostpones && preparePreamble(request);
+  request.onShellError = noop;
+  request = request.onShellReady;
+  request();
+}
+function completeAll(request) {
+  safelyEmitEarlyPreloads(
+    request,
+    null === request.trackedPostpones
+      ? !0
+      : null === request.completedRootSegment ||
+          5 !== request.completedRootSegment.status
+  );
+  preparePreamble(request);
+  request = request.onAllReady;
+  request();
+}
+function queueCompletedSegment(boundary, segment) {
+  if (
+    0 === segment.chunks.length &&
+    1 === segment.children.length &&
+    null === segment.children[0].boundary &&
+    -1 === segment.children[0].id
+  ) {
+    var childSegment = segment.children[0];
+    childSegment.id = segment.id;
+    childSegment.parentFlushed = !0;
+    1 === childSegment.status && queueCompletedSegment(boundary, childSegment);
+  } else boundary.completedSegments.push(segment);
+}
+function finishedTask(request, boundary, segment) {
+  if (null === boundary) {
+    if (null !== segment && segment.parentFlushed) {
+      if (null !== request.completedRootSegment)
+        throw Error(
+          "There can only be one root segment. This is a bug in React."
+        );
+      request.completedRootSegment = segment;
+    }
+    request.pendingRootTasks--;
+    0 === request.pendingRootTasks && completeShell(request);
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        (0 === boundary.pendingTasks
+          ? (0 === boundary.status && (boundary.status = 1),
+            null !== segment &&
+              segment.parentFlushed &&
+              1 === segment.status &&
+              queueCompletedSegment(boundary, segment),
+            boundary.parentFlushed &&
+              request.completedBoundaries.push(boundary),
+            1 === boundary.status &&
+              (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request),
+              boundary.fallbackAbortableTasks.clear(),
+              0 === request.pendingRootTasks &&
+                null === request.trackedPostpones &&
+                null !== boundary.contentPreamble &&
+                preparePreamble(request)))
+          : null !== segment &&
+            segment.parentFlushed &&
+            1 === segment.status &&
+            (queueCompletedSegment(boundary, segment),
+            1 === boundary.completedSegments.length &&
+              boundary.parentFlushed &&
+              request.partialBoundaries.push(boundary)));
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function performWork(request$jscomp$2) {
+  if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) {
+    var prevContext = currentActiveSnapshot,
+      prevDispatcher = ReactSharedInternals.H;
+    ReactSharedInternals.H = HooksDispatcher;
+    var prevAsyncDispatcher = ReactSharedInternals.A;
+    ReactSharedInternals.A = DefaultAsyncDispatcher;
+    var prevRequest = currentRequest;
+    currentRequest = request$jscomp$2;
+    var prevResumableState = currentResumableState;
+    currentResumableState = request$jscomp$2.resumableState;
+    try {
+      var pingedTasks = request$jscomp$2.pingedTasks,
+        i;
+      for (i = 0; i < pingedTasks.length; i++) {
+        var task = pingedTasks[i],
+          request = request$jscomp$2,
+          segment = task.blockedSegment;
+        if (null === segment) {
+          var request$jscomp$0 = request;
+          if (0 !== task.replay.pendingTasks) {
+            switchContext(task.context);
+            try {
+              "number" === typeof task.replay.slots
+                ? resumeNode(
+                    request$jscomp$0,
+                    task,
+                    task.replay.slots,
+                    task.node,
+                    task.childIndex
+                  )
+                : retryNode(request$jscomp$0, task);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+              task.abortSet.delete(task);
+              finishedTask(request$jscomp$0, task.blockedBoundary, null);
+            } catch (thrownValue) {
+              resetHooksState();
+              var x =
+                thrownValue === SuspenseException
+                  ? getSuspendedThenable()
+                  : thrownValue;
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                "function" === typeof x.then
+              ) {
+                var ping = task.ping;
+                x.then(ping, ping);
+                task.thenableState = getThenableStateAfterSuspending();
+              } else {
+                task.replay.pendingTasks--;
+                task.abortSet.delete(task);
+                var errorInfo = getThrownInfo(task.componentStack);
+                request = void 0;
+                var request$jscomp$1 = request$jscomp$0,
+                  boundary = task.blockedBoundary,
+                  error$jscomp$0 =
+                    12 === request$jscomp$0.status
+                      ? request$jscomp$0.fatalError
+                      : x,
+                  replayNodes = task.replay.nodes,
+                  resumeSlots = task.replay.slots;
+                request = logRecoverableError(
+                  request$jscomp$1,
+                  error$jscomp$0,
+                  errorInfo
+                );
+                abortRemainingReplayNodes(
+                  request$jscomp$1,
+                  boundary,
+                  replayNodes,
+                  resumeSlots,
+                  error$jscomp$0,
+                  request
+                );
+                request$jscomp$0.pendingRootTasks--;
+                0 === request$jscomp$0.pendingRootTasks &&
+                  completeShell(request$jscomp$0);
+                request$jscomp$0.allPendingTasks--;
+                0 === request$jscomp$0.allPendingTasks &&
+                  completeAll(request$jscomp$0);
+              }
+            } finally {
+            }
+          }
+        } else if (
+          ((request$jscomp$0 = void 0),
+          (request$jscomp$1 = segment),
+          0 === request$jscomp$1.status)
+        ) {
+          request$jscomp$1.status = 6;
+          switchContext(task.context);
+          var childrenLength = request$jscomp$1.children.length,
+            chunkLength = request$jscomp$1.chunks.length;
+          try {
+            retryNode(request, task),
+              pushSegmentFinale(
+                request$jscomp$1.chunks,
+                request.renderState,
+                request$jscomp$1.lastPushedText,
+                request$jscomp$1.textEmbedded
+              ),
+              task.abortSet.delete(task),
+              (request$jscomp$1.status = 1),
+              finishedTask(request, task.blockedBoundary, request$jscomp$1);
+          } catch (thrownValue) {
+            resetHooksState();
+            request$jscomp$1.children.length = childrenLength;
+            request$jscomp$1.chunks.length = chunkLength;
+            var x$jscomp$0 =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : 12 === request.status
+                  ? request.fatalError
+                  : thrownValue;
+            if (
+              "object" === typeof x$jscomp$0 &&
+              null !== x$jscomp$0 &&
+              "function" === typeof x$jscomp$0.then
+            ) {
+              request$jscomp$1.status = 0;
+              task.thenableState = getThenableStateAfterSuspending();
+              var ping$jscomp$0 = task.ping;
+              x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+            } else {
+              var errorInfo$jscomp$0 = getThrownInfo(task.componentStack);
+              task.abortSet.delete(task);
+              request$jscomp$1.status = 4;
+              var boundary$jscomp$0 = task.blockedBoundary;
+              request$jscomp$0 = logRecoverableError(
+                request,
+                x$jscomp$0,
+                errorInfo$jscomp$0
+              );
+              null === boundary$jscomp$0
+                ? fatalError(request, x$jscomp$0)
+                : (boundary$jscomp$0.pendingTasks--,
+                  4 !== boundary$jscomp$0.status &&
+                    ((boundary$jscomp$0.status = 4),
+                    (boundary$jscomp$0.errorDigest = request$jscomp$0),
+                    untrackBoundary(request, boundary$jscomp$0),
+                    boundary$jscomp$0.parentFlushed &&
+                      request.clientRenderedBoundaries.push(boundary$jscomp$0),
+                    0 === request.pendingRootTasks &&
+                      null === request.trackedPostpones &&
+                      null !== boundary$jscomp$0.contentPreamble &&
+                      preparePreamble(request)));
+              request.allPendingTasks--;
+              0 === request.allPendingTasks && completeAll(request);
+            }
+          } finally {
+          }
+        }
+      }
+      pingedTasks.splice(0, i);
+      null !== request$jscomp$2.destination &&
+        flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination);
+    } catch (error) {
+      logRecoverableError(request$jscomp$2, error, {}),
+        fatalError(request$jscomp$2, error);
+    } finally {
+      (currentResumableState = prevResumableState),
+        (ReactSharedInternals.H = prevDispatcher),
+        (ReactSharedInternals.A = prevAsyncDispatcher),
+        prevDispatcher === HooksDispatcher && switchContext(prevContext),
+        (currentRequest = prevRequest);
+    }
+  }
+}
+function preparePreambleFromSubtree(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  segment.preambleChildren.length &&
+    collectedPreambleSegments.push(segment.preambleChildren);
+  for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+    pendingPreambles =
+      preparePreambleFromSegment(
+        request,
+        segment.children[i],
+        collectedPreambleSegments
+      ) || pendingPreambles;
+  return pendingPreambles;
+}
+function preparePreambleFromSegment(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    );
+  var preamble = boundary.contentPreamble,
+    fallbackPreamble = boundary.fallbackPreamble;
+  if (null === preamble || null === fallbackPreamble) return !1;
+  switch (boundary.status) {
+    case 1:
+      hoistPreambleState(request.renderState, preamble);
+      segment = boundary.completedSegments[0];
+      if (!segment)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      return preparePreambleFromSubtree(
+        request,
+        segment,
+        collectedPreambleSegments
+      );
+    case 5:
+      if (null !== request.trackedPostpones) return !0;
+    case 4:
+      if (1 === segment.status)
+        return (
+          hoistPreambleState(request.renderState, fallbackPreamble),
+          preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          )
+        );
+    default:
+      return !0;
+  }
+}
+function preparePreamble(request) {
+  if (
+    request.completedRootSegment &&
+    null === request.completedPreambleSegments
+  ) {
+    var collectedPreambleSegments = [],
+      hasPendingPreambles = preparePreambleFromSegment(
+        request,
+        request.completedRootSegment,
+        collectedPreambleSegments
+      ),
+      preamble = request.renderState.preamble;
+    if (
+      !1 === hasPendingPreambles ||
+      (preamble.headChunks && preamble.bodyChunks)
+    )
+      request.completedPreambleSegments = collectedPreambleSegments;
+  }
+}
+function flushSubtree(request, destination, segment, hoistableState) {
+  segment.parentFlushed = !0;
+  switch (segment.status) {
+    case 0:
+      segment.id = request.nextSegmentId++;
+    case 5:
+      return (
+        (hoistableState = segment.id),
+        (segment.lastPushedText = !1),
+        (segment.textEmbedded = !1),
+        (request = request.renderState),
+        destination.push('<template id="'),
+        destination.push(request.placeholderPrefix),
+        (request = hoistableState.toString(16)),
+        destination.push(request),
+        destination.push('"></template>')
+      );
+    case 1:
+      segment.status = 2;
+      var r = !0,
+        chunks = segment.chunks,
+        chunkIdx = 0;
+      segment = segment.children;
+      for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+        for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+          destination.push(chunks[chunkIdx]);
+        r = flushSegment(request, destination, r, hoistableState);
+      }
+      for (; chunkIdx < chunks.length - 1; chunkIdx++)
+        destination.push(chunks[chunkIdx]);
+      chunkIdx < chunks.length && (r = destination.push(chunks[chunkIdx]));
+      return r;
+    default:
+      throw Error(
+        "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+      );
+  }
+}
+function flushSegment(request, destination, segment, hoistableState) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return flushSubtree(request, destination, segment, hoistableState);
+  boundary.parentFlushed = !0;
+  if (4 === boundary.status) {
+    if (!request.renderState.generateStaticMarkup) {
+      var errorDigest = boundary.errorDigest;
+      destination.push("\x3c!--$!--\x3e");
+      destination.push("<template");
+      errorDigest &&
+        (destination.push(' data-dgst="'),
+        (errorDigest = escapeTextForBrowser(errorDigest)),
+        destination.push(errorDigest),
+        destination.push('"'));
+      destination.push("></template>");
+    }
+    flushSubtree(request, destination, segment, hoistableState);
+    request.renderState.generateStaticMarkup
+      ? (destination = !0)
+      : ((request = boundary.fallbackPreamble) &&
+          writePreambleContribution(destination, request),
+        (destination = destination.push("\x3c!--/$--\x3e")));
+    return destination;
+  }
+  if (1 !== boundary.status)
+    return (
+      0 === boundary.status &&
+        (boundary.rootSegmentID = request.nextSegmentId++),
+      0 < boundary.completedSegments.length &&
+        request.partialBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      hoistableState &&
+        ((boundary = boundary.fallbackState),
+        boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        boundary.stylesheets.forEach(
+          hoistStylesheetDependency,
+          hoistableState
+        )),
+      flushSubtree(request, destination, segment, hoistableState),
+      destination.push("\x3c!--/$--\x3e")
+    );
+  if (boundary.byteSize > request.progressiveChunkSize)
+    return (
+      (boundary.rootSegmentID = request.nextSegmentId++),
+      request.completedBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      flushSubtree(request, destination, segment, hoistableState),
+      destination.push("\x3c!--/$--\x3e")
+    );
+  hoistableState &&
+    ((segment = boundary.contentState),
+    segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+    segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+  request.renderState.generateStaticMarkup ||
+    destination.push("\x3c!--$--\x3e");
+  segment = boundary.completedSegments;
+  if (1 !== segment.length)
+    throw Error(
+      "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+    );
+  flushSegment(request, destination, segment[0], hoistableState);
+  request.renderState.generateStaticMarkup
+    ? (destination = !0)
+    : ((request = boundary.contentPreamble) &&
+        writePreambleContribution(destination, request),
+      (destination = destination.push("\x3c!--/$--\x3e")));
+  return destination;
+}
+function flushSegmentContainer(request, destination, segment, hoistableState) {
+  writeStartSegment(
+    destination,
+    request.renderState,
+    segment.parentFormatContext,
+    segment.id
+  );
+  flushSegment(request, destination, segment, hoistableState);
+  return writeEndSegment(destination, segment.parentFormatContext);
+}
+function flushCompletedBoundary(request, destination, boundary) {
+  for (
+    var completedSegments = boundary.completedSegments, i = 0;
+    i < completedSegments.length;
+    i++
+  )
+    flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      completedSegments[i]
+    );
+  completedSegments.length = 0;
+  writeHoistablesForBoundary(
+    destination,
+    boundary.contentState,
+    request.renderState
+  );
+  completedSegments = request.resumableState;
+  request = request.renderState;
+  i = boundary.rootSegmentID;
+  boundary = boundary.contentState;
+  var requiresStyleInsertion = request.stylesToHoist;
+  request.stylesToHoist = !1;
+  destination.push(request.startInlineScript);
+  requiresStyleInsertion
+    ? 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 10),
+        destination.push(
+          '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+        ))
+      : 0 === (completedSegments.instructions & 8)
+        ? ((completedSegments.instructions |= 8),
+          destination.push(
+            '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+          ))
+        : destination.push('$RR("')
+    : 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 2),
+        destination.push(
+          '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("'
+        ))
+      : destination.push('$RC("');
+  completedSegments = i.toString(16);
+  destination.push(request.boundaryPrefix);
+  destination.push(completedSegments);
+  destination.push('","');
+  destination.push(request.segmentPrefix);
+  destination.push(completedSegments);
+  requiresStyleInsertion
+    ? (destination.push('",'),
+      writeStyleResourceDependenciesInJS(destination, boundary))
+    : destination.push('"');
+  boundary = destination.push(")\x3c/script>");
+  return writeBootstrap(destination, request) && boundary;
+}
+function flushPartiallyCompletedSegment(
+  request,
+  destination,
+  boundary,
+  segment
+) {
+  if (2 === segment.status) return !0;
+  var hoistableState = boundary.contentState,
+    segmentID = segment.id;
+  if (-1 === segmentID) {
+    if (-1 === (segment.id = boundary.rootSegmentID))
+      throw Error(
+        "A root segment ID must have been assigned by now. This is a bug in React."
+      );
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  }
+  if (segmentID === boundary.rootSegmentID)
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  flushSegmentContainer(request, destination, segment, hoistableState);
+  boundary = request.resumableState;
+  request = request.renderState;
+  destination.push(request.startInlineScript);
+  0 === (boundary.instructions & 1)
+    ? ((boundary.instructions |= 1),
+      destination.push(
+        '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("'
+      ))
+    : destination.push('$RS("');
+  destination.push(request.segmentPrefix);
+  segmentID = segmentID.toString(16);
+  destination.push(segmentID);
+  destination.push('","');
+  destination.push(request.placeholderPrefix);
+  destination.push(segmentID);
+  destination = destination.push('")\x3c/script>');
+  return destination;
+}
+function flushCompletedQueues(request, destination) {
+  try {
+    if (!(0 < request.pendingRootTasks)) {
+      var i,
+        completedRootSegment = request.completedRootSegment;
+      if (null !== completedRootSegment) {
+        if (5 === completedRootSegment.status) return;
+        var completedPreambleSegments = request.completedPreambleSegments;
+        if (null === completedPreambleSegments) return;
+        var renderState = request.renderState,
+          preamble = renderState.preamble,
+          htmlChunks = preamble.htmlChunks,
+          headChunks = preamble.headChunks,
+          i$jscomp$0;
+        if (htmlChunks) {
+          for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+            destination.push(htmlChunks[i$jscomp$0]);
+          if (headChunks)
+            for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+              destination.push(headChunks[i$jscomp$0]);
+          else {
+            var chunk = startChunkForTag("head");
+            destination.push(chunk);
+            destination.push(">");
+          }
+        } else if (headChunks)
+          for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+            destination.push(headChunks[i$jscomp$0]);
+        var charsetChunks = renderState.charsetChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++)
+          destination.push(charsetChunks[i$jscomp$0]);
+        charsetChunks.length = 0;
+        renderState.preconnects.forEach(flushResource, destination);
+        renderState.preconnects.clear();
+        var viewportChunks = renderState.viewportChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++)
+          destination.push(viewportChunks[i$jscomp$0]);
+        viewportChunks.length = 0;
+        renderState.fontPreloads.forEach(flushResource, destination);
+        renderState.fontPreloads.clear();
+        renderState.highImagePreloads.forEach(flushResource, destination);
+        renderState.highImagePreloads.clear();
+        renderState.styles.forEach(flushStylesInPreamble, destination);
+        var importMapChunks = renderState.importMapChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++)
+          destination.push(importMapChunks[i$jscomp$0]);
+        importMapChunks.length = 0;
+        renderState.bootstrapScripts.forEach(flushResource, destination);
+        renderState.scripts.forEach(flushResource, destination);
+        renderState.scripts.clear();
+        renderState.bulkPreloads.forEach(flushResource, destination);
+        renderState.bulkPreloads.clear();
+        var hoistableChunks = renderState.hoistableChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++)
+          destination.push(hoistableChunks[i$jscomp$0]);
+        for (
+          renderState = hoistableChunks.length = 0;
+          renderState < completedPreambleSegments.length;
+          renderState++
+        ) {
+          var segments = completedPreambleSegments[renderState];
+          for (preamble = 0; preamble < segments.length; preamble++)
+            flushSegment(request, destination, segments[preamble], null);
+        }
+        var preamble$jscomp$0 = request.renderState.preamble,
+          headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+        if (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) {
+          var chunk$jscomp$0 = endChunkForTag("head");
+          destination.push(chunk$jscomp$0);
+        }
+        var bodyChunks = preamble$jscomp$0.bodyChunks;
+        if (bodyChunks)
+          for (
+            completedPreambleSegments = 0;
+            completedPreambleSegments < bodyChunks.length;
+            completedPreambleSegments++
+          )
+            destination.push(bodyChunks[completedPreambleSegments]);
+        flushSegment(request, destination, completedRootSegment, null);
+        request.completedRootSegment = null;
+        writeBootstrap(destination, request.renderState);
+      }
+      var renderState$jscomp$0 = request.renderState;
+      completedRootSegment = 0;
+      var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < viewportChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        destination.push(viewportChunks$jscomp$0[completedRootSegment]);
+      viewportChunks$jscomp$0.length = 0;
+      renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+      renderState$jscomp$0.preconnects.clear();
+      renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.fontPreloads.clear();
+      renderState$jscomp$0.highImagePreloads.forEach(
+        flushResource,
+        destination
+      );
+      renderState$jscomp$0.highImagePreloads.clear();
+      renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+      renderState$jscomp$0.scripts.forEach(flushResource, destination);
+      renderState$jscomp$0.scripts.clear();
+      renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.bulkPreloads.clear();
+      var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < hoistableChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        destination.push(hoistableChunks$jscomp$0[completedRootSegment]);
+      hoistableChunks$jscomp$0.length = 0;
+      var clientRenderedBoundaries = request.clientRenderedBoundaries;
+      for (i = 0; i < clientRenderedBoundaries.length; i++) {
+        var boundary = clientRenderedBoundaries[i];
+        renderState$jscomp$0 = destination;
+        var resumableState = request.resumableState,
+          renderState$jscomp$1 = request.renderState,
+          id = boundary.rootSegmentID,
+          errorDigest = boundary.errorDigest;
+        renderState$jscomp$0.push(renderState$jscomp$1.startInlineScript);
+        0 === (resumableState.instructions & 4)
+          ? ((resumableState.instructions |= 4),
+            renderState$jscomp$0.push(
+              '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("'
+            ))
+          : renderState$jscomp$0.push('$RX("');
+        renderState$jscomp$0.push(renderState$jscomp$1.boundaryPrefix);
+        var chunk$jscomp$1 = id.toString(16);
+        renderState$jscomp$0.push(chunk$jscomp$1);
+        renderState$jscomp$0.push('"');
+        if (errorDigest) {
+          renderState$jscomp$0.push(",");
+          var chunk$jscomp$2 = escapeJSStringsForInstructionScripts(
+            errorDigest || ""
+          );
+          renderState$jscomp$0.push(chunk$jscomp$2);
+        }
+        var JSCompiler_inline_result =
+          renderState$jscomp$0.push(")\x3c/script>");
+        if (!JSCompiler_inline_result) {
+          request.destination = null;
+          i++;
+          clientRenderedBoundaries.splice(0, i);
+          return;
+        }
+      }
+      clientRenderedBoundaries.splice(0, i);
+      var completedBoundaries = request.completedBoundaries;
+      for (i = 0; i < completedBoundaries.length; i++)
+        if (
+          !flushCompletedBoundary(request, destination, completedBoundaries[i])
+        ) {
+          request.destination = null;
+          i++;
+          completedBoundaries.splice(0, i);
+          return;
+        }
+      completedBoundaries.splice(0, i);
+      var partialBoundaries = request.partialBoundaries;
+      for (i = 0; i < partialBoundaries.length; i++) {
+        var boundary$51 = partialBoundaries[i];
+        a: {
+          clientRenderedBoundaries = request;
+          boundary = destination;
+          var completedSegments = boundary$51.completedSegments;
+          for (
+            JSCompiler_inline_result = 0;
+            JSCompiler_inline_result < completedSegments.length;
+            JSCompiler_inline_result++
+          )
+            if (
+              !flushPartiallyCompletedSegment(
+                clientRenderedBoundaries,
+                boundary,
+                boundary$51,
+                completedSegments[JSCompiler_inline_result]
+              )
+            ) {
+              JSCompiler_inline_result++;
+              completedSegments.splice(0, JSCompiler_inline_result);
+              var JSCompiler_inline_result$jscomp$0 = !1;
+              break a;
+            }
+          completedSegments.splice(0, JSCompiler_inline_result);
+          JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+            boundary,
+            boundary$51.contentState,
+            clientRenderedBoundaries.renderState
+          );
+        }
+        if (!JSCompiler_inline_result$jscomp$0) {
+          request.destination = null;
+          i++;
+          partialBoundaries.splice(0, i);
+          return;
+        }
+      }
+      partialBoundaries.splice(0, i);
+      var largeBoundaries = request.completedBoundaries;
+      for (i = 0; i < largeBoundaries.length; i++)
+        if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) {
+          request.destination = null;
+          i++;
+          largeBoundaries.splice(0, i);
+          return;
+        }
+      largeBoundaries.splice(0, i);
+    }
+  } finally {
+    0 === request.allPendingTasks &&
+      0 === request.pingedTasks.length &&
+      0 === request.clientRenderedBoundaries.length &&
+      0 === request.completedBoundaries.length &&
+      ((request.flushScheduled = !1),
+      (i = request.resumableState),
+      i.hasBody &&
+        ((partialBoundaries = endChunkForTag("body")),
+        destination.push(partialBoundaries)),
+      i.hasHtml && ((i = endChunkForTag("html")), destination.push(i)),
+      (request.status = 14),
+      destination.push(null),
+      (request.destination = null));
+  }
+}
+function enqueueFlush(request) {
+  if (
+    !1 === request.flushScheduled &&
+    0 === request.pingedTasks.length &&
+    null !== request.destination
+  ) {
+    request.flushScheduled = !0;
+    var destination = request.destination;
+    destination
+      ? flushCompletedQueues(request, destination)
+      : (request.flushScheduled = !1);
+  }
+}
+function startFlowing(request, destination) {
+  if (13 === request.status)
+    (request.status = 14), destination.destroy(request.fatalError);
+  else if (14 !== request.status && null === request.destination) {
+    request.destination = destination;
+    try {
+      flushCompletedQueues(request, destination);
+    } catch (error) {
+      logRecoverableError(request, error, {}), fatalError(request, error);
+    }
+  }
+}
+function abort(request, reason) {
+  if (11 === request.status || 10 === request.status) request.status = 12;
+  try {
+    var abortableTasks = request.abortableTasks;
+    if (0 < abortableTasks.size) {
+      var error =
+        void 0 === reason
+          ? Error("The render was aborted by the server without a reason.")
+          : "object" === typeof reason &&
+              null !== reason &&
+              "function" === typeof reason.then
+            ? Error("The render was aborted by the server with a promise.")
+            : reason;
+      request.fatalError = error;
+      abortableTasks.forEach(function (task) {
+        return abortTask(task, request, error);
+      });
+      abortableTasks.clear();
+    }
+    null !== request.destination &&
+      flushCompletedQueues(request, request.destination);
+  } catch (error$53) {
+    logRecoverableError(request, error$53, {}), fatalError(request, error$53);
+  }
+}
+function onError() {}
+function renderToStringImpl(
+  children,
+  options,
+  generateStaticMarkup,
+  abortReason
+) {
+  var didFatal = !1,
+    fatalError = null,
+    result = "",
+    readyToStream = !1;
+  options = createResumableState(options ? options.identifierPrefix : void 0);
+  children = createRequest(
+    children,
+    options,
+    createRenderState(options, generateStaticMarkup),
+    createFormatContext(0, null, 0),
+    Infinity,
+    onError,
+    void 0,
+    function () {
+      readyToStream = !0;
+    },
+    void 0,
+    void 0,
+    void 0
+  );
+  children.flushScheduled = null !== children.destination;
+  performWork(children);
+  10 === children.status && (children.status = 11);
+  null === children.trackedPostpones &&
+    safelyEmitEarlyPreloads(children, 0 === children.pendingRootTasks);
+  abort(children, abortReason);
+  startFlowing(children, {
+    push: function (chunk) {
+      null !== chunk && (result += chunk);
+      return !0;
+    },
+    destroy: function (error) {
+      didFatal = !0;
+      fatalError = error;
+    }
+  });
+  if (didFatal && fatalError !== abortReason) throw fatalError;
+  if (!readyToStream)
+    throw Error(
+      "A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition."
+    );
+  return result;
+}
+exports.renderToStaticMarkup = function (children, options) {
+  return renderToStringImpl(
+    children,
+    options,
+    !0,
+    'The server used "renderToStaticMarkup" which does not support Suspense. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server'
+  );
+};
+exports.renderToString = function (children, options) {
+  return renderToStringImpl(
+    children,
+    options,
+    !1,
+    'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server'
+  );
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/cjs/react-dom-server.browser.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server.browser.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server.browser.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9424 @@
+/**
+ * @license React
+ * react-dom-server.browser.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+
+
+ JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
+
+ Copyright (c) 2011 Gary Court
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function styleReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+    }
+    function scriptReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+    }
+    function objectName(object) {
+      return Object.prototype.toString
+        .call(object)
+        .replace(/^\[object (.*)\]$/, function (m, p0) {
+          return p0;
+        });
+    }
+    function describeKeyForErrorMessage(key) {
+      var encodedKey = JSON.stringify(key);
+      return '"' + key + '"' === encodedKey ? key : encodedKey;
+    }
+    function describeValueForErrorMessage(value) {
+      switch (typeof value) {
+        case "string":
+          return JSON.stringify(
+            10 >= value.length ? value : value.slice(0, 10) + "..."
+          );
+        case "object":
+          if (isArrayImpl(value)) return "[...]";
+          if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG)
+            return "client";
+          value = objectName(value);
+          return "Object" === value ? "{...}" : value;
+        case "function":
+          return value.$$typeof === CLIENT_REFERENCE_TAG
+            ? "client"
+            : (value = value.displayName || value.name)
+              ? "function " + value
+              : "function";
+        default:
+          return String(value);
+      }
+    }
+    function describeElementType(type) {
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+      }
+      if ("object" === typeof type)
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeElementType(type.render);
+          case REACT_MEMO_TYPE:
+            return describeElementType(type.type);
+          case REACT_LAZY_TYPE:
+            var payload = type._payload;
+            type = type._init;
+            try {
+              return describeElementType(type(payload));
+            } catch (x) {}
+        }
+      return "";
+    }
+    function describeObjectForErrorMessage(objectOrArray, expandedName) {
+      var objKind = objectName(objectOrArray);
+      if ("Object" !== objKind && "Array" !== objKind) return objKind;
+      var start = -1,
+        length = 0;
+      if (isArrayImpl(objectOrArray))
+        if (jsxChildrenParents.has(objectOrArray)) {
+          var type = jsxChildrenParents.get(objectOrArray);
+          objKind = "<" + describeElementType(type) + ">";
+          for (var i = 0; i < objectOrArray.length; i++) {
+            var value = objectOrArray[i];
+            value =
+              "string" === typeof value
+                ? value
+                : "object" === typeof value && null !== value
+                  ? "{" + describeObjectForErrorMessage(value) + "}"
+                  : "{" + describeValueForErrorMessage(value) + "}";
+            "" + i === expandedName
+              ? ((start = objKind.length),
+                (length = value.length),
+                (objKind += value))
+              : (objKind =
+                  15 > value.length && 40 > objKind.length + value.length
+                    ? objKind + value
+                    : objKind + "{...}");
+          }
+          objKind += "</" + describeElementType(type) + ">";
+        } else {
+          objKind = "[";
+          for (type = 0; type < objectOrArray.length; type++)
+            0 < type && (objKind += ", "),
+              (i = objectOrArray[type]),
+              (i =
+                "object" === typeof i && null !== i
+                  ? describeObjectForErrorMessage(i)
+                  : describeValueForErrorMessage(i)),
+              "" + type === expandedName
+                ? ((start = objKind.length),
+                  (length = i.length),
+                  (objKind += i))
+                : (objKind =
+                    10 > i.length && 40 > objKind.length + i.length
+                      ? objKind + i
+                      : objKind + "...");
+          objKind += "]";
+        }
+      else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE)
+        objKind = "<" + describeElementType(objectOrArray.type) + "/>";
+      else {
+        if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return "client";
+        if (jsxPropsParents.has(objectOrArray)) {
+          objKind = jsxPropsParents.get(objectOrArray);
+          objKind = "<" + (describeElementType(objKind) || "...");
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++) {
+            objKind += " ";
+            value = type[i];
+            objKind += describeKeyForErrorMessage(value) + "=";
+            var _value2 = objectOrArray[value];
+            var _substr2 =
+              value === expandedName &&
+              "object" === typeof _value2 &&
+              null !== _value2
+                ? describeObjectForErrorMessage(_value2)
+                : describeValueForErrorMessage(_value2);
+            "string" !== typeof _value2 && (_substr2 = "{" + _substr2 + "}");
+            value === expandedName
+              ? ((start = objKind.length),
+                (length = _substr2.length),
+                (objKind += _substr2))
+              : (objKind =
+                  10 > _substr2.length && 40 > objKind.length + _substr2.length
+                    ? objKind + _substr2
+                    : objKind + "...");
+          }
+          objKind += ">";
+        } else {
+          objKind = "{";
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++)
+            0 < i && (objKind += ", "),
+              (value = type[i]),
+              (objKind += describeKeyForErrorMessage(value) + ": "),
+              (_value2 = objectOrArray[value]),
+              (_value2 =
+                "object" === typeof _value2 && null !== _value2
+                  ? describeObjectForErrorMessage(_value2)
+                  : describeValueForErrorMessage(_value2)),
+              value === expandedName
+                ? ((start = objKind.length),
+                  (length = _value2.length),
+                  (objKind += _value2))
+                : (objKind =
+                    10 > _value2.length && 40 > objKind.length + _value2.length
+                      ? objKind + _value2
+                      : objKind + "...");
+          objKind += "}";
+        }
+      }
+      return void 0 === expandedName
+        ? objKind
+        : -1 < start && 0 < length
+          ? ((objectOrArray = " ".repeat(start) + "^".repeat(length)),
+            "\n  " + objKind + "\n  " + objectOrArray)
+          : "\n  " + objKind;
+    }
+    function murmurhash3_32_gc(key, seed) {
+      var remainder = key.length & 3;
+      var bytes = key.length - remainder;
+      var h1 = seed;
+      for (seed = 0; seed < bytes; ) {
+        var k1 =
+          (key.charCodeAt(seed) & 255) |
+          ((key.charCodeAt(++seed) & 255) << 8) |
+          ((key.charCodeAt(++seed) & 255) << 16) |
+          ((key.charCodeAt(++seed) & 255) << 24);
+        ++seed;
+        k1 =
+          (3432918353 * (k1 & 65535) +
+            (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295;
+        k1 = (k1 << 15) | (k1 >>> 17);
+        k1 =
+          (461845907 * (k1 & 65535) +
+            (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295;
+        h1 ^= k1;
+        h1 = (h1 << 13) | (h1 >>> 19);
+        h1 =
+          (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295;
+        h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16);
+      }
+      k1 = 0;
+      switch (remainder) {
+        case 3:
+          k1 ^= (key.charCodeAt(seed + 2) & 255) << 16;
+        case 2:
+          k1 ^= (key.charCodeAt(seed + 1) & 255) << 8;
+        case 1:
+          (k1 ^= key.charCodeAt(seed) & 255),
+            (k1 =
+              (3432918353 * (k1 & 65535) +
+                (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+              4294967295),
+            (k1 = (k1 << 15) | (k1 >>> 17)),
+            (h1 ^=
+              (461845907 * (k1 & 65535) +
+                (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+              4294967295);
+      }
+      h1 ^= key.length;
+      h1 ^= h1 >>> 16;
+      h1 =
+        (2246822507 * (h1 & 65535) +
+          (((2246822507 * (h1 >>> 16)) & 65535) << 16)) &
+        4294967295;
+      h1 ^= h1 >>> 13;
+      h1 =
+        (3266489909 * (h1 & 65535) +
+          (((3266489909 * (h1 >>> 16)) & 65535) << 16)) &
+        4294967295;
+      return (h1 ^ (h1 >>> 16)) >>> 0;
+    }
+    function scheduleWork(callback) {
+      taskQueue.push(callback);
+      channel.port2.postMessage(null);
+    }
+    function handleErrorInNextTick(error) {
+      setTimeout(function () {
+        throw error;
+      });
+    }
+    function writeChunk(destination, chunk) {
+      if (0 !== chunk.byteLength)
+        if (2048 < chunk.byteLength)
+          0 < writtenBytes &&
+            (destination.enqueue(
+              new Uint8Array(currentView.buffer, 0, writtenBytes)
+            ),
+            (currentView = new Uint8Array(2048)),
+            (writtenBytes = 0)),
+            destination.enqueue(chunk);
+        else {
+          var allowableBytes = currentView.length - writtenBytes;
+          allowableBytes < chunk.byteLength &&
+            (0 === allowableBytes
+              ? destination.enqueue(currentView)
+              : (currentView.set(
+                  chunk.subarray(0, allowableBytes),
+                  writtenBytes
+                ),
+                destination.enqueue(currentView),
+                (chunk = chunk.subarray(allowableBytes))),
+            (currentView = new Uint8Array(2048)),
+            (writtenBytes = 0));
+          currentView.set(chunk, writtenBytes);
+          writtenBytes += chunk.byteLength;
+        }
+    }
+    function writeChunkAndReturn(destination, chunk) {
+      writeChunk(destination, chunk);
+      return !0;
+    }
+    function completeWriting(destination) {
+      currentView &&
+        0 < writtenBytes &&
+        (destination.enqueue(
+          new Uint8Array(currentView.buffer, 0, writtenBytes)
+        ),
+        (currentView = null),
+        (writtenBytes = 0));
+    }
+    function stringToChunk(content) {
+      return textEncoder.encode(content);
+    }
+    function stringToPrecomputedChunk(content) {
+      content = textEncoder.encode(content);
+      2048 < content.byteLength &&
+        console.error(
+          "precomputed chunks must be smaller than the view size configured for this host. This is a bug in React."
+        );
+      return content;
+    }
+    function closeWithError(destination, error) {
+      "function" === typeof destination.error
+        ? destination.error(error)
+        : destination.close();
+    }
+    function typeName(value) {
+      return (
+        ("function" === typeof Symbol &&
+          Symbol.toStringTag &&
+          value[Symbol.toStringTag]) ||
+        value.constructor.name ||
+        "Object"
+      );
+    }
+    function willCoercionThrow(value) {
+      try {
+        return testStringCoercion(value), !1;
+      } catch (e) {
+        return !0;
+      }
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkAttributeStringCoercion(value, attributeName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",
+            attributeName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkCSSPropertyStringCoercion(value, propName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",
+            propName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkHtmlStringCoercion(value) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.",
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function isAttributeNameSafe(attributeName) {
+      if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+        return !0;
+      if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))
+        return !1;
+      if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+        return (validatedAttributeNameCache[attributeName] = !0);
+      illegalAttributeNameCache[attributeName] = !0;
+      console.error("Invalid attribute name: `%s`", attributeName);
+      return !1;
+    }
+    function checkControlledValueProps(tagName, props) {
+      hasReadOnlyValue[props.type] ||
+        props.onChange ||
+        props.onInput ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.value ||
+        ("select" === tagName
+          ? console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`."
+            )
+          : console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."
+            ));
+      props.onChange ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.checked ||
+        console.error(
+          "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`."
+        );
+    }
+    function validateProperty$1(tagName, name) {
+      if (
+        hasOwnProperty.call(warnedProperties$1, name) &&
+        warnedProperties$1[name]
+      )
+        return !0;
+      if (rARIACamel$1.test(name)) {
+        tagName = "aria-" + name.slice(4).toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.",
+              name
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+        if (name !== tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. Did you mean `%s`?",
+              name,
+              tagName
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+      }
+      if (rARIA$1.test(name)) {
+        tagName = name.toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName) return (warnedProperties$1[name] = !0), !1;
+        name !== tagName &&
+          (console.error(
+            "Unknown ARIA attribute `%s`. Did you mean `%s`?",
+            name,
+            tagName
+          ),
+          (warnedProperties$1[name] = !0));
+      }
+      return !0;
+    }
+    function validateProperties$2(type, props) {
+      var invalidProps = [],
+        key;
+      for (key in props)
+        validateProperty$1(type, key) || invalidProps.push(key);
+      props = invalidProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === invalidProps.length
+        ? console.error(
+            "Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          )
+        : 1 < invalidProps.length &&
+          console.error(
+            "Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          );
+    }
+    function validateProperty(tagName, name, value, eventRegistry) {
+      if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])
+        return !0;
+      var lowerCasedName = name.toLowerCase();
+      if ("onfocusin" === lowerCasedName || "onfocusout" === lowerCasedName)
+        return (
+          console.error(
+            "React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "function" === typeof value &&
+        (("form" === tagName && "action" === name) ||
+          ("input" === tagName && "formAction" === name) ||
+          ("button" === tagName && "formAction" === name))
+      )
+        return !0;
+      if (null != eventRegistry) {
+        tagName = eventRegistry.possibleRegistrationNames;
+        if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))
+          return !0;
+        eventRegistry = tagName.hasOwnProperty(lowerCasedName)
+          ? tagName[lowerCasedName]
+          : null;
+        if (null != eventRegistry)
+          return (
+            console.error(
+              "Invalid event handler property `%s`. Did you mean `%s`?",
+              name,
+              eventRegistry
+            ),
+            (warnedProperties[name] = !0)
+          );
+        if (EVENT_NAME_REGEX.test(name))
+          return (
+            console.error(
+              "Unknown event handler property `%s`. It will be ignored.",
+              name
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (EVENT_NAME_REGEX.test(name))
+        return (
+          INVALID_EVENT_NAME_REGEX.test(name) &&
+            console.error(
+              "Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.",
+              name
+            ),
+          (warnedProperties[name] = !0)
+        );
+      if (rARIA.test(name) || rARIACamel.test(name)) return !0;
+      if ("innerhtml" === lowerCasedName)
+        return (
+          console.error(
+            "Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("aria" === lowerCasedName)
+        return (
+          console.error(
+            "The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "is" === lowerCasedName &&
+        null !== value &&
+        void 0 !== value &&
+        "string" !== typeof value
+      )
+        return (
+          console.error(
+            "Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.",
+            typeof value
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("number" === typeof value && isNaN(value))
+        return (
+          console.error(
+            "Received NaN for the `%s` attribute. If this is expected, cast the value to a string.",
+            name
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
+        if (
+          ((lowerCasedName = possibleStandardNames[lowerCasedName]),
+          lowerCasedName !== name)
+        )
+          return (
+            console.error(
+              "Invalid DOM property `%s`. Did you mean `%s`?",
+              name,
+              lowerCasedName
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (name !== lowerCasedName)
+        return (
+          console.error(
+            "React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.",
+            name,
+            lowerCasedName
+          ),
+          (warnedProperties[name] = !0)
+        );
+      switch (name) {
+        case "dangerouslySetInnerHTML":
+        case "children":
+        case "style":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "ref":
+          return !0;
+        case "innerText":
+        case "textContent":
+          return !0;
+      }
+      switch (typeof value) {
+        case "boolean":
+          switch (name) {
+            case "autoFocus":
+            case "checked":
+            case "multiple":
+            case "muted":
+            case "selected":
+            case "contentEditable":
+            case "spellCheck":
+            case "draggable":
+            case "value":
+            case "autoReverse":
+            case "externalResourcesRequired":
+            case "focusable":
+            case "preserveAlpha":
+            case "allowFullScreen":
+            case "async":
+            case "autoPlay":
+            case "controls":
+            case "default":
+            case "defer":
+            case "disabled":
+            case "disablePictureInPicture":
+            case "disableRemotePlayback":
+            case "formNoValidate":
+            case "hidden":
+            case "loop":
+            case "noModule":
+            case "noValidate":
+            case "open":
+            case "playsInline":
+            case "readOnly":
+            case "required":
+            case "reversed":
+            case "scoped":
+            case "seamless":
+            case "itemScope":
+            case "capture":
+            case "download":
+            case "inert":
+              return !0;
+            default:
+              lowerCasedName = name.toLowerCase().slice(0, 5);
+              if ("data-" === lowerCasedName || "aria-" === lowerCasedName)
+                return !0;
+              value
+                ? console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name
+                  )
+                : console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name,
+                    name,
+                    name
+                  );
+              return (warnedProperties[name] = !0);
+          }
+        case "function":
+        case "symbol":
+          return (warnedProperties[name] = !0), !1;
+        case "string":
+          if ("false" === value || "true" === value) {
+            switch (name) {
+              case "checked":
+              case "selected":
+              case "multiple":
+              case "muted":
+              case "allowFullScreen":
+              case "async":
+              case "autoPlay":
+              case "controls":
+              case "default":
+              case "defer":
+              case "disabled":
+              case "disablePictureInPicture":
+              case "disableRemotePlayback":
+              case "formNoValidate":
+              case "hidden":
+              case "loop":
+              case "noModule":
+              case "noValidate":
+              case "open":
+              case "playsInline":
+              case "readOnly":
+              case "required":
+              case "reversed":
+              case "scoped":
+              case "seamless":
+              case "itemScope":
+              case "inert":
+                break;
+              default:
+                return !0;
+            }
+            console.error(
+              "Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?",
+              value,
+              name,
+              "false" === value
+                ? "The browser will interpret it as a truthy value."
+                : 'Although this works, it will not work as expected if you pass the string "false".',
+              name,
+              value
+            );
+            warnedProperties[name] = !0;
+          }
+      }
+      return !0;
+    }
+    function warnUnknownProperties(type, props, eventRegistry) {
+      var unknownProps = [],
+        key;
+      for (key in props)
+        validateProperty(type, key, props[key], eventRegistry) ||
+          unknownProps.push(key);
+      props = unknownProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === unknownProps.length
+        ? console.error(
+            "Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          )
+        : 1 < unknownProps.length &&
+          console.error(
+            "Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          );
+    }
+    function camelize(string) {
+      return string.replace(hyphenPattern, function (_, character) {
+        return character.toUpperCase();
+      });
+    }
+    function escapeTextForBrowser(text) {
+      if (
+        "boolean" === typeof text ||
+        "number" === typeof text ||
+        "bigint" === typeof text
+      )
+        return "" + text;
+      checkHtmlStringCoercion(text);
+      text = "" + text;
+      var match = matchHtmlRegExp.exec(text);
+      if (match) {
+        var html = "",
+          index,
+          lastIndex = 0;
+        for (index = match.index; index < text.length; index++) {
+          switch (text.charCodeAt(index)) {
+            case 34:
+              match = "&quot;";
+              break;
+            case 38:
+              match = "&amp;";
+              break;
+            case 39:
+              match = "&#x27;";
+              break;
+            case 60:
+              match = "&lt;";
+              break;
+            case 62:
+              match = "&gt;";
+              break;
+            default:
+              continue;
+          }
+          lastIndex !== index && (html += text.slice(lastIndex, index));
+          lastIndex = index + 1;
+          html += match;
+        }
+        text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+      }
+      return text;
+    }
+    function sanitizeURL(url) {
+      return isJavaScriptProtocol.test("" + url)
+        ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+        : url;
+    }
+    function escapeEntireInlineScriptContent(scriptText) {
+      checkHtmlStringCoercion(scriptText);
+      return ("" + scriptText).replace(scriptRegex, scriptReplacer);
+    }
+    function createRenderState(
+      resumableState,
+      nonce,
+      externalRuntimeConfig,
+      importMap,
+      onHeaders,
+      maxHeadersLength
+    ) {
+      var inlineScriptWithNonce =
+          void 0 === nonce
+            ? startInlineScript
+            : stringToPrecomputedChunk(
+                '<script nonce="' + escapeTextForBrowser(nonce) + '">'
+              ),
+        idPrefix = resumableState.idPrefix;
+      externalRuntimeConfig = [];
+      var bootstrapScriptContent = resumableState.bootstrapScriptContent,
+        bootstrapScripts = resumableState.bootstrapScripts,
+        bootstrapModules = resumableState.bootstrapModules;
+      void 0 !== bootstrapScriptContent &&
+        externalRuntimeConfig.push(
+          inlineScriptWithNonce,
+          stringToChunk(
+            escapeEntireInlineScriptContent(bootstrapScriptContent)
+          ),
+          endInlineScript
+        );
+      bootstrapScriptContent = [];
+      void 0 !== importMap &&
+        (bootstrapScriptContent.push(importMapScriptStart),
+        bootstrapScriptContent.push(
+          stringToChunk(
+            escapeEntireInlineScriptContent(JSON.stringify(importMap))
+          )
+        ),
+        bootstrapScriptContent.push(importMapScriptEnd));
+      onHeaders &&
+        "number" === typeof maxHeadersLength &&
+        0 >= maxHeadersLength &&
+        console.error(
+          "React expected a positive non-zero `maxHeadersLength` option but found %s instead. When using the `onHeaders` option you may supply an optional `maxHeadersLength` option as well however, when setting this value to zero or less no headers will be captured.",
+          0 === maxHeadersLength ? "zero" : maxHeadersLength
+        );
+      importMap = onHeaders
+        ? {
+            preconnects: "",
+            fontPreloads: "",
+            highImagePreloads: "",
+            remainingCapacity:
+              2 +
+              ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3)
+          }
+        : null;
+      onHeaders = {
+        placeholderPrefix: stringToPrecomputedChunk(idPrefix + "P:"),
+        segmentPrefix: stringToPrecomputedChunk(idPrefix + "S:"),
+        boundaryPrefix: stringToPrecomputedChunk(idPrefix + "B:"),
+        startInlineScript: inlineScriptWithNonce,
+        preamble: createPreambleState(),
+        externalRuntimeScript: null,
+        bootstrapChunks: externalRuntimeConfig,
+        importMapChunks: bootstrapScriptContent,
+        onHeaders: onHeaders,
+        headers: importMap,
+        resets: {
+          font: {},
+          dns: {},
+          connect: { default: {}, anonymous: {}, credentials: {} },
+          image: {},
+          style: {}
+        },
+        charsetChunks: [],
+        viewportChunks: [],
+        hoistableChunks: [],
+        preconnects: new Set(),
+        fontPreloads: new Set(),
+        highImagePreloads: new Set(),
+        styles: new Map(),
+        bootstrapScripts: new Set(),
+        scripts: new Set(),
+        bulkPreloads: new Set(),
+        preloads: {
+          images: new Map(),
+          stylesheets: new Map(),
+          scripts: new Map(),
+          moduleScripts: new Map()
+        },
+        nonce: nonce,
+        hoistableState: null,
+        stylesToHoist: !1
+      };
+      if (void 0 !== bootstrapScripts)
+        for (importMap = 0; importMap < bootstrapScripts.length; importMap++) {
+          maxHeadersLength = bootstrapScripts[importMap];
+          bootstrapScriptContent = idPrefix = void 0;
+          var props = {
+            rel: "preload",
+            as: "script",
+            fetchPriority: "low",
+            nonce: nonce
+          };
+          "string" === typeof maxHeadersLength
+            ? (props.href = inlineScriptWithNonce = maxHeadersLength)
+            : ((props.href = inlineScriptWithNonce = maxHeadersLength.src),
+              (props.integrity = bootstrapScriptContent =
+                "string" === typeof maxHeadersLength.integrity
+                  ? maxHeadersLength.integrity
+                  : void 0),
+              (props.crossOrigin = idPrefix =
+                "string" === typeof maxHeadersLength ||
+                null == maxHeadersLength.crossOrigin
+                  ? void 0
+                  : "use-credentials" === maxHeadersLength.crossOrigin
+                    ? "use-credentials"
+                    : ""));
+          preloadBootstrapScriptOrModule(
+            resumableState,
+            onHeaders,
+            inlineScriptWithNonce,
+            props
+          );
+          externalRuntimeConfig.push(
+            startScriptSrc,
+            stringToChunk(escapeTextForBrowser(inlineScriptWithNonce))
+          );
+          nonce &&
+            externalRuntimeConfig.push(
+              scriptNonce,
+              stringToChunk(escapeTextForBrowser(nonce))
+            );
+          "string" === typeof bootstrapScriptContent &&
+            externalRuntimeConfig.push(
+              scriptIntegirty,
+              stringToChunk(escapeTextForBrowser(bootstrapScriptContent))
+            );
+          "string" === typeof idPrefix &&
+            externalRuntimeConfig.push(
+              scriptCrossOrigin,
+              stringToChunk(escapeTextForBrowser(idPrefix))
+            );
+          externalRuntimeConfig.push(endAsyncScript);
+        }
+      if (void 0 !== bootstrapModules)
+        for (
+          bootstrapScripts = 0;
+          bootstrapScripts < bootstrapModules.length;
+          bootstrapScripts++
+        )
+          (importMap = bootstrapModules[bootstrapScripts]),
+            (idPrefix = inlineScriptWithNonce = void 0),
+            (bootstrapScriptContent = {
+              rel: "modulepreload",
+              fetchPriority: "low",
+              nonce: nonce
+            }),
+            "string" === typeof importMap
+              ? (bootstrapScriptContent.href = maxHeadersLength = importMap)
+              : ((bootstrapScriptContent.href = maxHeadersLength =
+                  importMap.src),
+                (bootstrapScriptContent.integrity = idPrefix =
+                  "string" === typeof importMap.integrity
+                    ? importMap.integrity
+                    : void 0),
+                (bootstrapScriptContent.crossOrigin = inlineScriptWithNonce =
+                  "string" === typeof importMap || null == importMap.crossOrigin
+                    ? void 0
+                    : "use-credentials" === importMap.crossOrigin
+                      ? "use-credentials"
+                      : "")),
+            preloadBootstrapScriptOrModule(
+              resumableState,
+              onHeaders,
+              maxHeadersLength,
+              bootstrapScriptContent
+            ),
+            externalRuntimeConfig.push(
+              startModuleSrc,
+              stringToChunk(escapeTextForBrowser(maxHeadersLength))
+            ),
+            nonce &&
+              externalRuntimeConfig.push(
+                scriptNonce,
+                stringToChunk(escapeTextForBrowser(nonce))
+              ),
+            "string" === typeof idPrefix &&
+              externalRuntimeConfig.push(
+                scriptIntegirty,
+                stringToChunk(escapeTextForBrowser(idPrefix))
+              ),
+            "string" === typeof inlineScriptWithNonce &&
+              externalRuntimeConfig.push(
+                scriptCrossOrigin,
+                stringToChunk(escapeTextForBrowser(inlineScriptWithNonce))
+              ),
+            externalRuntimeConfig.push(endAsyncScript);
+      return onHeaders;
+    }
+    function createResumableState(
+      identifierPrefix,
+      externalRuntimeConfig,
+      bootstrapScriptContent,
+      bootstrapScripts,
+      bootstrapModules
+    ) {
+      return {
+        idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+        nextFormID: 0,
+        streamingFormat: 0,
+        bootstrapScriptContent: bootstrapScriptContent,
+        bootstrapScripts: bootstrapScripts,
+        bootstrapModules: bootstrapModules,
+        instructions: NothingSent,
+        hasBody: !1,
+        hasHtml: !1,
+        unknownResources: {},
+        dnsResources: {},
+        connectResources: { default: {}, anonymous: {}, credentials: {} },
+        imageResources: {},
+        styleResources: {},
+        scriptResources: {},
+        moduleUnknownResources: {},
+        moduleScriptResources: {}
+      };
+    }
+    function createPreambleState() {
+      return {
+        htmlChunks: null,
+        headChunks: null,
+        bodyChunks: null,
+        contribution: NoContribution
+      };
+    }
+    function createFormatContext(insertionMode, selectedValue, tagScope) {
+      return {
+        insertionMode: insertionMode,
+        selectedValue: selectedValue,
+        tagScope: tagScope
+      };
+    }
+    function createRootFormatContext(namespaceURI) {
+      return createFormatContext(
+        "http://www.w3.org/2000/svg" === namespaceURI
+          ? SVG_MODE
+          : "http://www.w3.org/1998/Math/MathML" === namespaceURI
+            ? MATHML_MODE
+            : ROOT_HTML_MODE,
+        null,
+        0
+      );
+    }
+    function getChildFormatContext(parentContext, type, props) {
+      switch (type) {
+        case "noscript":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 1
+          );
+        case "select":
+          return createFormatContext(
+            HTML_MODE,
+            null != props.value ? props.value : props.defaultValue,
+            parentContext.tagScope
+          );
+        case "svg":
+          return createFormatContext(SVG_MODE, null, parentContext.tagScope);
+        case "picture":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 2
+          );
+        case "math":
+          return createFormatContext(MATHML_MODE, null, parentContext.tagScope);
+        case "foreignObject":
+          return createFormatContext(HTML_MODE, null, parentContext.tagScope);
+        case "table":
+          return createFormatContext(
+            HTML_TABLE_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "thead":
+        case "tbody":
+        case "tfoot":
+          return createFormatContext(
+            HTML_TABLE_BODY_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "colgroup":
+          return createFormatContext(
+            HTML_COLGROUP_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "tr":
+          return createFormatContext(
+            HTML_TABLE_ROW_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "head":
+          if (parentContext.insertionMode < HTML_MODE)
+            return createFormatContext(
+              HTML_HEAD_MODE,
+              null,
+              parentContext.tagScope
+            );
+          break;
+        case "html":
+          if (parentContext.insertionMode === ROOT_HTML_MODE)
+            return createFormatContext(
+              HTML_HTML_MODE,
+              null,
+              parentContext.tagScope
+            );
+      }
+      return parentContext.insertionMode >= HTML_TABLE_MODE ||
+        parentContext.insertionMode < HTML_MODE
+        ? createFormatContext(HTML_MODE, null, parentContext.tagScope)
+        : parentContext;
+    }
+    function pushTextInstance(target, text, renderState, textEmbedded) {
+      if ("" === text) return textEmbedded;
+      textEmbedded && target.push(textSeparator);
+      target.push(stringToChunk(escapeTextForBrowser(text)));
+      return !0;
+    }
+    function pushStyleAttribute(target, style) {
+      if ("object" !== typeof style)
+        throw Error(
+          "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+        );
+      var isFirst = !0,
+        styleName;
+      for (styleName in style)
+        if (hasOwnProperty.call(style, styleName)) {
+          var styleValue = style[styleName];
+          if (
+            null != styleValue &&
+            "boolean" !== typeof styleValue &&
+            "" !== styleValue
+          ) {
+            if (0 === styleName.indexOf("--")) {
+              var nameChunk = stringToChunk(escapeTextForBrowser(styleName));
+              checkCSSPropertyStringCoercion(styleValue, styleName);
+              styleValue = stringToChunk(
+                escapeTextForBrowser(("" + styleValue).trim())
+              );
+            } else {
+              nameChunk = styleName;
+              var value = styleValue;
+              if (-1 < nameChunk.indexOf("-")) {
+                var name = nameChunk;
+                (warnedStyleNames.hasOwnProperty(name) &&
+                  warnedStyleNames[name]) ||
+                  ((warnedStyleNames[name] = !0),
+                  console.error(
+                    "Unsupported style property %s. Did you mean %s?",
+                    name,
+                    camelize(name.replace(msPattern$1, "ms-"))
+                  ));
+              } else if (badVendoredStyleNamePattern.test(nameChunk))
+                (name = nameChunk),
+                  (warnedStyleNames.hasOwnProperty(name) &&
+                    warnedStyleNames[name]) ||
+                    ((warnedStyleNames[name] = !0),
+                    console.error(
+                      "Unsupported vendor-prefixed style property %s. Did you mean %s?",
+                      name,
+                      name.charAt(0).toUpperCase() + name.slice(1)
+                    ));
+              else if (badStyleValueWithSemicolonPattern.test(value)) {
+                name = nameChunk;
+                var value$jscomp$0 = value;
+                (warnedStyleValues.hasOwnProperty(value$jscomp$0) &&
+                  warnedStyleValues[value$jscomp$0]) ||
+                  ((warnedStyleValues[value$jscomp$0] = !0),
+                  console.error(
+                    'Style property values shouldn\'t contain a semicolon. Try "%s: %s" instead.',
+                    name,
+                    value$jscomp$0.replace(
+                      badStyleValueWithSemicolonPattern,
+                      ""
+                    )
+                  ));
+              }
+              "number" === typeof value &&
+                (isNaN(value)
+                  ? warnedForNaNValue ||
+                    ((warnedForNaNValue = !0),
+                    console.error(
+                      "`NaN` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    ))
+                  : isFinite(value) ||
+                    warnedForInfinityValue ||
+                    ((warnedForInfinityValue = !0),
+                    console.error(
+                      "`Infinity` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    )));
+              nameChunk = styleName;
+              value = styleNameCache.get(nameChunk);
+              void 0 !== value
+                ? (nameChunk = value)
+                : ((value = stringToPrecomputedChunk(
+                    escapeTextForBrowser(
+                      nameChunk
+                        .replace(uppercasePattern, "-$1")
+                        .toLowerCase()
+                        .replace(msPattern, "-ms-")
+                    )
+                  )),
+                  styleNameCache.set(nameChunk, value),
+                  (nameChunk = value));
+              "number" === typeof styleValue
+                ? (styleValue =
+                    0 === styleValue || unitlessNumbers.has(styleName)
+                      ? stringToChunk("" + styleValue)
+                      : stringToChunk(styleValue + "px"))
+                : (checkCSSPropertyStringCoercion(styleValue, styleName),
+                  (styleValue = stringToChunk(
+                    escapeTextForBrowser(("" + styleValue).trim())
+                  )));
+            }
+            isFirst
+              ? ((isFirst = !1),
+                target.push(
+                  styleAttributeStart,
+                  nameChunk,
+                  styleAssign,
+                  styleValue
+                ))
+              : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+          }
+        }
+      isFirst || target.push(attributeEnd);
+    }
+    function pushBooleanAttribute(target, name, value) {
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeEmptyString
+        );
+    }
+    function pushStringAttribute(target, name, value) {
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        "boolean" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeAssign,
+          stringToChunk(escapeTextForBrowser(value)),
+          attributeEnd
+        );
+    }
+    function pushAdditionalFormField(value, key) {
+      this.push(startHiddenInputChunk);
+      validateAdditionalFormField(value);
+      pushStringAttribute(this, "name", key);
+      pushStringAttribute(this, "value", value);
+      this.push(endOfStartTagSelfClosing);
+    }
+    function validateAdditionalFormField(value) {
+      if ("string" !== typeof value)
+        throw Error(
+          "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+        );
+    }
+    function getCustomFormFields(resumableState, formAction) {
+      if ("function" === typeof formAction.$$FORM_ACTION) {
+        var id = resumableState.nextFormID++;
+        resumableState = resumableState.idPrefix + id;
+        try {
+          var customFields = formAction.$$FORM_ACTION(resumableState);
+          if (customFields) {
+            var formData = customFields.data;
+            null != formData && formData.forEach(validateAdditionalFormField);
+          }
+          return customFields;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            "function" === typeof x.then
+          )
+            throw x;
+          console.error(
+            "Failed to serialize an action for progressive enhancement:\n%s",
+            x
+          );
+        }
+      }
+      return null;
+    }
+    function pushFormActionAttribute(
+      target,
+      resumableState,
+      renderState,
+      formAction,
+      formEncType,
+      formMethod,
+      formTarget,
+      name
+    ) {
+      var formData = null;
+      if ("function" === typeof formAction) {
+        null === name ||
+          didWarnFormActionName ||
+          ((didWarnFormActionName = !0),
+          console.error(
+            'Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'
+          ));
+        (null === formEncType && null === formMethod) ||
+          didWarnFormActionMethod ||
+          ((didWarnFormActionMethod = !0),
+          console.error(
+            "Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden."
+          ));
+        null === formTarget ||
+          didWarnFormActionTarget ||
+          ((didWarnFormActionTarget = !0),
+          console.error(
+            "Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window."
+          ));
+        var customFields = getCustomFormFields(resumableState, formAction);
+        null !== customFields
+          ? ((name = customFields.name),
+            (formAction = customFields.action || ""),
+            (formEncType = customFields.encType),
+            (formMethod = customFields.method),
+            (formTarget = customFields.target),
+            (formData = customFields.data))
+          : (target.push(
+              attributeSeparator,
+              stringToChunk("formAction"),
+              attributeAssign,
+              actionJavaScriptURL,
+              attributeEnd
+            ),
+            (formTarget = formMethod = formEncType = formAction = name = null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != name && pushAttribute(target, "name", name);
+      null != formAction && pushAttribute(target, "formAction", formAction);
+      null != formEncType && pushAttribute(target, "formEncType", formEncType);
+      null != formMethod && pushAttribute(target, "formMethod", formMethod);
+      null != formTarget && pushAttribute(target, "formTarget", formTarget);
+      return formData;
+    }
+    function pushAttribute(target, name, value) {
+      switch (name) {
+        case "className":
+          pushStringAttribute(target, "class", value);
+          break;
+        case "tabIndex":
+          pushStringAttribute(target, "tabindex", value);
+          break;
+        case "dir":
+        case "role":
+        case "viewBox":
+        case "width":
+        case "height":
+          pushStringAttribute(target, name, value);
+          break;
+        case "style":
+          pushStyleAttribute(target, value);
+          break;
+        case "src":
+        case "href":
+          if ("" === value) {
+            "src" === name
+              ? console.error(
+                  'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                )
+              : console.error(
+                  'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                );
+            break;
+          }
+        case "action":
+        case "formAction":
+          if (
+            null == value ||
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            stringToChunk(name),
+            attributeAssign,
+            stringToChunk(escapeTextForBrowser(value)),
+            attributeEnd
+          );
+          break;
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "ref":
+          break;
+        case "autoFocus":
+        case "multiple":
+        case "muted":
+          pushBooleanAttribute(target, name.toLowerCase(), value);
+          break;
+        case "xlinkHref":
+          if (
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            stringToChunk("xlink:href"),
+            attributeAssign,
+            stringToChunk(escapeTextForBrowser(value)),
+            attributeEnd
+          );
+          break;
+        case "contentEditable":
+        case "spellCheck":
+        case "draggable":
+        case "value":
+        case "autoReverse":
+        case "externalResourcesRequired":
+        case "focusable":
+        case "preserveAlpha":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(
+              attributeSeparator,
+              stringToChunk(name),
+              attributeAssign,
+              stringToChunk(escapeTextForBrowser(value)),
+              attributeEnd
+            );
+          break;
+        case "inert":
+          "" !== value ||
+            didWarnForNewBooleanPropsWithEmptyValue[name] ||
+            ((didWarnForNewBooleanPropsWithEmptyValue[name] = !0),
+            console.error(
+              "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+              name
+            ));
+        case "allowFullScreen":
+        case "async":
+        case "autoPlay":
+        case "controls":
+        case "default":
+        case "defer":
+        case "disabled":
+        case "disablePictureInPicture":
+        case "disableRemotePlayback":
+        case "formNoValidate":
+        case "hidden":
+        case "loop":
+        case "noModule":
+        case "noValidate":
+        case "open":
+        case "playsInline":
+        case "readOnly":
+        case "required":
+        case "reversed":
+        case "scoped":
+        case "seamless":
+        case "itemScope":
+          value &&
+            "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(
+              attributeSeparator,
+              stringToChunk(name),
+              attributeEmptyString
+            );
+          break;
+        case "capture":
+        case "download":
+          !0 === value
+            ? target.push(
+                attributeSeparator,
+                stringToChunk(name),
+                attributeEmptyString
+              )
+            : !1 !== value &&
+              "function" !== typeof value &&
+              "symbol" !== typeof value &&
+              target.push(
+                attributeSeparator,
+                stringToChunk(name),
+                attributeAssign,
+                stringToChunk(escapeTextForBrowser(value)),
+                attributeEnd
+              );
+          break;
+        case "cols":
+        case "rows":
+        case "size":
+        case "span":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            !isNaN(value) &&
+            1 <= value &&
+            target.push(
+              attributeSeparator,
+              stringToChunk(name),
+              attributeAssign,
+              stringToChunk(escapeTextForBrowser(value)),
+              attributeEnd
+            );
+          break;
+        case "rowSpan":
+        case "start":
+          "function" === typeof value ||
+            "symbol" === typeof value ||
+            isNaN(value) ||
+            target.push(
+              attributeSeparator,
+              stringToChunk(name),
+              attributeAssign,
+              stringToChunk(escapeTextForBrowser(value)),
+              attributeEnd
+            );
+          break;
+        case "xlinkActuate":
+          pushStringAttribute(target, "xlink:actuate", value);
+          break;
+        case "xlinkArcrole":
+          pushStringAttribute(target, "xlink:arcrole", value);
+          break;
+        case "xlinkRole":
+          pushStringAttribute(target, "xlink:role", value);
+          break;
+        case "xlinkShow":
+          pushStringAttribute(target, "xlink:show", value);
+          break;
+        case "xlinkTitle":
+          pushStringAttribute(target, "xlink:title", value);
+          break;
+        case "xlinkType":
+          pushStringAttribute(target, "xlink:type", value);
+          break;
+        case "xmlBase":
+          pushStringAttribute(target, "xml:base", value);
+          break;
+        case "xmlLang":
+          pushStringAttribute(target, "xml:lang", value);
+          break;
+        case "xmlSpace":
+          pushStringAttribute(target, "xml:space", value);
+          break;
+        default:
+          if (
+            !(2 < name.length) ||
+            ("o" !== name[0] && "O" !== name[0]) ||
+            ("n" !== name[1] && "N" !== name[1])
+          )
+            if (
+              ((name = aliases.get(name) || name), isAttributeNameSafe(name))
+            ) {
+              switch (typeof value) {
+                case "function":
+                case "symbol":
+                  return;
+                case "boolean":
+                  var prefix = name.toLowerCase().slice(0, 5);
+                  if ("data-" !== prefix && "aria-" !== prefix) return;
+              }
+              target.push(
+                attributeSeparator,
+                stringToChunk(name),
+                attributeAssign,
+                stringToChunk(escapeTextForBrowser(value)),
+                attributeEnd
+              );
+            }
+      }
+    }
+    function pushInnerHTML(target, innerHTML, children) {
+      if (null != innerHTML) {
+        if (null != children)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        innerHTML = innerHTML.__html;
+        null !== innerHTML &&
+          void 0 !== innerHTML &&
+          (checkHtmlStringCoercion(innerHTML),
+          target.push(stringToChunk("" + innerHTML)));
+      }
+    }
+    function checkSelectProp(props, propName) {
+      var value = props[propName];
+      null != value &&
+        ((value = isArrayImpl(value)),
+        props.multiple && !value
+          ? console.error(
+              "The `%s` prop supplied to <select> must be an array if `multiple` is true.",
+              propName
+            )
+          : !props.multiple &&
+            value &&
+            console.error(
+              "The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.",
+              propName
+            ));
+    }
+    function flattenOptionChildren(children) {
+      var content = "";
+      React.Children.forEach(children, function (child) {
+        null != child &&
+          ((content += child),
+          didWarnInvalidOptionChildren ||
+            "string" === typeof child ||
+            "number" === typeof child ||
+            "bigint" === typeof child ||
+            ((didWarnInvalidOptionChildren = !0),
+            console.error(
+              "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>."
+            )));
+      });
+      return content;
+    }
+    function injectFormReplayingRuntime(resumableState, renderState) {
+      (resumableState.instructions & 16) === NothingSent &&
+        ((resumableState.instructions |= 16),
+        renderState.bootstrapChunks.unshift(
+          renderState.startInlineScript,
+          formReplayingRuntimeScript,
+          endInlineScript
+        ));
+    }
+    function pushLinkImpl(target, props) {
+      target.push(startChunkForTag("link"));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function escapeStyleTextContent(styleText) {
+      checkHtmlStringCoercion(styleText);
+      return ("" + styleText).replace(styleRegex, styleReplacer);
+    }
+    function pushSelfClosing(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  tag +
+                    " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function pushTitleImpl(target, props) {
+      target.push(startChunkForTag("title"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      props = Array.isArray(children)
+        ? 2 > children.length
+          ? children[0]
+          : null
+        : children;
+      "function" !== typeof props &&
+        "symbol" !== typeof props &&
+        null !== props &&
+        void 0 !== props &&
+        target.push(stringToChunk(escapeTextForBrowser("" + props)));
+      pushInnerHTML(target, innerHTML, children);
+      target.push(endChunkForTag("title"));
+      return null;
+    }
+    function pushScriptImpl(target, props) {
+      target.push(startChunkForTag("script"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      null != children &&
+        "string" !== typeof children &&
+        ((props =
+          "number" === typeof children
+            ? "a number for children"
+            : Array.isArray(children)
+              ? "an array for children"
+              : "something unexpected for children"),
+        console.error(
+          "A script element was rendered with %s. If script element has children it must be a single string. Consider using dangerouslySetInnerHTML or passing a plain string as children.",
+          props
+        ));
+      pushInnerHTML(target, innerHTML, children);
+      "string" === typeof children &&
+        target.push(stringToChunk(escapeEntireInlineScriptContent(children)));
+      target.push(endChunkForTag("script"));
+      return null;
+    }
+    function pushStartSingletonElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return tag;
+    }
+    function pushStartGenericElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return "string" === typeof tag
+        ? (target.push(stringToChunk(escapeTextForBrowser(tag))), null)
+        : tag;
+    }
+    function startChunkForTag(tag) {
+      var tagStartChunk = validatedTagCache.get(tag);
+      if (void 0 === tagStartChunk) {
+        if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+        tagStartChunk = stringToPrecomputedChunk("<" + tag);
+        validatedTagCache.set(tag, tagStartChunk);
+      }
+      return tagStartChunk;
+    }
+    function pushStartInstance(
+      target$jscomp$0,
+      type,
+      props,
+      resumableState,
+      renderState,
+      preambleState,
+      hoistableState,
+      formatContext,
+      textEmbedded,
+      isFallback
+    ) {
+      validateProperties$2(type, props);
+      ("input" !== type && "textarea" !== type && "select" !== type) ||
+        null == props ||
+        null !== props.value ||
+        didWarnValueNull ||
+        ((didWarnValueNull = !0),
+        "select" === type && props.multiple
+          ? console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.",
+              type
+            )
+          : console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.",
+              type
+            ));
+      b: if (-1 === type.indexOf("-")) var JSCompiler_inline_result = !1;
+      else
+        switch (type) {
+          case "annotation-xml":
+          case "color-profile":
+          case "font-face":
+          case "font-face-src":
+          case "font-face-uri":
+          case "font-face-format":
+          case "font-face-name":
+          case "missing-glyph":
+            JSCompiler_inline_result = !1;
+            break b;
+          default:
+            JSCompiler_inline_result = !0;
+        }
+      JSCompiler_inline_result ||
+        "string" === typeof props.is ||
+        warnUnknownProperties(type, props, null);
+      !props.suppressContentEditableWarning &&
+        props.contentEditable &&
+        null != props.children &&
+        console.error(
+          "A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."
+        );
+      formatContext.insertionMode !== SVG_MODE &&
+        formatContext.insertionMode !== MATHML_MODE &&
+        -1 === type.indexOf("-") &&
+        type.toLowerCase() !== type &&
+        console.error(
+          "<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.",
+          type
+        );
+      switch (type) {
+        case "div":
+        case "span":
+        case "svg":
+        case "path":
+          break;
+        case "a":
+          target$jscomp$0.push(startChunkForTag("a"));
+          var children = null,
+            innerHTML = null,
+            propKey;
+          for (propKey in props)
+            if (hasOwnProperty.call(props, propKey)) {
+              var propValue = props[propKey];
+              if (null != propValue)
+                switch (propKey) {
+                  case "children":
+                    children = propValue;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML = propValue;
+                    break;
+                  case "href":
+                    "" === propValue
+                      ? pushStringAttribute(target$jscomp$0, "href", "")
+                      : pushAttribute(target$jscomp$0, propKey, propValue);
+                    break;
+                  default:
+                    pushAttribute(target$jscomp$0, propKey, propValue);
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML, children);
+          if ("string" === typeof children) {
+            target$jscomp$0.push(stringToChunk(escapeTextForBrowser(children)));
+            var JSCompiler_inline_result$jscomp$0 = null;
+          } else JSCompiler_inline_result$jscomp$0 = children;
+          return JSCompiler_inline_result$jscomp$0;
+        case "g":
+        case "p":
+        case "li":
+          break;
+        case "select":
+          checkControlledValueProps("select", props);
+          checkSelectProp(props, "value");
+          checkSelectProp(props, "defaultValue");
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultSelectValue ||
+            (console.error(
+              "Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultSelectValue = !0));
+          target$jscomp$0.push(startChunkForTag("select"));
+          var children$jscomp$0 = null,
+            innerHTML$jscomp$0 = null,
+            propKey$jscomp$0;
+          for (propKey$jscomp$0 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+              var propValue$jscomp$0 = props[propKey$jscomp$0];
+              if (null != propValue$jscomp$0)
+                switch (propKey$jscomp$0) {
+                  case "children":
+                    children$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "defaultValue":
+                  case "value":
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$0,
+                      propValue$jscomp$0
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+          return children$jscomp$0;
+        case "option":
+          var selectedValue = formatContext.selectedValue;
+          target$jscomp$0.push(startChunkForTag("option"));
+          var children$jscomp$1 = null,
+            value = null,
+            selected = null,
+            innerHTML$jscomp$1 = null,
+            propKey$jscomp$1;
+          for (propKey$jscomp$1 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+              var propValue$jscomp$1 = props[propKey$jscomp$1];
+              if (null != propValue$jscomp$1)
+                switch (propKey$jscomp$1) {
+                  case "children":
+                    children$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "selected":
+                    selected = propValue$jscomp$1;
+                    didWarnSelectedSetOnOption ||
+                      (console.error(
+                        "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>."
+                      ),
+                      (didWarnSelectedSetOnOption = !0));
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "value":
+                    value = propValue$jscomp$1;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$1,
+                      propValue$jscomp$1
+                    );
+                }
+            }
+          if (null != selectedValue) {
+            if (null !== value) {
+              checkAttributeStringCoercion(value, "value");
+              var stringValue = "" + value;
+            } else
+              null === innerHTML$jscomp$1 ||
+                didWarnInvalidOptionInnerHTML ||
+                ((didWarnInvalidOptionInnerHTML = !0),
+                console.error(
+                  "Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected."
+                )),
+                (stringValue = flattenOptionChildren(children$jscomp$1));
+            if (isArrayImpl(selectedValue))
+              for (var i = 0; i < selectedValue.length; i++) {
+                if (
+                  (checkAttributeStringCoercion(selectedValue[i], "value"),
+                  "" + selectedValue[i] === stringValue)
+                ) {
+                  target$jscomp$0.push(selectedMarkerAttribute);
+                  break;
+                }
+              }
+            else
+              checkAttributeStringCoercion(selectedValue, "select.value"),
+                "" + selectedValue === stringValue &&
+                  target$jscomp$0.push(selectedMarkerAttribute);
+          } else selected && target$jscomp$0.push(selectedMarkerAttribute);
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+          return children$jscomp$1;
+        case "textarea":
+          checkControlledValueProps("textarea", props);
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultTextareaValue ||
+            (console.error(
+              "Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultTextareaValue = !0));
+          target$jscomp$0.push(startChunkForTag("textarea"));
+          var value$jscomp$0 = null,
+            defaultValue = null,
+            children$jscomp$2 = null,
+            propKey$jscomp$2;
+          for (propKey$jscomp$2 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+              var propValue$jscomp$2 = props[propKey$jscomp$2];
+              if (null != propValue$jscomp$2)
+                switch (propKey$jscomp$2) {
+                  case "children":
+                    children$jscomp$2 = propValue$jscomp$2;
+                    break;
+                  case "value":
+                    value$jscomp$0 = propValue$jscomp$2;
+                    break;
+                  case "defaultValue":
+                    defaultValue = propValue$jscomp$2;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$2,
+                      propValue$jscomp$2
+                    );
+                }
+            }
+          null === value$jscomp$0 &&
+            null !== defaultValue &&
+            (value$jscomp$0 = defaultValue);
+          target$jscomp$0.push(endOfStartTag);
+          if (null != children$jscomp$2) {
+            console.error(
+              "Use the `defaultValue` or `value` props instead of setting children on <textarea>."
+            );
+            if (null != value$jscomp$0)
+              throw Error(
+                "If you supply `defaultValue` on a <textarea>, do not pass children."
+              );
+            if (isArrayImpl(children$jscomp$2)) {
+              if (1 < children$jscomp$2.length)
+                throw Error("<textarea> can only have at most one child.");
+              checkHtmlStringCoercion(children$jscomp$2[0]);
+              value$jscomp$0 = "" + children$jscomp$2[0];
+            }
+            checkHtmlStringCoercion(children$jscomp$2);
+            value$jscomp$0 = "" + children$jscomp$2;
+          }
+          "string" === typeof value$jscomp$0 &&
+            "\n" === value$jscomp$0[0] &&
+            target$jscomp$0.push(leadingNewline);
+          null !== value$jscomp$0 &&
+            (checkAttributeStringCoercion(value$jscomp$0, "value"),
+            target$jscomp$0.push(
+              stringToChunk(escapeTextForBrowser("" + value$jscomp$0))
+            ));
+          return null;
+        case "input":
+          checkControlledValueProps("input", props);
+          target$jscomp$0.push(startChunkForTag("input"));
+          var name = null,
+            formAction = null,
+            formEncType = null,
+            formMethod = null,
+            formTarget = null,
+            value$jscomp$1 = null,
+            defaultValue$jscomp$0 = null,
+            checked = null,
+            defaultChecked = null,
+            propKey$jscomp$3;
+          for (propKey$jscomp$3 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+              var propValue$jscomp$3 = props[propKey$jscomp$3];
+              if (null != propValue$jscomp$3)
+                switch (propKey$jscomp$3) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  case "name":
+                    name = propValue$jscomp$3;
+                    break;
+                  case "formAction":
+                    formAction = propValue$jscomp$3;
+                    break;
+                  case "formEncType":
+                    formEncType = propValue$jscomp$3;
+                    break;
+                  case "formMethod":
+                    formMethod = propValue$jscomp$3;
+                    break;
+                  case "formTarget":
+                    formTarget = propValue$jscomp$3;
+                    break;
+                  case "defaultChecked":
+                    defaultChecked = propValue$jscomp$3;
+                    break;
+                  case "defaultValue":
+                    defaultValue$jscomp$0 = propValue$jscomp$3;
+                    break;
+                  case "checked":
+                    checked = propValue$jscomp$3;
+                    break;
+                  case "value":
+                    value$jscomp$1 = propValue$jscomp$3;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$3,
+                      propValue$jscomp$3
+                    );
+                }
+            }
+          null === formAction ||
+            "image" === props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'An input can only specify a formAction along with type="submit" or type="image".'
+            ));
+          var formData = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction,
+            formEncType,
+            formMethod,
+            formTarget,
+            name
+          );
+          null === checked ||
+            null === defaultChecked ||
+            didWarnDefaultChecked ||
+            (console.error(
+              "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultChecked = !0));
+          null === value$jscomp$1 ||
+            null === defaultValue$jscomp$0 ||
+            didWarnDefaultInputValue ||
+            (console.error(
+              "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultInputValue = !0));
+          null !== checked
+            ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+            : null !== defaultChecked &&
+              pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+          null !== value$jscomp$1
+            ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+            : null !== defaultValue$jscomp$0 &&
+              pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+          target$jscomp$0.push(endOfStartTagSelfClosing);
+          null != formData &&
+            formData.forEach(pushAdditionalFormField, target$jscomp$0);
+          return null;
+        case "button":
+          target$jscomp$0.push(startChunkForTag("button"));
+          var children$jscomp$3 = null,
+            innerHTML$jscomp$2 = null,
+            name$jscomp$0 = null,
+            formAction$jscomp$0 = null,
+            formEncType$jscomp$0 = null,
+            formMethod$jscomp$0 = null,
+            formTarget$jscomp$0 = null,
+            propKey$jscomp$4;
+          for (propKey$jscomp$4 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+              var propValue$jscomp$4 = props[propKey$jscomp$4];
+              if (null != propValue$jscomp$4)
+                switch (propKey$jscomp$4) {
+                  case "children":
+                    children$jscomp$3 = propValue$jscomp$4;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$2 = propValue$jscomp$4;
+                    break;
+                  case "name":
+                    name$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formAction":
+                    formAction$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formEncType":
+                    formEncType$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formMethod":
+                    formMethod$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formTarget":
+                    formTarget$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$4,
+                      propValue$jscomp$4
+                    );
+                }
+            }
+          null === formAction$jscomp$0 ||
+            null == props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'A button can only specify a formAction along with type="submit" or no type.'
+            ));
+          var formData$jscomp$0 = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction$jscomp$0,
+            formEncType$jscomp$0,
+            formMethod$jscomp$0,
+            formTarget$jscomp$0,
+            name$jscomp$0
+          );
+          target$jscomp$0.push(endOfStartTag);
+          null != formData$jscomp$0 &&
+            formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+          if ("string" === typeof children$jscomp$3) {
+            target$jscomp$0.push(
+              stringToChunk(escapeTextForBrowser(children$jscomp$3))
+            );
+            var JSCompiler_inline_result$jscomp$1 = null;
+          } else JSCompiler_inline_result$jscomp$1 = children$jscomp$3;
+          return JSCompiler_inline_result$jscomp$1;
+        case "form":
+          target$jscomp$0.push(startChunkForTag("form"));
+          var children$jscomp$4 = null,
+            innerHTML$jscomp$3 = null,
+            formAction$jscomp$1 = null,
+            formEncType$jscomp$1 = null,
+            formMethod$jscomp$1 = null,
+            formTarget$jscomp$1 = null,
+            propKey$jscomp$5;
+          for (propKey$jscomp$5 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+              var propValue$jscomp$5 = props[propKey$jscomp$5];
+              if (null != propValue$jscomp$5)
+                switch (propKey$jscomp$5) {
+                  case "children":
+                    children$jscomp$4 = propValue$jscomp$5;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$3 = propValue$jscomp$5;
+                    break;
+                  case "action":
+                    formAction$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "encType":
+                    formEncType$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "method":
+                    formMethod$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "target":
+                    formTarget$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$5,
+                      propValue$jscomp$5
+                    );
+                }
+            }
+          var formData$jscomp$1 = null,
+            formActionName = null;
+          if ("function" === typeof formAction$jscomp$1) {
+            (null === formEncType$jscomp$1 && null === formMethod$jscomp$1) ||
+              didWarnFormActionMethod ||
+              ((didWarnFormActionMethod = !0),
+              console.error(
+                "Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden."
+              ));
+            null === formTarget$jscomp$1 ||
+              didWarnFormActionTarget ||
+              ((didWarnFormActionTarget = !0),
+              console.error(
+                "Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window."
+              ));
+            var customFields = getCustomFormFields(
+              resumableState,
+              formAction$jscomp$1
+            );
+            null !== customFields
+              ? ((formAction$jscomp$1 = customFields.action || ""),
+                (formEncType$jscomp$1 = customFields.encType),
+                (formMethod$jscomp$1 = customFields.method),
+                (formTarget$jscomp$1 = customFields.target),
+                (formData$jscomp$1 = customFields.data),
+                (formActionName = customFields.name))
+              : (target$jscomp$0.push(
+                  attributeSeparator,
+                  stringToChunk("action"),
+                  attributeAssign,
+                  actionJavaScriptURL,
+                  attributeEnd
+                ),
+                (formTarget$jscomp$1 =
+                  formMethod$jscomp$1 =
+                  formEncType$jscomp$1 =
+                  formAction$jscomp$1 =
+                    null),
+                injectFormReplayingRuntime(resumableState, renderState));
+          }
+          null != formAction$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+          null != formEncType$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+          null != formMethod$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+          null != formTarget$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+          target$jscomp$0.push(endOfStartTag);
+          null !== formActionName &&
+            (target$jscomp$0.push(startHiddenInputChunk),
+            pushStringAttribute(target$jscomp$0, "name", formActionName),
+            target$jscomp$0.push(endOfStartTagSelfClosing),
+            null != formData$jscomp$1 &&
+              formData$jscomp$1.forEach(
+                pushAdditionalFormField,
+                target$jscomp$0
+              ));
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+          if ("string" === typeof children$jscomp$4) {
+            target$jscomp$0.push(
+              stringToChunk(escapeTextForBrowser(children$jscomp$4))
+            );
+            var JSCompiler_inline_result$jscomp$2 = null;
+          } else JSCompiler_inline_result$jscomp$2 = children$jscomp$4;
+          return JSCompiler_inline_result$jscomp$2;
+        case "menuitem":
+          target$jscomp$0.push(startChunkForTag("menuitem"));
+          for (var propKey$jscomp$6 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+              var propValue$jscomp$6 = props[propKey$jscomp$6];
+              if (null != propValue$jscomp$6)
+                switch (propKey$jscomp$6) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$6,
+                      propValue$jscomp$6
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          return null;
+        case "object":
+          target$jscomp$0.push(startChunkForTag("object"));
+          var children$jscomp$5 = null,
+            innerHTML$jscomp$4 = null,
+            propKey$jscomp$7;
+          for (propKey$jscomp$7 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+              var propValue$jscomp$7 = props[propKey$jscomp$7];
+              if (null != propValue$jscomp$7)
+                switch (propKey$jscomp$7) {
+                  case "children":
+                    children$jscomp$5 = propValue$jscomp$7;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$4 = propValue$jscomp$7;
+                    break;
+                  case "data":
+                    checkAttributeStringCoercion(propValue$jscomp$7, "data");
+                    var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                    if ("" === sanitizedValue) {
+                      console.error(
+                        'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                        propKey$jscomp$7,
+                        propKey$jscomp$7
+                      );
+                      break;
+                    }
+                    target$jscomp$0.push(
+                      attributeSeparator,
+                      stringToChunk("data"),
+                      attributeAssign,
+                      stringToChunk(escapeTextForBrowser(sanitizedValue)),
+                      attributeEnd
+                    );
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$7,
+                      propValue$jscomp$7
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+          if ("string" === typeof children$jscomp$5) {
+            target$jscomp$0.push(
+              stringToChunk(escapeTextForBrowser(children$jscomp$5))
+            );
+            var JSCompiler_inline_result$jscomp$3 = null;
+          } else JSCompiler_inline_result$jscomp$3 = children$jscomp$5;
+          return JSCompiler_inline_result$jscomp$3;
+        case "title":
+          var insertionMode = formatContext.insertionMode,
+            noscriptTagInScope = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$6 = props.children,
+              child = Array.isArray(children$jscomp$6)
+                ? 2 > children$jscomp$6.length
+                  ? children$jscomp$6[0]
+                  : null
+                : children$jscomp$6;
+            Array.isArray(children$jscomp$6) && 1 < children$jscomp$6.length
+              ? console.error(
+                  "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an Array with length %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert `children` of <title> tags to a single string value which is why Arrays of length greater than 1 are not supported. When using JSX it can be common to combine text nodes and value nodes. For example: <title>hello {nameOfUser}</title>. While not immediately apparent, `children` in this case is an Array with length 2. If your `children` prop is using this form try rewriting it using a template string: <title>{`hello ${nameOfUser}`}</title>.",
+                  children$jscomp$6.length
+                )
+              : "function" === typeof child || "symbol" === typeof child
+                ? console.error(
+                    "React expect children of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value.",
+                    "function" === typeof child ? "a Function" : "a Sybmol"
+                  )
+                : child &&
+                  child.toString === {}.toString &&
+                  (null != child.$$typeof
+                    ? console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that appears to be a React element which never implements a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value which is why rendering React elements is not supported. If the `children` of <title> is a React Component try moving the <title> tag into that component. If the `children` of <title> is some HTML markup change it to be Text only to be valid HTML."
+                      )
+                    : console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that does not implement a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value. Using the default `toString` method available on every object is almost certainly an error. Consider whether the `children` of this <title> is an object in error and change it to a string or number value if so. Otherwise implement a `toString` method that React can use to produce a valid <title>."
+                      ));
+          }
+          if (
+            insertionMode === SVG_MODE ||
+            noscriptTagInScope ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$4 = pushTitleImpl(
+              target$jscomp$0,
+              props
+            );
+          else
+            isFallback
+              ? (JSCompiler_inline_result$jscomp$4 = null)
+              : (pushTitleImpl(renderState.hoistableChunks, props),
+                (JSCompiler_inline_result$jscomp$4 = void 0));
+          return JSCompiler_inline_result$jscomp$4;
+        case "link":
+          var rel = props.rel,
+            href = props.href,
+            precedence = props.precedence;
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp ||
+            "string" !== typeof rel ||
+            "string" !== typeof href ||
+            "" === href
+          ) {
+            "stylesheet" === rel &&
+              "string" === typeof props.precedence &&
+              (("string" === typeof href && href) ||
+                console.error(
+                  'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and expected the `href` prop to be a non-empty string but ecountered %s instead. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop ensure there is a non-empty string `href` prop as well, otherwise remove the `precedence` prop.',
+                  null === href
+                    ? "`null`"
+                    : void 0 === href
+                      ? "`undefined`"
+                      : "" === href
+                        ? "an empty string"
+                        : 'something with type "' + typeof href + '"'
+                ));
+            pushLinkImpl(target$jscomp$0, props);
+            var JSCompiler_inline_result$jscomp$5 = null;
+          } else if ("stylesheet" === props.rel)
+            if (
+              "string" !== typeof precedence ||
+              null != props.disabled ||
+              props.onLoad ||
+              props.onError
+            ) {
+              if ("string" === typeof precedence)
+                if (null != props.disabled)
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and a `disabled` prop. The presence of the `disabled` prop indicates an intent to manage the stylesheet active state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the `disabled` prop, otherwise remove the `precedence` prop.'
+                  );
+                else if (props.onLoad || props.onError) {
+                  var propDescription =
+                    props.onLoad && props.onError
+                      ? "`onLoad` and `onError` props"
+                      : props.onLoad
+                        ? "`onLoad` prop"
+                        : "`onError` prop";
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',
+                    propDescription,
+                    propDescription
+                  );
+                }
+              JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                target$jscomp$0,
+                props
+              );
+            } else {
+              var styleQueue = renderState.styles.get(precedence),
+                resourceState = resumableState.styleResources.hasOwnProperty(
+                  href
+                )
+                  ? resumableState.styleResources[href]
+                  : void 0;
+              if (resourceState !== EXISTS) {
+                resumableState.styleResources[href] = EXISTS;
+                styleQueue ||
+                  ((styleQueue = {
+                    precedence: stringToChunk(escapeTextForBrowser(precedence)),
+                    rules: [],
+                    hrefs: [],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(precedence, styleQueue));
+                var resource = {
+                  state: PENDING$1,
+                  props: assign({}, props, {
+                    "data-precedence": props.precedence,
+                    precedence: null
+                  })
+                };
+                if (resourceState) {
+                  2 === resourceState.length &&
+                    adoptPreloadCredentials(resource.props, resourceState);
+                  var preloadResource =
+                    renderState.preloads.stylesheets.get(href);
+                  preloadResource && 0 < preloadResource.length
+                    ? (preloadResource.length = 0)
+                    : (resource.state = PRELOADED);
+                }
+                styleQueue.sheets.set(href, resource);
+                hoistableState && hoistableState.stylesheets.add(resource);
+              } else if (styleQueue) {
+                var _resource = styleQueue.sheets.get(href);
+                _resource &&
+                  hoistableState &&
+                  hoistableState.stylesheets.add(_resource);
+              }
+              textEmbedded && target$jscomp$0.push(textSeparator);
+              JSCompiler_inline_result$jscomp$5 = null;
+            }
+          else
+            props.onLoad || props.onError
+              ? (JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                  target$jscomp$0,
+                  props
+                ))
+              : (textEmbedded && target$jscomp$0.push(textSeparator),
+                (JSCompiler_inline_result$jscomp$5 = isFallback
+                  ? null
+                  : pushLinkImpl(renderState.hoistableChunks, props)));
+          return JSCompiler_inline_result$jscomp$5;
+        case "script":
+          var asyncProp = props.async;
+          if (
+            "string" !== typeof props.src ||
+            !props.src ||
+            !asyncProp ||
+            "function" === typeof asyncProp ||
+            "symbol" === typeof asyncProp ||
+            props.onLoad ||
+            props.onError ||
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$6 = pushScriptImpl(
+              target$jscomp$0,
+              props
+            );
+          else {
+            var key = props.src;
+            if ("module" === props.type) {
+              var resources = resumableState.moduleScriptResources;
+              var preloads = renderState.preloads.moduleScripts;
+            } else
+              (resources = resumableState.scriptResources),
+                (preloads = renderState.preloads.scripts);
+            var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+              ? resources[key]
+              : void 0;
+            if (resourceState$jscomp$0 !== EXISTS) {
+              resources[key] = EXISTS;
+              var scriptProps = props;
+              if (resourceState$jscomp$0) {
+                2 === resourceState$jscomp$0.length &&
+                  ((scriptProps = assign({}, props)),
+                  adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+                var preloadResource$jscomp$0 = preloads.get(key);
+                preloadResource$jscomp$0 &&
+                  (preloadResource$jscomp$0.length = 0);
+              }
+              var resource$jscomp$0 = [];
+              renderState.scripts.add(resource$jscomp$0);
+              pushScriptImpl(resource$jscomp$0, scriptProps);
+            }
+            textEmbedded && target$jscomp$0.push(textSeparator);
+            JSCompiler_inline_result$jscomp$6 = null;
+          }
+          return JSCompiler_inline_result$jscomp$6;
+        case "style":
+          var insertionMode$jscomp$0 = formatContext.insertionMode,
+            noscriptTagInScope$jscomp$0 = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$7 = props.children,
+              child$jscomp$0 = Array.isArray(children$jscomp$7)
+                ? 2 > children$jscomp$7.length
+                  ? children$jscomp$7[0]
+                  : null
+                : children$jscomp$7;
+            ("function" === typeof child$jscomp$0 ||
+              "symbol" === typeof child$jscomp$0 ||
+              Array.isArray(child$jscomp$0)) &&
+              console.error(
+                "React expect children of <style> tags to be a string, number, or object with a `toString` method but found %s instead. In browsers style Elements can only have `Text` Nodes as children.",
+                "function" === typeof child$jscomp$0
+                  ? "a Function"
+                  : "symbol" === typeof child$jscomp$0
+                    ? "a Sybmol"
+                    : "an Array"
+              );
+          }
+          var precedence$jscomp$0 = props.precedence,
+            href$jscomp$0 = props.href;
+          if (
+            insertionMode$jscomp$0 === SVG_MODE ||
+            noscriptTagInScope$jscomp$0 ||
+            null != props.itemProp ||
+            "string" !== typeof precedence$jscomp$0 ||
+            "string" !== typeof href$jscomp$0 ||
+            "" === href$jscomp$0
+          ) {
+            target$jscomp$0.push(startChunkForTag("style"));
+            var children$jscomp$8 = null,
+              innerHTML$jscomp$5 = null,
+              propKey$jscomp$8;
+            for (propKey$jscomp$8 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+                var propValue$jscomp$8 = props[propKey$jscomp$8];
+                if (null != propValue$jscomp$8)
+                  switch (propKey$jscomp$8) {
+                    case "children":
+                      children$jscomp$8 = propValue$jscomp$8;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$5 = propValue$jscomp$8;
+                      break;
+                    default:
+                      pushAttribute(
+                        target$jscomp$0,
+                        propKey$jscomp$8,
+                        propValue$jscomp$8
+                      );
+                  }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            var child$jscomp$1 = Array.isArray(children$jscomp$8)
+              ? 2 > children$jscomp$8.length
+                ? children$jscomp$8[0]
+                : null
+              : children$jscomp$8;
+            "function" !== typeof child$jscomp$1 &&
+              "symbol" !== typeof child$jscomp$1 &&
+              null !== child$jscomp$1 &&
+              void 0 !== child$jscomp$1 &&
+              target$jscomp$0.push(
+                stringToChunk(escapeStyleTextContent(child$jscomp$1))
+              );
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$5,
+              children$jscomp$8
+            );
+            target$jscomp$0.push(endChunkForTag("style"));
+            var JSCompiler_inline_result$jscomp$7 = null;
+          } else {
+            href$jscomp$0.includes(" ") &&
+              console.error(
+                'React expected the `href` prop for a <style> tag opting into hoisting semantics using the `precedence` prop to not have any spaces but ecountered spaces instead. using spaces in this prop will cause hydration of this style to fail on the client. The href for the <style> where this ocurred is "%s".',
+                href$jscomp$0
+              );
+            var styleQueue$jscomp$0 =
+                renderState.styles.get(precedence$jscomp$0),
+              resourceState$jscomp$1 =
+                resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+                  ? resumableState.styleResources[href$jscomp$0]
+                  : void 0;
+            if (resourceState$jscomp$1 !== EXISTS) {
+              resumableState.styleResources[href$jscomp$0] = EXISTS;
+              resourceState$jscomp$1 &&
+                console.error(
+                  'React encountered a hoistable style tag for the same href as a preload: "%s". When using a style tag to inline styles you should not also preload it as a stylsheet.',
+                  href$jscomp$0
+                );
+              styleQueue$jscomp$0
+                ? styleQueue$jscomp$0.hrefs.push(
+                    stringToChunk(escapeTextForBrowser(href$jscomp$0))
+                  )
+                : ((styleQueue$jscomp$0 = {
+                    precedence: stringToChunk(
+                      escapeTextForBrowser(precedence$jscomp$0)
+                    ),
+                    rules: [],
+                    hrefs: [stringToChunk(escapeTextForBrowser(href$jscomp$0))],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(
+                    precedence$jscomp$0,
+                    styleQueue$jscomp$0
+                  ));
+              var target = styleQueue$jscomp$0.rules,
+                children$jscomp$9 = null,
+                innerHTML$jscomp$6 = null,
+                propKey$jscomp$9;
+              for (propKey$jscomp$9 in props)
+                if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+                  var propValue$jscomp$9 = props[propKey$jscomp$9];
+                  if (null != propValue$jscomp$9)
+                    switch (propKey$jscomp$9) {
+                      case "children":
+                        children$jscomp$9 = propValue$jscomp$9;
+                        break;
+                      case "dangerouslySetInnerHTML":
+                        innerHTML$jscomp$6 = propValue$jscomp$9;
+                    }
+                }
+              var child$jscomp$2 = Array.isArray(children$jscomp$9)
+                ? 2 > children$jscomp$9.length
+                  ? children$jscomp$9[0]
+                  : null
+                : children$jscomp$9;
+              "function" !== typeof child$jscomp$2 &&
+                "symbol" !== typeof child$jscomp$2 &&
+                null !== child$jscomp$2 &&
+                void 0 !== child$jscomp$2 &&
+                target.push(
+                  stringToChunk(escapeStyleTextContent(child$jscomp$2))
+                );
+              pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$9);
+            }
+            styleQueue$jscomp$0 &&
+              hoistableState &&
+              hoistableState.styles.add(styleQueue$jscomp$0);
+            textEmbedded && target$jscomp$0.push(textSeparator);
+            JSCompiler_inline_result$jscomp$7 = void 0;
+          }
+          return JSCompiler_inline_result$jscomp$7;
+        case "meta":
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$8 = pushSelfClosing(
+              target$jscomp$0,
+              props,
+              "meta"
+            );
+          else
+            textEmbedded && target$jscomp$0.push(textSeparator),
+              (JSCompiler_inline_result$jscomp$8 = isFallback
+                ? null
+                : "string" === typeof props.charSet
+                  ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+                  : "viewport" === props.name
+                    ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                    : pushSelfClosing(
+                        renderState.hoistableChunks,
+                        props,
+                        "meta"
+                      ));
+          return JSCompiler_inline_result$jscomp$8;
+        case "listing":
+        case "pre":
+          target$jscomp$0.push(startChunkForTag(type));
+          var children$jscomp$10 = null,
+            innerHTML$jscomp$7 = null,
+            propKey$jscomp$10;
+          for (propKey$jscomp$10 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+              var propValue$jscomp$10 = props[propKey$jscomp$10];
+              if (null != propValue$jscomp$10)
+                switch (propKey$jscomp$10) {
+                  case "children":
+                    children$jscomp$10 = propValue$jscomp$10;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$7 = propValue$jscomp$10;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$10,
+                      propValue$jscomp$10
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          if (null != innerHTML$jscomp$7) {
+            if (null != children$jscomp$10)
+              throw Error(
+                "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+              );
+            if (
+              "object" !== typeof innerHTML$jscomp$7 ||
+              !("__html" in innerHTML$jscomp$7)
+            )
+              throw Error(
+                "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+              );
+            var html = innerHTML$jscomp$7.__html;
+            null !== html &&
+              void 0 !== html &&
+              ("string" === typeof html && 0 < html.length && "\n" === html[0]
+                ? target$jscomp$0.push(leadingNewline, stringToChunk(html))
+                : (checkHtmlStringCoercion(html),
+                  target$jscomp$0.push(stringToChunk("" + html))));
+          }
+          "string" === typeof children$jscomp$10 &&
+            "\n" === children$jscomp$10[0] &&
+            target$jscomp$0.push(leadingNewline);
+          return children$jscomp$10;
+        case "img":
+          var src = props.src,
+            srcSet = props.srcSet;
+          if (
+            !(
+              "lazy" === props.loading ||
+              (!src && !srcSet) ||
+              ("string" !== typeof src && null != src) ||
+              ("string" !== typeof srcSet && null != srcSet)
+            ) &&
+            "low" !== props.fetchPriority &&
+            !1 === !!(formatContext.tagScope & 3) &&
+            ("string" !== typeof src ||
+              ":" !== src[4] ||
+              ("d" !== src[0] && "D" !== src[0]) ||
+              ("a" !== src[1] && "A" !== src[1]) ||
+              ("t" !== src[2] && "T" !== src[2]) ||
+              ("a" !== src[3] && "A" !== src[3])) &&
+            ("string" !== typeof srcSet ||
+              ":" !== srcSet[4] ||
+              ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+              ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+              ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+              ("a" !== srcSet[3] && "A" !== srcSet[3]))
+          ) {
+            var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+              key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+              promotablePreloads = renderState.preloads.images,
+              resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+            if (resource$jscomp$1) {
+              if (
+                "high" === props.fetchPriority ||
+                10 > renderState.highImagePreloads.size
+              )
+                promotablePreloads.delete(key$jscomp$0),
+                  renderState.highImagePreloads.add(resource$jscomp$1);
+            } else if (
+              !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+            ) {
+              resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+              var input = props.crossOrigin;
+              var crossOrigin =
+                "string" === typeof input
+                  ? "use-credentials" === input
+                    ? input
+                    : ""
+                  : void 0;
+              var headers = renderState.headers,
+                header;
+              headers &&
+              0 < headers.remainingCapacity &&
+              "string" !== typeof props.srcSet &&
+              ("high" === props.fetchPriority ||
+                500 > headers.highImagePreloads.length) &&
+              ((header = getPreloadAsHeader(src, "image", {
+                imageSrcSet: props.srcSet,
+                imageSizes: props.sizes,
+                crossOrigin: crossOrigin,
+                integrity: props.integrity,
+                nonce: props.nonce,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.refererPolicy
+              })),
+              0 <= (headers.remainingCapacity -= header.length + 2))
+                ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+                  headers.highImagePreloads &&
+                    (headers.highImagePreloads += ", "),
+                  (headers.highImagePreloads += header))
+                : ((resource$jscomp$1 = []),
+                  pushLinkImpl(resource$jscomp$1, {
+                    rel: "preload",
+                    as: "image",
+                    href: srcSet ? void 0 : src,
+                    imageSrcSet: srcSet,
+                    imageSizes: sizes,
+                    crossOrigin: crossOrigin,
+                    integrity: props.integrity,
+                    type: props.type,
+                    fetchPriority: props.fetchPriority,
+                    referrerPolicy: props.referrerPolicy
+                  }),
+                  "high" === props.fetchPriority ||
+                  10 > renderState.highImagePreloads.size
+                    ? renderState.highImagePreloads.add(resource$jscomp$1)
+                    : (renderState.bulkPreloads.add(resource$jscomp$1),
+                      promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+            }
+          }
+          return pushSelfClosing(target$jscomp$0, props, "img");
+        case "base":
+        case "area":
+        case "br":
+        case "col":
+        case "embed":
+        case "hr":
+        case "keygen":
+        case "param":
+        case "source":
+        case "track":
+        case "wbr":
+          return pushSelfClosing(target$jscomp$0, props, type);
+        case "annotation-xml":
+        case "color-profile":
+        case "font-face":
+        case "font-face-src":
+        case "font-face-uri":
+        case "font-face-format":
+        case "font-face-name":
+        case "missing-glyph":
+          break;
+        case "head":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble = preambleState || renderState.preamble;
+            if (preamble.headChunks)
+              throw Error("The `<head>` tag may only be rendered once.");
+            preamble.headChunks = [];
+            var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+              preamble.headChunks,
+              props,
+              "head"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "head"
+            );
+          return JSCompiler_inline_result$jscomp$9;
+        case "body":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble$jscomp$0 = preambleState || renderState.preamble;
+            if (preamble$jscomp$0.bodyChunks)
+              throw Error("The `<body>` tag may only be rendered once.");
+            preamble$jscomp$0.bodyChunks = [];
+            var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+              preamble$jscomp$0.bodyChunks,
+              props,
+              "body"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "body"
+            );
+          return JSCompiler_inline_result$jscomp$10;
+        case "html":
+          if (formatContext.insertionMode === ROOT_HTML_MODE) {
+            var preamble$jscomp$1 = preambleState || renderState.preamble;
+            if (preamble$jscomp$1.htmlChunks)
+              throw Error("The `<html>` tag may only be rendered once.");
+            preamble$jscomp$1.htmlChunks = [doctypeChunk];
+            var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+              preamble$jscomp$1.htmlChunks,
+              props,
+              "html"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "html"
+            );
+          return JSCompiler_inline_result$jscomp$11;
+        default:
+          if (-1 !== type.indexOf("-")) {
+            target$jscomp$0.push(startChunkForTag(type));
+            var children$jscomp$11 = null,
+              innerHTML$jscomp$8 = null,
+              propKey$jscomp$11;
+            for (propKey$jscomp$11 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+                var propValue$jscomp$11 = props[propKey$jscomp$11];
+                if (null != propValue$jscomp$11) {
+                  var attributeName = propKey$jscomp$11;
+                  switch (propKey$jscomp$11) {
+                    case "children":
+                      children$jscomp$11 = propValue$jscomp$11;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$8 = propValue$jscomp$11;
+                      break;
+                    case "style":
+                      pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                      break;
+                    case "suppressContentEditableWarning":
+                    case "suppressHydrationWarning":
+                    case "ref":
+                      break;
+                    case "className":
+                      attributeName = "class";
+                    default:
+                      if (
+                        isAttributeNameSafe(propKey$jscomp$11) &&
+                        "function" !== typeof propValue$jscomp$11 &&
+                        "symbol" !== typeof propValue$jscomp$11 &&
+                        !1 !== propValue$jscomp$11
+                      ) {
+                        if (!0 === propValue$jscomp$11)
+                          propValue$jscomp$11 = "";
+                        else if ("object" === typeof propValue$jscomp$11)
+                          continue;
+                        target$jscomp$0.push(
+                          attributeSeparator,
+                          stringToChunk(attributeName),
+                          attributeAssign,
+                          stringToChunk(
+                            escapeTextForBrowser(propValue$jscomp$11)
+                          ),
+                          attributeEnd
+                        );
+                      }
+                  }
+                }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$8,
+              children$jscomp$11
+            );
+            return children$jscomp$11;
+          }
+      }
+      return pushStartGenericElement(target$jscomp$0, props, type);
+    }
+    function endChunkForTag(tag) {
+      var chunk = endTagCache.get(tag);
+      void 0 === chunk &&
+        ((chunk = stringToPrecomputedChunk("</" + tag + ">")),
+        endTagCache.set(tag, chunk));
+      return chunk;
+    }
+    function hoistPreambleState(renderState, preambleState) {
+      renderState = renderState.preamble;
+      null === renderState.htmlChunks &&
+        preambleState.htmlChunks &&
+        ((renderState.htmlChunks = preambleState.htmlChunks),
+        (preambleState.contribution |= 1));
+      null === renderState.headChunks &&
+        preambleState.headChunks &&
+        ((renderState.headChunks = preambleState.headChunks),
+        (preambleState.contribution |= 4));
+      null === renderState.bodyChunks &&
+        preambleState.bodyChunks &&
+        ((renderState.bodyChunks = preambleState.bodyChunks),
+        (preambleState.contribution |= 2));
+    }
+    function writeBootstrap(destination, renderState) {
+      renderState = renderState.bootstrapChunks;
+      for (var i = 0; i < renderState.length - 1; i++)
+        writeChunk(destination, renderState[i]);
+      return i < renderState.length
+        ? ((i = renderState[i]),
+          (renderState.length = 0),
+          writeChunkAndReturn(destination, i))
+        : !0;
+    }
+    function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+      writeChunk(destination, startPendingSuspenseBoundary1);
+      if (null === id)
+        throw Error(
+          "An ID must have been assigned before we can complete the boundary."
+        );
+      writeChunk(destination, renderState.boundaryPrefix);
+      writeChunk(destination, stringToChunk(id.toString(16)));
+      return writeChunkAndReturn(destination, startPendingSuspenseBoundary2);
+    }
+    function writePreambleContribution(destination, preambleState) {
+      preambleState = preambleState.contribution;
+      preambleState !== NoContribution &&
+        (writeChunk(destination, boundaryPreambleContributionChunkStart),
+        writeChunk(destination, stringToChunk("" + preambleState)),
+        writeChunk(destination, boundaryPreambleContributionChunkEnd));
+    }
+    function writeStartSegment(destination, renderState, formatContext, id) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return (
+            writeChunk(destination, startSegmentHTML),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentHTML2)
+          );
+        case SVG_MODE:
+          return (
+            writeChunk(destination, startSegmentSVG),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentSVG2)
+          );
+        case MATHML_MODE:
+          return (
+            writeChunk(destination, startSegmentMathML),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentMathML2)
+          );
+        case HTML_TABLE_MODE:
+          return (
+            writeChunk(destination, startSegmentTable),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentTable2)
+          );
+        case HTML_TABLE_BODY_MODE:
+          return (
+            writeChunk(destination, startSegmentTableBody),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentTableBody2)
+          );
+        case HTML_TABLE_ROW_MODE:
+          return (
+            writeChunk(destination, startSegmentTableRow),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentTableRow2)
+          );
+        case HTML_COLGROUP_MODE:
+          return (
+            writeChunk(destination, startSegmentColGroup),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentColGroup2)
+          );
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function writeEndSegment(destination, formatContext) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return writeChunkAndReturn(destination, endSegmentHTML);
+        case SVG_MODE:
+          return writeChunkAndReturn(destination, endSegmentSVG);
+        case MATHML_MODE:
+          return writeChunkAndReturn(destination, endSegmentMathML);
+        case HTML_TABLE_MODE:
+          return writeChunkAndReturn(destination, endSegmentTable);
+        case HTML_TABLE_BODY_MODE:
+          return writeChunkAndReturn(destination, endSegmentTableBody);
+        case HTML_TABLE_ROW_MODE:
+          return writeChunkAndReturn(destination, endSegmentTableRow);
+        case HTML_COLGROUP_MODE:
+          return writeChunkAndReturn(destination, endSegmentColGroup);
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function escapeJSStringsForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInInstructionScripts,
+        function (match) {
+          switch (match) {
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function escapeJSObjectForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInScripts,
+        function (match) {
+          switch (match) {
+            case "&":
+              return "\\u0026";
+            case ">":
+              return "\\u003e";
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function flushStyleTagsLateForBoundary(styleQueue) {
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      0 < rules.length &&
+        0 === hrefs.length &&
+        console.error(
+          "React expected to have at least one href for an a hoistable style but found none. This is a bug in React."
+        );
+      var i = 0;
+      if (hrefs.length) {
+        writeChunk(this, lateStyleTagResourceOpen1);
+        writeChunk(this, styleQueue.precedence);
+        for (
+          writeChunk(this, lateStyleTagResourceOpen2);
+          i < hrefs.length - 1;
+          i++
+        )
+          writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator);
+        writeChunk(this, hrefs[i]);
+        writeChunk(this, lateStyleTagResourceOpen3);
+        for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]);
+        destinationHasCapacity = writeChunkAndReturn(
+          this,
+          lateStyleTagTemplateClose
+        );
+        currentlyRenderingBoundaryHasStylesToHoist = !0;
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function hasStylesToHoist(stylesheet) {
+      return stylesheet.state !== PREAMBLE
+        ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+        : !1;
+    }
+    function writeHoistablesForBoundary(
+      destination,
+      hoistableState,
+      renderState
+    ) {
+      currentlyRenderingBoundaryHasStylesToHoist = !1;
+      destinationHasCapacity = !0;
+      hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+      hoistableState.stylesheets.forEach(hasStylesToHoist);
+      currentlyRenderingBoundaryHasStylesToHoist &&
+        (renderState.stylesToHoist = !0);
+      return destinationHasCapacity;
+    }
+    function flushResource(resource) {
+      for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]);
+      resource.length = 0;
+    }
+    function flushStyleInPreamble(stylesheet) {
+      pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+      for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+        writeChunk(this, stylesheetFlushingQueue[i]);
+      stylesheetFlushingQueue.length = 0;
+      stylesheet.state = PREAMBLE;
+    }
+    function flushStylesInPreamble(styleQueue) {
+      var hasStylesheets = 0 < styleQueue.sheets.size;
+      styleQueue.sheets.forEach(flushStyleInPreamble, this);
+      styleQueue.sheets.clear();
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      if (!hasStylesheets || hrefs.length) {
+        writeChunk(this, styleTagResourceOpen1);
+        writeChunk(this, styleQueue.precedence);
+        styleQueue = 0;
+        if (hrefs.length) {
+          for (
+            writeChunk(this, styleTagResourceOpen2);
+            styleQueue < hrefs.length - 1;
+            styleQueue++
+          )
+            writeChunk(this, hrefs[styleQueue]),
+              writeChunk(this, spaceSeparator);
+          writeChunk(this, hrefs[styleQueue]);
+        }
+        writeChunk(this, styleTagResourceOpen3);
+        for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+          writeChunk(this, rules[styleQueue]);
+        writeChunk(this, styleTagResourceClose);
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function preloadLateStyle(stylesheet) {
+      if (stylesheet.state === PENDING$1) {
+        stylesheet.state = PRELOADED;
+        var props = stylesheet.props;
+        pushLinkImpl(stylesheetFlushingQueue, {
+          rel: "preload",
+          as: "style",
+          href: stylesheet.props.href,
+          crossOrigin: props.crossOrigin,
+          fetchPriority: props.fetchPriority,
+          integrity: props.integrity,
+          media: props.media,
+          hrefLang: props.hrefLang,
+          referrerPolicy: props.referrerPolicy
+        });
+        for (
+          stylesheet = 0;
+          stylesheet < stylesheetFlushingQueue.length;
+          stylesheet++
+        )
+          writeChunk(this, stylesheetFlushingQueue[stylesheet]);
+        stylesheetFlushingQueue.length = 0;
+      }
+    }
+    function preloadLateStyles(styleQueue) {
+      styleQueue.sheets.forEach(preloadLateStyle, this);
+      styleQueue.sheets.clear();
+    }
+    function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+      writeChunk(destination, arrayFirstOpenBracket);
+      var nextArrayOpenBrackChunk = arrayFirstOpenBracket;
+      hoistableState.stylesheets.forEach(function (resource) {
+        if (resource.state !== PREAMBLE)
+          if (resource.state === LATE)
+            writeChunk(destination, nextArrayOpenBrackChunk),
+              (resource = resource.props.href),
+              checkAttributeStringCoercion(resource, "href"),
+              writeChunk(
+                destination,
+                stringToChunk(
+                  escapeJSObjectForInstructionScripts("" + resource)
+                )
+              ),
+              writeChunk(destination, arrayCloseBracket),
+              (nextArrayOpenBrackChunk = arraySubsequentOpenBracket);
+          else {
+            writeChunk(destination, nextArrayOpenBrackChunk);
+            var precedence = resource.props["data-precedence"],
+              props = resource.props,
+              coercedHref = sanitizeURL("" + resource.props.href);
+            writeChunk(
+              destination,
+              stringToChunk(escapeJSObjectForInstructionScripts(coercedHref))
+            );
+            checkAttributeStringCoercion(precedence, "precedence");
+            precedence = "" + precedence;
+            writeChunk(destination, arrayInterstitial);
+            writeChunk(
+              destination,
+              stringToChunk(escapeJSObjectForInstructionScripts(precedence))
+            );
+            for (var propKey in props)
+              if (
+                hasOwnProperty.call(props, propKey) &&
+                ((precedence = props[propKey]), null != precedence)
+              )
+                switch (propKey) {
+                  case "href":
+                  case "rel":
+                  case "precedence":
+                  case "data-precedence":
+                    break;
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    writeStyleResourceAttributeInJS(
+                      destination,
+                      propKey,
+                      precedence
+                    );
+                }
+            writeChunk(destination, arrayCloseBracket);
+            nextArrayOpenBrackChunk = arraySubsequentOpenBracket;
+            resource.state = LATE;
+          }
+      });
+      writeChunk(destination, arrayCloseBracket);
+    }
+    function writeStyleResourceAttributeInJS(destination, name, value) {
+      var attributeName = name.toLowerCase();
+      switch (typeof value) {
+        case "function":
+        case "symbol":
+          return;
+      }
+      switch (name) {
+        case "innerHTML":
+        case "dangerouslySetInnerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "style":
+        case "ref":
+          return;
+        case "className":
+          attributeName = "class";
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        case "hidden":
+          if (!1 === value) return;
+          name = "";
+          break;
+        case "src":
+        case "href":
+          value = sanitizeURL(value);
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        default:
+          if (
+            (2 < name.length &&
+              ("o" === name[0] || "O" === name[0]) &&
+              ("n" === name[1] || "N" === name[1])) ||
+            !isAttributeNameSafe(name)
+          )
+            return;
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+      }
+      writeChunk(destination, arrayInterstitial);
+      writeChunk(
+        destination,
+        stringToChunk(escapeJSObjectForInstructionScripts(attributeName))
+      );
+      writeChunk(destination, arrayInterstitial);
+      writeChunk(
+        destination,
+        stringToChunk(escapeJSObjectForInstructionScripts(name))
+      );
+    }
+    function createHoistableState() {
+      return { styles: new Set(), stylesheets: new Set() };
+    }
+    function preloadBootstrapScriptOrModule(
+      resumableState,
+      renderState,
+      href,
+      props
+    ) {
+      (resumableState.scriptResources.hasOwnProperty(href) ||
+        resumableState.moduleScriptResources.hasOwnProperty(href)) &&
+        console.error(
+          'Internal React Error: React expected bootstrap script or module with src "%s" to not have been preloaded already. please file an issue',
+          href
+        );
+      resumableState.scriptResources[href] = EXISTS;
+      resumableState.moduleScriptResources[href] = EXISTS;
+      resumableState = [];
+      pushLinkImpl(resumableState, props);
+      renderState.bootstrapScripts.add(resumableState);
+    }
+    function adoptPreloadCredentials(target, preloadState) {
+      null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+      null == target.integrity && (target.integrity = preloadState[1]);
+    }
+    function getPreloadAsHeader(href, as, params) {
+      href = escapeHrefForLinkHeaderURLContext(href);
+      as = escapeStringForLinkHeaderQuotedParamValueContext(as, "as");
+      as = "<" + href + '>; rel=preload; as="' + as + '"';
+      for (var paramName in params)
+        hasOwnProperty.call(params, paramName) &&
+          ((href = params[paramName]),
+          "string" === typeof href &&
+            (as +=
+              "; " +
+              paramName.toLowerCase() +
+              '="' +
+              escapeStringForLinkHeaderQuotedParamValueContext(
+                href,
+                paramName
+              ) +
+              '"'));
+      return as;
+    }
+    function escapeHrefForLinkHeaderURLContext(hrefInput) {
+      checkAttributeStringCoercion(hrefInput, "href");
+      return ("" + hrefInput).replace(
+        regexForHrefInLinkHeaderURLContext,
+        escapeHrefForLinkHeaderURLContextReplacer
+      );
+    }
+    function escapeHrefForLinkHeaderURLContextReplacer(match) {
+      switch (match) {
+        case "<":
+          return "%3C";
+        case ">":
+          return "%3E";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContext(value, name) {
+      willCoercionThrow(value) &&
+        (console.error(
+          "The provided `%s` option is an unsupported type %s. This value must be coerced to a string before using it here.",
+          name,
+          typeName(value)
+        ),
+        testStringCoercion(value));
+      return ("" + value).replace(
+        regexForLinkHeaderQuotedParamValueContext,
+        escapeStringForLinkHeaderQuotedParamValueContextReplacer
+      );
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+      switch (match) {
+        case '"':
+          return "%22";
+        case "'":
+          return "%27";
+        case ";":
+          return "%3B";
+        case ",":
+          return "%2C";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function hoistStyleQueueDependency(styleQueue) {
+      this.styles.add(styleQueue);
+    }
+    function hoistStylesheetDependency(stylesheet) {
+      this.stylesheets.add(stylesheet);
+    }
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function popToNearestCommonAncestor(prev, next) {
+      if (prev !== next) {
+        prev.context._currentValue = prev.parentValue;
+        prev = prev.parent;
+        var parentNext = next.parent;
+        if (null === prev) {
+          if (null !== parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+        } else {
+          if (null === parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+          popToNearestCommonAncestor(prev, parentNext);
+        }
+        next.context._currentValue = next.value;
+      }
+    }
+    function popAllPrevious(prev) {
+      prev.context._currentValue = prev.parentValue;
+      prev = prev.parent;
+      null !== prev && popAllPrevious(prev);
+    }
+    function pushAllNext(next) {
+      var parentNext = next.parent;
+      null !== parentNext && pushAllNext(parentNext);
+      next.context._currentValue = next.value;
+    }
+    function popPreviousToCommonLevel(prev, next) {
+      prev.context._currentValue = prev.parentValue;
+      prev = prev.parent;
+      if (null === prev)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === next.depth
+        ? popToNearestCommonAncestor(prev, next)
+        : popPreviousToCommonLevel(prev, next);
+    }
+    function popNextToCommonLevel(prev, next) {
+      var parentNext = next.parent;
+      if (null === parentNext)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === parentNext.depth
+        ? popToNearestCommonAncestor(prev, parentNext)
+        : popNextToCommonLevel(prev, parentNext);
+      next.context._currentValue = next.value;
+    }
+    function switchContext(newSnapshot) {
+      var prev = currentActiveSnapshot;
+      prev !== newSnapshot &&
+        (null === prev
+          ? pushAllNext(newSnapshot)
+          : null === newSnapshot
+            ? popAllPrevious(prev)
+            : prev.depth === newSnapshot.depth
+              ? popToNearestCommonAncestor(prev, newSnapshot)
+              : prev.depth > newSnapshot.depth
+                ? popPreviousToCommonLevel(prev, newSnapshot)
+                : popNextToCommonLevel(prev, newSnapshot),
+        (currentActiveSnapshot = newSnapshot));
+    }
+    function warnOnInvalidCallback(callback) {
+      if (null !== callback && "function" !== typeof callback) {
+        var key = String(callback);
+        didWarnOnInvalidCallback.has(key) ||
+          (didWarnOnInvalidCallback.add(key),
+          console.error(
+            "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+            callback
+          ));
+      }
+    }
+    function warnNoop(publicInstance, callerName) {
+      publicInstance =
+        ((publicInstance = publicInstance.constructor) &&
+          getComponentNameFromType(publicInstance)) ||
+        "ReactClass";
+      var warningKey = publicInstance + "." + callerName;
+      didWarnAboutNoopUpdateForComponent[warningKey] ||
+        (console.error(
+          "Can only update a mounting component. This usually means you called %s() outside componentWillMount() on the server. This is a no-op.\n\nPlease check the code for the %s component.",
+          callerName,
+          publicInstance
+        ),
+        (didWarnAboutNoopUpdateForComponent[warningKey] = !0));
+    }
+    function pushTreeContext(baseContext, totalChildren, index) {
+      var baseIdWithLeadingBit = baseContext.id;
+      baseContext = baseContext.overflow;
+      var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+      baseIdWithLeadingBit &= ~(1 << baseLength);
+      index += 1;
+      var length = 32 - clz32(totalChildren) + baseLength;
+      if (30 < length) {
+        var numberOfOverflowBits = baseLength - (baseLength % 5);
+        length = (
+          baseIdWithLeadingBit &
+          ((1 << numberOfOverflowBits) - 1)
+        ).toString(32);
+        baseIdWithLeadingBit >>= numberOfOverflowBits;
+        baseLength -= numberOfOverflowBits;
+        return {
+          id:
+            (1 << (32 - clz32(totalChildren) + baseLength)) |
+            (index << baseLength) |
+            baseIdWithLeadingBit,
+          overflow: length + baseContext
+        };
+      }
+      return {
+        id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+        overflow: baseContext
+      };
+    }
+    function clz32Fallback(x) {
+      x >>>= 0;
+      return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+    }
+    function noop$2() {}
+    function trackUsedThenable(thenableState, thenable, index) {
+      index = thenableState[index];
+      void 0 === index
+        ? thenableState.push(thenable)
+        : index !== thenable &&
+          (thenable.then(noop$2, noop$2), (thenable = index));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+        default:
+          "string" === typeof thenable.status
+            ? thenable.then(noop$2, noop$2)
+            : ((thenableState = thenable),
+              (thenableState.status = "pending"),
+              thenableState.then(
+                function (fulfilledValue) {
+                  if ("pending" === thenable.status) {
+                    var fulfilledThenable = thenable;
+                    fulfilledThenable.status = "fulfilled";
+                    fulfilledThenable.value = fulfilledValue;
+                  }
+                },
+                function (error) {
+                  if ("pending" === thenable.status) {
+                    var rejectedThenable = thenable;
+                    rejectedThenable.status = "rejected";
+                    rejectedThenable.reason = error;
+                  }
+                }
+              ));
+          switch (thenable.status) {
+            case "fulfilled":
+              return thenable.value;
+            case "rejected":
+              throw thenable.reason;
+          }
+          suspendedThenable = thenable;
+          throw SuspenseException;
+      }
+    }
+    function getSuspendedThenable() {
+      if (null === suspendedThenable)
+        throw Error(
+          "Expected a suspended thenable. This is a bug in React. Please file an issue."
+        );
+      var thenable = suspendedThenable;
+      suspendedThenable = null;
+      return thenable;
+    }
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    function resolveCurrentlyRenderingComponent() {
+      if (null === currentlyRenderingComponent)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      isInHookUserCodeInDev &&
+        console.error(
+          "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"
+        );
+      return currentlyRenderingComponent;
+    }
+    function createHook() {
+      if (0 < numberOfReRenders)
+        throw Error("Rendered more hooks than during the previous render");
+      return { memoizedState: null, queue: null, next: null };
+    }
+    function createWorkInProgressHook() {
+      null === workInProgressHook
+        ? null === firstWorkInProgressHook
+          ? ((isReRender = !1),
+            (firstWorkInProgressHook = workInProgressHook = createHook()))
+          : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+        : null === workInProgressHook.next
+          ? ((isReRender = !1),
+            (workInProgressHook = workInProgressHook.next = createHook()))
+          : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+      return workInProgressHook;
+    }
+    function getThenableStateAfterSuspending() {
+      var state = thenableState;
+      thenableState = null;
+      return state;
+    }
+    function resetHooksState() {
+      isInHookUserCodeInDev = !1;
+      currentlyRenderingKeyPath =
+        currentlyRenderingRequest =
+        currentlyRenderingTask =
+        currentlyRenderingComponent =
+          null;
+      didScheduleRenderPhaseUpdate = !1;
+      firstWorkInProgressHook = null;
+      numberOfReRenders = 0;
+      workInProgressHook = renderPhaseUpdates = null;
+    }
+    function readContext(context) {
+      isInHookUserCodeInDev &&
+        console.error(
+          "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+        );
+      return context._currentValue;
+    }
+    function basicStateReducer(state, action) {
+      return "function" === typeof action ? action(state) : action;
+    }
+    function useReducer(reducer, initialArg, init) {
+      reducer !== basicStateReducer && (currentHookNameInDev = "useReducer");
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      if (isReRender) {
+        init = workInProgressHook.queue;
+        initialArg = init.dispatch;
+        if (null !== renderPhaseUpdates) {
+          var firstRenderPhaseUpdate = renderPhaseUpdates.get(init);
+          if (void 0 !== firstRenderPhaseUpdate) {
+            renderPhaseUpdates.delete(init);
+            init = workInProgressHook.memoizedState;
+            do {
+              var action = firstRenderPhaseUpdate.action;
+              isInHookUserCodeInDev = !0;
+              init = reducer(init, action);
+              isInHookUserCodeInDev = !1;
+              firstRenderPhaseUpdate = firstRenderPhaseUpdate.next;
+            } while (null !== firstRenderPhaseUpdate);
+            workInProgressHook.memoizedState = init;
+            return [init, initialArg];
+          }
+        }
+        return [workInProgressHook.memoizedState, initialArg];
+      }
+      isInHookUserCodeInDev = !0;
+      reducer =
+        reducer === basicStateReducer
+          ? "function" === typeof initialArg
+            ? initialArg()
+            : initialArg
+          : void 0 !== init
+            ? init(initialArg)
+            : initialArg;
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = reducer;
+      reducer = workInProgressHook.queue = { last: null, dispatch: null };
+      reducer = reducer.dispatch = dispatchAction.bind(
+        null,
+        currentlyRenderingComponent,
+        reducer
+      );
+      return [workInProgressHook.memoizedState, reducer];
+    }
+    function useMemo(nextCreate, deps) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      if (null !== workInProgressHook) {
+        var prevState = workInProgressHook.memoizedState;
+        if (null !== prevState && null !== deps) {
+          a: {
+            var JSCompiler_inline_result = prevState[1];
+            if (null === JSCompiler_inline_result)
+              console.error(
+                "%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",
+                currentHookNameInDev
+              ),
+                (JSCompiler_inline_result = !1);
+            else {
+              deps.length !== JSCompiler_inline_result.length &&
+                console.error(
+                  "The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s",
+                  currentHookNameInDev,
+                  "[" + deps.join(", ") + "]",
+                  "[" + JSCompiler_inline_result.join(", ") + "]"
+                );
+              for (
+                var i = 0;
+                i < JSCompiler_inline_result.length && i < deps.length;
+                i++
+              )
+                if (!objectIs(deps[i], JSCompiler_inline_result[i])) {
+                  JSCompiler_inline_result = !1;
+                  break a;
+                }
+              JSCompiler_inline_result = !0;
+            }
+          }
+          if (JSCompiler_inline_result) return prevState[0];
+        }
+      }
+      isInHookUserCodeInDev = !0;
+      nextCreate = nextCreate();
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = [nextCreate, deps];
+      return nextCreate;
+    }
+    function dispatchAction(componentIdentity, queue, action) {
+      if (25 <= numberOfReRenders)
+        throw Error(
+          "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+        );
+      if (componentIdentity === currentlyRenderingComponent)
+        if (
+          ((didScheduleRenderPhaseUpdate = !0),
+          (componentIdentity = { action: action, next: null }),
+          null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+          (action = renderPhaseUpdates.get(queue)),
+          void 0 === action)
+        )
+          renderPhaseUpdates.set(queue, componentIdentity);
+        else {
+          for (queue = action; null !== queue.next; ) queue = queue.next;
+          queue.next = componentIdentity;
+        }
+    }
+    function unsupportedStartTransition() {
+      throw Error("startTransition cannot be called during server rendering.");
+    }
+    function unsupportedSetOptimisticState() {
+      throw Error("Cannot update optimistic state while rendering.");
+    }
+    function useActionState(action, initialState, permalink) {
+      resolveCurrentlyRenderingComponent();
+      var actionStateHookIndex = actionStateCounter++,
+        request = currentlyRenderingRequest;
+      if ("function" === typeof action.$$FORM_ACTION) {
+        var nextPostbackStateKey = null,
+          componentKeyPath = currentlyRenderingKeyPath;
+        request = request.formState;
+        var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+        if (null !== request && "function" === typeof isSignatureEqual) {
+          var postbackKey = request[1];
+          isSignatureEqual.call(action, request[2], request[3]) &&
+            ((nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  murmurhash3_32_gc(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ]),
+                    0
+                  )),
+            postbackKey === nextPostbackStateKey &&
+              ((actionStateMatchingIndex = actionStateHookIndex),
+              (initialState = request[0])));
+        }
+        var boundAction = action.bind(null, initialState);
+        action = function (payload) {
+          boundAction(payload);
+        };
+        "function" === typeof boundAction.$$FORM_ACTION &&
+          (action.$$FORM_ACTION = function (prefix) {
+            prefix = boundAction.$$FORM_ACTION(prefix);
+            void 0 !== permalink &&
+              (checkAttributeStringCoercion(permalink, "target"),
+              (permalink += ""),
+              (prefix.action = permalink));
+            var formData = prefix.data;
+            formData &&
+              (null === nextPostbackStateKey &&
+                (nextPostbackStateKey =
+                  void 0 !== permalink
+                    ? "p" + permalink
+                    : "k" +
+                      murmurhash3_32_gc(
+                        JSON.stringify([
+                          componentKeyPath,
+                          null,
+                          actionStateHookIndex
+                        ]),
+                        0
+                      )),
+              formData.append("$ACTION_KEY", nextPostbackStateKey));
+            return prefix;
+          });
+        return [initialState, action, !1];
+      }
+      var _boundAction = action.bind(null, initialState);
+      return [
+        initialState,
+        function (payload) {
+          _boundAction(payload);
+        },
+        !1
+      ];
+    }
+    function unwrapThenable(thenable) {
+      var index = thenableIndexCounter;
+      thenableIndexCounter += 1;
+      null === thenableState && (thenableState = []);
+      return trackUsedThenable(thenableState, thenable, index);
+    }
+    function unsupportedRefresh() {
+      throw Error("Cache cannot be refreshed during server rendering.");
+    }
+    function noop$1() {}
+    function disabledLog() {}
+    function disableLogs() {
+      if (0 === disabledDepth) {
+        prevLog = console.log;
+        prevInfo = console.info;
+        prevWarn = console.warn;
+        prevError = console.error;
+        prevGroup = console.group;
+        prevGroupCollapsed = console.groupCollapsed;
+        prevGroupEnd = console.groupEnd;
+        var props = {
+          configurable: !0,
+          enumerable: !0,
+          value: disabledLog,
+          writable: !0
+        };
+        Object.defineProperties(console, {
+          info: props,
+          log: props,
+          warn: props,
+          error: props,
+          group: props,
+          groupCollapsed: props,
+          groupEnd: props
+        });
+      }
+      disabledDepth++;
+    }
+    function reenableLogs() {
+      disabledDepth--;
+      if (0 === disabledDepth) {
+        var props = { configurable: !0, enumerable: !0, writable: !0 };
+        Object.defineProperties(console, {
+          log: assign({}, props, { value: prevLog }),
+          info: assign({}, props, { value: prevInfo }),
+          warn: assign({}, props, { value: prevWarn }),
+          error: assign({}, props, { value: prevError }),
+          group: assign({}, props, { value: prevGroup }),
+          groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
+          groupEnd: assign({}, props, { value: prevGroupEnd })
+        });
+      }
+      0 > disabledDepth &&
+        console.error(
+          "disabledDepth fell below zero. This is a bug in React. Please file an issue."
+        );
+    }
+    function describeBuiltInComponentFrame(name) {
+      if (void 0 === prefix)
+        try {
+          throw Error();
+        } catch (x) {
+          var match = x.stack.trim().match(/\n( *(at )?)/);
+          prefix = (match && match[1]) || "";
+          suffix =
+            -1 < x.stack.indexOf("\n    at")
+              ? " (<anonymous>)"
+              : -1 < x.stack.indexOf("@")
+                ? "@unknown:0:0"
+                : "";
+        }
+      return "\n" + prefix + name + suffix;
+    }
+    function describeNativeComponentFrame(fn, construct) {
+      if (!fn || reentry) return "";
+      var frame = componentFrameCache.get(fn);
+      if (void 0 !== frame) return frame;
+      reentry = !0;
+      frame = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      var previousDispatcher = null;
+      previousDispatcher = ReactSharedInternals.H;
+      ReactSharedInternals.H = null;
+      disableLogs();
+      try {
+        var RunInRootFrame = {
+          DetermineComponentFrameRoot: function () {
+            try {
+              if (construct) {
+                var Fake = function () {
+                  throw Error();
+                };
+                Object.defineProperty(Fake.prototype, "props", {
+                  set: function () {
+                    throw Error();
+                  }
+                });
+                if ("object" === typeof Reflect && Reflect.construct) {
+                  try {
+                    Reflect.construct(Fake, []);
+                  } catch (x) {
+                    var control = x;
+                  }
+                  Reflect.construct(fn, [], Fake);
+                } else {
+                  try {
+                    Fake.call();
+                  } catch (x$0) {
+                    control = x$0;
+                  }
+                  fn.call(Fake.prototype);
+                }
+              } else {
+                try {
+                  throw Error();
+                } catch (x$1) {
+                  control = x$1;
+                }
+                (Fake = fn()) &&
+                  "function" === typeof Fake.catch &&
+                  Fake.catch(function () {});
+              }
+            } catch (sample) {
+              if (sample && control && "string" === typeof sample.stack)
+                return [sample.stack, control.stack];
+            }
+            return [null, null];
+          }
+        };
+        RunInRootFrame.DetermineComponentFrameRoot.displayName =
+          "DetermineComponentFrameRoot";
+        var namePropDescriptor = Object.getOwnPropertyDescriptor(
+          RunInRootFrame.DetermineComponentFrameRoot,
+          "name"
+        );
+        namePropDescriptor &&
+          namePropDescriptor.configurable &&
+          Object.defineProperty(
+            RunInRootFrame.DetermineComponentFrameRoot,
+            "name",
+            { value: "DetermineComponentFrameRoot" }
+          );
+        var _RunInRootFrame$Deter =
+            RunInRootFrame.DetermineComponentFrameRoot(),
+          sampleStack = _RunInRootFrame$Deter[0],
+          controlStack = _RunInRootFrame$Deter[1];
+        if (sampleStack && controlStack) {
+          var sampleLines = sampleStack.split("\n"),
+            controlLines = controlStack.split("\n");
+          for (
+            _RunInRootFrame$Deter = namePropDescriptor = 0;
+            namePropDescriptor < sampleLines.length &&
+            !sampleLines[namePropDescriptor].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            namePropDescriptor++;
+          for (
+            ;
+            _RunInRootFrame$Deter < controlLines.length &&
+            !controlLines[_RunInRootFrame$Deter].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            _RunInRootFrame$Deter++;
+          if (
+            namePropDescriptor === sampleLines.length ||
+            _RunInRootFrame$Deter === controlLines.length
+          )
+            for (
+              namePropDescriptor = sampleLines.length - 1,
+                _RunInRootFrame$Deter = controlLines.length - 1;
+              1 <= namePropDescriptor &&
+              0 <= _RunInRootFrame$Deter &&
+              sampleLines[namePropDescriptor] !==
+                controlLines[_RunInRootFrame$Deter];
+
+            )
+              _RunInRootFrame$Deter--;
+          for (
+            ;
+            1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;
+            namePropDescriptor--, _RunInRootFrame$Deter--
+          )
+            if (
+              sampleLines[namePropDescriptor] !==
+              controlLines[_RunInRootFrame$Deter]
+            ) {
+              if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {
+                do
+                  if (
+                    (namePropDescriptor--,
+                    _RunInRootFrame$Deter--,
+                    0 > _RunInRootFrame$Deter ||
+                      sampleLines[namePropDescriptor] !==
+                        controlLines[_RunInRootFrame$Deter])
+                  ) {
+                    var _frame =
+                      "\n" +
+                      sampleLines[namePropDescriptor].replace(
+                        " at new ",
+                        " at "
+                      );
+                    fn.displayName &&
+                      _frame.includes("<anonymous>") &&
+                      (_frame = _frame.replace("<anonymous>", fn.displayName));
+                    "function" === typeof fn &&
+                      componentFrameCache.set(fn, _frame);
+                    return _frame;
+                  }
+                while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
+              }
+              break;
+            }
+        }
+      } finally {
+        (reentry = !1),
+          (ReactSharedInternals.H = previousDispatcher),
+          reenableLogs(),
+          (Error.prepareStackTrace = frame);
+      }
+      sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "")
+        ? describeBuiltInComponentFrame(sampleLines)
+        : "";
+      "function" === typeof fn && componentFrameCache.set(fn, sampleLines);
+      return sampleLines;
+    }
+    function formatOwnerStack(error) {
+      var prevPrepareStackTrace = Error.prepareStackTrace;
+      Error.prepareStackTrace = void 0;
+      error = error.stack;
+      Error.prepareStackTrace = prevPrepareStackTrace;
+      error.startsWith("Error: react-stack-top-frame\n") &&
+        (error = error.slice(29));
+      prevPrepareStackTrace = error.indexOf("\n");
+      -1 !== prevPrepareStackTrace &&
+        (error = error.slice(prevPrepareStackTrace + 1));
+      prevPrepareStackTrace = error.indexOf("react_stack_bottom_frame");
+      -1 !== prevPrepareStackTrace &&
+        (prevPrepareStackTrace = error.lastIndexOf(
+          "\n",
+          prevPrepareStackTrace
+        ));
+      if (-1 !== prevPrepareStackTrace)
+        error = error.slice(0, prevPrepareStackTrace);
+      else return "";
+      return error;
+    }
+    function describeComponentStackByType(type) {
+      if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+      if ("function" === typeof type)
+        return type.prototype && type.prototype.isReactComponent
+          ? describeNativeComponentFrame(type, !0)
+          : describeNativeComponentFrame(type, !1);
+      if ("object" === typeof type && null !== type) {
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeNativeComponentFrame(type.render, !1);
+          case REACT_MEMO_TYPE:
+            return describeNativeComponentFrame(type.type, !1);
+          case REACT_LAZY_TYPE:
+            var lazyComponent = type,
+              payload = lazyComponent._payload;
+            lazyComponent = lazyComponent._init;
+            try {
+              type = lazyComponent(payload);
+            } catch (x) {
+              return describeBuiltInComponentFrame("Lazy");
+            }
+            return describeComponentStackByType(type);
+        }
+        if ("string" === typeof type.name)
+          return (
+            (payload = type.env),
+            describeBuiltInComponentFrame(
+              type.name + (payload ? " [" + payload + "]" : "")
+            )
+          );
+      }
+      switch (type) {
+        case REACT_SUSPENSE_LIST_TYPE:
+          return describeBuiltInComponentFrame("SuspenseList");
+        case REACT_SUSPENSE_TYPE:
+          return describeBuiltInComponentFrame("Suspense");
+      }
+      return "";
+    }
+    function defaultErrorHandler(error) {
+      if (
+        "object" === typeof error &&
+        null !== error &&
+        "string" === typeof error.environmentName
+      ) {
+        var JSCompiler_inline_result = error.environmentName;
+        error = [error].slice(0);
+        "string" === typeof error[0]
+          ? error.splice(
+              0,
+              1,
+              "%c%s%c " + error[0],
+              "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+              " " + JSCompiler_inline_result + " ",
+              ""
+            )
+          : error.splice(
+              0,
+              0,
+              "%c%s%c ",
+              "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+              " " + JSCompiler_inline_result + " ",
+              ""
+            );
+        error.unshift(console);
+        JSCompiler_inline_result = bind.apply(console.error, error);
+        JSCompiler_inline_result();
+      } else console.error(error);
+      return null;
+    }
+    function noop() {}
+    function RequestInstance(
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var abortSet = new Set();
+      this.destination = null;
+      this.flushScheduled = !1;
+      this.resumableState = resumableState;
+      this.renderState = renderState;
+      this.rootFormatContext = rootFormatContext;
+      this.progressiveChunkSize =
+        void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+      this.status = 10;
+      this.fatalError = null;
+      this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+      this.completedPreambleSegments = this.completedRootSegment = null;
+      this.abortableTasks = abortSet;
+      this.pingedTasks = [];
+      this.clientRenderedBoundaries = [];
+      this.completedBoundaries = [];
+      this.partialBoundaries = [];
+      this.trackedPostpones = null;
+      this.onError = void 0 === onError ? defaultErrorHandler : onError;
+      this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+      this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+      this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+      this.onShellError = void 0 === onShellError ? noop : onShellError;
+      this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+      this.formState = void 0 === formState ? null : formState;
+      this.didWarnForKey = null;
+    }
+    function createRequest(
+      children,
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var now = getCurrentTime();
+      1e3 < now - lastResetTime &&
+        ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),
+        (lastResetTime = now));
+      resumableState = new RequestInstance(
+        resumableState,
+        renderState,
+        rootFormatContext,
+        progressiveChunkSize,
+        onError,
+        onAllReady,
+        onShellReady,
+        onShellError,
+        onFatalError,
+        onPostpone,
+        formState
+      );
+      renderState = createPendingSegment(
+        resumableState,
+        0,
+        null,
+        rootFormatContext,
+        !1,
+        !1
+      );
+      renderState.parentFlushed = !0;
+      children = createRenderTask(
+        resumableState,
+        null,
+        children,
+        -1,
+        null,
+        renderState,
+        null,
+        null,
+        resumableState.abortableTasks,
+        null,
+        rootFormatContext,
+        null,
+        emptyTreeContext,
+        null,
+        !1,
+        emptyContextObject,
+        null
+      );
+      pushComponentStack(children);
+      resumableState.pingedTasks.push(children);
+      return resumableState;
+    }
+    function createPrerenderRequest(
+      children,
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone
+    ) {
+      children = createRequest(
+        children,
+        resumableState,
+        renderState,
+        rootFormatContext,
+        progressiveChunkSize,
+        onError,
+        onAllReady,
+        onShellReady,
+        onShellError,
+        onFatalError,
+        onPostpone,
+        void 0
+      );
+      children.trackedPostpones = {
+        workingMap: new Map(),
+        rootNodes: [],
+        rootSlots: null
+      };
+      return children;
+    }
+    function pingTask(request, task) {
+      request.pingedTasks.push(task);
+      1 === request.pingedTasks.length &&
+        ((request.flushScheduled = null !== request.destination),
+        null !== request.trackedPostpones || 10 === request.status
+          ? scheduleMicrotask(function () {
+              return performWork(request);
+            })
+          : scheduleWork(function () {
+              return performWork(request);
+            }));
+    }
+    function createSuspenseBoundary(
+      request,
+      fallbackAbortableTasks,
+      contentPreamble,
+      fallbackPreamble
+    ) {
+      return {
+        status: PENDING,
+        rootSegmentID: -1,
+        parentFlushed: !1,
+        pendingTasks: 0,
+        completedSegments: [],
+        byteSize: 0,
+        fallbackAbortableTasks: fallbackAbortableTasks,
+        errorDigest: null,
+        contentState: createHoistableState(),
+        fallbackState: createHoistableState(),
+        contentPreamble: contentPreamble,
+        fallbackPreamble: fallbackPreamble,
+        trackedContentKeyPath: null,
+        trackedFallbackNode: null,
+        errorMessage: null,
+        errorStack: null,
+        errorComponentStack: null
+      };
+    }
+    function createRenderTask(
+      request,
+      thenableState,
+      node,
+      childIndex,
+      blockedBoundary,
+      blockedSegment,
+      blockedPreamble,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      var task = {
+        replay: null,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: blockedSegment,
+        blockedPreamble: blockedPreamble,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createReplayTask(
+      request,
+      thenableState,
+      replay,
+      node,
+      childIndex,
+      blockedBoundary,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      replay.pendingTasks++;
+      var task = {
+        replay: replay,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: null,
+        blockedPreamble: null,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createPendingSegment(
+      request,
+      index,
+      boundary,
+      parentFormatContext,
+      lastPushedText,
+      textEmbedded
+    ) {
+      return {
+        status: PENDING,
+        parentFlushed: !1,
+        id: -1,
+        index: index,
+        chunks: [],
+        children: [],
+        preambleChildren: [],
+        parentFormatContext: parentFormatContext,
+        boundary: boundary,
+        lastPushedText: lastPushedText,
+        textEmbedded: textEmbedded
+      };
+    }
+    function getCurrentStackInDEV() {
+      if (null === currentTaskInDEV || null === currentTaskInDEV.componentStack)
+        return "";
+      var componentStack = currentTaskInDEV.componentStack;
+      try {
+        var info = "";
+        if ("string" === typeof componentStack.type)
+          info += describeBuiltInComponentFrame(componentStack.type);
+        else if ("function" === typeof componentStack.type) {
+          if (!componentStack.owner) {
+            var JSCompiler_temp_const = info,
+              fn = componentStack.type,
+              name = fn ? fn.displayName || fn.name : "";
+            var JSCompiler_inline_result = name
+              ? describeBuiltInComponentFrame(name)
+              : "";
+            info = JSCompiler_temp_const + JSCompiler_inline_result;
+          }
+        } else
+          componentStack.owner ||
+            (info += describeComponentStackByType(componentStack.type));
+        for (; componentStack; )
+          (JSCompiler_temp_const = null),
+            null != componentStack.debugStack
+              ? (JSCompiler_temp_const = formatOwnerStack(
+                  componentStack.debugStack
+                ))
+              : ((JSCompiler_inline_result = componentStack),
+                null != JSCompiler_inline_result.stack &&
+                  (JSCompiler_temp_const =
+                    "string" !== typeof JSCompiler_inline_result.stack
+                      ? (JSCompiler_inline_result.stack = formatOwnerStack(
+                          JSCompiler_inline_result.stack
+                        ))
+                      : JSCompiler_inline_result.stack)),
+            (componentStack = componentStack.owner) &&
+              JSCompiler_temp_const &&
+              (info += "\n" + JSCompiler_temp_const);
+        var JSCompiler_inline_result$jscomp$0 = info;
+      } catch (x) {
+        JSCompiler_inline_result$jscomp$0 =
+          "\nError generating stack: " + x.message + "\n" + x.stack;
+      }
+      return JSCompiler_inline_result$jscomp$0;
+    }
+    function pushServerComponentStack(task, debugInfo) {
+      if (null != debugInfo)
+        for (var i = 0; i < debugInfo.length; i++) {
+          var componentInfo = debugInfo[i];
+          "string" === typeof componentInfo.name &&
+            void 0 !== componentInfo.debugStack &&
+            ((task.componentStack = {
+              parent: task.componentStack,
+              type: componentInfo,
+              owner: componentInfo.owner,
+              stack: componentInfo.debugStack
+            }),
+            (task.debugTask = componentInfo.debugTask));
+        }
+    }
+    function pushComponentStack(task) {
+      var node = task.node;
+      if ("object" === typeof node && null !== node)
+        switch (node.$$typeof) {
+          case REACT_ELEMENT_TYPE:
+            var type = node.type,
+              owner = node._owner,
+              stack = node._debugStack;
+            pushServerComponentStack(task, node._debugInfo);
+            task.debugTask = node._debugTask;
+            task.componentStack = {
+              parent: task.componentStack,
+              type: type,
+              owner: owner,
+              stack: stack
+            };
+            break;
+          case REACT_LAZY_TYPE:
+            pushServerComponentStack(task, node._debugInfo);
+            break;
+          default:
+            "function" === typeof node.then &&
+              pushServerComponentStack(task, node._debugInfo);
+        }
+    }
+    function getThrownInfo(node$jscomp$0) {
+      var errorInfo = {};
+      node$jscomp$0 &&
+        Object.defineProperty(errorInfo, "componentStack", {
+          configurable: !0,
+          enumerable: !0,
+          get: function () {
+            try {
+              var info = "",
+                node = node$jscomp$0;
+              do
+                (info += describeComponentStackByType(node.type)),
+                  (node = node.parent);
+              while (node);
+              var stack = info;
+            } catch (x) {
+              stack = "\nError generating stack: " + x.message + "\n" + x.stack;
+            }
+            Object.defineProperty(errorInfo, "componentStack", {
+              value: stack
+            });
+            return stack;
+          }
+        });
+      return errorInfo;
+    }
+    function encodeErrorForBoundary(
+      boundary,
+      digest,
+      error,
+      thrownInfo,
+      wasAborted
+    ) {
+      boundary.errorDigest = digest;
+      error instanceof Error
+        ? ((digest = String(error.message)), (error = String(error.stack)))
+        : ((digest =
+            "object" === typeof error && null !== error
+              ? describeObjectForErrorMessage(error)
+              : String(error)),
+          (error = null));
+      wasAborted = wasAborted
+        ? "Switched to client rendering because the server rendering aborted due to:\n\n"
+        : "Switched to client rendering because the server rendering errored:\n\n";
+      boundary.errorMessage = wasAborted + digest;
+      boundary.errorStack = null !== error ? wasAborted + error : null;
+      boundary.errorComponentStack = thrownInfo.componentStack;
+    }
+    function logRecoverableError(request, error, errorInfo, debugTask) {
+      request = request.onError;
+      error = debugTask
+        ? debugTask.run(request.bind(null, error, errorInfo))
+        : request(error, errorInfo);
+      if (null != error && "string" !== typeof error)
+        console.error(
+          'onError returned something with a type other than "string". onError should return a string and may return null or undefined but must not return anything else. It received something of type "%s" instead',
+          typeof error
+        );
+      else return error;
+    }
+    function fatalError(request, error, errorInfo, debugTask) {
+      errorInfo = request.onShellError;
+      var onFatalError = request.onFatalError;
+      debugTask
+        ? (debugTask.run(errorInfo.bind(null, error)),
+          debugTask.run(onFatalError.bind(null, error)))
+        : (errorInfo(error), onFatalError(error));
+      null !== request.destination
+        ? ((request.status = CLOSED),
+          closeWithError(request.destination, error))
+        : ((request.status = 13), (request.fatalError = error));
+    }
+    function renderWithHooks(
+      request,
+      task,
+      keyPath,
+      Component,
+      props,
+      secondArg
+    ) {
+      var prevThenableState = task.thenableState;
+      task.thenableState = null;
+      currentlyRenderingComponent = {};
+      currentlyRenderingTask = task;
+      currentlyRenderingRequest = request;
+      currentlyRenderingKeyPath = keyPath;
+      isInHookUserCodeInDev = !1;
+      actionStateCounter = localIdCounter = 0;
+      actionStateMatchingIndex = -1;
+      thenableIndexCounter = 0;
+      thenableState = prevThenableState;
+      for (
+        request = callComponentInDEV(Component, props, secondArg);
+        didScheduleRenderPhaseUpdate;
+
+      )
+        (didScheduleRenderPhaseUpdate = !1),
+          (actionStateCounter = localIdCounter = 0),
+          (actionStateMatchingIndex = -1),
+          (thenableIndexCounter = 0),
+          (numberOfReRenders += 1),
+          (workInProgressHook = null),
+          (request = Component(props, secondArg));
+      resetHooksState();
+      return request;
+    }
+    function finishFunctionComponent(
+      request,
+      task,
+      keyPath,
+      children,
+      hasId,
+      actionStateCount,
+      actionStateMatchingIndex
+    ) {
+      var didEmitActionStateMarkers = !1;
+      if (0 !== actionStateCount && null !== request.formState) {
+        var segment = task.blockedSegment;
+        if (null !== segment) {
+          didEmitActionStateMarkers = !0;
+          segment = segment.chunks;
+          for (var i = 0; i < actionStateCount; i++)
+            i === actionStateMatchingIndex
+              ? segment.push(formStateMarkerIsMatching)
+              : segment.push(formStateMarkerIsNotMatching);
+        }
+      }
+      actionStateCount = task.keyPath;
+      task.keyPath = keyPath;
+      hasId
+        ? ((keyPath = task.treeContext),
+          (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+          renderNode(request, task, children, -1),
+          (task.treeContext = keyPath))
+        : didEmitActionStateMarkers
+          ? renderNode(request, task, children, -1)
+          : renderNodeDestructive(request, task, children, -1);
+      task.keyPath = actionStateCount;
+    }
+    function renderElement(request, task, keyPath, type, props, ref) {
+      if ("function" === typeof type)
+        if (type.prototype && type.prototype.isReactComponent) {
+          var newProps = props;
+          if ("ref" in props) {
+            newProps = {};
+            for (var propName in props)
+              "ref" !== propName && (newProps[propName] = props[propName]);
+          }
+          var defaultProps = type.defaultProps;
+          if (defaultProps) {
+            newProps === props && (newProps = assign({}, newProps, props));
+            for (var _propName in defaultProps)
+              void 0 === newProps[_propName] &&
+                (newProps[_propName] = defaultProps[_propName]);
+          }
+          var resolvedProps = newProps;
+          var context = emptyContextObject,
+            contextType = type.contextType;
+          if (
+            "contextType" in type &&
+            null !== contextType &&
+            (void 0 === contextType ||
+              contextType.$$typeof !== REACT_CONTEXT_TYPE) &&
+            !didWarnAboutInvalidateContextType.has(type)
+          ) {
+            didWarnAboutInvalidateContextType.add(type);
+            var addendum =
+              void 0 === contextType
+                ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file."
+                : "object" !== typeof contextType
+                  ? " However, it is set to a " + typeof contextType + "."
+                  : contextType.$$typeof === REACT_CONSUMER_TYPE
+                    ? " Did you accidentally pass the Context.Consumer instead?"
+                    : " However, it is set to an object with keys {" +
+                      Object.keys(contextType).join(", ") +
+                      "}.";
+            console.error(
+              "%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",
+              getComponentNameFromType(type) || "Component",
+              addendum
+            );
+          }
+          "object" === typeof contextType &&
+            null !== contextType &&
+            (context = contextType._currentValue);
+          var instance = new type(resolvedProps, context);
+          if (
+            "function" === typeof type.getDerivedStateFromProps &&
+            (null === instance.state || void 0 === instance.state)
+          ) {
+            var componentName = getComponentNameFromType(type) || "Component";
+            didWarnAboutUninitializedState.has(componentName) ||
+              (didWarnAboutUninitializedState.add(componentName),
+              console.error(
+                "`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",
+                componentName,
+                null === instance.state ? "null" : "undefined",
+                componentName
+              ));
+          }
+          if (
+            "function" === typeof type.getDerivedStateFromProps ||
+            "function" === typeof instance.getSnapshotBeforeUpdate
+          ) {
+            var foundWillMountName = null,
+              foundWillReceivePropsName = null,
+              foundWillUpdateName = null;
+            "function" === typeof instance.componentWillMount &&
+            !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ? (foundWillMountName = "componentWillMount")
+              : "function" === typeof instance.UNSAFE_componentWillMount &&
+                (foundWillMountName = "UNSAFE_componentWillMount");
+            "function" === typeof instance.componentWillReceiveProps &&
+            !0 !==
+              instance.componentWillReceiveProps.__suppressDeprecationWarning
+              ? (foundWillReceivePropsName = "componentWillReceiveProps")
+              : "function" ===
+                  typeof instance.UNSAFE_componentWillReceiveProps &&
+                (foundWillReceivePropsName =
+                  "UNSAFE_componentWillReceiveProps");
+            "function" === typeof instance.componentWillUpdate &&
+            !0 !== instance.componentWillUpdate.__suppressDeprecationWarning
+              ? (foundWillUpdateName = "componentWillUpdate")
+              : "function" === typeof instance.UNSAFE_componentWillUpdate &&
+                (foundWillUpdateName = "UNSAFE_componentWillUpdate");
+            if (
+              null !== foundWillMountName ||
+              null !== foundWillReceivePropsName ||
+              null !== foundWillUpdateName
+            ) {
+              var _componentName =
+                  getComponentNameFromType(type) || "Component",
+                newApiName =
+                  "function" === typeof type.getDerivedStateFromProps
+                    ? "getDerivedStateFromProps()"
+                    : "getSnapshotBeforeUpdate()";
+              didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName) ||
+                (didWarnAboutLegacyLifecyclesAndDerivedState.add(
+                  _componentName
+                ),
+                console.error(
+                  "Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles",
+                  _componentName,
+                  newApiName,
+                  null !== foundWillMountName
+                    ? "\n  " + foundWillMountName
+                    : "",
+                  null !== foundWillReceivePropsName
+                    ? "\n  " + foundWillReceivePropsName
+                    : "",
+                  null !== foundWillUpdateName
+                    ? "\n  " + foundWillUpdateName
+                    : ""
+                ));
+            }
+          }
+          var name = getComponentNameFromType(type) || "Component";
+          instance.render ||
+            (type.prototype && "function" === typeof type.prototype.render
+              ? console.error(
+                  "No `render` method found on the %s instance: did you accidentally return an object from the constructor?",
+                  name
+                )
+              : console.error(
+                  "No `render` method found on the %s instance: you may have forgotten to define `render`.",
+                  name
+                ));
+          !instance.getInitialState ||
+            instance.getInitialState.isReactClassApproved ||
+            instance.state ||
+            console.error(
+              "getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",
+              name
+            );
+          instance.getDefaultProps &&
+            !instance.getDefaultProps.isReactClassApproved &&
+            console.error(
+              "getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",
+              name
+            );
+          instance.contextType &&
+            console.error(
+              "contextType was defined as an instance property on %s. Use a static property to define contextType instead.",
+              name
+            );
+          type.childContextTypes &&
+            !didWarnAboutChildContextTypes.has(type) &&
+            (didWarnAboutChildContextTypes.add(type),
+            console.error(
+              "%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          type.contextTypes &&
+            !didWarnAboutContextTypes$1.has(type) &&
+            (didWarnAboutContextTypes$1.add(type),
+            console.error(
+              "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          "function" === typeof instance.componentShouldUpdate &&
+            console.error(
+              "%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",
+              name
+            );
+          type.prototype &&
+            type.prototype.isPureReactComponent &&
+            "undefined" !== typeof instance.shouldComponentUpdate &&
+            console.error(
+              "%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",
+              getComponentNameFromType(type) || "A pure component"
+            );
+          "function" === typeof instance.componentDidUnmount &&
+            console.error(
+              "%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",
+              name
+            );
+          "function" === typeof instance.componentDidReceiveProps &&
+            console.error(
+              "%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",
+              name
+            );
+          "function" === typeof instance.componentWillRecieveProps &&
+            console.error(
+              "%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",
+              name
+            );
+          "function" === typeof instance.UNSAFE_componentWillRecieveProps &&
+            console.error(
+              "%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",
+              name
+            );
+          var hasMutatedProps = instance.props !== resolvedProps;
+          void 0 !== instance.props &&
+            hasMutatedProps &&
+            console.error(
+              "When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",
+              name
+            );
+          instance.defaultProps &&
+            console.error(
+              "Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",
+              name,
+              name
+            );
+          "function" !== typeof instance.getSnapshotBeforeUpdate ||
+            "function" === typeof instance.componentDidUpdate ||
+            didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(type) ||
+            (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(type),
+            console.error(
+              "%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",
+              getComponentNameFromType(type)
+            ));
+          "function" === typeof instance.getDerivedStateFromProps &&
+            console.error(
+              "%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof instance.getDerivedStateFromError &&
+            console.error(
+              "%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof type.getSnapshotBeforeUpdate &&
+            console.error(
+              "%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",
+              name
+            );
+          var state = instance.state;
+          state &&
+            ("object" !== typeof state || isArrayImpl(state)) &&
+            console.error("%s.state: must be set to an object or null", name);
+          "function" === typeof instance.getChildContext &&
+            "object" !== typeof type.childContextTypes &&
+            console.error(
+              "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",
+              name
+            );
+          var initialState = void 0 !== instance.state ? instance.state : null;
+          instance.updater = classComponentUpdater;
+          instance.props = resolvedProps;
+          instance.state = initialState;
+          var internalInstance = { queue: [], replace: !1 };
+          instance._reactInternals = internalInstance;
+          var contextType$jscomp$0 = type.contextType;
+          instance.context =
+            "object" === typeof contextType$jscomp$0 &&
+            null !== contextType$jscomp$0
+              ? contextType$jscomp$0._currentValue
+              : emptyContextObject;
+          if (instance.state === resolvedProps) {
+            var componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Component";
+            didWarnAboutDirectlyAssigningPropsToState.has(
+              componentName$jscomp$0
+            ) ||
+              (didWarnAboutDirectlyAssigningPropsToState.add(
+                componentName$jscomp$0
+              ),
+              console.error(
+                "%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",
+                componentName$jscomp$0
+              ));
+          }
+          var getDerivedStateFromProps = type.getDerivedStateFromProps;
+          if ("function" === typeof getDerivedStateFromProps) {
+            var partialState = getDerivedStateFromProps(
+              resolvedProps,
+              initialState
+            );
+            if (void 0 === partialState) {
+              var componentName$jscomp$1 =
+                getComponentNameFromType(type) || "Component";
+              didWarnAboutUndefinedDerivedState.has(componentName$jscomp$1) ||
+                (didWarnAboutUndefinedDerivedState.add(componentName$jscomp$1),
+                console.error(
+                  "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",
+                  componentName$jscomp$1
+                ));
+            }
+            var JSCompiler_inline_result =
+              null === partialState || void 0 === partialState
+                ? initialState
+                : assign({}, initialState, partialState);
+            instance.state = JSCompiler_inline_result;
+          }
+          if (
+            "function" !== typeof type.getDerivedStateFromProps &&
+            "function" !== typeof instance.getSnapshotBeforeUpdate &&
+            ("function" === typeof instance.UNSAFE_componentWillMount ||
+              "function" === typeof instance.componentWillMount)
+          ) {
+            var oldState = instance.state;
+            if ("function" === typeof instance.componentWillMount) {
+              if (
+                !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ) {
+                var componentName$jscomp$2 =
+                  getComponentNameFromType(type) || "Unknown";
+                didWarnAboutDeprecatedWillMount[componentName$jscomp$2] ||
+                  (console.warn(
+                    "componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code from componentWillMount to componentDidMount (preferred in most cases) or the constructor.\n\nPlease update the following components: %s",
+                    componentName$jscomp$2
+                  ),
+                  (didWarnAboutDeprecatedWillMount[componentName$jscomp$2] =
+                    !0));
+              }
+              instance.componentWillMount();
+            }
+            "function" === typeof instance.UNSAFE_componentWillMount &&
+              instance.UNSAFE_componentWillMount();
+            oldState !== instance.state &&
+              (console.error(
+                "%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+                getComponentNameFromType(type) || "Component"
+              ),
+              classComponentUpdater.enqueueReplaceState(
+                instance,
+                instance.state,
+                null
+              ));
+            if (
+              null !== internalInstance.queue &&
+              0 < internalInstance.queue.length
+            ) {
+              var oldQueue = internalInstance.queue,
+                oldReplace = internalInstance.replace;
+              internalInstance.queue = null;
+              internalInstance.replace = !1;
+              if (oldReplace && 1 === oldQueue.length)
+                instance.state = oldQueue[0];
+              else {
+                for (
+                  var nextState = oldReplace ? oldQueue[0] : instance.state,
+                    dontMutate = !0,
+                    i = oldReplace ? 1 : 0;
+                  i < oldQueue.length;
+                  i++
+                ) {
+                  var partial = oldQueue[i],
+                    partialState$jscomp$0 =
+                      "function" === typeof partial
+                        ? partial.call(
+                            instance,
+                            nextState,
+                            resolvedProps,
+                            void 0
+                          )
+                        : partial;
+                  null != partialState$jscomp$0 &&
+                    (dontMutate
+                      ? ((dontMutate = !1),
+                        (nextState = assign(
+                          {},
+                          nextState,
+                          partialState$jscomp$0
+                        )))
+                      : assign(nextState, partialState$jscomp$0));
+                }
+                instance.state = nextState;
+              }
+            } else internalInstance.queue = null;
+          }
+          var nextChildren = callRenderInDEV(instance);
+          if (12 === request.status) throw null;
+          instance.props !== resolvedProps &&
+            (didWarnAboutReassigningProps ||
+              console.error(
+                "It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",
+                getComponentNameFromType(type) || "a component"
+              ),
+            (didWarnAboutReassigningProps = !0));
+          var prevKeyPath = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, nextChildren, -1);
+          task.keyPath = prevKeyPath;
+        } else {
+          if (type.prototype && "function" === typeof type.prototype.render) {
+            var componentName$jscomp$3 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutBadClass[componentName$jscomp$3] ||
+              (console.error(
+                "The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",
+                componentName$jscomp$3,
+                componentName$jscomp$3
+              ),
+              (didWarnAboutBadClass[componentName$jscomp$3] = !0));
+          }
+          var value = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type,
+            props,
+            void 0
+          );
+          if (12 === request.status) throw null;
+          var hasId = 0 !== localIdCounter,
+            actionStateCount = actionStateCounter,
+            actionStateMatchingIndex$jscomp$0 = actionStateMatchingIndex;
+          if (type.contextTypes) {
+            var _componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypes[_componentName$jscomp$0] ||
+              ((didWarnAboutContextTypes[_componentName$jscomp$0] = !0),
+              console.error(
+                "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",
+                _componentName$jscomp$0
+              ));
+          }
+          type &&
+            type.childContextTypes &&
+            console.error(
+              "childContextTypes cannot be defined on a function component.\n  %s.childContextTypes = ...",
+              type.displayName || type.name || "Component"
+            );
+          if ("function" === typeof type.getDerivedStateFromProps) {
+            var _componentName2 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] ||
+              (console.error(
+                "%s: Function components do not support getDerivedStateFromProps.",
+                _componentName2
+              ),
+              (didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] =
+                !0));
+          }
+          if (
+            "object" === typeof type.contextType &&
+            null !== type.contextType
+          ) {
+            var _componentName3 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypeOnFunctionComponent[_componentName3] ||
+              (console.error(
+                "%s: Function components do not support contextType.",
+                _componentName3
+              ),
+              (didWarnAboutContextTypeOnFunctionComponent[_componentName3] =
+                !0));
+          }
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            value,
+            hasId,
+            actionStateCount,
+            actionStateMatchingIndex$jscomp$0
+          );
+        }
+      else if ("string" === typeof type) {
+        var segment = task.blockedSegment;
+        if (null === segment) {
+          var children = props.children,
+            prevContext = task.formatContext,
+            prevKeyPath$jscomp$0 = task.keyPath;
+          task.formatContext = getChildFormatContext(prevContext, type, props);
+          task.keyPath = keyPath;
+          renderNode(request, task, children, -1);
+          task.formatContext = prevContext;
+          task.keyPath = prevKeyPath$jscomp$0;
+        } else {
+          var _children = pushStartInstance(
+            segment.chunks,
+            type,
+            props,
+            request.resumableState,
+            request.renderState,
+            task.blockedPreamble,
+            task.hoistableState,
+            task.formatContext,
+            segment.lastPushedText,
+            task.isFallback
+          );
+          segment.lastPushedText = !1;
+          var _prevContext = task.formatContext,
+            _prevKeyPath2 = task.keyPath;
+          task.keyPath = keyPath;
+          if (
+            (task.formatContext = getChildFormatContext(
+              _prevContext,
+              type,
+              props
+            )).insertionMode === HTML_HEAD_MODE
+          ) {
+            var preambleSegment = createPendingSegment(
+              request,
+              0,
+              null,
+              task.formatContext,
+              !1,
+              !1
+            );
+            segment.preambleChildren.push(preambleSegment);
+            var preambleTask = createRenderTask(
+              request,
+              null,
+              _children,
+              -1,
+              task.blockedBoundary,
+              preambleSegment,
+              task.blockedPreamble,
+              task.hoistableState,
+              request.abortableTasks,
+              task.keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback,
+              emptyContextObject,
+              task.debugTask
+            );
+            pushComponentStack(preambleTask);
+            request.pingedTasks.push(preambleTask);
+          } else renderNode(request, task, _children, -1);
+          task.formatContext = _prevContext;
+          task.keyPath = _prevKeyPath2;
+          a: {
+            var target = segment.chunks,
+              resumableState = request.resumableState;
+            switch (type) {
+              case "title":
+              case "style":
+              case "script":
+              case "area":
+              case "base":
+              case "br":
+              case "col":
+              case "embed":
+              case "hr":
+              case "img":
+              case "input":
+              case "keygen":
+              case "link":
+              case "meta":
+              case "param":
+              case "source":
+              case "track":
+              case "wbr":
+                break a;
+              case "body":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) {
+                  resumableState.hasBody = !0;
+                  break a;
+                }
+                break;
+              case "html":
+                if (_prevContext.insertionMode === ROOT_HTML_MODE) {
+                  resumableState.hasHtml = !0;
+                  break a;
+                }
+                break;
+              case "head":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) break a;
+            }
+            target.push(endChunkForTag(type));
+          }
+          segment.lastPushedText = !1;
+        }
+      } else {
+        switch (type) {
+          case REACT_LEGACY_HIDDEN_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_FRAGMENT_TYPE:
+            var prevKeyPath$jscomp$1 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = prevKeyPath$jscomp$1;
+            return;
+          case REACT_ACTIVITY_TYPE:
+            if ("hidden" !== props.mode) {
+              var prevKeyPath$jscomp$2 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, props.children, -1);
+              task.keyPath = prevKeyPath$jscomp$2;
+            }
+            return;
+          case REACT_SUSPENSE_LIST_TYPE:
+            var _prevKeyPath3 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = _prevKeyPath3;
+            return;
+          case REACT_VIEW_TRANSITION_TYPE:
+          case REACT_SCOPE_TYPE:
+            throw Error(
+              "ReactDOMServer does not yet support scope components."
+            );
+          case REACT_SUSPENSE_TYPE:
+            a: if (null !== task.replay) {
+              var _prevKeyPath = task.keyPath;
+              task.keyPath = keyPath;
+              var _content = props.children;
+              try {
+                renderNode(request, task, _content, -1);
+              } finally {
+                task.keyPath = _prevKeyPath;
+              }
+            } else {
+              var prevKeyPath$jscomp$3 = task.keyPath,
+                parentBoundary = task.blockedBoundary,
+                parentPreamble = task.blockedPreamble,
+                parentHoistableState = task.hoistableState,
+                parentSegment = task.blockedSegment,
+                fallback = props.fallback,
+                content = props.children,
+                fallbackAbortSet = new Set();
+              var newBoundary =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              null !== request.trackedPostpones &&
+                (newBoundary.trackedContentKeyPath = keyPath);
+              var boundarySegment = createPendingSegment(
+                request,
+                parentSegment.chunks.length,
+                newBoundary,
+                task.formatContext,
+                !1,
+                !1
+              );
+              parentSegment.children.push(boundarySegment);
+              parentSegment.lastPushedText = !1;
+              var contentRootSegment = createPendingSegment(
+                request,
+                0,
+                null,
+                task.formatContext,
+                !1,
+                !1
+              );
+              contentRootSegment.parentFlushed = !0;
+              if (null !== request.trackedPostpones) {
+                var fallbackKeyPath = [
+                    keyPath[0],
+                    "Suspense Fallback",
+                    keyPath[2]
+                  ],
+                  fallbackReplayNode = [
+                    fallbackKeyPath[1],
+                    fallbackKeyPath[2],
+                    [],
+                    null
+                  ];
+                request.trackedPostpones.workingMap.set(
+                  fallbackKeyPath,
+                  fallbackReplayNode
+                );
+                newBoundary.trackedFallbackNode = fallbackReplayNode;
+                task.blockedSegment = boundarySegment;
+                task.blockedPreamble = newBoundary.fallbackPreamble;
+                task.keyPath = fallbackKeyPath;
+                boundarySegment.status = 6;
+                try {
+                  renderNode(request, task, fallback, -1),
+                    boundarySegment.lastPushedText &&
+                      boundarySegment.textEmbedded &&
+                      boundarySegment.chunks.push(textSeparator),
+                    (boundarySegment.status = COMPLETED);
+                } catch (thrownValue) {
+                  throw (
+                    ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                    thrownValue)
+                  );
+                } finally {
+                  (task.blockedSegment = parentSegment),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedPrimaryTask = createRenderTask(
+                  request,
+                  null,
+                  content,
+                  -1,
+                  newBoundary,
+                  contentRootSegment,
+                  newBoundary.contentPreamble,
+                  newBoundary.contentState,
+                  task.abortSet,
+                  keyPath,
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  task.isFallback,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedPrimaryTask);
+                request.pingedTasks.push(suspendedPrimaryTask);
+              } else {
+                task.blockedBoundary = newBoundary;
+                task.blockedPreamble = newBoundary.contentPreamble;
+                task.hoistableState = newBoundary.contentState;
+                task.blockedSegment = contentRootSegment;
+                task.keyPath = keyPath;
+                contentRootSegment.status = 6;
+                try {
+                  if (
+                    (renderNode(request, task, content, -1),
+                    contentRootSegment.lastPushedText &&
+                      contentRootSegment.textEmbedded &&
+                      contentRootSegment.chunks.push(textSeparator),
+                    (contentRootSegment.status = COMPLETED),
+                    queueCompletedSegment(newBoundary, contentRootSegment),
+                    0 === newBoundary.pendingTasks &&
+                      newBoundary.status === PENDING)
+                  ) {
+                    newBoundary.status = COMPLETED;
+                    0 === request.pendingRootTasks &&
+                      task.blockedPreamble &&
+                      preparePreamble(request);
+                    break a;
+                  }
+                } catch (thrownValue$2) {
+                  newBoundary.status = CLIENT_RENDERED;
+                  if (12 === request.status) {
+                    contentRootSegment.status = 3;
+                    var error = request.fatalError;
+                  } else
+                    (contentRootSegment.status = 4), (error = thrownValue$2);
+                  var thrownInfo = getThrownInfo(task.componentStack);
+                  var errorDigest = logRecoverableError(
+                    request,
+                    error,
+                    thrownInfo,
+                    task.debugTask
+                  );
+                  encodeErrorForBoundary(
+                    newBoundary,
+                    errorDigest,
+                    error,
+                    thrownInfo,
+                    !1
+                  );
+                  untrackBoundary(request, newBoundary);
+                } finally {
+                  (task.blockedBoundary = parentBoundary),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.hoistableState = parentHoistableState),
+                    (task.blockedSegment = parentSegment),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedFallbackTask = createRenderTask(
+                  request,
+                  null,
+                  fallback,
+                  -1,
+                  parentBoundary,
+                  boundarySegment,
+                  newBoundary.fallbackPreamble,
+                  newBoundary.fallbackState,
+                  fallbackAbortSet,
+                  [keyPath[0], "Suspense Fallback", keyPath[2]],
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  !0,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedFallbackTask);
+                request.pingedTasks.push(suspendedFallbackTask);
+              }
+            }
+            return;
+        }
+        if ("object" === typeof type && null !== type)
+          switch (type.$$typeof) {
+            case REACT_FORWARD_REF_TYPE:
+              if ("ref" in props) {
+                var propsWithoutRef = {};
+                for (var key in props)
+                  "ref" !== key && (propsWithoutRef[key] = props[key]);
+              } else propsWithoutRef = props;
+              var children$jscomp$0 = renderWithHooks(
+                request,
+                task,
+                keyPath,
+                type.render,
+                propsWithoutRef,
+                ref
+              );
+              finishFunctionComponent(
+                request,
+                task,
+                keyPath,
+                children$jscomp$0,
+                0 !== localIdCounter,
+                actionStateCounter,
+                actionStateMatchingIndex
+              );
+              return;
+            case REACT_MEMO_TYPE:
+              renderElement(request, task, keyPath, type.type, props, ref);
+              return;
+            case REACT_PROVIDER_TYPE:
+            case REACT_CONTEXT_TYPE:
+              var value$jscomp$0 = props.value,
+                children$jscomp$1 = props.children;
+              var prevSnapshot = task.context;
+              var prevKeyPath$jscomp$4 = task.keyPath;
+              var prevValue = type._currentValue;
+              type._currentValue = value$jscomp$0;
+              void 0 !== type._currentRenderer &&
+                null !== type._currentRenderer &&
+                type._currentRenderer !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer = rendererSigil;
+              var prevNode = currentActiveSnapshot,
+                newNode = {
+                  parent: prevNode,
+                  depth: null === prevNode ? 0 : prevNode.depth + 1,
+                  context: type,
+                  parentValue: prevValue,
+                  value: value$jscomp$0
+                };
+              currentActiveSnapshot = newNode;
+              task.context = newNode;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, children$jscomp$1, -1);
+              var prevSnapshot$jscomp$0 = currentActiveSnapshot;
+              if (null === prevSnapshot$jscomp$0)
+                throw Error(
+                  "Tried to pop a Context at the root of the app. This is a bug in React."
+                );
+              prevSnapshot$jscomp$0.context !== type &&
+                console.error(
+                  "The parent context is not the expected context. This is probably a bug in React."
+                );
+              prevSnapshot$jscomp$0.context._currentValue =
+                prevSnapshot$jscomp$0.parentValue;
+              void 0 !== type._currentRenderer &&
+                null !== type._currentRenderer &&
+                type._currentRenderer !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer = rendererSigil;
+              var JSCompiler_inline_result$jscomp$0 = (currentActiveSnapshot =
+                prevSnapshot$jscomp$0.parent);
+              task.context = JSCompiler_inline_result$jscomp$0;
+              task.keyPath = prevKeyPath$jscomp$4;
+              prevSnapshot !== task.context &&
+                console.error(
+                  "Popping the context provider did not return back to the original snapshot. This is a bug in React."
+                );
+              return;
+            case REACT_CONSUMER_TYPE:
+              var context$jscomp$0 = type._context,
+                render = props.children;
+              "function" !== typeof render &&
+                console.error(
+                  "A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."
+                );
+              var newChildren = render(context$jscomp$0._currentValue),
+                prevKeyPath$jscomp$5 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, newChildren, -1);
+              task.keyPath = prevKeyPath$jscomp$5;
+              return;
+            case REACT_LAZY_TYPE:
+              var Component = callLazyInitInDEV(type);
+              if (12 === request.status) throw null;
+              renderElement(request, task, keyPath, Component, props, ref);
+              return;
+          }
+        var info = "";
+        if (
+          void 0 === type ||
+          ("object" === typeof type &&
+            null !== type &&
+            0 === Object.keys(type).length)
+        )
+          info +=
+            " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
+        throw Error(
+          "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+            ((null == type ? type : typeof type) + "." + info)
+        );
+      }
+    }
+    function resumeNode(request, task, segmentId, node, childIndex) {
+      var prevReplay = task.replay,
+        blockedBoundary = task.blockedBoundary,
+        resumedSegment = createPendingSegment(
+          request,
+          0,
+          null,
+          task.formatContext,
+          !1,
+          !1
+        );
+      resumedSegment.id = segmentId;
+      resumedSegment.parentFlushed = !0;
+      try {
+        (task.replay = null),
+          (task.blockedSegment = resumedSegment),
+          renderNode(request, task, node, childIndex),
+          (resumedSegment.status = COMPLETED),
+          null === blockedBoundary
+            ? (request.completedRootSegment = resumedSegment)
+            : (queueCompletedSegment(blockedBoundary, resumedSegment),
+              blockedBoundary.parentFlushed &&
+                request.partialBoundaries.push(blockedBoundary));
+      } finally {
+        (task.replay = prevReplay), (task.blockedSegment = null);
+      }
+    }
+    function replayElement(
+      request,
+      task,
+      keyPath,
+      name,
+      keyOrIndex,
+      childIndex,
+      type,
+      props,
+      ref,
+      replay
+    ) {
+      childIndex = replay.nodes;
+      for (var i = 0; i < childIndex.length; i++) {
+        var node = childIndex[i];
+        if (keyOrIndex === node[1]) {
+          if (4 === node.length) {
+            if (null !== name && name !== node[0])
+              throw Error(
+                "Expected the resume to render <" +
+                  node[0] +
+                  "> in this slot but instead it rendered <" +
+                  name +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            var childNodes = node[2];
+            node = node[3];
+            name = task.node;
+            task.replay = { nodes: childNodes, slots: node, pendingTasks: 1 };
+            try {
+              renderElement(request, task, keyPath, type, props, ref);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw (task.node === name && (task.replay = replay), x);
+              task.replay.pendingTasks--;
+              type = getThrownInfo(task.componentStack);
+              props = request;
+              request = task.blockedBoundary;
+              keyPath = x;
+              ref = node;
+              node = logRecoverableError(props, keyPath, type, task.debugTask);
+              abortRemainingReplayNodes(
+                props,
+                request,
+                childNodes,
+                ref,
+                keyPath,
+                node,
+                type,
+                !1
+              );
+            }
+            task.replay = replay;
+          } else {
+            if (type !== REACT_SUSPENSE_TYPE)
+              throw Error(
+                "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+                  (getComponentNameFromType(type) || "Unknown") +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            a: {
+              replay = void 0;
+              type = node[5];
+              ref = node[2];
+              name = node[3];
+              keyOrIndex = null === node[4] ? [] : node[4][2];
+              node = null === node[4] ? null : node[4][3];
+              var prevKeyPath = task.keyPath,
+                previousReplaySet = task.replay,
+                parentBoundary = task.blockedBoundary,
+                parentHoistableState = task.hoistableState,
+                content = props.children,
+                fallback = props.fallback,
+                fallbackAbortSet = new Set();
+              props =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              props.parentFlushed = !0;
+              props.rootSegmentID = type;
+              task.blockedBoundary = props;
+              task.hoistableState = props.contentState;
+              task.keyPath = keyPath;
+              task.replay = { nodes: ref, slots: name, pendingTasks: 1 };
+              try {
+                renderNode(request, task, content, -1);
+                if (
+                  1 === task.replay.pendingTasks &&
+                  0 < task.replay.nodes.length
+                )
+                  throw Error(
+                    "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                  );
+                task.replay.pendingTasks--;
+                if (0 === props.pendingTasks && props.status === PENDING) {
+                  props.status = COMPLETED;
+                  request.completedBoundaries.push(props);
+                  break a;
+                }
+              } catch (error) {
+                (props.status = CLIENT_RENDERED),
+                  (childNodes = getThrownInfo(task.componentStack)),
+                  (replay = logRecoverableError(
+                    request,
+                    error,
+                    childNodes,
+                    task.debugTask
+                  )),
+                  encodeErrorForBoundary(props, replay, error, childNodes, !1),
+                  task.replay.pendingTasks--,
+                  request.clientRenderedBoundaries.push(props);
+              } finally {
+                (task.blockedBoundary = parentBoundary),
+                  (task.hoistableState = parentHoistableState),
+                  (task.replay = previousReplaySet),
+                  (task.keyPath = prevKeyPath);
+              }
+              props = createReplayTask(
+                request,
+                null,
+                { nodes: keyOrIndex, slots: node, pendingTasks: 0 },
+                fallback,
+                -1,
+                parentBoundary,
+                props.fallbackState,
+                fallbackAbortSet,
+                [keyPath[0], "Suspense Fallback", keyPath[2]],
+                task.formatContext,
+                task.context,
+                task.treeContext,
+                task.componentStack,
+                !0,
+                emptyContextObject,
+                task.debugTask
+              );
+              pushComponentStack(props);
+              request.pingedTasks.push(props);
+            }
+          }
+          childIndex.splice(i, 1);
+          break;
+        }
+      }
+    }
+    function renderNodeDestructive(request, task, node, childIndex) {
+      null !== task.replay && "number" === typeof task.replay.slots
+        ? resumeNode(request, task, task.replay.slots, node, childIndex)
+        : ((task.node = node),
+          (task.childIndex = childIndex),
+          (node = task.componentStack),
+          (childIndex = task.debugTask),
+          pushComponentStack(task),
+          retryNode(request, task),
+          (task.componentStack = node),
+          (task.debugTask = childIndex));
+    }
+    function retryNode(request, task) {
+      var node = task.node,
+        childIndex = task.childIndex;
+      if (null !== node) {
+        if ("object" === typeof node) {
+          switch (node.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              var type = node.type,
+                key = node.key;
+              node = node.props;
+              var refProp = node.ref;
+              refProp = void 0 !== refProp ? refProp : null;
+              var debugTask = task.debugTask,
+                name = getComponentNameFromType(type);
+              key = null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+              var keyPath = [task.keyPath, name, key];
+              null !== task.replay
+                ? debugTask
+                  ? debugTask.run(
+                      replayElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        name,
+                        key,
+                        childIndex,
+                        type,
+                        node,
+                        refProp,
+                        task.replay
+                      )
+                    )
+                  : replayElement(
+                      request,
+                      task,
+                      keyPath,
+                      name,
+                      key,
+                      childIndex,
+                      type,
+                      node,
+                      refProp,
+                      task.replay
+                    )
+                : debugTask
+                  ? debugTask.run(
+                      renderElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        type,
+                        node,
+                        refProp
+                      )
+                    )
+                  : renderElement(request, task, keyPath, type, node, refProp);
+              return;
+            case REACT_PORTAL_TYPE:
+              throw Error(
+                "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+              );
+            case REACT_LAZY_TYPE:
+              node = callLazyInitInDEV(node);
+              if (12 === request.status) throw null;
+              renderNodeDestructive(request, task, node, childIndex);
+              return;
+          }
+          if (isArrayImpl(node)) {
+            renderChildrenArray(request, task, node, childIndex);
+            return;
+          }
+          null === node || "object" !== typeof node
+            ? (key = null)
+            : ((type =
+                (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+                node["@@iterator"]),
+              (key = "function" === typeof type ? type : null));
+          if (key && (type = key.call(node))) {
+            if (type === node) {
+              if (
+                -1 !== childIndex ||
+                null === task.componentStack ||
+                "function" !== typeof task.componentStack.type ||
+                "[object GeneratorFunction]" !==
+                  Object.prototype.toString.call(task.componentStack.type) ||
+                "[object Generator]" !== Object.prototype.toString.call(type)
+              )
+                didWarnAboutGenerators ||
+                  console.error(
+                    "Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."
+                  ),
+                  (didWarnAboutGenerators = !0);
+            } else
+              node.entries !== key ||
+                didWarnAboutMaps ||
+                (console.error(
+                  "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+                ),
+                (didWarnAboutMaps = !0));
+            node = type.next();
+            if (!node.done) {
+              key = [];
+              do key.push(node.value), (node = type.next());
+              while (!node.done);
+              renderChildrenArray(request, task, key, childIndex);
+            }
+            return;
+          }
+          if ("function" === typeof node.then)
+            return (
+              (task.thenableState = null),
+              renderNodeDestructive(
+                request,
+                task,
+                unwrapThenable(node),
+                childIndex
+              )
+            );
+          if (node.$$typeof === REACT_CONTEXT_TYPE)
+            return renderNodeDestructive(
+              request,
+              task,
+              node._currentValue,
+              childIndex
+            );
+          request = Object.prototype.toString.call(node);
+          throw Error(
+            "Objects are not valid as a React child (found: " +
+              ("[object Object]" === request
+                ? "object with keys {" + Object.keys(node).join(", ") + "}"
+                : request) +
+              "). If you meant to render a collection of children, use an array instead."
+          );
+        }
+        "string" === typeof node
+          ? ((task = task.blockedSegment),
+            null !== task &&
+              (task.lastPushedText = pushTextInstance(
+                task.chunks,
+                node,
+                request.renderState,
+                task.lastPushedText
+              )))
+          : "number" === typeof node || "bigint" === typeof node
+            ? ((task = task.blockedSegment),
+              null !== task &&
+                (task.lastPushedText = pushTextInstance(
+                  task.chunks,
+                  "" + node,
+                  request.renderState,
+                  task.lastPushedText
+                )))
+            : ("function" === typeof node &&
+                ((request = node.displayName || node.name || "Component"),
+                console.error(
+                  "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.",
+                  request,
+                  request
+                )),
+              "symbol" === typeof node &&
+                console.error(
+                  "Symbols are not valid as a React child.\n  %s",
+                  String(node)
+                ));
+      }
+    }
+    function renderChildrenArray(request, task, children, childIndex) {
+      var prevKeyPath = task.keyPath,
+        previousComponentStack = task.componentStack;
+      var previousDebugTask = task.debugTask;
+      pushServerComponentStack(task, task.node._debugInfo);
+      if (
+        -1 !== childIndex &&
+        ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+        null !== task.replay)
+      ) {
+        for (
+          var replay = task.replay, replayNodes = replay.nodes, j = 0;
+          j < replayNodes.length;
+          j++
+        ) {
+          var node = replayNodes[j];
+          if (node[1] === childIndex) {
+            childIndex = node[2];
+            node = node[3];
+            task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+            try {
+              renderChildrenArray(request, task, children, -1);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw x;
+              task.replay.pendingTasks--;
+              var thrownInfo = getThrownInfo(task.componentStack);
+              children = task.blockedBoundary;
+              var error = x,
+                resumeSlots = node;
+              node = logRecoverableError(
+                request,
+                error,
+                thrownInfo,
+                task.debugTask
+              );
+              abortRemainingReplayNodes(
+                request,
+                children,
+                childIndex,
+                resumeSlots,
+                error,
+                node,
+                thrownInfo,
+                !1
+              );
+            }
+            task.replay = replay;
+            replayNodes.splice(j, 1);
+            break;
+          }
+        }
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      replay = task.treeContext;
+      replayNodes = children.length;
+      if (
+        null !== task.replay &&
+        ((j = task.replay.slots), null !== j && "object" === typeof j)
+      ) {
+        for (childIndex = 0; childIndex < replayNodes; childIndex++)
+          (node = children[childIndex]),
+            (task.treeContext = pushTreeContext(
+              replay,
+              replayNodes,
+              childIndex
+            )),
+            (error = j[childIndex]),
+            "number" === typeof error
+              ? (resumeNode(request, task, error, node, childIndex),
+                delete j[childIndex])
+              : renderNode(request, task, node, childIndex);
+        task.treeContext = replay;
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      for (j = 0; j < replayNodes; j++) {
+        childIndex = children[j];
+        resumeSlots = request;
+        node = task;
+        error = childIndex;
+        if (
+          null !== error &&
+          "object" === typeof error &&
+          (error.$$typeof === REACT_ELEMENT_TYPE ||
+            error.$$typeof === REACT_PORTAL_TYPE) &&
+          error._store &&
+          ((!error._store.validated && null == error.key) ||
+            2 === error._store.validated)
+        ) {
+          if ("object" !== typeof error._store)
+            throw Error(
+              "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue."
+            );
+          error._store.validated = 1;
+          thrownInfo = resumeSlots.didWarnForKey;
+          null == thrownInfo &&
+            (thrownInfo = resumeSlots.didWarnForKey = new WeakSet());
+          resumeSlots = node.componentStack;
+          if (null !== resumeSlots && !thrownInfo.has(resumeSlots)) {
+            thrownInfo.add(resumeSlots);
+            var componentName = getComponentNameFromType(error.type);
+            thrownInfo = error._owner;
+            var parentOwner = resumeSlots.owner;
+            resumeSlots = "";
+            if (parentOwner && "undefined" !== typeof parentOwner.type) {
+              var name = getComponentNameFromType(parentOwner.type);
+              name &&
+                (resumeSlots =
+                  "\n\nCheck the render method of `" + name + "`.");
+            }
+            resumeSlots ||
+              (componentName &&
+                (resumeSlots =
+                  "\n\nCheck the top-level render call using <" +
+                  componentName +
+                  ">."));
+            componentName = "";
+            null != thrownInfo &&
+              parentOwner !== thrownInfo &&
+              ((parentOwner = null),
+              "undefined" !== typeof thrownInfo.type
+                ? (parentOwner = getComponentNameFromType(thrownInfo.type))
+                : "string" === typeof thrownInfo.name &&
+                  (parentOwner = thrownInfo.name),
+              parentOwner &&
+                (componentName =
+                  " It was passed a child from " + parentOwner + "."));
+            thrownInfo = node.componentStack;
+            node.componentStack = {
+              parent: node.componentStack,
+              type: error.type,
+              owner: error._owner,
+              stack: error._debugStack
+            };
+            console.error(
+              'Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',
+              resumeSlots,
+              componentName
+            );
+            node.componentStack = thrownInfo;
+          }
+        }
+        task.treeContext = pushTreeContext(replay, replayNodes, j);
+        renderNode(request, task, childIndex, j);
+      }
+      task.treeContext = replay;
+      task.keyPath = prevKeyPath;
+      task.componentStack = previousComponentStack;
+      task.debugTask = previousDebugTask;
+    }
+    function untrackBoundary(request, boundary) {
+      request = request.trackedPostpones;
+      null !== request &&
+        ((boundary = boundary.trackedContentKeyPath),
+        null !== boundary &&
+          ((boundary = request.workingMap.get(boundary)),
+          void 0 !== boundary &&
+            ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+    }
+    function spawnNewSuspendedReplayTask(request, task, thenableState) {
+      return createReplayTask(
+        request,
+        thenableState,
+        task.replay,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function spawnNewSuspendedRenderTask(request, task, thenableState) {
+      var segment = task.blockedSegment,
+        newSegment = createPendingSegment(
+          request,
+          segment.chunks.length,
+          null,
+          task.formatContext,
+          segment.lastPushedText,
+          !0
+        );
+      segment.children.push(newSegment);
+      segment.lastPushedText = !1;
+      return createRenderTask(
+        request,
+        thenableState,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        newSegment,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function renderNode(request, task, node, childIndex) {
+      var previousFormatContext = task.formatContext,
+        previousContext = task.context,
+        previousKeyPath = task.keyPath,
+        previousTreeContext = task.treeContext,
+        previousComponentStack = task.componentStack,
+        previousDebugTask = task.debugTask,
+        segment = task.blockedSegment;
+      if (null === segment)
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue) {
+          if (
+            (resetHooksState(),
+            (node =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedReplayTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedReplayTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      else {
+        var childrenLength = segment.children.length,
+          chunkLength = segment.chunks.length;
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue$3) {
+          if (
+            (resetHooksState(),
+            (segment.children.length = childrenLength),
+            (segment.chunks.length = chunkLength),
+            (node =
+              thrownValue$3 === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue$3),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedRenderTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedRenderTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      }
+      task.formatContext = previousFormatContext;
+      task.context = previousContext;
+      task.keyPath = previousKeyPath;
+      task.treeContext = previousTreeContext;
+      switchContext(previousContext);
+      throw node;
+    }
+    function abortTaskSoft(task) {
+      var boundary = task.blockedBoundary;
+      task = task.blockedSegment;
+      null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+    }
+    function abortRemainingReplayNodes(
+      request$jscomp$0,
+      boundary,
+      nodes,
+      slots,
+      error$jscomp$0,
+      errorDigest$jscomp$0,
+      errorInfo$jscomp$0,
+      aborted
+    ) {
+      for (var i = 0; i < nodes.length; i++) {
+        var node = nodes[i];
+        if (4 === node.length)
+          abortRemainingReplayNodes(
+            request$jscomp$0,
+            boundary,
+            node[2],
+            node[3],
+            error$jscomp$0,
+            errorDigest$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          );
+        else {
+          var request = request$jscomp$0;
+          node = node[5];
+          var error = error$jscomp$0,
+            errorDigest = errorDigest$jscomp$0,
+            errorInfo = errorInfo$jscomp$0,
+            wasAborted = aborted,
+            resumedBoundary = createSuspenseBoundary(
+              request,
+              new Set(),
+              null,
+              null
+            );
+          resumedBoundary.parentFlushed = !0;
+          resumedBoundary.rootSegmentID = node;
+          resumedBoundary.status = CLIENT_RENDERED;
+          encodeErrorForBoundary(
+            resumedBoundary,
+            errorDigest,
+            error,
+            errorInfo,
+            wasAborted
+          );
+          resumedBoundary.parentFlushed &&
+            request.clientRenderedBoundaries.push(resumedBoundary);
+        }
+      }
+      nodes.length = 0;
+      if (null !== slots) {
+        if (null === boundary)
+          throw Error(
+            "We should not have any resumable nodes in the shell. This is a bug in React."
+          );
+        boundary.status !== CLIENT_RENDERED &&
+          ((boundary.status = CLIENT_RENDERED),
+          encodeErrorForBoundary(
+            boundary,
+            errorDigest$jscomp$0,
+            error$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          ),
+          boundary.parentFlushed &&
+            request$jscomp$0.clientRenderedBoundaries.push(boundary));
+        if ("object" === typeof slots)
+          for (var index in slots) delete slots[index];
+      }
+    }
+    function abortTask(task, request, error) {
+      var boundary = task.blockedBoundary,
+        segment = task.blockedSegment;
+      if (null !== segment) {
+        if (6 === segment.status) return;
+        segment.status = 3;
+      }
+      segment = getThrownInfo(task.componentStack);
+      if (null === boundary) {
+        if (13 !== request.status && request.status !== CLOSED) {
+          boundary = task.replay;
+          if (null === boundary) {
+            logRecoverableError(request, error, segment, null);
+            fatalError(request, error, segment, null);
+            return;
+          }
+          boundary.pendingTasks--;
+          0 === boundary.pendingTasks &&
+            0 < boundary.nodes.length &&
+            ((task = logRecoverableError(request, error, segment, null)),
+            abortRemainingReplayNodes(
+              request,
+              null,
+              boundary.nodes,
+              boundary.slots,
+              error,
+              task,
+              segment,
+              !0
+            ));
+          request.pendingRootTasks--;
+          0 === request.pendingRootTasks && completeShell(request);
+        }
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            ((boundary.status = CLIENT_RENDERED),
+            (task = logRecoverableError(request, error, segment, null)),
+            (boundary.status = CLIENT_RENDERED),
+            encodeErrorForBoundary(boundary, task, error, segment, !0),
+            untrackBoundary(request, boundary),
+            boundary.parentFlushed &&
+              request.clientRenderedBoundaries.push(boundary)),
+          boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+            return abortTask(fallbackTask, request, error);
+          }),
+          boundary.fallbackAbortableTasks.clear();
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function safelyEmitEarlyPreloads(request, shellComplete) {
+      try {
+        var renderState = request.renderState,
+          onHeaders = renderState.onHeaders;
+        if (onHeaders) {
+          var headers = renderState.headers;
+          if (headers) {
+            renderState.headers = null;
+            var linkHeader = headers.preconnects;
+            headers.fontPreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.fontPreloads));
+            headers.highImagePreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.highImagePreloads));
+            if (!shellComplete) {
+              var queueIter = renderState.styles.values(),
+                queueStep = queueIter.next();
+              b: for (
+                ;
+                0 < headers.remainingCapacity && !queueStep.done;
+                queueStep = queueIter.next()
+              )
+                for (
+                  var sheetIter = queueStep.value.sheets.values(),
+                    sheetStep = sheetIter.next();
+                  0 < headers.remainingCapacity && !sheetStep.done;
+                  sheetStep = sheetIter.next()
+                ) {
+                  var sheet = sheetStep.value,
+                    props = sheet.props,
+                    key = props.href,
+                    props$jscomp$0 = sheet.props;
+                  var header = getPreloadAsHeader(
+                    props$jscomp$0.href,
+                    "style",
+                    {
+                      crossOrigin: props$jscomp$0.crossOrigin,
+                      integrity: props$jscomp$0.integrity,
+                      nonce: props$jscomp$0.nonce,
+                      type: props$jscomp$0.type,
+                      fetchPriority: props$jscomp$0.fetchPriority,
+                      referrerPolicy: props$jscomp$0.referrerPolicy,
+                      media: props$jscomp$0.media
+                    }
+                  );
+                  if (0 <= (headers.remainingCapacity -= header.length + 2))
+                    (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                      linkHeader && (linkHeader += ", "),
+                      (linkHeader += header),
+                      (renderState.resets.style[key] =
+                        "string" === typeof props.crossOrigin ||
+                        "string" === typeof props.integrity
+                          ? [props.crossOrigin, props.integrity]
+                          : PRELOAD_NO_CREDS);
+                  else break b;
+                }
+            }
+            linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+          }
+        }
+      } catch (error) {
+        logRecoverableError(request, error, {}, null);
+      }
+    }
+    function completeShell(request) {
+      null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+      null === request.trackedPostpones && preparePreamble(request);
+      request.onShellError = noop;
+      request = request.onShellReady;
+      request();
+    }
+    function completeAll(request) {
+      safelyEmitEarlyPreloads(
+        request,
+        null === request.trackedPostpones
+          ? !0
+          : null === request.completedRootSegment ||
+              request.completedRootSegment.status !== POSTPONED
+      );
+      preparePreamble(request);
+      request = request.onAllReady;
+      request();
+    }
+    function queueCompletedSegment(boundary, segment) {
+      if (
+        0 === segment.chunks.length &&
+        1 === segment.children.length &&
+        null === segment.children[0].boundary &&
+        -1 === segment.children[0].id
+      ) {
+        var childSegment = segment.children[0];
+        childSegment.id = segment.id;
+        childSegment.parentFlushed = !0;
+        childSegment.status === COMPLETED &&
+          queueCompletedSegment(boundary, childSegment);
+      } else boundary.completedSegments.push(segment);
+    }
+    function finishedTask(request, boundary, segment) {
+      if (null === boundary) {
+        if (null !== segment && segment.parentFlushed) {
+          if (null !== request.completedRootSegment)
+            throw Error(
+              "There can only be one root segment. This is a bug in React."
+            );
+          request.completedRootSegment = segment;
+        }
+        request.pendingRootTasks--;
+        0 === request.pendingRootTasks && completeShell(request);
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            (0 === boundary.pendingTasks
+              ? (boundary.status === PENDING && (boundary.status = COMPLETED),
+                null !== segment &&
+                  segment.parentFlushed &&
+                  segment.status === COMPLETED &&
+                  queueCompletedSegment(boundary, segment),
+                boundary.parentFlushed &&
+                  request.completedBoundaries.push(boundary),
+                boundary.status === COMPLETED &&
+                  (boundary.fallbackAbortableTasks.forEach(
+                    abortTaskSoft,
+                    request
+                  ),
+                  boundary.fallbackAbortableTasks.clear(),
+                  0 === request.pendingRootTasks &&
+                    null === request.trackedPostpones &&
+                    null !== boundary.contentPreamble &&
+                    preparePreamble(request)))
+              : null !== segment &&
+                segment.parentFlushed &&
+                segment.status === COMPLETED &&
+                (queueCompletedSegment(boundary, segment),
+                1 === boundary.completedSegments.length &&
+                  boundary.parentFlushed &&
+                  request.partialBoundaries.push(boundary)));
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function performWork(request$jscomp$2) {
+      if (
+        request$jscomp$2.status !== CLOSED &&
+        13 !== request$jscomp$2.status
+      ) {
+        var prevContext = currentActiveSnapshot,
+          prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = HooksDispatcher;
+        var prevAsyncDispatcher = ReactSharedInternals.A;
+        ReactSharedInternals.A = DefaultAsyncDispatcher;
+        var prevRequest = currentRequest;
+        currentRequest = request$jscomp$2;
+        var prevGetCurrentStackImpl = ReactSharedInternals.getCurrentStack;
+        ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;
+        var prevResumableState = currentResumableState;
+        currentResumableState = request$jscomp$2.resumableState;
+        try {
+          var pingedTasks = request$jscomp$2.pingedTasks,
+            i;
+          for (i = 0; i < pingedTasks.length; i++) {
+            var request = request$jscomp$2,
+              task = pingedTasks[i],
+              segment = task.blockedSegment;
+            if (null === segment) {
+              var prevTaskInDEV = void 0,
+                request$jscomp$0 = request;
+              request = task;
+              if (0 !== request.replay.pendingTasks) {
+                switchContext(request.context);
+                prevTaskInDEV = currentTaskInDEV;
+                currentTaskInDEV = request;
+                try {
+                  "number" === typeof request.replay.slots
+                    ? resumeNode(
+                        request$jscomp$0,
+                        request,
+                        request.replay.slots,
+                        request.node,
+                        request.childIndex
+                      )
+                    : retryNode(request$jscomp$0, request);
+                  if (
+                    1 === request.replay.pendingTasks &&
+                    0 < request.replay.nodes.length
+                  )
+                    throw Error(
+                      "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                    );
+                  request.replay.pendingTasks--;
+                  request.abortSet.delete(request);
+                  finishedTask(request$jscomp$0, request.blockedBoundary, null);
+                } catch (thrownValue) {
+                  resetHooksState();
+                  var x =
+                    thrownValue === SuspenseException
+                      ? getSuspendedThenable()
+                      : thrownValue;
+                  if (
+                    "object" === typeof x &&
+                    null !== x &&
+                    "function" === typeof x.then
+                  ) {
+                    var ping = request.ping;
+                    x.then(ping, ping);
+                    request.thenableState = getThenableStateAfterSuspending();
+                  } else {
+                    request.replay.pendingTasks--;
+                    request.abortSet.delete(request);
+                    var errorInfo = getThrownInfo(request.componentStack),
+                      errorDigest = void 0,
+                      request$jscomp$1 = request$jscomp$0,
+                      boundary = request.blockedBoundary,
+                      error$jscomp$0 =
+                        12 === request$jscomp$0.status
+                          ? request$jscomp$0.fatalError
+                          : x,
+                      errorInfo$jscomp$0 = errorInfo,
+                      replayNodes = request.replay.nodes,
+                      resumeSlots = request.replay.slots;
+                    errorDigest = logRecoverableError(
+                      request$jscomp$1,
+                      error$jscomp$0,
+                      errorInfo$jscomp$0,
+                      request.debugTask
+                    );
+                    abortRemainingReplayNodes(
+                      request$jscomp$1,
+                      boundary,
+                      replayNodes,
+                      resumeSlots,
+                      error$jscomp$0,
+                      errorDigest,
+                      errorInfo$jscomp$0,
+                      !1
+                    );
+                    request$jscomp$0.pendingRootTasks--;
+                    0 === request$jscomp$0.pendingRootTasks &&
+                      completeShell(request$jscomp$0);
+                    request$jscomp$0.allPendingTasks--;
+                    0 === request$jscomp$0.allPendingTasks &&
+                      completeAll(request$jscomp$0);
+                  }
+                } finally {
+                  currentTaskInDEV = prevTaskInDEV;
+                }
+              }
+            } else if (
+              ((request$jscomp$0 = prevTaskInDEV = void 0),
+              (errorDigest = task),
+              (request$jscomp$1 = segment),
+              request$jscomp$1.status === PENDING)
+            ) {
+              request$jscomp$1.status = 6;
+              switchContext(errorDigest.context);
+              request$jscomp$0 = currentTaskInDEV;
+              currentTaskInDEV = errorDigest;
+              var childrenLength = request$jscomp$1.children.length,
+                chunkLength = request$jscomp$1.chunks.length;
+              try {
+                retryNode(request, errorDigest),
+                  request$jscomp$1.lastPushedText &&
+                    request$jscomp$1.textEmbedded &&
+                    request$jscomp$1.chunks.push(textSeparator),
+                  errorDigest.abortSet.delete(errorDigest),
+                  (request$jscomp$1.status = COMPLETED),
+                  finishedTask(
+                    request,
+                    errorDigest.blockedBoundary,
+                    request$jscomp$1
+                  );
+              } catch (thrownValue) {
+                resetHooksState();
+                request$jscomp$1.children.length = childrenLength;
+                request$jscomp$1.chunks.length = chunkLength;
+                var x$jscomp$0 =
+                  thrownValue === SuspenseException
+                    ? getSuspendedThenable()
+                    : 12 === request.status
+                      ? request.fatalError
+                      : thrownValue;
+                if (
+                  "object" === typeof x$jscomp$0 &&
+                  null !== x$jscomp$0 &&
+                  "function" === typeof x$jscomp$0.then
+                ) {
+                  request$jscomp$1.status = PENDING;
+                  errorDigest.thenableState = getThenableStateAfterSuspending();
+                  var ping$jscomp$0 = errorDigest.ping;
+                  x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+                } else {
+                  var errorInfo$jscomp$1 = getThrownInfo(
+                    errorDigest.componentStack
+                  );
+                  errorDigest.abortSet.delete(errorDigest);
+                  request$jscomp$1.status = 4;
+                  var boundary$jscomp$0 = errorDigest.blockedBoundary,
+                    debugTask = errorDigest.debugTask;
+                  prevTaskInDEV = logRecoverableError(
+                    request,
+                    x$jscomp$0,
+                    errorInfo$jscomp$1,
+                    debugTask
+                  );
+                  null === boundary$jscomp$0
+                    ? fatalError(
+                        request,
+                        x$jscomp$0,
+                        errorInfo$jscomp$1,
+                        debugTask
+                      )
+                    : (boundary$jscomp$0.pendingTasks--,
+                      boundary$jscomp$0.status !== CLIENT_RENDERED &&
+                        ((boundary$jscomp$0.status = CLIENT_RENDERED),
+                        encodeErrorForBoundary(
+                          boundary$jscomp$0,
+                          prevTaskInDEV,
+                          x$jscomp$0,
+                          errorInfo$jscomp$1,
+                          !1
+                        ),
+                        untrackBoundary(request, boundary$jscomp$0),
+                        boundary$jscomp$0.parentFlushed &&
+                          request.clientRenderedBoundaries.push(
+                            boundary$jscomp$0
+                          ),
+                        0 === request.pendingRootTasks &&
+                          null === request.trackedPostpones &&
+                          null !== boundary$jscomp$0.contentPreamble &&
+                          preparePreamble(request)));
+                  request.allPendingTasks--;
+                  0 === request.allPendingTasks && completeAll(request);
+                }
+              } finally {
+                currentTaskInDEV = request$jscomp$0;
+              }
+            }
+          }
+          pingedTasks.splice(0, i);
+          null !== request$jscomp$2.destination &&
+            flushCompletedQueues(
+              request$jscomp$2,
+              request$jscomp$2.destination
+            );
+        } catch (error) {
+          (pingedTasks = {}),
+            logRecoverableError(request$jscomp$2, error, pingedTasks, null),
+            fatalError(request$jscomp$2, error, pingedTasks, null);
+        } finally {
+          (currentResumableState = prevResumableState),
+            (ReactSharedInternals.H = prevDispatcher),
+            (ReactSharedInternals.A = prevAsyncDispatcher),
+            (ReactSharedInternals.getCurrentStack = prevGetCurrentStackImpl),
+            prevDispatcher === HooksDispatcher && switchContext(prevContext),
+            (currentRequest = prevRequest);
+        }
+      }
+    }
+    function preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      segment.preambleChildren.length &&
+        collectedPreambleSegments.push(segment.preambleChildren);
+      for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+        pendingPreambles =
+          preparePreambleFromSegment(
+            request,
+            segment.children[i],
+            collectedPreambleSegments
+          ) || pendingPreambles;
+      return pendingPreambles;
+    }
+    function preparePreambleFromSegment(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return preparePreambleFromSubtree(
+          request,
+          segment,
+          collectedPreambleSegments
+        );
+      var preamble = boundary.contentPreamble,
+        fallbackPreamble = boundary.fallbackPreamble;
+      if (null === preamble || null === fallbackPreamble) return !1;
+      switch (boundary.status) {
+        case COMPLETED:
+          hoistPreambleState(request.renderState, preamble);
+          segment = boundary.completedSegments[0];
+          if (!segment)
+            throw Error(
+              "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+            );
+          return preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          );
+        case POSTPONED:
+          if (null !== request.trackedPostpones) return !0;
+        case CLIENT_RENDERED:
+          if (segment.status === COMPLETED)
+            return (
+              hoistPreambleState(request.renderState, fallbackPreamble),
+              preparePreambleFromSubtree(
+                request,
+                segment,
+                collectedPreambleSegments
+              )
+            );
+        default:
+          return !0;
+      }
+    }
+    function preparePreamble(request) {
+      if (
+        request.completedRootSegment &&
+        null === request.completedPreambleSegments
+      ) {
+        var collectedPreambleSegments = [],
+          hasPendingPreambles = preparePreambleFromSegment(
+            request,
+            request.completedRootSegment,
+            collectedPreambleSegments
+          ),
+          preamble = request.renderState.preamble;
+        if (
+          !1 === hasPendingPreambles ||
+          (preamble.headChunks && preamble.bodyChunks)
+        )
+          request.completedPreambleSegments = collectedPreambleSegments;
+      }
+    }
+    function flushSubtree(request, destination, segment, hoistableState) {
+      segment.parentFlushed = !0;
+      switch (segment.status) {
+        case PENDING:
+          segment.id = request.nextSegmentId++;
+        case POSTPONED:
+          return (
+            (hoistableState = segment.id),
+            (segment.lastPushedText = !1),
+            (segment.textEmbedded = !1),
+            (request = request.renderState),
+            writeChunk(destination, placeholder1),
+            writeChunk(destination, request.placeholderPrefix),
+            (request = stringToChunk(hoistableState.toString(16))),
+            writeChunk(destination, request),
+            writeChunkAndReturn(destination, placeholder2)
+          );
+        case COMPLETED:
+          segment.status = FLUSHED;
+          var r = !0,
+            chunks = segment.chunks,
+            chunkIdx = 0;
+          segment = segment.children;
+          for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+            for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+              writeChunk(destination, chunks[chunkIdx]);
+            r = flushSegment(request, destination, r, hoistableState);
+          }
+          for (; chunkIdx < chunks.length - 1; chunkIdx++)
+            writeChunk(destination, chunks[chunkIdx]);
+          chunkIdx < chunks.length &&
+            (r = writeChunkAndReturn(destination, chunks[chunkIdx]));
+          return r;
+        default:
+          throw Error(
+            "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+          );
+      }
+    }
+    function flushSegment(request, destination, segment, hoistableState) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return flushSubtree(request, destination, segment, hoistableState);
+      boundary.parentFlushed = !0;
+      if (boundary.status === CLIENT_RENDERED) {
+        var errorDigest = boundary.errorDigest,
+          errorMessage = boundary.errorMessage,
+          errorStack = boundary.errorStack,
+          errorComponentStack = boundary.errorComponentStack;
+        writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);
+        writeChunk(destination, clientRenderedSuspenseBoundaryError1);
+        errorDigest &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
+          writeChunk(
+            destination,
+            stringToChunk(escapeTextForBrowser(errorDigest))
+          ),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        errorMessage &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1B),
+          writeChunk(
+            destination,
+            stringToChunk(escapeTextForBrowser(errorMessage))
+          ),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        errorStack &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1C),
+          writeChunk(
+            destination,
+            stringToChunk(escapeTextForBrowser(errorStack))
+          ),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        errorComponentStack &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1D),
+          writeChunk(
+            destination,
+            stringToChunk(escapeTextForBrowser(errorComponentStack))
+          ),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);
+        flushSubtree(request, destination, segment, hoistableState);
+        (request = boundary.fallbackPreamble) &&
+          writePreambleContribution(destination, request);
+        return writeChunkAndReturn(destination, endSuspenseBoundary);
+      }
+      if (boundary.status !== COMPLETED)
+        return (
+          boundary.status === PENDING &&
+            (boundary.rootSegmentID = request.nextSegmentId++),
+          0 < boundary.completedSegments.length &&
+            request.partialBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          hoistableState &&
+            ((boundary = boundary.fallbackState),
+            boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+            boundary.stylesheets.forEach(
+              hoistStylesheetDependency,
+              hoistableState
+            )),
+          flushSubtree(request, destination, segment, hoistableState),
+          writeChunkAndReturn(destination, endSuspenseBoundary)
+        );
+      if (boundary.byteSize > request.progressiveChunkSize)
+        return (
+          (boundary.rootSegmentID = request.nextSegmentId++),
+          request.completedBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          flushSubtree(request, destination, segment, hoistableState),
+          writeChunkAndReturn(destination, endSuspenseBoundary)
+        );
+      hoistableState &&
+        ((segment = boundary.contentState),
+        segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+      writeChunkAndReturn(destination, startCompletedSuspenseBoundary);
+      segment = boundary.completedSegments;
+      if (1 !== segment.length)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      flushSegment(request, destination, segment[0], hoistableState);
+      (request = boundary.contentPreamble) &&
+        writePreambleContribution(destination, request);
+      return writeChunkAndReturn(destination, endSuspenseBoundary);
+    }
+    function flushSegmentContainer(
+      request,
+      destination,
+      segment,
+      hoistableState
+    ) {
+      writeStartSegment(
+        destination,
+        request.renderState,
+        segment.parentFormatContext,
+        segment.id
+      );
+      flushSegment(request, destination, segment, hoistableState);
+      return writeEndSegment(destination, segment.parentFormatContext);
+    }
+    function flushCompletedBoundary(request, destination, boundary) {
+      for (
+        var completedSegments = boundary.completedSegments, i = 0;
+        i < completedSegments.length;
+        i++
+      )
+        flushPartiallyCompletedSegment(
+          request,
+          destination,
+          boundary,
+          completedSegments[i]
+        );
+      completedSegments.length = 0;
+      writeHoistablesForBoundary(
+        destination,
+        boundary.contentState,
+        request.renderState
+      );
+      completedSegments = request.resumableState;
+      request = request.renderState;
+      i = boundary.rootSegmentID;
+      boundary = boundary.contentState;
+      var requiresStyleInsertion = request.stylesToHoist;
+      request.stylesToHoist = !1;
+      writeChunk(destination, request.startInlineScript);
+      requiresStyleInsertion
+        ? (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+          NothingSent
+          ? ((completedSegments.instructions =
+              completedSegments.instructions |
+              SentStyleInsertionFunction |
+              SentCompleteBoundaryFunction),
+            writeChunk(destination, completeBoundaryWithStylesScript1FullBoth))
+          : (completedSegments.instructions & SentStyleInsertionFunction) ===
+              NothingSent
+            ? ((completedSegments.instructions |= SentStyleInsertionFunction),
+              writeChunk(
+                destination,
+                completeBoundaryWithStylesScript1FullPartial
+              ))
+            : writeChunk(destination, completeBoundaryWithStylesScript1Partial)
+        : (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+            NothingSent
+          ? ((completedSegments.instructions |= SentCompleteBoundaryFunction),
+            writeChunk(destination, completeBoundaryScript1Full))
+          : writeChunk(destination, completeBoundaryScript1Partial);
+      completedSegments = stringToChunk(i.toString(16));
+      writeChunk(destination, request.boundaryPrefix);
+      writeChunk(destination, completedSegments);
+      writeChunk(destination, completeBoundaryScript2);
+      writeChunk(destination, request.segmentPrefix);
+      writeChunk(destination, completedSegments);
+      requiresStyleInsertion
+        ? (writeChunk(destination, completeBoundaryScript3a),
+          writeStyleResourceDependenciesInJS(destination, boundary))
+        : writeChunk(destination, completeBoundaryScript3b);
+      boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd);
+      return writeBootstrap(destination, request) && boundary;
+    }
+    function flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      segment
+    ) {
+      if (segment.status === FLUSHED) return !0;
+      var hoistableState = boundary.contentState,
+        segmentID = segment.id;
+      if (-1 === segmentID) {
+        if (-1 === (segment.id = boundary.rootSegmentID))
+          throw Error(
+            "A root segment ID must have been assigned by now. This is a bug in React."
+          );
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      }
+      if (segmentID === boundary.rootSegmentID)
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      flushSegmentContainer(request, destination, segment, hoistableState);
+      boundary = request.resumableState;
+      request = request.renderState;
+      writeChunk(destination, request.startInlineScript);
+      (boundary.instructions & SentCompleteSegmentFunction) === NothingSent
+        ? ((boundary.instructions |= SentCompleteSegmentFunction),
+          writeChunk(destination, completeSegmentScript1Full))
+        : writeChunk(destination, completeSegmentScript1Partial);
+      writeChunk(destination, request.segmentPrefix);
+      segmentID = stringToChunk(segmentID.toString(16));
+      writeChunk(destination, segmentID);
+      writeChunk(destination, completeSegmentScript2);
+      writeChunk(destination, request.placeholderPrefix);
+      writeChunk(destination, segmentID);
+      destination = writeChunkAndReturn(destination, completeSegmentScriptEnd);
+      return destination;
+    }
+    function flushCompletedQueues(request, destination) {
+      currentView = new Uint8Array(2048);
+      writtenBytes = 0;
+      try {
+        if (!(0 < request.pendingRootTasks)) {
+          var i,
+            completedRootSegment = request.completedRootSegment;
+          if (null !== completedRootSegment) {
+            if (completedRootSegment.status === POSTPONED) return;
+            var completedPreambleSegments = request.completedPreambleSegments;
+            if (null === completedPreambleSegments) return;
+            var renderState = request.renderState,
+              preamble = renderState.preamble,
+              htmlChunks = preamble.htmlChunks,
+              headChunks = preamble.headChunks,
+              i$jscomp$0;
+            if (htmlChunks) {
+              for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+                writeChunk(destination, htmlChunks[i$jscomp$0]);
+              if (headChunks)
+                for (
+                  i$jscomp$0 = 0;
+                  i$jscomp$0 < headChunks.length;
+                  i$jscomp$0++
+                )
+                  writeChunk(destination, headChunks[i$jscomp$0]);
+              else
+                writeChunk(destination, startChunkForTag("head")),
+                  writeChunk(destination, endOfStartTag);
+            } else if (headChunks)
+              for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+                writeChunk(destination, headChunks[i$jscomp$0]);
+            var charsetChunks = renderState.charsetChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < charsetChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, charsetChunks[i$jscomp$0]);
+            charsetChunks.length = 0;
+            renderState.preconnects.forEach(flushResource, destination);
+            renderState.preconnects.clear();
+            var viewportChunks = renderState.viewportChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < viewportChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, viewportChunks[i$jscomp$0]);
+            viewportChunks.length = 0;
+            renderState.fontPreloads.forEach(flushResource, destination);
+            renderState.fontPreloads.clear();
+            renderState.highImagePreloads.forEach(flushResource, destination);
+            renderState.highImagePreloads.clear();
+            renderState.styles.forEach(flushStylesInPreamble, destination);
+            var importMapChunks = renderState.importMapChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < importMapChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, importMapChunks[i$jscomp$0]);
+            importMapChunks.length = 0;
+            renderState.bootstrapScripts.forEach(flushResource, destination);
+            renderState.scripts.forEach(flushResource, destination);
+            renderState.scripts.clear();
+            renderState.bulkPreloads.forEach(flushResource, destination);
+            renderState.bulkPreloads.clear();
+            var hoistableChunks = renderState.hoistableChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < hoistableChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, hoistableChunks[i$jscomp$0]);
+            for (
+              renderState = hoistableChunks.length = 0;
+              renderState < completedPreambleSegments.length;
+              renderState++
+            ) {
+              var segments = completedPreambleSegments[renderState];
+              for (preamble = 0; preamble < segments.length; preamble++)
+                flushSegment(request, destination, segments[preamble], null);
+            }
+            var preamble$jscomp$0 = request.renderState.preamble,
+              headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+            (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) &&
+              writeChunk(destination, endChunkForTag("head"));
+            var bodyChunks = preamble$jscomp$0.bodyChunks;
+            if (bodyChunks)
+              for (
+                completedPreambleSegments = 0;
+                completedPreambleSegments < bodyChunks.length;
+                completedPreambleSegments++
+              )
+                writeChunk(destination, bodyChunks[completedPreambleSegments]);
+            flushSegment(request, destination, completedRootSegment, null);
+            request.completedRootSegment = null;
+            writeBootstrap(destination, request.renderState);
+          }
+          var renderState$jscomp$0 = request.renderState;
+          completedRootSegment = 0;
+          var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < viewportChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            writeChunk(
+              destination,
+              viewportChunks$jscomp$0[completedRootSegment]
+            );
+          viewportChunks$jscomp$0.length = 0;
+          renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+          renderState$jscomp$0.preconnects.clear();
+          renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.fontPreloads.clear();
+          renderState$jscomp$0.highImagePreloads.forEach(
+            flushResource,
+            destination
+          );
+          renderState$jscomp$0.highImagePreloads.clear();
+          renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+          renderState$jscomp$0.scripts.forEach(flushResource, destination);
+          renderState$jscomp$0.scripts.clear();
+          renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.bulkPreloads.clear();
+          var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < hoistableChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            writeChunk(
+              destination,
+              hoistableChunks$jscomp$0[completedRootSegment]
+            );
+          hoistableChunks$jscomp$0.length = 0;
+          var clientRenderedBoundaries = request.clientRenderedBoundaries;
+          for (i = 0; i < clientRenderedBoundaries.length; i++) {
+            var boundary = clientRenderedBoundaries[i];
+            renderState$jscomp$0 = destination;
+            var resumableState = request.resumableState,
+              renderState$jscomp$1 = request.renderState,
+              id = boundary.rootSegmentID,
+              errorDigest = boundary.errorDigest,
+              errorMessage = boundary.errorMessage,
+              errorStack = boundary.errorStack,
+              errorComponentStack = boundary.errorComponentStack;
+            writeChunk(
+              renderState$jscomp$0,
+              renderState$jscomp$1.startInlineScript
+            );
+            (resumableState.instructions & SentClientRenderFunction) ===
+            NothingSent
+              ? ((resumableState.instructions |= SentClientRenderFunction),
+                writeChunk(renderState$jscomp$0, clientRenderScript1Full))
+              : writeChunk(renderState$jscomp$0, clientRenderScript1Partial);
+            writeChunk(
+              renderState$jscomp$0,
+              renderState$jscomp$1.boundaryPrefix
+            );
+            writeChunk(renderState$jscomp$0, stringToChunk(id.toString(16)));
+            writeChunk(renderState$jscomp$0, clientRenderScript1A);
+            if (
+              errorDigest ||
+              errorMessage ||
+              errorStack ||
+              errorComponentStack
+            )
+              writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+                writeChunk(
+                  renderState$jscomp$0,
+                  stringToChunk(
+                    escapeJSStringsForInstructionScripts(errorDigest || "")
+                  )
+                );
+            if (errorMessage || errorStack || errorComponentStack)
+              writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+                writeChunk(
+                  renderState$jscomp$0,
+                  stringToChunk(
+                    escapeJSStringsForInstructionScripts(errorMessage || "")
+                  )
+                );
+            if (errorStack || errorComponentStack)
+              writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+                writeChunk(
+                  renderState$jscomp$0,
+                  stringToChunk(
+                    escapeJSStringsForInstructionScripts(errorStack || "")
+                  )
+                );
+            errorComponentStack &&
+              (writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+              writeChunk(
+                renderState$jscomp$0,
+                stringToChunk(
+                  escapeJSStringsForInstructionScripts(errorComponentStack)
+                )
+              ));
+            var JSCompiler_inline_result = writeChunkAndReturn(
+              renderState$jscomp$0,
+              clientRenderScriptEnd
+            );
+            if (!JSCompiler_inline_result) {
+              request.destination = null;
+              i++;
+              clientRenderedBoundaries.splice(0, i);
+              return;
+            }
+          }
+          clientRenderedBoundaries.splice(0, i);
+          var completedBoundaries = request.completedBoundaries;
+          for (i = 0; i < completedBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(
+                request,
+                destination,
+                completedBoundaries[i]
+              )
+            ) {
+              request.destination = null;
+              i++;
+              completedBoundaries.splice(0, i);
+              return;
+            }
+          completedBoundaries.splice(0, i);
+          completeWriting(destination);
+          currentView = new Uint8Array(2048);
+          writtenBytes = 0;
+          var partialBoundaries = request.partialBoundaries;
+          for (i = 0; i < partialBoundaries.length; i++) {
+            a: {
+              clientRenderedBoundaries = request;
+              boundary = destination;
+              var boundary$jscomp$0 = partialBoundaries[i],
+                completedSegments = boundary$jscomp$0.completedSegments;
+              for (
+                JSCompiler_inline_result = 0;
+                JSCompiler_inline_result < completedSegments.length;
+                JSCompiler_inline_result++
+              )
+                if (
+                  !flushPartiallyCompletedSegment(
+                    clientRenderedBoundaries,
+                    boundary,
+                    boundary$jscomp$0,
+                    completedSegments[JSCompiler_inline_result]
+                  )
+                ) {
+                  JSCompiler_inline_result++;
+                  completedSegments.splice(0, JSCompiler_inline_result);
+                  var JSCompiler_inline_result$jscomp$0 = !1;
+                  break a;
+                }
+              completedSegments.splice(0, JSCompiler_inline_result);
+              JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+                boundary,
+                boundary$jscomp$0.contentState,
+                clientRenderedBoundaries.renderState
+              );
+            }
+            if (!JSCompiler_inline_result$jscomp$0) {
+              request.destination = null;
+              i++;
+              partialBoundaries.splice(0, i);
+              return;
+            }
+          }
+          partialBoundaries.splice(0, i);
+          var largeBoundaries = request.completedBoundaries;
+          for (i = 0; i < largeBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(request, destination, largeBoundaries[i])
+            ) {
+              request.destination = null;
+              i++;
+              largeBoundaries.splice(0, i);
+              return;
+            }
+          largeBoundaries.splice(0, i);
+        }
+      } finally {
+        0 === request.allPendingTasks &&
+        0 === request.pingedTasks.length &&
+        0 === request.clientRenderedBoundaries.length &&
+        0 === request.completedBoundaries.length
+          ? ((request.flushScheduled = !1),
+            (i = request.resumableState),
+            i.hasBody && writeChunk(destination, endChunkForTag("body")),
+            i.hasHtml && writeChunk(destination, endChunkForTag("html")),
+            completeWriting(destination),
+            0 !== request.abortableTasks.size &&
+              console.error(
+                "There was still abortable task at the root when we closed. This is a bug in React."
+              ),
+            (request.status = CLOSED),
+            destination.close(),
+            (request.destination = null))
+          : completeWriting(destination);
+      }
+    }
+    function startWork(request) {
+      request.flushScheduled = null !== request.destination;
+      scheduleMicrotask(function () {
+        return performWork(request);
+      });
+      scheduleWork(function () {
+        10 === request.status && (request.status = 11);
+        null === request.trackedPostpones &&
+          safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+      });
+    }
+    function enqueueFlush(request) {
+      !1 === request.flushScheduled &&
+        0 === request.pingedTasks.length &&
+        null !== request.destination &&
+        ((request.flushScheduled = !0),
+        scheduleWork(function () {
+          var destination = request.destination;
+          destination
+            ? flushCompletedQueues(request, destination)
+            : (request.flushScheduled = !1);
+        }));
+    }
+    function startFlowing(request, destination) {
+      if (13 === request.status)
+        (request.status = CLOSED),
+          closeWithError(destination, request.fatalError);
+      else if (request.status !== CLOSED && null === request.destination) {
+        request.destination = destination;
+        try {
+          flushCompletedQueues(request, destination);
+        } catch (error) {
+          (destination = {}),
+            logRecoverableError(request, error, destination, null),
+            fatalError(request, error, destination, null);
+        }
+      }
+    }
+    function abort(request, reason) {
+      if (11 === request.status || 10 === request.status) request.status = 12;
+      try {
+        var abortableTasks = request.abortableTasks;
+        if (0 < abortableTasks.size) {
+          var error =
+            void 0 === reason
+              ? Error("The render was aborted by the server without a reason.")
+              : "object" === typeof reason &&
+                  null !== reason &&
+                  "function" === typeof reason.then
+                ? Error("The render was aborted by the server with a promise.")
+                : reason;
+          request.fatalError = error;
+          abortableTasks.forEach(function (task) {
+            return abortTask(task, request, error);
+          });
+          abortableTasks.clear();
+        }
+        null !== request.destination &&
+          flushCompletedQueues(request, request.destination);
+      } catch (error$4) {
+        (reason = {}),
+          logRecoverableError(request, error$4, reason, null),
+          fatalError(request, error$4, reason, null);
+      }
+    }
+    function ensureCorrectIsomorphicReactVersion() {
+      var isomorphicReactPackageVersion = React.version;
+      if ("19.1.1" !== isomorphicReactPackageVersion)
+        throw Error(
+          'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n  - react:      ' +
+            (isomorphicReactPackageVersion +
+              "\n  - react-dom:  19.1.1\nLearn more: https://react.dev/warnings/version-mismatch")
+        );
+    }
+    var React = require("react"),
+      ReactDOM = require("react-dom"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+      REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+      REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+      REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+      REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+      MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+      isArrayImpl = Array.isArray,
+      jsxPropsParents = new WeakMap(),
+      jsxChildrenParents = new WeakMap(),
+      CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"),
+      channel = new MessageChannel(),
+      taskQueue = [];
+    channel.port1.onmessage = function () {
+      var task = taskQueue.shift();
+      task && task();
+    };
+    var LocalPromise = Promise,
+      scheduleMicrotask =
+        "function" === typeof queueMicrotask
+          ? queueMicrotask
+          : function (callback) {
+              LocalPromise.resolve(null)
+                .then(callback)
+                .catch(handleErrorInNextTick);
+            },
+      currentView = null,
+      writtenBytes = 0,
+      textEncoder = new TextEncoder(),
+      assign = Object.assign,
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+        "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      illegalAttributeNameCache = {},
+      validatedAttributeNameCache = {},
+      unitlessNumbers = new Set(
+        "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+          " "
+        )
+      ),
+      aliases = new Map([
+        ["acceptCharset", "accept-charset"],
+        ["htmlFor", "for"],
+        ["httpEquiv", "http-equiv"],
+        ["crossOrigin", "crossorigin"],
+        ["accentHeight", "accent-height"],
+        ["alignmentBaseline", "alignment-baseline"],
+        ["arabicForm", "arabic-form"],
+        ["baselineShift", "baseline-shift"],
+        ["capHeight", "cap-height"],
+        ["clipPath", "clip-path"],
+        ["clipRule", "clip-rule"],
+        ["colorInterpolation", "color-interpolation"],
+        ["colorInterpolationFilters", "color-interpolation-filters"],
+        ["colorProfile", "color-profile"],
+        ["colorRendering", "color-rendering"],
+        ["dominantBaseline", "dominant-baseline"],
+        ["enableBackground", "enable-background"],
+        ["fillOpacity", "fill-opacity"],
+        ["fillRule", "fill-rule"],
+        ["floodColor", "flood-color"],
+        ["floodOpacity", "flood-opacity"],
+        ["fontFamily", "font-family"],
+        ["fontSize", "font-size"],
+        ["fontSizeAdjust", "font-size-adjust"],
+        ["fontStretch", "font-stretch"],
+        ["fontStyle", "font-style"],
+        ["fontVariant", "font-variant"],
+        ["fontWeight", "font-weight"],
+        ["glyphName", "glyph-name"],
+        ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+        ["glyphOrientationVertical", "glyph-orientation-vertical"],
+        ["horizAdvX", "horiz-adv-x"],
+        ["horizOriginX", "horiz-origin-x"],
+        ["imageRendering", "image-rendering"],
+        ["letterSpacing", "letter-spacing"],
+        ["lightingColor", "lighting-color"],
+        ["markerEnd", "marker-end"],
+        ["markerMid", "marker-mid"],
+        ["markerStart", "marker-start"],
+        ["overlinePosition", "overline-position"],
+        ["overlineThickness", "overline-thickness"],
+        ["paintOrder", "paint-order"],
+        ["panose-1", "panose-1"],
+        ["pointerEvents", "pointer-events"],
+        ["renderingIntent", "rendering-intent"],
+        ["shapeRendering", "shape-rendering"],
+        ["stopColor", "stop-color"],
+        ["stopOpacity", "stop-opacity"],
+        ["strikethroughPosition", "strikethrough-position"],
+        ["strikethroughThickness", "strikethrough-thickness"],
+        ["strokeDasharray", "stroke-dasharray"],
+        ["strokeDashoffset", "stroke-dashoffset"],
+        ["strokeLinecap", "stroke-linecap"],
+        ["strokeLinejoin", "stroke-linejoin"],
+        ["strokeMiterlimit", "stroke-miterlimit"],
+        ["strokeOpacity", "stroke-opacity"],
+        ["strokeWidth", "stroke-width"],
+        ["textAnchor", "text-anchor"],
+        ["textDecoration", "text-decoration"],
+        ["textRendering", "text-rendering"],
+        ["transformOrigin", "transform-origin"],
+        ["underlinePosition", "underline-position"],
+        ["underlineThickness", "underline-thickness"],
+        ["unicodeBidi", "unicode-bidi"],
+        ["unicodeRange", "unicode-range"],
+        ["unitsPerEm", "units-per-em"],
+        ["vAlphabetic", "v-alphabetic"],
+        ["vHanging", "v-hanging"],
+        ["vIdeographic", "v-ideographic"],
+        ["vMathematical", "v-mathematical"],
+        ["vectorEffect", "vector-effect"],
+        ["vertAdvY", "vert-adv-y"],
+        ["vertOriginX", "vert-origin-x"],
+        ["vertOriginY", "vert-origin-y"],
+        ["wordSpacing", "word-spacing"],
+        ["writingMode", "writing-mode"],
+        ["xmlnsXlink", "xmlns:xlink"],
+        ["xHeight", "x-height"]
+      ]),
+      hasReadOnlyValue = {
+        button: !0,
+        checkbox: !0,
+        image: !0,
+        hidden: !0,
+        radio: !0,
+        reset: !0,
+        submit: !0
+      },
+      ariaProperties = {
+        "aria-current": 0,
+        "aria-description": 0,
+        "aria-details": 0,
+        "aria-disabled": 0,
+        "aria-hidden": 0,
+        "aria-invalid": 0,
+        "aria-keyshortcuts": 0,
+        "aria-label": 0,
+        "aria-roledescription": 0,
+        "aria-autocomplete": 0,
+        "aria-checked": 0,
+        "aria-expanded": 0,
+        "aria-haspopup": 0,
+        "aria-level": 0,
+        "aria-modal": 0,
+        "aria-multiline": 0,
+        "aria-multiselectable": 0,
+        "aria-orientation": 0,
+        "aria-placeholder": 0,
+        "aria-pressed": 0,
+        "aria-readonly": 0,
+        "aria-required": 0,
+        "aria-selected": 0,
+        "aria-sort": 0,
+        "aria-valuemax": 0,
+        "aria-valuemin": 0,
+        "aria-valuenow": 0,
+        "aria-valuetext": 0,
+        "aria-atomic": 0,
+        "aria-busy": 0,
+        "aria-live": 0,
+        "aria-relevant": 0,
+        "aria-dropeffect": 0,
+        "aria-grabbed": 0,
+        "aria-activedescendant": 0,
+        "aria-colcount": 0,
+        "aria-colindex": 0,
+        "aria-colspan": 0,
+        "aria-controls": 0,
+        "aria-describedby": 0,
+        "aria-errormessage": 0,
+        "aria-flowto": 0,
+        "aria-labelledby": 0,
+        "aria-owns": 0,
+        "aria-posinset": 0,
+        "aria-rowcount": 0,
+        "aria-rowindex": 0,
+        "aria-rowspan": 0,
+        "aria-setsize": 0
+      },
+      warnedProperties$1 = {},
+      rARIA$1 = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel$1 = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      didWarnValueNull = !1,
+      possibleStandardNames = {
+        accept: "accept",
+        acceptcharset: "acceptCharset",
+        "accept-charset": "acceptCharset",
+        accesskey: "accessKey",
+        action: "action",
+        allowfullscreen: "allowFullScreen",
+        alt: "alt",
+        as: "as",
+        async: "async",
+        autocapitalize: "autoCapitalize",
+        autocomplete: "autoComplete",
+        autocorrect: "autoCorrect",
+        autofocus: "autoFocus",
+        autoplay: "autoPlay",
+        autosave: "autoSave",
+        capture: "capture",
+        cellpadding: "cellPadding",
+        cellspacing: "cellSpacing",
+        challenge: "challenge",
+        charset: "charSet",
+        checked: "checked",
+        children: "children",
+        cite: "cite",
+        class: "className",
+        classid: "classID",
+        classname: "className",
+        cols: "cols",
+        colspan: "colSpan",
+        content: "content",
+        contenteditable: "contentEditable",
+        contextmenu: "contextMenu",
+        controls: "controls",
+        controlslist: "controlsList",
+        coords: "coords",
+        crossorigin: "crossOrigin",
+        dangerouslysetinnerhtml: "dangerouslySetInnerHTML",
+        data: "data",
+        datetime: "dateTime",
+        default: "default",
+        defaultchecked: "defaultChecked",
+        defaultvalue: "defaultValue",
+        defer: "defer",
+        dir: "dir",
+        disabled: "disabled",
+        disablepictureinpicture: "disablePictureInPicture",
+        disableremoteplayback: "disableRemotePlayback",
+        download: "download",
+        draggable: "draggable",
+        enctype: "encType",
+        enterkeyhint: "enterKeyHint",
+        fetchpriority: "fetchPriority",
+        for: "htmlFor",
+        form: "form",
+        formmethod: "formMethod",
+        formaction: "formAction",
+        formenctype: "formEncType",
+        formnovalidate: "formNoValidate",
+        formtarget: "formTarget",
+        frameborder: "frameBorder",
+        headers: "headers",
+        height: "height",
+        hidden: "hidden",
+        high: "high",
+        href: "href",
+        hreflang: "hrefLang",
+        htmlfor: "htmlFor",
+        httpequiv: "httpEquiv",
+        "http-equiv": "httpEquiv",
+        icon: "icon",
+        id: "id",
+        imagesizes: "imageSizes",
+        imagesrcset: "imageSrcSet",
+        inert: "inert",
+        innerhtml: "innerHTML",
+        inputmode: "inputMode",
+        integrity: "integrity",
+        is: "is",
+        itemid: "itemID",
+        itemprop: "itemProp",
+        itemref: "itemRef",
+        itemscope: "itemScope",
+        itemtype: "itemType",
+        keyparams: "keyParams",
+        keytype: "keyType",
+        kind: "kind",
+        label: "label",
+        lang: "lang",
+        list: "list",
+        loop: "loop",
+        low: "low",
+        manifest: "manifest",
+        marginwidth: "marginWidth",
+        marginheight: "marginHeight",
+        max: "max",
+        maxlength: "maxLength",
+        media: "media",
+        mediagroup: "mediaGroup",
+        method: "method",
+        min: "min",
+        minlength: "minLength",
+        multiple: "multiple",
+        muted: "muted",
+        name: "name",
+        nomodule: "noModule",
+        nonce: "nonce",
+        novalidate: "noValidate",
+        open: "open",
+        optimum: "optimum",
+        pattern: "pattern",
+        placeholder: "placeholder",
+        playsinline: "playsInline",
+        poster: "poster",
+        preload: "preload",
+        profile: "profile",
+        radiogroup: "radioGroup",
+        readonly: "readOnly",
+        referrerpolicy: "referrerPolicy",
+        rel: "rel",
+        required: "required",
+        reversed: "reversed",
+        role: "role",
+        rows: "rows",
+        rowspan: "rowSpan",
+        sandbox: "sandbox",
+        scope: "scope",
+        scoped: "scoped",
+        scrolling: "scrolling",
+        seamless: "seamless",
+        selected: "selected",
+        shape: "shape",
+        size: "size",
+        sizes: "sizes",
+        span: "span",
+        spellcheck: "spellCheck",
+        src: "src",
+        srcdoc: "srcDoc",
+        srclang: "srcLang",
+        srcset: "srcSet",
+        start: "start",
+        step: "step",
+        style: "style",
+        summary: "summary",
+        tabindex: "tabIndex",
+        target: "target",
+        title: "title",
+        type: "type",
+        usemap: "useMap",
+        value: "value",
+        width: "width",
+        wmode: "wmode",
+        wrap: "wrap",
+        about: "about",
+        accentheight: "accentHeight",
+        "accent-height": "accentHeight",
+        accumulate: "accumulate",
+        additive: "additive",
+        alignmentbaseline: "alignmentBaseline",
+        "alignment-baseline": "alignmentBaseline",
+        allowreorder: "allowReorder",
+        alphabetic: "alphabetic",
+        amplitude: "amplitude",
+        arabicform: "arabicForm",
+        "arabic-form": "arabicForm",
+        ascent: "ascent",
+        attributename: "attributeName",
+        attributetype: "attributeType",
+        autoreverse: "autoReverse",
+        azimuth: "azimuth",
+        basefrequency: "baseFrequency",
+        baselineshift: "baselineShift",
+        "baseline-shift": "baselineShift",
+        baseprofile: "baseProfile",
+        bbox: "bbox",
+        begin: "begin",
+        bias: "bias",
+        by: "by",
+        calcmode: "calcMode",
+        capheight: "capHeight",
+        "cap-height": "capHeight",
+        clip: "clip",
+        clippath: "clipPath",
+        "clip-path": "clipPath",
+        clippathunits: "clipPathUnits",
+        cliprule: "clipRule",
+        "clip-rule": "clipRule",
+        color: "color",
+        colorinterpolation: "colorInterpolation",
+        "color-interpolation": "colorInterpolation",
+        colorinterpolationfilters: "colorInterpolationFilters",
+        "color-interpolation-filters": "colorInterpolationFilters",
+        colorprofile: "colorProfile",
+        "color-profile": "colorProfile",
+        colorrendering: "colorRendering",
+        "color-rendering": "colorRendering",
+        contentscripttype: "contentScriptType",
+        contentstyletype: "contentStyleType",
+        cursor: "cursor",
+        cx: "cx",
+        cy: "cy",
+        d: "d",
+        datatype: "datatype",
+        decelerate: "decelerate",
+        descent: "descent",
+        diffuseconstant: "diffuseConstant",
+        direction: "direction",
+        display: "display",
+        divisor: "divisor",
+        dominantbaseline: "dominantBaseline",
+        "dominant-baseline": "dominantBaseline",
+        dur: "dur",
+        dx: "dx",
+        dy: "dy",
+        edgemode: "edgeMode",
+        elevation: "elevation",
+        enablebackground: "enableBackground",
+        "enable-background": "enableBackground",
+        end: "end",
+        exponent: "exponent",
+        externalresourcesrequired: "externalResourcesRequired",
+        fill: "fill",
+        fillopacity: "fillOpacity",
+        "fill-opacity": "fillOpacity",
+        fillrule: "fillRule",
+        "fill-rule": "fillRule",
+        filter: "filter",
+        filterres: "filterRes",
+        filterunits: "filterUnits",
+        floodopacity: "floodOpacity",
+        "flood-opacity": "floodOpacity",
+        floodcolor: "floodColor",
+        "flood-color": "floodColor",
+        focusable: "focusable",
+        fontfamily: "fontFamily",
+        "font-family": "fontFamily",
+        fontsize: "fontSize",
+        "font-size": "fontSize",
+        fontsizeadjust: "fontSizeAdjust",
+        "font-size-adjust": "fontSizeAdjust",
+        fontstretch: "fontStretch",
+        "font-stretch": "fontStretch",
+        fontstyle: "fontStyle",
+        "font-style": "fontStyle",
+        fontvariant: "fontVariant",
+        "font-variant": "fontVariant",
+        fontweight: "fontWeight",
+        "font-weight": "fontWeight",
+        format: "format",
+        from: "from",
+        fx: "fx",
+        fy: "fy",
+        g1: "g1",
+        g2: "g2",
+        glyphname: "glyphName",
+        "glyph-name": "glyphName",
+        glyphorientationhorizontal: "glyphOrientationHorizontal",
+        "glyph-orientation-horizontal": "glyphOrientationHorizontal",
+        glyphorientationvertical: "glyphOrientationVertical",
+        "glyph-orientation-vertical": "glyphOrientationVertical",
+        glyphref: "glyphRef",
+        gradienttransform: "gradientTransform",
+        gradientunits: "gradientUnits",
+        hanging: "hanging",
+        horizadvx: "horizAdvX",
+        "horiz-adv-x": "horizAdvX",
+        horizoriginx: "horizOriginX",
+        "horiz-origin-x": "horizOriginX",
+        ideographic: "ideographic",
+        imagerendering: "imageRendering",
+        "image-rendering": "imageRendering",
+        in2: "in2",
+        in: "in",
+        inlist: "inlist",
+        intercept: "intercept",
+        k1: "k1",
+        k2: "k2",
+        k3: "k3",
+        k4: "k4",
+        k: "k",
+        kernelmatrix: "kernelMatrix",
+        kernelunitlength: "kernelUnitLength",
+        kerning: "kerning",
+        keypoints: "keyPoints",
+        keysplines: "keySplines",
+        keytimes: "keyTimes",
+        lengthadjust: "lengthAdjust",
+        letterspacing: "letterSpacing",
+        "letter-spacing": "letterSpacing",
+        lightingcolor: "lightingColor",
+        "lighting-color": "lightingColor",
+        limitingconeangle: "limitingConeAngle",
+        local: "local",
+        markerend: "markerEnd",
+        "marker-end": "markerEnd",
+        markerheight: "markerHeight",
+        markermid: "markerMid",
+        "marker-mid": "markerMid",
+        markerstart: "markerStart",
+        "marker-start": "markerStart",
+        markerunits: "markerUnits",
+        markerwidth: "markerWidth",
+        mask: "mask",
+        maskcontentunits: "maskContentUnits",
+        maskunits: "maskUnits",
+        mathematical: "mathematical",
+        mode: "mode",
+        numoctaves: "numOctaves",
+        offset: "offset",
+        opacity: "opacity",
+        operator: "operator",
+        order: "order",
+        orient: "orient",
+        orientation: "orientation",
+        origin: "origin",
+        overflow: "overflow",
+        overlineposition: "overlinePosition",
+        "overline-position": "overlinePosition",
+        overlinethickness: "overlineThickness",
+        "overline-thickness": "overlineThickness",
+        paintorder: "paintOrder",
+        "paint-order": "paintOrder",
+        panose1: "panose1",
+        "panose-1": "panose1",
+        pathlength: "pathLength",
+        patterncontentunits: "patternContentUnits",
+        patterntransform: "patternTransform",
+        patternunits: "patternUnits",
+        pointerevents: "pointerEvents",
+        "pointer-events": "pointerEvents",
+        points: "points",
+        pointsatx: "pointsAtX",
+        pointsaty: "pointsAtY",
+        pointsatz: "pointsAtZ",
+        popover: "popover",
+        popovertarget: "popoverTarget",
+        popovertargetaction: "popoverTargetAction",
+        prefix: "prefix",
+        preservealpha: "preserveAlpha",
+        preserveaspectratio: "preserveAspectRatio",
+        primitiveunits: "primitiveUnits",
+        property: "property",
+        r: "r",
+        radius: "radius",
+        refx: "refX",
+        refy: "refY",
+        renderingintent: "renderingIntent",
+        "rendering-intent": "renderingIntent",
+        repeatcount: "repeatCount",
+        repeatdur: "repeatDur",
+        requiredextensions: "requiredExtensions",
+        requiredfeatures: "requiredFeatures",
+        resource: "resource",
+        restart: "restart",
+        result: "result",
+        results: "results",
+        rotate: "rotate",
+        rx: "rx",
+        ry: "ry",
+        scale: "scale",
+        security: "security",
+        seed: "seed",
+        shaperendering: "shapeRendering",
+        "shape-rendering": "shapeRendering",
+        slope: "slope",
+        spacing: "spacing",
+        specularconstant: "specularConstant",
+        specularexponent: "specularExponent",
+        speed: "speed",
+        spreadmethod: "spreadMethod",
+        startoffset: "startOffset",
+        stddeviation: "stdDeviation",
+        stemh: "stemh",
+        stemv: "stemv",
+        stitchtiles: "stitchTiles",
+        stopcolor: "stopColor",
+        "stop-color": "stopColor",
+        stopopacity: "stopOpacity",
+        "stop-opacity": "stopOpacity",
+        strikethroughposition: "strikethroughPosition",
+        "strikethrough-position": "strikethroughPosition",
+        strikethroughthickness: "strikethroughThickness",
+        "strikethrough-thickness": "strikethroughThickness",
+        string: "string",
+        stroke: "stroke",
+        strokedasharray: "strokeDasharray",
+        "stroke-dasharray": "strokeDasharray",
+        strokedashoffset: "strokeDashoffset",
+        "stroke-dashoffset": "strokeDashoffset",
+        strokelinecap: "strokeLinecap",
+        "stroke-linecap": "strokeLinecap",
+        strokelinejoin: "strokeLinejoin",
+        "stroke-linejoin": "strokeLinejoin",
+        strokemiterlimit: "strokeMiterlimit",
+        "stroke-miterlimit": "strokeMiterlimit",
+        strokewidth: "strokeWidth",
+        "stroke-width": "strokeWidth",
+        strokeopacity: "strokeOpacity",
+        "stroke-opacity": "strokeOpacity",
+        suppresscontenteditablewarning: "suppressContentEditableWarning",
+        suppresshydrationwarning: "suppressHydrationWarning",
+        surfacescale: "surfaceScale",
+        systemlanguage: "systemLanguage",
+        tablevalues: "tableValues",
+        targetx: "targetX",
+        targety: "targetY",
+        textanchor: "textAnchor",
+        "text-anchor": "textAnchor",
+        textdecoration: "textDecoration",
+        "text-decoration": "textDecoration",
+        textlength: "textLength",
+        textrendering: "textRendering",
+        "text-rendering": "textRendering",
+        to: "to",
+        transform: "transform",
+        transformorigin: "transformOrigin",
+        "transform-origin": "transformOrigin",
+        typeof: "typeof",
+        u1: "u1",
+        u2: "u2",
+        underlineposition: "underlinePosition",
+        "underline-position": "underlinePosition",
+        underlinethickness: "underlineThickness",
+        "underline-thickness": "underlineThickness",
+        unicode: "unicode",
+        unicodebidi: "unicodeBidi",
+        "unicode-bidi": "unicodeBidi",
+        unicoderange: "unicodeRange",
+        "unicode-range": "unicodeRange",
+        unitsperem: "unitsPerEm",
+        "units-per-em": "unitsPerEm",
+        unselectable: "unselectable",
+        valphabetic: "vAlphabetic",
+        "v-alphabetic": "vAlphabetic",
+        values: "values",
+        vectoreffect: "vectorEffect",
+        "vector-effect": "vectorEffect",
+        version: "version",
+        vertadvy: "vertAdvY",
+        "vert-adv-y": "vertAdvY",
+        vertoriginx: "vertOriginX",
+        "vert-origin-x": "vertOriginX",
+        vertoriginy: "vertOriginY",
+        "vert-origin-y": "vertOriginY",
+        vhanging: "vHanging",
+        "v-hanging": "vHanging",
+        videographic: "vIdeographic",
+        "v-ideographic": "vIdeographic",
+        viewbox: "viewBox",
+        viewtarget: "viewTarget",
+        visibility: "visibility",
+        vmathematical: "vMathematical",
+        "v-mathematical": "vMathematical",
+        vocab: "vocab",
+        widths: "widths",
+        wordspacing: "wordSpacing",
+        "word-spacing": "wordSpacing",
+        writingmode: "writingMode",
+        "writing-mode": "writingMode",
+        x1: "x1",
+        x2: "x2",
+        x: "x",
+        xchannelselector: "xChannelSelector",
+        xheight: "xHeight",
+        "x-height": "xHeight",
+        xlinkactuate: "xlinkActuate",
+        "xlink:actuate": "xlinkActuate",
+        xlinkarcrole: "xlinkArcrole",
+        "xlink:arcrole": "xlinkArcrole",
+        xlinkhref: "xlinkHref",
+        "xlink:href": "xlinkHref",
+        xlinkrole: "xlinkRole",
+        "xlink:role": "xlinkRole",
+        xlinkshow: "xlinkShow",
+        "xlink:show": "xlinkShow",
+        xlinktitle: "xlinkTitle",
+        "xlink:title": "xlinkTitle",
+        xlinktype: "xlinkType",
+        "xlink:type": "xlinkType",
+        xmlbase: "xmlBase",
+        "xml:base": "xmlBase",
+        xmllang: "xmlLang",
+        "xml:lang": "xmlLang",
+        xmlns: "xmlns",
+        "xml:space": "xmlSpace",
+        xmlnsxlink: "xmlnsXlink",
+        "xmlns:xlink": "xmlnsXlink",
+        xmlspace: "xmlSpace",
+        y1: "y1",
+        y2: "y2",
+        y: "y",
+        ychannelselector: "yChannelSelector",
+        z: "z",
+        zoomandpan: "zoomAndPan"
+      },
+      warnedProperties = {},
+      EVENT_NAME_REGEX = /^on./,
+      INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,
+      rARIA = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,
+      msPattern$1 = /^-ms-/,
+      hyphenPattern = /-(.)/g,
+      badStyleValueWithSemicolonPattern = /;\s*$/,
+      warnedStyleNames = {},
+      warnedStyleValues = {},
+      warnedForNaNValue = !1,
+      warnedForInfinityValue = !1,
+      matchHtmlRegExp = /["'&<>]/,
+      uppercasePattern = /([A-Z])/g,
+      msPattern = /^ms-/,
+      isJavaScriptProtocol =
+        /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i,
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      ReactDOMSharedInternals =
+        ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      NotPending = Object.freeze({
+        pending: !1,
+        data: null,
+        method: null,
+        action: null
+      }),
+      previousDispatcher = ReactDOMSharedInternals.d;
+    ReactDOMSharedInternals.d = {
+      f: previousDispatcher.f,
+      r: previousDispatcher.r,
+      D: function (href) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            if (!resumableState.dnsResources.hasOwnProperty(href)) {
+              resumableState.dnsResources[href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              )
+                JSCompiler_temp =
+                  ((header =
+                    "<" +
+                    escapeHrefForLinkHeaderURLContext(href) +
+                    ">; rel=dns-prefetch"),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              JSCompiler_temp
+                ? ((renderState.resets.dns[href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((header = []),
+                  pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+                  renderState.preconnects.add(header));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.D(href);
+      },
+      C: function (href, crossOrigin) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            var bucket =
+              "use-credentials" === crossOrigin
+                ? "credentials"
+                : "string" === typeof crossOrigin
+                  ? "anonymous"
+                  : "default";
+            if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+              resumableState.connectResources[bucket][href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              ) {
+                JSCompiler_temp =
+                  "<" +
+                  escapeHrefForLinkHeaderURLContext(href) +
+                  ">; rel=preconnect";
+                if ("string" === typeof crossOrigin) {
+                  var escapedCrossOrigin =
+                    escapeStringForLinkHeaderQuotedParamValueContext(
+                      crossOrigin,
+                      "crossOrigin"
+                    );
+                  JSCompiler_temp +=
+                    '; crossorigin="' + escapedCrossOrigin + '"';
+                }
+                JSCompiler_temp =
+                  ((header = JSCompiler_temp),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              }
+              JSCompiler_temp
+                ? ((renderState.resets.connect[bucket][href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((bucket = []),
+                  pushLinkImpl(bucket, {
+                    rel: "preconnect",
+                    href: href,
+                    crossOrigin: crossOrigin
+                  }),
+                  renderState.preconnects.add(bucket));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.C(href, crossOrigin);
+      },
+      L: function (href, as, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (as && href) {
+            switch (as) {
+              case "image":
+                if (options) {
+                  var imageSrcSet = options.imageSrcSet;
+                  var imageSizes = options.imageSizes;
+                  var fetchPriority = options.fetchPriority;
+                }
+                var key = imageSrcSet
+                  ? imageSrcSet + "\n" + (imageSizes || "")
+                  : href;
+                if (resumableState.imageResources.hasOwnProperty(key)) return;
+                resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+                resumableState = renderState.headers;
+                var header;
+                resumableState &&
+                0 < resumableState.remainingCapacity &&
+                "string" !== typeof imageSrcSet &&
+                "high" === fetchPriority &&
+                ((header = getPreloadAsHeader(href, as, options)),
+                0 <= (resumableState.remainingCapacity -= header.length + 2))
+                  ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+                    resumableState.highImagePreloads &&
+                      (resumableState.highImagePreloads += ", "),
+                    (resumableState.highImagePreloads += header))
+                  : ((resumableState = []),
+                    pushLinkImpl(
+                      resumableState,
+                      assign(
+                        {
+                          rel: "preload",
+                          href: imageSrcSet ? void 0 : href,
+                          as: as
+                        },
+                        options
+                      )
+                    ),
+                    "high" === fetchPriority
+                      ? renderState.highImagePreloads.add(resumableState)
+                      : (renderState.bulkPreloads.add(resumableState),
+                        renderState.preloads.images.set(key, resumableState)));
+                break;
+              case "style":
+                if (resumableState.styleResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.styleResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.stylesheets.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                break;
+              case "script":
+                if (resumableState.scriptResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                renderState.preloads.scripts.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.scriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                break;
+              default:
+                if (resumableState.unknownResources.hasOwnProperty(as)) {
+                  if (
+                    ((imageSrcSet = resumableState.unknownResources[as]),
+                    imageSrcSet.hasOwnProperty(href))
+                  )
+                    return;
+                } else
+                  (imageSrcSet = {}),
+                    (resumableState.unknownResources[as] = imageSrcSet);
+                imageSrcSet[href] = PRELOAD_NO_CREDS;
+                if (
+                  (resumableState = renderState.headers) &&
+                  0 < resumableState.remainingCapacity &&
+                  "font" === as &&
+                  ((key = getPreloadAsHeader(href, as, options)),
+                  0 <= (resumableState.remainingCapacity -= key.length + 2))
+                )
+                  (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+                    resumableState.fontPreloads &&
+                      (resumableState.fontPreloads += ", "),
+                    (resumableState.fontPreloads += key);
+                else
+                  switch (
+                    ((resumableState = []),
+                    (href = assign(
+                      { rel: "preload", href: href, as: as },
+                      options
+                    )),
+                    pushLinkImpl(resumableState, href),
+                    as)
+                  ) {
+                    case "font":
+                      renderState.fontPreloads.add(resumableState);
+                      break;
+                    default:
+                      renderState.bulkPreloads.add(resumableState);
+                  }
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.L(href, as, options);
+      },
+      m: function (href, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            var as =
+              options && "string" === typeof options.as ? options.as : "script";
+            switch (as) {
+              case "script":
+                if (resumableState.moduleScriptResources.hasOwnProperty(href))
+                  return;
+                as = [];
+                resumableState.moduleScriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.moduleScripts.set(href, as);
+                break;
+              default:
+                if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+                  var resources = resumableState.unknownResources[as];
+                  if (resources.hasOwnProperty(href)) return;
+                } else
+                  (resources = {}),
+                    (resumableState.moduleUnknownResources[as] = resources);
+                as = [];
+                resources[href] = PRELOAD_NO_CREDS;
+            }
+            pushLinkImpl(
+              as,
+              assign({ rel: "modulepreload", href: href }, options)
+            );
+            renderState.bulkPreloads.add(as);
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.m(href, options);
+      },
+      X: function (src, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState = resumableState.scriptResources.hasOwnProperty(
+              src
+            )
+              ? resumableState.scriptResources[src]
+              : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.scriptResources[src] = EXISTS),
+              (options = assign({ src: src, async: !0 }, options)),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.scripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.X(src, options);
+      },
+      S: function (href, precedence, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            precedence = precedence || "default";
+            var styleQueue = renderState.styles.get(precedence),
+              resourceState = resumableState.styleResources.hasOwnProperty(href)
+                ? resumableState.styleResources[href]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.styleResources[href] = EXISTS),
+              styleQueue ||
+                ((styleQueue = {
+                  precedence: stringToChunk(escapeTextForBrowser(precedence)),
+                  rules: [],
+                  hrefs: [],
+                  sheets: new Map()
+                }),
+                renderState.styles.set(precedence, styleQueue)),
+              (precedence = {
+                state: PENDING$1,
+                props: assign(
+                  {
+                    rel: "stylesheet",
+                    href: href,
+                    "data-precedence": precedence
+                  },
+                  options
+                )
+              }),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(precedence.props, resourceState),
+                (renderState = renderState.preloads.stylesheets.get(href)) &&
+                0 < renderState.length
+                  ? (renderState.length = 0)
+                  : (precedence.state = PRELOADED)),
+              styleQueue.sheets.set(href, precedence),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.S(href, precedence, options);
+      },
+      M: function (src, options) {
+        var request = currentRequest ? currentRequest : null;
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState =
+              resumableState.moduleScriptResources.hasOwnProperty(src)
+                ? resumableState.moduleScriptResources[src]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.moduleScriptResources[src] = EXISTS),
+              (options = assign(
+                { src: src, type: "module", async: !0 },
+                options
+              )),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.moduleScripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.M(src, options);
+      }
+    };
+    var NothingSent = 0,
+      SentCompleteSegmentFunction = 1,
+      SentCompleteBoundaryFunction = 2,
+      SentClientRenderFunction = 4,
+      SentStyleInsertionFunction = 8,
+      EXISTS = null,
+      PRELOAD_NO_CREDS = [];
+    Object.freeze(PRELOAD_NO_CREDS);
+    stringToPrecomputedChunk('"></template>');
+    var startInlineScript = stringToPrecomputedChunk("<script>"),
+      endInlineScript = stringToPrecomputedChunk("\x3c/script>"),
+      startScriptSrc = stringToPrecomputedChunk('<script src="'),
+      startModuleSrc = stringToPrecomputedChunk('<script type="module" src="'),
+      scriptNonce = stringToPrecomputedChunk('" nonce="'),
+      scriptIntegirty = stringToPrecomputedChunk('" integrity="'),
+      scriptCrossOrigin = stringToPrecomputedChunk('" crossorigin="'),
+      endAsyncScript = stringToPrecomputedChunk('" async="">\x3c/script>'),
+      scriptRegex = /(<\/|<)(s)(cript)/gi,
+      importMapScriptStart = stringToPrecomputedChunk(
+        '<script type="importmap">'
+      ),
+      importMapScriptEnd = stringToPrecomputedChunk("\x3c/script>");
+    var didWarnForNewBooleanPropsWithEmptyValue = {};
+    var NoContribution = 0,
+      ROOT_HTML_MODE = 0,
+      HTML_HTML_MODE = 1,
+      HTML_MODE = 2,
+      HTML_HEAD_MODE = 3,
+      SVG_MODE = 4,
+      MATHML_MODE = 5,
+      HTML_TABLE_MODE = 6,
+      HTML_TABLE_BODY_MODE = 7,
+      HTML_TABLE_ROW_MODE = 8,
+      HTML_COLGROUP_MODE = 9,
+      textSeparator = stringToPrecomputedChunk("\x3c!-- --\x3e"),
+      styleNameCache = new Map(),
+      styleAttributeStart = stringToPrecomputedChunk(' style="'),
+      styleAssign = stringToPrecomputedChunk(":"),
+      styleSeparator = stringToPrecomputedChunk(";"),
+      attributeSeparator = stringToPrecomputedChunk(" "),
+      attributeAssign = stringToPrecomputedChunk('="'),
+      attributeEnd = stringToPrecomputedChunk('"'),
+      attributeEmptyString = stringToPrecomputedChunk('=""'),
+      actionJavaScriptURL = stringToPrecomputedChunk(
+        escapeTextForBrowser(
+          "javascript:throw new Error('React form unexpectedly submitted.')"
+        )
+      ),
+      startHiddenInputChunk = stringToPrecomputedChunk('<input type="hidden"'),
+      endOfStartTag = stringToPrecomputedChunk(">"),
+      endOfStartTagSelfClosing = stringToPrecomputedChunk("/>"),
+      didWarnDefaultInputValue = !1,
+      didWarnDefaultChecked = !1,
+      didWarnDefaultSelectValue = !1,
+      didWarnDefaultTextareaValue = !1,
+      didWarnInvalidOptionChildren = !1,
+      didWarnInvalidOptionInnerHTML = !1,
+      didWarnSelectedSetOnOption = !1,
+      didWarnFormActionType = !1,
+      didWarnFormActionName = !1,
+      didWarnFormActionTarget = !1,
+      didWarnFormActionMethod = !1,
+      selectedMarkerAttribute = stringToPrecomputedChunk(' selected=""'),
+      formReplayingRuntimeScript = stringToPrecomputedChunk(
+        'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});'
+      ),
+      formStateMarkerIsMatching = stringToPrecomputedChunk("\x3c!--F!--\x3e"),
+      formStateMarkerIsNotMatching = stringToPrecomputedChunk("\x3c!--F--\x3e"),
+      styleRegex = /(<\/|<)(s)(tyle)/gi,
+      leadingNewline = stringToPrecomputedChunk("\n"),
+      VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+      validatedTagCache = new Map(),
+      doctypeChunk = stringToPrecomputedChunk("<!DOCTYPE html>"),
+      endTagCache = new Map(),
+      placeholder1 = stringToPrecomputedChunk('<template id="'),
+      placeholder2 = stringToPrecomputedChunk('"></template>'),
+      startCompletedSuspenseBoundary =
+        stringToPrecomputedChunk("\x3c!--$--\x3e"),
+      startPendingSuspenseBoundary1 = stringToPrecomputedChunk(
+        '\x3c!--$?--\x3e<template id="'
+      ),
+      startPendingSuspenseBoundary2 = stringToPrecomputedChunk('"></template>'),
+      startClientRenderedSuspenseBoundary =
+        stringToPrecomputedChunk("\x3c!--$!--\x3e"),
+      endSuspenseBoundary = stringToPrecomputedChunk("\x3c!--/$--\x3e"),
+      clientRenderedSuspenseBoundaryError1 =
+        stringToPrecomputedChunk("<template"),
+      clientRenderedSuspenseBoundaryErrorAttrInterstitial =
+        stringToPrecomputedChunk('"'),
+      clientRenderedSuspenseBoundaryError1A =
+        stringToPrecomputedChunk(' data-dgst="'),
+      clientRenderedSuspenseBoundaryError1B =
+        stringToPrecomputedChunk(' data-msg="'),
+      clientRenderedSuspenseBoundaryError1C =
+        stringToPrecomputedChunk(' data-stck="'),
+      clientRenderedSuspenseBoundaryError1D =
+        stringToPrecomputedChunk(' data-cstck="'),
+      clientRenderedSuspenseBoundaryError2 =
+        stringToPrecomputedChunk("></template>"),
+      boundaryPreambleContributionChunkStart =
+        stringToPrecomputedChunk("\x3c!--"),
+      boundaryPreambleContributionChunkEnd = stringToPrecomputedChunk("--\x3e"),
+      startSegmentHTML = stringToPrecomputedChunk('<div hidden id="'),
+      startSegmentHTML2 = stringToPrecomputedChunk('">'),
+      endSegmentHTML = stringToPrecomputedChunk("</div>"),
+      startSegmentSVG = stringToPrecomputedChunk(
+        '<svg aria-hidden="true" style="display:none" id="'
+      ),
+      startSegmentSVG2 = stringToPrecomputedChunk('">'),
+      endSegmentSVG = stringToPrecomputedChunk("</svg>"),
+      startSegmentMathML = stringToPrecomputedChunk(
+        '<math aria-hidden="true" style="display:none" id="'
+      ),
+      startSegmentMathML2 = stringToPrecomputedChunk('">'),
+      endSegmentMathML = stringToPrecomputedChunk("</math>"),
+      startSegmentTable = stringToPrecomputedChunk('<table hidden id="'),
+      startSegmentTable2 = stringToPrecomputedChunk('">'),
+      endSegmentTable = stringToPrecomputedChunk("</table>"),
+      startSegmentTableBody = stringToPrecomputedChunk(
+        '<table hidden><tbody id="'
+      ),
+      startSegmentTableBody2 = stringToPrecomputedChunk('">'),
+      endSegmentTableBody = stringToPrecomputedChunk("</tbody></table>"),
+      startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id="'),
+      startSegmentTableRow2 = stringToPrecomputedChunk('">'),
+      endSegmentTableRow = stringToPrecomputedChunk("</tr></table>"),
+      startSegmentColGroup = stringToPrecomputedChunk(
+        '<table hidden><colgroup id="'
+      ),
+      startSegmentColGroup2 = stringToPrecomputedChunk('">'),
+      endSegmentColGroup = stringToPrecomputedChunk("</colgroup></table>"),
+      completeSegmentScript1Full = stringToPrecomputedChunk(
+        '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("'
+      ),
+      completeSegmentScript1Partial = stringToPrecomputedChunk('$RS("'),
+      completeSegmentScript2 = stringToPrecomputedChunk('","'),
+      completeSegmentScriptEnd = stringToPrecomputedChunk('")\x3c/script>');
+    stringToPrecomputedChunk('<template data-rsi="" data-sid="');
+    stringToPrecomputedChunk('" data-pid="');
+    var completeBoundaryScript1Full = stringToPrecomputedChunk(
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("'
+      ),
+      completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC("'),
+      completeBoundaryWithStylesScript1FullBoth = stringToPrecomputedChunk(
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+      ),
+      completeBoundaryWithStylesScript1FullPartial = stringToPrecomputedChunk(
+        '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+      ),
+      completeBoundaryWithStylesScript1Partial =
+        stringToPrecomputedChunk('$RR("'),
+      completeBoundaryScript2 = stringToPrecomputedChunk('","'),
+      completeBoundaryScript3a = stringToPrecomputedChunk('",'),
+      completeBoundaryScript3b = stringToPrecomputedChunk('"'),
+      completeBoundaryScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+    stringToPrecomputedChunk('<template data-rci="" data-bid="');
+    stringToPrecomputedChunk('<template data-rri="" data-bid="');
+    stringToPrecomputedChunk('" data-sid="');
+    stringToPrecomputedChunk('" data-sty="');
+    var clientRenderScript1Full = stringToPrecomputedChunk(
+        '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("'
+      ),
+      clientRenderScript1Partial = stringToPrecomputedChunk('$RX("'),
+      clientRenderScript1A = stringToPrecomputedChunk('"'),
+      clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(","),
+      clientRenderScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+    stringToPrecomputedChunk('<template data-rxi="" data-bid="');
+    stringToPrecomputedChunk('" data-dgst="');
+    stringToPrecomputedChunk('" data-msg="');
+    stringToPrecomputedChunk('" data-stck="');
+    stringToPrecomputedChunk('" data-cstck="');
+    var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g,
+      regexForJSStringsInScripts = /[&><\u2028\u2029]/g,
+      lateStyleTagResourceOpen1 = stringToPrecomputedChunk(
+        '<style media="not all" data-precedence="'
+      ),
+      lateStyleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+      lateStyleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+      lateStyleTagTemplateClose = stringToPrecomputedChunk("</style>"),
+      currentlyRenderingBoundaryHasStylesToHoist = !1,
+      destinationHasCapacity = !0,
+      stylesheetFlushingQueue = [],
+      styleTagResourceOpen1 = stringToPrecomputedChunk(
+        '<style data-precedence="'
+      ),
+      styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+      spaceSeparator = stringToPrecomputedChunk(" "),
+      styleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+      styleTagResourceClose = stringToPrecomputedChunk("</style>"),
+      arrayFirstOpenBracket = stringToPrecomputedChunk("["),
+      arraySubsequentOpenBracket = stringToPrecomputedChunk(",["),
+      arrayInterstitial = stringToPrecomputedChunk(","),
+      arrayCloseBracket = stringToPrecomputedChunk("]"),
+      PENDING$1 = 0,
+      PRELOADED = 1,
+      PREAMBLE = 2,
+      LATE = 3,
+      regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g,
+      regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g,
+      bind = Function.prototype.bind,
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      emptyContextObject = {};
+    Object.freeze(emptyContextObject);
+    var rendererSigil = {};
+    var currentActiveSnapshot = null,
+      didWarnAboutNoopUpdateForComponent = {},
+      didWarnAboutDeprecatedWillMount = {};
+    var didWarnAboutUninitializedState = new Set();
+    var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
+    var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
+    var didWarnAboutDirectlyAssigningPropsToState = new Set();
+    var didWarnAboutUndefinedDerivedState = new Set();
+    var didWarnAboutContextTypes$1 = new Set();
+    var didWarnAboutChildContextTypes = new Set();
+    var didWarnAboutInvalidateContextType = new Set();
+    var didWarnOnInvalidCallback = new Set();
+    var classComponentUpdater = {
+        enqueueSetState: function (inst, payload, callback) {
+          var internals = inst._reactInternals;
+          null === internals.queue
+            ? warnNoop(inst, "setState")
+            : (internals.queue.push(payload),
+              void 0 !== callback &&
+                null !== callback &&
+                warnOnInvalidCallback(callback));
+        },
+        enqueueReplaceState: function (inst, payload, callback) {
+          inst = inst._reactInternals;
+          inst.replace = !0;
+          inst.queue = [payload];
+          void 0 !== callback &&
+            null !== callback &&
+            warnOnInvalidCallback(callback);
+        },
+        enqueueForceUpdate: function (inst, callback) {
+          null === inst._reactInternals.queue
+            ? warnNoop(inst, "forceUpdate")
+            : void 0 !== callback &&
+              null !== callback &&
+              warnOnInvalidCallback(callback);
+        }
+      },
+      emptyTreeContext = { id: 1, overflow: "" },
+      clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+      log = Math.log,
+      LN2 = Math.LN2,
+      SuspenseException = Error(
+        "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+      ),
+      suspendedThenable = null,
+      objectIs = "function" === typeof Object.is ? Object.is : is,
+      currentlyRenderingComponent = null,
+      currentlyRenderingTask = null,
+      currentlyRenderingRequest = null,
+      currentlyRenderingKeyPath = null,
+      firstWorkInProgressHook = null,
+      workInProgressHook = null,
+      isReRender = !1,
+      didScheduleRenderPhaseUpdate = !1,
+      localIdCounter = 0,
+      actionStateCounter = 0,
+      actionStateMatchingIndex = -1,
+      thenableIndexCounter = 0,
+      thenableState = null,
+      renderPhaseUpdates = null,
+      numberOfReRenders = 0,
+      isInHookUserCodeInDev = !1,
+      currentHookNameInDev,
+      HooksDispatcher = {
+        readContext: readContext,
+        use: function (usable) {
+          if (null !== usable && "object" === typeof usable) {
+            if ("function" === typeof usable.then)
+              return unwrapThenable(usable);
+            if (usable.$$typeof === REACT_CONTEXT_TYPE)
+              return readContext(usable);
+          }
+          throw Error(
+            "An unsupported type was passed to use(): " + String(usable)
+          );
+        },
+        useContext: function (context) {
+          currentHookNameInDev = "useContext";
+          resolveCurrentlyRenderingComponent();
+          return context._currentValue;
+        },
+        useMemo: useMemo,
+        useReducer: useReducer,
+        useRef: function (initialValue) {
+          currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+          workInProgressHook = createWorkInProgressHook();
+          var previousRef = workInProgressHook.memoizedState;
+          return null === previousRef
+            ? ((initialValue = { current: initialValue }),
+              Object.seal(initialValue),
+              (workInProgressHook.memoizedState = initialValue))
+            : previousRef;
+        },
+        useState: function (initialState) {
+          currentHookNameInDev = "useState";
+          return useReducer(basicStateReducer, initialState);
+        },
+        useInsertionEffect: noop$1,
+        useLayoutEffect: noop$1,
+        useCallback: function (callback, deps) {
+          return useMemo(function () {
+            return callback;
+          }, deps);
+        },
+        useImperativeHandle: noop$1,
+        useEffect: noop$1,
+        useDebugValue: noop$1,
+        useDeferredValue: function (value, initialValue) {
+          resolveCurrentlyRenderingComponent();
+          return void 0 !== initialValue ? initialValue : value;
+        },
+        useTransition: function () {
+          resolveCurrentlyRenderingComponent();
+          return [!1, unsupportedStartTransition];
+        },
+        useId: function () {
+          var treeId = currentlyRenderingTask.treeContext;
+          var overflow = treeId.overflow;
+          treeId = treeId.id;
+          treeId =
+            (treeId & ~(1 << (32 - clz32(treeId) - 1))).toString(32) + overflow;
+          var resumableState = currentResumableState;
+          if (null === resumableState)
+            throw Error(
+              "Invalid hook call. Hooks can only be called inside of the body of a function component."
+            );
+          overflow = localIdCounter++;
+          treeId = "\u00ab" + resumableState.idPrefix + "R" + treeId;
+          0 < overflow && (treeId += "H" + overflow.toString(32));
+          return treeId + "\u00bb";
+        },
+        useSyncExternalStore: function (
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        ) {
+          if (void 0 === getServerSnapshot)
+            throw Error(
+              "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+            );
+          return getServerSnapshot();
+        },
+        useOptimistic: function (passthrough) {
+          resolveCurrentlyRenderingComponent();
+          return [passthrough, unsupportedSetOptimisticState];
+        },
+        useActionState: useActionState,
+        useFormState: useActionState,
+        useHostTransitionStatus: function () {
+          resolveCurrentlyRenderingComponent();
+          return NotPending;
+        },
+        useMemoCache: function (size) {
+          for (var data = Array(size), i = 0; i < size; i++)
+            data[i] = REACT_MEMO_CACHE_SENTINEL;
+          return data;
+        },
+        useCacheRefresh: function () {
+          return unsupportedRefresh;
+        }
+      },
+      currentResumableState = null,
+      currentTaskInDEV = null,
+      DefaultAsyncDispatcher = {
+        getCacheForType: function () {
+          throw Error("Not implemented.");
+        },
+        getOwner: function () {
+          return null === currentTaskInDEV
+            ? null
+            : currentTaskInDEV.componentStack;
+        }
+      },
+      disabledDepth = 0,
+      prevLog,
+      prevInfo,
+      prevWarn,
+      prevError,
+      prevGroup,
+      prevGroupCollapsed,
+      prevGroupEnd;
+    disabledLog.__reactDisabledLog = !0;
+    var prefix,
+      suffix,
+      reentry = !1;
+    var componentFrameCache = new (
+      "function" === typeof WeakMap ? WeakMap : Map
+    )();
+    var callComponent = {
+        react_stack_bottom_frame: function (Component, props, secondArg) {
+          return Component(props, secondArg);
+        }
+      },
+      callComponentInDEV =
+        callComponent.react_stack_bottom_frame.bind(callComponent),
+      callRender = {
+        react_stack_bottom_frame: function (instance) {
+          return instance.render();
+        }
+      },
+      callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),
+      callLazyInit = {
+        react_stack_bottom_frame: function (lazy) {
+          var init = lazy._init;
+          return init(lazy._payload);
+        }
+      },
+      callLazyInitInDEV =
+        callLazyInit.react_stack_bottom_frame.bind(callLazyInit),
+      lastResetTime = 0;
+    if (
+      "object" === typeof performance &&
+      "function" === typeof performance.now
+    ) {
+      var localPerformance = performance;
+      var getCurrentTime = function () {
+        return localPerformance.now();
+      };
+    } else {
+      var localDate = Date;
+      getCurrentTime = function () {
+        return localDate.now();
+      };
+    }
+    var CLIENT_RENDERED = 4,
+      PENDING = 0,
+      COMPLETED = 1,
+      FLUSHED = 2,
+      POSTPONED = 5,
+      CLOSED = 14,
+      currentRequest = null,
+      didWarnAboutBadClass = {},
+      didWarnAboutContextTypes = {},
+      didWarnAboutContextTypeOnFunctionComponent = {},
+      didWarnAboutGetDerivedStateOnFunctionComponent = {},
+      didWarnAboutReassigningProps = !1,
+      didWarnAboutGenerators = !1,
+      didWarnAboutMaps = !1;
+    ensureCorrectIsomorphicReactVersion();
+    ensureCorrectIsomorphicReactVersion();
+    exports.prerender = function (children, options) {
+      return new Promise(function (resolve, reject) {
+        var onHeaders = options ? options.onHeaders : void 0,
+          onHeadersImpl;
+        onHeaders &&
+          (onHeadersImpl = function (headersDescriptor) {
+            onHeaders(new Headers(headersDescriptor));
+          });
+        var resources = createResumableState(
+            options ? options.identifierPrefix : void 0,
+            options ? options.unstable_externalRuntimeSrc : void 0,
+            options ? options.bootstrapScriptContent : void 0,
+            options ? options.bootstrapScripts : void 0,
+            options ? options.bootstrapModules : void 0
+          ),
+          request = createPrerenderRequest(
+            children,
+            resources,
+            createRenderState(
+              resources,
+              void 0,
+              options ? options.unstable_externalRuntimeSrc : void 0,
+              options ? options.importMap : void 0,
+              onHeadersImpl,
+              options ? options.maxHeadersLength : void 0
+            ),
+            createRootFormatContext(options ? options.namespaceURI : void 0),
+            options ? options.progressiveChunkSize : void 0,
+            options ? options.onError : void 0,
+            function () {
+              var result = {
+                prelude: new ReadableStream(
+                  {
+                    type: "bytes",
+                    pull: function (controller) {
+                      startFlowing(request, controller);
+                    },
+                    cancel: function (reason) {
+                      request.destination = null;
+                      abort(request, reason);
+                    }
+                  },
+                  { highWaterMark: 0 }
+                )
+              };
+              resolve(result);
+            },
+            void 0,
+            void 0,
+            reject,
+            options ? options.onPostpone : void 0
+          );
+        if (options && options.signal) {
+          var signal = options.signal;
+          if (signal.aborted) abort(request, signal.reason);
+          else {
+            var listener = function () {
+              abort(request, signal.reason);
+              signal.removeEventListener("abort", listener);
+            };
+            signal.addEventListener("abort", listener);
+          }
+        }
+        startWork(request);
+      });
+    };
+    exports.renderToReadableStream = function (children, options) {
+      return new Promise(function (resolve, reject) {
+        var onFatalError,
+          onAllReady,
+          allReady = new Promise(function (res, rej) {
+            onAllReady = res;
+            onFatalError = rej;
+          }),
+          onHeaders = options ? options.onHeaders : void 0,
+          onHeadersImpl;
+        onHeaders &&
+          (onHeadersImpl = function (headersDescriptor) {
+            onHeaders(new Headers(headersDescriptor));
+          });
+        var resumableState = createResumableState(
+            options ? options.identifierPrefix : void 0,
+            options ? options.unstable_externalRuntimeSrc : void 0,
+            options ? options.bootstrapScriptContent : void 0,
+            options ? options.bootstrapScripts : void 0,
+            options ? options.bootstrapModules : void 0
+          ),
+          request = createRequest(
+            children,
+            resumableState,
+            createRenderState(
+              resumableState,
+              options ? options.nonce : void 0,
+              options ? options.unstable_externalRuntimeSrc : void 0,
+              options ? options.importMap : void 0,
+              onHeadersImpl,
+              options ? options.maxHeadersLength : void 0
+            ),
+            createRootFormatContext(options ? options.namespaceURI : void 0),
+            options ? options.progressiveChunkSize : void 0,
+            options ? options.onError : void 0,
+            onAllReady,
+            function () {
+              var stream = new ReadableStream(
+                {
+                  type: "bytes",
+                  pull: function (controller) {
+                    startFlowing(request, controller);
+                  },
+                  cancel: function (reason) {
+                    request.destination = null;
+                    abort(request, reason);
+                  }
+                },
+                { highWaterMark: 0 }
+              );
+              stream.allReady = allReady;
+              resolve(stream);
+            },
+            function (error) {
+              allReady.catch(function () {});
+              reject(error);
+            },
+            onFatalError,
+            options ? options.onPostpone : void 0,
+            options ? options.formState : void 0
+          );
+        if (options && options.signal) {
+          var signal = options.signal;
+          if (signal.aborted) abort(request, signal.reason);
+          else {
+            var listener = function () {
+              abort(request, signal.reason);
+              signal.removeEventListener("abort", listener);
+            };
+            signal.addEventListener("abort", listener);
+          }
+        }
+        startWork(request);
+      });
+    };
+    exports.version = "19.1.1";
+  })();
Index: node_modules/react-dom/cjs/react-dom-server.browser.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server.browser.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server.browser.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6384 @@
+/**
+ * @license React
+ * react-dom-server.browser.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+
+
+ JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
+
+ Copyright (c) 2011 Gary Court
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+"use strict";
+var React = require("react"),
+  ReactDOM = require("react-dom");
+function formatProdErrorMessage(code) {
+  var url = "https://react.dev/errors/" + code;
+  if (1 < arguments.length) {
+    url += "?args[]=" + encodeURIComponent(arguments[1]);
+    for (var i = 2; i < arguments.length; i++)
+      url += "&args[]=" + encodeURIComponent(arguments[i]);
+  }
+  return (
+    "Minified React error #" +
+    code +
+    "; visit " +
+    url +
+    " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."
+  );
+}
+var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+  REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+  REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+  REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+  MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+  isArrayImpl = Array.isArray;
+function murmurhash3_32_gc(key, seed) {
+  var remainder = key.length & 3;
+  var bytes = key.length - remainder;
+  var h1 = seed;
+  for (seed = 0; seed < bytes; ) {
+    var k1 =
+      (key.charCodeAt(seed) & 255) |
+      ((key.charCodeAt(++seed) & 255) << 8) |
+      ((key.charCodeAt(++seed) & 255) << 16) |
+      ((key.charCodeAt(++seed) & 255) << 24);
+    ++seed;
+    k1 =
+      (3432918353 * (k1 & 65535) +
+        (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+      4294967295;
+    k1 = (k1 << 15) | (k1 >>> 17);
+    k1 =
+      (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+      4294967295;
+    h1 ^= k1;
+    h1 = (h1 << 13) | (h1 >>> 19);
+    h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295;
+    h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16);
+  }
+  k1 = 0;
+  switch (remainder) {
+    case 3:
+      k1 ^= (key.charCodeAt(seed + 2) & 255) << 16;
+    case 2:
+      k1 ^= (key.charCodeAt(seed + 1) & 255) << 8;
+    case 1:
+      (k1 ^= key.charCodeAt(seed) & 255),
+        (k1 =
+          (3432918353 * (k1 & 65535) +
+            (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295),
+        (k1 = (k1 << 15) | (k1 >>> 17)),
+        (h1 ^=
+          (461845907 * (k1 & 65535) +
+            (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295);
+  }
+  h1 ^= key.length;
+  h1 ^= h1 >>> 16;
+  h1 =
+    (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) &
+    4294967295;
+  h1 ^= h1 >>> 13;
+  h1 =
+    (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) &
+    4294967295;
+  return (h1 ^ (h1 >>> 16)) >>> 0;
+}
+var channel = new MessageChannel(),
+  taskQueue = [];
+channel.port1.onmessage = function () {
+  var task = taskQueue.shift();
+  task && task();
+};
+function scheduleWork(callback) {
+  taskQueue.push(callback);
+  channel.port2.postMessage(null);
+}
+function handleErrorInNextTick(error) {
+  setTimeout(function () {
+    throw error;
+  });
+}
+var LocalPromise = Promise,
+  scheduleMicrotask =
+    "function" === typeof queueMicrotask
+      ? queueMicrotask
+      : function (callback) {
+          LocalPromise.resolve(null)
+            .then(callback)
+            .catch(handleErrorInNextTick);
+        },
+  currentView = null,
+  writtenBytes = 0;
+function writeChunk(destination, chunk) {
+  if (0 !== chunk.byteLength)
+    if (2048 < chunk.byteLength)
+      0 < writtenBytes &&
+        (destination.enqueue(
+          new Uint8Array(currentView.buffer, 0, writtenBytes)
+        ),
+        (currentView = new Uint8Array(2048)),
+        (writtenBytes = 0)),
+        destination.enqueue(chunk);
+    else {
+      var allowableBytes = currentView.length - writtenBytes;
+      allowableBytes < chunk.byteLength &&
+        (0 === allowableBytes
+          ? destination.enqueue(currentView)
+          : (currentView.set(chunk.subarray(0, allowableBytes), writtenBytes),
+            destination.enqueue(currentView),
+            (chunk = chunk.subarray(allowableBytes))),
+        (currentView = new Uint8Array(2048)),
+        (writtenBytes = 0));
+      currentView.set(chunk, writtenBytes);
+      writtenBytes += chunk.byteLength;
+    }
+}
+function writeChunkAndReturn(destination, chunk) {
+  writeChunk(destination, chunk);
+  return !0;
+}
+function completeWriting(destination) {
+  currentView &&
+    0 < writtenBytes &&
+    (destination.enqueue(new Uint8Array(currentView.buffer, 0, writtenBytes)),
+    (currentView = null),
+    (writtenBytes = 0));
+}
+var textEncoder = new TextEncoder();
+function stringToChunk(content) {
+  return textEncoder.encode(content);
+}
+function stringToPrecomputedChunk(content) {
+  return textEncoder.encode(content);
+}
+function closeWithError(destination, error) {
+  "function" === typeof destination.error
+    ? destination.error(error)
+    : destination.close();
+}
+var assign = Object.assign,
+  hasOwnProperty = Object.prototype.hasOwnProperty,
+  VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+    "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  illegalAttributeNameCache = {},
+  validatedAttributeNameCache = {};
+function isAttributeNameSafe(attributeName) {
+  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+    return !0;
+  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+    return (validatedAttributeNameCache[attributeName] = !0);
+  illegalAttributeNameCache[attributeName] = !0;
+  return !1;
+}
+var unitlessNumbers = new Set(
+    "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+      " "
+    )
+  ),
+  aliases = new Map([
+    ["acceptCharset", "accept-charset"],
+    ["htmlFor", "for"],
+    ["httpEquiv", "http-equiv"],
+    ["crossOrigin", "crossorigin"],
+    ["accentHeight", "accent-height"],
+    ["alignmentBaseline", "alignment-baseline"],
+    ["arabicForm", "arabic-form"],
+    ["baselineShift", "baseline-shift"],
+    ["capHeight", "cap-height"],
+    ["clipPath", "clip-path"],
+    ["clipRule", "clip-rule"],
+    ["colorInterpolation", "color-interpolation"],
+    ["colorInterpolationFilters", "color-interpolation-filters"],
+    ["colorProfile", "color-profile"],
+    ["colorRendering", "color-rendering"],
+    ["dominantBaseline", "dominant-baseline"],
+    ["enableBackground", "enable-background"],
+    ["fillOpacity", "fill-opacity"],
+    ["fillRule", "fill-rule"],
+    ["floodColor", "flood-color"],
+    ["floodOpacity", "flood-opacity"],
+    ["fontFamily", "font-family"],
+    ["fontSize", "font-size"],
+    ["fontSizeAdjust", "font-size-adjust"],
+    ["fontStretch", "font-stretch"],
+    ["fontStyle", "font-style"],
+    ["fontVariant", "font-variant"],
+    ["fontWeight", "font-weight"],
+    ["glyphName", "glyph-name"],
+    ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+    ["glyphOrientationVertical", "glyph-orientation-vertical"],
+    ["horizAdvX", "horiz-adv-x"],
+    ["horizOriginX", "horiz-origin-x"],
+    ["imageRendering", "image-rendering"],
+    ["letterSpacing", "letter-spacing"],
+    ["lightingColor", "lighting-color"],
+    ["markerEnd", "marker-end"],
+    ["markerMid", "marker-mid"],
+    ["markerStart", "marker-start"],
+    ["overlinePosition", "overline-position"],
+    ["overlineThickness", "overline-thickness"],
+    ["paintOrder", "paint-order"],
+    ["panose-1", "panose-1"],
+    ["pointerEvents", "pointer-events"],
+    ["renderingIntent", "rendering-intent"],
+    ["shapeRendering", "shape-rendering"],
+    ["stopColor", "stop-color"],
+    ["stopOpacity", "stop-opacity"],
+    ["strikethroughPosition", "strikethrough-position"],
+    ["strikethroughThickness", "strikethrough-thickness"],
+    ["strokeDasharray", "stroke-dasharray"],
+    ["strokeDashoffset", "stroke-dashoffset"],
+    ["strokeLinecap", "stroke-linecap"],
+    ["strokeLinejoin", "stroke-linejoin"],
+    ["strokeMiterlimit", "stroke-miterlimit"],
+    ["strokeOpacity", "stroke-opacity"],
+    ["strokeWidth", "stroke-width"],
+    ["textAnchor", "text-anchor"],
+    ["textDecoration", "text-decoration"],
+    ["textRendering", "text-rendering"],
+    ["transformOrigin", "transform-origin"],
+    ["underlinePosition", "underline-position"],
+    ["underlineThickness", "underline-thickness"],
+    ["unicodeBidi", "unicode-bidi"],
+    ["unicodeRange", "unicode-range"],
+    ["unitsPerEm", "units-per-em"],
+    ["vAlphabetic", "v-alphabetic"],
+    ["vHanging", "v-hanging"],
+    ["vIdeographic", "v-ideographic"],
+    ["vMathematical", "v-mathematical"],
+    ["vectorEffect", "vector-effect"],
+    ["vertAdvY", "vert-adv-y"],
+    ["vertOriginX", "vert-origin-x"],
+    ["vertOriginY", "vert-origin-y"],
+    ["wordSpacing", "word-spacing"],
+    ["writingMode", "writing-mode"],
+    ["xmlnsXlink", "xmlns:xlink"],
+    ["xHeight", "x-height"]
+  ]),
+  matchHtmlRegExp = /["'&<>]/;
+function escapeTextForBrowser(text) {
+  if (
+    "boolean" === typeof text ||
+    "number" === typeof text ||
+    "bigint" === typeof text
+  )
+    return "" + text;
+  text = "" + text;
+  var match = matchHtmlRegExp.exec(text);
+  if (match) {
+    var html = "",
+      index,
+      lastIndex = 0;
+    for (index = match.index; index < text.length; index++) {
+      switch (text.charCodeAt(index)) {
+        case 34:
+          match = "&quot;";
+          break;
+        case 38:
+          match = "&amp;";
+          break;
+        case 39:
+          match = "&#x27;";
+          break;
+        case 60:
+          match = "&lt;";
+          break;
+        case 62:
+          match = "&gt;";
+          break;
+        default:
+          continue;
+      }
+      lastIndex !== index && (html += text.slice(lastIndex, index));
+      lastIndex = index + 1;
+      html += match;
+    }
+    text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+  }
+  return text;
+}
+var uppercasePattern = /([A-Z])/g,
+  msPattern = /^ms-/,
+  isJavaScriptProtocol =
+    /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
+function sanitizeURL(url) {
+  return isJavaScriptProtocol.test("" + url)
+    ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+    : url;
+}
+var ReactSharedInternals =
+    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  ReactDOMSharedInternals =
+    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  sharedNotPendingObject = {
+    pending: !1,
+    data: null,
+    method: null,
+    action: null
+  },
+  previousDispatcher = ReactDOMSharedInternals.d;
+ReactDOMSharedInternals.d = {
+  f: previousDispatcher.f,
+  r: previousDispatcher.r,
+  D: prefetchDNS,
+  C: preconnect,
+  L: preload,
+  m: preloadModule,
+  X: preinitScript,
+  S: preinitStyle,
+  M: preinitModuleScript
+};
+var PRELOAD_NO_CREDS = [];
+stringToPrecomputedChunk('"></template>');
+var startInlineScript = stringToPrecomputedChunk("<script>"),
+  endInlineScript = stringToPrecomputedChunk("\x3c/script>"),
+  startScriptSrc = stringToPrecomputedChunk('<script src="'),
+  startModuleSrc = stringToPrecomputedChunk('<script type="module" src="'),
+  scriptNonce = stringToPrecomputedChunk('" nonce="'),
+  scriptIntegirty = stringToPrecomputedChunk('" integrity="'),
+  scriptCrossOrigin = stringToPrecomputedChunk('" crossorigin="'),
+  endAsyncScript = stringToPrecomputedChunk('" async="">\x3c/script>'),
+  scriptRegex = /(<\/|<)(s)(cript)/gi;
+function scriptReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+}
+var importMapScriptStart = stringToPrecomputedChunk(
+    '<script type="importmap">'
+  ),
+  importMapScriptEnd = stringToPrecomputedChunk("\x3c/script>");
+function createRenderState(
+  resumableState,
+  nonce,
+  externalRuntimeConfig,
+  importMap,
+  onHeaders,
+  maxHeadersLength
+) {
+  var inlineScriptWithNonce =
+      void 0 === nonce
+        ? startInlineScript
+        : stringToPrecomputedChunk(
+            '<script nonce="' + escapeTextForBrowser(nonce) + '">'
+          ),
+    idPrefix = resumableState.idPrefix;
+  externalRuntimeConfig = [];
+  var bootstrapScriptContent = resumableState.bootstrapScriptContent,
+    bootstrapScripts = resumableState.bootstrapScripts,
+    bootstrapModules = resumableState.bootstrapModules;
+  void 0 !== bootstrapScriptContent &&
+    externalRuntimeConfig.push(
+      inlineScriptWithNonce,
+      stringToChunk(
+        ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer)
+      ),
+      endInlineScript
+    );
+  bootstrapScriptContent = [];
+  void 0 !== importMap &&
+    (bootstrapScriptContent.push(importMapScriptStart),
+    bootstrapScriptContent.push(
+      stringToChunk(
+        ("" + JSON.stringify(importMap)).replace(scriptRegex, scriptReplacer)
+      )
+    ),
+    bootstrapScriptContent.push(importMapScriptEnd));
+  importMap = onHeaders
+    ? {
+        preconnects: "",
+        fontPreloads: "",
+        highImagePreloads: "",
+        remainingCapacity:
+          2 + ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3)
+      }
+    : null;
+  onHeaders = {
+    placeholderPrefix: stringToPrecomputedChunk(idPrefix + "P:"),
+    segmentPrefix: stringToPrecomputedChunk(idPrefix + "S:"),
+    boundaryPrefix: stringToPrecomputedChunk(idPrefix + "B:"),
+    startInlineScript: inlineScriptWithNonce,
+    preamble: createPreambleState(),
+    externalRuntimeScript: null,
+    bootstrapChunks: externalRuntimeConfig,
+    importMapChunks: bootstrapScriptContent,
+    onHeaders: onHeaders,
+    headers: importMap,
+    resets: {
+      font: {},
+      dns: {},
+      connect: { default: {}, anonymous: {}, credentials: {} },
+      image: {},
+      style: {}
+    },
+    charsetChunks: [],
+    viewportChunks: [],
+    hoistableChunks: [],
+    preconnects: new Set(),
+    fontPreloads: new Set(),
+    highImagePreloads: new Set(),
+    styles: new Map(),
+    bootstrapScripts: new Set(),
+    scripts: new Set(),
+    bulkPreloads: new Set(),
+    preloads: {
+      images: new Map(),
+      stylesheets: new Map(),
+      scripts: new Map(),
+      moduleScripts: new Map()
+    },
+    nonce: nonce,
+    hoistableState: null,
+    stylesToHoist: !1
+  };
+  if (void 0 !== bootstrapScripts)
+    for (importMap = 0; importMap < bootstrapScripts.length; importMap++) {
+      var scriptConfig = bootstrapScripts[importMap];
+      idPrefix = inlineScriptWithNonce = void 0;
+      bootstrapScriptContent = {
+        rel: "preload",
+        as: "script",
+        fetchPriority: "low",
+        nonce: nonce
+      };
+      "string" === typeof scriptConfig
+        ? (bootstrapScriptContent.href = maxHeadersLength = scriptConfig)
+        : ((bootstrapScriptContent.href = maxHeadersLength = scriptConfig.src),
+          (bootstrapScriptContent.integrity = idPrefix =
+            "string" === typeof scriptConfig.integrity
+              ? scriptConfig.integrity
+              : void 0),
+          (bootstrapScriptContent.crossOrigin = inlineScriptWithNonce =
+            "string" === typeof scriptConfig || null == scriptConfig.crossOrigin
+              ? void 0
+              : "use-credentials" === scriptConfig.crossOrigin
+                ? "use-credentials"
+                : ""));
+      scriptConfig = resumableState;
+      var href = maxHeadersLength;
+      scriptConfig.scriptResources[href] = null;
+      scriptConfig.moduleScriptResources[href] = null;
+      scriptConfig = [];
+      pushLinkImpl(scriptConfig, bootstrapScriptContent);
+      onHeaders.bootstrapScripts.add(scriptConfig);
+      externalRuntimeConfig.push(
+        startScriptSrc,
+        stringToChunk(escapeTextForBrowser(maxHeadersLength))
+      );
+      nonce &&
+        externalRuntimeConfig.push(
+          scriptNonce,
+          stringToChunk(escapeTextForBrowser(nonce))
+        );
+      "string" === typeof idPrefix &&
+        externalRuntimeConfig.push(
+          scriptIntegirty,
+          stringToChunk(escapeTextForBrowser(idPrefix))
+        );
+      "string" === typeof inlineScriptWithNonce &&
+        externalRuntimeConfig.push(
+          scriptCrossOrigin,
+          stringToChunk(escapeTextForBrowser(inlineScriptWithNonce))
+        );
+      externalRuntimeConfig.push(endAsyncScript);
+    }
+  if (void 0 !== bootstrapModules)
+    for (
+      bootstrapScripts = 0;
+      bootstrapScripts < bootstrapModules.length;
+      bootstrapScripts++
+    )
+      (bootstrapScriptContent = bootstrapModules[bootstrapScripts]),
+        (inlineScriptWithNonce = maxHeadersLength = void 0),
+        (idPrefix = {
+          rel: "modulepreload",
+          fetchPriority: "low",
+          nonce: nonce
+        }),
+        "string" === typeof bootstrapScriptContent
+          ? (idPrefix.href = importMap = bootstrapScriptContent)
+          : ((idPrefix.href = importMap = bootstrapScriptContent.src),
+            (idPrefix.integrity = inlineScriptWithNonce =
+              "string" === typeof bootstrapScriptContent.integrity
+                ? bootstrapScriptContent.integrity
+                : void 0),
+            (idPrefix.crossOrigin = maxHeadersLength =
+              "string" === typeof bootstrapScriptContent ||
+              null == bootstrapScriptContent.crossOrigin
+                ? void 0
+                : "use-credentials" === bootstrapScriptContent.crossOrigin
+                  ? "use-credentials"
+                  : "")),
+        (bootstrapScriptContent = resumableState),
+        (scriptConfig = importMap),
+        (bootstrapScriptContent.scriptResources[scriptConfig] = null),
+        (bootstrapScriptContent.moduleScriptResources[scriptConfig] = null),
+        (bootstrapScriptContent = []),
+        pushLinkImpl(bootstrapScriptContent, idPrefix),
+        onHeaders.bootstrapScripts.add(bootstrapScriptContent),
+        externalRuntimeConfig.push(
+          startModuleSrc,
+          stringToChunk(escapeTextForBrowser(importMap))
+        ),
+        nonce &&
+          externalRuntimeConfig.push(
+            scriptNonce,
+            stringToChunk(escapeTextForBrowser(nonce))
+          ),
+        "string" === typeof inlineScriptWithNonce &&
+          externalRuntimeConfig.push(
+            scriptIntegirty,
+            stringToChunk(escapeTextForBrowser(inlineScriptWithNonce))
+          ),
+        "string" === typeof maxHeadersLength &&
+          externalRuntimeConfig.push(
+            scriptCrossOrigin,
+            stringToChunk(escapeTextForBrowser(maxHeadersLength))
+          ),
+        externalRuntimeConfig.push(endAsyncScript);
+  return onHeaders;
+}
+function createResumableState(
+  identifierPrefix,
+  externalRuntimeConfig,
+  bootstrapScriptContent,
+  bootstrapScripts,
+  bootstrapModules
+) {
+  return {
+    idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+    nextFormID: 0,
+    streamingFormat: 0,
+    bootstrapScriptContent: bootstrapScriptContent,
+    bootstrapScripts: bootstrapScripts,
+    bootstrapModules: bootstrapModules,
+    instructions: 0,
+    hasBody: !1,
+    hasHtml: !1,
+    unknownResources: {},
+    dnsResources: {},
+    connectResources: { default: {}, anonymous: {}, credentials: {} },
+    imageResources: {},
+    styleResources: {},
+    scriptResources: {},
+    moduleUnknownResources: {},
+    moduleScriptResources: {}
+  };
+}
+function createPreambleState() {
+  return {
+    htmlChunks: null,
+    headChunks: null,
+    bodyChunks: null,
+    contribution: 0
+  };
+}
+function createFormatContext(insertionMode, selectedValue, tagScope) {
+  return {
+    insertionMode: insertionMode,
+    selectedValue: selectedValue,
+    tagScope: tagScope
+  };
+}
+function createRootFormatContext(namespaceURI) {
+  return createFormatContext(
+    "http://www.w3.org/2000/svg" === namespaceURI
+      ? 4
+      : "http://www.w3.org/1998/Math/MathML" === namespaceURI
+        ? 5
+        : 0,
+    null,
+    0
+  );
+}
+function getChildFormatContext(parentContext, type, props) {
+  switch (type) {
+    case "noscript":
+      return createFormatContext(2, null, parentContext.tagScope | 1);
+    case "select":
+      return createFormatContext(
+        2,
+        null != props.value ? props.value : props.defaultValue,
+        parentContext.tagScope
+      );
+    case "svg":
+      return createFormatContext(4, null, parentContext.tagScope);
+    case "picture":
+      return createFormatContext(2, null, parentContext.tagScope | 2);
+    case "math":
+      return createFormatContext(5, null, parentContext.tagScope);
+    case "foreignObject":
+      return createFormatContext(2, null, parentContext.tagScope);
+    case "table":
+      return createFormatContext(6, null, parentContext.tagScope);
+    case "thead":
+    case "tbody":
+    case "tfoot":
+      return createFormatContext(7, null, parentContext.tagScope);
+    case "colgroup":
+      return createFormatContext(9, null, parentContext.tagScope);
+    case "tr":
+      return createFormatContext(8, null, parentContext.tagScope);
+    case "head":
+      if (2 > parentContext.insertionMode)
+        return createFormatContext(3, null, parentContext.tagScope);
+      break;
+    case "html":
+      if (0 === parentContext.insertionMode)
+        return createFormatContext(1, null, parentContext.tagScope);
+  }
+  return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode
+    ? createFormatContext(2, null, parentContext.tagScope)
+    : parentContext;
+}
+var textSeparator = stringToPrecomputedChunk("\x3c!-- --\x3e");
+function pushTextInstance(target, text, renderState, textEmbedded) {
+  if ("" === text) return textEmbedded;
+  textEmbedded && target.push(textSeparator);
+  target.push(stringToChunk(escapeTextForBrowser(text)));
+  return !0;
+}
+var styleNameCache = new Map(),
+  styleAttributeStart = stringToPrecomputedChunk(' style="'),
+  styleAssign = stringToPrecomputedChunk(":"),
+  styleSeparator = stringToPrecomputedChunk(";");
+function pushStyleAttribute(target, style) {
+  if ("object" !== typeof style) throw Error(formatProdErrorMessage(62));
+  var isFirst = !0,
+    styleName;
+  for (styleName in style)
+    if (hasOwnProperty.call(style, styleName)) {
+      var styleValue = style[styleName];
+      if (
+        null != styleValue &&
+        "boolean" !== typeof styleValue &&
+        "" !== styleValue
+      ) {
+        if (0 === styleName.indexOf("--")) {
+          var nameChunk = stringToChunk(escapeTextForBrowser(styleName));
+          styleValue = stringToChunk(
+            escapeTextForBrowser(("" + styleValue).trim())
+          );
+        } else
+          (nameChunk = styleNameCache.get(styleName)),
+            void 0 === nameChunk &&
+              ((nameChunk = stringToPrecomputedChunk(
+                escapeTextForBrowser(
+                  styleName
+                    .replace(uppercasePattern, "-$1")
+                    .toLowerCase()
+                    .replace(msPattern, "-ms-")
+                )
+              )),
+              styleNameCache.set(styleName, nameChunk)),
+            (styleValue =
+              "number" === typeof styleValue
+                ? 0 === styleValue || unitlessNumbers.has(styleName)
+                  ? stringToChunk("" + styleValue)
+                  : stringToChunk(styleValue + "px")
+                : stringToChunk(
+                    escapeTextForBrowser(("" + styleValue).trim())
+                  ));
+        isFirst
+          ? ((isFirst = !1),
+            target.push(
+              styleAttributeStart,
+              nameChunk,
+              styleAssign,
+              styleValue
+            ))
+          : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+      }
+    }
+  isFirst || target.push(attributeEnd);
+}
+var attributeSeparator = stringToPrecomputedChunk(" "),
+  attributeAssign = stringToPrecomputedChunk('="'),
+  attributeEnd = stringToPrecomputedChunk('"'),
+  attributeEmptyString = stringToPrecomputedChunk('=""');
+function pushBooleanAttribute(target, name, value) {
+  value &&
+    "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    target.push(attributeSeparator, stringToChunk(name), attributeEmptyString);
+}
+function pushStringAttribute(target, name, value) {
+  "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    "boolean" !== typeof value &&
+    target.push(
+      attributeSeparator,
+      stringToChunk(name),
+      attributeAssign,
+      stringToChunk(escapeTextForBrowser(value)),
+      attributeEnd
+    );
+}
+var actionJavaScriptURL = stringToPrecomputedChunk(
+    escapeTextForBrowser(
+      "javascript:throw new Error('React form unexpectedly submitted.')"
+    )
+  ),
+  startHiddenInputChunk = stringToPrecomputedChunk('<input type="hidden"');
+function pushAdditionalFormField(value, key) {
+  this.push(startHiddenInputChunk);
+  validateAdditionalFormField(value);
+  pushStringAttribute(this, "name", key);
+  pushStringAttribute(this, "value", value);
+  this.push(endOfStartTagSelfClosing);
+}
+function validateAdditionalFormField(value) {
+  if ("string" !== typeof value) throw Error(formatProdErrorMessage(480));
+}
+function getCustomFormFields(resumableState, formAction) {
+  if ("function" === typeof formAction.$$FORM_ACTION) {
+    var id = resumableState.nextFormID++;
+    resumableState = resumableState.idPrefix + id;
+    try {
+      var customFields = formAction.$$FORM_ACTION(resumableState);
+      if (customFields) {
+        var formData = customFields.data;
+        null != formData && formData.forEach(validateAdditionalFormField);
+      }
+      return customFields;
+    } catch (x) {
+      if ("object" === typeof x && null !== x && "function" === typeof x.then)
+        throw x;
+    }
+  }
+  return null;
+}
+function pushFormActionAttribute(
+  target,
+  resumableState,
+  renderState,
+  formAction,
+  formEncType,
+  formMethod,
+  formTarget,
+  name
+) {
+  var formData = null;
+  if ("function" === typeof formAction) {
+    var customFields = getCustomFormFields(resumableState, formAction);
+    null !== customFields
+      ? ((name = customFields.name),
+        (formAction = customFields.action || ""),
+        (formEncType = customFields.encType),
+        (formMethod = customFields.method),
+        (formTarget = customFields.target),
+        (formData = customFields.data))
+      : (target.push(
+          attributeSeparator,
+          stringToChunk("formAction"),
+          attributeAssign,
+          actionJavaScriptURL,
+          attributeEnd
+        ),
+        (formTarget = formMethod = formEncType = formAction = name = null),
+        injectFormReplayingRuntime(resumableState, renderState));
+  }
+  null != name && pushAttribute(target, "name", name);
+  null != formAction && pushAttribute(target, "formAction", formAction);
+  null != formEncType && pushAttribute(target, "formEncType", formEncType);
+  null != formMethod && pushAttribute(target, "formMethod", formMethod);
+  null != formTarget && pushAttribute(target, "formTarget", formTarget);
+  return formData;
+}
+function pushAttribute(target, name, value) {
+  switch (name) {
+    case "className":
+      pushStringAttribute(target, "class", value);
+      break;
+    case "tabIndex":
+      pushStringAttribute(target, "tabindex", value);
+      break;
+    case "dir":
+    case "role":
+    case "viewBox":
+    case "width":
+    case "height":
+      pushStringAttribute(target, name, value);
+      break;
+    case "style":
+      pushStyleAttribute(target, value);
+      break;
+    case "src":
+    case "href":
+      if ("" === value) break;
+    case "action":
+    case "formAction":
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(
+        attributeSeparator,
+        stringToChunk(name),
+        attributeAssign,
+        stringToChunk(escapeTextForBrowser(value)),
+        attributeEnd
+      );
+      break;
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "ref":
+      break;
+    case "autoFocus":
+    case "multiple":
+    case "muted":
+      pushBooleanAttribute(target, name.toLowerCase(), value);
+      break;
+    case "xlinkHref":
+      if (
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(
+        attributeSeparator,
+        stringToChunk("xlink:href"),
+        attributeAssign,
+        stringToChunk(escapeTextForBrowser(value)),
+        attributeEnd
+      );
+      break;
+    case "contentEditable":
+    case "spellCheck":
+    case "draggable":
+    case "value":
+    case "autoReverse":
+    case "externalResourcesRequired":
+    case "focusable":
+    case "preserveAlpha":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeAssign,
+          stringToChunk(escapeTextForBrowser(value)),
+          attributeEnd
+        );
+      break;
+    case "inert":
+    case "allowFullScreen":
+    case "async":
+    case "autoPlay":
+    case "controls":
+    case "default":
+    case "defer":
+    case "disabled":
+    case "disablePictureInPicture":
+    case "disableRemotePlayback":
+    case "formNoValidate":
+    case "hidden":
+    case "loop":
+    case "noModule":
+    case "noValidate":
+    case "open":
+    case "playsInline":
+    case "readOnly":
+    case "required":
+    case "reversed":
+    case "scoped":
+    case "seamless":
+    case "itemScope":
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeEmptyString
+        );
+      break;
+    case "capture":
+    case "download":
+      !0 === value
+        ? target.push(
+            attributeSeparator,
+            stringToChunk(name),
+            attributeEmptyString
+          )
+        : !1 !== value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value &&
+          target.push(
+            attributeSeparator,
+            stringToChunk(name),
+            attributeAssign,
+            stringToChunk(escapeTextForBrowser(value)),
+            attributeEnd
+          );
+      break;
+    case "cols":
+    case "rows":
+    case "size":
+    case "span":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        !isNaN(value) &&
+        1 <= value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeAssign,
+          stringToChunk(escapeTextForBrowser(value)),
+          attributeEnd
+        );
+      break;
+    case "rowSpan":
+    case "start":
+      "function" === typeof value ||
+        "symbol" === typeof value ||
+        isNaN(value) ||
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeAssign,
+          stringToChunk(escapeTextForBrowser(value)),
+          attributeEnd
+        );
+      break;
+    case "xlinkActuate":
+      pushStringAttribute(target, "xlink:actuate", value);
+      break;
+    case "xlinkArcrole":
+      pushStringAttribute(target, "xlink:arcrole", value);
+      break;
+    case "xlinkRole":
+      pushStringAttribute(target, "xlink:role", value);
+      break;
+    case "xlinkShow":
+      pushStringAttribute(target, "xlink:show", value);
+      break;
+    case "xlinkTitle":
+      pushStringAttribute(target, "xlink:title", value);
+      break;
+    case "xlinkType":
+      pushStringAttribute(target, "xlink:type", value);
+      break;
+    case "xmlBase":
+      pushStringAttribute(target, "xml:base", value);
+      break;
+    case "xmlLang":
+      pushStringAttribute(target, "xml:lang", value);
+      break;
+    case "xmlSpace":
+      pushStringAttribute(target, "xml:space", value);
+      break;
+    default:
+      if (
+        !(2 < name.length) ||
+        ("o" !== name[0] && "O" !== name[0]) ||
+        ("n" !== name[1] && "N" !== name[1])
+      )
+        if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) {
+          switch (typeof value) {
+            case "function":
+            case "symbol":
+              return;
+            case "boolean":
+              var prefix$8 = name.toLowerCase().slice(0, 5);
+              if ("data-" !== prefix$8 && "aria-" !== prefix$8) return;
+          }
+          target.push(
+            attributeSeparator,
+            stringToChunk(name),
+            attributeAssign,
+            stringToChunk(escapeTextForBrowser(value)),
+            attributeEnd
+          );
+        }
+  }
+}
+var endOfStartTag = stringToPrecomputedChunk(">"),
+  endOfStartTagSelfClosing = stringToPrecomputedChunk("/>");
+function pushInnerHTML(target, innerHTML, children) {
+  if (null != innerHTML) {
+    if (null != children) throw Error(formatProdErrorMessage(60));
+    if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+      throw Error(formatProdErrorMessage(61));
+    innerHTML = innerHTML.__html;
+    null !== innerHTML &&
+      void 0 !== innerHTML &&
+      target.push(stringToChunk("" + innerHTML));
+  }
+}
+function flattenOptionChildren(children) {
+  var content = "";
+  React.Children.forEach(children, function (child) {
+    null != child && (content += child);
+  });
+  return content;
+}
+var selectedMarkerAttribute = stringToPrecomputedChunk(' selected=""'),
+  formReplayingRuntimeScript = stringToPrecomputedChunk(
+    'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});'
+  );
+function injectFormReplayingRuntime(resumableState, renderState) {
+  0 === (resumableState.instructions & 16) &&
+    ((resumableState.instructions |= 16),
+    renderState.bootstrapChunks.unshift(
+      renderState.startInlineScript,
+      formReplayingRuntimeScript,
+      endInlineScript
+    ));
+}
+var formStateMarkerIsMatching = stringToPrecomputedChunk("\x3c!--F!--\x3e"),
+  formStateMarkerIsNotMatching = stringToPrecomputedChunk("\x3c!--F--\x3e");
+function pushLinkImpl(target, props) {
+  target.push(startChunkForTag("link"));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(formatProdErrorMessage(399, "link"));
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTagSelfClosing);
+  return null;
+}
+var styleRegex = /(<\/|<)(s)(tyle)/gi;
+function styleReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+}
+function pushSelfClosing(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(formatProdErrorMessage(399, tag));
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTagSelfClosing);
+  return null;
+}
+function pushTitleImpl(target, props) {
+  target.push(startChunkForTag("title"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  props = Array.isArray(children)
+    ? 2 > children.length
+      ? children[0]
+      : null
+    : children;
+  "function" !== typeof props &&
+    "symbol" !== typeof props &&
+    null !== props &&
+    void 0 !== props &&
+    target.push(stringToChunk(escapeTextForBrowser("" + props)));
+  pushInnerHTML(target, innerHTML, children);
+  target.push(endChunkForTag("title"));
+  return null;
+}
+function pushScriptImpl(target, props) {
+  target.push(startChunkForTag("script"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, children);
+  "string" === typeof children &&
+    target.push(
+      stringToChunk(("" + children).replace(scriptRegex, scriptReplacer))
+    );
+  target.push(endChunkForTag("script"));
+  return null;
+}
+function pushStartSingletonElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, tag);
+  return tag;
+}
+function pushStartGenericElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, tag);
+  return "string" === typeof tag
+    ? (target.push(stringToChunk(escapeTextForBrowser(tag))), null)
+    : tag;
+}
+var leadingNewline = stringToPrecomputedChunk("\n"),
+  VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+  validatedTagCache = new Map();
+function startChunkForTag(tag) {
+  var tagStartChunk = validatedTagCache.get(tag);
+  if (void 0 === tagStartChunk) {
+    if (!VALID_TAG_REGEX.test(tag))
+      throw Error(formatProdErrorMessage(65, tag));
+    tagStartChunk = stringToPrecomputedChunk("<" + tag);
+    validatedTagCache.set(tag, tagStartChunk);
+  }
+  return tagStartChunk;
+}
+var doctypeChunk = stringToPrecomputedChunk("<!DOCTYPE html>");
+function pushStartInstance(
+  target$jscomp$0,
+  type,
+  props,
+  resumableState,
+  renderState,
+  preambleState,
+  hoistableState,
+  formatContext,
+  textEmbedded,
+  isFallback
+) {
+  switch (type) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+      break;
+    case "a":
+      target$jscomp$0.push(startChunkForTag("a"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              case "href":
+                "" === propValue
+                  ? pushStringAttribute(target$jscomp$0, "href", "")
+                  : pushAttribute(target$jscomp$0, propKey, propValue);
+                break;
+              default:
+                pushAttribute(target$jscomp$0, propKey, propValue);
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML, children);
+      if ("string" === typeof children) {
+        target$jscomp$0.push(stringToChunk(escapeTextForBrowser(children)));
+        var JSCompiler_inline_result = null;
+      } else JSCompiler_inline_result = children;
+      return JSCompiler_inline_result;
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "select":
+      target$jscomp$0.push(startChunkForTag("select"));
+      var children$jscomp$0 = null,
+        innerHTML$jscomp$0 = null,
+        propKey$jscomp$0;
+      for (propKey$jscomp$0 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+          var propValue$jscomp$0 = props[propKey$jscomp$0];
+          if (null != propValue$jscomp$0)
+            switch (propKey$jscomp$0) {
+              case "children":
+                children$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "defaultValue":
+              case "value":
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$0,
+                  propValue$jscomp$0
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+      return children$jscomp$0;
+    case "option":
+      var selectedValue = formatContext.selectedValue;
+      target$jscomp$0.push(startChunkForTag("option"));
+      var children$jscomp$1 = null,
+        value = null,
+        selected = null,
+        innerHTML$jscomp$1 = null,
+        propKey$jscomp$1;
+      for (propKey$jscomp$1 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+          var propValue$jscomp$1 = props[propKey$jscomp$1];
+          if (null != propValue$jscomp$1)
+            switch (propKey$jscomp$1) {
+              case "children":
+                children$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "selected":
+                selected = propValue$jscomp$1;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "value":
+                value = propValue$jscomp$1;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$1,
+                  propValue$jscomp$1
+                );
+            }
+        }
+      if (null != selectedValue) {
+        var stringValue =
+          null !== value
+            ? "" + value
+            : flattenOptionChildren(children$jscomp$1);
+        if (isArrayImpl(selectedValue))
+          for (var i = 0; i < selectedValue.length; i++) {
+            if ("" + selectedValue[i] === stringValue) {
+              target$jscomp$0.push(selectedMarkerAttribute);
+              break;
+            }
+          }
+        else
+          "" + selectedValue === stringValue &&
+            target$jscomp$0.push(selectedMarkerAttribute);
+      } else selected && target$jscomp$0.push(selectedMarkerAttribute);
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+      return children$jscomp$1;
+    case "textarea":
+      target$jscomp$0.push(startChunkForTag("textarea"));
+      var value$jscomp$0 = null,
+        defaultValue = null,
+        children$jscomp$2 = null,
+        propKey$jscomp$2;
+      for (propKey$jscomp$2 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+          var propValue$jscomp$2 = props[propKey$jscomp$2];
+          if (null != propValue$jscomp$2)
+            switch (propKey$jscomp$2) {
+              case "children":
+                children$jscomp$2 = propValue$jscomp$2;
+                break;
+              case "value":
+                value$jscomp$0 = propValue$jscomp$2;
+                break;
+              case "defaultValue":
+                defaultValue = propValue$jscomp$2;
+                break;
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(91));
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$2,
+                  propValue$jscomp$2
+                );
+            }
+        }
+      null === value$jscomp$0 &&
+        null !== defaultValue &&
+        (value$jscomp$0 = defaultValue);
+      target$jscomp$0.push(endOfStartTag);
+      if (null != children$jscomp$2) {
+        if (null != value$jscomp$0) throw Error(formatProdErrorMessage(92));
+        if (isArrayImpl(children$jscomp$2)) {
+          if (1 < children$jscomp$2.length)
+            throw Error(formatProdErrorMessage(93));
+          value$jscomp$0 = "" + children$jscomp$2[0];
+        }
+        value$jscomp$0 = "" + children$jscomp$2;
+      }
+      "string" === typeof value$jscomp$0 &&
+        "\n" === value$jscomp$0[0] &&
+        target$jscomp$0.push(leadingNewline);
+      null !== value$jscomp$0 &&
+        target$jscomp$0.push(
+          stringToChunk(escapeTextForBrowser("" + value$jscomp$0))
+        );
+      return null;
+    case "input":
+      target$jscomp$0.push(startChunkForTag("input"));
+      var name = null,
+        formAction = null,
+        formEncType = null,
+        formMethod = null,
+        formTarget = null,
+        value$jscomp$1 = null,
+        defaultValue$jscomp$0 = null,
+        checked = null,
+        defaultChecked = null,
+        propKey$jscomp$3;
+      for (propKey$jscomp$3 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+          var propValue$jscomp$3 = props[propKey$jscomp$3];
+          if (null != propValue$jscomp$3)
+            switch (propKey$jscomp$3) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(399, "input"));
+              case "name":
+                name = propValue$jscomp$3;
+                break;
+              case "formAction":
+                formAction = propValue$jscomp$3;
+                break;
+              case "formEncType":
+                formEncType = propValue$jscomp$3;
+                break;
+              case "formMethod":
+                formMethod = propValue$jscomp$3;
+                break;
+              case "formTarget":
+                formTarget = propValue$jscomp$3;
+                break;
+              case "defaultChecked":
+                defaultChecked = propValue$jscomp$3;
+                break;
+              case "defaultValue":
+                defaultValue$jscomp$0 = propValue$jscomp$3;
+                break;
+              case "checked":
+                checked = propValue$jscomp$3;
+                break;
+              case "value":
+                value$jscomp$1 = propValue$jscomp$3;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$3,
+                  propValue$jscomp$3
+                );
+            }
+        }
+      var formData = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction,
+        formEncType,
+        formMethod,
+        formTarget,
+        name
+      );
+      null !== checked
+        ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+        : null !== defaultChecked &&
+          pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+      null !== value$jscomp$1
+        ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+        : null !== defaultValue$jscomp$0 &&
+          pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+      target$jscomp$0.push(endOfStartTagSelfClosing);
+      null != formData &&
+        formData.forEach(pushAdditionalFormField, target$jscomp$0);
+      return null;
+    case "button":
+      target$jscomp$0.push(startChunkForTag("button"));
+      var children$jscomp$3 = null,
+        innerHTML$jscomp$2 = null,
+        name$jscomp$0 = null,
+        formAction$jscomp$0 = null,
+        formEncType$jscomp$0 = null,
+        formMethod$jscomp$0 = null,
+        formTarget$jscomp$0 = null,
+        propKey$jscomp$4;
+      for (propKey$jscomp$4 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+          var propValue$jscomp$4 = props[propKey$jscomp$4];
+          if (null != propValue$jscomp$4)
+            switch (propKey$jscomp$4) {
+              case "children":
+                children$jscomp$3 = propValue$jscomp$4;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$2 = propValue$jscomp$4;
+                break;
+              case "name":
+                name$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formAction":
+                formAction$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formEncType":
+                formEncType$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formMethod":
+                formMethod$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formTarget":
+                formTarget$jscomp$0 = propValue$jscomp$4;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$4,
+                  propValue$jscomp$4
+                );
+            }
+        }
+      var formData$jscomp$0 = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction$jscomp$0,
+        formEncType$jscomp$0,
+        formMethod$jscomp$0,
+        formTarget$jscomp$0,
+        name$jscomp$0
+      );
+      target$jscomp$0.push(endOfStartTag);
+      null != formData$jscomp$0 &&
+        formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+      if ("string" === typeof children$jscomp$3) {
+        target$jscomp$0.push(
+          stringToChunk(escapeTextForBrowser(children$jscomp$3))
+        );
+        var JSCompiler_inline_result$jscomp$0 = null;
+      } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3;
+      return JSCompiler_inline_result$jscomp$0;
+    case "form":
+      target$jscomp$0.push(startChunkForTag("form"));
+      var children$jscomp$4 = null,
+        innerHTML$jscomp$3 = null,
+        formAction$jscomp$1 = null,
+        formEncType$jscomp$1 = null,
+        formMethod$jscomp$1 = null,
+        formTarget$jscomp$1 = null,
+        propKey$jscomp$5;
+      for (propKey$jscomp$5 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+          var propValue$jscomp$5 = props[propKey$jscomp$5];
+          if (null != propValue$jscomp$5)
+            switch (propKey$jscomp$5) {
+              case "children":
+                children$jscomp$4 = propValue$jscomp$5;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$3 = propValue$jscomp$5;
+                break;
+              case "action":
+                formAction$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "encType":
+                formEncType$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "method":
+                formMethod$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "target":
+                formTarget$jscomp$1 = propValue$jscomp$5;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$5,
+                  propValue$jscomp$5
+                );
+            }
+        }
+      var formData$jscomp$1 = null,
+        formActionName = null;
+      if ("function" === typeof formAction$jscomp$1) {
+        var customFields = getCustomFormFields(
+          resumableState,
+          formAction$jscomp$1
+        );
+        null !== customFields
+          ? ((formAction$jscomp$1 = customFields.action || ""),
+            (formEncType$jscomp$1 = customFields.encType),
+            (formMethod$jscomp$1 = customFields.method),
+            (formTarget$jscomp$1 = customFields.target),
+            (formData$jscomp$1 = customFields.data),
+            (formActionName = customFields.name))
+          : (target$jscomp$0.push(
+              attributeSeparator,
+              stringToChunk("action"),
+              attributeAssign,
+              actionJavaScriptURL,
+              attributeEnd
+            ),
+            (formTarget$jscomp$1 =
+              formMethod$jscomp$1 =
+              formEncType$jscomp$1 =
+              formAction$jscomp$1 =
+                null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != formAction$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+      null != formEncType$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+      null != formMethod$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+      null != formTarget$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+      target$jscomp$0.push(endOfStartTag);
+      null !== formActionName &&
+        (target$jscomp$0.push(startHiddenInputChunk),
+        pushStringAttribute(target$jscomp$0, "name", formActionName),
+        target$jscomp$0.push(endOfStartTagSelfClosing),
+        null != formData$jscomp$1 &&
+          formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0));
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+      if ("string" === typeof children$jscomp$4) {
+        target$jscomp$0.push(
+          stringToChunk(escapeTextForBrowser(children$jscomp$4))
+        );
+        var JSCompiler_inline_result$jscomp$1 = null;
+      } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4;
+      return JSCompiler_inline_result$jscomp$1;
+    case "menuitem":
+      target$jscomp$0.push(startChunkForTag("menuitem"));
+      for (var propKey$jscomp$6 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+          var propValue$jscomp$6 = props[propKey$jscomp$6];
+          if (null != propValue$jscomp$6)
+            switch (propKey$jscomp$6) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(400));
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$6,
+                  propValue$jscomp$6
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      return null;
+    case "object":
+      target$jscomp$0.push(startChunkForTag("object"));
+      var children$jscomp$5 = null,
+        innerHTML$jscomp$4 = null,
+        propKey$jscomp$7;
+      for (propKey$jscomp$7 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+          var propValue$jscomp$7 = props[propKey$jscomp$7];
+          if (null != propValue$jscomp$7)
+            switch (propKey$jscomp$7) {
+              case "children":
+                children$jscomp$5 = propValue$jscomp$7;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$4 = propValue$jscomp$7;
+                break;
+              case "data":
+                var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                if ("" === sanitizedValue) break;
+                target$jscomp$0.push(
+                  attributeSeparator,
+                  stringToChunk("data"),
+                  attributeAssign,
+                  stringToChunk(escapeTextForBrowser(sanitizedValue)),
+                  attributeEnd
+                );
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$7,
+                  propValue$jscomp$7
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+      if ("string" === typeof children$jscomp$5) {
+        target$jscomp$0.push(
+          stringToChunk(escapeTextForBrowser(children$jscomp$5))
+        );
+        var JSCompiler_inline_result$jscomp$2 = null;
+      } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5;
+      return JSCompiler_inline_result$jscomp$2;
+    case "title":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$3 = pushTitleImpl(
+          target$jscomp$0,
+          props
+        );
+      else
+        isFallback
+          ? (JSCompiler_inline_result$jscomp$3 = null)
+          : (pushTitleImpl(renderState.hoistableChunks, props),
+            (JSCompiler_inline_result$jscomp$3 = void 0));
+      return JSCompiler_inline_result$jscomp$3;
+    case "link":
+      var rel = props.rel,
+        href = props.href,
+        precedence = props.precedence;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof rel ||
+        "string" !== typeof href ||
+        "" === href
+      ) {
+        pushLinkImpl(target$jscomp$0, props);
+        var JSCompiler_inline_result$jscomp$4 = null;
+      } else if ("stylesheet" === props.rel)
+        if (
+          "string" !== typeof precedence ||
+          null != props.disabled ||
+          props.onLoad ||
+          props.onError
+        )
+          JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+            target$jscomp$0,
+            props
+          );
+        else {
+          var styleQueue = renderState.styles.get(precedence),
+            resourceState = resumableState.styleResources.hasOwnProperty(href)
+              ? resumableState.styleResources[href]
+              : void 0;
+          if (null !== resourceState) {
+            resumableState.styleResources[href] = null;
+            styleQueue ||
+              ((styleQueue = {
+                precedence: stringToChunk(escapeTextForBrowser(precedence)),
+                rules: [],
+                hrefs: [],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence, styleQueue));
+            var resource = {
+              state: 0,
+              props: assign({}, props, {
+                "data-precedence": props.precedence,
+                precedence: null
+              })
+            };
+            if (resourceState) {
+              2 === resourceState.length &&
+                adoptPreloadCredentials(resource.props, resourceState);
+              var preloadResource = renderState.preloads.stylesheets.get(href);
+              preloadResource && 0 < preloadResource.length
+                ? (preloadResource.length = 0)
+                : (resource.state = 1);
+            }
+            styleQueue.sheets.set(href, resource);
+            hoistableState && hoistableState.stylesheets.add(resource);
+          } else if (styleQueue) {
+            var resource$9 = styleQueue.sheets.get(href);
+            resource$9 &&
+              hoistableState &&
+              hoistableState.stylesheets.add(resource$9);
+          }
+          textEmbedded && target$jscomp$0.push(textSeparator);
+          JSCompiler_inline_result$jscomp$4 = null;
+        }
+      else
+        props.onLoad || props.onError
+          ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+              target$jscomp$0,
+              props
+            ))
+          : (textEmbedded && target$jscomp$0.push(textSeparator),
+            (JSCompiler_inline_result$jscomp$4 = isFallback
+              ? null
+              : pushLinkImpl(renderState.hoistableChunks, props)));
+      return JSCompiler_inline_result$jscomp$4;
+    case "script":
+      var asyncProp = props.async;
+      if (
+        "string" !== typeof props.src ||
+        !props.src ||
+        !asyncProp ||
+        "function" === typeof asyncProp ||
+        "symbol" === typeof asyncProp ||
+        props.onLoad ||
+        props.onError ||
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$5 = pushScriptImpl(
+          target$jscomp$0,
+          props
+        );
+      else {
+        var key = props.src;
+        if ("module" === props.type) {
+          var resources = resumableState.moduleScriptResources;
+          var preloads = renderState.preloads.moduleScripts;
+        } else
+          (resources = resumableState.scriptResources),
+            (preloads = renderState.preloads.scripts);
+        var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+          ? resources[key]
+          : void 0;
+        if (null !== resourceState$jscomp$0) {
+          resources[key] = null;
+          var scriptProps = props;
+          if (resourceState$jscomp$0) {
+            2 === resourceState$jscomp$0.length &&
+              ((scriptProps = assign({}, props)),
+              adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+            var preloadResource$jscomp$0 = preloads.get(key);
+            preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0);
+          }
+          var resource$jscomp$0 = [];
+          renderState.scripts.add(resource$jscomp$0);
+          pushScriptImpl(resource$jscomp$0, scriptProps);
+        }
+        textEmbedded && target$jscomp$0.push(textSeparator);
+        JSCompiler_inline_result$jscomp$5 = null;
+      }
+      return JSCompiler_inline_result$jscomp$5;
+    case "style":
+      var precedence$jscomp$0 = props.precedence,
+        href$jscomp$0 = props.href;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof precedence$jscomp$0 ||
+        "string" !== typeof href$jscomp$0 ||
+        "" === href$jscomp$0
+      ) {
+        target$jscomp$0.push(startChunkForTag("style"));
+        var children$jscomp$6 = null,
+          innerHTML$jscomp$5 = null,
+          propKey$jscomp$8;
+        for (propKey$jscomp$8 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+            var propValue$jscomp$8 = props[propKey$jscomp$8];
+            if (null != propValue$jscomp$8)
+              switch (propKey$jscomp$8) {
+                case "children":
+                  children$jscomp$6 = propValue$jscomp$8;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$5 = propValue$jscomp$8;
+                  break;
+                default:
+                  pushAttribute(
+                    target$jscomp$0,
+                    propKey$jscomp$8,
+                    propValue$jscomp$8
+                  );
+              }
+          }
+        target$jscomp$0.push(endOfStartTag);
+        var child = Array.isArray(children$jscomp$6)
+          ? 2 > children$jscomp$6.length
+            ? children$jscomp$6[0]
+            : null
+          : children$jscomp$6;
+        "function" !== typeof child &&
+          "symbol" !== typeof child &&
+          null !== child &&
+          void 0 !== child &&
+          target$jscomp$0.push(
+            stringToChunk(("" + child).replace(styleRegex, styleReplacer))
+          );
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6);
+        target$jscomp$0.push(endChunkForTag("style"));
+        var JSCompiler_inline_result$jscomp$6 = null;
+      } else {
+        var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0);
+        if (
+          null !==
+          (resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+            ? resumableState.styleResources[href$jscomp$0]
+            : void 0)
+        ) {
+          resumableState.styleResources[href$jscomp$0] = null;
+          styleQueue$jscomp$0
+            ? styleQueue$jscomp$0.hrefs.push(
+                stringToChunk(escapeTextForBrowser(href$jscomp$0))
+              )
+            : ((styleQueue$jscomp$0 = {
+                precedence: stringToChunk(
+                  escapeTextForBrowser(precedence$jscomp$0)
+                ),
+                rules: [],
+                hrefs: [stringToChunk(escapeTextForBrowser(href$jscomp$0))],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0));
+          var target = styleQueue$jscomp$0.rules,
+            children$jscomp$7 = null,
+            innerHTML$jscomp$6 = null,
+            propKey$jscomp$9;
+          for (propKey$jscomp$9 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+              var propValue$jscomp$9 = props[propKey$jscomp$9];
+              if (null != propValue$jscomp$9)
+                switch (propKey$jscomp$9) {
+                  case "children":
+                    children$jscomp$7 = propValue$jscomp$9;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$6 = propValue$jscomp$9;
+                }
+            }
+          var child$jscomp$0 = Array.isArray(children$jscomp$7)
+            ? 2 > children$jscomp$7.length
+              ? children$jscomp$7[0]
+              : null
+            : children$jscomp$7;
+          "function" !== typeof child$jscomp$0 &&
+            "symbol" !== typeof child$jscomp$0 &&
+            null !== child$jscomp$0 &&
+            void 0 !== child$jscomp$0 &&
+            target.push(
+              stringToChunk(
+                ("" + child$jscomp$0).replace(styleRegex, styleReplacer)
+              )
+            );
+          pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7);
+        }
+        styleQueue$jscomp$0 &&
+          hoistableState &&
+          hoistableState.styles.add(styleQueue$jscomp$0);
+        textEmbedded && target$jscomp$0.push(textSeparator);
+        JSCompiler_inline_result$jscomp$6 = void 0;
+      }
+      return JSCompiler_inline_result$jscomp$6;
+    case "meta":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$7 = pushSelfClosing(
+          target$jscomp$0,
+          props,
+          "meta"
+        );
+      else
+        textEmbedded && target$jscomp$0.push(textSeparator),
+          (JSCompiler_inline_result$jscomp$7 = isFallback
+            ? null
+            : "string" === typeof props.charSet
+              ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+              : "viewport" === props.name
+                ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                : pushSelfClosing(renderState.hoistableChunks, props, "meta"));
+      return JSCompiler_inline_result$jscomp$7;
+    case "listing":
+    case "pre":
+      target$jscomp$0.push(startChunkForTag(type));
+      var children$jscomp$8 = null,
+        innerHTML$jscomp$7 = null,
+        propKey$jscomp$10;
+      for (propKey$jscomp$10 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+          var propValue$jscomp$10 = props[propKey$jscomp$10];
+          if (null != propValue$jscomp$10)
+            switch (propKey$jscomp$10) {
+              case "children":
+                children$jscomp$8 = propValue$jscomp$10;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$7 = propValue$jscomp$10;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$10,
+                  propValue$jscomp$10
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      if (null != innerHTML$jscomp$7) {
+        if (null != children$jscomp$8) throw Error(formatProdErrorMessage(60));
+        if (
+          "object" !== typeof innerHTML$jscomp$7 ||
+          !("__html" in innerHTML$jscomp$7)
+        )
+          throw Error(formatProdErrorMessage(61));
+        var html = innerHTML$jscomp$7.__html;
+        null !== html &&
+          void 0 !== html &&
+          ("string" === typeof html && 0 < html.length && "\n" === html[0]
+            ? target$jscomp$0.push(leadingNewline, stringToChunk(html))
+            : target$jscomp$0.push(stringToChunk("" + html)));
+      }
+      "string" === typeof children$jscomp$8 &&
+        "\n" === children$jscomp$8[0] &&
+        target$jscomp$0.push(leadingNewline);
+      return children$jscomp$8;
+    case "img":
+      var src = props.src,
+        srcSet = props.srcSet;
+      if (
+        !(
+          "lazy" === props.loading ||
+          (!src && !srcSet) ||
+          ("string" !== typeof src && null != src) ||
+          ("string" !== typeof srcSet && null != srcSet)
+        ) &&
+        "low" !== props.fetchPriority &&
+        !1 === !!(formatContext.tagScope & 3) &&
+        ("string" !== typeof src ||
+          ":" !== src[4] ||
+          ("d" !== src[0] && "D" !== src[0]) ||
+          ("a" !== src[1] && "A" !== src[1]) ||
+          ("t" !== src[2] && "T" !== src[2]) ||
+          ("a" !== src[3] && "A" !== src[3])) &&
+        ("string" !== typeof srcSet ||
+          ":" !== srcSet[4] ||
+          ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+          ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+          ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+          ("a" !== srcSet[3] && "A" !== srcSet[3]))
+      ) {
+        var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+          key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+          promotablePreloads = renderState.preloads.images,
+          resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+        if (resource$jscomp$1) {
+          if (
+            "high" === props.fetchPriority ||
+            10 > renderState.highImagePreloads.size
+          )
+            promotablePreloads.delete(key$jscomp$0),
+              renderState.highImagePreloads.add(resource$jscomp$1);
+        } else if (
+          !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+        ) {
+          resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+          var input = props.crossOrigin;
+          var JSCompiler_inline_result$jscomp$8 =
+            "string" === typeof input
+              ? "use-credentials" === input
+                ? input
+                : ""
+              : void 0;
+          var headers = renderState.headers,
+            header;
+          headers &&
+          0 < headers.remainingCapacity &&
+          "string" !== typeof props.srcSet &&
+          ("high" === props.fetchPriority ||
+            500 > headers.highImagePreloads.length) &&
+          ((header = getPreloadAsHeader(src, "image", {
+            imageSrcSet: props.srcSet,
+            imageSizes: props.sizes,
+            crossOrigin: JSCompiler_inline_result$jscomp$8,
+            integrity: props.integrity,
+            nonce: props.nonce,
+            type: props.type,
+            fetchPriority: props.fetchPriority,
+            referrerPolicy: props.refererPolicy
+          })),
+          0 <= (headers.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+              headers.highImagePreloads && (headers.highImagePreloads += ", "),
+              (headers.highImagePreloads += header))
+            : ((resource$jscomp$1 = []),
+              pushLinkImpl(resource$jscomp$1, {
+                rel: "preload",
+                as: "image",
+                href: srcSet ? void 0 : src,
+                imageSrcSet: srcSet,
+                imageSizes: sizes,
+                crossOrigin: JSCompiler_inline_result$jscomp$8,
+                integrity: props.integrity,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.referrerPolicy
+              }),
+              "high" === props.fetchPriority ||
+              10 > renderState.highImagePreloads.size
+                ? renderState.highImagePreloads.add(resource$jscomp$1)
+                : (renderState.bulkPreloads.add(resource$jscomp$1),
+                  promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+        }
+      }
+      return pushSelfClosing(target$jscomp$0, props, "img");
+    case "base":
+    case "area":
+    case "br":
+    case "col":
+    case "embed":
+    case "hr":
+    case "keygen":
+    case "param":
+    case "source":
+    case "track":
+    case "wbr":
+      return pushSelfClosing(target$jscomp$0, props, type);
+    case "annotation-xml":
+    case "color-profile":
+    case "font-face":
+    case "font-face-src":
+    case "font-face-uri":
+    case "font-face-format":
+    case "font-face-name":
+    case "missing-glyph":
+      break;
+    case "head":
+      if (2 > formatContext.insertionMode) {
+        var preamble = preambleState || renderState.preamble;
+        if (preamble.headChunks)
+          throw Error(formatProdErrorMessage(545, "`<head>`"));
+        preamble.headChunks = [];
+        var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+          preamble.headChunks,
+          props,
+          "head"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "head"
+        );
+      return JSCompiler_inline_result$jscomp$9;
+    case "body":
+      if (2 > formatContext.insertionMode) {
+        var preamble$jscomp$0 = preambleState || renderState.preamble;
+        if (preamble$jscomp$0.bodyChunks)
+          throw Error(formatProdErrorMessage(545, "`<body>`"));
+        preamble$jscomp$0.bodyChunks = [];
+        var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+          preamble$jscomp$0.bodyChunks,
+          props,
+          "body"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "body"
+        );
+      return JSCompiler_inline_result$jscomp$10;
+    case "html":
+      if (0 === formatContext.insertionMode) {
+        var preamble$jscomp$1 = preambleState || renderState.preamble;
+        if (preamble$jscomp$1.htmlChunks)
+          throw Error(formatProdErrorMessage(545, "`<html>`"));
+        preamble$jscomp$1.htmlChunks = [doctypeChunk];
+        var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+          preamble$jscomp$1.htmlChunks,
+          props,
+          "html"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "html"
+        );
+      return JSCompiler_inline_result$jscomp$11;
+    default:
+      if (-1 !== type.indexOf("-")) {
+        target$jscomp$0.push(startChunkForTag(type));
+        var children$jscomp$9 = null,
+          innerHTML$jscomp$8 = null,
+          propKey$jscomp$11;
+        for (propKey$jscomp$11 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+            var propValue$jscomp$11 = props[propKey$jscomp$11];
+            if (null != propValue$jscomp$11) {
+              var attributeName = propKey$jscomp$11;
+              switch (propKey$jscomp$11) {
+                case "children":
+                  children$jscomp$9 = propValue$jscomp$11;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$8 = propValue$jscomp$11;
+                  break;
+                case "style":
+                  pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                  break;
+                case "suppressContentEditableWarning":
+                case "suppressHydrationWarning":
+                case "ref":
+                  break;
+                case "className":
+                  attributeName = "class";
+                default:
+                  if (
+                    isAttributeNameSafe(propKey$jscomp$11) &&
+                    "function" !== typeof propValue$jscomp$11 &&
+                    "symbol" !== typeof propValue$jscomp$11 &&
+                    !1 !== propValue$jscomp$11
+                  ) {
+                    if (!0 === propValue$jscomp$11) propValue$jscomp$11 = "";
+                    else if ("object" === typeof propValue$jscomp$11) continue;
+                    target$jscomp$0.push(
+                      attributeSeparator,
+                      stringToChunk(attributeName),
+                      attributeAssign,
+                      stringToChunk(escapeTextForBrowser(propValue$jscomp$11)),
+                      attributeEnd
+                    );
+                  }
+              }
+            }
+          }
+        target$jscomp$0.push(endOfStartTag);
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9);
+        return children$jscomp$9;
+      }
+  }
+  return pushStartGenericElement(target$jscomp$0, props, type);
+}
+var endTagCache = new Map();
+function endChunkForTag(tag) {
+  var chunk = endTagCache.get(tag);
+  void 0 === chunk &&
+    ((chunk = stringToPrecomputedChunk("</" + tag + ">")),
+    endTagCache.set(tag, chunk));
+  return chunk;
+}
+function hoistPreambleState(renderState, preambleState) {
+  renderState = renderState.preamble;
+  null === renderState.htmlChunks &&
+    preambleState.htmlChunks &&
+    ((renderState.htmlChunks = preambleState.htmlChunks),
+    (preambleState.contribution |= 1));
+  null === renderState.headChunks &&
+    preambleState.headChunks &&
+    ((renderState.headChunks = preambleState.headChunks),
+    (preambleState.contribution |= 4));
+  null === renderState.bodyChunks &&
+    preambleState.bodyChunks &&
+    ((renderState.bodyChunks = preambleState.bodyChunks),
+    (preambleState.contribution |= 2));
+}
+function writeBootstrap(destination, renderState) {
+  renderState = renderState.bootstrapChunks;
+  for (var i = 0; i < renderState.length - 1; i++)
+    writeChunk(destination, renderState[i]);
+  return i < renderState.length
+    ? ((i = renderState[i]),
+      (renderState.length = 0),
+      writeChunkAndReturn(destination, i))
+    : !0;
+}
+var placeholder1 = stringToPrecomputedChunk('<template id="'),
+  placeholder2 = stringToPrecomputedChunk('"></template>'),
+  startCompletedSuspenseBoundary = stringToPrecomputedChunk("\x3c!--$--\x3e"),
+  startPendingSuspenseBoundary1 = stringToPrecomputedChunk(
+    '\x3c!--$?--\x3e<template id="'
+  ),
+  startPendingSuspenseBoundary2 = stringToPrecomputedChunk('"></template>'),
+  startClientRenderedSuspenseBoundary =
+    stringToPrecomputedChunk("\x3c!--$!--\x3e"),
+  endSuspenseBoundary = stringToPrecomputedChunk("\x3c!--/$--\x3e"),
+  clientRenderedSuspenseBoundaryError1 = stringToPrecomputedChunk("<template"),
+  clientRenderedSuspenseBoundaryErrorAttrInterstitial =
+    stringToPrecomputedChunk('"'),
+  clientRenderedSuspenseBoundaryError1A =
+    stringToPrecomputedChunk(' data-dgst="');
+stringToPrecomputedChunk(' data-msg="');
+stringToPrecomputedChunk(' data-stck="');
+stringToPrecomputedChunk(' data-cstck="');
+var clientRenderedSuspenseBoundaryError2 =
+  stringToPrecomputedChunk("></template>");
+function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+  writeChunk(destination, startPendingSuspenseBoundary1);
+  if (null === id) throw Error(formatProdErrorMessage(395));
+  writeChunk(destination, renderState.boundaryPrefix);
+  writeChunk(destination, stringToChunk(id.toString(16)));
+  return writeChunkAndReturn(destination, startPendingSuspenseBoundary2);
+}
+var boundaryPreambleContributionChunkStart =
+    stringToPrecomputedChunk("\x3c!--"),
+  boundaryPreambleContributionChunkEnd = stringToPrecomputedChunk("--\x3e");
+function writePreambleContribution(destination, preambleState) {
+  preambleState = preambleState.contribution;
+  0 !== preambleState &&
+    (writeChunk(destination, boundaryPreambleContributionChunkStart),
+    writeChunk(destination, stringToChunk("" + preambleState)),
+    writeChunk(destination, boundaryPreambleContributionChunkEnd));
+}
+var startSegmentHTML = stringToPrecomputedChunk('<div hidden id="'),
+  startSegmentHTML2 = stringToPrecomputedChunk('">'),
+  endSegmentHTML = stringToPrecomputedChunk("</div>"),
+  startSegmentSVG = stringToPrecomputedChunk(
+    '<svg aria-hidden="true" style="display:none" id="'
+  ),
+  startSegmentSVG2 = stringToPrecomputedChunk('">'),
+  endSegmentSVG = stringToPrecomputedChunk("</svg>"),
+  startSegmentMathML = stringToPrecomputedChunk(
+    '<math aria-hidden="true" style="display:none" id="'
+  ),
+  startSegmentMathML2 = stringToPrecomputedChunk('">'),
+  endSegmentMathML = stringToPrecomputedChunk("</math>"),
+  startSegmentTable = stringToPrecomputedChunk('<table hidden id="'),
+  startSegmentTable2 = stringToPrecomputedChunk('">'),
+  endSegmentTable = stringToPrecomputedChunk("</table>"),
+  startSegmentTableBody = stringToPrecomputedChunk('<table hidden><tbody id="'),
+  startSegmentTableBody2 = stringToPrecomputedChunk('">'),
+  endSegmentTableBody = stringToPrecomputedChunk("</tbody></table>"),
+  startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id="'),
+  startSegmentTableRow2 = stringToPrecomputedChunk('">'),
+  endSegmentTableRow = stringToPrecomputedChunk("</tr></table>"),
+  startSegmentColGroup = stringToPrecomputedChunk(
+    '<table hidden><colgroup id="'
+  ),
+  startSegmentColGroup2 = stringToPrecomputedChunk('">'),
+  endSegmentColGroup = stringToPrecomputedChunk("</colgroup></table>");
+function writeStartSegment(destination, renderState, formatContext, id) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return (
+        writeChunk(destination, startSegmentHTML),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentHTML2)
+      );
+    case 4:
+      return (
+        writeChunk(destination, startSegmentSVG),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentSVG2)
+      );
+    case 5:
+      return (
+        writeChunk(destination, startSegmentMathML),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentMathML2)
+      );
+    case 6:
+      return (
+        writeChunk(destination, startSegmentTable),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentTable2)
+      );
+    case 7:
+      return (
+        writeChunk(destination, startSegmentTableBody),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentTableBody2)
+      );
+    case 8:
+      return (
+        writeChunk(destination, startSegmentTableRow),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentTableRow2)
+      );
+    case 9:
+      return (
+        writeChunk(destination, startSegmentColGroup),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentColGroup2)
+      );
+    default:
+      throw Error(formatProdErrorMessage(397));
+  }
+}
+function writeEndSegment(destination, formatContext) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return writeChunkAndReturn(destination, endSegmentHTML);
+    case 4:
+      return writeChunkAndReturn(destination, endSegmentSVG);
+    case 5:
+      return writeChunkAndReturn(destination, endSegmentMathML);
+    case 6:
+      return writeChunkAndReturn(destination, endSegmentTable);
+    case 7:
+      return writeChunkAndReturn(destination, endSegmentTableBody);
+    case 8:
+      return writeChunkAndReturn(destination, endSegmentTableRow);
+    case 9:
+      return writeChunkAndReturn(destination, endSegmentColGroup);
+    default:
+      throw Error(formatProdErrorMessage(397));
+  }
+}
+var completeSegmentScript1Full = stringToPrecomputedChunk(
+    '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("'
+  ),
+  completeSegmentScript1Partial = stringToPrecomputedChunk('$RS("'),
+  completeSegmentScript2 = stringToPrecomputedChunk('","'),
+  completeSegmentScriptEnd = stringToPrecomputedChunk('")\x3c/script>');
+stringToPrecomputedChunk('<template data-rsi="" data-sid="');
+stringToPrecomputedChunk('" data-pid="');
+var completeBoundaryScript1Full = stringToPrecomputedChunk(
+    '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("'
+  ),
+  completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC("'),
+  completeBoundaryWithStylesScript1FullBoth = stringToPrecomputedChunk(
+    '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+  ),
+  completeBoundaryWithStylesScript1FullPartial = stringToPrecomputedChunk(
+    '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+  ),
+  completeBoundaryWithStylesScript1Partial = stringToPrecomputedChunk('$RR("'),
+  completeBoundaryScript2 = stringToPrecomputedChunk('","'),
+  completeBoundaryScript3a = stringToPrecomputedChunk('",'),
+  completeBoundaryScript3b = stringToPrecomputedChunk('"'),
+  completeBoundaryScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+stringToPrecomputedChunk('<template data-rci="" data-bid="');
+stringToPrecomputedChunk('<template data-rri="" data-bid="');
+stringToPrecomputedChunk('" data-sid="');
+stringToPrecomputedChunk('" data-sty="');
+var clientRenderScript1Full = stringToPrecomputedChunk(
+    '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("'
+  ),
+  clientRenderScript1Partial = stringToPrecomputedChunk('$RX("'),
+  clientRenderScript1A = stringToPrecomputedChunk('"'),
+  clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(","),
+  clientRenderScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+stringToPrecomputedChunk('<template data-rxi="" data-bid="');
+stringToPrecomputedChunk('" data-dgst="');
+stringToPrecomputedChunk('" data-msg="');
+stringToPrecomputedChunk('" data-stck="');
+stringToPrecomputedChunk('" data-cstck="');
+var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g;
+function escapeJSStringsForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInInstructionScripts,
+    function (match) {
+      switch (match) {
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var regexForJSStringsInScripts = /[&><\u2028\u2029]/g;
+function escapeJSObjectForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInScripts,
+    function (match) {
+      switch (match) {
+        case "&":
+          return "\\u0026";
+        case ">":
+          return "\\u003e";
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var lateStyleTagResourceOpen1 = stringToPrecomputedChunk(
+    '<style media="not all" data-precedence="'
+  ),
+  lateStyleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+  lateStyleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+  lateStyleTagTemplateClose = stringToPrecomputedChunk("</style>"),
+  currentlyRenderingBoundaryHasStylesToHoist = !1,
+  destinationHasCapacity = !0;
+function flushStyleTagsLateForBoundary(styleQueue) {
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs,
+    i = 0;
+  if (hrefs.length) {
+    writeChunk(this, lateStyleTagResourceOpen1);
+    writeChunk(this, styleQueue.precedence);
+    for (writeChunk(this, lateStyleTagResourceOpen2); i < hrefs.length - 1; i++)
+      writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator);
+    writeChunk(this, hrefs[i]);
+    writeChunk(this, lateStyleTagResourceOpen3);
+    for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]);
+    destinationHasCapacity = writeChunkAndReturn(
+      this,
+      lateStyleTagTemplateClose
+    );
+    currentlyRenderingBoundaryHasStylesToHoist = !0;
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function hasStylesToHoist(stylesheet) {
+  return 2 !== stylesheet.state
+    ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+    : !1;
+}
+function writeHoistablesForBoundary(destination, hoistableState, renderState) {
+  currentlyRenderingBoundaryHasStylesToHoist = !1;
+  destinationHasCapacity = !0;
+  hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+  hoistableState.stylesheets.forEach(hasStylesToHoist);
+  currentlyRenderingBoundaryHasStylesToHoist &&
+    (renderState.stylesToHoist = !0);
+  return destinationHasCapacity;
+}
+function flushResource(resource) {
+  for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]);
+  resource.length = 0;
+}
+var stylesheetFlushingQueue = [];
+function flushStyleInPreamble(stylesheet) {
+  pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+  for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+    writeChunk(this, stylesheetFlushingQueue[i]);
+  stylesheetFlushingQueue.length = 0;
+  stylesheet.state = 2;
+}
+var styleTagResourceOpen1 = stringToPrecomputedChunk(
+    '<style data-precedence="'
+  ),
+  styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+  spaceSeparator = stringToPrecomputedChunk(" "),
+  styleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+  styleTagResourceClose = stringToPrecomputedChunk("</style>");
+function flushStylesInPreamble(styleQueue) {
+  var hasStylesheets = 0 < styleQueue.sheets.size;
+  styleQueue.sheets.forEach(flushStyleInPreamble, this);
+  styleQueue.sheets.clear();
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs;
+  if (!hasStylesheets || hrefs.length) {
+    writeChunk(this, styleTagResourceOpen1);
+    writeChunk(this, styleQueue.precedence);
+    styleQueue = 0;
+    if (hrefs.length) {
+      for (
+        writeChunk(this, styleTagResourceOpen2);
+        styleQueue < hrefs.length - 1;
+        styleQueue++
+      )
+        writeChunk(this, hrefs[styleQueue]), writeChunk(this, spaceSeparator);
+      writeChunk(this, hrefs[styleQueue]);
+    }
+    writeChunk(this, styleTagResourceOpen3);
+    for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+      writeChunk(this, rules[styleQueue]);
+    writeChunk(this, styleTagResourceClose);
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function preloadLateStyle(stylesheet) {
+  if (0 === stylesheet.state) {
+    stylesheet.state = 1;
+    var props = stylesheet.props;
+    pushLinkImpl(stylesheetFlushingQueue, {
+      rel: "preload",
+      as: "style",
+      href: stylesheet.props.href,
+      crossOrigin: props.crossOrigin,
+      fetchPriority: props.fetchPriority,
+      integrity: props.integrity,
+      media: props.media,
+      hrefLang: props.hrefLang,
+      referrerPolicy: props.referrerPolicy
+    });
+    for (
+      stylesheet = 0;
+      stylesheet < stylesheetFlushingQueue.length;
+      stylesheet++
+    )
+      writeChunk(this, stylesheetFlushingQueue[stylesheet]);
+    stylesheetFlushingQueue.length = 0;
+  }
+}
+function preloadLateStyles(styleQueue) {
+  styleQueue.sheets.forEach(preloadLateStyle, this);
+  styleQueue.sheets.clear();
+}
+var arrayFirstOpenBracket = stringToPrecomputedChunk("["),
+  arraySubsequentOpenBracket = stringToPrecomputedChunk(",["),
+  arrayInterstitial = stringToPrecomputedChunk(","),
+  arrayCloseBracket = stringToPrecomputedChunk("]");
+function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+  writeChunk(destination, arrayFirstOpenBracket);
+  var nextArrayOpenBrackChunk = arrayFirstOpenBracket;
+  hoistableState.stylesheets.forEach(function (resource) {
+    if (2 !== resource.state)
+      if (3 === resource.state)
+        writeChunk(destination, nextArrayOpenBrackChunk),
+          writeChunk(
+            destination,
+            stringToChunk(
+              escapeJSObjectForInstructionScripts("" + resource.props.href)
+            )
+          ),
+          writeChunk(destination, arrayCloseBracket),
+          (nextArrayOpenBrackChunk = arraySubsequentOpenBracket);
+      else {
+        writeChunk(destination, nextArrayOpenBrackChunk);
+        var precedence = resource.props["data-precedence"],
+          props = resource.props,
+          coercedHref = sanitizeURL("" + resource.props.href);
+        writeChunk(
+          destination,
+          stringToChunk(escapeJSObjectForInstructionScripts(coercedHref))
+        );
+        precedence = "" + precedence;
+        writeChunk(destination, arrayInterstitial);
+        writeChunk(
+          destination,
+          stringToChunk(escapeJSObjectForInstructionScripts(precedence))
+        );
+        for (var propKey in props)
+          if (
+            hasOwnProperty.call(props, propKey) &&
+            ((precedence = props[propKey]), null != precedence)
+          )
+            switch (propKey) {
+              case "href":
+              case "rel":
+              case "precedence":
+              case "data-precedence":
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(formatProdErrorMessage(399, "link"));
+              default:
+                writeStyleResourceAttributeInJS(
+                  destination,
+                  propKey,
+                  precedence
+                );
+            }
+        writeChunk(destination, arrayCloseBracket);
+        nextArrayOpenBrackChunk = arraySubsequentOpenBracket;
+        resource.state = 3;
+      }
+  });
+  writeChunk(destination, arrayCloseBracket);
+}
+function writeStyleResourceAttributeInJS(destination, name, value) {
+  var attributeName = name.toLowerCase();
+  switch (typeof value) {
+    case "function":
+    case "symbol":
+      return;
+  }
+  switch (name) {
+    case "innerHTML":
+    case "dangerouslySetInnerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "style":
+    case "ref":
+      return;
+    case "className":
+      attributeName = "class";
+      name = "" + value;
+      break;
+    case "hidden":
+      if (!1 === value) return;
+      name = "";
+      break;
+    case "src":
+    case "href":
+      value = sanitizeURL(value);
+      name = "" + value;
+      break;
+    default:
+      if (
+        (2 < name.length &&
+          ("o" === name[0] || "O" === name[0]) &&
+          ("n" === name[1] || "N" === name[1])) ||
+        !isAttributeNameSafe(name)
+      )
+        return;
+      name = "" + value;
+  }
+  writeChunk(destination, arrayInterstitial);
+  writeChunk(
+    destination,
+    stringToChunk(escapeJSObjectForInstructionScripts(attributeName))
+  );
+  writeChunk(destination, arrayInterstitial);
+  writeChunk(
+    destination,
+    stringToChunk(escapeJSObjectForInstructionScripts(name))
+  );
+}
+function createHoistableState() {
+  return { styles: new Set(), stylesheets: new Set() };
+}
+function prefetchDNS(href) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      if (!resumableState.dnsResources.hasOwnProperty(href)) {
+        resumableState.dnsResources[href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        )
+          JSCompiler_temp =
+            ((header =
+              "<" +
+              ("" + href).replace(
+                regexForHrefInLinkHeaderURLContext,
+                escapeHrefForLinkHeaderURLContextReplacer
+              ) +
+              ">; rel=dns-prefetch"),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        JSCompiler_temp
+          ? ((renderState.resets.dns[href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((header = []),
+            pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+            renderState.preconnects.add(header));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.D(href);
+}
+function preconnect(href, crossOrigin) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      var bucket =
+        "use-credentials" === crossOrigin
+          ? "credentials"
+          : "string" === typeof crossOrigin
+            ? "anonymous"
+            : "default";
+      if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+        resumableState.connectResources[bucket][href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        ) {
+          JSCompiler_temp =
+            "<" +
+            ("" + href).replace(
+              regexForHrefInLinkHeaderURLContext,
+              escapeHrefForLinkHeaderURLContextReplacer
+            ) +
+            ">; rel=preconnect";
+          if ("string" === typeof crossOrigin) {
+            var escapedCrossOrigin = ("" + crossOrigin).replace(
+              regexForLinkHeaderQuotedParamValueContext,
+              escapeStringForLinkHeaderQuotedParamValueContextReplacer
+            );
+            JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"';
+          }
+          JSCompiler_temp =
+            ((header = JSCompiler_temp),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        }
+        JSCompiler_temp
+          ? ((renderState.resets.connect[bucket][href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((bucket = []),
+            pushLinkImpl(bucket, {
+              rel: "preconnect",
+              href: href,
+              crossOrigin: crossOrigin
+            }),
+            renderState.preconnects.add(bucket));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.C(href, crossOrigin);
+}
+function preload(href, as, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (as && href) {
+      switch (as) {
+        case "image":
+          if (options) {
+            var imageSrcSet = options.imageSrcSet;
+            var imageSizes = options.imageSizes;
+            var fetchPriority = options.fetchPriority;
+          }
+          var key = imageSrcSet
+            ? imageSrcSet + "\n" + (imageSizes || "")
+            : href;
+          if (resumableState.imageResources.hasOwnProperty(key)) return;
+          resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+          resumableState = renderState.headers;
+          var header;
+          resumableState &&
+          0 < resumableState.remainingCapacity &&
+          "string" !== typeof imageSrcSet &&
+          "high" === fetchPriority &&
+          ((header = getPreloadAsHeader(href, as, options)),
+          0 <= (resumableState.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+              resumableState.highImagePreloads &&
+                (resumableState.highImagePreloads += ", "),
+              (resumableState.highImagePreloads += header))
+            : ((resumableState = []),
+              pushLinkImpl(
+                resumableState,
+                assign(
+                  { rel: "preload", href: imageSrcSet ? void 0 : href, as: as },
+                  options
+                )
+              ),
+              "high" === fetchPriority
+                ? renderState.highImagePreloads.add(resumableState)
+                : (renderState.bulkPreloads.add(resumableState),
+                  renderState.preloads.images.set(key, resumableState)));
+          break;
+        case "style":
+          if (resumableState.styleResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.styleResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.stylesheets.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          break;
+        case "script":
+          if (resumableState.scriptResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          renderState.preloads.scripts.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.scriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          break;
+        default:
+          if (resumableState.unknownResources.hasOwnProperty(as)) {
+            if (
+              ((imageSrcSet = resumableState.unknownResources[as]),
+              imageSrcSet.hasOwnProperty(href))
+            )
+              return;
+          } else
+            (imageSrcSet = {}),
+              (resumableState.unknownResources[as] = imageSrcSet);
+          imageSrcSet[href] = PRELOAD_NO_CREDS;
+          if (
+            (resumableState = renderState.headers) &&
+            0 < resumableState.remainingCapacity &&
+            "font" === as &&
+            ((key = getPreloadAsHeader(href, as, options)),
+            0 <= (resumableState.remainingCapacity -= key.length + 2))
+          )
+            (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+              resumableState.fontPreloads &&
+                (resumableState.fontPreloads += ", "),
+              (resumableState.fontPreloads += key);
+          else
+            switch (
+              ((resumableState = []),
+              (href = assign({ rel: "preload", href: href, as: as }, options)),
+              pushLinkImpl(resumableState, href),
+              as)
+            ) {
+              case "font":
+                renderState.fontPreloads.add(resumableState);
+                break;
+              default:
+                renderState.bulkPreloads.add(resumableState);
+            }
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.L(href, as, options);
+}
+function preloadModule(href, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      var as =
+        options && "string" === typeof options.as ? options.as : "script";
+      switch (as) {
+        case "script":
+          if (resumableState.moduleScriptResources.hasOwnProperty(href)) return;
+          as = [];
+          resumableState.moduleScriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.moduleScripts.set(href, as);
+          break;
+        default:
+          if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+            var resources = resumableState.unknownResources[as];
+            if (resources.hasOwnProperty(href)) return;
+          } else
+            (resources = {}),
+              (resumableState.moduleUnknownResources[as] = resources);
+          as = [];
+          resources[href] = PRELOAD_NO_CREDS;
+      }
+      pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options));
+      renderState.bulkPreloads.add(as);
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.m(href, options);
+}
+function preinitStyle(href, precedence, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      precedence = precedence || "default";
+      var styleQueue = renderState.styles.get(precedence),
+        resourceState = resumableState.styleResources.hasOwnProperty(href)
+          ? resumableState.styleResources[href]
+          : void 0;
+      null !== resourceState &&
+        ((resumableState.styleResources[href] = null),
+        styleQueue ||
+          ((styleQueue = {
+            precedence: stringToChunk(escapeTextForBrowser(precedence)),
+            rules: [],
+            hrefs: [],
+            sheets: new Map()
+          }),
+          renderState.styles.set(precedence, styleQueue)),
+        (precedence = {
+          state: 0,
+          props: assign(
+            { rel: "stylesheet", href: href, "data-precedence": precedence },
+            options
+          )
+        }),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(precedence.props, resourceState),
+          (renderState = renderState.preloads.stylesheets.get(href)) &&
+          0 < renderState.length
+            ? (renderState.length = 0)
+            : (precedence.state = 1)),
+        styleQueue.sheets.set(href, precedence),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.S(href, precedence, options);
+}
+function preinitScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.scriptResources.hasOwnProperty(src)
+        ? resumableState.scriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.scriptResources[src] = null),
+        (options = assign({ src: src, async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.scripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.X(src, options);
+}
+function preinitModuleScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.moduleScriptResources.hasOwnProperty(
+        src
+      )
+        ? resumableState.moduleScriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.moduleScriptResources[src] = null),
+        (options = assign({ src: src, type: "module", async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.moduleScripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.M(src, options);
+}
+function adoptPreloadCredentials(target, preloadState) {
+  null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+  null == target.integrity && (target.integrity = preloadState[1]);
+}
+function getPreloadAsHeader(href, as, params) {
+  href = ("" + href).replace(
+    regexForHrefInLinkHeaderURLContext,
+    escapeHrefForLinkHeaderURLContextReplacer
+  );
+  as = ("" + as).replace(
+    regexForLinkHeaderQuotedParamValueContext,
+    escapeStringForLinkHeaderQuotedParamValueContextReplacer
+  );
+  as = "<" + href + '>; rel=preload; as="' + as + '"';
+  for (var paramName in params)
+    hasOwnProperty.call(params, paramName) &&
+      ((href = params[paramName]),
+      "string" === typeof href &&
+        (as +=
+          "; " +
+          paramName.toLowerCase() +
+          '="' +
+          ("" + href).replace(
+            regexForLinkHeaderQuotedParamValueContext,
+            escapeStringForLinkHeaderQuotedParamValueContextReplacer
+          ) +
+          '"'));
+  return as;
+}
+var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g;
+function escapeHrefForLinkHeaderURLContextReplacer(match) {
+  switch (match) {
+    case "<":
+      return "%3C";
+    case ">":
+      return "%3E";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g;
+function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+  switch (match) {
+    case '"':
+      return "%22";
+    case "'":
+      return "%27";
+    case ";":
+      return "%3B";
+    case ",":
+      return "%2C";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+function hoistStyleQueueDependency(styleQueue) {
+  this.styles.add(styleQueue);
+}
+function hoistStylesheetDependency(stylesheet) {
+  this.stylesheets.add(stylesheet);
+}
+var bind = Function.prototype.bind,
+  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function getComponentNameFromType(type) {
+  if (null == type) return null;
+  if ("function" === typeof type)
+    return type.$$typeof === REACT_CLIENT_REFERENCE
+      ? null
+      : type.displayName || type.name || null;
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_FRAGMENT_TYPE:
+      return "Fragment";
+    case REACT_PROFILER_TYPE:
+      return "Profiler";
+    case REACT_STRICT_MODE_TYPE:
+      return "StrictMode";
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+    case REACT_ACTIVITY_TYPE:
+      return "Activity";
+  }
+  if ("object" === typeof type)
+    switch (type.$$typeof) {
+      case REACT_PORTAL_TYPE:
+        return "Portal";
+      case REACT_CONTEXT_TYPE:
+        return (type.displayName || "Context") + ".Provider";
+      case REACT_CONSUMER_TYPE:
+        return (type._context.displayName || "Context") + ".Consumer";
+      case REACT_FORWARD_REF_TYPE:
+        var innerType = type.render;
+        type = type.displayName;
+        type ||
+          ((type = innerType.displayName || innerType.name || ""),
+          (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+        return type;
+      case REACT_MEMO_TYPE:
+        return (
+          (innerType = type.displayName || null),
+          null !== innerType
+            ? innerType
+            : getComponentNameFromType(type.type) || "Memo"
+        );
+      case REACT_LAZY_TYPE:
+        innerType = type._payload;
+        type = type._init;
+        try {
+          return getComponentNameFromType(type(innerType));
+        } catch (x) {}
+    }
+  return null;
+}
+var emptyContextObject = {},
+  currentActiveSnapshot = null;
+function popToNearestCommonAncestor(prev, next) {
+  if (prev !== next) {
+    prev.context._currentValue = prev.parentValue;
+    prev = prev.parent;
+    var parentNext = next.parent;
+    if (null === prev) {
+      if (null !== parentNext) throw Error(formatProdErrorMessage(401));
+    } else {
+      if (null === parentNext) throw Error(formatProdErrorMessage(401));
+      popToNearestCommonAncestor(prev, parentNext);
+    }
+    next.context._currentValue = next.value;
+  }
+}
+function popAllPrevious(prev) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  null !== prev && popAllPrevious(prev);
+}
+function pushAllNext(next) {
+  var parentNext = next.parent;
+  null !== parentNext && pushAllNext(parentNext);
+  next.context._currentValue = next.value;
+}
+function popPreviousToCommonLevel(prev, next) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  if (null === prev) throw Error(formatProdErrorMessage(402));
+  prev.depth === next.depth
+    ? popToNearestCommonAncestor(prev, next)
+    : popPreviousToCommonLevel(prev, next);
+}
+function popNextToCommonLevel(prev, next) {
+  var parentNext = next.parent;
+  if (null === parentNext) throw Error(formatProdErrorMessage(402));
+  prev.depth === parentNext.depth
+    ? popToNearestCommonAncestor(prev, parentNext)
+    : popNextToCommonLevel(prev, parentNext);
+  next.context._currentValue = next.value;
+}
+function switchContext(newSnapshot) {
+  var prev = currentActiveSnapshot;
+  prev !== newSnapshot &&
+    (null === prev
+      ? pushAllNext(newSnapshot)
+      : null === newSnapshot
+        ? popAllPrevious(prev)
+        : prev.depth === newSnapshot.depth
+          ? popToNearestCommonAncestor(prev, newSnapshot)
+          : prev.depth > newSnapshot.depth
+            ? popPreviousToCommonLevel(prev, newSnapshot)
+            : popNextToCommonLevel(prev, newSnapshot),
+    (currentActiveSnapshot = newSnapshot));
+}
+var classComponentUpdater = {
+    enqueueSetState: function (inst, payload) {
+      inst = inst._reactInternals;
+      null !== inst.queue && inst.queue.push(payload);
+    },
+    enqueueReplaceState: function (inst, payload) {
+      inst = inst._reactInternals;
+      inst.replace = !0;
+      inst.queue = [payload];
+    },
+    enqueueForceUpdate: function () {}
+  },
+  emptyTreeContext = { id: 1, overflow: "" };
+function pushTreeContext(baseContext, totalChildren, index) {
+  var baseIdWithLeadingBit = baseContext.id;
+  baseContext = baseContext.overflow;
+  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+  baseIdWithLeadingBit &= ~(1 << baseLength);
+  index += 1;
+  var length = 32 - clz32(totalChildren) + baseLength;
+  if (30 < length) {
+    var numberOfOverflowBits = baseLength - (baseLength % 5);
+    length = (
+      baseIdWithLeadingBit &
+      ((1 << numberOfOverflowBits) - 1)
+    ).toString(32);
+    baseIdWithLeadingBit >>= numberOfOverflowBits;
+    baseLength -= numberOfOverflowBits;
+    return {
+      id:
+        (1 << (32 - clz32(totalChildren) + baseLength)) |
+        (index << baseLength) |
+        baseIdWithLeadingBit,
+      overflow: length + baseContext
+    };
+  }
+  return {
+    id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+    overflow: baseContext
+  };
+}
+var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+  log = Math.log,
+  LN2 = Math.LN2;
+function clz32Fallback(x) {
+  x >>>= 0;
+  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+}
+var SuspenseException = Error(formatProdErrorMessage(460));
+function noop$2() {}
+function trackUsedThenable(thenableState, thenable, index) {
+  index = thenableState[index];
+  void 0 === index
+    ? thenableState.push(thenable)
+    : index !== thenable && (thenable.then(noop$2, noop$2), (thenable = index));
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw thenable.reason;
+    default:
+      "string" === typeof thenable.status
+        ? thenable.then(noop$2, noop$2)
+        : ((thenableState = thenable),
+          (thenableState.status = "pending"),
+          thenableState.then(
+            function (fulfilledValue) {
+              if ("pending" === thenable.status) {
+                var fulfilledThenable = thenable;
+                fulfilledThenable.status = "fulfilled";
+                fulfilledThenable.value = fulfilledValue;
+              }
+            },
+            function (error) {
+              if ("pending" === thenable.status) {
+                var rejectedThenable = thenable;
+                rejectedThenable.status = "rejected";
+                rejectedThenable.reason = error;
+              }
+            }
+          ));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+      }
+      suspendedThenable = thenable;
+      throw SuspenseException;
+  }
+}
+var suspendedThenable = null;
+function getSuspendedThenable() {
+  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));
+  var thenable = suspendedThenable;
+  suspendedThenable = null;
+  return thenable;
+}
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  currentlyRenderingComponent = null,
+  currentlyRenderingTask = null,
+  currentlyRenderingRequest = null,
+  currentlyRenderingKeyPath = null,
+  firstWorkInProgressHook = null,
+  workInProgressHook = null,
+  isReRender = !1,
+  didScheduleRenderPhaseUpdate = !1,
+  localIdCounter = 0,
+  actionStateCounter = 0,
+  actionStateMatchingIndex = -1,
+  thenableIndexCounter = 0,
+  thenableState = null,
+  renderPhaseUpdates = null,
+  numberOfReRenders = 0;
+function resolveCurrentlyRenderingComponent() {
+  if (null === currentlyRenderingComponent)
+    throw Error(formatProdErrorMessage(321));
+  return currentlyRenderingComponent;
+}
+function createHook() {
+  if (0 < numberOfReRenders) throw Error(formatProdErrorMessage(312));
+  return { memoizedState: null, queue: null, next: null };
+}
+function createWorkInProgressHook() {
+  null === workInProgressHook
+    ? null === firstWorkInProgressHook
+      ? ((isReRender = !1),
+        (firstWorkInProgressHook = workInProgressHook = createHook()))
+      : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+    : null === workInProgressHook.next
+      ? ((isReRender = !1),
+        (workInProgressHook = workInProgressHook.next = createHook()))
+      : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+  return workInProgressHook;
+}
+function getThenableStateAfterSuspending() {
+  var state = thenableState;
+  thenableState = null;
+  return state;
+}
+function resetHooksState() {
+  currentlyRenderingKeyPath =
+    currentlyRenderingRequest =
+    currentlyRenderingTask =
+    currentlyRenderingComponent =
+      null;
+  didScheduleRenderPhaseUpdate = !1;
+  firstWorkInProgressHook = null;
+  numberOfReRenders = 0;
+  workInProgressHook = renderPhaseUpdates = null;
+}
+function basicStateReducer(state, action) {
+  return "function" === typeof action ? action(state) : action;
+}
+function useReducer(reducer, initialArg, init) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  if (isReRender) {
+    var queue = workInProgressHook.queue;
+    initialArg = queue.dispatch;
+    if (
+      null !== renderPhaseUpdates &&
+      ((init = renderPhaseUpdates.get(queue)), void 0 !== init)
+    ) {
+      renderPhaseUpdates.delete(queue);
+      queue = workInProgressHook.memoizedState;
+      do (queue = reducer(queue, init.action)), (init = init.next);
+      while (null !== init);
+      workInProgressHook.memoizedState = queue;
+      return [queue, initialArg];
+    }
+    return [workInProgressHook.memoizedState, initialArg];
+  }
+  reducer =
+    reducer === basicStateReducer
+      ? "function" === typeof initialArg
+        ? initialArg()
+        : initialArg
+      : void 0 !== init
+        ? init(initialArg)
+        : initialArg;
+  workInProgressHook.memoizedState = reducer;
+  reducer = workInProgressHook.queue = { last: null, dispatch: null };
+  reducer = reducer.dispatch = dispatchAction.bind(
+    null,
+    currentlyRenderingComponent,
+    reducer
+  );
+  return [workInProgressHook.memoizedState, reducer];
+}
+function useMemo(nextCreate, deps) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  if (null !== workInProgressHook) {
+    var prevState = workInProgressHook.memoizedState;
+    if (null !== prevState && null !== deps) {
+      var prevDeps = prevState[1];
+      a: if (null === prevDeps) prevDeps = !1;
+      else {
+        for (var i = 0; i < prevDeps.length && i < deps.length; i++)
+          if (!objectIs(deps[i], prevDeps[i])) {
+            prevDeps = !1;
+            break a;
+          }
+        prevDeps = !0;
+      }
+      if (prevDeps) return prevState[0];
+    }
+  }
+  nextCreate = nextCreate();
+  workInProgressHook.memoizedState = [nextCreate, deps];
+  return nextCreate;
+}
+function dispatchAction(componentIdentity, queue, action) {
+  if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));
+  if (componentIdentity === currentlyRenderingComponent)
+    if (
+      ((didScheduleRenderPhaseUpdate = !0),
+      (componentIdentity = { action: action, next: null }),
+      null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+      (action = renderPhaseUpdates.get(queue)),
+      void 0 === action)
+    )
+      renderPhaseUpdates.set(queue, componentIdentity);
+    else {
+      for (queue = action; null !== queue.next; ) queue = queue.next;
+      queue.next = componentIdentity;
+    }
+}
+function unsupportedStartTransition() {
+  throw Error(formatProdErrorMessage(394));
+}
+function unsupportedSetOptimisticState() {
+  throw Error(formatProdErrorMessage(479));
+}
+function useActionState(action, initialState, permalink) {
+  resolveCurrentlyRenderingComponent();
+  var actionStateHookIndex = actionStateCounter++,
+    request = currentlyRenderingRequest;
+  if ("function" === typeof action.$$FORM_ACTION) {
+    var nextPostbackStateKey = null,
+      componentKeyPath = currentlyRenderingKeyPath;
+    request = request.formState;
+    var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+    if (null !== request && "function" === typeof isSignatureEqual) {
+      var postbackKey = request[1];
+      isSignatureEqual.call(action, request[2], request[3]) &&
+        ((nextPostbackStateKey =
+          void 0 !== permalink
+            ? "p" + permalink
+            : "k" +
+              murmurhash3_32_gc(
+                JSON.stringify([componentKeyPath, null, actionStateHookIndex]),
+                0
+              )),
+        postbackKey === nextPostbackStateKey &&
+          ((actionStateMatchingIndex = actionStateHookIndex),
+          (initialState = request[0])));
+    }
+    var boundAction = action.bind(null, initialState);
+    action = function (payload) {
+      boundAction(payload);
+    };
+    "function" === typeof boundAction.$$FORM_ACTION &&
+      (action.$$FORM_ACTION = function (prefix) {
+        prefix = boundAction.$$FORM_ACTION(prefix);
+        void 0 !== permalink &&
+          ((permalink += ""), (prefix.action = permalink));
+        var formData = prefix.data;
+        formData &&
+          (null === nextPostbackStateKey &&
+            (nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  murmurhash3_32_gc(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ]),
+                    0
+                  )),
+          formData.append("$ACTION_KEY", nextPostbackStateKey));
+        return prefix;
+      });
+    return [initialState, action, !1];
+  }
+  var boundAction$22 = action.bind(null, initialState);
+  return [
+    initialState,
+    function (payload) {
+      boundAction$22(payload);
+    },
+    !1
+  ];
+}
+function unwrapThenable(thenable) {
+  var index = thenableIndexCounter;
+  thenableIndexCounter += 1;
+  null === thenableState && (thenableState = []);
+  return trackUsedThenable(thenableState, thenable, index);
+}
+function unsupportedRefresh() {
+  throw Error(formatProdErrorMessage(393));
+}
+function noop$1() {}
+var HooksDispatcher = {
+    readContext: function (context) {
+      return context._currentValue;
+    },
+    use: function (usable) {
+      if (null !== usable && "object" === typeof usable) {
+        if ("function" === typeof usable.then) return unwrapThenable(usable);
+        if (usable.$$typeof === REACT_CONTEXT_TYPE) return usable._currentValue;
+      }
+      throw Error(formatProdErrorMessage(438, String(usable)));
+    },
+    useContext: function (context) {
+      resolveCurrentlyRenderingComponent();
+      return context._currentValue;
+    },
+    useMemo: useMemo,
+    useReducer: useReducer,
+    useRef: function (initialValue) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      var previousRef = workInProgressHook.memoizedState;
+      return null === previousRef
+        ? ((initialValue = { current: initialValue }),
+          (workInProgressHook.memoizedState = initialValue))
+        : previousRef;
+    },
+    useState: function (initialState) {
+      return useReducer(basicStateReducer, initialState);
+    },
+    useInsertionEffect: noop$1,
+    useLayoutEffect: noop$1,
+    useCallback: function (callback, deps) {
+      return useMemo(function () {
+        return callback;
+      }, deps);
+    },
+    useImperativeHandle: noop$1,
+    useEffect: noop$1,
+    useDebugValue: noop$1,
+    useDeferredValue: function (value, initialValue) {
+      resolveCurrentlyRenderingComponent();
+      return void 0 !== initialValue ? initialValue : value;
+    },
+    useTransition: function () {
+      resolveCurrentlyRenderingComponent();
+      return [!1, unsupportedStartTransition];
+    },
+    useId: function () {
+      var JSCompiler_inline_result = currentlyRenderingTask.treeContext;
+      var overflow = JSCompiler_inline_result.overflow;
+      JSCompiler_inline_result = JSCompiler_inline_result.id;
+      JSCompiler_inline_result =
+        (
+          JSCompiler_inline_result &
+          ~(1 << (32 - clz32(JSCompiler_inline_result) - 1))
+        ).toString(32) + overflow;
+      var resumableState = currentResumableState;
+      if (null === resumableState) throw Error(formatProdErrorMessage(404));
+      overflow = localIdCounter++;
+      JSCompiler_inline_result =
+        "\u00ab" + resumableState.idPrefix + "R" + JSCompiler_inline_result;
+      0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32));
+      return JSCompiler_inline_result + "\u00bb";
+    },
+    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
+      if (void 0 === getServerSnapshot)
+        throw Error(formatProdErrorMessage(407));
+      return getServerSnapshot();
+    },
+    useOptimistic: function (passthrough) {
+      resolveCurrentlyRenderingComponent();
+      return [passthrough, unsupportedSetOptimisticState];
+    },
+    useActionState: useActionState,
+    useFormState: useActionState,
+    useHostTransitionStatus: function () {
+      resolveCurrentlyRenderingComponent();
+      return sharedNotPendingObject;
+    },
+    useMemoCache: function (size) {
+      for (var data = Array(size), i = 0; i < size; i++)
+        data[i] = REACT_MEMO_CACHE_SENTINEL;
+      return data;
+    },
+    useCacheRefresh: function () {
+      return unsupportedRefresh;
+    }
+  },
+  currentResumableState = null,
+  DefaultAsyncDispatcher = {
+    getCacheForType: function () {
+      throw Error(formatProdErrorMessage(248));
+    }
+  },
+  prefix,
+  suffix;
+function describeBuiltInComponentFrame(name) {
+  if (void 0 === prefix)
+    try {
+      throw Error();
+    } catch (x) {
+      var match = x.stack.trim().match(/\n( *(at )?)/);
+      prefix = (match && match[1]) || "";
+      suffix =
+        -1 < x.stack.indexOf("\n    at")
+          ? " (<anonymous>)"
+          : -1 < x.stack.indexOf("@")
+            ? "@unknown:0:0"
+            : "";
+    }
+  return "\n" + prefix + name + suffix;
+}
+var reentry = !1;
+function describeNativeComponentFrame(fn, construct) {
+  if (!fn || reentry) return "";
+  reentry = !0;
+  var previousPrepareStackTrace = Error.prepareStackTrace;
+  Error.prepareStackTrace = void 0;
+  try {
+    var RunInRootFrame = {
+      DetermineComponentFrameRoot: function () {
+        try {
+          if (construct) {
+            var Fake = function () {
+              throw Error();
+            };
+            Object.defineProperty(Fake.prototype, "props", {
+              set: function () {
+                throw Error();
+              }
+            });
+            if ("object" === typeof Reflect && Reflect.construct) {
+              try {
+                Reflect.construct(Fake, []);
+              } catch (x) {
+                var control = x;
+              }
+              Reflect.construct(fn, [], Fake);
+            } else {
+              try {
+                Fake.call();
+              } catch (x$24) {
+                control = x$24;
+              }
+              fn.call(Fake.prototype);
+            }
+          } else {
+            try {
+              throw Error();
+            } catch (x$25) {
+              control = x$25;
+            }
+            (Fake = fn()) &&
+              "function" === typeof Fake.catch &&
+              Fake.catch(function () {});
+          }
+        } catch (sample) {
+          if (sample && control && "string" === typeof sample.stack)
+            return [sample.stack, control.stack];
+        }
+        return [null, null];
+      }
+    };
+    RunInRootFrame.DetermineComponentFrameRoot.displayName =
+      "DetermineComponentFrameRoot";
+    var namePropDescriptor = Object.getOwnPropertyDescriptor(
+      RunInRootFrame.DetermineComponentFrameRoot,
+      "name"
+    );
+    namePropDescriptor &&
+      namePropDescriptor.configurable &&
+      Object.defineProperty(
+        RunInRootFrame.DetermineComponentFrameRoot,
+        "name",
+        { value: "DetermineComponentFrameRoot" }
+      );
+    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
+      sampleStack = _RunInRootFrame$Deter[0],
+      controlStack = _RunInRootFrame$Deter[1];
+    if (sampleStack && controlStack) {
+      var sampleLines = sampleStack.split("\n"),
+        controlLines = controlStack.split("\n");
+      for (
+        namePropDescriptor = RunInRootFrame = 0;
+        RunInRootFrame < sampleLines.length &&
+        !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot");
+
+      )
+        RunInRootFrame++;
+      for (
+        ;
+        namePropDescriptor < controlLines.length &&
+        !controlLines[namePropDescriptor].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        namePropDescriptor++;
+      if (
+        RunInRootFrame === sampleLines.length ||
+        namePropDescriptor === controlLines.length
+      )
+        for (
+          RunInRootFrame = sampleLines.length - 1,
+            namePropDescriptor = controlLines.length - 1;
+          1 <= RunInRootFrame &&
+          0 <= namePropDescriptor &&
+          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];
+
+        )
+          namePropDescriptor--;
+      for (
+        ;
+        1 <= RunInRootFrame && 0 <= namePropDescriptor;
+        RunInRootFrame--, namePropDescriptor--
+      )
+        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {
+          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {
+            do
+              if (
+                (RunInRootFrame--,
+                namePropDescriptor--,
+                0 > namePropDescriptor ||
+                  sampleLines[RunInRootFrame] !==
+                    controlLines[namePropDescriptor])
+              ) {
+                var frame =
+                  "\n" +
+                  sampleLines[RunInRootFrame].replace(" at new ", " at ");
+                fn.displayName &&
+                  frame.includes("<anonymous>") &&
+                  (frame = frame.replace("<anonymous>", fn.displayName));
+                return frame;
+              }
+            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);
+          }
+          break;
+        }
+    }
+  } finally {
+    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);
+  }
+  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "")
+    ? describeBuiltInComponentFrame(previousPrepareStackTrace)
+    : "";
+}
+function describeComponentStackByType(type) {
+  if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+  if ("function" === typeof type)
+    return type.prototype && type.prototype.isReactComponent
+      ? describeNativeComponentFrame(type, !0)
+      : describeNativeComponentFrame(type, !1);
+  if ("object" === typeof type && null !== type) {
+    switch (type.$$typeof) {
+      case REACT_FORWARD_REF_TYPE:
+        return describeNativeComponentFrame(type.render, !1);
+      case REACT_MEMO_TYPE:
+        return describeNativeComponentFrame(type.type, !1);
+      case REACT_LAZY_TYPE:
+        var lazyComponent = type,
+          payload = lazyComponent._payload;
+        lazyComponent = lazyComponent._init;
+        try {
+          type = lazyComponent(payload);
+        } catch (x) {
+          return describeBuiltInComponentFrame("Lazy");
+        }
+        return describeComponentStackByType(type);
+    }
+    if ("string" === typeof type.name)
+      return (
+        (payload = type.env),
+        describeBuiltInComponentFrame(
+          type.name + (payload ? " [" + payload + "]" : "")
+        )
+      );
+  }
+  switch (type) {
+    case REACT_SUSPENSE_LIST_TYPE:
+      return describeBuiltInComponentFrame("SuspenseList");
+    case REACT_SUSPENSE_TYPE:
+      return describeBuiltInComponentFrame("Suspense");
+  }
+  return "";
+}
+function defaultErrorHandler(error) {
+  if (
+    "object" === typeof error &&
+    null !== error &&
+    "string" === typeof error.environmentName
+  ) {
+    var JSCompiler_inline_result = error.environmentName;
+    error = [error].slice(0);
+    "string" === typeof error[0]
+      ? error.splice(
+          0,
+          1,
+          "%c%s%c " + error[0],
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        )
+      : error.splice(
+          0,
+          0,
+          "%c%s%c ",
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        );
+    error.unshift(console);
+    JSCompiler_inline_result = bind.apply(console.error, error);
+    JSCompiler_inline_result();
+  } else console.error(error);
+  return null;
+}
+function noop() {}
+function RequestInstance(
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  var abortSet = new Set();
+  this.destination = null;
+  this.flushScheduled = !1;
+  this.resumableState = resumableState;
+  this.renderState = renderState;
+  this.rootFormatContext = rootFormatContext;
+  this.progressiveChunkSize =
+    void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+  this.status = 10;
+  this.fatalError = null;
+  this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+  this.completedPreambleSegments = this.completedRootSegment = null;
+  this.abortableTasks = abortSet;
+  this.pingedTasks = [];
+  this.clientRenderedBoundaries = [];
+  this.completedBoundaries = [];
+  this.partialBoundaries = [];
+  this.trackedPostpones = null;
+  this.onError = void 0 === onError ? defaultErrorHandler : onError;
+  this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+  this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+  this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+  this.onShellError = void 0 === onShellError ? noop : onShellError;
+  this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+  this.formState = void 0 === formState ? null : formState;
+}
+function createRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  resumableState = new RequestInstance(
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    formState
+  );
+  renderState = createPendingSegment(
+    resumableState,
+    0,
+    null,
+    rootFormatContext,
+    !1,
+    !1
+  );
+  renderState.parentFlushed = !0;
+  children = createRenderTask(
+    resumableState,
+    null,
+    children,
+    -1,
+    null,
+    renderState,
+    null,
+    null,
+    resumableState.abortableTasks,
+    null,
+    rootFormatContext,
+    null,
+    emptyTreeContext,
+    null,
+    !1
+  );
+  pushComponentStack(children);
+  resumableState.pingedTasks.push(children);
+  return resumableState;
+}
+function createPrerenderRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone
+) {
+  children = createRequest(
+    children,
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    void 0
+  );
+  children.trackedPostpones = {
+    workingMap: new Map(),
+    rootNodes: [],
+    rootSlots: null
+  };
+  return children;
+}
+var currentRequest = null;
+function pingTask(request, task) {
+  request.pingedTasks.push(task);
+  1 === request.pingedTasks.length &&
+    ((request.flushScheduled = null !== request.destination),
+    null !== request.trackedPostpones || 10 === request.status
+      ? scheduleMicrotask(function () {
+          return performWork(request);
+        })
+      : scheduleWork(function () {
+          return performWork(request);
+        }));
+}
+function createSuspenseBoundary(
+  request,
+  fallbackAbortableTasks,
+  contentPreamble,
+  fallbackPreamble
+) {
+  return {
+    status: 0,
+    rootSegmentID: -1,
+    parentFlushed: !1,
+    pendingTasks: 0,
+    completedSegments: [],
+    byteSize: 0,
+    fallbackAbortableTasks: fallbackAbortableTasks,
+    errorDigest: null,
+    contentState: createHoistableState(),
+    fallbackState: createHoistableState(),
+    contentPreamble: contentPreamble,
+    fallbackPreamble: fallbackPreamble,
+    trackedContentKeyPath: null,
+    trackedFallbackNode: null
+  };
+}
+function createRenderTask(
+  request,
+  thenableState,
+  node,
+  childIndex,
+  blockedBoundary,
+  blockedSegment,
+  blockedPreamble,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  var task = {
+    replay: null,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: blockedSegment,
+    blockedPreamble: blockedPreamble,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createReplayTask(
+  request,
+  thenableState,
+  replay,
+  node,
+  childIndex,
+  blockedBoundary,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  replay.pendingTasks++;
+  var task = {
+    replay: replay,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: null,
+    blockedPreamble: null,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createPendingSegment(
+  request,
+  index,
+  boundary,
+  parentFormatContext,
+  lastPushedText,
+  textEmbedded
+) {
+  return {
+    status: 0,
+    parentFlushed: !1,
+    id: -1,
+    index: index,
+    chunks: [],
+    children: [],
+    preambleChildren: [],
+    parentFormatContext: parentFormatContext,
+    boundary: boundary,
+    lastPushedText: lastPushedText,
+    textEmbedded: textEmbedded
+  };
+}
+function pushComponentStack(task) {
+  var node = task.node;
+  if ("object" === typeof node && null !== node)
+    switch (node.$$typeof) {
+      case REACT_ELEMENT_TYPE:
+        task.componentStack = { parent: task.componentStack, type: node.type };
+    }
+}
+function getThrownInfo(node$jscomp$0) {
+  var errorInfo = {};
+  node$jscomp$0 &&
+    Object.defineProperty(errorInfo, "componentStack", {
+      configurable: !0,
+      enumerable: !0,
+      get: function () {
+        try {
+          var info = "",
+            node = node$jscomp$0;
+          do
+            (info += describeComponentStackByType(node.type)),
+              (node = node.parent);
+          while (node);
+          var JSCompiler_inline_result = info;
+        } catch (x) {
+          JSCompiler_inline_result =
+            "\nError generating stack: " + x.message + "\n" + x.stack;
+        }
+        Object.defineProperty(errorInfo, "componentStack", {
+          value: JSCompiler_inline_result
+        });
+        return JSCompiler_inline_result;
+      }
+    });
+  return errorInfo;
+}
+function logRecoverableError(request, error, errorInfo) {
+  request = request.onError;
+  error = request(error, errorInfo);
+  if (null == error || "string" === typeof error) return error;
+}
+function fatalError(request, error) {
+  var onShellError = request.onShellError,
+    onFatalError = request.onFatalError;
+  onShellError(error);
+  onFatalError(error);
+  null !== request.destination
+    ? ((request.status = 14), closeWithError(request.destination, error))
+    : ((request.status = 13), (request.fatalError = error));
+}
+function renderWithHooks(request, task, keyPath, Component, props, secondArg) {
+  var prevThenableState = task.thenableState;
+  task.thenableState = null;
+  currentlyRenderingComponent = {};
+  currentlyRenderingTask = task;
+  currentlyRenderingRequest = request;
+  currentlyRenderingKeyPath = keyPath;
+  actionStateCounter = localIdCounter = 0;
+  actionStateMatchingIndex = -1;
+  thenableIndexCounter = 0;
+  thenableState = prevThenableState;
+  for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; )
+    (didScheduleRenderPhaseUpdate = !1),
+      (actionStateCounter = localIdCounter = 0),
+      (actionStateMatchingIndex = -1),
+      (thenableIndexCounter = 0),
+      (numberOfReRenders += 1),
+      (workInProgressHook = null),
+      (request = Component(props, secondArg));
+  resetHooksState();
+  return request;
+}
+function finishFunctionComponent(
+  request,
+  task,
+  keyPath,
+  children,
+  hasId,
+  actionStateCount,
+  actionStateMatchingIndex
+) {
+  var didEmitActionStateMarkers = !1;
+  if (0 !== actionStateCount && null !== request.formState) {
+    var segment = task.blockedSegment;
+    if (null !== segment) {
+      didEmitActionStateMarkers = !0;
+      segment = segment.chunks;
+      for (var i = 0; i < actionStateCount; i++)
+        i === actionStateMatchingIndex
+          ? segment.push(formStateMarkerIsMatching)
+          : segment.push(formStateMarkerIsNotMatching);
+    }
+  }
+  actionStateCount = task.keyPath;
+  task.keyPath = keyPath;
+  hasId
+    ? ((keyPath = task.treeContext),
+      (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+      renderNode(request, task, children, -1),
+      (task.treeContext = keyPath))
+    : didEmitActionStateMarkers
+      ? renderNode(request, task, children, -1)
+      : renderNodeDestructive(request, task, children, -1);
+  task.keyPath = actionStateCount;
+}
+function renderElement(request, task, keyPath, type, props, ref) {
+  if ("function" === typeof type)
+    if (type.prototype && type.prototype.isReactComponent) {
+      var newProps = props;
+      if ("ref" in props) {
+        newProps = {};
+        for (var propName in props)
+          "ref" !== propName && (newProps[propName] = props[propName]);
+      }
+      var defaultProps = type.defaultProps;
+      if (defaultProps) {
+        newProps === props && (newProps = assign({}, newProps, props));
+        for (var propName$33 in defaultProps)
+          void 0 === newProps[propName$33] &&
+            (newProps[propName$33] = defaultProps[propName$33]);
+      }
+      props = newProps;
+      newProps = emptyContextObject;
+      defaultProps = type.contextType;
+      "object" === typeof defaultProps &&
+        null !== defaultProps &&
+        (newProps = defaultProps._currentValue);
+      newProps = new type(props, newProps);
+      var initialState = void 0 !== newProps.state ? newProps.state : null;
+      newProps.updater = classComponentUpdater;
+      newProps.props = props;
+      newProps.state = initialState;
+      defaultProps = { queue: [], replace: !1 };
+      newProps._reactInternals = defaultProps;
+      ref = type.contextType;
+      newProps.context =
+        "object" === typeof ref && null !== ref
+          ? ref._currentValue
+          : emptyContextObject;
+      ref = type.getDerivedStateFromProps;
+      "function" === typeof ref &&
+        ((ref = ref(props, initialState)),
+        (initialState =
+          null === ref || void 0 === ref
+            ? initialState
+            : assign({}, initialState, ref)),
+        (newProps.state = initialState));
+      if (
+        "function" !== typeof type.getDerivedStateFromProps &&
+        "function" !== typeof newProps.getSnapshotBeforeUpdate &&
+        ("function" === typeof newProps.UNSAFE_componentWillMount ||
+          "function" === typeof newProps.componentWillMount)
+      )
+        if (
+          ((type = newProps.state),
+          "function" === typeof newProps.componentWillMount &&
+            newProps.componentWillMount(),
+          "function" === typeof newProps.UNSAFE_componentWillMount &&
+            newProps.UNSAFE_componentWillMount(),
+          type !== newProps.state &&
+            classComponentUpdater.enqueueReplaceState(
+              newProps,
+              newProps.state,
+              null
+            ),
+          null !== defaultProps.queue && 0 < defaultProps.queue.length)
+        )
+          if (
+            ((type = defaultProps.queue),
+            (ref = defaultProps.replace),
+            (defaultProps.queue = null),
+            (defaultProps.replace = !1),
+            ref && 1 === type.length)
+          )
+            newProps.state = type[0];
+          else {
+            defaultProps = ref ? type[0] : newProps.state;
+            initialState = !0;
+            for (ref = ref ? 1 : 0; ref < type.length; ref++)
+              (propName$33 = type[ref]),
+                (propName$33 =
+                  "function" === typeof propName$33
+                    ? propName$33.call(newProps, defaultProps, props, void 0)
+                    : propName$33),
+                null != propName$33 &&
+                  (initialState
+                    ? ((initialState = !1),
+                      (defaultProps = assign({}, defaultProps, propName$33)))
+                    : assign(defaultProps, propName$33));
+            newProps.state = defaultProps;
+          }
+        else defaultProps.queue = null;
+      type = newProps.render();
+      if (12 === request.status) throw null;
+      props = task.keyPath;
+      task.keyPath = keyPath;
+      renderNodeDestructive(request, task, type, -1);
+      task.keyPath = props;
+    } else {
+      type = renderWithHooks(request, task, keyPath, type, props, void 0);
+      if (12 === request.status) throw null;
+      finishFunctionComponent(
+        request,
+        task,
+        keyPath,
+        type,
+        0 !== localIdCounter,
+        actionStateCounter,
+        actionStateMatchingIndex
+      );
+    }
+  else if ("string" === typeof type)
+    if (((newProps = task.blockedSegment), null === newProps))
+      (newProps = props.children),
+        (defaultProps = task.formatContext),
+        (initialState = task.keyPath),
+        (task.formatContext = getChildFormatContext(defaultProps, type, props)),
+        (task.keyPath = keyPath),
+        renderNode(request, task, newProps, -1),
+        (task.formatContext = defaultProps),
+        (task.keyPath = initialState);
+    else {
+      ref = pushStartInstance(
+        newProps.chunks,
+        type,
+        props,
+        request.resumableState,
+        request.renderState,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.formatContext,
+        newProps.lastPushedText,
+        task.isFallback
+      );
+      newProps.lastPushedText = !1;
+      defaultProps = task.formatContext;
+      initialState = task.keyPath;
+      task.keyPath = keyPath;
+      3 ===
+      (task.formatContext = getChildFormatContext(defaultProps, type, props))
+        .insertionMode
+        ? ((keyPath = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          )),
+          newProps.preambleChildren.push(keyPath),
+          (keyPath = createRenderTask(
+            request,
+            null,
+            ref,
+            -1,
+            task.blockedBoundary,
+            keyPath,
+            task.blockedPreamble,
+            task.hoistableState,
+            request.abortableTasks,
+            task.keyPath,
+            task.formatContext,
+            task.context,
+            task.treeContext,
+            task.componentStack,
+            task.isFallback
+          )),
+          pushComponentStack(keyPath),
+          request.pingedTasks.push(keyPath))
+        : renderNode(request, task, ref, -1);
+      task.formatContext = defaultProps;
+      task.keyPath = initialState;
+      a: {
+        task = newProps.chunks;
+        request = request.resumableState;
+        switch (type) {
+          case "title":
+          case "style":
+          case "script":
+          case "area":
+          case "base":
+          case "br":
+          case "col":
+          case "embed":
+          case "hr":
+          case "img":
+          case "input":
+          case "keygen":
+          case "link":
+          case "meta":
+          case "param":
+          case "source":
+          case "track":
+          case "wbr":
+            break a;
+          case "body":
+            if (1 >= defaultProps.insertionMode) {
+              request.hasBody = !0;
+              break a;
+            }
+            break;
+          case "html":
+            if (0 === defaultProps.insertionMode) {
+              request.hasHtml = !0;
+              break a;
+            }
+            break;
+          case "head":
+            if (1 >= defaultProps.insertionMode) break a;
+        }
+        task.push(endChunkForTag(type));
+      }
+      newProps.lastPushedText = !1;
+    }
+  else {
+    switch (type) {
+      case REACT_LEGACY_HIDDEN_TYPE:
+      case REACT_STRICT_MODE_TYPE:
+      case REACT_PROFILER_TYPE:
+      case REACT_FRAGMENT_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_ACTIVITY_TYPE:
+        "hidden" !== props.mode &&
+          ((type = task.keyPath),
+          (task.keyPath = keyPath),
+          renderNodeDestructive(request, task, props.children, -1),
+          (task.keyPath = type));
+        return;
+      case REACT_SUSPENSE_LIST_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_VIEW_TRANSITION_TYPE:
+      case REACT_SCOPE_TYPE:
+        throw Error(formatProdErrorMessage(343));
+      case REACT_SUSPENSE_TYPE:
+        a: if (null !== task.replay) {
+          type = task.keyPath;
+          task.keyPath = keyPath;
+          keyPath = props.children;
+          try {
+            renderNode(request, task, keyPath, -1);
+          } finally {
+            task.keyPath = type;
+          }
+        } else {
+          type = task.keyPath;
+          var parentBoundary = task.blockedBoundary;
+          ref = task.blockedPreamble;
+          var parentHoistableState = task.hoistableState;
+          propName$33 = task.blockedSegment;
+          propName = props.fallback;
+          props = props.children;
+          var fallbackAbortSet = new Set();
+          var newBoundary =
+            2 > task.formatContext.insertionMode
+              ? createSuspenseBoundary(
+                  request,
+                  fallbackAbortSet,
+                  createPreambleState(),
+                  createPreambleState()
+                )
+              : createSuspenseBoundary(request, fallbackAbortSet, null, null);
+          null !== request.trackedPostpones &&
+            (newBoundary.trackedContentKeyPath = keyPath);
+          var boundarySegment = createPendingSegment(
+            request,
+            propName$33.chunks.length,
+            newBoundary,
+            task.formatContext,
+            !1,
+            !1
+          );
+          propName$33.children.push(boundarySegment);
+          propName$33.lastPushedText = !1;
+          var contentRootSegment = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          );
+          contentRootSegment.parentFlushed = !0;
+          if (null !== request.trackedPostpones) {
+            newProps = [keyPath[0], "Suspense Fallback", keyPath[2]];
+            defaultProps = [newProps[1], newProps[2], [], null];
+            request.trackedPostpones.workingMap.set(newProps, defaultProps);
+            newBoundary.trackedFallbackNode = defaultProps;
+            task.blockedSegment = boundarySegment;
+            task.blockedPreamble = newBoundary.fallbackPreamble;
+            task.keyPath = newProps;
+            boundarySegment.status = 6;
+            try {
+              renderNode(request, task, propName, -1),
+                boundarySegment.lastPushedText &&
+                  boundarySegment.textEmbedded &&
+                  boundarySegment.chunks.push(textSeparator),
+                (boundarySegment.status = 1);
+            } catch (thrownValue) {
+              throw (
+                ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                thrownValue)
+              );
+            } finally {
+              (task.blockedSegment = propName$33),
+                (task.blockedPreamble = ref),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              props,
+              -1,
+              newBoundary,
+              contentRootSegment,
+              newBoundary.contentPreamble,
+              newBoundary.contentState,
+              task.abortSet,
+              keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          } else {
+            task.blockedBoundary = newBoundary;
+            task.blockedPreamble = newBoundary.contentPreamble;
+            task.hoistableState = newBoundary.contentState;
+            task.blockedSegment = contentRootSegment;
+            task.keyPath = keyPath;
+            contentRootSegment.status = 6;
+            try {
+              if (
+                (renderNode(request, task, props, -1),
+                contentRootSegment.lastPushedText &&
+                  contentRootSegment.textEmbedded &&
+                  contentRootSegment.chunks.push(textSeparator),
+                (contentRootSegment.status = 1),
+                queueCompletedSegment(newBoundary, contentRootSegment),
+                0 === newBoundary.pendingTasks && 0 === newBoundary.status)
+              ) {
+                newBoundary.status = 1;
+                0 === request.pendingRootTasks &&
+                  task.blockedPreamble &&
+                  preparePreamble(request);
+                break a;
+              }
+            } catch (thrownValue$28) {
+              (newBoundary.status = 4),
+                12 === request.status
+                  ? ((contentRootSegment.status = 3),
+                    (newProps = request.fatalError))
+                  : ((contentRootSegment.status = 4),
+                    (newProps = thrownValue$28)),
+                (defaultProps = getThrownInfo(task.componentStack)),
+                (initialState = logRecoverableError(
+                  request,
+                  newProps,
+                  defaultProps
+                )),
+                (newBoundary.errorDigest = initialState),
+                untrackBoundary(request, newBoundary);
+            } finally {
+              (task.blockedBoundary = parentBoundary),
+                (task.blockedPreamble = ref),
+                (task.hoistableState = parentHoistableState),
+                (task.blockedSegment = propName$33),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              propName,
+              -1,
+              parentBoundary,
+              boundarySegment,
+              newBoundary.fallbackPreamble,
+              newBoundary.fallbackState,
+              fallbackAbortSet,
+              [keyPath[0], "Suspense Fallback", keyPath[2]],
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              !0
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          }
+        }
+        return;
+    }
+    if ("object" === typeof type && null !== type)
+      switch (type.$$typeof) {
+        case REACT_FORWARD_REF_TYPE:
+          if ("ref" in props)
+            for (newBoundary in ((newProps = {}), props))
+              "ref" !== newBoundary &&
+                (newProps[newBoundary] = props[newBoundary]);
+          else newProps = props;
+          type = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type.render,
+            newProps,
+            ref
+          );
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            type,
+            0 !== localIdCounter,
+            actionStateCounter,
+            actionStateMatchingIndex
+          );
+          return;
+        case REACT_MEMO_TYPE:
+          renderElement(request, task, keyPath, type.type, props, ref);
+          return;
+        case REACT_PROVIDER_TYPE:
+        case REACT_CONTEXT_TYPE:
+          defaultProps = props.children;
+          newProps = task.keyPath;
+          props = props.value;
+          initialState = type._currentValue;
+          type._currentValue = props;
+          ref = currentActiveSnapshot;
+          currentActiveSnapshot = type = {
+            parent: ref,
+            depth: null === ref ? 0 : ref.depth + 1,
+            context: type,
+            parentValue: initialState,
+            value: props
+          };
+          task.context = type;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, defaultProps, -1);
+          request = currentActiveSnapshot;
+          if (null === request) throw Error(formatProdErrorMessage(403));
+          request.context._currentValue = request.parentValue;
+          request = currentActiveSnapshot = request.parent;
+          task.context = request;
+          task.keyPath = newProps;
+          return;
+        case REACT_CONSUMER_TYPE:
+          props = props.children;
+          type = props(type._context._currentValue);
+          props = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, type, -1);
+          task.keyPath = props;
+          return;
+        case REACT_LAZY_TYPE:
+          newProps = type._init;
+          type = newProps(type._payload);
+          if (12 === request.status) throw null;
+          renderElement(request, task, keyPath, type, props, ref);
+          return;
+      }
+    throw Error(
+      formatProdErrorMessage(130, null == type ? type : typeof type, "")
+    );
+  }
+}
+function resumeNode(request, task, segmentId, node, childIndex) {
+  var prevReplay = task.replay,
+    blockedBoundary = task.blockedBoundary,
+    resumedSegment = createPendingSegment(
+      request,
+      0,
+      null,
+      task.formatContext,
+      !1,
+      !1
+    );
+  resumedSegment.id = segmentId;
+  resumedSegment.parentFlushed = !0;
+  try {
+    (task.replay = null),
+      (task.blockedSegment = resumedSegment),
+      renderNode(request, task, node, childIndex),
+      (resumedSegment.status = 1),
+      null === blockedBoundary
+        ? (request.completedRootSegment = resumedSegment)
+        : (queueCompletedSegment(blockedBoundary, resumedSegment),
+          blockedBoundary.parentFlushed &&
+            request.partialBoundaries.push(blockedBoundary));
+  } finally {
+    (task.replay = prevReplay), (task.blockedSegment = null);
+  }
+}
+function renderNodeDestructive(request, task, node, childIndex) {
+  null !== task.replay && "number" === typeof task.replay.slots
+    ? resumeNode(request, task, task.replay.slots, node, childIndex)
+    : ((task.node = node),
+      (task.childIndex = childIndex),
+      (node = task.componentStack),
+      pushComponentStack(task),
+      retryNode(request, task),
+      (task.componentStack = node));
+}
+function retryNode(request, task) {
+  var node = task.node,
+    childIndex = task.childIndex;
+  if (null !== node) {
+    if ("object" === typeof node) {
+      switch (node.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          var type = node.type,
+            key = node.key,
+            props = node.props;
+          node = props.ref;
+          var ref = void 0 !== node ? node : null,
+            name = getComponentNameFromType(type),
+            keyOrIndex =
+              null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+          key = [task.keyPath, name, keyOrIndex];
+          if (null !== task.replay)
+            a: {
+              var replay = task.replay;
+              childIndex = replay.nodes;
+              for (node = 0; node < childIndex.length; node++) {
+                var node$jscomp$0 = childIndex[node];
+                if (keyOrIndex === node$jscomp$0[1]) {
+                  if (4 === node$jscomp$0.length) {
+                    if (null !== name && name !== node$jscomp$0[0])
+                      throw Error(
+                        formatProdErrorMessage(490, node$jscomp$0[0], name)
+                      );
+                    var childNodes = node$jscomp$0[2];
+                    name = node$jscomp$0[3];
+                    keyOrIndex = task.node;
+                    task.replay = {
+                      nodes: childNodes,
+                      slots: name,
+                      pendingTasks: 1
+                    };
+                    try {
+                      renderElement(request, task, key, type, props, ref);
+                      if (
+                        1 === task.replay.pendingTasks &&
+                        0 < task.replay.nodes.length
+                      )
+                        throw Error(formatProdErrorMessage(488));
+                      task.replay.pendingTasks--;
+                    } catch (x) {
+                      if (
+                        "object" === typeof x &&
+                        null !== x &&
+                        (x === SuspenseException ||
+                          "function" === typeof x.then)
+                      )
+                        throw (
+                          (task.node === keyOrIndex && (task.replay = replay),
+                          x)
+                        );
+                      task.replay.pendingTasks--;
+                      props = getThrownInfo(task.componentStack);
+                      key = task.blockedBoundary;
+                      type = x;
+                      props = logRecoverableError(request, type, props);
+                      abortRemainingReplayNodes(
+                        request,
+                        key,
+                        childNodes,
+                        name,
+                        type,
+                        props
+                      );
+                    }
+                    task.replay = replay;
+                  } else {
+                    if (type !== REACT_SUSPENSE_TYPE)
+                      throw Error(
+                        formatProdErrorMessage(
+                          490,
+                          "Suspense",
+                          getComponentNameFromType(type) || "Unknown"
+                        )
+                      );
+                    b: {
+                      replay = void 0;
+                      type = node$jscomp$0[5];
+                      ref = node$jscomp$0[2];
+                      name = node$jscomp$0[3];
+                      keyOrIndex =
+                        null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2];
+                      node$jscomp$0 =
+                        null === node$jscomp$0[4] ? null : node$jscomp$0[4][3];
+                      var prevKeyPath = task.keyPath,
+                        previousReplaySet = task.replay,
+                        parentBoundary = task.blockedBoundary,
+                        parentHoistableState = task.hoistableState,
+                        content = props.children,
+                        fallback = props.fallback,
+                        fallbackAbortSet = new Set();
+                      props =
+                        2 > task.formatContext.insertionMode
+                          ? createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              createPreambleState(),
+                              createPreambleState()
+                            )
+                          : createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              null,
+                              null
+                            );
+                      props.parentFlushed = !0;
+                      props.rootSegmentID = type;
+                      task.blockedBoundary = props;
+                      task.hoistableState = props.contentState;
+                      task.keyPath = key;
+                      task.replay = {
+                        nodes: ref,
+                        slots: name,
+                        pendingTasks: 1
+                      };
+                      try {
+                        renderNode(request, task, content, -1);
+                        if (
+                          1 === task.replay.pendingTasks &&
+                          0 < task.replay.nodes.length
+                        )
+                          throw Error(formatProdErrorMessage(488));
+                        task.replay.pendingTasks--;
+                        if (0 === props.pendingTasks && 0 === props.status) {
+                          props.status = 1;
+                          request.completedBoundaries.push(props);
+                          break b;
+                        }
+                      } catch (error) {
+                        (props.status = 4),
+                          (childNodes = getThrownInfo(task.componentStack)),
+                          (replay = logRecoverableError(
+                            request,
+                            error,
+                            childNodes
+                          )),
+                          (props.errorDigest = replay),
+                          task.replay.pendingTasks--,
+                          request.clientRenderedBoundaries.push(props);
+                      } finally {
+                        (task.blockedBoundary = parentBoundary),
+                          (task.hoistableState = parentHoistableState),
+                          (task.replay = previousReplaySet),
+                          (task.keyPath = prevKeyPath);
+                      }
+                      task = createReplayTask(
+                        request,
+                        null,
+                        {
+                          nodes: keyOrIndex,
+                          slots: node$jscomp$0,
+                          pendingTasks: 0
+                        },
+                        fallback,
+                        -1,
+                        parentBoundary,
+                        props.fallbackState,
+                        fallbackAbortSet,
+                        [key[0], "Suspense Fallback", key[2]],
+                        task.formatContext,
+                        task.context,
+                        task.treeContext,
+                        task.componentStack,
+                        !0
+                      );
+                      pushComponentStack(task);
+                      request.pingedTasks.push(task);
+                    }
+                  }
+                  childIndex.splice(node, 1);
+                  break a;
+                }
+              }
+            }
+          else renderElement(request, task, key, type, props, ref);
+          return;
+        case REACT_PORTAL_TYPE:
+          throw Error(formatProdErrorMessage(257));
+        case REACT_LAZY_TYPE:
+          childNodes = node._init;
+          node = childNodes(node._payload);
+          if (12 === request.status) throw null;
+          renderNodeDestructive(request, task, node, childIndex);
+          return;
+      }
+      if (isArrayImpl(node)) {
+        renderChildrenArray(request, task, node, childIndex);
+        return;
+      }
+      null === node || "object" !== typeof node
+        ? (childNodes = null)
+        : ((childNodes =
+            (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+            node["@@iterator"]),
+          (childNodes = "function" === typeof childNodes ? childNodes : null));
+      if (childNodes && (childNodes = childNodes.call(node))) {
+        node = childNodes.next();
+        if (!node.done) {
+          props = [];
+          do props.push(node.value), (node = childNodes.next());
+          while (!node.done);
+          renderChildrenArray(request, task, props, childIndex);
+        }
+        return;
+      }
+      if ("function" === typeof node.then)
+        return (
+          (task.thenableState = null),
+          renderNodeDestructive(request, task, unwrapThenable(node), childIndex)
+        );
+      if (node.$$typeof === REACT_CONTEXT_TYPE)
+        return renderNodeDestructive(
+          request,
+          task,
+          node._currentValue,
+          childIndex
+        );
+      childIndex = Object.prototype.toString.call(node);
+      throw Error(
+        formatProdErrorMessage(
+          31,
+          "[object Object]" === childIndex
+            ? "object with keys {" + Object.keys(node).join(", ") + "}"
+            : childIndex
+        )
+      );
+    }
+    if ("string" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+    else if ("number" === typeof node || "bigint" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            "" + node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+  }
+}
+function renderChildrenArray(request, task, children, childIndex) {
+  var prevKeyPath = task.keyPath;
+  if (
+    -1 !== childIndex &&
+    ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+    null !== task.replay)
+  ) {
+    for (
+      var replay = task.replay, replayNodes = replay.nodes, j = 0;
+      j < replayNodes.length;
+      j++
+    ) {
+      var node = replayNodes[j];
+      if (node[1] === childIndex) {
+        childIndex = node[2];
+        node = node[3];
+        task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+        try {
+          renderChildrenArray(request, task, children, -1);
+          if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length)
+            throw Error(formatProdErrorMessage(488));
+          task.replay.pendingTasks--;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            (x === SuspenseException || "function" === typeof x.then)
+          )
+            throw x;
+          task.replay.pendingTasks--;
+          children = getThrownInfo(task.componentStack);
+          var boundary = task.blockedBoundary,
+            error = x;
+          children = logRecoverableError(request, error, children);
+          abortRemainingReplayNodes(
+            request,
+            boundary,
+            childIndex,
+            node,
+            error,
+            children
+          );
+        }
+        task.replay = replay;
+        replayNodes.splice(j, 1);
+        break;
+      }
+    }
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  replay = task.treeContext;
+  replayNodes = children.length;
+  if (
+    null !== task.replay &&
+    ((j = task.replay.slots), null !== j && "object" === typeof j)
+  ) {
+    for (childIndex = 0; childIndex < replayNodes; childIndex++)
+      (node = children[childIndex]),
+        (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)),
+        (boundary = j[childIndex]),
+        "number" === typeof boundary
+          ? (resumeNode(request, task, boundary, node, childIndex),
+            delete j[childIndex])
+          : renderNode(request, task, node, childIndex);
+    task.treeContext = replay;
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  for (j = 0; j < replayNodes; j++)
+    (childIndex = children[j]),
+      (task.treeContext = pushTreeContext(replay, replayNodes, j)),
+      renderNode(request, task, childIndex, j);
+  task.treeContext = replay;
+  task.keyPath = prevKeyPath;
+}
+function untrackBoundary(request, boundary) {
+  request = request.trackedPostpones;
+  null !== request &&
+    ((boundary = boundary.trackedContentKeyPath),
+    null !== boundary &&
+      ((boundary = request.workingMap.get(boundary)),
+      void 0 !== boundary &&
+        ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+}
+function spawnNewSuspendedReplayTask(request, task, thenableState) {
+  return createReplayTask(
+    request,
+    thenableState,
+    task.replay,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function spawnNewSuspendedRenderTask(request, task, thenableState) {
+  var segment = task.blockedSegment,
+    newSegment = createPendingSegment(
+      request,
+      segment.chunks.length,
+      null,
+      task.formatContext,
+      segment.lastPushedText,
+      !0
+    );
+  segment.children.push(newSegment);
+  segment.lastPushedText = !1;
+  return createRenderTask(
+    request,
+    thenableState,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    newSegment,
+    task.blockedPreamble,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function renderNode(request, task, node, childIndex) {
+  var previousFormatContext = task.formatContext,
+    previousContext = task.context,
+    previousKeyPath = task.keyPath,
+    previousTreeContext = task.treeContext,
+    previousComponentStack = task.componentStack,
+    segment = task.blockedSegment;
+  if (null === segment)
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue) {
+      if (
+        (resetHooksState(),
+        (node =
+          thrownValue === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedReplayTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedReplayTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  else {
+    var childrenLength = segment.children.length,
+      chunkLength = segment.chunks.length;
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue$48) {
+      if (
+        (resetHooksState(),
+        (segment.children.length = childrenLength),
+        (segment.chunks.length = chunkLength),
+        (node =
+          thrownValue$48 === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue$48),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedRenderTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedRenderTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  }
+  task.formatContext = previousFormatContext;
+  task.context = previousContext;
+  task.keyPath = previousKeyPath;
+  task.treeContext = previousTreeContext;
+  switchContext(previousContext);
+  throw node;
+}
+function abortTaskSoft(task) {
+  var boundary = task.blockedBoundary;
+  task = task.blockedSegment;
+  null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+}
+function abortRemainingReplayNodes(
+  request$jscomp$0,
+  boundary,
+  nodes,
+  slots,
+  error,
+  errorDigest$jscomp$0
+) {
+  for (var i = 0; i < nodes.length; i++) {
+    var node = nodes[i];
+    if (4 === node.length)
+      abortRemainingReplayNodes(
+        request$jscomp$0,
+        boundary,
+        node[2],
+        node[3],
+        error,
+        errorDigest$jscomp$0
+      );
+    else {
+      node = node[5];
+      var request = request$jscomp$0,
+        errorDigest = errorDigest$jscomp$0,
+        resumedBoundary = createSuspenseBoundary(
+          request,
+          new Set(),
+          null,
+          null
+        );
+      resumedBoundary.parentFlushed = !0;
+      resumedBoundary.rootSegmentID = node;
+      resumedBoundary.status = 4;
+      resumedBoundary.errorDigest = errorDigest;
+      resumedBoundary.parentFlushed &&
+        request.clientRenderedBoundaries.push(resumedBoundary);
+    }
+  }
+  nodes.length = 0;
+  if (null !== slots) {
+    if (null === boundary) throw Error(formatProdErrorMessage(487));
+    4 !== boundary.status &&
+      ((boundary.status = 4),
+      (boundary.errorDigest = errorDigest$jscomp$0),
+      boundary.parentFlushed &&
+        request$jscomp$0.clientRenderedBoundaries.push(boundary));
+    if ("object" === typeof slots) for (var index in slots) delete slots[index];
+  }
+}
+function abortTask(task, request, error) {
+  var boundary = task.blockedBoundary,
+    segment = task.blockedSegment;
+  if (null !== segment) {
+    if (6 === segment.status) return;
+    segment.status = 3;
+  }
+  segment = getThrownInfo(task.componentStack);
+  if (null === boundary) {
+    if (13 !== request.status && 14 !== request.status) {
+      boundary = task.replay;
+      if (null === boundary) {
+        logRecoverableError(request, error, segment);
+        fatalError(request, error);
+        return;
+      }
+      boundary.pendingTasks--;
+      0 === boundary.pendingTasks &&
+        0 < boundary.nodes.length &&
+        ((task = logRecoverableError(request, error, segment)),
+        abortRemainingReplayNodes(
+          request,
+          null,
+          boundary.nodes,
+          boundary.slots,
+          error,
+          task
+        ));
+      request.pendingRootTasks--;
+      0 === request.pendingRootTasks && completeShell(request);
+    }
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        ((boundary.status = 4),
+        (task = logRecoverableError(request, error, segment)),
+        (boundary.status = 4),
+        (boundary.errorDigest = task),
+        untrackBoundary(request, boundary),
+        boundary.parentFlushed &&
+          request.clientRenderedBoundaries.push(boundary)),
+      boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+        return abortTask(fallbackTask, request, error);
+      }),
+      boundary.fallbackAbortableTasks.clear();
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function safelyEmitEarlyPreloads(request, shellComplete) {
+  try {
+    var renderState = request.renderState,
+      onHeaders = renderState.onHeaders;
+    if (onHeaders) {
+      var headers = renderState.headers;
+      if (headers) {
+        renderState.headers = null;
+        var linkHeader = headers.preconnects;
+        headers.fontPreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.fontPreloads));
+        headers.highImagePreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.highImagePreloads));
+        if (!shellComplete) {
+          var queueIter = renderState.styles.values(),
+            queueStep = queueIter.next();
+          b: for (
+            ;
+            0 < headers.remainingCapacity && !queueStep.done;
+            queueStep = queueIter.next()
+          )
+            for (
+              var sheetIter = queueStep.value.sheets.values(),
+                sheetStep = sheetIter.next();
+              0 < headers.remainingCapacity && !sheetStep.done;
+              sheetStep = sheetIter.next()
+            ) {
+              var sheet = sheetStep.value,
+                props = sheet.props,
+                key = props.href,
+                props$jscomp$0 = sheet.props,
+                header = getPreloadAsHeader(props$jscomp$0.href, "style", {
+                  crossOrigin: props$jscomp$0.crossOrigin,
+                  integrity: props$jscomp$0.integrity,
+                  nonce: props$jscomp$0.nonce,
+                  type: props$jscomp$0.type,
+                  fetchPriority: props$jscomp$0.fetchPriority,
+                  referrerPolicy: props$jscomp$0.referrerPolicy,
+                  media: props$jscomp$0.media
+                });
+              if (0 <= (headers.remainingCapacity -= header.length + 2))
+                (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                  linkHeader && (linkHeader += ", "),
+                  (linkHeader += header),
+                  (renderState.resets.style[key] =
+                    "string" === typeof props.crossOrigin ||
+                    "string" === typeof props.integrity
+                      ? [props.crossOrigin, props.integrity]
+                      : PRELOAD_NO_CREDS);
+              else break b;
+            }
+        }
+        linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+      }
+    }
+  } catch (error) {
+    logRecoverableError(request, error, {});
+  }
+}
+function completeShell(request) {
+  null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+  null === request.trackedPostpones && preparePreamble(request);
+  request.onShellError = noop;
+  request = request.onShellReady;
+  request();
+}
+function completeAll(request) {
+  safelyEmitEarlyPreloads(
+    request,
+    null === request.trackedPostpones
+      ? !0
+      : null === request.completedRootSegment ||
+          5 !== request.completedRootSegment.status
+  );
+  preparePreamble(request);
+  request = request.onAllReady;
+  request();
+}
+function queueCompletedSegment(boundary, segment) {
+  if (
+    0 === segment.chunks.length &&
+    1 === segment.children.length &&
+    null === segment.children[0].boundary &&
+    -1 === segment.children[0].id
+  ) {
+    var childSegment = segment.children[0];
+    childSegment.id = segment.id;
+    childSegment.parentFlushed = !0;
+    1 === childSegment.status && queueCompletedSegment(boundary, childSegment);
+  } else boundary.completedSegments.push(segment);
+}
+function finishedTask(request, boundary, segment) {
+  if (null === boundary) {
+    if (null !== segment && segment.parentFlushed) {
+      if (null !== request.completedRootSegment)
+        throw Error(formatProdErrorMessage(389));
+      request.completedRootSegment = segment;
+    }
+    request.pendingRootTasks--;
+    0 === request.pendingRootTasks && completeShell(request);
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        (0 === boundary.pendingTasks
+          ? (0 === boundary.status && (boundary.status = 1),
+            null !== segment &&
+              segment.parentFlushed &&
+              1 === segment.status &&
+              queueCompletedSegment(boundary, segment),
+            boundary.parentFlushed &&
+              request.completedBoundaries.push(boundary),
+            1 === boundary.status &&
+              (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request),
+              boundary.fallbackAbortableTasks.clear(),
+              0 === request.pendingRootTasks &&
+                null === request.trackedPostpones &&
+                null !== boundary.contentPreamble &&
+                preparePreamble(request)))
+          : null !== segment &&
+            segment.parentFlushed &&
+            1 === segment.status &&
+            (queueCompletedSegment(boundary, segment),
+            1 === boundary.completedSegments.length &&
+              boundary.parentFlushed &&
+              request.partialBoundaries.push(boundary)));
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function performWork(request$jscomp$2) {
+  if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) {
+    var prevContext = currentActiveSnapshot,
+      prevDispatcher = ReactSharedInternals.H;
+    ReactSharedInternals.H = HooksDispatcher;
+    var prevAsyncDispatcher = ReactSharedInternals.A;
+    ReactSharedInternals.A = DefaultAsyncDispatcher;
+    var prevRequest = currentRequest;
+    currentRequest = request$jscomp$2;
+    var prevResumableState = currentResumableState;
+    currentResumableState = request$jscomp$2.resumableState;
+    try {
+      var pingedTasks = request$jscomp$2.pingedTasks,
+        i;
+      for (i = 0; i < pingedTasks.length; i++) {
+        var task = pingedTasks[i],
+          request = request$jscomp$2,
+          segment = task.blockedSegment;
+        if (null === segment) {
+          var request$jscomp$0 = request;
+          if (0 !== task.replay.pendingTasks) {
+            switchContext(task.context);
+            try {
+              "number" === typeof task.replay.slots
+                ? resumeNode(
+                    request$jscomp$0,
+                    task,
+                    task.replay.slots,
+                    task.node,
+                    task.childIndex
+                  )
+                : retryNode(request$jscomp$0, task);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(formatProdErrorMessage(488));
+              task.replay.pendingTasks--;
+              task.abortSet.delete(task);
+              finishedTask(request$jscomp$0, task.blockedBoundary, null);
+            } catch (thrownValue) {
+              resetHooksState();
+              var x =
+                thrownValue === SuspenseException
+                  ? getSuspendedThenable()
+                  : thrownValue;
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                "function" === typeof x.then
+              ) {
+                var ping = task.ping;
+                x.then(ping, ping);
+                task.thenableState = getThenableStateAfterSuspending();
+              } else {
+                task.replay.pendingTasks--;
+                task.abortSet.delete(task);
+                var errorInfo = getThrownInfo(task.componentStack);
+                request = void 0;
+                var request$jscomp$1 = request$jscomp$0,
+                  boundary = task.blockedBoundary,
+                  error$jscomp$0 =
+                    12 === request$jscomp$0.status
+                      ? request$jscomp$0.fatalError
+                      : x,
+                  replayNodes = task.replay.nodes,
+                  resumeSlots = task.replay.slots;
+                request = logRecoverableError(
+                  request$jscomp$1,
+                  error$jscomp$0,
+                  errorInfo
+                );
+                abortRemainingReplayNodes(
+                  request$jscomp$1,
+                  boundary,
+                  replayNodes,
+                  resumeSlots,
+                  error$jscomp$0,
+                  request
+                );
+                request$jscomp$0.pendingRootTasks--;
+                0 === request$jscomp$0.pendingRootTasks &&
+                  completeShell(request$jscomp$0);
+                request$jscomp$0.allPendingTasks--;
+                0 === request$jscomp$0.allPendingTasks &&
+                  completeAll(request$jscomp$0);
+              }
+            } finally {
+            }
+          }
+        } else if (
+          ((request$jscomp$0 = void 0),
+          (request$jscomp$1 = segment),
+          0 === request$jscomp$1.status)
+        ) {
+          request$jscomp$1.status = 6;
+          switchContext(task.context);
+          var childrenLength = request$jscomp$1.children.length,
+            chunkLength = request$jscomp$1.chunks.length;
+          try {
+            retryNode(request, task),
+              request$jscomp$1.lastPushedText &&
+                request$jscomp$1.textEmbedded &&
+                request$jscomp$1.chunks.push(textSeparator),
+              task.abortSet.delete(task),
+              (request$jscomp$1.status = 1),
+              finishedTask(request, task.blockedBoundary, request$jscomp$1);
+          } catch (thrownValue) {
+            resetHooksState();
+            request$jscomp$1.children.length = childrenLength;
+            request$jscomp$1.chunks.length = chunkLength;
+            var x$jscomp$0 =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : 12 === request.status
+                  ? request.fatalError
+                  : thrownValue;
+            if (
+              "object" === typeof x$jscomp$0 &&
+              null !== x$jscomp$0 &&
+              "function" === typeof x$jscomp$0.then
+            ) {
+              request$jscomp$1.status = 0;
+              task.thenableState = getThenableStateAfterSuspending();
+              var ping$jscomp$0 = task.ping;
+              x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+            } else {
+              var errorInfo$jscomp$0 = getThrownInfo(task.componentStack);
+              task.abortSet.delete(task);
+              request$jscomp$1.status = 4;
+              var boundary$jscomp$0 = task.blockedBoundary;
+              request$jscomp$0 = logRecoverableError(
+                request,
+                x$jscomp$0,
+                errorInfo$jscomp$0
+              );
+              null === boundary$jscomp$0
+                ? fatalError(request, x$jscomp$0)
+                : (boundary$jscomp$0.pendingTasks--,
+                  4 !== boundary$jscomp$0.status &&
+                    ((boundary$jscomp$0.status = 4),
+                    (boundary$jscomp$0.errorDigest = request$jscomp$0),
+                    untrackBoundary(request, boundary$jscomp$0),
+                    boundary$jscomp$0.parentFlushed &&
+                      request.clientRenderedBoundaries.push(boundary$jscomp$0),
+                    0 === request.pendingRootTasks &&
+                      null === request.trackedPostpones &&
+                      null !== boundary$jscomp$0.contentPreamble &&
+                      preparePreamble(request)));
+              request.allPendingTasks--;
+              0 === request.allPendingTasks && completeAll(request);
+            }
+          } finally {
+          }
+        }
+      }
+      pingedTasks.splice(0, i);
+      null !== request$jscomp$2.destination &&
+        flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination);
+    } catch (error) {
+      logRecoverableError(request$jscomp$2, error, {}),
+        fatalError(request$jscomp$2, error);
+    } finally {
+      (currentResumableState = prevResumableState),
+        (ReactSharedInternals.H = prevDispatcher),
+        (ReactSharedInternals.A = prevAsyncDispatcher),
+        prevDispatcher === HooksDispatcher && switchContext(prevContext),
+        (currentRequest = prevRequest);
+    }
+  }
+}
+function preparePreambleFromSubtree(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  segment.preambleChildren.length &&
+    collectedPreambleSegments.push(segment.preambleChildren);
+  for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+    pendingPreambles =
+      preparePreambleFromSegment(
+        request,
+        segment.children[i],
+        collectedPreambleSegments
+      ) || pendingPreambles;
+  return pendingPreambles;
+}
+function preparePreambleFromSegment(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    );
+  var preamble = boundary.contentPreamble,
+    fallbackPreamble = boundary.fallbackPreamble;
+  if (null === preamble || null === fallbackPreamble) return !1;
+  switch (boundary.status) {
+    case 1:
+      hoistPreambleState(request.renderState, preamble);
+      segment = boundary.completedSegments[0];
+      if (!segment) throw Error(formatProdErrorMessage(391));
+      return preparePreambleFromSubtree(
+        request,
+        segment,
+        collectedPreambleSegments
+      );
+    case 5:
+      if (null !== request.trackedPostpones) return !0;
+    case 4:
+      if (1 === segment.status)
+        return (
+          hoistPreambleState(request.renderState, fallbackPreamble),
+          preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          )
+        );
+    default:
+      return !0;
+  }
+}
+function preparePreamble(request) {
+  if (
+    request.completedRootSegment &&
+    null === request.completedPreambleSegments
+  ) {
+    var collectedPreambleSegments = [],
+      hasPendingPreambles = preparePreambleFromSegment(
+        request,
+        request.completedRootSegment,
+        collectedPreambleSegments
+      ),
+      preamble = request.renderState.preamble;
+    if (
+      !1 === hasPendingPreambles ||
+      (preamble.headChunks && preamble.bodyChunks)
+    )
+      request.completedPreambleSegments = collectedPreambleSegments;
+  }
+}
+function flushSubtree(request, destination, segment, hoistableState) {
+  segment.parentFlushed = !0;
+  switch (segment.status) {
+    case 0:
+      segment.id = request.nextSegmentId++;
+    case 5:
+      return (
+        (hoistableState = segment.id),
+        (segment.lastPushedText = !1),
+        (segment.textEmbedded = !1),
+        (request = request.renderState),
+        writeChunk(destination, placeholder1),
+        writeChunk(destination, request.placeholderPrefix),
+        (request = stringToChunk(hoistableState.toString(16))),
+        writeChunk(destination, request),
+        writeChunkAndReturn(destination, placeholder2)
+      );
+    case 1:
+      segment.status = 2;
+      var r = !0,
+        chunks = segment.chunks,
+        chunkIdx = 0;
+      segment = segment.children;
+      for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+        for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+          writeChunk(destination, chunks[chunkIdx]);
+        r = flushSegment(request, destination, r, hoistableState);
+      }
+      for (; chunkIdx < chunks.length - 1; chunkIdx++)
+        writeChunk(destination, chunks[chunkIdx]);
+      chunkIdx < chunks.length &&
+        (r = writeChunkAndReturn(destination, chunks[chunkIdx]));
+      return r;
+    default:
+      throw Error(formatProdErrorMessage(390));
+  }
+}
+function flushSegment(request, destination, segment, hoistableState) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return flushSubtree(request, destination, segment, hoistableState);
+  boundary.parentFlushed = !0;
+  if (4 === boundary.status) {
+    var errorDigest = boundary.errorDigest;
+    writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);
+    writeChunk(destination, clientRenderedSuspenseBoundaryError1);
+    errorDigest &&
+      (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
+      writeChunk(destination, stringToChunk(escapeTextForBrowser(errorDigest))),
+      writeChunk(
+        destination,
+        clientRenderedSuspenseBoundaryErrorAttrInterstitial
+      ));
+    writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);
+    flushSubtree(request, destination, segment, hoistableState);
+    (request = boundary.fallbackPreamble) &&
+      writePreambleContribution(destination, request);
+    return writeChunkAndReturn(destination, endSuspenseBoundary);
+  }
+  if (1 !== boundary.status)
+    return (
+      0 === boundary.status &&
+        (boundary.rootSegmentID = request.nextSegmentId++),
+      0 < boundary.completedSegments.length &&
+        request.partialBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      hoistableState &&
+        ((boundary = boundary.fallbackState),
+        boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        boundary.stylesheets.forEach(
+          hoistStylesheetDependency,
+          hoistableState
+        )),
+      flushSubtree(request, destination, segment, hoistableState),
+      writeChunkAndReturn(destination, endSuspenseBoundary)
+    );
+  if (boundary.byteSize > request.progressiveChunkSize)
+    return (
+      (boundary.rootSegmentID = request.nextSegmentId++),
+      request.completedBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      flushSubtree(request, destination, segment, hoistableState),
+      writeChunkAndReturn(destination, endSuspenseBoundary)
+    );
+  hoistableState &&
+    ((segment = boundary.contentState),
+    segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+    segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+  writeChunkAndReturn(destination, startCompletedSuspenseBoundary);
+  segment = boundary.completedSegments;
+  if (1 !== segment.length) throw Error(formatProdErrorMessage(391));
+  flushSegment(request, destination, segment[0], hoistableState);
+  (request = boundary.contentPreamble) &&
+    writePreambleContribution(destination, request);
+  return writeChunkAndReturn(destination, endSuspenseBoundary);
+}
+function flushSegmentContainer(request, destination, segment, hoistableState) {
+  writeStartSegment(
+    destination,
+    request.renderState,
+    segment.parentFormatContext,
+    segment.id
+  );
+  flushSegment(request, destination, segment, hoistableState);
+  return writeEndSegment(destination, segment.parentFormatContext);
+}
+function flushCompletedBoundary(request, destination, boundary) {
+  for (
+    var completedSegments = boundary.completedSegments, i = 0;
+    i < completedSegments.length;
+    i++
+  )
+    flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      completedSegments[i]
+    );
+  completedSegments.length = 0;
+  writeHoistablesForBoundary(
+    destination,
+    boundary.contentState,
+    request.renderState
+  );
+  completedSegments = request.resumableState;
+  request = request.renderState;
+  i = boundary.rootSegmentID;
+  boundary = boundary.contentState;
+  var requiresStyleInsertion = request.stylesToHoist;
+  request.stylesToHoist = !1;
+  writeChunk(destination, request.startInlineScript);
+  requiresStyleInsertion
+    ? 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 10),
+        writeChunk(destination, completeBoundaryWithStylesScript1FullBoth))
+      : 0 === (completedSegments.instructions & 8)
+        ? ((completedSegments.instructions |= 8),
+          writeChunk(destination, completeBoundaryWithStylesScript1FullPartial))
+        : writeChunk(destination, completeBoundaryWithStylesScript1Partial)
+    : 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 2),
+        writeChunk(destination, completeBoundaryScript1Full))
+      : writeChunk(destination, completeBoundaryScript1Partial);
+  completedSegments = stringToChunk(i.toString(16));
+  writeChunk(destination, request.boundaryPrefix);
+  writeChunk(destination, completedSegments);
+  writeChunk(destination, completeBoundaryScript2);
+  writeChunk(destination, request.segmentPrefix);
+  writeChunk(destination, completedSegments);
+  requiresStyleInsertion
+    ? (writeChunk(destination, completeBoundaryScript3a),
+      writeStyleResourceDependenciesInJS(destination, boundary))
+    : writeChunk(destination, completeBoundaryScript3b);
+  boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd);
+  return writeBootstrap(destination, request) && boundary;
+}
+function flushPartiallyCompletedSegment(
+  request,
+  destination,
+  boundary,
+  segment
+) {
+  if (2 === segment.status) return !0;
+  var hoistableState = boundary.contentState,
+    segmentID = segment.id;
+  if (-1 === segmentID) {
+    if (-1 === (segment.id = boundary.rootSegmentID))
+      throw Error(formatProdErrorMessage(392));
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  }
+  if (segmentID === boundary.rootSegmentID)
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  flushSegmentContainer(request, destination, segment, hoistableState);
+  boundary = request.resumableState;
+  request = request.renderState;
+  writeChunk(destination, request.startInlineScript);
+  0 === (boundary.instructions & 1)
+    ? ((boundary.instructions |= 1),
+      writeChunk(destination, completeSegmentScript1Full))
+    : writeChunk(destination, completeSegmentScript1Partial);
+  writeChunk(destination, request.segmentPrefix);
+  segmentID = stringToChunk(segmentID.toString(16));
+  writeChunk(destination, segmentID);
+  writeChunk(destination, completeSegmentScript2);
+  writeChunk(destination, request.placeholderPrefix);
+  writeChunk(destination, segmentID);
+  destination = writeChunkAndReturn(destination, completeSegmentScriptEnd);
+  return destination;
+}
+function flushCompletedQueues(request, destination) {
+  currentView = new Uint8Array(2048);
+  writtenBytes = 0;
+  try {
+    if (!(0 < request.pendingRootTasks)) {
+      var i,
+        completedRootSegment = request.completedRootSegment;
+      if (null !== completedRootSegment) {
+        if (5 === completedRootSegment.status) return;
+        var completedPreambleSegments = request.completedPreambleSegments;
+        if (null === completedPreambleSegments) return;
+        var renderState = request.renderState,
+          preamble = renderState.preamble,
+          htmlChunks = preamble.htmlChunks,
+          headChunks = preamble.headChunks,
+          i$jscomp$0;
+        if (htmlChunks) {
+          for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+            writeChunk(destination, htmlChunks[i$jscomp$0]);
+          if (headChunks)
+            for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+              writeChunk(destination, headChunks[i$jscomp$0]);
+          else
+            writeChunk(destination, startChunkForTag("head")),
+              writeChunk(destination, endOfStartTag);
+        } else if (headChunks)
+          for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+            writeChunk(destination, headChunks[i$jscomp$0]);
+        var charsetChunks = renderState.charsetChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++)
+          writeChunk(destination, charsetChunks[i$jscomp$0]);
+        charsetChunks.length = 0;
+        renderState.preconnects.forEach(flushResource, destination);
+        renderState.preconnects.clear();
+        var viewportChunks = renderState.viewportChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++)
+          writeChunk(destination, viewportChunks[i$jscomp$0]);
+        viewportChunks.length = 0;
+        renderState.fontPreloads.forEach(flushResource, destination);
+        renderState.fontPreloads.clear();
+        renderState.highImagePreloads.forEach(flushResource, destination);
+        renderState.highImagePreloads.clear();
+        renderState.styles.forEach(flushStylesInPreamble, destination);
+        var importMapChunks = renderState.importMapChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++)
+          writeChunk(destination, importMapChunks[i$jscomp$0]);
+        importMapChunks.length = 0;
+        renderState.bootstrapScripts.forEach(flushResource, destination);
+        renderState.scripts.forEach(flushResource, destination);
+        renderState.scripts.clear();
+        renderState.bulkPreloads.forEach(flushResource, destination);
+        renderState.bulkPreloads.clear();
+        var hoistableChunks = renderState.hoistableChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++)
+          writeChunk(destination, hoistableChunks[i$jscomp$0]);
+        for (
+          renderState = hoistableChunks.length = 0;
+          renderState < completedPreambleSegments.length;
+          renderState++
+        ) {
+          var segments = completedPreambleSegments[renderState];
+          for (preamble = 0; preamble < segments.length; preamble++)
+            flushSegment(request, destination, segments[preamble], null);
+        }
+        var preamble$jscomp$0 = request.renderState.preamble,
+          headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+        (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) &&
+          writeChunk(destination, endChunkForTag("head"));
+        var bodyChunks = preamble$jscomp$0.bodyChunks;
+        if (bodyChunks)
+          for (
+            completedPreambleSegments = 0;
+            completedPreambleSegments < bodyChunks.length;
+            completedPreambleSegments++
+          )
+            writeChunk(destination, bodyChunks[completedPreambleSegments]);
+        flushSegment(request, destination, completedRootSegment, null);
+        request.completedRootSegment = null;
+        writeBootstrap(destination, request.renderState);
+      }
+      var renderState$jscomp$0 = request.renderState;
+      completedRootSegment = 0;
+      var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < viewportChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, viewportChunks$jscomp$0[completedRootSegment]);
+      viewportChunks$jscomp$0.length = 0;
+      renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+      renderState$jscomp$0.preconnects.clear();
+      renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.fontPreloads.clear();
+      renderState$jscomp$0.highImagePreloads.forEach(
+        flushResource,
+        destination
+      );
+      renderState$jscomp$0.highImagePreloads.clear();
+      renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+      renderState$jscomp$0.scripts.forEach(flushResource, destination);
+      renderState$jscomp$0.scripts.clear();
+      renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.bulkPreloads.clear();
+      var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < hoistableChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, hoistableChunks$jscomp$0[completedRootSegment]);
+      hoistableChunks$jscomp$0.length = 0;
+      var clientRenderedBoundaries = request.clientRenderedBoundaries;
+      for (i = 0; i < clientRenderedBoundaries.length; i++) {
+        var boundary = clientRenderedBoundaries[i];
+        renderState$jscomp$0 = destination;
+        var resumableState = request.resumableState,
+          renderState$jscomp$1 = request.renderState,
+          id = boundary.rootSegmentID,
+          errorDigest = boundary.errorDigest;
+        writeChunk(
+          renderState$jscomp$0,
+          renderState$jscomp$1.startInlineScript
+        );
+        0 === (resumableState.instructions & 4)
+          ? ((resumableState.instructions |= 4),
+            writeChunk(renderState$jscomp$0, clientRenderScript1Full))
+          : writeChunk(renderState$jscomp$0, clientRenderScript1Partial);
+        writeChunk(renderState$jscomp$0, renderState$jscomp$1.boundaryPrefix);
+        writeChunk(renderState$jscomp$0, stringToChunk(id.toString(16)));
+        writeChunk(renderState$jscomp$0, clientRenderScript1A);
+        errorDigest &&
+          (writeChunk(
+            renderState$jscomp$0,
+            clientRenderErrorScriptArgInterstitial
+          ),
+          writeChunk(
+            renderState$jscomp$0,
+            stringToChunk(
+              escapeJSStringsForInstructionScripts(errorDigest || "")
+            )
+          ));
+        var JSCompiler_inline_result = writeChunkAndReturn(
+          renderState$jscomp$0,
+          clientRenderScriptEnd
+        );
+        if (!JSCompiler_inline_result) {
+          request.destination = null;
+          i++;
+          clientRenderedBoundaries.splice(0, i);
+          return;
+        }
+      }
+      clientRenderedBoundaries.splice(0, i);
+      var completedBoundaries = request.completedBoundaries;
+      for (i = 0; i < completedBoundaries.length; i++)
+        if (
+          !flushCompletedBoundary(request, destination, completedBoundaries[i])
+        ) {
+          request.destination = null;
+          i++;
+          completedBoundaries.splice(0, i);
+          return;
+        }
+      completedBoundaries.splice(0, i);
+      completeWriting(destination);
+      currentView = new Uint8Array(2048);
+      writtenBytes = 0;
+      var partialBoundaries = request.partialBoundaries;
+      for (i = 0; i < partialBoundaries.length; i++) {
+        var boundary$51 = partialBoundaries[i];
+        a: {
+          clientRenderedBoundaries = request;
+          boundary = destination;
+          var completedSegments = boundary$51.completedSegments;
+          for (
+            JSCompiler_inline_result = 0;
+            JSCompiler_inline_result < completedSegments.length;
+            JSCompiler_inline_result++
+          )
+            if (
+              !flushPartiallyCompletedSegment(
+                clientRenderedBoundaries,
+                boundary,
+                boundary$51,
+                completedSegments[JSCompiler_inline_result]
+              )
+            ) {
+              JSCompiler_inline_result++;
+              completedSegments.splice(0, JSCompiler_inline_result);
+              var JSCompiler_inline_result$jscomp$0 = !1;
+              break a;
+            }
+          completedSegments.splice(0, JSCompiler_inline_result);
+          JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+            boundary,
+            boundary$51.contentState,
+            clientRenderedBoundaries.renderState
+          );
+        }
+        if (!JSCompiler_inline_result$jscomp$0) {
+          request.destination = null;
+          i++;
+          partialBoundaries.splice(0, i);
+          return;
+        }
+      }
+      partialBoundaries.splice(0, i);
+      var largeBoundaries = request.completedBoundaries;
+      for (i = 0; i < largeBoundaries.length; i++)
+        if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) {
+          request.destination = null;
+          i++;
+          largeBoundaries.splice(0, i);
+          return;
+        }
+      largeBoundaries.splice(0, i);
+    }
+  } finally {
+    0 === request.allPendingTasks &&
+    0 === request.pingedTasks.length &&
+    0 === request.clientRenderedBoundaries.length &&
+    0 === request.completedBoundaries.length
+      ? ((request.flushScheduled = !1),
+        (i = request.resumableState),
+        i.hasBody && writeChunk(destination, endChunkForTag("body")),
+        i.hasHtml && writeChunk(destination, endChunkForTag("html")),
+        completeWriting(destination),
+        (request.status = 14),
+        destination.close(),
+        (request.destination = null))
+      : completeWriting(destination);
+  }
+}
+function startWork(request) {
+  request.flushScheduled = null !== request.destination;
+  scheduleMicrotask(function () {
+    return performWork(request);
+  });
+  scheduleWork(function () {
+    10 === request.status && (request.status = 11);
+    null === request.trackedPostpones &&
+      safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+  });
+}
+function enqueueFlush(request) {
+  !1 === request.flushScheduled &&
+    0 === request.pingedTasks.length &&
+    null !== request.destination &&
+    ((request.flushScheduled = !0),
+    scheduleWork(function () {
+      var destination = request.destination;
+      destination
+        ? flushCompletedQueues(request, destination)
+        : (request.flushScheduled = !1);
+    }));
+}
+function startFlowing(request, destination) {
+  if (13 === request.status)
+    (request.status = 14), closeWithError(destination, request.fatalError);
+  else if (14 !== request.status && null === request.destination) {
+    request.destination = destination;
+    try {
+      flushCompletedQueues(request, destination);
+    } catch (error) {
+      logRecoverableError(request, error, {}), fatalError(request, error);
+    }
+  }
+}
+function abort(request, reason) {
+  if (11 === request.status || 10 === request.status) request.status = 12;
+  try {
+    var abortableTasks = request.abortableTasks;
+    if (0 < abortableTasks.size) {
+      var error =
+        void 0 === reason
+          ? Error(formatProdErrorMessage(432))
+          : "object" === typeof reason &&
+              null !== reason &&
+              "function" === typeof reason.then
+            ? Error(formatProdErrorMessage(530))
+            : reason;
+      request.fatalError = error;
+      abortableTasks.forEach(function (task) {
+        return abortTask(task, request, error);
+      });
+      abortableTasks.clear();
+    }
+    null !== request.destination &&
+      flushCompletedQueues(request, request.destination);
+  } catch (error$53) {
+    logRecoverableError(request, error$53, {}), fatalError(request, error$53);
+  }
+}
+function ensureCorrectIsomorphicReactVersion() {
+  var isomorphicReactPackageVersion = React.version;
+  if ("19.1.1" !== isomorphicReactPackageVersion)
+    throw Error(
+      formatProdErrorMessage(
+        527,
+        isomorphicReactPackageVersion,
+        "19.1.1"
+      )
+    );
+}
+ensureCorrectIsomorphicReactVersion();
+ensureCorrectIsomorphicReactVersion();
+exports.prerender = function (children, options) {
+  return new Promise(function (resolve, reject) {
+    var onHeaders = options ? options.onHeaders : void 0,
+      onHeadersImpl;
+    onHeaders &&
+      (onHeadersImpl = function (headersDescriptor) {
+        onHeaders(new Headers(headersDescriptor));
+      });
+    var resources = createResumableState(
+        options ? options.identifierPrefix : void 0,
+        options ? options.unstable_externalRuntimeSrc : void 0,
+        options ? options.bootstrapScriptContent : void 0,
+        options ? options.bootstrapScripts : void 0,
+        options ? options.bootstrapModules : void 0
+      ),
+      request = createPrerenderRequest(
+        children,
+        resources,
+        createRenderState(
+          resources,
+          void 0,
+          options ? options.unstable_externalRuntimeSrc : void 0,
+          options ? options.importMap : void 0,
+          onHeadersImpl,
+          options ? options.maxHeadersLength : void 0
+        ),
+        createRootFormatContext(options ? options.namespaceURI : void 0),
+        options ? options.progressiveChunkSize : void 0,
+        options ? options.onError : void 0,
+        function () {
+          var result = {
+            prelude: new ReadableStream(
+              {
+                type: "bytes",
+                pull: function (controller) {
+                  startFlowing(request, controller);
+                },
+                cancel: function (reason) {
+                  request.destination = null;
+                  abort(request, reason);
+                }
+              },
+              { highWaterMark: 0 }
+            )
+          };
+          resolve(result);
+        },
+        void 0,
+        void 0,
+        reject,
+        options ? options.onPostpone : void 0
+      );
+    if (options && options.signal) {
+      var signal = options.signal;
+      if (signal.aborted) abort(request, signal.reason);
+      else {
+        var listener = function () {
+          abort(request, signal.reason);
+          signal.removeEventListener("abort", listener);
+        };
+        signal.addEventListener("abort", listener);
+      }
+    }
+    startWork(request);
+  });
+};
+exports.renderToReadableStream = function (children, options) {
+  return new Promise(function (resolve, reject) {
+    var onFatalError,
+      onAllReady,
+      allReady = new Promise(function (res, rej) {
+        onAllReady = res;
+        onFatalError = rej;
+      }),
+      onHeaders = options ? options.onHeaders : void 0,
+      onHeadersImpl;
+    onHeaders &&
+      (onHeadersImpl = function (headersDescriptor) {
+        onHeaders(new Headers(headersDescriptor));
+      });
+    var resumableState = createResumableState(
+        options ? options.identifierPrefix : void 0,
+        options ? options.unstable_externalRuntimeSrc : void 0,
+        options ? options.bootstrapScriptContent : void 0,
+        options ? options.bootstrapScripts : void 0,
+        options ? options.bootstrapModules : void 0
+      ),
+      request = createRequest(
+        children,
+        resumableState,
+        createRenderState(
+          resumableState,
+          options ? options.nonce : void 0,
+          options ? options.unstable_externalRuntimeSrc : void 0,
+          options ? options.importMap : void 0,
+          onHeadersImpl,
+          options ? options.maxHeadersLength : void 0
+        ),
+        createRootFormatContext(options ? options.namespaceURI : void 0),
+        options ? options.progressiveChunkSize : void 0,
+        options ? options.onError : void 0,
+        onAllReady,
+        function () {
+          var stream = new ReadableStream(
+            {
+              type: "bytes",
+              pull: function (controller) {
+                startFlowing(request, controller);
+              },
+              cancel: function (reason) {
+                request.destination = null;
+                abort(request, reason);
+              }
+            },
+            { highWaterMark: 0 }
+          );
+          stream.allReady = allReady;
+          resolve(stream);
+        },
+        function (error) {
+          allReady.catch(function () {});
+          reject(error);
+        },
+        onFatalError,
+        options ? options.onPostpone : void 0,
+        options ? options.formState : void 0
+      );
+    if (options && options.signal) {
+      var signal = options.signal;
+      if (signal.aborted) abort(request, signal.reason);
+      else {
+        var listener = function () {
+          abort(request, signal.reason);
+          signal.removeEventListener("abort", listener);
+        };
+        signal.addEventListener("abort", listener);
+      }
+    }
+    startWork(request);
+  });
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/cjs/react-dom-server.bun.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server.bun.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server.bun.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8738 @@
+/**
+* @license React
+ * react-dom-server.bun.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react"),
+  ReactDOM = require("react-dom"),
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+  REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+  REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+  REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+  MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+  isArrayImpl = Array.isArray,
+  jsxPropsParents = new WeakMap(),
+  jsxChildrenParents = new WeakMap();
+function objectName(object) {
+  return Object.prototype.toString
+    .call(object)
+    .replace(/^\[object (.*)\]$/, function (m, p0) {
+      return p0;
+    });
+}
+function describeKeyForErrorMessage(key) {
+  var encodedKey = JSON.stringify(key);
+  return '"' + key + '"' === encodedKey ? key : encodedKey;
+}
+function describeValueForErrorMessage(value) {
+  switch (typeof value) {
+    case "string":
+      return JSON.stringify(
+        10 >= value.length ? value : value.slice(0, 10) + "..."
+      );
+    case "object":
+      if (isArrayImpl(value)) return "[...]";
+      if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG)
+        return "client";
+      value = objectName(value);
+      return "Object" === value ? "{...}" : value;
+    case "function":
+      return value.$$typeof === CLIENT_REFERENCE_TAG
+        ? "client"
+        : (value = value.displayName || value.name)
+          ? "function " + value
+          : "function";
+    default:
+      return String(value);
+  }
+}
+function describeElementType(type) {
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+  }
+  if ("object" === typeof type)
+    switch (type.$$typeof) {
+      case REACT_FORWARD_REF_TYPE:
+        return describeElementType(type.render);
+      case REACT_MEMO_TYPE:
+        return describeElementType(type.type);
+      case REACT_LAZY_TYPE:
+        var payload = type._payload;
+        type = type._init;
+        try {
+          return describeElementType(type(payload));
+        } catch (x) {}
+    }
+  return "";
+}
+var CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference");
+function describeObjectForErrorMessage(objectOrArray, expandedName) {
+  var objKind = objectName(objectOrArray);
+  if ("Object" !== objKind && "Array" !== objKind) return objKind;
+  var start = -1,
+    length = 0;
+  if (isArrayImpl(objectOrArray))
+    if (jsxChildrenParents.has(objectOrArray)) {
+      var type = jsxChildrenParents.get(objectOrArray);
+      objKind = "<" + describeElementType(type) + ">";
+      for (var i = 0; i < objectOrArray.length; i++) {
+        var value = objectOrArray[i];
+        value =
+          "string" === typeof value
+            ? value
+            : "object" === typeof value && null !== value
+              ? "{" + describeObjectForErrorMessage(value) + "}"
+              : "{" + describeValueForErrorMessage(value) + "}";
+        "" + i === expandedName
+          ? ((start = objKind.length),
+            (length = value.length),
+            (objKind += value))
+          : (objKind =
+              15 > value.length && 40 > objKind.length + value.length
+                ? objKind + value
+                : objKind + "{...}");
+      }
+      objKind += "</" + describeElementType(type) + ">";
+    } else {
+      objKind = "[";
+      for (type = 0; type < objectOrArray.length; type++)
+        0 < type && (objKind += ", "),
+          (i = objectOrArray[type]),
+          (i =
+            "object" === typeof i && null !== i
+              ? describeObjectForErrorMessage(i)
+              : describeValueForErrorMessage(i)),
+          "" + type === expandedName
+            ? ((start = objKind.length), (length = i.length), (objKind += i))
+            : (objKind =
+                10 > i.length && 40 > objKind.length + i.length
+                  ? objKind + i
+                  : objKind + "...");
+      objKind += "]";
+    }
+  else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE)
+    objKind = "<" + describeElementType(objectOrArray.type) + "/>";
+  else {
+    if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return "client";
+    if (jsxPropsParents.has(objectOrArray)) {
+      objKind = jsxPropsParents.get(objectOrArray);
+      objKind = "<" + (describeElementType(objKind) || "...");
+      type = Object.keys(objectOrArray);
+      for (i = 0; i < type.length; i++) {
+        objKind += " ";
+        value = type[i];
+        objKind += describeKeyForErrorMessage(value) + "=";
+        var _value2 = objectOrArray[value];
+        var _substr2 =
+          value === expandedName &&
+          "object" === typeof _value2 &&
+          null !== _value2
+            ? describeObjectForErrorMessage(_value2)
+            : describeValueForErrorMessage(_value2);
+        "string" !== typeof _value2 && (_substr2 = "{" + _substr2 + "}");
+        value === expandedName
+          ? ((start = objKind.length),
+            (length = _substr2.length),
+            (objKind += _substr2))
+          : (objKind =
+              10 > _substr2.length && 40 > objKind.length + _substr2.length
+                ? objKind + _substr2
+                : objKind + "...");
+      }
+      objKind += ">";
+    } else {
+      objKind = "{";
+      type = Object.keys(objectOrArray);
+      for (i = 0; i < type.length; i++)
+        0 < i && (objKind += ", "),
+          (value = type[i]),
+          (objKind += describeKeyForErrorMessage(value) + ": "),
+          (_value2 = objectOrArray[value]),
+          (_value2 =
+            "object" === typeof _value2 && null !== _value2
+              ? describeObjectForErrorMessage(_value2)
+              : describeValueForErrorMessage(_value2)),
+          value === expandedName
+            ? ((start = objKind.length),
+              (length = _value2.length),
+              (objKind += _value2))
+            : (objKind =
+                10 > _value2.length && 40 > objKind.length + _value2.length
+                  ? objKind + _value2
+                  : objKind + "...");
+      objKind += "}";
+    }
+  }
+  return void 0 === expandedName
+    ? objKind
+    : -1 < start && 0 < length
+      ? ((objectOrArray = " ".repeat(start) + "^".repeat(length)),
+        "\n  " + objKind + "\n  " + objectOrArray)
+      : "\n  " + objKind;
+}
+var scheduleMicrotask = queueMicrotask;
+function flushBuffered(destination) {
+  "function" === typeof destination.flush && destination.flush();
+}
+function writeChunk(destination, chunk) {
+  0 !== chunk.length && destination.write(chunk);
+}
+function closeWithError(destination, error) {
+  "function" === typeof destination.error
+    ? destination.error(error)
+    : destination.close();
+}
+var assign = Object.assign;
+function typeName(value) {
+  return (
+    ("function" === typeof Symbol &&
+      Symbol.toStringTag &&
+      value[Symbol.toStringTag]) ||
+    value.constructor.name ||
+    "Object"
+  );
+}
+function willCoercionThrow(value) {
+  try {
+    return testStringCoercion(value), !1;
+  } catch (e) {
+    return !0;
+  }
+}
+function testStringCoercion(value) {
+  return "" + value;
+}
+function checkAttributeStringCoercion(value, attributeName) {
+  if (willCoercionThrow(value))
+    return (
+      console.error(
+        "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",
+        attributeName,
+        typeName(value)
+      ),
+      testStringCoercion(value)
+    );
+}
+function checkCSSPropertyStringCoercion(value, propName) {
+  if (willCoercionThrow(value))
+    return (
+      console.error(
+        "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",
+        propName,
+        typeName(value)
+      ),
+      testStringCoercion(value)
+    );
+}
+function checkHtmlStringCoercion(value) {
+  if (willCoercionThrow(value))
+    return (
+      console.error(
+        "The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.",
+        typeName(value)
+      ),
+      testStringCoercion(value)
+    );
+}
+var hasOwnProperty = Object.prototype.hasOwnProperty,
+  VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+    "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  illegalAttributeNameCache = {},
+  validatedAttributeNameCache = {};
+function isAttributeNameSafe(attributeName) {
+  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+    return !0;
+  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+    return (validatedAttributeNameCache[attributeName] = !0);
+  illegalAttributeNameCache[attributeName] = !0;
+  console.error("Invalid attribute name: `%s`", attributeName);
+  return !1;
+}
+var unitlessNumbers = new Set(
+    "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+      " "
+    )
+  ),
+  aliases = new Map([
+    ["acceptCharset", "accept-charset"],
+    ["htmlFor", "for"],
+    ["httpEquiv", "http-equiv"],
+    ["crossOrigin", "crossorigin"],
+    ["accentHeight", "accent-height"],
+    ["alignmentBaseline", "alignment-baseline"],
+    ["arabicForm", "arabic-form"],
+    ["baselineShift", "baseline-shift"],
+    ["capHeight", "cap-height"],
+    ["clipPath", "clip-path"],
+    ["clipRule", "clip-rule"],
+    ["colorInterpolation", "color-interpolation"],
+    ["colorInterpolationFilters", "color-interpolation-filters"],
+    ["colorProfile", "color-profile"],
+    ["colorRendering", "color-rendering"],
+    ["dominantBaseline", "dominant-baseline"],
+    ["enableBackground", "enable-background"],
+    ["fillOpacity", "fill-opacity"],
+    ["fillRule", "fill-rule"],
+    ["floodColor", "flood-color"],
+    ["floodOpacity", "flood-opacity"],
+    ["fontFamily", "font-family"],
+    ["fontSize", "font-size"],
+    ["fontSizeAdjust", "font-size-adjust"],
+    ["fontStretch", "font-stretch"],
+    ["fontStyle", "font-style"],
+    ["fontVariant", "font-variant"],
+    ["fontWeight", "font-weight"],
+    ["glyphName", "glyph-name"],
+    ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+    ["glyphOrientationVertical", "glyph-orientation-vertical"],
+    ["horizAdvX", "horiz-adv-x"],
+    ["horizOriginX", "horiz-origin-x"],
+    ["imageRendering", "image-rendering"],
+    ["letterSpacing", "letter-spacing"],
+    ["lightingColor", "lighting-color"],
+    ["markerEnd", "marker-end"],
+    ["markerMid", "marker-mid"],
+    ["markerStart", "marker-start"],
+    ["overlinePosition", "overline-position"],
+    ["overlineThickness", "overline-thickness"],
+    ["paintOrder", "paint-order"],
+    ["panose-1", "panose-1"],
+    ["pointerEvents", "pointer-events"],
+    ["renderingIntent", "rendering-intent"],
+    ["shapeRendering", "shape-rendering"],
+    ["stopColor", "stop-color"],
+    ["stopOpacity", "stop-opacity"],
+    ["strikethroughPosition", "strikethrough-position"],
+    ["strikethroughThickness", "strikethrough-thickness"],
+    ["strokeDasharray", "stroke-dasharray"],
+    ["strokeDashoffset", "stroke-dashoffset"],
+    ["strokeLinecap", "stroke-linecap"],
+    ["strokeLinejoin", "stroke-linejoin"],
+    ["strokeMiterlimit", "stroke-miterlimit"],
+    ["strokeOpacity", "stroke-opacity"],
+    ["strokeWidth", "stroke-width"],
+    ["textAnchor", "text-anchor"],
+    ["textDecoration", "text-decoration"],
+    ["textRendering", "text-rendering"],
+    ["transformOrigin", "transform-origin"],
+    ["underlinePosition", "underline-position"],
+    ["underlineThickness", "underline-thickness"],
+    ["unicodeBidi", "unicode-bidi"],
+    ["unicodeRange", "unicode-range"],
+    ["unitsPerEm", "units-per-em"],
+    ["vAlphabetic", "v-alphabetic"],
+    ["vHanging", "v-hanging"],
+    ["vIdeographic", "v-ideographic"],
+    ["vMathematical", "v-mathematical"],
+    ["vectorEffect", "vector-effect"],
+    ["vertAdvY", "vert-adv-y"],
+    ["vertOriginX", "vert-origin-x"],
+    ["vertOriginY", "vert-origin-y"],
+    ["wordSpacing", "word-spacing"],
+    ["writingMode", "writing-mode"],
+    ["xmlnsXlink", "xmlns:xlink"],
+    ["xHeight", "x-height"]
+  ]),
+  hasReadOnlyValue = {
+    button: !0,
+    checkbox: !0,
+    image: !0,
+    hidden: !0,
+    radio: !0,
+    reset: !0,
+    submit: !0
+  };
+function checkControlledValueProps(tagName, props) {
+  hasReadOnlyValue[props.type] ||
+    props.onChange ||
+    props.onInput ||
+    props.readOnly ||
+    props.disabled ||
+    null == props.value ||
+    ("select" === tagName
+      ? console.error(
+          "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`."
+        )
+      : console.error(
+          "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."
+        ));
+  props.onChange ||
+    props.readOnly ||
+    props.disabled ||
+    null == props.checked ||
+    console.error(
+      "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`."
+    );
+}
+var ariaProperties = {
+    "aria-current": 0,
+    "aria-description": 0,
+    "aria-details": 0,
+    "aria-disabled": 0,
+    "aria-hidden": 0,
+    "aria-invalid": 0,
+    "aria-keyshortcuts": 0,
+    "aria-label": 0,
+    "aria-roledescription": 0,
+    "aria-autocomplete": 0,
+    "aria-checked": 0,
+    "aria-expanded": 0,
+    "aria-haspopup": 0,
+    "aria-level": 0,
+    "aria-modal": 0,
+    "aria-multiline": 0,
+    "aria-multiselectable": 0,
+    "aria-orientation": 0,
+    "aria-placeholder": 0,
+    "aria-pressed": 0,
+    "aria-readonly": 0,
+    "aria-required": 0,
+    "aria-selected": 0,
+    "aria-sort": 0,
+    "aria-valuemax": 0,
+    "aria-valuemin": 0,
+    "aria-valuenow": 0,
+    "aria-valuetext": 0,
+    "aria-atomic": 0,
+    "aria-busy": 0,
+    "aria-live": 0,
+    "aria-relevant": 0,
+    "aria-dropeffect": 0,
+    "aria-grabbed": 0,
+    "aria-activedescendant": 0,
+    "aria-colcount": 0,
+    "aria-colindex": 0,
+    "aria-colspan": 0,
+    "aria-controls": 0,
+    "aria-describedby": 0,
+    "aria-errormessage": 0,
+    "aria-flowto": 0,
+    "aria-labelledby": 0,
+    "aria-owns": 0,
+    "aria-posinset": 0,
+    "aria-rowcount": 0,
+    "aria-rowindex": 0,
+    "aria-rowspan": 0,
+    "aria-setsize": 0
+  },
+  warnedProperties$1 = {},
+  rARIA$1 = RegExp(
+    "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  rARIACamel$1 = RegExp(
+    "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  );
+function validateProperty$1(tagName, name) {
+  if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name])
+    return !0;
+  if (rARIACamel$1.test(name)) {
+    tagName = "aria-" + name.slice(4).toLowerCase();
+    tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+    if (null == tagName)
+      return (
+        console.error(
+          "Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.",
+          name
+        ),
+        (warnedProperties$1[name] = !0)
+      );
+    if (name !== tagName)
+      return (
+        console.error(
+          "Invalid ARIA attribute `%s`. Did you mean `%s`?",
+          name,
+          tagName
+        ),
+        (warnedProperties$1[name] = !0)
+      );
+  }
+  if (rARIA$1.test(name)) {
+    tagName = name.toLowerCase();
+    tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+    if (null == tagName) return (warnedProperties$1[name] = !0), !1;
+    name !== tagName &&
+      (console.error(
+        "Unknown ARIA attribute `%s`. Did you mean `%s`?",
+        name,
+        tagName
+      ),
+      (warnedProperties$1[name] = !0));
+  }
+  return !0;
+}
+function validateProperties$2(type, props) {
+  var invalidProps = [],
+    key;
+  for (key in props) validateProperty$1(type, key) || invalidProps.push(key);
+  props = invalidProps
+    .map(function (prop) {
+      return "`" + prop + "`";
+    })
+    .join(", ");
+  1 === invalidProps.length
+    ? console.error(
+        "Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+        props,
+        type
+      )
+    : 1 < invalidProps.length &&
+      console.error(
+        "Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+        props,
+        type
+      );
+}
+var didWarnValueNull = !1,
+  possibleStandardNames = {
+    accept: "accept",
+    acceptcharset: "acceptCharset",
+    "accept-charset": "acceptCharset",
+    accesskey: "accessKey",
+    action: "action",
+    allowfullscreen: "allowFullScreen",
+    alt: "alt",
+    as: "as",
+    async: "async",
+    autocapitalize: "autoCapitalize",
+    autocomplete: "autoComplete",
+    autocorrect: "autoCorrect",
+    autofocus: "autoFocus",
+    autoplay: "autoPlay",
+    autosave: "autoSave",
+    capture: "capture",
+    cellpadding: "cellPadding",
+    cellspacing: "cellSpacing",
+    challenge: "challenge",
+    charset: "charSet",
+    checked: "checked",
+    children: "children",
+    cite: "cite",
+    class: "className",
+    classid: "classID",
+    classname: "className",
+    cols: "cols",
+    colspan: "colSpan",
+    content: "content",
+    contenteditable: "contentEditable",
+    contextmenu: "contextMenu",
+    controls: "controls",
+    controlslist: "controlsList",
+    coords: "coords",
+    crossorigin: "crossOrigin",
+    dangerouslysetinnerhtml: "dangerouslySetInnerHTML",
+    data: "data",
+    datetime: "dateTime",
+    default: "default",
+    defaultchecked: "defaultChecked",
+    defaultvalue: "defaultValue",
+    defer: "defer",
+    dir: "dir",
+    disabled: "disabled",
+    disablepictureinpicture: "disablePictureInPicture",
+    disableremoteplayback: "disableRemotePlayback",
+    download: "download",
+    draggable: "draggable",
+    enctype: "encType",
+    enterkeyhint: "enterKeyHint",
+    fetchpriority: "fetchPriority",
+    for: "htmlFor",
+    form: "form",
+    formmethod: "formMethod",
+    formaction: "formAction",
+    formenctype: "formEncType",
+    formnovalidate: "formNoValidate",
+    formtarget: "formTarget",
+    frameborder: "frameBorder",
+    headers: "headers",
+    height: "height",
+    hidden: "hidden",
+    high: "high",
+    href: "href",
+    hreflang: "hrefLang",
+    htmlfor: "htmlFor",
+    httpequiv: "httpEquiv",
+    "http-equiv": "httpEquiv",
+    icon: "icon",
+    id: "id",
+    imagesizes: "imageSizes",
+    imagesrcset: "imageSrcSet",
+    inert: "inert",
+    innerhtml: "innerHTML",
+    inputmode: "inputMode",
+    integrity: "integrity",
+    is: "is",
+    itemid: "itemID",
+    itemprop: "itemProp",
+    itemref: "itemRef",
+    itemscope: "itemScope",
+    itemtype: "itemType",
+    keyparams: "keyParams",
+    keytype: "keyType",
+    kind: "kind",
+    label: "label",
+    lang: "lang",
+    list: "list",
+    loop: "loop",
+    low: "low",
+    manifest: "manifest",
+    marginwidth: "marginWidth",
+    marginheight: "marginHeight",
+    max: "max",
+    maxlength: "maxLength",
+    media: "media",
+    mediagroup: "mediaGroup",
+    method: "method",
+    min: "min",
+    minlength: "minLength",
+    multiple: "multiple",
+    muted: "muted",
+    name: "name",
+    nomodule: "noModule",
+    nonce: "nonce",
+    novalidate: "noValidate",
+    open: "open",
+    optimum: "optimum",
+    pattern: "pattern",
+    placeholder: "placeholder",
+    playsinline: "playsInline",
+    poster: "poster",
+    preload: "preload",
+    profile: "profile",
+    radiogroup: "radioGroup",
+    readonly: "readOnly",
+    referrerpolicy: "referrerPolicy",
+    rel: "rel",
+    required: "required",
+    reversed: "reversed",
+    role: "role",
+    rows: "rows",
+    rowspan: "rowSpan",
+    sandbox: "sandbox",
+    scope: "scope",
+    scoped: "scoped",
+    scrolling: "scrolling",
+    seamless: "seamless",
+    selected: "selected",
+    shape: "shape",
+    size: "size",
+    sizes: "sizes",
+    span: "span",
+    spellcheck: "spellCheck",
+    src: "src",
+    srcdoc: "srcDoc",
+    srclang: "srcLang",
+    srcset: "srcSet",
+    start: "start",
+    step: "step",
+    style: "style",
+    summary: "summary",
+    tabindex: "tabIndex",
+    target: "target",
+    title: "title",
+    type: "type",
+    usemap: "useMap",
+    value: "value",
+    width: "width",
+    wmode: "wmode",
+    wrap: "wrap",
+    about: "about",
+    accentheight: "accentHeight",
+    "accent-height": "accentHeight",
+    accumulate: "accumulate",
+    additive: "additive",
+    alignmentbaseline: "alignmentBaseline",
+    "alignment-baseline": "alignmentBaseline",
+    allowreorder: "allowReorder",
+    alphabetic: "alphabetic",
+    amplitude: "amplitude",
+    arabicform: "arabicForm",
+    "arabic-form": "arabicForm",
+    ascent: "ascent",
+    attributename: "attributeName",
+    attributetype: "attributeType",
+    autoreverse: "autoReverse",
+    azimuth: "azimuth",
+    basefrequency: "baseFrequency",
+    baselineshift: "baselineShift",
+    "baseline-shift": "baselineShift",
+    baseprofile: "baseProfile",
+    bbox: "bbox",
+    begin: "begin",
+    bias: "bias",
+    by: "by",
+    calcmode: "calcMode",
+    capheight: "capHeight",
+    "cap-height": "capHeight",
+    clip: "clip",
+    clippath: "clipPath",
+    "clip-path": "clipPath",
+    clippathunits: "clipPathUnits",
+    cliprule: "clipRule",
+    "clip-rule": "clipRule",
+    color: "color",
+    colorinterpolation: "colorInterpolation",
+    "color-interpolation": "colorInterpolation",
+    colorinterpolationfilters: "colorInterpolationFilters",
+    "color-interpolation-filters": "colorInterpolationFilters",
+    colorprofile: "colorProfile",
+    "color-profile": "colorProfile",
+    colorrendering: "colorRendering",
+    "color-rendering": "colorRendering",
+    contentscripttype: "contentScriptType",
+    contentstyletype: "contentStyleType",
+    cursor: "cursor",
+    cx: "cx",
+    cy: "cy",
+    d: "d",
+    datatype: "datatype",
+    decelerate: "decelerate",
+    descent: "descent",
+    diffuseconstant: "diffuseConstant",
+    direction: "direction",
+    display: "display",
+    divisor: "divisor",
+    dominantbaseline: "dominantBaseline",
+    "dominant-baseline": "dominantBaseline",
+    dur: "dur",
+    dx: "dx",
+    dy: "dy",
+    edgemode: "edgeMode",
+    elevation: "elevation",
+    enablebackground: "enableBackground",
+    "enable-background": "enableBackground",
+    end: "end",
+    exponent: "exponent",
+    externalresourcesrequired: "externalResourcesRequired",
+    fill: "fill",
+    fillopacity: "fillOpacity",
+    "fill-opacity": "fillOpacity",
+    fillrule: "fillRule",
+    "fill-rule": "fillRule",
+    filter: "filter",
+    filterres: "filterRes",
+    filterunits: "filterUnits",
+    floodopacity: "floodOpacity",
+    "flood-opacity": "floodOpacity",
+    floodcolor: "floodColor",
+    "flood-color": "floodColor",
+    focusable: "focusable",
+    fontfamily: "fontFamily",
+    "font-family": "fontFamily",
+    fontsize: "fontSize",
+    "font-size": "fontSize",
+    fontsizeadjust: "fontSizeAdjust",
+    "font-size-adjust": "fontSizeAdjust",
+    fontstretch: "fontStretch",
+    "font-stretch": "fontStretch",
+    fontstyle: "fontStyle",
+    "font-style": "fontStyle",
+    fontvariant: "fontVariant",
+    "font-variant": "fontVariant",
+    fontweight: "fontWeight",
+    "font-weight": "fontWeight",
+    format: "format",
+    from: "from",
+    fx: "fx",
+    fy: "fy",
+    g1: "g1",
+    g2: "g2",
+    glyphname: "glyphName",
+    "glyph-name": "glyphName",
+    glyphorientationhorizontal: "glyphOrientationHorizontal",
+    "glyph-orientation-horizontal": "glyphOrientationHorizontal",
+    glyphorientationvertical: "glyphOrientationVertical",
+    "glyph-orientation-vertical": "glyphOrientationVertical",
+    glyphref: "glyphRef",
+    gradienttransform: "gradientTransform",
+    gradientunits: "gradientUnits",
+    hanging: "hanging",
+    horizadvx: "horizAdvX",
+    "horiz-adv-x": "horizAdvX",
+    horizoriginx: "horizOriginX",
+    "horiz-origin-x": "horizOriginX",
+    ideographic: "ideographic",
+    imagerendering: "imageRendering",
+    "image-rendering": "imageRendering",
+    in2: "in2",
+    in: "in",
+    inlist: "inlist",
+    intercept: "intercept",
+    k1: "k1",
+    k2: "k2",
+    k3: "k3",
+    k4: "k4",
+    k: "k",
+    kernelmatrix: "kernelMatrix",
+    kernelunitlength: "kernelUnitLength",
+    kerning: "kerning",
+    keypoints: "keyPoints",
+    keysplines: "keySplines",
+    keytimes: "keyTimes",
+    lengthadjust: "lengthAdjust",
+    letterspacing: "letterSpacing",
+    "letter-spacing": "letterSpacing",
+    lightingcolor: "lightingColor",
+    "lighting-color": "lightingColor",
+    limitingconeangle: "limitingConeAngle",
+    local: "local",
+    markerend: "markerEnd",
+    "marker-end": "markerEnd",
+    markerheight: "markerHeight",
+    markermid: "markerMid",
+    "marker-mid": "markerMid",
+    markerstart: "markerStart",
+    "marker-start": "markerStart",
+    markerunits: "markerUnits",
+    markerwidth: "markerWidth",
+    mask: "mask",
+    maskcontentunits: "maskContentUnits",
+    maskunits: "maskUnits",
+    mathematical: "mathematical",
+    mode: "mode",
+    numoctaves: "numOctaves",
+    offset: "offset",
+    opacity: "opacity",
+    operator: "operator",
+    order: "order",
+    orient: "orient",
+    orientation: "orientation",
+    origin: "origin",
+    overflow: "overflow",
+    overlineposition: "overlinePosition",
+    "overline-position": "overlinePosition",
+    overlinethickness: "overlineThickness",
+    "overline-thickness": "overlineThickness",
+    paintorder: "paintOrder",
+    "paint-order": "paintOrder",
+    panose1: "panose1",
+    "panose-1": "panose1",
+    pathlength: "pathLength",
+    patterncontentunits: "patternContentUnits",
+    patterntransform: "patternTransform",
+    patternunits: "patternUnits",
+    pointerevents: "pointerEvents",
+    "pointer-events": "pointerEvents",
+    points: "points",
+    pointsatx: "pointsAtX",
+    pointsaty: "pointsAtY",
+    pointsatz: "pointsAtZ",
+    popover: "popover",
+    popovertarget: "popoverTarget",
+    popovertargetaction: "popoverTargetAction",
+    prefix: "prefix",
+    preservealpha: "preserveAlpha",
+    preserveaspectratio: "preserveAspectRatio",
+    primitiveunits: "primitiveUnits",
+    property: "property",
+    r: "r",
+    radius: "radius",
+    refx: "refX",
+    refy: "refY",
+    renderingintent: "renderingIntent",
+    "rendering-intent": "renderingIntent",
+    repeatcount: "repeatCount",
+    repeatdur: "repeatDur",
+    requiredextensions: "requiredExtensions",
+    requiredfeatures: "requiredFeatures",
+    resource: "resource",
+    restart: "restart",
+    result: "result",
+    results: "results",
+    rotate: "rotate",
+    rx: "rx",
+    ry: "ry",
+    scale: "scale",
+    security: "security",
+    seed: "seed",
+    shaperendering: "shapeRendering",
+    "shape-rendering": "shapeRendering",
+    slope: "slope",
+    spacing: "spacing",
+    specularconstant: "specularConstant",
+    specularexponent: "specularExponent",
+    speed: "speed",
+    spreadmethod: "spreadMethod",
+    startoffset: "startOffset",
+    stddeviation: "stdDeviation",
+    stemh: "stemh",
+    stemv: "stemv",
+    stitchtiles: "stitchTiles",
+    stopcolor: "stopColor",
+    "stop-color": "stopColor",
+    stopopacity: "stopOpacity",
+    "stop-opacity": "stopOpacity",
+    strikethroughposition: "strikethroughPosition",
+    "strikethrough-position": "strikethroughPosition",
+    strikethroughthickness: "strikethroughThickness",
+    "strikethrough-thickness": "strikethroughThickness",
+    string: "string",
+    stroke: "stroke",
+    strokedasharray: "strokeDasharray",
+    "stroke-dasharray": "strokeDasharray",
+    strokedashoffset: "strokeDashoffset",
+    "stroke-dashoffset": "strokeDashoffset",
+    strokelinecap: "strokeLinecap",
+    "stroke-linecap": "strokeLinecap",
+    strokelinejoin: "strokeLinejoin",
+    "stroke-linejoin": "strokeLinejoin",
+    strokemiterlimit: "strokeMiterlimit",
+    "stroke-miterlimit": "strokeMiterlimit",
+    strokewidth: "strokeWidth",
+    "stroke-width": "strokeWidth",
+    strokeopacity: "strokeOpacity",
+    "stroke-opacity": "strokeOpacity",
+    suppresscontenteditablewarning: "suppressContentEditableWarning",
+    suppresshydrationwarning: "suppressHydrationWarning",
+    surfacescale: "surfaceScale",
+    systemlanguage: "systemLanguage",
+    tablevalues: "tableValues",
+    targetx: "targetX",
+    targety: "targetY",
+    textanchor: "textAnchor",
+    "text-anchor": "textAnchor",
+    textdecoration: "textDecoration",
+    "text-decoration": "textDecoration",
+    textlength: "textLength",
+    textrendering: "textRendering",
+    "text-rendering": "textRendering",
+    to: "to",
+    transform: "transform",
+    transformorigin: "transformOrigin",
+    "transform-origin": "transformOrigin",
+    typeof: "typeof",
+    u1: "u1",
+    u2: "u2",
+    underlineposition: "underlinePosition",
+    "underline-position": "underlinePosition",
+    underlinethickness: "underlineThickness",
+    "underline-thickness": "underlineThickness",
+    unicode: "unicode",
+    unicodebidi: "unicodeBidi",
+    "unicode-bidi": "unicodeBidi",
+    unicoderange: "unicodeRange",
+    "unicode-range": "unicodeRange",
+    unitsperem: "unitsPerEm",
+    "units-per-em": "unitsPerEm",
+    unselectable: "unselectable",
+    valphabetic: "vAlphabetic",
+    "v-alphabetic": "vAlphabetic",
+    values: "values",
+    vectoreffect: "vectorEffect",
+    "vector-effect": "vectorEffect",
+    version: "version",
+    vertadvy: "vertAdvY",
+    "vert-adv-y": "vertAdvY",
+    vertoriginx: "vertOriginX",
+    "vert-origin-x": "vertOriginX",
+    vertoriginy: "vertOriginY",
+    "vert-origin-y": "vertOriginY",
+    vhanging: "vHanging",
+    "v-hanging": "vHanging",
+    videographic: "vIdeographic",
+    "v-ideographic": "vIdeographic",
+    viewbox: "viewBox",
+    viewtarget: "viewTarget",
+    visibility: "visibility",
+    vmathematical: "vMathematical",
+    "v-mathematical": "vMathematical",
+    vocab: "vocab",
+    widths: "widths",
+    wordspacing: "wordSpacing",
+    "word-spacing": "wordSpacing",
+    writingmode: "writingMode",
+    "writing-mode": "writingMode",
+    x1: "x1",
+    x2: "x2",
+    x: "x",
+    xchannelselector: "xChannelSelector",
+    xheight: "xHeight",
+    "x-height": "xHeight",
+    xlinkactuate: "xlinkActuate",
+    "xlink:actuate": "xlinkActuate",
+    xlinkarcrole: "xlinkArcrole",
+    "xlink:arcrole": "xlinkArcrole",
+    xlinkhref: "xlinkHref",
+    "xlink:href": "xlinkHref",
+    xlinkrole: "xlinkRole",
+    "xlink:role": "xlinkRole",
+    xlinkshow: "xlinkShow",
+    "xlink:show": "xlinkShow",
+    xlinktitle: "xlinkTitle",
+    "xlink:title": "xlinkTitle",
+    xlinktype: "xlinkType",
+    "xlink:type": "xlinkType",
+    xmlbase: "xmlBase",
+    "xml:base": "xmlBase",
+    xmllang: "xmlLang",
+    "xml:lang": "xmlLang",
+    xmlns: "xmlns",
+    "xml:space": "xmlSpace",
+    xmlnsxlink: "xmlnsXlink",
+    "xmlns:xlink": "xmlnsXlink",
+    xmlspace: "xmlSpace",
+    y1: "y1",
+    y2: "y2",
+    y: "y",
+    ychannelselector: "yChannelSelector",
+    z: "z",
+    zoomandpan: "zoomAndPan"
+  },
+  warnedProperties = {},
+  EVENT_NAME_REGEX = /^on./,
+  INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,
+  rARIA = RegExp(
+    "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  rARIACamel = RegExp(
+    "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  );
+function validateProperty(tagName, name, value, eventRegistry) {
+  if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])
+    return !0;
+  var lowerCasedName = name.toLowerCase();
+  if ("onfocusin" === lowerCasedName || "onfocusout" === lowerCasedName)
+    return (
+      console.error(
+        "React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."
+      ),
+      (warnedProperties[name] = !0)
+    );
+  if (
+    "function" === typeof value &&
+    (("form" === tagName && "action" === name) ||
+      ("input" === tagName && "formAction" === name) ||
+      ("button" === tagName && "formAction" === name))
+  )
+    return !0;
+  if (null != eventRegistry) {
+    tagName = eventRegistry.possibleRegistrationNames;
+    if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))
+      return !0;
+    eventRegistry = tagName.hasOwnProperty(lowerCasedName)
+      ? tagName[lowerCasedName]
+      : null;
+    if (null != eventRegistry)
+      return (
+        console.error(
+          "Invalid event handler property `%s`. Did you mean `%s`?",
+          name,
+          eventRegistry
+        ),
+        (warnedProperties[name] = !0)
+      );
+    if (EVENT_NAME_REGEX.test(name))
+      return (
+        console.error(
+          "Unknown event handler property `%s`. It will be ignored.",
+          name
+        ),
+        (warnedProperties[name] = !0)
+      );
+  } else if (EVENT_NAME_REGEX.test(name))
+    return (
+      INVALID_EVENT_NAME_REGEX.test(name) &&
+        console.error(
+          "Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.",
+          name
+        ),
+      (warnedProperties[name] = !0)
+    );
+  if (rARIA.test(name) || rARIACamel.test(name)) return !0;
+  if ("innerhtml" === lowerCasedName)
+    return (
+      console.error(
+        "Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."
+      ),
+      (warnedProperties[name] = !0)
+    );
+  if ("aria" === lowerCasedName)
+    return (
+      console.error(
+        "The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."
+      ),
+      (warnedProperties[name] = !0)
+    );
+  if (
+    "is" === lowerCasedName &&
+    null !== value &&
+    void 0 !== value &&
+    "string" !== typeof value
+  )
+    return (
+      console.error(
+        "Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.",
+        typeof value
+      ),
+      (warnedProperties[name] = !0)
+    );
+  if ("number" === typeof value && isNaN(value))
+    return (
+      console.error(
+        "Received NaN for the `%s` attribute. If this is expected, cast the value to a string.",
+        name
+      ),
+      (warnedProperties[name] = !0)
+    );
+  if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
+    if (
+      ((lowerCasedName = possibleStandardNames[lowerCasedName]),
+      lowerCasedName !== name)
+    )
+      return (
+        console.error(
+          "Invalid DOM property `%s`. Did you mean `%s`?",
+          name,
+          lowerCasedName
+        ),
+        (warnedProperties[name] = !0)
+      );
+  } else if (name !== lowerCasedName)
+    return (
+      console.error(
+        "React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.",
+        name,
+        lowerCasedName
+      ),
+      (warnedProperties[name] = !0)
+    );
+  switch (name) {
+    case "dangerouslySetInnerHTML":
+    case "children":
+    case "style":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "ref":
+      return !0;
+    case "innerText":
+    case "textContent":
+      return !0;
+  }
+  switch (typeof value) {
+    case "boolean":
+      switch (name) {
+        case "autoFocus":
+        case "checked":
+        case "multiple":
+        case "muted":
+        case "selected":
+        case "contentEditable":
+        case "spellCheck":
+        case "draggable":
+        case "value":
+        case "autoReverse":
+        case "externalResourcesRequired":
+        case "focusable":
+        case "preserveAlpha":
+        case "allowFullScreen":
+        case "async":
+        case "autoPlay":
+        case "controls":
+        case "default":
+        case "defer":
+        case "disabled":
+        case "disablePictureInPicture":
+        case "disableRemotePlayback":
+        case "formNoValidate":
+        case "hidden":
+        case "loop":
+        case "noModule":
+        case "noValidate":
+        case "open":
+        case "playsInline":
+        case "readOnly":
+        case "required":
+        case "reversed":
+        case "scoped":
+        case "seamless":
+        case "itemScope":
+        case "capture":
+        case "download":
+        case "inert":
+          return !0;
+        default:
+          lowerCasedName = name.toLowerCase().slice(0, 5);
+          if ("data-" === lowerCasedName || "aria-" === lowerCasedName)
+            return !0;
+          value
+            ? console.error(
+                'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.',
+                value,
+                name,
+                name,
+                value,
+                name
+              )
+            : console.error(
+                'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',
+                value,
+                name,
+                name,
+                value,
+                name,
+                name,
+                name
+              );
+          return (warnedProperties[name] = !0);
+      }
+    case "function":
+    case "symbol":
+      return (warnedProperties[name] = !0), !1;
+    case "string":
+      if ("false" === value || "true" === value) {
+        switch (name) {
+          case "checked":
+          case "selected":
+          case "multiple":
+          case "muted":
+          case "allowFullScreen":
+          case "async":
+          case "autoPlay":
+          case "controls":
+          case "default":
+          case "defer":
+          case "disabled":
+          case "disablePictureInPicture":
+          case "disableRemotePlayback":
+          case "formNoValidate":
+          case "hidden":
+          case "loop":
+          case "noModule":
+          case "noValidate":
+          case "open":
+          case "playsInline":
+          case "readOnly":
+          case "required":
+          case "reversed":
+          case "scoped":
+          case "seamless":
+          case "itemScope":
+          case "inert":
+            break;
+          default:
+            return !0;
+        }
+        console.error(
+          "Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?",
+          value,
+          name,
+          "false" === value
+            ? "The browser will interpret it as a truthy value."
+            : 'Although this works, it will not work as expected if you pass the string "false".',
+          name,
+          value
+        );
+        warnedProperties[name] = !0;
+      }
+  }
+  return !0;
+}
+function warnUnknownProperties(type, props, eventRegistry) {
+  var unknownProps = [],
+    key;
+  for (key in props)
+    validateProperty(type, key, props[key], eventRegistry) ||
+      unknownProps.push(key);
+  props = unknownProps
+    .map(function (prop) {
+      return "`" + prop + "`";
+    })
+    .join(", ");
+  1 === unknownProps.length
+    ? console.error(
+        "Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+        props,
+        type
+      )
+    : 1 < unknownProps.length &&
+      console.error(
+        "Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+        props,
+        type
+      );
+}
+var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,
+  msPattern$1 = /^-ms-/,
+  hyphenPattern = /-(.)/g,
+  badStyleValueWithSemicolonPattern = /;\s*$/,
+  warnedStyleNames = {},
+  warnedStyleValues = {},
+  warnedForNaNValue = !1,
+  warnedForInfinityValue = !1;
+function camelize(string) {
+  return string.replace(hyphenPattern, function (_, character) {
+    return character.toUpperCase();
+  });
+}
+var matchHtmlRegExp = /["'&<>]/;
+function escapeTextForBrowser(text) {
+  if (
+    "boolean" === typeof text ||
+    "number" === typeof text ||
+    "bigint" === typeof text
+  )
+    return "" + text;
+  checkHtmlStringCoercion(text);
+  text = "" + text;
+  var match = matchHtmlRegExp.exec(text);
+  if (match) {
+    var html = "",
+      index,
+      lastIndex = 0;
+    for (index = match.index; index < text.length; index++) {
+      switch (text.charCodeAt(index)) {
+        case 34:
+          match = "&quot;";
+          break;
+        case 38:
+          match = "&amp;";
+          break;
+        case 39:
+          match = "&#x27;";
+          break;
+        case 60:
+          match = "&lt;";
+          break;
+        case 62:
+          match = "&gt;";
+          break;
+        default:
+          continue;
+      }
+      lastIndex !== index && (html += text.slice(lastIndex, index));
+      lastIndex = index + 1;
+      html += match;
+    }
+    text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+  }
+  return text;
+}
+var uppercasePattern = /([A-Z])/g,
+  msPattern = /^ms-/,
+  isJavaScriptProtocol =
+    /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
+function sanitizeURL(url) {
+  return isJavaScriptProtocol.test("" + url)
+    ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+    : url;
+}
+var ReactSharedInternals =
+    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  ReactDOMSharedInternals =
+    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  NotPending = Object.freeze({
+    pending: !1,
+    data: null,
+    method: null,
+    action: null
+  }),
+  previousDispatcher = ReactDOMSharedInternals.d;
+ReactDOMSharedInternals.d = {
+  f: previousDispatcher.f,
+  r: previousDispatcher.r,
+  D: prefetchDNS,
+  C: preconnect,
+  L: preload,
+  m: preloadModule,
+  X: preinitScript,
+  S: preinitStyle,
+  M: preinitModuleScript
+};
+var NothingSent = 0,
+  SentCompleteSegmentFunction = 1,
+  SentCompleteBoundaryFunction = 2,
+  SentClientRenderFunction = 4,
+  SentStyleInsertionFunction = 8,
+  EXISTS = null,
+  PRELOAD_NO_CREDS = [];
+Object.freeze(PRELOAD_NO_CREDS);
+function escapeEntireInlineScriptContent(scriptText) {
+  checkHtmlStringCoercion(scriptText);
+  return ("" + scriptText).replace(scriptRegex, scriptReplacer);
+}
+var scriptRegex = /(<\/|<)(s)(cript)/gi;
+function scriptReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+}
+var didWarnForNewBooleanPropsWithEmptyValue;
+didWarnForNewBooleanPropsWithEmptyValue = {};
+function createRenderState(
+  resumableState,
+  nonce,
+  externalRuntimeConfig,
+  importMap,
+  onHeaders,
+  maxHeadersLength
+) {
+  var inlineScriptWithNonce =
+      void 0 === nonce
+        ? "<script>"
+        : '<script nonce="' + escapeTextForBrowser(nonce) + '">',
+    idPrefix = resumableState.idPrefix;
+  externalRuntimeConfig = [];
+  var bootstrapScriptContent = resumableState.bootstrapScriptContent,
+    bootstrapScripts = resumableState.bootstrapScripts,
+    bootstrapModules = resumableState.bootstrapModules;
+  void 0 !== bootstrapScriptContent &&
+    externalRuntimeConfig.push(
+      inlineScriptWithNonce,
+      escapeEntireInlineScriptContent(bootstrapScriptContent),
+      "\x3c/script>"
+    );
+  bootstrapScriptContent = [];
+  void 0 !== importMap &&
+    (bootstrapScriptContent.push('<script type="importmap">'),
+    bootstrapScriptContent.push(
+      escapeEntireInlineScriptContent(JSON.stringify(importMap))
+    ),
+    bootstrapScriptContent.push("\x3c/script>"));
+  onHeaders &&
+    "number" === typeof maxHeadersLength &&
+    0 >= maxHeadersLength &&
+    console.error(
+      "React expected a positive non-zero `maxHeadersLength` option but found %s instead. When using the `onHeaders` option you may supply an optional `maxHeadersLength` option as well however, when setting this value to zero or less no headers will be captured.",
+      0 === maxHeadersLength ? "zero" : maxHeadersLength
+    );
+  importMap = onHeaders
+    ? {
+        preconnects: "",
+        fontPreloads: "",
+        highImagePreloads: "",
+        remainingCapacity:
+          2 + ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3)
+      }
+    : null;
+  onHeaders = {
+    placeholderPrefix: idPrefix + "P:",
+    segmentPrefix: idPrefix + "S:",
+    boundaryPrefix: idPrefix + "B:",
+    startInlineScript: inlineScriptWithNonce,
+    preamble: createPreambleState(),
+    externalRuntimeScript: null,
+    bootstrapChunks: externalRuntimeConfig,
+    importMapChunks: bootstrapScriptContent,
+    onHeaders: onHeaders,
+    headers: importMap,
+    resets: {
+      font: {},
+      dns: {},
+      connect: { default: {}, anonymous: {}, credentials: {} },
+      image: {},
+      style: {}
+    },
+    charsetChunks: [],
+    viewportChunks: [],
+    hoistableChunks: [],
+    preconnects: new Set(),
+    fontPreloads: new Set(),
+    highImagePreloads: new Set(),
+    styles: new Map(),
+    bootstrapScripts: new Set(),
+    scripts: new Set(),
+    bulkPreloads: new Set(),
+    preloads: {
+      images: new Map(),
+      stylesheets: new Map(),
+      scripts: new Map(),
+      moduleScripts: new Map()
+    },
+    nonce: nonce,
+    hoistableState: null,
+    stylesToHoist: !1
+  };
+  if (void 0 !== bootstrapScripts)
+    for (importMap = 0; importMap < bootstrapScripts.length; importMap++) {
+      maxHeadersLength = bootstrapScripts[importMap];
+      bootstrapScriptContent = idPrefix = void 0;
+      var props = {
+        rel: "preload",
+        as: "script",
+        fetchPriority: "low",
+        nonce: nonce
+      };
+      "string" === typeof maxHeadersLength
+        ? (props.href = inlineScriptWithNonce = maxHeadersLength)
+        : ((props.href = inlineScriptWithNonce = maxHeadersLength.src),
+          (props.integrity = bootstrapScriptContent =
+            "string" === typeof maxHeadersLength.integrity
+              ? maxHeadersLength.integrity
+              : void 0),
+          (props.crossOrigin = idPrefix =
+            "string" === typeof maxHeadersLength ||
+            null == maxHeadersLength.crossOrigin
+              ? void 0
+              : "use-credentials" === maxHeadersLength.crossOrigin
+                ? "use-credentials"
+                : ""));
+      preloadBootstrapScriptOrModule(
+        resumableState,
+        onHeaders,
+        inlineScriptWithNonce,
+        props
+      );
+      externalRuntimeConfig.push(
+        '<script src="',
+        escapeTextForBrowser(inlineScriptWithNonce)
+      );
+      nonce &&
+        externalRuntimeConfig.push('" nonce="', escapeTextForBrowser(nonce));
+      "string" === typeof bootstrapScriptContent &&
+        externalRuntimeConfig.push(
+          '" integrity="',
+          escapeTextForBrowser(bootstrapScriptContent)
+        );
+      "string" === typeof idPrefix &&
+        externalRuntimeConfig.push(
+          '" crossorigin="',
+          escapeTextForBrowser(idPrefix)
+        );
+      externalRuntimeConfig.push('" async="">\x3c/script>');
+    }
+  if (void 0 !== bootstrapModules)
+    for (
+      bootstrapScripts = 0;
+      bootstrapScripts < bootstrapModules.length;
+      bootstrapScripts++
+    )
+      (importMap = bootstrapModules[bootstrapScripts]),
+        (idPrefix = inlineScriptWithNonce = void 0),
+        (bootstrapScriptContent = {
+          rel: "modulepreload",
+          fetchPriority: "low",
+          nonce: nonce
+        }),
+        "string" === typeof importMap
+          ? (bootstrapScriptContent.href = maxHeadersLength = importMap)
+          : ((bootstrapScriptContent.href = maxHeadersLength = importMap.src),
+            (bootstrapScriptContent.integrity = idPrefix =
+              "string" === typeof importMap.integrity
+                ? importMap.integrity
+                : void 0),
+            (bootstrapScriptContent.crossOrigin = inlineScriptWithNonce =
+              "string" === typeof importMap || null == importMap.crossOrigin
+                ? void 0
+                : "use-credentials" === importMap.crossOrigin
+                  ? "use-credentials"
+                  : "")),
+        preloadBootstrapScriptOrModule(
+          resumableState,
+          onHeaders,
+          maxHeadersLength,
+          bootstrapScriptContent
+        ),
+        externalRuntimeConfig.push(
+          '<script type="module" src="',
+          escapeTextForBrowser(maxHeadersLength)
+        ),
+        nonce &&
+          externalRuntimeConfig.push('" nonce="', escapeTextForBrowser(nonce)),
+        "string" === typeof idPrefix &&
+          externalRuntimeConfig.push(
+            '" integrity="',
+            escapeTextForBrowser(idPrefix)
+          ),
+        "string" === typeof inlineScriptWithNonce &&
+          externalRuntimeConfig.push(
+            '" crossorigin="',
+            escapeTextForBrowser(inlineScriptWithNonce)
+          ),
+        externalRuntimeConfig.push('" async="">\x3c/script>');
+  return onHeaders;
+}
+function createResumableState(
+  identifierPrefix,
+  externalRuntimeConfig,
+  bootstrapScriptContent,
+  bootstrapScripts,
+  bootstrapModules
+) {
+  return {
+    idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+    nextFormID: 0,
+    streamingFormat: 0,
+    bootstrapScriptContent: bootstrapScriptContent,
+    bootstrapScripts: bootstrapScripts,
+    bootstrapModules: bootstrapModules,
+    instructions: NothingSent,
+    hasBody: !1,
+    hasHtml: !1,
+    unknownResources: {},
+    dnsResources: {},
+    connectResources: { default: {}, anonymous: {}, credentials: {} },
+    imageResources: {},
+    styleResources: {},
+    scriptResources: {},
+    moduleUnknownResources: {},
+    moduleScriptResources: {}
+  };
+}
+var NoContribution = 0;
+function createPreambleState() {
+  return {
+    htmlChunks: null,
+    headChunks: null,
+    bodyChunks: null,
+    contribution: NoContribution
+  };
+}
+var ROOT_HTML_MODE = 0,
+  HTML_HTML_MODE = 1,
+  HTML_MODE = 2,
+  HTML_HEAD_MODE = 3,
+  SVG_MODE = 4,
+  MATHML_MODE = 5,
+  HTML_TABLE_MODE = 6,
+  HTML_TABLE_BODY_MODE = 7,
+  HTML_TABLE_ROW_MODE = 8,
+  HTML_COLGROUP_MODE = 9;
+function createFormatContext(insertionMode, selectedValue, tagScope) {
+  return {
+    insertionMode: insertionMode,
+    selectedValue: selectedValue,
+    tagScope: tagScope
+  };
+}
+function createRootFormatContext(namespaceURI) {
+  return createFormatContext(
+    "http://www.w3.org/2000/svg" === namespaceURI
+      ? SVG_MODE
+      : "http://www.w3.org/1998/Math/MathML" === namespaceURI
+        ? MATHML_MODE
+        : ROOT_HTML_MODE,
+    null,
+    0
+  );
+}
+function getChildFormatContext(parentContext, type, props) {
+  switch (type) {
+    case "noscript":
+      return createFormatContext(HTML_MODE, null, parentContext.tagScope | 1);
+    case "select":
+      return createFormatContext(
+        HTML_MODE,
+        null != props.value ? props.value : props.defaultValue,
+        parentContext.tagScope
+      );
+    case "svg":
+      return createFormatContext(SVG_MODE, null, parentContext.tagScope);
+    case "picture":
+      return createFormatContext(HTML_MODE, null, parentContext.tagScope | 2);
+    case "math":
+      return createFormatContext(MATHML_MODE, null, parentContext.tagScope);
+    case "foreignObject":
+      return createFormatContext(HTML_MODE, null, parentContext.tagScope);
+    case "table":
+      return createFormatContext(HTML_TABLE_MODE, null, parentContext.tagScope);
+    case "thead":
+    case "tbody":
+    case "tfoot":
+      return createFormatContext(
+        HTML_TABLE_BODY_MODE,
+        null,
+        parentContext.tagScope
+      );
+    case "colgroup":
+      return createFormatContext(
+        HTML_COLGROUP_MODE,
+        null,
+        parentContext.tagScope
+      );
+    case "tr":
+      return createFormatContext(
+        HTML_TABLE_ROW_MODE,
+        null,
+        parentContext.tagScope
+      );
+    case "head":
+      if (parentContext.insertionMode < HTML_MODE)
+        return createFormatContext(
+          HTML_HEAD_MODE,
+          null,
+          parentContext.tagScope
+        );
+      break;
+    case "html":
+      if (parentContext.insertionMode === ROOT_HTML_MODE)
+        return createFormatContext(
+          HTML_HTML_MODE,
+          null,
+          parentContext.tagScope
+        );
+  }
+  return parentContext.insertionMode >= HTML_TABLE_MODE ||
+    parentContext.insertionMode < HTML_MODE
+    ? createFormatContext(HTML_MODE, null, parentContext.tagScope)
+    : parentContext;
+}
+function pushTextInstance(target, text, renderState, textEmbedded) {
+  if ("" === text) return textEmbedded;
+  textEmbedded && target.push("\x3c!-- --\x3e");
+  target.push(escapeTextForBrowser(text));
+  return !0;
+}
+var styleNameCache = new Map(),
+  styleAttributeStart = ' style="',
+  styleAssign = ":",
+  styleSeparator = ";";
+function pushStyleAttribute(target, style) {
+  if ("object" !== typeof style)
+    throw Error(
+      "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+    );
+  var isFirst = !0,
+    styleName;
+  for (styleName in style)
+    if (hasOwnProperty.call(style, styleName)) {
+      var styleValue = style[styleName];
+      if (
+        null != styleValue &&
+        "boolean" !== typeof styleValue &&
+        "" !== styleValue
+      ) {
+        if (0 === styleName.indexOf("--")) {
+          var nameChunk = escapeTextForBrowser(styleName);
+          checkCSSPropertyStringCoercion(styleValue, styleName);
+          styleValue = escapeTextForBrowser(("" + styleValue).trim());
+        } else {
+          nameChunk = styleName;
+          var value = styleValue;
+          if (-1 < nameChunk.indexOf("-")) {
+            var name = nameChunk;
+            (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) ||
+              ((warnedStyleNames[name] = !0),
+              console.error(
+                "Unsupported style property %s. Did you mean %s?",
+                name,
+                camelize(name.replace(msPattern$1, "ms-"))
+              ));
+          } else if (badVendoredStyleNamePattern.test(nameChunk))
+            (name = nameChunk),
+              (warnedStyleNames.hasOwnProperty(name) &&
+                warnedStyleNames[name]) ||
+                ((warnedStyleNames[name] = !0),
+                console.error(
+                  "Unsupported vendor-prefixed style property %s. Did you mean %s?",
+                  name,
+                  name.charAt(0).toUpperCase() + name.slice(1)
+                ));
+          else if (badStyleValueWithSemicolonPattern.test(value)) {
+            name = nameChunk;
+            var value$jscomp$0 = value;
+            (warnedStyleValues.hasOwnProperty(value$jscomp$0) &&
+              warnedStyleValues[value$jscomp$0]) ||
+              ((warnedStyleValues[value$jscomp$0] = !0),
+              console.error(
+                'Style property values shouldn\'t contain a semicolon. Try "%s: %s" instead.',
+                name,
+                value$jscomp$0.replace(badStyleValueWithSemicolonPattern, "")
+              ));
+          }
+          "number" === typeof value &&
+            (isNaN(value)
+              ? warnedForNaNValue ||
+                ((warnedForNaNValue = !0),
+                console.error(
+                  "`NaN` is an invalid value for the `%s` css style property.",
+                  nameChunk
+                ))
+              : isFinite(value) ||
+                warnedForInfinityValue ||
+                ((warnedForInfinityValue = !0),
+                console.error(
+                  "`Infinity` is an invalid value for the `%s` css style property.",
+                  nameChunk
+                )));
+          nameChunk = styleName;
+          value = styleNameCache.get(nameChunk);
+          void 0 !== value
+            ? (nameChunk = value)
+            : ((value = escapeTextForBrowser(
+                nameChunk
+                  .replace(uppercasePattern, "-$1")
+                  .toLowerCase()
+                  .replace(msPattern, "-ms-")
+              )),
+              styleNameCache.set(nameChunk, value),
+              (nameChunk = value));
+          "number" === typeof styleValue
+            ? (styleValue =
+                0 === styleValue || unitlessNumbers.has(styleName)
+                  ? "" + styleValue
+                  : styleValue + "px")
+            : (checkCSSPropertyStringCoercion(styleValue, styleName),
+              (styleValue = escapeTextForBrowser(("" + styleValue).trim())));
+        }
+        isFirst
+          ? ((isFirst = !1),
+            target.push(
+              styleAttributeStart,
+              nameChunk,
+              styleAssign,
+              styleValue
+            ))
+          : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+      }
+    }
+  isFirst || target.push(attributeEnd);
+}
+var attributeSeparator = " ",
+  attributeAssign = '="',
+  attributeEnd = '"',
+  attributeEmptyString = '=""';
+function pushBooleanAttribute(target, name, value) {
+  value &&
+    "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    target.push(attributeSeparator, name, attributeEmptyString);
+}
+function pushStringAttribute(target, name, value) {
+  "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    "boolean" !== typeof value &&
+    target.push(
+      attributeSeparator,
+      name,
+      attributeAssign,
+      escapeTextForBrowser(value),
+      attributeEnd
+    );
+}
+var actionJavaScriptURL = escapeTextForBrowser(
+  "javascript:throw new Error('React form unexpectedly submitted.')"
+);
+function pushAdditionalFormField(value, key) {
+  this.push('<input type="hidden"');
+  validateAdditionalFormField(value);
+  pushStringAttribute(this, "name", key);
+  pushStringAttribute(this, "value", value);
+  this.push(endOfStartTagSelfClosing);
+}
+function validateAdditionalFormField(value) {
+  if ("string" !== typeof value)
+    throw Error(
+      "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+    );
+}
+function getCustomFormFields(resumableState, formAction) {
+  if ("function" === typeof formAction.$$FORM_ACTION) {
+    var id = resumableState.nextFormID++;
+    resumableState = resumableState.idPrefix + id;
+    try {
+      var customFields = formAction.$$FORM_ACTION(resumableState);
+      if (customFields) {
+        var formData = customFields.data;
+        null != formData && formData.forEach(validateAdditionalFormField);
+      }
+      return customFields;
+    } catch (x) {
+      if ("object" === typeof x && null !== x && "function" === typeof x.then)
+        throw x;
+      console.error(
+        "Failed to serialize an action for progressive enhancement:\n%s",
+        x
+      );
+    }
+  }
+  return null;
+}
+function pushFormActionAttribute(
+  target,
+  resumableState,
+  renderState,
+  formAction,
+  formEncType,
+  formMethod,
+  formTarget,
+  name
+) {
+  var formData = null;
+  if ("function" === typeof formAction) {
+    null === name ||
+      didWarnFormActionName ||
+      ((didWarnFormActionName = !0),
+      console.error(
+        'Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'
+      ));
+    (null === formEncType && null === formMethod) ||
+      didWarnFormActionMethod ||
+      ((didWarnFormActionMethod = !0),
+      console.error(
+        "Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden."
+      ));
+    null === formTarget ||
+      didWarnFormActionTarget ||
+      ((didWarnFormActionTarget = !0),
+      console.error(
+        "Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window."
+      ));
+    var customFields = getCustomFormFields(resumableState, formAction);
+    null !== customFields
+      ? ((name = customFields.name),
+        (formAction = customFields.action || ""),
+        (formEncType = customFields.encType),
+        (formMethod = customFields.method),
+        (formTarget = customFields.target),
+        (formData = customFields.data))
+      : (target.push(
+          attributeSeparator,
+          "formAction",
+          attributeAssign,
+          actionJavaScriptURL,
+          attributeEnd
+        ),
+        (formTarget = formMethod = formEncType = formAction = name = null),
+        injectFormReplayingRuntime(resumableState, renderState));
+  }
+  null != name && pushAttribute(target, "name", name);
+  null != formAction && pushAttribute(target, "formAction", formAction);
+  null != formEncType && pushAttribute(target, "formEncType", formEncType);
+  null != formMethod && pushAttribute(target, "formMethod", formMethod);
+  null != formTarget && pushAttribute(target, "formTarget", formTarget);
+  return formData;
+}
+function pushAttribute(target, name, value) {
+  switch (name) {
+    case "className":
+      pushStringAttribute(target, "class", value);
+      break;
+    case "tabIndex":
+      pushStringAttribute(target, "tabindex", value);
+      break;
+    case "dir":
+    case "role":
+    case "viewBox":
+    case "width":
+    case "height":
+      pushStringAttribute(target, name, value);
+      break;
+    case "style":
+      pushStyleAttribute(target, value);
+      break;
+    case "src":
+    case "href":
+      if ("" === value) {
+        "src" === name
+          ? console.error(
+              'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+              name,
+              name
+            )
+          : console.error(
+              'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+              name,
+              name
+            );
+        break;
+      }
+    case "action":
+    case "formAction":
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      checkAttributeStringCoercion(value, name);
+      value = sanitizeURL("" + value);
+      target.push(
+        attributeSeparator,
+        name,
+        attributeAssign,
+        escapeTextForBrowser(value),
+        attributeEnd
+      );
+      break;
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "ref":
+      break;
+    case "autoFocus":
+    case "multiple":
+    case "muted":
+      pushBooleanAttribute(target, name.toLowerCase(), value);
+      break;
+    case "xlinkHref":
+      if (
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      checkAttributeStringCoercion(value, name);
+      value = sanitizeURL("" + value);
+      target.push(
+        attributeSeparator,
+        "xlink:href",
+        attributeAssign,
+        escapeTextForBrowser(value),
+        attributeEnd
+      );
+      break;
+    case "contentEditable":
+    case "spellCheck":
+    case "draggable":
+    case "value":
+    case "autoReverse":
+    case "externalResourcesRequired":
+    case "focusable":
+    case "preserveAlpha":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          name,
+          attributeAssign,
+          escapeTextForBrowser(value),
+          attributeEnd
+        );
+      break;
+    case "inert":
+      "" !== value ||
+        didWarnForNewBooleanPropsWithEmptyValue[name] ||
+        ((didWarnForNewBooleanPropsWithEmptyValue[name] = !0),
+        console.error(
+          "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+          name
+        ));
+    case "allowFullScreen":
+    case "async":
+    case "autoPlay":
+    case "controls":
+    case "default":
+    case "defer":
+    case "disabled":
+    case "disablePictureInPicture":
+    case "disableRemotePlayback":
+    case "formNoValidate":
+    case "hidden":
+    case "loop":
+    case "noModule":
+    case "noValidate":
+    case "open":
+    case "playsInline":
+    case "readOnly":
+    case "required":
+    case "reversed":
+    case "scoped":
+    case "seamless":
+    case "itemScope":
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(attributeSeparator, name, attributeEmptyString);
+      break;
+    case "capture":
+    case "download":
+      !0 === value
+        ? target.push(attributeSeparator, name, attributeEmptyString)
+        : !1 !== value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value &&
+          target.push(
+            attributeSeparator,
+            name,
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+      break;
+    case "cols":
+    case "rows":
+    case "size":
+    case "span":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        !isNaN(value) &&
+        1 <= value &&
+        target.push(
+          attributeSeparator,
+          name,
+          attributeAssign,
+          escapeTextForBrowser(value),
+          attributeEnd
+        );
+      break;
+    case "rowSpan":
+    case "start":
+      "function" === typeof value ||
+        "symbol" === typeof value ||
+        isNaN(value) ||
+        target.push(
+          attributeSeparator,
+          name,
+          attributeAssign,
+          escapeTextForBrowser(value),
+          attributeEnd
+        );
+      break;
+    case "xlinkActuate":
+      pushStringAttribute(target, "xlink:actuate", value);
+      break;
+    case "xlinkArcrole":
+      pushStringAttribute(target, "xlink:arcrole", value);
+      break;
+    case "xlinkRole":
+      pushStringAttribute(target, "xlink:role", value);
+      break;
+    case "xlinkShow":
+      pushStringAttribute(target, "xlink:show", value);
+      break;
+    case "xlinkTitle":
+      pushStringAttribute(target, "xlink:title", value);
+      break;
+    case "xlinkType":
+      pushStringAttribute(target, "xlink:type", value);
+      break;
+    case "xmlBase":
+      pushStringAttribute(target, "xml:base", value);
+      break;
+    case "xmlLang":
+      pushStringAttribute(target, "xml:lang", value);
+      break;
+    case "xmlSpace":
+      pushStringAttribute(target, "xml:space", value);
+      break;
+    default:
+      if (
+        !(2 < name.length) ||
+        ("o" !== name[0] && "O" !== name[0]) ||
+        ("n" !== name[1] && "N" !== name[1])
+      )
+        if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) {
+          switch (typeof value) {
+            case "function":
+            case "symbol":
+              return;
+            case "boolean":
+              var prefix = name.toLowerCase().slice(0, 5);
+              if ("data-" !== prefix && "aria-" !== prefix) return;
+          }
+          target.push(
+            attributeSeparator,
+            name,
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+        }
+  }
+}
+var endOfStartTag = ">",
+  endOfStartTagSelfClosing = "/>";
+function pushInnerHTML(target, innerHTML, children) {
+  if (null != innerHTML) {
+    if (null != children)
+      throw Error(
+        "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+      );
+    if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+      throw Error(
+        "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+      );
+    innerHTML = innerHTML.__html;
+    null !== innerHTML &&
+      void 0 !== innerHTML &&
+      (checkHtmlStringCoercion(innerHTML), target.push("" + innerHTML));
+  }
+}
+var didWarnDefaultInputValue = !1,
+  didWarnDefaultChecked = !1,
+  didWarnDefaultSelectValue = !1,
+  didWarnDefaultTextareaValue = !1,
+  didWarnInvalidOptionChildren = !1,
+  didWarnInvalidOptionInnerHTML = !1,
+  didWarnSelectedSetOnOption = !1,
+  didWarnFormActionType = !1,
+  didWarnFormActionName = !1,
+  didWarnFormActionTarget = !1,
+  didWarnFormActionMethod = !1;
+function checkSelectProp(props, propName) {
+  var value = props[propName];
+  null != value &&
+    ((value = isArrayImpl(value)),
+    props.multiple && !value
+      ? console.error(
+          "The `%s` prop supplied to <select> must be an array if `multiple` is true.",
+          propName
+        )
+      : !props.multiple &&
+        value &&
+        console.error(
+          "The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.",
+          propName
+        ));
+}
+function flattenOptionChildren(children) {
+  var content = "";
+  React.Children.forEach(children, function (child) {
+    null != child &&
+      ((content += child),
+      didWarnInvalidOptionChildren ||
+        "string" === typeof child ||
+        "number" === typeof child ||
+        "bigint" === typeof child ||
+        ((didWarnInvalidOptionChildren = !0),
+        console.error(
+          "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>."
+        )));
+  });
+  return content;
+}
+var formReplayingRuntimeScript =
+  'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});';
+function injectFormReplayingRuntime(resumableState, renderState) {
+  (resumableState.instructions & 16) === NothingSent &&
+    ((resumableState.instructions |= 16),
+    renderState.bootstrapChunks.unshift(
+      renderState.startInlineScript,
+      formReplayingRuntimeScript,
+      "\x3c/script>"
+    ));
+}
+function pushLinkImpl(target, props) {
+  target.push(startChunkForTag("link"));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTagSelfClosing);
+  return null;
+}
+function escapeStyleTextContent(styleText) {
+  checkHtmlStringCoercion(styleText);
+  return ("" + styleText).replace(styleRegex, styleReplacer);
+}
+var styleRegex = /(<\/|<)(s)(tyle)/gi;
+function styleReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+}
+function pushSelfClosing(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              tag +
+                " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTagSelfClosing);
+  return null;
+}
+function pushTitleImpl(target, props) {
+  target.push(startChunkForTag("title"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  props = Array.isArray(children)
+    ? 2 > children.length
+      ? children[0]
+      : null
+    : children;
+  "function" !== typeof props &&
+    "symbol" !== typeof props &&
+    null !== props &&
+    void 0 !== props &&
+    target.push(escapeTextForBrowser("" + props));
+  pushInnerHTML(target, innerHTML, children);
+  target.push(endChunkForTag("title"));
+  return null;
+}
+function pushScriptImpl(target, props) {
+  target.push(startChunkForTag("script"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  null != children &&
+    "string" !== typeof children &&
+    ((props =
+      "number" === typeof children
+        ? "a number for children"
+        : Array.isArray(children)
+          ? "an array for children"
+          : "something unexpected for children"),
+    console.error(
+      "A script element was rendered with %s. If script element has children it must be a single string. Consider using dangerouslySetInnerHTML or passing a plain string as children.",
+      props
+    ));
+  pushInnerHTML(target, innerHTML, children);
+  "string" === typeof children &&
+    target.push(escapeEntireInlineScriptContent(children));
+  target.push(endChunkForTag("script"));
+  return null;
+}
+function pushStartSingletonElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, tag);
+  return tag;
+}
+function pushStartGenericElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, tag);
+  return "string" === typeof tag
+    ? (target.push(escapeTextForBrowser(tag)), null)
+    : tag;
+}
+var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+  validatedTagCache = new Map();
+function startChunkForTag(tag) {
+  var tagStartChunk = validatedTagCache.get(tag);
+  if (void 0 === tagStartChunk) {
+    if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+    tagStartChunk = "<" + tag;
+    validatedTagCache.set(tag, tagStartChunk);
+  }
+  return tagStartChunk;
+}
+function pushStartInstance(
+  target$jscomp$0,
+  type,
+  props,
+  resumableState,
+  renderState,
+  preambleState,
+  hoistableState,
+  formatContext,
+  textEmbedded,
+  isFallback
+) {
+  validateProperties$2(type, props);
+  ("input" !== type && "textarea" !== type && "select" !== type) ||
+    null == props ||
+    null !== props.value ||
+    didWarnValueNull ||
+    ((didWarnValueNull = !0),
+    "select" === type && props.multiple
+      ? console.error(
+          "`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.",
+          type
+        )
+      : console.error(
+          "`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.",
+          type
+        ));
+  b: if (-1 === type.indexOf("-")) var JSCompiler_inline_result = !1;
+  else
+    switch (type) {
+      case "annotation-xml":
+      case "color-profile":
+      case "font-face":
+      case "font-face-src":
+      case "font-face-uri":
+      case "font-face-format":
+      case "font-face-name":
+      case "missing-glyph":
+        JSCompiler_inline_result = !1;
+        break b;
+      default:
+        JSCompiler_inline_result = !0;
+    }
+  JSCompiler_inline_result ||
+    "string" === typeof props.is ||
+    warnUnknownProperties(type, props, null);
+  !props.suppressContentEditableWarning &&
+    props.contentEditable &&
+    null != props.children &&
+    console.error(
+      "A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."
+    );
+  formatContext.insertionMode !== SVG_MODE &&
+    formatContext.insertionMode !== MATHML_MODE &&
+    -1 === type.indexOf("-") &&
+    type.toLowerCase() !== type &&
+    console.error(
+      "<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.",
+      type
+    );
+  switch (type) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+      break;
+    case "a":
+      target$jscomp$0.push(startChunkForTag("a"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              case "href":
+                "" === propValue
+                  ? pushStringAttribute(target$jscomp$0, "href", "")
+                  : pushAttribute(target$jscomp$0, propKey, propValue);
+                break;
+              default:
+                pushAttribute(target$jscomp$0, propKey, propValue);
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML, children);
+      if ("string" === typeof children) {
+        target$jscomp$0.push(escapeTextForBrowser(children));
+        var JSCompiler_inline_result$jscomp$0 = null;
+      } else JSCompiler_inline_result$jscomp$0 = children;
+      return JSCompiler_inline_result$jscomp$0;
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "select":
+      checkControlledValueProps("select", props);
+      checkSelectProp(props, "value");
+      checkSelectProp(props, "defaultValue");
+      void 0 === props.value ||
+        void 0 === props.defaultValue ||
+        didWarnDefaultSelectValue ||
+        (console.error(
+          "Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"
+        ),
+        (didWarnDefaultSelectValue = !0));
+      target$jscomp$0.push(startChunkForTag("select"));
+      var children$jscomp$0 = null,
+        innerHTML$jscomp$0 = null,
+        propKey$jscomp$0;
+      for (propKey$jscomp$0 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+          var propValue$jscomp$0 = props[propKey$jscomp$0];
+          if (null != propValue$jscomp$0)
+            switch (propKey$jscomp$0) {
+              case "children":
+                children$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "defaultValue":
+              case "value":
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$0,
+                  propValue$jscomp$0
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+      return children$jscomp$0;
+    case "option":
+      var selectedValue = formatContext.selectedValue;
+      target$jscomp$0.push(startChunkForTag("option"));
+      var children$jscomp$1 = null,
+        value = null,
+        selected = null,
+        innerHTML$jscomp$1 = null,
+        propKey$jscomp$1;
+      for (propKey$jscomp$1 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+          var propValue$jscomp$1 = props[propKey$jscomp$1];
+          if (null != propValue$jscomp$1)
+            switch (propKey$jscomp$1) {
+              case "children":
+                children$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "selected":
+                selected = propValue$jscomp$1;
+                didWarnSelectedSetOnOption ||
+                  (console.error(
+                    "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>."
+                  ),
+                  (didWarnSelectedSetOnOption = !0));
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "value":
+                value = propValue$jscomp$1;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$1,
+                  propValue$jscomp$1
+                );
+            }
+        }
+      if (null != selectedValue) {
+        if (null !== value) {
+          checkAttributeStringCoercion(value, "value");
+          var stringValue = "" + value;
+        } else
+          null === innerHTML$jscomp$1 ||
+            didWarnInvalidOptionInnerHTML ||
+            ((didWarnInvalidOptionInnerHTML = !0),
+            console.error(
+              "Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected."
+            )),
+            (stringValue = flattenOptionChildren(children$jscomp$1));
+        if (isArrayImpl(selectedValue))
+          for (var i = 0; i < selectedValue.length; i++) {
+            if (
+              (checkAttributeStringCoercion(selectedValue[i], "value"),
+              "" + selectedValue[i] === stringValue)
+            ) {
+              target$jscomp$0.push(' selected=""');
+              break;
+            }
+          }
+        else
+          checkAttributeStringCoercion(selectedValue, "select.value"),
+            "" + selectedValue === stringValue &&
+              target$jscomp$0.push(' selected=""');
+      } else selected && target$jscomp$0.push(' selected=""');
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+      return children$jscomp$1;
+    case "textarea":
+      checkControlledValueProps("textarea", props);
+      void 0 === props.value ||
+        void 0 === props.defaultValue ||
+        didWarnDefaultTextareaValue ||
+        (console.error(
+          "Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components"
+        ),
+        (didWarnDefaultTextareaValue = !0));
+      target$jscomp$0.push(startChunkForTag("textarea"));
+      var value$jscomp$0 = null,
+        defaultValue = null,
+        children$jscomp$2 = null,
+        propKey$jscomp$2;
+      for (propKey$jscomp$2 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+          var propValue$jscomp$2 = props[propKey$jscomp$2];
+          if (null != propValue$jscomp$2)
+            switch (propKey$jscomp$2) {
+              case "children":
+                children$jscomp$2 = propValue$jscomp$2;
+                break;
+              case "value":
+                value$jscomp$0 = propValue$jscomp$2;
+                break;
+              case "defaultValue":
+                defaultValue = propValue$jscomp$2;
+                break;
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$2,
+                  propValue$jscomp$2
+                );
+            }
+        }
+      null === value$jscomp$0 &&
+        null !== defaultValue &&
+        (value$jscomp$0 = defaultValue);
+      target$jscomp$0.push(endOfStartTag);
+      if (null != children$jscomp$2) {
+        console.error(
+          "Use the `defaultValue` or `value` props instead of setting children on <textarea>."
+        );
+        if (null != value$jscomp$0)
+          throw Error(
+            "If you supply `defaultValue` on a <textarea>, do not pass children."
+          );
+        if (isArrayImpl(children$jscomp$2)) {
+          if (1 < children$jscomp$2.length)
+            throw Error("<textarea> can only have at most one child.");
+          checkHtmlStringCoercion(children$jscomp$2[0]);
+          value$jscomp$0 = "" + children$jscomp$2[0];
+        }
+        checkHtmlStringCoercion(children$jscomp$2);
+        value$jscomp$0 = "" + children$jscomp$2;
+      }
+      "string" === typeof value$jscomp$0 &&
+        "\n" === value$jscomp$0[0] &&
+        target$jscomp$0.push("\n");
+      null !== value$jscomp$0 &&
+        (checkAttributeStringCoercion(value$jscomp$0, "value"),
+        target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0)));
+      return null;
+    case "input":
+      checkControlledValueProps("input", props);
+      target$jscomp$0.push(startChunkForTag("input"));
+      var name = null,
+        formAction = null,
+        formEncType = null,
+        formMethod = null,
+        formTarget = null,
+        value$jscomp$1 = null,
+        defaultValue$jscomp$0 = null,
+        checked = null,
+        defaultChecked = null,
+        propKey$jscomp$3;
+      for (propKey$jscomp$3 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+          var propValue$jscomp$3 = props[propKey$jscomp$3];
+          if (null != propValue$jscomp$3)
+            switch (propKey$jscomp$3) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              case "name":
+                name = propValue$jscomp$3;
+                break;
+              case "formAction":
+                formAction = propValue$jscomp$3;
+                break;
+              case "formEncType":
+                formEncType = propValue$jscomp$3;
+                break;
+              case "formMethod":
+                formMethod = propValue$jscomp$3;
+                break;
+              case "formTarget":
+                formTarget = propValue$jscomp$3;
+                break;
+              case "defaultChecked":
+                defaultChecked = propValue$jscomp$3;
+                break;
+              case "defaultValue":
+                defaultValue$jscomp$0 = propValue$jscomp$3;
+                break;
+              case "checked":
+                checked = propValue$jscomp$3;
+                break;
+              case "value":
+                value$jscomp$1 = propValue$jscomp$3;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$3,
+                  propValue$jscomp$3
+                );
+            }
+        }
+      null === formAction ||
+        "image" === props.type ||
+        "submit" === props.type ||
+        didWarnFormActionType ||
+        ((didWarnFormActionType = !0),
+        console.error(
+          'An input can only specify a formAction along with type="submit" or type="image".'
+        ));
+      var formData = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction,
+        formEncType,
+        formMethod,
+        formTarget,
+        name
+      );
+      null === checked ||
+        null === defaultChecked ||
+        didWarnDefaultChecked ||
+        (console.error(
+          "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+          "A component",
+          props.type
+        ),
+        (didWarnDefaultChecked = !0));
+      null === value$jscomp$1 ||
+        null === defaultValue$jscomp$0 ||
+        didWarnDefaultInputValue ||
+        (console.error(
+          "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+          "A component",
+          props.type
+        ),
+        (didWarnDefaultInputValue = !0));
+      null !== checked
+        ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+        : null !== defaultChecked &&
+          pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+      null !== value$jscomp$1
+        ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+        : null !== defaultValue$jscomp$0 &&
+          pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+      target$jscomp$0.push(endOfStartTagSelfClosing);
+      null != formData &&
+        formData.forEach(pushAdditionalFormField, target$jscomp$0);
+      return null;
+    case "button":
+      target$jscomp$0.push(startChunkForTag("button"));
+      var children$jscomp$3 = null,
+        innerHTML$jscomp$2 = null,
+        name$jscomp$0 = null,
+        formAction$jscomp$0 = null,
+        formEncType$jscomp$0 = null,
+        formMethod$jscomp$0 = null,
+        formTarget$jscomp$0 = null,
+        propKey$jscomp$4;
+      for (propKey$jscomp$4 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+          var propValue$jscomp$4 = props[propKey$jscomp$4];
+          if (null != propValue$jscomp$4)
+            switch (propKey$jscomp$4) {
+              case "children":
+                children$jscomp$3 = propValue$jscomp$4;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$2 = propValue$jscomp$4;
+                break;
+              case "name":
+                name$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formAction":
+                formAction$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formEncType":
+                formEncType$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formMethod":
+                formMethod$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formTarget":
+                formTarget$jscomp$0 = propValue$jscomp$4;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$4,
+                  propValue$jscomp$4
+                );
+            }
+        }
+      null === formAction$jscomp$0 ||
+        null == props.type ||
+        "submit" === props.type ||
+        didWarnFormActionType ||
+        ((didWarnFormActionType = !0),
+        console.error(
+          'A button can only specify a formAction along with type="submit" or no type.'
+        ));
+      var formData$jscomp$0 = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction$jscomp$0,
+        formEncType$jscomp$0,
+        formMethod$jscomp$0,
+        formTarget$jscomp$0,
+        name$jscomp$0
+      );
+      target$jscomp$0.push(endOfStartTag);
+      null != formData$jscomp$0 &&
+        formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+      if ("string" === typeof children$jscomp$3) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3));
+        var JSCompiler_inline_result$jscomp$1 = null;
+      } else JSCompiler_inline_result$jscomp$1 = children$jscomp$3;
+      return JSCompiler_inline_result$jscomp$1;
+    case "form":
+      target$jscomp$0.push(startChunkForTag("form"));
+      var children$jscomp$4 = null,
+        innerHTML$jscomp$3 = null,
+        formAction$jscomp$1 = null,
+        formEncType$jscomp$1 = null,
+        formMethod$jscomp$1 = null,
+        formTarget$jscomp$1 = null,
+        propKey$jscomp$5;
+      for (propKey$jscomp$5 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+          var propValue$jscomp$5 = props[propKey$jscomp$5];
+          if (null != propValue$jscomp$5)
+            switch (propKey$jscomp$5) {
+              case "children":
+                children$jscomp$4 = propValue$jscomp$5;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$3 = propValue$jscomp$5;
+                break;
+              case "action":
+                formAction$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "encType":
+                formEncType$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "method":
+                formMethod$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "target":
+                formTarget$jscomp$1 = propValue$jscomp$5;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$5,
+                  propValue$jscomp$5
+                );
+            }
+        }
+      var formData$jscomp$1 = null,
+        formActionName = null;
+      if ("function" === typeof formAction$jscomp$1) {
+        (null === formEncType$jscomp$1 && null === formMethod$jscomp$1) ||
+          didWarnFormActionMethod ||
+          ((didWarnFormActionMethod = !0),
+          console.error(
+            "Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden."
+          ));
+        null === formTarget$jscomp$1 ||
+          didWarnFormActionTarget ||
+          ((didWarnFormActionTarget = !0),
+          console.error(
+            "Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window."
+          ));
+        var customFields = getCustomFormFields(
+          resumableState,
+          formAction$jscomp$1
+        );
+        null !== customFields
+          ? ((formAction$jscomp$1 = customFields.action || ""),
+            (formEncType$jscomp$1 = customFields.encType),
+            (formMethod$jscomp$1 = customFields.method),
+            (formTarget$jscomp$1 = customFields.target),
+            (formData$jscomp$1 = customFields.data),
+            (formActionName = customFields.name))
+          : (target$jscomp$0.push(
+              attributeSeparator,
+              "action",
+              attributeAssign,
+              actionJavaScriptURL,
+              attributeEnd
+            ),
+            (formTarget$jscomp$1 =
+              formMethod$jscomp$1 =
+              formEncType$jscomp$1 =
+              formAction$jscomp$1 =
+                null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != formAction$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+      null != formEncType$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+      null != formMethod$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+      null != formTarget$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+      target$jscomp$0.push(endOfStartTag);
+      null !== formActionName &&
+        (target$jscomp$0.push('<input type="hidden"'),
+        pushStringAttribute(target$jscomp$0, "name", formActionName),
+        target$jscomp$0.push(endOfStartTagSelfClosing),
+        null != formData$jscomp$1 &&
+          formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0));
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+      if ("string" === typeof children$jscomp$4) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4));
+        var JSCompiler_inline_result$jscomp$2 = null;
+      } else JSCompiler_inline_result$jscomp$2 = children$jscomp$4;
+      return JSCompiler_inline_result$jscomp$2;
+    case "menuitem":
+      target$jscomp$0.push(startChunkForTag("menuitem"));
+      for (var propKey$jscomp$6 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+          var propValue$jscomp$6 = props[propKey$jscomp$6];
+          if (null != propValue$jscomp$6)
+            switch (propKey$jscomp$6) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$6,
+                  propValue$jscomp$6
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      return null;
+    case "object":
+      target$jscomp$0.push(startChunkForTag("object"));
+      var children$jscomp$5 = null,
+        innerHTML$jscomp$4 = null,
+        propKey$jscomp$7;
+      for (propKey$jscomp$7 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+          var propValue$jscomp$7 = props[propKey$jscomp$7];
+          if (null != propValue$jscomp$7)
+            switch (propKey$jscomp$7) {
+              case "children":
+                children$jscomp$5 = propValue$jscomp$7;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$4 = propValue$jscomp$7;
+                break;
+              case "data":
+                checkAttributeStringCoercion(propValue$jscomp$7, "data");
+                var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                if ("" === sanitizedValue) {
+                  console.error(
+                    'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                    propKey$jscomp$7,
+                    propKey$jscomp$7
+                  );
+                  break;
+                }
+                target$jscomp$0.push(
+                  attributeSeparator,
+                  "data",
+                  attributeAssign,
+                  escapeTextForBrowser(sanitizedValue),
+                  attributeEnd
+                );
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$7,
+                  propValue$jscomp$7
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+      if ("string" === typeof children$jscomp$5) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5));
+        var JSCompiler_inline_result$jscomp$3 = null;
+      } else JSCompiler_inline_result$jscomp$3 = children$jscomp$5;
+      return JSCompiler_inline_result$jscomp$3;
+    case "title":
+      var insertionMode = formatContext.insertionMode,
+        noscriptTagInScope = !!(formatContext.tagScope & 1);
+      if (hasOwnProperty.call(props, "children")) {
+        var children$jscomp$6 = props.children,
+          child = Array.isArray(children$jscomp$6)
+            ? 2 > children$jscomp$6.length
+              ? children$jscomp$6[0]
+              : null
+            : children$jscomp$6;
+        Array.isArray(children$jscomp$6) && 1 < children$jscomp$6.length
+          ? console.error(
+              "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an Array with length %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert `children` of <title> tags to a single string value which is why Arrays of length greater than 1 are not supported. When using JSX it can be common to combine text nodes and value nodes. For example: <title>hello {nameOfUser}</title>. While not immediately apparent, `children` in this case is an Array with length 2. If your `children` prop is using this form try rewriting it using a template string: <title>{`hello ${nameOfUser}`}</title>.",
+              children$jscomp$6.length
+            )
+          : "function" === typeof child || "symbol" === typeof child
+            ? console.error(
+                "React expect children of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value.",
+                "function" === typeof child ? "a Function" : "a Sybmol"
+              )
+            : child &&
+              child.toString === {}.toString &&
+              (null != child.$$typeof
+                ? console.error(
+                    "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that appears to be a React element which never implements a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value which is why rendering React elements is not supported. If the `children` of <title> is a React Component try moving the <title> tag into that component. If the `children` of <title> is some HTML markup change it to be Text only to be valid HTML."
+                  )
+                : console.error(
+                    "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that does not implement a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value. Using the default `toString` method available on every object is almost certainly an error. Consider whether the `children` of this <title> is an object in error and change it to a string or number value if so. Otherwise implement a `toString` method that React can use to produce a valid <title>."
+                  ));
+      }
+      if (
+        insertionMode === SVG_MODE ||
+        noscriptTagInScope ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$4 = pushTitleImpl(
+          target$jscomp$0,
+          props
+        );
+      else
+        isFallback
+          ? (JSCompiler_inline_result$jscomp$4 = null)
+          : (pushTitleImpl(renderState.hoistableChunks, props),
+            (JSCompiler_inline_result$jscomp$4 = void 0));
+      return JSCompiler_inline_result$jscomp$4;
+    case "link":
+      var rel = props.rel,
+        href = props.href,
+        precedence = props.precedence;
+      if (
+        formatContext.insertionMode === SVG_MODE ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof rel ||
+        "string" !== typeof href ||
+        "" === href
+      ) {
+        "stylesheet" === rel &&
+          "string" === typeof props.precedence &&
+          (("string" === typeof href && href) ||
+            console.error(
+              'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and expected the `href` prop to be a non-empty string but ecountered %s instead. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop ensure there is a non-empty string `href` prop as well, otherwise remove the `precedence` prop.',
+              null === href
+                ? "`null`"
+                : void 0 === href
+                  ? "`undefined`"
+                  : "" === href
+                    ? "an empty string"
+                    : 'something with type "' + typeof href + '"'
+            ));
+        pushLinkImpl(target$jscomp$0, props);
+        var JSCompiler_inline_result$jscomp$5 = null;
+      } else if ("stylesheet" === props.rel)
+        if (
+          "string" !== typeof precedence ||
+          null != props.disabled ||
+          props.onLoad ||
+          props.onError
+        ) {
+          if ("string" === typeof precedence)
+            if (null != props.disabled)
+              console.error(
+                'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and a `disabled` prop. The presence of the `disabled` prop indicates an intent to manage the stylesheet active state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the `disabled` prop, otherwise remove the `precedence` prop.'
+              );
+            else if (props.onLoad || props.onError) {
+              var propDescription =
+                props.onLoad && props.onError
+                  ? "`onLoad` and `onError` props"
+                  : props.onLoad
+                    ? "`onLoad` prop"
+                    : "`onError` prop";
+              console.error(
+                'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',
+                propDescription,
+                propDescription
+              );
+            }
+          JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+            target$jscomp$0,
+            props
+          );
+        } else {
+          var styleQueue = renderState.styles.get(precedence),
+            resourceState = resumableState.styleResources.hasOwnProperty(href)
+              ? resumableState.styleResources[href]
+              : void 0;
+          if (resourceState !== EXISTS) {
+            resumableState.styleResources[href] = EXISTS;
+            styleQueue ||
+              ((styleQueue = {
+                precedence: escapeTextForBrowser(precedence),
+                rules: [],
+                hrefs: [],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence, styleQueue));
+            var resource = {
+              state: PENDING$1,
+              props: assign({}, props, {
+                "data-precedence": props.precedence,
+                precedence: null
+              })
+            };
+            if (resourceState) {
+              2 === resourceState.length &&
+                adoptPreloadCredentials(resource.props, resourceState);
+              var preloadResource = renderState.preloads.stylesheets.get(href);
+              preloadResource && 0 < preloadResource.length
+                ? (preloadResource.length = 0)
+                : (resource.state = PRELOADED);
+            }
+            styleQueue.sheets.set(href, resource);
+            hoistableState && hoistableState.stylesheets.add(resource);
+          } else if (styleQueue) {
+            var _resource = styleQueue.sheets.get(href);
+            _resource &&
+              hoistableState &&
+              hoistableState.stylesheets.add(_resource);
+          }
+          textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+          JSCompiler_inline_result$jscomp$5 = null;
+        }
+      else
+        props.onLoad || props.onError
+          ? (JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+              target$jscomp$0,
+              props
+            ))
+          : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+            (JSCompiler_inline_result$jscomp$5 = isFallback
+              ? null
+              : pushLinkImpl(renderState.hoistableChunks, props)));
+      return JSCompiler_inline_result$jscomp$5;
+    case "script":
+      var asyncProp = props.async;
+      if (
+        "string" !== typeof props.src ||
+        !props.src ||
+        !asyncProp ||
+        "function" === typeof asyncProp ||
+        "symbol" === typeof asyncProp ||
+        props.onLoad ||
+        props.onError ||
+        formatContext.insertionMode === SVG_MODE ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$6 = pushScriptImpl(
+          target$jscomp$0,
+          props
+        );
+      else {
+        var key = props.src;
+        if ("module" === props.type) {
+          var resources = resumableState.moduleScriptResources;
+          var preloads = renderState.preloads.moduleScripts;
+        } else
+          (resources = resumableState.scriptResources),
+            (preloads = renderState.preloads.scripts);
+        var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+          ? resources[key]
+          : void 0;
+        if (resourceState$jscomp$0 !== EXISTS) {
+          resources[key] = EXISTS;
+          var scriptProps = props;
+          if (resourceState$jscomp$0) {
+            2 === resourceState$jscomp$0.length &&
+              ((scriptProps = assign({}, props)),
+              adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+            var preloadResource$jscomp$0 = preloads.get(key);
+            preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0);
+          }
+          var resource$jscomp$0 = [];
+          renderState.scripts.add(resource$jscomp$0);
+          pushScriptImpl(resource$jscomp$0, scriptProps);
+        }
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+        JSCompiler_inline_result$jscomp$6 = null;
+      }
+      return JSCompiler_inline_result$jscomp$6;
+    case "style":
+      var insertionMode$jscomp$0 = formatContext.insertionMode,
+        noscriptTagInScope$jscomp$0 = !!(formatContext.tagScope & 1);
+      if (hasOwnProperty.call(props, "children")) {
+        var children$jscomp$7 = props.children,
+          child$jscomp$0 = Array.isArray(children$jscomp$7)
+            ? 2 > children$jscomp$7.length
+              ? children$jscomp$7[0]
+              : null
+            : children$jscomp$7;
+        ("function" === typeof child$jscomp$0 ||
+          "symbol" === typeof child$jscomp$0 ||
+          Array.isArray(child$jscomp$0)) &&
+          console.error(
+            "React expect children of <style> tags to be a string, number, or object with a `toString` method but found %s instead. In browsers style Elements can only have `Text` Nodes as children.",
+            "function" === typeof child$jscomp$0
+              ? "a Function"
+              : "symbol" === typeof child$jscomp$0
+                ? "a Sybmol"
+                : "an Array"
+          );
+      }
+      var precedence$jscomp$0 = props.precedence,
+        href$jscomp$0 = props.href;
+      if (
+        insertionMode$jscomp$0 === SVG_MODE ||
+        noscriptTagInScope$jscomp$0 ||
+        null != props.itemProp ||
+        "string" !== typeof precedence$jscomp$0 ||
+        "string" !== typeof href$jscomp$0 ||
+        "" === href$jscomp$0
+      ) {
+        target$jscomp$0.push(startChunkForTag("style"));
+        var children$jscomp$8 = null,
+          innerHTML$jscomp$5 = null,
+          propKey$jscomp$8;
+        for (propKey$jscomp$8 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+            var propValue$jscomp$8 = props[propKey$jscomp$8];
+            if (null != propValue$jscomp$8)
+              switch (propKey$jscomp$8) {
+                case "children":
+                  children$jscomp$8 = propValue$jscomp$8;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$5 = propValue$jscomp$8;
+                  break;
+                default:
+                  pushAttribute(
+                    target$jscomp$0,
+                    propKey$jscomp$8,
+                    propValue$jscomp$8
+                  );
+              }
+          }
+        target$jscomp$0.push(endOfStartTag);
+        var child$jscomp$1 = Array.isArray(children$jscomp$8)
+          ? 2 > children$jscomp$8.length
+            ? children$jscomp$8[0]
+            : null
+          : children$jscomp$8;
+        "function" !== typeof child$jscomp$1 &&
+          "symbol" !== typeof child$jscomp$1 &&
+          null !== child$jscomp$1 &&
+          void 0 !== child$jscomp$1 &&
+          target$jscomp$0.push(escapeStyleTextContent(child$jscomp$1));
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$8);
+        target$jscomp$0.push(endChunkForTag("style"));
+        var JSCompiler_inline_result$jscomp$7 = null;
+      } else {
+        href$jscomp$0.includes(" ") &&
+          console.error(
+            'React expected the `href` prop for a <style> tag opting into hoisting semantics using the `precedence` prop to not have any spaces but ecountered spaces instead. using spaces in this prop will cause hydration of this style to fail on the client. The href for the <style> where this ocurred is "%s".',
+            href$jscomp$0
+          );
+        var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0),
+          resourceState$jscomp$1 = resumableState.styleResources.hasOwnProperty(
+            href$jscomp$0
+          )
+            ? resumableState.styleResources[href$jscomp$0]
+            : void 0;
+        if (resourceState$jscomp$1 !== EXISTS) {
+          resumableState.styleResources[href$jscomp$0] = EXISTS;
+          resourceState$jscomp$1 &&
+            console.error(
+              'React encountered a hoistable style tag for the same href as a preload: "%s". When using a style tag to inline styles you should not also preload it as a stylsheet.',
+              href$jscomp$0
+            );
+          styleQueue$jscomp$0
+            ? styleQueue$jscomp$0.hrefs.push(
+                escapeTextForBrowser(href$jscomp$0)
+              )
+            : ((styleQueue$jscomp$0 = {
+                precedence: escapeTextForBrowser(precedence$jscomp$0),
+                rules: [],
+                hrefs: [escapeTextForBrowser(href$jscomp$0)],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0));
+          var target = styleQueue$jscomp$0.rules,
+            children$jscomp$9 = null,
+            innerHTML$jscomp$6 = null,
+            propKey$jscomp$9;
+          for (propKey$jscomp$9 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+              var propValue$jscomp$9 = props[propKey$jscomp$9];
+              if (null != propValue$jscomp$9)
+                switch (propKey$jscomp$9) {
+                  case "children":
+                    children$jscomp$9 = propValue$jscomp$9;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$6 = propValue$jscomp$9;
+                }
+            }
+          var child$jscomp$2 = Array.isArray(children$jscomp$9)
+            ? 2 > children$jscomp$9.length
+              ? children$jscomp$9[0]
+              : null
+            : children$jscomp$9;
+          "function" !== typeof child$jscomp$2 &&
+            "symbol" !== typeof child$jscomp$2 &&
+            null !== child$jscomp$2 &&
+            void 0 !== child$jscomp$2 &&
+            target.push(escapeStyleTextContent(child$jscomp$2));
+          pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$9);
+        }
+        styleQueue$jscomp$0 &&
+          hoistableState &&
+          hoistableState.styles.add(styleQueue$jscomp$0);
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+        JSCompiler_inline_result$jscomp$7 = void 0;
+      }
+      return JSCompiler_inline_result$jscomp$7;
+    case "meta":
+      if (
+        formatContext.insertionMode === SVG_MODE ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$8 = pushSelfClosing(
+          target$jscomp$0,
+          props,
+          "meta"
+        );
+      else
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+          (JSCompiler_inline_result$jscomp$8 = isFallback
+            ? null
+            : "string" === typeof props.charSet
+              ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+              : "viewport" === props.name
+                ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                : pushSelfClosing(renderState.hoistableChunks, props, "meta"));
+      return JSCompiler_inline_result$jscomp$8;
+    case "listing":
+    case "pre":
+      target$jscomp$0.push(startChunkForTag(type));
+      var children$jscomp$10 = null,
+        innerHTML$jscomp$7 = null,
+        propKey$jscomp$10;
+      for (propKey$jscomp$10 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+          var propValue$jscomp$10 = props[propKey$jscomp$10];
+          if (null != propValue$jscomp$10)
+            switch (propKey$jscomp$10) {
+              case "children":
+                children$jscomp$10 = propValue$jscomp$10;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$7 = propValue$jscomp$10;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$10,
+                  propValue$jscomp$10
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      if (null != innerHTML$jscomp$7) {
+        if (null != children$jscomp$10)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if (
+          "object" !== typeof innerHTML$jscomp$7 ||
+          !("__html" in innerHTML$jscomp$7)
+        )
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        var html = innerHTML$jscomp$7.__html;
+        null !== html &&
+          void 0 !== html &&
+          ("string" === typeof html && 0 < html.length && "\n" === html[0]
+            ? target$jscomp$0.push("\n", html)
+            : (checkHtmlStringCoercion(html), target$jscomp$0.push("" + html)));
+      }
+      "string" === typeof children$jscomp$10 &&
+        "\n" === children$jscomp$10[0] &&
+        target$jscomp$0.push("\n");
+      return children$jscomp$10;
+    case "img":
+      var src = props.src,
+        srcSet = props.srcSet;
+      if (
+        !(
+          "lazy" === props.loading ||
+          (!src && !srcSet) ||
+          ("string" !== typeof src && null != src) ||
+          ("string" !== typeof srcSet && null != srcSet)
+        ) &&
+        "low" !== props.fetchPriority &&
+        !1 === !!(formatContext.tagScope & 3) &&
+        ("string" !== typeof src ||
+          ":" !== src[4] ||
+          ("d" !== src[0] && "D" !== src[0]) ||
+          ("a" !== src[1] && "A" !== src[1]) ||
+          ("t" !== src[2] && "T" !== src[2]) ||
+          ("a" !== src[3] && "A" !== src[3])) &&
+        ("string" !== typeof srcSet ||
+          ":" !== srcSet[4] ||
+          ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+          ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+          ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+          ("a" !== srcSet[3] && "A" !== srcSet[3]))
+      ) {
+        var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+          key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+          promotablePreloads = renderState.preloads.images,
+          resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+        if (resource$jscomp$1) {
+          if (
+            "high" === props.fetchPriority ||
+            10 > renderState.highImagePreloads.size
+          )
+            promotablePreloads.delete(key$jscomp$0),
+              renderState.highImagePreloads.add(resource$jscomp$1);
+        } else if (
+          !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+        ) {
+          resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+          var input = props.crossOrigin;
+          var crossOrigin =
+            "string" === typeof input
+              ? "use-credentials" === input
+                ? input
+                : ""
+              : void 0;
+          var headers = renderState.headers,
+            header;
+          headers &&
+          0 < headers.remainingCapacity &&
+          "string" !== typeof props.srcSet &&
+          ("high" === props.fetchPriority ||
+            500 > headers.highImagePreloads.length) &&
+          ((header = getPreloadAsHeader(src, "image", {
+            imageSrcSet: props.srcSet,
+            imageSizes: props.sizes,
+            crossOrigin: crossOrigin,
+            integrity: props.integrity,
+            nonce: props.nonce,
+            type: props.type,
+            fetchPriority: props.fetchPriority,
+            referrerPolicy: props.refererPolicy
+          })),
+          0 <= (headers.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+              headers.highImagePreloads && (headers.highImagePreloads += ", "),
+              (headers.highImagePreloads += header))
+            : ((resource$jscomp$1 = []),
+              pushLinkImpl(resource$jscomp$1, {
+                rel: "preload",
+                as: "image",
+                href: srcSet ? void 0 : src,
+                imageSrcSet: srcSet,
+                imageSizes: sizes,
+                crossOrigin: crossOrigin,
+                integrity: props.integrity,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.referrerPolicy
+              }),
+              "high" === props.fetchPriority ||
+              10 > renderState.highImagePreloads.size
+                ? renderState.highImagePreloads.add(resource$jscomp$1)
+                : (renderState.bulkPreloads.add(resource$jscomp$1),
+                  promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+        }
+      }
+      return pushSelfClosing(target$jscomp$0, props, "img");
+    case "base":
+    case "area":
+    case "br":
+    case "col":
+    case "embed":
+    case "hr":
+    case "keygen":
+    case "param":
+    case "source":
+    case "track":
+    case "wbr":
+      return pushSelfClosing(target$jscomp$0, props, type);
+    case "annotation-xml":
+    case "color-profile":
+    case "font-face":
+    case "font-face-src":
+    case "font-face-uri":
+    case "font-face-format":
+    case "font-face-name":
+    case "missing-glyph":
+      break;
+    case "head":
+      if (formatContext.insertionMode < HTML_MODE) {
+        var preamble = preambleState || renderState.preamble;
+        if (preamble.headChunks)
+          throw Error("The `<head>` tag may only be rendered once.");
+        preamble.headChunks = [];
+        var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+          preamble.headChunks,
+          props,
+          "head"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "head"
+        );
+      return JSCompiler_inline_result$jscomp$9;
+    case "body":
+      if (formatContext.insertionMode < HTML_MODE) {
+        var preamble$jscomp$0 = preambleState || renderState.preamble;
+        if (preamble$jscomp$0.bodyChunks)
+          throw Error("The `<body>` tag may only be rendered once.");
+        preamble$jscomp$0.bodyChunks = [];
+        var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+          preamble$jscomp$0.bodyChunks,
+          props,
+          "body"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "body"
+        );
+      return JSCompiler_inline_result$jscomp$10;
+    case "html":
+      if (formatContext.insertionMode === ROOT_HTML_MODE) {
+        var preamble$jscomp$1 = preambleState || renderState.preamble;
+        if (preamble$jscomp$1.htmlChunks)
+          throw Error("The `<html>` tag may only be rendered once.");
+        preamble$jscomp$1.htmlChunks = ["<!DOCTYPE html>"];
+        var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+          preamble$jscomp$1.htmlChunks,
+          props,
+          "html"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "html"
+        );
+      return JSCompiler_inline_result$jscomp$11;
+    default:
+      if (-1 !== type.indexOf("-")) {
+        target$jscomp$0.push(startChunkForTag(type));
+        var children$jscomp$11 = null,
+          innerHTML$jscomp$8 = null,
+          propKey$jscomp$11;
+        for (propKey$jscomp$11 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+            var propValue$jscomp$11 = props[propKey$jscomp$11];
+            if (null != propValue$jscomp$11) {
+              var attributeName = propKey$jscomp$11;
+              switch (propKey$jscomp$11) {
+                case "children":
+                  children$jscomp$11 = propValue$jscomp$11;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$8 = propValue$jscomp$11;
+                  break;
+                case "style":
+                  pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                  break;
+                case "suppressContentEditableWarning":
+                case "suppressHydrationWarning":
+                case "ref":
+                  break;
+                case "className":
+                  attributeName = "class";
+                default:
+                  if (
+                    isAttributeNameSafe(propKey$jscomp$11) &&
+                    "function" !== typeof propValue$jscomp$11 &&
+                    "symbol" !== typeof propValue$jscomp$11 &&
+                    !1 !== propValue$jscomp$11
+                  ) {
+                    if (!0 === propValue$jscomp$11) propValue$jscomp$11 = "";
+                    else if ("object" === typeof propValue$jscomp$11) continue;
+                    target$jscomp$0.push(
+                      attributeSeparator,
+                      attributeName,
+                      attributeAssign,
+                      escapeTextForBrowser(propValue$jscomp$11),
+                      attributeEnd
+                    );
+                  }
+              }
+            }
+          }
+        target$jscomp$0.push(endOfStartTag);
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$11);
+        return children$jscomp$11;
+      }
+  }
+  return pushStartGenericElement(target$jscomp$0, props, type);
+}
+var endTagCache = new Map();
+function endChunkForTag(tag) {
+  var chunk = endTagCache.get(tag);
+  void 0 === chunk && ((chunk = "</" + tag + ">"), endTagCache.set(tag, chunk));
+  return chunk;
+}
+function hoistPreambleState(renderState, preambleState) {
+  renderState = renderState.preamble;
+  null === renderState.htmlChunks &&
+    preambleState.htmlChunks &&
+    ((renderState.htmlChunks = preambleState.htmlChunks),
+    (preambleState.contribution |= 1));
+  null === renderState.headChunks &&
+    preambleState.headChunks &&
+    ((renderState.headChunks = preambleState.headChunks),
+    (preambleState.contribution |= 4));
+  null === renderState.bodyChunks &&
+    preambleState.bodyChunks &&
+    ((renderState.bodyChunks = preambleState.bodyChunks),
+    (preambleState.contribution |= 2));
+}
+function writeBootstrap(destination, renderState) {
+  renderState = renderState.bootstrapChunks;
+  for (var i = 0; i < renderState.length - 1; i++)
+    writeChunk(destination, renderState[i]);
+  return i < renderState.length
+    ? ((i = renderState[i]), (renderState.length = 0), !!destination.write(i))
+    : !0;
+}
+var placeholder1 = '<template id="',
+  placeholder2 = '"></template>',
+  startCompletedSuspenseBoundary = "\x3c!--$--\x3e",
+  startPendingSuspenseBoundary1 = '\x3c!--$?--\x3e<template id="',
+  startPendingSuspenseBoundary2 = '"></template>',
+  startClientRenderedSuspenseBoundary = "\x3c!--$!--\x3e",
+  endSuspenseBoundary = "\x3c!--/$--\x3e",
+  clientRenderedSuspenseBoundaryError1 = "<template",
+  clientRenderedSuspenseBoundaryErrorAttrInterstitial = '"',
+  clientRenderedSuspenseBoundaryError1A = ' data-dgst="',
+  clientRenderedSuspenseBoundaryError1B = ' data-msg="',
+  clientRenderedSuspenseBoundaryError1C = ' data-stck="',
+  clientRenderedSuspenseBoundaryError1D = ' data-cstck="',
+  clientRenderedSuspenseBoundaryError2 = "></template>";
+function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+  writeChunk(destination, startPendingSuspenseBoundary1);
+  if (null === id)
+    throw Error(
+      "An ID must have been assigned before we can complete the boundary."
+    );
+  writeChunk(destination, renderState.boundaryPrefix);
+  writeChunk(destination, id.toString(16));
+  return !!destination.write(startPendingSuspenseBoundary2);
+}
+var boundaryPreambleContributionChunkStart = "\x3c!--",
+  boundaryPreambleContributionChunkEnd = "--\x3e";
+function writePreambleContribution(destination, preambleState) {
+  preambleState = preambleState.contribution;
+  preambleState !== NoContribution &&
+    (writeChunk(destination, boundaryPreambleContributionChunkStart),
+    writeChunk(destination, "" + preambleState),
+    writeChunk(destination, boundaryPreambleContributionChunkEnd));
+}
+var startSegmentHTML = '<div hidden id="',
+  startSegmentHTML2 = '">',
+  endSegmentHTML = "</div>",
+  startSegmentSVG = '<svg aria-hidden="true" style="display:none" id="',
+  startSegmentSVG2 = '">',
+  endSegmentSVG = "</svg>",
+  startSegmentMathML = '<math aria-hidden="true" style="display:none" id="',
+  startSegmentMathML2 = '">',
+  endSegmentMathML = "</math>",
+  startSegmentTable = '<table hidden id="',
+  startSegmentTable2 = '">',
+  endSegmentTable = "</table>",
+  startSegmentTableBody = '<table hidden><tbody id="',
+  startSegmentTableBody2 = '">',
+  endSegmentTableBody = "</tbody></table>",
+  startSegmentTableRow = '<table hidden><tr id="',
+  startSegmentTableRow2 = '">',
+  endSegmentTableRow = "</tr></table>",
+  startSegmentColGroup = '<table hidden><colgroup id="',
+  startSegmentColGroup2 = '">',
+  endSegmentColGroup = "</colgroup></table>";
+function writeStartSegment(destination, renderState, formatContext, id) {
+  switch (formatContext.insertionMode) {
+    case ROOT_HTML_MODE:
+    case HTML_HTML_MODE:
+    case HTML_HEAD_MODE:
+    case HTML_MODE:
+      return (
+        writeChunk(destination, startSegmentHTML),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write(startSegmentHTML2)
+      );
+    case SVG_MODE:
+      return (
+        writeChunk(destination, startSegmentSVG),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write(startSegmentSVG2)
+      );
+    case MATHML_MODE:
+      return (
+        writeChunk(destination, startSegmentMathML),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write(startSegmentMathML2)
+      );
+    case HTML_TABLE_MODE:
+      return (
+        writeChunk(destination, startSegmentTable),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write(startSegmentTable2)
+      );
+    case HTML_TABLE_BODY_MODE:
+      return (
+        writeChunk(destination, startSegmentTableBody),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write(startSegmentTableBody2)
+      );
+    case HTML_TABLE_ROW_MODE:
+      return (
+        writeChunk(destination, startSegmentTableRow),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write(startSegmentTableRow2)
+      );
+    case HTML_COLGROUP_MODE:
+      return (
+        writeChunk(destination, startSegmentColGroup),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write(startSegmentColGroup2)
+      );
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+function writeEndSegment(destination, formatContext) {
+  switch (formatContext.insertionMode) {
+    case ROOT_HTML_MODE:
+    case HTML_HTML_MODE:
+    case HTML_HEAD_MODE:
+    case HTML_MODE:
+      return !!destination.write(endSegmentHTML);
+    case SVG_MODE:
+      return !!destination.write(endSegmentSVG);
+    case MATHML_MODE:
+      return !!destination.write(endSegmentMathML);
+    case HTML_TABLE_MODE:
+      return !!destination.write(endSegmentTable);
+    case HTML_TABLE_BODY_MODE:
+      return !!destination.write(endSegmentTableBody);
+    case HTML_TABLE_ROW_MODE:
+      return !!destination.write(endSegmentTableRow);
+    case HTML_COLGROUP_MODE:
+      return !!destination.write(endSegmentColGroup);
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+var completeSegmentScript1Full =
+    '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("',
+  completeSegmentScript1Partial = '$RS("',
+  completeSegmentScript2 = '","',
+  completeSegmentScriptEnd = '")\x3c/script>',
+  completeBoundaryScript1Full =
+    '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("',
+  completeBoundaryScript1Partial = '$RC("',
+  completeBoundaryWithStylesScript1FullBoth =
+    '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("',
+  completeBoundaryWithStylesScript1FullPartial =
+    '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("',
+  completeBoundaryWithStylesScript1Partial = '$RR("',
+  completeBoundaryScript2 = '","',
+  completeBoundaryScript3a = '",',
+  completeBoundaryScript3b = '"',
+  completeBoundaryScriptEnd = ")\x3c/script>",
+  clientRenderScript1Full =
+    '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("',
+  clientRenderScript1Partial = '$RX("',
+  clientRenderScript1A = '"',
+  clientRenderErrorScriptArgInterstitial = ",",
+  clientRenderScriptEnd = ")\x3c/script>",
+  regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g;
+function escapeJSStringsForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInInstructionScripts,
+    function (match) {
+      switch (match) {
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var regexForJSStringsInScripts = /[&><\u2028\u2029]/g;
+function escapeJSObjectForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInScripts,
+    function (match) {
+      switch (match) {
+        case "&":
+          return "\\u0026";
+        case ">":
+          return "\\u003e";
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var lateStyleTagResourceOpen1 = '<style media="not all" data-precedence="',
+  lateStyleTagResourceOpen2 = '" data-href="',
+  lateStyleTagResourceOpen3 = '">',
+  lateStyleTagTemplateClose = "</style>",
+  currentlyRenderingBoundaryHasStylesToHoist = !1,
+  destinationHasCapacity = !0;
+function flushStyleTagsLateForBoundary(styleQueue) {
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs;
+  0 < rules.length &&
+    0 === hrefs.length &&
+    console.error(
+      "React expected to have at least one href for an a hoistable style but found none. This is a bug in React."
+    );
+  var i = 0;
+  if (hrefs.length) {
+    writeChunk(this, lateStyleTagResourceOpen1);
+    writeChunk(this, styleQueue.precedence);
+    for (writeChunk(this, lateStyleTagResourceOpen2); i < hrefs.length - 1; i++)
+      writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator);
+    writeChunk(this, hrefs[i]);
+    writeChunk(this, lateStyleTagResourceOpen3);
+    for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]);
+    destinationHasCapacity = !!this.write(lateStyleTagTemplateClose);
+    currentlyRenderingBoundaryHasStylesToHoist = !0;
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function hasStylesToHoist(stylesheet) {
+  return stylesheet.state !== PREAMBLE
+    ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+    : !1;
+}
+function writeHoistablesForBoundary(destination, hoistableState, renderState) {
+  currentlyRenderingBoundaryHasStylesToHoist = !1;
+  destinationHasCapacity = !0;
+  hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+  hoistableState.stylesheets.forEach(hasStylesToHoist);
+  currentlyRenderingBoundaryHasStylesToHoist &&
+    (renderState.stylesToHoist = !0);
+  return destinationHasCapacity;
+}
+function flushResource(resource) {
+  for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]);
+  resource.length = 0;
+}
+var stylesheetFlushingQueue = [];
+function flushStyleInPreamble(stylesheet) {
+  pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+  for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+    writeChunk(this, stylesheetFlushingQueue[i]);
+  stylesheetFlushingQueue.length = 0;
+  stylesheet.state = PREAMBLE;
+}
+var styleTagResourceOpen1 = '<style data-precedence="',
+  styleTagResourceOpen2 = '" data-href="',
+  spaceSeparator = " ",
+  styleTagResourceOpen3 = '">',
+  styleTagResourceClose = "</style>";
+function flushStylesInPreamble(styleQueue) {
+  var hasStylesheets = 0 < styleQueue.sheets.size;
+  styleQueue.sheets.forEach(flushStyleInPreamble, this);
+  styleQueue.sheets.clear();
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs;
+  if (!hasStylesheets || hrefs.length) {
+    writeChunk(this, styleTagResourceOpen1);
+    writeChunk(this, styleQueue.precedence);
+    styleQueue = 0;
+    if (hrefs.length) {
+      for (
+        writeChunk(this, styleTagResourceOpen2);
+        styleQueue < hrefs.length - 1;
+        styleQueue++
+      )
+        writeChunk(this, hrefs[styleQueue]), writeChunk(this, spaceSeparator);
+      writeChunk(this, hrefs[styleQueue]);
+    }
+    writeChunk(this, styleTagResourceOpen3);
+    for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+      writeChunk(this, rules[styleQueue]);
+    writeChunk(this, styleTagResourceClose);
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function preloadLateStyle(stylesheet) {
+  if (stylesheet.state === PENDING$1) {
+    stylesheet.state = PRELOADED;
+    var props = stylesheet.props;
+    pushLinkImpl(stylesheetFlushingQueue, {
+      rel: "preload",
+      as: "style",
+      href: stylesheet.props.href,
+      crossOrigin: props.crossOrigin,
+      fetchPriority: props.fetchPriority,
+      integrity: props.integrity,
+      media: props.media,
+      hrefLang: props.hrefLang,
+      referrerPolicy: props.referrerPolicy
+    });
+    for (
+      stylesheet = 0;
+      stylesheet < stylesheetFlushingQueue.length;
+      stylesheet++
+    )
+      writeChunk(this, stylesheetFlushingQueue[stylesheet]);
+    stylesheetFlushingQueue.length = 0;
+  }
+}
+function preloadLateStyles(styleQueue) {
+  styleQueue.sheets.forEach(preloadLateStyle, this);
+  styleQueue.sheets.clear();
+}
+var arrayFirstOpenBracket = "[",
+  arraySubsequentOpenBracket = ",[",
+  arrayInterstitial = ",",
+  arrayCloseBracket = "]";
+function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+  writeChunk(destination, arrayFirstOpenBracket);
+  var nextArrayOpenBrackChunk = arrayFirstOpenBracket;
+  hoistableState.stylesheets.forEach(function (resource) {
+    if (resource.state !== PREAMBLE)
+      if (resource.state === LATE)
+        writeChunk(destination, nextArrayOpenBrackChunk),
+          (resource = resource.props.href),
+          checkAttributeStringCoercion(resource, "href"),
+          writeChunk(
+            destination,
+            escapeJSObjectForInstructionScripts("" + resource)
+          ),
+          writeChunk(destination, arrayCloseBracket),
+          (nextArrayOpenBrackChunk = arraySubsequentOpenBracket);
+      else {
+        writeChunk(destination, nextArrayOpenBrackChunk);
+        var precedence = resource.props["data-precedence"],
+          props = resource.props,
+          coercedHref = sanitizeURL("" + resource.props.href);
+        writeChunk(
+          destination,
+          escapeJSObjectForInstructionScripts(coercedHref)
+        );
+        checkAttributeStringCoercion(precedence, "precedence");
+        precedence = "" + precedence;
+        writeChunk(destination, arrayInterstitial);
+        writeChunk(
+          destination,
+          escapeJSObjectForInstructionScripts(precedence)
+        );
+        for (var propKey in props)
+          if (
+            hasOwnProperty.call(props, propKey) &&
+            ((precedence = props[propKey]), null != precedence)
+          )
+            switch (propKey) {
+              case "href":
+              case "rel":
+              case "precedence":
+              case "data-precedence":
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                writeStyleResourceAttributeInJS(
+                  destination,
+                  propKey,
+                  precedence
+                );
+            }
+        writeChunk(destination, arrayCloseBracket);
+        nextArrayOpenBrackChunk = arraySubsequentOpenBracket;
+        resource.state = LATE;
+      }
+  });
+  writeChunk(destination, arrayCloseBracket);
+}
+function writeStyleResourceAttributeInJS(destination, name, value) {
+  var attributeName = name.toLowerCase();
+  switch (typeof value) {
+    case "function":
+    case "symbol":
+      return;
+  }
+  switch (name) {
+    case "innerHTML":
+    case "dangerouslySetInnerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "style":
+    case "ref":
+      return;
+    case "className":
+      attributeName = "class";
+      checkAttributeStringCoercion(value, attributeName);
+      name = "" + value;
+      break;
+    case "hidden":
+      if (!1 === value) return;
+      name = "";
+      break;
+    case "src":
+    case "href":
+      value = sanitizeURL(value);
+      checkAttributeStringCoercion(value, attributeName);
+      name = "" + value;
+      break;
+    default:
+      if (
+        (2 < name.length &&
+          ("o" === name[0] || "O" === name[0]) &&
+          ("n" === name[1] || "N" === name[1])) ||
+        !isAttributeNameSafe(name)
+      )
+        return;
+      checkAttributeStringCoercion(value, attributeName);
+      name = "" + value;
+  }
+  writeChunk(destination, arrayInterstitial);
+  writeChunk(destination, escapeJSObjectForInstructionScripts(attributeName));
+  writeChunk(destination, arrayInterstitial);
+  writeChunk(destination, escapeJSObjectForInstructionScripts(name));
+}
+var PENDING$1 = 0,
+  PRELOADED = 1,
+  PREAMBLE = 2,
+  LATE = 3;
+function createHoistableState() {
+  return { styles: new Set(), stylesheets: new Set() };
+}
+function prefetchDNS(href) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      if (!resumableState.dnsResources.hasOwnProperty(href)) {
+        resumableState.dnsResources[href] = EXISTS;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        )
+          JSCompiler_temp =
+            ((header =
+              "<" +
+              escapeHrefForLinkHeaderURLContext(href) +
+              ">; rel=dns-prefetch"),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        JSCompiler_temp
+          ? ((renderState.resets.dns[href] = EXISTS),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((header = []),
+            pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+            renderState.preconnects.add(header));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.D(href);
+}
+function preconnect(href, crossOrigin) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      var bucket =
+        "use-credentials" === crossOrigin
+          ? "credentials"
+          : "string" === typeof crossOrigin
+            ? "anonymous"
+            : "default";
+      if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+        resumableState.connectResources[bucket][href] = EXISTS;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        ) {
+          JSCompiler_temp =
+            "<" + escapeHrefForLinkHeaderURLContext(href) + ">; rel=preconnect";
+          if ("string" === typeof crossOrigin) {
+            var escapedCrossOrigin =
+              escapeStringForLinkHeaderQuotedParamValueContext(
+                crossOrigin,
+                "crossOrigin"
+              );
+            JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"';
+          }
+          JSCompiler_temp =
+            ((header = JSCompiler_temp),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        }
+        JSCompiler_temp
+          ? ((renderState.resets.connect[bucket][href] = EXISTS),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((bucket = []),
+            pushLinkImpl(bucket, {
+              rel: "preconnect",
+              href: href,
+              crossOrigin: crossOrigin
+            }),
+            renderState.preconnects.add(bucket));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.C(href, crossOrigin);
+}
+function preload(href, as, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (as && href) {
+      switch (as) {
+        case "image":
+          if (options) {
+            var imageSrcSet = options.imageSrcSet;
+            var imageSizes = options.imageSizes;
+            var fetchPriority = options.fetchPriority;
+          }
+          var key = imageSrcSet
+            ? imageSrcSet + "\n" + (imageSizes || "")
+            : href;
+          if (resumableState.imageResources.hasOwnProperty(key)) return;
+          resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+          resumableState = renderState.headers;
+          var header;
+          resumableState &&
+          0 < resumableState.remainingCapacity &&
+          "string" !== typeof imageSrcSet &&
+          "high" === fetchPriority &&
+          ((header = getPreloadAsHeader(href, as, options)),
+          0 <= (resumableState.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+              resumableState.highImagePreloads &&
+                (resumableState.highImagePreloads += ", "),
+              (resumableState.highImagePreloads += header))
+            : ((resumableState = []),
+              pushLinkImpl(
+                resumableState,
+                assign(
+                  { rel: "preload", href: imageSrcSet ? void 0 : href, as: as },
+                  options
+                )
+              ),
+              "high" === fetchPriority
+                ? renderState.highImagePreloads.add(resumableState)
+                : (renderState.bulkPreloads.add(resumableState),
+                  renderState.preloads.images.set(key, resumableState)));
+          break;
+        case "style":
+          if (resumableState.styleResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.styleResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.stylesheets.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          break;
+        case "script":
+          if (resumableState.scriptResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          renderState.preloads.scripts.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.scriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          break;
+        default:
+          if (resumableState.unknownResources.hasOwnProperty(as)) {
+            if (
+              ((imageSrcSet = resumableState.unknownResources[as]),
+              imageSrcSet.hasOwnProperty(href))
+            )
+              return;
+          } else
+            (imageSrcSet = {}),
+              (resumableState.unknownResources[as] = imageSrcSet);
+          imageSrcSet[href] = PRELOAD_NO_CREDS;
+          if (
+            (resumableState = renderState.headers) &&
+            0 < resumableState.remainingCapacity &&
+            "font" === as &&
+            ((key = getPreloadAsHeader(href, as, options)),
+            0 <= (resumableState.remainingCapacity -= key.length + 2))
+          )
+            (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+              resumableState.fontPreloads &&
+                (resumableState.fontPreloads += ", "),
+              (resumableState.fontPreloads += key);
+          else
+            switch (
+              ((resumableState = []),
+              (href = assign({ rel: "preload", href: href, as: as }, options)),
+              pushLinkImpl(resumableState, href),
+              as)
+            ) {
+              case "font":
+                renderState.fontPreloads.add(resumableState);
+                break;
+              default:
+                renderState.bulkPreloads.add(resumableState);
+            }
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.L(href, as, options);
+}
+function preloadModule(href, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      var as =
+        options && "string" === typeof options.as ? options.as : "script";
+      switch (as) {
+        case "script":
+          if (resumableState.moduleScriptResources.hasOwnProperty(href)) return;
+          as = [];
+          resumableState.moduleScriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.moduleScripts.set(href, as);
+          break;
+        default:
+          if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+            var resources = resumableState.unknownResources[as];
+            if (resources.hasOwnProperty(href)) return;
+          } else
+            (resources = {}),
+              (resumableState.moduleUnknownResources[as] = resources);
+          as = [];
+          resources[href] = PRELOAD_NO_CREDS;
+      }
+      pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options));
+      renderState.bulkPreloads.add(as);
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.m(href, options);
+}
+function preinitStyle(href, precedence, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      precedence = precedence || "default";
+      var styleQueue = renderState.styles.get(precedence),
+        resourceState = resumableState.styleResources.hasOwnProperty(href)
+          ? resumableState.styleResources[href]
+          : void 0;
+      resourceState !== EXISTS &&
+        ((resumableState.styleResources[href] = EXISTS),
+        styleQueue ||
+          ((styleQueue = {
+            precedence: escapeTextForBrowser(precedence),
+            rules: [],
+            hrefs: [],
+            sheets: new Map()
+          }),
+          renderState.styles.set(precedence, styleQueue)),
+        (precedence = {
+          state: PENDING$1,
+          props: assign(
+            { rel: "stylesheet", href: href, "data-precedence": precedence },
+            options
+          )
+        }),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(precedence.props, resourceState),
+          (renderState = renderState.preloads.stylesheets.get(href)) &&
+          0 < renderState.length
+            ? (renderState.length = 0)
+            : (precedence.state = PRELOADED)),
+        styleQueue.sheets.set(href, precedence),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.S(href, precedence, options);
+}
+function preinitScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.scriptResources.hasOwnProperty(src)
+        ? resumableState.scriptResources[src]
+        : void 0;
+      resourceState !== EXISTS &&
+        ((resumableState.scriptResources[src] = EXISTS),
+        (options = assign({ src: src, async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.scripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.X(src, options);
+}
+function preinitModuleScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.moduleScriptResources.hasOwnProperty(
+        src
+      )
+        ? resumableState.moduleScriptResources[src]
+        : void 0;
+      resourceState !== EXISTS &&
+        ((resumableState.moduleScriptResources[src] = EXISTS),
+        (options = assign({ src: src, type: "module", async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.moduleScripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.M(src, options);
+}
+function preloadBootstrapScriptOrModule(
+  resumableState,
+  renderState,
+  href,
+  props
+) {
+  (resumableState.scriptResources.hasOwnProperty(href) ||
+    resumableState.moduleScriptResources.hasOwnProperty(href)) &&
+    console.error(
+      'Internal React Error: React expected bootstrap script or module with src "%s" to not have been preloaded already. please file an issue',
+      href
+    );
+  resumableState.scriptResources[href] = EXISTS;
+  resumableState.moduleScriptResources[href] = EXISTS;
+  resumableState = [];
+  pushLinkImpl(resumableState, props);
+  renderState.bootstrapScripts.add(resumableState);
+}
+function adoptPreloadCredentials(target, preloadState) {
+  null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+  null == target.integrity && (target.integrity = preloadState[1]);
+}
+function getPreloadAsHeader(href, as, params) {
+  href = escapeHrefForLinkHeaderURLContext(href);
+  as = escapeStringForLinkHeaderQuotedParamValueContext(as, "as");
+  as = "<" + href + '>; rel=preload; as="' + as + '"';
+  for (var paramName in params)
+    hasOwnProperty.call(params, paramName) &&
+      ((href = params[paramName]),
+      "string" === typeof href &&
+        (as +=
+          "; " +
+          paramName.toLowerCase() +
+          '="' +
+          escapeStringForLinkHeaderQuotedParamValueContext(href, paramName) +
+          '"'));
+  return as;
+}
+var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g;
+function escapeHrefForLinkHeaderURLContext(hrefInput) {
+  checkAttributeStringCoercion(hrefInput, "href");
+  return ("" + hrefInput).replace(
+    regexForHrefInLinkHeaderURLContext,
+    escapeHrefForLinkHeaderURLContextReplacer
+  );
+}
+function escapeHrefForLinkHeaderURLContextReplacer(match) {
+  switch (match) {
+    case "<":
+      return "%3C";
+    case ">":
+      return "%3E";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g;
+function escapeStringForLinkHeaderQuotedParamValueContext(value, name) {
+  willCoercionThrow(value) &&
+    (console.error(
+      "The provided `%s` option is an unsupported type %s. This value must be coerced to a string before using it here.",
+      name,
+      typeName(value)
+    ),
+    testStringCoercion(value));
+  return ("" + value).replace(
+    regexForLinkHeaderQuotedParamValueContext,
+    escapeStringForLinkHeaderQuotedParamValueContextReplacer
+  );
+}
+function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+  switch (match) {
+    case '"':
+      return "%22";
+    case "'":
+      return "%27";
+    case ";":
+      return "%3B";
+    case ",":
+      return "%2C";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+function hoistStyleQueueDependency(styleQueue) {
+  this.styles.add(styleQueue);
+}
+function hoistStylesheetDependency(stylesheet) {
+  this.stylesheets.add(stylesheet);
+}
+var bind = Function.prototype.bind,
+  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function getComponentNameFromType(type) {
+  if (null == type) return null;
+  if ("function" === typeof type)
+    return type.$$typeof === REACT_CLIENT_REFERENCE
+      ? null
+      : type.displayName || type.name || null;
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_FRAGMENT_TYPE:
+      return "Fragment";
+    case REACT_PROFILER_TYPE:
+      return "Profiler";
+    case REACT_STRICT_MODE_TYPE:
+      return "StrictMode";
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+    case REACT_ACTIVITY_TYPE:
+      return "Activity";
+  }
+  if ("object" === typeof type)
+    switch (
+      ("number" === typeof type.tag &&
+        console.error(
+          "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+        ),
+      type.$$typeof)
+    ) {
+      case REACT_PORTAL_TYPE:
+        return "Portal";
+      case REACT_CONTEXT_TYPE:
+        return (type.displayName || "Context") + ".Provider";
+      case REACT_CONSUMER_TYPE:
+        return (type._context.displayName || "Context") + ".Consumer";
+      case REACT_FORWARD_REF_TYPE:
+        var innerType = type.render;
+        type = type.displayName;
+        type ||
+          ((type = innerType.displayName || innerType.name || ""),
+          (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+        return type;
+      case REACT_MEMO_TYPE:
+        return (
+          (innerType = type.displayName || null),
+          null !== innerType
+            ? innerType
+            : getComponentNameFromType(type.type) || "Memo"
+        );
+      case REACT_LAZY_TYPE:
+        innerType = type._payload;
+        type = type._init;
+        try {
+          return getComponentNameFromType(type(innerType));
+        } catch (x) {}
+    }
+  return null;
+}
+var emptyContextObject = {};
+Object.freeze(emptyContextObject);
+var rendererSigil;
+rendererSigil = {};
+var currentActiveSnapshot = null;
+function popToNearestCommonAncestor(prev, next) {
+  if (prev !== next) {
+    prev.context._currentValue = prev.parentValue;
+    prev = prev.parent;
+    var parentNext = next.parent;
+    if (null === prev) {
+      if (null !== parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+    } else {
+      if (null === parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+      popToNearestCommonAncestor(prev, parentNext);
+    }
+    next.context._currentValue = next.value;
+  }
+}
+function popAllPrevious(prev) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  null !== prev && popAllPrevious(prev);
+}
+function pushAllNext(next) {
+  var parentNext = next.parent;
+  null !== parentNext && pushAllNext(parentNext);
+  next.context._currentValue = next.value;
+}
+function popPreviousToCommonLevel(prev, next) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  if (null === prev)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === next.depth
+    ? popToNearestCommonAncestor(prev, next)
+    : popPreviousToCommonLevel(prev, next);
+}
+function popNextToCommonLevel(prev, next) {
+  var parentNext = next.parent;
+  if (null === parentNext)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === parentNext.depth
+    ? popToNearestCommonAncestor(prev, parentNext)
+    : popNextToCommonLevel(prev, parentNext);
+  next.context._currentValue = next.value;
+}
+function switchContext(newSnapshot) {
+  var prev = currentActiveSnapshot;
+  prev !== newSnapshot &&
+    (null === prev
+      ? pushAllNext(newSnapshot)
+      : null === newSnapshot
+        ? popAllPrevious(prev)
+        : prev.depth === newSnapshot.depth
+          ? popToNearestCommonAncestor(prev, newSnapshot)
+          : prev.depth > newSnapshot.depth
+            ? popPreviousToCommonLevel(prev, newSnapshot)
+            : popNextToCommonLevel(prev, newSnapshot),
+    (currentActiveSnapshot = newSnapshot));
+}
+var didWarnAboutNoopUpdateForComponent = {},
+  didWarnAboutDeprecatedWillMount = {},
+  didWarnAboutUninitializedState,
+  didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate,
+  didWarnAboutLegacyLifecyclesAndDerivedState,
+  didWarnAboutUndefinedDerivedState,
+  didWarnAboutDirectlyAssigningPropsToState,
+  didWarnAboutContextTypes$1,
+  didWarnAboutChildContextTypes,
+  didWarnAboutInvalidateContextType,
+  didWarnOnInvalidCallback;
+didWarnAboutUninitializedState = new Set();
+didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
+didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
+didWarnAboutDirectlyAssigningPropsToState = new Set();
+didWarnAboutUndefinedDerivedState = new Set();
+didWarnAboutContextTypes$1 = new Set();
+didWarnAboutChildContextTypes = new Set();
+didWarnAboutInvalidateContextType = new Set();
+didWarnOnInvalidCallback = new Set();
+function warnOnInvalidCallback(callback) {
+  if (null !== callback && "function" !== typeof callback) {
+    var key = String(callback);
+    didWarnOnInvalidCallback.has(key) ||
+      (didWarnOnInvalidCallback.add(key),
+      console.error(
+        "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+        callback
+      ));
+  }
+}
+function warnNoop(publicInstance, callerName) {
+  publicInstance =
+    ((publicInstance = publicInstance.constructor) &&
+      getComponentNameFromType(publicInstance)) ||
+    "ReactClass";
+  var warningKey = publicInstance + "." + callerName;
+  didWarnAboutNoopUpdateForComponent[warningKey] ||
+    (console.error(
+      "Can only update a mounting component. This usually means you called %s() outside componentWillMount() on the server. This is a no-op.\n\nPlease check the code for the %s component.",
+      callerName,
+      publicInstance
+    ),
+    (didWarnAboutNoopUpdateForComponent[warningKey] = !0));
+}
+var classComponentUpdater = {
+    enqueueSetState: function (inst, payload, callback) {
+      var internals = inst._reactInternals;
+      null === internals.queue
+        ? warnNoop(inst, "setState")
+        : (internals.queue.push(payload),
+          void 0 !== callback &&
+            null !== callback &&
+            warnOnInvalidCallback(callback));
+    },
+    enqueueReplaceState: function (inst, payload, callback) {
+      inst = inst._reactInternals;
+      inst.replace = !0;
+      inst.queue = [payload];
+      void 0 !== callback &&
+        null !== callback &&
+        warnOnInvalidCallback(callback);
+    },
+    enqueueForceUpdate: function (inst, callback) {
+      null === inst._reactInternals.queue
+        ? warnNoop(inst, "forceUpdate")
+        : void 0 !== callback &&
+          null !== callback &&
+          warnOnInvalidCallback(callback);
+    }
+  },
+  emptyTreeContext = { id: 1, overflow: "" };
+function pushTreeContext(baseContext, totalChildren, index) {
+  var baseIdWithLeadingBit = baseContext.id;
+  baseContext = baseContext.overflow;
+  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+  baseIdWithLeadingBit &= ~(1 << baseLength);
+  index += 1;
+  var length = 32 - clz32(totalChildren) + baseLength;
+  if (30 < length) {
+    var numberOfOverflowBits = baseLength - (baseLength % 5);
+    length = (
+      baseIdWithLeadingBit &
+      ((1 << numberOfOverflowBits) - 1)
+    ).toString(32);
+    baseIdWithLeadingBit >>= numberOfOverflowBits;
+    baseLength -= numberOfOverflowBits;
+    return {
+      id:
+        (1 << (32 - clz32(totalChildren) + baseLength)) |
+        (index << baseLength) |
+        baseIdWithLeadingBit,
+      overflow: length + baseContext
+    };
+  }
+  return {
+    id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+    overflow: baseContext
+  };
+}
+var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+  log = Math.log,
+  LN2 = Math.LN2;
+function clz32Fallback(x) {
+  x >>>= 0;
+  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+}
+var SuspenseException = Error(
+  "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+);
+function noop$2() {}
+function trackUsedThenable(thenableState, thenable, index) {
+  index = thenableState[index];
+  void 0 === index
+    ? thenableState.push(thenable)
+    : index !== thenable && (thenable.then(noop$2, noop$2), (thenable = index));
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw thenable.reason;
+    default:
+      "string" === typeof thenable.status
+        ? thenable.then(noop$2, noop$2)
+        : ((thenableState = thenable),
+          (thenableState.status = "pending"),
+          thenableState.then(
+            function (fulfilledValue) {
+              if ("pending" === thenable.status) {
+                var fulfilledThenable = thenable;
+                fulfilledThenable.status = "fulfilled";
+                fulfilledThenable.value = fulfilledValue;
+              }
+            },
+            function (error) {
+              if ("pending" === thenable.status) {
+                var rejectedThenable = thenable;
+                rejectedThenable.status = "rejected";
+                rejectedThenable.reason = error;
+              }
+            }
+          ));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+      }
+      suspendedThenable = thenable;
+      throw SuspenseException;
+  }
+}
+var suspendedThenable = null;
+function getSuspendedThenable() {
+  if (null === suspendedThenable)
+    throw Error(
+      "Expected a suspended thenable. This is a bug in React. Please file an issue."
+    );
+  var thenable = suspendedThenable;
+  suspendedThenable = null;
+  return thenable;
+}
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  currentlyRenderingComponent = null,
+  currentlyRenderingTask = null,
+  currentlyRenderingRequest = null,
+  currentlyRenderingKeyPath = null,
+  firstWorkInProgressHook = null,
+  workInProgressHook = null,
+  isReRender = !1,
+  didScheduleRenderPhaseUpdate = !1,
+  localIdCounter = 0,
+  actionStateCounter = 0,
+  actionStateMatchingIndex = -1,
+  thenableIndexCounter = 0,
+  thenableState = null,
+  renderPhaseUpdates = null,
+  numberOfReRenders = 0,
+  isInHookUserCodeInDev = !1,
+  currentHookNameInDev;
+function resolveCurrentlyRenderingComponent() {
+  if (null === currentlyRenderingComponent)
+    throw Error(
+      "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+    );
+  isInHookUserCodeInDev &&
+    console.error(
+      "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"
+    );
+  return currentlyRenderingComponent;
+}
+function createHook() {
+  if (0 < numberOfReRenders)
+    throw Error("Rendered more hooks than during the previous render");
+  return { memoizedState: null, queue: null, next: null };
+}
+function createWorkInProgressHook() {
+  null === workInProgressHook
+    ? null === firstWorkInProgressHook
+      ? ((isReRender = !1),
+        (firstWorkInProgressHook = workInProgressHook = createHook()))
+      : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+    : null === workInProgressHook.next
+      ? ((isReRender = !1),
+        (workInProgressHook = workInProgressHook.next = createHook()))
+      : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+  return workInProgressHook;
+}
+function getThenableStateAfterSuspending() {
+  var state = thenableState;
+  thenableState = null;
+  return state;
+}
+function resetHooksState() {
+  isInHookUserCodeInDev = !1;
+  currentlyRenderingKeyPath =
+    currentlyRenderingRequest =
+    currentlyRenderingTask =
+    currentlyRenderingComponent =
+      null;
+  didScheduleRenderPhaseUpdate = !1;
+  firstWorkInProgressHook = null;
+  numberOfReRenders = 0;
+  workInProgressHook = renderPhaseUpdates = null;
+}
+function readContext(context) {
+  isInHookUserCodeInDev &&
+    console.error(
+      "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+    );
+  return context._currentValue;
+}
+function basicStateReducer(state, action) {
+  return "function" === typeof action ? action(state) : action;
+}
+function useReducer(reducer, initialArg, init) {
+  reducer !== basicStateReducer && (currentHookNameInDev = "useReducer");
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  if (isReRender) {
+    init = workInProgressHook.queue;
+    initialArg = init.dispatch;
+    if (null !== renderPhaseUpdates) {
+      var firstRenderPhaseUpdate = renderPhaseUpdates.get(init);
+      if (void 0 !== firstRenderPhaseUpdate) {
+        renderPhaseUpdates.delete(init);
+        init = workInProgressHook.memoizedState;
+        do {
+          var action = firstRenderPhaseUpdate.action;
+          isInHookUserCodeInDev = !0;
+          init = reducer(init, action);
+          isInHookUserCodeInDev = !1;
+          firstRenderPhaseUpdate = firstRenderPhaseUpdate.next;
+        } while (null !== firstRenderPhaseUpdate);
+        workInProgressHook.memoizedState = init;
+        return [init, initialArg];
+      }
+    }
+    return [workInProgressHook.memoizedState, initialArg];
+  }
+  isInHookUserCodeInDev = !0;
+  reducer =
+    reducer === basicStateReducer
+      ? "function" === typeof initialArg
+        ? initialArg()
+        : initialArg
+      : void 0 !== init
+        ? init(initialArg)
+        : initialArg;
+  isInHookUserCodeInDev = !1;
+  workInProgressHook.memoizedState = reducer;
+  reducer = workInProgressHook.queue = { last: null, dispatch: null };
+  reducer = reducer.dispatch = dispatchAction.bind(
+    null,
+    currentlyRenderingComponent,
+    reducer
+  );
+  return [workInProgressHook.memoizedState, reducer];
+}
+function useMemo(nextCreate, deps) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  if (null !== workInProgressHook) {
+    var prevState = workInProgressHook.memoizedState;
+    if (null !== prevState && null !== deps) {
+      a: {
+        var JSCompiler_inline_result = prevState[1];
+        if (null === JSCompiler_inline_result)
+          console.error(
+            "%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",
+            currentHookNameInDev
+          ),
+            (JSCompiler_inline_result = !1);
+        else {
+          deps.length !== JSCompiler_inline_result.length &&
+            console.error(
+              "The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s",
+              currentHookNameInDev,
+              "[" + deps.join(", ") + "]",
+              "[" + JSCompiler_inline_result.join(", ") + "]"
+            );
+          for (
+            var i = 0;
+            i < JSCompiler_inline_result.length && i < deps.length;
+            i++
+          )
+            if (!objectIs(deps[i], JSCompiler_inline_result[i])) {
+              JSCompiler_inline_result = !1;
+              break a;
+            }
+          JSCompiler_inline_result = !0;
+        }
+      }
+      if (JSCompiler_inline_result) return prevState[0];
+    }
+  }
+  isInHookUserCodeInDev = !0;
+  nextCreate = nextCreate();
+  isInHookUserCodeInDev = !1;
+  workInProgressHook.memoizedState = [nextCreate, deps];
+  return nextCreate;
+}
+function dispatchAction(componentIdentity, queue, action) {
+  if (25 <= numberOfReRenders)
+    throw Error(
+      "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+    );
+  if (componentIdentity === currentlyRenderingComponent)
+    if (
+      ((didScheduleRenderPhaseUpdate = !0),
+      (componentIdentity = { action: action, next: null }),
+      null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+      (action = renderPhaseUpdates.get(queue)),
+      void 0 === action)
+    )
+      renderPhaseUpdates.set(queue, componentIdentity);
+    else {
+      for (queue = action; null !== queue.next; ) queue = queue.next;
+      queue.next = componentIdentity;
+    }
+}
+function unsupportedStartTransition() {
+  throw Error("startTransition cannot be called during server rendering.");
+}
+function unsupportedSetOptimisticState() {
+  throw Error("Cannot update optimistic state while rendering.");
+}
+function useActionState(action, initialState, permalink) {
+  resolveCurrentlyRenderingComponent();
+  var actionStateHookIndex = actionStateCounter++,
+    request = currentlyRenderingRequest;
+  if ("function" === typeof action.$$FORM_ACTION) {
+    var nextPostbackStateKey = null,
+      componentKeyPath = currentlyRenderingKeyPath;
+    request = request.formState;
+    var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+    if (null !== request && "function" === typeof isSignatureEqual) {
+      var postbackKey = request[1];
+      isSignatureEqual.call(action, request[2], request[3]) &&
+        ((nextPostbackStateKey =
+          void 0 !== permalink
+            ? "p" + permalink
+            : "k" +
+              Bun.hash(
+                JSON.stringify([componentKeyPath, null, actionStateHookIndex])
+              )),
+        postbackKey === nextPostbackStateKey &&
+          ((actionStateMatchingIndex = actionStateHookIndex),
+          (initialState = request[0])));
+    }
+    var boundAction = action.bind(null, initialState);
+    action = function (payload) {
+      boundAction(payload);
+    };
+    "function" === typeof boundAction.$$FORM_ACTION &&
+      (action.$$FORM_ACTION = function (prefix) {
+        prefix = boundAction.$$FORM_ACTION(prefix);
+        void 0 !== permalink &&
+          (checkAttributeStringCoercion(permalink, "target"),
+          (permalink += ""),
+          (prefix.action = permalink));
+        var formData = prefix.data;
+        formData &&
+          (null === nextPostbackStateKey &&
+            (nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  Bun.hash(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ])
+                  )),
+          formData.append("$ACTION_KEY", nextPostbackStateKey));
+        return prefix;
+      });
+    return [initialState, action, !1];
+  }
+  var _boundAction = action.bind(null, initialState);
+  return [
+    initialState,
+    function (payload) {
+      _boundAction(payload);
+    },
+    !1
+  ];
+}
+function unwrapThenable(thenable) {
+  var index = thenableIndexCounter;
+  thenableIndexCounter += 1;
+  null === thenableState && (thenableState = []);
+  return trackUsedThenable(thenableState, thenable, index);
+}
+function unsupportedRefresh() {
+  throw Error("Cache cannot be refreshed during server rendering.");
+}
+function noop$1() {}
+var HooksDispatcher = {
+    readContext: readContext,
+    use: function (usable) {
+      if (null !== usable && "object" === typeof usable) {
+        if ("function" === typeof usable.then) return unwrapThenable(usable);
+        if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);
+      }
+      throw Error("An unsupported type was passed to use(): " + String(usable));
+    },
+    useContext: function (context) {
+      currentHookNameInDev = "useContext";
+      resolveCurrentlyRenderingComponent();
+      return context._currentValue;
+    },
+    useMemo: useMemo,
+    useReducer: useReducer,
+    useRef: function (initialValue) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      var previousRef = workInProgressHook.memoizedState;
+      return null === previousRef
+        ? ((initialValue = { current: initialValue }),
+          Object.seal(initialValue),
+          (workInProgressHook.memoizedState = initialValue))
+        : previousRef;
+    },
+    useState: function (initialState) {
+      currentHookNameInDev = "useState";
+      return useReducer(basicStateReducer, initialState);
+    },
+    useInsertionEffect: noop$1,
+    useLayoutEffect: noop$1,
+    useCallback: function (callback, deps) {
+      return useMemo(function () {
+        return callback;
+      }, deps);
+    },
+    useImperativeHandle: noop$1,
+    useEffect: noop$1,
+    useDebugValue: noop$1,
+    useDeferredValue: function (value, initialValue) {
+      resolveCurrentlyRenderingComponent();
+      return void 0 !== initialValue ? initialValue : value;
+    },
+    useTransition: function () {
+      resolveCurrentlyRenderingComponent();
+      return [!1, unsupportedStartTransition];
+    },
+    useId: function () {
+      var treeId = currentlyRenderingTask.treeContext;
+      var overflow = treeId.overflow;
+      treeId = treeId.id;
+      treeId =
+        (treeId & ~(1 << (32 - clz32(treeId) - 1))).toString(32) + overflow;
+      var resumableState = currentResumableState;
+      if (null === resumableState)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component."
+        );
+      overflow = localIdCounter++;
+      treeId = "\u00ab" + resumableState.idPrefix + "R" + treeId;
+      0 < overflow && (treeId += "H" + overflow.toString(32));
+      return treeId + "\u00bb";
+    },
+    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
+      if (void 0 === getServerSnapshot)
+        throw Error(
+          "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+        );
+      return getServerSnapshot();
+    },
+    useOptimistic: function (passthrough) {
+      resolveCurrentlyRenderingComponent();
+      return [passthrough, unsupportedSetOptimisticState];
+    },
+    useActionState: useActionState,
+    useFormState: useActionState,
+    useHostTransitionStatus: function () {
+      resolveCurrentlyRenderingComponent();
+      return NotPending;
+    },
+    useMemoCache: function (size) {
+      for (var data = Array(size), i = 0; i < size; i++)
+        data[i] = REACT_MEMO_CACHE_SENTINEL;
+      return data;
+    },
+    useCacheRefresh: function () {
+      return unsupportedRefresh;
+    }
+  },
+  currentResumableState = null,
+  currentTaskInDEV = null,
+  DefaultAsyncDispatcher = {
+    getCacheForType: function () {
+      throw Error("Not implemented.");
+    },
+    getOwner: function () {
+      return null === currentTaskInDEV ? null : currentTaskInDEV.componentStack;
+    }
+  },
+  disabledDepth = 0,
+  prevLog,
+  prevInfo,
+  prevWarn,
+  prevError,
+  prevGroup,
+  prevGroupCollapsed,
+  prevGroupEnd;
+function disabledLog() {}
+disabledLog.__reactDisabledLog = !0;
+function disableLogs() {
+  if (0 === disabledDepth) {
+    prevLog = console.log;
+    prevInfo = console.info;
+    prevWarn = console.warn;
+    prevError = console.error;
+    prevGroup = console.group;
+    prevGroupCollapsed = console.groupCollapsed;
+    prevGroupEnd = console.groupEnd;
+    var props = {
+      configurable: !0,
+      enumerable: !0,
+      value: disabledLog,
+      writable: !0
+    };
+    Object.defineProperties(console, {
+      info: props,
+      log: props,
+      warn: props,
+      error: props,
+      group: props,
+      groupCollapsed: props,
+      groupEnd: props
+    });
+  }
+  disabledDepth++;
+}
+function reenableLogs() {
+  disabledDepth--;
+  if (0 === disabledDepth) {
+    var props = { configurable: !0, enumerable: !0, writable: !0 };
+    Object.defineProperties(console, {
+      log: assign({}, props, { value: prevLog }),
+      info: assign({}, props, { value: prevInfo }),
+      warn: assign({}, props, { value: prevWarn }),
+      error: assign({}, props, { value: prevError }),
+      group: assign({}, props, { value: prevGroup }),
+      groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
+      groupEnd: assign({}, props, { value: prevGroupEnd })
+    });
+  }
+  0 > disabledDepth &&
+    console.error(
+      "disabledDepth fell below zero. This is a bug in React. Please file an issue."
+    );
+}
+var prefix, suffix;
+function describeBuiltInComponentFrame(name) {
+  if (void 0 === prefix)
+    try {
+      throw Error();
+    } catch (x) {
+      var match = x.stack.trim().match(/\n( *(at )?)/);
+      prefix = (match && match[1]) || "";
+      suffix =
+        -1 < x.stack.indexOf("\n    at")
+          ? " (<anonymous>)"
+          : -1 < x.stack.indexOf("@")
+            ? "@unknown:0:0"
+            : "";
+    }
+  return "\n" + prefix + name + suffix;
+}
+var reentry = !1,
+  componentFrameCache;
+componentFrameCache = new ("function" === typeof WeakMap ? WeakMap : Map)();
+function describeNativeComponentFrame(fn, construct) {
+  if (!fn || reentry) return "";
+  var frame = componentFrameCache.get(fn);
+  if (void 0 !== frame) return frame;
+  reentry = !0;
+  frame = Error.prepareStackTrace;
+  Error.prepareStackTrace = void 0;
+  var previousDispatcher = null;
+  previousDispatcher = ReactSharedInternals.H;
+  ReactSharedInternals.H = null;
+  disableLogs();
+  try {
+    var RunInRootFrame = {
+      DetermineComponentFrameRoot: function () {
+        try {
+          if (construct) {
+            var Fake = function () {
+              throw Error();
+            };
+            Object.defineProperty(Fake.prototype, "props", {
+              set: function () {
+                throw Error();
+              }
+            });
+            if ("object" === typeof Reflect && Reflect.construct) {
+              try {
+                Reflect.construct(Fake, []);
+              } catch (x) {
+                var control = x;
+              }
+              Reflect.construct(fn, [], Fake);
+            } else {
+              try {
+                Fake.call();
+              } catch (x$0) {
+                control = x$0;
+              }
+              fn.call(Fake.prototype);
+            }
+          } else {
+            try {
+              throw Error();
+            } catch (x$1) {
+              control = x$1;
+            }
+            (Fake = fn()) &&
+              "function" === typeof Fake.catch &&
+              Fake.catch(function () {});
+          }
+        } catch (sample) {
+          if (sample && control && "string" === typeof sample.stack)
+            return [sample.stack, control.stack];
+        }
+        return [null, null];
+      }
+    };
+    RunInRootFrame.DetermineComponentFrameRoot.displayName =
+      "DetermineComponentFrameRoot";
+    var namePropDescriptor = Object.getOwnPropertyDescriptor(
+      RunInRootFrame.DetermineComponentFrameRoot,
+      "name"
+    );
+    namePropDescriptor &&
+      namePropDescriptor.configurable &&
+      Object.defineProperty(
+        RunInRootFrame.DetermineComponentFrameRoot,
+        "name",
+        { value: "DetermineComponentFrameRoot" }
+      );
+    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
+      sampleStack = _RunInRootFrame$Deter[0],
+      controlStack = _RunInRootFrame$Deter[1];
+    if (sampleStack && controlStack) {
+      var sampleLines = sampleStack.split("\n"),
+        controlLines = controlStack.split("\n");
+      for (
+        _RunInRootFrame$Deter = namePropDescriptor = 0;
+        namePropDescriptor < sampleLines.length &&
+        !sampleLines[namePropDescriptor].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        namePropDescriptor++;
+      for (
+        ;
+        _RunInRootFrame$Deter < controlLines.length &&
+        !controlLines[_RunInRootFrame$Deter].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        _RunInRootFrame$Deter++;
+      if (
+        namePropDescriptor === sampleLines.length ||
+        _RunInRootFrame$Deter === controlLines.length
+      )
+        for (
+          namePropDescriptor = sampleLines.length - 1,
+            _RunInRootFrame$Deter = controlLines.length - 1;
+          1 <= namePropDescriptor &&
+          0 <= _RunInRootFrame$Deter &&
+          sampleLines[namePropDescriptor] !==
+            controlLines[_RunInRootFrame$Deter];
+
+        )
+          _RunInRootFrame$Deter--;
+      for (
+        ;
+        1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;
+        namePropDescriptor--, _RunInRootFrame$Deter--
+      )
+        if (
+          sampleLines[namePropDescriptor] !==
+          controlLines[_RunInRootFrame$Deter]
+        ) {
+          if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {
+            do
+              if (
+                (namePropDescriptor--,
+                _RunInRootFrame$Deter--,
+                0 > _RunInRootFrame$Deter ||
+                  sampleLines[namePropDescriptor] !==
+                    controlLines[_RunInRootFrame$Deter])
+              ) {
+                var _frame =
+                  "\n" +
+                  sampleLines[namePropDescriptor].replace(" at new ", " at ");
+                fn.displayName &&
+                  _frame.includes("<anonymous>") &&
+                  (_frame = _frame.replace("<anonymous>", fn.displayName));
+                "function" === typeof fn && componentFrameCache.set(fn, _frame);
+                return _frame;
+              }
+            while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
+          }
+          break;
+        }
+    }
+  } finally {
+    (reentry = !1),
+      (ReactSharedInternals.H = previousDispatcher),
+      reenableLogs(),
+      (Error.prepareStackTrace = frame);
+  }
+  sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "")
+    ? describeBuiltInComponentFrame(sampleLines)
+    : "";
+  "function" === typeof fn && componentFrameCache.set(fn, sampleLines);
+  return sampleLines;
+}
+function formatOwnerStack(error) {
+  var prevPrepareStackTrace = Error.prepareStackTrace;
+  Error.prepareStackTrace = void 0;
+  error = error.stack;
+  Error.prepareStackTrace = prevPrepareStackTrace;
+  error.startsWith("Error: react-stack-top-frame\n") &&
+    (error = error.slice(29));
+  prevPrepareStackTrace = error.indexOf("\n");
+  -1 !== prevPrepareStackTrace &&
+    (error = error.slice(prevPrepareStackTrace + 1));
+  prevPrepareStackTrace = error.indexOf("react_stack_bottom_frame");
+  -1 !== prevPrepareStackTrace &&
+    (prevPrepareStackTrace = error.lastIndexOf("\n", prevPrepareStackTrace));
+  if (-1 !== prevPrepareStackTrace)
+    error = error.slice(0, prevPrepareStackTrace);
+  else return "";
+  return error;
+}
+function describeComponentStackByType(type) {
+  if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+  if ("function" === typeof type)
+    return type.prototype && type.prototype.isReactComponent
+      ? describeNativeComponentFrame(type, !0)
+      : describeNativeComponentFrame(type, !1);
+  if ("object" === typeof type && null !== type) {
+    switch (type.$$typeof) {
+      case REACT_FORWARD_REF_TYPE:
+        return describeNativeComponentFrame(type.render, !1);
+      case REACT_MEMO_TYPE:
+        return describeNativeComponentFrame(type.type, !1);
+      case REACT_LAZY_TYPE:
+        var lazyComponent = type,
+          payload = lazyComponent._payload;
+        lazyComponent = lazyComponent._init;
+        try {
+          type = lazyComponent(payload);
+        } catch (x) {
+          return describeBuiltInComponentFrame("Lazy");
+        }
+        return describeComponentStackByType(type);
+    }
+    if ("string" === typeof type.name)
+      return (
+        (payload = type.env),
+        describeBuiltInComponentFrame(
+          type.name + (payload ? " [" + payload + "]" : "")
+        )
+      );
+  }
+  switch (type) {
+    case REACT_SUSPENSE_LIST_TYPE:
+      return describeBuiltInComponentFrame("SuspenseList");
+    case REACT_SUSPENSE_TYPE:
+      return describeBuiltInComponentFrame("Suspense");
+  }
+  return "";
+}
+var callComponent = {
+    react_stack_bottom_frame: function (Component, props, secondArg) {
+      return Component(props, secondArg);
+    }
+  },
+  callComponentInDEV =
+    callComponent.react_stack_bottom_frame.bind(callComponent),
+  callRender = {
+    react_stack_bottom_frame: function (instance) {
+      return instance.render();
+    }
+  },
+  callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),
+  callLazyInit = {
+    react_stack_bottom_frame: function (lazy) {
+      var init = lazy._init;
+      return init(lazy._payload);
+    }
+  },
+  callLazyInitInDEV = callLazyInit.react_stack_bottom_frame.bind(callLazyInit),
+  lastResetTime = 0,
+  getCurrentTime;
+if ("object" === typeof performance && "function" === typeof performance.now) {
+  var localPerformance = performance;
+  getCurrentTime = function () {
+    return localPerformance.now();
+  };
+} else {
+  var localDate = Date;
+  getCurrentTime = function () {
+    return localDate.now();
+  };
+}
+var CLIENT_RENDERED = 4,
+  PENDING = 0,
+  COMPLETED = 1,
+  FLUSHED = 2,
+  POSTPONED = 5,
+  CLOSED = 14;
+function defaultErrorHandler(error) {
+  if (
+    "object" === typeof error &&
+    null !== error &&
+    "string" === typeof error.environmentName
+  ) {
+    var JSCompiler_inline_result = error.environmentName;
+    error = [error].slice(0);
+    "string" === typeof error[0]
+      ? error.splice(
+          0,
+          1,
+          "%c%s%c " + error[0],
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        )
+      : error.splice(
+          0,
+          0,
+          "%c%s%c ",
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        );
+    error.unshift(console);
+    JSCompiler_inline_result = bind.apply(console.error, error);
+    JSCompiler_inline_result();
+  } else console.error(error);
+  return null;
+}
+function noop() {}
+function RequestInstance(
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  var abortSet = new Set();
+  this.destination = null;
+  this.flushScheduled = !1;
+  this.resumableState = resumableState;
+  this.renderState = renderState;
+  this.rootFormatContext = rootFormatContext;
+  this.progressiveChunkSize =
+    void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+  this.status = 10;
+  this.fatalError = null;
+  this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+  this.completedPreambleSegments = this.completedRootSegment = null;
+  this.abortableTasks = abortSet;
+  this.pingedTasks = [];
+  this.clientRenderedBoundaries = [];
+  this.completedBoundaries = [];
+  this.partialBoundaries = [];
+  this.trackedPostpones = null;
+  this.onError = void 0 === onError ? defaultErrorHandler : onError;
+  this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+  this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+  this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+  this.onShellError = void 0 === onShellError ? noop : onShellError;
+  this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+  this.formState = void 0 === formState ? null : formState;
+  this.didWarnForKey = null;
+}
+function createRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  var now = getCurrentTime();
+  1e3 < now - lastResetTime &&
+    ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),
+    (lastResetTime = now));
+  resumableState = new RequestInstance(
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    formState
+  );
+  renderState = createPendingSegment(
+    resumableState,
+    0,
+    null,
+    rootFormatContext,
+    !1,
+    !1
+  );
+  renderState.parentFlushed = !0;
+  children = createRenderTask(
+    resumableState,
+    null,
+    children,
+    -1,
+    null,
+    renderState,
+    null,
+    null,
+    resumableState.abortableTasks,
+    null,
+    rootFormatContext,
+    null,
+    emptyTreeContext,
+    null,
+    !1,
+    emptyContextObject,
+    null
+  );
+  pushComponentStack(children);
+  resumableState.pingedTasks.push(children);
+  return resumableState;
+}
+var currentRequest = null;
+function pingTask(request, task) {
+  request.pingedTasks.push(task);
+  1 === request.pingedTasks.length &&
+    ((request.flushScheduled = null !== request.destination),
+    null !== request.trackedPostpones || 10 === request.status
+      ? scheduleMicrotask(function () {
+          return performWork(request);
+        })
+      : setTimeout(function () {
+          return performWork(request);
+        }, 0));
+}
+function createSuspenseBoundary(
+  request,
+  fallbackAbortableTasks,
+  contentPreamble,
+  fallbackPreamble
+) {
+  return {
+    status: PENDING,
+    rootSegmentID: -1,
+    parentFlushed: !1,
+    pendingTasks: 0,
+    completedSegments: [],
+    byteSize: 0,
+    fallbackAbortableTasks: fallbackAbortableTasks,
+    errorDigest: null,
+    contentState: createHoistableState(),
+    fallbackState: createHoistableState(),
+    contentPreamble: contentPreamble,
+    fallbackPreamble: fallbackPreamble,
+    trackedContentKeyPath: null,
+    trackedFallbackNode: null,
+    errorMessage: null,
+    errorStack: null,
+    errorComponentStack: null
+  };
+}
+function createRenderTask(
+  request,
+  thenableState,
+  node,
+  childIndex,
+  blockedBoundary,
+  blockedSegment,
+  blockedPreamble,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback,
+  legacyContext,
+  debugTask
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  var task = {
+    replay: null,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: blockedSegment,
+    blockedPreamble: blockedPreamble,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  task.debugTask = debugTask;
+  abortSet.add(task);
+  return task;
+}
+function createReplayTask(
+  request,
+  thenableState,
+  replay,
+  node,
+  childIndex,
+  blockedBoundary,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback,
+  legacyContext,
+  debugTask
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  replay.pendingTasks++;
+  var task = {
+    replay: replay,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: null,
+    blockedPreamble: null,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  task.debugTask = debugTask;
+  abortSet.add(task);
+  return task;
+}
+function createPendingSegment(
+  request,
+  index,
+  boundary,
+  parentFormatContext,
+  lastPushedText,
+  textEmbedded
+) {
+  return {
+    status: PENDING,
+    parentFlushed: !1,
+    id: -1,
+    index: index,
+    chunks: [],
+    children: [],
+    preambleChildren: [],
+    parentFormatContext: parentFormatContext,
+    boundary: boundary,
+    lastPushedText: lastPushedText,
+    textEmbedded: textEmbedded
+  };
+}
+function getCurrentStackInDEV() {
+  if (null === currentTaskInDEV || null === currentTaskInDEV.componentStack)
+    return "";
+  var componentStack = currentTaskInDEV.componentStack;
+  try {
+    var info = "";
+    if ("string" === typeof componentStack.type)
+      info += describeBuiltInComponentFrame(componentStack.type);
+    else if ("function" === typeof componentStack.type) {
+      if (!componentStack.owner) {
+        var JSCompiler_temp_const = info,
+          fn = componentStack.type,
+          name = fn ? fn.displayName || fn.name : "";
+        var JSCompiler_inline_result = name
+          ? describeBuiltInComponentFrame(name)
+          : "";
+        info = JSCompiler_temp_const + JSCompiler_inline_result;
+      }
+    } else
+      componentStack.owner ||
+        (info += describeComponentStackByType(componentStack.type));
+    for (; componentStack; )
+      (JSCompiler_temp_const = null),
+        null != componentStack.debugStack
+          ? (JSCompiler_temp_const = formatOwnerStack(
+              componentStack.debugStack
+            ))
+          : ((JSCompiler_inline_result = componentStack),
+            null != JSCompiler_inline_result.stack &&
+              (JSCompiler_temp_const =
+                "string" !== typeof JSCompiler_inline_result.stack
+                  ? (JSCompiler_inline_result.stack = formatOwnerStack(
+                      JSCompiler_inline_result.stack
+                    ))
+                  : JSCompiler_inline_result.stack)),
+        (componentStack = componentStack.owner) &&
+          JSCompiler_temp_const &&
+          (info += "\n" + JSCompiler_temp_const);
+    var JSCompiler_inline_result$jscomp$0 = info;
+  } catch (x) {
+    JSCompiler_inline_result$jscomp$0 =
+      "\nError generating stack: " + x.message + "\n" + x.stack;
+  }
+  return JSCompiler_inline_result$jscomp$0;
+}
+function pushServerComponentStack(task, debugInfo) {
+  if (null != debugInfo)
+    for (var i = 0; i < debugInfo.length; i++) {
+      var componentInfo = debugInfo[i];
+      "string" === typeof componentInfo.name &&
+        void 0 !== componentInfo.debugStack &&
+        ((task.componentStack = {
+          parent: task.componentStack,
+          type: componentInfo,
+          owner: componentInfo.owner,
+          stack: componentInfo.debugStack
+        }),
+        (task.debugTask = componentInfo.debugTask));
+    }
+}
+function pushComponentStack(task) {
+  var node = task.node;
+  if ("object" === typeof node && null !== node)
+    switch (node.$$typeof) {
+      case REACT_ELEMENT_TYPE:
+        var type = node.type,
+          owner = node._owner,
+          stack = node._debugStack;
+        pushServerComponentStack(task, node._debugInfo);
+        task.debugTask = node._debugTask;
+        task.componentStack = {
+          parent: task.componentStack,
+          type: type,
+          owner: owner,
+          stack: stack
+        };
+        break;
+      case REACT_LAZY_TYPE:
+        pushServerComponentStack(task, node._debugInfo);
+        break;
+      default:
+        "function" === typeof node.then &&
+          pushServerComponentStack(task, node._debugInfo);
+    }
+}
+function getThrownInfo(node$jscomp$0) {
+  var errorInfo = {};
+  node$jscomp$0 &&
+    Object.defineProperty(errorInfo, "componentStack", {
+      configurable: !0,
+      enumerable: !0,
+      get: function () {
+        try {
+          var info = "",
+            node = node$jscomp$0;
+          do
+            (info += describeComponentStackByType(node.type)),
+              (node = node.parent);
+          while (node);
+          var stack = info;
+        } catch (x) {
+          stack = "\nError generating stack: " + x.message + "\n" + x.stack;
+        }
+        Object.defineProperty(errorInfo, "componentStack", { value: stack });
+        return stack;
+      }
+    });
+  return errorInfo;
+}
+function encodeErrorForBoundary(
+  boundary,
+  digest,
+  error,
+  thrownInfo,
+  wasAborted
+) {
+  boundary.errorDigest = digest;
+  error instanceof Error
+    ? ((digest = String(error.message)), (error = String(error.stack)))
+    : ((digest =
+        "object" === typeof error && null !== error
+          ? describeObjectForErrorMessage(error)
+          : String(error)),
+      (error = null));
+  wasAborted = wasAborted
+    ? "Switched to client rendering because the server rendering aborted due to:\n\n"
+    : "Switched to client rendering because the server rendering errored:\n\n";
+  boundary.errorMessage = wasAborted + digest;
+  boundary.errorStack = null !== error ? wasAborted + error : null;
+  boundary.errorComponentStack = thrownInfo.componentStack;
+}
+function logRecoverableError(request, error, errorInfo, debugTask) {
+  request = request.onError;
+  error = debugTask
+    ? debugTask.run(request.bind(null, error, errorInfo))
+    : request(error, errorInfo);
+  if (null != error && "string" !== typeof error)
+    console.error(
+      'onError returned something with a type other than "string". onError should return a string and may return null or undefined but must not return anything else. It received something of type "%s" instead',
+      typeof error
+    );
+  else return error;
+}
+function fatalError(request, error, errorInfo, debugTask) {
+  errorInfo = request.onShellError;
+  var onFatalError = request.onFatalError;
+  debugTask
+    ? (debugTask.run(errorInfo.bind(null, error)),
+      debugTask.run(onFatalError.bind(null, error)))
+    : (errorInfo(error), onFatalError(error));
+  null !== request.destination
+    ? ((request.status = CLOSED), closeWithError(request.destination, error))
+    : ((request.status = 13), (request.fatalError = error));
+}
+function renderWithHooks(request, task, keyPath, Component, props, secondArg) {
+  var prevThenableState = task.thenableState;
+  task.thenableState = null;
+  currentlyRenderingComponent = {};
+  currentlyRenderingTask = task;
+  currentlyRenderingRequest = request;
+  currentlyRenderingKeyPath = keyPath;
+  isInHookUserCodeInDev = !1;
+  actionStateCounter = localIdCounter = 0;
+  actionStateMatchingIndex = -1;
+  thenableIndexCounter = 0;
+  thenableState = prevThenableState;
+  for (
+    request = callComponentInDEV(Component, props, secondArg);
+    didScheduleRenderPhaseUpdate;
+
+  )
+    (didScheduleRenderPhaseUpdate = !1),
+      (actionStateCounter = localIdCounter = 0),
+      (actionStateMatchingIndex = -1),
+      (thenableIndexCounter = 0),
+      (numberOfReRenders += 1),
+      (workInProgressHook = null),
+      (request = Component(props, secondArg));
+  resetHooksState();
+  return request;
+}
+var didWarnAboutBadClass = {},
+  didWarnAboutContextTypes = {},
+  didWarnAboutContextTypeOnFunctionComponent = {},
+  didWarnAboutGetDerivedStateOnFunctionComponent = {},
+  didWarnAboutReassigningProps = !1,
+  didWarnAboutGenerators = !1,
+  didWarnAboutMaps = !1;
+function finishFunctionComponent(
+  request,
+  task,
+  keyPath,
+  children,
+  hasId,
+  actionStateCount,
+  actionStateMatchingIndex
+) {
+  var didEmitActionStateMarkers = !1;
+  if (0 !== actionStateCount && null !== request.formState) {
+    var segment = task.blockedSegment;
+    if (null !== segment) {
+      didEmitActionStateMarkers = !0;
+      segment = segment.chunks;
+      for (var i = 0; i < actionStateCount; i++)
+        i === actionStateMatchingIndex
+          ? segment.push("\x3c!--F!--\x3e")
+          : segment.push("\x3c!--F--\x3e");
+    }
+  }
+  actionStateCount = task.keyPath;
+  task.keyPath = keyPath;
+  hasId
+    ? ((keyPath = task.treeContext),
+      (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+      renderNode(request, task, children, -1),
+      (task.treeContext = keyPath))
+    : didEmitActionStateMarkers
+      ? renderNode(request, task, children, -1)
+      : renderNodeDestructive(request, task, children, -1);
+  task.keyPath = actionStateCount;
+}
+function renderElement(request, task, keyPath, type, props, ref) {
+  if ("function" === typeof type)
+    if (type.prototype && type.prototype.isReactComponent) {
+      var newProps = props;
+      if ("ref" in props) {
+        newProps = {};
+        for (var propName in props)
+          "ref" !== propName && (newProps[propName] = props[propName]);
+      }
+      var defaultProps = type.defaultProps;
+      if (defaultProps) {
+        newProps === props && (newProps = assign({}, newProps, props));
+        for (var _propName in defaultProps)
+          void 0 === newProps[_propName] &&
+            (newProps[_propName] = defaultProps[_propName]);
+      }
+      var resolvedProps = newProps;
+      var context = emptyContextObject,
+        contextType = type.contextType;
+      if (
+        "contextType" in type &&
+        null !== contextType &&
+        (void 0 === contextType ||
+          contextType.$$typeof !== REACT_CONTEXT_TYPE) &&
+        !didWarnAboutInvalidateContextType.has(type)
+      ) {
+        didWarnAboutInvalidateContextType.add(type);
+        var addendum =
+          void 0 === contextType
+            ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file."
+            : "object" !== typeof contextType
+              ? " However, it is set to a " + typeof contextType + "."
+              : contextType.$$typeof === REACT_CONSUMER_TYPE
+                ? " Did you accidentally pass the Context.Consumer instead?"
+                : " However, it is set to an object with keys {" +
+                  Object.keys(contextType).join(", ") +
+                  "}.";
+        console.error(
+          "%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",
+          getComponentNameFromType(type) || "Component",
+          addendum
+        );
+      }
+      "object" === typeof contextType &&
+        null !== contextType &&
+        (context = contextType._currentValue);
+      var instance = new type(resolvedProps, context);
+      if (
+        "function" === typeof type.getDerivedStateFromProps &&
+        (null === instance.state || void 0 === instance.state)
+      ) {
+        var componentName = getComponentNameFromType(type) || "Component";
+        didWarnAboutUninitializedState.has(componentName) ||
+          (didWarnAboutUninitializedState.add(componentName),
+          console.error(
+            "`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",
+            componentName,
+            null === instance.state ? "null" : "undefined",
+            componentName
+          ));
+      }
+      if (
+        "function" === typeof type.getDerivedStateFromProps ||
+        "function" === typeof instance.getSnapshotBeforeUpdate
+      ) {
+        var foundWillMountName = null,
+          foundWillReceivePropsName = null,
+          foundWillUpdateName = null;
+        "function" === typeof instance.componentWillMount &&
+        !0 !== instance.componentWillMount.__suppressDeprecationWarning
+          ? (foundWillMountName = "componentWillMount")
+          : "function" === typeof instance.UNSAFE_componentWillMount &&
+            (foundWillMountName = "UNSAFE_componentWillMount");
+        "function" === typeof instance.componentWillReceiveProps &&
+        !0 !== instance.componentWillReceiveProps.__suppressDeprecationWarning
+          ? (foundWillReceivePropsName = "componentWillReceiveProps")
+          : "function" === typeof instance.UNSAFE_componentWillReceiveProps &&
+            (foundWillReceivePropsName = "UNSAFE_componentWillReceiveProps");
+        "function" === typeof instance.componentWillUpdate &&
+        !0 !== instance.componentWillUpdate.__suppressDeprecationWarning
+          ? (foundWillUpdateName = "componentWillUpdate")
+          : "function" === typeof instance.UNSAFE_componentWillUpdate &&
+            (foundWillUpdateName = "UNSAFE_componentWillUpdate");
+        if (
+          null !== foundWillMountName ||
+          null !== foundWillReceivePropsName ||
+          null !== foundWillUpdateName
+        ) {
+          var _componentName = getComponentNameFromType(type) || "Component",
+            newApiName =
+              "function" === typeof type.getDerivedStateFromProps
+                ? "getDerivedStateFromProps()"
+                : "getSnapshotBeforeUpdate()";
+          didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName) ||
+            (didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName),
+            console.error(
+              "Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles",
+              _componentName,
+              newApiName,
+              null !== foundWillMountName ? "\n  " + foundWillMountName : "",
+              null !== foundWillReceivePropsName
+                ? "\n  " + foundWillReceivePropsName
+                : "",
+              null !== foundWillUpdateName ? "\n  " + foundWillUpdateName : ""
+            ));
+        }
+      }
+      var name = getComponentNameFromType(type) || "Component";
+      instance.render ||
+        (type.prototype && "function" === typeof type.prototype.render
+          ? console.error(
+              "No `render` method found on the %s instance: did you accidentally return an object from the constructor?",
+              name
+            )
+          : console.error(
+              "No `render` method found on the %s instance: you may have forgotten to define `render`.",
+              name
+            ));
+      !instance.getInitialState ||
+        instance.getInitialState.isReactClassApproved ||
+        instance.state ||
+        console.error(
+          "getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",
+          name
+        );
+      instance.getDefaultProps &&
+        !instance.getDefaultProps.isReactClassApproved &&
+        console.error(
+          "getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",
+          name
+        );
+      instance.contextType &&
+        console.error(
+          "contextType was defined as an instance property on %s. Use a static property to define contextType instead.",
+          name
+        );
+      type.childContextTypes &&
+        !didWarnAboutChildContextTypes.has(type) &&
+        (didWarnAboutChildContextTypes.add(type),
+        console.error(
+          "%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",
+          name
+        ));
+      type.contextTypes &&
+        !didWarnAboutContextTypes$1.has(type) &&
+        (didWarnAboutContextTypes$1.add(type),
+        console.error(
+          "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",
+          name
+        ));
+      "function" === typeof instance.componentShouldUpdate &&
+        console.error(
+          "%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",
+          name
+        );
+      type.prototype &&
+        type.prototype.isPureReactComponent &&
+        "undefined" !== typeof instance.shouldComponentUpdate &&
+        console.error(
+          "%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",
+          getComponentNameFromType(type) || "A pure component"
+        );
+      "function" === typeof instance.componentDidUnmount &&
+        console.error(
+          "%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",
+          name
+        );
+      "function" === typeof instance.componentDidReceiveProps &&
+        console.error(
+          "%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",
+          name
+        );
+      "function" === typeof instance.componentWillRecieveProps &&
+        console.error(
+          "%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",
+          name
+        );
+      "function" === typeof instance.UNSAFE_componentWillRecieveProps &&
+        console.error(
+          "%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",
+          name
+        );
+      var hasMutatedProps = instance.props !== resolvedProps;
+      void 0 !== instance.props &&
+        hasMutatedProps &&
+        console.error(
+          "When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",
+          name
+        );
+      instance.defaultProps &&
+        console.error(
+          "Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",
+          name,
+          name
+        );
+      "function" !== typeof instance.getSnapshotBeforeUpdate ||
+        "function" === typeof instance.componentDidUpdate ||
+        didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(type) ||
+        (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(type),
+        console.error(
+          "%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",
+          getComponentNameFromType(type)
+        ));
+      "function" === typeof instance.getDerivedStateFromProps &&
+        console.error(
+          "%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+          name
+        );
+      "function" === typeof instance.getDerivedStateFromError &&
+        console.error(
+          "%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+          name
+        );
+      "function" === typeof type.getSnapshotBeforeUpdate &&
+        console.error(
+          "%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",
+          name
+        );
+      var state = instance.state;
+      state &&
+        ("object" !== typeof state || isArrayImpl(state)) &&
+        console.error("%s.state: must be set to an object or null", name);
+      "function" === typeof instance.getChildContext &&
+        "object" !== typeof type.childContextTypes &&
+        console.error(
+          "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",
+          name
+        );
+      var initialState = void 0 !== instance.state ? instance.state : null;
+      instance.updater = classComponentUpdater;
+      instance.props = resolvedProps;
+      instance.state = initialState;
+      var internalInstance = { queue: [], replace: !1 };
+      instance._reactInternals = internalInstance;
+      var contextType$jscomp$0 = type.contextType;
+      instance.context =
+        "object" === typeof contextType$jscomp$0 &&
+        null !== contextType$jscomp$0
+          ? contextType$jscomp$0._currentValue
+          : emptyContextObject;
+      if (instance.state === resolvedProps) {
+        var componentName$jscomp$0 =
+          getComponentNameFromType(type) || "Component";
+        didWarnAboutDirectlyAssigningPropsToState.has(componentName$jscomp$0) ||
+          (didWarnAboutDirectlyAssigningPropsToState.add(
+            componentName$jscomp$0
+          ),
+          console.error(
+            "%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",
+            componentName$jscomp$0
+          ));
+      }
+      var getDerivedStateFromProps = type.getDerivedStateFromProps;
+      if ("function" === typeof getDerivedStateFromProps) {
+        var partialState = getDerivedStateFromProps(
+          resolvedProps,
+          initialState
+        );
+        if (void 0 === partialState) {
+          var componentName$jscomp$1 =
+            getComponentNameFromType(type) || "Component";
+          didWarnAboutUndefinedDerivedState.has(componentName$jscomp$1) ||
+            (didWarnAboutUndefinedDerivedState.add(componentName$jscomp$1),
+            console.error(
+              "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",
+              componentName$jscomp$1
+            ));
+        }
+        var JSCompiler_inline_result =
+          null === partialState || void 0 === partialState
+            ? initialState
+            : assign({}, initialState, partialState);
+        instance.state = JSCompiler_inline_result;
+      }
+      if (
+        "function" !== typeof type.getDerivedStateFromProps &&
+        "function" !== typeof instance.getSnapshotBeforeUpdate &&
+        ("function" === typeof instance.UNSAFE_componentWillMount ||
+          "function" === typeof instance.componentWillMount)
+      ) {
+        var oldState = instance.state;
+        if ("function" === typeof instance.componentWillMount) {
+          if (!0 !== instance.componentWillMount.__suppressDeprecationWarning) {
+            var componentName$jscomp$2 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutDeprecatedWillMount[componentName$jscomp$2] ||
+              (console.warn(
+                "componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code from componentWillMount to componentDidMount (preferred in most cases) or the constructor.\n\nPlease update the following components: %s",
+                componentName$jscomp$2
+              ),
+              (didWarnAboutDeprecatedWillMount[componentName$jscomp$2] = !0));
+          }
+          instance.componentWillMount();
+        }
+        "function" === typeof instance.UNSAFE_componentWillMount &&
+          instance.UNSAFE_componentWillMount();
+        oldState !== instance.state &&
+          (console.error(
+            "%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+            getComponentNameFromType(type) || "Component"
+          ),
+          classComponentUpdater.enqueueReplaceState(
+            instance,
+            instance.state,
+            null
+          ));
+        if (
+          null !== internalInstance.queue &&
+          0 < internalInstance.queue.length
+        ) {
+          var oldQueue = internalInstance.queue,
+            oldReplace = internalInstance.replace;
+          internalInstance.queue = null;
+          internalInstance.replace = !1;
+          if (oldReplace && 1 === oldQueue.length) instance.state = oldQueue[0];
+          else {
+            for (
+              var nextState = oldReplace ? oldQueue[0] : instance.state,
+                dontMutate = !0,
+                i = oldReplace ? 1 : 0;
+              i < oldQueue.length;
+              i++
+            ) {
+              var partial = oldQueue[i],
+                partialState$jscomp$0 =
+                  "function" === typeof partial
+                    ? partial.call(instance, nextState, resolvedProps, void 0)
+                    : partial;
+              null != partialState$jscomp$0 &&
+                (dontMutate
+                  ? ((dontMutate = !1),
+                    (nextState = assign({}, nextState, partialState$jscomp$0)))
+                  : assign(nextState, partialState$jscomp$0));
+            }
+            instance.state = nextState;
+          }
+        } else internalInstance.queue = null;
+      }
+      var nextChildren = callRenderInDEV(instance);
+      if (12 === request.status) throw null;
+      instance.props !== resolvedProps &&
+        (didWarnAboutReassigningProps ||
+          console.error(
+            "It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",
+            getComponentNameFromType(type) || "a component"
+          ),
+        (didWarnAboutReassigningProps = !0));
+      var prevKeyPath = task.keyPath;
+      task.keyPath = keyPath;
+      renderNodeDestructive(request, task, nextChildren, -1);
+      task.keyPath = prevKeyPath;
+    } else {
+      if (type.prototype && "function" === typeof type.prototype.render) {
+        var componentName$jscomp$3 =
+          getComponentNameFromType(type) || "Unknown";
+        didWarnAboutBadClass[componentName$jscomp$3] ||
+          (console.error(
+            "The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",
+            componentName$jscomp$3,
+            componentName$jscomp$3
+          ),
+          (didWarnAboutBadClass[componentName$jscomp$3] = !0));
+      }
+      var value = renderWithHooks(request, task, keyPath, type, props, void 0);
+      if (12 === request.status) throw null;
+      var hasId = 0 !== localIdCounter,
+        actionStateCount = actionStateCounter,
+        actionStateMatchingIndex$jscomp$0 = actionStateMatchingIndex;
+      if (type.contextTypes) {
+        var _componentName$jscomp$0 =
+          getComponentNameFromType(type) || "Unknown";
+        didWarnAboutContextTypes[_componentName$jscomp$0] ||
+          ((didWarnAboutContextTypes[_componentName$jscomp$0] = !0),
+          console.error(
+            "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",
+            _componentName$jscomp$0
+          ));
+      }
+      type &&
+        type.childContextTypes &&
+        console.error(
+          "childContextTypes cannot be defined on a function component.\n  %s.childContextTypes = ...",
+          type.displayName || type.name || "Component"
+        );
+      if ("function" === typeof type.getDerivedStateFromProps) {
+        var _componentName2 = getComponentNameFromType(type) || "Unknown";
+        didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] ||
+          (console.error(
+            "%s: Function components do not support getDerivedStateFromProps.",
+            _componentName2
+          ),
+          (didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] =
+            !0));
+      }
+      if ("object" === typeof type.contextType && null !== type.contextType) {
+        var _componentName3 = getComponentNameFromType(type) || "Unknown";
+        didWarnAboutContextTypeOnFunctionComponent[_componentName3] ||
+          (console.error(
+            "%s: Function components do not support contextType.",
+            _componentName3
+          ),
+          (didWarnAboutContextTypeOnFunctionComponent[_componentName3] = !0));
+      }
+      finishFunctionComponent(
+        request,
+        task,
+        keyPath,
+        value,
+        hasId,
+        actionStateCount,
+        actionStateMatchingIndex$jscomp$0
+      );
+    }
+  else if ("string" === typeof type) {
+    var segment = task.blockedSegment;
+    if (null === segment) {
+      var children = props.children,
+        prevContext = task.formatContext,
+        prevKeyPath$jscomp$0 = task.keyPath;
+      task.formatContext = getChildFormatContext(prevContext, type, props);
+      task.keyPath = keyPath;
+      renderNode(request, task, children, -1);
+      task.formatContext = prevContext;
+      task.keyPath = prevKeyPath$jscomp$0;
+    } else {
+      var _children = pushStartInstance(
+        segment.chunks,
+        type,
+        props,
+        request.resumableState,
+        request.renderState,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.formatContext,
+        segment.lastPushedText,
+        task.isFallback
+      );
+      segment.lastPushedText = !1;
+      var _prevContext = task.formatContext,
+        _prevKeyPath2 = task.keyPath;
+      task.keyPath = keyPath;
+      if (
+        (task.formatContext = getChildFormatContext(_prevContext, type, props))
+          .insertionMode === HTML_HEAD_MODE
+      ) {
+        var preambleSegment = createPendingSegment(
+          request,
+          0,
+          null,
+          task.formatContext,
+          !1,
+          !1
+        );
+        segment.preambleChildren.push(preambleSegment);
+        var preambleTask = createRenderTask(
+          request,
+          null,
+          _children,
+          -1,
+          task.blockedBoundary,
+          preambleSegment,
+          task.blockedPreamble,
+          task.hoistableState,
+          request.abortableTasks,
+          task.keyPath,
+          task.formatContext,
+          task.context,
+          task.treeContext,
+          task.componentStack,
+          task.isFallback,
+          emptyContextObject,
+          task.debugTask
+        );
+        pushComponentStack(preambleTask);
+        request.pingedTasks.push(preambleTask);
+      } else renderNode(request, task, _children, -1);
+      task.formatContext = _prevContext;
+      task.keyPath = _prevKeyPath2;
+      a: {
+        var target = segment.chunks,
+          resumableState = request.resumableState;
+        switch (type) {
+          case "title":
+          case "style":
+          case "script":
+          case "area":
+          case "base":
+          case "br":
+          case "col":
+          case "embed":
+          case "hr":
+          case "img":
+          case "input":
+          case "keygen":
+          case "link":
+          case "meta":
+          case "param":
+          case "source":
+          case "track":
+          case "wbr":
+            break a;
+          case "body":
+            if (_prevContext.insertionMode <= HTML_HTML_MODE) {
+              resumableState.hasBody = !0;
+              break a;
+            }
+            break;
+          case "html":
+            if (_prevContext.insertionMode === ROOT_HTML_MODE) {
+              resumableState.hasHtml = !0;
+              break a;
+            }
+            break;
+          case "head":
+            if (_prevContext.insertionMode <= HTML_HTML_MODE) break a;
+        }
+        target.push(endChunkForTag(type));
+      }
+      segment.lastPushedText = !1;
+    }
+  } else {
+    switch (type) {
+      case REACT_LEGACY_HIDDEN_TYPE:
+      case REACT_STRICT_MODE_TYPE:
+      case REACT_PROFILER_TYPE:
+      case REACT_FRAGMENT_TYPE:
+        var prevKeyPath$jscomp$1 = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = prevKeyPath$jscomp$1;
+        return;
+      case REACT_ACTIVITY_TYPE:
+        if ("hidden" !== props.mode) {
+          var prevKeyPath$jscomp$2 = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, props.children, -1);
+          task.keyPath = prevKeyPath$jscomp$2;
+        }
+        return;
+      case REACT_SUSPENSE_LIST_TYPE:
+        var _prevKeyPath3 = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = _prevKeyPath3;
+        return;
+      case REACT_VIEW_TRANSITION_TYPE:
+      case REACT_SCOPE_TYPE:
+        throw Error("ReactDOMServer does not yet support scope components.");
+      case REACT_SUSPENSE_TYPE:
+        a: if (null !== task.replay) {
+          var _prevKeyPath = task.keyPath;
+          task.keyPath = keyPath;
+          var _content = props.children;
+          try {
+            renderNode(request, task, _content, -1);
+          } finally {
+            task.keyPath = _prevKeyPath;
+          }
+        } else {
+          var prevKeyPath$jscomp$3 = task.keyPath,
+            parentBoundary = task.blockedBoundary,
+            parentPreamble = task.blockedPreamble,
+            parentHoistableState = task.hoistableState,
+            parentSegment = task.blockedSegment,
+            fallback = props.fallback,
+            content = props.children,
+            fallbackAbortSet = new Set();
+          var newBoundary =
+            task.formatContext.insertionMode < HTML_MODE
+              ? createSuspenseBoundary(
+                  request,
+                  fallbackAbortSet,
+                  createPreambleState(),
+                  createPreambleState()
+                )
+              : createSuspenseBoundary(request, fallbackAbortSet, null, null);
+          null !== request.trackedPostpones &&
+            (newBoundary.trackedContentKeyPath = keyPath);
+          var boundarySegment = createPendingSegment(
+            request,
+            parentSegment.chunks.length,
+            newBoundary,
+            task.formatContext,
+            !1,
+            !1
+          );
+          parentSegment.children.push(boundarySegment);
+          parentSegment.lastPushedText = !1;
+          var contentRootSegment = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          );
+          contentRootSegment.parentFlushed = !0;
+          if (null !== request.trackedPostpones) {
+            var fallbackKeyPath = [keyPath[0], "Suspense Fallback", keyPath[2]],
+              fallbackReplayNode = [
+                fallbackKeyPath[1],
+                fallbackKeyPath[2],
+                [],
+                null
+              ];
+            request.trackedPostpones.workingMap.set(
+              fallbackKeyPath,
+              fallbackReplayNode
+            );
+            newBoundary.trackedFallbackNode = fallbackReplayNode;
+            task.blockedSegment = boundarySegment;
+            task.blockedPreamble = newBoundary.fallbackPreamble;
+            task.keyPath = fallbackKeyPath;
+            boundarySegment.status = 6;
+            try {
+              renderNode(request, task, fallback, -1),
+                boundarySegment.lastPushedText &&
+                  boundarySegment.textEmbedded &&
+                  boundarySegment.chunks.push("\x3c!-- --\x3e"),
+                (boundarySegment.status = COMPLETED);
+            } catch (thrownValue) {
+              throw (
+                ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                thrownValue)
+              );
+            } finally {
+              (task.blockedSegment = parentSegment),
+                (task.blockedPreamble = parentPreamble),
+                (task.keyPath = prevKeyPath$jscomp$3);
+            }
+            var suspendedPrimaryTask = createRenderTask(
+              request,
+              null,
+              content,
+              -1,
+              newBoundary,
+              contentRootSegment,
+              newBoundary.contentPreamble,
+              newBoundary.contentState,
+              task.abortSet,
+              keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback,
+              emptyContextObject,
+              task.debugTask
+            );
+            pushComponentStack(suspendedPrimaryTask);
+            request.pingedTasks.push(suspendedPrimaryTask);
+          } else {
+            task.blockedBoundary = newBoundary;
+            task.blockedPreamble = newBoundary.contentPreamble;
+            task.hoistableState = newBoundary.contentState;
+            task.blockedSegment = contentRootSegment;
+            task.keyPath = keyPath;
+            contentRootSegment.status = 6;
+            try {
+              if (
+                (renderNode(request, task, content, -1),
+                contentRootSegment.lastPushedText &&
+                  contentRootSegment.textEmbedded &&
+                  contentRootSegment.chunks.push("\x3c!-- --\x3e"),
+                (contentRootSegment.status = COMPLETED),
+                queueCompletedSegment(newBoundary, contentRootSegment),
+                0 === newBoundary.pendingTasks &&
+                  newBoundary.status === PENDING)
+              ) {
+                newBoundary.status = COMPLETED;
+                0 === request.pendingRootTasks &&
+                  task.blockedPreamble &&
+                  preparePreamble(request);
+                break a;
+              }
+            } catch (thrownValue$2) {
+              newBoundary.status = CLIENT_RENDERED;
+              if (12 === request.status) {
+                contentRootSegment.status = 3;
+                var error = request.fatalError;
+              } else (contentRootSegment.status = 4), (error = thrownValue$2);
+              var thrownInfo = getThrownInfo(task.componentStack);
+              var errorDigest = logRecoverableError(
+                request,
+                error,
+                thrownInfo,
+                task.debugTask
+              );
+              encodeErrorForBoundary(
+                newBoundary,
+                errorDigest,
+                error,
+                thrownInfo,
+                !1
+              );
+              untrackBoundary(request, newBoundary);
+            } finally {
+              (task.blockedBoundary = parentBoundary),
+                (task.blockedPreamble = parentPreamble),
+                (task.hoistableState = parentHoistableState),
+                (task.blockedSegment = parentSegment),
+                (task.keyPath = prevKeyPath$jscomp$3);
+            }
+            var suspendedFallbackTask = createRenderTask(
+              request,
+              null,
+              fallback,
+              -1,
+              parentBoundary,
+              boundarySegment,
+              newBoundary.fallbackPreamble,
+              newBoundary.fallbackState,
+              fallbackAbortSet,
+              [keyPath[0], "Suspense Fallback", keyPath[2]],
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              !0,
+              emptyContextObject,
+              task.debugTask
+            );
+            pushComponentStack(suspendedFallbackTask);
+            request.pingedTasks.push(suspendedFallbackTask);
+          }
+        }
+        return;
+    }
+    if ("object" === typeof type && null !== type)
+      switch (type.$$typeof) {
+        case REACT_FORWARD_REF_TYPE:
+          if ("ref" in props) {
+            var propsWithoutRef = {};
+            for (var key in props)
+              "ref" !== key && (propsWithoutRef[key] = props[key]);
+          } else propsWithoutRef = props;
+          var children$jscomp$0 = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type.render,
+            propsWithoutRef,
+            ref
+          );
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            children$jscomp$0,
+            0 !== localIdCounter,
+            actionStateCounter,
+            actionStateMatchingIndex
+          );
+          return;
+        case REACT_MEMO_TYPE:
+          renderElement(request, task, keyPath, type.type, props, ref);
+          return;
+        case REACT_PROVIDER_TYPE:
+        case REACT_CONTEXT_TYPE:
+          var value$jscomp$0 = props.value,
+            children$jscomp$1 = props.children;
+          var prevSnapshot = task.context;
+          var prevKeyPath$jscomp$4 = task.keyPath;
+          var prevValue = type._currentValue;
+          type._currentValue = value$jscomp$0;
+          void 0 !== type._currentRenderer &&
+            null !== type._currentRenderer &&
+            type._currentRenderer !== rendererSigil &&
+            console.error(
+              "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+            );
+          type._currentRenderer = rendererSigil;
+          var prevNode = currentActiveSnapshot,
+            newNode = {
+              parent: prevNode,
+              depth: null === prevNode ? 0 : prevNode.depth + 1,
+              context: type,
+              parentValue: prevValue,
+              value: value$jscomp$0
+            };
+          currentActiveSnapshot = newNode;
+          task.context = newNode;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, children$jscomp$1, -1);
+          var prevSnapshot$jscomp$0 = currentActiveSnapshot;
+          if (null === prevSnapshot$jscomp$0)
+            throw Error(
+              "Tried to pop a Context at the root of the app. This is a bug in React."
+            );
+          prevSnapshot$jscomp$0.context !== type &&
+            console.error(
+              "The parent context is not the expected context. This is probably a bug in React."
+            );
+          prevSnapshot$jscomp$0.context._currentValue =
+            prevSnapshot$jscomp$0.parentValue;
+          void 0 !== type._currentRenderer &&
+            null !== type._currentRenderer &&
+            type._currentRenderer !== rendererSigil &&
+            console.error(
+              "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+            );
+          type._currentRenderer = rendererSigil;
+          var JSCompiler_inline_result$jscomp$0 = (currentActiveSnapshot =
+            prevSnapshot$jscomp$0.parent);
+          task.context = JSCompiler_inline_result$jscomp$0;
+          task.keyPath = prevKeyPath$jscomp$4;
+          prevSnapshot !== task.context &&
+            console.error(
+              "Popping the context provider did not return back to the original snapshot. This is a bug in React."
+            );
+          return;
+        case REACT_CONSUMER_TYPE:
+          var context$jscomp$0 = type._context,
+            render = props.children;
+          "function" !== typeof render &&
+            console.error(
+              "A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."
+            );
+          var newChildren = render(context$jscomp$0._currentValue),
+            prevKeyPath$jscomp$5 = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, newChildren, -1);
+          task.keyPath = prevKeyPath$jscomp$5;
+          return;
+        case REACT_LAZY_TYPE:
+          var Component = callLazyInitInDEV(type);
+          if (12 === request.status) throw null;
+          renderElement(request, task, keyPath, Component, props, ref);
+          return;
+      }
+    var info = "";
+    if (
+      void 0 === type ||
+      ("object" === typeof type &&
+        null !== type &&
+        0 === Object.keys(type).length)
+    )
+      info +=
+        " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
+    throw Error(
+      "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+        ((null == type ? type : typeof type) + "." + info)
+    );
+  }
+}
+function resumeNode(request, task, segmentId, node, childIndex) {
+  var prevReplay = task.replay,
+    blockedBoundary = task.blockedBoundary,
+    resumedSegment = createPendingSegment(
+      request,
+      0,
+      null,
+      task.formatContext,
+      !1,
+      !1
+    );
+  resumedSegment.id = segmentId;
+  resumedSegment.parentFlushed = !0;
+  try {
+    (task.replay = null),
+      (task.blockedSegment = resumedSegment),
+      renderNode(request, task, node, childIndex),
+      (resumedSegment.status = COMPLETED),
+      null === blockedBoundary
+        ? (request.completedRootSegment = resumedSegment)
+        : (queueCompletedSegment(blockedBoundary, resumedSegment),
+          blockedBoundary.parentFlushed &&
+            request.partialBoundaries.push(blockedBoundary));
+  } finally {
+    (task.replay = prevReplay), (task.blockedSegment = null);
+  }
+}
+function replayElement(
+  request,
+  task,
+  keyPath,
+  name,
+  keyOrIndex,
+  childIndex,
+  type,
+  props,
+  ref,
+  replay
+) {
+  childIndex = replay.nodes;
+  for (var i = 0; i < childIndex.length; i++) {
+    var node = childIndex[i];
+    if (keyOrIndex === node[1]) {
+      if (4 === node.length) {
+        if (null !== name && name !== node[0])
+          throw Error(
+            "Expected the resume to render <" +
+              node[0] +
+              "> in this slot but instead it rendered <" +
+              name +
+              ">. The tree doesn't match so React will fallback to client rendering."
+          );
+        var childNodes = node[2];
+        node = node[3];
+        name = task.node;
+        task.replay = { nodes: childNodes, slots: node, pendingTasks: 1 };
+        try {
+          renderElement(request, task, keyPath, type, props, ref);
+          if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length)
+            throw Error(
+              "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+            );
+          task.replay.pendingTasks--;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            (x === SuspenseException || "function" === typeof x.then)
+          )
+            throw (task.node === name && (task.replay = replay), x);
+          task.replay.pendingTasks--;
+          type = getThrownInfo(task.componentStack);
+          props = request;
+          request = task.blockedBoundary;
+          keyPath = x;
+          ref = node;
+          node = logRecoverableError(props, keyPath, type, task.debugTask);
+          abortRemainingReplayNodes(
+            props,
+            request,
+            childNodes,
+            ref,
+            keyPath,
+            node,
+            type,
+            !1
+          );
+        }
+        task.replay = replay;
+      } else {
+        if (type !== REACT_SUSPENSE_TYPE)
+          throw Error(
+            "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+              (getComponentNameFromType(type) || "Unknown") +
+              ">. The tree doesn't match so React will fallback to client rendering."
+          );
+        a: {
+          replay = void 0;
+          type = node[5];
+          ref = node[2];
+          name = node[3];
+          keyOrIndex = null === node[4] ? [] : node[4][2];
+          node = null === node[4] ? null : node[4][3];
+          var prevKeyPath = task.keyPath,
+            previousReplaySet = task.replay,
+            parentBoundary = task.blockedBoundary,
+            parentHoistableState = task.hoistableState,
+            content = props.children,
+            fallback = props.fallback,
+            fallbackAbortSet = new Set();
+          props =
+            task.formatContext.insertionMode < HTML_MODE
+              ? createSuspenseBoundary(
+                  request,
+                  fallbackAbortSet,
+                  createPreambleState(),
+                  createPreambleState()
+                )
+              : createSuspenseBoundary(request, fallbackAbortSet, null, null);
+          props.parentFlushed = !0;
+          props.rootSegmentID = type;
+          task.blockedBoundary = props;
+          task.hoistableState = props.contentState;
+          task.keyPath = keyPath;
+          task.replay = { nodes: ref, slots: name, pendingTasks: 1 };
+          try {
+            renderNode(request, task, content, -1);
+            if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length)
+              throw Error(
+                "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+              );
+            task.replay.pendingTasks--;
+            if (0 === props.pendingTasks && props.status === PENDING) {
+              props.status = COMPLETED;
+              request.completedBoundaries.push(props);
+              break a;
+            }
+          } catch (error) {
+            (props.status = CLIENT_RENDERED),
+              (childNodes = getThrownInfo(task.componentStack)),
+              (replay = logRecoverableError(
+                request,
+                error,
+                childNodes,
+                task.debugTask
+              )),
+              encodeErrorForBoundary(props, replay, error, childNodes, !1),
+              task.replay.pendingTasks--,
+              request.clientRenderedBoundaries.push(props);
+          } finally {
+            (task.blockedBoundary = parentBoundary),
+              (task.hoistableState = parentHoistableState),
+              (task.replay = previousReplaySet),
+              (task.keyPath = prevKeyPath);
+          }
+          props = createReplayTask(
+            request,
+            null,
+            { nodes: keyOrIndex, slots: node, pendingTasks: 0 },
+            fallback,
+            -1,
+            parentBoundary,
+            props.fallbackState,
+            fallbackAbortSet,
+            [keyPath[0], "Suspense Fallback", keyPath[2]],
+            task.formatContext,
+            task.context,
+            task.treeContext,
+            task.componentStack,
+            !0,
+            emptyContextObject,
+            task.debugTask
+          );
+          pushComponentStack(props);
+          request.pingedTasks.push(props);
+        }
+      }
+      childIndex.splice(i, 1);
+      break;
+    }
+  }
+}
+function renderNodeDestructive(request, task, node, childIndex) {
+  null !== task.replay && "number" === typeof task.replay.slots
+    ? resumeNode(request, task, task.replay.slots, node, childIndex)
+    : ((task.node = node),
+      (task.childIndex = childIndex),
+      (node = task.componentStack),
+      (childIndex = task.debugTask),
+      pushComponentStack(task),
+      retryNode(request, task),
+      (task.componentStack = node),
+      (task.debugTask = childIndex));
+}
+function retryNode(request, task) {
+  var node = task.node,
+    childIndex = task.childIndex;
+  if (null !== node) {
+    if ("object" === typeof node) {
+      switch (node.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          var type = node.type,
+            key = node.key;
+          node = node.props;
+          var refProp = node.ref;
+          refProp = void 0 !== refProp ? refProp : null;
+          var debugTask = task.debugTask,
+            name = getComponentNameFromType(type);
+          key = null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+          var keyPath = [task.keyPath, name, key];
+          null !== task.replay
+            ? debugTask
+              ? debugTask.run(
+                  replayElement.bind(
+                    null,
+                    request,
+                    task,
+                    keyPath,
+                    name,
+                    key,
+                    childIndex,
+                    type,
+                    node,
+                    refProp,
+                    task.replay
+                  )
+                )
+              : replayElement(
+                  request,
+                  task,
+                  keyPath,
+                  name,
+                  key,
+                  childIndex,
+                  type,
+                  node,
+                  refProp,
+                  task.replay
+                )
+            : debugTask
+              ? debugTask.run(
+                  renderElement.bind(
+                    null,
+                    request,
+                    task,
+                    keyPath,
+                    type,
+                    node,
+                    refProp
+                  )
+                )
+              : renderElement(request, task, keyPath, type, node, refProp);
+          return;
+        case REACT_PORTAL_TYPE:
+          throw Error(
+            "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+          );
+        case REACT_LAZY_TYPE:
+          node = callLazyInitInDEV(node);
+          if (12 === request.status) throw null;
+          renderNodeDestructive(request, task, node, childIndex);
+          return;
+      }
+      if (isArrayImpl(node)) {
+        renderChildrenArray(request, task, node, childIndex);
+        return;
+      }
+      null === node || "object" !== typeof node
+        ? (key = null)
+        : ((type =
+            (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+            node["@@iterator"]),
+          (key = "function" === typeof type ? type : null));
+      if (key && (type = key.call(node))) {
+        if (type === node) {
+          if (
+            -1 !== childIndex ||
+            null === task.componentStack ||
+            "function" !== typeof task.componentStack.type ||
+            "[object GeneratorFunction]" !==
+              Object.prototype.toString.call(task.componentStack.type) ||
+            "[object Generator]" !== Object.prototype.toString.call(type)
+          )
+            didWarnAboutGenerators ||
+              console.error(
+                "Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."
+              ),
+              (didWarnAboutGenerators = !0);
+        } else
+          node.entries !== key ||
+            didWarnAboutMaps ||
+            (console.error(
+              "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+            ),
+            (didWarnAboutMaps = !0));
+        node = type.next();
+        if (!node.done) {
+          key = [];
+          do key.push(node.value), (node = type.next());
+          while (!node.done);
+          renderChildrenArray(request, task, key, childIndex);
+        }
+        return;
+      }
+      if ("function" === typeof node.then)
+        return (
+          (task.thenableState = null),
+          renderNodeDestructive(request, task, unwrapThenable(node), childIndex)
+        );
+      if (node.$$typeof === REACT_CONTEXT_TYPE)
+        return renderNodeDestructive(
+          request,
+          task,
+          node._currentValue,
+          childIndex
+        );
+      request = Object.prototype.toString.call(node);
+      throw Error(
+        "Objects are not valid as a React child (found: " +
+          ("[object Object]" === request
+            ? "object with keys {" + Object.keys(node).join(", ") + "}"
+            : request) +
+          "). If you meant to render a collection of children, use an array instead."
+      );
+    }
+    "string" === typeof node
+      ? ((task = task.blockedSegment),
+        null !== task &&
+          (task.lastPushedText = pushTextInstance(
+            task.chunks,
+            node,
+            request.renderState,
+            task.lastPushedText
+          )))
+      : "number" === typeof node || "bigint" === typeof node
+        ? ((task = task.blockedSegment),
+          null !== task &&
+            (task.lastPushedText = pushTextInstance(
+              task.chunks,
+              "" + node,
+              request.renderState,
+              task.lastPushedText
+            )))
+        : ("function" === typeof node &&
+            ((request = node.displayName || node.name || "Component"),
+            console.error(
+              "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.",
+              request,
+              request
+            )),
+          "symbol" === typeof node &&
+            console.error(
+              "Symbols are not valid as a React child.\n  %s",
+              String(node)
+            ));
+  }
+}
+function renderChildrenArray(request, task, children, childIndex) {
+  var prevKeyPath = task.keyPath,
+    previousComponentStack = task.componentStack;
+  var previousDebugTask = task.debugTask;
+  pushServerComponentStack(task, task.node._debugInfo);
+  if (
+    -1 !== childIndex &&
+    ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+    null !== task.replay)
+  ) {
+    for (
+      var replay = task.replay, replayNodes = replay.nodes, j = 0;
+      j < replayNodes.length;
+      j++
+    ) {
+      var node = replayNodes[j];
+      if (node[1] === childIndex) {
+        childIndex = node[2];
+        node = node[3];
+        task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+        try {
+          renderChildrenArray(request, task, children, -1);
+          if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length)
+            throw Error(
+              "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+            );
+          task.replay.pendingTasks--;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            (x === SuspenseException || "function" === typeof x.then)
+          )
+            throw x;
+          task.replay.pendingTasks--;
+          var thrownInfo = getThrownInfo(task.componentStack);
+          children = task.blockedBoundary;
+          var error = x,
+            resumeSlots = node;
+          node = logRecoverableError(
+            request,
+            error,
+            thrownInfo,
+            task.debugTask
+          );
+          abortRemainingReplayNodes(
+            request,
+            children,
+            childIndex,
+            resumeSlots,
+            error,
+            node,
+            thrownInfo,
+            !1
+          );
+        }
+        task.replay = replay;
+        replayNodes.splice(j, 1);
+        break;
+      }
+    }
+    task.keyPath = prevKeyPath;
+    task.componentStack = previousComponentStack;
+    task.debugTask = previousDebugTask;
+    return;
+  }
+  replay = task.treeContext;
+  replayNodes = children.length;
+  if (
+    null !== task.replay &&
+    ((j = task.replay.slots), null !== j && "object" === typeof j)
+  ) {
+    for (childIndex = 0; childIndex < replayNodes; childIndex++)
+      (node = children[childIndex]),
+        (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)),
+        (error = j[childIndex]),
+        "number" === typeof error
+          ? (resumeNode(request, task, error, node, childIndex),
+            delete j[childIndex])
+          : renderNode(request, task, node, childIndex);
+    task.treeContext = replay;
+    task.keyPath = prevKeyPath;
+    task.componentStack = previousComponentStack;
+    task.debugTask = previousDebugTask;
+    return;
+  }
+  for (j = 0; j < replayNodes; j++) {
+    childIndex = children[j];
+    resumeSlots = request;
+    node = task;
+    error = childIndex;
+    if (
+      null !== error &&
+      "object" === typeof error &&
+      (error.$$typeof === REACT_ELEMENT_TYPE ||
+        error.$$typeof === REACT_PORTAL_TYPE) &&
+      error._store &&
+      ((!error._store.validated && null == error.key) ||
+        2 === error._store.validated)
+    ) {
+      if ("object" !== typeof error._store)
+        throw Error(
+          "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue."
+        );
+      error._store.validated = 1;
+      thrownInfo = resumeSlots.didWarnForKey;
+      null == thrownInfo &&
+        (thrownInfo = resumeSlots.didWarnForKey = new WeakSet());
+      resumeSlots = node.componentStack;
+      if (null !== resumeSlots && !thrownInfo.has(resumeSlots)) {
+        thrownInfo.add(resumeSlots);
+        var componentName = getComponentNameFromType(error.type);
+        thrownInfo = error._owner;
+        var parentOwner = resumeSlots.owner;
+        resumeSlots = "";
+        if (parentOwner && "undefined" !== typeof parentOwner.type) {
+          var name = getComponentNameFromType(parentOwner.type);
+          name &&
+            (resumeSlots = "\n\nCheck the render method of `" + name + "`.");
+        }
+        resumeSlots ||
+          (componentName &&
+            (resumeSlots =
+              "\n\nCheck the top-level render call using <" +
+              componentName +
+              ">."));
+        componentName = "";
+        null != thrownInfo &&
+          parentOwner !== thrownInfo &&
+          ((parentOwner = null),
+          "undefined" !== typeof thrownInfo.type
+            ? (parentOwner = getComponentNameFromType(thrownInfo.type))
+            : "string" === typeof thrownInfo.name &&
+              (parentOwner = thrownInfo.name),
+          parentOwner &&
+            (componentName =
+              " It was passed a child from " + parentOwner + "."));
+        thrownInfo = node.componentStack;
+        node.componentStack = {
+          parent: node.componentStack,
+          type: error.type,
+          owner: error._owner,
+          stack: error._debugStack
+        };
+        console.error(
+          'Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',
+          resumeSlots,
+          componentName
+        );
+        node.componentStack = thrownInfo;
+      }
+    }
+    task.treeContext = pushTreeContext(replay, replayNodes, j);
+    renderNode(request, task, childIndex, j);
+  }
+  task.treeContext = replay;
+  task.keyPath = prevKeyPath;
+  task.componentStack = previousComponentStack;
+  task.debugTask = previousDebugTask;
+}
+function untrackBoundary(request, boundary) {
+  request = request.trackedPostpones;
+  null !== request &&
+    ((boundary = boundary.trackedContentKeyPath),
+    null !== boundary &&
+      ((boundary = request.workingMap.get(boundary)),
+      void 0 !== boundary &&
+        ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+}
+function spawnNewSuspendedReplayTask(request, task, thenableState) {
+  return createReplayTask(
+    request,
+    thenableState,
+    task.replay,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback,
+    emptyContextObject,
+    task.debugTask
+  );
+}
+function spawnNewSuspendedRenderTask(request, task, thenableState) {
+  var segment = task.blockedSegment,
+    newSegment = createPendingSegment(
+      request,
+      segment.chunks.length,
+      null,
+      task.formatContext,
+      segment.lastPushedText,
+      !0
+    );
+  segment.children.push(newSegment);
+  segment.lastPushedText = !1;
+  return createRenderTask(
+    request,
+    thenableState,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    newSegment,
+    task.blockedPreamble,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback,
+    emptyContextObject,
+    task.debugTask
+  );
+}
+function renderNode(request, task, node, childIndex) {
+  var previousFormatContext = task.formatContext,
+    previousContext = task.context,
+    previousKeyPath = task.keyPath,
+    previousTreeContext = task.treeContext,
+    previousComponentStack = task.componentStack,
+    previousDebugTask = task.debugTask,
+    segment = task.blockedSegment;
+  if (null === segment)
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue) {
+      if (
+        (resetHooksState(),
+        (node =
+          thrownValue === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedReplayTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          task.debugTask = previousDebugTask;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedReplayTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          task.debugTask = previousDebugTask;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  else {
+    var childrenLength = segment.children.length,
+      chunkLength = segment.chunks.length;
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue$3) {
+      if (
+        (resetHooksState(),
+        (segment.children.length = childrenLength),
+        (segment.chunks.length = chunkLength),
+        (node =
+          thrownValue$3 === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue$3),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedRenderTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          task.debugTask = previousDebugTask;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedRenderTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          task.debugTask = previousDebugTask;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  }
+  task.formatContext = previousFormatContext;
+  task.context = previousContext;
+  task.keyPath = previousKeyPath;
+  task.treeContext = previousTreeContext;
+  switchContext(previousContext);
+  throw node;
+}
+function abortTaskSoft(task) {
+  var boundary = task.blockedBoundary;
+  task = task.blockedSegment;
+  null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+}
+function abortRemainingReplayNodes(
+  request$jscomp$0,
+  boundary,
+  nodes,
+  slots,
+  error$jscomp$0,
+  errorDigest$jscomp$0,
+  errorInfo$jscomp$0,
+  aborted
+) {
+  for (var i = 0; i < nodes.length; i++) {
+    var node = nodes[i];
+    if (4 === node.length)
+      abortRemainingReplayNodes(
+        request$jscomp$0,
+        boundary,
+        node[2],
+        node[3],
+        error$jscomp$0,
+        errorDigest$jscomp$0,
+        errorInfo$jscomp$0,
+        aborted
+      );
+    else {
+      var request = request$jscomp$0;
+      node = node[5];
+      var error = error$jscomp$0,
+        errorDigest = errorDigest$jscomp$0,
+        errorInfo = errorInfo$jscomp$0,
+        wasAborted = aborted,
+        resumedBoundary = createSuspenseBoundary(
+          request,
+          new Set(),
+          null,
+          null
+        );
+      resumedBoundary.parentFlushed = !0;
+      resumedBoundary.rootSegmentID = node;
+      resumedBoundary.status = CLIENT_RENDERED;
+      encodeErrorForBoundary(
+        resumedBoundary,
+        errorDigest,
+        error,
+        errorInfo,
+        wasAborted
+      );
+      resumedBoundary.parentFlushed &&
+        request.clientRenderedBoundaries.push(resumedBoundary);
+    }
+  }
+  nodes.length = 0;
+  if (null !== slots) {
+    if (null === boundary)
+      throw Error(
+        "We should not have any resumable nodes in the shell. This is a bug in React."
+      );
+    boundary.status !== CLIENT_RENDERED &&
+      ((boundary.status = CLIENT_RENDERED),
+      encodeErrorForBoundary(
+        boundary,
+        errorDigest$jscomp$0,
+        error$jscomp$0,
+        errorInfo$jscomp$0,
+        aborted
+      ),
+      boundary.parentFlushed &&
+        request$jscomp$0.clientRenderedBoundaries.push(boundary));
+    if ("object" === typeof slots) for (var index in slots) delete slots[index];
+  }
+}
+function abortTask(task, request, error) {
+  var boundary = task.blockedBoundary,
+    segment = task.blockedSegment;
+  if (null !== segment) {
+    if (6 === segment.status) return;
+    segment.status = 3;
+  }
+  segment = getThrownInfo(task.componentStack);
+  if (null === boundary) {
+    if (13 !== request.status && request.status !== CLOSED) {
+      boundary = task.replay;
+      if (null === boundary) {
+        logRecoverableError(request, error, segment, null);
+        fatalError(request, error, segment, null);
+        return;
+      }
+      boundary.pendingTasks--;
+      0 === boundary.pendingTasks &&
+        0 < boundary.nodes.length &&
+        ((task = logRecoverableError(request, error, segment, null)),
+        abortRemainingReplayNodes(
+          request,
+          null,
+          boundary.nodes,
+          boundary.slots,
+          error,
+          task,
+          segment,
+          !0
+        ));
+      request.pendingRootTasks--;
+      0 === request.pendingRootTasks && completeShell(request);
+    }
+  } else
+    boundary.pendingTasks--,
+      boundary.status !== CLIENT_RENDERED &&
+        ((boundary.status = CLIENT_RENDERED),
+        (task = logRecoverableError(request, error, segment, null)),
+        (boundary.status = CLIENT_RENDERED),
+        encodeErrorForBoundary(boundary, task, error, segment, !0),
+        untrackBoundary(request, boundary),
+        boundary.parentFlushed &&
+          request.clientRenderedBoundaries.push(boundary)),
+      boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+        return abortTask(fallbackTask, request, error);
+      }),
+      boundary.fallbackAbortableTasks.clear();
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function safelyEmitEarlyPreloads(request, shellComplete) {
+  try {
+    var renderState = request.renderState,
+      onHeaders = renderState.onHeaders;
+    if (onHeaders) {
+      var headers = renderState.headers;
+      if (headers) {
+        renderState.headers = null;
+        var linkHeader = headers.preconnects;
+        headers.fontPreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.fontPreloads));
+        headers.highImagePreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.highImagePreloads));
+        if (!shellComplete) {
+          var queueIter = renderState.styles.values(),
+            queueStep = queueIter.next();
+          b: for (
+            ;
+            0 < headers.remainingCapacity && !queueStep.done;
+            queueStep = queueIter.next()
+          )
+            for (
+              var sheetIter = queueStep.value.sheets.values(),
+                sheetStep = sheetIter.next();
+              0 < headers.remainingCapacity && !sheetStep.done;
+              sheetStep = sheetIter.next()
+            ) {
+              var sheet = sheetStep.value,
+                props = sheet.props,
+                key = props.href,
+                props$jscomp$0 = sheet.props;
+              var header = getPreloadAsHeader(props$jscomp$0.href, "style", {
+                crossOrigin: props$jscomp$0.crossOrigin,
+                integrity: props$jscomp$0.integrity,
+                nonce: props$jscomp$0.nonce,
+                type: props$jscomp$0.type,
+                fetchPriority: props$jscomp$0.fetchPriority,
+                referrerPolicy: props$jscomp$0.referrerPolicy,
+                media: props$jscomp$0.media
+              });
+              if (0 <= (headers.remainingCapacity -= header.length + 2))
+                (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                  linkHeader && (linkHeader += ", "),
+                  (linkHeader += header),
+                  (renderState.resets.style[key] =
+                    "string" === typeof props.crossOrigin ||
+                    "string" === typeof props.integrity
+                      ? [props.crossOrigin, props.integrity]
+                      : PRELOAD_NO_CREDS);
+              else break b;
+            }
+        }
+        linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+      }
+    }
+  } catch (error) {
+    logRecoverableError(request, error, {}, null);
+  }
+}
+function completeShell(request) {
+  null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+  null === request.trackedPostpones && preparePreamble(request);
+  request.onShellError = noop;
+  request = request.onShellReady;
+  request();
+}
+function completeAll(request) {
+  safelyEmitEarlyPreloads(
+    request,
+    null === request.trackedPostpones
+      ? !0
+      : null === request.completedRootSegment ||
+          request.completedRootSegment.status !== POSTPONED
+  );
+  preparePreamble(request);
+  request = request.onAllReady;
+  request();
+}
+function queueCompletedSegment(boundary, segment) {
+  if (
+    0 === segment.chunks.length &&
+    1 === segment.children.length &&
+    null === segment.children[0].boundary &&
+    -1 === segment.children[0].id
+  ) {
+    var childSegment = segment.children[0];
+    childSegment.id = segment.id;
+    childSegment.parentFlushed = !0;
+    childSegment.status === COMPLETED &&
+      queueCompletedSegment(boundary, childSegment);
+  } else boundary.completedSegments.push(segment);
+}
+function finishedTask(request, boundary, segment) {
+  if (null === boundary) {
+    if (null !== segment && segment.parentFlushed) {
+      if (null !== request.completedRootSegment)
+        throw Error(
+          "There can only be one root segment. This is a bug in React."
+        );
+      request.completedRootSegment = segment;
+    }
+    request.pendingRootTasks--;
+    0 === request.pendingRootTasks && completeShell(request);
+  } else
+    boundary.pendingTasks--,
+      boundary.status !== CLIENT_RENDERED &&
+        (0 === boundary.pendingTasks
+          ? (boundary.status === PENDING && (boundary.status = COMPLETED),
+            null !== segment &&
+              segment.parentFlushed &&
+              segment.status === COMPLETED &&
+              queueCompletedSegment(boundary, segment),
+            boundary.parentFlushed &&
+              request.completedBoundaries.push(boundary),
+            boundary.status === COMPLETED &&
+              (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request),
+              boundary.fallbackAbortableTasks.clear(),
+              0 === request.pendingRootTasks &&
+                null === request.trackedPostpones &&
+                null !== boundary.contentPreamble &&
+                preparePreamble(request)))
+          : null !== segment &&
+            segment.parentFlushed &&
+            segment.status === COMPLETED &&
+            (queueCompletedSegment(boundary, segment),
+            1 === boundary.completedSegments.length &&
+              boundary.parentFlushed &&
+              request.partialBoundaries.push(boundary)));
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function performWork(request$jscomp$2) {
+  if (request$jscomp$2.status !== CLOSED && 13 !== request$jscomp$2.status) {
+    var prevContext = currentActiveSnapshot,
+      prevDispatcher = ReactSharedInternals.H;
+    ReactSharedInternals.H = HooksDispatcher;
+    var prevAsyncDispatcher = ReactSharedInternals.A;
+    ReactSharedInternals.A = DefaultAsyncDispatcher;
+    var prevRequest = currentRequest;
+    currentRequest = request$jscomp$2;
+    var prevGetCurrentStackImpl = ReactSharedInternals.getCurrentStack;
+    ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;
+    var prevResumableState = currentResumableState;
+    currentResumableState = request$jscomp$2.resumableState;
+    try {
+      var pingedTasks = request$jscomp$2.pingedTasks,
+        i;
+      for (i = 0; i < pingedTasks.length; i++) {
+        var request = request$jscomp$2,
+          task = pingedTasks[i],
+          segment = task.blockedSegment;
+        if (null === segment) {
+          var prevTaskInDEV = void 0,
+            request$jscomp$0 = request;
+          request = task;
+          if (0 !== request.replay.pendingTasks) {
+            switchContext(request.context);
+            prevTaskInDEV = currentTaskInDEV;
+            currentTaskInDEV = request;
+            try {
+              "number" === typeof request.replay.slots
+                ? resumeNode(
+                    request$jscomp$0,
+                    request,
+                    request.replay.slots,
+                    request.node,
+                    request.childIndex
+                  )
+                : retryNode(request$jscomp$0, request);
+              if (
+                1 === request.replay.pendingTasks &&
+                0 < request.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              request.replay.pendingTasks--;
+              request.abortSet.delete(request);
+              finishedTask(request$jscomp$0, request.blockedBoundary, null);
+            } catch (thrownValue) {
+              resetHooksState();
+              var x =
+                thrownValue === SuspenseException
+                  ? getSuspendedThenable()
+                  : thrownValue;
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                "function" === typeof x.then
+              ) {
+                var ping = request.ping;
+                x.then(ping, ping);
+                request.thenableState = getThenableStateAfterSuspending();
+              } else {
+                request.replay.pendingTasks--;
+                request.abortSet.delete(request);
+                var errorInfo = getThrownInfo(request.componentStack),
+                  errorDigest = void 0,
+                  request$jscomp$1 = request$jscomp$0,
+                  boundary = request.blockedBoundary,
+                  error$jscomp$0 =
+                    12 === request$jscomp$0.status
+                      ? request$jscomp$0.fatalError
+                      : x,
+                  errorInfo$jscomp$0 = errorInfo,
+                  replayNodes = request.replay.nodes,
+                  resumeSlots = request.replay.slots;
+                errorDigest = logRecoverableError(
+                  request$jscomp$1,
+                  error$jscomp$0,
+                  errorInfo$jscomp$0,
+                  request.debugTask
+                );
+                abortRemainingReplayNodes(
+                  request$jscomp$1,
+                  boundary,
+                  replayNodes,
+                  resumeSlots,
+                  error$jscomp$0,
+                  errorDigest,
+                  errorInfo$jscomp$0,
+                  !1
+                );
+                request$jscomp$0.pendingRootTasks--;
+                0 === request$jscomp$0.pendingRootTasks &&
+                  completeShell(request$jscomp$0);
+                request$jscomp$0.allPendingTasks--;
+                0 === request$jscomp$0.allPendingTasks &&
+                  completeAll(request$jscomp$0);
+              }
+            } finally {
+              currentTaskInDEV = prevTaskInDEV;
+            }
+          }
+        } else if (
+          ((request$jscomp$0 = prevTaskInDEV = void 0),
+          (errorDigest = task),
+          (request$jscomp$1 = segment),
+          request$jscomp$1.status === PENDING)
+        ) {
+          request$jscomp$1.status = 6;
+          switchContext(errorDigest.context);
+          request$jscomp$0 = currentTaskInDEV;
+          currentTaskInDEV = errorDigest;
+          var childrenLength = request$jscomp$1.children.length,
+            chunkLength = request$jscomp$1.chunks.length;
+          try {
+            retryNode(request, errorDigest),
+              request$jscomp$1.lastPushedText &&
+                request$jscomp$1.textEmbedded &&
+                request$jscomp$1.chunks.push("\x3c!-- --\x3e"),
+              errorDigest.abortSet.delete(errorDigest),
+              (request$jscomp$1.status = COMPLETED),
+              finishedTask(
+                request,
+                errorDigest.blockedBoundary,
+                request$jscomp$1
+              );
+          } catch (thrownValue) {
+            resetHooksState();
+            request$jscomp$1.children.length = childrenLength;
+            request$jscomp$1.chunks.length = chunkLength;
+            var x$jscomp$0 =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : 12 === request.status
+                  ? request.fatalError
+                  : thrownValue;
+            if (
+              "object" === typeof x$jscomp$0 &&
+              null !== x$jscomp$0 &&
+              "function" === typeof x$jscomp$0.then
+            ) {
+              request$jscomp$1.status = PENDING;
+              errorDigest.thenableState = getThenableStateAfterSuspending();
+              var ping$jscomp$0 = errorDigest.ping;
+              x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+            } else {
+              var errorInfo$jscomp$1 = getThrownInfo(
+                errorDigest.componentStack
+              );
+              errorDigest.abortSet.delete(errorDigest);
+              request$jscomp$1.status = 4;
+              var boundary$jscomp$0 = errorDigest.blockedBoundary,
+                debugTask = errorDigest.debugTask;
+              prevTaskInDEV = logRecoverableError(
+                request,
+                x$jscomp$0,
+                errorInfo$jscomp$1,
+                debugTask
+              );
+              null === boundary$jscomp$0
+                ? fatalError(request, x$jscomp$0, errorInfo$jscomp$1, debugTask)
+                : (boundary$jscomp$0.pendingTasks--,
+                  boundary$jscomp$0.status !== CLIENT_RENDERED &&
+                    ((boundary$jscomp$0.status = CLIENT_RENDERED),
+                    encodeErrorForBoundary(
+                      boundary$jscomp$0,
+                      prevTaskInDEV,
+                      x$jscomp$0,
+                      errorInfo$jscomp$1,
+                      !1
+                    ),
+                    untrackBoundary(request, boundary$jscomp$0),
+                    boundary$jscomp$0.parentFlushed &&
+                      request.clientRenderedBoundaries.push(boundary$jscomp$0),
+                    0 === request.pendingRootTasks &&
+                      null === request.trackedPostpones &&
+                      null !== boundary$jscomp$0.contentPreamble &&
+                      preparePreamble(request)));
+              request.allPendingTasks--;
+              0 === request.allPendingTasks && completeAll(request);
+            }
+          } finally {
+            currentTaskInDEV = request$jscomp$0;
+          }
+        }
+      }
+      pingedTasks.splice(0, i);
+      null !== request$jscomp$2.destination &&
+        flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination);
+    } catch (error) {
+      (pingedTasks = {}),
+        logRecoverableError(request$jscomp$2, error, pingedTasks, null),
+        fatalError(request$jscomp$2, error, pingedTasks, null);
+    } finally {
+      (currentResumableState = prevResumableState),
+        (ReactSharedInternals.H = prevDispatcher),
+        (ReactSharedInternals.A = prevAsyncDispatcher),
+        (ReactSharedInternals.getCurrentStack = prevGetCurrentStackImpl),
+        prevDispatcher === HooksDispatcher && switchContext(prevContext),
+        (currentRequest = prevRequest);
+    }
+  }
+}
+function preparePreambleFromSubtree(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  segment.preambleChildren.length &&
+    collectedPreambleSegments.push(segment.preambleChildren);
+  for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+    pendingPreambles =
+      preparePreambleFromSegment(
+        request,
+        segment.children[i],
+        collectedPreambleSegments
+      ) || pendingPreambles;
+  return pendingPreambles;
+}
+function preparePreambleFromSegment(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    );
+  var preamble = boundary.contentPreamble,
+    fallbackPreamble = boundary.fallbackPreamble;
+  if (null === preamble || null === fallbackPreamble) return !1;
+  switch (boundary.status) {
+    case COMPLETED:
+      hoistPreambleState(request.renderState, preamble);
+      segment = boundary.completedSegments[0];
+      if (!segment)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      return preparePreambleFromSubtree(
+        request,
+        segment,
+        collectedPreambleSegments
+      );
+    case POSTPONED:
+      if (null !== request.trackedPostpones) return !0;
+    case CLIENT_RENDERED:
+      if (segment.status === COMPLETED)
+        return (
+          hoistPreambleState(request.renderState, fallbackPreamble),
+          preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          )
+        );
+    default:
+      return !0;
+  }
+}
+function preparePreamble(request) {
+  if (
+    request.completedRootSegment &&
+    null === request.completedPreambleSegments
+  ) {
+    var collectedPreambleSegments = [],
+      hasPendingPreambles = preparePreambleFromSegment(
+        request,
+        request.completedRootSegment,
+        collectedPreambleSegments
+      ),
+      preamble = request.renderState.preamble;
+    if (
+      !1 === hasPendingPreambles ||
+      (preamble.headChunks && preamble.bodyChunks)
+    )
+      request.completedPreambleSegments = collectedPreambleSegments;
+  }
+}
+function flushSubtree(request, destination, segment, hoistableState) {
+  segment.parentFlushed = !0;
+  switch (segment.status) {
+    case PENDING:
+      segment.id = request.nextSegmentId++;
+    case POSTPONED:
+      return (
+        (hoistableState = segment.id),
+        (segment.lastPushedText = !1),
+        (segment.textEmbedded = !1),
+        (request = request.renderState),
+        writeChunk(destination, placeholder1),
+        writeChunk(destination, request.placeholderPrefix),
+        (request = hoistableState.toString(16)),
+        writeChunk(destination, request),
+        !!destination.write(placeholder2)
+      );
+    case COMPLETED:
+      segment.status = FLUSHED;
+      var r = !0,
+        chunks = segment.chunks,
+        chunkIdx = 0;
+      segment = segment.children;
+      for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+        for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+          writeChunk(destination, chunks[chunkIdx]);
+        r = flushSegment(request, destination, r, hoistableState);
+      }
+      for (; chunkIdx < chunks.length - 1; chunkIdx++)
+        writeChunk(destination, chunks[chunkIdx]);
+      chunkIdx < chunks.length && (r = !!destination.write(chunks[chunkIdx]));
+      return r;
+    default:
+      throw Error(
+        "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+      );
+  }
+}
+function flushSegment(request, destination, segment, hoistableState) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return flushSubtree(request, destination, segment, hoistableState);
+  boundary.parentFlushed = !0;
+  if (boundary.status === CLIENT_RENDERED) {
+    var errorDigest = boundary.errorDigest,
+      errorMessage = boundary.errorMessage,
+      errorStack = boundary.errorStack,
+      errorComponentStack = boundary.errorComponentStack;
+    destination.write(startClientRenderedSuspenseBoundary);
+    writeChunk(destination, clientRenderedSuspenseBoundaryError1);
+    errorDigest &&
+      (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
+      writeChunk(destination, escapeTextForBrowser(errorDigest)),
+      writeChunk(
+        destination,
+        clientRenderedSuspenseBoundaryErrorAttrInterstitial
+      ));
+    errorMessage &&
+      (writeChunk(destination, clientRenderedSuspenseBoundaryError1B),
+      writeChunk(destination, escapeTextForBrowser(errorMessage)),
+      writeChunk(
+        destination,
+        clientRenderedSuspenseBoundaryErrorAttrInterstitial
+      ));
+    errorStack &&
+      (writeChunk(destination, clientRenderedSuspenseBoundaryError1C),
+      writeChunk(destination, escapeTextForBrowser(errorStack)),
+      writeChunk(
+        destination,
+        clientRenderedSuspenseBoundaryErrorAttrInterstitial
+      ));
+    errorComponentStack &&
+      (writeChunk(destination, clientRenderedSuspenseBoundaryError1D),
+      writeChunk(destination, escapeTextForBrowser(errorComponentStack)),
+      writeChunk(
+        destination,
+        clientRenderedSuspenseBoundaryErrorAttrInterstitial
+      ));
+    destination.write(clientRenderedSuspenseBoundaryError2);
+    flushSubtree(request, destination, segment, hoistableState);
+    (request = boundary.fallbackPreamble) &&
+      writePreambleContribution(destination, request);
+    return !!destination.write(endSuspenseBoundary);
+  }
+  if (boundary.status !== COMPLETED)
+    return (
+      boundary.status === PENDING &&
+        (boundary.rootSegmentID = request.nextSegmentId++),
+      0 < boundary.completedSegments.length &&
+        request.partialBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      hoistableState &&
+        ((boundary = boundary.fallbackState),
+        boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        boundary.stylesheets.forEach(
+          hoistStylesheetDependency,
+          hoistableState
+        )),
+      flushSubtree(request, destination, segment, hoistableState),
+      !!destination.write(endSuspenseBoundary)
+    );
+  if (boundary.byteSize > request.progressiveChunkSize)
+    return (
+      (boundary.rootSegmentID = request.nextSegmentId++),
+      request.completedBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      flushSubtree(request, destination, segment, hoistableState),
+      !!destination.write(endSuspenseBoundary)
+    );
+  hoistableState &&
+    ((segment = boundary.contentState),
+    segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+    segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+  destination.write(startCompletedSuspenseBoundary);
+  segment = boundary.completedSegments;
+  if (1 !== segment.length)
+    throw Error(
+      "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+    );
+  flushSegment(request, destination, segment[0], hoistableState);
+  (request = boundary.contentPreamble) &&
+    writePreambleContribution(destination, request);
+  return !!destination.write(endSuspenseBoundary);
+}
+function flushSegmentContainer(request, destination, segment, hoistableState) {
+  writeStartSegment(
+    destination,
+    request.renderState,
+    segment.parentFormatContext,
+    segment.id
+  );
+  flushSegment(request, destination, segment, hoistableState);
+  return writeEndSegment(destination, segment.parentFormatContext);
+}
+function flushCompletedBoundary(request, destination, boundary) {
+  for (
+    var completedSegments = boundary.completedSegments, i = 0;
+    i < completedSegments.length;
+    i++
+  )
+    flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      completedSegments[i]
+    );
+  completedSegments.length = 0;
+  writeHoistablesForBoundary(
+    destination,
+    boundary.contentState,
+    request.renderState
+  );
+  completedSegments = request.resumableState;
+  request = request.renderState;
+  i = boundary.rootSegmentID;
+  boundary = boundary.contentState;
+  var requiresStyleInsertion = request.stylesToHoist;
+  request.stylesToHoist = !1;
+  writeChunk(destination, request.startInlineScript);
+  requiresStyleInsertion
+    ? (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+      NothingSent
+      ? ((completedSegments.instructions =
+          completedSegments.instructions |
+          SentStyleInsertionFunction |
+          SentCompleteBoundaryFunction),
+        writeChunk(destination, completeBoundaryWithStylesScript1FullBoth))
+      : (completedSegments.instructions & SentStyleInsertionFunction) ===
+          NothingSent
+        ? ((completedSegments.instructions |= SentStyleInsertionFunction),
+          writeChunk(destination, completeBoundaryWithStylesScript1FullPartial))
+        : writeChunk(destination, completeBoundaryWithStylesScript1Partial)
+    : (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+        NothingSent
+      ? ((completedSegments.instructions |= SentCompleteBoundaryFunction),
+        writeChunk(destination, completeBoundaryScript1Full))
+      : writeChunk(destination, completeBoundaryScript1Partial);
+  completedSegments = i.toString(16);
+  writeChunk(destination, request.boundaryPrefix);
+  writeChunk(destination, completedSegments);
+  writeChunk(destination, completeBoundaryScript2);
+  writeChunk(destination, request.segmentPrefix);
+  writeChunk(destination, completedSegments);
+  requiresStyleInsertion
+    ? (writeChunk(destination, completeBoundaryScript3a),
+      writeStyleResourceDependenciesInJS(destination, boundary))
+    : writeChunk(destination, completeBoundaryScript3b);
+  boundary = !!destination.write(completeBoundaryScriptEnd);
+  return writeBootstrap(destination, request) && boundary;
+}
+function flushPartiallyCompletedSegment(
+  request,
+  destination,
+  boundary,
+  segment
+) {
+  if (segment.status === FLUSHED) return !0;
+  var hoistableState = boundary.contentState,
+    segmentID = segment.id;
+  if (-1 === segmentID) {
+    if (-1 === (segment.id = boundary.rootSegmentID))
+      throw Error(
+        "A root segment ID must have been assigned by now. This is a bug in React."
+      );
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  }
+  if (segmentID === boundary.rootSegmentID)
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  flushSegmentContainer(request, destination, segment, hoistableState);
+  boundary = request.resumableState;
+  request = request.renderState;
+  writeChunk(destination, request.startInlineScript);
+  (boundary.instructions & SentCompleteSegmentFunction) === NothingSent
+    ? ((boundary.instructions |= SentCompleteSegmentFunction),
+      writeChunk(destination, completeSegmentScript1Full))
+    : writeChunk(destination, completeSegmentScript1Partial);
+  writeChunk(destination, request.segmentPrefix);
+  segmentID = segmentID.toString(16);
+  writeChunk(destination, segmentID);
+  writeChunk(destination, completeSegmentScript2);
+  writeChunk(destination, request.placeholderPrefix);
+  writeChunk(destination, segmentID);
+  destination = !!destination.write(completeSegmentScriptEnd);
+  return destination;
+}
+function flushCompletedQueues(request, destination) {
+  try {
+    if (!(0 < request.pendingRootTasks)) {
+      var i,
+        completedRootSegment = request.completedRootSegment;
+      if (null !== completedRootSegment) {
+        if (completedRootSegment.status === POSTPONED) return;
+        var completedPreambleSegments = request.completedPreambleSegments;
+        if (null === completedPreambleSegments) return;
+        var renderState = request.renderState,
+          preamble = renderState.preamble,
+          htmlChunks = preamble.htmlChunks,
+          headChunks = preamble.headChunks,
+          i$jscomp$0;
+        if (htmlChunks) {
+          for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+            writeChunk(destination, htmlChunks[i$jscomp$0]);
+          if (headChunks)
+            for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+              writeChunk(destination, headChunks[i$jscomp$0]);
+          else
+            writeChunk(destination, startChunkForTag("head")),
+              writeChunk(destination, endOfStartTag);
+        } else if (headChunks)
+          for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+            writeChunk(destination, headChunks[i$jscomp$0]);
+        var charsetChunks = renderState.charsetChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++)
+          writeChunk(destination, charsetChunks[i$jscomp$0]);
+        charsetChunks.length = 0;
+        renderState.preconnects.forEach(flushResource, destination);
+        renderState.preconnects.clear();
+        var viewportChunks = renderState.viewportChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++)
+          writeChunk(destination, viewportChunks[i$jscomp$0]);
+        viewportChunks.length = 0;
+        renderState.fontPreloads.forEach(flushResource, destination);
+        renderState.fontPreloads.clear();
+        renderState.highImagePreloads.forEach(flushResource, destination);
+        renderState.highImagePreloads.clear();
+        renderState.styles.forEach(flushStylesInPreamble, destination);
+        var importMapChunks = renderState.importMapChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++)
+          writeChunk(destination, importMapChunks[i$jscomp$0]);
+        importMapChunks.length = 0;
+        renderState.bootstrapScripts.forEach(flushResource, destination);
+        renderState.scripts.forEach(flushResource, destination);
+        renderState.scripts.clear();
+        renderState.bulkPreloads.forEach(flushResource, destination);
+        renderState.bulkPreloads.clear();
+        var hoistableChunks = renderState.hoistableChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++)
+          writeChunk(destination, hoistableChunks[i$jscomp$0]);
+        for (
+          renderState = hoistableChunks.length = 0;
+          renderState < completedPreambleSegments.length;
+          renderState++
+        ) {
+          var segments = completedPreambleSegments[renderState];
+          for (preamble = 0; preamble < segments.length; preamble++)
+            flushSegment(request, destination, segments[preamble], null);
+        }
+        var preamble$jscomp$0 = request.renderState.preamble,
+          headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+        (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) &&
+          writeChunk(destination, endChunkForTag("head"));
+        var bodyChunks = preamble$jscomp$0.bodyChunks;
+        if (bodyChunks)
+          for (
+            completedPreambleSegments = 0;
+            completedPreambleSegments < bodyChunks.length;
+            completedPreambleSegments++
+          )
+            writeChunk(destination, bodyChunks[completedPreambleSegments]);
+        flushSegment(request, destination, completedRootSegment, null);
+        request.completedRootSegment = null;
+        writeBootstrap(destination, request.renderState);
+      }
+      var renderState$jscomp$0 = request.renderState;
+      completedRootSegment = 0;
+      var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < viewportChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, viewportChunks$jscomp$0[completedRootSegment]);
+      viewportChunks$jscomp$0.length = 0;
+      renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+      renderState$jscomp$0.preconnects.clear();
+      renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.fontPreloads.clear();
+      renderState$jscomp$0.highImagePreloads.forEach(
+        flushResource,
+        destination
+      );
+      renderState$jscomp$0.highImagePreloads.clear();
+      renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+      renderState$jscomp$0.scripts.forEach(flushResource, destination);
+      renderState$jscomp$0.scripts.clear();
+      renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.bulkPreloads.clear();
+      var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < hoistableChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, hoistableChunks$jscomp$0[completedRootSegment]);
+      hoistableChunks$jscomp$0.length = 0;
+      var clientRenderedBoundaries = request.clientRenderedBoundaries;
+      for (i = 0; i < clientRenderedBoundaries.length; i++) {
+        var boundary = clientRenderedBoundaries[i];
+        renderState$jscomp$0 = destination;
+        var resumableState = request.resumableState,
+          renderState$jscomp$1 = request.renderState,
+          id = boundary.rootSegmentID,
+          errorDigest = boundary.errorDigest,
+          errorMessage = boundary.errorMessage,
+          errorStack = boundary.errorStack,
+          errorComponentStack = boundary.errorComponentStack;
+        writeChunk(
+          renderState$jscomp$0,
+          renderState$jscomp$1.startInlineScript
+        );
+        (resumableState.instructions & SentClientRenderFunction) === NothingSent
+          ? ((resumableState.instructions |= SentClientRenderFunction),
+            writeChunk(renderState$jscomp$0, clientRenderScript1Full))
+          : writeChunk(renderState$jscomp$0, clientRenderScript1Partial);
+        writeChunk(renderState$jscomp$0, renderState$jscomp$1.boundaryPrefix);
+        writeChunk(renderState$jscomp$0, id.toString(16));
+        writeChunk(renderState$jscomp$0, clientRenderScript1A);
+        if (errorDigest || errorMessage || errorStack || errorComponentStack)
+          writeChunk(
+            renderState$jscomp$0,
+            clientRenderErrorScriptArgInterstitial
+          ),
+            writeChunk(
+              renderState$jscomp$0,
+              escapeJSStringsForInstructionScripts(errorDigest || "")
+            );
+        if (errorMessage || errorStack || errorComponentStack)
+          writeChunk(
+            renderState$jscomp$0,
+            clientRenderErrorScriptArgInterstitial
+          ),
+            writeChunk(
+              renderState$jscomp$0,
+              escapeJSStringsForInstructionScripts(errorMessage || "")
+            );
+        if (errorStack || errorComponentStack)
+          writeChunk(
+            renderState$jscomp$0,
+            clientRenderErrorScriptArgInterstitial
+          ),
+            writeChunk(
+              renderState$jscomp$0,
+              escapeJSStringsForInstructionScripts(errorStack || "")
+            );
+        errorComponentStack &&
+          (writeChunk(
+            renderState$jscomp$0,
+            clientRenderErrorScriptArgInterstitial
+          ),
+          writeChunk(
+            renderState$jscomp$0,
+            escapeJSStringsForInstructionScripts(errorComponentStack)
+          ));
+        var JSCompiler_inline_result = !!renderState$jscomp$0.write(
+          clientRenderScriptEnd
+        );
+        if (!JSCompiler_inline_result) {
+          request.destination = null;
+          i++;
+          clientRenderedBoundaries.splice(0, i);
+          return;
+        }
+      }
+      clientRenderedBoundaries.splice(0, i);
+      var completedBoundaries = request.completedBoundaries;
+      for (i = 0; i < completedBoundaries.length; i++)
+        if (
+          !flushCompletedBoundary(request, destination, completedBoundaries[i])
+        ) {
+          request.destination = null;
+          i++;
+          completedBoundaries.splice(0, i);
+          return;
+        }
+      completedBoundaries.splice(0, i);
+      var partialBoundaries = request.partialBoundaries;
+      for (i = 0; i < partialBoundaries.length; i++) {
+        a: {
+          clientRenderedBoundaries = request;
+          boundary = destination;
+          var boundary$jscomp$0 = partialBoundaries[i],
+            completedSegments = boundary$jscomp$0.completedSegments;
+          for (
+            JSCompiler_inline_result = 0;
+            JSCompiler_inline_result < completedSegments.length;
+            JSCompiler_inline_result++
+          )
+            if (
+              !flushPartiallyCompletedSegment(
+                clientRenderedBoundaries,
+                boundary,
+                boundary$jscomp$0,
+                completedSegments[JSCompiler_inline_result]
+              )
+            ) {
+              JSCompiler_inline_result++;
+              completedSegments.splice(0, JSCompiler_inline_result);
+              var JSCompiler_inline_result$jscomp$0 = !1;
+              break a;
+            }
+          completedSegments.splice(0, JSCompiler_inline_result);
+          JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+            boundary,
+            boundary$jscomp$0.contentState,
+            clientRenderedBoundaries.renderState
+          );
+        }
+        if (!JSCompiler_inline_result$jscomp$0) {
+          request.destination = null;
+          i++;
+          partialBoundaries.splice(0, i);
+          return;
+        }
+      }
+      partialBoundaries.splice(0, i);
+      var largeBoundaries = request.completedBoundaries;
+      for (i = 0; i < largeBoundaries.length; i++)
+        if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) {
+          request.destination = null;
+          i++;
+          largeBoundaries.splice(0, i);
+          return;
+        }
+      largeBoundaries.splice(0, i);
+    }
+  } finally {
+    0 === request.allPendingTasks &&
+    0 === request.pingedTasks.length &&
+    0 === request.clientRenderedBoundaries.length &&
+    0 === request.completedBoundaries.length
+      ? ((request.flushScheduled = !1),
+        (i = request.resumableState),
+        i.hasBody && writeChunk(destination, endChunkForTag("body")),
+        i.hasHtml && writeChunk(destination, endChunkForTag("html")),
+        flushBuffered(destination),
+        0 !== request.abortableTasks.size &&
+          console.error(
+            "There was still abortable task at the root when we closed. This is a bug in React."
+          ),
+        (request.status = CLOSED),
+        destination.end(),
+        (request.destination = null))
+      : flushBuffered(destination);
+  }
+}
+function startWork(request) {
+  request.flushScheduled = null !== request.destination;
+  scheduleMicrotask(function () {
+    return performWork(request);
+  });
+  setTimeout(function () {
+    10 === request.status && (request.status = 11);
+    null === request.trackedPostpones &&
+      safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+  }, 0);
+}
+function enqueueFlush(request) {
+  !1 === request.flushScheduled &&
+    0 === request.pingedTasks.length &&
+    null !== request.destination &&
+    ((request.flushScheduled = !0),
+    setTimeout(function () {
+      var destination = request.destination;
+      destination
+        ? flushCompletedQueues(request, destination)
+        : (request.flushScheduled = !1);
+    }, 0));
+}
+function abort(request, reason) {
+  if (11 === request.status || 10 === request.status) request.status = 12;
+  try {
+    var abortableTasks = request.abortableTasks;
+    if (0 < abortableTasks.size) {
+      var error =
+        void 0 === reason
+          ? Error("The render was aborted by the server without a reason.")
+          : "object" === typeof reason &&
+              null !== reason &&
+              "function" === typeof reason.then
+            ? Error("The render was aborted by the server with a promise.")
+            : reason;
+      request.fatalError = error;
+      abortableTasks.forEach(function (task) {
+        return abortTask(task, request, error);
+      });
+      abortableTasks.clear();
+    }
+    null !== request.destination &&
+      flushCompletedQueues(request, request.destination);
+  } catch (error$4) {
+    (reason = {}),
+      logRecoverableError(request, error$4, reason, null),
+      fatalError(request, error$4, reason, null);
+  }
+}
+var isomorphicReactPackageVersion$jscomp$inline_743 = React.version;
+if (
+  "19.1.1" !==
+  isomorphicReactPackageVersion$jscomp$inline_743
+)
+  throw Error(
+    'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n  - react:      ' +
+      (isomorphicReactPackageVersion$jscomp$inline_743 +
+        "\n  - react-dom:  19.1.1\nLearn more: https://react.dev/warnings/version-mismatch")
+  );
+exports.renderToReadableStream = function (children, options) {
+  return new Promise(function (resolve, reject) {
+    var onFatalError,
+      onAllReady,
+      allReady = new Promise(function (res, rej) {
+        onAllReady = res;
+        onFatalError = rej;
+      }),
+      onHeaders = options ? options.onHeaders : void 0,
+      onHeadersImpl;
+    onHeaders &&
+      (onHeadersImpl = function (headersDescriptor) {
+        onHeaders(new Headers(headersDescriptor));
+      });
+    var resumableState = createResumableState(
+        options ? options.identifierPrefix : void 0,
+        options ? options.unstable_externalRuntimeSrc : void 0,
+        options ? options.bootstrapScriptContent : void 0,
+        options ? options.bootstrapScripts : void 0,
+        options ? options.bootstrapModules : void 0
+      ),
+      request$jscomp$0 = createRequest(
+        children,
+        resumableState,
+        createRenderState(
+          resumableState,
+          options ? options.nonce : void 0,
+          options ? options.unstable_externalRuntimeSrc : void 0,
+          options ? options.importMap : void 0,
+          onHeadersImpl,
+          options ? options.maxHeadersLength : void 0
+        ),
+        createRootFormatContext(options ? options.namespaceURI : void 0),
+        options ? options.progressiveChunkSize : void 0,
+        options ? options.onError : void 0,
+        onAllReady,
+        function () {
+          var stream = new ReadableStream(
+            {
+              type: "direct",
+              pull: function (controller) {
+                var request = request$jscomp$0;
+                if (13 === request.status)
+                  (request.status = CLOSED),
+                    closeWithError(controller, request.fatalError);
+                else if (
+                  request.status !== CLOSED &&
+                  null === request.destination
+                ) {
+                  request.destination = controller;
+                  try {
+                    flushCompletedQueues(request, controller);
+                  } catch (error) {
+                    (controller = {}),
+                      logRecoverableError(request, error, controller, null),
+                      fatalError(request, error, controller, null);
+                  }
+                }
+              },
+              cancel: function (reason) {
+                request$jscomp$0.destination = null;
+                abort(request$jscomp$0, reason);
+              }
+            },
+            { highWaterMark: 2048 }
+          );
+          stream.allReady = allReady;
+          resolve(stream);
+        },
+        function (error) {
+          allReady.catch(function () {});
+          reject(error);
+        },
+        onFatalError,
+        options ? options.onPostpone : void 0,
+        options ? options.formState : void 0
+      );
+    if (options && options.signal) {
+      var signal = options.signal;
+      if (signal.aborted) abort(request$jscomp$0, signal.reason);
+      else {
+        var listener = function () {
+          abort(request$jscomp$0, signal.reason);
+          signal.removeEventListener("abort", listener);
+        };
+        signal.addEventListener("abort", listener);
+      }
+    }
+    startWork(request$jscomp$0);
+  });
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/cjs/react-dom-server.bun.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server.bun.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server.bun.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5967 @@
+/**
+ * @license React
+ * react-dom-server.bun.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react"),
+  ReactDOM = require("react-dom"),
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+  REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+  REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+  REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+  MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+  isArrayImpl = Array.isArray,
+  scheduleMicrotask = queueMicrotask;
+function flushBuffered(destination) {
+  "function" === typeof destination.flush && destination.flush();
+}
+function writeChunk(destination, chunk) {
+  0 !== chunk.length && destination.write(chunk);
+}
+function closeWithError(destination, error) {
+  "function" === typeof destination.error
+    ? destination.error(error)
+    : destination.close();
+}
+var assign = Object.assign,
+  hasOwnProperty = Object.prototype.hasOwnProperty,
+  VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+    "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  illegalAttributeNameCache = {},
+  validatedAttributeNameCache = {};
+function isAttributeNameSafe(attributeName) {
+  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+    return !0;
+  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+    return (validatedAttributeNameCache[attributeName] = !0);
+  illegalAttributeNameCache[attributeName] = !0;
+  return !1;
+}
+var unitlessNumbers = new Set(
+    "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+      " "
+    )
+  ),
+  aliases = new Map([
+    ["acceptCharset", "accept-charset"],
+    ["htmlFor", "for"],
+    ["httpEquiv", "http-equiv"],
+    ["crossOrigin", "crossorigin"],
+    ["accentHeight", "accent-height"],
+    ["alignmentBaseline", "alignment-baseline"],
+    ["arabicForm", "arabic-form"],
+    ["baselineShift", "baseline-shift"],
+    ["capHeight", "cap-height"],
+    ["clipPath", "clip-path"],
+    ["clipRule", "clip-rule"],
+    ["colorInterpolation", "color-interpolation"],
+    ["colorInterpolationFilters", "color-interpolation-filters"],
+    ["colorProfile", "color-profile"],
+    ["colorRendering", "color-rendering"],
+    ["dominantBaseline", "dominant-baseline"],
+    ["enableBackground", "enable-background"],
+    ["fillOpacity", "fill-opacity"],
+    ["fillRule", "fill-rule"],
+    ["floodColor", "flood-color"],
+    ["floodOpacity", "flood-opacity"],
+    ["fontFamily", "font-family"],
+    ["fontSize", "font-size"],
+    ["fontSizeAdjust", "font-size-adjust"],
+    ["fontStretch", "font-stretch"],
+    ["fontStyle", "font-style"],
+    ["fontVariant", "font-variant"],
+    ["fontWeight", "font-weight"],
+    ["glyphName", "glyph-name"],
+    ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+    ["glyphOrientationVertical", "glyph-orientation-vertical"],
+    ["horizAdvX", "horiz-adv-x"],
+    ["horizOriginX", "horiz-origin-x"],
+    ["imageRendering", "image-rendering"],
+    ["letterSpacing", "letter-spacing"],
+    ["lightingColor", "lighting-color"],
+    ["markerEnd", "marker-end"],
+    ["markerMid", "marker-mid"],
+    ["markerStart", "marker-start"],
+    ["overlinePosition", "overline-position"],
+    ["overlineThickness", "overline-thickness"],
+    ["paintOrder", "paint-order"],
+    ["panose-1", "panose-1"],
+    ["pointerEvents", "pointer-events"],
+    ["renderingIntent", "rendering-intent"],
+    ["shapeRendering", "shape-rendering"],
+    ["stopColor", "stop-color"],
+    ["stopOpacity", "stop-opacity"],
+    ["strikethroughPosition", "strikethrough-position"],
+    ["strikethroughThickness", "strikethrough-thickness"],
+    ["strokeDasharray", "stroke-dasharray"],
+    ["strokeDashoffset", "stroke-dashoffset"],
+    ["strokeLinecap", "stroke-linecap"],
+    ["strokeLinejoin", "stroke-linejoin"],
+    ["strokeMiterlimit", "stroke-miterlimit"],
+    ["strokeOpacity", "stroke-opacity"],
+    ["strokeWidth", "stroke-width"],
+    ["textAnchor", "text-anchor"],
+    ["textDecoration", "text-decoration"],
+    ["textRendering", "text-rendering"],
+    ["transformOrigin", "transform-origin"],
+    ["underlinePosition", "underline-position"],
+    ["underlineThickness", "underline-thickness"],
+    ["unicodeBidi", "unicode-bidi"],
+    ["unicodeRange", "unicode-range"],
+    ["unitsPerEm", "units-per-em"],
+    ["vAlphabetic", "v-alphabetic"],
+    ["vHanging", "v-hanging"],
+    ["vIdeographic", "v-ideographic"],
+    ["vMathematical", "v-mathematical"],
+    ["vectorEffect", "vector-effect"],
+    ["vertAdvY", "vert-adv-y"],
+    ["vertOriginX", "vert-origin-x"],
+    ["vertOriginY", "vert-origin-y"],
+    ["wordSpacing", "word-spacing"],
+    ["writingMode", "writing-mode"],
+    ["xmlnsXlink", "xmlns:xlink"],
+    ["xHeight", "x-height"]
+  ]),
+  matchHtmlRegExp = /["'&<>]/;
+function escapeTextForBrowser(text) {
+  if (
+    "boolean" === typeof text ||
+    "number" === typeof text ||
+    "bigint" === typeof text
+  )
+    return "" + text;
+  text = "" + text;
+  var match = matchHtmlRegExp.exec(text);
+  if (match) {
+    var html = "",
+      index,
+      lastIndex = 0;
+    for (index = match.index; index < text.length; index++) {
+      switch (text.charCodeAt(index)) {
+        case 34:
+          match = "&quot;";
+          break;
+        case 38:
+          match = "&amp;";
+          break;
+        case 39:
+          match = "&#x27;";
+          break;
+        case 60:
+          match = "&lt;";
+          break;
+        case 62:
+          match = "&gt;";
+          break;
+        default:
+          continue;
+      }
+      lastIndex !== index && (html += text.slice(lastIndex, index));
+      lastIndex = index + 1;
+      html += match;
+    }
+    text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+  }
+  return text;
+}
+var uppercasePattern = /([A-Z])/g,
+  msPattern = /^ms-/,
+  isJavaScriptProtocol =
+    /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
+function sanitizeURL(url) {
+  return isJavaScriptProtocol.test("" + url)
+    ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+    : url;
+}
+var ReactSharedInternals =
+    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  ReactDOMSharedInternals =
+    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  sharedNotPendingObject = {
+    pending: !1,
+    data: null,
+    method: null,
+    action: null
+  },
+  previousDispatcher = ReactDOMSharedInternals.d;
+ReactDOMSharedInternals.d = {
+  f: previousDispatcher.f,
+  r: previousDispatcher.r,
+  D: prefetchDNS,
+  C: preconnect,
+  L: preload,
+  m: preloadModule,
+  X: preinitScript,
+  S: preinitStyle,
+  M: preinitModuleScript
+};
+var PRELOAD_NO_CREDS = [],
+  scriptRegex = /(<\/|<)(s)(cript)/gi;
+function scriptReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+}
+function createRenderState(
+  resumableState,
+  nonce,
+  externalRuntimeConfig,
+  importMap,
+  onHeaders,
+  maxHeadersLength
+) {
+  var inlineScriptWithNonce =
+      void 0 === nonce
+        ? "<script>"
+        : '<script nonce="' + escapeTextForBrowser(nonce) + '">',
+    idPrefix = resumableState.idPrefix;
+  externalRuntimeConfig = [];
+  var bootstrapScriptContent = resumableState.bootstrapScriptContent,
+    bootstrapScripts = resumableState.bootstrapScripts,
+    bootstrapModules = resumableState.bootstrapModules;
+  void 0 !== bootstrapScriptContent &&
+    externalRuntimeConfig.push(
+      inlineScriptWithNonce,
+      ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer),
+      "\x3c/script>"
+    );
+  bootstrapScriptContent = [];
+  void 0 !== importMap &&
+    (bootstrapScriptContent.push('<script type="importmap">'),
+    bootstrapScriptContent.push(
+      ("" + JSON.stringify(importMap)).replace(scriptRegex, scriptReplacer)
+    ),
+    bootstrapScriptContent.push("\x3c/script>"));
+  importMap = onHeaders
+    ? {
+        preconnects: "",
+        fontPreloads: "",
+        highImagePreloads: "",
+        remainingCapacity:
+          2 + ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3)
+      }
+    : null;
+  onHeaders = {
+    placeholderPrefix: idPrefix + "P:",
+    segmentPrefix: idPrefix + "S:",
+    boundaryPrefix: idPrefix + "B:",
+    startInlineScript: inlineScriptWithNonce,
+    preamble: createPreambleState(),
+    externalRuntimeScript: null,
+    bootstrapChunks: externalRuntimeConfig,
+    importMapChunks: bootstrapScriptContent,
+    onHeaders: onHeaders,
+    headers: importMap,
+    resets: {
+      font: {},
+      dns: {},
+      connect: { default: {}, anonymous: {}, credentials: {} },
+      image: {},
+      style: {}
+    },
+    charsetChunks: [],
+    viewportChunks: [],
+    hoistableChunks: [],
+    preconnects: new Set(),
+    fontPreloads: new Set(),
+    highImagePreloads: new Set(),
+    styles: new Map(),
+    bootstrapScripts: new Set(),
+    scripts: new Set(),
+    bulkPreloads: new Set(),
+    preloads: {
+      images: new Map(),
+      stylesheets: new Map(),
+      scripts: new Map(),
+      moduleScripts: new Map()
+    },
+    nonce: nonce,
+    hoistableState: null,
+    stylesToHoist: !1
+  };
+  if (void 0 !== bootstrapScripts)
+    for (importMap = 0; importMap < bootstrapScripts.length; importMap++) {
+      var scriptConfig = bootstrapScripts[importMap];
+      idPrefix = inlineScriptWithNonce = void 0;
+      bootstrapScriptContent = {
+        rel: "preload",
+        as: "script",
+        fetchPriority: "low",
+        nonce: nonce
+      };
+      "string" === typeof scriptConfig
+        ? (bootstrapScriptContent.href = maxHeadersLength = scriptConfig)
+        : ((bootstrapScriptContent.href = maxHeadersLength = scriptConfig.src),
+          (bootstrapScriptContent.integrity = idPrefix =
+            "string" === typeof scriptConfig.integrity
+              ? scriptConfig.integrity
+              : void 0),
+          (bootstrapScriptContent.crossOrigin = inlineScriptWithNonce =
+            "string" === typeof scriptConfig || null == scriptConfig.crossOrigin
+              ? void 0
+              : "use-credentials" === scriptConfig.crossOrigin
+                ? "use-credentials"
+                : ""));
+      scriptConfig = resumableState;
+      var href = maxHeadersLength;
+      scriptConfig.scriptResources[href] = null;
+      scriptConfig.moduleScriptResources[href] = null;
+      scriptConfig = [];
+      pushLinkImpl(scriptConfig, bootstrapScriptContent);
+      onHeaders.bootstrapScripts.add(scriptConfig);
+      externalRuntimeConfig.push(
+        '<script src="',
+        escapeTextForBrowser(maxHeadersLength)
+      );
+      nonce &&
+        externalRuntimeConfig.push('" nonce="', escapeTextForBrowser(nonce));
+      "string" === typeof idPrefix &&
+        externalRuntimeConfig.push(
+          '" integrity="',
+          escapeTextForBrowser(idPrefix)
+        );
+      "string" === typeof inlineScriptWithNonce &&
+        externalRuntimeConfig.push(
+          '" crossorigin="',
+          escapeTextForBrowser(inlineScriptWithNonce)
+        );
+      externalRuntimeConfig.push('" async="">\x3c/script>');
+    }
+  if (void 0 !== bootstrapModules)
+    for (
+      bootstrapScripts = 0;
+      bootstrapScripts < bootstrapModules.length;
+      bootstrapScripts++
+    )
+      (bootstrapScriptContent = bootstrapModules[bootstrapScripts]),
+        (inlineScriptWithNonce = maxHeadersLength = void 0),
+        (idPrefix = {
+          rel: "modulepreload",
+          fetchPriority: "low",
+          nonce: nonce
+        }),
+        "string" === typeof bootstrapScriptContent
+          ? (idPrefix.href = importMap = bootstrapScriptContent)
+          : ((idPrefix.href = importMap = bootstrapScriptContent.src),
+            (idPrefix.integrity = inlineScriptWithNonce =
+              "string" === typeof bootstrapScriptContent.integrity
+                ? bootstrapScriptContent.integrity
+                : void 0),
+            (idPrefix.crossOrigin = maxHeadersLength =
+              "string" === typeof bootstrapScriptContent ||
+              null == bootstrapScriptContent.crossOrigin
+                ? void 0
+                : "use-credentials" === bootstrapScriptContent.crossOrigin
+                  ? "use-credentials"
+                  : "")),
+        (bootstrapScriptContent = resumableState),
+        (scriptConfig = importMap),
+        (bootstrapScriptContent.scriptResources[scriptConfig] = null),
+        (bootstrapScriptContent.moduleScriptResources[scriptConfig] = null),
+        (bootstrapScriptContent = []),
+        pushLinkImpl(bootstrapScriptContent, idPrefix),
+        onHeaders.bootstrapScripts.add(bootstrapScriptContent),
+        externalRuntimeConfig.push(
+          '<script type="module" src="',
+          escapeTextForBrowser(importMap)
+        ),
+        nonce &&
+          externalRuntimeConfig.push('" nonce="', escapeTextForBrowser(nonce)),
+        "string" === typeof inlineScriptWithNonce &&
+          externalRuntimeConfig.push(
+            '" integrity="',
+            escapeTextForBrowser(inlineScriptWithNonce)
+          ),
+        "string" === typeof maxHeadersLength &&
+          externalRuntimeConfig.push(
+            '" crossorigin="',
+            escapeTextForBrowser(maxHeadersLength)
+          ),
+        externalRuntimeConfig.push('" async="">\x3c/script>');
+  return onHeaders;
+}
+function createResumableState(
+  identifierPrefix,
+  externalRuntimeConfig,
+  bootstrapScriptContent,
+  bootstrapScripts,
+  bootstrapModules
+) {
+  return {
+    idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+    nextFormID: 0,
+    streamingFormat: 0,
+    bootstrapScriptContent: bootstrapScriptContent,
+    bootstrapScripts: bootstrapScripts,
+    bootstrapModules: bootstrapModules,
+    instructions: 0,
+    hasBody: !1,
+    hasHtml: !1,
+    unknownResources: {},
+    dnsResources: {},
+    connectResources: { default: {}, anonymous: {}, credentials: {} },
+    imageResources: {},
+    styleResources: {},
+    scriptResources: {},
+    moduleUnknownResources: {},
+    moduleScriptResources: {}
+  };
+}
+function createPreambleState() {
+  return {
+    htmlChunks: null,
+    headChunks: null,
+    bodyChunks: null,
+    contribution: 0
+  };
+}
+function createFormatContext(insertionMode, selectedValue, tagScope) {
+  return {
+    insertionMode: insertionMode,
+    selectedValue: selectedValue,
+    tagScope: tagScope
+  };
+}
+function createRootFormatContext(namespaceURI) {
+  return createFormatContext(
+    "http://www.w3.org/2000/svg" === namespaceURI
+      ? 4
+      : "http://www.w3.org/1998/Math/MathML" === namespaceURI
+        ? 5
+        : 0,
+    null,
+    0
+  );
+}
+function getChildFormatContext(parentContext, type, props) {
+  switch (type) {
+    case "noscript":
+      return createFormatContext(2, null, parentContext.tagScope | 1);
+    case "select":
+      return createFormatContext(
+        2,
+        null != props.value ? props.value : props.defaultValue,
+        parentContext.tagScope
+      );
+    case "svg":
+      return createFormatContext(4, null, parentContext.tagScope);
+    case "picture":
+      return createFormatContext(2, null, parentContext.tagScope | 2);
+    case "math":
+      return createFormatContext(5, null, parentContext.tagScope);
+    case "foreignObject":
+      return createFormatContext(2, null, parentContext.tagScope);
+    case "table":
+      return createFormatContext(6, null, parentContext.tagScope);
+    case "thead":
+    case "tbody":
+    case "tfoot":
+      return createFormatContext(7, null, parentContext.tagScope);
+    case "colgroup":
+      return createFormatContext(9, null, parentContext.tagScope);
+    case "tr":
+      return createFormatContext(8, null, parentContext.tagScope);
+    case "head":
+      if (2 > parentContext.insertionMode)
+        return createFormatContext(3, null, parentContext.tagScope);
+      break;
+    case "html":
+      if (0 === parentContext.insertionMode)
+        return createFormatContext(1, null, parentContext.tagScope);
+  }
+  return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode
+    ? createFormatContext(2, null, parentContext.tagScope)
+    : parentContext;
+}
+function pushTextInstance(target, text, renderState, textEmbedded) {
+  if ("" === text) return textEmbedded;
+  textEmbedded && target.push("\x3c!-- --\x3e");
+  target.push(escapeTextForBrowser(text));
+  return !0;
+}
+var styleNameCache = new Map();
+function pushStyleAttribute(target, style) {
+  if ("object" !== typeof style)
+    throw Error(
+      "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+    );
+  var isFirst = !0,
+    styleName;
+  for (styleName in style)
+    if (hasOwnProperty.call(style, styleName)) {
+      var styleValue = style[styleName];
+      if (
+        null != styleValue &&
+        "boolean" !== typeof styleValue &&
+        "" !== styleValue
+      ) {
+        if (0 === styleName.indexOf("--")) {
+          var nameChunk = escapeTextForBrowser(styleName);
+          styleValue = escapeTextForBrowser(("" + styleValue).trim());
+        } else
+          (nameChunk = styleNameCache.get(styleName)),
+            void 0 === nameChunk &&
+              ((nameChunk = escapeTextForBrowser(
+                styleName
+                  .replace(uppercasePattern, "-$1")
+                  .toLowerCase()
+                  .replace(msPattern, "-ms-")
+              )),
+              styleNameCache.set(styleName, nameChunk)),
+            (styleValue =
+              "number" === typeof styleValue
+                ? 0 === styleValue || unitlessNumbers.has(styleName)
+                  ? "" + styleValue
+                  : styleValue + "px"
+                : escapeTextForBrowser(("" + styleValue).trim()));
+        isFirst
+          ? ((isFirst = !1),
+            target.push(' style="', nameChunk, ":", styleValue))
+          : target.push(";", nameChunk, ":", styleValue);
+      }
+    }
+  isFirst || target.push('"');
+}
+function pushBooleanAttribute(target, name, value) {
+  value &&
+    "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    target.push(" ", name, '=""');
+}
+function pushStringAttribute(target, name, value) {
+  "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    "boolean" !== typeof value &&
+    target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+}
+var actionJavaScriptURL = escapeTextForBrowser(
+  "javascript:throw new Error('React form unexpectedly submitted.')"
+);
+function pushAdditionalFormField(value, key) {
+  this.push('<input type="hidden"');
+  validateAdditionalFormField(value);
+  pushStringAttribute(this, "name", key);
+  pushStringAttribute(this, "value", value);
+  this.push("/>");
+}
+function validateAdditionalFormField(value) {
+  if ("string" !== typeof value)
+    throw Error(
+      "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+    );
+}
+function getCustomFormFields(resumableState, formAction) {
+  if ("function" === typeof formAction.$$FORM_ACTION) {
+    var id = resumableState.nextFormID++;
+    resumableState = resumableState.idPrefix + id;
+    try {
+      var customFields = formAction.$$FORM_ACTION(resumableState);
+      if (customFields) {
+        var formData = customFields.data;
+        null != formData && formData.forEach(validateAdditionalFormField);
+      }
+      return customFields;
+    } catch (x) {
+      if ("object" === typeof x && null !== x && "function" === typeof x.then)
+        throw x;
+    }
+  }
+  return null;
+}
+function pushFormActionAttribute(
+  target,
+  resumableState,
+  renderState,
+  formAction,
+  formEncType,
+  formMethod,
+  formTarget,
+  name
+) {
+  var formData = null;
+  if ("function" === typeof formAction) {
+    var customFields = getCustomFormFields(resumableState, formAction);
+    null !== customFields
+      ? ((name = customFields.name),
+        (formAction = customFields.action || ""),
+        (formEncType = customFields.encType),
+        (formMethod = customFields.method),
+        (formTarget = customFields.target),
+        (formData = customFields.data))
+      : (target.push(" ", "formAction", '="', actionJavaScriptURL, '"'),
+        (formTarget = formMethod = formEncType = formAction = name = null),
+        injectFormReplayingRuntime(resumableState, renderState));
+  }
+  null != name && pushAttribute(target, "name", name);
+  null != formAction && pushAttribute(target, "formAction", formAction);
+  null != formEncType && pushAttribute(target, "formEncType", formEncType);
+  null != formMethod && pushAttribute(target, "formMethod", formMethod);
+  null != formTarget && pushAttribute(target, "formTarget", formTarget);
+  return formData;
+}
+function pushAttribute(target, name, value) {
+  switch (name) {
+    case "className":
+      pushStringAttribute(target, "class", value);
+      break;
+    case "tabIndex":
+      pushStringAttribute(target, "tabindex", value);
+      break;
+    case "dir":
+    case "role":
+    case "viewBox":
+    case "width":
+    case "height":
+      pushStringAttribute(target, name, value);
+      break;
+    case "style":
+      pushStyleAttribute(target, value);
+      break;
+    case "src":
+    case "href":
+      if ("" === value) break;
+    case "action":
+    case "formAction":
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "ref":
+      break;
+    case "autoFocus":
+    case "multiple":
+    case "muted":
+      pushBooleanAttribute(target, name.toLowerCase(), value);
+      break;
+    case "xlinkHref":
+      if (
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(" ", "xlink:href", '="', escapeTextForBrowser(value), '"');
+      break;
+    case "contentEditable":
+    case "spellCheck":
+    case "draggable":
+    case "value":
+    case "autoReverse":
+    case "externalResourcesRequired":
+    case "focusable":
+    case "preserveAlpha":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "inert":
+    case "allowFullScreen":
+    case "async":
+    case "autoPlay":
+    case "controls":
+    case "default":
+    case "defer":
+    case "disabled":
+    case "disablePictureInPicture":
+    case "disableRemotePlayback":
+    case "formNoValidate":
+    case "hidden":
+    case "loop":
+    case "noModule":
+    case "noValidate":
+    case "open":
+    case "playsInline":
+    case "readOnly":
+    case "required":
+    case "reversed":
+    case "scoped":
+    case "seamless":
+    case "itemScope":
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(" ", name, '=""');
+      break;
+    case "capture":
+    case "download":
+      !0 === value
+        ? target.push(" ", name, '=""')
+        : !1 !== value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value &&
+          target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "cols":
+    case "rows":
+    case "size":
+    case "span":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        !isNaN(value) &&
+        1 <= value &&
+        target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "rowSpan":
+    case "start":
+      "function" === typeof value ||
+        "symbol" === typeof value ||
+        isNaN(value) ||
+        target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+      break;
+    case "xlinkActuate":
+      pushStringAttribute(target, "xlink:actuate", value);
+      break;
+    case "xlinkArcrole":
+      pushStringAttribute(target, "xlink:arcrole", value);
+      break;
+    case "xlinkRole":
+      pushStringAttribute(target, "xlink:role", value);
+      break;
+    case "xlinkShow":
+      pushStringAttribute(target, "xlink:show", value);
+      break;
+    case "xlinkTitle":
+      pushStringAttribute(target, "xlink:title", value);
+      break;
+    case "xlinkType":
+      pushStringAttribute(target, "xlink:type", value);
+      break;
+    case "xmlBase":
+      pushStringAttribute(target, "xml:base", value);
+      break;
+    case "xmlLang":
+      pushStringAttribute(target, "xml:lang", value);
+      break;
+    case "xmlSpace":
+      pushStringAttribute(target, "xml:space", value);
+      break;
+    default:
+      if (
+        !(2 < name.length) ||
+        ("o" !== name[0] && "O" !== name[0]) ||
+        ("n" !== name[1] && "N" !== name[1])
+      )
+        if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) {
+          switch (typeof value) {
+            case "function":
+            case "symbol":
+              return;
+            case "boolean":
+              var prefix$8 = name.toLowerCase().slice(0, 5);
+              if ("data-" !== prefix$8 && "aria-" !== prefix$8) return;
+          }
+          target.push(" ", name, '="', escapeTextForBrowser(value), '"');
+        }
+  }
+}
+function pushInnerHTML(target, innerHTML, children) {
+  if (null != innerHTML) {
+    if (null != children)
+      throw Error(
+        "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+      );
+    if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+      throw Error(
+        "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+      );
+    innerHTML = innerHTML.__html;
+    null !== innerHTML && void 0 !== innerHTML && target.push("" + innerHTML);
+  }
+}
+function flattenOptionChildren(children) {
+  var content = "";
+  React.Children.forEach(children, function (child) {
+    null != child && (content += child);
+  });
+  return content;
+}
+function injectFormReplayingRuntime(resumableState, renderState) {
+  0 === (resumableState.instructions & 16) &&
+    ((resumableState.instructions |= 16),
+    renderState.bootstrapChunks.unshift(
+      renderState.startInlineScript,
+      'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});',
+      "\x3c/script>"
+    ));
+}
+function pushLinkImpl(target, props) {
+  target.push(startChunkForTag("link"));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push("/>");
+  return null;
+}
+var styleRegex = /(<\/|<)(s)(tyle)/gi;
+function styleReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+}
+function pushSelfClosing(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              tag +
+                " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push("/>");
+  return null;
+}
+function pushTitleImpl(target, props) {
+  target.push(startChunkForTag("title"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  props = Array.isArray(children)
+    ? 2 > children.length
+      ? children[0]
+      : null
+    : children;
+  "function" !== typeof props &&
+    "symbol" !== typeof props &&
+    null !== props &&
+    void 0 !== props &&
+    target.push(escapeTextForBrowser("" + props));
+  pushInnerHTML(target, innerHTML, children);
+  target.push(endChunkForTag("title"));
+  return null;
+}
+function pushScriptImpl(target, props) {
+  target.push(startChunkForTag("script"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  pushInnerHTML(target, innerHTML, children);
+  "string" === typeof children &&
+    target.push(("" + children).replace(scriptRegex, scriptReplacer));
+  target.push(endChunkForTag("script"));
+  return null;
+}
+function pushStartSingletonElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  pushInnerHTML(target, innerHTML, tag);
+  return tag;
+}
+function pushStartGenericElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(">");
+  pushInnerHTML(target, innerHTML, tag);
+  return "string" === typeof tag
+    ? (target.push(escapeTextForBrowser(tag)), null)
+    : tag;
+}
+var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+  validatedTagCache = new Map();
+function startChunkForTag(tag) {
+  var tagStartChunk = validatedTagCache.get(tag);
+  if (void 0 === tagStartChunk) {
+    if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+    tagStartChunk = "<" + tag;
+    validatedTagCache.set(tag, tagStartChunk);
+  }
+  return tagStartChunk;
+}
+function pushStartInstance(
+  target$jscomp$0,
+  type,
+  props,
+  resumableState,
+  renderState,
+  preambleState,
+  hoistableState,
+  formatContext,
+  textEmbedded,
+  isFallback
+) {
+  switch (type) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+      break;
+    case "a":
+      target$jscomp$0.push(startChunkForTag("a"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              case "href":
+                "" === propValue
+                  ? pushStringAttribute(target$jscomp$0, "href", "")
+                  : pushAttribute(target$jscomp$0, propKey, propValue);
+                break;
+              default:
+                pushAttribute(target$jscomp$0, propKey, propValue);
+            }
+        }
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML, children);
+      if ("string" === typeof children) {
+        target$jscomp$0.push(escapeTextForBrowser(children));
+        var JSCompiler_inline_result = null;
+      } else JSCompiler_inline_result = children;
+      return JSCompiler_inline_result;
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "select":
+      target$jscomp$0.push(startChunkForTag("select"));
+      var children$jscomp$0 = null,
+        innerHTML$jscomp$0 = null,
+        propKey$jscomp$0;
+      for (propKey$jscomp$0 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+          var propValue$jscomp$0 = props[propKey$jscomp$0];
+          if (null != propValue$jscomp$0)
+            switch (propKey$jscomp$0) {
+              case "children":
+                children$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "defaultValue":
+              case "value":
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$0,
+                  propValue$jscomp$0
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+      return children$jscomp$0;
+    case "option":
+      var selectedValue = formatContext.selectedValue;
+      target$jscomp$0.push(startChunkForTag("option"));
+      var children$jscomp$1 = null,
+        value = null,
+        selected = null,
+        innerHTML$jscomp$1 = null,
+        propKey$jscomp$1;
+      for (propKey$jscomp$1 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+          var propValue$jscomp$1 = props[propKey$jscomp$1];
+          if (null != propValue$jscomp$1)
+            switch (propKey$jscomp$1) {
+              case "children":
+                children$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "selected":
+                selected = propValue$jscomp$1;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "value":
+                value = propValue$jscomp$1;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$1,
+                  propValue$jscomp$1
+                );
+            }
+        }
+      if (null != selectedValue) {
+        var stringValue =
+          null !== value
+            ? "" + value
+            : flattenOptionChildren(children$jscomp$1);
+        if (isArrayImpl(selectedValue))
+          for (var i = 0; i < selectedValue.length; i++) {
+            if ("" + selectedValue[i] === stringValue) {
+              target$jscomp$0.push(' selected=""');
+              break;
+            }
+          }
+        else
+          "" + selectedValue === stringValue &&
+            target$jscomp$0.push(' selected=""');
+      } else selected && target$jscomp$0.push(' selected=""');
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+      return children$jscomp$1;
+    case "textarea":
+      target$jscomp$0.push(startChunkForTag("textarea"));
+      var value$jscomp$0 = null,
+        defaultValue = null,
+        children$jscomp$2 = null,
+        propKey$jscomp$2;
+      for (propKey$jscomp$2 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+          var propValue$jscomp$2 = props[propKey$jscomp$2];
+          if (null != propValue$jscomp$2)
+            switch (propKey$jscomp$2) {
+              case "children":
+                children$jscomp$2 = propValue$jscomp$2;
+                break;
+              case "value":
+                value$jscomp$0 = propValue$jscomp$2;
+                break;
+              case "defaultValue":
+                defaultValue = propValue$jscomp$2;
+                break;
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$2,
+                  propValue$jscomp$2
+                );
+            }
+        }
+      null === value$jscomp$0 &&
+        null !== defaultValue &&
+        (value$jscomp$0 = defaultValue);
+      target$jscomp$0.push(">");
+      if (null != children$jscomp$2) {
+        if (null != value$jscomp$0)
+          throw Error(
+            "If you supply `defaultValue` on a <textarea>, do not pass children."
+          );
+        if (isArrayImpl(children$jscomp$2)) {
+          if (1 < children$jscomp$2.length)
+            throw Error("<textarea> can only have at most one child.");
+          value$jscomp$0 = "" + children$jscomp$2[0];
+        }
+        value$jscomp$0 = "" + children$jscomp$2;
+      }
+      "string" === typeof value$jscomp$0 &&
+        "\n" === value$jscomp$0[0] &&
+        target$jscomp$0.push("\n");
+      null !== value$jscomp$0 &&
+        target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0));
+      return null;
+    case "input":
+      target$jscomp$0.push(startChunkForTag("input"));
+      var name = null,
+        formAction = null,
+        formEncType = null,
+        formMethod = null,
+        formTarget = null,
+        value$jscomp$1 = null,
+        defaultValue$jscomp$0 = null,
+        checked = null,
+        defaultChecked = null,
+        propKey$jscomp$3;
+      for (propKey$jscomp$3 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+          var propValue$jscomp$3 = props[propKey$jscomp$3];
+          if (null != propValue$jscomp$3)
+            switch (propKey$jscomp$3) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              case "name":
+                name = propValue$jscomp$3;
+                break;
+              case "formAction":
+                formAction = propValue$jscomp$3;
+                break;
+              case "formEncType":
+                formEncType = propValue$jscomp$3;
+                break;
+              case "formMethod":
+                formMethod = propValue$jscomp$3;
+                break;
+              case "formTarget":
+                formTarget = propValue$jscomp$3;
+                break;
+              case "defaultChecked":
+                defaultChecked = propValue$jscomp$3;
+                break;
+              case "defaultValue":
+                defaultValue$jscomp$0 = propValue$jscomp$3;
+                break;
+              case "checked":
+                checked = propValue$jscomp$3;
+                break;
+              case "value":
+                value$jscomp$1 = propValue$jscomp$3;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$3,
+                  propValue$jscomp$3
+                );
+            }
+        }
+      var formData = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction,
+        formEncType,
+        formMethod,
+        formTarget,
+        name
+      );
+      null !== checked
+        ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+        : null !== defaultChecked &&
+          pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+      null !== value$jscomp$1
+        ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+        : null !== defaultValue$jscomp$0 &&
+          pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+      target$jscomp$0.push("/>");
+      null != formData &&
+        formData.forEach(pushAdditionalFormField, target$jscomp$0);
+      return null;
+    case "button":
+      target$jscomp$0.push(startChunkForTag("button"));
+      var children$jscomp$3 = null,
+        innerHTML$jscomp$2 = null,
+        name$jscomp$0 = null,
+        formAction$jscomp$0 = null,
+        formEncType$jscomp$0 = null,
+        formMethod$jscomp$0 = null,
+        formTarget$jscomp$0 = null,
+        propKey$jscomp$4;
+      for (propKey$jscomp$4 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+          var propValue$jscomp$4 = props[propKey$jscomp$4];
+          if (null != propValue$jscomp$4)
+            switch (propKey$jscomp$4) {
+              case "children":
+                children$jscomp$3 = propValue$jscomp$4;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$2 = propValue$jscomp$4;
+                break;
+              case "name":
+                name$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formAction":
+                formAction$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formEncType":
+                formEncType$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formMethod":
+                formMethod$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formTarget":
+                formTarget$jscomp$0 = propValue$jscomp$4;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$4,
+                  propValue$jscomp$4
+                );
+            }
+        }
+      var formData$jscomp$0 = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction$jscomp$0,
+        formEncType$jscomp$0,
+        formMethod$jscomp$0,
+        formTarget$jscomp$0,
+        name$jscomp$0
+      );
+      target$jscomp$0.push(">");
+      null != formData$jscomp$0 &&
+        formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+      if ("string" === typeof children$jscomp$3) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3));
+        var JSCompiler_inline_result$jscomp$0 = null;
+      } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3;
+      return JSCompiler_inline_result$jscomp$0;
+    case "form":
+      target$jscomp$0.push(startChunkForTag("form"));
+      var children$jscomp$4 = null,
+        innerHTML$jscomp$3 = null,
+        formAction$jscomp$1 = null,
+        formEncType$jscomp$1 = null,
+        formMethod$jscomp$1 = null,
+        formTarget$jscomp$1 = null,
+        propKey$jscomp$5;
+      for (propKey$jscomp$5 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+          var propValue$jscomp$5 = props[propKey$jscomp$5];
+          if (null != propValue$jscomp$5)
+            switch (propKey$jscomp$5) {
+              case "children":
+                children$jscomp$4 = propValue$jscomp$5;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$3 = propValue$jscomp$5;
+                break;
+              case "action":
+                formAction$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "encType":
+                formEncType$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "method":
+                formMethod$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "target":
+                formTarget$jscomp$1 = propValue$jscomp$5;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$5,
+                  propValue$jscomp$5
+                );
+            }
+        }
+      var formData$jscomp$1 = null,
+        formActionName = null;
+      if ("function" === typeof formAction$jscomp$1) {
+        var customFields = getCustomFormFields(
+          resumableState,
+          formAction$jscomp$1
+        );
+        null !== customFields
+          ? ((formAction$jscomp$1 = customFields.action || ""),
+            (formEncType$jscomp$1 = customFields.encType),
+            (formMethod$jscomp$1 = customFields.method),
+            (formTarget$jscomp$1 = customFields.target),
+            (formData$jscomp$1 = customFields.data),
+            (formActionName = customFields.name))
+          : (target$jscomp$0.push(
+              " ",
+              "action",
+              '="',
+              actionJavaScriptURL,
+              '"'
+            ),
+            (formTarget$jscomp$1 =
+              formMethod$jscomp$1 =
+              formEncType$jscomp$1 =
+              formAction$jscomp$1 =
+                null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != formAction$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+      null != formEncType$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+      null != formMethod$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+      null != formTarget$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+      target$jscomp$0.push(">");
+      null !== formActionName &&
+        (target$jscomp$0.push('<input type="hidden"'),
+        pushStringAttribute(target$jscomp$0, "name", formActionName),
+        target$jscomp$0.push("/>"),
+        null != formData$jscomp$1 &&
+          formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0));
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+      if ("string" === typeof children$jscomp$4) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4));
+        var JSCompiler_inline_result$jscomp$1 = null;
+      } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4;
+      return JSCompiler_inline_result$jscomp$1;
+    case "menuitem":
+      target$jscomp$0.push(startChunkForTag("menuitem"));
+      for (var propKey$jscomp$6 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+          var propValue$jscomp$6 = props[propKey$jscomp$6];
+          if (null != propValue$jscomp$6)
+            switch (propKey$jscomp$6) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$6,
+                  propValue$jscomp$6
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      return null;
+    case "object":
+      target$jscomp$0.push(startChunkForTag("object"));
+      var children$jscomp$5 = null,
+        innerHTML$jscomp$4 = null,
+        propKey$jscomp$7;
+      for (propKey$jscomp$7 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+          var propValue$jscomp$7 = props[propKey$jscomp$7];
+          if (null != propValue$jscomp$7)
+            switch (propKey$jscomp$7) {
+              case "children":
+                children$jscomp$5 = propValue$jscomp$7;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$4 = propValue$jscomp$7;
+                break;
+              case "data":
+                var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                if ("" === sanitizedValue) break;
+                target$jscomp$0.push(
+                  " ",
+                  "data",
+                  '="',
+                  escapeTextForBrowser(sanitizedValue),
+                  '"'
+                );
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$7,
+                  propValue$jscomp$7
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+      if ("string" === typeof children$jscomp$5) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5));
+        var JSCompiler_inline_result$jscomp$2 = null;
+      } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5;
+      return JSCompiler_inline_result$jscomp$2;
+    case "title":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$3 = pushTitleImpl(
+          target$jscomp$0,
+          props
+        );
+      else
+        isFallback
+          ? (JSCompiler_inline_result$jscomp$3 = null)
+          : (pushTitleImpl(renderState.hoistableChunks, props),
+            (JSCompiler_inline_result$jscomp$3 = void 0));
+      return JSCompiler_inline_result$jscomp$3;
+    case "link":
+      var rel = props.rel,
+        href = props.href,
+        precedence = props.precedence;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof rel ||
+        "string" !== typeof href ||
+        "" === href
+      ) {
+        pushLinkImpl(target$jscomp$0, props);
+        var JSCompiler_inline_result$jscomp$4 = null;
+      } else if ("stylesheet" === props.rel)
+        if (
+          "string" !== typeof precedence ||
+          null != props.disabled ||
+          props.onLoad ||
+          props.onError
+        )
+          JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+            target$jscomp$0,
+            props
+          );
+        else {
+          var styleQueue = renderState.styles.get(precedence),
+            resourceState = resumableState.styleResources.hasOwnProperty(href)
+              ? resumableState.styleResources[href]
+              : void 0;
+          if (null !== resourceState) {
+            resumableState.styleResources[href] = null;
+            styleQueue ||
+              ((styleQueue = {
+                precedence: escapeTextForBrowser(precedence),
+                rules: [],
+                hrefs: [],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence, styleQueue));
+            var resource = {
+              state: 0,
+              props: assign({}, props, {
+                "data-precedence": props.precedence,
+                precedence: null
+              })
+            };
+            if (resourceState) {
+              2 === resourceState.length &&
+                adoptPreloadCredentials(resource.props, resourceState);
+              var preloadResource = renderState.preloads.stylesheets.get(href);
+              preloadResource && 0 < preloadResource.length
+                ? (preloadResource.length = 0)
+                : (resource.state = 1);
+            }
+            styleQueue.sheets.set(href, resource);
+            hoistableState && hoistableState.stylesheets.add(resource);
+          } else if (styleQueue) {
+            var resource$9 = styleQueue.sheets.get(href);
+            resource$9 &&
+              hoistableState &&
+              hoistableState.stylesheets.add(resource$9);
+          }
+          textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+          JSCompiler_inline_result$jscomp$4 = null;
+        }
+      else
+        props.onLoad || props.onError
+          ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+              target$jscomp$0,
+              props
+            ))
+          : (textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+            (JSCompiler_inline_result$jscomp$4 = isFallback
+              ? null
+              : pushLinkImpl(renderState.hoistableChunks, props)));
+      return JSCompiler_inline_result$jscomp$4;
+    case "script":
+      var asyncProp = props.async;
+      if (
+        "string" !== typeof props.src ||
+        !props.src ||
+        !asyncProp ||
+        "function" === typeof asyncProp ||
+        "symbol" === typeof asyncProp ||
+        props.onLoad ||
+        props.onError ||
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$5 = pushScriptImpl(
+          target$jscomp$0,
+          props
+        );
+      else {
+        var key = props.src;
+        if ("module" === props.type) {
+          var resources = resumableState.moduleScriptResources;
+          var preloads = renderState.preloads.moduleScripts;
+        } else
+          (resources = resumableState.scriptResources),
+            (preloads = renderState.preloads.scripts);
+        var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+          ? resources[key]
+          : void 0;
+        if (null !== resourceState$jscomp$0) {
+          resources[key] = null;
+          var scriptProps = props;
+          if (resourceState$jscomp$0) {
+            2 === resourceState$jscomp$0.length &&
+              ((scriptProps = assign({}, props)),
+              adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+            var preloadResource$jscomp$0 = preloads.get(key);
+            preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0);
+          }
+          var resource$jscomp$0 = [];
+          renderState.scripts.add(resource$jscomp$0);
+          pushScriptImpl(resource$jscomp$0, scriptProps);
+        }
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+        JSCompiler_inline_result$jscomp$5 = null;
+      }
+      return JSCompiler_inline_result$jscomp$5;
+    case "style":
+      var precedence$jscomp$0 = props.precedence,
+        href$jscomp$0 = props.href;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof precedence$jscomp$0 ||
+        "string" !== typeof href$jscomp$0 ||
+        "" === href$jscomp$0
+      ) {
+        target$jscomp$0.push(startChunkForTag("style"));
+        var children$jscomp$6 = null,
+          innerHTML$jscomp$5 = null,
+          propKey$jscomp$8;
+        for (propKey$jscomp$8 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+            var propValue$jscomp$8 = props[propKey$jscomp$8];
+            if (null != propValue$jscomp$8)
+              switch (propKey$jscomp$8) {
+                case "children":
+                  children$jscomp$6 = propValue$jscomp$8;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$5 = propValue$jscomp$8;
+                  break;
+                default:
+                  pushAttribute(
+                    target$jscomp$0,
+                    propKey$jscomp$8,
+                    propValue$jscomp$8
+                  );
+              }
+          }
+        target$jscomp$0.push(">");
+        var child = Array.isArray(children$jscomp$6)
+          ? 2 > children$jscomp$6.length
+            ? children$jscomp$6[0]
+            : null
+          : children$jscomp$6;
+        "function" !== typeof child &&
+          "symbol" !== typeof child &&
+          null !== child &&
+          void 0 !== child &&
+          target$jscomp$0.push(("" + child).replace(styleRegex, styleReplacer));
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6);
+        target$jscomp$0.push(endChunkForTag("style"));
+        var JSCompiler_inline_result$jscomp$6 = null;
+      } else {
+        var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0);
+        if (
+          null !==
+          (resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+            ? resumableState.styleResources[href$jscomp$0]
+            : void 0)
+        ) {
+          resumableState.styleResources[href$jscomp$0] = null;
+          styleQueue$jscomp$0
+            ? styleQueue$jscomp$0.hrefs.push(
+                escapeTextForBrowser(href$jscomp$0)
+              )
+            : ((styleQueue$jscomp$0 = {
+                precedence: escapeTextForBrowser(precedence$jscomp$0),
+                rules: [],
+                hrefs: [escapeTextForBrowser(href$jscomp$0)],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0));
+          var target = styleQueue$jscomp$0.rules,
+            children$jscomp$7 = null,
+            innerHTML$jscomp$6 = null,
+            propKey$jscomp$9;
+          for (propKey$jscomp$9 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+              var propValue$jscomp$9 = props[propKey$jscomp$9];
+              if (null != propValue$jscomp$9)
+                switch (propKey$jscomp$9) {
+                  case "children":
+                    children$jscomp$7 = propValue$jscomp$9;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$6 = propValue$jscomp$9;
+                }
+            }
+          var child$jscomp$0 = Array.isArray(children$jscomp$7)
+            ? 2 > children$jscomp$7.length
+              ? children$jscomp$7[0]
+              : null
+            : children$jscomp$7;
+          "function" !== typeof child$jscomp$0 &&
+            "symbol" !== typeof child$jscomp$0 &&
+            null !== child$jscomp$0 &&
+            void 0 !== child$jscomp$0 &&
+            target.push(
+              ("" + child$jscomp$0).replace(styleRegex, styleReplacer)
+            );
+          pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7);
+        }
+        styleQueue$jscomp$0 &&
+          hoistableState &&
+          hoistableState.styles.add(styleQueue$jscomp$0);
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e");
+        JSCompiler_inline_result$jscomp$6 = void 0;
+      }
+      return JSCompiler_inline_result$jscomp$6;
+    case "meta":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$7 = pushSelfClosing(
+          target$jscomp$0,
+          props,
+          "meta"
+        );
+      else
+        textEmbedded && target$jscomp$0.push("\x3c!-- --\x3e"),
+          (JSCompiler_inline_result$jscomp$7 = isFallback
+            ? null
+            : "string" === typeof props.charSet
+              ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+              : "viewport" === props.name
+                ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                : pushSelfClosing(renderState.hoistableChunks, props, "meta"));
+      return JSCompiler_inline_result$jscomp$7;
+    case "listing":
+    case "pre":
+      target$jscomp$0.push(startChunkForTag(type));
+      var children$jscomp$8 = null,
+        innerHTML$jscomp$7 = null,
+        propKey$jscomp$10;
+      for (propKey$jscomp$10 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+          var propValue$jscomp$10 = props[propKey$jscomp$10];
+          if (null != propValue$jscomp$10)
+            switch (propKey$jscomp$10) {
+              case "children":
+                children$jscomp$8 = propValue$jscomp$10;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$7 = propValue$jscomp$10;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$10,
+                  propValue$jscomp$10
+                );
+            }
+        }
+      target$jscomp$0.push(">");
+      if (null != innerHTML$jscomp$7) {
+        if (null != children$jscomp$8)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if (
+          "object" !== typeof innerHTML$jscomp$7 ||
+          !("__html" in innerHTML$jscomp$7)
+        )
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        var html = innerHTML$jscomp$7.__html;
+        null !== html &&
+          void 0 !== html &&
+          ("string" === typeof html && 0 < html.length && "\n" === html[0]
+            ? target$jscomp$0.push("\n", html)
+            : target$jscomp$0.push("" + html));
+      }
+      "string" === typeof children$jscomp$8 &&
+        "\n" === children$jscomp$8[0] &&
+        target$jscomp$0.push("\n");
+      return children$jscomp$8;
+    case "img":
+      var src = props.src,
+        srcSet = props.srcSet;
+      if (
+        !(
+          "lazy" === props.loading ||
+          (!src && !srcSet) ||
+          ("string" !== typeof src && null != src) ||
+          ("string" !== typeof srcSet && null != srcSet)
+        ) &&
+        "low" !== props.fetchPriority &&
+        !1 === !!(formatContext.tagScope & 3) &&
+        ("string" !== typeof src ||
+          ":" !== src[4] ||
+          ("d" !== src[0] && "D" !== src[0]) ||
+          ("a" !== src[1] && "A" !== src[1]) ||
+          ("t" !== src[2] && "T" !== src[2]) ||
+          ("a" !== src[3] && "A" !== src[3])) &&
+        ("string" !== typeof srcSet ||
+          ":" !== srcSet[4] ||
+          ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+          ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+          ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+          ("a" !== srcSet[3] && "A" !== srcSet[3]))
+      ) {
+        var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+          key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+          promotablePreloads = renderState.preloads.images,
+          resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+        if (resource$jscomp$1) {
+          if (
+            "high" === props.fetchPriority ||
+            10 > renderState.highImagePreloads.size
+          )
+            promotablePreloads.delete(key$jscomp$0),
+              renderState.highImagePreloads.add(resource$jscomp$1);
+        } else if (
+          !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+        ) {
+          resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+          var input = props.crossOrigin;
+          var JSCompiler_inline_result$jscomp$8 =
+            "string" === typeof input
+              ? "use-credentials" === input
+                ? input
+                : ""
+              : void 0;
+          var headers = renderState.headers,
+            header;
+          headers &&
+          0 < headers.remainingCapacity &&
+          "string" !== typeof props.srcSet &&
+          ("high" === props.fetchPriority ||
+            500 > headers.highImagePreloads.length) &&
+          ((header = getPreloadAsHeader(src, "image", {
+            imageSrcSet: props.srcSet,
+            imageSizes: props.sizes,
+            crossOrigin: JSCompiler_inline_result$jscomp$8,
+            integrity: props.integrity,
+            nonce: props.nonce,
+            type: props.type,
+            fetchPriority: props.fetchPriority,
+            referrerPolicy: props.refererPolicy
+          })),
+          0 <= (headers.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+              headers.highImagePreloads && (headers.highImagePreloads += ", "),
+              (headers.highImagePreloads += header))
+            : ((resource$jscomp$1 = []),
+              pushLinkImpl(resource$jscomp$1, {
+                rel: "preload",
+                as: "image",
+                href: srcSet ? void 0 : src,
+                imageSrcSet: srcSet,
+                imageSizes: sizes,
+                crossOrigin: JSCompiler_inline_result$jscomp$8,
+                integrity: props.integrity,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.referrerPolicy
+              }),
+              "high" === props.fetchPriority ||
+              10 > renderState.highImagePreloads.size
+                ? renderState.highImagePreloads.add(resource$jscomp$1)
+                : (renderState.bulkPreloads.add(resource$jscomp$1),
+                  promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+        }
+      }
+      return pushSelfClosing(target$jscomp$0, props, "img");
+    case "base":
+    case "area":
+    case "br":
+    case "col":
+    case "embed":
+    case "hr":
+    case "keygen":
+    case "param":
+    case "source":
+    case "track":
+    case "wbr":
+      return pushSelfClosing(target$jscomp$0, props, type);
+    case "annotation-xml":
+    case "color-profile":
+    case "font-face":
+    case "font-face-src":
+    case "font-face-uri":
+    case "font-face-format":
+    case "font-face-name":
+    case "missing-glyph":
+      break;
+    case "head":
+      if (2 > formatContext.insertionMode) {
+        var preamble = preambleState || renderState.preamble;
+        if (preamble.headChunks)
+          throw Error("The `<head>` tag may only be rendered once.");
+        preamble.headChunks = [];
+        var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+          preamble.headChunks,
+          props,
+          "head"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "head"
+        );
+      return JSCompiler_inline_result$jscomp$9;
+    case "body":
+      if (2 > formatContext.insertionMode) {
+        var preamble$jscomp$0 = preambleState || renderState.preamble;
+        if (preamble$jscomp$0.bodyChunks)
+          throw Error("The `<body>` tag may only be rendered once.");
+        preamble$jscomp$0.bodyChunks = [];
+        var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+          preamble$jscomp$0.bodyChunks,
+          props,
+          "body"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "body"
+        );
+      return JSCompiler_inline_result$jscomp$10;
+    case "html":
+      if (0 === formatContext.insertionMode) {
+        var preamble$jscomp$1 = preambleState || renderState.preamble;
+        if (preamble$jscomp$1.htmlChunks)
+          throw Error("The `<html>` tag may only be rendered once.");
+        preamble$jscomp$1.htmlChunks = ["<!DOCTYPE html>"];
+        var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+          preamble$jscomp$1.htmlChunks,
+          props,
+          "html"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "html"
+        );
+      return JSCompiler_inline_result$jscomp$11;
+    default:
+      if (-1 !== type.indexOf("-")) {
+        target$jscomp$0.push(startChunkForTag(type));
+        var children$jscomp$9 = null,
+          innerHTML$jscomp$8 = null,
+          propKey$jscomp$11;
+        for (propKey$jscomp$11 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+            var propValue$jscomp$11 = props[propKey$jscomp$11];
+            if (null != propValue$jscomp$11) {
+              var attributeName = propKey$jscomp$11;
+              switch (propKey$jscomp$11) {
+                case "children":
+                  children$jscomp$9 = propValue$jscomp$11;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$8 = propValue$jscomp$11;
+                  break;
+                case "style":
+                  pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                  break;
+                case "suppressContentEditableWarning":
+                case "suppressHydrationWarning":
+                case "ref":
+                  break;
+                case "className":
+                  attributeName = "class";
+                default:
+                  if (
+                    isAttributeNameSafe(propKey$jscomp$11) &&
+                    "function" !== typeof propValue$jscomp$11 &&
+                    "symbol" !== typeof propValue$jscomp$11 &&
+                    !1 !== propValue$jscomp$11
+                  ) {
+                    if (!0 === propValue$jscomp$11) propValue$jscomp$11 = "";
+                    else if ("object" === typeof propValue$jscomp$11) continue;
+                    target$jscomp$0.push(
+                      " ",
+                      attributeName,
+                      '="',
+                      escapeTextForBrowser(propValue$jscomp$11),
+                      '"'
+                    );
+                  }
+              }
+            }
+          }
+        target$jscomp$0.push(">");
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9);
+        return children$jscomp$9;
+      }
+  }
+  return pushStartGenericElement(target$jscomp$0, props, type);
+}
+var endTagCache = new Map();
+function endChunkForTag(tag) {
+  var chunk = endTagCache.get(tag);
+  void 0 === chunk && ((chunk = "</" + tag + ">"), endTagCache.set(tag, chunk));
+  return chunk;
+}
+function hoistPreambleState(renderState, preambleState) {
+  renderState = renderState.preamble;
+  null === renderState.htmlChunks &&
+    preambleState.htmlChunks &&
+    ((renderState.htmlChunks = preambleState.htmlChunks),
+    (preambleState.contribution |= 1));
+  null === renderState.headChunks &&
+    preambleState.headChunks &&
+    ((renderState.headChunks = preambleState.headChunks),
+    (preambleState.contribution |= 4));
+  null === renderState.bodyChunks &&
+    preambleState.bodyChunks &&
+    ((renderState.bodyChunks = preambleState.bodyChunks),
+    (preambleState.contribution |= 2));
+}
+function writeBootstrap(destination, renderState) {
+  renderState = renderState.bootstrapChunks;
+  for (var i = 0; i < renderState.length - 1; i++)
+    writeChunk(destination, renderState[i]);
+  return i < renderState.length
+    ? ((i = renderState[i]), (renderState.length = 0), !!destination.write(i))
+    : !0;
+}
+function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+  writeChunk(destination, '\x3c!--$?--\x3e<template id="');
+  if (null === id)
+    throw Error(
+      "An ID must have been assigned before we can complete the boundary."
+    );
+  writeChunk(destination, renderState.boundaryPrefix);
+  writeChunk(destination, id.toString(16));
+  return !!destination.write('"></template>');
+}
+function writePreambleContribution(destination, preambleState) {
+  preambleState = preambleState.contribution;
+  0 !== preambleState &&
+    (writeChunk(destination, "\x3c!--"),
+    writeChunk(destination, "" + preambleState),
+    writeChunk(destination, "--\x3e"));
+}
+function writeStartSegment(destination, renderState, formatContext, id) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return (
+        writeChunk(destination, '<div hidden id="'),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write('">')
+      );
+    case 4:
+      return (
+        writeChunk(
+          destination,
+          '<svg aria-hidden="true" style="display:none" id="'
+        ),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write('">')
+      );
+    case 5:
+      return (
+        writeChunk(
+          destination,
+          '<math aria-hidden="true" style="display:none" id="'
+        ),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write('">')
+      );
+    case 6:
+      return (
+        writeChunk(destination, '<table hidden id="'),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write('">')
+      );
+    case 7:
+      return (
+        writeChunk(destination, '<table hidden><tbody id="'),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write('">')
+      );
+    case 8:
+      return (
+        writeChunk(destination, '<table hidden><tr id="'),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write('">')
+      );
+    case 9:
+      return (
+        writeChunk(destination, '<table hidden><colgroup id="'),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        !!destination.write('">')
+      );
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+function writeEndSegment(destination, formatContext) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return !!destination.write("</div>");
+    case 4:
+      return !!destination.write("</svg>");
+    case 5:
+      return !!destination.write("</math>");
+    case 6:
+      return !!destination.write("</table>");
+    case 7:
+      return !!destination.write("</tbody></table>");
+    case 8:
+      return !!destination.write("</tr></table>");
+    case 9:
+      return !!destination.write("</colgroup></table>");
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g;
+function escapeJSStringsForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInInstructionScripts,
+    function (match) {
+      switch (match) {
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var regexForJSStringsInScripts = /[&><\u2028\u2029]/g;
+function escapeJSObjectForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInScripts,
+    function (match) {
+      switch (match) {
+        case "&":
+          return "\\u0026";
+        case ">":
+          return "\\u003e";
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var currentlyRenderingBoundaryHasStylesToHoist = !1,
+  destinationHasCapacity = !0;
+function flushStyleTagsLateForBoundary(styleQueue) {
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs,
+    i = 0;
+  if (hrefs.length) {
+    writeChunk(this, '<style media="not all" data-precedence="');
+    writeChunk(this, styleQueue.precedence);
+    for (writeChunk(this, '" data-href="'); i < hrefs.length - 1; i++)
+      writeChunk(this, hrefs[i]), writeChunk(this, " ");
+    writeChunk(this, hrefs[i]);
+    writeChunk(this, '">');
+    for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]);
+    destinationHasCapacity = !!this.write("</style>");
+    currentlyRenderingBoundaryHasStylesToHoist = !0;
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function hasStylesToHoist(stylesheet) {
+  return 2 !== stylesheet.state
+    ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+    : !1;
+}
+function writeHoistablesForBoundary(destination, hoistableState, renderState) {
+  currentlyRenderingBoundaryHasStylesToHoist = !1;
+  destinationHasCapacity = !0;
+  hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+  hoistableState.stylesheets.forEach(hasStylesToHoist);
+  currentlyRenderingBoundaryHasStylesToHoist &&
+    (renderState.stylesToHoist = !0);
+  return destinationHasCapacity;
+}
+function flushResource(resource) {
+  for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]);
+  resource.length = 0;
+}
+var stylesheetFlushingQueue = [];
+function flushStyleInPreamble(stylesheet) {
+  pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+  for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+    writeChunk(this, stylesheetFlushingQueue[i]);
+  stylesheetFlushingQueue.length = 0;
+  stylesheet.state = 2;
+}
+function flushStylesInPreamble(styleQueue) {
+  var hasStylesheets = 0 < styleQueue.sheets.size;
+  styleQueue.sheets.forEach(flushStyleInPreamble, this);
+  styleQueue.sheets.clear();
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs;
+  if (!hasStylesheets || hrefs.length) {
+    writeChunk(this, '<style data-precedence="');
+    writeChunk(this, styleQueue.precedence);
+    styleQueue = 0;
+    if (hrefs.length) {
+      for (
+        writeChunk(this, '" data-href="');
+        styleQueue < hrefs.length - 1;
+        styleQueue++
+      )
+        writeChunk(this, hrefs[styleQueue]), writeChunk(this, " ");
+      writeChunk(this, hrefs[styleQueue]);
+    }
+    writeChunk(this, '">');
+    for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+      writeChunk(this, rules[styleQueue]);
+    writeChunk(this, "</style>");
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function preloadLateStyle(stylesheet) {
+  if (0 === stylesheet.state) {
+    stylesheet.state = 1;
+    var props = stylesheet.props;
+    pushLinkImpl(stylesheetFlushingQueue, {
+      rel: "preload",
+      as: "style",
+      href: stylesheet.props.href,
+      crossOrigin: props.crossOrigin,
+      fetchPriority: props.fetchPriority,
+      integrity: props.integrity,
+      media: props.media,
+      hrefLang: props.hrefLang,
+      referrerPolicy: props.referrerPolicy
+    });
+    for (
+      stylesheet = 0;
+      stylesheet < stylesheetFlushingQueue.length;
+      stylesheet++
+    )
+      writeChunk(this, stylesheetFlushingQueue[stylesheet]);
+    stylesheetFlushingQueue.length = 0;
+  }
+}
+function preloadLateStyles(styleQueue) {
+  styleQueue.sheets.forEach(preloadLateStyle, this);
+  styleQueue.sheets.clear();
+}
+function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+  writeChunk(destination, "[");
+  var nextArrayOpenBrackChunk = "[";
+  hoistableState.stylesheets.forEach(function (resource) {
+    if (2 !== resource.state)
+      if (3 === resource.state)
+        writeChunk(destination, nextArrayOpenBrackChunk),
+          writeChunk(
+            destination,
+            escapeJSObjectForInstructionScripts("" + resource.props.href)
+          ),
+          writeChunk(destination, "]"),
+          (nextArrayOpenBrackChunk = ",[");
+      else {
+        writeChunk(destination, nextArrayOpenBrackChunk);
+        var precedence = resource.props["data-precedence"],
+          props = resource.props,
+          coercedHref = sanitizeURL("" + resource.props.href);
+        writeChunk(
+          destination,
+          escapeJSObjectForInstructionScripts(coercedHref)
+        );
+        precedence = "" + precedence;
+        writeChunk(destination, ",");
+        writeChunk(
+          destination,
+          escapeJSObjectForInstructionScripts(precedence)
+        );
+        for (var propKey in props)
+          if (
+            hasOwnProperty.call(props, propKey) &&
+            ((precedence = props[propKey]), null != precedence)
+          )
+            switch (propKey) {
+              case "href":
+              case "rel":
+              case "precedence":
+              case "data-precedence":
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                writeStyleResourceAttributeInJS(
+                  destination,
+                  propKey,
+                  precedence
+                );
+            }
+        writeChunk(destination, "]");
+        nextArrayOpenBrackChunk = ",[";
+        resource.state = 3;
+      }
+  });
+  writeChunk(destination, "]");
+}
+function writeStyleResourceAttributeInJS(destination, name, value) {
+  var attributeName = name.toLowerCase();
+  switch (typeof value) {
+    case "function":
+    case "symbol":
+      return;
+  }
+  switch (name) {
+    case "innerHTML":
+    case "dangerouslySetInnerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "style":
+    case "ref":
+      return;
+    case "className":
+      attributeName = "class";
+      name = "" + value;
+      break;
+    case "hidden":
+      if (!1 === value) return;
+      name = "";
+      break;
+    case "src":
+    case "href":
+      value = sanitizeURL(value);
+      name = "" + value;
+      break;
+    default:
+      if (
+        (2 < name.length &&
+          ("o" === name[0] || "O" === name[0]) &&
+          ("n" === name[1] || "N" === name[1])) ||
+        !isAttributeNameSafe(name)
+      )
+        return;
+      name = "" + value;
+  }
+  writeChunk(destination, ",");
+  writeChunk(destination, escapeJSObjectForInstructionScripts(attributeName));
+  writeChunk(destination, ",");
+  writeChunk(destination, escapeJSObjectForInstructionScripts(name));
+}
+function createHoistableState() {
+  return { styles: new Set(), stylesheets: new Set() };
+}
+function prefetchDNS(href) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      if (!resumableState.dnsResources.hasOwnProperty(href)) {
+        resumableState.dnsResources[href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        )
+          JSCompiler_temp =
+            ((header =
+              "<" +
+              ("" + href).replace(
+                regexForHrefInLinkHeaderURLContext,
+                escapeHrefForLinkHeaderURLContextReplacer
+              ) +
+              ">; rel=dns-prefetch"),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        JSCompiler_temp
+          ? ((renderState.resets.dns[href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((header = []),
+            pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+            renderState.preconnects.add(header));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.D(href);
+}
+function preconnect(href, crossOrigin) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      var bucket =
+        "use-credentials" === crossOrigin
+          ? "credentials"
+          : "string" === typeof crossOrigin
+            ? "anonymous"
+            : "default";
+      if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+        resumableState.connectResources[bucket][href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        ) {
+          JSCompiler_temp =
+            "<" +
+            ("" + href).replace(
+              regexForHrefInLinkHeaderURLContext,
+              escapeHrefForLinkHeaderURLContextReplacer
+            ) +
+            ">; rel=preconnect";
+          if ("string" === typeof crossOrigin) {
+            var escapedCrossOrigin = ("" + crossOrigin).replace(
+              regexForLinkHeaderQuotedParamValueContext,
+              escapeStringForLinkHeaderQuotedParamValueContextReplacer
+            );
+            JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"';
+          }
+          JSCompiler_temp =
+            ((header = JSCompiler_temp),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        }
+        JSCompiler_temp
+          ? ((renderState.resets.connect[bucket][href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((bucket = []),
+            pushLinkImpl(bucket, {
+              rel: "preconnect",
+              href: href,
+              crossOrigin: crossOrigin
+            }),
+            renderState.preconnects.add(bucket));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.C(href, crossOrigin);
+}
+function preload(href, as, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (as && href) {
+      switch (as) {
+        case "image":
+          if (options) {
+            var imageSrcSet = options.imageSrcSet;
+            var imageSizes = options.imageSizes;
+            var fetchPriority = options.fetchPriority;
+          }
+          var key = imageSrcSet
+            ? imageSrcSet + "\n" + (imageSizes || "")
+            : href;
+          if (resumableState.imageResources.hasOwnProperty(key)) return;
+          resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+          resumableState = renderState.headers;
+          var header;
+          resumableState &&
+          0 < resumableState.remainingCapacity &&
+          "string" !== typeof imageSrcSet &&
+          "high" === fetchPriority &&
+          ((header = getPreloadAsHeader(href, as, options)),
+          0 <= (resumableState.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+              resumableState.highImagePreloads &&
+                (resumableState.highImagePreloads += ", "),
+              (resumableState.highImagePreloads += header))
+            : ((resumableState = []),
+              pushLinkImpl(
+                resumableState,
+                assign(
+                  { rel: "preload", href: imageSrcSet ? void 0 : href, as: as },
+                  options
+                )
+              ),
+              "high" === fetchPriority
+                ? renderState.highImagePreloads.add(resumableState)
+                : (renderState.bulkPreloads.add(resumableState),
+                  renderState.preloads.images.set(key, resumableState)));
+          break;
+        case "style":
+          if (resumableState.styleResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.styleResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.stylesheets.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          break;
+        case "script":
+          if (resumableState.scriptResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          renderState.preloads.scripts.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.scriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          break;
+        default:
+          if (resumableState.unknownResources.hasOwnProperty(as)) {
+            if (
+              ((imageSrcSet = resumableState.unknownResources[as]),
+              imageSrcSet.hasOwnProperty(href))
+            )
+              return;
+          } else
+            (imageSrcSet = {}),
+              (resumableState.unknownResources[as] = imageSrcSet);
+          imageSrcSet[href] = PRELOAD_NO_CREDS;
+          if (
+            (resumableState = renderState.headers) &&
+            0 < resumableState.remainingCapacity &&
+            "font" === as &&
+            ((key = getPreloadAsHeader(href, as, options)),
+            0 <= (resumableState.remainingCapacity -= key.length + 2))
+          )
+            (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+              resumableState.fontPreloads &&
+                (resumableState.fontPreloads += ", "),
+              (resumableState.fontPreloads += key);
+          else
+            switch (
+              ((resumableState = []),
+              (href = assign({ rel: "preload", href: href, as: as }, options)),
+              pushLinkImpl(resumableState, href),
+              as)
+            ) {
+              case "font":
+                renderState.fontPreloads.add(resumableState);
+                break;
+              default:
+                renderState.bulkPreloads.add(resumableState);
+            }
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.L(href, as, options);
+}
+function preloadModule(href, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      var as =
+        options && "string" === typeof options.as ? options.as : "script";
+      switch (as) {
+        case "script":
+          if (resumableState.moduleScriptResources.hasOwnProperty(href)) return;
+          as = [];
+          resumableState.moduleScriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.moduleScripts.set(href, as);
+          break;
+        default:
+          if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+            var resources = resumableState.unknownResources[as];
+            if (resources.hasOwnProperty(href)) return;
+          } else
+            (resources = {}),
+              (resumableState.moduleUnknownResources[as] = resources);
+          as = [];
+          resources[href] = PRELOAD_NO_CREDS;
+      }
+      pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options));
+      renderState.bulkPreloads.add(as);
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.m(href, options);
+}
+function preinitStyle(href, precedence, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      precedence = precedence || "default";
+      var styleQueue = renderState.styles.get(precedence),
+        resourceState = resumableState.styleResources.hasOwnProperty(href)
+          ? resumableState.styleResources[href]
+          : void 0;
+      null !== resourceState &&
+        ((resumableState.styleResources[href] = null),
+        styleQueue ||
+          ((styleQueue = {
+            precedence: escapeTextForBrowser(precedence),
+            rules: [],
+            hrefs: [],
+            sheets: new Map()
+          }),
+          renderState.styles.set(precedence, styleQueue)),
+        (precedence = {
+          state: 0,
+          props: assign(
+            { rel: "stylesheet", href: href, "data-precedence": precedence },
+            options
+          )
+        }),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(precedence.props, resourceState),
+          (renderState = renderState.preloads.stylesheets.get(href)) &&
+          0 < renderState.length
+            ? (renderState.length = 0)
+            : (precedence.state = 1)),
+        styleQueue.sheets.set(href, precedence),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.S(href, precedence, options);
+}
+function preinitScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.scriptResources.hasOwnProperty(src)
+        ? resumableState.scriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.scriptResources[src] = null),
+        (options = assign({ src: src, async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.scripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.X(src, options);
+}
+function preinitModuleScript(src, options) {
+  var request = currentRequest ? currentRequest : null;
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.moduleScriptResources.hasOwnProperty(
+        src
+      )
+        ? resumableState.moduleScriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.moduleScriptResources[src] = null),
+        (options = assign({ src: src, type: "module", async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.moduleScripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.M(src, options);
+}
+function adoptPreloadCredentials(target, preloadState) {
+  null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+  null == target.integrity && (target.integrity = preloadState[1]);
+}
+function getPreloadAsHeader(href, as, params) {
+  href = ("" + href).replace(
+    regexForHrefInLinkHeaderURLContext,
+    escapeHrefForLinkHeaderURLContextReplacer
+  );
+  as = ("" + as).replace(
+    regexForLinkHeaderQuotedParamValueContext,
+    escapeStringForLinkHeaderQuotedParamValueContextReplacer
+  );
+  as = "<" + href + '>; rel=preload; as="' + as + '"';
+  for (var paramName in params)
+    hasOwnProperty.call(params, paramName) &&
+      ((href = params[paramName]),
+      "string" === typeof href &&
+        (as +=
+          "; " +
+          paramName.toLowerCase() +
+          '="' +
+          ("" + href).replace(
+            regexForLinkHeaderQuotedParamValueContext,
+            escapeStringForLinkHeaderQuotedParamValueContextReplacer
+          ) +
+          '"'));
+  return as;
+}
+var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g;
+function escapeHrefForLinkHeaderURLContextReplacer(match) {
+  switch (match) {
+    case "<":
+      return "%3C";
+    case ">":
+      return "%3E";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g;
+function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+  switch (match) {
+    case '"':
+      return "%22";
+    case "'":
+      return "%27";
+    case ";":
+      return "%3B";
+    case ",":
+      return "%2C";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+function hoistStyleQueueDependency(styleQueue) {
+  this.styles.add(styleQueue);
+}
+function hoistStylesheetDependency(stylesheet) {
+  this.stylesheets.add(stylesheet);
+}
+var bind = Function.prototype.bind,
+  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function getComponentNameFromType(type) {
+  if (null == type) return null;
+  if ("function" === typeof type)
+    return type.$$typeof === REACT_CLIENT_REFERENCE
+      ? null
+      : type.displayName || type.name || null;
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_FRAGMENT_TYPE:
+      return "Fragment";
+    case REACT_PROFILER_TYPE:
+      return "Profiler";
+    case REACT_STRICT_MODE_TYPE:
+      return "StrictMode";
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+    case REACT_ACTIVITY_TYPE:
+      return "Activity";
+  }
+  if ("object" === typeof type)
+    switch (type.$$typeof) {
+      case REACT_PORTAL_TYPE:
+        return "Portal";
+      case REACT_CONTEXT_TYPE:
+        return (type.displayName || "Context") + ".Provider";
+      case REACT_CONSUMER_TYPE:
+        return (type._context.displayName || "Context") + ".Consumer";
+      case REACT_FORWARD_REF_TYPE:
+        var innerType = type.render;
+        type = type.displayName;
+        type ||
+          ((type = innerType.displayName || innerType.name || ""),
+          (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+        return type;
+      case REACT_MEMO_TYPE:
+        return (
+          (innerType = type.displayName || null),
+          null !== innerType
+            ? innerType
+            : getComponentNameFromType(type.type) || "Memo"
+        );
+      case REACT_LAZY_TYPE:
+        innerType = type._payload;
+        type = type._init;
+        try {
+          return getComponentNameFromType(type(innerType));
+        } catch (x) {}
+    }
+  return null;
+}
+var emptyContextObject = {},
+  currentActiveSnapshot = null;
+function popToNearestCommonAncestor(prev, next) {
+  if (prev !== next) {
+    prev.context._currentValue = prev.parentValue;
+    prev = prev.parent;
+    var parentNext = next.parent;
+    if (null === prev) {
+      if (null !== parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+    } else {
+      if (null === parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+      popToNearestCommonAncestor(prev, parentNext);
+    }
+    next.context._currentValue = next.value;
+  }
+}
+function popAllPrevious(prev) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  null !== prev && popAllPrevious(prev);
+}
+function pushAllNext(next) {
+  var parentNext = next.parent;
+  null !== parentNext && pushAllNext(parentNext);
+  next.context._currentValue = next.value;
+}
+function popPreviousToCommonLevel(prev, next) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  if (null === prev)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === next.depth
+    ? popToNearestCommonAncestor(prev, next)
+    : popPreviousToCommonLevel(prev, next);
+}
+function popNextToCommonLevel(prev, next) {
+  var parentNext = next.parent;
+  if (null === parentNext)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === parentNext.depth
+    ? popToNearestCommonAncestor(prev, parentNext)
+    : popNextToCommonLevel(prev, parentNext);
+  next.context._currentValue = next.value;
+}
+function switchContext(newSnapshot) {
+  var prev = currentActiveSnapshot;
+  prev !== newSnapshot &&
+    (null === prev
+      ? pushAllNext(newSnapshot)
+      : null === newSnapshot
+        ? popAllPrevious(prev)
+        : prev.depth === newSnapshot.depth
+          ? popToNearestCommonAncestor(prev, newSnapshot)
+          : prev.depth > newSnapshot.depth
+            ? popPreviousToCommonLevel(prev, newSnapshot)
+            : popNextToCommonLevel(prev, newSnapshot),
+    (currentActiveSnapshot = newSnapshot));
+}
+var classComponentUpdater = {
+    enqueueSetState: function (inst, payload) {
+      inst = inst._reactInternals;
+      null !== inst.queue && inst.queue.push(payload);
+    },
+    enqueueReplaceState: function (inst, payload) {
+      inst = inst._reactInternals;
+      inst.replace = !0;
+      inst.queue = [payload];
+    },
+    enqueueForceUpdate: function () {}
+  },
+  emptyTreeContext = { id: 1, overflow: "" };
+function pushTreeContext(baseContext, totalChildren, index) {
+  var baseIdWithLeadingBit = baseContext.id;
+  baseContext = baseContext.overflow;
+  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+  baseIdWithLeadingBit &= ~(1 << baseLength);
+  index += 1;
+  var length = 32 - clz32(totalChildren) + baseLength;
+  if (30 < length) {
+    var numberOfOverflowBits = baseLength - (baseLength % 5);
+    length = (
+      baseIdWithLeadingBit &
+      ((1 << numberOfOverflowBits) - 1)
+    ).toString(32);
+    baseIdWithLeadingBit >>= numberOfOverflowBits;
+    baseLength -= numberOfOverflowBits;
+    return {
+      id:
+        (1 << (32 - clz32(totalChildren) + baseLength)) |
+        (index << baseLength) |
+        baseIdWithLeadingBit,
+      overflow: length + baseContext
+    };
+  }
+  return {
+    id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+    overflow: baseContext
+  };
+}
+var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+  log = Math.log,
+  LN2 = Math.LN2;
+function clz32Fallback(x) {
+  x >>>= 0;
+  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+}
+var SuspenseException = Error(
+  "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+);
+function noop$2() {}
+function trackUsedThenable(thenableState, thenable, index) {
+  index = thenableState[index];
+  void 0 === index
+    ? thenableState.push(thenable)
+    : index !== thenable && (thenable.then(noop$2, noop$2), (thenable = index));
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw thenable.reason;
+    default:
+      "string" === typeof thenable.status
+        ? thenable.then(noop$2, noop$2)
+        : ((thenableState = thenable),
+          (thenableState.status = "pending"),
+          thenableState.then(
+            function (fulfilledValue) {
+              if ("pending" === thenable.status) {
+                var fulfilledThenable = thenable;
+                fulfilledThenable.status = "fulfilled";
+                fulfilledThenable.value = fulfilledValue;
+              }
+            },
+            function (error) {
+              if ("pending" === thenable.status) {
+                var rejectedThenable = thenable;
+                rejectedThenable.status = "rejected";
+                rejectedThenable.reason = error;
+              }
+            }
+          ));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+      }
+      suspendedThenable = thenable;
+      throw SuspenseException;
+  }
+}
+var suspendedThenable = null;
+function getSuspendedThenable() {
+  if (null === suspendedThenable)
+    throw Error(
+      "Expected a suspended thenable. This is a bug in React. Please file an issue."
+    );
+  var thenable = suspendedThenable;
+  suspendedThenable = null;
+  return thenable;
+}
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  currentlyRenderingComponent = null,
+  currentlyRenderingTask = null,
+  currentlyRenderingRequest = null,
+  currentlyRenderingKeyPath = null,
+  firstWorkInProgressHook = null,
+  workInProgressHook = null,
+  isReRender = !1,
+  didScheduleRenderPhaseUpdate = !1,
+  localIdCounter = 0,
+  actionStateCounter = 0,
+  actionStateMatchingIndex = -1,
+  thenableIndexCounter = 0,
+  thenableState = null,
+  renderPhaseUpdates = null,
+  numberOfReRenders = 0;
+function resolveCurrentlyRenderingComponent() {
+  if (null === currentlyRenderingComponent)
+    throw Error(
+      "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+    );
+  return currentlyRenderingComponent;
+}
+function createHook() {
+  if (0 < numberOfReRenders)
+    throw Error("Rendered more hooks than during the previous render");
+  return { memoizedState: null, queue: null, next: null };
+}
+function createWorkInProgressHook() {
+  null === workInProgressHook
+    ? null === firstWorkInProgressHook
+      ? ((isReRender = !1),
+        (firstWorkInProgressHook = workInProgressHook = createHook()))
+      : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+    : null === workInProgressHook.next
+      ? ((isReRender = !1),
+        (workInProgressHook = workInProgressHook.next = createHook()))
+      : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+  return workInProgressHook;
+}
+function getThenableStateAfterSuspending() {
+  var state = thenableState;
+  thenableState = null;
+  return state;
+}
+function resetHooksState() {
+  currentlyRenderingKeyPath =
+    currentlyRenderingRequest =
+    currentlyRenderingTask =
+    currentlyRenderingComponent =
+      null;
+  didScheduleRenderPhaseUpdate = !1;
+  firstWorkInProgressHook = null;
+  numberOfReRenders = 0;
+  workInProgressHook = renderPhaseUpdates = null;
+}
+function basicStateReducer(state, action) {
+  return "function" === typeof action ? action(state) : action;
+}
+function useReducer(reducer, initialArg, init) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  if (isReRender) {
+    var queue = workInProgressHook.queue;
+    initialArg = queue.dispatch;
+    if (
+      null !== renderPhaseUpdates &&
+      ((init = renderPhaseUpdates.get(queue)), void 0 !== init)
+    ) {
+      renderPhaseUpdates.delete(queue);
+      queue = workInProgressHook.memoizedState;
+      do (queue = reducer(queue, init.action)), (init = init.next);
+      while (null !== init);
+      workInProgressHook.memoizedState = queue;
+      return [queue, initialArg];
+    }
+    return [workInProgressHook.memoizedState, initialArg];
+  }
+  reducer =
+    reducer === basicStateReducer
+      ? "function" === typeof initialArg
+        ? initialArg()
+        : initialArg
+      : void 0 !== init
+        ? init(initialArg)
+        : initialArg;
+  workInProgressHook.memoizedState = reducer;
+  reducer = workInProgressHook.queue = { last: null, dispatch: null };
+  reducer = reducer.dispatch = dispatchAction.bind(
+    null,
+    currentlyRenderingComponent,
+    reducer
+  );
+  return [workInProgressHook.memoizedState, reducer];
+}
+function useMemo(nextCreate, deps) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  if (null !== workInProgressHook) {
+    var prevState = workInProgressHook.memoizedState;
+    if (null !== prevState && null !== deps) {
+      var prevDeps = prevState[1];
+      a: if (null === prevDeps) prevDeps = !1;
+      else {
+        for (var i = 0; i < prevDeps.length && i < deps.length; i++)
+          if (!objectIs(deps[i], prevDeps[i])) {
+            prevDeps = !1;
+            break a;
+          }
+        prevDeps = !0;
+      }
+      if (prevDeps) return prevState[0];
+    }
+  }
+  nextCreate = nextCreate();
+  workInProgressHook.memoizedState = [nextCreate, deps];
+  return nextCreate;
+}
+function dispatchAction(componentIdentity, queue, action) {
+  if (25 <= numberOfReRenders)
+    throw Error(
+      "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+    );
+  if (componentIdentity === currentlyRenderingComponent)
+    if (
+      ((didScheduleRenderPhaseUpdate = !0),
+      (componentIdentity = { action: action, next: null }),
+      null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+      (action = renderPhaseUpdates.get(queue)),
+      void 0 === action)
+    )
+      renderPhaseUpdates.set(queue, componentIdentity);
+    else {
+      for (queue = action; null !== queue.next; ) queue = queue.next;
+      queue.next = componentIdentity;
+    }
+}
+function unsupportedStartTransition() {
+  throw Error("startTransition cannot be called during server rendering.");
+}
+function unsupportedSetOptimisticState() {
+  throw Error("Cannot update optimistic state while rendering.");
+}
+function useActionState(action, initialState, permalink) {
+  resolveCurrentlyRenderingComponent();
+  var actionStateHookIndex = actionStateCounter++,
+    request = currentlyRenderingRequest;
+  if ("function" === typeof action.$$FORM_ACTION) {
+    var nextPostbackStateKey = null,
+      componentKeyPath = currentlyRenderingKeyPath;
+    request = request.formState;
+    var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+    if (null !== request && "function" === typeof isSignatureEqual) {
+      var postbackKey = request[1];
+      isSignatureEqual.call(action, request[2], request[3]) &&
+        ((nextPostbackStateKey =
+          void 0 !== permalink
+            ? "p" + permalink
+            : "k" +
+              Bun.hash(
+                JSON.stringify([componentKeyPath, null, actionStateHookIndex])
+              )),
+        postbackKey === nextPostbackStateKey &&
+          ((actionStateMatchingIndex = actionStateHookIndex),
+          (initialState = request[0])));
+    }
+    var boundAction = action.bind(null, initialState);
+    action = function (payload) {
+      boundAction(payload);
+    };
+    "function" === typeof boundAction.$$FORM_ACTION &&
+      (action.$$FORM_ACTION = function (prefix) {
+        prefix = boundAction.$$FORM_ACTION(prefix);
+        void 0 !== permalink &&
+          ((permalink += ""), (prefix.action = permalink));
+        var formData = prefix.data;
+        formData &&
+          (null === nextPostbackStateKey &&
+            (nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  Bun.hash(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ])
+                  )),
+          formData.append("$ACTION_KEY", nextPostbackStateKey));
+        return prefix;
+      });
+    return [initialState, action, !1];
+  }
+  var boundAction$22 = action.bind(null, initialState);
+  return [
+    initialState,
+    function (payload) {
+      boundAction$22(payload);
+    },
+    !1
+  ];
+}
+function unwrapThenable(thenable) {
+  var index = thenableIndexCounter;
+  thenableIndexCounter += 1;
+  null === thenableState && (thenableState = []);
+  return trackUsedThenable(thenableState, thenable, index);
+}
+function unsupportedRefresh() {
+  throw Error("Cache cannot be refreshed during server rendering.");
+}
+function noop$1() {}
+var HooksDispatcher = {
+    readContext: function (context) {
+      return context._currentValue;
+    },
+    use: function (usable) {
+      if (null !== usable && "object" === typeof usable) {
+        if ("function" === typeof usable.then) return unwrapThenable(usable);
+        if (usable.$$typeof === REACT_CONTEXT_TYPE) return usable._currentValue;
+      }
+      throw Error("An unsupported type was passed to use(): " + String(usable));
+    },
+    useContext: function (context) {
+      resolveCurrentlyRenderingComponent();
+      return context._currentValue;
+    },
+    useMemo: useMemo,
+    useReducer: useReducer,
+    useRef: function (initialValue) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      var previousRef = workInProgressHook.memoizedState;
+      return null === previousRef
+        ? ((initialValue = { current: initialValue }),
+          (workInProgressHook.memoizedState = initialValue))
+        : previousRef;
+    },
+    useState: function (initialState) {
+      return useReducer(basicStateReducer, initialState);
+    },
+    useInsertionEffect: noop$1,
+    useLayoutEffect: noop$1,
+    useCallback: function (callback, deps) {
+      return useMemo(function () {
+        return callback;
+      }, deps);
+    },
+    useImperativeHandle: noop$1,
+    useEffect: noop$1,
+    useDebugValue: noop$1,
+    useDeferredValue: function (value, initialValue) {
+      resolveCurrentlyRenderingComponent();
+      return void 0 !== initialValue ? initialValue : value;
+    },
+    useTransition: function () {
+      resolveCurrentlyRenderingComponent();
+      return [!1, unsupportedStartTransition];
+    },
+    useId: function () {
+      var JSCompiler_inline_result = currentlyRenderingTask.treeContext;
+      var overflow = JSCompiler_inline_result.overflow;
+      JSCompiler_inline_result = JSCompiler_inline_result.id;
+      JSCompiler_inline_result =
+        (
+          JSCompiler_inline_result &
+          ~(1 << (32 - clz32(JSCompiler_inline_result) - 1))
+        ).toString(32) + overflow;
+      var resumableState = currentResumableState;
+      if (null === resumableState)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component."
+        );
+      overflow = localIdCounter++;
+      JSCompiler_inline_result =
+        "\u00ab" + resumableState.idPrefix + "R" + JSCompiler_inline_result;
+      0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32));
+      return JSCompiler_inline_result + "\u00bb";
+    },
+    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
+      if (void 0 === getServerSnapshot)
+        throw Error(
+          "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+        );
+      return getServerSnapshot();
+    },
+    useOptimistic: function (passthrough) {
+      resolveCurrentlyRenderingComponent();
+      return [passthrough, unsupportedSetOptimisticState];
+    },
+    useActionState: useActionState,
+    useFormState: useActionState,
+    useHostTransitionStatus: function () {
+      resolveCurrentlyRenderingComponent();
+      return sharedNotPendingObject;
+    },
+    useMemoCache: function (size) {
+      for (var data = Array(size), i = 0; i < size; i++)
+        data[i] = REACT_MEMO_CACHE_SENTINEL;
+      return data;
+    },
+    useCacheRefresh: function () {
+      return unsupportedRefresh;
+    }
+  },
+  currentResumableState = null,
+  DefaultAsyncDispatcher = {
+    getCacheForType: function () {
+      throw Error("Not implemented.");
+    }
+  },
+  prefix,
+  suffix;
+function describeBuiltInComponentFrame(name) {
+  if (void 0 === prefix)
+    try {
+      throw Error();
+    } catch (x) {
+      var match = x.stack.trim().match(/\n( *(at )?)/);
+      prefix = (match && match[1]) || "";
+      suffix =
+        -1 < x.stack.indexOf("\n    at")
+          ? " (<anonymous>)"
+          : -1 < x.stack.indexOf("@")
+            ? "@unknown:0:0"
+            : "";
+    }
+  return "\n" + prefix + name + suffix;
+}
+var reentry = !1;
+function describeNativeComponentFrame(fn, construct) {
+  if (!fn || reentry) return "";
+  reentry = !0;
+  var previousPrepareStackTrace = Error.prepareStackTrace;
+  Error.prepareStackTrace = void 0;
+  try {
+    var RunInRootFrame = {
+      DetermineComponentFrameRoot: function () {
+        try {
+          if (construct) {
+            var Fake = function () {
+              throw Error();
+            };
+            Object.defineProperty(Fake.prototype, "props", {
+              set: function () {
+                throw Error();
+              }
+            });
+            if ("object" === typeof Reflect && Reflect.construct) {
+              try {
+                Reflect.construct(Fake, []);
+              } catch (x) {
+                var control = x;
+              }
+              Reflect.construct(fn, [], Fake);
+            } else {
+              try {
+                Fake.call();
+              } catch (x$24) {
+                control = x$24;
+              }
+              fn.call(Fake.prototype);
+            }
+          } else {
+            try {
+              throw Error();
+            } catch (x$25) {
+              control = x$25;
+            }
+            (Fake = fn()) &&
+              "function" === typeof Fake.catch &&
+              Fake.catch(function () {});
+          }
+        } catch (sample) {
+          if (sample && control && "string" === typeof sample.stack)
+            return [sample.stack, control.stack];
+        }
+        return [null, null];
+      }
+    };
+    RunInRootFrame.DetermineComponentFrameRoot.displayName =
+      "DetermineComponentFrameRoot";
+    var namePropDescriptor = Object.getOwnPropertyDescriptor(
+      RunInRootFrame.DetermineComponentFrameRoot,
+      "name"
+    );
+    namePropDescriptor &&
+      namePropDescriptor.configurable &&
+      Object.defineProperty(
+        RunInRootFrame.DetermineComponentFrameRoot,
+        "name",
+        { value: "DetermineComponentFrameRoot" }
+      );
+    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
+      sampleStack = _RunInRootFrame$Deter[0],
+      controlStack = _RunInRootFrame$Deter[1];
+    if (sampleStack && controlStack) {
+      var sampleLines = sampleStack.split("\n"),
+        controlLines = controlStack.split("\n");
+      for (
+        namePropDescriptor = RunInRootFrame = 0;
+        RunInRootFrame < sampleLines.length &&
+        !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot");
+
+      )
+        RunInRootFrame++;
+      for (
+        ;
+        namePropDescriptor < controlLines.length &&
+        !controlLines[namePropDescriptor].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        namePropDescriptor++;
+      if (
+        RunInRootFrame === sampleLines.length ||
+        namePropDescriptor === controlLines.length
+      )
+        for (
+          RunInRootFrame = sampleLines.length - 1,
+            namePropDescriptor = controlLines.length - 1;
+          1 <= RunInRootFrame &&
+          0 <= namePropDescriptor &&
+          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];
+
+        )
+          namePropDescriptor--;
+      for (
+        ;
+        1 <= RunInRootFrame && 0 <= namePropDescriptor;
+        RunInRootFrame--, namePropDescriptor--
+      )
+        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {
+          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {
+            do
+              if (
+                (RunInRootFrame--,
+                namePropDescriptor--,
+                0 > namePropDescriptor ||
+                  sampleLines[RunInRootFrame] !==
+                    controlLines[namePropDescriptor])
+              ) {
+                var frame =
+                  "\n" +
+                  sampleLines[RunInRootFrame].replace(" at new ", " at ");
+                fn.displayName &&
+                  frame.includes("<anonymous>") &&
+                  (frame = frame.replace("<anonymous>", fn.displayName));
+                return frame;
+              }
+            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);
+          }
+          break;
+        }
+    }
+  } finally {
+    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);
+  }
+  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "")
+    ? describeBuiltInComponentFrame(previousPrepareStackTrace)
+    : "";
+}
+function describeComponentStackByType(type) {
+  if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+  if ("function" === typeof type)
+    return type.prototype && type.prototype.isReactComponent
+      ? describeNativeComponentFrame(type, !0)
+      : describeNativeComponentFrame(type, !1);
+  if ("object" === typeof type && null !== type) {
+    switch (type.$$typeof) {
+      case REACT_FORWARD_REF_TYPE:
+        return describeNativeComponentFrame(type.render, !1);
+      case REACT_MEMO_TYPE:
+        return describeNativeComponentFrame(type.type, !1);
+      case REACT_LAZY_TYPE:
+        var lazyComponent = type,
+          payload = lazyComponent._payload;
+        lazyComponent = lazyComponent._init;
+        try {
+          type = lazyComponent(payload);
+        } catch (x) {
+          return describeBuiltInComponentFrame("Lazy");
+        }
+        return describeComponentStackByType(type);
+    }
+    if ("string" === typeof type.name)
+      return (
+        (payload = type.env),
+        describeBuiltInComponentFrame(
+          type.name + (payload ? " [" + payload + "]" : "")
+        )
+      );
+  }
+  switch (type) {
+    case REACT_SUSPENSE_LIST_TYPE:
+      return describeBuiltInComponentFrame("SuspenseList");
+    case REACT_SUSPENSE_TYPE:
+      return describeBuiltInComponentFrame("Suspense");
+  }
+  return "";
+}
+function defaultErrorHandler(error) {
+  if (
+    "object" === typeof error &&
+    null !== error &&
+    "string" === typeof error.environmentName
+  ) {
+    var JSCompiler_inline_result = error.environmentName;
+    error = [error].slice(0);
+    "string" === typeof error[0]
+      ? error.splice(
+          0,
+          1,
+          "%c%s%c " + error[0],
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        )
+      : error.splice(
+          0,
+          0,
+          "%c%s%c ",
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        );
+    error.unshift(console);
+    JSCompiler_inline_result = bind.apply(console.error, error);
+    JSCompiler_inline_result();
+  } else console.error(error);
+  return null;
+}
+function noop() {}
+function RequestInstance(
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  var abortSet = new Set();
+  this.destination = null;
+  this.flushScheduled = !1;
+  this.resumableState = resumableState;
+  this.renderState = renderState;
+  this.rootFormatContext = rootFormatContext;
+  this.progressiveChunkSize =
+    void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+  this.status = 10;
+  this.fatalError = null;
+  this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+  this.completedPreambleSegments = this.completedRootSegment = null;
+  this.abortableTasks = abortSet;
+  this.pingedTasks = [];
+  this.clientRenderedBoundaries = [];
+  this.completedBoundaries = [];
+  this.partialBoundaries = [];
+  this.trackedPostpones = null;
+  this.onError = void 0 === onError ? defaultErrorHandler : onError;
+  this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+  this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+  this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+  this.onShellError = void 0 === onShellError ? noop : onShellError;
+  this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+  this.formState = void 0 === formState ? null : formState;
+}
+function createRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  resumableState = new RequestInstance(
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    formState
+  );
+  renderState = createPendingSegment(
+    resumableState,
+    0,
+    null,
+    rootFormatContext,
+    !1,
+    !1
+  );
+  renderState.parentFlushed = !0;
+  children = createRenderTask(
+    resumableState,
+    null,
+    children,
+    -1,
+    null,
+    renderState,
+    null,
+    null,
+    resumableState.abortableTasks,
+    null,
+    rootFormatContext,
+    null,
+    emptyTreeContext,
+    null,
+    !1
+  );
+  pushComponentStack(children);
+  resumableState.pingedTasks.push(children);
+  return resumableState;
+}
+var currentRequest = null;
+function pingTask(request, task) {
+  request.pingedTasks.push(task);
+  1 === request.pingedTasks.length &&
+    ((request.flushScheduled = null !== request.destination),
+    null !== request.trackedPostpones || 10 === request.status
+      ? scheduleMicrotask(function () {
+          return performWork(request);
+        })
+      : setTimeout(function () {
+          return performWork(request);
+        }, 0));
+}
+function createSuspenseBoundary(
+  request,
+  fallbackAbortableTasks,
+  contentPreamble,
+  fallbackPreamble
+) {
+  return {
+    status: 0,
+    rootSegmentID: -1,
+    parentFlushed: !1,
+    pendingTasks: 0,
+    completedSegments: [],
+    byteSize: 0,
+    fallbackAbortableTasks: fallbackAbortableTasks,
+    errorDigest: null,
+    contentState: createHoistableState(),
+    fallbackState: createHoistableState(),
+    contentPreamble: contentPreamble,
+    fallbackPreamble: fallbackPreamble,
+    trackedContentKeyPath: null,
+    trackedFallbackNode: null
+  };
+}
+function createRenderTask(
+  request,
+  thenableState,
+  node,
+  childIndex,
+  blockedBoundary,
+  blockedSegment,
+  blockedPreamble,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  var task = {
+    replay: null,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: blockedSegment,
+    blockedPreamble: blockedPreamble,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createReplayTask(
+  request,
+  thenableState,
+  replay,
+  node,
+  childIndex,
+  blockedBoundary,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  replay.pendingTasks++;
+  var task = {
+    replay: replay,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: null,
+    blockedPreamble: null,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createPendingSegment(
+  request,
+  index,
+  boundary,
+  parentFormatContext,
+  lastPushedText,
+  textEmbedded
+) {
+  return {
+    status: 0,
+    parentFlushed: !1,
+    id: -1,
+    index: index,
+    chunks: [],
+    children: [],
+    preambleChildren: [],
+    parentFormatContext: parentFormatContext,
+    boundary: boundary,
+    lastPushedText: lastPushedText,
+    textEmbedded: textEmbedded
+  };
+}
+function pushComponentStack(task) {
+  var node = task.node;
+  if ("object" === typeof node && null !== node)
+    switch (node.$$typeof) {
+      case REACT_ELEMENT_TYPE:
+        task.componentStack = { parent: task.componentStack, type: node.type };
+    }
+}
+function getThrownInfo(node$jscomp$0) {
+  var errorInfo = {};
+  node$jscomp$0 &&
+    Object.defineProperty(errorInfo, "componentStack", {
+      configurable: !0,
+      enumerable: !0,
+      get: function () {
+        try {
+          var info = "",
+            node = node$jscomp$0;
+          do
+            (info += describeComponentStackByType(node.type)),
+              (node = node.parent);
+          while (node);
+          var JSCompiler_inline_result = info;
+        } catch (x) {
+          JSCompiler_inline_result =
+            "\nError generating stack: " + x.message + "\n" + x.stack;
+        }
+        Object.defineProperty(errorInfo, "componentStack", {
+          value: JSCompiler_inline_result
+        });
+        return JSCompiler_inline_result;
+      }
+    });
+  return errorInfo;
+}
+function logRecoverableError(request, error, errorInfo) {
+  request = request.onError;
+  error = request(error, errorInfo);
+  if (null == error || "string" === typeof error) return error;
+}
+function fatalError(request, error) {
+  var onShellError = request.onShellError,
+    onFatalError = request.onFatalError;
+  onShellError(error);
+  onFatalError(error);
+  null !== request.destination
+    ? ((request.status = 14), closeWithError(request.destination, error))
+    : ((request.status = 13), (request.fatalError = error));
+}
+function renderWithHooks(request, task, keyPath, Component, props, secondArg) {
+  var prevThenableState = task.thenableState;
+  task.thenableState = null;
+  currentlyRenderingComponent = {};
+  currentlyRenderingTask = task;
+  currentlyRenderingRequest = request;
+  currentlyRenderingKeyPath = keyPath;
+  actionStateCounter = localIdCounter = 0;
+  actionStateMatchingIndex = -1;
+  thenableIndexCounter = 0;
+  thenableState = prevThenableState;
+  for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; )
+    (didScheduleRenderPhaseUpdate = !1),
+      (actionStateCounter = localIdCounter = 0),
+      (actionStateMatchingIndex = -1),
+      (thenableIndexCounter = 0),
+      (numberOfReRenders += 1),
+      (workInProgressHook = null),
+      (request = Component(props, secondArg));
+  resetHooksState();
+  return request;
+}
+function finishFunctionComponent(
+  request,
+  task,
+  keyPath,
+  children,
+  hasId,
+  actionStateCount,
+  actionStateMatchingIndex
+) {
+  var didEmitActionStateMarkers = !1;
+  if (0 !== actionStateCount && null !== request.formState) {
+    var segment = task.blockedSegment;
+    if (null !== segment) {
+      didEmitActionStateMarkers = !0;
+      segment = segment.chunks;
+      for (var i = 0; i < actionStateCount; i++)
+        i === actionStateMatchingIndex
+          ? segment.push("\x3c!--F!--\x3e")
+          : segment.push("\x3c!--F--\x3e");
+    }
+  }
+  actionStateCount = task.keyPath;
+  task.keyPath = keyPath;
+  hasId
+    ? ((keyPath = task.treeContext),
+      (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+      renderNode(request, task, children, -1),
+      (task.treeContext = keyPath))
+    : didEmitActionStateMarkers
+      ? renderNode(request, task, children, -1)
+      : renderNodeDestructive(request, task, children, -1);
+  task.keyPath = actionStateCount;
+}
+function renderElement(request, task, keyPath, type, props, ref) {
+  if ("function" === typeof type)
+    if (type.prototype && type.prototype.isReactComponent) {
+      var newProps = props;
+      if ("ref" in props) {
+        newProps = {};
+        for (var propName in props)
+          "ref" !== propName && (newProps[propName] = props[propName]);
+      }
+      var defaultProps = type.defaultProps;
+      if (defaultProps) {
+        newProps === props && (newProps = assign({}, newProps, props));
+        for (var propName$33 in defaultProps)
+          void 0 === newProps[propName$33] &&
+            (newProps[propName$33] = defaultProps[propName$33]);
+      }
+      props = newProps;
+      newProps = emptyContextObject;
+      defaultProps = type.contextType;
+      "object" === typeof defaultProps &&
+        null !== defaultProps &&
+        (newProps = defaultProps._currentValue);
+      newProps = new type(props, newProps);
+      var initialState = void 0 !== newProps.state ? newProps.state : null;
+      newProps.updater = classComponentUpdater;
+      newProps.props = props;
+      newProps.state = initialState;
+      defaultProps = { queue: [], replace: !1 };
+      newProps._reactInternals = defaultProps;
+      ref = type.contextType;
+      newProps.context =
+        "object" === typeof ref && null !== ref
+          ? ref._currentValue
+          : emptyContextObject;
+      ref = type.getDerivedStateFromProps;
+      "function" === typeof ref &&
+        ((ref = ref(props, initialState)),
+        (initialState =
+          null === ref || void 0 === ref
+            ? initialState
+            : assign({}, initialState, ref)),
+        (newProps.state = initialState));
+      if (
+        "function" !== typeof type.getDerivedStateFromProps &&
+        "function" !== typeof newProps.getSnapshotBeforeUpdate &&
+        ("function" === typeof newProps.UNSAFE_componentWillMount ||
+          "function" === typeof newProps.componentWillMount)
+      )
+        if (
+          ((type = newProps.state),
+          "function" === typeof newProps.componentWillMount &&
+            newProps.componentWillMount(),
+          "function" === typeof newProps.UNSAFE_componentWillMount &&
+            newProps.UNSAFE_componentWillMount(),
+          type !== newProps.state &&
+            classComponentUpdater.enqueueReplaceState(
+              newProps,
+              newProps.state,
+              null
+            ),
+          null !== defaultProps.queue && 0 < defaultProps.queue.length)
+        )
+          if (
+            ((type = defaultProps.queue),
+            (ref = defaultProps.replace),
+            (defaultProps.queue = null),
+            (defaultProps.replace = !1),
+            ref && 1 === type.length)
+          )
+            newProps.state = type[0];
+          else {
+            defaultProps = ref ? type[0] : newProps.state;
+            initialState = !0;
+            for (ref = ref ? 1 : 0; ref < type.length; ref++)
+              (propName$33 = type[ref]),
+                (propName$33 =
+                  "function" === typeof propName$33
+                    ? propName$33.call(newProps, defaultProps, props, void 0)
+                    : propName$33),
+                null != propName$33 &&
+                  (initialState
+                    ? ((initialState = !1),
+                      (defaultProps = assign({}, defaultProps, propName$33)))
+                    : assign(defaultProps, propName$33));
+            newProps.state = defaultProps;
+          }
+        else defaultProps.queue = null;
+      type = newProps.render();
+      if (12 === request.status) throw null;
+      props = task.keyPath;
+      task.keyPath = keyPath;
+      renderNodeDestructive(request, task, type, -1);
+      task.keyPath = props;
+    } else {
+      type = renderWithHooks(request, task, keyPath, type, props, void 0);
+      if (12 === request.status) throw null;
+      finishFunctionComponent(
+        request,
+        task,
+        keyPath,
+        type,
+        0 !== localIdCounter,
+        actionStateCounter,
+        actionStateMatchingIndex
+      );
+    }
+  else if ("string" === typeof type)
+    if (((newProps = task.blockedSegment), null === newProps))
+      (newProps = props.children),
+        (defaultProps = task.formatContext),
+        (initialState = task.keyPath),
+        (task.formatContext = getChildFormatContext(defaultProps, type, props)),
+        (task.keyPath = keyPath),
+        renderNode(request, task, newProps, -1),
+        (task.formatContext = defaultProps),
+        (task.keyPath = initialState);
+    else {
+      ref = pushStartInstance(
+        newProps.chunks,
+        type,
+        props,
+        request.resumableState,
+        request.renderState,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.formatContext,
+        newProps.lastPushedText,
+        task.isFallback
+      );
+      newProps.lastPushedText = !1;
+      defaultProps = task.formatContext;
+      initialState = task.keyPath;
+      task.keyPath = keyPath;
+      3 ===
+      (task.formatContext = getChildFormatContext(defaultProps, type, props))
+        .insertionMode
+        ? ((keyPath = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          )),
+          newProps.preambleChildren.push(keyPath),
+          (keyPath = createRenderTask(
+            request,
+            null,
+            ref,
+            -1,
+            task.blockedBoundary,
+            keyPath,
+            task.blockedPreamble,
+            task.hoistableState,
+            request.abortableTasks,
+            task.keyPath,
+            task.formatContext,
+            task.context,
+            task.treeContext,
+            task.componentStack,
+            task.isFallback
+          )),
+          pushComponentStack(keyPath),
+          request.pingedTasks.push(keyPath))
+        : renderNode(request, task, ref, -1);
+      task.formatContext = defaultProps;
+      task.keyPath = initialState;
+      a: {
+        task = newProps.chunks;
+        request = request.resumableState;
+        switch (type) {
+          case "title":
+          case "style":
+          case "script":
+          case "area":
+          case "base":
+          case "br":
+          case "col":
+          case "embed":
+          case "hr":
+          case "img":
+          case "input":
+          case "keygen":
+          case "link":
+          case "meta":
+          case "param":
+          case "source":
+          case "track":
+          case "wbr":
+            break a;
+          case "body":
+            if (1 >= defaultProps.insertionMode) {
+              request.hasBody = !0;
+              break a;
+            }
+            break;
+          case "html":
+            if (0 === defaultProps.insertionMode) {
+              request.hasHtml = !0;
+              break a;
+            }
+            break;
+          case "head":
+            if (1 >= defaultProps.insertionMode) break a;
+        }
+        task.push(endChunkForTag(type));
+      }
+      newProps.lastPushedText = !1;
+    }
+  else {
+    switch (type) {
+      case REACT_LEGACY_HIDDEN_TYPE:
+      case REACT_STRICT_MODE_TYPE:
+      case REACT_PROFILER_TYPE:
+      case REACT_FRAGMENT_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_ACTIVITY_TYPE:
+        "hidden" !== props.mode &&
+          ((type = task.keyPath),
+          (task.keyPath = keyPath),
+          renderNodeDestructive(request, task, props.children, -1),
+          (task.keyPath = type));
+        return;
+      case REACT_SUSPENSE_LIST_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_VIEW_TRANSITION_TYPE:
+      case REACT_SCOPE_TYPE:
+        throw Error("ReactDOMServer does not yet support scope components.");
+      case REACT_SUSPENSE_TYPE:
+        a: if (null !== task.replay) {
+          type = task.keyPath;
+          task.keyPath = keyPath;
+          keyPath = props.children;
+          try {
+            renderNode(request, task, keyPath, -1);
+          } finally {
+            task.keyPath = type;
+          }
+        } else {
+          type = task.keyPath;
+          var parentBoundary = task.blockedBoundary;
+          ref = task.blockedPreamble;
+          var parentHoistableState = task.hoistableState;
+          propName$33 = task.blockedSegment;
+          propName = props.fallback;
+          props = props.children;
+          var fallbackAbortSet = new Set();
+          var newBoundary =
+            2 > task.formatContext.insertionMode
+              ? createSuspenseBoundary(
+                  request,
+                  fallbackAbortSet,
+                  createPreambleState(),
+                  createPreambleState()
+                )
+              : createSuspenseBoundary(request, fallbackAbortSet, null, null);
+          null !== request.trackedPostpones &&
+            (newBoundary.trackedContentKeyPath = keyPath);
+          var boundarySegment = createPendingSegment(
+            request,
+            propName$33.chunks.length,
+            newBoundary,
+            task.formatContext,
+            !1,
+            !1
+          );
+          propName$33.children.push(boundarySegment);
+          propName$33.lastPushedText = !1;
+          var contentRootSegment = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          );
+          contentRootSegment.parentFlushed = !0;
+          if (null !== request.trackedPostpones) {
+            newProps = [keyPath[0], "Suspense Fallback", keyPath[2]];
+            defaultProps = [newProps[1], newProps[2], [], null];
+            request.trackedPostpones.workingMap.set(newProps, defaultProps);
+            newBoundary.trackedFallbackNode = defaultProps;
+            task.blockedSegment = boundarySegment;
+            task.blockedPreamble = newBoundary.fallbackPreamble;
+            task.keyPath = newProps;
+            boundarySegment.status = 6;
+            try {
+              renderNode(request, task, propName, -1),
+                boundarySegment.lastPushedText &&
+                  boundarySegment.textEmbedded &&
+                  boundarySegment.chunks.push("\x3c!-- --\x3e"),
+                (boundarySegment.status = 1);
+            } catch (thrownValue) {
+              throw (
+                ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                thrownValue)
+              );
+            } finally {
+              (task.blockedSegment = propName$33),
+                (task.blockedPreamble = ref),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              props,
+              -1,
+              newBoundary,
+              contentRootSegment,
+              newBoundary.contentPreamble,
+              newBoundary.contentState,
+              task.abortSet,
+              keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          } else {
+            task.blockedBoundary = newBoundary;
+            task.blockedPreamble = newBoundary.contentPreamble;
+            task.hoistableState = newBoundary.contentState;
+            task.blockedSegment = contentRootSegment;
+            task.keyPath = keyPath;
+            contentRootSegment.status = 6;
+            try {
+              if (
+                (renderNode(request, task, props, -1),
+                contentRootSegment.lastPushedText &&
+                  contentRootSegment.textEmbedded &&
+                  contentRootSegment.chunks.push("\x3c!-- --\x3e"),
+                (contentRootSegment.status = 1),
+                queueCompletedSegment(newBoundary, contentRootSegment),
+                0 === newBoundary.pendingTasks && 0 === newBoundary.status)
+              ) {
+                newBoundary.status = 1;
+                0 === request.pendingRootTasks &&
+                  task.blockedPreamble &&
+                  preparePreamble(request);
+                break a;
+              }
+            } catch (thrownValue$28) {
+              (newBoundary.status = 4),
+                12 === request.status
+                  ? ((contentRootSegment.status = 3),
+                    (newProps = request.fatalError))
+                  : ((contentRootSegment.status = 4),
+                    (newProps = thrownValue$28)),
+                (defaultProps = getThrownInfo(task.componentStack)),
+                (initialState = logRecoverableError(
+                  request,
+                  newProps,
+                  defaultProps
+                )),
+                (newBoundary.errorDigest = initialState),
+                untrackBoundary(request, newBoundary);
+            } finally {
+              (task.blockedBoundary = parentBoundary),
+                (task.blockedPreamble = ref),
+                (task.hoistableState = parentHoistableState),
+                (task.blockedSegment = propName$33),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              propName,
+              -1,
+              parentBoundary,
+              boundarySegment,
+              newBoundary.fallbackPreamble,
+              newBoundary.fallbackState,
+              fallbackAbortSet,
+              [keyPath[0], "Suspense Fallback", keyPath[2]],
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              !0
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          }
+        }
+        return;
+    }
+    if ("object" === typeof type && null !== type)
+      switch (type.$$typeof) {
+        case REACT_FORWARD_REF_TYPE:
+          if ("ref" in props)
+            for (newBoundary in ((newProps = {}), props))
+              "ref" !== newBoundary &&
+                (newProps[newBoundary] = props[newBoundary]);
+          else newProps = props;
+          type = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type.render,
+            newProps,
+            ref
+          );
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            type,
+            0 !== localIdCounter,
+            actionStateCounter,
+            actionStateMatchingIndex
+          );
+          return;
+        case REACT_MEMO_TYPE:
+          renderElement(request, task, keyPath, type.type, props, ref);
+          return;
+        case REACT_PROVIDER_TYPE:
+        case REACT_CONTEXT_TYPE:
+          defaultProps = props.children;
+          newProps = task.keyPath;
+          props = props.value;
+          initialState = type._currentValue;
+          type._currentValue = props;
+          ref = currentActiveSnapshot;
+          currentActiveSnapshot = type = {
+            parent: ref,
+            depth: null === ref ? 0 : ref.depth + 1,
+            context: type,
+            parentValue: initialState,
+            value: props
+          };
+          task.context = type;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, defaultProps, -1);
+          request = currentActiveSnapshot;
+          if (null === request)
+            throw Error(
+              "Tried to pop a Context at the root of the app. This is a bug in React."
+            );
+          request.context._currentValue = request.parentValue;
+          request = currentActiveSnapshot = request.parent;
+          task.context = request;
+          task.keyPath = newProps;
+          return;
+        case REACT_CONSUMER_TYPE:
+          props = props.children;
+          type = props(type._context._currentValue);
+          props = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, type, -1);
+          task.keyPath = props;
+          return;
+        case REACT_LAZY_TYPE:
+          newProps = type._init;
+          type = newProps(type._payload);
+          if (12 === request.status) throw null;
+          renderElement(request, task, keyPath, type, props, ref);
+          return;
+      }
+    throw Error(
+      "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+        ((null == type ? type : typeof type) + ".")
+    );
+  }
+}
+function resumeNode(request, task, segmentId, node, childIndex) {
+  var prevReplay = task.replay,
+    blockedBoundary = task.blockedBoundary,
+    resumedSegment = createPendingSegment(
+      request,
+      0,
+      null,
+      task.formatContext,
+      !1,
+      !1
+    );
+  resumedSegment.id = segmentId;
+  resumedSegment.parentFlushed = !0;
+  try {
+    (task.replay = null),
+      (task.blockedSegment = resumedSegment),
+      renderNode(request, task, node, childIndex),
+      (resumedSegment.status = 1),
+      null === blockedBoundary
+        ? (request.completedRootSegment = resumedSegment)
+        : (queueCompletedSegment(blockedBoundary, resumedSegment),
+          blockedBoundary.parentFlushed &&
+            request.partialBoundaries.push(blockedBoundary));
+  } finally {
+    (task.replay = prevReplay), (task.blockedSegment = null);
+  }
+}
+function renderNodeDestructive(request, task, node, childIndex) {
+  null !== task.replay && "number" === typeof task.replay.slots
+    ? resumeNode(request, task, task.replay.slots, node, childIndex)
+    : ((task.node = node),
+      (task.childIndex = childIndex),
+      (node = task.componentStack),
+      pushComponentStack(task),
+      retryNode(request, task),
+      (task.componentStack = node));
+}
+function retryNode(request, task) {
+  var node = task.node,
+    childIndex = task.childIndex;
+  if (null !== node) {
+    if ("object" === typeof node) {
+      switch (node.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          var type = node.type,
+            key = node.key,
+            props = node.props;
+          node = props.ref;
+          var ref = void 0 !== node ? node : null,
+            name = getComponentNameFromType(type),
+            keyOrIndex =
+              null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+          key = [task.keyPath, name, keyOrIndex];
+          if (null !== task.replay)
+            a: {
+              var replay = task.replay;
+              childIndex = replay.nodes;
+              for (node = 0; node < childIndex.length; node++) {
+                var node$jscomp$0 = childIndex[node];
+                if (keyOrIndex === node$jscomp$0[1]) {
+                  if (4 === node$jscomp$0.length) {
+                    if (null !== name && name !== node$jscomp$0[0])
+                      throw Error(
+                        "Expected the resume to render <" +
+                          node$jscomp$0[0] +
+                          "> in this slot but instead it rendered <" +
+                          name +
+                          ">. The tree doesn't match so React will fallback to client rendering."
+                      );
+                    var childNodes = node$jscomp$0[2];
+                    name = node$jscomp$0[3];
+                    keyOrIndex = task.node;
+                    task.replay = {
+                      nodes: childNodes,
+                      slots: name,
+                      pendingTasks: 1
+                    };
+                    try {
+                      renderElement(request, task, key, type, props, ref);
+                      if (
+                        1 === task.replay.pendingTasks &&
+                        0 < task.replay.nodes.length
+                      )
+                        throw Error(
+                          "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                        );
+                      task.replay.pendingTasks--;
+                    } catch (x) {
+                      if (
+                        "object" === typeof x &&
+                        null !== x &&
+                        (x === SuspenseException ||
+                          "function" === typeof x.then)
+                      )
+                        throw (
+                          (task.node === keyOrIndex && (task.replay = replay),
+                          x)
+                        );
+                      task.replay.pendingTasks--;
+                      props = getThrownInfo(task.componentStack);
+                      key = task.blockedBoundary;
+                      type = x;
+                      props = logRecoverableError(request, type, props);
+                      abortRemainingReplayNodes(
+                        request,
+                        key,
+                        childNodes,
+                        name,
+                        type,
+                        props
+                      );
+                    }
+                    task.replay = replay;
+                  } else {
+                    if (type !== REACT_SUSPENSE_TYPE)
+                      throw Error(
+                        "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+                          (getComponentNameFromType(type) || "Unknown") +
+                          ">. The tree doesn't match so React will fallback to client rendering."
+                      );
+                    b: {
+                      replay = void 0;
+                      type = node$jscomp$0[5];
+                      ref = node$jscomp$0[2];
+                      name = node$jscomp$0[3];
+                      keyOrIndex =
+                        null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2];
+                      node$jscomp$0 =
+                        null === node$jscomp$0[4] ? null : node$jscomp$0[4][3];
+                      var prevKeyPath = task.keyPath,
+                        previousReplaySet = task.replay,
+                        parentBoundary = task.blockedBoundary,
+                        parentHoistableState = task.hoistableState,
+                        content = props.children,
+                        fallback = props.fallback,
+                        fallbackAbortSet = new Set();
+                      props =
+                        2 > task.formatContext.insertionMode
+                          ? createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              createPreambleState(),
+                              createPreambleState()
+                            )
+                          : createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              null,
+                              null
+                            );
+                      props.parentFlushed = !0;
+                      props.rootSegmentID = type;
+                      task.blockedBoundary = props;
+                      task.hoistableState = props.contentState;
+                      task.keyPath = key;
+                      task.replay = {
+                        nodes: ref,
+                        slots: name,
+                        pendingTasks: 1
+                      };
+                      try {
+                        renderNode(request, task, content, -1);
+                        if (
+                          1 === task.replay.pendingTasks &&
+                          0 < task.replay.nodes.length
+                        )
+                          throw Error(
+                            "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                          );
+                        task.replay.pendingTasks--;
+                        if (0 === props.pendingTasks && 0 === props.status) {
+                          props.status = 1;
+                          request.completedBoundaries.push(props);
+                          break b;
+                        }
+                      } catch (error) {
+                        (props.status = 4),
+                          (childNodes = getThrownInfo(task.componentStack)),
+                          (replay = logRecoverableError(
+                            request,
+                            error,
+                            childNodes
+                          )),
+                          (props.errorDigest = replay),
+                          task.replay.pendingTasks--,
+                          request.clientRenderedBoundaries.push(props);
+                      } finally {
+                        (task.blockedBoundary = parentBoundary),
+                          (task.hoistableState = parentHoistableState),
+                          (task.replay = previousReplaySet),
+                          (task.keyPath = prevKeyPath);
+                      }
+                      task = createReplayTask(
+                        request,
+                        null,
+                        {
+                          nodes: keyOrIndex,
+                          slots: node$jscomp$0,
+                          pendingTasks: 0
+                        },
+                        fallback,
+                        -1,
+                        parentBoundary,
+                        props.fallbackState,
+                        fallbackAbortSet,
+                        [key[0], "Suspense Fallback", key[2]],
+                        task.formatContext,
+                        task.context,
+                        task.treeContext,
+                        task.componentStack,
+                        !0
+                      );
+                      pushComponentStack(task);
+                      request.pingedTasks.push(task);
+                    }
+                  }
+                  childIndex.splice(node, 1);
+                  break a;
+                }
+              }
+            }
+          else renderElement(request, task, key, type, props, ref);
+          return;
+        case REACT_PORTAL_TYPE:
+          throw Error(
+            "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+          );
+        case REACT_LAZY_TYPE:
+          childNodes = node._init;
+          node = childNodes(node._payload);
+          if (12 === request.status) throw null;
+          renderNodeDestructive(request, task, node, childIndex);
+          return;
+      }
+      if (isArrayImpl(node)) {
+        renderChildrenArray(request, task, node, childIndex);
+        return;
+      }
+      null === node || "object" !== typeof node
+        ? (childNodes = null)
+        : ((childNodes =
+            (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+            node["@@iterator"]),
+          (childNodes = "function" === typeof childNodes ? childNodes : null));
+      if (childNodes && (childNodes = childNodes.call(node))) {
+        node = childNodes.next();
+        if (!node.done) {
+          props = [];
+          do props.push(node.value), (node = childNodes.next());
+          while (!node.done);
+          renderChildrenArray(request, task, props, childIndex);
+        }
+        return;
+      }
+      if ("function" === typeof node.then)
+        return (
+          (task.thenableState = null),
+          renderNodeDestructive(request, task, unwrapThenable(node), childIndex)
+        );
+      if (node.$$typeof === REACT_CONTEXT_TYPE)
+        return renderNodeDestructive(
+          request,
+          task,
+          node._currentValue,
+          childIndex
+        );
+      childIndex = Object.prototype.toString.call(node);
+      throw Error(
+        "Objects are not valid as a React child (found: " +
+          ("[object Object]" === childIndex
+            ? "object with keys {" + Object.keys(node).join(", ") + "}"
+            : childIndex) +
+          "). If you meant to render a collection of children, use an array instead."
+      );
+    }
+    if ("string" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+    else if ("number" === typeof node || "bigint" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            "" + node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+  }
+}
+function renderChildrenArray(request, task, children, childIndex) {
+  var prevKeyPath = task.keyPath;
+  if (
+    -1 !== childIndex &&
+    ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+    null !== task.replay)
+  ) {
+    for (
+      var replay = task.replay, replayNodes = replay.nodes, j = 0;
+      j < replayNodes.length;
+      j++
+    ) {
+      var node = replayNodes[j];
+      if (node[1] === childIndex) {
+        childIndex = node[2];
+        node = node[3];
+        task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+        try {
+          renderChildrenArray(request, task, children, -1);
+          if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length)
+            throw Error(
+              "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+            );
+          task.replay.pendingTasks--;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            (x === SuspenseException || "function" === typeof x.then)
+          )
+            throw x;
+          task.replay.pendingTasks--;
+          children = getThrownInfo(task.componentStack);
+          var boundary = task.blockedBoundary,
+            error = x;
+          children = logRecoverableError(request, error, children);
+          abortRemainingReplayNodes(
+            request,
+            boundary,
+            childIndex,
+            node,
+            error,
+            children
+          );
+        }
+        task.replay = replay;
+        replayNodes.splice(j, 1);
+        break;
+      }
+    }
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  replay = task.treeContext;
+  replayNodes = children.length;
+  if (
+    null !== task.replay &&
+    ((j = task.replay.slots), null !== j && "object" === typeof j)
+  ) {
+    for (childIndex = 0; childIndex < replayNodes; childIndex++)
+      (node = children[childIndex]),
+        (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)),
+        (boundary = j[childIndex]),
+        "number" === typeof boundary
+          ? (resumeNode(request, task, boundary, node, childIndex),
+            delete j[childIndex])
+          : renderNode(request, task, node, childIndex);
+    task.treeContext = replay;
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  for (j = 0; j < replayNodes; j++)
+    (childIndex = children[j]),
+      (task.treeContext = pushTreeContext(replay, replayNodes, j)),
+      renderNode(request, task, childIndex, j);
+  task.treeContext = replay;
+  task.keyPath = prevKeyPath;
+}
+function untrackBoundary(request, boundary) {
+  request = request.trackedPostpones;
+  null !== request &&
+    ((boundary = boundary.trackedContentKeyPath),
+    null !== boundary &&
+      ((boundary = request.workingMap.get(boundary)),
+      void 0 !== boundary &&
+        ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+}
+function spawnNewSuspendedReplayTask(request, task, thenableState) {
+  return createReplayTask(
+    request,
+    thenableState,
+    task.replay,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function spawnNewSuspendedRenderTask(request, task, thenableState) {
+  var segment = task.blockedSegment,
+    newSegment = createPendingSegment(
+      request,
+      segment.chunks.length,
+      null,
+      task.formatContext,
+      segment.lastPushedText,
+      !0
+    );
+  segment.children.push(newSegment);
+  segment.lastPushedText = !1;
+  return createRenderTask(
+    request,
+    thenableState,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    newSegment,
+    task.blockedPreamble,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function renderNode(request, task, node, childIndex) {
+  var previousFormatContext = task.formatContext,
+    previousContext = task.context,
+    previousKeyPath = task.keyPath,
+    previousTreeContext = task.treeContext,
+    previousComponentStack = task.componentStack,
+    segment = task.blockedSegment;
+  if (null === segment)
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue) {
+      if (
+        (resetHooksState(),
+        (node =
+          thrownValue === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedReplayTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedReplayTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  else {
+    var childrenLength = segment.children.length,
+      chunkLength = segment.chunks.length;
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue$48) {
+      if (
+        (resetHooksState(),
+        (segment.children.length = childrenLength),
+        (segment.chunks.length = chunkLength),
+        (node =
+          thrownValue$48 === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue$48),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedRenderTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedRenderTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  }
+  task.formatContext = previousFormatContext;
+  task.context = previousContext;
+  task.keyPath = previousKeyPath;
+  task.treeContext = previousTreeContext;
+  switchContext(previousContext);
+  throw node;
+}
+function abortTaskSoft(task) {
+  var boundary = task.blockedBoundary;
+  task = task.blockedSegment;
+  null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+}
+function abortRemainingReplayNodes(
+  request$jscomp$0,
+  boundary,
+  nodes,
+  slots,
+  error,
+  errorDigest$jscomp$0
+) {
+  for (var i = 0; i < nodes.length; i++) {
+    var node = nodes[i];
+    if (4 === node.length)
+      abortRemainingReplayNodes(
+        request$jscomp$0,
+        boundary,
+        node[2],
+        node[3],
+        error,
+        errorDigest$jscomp$0
+      );
+    else {
+      node = node[5];
+      var request = request$jscomp$0,
+        errorDigest = errorDigest$jscomp$0,
+        resumedBoundary = createSuspenseBoundary(
+          request,
+          new Set(),
+          null,
+          null
+        );
+      resumedBoundary.parentFlushed = !0;
+      resumedBoundary.rootSegmentID = node;
+      resumedBoundary.status = 4;
+      resumedBoundary.errorDigest = errorDigest;
+      resumedBoundary.parentFlushed &&
+        request.clientRenderedBoundaries.push(resumedBoundary);
+    }
+  }
+  nodes.length = 0;
+  if (null !== slots) {
+    if (null === boundary)
+      throw Error(
+        "We should not have any resumable nodes in the shell. This is a bug in React."
+      );
+    4 !== boundary.status &&
+      ((boundary.status = 4),
+      (boundary.errorDigest = errorDigest$jscomp$0),
+      boundary.parentFlushed &&
+        request$jscomp$0.clientRenderedBoundaries.push(boundary));
+    if ("object" === typeof slots) for (var index in slots) delete slots[index];
+  }
+}
+function abortTask(task, request, error) {
+  var boundary = task.blockedBoundary,
+    segment = task.blockedSegment;
+  if (null !== segment) {
+    if (6 === segment.status) return;
+    segment.status = 3;
+  }
+  segment = getThrownInfo(task.componentStack);
+  if (null === boundary) {
+    if (13 !== request.status && 14 !== request.status) {
+      boundary = task.replay;
+      if (null === boundary) {
+        logRecoverableError(request, error, segment);
+        fatalError(request, error);
+        return;
+      }
+      boundary.pendingTasks--;
+      0 === boundary.pendingTasks &&
+        0 < boundary.nodes.length &&
+        ((task = logRecoverableError(request, error, segment)),
+        abortRemainingReplayNodes(
+          request,
+          null,
+          boundary.nodes,
+          boundary.slots,
+          error,
+          task
+        ));
+      request.pendingRootTasks--;
+      0 === request.pendingRootTasks && completeShell(request);
+    }
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        ((boundary.status = 4),
+        (task = logRecoverableError(request, error, segment)),
+        (boundary.status = 4),
+        (boundary.errorDigest = task),
+        untrackBoundary(request, boundary),
+        boundary.parentFlushed &&
+          request.clientRenderedBoundaries.push(boundary)),
+      boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+        return abortTask(fallbackTask, request, error);
+      }),
+      boundary.fallbackAbortableTasks.clear();
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function safelyEmitEarlyPreloads(request, shellComplete) {
+  try {
+    var renderState = request.renderState,
+      onHeaders = renderState.onHeaders;
+    if (onHeaders) {
+      var headers = renderState.headers;
+      if (headers) {
+        renderState.headers = null;
+        var linkHeader = headers.preconnects;
+        headers.fontPreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.fontPreloads));
+        headers.highImagePreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.highImagePreloads));
+        if (!shellComplete) {
+          var queueIter = renderState.styles.values(),
+            queueStep = queueIter.next();
+          b: for (
+            ;
+            0 < headers.remainingCapacity && !queueStep.done;
+            queueStep = queueIter.next()
+          )
+            for (
+              var sheetIter = queueStep.value.sheets.values(),
+                sheetStep = sheetIter.next();
+              0 < headers.remainingCapacity && !sheetStep.done;
+              sheetStep = sheetIter.next()
+            ) {
+              var sheet = sheetStep.value,
+                props = sheet.props,
+                key = props.href,
+                props$jscomp$0 = sheet.props,
+                header = getPreloadAsHeader(props$jscomp$0.href, "style", {
+                  crossOrigin: props$jscomp$0.crossOrigin,
+                  integrity: props$jscomp$0.integrity,
+                  nonce: props$jscomp$0.nonce,
+                  type: props$jscomp$0.type,
+                  fetchPriority: props$jscomp$0.fetchPriority,
+                  referrerPolicy: props$jscomp$0.referrerPolicy,
+                  media: props$jscomp$0.media
+                });
+              if (0 <= (headers.remainingCapacity -= header.length + 2))
+                (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                  linkHeader && (linkHeader += ", "),
+                  (linkHeader += header),
+                  (renderState.resets.style[key] =
+                    "string" === typeof props.crossOrigin ||
+                    "string" === typeof props.integrity
+                      ? [props.crossOrigin, props.integrity]
+                      : PRELOAD_NO_CREDS);
+              else break b;
+            }
+        }
+        linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+      }
+    }
+  } catch (error) {
+    logRecoverableError(request, error, {});
+  }
+}
+function completeShell(request) {
+  null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+  null === request.trackedPostpones && preparePreamble(request);
+  request.onShellError = noop;
+  request = request.onShellReady;
+  request();
+}
+function completeAll(request) {
+  safelyEmitEarlyPreloads(
+    request,
+    null === request.trackedPostpones
+      ? !0
+      : null === request.completedRootSegment ||
+          5 !== request.completedRootSegment.status
+  );
+  preparePreamble(request);
+  request = request.onAllReady;
+  request();
+}
+function queueCompletedSegment(boundary, segment) {
+  if (
+    0 === segment.chunks.length &&
+    1 === segment.children.length &&
+    null === segment.children[0].boundary &&
+    -1 === segment.children[0].id
+  ) {
+    var childSegment = segment.children[0];
+    childSegment.id = segment.id;
+    childSegment.parentFlushed = !0;
+    1 === childSegment.status && queueCompletedSegment(boundary, childSegment);
+  } else boundary.completedSegments.push(segment);
+}
+function finishedTask(request, boundary, segment) {
+  if (null === boundary) {
+    if (null !== segment && segment.parentFlushed) {
+      if (null !== request.completedRootSegment)
+        throw Error(
+          "There can only be one root segment. This is a bug in React."
+        );
+      request.completedRootSegment = segment;
+    }
+    request.pendingRootTasks--;
+    0 === request.pendingRootTasks && completeShell(request);
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        (0 === boundary.pendingTasks
+          ? (0 === boundary.status && (boundary.status = 1),
+            null !== segment &&
+              segment.parentFlushed &&
+              1 === segment.status &&
+              queueCompletedSegment(boundary, segment),
+            boundary.parentFlushed &&
+              request.completedBoundaries.push(boundary),
+            1 === boundary.status &&
+              (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request),
+              boundary.fallbackAbortableTasks.clear(),
+              0 === request.pendingRootTasks &&
+                null === request.trackedPostpones &&
+                null !== boundary.contentPreamble &&
+                preparePreamble(request)))
+          : null !== segment &&
+            segment.parentFlushed &&
+            1 === segment.status &&
+            (queueCompletedSegment(boundary, segment),
+            1 === boundary.completedSegments.length &&
+              boundary.parentFlushed &&
+              request.partialBoundaries.push(boundary)));
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function performWork(request$jscomp$2) {
+  if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) {
+    var prevContext = currentActiveSnapshot,
+      prevDispatcher = ReactSharedInternals.H;
+    ReactSharedInternals.H = HooksDispatcher;
+    var prevAsyncDispatcher = ReactSharedInternals.A;
+    ReactSharedInternals.A = DefaultAsyncDispatcher;
+    var prevRequest = currentRequest;
+    currentRequest = request$jscomp$2;
+    var prevResumableState = currentResumableState;
+    currentResumableState = request$jscomp$2.resumableState;
+    try {
+      var pingedTasks = request$jscomp$2.pingedTasks,
+        i;
+      for (i = 0; i < pingedTasks.length; i++) {
+        var task = pingedTasks[i],
+          request = request$jscomp$2,
+          segment = task.blockedSegment;
+        if (null === segment) {
+          var request$jscomp$0 = request;
+          if (0 !== task.replay.pendingTasks) {
+            switchContext(task.context);
+            try {
+              "number" === typeof task.replay.slots
+                ? resumeNode(
+                    request$jscomp$0,
+                    task,
+                    task.replay.slots,
+                    task.node,
+                    task.childIndex
+                  )
+                : retryNode(request$jscomp$0, task);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+              task.abortSet.delete(task);
+              finishedTask(request$jscomp$0, task.blockedBoundary, null);
+            } catch (thrownValue) {
+              resetHooksState();
+              var x =
+                thrownValue === SuspenseException
+                  ? getSuspendedThenable()
+                  : thrownValue;
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                "function" === typeof x.then
+              ) {
+                var ping = task.ping;
+                x.then(ping, ping);
+                task.thenableState = getThenableStateAfterSuspending();
+              } else {
+                task.replay.pendingTasks--;
+                task.abortSet.delete(task);
+                var errorInfo = getThrownInfo(task.componentStack);
+                request = void 0;
+                var request$jscomp$1 = request$jscomp$0,
+                  boundary = task.blockedBoundary,
+                  error$jscomp$0 =
+                    12 === request$jscomp$0.status
+                      ? request$jscomp$0.fatalError
+                      : x,
+                  replayNodes = task.replay.nodes,
+                  resumeSlots = task.replay.slots;
+                request = logRecoverableError(
+                  request$jscomp$1,
+                  error$jscomp$0,
+                  errorInfo
+                );
+                abortRemainingReplayNodes(
+                  request$jscomp$1,
+                  boundary,
+                  replayNodes,
+                  resumeSlots,
+                  error$jscomp$0,
+                  request
+                );
+                request$jscomp$0.pendingRootTasks--;
+                0 === request$jscomp$0.pendingRootTasks &&
+                  completeShell(request$jscomp$0);
+                request$jscomp$0.allPendingTasks--;
+                0 === request$jscomp$0.allPendingTasks &&
+                  completeAll(request$jscomp$0);
+              }
+            } finally {
+            }
+          }
+        } else if (
+          ((request$jscomp$0 = void 0),
+          (request$jscomp$1 = segment),
+          0 === request$jscomp$1.status)
+        ) {
+          request$jscomp$1.status = 6;
+          switchContext(task.context);
+          var childrenLength = request$jscomp$1.children.length,
+            chunkLength = request$jscomp$1.chunks.length;
+          try {
+            retryNode(request, task),
+              request$jscomp$1.lastPushedText &&
+                request$jscomp$1.textEmbedded &&
+                request$jscomp$1.chunks.push("\x3c!-- --\x3e"),
+              task.abortSet.delete(task),
+              (request$jscomp$1.status = 1),
+              finishedTask(request, task.blockedBoundary, request$jscomp$1);
+          } catch (thrownValue) {
+            resetHooksState();
+            request$jscomp$1.children.length = childrenLength;
+            request$jscomp$1.chunks.length = chunkLength;
+            var x$jscomp$0 =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : 12 === request.status
+                  ? request.fatalError
+                  : thrownValue;
+            if (
+              "object" === typeof x$jscomp$0 &&
+              null !== x$jscomp$0 &&
+              "function" === typeof x$jscomp$0.then
+            ) {
+              request$jscomp$1.status = 0;
+              task.thenableState = getThenableStateAfterSuspending();
+              var ping$jscomp$0 = task.ping;
+              x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+            } else {
+              var errorInfo$jscomp$0 = getThrownInfo(task.componentStack);
+              task.abortSet.delete(task);
+              request$jscomp$1.status = 4;
+              var boundary$jscomp$0 = task.blockedBoundary;
+              request$jscomp$0 = logRecoverableError(
+                request,
+                x$jscomp$0,
+                errorInfo$jscomp$0
+              );
+              null === boundary$jscomp$0
+                ? fatalError(request, x$jscomp$0)
+                : (boundary$jscomp$0.pendingTasks--,
+                  4 !== boundary$jscomp$0.status &&
+                    ((boundary$jscomp$0.status = 4),
+                    (boundary$jscomp$0.errorDigest = request$jscomp$0),
+                    untrackBoundary(request, boundary$jscomp$0),
+                    boundary$jscomp$0.parentFlushed &&
+                      request.clientRenderedBoundaries.push(boundary$jscomp$0),
+                    0 === request.pendingRootTasks &&
+                      null === request.trackedPostpones &&
+                      null !== boundary$jscomp$0.contentPreamble &&
+                      preparePreamble(request)));
+              request.allPendingTasks--;
+              0 === request.allPendingTasks && completeAll(request);
+            }
+          } finally {
+          }
+        }
+      }
+      pingedTasks.splice(0, i);
+      null !== request$jscomp$2.destination &&
+        flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination);
+    } catch (error) {
+      logRecoverableError(request$jscomp$2, error, {}),
+        fatalError(request$jscomp$2, error);
+    } finally {
+      (currentResumableState = prevResumableState),
+        (ReactSharedInternals.H = prevDispatcher),
+        (ReactSharedInternals.A = prevAsyncDispatcher),
+        prevDispatcher === HooksDispatcher && switchContext(prevContext),
+        (currentRequest = prevRequest);
+    }
+  }
+}
+function preparePreambleFromSubtree(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  segment.preambleChildren.length &&
+    collectedPreambleSegments.push(segment.preambleChildren);
+  for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+    pendingPreambles =
+      preparePreambleFromSegment(
+        request,
+        segment.children[i],
+        collectedPreambleSegments
+      ) || pendingPreambles;
+  return pendingPreambles;
+}
+function preparePreambleFromSegment(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    );
+  var preamble = boundary.contentPreamble,
+    fallbackPreamble = boundary.fallbackPreamble;
+  if (null === preamble || null === fallbackPreamble) return !1;
+  switch (boundary.status) {
+    case 1:
+      hoistPreambleState(request.renderState, preamble);
+      segment = boundary.completedSegments[0];
+      if (!segment)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      return preparePreambleFromSubtree(
+        request,
+        segment,
+        collectedPreambleSegments
+      );
+    case 5:
+      if (null !== request.trackedPostpones) return !0;
+    case 4:
+      if (1 === segment.status)
+        return (
+          hoistPreambleState(request.renderState, fallbackPreamble),
+          preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          )
+        );
+    default:
+      return !0;
+  }
+}
+function preparePreamble(request) {
+  if (
+    request.completedRootSegment &&
+    null === request.completedPreambleSegments
+  ) {
+    var collectedPreambleSegments = [],
+      hasPendingPreambles = preparePreambleFromSegment(
+        request,
+        request.completedRootSegment,
+        collectedPreambleSegments
+      ),
+      preamble = request.renderState.preamble;
+    if (
+      !1 === hasPendingPreambles ||
+      (preamble.headChunks && preamble.bodyChunks)
+    )
+      request.completedPreambleSegments = collectedPreambleSegments;
+  }
+}
+function flushSubtree(request, destination, segment, hoistableState) {
+  segment.parentFlushed = !0;
+  switch (segment.status) {
+    case 0:
+      segment.id = request.nextSegmentId++;
+    case 5:
+      return (
+        (hoistableState = segment.id),
+        (segment.lastPushedText = !1),
+        (segment.textEmbedded = !1),
+        (request = request.renderState),
+        writeChunk(destination, '<template id="'),
+        writeChunk(destination, request.placeholderPrefix),
+        (request = hoistableState.toString(16)),
+        writeChunk(destination, request),
+        !!destination.write('"></template>')
+      );
+    case 1:
+      segment.status = 2;
+      var r = !0,
+        chunks = segment.chunks,
+        chunkIdx = 0;
+      segment = segment.children;
+      for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+        for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+          writeChunk(destination, chunks[chunkIdx]);
+        r = flushSegment(request, destination, r, hoistableState);
+      }
+      for (; chunkIdx < chunks.length - 1; chunkIdx++)
+        writeChunk(destination, chunks[chunkIdx]);
+      chunkIdx < chunks.length && (r = !!destination.write(chunks[chunkIdx]));
+      return r;
+    default:
+      throw Error(
+        "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+      );
+  }
+}
+function flushSegment(request, destination, segment, hoistableState) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return flushSubtree(request, destination, segment, hoistableState);
+  boundary.parentFlushed = !0;
+  if (4 === boundary.status) {
+    var errorDigest = boundary.errorDigest;
+    destination.write("\x3c!--$!--\x3e");
+    writeChunk(destination, "<template");
+    errorDigest &&
+      (writeChunk(destination, ' data-dgst="'),
+      writeChunk(destination, escapeTextForBrowser(errorDigest)),
+      writeChunk(destination, '"'));
+    destination.write("></template>");
+    flushSubtree(request, destination, segment, hoistableState);
+    (request = boundary.fallbackPreamble) &&
+      writePreambleContribution(destination, request);
+    return !!destination.write("\x3c!--/$--\x3e");
+  }
+  if (1 !== boundary.status)
+    return (
+      0 === boundary.status &&
+        (boundary.rootSegmentID = request.nextSegmentId++),
+      0 < boundary.completedSegments.length &&
+        request.partialBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      hoistableState &&
+        ((boundary = boundary.fallbackState),
+        boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        boundary.stylesheets.forEach(
+          hoistStylesheetDependency,
+          hoistableState
+        )),
+      flushSubtree(request, destination, segment, hoistableState),
+      !!destination.write("\x3c!--/$--\x3e")
+    );
+  if (boundary.byteSize > request.progressiveChunkSize)
+    return (
+      (boundary.rootSegmentID = request.nextSegmentId++),
+      request.completedBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      flushSubtree(request, destination, segment, hoistableState),
+      !!destination.write("\x3c!--/$--\x3e")
+    );
+  hoistableState &&
+    ((segment = boundary.contentState),
+    segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+    segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+  destination.write("\x3c!--$--\x3e");
+  segment = boundary.completedSegments;
+  if (1 !== segment.length)
+    throw Error(
+      "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+    );
+  flushSegment(request, destination, segment[0], hoistableState);
+  (request = boundary.contentPreamble) &&
+    writePreambleContribution(destination, request);
+  return !!destination.write("\x3c!--/$--\x3e");
+}
+function flushSegmentContainer(request, destination, segment, hoistableState) {
+  writeStartSegment(
+    destination,
+    request.renderState,
+    segment.parentFormatContext,
+    segment.id
+  );
+  flushSegment(request, destination, segment, hoistableState);
+  return writeEndSegment(destination, segment.parentFormatContext);
+}
+function flushCompletedBoundary(request, destination, boundary) {
+  for (
+    var completedSegments = boundary.completedSegments, i = 0;
+    i < completedSegments.length;
+    i++
+  )
+    flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      completedSegments[i]
+    );
+  completedSegments.length = 0;
+  writeHoistablesForBoundary(
+    destination,
+    boundary.contentState,
+    request.renderState
+  );
+  completedSegments = request.resumableState;
+  request = request.renderState;
+  i = boundary.rootSegmentID;
+  boundary = boundary.contentState;
+  var requiresStyleInsertion = request.stylesToHoist;
+  request.stylesToHoist = !1;
+  writeChunk(destination, request.startInlineScript);
+  requiresStyleInsertion
+    ? 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 10),
+        writeChunk(
+          destination,
+          '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+        ))
+      : 0 === (completedSegments.instructions & 8)
+        ? ((completedSegments.instructions |= 8),
+          writeChunk(
+            destination,
+            '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+          ))
+        : writeChunk(destination, '$RR("')
+    : 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 2),
+        writeChunk(
+          destination,
+          '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("'
+        ))
+      : writeChunk(destination, '$RC("');
+  completedSegments = i.toString(16);
+  writeChunk(destination, request.boundaryPrefix);
+  writeChunk(destination, completedSegments);
+  writeChunk(destination, '","');
+  writeChunk(destination, request.segmentPrefix);
+  writeChunk(destination, completedSegments);
+  requiresStyleInsertion
+    ? (writeChunk(destination, '",'),
+      writeStyleResourceDependenciesInJS(destination, boundary))
+    : writeChunk(destination, '"');
+  boundary = !!destination.write(")\x3c/script>");
+  return writeBootstrap(destination, request) && boundary;
+}
+function flushPartiallyCompletedSegment(
+  request,
+  destination,
+  boundary,
+  segment
+) {
+  if (2 === segment.status) return !0;
+  var hoistableState = boundary.contentState,
+    segmentID = segment.id;
+  if (-1 === segmentID) {
+    if (-1 === (segment.id = boundary.rootSegmentID))
+      throw Error(
+        "A root segment ID must have been assigned by now. This is a bug in React."
+      );
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  }
+  if (segmentID === boundary.rootSegmentID)
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  flushSegmentContainer(request, destination, segment, hoistableState);
+  boundary = request.resumableState;
+  request = request.renderState;
+  writeChunk(destination, request.startInlineScript);
+  0 === (boundary.instructions & 1)
+    ? ((boundary.instructions |= 1),
+      writeChunk(
+        destination,
+        '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("'
+      ))
+    : writeChunk(destination, '$RS("');
+  writeChunk(destination, request.segmentPrefix);
+  segmentID = segmentID.toString(16);
+  writeChunk(destination, segmentID);
+  writeChunk(destination, '","');
+  writeChunk(destination, request.placeholderPrefix);
+  writeChunk(destination, segmentID);
+  destination = !!destination.write('")\x3c/script>');
+  return destination;
+}
+function flushCompletedQueues(request, destination) {
+  try {
+    if (!(0 < request.pendingRootTasks)) {
+      var i,
+        completedRootSegment = request.completedRootSegment;
+      if (null !== completedRootSegment) {
+        if (5 === completedRootSegment.status) return;
+        var completedPreambleSegments = request.completedPreambleSegments;
+        if (null === completedPreambleSegments) return;
+        var renderState = request.renderState,
+          preamble = renderState.preamble,
+          htmlChunks = preamble.htmlChunks,
+          headChunks = preamble.headChunks,
+          i$jscomp$0;
+        if (htmlChunks) {
+          for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+            writeChunk(destination, htmlChunks[i$jscomp$0]);
+          if (headChunks)
+            for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+              writeChunk(destination, headChunks[i$jscomp$0]);
+          else
+            writeChunk(destination, startChunkForTag("head")),
+              writeChunk(destination, ">");
+        } else if (headChunks)
+          for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+            writeChunk(destination, headChunks[i$jscomp$0]);
+        var charsetChunks = renderState.charsetChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++)
+          writeChunk(destination, charsetChunks[i$jscomp$0]);
+        charsetChunks.length = 0;
+        renderState.preconnects.forEach(flushResource, destination);
+        renderState.preconnects.clear();
+        var viewportChunks = renderState.viewportChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++)
+          writeChunk(destination, viewportChunks[i$jscomp$0]);
+        viewportChunks.length = 0;
+        renderState.fontPreloads.forEach(flushResource, destination);
+        renderState.fontPreloads.clear();
+        renderState.highImagePreloads.forEach(flushResource, destination);
+        renderState.highImagePreloads.clear();
+        renderState.styles.forEach(flushStylesInPreamble, destination);
+        var importMapChunks = renderState.importMapChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++)
+          writeChunk(destination, importMapChunks[i$jscomp$0]);
+        importMapChunks.length = 0;
+        renderState.bootstrapScripts.forEach(flushResource, destination);
+        renderState.scripts.forEach(flushResource, destination);
+        renderState.scripts.clear();
+        renderState.bulkPreloads.forEach(flushResource, destination);
+        renderState.bulkPreloads.clear();
+        var hoistableChunks = renderState.hoistableChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++)
+          writeChunk(destination, hoistableChunks[i$jscomp$0]);
+        for (
+          renderState = hoistableChunks.length = 0;
+          renderState < completedPreambleSegments.length;
+          renderState++
+        ) {
+          var segments = completedPreambleSegments[renderState];
+          for (preamble = 0; preamble < segments.length; preamble++)
+            flushSegment(request, destination, segments[preamble], null);
+        }
+        var preamble$jscomp$0 = request.renderState.preamble,
+          headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+        (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) &&
+          writeChunk(destination, endChunkForTag("head"));
+        var bodyChunks = preamble$jscomp$0.bodyChunks;
+        if (bodyChunks)
+          for (
+            completedPreambleSegments = 0;
+            completedPreambleSegments < bodyChunks.length;
+            completedPreambleSegments++
+          )
+            writeChunk(destination, bodyChunks[completedPreambleSegments]);
+        flushSegment(request, destination, completedRootSegment, null);
+        request.completedRootSegment = null;
+        writeBootstrap(destination, request.renderState);
+      }
+      var renderState$jscomp$0 = request.renderState;
+      completedRootSegment = 0;
+      var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < viewportChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, viewportChunks$jscomp$0[completedRootSegment]);
+      viewportChunks$jscomp$0.length = 0;
+      renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+      renderState$jscomp$0.preconnects.clear();
+      renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.fontPreloads.clear();
+      renderState$jscomp$0.highImagePreloads.forEach(
+        flushResource,
+        destination
+      );
+      renderState$jscomp$0.highImagePreloads.clear();
+      renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+      renderState$jscomp$0.scripts.forEach(flushResource, destination);
+      renderState$jscomp$0.scripts.clear();
+      renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.bulkPreloads.clear();
+      var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < hoistableChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, hoistableChunks$jscomp$0[completedRootSegment]);
+      hoistableChunks$jscomp$0.length = 0;
+      var clientRenderedBoundaries = request.clientRenderedBoundaries;
+      for (i = 0; i < clientRenderedBoundaries.length; i++) {
+        var boundary = clientRenderedBoundaries[i];
+        renderState$jscomp$0 = destination;
+        var resumableState = request.resumableState,
+          renderState$jscomp$1 = request.renderState,
+          id = boundary.rootSegmentID,
+          errorDigest = boundary.errorDigest;
+        writeChunk(
+          renderState$jscomp$0,
+          renderState$jscomp$1.startInlineScript
+        );
+        0 === (resumableState.instructions & 4)
+          ? ((resumableState.instructions |= 4),
+            writeChunk(
+              renderState$jscomp$0,
+              '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("'
+            ))
+          : writeChunk(renderState$jscomp$0, '$RX("');
+        writeChunk(renderState$jscomp$0, renderState$jscomp$1.boundaryPrefix);
+        writeChunk(renderState$jscomp$0, id.toString(16));
+        writeChunk(renderState$jscomp$0, '"');
+        errorDigest &&
+          (writeChunk(renderState$jscomp$0, ","),
+          writeChunk(
+            renderState$jscomp$0,
+            escapeJSStringsForInstructionScripts(errorDigest || "")
+          ));
+        var JSCompiler_inline_result =
+          !!renderState$jscomp$0.write(")\x3c/script>");
+        if (!JSCompiler_inline_result) {
+          request.destination = null;
+          i++;
+          clientRenderedBoundaries.splice(0, i);
+          return;
+        }
+      }
+      clientRenderedBoundaries.splice(0, i);
+      var completedBoundaries = request.completedBoundaries;
+      for (i = 0; i < completedBoundaries.length; i++)
+        if (
+          !flushCompletedBoundary(request, destination, completedBoundaries[i])
+        ) {
+          request.destination = null;
+          i++;
+          completedBoundaries.splice(0, i);
+          return;
+        }
+      completedBoundaries.splice(0, i);
+      var partialBoundaries = request.partialBoundaries;
+      for (i = 0; i < partialBoundaries.length; i++) {
+        var boundary$51 = partialBoundaries[i];
+        a: {
+          clientRenderedBoundaries = request;
+          boundary = destination;
+          var completedSegments = boundary$51.completedSegments;
+          for (
+            JSCompiler_inline_result = 0;
+            JSCompiler_inline_result < completedSegments.length;
+            JSCompiler_inline_result++
+          )
+            if (
+              !flushPartiallyCompletedSegment(
+                clientRenderedBoundaries,
+                boundary,
+                boundary$51,
+                completedSegments[JSCompiler_inline_result]
+              )
+            ) {
+              JSCompiler_inline_result++;
+              completedSegments.splice(0, JSCompiler_inline_result);
+              var JSCompiler_inline_result$jscomp$0 = !1;
+              break a;
+            }
+          completedSegments.splice(0, JSCompiler_inline_result);
+          JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+            boundary,
+            boundary$51.contentState,
+            clientRenderedBoundaries.renderState
+          );
+        }
+        if (!JSCompiler_inline_result$jscomp$0) {
+          request.destination = null;
+          i++;
+          partialBoundaries.splice(0, i);
+          return;
+        }
+      }
+      partialBoundaries.splice(0, i);
+      var largeBoundaries = request.completedBoundaries;
+      for (i = 0; i < largeBoundaries.length; i++)
+        if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) {
+          request.destination = null;
+          i++;
+          largeBoundaries.splice(0, i);
+          return;
+        }
+      largeBoundaries.splice(0, i);
+    }
+  } finally {
+    0 === request.allPendingTasks &&
+    0 === request.pingedTasks.length &&
+    0 === request.clientRenderedBoundaries.length &&
+    0 === request.completedBoundaries.length
+      ? ((request.flushScheduled = !1),
+        (i = request.resumableState),
+        i.hasBody && writeChunk(destination, endChunkForTag("body")),
+        i.hasHtml && writeChunk(destination, endChunkForTag("html")),
+        flushBuffered(destination),
+        (request.status = 14),
+        destination.end(),
+        (request.destination = null))
+      : flushBuffered(destination);
+  }
+}
+function startWork(request) {
+  request.flushScheduled = null !== request.destination;
+  scheduleMicrotask(function () {
+    return performWork(request);
+  });
+  setTimeout(function () {
+    10 === request.status && (request.status = 11);
+    null === request.trackedPostpones &&
+      safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+  }, 0);
+}
+function enqueueFlush(request) {
+  !1 === request.flushScheduled &&
+    0 === request.pingedTasks.length &&
+    null !== request.destination &&
+    ((request.flushScheduled = !0),
+    setTimeout(function () {
+      var destination = request.destination;
+      destination
+        ? flushCompletedQueues(request, destination)
+        : (request.flushScheduled = !1);
+    }, 0));
+}
+function abort(request, reason) {
+  if (11 === request.status || 10 === request.status) request.status = 12;
+  try {
+    var abortableTasks = request.abortableTasks;
+    if (0 < abortableTasks.size) {
+      var error =
+        void 0 === reason
+          ? Error("The render was aborted by the server without a reason.")
+          : "object" === typeof reason &&
+              null !== reason &&
+              "function" === typeof reason.then
+            ? Error("The render was aborted by the server with a promise.")
+            : reason;
+      request.fatalError = error;
+      abortableTasks.forEach(function (task) {
+        return abortTask(task, request, error);
+      });
+      abortableTasks.clear();
+    }
+    null !== request.destination &&
+      flushCompletedQueues(request, request.destination);
+  } catch (error$53) {
+    logRecoverableError(request, error$53, {}), fatalError(request, error$53);
+  }
+}
+var isomorphicReactPackageVersion$jscomp$inline_761 = React.version;
+if (
+  "19.1.1" !==
+  isomorphicReactPackageVersion$jscomp$inline_761
+)
+  throw Error(
+    'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n  - react:      ' +
+      (isomorphicReactPackageVersion$jscomp$inline_761 +
+        "\n  - react-dom:  19.1.1\nLearn more: https://react.dev/warnings/version-mismatch")
+  );
+exports.renderToReadableStream = function (children, options) {
+  return new Promise(function (resolve, reject) {
+    var onFatalError,
+      onAllReady,
+      allReady = new Promise(function (res, rej) {
+        onAllReady = res;
+        onFatalError = rej;
+      }),
+      onHeaders = options ? options.onHeaders : void 0,
+      onHeadersImpl;
+    onHeaders &&
+      (onHeadersImpl = function (headersDescriptor) {
+        onHeaders(new Headers(headersDescriptor));
+      });
+    var resumableState = createResumableState(
+        options ? options.identifierPrefix : void 0,
+        options ? options.unstable_externalRuntimeSrc : void 0,
+        options ? options.bootstrapScriptContent : void 0,
+        options ? options.bootstrapScripts : void 0,
+        options ? options.bootstrapModules : void 0
+      ),
+      request = createRequest(
+        children,
+        resumableState,
+        createRenderState(
+          resumableState,
+          options ? options.nonce : void 0,
+          options ? options.unstable_externalRuntimeSrc : void 0,
+          options ? options.importMap : void 0,
+          onHeadersImpl,
+          options ? options.maxHeadersLength : void 0
+        ),
+        createRootFormatContext(options ? options.namespaceURI : void 0),
+        options ? options.progressiveChunkSize : void 0,
+        options ? options.onError : void 0,
+        onAllReady,
+        function () {
+          var stream = new ReadableStream(
+            {
+              type: "direct",
+              pull: function (controller) {
+                if (13 === request.status)
+                  (request.status = 14),
+                    closeWithError(controller, request.fatalError);
+                else if (
+                  14 !== request.status &&
+                  null === request.destination
+                ) {
+                  request.destination = controller;
+                  try {
+                    flushCompletedQueues(request, controller);
+                  } catch (error) {
+                    logRecoverableError(request, error, {}),
+                      fatalError(request, error);
+                  }
+                }
+              },
+              cancel: function (reason) {
+                request.destination = null;
+                abort(request, reason);
+              }
+            },
+            { highWaterMark: 2048 }
+          );
+          stream.allReady = allReady;
+          resolve(stream);
+        },
+        function (error) {
+          allReady.catch(function () {});
+          reject(error);
+        },
+        onFatalError,
+        options ? options.onPostpone : void 0,
+        options ? options.formState : void 0
+      );
+    if (options && options.signal) {
+      var signal = options.signal;
+      if (signal.aborted) abort(request, signal.reason);
+      else {
+        var listener = function () {
+          abort(request, signal.reason);
+          signal.removeEventListener("abort", listener);
+        };
+        signal.addEventListener("abort", listener);
+      }
+    }
+    startWork(request);
+  });
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/cjs/react-dom-server.edge.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server.edge.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server.edge.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9443 @@
+/**
+ * @license React
+ * react-dom-server.edge.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+
+
+ JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
+
+ Copyright (c) 2011 Gary Court
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function styleReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+    }
+    function scriptReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+    }
+    function objectName(object) {
+      return Object.prototype.toString
+        .call(object)
+        .replace(/^\[object (.*)\]$/, function (m, p0) {
+          return p0;
+        });
+    }
+    function describeKeyForErrorMessage(key) {
+      var encodedKey = JSON.stringify(key);
+      return '"' + key + '"' === encodedKey ? key : encodedKey;
+    }
+    function describeValueForErrorMessage(value) {
+      switch (typeof value) {
+        case "string":
+          return JSON.stringify(
+            10 >= value.length ? value : value.slice(0, 10) + "..."
+          );
+        case "object":
+          if (isArrayImpl(value)) return "[...]";
+          if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG)
+            return "client";
+          value = objectName(value);
+          return "Object" === value ? "{...}" : value;
+        case "function":
+          return value.$$typeof === CLIENT_REFERENCE_TAG
+            ? "client"
+            : (value = value.displayName || value.name)
+              ? "function " + value
+              : "function";
+        default:
+          return String(value);
+      }
+    }
+    function describeElementType(type) {
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+      }
+      if ("object" === typeof type)
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeElementType(type.render);
+          case REACT_MEMO_TYPE:
+            return describeElementType(type.type);
+          case REACT_LAZY_TYPE:
+            var payload = type._payload;
+            type = type._init;
+            try {
+              return describeElementType(type(payload));
+            } catch (x) {}
+        }
+      return "";
+    }
+    function describeObjectForErrorMessage(objectOrArray, expandedName) {
+      var objKind = objectName(objectOrArray);
+      if ("Object" !== objKind && "Array" !== objKind) return objKind;
+      var start = -1,
+        length = 0;
+      if (isArrayImpl(objectOrArray))
+        if (jsxChildrenParents.has(objectOrArray)) {
+          var type = jsxChildrenParents.get(objectOrArray);
+          objKind = "<" + describeElementType(type) + ">";
+          for (var i = 0; i < objectOrArray.length; i++) {
+            var value = objectOrArray[i];
+            value =
+              "string" === typeof value
+                ? value
+                : "object" === typeof value && null !== value
+                  ? "{" + describeObjectForErrorMessage(value) + "}"
+                  : "{" + describeValueForErrorMessage(value) + "}";
+            "" + i === expandedName
+              ? ((start = objKind.length),
+                (length = value.length),
+                (objKind += value))
+              : (objKind =
+                  15 > value.length && 40 > objKind.length + value.length
+                    ? objKind + value
+                    : objKind + "{...}");
+          }
+          objKind += "</" + describeElementType(type) + ">";
+        } else {
+          objKind = "[";
+          for (type = 0; type < objectOrArray.length; type++)
+            0 < type && (objKind += ", "),
+              (i = objectOrArray[type]),
+              (i =
+                "object" === typeof i && null !== i
+                  ? describeObjectForErrorMessage(i)
+                  : describeValueForErrorMessage(i)),
+              "" + type === expandedName
+                ? ((start = objKind.length),
+                  (length = i.length),
+                  (objKind += i))
+                : (objKind =
+                    10 > i.length && 40 > objKind.length + i.length
+                      ? objKind + i
+                      : objKind + "...");
+          objKind += "]";
+        }
+      else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE)
+        objKind = "<" + describeElementType(objectOrArray.type) + "/>";
+      else {
+        if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return "client";
+        if (jsxPropsParents.has(objectOrArray)) {
+          objKind = jsxPropsParents.get(objectOrArray);
+          objKind = "<" + (describeElementType(objKind) || "...");
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++) {
+            objKind += " ";
+            value = type[i];
+            objKind += describeKeyForErrorMessage(value) + "=";
+            var _value2 = objectOrArray[value];
+            var _substr2 =
+              value === expandedName &&
+              "object" === typeof _value2 &&
+              null !== _value2
+                ? describeObjectForErrorMessage(_value2)
+                : describeValueForErrorMessage(_value2);
+            "string" !== typeof _value2 && (_substr2 = "{" + _substr2 + "}");
+            value === expandedName
+              ? ((start = objKind.length),
+                (length = _substr2.length),
+                (objKind += _substr2))
+              : (objKind =
+                  10 > _substr2.length && 40 > objKind.length + _substr2.length
+                    ? objKind + _substr2
+                    : objKind + "...");
+          }
+          objKind += ">";
+        } else {
+          objKind = "{";
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++)
+            0 < i && (objKind += ", "),
+              (value = type[i]),
+              (objKind += describeKeyForErrorMessage(value) + ": "),
+              (_value2 = objectOrArray[value]),
+              (_value2 =
+                "object" === typeof _value2 && null !== _value2
+                  ? describeObjectForErrorMessage(_value2)
+                  : describeValueForErrorMessage(_value2)),
+              value === expandedName
+                ? ((start = objKind.length),
+                  (length = _value2.length),
+                  (objKind += _value2))
+                : (objKind =
+                    10 > _value2.length && 40 > objKind.length + _value2.length
+                      ? objKind + _value2
+                      : objKind + "...");
+          objKind += "}";
+        }
+      }
+      return void 0 === expandedName
+        ? objKind
+        : -1 < start && 0 < length
+          ? ((objectOrArray = " ".repeat(start) + "^".repeat(length)),
+            "\n  " + objKind + "\n  " + objectOrArray)
+          : "\n  " + objKind;
+    }
+    function murmurhash3_32_gc(key, seed) {
+      var remainder = key.length & 3;
+      var bytes = key.length - remainder;
+      var h1 = seed;
+      for (seed = 0; seed < bytes; ) {
+        var k1 =
+          (key.charCodeAt(seed) & 255) |
+          ((key.charCodeAt(++seed) & 255) << 8) |
+          ((key.charCodeAt(++seed) & 255) << 16) |
+          ((key.charCodeAt(++seed) & 255) << 24);
+        ++seed;
+        k1 =
+          (3432918353 * (k1 & 65535) +
+            (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295;
+        k1 = (k1 << 15) | (k1 >>> 17);
+        k1 =
+          (461845907 * (k1 & 65535) +
+            (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295;
+        h1 ^= k1;
+        h1 = (h1 << 13) | (h1 >>> 19);
+        h1 =
+          (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295;
+        h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16);
+      }
+      k1 = 0;
+      switch (remainder) {
+        case 3:
+          k1 ^= (key.charCodeAt(seed + 2) & 255) << 16;
+        case 2:
+          k1 ^= (key.charCodeAt(seed + 1) & 255) << 8;
+        case 1:
+          (k1 ^= key.charCodeAt(seed) & 255),
+            (k1 =
+              (3432918353 * (k1 & 65535) +
+                (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+              4294967295),
+            (k1 = (k1 << 15) | (k1 >>> 17)),
+            (h1 ^=
+              (461845907 * (k1 & 65535) +
+                (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+              4294967295);
+      }
+      h1 ^= key.length;
+      h1 ^= h1 >>> 16;
+      h1 =
+        (2246822507 * (h1 & 65535) +
+          (((2246822507 * (h1 >>> 16)) & 65535) << 16)) &
+        4294967295;
+      h1 ^= h1 >>> 13;
+      h1 =
+        (3266489909 * (h1 & 65535) +
+          (((3266489909 * (h1 >>> 16)) & 65535) << 16)) &
+        4294967295;
+      return (h1 ^ (h1 >>> 16)) >>> 0;
+    }
+    function handleErrorInNextTick(error) {
+      setTimeout(function () {
+        throw error;
+      });
+    }
+    function writeChunk(destination, chunk) {
+      if (0 !== chunk.byteLength)
+        if (2048 < chunk.byteLength)
+          0 < writtenBytes &&
+            (destination.enqueue(
+              new Uint8Array(currentView.buffer, 0, writtenBytes)
+            ),
+            (currentView = new Uint8Array(2048)),
+            (writtenBytes = 0)),
+            destination.enqueue(chunk);
+        else {
+          var allowableBytes = currentView.length - writtenBytes;
+          allowableBytes < chunk.byteLength &&
+            (0 === allowableBytes
+              ? destination.enqueue(currentView)
+              : (currentView.set(
+                  chunk.subarray(0, allowableBytes),
+                  writtenBytes
+                ),
+                destination.enqueue(currentView),
+                (chunk = chunk.subarray(allowableBytes))),
+            (currentView = new Uint8Array(2048)),
+            (writtenBytes = 0));
+          currentView.set(chunk, writtenBytes);
+          writtenBytes += chunk.byteLength;
+        }
+    }
+    function writeChunkAndReturn(destination, chunk) {
+      writeChunk(destination, chunk);
+      return !0;
+    }
+    function completeWriting(destination) {
+      currentView &&
+        0 < writtenBytes &&
+        (destination.enqueue(
+          new Uint8Array(currentView.buffer, 0, writtenBytes)
+        ),
+        (currentView = null),
+        (writtenBytes = 0));
+    }
+    function stringToChunk(content) {
+      return textEncoder.encode(content);
+    }
+    function stringToPrecomputedChunk(content) {
+      content = textEncoder.encode(content);
+      2048 < content.byteLength &&
+        console.error(
+          "precomputed chunks must be smaller than the view size configured for this host. This is a bug in React."
+        );
+      return content;
+    }
+    function closeWithError(destination, error) {
+      "function" === typeof destination.error
+        ? destination.error(error)
+        : destination.close();
+    }
+    function typeName(value) {
+      return (
+        ("function" === typeof Symbol &&
+          Symbol.toStringTag &&
+          value[Symbol.toStringTag]) ||
+        value.constructor.name ||
+        "Object"
+      );
+    }
+    function willCoercionThrow(value) {
+      try {
+        return testStringCoercion(value), !1;
+      } catch (e) {
+        return !0;
+      }
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkAttributeStringCoercion(value, attributeName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",
+            attributeName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkCSSPropertyStringCoercion(value, propName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",
+            propName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkHtmlStringCoercion(value) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.",
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function isAttributeNameSafe(attributeName) {
+      if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+        return !0;
+      if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))
+        return !1;
+      if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+        return (validatedAttributeNameCache[attributeName] = !0);
+      illegalAttributeNameCache[attributeName] = !0;
+      console.error("Invalid attribute name: `%s`", attributeName);
+      return !1;
+    }
+    function checkControlledValueProps(tagName, props) {
+      hasReadOnlyValue[props.type] ||
+        props.onChange ||
+        props.onInput ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.value ||
+        ("select" === tagName
+          ? console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`."
+            )
+          : console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."
+            ));
+      props.onChange ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.checked ||
+        console.error(
+          "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`."
+        );
+    }
+    function validateProperty$1(tagName, name) {
+      if (
+        hasOwnProperty.call(warnedProperties$1, name) &&
+        warnedProperties$1[name]
+      )
+        return !0;
+      if (rARIACamel$1.test(name)) {
+        tagName = "aria-" + name.slice(4).toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.",
+              name
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+        if (name !== tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. Did you mean `%s`?",
+              name,
+              tagName
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+      }
+      if (rARIA$1.test(name)) {
+        tagName = name.toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName) return (warnedProperties$1[name] = !0), !1;
+        name !== tagName &&
+          (console.error(
+            "Unknown ARIA attribute `%s`. Did you mean `%s`?",
+            name,
+            tagName
+          ),
+          (warnedProperties$1[name] = !0));
+      }
+      return !0;
+    }
+    function validateProperties$2(type, props) {
+      var invalidProps = [],
+        key;
+      for (key in props)
+        validateProperty$1(type, key) || invalidProps.push(key);
+      props = invalidProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === invalidProps.length
+        ? console.error(
+            "Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          )
+        : 1 < invalidProps.length &&
+          console.error(
+            "Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          );
+    }
+    function validateProperty(tagName, name, value, eventRegistry) {
+      if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])
+        return !0;
+      var lowerCasedName = name.toLowerCase();
+      if ("onfocusin" === lowerCasedName || "onfocusout" === lowerCasedName)
+        return (
+          console.error(
+            "React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "function" === typeof value &&
+        (("form" === tagName && "action" === name) ||
+          ("input" === tagName && "formAction" === name) ||
+          ("button" === tagName && "formAction" === name))
+      )
+        return !0;
+      if (null != eventRegistry) {
+        tagName = eventRegistry.possibleRegistrationNames;
+        if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))
+          return !0;
+        eventRegistry = tagName.hasOwnProperty(lowerCasedName)
+          ? tagName[lowerCasedName]
+          : null;
+        if (null != eventRegistry)
+          return (
+            console.error(
+              "Invalid event handler property `%s`. Did you mean `%s`?",
+              name,
+              eventRegistry
+            ),
+            (warnedProperties[name] = !0)
+          );
+        if (EVENT_NAME_REGEX.test(name))
+          return (
+            console.error(
+              "Unknown event handler property `%s`. It will be ignored.",
+              name
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (EVENT_NAME_REGEX.test(name))
+        return (
+          INVALID_EVENT_NAME_REGEX.test(name) &&
+            console.error(
+              "Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.",
+              name
+            ),
+          (warnedProperties[name] = !0)
+        );
+      if (rARIA.test(name) || rARIACamel.test(name)) return !0;
+      if ("innerhtml" === lowerCasedName)
+        return (
+          console.error(
+            "Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("aria" === lowerCasedName)
+        return (
+          console.error(
+            "The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "is" === lowerCasedName &&
+        null !== value &&
+        void 0 !== value &&
+        "string" !== typeof value
+      )
+        return (
+          console.error(
+            "Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.",
+            typeof value
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("number" === typeof value && isNaN(value))
+        return (
+          console.error(
+            "Received NaN for the `%s` attribute. If this is expected, cast the value to a string.",
+            name
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
+        if (
+          ((lowerCasedName = possibleStandardNames[lowerCasedName]),
+          lowerCasedName !== name)
+        )
+          return (
+            console.error(
+              "Invalid DOM property `%s`. Did you mean `%s`?",
+              name,
+              lowerCasedName
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (name !== lowerCasedName)
+        return (
+          console.error(
+            "React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.",
+            name,
+            lowerCasedName
+          ),
+          (warnedProperties[name] = !0)
+        );
+      switch (name) {
+        case "dangerouslySetInnerHTML":
+        case "children":
+        case "style":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "ref":
+          return !0;
+        case "innerText":
+        case "textContent":
+          return !0;
+      }
+      switch (typeof value) {
+        case "boolean":
+          switch (name) {
+            case "autoFocus":
+            case "checked":
+            case "multiple":
+            case "muted":
+            case "selected":
+            case "contentEditable":
+            case "spellCheck":
+            case "draggable":
+            case "value":
+            case "autoReverse":
+            case "externalResourcesRequired":
+            case "focusable":
+            case "preserveAlpha":
+            case "allowFullScreen":
+            case "async":
+            case "autoPlay":
+            case "controls":
+            case "default":
+            case "defer":
+            case "disabled":
+            case "disablePictureInPicture":
+            case "disableRemotePlayback":
+            case "formNoValidate":
+            case "hidden":
+            case "loop":
+            case "noModule":
+            case "noValidate":
+            case "open":
+            case "playsInline":
+            case "readOnly":
+            case "required":
+            case "reversed":
+            case "scoped":
+            case "seamless":
+            case "itemScope":
+            case "capture":
+            case "download":
+            case "inert":
+              return !0;
+            default:
+              lowerCasedName = name.toLowerCase().slice(0, 5);
+              if ("data-" === lowerCasedName || "aria-" === lowerCasedName)
+                return !0;
+              value
+                ? console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name
+                  )
+                : console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name,
+                    name,
+                    name
+                  );
+              return (warnedProperties[name] = !0);
+          }
+        case "function":
+        case "symbol":
+          return (warnedProperties[name] = !0), !1;
+        case "string":
+          if ("false" === value || "true" === value) {
+            switch (name) {
+              case "checked":
+              case "selected":
+              case "multiple":
+              case "muted":
+              case "allowFullScreen":
+              case "async":
+              case "autoPlay":
+              case "controls":
+              case "default":
+              case "defer":
+              case "disabled":
+              case "disablePictureInPicture":
+              case "disableRemotePlayback":
+              case "formNoValidate":
+              case "hidden":
+              case "loop":
+              case "noModule":
+              case "noValidate":
+              case "open":
+              case "playsInline":
+              case "readOnly":
+              case "required":
+              case "reversed":
+              case "scoped":
+              case "seamless":
+              case "itemScope":
+              case "inert":
+                break;
+              default:
+                return !0;
+            }
+            console.error(
+              "Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?",
+              value,
+              name,
+              "false" === value
+                ? "The browser will interpret it as a truthy value."
+                : 'Although this works, it will not work as expected if you pass the string "false".',
+              name,
+              value
+            );
+            warnedProperties[name] = !0;
+          }
+      }
+      return !0;
+    }
+    function warnUnknownProperties(type, props, eventRegistry) {
+      var unknownProps = [],
+        key;
+      for (key in props)
+        validateProperty(type, key, props[key], eventRegistry) ||
+          unknownProps.push(key);
+      props = unknownProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === unknownProps.length
+        ? console.error(
+            "Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          )
+        : 1 < unknownProps.length &&
+          console.error(
+            "Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          );
+    }
+    function camelize(string) {
+      return string.replace(hyphenPattern, function (_, character) {
+        return character.toUpperCase();
+      });
+    }
+    function escapeTextForBrowser(text) {
+      if (
+        "boolean" === typeof text ||
+        "number" === typeof text ||
+        "bigint" === typeof text
+      )
+        return "" + text;
+      checkHtmlStringCoercion(text);
+      text = "" + text;
+      var match = matchHtmlRegExp.exec(text);
+      if (match) {
+        var html = "",
+          index,
+          lastIndex = 0;
+        for (index = match.index; index < text.length; index++) {
+          switch (text.charCodeAt(index)) {
+            case 34:
+              match = "&quot;";
+              break;
+            case 38:
+              match = "&amp;";
+              break;
+            case 39:
+              match = "&#x27;";
+              break;
+            case 60:
+              match = "&lt;";
+              break;
+            case 62:
+              match = "&gt;";
+              break;
+            default:
+              continue;
+          }
+          lastIndex !== index && (html += text.slice(lastIndex, index));
+          lastIndex = index + 1;
+          html += match;
+        }
+        text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+      }
+      return text;
+    }
+    function sanitizeURL(url) {
+      return isJavaScriptProtocol.test("" + url)
+        ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+        : url;
+    }
+    function escapeEntireInlineScriptContent(scriptText) {
+      checkHtmlStringCoercion(scriptText);
+      return ("" + scriptText).replace(scriptRegex, scriptReplacer);
+    }
+    function createRenderState(
+      resumableState,
+      nonce,
+      externalRuntimeConfig,
+      importMap,
+      onHeaders,
+      maxHeadersLength
+    ) {
+      var inlineScriptWithNonce =
+          void 0 === nonce
+            ? startInlineScript
+            : stringToPrecomputedChunk(
+                '<script nonce="' + escapeTextForBrowser(nonce) + '">'
+              ),
+        idPrefix = resumableState.idPrefix;
+      externalRuntimeConfig = [];
+      var bootstrapScriptContent = resumableState.bootstrapScriptContent,
+        bootstrapScripts = resumableState.bootstrapScripts,
+        bootstrapModules = resumableState.bootstrapModules;
+      void 0 !== bootstrapScriptContent &&
+        externalRuntimeConfig.push(
+          inlineScriptWithNonce,
+          stringToChunk(
+            escapeEntireInlineScriptContent(bootstrapScriptContent)
+          ),
+          endInlineScript
+        );
+      bootstrapScriptContent = [];
+      void 0 !== importMap &&
+        (bootstrapScriptContent.push(importMapScriptStart),
+        bootstrapScriptContent.push(
+          stringToChunk(
+            escapeEntireInlineScriptContent(JSON.stringify(importMap))
+          )
+        ),
+        bootstrapScriptContent.push(importMapScriptEnd));
+      onHeaders &&
+        "number" === typeof maxHeadersLength &&
+        0 >= maxHeadersLength &&
+        console.error(
+          "React expected a positive non-zero `maxHeadersLength` option but found %s instead. When using the `onHeaders` option you may supply an optional `maxHeadersLength` option as well however, when setting this value to zero or less no headers will be captured.",
+          0 === maxHeadersLength ? "zero" : maxHeadersLength
+        );
+      importMap = onHeaders
+        ? {
+            preconnects: "",
+            fontPreloads: "",
+            highImagePreloads: "",
+            remainingCapacity:
+              2 +
+              ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3)
+          }
+        : null;
+      onHeaders = {
+        placeholderPrefix: stringToPrecomputedChunk(idPrefix + "P:"),
+        segmentPrefix: stringToPrecomputedChunk(idPrefix + "S:"),
+        boundaryPrefix: stringToPrecomputedChunk(idPrefix + "B:"),
+        startInlineScript: inlineScriptWithNonce,
+        preamble: createPreambleState(),
+        externalRuntimeScript: null,
+        bootstrapChunks: externalRuntimeConfig,
+        importMapChunks: bootstrapScriptContent,
+        onHeaders: onHeaders,
+        headers: importMap,
+        resets: {
+          font: {},
+          dns: {},
+          connect: { default: {}, anonymous: {}, credentials: {} },
+          image: {},
+          style: {}
+        },
+        charsetChunks: [],
+        viewportChunks: [],
+        hoistableChunks: [],
+        preconnects: new Set(),
+        fontPreloads: new Set(),
+        highImagePreloads: new Set(),
+        styles: new Map(),
+        bootstrapScripts: new Set(),
+        scripts: new Set(),
+        bulkPreloads: new Set(),
+        preloads: {
+          images: new Map(),
+          stylesheets: new Map(),
+          scripts: new Map(),
+          moduleScripts: new Map()
+        },
+        nonce: nonce,
+        hoistableState: null,
+        stylesToHoist: !1
+      };
+      if (void 0 !== bootstrapScripts)
+        for (importMap = 0; importMap < bootstrapScripts.length; importMap++) {
+          maxHeadersLength = bootstrapScripts[importMap];
+          bootstrapScriptContent = idPrefix = void 0;
+          var props = {
+            rel: "preload",
+            as: "script",
+            fetchPriority: "low",
+            nonce: nonce
+          };
+          "string" === typeof maxHeadersLength
+            ? (props.href = inlineScriptWithNonce = maxHeadersLength)
+            : ((props.href = inlineScriptWithNonce = maxHeadersLength.src),
+              (props.integrity = bootstrapScriptContent =
+                "string" === typeof maxHeadersLength.integrity
+                  ? maxHeadersLength.integrity
+                  : void 0),
+              (props.crossOrigin = idPrefix =
+                "string" === typeof maxHeadersLength ||
+                null == maxHeadersLength.crossOrigin
+                  ? void 0
+                  : "use-credentials" === maxHeadersLength.crossOrigin
+                    ? "use-credentials"
+                    : ""));
+          preloadBootstrapScriptOrModule(
+            resumableState,
+            onHeaders,
+            inlineScriptWithNonce,
+            props
+          );
+          externalRuntimeConfig.push(
+            startScriptSrc,
+            stringToChunk(escapeTextForBrowser(inlineScriptWithNonce))
+          );
+          nonce &&
+            externalRuntimeConfig.push(
+              scriptNonce,
+              stringToChunk(escapeTextForBrowser(nonce))
+            );
+          "string" === typeof bootstrapScriptContent &&
+            externalRuntimeConfig.push(
+              scriptIntegirty,
+              stringToChunk(escapeTextForBrowser(bootstrapScriptContent))
+            );
+          "string" === typeof idPrefix &&
+            externalRuntimeConfig.push(
+              scriptCrossOrigin,
+              stringToChunk(escapeTextForBrowser(idPrefix))
+            );
+          externalRuntimeConfig.push(endAsyncScript);
+        }
+      if (void 0 !== bootstrapModules)
+        for (
+          bootstrapScripts = 0;
+          bootstrapScripts < bootstrapModules.length;
+          bootstrapScripts++
+        )
+          (importMap = bootstrapModules[bootstrapScripts]),
+            (idPrefix = inlineScriptWithNonce = void 0),
+            (bootstrapScriptContent = {
+              rel: "modulepreload",
+              fetchPriority: "low",
+              nonce: nonce
+            }),
+            "string" === typeof importMap
+              ? (bootstrapScriptContent.href = maxHeadersLength = importMap)
+              : ((bootstrapScriptContent.href = maxHeadersLength =
+                  importMap.src),
+                (bootstrapScriptContent.integrity = idPrefix =
+                  "string" === typeof importMap.integrity
+                    ? importMap.integrity
+                    : void 0),
+                (bootstrapScriptContent.crossOrigin = inlineScriptWithNonce =
+                  "string" === typeof importMap || null == importMap.crossOrigin
+                    ? void 0
+                    : "use-credentials" === importMap.crossOrigin
+                      ? "use-credentials"
+                      : "")),
+            preloadBootstrapScriptOrModule(
+              resumableState,
+              onHeaders,
+              maxHeadersLength,
+              bootstrapScriptContent
+            ),
+            externalRuntimeConfig.push(
+              startModuleSrc,
+              stringToChunk(escapeTextForBrowser(maxHeadersLength))
+            ),
+            nonce &&
+              externalRuntimeConfig.push(
+                scriptNonce,
+                stringToChunk(escapeTextForBrowser(nonce))
+              ),
+            "string" === typeof idPrefix &&
+              externalRuntimeConfig.push(
+                scriptIntegirty,
+                stringToChunk(escapeTextForBrowser(idPrefix))
+              ),
+            "string" === typeof inlineScriptWithNonce &&
+              externalRuntimeConfig.push(
+                scriptCrossOrigin,
+                stringToChunk(escapeTextForBrowser(inlineScriptWithNonce))
+              ),
+            externalRuntimeConfig.push(endAsyncScript);
+      return onHeaders;
+    }
+    function createResumableState(
+      identifierPrefix,
+      externalRuntimeConfig,
+      bootstrapScriptContent,
+      bootstrapScripts,
+      bootstrapModules
+    ) {
+      return {
+        idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+        nextFormID: 0,
+        streamingFormat: 0,
+        bootstrapScriptContent: bootstrapScriptContent,
+        bootstrapScripts: bootstrapScripts,
+        bootstrapModules: bootstrapModules,
+        instructions: NothingSent,
+        hasBody: !1,
+        hasHtml: !1,
+        unknownResources: {},
+        dnsResources: {},
+        connectResources: { default: {}, anonymous: {}, credentials: {} },
+        imageResources: {},
+        styleResources: {},
+        scriptResources: {},
+        moduleUnknownResources: {},
+        moduleScriptResources: {}
+      };
+    }
+    function createPreambleState() {
+      return {
+        htmlChunks: null,
+        headChunks: null,
+        bodyChunks: null,
+        contribution: NoContribution
+      };
+    }
+    function createFormatContext(insertionMode, selectedValue, tagScope) {
+      return {
+        insertionMode: insertionMode,
+        selectedValue: selectedValue,
+        tagScope: tagScope
+      };
+    }
+    function createRootFormatContext(namespaceURI) {
+      return createFormatContext(
+        "http://www.w3.org/2000/svg" === namespaceURI
+          ? SVG_MODE
+          : "http://www.w3.org/1998/Math/MathML" === namespaceURI
+            ? MATHML_MODE
+            : ROOT_HTML_MODE,
+        null,
+        0
+      );
+    }
+    function getChildFormatContext(parentContext, type, props) {
+      switch (type) {
+        case "noscript":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 1
+          );
+        case "select":
+          return createFormatContext(
+            HTML_MODE,
+            null != props.value ? props.value : props.defaultValue,
+            parentContext.tagScope
+          );
+        case "svg":
+          return createFormatContext(SVG_MODE, null, parentContext.tagScope);
+        case "picture":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 2
+          );
+        case "math":
+          return createFormatContext(MATHML_MODE, null, parentContext.tagScope);
+        case "foreignObject":
+          return createFormatContext(HTML_MODE, null, parentContext.tagScope);
+        case "table":
+          return createFormatContext(
+            HTML_TABLE_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "thead":
+        case "tbody":
+        case "tfoot":
+          return createFormatContext(
+            HTML_TABLE_BODY_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "colgroup":
+          return createFormatContext(
+            HTML_COLGROUP_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "tr":
+          return createFormatContext(
+            HTML_TABLE_ROW_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "head":
+          if (parentContext.insertionMode < HTML_MODE)
+            return createFormatContext(
+              HTML_HEAD_MODE,
+              null,
+              parentContext.tagScope
+            );
+          break;
+        case "html":
+          if (parentContext.insertionMode === ROOT_HTML_MODE)
+            return createFormatContext(
+              HTML_HTML_MODE,
+              null,
+              parentContext.tagScope
+            );
+      }
+      return parentContext.insertionMode >= HTML_TABLE_MODE ||
+        parentContext.insertionMode < HTML_MODE
+        ? createFormatContext(HTML_MODE, null, parentContext.tagScope)
+        : parentContext;
+    }
+    function pushTextInstance(target, text, renderState, textEmbedded) {
+      if ("" === text) return textEmbedded;
+      textEmbedded && target.push(textSeparator);
+      target.push(stringToChunk(escapeTextForBrowser(text)));
+      return !0;
+    }
+    function pushStyleAttribute(target, style) {
+      if ("object" !== typeof style)
+        throw Error(
+          "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+        );
+      var isFirst = !0,
+        styleName;
+      for (styleName in style)
+        if (hasOwnProperty.call(style, styleName)) {
+          var styleValue = style[styleName];
+          if (
+            null != styleValue &&
+            "boolean" !== typeof styleValue &&
+            "" !== styleValue
+          ) {
+            if (0 === styleName.indexOf("--")) {
+              var nameChunk = stringToChunk(escapeTextForBrowser(styleName));
+              checkCSSPropertyStringCoercion(styleValue, styleName);
+              styleValue = stringToChunk(
+                escapeTextForBrowser(("" + styleValue).trim())
+              );
+            } else {
+              nameChunk = styleName;
+              var value = styleValue;
+              if (-1 < nameChunk.indexOf("-")) {
+                var name = nameChunk;
+                (warnedStyleNames.hasOwnProperty(name) &&
+                  warnedStyleNames[name]) ||
+                  ((warnedStyleNames[name] = !0),
+                  console.error(
+                    "Unsupported style property %s. Did you mean %s?",
+                    name,
+                    camelize(name.replace(msPattern$1, "ms-"))
+                  ));
+              } else if (badVendoredStyleNamePattern.test(nameChunk))
+                (name = nameChunk),
+                  (warnedStyleNames.hasOwnProperty(name) &&
+                    warnedStyleNames[name]) ||
+                    ((warnedStyleNames[name] = !0),
+                    console.error(
+                      "Unsupported vendor-prefixed style property %s. Did you mean %s?",
+                      name,
+                      name.charAt(0).toUpperCase() + name.slice(1)
+                    ));
+              else if (badStyleValueWithSemicolonPattern.test(value)) {
+                name = nameChunk;
+                var value$jscomp$0 = value;
+                (warnedStyleValues.hasOwnProperty(value$jscomp$0) &&
+                  warnedStyleValues[value$jscomp$0]) ||
+                  ((warnedStyleValues[value$jscomp$0] = !0),
+                  console.error(
+                    'Style property values shouldn\'t contain a semicolon. Try "%s: %s" instead.',
+                    name,
+                    value$jscomp$0.replace(
+                      badStyleValueWithSemicolonPattern,
+                      ""
+                    )
+                  ));
+              }
+              "number" === typeof value &&
+                (isNaN(value)
+                  ? warnedForNaNValue ||
+                    ((warnedForNaNValue = !0),
+                    console.error(
+                      "`NaN` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    ))
+                  : isFinite(value) ||
+                    warnedForInfinityValue ||
+                    ((warnedForInfinityValue = !0),
+                    console.error(
+                      "`Infinity` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    )));
+              nameChunk = styleName;
+              value = styleNameCache.get(nameChunk);
+              void 0 !== value
+                ? (nameChunk = value)
+                : ((value = stringToPrecomputedChunk(
+                    escapeTextForBrowser(
+                      nameChunk
+                        .replace(uppercasePattern, "-$1")
+                        .toLowerCase()
+                        .replace(msPattern, "-ms-")
+                    )
+                  )),
+                  styleNameCache.set(nameChunk, value),
+                  (nameChunk = value));
+              "number" === typeof styleValue
+                ? (styleValue =
+                    0 === styleValue || unitlessNumbers.has(styleName)
+                      ? stringToChunk("" + styleValue)
+                      : stringToChunk(styleValue + "px"))
+                : (checkCSSPropertyStringCoercion(styleValue, styleName),
+                  (styleValue = stringToChunk(
+                    escapeTextForBrowser(("" + styleValue).trim())
+                  )));
+            }
+            isFirst
+              ? ((isFirst = !1),
+                target.push(
+                  styleAttributeStart,
+                  nameChunk,
+                  styleAssign,
+                  styleValue
+                ))
+              : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+          }
+        }
+      isFirst || target.push(attributeEnd);
+    }
+    function pushBooleanAttribute(target, name, value) {
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeEmptyString
+        );
+    }
+    function pushStringAttribute(target, name, value) {
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        "boolean" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeAssign,
+          stringToChunk(escapeTextForBrowser(value)),
+          attributeEnd
+        );
+    }
+    function pushAdditionalFormField(value, key) {
+      this.push(startHiddenInputChunk);
+      validateAdditionalFormField(value);
+      pushStringAttribute(this, "name", key);
+      pushStringAttribute(this, "value", value);
+      this.push(endOfStartTagSelfClosing);
+    }
+    function validateAdditionalFormField(value) {
+      if ("string" !== typeof value)
+        throw Error(
+          "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+        );
+    }
+    function getCustomFormFields(resumableState, formAction) {
+      if ("function" === typeof formAction.$$FORM_ACTION) {
+        var id = resumableState.nextFormID++;
+        resumableState = resumableState.idPrefix + id;
+        try {
+          var customFields = formAction.$$FORM_ACTION(resumableState);
+          if (customFields) {
+            var formData = customFields.data;
+            null != formData && formData.forEach(validateAdditionalFormField);
+          }
+          return customFields;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            "function" === typeof x.then
+          )
+            throw x;
+          console.error(
+            "Failed to serialize an action for progressive enhancement:\n%s",
+            x
+          );
+        }
+      }
+      return null;
+    }
+    function pushFormActionAttribute(
+      target,
+      resumableState,
+      renderState,
+      formAction,
+      formEncType,
+      formMethod,
+      formTarget,
+      name
+    ) {
+      var formData = null;
+      if ("function" === typeof formAction) {
+        null === name ||
+          didWarnFormActionName ||
+          ((didWarnFormActionName = !0),
+          console.error(
+            'Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'
+          ));
+        (null === formEncType && null === formMethod) ||
+          didWarnFormActionMethod ||
+          ((didWarnFormActionMethod = !0),
+          console.error(
+            "Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden."
+          ));
+        null === formTarget ||
+          didWarnFormActionTarget ||
+          ((didWarnFormActionTarget = !0),
+          console.error(
+            "Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window."
+          ));
+        var customFields = getCustomFormFields(resumableState, formAction);
+        null !== customFields
+          ? ((name = customFields.name),
+            (formAction = customFields.action || ""),
+            (formEncType = customFields.encType),
+            (formMethod = customFields.method),
+            (formTarget = customFields.target),
+            (formData = customFields.data))
+          : (target.push(
+              attributeSeparator,
+              stringToChunk("formAction"),
+              attributeAssign,
+              actionJavaScriptURL,
+              attributeEnd
+            ),
+            (formTarget = formMethod = formEncType = formAction = name = null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != name && pushAttribute(target, "name", name);
+      null != formAction && pushAttribute(target, "formAction", formAction);
+      null != formEncType && pushAttribute(target, "formEncType", formEncType);
+      null != formMethod && pushAttribute(target, "formMethod", formMethod);
+      null != formTarget && pushAttribute(target, "formTarget", formTarget);
+      return formData;
+    }
+    function pushAttribute(target, name, value) {
+      switch (name) {
+        case "className":
+          pushStringAttribute(target, "class", value);
+          break;
+        case "tabIndex":
+          pushStringAttribute(target, "tabindex", value);
+          break;
+        case "dir":
+        case "role":
+        case "viewBox":
+        case "width":
+        case "height":
+          pushStringAttribute(target, name, value);
+          break;
+        case "style":
+          pushStyleAttribute(target, value);
+          break;
+        case "src":
+        case "href":
+          if ("" === value) {
+            "src" === name
+              ? console.error(
+                  'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                )
+              : console.error(
+                  'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                );
+            break;
+          }
+        case "action":
+        case "formAction":
+          if (
+            null == value ||
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            stringToChunk(name),
+            attributeAssign,
+            stringToChunk(escapeTextForBrowser(value)),
+            attributeEnd
+          );
+          break;
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "ref":
+          break;
+        case "autoFocus":
+        case "multiple":
+        case "muted":
+          pushBooleanAttribute(target, name.toLowerCase(), value);
+          break;
+        case "xlinkHref":
+          if (
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            stringToChunk("xlink:href"),
+            attributeAssign,
+            stringToChunk(escapeTextForBrowser(value)),
+            attributeEnd
+          );
+          break;
+        case "contentEditable":
+        case "spellCheck":
+        case "draggable":
+        case "value":
+        case "autoReverse":
+        case "externalResourcesRequired":
+        case "focusable":
+        case "preserveAlpha":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(
+              attributeSeparator,
+              stringToChunk(name),
+              attributeAssign,
+              stringToChunk(escapeTextForBrowser(value)),
+              attributeEnd
+            );
+          break;
+        case "inert":
+          "" !== value ||
+            didWarnForNewBooleanPropsWithEmptyValue[name] ||
+            ((didWarnForNewBooleanPropsWithEmptyValue[name] = !0),
+            console.error(
+              "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+              name
+            ));
+        case "allowFullScreen":
+        case "async":
+        case "autoPlay":
+        case "controls":
+        case "default":
+        case "defer":
+        case "disabled":
+        case "disablePictureInPicture":
+        case "disableRemotePlayback":
+        case "formNoValidate":
+        case "hidden":
+        case "loop":
+        case "noModule":
+        case "noValidate":
+        case "open":
+        case "playsInline":
+        case "readOnly":
+        case "required":
+        case "reversed":
+        case "scoped":
+        case "seamless":
+        case "itemScope":
+          value &&
+            "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(
+              attributeSeparator,
+              stringToChunk(name),
+              attributeEmptyString
+            );
+          break;
+        case "capture":
+        case "download":
+          !0 === value
+            ? target.push(
+                attributeSeparator,
+                stringToChunk(name),
+                attributeEmptyString
+              )
+            : !1 !== value &&
+              "function" !== typeof value &&
+              "symbol" !== typeof value &&
+              target.push(
+                attributeSeparator,
+                stringToChunk(name),
+                attributeAssign,
+                stringToChunk(escapeTextForBrowser(value)),
+                attributeEnd
+              );
+          break;
+        case "cols":
+        case "rows":
+        case "size":
+        case "span":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            !isNaN(value) &&
+            1 <= value &&
+            target.push(
+              attributeSeparator,
+              stringToChunk(name),
+              attributeAssign,
+              stringToChunk(escapeTextForBrowser(value)),
+              attributeEnd
+            );
+          break;
+        case "rowSpan":
+        case "start":
+          "function" === typeof value ||
+            "symbol" === typeof value ||
+            isNaN(value) ||
+            target.push(
+              attributeSeparator,
+              stringToChunk(name),
+              attributeAssign,
+              stringToChunk(escapeTextForBrowser(value)),
+              attributeEnd
+            );
+          break;
+        case "xlinkActuate":
+          pushStringAttribute(target, "xlink:actuate", value);
+          break;
+        case "xlinkArcrole":
+          pushStringAttribute(target, "xlink:arcrole", value);
+          break;
+        case "xlinkRole":
+          pushStringAttribute(target, "xlink:role", value);
+          break;
+        case "xlinkShow":
+          pushStringAttribute(target, "xlink:show", value);
+          break;
+        case "xlinkTitle":
+          pushStringAttribute(target, "xlink:title", value);
+          break;
+        case "xlinkType":
+          pushStringAttribute(target, "xlink:type", value);
+          break;
+        case "xmlBase":
+          pushStringAttribute(target, "xml:base", value);
+          break;
+        case "xmlLang":
+          pushStringAttribute(target, "xml:lang", value);
+          break;
+        case "xmlSpace":
+          pushStringAttribute(target, "xml:space", value);
+          break;
+        default:
+          if (
+            !(2 < name.length) ||
+            ("o" !== name[0] && "O" !== name[0]) ||
+            ("n" !== name[1] && "N" !== name[1])
+          )
+            if (
+              ((name = aliases.get(name) || name), isAttributeNameSafe(name))
+            ) {
+              switch (typeof value) {
+                case "function":
+                case "symbol":
+                  return;
+                case "boolean":
+                  var prefix = name.toLowerCase().slice(0, 5);
+                  if ("data-" !== prefix && "aria-" !== prefix) return;
+              }
+              target.push(
+                attributeSeparator,
+                stringToChunk(name),
+                attributeAssign,
+                stringToChunk(escapeTextForBrowser(value)),
+                attributeEnd
+              );
+            }
+      }
+    }
+    function pushInnerHTML(target, innerHTML, children) {
+      if (null != innerHTML) {
+        if (null != children)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        innerHTML = innerHTML.__html;
+        null !== innerHTML &&
+          void 0 !== innerHTML &&
+          (checkHtmlStringCoercion(innerHTML),
+          target.push(stringToChunk("" + innerHTML)));
+      }
+    }
+    function checkSelectProp(props, propName) {
+      var value = props[propName];
+      null != value &&
+        ((value = isArrayImpl(value)),
+        props.multiple && !value
+          ? console.error(
+              "The `%s` prop supplied to <select> must be an array if `multiple` is true.",
+              propName
+            )
+          : !props.multiple &&
+            value &&
+            console.error(
+              "The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.",
+              propName
+            ));
+    }
+    function flattenOptionChildren(children) {
+      var content = "";
+      React.Children.forEach(children, function (child) {
+        null != child &&
+          ((content += child),
+          didWarnInvalidOptionChildren ||
+            "string" === typeof child ||
+            "number" === typeof child ||
+            "bigint" === typeof child ||
+            ((didWarnInvalidOptionChildren = !0),
+            console.error(
+              "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>."
+            )));
+      });
+      return content;
+    }
+    function injectFormReplayingRuntime(resumableState, renderState) {
+      (resumableState.instructions & 16) === NothingSent &&
+        ((resumableState.instructions |= 16),
+        renderState.bootstrapChunks.unshift(
+          renderState.startInlineScript,
+          formReplayingRuntimeScript,
+          endInlineScript
+        ));
+    }
+    function pushLinkImpl(target, props) {
+      target.push(startChunkForTag("link"));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function escapeStyleTextContent(styleText) {
+      checkHtmlStringCoercion(styleText);
+      return ("" + styleText).replace(styleRegex, styleReplacer);
+    }
+    function pushSelfClosing(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  tag +
+                    " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function pushTitleImpl(target, props) {
+      target.push(startChunkForTag("title"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      props = Array.isArray(children)
+        ? 2 > children.length
+          ? children[0]
+          : null
+        : children;
+      "function" !== typeof props &&
+        "symbol" !== typeof props &&
+        null !== props &&
+        void 0 !== props &&
+        target.push(stringToChunk(escapeTextForBrowser("" + props)));
+      pushInnerHTML(target, innerHTML, children);
+      target.push(endChunkForTag("title"));
+      return null;
+    }
+    function pushScriptImpl(target, props) {
+      target.push(startChunkForTag("script"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      null != children &&
+        "string" !== typeof children &&
+        ((props =
+          "number" === typeof children
+            ? "a number for children"
+            : Array.isArray(children)
+              ? "an array for children"
+              : "something unexpected for children"),
+        console.error(
+          "A script element was rendered with %s. If script element has children it must be a single string. Consider using dangerouslySetInnerHTML or passing a plain string as children.",
+          props
+        ));
+      pushInnerHTML(target, innerHTML, children);
+      "string" === typeof children &&
+        target.push(stringToChunk(escapeEntireInlineScriptContent(children)));
+      target.push(endChunkForTag("script"));
+      return null;
+    }
+    function pushStartSingletonElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return tag;
+    }
+    function pushStartGenericElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return "string" === typeof tag
+        ? (target.push(stringToChunk(escapeTextForBrowser(tag))), null)
+        : tag;
+    }
+    function startChunkForTag(tag) {
+      var tagStartChunk = validatedTagCache.get(tag);
+      if (void 0 === tagStartChunk) {
+        if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+        tagStartChunk = stringToPrecomputedChunk("<" + tag);
+        validatedTagCache.set(tag, tagStartChunk);
+      }
+      return tagStartChunk;
+    }
+    function pushStartInstance(
+      target$jscomp$0,
+      type,
+      props,
+      resumableState,
+      renderState,
+      preambleState,
+      hoistableState,
+      formatContext,
+      textEmbedded,
+      isFallback
+    ) {
+      validateProperties$2(type, props);
+      ("input" !== type && "textarea" !== type && "select" !== type) ||
+        null == props ||
+        null !== props.value ||
+        didWarnValueNull ||
+        ((didWarnValueNull = !0),
+        "select" === type && props.multiple
+          ? console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.",
+              type
+            )
+          : console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.",
+              type
+            ));
+      b: if (-1 === type.indexOf("-")) var JSCompiler_inline_result = !1;
+      else
+        switch (type) {
+          case "annotation-xml":
+          case "color-profile":
+          case "font-face":
+          case "font-face-src":
+          case "font-face-uri":
+          case "font-face-format":
+          case "font-face-name":
+          case "missing-glyph":
+            JSCompiler_inline_result = !1;
+            break b;
+          default:
+            JSCompiler_inline_result = !0;
+        }
+      JSCompiler_inline_result ||
+        "string" === typeof props.is ||
+        warnUnknownProperties(type, props, null);
+      !props.suppressContentEditableWarning &&
+        props.contentEditable &&
+        null != props.children &&
+        console.error(
+          "A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."
+        );
+      formatContext.insertionMode !== SVG_MODE &&
+        formatContext.insertionMode !== MATHML_MODE &&
+        -1 === type.indexOf("-") &&
+        type.toLowerCase() !== type &&
+        console.error(
+          "<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.",
+          type
+        );
+      switch (type) {
+        case "div":
+        case "span":
+        case "svg":
+        case "path":
+          break;
+        case "a":
+          target$jscomp$0.push(startChunkForTag("a"));
+          var children = null,
+            innerHTML = null,
+            propKey;
+          for (propKey in props)
+            if (hasOwnProperty.call(props, propKey)) {
+              var propValue = props[propKey];
+              if (null != propValue)
+                switch (propKey) {
+                  case "children":
+                    children = propValue;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML = propValue;
+                    break;
+                  case "href":
+                    "" === propValue
+                      ? pushStringAttribute(target$jscomp$0, "href", "")
+                      : pushAttribute(target$jscomp$0, propKey, propValue);
+                    break;
+                  default:
+                    pushAttribute(target$jscomp$0, propKey, propValue);
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML, children);
+          if ("string" === typeof children) {
+            target$jscomp$0.push(stringToChunk(escapeTextForBrowser(children)));
+            var JSCompiler_inline_result$jscomp$0 = null;
+          } else JSCompiler_inline_result$jscomp$0 = children;
+          return JSCompiler_inline_result$jscomp$0;
+        case "g":
+        case "p":
+        case "li":
+          break;
+        case "select":
+          checkControlledValueProps("select", props);
+          checkSelectProp(props, "value");
+          checkSelectProp(props, "defaultValue");
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultSelectValue ||
+            (console.error(
+              "Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultSelectValue = !0));
+          target$jscomp$0.push(startChunkForTag("select"));
+          var children$jscomp$0 = null,
+            innerHTML$jscomp$0 = null,
+            propKey$jscomp$0;
+          for (propKey$jscomp$0 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+              var propValue$jscomp$0 = props[propKey$jscomp$0];
+              if (null != propValue$jscomp$0)
+                switch (propKey$jscomp$0) {
+                  case "children":
+                    children$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "defaultValue":
+                  case "value":
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$0,
+                      propValue$jscomp$0
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+          return children$jscomp$0;
+        case "option":
+          var selectedValue = formatContext.selectedValue;
+          target$jscomp$0.push(startChunkForTag("option"));
+          var children$jscomp$1 = null,
+            value = null,
+            selected = null,
+            innerHTML$jscomp$1 = null,
+            propKey$jscomp$1;
+          for (propKey$jscomp$1 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+              var propValue$jscomp$1 = props[propKey$jscomp$1];
+              if (null != propValue$jscomp$1)
+                switch (propKey$jscomp$1) {
+                  case "children":
+                    children$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "selected":
+                    selected = propValue$jscomp$1;
+                    didWarnSelectedSetOnOption ||
+                      (console.error(
+                        "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>."
+                      ),
+                      (didWarnSelectedSetOnOption = !0));
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "value":
+                    value = propValue$jscomp$1;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$1,
+                      propValue$jscomp$1
+                    );
+                }
+            }
+          if (null != selectedValue) {
+            if (null !== value) {
+              checkAttributeStringCoercion(value, "value");
+              var stringValue = "" + value;
+            } else
+              null === innerHTML$jscomp$1 ||
+                didWarnInvalidOptionInnerHTML ||
+                ((didWarnInvalidOptionInnerHTML = !0),
+                console.error(
+                  "Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected."
+                )),
+                (stringValue = flattenOptionChildren(children$jscomp$1));
+            if (isArrayImpl(selectedValue))
+              for (var i = 0; i < selectedValue.length; i++) {
+                if (
+                  (checkAttributeStringCoercion(selectedValue[i], "value"),
+                  "" + selectedValue[i] === stringValue)
+                ) {
+                  target$jscomp$0.push(selectedMarkerAttribute);
+                  break;
+                }
+              }
+            else
+              checkAttributeStringCoercion(selectedValue, "select.value"),
+                "" + selectedValue === stringValue &&
+                  target$jscomp$0.push(selectedMarkerAttribute);
+          } else selected && target$jscomp$0.push(selectedMarkerAttribute);
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+          return children$jscomp$1;
+        case "textarea":
+          checkControlledValueProps("textarea", props);
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultTextareaValue ||
+            (console.error(
+              "Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultTextareaValue = !0));
+          target$jscomp$0.push(startChunkForTag("textarea"));
+          var value$jscomp$0 = null,
+            defaultValue = null,
+            children$jscomp$2 = null,
+            propKey$jscomp$2;
+          for (propKey$jscomp$2 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+              var propValue$jscomp$2 = props[propKey$jscomp$2];
+              if (null != propValue$jscomp$2)
+                switch (propKey$jscomp$2) {
+                  case "children":
+                    children$jscomp$2 = propValue$jscomp$2;
+                    break;
+                  case "value":
+                    value$jscomp$0 = propValue$jscomp$2;
+                    break;
+                  case "defaultValue":
+                    defaultValue = propValue$jscomp$2;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$2,
+                      propValue$jscomp$2
+                    );
+                }
+            }
+          null === value$jscomp$0 &&
+            null !== defaultValue &&
+            (value$jscomp$0 = defaultValue);
+          target$jscomp$0.push(endOfStartTag);
+          if (null != children$jscomp$2) {
+            console.error(
+              "Use the `defaultValue` or `value` props instead of setting children on <textarea>."
+            );
+            if (null != value$jscomp$0)
+              throw Error(
+                "If you supply `defaultValue` on a <textarea>, do not pass children."
+              );
+            if (isArrayImpl(children$jscomp$2)) {
+              if (1 < children$jscomp$2.length)
+                throw Error("<textarea> can only have at most one child.");
+              checkHtmlStringCoercion(children$jscomp$2[0]);
+              value$jscomp$0 = "" + children$jscomp$2[0];
+            }
+            checkHtmlStringCoercion(children$jscomp$2);
+            value$jscomp$0 = "" + children$jscomp$2;
+          }
+          "string" === typeof value$jscomp$0 &&
+            "\n" === value$jscomp$0[0] &&
+            target$jscomp$0.push(leadingNewline);
+          null !== value$jscomp$0 &&
+            (checkAttributeStringCoercion(value$jscomp$0, "value"),
+            target$jscomp$0.push(
+              stringToChunk(escapeTextForBrowser("" + value$jscomp$0))
+            ));
+          return null;
+        case "input":
+          checkControlledValueProps("input", props);
+          target$jscomp$0.push(startChunkForTag("input"));
+          var name = null,
+            formAction = null,
+            formEncType = null,
+            formMethod = null,
+            formTarget = null,
+            value$jscomp$1 = null,
+            defaultValue$jscomp$0 = null,
+            checked = null,
+            defaultChecked = null,
+            propKey$jscomp$3;
+          for (propKey$jscomp$3 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+              var propValue$jscomp$3 = props[propKey$jscomp$3];
+              if (null != propValue$jscomp$3)
+                switch (propKey$jscomp$3) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  case "name":
+                    name = propValue$jscomp$3;
+                    break;
+                  case "formAction":
+                    formAction = propValue$jscomp$3;
+                    break;
+                  case "formEncType":
+                    formEncType = propValue$jscomp$3;
+                    break;
+                  case "formMethod":
+                    formMethod = propValue$jscomp$3;
+                    break;
+                  case "formTarget":
+                    formTarget = propValue$jscomp$3;
+                    break;
+                  case "defaultChecked":
+                    defaultChecked = propValue$jscomp$3;
+                    break;
+                  case "defaultValue":
+                    defaultValue$jscomp$0 = propValue$jscomp$3;
+                    break;
+                  case "checked":
+                    checked = propValue$jscomp$3;
+                    break;
+                  case "value":
+                    value$jscomp$1 = propValue$jscomp$3;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$3,
+                      propValue$jscomp$3
+                    );
+                }
+            }
+          null === formAction ||
+            "image" === props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'An input can only specify a formAction along with type="submit" or type="image".'
+            ));
+          var formData = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction,
+            formEncType,
+            formMethod,
+            formTarget,
+            name
+          );
+          null === checked ||
+            null === defaultChecked ||
+            didWarnDefaultChecked ||
+            (console.error(
+              "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultChecked = !0));
+          null === value$jscomp$1 ||
+            null === defaultValue$jscomp$0 ||
+            didWarnDefaultInputValue ||
+            (console.error(
+              "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultInputValue = !0));
+          null !== checked
+            ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+            : null !== defaultChecked &&
+              pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+          null !== value$jscomp$1
+            ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+            : null !== defaultValue$jscomp$0 &&
+              pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+          target$jscomp$0.push(endOfStartTagSelfClosing);
+          null != formData &&
+            formData.forEach(pushAdditionalFormField, target$jscomp$0);
+          return null;
+        case "button":
+          target$jscomp$0.push(startChunkForTag("button"));
+          var children$jscomp$3 = null,
+            innerHTML$jscomp$2 = null,
+            name$jscomp$0 = null,
+            formAction$jscomp$0 = null,
+            formEncType$jscomp$0 = null,
+            formMethod$jscomp$0 = null,
+            formTarget$jscomp$0 = null,
+            propKey$jscomp$4;
+          for (propKey$jscomp$4 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+              var propValue$jscomp$4 = props[propKey$jscomp$4];
+              if (null != propValue$jscomp$4)
+                switch (propKey$jscomp$4) {
+                  case "children":
+                    children$jscomp$3 = propValue$jscomp$4;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$2 = propValue$jscomp$4;
+                    break;
+                  case "name":
+                    name$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formAction":
+                    formAction$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formEncType":
+                    formEncType$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formMethod":
+                    formMethod$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formTarget":
+                    formTarget$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$4,
+                      propValue$jscomp$4
+                    );
+                }
+            }
+          null === formAction$jscomp$0 ||
+            null == props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'A button can only specify a formAction along with type="submit" or no type.'
+            ));
+          var formData$jscomp$0 = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction$jscomp$0,
+            formEncType$jscomp$0,
+            formMethod$jscomp$0,
+            formTarget$jscomp$0,
+            name$jscomp$0
+          );
+          target$jscomp$0.push(endOfStartTag);
+          null != formData$jscomp$0 &&
+            formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+          if ("string" === typeof children$jscomp$3) {
+            target$jscomp$0.push(
+              stringToChunk(escapeTextForBrowser(children$jscomp$3))
+            );
+            var JSCompiler_inline_result$jscomp$1 = null;
+          } else JSCompiler_inline_result$jscomp$1 = children$jscomp$3;
+          return JSCompiler_inline_result$jscomp$1;
+        case "form":
+          target$jscomp$0.push(startChunkForTag("form"));
+          var children$jscomp$4 = null,
+            innerHTML$jscomp$3 = null,
+            formAction$jscomp$1 = null,
+            formEncType$jscomp$1 = null,
+            formMethod$jscomp$1 = null,
+            formTarget$jscomp$1 = null,
+            propKey$jscomp$5;
+          for (propKey$jscomp$5 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+              var propValue$jscomp$5 = props[propKey$jscomp$5];
+              if (null != propValue$jscomp$5)
+                switch (propKey$jscomp$5) {
+                  case "children":
+                    children$jscomp$4 = propValue$jscomp$5;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$3 = propValue$jscomp$5;
+                    break;
+                  case "action":
+                    formAction$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "encType":
+                    formEncType$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "method":
+                    formMethod$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "target":
+                    formTarget$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$5,
+                      propValue$jscomp$5
+                    );
+                }
+            }
+          var formData$jscomp$1 = null,
+            formActionName = null;
+          if ("function" === typeof formAction$jscomp$1) {
+            (null === formEncType$jscomp$1 && null === formMethod$jscomp$1) ||
+              didWarnFormActionMethod ||
+              ((didWarnFormActionMethod = !0),
+              console.error(
+                "Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden."
+              ));
+            null === formTarget$jscomp$1 ||
+              didWarnFormActionTarget ||
+              ((didWarnFormActionTarget = !0),
+              console.error(
+                "Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window."
+              ));
+            var customFields = getCustomFormFields(
+              resumableState,
+              formAction$jscomp$1
+            );
+            null !== customFields
+              ? ((formAction$jscomp$1 = customFields.action || ""),
+                (formEncType$jscomp$1 = customFields.encType),
+                (formMethod$jscomp$1 = customFields.method),
+                (formTarget$jscomp$1 = customFields.target),
+                (formData$jscomp$1 = customFields.data),
+                (formActionName = customFields.name))
+              : (target$jscomp$0.push(
+                  attributeSeparator,
+                  stringToChunk("action"),
+                  attributeAssign,
+                  actionJavaScriptURL,
+                  attributeEnd
+                ),
+                (formTarget$jscomp$1 =
+                  formMethod$jscomp$1 =
+                  formEncType$jscomp$1 =
+                  formAction$jscomp$1 =
+                    null),
+                injectFormReplayingRuntime(resumableState, renderState));
+          }
+          null != formAction$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+          null != formEncType$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+          null != formMethod$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+          null != formTarget$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+          target$jscomp$0.push(endOfStartTag);
+          null !== formActionName &&
+            (target$jscomp$0.push(startHiddenInputChunk),
+            pushStringAttribute(target$jscomp$0, "name", formActionName),
+            target$jscomp$0.push(endOfStartTagSelfClosing),
+            null != formData$jscomp$1 &&
+              formData$jscomp$1.forEach(
+                pushAdditionalFormField,
+                target$jscomp$0
+              ));
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+          if ("string" === typeof children$jscomp$4) {
+            target$jscomp$0.push(
+              stringToChunk(escapeTextForBrowser(children$jscomp$4))
+            );
+            var JSCompiler_inline_result$jscomp$2 = null;
+          } else JSCompiler_inline_result$jscomp$2 = children$jscomp$4;
+          return JSCompiler_inline_result$jscomp$2;
+        case "menuitem":
+          target$jscomp$0.push(startChunkForTag("menuitem"));
+          for (var propKey$jscomp$6 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+              var propValue$jscomp$6 = props[propKey$jscomp$6];
+              if (null != propValue$jscomp$6)
+                switch (propKey$jscomp$6) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$6,
+                      propValue$jscomp$6
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          return null;
+        case "object":
+          target$jscomp$0.push(startChunkForTag("object"));
+          var children$jscomp$5 = null,
+            innerHTML$jscomp$4 = null,
+            propKey$jscomp$7;
+          for (propKey$jscomp$7 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+              var propValue$jscomp$7 = props[propKey$jscomp$7];
+              if (null != propValue$jscomp$7)
+                switch (propKey$jscomp$7) {
+                  case "children":
+                    children$jscomp$5 = propValue$jscomp$7;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$4 = propValue$jscomp$7;
+                    break;
+                  case "data":
+                    checkAttributeStringCoercion(propValue$jscomp$7, "data");
+                    var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                    if ("" === sanitizedValue) {
+                      console.error(
+                        'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                        propKey$jscomp$7,
+                        propKey$jscomp$7
+                      );
+                      break;
+                    }
+                    target$jscomp$0.push(
+                      attributeSeparator,
+                      stringToChunk("data"),
+                      attributeAssign,
+                      stringToChunk(escapeTextForBrowser(sanitizedValue)),
+                      attributeEnd
+                    );
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$7,
+                      propValue$jscomp$7
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+          if ("string" === typeof children$jscomp$5) {
+            target$jscomp$0.push(
+              stringToChunk(escapeTextForBrowser(children$jscomp$5))
+            );
+            var JSCompiler_inline_result$jscomp$3 = null;
+          } else JSCompiler_inline_result$jscomp$3 = children$jscomp$5;
+          return JSCompiler_inline_result$jscomp$3;
+        case "title":
+          var insertionMode = formatContext.insertionMode,
+            noscriptTagInScope = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$6 = props.children,
+              child = Array.isArray(children$jscomp$6)
+                ? 2 > children$jscomp$6.length
+                  ? children$jscomp$6[0]
+                  : null
+                : children$jscomp$6;
+            Array.isArray(children$jscomp$6) && 1 < children$jscomp$6.length
+              ? console.error(
+                  "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an Array with length %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert `children` of <title> tags to a single string value which is why Arrays of length greater than 1 are not supported. When using JSX it can be common to combine text nodes and value nodes. For example: <title>hello {nameOfUser}</title>. While not immediately apparent, `children` in this case is an Array with length 2. If your `children` prop is using this form try rewriting it using a template string: <title>{`hello ${nameOfUser}`}</title>.",
+                  children$jscomp$6.length
+                )
+              : "function" === typeof child || "symbol" === typeof child
+                ? console.error(
+                    "React expect children of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value.",
+                    "function" === typeof child ? "a Function" : "a Sybmol"
+                  )
+                : child &&
+                  child.toString === {}.toString &&
+                  (null != child.$$typeof
+                    ? console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that appears to be a React element which never implements a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value which is why rendering React elements is not supported. If the `children` of <title> is a React Component try moving the <title> tag into that component. If the `children` of <title> is some HTML markup change it to be Text only to be valid HTML."
+                      )
+                    : console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that does not implement a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value. Using the default `toString` method available on every object is almost certainly an error. Consider whether the `children` of this <title> is an object in error and change it to a string or number value if so. Otherwise implement a `toString` method that React can use to produce a valid <title>."
+                      ));
+          }
+          if (
+            insertionMode === SVG_MODE ||
+            noscriptTagInScope ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$4 = pushTitleImpl(
+              target$jscomp$0,
+              props
+            );
+          else
+            isFallback
+              ? (JSCompiler_inline_result$jscomp$4 = null)
+              : (pushTitleImpl(renderState.hoistableChunks, props),
+                (JSCompiler_inline_result$jscomp$4 = void 0));
+          return JSCompiler_inline_result$jscomp$4;
+        case "link":
+          var rel = props.rel,
+            href = props.href,
+            precedence = props.precedence;
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp ||
+            "string" !== typeof rel ||
+            "string" !== typeof href ||
+            "" === href
+          ) {
+            "stylesheet" === rel &&
+              "string" === typeof props.precedence &&
+              (("string" === typeof href && href) ||
+                console.error(
+                  'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and expected the `href` prop to be a non-empty string but ecountered %s instead. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop ensure there is a non-empty string `href` prop as well, otherwise remove the `precedence` prop.',
+                  null === href
+                    ? "`null`"
+                    : void 0 === href
+                      ? "`undefined`"
+                      : "" === href
+                        ? "an empty string"
+                        : 'something with type "' + typeof href + '"'
+                ));
+            pushLinkImpl(target$jscomp$0, props);
+            var JSCompiler_inline_result$jscomp$5 = null;
+          } else if ("stylesheet" === props.rel)
+            if (
+              "string" !== typeof precedence ||
+              null != props.disabled ||
+              props.onLoad ||
+              props.onError
+            ) {
+              if ("string" === typeof precedence)
+                if (null != props.disabled)
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and a `disabled` prop. The presence of the `disabled` prop indicates an intent to manage the stylesheet active state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the `disabled` prop, otherwise remove the `precedence` prop.'
+                  );
+                else if (props.onLoad || props.onError) {
+                  var propDescription =
+                    props.onLoad && props.onError
+                      ? "`onLoad` and `onError` props"
+                      : props.onLoad
+                        ? "`onLoad` prop"
+                        : "`onError` prop";
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',
+                    propDescription,
+                    propDescription
+                  );
+                }
+              JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                target$jscomp$0,
+                props
+              );
+            } else {
+              var styleQueue = renderState.styles.get(precedence),
+                resourceState = resumableState.styleResources.hasOwnProperty(
+                  href
+                )
+                  ? resumableState.styleResources[href]
+                  : void 0;
+              if (resourceState !== EXISTS) {
+                resumableState.styleResources[href] = EXISTS;
+                styleQueue ||
+                  ((styleQueue = {
+                    precedence: stringToChunk(escapeTextForBrowser(precedence)),
+                    rules: [],
+                    hrefs: [],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(precedence, styleQueue));
+                var resource = {
+                  state: PENDING$1,
+                  props: assign({}, props, {
+                    "data-precedence": props.precedence,
+                    precedence: null
+                  })
+                };
+                if (resourceState) {
+                  2 === resourceState.length &&
+                    adoptPreloadCredentials(resource.props, resourceState);
+                  var preloadResource =
+                    renderState.preloads.stylesheets.get(href);
+                  preloadResource && 0 < preloadResource.length
+                    ? (preloadResource.length = 0)
+                    : (resource.state = PRELOADED);
+                }
+                styleQueue.sheets.set(href, resource);
+                hoistableState && hoistableState.stylesheets.add(resource);
+              } else if (styleQueue) {
+                var _resource = styleQueue.sheets.get(href);
+                _resource &&
+                  hoistableState &&
+                  hoistableState.stylesheets.add(_resource);
+              }
+              textEmbedded && target$jscomp$0.push(textSeparator);
+              JSCompiler_inline_result$jscomp$5 = null;
+            }
+          else
+            props.onLoad || props.onError
+              ? (JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                  target$jscomp$0,
+                  props
+                ))
+              : (textEmbedded && target$jscomp$0.push(textSeparator),
+                (JSCompiler_inline_result$jscomp$5 = isFallback
+                  ? null
+                  : pushLinkImpl(renderState.hoistableChunks, props)));
+          return JSCompiler_inline_result$jscomp$5;
+        case "script":
+          var asyncProp = props.async;
+          if (
+            "string" !== typeof props.src ||
+            !props.src ||
+            !asyncProp ||
+            "function" === typeof asyncProp ||
+            "symbol" === typeof asyncProp ||
+            props.onLoad ||
+            props.onError ||
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$6 = pushScriptImpl(
+              target$jscomp$0,
+              props
+            );
+          else {
+            var key = props.src;
+            if ("module" === props.type) {
+              var resources = resumableState.moduleScriptResources;
+              var preloads = renderState.preloads.moduleScripts;
+            } else
+              (resources = resumableState.scriptResources),
+                (preloads = renderState.preloads.scripts);
+            var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+              ? resources[key]
+              : void 0;
+            if (resourceState$jscomp$0 !== EXISTS) {
+              resources[key] = EXISTS;
+              var scriptProps = props;
+              if (resourceState$jscomp$0) {
+                2 === resourceState$jscomp$0.length &&
+                  ((scriptProps = assign({}, props)),
+                  adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+                var preloadResource$jscomp$0 = preloads.get(key);
+                preloadResource$jscomp$0 &&
+                  (preloadResource$jscomp$0.length = 0);
+              }
+              var resource$jscomp$0 = [];
+              renderState.scripts.add(resource$jscomp$0);
+              pushScriptImpl(resource$jscomp$0, scriptProps);
+            }
+            textEmbedded && target$jscomp$0.push(textSeparator);
+            JSCompiler_inline_result$jscomp$6 = null;
+          }
+          return JSCompiler_inline_result$jscomp$6;
+        case "style":
+          var insertionMode$jscomp$0 = formatContext.insertionMode,
+            noscriptTagInScope$jscomp$0 = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$7 = props.children,
+              child$jscomp$0 = Array.isArray(children$jscomp$7)
+                ? 2 > children$jscomp$7.length
+                  ? children$jscomp$7[0]
+                  : null
+                : children$jscomp$7;
+            ("function" === typeof child$jscomp$0 ||
+              "symbol" === typeof child$jscomp$0 ||
+              Array.isArray(child$jscomp$0)) &&
+              console.error(
+                "React expect children of <style> tags to be a string, number, or object with a `toString` method but found %s instead. In browsers style Elements can only have `Text` Nodes as children.",
+                "function" === typeof child$jscomp$0
+                  ? "a Function"
+                  : "symbol" === typeof child$jscomp$0
+                    ? "a Sybmol"
+                    : "an Array"
+              );
+          }
+          var precedence$jscomp$0 = props.precedence,
+            href$jscomp$0 = props.href;
+          if (
+            insertionMode$jscomp$0 === SVG_MODE ||
+            noscriptTagInScope$jscomp$0 ||
+            null != props.itemProp ||
+            "string" !== typeof precedence$jscomp$0 ||
+            "string" !== typeof href$jscomp$0 ||
+            "" === href$jscomp$0
+          ) {
+            target$jscomp$0.push(startChunkForTag("style"));
+            var children$jscomp$8 = null,
+              innerHTML$jscomp$5 = null,
+              propKey$jscomp$8;
+            for (propKey$jscomp$8 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+                var propValue$jscomp$8 = props[propKey$jscomp$8];
+                if (null != propValue$jscomp$8)
+                  switch (propKey$jscomp$8) {
+                    case "children":
+                      children$jscomp$8 = propValue$jscomp$8;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$5 = propValue$jscomp$8;
+                      break;
+                    default:
+                      pushAttribute(
+                        target$jscomp$0,
+                        propKey$jscomp$8,
+                        propValue$jscomp$8
+                      );
+                  }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            var child$jscomp$1 = Array.isArray(children$jscomp$8)
+              ? 2 > children$jscomp$8.length
+                ? children$jscomp$8[0]
+                : null
+              : children$jscomp$8;
+            "function" !== typeof child$jscomp$1 &&
+              "symbol" !== typeof child$jscomp$1 &&
+              null !== child$jscomp$1 &&
+              void 0 !== child$jscomp$1 &&
+              target$jscomp$0.push(
+                stringToChunk(escapeStyleTextContent(child$jscomp$1))
+              );
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$5,
+              children$jscomp$8
+            );
+            target$jscomp$0.push(endChunkForTag("style"));
+            var JSCompiler_inline_result$jscomp$7 = null;
+          } else {
+            href$jscomp$0.includes(" ") &&
+              console.error(
+                'React expected the `href` prop for a <style> tag opting into hoisting semantics using the `precedence` prop to not have any spaces but ecountered spaces instead. using spaces in this prop will cause hydration of this style to fail on the client. The href for the <style> where this ocurred is "%s".',
+                href$jscomp$0
+              );
+            var styleQueue$jscomp$0 =
+                renderState.styles.get(precedence$jscomp$0),
+              resourceState$jscomp$1 =
+                resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+                  ? resumableState.styleResources[href$jscomp$0]
+                  : void 0;
+            if (resourceState$jscomp$1 !== EXISTS) {
+              resumableState.styleResources[href$jscomp$0] = EXISTS;
+              resourceState$jscomp$1 &&
+                console.error(
+                  'React encountered a hoistable style tag for the same href as a preload: "%s". When using a style tag to inline styles you should not also preload it as a stylsheet.',
+                  href$jscomp$0
+                );
+              styleQueue$jscomp$0
+                ? styleQueue$jscomp$0.hrefs.push(
+                    stringToChunk(escapeTextForBrowser(href$jscomp$0))
+                  )
+                : ((styleQueue$jscomp$0 = {
+                    precedence: stringToChunk(
+                      escapeTextForBrowser(precedence$jscomp$0)
+                    ),
+                    rules: [],
+                    hrefs: [stringToChunk(escapeTextForBrowser(href$jscomp$0))],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(
+                    precedence$jscomp$0,
+                    styleQueue$jscomp$0
+                  ));
+              var target = styleQueue$jscomp$0.rules,
+                children$jscomp$9 = null,
+                innerHTML$jscomp$6 = null,
+                propKey$jscomp$9;
+              for (propKey$jscomp$9 in props)
+                if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+                  var propValue$jscomp$9 = props[propKey$jscomp$9];
+                  if (null != propValue$jscomp$9)
+                    switch (propKey$jscomp$9) {
+                      case "children":
+                        children$jscomp$9 = propValue$jscomp$9;
+                        break;
+                      case "dangerouslySetInnerHTML":
+                        innerHTML$jscomp$6 = propValue$jscomp$9;
+                    }
+                }
+              var child$jscomp$2 = Array.isArray(children$jscomp$9)
+                ? 2 > children$jscomp$9.length
+                  ? children$jscomp$9[0]
+                  : null
+                : children$jscomp$9;
+              "function" !== typeof child$jscomp$2 &&
+                "symbol" !== typeof child$jscomp$2 &&
+                null !== child$jscomp$2 &&
+                void 0 !== child$jscomp$2 &&
+                target.push(
+                  stringToChunk(escapeStyleTextContent(child$jscomp$2))
+                );
+              pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$9);
+            }
+            styleQueue$jscomp$0 &&
+              hoistableState &&
+              hoistableState.styles.add(styleQueue$jscomp$0);
+            textEmbedded && target$jscomp$0.push(textSeparator);
+            JSCompiler_inline_result$jscomp$7 = void 0;
+          }
+          return JSCompiler_inline_result$jscomp$7;
+        case "meta":
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$8 = pushSelfClosing(
+              target$jscomp$0,
+              props,
+              "meta"
+            );
+          else
+            textEmbedded && target$jscomp$0.push(textSeparator),
+              (JSCompiler_inline_result$jscomp$8 = isFallback
+                ? null
+                : "string" === typeof props.charSet
+                  ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+                  : "viewport" === props.name
+                    ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                    : pushSelfClosing(
+                        renderState.hoistableChunks,
+                        props,
+                        "meta"
+                      ));
+          return JSCompiler_inline_result$jscomp$8;
+        case "listing":
+        case "pre":
+          target$jscomp$0.push(startChunkForTag(type));
+          var children$jscomp$10 = null,
+            innerHTML$jscomp$7 = null,
+            propKey$jscomp$10;
+          for (propKey$jscomp$10 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+              var propValue$jscomp$10 = props[propKey$jscomp$10];
+              if (null != propValue$jscomp$10)
+                switch (propKey$jscomp$10) {
+                  case "children":
+                    children$jscomp$10 = propValue$jscomp$10;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$7 = propValue$jscomp$10;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$10,
+                      propValue$jscomp$10
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          if (null != innerHTML$jscomp$7) {
+            if (null != children$jscomp$10)
+              throw Error(
+                "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+              );
+            if (
+              "object" !== typeof innerHTML$jscomp$7 ||
+              !("__html" in innerHTML$jscomp$7)
+            )
+              throw Error(
+                "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+              );
+            var html = innerHTML$jscomp$7.__html;
+            null !== html &&
+              void 0 !== html &&
+              ("string" === typeof html && 0 < html.length && "\n" === html[0]
+                ? target$jscomp$0.push(leadingNewline, stringToChunk(html))
+                : (checkHtmlStringCoercion(html),
+                  target$jscomp$0.push(stringToChunk("" + html))));
+          }
+          "string" === typeof children$jscomp$10 &&
+            "\n" === children$jscomp$10[0] &&
+            target$jscomp$0.push(leadingNewline);
+          return children$jscomp$10;
+        case "img":
+          var src = props.src,
+            srcSet = props.srcSet;
+          if (
+            !(
+              "lazy" === props.loading ||
+              (!src && !srcSet) ||
+              ("string" !== typeof src && null != src) ||
+              ("string" !== typeof srcSet && null != srcSet)
+            ) &&
+            "low" !== props.fetchPriority &&
+            !1 === !!(formatContext.tagScope & 3) &&
+            ("string" !== typeof src ||
+              ":" !== src[4] ||
+              ("d" !== src[0] && "D" !== src[0]) ||
+              ("a" !== src[1] && "A" !== src[1]) ||
+              ("t" !== src[2] && "T" !== src[2]) ||
+              ("a" !== src[3] && "A" !== src[3])) &&
+            ("string" !== typeof srcSet ||
+              ":" !== srcSet[4] ||
+              ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+              ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+              ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+              ("a" !== srcSet[3] && "A" !== srcSet[3]))
+          ) {
+            var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+              key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+              promotablePreloads = renderState.preloads.images,
+              resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+            if (resource$jscomp$1) {
+              if (
+                "high" === props.fetchPriority ||
+                10 > renderState.highImagePreloads.size
+              )
+                promotablePreloads.delete(key$jscomp$0),
+                  renderState.highImagePreloads.add(resource$jscomp$1);
+            } else if (
+              !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+            ) {
+              resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+              var input = props.crossOrigin;
+              var crossOrigin =
+                "string" === typeof input
+                  ? "use-credentials" === input
+                    ? input
+                    : ""
+                  : void 0;
+              var headers = renderState.headers,
+                header;
+              headers &&
+              0 < headers.remainingCapacity &&
+              "string" !== typeof props.srcSet &&
+              ("high" === props.fetchPriority ||
+                500 > headers.highImagePreloads.length) &&
+              ((header = getPreloadAsHeader(src, "image", {
+                imageSrcSet: props.srcSet,
+                imageSizes: props.sizes,
+                crossOrigin: crossOrigin,
+                integrity: props.integrity,
+                nonce: props.nonce,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.refererPolicy
+              })),
+              0 <= (headers.remainingCapacity -= header.length + 2))
+                ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+                  headers.highImagePreloads &&
+                    (headers.highImagePreloads += ", "),
+                  (headers.highImagePreloads += header))
+                : ((resource$jscomp$1 = []),
+                  pushLinkImpl(resource$jscomp$1, {
+                    rel: "preload",
+                    as: "image",
+                    href: srcSet ? void 0 : src,
+                    imageSrcSet: srcSet,
+                    imageSizes: sizes,
+                    crossOrigin: crossOrigin,
+                    integrity: props.integrity,
+                    type: props.type,
+                    fetchPriority: props.fetchPriority,
+                    referrerPolicy: props.referrerPolicy
+                  }),
+                  "high" === props.fetchPriority ||
+                  10 > renderState.highImagePreloads.size
+                    ? renderState.highImagePreloads.add(resource$jscomp$1)
+                    : (renderState.bulkPreloads.add(resource$jscomp$1),
+                      promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+            }
+          }
+          return pushSelfClosing(target$jscomp$0, props, "img");
+        case "base":
+        case "area":
+        case "br":
+        case "col":
+        case "embed":
+        case "hr":
+        case "keygen":
+        case "param":
+        case "source":
+        case "track":
+        case "wbr":
+          return pushSelfClosing(target$jscomp$0, props, type);
+        case "annotation-xml":
+        case "color-profile":
+        case "font-face":
+        case "font-face-src":
+        case "font-face-uri":
+        case "font-face-format":
+        case "font-face-name":
+        case "missing-glyph":
+          break;
+        case "head":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble = preambleState || renderState.preamble;
+            if (preamble.headChunks)
+              throw Error("The `<head>` tag may only be rendered once.");
+            preamble.headChunks = [];
+            var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+              preamble.headChunks,
+              props,
+              "head"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "head"
+            );
+          return JSCompiler_inline_result$jscomp$9;
+        case "body":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble$jscomp$0 = preambleState || renderState.preamble;
+            if (preamble$jscomp$0.bodyChunks)
+              throw Error("The `<body>` tag may only be rendered once.");
+            preamble$jscomp$0.bodyChunks = [];
+            var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+              preamble$jscomp$0.bodyChunks,
+              props,
+              "body"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "body"
+            );
+          return JSCompiler_inline_result$jscomp$10;
+        case "html":
+          if (formatContext.insertionMode === ROOT_HTML_MODE) {
+            var preamble$jscomp$1 = preambleState || renderState.preamble;
+            if (preamble$jscomp$1.htmlChunks)
+              throw Error("The `<html>` tag may only be rendered once.");
+            preamble$jscomp$1.htmlChunks = [doctypeChunk];
+            var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+              preamble$jscomp$1.htmlChunks,
+              props,
+              "html"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "html"
+            );
+          return JSCompiler_inline_result$jscomp$11;
+        default:
+          if (-1 !== type.indexOf("-")) {
+            target$jscomp$0.push(startChunkForTag(type));
+            var children$jscomp$11 = null,
+              innerHTML$jscomp$8 = null,
+              propKey$jscomp$11;
+            for (propKey$jscomp$11 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+                var propValue$jscomp$11 = props[propKey$jscomp$11];
+                if (null != propValue$jscomp$11) {
+                  var attributeName = propKey$jscomp$11;
+                  switch (propKey$jscomp$11) {
+                    case "children":
+                      children$jscomp$11 = propValue$jscomp$11;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$8 = propValue$jscomp$11;
+                      break;
+                    case "style":
+                      pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                      break;
+                    case "suppressContentEditableWarning":
+                    case "suppressHydrationWarning":
+                    case "ref":
+                      break;
+                    case "className":
+                      attributeName = "class";
+                    default:
+                      if (
+                        isAttributeNameSafe(propKey$jscomp$11) &&
+                        "function" !== typeof propValue$jscomp$11 &&
+                        "symbol" !== typeof propValue$jscomp$11 &&
+                        !1 !== propValue$jscomp$11
+                      ) {
+                        if (!0 === propValue$jscomp$11)
+                          propValue$jscomp$11 = "";
+                        else if ("object" === typeof propValue$jscomp$11)
+                          continue;
+                        target$jscomp$0.push(
+                          attributeSeparator,
+                          stringToChunk(attributeName),
+                          attributeAssign,
+                          stringToChunk(
+                            escapeTextForBrowser(propValue$jscomp$11)
+                          ),
+                          attributeEnd
+                        );
+                      }
+                  }
+                }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$8,
+              children$jscomp$11
+            );
+            return children$jscomp$11;
+          }
+      }
+      return pushStartGenericElement(target$jscomp$0, props, type);
+    }
+    function endChunkForTag(tag) {
+      var chunk = endTagCache.get(tag);
+      void 0 === chunk &&
+        ((chunk = stringToPrecomputedChunk("</" + tag + ">")),
+        endTagCache.set(tag, chunk));
+      return chunk;
+    }
+    function hoistPreambleState(renderState, preambleState) {
+      renderState = renderState.preamble;
+      null === renderState.htmlChunks &&
+        preambleState.htmlChunks &&
+        ((renderState.htmlChunks = preambleState.htmlChunks),
+        (preambleState.contribution |= 1));
+      null === renderState.headChunks &&
+        preambleState.headChunks &&
+        ((renderState.headChunks = preambleState.headChunks),
+        (preambleState.contribution |= 4));
+      null === renderState.bodyChunks &&
+        preambleState.bodyChunks &&
+        ((renderState.bodyChunks = preambleState.bodyChunks),
+        (preambleState.contribution |= 2));
+    }
+    function writeBootstrap(destination, renderState) {
+      renderState = renderState.bootstrapChunks;
+      for (var i = 0; i < renderState.length - 1; i++)
+        writeChunk(destination, renderState[i]);
+      return i < renderState.length
+        ? ((i = renderState[i]),
+          (renderState.length = 0),
+          writeChunkAndReturn(destination, i))
+        : !0;
+    }
+    function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+      writeChunk(destination, startPendingSuspenseBoundary1);
+      if (null === id)
+        throw Error(
+          "An ID must have been assigned before we can complete the boundary."
+        );
+      writeChunk(destination, renderState.boundaryPrefix);
+      writeChunk(destination, stringToChunk(id.toString(16)));
+      return writeChunkAndReturn(destination, startPendingSuspenseBoundary2);
+    }
+    function writePreambleContribution(destination, preambleState) {
+      preambleState = preambleState.contribution;
+      preambleState !== NoContribution &&
+        (writeChunk(destination, boundaryPreambleContributionChunkStart),
+        writeChunk(destination, stringToChunk("" + preambleState)),
+        writeChunk(destination, boundaryPreambleContributionChunkEnd));
+    }
+    function writeStartSegment(destination, renderState, formatContext, id) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return (
+            writeChunk(destination, startSegmentHTML),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentHTML2)
+          );
+        case SVG_MODE:
+          return (
+            writeChunk(destination, startSegmentSVG),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentSVG2)
+          );
+        case MATHML_MODE:
+          return (
+            writeChunk(destination, startSegmentMathML),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentMathML2)
+          );
+        case HTML_TABLE_MODE:
+          return (
+            writeChunk(destination, startSegmentTable),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentTable2)
+          );
+        case HTML_TABLE_BODY_MODE:
+          return (
+            writeChunk(destination, startSegmentTableBody),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentTableBody2)
+          );
+        case HTML_TABLE_ROW_MODE:
+          return (
+            writeChunk(destination, startSegmentTableRow),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentTableRow2)
+          );
+        case HTML_COLGROUP_MODE:
+          return (
+            writeChunk(destination, startSegmentColGroup),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, stringToChunk(id.toString(16))),
+            writeChunkAndReturn(destination, startSegmentColGroup2)
+          );
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function writeEndSegment(destination, formatContext) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return writeChunkAndReturn(destination, endSegmentHTML);
+        case SVG_MODE:
+          return writeChunkAndReturn(destination, endSegmentSVG);
+        case MATHML_MODE:
+          return writeChunkAndReturn(destination, endSegmentMathML);
+        case HTML_TABLE_MODE:
+          return writeChunkAndReturn(destination, endSegmentTable);
+        case HTML_TABLE_BODY_MODE:
+          return writeChunkAndReturn(destination, endSegmentTableBody);
+        case HTML_TABLE_ROW_MODE:
+          return writeChunkAndReturn(destination, endSegmentTableRow);
+        case HTML_COLGROUP_MODE:
+          return writeChunkAndReturn(destination, endSegmentColGroup);
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function escapeJSStringsForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInInstructionScripts,
+        function (match) {
+          switch (match) {
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function escapeJSObjectForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInScripts,
+        function (match) {
+          switch (match) {
+            case "&":
+              return "\\u0026";
+            case ">":
+              return "\\u003e";
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function flushStyleTagsLateForBoundary(styleQueue) {
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      0 < rules.length &&
+        0 === hrefs.length &&
+        console.error(
+          "React expected to have at least one href for an a hoistable style but found none. This is a bug in React."
+        );
+      var i = 0;
+      if (hrefs.length) {
+        writeChunk(this, lateStyleTagResourceOpen1);
+        writeChunk(this, styleQueue.precedence);
+        for (
+          writeChunk(this, lateStyleTagResourceOpen2);
+          i < hrefs.length - 1;
+          i++
+        )
+          writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator);
+        writeChunk(this, hrefs[i]);
+        writeChunk(this, lateStyleTagResourceOpen3);
+        for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]);
+        destinationHasCapacity = writeChunkAndReturn(
+          this,
+          lateStyleTagTemplateClose
+        );
+        currentlyRenderingBoundaryHasStylesToHoist = !0;
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function hasStylesToHoist(stylesheet) {
+      return stylesheet.state !== PREAMBLE
+        ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+        : !1;
+    }
+    function writeHoistablesForBoundary(
+      destination,
+      hoistableState,
+      renderState
+    ) {
+      currentlyRenderingBoundaryHasStylesToHoist = !1;
+      destinationHasCapacity = !0;
+      hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+      hoistableState.stylesheets.forEach(hasStylesToHoist);
+      currentlyRenderingBoundaryHasStylesToHoist &&
+        (renderState.stylesToHoist = !0);
+      return destinationHasCapacity;
+    }
+    function flushResource(resource) {
+      for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]);
+      resource.length = 0;
+    }
+    function flushStyleInPreamble(stylesheet) {
+      pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+      for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+        writeChunk(this, stylesheetFlushingQueue[i]);
+      stylesheetFlushingQueue.length = 0;
+      stylesheet.state = PREAMBLE;
+    }
+    function flushStylesInPreamble(styleQueue) {
+      var hasStylesheets = 0 < styleQueue.sheets.size;
+      styleQueue.sheets.forEach(flushStyleInPreamble, this);
+      styleQueue.sheets.clear();
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      if (!hasStylesheets || hrefs.length) {
+        writeChunk(this, styleTagResourceOpen1);
+        writeChunk(this, styleQueue.precedence);
+        styleQueue = 0;
+        if (hrefs.length) {
+          for (
+            writeChunk(this, styleTagResourceOpen2);
+            styleQueue < hrefs.length - 1;
+            styleQueue++
+          )
+            writeChunk(this, hrefs[styleQueue]),
+              writeChunk(this, spaceSeparator);
+          writeChunk(this, hrefs[styleQueue]);
+        }
+        writeChunk(this, styleTagResourceOpen3);
+        for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+          writeChunk(this, rules[styleQueue]);
+        writeChunk(this, styleTagResourceClose);
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function preloadLateStyle(stylesheet) {
+      if (stylesheet.state === PENDING$1) {
+        stylesheet.state = PRELOADED;
+        var props = stylesheet.props;
+        pushLinkImpl(stylesheetFlushingQueue, {
+          rel: "preload",
+          as: "style",
+          href: stylesheet.props.href,
+          crossOrigin: props.crossOrigin,
+          fetchPriority: props.fetchPriority,
+          integrity: props.integrity,
+          media: props.media,
+          hrefLang: props.hrefLang,
+          referrerPolicy: props.referrerPolicy
+        });
+        for (
+          stylesheet = 0;
+          stylesheet < stylesheetFlushingQueue.length;
+          stylesheet++
+        )
+          writeChunk(this, stylesheetFlushingQueue[stylesheet]);
+        stylesheetFlushingQueue.length = 0;
+      }
+    }
+    function preloadLateStyles(styleQueue) {
+      styleQueue.sheets.forEach(preloadLateStyle, this);
+      styleQueue.sheets.clear();
+    }
+    function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+      writeChunk(destination, arrayFirstOpenBracket);
+      var nextArrayOpenBrackChunk = arrayFirstOpenBracket;
+      hoistableState.stylesheets.forEach(function (resource) {
+        if (resource.state !== PREAMBLE)
+          if (resource.state === LATE)
+            writeChunk(destination, nextArrayOpenBrackChunk),
+              (resource = resource.props.href),
+              checkAttributeStringCoercion(resource, "href"),
+              writeChunk(
+                destination,
+                stringToChunk(
+                  escapeJSObjectForInstructionScripts("" + resource)
+                )
+              ),
+              writeChunk(destination, arrayCloseBracket),
+              (nextArrayOpenBrackChunk = arraySubsequentOpenBracket);
+          else {
+            writeChunk(destination, nextArrayOpenBrackChunk);
+            var precedence = resource.props["data-precedence"],
+              props = resource.props,
+              coercedHref = sanitizeURL("" + resource.props.href);
+            writeChunk(
+              destination,
+              stringToChunk(escapeJSObjectForInstructionScripts(coercedHref))
+            );
+            checkAttributeStringCoercion(precedence, "precedence");
+            precedence = "" + precedence;
+            writeChunk(destination, arrayInterstitial);
+            writeChunk(
+              destination,
+              stringToChunk(escapeJSObjectForInstructionScripts(precedence))
+            );
+            for (var propKey in props)
+              if (
+                hasOwnProperty.call(props, propKey) &&
+                ((precedence = props[propKey]), null != precedence)
+              )
+                switch (propKey) {
+                  case "href":
+                  case "rel":
+                  case "precedence":
+                  case "data-precedence":
+                    break;
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    writeStyleResourceAttributeInJS(
+                      destination,
+                      propKey,
+                      precedence
+                    );
+                }
+            writeChunk(destination, arrayCloseBracket);
+            nextArrayOpenBrackChunk = arraySubsequentOpenBracket;
+            resource.state = LATE;
+          }
+      });
+      writeChunk(destination, arrayCloseBracket);
+    }
+    function writeStyleResourceAttributeInJS(destination, name, value) {
+      var attributeName = name.toLowerCase();
+      switch (typeof value) {
+        case "function":
+        case "symbol":
+          return;
+      }
+      switch (name) {
+        case "innerHTML":
+        case "dangerouslySetInnerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "style":
+        case "ref":
+          return;
+        case "className":
+          attributeName = "class";
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        case "hidden":
+          if (!1 === value) return;
+          name = "";
+          break;
+        case "src":
+        case "href":
+          value = sanitizeURL(value);
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        default:
+          if (
+            (2 < name.length &&
+              ("o" === name[0] || "O" === name[0]) &&
+              ("n" === name[1] || "N" === name[1])) ||
+            !isAttributeNameSafe(name)
+          )
+            return;
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+      }
+      writeChunk(destination, arrayInterstitial);
+      writeChunk(
+        destination,
+        stringToChunk(escapeJSObjectForInstructionScripts(attributeName))
+      );
+      writeChunk(destination, arrayInterstitial);
+      writeChunk(
+        destination,
+        stringToChunk(escapeJSObjectForInstructionScripts(name))
+      );
+    }
+    function createHoistableState() {
+      return { styles: new Set(), stylesheets: new Set() };
+    }
+    function preloadBootstrapScriptOrModule(
+      resumableState,
+      renderState,
+      href,
+      props
+    ) {
+      (resumableState.scriptResources.hasOwnProperty(href) ||
+        resumableState.moduleScriptResources.hasOwnProperty(href)) &&
+        console.error(
+          'Internal React Error: React expected bootstrap script or module with src "%s" to not have been preloaded already. please file an issue',
+          href
+        );
+      resumableState.scriptResources[href] = EXISTS;
+      resumableState.moduleScriptResources[href] = EXISTS;
+      resumableState = [];
+      pushLinkImpl(resumableState, props);
+      renderState.bootstrapScripts.add(resumableState);
+    }
+    function adoptPreloadCredentials(target, preloadState) {
+      null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+      null == target.integrity && (target.integrity = preloadState[1]);
+    }
+    function getPreloadAsHeader(href, as, params) {
+      href = escapeHrefForLinkHeaderURLContext(href);
+      as = escapeStringForLinkHeaderQuotedParamValueContext(as, "as");
+      as = "<" + href + '>; rel=preload; as="' + as + '"';
+      for (var paramName in params)
+        hasOwnProperty.call(params, paramName) &&
+          ((href = params[paramName]),
+          "string" === typeof href &&
+            (as +=
+              "; " +
+              paramName.toLowerCase() +
+              '="' +
+              escapeStringForLinkHeaderQuotedParamValueContext(
+                href,
+                paramName
+              ) +
+              '"'));
+      return as;
+    }
+    function escapeHrefForLinkHeaderURLContext(hrefInput) {
+      checkAttributeStringCoercion(hrefInput, "href");
+      return ("" + hrefInput).replace(
+        regexForHrefInLinkHeaderURLContext,
+        escapeHrefForLinkHeaderURLContextReplacer
+      );
+    }
+    function escapeHrefForLinkHeaderURLContextReplacer(match) {
+      switch (match) {
+        case "<":
+          return "%3C";
+        case ">":
+          return "%3E";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContext(value, name) {
+      willCoercionThrow(value) &&
+        (console.error(
+          "The provided `%s` option is an unsupported type %s. This value must be coerced to a string before using it here.",
+          name,
+          typeName(value)
+        ),
+        testStringCoercion(value));
+      return ("" + value).replace(
+        regexForLinkHeaderQuotedParamValueContext,
+        escapeStringForLinkHeaderQuotedParamValueContextReplacer
+      );
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+      switch (match) {
+        case '"':
+          return "%22";
+        case "'":
+          return "%27";
+        case ";":
+          return "%3B";
+        case ",":
+          return "%2C";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function hoistStyleQueueDependency(styleQueue) {
+      this.styles.add(styleQueue);
+    }
+    function hoistStylesheetDependency(stylesheet) {
+      this.stylesheets.add(stylesheet);
+    }
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function popToNearestCommonAncestor(prev, next) {
+      if (prev !== next) {
+        prev.context._currentValue = prev.parentValue;
+        prev = prev.parent;
+        var parentNext = next.parent;
+        if (null === prev) {
+          if (null !== parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+        } else {
+          if (null === parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+          popToNearestCommonAncestor(prev, parentNext);
+        }
+        next.context._currentValue = next.value;
+      }
+    }
+    function popAllPrevious(prev) {
+      prev.context._currentValue = prev.parentValue;
+      prev = prev.parent;
+      null !== prev && popAllPrevious(prev);
+    }
+    function pushAllNext(next) {
+      var parentNext = next.parent;
+      null !== parentNext && pushAllNext(parentNext);
+      next.context._currentValue = next.value;
+    }
+    function popPreviousToCommonLevel(prev, next) {
+      prev.context._currentValue = prev.parentValue;
+      prev = prev.parent;
+      if (null === prev)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === next.depth
+        ? popToNearestCommonAncestor(prev, next)
+        : popPreviousToCommonLevel(prev, next);
+    }
+    function popNextToCommonLevel(prev, next) {
+      var parentNext = next.parent;
+      if (null === parentNext)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === parentNext.depth
+        ? popToNearestCommonAncestor(prev, parentNext)
+        : popNextToCommonLevel(prev, parentNext);
+      next.context._currentValue = next.value;
+    }
+    function switchContext(newSnapshot) {
+      var prev = currentActiveSnapshot;
+      prev !== newSnapshot &&
+        (null === prev
+          ? pushAllNext(newSnapshot)
+          : null === newSnapshot
+            ? popAllPrevious(prev)
+            : prev.depth === newSnapshot.depth
+              ? popToNearestCommonAncestor(prev, newSnapshot)
+              : prev.depth > newSnapshot.depth
+                ? popPreviousToCommonLevel(prev, newSnapshot)
+                : popNextToCommonLevel(prev, newSnapshot),
+        (currentActiveSnapshot = newSnapshot));
+    }
+    function warnOnInvalidCallback(callback) {
+      if (null !== callback && "function" !== typeof callback) {
+        var key = String(callback);
+        didWarnOnInvalidCallback.has(key) ||
+          (didWarnOnInvalidCallback.add(key),
+          console.error(
+            "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+            callback
+          ));
+      }
+    }
+    function warnNoop(publicInstance, callerName) {
+      publicInstance =
+        ((publicInstance = publicInstance.constructor) &&
+          getComponentNameFromType(publicInstance)) ||
+        "ReactClass";
+      var warningKey = publicInstance + "." + callerName;
+      didWarnAboutNoopUpdateForComponent[warningKey] ||
+        (console.error(
+          "Can only update a mounting component. This usually means you called %s() outside componentWillMount() on the server. This is a no-op.\n\nPlease check the code for the %s component.",
+          callerName,
+          publicInstance
+        ),
+        (didWarnAboutNoopUpdateForComponent[warningKey] = !0));
+    }
+    function pushTreeContext(baseContext, totalChildren, index) {
+      var baseIdWithLeadingBit = baseContext.id;
+      baseContext = baseContext.overflow;
+      var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+      baseIdWithLeadingBit &= ~(1 << baseLength);
+      index += 1;
+      var length = 32 - clz32(totalChildren) + baseLength;
+      if (30 < length) {
+        var numberOfOverflowBits = baseLength - (baseLength % 5);
+        length = (
+          baseIdWithLeadingBit &
+          ((1 << numberOfOverflowBits) - 1)
+        ).toString(32);
+        baseIdWithLeadingBit >>= numberOfOverflowBits;
+        baseLength -= numberOfOverflowBits;
+        return {
+          id:
+            (1 << (32 - clz32(totalChildren) + baseLength)) |
+            (index << baseLength) |
+            baseIdWithLeadingBit,
+          overflow: length + baseContext
+        };
+      }
+      return {
+        id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+        overflow: baseContext
+      };
+    }
+    function clz32Fallback(x) {
+      x >>>= 0;
+      return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+    }
+    function noop$2() {}
+    function trackUsedThenable(thenableState, thenable, index) {
+      index = thenableState[index];
+      void 0 === index
+        ? thenableState.push(thenable)
+        : index !== thenable &&
+          (thenable.then(noop$2, noop$2), (thenable = index));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+        default:
+          "string" === typeof thenable.status
+            ? thenable.then(noop$2, noop$2)
+            : ((thenableState = thenable),
+              (thenableState.status = "pending"),
+              thenableState.then(
+                function (fulfilledValue) {
+                  if ("pending" === thenable.status) {
+                    var fulfilledThenable = thenable;
+                    fulfilledThenable.status = "fulfilled";
+                    fulfilledThenable.value = fulfilledValue;
+                  }
+                },
+                function (error) {
+                  if ("pending" === thenable.status) {
+                    var rejectedThenable = thenable;
+                    rejectedThenable.status = "rejected";
+                    rejectedThenable.reason = error;
+                  }
+                }
+              ));
+          switch (thenable.status) {
+            case "fulfilled":
+              return thenable.value;
+            case "rejected":
+              throw thenable.reason;
+          }
+          suspendedThenable = thenable;
+          throw SuspenseException;
+      }
+    }
+    function getSuspendedThenable() {
+      if (null === suspendedThenable)
+        throw Error(
+          "Expected a suspended thenable. This is a bug in React. Please file an issue."
+        );
+      var thenable = suspendedThenable;
+      suspendedThenable = null;
+      return thenable;
+    }
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    function resolveCurrentlyRenderingComponent() {
+      if (null === currentlyRenderingComponent)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      isInHookUserCodeInDev &&
+        console.error(
+          "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"
+        );
+      return currentlyRenderingComponent;
+    }
+    function createHook() {
+      if (0 < numberOfReRenders)
+        throw Error("Rendered more hooks than during the previous render");
+      return { memoizedState: null, queue: null, next: null };
+    }
+    function createWorkInProgressHook() {
+      null === workInProgressHook
+        ? null === firstWorkInProgressHook
+          ? ((isReRender = !1),
+            (firstWorkInProgressHook = workInProgressHook = createHook()))
+          : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+        : null === workInProgressHook.next
+          ? ((isReRender = !1),
+            (workInProgressHook = workInProgressHook.next = createHook()))
+          : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+      return workInProgressHook;
+    }
+    function getThenableStateAfterSuspending() {
+      var state = thenableState;
+      thenableState = null;
+      return state;
+    }
+    function resetHooksState() {
+      isInHookUserCodeInDev = !1;
+      currentlyRenderingKeyPath =
+        currentlyRenderingRequest =
+        currentlyRenderingTask =
+        currentlyRenderingComponent =
+          null;
+      didScheduleRenderPhaseUpdate = !1;
+      firstWorkInProgressHook = null;
+      numberOfReRenders = 0;
+      workInProgressHook = renderPhaseUpdates = null;
+    }
+    function readContext(context) {
+      isInHookUserCodeInDev &&
+        console.error(
+          "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+        );
+      return context._currentValue;
+    }
+    function basicStateReducer(state, action) {
+      return "function" === typeof action ? action(state) : action;
+    }
+    function useReducer(reducer, initialArg, init) {
+      reducer !== basicStateReducer && (currentHookNameInDev = "useReducer");
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      if (isReRender) {
+        init = workInProgressHook.queue;
+        initialArg = init.dispatch;
+        if (null !== renderPhaseUpdates) {
+          var firstRenderPhaseUpdate = renderPhaseUpdates.get(init);
+          if (void 0 !== firstRenderPhaseUpdate) {
+            renderPhaseUpdates.delete(init);
+            init = workInProgressHook.memoizedState;
+            do {
+              var action = firstRenderPhaseUpdate.action;
+              isInHookUserCodeInDev = !0;
+              init = reducer(init, action);
+              isInHookUserCodeInDev = !1;
+              firstRenderPhaseUpdate = firstRenderPhaseUpdate.next;
+            } while (null !== firstRenderPhaseUpdate);
+            workInProgressHook.memoizedState = init;
+            return [init, initialArg];
+          }
+        }
+        return [workInProgressHook.memoizedState, initialArg];
+      }
+      isInHookUserCodeInDev = !0;
+      reducer =
+        reducer === basicStateReducer
+          ? "function" === typeof initialArg
+            ? initialArg()
+            : initialArg
+          : void 0 !== init
+            ? init(initialArg)
+            : initialArg;
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = reducer;
+      reducer = workInProgressHook.queue = { last: null, dispatch: null };
+      reducer = reducer.dispatch = dispatchAction.bind(
+        null,
+        currentlyRenderingComponent,
+        reducer
+      );
+      return [workInProgressHook.memoizedState, reducer];
+    }
+    function useMemo(nextCreate, deps) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      if (null !== workInProgressHook) {
+        var prevState = workInProgressHook.memoizedState;
+        if (null !== prevState && null !== deps) {
+          a: {
+            var JSCompiler_inline_result = prevState[1];
+            if (null === JSCompiler_inline_result)
+              console.error(
+                "%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",
+                currentHookNameInDev
+              ),
+                (JSCompiler_inline_result = !1);
+            else {
+              deps.length !== JSCompiler_inline_result.length &&
+                console.error(
+                  "The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s",
+                  currentHookNameInDev,
+                  "[" + deps.join(", ") + "]",
+                  "[" + JSCompiler_inline_result.join(", ") + "]"
+                );
+              for (
+                var i = 0;
+                i < JSCompiler_inline_result.length && i < deps.length;
+                i++
+              )
+                if (!objectIs(deps[i], JSCompiler_inline_result[i])) {
+                  JSCompiler_inline_result = !1;
+                  break a;
+                }
+              JSCompiler_inline_result = !0;
+            }
+          }
+          if (JSCompiler_inline_result) return prevState[0];
+        }
+      }
+      isInHookUserCodeInDev = !0;
+      nextCreate = nextCreate();
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = [nextCreate, deps];
+      return nextCreate;
+    }
+    function dispatchAction(componentIdentity, queue, action) {
+      if (25 <= numberOfReRenders)
+        throw Error(
+          "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+        );
+      if (componentIdentity === currentlyRenderingComponent)
+        if (
+          ((didScheduleRenderPhaseUpdate = !0),
+          (componentIdentity = { action: action, next: null }),
+          null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+          (action = renderPhaseUpdates.get(queue)),
+          void 0 === action)
+        )
+          renderPhaseUpdates.set(queue, componentIdentity);
+        else {
+          for (queue = action; null !== queue.next; ) queue = queue.next;
+          queue.next = componentIdentity;
+        }
+    }
+    function unsupportedStartTransition() {
+      throw Error("startTransition cannot be called during server rendering.");
+    }
+    function unsupportedSetOptimisticState() {
+      throw Error("Cannot update optimistic state while rendering.");
+    }
+    function useActionState(action, initialState, permalink) {
+      resolveCurrentlyRenderingComponent();
+      var actionStateHookIndex = actionStateCounter++,
+        request = currentlyRenderingRequest;
+      if ("function" === typeof action.$$FORM_ACTION) {
+        var nextPostbackStateKey = null,
+          componentKeyPath = currentlyRenderingKeyPath;
+        request = request.formState;
+        var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+        if (null !== request && "function" === typeof isSignatureEqual) {
+          var postbackKey = request[1];
+          isSignatureEqual.call(action, request[2], request[3]) &&
+            ((nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  murmurhash3_32_gc(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ]),
+                    0
+                  )),
+            postbackKey === nextPostbackStateKey &&
+              ((actionStateMatchingIndex = actionStateHookIndex),
+              (initialState = request[0])));
+        }
+        var boundAction = action.bind(null, initialState);
+        action = function (payload) {
+          boundAction(payload);
+        };
+        "function" === typeof boundAction.$$FORM_ACTION &&
+          (action.$$FORM_ACTION = function (prefix) {
+            prefix = boundAction.$$FORM_ACTION(prefix);
+            void 0 !== permalink &&
+              (checkAttributeStringCoercion(permalink, "target"),
+              (permalink += ""),
+              (prefix.action = permalink));
+            var formData = prefix.data;
+            formData &&
+              (null === nextPostbackStateKey &&
+                (nextPostbackStateKey =
+                  void 0 !== permalink
+                    ? "p" + permalink
+                    : "k" +
+                      murmurhash3_32_gc(
+                        JSON.stringify([
+                          componentKeyPath,
+                          null,
+                          actionStateHookIndex
+                        ]),
+                        0
+                      )),
+              formData.append("$ACTION_KEY", nextPostbackStateKey));
+            return prefix;
+          });
+        return [initialState, action, !1];
+      }
+      var _boundAction = action.bind(null, initialState);
+      return [
+        initialState,
+        function (payload) {
+          _boundAction(payload);
+        },
+        !1
+      ];
+    }
+    function unwrapThenable(thenable) {
+      var index = thenableIndexCounter;
+      thenableIndexCounter += 1;
+      null === thenableState && (thenableState = []);
+      return trackUsedThenable(thenableState, thenable, index);
+    }
+    function unsupportedRefresh() {
+      throw Error("Cache cannot be refreshed during server rendering.");
+    }
+    function noop$1() {}
+    function disabledLog() {}
+    function disableLogs() {
+      if (0 === disabledDepth) {
+        prevLog = console.log;
+        prevInfo = console.info;
+        prevWarn = console.warn;
+        prevError = console.error;
+        prevGroup = console.group;
+        prevGroupCollapsed = console.groupCollapsed;
+        prevGroupEnd = console.groupEnd;
+        var props = {
+          configurable: !0,
+          enumerable: !0,
+          value: disabledLog,
+          writable: !0
+        };
+        Object.defineProperties(console, {
+          info: props,
+          log: props,
+          warn: props,
+          error: props,
+          group: props,
+          groupCollapsed: props,
+          groupEnd: props
+        });
+      }
+      disabledDepth++;
+    }
+    function reenableLogs() {
+      disabledDepth--;
+      if (0 === disabledDepth) {
+        var props = { configurable: !0, enumerable: !0, writable: !0 };
+        Object.defineProperties(console, {
+          log: assign({}, props, { value: prevLog }),
+          info: assign({}, props, { value: prevInfo }),
+          warn: assign({}, props, { value: prevWarn }),
+          error: assign({}, props, { value: prevError }),
+          group: assign({}, props, { value: prevGroup }),
+          groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
+          groupEnd: assign({}, props, { value: prevGroupEnd })
+        });
+      }
+      0 > disabledDepth &&
+        console.error(
+          "disabledDepth fell below zero. This is a bug in React. Please file an issue."
+        );
+    }
+    function prepareStackTrace(error, structuredStackTrace) {
+      error = (error.name || "Error") + ": " + (error.message || "");
+      for (var i = 0; i < structuredStackTrace.length; i++)
+        error += "\n    at " + structuredStackTrace[i].toString();
+      return error;
+    }
+    function describeBuiltInComponentFrame(name) {
+      if (void 0 === prefix)
+        try {
+          throw Error();
+        } catch (x) {
+          var match = x.stack.trim().match(/\n( *(at )?)/);
+          prefix = (match && match[1]) || "";
+          suffix =
+            -1 < x.stack.indexOf("\n    at")
+              ? " (<anonymous>)"
+              : -1 < x.stack.indexOf("@")
+                ? "@unknown:0:0"
+                : "";
+        }
+      return "\n" + prefix + name + suffix;
+    }
+    function describeNativeComponentFrame(fn, construct) {
+      if (!fn || reentry) return "";
+      var frame = componentFrameCache.get(fn);
+      if (void 0 !== frame) return frame;
+      reentry = !0;
+      frame = Error.prepareStackTrace;
+      Error.prepareStackTrace = prepareStackTrace;
+      var previousDispatcher = null;
+      previousDispatcher = ReactSharedInternals.H;
+      ReactSharedInternals.H = null;
+      disableLogs();
+      try {
+        var RunInRootFrame = {
+          DetermineComponentFrameRoot: function () {
+            try {
+              if (construct) {
+                var Fake = function () {
+                  throw Error();
+                };
+                Object.defineProperty(Fake.prototype, "props", {
+                  set: function () {
+                    throw Error();
+                  }
+                });
+                if ("object" === typeof Reflect && Reflect.construct) {
+                  try {
+                    Reflect.construct(Fake, []);
+                  } catch (x) {
+                    var control = x;
+                  }
+                  Reflect.construct(fn, [], Fake);
+                } else {
+                  try {
+                    Fake.call();
+                  } catch (x$0) {
+                    control = x$0;
+                  }
+                  fn.call(Fake.prototype);
+                }
+              } else {
+                try {
+                  throw Error();
+                } catch (x$1) {
+                  control = x$1;
+                }
+                (Fake = fn()) &&
+                  "function" === typeof Fake.catch &&
+                  Fake.catch(function () {});
+              }
+            } catch (sample) {
+              if (sample && control && "string" === typeof sample.stack)
+                return [sample.stack, control.stack];
+            }
+            return [null, null];
+          }
+        };
+        RunInRootFrame.DetermineComponentFrameRoot.displayName =
+          "DetermineComponentFrameRoot";
+        var namePropDescriptor = Object.getOwnPropertyDescriptor(
+          RunInRootFrame.DetermineComponentFrameRoot,
+          "name"
+        );
+        namePropDescriptor &&
+          namePropDescriptor.configurable &&
+          Object.defineProperty(
+            RunInRootFrame.DetermineComponentFrameRoot,
+            "name",
+            { value: "DetermineComponentFrameRoot" }
+          );
+        var _RunInRootFrame$Deter =
+            RunInRootFrame.DetermineComponentFrameRoot(),
+          sampleStack = _RunInRootFrame$Deter[0],
+          controlStack = _RunInRootFrame$Deter[1];
+        if (sampleStack && controlStack) {
+          var sampleLines = sampleStack.split("\n"),
+            controlLines = controlStack.split("\n");
+          for (
+            _RunInRootFrame$Deter = namePropDescriptor = 0;
+            namePropDescriptor < sampleLines.length &&
+            !sampleLines[namePropDescriptor].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            namePropDescriptor++;
+          for (
+            ;
+            _RunInRootFrame$Deter < controlLines.length &&
+            !controlLines[_RunInRootFrame$Deter].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            _RunInRootFrame$Deter++;
+          if (
+            namePropDescriptor === sampleLines.length ||
+            _RunInRootFrame$Deter === controlLines.length
+          )
+            for (
+              namePropDescriptor = sampleLines.length - 1,
+                _RunInRootFrame$Deter = controlLines.length - 1;
+              1 <= namePropDescriptor &&
+              0 <= _RunInRootFrame$Deter &&
+              sampleLines[namePropDescriptor] !==
+                controlLines[_RunInRootFrame$Deter];
+
+            )
+              _RunInRootFrame$Deter--;
+          for (
+            ;
+            1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;
+            namePropDescriptor--, _RunInRootFrame$Deter--
+          )
+            if (
+              sampleLines[namePropDescriptor] !==
+              controlLines[_RunInRootFrame$Deter]
+            ) {
+              if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {
+                do
+                  if (
+                    (namePropDescriptor--,
+                    _RunInRootFrame$Deter--,
+                    0 > _RunInRootFrame$Deter ||
+                      sampleLines[namePropDescriptor] !==
+                        controlLines[_RunInRootFrame$Deter])
+                  ) {
+                    var _frame =
+                      "\n" +
+                      sampleLines[namePropDescriptor].replace(
+                        " at new ",
+                        " at "
+                      );
+                    fn.displayName &&
+                      _frame.includes("<anonymous>") &&
+                      (_frame = _frame.replace("<anonymous>", fn.displayName));
+                    "function" === typeof fn &&
+                      componentFrameCache.set(fn, _frame);
+                    return _frame;
+                  }
+                while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
+              }
+              break;
+            }
+        }
+      } finally {
+        (reentry = !1),
+          (ReactSharedInternals.H = previousDispatcher),
+          reenableLogs(),
+          (Error.prepareStackTrace = frame);
+      }
+      sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "")
+        ? describeBuiltInComponentFrame(sampleLines)
+        : "";
+      "function" === typeof fn && componentFrameCache.set(fn, sampleLines);
+      return sampleLines;
+    }
+    function formatOwnerStack(error) {
+      var prevPrepareStackTrace = Error.prepareStackTrace;
+      Error.prepareStackTrace = prepareStackTrace;
+      error = error.stack;
+      Error.prepareStackTrace = prevPrepareStackTrace;
+      error.startsWith("Error: react-stack-top-frame\n") &&
+        (error = error.slice(29));
+      prevPrepareStackTrace = error.indexOf("\n");
+      -1 !== prevPrepareStackTrace &&
+        (error = error.slice(prevPrepareStackTrace + 1));
+      prevPrepareStackTrace = error.indexOf("react_stack_bottom_frame");
+      -1 !== prevPrepareStackTrace &&
+        (prevPrepareStackTrace = error.lastIndexOf(
+          "\n",
+          prevPrepareStackTrace
+        ));
+      if (-1 !== prevPrepareStackTrace)
+        error = error.slice(0, prevPrepareStackTrace);
+      else return "";
+      return error;
+    }
+    function describeComponentStackByType(type) {
+      if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+      if ("function" === typeof type)
+        return type.prototype && type.prototype.isReactComponent
+          ? describeNativeComponentFrame(type, !0)
+          : describeNativeComponentFrame(type, !1);
+      if ("object" === typeof type && null !== type) {
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeNativeComponentFrame(type.render, !1);
+          case REACT_MEMO_TYPE:
+            return describeNativeComponentFrame(type.type, !1);
+          case REACT_LAZY_TYPE:
+            var lazyComponent = type,
+              payload = lazyComponent._payload;
+            lazyComponent = lazyComponent._init;
+            try {
+              type = lazyComponent(payload);
+            } catch (x) {
+              return describeBuiltInComponentFrame("Lazy");
+            }
+            return describeComponentStackByType(type);
+        }
+        if ("string" === typeof type.name)
+          return (
+            (payload = type.env),
+            describeBuiltInComponentFrame(
+              type.name + (payload ? " [" + payload + "]" : "")
+            )
+          );
+      }
+      switch (type) {
+        case REACT_SUSPENSE_LIST_TYPE:
+          return describeBuiltInComponentFrame("SuspenseList");
+        case REACT_SUSPENSE_TYPE:
+          return describeBuiltInComponentFrame("Suspense");
+      }
+      return "";
+    }
+    function defaultErrorHandler(error) {
+      if (
+        "object" === typeof error &&
+        null !== error &&
+        "string" === typeof error.environmentName
+      ) {
+        var JSCompiler_inline_result = error.environmentName;
+        error = [error].slice(0);
+        "string" === typeof error[0]
+          ? error.splice(
+              0,
+              1,
+              "\u001b[0m\u001b[7m%c%s\u001b[0m%c " + error[0],
+              "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+              " " + JSCompiler_inline_result + " ",
+              ""
+            )
+          : error.splice(
+              0,
+              0,
+              "\u001b[0m\u001b[7m%c%s\u001b[0m%c ",
+              "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+              " " + JSCompiler_inline_result + " ",
+              ""
+            );
+        error.unshift(console);
+        JSCompiler_inline_result = bind.apply(console.error, error);
+        JSCompiler_inline_result();
+      } else console.error(error);
+      return null;
+    }
+    function noop() {}
+    function RequestInstance(
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var abortSet = new Set();
+      this.destination = null;
+      this.flushScheduled = !1;
+      this.resumableState = resumableState;
+      this.renderState = renderState;
+      this.rootFormatContext = rootFormatContext;
+      this.progressiveChunkSize =
+        void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+      this.status = 10;
+      this.fatalError = null;
+      this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+      this.completedPreambleSegments = this.completedRootSegment = null;
+      this.abortableTasks = abortSet;
+      this.pingedTasks = [];
+      this.clientRenderedBoundaries = [];
+      this.completedBoundaries = [];
+      this.partialBoundaries = [];
+      this.trackedPostpones = null;
+      this.onError = void 0 === onError ? defaultErrorHandler : onError;
+      this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+      this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+      this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+      this.onShellError = void 0 === onShellError ? noop : onShellError;
+      this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+      this.formState = void 0 === formState ? null : formState;
+      this.didWarnForKey = null;
+    }
+    function createRequest(
+      children,
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var now = getCurrentTime();
+      1e3 < now - lastResetTime &&
+        ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),
+        (lastResetTime = now));
+      resumableState = new RequestInstance(
+        resumableState,
+        renderState,
+        rootFormatContext,
+        progressiveChunkSize,
+        onError,
+        onAllReady,
+        onShellReady,
+        onShellError,
+        onFatalError,
+        onPostpone,
+        formState
+      );
+      renderState = createPendingSegment(
+        resumableState,
+        0,
+        null,
+        rootFormatContext,
+        !1,
+        !1
+      );
+      renderState.parentFlushed = !0;
+      children = createRenderTask(
+        resumableState,
+        null,
+        children,
+        -1,
+        null,
+        renderState,
+        null,
+        null,
+        resumableState.abortableTasks,
+        null,
+        rootFormatContext,
+        null,
+        emptyTreeContext,
+        null,
+        !1,
+        emptyContextObject,
+        null
+      );
+      pushComponentStack(children);
+      resumableState.pingedTasks.push(children);
+      return resumableState;
+    }
+    function createPrerenderRequest(
+      children,
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone
+    ) {
+      children = createRequest(
+        children,
+        resumableState,
+        renderState,
+        rootFormatContext,
+        progressiveChunkSize,
+        onError,
+        onAllReady,
+        onShellReady,
+        onShellError,
+        onFatalError,
+        onPostpone,
+        void 0
+      );
+      children.trackedPostpones = {
+        workingMap: new Map(),
+        rootNodes: [],
+        rootSlots: null
+      };
+      return children;
+    }
+    function resolveRequest() {
+      if (currentRequest) return currentRequest;
+      if (supportsRequestStorage) {
+        var store = requestStorage.getStore();
+        if (store) return store;
+      }
+      return null;
+    }
+    function pingTask(request, task) {
+      request.pingedTasks.push(task);
+      1 === request.pingedTasks.length &&
+        ((request.flushScheduled = null !== request.destination),
+        null !== request.trackedPostpones || 10 === request.status
+          ? scheduleMicrotask(function () {
+              return performWork(request);
+            })
+          : setTimeout(function () {
+              return performWork(request);
+            }, 0));
+    }
+    function createSuspenseBoundary(
+      request,
+      fallbackAbortableTasks,
+      contentPreamble,
+      fallbackPreamble
+    ) {
+      return {
+        status: PENDING,
+        rootSegmentID: -1,
+        parentFlushed: !1,
+        pendingTasks: 0,
+        completedSegments: [],
+        byteSize: 0,
+        fallbackAbortableTasks: fallbackAbortableTasks,
+        errorDigest: null,
+        contentState: createHoistableState(),
+        fallbackState: createHoistableState(),
+        contentPreamble: contentPreamble,
+        fallbackPreamble: fallbackPreamble,
+        trackedContentKeyPath: null,
+        trackedFallbackNode: null,
+        errorMessage: null,
+        errorStack: null,
+        errorComponentStack: null
+      };
+    }
+    function createRenderTask(
+      request,
+      thenableState,
+      node,
+      childIndex,
+      blockedBoundary,
+      blockedSegment,
+      blockedPreamble,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      var task = {
+        replay: null,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: blockedSegment,
+        blockedPreamble: blockedPreamble,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createReplayTask(
+      request,
+      thenableState,
+      replay,
+      node,
+      childIndex,
+      blockedBoundary,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      replay.pendingTasks++;
+      var task = {
+        replay: replay,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: null,
+        blockedPreamble: null,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createPendingSegment(
+      request,
+      index,
+      boundary,
+      parentFormatContext,
+      lastPushedText,
+      textEmbedded
+    ) {
+      return {
+        status: PENDING,
+        parentFlushed: !1,
+        id: -1,
+        index: index,
+        chunks: [],
+        children: [],
+        preambleChildren: [],
+        parentFormatContext: parentFormatContext,
+        boundary: boundary,
+        lastPushedText: lastPushedText,
+        textEmbedded: textEmbedded
+      };
+    }
+    function getCurrentStackInDEV() {
+      if (null === currentTaskInDEV || null === currentTaskInDEV.componentStack)
+        return "";
+      var componentStack = currentTaskInDEV.componentStack;
+      try {
+        var info = "";
+        if ("string" === typeof componentStack.type)
+          info += describeBuiltInComponentFrame(componentStack.type);
+        else if ("function" === typeof componentStack.type) {
+          if (!componentStack.owner) {
+            var JSCompiler_temp_const = info,
+              fn = componentStack.type,
+              name = fn ? fn.displayName || fn.name : "";
+            var JSCompiler_inline_result = name
+              ? describeBuiltInComponentFrame(name)
+              : "";
+            info = JSCompiler_temp_const + JSCompiler_inline_result;
+          }
+        } else
+          componentStack.owner ||
+            (info += describeComponentStackByType(componentStack.type));
+        for (; componentStack; )
+          (JSCompiler_temp_const = null),
+            null != componentStack.debugStack
+              ? (JSCompiler_temp_const = formatOwnerStack(
+                  componentStack.debugStack
+                ))
+              : ((JSCompiler_inline_result = componentStack),
+                null != JSCompiler_inline_result.stack &&
+                  (JSCompiler_temp_const =
+                    "string" !== typeof JSCompiler_inline_result.stack
+                      ? (JSCompiler_inline_result.stack = formatOwnerStack(
+                          JSCompiler_inline_result.stack
+                        ))
+                      : JSCompiler_inline_result.stack)),
+            (componentStack = componentStack.owner) &&
+              JSCompiler_temp_const &&
+              (info += "\n" + JSCompiler_temp_const);
+        var JSCompiler_inline_result$jscomp$0 = info;
+      } catch (x) {
+        JSCompiler_inline_result$jscomp$0 =
+          "\nError generating stack: " + x.message + "\n" + x.stack;
+      }
+      return JSCompiler_inline_result$jscomp$0;
+    }
+    function pushServerComponentStack(task, debugInfo) {
+      if (null != debugInfo)
+        for (var i = 0; i < debugInfo.length; i++) {
+          var componentInfo = debugInfo[i];
+          "string" === typeof componentInfo.name &&
+            void 0 !== componentInfo.debugStack &&
+            ((task.componentStack = {
+              parent: task.componentStack,
+              type: componentInfo,
+              owner: componentInfo.owner,
+              stack: componentInfo.debugStack
+            }),
+            (task.debugTask = componentInfo.debugTask));
+        }
+    }
+    function pushComponentStack(task) {
+      var node = task.node;
+      if ("object" === typeof node && null !== node)
+        switch (node.$$typeof) {
+          case REACT_ELEMENT_TYPE:
+            var type = node.type,
+              owner = node._owner,
+              stack = node._debugStack;
+            pushServerComponentStack(task, node._debugInfo);
+            task.debugTask = node._debugTask;
+            task.componentStack = {
+              parent: task.componentStack,
+              type: type,
+              owner: owner,
+              stack: stack
+            };
+            break;
+          case REACT_LAZY_TYPE:
+            pushServerComponentStack(task, node._debugInfo);
+            break;
+          default:
+            "function" === typeof node.then &&
+              pushServerComponentStack(task, node._debugInfo);
+        }
+    }
+    function getThrownInfo(node$jscomp$0) {
+      var errorInfo = {};
+      node$jscomp$0 &&
+        Object.defineProperty(errorInfo, "componentStack", {
+          configurable: !0,
+          enumerable: !0,
+          get: function () {
+            try {
+              var info = "",
+                node = node$jscomp$0;
+              do
+                (info += describeComponentStackByType(node.type)),
+                  (node = node.parent);
+              while (node);
+              var stack = info;
+            } catch (x) {
+              stack = "\nError generating stack: " + x.message + "\n" + x.stack;
+            }
+            Object.defineProperty(errorInfo, "componentStack", {
+              value: stack
+            });
+            return stack;
+          }
+        });
+      return errorInfo;
+    }
+    function encodeErrorForBoundary(
+      boundary,
+      digest,
+      error,
+      thrownInfo,
+      wasAborted
+    ) {
+      boundary.errorDigest = digest;
+      error instanceof Error
+        ? ((digest = String(error.message)), (error = String(error.stack)))
+        : ((digest =
+            "object" === typeof error && null !== error
+              ? describeObjectForErrorMessage(error)
+              : String(error)),
+          (error = null));
+      wasAborted = wasAborted
+        ? "Switched to client rendering because the server rendering aborted due to:\n\n"
+        : "Switched to client rendering because the server rendering errored:\n\n";
+      boundary.errorMessage = wasAborted + digest;
+      boundary.errorStack = null !== error ? wasAborted + error : null;
+      boundary.errorComponentStack = thrownInfo.componentStack;
+    }
+    function logRecoverableError(request, error, errorInfo, debugTask) {
+      request = request.onError;
+      error = debugTask
+        ? debugTask.run(request.bind(null, error, errorInfo))
+        : request(error, errorInfo);
+      if (null != error && "string" !== typeof error)
+        console.error(
+          'onError returned something with a type other than "string". onError should return a string and may return null or undefined but must not return anything else. It received something of type "%s" instead',
+          typeof error
+        );
+      else return error;
+    }
+    function fatalError(request, error, errorInfo, debugTask) {
+      errorInfo = request.onShellError;
+      var onFatalError = request.onFatalError;
+      debugTask
+        ? (debugTask.run(errorInfo.bind(null, error)),
+          debugTask.run(onFatalError.bind(null, error)))
+        : (errorInfo(error), onFatalError(error));
+      null !== request.destination
+        ? ((request.status = CLOSED),
+          closeWithError(request.destination, error))
+        : ((request.status = 13), (request.fatalError = error));
+    }
+    function renderWithHooks(
+      request,
+      task,
+      keyPath,
+      Component,
+      props,
+      secondArg
+    ) {
+      var prevThenableState = task.thenableState;
+      task.thenableState = null;
+      currentlyRenderingComponent = {};
+      currentlyRenderingTask = task;
+      currentlyRenderingRequest = request;
+      currentlyRenderingKeyPath = keyPath;
+      isInHookUserCodeInDev = !1;
+      actionStateCounter = localIdCounter = 0;
+      actionStateMatchingIndex = -1;
+      thenableIndexCounter = 0;
+      thenableState = prevThenableState;
+      for (
+        request = callComponentInDEV(Component, props, secondArg);
+        didScheduleRenderPhaseUpdate;
+
+      )
+        (didScheduleRenderPhaseUpdate = !1),
+          (actionStateCounter = localIdCounter = 0),
+          (actionStateMatchingIndex = -1),
+          (thenableIndexCounter = 0),
+          (numberOfReRenders += 1),
+          (workInProgressHook = null),
+          (request = Component(props, secondArg));
+      resetHooksState();
+      return request;
+    }
+    function finishFunctionComponent(
+      request,
+      task,
+      keyPath,
+      children,
+      hasId,
+      actionStateCount,
+      actionStateMatchingIndex
+    ) {
+      var didEmitActionStateMarkers = !1;
+      if (0 !== actionStateCount && null !== request.formState) {
+        var segment = task.blockedSegment;
+        if (null !== segment) {
+          didEmitActionStateMarkers = !0;
+          segment = segment.chunks;
+          for (var i = 0; i < actionStateCount; i++)
+            i === actionStateMatchingIndex
+              ? segment.push(formStateMarkerIsMatching)
+              : segment.push(formStateMarkerIsNotMatching);
+        }
+      }
+      actionStateCount = task.keyPath;
+      task.keyPath = keyPath;
+      hasId
+        ? ((keyPath = task.treeContext),
+          (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+          renderNode(request, task, children, -1),
+          (task.treeContext = keyPath))
+        : didEmitActionStateMarkers
+          ? renderNode(request, task, children, -1)
+          : renderNodeDestructive(request, task, children, -1);
+      task.keyPath = actionStateCount;
+    }
+    function renderElement(request, task, keyPath, type, props, ref) {
+      if ("function" === typeof type)
+        if (type.prototype && type.prototype.isReactComponent) {
+          var newProps = props;
+          if ("ref" in props) {
+            newProps = {};
+            for (var propName in props)
+              "ref" !== propName && (newProps[propName] = props[propName]);
+          }
+          var defaultProps = type.defaultProps;
+          if (defaultProps) {
+            newProps === props && (newProps = assign({}, newProps, props));
+            for (var _propName in defaultProps)
+              void 0 === newProps[_propName] &&
+                (newProps[_propName] = defaultProps[_propName]);
+          }
+          var resolvedProps = newProps;
+          var context = emptyContextObject,
+            contextType = type.contextType;
+          if (
+            "contextType" in type &&
+            null !== contextType &&
+            (void 0 === contextType ||
+              contextType.$$typeof !== REACT_CONTEXT_TYPE) &&
+            !didWarnAboutInvalidateContextType.has(type)
+          ) {
+            didWarnAboutInvalidateContextType.add(type);
+            var addendum =
+              void 0 === contextType
+                ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file."
+                : "object" !== typeof contextType
+                  ? " However, it is set to a " + typeof contextType + "."
+                  : contextType.$$typeof === REACT_CONSUMER_TYPE
+                    ? " Did you accidentally pass the Context.Consumer instead?"
+                    : " However, it is set to an object with keys {" +
+                      Object.keys(contextType).join(", ") +
+                      "}.";
+            console.error(
+              "%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",
+              getComponentNameFromType(type) || "Component",
+              addendum
+            );
+          }
+          "object" === typeof contextType &&
+            null !== contextType &&
+            (context = contextType._currentValue);
+          var instance = new type(resolvedProps, context);
+          if (
+            "function" === typeof type.getDerivedStateFromProps &&
+            (null === instance.state || void 0 === instance.state)
+          ) {
+            var componentName = getComponentNameFromType(type) || "Component";
+            didWarnAboutUninitializedState.has(componentName) ||
+              (didWarnAboutUninitializedState.add(componentName),
+              console.error(
+                "`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",
+                componentName,
+                null === instance.state ? "null" : "undefined",
+                componentName
+              ));
+          }
+          if (
+            "function" === typeof type.getDerivedStateFromProps ||
+            "function" === typeof instance.getSnapshotBeforeUpdate
+          ) {
+            var foundWillMountName = null,
+              foundWillReceivePropsName = null,
+              foundWillUpdateName = null;
+            "function" === typeof instance.componentWillMount &&
+            !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ? (foundWillMountName = "componentWillMount")
+              : "function" === typeof instance.UNSAFE_componentWillMount &&
+                (foundWillMountName = "UNSAFE_componentWillMount");
+            "function" === typeof instance.componentWillReceiveProps &&
+            !0 !==
+              instance.componentWillReceiveProps.__suppressDeprecationWarning
+              ? (foundWillReceivePropsName = "componentWillReceiveProps")
+              : "function" ===
+                  typeof instance.UNSAFE_componentWillReceiveProps &&
+                (foundWillReceivePropsName =
+                  "UNSAFE_componentWillReceiveProps");
+            "function" === typeof instance.componentWillUpdate &&
+            !0 !== instance.componentWillUpdate.__suppressDeprecationWarning
+              ? (foundWillUpdateName = "componentWillUpdate")
+              : "function" === typeof instance.UNSAFE_componentWillUpdate &&
+                (foundWillUpdateName = "UNSAFE_componentWillUpdate");
+            if (
+              null !== foundWillMountName ||
+              null !== foundWillReceivePropsName ||
+              null !== foundWillUpdateName
+            ) {
+              var _componentName =
+                  getComponentNameFromType(type) || "Component",
+                newApiName =
+                  "function" === typeof type.getDerivedStateFromProps
+                    ? "getDerivedStateFromProps()"
+                    : "getSnapshotBeforeUpdate()";
+              didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName) ||
+                (didWarnAboutLegacyLifecyclesAndDerivedState.add(
+                  _componentName
+                ),
+                console.error(
+                  "Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles",
+                  _componentName,
+                  newApiName,
+                  null !== foundWillMountName
+                    ? "\n  " + foundWillMountName
+                    : "",
+                  null !== foundWillReceivePropsName
+                    ? "\n  " + foundWillReceivePropsName
+                    : "",
+                  null !== foundWillUpdateName
+                    ? "\n  " + foundWillUpdateName
+                    : ""
+                ));
+            }
+          }
+          var name = getComponentNameFromType(type) || "Component";
+          instance.render ||
+            (type.prototype && "function" === typeof type.prototype.render
+              ? console.error(
+                  "No `render` method found on the %s instance: did you accidentally return an object from the constructor?",
+                  name
+                )
+              : console.error(
+                  "No `render` method found on the %s instance: you may have forgotten to define `render`.",
+                  name
+                ));
+          !instance.getInitialState ||
+            instance.getInitialState.isReactClassApproved ||
+            instance.state ||
+            console.error(
+              "getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",
+              name
+            );
+          instance.getDefaultProps &&
+            !instance.getDefaultProps.isReactClassApproved &&
+            console.error(
+              "getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",
+              name
+            );
+          instance.contextType &&
+            console.error(
+              "contextType was defined as an instance property on %s. Use a static property to define contextType instead.",
+              name
+            );
+          type.childContextTypes &&
+            !didWarnAboutChildContextTypes.has(type) &&
+            (didWarnAboutChildContextTypes.add(type),
+            console.error(
+              "%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          type.contextTypes &&
+            !didWarnAboutContextTypes$1.has(type) &&
+            (didWarnAboutContextTypes$1.add(type),
+            console.error(
+              "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          "function" === typeof instance.componentShouldUpdate &&
+            console.error(
+              "%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",
+              name
+            );
+          type.prototype &&
+            type.prototype.isPureReactComponent &&
+            "undefined" !== typeof instance.shouldComponentUpdate &&
+            console.error(
+              "%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",
+              getComponentNameFromType(type) || "A pure component"
+            );
+          "function" === typeof instance.componentDidUnmount &&
+            console.error(
+              "%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",
+              name
+            );
+          "function" === typeof instance.componentDidReceiveProps &&
+            console.error(
+              "%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",
+              name
+            );
+          "function" === typeof instance.componentWillRecieveProps &&
+            console.error(
+              "%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",
+              name
+            );
+          "function" === typeof instance.UNSAFE_componentWillRecieveProps &&
+            console.error(
+              "%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",
+              name
+            );
+          var hasMutatedProps = instance.props !== resolvedProps;
+          void 0 !== instance.props &&
+            hasMutatedProps &&
+            console.error(
+              "When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",
+              name
+            );
+          instance.defaultProps &&
+            console.error(
+              "Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",
+              name,
+              name
+            );
+          "function" !== typeof instance.getSnapshotBeforeUpdate ||
+            "function" === typeof instance.componentDidUpdate ||
+            didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(type) ||
+            (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(type),
+            console.error(
+              "%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",
+              getComponentNameFromType(type)
+            ));
+          "function" === typeof instance.getDerivedStateFromProps &&
+            console.error(
+              "%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof instance.getDerivedStateFromError &&
+            console.error(
+              "%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof type.getSnapshotBeforeUpdate &&
+            console.error(
+              "%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",
+              name
+            );
+          var state = instance.state;
+          state &&
+            ("object" !== typeof state || isArrayImpl(state)) &&
+            console.error("%s.state: must be set to an object or null", name);
+          "function" === typeof instance.getChildContext &&
+            "object" !== typeof type.childContextTypes &&
+            console.error(
+              "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",
+              name
+            );
+          var initialState = void 0 !== instance.state ? instance.state : null;
+          instance.updater = classComponentUpdater;
+          instance.props = resolvedProps;
+          instance.state = initialState;
+          var internalInstance = { queue: [], replace: !1 };
+          instance._reactInternals = internalInstance;
+          var contextType$jscomp$0 = type.contextType;
+          instance.context =
+            "object" === typeof contextType$jscomp$0 &&
+            null !== contextType$jscomp$0
+              ? contextType$jscomp$0._currentValue
+              : emptyContextObject;
+          if (instance.state === resolvedProps) {
+            var componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Component";
+            didWarnAboutDirectlyAssigningPropsToState.has(
+              componentName$jscomp$0
+            ) ||
+              (didWarnAboutDirectlyAssigningPropsToState.add(
+                componentName$jscomp$0
+              ),
+              console.error(
+                "%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",
+                componentName$jscomp$0
+              ));
+          }
+          var getDerivedStateFromProps = type.getDerivedStateFromProps;
+          if ("function" === typeof getDerivedStateFromProps) {
+            var partialState = getDerivedStateFromProps(
+              resolvedProps,
+              initialState
+            );
+            if (void 0 === partialState) {
+              var componentName$jscomp$1 =
+                getComponentNameFromType(type) || "Component";
+              didWarnAboutUndefinedDerivedState.has(componentName$jscomp$1) ||
+                (didWarnAboutUndefinedDerivedState.add(componentName$jscomp$1),
+                console.error(
+                  "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",
+                  componentName$jscomp$1
+                ));
+            }
+            var JSCompiler_inline_result =
+              null === partialState || void 0 === partialState
+                ? initialState
+                : assign({}, initialState, partialState);
+            instance.state = JSCompiler_inline_result;
+          }
+          if (
+            "function" !== typeof type.getDerivedStateFromProps &&
+            "function" !== typeof instance.getSnapshotBeforeUpdate &&
+            ("function" === typeof instance.UNSAFE_componentWillMount ||
+              "function" === typeof instance.componentWillMount)
+          ) {
+            var oldState = instance.state;
+            if ("function" === typeof instance.componentWillMount) {
+              if (
+                !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ) {
+                var componentName$jscomp$2 =
+                  getComponentNameFromType(type) || "Unknown";
+                didWarnAboutDeprecatedWillMount[componentName$jscomp$2] ||
+                  (console.warn(
+                    "componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code from componentWillMount to componentDidMount (preferred in most cases) or the constructor.\n\nPlease update the following components: %s",
+                    componentName$jscomp$2
+                  ),
+                  (didWarnAboutDeprecatedWillMount[componentName$jscomp$2] =
+                    !0));
+              }
+              instance.componentWillMount();
+            }
+            "function" === typeof instance.UNSAFE_componentWillMount &&
+              instance.UNSAFE_componentWillMount();
+            oldState !== instance.state &&
+              (console.error(
+                "%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+                getComponentNameFromType(type) || "Component"
+              ),
+              classComponentUpdater.enqueueReplaceState(
+                instance,
+                instance.state,
+                null
+              ));
+            if (
+              null !== internalInstance.queue &&
+              0 < internalInstance.queue.length
+            ) {
+              var oldQueue = internalInstance.queue,
+                oldReplace = internalInstance.replace;
+              internalInstance.queue = null;
+              internalInstance.replace = !1;
+              if (oldReplace && 1 === oldQueue.length)
+                instance.state = oldQueue[0];
+              else {
+                for (
+                  var nextState = oldReplace ? oldQueue[0] : instance.state,
+                    dontMutate = !0,
+                    i = oldReplace ? 1 : 0;
+                  i < oldQueue.length;
+                  i++
+                ) {
+                  var partial = oldQueue[i],
+                    partialState$jscomp$0 =
+                      "function" === typeof partial
+                        ? partial.call(
+                            instance,
+                            nextState,
+                            resolvedProps,
+                            void 0
+                          )
+                        : partial;
+                  null != partialState$jscomp$0 &&
+                    (dontMutate
+                      ? ((dontMutate = !1),
+                        (nextState = assign(
+                          {},
+                          nextState,
+                          partialState$jscomp$0
+                        )))
+                      : assign(nextState, partialState$jscomp$0));
+                }
+                instance.state = nextState;
+              }
+            } else internalInstance.queue = null;
+          }
+          var nextChildren = callRenderInDEV(instance);
+          if (12 === request.status) throw null;
+          instance.props !== resolvedProps &&
+            (didWarnAboutReassigningProps ||
+              console.error(
+                "It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",
+                getComponentNameFromType(type) || "a component"
+              ),
+            (didWarnAboutReassigningProps = !0));
+          var prevKeyPath = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, nextChildren, -1);
+          task.keyPath = prevKeyPath;
+        } else {
+          if (type.prototype && "function" === typeof type.prototype.render) {
+            var componentName$jscomp$3 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutBadClass[componentName$jscomp$3] ||
+              (console.error(
+                "The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",
+                componentName$jscomp$3,
+                componentName$jscomp$3
+              ),
+              (didWarnAboutBadClass[componentName$jscomp$3] = !0));
+          }
+          var value = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type,
+            props,
+            void 0
+          );
+          if (12 === request.status) throw null;
+          var hasId = 0 !== localIdCounter,
+            actionStateCount = actionStateCounter,
+            actionStateMatchingIndex$jscomp$0 = actionStateMatchingIndex;
+          if (type.contextTypes) {
+            var _componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypes[_componentName$jscomp$0] ||
+              ((didWarnAboutContextTypes[_componentName$jscomp$0] = !0),
+              console.error(
+                "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",
+                _componentName$jscomp$0
+              ));
+          }
+          type &&
+            type.childContextTypes &&
+            console.error(
+              "childContextTypes cannot be defined on a function component.\n  %s.childContextTypes = ...",
+              type.displayName || type.name || "Component"
+            );
+          if ("function" === typeof type.getDerivedStateFromProps) {
+            var _componentName2 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] ||
+              (console.error(
+                "%s: Function components do not support getDerivedStateFromProps.",
+                _componentName2
+              ),
+              (didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] =
+                !0));
+          }
+          if (
+            "object" === typeof type.contextType &&
+            null !== type.contextType
+          ) {
+            var _componentName3 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypeOnFunctionComponent[_componentName3] ||
+              (console.error(
+                "%s: Function components do not support contextType.",
+                _componentName3
+              ),
+              (didWarnAboutContextTypeOnFunctionComponent[_componentName3] =
+                !0));
+          }
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            value,
+            hasId,
+            actionStateCount,
+            actionStateMatchingIndex$jscomp$0
+          );
+        }
+      else if ("string" === typeof type) {
+        var segment = task.blockedSegment;
+        if (null === segment) {
+          var children = props.children,
+            prevContext = task.formatContext,
+            prevKeyPath$jscomp$0 = task.keyPath;
+          task.formatContext = getChildFormatContext(prevContext, type, props);
+          task.keyPath = keyPath;
+          renderNode(request, task, children, -1);
+          task.formatContext = prevContext;
+          task.keyPath = prevKeyPath$jscomp$0;
+        } else {
+          var _children = pushStartInstance(
+            segment.chunks,
+            type,
+            props,
+            request.resumableState,
+            request.renderState,
+            task.blockedPreamble,
+            task.hoistableState,
+            task.formatContext,
+            segment.lastPushedText,
+            task.isFallback
+          );
+          segment.lastPushedText = !1;
+          var _prevContext = task.formatContext,
+            _prevKeyPath2 = task.keyPath;
+          task.keyPath = keyPath;
+          if (
+            (task.formatContext = getChildFormatContext(
+              _prevContext,
+              type,
+              props
+            )).insertionMode === HTML_HEAD_MODE
+          ) {
+            var preambleSegment = createPendingSegment(
+              request,
+              0,
+              null,
+              task.formatContext,
+              !1,
+              !1
+            );
+            segment.preambleChildren.push(preambleSegment);
+            var preambleTask = createRenderTask(
+              request,
+              null,
+              _children,
+              -1,
+              task.blockedBoundary,
+              preambleSegment,
+              task.blockedPreamble,
+              task.hoistableState,
+              request.abortableTasks,
+              task.keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback,
+              emptyContextObject,
+              task.debugTask
+            );
+            pushComponentStack(preambleTask);
+            request.pingedTasks.push(preambleTask);
+          } else renderNode(request, task, _children, -1);
+          task.formatContext = _prevContext;
+          task.keyPath = _prevKeyPath2;
+          a: {
+            var target = segment.chunks,
+              resumableState = request.resumableState;
+            switch (type) {
+              case "title":
+              case "style":
+              case "script":
+              case "area":
+              case "base":
+              case "br":
+              case "col":
+              case "embed":
+              case "hr":
+              case "img":
+              case "input":
+              case "keygen":
+              case "link":
+              case "meta":
+              case "param":
+              case "source":
+              case "track":
+              case "wbr":
+                break a;
+              case "body":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) {
+                  resumableState.hasBody = !0;
+                  break a;
+                }
+                break;
+              case "html":
+                if (_prevContext.insertionMode === ROOT_HTML_MODE) {
+                  resumableState.hasHtml = !0;
+                  break a;
+                }
+                break;
+              case "head":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) break a;
+            }
+            target.push(endChunkForTag(type));
+          }
+          segment.lastPushedText = !1;
+        }
+      } else {
+        switch (type) {
+          case REACT_LEGACY_HIDDEN_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_FRAGMENT_TYPE:
+            var prevKeyPath$jscomp$1 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = prevKeyPath$jscomp$1;
+            return;
+          case REACT_ACTIVITY_TYPE:
+            if ("hidden" !== props.mode) {
+              var prevKeyPath$jscomp$2 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, props.children, -1);
+              task.keyPath = prevKeyPath$jscomp$2;
+            }
+            return;
+          case REACT_SUSPENSE_LIST_TYPE:
+            var _prevKeyPath3 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = _prevKeyPath3;
+            return;
+          case REACT_VIEW_TRANSITION_TYPE:
+          case REACT_SCOPE_TYPE:
+            throw Error(
+              "ReactDOMServer does not yet support scope components."
+            );
+          case REACT_SUSPENSE_TYPE:
+            a: if (null !== task.replay) {
+              var _prevKeyPath = task.keyPath;
+              task.keyPath = keyPath;
+              var _content = props.children;
+              try {
+                renderNode(request, task, _content, -1);
+              } finally {
+                task.keyPath = _prevKeyPath;
+              }
+            } else {
+              var prevKeyPath$jscomp$3 = task.keyPath,
+                parentBoundary = task.blockedBoundary,
+                parentPreamble = task.blockedPreamble,
+                parentHoistableState = task.hoistableState,
+                parentSegment = task.blockedSegment,
+                fallback = props.fallback,
+                content = props.children,
+                fallbackAbortSet = new Set();
+              var newBoundary =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              null !== request.trackedPostpones &&
+                (newBoundary.trackedContentKeyPath = keyPath);
+              var boundarySegment = createPendingSegment(
+                request,
+                parentSegment.chunks.length,
+                newBoundary,
+                task.formatContext,
+                !1,
+                !1
+              );
+              parentSegment.children.push(boundarySegment);
+              parentSegment.lastPushedText = !1;
+              var contentRootSegment = createPendingSegment(
+                request,
+                0,
+                null,
+                task.formatContext,
+                !1,
+                !1
+              );
+              contentRootSegment.parentFlushed = !0;
+              if (null !== request.trackedPostpones) {
+                var fallbackKeyPath = [
+                    keyPath[0],
+                    "Suspense Fallback",
+                    keyPath[2]
+                  ],
+                  fallbackReplayNode = [
+                    fallbackKeyPath[1],
+                    fallbackKeyPath[2],
+                    [],
+                    null
+                  ];
+                request.trackedPostpones.workingMap.set(
+                  fallbackKeyPath,
+                  fallbackReplayNode
+                );
+                newBoundary.trackedFallbackNode = fallbackReplayNode;
+                task.blockedSegment = boundarySegment;
+                task.blockedPreamble = newBoundary.fallbackPreamble;
+                task.keyPath = fallbackKeyPath;
+                boundarySegment.status = 6;
+                try {
+                  renderNode(request, task, fallback, -1),
+                    boundarySegment.lastPushedText &&
+                      boundarySegment.textEmbedded &&
+                      boundarySegment.chunks.push(textSeparator),
+                    (boundarySegment.status = COMPLETED);
+                } catch (thrownValue) {
+                  throw (
+                    ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                    thrownValue)
+                  );
+                } finally {
+                  (task.blockedSegment = parentSegment),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedPrimaryTask = createRenderTask(
+                  request,
+                  null,
+                  content,
+                  -1,
+                  newBoundary,
+                  contentRootSegment,
+                  newBoundary.contentPreamble,
+                  newBoundary.contentState,
+                  task.abortSet,
+                  keyPath,
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  task.isFallback,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedPrimaryTask);
+                request.pingedTasks.push(suspendedPrimaryTask);
+              } else {
+                task.blockedBoundary = newBoundary;
+                task.blockedPreamble = newBoundary.contentPreamble;
+                task.hoistableState = newBoundary.contentState;
+                task.blockedSegment = contentRootSegment;
+                task.keyPath = keyPath;
+                contentRootSegment.status = 6;
+                try {
+                  if (
+                    (renderNode(request, task, content, -1),
+                    contentRootSegment.lastPushedText &&
+                      contentRootSegment.textEmbedded &&
+                      contentRootSegment.chunks.push(textSeparator),
+                    (contentRootSegment.status = COMPLETED),
+                    queueCompletedSegment(newBoundary, contentRootSegment),
+                    0 === newBoundary.pendingTasks &&
+                      newBoundary.status === PENDING)
+                  ) {
+                    newBoundary.status = COMPLETED;
+                    0 === request.pendingRootTasks &&
+                      task.blockedPreamble &&
+                      preparePreamble(request);
+                    break a;
+                  }
+                } catch (thrownValue$2) {
+                  newBoundary.status = CLIENT_RENDERED;
+                  if (12 === request.status) {
+                    contentRootSegment.status = 3;
+                    var error = request.fatalError;
+                  } else
+                    (contentRootSegment.status = 4), (error = thrownValue$2);
+                  var thrownInfo = getThrownInfo(task.componentStack);
+                  var errorDigest = logRecoverableError(
+                    request,
+                    error,
+                    thrownInfo,
+                    task.debugTask
+                  );
+                  encodeErrorForBoundary(
+                    newBoundary,
+                    errorDigest,
+                    error,
+                    thrownInfo,
+                    !1
+                  );
+                  untrackBoundary(request, newBoundary);
+                } finally {
+                  (task.blockedBoundary = parentBoundary),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.hoistableState = parentHoistableState),
+                    (task.blockedSegment = parentSegment),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedFallbackTask = createRenderTask(
+                  request,
+                  null,
+                  fallback,
+                  -1,
+                  parentBoundary,
+                  boundarySegment,
+                  newBoundary.fallbackPreamble,
+                  newBoundary.fallbackState,
+                  fallbackAbortSet,
+                  [keyPath[0], "Suspense Fallback", keyPath[2]],
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  !0,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedFallbackTask);
+                request.pingedTasks.push(suspendedFallbackTask);
+              }
+            }
+            return;
+        }
+        if ("object" === typeof type && null !== type)
+          switch (type.$$typeof) {
+            case REACT_FORWARD_REF_TYPE:
+              if ("ref" in props) {
+                var propsWithoutRef = {};
+                for (var key in props)
+                  "ref" !== key && (propsWithoutRef[key] = props[key]);
+              } else propsWithoutRef = props;
+              var children$jscomp$0 = renderWithHooks(
+                request,
+                task,
+                keyPath,
+                type.render,
+                propsWithoutRef,
+                ref
+              );
+              finishFunctionComponent(
+                request,
+                task,
+                keyPath,
+                children$jscomp$0,
+                0 !== localIdCounter,
+                actionStateCounter,
+                actionStateMatchingIndex
+              );
+              return;
+            case REACT_MEMO_TYPE:
+              renderElement(request, task, keyPath, type.type, props, ref);
+              return;
+            case REACT_PROVIDER_TYPE:
+            case REACT_CONTEXT_TYPE:
+              var value$jscomp$0 = props.value,
+                children$jscomp$1 = props.children;
+              var prevSnapshot = task.context;
+              var prevKeyPath$jscomp$4 = task.keyPath;
+              var prevValue = type._currentValue;
+              type._currentValue = value$jscomp$0;
+              void 0 !== type._currentRenderer &&
+                null !== type._currentRenderer &&
+                type._currentRenderer !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer = rendererSigil;
+              var prevNode = currentActiveSnapshot,
+                newNode = {
+                  parent: prevNode,
+                  depth: null === prevNode ? 0 : prevNode.depth + 1,
+                  context: type,
+                  parentValue: prevValue,
+                  value: value$jscomp$0
+                };
+              currentActiveSnapshot = newNode;
+              task.context = newNode;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, children$jscomp$1, -1);
+              var prevSnapshot$jscomp$0 = currentActiveSnapshot;
+              if (null === prevSnapshot$jscomp$0)
+                throw Error(
+                  "Tried to pop a Context at the root of the app. This is a bug in React."
+                );
+              prevSnapshot$jscomp$0.context !== type &&
+                console.error(
+                  "The parent context is not the expected context. This is probably a bug in React."
+                );
+              prevSnapshot$jscomp$0.context._currentValue =
+                prevSnapshot$jscomp$0.parentValue;
+              void 0 !== type._currentRenderer &&
+                null !== type._currentRenderer &&
+                type._currentRenderer !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer = rendererSigil;
+              var JSCompiler_inline_result$jscomp$0 = (currentActiveSnapshot =
+                prevSnapshot$jscomp$0.parent);
+              task.context = JSCompiler_inline_result$jscomp$0;
+              task.keyPath = prevKeyPath$jscomp$4;
+              prevSnapshot !== task.context &&
+                console.error(
+                  "Popping the context provider did not return back to the original snapshot. This is a bug in React."
+                );
+              return;
+            case REACT_CONSUMER_TYPE:
+              var context$jscomp$0 = type._context,
+                render = props.children;
+              "function" !== typeof render &&
+                console.error(
+                  "A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."
+                );
+              var newChildren = render(context$jscomp$0._currentValue),
+                prevKeyPath$jscomp$5 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, newChildren, -1);
+              task.keyPath = prevKeyPath$jscomp$5;
+              return;
+            case REACT_LAZY_TYPE:
+              var Component = callLazyInitInDEV(type);
+              if (12 === request.status) throw null;
+              renderElement(request, task, keyPath, Component, props, ref);
+              return;
+          }
+        var info = "";
+        if (
+          void 0 === type ||
+          ("object" === typeof type &&
+            null !== type &&
+            0 === Object.keys(type).length)
+        )
+          info +=
+            " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
+        throw Error(
+          "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+            ((null == type ? type : typeof type) + "." + info)
+        );
+      }
+    }
+    function resumeNode(request, task, segmentId, node, childIndex) {
+      var prevReplay = task.replay,
+        blockedBoundary = task.blockedBoundary,
+        resumedSegment = createPendingSegment(
+          request,
+          0,
+          null,
+          task.formatContext,
+          !1,
+          !1
+        );
+      resumedSegment.id = segmentId;
+      resumedSegment.parentFlushed = !0;
+      try {
+        (task.replay = null),
+          (task.blockedSegment = resumedSegment),
+          renderNode(request, task, node, childIndex),
+          (resumedSegment.status = COMPLETED),
+          null === blockedBoundary
+            ? (request.completedRootSegment = resumedSegment)
+            : (queueCompletedSegment(blockedBoundary, resumedSegment),
+              blockedBoundary.parentFlushed &&
+                request.partialBoundaries.push(blockedBoundary));
+      } finally {
+        (task.replay = prevReplay), (task.blockedSegment = null);
+      }
+    }
+    function replayElement(
+      request,
+      task,
+      keyPath,
+      name,
+      keyOrIndex,
+      childIndex,
+      type,
+      props,
+      ref,
+      replay
+    ) {
+      childIndex = replay.nodes;
+      for (var i = 0; i < childIndex.length; i++) {
+        var node = childIndex[i];
+        if (keyOrIndex === node[1]) {
+          if (4 === node.length) {
+            if (null !== name && name !== node[0])
+              throw Error(
+                "Expected the resume to render <" +
+                  node[0] +
+                  "> in this slot but instead it rendered <" +
+                  name +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            var childNodes = node[2];
+            node = node[3];
+            name = task.node;
+            task.replay = { nodes: childNodes, slots: node, pendingTasks: 1 };
+            try {
+              renderElement(request, task, keyPath, type, props, ref);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw (task.node === name && (task.replay = replay), x);
+              task.replay.pendingTasks--;
+              type = getThrownInfo(task.componentStack);
+              props = request;
+              request = task.blockedBoundary;
+              keyPath = x;
+              ref = node;
+              node = logRecoverableError(props, keyPath, type, task.debugTask);
+              abortRemainingReplayNodes(
+                props,
+                request,
+                childNodes,
+                ref,
+                keyPath,
+                node,
+                type,
+                !1
+              );
+            }
+            task.replay = replay;
+          } else {
+            if (type !== REACT_SUSPENSE_TYPE)
+              throw Error(
+                "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+                  (getComponentNameFromType(type) || "Unknown") +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            a: {
+              replay = void 0;
+              type = node[5];
+              ref = node[2];
+              name = node[3];
+              keyOrIndex = null === node[4] ? [] : node[4][2];
+              node = null === node[4] ? null : node[4][3];
+              var prevKeyPath = task.keyPath,
+                previousReplaySet = task.replay,
+                parentBoundary = task.blockedBoundary,
+                parentHoistableState = task.hoistableState,
+                content = props.children,
+                fallback = props.fallback,
+                fallbackAbortSet = new Set();
+              props =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              props.parentFlushed = !0;
+              props.rootSegmentID = type;
+              task.blockedBoundary = props;
+              task.hoistableState = props.contentState;
+              task.keyPath = keyPath;
+              task.replay = { nodes: ref, slots: name, pendingTasks: 1 };
+              try {
+                renderNode(request, task, content, -1);
+                if (
+                  1 === task.replay.pendingTasks &&
+                  0 < task.replay.nodes.length
+                )
+                  throw Error(
+                    "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                  );
+                task.replay.pendingTasks--;
+                if (0 === props.pendingTasks && props.status === PENDING) {
+                  props.status = COMPLETED;
+                  request.completedBoundaries.push(props);
+                  break a;
+                }
+              } catch (error) {
+                (props.status = CLIENT_RENDERED),
+                  (childNodes = getThrownInfo(task.componentStack)),
+                  (replay = logRecoverableError(
+                    request,
+                    error,
+                    childNodes,
+                    task.debugTask
+                  )),
+                  encodeErrorForBoundary(props, replay, error, childNodes, !1),
+                  task.replay.pendingTasks--,
+                  request.clientRenderedBoundaries.push(props);
+              } finally {
+                (task.blockedBoundary = parentBoundary),
+                  (task.hoistableState = parentHoistableState),
+                  (task.replay = previousReplaySet),
+                  (task.keyPath = prevKeyPath);
+              }
+              props = createReplayTask(
+                request,
+                null,
+                { nodes: keyOrIndex, slots: node, pendingTasks: 0 },
+                fallback,
+                -1,
+                parentBoundary,
+                props.fallbackState,
+                fallbackAbortSet,
+                [keyPath[0], "Suspense Fallback", keyPath[2]],
+                task.formatContext,
+                task.context,
+                task.treeContext,
+                task.componentStack,
+                !0,
+                emptyContextObject,
+                task.debugTask
+              );
+              pushComponentStack(props);
+              request.pingedTasks.push(props);
+            }
+          }
+          childIndex.splice(i, 1);
+          break;
+        }
+      }
+    }
+    function renderNodeDestructive(request, task, node, childIndex) {
+      null !== task.replay && "number" === typeof task.replay.slots
+        ? resumeNode(request, task, task.replay.slots, node, childIndex)
+        : ((task.node = node),
+          (task.childIndex = childIndex),
+          (node = task.componentStack),
+          (childIndex = task.debugTask),
+          pushComponentStack(task),
+          retryNode(request, task),
+          (task.componentStack = node),
+          (task.debugTask = childIndex));
+    }
+    function retryNode(request, task) {
+      var node = task.node,
+        childIndex = task.childIndex;
+      if (null !== node) {
+        if ("object" === typeof node) {
+          switch (node.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              var type = node.type,
+                key = node.key;
+              node = node.props;
+              var refProp = node.ref;
+              refProp = void 0 !== refProp ? refProp : null;
+              var debugTask = task.debugTask,
+                name = getComponentNameFromType(type);
+              key = null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+              var keyPath = [task.keyPath, name, key];
+              null !== task.replay
+                ? debugTask
+                  ? debugTask.run(
+                      replayElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        name,
+                        key,
+                        childIndex,
+                        type,
+                        node,
+                        refProp,
+                        task.replay
+                      )
+                    )
+                  : replayElement(
+                      request,
+                      task,
+                      keyPath,
+                      name,
+                      key,
+                      childIndex,
+                      type,
+                      node,
+                      refProp,
+                      task.replay
+                    )
+                : debugTask
+                  ? debugTask.run(
+                      renderElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        type,
+                        node,
+                        refProp
+                      )
+                    )
+                  : renderElement(request, task, keyPath, type, node, refProp);
+              return;
+            case REACT_PORTAL_TYPE:
+              throw Error(
+                "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+              );
+            case REACT_LAZY_TYPE:
+              node = callLazyInitInDEV(node);
+              if (12 === request.status) throw null;
+              renderNodeDestructive(request, task, node, childIndex);
+              return;
+          }
+          if (isArrayImpl(node)) {
+            renderChildrenArray(request, task, node, childIndex);
+            return;
+          }
+          null === node || "object" !== typeof node
+            ? (key = null)
+            : ((type =
+                (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+                node["@@iterator"]),
+              (key = "function" === typeof type ? type : null));
+          if (key && (type = key.call(node))) {
+            if (type === node) {
+              if (
+                -1 !== childIndex ||
+                null === task.componentStack ||
+                "function" !== typeof task.componentStack.type ||
+                "[object GeneratorFunction]" !==
+                  Object.prototype.toString.call(task.componentStack.type) ||
+                "[object Generator]" !== Object.prototype.toString.call(type)
+              )
+                didWarnAboutGenerators ||
+                  console.error(
+                    "Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."
+                  ),
+                  (didWarnAboutGenerators = !0);
+            } else
+              node.entries !== key ||
+                didWarnAboutMaps ||
+                (console.error(
+                  "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+                ),
+                (didWarnAboutMaps = !0));
+            node = type.next();
+            if (!node.done) {
+              key = [];
+              do key.push(node.value), (node = type.next());
+              while (!node.done);
+              renderChildrenArray(request, task, key, childIndex);
+            }
+            return;
+          }
+          if ("function" === typeof node.then)
+            return (
+              (task.thenableState = null),
+              renderNodeDestructive(
+                request,
+                task,
+                unwrapThenable(node),
+                childIndex
+              )
+            );
+          if (node.$$typeof === REACT_CONTEXT_TYPE)
+            return renderNodeDestructive(
+              request,
+              task,
+              node._currentValue,
+              childIndex
+            );
+          request = Object.prototype.toString.call(node);
+          throw Error(
+            "Objects are not valid as a React child (found: " +
+              ("[object Object]" === request
+                ? "object with keys {" + Object.keys(node).join(", ") + "}"
+                : request) +
+              "). If you meant to render a collection of children, use an array instead."
+          );
+        }
+        "string" === typeof node
+          ? ((task = task.blockedSegment),
+            null !== task &&
+              (task.lastPushedText = pushTextInstance(
+                task.chunks,
+                node,
+                request.renderState,
+                task.lastPushedText
+              )))
+          : "number" === typeof node || "bigint" === typeof node
+            ? ((task = task.blockedSegment),
+              null !== task &&
+                (task.lastPushedText = pushTextInstance(
+                  task.chunks,
+                  "" + node,
+                  request.renderState,
+                  task.lastPushedText
+                )))
+            : ("function" === typeof node &&
+                ((request = node.displayName || node.name || "Component"),
+                console.error(
+                  "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.",
+                  request,
+                  request
+                )),
+              "symbol" === typeof node &&
+                console.error(
+                  "Symbols are not valid as a React child.\n  %s",
+                  String(node)
+                ));
+      }
+    }
+    function renderChildrenArray(request, task, children, childIndex) {
+      var prevKeyPath = task.keyPath,
+        previousComponentStack = task.componentStack;
+      var previousDebugTask = task.debugTask;
+      pushServerComponentStack(task, task.node._debugInfo);
+      if (
+        -1 !== childIndex &&
+        ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+        null !== task.replay)
+      ) {
+        for (
+          var replay = task.replay, replayNodes = replay.nodes, j = 0;
+          j < replayNodes.length;
+          j++
+        ) {
+          var node = replayNodes[j];
+          if (node[1] === childIndex) {
+            childIndex = node[2];
+            node = node[3];
+            task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+            try {
+              renderChildrenArray(request, task, children, -1);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw x;
+              task.replay.pendingTasks--;
+              var thrownInfo = getThrownInfo(task.componentStack);
+              children = task.blockedBoundary;
+              var error = x,
+                resumeSlots = node;
+              node = logRecoverableError(
+                request,
+                error,
+                thrownInfo,
+                task.debugTask
+              );
+              abortRemainingReplayNodes(
+                request,
+                children,
+                childIndex,
+                resumeSlots,
+                error,
+                node,
+                thrownInfo,
+                !1
+              );
+            }
+            task.replay = replay;
+            replayNodes.splice(j, 1);
+            break;
+          }
+        }
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      replay = task.treeContext;
+      replayNodes = children.length;
+      if (
+        null !== task.replay &&
+        ((j = task.replay.slots), null !== j && "object" === typeof j)
+      ) {
+        for (childIndex = 0; childIndex < replayNodes; childIndex++)
+          (node = children[childIndex]),
+            (task.treeContext = pushTreeContext(
+              replay,
+              replayNodes,
+              childIndex
+            )),
+            (error = j[childIndex]),
+            "number" === typeof error
+              ? (resumeNode(request, task, error, node, childIndex),
+                delete j[childIndex])
+              : renderNode(request, task, node, childIndex);
+        task.treeContext = replay;
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      for (j = 0; j < replayNodes; j++) {
+        childIndex = children[j];
+        resumeSlots = request;
+        node = task;
+        error = childIndex;
+        if (
+          null !== error &&
+          "object" === typeof error &&
+          (error.$$typeof === REACT_ELEMENT_TYPE ||
+            error.$$typeof === REACT_PORTAL_TYPE) &&
+          error._store &&
+          ((!error._store.validated && null == error.key) ||
+            2 === error._store.validated)
+        ) {
+          if ("object" !== typeof error._store)
+            throw Error(
+              "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue."
+            );
+          error._store.validated = 1;
+          thrownInfo = resumeSlots.didWarnForKey;
+          null == thrownInfo &&
+            (thrownInfo = resumeSlots.didWarnForKey = new WeakSet());
+          resumeSlots = node.componentStack;
+          if (null !== resumeSlots && !thrownInfo.has(resumeSlots)) {
+            thrownInfo.add(resumeSlots);
+            var componentName = getComponentNameFromType(error.type);
+            thrownInfo = error._owner;
+            var parentOwner = resumeSlots.owner;
+            resumeSlots = "";
+            if (parentOwner && "undefined" !== typeof parentOwner.type) {
+              var name = getComponentNameFromType(parentOwner.type);
+              name &&
+                (resumeSlots =
+                  "\n\nCheck the render method of `" + name + "`.");
+            }
+            resumeSlots ||
+              (componentName &&
+                (resumeSlots =
+                  "\n\nCheck the top-level render call using <" +
+                  componentName +
+                  ">."));
+            componentName = "";
+            null != thrownInfo &&
+              parentOwner !== thrownInfo &&
+              ((parentOwner = null),
+              "undefined" !== typeof thrownInfo.type
+                ? (parentOwner = getComponentNameFromType(thrownInfo.type))
+                : "string" === typeof thrownInfo.name &&
+                  (parentOwner = thrownInfo.name),
+              parentOwner &&
+                (componentName =
+                  " It was passed a child from " + parentOwner + "."));
+            thrownInfo = node.componentStack;
+            node.componentStack = {
+              parent: node.componentStack,
+              type: error.type,
+              owner: error._owner,
+              stack: error._debugStack
+            };
+            console.error(
+              'Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',
+              resumeSlots,
+              componentName
+            );
+            node.componentStack = thrownInfo;
+          }
+        }
+        task.treeContext = pushTreeContext(replay, replayNodes, j);
+        renderNode(request, task, childIndex, j);
+      }
+      task.treeContext = replay;
+      task.keyPath = prevKeyPath;
+      task.componentStack = previousComponentStack;
+      task.debugTask = previousDebugTask;
+    }
+    function untrackBoundary(request, boundary) {
+      request = request.trackedPostpones;
+      null !== request &&
+        ((boundary = boundary.trackedContentKeyPath),
+        null !== boundary &&
+          ((boundary = request.workingMap.get(boundary)),
+          void 0 !== boundary &&
+            ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+    }
+    function spawnNewSuspendedReplayTask(request, task, thenableState) {
+      return createReplayTask(
+        request,
+        thenableState,
+        task.replay,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function spawnNewSuspendedRenderTask(request, task, thenableState) {
+      var segment = task.blockedSegment,
+        newSegment = createPendingSegment(
+          request,
+          segment.chunks.length,
+          null,
+          task.formatContext,
+          segment.lastPushedText,
+          !0
+        );
+      segment.children.push(newSegment);
+      segment.lastPushedText = !1;
+      return createRenderTask(
+        request,
+        thenableState,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        newSegment,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function renderNode(request, task, node, childIndex) {
+      var previousFormatContext = task.formatContext,
+        previousContext = task.context,
+        previousKeyPath = task.keyPath,
+        previousTreeContext = task.treeContext,
+        previousComponentStack = task.componentStack,
+        previousDebugTask = task.debugTask,
+        segment = task.blockedSegment;
+      if (null === segment)
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue) {
+          if (
+            (resetHooksState(),
+            (node =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedReplayTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedReplayTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      else {
+        var childrenLength = segment.children.length,
+          chunkLength = segment.chunks.length;
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue$3) {
+          if (
+            (resetHooksState(),
+            (segment.children.length = childrenLength),
+            (segment.chunks.length = chunkLength),
+            (node =
+              thrownValue$3 === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue$3),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedRenderTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedRenderTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      }
+      task.formatContext = previousFormatContext;
+      task.context = previousContext;
+      task.keyPath = previousKeyPath;
+      task.treeContext = previousTreeContext;
+      switchContext(previousContext);
+      throw node;
+    }
+    function abortTaskSoft(task) {
+      var boundary = task.blockedBoundary;
+      task = task.blockedSegment;
+      null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+    }
+    function abortRemainingReplayNodes(
+      request$jscomp$0,
+      boundary,
+      nodes,
+      slots,
+      error$jscomp$0,
+      errorDigest$jscomp$0,
+      errorInfo$jscomp$0,
+      aborted
+    ) {
+      for (var i = 0; i < nodes.length; i++) {
+        var node = nodes[i];
+        if (4 === node.length)
+          abortRemainingReplayNodes(
+            request$jscomp$0,
+            boundary,
+            node[2],
+            node[3],
+            error$jscomp$0,
+            errorDigest$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          );
+        else {
+          var request = request$jscomp$0;
+          node = node[5];
+          var error = error$jscomp$0,
+            errorDigest = errorDigest$jscomp$0,
+            errorInfo = errorInfo$jscomp$0,
+            wasAborted = aborted,
+            resumedBoundary = createSuspenseBoundary(
+              request,
+              new Set(),
+              null,
+              null
+            );
+          resumedBoundary.parentFlushed = !0;
+          resumedBoundary.rootSegmentID = node;
+          resumedBoundary.status = CLIENT_RENDERED;
+          encodeErrorForBoundary(
+            resumedBoundary,
+            errorDigest,
+            error,
+            errorInfo,
+            wasAborted
+          );
+          resumedBoundary.parentFlushed &&
+            request.clientRenderedBoundaries.push(resumedBoundary);
+        }
+      }
+      nodes.length = 0;
+      if (null !== slots) {
+        if (null === boundary)
+          throw Error(
+            "We should not have any resumable nodes in the shell. This is a bug in React."
+          );
+        boundary.status !== CLIENT_RENDERED &&
+          ((boundary.status = CLIENT_RENDERED),
+          encodeErrorForBoundary(
+            boundary,
+            errorDigest$jscomp$0,
+            error$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          ),
+          boundary.parentFlushed &&
+            request$jscomp$0.clientRenderedBoundaries.push(boundary));
+        if ("object" === typeof slots)
+          for (var index in slots) delete slots[index];
+      }
+    }
+    function abortTask(task, request, error) {
+      var boundary = task.blockedBoundary,
+        segment = task.blockedSegment;
+      if (null !== segment) {
+        if (6 === segment.status) return;
+        segment.status = 3;
+      }
+      segment = getThrownInfo(task.componentStack);
+      if (null === boundary) {
+        if (13 !== request.status && request.status !== CLOSED) {
+          boundary = task.replay;
+          if (null === boundary) {
+            logRecoverableError(request, error, segment, null);
+            fatalError(request, error, segment, null);
+            return;
+          }
+          boundary.pendingTasks--;
+          0 === boundary.pendingTasks &&
+            0 < boundary.nodes.length &&
+            ((task = logRecoverableError(request, error, segment, null)),
+            abortRemainingReplayNodes(
+              request,
+              null,
+              boundary.nodes,
+              boundary.slots,
+              error,
+              task,
+              segment,
+              !0
+            ));
+          request.pendingRootTasks--;
+          0 === request.pendingRootTasks && completeShell(request);
+        }
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            ((boundary.status = CLIENT_RENDERED),
+            (task = logRecoverableError(request, error, segment, null)),
+            (boundary.status = CLIENT_RENDERED),
+            encodeErrorForBoundary(boundary, task, error, segment, !0),
+            untrackBoundary(request, boundary),
+            boundary.parentFlushed &&
+              request.clientRenderedBoundaries.push(boundary)),
+          boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+            return abortTask(fallbackTask, request, error);
+          }),
+          boundary.fallbackAbortableTasks.clear();
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function safelyEmitEarlyPreloads(request, shellComplete) {
+      try {
+        var renderState = request.renderState,
+          onHeaders = renderState.onHeaders;
+        if (onHeaders) {
+          var headers = renderState.headers;
+          if (headers) {
+            renderState.headers = null;
+            var linkHeader = headers.preconnects;
+            headers.fontPreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.fontPreloads));
+            headers.highImagePreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.highImagePreloads));
+            if (!shellComplete) {
+              var queueIter = renderState.styles.values(),
+                queueStep = queueIter.next();
+              b: for (
+                ;
+                0 < headers.remainingCapacity && !queueStep.done;
+                queueStep = queueIter.next()
+              )
+                for (
+                  var sheetIter = queueStep.value.sheets.values(),
+                    sheetStep = sheetIter.next();
+                  0 < headers.remainingCapacity && !sheetStep.done;
+                  sheetStep = sheetIter.next()
+                ) {
+                  var sheet = sheetStep.value,
+                    props = sheet.props,
+                    key = props.href,
+                    props$jscomp$0 = sheet.props;
+                  var header = getPreloadAsHeader(
+                    props$jscomp$0.href,
+                    "style",
+                    {
+                      crossOrigin: props$jscomp$0.crossOrigin,
+                      integrity: props$jscomp$0.integrity,
+                      nonce: props$jscomp$0.nonce,
+                      type: props$jscomp$0.type,
+                      fetchPriority: props$jscomp$0.fetchPriority,
+                      referrerPolicy: props$jscomp$0.referrerPolicy,
+                      media: props$jscomp$0.media
+                    }
+                  );
+                  if (0 <= (headers.remainingCapacity -= header.length + 2))
+                    (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                      linkHeader && (linkHeader += ", "),
+                      (linkHeader += header),
+                      (renderState.resets.style[key] =
+                        "string" === typeof props.crossOrigin ||
+                        "string" === typeof props.integrity
+                          ? [props.crossOrigin, props.integrity]
+                          : PRELOAD_NO_CREDS);
+                  else break b;
+                }
+            }
+            linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+          }
+        }
+      } catch (error) {
+        logRecoverableError(request, error, {}, null);
+      }
+    }
+    function completeShell(request) {
+      null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+      null === request.trackedPostpones && preparePreamble(request);
+      request.onShellError = noop;
+      request = request.onShellReady;
+      request();
+    }
+    function completeAll(request) {
+      safelyEmitEarlyPreloads(
+        request,
+        null === request.trackedPostpones
+          ? !0
+          : null === request.completedRootSegment ||
+              request.completedRootSegment.status !== POSTPONED
+      );
+      preparePreamble(request);
+      request = request.onAllReady;
+      request();
+    }
+    function queueCompletedSegment(boundary, segment) {
+      if (
+        0 === segment.chunks.length &&
+        1 === segment.children.length &&
+        null === segment.children[0].boundary &&
+        -1 === segment.children[0].id
+      ) {
+        var childSegment = segment.children[0];
+        childSegment.id = segment.id;
+        childSegment.parentFlushed = !0;
+        childSegment.status === COMPLETED &&
+          queueCompletedSegment(boundary, childSegment);
+      } else boundary.completedSegments.push(segment);
+    }
+    function finishedTask(request, boundary, segment) {
+      if (null === boundary) {
+        if (null !== segment && segment.parentFlushed) {
+          if (null !== request.completedRootSegment)
+            throw Error(
+              "There can only be one root segment. This is a bug in React."
+            );
+          request.completedRootSegment = segment;
+        }
+        request.pendingRootTasks--;
+        0 === request.pendingRootTasks && completeShell(request);
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            (0 === boundary.pendingTasks
+              ? (boundary.status === PENDING && (boundary.status = COMPLETED),
+                null !== segment &&
+                  segment.parentFlushed &&
+                  segment.status === COMPLETED &&
+                  queueCompletedSegment(boundary, segment),
+                boundary.parentFlushed &&
+                  request.completedBoundaries.push(boundary),
+                boundary.status === COMPLETED &&
+                  (boundary.fallbackAbortableTasks.forEach(
+                    abortTaskSoft,
+                    request
+                  ),
+                  boundary.fallbackAbortableTasks.clear(),
+                  0 === request.pendingRootTasks &&
+                    null === request.trackedPostpones &&
+                    null !== boundary.contentPreamble &&
+                    preparePreamble(request)))
+              : null !== segment &&
+                segment.parentFlushed &&
+                segment.status === COMPLETED &&
+                (queueCompletedSegment(boundary, segment),
+                1 === boundary.completedSegments.length &&
+                  boundary.parentFlushed &&
+                  request.partialBoundaries.push(boundary)));
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function performWork(request$jscomp$2) {
+      if (
+        request$jscomp$2.status !== CLOSED &&
+        13 !== request$jscomp$2.status
+      ) {
+        var prevContext = currentActiveSnapshot,
+          prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = HooksDispatcher;
+        var prevAsyncDispatcher = ReactSharedInternals.A;
+        ReactSharedInternals.A = DefaultAsyncDispatcher;
+        var prevRequest = currentRequest;
+        currentRequest = request$jscomp$2;
+        var prevGetCurrentStackImpl = ReactSharedInternals.getCurrentStack;
+        ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;
+        var prevResumableState = currentResumableState;
+        currentResumableState = request$jscomp$2.resumableState;
+        try {
+          var pingedTasks = request$jscomp$2.pingedTasks,
+            i;
+          for (i = 0; i < pingedTasks.length; i++) {
+            var request = request$jscomp$2,
+              task = pingedTasks[i],
+              segment = task.blockedSegment;
+            if (null === segment) {
+              var prevTaskInDEV = void 0,
+                request$jscomp$0 = request;
+              request = task;
+              if (0 !== request.replay.pendingTasks) {
+                switchContext(request.context);
+                prevTaskInDEV = currentTaskInDEV;
+                currentTaskInDEV = request;
+                try {
+                  "number" === typeof request.replay.slots
+                    ? resumeNode(
+                        request$jscomp$0,
+                        request,
+                        request.replay.slots,
+                        request.node,
+                        request.childIndex
+                      )
+                    : retryNode(request$jscomp$0, request);
+                  if (
+                    1 === request.replay.pendingTasks &&
+                    0 < request.replay.nodes.length
+                  )
+                    throw Error(
+                      "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                    );
+                  request.replay.pendingTasks--;
+                  request.abortSet.delete(request);
+                  finishedTask(request$jscomp$0, request.blockedBoundary, null);
+                } catch (thrownValue) {
+                  resetHooksState();
+                  var x =
+                    thrownValue === SuspenseException
+                      ? getSuspendedThenable()
+                      : thrownValue;
+                  if (
+                    "object" === typeof x &&
+                    null !== x &&
+                    "function" === typeof x.then
+                  ) {
+                    var ping = request.ping;
+                    x.then(ping, ping);
+                    request.thenableState = getThenableStateAfterSuspending();
+                  } else {
+                    request.replay.pendingTasks--;
+                    request.abortSet.delete(request);
+                    var errorInfo = getThrownInfo(request.componentStack),
+                      errorDigest = void 0,
+                      request$jscomp$1 = request$jscomp$0,
+                      boundary = request.blockedBoundary,
+                      error$jscomp$0 =
+                        12 === request$jscomp$0.status
+                          ? request$jscomp$0.fatalError
+                          : x,
+                      errorInfo$jscomp$0 = errorInfo,
+                      replayNodes = request.replay.nodes,
+                      resumeSlots = request.replay.slots;
+                    errorDigest = logRecoverableError(
+                      request$jscomp$1,
+                      error$jscomp$0,
+                      errorInfo$jscomp$0,
+                      request.debugTask
+                    );
+                    abortRemainingReplayNodes(
+                      request$jscomp$1,
+                      boundary,
+                      replayNodes,
+                      resumeSlots,
+                      error$jscomp$0,
+                      errorDigest,
+                      errorInfo$jscomp$0,
+                      !1
+                    );
+                    request$jscomp$0.pendingRootTasks--;
+                    0 === request$jscomp$0.pendingRootTasks &&
+                      completeShell(request$jscomp$0);
+                    request$jscomp$0.allPendingTasks--;
+                    0 === request$jscomp$0.allPendingTasks &&
+                      completeAll(request$jscomp$0);
+                  }
+                } finally {
+                  currentTaskInDEV = prevTaskInDEV;
+                }
+              }
+            } else if (
+              ((request$jscomp$0 = prevTaskInDEV = void 0),
+              (errorDigest = task),
+              (request$jscomp$1 = segment),
+              request$jscomp$1.status === PENDING)
+            ) {
+              request$jscomp$1.status = 6;
+              switchContext(errorDigest.context);
+              request$jscomp$0 = currentTaskInDEV;
+              currentTaskInDEV = errorDigest;
+              var childrenLength = request$jscomp$1.children.length,
+                chunkLength = request$jscomp$1.chunks.length;
+              try {
+                retryNode(request, errorDigest),
+                  request$jscomp$1.lastPushedText &&
+                    request$jscomp$1.textEmbedded &&
+                    request$jscomp$1.chunks.push(textSeparator),
+                  errorDigest.abortSet.delete(errorDigest),
+                  (request$jscomp$1.status = COMPLETED),
+                  finishedTask(
+                    request,
+                    errorDigest.blockedBoundary,
+                    request$jscomp$1
+                  );
+              } catch (thrownValue) {
+                resetHooksState();
+                request$jscomp$1.children.length = childrenLength;
+                request$jscomp$1.chunks.length = chunkLength;
+                var x$jscomp$0 =
+                  thrownValue === SuspenseException
+                    ? getSuspendedThenable()
+                    : 12 === request.status
+                      ? request.fatalError
+                      : thrownValue;
+                if (
+                  "object" === typeof x$jscomp$0 &&
+                  null !== x$jscomp$0 &&
+                  "function" === typeof x$jscomp$0.then
+                ) {
+                  request$jscomp$1.status = PENDING;
+                  errorDigest.thenableState = getThenableStateAfterSuspending();
+                  var ping$jscomp$0 = errorDigest.ping;
+                  x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+                } else {
+                  var errorInfo$jscomp$1 = getThrownInfo(
+                    errorDigest.componentStack
+                  );
+                  errorDigest.abortSet.delete(errorDigest);
+                  request$jscomp$1.status = 4;
+                  var boundary$jscomp$0 = errorDigest.blockedBoundary,
+                    debugTask = errorDigest.debugTask;
+                  prevTaskInDEV = logRecoverableError(
+                    request,
+                    x$jscomp$0,
+                    errorInfo$jscomp$1,
+                    debugTask
+                  );
+                  null === boundary$jscomp$0
+                    ? fatalError(
+                        request,
+                        x$jscomp$0,
+                        errorInfo$jscomp$1,
+                        debugTask
+                      )
+                    : (boundary$jscomp$0.pendingTasks--,
+                      boundary$jscomp$0.status !== CLIENT_RENDERED &&
+                        ((boundary$jscomp$0.status = CLIENT_RENDERED),
+                        encodeErrorForBoundary(
+                          boundary$jscomp$0,
+                          prevTaskInDEV,
+                          x$jscomp$0,
+                          errorInfo$jscomp$1,
+                          !1
+                        ),
+                        untrackBoundary(request, boundary$jscomp$0),
+                        boundary$jscomp$0.parentFlushed &&
+                          request.clientRenderedBoundaries.push(
+                            boundary$jscomp$0
+                          ),
+                        0 === request.pendingRootTasks &&
+                          null === request.trackedPostpones &&
+                          null !== boundary$jscomp$0.contentPreamble &&
+                          preparePreamble(request)));
+                  request.allPendingTasks--;
+                  0 === request.allPendingTasks && completeAll(request);
+                }
+              } finally {
+                currentTaskInDEV = request$jscomp$0;
+              }
+            }
+          }
+          pingedTasks.splice(0, i);
+          null !== request$jscomp$2.destination &&
+            flushCompletedQueues(
+              request$jscomp$2,
+              request$jscomp$2.destination
+            );
+        } catch (error) {
+          (pingedTasks = {}),
+            logRecoverableError(request$jscomp$2, error, pingedTasks, null),
+            fatalError(request$jscomp$2, error, pingedTasks, null);
+        } finally {
+          (currentResumableState = prevResumableState),
+            (ReactSharedInternals.H = prevDispatcher),
+            (ReactSharedInternals.A = prevAsyncDispatcher),
+            (ReactSharedInternals.getCurrentStack = prevGetCurrentStackImpl),
+            prevDispatcher === HooksDispatcher && switchContext(prevContext),
+            (currentRequest = prevRequest);
+        }
+      }
+    }
+    function preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      segment.preambleChildren.length &&
+        collectedPreambleSegments.push(segment.preambleChildren);
+      for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+        pendingPreambles =
+          preparePreambleFromSegment(
+            request,
+            segment.children[i],
+            collectedPreambleSegments
+          ) || pendingPreambles;
+      return pendingPreambles;
+    }
+    function preparePreambleFromSegment(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return preparePreambleFromSubtree(
+          request,
+          segment,
+          collectedPreambleSegments
+        );
+      var preamble = boundary.contentPreamble,
+        fallbackPreamble = boundary.fallbackPreamble;
+      if (null === preamble || null === fallbackPreamble) return !1;
+      switch (boundary.status) {
+        case COMPLETED:
+          hoistPreambleState(request.renderState, preamble);
+          segment = boundary.completedSegments[0];
+          if (!segment)
+            throw Error(
+              "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+            );
+          return preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          );
+        case POSTPONED:
+          if (null !== request.trackedPostpones) return !0;
+        case CLIENT_RENDERED:
+          if (segment.status === COMPLETED)
+            return (
+              hoistPreambleState(request.renderState, fallbackPreamble),
+              preparePreambleFromSubtree(
+                request,
+                segment,
+                collectedPreambleSegments
+              )
+            );
+        default:
+          return !0;
+      }
+    }
+    function preparePreamble(request) {
+      if (
+        request.completedRootSegment &&
+        null === request.completedPreambleSegments
+      ) {
+        var collectedPreambleSegments = [],
+          hasPendingPreambles = preparePreambleFromSegment(
+            request,
+            request.completedRootSegment,
+            collectedPreambleSegments
+          ),
+          preamble = request.renderState.preamble;
+        if (
+          !1 === hasPendingPreambles ||
+          (preamble.headChunks && preamble.bodyChunks)
+        )
+          request.completedPreambleSegments = collectedPreambleSegments;
+      }
+    }
+    function flushSubtree(request, destination, segment, hoistableState) {
+      segment.parentFlushed = !0;
+      switch (segment.status) {
+        case PENDING:
+          segment.id = request.nextSegmentId++;
+        case POSTPONED:
+          return (
+            (hoistableState = segment.id),
+            (segment.lastPushedText = !1),
+            (segment.textEmbedded = !1),
+            (request = request.renderState),
+            writeChunk(destination, placeholder1),
+            writeChunk(destination, request.placeholderPrefix),
+            (request = stringToChunk(hoistableState.toString(16))),
+            writeChunk(destination, request),
+            writeChunkAndReturn(destination, placeholder2)
+          );
+        case COMPLETED:
+          segment.status = FLUSHED;
+          var r = !0,
+            chunks = segment.chunks,
+            chunkIdx = 0;
+          segment = segment.children;
+          for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+            for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+              writeChunk(destination, chunks[chunkIdx]);
+            r = flushSegment(request, destination, r, hoistableState);
+          }
+          for (; chunkIdx < chunks.length - 1; chunkIdx++)
+            writeChunk(destination, chunks[chunkIdx]);
+          chunkIdx < chunks.length &&
+            (r = writeChunkAndReturn(destination, chunks[chunkIdx]));
+          return r;
+        default:
+          throw Error(
+            "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+          );
+      }
+    }
+    function flushSegment(request, destination, segment, hoistableState) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return flushSubtree(request, destination, segment, hoistableState);
+      boundary.parentFlushed = !0;
+      if (boundary.status === CLIENT_RENDERED) {
+        var errorDigest = boundary.errorDigest,
+          errorMessage = boundary.errorMessage,
+          errorStack = boundary.errorStack,
+          errorComponentStack = boundary.errorComponentStack;
+        writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);
+        writeChunk(destination, clientRenderedSuspenseBoundaryError1);
+        errorDigest &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
+          writeChunk(
+            destination,
+            stringToChunk(escapeTextForBrowser(errorDigest))
+          ),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        errorMessage &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1B),
+          writeChunk(
+            destination,
+            stringToChunk(escapeTextForBrowser(errorMessage))
+          ),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        errorStack &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1C),
+          writeChunk(
+            destination,
+            stringToChunk(escapeTextForBrowser(errorStack))
+          ),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        errorComponentStack &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1D),
+          writeChunk(
+            destination,
+            stringToChunk(escapeTextForBrowser(errorComponentStack))
+          ),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);
+        flushSubtree(request, destination, segment, hoistableState);
+        (request = boundary.fallbackPreamble) &&
+          writePreambleContribution(destination, request);
+        return writeChunkAndReturn(destination, endSuspenseBoundary);
+      }
+      if (boundary.status !== COMPLETED)
+        return (
+          boundary.status === PENDING &&
+            (boundary.rootSegmentID = request.nextSegmentId++),
+          0 < boundary.completedSegments.length &&
+            request.partialBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          hoistableState &&
+            ((boundary = boundary.fallbackState),
+            boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+            boundary.stylesheets.forEach(
+              hoistStylesheetDependency,
+              hoistableState
+            )),
+          flushSubtree(request, destination, segment, hoistableState),
+          writeChunkAndReturn(destination, endSuspenseBoundary)
+        );
+      if (boundary.byteSize > request.progressiveChunkSize)
+        return (
+          (boundary.rootSegmentID = request.nextSegmentId++),
+          request.completedBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          flushSubtree(request, destination, segment, hoistableState),
+          writeChunkAndReturn(destination, endSuspenseBoundary)
+        );
+      hoistableState &&
+        ((segment = boundary.contentState),
+        segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+      writeChunkAndReturn(destination, startCompletedSuspenseBoundary);
+      segment = boundary.completedSegments;
+      if (1 !== segment.length)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      flushSegment(request, destination, segment[0], hoistableState);
+      (request = boundary.contentPreamble) &&
+        writePreambleContribution(destination, request);
+      return writeChunkAndReturn(destination, endSuspenseBoundary);
+    }
+    function flushSegmentContainer(
+      request,
+      destination,
+      segment,
+      hoistableState
+    ) {
+      writeStartSegment(
+        destination,
+        request.renderState,
+        segment.parentFormatContext,
+        segment.id
+      );
+      flushSegment(request, destination, segment, hoistableState);
+      return writeEndSegment(destination, segment.parentFormatContext);
+    }
+    function flushCompletedBoundary(request, destination, boundary) {
+      for (
+        var completedSegments = boundary.completedSegments, i = 0;
+        i < completedSegments.length;
+        i++
+      )
+        flushPartiallyCompletedSegment(
+          request,
+          destination,
+          boundary,
+          completedSegments[i]
+        );
+      completedSegments.length = 0;
+      writeHoistablesForBoundary(
+        destination,
+        boundary.contentState,
+        request.renderState
+      );
+      completedSegments = request.resumableState;
+      request = request.renderState;
+      i = boundary.rootSegmentID;
+      boundary = boundary.contentState;
+      var requiresStyleInsertion = request.stylesToHoist;
+      request.stylesToHoist = !1;
+      writeChunk(destination, request.startInlineScript);
+      requiresStyleInsertion
+        ? (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+          NothingSent
+          ? ((completedSegments.instructions =
+              completedSegments.instructions |
+              SentStyleInsertionFunction |
+              SentCompleteBoundaryFunction),
+            writeChunk(destination, completeBoundaryWithStylesScript1FullBoth))
+          : (completedSegments.instructions & SentStyleInsertionFunction) ===
+              NothingSent
+            ? ((completedSegments.instructions |= SentStyleInsertionFunction),
+              writeChunk(
+                destination,
+                completeBoundaryWithStylesScript1FullPartial
+              ))
+            : writeChunk(destination, completeBoundaryWithStylesScript1Partial)
+        : (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+            NothingSent
+          ? ((completedSegments.instructions |= SentCompleteBoundaryFunction),
+            writeChunk(destination, completeBoundaryScript1Full))
+          : writeChunk(destination, completeBoundaryScript1Partial);
+      completedSegments = stringToChunk(i.toString(16));
+      writeChunk(destination, request.boundaryPrefix);
+      writeChunk(destination, completedSegments);
+      writeChunk(destination, completeBoundaryScript2);
+      writeChunk(destination, request.segmentPrefix);
+      writeChunk(destination, completedSegments);
+      requiresStyleInsertion
+        ? (writeChunk(destination, completeBoundaryScript3a),
+          writeStyleResourceDependenciesInJS(destination, boundary))
+        : writeChunk(destination, completeBoundaryScript3b);
+      boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd);
+      return writeBootstrap(destination, request) && boundary;
+    }
+    function flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      segment
+    ) {
+      if (segment.status === FLUSHED) return !0;
+      var hoistableState = boundary.contentState,
+        segmentID = segment.id;
+      if (-1 === segmentID) {
+        if (-1 === (segment.id = boundary.rootSegmentID))
+          throw Error(
+            "A root segment ID must have been assigned by now. This is a bug in React."
+          );
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      }
+      if (segmentID === boundary.rootSegmentID)
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      flushSegmentContainer(request, destination, segment, hoistableState);
+      boundary = request.resumableState;
+      request = request.renderState;
+      writeChunk(destination, request.startInlineScript);
+      (boundary.instructions & SentCompleteSegmentFunction) === NothingSent
+        ? ((boundary.instructions |= SentCompleteSegmentFunction),
+          writeChunk(destination, completeSegmentScript1Full))
+        : writeChunk(destination, completeSegmentScript1Partial);
+      writeChunk(destination, request.segmentPrefix);
+      segmentID = stringToChunk(segmentID.toString(16));
+      writeChunk(destination, segmentID);
+      writeChunk(destination, completeSegmentScript2);
+      writeChunk(destination, request.placeholderPrefix);
+      writeChunk(destination, segmentID);
+      destination = writeChunkAndReturn(destination, completeSegmentScriptEnd);
+      return destination;
+    }
+    function flushCompletedQueues(request, destination) {
+      currentView = new Uint8Array(2048);
+      writtenBytes = 0;
+      try {
+        if (!(0 < request.pendingRootTasks)) {
+          var i,
+            completedRootSegment = request.completedRootSegment;
+          if (null !== completedRootSegment) {
+            if (completedRootSegment.status === POSTPONED) return;
+            var completedPreambleSegments = request.completedPreambleSegments;
+            if (null === completedPreambleSegments) return;
+            var renderState = request.renderState,
+              preamble = renderState.preamble,
+              htmlChunks = preamble.htmlChunks,
+              headChunks = preamble.headChunks,
+              i$jscomp$0;
+            if (htmlChunks) {
+              for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+                writeChunk(destination, htmlChunks[i$jscomp$0]);
+              if (headChunks)
+                for (
+                  i$jscomp$0 = 0;
+                  i$jscomp$0 < headChunks.length;
+                  i$jscomp$0++
+                )
+                  writeChunk(destination, headChunks[i$jscomp$0]);
+              else
+                writeChunk(destination, startChunkForTag("head")),
+                  writeChunk(destination, endOfStartTag);
+            } else if (headChunks)
+              for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+                writeChunk(destination, headChunks[i$jscomp$0]);
+            var charsetChunks = renderState.charsetChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < charsetChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, charsetChunks[i$jscomp$0]);
+            charsetChunks.length = 0;
+            renderState.preconnects.forEach(flushResource, destination);
+            renderState.preconnects.clear();
+            var viewportChunks = renderState.viewportChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < viewportChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, viewportChunks[i$jscomp$0]);
+            viewportChunks.length = 0;
+            renderState.fontPreloads.forEach(flushResource, destination);
+            renderState.fontPreloads.clear();
+            renderState.highImagePreloads.forEach(flushResource, destination);
+            renderState.highImagePreloads.clear();
+            renderState.styles.forEach(flushStylesInPreamble, destination);
+            var importMapChunks = renderState.importMapChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < importMapChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, importMapChunks[i$jscomp$0]);
+            importMapChunks.length = 0;
+            renderState.bootstrapScripts.forEach(flushResource, destination);
+            renderState.scripts.forEach(flushResource, destination);
+            renderState.scripts.clear();
+            renderState.bulkPreloads.forEach(flushResource, destination);
+            renderState.bulkPreloads.clear();
+            var hoistableChunks = renderState.hoistableChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < hoistableChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, hoistableChunks[i$jscomp$0]);
+            for (
+              renderState = hoistableChunks.length = 0;
+              renderState < completedPreambleSegments.length;
+              renderState++
+            ) {
+              var segments = completedPreambleSegments[renderState];
+              for (preamble = 0; preamble < segments.length; preamble++)
+                flushSegment(request, destination, segments[preamble], null);
+            }
+            var preamble$jscomp$0 = request.renderState.preamble,
+              headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+            (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) &&
+              writeChunk(destination, endChunkForTag("head"));
+            var bodyChunks = preamble$jscomp$0.bodyChunks;
+            if (bodyChunks)
+              for (
+                completedPreambleSegments = 0;
+                completedPreambleSegments < bodyChunks.length;
+                completedPreambleSegments++
+              )
+                writeChunk(destination, bodyChunks[completedPreambleSegments]);
+            flushSegment(request, destination, completedRootSegment, null);
+            request.completedRootSegment = null;
+            writeBootstrap(destination, request.renderState);
+          }
+          var renderState$jscomp$0 = request.renderState;
+          completedRootSegment = 0;
+          var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < viewportChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            writeChunk(
+              destination,
+              viewportChunks$jscomp$0[completedRootSegment]
+            );
+          viewportChunks$jscomp$0.length = 0;
+          renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+          renderState$jscomp$0.preconnects.clear();
+          renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.fontPreloads.clear();
+          renderState$jscomp$0.highImagePreloads.forEach(
+            flushResource,
+            destination
+          );
+          renderState$jscomp$0.highImagePreloads.clear();
+          renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+          renderState$jscomp$0.scripts.forEach(flushResource, destination);
+          renderState$jscomp$0.scripts.clear();
+          renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.bulkPreloads.clear();
+          var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < hoistableChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            writeChunk(
+              destination,
+              hoistableChunks$jscomp$0[completedRootSegment]
+            );
+          hoistableChunks$jscomp$0.length = 0;
+          var clientRenderedBoundaries = request.clientRenderedBoundaries;
+          for (i = 0; i < clientRenderedBoundaries.length; i++) {
+            var boundary = clientRenderedBoundaries[i];
+            renderState$jscomp$0 = destination;
+            var resumableState = request.resumableState,
+              renderState$jscomp$1 = request.renderState,
+              id = boundary.rootSegmentID,
+              errorDigest = boundary.errorDigest,
+              errorMessage = boundary.errorMessage,
+              errorStack = boundary.errorStack,
+              errorComponentStack = boundary.errorComponentStack;
+            writeChunk(
+              renderState$jscomp$0,
+              renderState$jscomp$1.startInlineScript
+            );
+            (resumableState.instructions & SentClientRenderFunction) ===
+            NothingSent
+              ? ((resumableState.instructions |= SentClientRenderFunction),
+                writeChunk(renderState$jscomp$0, clientRenderScript1Full))
+              : writeChunk(renderState$jscomp$0, clientRenderScript1Partial);
+            writeChunk(
+              renderState$jscomp$0,
+              renderState$jscomp$1.boundaryPrefix
+            );
+            writeChunk(renderState$jscomp$0, stringToChunk(id.toString(16)));
+            writeChunk(renderState$jscomp$0, clientRenderScript1A);
+            if (
+              errorDigest ||
+              errorMessage ||
+              errorStack ||
+              errorComponentStack
+            )
+              writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+                writeChunk(
+                  renderState$jscomp$0,
+                  stringToChunk(
+                    escapeJSStringsForInstructionScripts(errorDigest || "")
+                  )
+                );
+            if (errorMessage || errorStack || errorComponentStack)
+              writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+                writeChunk(
+                  renderState$jscomp$0,
+                  stringToChunk(
+                    escapeJSStringsForInstructionScripts(errorMessage || "")
+                  )
+                );
+            if (errorStack || errorComponentStack)
+              writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+                writeChunk(
+                  renderState$jscomp$0,
+                  stringToChunk(
+                    escapeJSStringsForInstructionScripts(errorStack || "")
+                  )
+                );
+            errorComponentStack &&
+              (writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+              writeChunk(
+                renderState$jscomp$0,
+                stringToChunk(
+                  escapeJSStringsForInstructionScripts(errorComponentStack)
+                )
+              ));
+            var JSCompiler_inline_result = writeChunkAndReturn(
+              renderState$jscomp$0,
+              clientRenderScriptEnd
+            );
+            if (!JSCompiler_inline_result) {
+              request.destination = null;
+              i++;
+              clientRenderedBoundaries.splice(0, i);
+              return;
+            }
+          }
+          clientRenderedBoundaries.splice(0, i);
+          var completedBoundaries = request.completedBoundaries;
+          for (i = 0; i < completedBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(
+                request,
+                destination,
+                completedBoundaries[i]
+              )
+            ) {
+              request.destination = null;
+              i++;
+              completedBoundaries.splice(0, i);
+              return;
+            }
+          completedBoundaries.splice(0, i);
+          completeWriting(destination);
+          currentView = new Uint8Array(2048);
+          writtenBytes = 0;
+          var partialBoundaries = request.partialBoundaries;
+          for (i = 0; i < partialBoundaries.length; i++) {
+            a: {
+              clientRenderedBoundaries = request;
+              boundary = destination;
+              var boundary$jscomp$0 = partialBoundaries[i],
+                completedSegments = boundary$jscomp$0.completedSegments;
+              for (
+                JSCompiler_inline_result = 0;
+                JSCompiler_inline_result < completedSegments.length;
+                JSCompiler_inline_result++
+              )
+                if (
+                  !flushPartiallyCompletedSegment(
+                    clientRenderedBoundaries,
+                    boundary,
+                    boundary$jscomp$0,
+                    completedSegments[JSCompiler_inline_result]
+                  )
+                ) {
+                  JSCompiler_inline_result++;
+                  completedSegments.splice(0, JSCompiler_inline_result);
+                  var JSCompiler_inline_result$jscomp$0 = !1;
+                  break a;
+                }
+              completedSegments.splice(0, JSCompiler_inline_result);
+              JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+                boundary,
+                boundary$jscomp$0.contentState,
+                clientRenderedBoundaries.renderState
+              );
+            }
+            if (!JSCompiler_inline_result$jscomp$0) {
+              request.destination = null;
+              i++;
+              partialBoundaries.splice(0, i);
+              return;
+            }
+          }
+          partialBoundaries.splice(0, i);
+          var largeBoundaries = request.completedBoundaries;
+          for (i = 0; i < largeBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(request, destination, largeBoundaries[i])
+            ) {
+              request.destination = null;
+              i++;
+              largeBoundaries.splice(0, i);
+              return;
+            }
+          largeBoundaries.splice(0, i);
+        }
+      } finally {
+        0 === request.allPendingTasks &&
+        0 === request.pingedTasks.length &&
+        0 === request.clientRenderedBoundaries.length &&
+        0 === request.completedBoundaries.length
+          ? ((request.flushScheduled = !1),
+            (i = request.resumableState),
+            i.hasBody && writeChunk(destination, endChunkForTag("body")),
+            i.hasHtml && writeChunk(destination, endChunkForTag("html")),
+            completeWriting(destination),
+            0 !== request.abortableTasks.size &&
+              console.error(
+                "There was still abortable task at the root when we closed. This is a bug in React."
+              ),
+            (request.status = CLOSED),
+            destination.close(),
+            (request.destination = null))
+          : completeWriting(destination);
+      }
+    }
+    function startWork(request) {
+      request.flushScheduled = null !== request.destination;
+      supportsRequestStorage
+        ? scheduleMicrotask(function () {
+            return requestStorage.run(request, performWork, request);
+          })
+        : scheduleMicrotask(function () {
+            return performWork(request);
+          });
+      setTimeout(function () {
+        10 === request.status && (request.status = 11);
+        null === request.trackedPostpones &&
+          (supportsRequestStorage
+            ? requestStorage.run(
+                request,
+                enqueueEarlyPreloadsAfterInitialWork,
+                request
+              )
+            : enqueueEarlyPreloadsAfterInitialWork(request));
+      }, 0);
+    }
+    function enqueueEarlyPreloadsAfterInitialWork(request) {
+      safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+    }
+    function enqueueFlush(request) {
+      !1 === request.flushScheduled &&
+        0 === request.pingedTasks.length &&
+        null !== request.destination &&
+        ((request.flushScheduled = !0),
+        setTimeout(function () {
+          var destination = request.destination;
+          destination
+            ? flushCompletedQueues(request, destination)
+            : (request.flushScheduled = !1);
+        }, 0));
+    }
+    function startFlowing(request, destination) {
+      if (13 === request.status)
+        (request.status = CLOSED),
+          closeWithError(destination, request.fatalError);
+      else if (request.status !== CLOSED && null === request.destination) {
+        request.destination = destination;
+        try {
+          flushCompletedQueues(request, destination);
+        } catch (error) {
+          (destination = {}),
+            logRecoverableError(request, error, destination, null),
+            fatalError(request, error, destination, null);
+        }
+      }
+    }
+    function abort(request, reason) {
+      if (11 === request.status || 10 === request.status) request.status = 12;
+      try {
+        var abortableTasks = request.abortableTasks;
+        if (0 < abortableTasks.size) {
+          var error =
+            void 0 === reason
+              ? Error("The render was aborted by the server without a reason.")
+              : "object" === typeof reason &&
+                  null !== reason &&
+                  "function" === typeof reason.then
+                ? Error("The render was aborted by the server with a promise.")
+                : reason;
+          request.fatalError = error;
+          abortableTasks.forEach(function (task) {
+            return abortTask(task, request, error);
+          });
+          abortableTasks.clear();
+        }
+        null !== request.destination &&
+          flushCompletedQueues(request, request.destination);
+      } catch (error$4) {
+        (reason = {}),
+          logRecoverableError(request, error$4, reason, null),
+          fatalError(request, error$4, reason, null);
+      }
+    }
+    function ensureCorrectIsomorphicReactVersion() {
+      var isomorphicReactPackageVersion = React.version;
+      if ("19.1.1" !== isomorphicReactPackageVersion)
+        throw Error(
+          'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n  - react:      ' +
+            (isomorphicReactPackageVersion +
+              "\n  - react-dom:  19.1.1\nLearn more: https://react.dev/warnings/version-mismatch")
+        );
+    }
+    var React = require("react"),
+      ReactDOM = require("react-dom"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+      REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+      REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+      REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+      REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+      MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+      isArrayImpl = Array.isArray,
+      jsxPropsParents = new WeakMap(),
+      jsxChildrenParents = new WeakMap(),
+      CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"),
+      LocalPromise = Promise,
+      scheduleMicrotask =
+        "function" === typeof queueMicrotask
+          ? queueMicrotask
+          : function (callback) {
+              LocalPromise.resolve(null)
+                .then(callback)
+                .catch(handleErrorInNextTick);
+            },
+      currentView = null,
+      writtenBytes = 0,
+      textEncoder = new TextEncoder(),
+      assign = Object.assign,
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+        "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      illegalAttributeNameCache = {},
+      validatedAttributeNameCache = {},
+      unitlessNumbers = new Set(
+        "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+          " "
+        )
+      ),
+      aliases = new Map([
+        ["acceptCharset", "accept-charset"],
+        ["htmlFor", "for"],
+        ["httpEquiv", "http-equiv"],
+        ["crossOrigin", "crossorigin"],
+        ["accentHeight", "accent-height"],
+        ["alignmentBaseline", "alignment-baseline"],
+        ["arabicForm", "arabic-form"],
+        ["baselineShift", "baseline-shift"],
+        ["capHeight", "cap-height"],
+        ["clipPath", "clip-path"],
+        ["clipRule", "clip-rule"],
+        ["colorInterpolation", "color-interpolation"],
+        ["colorInterpolationFilters", "color-interpolation-filters"],
+        ["colorProfile", "color-profile"],
+        ["colorRendering", "color-rendering"],
+        ["dominantBaseline", "dominant-baseline"],
+        ["enableBackground", "enable-background"],
+        ["fillOpacity", "fill-opacity"],
+        ["fillRule", "fill-rule"],
+        ["floodColor", "flood-color"],
+        ["floodOpacity", "flood-opacity"],
+        ["fontFamily", "font-family"],
+        ["fontSize", "font-size"],
+        ["fontSizeAdjust", "font-size-adjust"],
+        ["fontStretch", "font-stretch"],
+        ["fontStyle", "font-style"],
+        ["fontVariant", "font-variant"],
+        ["fontWeight", "font-weight"],
+        ["glyphName", "glyph-name"],
+        ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+        ["glyphOrientationVertical", "glyph-orientation-vertical"],
+        ["horizAdvX", "horiz-adv-x"],
+        ["horizOriginX", "horiz-origin-x"],
+        ["imageRendering", "image-rendering"],
+        ["letterSpacing", "letter-spacing"],
+        ["lightingColor", "lighting-color"],
+        ["markerEnd", "marker-end"],
+        ["markerMid", "marker-mid"],
+        ["markerStart", "marker-start"],
+        ["overlinePosition", "overline-position"],
+        ["overlineThickness", "overline-thickness"],
+        ["paintOrder", "paint-order"],
+        ["panose-1", "panose-1"],
+        ["pointerEvents", "pointer-events"],
+        ["renderingIntent", "rendering-intent"],
+        ["shapeRendering", "shape-rendering"],
+        ["stopColor", "stop-color"],
+        ["stopOpacity", "stop-opacity"],
+        ["strikethroughPosition", "strikethrough-position"],
+        ["strikethroughThickness", "strikethrough-thickness"],
+        ["strokeDasharray", "stroke-dasharray"],
+        ["strokeDashoffset", "stroke-dashoffset"],
+        ["strokeLinecap", "stroke-linecap"],
+        ["strokeLinejoin", "stroke-linejoin"],
+        ["strokeMiterlimit", "stroke-miterlimit"],
+        ["strokeOpacity", "stroke-opacity"],
+        ["strokeWidth", "stroke-width"],
+        ["textAnchor", "text-anchor"],
+        ["textDecoration", "text-decoration"],
+        ["textRendering", "text-rendering"],
+        ["transformOrigin", "transform-origin"],
+        ["underlinePosition", "underline-position"],
+        ["underlineThickness", "underline-thickness"],
+        ["unicodeBidi", "unicode-bidi"],
+        ["unicodeRange", "unicode-range"],
+        ["unitsPerEm", "units-per-em"],
+        ["vAlphabetic", "v-alphabetic"],
+        ["vHanging", "v-hanging"],
+        ["vIdeographic", "v-ideographic"],
+        ["vMathematical", "v-mathematical"],
+        ["vectorEffect", "vector-effect"],
+        ["vertAdvY", "vert-adv-y"],
+        ["vertOriginX", "vert-origin-x"],
+        ["vertOriginY", "vert-origin-y"],
+        ["wordSpacing", "word-spacing"],
+        ["writingMode", "writing-mode"],
+        ["xmlnsXlink", "xmlns:xlink"],
+        ["xHeight", "x-height"]
+      ]),
+      hasReadOnlyValue = {
+        button: !0,
+        checkbox: !0,
+        image: !0,
+        hidden: !0,
+        radio: !0,
+        reset: !0,
+        submit: !0
+      },
+      ariaProperties = {
+        "aria-current": 0,
+        "aria-description": 0,
+        "aria-details": 0,
+        "aria-disabled": 0,
+        "aria-hidden": 0,
+        "aria-invalid": 0,
+        "aria-keyshortcuts": 0,
+        "aria-label": 0,
+        "aria-roledescription": 0,
+        "aria-autocomplete": 0,
+        "aria-checked": 0,
+        "aria-expanded": 0,
+        "aria-haspopup": 0,
+        "aria-level": 0,
+        "aria-modal": 0,
+        "aria-multiline": 0,
+        "aria-multiselectable": 0,
+        "aria-orientation": 0,
+        "aria-placeholder": 0,
+        "aria-pressed": 0,
+        "aria-readonly": 0,
+        "aria-required": 0,
+        "aria-selected": 0,
+        "aria-sort": 0,
+        "aria-valuemax": 0,
+        "aria-valuemin": 0,
+        "aria-valuenow": 0,
+        "aria-valuetext": 0,
+        "aria-atomic": 0,
+        "aria-busy": 0,
+        "aria-live": 0,
+        "aria-relevant": 0,
+        "aria-dropeffect": 0,
+        "aria-grabbed": 0,
+        "aria-activedescendant": 0,
+        "aria-colcount": 0,
+        "aria-colindex": 0,
+        "aria-colspan": 0,
+        "aria-controls": 0,
+        "aria-describedby": 0,
+        "aria-errormessage": 0,
+        "aria-flowto": 0,
+        "aria-labelledby": 0,
+        "aria-owns": 0,
+        "aria-posinset": 0,
+        "aria-rowcount": 0,
+        "aria-rowindex": 0,
+        "aria-rowspan": 0,
+        "aria-setsize": 0
+      },
+      warnedProperties$1 = {},
+      rARIA$1 = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel$1 = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      didWarnValueNull = !1,
+      possibleStandardNames = {
+        accept: "accept",
+        acceptcharset: "acceptCharset",
+        "accept-charset": "acceptCharset",
+        accesskey: "accessKey",
+        action: "action",
+        allowfullscreen: "allowFullScreen",
+        alt: "alt",
+        as: "as",
+        async: "async",
+        autocapitalize: "autoCapitalize",
+        autocomplete: "autoComplete",
+        autocorrect: "autoCorrect",
+        autofocus: "autoFocus",
+        autoplay: "autoPlay",
+        autosave: "autoSave",
+        capture: "capture",
+        cellpadding: "cellPadding",
+        cellspacing: "cellSpacing",
+        challenge: "challenge",
+        charset: "charSet",
+        checked: "checked",
+        children: "children",
+        cite: "cite",
+        class: "className",
+        classid: "classID",
+        classname: "className",
+        cols: "cols",
+        colspan: "colSpan",
+        content: "content",
+        contenteditable: "contentEditable",
+        contextmenu: "contextMenu",
+        controls: "controls",
+        controlslist: "controlsList",
+        coords: "coords",
+        crossorigin: "crossOrigin",
+        dangerouslysetinnerhtml: "dangerouslySetInnerHTML",
+        data: "data",
+        datetime: "dateTime",
+        default: "default",
+        defaultchecked: "defaultChecked",
+        defaultvalue: "defaultValue",
+        defer: "defer",
+        dir: "dir",
+        disabled: "disabled",
+        disablepictureinpicture: "disablePictureInPicture",
+        disableremoteplayback: "disableRemotePlayback",
+        download: "download",
+        draggable: "draggable",
+        enctype: "encType",
+        enterkeyhint: "enterKeyHint",
+        fetchpriority: "fetchPriority",
+        for: "htmlFor",
+        form: "form",
+        formmethod: "formMethod",
+        formaction: "formAction",
+        formenctype: "formEncType",
+        formnovalidate: "formNoValidate",
+        formtarget: "formTarget",
+        frameborder: "frameBorder",
+        headers: "headers",
+        height: "height",
+        hidden: "hidden",
+        high: "high",
+        href: "href",
+        hreflang: "hrefLang",
+        htmlfor: "htmlFor",
+        httpequiv: "httpEquiv",
+        "http-equiv": "httpEquiv",
+        icon: "icon",
+        id: "id",
+        imagesizes: "imageSizes",
+        imagesrcset: "imageSrcSet",
+        inert: "inert",
+        innerhtml: "innerHTML",
+        inputmode: "inputMode",
+        integrity: "integrity",
+        is: "is",
+        itemid: "itemID",
+        itemprop: "itemProp",
+        itemref: "itemRef",
+        itemscope: "itemScope",
+        itemtype: "itemType",
+        keyparams: "keyParams",
+        keytype: "keyType",
+        kind: "kind",
+        label: "label",
+        lang: "lang",
+        list: "list",
+        loop: "loop",
+        low: "low",
+        manifest: "manifest",
+        marginwidth: "marginWidth",
+        marginheight: "marginHeight",
+        max: "max",
+        maxlength: "maxLength",
+        media: "media",
+        mediagroup: "mediaGroup",
+        method: "method",
+        min: "min",
+        minlength: "minLength",
+        multiple: "multiple",
+        muted: "muted",
+        name: "name",
+        nomodule: "noModule",
+        nonce: "nonce",
+        novalidate: "noValidate",
+        open: "open",
+        optimum: "optimum",
+        pattern: "pattern",
+        placeholder: "placeholder",
+        playsinline: "playsInline",
+        poster: "poster",
+        preload: "preload",
+        profile: "profile",
+        radiogroup: "radioGroup",
+        readonly: "readOnly",
+        referrerpolicy: "referrerPolicy",
+        rel: "rel",
+        required: "required",
+        reversed: "reversed",
+        role: "role",
+        rows: "rows",
+        rowspan: "rowSpan",
+        sandbox: "sandbox",
+        scope: "scope",
+        scoped: "scoped",
+        scrolling: "scrolling",
+        seamless: "seamless",
+        selected: "selected",
+        shape: "shape",
+        size: "size",
+        sizes: "sizes",
+        span: "span",
+        spellcheck: "spellCheck",
+        src: "src",
+        srcdoc: "srcDoc",
+        srclang: "srcLang",
+        srcset: "srcSet",
+        start: "start",
+        step: "step",
+        style: "style",
+        summary: "summary",
+        tabindex: "tabIndex",
+        target: "target",
+        title: "title",
+        type: "type",
+        usemap: "useMap",
+        value: "value",
+        width: "width",
+        wmode: "wmode",
+        wrap: "wrap",
+        about: "about",
+        accentheight: "accentHeight",
+        "accent-height": "accentHeight",
+        accumulate: "accumulate",
+        additive: "additive",
+        alignmentbaseline: "alignmentBaseline",
+        "alignment-baseline": "alignmentBaseline",
+        allowreorder: "allowReorder",
+        alphabetic: "alphabetic",
+        amplitude: "amplitude",
+        arabicform: "arabicForm",
+        "arabic-form": "arabicForm",
+        ascent: "ascent",
+        attributename: "attributeName",
+        attributetype: "attributeType",
+        autoreverse: "autoReverse",
+        azimuth: "azimuth",
+        basefrequency: "baseFrequency",
+        baselineshift: "baselineShift",
+        "baseline-shift": "baselineShift",
+        baseprofile: "baseProfile",
+        bbox: "bbox",
+        begin: "begin",
+        bias: "bias",
+        by: "by",
+        calcmode: "calcMode",
+        capheight: "capHeight",
+        "cap-height": "capHeight",
+        clip: "clip",
+        clippath: "clipPath",
+        "clip-path": "clipPath",
+        clippathunits: "clipPathUnits",
+        cliprule: "clipRule",
+        "clip-rule": "clipRule",
+        color: "color",
+        colorinterpolation: "colorInterpolation",
+        "color-interpolation": "colorInterpolation",
+        colorinterpolationfilters: "colorInterpolationFilters",
+        "color-interpolation-filters": "colorInterpolationFilters",
+        colorprofile: "colorProfile",
+        "color-profile": "colorProfile",
+        colorrendering: "colorRendering",
+        "color-rendering": "colorRendering",
+        contentscripttype: "contentScriptType",
+        contentstyletype: "contentStyleType",
+        cursor: "cursor",
+        cx: "cx",
+        cy: "cy",
+        d: "d",
+        datatype: "datatype",
+        decelerate: "decelerate",
+        descent: "descent",
+        diffuseconstant: "diffuseConstant",
+        direction: "direction",
+        display: "display",
+        divisor: "divisor",
+        dominantbaseline: "dominantBaseline",
+        "dominant-baseline": "dominantBaseline",
+        dur: "dur",
+        dx: "dx",
+        dy: "dy",
+        edgemode: "edgeMode",
+        elevation: "elevation",
+        enablebackground: "enableBackground",
+        "enable-background": "enableBackground",
+        end: "end",
+        exponent: "exponent",
+        externalresourcesrequired: "externalResourcesRequired",
+        fill: "fill",
+        fillopacity: "fillOpacity",
+        "fill-opacity": "fillOpacity",
+        fillrule: "fillRule",
+        "fill-rule": "fillRule",
+        filter: "filter",
+        filterres: "filterRes",
+        filterunits: "filterUnits",
+        floodopacity: "floodOpacity",
+        "flood-opacity": "floodOpacity",
+        floodcolor: "floodColor",
+        "flood-color": "floodColor",
+        focusable: "focusable",
+        fontfamily: "fontFamily",
+        "font-family": "fontFamily",
+        fontsize: "fontSize",
+        "font-size": "fontSize",
+        fontsizeadjust: "fontSizeAdjust",
+        "font-size-adjust": "fontSizeAdjust",
+        fontstretch: "fontStretch",
+        "font-stretch": "fontStretch",
+        fontstyle: "fontStyle",
+        "font-style": "fontStyle",
+        fontvariant: "fontVariant",
+        "font-variant": "fontVariant",
+        fontweight: "fontWeight",
+        "font-weight": "fontWeight",
+        format: "format",
+        from: "from",
+        fx: "fx",
+        fy: "fy",
+        g1: "g1",
+        g2: "g2",
+        glyphname: "glyphName",
+        "glyph-name": "glyphName",
+        glyphorientationhorizontal: "glyphOrientationHorizontal",
+        "glyph-orientation-horizontal": "glyphOrientationHorizontal",
+        glyphorientationvertical: "glyphOrientationVertical",
+        "glyph-orientation-vertical": "glyphOrientationVertical",
+        glyphref: "glyphRef",
+        gradienttransform: "gradientTransform",
+        gradientunits: "gradientUnits",
+        hanging: "hanging",
+        horizadvx: "horizAdvX",
+        "horiz-adv-x": "horizAdvX",
+        horizoriginx: "horizOriginX",
+        "horiz-origin-x": "horizOriginX",
+        ideographic: "ideographic",
+        imagerendering: "imageRendering",
+        "image-rendering": "imageRendering",
+        in2: "in2",
+        in: "in",
+        inlist: "inlist",
+        intercept: "intercept",
+        k1: "k1",
+        k2: "k2",
+        k3: "k3",
+        k4: "k4",
+        k: "k",
+        kernelmatrix: "kernelMatrix",
+        kernelunitlength: "kernelUnitLength",
+        kerning: "kerning",
+        keypoints: "keyPoints",
+        keysplines: "keySplines",
+        keytimes: "keyTimes",
+        lengthadjust: "lengthAdjust",
+        letterspacing: "letterSpacing",
+        "letter-spacing": "letterSpacing",
+        lightingcolor: "lightingColor",
+        "lighting-color": "lightingColor",
+        limitingconeangle: "limitingConeAngle",
+        local: "local",
+        markerend: "markerEnd",
+        "marker-end": "markerEnd",
+        markerheight: "markerHeight",
+        markermid: "markerMid",
+        "marker-mid": "markerMid",
+        markerstart: "markerStart",
+        "marker-start": "markerStart",
+        markerunits: "markerUnits",
+        markerwidth: "markerWidth",
+        mask: "mask",
+        maskcontentunits: "maskContentUnits",
+        maskunits: "maskUnits",
+        mathematical: "mathematical",
+        mode: "mode",
+        numoctaves: "numOctaves",
+        offset: "offset",
+        opacity: "opacity",
+        operator: "operator",
+        order: "order",
+        orient: "orient",
+        orientation: "orientation",
+        origin: "origin",
+        overflow: "overflow",
+        overlineposition: "overlinePosition",
+        "overline-position": "overlinePosition",
+        overlinethickness: "overlineThickness",
+        "overline-thickness": "overlineThickness",
+        paintorder: "paintOrder",
+        "paint-order": "paintOrder",
+        panose1: "panose1",
+        "panose-1": "panose1",
+        pathlength: "pathLength",
+        patterncontentunits: "patternContentUnits",
+        patterntransform: "patternTransform",
+        patternunits: "patternUnits",
+        pointerevents: "pointerEvents",
+        "pointer-events": "pointerEvents",
+        points: "points",
+        pointsatx: "pointsAtX",
+        pointsaty: "pointsAtY",
+        pointsatz: "pointsAtZ",
+        popover: "popover",
+        popovertarget: "popoverTarget",
+        popovertargetaction: "popoverTargetAction",
+        prefix: "prefix",
+        preservealpha: "preserveAlpha",
+        preserveaspectratio: "preserveAspectRatio",
+        primitiveunits: "primitiveUnits",
+        property: "property",
+        r: "r",
+        radius: "radius",
+        refx: "refX",
+        refy: "refY",
+        renderingintent: "renderingIntent",
+        "rendering-intent": "renderingIntent",
+        repeatcount: "repeatCount",
+        repeatdur: "repeatDur",
+        requiredextensions: "requiredExtensions",
+        requiredfeatures: "requiredFeatures",
+        resource: "resource",
+        restart: "restart",
+        result: "result",
+        results: "results",
+        rotate: "rotate",
+        rx: "rx",
+        ry: "ry",
+        scale: "scale",
+        security: "security",
+        seed: "seed",
+        shaperendering: "shapeRendering",
+        "shape-rendering": "shapeRendering",
+        slope: "slope",
+        spacing: "spacing",
+        specularconstant: "specularConstant",
+        specularexponent: "specularExponent",
+        speed: "speed",
+        spreadmethod: "spreadMethod",
+        startoffset: "startOffset",
+        stddeviation: "stdDeviation",
+        stemh: "stemh",
+        stemv: "stemv",
+        stitchtiles: "stitchTiles",
+        stopcolor: "stopColor",
+        "stop-color": "stopColor",
+        stopopacity: "stopOpacity",
+        "stop-opacity": "stopOpacity",
+        strikethroughposition: "strikethroughPosition",
+        "strikethrough-position": "strikethroughPosition",
+        strikethroughthickness: "strikethroughThickness",
+        "strikethrough-thickness": "strikethroughThickness",
+        string: "string",
+        stroke: "stroke",
+        strokedasharray: "strokeDasharray",
+        "stroke-dasharray": "strokeDasharray",
+        strokedashoffset: "strokeDashoffset",
+        "stroke-dashoffset": "strokeDashoffset",
+        strokelinecap: "strokeLinecap",
+        "stroke-linecap": "strokeLinecap",
+        strokelinejoin: "strokeLinejoin",
+        "stroke-linejoin": "strokeLinejoin",
+        strokemiterlimit: "strokeMiterlimit",
+        "stroke-miterlimit": "strokeMiterlimit",
+        strokewidth: "strokeWidth",
+        "stroke-width": "strokeWidth",
+        strokeopacity: "strokeOpacity",
+        "stroke-opacity": "strokeOpacity",
+        suppresscontenteditablewarning: "suppressContentEditableWarning",
+        suppresshydrationwarning: "suppressHydrationWarning",
+        surfacescale: "surfaceScale",
+        systemlanguage: "systemLanguage",
+        tablevalues: "tableValues",
+        targetx: "targetX",
+        targety: "targetY",
+        textanchor: "textAnchor",
+        "text-anchor": "textAnchor",
+        textdecoration: "textDecoration",
+        "text-decoration": "textDecoration",
+        textlength: "textLength",
+        textrendering: "textRendering",
+        "text-rendering": "textRendering",
+        to: "to",
+        transform: "transform",
+        transformorigin: "transformOrigin",
+        "transform-origin": "transformOrigin",
+        typeof: "typeof",
+        u1: "u1",
+        u2: "u2",
+        underlineposition: "underlinePosition",
+        "underline-position": "underlinePosition",
+        underlinethickness: "underlineThickness",
+        "underline-thickness": "underlineThickness",
+        unicode: "unicode",
+        unicodebidi: "unicodeBidi",
+        "unicode-bidi": "unicodeBidi",
+        unicoderange: "unicodeRange",
+        "unicode-range": "unicodeRange",
+        unitsperem: "unitsPerEm",
+        "units-per-em": "unitsPerEm",
+        unselectable: "unselectable",
+        valphabetic: "vAlphabetic",
+        "v-alphabetic": "vAlphabetic",
+        values: "values",
+        vectoreffect: "vectorEffect",
+        "vector-effect": "vectorEffect",
+        version: "version",
+        vertadvy: "vertAdvY",
+        "vert-adv-y": "vertAdvY",
+        vertoriginx: "vertOriginX",
+        "vert-origin-x": "vertOriginX",
+        vertoriginy: "vertOriginY",
+        "vert-origin-y": "vertOriginY",
+        vhanging: "vHanging",
+        "v-hanging": "vHanging",
+        videographic: "vIdeographic",
+        "v-ideographic": "vIdeographic",
+        viewbox: "viewBox",
+        viewtarget: "viewTarget",
+        visibility: "visibility",
+        vmathematical: "vMathematical",
+        "v-mathematical": "vMathematical",
+        vocab: "vocab",
+        widths: "widths",
+        wordspacing: "wordSpacing",
+        "word-spacing": "wordSpacing",
+        writingmode: "writingMode",
+        "writing-mode": "writingMode",
+        x1: "x1",
+        x2: "x2",
+        x: "x",
+        xchannelselector: "xChannelSelector",
+        xheight: "xHeight",
+        "x-height": "xHeight",
+        xlinkactuate: "xlinkActuate",
+        "xlink:actuate": "xlinkActuate",
+        xlinkarcrole: "xlinkArcrole",
+        "xlink:arcrole": "xlinkArcrole",
+        xlinkhref: "xlinkHref",
+        "xlink:href": "xlinkHref",
+        xlinkrole: "xlinkRole",
+        "xlink:role": "xlinkRole",
+        xlinkshow: "xlinkShow",
+        "xlink:show": "xlinkShow",
+        xlinktitle: "xlinkTitle",
+        "xlink:title": "xlinkTitle",
+        xlinktype: "xlinkType",
+        "xlink:type": "xlinkType",
+        xmlbase: "xmlBase",
+        "xml:base": "xmlBase",
+        xmllang: "xmlLang",
+        "xml:lang": "xmlLang",
+        xmlns: "xmlns",
+        "xml:space": "xmlSpace",
+        xmlnsxlink: "xmlnsXlink",
+        "xmlns:xlink": "xmlnsXlink",
+        xmlspace: "xmlSpace",
+        y1: "y1",
+        y2: "y2",
+        y: "y",
+        ychannelselector: "yChannelSelector",
+        z: "z",
+        zoomandpan: "zoomAndPan"
+      },
+      warnedProperties = {},
+      EVENT_NAME_REGEX = /^on./,
+      INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,
+      rARIA = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,
+      msPattern$1 = /^-ms-/,
+      hyphenPattern = /-(.)/g,
+      badStyleValueWithSemicolonPattern = /;\s*$/,
+      warnedStyleNames = {},
+      warnedStyleValues = {},
+      warnedForNaNValue = !1,
+      warnedForInfinityValue = !1,
+      matchHtmlRegExp = /["'&<>]/,
+      uppercasePattern = /([A-Z])/g,
+      msPattern = /^ms-/,
+      isJavaScriptProtocol =
+        /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i,
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      ReactDOMSharedInternals =
+        ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      NotPending = Object.freeze({
+        pending: !1,
+        data: null,
+        method: null,
+        action: null
+      }),
+      previousDispatcher = ReactDOMSharedInternals.d;
+    ReactDOMSharedInternals.d = {
+      f: previousDispatcher.f,
+      r: previousDispatcher.r,
+      D: function (href) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            if (!resumableState.dnsResources.hasOwnProperty(href)) {
+              resumableState.dnsResources[href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              )
+                JSCompiler_temp =
+                  ((header =
+                    "<" +
+                    escapeHrefForLinkHeaderURLContext(href) +
+                    ">; rel=dns-prefetch"),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              JSCompiler_temp
+                ? ((renderState.resets.dns[href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((header = []),
+                  pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+                  renderState.preconnects.add(header));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.D(href);
+      },
+      C: function (href, crossOrigin) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            var bucket =
+              "use-credentials" === crossOrigin
+                ? "credentials"
+                : "string" === typeof crossOrigin
+                  ? "anonymous"
+                  : "default";
+            if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+              resumableState.connectResources[bucket][href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              ) {
+                JSCompiler_temp =
+                  "<" +
+                  escapeHrefForLinkHeaderURLContext(href) +
+                  ">; rel=preconnect";
+                if ("string" === typeof crossOrigin) {
+                  var escapedCrossOrigin =
+                    escapeStringForLinkHeaderQuotedParamValueContext(
+                      crossOrigin,
+                      "crossOrigin"
+                    );
+                  JSCompiler_temp +=
+                    '; crossorigin="' + escapedCrossOrigin + '"';
+                }
+                JSCompiler_temp =
+                  ((header = JSCompiler_temp),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              }
+              JSCompiler_temp
+                ? ((renderState.resets.connect[bucket][href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((bucket = []),
+                  pushLinkImpl(bucket, {
+                    rel: "preconnect",
+                    href: href,
+                    crossOrigin: crossOrigin
+                  }),
+                  renderState.preconnects.add(bucket));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.C(href, crossOrigin);
+      },
+      L: function (href, as, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (as && href) {
+            switch (as) {
+              case "image":
+                if (options) {
+                  var imageSrcSet = options.imageSrcSet;
+                  var imageSizes = options.imageSizes;
+                  var fetchPriority = options.fetchPriority;
+                }
+                var key = imageSrcSet
+                  ? imageSrcSet + "\n" + (imageSizes || "")
+                  : href;
+                if (resumableState.imageResources.hasOwnProperty(key)) return;
+                resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+                resumableState = renderState.headers;
+                var header;
+                resumableState &&
+                0 < resumableState.remainingCapacity &&
+                "string" !== typeof imageSrcSet &&
+                "high" === fetchPriority &&
+                ((header = getPreloadAsHeader(href, as, options)),
+                0 <= (resumableState.remainingCapacity -= header.length + 2))
+                  ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+                    resumableState.highImagePreloads &&
+                      (resumableState.highImagePreloads += ", "),
+                    (resumableState.highImagePreloads += header))
+                  : ((resumableState = []),
+                    pushLinkImpl(
+                      resumableState,
+                      assign(
+                        {
+                          rel: "preload",
+                          href: imageSrcSet ? void 0 : href,
+                          as: as
+                        },
+                        options
+                      )
+                    ),
+                    "high" === fetchPriority
+                      ? renderState.highImagePreloads.add(resumableState)
+                      : (renderState.bulkPreloads.add(resumableState),
+                        renderState.preloads.images.set(key, resumableState)));
+                break;
+              case "style":
+                if (resumableState.styleResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.styleResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.stylesheets.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                break;
+              case "script":
+                if (resumableState.scriptResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                renderState.preloads.scripts.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.scriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                break;
+              default:
+                if (resumableState.unknownResources.hasOwnProperty(as)) {
+                  if (
+                    ((imageSrcSet = resumableState.unknownResources[as]),
+                    imageSrcSet.hasOwnProperty(href))
+                  )
+                    return;
+                } else
+                  (imageSrcSet = {}),
+                    (resumableState.unknownResources[as] = imageSrcSet);
+                imageSrcSet[href] = PRELOAD_NO_CREDS;
+                if (
+                  (resumableState = renderState.headers) &&
+                  0 < resumableState.remainingCapacity &&
+                  "font" === as &&
+                  ((key = getPreloadAsHeader(href, as, options)),
+                  0 <= (resumableState.remainingCapacity -= key.length + 2))
+                )
+                  (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+                    resumableState.fontPreloads &&
+                      (resumableState.fontPreloads += ", "),
+                    (resumableState.fontPreloads += key);
+                else
+                  switch (
+                    ((resumableState = []),
+                    (href = assign(
+                      { rel: "preload", href: href, as: as },
+                      options
+                    )),
+                    pushLinkImpl(resumableState, href),
+                    as)
+                  ) {
+                    case "font":
+                      renderState.fontPreloads.add(resumableState);
+                      break;
+                    default:
+                      renderState.bulkPreloads.add(resumableState);
+                  }
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.L(href, as, options);
+      },
+      m: function (href, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            var as =
+              options && "string" === typeof options.as ? options.as : "script";
+            switch (as) {
+              case "script":
+                if (resumableState.moduleScriptResources.hasOwnProperty(href))
+                  return;
+                as = [];
+                resumableState.moduleScriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.moduleScripts.set(href, as);
+                break;
+              default:
+                if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+                  var resources = resumableState.unknownResources[as];
+                  if (resources.hasOwnProperty(href)) return;
+                } else
+                  (resources = {}),
+                    (resumableState.moduleUnknownResources[as] = resources);
+                as = [];
+                resources[href] = PRELOAD_NO_CREDS;
+            }
+            pushLinkImpl(
+              as,
+              assign({ rel: "modulepreload", href: href }, options)
+            );
+            renderState.bulkPreloads.add(as);
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.m(href, options);
+      },
+      X: function (src, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState = resumableState.scriptResources.hasOwnProperty(
+              src
+            )
+              ? resumableState.scriptResources[src]
+              : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.scriptResources[src] = EXISTS),
+              (options = assign({ src: src, async: !0 }, options)),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.scripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.X(src, options);
+      },
+      S: function (href, precedence, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            precedence = precedence || "default";
+            var styleQueue = renderState.styles.get(precedence),
+              resourceState = resumableState.styleResources.hasOwnProperty(href)
+                ? resumableState.styleResources[href]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.styleResources[href] = EXISTS),
+              styleQueue ||
+                ((styleQueue = {
+                  precedence: stringToChunk(escapeTextForBrowser(precedence)),
+                  rules: [],
+                  hrefs: [],
+                  sheets: new Map()
+                }),
+                renderState.styles.set(precedence, styleQueue)),
+              (precedence = {
+                state: PENDING$1,
+                props: assign(
+                  {
+                    rel: "stylesheet",
+                    href: href,
+                    "data-precedence": precedence
+                  },
+                  options
+                )
+              }),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(precedence.props, resourceState),
+                (renderState = renderState.preloads.stylesheets.get(href)) &&
+                0 < renderState.length
+                  ? (renderState.length = 0)
+                  : (precedence.state = PRELOADED)),
+              styleQueue.sheets.set(href, precedence),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.S(href, precedence, options);
+      },
+      M: function (src, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState =
+              resumableState.moduleScriptResources.hasOwnProperty(src)
+                ? resumableState.moduleScriptResources[src]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.moduleScriptResources[src] = EXISTS),
+              (options = assign(
+                { src: src, type: "module", async: !0 },
+                options
+              )),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.moduleScripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.M(src, options);
+      }
+    };
+    var NothingSent = 0,
+      SentCompleteSegmentFunction = 1,
+      SentCompleteBoundaryFunction = 2,
+      SentClientRenderFunction = 4,
+      SentStyleInsertionFunction = 8,
+      EXISTS = null,
+      PRELOAD_NO_CREDS = [];
+    Object.freeze(PRELOAD_NO_CREDS);
+    stringToPrecomputedChunk('"></template>');
+    var startInlineScript = stringToPrecomputedChunk("<script>"),
+      endInlineScript = stringToPrecomputedChunk("\x3c/script>"),
+      startScriptSrc = stringToPrecomputedChunk('<script src="'),
+      startModuleSrc = stringToPrecomputedChunk('<script type="module" src="'),
+      scriptNonce = stringToPrecomputedChunk('" nonce="'),
+      scriptIntegirty = stringToPrecomputedChunk('" integrity="'),
+      scriptCrossOrigin = stringToPrecomputedChunk('" crossorigin="'),
+      endAsyncScript = stringToPrecomputedChunk('" async="">\x3c/script>'),
+      scriptRegex = /(<\/|<)(s)(cript)/gi,
+      importMapScriptStart = stringToPrecomputedChunk(
+        '<script type="importmap">'
+      ),
+      importMapScriptEnd = stringToPrecomputedChunk("\x3c/script>");
+    var didWarnForNewBooleanPropsWithEmptyValue = {};
+    var NoContribution = 0,
+      ROOT_HTML_MODE = 0,
+      HTML_HTML_MODE = 1,
+      HTML_MODE = 2,
+      HTML_HEAD_MODE = 3,
+      SVG_MODE = 4,
+      MATHML_MODE = 5,
+      HTML_TABLE_MODE = 6,
+      HTML_TABLE_BODY_MODE = 7,
+      HTML_TABLE_ROW_MODE = 8,
+      HTML_COLGROUP_MODE = 9,
+      textSeparator = stringToPrecomputedChunk("\x3c!-- --\x3e"),
+      styleNameCache = new Map(),
+      styleAttributeStart = stringToPrecomputedChunk(' style="'),
+      styleAssign = stringToPrecomputedChunk(":"),
+      styleSeparator = stringToPrecomputedChunk(";"),
+      attributeSeparator = stringToPrecomputedChunk(" "),
+      attributeAssign = stringToPrecomputedChunk('="'),
+      attributeEnd = stringToPrecomputedChunk('"'),
+      attributeEmptyString = stringToPrecomputedChunk('=""'),
+      actionJavaScriptURL = stringToPrecomputedChunk(
+        escapeTextForBrowser(
+          "javascript:throw new Error('React form unexpectedly submitted.')"
+        )
+      ),
+      startHiddenInputChunk = stringToPrecomputedChunk('<input type="hidden"'),
+      endOfStartTag = stringToPrecomputedChunk(">"),
+      endOfStartTagSelfClosing = stringToPrecomputedChunk("/>"),
+      didWarnDefaultInputValue = !1,
+      didWarnDefaultChecked = !1,
+      didWarnDefaultSelectValue = !1,
+      didWarnDefaultTextareaValue = !1,
+      didWarnInvalidOptionChildren = !1,
+      didWarnInvalidOptionInnerHTML = !1,
+      didWarnSelectedSetOnOption = !1,
+      didWarnFormActionType = !1,
+      didWarnFormActionName = !1,
+      didWarnFormActionTarget = !1,
+      didWarnFormActionMethod = !1,
+      selectedMarkerAttribute = stringToPrecomputedChunk(' selected=""'),
+      formReplayingRuntimeScript = stringToPrecomputedChunk(
+        'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});'
+      ),
+      formStateMarkerIsMatching = stringToPrecomputedChunk("\x3c!--F!--\x3e"),
+      formStateMarkerIsNotMatching = stringToPrecomputedChunk("\x3c!--F--\x3e"),
+      styleRegex = /(<\/|<)(s)(tyle)/gi,
+      leadingNewline = stringToPrecomputedChunk("\n"),
+      VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+      validatedTagCache = new Map(),
+      doctypeChunk = stringToPrecomputedChunk("<!DOCTYPE html>"),
+      endTagCache = new Map(),
+      placeholder1 = stringToPrecomputedChunk('<template id="'),
+      placeholder2 = stringToPrecomputedChunk('"></template>'),
+      startCompletedSuspenseBoundary =
+        stringToPrecomputedChunk("\x3c!--$--\x3e"),
+      startPendingSuspenseBoundary1 = stringToPrecomputedChunk(
+        '\x3c!--$?--\x3e<template id="'
+      ),
+      startPendingSuspenseBoundary2 = stringToPrecomputedChunk('"></template>'),
+      startClientRenderedSuspenseBoundary =
+        stringToPrecomputedChunk("\x3c!--$!--\x3e"),
+      endSuspenseBoundary = stringToPrecomputedChunk("\x3c!--/$--\x3e"),
+      clientRenderedSuspenseBoundaryError1 =
+        stringToPrecomputedChunk("<template"),
+      clientRenderedSuspenseBoundaryErrorAttrInterstitial =
+        stringToPrecomputedChunk('"'),
+      clientRenderedSuspenseBoundaryError1A =
+        stringToPrecomputedChunk(' data-dgst="'),
+      clientRenderedSuspenseBoundaryError1B =
+        stringToPrecomputedChunk(' data-msg="'),
+      clientRenderedSuspenseBoundaryError1C =
+        stringToPrecomputedChunk(' data-stck="'),
+      clientRenderedSuspenseBoundaryError1D =
+        stringToPrecomputedChunk(' data-cstck="'),
+      clientRenderedSuspenseBoundaryError2 =
+        stringToPrecomputedChunk("></template>"),
+      boundaryPreambleContributionChunkStart =
+        stringToPrecomputedChunk("\x3c!--"),
+      boundaryPreambleContributionChunkEnd = stringToPrecomputedChunk("--\x3e"),
+      startSegmentHTML = stringToPrecomputedChunk('<div hidden id="'),
+      startSegmentHTML2 = stringToPrecomputedChunk('">'),
+      endSegmentHTML = stringToPrecomputedChunk("</div>"),
+      startSegmentSVG = stringToPrecomputedChunk(
+        '<svg aria-hidden="true" style="display:none" id="'
+      ),
+      startSegmentSVG2 = stringToPrecomputedChunk('">'),
+      endSegmentSVG = stringToPrecomputedChunk("</svg>"),
+      startSegmentMathML = stringToPrecomputedChunk(
+        '<math aria-hidden="true" style="display:none" id="'
+      ),
+      startSegmentMathML2 = stringToPrecomputedChunk('">'),
+      endSegmentMathML = stringToPrecomputedChunk("</math>"),
+      startSegmentTable = stringToPrecomputedChunk('<table hidden id="'),
+      startSegmentTable2 = stringToPrecomputedChunk('">'),
+      endSegmentTable = stringToPrecomputedChunk("</table>"),
+      startSegmentTableBody = stringToPrecomputedChunk(
+        '<table hidden><tbody id="'
+      ),
+      startSegmentTableBody2 = stringToPrecomputedChunk('">'),
+      endSegmentTableBody = stringToPrecomputedChunk("</tbody></table>"),
+      startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id="'),
+      startSegmentTableRow2 = stringToPrecomputedChunk('">'),
+      endSegmentTableRow = stringToPrecomputedChunk("</tr></table>"),
+      startSegmentColGroup = stringToPrecomputedChunk(
+        '<table hidden><colgroup id="'
+      ),
+      startSegmentColGroup2 = stringToPrecomputedChunk('">'),
+      endSegmentColGroup = stringToPrecomputedChunk("</colgroup></table>"),
+      completeSegmentScript1Full = stringToPrecomputedChunk(
+        '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("'
+      ),
+      completeSegmentScript1Partial = stringToPrecomputedChunk('$RS("'),
+      completeSegmentScript2 = stringToPrecomputedChunk('","'),
+      completeSegmentScriptEnd = stringToPrecomputedChunk('")\x3c/script>');
+    stringToPrecomputedChunk('<template data-rsi="" data-sid="');
+    stringToPrecomputedChunk('" data-pid="');
+    var completeBoundaryScript1Full = stringToPrecomputedChunk(
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("'
+      ),
+      completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC("'),
+      completeBoundaryWithStylesScript1FullBoth = stringToPrecomputedChunk(
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+      ),
+      completeBoundaryWithStylesScript1FullPartial = stringToPrecomputedChunk(
+        '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+      ),
+      completeBoundaryWithStylesScript1Partial =
+        stringToPrecomputedChunk('$RR("'),
+      completeBoundaryScript2 = stringToPrecomputedChunk('","'),
+      completeBoundaryScript3a = stringToPrecomputedChunk('",'),
+      completeBoundaryScript3b = stringToPrecomputedChunk('"'),
+      completeBoundaryScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+    stringToPrecomputedChunk('<template data-rci="" data-bid="');
+    stringToPrecomputedChunk('<template data-rri="" data-bid="');
+    stringToPrecomputedChunk('" data-sid="');
+    stringToPrecomputedChunk('" data-sty="');
+    var clientRenderScript1Full = stringToPrecomputedChunk(
+        '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("'
+      ),
+      clientRenderScript1Partial = stringToPrecomputedChunk('$RX("'),
+      clientRenderScript1A = stringToPrecomputedChunk('"'),
+      clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(","),
+      clientRenderScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+    stringToPrecomputedChunk('<template data-rxi="" data-bid="');
+    stringToPrecomputedChunk('" data-dgst="');
+    stringToPrecomputedChunk('" data-msg="');
+    stringToPrecomputedChunk('" data-stck="');
+    stringToPrecomputedChunk('" data-cstck="');
+    var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g,
+      regexForJSStringsInScripts = /[&><\u2028\u2029]/g,
+      lateStyleTagResourceOpen1 = stringToPrecomputedChunk(
+        '<style media="not all" data-precedence="'
+      ),
+      lateStyleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+      lateStyleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+      lateStyleTagTemplateClose = stringToPrecomputedChunk("</style>"),
+      currentlyRenderingBoundaryHasStylesToHoist = !1,
+      destinationHasCapacity = !0,
+      stylesheetFlushingQueue = [],
+      styleTagResourceOpen1 = stringToPrecomputedChunk(
+        '<style data-precedence="'
+      ),
+      styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+      spaceSeparator = stringToPrecomputedChunk(" "),
+      styleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+      styleTagResourceClose = stringToPrecomputedChunk("</style>"),
+      arrayFirstOpenBracket = stringToPrecomputedChunk("["),
+      arraySubsequentOpenBracket = stringToPrecomputedChunk(",["),
+      arrayInterstitial = stringToPrecomputedChunk(","),
+      arrayCloseBracket = stringToPrecomputedChunk("]"),
+      PENDING$1 = 0,
+      PRELOADED = 1,
+      PREAMBLE = 2,
+      LATE = 3,
+      regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g,
+      regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g,
+      bind = Function.prototype.bind,
+      supportsRequestStorage = "function" === typeof AsyncLocalStorage,
+      requestStorage = supportsRequestStorage ? new AsyncLocalStorage() : null,
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      emptyContextObject = {};
+    Object.freeze(emptyContextObject);
+    var rendererSigil = {};
+    var currentActiveSnapshot = null,
+      didWarnAboutNoopUpdateForComponent = {},
+      didWarnAboutDeprecatedWillMount = {};
+    var didWarnAboutUninitializedState = new Set();
+    var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
+    var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
+    var didWarnAboutDirectlyAssigningPropsToState = new Set();
+    var didWarnAboutUndefinedDerivedState = new Set();
+    var didWarnAboutContextTypes$1 = new Set();
+    var didWarnAboutChildContextTypes = new Set();
+    var didWarnAboutInvalidateContextType = new Set();
+    var didWarnOnInvalidCallback = new Set();
+    var classComponentUpdater = {
+        enqueueSetState: function (inst, payload, callback) {
+          var internals = inst._reactInternals;
+          null === internals.queue
+            ? warnNoop(inst, "setState")
+            : (internals.queue.push(payload),
+              void 0 !== callback &&
+                null !== callback &&
+                warnOnInvalidCallback(callback));
+        },
+        enqueueReplaceState: function (inst, payload, callback) {
+          inst = inst._reactInternals;
+          inst.replace = !0;
+          inst.queue = [payload];
+          void 0 !== callback &&
+            null !== callback &&
+            warnOnInvalidCallback(callback);
+        },
+        enqueueForceUpdate: function (inst, callback) {
+          null === inst._reactInternals.queue
+            ? warnNoop(inst, "forceUpdate")
+            : void 0 !== callback &&
+              null !== callback &&
+              warnOnInvalidCallback(callback);
+        }
+      },
+      emptyTreeContext = { id: 1, overflow: "" },
+      clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+      log = Math.log,
+      LN2 = Math.LN2,
+      SuspenseException = Error(
+        "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+      ),
+      suspendedThenable = null,
+      objectIs = "function" === typeof Object.is ? Object.is : is,
+      currentlyRenderingComponent = null,
+      currentlyRenderingTask = null,
+      currentlyRenderingRequest = null,
+      currentlyRenderingKeyPath = null,
+      firstWorkInProgressHook = null,
+      workInProgressHook = null,
+      isReRender = !1,
+      didScheduleRenderPhaseUpdate = !1,
+      localIdCounter = 0,
+      actionStateCounter = 0,
+      actionStateMatchingIndex = -1,
+      thenableIndexCounter = 0,
+      thenableState = null,
+      renderPhaseUpdates = null,
+      numberOfReRenders = 0,
+      isInHookUserCodeInDev = !1,
+      currentHookNameInDev,
+      HooksDispatcher = {
+        readContext: readContext,
+        use: function (usable) {
+          if (null !== usable && "object" === typeof usable) {
+            if ("function" === typeof usable.then)
+              return unwrapThenable(usable);
+            if (usable.$$typeof === REACT_CONTEXT_TYPE)
+              return readContext(usable);
+          }
+          throw Error(
+            "An unsupported type was passed to use(): " + String(usable)
+          );
+        },
+        useContext: function (context) {
+          currentHookNameInDev = "useContext";
+          resolveCurrentlyRenderingComponent();
+          return context._currentValue;
+        },
+        useMemo: useMemo,
+        useReducer: useReducer,
+        useRef: function (initialValue) {
+          currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+          workInProgressHook = createWorkInProgressHook();
+          var previousRef = workInProgressHook.memoizedState;
+          return null === previousRef
+            ? ((initialValue = { current: initialValue }),
+              Object.seal(initialValue),
+              (workInProgressHook.memoizedState = initialValue))
+            : previousRef;
+        },
+        useState: function (initialState) {
+          currentHookNameInDev = "useState";
+          return useReducer(basicStateReducer, initialState);
+        },
+        useInsertionEffect: noop$1,
+        useLayoutEffect: noop$1,
+        useCallback: function (callback, deps) {
+          return useMemo(function () {
+            return callback;
+          }, deps);
+        },
+        useImperativeHandle: noop$1,
+        useEffect: noop$1,
+        useDebugValue: noop$1,
+        useDeferredValue: function (value, initialValue) {
+          resolveCurrentlyRenderingComponent();
+          return void 0 !== initialValue ? initialValue : value;
+        },
+        useTransition: function () {
+          resolveCurrentlyRenderingComponent();
+          return [!1, unsupportedStartTransition];
+        },
+        useId: function () {
+          var treeId = currentlyRenderingTask.treeContext;
+          var overflow = treeId.overflow;
+          treeId = treeId.id;
+          treeId =
+            (treeId & ~(1 << (32 - clz32(treeId) - 1))).toString(32) + overflow;
+          var resumableState = currentResumableState;
+          if (null === resumableState)
+            throw Error(
+              "Invalid hook call. Hooks can only be called inside of the body of a function component."
+            );
+          overflow = localIdCounter++;
+          treeId = "\u00ab" + resumableState.idPrefix + "R" + treeId;
+          0 < overflow && (treeId += "H" + overflow.toString(32));
+          return treeId + "\u00bb";
+        },
+        useSyncExternalStore: function (
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        ) {
+          if (void 0 === getServerSnapshot)
+            throw Error(
+              "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+            );
+          return getServerSnapshot();
+        },
+        useOptimistic: function (passthrough) {
+          resolveCurrentlyRenderingComponent();
+          return [passthrough, unsupportedSetOptimisticState];
+        },
+        useActionState: useActionState,
+        useFormState: useActionState,
+        useHostTransitionStatus: function () {
+          resolveCurrentlyRenderingComponent();
+          return NotPending;
+        },
+        useMemoCache: function (size) {
+          for (var data = Array(size), i = 0; i < size; i++)
+            data[i] = REACT_MEMO_CACHE_SENTINEL;
+          return data;
+        },
+        useCacheRefresh: function () {
+          return unsupportedRefresh;
+        }
+      },
+      currentResumableState = null,
+      currentTaskInDEV = null,
+      DefaultAsyncDispatcher = {
+        getCacheForType: function () {
+          throw Error("Not implemented.");
+        },
+        getOwner: function () {
+          return null === currentTaskInDEV
+            ? null
+            : currentTaskInDEV.componentStack;
+        }
+      },
+      disabledDepth = 0,
+      prevLog,
+      prevInfo,
+      prevWarn,
+      prevError,
+      prevGroup,
+      prevGroupCollapsed,
+      prevGroupEnd;
+    disabledLog.__reactDisabledLog = !0;
+    var prefix,
+      suffix,
+      reentry = !1;
+    var componentFrameCache = new (
+      "function" === typeof WeakMap ? WeakMap : Map
+    )();
+    var callComponent = {
+        react_stack_bottom_frame: function (Component, props, secondArg) {
+          return Component(props, secondArg);
+        }
+      },
+      callComponentInDEV =
+        callComponent.react_stack_bottom_frame.bind(callComponent),
+      callRender = {
+        react_stack_bottom_frame: function (instance) {
+          return instance.render();
+        }
+      },
+      callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),
+      callLazyInit = {
+        react_stack_bottom_frame: function (lazy) {
+          var init = lazy._init;
+          return init(lazy._payload);
+        }
+      },
+      callLazyInitInDEV =
+        callLazyInit.react_stack_bottom_frame.bind(callLazyInit),
+      lastResetTime = 0;
+    if (
+      "object" === typeof performance &&
+      "function" === typeof performance.now
+    ) {
+      var localPerformance = performance;
+      var getCurrentTime = function () {
+        return localPerformance.now();
+      };
+    } else {
+      var localDate = Date;
+      getCurrentTime = function () {
+        return localDate.now();
+      };
+    }
+    var CLIENT_RENDERED = 4,
+      PENDING = 0,
+      COMPLETED = 1,
+      FLUSHED = 2,
+      POSTPONED = 5,
+      CLOSED = 14,
+      currentRequest = null,
+      didWarnAboutBadClass = {},
+      didWarnAboutContextTypes = {},
+      didWarnAboutContextTypeOnFunctionComponent = {},
+      didWarnAboutGetDerivedStateOnFunctionComponent = {},
+      didWarnAboutReassigningProps = !1,
+      didWarnAboutGenerators = !1,
+      didWarnAboutMaps = !1;
+    ensureCorrectIsomorphicReactVersion();
+    ensureCorrectIsomorphicReactVersion();
+    exports.prerender = function (children, options) {
+      return new Promise(function (resolve, reject) {
+        var onHeaders = options ? options.onHeaders : void 0,
+          onHeadersImpl;
+        onHeaders &&
+          (onHeadersImpl = function (headersDescriptor) {
+            onHeaders(new Headers(headersDescriptor));
+          });
+        var resources = createResumableState(
+            options ? options.identifierPrefix : void 0,
+            options ? options.unstable_externalRuntimeSrc : void 0,
+            options ? options.bootstrapScriptContent : void 0,
+            options ? options.bootstrapScripts : void 0,
+            options ? options.bootstrapModules : void 0
+          ),
+          request = createPrerenderRequest(
+            children,
+            resources,
+            createRenderState(
+              resources,
+              void 0,
+              options ? options.unstable_externalRuntimeSrc : void 0,
+              options ? options.importMap : void 0,
+              onHeadersImpl,
+              options ? options.maxHeadersLength : void 0
+            ),
+            createRootFormatContext(options ? options.namespaceURI : void 0),
+            options ? options.progressiveChunkSize : void 0,
+            options ? options.onError : void 0,
+            function () {
+              var result = {
+                prelude: new ReadableStream(
+                  {
+                    type: "bytes",
+                    pull: function (controller) {
+                      startFlowing(request, controller);
+                    },
+                    cancel: function (reason) {
+                      request.destination = null;
+                      abort(request, reason);
+                    }
+                  },
+                  { highWaterMark: 0 }
+                )
+              };
+              resolve(result);
+            },
+            void 0,
+            void 0,
+            reject,
+            options ? options.onPostpone : void 0
+          );
+        if (options && options.signal) {
+          var signal = options.signal;
+          if (signal.aborted) abort(request, signal.reason);
+          else {
+            var listener = function () {
+              abort(request, signal.reason);
+              signal.removeEventListener("abort", listener);
+            };
+            signal.addEventListener("abort", listener);
+          }
+        }
+        startWork(request);
+      });
+    };
+    exports.renderToReadableStream = function (children, options) {
+      return new Promise(function (resolve, reject) {
+        var onFatalError,
+          onAllReady,
+          allReady = new Promise(function (res, rej) {
+            onAllReady = res;
+            onFatalError = rej;
+          }),
+          onHeaders = options ? options.onHeaders : void 0,
+          onHeadersImpl;
+        onHeaders &&
+          (onHeadersImpl = function (headersDescriptor) {
+            onHeaders(new Headers(headersDescriptor));
+          });
+        var resumableState = createResumableState(
+            options ? options.identifierPrefix : void 0,
+            options ? options.unstable_externalRuntimeSrc : void 0,
+            options ? options.bootstrapScriptContent : void 0,
+            options ? options.bootstrapScripts : void 0,
+            options ? options.bootstrapModules : void 0
+          ),
+          request = createRequest(
+            children,
+            resumableState,
+            createRenderState(
+              resumableState,
+              options ? options.nonce : void 0,
+              options ? options.unstable_externalRuntimeSrc : void 0,
+              options ? options.importMap : void 0,
+              onHeadersImpl,
+              options ? options.maxHeadersLength : void 0
+            ),
+            createRootFormatContext(options ? options.namespaceURI : void 0),
+            options ? options.progressiveChunkSize : void 0,
+            options ? options.onError : void 0,
+            onAllReady,
+            function () {
+              var stream = new ReadableStream(
+                {
+                  type: "bytes",
+                  pull: function (controller) {
+                    startFlowing(request, controller);
+                  },
+                  cancel: function (reason) {
+                    request.destination = null;
+                    abort(request, reason);
+                  }
+                },
+                { highWaterMark: 0 }
+              );
+              stream.allReady = allReady;
+              resolve(stream);
+            },
+            function (error) {
+              allReady.catch(function () {});
+              reject(error);
+            },
+            onFatalError,
+            options ? options.onPostpone : void 0,
+            options ? options.formState : void 0
+          );
+        if (options && options.signal) {
+          var signal = options.signal;
+          if (signal.aborted) abort(request, signal.reason);
+          else {
+            var listener = function () {
+              abort(request, signal.reason);
+              signal.removeEventListener("abort", listener);
+            };
+            signal.addEventListener("abort", listener);
+          }
+        }
+        startWork(request);
+      });
+    };
+    exports.version = "19.1.1";
+  })();
Index: node_modules/react-dom/cjs/react-dom-server.edge.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server.edge.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server.edge.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6477 @@
+/**
+ * @license React
+ * react-dom-server.edge.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/*
+
+
+ JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
+
+ Copyright (c) 2011 Gary Court
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+"use strict";
+var React = require("react"),
+  ReactDOM = require("react-dom"),
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+  REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+  REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+  REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+  MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+  isArrayImpl = Array.isArray;
+function murmurhash3_32_gc(key, seed) {
+  var remainder = key.length & 3;
+  var bytes = key.length - remainder;
+  var h1 = seed;
+  for (seed = 0; seed < bytes; ) {
+    var k1 =
+      (key.charCodeAt(seed) & 255) |
+      ((key.charCodeAt(++seed) & 255) << 8) |
+      ((key.charCodeAt(++seed) & 255) << 16) |
+      ((key.charCodeAt(++seed) & 255) << 24);
+    ++seed;
+    k1 =
+      (3432918353 * (k1 & 65535) +
+        (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+      4294967295;
+    k1 = (k1 << 15) | (k1 >>> 17);
+    k1 =
+      (461845907 * (k1 & 65535) + (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+      4294967295;
+    h1 ^= k1;
+    h1 = (h1 << 13) | (h1 >>> 19);
+    h1 = (5 * (h1 & 65535) + (((5 * (h1 >>> 16)) & 65535) << 16)) & 4294967295;
+    h1 = (h1 & 65535) + 27492 + ((((h1 >>> 16) + 58964) & 65535) << 16);
+  }
+  k1 = 0;
+  switch (remainder) {
+    case 3:
+      k1 ^= (key.charCodeAt(seed + 2) & 255) << 16;
+    case 2:
+      k1 ^= (key.charCodeAt(seed + 1) & 255) << 8;
+    case 1:
+      (k1 ^= key.charCodeAt(seed) & 255),
+        (k1 =
+          (3432918353 * (k1 & 65535) +
+            (((3432918353 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295),
+        (k1 = (k1 << 15) | (k1 >>> 17)),
+        (h1 ^=
+          (461845907 * (k1 & 65535) +
+            (((461845907 * (k1 >>> 16)) & 65535) << 16)) &
+          4294967295);
+  }
+  h1 ^= key.length;
+  h1 ^= h1 >>> 16;
+  h1 =
+    (2246822507 * (h1 & 65535) + (((2246822507 * (h1 >>> 16)) & 65535) << 16)) &
+    4294967295;
+  h1 ^= h1 >>> 13;
+  h1 =
+    (3266489909 * (h1 & 65535) + (((3266489909 * (h1 >>> 16)) & 65535) << 16)) &
+    4294967295;
+  return (h1 ^ (h1 >>> 16)) >>> 0;
+}
+function handleErrorInNextTick(error) {
+  setTimeout(function () {
+    throw error;
+  });
+}
+var LocalPromise = Promise,
+  scheduleMicrotask =
+    "function" === typeof queueMicrotask
+      ? queueMicrotask
+      : function (callback) {
+          LocalPromise.resolve(null)
+            .then(callback)
+            .catch(handleErrorInNextTick);
+        },
+  currentView = null,
+  writtenBytes = 0;
+function writeChunk(destination, chunk) {
+  if (0 !== chunk.byteLength)
+    if (2048 < chunk.byteLength)
+      0 < writtenBytes &&
+        (destination.enqueue(
+          new Uint8Array(currentView.buffer, 0, writtenBytes)
+        ),
+        (currentView = new Uint8Array(2048)),
+        (writtenBytes = 0)),
+        destination.enqueue(chunk);
+    else {
+      var allowableBytes = currentView.length - writtenBytes;
+      allowableBytes < chunk.byteLength &&
+        (0 === allowableBytes
+          ? destination.enqueue(currentView)
+          : (currentView.set(chunk.subarray(0, allowableBytes), writtenBytes),
+            destination.enqueue(currentView),
+            (chunk = chunk.subarray(allowableBytes))),
+        (currentView = new Uint8Array(2048)),
+        (writtenBytes = 0));
+      currentView.set(chunk, writtenBytes);
+      writtenBytes += chunk.byteLength;
+    }
+}
+function writeChunkAndReturn(destination, chunk) {
+  writeChunk(destination, chunk);
+  return !0;
+}
+function completeWriting(destination) {
+  currentView &&
+    0 < writtenBytes &&
+    (destination.enqueue(new Uint8Array(currentView.buffer, 0, writtenBytes)),
+    (currentView = null),
+    (writtenBytes = 0));
+}
+var textEncoder = new TextEncoder();
+function stringToChunk(content) {
+  return textEncoder.encode(content);
+}
+function stringToPrecomputedChunk(content) {
+  return textEncoder.encode(content);
+}
+function closeWithError(destination, error) {
+  "function" === typeof destination.error
+    ? destination.error(error)
+    : destination.close();
+}
+var assign = Object.assign,
+  hasOwnProperty = Object.prototype.hasOwnProperty,
+  VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+    "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  illegalAttributeNameCache = {},
+  validatedAttributeNameCache = {};
+function isAttributeNameSafe(attributeName) {
+  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+    return !0;
+  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+    return (validatedAttributeNameCache[attributeName] = !0);
+  illegalAttributeNameCache[attributeName] = !0;
+  return !1;
+}
+var unitlessNumbers = new Set(
+    "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+      " "
+    )
+  ),
+  aliases = new Map([
+    ["acceptCharset", "accept-charset"],
+    ["htmlFor", "for"],
+    ["httpEquiv", "http-equiv"],
+    ["crossOrigin", "crossorigin"],
+    ["accentHeight", "accent-height"],
+    ["alignmentBaseline", "alignment-baseline"],
+    ["arabicForm", "arabic-form"],
+    ["baselineShift", "baseline-shift"],
+    ["capHeight", "cap-height"],
+    ["clipPath", "clip-path"],
+    ["clipRule", "clip-rule"],
+    ["colorInterpolation", "color-interpolation"],
+    ["colorInterpolationFilters", "color-interpolation-filters"],
+    ["colorProfile", "color-profile"],
+    ["colorRendering", "color-rendering"],
+    ["dominantBaseline", "dominant-baseline"],
+    ["enableBackground", "enable-background"],
+    ["fillOpacity", "fill-opacity"],
+    ["fillRule", "fill-rule"],
+    ["floodColor", "flood-color"],
+    ["floodOpacity", "flood-opacity"],
+    ["fontFamily", "font-family"],
+    ["fontSize", "font-size"],
+    ["fontSizeAdjust", "font-size-adjust"],
+    ["fontStretch", "font-stretch"],
+    ["fontStyle", "font-style"],
+    ["fontVariant", "font-variant"],
+    ["fontWeight", "font-weight"],
+    ["glyphName", "glyph-name"],
+    ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+    ["glyphOrientationVertical", "glyph-orientation-vertical"],
+    ["horizAdvX", "horiz-adv-x"],
+    ["horizOriginX", "horiz-origin-x"],
+    ["imageRendering", "image-rendering"],
+    ["letterSpacing", "letter-spacing"],
+    ["lightingColor", "lighting-color"],
+    ["markerEnd", "marker-end"],
+    ["markerMid", "marker-mid"],
+    ["markerStart", "marker-start"],
+    ["overlinePosition", "overline-position"],
+    ["overlineThickness", "overline-thickness"],
+    ["paintOrder", "paint-order"],
+    ["panose-1", "panose-1"],
+    ["pointerEvents", "pointer-events"],
+    ["renderingIntent", "rendering-intent"],
+    ["shapeRendering", "shape-rendering"],
+    ["stopColor", "stop-color"],
+    ["stopOpacity", "stop-opacity"],
+    ["strikethroughPosition", "strikethrough-position"],
+    ["strikethroughThickness", "strikethrough-thickness"],
+    ["strokeDasharray", "stroke-dasharray"],
+    ["strokeDashoffset", "stroke-dashoffset"],
+    ["strokeLinecap", "stroke-linecap"],
+    ["strokeLinejoin", "stroke-linejoin"],
+    ["strokeMiterlimit", "stroke-miterlimit"],
+    ["strokeOpacity", "stroke-opacity"],
+    ["strokeWidth", "stroke-width"],
+    ["textAnchor", "text-anchor"],
+    ["textDecoration", "text-decoration"],
+    ["textRendering", "text-rendering"],
+    ["transformOrigin", "transform-origin"],
+    ["underlinePosition", "underline-position"],
+    ["underlineThickness", "underline-thickness"],
+    ["unicodeBidi", "unicode-bidi"],
+    ["unicodeRange", "unicode-range"],
+    ["unitsPerEm", "units-per-em"],
+    ["vAlphabetic", "v-alphabetic"],
+    ["vHanging", "v-hanging"],
+    ["vIdeographic", "v-ideographic"],
+    ["vMathematical", "v-mathematical"],
+    ["vectorEffect", "vector-effect"],
+    ["vertAdvY", "vert-adv-y"],
+    ["vertOriginX", "vert-origin-x"],
+    ["vertOriginY", "vert-origin-y"],
+    ["wordSpacing", "word-spacing"],
+    ["writingMode", "writing-mode"],
+    ["xmlnsXlink", "xmlns:xlink"],
+    ["xHeight", "x-height"]
+  ]),
+  matchHtmlRegExp = /["'&<>]/;
+function escapeTextForBrowser(text) {
+  if (
+    "boolean" === typeof text ||
+    "number" === typeof text ||
+    "bigint" === typeof text
+  )
+    return "" + text;
+  text = "" + text;
+  var match = matchHtmlRegExp.exec(text);
+  if (match) {
+    var html = "",
+      index,
+      lastIndex = 0;
+    for (index = match.index; index < text.length; index++) {
+      switch (text.charCodeAt(index)) {
+        case 34:
+          match = "&quot;";
+          break;
+        case 38:
+          match = "&amp;";
+          break;
+        case 39:
+          match = "&#x27;";
+          break;
+        case 60:
+          match = "&lt;";
+          break;
+        case 62:
+          match = "&gt;";
+          break;
+        default:
+          continue;
+      }
+      lastIndex !== index && (html += text.slice(lastIndex, index));
+      lastIndex = index + 1;
+      html += match;
+    }
+    text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+  }
+  return text;
+}
+var uppercasePattern = /([A-Z])/g,
+  msPattern = /^ms-/,
+  isJavaScriptProtocol =
+    /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
+function sanitizeURL(url) {
+  return isJavaScriptProtocol.test("" + url)
+    ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+    : url;
+}
+var ReactSharedInternals =
+    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  ReactDOMSharedInternals =
+    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  sharedNotPendingObject = {
+    pending: !1,
+    data: null,
+    method: null,
+    action: null
+  },
+  previousDispatcher = ReactDOMSharedInternals.d;
+ReactDOMSharedInternals.d = {
+  f: previousDispatcher.f,
+  r: previousDispatcher.r,
+  D: prefetchDNS,
+  C: preconnect,
+  L: preload,
+  m: preloadModule,
+  X: preinitScript,
+  S: preinitStyle,
+  M: preinitModuleScript
+};
+var PRELOAD_NO_CREDS = [];
+stringToPrecomputedChunk('"></template>');
+var startInlineScript = stringToPrecomputedChunk("<script>"),
+  endInlineScript = stringToPrecomputedChunk("\x3c/script>"),
+  startScriptSrc = stringToPrecomputedChunk('<script src="'),
+  startModuleSrc = stringToPrecomputedChunk('<script type="module" src="'),
+  scriptNonce = stringToPrecomputedChunk('" nonce="'),
+  scriptIntegirty = stringToPrecomputedChunk('" integrity="'),
+  scriptCrossOrigin = stringToPrecomputedChunk('" crossorigin="'),
+  endAsyncScript = stringToPrecomputedChunk('" async="">\x3c/script>'),
+  scriptRegex = /(<\/|<)(s)(cript)/gi;
+function scriptReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+}
+var importMapScriptStart = stringToPrecomputedChunk(
+    '<script type="importmap">'
+  ),
+  importMapScriptEnd = stringToPrecomputedChunk("\x3c/script>");
+function createRenderState(
+  resumableState,
+  nonce,
+  externalRuntimeConfig,
+  importMap,
+  onHeaders,
+  maxHeadersLength
+) {
+  var inlineScriptWithNonce =
+      void 0 === nonce
+        ? startInlineScript
+        : stringToPrecomputedChunk(
+            '<script nonce="' + escapeTextForBrowser(nonce) + '">'
+          ),
+    idPrefix = resumableState.idPrefix;
+  externalRuntimeConfig = [];
+  var bootstrapScriptContent = resumableState.bootstrapScriptContent,
+    bootstrapScripts = resumableState.bootstrapScripts,
+    bootstrapModules = resumableState.bootstrapModules;
+  void 0 !== bootstrapScriptContent &&
+    externalRuntimeConfig.push(
+      inlineScriptWithNonce,
+      stringToChunk(
+        ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer)
+      ),
+      endInlineScript
+    );
+  bootstrapScriptContent = [];
+  void 0 !== importMap &&
+    (bootstrapScriptContent.push(importMapScriptStart),
+    bootstrapScriptContent.push(
+      stringToChunk(
+        ("" + JSON.stringify(importMap)).replace(scriptRegex, scriptReplacer)
+      )
+    ),
+    bootstrapScriptContent.push(importMapScriptEnd));
+  importMap = onHeaders
+    ? {
+        preconnects: "",
+        fontPreloads: "",
+        highImagePreloads: "",
+        remainingCapacity:
+          2 + ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3)
+      }
+    : null;
+  onHeaders = {
+    placeholderPrefix: stringToPrecomputedChunk(idPrefix + "P:"),
+    segmentPrefix: stringToPrecomputedChunk(idPrefix + "S:"),
+    boundaryPrefix: stringToPrecomputedChunk(idPrefix + "B:"),
+    startInlineScript: inlineScriptWithNonce,
+    preamble: createPreambleState(),
+    externalRuntimeScript: null,
+    bootstrapChunks: externalRuntimeConfig,
+    importMapChunks: bootstrapScriptContent,
+    onHeaders: onHeaders,
+    headers: importMap,
+    resets: {
+      font: {},
+      dns: {},
+      connect: { default: {}, anonymous: {}, credentials: {} },
+      image: {},
+      style: {}
+    },
+    charsetChunks: [],
+    viewportChunks: [],
+    hoistableChunks: [],
+    preconnects: new Set(),
+    fontPreloads: new Set(),
+    highImagePreloads: new Set(),
+    styles: new Map(),
+    bootstrapScripts: new Set(),
+    scripts: new Set(),
+    bulkPreloads: new Set(),
+    preloads: {
+      images: new Map(),
+      stylesheets: new Map(),
+      scripts: new Map(),
+      moduleScripts: new Map()
+    },
+    nonce: nonce,
+    hoistableState: null,
+    stylesToHoist: !1
+  };
+  if (void 0 !== bootstrapScripts)
+    for (importMap = 0; importMap < bootstrapScripts.length; importMap++) {
+      var scriptConfig = bootstrapScripts[importMap];
+      idPrefix = inlineScriptWithNonce = void 0;
+      bootstrapScriptContent = {
+        rel: "preload",
+        as: "script",
+        fetchPriority: "low",
+        nonce: nonce
+      };
+      "string" === typeof scriptConfig
+        ? (bootstrapScriptContent.href = maxHeadersLength = scriptConfig)
+        : ((bootstrapScriptContent.href = maxHeadersLength = scriptConfig.src),
+          (bootstrapScriptContent.integrity = idPrefix =
+            "string" === typeof scriptConfig.integrity
+              ? scriptConfig.integrity
+              : void 0),
+          (bootstrapScriptContent.crossOrigin = inlineScriptWithNonce =
+            "string" === typeof scriptConfig || null == scriptConfig.crossOrigin
+              ? void 0
+              : "use-credentials" === scriptConfig.crossOrigin
+                ? "use-credentials"
+                : ""));
+      scriptConfig = resumableState;
+      var href = maxHeadersLength;
+      scriptConfig.scriptResources[href] = null;
+      scriptConfig.moduleScriptResources[href] = null;
+      scriptConfig = [];
+      pushLinkImpl(scriptConfig, bootstrapScriptContent);
+      onHeaders.bootstrapScripts.add(scriptConfig);
+      externalRuntimeConfig.push(
+        startScriptSrc,
+        stringToChunk(escapeTextForBrowser(maxHeadersLength))
+      );
+      nonce &&
+        externalRuntimeConfig.push(
+          scriptNonce,
+          stringToChunk(escapeTextForBrowser(nonce))
+        );
+      "string" === typeof idPrefix &&
+        externalRuntimeConfig.push(
+          scriptIntegirty,
+          stringToChunk(escapeTextForBrowser(idPrefix))
+        );
+      "string" === typeof inlineScriptWithNonce &&
+        externalRuntimeConfig.push(
+          scriptCrossOrigin,
+          stringToChunk(escapeTextForBrowser(inlineScriptWithNonce))
+        );
+      externalRuntimeConfig.push(endAsyncScript);
+    }
+  if (void 0 !== bootstrapModules)
+    for (
+      bootstrapScripts = 0;
+      bootstrapScripts < bootstrapModules.length;
+      bootstrapScripts++
+    )
+      (bootstrapScriptContent = bootstrapModules[bootstrapScripts]),
+        (inlineScriptWithNonce = maxHeadersLength = void 0),
+        (idPrefix = {
+          rel: "modulepreload",
+          fetchPriority: "low",
+          nonce: nonce
+        }),
+        "string" === typeof bootstrapScriptContent
+          ? (idPrefix.href = importMap = bootstrapScriptContent)
+          : ((idPrefix.href = importMap = bootstrapScriptContent.src),
+            (idPrefix.integrity = inlineScriptWithNonce =
+              "string" === typeof bootstrapScriptContent.integrity
+                ? bootstrapScriptContent.integrity
+                : void 0),
+            (idPrefix.crossOrigin = maxHeadersLength =
+              "string" === typeof bootstrapScriptContent ||
+              null == bootstrapScriptContent.crossOrigin
+                ? void 0
+                : "use-credentials" === bootstrapScriptContent.crossOrigin
+                  ? "use-credentials"
+                  : "")),
+        (bootstrapScriptContent = resumableState),
+        (scriptConfig = importMap),
+        (bootstrapScriptContent.scriptResources[scriptConfig] = null),
+        (bootstrapScriptContent.moduleScriptResources[scriptConfig] = null),
+        (bootstrapScriptContent = []),
+        pushLinkImpl(bootstrapScriptContent, idPrefix),
+        onHeaders.bootstrapScripts.add(bootstrapScriptContent),
+        externalRuntimeConfig.push(
+          startModuleSrc,
+          stringToChunk(escapeTextForBrowser(importMap))
+        ),
+        nonce &&
+          externalRuntimeConfig.push(
+            scriptNonce,
+            stringToChunk(escapeTextForBrowser(nonce))
+          ),
+        "string" === typeof inlineScriptWithNonce &&
+          externalRuntimeConfig.push(
+            scriptIntegirty,
+            stringToChunk(escapeTextForBrowser(inlineScriptWithNonce))
+          ),
+        "string" === typeof maxHeadersLength &&
+          externalRuntimeConfig.push(
+            scriptCrossOrigin,
+            stringToChunk(escapeTextForBrowser(maxHeadersLength))
+          ),
+        externalRuntimeConfig.push(endAsyncScript);
+  return onHeaders;
+}
+function createResumableState(
+  identifierPrefix,
+  externalRuntimeConfig,
+  bootstrapScriptContent,
+  bootstrapScripts,
+  bootstrapModules
+) {
+  return {
+    idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+    nextFormID: 0,
+    streamingFormat: 0,
+    bootstrapScriptContent: bootstrapScriptContent,
+    bootstrapScripts: bootstrapScripts,
+    bootstrapModules: bootstrapModules,
+    instructions: 0,
+    hasBody: !1,
+    hasHtml: !1,
+    unknownResources: {},
+    dnsResources: {},
+    connectResources: { default: {}, anonymous: {}, credentials: {} },
+    imageResources: {},
+    styleResources: {},
+    scriptResources: {},
+    moduleUnknownResources: {},
+    moduleScriptResources: {}
+  };
+}
+function createPreambleState() {
+  return {
+    htmlChunks: null,
+    headChunks: null,
+    bodyChunks: null,
+    contribution: 0
+  };
+}
+function createFormatContext(insertionMode, selectedValue, tagScope) {
+  return {
+    insertionMode: insertionMode,
+    selectedValue: selectedValue,
+    tagScope: tagScope
+  };
+}
+function createRootFormatContext(namespaceURI) {
+  return createFormatContext(
+    "http://www.w3.org/2000/svg" === namespaceURI
+      ? 4
+      : "http://www.w3.org/1998/Math/MathML" === namespaceURI
+        ? 5
+        : 0,
+    null,
+    0
+  );
+}
+function getChildFormatContext(parentContext, type, props) {
+  switch (type) {
+    case "noscript":
+      return createFormatContext(2, null, parentContext.tagScope | 1);
+    case "select":
+      return createFormatContext(
+        2,
+        null != props.value ? props.value : props.defaultValue,
+        parentContext.tagScope
+      );
+    case "svg":
+      return createFormatContext(4, null, parentContext.tagScope);
+    case "picture":
+      return createFormatContext(2, null, parentContext.tagScope | 2);
+    case "math":
+      return createFormatContext(5, null, parentContext.tagScope);
+    case "foreignObject":
+      return createFormatContext(2, null, parentContext.tagScope);
+    case "table":
+      return createFormatContext(6, null, parentContext.tagScope);
+    case "thead":
+    case "tbody":
+    case "tfoot":
+      return createFormatContext(7, null, parentContext.tagScope);
+    case "colgroup":
+      return createFormatContext(9, null, parentContext.tagScope);
+    case "tr":
+      return createFormatContext(8, null, parentContext.tagScope);
+    case "head":
+      if (2 > parentContext.insertionMode)
+        return createFormatContext(3, null, parentContext.tagScope);
+      break;
+    case "html":
+      if (0 === parentContext.insertionMode)
+        return createFormatContext(1, null, parentContext.tagScope);
+  }
+  return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode
+    ? createFormatContext(2, null, parentContext.tagScope)
+    : parentContext;
+}
+var textSeparator = stringToPrecomputedChunk("\x3c!-- --\x3e");
+function pushTextInstance(target, text, renderState, textEmbedded) {
+  if ("" === text) return textEmbedded;
+  textEmbedded && target.push(textSeparator);
+  target.push(stringToChunk(escapeTextForBrowser(text)));
+  return !0;
+}
+var styleNameCache = new Map(),
+  styleAttributeStart = stringToPrecomputedChunk(' style="'),
+  styleAssign = stringToPrecomputedChunk(":"),
+  styleSeparator = stringToPrecomputedChunk(";");
+function pushStyleAttribute(target, style) {
+  if ("object" !== typeof style)
+    throw Error(
+      "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+    );
+  var isFirst = !0,
+    styleName;
+  for (styleName in style)
+    if (hasOwnProperty.call(style, styleName)) {
+      var styleValue = style[styleName];
+      if (
+        null != styleValue &&
+        "boolean" !== typeof styleValue &&
+        "" !== styleValue
+      ) {
+        if (0 === styleName.indexOf("--")) {
+          var nameChunk = stringToChunk(escapeTextForBrowser(styleName));
+          styleValue = stringToChunk(
+            escapeTextForBrowser(("" + styleValue).trim())
+          );
+        } else
+          (nameChunk = styleNameCache.get(styleName)),
+            void 0 === nameChunk &&
+              ((nameChunk = stringToPrecomputedChunk(
+                escapeTextForBrowser(
+                  styleName
+                    .replace(uppercasePattern, "-$1")
+                    .toLowerCase()
+                    .replace(msPattern, "-ms-")
+                )
+              )),
+              styleNameCache.set(styleName, nameChunk)),
+            (styleValue =
+              "number" === typeof styleValue
+                ? 0 === styleValue || unitlessNumbers.has(styleName)
+                  ? stringToChunk("" + styleValue)
+                  : stringToChunk(styleValue + "px")
+                : stringToChunk(
+                    escapeTextForBrowser(("" + styleValue).trim())
+                  ));
+        isFirst
+          ? ((isFirst = !1),
+            target.push(
+              styleAttributeStart,
+              nameChunk,
+              styleAssign,
+              styleValue
+            ))
+          : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+      }
+    }
+  isFirst || target.push(attributeEnd);
+}
+var attributeSeparator = stringToPrecomputedChunk(" "),
+  attributeAssign = stringToPrecomputedChunk('="'),
+  attributeEnd = stringToPrecomputedChunk('"'),
+  attributeEmptyString = stringToPrecomputedChunk('=""');
+function pushBooleanAttribute(target, name, value) {
+  value &&
+    "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    target.push(attributeSeparator, stringToChunk(name), attributeEmptyString);
+}
+function pushStringAttribute(target, name, value) {
+  "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    "boolean" !== typeof value &&
+    target.push(
+      attributeSeparator,
+      stringToChunk(name),
+      attributeAssign,
+      stringToChunk(escapeTextForBrowser(value)),
+      attributeEnd
+    );
+}
+var actionJavaScriptURL = stringToPrecomputedChunk(
+    escapeTextForBrowser(
+      "javascript:throw new Error('React form unexpectedly submitted.')"
+    )
+  ),
+  startHiddenInputChunk = stringToPrecomputedChunk('<input type="hidden"');
+function pushAdditionalFormField(value, key) {
+  this.push(startHiddenInputChunk);
+  validateAdditionalFormField(value);
+  pushStringAttribute(this, "name", key);
+  pushStringAttribute(this, "value", value);
+  this.push(endOfStartTagSelfClosing);
+}
+function validateAdditionalFormField(value) {
+  if ("string" !== typeof value)
+    throw Error(
+      "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+    );
+}
+function getCustomFormFields(resumableState, formAction) {
+  if ("function" === typeof formAction.$$FORM_ACTION) {
+    var id = resumableState.nextFormID++;
+    resumableState = resumableState.idPrefix + id;
+    try {
+      var customFields = formAction.$$FORM_ACTION(resumableState);
+      if (customFields) {
+        var formData = customFields.data;
+        null != formData && formData.forEach(validateAdditionalFormField);
+      }
+      return customFields;
+    } catch (x) {
+      if ("object" === typeof x && null !== x && "function" === typeof x.then)
+        throw x;
+    }
+  }
+  return null;
+}
+function pushFormActionAttribute(
+  target,
+  resumableState,
+  renderState,
+  formAction,
+  formEncType,
+  formMethod,
+  formTarget,
+  name
+) {
+  var formData = null;
+  if ("function" === typeof formAction) {
+    var customFields = getCustomFormFields(resumableState, formAction);
+    null !== customFields
+      ? ((name = customFields.name),
+        (formAction = customFields.action || ""),
+        (formEncType = customFields.encType),
+        (formMethod = customFields.method),
+        (formTarget = customFields.target),
+        (formData = customFields.data))
+      : (target.push(
+          attributeSeparator,
+          stringToChunk("formAction"),
+          attributeAssign,
+          actionJavaScriptURL,
+          attributeEnd
+        ),
+        (formTarget = formMethod = formEncType = formAction = name = null),
+        injectFormReplayingRuntime(resumableState, renderState));
+  }
+  null != name && pushAttribute(target, "name", name);
+  null != formAction && pushAttribute(target, "formAction", formAction);
+  null != formEncType && pushAttribute(target, "formEncType", formEncType);
+  null != formMethod && pushAttribute(target, "formMethod", formMethod);
+  null != formTarget && pushAttribute(target, "formTarget", formTarget);
+  return formData;
+}
+function pushAttribute(target, name, value) {
+  switch (name) {
+    case "className":
+      pushStringAttribute(target, "class", value);
+      break;
+    case "tabIndex":
+      pushStringAttribute(target, "tabindex", value);
+      break;
+    case "dir":
+    case "role":
+    case "viewBox":
+    case "width":
+    case "height":
+      pushStringAttribute(target, name, value);
+      break;
+    case "style":
+      pushStyleAttribute(target, value);
+      break;
+    case "src":
+    case "href":
+      if ("" === value) break;
+    case "action":
+    case "formAction":
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(
+        attributeSeparator,
+        stringToChunk(name),
+        attributeAssign,
+        stringToChunk(escapeTextForBrowser(value)),
+        attributeEnd
+      );
+      break;
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "ref":
+      break;
+    case "autoFocus":
+    case "multiple":
+    case "muted":
+      pushBooleanAttribute(target, name.toLowerCase(), value);
+      break;
+    case "xlinkHref":
+      if (
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(
+        attributeSeparator,
+        stringToChunk("xlink:href"),
+        attributeAssign,
+        stringToChunk(escapeTextForBrowser(value)),
+        attributeEnd
+      );
+      break;
+    case "contentEditable":
+    case "spellCheck":
+    case "draggable":
+    case "value":
+    case "autoReverse":
+    case "externalResourcesRequired":
+    case "focusable":
+    case "preserveAlpha":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeAssign,
+          stringToChunk(escapeTextForBrowser(value)),
+          attributeEnd
+        );
+      break;
+    case "inert":
+    case "allowFullScreen":
+    case "async":
+    case "autoPlay":
+    case "controls":
+    case "default":
+    case "defer":
+    case "disabled":
+    case "disablePictureInPicture":
+    case "disableRemotePlayback":
+    case "formNoValidate":
+    case "hidden":
+    case "loop":
+    case "noModule":
+    case "noValidate":
+    case "open":
+    case "playsInline":
+    case "readOnly":
+    case "required":
+    case "reversed":
+    case "scoped":
+    case "seamless":
+    case "itemScope":
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeEmptyString
+        );
+      break;
+    case "capture":
+    case "download":
+      !0 === value
+        ? target.push(
+            attributeSeparator,
+            stringToChunk(name),
+            attributeEmptyString
+          )
+        : !1 !== value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value &&
+          target.push(
+            attributeSeparator,
+            stringToChunk(name),
+            attributeAssign,
+            stringToChunk(escapeTextForBrowser(value)),
+            attributeEnd
+          );
+      break;
+    case "cols":
+    case "rows":
+    case "size":
+    case "span":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        !isNaN(value) &&
+        1 <= value &&
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeAssign,
+          stringToChunk(escapeTextForBrowser(value)),
+          attributeEnd
+        );
+      break;
+    case "rowSpan":
+    case "start":
+      "function" === typeof value ||
+        "symbol" === typeof value ||
+        isNaN(value) ||
+        target.push(
+          attributeSeparator,
+          stringToChunk(name),
+          attributeAssign,
+          stringToChunk(escapeTextForBrowser(value)),
+          attributeEnd
+        );
+      break;
+    case "xlinkActuate":
+      pushStringAttribute(target, "xlink:actuate", value);
+      break;
+    case "xlinkArcrole":
+      pushStringAttribute(target, "xlink:arcrole", value);
+      break;
+    case "xlinkRole":
+      pushStringAttribute(target, "xlink:role", value);
+      break;
+    case "xlinkShow":
+      pushStringAttribute(target, "xlink:show", value);
+      break;
+    case "xlinkTitle":
+      pushStringAttribute(target, "xlink:title", value);
+      break;
+    case "xlinkType":
+      pushStringAttribute(target, "xlink:type", value);
+      break;
+    case "xmlBase":
+      pushStringAttribute(target, "xml:base", value);
+      break;
+    case "xmlLang":
+      pushStringAttribute(target, "xml:lang", value);
+      break;
+    case "xmlSpace":
+      pushStringAttribute(target, "xml:space", value);
+      break;
+    default:
+      if (
+        !(2 < name.length) ||
+        ("o" !== name[0] && "O" !== name[0]) ||
+        ("n" !== name[1] && "N" !== name[1])
+      )
+        if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) {
+          switch (typeof value) {
+            case "function":
+            case "symbol":
+              return;
+            case "boolean":
+              var prefix$8 = name.toLowerCase().slice(0, 5);
+              if ("data-" !== prefix$8 && "aria-" !== prefix$8) return;
+          }
+          target.push(
+            attributeSeparator,
+            stringToChunk(name),
+            attributeAssign,
+            stringToChunk(escapeTextForBrowser(value)),
+            attributeEnd
+          );
+        }
+  }
+}
+var endOfStartTag = stringToPrecomputedChunk(">"),
+  endOfStartTagSelfClosing = stringToPrecomputedChunk("/>");
+function pushInnerHTML(target, innerHTML, children) {
+  if (null != innerHTML) {
+    if (null != children)
+      throw Error(
+        "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+      );
+    if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+      throw Error(
+        "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+      );
+    innerHTML = innerHTML.__html;
+    null !== innerHTML &&
+      void 0 !== innerHTML &&
+      target.push(stringToChunk("" + innerHTML));
+  }
+}
+function flattenOptionChildren(children) {
+  var content = "";
+  React.Children.forEach(children, function (child) {
+    null != child && (content += child);
+  });
+  return content;
+}
+var selectedMarkerAttribute = stringToPrecomputedChunk(' selected=""'),
+  formReplayingRuntimeScript = stringToPrecomputedChunk(
+    'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});'
+  );
+function injectFormReplayingRuntime(resumableState, renderState) {
+  0 === (resumableState.instructions & 16) &&
+    ((resumableState.instructions |= 16),
+    renderState.bootstrapChunks.unshift(
+      renderState.startInlineScript,
+      formReplayingRuntimeScript,
+      endInlineScript
+    ));
+}
+var formStateMarkerIsMatching = stringToPrecomputedChunk("\x3c!--F!--\x3e"),
+  formStateMarkerIsNotMatching = stringToPrecomputedChunk("\x3c!--F--\x3e");
+function pushLinkImpl(target, props) {
+  target.push(startChunkForTag("link"));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTagSelfClosing);
+  return null;
+}
+var styleRegex = /(<\/|<)(s)(tyle)/gi;
+function styleReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+}
+function pushSelfClosing(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              tag +
+                " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTagSelfClosing);
+  return null;
+}
+function pushTitleImpl(target, props) {
+  target.push(startChunkForTag("title"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  props = Array.isArray(children)
+    ? 2 > children.length
+      ? children[0]
+      : null
+    : children;
+  "function" !== typeof props &&
+    "symbol" !== typeof props &&
+    null !== props &&
+    void 0 !== props &&
+    target.push(stringToChunk(escapeTextForBrowser("" + props)));
+  pushInnerHTML(target, innerHTML, children);
+  target.push(endChunkForTag("title"));
+  return null;
+}
+function pushScriptImpl(target, props) {
+  target.push(startChunkForTag("script"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, children);
+  "string" === typeof children &&
+    target.push(
+      stringToChunk(("" + children).replace(scriptRegex, scriptReplacer))
+    );
+  target.push(endChunkForTag("script"));
+  return null;
+}
+function pushStartSingletonElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, tag);
+  return tag;
+}
+function pushStartGenericElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, tag);
+  return "string" === typeof tag
+    ? (target.push(stringToChunk(escapeTextForBrowser(tag))), null)
+    : tag;
+}
+var leadingNewline = stringToPrecomputedChunk("\n"),
+  VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+  validatedTagCache = new Map();
+function startChunkForTag(tag) {
+  var tagStartChunk = validatedTagCache.get(tag);
+  if (void 0 === tagStartChunk) {
+    if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+    tagStartChunk = stringToPrecomputedChunk("<" + tag);
+    validatedTagCache.set(tag, tagStartChunk);
+  }
+  return tagStartChunk;
+}
+var doctypeChunk = stringToPrecomputedChunk("<!DOCTYPE html>");
+function pushStartInstance(
+  target$jscomp$0,
+  type,
+  props,
+  resumableState,
+  renderState,
+  preambleState,
+  hoistableState,
+  formatContext,
+  textEmbedded,
+  isFallback
+) {
+  switch (type) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+      break;
+    case "a":
+      target$jscomp$0.push(startChunkForTag("a"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              case "href":
+                "" === propValue
+                  ? pushStringAttribute(target$jscomp$0, "href", "")
+                  : pushAttribute(target$jscomp$0, propKey, propValue);
+                break;
+              default:
+                pushAttribute(target$jscomp$0, propKey, propValue);
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML, children);
+      if ("string" === typeof children) {
+        target$jscomp$0.push(stringToChunk(escapeTextForBrowser(children)));
+        var JSCompiler_inline_result = null;
+      } else JSCompiler_inline_result = children;
+      return JSCompiler_inline_result;
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "select":
+      target$jscomp$0.push(startChunkForTag("select"));
+      var children$jscomp$0 = null,
+        innerHTML$jscomp$0 = null,
+        propKey$jscomp$0;
+      for (propKey$jscomp$0 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+          var propValue$jscomp$0 = props[propKey$jscomp$0];
+          if (null != propValue$jscomp$0)
+            switch (propKey$jscomp$0) {
+              case "children":
+                children$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "defaultValue":
+              case "value":
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$0,
+                  propValue$jscomp$0
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+      return children$jscomp$0;
+    case "option":
+      var selectedValue = formatContext.selectedValue;
+      target$jscomp$0.push(startChunkForTag("option"));
+      var children$jscomp$1 = null,
+        value = null,
+        selected = null,
+        innerHTML$jscomp$1 = null,
+        propKey$jscomp$1;
+      for (propKey$jscomp$1 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+          var propValue$jscomp$1 = props[propKey$jscomp$1];
+          if (null != propValue$jscomp$1)
+            switch (propKey$jscomp$1) {
+              case "children":
+                children$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "selected":
+                selected = propValue$jscomp$1;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "value":
+                value = propValue$jscomp$1;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$1,
+                  propValue$jscomp$1
+                );
+            }
+        }
+      if (null != selectedValue) {
+        var stringValue =
+          null !== value
+            ? "" + value
+            : flattenOptionChildren(children$jscomp$1);
+        if (isArrayImpl(selectedValue))
+          for (var i = 0; i < selectedValue.length; i++) {
+            if ("" + selectedValue[i] === stringValue) {
+              target$jscomp$0.push(selectedMarkerAttribute);
+              break;
+            }
+          }
+        else
+          "" + selectedValue === stringValue &&
+            target$jscomp$0.push(selectedMarkerAttribute);
+      } else selected && target$jscomp$0.push(selectedMarkerAttribute);
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+      return children$jscomp$1;
+    case "textarea":
+      target$jscomp$0.push(startChunkForTag("textarea"));
+      var value$jscomp$0 = null,
+        defaultValue = null,
+        children$jscomp$2 = null,
+        propKey$jscomp$2;
+      for (propKey$jscomp$2 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+          var propValue$jscomp$2 = props[propKey$jscomp$2];
+          if (null != propValue$jscomp$2)
+            switch (propKey$jscomp$2) {
+              case "children":
+                children$jscomp$2 = propValue$jscomp$2;
+                break;
+              case "value":
+                value$jscomp$0 = propValue$jscomp$2;
+                break;
+              case "defaultValue":
+                defaultValue = propValue$jscomp$2;
+                break;
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$2,
+                  propValue$jscomp$2
+                );
+            }
+        }
+      null === value$jscomp$0 &&
+        null !== defaultValue &&
+        (value$jscomp$0 = defaultValue);
+      target$jscomp$0.push(endOfStartTag);
+      if (null != children$jscomp$2) {
+        if (null != value$jscomp$0)
+          throw Error(
+            "If you supply `defaultValue` on a <textarea>, do not pass children."
+          );
+        if (isArrayImpl(children$jscomp$2)) {
+          if (1 < children$jscomp$2.length)
+            throw Error("<textarea> can only have at most one child.");
+          value$jscomp$0 = "" + children$jscomp$2[0];
+        }
+        value$jscomp$0 = "" + children$jscomp$2;
+      }
+      "string" === typeof value$jscomp$0 &&
+        "\n" === value$jscomp$0[0] &&
+        target$jscomp$0.push(leadingNewline);
+      null !== value$jscomp$0 &&
+        target$jscomp$0.push(
+          stringToChunk(escapeTextForBrowser("" + value$jscomp$0))
+        );
+      return null;
+    case "input":
+      target$jscomp$0.push(startChunkForTag("input"));
+      var name = null,
+        formAction = null,
+        formEncType = null,
+        formMethod = null,
+        formTarget = null,
+        value$jscomp$1 = null,
+        defaultValue$jscomp$0 = null,
+        checked = null,
+        defaultChecked = null,
+        propKey$jscomp$3;
+      for (propKey$jscomp$3 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+          var propValue$jscomp$3 = props[propKey$jscomp$3];
+          if (null != propValue$jscomp$3)
+            switch (propKey$jscomp$3) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              case "name":
+                name = propValue$jscomp$3;
+                break;
+              case "formAction":
+                formAction = propValue$jscomp$3;
+                break;
+              case "formEncType":
+                formEncType = propValue$jscomp$3;
+                break;
+              case "formMethod":
+                formMethod = propValue$jscomp$3;
+                break;
+              case "formTarget":
+                formTarget = propValue$jscomp$3;
+                break;
+              case "defaultChecked":
+                defaultChecked = propValue$jscomp$3;
+                break;
+              case "defaultValue":
+                defaultValue$jscomp$0 = propValue$jscomp$3;
+                break;
+              case "checked":
+                checked = propValue$jscomp$3;
+                break;
+              case "value":
+                value$jscomp$1 = propValue$jscomp$3;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$3,
+                  propValue$jscomp$3
+                );
+            }
+        }
+      var formData = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction,
+        formEncType,
+        formMethod,
+        formTarget,
+        name
+      );
+      null !== checked
+        ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+        : null !== defaultChecked &&
+          pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+      null !== value$jscomp$1
+        ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+        : null !== defaultValue$jscomp$0 &&
+          pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+      target$jscomp$0.push(endOfStartTagSelfClosing);
+      null != formData &&
+        formData.forEach(pushAdditionalFormField, target$jscomp$0);
+      return null;
+    case "button":
+      target$jscomp$0.push(startChunkForTag("button"));
+      var children$jscomp$3 = null,
+        innerHTML$jscomp$2 = null,
+        name$jscomp$0 = null,
+        formAction$jscomp$0 = null,
+        formEncType$jscomp$0 = null,
+        formMethod$jscomp$0 = null,
+        formTarget$jscomp$0 = null,
+        propKey$jscomp$4;
+      for (propKey$jscomp$4 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+          var propValue$jscomp$4 = props[propKey$jscomp$4];
+          if (null != propValue$jscomp$4)
+            switch (propKey$jscomp$4) {
+              case "children":
+                children$jscomp$3 = propValue$jscomp$4;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$2 = propValue$jscomp$4;
+                break;
+              case "name":
+                name$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formAction":
+                formAction$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formEncType":
+                formEncType$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formMethod":
+                formMethod$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formTarget":
+                formTarget$jscomp$0 = propValue$jscomp$4;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$4,
+                  propValue$jscomp$4
+                );
+            }
+        }
+      var formData$jscomp$0 = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction$jscomp$0,
+        formEncType$jscomp$0,
+        formMethod$jscomp$0,
+        formTarget$jscomp$0,
+        name$jscomp$0
+      );
+      target$jscomp$0.push(endOfStartTag);
+      null != formData$jscomp$0 &&
+        formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+      if ("string" === typeof children$jscomp$3) {
+        target$jscomp$0.push(
+          stringToChunk(escapeTextForBrowser(children$jscomp$3))
+        );
+        var JSCompiler_inline_result$jscomp$0 = null;
+      } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3;
+      return JSCompiler_inline_result$jscomp$0;
+    case "form":
+      target$jscomp$0.push(startChunkForTag("form"));
+      var children$jscomp$4 = null,
+        innerHTML$jscomp$3 = null,
+        formAction$jscomp$1 = null,
+        formEncType$jscomp$1 = null,
+        formMethod$jscomp$1 = null,
+        formTarget$jscomp$1 = null,
+        propKey$jscomp$5;
+      for (propKey$jscomp$5 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+          var propValue$jscomp$5 = props[propKey$jscomp$5];
+          if (null != propValue$jscomp$5)
+            switch (propKey$jscomp$5) {
+              case "children":
+                children$jscomp$4 = propValue$jscomp$5;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$3 = propValue$jscomp$5;
+                break;
+              case "action":
+                formAction$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "encType":
+                formEncType$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "method":
+                formMethod$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "target":
+                formTarget$jscomp$1 = propValue$jscomp$5;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$5,
+                  propValue$jscomp$5
+                );
+            }
+        }
+      var formData$jscomp$1 = null,
+        formActionName = null;
+      if ("function" === typeof formAction$jscomp$1) {
+        var customFields = getCustomFormFields(
+          resumableState,
+          formAction$jscomp$1
+        );
+        null !== customFields
+          ? ((formAction$jscomp$1 = customFields.action || ""),
+            (formEncType$jscomp$1 = customFields.encType),
+            (formMethod$jscomp$1 = customFields.method),
+            (formTarget$jscomp$1 = customFields.target),
+            (formData$jscomp$1 = customFields.data),
+            (formActionName = customFields.name))
+          : (target$jscomp$0.push(
+              attributeSeparator,
+              stringToChunk("action"),
+              attributeAssign,
+              actionJavaScriptURL,
+              attributeEnd
+            ),
+            (formTarget$jscomp$1 =
+              formMethod$jscomp$1 =
+              formEncType$jscomp$1 =
+              formAction$jscomp$1 =
+                null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != formAction$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+      null != formEncType$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+      null != formMethod$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+      null != formTarget$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+      target$jscomp$0.push(endOfStartTag);
+      null !== formActionName &&
+        (target$jscomp$0.push(startHiddenInputChunk),
+        pushStringAttribute(target$jscomp$0, "name", formActionName),
+        target$jscomp$0.push(endOfStartTagSelfClosing),
+        null != formData$jscomp$1 &&
+          formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0));
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+      if ("string" === typeof children$jscomp$4) {
+        target$jscomp$0.push(
+          stringToChunk(escapeTextForBrowser(children$jscomp$4))
+        );
+        var JSCompiler_inline_result$jscomp$1 = null;
+      } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4;
+      return JSCompiler_inline_result$jscomp$1;
+    case "menuitem":
+      target$jscomp$0.push(startChunkForTag("menuitem"));
+      for (var propKey$jscomp$6 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+          var propValue$jscomp$6 = props[propKey$jscomp$6];
+          if (null != propValue$jscomp$6)
+            switch (propKey$jscomp$6) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$6,
+                  propValue$jscomp$6
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      return null;
+    case "object":
+      target$jscomp$0.push(startChunkForTag("object"));
+      var children$jscomp$5 = null,
+        innerHTML$jscomp$4 = null,
+        propKey$jscomp$7;
+      for (propKey$jscomp$7 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+          var propValue$jscomp$7 = props[propKey$jscomp$7];
+          if (null != propValue$jscomp$7)
+            switch (propKey$jscomp$7) {
+              case "children":
+                children$jscomp$5 = propValue$jscomp$7;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$4 = propValue$jscomp$7;
+                break;
+              case "data":
+                var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                if ("" === sanitizedValue) break;
+                target$jscomp$0.push(
+                  attributeSeparator,
+                  stringToChunk("data"),
+                  attributeAssign,
+                  stringToChunk(escapeTextForBrowser(sanitizedValue)),
+                  attributeEnd
+                );
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$7,
+                  propValue$jscomp$7
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+      if ("string" === typeof children$jscomp$5) {
+        target$jscomp$0.push(
+          stringToChunk(escapeTextForBrowser(children$jscomp$5))
+        );
+        var JSCompiler_inline_result$jscomp$2 = null;
+      } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5;
+      return JSCompiler_inline_result$jscomp$2;
+    case "title":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$3 = pushTitleImpl(
+          target$jscomp$0,
+          props
+        );
+      else
+        isFallback
+          ? (JSCompiler_inline_result$jscomp$3 = null)
+          : (pushTitleImpl(renderState.hoistableChunks, props),
+            (JSCompiler_inline_result$jscomp$3 = void 0));
+      return JSCompiler_inline_result$jscomp$3;
+    case "link":
+      var rel = props.rel,
+        href = props.href,
+        precedence = props.precedence;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof rel ||
+        "string" !== typeof href ||
+        "" === href
+      ) {
+        pushLinkImpl(target$jscomp$0, props);
+        var JSCompiler_inline_result$jscomp$4 = null;
+      } else if ("stylesheet" === props.rel)
+        if (
+          "string" !== typeof precedence ||
+          null != props.disabled ||
+          props.onLoad ||
+          props.onError
+        )
+          JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+            target$jscomp$0,
+            props
+          );
+        else {
+          var styleQueue = renderState.styles.get(precedence),
+            resourceState = resumableState.styleResources.hasOwnProperty(href)
+              ? resumableState.styleResources[href]
+              : void 0;
+          if (null !== resourceState) {
+            resumableState.styleResources[href] = null;
+            styleQueue ||
+              ((styleQueue = {
+                precedence: stringToChunk(escapeTextForBrowser(precedence)),
+                rules: [],
+                hrefs: [],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence, styleQueue));
+            var resource = {
+              state: 0,
+              props: assign({}, props, {
+                "data-precedence": props.precedence,
+                precedence: null
+              })
+            };
+            if (resourceState) {
+              2 === resourceState.length &&
+                adoptPreloadCredentials(resource.props, resourceState);
+              var preloadResource = renderState.preloads.stylesheets.get(href);
+              preloadResource && 0 < preloadResource.length
+                ? (preloadResource.length = 0)
+                : (resource.state = 1);
+            }
+            styleQueue.sheets.set(href, resource);
+            hoistableState && hoistableState.stylesheets.add(resource);
+          } else if (styleQueue) {
+            var resource$9 = styleQueue.sheets.get(href);
+            resource$9 &&
+              hoistableState &&
+              hoistableState.stylesheets.add(resource$9);
+          }
+          textEmbedded && target$jscomp$0.push(textSeparator);
+          JSCompiler_inline_result$jscomp$4 = null;
+        }
+      else
+        props.onLoad || props.onError
+          ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+              target$jscomp$0,
+              props
+            ))
+          : (textEmbedded && target$jscomp$0.push(textSeparator),
+            (JSCompiler_inline_result$jscomp$4 = isFallback
+              ? null
+              : pushLinkImpl(renderState.hoistableChunks, props)));
+      return JSCompiler_inline_result$jscomp$4;
+    case "script":
+      var asyncProp = props.async;
+      if (
+        "string" !== typeof props.src ||
+        !props.src ||
+        !asyncProp ||
+        "function" === typeof asyncProp ||
+        "symbol" === typeof asyncProp ||
+        props.onLoad ||
+        props.onError ||
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$5 = pushScriptImpl(
+          target$jscomp$0,
+          props
+        );
+      else {
+        var key = props.src;
+        if ("module" === props.type) {
+          var resources = resumableState.moduleScriptResources;
+          var preloads = renderState.preloads.moduleScripts;
+        } else
+          (resources = resumableState.scriptResources),
+            (preloads = renderState.preloads.scripts);
+        var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+          ? resources[key]
+          : void 0;
+        if (null !== resourceState$jscomp$0) {
+          resources[key] = null;
+          var scriptProps = props;
+          if (resourceState$jscomp$0) {
+            2 === resourceState$jscomp$0.length &&
+              ((scriptProps = assign({}, props)),
+              adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+            var preloadResource$jscomp$0 = preloads.get(key);
+            preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0);
+          }
+          var resource$jscomp$0 = [];
+          renderState.scripts.add(resource$jscomp$0);
+          pushScriptImpl(resource$jscomp$0, scriptProps);
+        }
+        textEmbedded && target$jscomp$0.push(textSeparator);
+        JSCompiler_inline_result$jscomp$5 = null;
+      }
+      return JSCompiler_inline_result$jscomp$5;
+    case "style":
+      var precedence$jscomp$0 = props.precedence,
+        href$jscomp$0 = props.href;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof precedence$jscomp$0 ||
+        "string" !== typeof href$jscomp$0 ||
+        "" === href$jscomp$0
+      ) {
+        target$jscomp$0.push(startChunkForTag("style"));
+        var children$jscomp$6 = null,
+          innerHTML$jscomp$5 = null,
+          propKey$jscomp$8;
+        for (propKey$jscomp$8 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+            var propValue$jscomp$8 = props[propKey$jscomp$8];
+            if (null != propValue$jscomp$8)
+              switch (propKey$jscomp$8) {
+                case "children":
+                  children$jscomp$6 = propValue$jscomp$8;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$5 = propValue$jscomp$8;
+                  break;
+                default:
+                  pushAttribute(
+                    target$jscomp$0,
+                    propKey$jscomp$8,
+                    propValue$jscomp$8
+                  );
+              }
+          }
+        target$jscomp$0.push(endOfStartTag);
+        var child = Array.isArray(children$jscomp$6)
+          ? 2 > children$jscomp$6.length
+            ? children$jscomp$6[0]
+            : null
+          : children$jscomp$6;
+        "function" !== typeof child &&
+          "symbol" !== typeof child &&
+          null !== child &&
+          void 0 !== child &&
+          target$jscomp$0.push(
+            stringToChunk(("" + child).replace(styleRegex, styleReplacer))
+          );
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6);
+        target$jscomp$0.push(endChunkForTag("style"));
+        var JSCompiler_inline_result$jscomp$6 = null;
+      } else {
+        var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0);
+        if (
+          null !==
+          (resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+            ? resumableState.styleResources[href$jscomp$0]
+            : void 0)
+        ) {
+          resumableState.styleResources[href$jscomp$0] = null;
+          styleQueue$jscomp$0
+            ? styleQueue$jscomp$0.hrefs.push(
+                stringToChunk(escapeTextForBrowser(href$jscomp$0))
+              )
+            : ((styleQueue$jscomp$0 = {
+                precedence: stringToChunk(
+                  escapeTextForBrowser(precedence$jscomp$0)
+                ),
+                rules: [],
+                hrefs: [stringToChunk(escapeTextForBrowser(href$jscomp$0))],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0));
+          var target = styleQueue$jscomp$0.rules,
+            children$jscomp$7 = null,
+            innerHTML$jscomp$6 = null,
+            propKey$jscomp$9;
+          for (propKey$jscomp$9 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+              var propValue$jscomp$9 = props[propKey$jscomp$9];
+              if (null != propValue$jscomp$9)
+                switch (propKey$jscomp$9) {
+                  case "children":
+                    children$jscomp$7 = propValue$jscomp$9;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$6 = propValue$jscomp$9;
+                }
+            }
+          var child$jscomp$0 = Array.isArray(children$jscomp$7)
+            ? 2 > children$jscomp$7.length
+              ? children$jscomp$7[0]
+              : null
+            : children$jscomp$7;
+          "function" !== typeof child$jscomp$0 &&
+            "symbol" !== typeof child$jscomp$0 &&
+            null !== child$jscomp$0 &&
+            void 0 !== child$jscomp$0 &&
+            target.push(
+              stringToChunk(
+                ("" + child$jscomp$0).replace(styleRegex, styleReplacer)
+              )
+            );
+          pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7);
+        }
+        styleQueue$jscomp$0 &&
+          hoistableState &&
+          hoistableState.styles.add(styleQueue$jscomp$0);
+        textEmbedded && target$jscomp$0.push(textSeparator);
+        JSCompiler_inline_result$jscomp$6 = void 0;
+      }
+      return JSCompiler_inline_result$jscomp$6;
+    case "meta":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$7 = pushSelfClosing(
+          target$jscomp$0,
+          props,
+          "meta"
+        );
+      else
+        textEmbedded && target$jscomp$0.push(textSeparator),
+          (JSCompiler_inline_result$jscomp$7 = isFallback
+            ? null
+            : "string" === typeof props.charSet
+              ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+              : "viewport" === props.name
+                ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                : pushSelfClosing(renderState.hoistableChunks, props, "meta"));
+      return JSCompiler_inline_result$jscomp$7;
+    case "listing":
+    case "pre":
+      target$jscomp$0.push(startChunkForTag(type));
+      var children$jscomp$8 = null,
+        innerHTML$jscomp$7 = null,
+        propKey$jscomp$10;
+      for (propKey$jscomp$10 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+          var propValue$jscomp$10 = props[propKey$jscomp$10];
+          if (null != propValue$jscomp$10)
+            switch (propKey$jscomp$10) {
+              case "children":
+                children$jscomp$8 = propValue$jscomp$10;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$7 = propValue$jscomp$10;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$10,
+                  propValue$jscomp$10
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      if (null != innerHTML$jscomp$7) {
+        if (null != children$jscomp$8)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if (
+          "object" !== typeof innerHTML$jscomp$7 ||
+          !("__html" in innerHTML$jscomp$7)
+        )
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        var html = innerHTML$jscomp$7.__html;
+        null !== html &&
+          void 0 !== html &&
+          ("string" === typeof html && 0 < html.length && "\n" === html[0]
+            ? target$jscomp$0.push(leadingNewline, stringToChunk(html))
+            : target$jscomp$0.push(stringToChunk("" + html)));
+      }
+      "string" === typeof children$jscomp$8 &&
+        "\n" === children$jscomp$8[0] &&
+        target$jscomp$0.push(leadingNewline);
+      return children$jscomp$8;
+    case "img":
+      var src = props.src,
+        srcSet = props.srcSet;
+      if (
+        !(
+          "lazy" === props.loading ||
+          (!src && !srcSet) ||
+          ("string" !== typeof src && null != src) ||
+          ("string" !== typeof srcSet && null != srcSet)
+        ) &&
+        "low" !== props.fetchPriority &&
+        !1 === !!(formatContext.tagScope & 3) &&
+        ("string" !== typeof src ||
+          ":" !== src[4] ||
+          ("d" !== src[0] && "D" !== src[0]) ||
+          ("a" !== src[1] && "A" !== src[1]) ||
+          ("t" !== src[2] && "T" !== src[2]) ||
+          ("a" !== src[3] && "A" !== src[3])) &&
+        ("string" !== typeof srcSet ||
+          ":" !== srcSet[4] ||
+          ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+          ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+          ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+          ("a" !== srcSet[3] && "A" !== srcSet[3]))
+      ) {
+        var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+          key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+          promotablePreloads = renderState.preloads.images,
+          resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+        if (resource$jscomp$1) {
+          if (
+            "high" === props.fetchPriority ||
+            10 > renderState.highImagePreloads.size
+          )
+            promotablePreloads.delete(key$jscomp$0),
+              renderState.highImagePreloads.add(resource$jscomp$1);
+        } else if (
+          !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+        ) {
+          resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+          var input = props.crossOrigin;
+          var JSCompiler_inline_result$jscomp$8 =
+            "string" === typeof input
+              ? "use-credentials" === input
+                ? input
+                : ""
+              : void 0;
+          var headers = renderState.headers,
+            header;
+          headers &&
+          0 < headers.remainingCapacity &&
+          "string" !== typeof props.srcSet &&
+          ("high" === props.fetchPriority ||
+            500 > headers.highImagePreloads.length) &&
+          ((header = getPreloadAsHeader(src, "image", {
+            imageSrcSet: props.srcSet,
+            imageSizes: props.sizes,
+            crossOrigin: JSCompiler_inline_result$jscomp$8,
+            integrity: props.integrity,
+            nonce: props.nonce,
+            type: props.type,
+            fetchPriority: props.fetchPriority,
+            referrerPolicy: props.refererPolicy
+          })),
+          0 <= (headers.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+              headers.highImagePreloads && (headers.highImagePreloads += ", "),
+              (headers.highImagePreloads += header))
+            : ((resource$jscomp$1 = []),
+              pushLinkImpl(resource$jscomp$1, {
+                rel: "preload",
+                as: "image",
+                href: srcSet ? void 0 : src,
+                imageSrcSet: srcSet,
+                imageSizes: sizes,
+                crossOrigin: JSCompiler_inline_result$jscomp$8,
+                integrity: props.integrity,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.referrerPolicy
+              }),
+              "high" === props.fetchPriority ||
+              10 > renderState.highImagePreloads.size
+                ? renderState.highImagePreloads.add(resource$jscomp$1)
+                : (renderState.bulkPreloads.add(resource$jscomp$1),
+                  promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+        }
+      }
+      return pushSelfClosing(target$jscomp$0, props, "img");
+    case "base":
+    case "area":
+    case "br":
+    case "col":
+    case "embed":
+    case "hr":
+    case "keygen":
+    case "param":
+    case "source":
+    case "track":
+    case "wbr":
+      return pushSelfClosing(target$jscomp$0, props, type);
+    case "annotation-xml":
+    case "color-profile":
+    case "font-face":
+    case "font-face-src":
+    case "font-face-uri":
+    case "font-face-format":
+    case "font-face-name":
+    case "missing-glyph":
+      break;
+    case "head":
+      if (2 > formatContext.insertionMode) {
+        var preamble = preambleState || renderState.preamble;
+        if (preamble.headChunks)
+          throw Error("The `<head>` tag may only be rendered once.");
+        preamble.headChunks = [];
+        var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+          preamble.headChunks,
+          props,
+          "head"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "head"
+        );
+      return JSCompiler_inline_result$jscomp$9;
+    case "body":
+      if (2 > formatContext.insertionMode) {
+        var preamble$jscomp$0 = preambleState || renderState.preamble;
+        if (preamble$jscomp$0.bodyChunks)
+          throw Error("The `<body>` tag may only be rendered once.");
+        preamble$jscomp$0.bodyChunks = [];
+        var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+          preamble$jscomp$0.bodyChunks,
+          props,
+          "body"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "body"
+        );
+      return JSCompiler_inline_result$jscomp$10;
+    case "html":
+      if (0 === formatContext.insertionMode) {
+        var preamble$jscomp$1 = preambleState || renderState.preamble;
+        if (preamble$jscomp$1.htmlChunks)
+          throw Error("The `<html>` tag may only be rendered once.");
+        preamble$jscomp$1.htmlChunks = [doctypeChunk];
+        var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+          preamble$jscomp$1.htmlChunks,
+          props,
+          "html"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "html"
+        );
+      return JSCompiler_inline_result$jscomp$11;
+    default:
+      if (-1 !== type.indexOf("-")) {
+        target$jscomp$0.push(startChunkForTag(type));
+        var children$jscomp$9 = null,
+          innerHTML$jscomp$8 = null,
+          propKey$jscomp$11;
+        for (propKey$jscomp$11 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+            var propValue$jscomp$11 = props[propKey$jscomp$11];
+            if (null != propValue$jscomp$11) {
+              var attributeName = propKey$jscomp$11;
+              switch (propKey$jscomp$11) {
+                case "children":
+                  children$jscomp$9 = propValue$jscomp$11;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$8 = propValue$jscomp$11;
+                  break;
+                case "style":
+                  pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                  break;
+                case "suppressContentEditableWarning":
+                case "suppressHydrationWarning":
+                case "ref":
+                  break;
+                case "className":
+                  attributeName = "class";
+                default:
+                  if (
+                    isAttributeNameSafe(propKey$jscomp$11) &&
+                    "function" !== typeof propValue$jscomp$11 &&
+                    "symbol" !== typeof propValue$jscomp$11 &&
+                    !1 !== propValue$jscomp$11
+                  ) {
+                    if (!0 === propValue$jscomp$11) propValue$jscomp$11 = "";
+                    else if ("object" === typeof propValue$jscomp$11) continue;
+                    target$jscomp$0.push(
+                      attributeSeparator,
+                      stringToChunk(attributeName),
+                      attributeAssign,
+                      stringToChunk(escapeTextForBrowser(propValue$jscomp$11)),
+                      attributeEnd
+                    );
+                  }
+              }
+            }
+          }
+        target$jscomp$0.push(endOfStartTag);
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9);
+        return children$jscomp$9;
+      }
+  }
+  return pushStartGenericElement(target$jscomp$0, props, type);
+}
+var endTagCache = new Map();
+function endChunkForTag(tag) {
+  var chunk = endTagCache.get(tag);
+  void 0 === chunk &&
+    ((chunk = stringToPrecomputedChunk("</" + tag + ">")),
+    endTagCache.set(tag, chunk));
+  return chunk;
+}
+function hoistPreambleState(renderState, preambleState) {
+  renderState = renderState.preamble;
+  null === renderState.htmlChunks &&
+    preambleState.htmlChunks &&
+    ((renderState.htmlChunks = preambleState.htmlChunks),
+    (preambleState.contribution |= 1));
+  null === renderState.headChunks &&
+    preambleState.headChunks &&
+    ((renderState.headChunks = preambleState.headChunks),
+    (preambleState.contribution |= 4));
+  null === renderState.bodyChunks &&
+    preambleState.bodyChunks &&
+    ((renderState.bodyChunks = preambleState.bodyChunks),
+    (preambleState.contribution |= 2));
+}
+function writeBootstrap(destination, renderState) {
+  renderState = renderState.bootstrapChunks;
+  for (var i = 0; i < renderState.length - 1; i++)
+    writeChunk(destination, renderState[i]);
+  return i < renderState.length
+    ? ((i = renderState[i]),
+      (renderState.length = 0),
+      writeChunkAndReturn(destination, i))
+    : !0;
+}
+var placeholder1 = stringToPrecomputedChunk('<template id="'),
+  placeholder2 = stringToPrecomputedChunk('"></template>'),
+  startCompletedSuspenseBoundary = stringToPrecomputedChunk("\x3c!--$--\x3e"),
+  startPendingSuspenseBoundary1 = stringToPrecomputedChunk(
+    '\x3c!--$?--\x3e<template id="'
+  ),
+  startPendingSuspenseBoundary2 = stringToPrecomputedChunk('"></template>'),
+  startClientRenderedSuspenseBoundary =
+    stringToPrecomputedChunk("\x3c!--$!--\x3e"),
+  endSuspenseBoundary = stringToPrecomputedChunk("\x3c!--/$--\x3e"),
+  clientRenderedSuspenseBoundaryError1 = stringToPrecomputedChunk("<template"),
+  clientRenderedSuspenseBoundaryErrorAttrInterstitial =
+    stringToPrecomputedChunk('"'),
+  clientRenderedSuspenseBoundaryError1A =
+    stringToPrecomputedChunk(' data-dgst="');
+stringToPrecomputedChunk(' data-msg="');
+stringToPrecomputedChunk(' data-stck="');
+stringToPrecomputedChunk(' data-cstck="');
+var clientRenderedSuspenseBoundaryError2 =
+  stringToPrecomputedChunk("></template>");
+function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+  writeChunk(destination, startPendingSuspenseBoundary1);
+  if (null === id)
+    throw Error(
+      "An ID must have been assigned before we can complete the boundary."
+    );
+  writeChunk(destination, renderState.boundaryPrefix);
+  writeChunk(destination, stringToChunk(id.toString(16)));
+  return writeChunkAndReturn(destination, startPendingSuspenseBoundary2);
+}
+var boundaryPreambleContributionChunkStart =
+    stringToPrecomputedChunk("\x3c!--"),
+  boundaryPreambleContributionChunkEnd = stringToPrecomputedChunk("--\x3e");
+function writePreambleContribution(destination, preambleState) {
+  preambleState = preambleState.contribution;
+  0 !== preambleState &&
+    (writeChunk(destination, boundaryPreambleContributionChunkStart),
+    writeChunk(destination, stringToChunk("" + preambleState)),
+    writeChunk(destination, boundaryPreambleContributionChunkEnd));
+}
+var startSegmentHTML = stringToPrecomputedChunk('<div hidden id="'),
+  startSegmentHTML2 = stringToPrecomputedChunk('">'),
+  endSegmentHTML = stringToPrecomputedChunk("</div>"),
+  startSegmentSVG = stringToPrecomputedChunk(
+    '<svg aria-hidden="true" style="display:none" id="'
+  ),
+  startSegmentSVG2 = stringToPrecomputedChunk('">'),
+  endSegmentSVG = stringToPrecomputedChunk("</svg>"),
+  startSegmentMathML = stringToPrecomputedChunk(
+    '<math aria-hidden="true" style="display:none" id="'
+  ),
+  startSegmentMathML2 = stringToPrecomputedChunk('">'),
+  endSegmentMathML = stringToPrecomputedChunk("</math>"),
+  startSegmentTable = stringToPrecomputedChunk('<table hidden id="'),
+  startSegmentTable2 = stringToPrecomputedChunk('">'),
+  endSegmentTable = stringToPrecomputedChunk("</table>"),
+  startSegmentTableBody = stringToPrecomputedChunk('<table hidden><tbody id="'),
+  startSegmentTableBody2 = stringToPrecomputedChunk('">'),
+  endSegmentTableBody = stringToPrecomputedChunk("</tbody></table>"),
+  startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id="'),
+  startSegmentTableRow2 = stringToPrecomputedChunk('">'),
+  endSegmentTableRow = stringToPrecomputedChunk("</tr></table>"),
+  startSegmentColGroup = stringToPrecomputedChunk(
+    '<table hidden><colgroup id="'
+  ),
+  startSegmentColGroup2 = stringToPrecomputedChunk('">'),
+  endSegmentColGroup = stringToPrecomputedChunk("</colgroup></table>");
+function writeStartSegment(destination, renderState, formatContext, id) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return (
+        writeChunk(destination, startSegmentHTML),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentHTML2)
+      );
+    case 4:
+      return (
+        writeChunk(destination, startSegmentSVG),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentSVG2)
+      );
+    case 5:
+      return (
+        writeChunk(destination, startSegmentMathML),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentMathML2)
+      );
+    case 6:
+      return (
+        writeChunk(destination, startSegmentTable),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentTable2)
+      );
+    case 7:
+      return (
+        writeChunk(destination, startSegmentTableBody),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentTableBody2)
+      );
+    case 8:
+      return (
+        writeChunk(destination, startSegmentTableRow),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentTableRow2)
+      );
+    case 9:
+      return (
+        writeChunk(destination, startSegmentColGroup),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, stringToChunk(id.toString(16))),
+        writeChunkAndReturn(destination, startSegmentColGroup2)
+      );
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+function writeEndSegment(destination, formatContext) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return writeChunkAndReturn(destination, endSegmentHTML);
+    case 4:
+      return writeChunkAndReturn(destination, endSegmentSVG);
+    case 5:
+      return writeChunkAndReturn(destination, endSegmentMathML);
+    case 6:
+      return writeChunkAndReturn(destination, endSegmentTable);
+    case 7:
+      return writeChunkAndReturn(destination, endSegmentTableBody);
+    case 8:
+      return writeChunkAndReturn(destination, endSegmentTableRow);
+    case 9:
+      return writeChunkAndReturn(destination, endSegmentColGroup);
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+var completeSegmentScript1Full = stringToPrecomputedChunk(
+    '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("'
+  ),
+  completeSegmentScript1Partial = stringToPrecomputedChunk('$RS("'),
+  completeSegmentScript2 = stringToPrecomputedChunk('","'),
+  completeSegmentScriptEnd = stringToPrecomputedChunk('")\x3c/script>');
+stringToPrecomputedChunk('<template data-rsi="" data-sid="');
+stringToPrecomputedChunk('" data-pid="');
+var completeBoundaryScript1Full = stringToPrecomputedChunk(
+    '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("'
+  ),
+  completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC("'),
+  completeBoundaryWithStylesScript1FullBoth = stringToPrecomputedChunk(
+    '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+  ),
+  completeBoundaryWithStylesScript1FullPartial = stringToPrecomputedChunk(
+    '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+  ),
+  completeBoundaryWithStylesScript1Partial = stringToPrecomputedChunk('$RR("'),
+  completeBoundaryScript2 = stringToPrecomputedChunk('","'),
+  completeBoundaryScript3a = stringToPrecomputedChunk('",'),
+  completeBoundaryScript3b = stringToPrecomputedChunk('"'),
+  completeBoundaryScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+stringToPrecomputedChunk('<template data-rci="" data-bid="');
+stringToPrecomputedChunk('<template data-rri="" data-bid="');
+stringToPrecomputedChunk('" data-sid="');
+stringToPrecomputedChunk('" data-sty="');
+var clientRenderScript1Full = stringToPrecomputedChunk(
+    '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("'
+  ),
+  clientRenderScript1Partial = stringToPrecomputedChunk('$RX("'),
+  clientRenderScript1A = stringToPrecomputedChunk('"'),
+  clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(","),
+  clientRenderScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+stringToPrecomputedChunk('<template data-rxi="" data-bid="');
+stringToPrecomputedChunk('" data-dgst="');
+stringToPrecomputedChunk('" data-msg="');
+stringToPrecomputedChunk('" data-stck="');
+stringToPrecomputedChunk('" data-cstck="');
+var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g;
+function escapeJSStringsForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInInstructionScripts,
+    function (match) {
+      switch (match) {
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var regexForJSStringsInScripts = /[&><\u2028\u2029]/g;
+function escapeJSObjectForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInScripts,
+    function (match) {
+      switch (match) {
+        case "&":
+          return "\\u0026";
+        case ">":
+          return "\\u003e";
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var lateStyleTagResourceOpen1 = stringToPrecomputedChunk(
+    '<style media="not all" data-precedence="'
+  ),
+  lateStyleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+  lateStyleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+  lateStyleTagTemplateClose = stringToPrecomputedChunk("</style>"),
+  currentlyRenderingBoundaryHasStylesToHoist = !1,
+  destinationHasCapacity = !0;
+function flushStyleTagsLateForBoundary(styleQueue) {
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs,
+    i = 0;
+  if (hrefs.length) {
+    writeChunk(this, lateStyleTagResourceOpen1);
+    writeChunk(this, styleQueue.precedence);
+    for (writeChunk(this, lateStyleTagResourceOpen2); i < hrefs.length - 1; i++)
+      writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator);
+    writeChunk(this, hrefs[i]);
+    writeChunk(this, lateStyleTagResourceOpen3);
+    for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]);
+    destinationHasCapacity = writeChunkAndReturn(
+      this,
+      lateStyleTagTemplateClose
+    );
+    currentlyRenderingBoundaryHasStylesToHoist = !0;
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function hasStylesToHoist(stylesheet) {
+  return 2 !== stylesheet.state
+    ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+    : !1;
+}
+function writeHoistablesForBoundary(destination, hoistableState, renderState) {
+  currentlyRenderingBoundaryHasStylesToHoist = !1;
+  destinationHasCapacity = !0;
+  hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+  hoistableState.stylesheets.forEach(hasStylesToHoist);
+  currentlyRenderingBoundaryHasStylesToHoist &&
+    (renderState.stylesToHoist = !0);
+  return destinationHasCapacity;
+}
+function flushResource(resource) {
+  for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]);
+  resource.length = 0;
+}
+var stylesheetFlushingQueue = [];
+function flushStyleInPreamble(stylesheet) {
+  pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+  for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+    writeChunk(this, stylesheetFlushingQueue[i]);
+  stylesheetFlushingQueue.length = 0;
+  stylesheet.state = 2;
+}
+var styleTagResourceOpen1 = stringToPrecomputedChunk(
+    '<style data-precedence="'
+  ),
+  styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+  spaceSeparator = stringToPrecomputedChunk(" "),
+  styleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+  styleTagResourceClose = stringToPrecomputedChunk("</style>");
+function flushStylesInPreamble(styleQueue) {
+  var hasStylesheets = 0 < styleQueue.sheets.size;
+  styleQueue.sheets.forEach(flushStyleInPreamble, this);
+  styleQueue.sheets.clear();
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs;
+  if (!hasStylesheets || hrefs.length) {
+    writeChunk(this, styleTagResourceOpen1);
+    writeChunk(this, styleQueue.precedence);
+    styleQueue = 0;
+    if (hrefs.length) {
+      for (
+        writeChunk(this, styleTagResourceOpen2);
+        styleQueue < hrefs.length - 1;
+        styleQueue++
+      )
+        writeChunk(this, hrefs[styleQueue]), writeChunk(this, spaceSeparator);
+      writeChunk(this, hrefs[styleQueue]);
+    }
+    writeChunk(this, styleTagResourceOpen3);
+    for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+      writeChunk(this, rules[styleQueue]);
+    writeChunk(this, styleTagResourceClose);
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function preloadLateStyle(stylesheet) {
+  if (0 === stylesheet.state) {
+    stylesheet.state = 1;
+    var props = stylesheet.props;
+    pushLinkImpl(stylesheetFlushingQueue, {
+      rel: "preload",
+      as: "style",
+      href: stylesheet.props.href,
+      crossOrigin: props.crossOrigin,
+      fetchPriority: props.fetchPriority,
+      integrity: props.integrity,
+      media: props.media,
+      hrefLang: props.hrefLang,
+      referrerPolicy: props.referrerPolicy
+    });
+    for (
+      stylesheet = 0;
+      stylesheet < stylesheetFlushingQueue.length;
+      stylesheet++
+    )
+      writeChunk(this, stylesheetFlushingQueue[stylesheet]);
+    stylesheetFlushingQueue.length = 0;
+  }
+}
+function preloadLateStyles(styleQueue) {
+  styleQueue.sheets.forEach(preloadLateStyle, this);
+  styleQueue.sheets.clear();
+}
+var arrayFirstOpenBracket = stringToPrecomputedChunk("["),
+  arraySubsequentOpenBracket = stringToPrecomputedChunk(",["),
+  arrayInterstitial = stringToPrecomputedChunk(","),
+  arrayCloseBracket = stringToPrecomputedChunk("]");
+function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+  writeChunk(destination, arrayFirstOpenBracket);
+  var nextArrayOpenBrackChunk = arrayFirstOpenBracket;
+  hoistableState.stylesheets.forEach(function (resource) {
+    if (2 !== resource.state)
+      if (3 === resource.state)
+        writeChunk(destination, nextArrayOpenBrackChunk),
+          writeChunk(
+            destination,
+            stringToChunk(
+              escapeJSObjectForInstructionScripts("" + resource.props.href)
+            )
+          ),
+          writeChunk(destination, arrayCloseBracket),
+          (nextArrayOpenBrackChunk = arraySubsequentOpenBracket);
+      else {
+        writeChunk(destination, nextArrayOpenBrackChunk);
+        var precedence = resource.props["data-precedence"],
+          props = resource.props,
+          coercedHref = sanitizeURL("" + resource.props.href);
+        writeChunk(
+          destination,
+          stringToChunk(escapeJSObjectForInstructionScripts(coercedHref))
+        );
+        precedence = "" + precedence;
+        writeChunk(destination, arrayInterstitial);
+        writeChunk(
+          destination,
+          stringToChunk(escapeJSObjectForInstructionScripts(precedence))
+        );
+        for (var propKey in props)
+          if (
+            hasOwnProperty.call(props, propKey) &&
+            ((precedence = props[propKey]), null != precedence)
+          )
+            switch (propKey) {
+              case "href":
+              case "rel":
+              case "precedence":
+              case "data-precedence":
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                writeStyleResourceAttributeInJS(
+                  destination,
+                  propKey,
+                  precedence
+                );
+            }
+        writeChunk(destination, arrayCloseBracket);
+        nextArrayOpenBrackChunk = arraySubsequentOpenBracket;
+        resource.state = 3;
+      }
+  });
+  writeChunk(destination, arrayCloseBracket);
+}
+function writeStyleResourceAttributeInJS(destination, name, value) {
+  var attributeName = name.toLowerCase();
+  switch (typeof value) {
+    case "function":
+    case "symbol":
+      return;
+  }
+  switch (name) {
+    case "innerHTML":
+    case "dangerouslySetInnerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "style":
+    case "ref":
+      return;
+    case "className":
+      attributeName = "class";
+      name = "" + value;
+      break;
+    case "hidden":
+      if (!1 === value) return;
+      name = "";
+      break;
+    case "src":
+    case "href":
+      value = sanitizeURL(value);
+      name = "" + value;
+      break;
+    default:
+      if (
+        (2 < name.length &&
+          ("o" === name[0] || "O" === name[0]) &&
+          ("n" === name[1] || "N" === name[1])) ||
+        !isAttributeNameSafe(name)
+      )
+        return;
+      name = "" + value;
+  }
+  writeChunk(destination, arrayInterstitial);
+  writeChunk(
+    destination,
+    stringToChunk(escapeJSObjectForInstructionScripts(attributeName))
+  );
+  writeChunk(destination, arrayInterstitial);
+  writeChunk(
+    destination,
+    stringToChunk(escapeJSObjectForInstructionScripts(name))
+  );
+}
+function createHoistableState() {
+  return { styles: new Set(), stylesheets: new Set() };
+}
+function prefetchDNS(href) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      if (!resumableState.dnsResources.hasOwnProperty(href)) {
+        resumableState.dnsResources[href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        )
+          JSCompiler_temp =
+            ((header =
+              "<" +
+              ("" + href).replace(
+                regexForHrefInLinkHeaderURLContext,
+                escapeHrefForLinkHeaderURLContextReplacer
+              ) +
+              ">; rel=dns-prefetch"),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        JSCompiler_temp
+          ? ((renderState.resets.dns[href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((header = []),
+            pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+            renderState.preconnects.add(header));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.D(href);
+}
+function preconnect(href, crossOrigin) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      var bucket =
+        "use-credentials" === crossOrigin
+          ? "credentials"
+          : "string" === typeof crossOrigin
+            ? "anonymous"
+            : "default";
+      if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+        resumableState.connectResources[bucket][href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        ) {
+          JSCompiler_temp =
+            "<" +
+            ("" + href).replace(
+              regexForHrefInLinkHeaderURLContext,
+              escapeHrefForLinkHeaderURLContextReplacer
+            ) +
+            ">; rel=preconnect";
+          if ("string" === typeof crossOrigin) {
+            var escapedCrossOrigin = ("" + crossOrigin).replace(
+              regexForLinkHeaderQuotedParamValueContext,
+              escapeStringForLinkHeaderQuotedParamValueContextReplacer
+            );
+            JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"';
+          }
+          JSCompiler_temp =
+            ((header = JSCompiler_temp),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        }
+        JSCompiler_temp
+          ? ((renderState.resets.connect[bucket][href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((bucket = []),
+            pushLinkImpl(bucket, {
+              rel: "preconnect",
+              href: href,
+              crossOrigin: crossOrigin
+            }),
+            renderState.preconnects.add(bucket));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.C(href, crossOrigin);
+}
+function preload(href, as, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (as && href) {
+      switch (as) {
+        case "image":
+          if (options) {
+            var imageSrcSet = options.imageSrcSet;
+            var imageSizes = options.imageSizes;
+            var fetchPriority = options.fetchPriority;
+          }
+          var key = imageSrcSet
+            ? imageSrcSet + "\n" + (imageSizes || "")
+            : href;
+          if (resumableState.imageResources.hasOwnProperty(key)) return;
+          resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+          resumableState = renderState.headers;
+          var header;
+          resumableState &&
+          0 < resumableState.remainingCapacity &&
+          "string" !== typeof imageSrcSet &&
+          "high" === fetchPriority &&
+          ((header = getPreloadAsHeader(href, as, options)),
+          0 <= (resumableState.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+              resumableState.highImagePreloads &&
+                (resumableState.highImagePreloads += ", "),
+              (resumableState.highImagePreloads += header))
+            : ((resumableState = []),
+              pushLinkImpl(
+                resumableState,
+                assign(
+                  { rel: "preload", href: imageSrcSet ? void 0 : href, as: as },
+                  options
+                )
+              ),
+              "high" === fetchPriority
+                ? renderState.highImagePreloads.add(resumableState)
+                : (renderState.bulkPreloads.add(resumableState),
+                  renderState.preloads.images.set(key, resumableState)));
+          break;
+        case "style":
+          if (resumableState.styleResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.styleResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.stylesheets.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          break;
+        case "script":
+          if (resumableState.scriptResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          renderState.preloads.scripts.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.scriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          break;
+        default:
+          if (resumableState.unknownResources.hasOwnProperty(as)) {
+            if (
+              ((imageSrcSet = resumableState.unknownResources[as]),
+              imageSrcSet.hasOwnProperty(href))
+            )
+              return;
+          } else
+            (imageSrcSet = {}),
+              (resumableState.unknownResources[as] = imageSrcSet);
+          imageSrcSet[href] = PRELOAD_NO_CREDS;
+          if (
+            (resumableState = renderState.headers) &&
+            0 < resumableState.remainingCapacity &&
+            "font" === as &&
+            ((key = getPreloadAsHeader(href, as, options)),
+            0 <= (resumableState.remainingCapacity -= key.length + 2))
+          )
+            (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+              resumableState.fontPreloads &&
+                (resumableState.fontPreloads += ", "),
+              (resumableState.fontPreloads += key);
+          else
+            switch (
+              ((resumableState = []),
+              (href = assign({ rel: "preload", href: href, as: as }, options)),
+              pushLinkImpl(resumableState, href),
+              as)
+            ) {
+              case "font":
+                renderState.fontPreloads.add(resumableState);
+                break;
+              default:
+                renderState.bulkPreloads.add(resumableState);
+            }
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.L(href, as, options);
+}
+function preloadModule(href, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      var as =
+        options && "string" === typeof options.as ? options.as : "script";
+      switch (as) {
+        case "script":
+          if (resumableState.moduleScriptResources.hasOwnProperty(href)) return;
+          as = [];
+          resumableState.moduleScriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.moduleScripts.set(href, as);
+          break;
+        default:
+          if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+            var resources = resumableState.unknownResources[as];
+            if (resources.hasOwnProperty(href)) return;
+          } else
+            (resources = {}),
+              (resumableState.moduleUnknownResources[as] = resources);
+          as = [];
+          resources[href] = PRELOAD_NO_CREDS;
+      }
+      pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options));
+      renderState.bulkPreloads.add(as);
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.m(href, options);
+}
+function preinitStyle(href, precedence, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      precedence = precedence || "default";
+      var styleQueue = renderState.styles.get(precedence),
+        resourceState = resumableState.styleResources.hasOwnProperty(href)
+          ? resumableState.styleResources[href]
+          : void 0;
+      null !== resourceState &&
+        ((resumableState.styleResources[href] = null),
+        styleQueue ||
+          ((styleQueue = {
+            precedence: stringToChunk(escapeTextForBrowser(precedence)),
+            rules: [],
+            hrefs: [],
+            sheets: new Map()
+          }),
+          renderState.styles.set(precedence, styleQueue)),
+        (precedence = {
+          state: 0,
+          props: assign(
+            { rel: "stylesheet", href: href, "data-precedence": precedence },
+            options
+          )
+        }),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(precedence.props, resourceState),
+          (renderState = renderState.preloads.stylesheets.get(href)) &&
+          0 < renderState.length
+            ? (renderState.length = 0)
+            : (precedence.state = 1)),
+        styleQueue.sheets.set(href, precedence),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.S(href, precedence, options);
+}
+function preinitScript(src, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.scriptResources.hasOwnProperty(src)
+        ? resumableState.scriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.scriptResources[src] = null),
+        (options = assign({ src: src, async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.scripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.X(src, options);
+}
+function preinitModuleScript(src, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.moduleScriptResources.hasOwnProperty(
+        src
+      )
+        ? resumableState.moduleScriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.moduleScriptResources[src] = null),
+        (options = assign({ src: src, type: "module", async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.moduleScripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.M(src, options);
+}
+function adoptPreloadCredentials(target, preloadState) {
+  null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+  null == target.integrity && (target.integrity = preloadState[1]);
+}
+function getPreloadAsHeader(href, as, params) {
+  href = ("" + href).replace(
+    regexForHrefInLinkHeaderURLContext,
+    escapeHrefForLinkHeaderURLContextReplacer
+  );
+  as = ("" + as).replace(
+    regexForLinkHeaderQuotedParamValueContext,
+    escapeStringForLinkHeaderQuotedParamValueContextReplacer
+  );
+  as = "<" + href + '>; rel=preload; as="' + as + '"';
+  for (var paramName in params)
+    hasOwnProperty.call(params, paramName) &&
+      ((href = params[paramName]),
+      "string" === typeof href &&
+        (as +=
+          "; " +
+          paramName.toLowerCase() +
+          '="' +
+          ("" + href).replace(
+            regexForLinkHeaderQuotedParamValueContext,
+            escapeStringForLinkHeaderQuotedParamValueContextReplacer
+          ) +
+          '"'));
+  return as;
+}
+var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g;
+function escapeHrefForLinkHeaderURLContextReplacer(match) {
+  switch (match) {
+    case "<":
+      return "%3C";
+    case ">":
+      return "%3E";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g;
+function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+  switch (match) {
+    case '"':
+      return "%22";
+    case "'":
+      return "%27";
+    case ";":
+      return "%3B";
+    case ",":
+      return "%2C";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+function hoistStyleQueueDependency(styleQueue) {
+  this.styles.add(styleQueue);
+}
+function hoistStylesheetDependency(stylesheet) {
+  this.stylesheets.add(stylesheet);
+}
+var bind = Function.prototype.bind,
+  supportsRequestStorage = "function" === typeof AsyncLocalStorage,
+  requestStorage = supportsRequestStorage ? new AsyncLocalStorage() : null,
+  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function getComponentNameFromType(type) {
+  if (null == type) return null;
+  if ("function" === typeof type)
+    return type.$$typeof === REACT_CLIENT_REFERENCE
+      ? null
+      : type.displayName || type.name || null;
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_FRAGMENT_TYPE:
+      return "Fragment";
+    case REACT_PROFILER_TYPE:
+      return "Profiler";
+    case REACT_STRICT_MODE_TYPE:
+      return "StrictMode";
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+    case REACT_ACTIVITY_TYPE:
+      return "Activity";
+  }
+  if ("object" === typeof type)
+    switch (type.$$typeof) {
+      case REACT_PORTAL_TYPE:
+        return "Portal";
+      case REACT_CONTEXT_TYPE:
+        return (type.displayName || "Context") + ".Provider";
+      case REACT_CONSUMER_TYPE:
+        return (type._context.displayName || "Context") + ".Consumer";
+      case REACT_FORWARD_REF_TYPE:
+        var innerType = type.render;
+        type = type.displayName;
+        type ||
+          ((type = innerType.displayName || innerType.name || ""),
+          (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+        return type;
+      case REACT_MEMO_TYPE:
+        return (
+          (innerType = type.displayName || null),
+          null !== innerType
+            ? innerType
+            : getComponentNameFromType(type.type) || "Memo"
+        );
+      case REACT_LAZY_TYPE:
+        innerType = type._payload;
+        type = type._init;
+        try {
+          return getComponentNameFromType(type(innerType));
+        } catch (x) {}
+    }
+  return null;
+}
+var emptyContextObject = {},
+  currentActiveSnapshot = null;
+function popToNearestCommonAncestor(prev, next) {
+  if (prev !== next) {
+    prev.context._currentValue = prev.parentValue;
+    prev = prev.parent;
+    var parentNext = next.parent;
+    if (null === prev) {
+      if (null !== parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+    } else {
+      if (null === parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+      popToNearestCommonAncestor(prev, parentNext);
+    }
+    next.context._currentValue = next.value;
+  }
+}
+function popAllPrevious(prev) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  null !== prev && popAllPrevious(prev);
+}
+function pushAllNext(next) {
+  var parentNext = next.parent;
+  null !== parentNext && pushAllNext(parentNext);
+  next.context._currentValue = next.value;
+}
+function popPreviousToCommonLevel(prev, next) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  if (null === prev)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === next.depth
+    ? popToNearestCommonAncestor(prev, next)
+    : popPreviousToCommonLevel(prev, next);
+}
+function popNextToCommonLevel(prev, next) {
+  var parentNext = next.parent;
+  if (null === parentNext)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === parentNext.depth
+    ? popToNearestCommonAncestor(prev, parentNext)
+    : popNextToCommonLevel(prev, parentNext);
+  next.context._currentValue = next.value;
+}
+function switchContext(newSnapshot) {
+  var prev = currentActiveSnapshot;
+  prev !== newSnapshot &&
+    (null === prev
+      ? pushAllNext(newSnapshot)
+      : null === newSnapshot
+        ? popAllPrevious(prev)
+        : prev.depth === newSnapshot.depth
+          ? popToNearestCommonAncestor(prev, newSnapshot)
+          : prev.depth > newSnapshot.depth
+            ? popPreviousToCommonLevel(prev, newSnapshot)
+            : popNextToCommonLevel(prev, newSnapshot),
+    (currentActiveSnapshot = newSnapshot));
+}
+var classComponentUpdater = {
+    enqueueSetState: function (inst, payload) {
+      inst = inst._reactInternals;
+      null !== inst.queue && inst.queue.push(payload);
+    },
+    enqueueReplaceState: function (inst, payload) {
+      inst = inst._reactInternals;
+      inst.replace = !0;
+      inst.queue = [payload];
+    },
+    enqueueForceUpdate: function () {}
+  },
+  emptyTreeContext = { id: 1, overflow: "" };
+function pushTreeContext(baseContext, totalChildren, index) {
+  var baseIdWithLeadingBit = baseContext.id;
+  baseContext = baseContext.overflow;
+  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+  baseIdWithLeadingBit &= ~(1 << baseLength);
+  index += 1;
+  var length = 32 - clz32(totalChildren) + baseLength;
+  if (30 < length) {
+    var numberOfOverflowBits = baseLength - (baseLength % 5);
+    length = (
+      baseIdWithLeadingBit &
+      ((1 << numberOfOverflowBits) - 1)
+    ).toString(32);
+    baseIdWithLeadingBit >>= numberOfOverflowBits;
+    baseLength -= numberOfOverflowBits;
+    return {
+      id:
+        (1 << (32 - clz32(totalChildren) + baseLength)) |
+        (index << baseLength) |
+        baseIdWithLeadingBit,
+      overflow: length + baseContext
+    };
+  }
+  return {
+    id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+    overflow: baseContext
+  };
+}
+var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+  log = Math.log,
+  LN2 = Math.LN2;
+function clz32Fallback(x) {
+  x >>>= 0;
+  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+}
+var SuspenseException = Error(
+  "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+);
+function noop$2() {}
+function trackUsedThenable(thenableState, thenable, index) {
+  index = thenableState[index];
+  void 0 === index
+    ? thenableState.push(thenable)
+    : index !== thenable && (thenable.then(noop$2, noop$2), (thenable = index));
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw thenable.reason;
+    default:
+      "string" === typeof thenable.status
+        ? thenable.then(noop$2, noop$2)
+        : ((thenableState = thenable),
+          (thenableState.status = "pending"),
+          thenableState.then(
+            function (fulfilledValue) {
+              if ("pending" === thenable.status) {
+                var fulfilledThenable = thenable;
+                fulfilledThenable.status = "fulfilled";
+                fulfilledThenable.value = fulfilledValue;
+              }
+            },
+            function (error) {
+              if ("pending" === thenable.status) {
+                var rejectedThenable = thenable;
+                rejectedThenable.status = "rejected";
+                rejectedThenable.reason = error;
+              }
+            }
+          ));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+      }
+      suspendedThenable = thenable;
+      throw SuspenseException;
+  }
+}
+var suspendedThenable = null;
+function getSuspendedThenable() {
+  if (null === suspendedThenable)
+    throw Error(
+      "Expected a suspended thenable. This is a bug in React. Please file an issue."
+    );
+  var thenable = suspendedThenable;
+  suspendedThenable = null;
+  return thenable;
+}
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  currentlyRenderingComponent = null,
+  currentlyRenderingTask = null,
+  currentlyRenderingRequest = null,
+  currentlyRenderingKeyPath = null,
+  firstWorkInProgressHook = null,
+  workInProgressHook = null,
+  isReRender = !1,
+  didScheduleRenderPhaseUpdate = !1,
+  localIdCounter = 0,
+  actionStateCounter = 0,
+  actionStateMatchingIndex = -1,
+  thenableIndexCounter = 0,
+  thenableState = null,
+  renderPhaseUpdates = null,
+  numberOfReRenders = 0;
+function resolveCurrentlyRenderingComponent() {
+  if (null === currentlyRenderingComponent)
+    throw Error(
+      "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+    );
+  return currentlyRenderingComponent;
+}
+function createHook() {
+  if (0 < numberOfReRenders)
+    throw Error("Rendered more hooks than during the previous render");
+  return { memoizedState: null, queue: null, next: null };
+}
+function createWorkInProgressHook() {
+  null === workInProgressHook
+    ? null === firstWorkInProgressHook
+      ? ((isReRender = !1),
+        (firstWorkInProgressHook = workInProgressHook = createHook()))
+      : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+    : null === workInProgressHook.next
+      ? ((isReRender = !1),
+        (workInProgressHook = workInProgressHook.next = createHook()))
+      : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+  return workInProgressHook;
+}
+function getThenableStateAfterSuspending() {
+  var state = thenableState;
+  thenableState = null;
+  return state;
+}
+function resetHooksState() {
+  currentlyRenderingKeyPath =
+    currentlyRenderingRequest =
+    currentlyRenderingTask =
+    currentlyRenderingComponent =
+      null;
+  didScheduleRenderPhaseUpdate = !1;
+  firstWorkInProgressHook = null;
+  numberOfReRenders = 0;
+  workInProgressHook = renderPhaseUpdates = null;
+}
+function basicStateReducer(state, action) {
+  return "function" === typeof action ? action(state) : action;
+}
+function useReducer(reducer, initialArg, init) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  if (isReRender) {
+    var queue = workInProgressHook.queue;
+    initialArg = queue.dispatch;
+    if (
+      null !== renderPhaseUpdates &&
+      ((init = renderPhaseUpdates.get(queue)), void 0 !== init)
+    ) {
+      renderPhaseUpdates.delete(queue);
+      queue = workInProgressHook.memoizedState;
+      do (queue = reducer(queue, init.action)), (init = init.next);
+      while (null !== init);
+      workInProgressHook.memoizedState = queue;
+      return [queue, initialArg];
+    }
+    return [workInProgressHook.memoizedState, initialArg];
+  }
+  reducer =
+    reducer === basicStateReducer
+      ? "function" === typeof initialArg
+        ? initialArg()
+        : initialArg
+      : void 0 !== init
+        ? init(initialArg)
+        : initialArg;
+  workInProgressHook.memoizedState = reducer;
+  reducer = workInProgressHook.queue = { last: null, dispatch: null };
+  reducer = reducer.dispatch = dispatchAction.bind(
+    null,
+    currentlyRenderingComponent,
+    reducer
+  );
+  return [workInProgressHook.memoizedState, reducer];
+}
+function useMemo(nextCreate, deps) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  if (null !== workInProgressHook) {
+    var prevState = workInProgressHook.memoizedState;
+    if (null !== prevState && null !== deps) {
+      var prevDeps = prevState[1];
+      a: if (null === prevDeps) prevDeps = !1;
+      else {
+        for (var i = 0; i < prevDeps.length && i < deps.length; i++)
+          if (!objectIs(deps[i], prevDeps[i])) {
+            prevDeps = !1;
+            break a;
+          }
+        prevDeps = !0;
+      }
+      if (prevDeps) return prevState[0];
+    }
+  }
+  nextCreate = nextCreate();
+  workInProgressHook.memoizedState = [nextCreate, deps];
+  return nextCreate;
+}
+function dispatchAction(componentIdentity, queue, action) {
+  if (25 <= numberOfReRenders)
+    throw Error(
+      "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+    );
+  if (componentIdentity === currentlyRenderingComponent)
+    if (
+      ((didScheduleRenderPhaseUpdate = !0),
+      (componentIdentity = { action: action, next: null }),
+      null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+      (action = renderPhaseUpdates.get(queue)),
+      void 0 === action)
+    )
+      renderPhaseUpdates.set(queue, componentIdentity);
+    else {
+      for (queue = action; null !== queue.next; ) queue = queue.next;
+      queue.next = componentIdentity;
+    }
+}
+function unsupportedStartTransition() {
+  throw Error("startTransition cannot be called during server rendering.");
+}
+function unsupportedSetOptimisticState() {
+  throw Error("Cannot update optimistic state while rendering.");
+}
+function useActionState(action, initialState, permalink) {
+  resolveCurrentlyRenderingComponent();
+  var actionStateHookIndex = actionStateCounter++,
+    request = currentlyRenderingRequest;
+  if ("function" === typeof action.$$FORM_ACTION) {
+    var nextPostbackStateKey = null,
+      componentKeyPath = currentlyRenderingKeyPath;
+    request = request.formState;
+    var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+    if (null !== request && "function" === typeof isSignatureEqual) {
+      var postbackKey = request[1];
+      isSignatureEqual.call(action, request[2], request[3]) &&
+        ((nextPostbackStateKey =
+          void 0 !== permalink
+            ? "p" + permalink
+            : "k" +
+              murmurhash3_32_gc(
+                JSON.stringify([componentKeyPath, null, actionStateHookIndex]),
+                0
+              )),
+        postbackKey === nextPostbackStateKey &&
+          ((actionStateMatchingIndex = actionStateHookIndex),
+          (initialState = request[0])));
+    }
+    var boundAction = action.bind(null, initialState);
+    action = function (payload) {
+      boundAction(payload);
+    };
+    "function" === typeof boundAction.$$FORM_ACTION &&
+      (action.$$FORM_ACTION = function (prefix) {
+        prefix = boundAction.$$FORM_ACTION(prefix);
+        void 0 !== permalink &&
+          ((permalink += ""), (prefix.action = permalink));
+        var formData = prefix.data;
+        formData &&
+          (null === nextPostbackStateKey &&
+            (nextPostbackStateKey =
+              void 0 !== permalink
+                ? "p" + permalink
+                : "k" +
+                  murmurhash3_32_gc(
+                    JSON.stringify([
+                      componentKeyPath,
+                      null,
+                      actionStateHookIndex
+                    ]),
+                    0
+                  )),
+          formData.append("$ACTION_KEY", nextPostbackStateKey));
+        return prefix;
+      });
+    return [initialState, action, !1];
+  }
+  var boundAction$22 = action.bind(null, initialState);
+  return [
+    initialState,
+    function (payload) {
+      boundAction$22(payload);
+    },
+    !1
+  ];
+}
+function unwrapThenable(thenable) {
+  var index = thenableIndexCounter;
+  thenableIndexCounter += 1;
+  null === thenableState && (thenableState = []);
+  return trackUsedThenable(thenableState, thenable, index);
+}
+function unsupportedRefresh() {
+  throw Error("Cache cannot be refreshed during server rendering.");
+}
+function noop$1() {}
+var HooksDispatcher = {
+    readContext: function (context) {
+      return context._currentValue;
+    },
+    use: function (usable) {
+      if (null !== usable && "object" === typeof usable) {
+        if ("function" === typeof usable.then) return unwrapThenable(usable);
+        if (usable.$$typeof === REACT_CONTEXT_TYPE) return usable._currentValue;
+      }
+      throw Error("An unsupported type was passed to use(): " + String(usable));
+    },
+    useContext: function (context) {
+      resolveCurrentlyRenderingComponent();
+      return context._currentValue;
+    },
+    useMemo: useMemo,
+    useReducer: useReducer,
+    useRef: function (initialValue) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      var previousRef = workInProgressHook.memoizedState;
+      return null === previousRef
+        ? ((initialValue = { current: initialValue }),
+          (workInProgressHook.memoizedState = initialValue))
+        : previousRef;
+    },
+    useState: function (initialState) {
+      return useReducer(basicStateReducer, initialState);
+    },
+    useInsertionEffect: noop$1,
+    useLayoutEffect: noop$1,
+    useCallback: function (callback, deps) {
+      return useMemo(function () {
+        return callback;
+      }, deps);
+    },
+    useImperativeHandle: noop$1,
+    useEffect: noop$1,
+    useDebugValue: noop$1,
+    useDeferredValue: function (value, initialValue) {
+      resolveCurrentlyRenderingComponent();
+      return void 0 !== initialValue ? initialValue : value;
+    },
+    useTransition: function () {
+      resolveCurrentlyRenderingComponent();
+      return [!1, unsupportedStartTransition];
+    },
+    useId: function () {
+      var JSCompiler_inline_result = currentlyRenderingTask.treeContext;
+      var overflow = JSCompiler_inline_result.overflow;
+      JSCompiler_inline_result = JSCompiler_inline_result.id;
+      JSCompiler_inline_result =
+        (
+          JSCompiler_inline_result &
+          ~(1 << (32 - clz32(JSCompiler_inline_result) - 1))
+        ).toString(32) + overflow;
+      var resumableState = currentResumableState;
+      if (null === resumableState)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component."
+        );
+      overflow = localIdCounter++;
+      JSCompiler_inline_result =
+        "\u00ab" + resumableState.idPrefix + "R" + JSCompiler_inline_result;
+      0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32));
+      return JSCompiler_inline_result + "\u00bb";
+    },
+    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
+      if (void 0 === getServerSnapshot)
+        throw Error(
+          "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+        );
+      return getServerSnapshot();
+    },
+    useOptimistic: function (passthrough) {
+      resolveCurrentlyRenderingComponent();
+      return [passthrough, unsupportedSetOptimisticState];
+    },
+    useActionState: useActionState,
+    useFormState: useActionState,
+    useHostTransitionStatus: function () {
+      resolveCurrentlyRenderingComponent();
+      return sharedNotPendingObject;
+    },
+    useMemoCache: function (size) {
+      for (var data = Array(size), i = 0; i < size; i++)
+        data[i] = REACT_MEMO_CACHE_SENTINEL;
+      return data;
+    },
+    useCacheRefresh: function () {
+      return unsupportedRefresh;
+    }
+  },
+  currentResumableState = null,
+  DefaultAsyncDispatcher = {
+    getCacheForType: function () {
+      throw Error("Not implemented.");
+    }
+  };
+function prepareStackTrace(error, structuredStackTrace) {
+  error = (error.name || "Error") + ": " + (error.message || "");
+  for (var i = 0; i < structuredStackTrace.length; i++)
+    error += "\n    at " + structuredStackTrace[i].toString();
+  return error;
+}
+var prefix, suffix;
+function describeBuiltInComponentFrame(name) {
+  if (void 0 === prefix)
+    try {
+      throw Error();
+    } catch (x) {
+      var match = x.stack.trim().match(/\n( *(at )?)/);
+      prefix = (match && match[1]) || "";
+      suffix =
+        -1 < x.stack.indexOf("\n    at")
+          ? " (<anonymous>)"
+          : -1 < x.stack.indexOf("@")
+            ? "@unknown:0:0"
+            : "";
+    }
+  return "\n" + prefix + name + suffix;
+}
+var reentry = !1;
+function describeNativeComponentFrame(fn, construct) {
+  if (!fn || reentry) return "";
+  reentry = !0;
+  var previousPrepareStackTrace = Error.prepareStackTrace;
+  Error.prepareStackTrace = prepareStackTrace;
+  try {
+    var RunInRootFrame = {
+      DetermineComponentFrameRoot: function () {
+        try {
+          if (construct) {
+            var Fake = function () {
+              throw Error();
+            };
+            Object.defineProperty(Fake.prototype, "props", {
+              set: function () {
+                throw Error();
+              }
+            });
+            if ("object" === typeof Reflect && Reflect.construct) {
+              try {
+                Reflect.construct(Fake, []);
+              } catch (x) {
+                var control = x;
+              }
+              Reflect.construct(fn, [], Fake);
+            } else {
+              try {
+                Fake.call();
+              } catch (x$24) {
+                control = x$24;
+              }
+              fn.call(Fake.prototype);
+            }
+          } else {
+            try {
+              throw Error();
+            } catch (x$25) {
+              control = x$25;
+            }
+            (Fake = fn()) &&
+              "function" === typeof Fake.catch &&
+              Fake.catch(function () {});
+          }
+        } catch (sample) {
+          if (sample && control && "string" === typeof sample.stack)
+            return [sample.stack, control.stack];
+        }
+        return [null, null];
+      }
+    };
+    RunInRootFrame.DetermineComponentFrameRoot.displayName =
+      "DetermineComponentFrameRoot";
+    var namePropDescriptor = Object.getOwnPropertyDescriptor(
+      RunInRootFrame.DetermineComponentFrameRoot,
+      "name"
+    );
+    namePropDescriptor &&
+      namePropDescriptor.configurable &&
+      Object.defineProperty(
+        RunInRootFrame.DetermineComponentFrameRoot,
+        "name",
+        { value: "DetermineComponentFrameRoot" }
+      );
+    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
+      sampleStack = _RunInRootFrame$Deter[0],
+      controlStack = _RunInRootFrame$Deter[1];
+    if (sampleStack && controlStack) {
+      var sampleLines = sampleStack.split("\n"),
+        controlLines = controlStack.split("\n");
+      for (
+        namePropDescriptor = RunInRootFrame = 0;
+        RunInRootFrame < sampleLines.length &&
+        !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot");
+
+      )
+        RunInRootFrame++;
+      for (
+        ;
+        namePropDescriptor < controlLines.length &&
+        !controlLines[namePropDescriptor].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        namePropDescriptor++;
+      if (
+        RunInRootFrame === sampleLines.length ||
+        namePropDescriptor === controlLines.length
+      )
+        for (
+          RunInRootFrame = sampleLines.length - 1,
+            namePropDescriptor = controlLines.length - 1;
+          1 <= RunInRootFrame &&
+          0 <= namePropDescriptor &&
+          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];
+
+        )
+          namePropDescriptor--;
+      for (
+        ;
+        1 <= RunInRootFrame && 0 <= namePropDescriptor;
+        RunInRootFrame--, namePropDescriptor--
+      )
+        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {
+          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {
+            do
+              if (
+                (RunInRootFrame--,
+                namePropDescriptor--,
+                0 > namePropDescriptor ||
+                  sampleLines[RunInRootFrame] !==
+                    controlLines[namePropDescriptor])
+              ) {
+                var frame =
+                  "\n" +
+                  sampleLines[RunInRootFrame].replace(" at new ", " at ");
+                fn.displayName &&
+                  frame.includes("<anonymous>") &&
+                  (frame = frame.replace("<anonymous>", fn.displayName));
+                return frame;
+              }
+            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);
+          }
+          break;
+        }
+    }
+  } finally {
+    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);
+  }
+  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "")
+    ? describeBuiltInComponentFrame(previousPrepareStackTrace)
+    : "";
+}
+function describeComponentStackByType(type) {
+  if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+  if ("function" === typeof type)
+    return type.prototype && type.prototype.isReactComponent
+      ? describeNativeComponentFrame(type, !0)
+      : describeNativeComponentFrame(type, !1);
+  if ("object" === typeof type && null !== type) {
+    switch (type.$$typeof) {
+      case REACT_FORWARD_REF_TYPE:
+        return describeNativeComponentFrame(type.render, !1);
+      case REACT_MEMO_TYPE:
+        return describeNativeComponentFrame(type.type, !1);
+      case REACT_LAZY_TYPE:
+        var lazyComponent = type,
+          payload = lazyComponent._payload;
+        lazyComponent = lazyComponent._init;
+        try {
+          type = lazyComponent(payload);
+        } catch (x) {
+          return describeBuiltInComponentFrame("Lazy");
+        }
+        return describeComponentStackByType(type);
+    }
+    if ("string" === typeof type.name)
+      return (
+        (payload = type.env),
+        describeBuiltInComponentFrame(
+          type.name + (payload ? " [" + payload + "]" : "")
+        )
+      );
+  }
+  switch (type) {
+    case REACT_SUSPENSE_LIST_TYPE:
+      return describeBuiltInComponentFrame("SuspenseList");
+    case REACT_SUSPENSE_TYPE:
+      return describeBuiltInComponentFrame("Suspense");
+  }
+  return "";
+}
+function defaultErrorHandler(error) {
+  if (
+    "object" === typeof error &&
+    null !== error &&
+    "string" === typeof error.environmentName
+  ) {
+    var JSCompiler_inline_result = error.environmentName;
+    error = [error].slice(0);
+    "string" === typeof error[0]
+      ? error.splice(
+          0,
+          1,
+          "\u001b[0m\u001b[7m%c%s\u001b[0m%c " + error[0],
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        )
+      : error.splice(
+          0,
+          0,
+          "\u001b[0m\u001b[7m%c%s\u001b[0m%c ",
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        );
+    error.unshift(console);
+    JSCompiler_inline_result = bind.apply(console.error, error);
+    JSCompiler_inline_result();
+  } else console.error(error);
+  return null;
+}
+function noop() {}
+function RequestInstance(
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  var abortSet = new Set();
+  this.destination = null;
+  this.flushScheduled = !1;
+  this.resumableState = resumableState;
+  this.renderState = renderState;
+  this.rootFormatContext = rootFormatContext;
+  this.progressiveChunkSize =
+    void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+  this.status = 10;
+  this.fatalError = null;
+  this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+  this.completedPreambleSegments = this.completedRootSegment = null;
+  this.abortableTasks = abortSet;
+  this.pingedTasks = [];
+  this.clientRenderedBoundaries = [];
+  this.completedBoundaries = [];
+  this.partialBoundaries = [];
+  this.trackedPostpones = null;
+  this.onError = void 0 === onError ? defaultErrorHandler : onError;
+  this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+  this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+  this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+  this.onShellError = void 0 === onShellError ? noop : onShellError;
+  this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+  this.formState = void 0 === formState ? null : formState;
+}
+function createRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  resumableState = new RequestInstance(
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    formState
+  );
+  renderState = createPendingSegment(
+    resumableState,
+    0,
+    null,
+    rootFormatContext,
+    !1,
+    !1
+  );
+  renderState.parentFlushed = !0;
+  children = createRenderTask(
+    resumableState,
+    null,
+    children,
+    -1,
+    null,
+    renderState,
+    null,
+    null,
+    resumableState.abortableTasks,
+    null,
+    rootFormatContext,
+    null,
+    emptyTreeContext,
+    null,
+    !1
+  );
+  pushComponentStack(children);
+  resumableState.pingedTasks.push(children);
+  return resumableState;
+}
+function createPrerenderRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone
+) {
+  children = createRequest(
+    children,
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    void 0
+  );
+  children.trackedPostpones = {
+    workingMap: new Map(),
+    rootNodes: [],
+    rootSlots: null
+  };
+  return children;
+}
+var currentRequest = null;
+function resolveRequest() {
+  if (currentRequest) return currentRequest;
+  if (supportsRequestStorage) {
+    var store = requestStorage.getStore();
+    if (store) return store;
+  }
+  return null;
+}
+function pingTask(request, task) {
+  request.pingedTasks.push(task);
+  1 === request.pingedTasks.length &&
+    ((request.flushScheduled = null !== request.destination),
+    null !== request.trackedPostpones || 10 === request.status
+      ? scheduleMicrotask(function () {
+          return performWork(request);
+        })
+      : setTimeout(function () {
+          return performWork(request);
+        }, 0));
+}
+function createSuspenseBoundary(
+  request,
+  fallbackAbortableTasks,
+  contentPreamble,
+  fallbackPreamble
+) {
+  return {
+    status: 0,
+    rootSegmentID: -1,
+    parentFlushed: !1,
+    pendingTasks: 0,
+    completedSegments: [],
+    byteSize: 0,
+    fallbackAbortableTasks: fallbackAbortableTasks,
+    errorDigest: null,
+    contentState: createHoistableState(),
+    fallbackState: createHoistableState(),
+    contentPreamble: contentPreamble,
+    fallbackPreamble: fallbackPreamble,
+    trackedContentKeyPath: null,
+    trackedFallbackNode: null
+  };
+}
+function createRenderTask(
+  request,
+  thenableState,
+  node,
+  childIndex,
+  blockedBoundary,
+  blockedSegment,
+  blockedPreamble,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  var task = {
+    replay: null,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: blockedSegment,
+    blockedPreamble: blockedPreamble,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createReplayTask(
+  request,
+  thenableState,
+  replay,
+  node,
+  childIndex,
+  blockedBoundary,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  replay.pendingTasks++;
+  var task = {
+    replay: replay,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: null,
+    blockedPreamble: null,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createPendingSegment(
+  request,
+  index,
+  boundary,
+  parentFormatContext,
+  lastPushedText,
+  textEmbedded
+) {
+  return {
+    status: 0,
+    parentFlushed: !1,
+    id: -1,
+    index: index,
+    chunks: [],
+    children: [],
+    preambleChildren: [],
+    parentFormatContext: parentFormatContext,
+    boundary: boundary,
+    lastPushedText: lastPushedText,
+    textEmbedded: textEmbedded
+  };
+}
+function pushComponentStack(task) {
+  var node = task.node;
+  if ("object" === typeof node && null !== node)
+    switch (node.$$typeof) {
+      case REACT_ELEMENT_TYPE:
+        task.componentStack = { parent: task.componentStack, type: node.type };
+    }
+}
+function getThrownInfo(node$jscomp$0) {
+  var errorInfo = {};
+  node$jscomp$0 &&
+    Object.defineProperty(errorInfo, "componentStack", {
+      configurable: !0,
+      enumerable: !0,
+      get: function () {
+        try {
+          var info = "",
+            node = node$jscomp$0;
+          do
+            (info += describeComponentStackByType(node.type)),
+              (node = node.parent);
+          while (node);
+          var JSCompiler_inline_result = info;
+        } catch (x) {
+          JSCompiler_inline_result =
+            "\nError generating stack: " + x.message + "\n" + x.stack;
+        }
+        Object.defineProperty(errorInfo, "componentStack", {
+          value: JSCompiler_inline_result
+        });
+        return JSCompiler_inline_result;
+      }
+    });
+  return errorInfo;
+}
+function logRecoverableError(request, error, errorInfo) {
+  request = request.onError;
+  error = request(error, errorInfo);
+  if (null == error || "string" === typeof error) return error;
+}
+function fatalError(request, error) {
+  var onShellError = request.onShellError,
+    onFatalError = request.onFatalError;
+  onShellError(error);
+  onFatalError(error);
+  null !== request.destination
+    ? ((request.status = 14), closeWithError(request.destination, error))
+    : ((request.status = 13), (request.fatalError = error));
+}
+function renderWithHooks(request, task, keyPath, Component, props, secondArg) {
+  var prevThenableState = task.thenableState;
+  task.thenableState = null;
+  currentlyRenderingComponent = {};
+  currentlyRenderingTask = task;
+  currentlyRenderingRequest = request;
+  currentlyRenderingKeyPath = keyPath;
+  actionStateCounter = localIdCounter = 0;
+  actionStateMatchingIndex = -1;
+  thenableIndexCounter = 0;
+  thenableState = prevThenableState;
+  for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; )
+    (didScheduleRenderPhaseUpdate = !1),
+      (actionStateCounter = localIdCounter = 0),
+      (actionStateMatchingIndex = -1),
+      (thenableIndexCounter = 0),
+      (numberOfReRenders += 1),
+      (workInProgressHook = null),
+      (request = Component(props, secondArg));
+  resetHooksState();
+  return request;
+}
+function finishFunctionComponent(
+  request,
+  task,
+  keyPath,
+  children,
+  hasId,
+  actionStateCount,
+  actionStateMatchingIndex
+) {
+  var didEmitActionStateMarkers = !1;
+  if (0 !== actionStateCount && null !== request.formState) {
+    var segment = task.blockedSegment;
+    if (null !== segment) {
+      didEmitActionStateMarkers = !0;
+      segment = segment.chunks;
+      for (var i = 0; i < actionStateCount; i++)
+        i === actionStateMatchingIndex
+          ? segment.push(formStateMarkerIsMatching)
+          : segment.push(formStateMarkerIsNotMatching);
+    }
+  }
+  actionStateCount = task.keyPath;
+  task.keyPath = keyPath;
+  hasId
+    ? ((keyPath = task.treeContext),
+      (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+      renderNode(request, task, children, -1),
+      (task.treeContext = keyPath))
+    : didEmitActionStateMarkers
+      ? renderNode(request, task, children, -1)
+      : renderNodeDestructive(request, task, children, -1);
+  task.keyPath = actionStateCount;
+}
+function renderElement(request, task, keyPath, type, props, ref) {
+  if ("function" === typeof type)
+    if (type.prototype && type.prototype.isReactComponent) {
+      var newProps = props;
+      if ("ref" in props) {
+        newProps = {};
+        for (var propName in props)
+          "ref" !== propName && (newProps[propName] = props[propName]);
+      }
+      var defaultProps = type.defaultProps;
+      if (defaultProps) {
+        newProps === props && (newProps = assign({}, newProps, props));
+        for (var propName$33 in defaultProps)
+          void 0 === newProps[propName$33] &&
+            (newProps[propName$33] = defaultProps[propName$33]);
+      }
+      props = newProps;
+      newProps = emptyContextObject;
+      defaultProps = type.contextType;
+      "object" === typeof defaultProps &&
+        null !== defaultProps &&
+        (newProps = defaultProps._currentValue);
+      newProps = new type(props, newProps);
+      var initialState = void 0 !== newProps.state ? newProps.state : null;
+      newProps.updater = classComponentUpdater;
+      newProps.props = props;
+      newProps.state = initialState;
+      defaultProps = { queue: [], replace: !1 };
+      newProps._reactInternals = defaultProps;
+      ref = type.contextType;
+      newProps.context =
+        "object" === typeof ref && null !== ref
+          ? ref._currentValue
+          : emptyContextObject;
+      ref = type.getDerivedStateFromProps;
+      "function" === typeof ref &&
+        ((ref = ref(props, initialState)),
+        (initialState =
+          null === ref || void 0 === ref
+            ? initialState
+            : assign({}, initialState, ref)),
+        (newProps.state = initialState));
+      if (
+        "function" !== typeof type.getDerivedStateFromProps &&
+        "function" !== typeof newProps.getSnapshotBeforeUpdate &&
+        ("function" === typeof newProps.UNSAFE_componentWillMount ||
+          "function" === typeof newProps.componentWillMount)
+      )
+        if (
+          ((type = newProps.state),
+          "function" === typeof newProps.componentWillMount &&
+            newProps.componentWillMount(),
+          "function" === typeof newProps.UNSAFE_componentWillMount &&
+            newProps.UNSAFE_componentWillMount(),
+          type !== newProps.state &&
+            classComponentUpdater.enqueueReplaceState(
+              newProps,
+              newProps.state,
+              null
+            ),
+          null !== defaultProps.queue && 0 < defaultProps.queue.length)
+        )
+          if (
+            ((type = defaultProps.queue),
+            (ref = defaultProps.replace),
+            (defaultProps.queue = null),
+            (defaultProps.replace = !1),
+            ref && 1 === type.length)
+          )
+            newProps.state = type[0];
+          else {
+            defaultProps = ref ? type[0] : newProps.state;
+            initialState = !0;
+            for (ref = ref ? 1 : 0; ref < type.length; ref++)
+              (propName$33 = type[ref]),
+                (propName$33 =
+                  "function" === typeof propName$33
+                    ? propName$33.call(newProps, defaultProps, props, void 0)
+                    : propName$33),
+                null != propName$33 &&
+                  (initialState
+                    ? ((initialState = !1),
+                      (defaultProps = assign({}, defaultProps, propName$33)))
+                    : assign(defaultProps, propName$33));
+            newProps.state = defaultProps;
+          }
+        else defaultProps.queue = null;
+      type = newProps.render();
+      if (12 === request.status) throw null;
+      props = task.keyPath;
+      task.keyPath = keyPath;
+      renderNodeDestructive(request, task, type, -1);
+      task.keyPath = props;
+    } else {
+      type = renderWithHooks(request, task, keyPath, type, props, void 0);
+      if (12 === request.status) throw null;
+      finishFunctionComponent(
+        request,
+        task,
+        keyPath,
+        type,
+        0 !== localIdCounter,
+        actionStateCounter,
+        actionStateMatchingIndex
+      );
+    }
+  else if ("string" === typeof type)
+    if (((newProps = task.blockedSegment), null === newProps))
+      (newProps = props.children),
+        (defaultProps = task.formatContext),
+        (initialState = task.keyPath),
+        (task.formatContext = getChildFormatContext(defaultProps, type, props)),
+        (task.keyPath = keyPath),
+        renderNode(request, task, newProps, -1),
+        (task.formatContext = defaultProps),
+        (task.keyPath = initialState);
+    else {
+      ref = pushStartInstance(
+        newProps.chunks,
+        type,
+        props,
+        request.resumableState,
+        request.renderState,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.formatContext,
+        newProps.lastPushedText,
+        task.isFallback
+      );
+      newProps.lastPushedText = !1;
+      defaultProps = task.formatContext;
+      initialState = task.keyPath;
+      task.keyPath = keyPath;
+      3 ===
+      (task.formatContext = getChildFormatContext(defaultProps, type, props))
+        .insertionMode
+        ? ((keyPath = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          )),
+          newProps.preambleChildren.push(keyPath),
+          (keyPath = createRenderTask(
+            request,
+            null,
+            ref,
+            -1,
+            task.blockedBoundary,
+            keyPath,
+            task.blockedPreamble,
+            task.hoistableState,
+            request.abortableTasks,
+            task.keyPath,
+            task.formatContext,
+            task.context,
+            task.treeContext,
+            task.componentStack,
+            task.isFallback
+          )),
+          pushComponentStack(keyPath),
+          request.pingedTasks.push(keyPath))
+        : renderNode(request, task, ref, -1);
+      task.formatContext = defaultProps;
+      task.keyPath = initialState;
+      a: {
+        task = newProps.chunks;
+        request = request.resumableState;
+        switch (type) {
+          case "title":
+          case "style":
+          case "script":
+          case "area":
+          case "base":
+          case "br":
+          case "col":
+          case "embed":
+          case "hr":
+          case "img":
+          case "input":
+          case "keygen":
+          case "link":
+          case "meta":
+          case "param":
+          case "source":
+          case "track":
+          case "wbr":
+            break a;
+          case "body":
+            if (1 >= defaultProps.insertionMode) {
+              request.hasBody = !0;
+              break a;
+            }
+            break;
+          case "html":
+            if (0 === defaultProps.insertionMode) {
+              request.hasHtml = !0;
+              break a;
+            }
+            break;
+          case "head":
+            if (1 >= defaultProps.insertionMode) break a;
+        }
+        task.push(endChunkForTag(type));
+      }
+      newProps.lastPushedText = !1;
+    }
+  else {
+    switch (type) {
+      case REACT_LEGACY_HIDDEN_TYPE:
+      case REACT_STRICT_MODE_TYPE:
+      case REACT_PROFILER_TYPE:
+      case REACT_FRAGMENT_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_ACTIVITY_TYPE:
+        "hidden" !== props.mode &&
+          ((type = task.keyPath),
+          (task.keyPath = keyPath),
+          renderNodeDestructive(request, task, props.children, -1),
+          (task.keyPath = type));
+        return;
+      case REACT_SUSPENSE_LIST_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_VIEW_TRANSITION_TYPE:
+      case REACT_SCOPE_TYPE:
+        throw Error("ReactDOMServer does not yet support scope components.");
+      case REACT_SUSPENSE_TYPE:
+        a: if (null !== task.replay) {
+          type = task.keyPath;
+          task.keyPath = keyPath;
+          keyPath = props.children;
+          try {
+            renderNode(request, task, keyPath, -1);
+          } finally {
+            task.keyPath = type;
+          }
+        } else {
+          type = task.keyPath;
+          var parentBoundary = task.blockedBoundary;
+          ref = task.blockedPreamble;
+          var parentHoistableState = task.hoistableState;
+          propName$33 = task.blockedSegment;
+          propName = props.fallback;
+          props = props.children;
+          var fallbackAbortSet = new Set();
+          var newBoundary =
+            2 > task.formatContext.insertionMode
+              ? createSuspenseBoundary(
+                  request,
+                  fallbackAbortSet,
+                  createPreambleState(),
+                  createPreambleState()
+                )
+              : createSuspenseBoundary(request, fallbackAbortSet, null, null);
+          null !== request.trackedPostpones &&
+            (newBoundary.trackedContentKeyPath = keyPath);
+          var boundarySegment = createPendingSegment(
+            request,
+            propName$33.chunks.length,
+            newBoundary,
+            task.formatContext,
+            !1,
+            !1
+          );
+          propName$33.children.push(boundarySegment);
+          propName$33.lastPushedText = !1;
+          var contentRootSegment = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          );
+          contentRootSegment.parentFlushed = !0;
+          if (null !== request.trackedPostpones) {
+            newProps = [keyPath[0], "Suspense Fallback", keyPath[2]];
+            defaultProps = [newProps[1], newProps[2], [], null];
+            request.trackedPostpones.workingMap.set(newProps, defaultProps);
+            newBoundary.trackedFallbackNode = defaultProps;
+            task.blockedSegment = boundarySegment;
+            task.blockedPreamble = newBoundary.fallbackPreamble;
+            task.keyPath = newProps;
+            boundarySegment.status = 6;
+            try {
+              renderNode(request, task, propName, -1),
+                boundarySegment.lastPushedText &&
+                  boundarySegment.textEmbedded &&
+                  boundarySegment.chunks.push(textSeparator),
+                (boundarySegment.status = 1);
+            } catch (thrownValue) {
+              throw (
+                ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                thrownValue)
+              );
+            } finally {
+              (task.blockedSegment = propName$33),
+                (task.blockedPreamble = ref),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              props,
+              -1,
+              newBoundary,
+              contentRootSegment,
+              newBoundary.contentPreamble,
+              newBoundary.contentState,
+              task.abortSet,
+              keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          } else {
+            task.blockedBoundary = newBoundary;
+            task.blockedPreamble = newBoundary.contentPreamble;
+            task.hoistableState = newBoundary.contentState;
+            task.blockedSegment = contentRootSegment;
+            task.keyPath = keyPath;
+            contentRootSegment.status = 6;
+            try {
+              if (
+                (renderNode(request, task, props, -1),
+                contentRootSegment.lastPushedText &&
+                  contentRootSegment.textEmbedded &&
+                  contentRootSegment.chunks.push(textSeparator),
+                (contentRootSegment.status = 1),
+                queueCompletedSegment(newBoundary, contentRootSegment),
+                0 === newBoundary.pendingTasks && 0 === newBoundary.status)
+              ) {
+                newBoundary.status = 1;
+                0 === request.pendingRootTasks &&
+                  task.blockedPreamble &&
+                  preparePreamble(request);
+                break a;
+              }
+            } catch (thrownValue$28) {
+              (newBoundary.status = 4),
+                12 === request.status
+                  ? ((contentRootSegment.status = 3),
+                    (newProps = request.fatalError))
+                  : ((contentRootSegment.status = 4),
+                    (newProps = thrownValue$28)),
+                (defaultProps = getThrownInfo(task.componentStack)),
+                (initialState = logRecoverableError(
+                  request,
+                  newProps,
+                  defaultProps
+                )),
+                (newBoundary.errorDigest = initialState),
+                untrackBoundary(request, newBoundary);
+            } finally {
+              (task.blockedBoundary = parentBoundary),
+                (task.blockedPreamble = ref),
+                (task.hoistableState = parentHoistableState),
+                (task.blockedSegment = propName$33),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              propName,
+              -1,
+              parentBoundary,
+              boundarySegment,
+              newBoundary.fallbackPreamble,
+              newBoundary.fallbackState,
+              fallbackAbortSet,
+              [keyPath[0], "Suspense Fallback", keyPath[2]],
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              !0
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          }
+        }
+        return;
+    }
+    if ("object" === typeof type && null !== type)
+      switch (type.$$typeof) {
+        case REACT_FORWARD_REF_TYPE:
+          if ("ref" in props)
+            for (newBoundary in ((newProps = {}), props))
+              "ref" !== newBoundary &&
+                (newProps[newBoundary] = props[newBoundary]);
+          else newProps = props;
+          type = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type.render,
+            newProps,
+            ref
+          );
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            type,
+            0 !== localIdCounter,
+            actionStateCounter,
+            actionStateMatchingIndex
+          );
+          return;
+        case REACT_MEMO_TYPE:
+          renderElement(request, task, keyPath, type.type, props, ref);
+          return;
+        case REACT_PROVIDER_TYPE:
+        case REACT_CONTEXT_TYPE:
+          defaultProps = props.children;
+          newProps = task.keyPath;
+          props = props.value;
+          initialState = type._currentValue;
+          type._currentValue = props;
+          ref = currentActiveSnapshot;
+          currentActiveSnapshot = type = {
+            parent: ref,
+            depth: null === ref ? 0 : ref.depth + 1,
+            context: type,
+            parentValue: initialState,
+            value: props
+          };
+          task.context = type;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, defaultProps, -1);
+          request = currentActiveSnapshot;
+          if (null === request)
+            throw Error(
+              "Tried to pop a Context at the root of the app. This is a bug in React."
+            );
+          request.context._currentValue = request.parentValue;
+          request = currentActiveSnapshot = request.parent;
+          task.context = request;
+          task.keyPath = newProps;
+          return;
+        case REACT_CONSUMER_TYPE:
+          props = props.children;
+          type = props(type._context._currentValue);
+          props = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, type, -1);
+          task.keyPath = props;
+          return;
+        case REACT_LAZY_TYPE:
+          newProps = type._init;
+          type = newProps(type._payload);
+          if (12 === request.status) throw null;
+          renderElement(request, task, keyPath, type, props, ref);
+          return;
+      }
+    throw Error(
+      "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+        ((null == type ? type : typeof type) + ".")
+    );
+  }
+}
+function resumeNode(request, task, segmentId, node, childIndex) {
+  var prevReplay = task.replay,
+    blockedBoundary = task.blockedBoundary,
+    resumedSegment = createPendingSegment(
+      request,
+      0,
+      null,
+      task.formatContext,
+      !1,
+      !1
+    );
+  resumedSegment.id = segmentId;
+  resumedSegment.parentFlushed = !0;
+  try {
+    (task.replay = null),
+      (task.blockedSegment = resumedSegment),
+      renderNode(request, task, node, childIndex),
+      (resumedSegment.status = 1),
+      null === blockedBoundary
+        ? (request.completedRootSegment = resumedSegment)
+        : (queueCompletedSegment(blockedBoundary, resumedSegment),
+          blockedBoundary.parentFlushed &&
+            request.partialBoundaries.push(blockedBoundary));
+  } finally {
+    (task.replay = prevReplay), (task.blockedSegment = null);
+  }
+}
+function renderNodeDestructive(request, task, node, childIndex) {
+  null !== task.replay && "number" === typeof task.replay.slots
+    ? resumeNode(request, task, task.replay.slots, node, childIndex)
+    : ((task.node = node),
+      (task.childIndex = childIndex),
+      (node = task.componentStack),
+      pushComponentStack(task),
+      retryNode(request, task),
+      (task.componentStack = node));
+}
+function retryNode(request, task) {
+  var node = task.node,
+    childIndex = task.childIndex;
+  if (null !== node) {
+    if ("object" === typeof node) {
+      switch (node.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          var type = node.type,
+            key = node.key,
+            props = node.props;
+          node = props.ref;
+          var ref = void 0 !== node ? node : null,
+            name = getComponentNameFromType(type),
+            keyOrIndex =
+              null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+          key = [task.keyPath, name, keyOrIndex];
+          if (null !== task.replay)
+            a: {
+              var replay = task.replay;
+              childIndex = replay.nodes;
+              for (node = 0; node < childIndex.length; node++) {
+                var node$jscomp$0 = childIndex[node];
+                if (keyOrIndex === node$jscomp$0[1]) {
+                  if (4 === node$jscomp$0.length) {
+                    if (null !== name && name !== node$jscomp$0[0])
+                      throw Error(
+                        "Expected the resume to render <" +
+                          node$jscomp$0[0] +
+                          "> in this slot but instead it rendered <" +
+                          name +
+                          ">. The tree doesn't match so React will fallback to client rendering."
+                      );
+                    var childNodes = node$jscomp$0[2];
+                    name = node$jscomp$0[3];
+                    keyOrIndex = task.node;
+                    task.replay = {
+                      nodes: childNodes,
+                      slots: name,
+                      pendingTasks: 1
+                    };
+                    try {
+                      renderElement(request, task, key, type, props, ref);
+                      if (
+                        1 === task.replay.pendingTasks &&
+                        0 < task.replay.nodes.length
+                      )
+                        throw Error(
+                          "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                        );
+                      task.replay.pendingTasks--;
+                    } catch (x) {
+                      if (
+                        "object" === typeof x &&
+                        null !== x &&
+                        (x === SuspenseException ||
+                          "function" === typeof x.then)
+                      )
+                        throw (
+                          (task.node === keyOrIndex && (task.replay = replay),
+                          x)
+                        );
+                      task.replay.pendingTasks--;
+                      props = getThrownInfo(task.componentStack);
+                      key = task.blockedBoundary;
+                      type = x;
+                      props = logRecoverableError(request, type, props);
+                      abortRemainingReplayNodes(
+                        request,
+                        key,
+                        childNodes,
+                        name,
+                        type,
+                        props
+                      );
+                    }
+                    task.replay = replay;
+                  } else {
+                    if (type !== REACT_SUSPENSE_TYPE)
+                      throw Error(
+                        "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+                          (getComponentNameFromType(type) || "Unknown") +
+                          ">. The tree doesn't match so React will fallback to client rendering."
+                      );
+                    b: {
+                      replay = void 0;
+                      type = node$jscomp$0[5];
+                      ref = node$jscomp$0[2];
+                      name = node$jscomp$0[3];
+                      keyOrIndex =
+                        null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2];
+                      node$jscomp$0 =
+                        null === node$jscomp$0[4] ? null : node$jscomp$0[4][3];
+                      var prevKeyPath = task.keyPath,
+                        previousReplaySet = task.replay,
+                        parentBoundary = task.blockedBoundary,
+                        parentHoistableState = task.hoistableState,
+                        content = props.children,
+                        fallback = props.fallback,
+                        fallbackAbortSet = new Set();
+                      props =
+                        2 > task.formatContext.insertionMode
+                          ? createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              createPreambleState(),
+                              createPreambleState()
+                            )
+                          : createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              null,
+                              null
+                            );
+                      props.parentFlushed = !0;
+                      props.rootSegmentID = type;
+                      task.blockedBoundary = props;
+                      task.hoistableState = props.contentState;
+                      task.keyPath = key;
+                      task.replay = {
+                        nodes: ref,
+                        slots: name,
+                        pendingTasks: 1
+                      };
+                      try {
+                        renderNode(request, task, content, -1);
+                        if (
+                          1 === task.replay.pendingTasks &&
+                          0 < task.replay.nodes.length
+                        )
+                          throw Error(
+                            "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                          );
+                        task.replay.pendingTasks--;
+                        if (0 === props.pendingTasks && 0 === props.status) {
+                          props.status = 1;
+                          request.completedBoundaries.push(props);
+                          break b;
+                        }
+                      } catch (error) {
+                        (props.status = 4),
+                          (childNodes = getThrownInfo(task.componentStack)),
+                          (replay = logRecoverableError(
+                            request,
+                            error,
+                            childNodes
+                          )),
+                          (props.errorDigest = replay),
+                          task.replay.pendingTasks--,
+                          request.clientRenderedBoundaries.push(props);
+                      } finally {
+                        (task.blockedBoundary = parentBoundary),
+                          (task.hoistableState = parentHoistableState),
+                          (task.replay = previousReplaySet),
+                          (task.keyPath = prevKeyPath);
+                      }
+                      task = createReplayTask(
+                        request,
+                        null,
+                        {
+                          nodes: keyOrIndex,
+                          slots: node$jscomp$0,
+                          pendingTasks: 0
+                        },
+                        fallback,
+                        -1,
+                        parentBoundary,
+                        props.fallbackState,
+                        fallbackAbortSet,
+                        [key[0], "Suspense Fallback", key[2]],
+                        task.formatContext,
+                        task.context,
+                        task.treeContext,
+                        task.componentStack,
+                        !0
+                      );
+                      pushComponentStack(task);
+                      request.pingedTasks.push(task);
+                    }
+                  }
+                  childIndex.splice(node, 1);
+                  break a;
+                }
+              }
+            }
+          else renderElement(request, task, key, type, props, ref);
+          return;
+        case REACT_PORTAL_TYPE:
+          throw Error(
+            "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+          );
+        case REACT_LAZY_TYPE:
+          childNodes = node._init;
+          node = childNodes(node._payload);
+          if (12 === request.status) throw null;
+          renderNodeDestructive(request, task, node, childIndex);
+          return;
+      }
+      if (isArrayImpl(node)) {
+        renderChildrenArray(request, task, node, childIndex);
+        return;
+      }
+      null === node || "object" !== typeof node
+        ? (childNodes = null)
+        : ((childNodes =
+            (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+            node["@@iterator"]),
+          (childNodes = "function" === typeof childNodes ? childNodes : null));
+      if (childNodes && (childNodes = childNodes.call(node))) {
+        node = childNodes.next();
+        if (!node.done) {
+          props = [];
+          do props.push(node.value), (node = childNodes.next());
+          while (!node.done);
+          renderChildrenArray(request, task, props, childIndex);
+        }
+        return;
+      }
+      if ("function" === typeof node.then)
+        return (
+          (task.thenableState = null),
+          renderNodeDestructive(request, task, unwrapThenable(node), childIndex)
+        );
+      if (node.$$typeof === REACT_CONTEXT_TYPE)
+        return renderNodeDestructive(
+          request,
+          task,
+          node._currentValue,
+          childIndex
+        );
+      childIndex = Object.prototype.toString.call(node);
+      throw Error(
+        "Objects are not valid as a React child (found: " +
+          ("[object Object]" === childIndex
+            ? "object with keys {" + Object.keys(node).join(", ") + "}"
+            : childIndex) +
+          "). If you meant to render a collection of children, use an array instead."
+      );
+    }
+    if ("string" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+    else if ("number" === typeof node || "bigint" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            "" + node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+  }
+}
+function renderChildrenArray(request, task, children, childIndex) {
+  var prevKeyPath = task.keyPath;
+  if (
+    -1 !== childIndex &&
+    ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+    null !== task.replay)
+  ) {
+    for (
+      var replay = task.replay, replayNodes = replay.nodes, j = 0;
+      j < replayNodes.length;
+      j++
+    ) {
+      var node = replayNodes[j];
+      if (node[1] === childIndex) {
+        childIndex = node[2];
+        node = node[3];
+        task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+        try {
+          renderChildrenArray(request, task, children, -1);
+          if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length)
+            throw Error(
+              "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+            );
+          task.replay.pendingTasks--;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            (x === SuspenseException || "function" === typeof x.then)
+          )
+            throw x;
+          task.replay.pendingTasks--;
+          children = getThrownInfo(task.componentStack);
+          var boundary = task.blockedBoundary,
+            error = x;
+          children = logRecoverableError(request, error, children);
+          abortRemainingReplayNodes(
+            request,
+            boundary,
+            childIndex,
+            node,
+            error,
+            children
+          );
+        }
+        task.replay = replay;
+        replayNodes.splice(j, 1);
+        break;
+      }
+    }
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  replay = task.treeContext;
+  replayNodes = children.length;
+  if (
+    null !== task.replay &&
+    ((j = task.replay.slots), null !== j && "object" === typeof j)
+  ) {
+    for (childIndex = 0; childIndex < replayNodes; childIndex++)
+      (node = children[childIndex]),
+        (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)),
+        (boundary = j[childIndex]),
+        "number" === typeof boundary
+          ? (resumeNode(request, task, boundary, node, childIndex),
+            delete j[childIndex])
+          : renderNode(request, task, node, childIndex);
+    task.treeContext = replay;
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  for (j = 0; j < replayNodes; j++)
+    (childIndex = children[j]),
+      (task.treeContext = pushTreeContext(replay, replayNodes, j)),
+      renderNode(request, task, childIndex, j);
+  task.treeContext = replay;
+  task.keyPath = prevKeyPath;
+}
+function untrackBoundary(request, boundary) {
+  request = request.trackedPostpones;
+  null !== request &&
+    ((boundary = boundary.trackedContentKeyPath),
+    null !== boundary &&
+      ((boundary = request.workingMap.get(boundary)),
+      void 0 !== boundary &&
+        ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+}
+function spawnNewSuspendedReplayTask(request, task, thenableState) {
+  return createReplayTask(
+    request,
+    thenableState,
+    task.replay,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function spawnNewSuspendedRenderTask(request, task, thenableState) {
+  var segment = task.blockedSegment,
+    newSegment = createPendingSegment(
+      request,
+      segment.chunks.length,
+      null,
+      task.formatContext,
+      segment.lastPushedText,
+      !0
+    );
+  segment.children.push(newSegment);
+  segment.lastPushedText = !1;
+  return createRenderTask(
+    request,
+    thenableState,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    newSegment,
+    task.blockedPreamble,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function renderNode(request, task, node, childIndex) {
+  var previousFormatContext = task.formatContext,
+    previousContext = task.context,
+    previousKeyPath = task.keyPath,
+    previousTreeContext = task.treeContext,
+    previousComponentStack = task.componentStack,
+    segment = task.blockedSegment;
+  if (null === segment)
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue) {
+      if (
+        (resetHooksState(),
+        (node =
+          thrownValue === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedReplayTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedReplayTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  else {
+    var childrenLength = segment.children.length,
+      chunkLength = segment.chunks.length;
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue$48) {
+      if (
+        (resetHooksState(),
+        (segment.children.length = childrenLength),
+        (segment.chunks.length = chunkLength),
+        (node =
+          thrownValue$48 === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue$48),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedRenderTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedRenderTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  }
+  task.formatContext = previousFormatContext;
+  task.context = previousContext;
+  task.keyPath = previousKeyPath;
+  task.treeContext = previousTreeContext;
+  switchContext(previousContext);
+  throw node;
+}
+function abortTaskSoft(task) {
+  var boundary = task.blockedBoundary;
+  task = task.blockedSegment;
+  null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+}
+function abortRemainingReplayNodes(
+  request$jscomp$0,
+  boundary,
+  nodes,
+  slots,
+  error,
+  errorDigest$jscomp$0
+) {
+  for (var i = 0; i < nodes.length; i++) {
+    var node = nodes[i];
+    if (4 === node.length)
+      abortRemainingReplayNodes(
+        request$jscomp$0,
+        boundary,
+        node[2],
+        node[3],
+        error,
+        errorDigest$jscomp$0
+      );
+    else {
+      node = node[5];
+      var request = request$jscomp$0,
+        errorDigest = errorDigest$jscomp$0,
+        resumedBoundary = createSuspenseBoundary(
+          request,
+          new Set(),
+          null,
+          null
+        );
+      resumedBoundary.parentFlushed = !0;
+      resumedBoundary.rootSegmentID = node;
+      resumedBoundary.status = 4;
+      resumedBoundary.errorDigest = errorDigest;
+      resumedBoundary.parentFlushed &&
+        request.clientRenderedBoundaries.push(resumedBoundary);
+    }
+  }
+  nodes.length = 0;
+  if (null !== slots) {
+    if (null === boundary)
+      throw Error(
+        "We should not have any resumable nodes in the shell. This is a bug in React."
+      );
+    4 !== boundary.status &&
+      ((boundary.status = 4),
+      (boundary.errorDigest = errorDigest$jscomp$0),
+      boundary.parentFlushed &&
+        request$jscomp$0.clientRenderedBoundaries.push(boundary));
+    if ("object" === typeof slots) for (var index in slots) delete slots[index];
+  }
+}
+function abortTask(task, request, error) {
+  var boundary = task.blockedBoundary,
+    segment = task.blockedSegment;
+  if (null !== segment) {
+    if (6 === segment.status) return;
+    segment.status = 3;
+  }
+  segment = getThrownInfo(task.componentStack);
+  if (null === boundary) {
+    if (13 !== request.status && 14 !== request.status) {
+      boundary = task.replay;
+      if (null === boundary) {
+        logRecoverableError(request, error, segment);
+        fatalError(request, error);
+        return;
+      }
+      boundary.pendingTasks--;
+      0 === boundary.pendingTasks &&
+        0 < boundary.nodes.length &&
+        ((task = logRecoverableError(request, error, segment)),
+        abortRemainingReplayNodes(
+          request,
+          null,
+          boundary.nodes,
+          boundary.slots,
+          error,
+          task
+        ));
+      request.pendingRootTasks--;
+      0 === request.pendingRootTasks && completeShell(request);
+    }
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        ((boundary.status = 4),
+        (task = logRecoverableError(request, error, segment)),
+        (boundary.status = 4),
+        (boundary.errorDigest = task),
+        untrackBoundary(request, boundary),
+        boundary.parentFlushed &&
+          request.clientRenderedBoundaries.push(boundary)),
+      boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+        return abortTask(fallbackTask, request, error);
+      }),
+      boundary.fallbackAbortableTasks.clear();
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function safelyEmitEarlyPreloads(request, shellComplete) {
+  try {
+    var renderState = request.renderState,
+      onHeaders = renderState.onHeaders;
+    if (onHeaders) {
+      var headers = renderState.headers;
+      if (headers) {
+        renderState.headers = null;
+        var linkHeader = headers.preconnects;
+        headers.fontPreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.fontPreloads));
+        headers.highImagePreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.highImagePreloads));
+        if (!shellComplete) {
+          var queueIter = renderState.styles.values(),
+            queueStep = queueIter.next();
+          b: for (
+            ;
+            0 < headers.remainingCapacity && !queueStep.done;
+            queueStep = queueIter.next()
+          )
+            for (
+              var sheetIter = queueStep.value.sheets.values(),
+                sheetStep = sheetIter.next();
+              0 < headers.remainingCapacity && !sheetStep.done;
+              sheetStep = sheetIter.next()
+            ) {
+              var sheet = sheetStep.value,
+                props = sheet.props,
+                key = props.href,
+                props$jscomp$0 = sheet.props,
+                header = getPreloadAsHeader(props$jscomp$0.href, "style", {
+                  crossOrigin: props$jscomp$0.crossOrigin,
+                  integrity: props$jscomp$0.integrity,
+                  nonce: props$jscomp$0.nonce,
+                  type: props$jscomp$0.type,
+                  fetchPriority: props$jscomp$0.fetchPriority,
+                  referrerPolicy: props$jscomp$0.referrerPolicy,
+                  media: props$jscomp$0.media
+                });
+              if (0 <= (headers.remainingCapacity -= header.length + 2))
+                (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                  linkHeader && (linkHeader += ", "),
+                  (linkHeader += header),
+                  (renderState.resets.style[key] =
+                    "string" === typeof props.crossOrigin ||
+                    "string" === typeof props.integrity
+                      ? [props.crossOrigin, props.integrity]
+                      : PRELOAD_NO_CREDS);
+              else break b;
+            }
+        }
+        linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+      }
+    }
+  } catch (error) {
+    logRecoverableError(request, error, {});
+  }
+}
+function completeShell(request) {
+  null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+  null === request.trackedPostpones && preparePreamble(request);
+  request.onShellError = noop;
+  request = request.onShellReady;
+  request();
+}
+function completeAll(request) {
+  safelyEmitEarlyPreloads(
+    request,
+    null === request.trackedPostpones
+      ? !0
+      : null === request.completedRootSegment ||
+          5 !== request.completedRootSegment.status
+  );
+  preparePreamble(request);
+  request = request.onAllReady;
+  request();
+}
+function queueCompletedSegment(boundary, segment) {
+  if (
+    0 === segment.chunks.length &&
+    1 === segment.children.length &&
+    null === segment.children[0].boundary &&
+    -1 === segment.children[0].id
+  ) {
+    var childSegment = segment.children[0];
+    childSegment.id = segment.id;
+    childSegment.parentFlushed = !0;
+    1 === childSegment.status && queueCompletedSegment(boundary, childSegment);
+  } else boundary.completedSegments.push(segment);
+}
+function finishedTask(request, boundary, segment) {
+  if (null === boundary) {
+    if (null !== segment && segment.parentFlushed) {
+      if (null !== request.completedRootSegment)
+        throw Error(
+          "There can only be one root segment. This is a bug in React."
+        );
+      request.completedRootSegment = segment;
+    }
+    request.pendingRootTasks--;
+    0 === request.pendingRootTasks && completeShell(request);
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        (0 === boundary.pendingTasks
+          ? (0 === boundary.status && (boundary.status = 1),
+            null !== segment &&
+              segment.parentFlushed &&
+              1 === segment.status &&
+              queueCompletedSegment(boundary, segment),
+            boundary.parentFlushed &&
+              request.completedBoundaries.push(boundary),
+            1 === boundary.status &&
+              (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request),
+              boundary.fallbackAbortableTasks.clear(),
+              0 === request.pendingRootTasks &&
+                null === request.trackedPostpones &&
+                null !== boundary.contentPreamble &&
+                preparePreamble(request)))
+          : null !== segment &&
+            segment.parentFlushed &&
+            1 === segment.status &&
+            (queueCompletedSegment(boundary, segment),
+            1 === boundary.completedSegments.length &&
+              boundary.parentFlushed &&
+              request.partialBoundaries.push(boundary)));
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function performWork(request$jscomp$2) {
+  if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) {
+    var prevContext = currentActiveSnapshot,
+      prevDispatcher = ReactSharedInternals.H;
+    ReactSharedInternals.H = HooksDispatcher;
+    var prevAsyncDispatcher = ReactSharedInternals.A;
+    ReactSharedInternals.A = DefaultAsyncDispatcher;
+    var prevRequest = currentRequest;
+    currentRequest = request$jscomp$2;
+    var prevResumableState = currentResumableState;
+    currentResumableState = request$jscomp$2.resumableState;
+    try {
+      var pingedTasks = request$jscomp$2.pingedTasks,
+        i;
+      for (i = 0; i < pingedTasks.length; i++) {
+        var task = pingedTasks[i],
+          request = request$jscomp$2,
+          segment = task.blockedSegment;
+        if (null === segment) {
+          var request$jscomp$0 = request;
+          if (0 !== task.replay.pendingTasks) {
+            switchContext(task.context);
+            try {
+              "number" === typeof task.replay.slots
+                ? resumeNode(
+                    request$jscomp$0,
+                    task,
+                    task.replay.slots,
+                    task.node,
+                    task.childIndex
+                  )
+                : retryNode(request$jscomp$0, task);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+              task.abortSet.delete(task);
+              finishedTask(request$jscomp$0, task.blockedBoundary, null);
+            } catch (thrownValue) {
+              resetHooksState();
+              var x =
+                thrownValue === SuspenseException
+                  ? getSuspendedThenable()
+                  : thrownValue;
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                "function" === typeof x.then
+              ) {
+                var ping = task.ping;
+                x.then(ping, ping);
+                task.thenableState = getThenableStateAfterSuspending();
+              } else {
+                task.replay.pendingTasks--;
+                task.abortSet.delete(task);
+                var errorInfo = getThrownInfo(task.componentStack);
+                request = void 0;
+                var request$jscomp$1 = request$jscomp$0,
+                  boundary = task.blockedBoundary,
+                  error$jscomp$0 =
+                    12 === request$jscomp$0.status
+                      ? request$jscomp$0.fatalError
+                      : x,
+                  replayNodes = task.replay.nodes,
+                  resumeSlots = task.replay.slots;
+                request = logRecoverableError(
+                  request$jscomp$1,
+                  error$jscomp$0,
+                  errorInfo
+                );
+                abortRemainingReplayNodes(
+                  request$jscomp$1,
+                  boundary,
+                  replayNodes,
+                  resumeSlots,
+                  error$jscomp$0,
+                  request
+                );
+                request$jscomp$0.pendingRootTasks--;
+                0 === request$jscomp$0.pendingRootTasks &&
+                  completeShell(request$jscomp$0);
+                request$jscomp$0.allPendingTasks--;
+                0 === request$jscomp$0.allPendingTasks &&
+                  completeAll(request$jscomp$0);
+              }
+            } finally {
+            }
+          }
+        } else if (
+          ((request$jscomp$0 = void 0),
+          (request$jscomp$1 = segment),
+          0 === request$jscomp$1.status)
+        ) {
+          request$jscomp$1.status = 6;
+          switchContext(task.context);
+          var childrenLength = request$jscomp$1.children.length,
+            chunkLength = request$jscomp$1.chunks.length;
+          try {
+            retryNode(request, task),
+              request$jscomp$1.lastPushedText &&
+                request$jscomp$1.textEmbedded &&
+                request$jscomp$1.chunks.push(textSeparator),
+              task.abortSet.delete(task),
+              (request$jscomp$1.status = 1),
+              finishedTask(request, task.blockedBoundary, request$jscomp$1);
+          } catch (thrownValue) {
+            resetHooksState();
+            request$jscomp$1.children.length = childrenLength;
+            request$jscomp$1.chunks.length = chunkLength;
+            var x$jscomp$0 =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : 12 === request.status
+                  ? request.fatalError
+                  : thrownValue;
+            if (
+              "object" === typeof x$jscomp$0 &&
+              null !== x$jscomp$0 &&
+              "function" === typeof x$jscomp$0.then
+            ) {
+              request$jscomp$1.status = 0;
+              task.thenableState = getThenableStateAfterSuspending();
+              var ping$jscomp$0 = task.ping;
+              x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+            } else {
+              var errorInfo$jscomp$0 = getThrownInfo(task.componentStack);
+              task.abortSet.delete(task);
+              request$jscomp$1.status = 4;
+              var boundary$jscomp$0 = task.blockedBoundary;
+              request$jscomp$0 = logRecoverableError(
+                request,
+                x$jscomp$0,
+                errorInfo$jscomp$0
+              );
+              null === boundary$jscomp$0
+                ? fatalError(request, x$jscomp$0)
+                : (boundary$jscomp$0.pendingTasks--,
+                  4 !== boundary$jscomp$0.status &&
+                    ((boundary$jscomp$0.status = 4),
+                    (boundary$jscomp$0.errorDigest = request$jscomp$0),
+                    untrackBoundary(request, boundary$jscomp$0),
+                    boundary$jscomp$0.parentFlushed &&
+                      request.clientRenderedBoundaries.push(boundary$jscomp$0),
+                    0 === request.pendingRootTasks &&
+                      null === request.trackedPostpones &&
+                      null !== boundary$jscomp$0.contentPreamble &&
+                      preparePreamble(request)));
+              request.allPendingTasks--;
+              0 === request.allPendingTasks && completeAll(request);
+            }
+          } finally {
+          }
+        }
+      }
+      pingedTasks.splice(0, i);
+      null !== request$jscomp$2.destination &&
+        flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination);
+    } catch (error) {
+      logRecoverableError(request$jscomp$2, error, {}),
+        fatalError(request$jscomp$2, error);
+    } finally {
+      (currentResumableState = prevResumableState),
+        (ReactSharedInternals.H = prevDispatcher),
+        (ReactSharedInternals.A = prevAsyncDispatcher),
+        prevDispatcher === HooksDispatcher && switchContext(prevContext),
+        (currentRequest = prevRequest);
+    }
+  }
+}
+function preparePreambleFromSubtree(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  segment.preambleChildren.length &&
+    collectedPreambleSegments.push(segment.preambleChildren);
+  for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+    pendingPreambles =
+      preparePreambleFromSegment(
+        request,
+        segment.children[i],
+        collectedPreambleSegments
+      ) || pendingPreambles;
+  return pendingPreambles;
+}
+function preparePreambleFromSegment(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    );
+  var preamble = boundary.contentPreamble,
+    fallbackPreamble = boundary.fallbackPreamble;
+  if (null === preamble || null === fallbackPreamble) return !1;
+  switch (boundary.status) {
+    case 1:
+      hoistPreambleState(request.renderState, preamble);
+      segment = boundary.completedSegments[0];
+      if (!segment)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      return preparePreambleFromSubtree(
+        request,
+        segment,
+        collectedPreambleSegments
+      );
+    case 5:
+      if (null !== request.trackedPostpones) return !0;
+    case 4:
+      if (1 === segment.status)
+        return (
+          hoistPreambleState(request.renderState, fallbackPreamble),
+          preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          )
+        );
+    default:
+      return !0;
+  }
+}
+function preparePreamble(request) {
+  if (
+    request.completedRootSegment &&
+    null === request.completedPreambleSegments
+  ) {
+    var collectedPreambleSegments = [],
+      hasPendingPreambles = preparePreambleFromSegment(
+        request,
+        request.completedRootSegment,
+        collectedPreambleSegments
+      ),
+      preamble = request.renderState.preamble;
+    if (
+      !1 === hasPendingPreambles ||
+      (preamble.headChunks && preamble.bodyChunks)
+    )
+      request.completedPreambleSegments = collectedPreambleSegments;
+  }
+}
+function flushSubtree(request, destination, segment, hoistableState) {
+  segment.parentFlushed = !0;
+  switch (segment.status) {
+    case 0:
+      segment.id = request.nextSegmentId++;
+    case 5:
+      return (
+        (hoistableState = segment.id),
+        (segment.lastPushedText = !1),
+        (segment.textEmbedded = !1),
+        (request = request.renderState),
+        writeChunk(destination, placeholder1),
+        writeChunk(destination, request.placeholderPrefix),
+        (request = stringToChunk(hoistableState.toString(16))),
+        writeChunk(destination, request),
+        writeChunkAndReturn(destination, placeholder2)
+      );
+    case 1:
+      segment.status = 2;
+      var r = !0,
+        chunks = segment.chunks,
+        chunkIdx = 0;
+      segment = segment.children;
+      for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+        for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+          writeChunk(destination, chunks[chunkIdx]);
+        r = flushSegment(request, destination, r, hoistableState);
+      }
+      for (; chunkIdx < chunks.length - 1; chunkIdx++)
+        writeChunk(destination, chunks[chunkIdx]);
+      chunkIdx < chunks.length &&
+        (r = writeChunkAndReturn(destination, chunks[chunkIdx]));
+      return r;
+    default:
+      throw Error(
+        "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+      );
+  }
+}
+function flushSegment(request, destination, segment, hoistableState) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return flushSubtree(request, destination, segment, hoistableState);
+  boundary.parentFlushed = !0;
+  if (4 === boundary.status) {
+    var errorDigest = boundary.errorDigest;
+    writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);
+    writeChunk(destination, clientRenderedSuspenseBoundaryError1);
+    errorDigest &&
+      (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
+      writeChunk(destination, stringToChunk(escapeTextForBrowser(errorDigest))),
+      writeChunk(
+        destination,
+        clientRenderedSuspenseBoundaryErrorAttrInterstitial
+      ));
+    writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);
+    flushSubtree(request, destination, segment, hoistableState);
+    (request = boundary.fallbackPreamble) &&
+      writePreambleContribution(destination, request);
+    return writeChunkAndReturn(destination, endSuspenseBoundary);
+  }
+  if (1 !== boundary.status)
+    return (
+      0 === boundary.status &&
+        (boundary.rootSegmentID = request.nextSegmentId++),
+      0 < boundary.completedSegments.length &&
+        request.partialBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      hoistableState &&
+        ((boundary = boundary.fallbackState),
+        boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        boundary.stylesheets.forEach(
+          hoistStylesheetDependency,
+          hoistableState
+        )),
+      flushSubtree(request, destination, segment, hoistableState),
+      writeChunkAndReturn(destination, endSuspenseBoundary)
+    );
+  if (boundary.byteSize > request.progressiveChunkSize)
+    return (
+      (boundary.rootSegmentID = request.nextSegmentId++),
+      request.completedBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      flushSubtree(request, destination, segment, hoistableState),
+      writeChunkAndReturn(destination, endSuspenseBoundary)
+    );
+  hoistableState &&
+    ((segment = boundary.contentState),
+    segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+    segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+  writeChunkAndReturn(destination, startCompletedSuspenseBoundary);
+  segment = boundary.completedSegments;
+  if (1 !== segment.length)
+    throw Error(
+      "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+    );
+  flushSegment(request, destination, segment[0], hoistableState);
+  (request = boundary.contentPreamble) &&
+    writePreambleContribution(destination, request);
+  return writeChunkAndReturn(destination, endSuspenseBoundary);
+}
+function flushSegmentContainer(request, destination, segment, hoistableState) {
+  writeStartSegment(
+    destination,
+    request.renderState,
+    segment.parentFormatContext,
+    segment.id
+  );
+  flushSegment(request, destination, segment, hoistableState);
+  return writeEndSegment(destination, segment.parentFormatContext);
+}
+function flushCompletedBoundary(request, destination, boundary) {
+  for (
+    var completedSegments = boundary.completedSegments, i = 0;
+    i < completedSegments.length;
+    i++
+  )
+    flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      completedSegments[i]
+    );
+  completedSegments.length = 0;
+  writeHoistablesForBoundary(
+    destination,
+    boundary.contentState,
+    request.renderState
+  );
+  completedSegments = request.resumableState;
+  request = request.renderState;
+  i = boundary.rootSegmentID;
+  boundary = boundary.contentState;
+  var requiresStyleInsertion = request.stylesToHoist;
+  request.stylesToHoist = !1;
+  writeChunk(destination, request.startInlineScript);
+  requiresStyleInsertion
+    ? 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 10),
+        writeChunk(destination, completeBoundaryWithStylesScript1FullBoth))
+      : 0 === (completedSegments.instructions & 8)
+        ? ((completedSegments.instructions |= 8),
+          writeChunk(destination, completeBoundaryWithStylesScript1FullPartial))
+        : writeChunk(destination, completeBoundaryWithStylesScript1Partial)
+    : 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 2),
+        writeChunk(destination, completeBoundaryScript1Full))
+      : writeChunk(destination, completeBoundaryScript1Partial);
+  completedSegments = stringToChunk(i.toString(16));
+  writeChunk(destination, request.boundaryPrefix);
+  writeChunk(destination, completedSegments);
+  writeChunk(destination, completeBoundaryScript2);
+  writeChunk(destination, request.segmentPrefix);
+  writeChunk(destination, completedSegments);
+  requiresStyleInsertion
+    ? (writeChunk(destination, completeBoundaryScript3a),
+      writeStyleResourceDependenciesInJS(destination, boundary))
+    : writeChunk(destination, completeBoundaryScript3b);
+  boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd);
+  return writeBootstrap(destination, request) && boundary;
+}
+function flushPartiallyCompletedSegment(
+  request,
+  destination,
+  boundary,
+  segment
+) {
+  if (2 === segment.status) return !0;
+  var hoistableState = boundary.contentState,
+    segmentID = segment.id;
+  if (-1 === segmentID) {
+    if (-1 === (segment.id = boundary.rootSegmentID))
+      throw Error(
+        "A root segment ID must have been assigned by now. This is a bug in React."
+      );
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  }
+  if (segmentID === boundary.rootSegmentID)
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  flushSegmentContainer(request, destination, segment, hoistableState);
+  boundary = request.resumableState;
+  request = request.renderState;
+  writeChunk(destination, request.startInlineScript);
+  0 === (boundary.instructions & 1)
+    ? ((boundary.instructions |= 1),
+      writeChunk(destination, completeSegmentScript1Full))
+    : writeChunk(destination, completeSegmentScript1Partial);
+  writeChunk(destination, request.segmentPrefix);
+  segmentID = stringToChunk(segmentID.toString(16));
+  writeChunk(destination, segmentID);
+  writeChunk(destination, completeSegmentScript2);
+  writeChunk(destination, request.placeholderPrefix);
+  writeChunk(destination, segmentID);
+  destination = writeChunkAndReturn(destination, completeSegmentScriptEnd);
+  return destination;
+}
+function flushCompletedQueues(request, destination) {
+  currentView = new Uint8Array(2048);
+  writtenBytes = 0;
+  try {
+    if (!(0 < request.pendingRootTasks)) {
+      var i,
+        completedRootSegment = request.completedRootSegment;
+      if (null !== completedRootSegment) {
+        if (5 === completedRootSegment.status) return;
+        var completedPreambleSegments = request.completedPreambleSegments;
+        if (null === completedPreambleSegments) return;
+        var renderState = request.renderState,
+          preamble = renderState.preamble,
+          htmlChunks = preamble.htmlChunks,
+          headChunks = preamble.headChunks,
+          i$jscomp$0;
+        if (htmlChunks) {
+          for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+            writeChunk(destination, htmlChunks[i$jscomp$0]);
+          if (headChunks)
+            for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+              writeChunk(destination, headChunks[i$jscomp$0]);
+          else
+            writeChunk(destination, startChunkForTag("head")),
+              writeChunk(destination, endOfStartTag);
+        } else if (headChunks)
+          for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+            writeChunk(destination, headChunks[i$jscomp$0]);
+        var charsetChunks = renderState.charsetChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++)
+          writeChunk(destination, charsetChunks[i$jscomp$0]);
+        charsetChunks.length = 0;
+        renderState.preconnects.forEach(flushResource, destination);
+        renderState.preconnects.clear();
+        var viewportChunks = renderState.viewportChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++)
+          writeChunk(destination, viewportChunks[i$jscomp$0]);
+        viewportChunks.length = 0;
+        renderState.fontPreloads.forEach(flushResource, destination);
+        renderState.fontPreloads.clear();
+        renderState.highImagePreloads.forEach(flushResource, destination);
+        renderState.highImagePreloads.clear();
+        renderState.styles.forEach(flushStylesInPreamble, destination);
+        var importMapChunks = renderState.importMapChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++)
+          writeChunk(destination, importMapChunks[i$jscomp$0]);
+        importMapChunks.length = 0;
+        renderState.bootstrapScripts.forEach(flushResource, destination);
+        renderState.scripts.forEach(flushResource, destination);
+        renderState.scripts.clear();
+        renderState.bulkPreloads.forEach(flushResource, destination);
+        renderState.bulkPreloads.clear();
+        var hoistableChunks = renderState.hoistableChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++)
+          writeChunk(destination, hoistableChunks[i$jscomp$0]);
+        for (
+          renderState = hoistableChunks.length = 0;
+          renderState < completedPreambleSegments.length;
+          renderState++
+        ) {
+          var segments = completedPreambleSegments[renderState];
+          for (preamble = 0; preamble < segments.length; preamble++)
+            flushSegment(request, destination, segments[preamble], null);
+        }
+        var preamble$jscomp$0 = request.renderState.preamble,
+          headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+        (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) &&
+          writeChunk(destination, endChunkForTag("head"));
+        var bodyChunks = preamble$jscomp$0.bodyChunks;
+        if (bodyChunks)
+          for (
+            completedPreambleSegments = 0;
+            completedPreambleSegments < bodyChunks.length;
+            completedPreambleSegments++
+          )
+            writeChunk(destination, bodyChunks[completedPreambleSegments]);
+        flushSegment(request, destination, completedRootSegment, null);
+        request.completedRootSegment = null;
+        writeBootstrap(destination, request.renderState);
+      }
+      var renderState$jscomp$0 = request.renderState;
+      completedRootSegment = 0;
+      var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < viewportChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, viewportChunks$jscomp$0[completedRootSegment]);
+      viewportChunks$jscomp$0.length = 0;
+      renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+      renderState$jscomp$0.preconnects.clear();
+      renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.fontPreloads.clear();
+      renderState$jscomp$0.highImagePreloads.forEach(
+        flushResource,
+        destination
+      );
+      renderState$jscomp$0.highImagePreloads.clear();
+      renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+      renderState$jscomp$0.scripts.forEach(flushResource, destination);
+      renderState$jscomp$0.scripts.clear();
+      renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.bulkPreloads.clear();
+      var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < hoistableChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, hoistableChunks$jscomp$0[completedRootSegment]);
+      hoistableChunks$jscomp$0.length = 0;
+      var clientRenderedBoundaries = request.clientRenderedBoundaries;
+      for (i = 0; i < clientRenderedBoundaries.length; i++) {
+        var boundary = clientRenderedBoundaries[i];
+        renderState$jscomp$0 = destination;
+        var resumableState = request.resumableState,
+          renderState$jscomp$1 = request.renderState,
+          id = boundary.rootSegmentID,
+          errorDigest = boundary.errorDigest;
+        writeChunk(
+          renderState$jscomp$0,
+          renderState$jscomp$1.startInlineScript
+        );
+        0 === (resumableState.instructions & 4)
+          ? ((resumableState.instructions |= 4),
+            writeChunk(renderState$jscomp$0, clientRenderScript1Full))
+          : writeChunk(renderState$jscomp$0, clientRenderScript1Partial);
+        writeChunk(renderState$jscomp$0, renderState$jscomp$1.boundaryPrefix);
+        writeChunk(renderState$jscomp$0, stringToChunk(id.toString(16)));
+        writeChunk(renderState$jscomp$0, clientRenderScript1A);
+        errorDigest &&
+          (writeChunk(
+            renderState$jscomp$0,
+            clientRenderErrorScriptArgInterstitial
+          ),
+          writeChunk(
+            renderState$jscomp$0,
+            stringToChunk(
+              escapeJSStringsForInstructionScripts(errorDigest || "")
+            )
+          ));
+        var JSCompiler_inline_result = writeChunkAndReturn(
+          renderState$jscomp$0,
+          clientRenderScriptEnd
+        );
+        if (!JSCompiler_inline_result) {
+          request.destination = null;
+          i++;
+          clientRenderedBoundaries.splice(0, i);
+          return;
+        }
+      }
+      clientRenderedBoundaries.splice(0, i);
+      var completedBoundaries = request.completedBoundaries;
+      for (i = 0; i < completedBoundaries.length; i++)
+        if (
+          !flushCompletedBoundary(request, destination, completedBoundaries[i])
+        ) {
+          request.destination = null;
+          i++;
+          completedBoundaries.splice(0, i);
+          return;
+        }
+      completedBoundaries.splice(0, i);
+      completeWriting(destination);
+      currentView = new Uint8Array(2048);
+      writtenBytes = 0;
+      var partialBoundaries = request.partialBoundaries;
+      for (i = 0; i < partialBoundaries.length; i++) {
+        var boundary$51 = partialBoundaries[i];
+        a: {
+          clientRenderedBoundaries = request;
+          boundary = destination;
+          var completedSegments = boundary$51.completedSegments;
+          for (
+            JSCompiler_inline_result = 0;
+            JSCompiler_inline_result < completedSegments.length;
+            JSCompiler_inline_result++
+          )
+            if (
+              !flushPartiallyCompletedSegment(
+                clientRenderedBoundaries,
+                boundary,
+                boundary$51,
+                completedSegments[JSCompiler_inline_result]
+              )
+            ) {
+              JSCompiler_inline_result++;
+              completedSegments.splice(0, JSCompiler_inline_result);
+              var JSCompiler_inline_result$jscomp$0 = !1;
+              break a;
+            }
+          completedSegments.splice(0, JSCompiler_inline_result);
+          JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+            boundary,
+            boundary$51.contentState,
+            clientRenderedBoundaries.renderState
+          );
+        }
+        if (!JSCompiler_inline_result$jscomp$0) {
+          request.destination = null;
+          i++;
+          partialBoundaries.splice(0, i);
+          return;
+        }
+      }
+      partialBoundaries.splice(0, i);
+      var largeBoundaries = request.completedBoundaries;
+      for (i = 0; i < largeBoundaries.length; i++)
+        if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) {
+          request.destination = null;
+          i++;
+          largeBoundaries.splice(0, i);
+          return;
+        }
+      largeBoundaries.splice(0, i);
+    }
+  } finally {
+    0 === request.allPendingTasks &&
+    0 === request.pingedTasks.length &&
+    0 === request.clientRenderedBoundaries.length &&
+    0 === request.completedBoundaries.length
+      ? ((request.flushScheduled = !1),
+        (i = request.resumableState),
+        i.hasBody && writeChunk(destination, endChunkForTag("body")),
+        i.hasHtml && writeChunk(destination, endChunkForTag("html")),
+        completeWriting(destination),
+        (request.status = 14),
+        destination.close(),
+        (request.destination = null))
+      : completeWriting(destination);
+  }
+}
+function startWork(request) {
+  request.flushScheduled = null !== request.destination;
+  supportsRequestStorage
+    ? scheduleMicrotask(function () {
+        return requestStorage.run(request, performWork, request);
+      })
+    : scheduleMicrotask(function () {
+        return performWork(request);
+      });
+  setTimeout(function () {
+    10 === request.status && (request.status = 11);
+    null === request.trackedPostpones &&
+      (supportsRequestStorage
+        ? requestStorage.run(
+            request,
+            enqueueEarlyPreloadsAfterInitialWork,
+            request
+          )
+        : enqueueEarlyPreloadsAfterInitialWork(request));
+  }, 0);
+}
+function enqueueEarlyPreloadsAfterInitialWork(request) {
+  safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+}
+function enqueueFlush(request) {
+  !1 === request.flushScheduled &&
+    0 === request.pingedTasks.length &&
+    null !== request.destination &&
+    ((request.flushScheduled = !0),
+    setTimeout(function () {
+      var destination = request.destination;
+      destination
+        ? flushCompletedQueues(request, destination)
+        : (request.flushScheduled = !1);
+    }, 0));
+}
+function startFlowing(request, destination) {
+  if (13 === request.status)
+    (request.status = 14), closeWithError(destination, request.fatalError);
+  else if (14 !== request.status && null === request.destination) {
+    request.destination = destination;
+    try {
+      flushCompletedQueues(request, destination);
+    } catch (error) {
+      logRecoverableError(request, error, {}), fatalError(request, error);
+    }
+  }
+}
+function abort(request, reason) {
+  if (11 === request.status || 10 === request.status) request.status = 12;
+  try {
+    var abortableTasks = request.abortableTasks;
+    if (0 < abortableTasks.size) {
+      var error =
+        void 0 === reason
+          ? Error("The render was aborted by the server without a reason.")
+          : "object" === typeof reason &&
+              null !== reason &&
+              "function" === typeof reason.then
+            ? Error("The render was aborted by the server with a promise.")
+            : reason;
+      request.fatalError = error;
+      abortableTasks.forEach(function (task) {
+        return abortTask(task, request, error);
+      });
+      abortableTasks.clear();
+    }
+    null !== request.destination &&
+      flushCompletedQueues(request, request.destination);
+  } catch (error$53) {
+    logRecoverableError(request, error$53, {}), fatalError(request, error$53);
+  }
+}
+function ensureCorrectIsomorphicReactVersion() {
+  var isomorphicReactPackageVersion = React.version;
+  if ("19.1.1" !== isomorphicReactPackageVersion)
+    throw Error(
+      'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n  - react:      ' +
+        (isomorphicReactPackageVersion +
+          "\n  - react-dom:  19.1.1\nLearn more: https://react.dev/warnings/version-mismatch")
+    );
+}
+ensureCorrectIsomorphicReactVersion();
+ensureCorrectIsomorphicReactVersion();
+exports.prerender = function (children, options) {
+  return new Promise(function (resolve, reject) {
+    var onHeaders = options ? options.onHeaders : void 0,
+      onHeadersImpl;
+    onHeaders &&
+      (onHeadersImpl = function (headersDescriptor) {
+        onHeaders(new Headers(headersDescriptor));
+      });
+    var resources = createResumableState(
+        options ? options.identifierPrefix : void 0,
+        options ? options.unstable_externalRuntimeSrc : void 0,
+        options ? options.bootstrapScriptContent : void 0,
+        options ? options.bootstrapScripts : void 0,
+        options ? options.bootstrapModules : void 0
+      ),
+      request = createPrerenderRequest(
+        children,
+        resources,
+        createRenderState(
+          resources,
+          void 0,
+          options ? options.unstable_externalRuntimeSrc : void 0,
+          options ? options.importMap : void 0,
+          onHeadersImpl,
+          options ? options.maxHeadersLength : void 0
+        ),
+        createRootFormatContext(options ? options.namespaceURI : void 0),
+        options ? options.progressiveChunkSize : void 0,
+        options ? options.onError : void 0,
+        function () {
+          var result = {
+            prelude: new ReadableStream(
+              {
+                type: "bytes",
+                pull: function (controller) {
+                  startFlowing(request, controller);
+                },
+                cancel: function (reason) {
+                  request.destination = null;
+                  abort(request, reason);
+                }
+              },
+              { highWaterMark: 0 }
+            )
+          };
+          resolve(result);
+        },
+        void 0,
+        void 0,
+        reject,
+        options ? options.onPostpone : void 0
+      );
+    if (options && options.signal) {
+      var signal = options.signal;
+      if (signal.aborted) abort(request, signal.reason);
+      else {
+        var listener = function () {
+          abort(request, signal.reason);
+          signal.removeEventListener("abort", listener);
+        };
+        signal.addEventListener("abort", listener);
+      }
+    }
+    startWork(request);
+  });
+};
+exports.renderToReadableStream = function (children, options) {
+  return new Promise(function (resolve, reject) {
+    var onFatalError,
+      onAllReady,
+      allReady = new Promise(function (res, rej) {
+        onAllReady = res;
+        onFatalError = rej;
+      }),
+      onHeaders = options ? options.onHeaders : void 0,
+      onHeadersImpl;
+    onHeaders &&
+      (onHeadersImpl = function (headersDescriptor) {
+        onHeaders(new Headers(headersDescriptor));
+      });
+    var resumableState = createResumableState(
+        options ? options.identifierPrefix : void 0,
+        options ? options.unstable_externalRuntimeSrc : void 0,
+        options ? options.bootstrapScriptContent : void 0,
+        options ? options.bootstrapScripts : void 0,
+        options ? options.bootstrapModules : void 0
+      ),
+      request = createRequest(
+        children,
+        resumableState,
+        createRenderState(
+          resumableState,
+          options ? options.nonce : void 0,
+          options ? options.unstable_externalRuntimeSrc : void 0,
+          options ? options.importMap : void 0,
+          onHeadersImpl,
+          options ? options.maxHeadersLength : void 0
+        ),
+        createRootFormatContext(options ? options.namespaceURI : void 0),
+        options ? options.progressiveChunkSize : void 0,
+        options ? options.onError : void 0,
+        onAllReady,
+        function () {
+          var stream = new ReadableStream(
+            {
+              type: "bytes",
+              pull: function (controller) {
+                startFlowing(request, controller);
+              },
+              cancel: function (reason) {
+                request.destination = null;
+                abort(request, reason);
+              }
+            },
+            { highWaterMark: 0 }
+          );
+          stream.allReady = allReady;
+          resolve(stream);
+        },
+        function (error) {
+          allReady.catch(function () {});
+          reject(error);
+        },
+        onFatalError,
+        options ? options.onPostpone : void 0,
+        options ? options.formState : void 0
+      );
+    if (options && options.signal) {
+      var signal = options.signal;
+      if (signal.aborted) abort(request, signal.reason);
+      else {
+        var listener = function () {
+          abort(request, signal.reason);
+          signal.removeEventListener("abort", listener);
+        };
+        signal.addEventListener("abort", listener);
+      }
+    }
+    startWork(request);
+  });
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/cjs/react-dom-server.node.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server.node.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server.node.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9317 @@
+/**
+ * @license React
+ * react-dom-server.node.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function styleReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+    }
+    function scriptReplacer(match, prefix, s, suffix) {
+      return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+    }
+    function objectName(object) {
+      return Object.prototype.toString
+        .call(object)
+        .replace(/^\[object (.*)\]$/, function (m, p0) {
+          return p0;
+        });
+    }
+    function describeKeyForErrorMessage(key) {
+      var encodedKey = JSON.stringify(key);
+      return '"' + key + '"' === encodedKey ? key : encodedKey;
+    }
+    function describeValueForErrorMessage(value) {
+      switch (typeof value) {
+        case "string":
+          return JSON.stringify(
+            10 >= value.length ? value : value.slice(0, 10) + "..."
+          );
+        case "object":
+          if (isArrayImpl(value)) return "[...]";
+          if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG)
+            return "client";
+          value = objectName(value);
+          return "Object" === value ? "{...}" : value;
+        case "function":
+          return value.$$typeof === CLIENT_REFERENCE_TAG
+            ? "client"
+            : (value = value.displayName || value.name)
+              ? "function " + value
+              : "function";
+        default:
+          return String(value);
+      }
+    }
+    function describeElementType(type) {
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+      }
+      if ("object" === typeof type)
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeElementType(type.render);
+          case REACT_MEMO_TYPE:
+            return describeElementType(type.type);
+          case REACT_LAZY_TYPE:
+            var payload = type._payload;
+            type = type._init;
+            try {
+              return describeElementType(type(payload));
+            } catch (x) {}
+        }
+      return "";
+    }
+    function describeObjectForErrorMessage(objectOrArray, expandedName) {
+      var objKind = objectName(objectOrArray);
+      if ("Object" !== objKind && "Array" !== objKind) return objKind;
+      var start = -1,
+        length = 0;
+      if (isArrayImpl(objectOrArray))
+        if (jsxChildrenParents.has(objectOrArray)) {
+          var type = jsxChildrenParents.get(objectOrArray);
+          objKind = "<" + describeElementType(type) + ">";
+          for (var i = 0; i < objectOrArray.length; i++) {
+            var value = objectOrArray[i];
+            value =
+              "string" === typeof value
+                ? value
+                : "object" === typeof value && null !== value
+                  ? "{" + describeObjectForErrorMessage(value) + "}"
+                  : "{" + describeValueForErrorMessage(value) + "}";
+            "" + i === expandedName
+              ? ((start = objKind.length),
+                (length = value.length),
+                (objKind += value))
+              : (objKind =
+                  15 > value.length && 40 > objKind.length + value.length
+                    ? objKind + value
+                    : objKind + "{...}");
+          }
+          objKind += "</" + describeElementType(type) + ">";
+        } else {
+          objKind = "[";
+          for (type = 0; type < objectOrArray.length; type++)
+            0 < type && (objKind += ", "),
+              (i = objectOrArray[type]),
+              (i =
+                "object" === typeof i && null !== i
+                  ? describeObjectForErrorMessage(i)
+                  : describeValueForErrorMessage(i)),
+              "" + type === expandedName
+                ? ((start = objKind.length),
+                  (length = i.length),
+                  (objKind += i))
+                : (objKind =
+                    10 > i.length && 40 > objKind.length + i.length
+                      ? objKind + i
+                      : objKind + "...");
+          objKind += "]";
+        }
+      else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE)
+        objKind = "<" + describeElementType(objectOrArray.type) + "/>";
+      else {
+        if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return "client";
+        if (jsxPropsParents.has(objectOrArray)) {
+          objKind = jsxPropsParents.get(objectOrArray);
+          objKind = "<" + (describeElementType(objKind) || "...");
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++) {
+            objKind += " ";
+            value = type[i];
+            objKind += describeKeyForErrorMessage(value) + "=";
+            var _value2 = objectOrArray[value];
+            var _substr2 =
+              value === expandedName &&
+              "object" === typeof _value2 &&
+              null !== _value2
+                ? describeObjectForErrorMessage(_value2)
+                : describeValueForErrorMessage(_value2);
+            "string" !== typeof _value2 && (_substr2 = "{" + _substr2 + "}");
+            value === expandedName
+              ? ((start = objKind.length),
+                (length = _substr2.length),
+                (objKind += _substr2))
+              : (objKind =
+                  10 > _substr2.length && 40 > objKind.length + _substr2.length
+                    ? objKind + _substr2
+                    : objKind + "...");
+          }
+          objKind += ">";
+        } else {
+          objKind = "{";
+          type = Object.keys(objectOrArray);
+          for (i = 0; i < type.length; i++)
+            0 < i && (objKind += ", "),
+              (value = type[i]),
+              (objKind += describeKeyForErrorMessage(value) + ": "),
+              (_value2 = objectOrArray[value]),
+              (_value2 =
+                "object" === typeof _value2 && null !== _value2
+                  ? describeObjectForErrorMessage(_value2)
+                  : describeValueForErrorMessage(_value2)),
+              value === expandedName
+                ? ((start = objKind.length),
+                  (length = _value2.length),
+                  (objKind += _value2))
+                : (objKind =
+                    10 > _value2.length && 40 > objKind.length + _value2.length
+                      ? objKind + _value2
+                      : objKind + "...");
+          objKind += "}";
+        }
+      }
+      return void 0 === expandedName
+        ? objKind
+        : -1 < start && 0 < length
+          ? ((objectOrArray = " ".repeat(start) + "^".repeat(length)),
+            "\n  " + objKind + "\n  " + objectOrArray)
+          : "\n  " + objKind;
+    }
+    function flushBuffered(destination) {
+      "function" === typeof destination.flush && destination.flush();
+    }
+    function writeChunk(destination, chunk) {
+      if ("string" === typeof chunk) {
+        if (0 !== chunk.length)
+          if (2048 < 3 * chunk.length)
+            0 < writtenBytes &&
+              (writeToDestination(
+                destination,
+                currentView.subarray(0, writtenBytes)
+              ),
+              (currentView = new Uint8Array(2048)),
+              (writtenBytes = 0)),
+              writeToDestination(destination, chunk);
+          else {
+            var target = currentView;
+            0 < writtenBytes && (target = currentView.subarray(writtenBytes));
+            target = textEncoder.encodeInto(chunk, target);
+            var read = target.read;
+            writtenBytes += target.written;
+            read < chunk.length &&
+              (writeToDestination(
+                destination,
+                currentView.subarray(0, writtenBytes)
+              ),
+              (currentView = new Uint8Array(2048)),
+              (writtenBytes = textEncoder.encodeInto(
+                chunk.slice(read),
+                currentView
+              ).written));
+            2048 === writtenBytes &&
+              (writeToDestination(destination, currentView),
+              (currentView = new Uint8Array(2048)),
+              (writtenBytes = 0));
+          }
+      } else
+        0 !== chunk.byteLength &&
+          (2048 < chunk.byteLength
+            ? (0 < writtenBytes &&
+                (writeToDestination(
+                  destination,
+                  currentView.subarray(0, writtenBytes)
+                ),
+                (currentView = new Uint8Array(2048)),
+                (writtenBytes = 0)),
+              writeToDestination(destination, chunk))
+            : ((target = currentView.length - writtenBytes),
+              target < chunk.byteLength &&
+                (0 === target
+                  ? writeToDestination(destination, currentView)
+                  : (currentView.set(chunk.subarray(0, target), writtenBytes),
+                    (writtenBytes += target),
+                    writeToDestination(destination, currentView),
+                    (chunk = chunk.subarray(target))),
+                (currentView = new Uint8Array(2048)),
+                (writtenBytes = 0)),
+              currentView.set(chunk, writtenBytes),
+              (writtenBytes += chunk.byteLength),
+              2048 === writtenBytes &&
+                (writeToDestination(destination, currentView),
+                (currentView = new Uint8Array(2048)),
+                (writtenBytes = 0))));
+    }
+    function writeToDestination(destination, view) {
+      destination = destination.write(view);
+      destinationHasCapacity$1 = destinationHasCapacity$1 && destination;
+    }
+    function writeChunkAndReturn(destination, chunk) {
+      writeChunk(destination, chunk);
+      return destinationHasCapacity$1;
+    }
+    function completeWriting(destination) {
+      currentView &&
+        0 < writtenBytes &&
+        destination.write(currentView.subarray(0, writtenBytes));
+      currentView = null;
+      writtenBytes = 0;
+      destinationHasCapacity$1 = !0;
+    }
+    function stringToPrecomputedChunk(content) {
+      content = textEncoder.encode(content);
+      2048 < content.byteLength &&
+        console.error(
+          "precomputed chunks must be smaller than the view size configured for this host. This is a bug in React."
+        );
+      return content;
+    }
+    function typeName(value) {
+      return (
+        ("function" === typeof Symbol &&
+          Symbol.toStringTag &&
+          value[Symbol.toStringTag]) ||
+        value.constructor.name ||
+        "Object"
+      );
+    }
+    function willCoercionThrow(value) {
+      try {
+        return testStringCoercion(value), !1;
+      } catch (e) {
+        return !0;
+      }
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkAttributeStringCoercion(value, attributeName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",
+            attributeName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkCSSPropertyStringCoercion(value, propName) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",
+            propName,
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function checkHtmlStringCoercion(value) {
+      if (willCoercionThrow(value))
+        return (
+          console.error(
+            "The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.",
+            typeName(value)
+          ),
+          testStringCoercion(value)
+        );
+    }
+    function isAttributeNameSafe(attributeName) {
+      if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+        return !0;
+      if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))
+        return !1;
+      if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+        return (validatedAttributeNameCache[attributeName] = !0);
+      illegalAttributeNameCache[attributeName] = !0;
+      console.error("Invalid attribute name: `%s`", attributeName);
+      return !1;
+    }
+    function checkControlledValueProps(tagName, props) {
+      hasReadOnlyValue[props.type] ||
+        props.onChange ||
+        props.onInput ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.value ||
+        ("select" === tagName
+          ? console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`."
+            )
+          : console.error(
+              "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`."
+            ));
+      props.onChange ||
+        props.readOnly ||
+        props.disabled ||
+        null == props.checked ||
+        console.error(
+          "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`."
+        );
+    }
+    function validateProperty$1(tagName, name) {
+      if (
+        hasOwnProperty.call(warnedProperties$1, name) &&
+        warnedProperties$1[name]
+      )
+        return !0;
+      if (rARIACamel$1.test(name)) {
+        tagName = "aria-" + name.slice(4).toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.",
+              name
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+        if (name !== tagName)
+          return (
+            console.error(
+              "Invalid ARIA attribute `%s`. Did you mean `%s`?",
+              name,
+              tagName
+            ),
+            (warnedProperties$1[name] = !0)
+          );
+      }
+      if (rARIA$1.test(name)) {
+        tagName = name.toLowerCase();
+        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;
+        if (null == tagName) return (warnedProperties$1[name] = !0), !1;
+        name !== tagName &&
+          (console.error(
+            "Unknown ARIA attribute `%s`. Did you mean `%s`?",
+            name,
+            tagName
+          ),
+          (warnedProperties$1[name] = !0));
+      }
+      return !0;
+    }
+    function validateProperties$2(type, props) {
+      var invalidProps = [],
+        key;
+      for (key in props)
+        validateProperty$1(type, key) || invalidProps.push(key);
+      props = invalidProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === invalidProps.length
+        ? console.error(
+            "Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          )
+        : 1 < invalidProps.length &&
+          console.error(
+            "Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props",
+            props,
+            type
+          );
+    }
+    function validateProperty(tagName, name, value, eventRegistry) {
+      if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])
+        return !0;
+      var lowerCasedName = name.toLowerCase();
+      if ("onfocusin" === lowerCasedName || "onfocusout" === lowerCasedName)
+        return (
+          console.error(
+            "React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "function" === typeof value &&
+        (("form" === tagName && "action" === name) ||
+          ("input" === tagName && "formAction" === name) ||
+          ("button" === tagName && "formAction" === name))
+      )
+        return !0;
+      if (null != eventRegistry) {
+        tagName = eventRegistry.possibleRegistrationNames;
+        if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))
+          return !0;
+        eventRegistry = tagName.hasOwnProperty(lowerCasedName)
+          ? tagName[lowerCasedName]
+          : null;
+        if (null != eventRegistry)
+          return (
+            console.error(
+              "Invalid event handler property `%s`. Did you mean `%s`?",
+              name,
+              eventRegistry
+            ),
+            (warnedProperties[name] = !0)
+          );
+        if (EVENT_NAME_REGEX.test(name))
+          return (
+            console.error(
+              "Unknown event handler property `%s`. It will be ignored.",
+              name
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (EVENT_NAME_REGEX.test(name))
+        return (
+          INVALID_EVENT_NAME_REGEX.test(name) &&
+            console.error(
+              "Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.",
+              name
+            ),
+          (warnedProperties[name] = !0)
+        );
+      if (rARIA.test(name) || rARIACamel.test(name)) return !0;
+      if ("innerhtml" === lowerCasedName)
+        return (
+          console.error(
+            "Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("aria" === lowerCasedName)
+        return (
+          console.error(
+            "The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead."
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (
+        "is" === lowerCasedName &&
+        null !== value &&
+        void 0 !== value &&
+        "string" !== typeof value
+      )
+        return (
+          console.error(
+            "Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.",
+            typeof value
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if ("number" === typeof value && isNaN(value))
+        return (
+          console.error(
+            "Received NaN for the `%s` attribute. If this is expected, cast the value to a string.",
+            name
+          ),
+          (warnedProperties[name] = !0)
+        );
+      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
+        if (
+          ((lowerCasedName = possibleStandardNames[lowerCasedName]),
+          lowerCasedName !== name)
+        )
+          return (
+            console.error(
+              "Invalid DOM property `%s`. Did you mean `%s`?",
+              name,
+              lowerCasedName
+            ),
+            (warnedProperties[name] = !0)
+          );
+      } else if (name !== lowerCasedName)
+        return (
+          console.error(
+            "React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.",
+            name,
+            lowerCasedName
+          ),
+          (warnedProperties[name] = !0)
+        );
+      switch (name) {
+        case "dangerouslySetInnerHTML":
+        case "children":
+        case "style":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "ref":
+          return !0;
+        case "innerText":
+        case "textContent":
+          return !0;
+      }
+      switch (typeof value) {
+        case "boolean":
+          switch (name) {
+            case "autoFocus":
+            case "checked":
+            case "multiple":
+            case "muted":
+            case "selected":
+            case "contentEditable":
+            case "spellCheck":
+            case "draggable":
+            case "value":
+            case "autoReverse":
+            case "externalResourcesRequired":
+            case "focusable":
+            case "preserveAlpha":
+            case "allowFullScreen":
+            case "async":
+            case "autoPlay":
+            case "controls":
+            case "default":
+            case "defer":
+            case "disabled":
+            case "disablePictureInPicture":
+            case "disableRemotePlayback":
+            case "formNoValidate":
+            case "hidden":
+            case "loop":
+            case "noModule":
+            case "noValidate":
+            case "open":
+            case "playsInline":
+            case "readOnly":
+            case "required":
+            case "reversed":
+            case "scoped":
+            case "seamless":
+            case "itemScope":
+            case "capture":
+            case "download":
+            case "inert":
+              return !0;
+            default:
+              lowerCasedName = name.toLowerCase().slice(0, 5);
+              if ("data-" === lowerCasedName || "aria-" === lowerCasedName)
+                return !0;
+              value
+                ? console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name
+                  )
+                : console.error(
+                    'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',
+                    value,
+                    name,
+                    name,
+                    value,
+                    name,
+                    name,
+                    name
+                  );
+              return (warnedProperties[name] = !0);
+          }
+        case "function":
+        case "symbol":
+          return (warnedProperties[name] = !0), !1;
+        case "string":
+          if ("false" === value || "true" === value) {
+            switch (name) {
+              case "checked":
+              case "selected":
+              case "multiple":
+              case "muted":
+              case "allowFullScreen":
+              case "async":
+              case "autoPlay":
+              case "controls":
+              case "default":
+              case "defer":
+              case "disabled":
+              case "disablePictureInPicture":
+              case "disableRemotePlayback":
+              case "formNoValidate":
+              case "hidden":
+              case "loop":
+              case "noModule":
+              case "noValidate":
+              case "open":
+              case "playsInline":
+              case "readOnly":
+              case "required":
+              case "reversed":
+              case "scoped":
+              case "seamless":
+              case "itemScope":
+              case "inert":
+                break;
+              default:
+                return !0;
+            }
+            console.error(
+              "Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?",
+              value,
+              name,
+              "false" === value
+                ? "The browser will interpret it as a truthy value."
+                : 'Although this works, it will not work as expected if you pass the string "false".',
+              name,
+              value
+            );
+            warnedProperties[name] = !0;
+          }
+      }
+      return !0;
+    }
+    function warnUnknownProperties(type, props, eventRegistry) {
+      var unknownProps = [],
+        key;
+      for (key in props)
+        validateProperty(type, key, props[key], eventRegistry) ||
+          unknownProps.push(key);
+      props = unknownProps
+        .map(function (prop) {
+          return "`" + prop + "`";
+        })
+        .join(", ");
+      1 === unknownProps.length
+        ? console.error(
+            "Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          )
+        : 1 < unknownProps.length &&
+          console.error(
+            "Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ",
+            props,
+            type
+          );
+    }
+    function camelize(string) {
+      return string.replace(hyphenPattern, function (_, character) {
+        return character.toUpperCase();
+      });
+    }
+    function escapeTextForBrowser(text) {
+      if (
+        "boolean" === typeof text ||
+        "number" === typeof text ||
+        "bigint" === typeof text
+      )
+        return "" + text;
+      checkHtmlStringCoercion(text);
+      text = "" + text;
+      var match = matchHtmlRegExp.exec(text);
+      if (match) {
+        var html = "",
+          index,
+          lastIndex = 0;
+        for (index = match.index; index < text.length; index++) {
+          switch (text.charCodeAt(index)) {
+            case 34:
+              match = "&quot;";
+              break;
+            case 38:
+              match = "&amp;";
+              break;
+            case 39:
+              match = "&#x27;";
+              break;
+            case 60:
+              match = "&lt;";
+              break;
+            case 62:
+              match = "&gt;";
+              break;
+            default:
+              continue;
+          }
+          lastIndex !== index && (html += text.slice(lastIndex, index));
+          lastIndex = index + 1;
+          html += match;
+        }
+        text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+      }
+      return text;
+    }
+    function sanitizeURL(url) {
+      return isJavaScriptProtocol.test("" + url)
+        ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+        : url;
+    }
+    function escapeEntireInlineScriptContent(scriptText) {
+      checkHtmlStringCoercion(scriptText);
+      return ("" + scriptText).replace(scriptRegex, scriptReplacer);
+    }
+    function createRenderState(
+      resumableState,
+      nonce,
+      externalRuntimeConfig,
+      importMap,
+      onHeaders,
+      maxHeadersLength
+    ) {
+      var inlineScriptWithNonce =
+          void 0 === nonce
+            ? startInlineScript
+            : stringToPrecomputedChunk(
+                '<script nonce="' + escapeTextForBrowser(nonce) + '">'
+              ),
+        idPrefix = resumableState.idPrefix;
+      externalRuntimeConfig = [];
+      var bootstrapScriptContent = resumableState.bootstrapScriptContent,
+        bootstrapScripts = resumableState.bootstrapScripts,
+        bootstrapModules = resumableState.bootstrapModules;
+      void 0 !== bootstrapScriptContent &&
+        externalRuntimeConfig.push(
+          inlineScriptWithNonce,
+          escapeEntireInlineScriptContent(bootstrapScriptContent),
+          endInlineScript
+        );
+      bootstrapScriptContent = [];
+      void 0 !== importMap &&
+        (bootstrapScriptContent.push(importMapScriptStart),
+        bootstrapScriptContent.push(
+          escapeEntireInlineScriptContent(JSON.stringify(importMap))
+        ),
+        bootstrapScriptContent.push(importMapScriptEnd));
+      onHeaders &&
+        "number" === typeof maxHeadersLength &&
+        0 >= maxHeadersLength &&
+        console.error(
+          "React expected a positive non-zero `maxHeadersLength` option but found %s instead. When using the `onHeaders` option you may supply an optional `maxHeadersLength` option as well however, when setting this value to zero or less no headers will be captured.",
+          0 === maxHeadersLength ? "zero" : maxHeadersLength
+        );
+      importMap = onHeaders
+        ? {
+            preconnects: "",
+            fontPreloads: "",
+            highImagePreloads: "",
+            remainingCapacity:
+              2 +
+              ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3)
+          }
+        : null;
+      onHeaders = {
+        placeholderPrefix: stringToPrecomputedChunk(idPrefix + "P:"),
+        segmentPrefix: stringToPrecomputedChunk(idPrefix + "S:"),
+        boundaryPrefix: stringToPrecomputedChunk(idPrefix + "B:"),
+        startInlineScript: inlineScriptWithNonce,
+        preamble: createPreambleState(),
+        externalRuntimeScript: null,
+        bootstrapChunks: externalRuntimeConfig,
+        importMapChunks: bootstrapScriptContent,
+        onHeaders: onHeaders,
+        headers: importMap,
+        resets: {
+          font: {},
+          dns: {},
+          connect: { default: {}, anonymous: {}, credentials: {} },
+          image: {},
+          style: {}
+        },
+        charsetChunks: [],
+        viewportChunks: [],
+        hoistableChunks: [],
+        preconnects: new Set(),
+        fontPreloads: new Set(),
+        highImagePreloads: new Set(),
+        styles: new Map(),
+        bootstrapScripts: new Set(),
+        scripts: new Set(),
+        bulkPreloads: new Set(),
+        preloads: {
+          images: new Map(),
+          stylesheets: new Map(),
+          scripts: new Map(),
+          moduleScripts: new Map()
+        },
+        nonce: nonce,
+        hoistableState: null,
+        stylesToHoist: !1
+      };
+      if (void 0 !== bootstrapScripts)
+        for (importMap = 0; importMap < bootstrapScripts.length; importMap++) {
+          maxHeadersLength = bootstrapScripts[importMap];
+          bootstrapScriptContent = idPrefix = void 0;
+          var props = {
+            rel: "preload",
+            as: "script",
+            fetchPriority: "low",
+            nonce: nonce
+          };
+          "string" === typeof maxHeadersLength
+            ? (props.href = inlineScriptWithNonce = maxHeadersLength)
+            : ((props.href = inlineScriptWithNonce = maxHeadersLength.src),
+              (props.integrity = bootstrapScriptContent =
+                "string" === typeof maxHeadersLength.integrity
+                  ? maxHeadersLength.integrity
+                  : void 0),
+              (props.crossOrigin = idPrefix =
+                "string" === typeof maxHeadersLength ||
+                null == maxHeadersLength.crossOrigin
+                  ? void 0
+                  : "use-credentials" === maxHeadersLength.crossOrigin
+                    ? "use-credentials"
+                    : ""));
+          preloadBootstrapScriptOrModule(
+            resumableState,
+            onHeaders,
+            inlineScriptWithNonce,
+            props
+          );
+          externalRuntimeConfig.push(
+            startScriptSrc,
+            escapeTextForBrowser(inlineScriptWithNonce)
+          );
+          nonce &&
+            externalRuntimeConfig.push(
+              scriptNonce,
+              escapeTextForBrowser(nonce)
+            );
+          "string" === typeof bootstrapScriptContent &&
+            externalRuntimeConfig.push(
+              scriptIntegirty,
+              escapeTextForBrowser(bootstrapScriptContent)
+            );
+          "string" === typeof idPrefix &&
+            externalRuntimeConfig.push(
+              scriptCrossOrigin,
+              escapeTextForBrowser(idPrefix)
+            );
+          externalRuntimeConfig.push(endAsyncScript);
+        }
+      if (void 0 !== bootstrapModules)
+        for (
+          bootstrapScripts = 0;
+          bootstrapScripts < bootstrapModules.length;
+          bootstrapScripts++
+        )
+          (importMap = bootstrapModules[bootstrapScripts]),
+            (idPrefix = inlineScriptWithNonce = void 0),
+            (bootstrapScriptContent = {
+              rel: "modulepreload",
+              fetchPriority: "low",
+              nonce: nonce
+            }),
+            "string" === typeof importMap
+              ? (bootstrapScriptContent.href = maxHeadersLength = importMap)
+              : ((bootstrapScriptContent.href = maxHeadersLength =
+                  importMap.src),
+                (bootstrapScriptContent.integrity = idPrefix =
+                  "string" === typeof importMap.integrity
+                    ? importMap.integrity
+                    : void 0),
+                (bootstrapScriptContent.crossOrigin = inlineScriptWithNonce =
+                  "string" === typeof importMap || null == importMap.crossOrigin
+                    ? void 0
+                    : "use-credentials" === importMap.crossOrigin
+                      ? "use-credentials"
+                      : "")),
+            preloadBootstrapScriptOrModule(
+              resumableState,
+              onHeaders,
+              maxHeadersLength,
+              bootstrapScriptContent
+            ),
+            externalRuntimeConfig.push(
+              startModuleSrc,
+              escapeTextForBrowser(maxHeadersLength)
+            ),
+            nonce &&
+              externalRuntimeConfig.push(
+                scriptNonce,
+                escapeTextForBrowser(nonce)
+              ),
+            "string" === typeof idPrefix &&
+              externalRuntimeConfig.push(
+                scriptIntegirty,
+                escapeTextForBrowser(idPrefix)
+              ),
+            "string" === typeof inlineScriptWithNonce &&
+              externalRuntimeConfig.push(
+                scriptCrossOrigin,
+                escapeTextForBrowser(inlineScriptWithNonce)
+              ),
+            externalRuntimeConfig.push(endAsyncScript);
+      return onHeaders;
+    }
+    function createResumableState(
+      identifierPrefix,
+      externalRuntimeConfig,
+      bootstrapScriptContent,
+      bootstrapScripts,
+      bootstrapModules
+    ) {
+      return {
+        idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+        nextFormID: 0,
+        streamingFormat: 0,
+        bootstrapScriptContent: bootstrapScriptContent,
+        bootstrapScripts: bootstrapScripts,
+        bootstrapModules: bootstrapModules,
+        instructions: NothingSent,
+        hasBody: !1,
+        hasHtml: !1,
+        unknownResources: {},
+        dnsResources: {},
+        connectResources: { default: {}, anonymous: {}, credentials: {} },
+        imageResources: {},
+        styleResources: {},
+        scriptResources: {},
+        moduleUnknownResources: {},
+        moduleScriptResources: {}
+      };
+    }
+    function createPreambleState() {
+      return {
+        htmlChunks: null,
+        headChunks: null,
+        bodyChunks: null,
+        contribution: NoContribution
+      };
+    }
+    function createFormatContext(insertionMode, selectedValue, tagScope) {
+      return {
+        insertionMode: insertionMode,
+        selectedValue: selectedValue,
+        tagScope: tagScope
+      };
+    }
+    function createRootFormatContext(namespaceURI) {
+      return createFormatContext(
+        "http://www.w3.org/2000/svg" === namespaceURI
+          ? SVG_MODE
+          : "http://www.w3.org/1998/Math/MathML" === namespaceURI
+            ? MATHML_MODE
+            : ROOT_HTML_MODE,
+        null,
+        0
+      );
+    }
+    function getChildFormatContext(parentContext, type, props) {
+      switch (type) {
+        case "noscript":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 1
+          );
+        case "select":
+          return createFormatContext(
+            HTML_MODE,
+            null != props.value ? props.value : props.defaultValue,
+            parentContext.tagScope
+          );
+        case "svg":
+          return createFormatContext(SVG_MODE, null, parentContext.tagScope);
+        case "picture":
+          return createFormatContext(
+            HTML_MODE,
+            null,
+            parentContext.tagScope | 2
+          );
+        case "math":
+          return createFormatContext(MATHML_MODE, null, parentContext.tagScope);
+        case "foreignObject":
+          return createFormatContext(HTML_MODE, null, parentContext.tagScope);
+        case "table":
+          return createFormatContext(
+            HTML_TABLE_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "thead":
+        case "tbody":
+        case "tfoot":
+          return createFormatContext(
+            HTML_TABLE_BODY_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "colgroup":
+          return createFormatContext(
+            HTML_COLGROUP_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "tr":
+          return createFormatContext(
+            HTML_TABLE_ROW_MODE,
+            null,
+            parentContext.tagScope
+          );
+        case "head":
+          if (parentContext.insertionMode < HTML_MODE)
+            return createFormatContext(
+              HTML_HEAD_MODE,
+              null,
+              parentContext.tagScope
+            );
+          break;
+        case "html":
+          if (parentContext.insertionMode === ROOT_HTML_MODE)
+            return createFormatContext(
+              HTML_HTML_MODE,
+              null,
+              parentContext.tagScope
+            );
+      }
+      return parentContext.insertionMode >= HTML_TABLE_MODE ||
+        parentContext.insertionMode < HTML_MODE
+        ? createFormatContext(HTML_MODE, null, parentContext.tagScope)
+        : parentContext;
+    }
+    function pushTextInstance(target, text, renderState, textEmbedded) {
+      if ("" === text) return textEmbedded;
+      textEmbedded && target.push(textSeparator);
+      target.push(escapeTextForBrowser(text));
+      return !0;
+    }
+    function pushStyleAttribute(target, style) {
+      if ("object" !== typeof style)
+        throw Error(
+          "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+        );
+      var isFirst = !0,
+        styleName;
+      for (styleName in style)
+        if (hasOwnProperty.call(style, styleName)) {
+          var styleValue = style[styleName];
+          if (
+            null != styleValue &&
+            "boolean" !== typeof styleValue &&
+            "" !== styleValue
+          ) {
+            if (0 === styleName.indexOf("--")) {
+              var nameChunk = escapeTextForBrowser(styleName);
+              checkCSSPropertyStringCoercion(styleValue, styleName);
+              styleValue = escapeTextForBrowser(("" + styleValue).trim());
+            } else {
+              nameChunk = styleName;
+              var value = styleValue;
+              if (-1 < nameChunk.indexOf("-")) {
+                var name = nameChunk;
+                (warnedStyleNames.hasOwnProperty(name) &&
+                  warnedStyleNames[name]) ||
+                  ((warnedStyleNames[name] = !0),
+                  console.error(
+                    "Unsupported style property %s. Did you mean %s?",
+                    name,
+                    camelize(name.replace(msPattern$1, "ms-"))
+                  ));
+              } else if (badVendoredStyleNamePattern.test(nameChunk))
+                (name = nameChunk),
+                  (warnedStyleNames.hasOwnProperty(name) &&
+                    warnedStyleNames[name]) ||
+                    ((warnedStyleNames[name] = !0),
+                    console.error(
+                      "Unsupported vendor-prefixed style property %s. Did you mean %s?",
+                      name,
+                      name.charAt(0).toUpperCase() + name.slice(1)
+                    ));
+              else if (badStyleValueWithSemicolonPattern.test(value)) {
+                name = nameChunk;
+                var value$jscomp$0 = value;
+                (warnedStyleValues.hasOwnProperty(value$jscomp$0) &&
+                  warnedStyleValues[value$jscomp$0]) ||
+                  ((warnedStyleValues[value$jscomp$0] = !0),
+                  console.error(
+                    'Style property values shouldn\'t contain a semicolon. Try "%s: %s" instead.',
+                    name,
+                    value$jscomp$0.replace(
+                      badStyleValueWithSemicolonPattern,
+                      ""
+                    )
+                  ));
+              }
+              "number" === typeof value &&
+                (isNaN(value)
+                  ? warnedForNaNValue ||
+                    ((warnedForNaNValue = !0),
+                    console.error(
+                      "`NaN` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    ))
+                  : isFinite(value) ||
+                    warnedForInfinityValue ||
+                    ((warnedForInfinityValue = !0),
+                    console.error(
+                      "`Infinity` is an invalid value for the `%s` css style property.",
+                      nameChunk
+                    )));
+              nameChunk = styleName;
+              value = styleNameCache.get(nameChunk);
+              void 0 !== value
+                ? (nameChunk = value)
+                : ((value = stringToPrecomputedChunk(
+                    escapeTextForBrowser(
+                      nameChunk
+                        .replace(uppercasePattern, "-$1")
+                        .toLowerCase()
+                        .replace(msPattern, "-ms-")
+                    )
+                  )),
+                  styleNameCache.set(nameChunk, value),
+                  (nameChunk = value));
+              "number" === typeof styleValue
+                ? (styleValue =
+                    0 === styleValue || unitlessNumbers.has(styleName)
+                      ? "" + styleValue
+                      : styleValue + "px")
+                : (checkCSSPropertyStringCoercion(styleValue, styleName),
+                  (styleValue = escapeTextForBrowser(
+                    ("" + styleValue).trim()
+                  )));
+            }
+            isFirst
+              ? ((isFirst = !1),
+                target.push(
+                  styleAttributeStart,
+                  nameChunk,
+                  styleAssign,
+                  styleValue
+                ))
+              : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+          }
+        }
+      isFirst || target.push(attributeEnd);
+    }
+    function pushBooleanAttribute(target, name, value) {
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(attributeSeparator, name, attributeEmptyString);
+    }
+    function pushStringAttribute(target, name, value) {
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        "boolean" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          name,
+          attributeAssign,
+          escapeTextForBrowser(value),
+          attributeEnd
+        );
+    }
+    function pushAdditionalFormField(value, key) {
+      this.push(startHiddenInputChunk);
+      validateAdditionalFormField(value);
+      pushStringAttribute(this, "name", key);
+      pushStringAttribute(this, "value", value);
+      this.push(endOfStartTagSelfClosing);
+    }
+    function validateAdditionalFormField(value) {
+      if ("string" !== typeof value)
+        throw Error(
+          "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+        );
+    }
+    function getCustomFormFields(resumableState, formAction) {
+      if ("function" === typeof formAction.$$FORM_ACTION) {
+        var id = resumableState.nextFormID++;
+        resumableState = resumableState.idPrefix + id;
+        try {
+          var customFields = formAction.$$FORM_ACTION(resumableState);
+          if (customFields) {
+            var formData = customFields.data;
+            null != formData && formData.forEach(validateAdditionalFormField);
+          }
+          return customFields;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            "function" === typeof x.then
+          )
+            throw x;
+          console.error(
+            "Failed to serialize an action for progressive enhancement:\n%s",
+            x
+          );
+        }
+      }
+      return null;
+    }
+    function pushFormActionAttribute(
+      target,
+      resumableState,
+      renderState,
+      formAction,
+      formEncType,
+      formMethod,
+      formTarget,
+      name
+    ) {
+      var formData = null;
+      if ("function" === typeof formAction) {
+        null === name ||
+          didWarnFormActionName ||
+          ((didWarnFormActionName = !0),
+          console.error(
+            'Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'
+          ));
+        (null === formEncType && null === formMethod) ||
+          didWarnFormActionMethod ||
+          ((didWarnFormActionMethod = !0),
+          console.error(
+            "Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden."
+          ));
+        null === formTarget ||
+          didWarnFormActionTarget ||
+          ((didWarnFormActionTarget = !0),
+          console.error(
+            "Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window."
+          ));
+        var customFields = getCustomFormFields(resumableState, formAction);
+        null !== customFields
+          ? ((name = customFields.name),
+            (formAction = customFields.action || ""),
+            (formEncType = customFields.encType),
+            (formMethod = customFields.method),
+            (formTarget = customFields.target),
+            (formData = customFields.data))
+          : (target.push(
+              attributeSeparator,
+              "formAction",
+              attributeAssign,
+              actionJavaScriptURL,
+              attributeEnd
+            ),
+            (formTarget = formMethod = formEncType = formAction = name = null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != name && pushAttribute(target, "name", name);
+      null != formAction && pushAttribute(target, "formAction", formAction);
+      null != formEncType && pushAttribute(target, "formEncType", formEncType);
+      null != formMethod && pushAttribute(target, "formMethod", formMethod);
+      null != formTarget && pushAttribute(target, "formTarget", formTarget);
+      return formData;
+    }
+    function pushAttribute(target, name, value) {
+      switch (name) {
+        case "className":
+          pushStringAttribute(target, "class", value);
+          break;
+        case "tabIndex":
+          pushStringAttribute(target, "tabindex", value);
+          break;
+        case "dir":
+        case "role":
+        case "viewBox":
+        case "width":
+        case "height":
+          pushStringAttribute(target, name, value);
+          break;
+        case "style":
+          pushStyleAttribute(target, value);
+          break;
+        case "src":
+        case "href":
+          if ("" === value) {
+            "src" === name
+              ? console.error(
+                  'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                )
+              : console.error(
+                  'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                  name,
+                  name
+                );
+            break;
+          }
+        case "action":
+        case "formAction":
+          if (
+            null == value ||
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            name,
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+          break;
+        case "defaultValue":
+        case "defaultChecked":
+        case "innerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "ref":
+          break;
+        case "autoFocus":
+        case "multiple":
+        case "muted":
+          pushBooleanAttribute(target, name.toLowerCase(), value);
+          break;
+        case "xlinkHref":
+          if (
+            "function" === typeof value ||
+            "symbol" === typeof value ||
+            "boolean" === typeof value
+          )
+            break;
+          checkAttributeStringCoercion(value, name);
+          value = sanitizeURL("" + value);
+          target.push(
+            attributeSeparator,
+            "xlink:href",
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+          break;
+        case "contentEditable":
+        case "spellCheck":
+        case "draggable":
+        case "value":
+        case "autoReverse":
+        case "externalResourcesRequired":
+        case "focusable":
+        case "preserveAlpha":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(
+              attributeSeparator,
+              name,
+              attributeAssign,
+              escapeTextForBrowser(value),
+              attributeEnd
+            );
+          break;
+        case "inert":
+          "" !== value ||
+            didWarnForNewBooleanPropsWithEmptyValue[name] ||
+            ((didWarnForNewBooleanPropsWithEmptyValue[name] = !0),
+            console.error(
+              "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.",
+              name
+            ));
+        case "allowFullScreen":
+        case "async":
+        case "autoPlay":
+        case "controls":
+        case "default":
+        case "defer":
+        case "disabled":
+        case "disablePictureInPicture":
+        case "disableRemotePlayback":
+        case "formNoValidate":
+        case "hidden":
+        case "loop":
+        case "noModule":
+        case "noValidate":
+        case "open":
+        case "playsInline":
+        case "readOnly":
+        case "required":
+        case "reversed":
+        case "scoped":
+        case "seamless":
+        case "itemScope":
+          value &&
+            "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            target.push(attributeSeparator, name, attributeEmptyString);
+          break;
+        case "capture":
+        case "download":
+          !0 === value
+            ? target.push(attributeSeparator, name, attributeEmptyString)
+            : !1 !== value &&
+              "function" !== typeof value &&
+              "symbol" !== typeof value &&
+              target.push(
+                attributeSeparator,
+                name,
+                attributeAssign,
+                escapeTextForBrowser(value),
+                attributeEnd
+              );
+          break;
+        case "cols":
+        case "rows":
+        case "size":
+        case "span":
+          "function" !== typeof value &&
+            "symbol" !== typeof value &&
+            !isNaN(value) &&
+            1 <= value &&
+            target.push(
+              attributeSeparator,
+              name,
+              attributeAssign,
+              escapeTextForBrowser(value),
+              attributeEnd
+            );
+          break;
+        case "rowSpan":
+        case "start":
+          "function" === typeof value ||
+            "symbol" === typeof value ||
+            isNaN(value) ||
+            target.push(
+              attributeSeparator,
+              name,
+              attributeAssign,
+              escapeTextForBrowser(value),
+              attributeEnd
+            );
+          break;
+        case "xlinkActuate":
+          pushStringAttribute(target, "xlink:actuate", value);
+          break;
+        case "xlinkArcrole":
+          pushStringAttribute(target, "xlink:arcrole", value);
+          break;
+        case "xlinkRole":
+          pushStringAttribute(target, "xlink:role", value);
+          break;
+        case "xlinkShow":
+          pushStringAttribute(target, "xlink:show", value);
+          break;
+        case "xlinkTitle":
+          pushStringAttribute(target, "xlink:title", value);
+          break;
+        case "xlinkType":
+          pushStringAttribute(target, "xlink:type", value);
+          break;
+        case "xmlBase":
+          pushStringAttribute(target, "xml:base", value);
+          break;
+        case "xmlLang":
+          pushStringAttribute(target, "xml:lang", value);
+          break;
+        case "xmlSpace":
+          pushStringAttribute(target, "xml:space", value);
+          break;
+        default:
+          if (
+            !(2 < name.length) ||
+            ("o" !== name[0] && "O" !== name[0]) ||
+            ("n" !== name[1] && "N" !== name[1])
+          )
+            if (
+              ((name = aliases.get(name) || name), isAttributeNameSafe(name))
+            ) {
+              switch (typeof value) {
+                case "function":
+                case "symbol":
+                  return;
+                case "boolean":
+                  var prefix = name.toLowerCase().slice(0, 5);
+                  if ("data-" !== prefix && "aria-" !== prefix) return;
+              }
+              target.push(
+                attributeSeparator,
+                name,
+                attributeAssign,
+                escapeTextForBrowser(value),
+                attributeEnd
+              );
+            }
+      }
+    }
+    function pushInnerHTML(target, innerHTML, children) {
+      if (null != innerHTML) {
+        if (null != children)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        innerHTML = innerHTML.__html;
+        null !== innerHTML &&
+          void 0 !== innerHTML &&
+          (checkHtmlStringCoercion(innerHTML), target.push("" + innerHTML));
+      }
+    }
+    function checkSelectProp(props, propName) {
+      var value = props[propName];
+      null != value &&
+        ((value = isArrayImpl(value)),
+        props.multiple && !value
+          ? console.error(
+              "The `%s` prop supplied to <select> must be an array if `multiple` is true.",
+              propName
+            )
+          : !props.multiple &&
+            value &&
+            console.error(
+              "The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.",
+              propName
+            ));
+    }
+    function flattenOptionChildren(children) {
+      var content = "";
+      React.Children.forEach(children, function (child) {
+        null != child &&
+          ((content += child),
+          didWarnInvalidOptionChildren ||
+            "string" === typeof child ||
+            "number" === typeof child ||
+            "bigint" === typeof child ||
+            ((didWarnInvalidOptionChildren = !0),
+            console.error(
+              "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>."
+            )));
+      });
+      return content;
+    }
+    function injectFormReplayingRuntime(resumableState, renderState) {
+      (resumableState.instructions & 16) === NothingSent &&
+        ((resumableState.instructions |= 16),
+        renderState.bootstrapChunks.unshift(
+          renderState.startInlineScript,
+          formReplayingRuntimeScript,
+          endInlineScript
+        ));
+    }
+    function pushLinkImpl(target, props) {
+      target.push(startChunkForTag("link"));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function escapeStyleTextContent(styleText) {
+      checkHtmlStringCoercion(styleText);
+      return ("" + styleText).replace(styleRegex, styleReplacer);
+    }
+    function pushSelfClosing(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      for (var propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  tag +
+                    " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTagSelfClosing);
+      return null;
+    }
+    function pushTitleImpl(target, props) {
+      target.push(startChunkForTag("title"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      props = Array.isArray(children)
+        ? 2 > children.length
+          ? children[0]
+          : null
+        : children;
+      "function" !== typeof props &&
+        "symbol" !== typeof props &&
+        null !== props &&
+        void 0 !== props &&
+        target.push(escapeTextForBrowser("" + props));
+      pushInnerHTML(target, innerHTML, children);
+      target.push(endChunkForTag("title"));
+      return null;
+    }
+    function pushScriptImpl(target, props) {
+      target.push(startChunkForTag("script"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      null != children &&
+        "string" !== typeof children &&
+        ((props =
+          "number" === typeof children
+            ? "a number for children"
+            : Array.isArray(children)
+              ? "an array for children"
+              : "something unexpected for children"),
+        console.error(
+          "A script element was rendered with %s. If script element has children it must be a single string. Consider using dangerouslySetInnerHTML or passing a plain string as children.",
+          props
+        ));
+      pushInnerHTML(target, innerHTML, children);
+      "string" === typeof children &&
+        target.push(escapeEntireInlineScriptContent(children));
+      target.push(endChunkForTag("script"));
+      return null;
+    }
+    function pushStartSingletonElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return tag;
+    }
+    function pushStartGenericElement(target, props, tag) {
+      target.push(startChunkForTag(tag));
+      var innerHTML = (tag = null),
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                tag = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              default:
+                pushAttribute(target, propKey, propValue);
+            }
+        }
+      target.push(endOfStartTag);
+      pushInnerHTML(target, innerHTML, tag);
+      return "string" === typeof tag
+        ? (target.push(escapeTextForBrowser(tag)), null)
+        : tag;
+    }
+    function startChunkForTag(tag) {
+      var tagStartChunk = validatedTagCache.get(tag);
+      if (void 0 === tagStartChunk) {
+        if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+        tagStartChunk = stringToPrecomputedChunk("<" + tag);
+        validatedTagCache.set(tag, tagStartChunk);
+      }
+      return tagStartChunk;
+    }
+    function pushStartInstance(
+      target$jscomp$0,
+      type,
+      props,
+      resumableState,
+      renderState,
+      preambleState,
+      hoistableState,
+      formatContext,
+      textEmbedded,
+      isFallback
+    ) {
+      validateProperties$2(type, props);
+      ("input" !== type && "textarea" !== type && "select" !== type) ||
+        null == props ||
+        null !== props.value ||
+        didWarnValueNull ||
+        ((didWarnValueNull = !0),
+        "select" === type && props.multiple
+          ? console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.",
+              type
+            )
+          : console.error(
+              "`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.",
+              type
+            ));
+      b: if (-1 === type.indexOf("-")) var JSCompiler_inline_result = !1;
+      else
+        switch (type) {
+          case "annotation-xml":
+          case "color-profile":
+          case "font-face":
+          case "font-face-src":
+          case "font-face-uri":
+          case "font-face-format":
+          case "font-face-name":
+          case "missing-glyph":
+            JSCompiler_inline_result = !1;
+            break b;
+          default:
+            JSCompiler_inline_result = !0;
+        }
+      JSCompiler_inline_result ||
+        "string" === typeof props.is ||
+        warnUnknownProperties(type, props, null);
+      !props.suppressContentEditableWarning &&
+        props.contentEditable &&
+        null != props.children &&
+        console.error(
+          "A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional."
+        );
+      formatContext.insertionMode !== SVG_MODE &&
+        formatContext.insertionMode !== MATHML_MODE &&
+        -1 === type.indexOf("-") &&
+        type.toLowerCase() !== type &&
+        console.error(
+          "<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.",
+          type
+        );
+      switch (type) {
+        case "div":
+        case "span":
+        case "svg":
+        case "path":
+          break;
+        case "a":
+          target$jscomp$0.push(startChunkForTag("a"));
+          var children = null,
+            innerHTML = null,
+            propKey;
+          for (propKey in props)
+            if (hasOwnProperty.call(props, propKey)) {
+              var propValue = props[propKey];
+              if (null != propValue)
+                switch (propKey) {
+                  case "children":
+                    children = propValue;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML = propValue;
+                    break;
+                  case "href":
+                    "" === propValue
+                      ? pushStringAttribute(target$jscomp$0, "href", "")
+                      : pushAttribute(target$jscomp$0, propKey, propValue);
+                    break;
+                  default:
+                    pushAttribute(target$jscomp$0, propKey, propValue);
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML, children);
+          if ("string" === typeof children) {
+            target$jscomp$0.push(escapeTextForBrowser(children));
+            var JSCompiler_inline_result$jscomp$0 = null;
+          } else JSCompiler_inline_result$jscomp$0 = children;
+          return JSCompiler_inline_result$jscomp$0;
+        case "g":
+        case "p":
+        case "li":
+          break;
+        case "select":
+          checkControlledValueProps("select", props);
+          checkSelectProp(props, "value");
+          checkSelectProp(props, "defaultValue");
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultSelectValue ||
+            (console.error(
+              "Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultSelectValue = !0));
+          target$jscomp$0.push(startChunkForTag("select"));
+          var children$jscomp$0 = null,
+            innerHTML$jscomp$0 = null,
+            propKey$jscomp$0;
+          for (propKey$jscomp$0 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+              var propValue$jscomp$0 = props[propKey$jscomp$0];
+              if (null != propValue$jscomp$0)
+                switch (propKey$jscomp$0) {
+                  case "children":
+                    children$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$0 = propValue$jscomp$0;
+                    break;
+                  case "defaultValue":
+                  case "value":
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$0,
+                      propValue$jscomp$0
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+          return children$jscomp$0;
+        case "option":
+          var selectedValue = formatContext.selectedValue;
+          target$jscomp$0.push(startChunkForTag("option"));
+          var children$jscomp$1 = null,
+            value = null,
+            selected = null,
+            innerHTML$jscomp$1 = null,
+            propKey$jscomp$1;
+          for (propKey$jscomp$1 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+              var propValue$jscomp$1 = props[propKey$jscomp$1];
+              if (null != propValue$jscomp$1)
+                switch (propKey$jscomp$1) {
+                  case "children":
+                    children$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "selected":
+                    selected = propValue$jscomp$1;
+                    didWarnSelectedSetOnOption ||
+                      (console.error(
+                        "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>."
+                      ),
+                      (didWarnSelectedSetOnOption = !0));
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$1 = propValue$jscomp$1;
+                    break;
+                  case "value":
+                    value = propValue$jscomp$1;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$1,
+                      propValue$jscomp$1
+                    );
+                }
+            }
+          if (null != selectedValue) {
+            if (null !== value) {
+              checkAttributeStringCoercion(value, "value");
+              var stringValue = "" + value;
+            } else
+              null === innerHTML$jscomp$1 ||
+                didWarnInvalidOptionInnerHTML ||
+                ((didWarnInvalidOptionInnerHTML = !0),
+                console.error(
+                  "Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected."
+                )),
+                (stringValue = flattenOptionChildren(children$jscomp$1));
+            if (isArrayImpl(selectedValue))
+              for (var i = 0; i < selectedValue.length; i++) {
+                if (
+                  (checkAttributeStringCoercion(selectedValue[i], "value"),
+                  "" + selectedValue[i] === stringValue)
+                ) {
+                  target$jscomp$0.push(selectedMarkerAttribute);
+                  break;
+                }
+              }
+            else
+              checkAttributeStringCoercion(selectedValue, "select.value"),
+                "" + selectedValue === stringValue &&
+                  target$jscomp$0.push(selectedMarkerAttribute);
+          } else selected && target$jscomp$0.push(selectedMarkerAttribute);
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+          return children$jscomp$1;
+        case "textarea":
+          checkControlledValueProps("textarea", props);
+          void 0 === props.value ||
+            void 0 === props.defaultValue ||
+            didWarnDefaultTextareaValue ||
+            (console.error(
+              "Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components"
+            ),
+            (didWarnDefaultTextareaValue = !0));
+          target$jscomp$0.push(startChunkForTag("textarea"));
+          var value$jscomp$0 = null,
+            defaultValue = null,
+            children$jscomp$2 = null,
+            propKey$jscomp$2;
+          for (propKey$jscomp$2 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+              var propValue$jscomp$2 = props[propKey$jscomp$2];
+              if (null != propValue$jscomp$2)
+                switch (propKey$jscomp$2) {
+                  case "children":
+                    children$jscomp$2 = propValue$jscomp$2;
+                    break;
+                  case "value":
+                    value$jscomp$0 = propValue$jscomp$2;
+                    break;
+                  case "defaultValue":
+                    defaultValue = propValue$jscomp$2;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$2,
+                      propValue$jscomp$2
+                    );
+                }
+            }
+          null === value$jscomp$0 &&
+            null !== defaultValue &&
+            (value$jscomp$0 = defaultValue);
+          target$jscomp$0.push(endOfStartTag);
+          if (null != children$jscomp$2) {
+            console.error(
+              "Use the `defaultValue` or `value` props instead of setting children on <textarea>."
+            );
+            if (null != value$jscomp$0)
+              throw Error(
+                "If you supply `defaultValue` on a <textarea>, do not pass children."
+              );
+            if (isArrayImpl(children$jscomp$2)) {
+              if (1 < children$jscomp$2.length)
+                throw Error("<textarea> can only have at most one child.");
+              checkHtmlStringCoercion(children$jscomp$2[0]);
+              value$jscomp$0 = "" + children$jscomp$2[0];
+            }
+            checkHtmlStringCoercion(children$jscomp$2);
+            value$jscomp$0 = "" + children$jscomp$2;
+          }
+          "string" === typeof value$jscomp$0 &&
+            "\n" === value$jscomp$0[0] &&
+            target$jscomp$0.push(leadingNewline);
+          null !== value$jscomp$0 &&
+            (checkAttributeStringCoercion(value$jscomp$0, "value"),
+            target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0)));
+          return null;
+        case "input":
+          checkControlledValueProps("input", props);
+          target$jscomp$0.push(startChunkForTag("input"));
+          var name = null,
+            formAction = null,
+            formEncType = null,
+            formMethod = null,
+            formTarget = null,
+            value$jscomp$1 = null,
+            defaultValue$jscomp$0 = null,
+            checked = null,
+            defaultChecked = null,
+            propKey$jscomp$3;
+          for (propKey$jscomp$3 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+              var propValue$jscomp$3 = props[propKey$jscomp$3];
+              if (null != propValue$jscomp$3)
+                switch (propKey$jscomp$3) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  case "name":
+                    name = propValue$jscomp$3;
+                    break;
+                  case "formAction":
+                    formAction = propValue$jscomp$3;
+                    break;
+                  case "formEncType":
+                    formEncType = propValue$jscomp$3;
+                    break;
+                  case "formMethod":
+                    formMethod = propValue$jscomp$3;
+                    break;
+                  case "formTarget":
+                    formTarget = propValue$jscomp$3;
+                    break;
+                  case "defaultChecked":
+                    defaultChecked = propValue$jscomp$3;
+                    break;
+                  case "defaultValue":
+                    defaultValue$jscomp$0 = propValue$jscomp$3;
+                    break;
+                  case "checked":
+                    checked = propValue$jscomp$3;
+                    break;
+                  case "value":
+                    value$jscomp$1 = propValue$jscomp$3;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$3,
+                      propValue$jscomp$3
+                    );
+                }
+            }
+          null === formAction ||
+            "image" === props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'An input can only specify a formAction along with type="submit" or type="image".'
+            ));
+          var formData = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction,
+            formEncType,
+            formMethod,
+            formTarget,
+            name
+          );
+          null === checked ||
+            null === defaultChecked ||
+            didWarnDefaultChecked ||
+            (console.error(
+              "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultChecked = !0));
+          null === value$jscomp$1 ||
+            null === defaultValue$jscomp$0 ||
+            didWarnDefaultInputValue ||
+            (console.error(
+              "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",
+              "A component",
+              props.type
+            ),
+            (didWarnDefaultInputValue = !0));
+          null !== checked
+            ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+            : null !== defaultChecked &&
+              pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+          null !== value$jscomp$1
+            ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+            : null !== defaultValue$jscomp$0 &&
+              pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+          target$jscomp$0.push(endOfStartTagSelfClosing);
+          null != formData &&
+            formData.forEach(pushAdditionalFormField, target$jscomp$0);
+          return null;
+        case "button":
+          target$jscomp$0.push(startChunkForTag("button"));
+          var children$jscomp$3 = null,
+            innerHTML$jscomp$2 = null,
+            name$jscomp$0 = null,
+            formAction$jscomp$0 = null,
+            formEncType$jscomp$0 = null,
+            formMethod$jscomp$0 = null,
+            formTarget$jscomp$0 = null,
+            propKey$jscomp$4;
+          for (propKey$jscomp$4 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+              var propValue$jscomp$4 = props[propKey$jscomp$4];
+              if (null != propValue$jscomp$4)
+                switch (propKey$jscomp$4) {
+                  case "children":
+                    children$jscomp$3 = propValue$jscomp$4;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$2 = propValue$jscomp$4;
+                    break;
+                  case "name":
+                    name$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formAction":
+                    formAction$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formEncType":
+                    formEncType$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formMethod":
+                    formMethod$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  case "formTarget":
+                    formTarget$jscomp$0 = propValue$jscomp$4;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$4,
+                      propValue$jscomp$4
+                    );
+                }
+            }
+          null === formAction$jscomp$0 ||
+            null == props.type ||
+            "submit" === props.type ||
+            didWarnFormActionType ||
+            ((didWarnFormActionType = !0),
+            console.error(
+              'A button can only specify a formAction along with type="submit" or no type.'
+            ));
+          var formData$jscomp$0 = pushFormActionAttribute(
+            target$jscomp$0,
+            resumableState,
+            renderState,
+            formAction$jscomp$0,
+            formEncType$jscomp$0,
+            formMethod$jscomp$0,
+            formTarget$jscomp$0,
+            name$jscomp$0
+          );
+          target$jscomp$0.push(endOfStartTag);
+          null != formData$jscomp$0 &&
+            formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+          if ("string" === typeof children$jscomp$3) {
+            target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3));
+            var JSCompiler_inline_result$jscomp$1 = null;
+          } else JSCompiler_inline_result$jscomp$1 = children$jscomp$3;
+          return JSCompiler_inline_result$jscomp$1;
+        case "form":
+          target$jscomp$0.push(startChunkForTag("form"));
+          var children$jscomp$4 = null,
+            innerHTML$jscomp$3 = null,
+            formAction$jscomp$1 = null,
+            formEncType$jscomp$1 = null,
+            formMethod$jscomp$1 = null,
+            formTarget$jscomp$1 = null,
+            propKey$jscomp$5;
+          for (propKey$jscomp$5 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+              var propValue$jscomp$5 = props[propKey$jscomp$5];
+              if (null != propValue$jscomp$5)
+                switch (propKey$jscomp$5) {
+                  case "children":
+                    children$jscomp$4 = propValue$jscomp$5;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$3 = propValue$jscomp$5;
+                    break;
+                  case "action":
+                    formAction$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "encType":
+                    formEncType$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "method":
+                    formMethod$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  case "target":
+                    formTarget$jscomp$1 = propValue$jscomp$5;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$5,
+                      propValue$jscomp$5
+                    );
+                }
+            }
+          var formData$jscomp$1 = null,
+            formActionName = null;
+          if ("function" === typeof formAction$jscomp$1) {
+            (null === formEncType$jscomp$1 && null === formMethod$jscomp$1) ||
+              didWarnFormActionMethod ||
+              ((didWarnFormActionMethod = !0),
+              console.error(
+                "Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden."
+              ));
+            null === formTarget$jscomp$1 ||
+              didWarnFormActionTarget ||
+              ((didWarnFormActionTarget = !0),
+              console.error(
+                "Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window."
+              ));
+            var customFields = getCustomFormFields(
+              resumableState,
+              formAction$jscomp$1
+            );
+            null !== customFields
+              ? ((formAction$jscomp$1 = customFields.action || ""),
+                (formEncType$jscomp$1 = customFields.encType),
+                (formMethod$jscomp$1 = customFields.method),
+                (formTarget$jscomp$1 = customFields.target),
+                (formData$jscomp$1 = customFields.data),
+                (formActionName = customFields.name))
+              : (target$jscomp$0.push(
+                  attributeSeparator,
+                  "action",
+                  attributeAssign,
+                  actionJavaScriptURL,
+                  attributeEnd
+                ),
+                (formTarget$jscomp$1 =
+                  formMethod$jscomp$1 =
+                  formEncType$jscomp$1 =
+                  formAction$jscomp$1 =
+                    null),
+                injectFormReplayingRuntime(resumableState, renderState));
+          }
+          null != formAction$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+          null != formEncType$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+          null != formMethod$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+          null != formTarget$jscomp$1 &&
+            pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+          target$jscomp$0.push(endOfStartTag);
+          null !== formActionName &&
+            (target$jscomp$0.push(startHiddenInputChunk),
+            pushStringAttribute(target$jscomp$0, "name", formActionName),
+            target$jscomp$0.push(endOfStartTagSelfClosing),
+            null != formData$jscomp$1 &&
+              formData$jscomp$1.forEach(
+                pushAdditionalFormField,
+                target$jscomp$0
+              ));
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+          if ("string" === typeof children$jscomp$4) {
+            target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4));
+            var JSCompiler_inline_result$jscomp$2 = null;
+          } else JSCompiler_inline_result$jscomp$2 = children$jscomp$4;
+          return JSCompiler_inline_result$jscomp$2;
+        case "menuitem":
+          target$jscomp$0.push(startChunkForTag("menuitem"));
+          for (var propKey$jscomp$6 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+              var propValue$jscomp$6 = props[propKey$jscomp$6];
+              if (null != propValue$jscomp$6)
+                switch (propKey$jscomp$6) {
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$6,
+                      propValue$jscomp$6
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          return null;
+        case "object":
+          target$jscomp$0.push(startChunkForTag("object"));
+          var children$jscomp$5 = null,
+            innerHTML$jscomp$4 = null,
+            propKey$jscomp$7;
+          for (propKey$jscomp$7 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+              var propValue$jscomp$7 = props[propKey$jscomp$7];
+              if (null != propValue$jscomp$7)
+                switch (propKey$jscomp$7) {
+                  case "children":
+                    children$jscomp$5 = propValue$jscomp$7;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$4 = propValue$jscomp$7;
+                    break;
+                  case "data":
+                    checkAttributeStringCoercion(propValue$jscomp$7, "data");
+                    var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                    if ("" === sanitizedValue) {
+                      console.error(
+                        'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',
+                        propKey$jscomp$7,
+                        propKey$jscomp$7
+                      );
+                      break;
+                    }
+                    target$jscomp$0.push(
+                      attributeSeparator,
+                      "data",
+                      attributeAssign,
+                      escapeTextForBrowser(sanitizedValue),
+                      attributeEnd
+                    );
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$7,
+                      propValue$jscomp$7
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+          if ("string" === typeof children$jscomp$5) {
+            target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5));
+            var JSCompiler_inline_result$jscomp$3 = null;
+          } else JSCompiler_inline_result$jscomp$3 = children$jscomp$5;
+          return JSCompiler_inline_result$jscomp$3;
+        case "title":
+          var insertionMode = formatContext.insertionMode,
+            noscriptTagInScope = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$6 = props.children,
+              child = Array.isArray(children$jscomp$6)
+                ? 2 > children$jscomp$6.length
+                  ? children$jscomp$6[0]
+                  : null
+                : children$jscomp$6;
+            Array.isArray(children$jscomp$6) && 1 < children$jscomp$6.length
+              ? console.error(
+                  "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an Array with length %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert `children` of <title> tags to a single string value which is why Arrays of length greater than 1 are not supported. When using JSX it can be common to combine text nodes and value nodes. For example: <title>hello {nameOfUser}</title>. While not immediately apparent, `children` in this case is an Array with length 2. If your `children` prop is using this form try rewriting it using a template string: <title>{`hello ${nameOfUser}`}</title>.",
+                  children$jscomp$6.length
+                )
+              : "function" === typeof child || "symbol" === typeof child
+                ? console.error(
+                    "React expect children of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found %s instead. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value.",
+                    "function" === typeof child ? "a Function" : "a Sybmol"
+                  )
+                : child &&
+                  child.toString === {}.toString &&
+                  (null != child.$$typeof
+                    ? console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that appears to be a React element which never implements a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value which is why rendering React elements is not supported. If the `children` of <title> is a React Component try moving the <title> tag into that component. If the `children` of <title> is some HTML markup change it to be Text only to be valid HTML."
+                      )
+                    : console.error(
+                        "React expects the `children` prop of <title> tags to be a string, number, bigint, or object with a novel `toString` method but found an object that does not implement a suitable `toString` method. Browsers treat all child Nodes of <title> tags as Text content and React expects to be able to convert children of <title> tags to a single string value. Using the default `toString` method available on every object is almost certainly an error. Consider whether the `children` of this <title> is an object in error and change it to a string or number value if so. Otherwise implement a `toString` method that React can use to produce a valid <title>."
+                      ));
+          }
+          if (
+            insertionMode === SVG_MODE ||
+            noscriptTagInScope ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$4 = pushTitleImpl(
+              target$jscomp$0,
+              props
+            );
+          else
+            isFallback
+              ? (JSCompiler_inline_result$jscomp$4 = null)
+              : (pushTitleImpl(renderState.hoistableChunks, props),
+                (JSCompiler_inline_result$jscomp$4 = void 0));
+          return JSCompiler_inline_result$jscomp$4;
+        case "link":
+          var rel = props.rel,
+            href = props.href,
+            precedence = props.precedence;
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp ||
+            "string" !== typeof rel ||
+            "string" !== typeof href ||
+            "" === href
+          ) {
+            "stylesheet" === rel &&
+              "string" === typeof props.precedence &&
+              (("string" === typeof href && href) ||
+                console.error(
+                  'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and expected the `href` prop to be a non-empty string but ecountered %s instead. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop ensure there is a non-empty string `href` prop as well, otherwise remove the `precedence` prop.',
+                  null === href
+                    ? "`null`"
+                    : void 0 === href
+                      ? "`undefined`"
+                      : "" === href
+                        ? "an empty string"
+                        : 'something with type "' + typeof href + '"'
+                ));
+            pushLinkImpl(target$jscomp$0, props);
+            var JSCompiler_inline_result$jscomp$5 = null;
+          } else if ("stylesheet" === props.rel)
+            if (
+              "string" !== typeof precedence ||
+              null != props.disabled ||
+              props.onLoad ||
+              props.onError
+            ) {
+              if ("string" === typeof precedence)
+                if (null != props.disabled)
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and a `disabled` prop. The presence of the `disabled` prop indicates an intent to manage the stylesheet active state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the `disabled` prop, otherwise remove the `precedence` prop.'
+                  );
+                else if (props.onLoad || props.onError) {
+                  var propDescription =
+                    props.onLoad && props.onError
+                      ? "`onLoad` and `onError` props"
+                      : props.onLoad
+                        ? "`onLoad` prop"
+                        : "`onError` prop";
+                  console.error(
+                    'React encountered a `<link rel="stylesheet" .../>` with a `precedence` prop and %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',
+                    propDescription,
+                    propDescription
+                  );
+                }
+              JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                target$jscomp$0,
+                props
+              );
+            } else {
+              var styleQueue = renderState.styles.get(precedence),
+                resourceState = resumableState.styleResources.hasOwnProperty(
+                  href
+                )
+                  ? resumableState.styleResources[href]
+                  : void 0;
+              if (resourceState !== EXISTS) {
+                resumableState.styleResources[href] = EXISTS;
+                styleQueue ||
+                  ((styleQueue = {
+                    precedence: escapeTextForBrowser(precedence),
+                    rules: [],
+                    hrefs: [],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(precedence, styleQueue));
+                var resource = {
+                  state: PENDING$1,
+                  props: assign({}, props, {
+                    "data-precedence": props.precedence,
+                    precedence: null
+                  })
+                };
+                if (resourceState) {
+                  2 === resourceState.length &&
+                    adoptPreloadCredentials(resource.props, resourceState);
+                  var preloadResource =
+                    renderState.preloads.stylesheets.get(href);
+                  preloadResource && 0 < preloadResource.length
+                    ? (preloadResource.length = 0)
+                    : (resource.state = PRELOADED);
+                }
+                styleQueue.sheets.set(href, resource);
+                hoistableState && hoistableState.stylesheets.add(resource);
+              } else if (styleQueue) {
+                var _resource = styleQueue.sheets.get(href);
+                _resource &&
+                  hoistableState &&
+                  hoistableState.stylesheets.add(_resource);
+              }
+              textEmbedded && target$jscomp$0.push(textSeparator);
+              JSCompiler_inline_result$jscomp$5 = null;
+            }
+          else
+            props.onLoad || props.onError
+              ? (JSCompiler_inline_result$jscomp$5 = pushLinkImpl(
+                  target$jscomp$0,
+                  props
+                ))
+              : (textEmbedded && target$jscomp$0.push(textSeparator),
+                (JSCompiler_inline_result$jscomp$5 = isFallback
+                  ? null
+                  : pushLinkImpl(renderState.hoistableChunks, props)));
+          return JSCompiler_inline_result$jscomp$5;
+        case "script":
+          var asyncProp = props.async;
+          if (
+            "string" !== typeof props.src ||
+            !props.src ||
+            !asyncProp ||
+            "function" === typeof asyncProp ||
+            "symbol" === typeof asyncProp ||
+            props.onLoad ||
+            props.onError ||
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$6 = pushScriptImpl(
+              target$jscomp$0,
+              props
+            );
+          else {
+            var key = props.src;
+            if ("module" === props.type) {
+              var resources = resumableState.moduleScriptResources;
+              var preloads = renderState.preloads.moduleScripts;
+            } else
+              (resources = resumableState.scriptResources),
+                (preloads = renderState.preloads.scripts);
+            var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+              ? resources[key]
+              : void 0;
+            if (resourceState$jscomp$0 !== EXISTS) {
+              resources[key] = EXISTS;
+              var scriptProps = props;
+              if (resourceState$jscomp$0) {
+                2 === resourceState$jscomp$0.length &&
+                  ((scriptProps = assign({}, props)),
+                  adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+                var preloadResource$jscomp$0 = preloads.get(key);
+                preloadResource$jscomp$0 &&
+                  (preloadResource$jscomp$0.length = 0);
+              }
+              var resource$jscomp$0 = [];
+              renderState.scripts.add(resource$jscomp$0);
+              pushScriptImpl(resource$jscomp$0, scriptProps);
+            }
+            textEmbedded && target$jscomp$0.push(textSeparator);
+            JSCompiler_inline_result$jscomp$6 = null;
+          }
+          return JSCompiler_inline_result$jscomp$6;
+        case "style":
+          var insertionMode$jscomp$0 = formatContext.insertionMode,
+            noscriptTagInScope$jscomp$0 = !!(formatContext.tagScope & 1);
+          if (hasOwnProperty.call(props, "children")) {
+            var children$jscomp$7 = props.children,
+              child$jscomp$0 = Array.isArray(children$jscomp$7)
+                ? 2 > children$jscomp$7.length
+                  ? children$jscomp$7[0]
+                  : null
+                : children$jscomp$7;
+            ("function" === typeof child$jscomp$0 ||
+              "symbol" === typeof child$jscomp$0 ||
+              Array.isArray(child$jscomp$0)) &&
+              console.error(
+                "React expect children of <style> tags to be a string, number, or object with a `toString` method but found %s instead. In browsers style Elements can only have `Text` Nodes as children.",
+                "function" === typeof child$jscomp$0
+                  ? "a Function"
+                  : "symbol" === typeof child$jscomp$0
+                    ? "a Sybmol"
+                    : "an Array"
+              );
+          }
+          var precedence$jscomp$0 = props.precedence,
+            href$jscomp$0 = props.href;
+          if (
+            insertionMode$jscomp$0 === SVG_MODE ||
+            noscriptTagInScope$jscomp$0 ||
+            null != props.itemProp ||
+            "string" !== typeof precedence$jscomp$0 ||
+            "string" !== typeof href$jscomp$0 ||
+            "" === href$jscomp$0
+          ) {
+            target$jscomp$0.push(startChunkForTag("style"));
+            var children$jscomp$8 = null,
+              innerHTML$jscomp$5 = null,
+              propKey$jscomp$8;
+            for (propKey$jscomp$8 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+                var propValue$jscomp$8 = props[propKey$jscomp$8];
+                if (null != propValue$jscomp$8)
+                  switch (propKey$jscomp$8) {
+                    case "children":
+                      children$jscomp$8 = propValue$jscomp$8;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$5 = propValue$jscomp$8;
+                      break;
+                    default:
+                      pushAttribute(
+                        target$jscomp$0,
+                        propKey$jscomp$8,
+                        propValue$jscomp$8
+                      );
+                  }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            var child$jscomp$1 = Array.isArray(children$jscomp$8)
+              ? 2 > children$jscomp$8.length
+                ? children$jscomp$8[0]
+                : null
+              : children$jscomp$8;
+            "function" !== typeof child$jscomp$1 &&
+              "symbol" !== typeof child$jscomp$1 &&
+              null !== child$jscomp$1 &&
+              void 0 !== child$jscomp$1 &&
+              target$jscomp$0.push(escapeStyleTextContent(child$jscomp$1));
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$5,
+              children$jscomp$8
+            );
+            target$jscomp$0.push(endChunkForTag("style"));
+            var JSCompiler_inline_result$jscomp$7 = null;
+          } else {
+            href$jscomp$0.includes(" ") &&
+              console.error(
+                'React expected the `href` prop for a <style> tag opting into hoisting semantics using the `precedence` prop to not have any spaces but ecountered spaces instead. using spaces in this prop will cause hydration of this style to fail on the client. The href for the <style> where this ocurred is "%s".',
+                href$jscomp$0
+              );
+            var styleQueue$jscomp$0 =
+                renderState.styles.get(precedence$jscomp$0),
+              resourceState$jscomp$1 =
+                resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+                  ? resumableState.styleResources[href$jscomp$0]
+                  : void 0;
+            if (resourceState$jscomp$1 !== EXISTS) {
+              resumableState.styleResources[href$jscomp$0] = EXISTS;
+              resourceState$jscomp$1 &&
+                console.error(
+                  'React encountered a hoistable style tag for the same href as a preload: "%s". When using a style tag to inline styles you should not also preload it as a stylsheet.',
+                  href$jscomp$0
+                );
+              styleQueue$jscomp$0
+                ? styleQueue$jscomp$0.hrefs.push(
+                    escapeTextForBrowser(href$jscomp$0)
+                  )
+                : ((styleQueue$jscomp$0 = {
+                    precedence: escapeTextForBrowser(precedence$jscomp$0),
+                    rules: [],
+                    hrefs: [escapeTextForBrowser(href$jscomp$0)],
+                    sheets: new Map()
+                  }),
+                  renderState.styles.set(
+                    precedence$jscomp$0,
+                    styleQueue$jscomp$0
+                  ));
+              var target = styleQueue$jscomp$0.rules,
+                children$jscomp$9 = null,
+                innerHTML$jscomp$6 = null,
+                propKey$jscomp$9;
+              for (propKey$jscomp$9 in props)
+                if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+                  var propValue$jscomp$9 = props[propKey$jscomp$9];
+                  if (null != propValue$jscomp$9)
+                    switch (propKey$jscomp$9) {
+                      case "children":
+                        children$jscomp$9 = propValue$jscomp$9;
+                        break;
+                      case "dangerouslySetInnerHTML":
+                        innerHTML$jscomp$6 = propValue$jscomp$9;
+                    }
+                }
+              var child$jscomp$2 = Array.isArray(children$jscomp$9)
+                ? 2 > children$jscomp$9.length
+                  ? children$jscomp$9[0]
+                  : null
+                : children$jscomp$9;
+              "function" !== typeof child$jscomp$2 &&
+                "symbol" !== typeof child$jscomp$2 &&
+                null !== child$jscomp$2 &&
+                void 0 !== child$jscomp$2 &&
+                target.push(escapeStyleTextContent(child$jscomp$2));
+              pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$9);
+            }
+            styleQueue$jscomp$0 &&
+              hoistableState &&
+              hoistableState.styles.add(styleQueue$jscomp$0);
+            textEmbedded && target$jscomp$0.push(textSeparator);
+            JSCompiler_inline_result$jscomp$7 = void 0;
+          }
+          return JSCompiler_inline_result$jscomp$7;
+        case "meta":
+          if (
+            formatContext.insertionMode === SVG_MODE ||
+            formatContext.tagScope & 1 ||
+            null != props.itemProp
+          )
+            var JSCompiler_inline_result$jscomp$8 = pushSelfClosing(
+              target$jscomp$0,
+              props,
+              "meta"
+            );
+          else
+            textEmbedded && target$jscomp$0.push(textSeparator),
+              (JSCompiler_inline_result$jscomp$8 = isFallback
+                ? null
+                : "string" === typeof props.charSet
+                  ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+                  : "viewport" === props.name
+                    ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                    : pushSelfClosing(
+                        renderState.hoistableChunks,
+                        props,
+                        "meta"
+                      ));
+          return JSCompiler_inline_result$jscomp$8;
+        case "listing":
+        case "pre":
+          target$jscomp$0.push(startChunkForTag(type));
+          var children$jscomp$10 = null,
+            innerHTML$jscomp$7 = null,
+            propKey$jscomp$10;
+          for (propKey$jscomp$10 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+              var propValue$jscomp$10 = props[propKey$jscomp$10];
+              if (null != propValue$jscomp$10)
+                switch (propKey$jscomp$10) {
+                  case "children":
+                    children$jscomp$10 = propValue$jscomp$10;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$7 = propValue$jscomp$10;
+                    break;
+                  default:
+                    pushAttribute(
+                      target$jscomp$0,
+                      propKey$jscomp$10,
+                      propValue$jscomp$10
+                    );
+                }
+            }
+          target$jscomp$0.push(endOfStartTag);
+          if (null != innerHTML$jscomp$7) {
+            if (null != children$jscomp$10)
+              throw Error(
+                "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+              );
+            if (
+              "object" !== typeof innerHTML$jscomp$7 ||
+              !("__html" in innerHTML$jscomp$7)
+            )
+              throw Error(
+                "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+              );
+            var html = innerHTML$jscomp$7.__html;
+            null !== html &&
+              void 0 !== html &&
+              ("string" === typeof html && 0 < html.length && "\n" === html[0]
+                ? target$jscomp$0.push(leadingNewline, html)
+                : (checkHtmlStringCoercion(html),
+                  target$jscomp$0.push("" + html)));
+          }
+          "string" === typeof children$jscomp$10 &&
+            "\n" === children$jscomp$10[0] &&
+            target$jscomp$0.push(leadingNewline);
+          return children$jscomp$10;
+        case "img":
+          var src = props.src,
+            srcSet = props.srcSet;
+          if (
+            !(
+              "lazy" === props.loading ||
+              (!src && !srcSet) ||
+              ("string" !== typeof src && null != src) ||
+              ("string" !== typeof srcSet && null != srcSet)
+            ) &&
+            "low" !== props.fetchPriority &&
+            !1 === !!(formatContext.tagScope & 3) &&
+            ("string" !== typeof src ||
+              ":" !== src[4] ||
+              ("d" !== src[0] && "D" !== src[0]) ||
+              ("a" !== src[1] && "A" !== src[1]) ||
+              ("t" !== src[2] && "T" !== src[2]) ||
+              ("a" !== src[3] && "A" !== src[3])) &&
+            ("string" !== typeof srcSet ||
+              ":" !== srcSet[4] ||
+              ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+              ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+              ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+              ("a" !== srcSet[3] && "A" !== srcSet[3]))
+          ) {
+            var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+              key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+              promotablePreloads = renderState.preloads.images,
+              resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+            if (resource$jscomp$1) {
+              if (
+                "high" === props.fetchPriority ||
+                10 > renderState.highImagePreloads.size
+              )
+                promotablePreloads.delete(key$jscomp$0),
+                  renderState.highImagePreloads.add(resource$jscomp$1);
+            } else if (
+              !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+            ) {
+              resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+              var input = props.crossOrigin;
+              var crossOrigin =
+                "string" === typeof input
+                  ? "use-credentials" === input
+                    ? input
+                    : ""
+                  : void 0;
+              var headers = renderState.headers,
+                header;
+              headers &&
+              0 < headers.remainingCapacity &&
+              "string" !== typeof props.srcSet &&
+              ("high" === props.fetchPriority ||
+                500 > headers.highImagePreloads.length) &&
+              ((header = getPreloadAsHeader(src, "image", {
+                imageSrcSet: props.srcSet,
+                imageSizes: props.sizes,
+                crossOrigin: crossOrigin,
+                integrity: props.integrity,
+                nonce: props.nonce,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.refererPolicy
+              })),
+              0 <= (headers.remainingCapacity -= header.length + 2))
+                ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+                  headers.highImagePreloads &&
+                    (headers.highImagePreloads += ", "),
+                  (headers.highImagePreloads += header))
+                : ((resource$jscomp$1 = []),
+                  pushLinkImpl(resource$jscomp$1, {
+                    rel: "preload",
+                    as: "image",
+                    href: srcSet ? void 0 : src,
+                    imageSrcSet: srcSet,
+                    imageSizes: sizes,
+                    crossOrigin: crossOrigin,
+                    integrity: props.integrity,
+                    type: props.type,
+                    fetchPriority: props.fetchPriority,
+                    referrerPolicy: props.referrerPolicy
+                  }),
+                  "high" === props.fetchPriority ||
+                  10 > renderState.highImagePreloads.size
+                    ? renderState.highImagePreloads.add(resource$jscomp$1)
+                    : (renderState.bulkPreloads.add(resource$jscomp$1),
+                      promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+            }
+          }
+          return pushSelfClosing(target$jscomp$0, props, "img");
+        case "base":
+        case "area":
+        case "br":
+        case "col":
+        case "embed":
+        case "hr":
+        case "keygen":
+        case "param":
+        case "source":
+        case "track":
+        case "wbr":
+          return pushSelfClosing(target$jscomp$0, props, type);
+        case "annotation-xml":
+        case "color-profile":
+        case "font-face":
+        case "font-face-src":
+        case "font-face-uri":
+        case "font-face-format":
+        case "font-face-name":
+        case "missing-glyph":
+          break;
+        case "head":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble = preambleState || renderState.preamble;
+            if (preamble.headChunks)
+              throw Error("The `<head>` tag may only be rendered once.");
+            preamble.headChunks = [];
+            var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+              preamble.headChunks,
+              props,
+              "head"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "head"
+            );
+          return JSCompiler_inline_result$jscomp$9;
+        case "body":
+          if (formatContext.insertionMode < HTML_MODE) {
+            var preamble$jscomp$0 = preambleState || renderState.preamble;
+            if (preamble$jscomp$0.bodyChunks)
+              throw Error("The `<body>` tag may only be rendered once.");
+            preamble$jscomp$0.bodyChunks = [];
+            var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+              preamble$jscomp$0.bodyChunks,
+              props,
+              "body"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "body"
+            );
+          return JSCompiler_inline_result$jscomp$10;
+        case "html":
+          if (formatContext.insertionMode === ROOT_HTML_MODE) {
+            var preamble$jscomp$1 = preambleState || renderState.preamble;
+            if (preamble$jscomp$1.htmlChunks)
+              throw Error("The `<html>` tag may only be rendered once.");
+            preamble$jscomp$1.htmlChunks = [doctypeChunk];
+            var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+              preamble$jscomp$1.htmlChunks,
+              props,
+              "html"
+            );
+          } else
+            JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+              target$jscomp$0,
+              props,
+              "html"
+            );
+          return JSCompiler_inline_result$jscomp$11;
+        default:
+          if (-1 !== type.indexOf("-")) {
+            target$jscomp$0.push(startChunkForTag(type));
+            var children$jscomp$11 = null,
+              innerHTML$jscomp$8 = null,
+              propKey$jscomp$11;
+            for (propKey$jscomp$11 in props)
+              if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+                var propValue$jscomp$11 = props[propKey$jscomp$11];
+                if (null != propValue$jscomp$11) {
+                  var attributeName = propKey$jscomp$11;
+                  switch (propKey$jscomp$11) {
+                    case "children":
+                      children$jscomp$11 = propValue$jscomp$11;
+                      break;
+                    case "dangerouslySetInnerHTML":
+                      innerHTML$jscomp$8 = propValue$jscomp$11;
+                      break;
+                    case "style":
+                      pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                      break;
+                    case "suppressContentEditableWarning":
+                    case "suppressHydrationWarning":
+                    case "ref":
+                      break;
+                    case "className":
+                      attributeName = "class";
+                    default:
+                      if (
+                        isAttributeNameSafe(propKey$jscomp$11) &&
+                        "function" !== typeof propValue$jscomp$11 &&
+                        "symbol" !== typeof propValue$jscomp$11 &&
+                        !1 !== propValue$jscomp$11
+                      ) {
+                        if (!0 === propValue$jscomp$11)
+                          propValue$jscomp$11 = "";
+                        else if ("object" === typeof propValue$jscomp$11)
+                          continue;
+                        target$jscomp$0.push(
+                          attributeSeparator,
+                          attributeName,
+                          attributeAssign,
+                          escapeTextForBrowser(propValue$jscomp$11),
+                          attributeEnd
+                        );
+                      }
+                  }
+                }
+              }
+            target$jscomp$0.push(endOfStartTag);
+            pushInnerHTML(
+              target$jscomp$0,
+              innerHTML$jscomp$8,
+              children$jscomp$11
+            );
+            return children$jscomp$11;
+          }
+      }
+      return pushStartGenericElement(target$jscomp$0, props, type);
+    }
+    function endChunkForTag(tag) {
+      var chunk = endTagCache.get(tag);
+      void 0 === chunk &&
+        ((chunk = stringToPrecomputedChunk("</" + tag + ">")),
+        endTagCache.set(tag, chunk));
+      return chunk;
+    }
+    function hoistPreambleState(renderState, preambleState) {
+      renderState = renderState.preamble;
+      null === renderState.htmlChunks &&
+        preambleState.htmlChunks &&
+        ((renderState.htmlChunks = preambleState.htmlChunks),
+        (preambleState.contribution |= 1));
+      null === renderState.headChunks &&
+        preambleState.headChunks &&
+        ((renderState.headChunks = preambleState.headChunks),
+        (preambleState.contribution |= 4));
+      null === renderState.bodyChunks &&
+        preambleState.bodyChunks &&
+        ((renderState.bodyChunks = preambleState.bodyChunks),
+        (preambleState.contribution |= 2));
+    }
+    function writeBootstrap(destination, renderState) {
+      renderState = renderState.bootstrapChunks;
+      for (var i = 0; i < renderState.length - 1; i++)
+        writeChunk(destination, renderState[i]);
+      return i < renderState.length
+        ? ((i = renderState[i]),
+          (renderState.length = 0),
+          writeChunkAndReturn(destination, i))
+        : !0;
+    }
+    function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+      writeChunk(destination, startPendingSuspenseBoundary1);
+      if (null === id)
+        throw Error(
+          "An ID must have been assigned before we can complete the boundary."
+        );
+      writeChunk(destination, renderState.boundaryPrefix);
+      writeChunk(destination, id.toString(16));
+      return writeChunkAndReturn(destination, startPendingSuspenseBoundary2);
+    }
+    function writePreambleContribution(destination, preambleState) {
+      preambleState = preambleState.contribution;
+      preambleState !== NoContribution &&
+        (writeChunk(destination, boundaryPreambleContributionChunkStart),
+        writeChunk(destination, "" + preambleState),
+        writeChunk(destination, boundaryPreambleContributionChunkEnd));
+    }
+    function writeStartSegment(destination, renderState, formatContext, id) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return (
+            writeChunk(destination, startSegmentHTML),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, id.toString(16)),
+            writeChunkAndReturn(destination, startSegmentHTML2)
+          );
+        case SVG_MODE:
+          return (
+            writeChunk(destination, startSegmentSVG),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, id.toString(16)),
+            writeChunkAndReturn(destination, startSegmentSVG2)
+          );
+        case MATHML_MODE:
+          return (
+            writeChunk(destination, startSegmentMathML),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, id.toString(16)),
+            writeChunkAndReturn(destination, startSegmentMathML2)
+          );
+        case HTML_TABLE_MODE:
+          return (
+            writeChunk(destination, startSegmentTable),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, id.toString(16)),
+            writeChunkAndReturn(destination, startSegmentTable2)
+          );
+        case HTML_TABLE_BODY_MODE:
+          return (
+            writeChunk(destination, startSegmentTableBody),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, id.toString(16)),
+            writeChunkAndReturn(destination, startSegmentTableBody2)
+          );
+        case HTML_TABLE_ROW_MODE:
+          return (
+            writeChunk(destination, startSegmentTableRow),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, id.toString(16)),
+            writeChunkAndReturn(destination, startSegmentTableRow2)
+          );
+        case HTML_COLGROUP_MODE:
+          return (
+            writeChunk(destination, startSegmentColGroup),
+            writeChunk(destination, renderState.segmentPrefix),
+            writeChunk(destination, id.toString(16)),
+            writeChunkAndReturn(destination, startSegmentColGroup2)
+          );
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function writeEndSegment(destination, formatContext) {
+      switch (formatContext.insertionMode) {
+        case ROOT_HTML_MODE:
+        case HTML_HTML_MODE:
+        case HTML_HEAD_MODE:
+        case HTML_MODE:
+          return writeChunkAndReturn(destination, endSegmentHTML);
+        case SVG_MODE:
+          return writeChunkAndReturn(destination, endSegmentSVG);
+        case MATHML_MODE:
+          return writeChunkAndReturn(destination, endSegmentMathML);
+        case HTML_TABLE_MODE:
+          return writeChunkAndReturn(destination, endSegmentTable);
+        case HTML_TABLE_BODY_MODE:
+          return writeChunkAndReturn(destination, endSegmentTableBody);
+        case HTML_TABLE_ROW_MODE:
+          return writeChunkAndReturn(destination, endSegmentTableRow);
+        case HTML_COLGROUP_MODE:
+          return writeChunkAndReturn(destination, endSegmentColGroup);
+        default:
+          throw Error("Unknown insertion mode. This is a bug in React.");
+      }
+    }
+    function escapeJSStringsForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInInstructionScripts,
+        function (match) {
+          switch (match) {
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function escapeJSObjectForInstructionScripts(input) {
+      return JSON.stringify(input).replace(
+        regexForJSStringsInScripts,
+        function (match) {
+          switch (match) {
+            case "&":
+              return "\\u0026";
+            case ">":
+              return "\\u003e";
+            case "<":
+              return "\\u003c";
+            case "\u2028":
+              return "\\u2028";
+            case "\u2029":
+              return "\\u2029";
+            default:
+              throw Error(
+                "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+              );
+          }
+        }
+      );
+    }
+    function flushStyleTagsLateForBoundary(styleQueue) {
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      0 < rules.length &&
+        0 === hrefs.length &&
+        console.error(
+          "React expected to have at least one href for an a hoistable style but found none. This is a bug in React."
+        );
+      var i = 0;
+      if (hrefs.length) {
+        writeChunk(this, lateStyleTagResourceOpen1);
+        writeChunk(this, styleQueue.precedence);
+        for (
+          writeChunk(this, lateStyleTagResourceOpen2);
+          i < hrefs.length - 1;
+          i++
+        )
+          writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator);
+        writeChunk(this, hrefs[i]);
+        writeChunk(this, lateStyleTagResourceOpen3);
+        for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]);
+        destinationHasCapacity = writeChunkAndReturn(
+          this,
+          lateStyleTagTemplateClose
+        );
+        currentlyRenderingBoundaryHasStylesToHoist = !0;
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function hasStylesToHoist(stylesheet) {
+      return stylesheet.state !== PREAMBLE
+        ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+        : !1;
+    }
+    function writeHoistablesForBoundary(
+      destination,
+      hoistableState,
+      renderState
+    ) {
+      currentlyRenderingBoundaryHasStylesToHoist = !1;
+      destinationHasCapacity = !0;
+      hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+      hoistableState.stylesheets.forEach(hasStylesToHoist);
+      currentlyRenderingBoundaryHasStylesToHoist &&
+        (renderState.stylesToHoist = !0);
+      return destinationHasCapacity;
+    }
+    function flushResource(resource) {
+      for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]);
+      resource.length = 0;
+    }
+    function flushStyleInPreamble(stylesheet) {
+      pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+      for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+        writeChunk(this, stylesheetFlushingQueue[i]);
+      stylesheetFlushingQueue.length = 0;
+      stylesheet.state = PREAMBLE;
+    }
+    function flushStylesInPreamble(styleQueue) {
+      var hasStylesheets = 0 < styleQueue.sheets.size;
+      styleQueue.sheets.forEach(flushStyleInPreamble, this);
+      styleQueue.sheets.clear();
+      var rules = styleQueue.rules,
+        hrefs = styleQueue.hrefs;
+      if (!hasStylesheets || hrefs.length) {
+        writeChunk(this, styleTagResourceOpen1);
+        writeChunk(this, styleQueue.precedence);
+        styleQueue = 0;
+        if (hrefs.length) {
+          for (
+            writeChunk(this, styleTagResourceOpen2);
+            styleQueue < hrefs.length - 1;
+            styleQueue++
+          )
+            writeChunk(this, hrefs[styleQueue]),
+              writeChunk(this, spaceSeparator);
+          writeChunk(this, hrefs[styleQueue]);
+        }
+        writeChunk(this, styleTagResourceOpen3);
+        for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+          writeChunk(this, rules[styleQueue]);
+        writeChunk(this, styleTagResourceClose);
+        rules.length = 0;
+        hrefs.length = 0;
+      }
+    }
+    function preloadLateStyle(stylesheet) {
+      if (stylesheet.state === PENDING$1) {
+        stylesheet.state = PRELOADED;
+        var props = stylesheet.props;
+        pushLinkImpl(stylesheetFlushingQueue, {
+          rel: "preload",
+          as: "style",
+          href: stylesheet.props.href,
+          crossOrigin: props.crossOrigin,
+          fetchPriority: props.fetchPriority,
+          integrity: props.integrity,
+          media: props.media,
+          hrefLang: props.hrefLang,
+          referrerPolicy: props.referrerPolicy
+        });
+        for (
+          stylesheet = 0;
+          stylesheet < stylesheetFlushingQueue.length;
+          stylesheet++
+        )
+          writeChunk(this, stylesheetFlushingQueue[stylesheet]);
+        stylesheetFlushingQueue.length = 0;
+      }
+    }
+    function preloadLateStyles(styleQueue) {
+      styleQueue.sheets.forEach(preloadLateStyle, this);
+      styleQueue.sheets.clear();
+    }
+    function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+      writeChunk(destination, arrayFirstOpenBracket);
+      var nextArrayOpenBrackChunk = arrayFirstOpenBracket;
+      hoistableState.stylesheets.forEach(function (resource) {
+        if (resource.state !== PREAMBLE)
+          if (resource.state === LATE)
+            writeChunk(destination, nextArrayOpenBrackChunk),
+              (resource = resource.props.href),
+              checkAttributeStringCoercion(resource, "href"),
+              writeChunk(
+                destination,
+                escapeJSObjectForInstructionScripts("" + resource)
+              ),
+              writeChunk(destination, arrayCloseBracket),
+              (nextArrayOpenBrackChunk = arraySubsequentOpenBracket);
+          else {
+            writeChunk(destination, nextArrayOpenBrackChunk);
+            var precedence = resource.props["data-precedence"],
+              props = resource.props,
+              coercedHref = sanitizeURL("" + resource.props.href);
+            writeChunk(
+              destination,
+              escapeJSObjectForInstructionScripts(coercedHref)
+            );
+            checkAttributeStringCoercion(precedence, "precedence");
+            precedence = "" + precedence;
+            writeChunk(destination, arrayInterstitial);
+            writeChunk(
+              destination,
+              escapeJSObjectForInstructionScripts(precedence)
+            );
+            for (var propKey in props)
+              if (
+                hasOwnProperty.call(props, propKey) &&
+                ((precedence = props[propKey]), null != precedence)
+              )
+                switch (propKey) {
+                  case "href":
+                  case "rel":
+                  case "precedence":
+                  case "data-precedence":
+                    break;
+                  case "children":
+                  case "dangerouslySetInnerHTML":
+                    throw Error(
+                      "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                    );
+                  default:
+                    writeStyleResourceAttributeInJS(
+                      destination,
+                      propKey,
+                      precedence
+                    );
+                }
+            writeChunk(destination, arrayCloseBracket);
+            nextArrayOpenBrackChunk = arraySubsequentOpenBracket;
+            resource.state = LATE;
+          }
+      });
+      writeChunk(destination, arrayCloseBracket);
+    }
+    function writeStyleResourceAttributeInJS(destination, name, value) {
+      var attributeName = name.toLowerCase();
+      switch (typeof value) {
+        case "function":
+        case "symbol":
+          return;
+      }
+      switch (name) {
+        case "innerHTML":
+        case "dangerouslySetInnerHTML":
+        case "suppressContentEditableWarning":
+        case "suppressHydrationWarning":
+        case "style":
+        case "ref":
+          return;
+        case "className":
+          attributeName = "class";
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        case "hidden":
+          if (!1 === value) return;
+          name = "";
+          break;
+        case "src":
+        case "href":
+          value = sanitizeURL(value);
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+          break;
+        default:
+          if (
+            (2 < name.length &&
+              ("o" === name[0] || "O" === name[0]) &&
+              ("n" === name[1] || "N" === name[1])) ||
+            !isAttributeNameSafe(name)
+          )
+            return;
+          checkAttributeStringCoercion(value, attributeName);
+          name = "" + value;
+      }
+      writeChunk(destination, arrayInterstitial);
+      writeChunk(
+        destination,
+        escapeJSObjectForInstructionScripts(attributeName)
+      );
+      writeChunk(destination, arrayInterstitial);
+      writeChunk(destination, escapeJSObjectForInstructionScripts(name));
+    }
+    function createHoistableState() {
+      return { styles: new Set(), stylesheets: new Set() };
+    }
+    function preloadBootstrapScriptOrModule(
+      resumableState,
+      renderState,
+      href,
+      props
+    ) {
+      (resumableState.scriptResources.hasOwnProperty(href) ||
+        resumableState.moduleScriptResources.hasOwnProperty(href)) &&
+        console.error(
+          'Internal React Error: React expected bootstrap script or module with src "%s" to not have been preloaded already. please file an issue',
+          href
+        );
+      resumableState.scriptResources[href] = EXISTS;
+      resumableState.moduleScriptResources[href] = EXISTS;
+      resumableState = [];
+      pushLinkImpl(resumableState, props);
+      renderState.bootstrapScripts.add(resumableState);
+    }
+    function adoptPreloadCredentials(target, preloadState) {
+      null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+      null == target.integrity && (target.integrity = preloadState[1]);
+    }
+    function getPreloadAsHeader(href, as, params) {
+      href = escapeHrefForLinkHeaderURLContext(href);
+      as = escapeStringForLinkHeaderQuotedParamValueContext(as, "as");
+      as = "<" + href + '>; rel=preload; as="' + as + '"';
+      for (var paramName in params)
+        hasOwnProperty.call(params, paramName) &&
+          ((href = params[paramName]),
+          "string" === typeof href &&
+            (as +=
+              "; " +
+              paramName.toLowerCase() +
+              '="' +
+              escapeStringForLinkHeaderQuotedParamValueContext(
+                href,
+                paramName
+              ) +
+              '"'));
+      return as;
+    }
+    function escapeHrefForLinkHeaderURLContext(hrefInput) {
+      checkAttributeStringCoercion(hrefInput, "href");
+      return ("" + hrefInput).replace(
+        regexForHrefInLinkHeaderURLContext,
+        escapeHrefForLinkHeaderURLContextReplacer
+      );
+    }
+    function escapeHrefForLinkHeaderURLContextReplacer(match) {
+      switch (match) {
+        case "<":
+          return "%3C";
+        case ">":
+          return "%3E";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContext(value, name) {
+      willCoercionThrow(value) &&
+        (console.error(
+          "The provided `%s` option is an unsupported type %s. This value must be coerced to a string before using it here.",
+          name,
+          typeName(value)
+        ),
+        testStringCoercion(value));
+      return ("" + value).replace(
+        regexForLinkHeaderQuotedParamValueContext,
+        escapeStringForLinkHeaderQuotedParamValueContextReplacer
+      );
+    }
+    function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+      switch (match) {
+        case '"':
+          return "%22";
+        case "'":
+          return "%27";
+        case ";":
+          return "%3B";
+        case ",":
+          return "%2C";
+        case "\n":
+          return "%0A";
+        case "\r":
+          return "%0D";
+        default:
+          throw Error(
+            "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+    function hoistStyleQueueDependency(styleQueue) {
+      this.styles.add(styleQueue);
+    }
+    function hoistStylesheetDependency(stylesheet) {
+      this.stylesheets.add(stylesheet);
+    }
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function popToNearestCommonAncestor(prev, next) {
+      if (prev !== next) {
+        prev.context._currentValue = prev.parentValue;
+        prev = prev.parent;
+        var parentNext = next.parent;
+        if (null === prev) {
+          if (null !== parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+        } else {
+          if (null === parentNext)
+            throw Error(
+              "The stacks must reach the root at the same time. This is a bug in React."
+            );
+          popToNearestCommonAncestor(prev, parentNext);
+        }
+        next.context._currentValue = next.value;
+      }
+    }
+    function popAllPrevious(prev) {
+      prev.context._currentValue = prev.parentValue;
+      prev = prev.parent;
+      null !== prev && popAllPrevious(prev);
+    }
+    function pushAllNext(next) {
+      var parentNext = next.parent;
+      null !== parentNext && pushAllNext(parentNext);
+      next.context._currentValue = next.value;
+    }
+    function popPreviousToCommonLevel(prev, next) {
+      prev.context._currentValue = prev.parentValue;
+      prev = prev.parent;
+      if (null === prev)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === next.depth
+        ? popToNearestCommonAncestor(prev, next)
+        : popPreviousToCommonLevel(prev, next);
+    }
+    function popNextToCommonLevel(prev, next) {
+      var parentNext = next.parent;
+      if (null === parentNext)
+        throw Error(
+          "The depth must equal at least at zero before reaching the root. This is a bug in React."
+        );
+      prev.depth === parentNext.depth
+        ? popToNearestCommonAncestor(prev, parentNext)
+        : popNextToCommonLevel(prev, parentNext);
+      next.context._currentValue = next.value;
+    }
+    function switchContext(newSnapshot) {
+      var prev = currentActiveSnapshot;
+      prev !== newSnapshot &&
+        (null === prev
+          ? pushAllNext(newSnapshot)
+          : null === newSnapshot
+            ? popAllPrevious(prev)
+            : prev.depth === newSnapshot.depth
+              ? popToNearestCommonAncestor(prev, newSnapshot)
+              : prev.depth > newSnapshot.depth
+                ? popPreviousToCommonLevel(prev, newSnapshot)
+                : popNextToCommonLevel(prev, newSnapshot),
+        (currentActiveSnapshot = newSnapshot));
+    }
+    function warnOnInvalidCallback(callback) {
+      if (null !== callback && "function" !== typeof callback) {
+        var key = String(callback);
+        didWarnOnInvalidCallback.has(key) ||
+          (didWarnOnInvalidCallback.add(key),
+          console.error(
+            "Expected the last optional `callback` argument to be a function. Instead received: %s.",
+            callback
+          ));
+      }
+    }
+    function warnNoop(publicInstance, callerName) {
+      publicInstance =
+        ((publicInstance = publicInstance.constructor) &&
+          getComponentNameFromType(publicInstance)) ||
+        "ReactClass";
+      var warningKey = publicInstance + "." + callerName;
+      didWarnAboutNoopUpdateForComponent[warningKey] ||
+        (console.error(
+          "Can only update a mounting component. This usually means you called %s() outside componentWillMount() on the server. This is a no-op.\n\nPlease check the code for the %s component.",
+          callerName,
+          publicInstance
+        ),
+        (didWarnAboutNoopUpdateForComponent[warningKey] = !0));
+    }
+    function pushTreeContext(baseContext, totalChildren, index) {
+      var baseIdWithLeadingBit = baseContext.id;
+      baseContext = baseContext.overflow;
+      var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+      baseIdWithLeadingBit &= ~(1 << baseLength);
+      index += 1;
+      var length = 32 - clz32(totalChildren) + baseLength;
+      if (30 < length) {
+        var numberOfOverflowBits = baseLength - (baseLength % 5);
+        length = (
+          baseIdWithLeadingBit &
+          ((1 << numberOfOverflowBits) - 1)
+        ).toString(32);
+        baseIdWithLeadingBit >>= numberOfOverflowBits;
+        baseLength -= numberOfOverflowBits;
+        return {
+          id:
+            (1 << (32 - clz32(totalChildren) + baseLength)) |
+            (index << baseLength) |
+            baseIdWithLeadingBit,
+          overflow: length + baseContext
+        };
+      }
+      return {
+        id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+        overflow: baseContext
+      };
+    }
+    function clz32Fallback(x) {
+      x >>>= 0;
+      return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+    }
+    function noop$2() {}
+    function trackUsedThenable(thenableState, thenable, index) {
+      index = thenableState[index];
+      void 0 === index
+        ? thenableState.push(thenable)
+        : index !== thenable &&
+          (thenable.then(noop$2, noop$2), (thenable = index));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+        default:
+          "string" === typeof thenable.status
+            ? thenable.then(noop$2, noop$2)
+            : ((thenableState = thenable),
+              (thenableState.status = "pending"),
+              thenableState.then(
+                function (fulfilledValue) {
+                  if ("pending" === thenable.status) {
+                    var fulfilledThenable = thenable;
+                    fulfilledThenable.status = "fulfilled";
+                    fulfilledThenable.value = fulfilledValue;
+                  }
+                },
+                function (error) {
+                  if ("pending" === thenable.status) {
+                    var rejectedThenable = thenable;
+                    rejectedThenable.status = "rejected";
+                    rejectedThenable.reason = error;
+                  }
+                }
+              ));
+          switch (thenable.status) {
+            case "fulfilled":
+              return thenable.value;
+            case "rejected":
+              throw thenable.reason;
+          }
+          suspendedThenable = thenable;
+          throw SuspenseException;
+      }
+    }
+    function getSuspendedThenable() {
+      if (null === suspendedThenable)
+        throw Error(
+          "Expected a suspended thenable. This is a bug in React. Please file an issue."
+        );
+      var thenable = suspendedThenable;
+      suspendedThenable = null;
+      return thenable;
+    }
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    function resolveCurrentlyRenderingComponent() {
+      if (null === currentlyRenderingComponent)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      isInHookUserCodeInDev &&
+        console.error(
+          "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"
+        );
+      return currentlyRenderingComponent;
+    }
+    function createHook() {
+      if (0 < numberOfReRenders)
+        throw Error("Rendered more hooks than during the previous render");
+      return { memoizedState: null, queue: null, next: null };
+    }
+    function createWorkInProgressHook() {
+      null === workInProgressHook
+        ? null === firstWorkInProgressHook
+          ? ((isReRender = !1),
+            (firstWorkInProgressHook = workInProgressHook = createHook()))
+          : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+        : null === workInProgressHook.next
+          ? ((isReRender = !1),
+            (workInProgressHook = workInProgressHook.next = createHook()))
+          : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+      return workInProgressHook;
+    }
+    function getThenableStateAfterSuspending() {
+      var state = thenableState;
+      thenableState = null;
+      return state;
+    }
+    function resetHooksState() {
+      isInHookUserCodeInDev = !1;
+      currentlyRenderingKeyPath =
+        currentlyRenderingRequest =
+        currentlyRenderingTask =
+        currentlyRenderingComponent =
+          null;
+      didScheduleRenderPhaseUpdate = !1;
+      firstWorkInProgressHook = null;
+      numberOfReRenders = 0;
+      workInProgressHook = renderPhaseUpdates = null;
+    }
+    function readContext(context) {
+      isInHookUserCodeInDev &&
+        console.error(
+          "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."
+        );
+      return context._currentValue;
+    }
+    function basicStateReducer(state, action) {
+      return "function" === typeof action ? action(state) : action;
+    }
+    function useReducer(reducer, initialArg, init) {
+      reducer !== basicStateReducer && (currentHookNameInDev = "useReducer");
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      if (isReRender) {
+        init = workInProgressHook.queue;
+        initialArg = init.dispatch;
+        if (null !== renderPhaseUpdates) {
+          var firstRenderPhaseUpdate = renderPhaseUpdates.get(init);
+          if (void 0 !== firstRenderPhaseUpdate) {
+            renderPhaseUpdates.delete(init);
+            init = workInProgressHook.memoizedState;
+            do {
+              var action = firstRenderPhaseUpdate.action;
+              isInHookUserCodeInDev = !0;
+              init = reducer(init, action);
+              isInHookUserCodeInDev = !1;
+              firstRenderPhaseUpdate = firstRenderPhaseUpdate.next;
+            } while (null !== firstRenderPhaseUpdate);
+            workInProgressHook.memoizedState = init;
+            return [init, initialArg];
+          }
+        }
+        return [workInProgressHook.memoizedState, initialArg];
+      }
+      isInHookUserCodeInDev = !0;
+      reducer =
+        reducer === basicStateReducer
+          ? "function" === typeof initialArg
+            ? initialArg()
+            : initialArg
+          : void 0 !== init
+            ? init(initialArg)
+            : initialArg;
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = reducer;
+      reducer = workInProgressHook.queue = { last: null, dispatch: null };
+      reducer = reducer.dispatch = dispatchAction.bind(
+        null,
+        currentlyRenderingComponent,
+        reducer
+      );
+      return [workInProgressHook.memoizedState, reducer];
+    }
+    function useMemo(nextCreate, deps) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      deps = void 0 === deps ? null : deps;
+      if (null !== workInProgressHook) {
+        var prevState = workInProgressHook.memoizedState;
+        if (null !== prevState && null !== deps) {
+          a: {
+            var JSCompiler_inline_result = prevState[1];
+            if (null === JSCompiler_inline_result)
+              console.error(
+                "%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.",
+                currentHookNameInDev
+              ),
+                (JSCompiler_inline_result = !1);
+            else {
+              deps.length !== JSCompiler_inline_result.length &&
+                console.error(
+                  "The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s",
+                  currentHookNameInDev,
+                  "[" + deps.join(", ") + "]",
+                  "[" + JSCompiler_inline_result.join(", ") + "]"
+                );
+              for (
+                var i = 0;
+                i < JSCompiler_inline_result.length && i < deps.length;
+                i++
+              )
+                if (!objectIs(deps[i], JSCompiler_inline_result[i])) {
+                  JSCompiler_inline_result = !1;
+                  break a;
+                }
+              JSCompiler_inline_result = !0;
+            }
+          }
+          if (JSCompiler_inline_result) return prevState[0];
+        }
+      }
+      isInHookUserCodeInDev = !0;
+      nextCreate = nextCreate();
+      isInHookUserCodeInDev = !1;
+      workInProgressHook.memoizedState = [nextCreate, deps];
+      return nextCreate;
+    }
+    function dispatchAction(componentIdentity, queue, action) {
+      if (25 <= numberOfReRenders)
+        throw Error(
+          "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+        );
+      if (componentIdentity === currentlyRenderingComponent)
+        if (
+          ((didScheduleRenderPhaseUpdate = !0),
+          (componentIdentity = { action: action, next: null }),
+          null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+          (action = renderPhaseUpdates.get(queue)),
+          void 0 === action)
+        )
+          renderPhaseUpdates.set(queue, componentIdentity);
+        else {
+          for (queue = action; null !== queue.next; ) queue = queue.next;
+          queue.next = componentIdentity;
+        }
+    }
+    function unsupportedStartTransition() {
+      throw Error("startTransition cannot be called during server rendering.");
+    }
+    function unsupportedSetOptimisticState() {
+      throw Error("Cannot update optimistic state while rendering.");
+    }
+    function createPostbackActionStateKey(
+      permalink,
+      componentKeyPath,
+      hookIndex
+    ) {
+      if (void 0 !== permalink) return "p" + permalink;
+      permalink = JSON.stringify([componentKeyPath, null, hookIndex]);
+      componentKeyPath = crypto.createHash("md5");
+      componentKeyPath.update(permalink);
+      return "k" + componentKeyPath.digest("hex");
+    }
+    function useActionState(action, initialState, permalink) {
+      resolveCurrentlyRenderingComponent();
+      var actionStateHookIndex = actionStateCounter++,
+        request = currentlyRenderingRequest;
+      if ("function" === typeof action.$$FORM_ACTION) {
+        var nextPostbackStateKey = null,
+          componentKeyPath = currentlyRenderingKeyPath;
+        request = request.formState;
+        var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+        if (null !== request && "function" === typeof isSignatureEqual) {
+          var postbackKey = request[1];
+          isSignatureEqual.call(action, request[2], request[3]) &&
+            ((nextPostbackStateKey = createPostbackActionStateKey(
+              permalink,
+              componentKeyPath,
+              actionStateHookIndex
+            )),
+            postbackKey === nextPostbackStateKey &&
+              ((actionStateMatchingIndex = actionStateHookIndex),
+              (initialState = request[0])));
+        }
+        var boundAction = action.bind(null, initialState);
+        action = function (payload) {
+          boundAction(payload);
+        };
+        "function" === typeof boundAction.$$FORM_ACTION &&
+          (action.$$FORM_ACTION = function (prefix) {
+            prefix = boundAction.$$FORM_ACTION(prefix);
+            void 0 !== permalink &&
+              (checkAttributeStringCoercion(permalink, "target"),
+              (permalink += ""),
+              (prefix.action = permalink));
+            var formData = prefix.data;
+            formData &&
+              (null === nextPostbackStateKey &&
+                (nextPostbackStateKey = createPostbackActionStateKey(
+                  permalink,
+                  componentKeyPath,
+                  actionStateHookIndex
+                )),
+              formData.append("$ACTION_KEY", nextPostbackStateKey));
+            return prefix;
+          });
+        return [initialState, action, !1];
+      }
+      var _boundAction = action.bind(null, initialState);
+      return [
+        initialState,
+        function (payload) {
+          _boundAction(payload);
+        },
+        !1
+      ];
+    }
+    function unwrapThenable(thenable) {
+      var index = thenableIndexCounter;
+      thenableIndexCounter += 1;
+      null === thenableState && (thenableState = []);
+      return trackUsedThenable(thenableState, thenable, index);
+    }
+    function unsupportedRefresh() {
+      throw Error("Cache cannot be refreshed during server rendering.");
+    }
+    function noop$1() {}
+    function disabledLog() {}
+    function disableLogs() {
+      if (0 === disabledDepth) {
+        prevLog = console.log;
+        prevInfo = console.info;
+        prevWarn = console.warn;
+        prevError = console.error;
+        prevGroup = console.group;
+        prevGroupCollapsed = console.groupCollapsed;
+        prevGroupEnd = console.groupEnd;
+        var props = {
+          configurable: !0,
+          enumerable: !0,
+          value: disabledLog,
+          writable: !0
+        };
+        Object.defineProperties(console, {
+          info: props,
+          log: props,
+          warn: props,
+          error: props,
+          group: props,
+          groupCollapsed: props,
+          groupEnd: props
+        });
+      }
+      disabledDepth++;
+    }
+    function reenableLogs() {
+      disabledDepth--;
+      if (0 === disabledDepth) {
+        var props = { configurable: !0, enumerable: !0, writable: !0 };
+        Object.defineProperties(console, {
+          log: assign({}, props, { value: prevLog }),
+          info: assign({}, props, { value: prevInfo }),
+          warn: assign({}, props, { value: prevWarn }),
+          error: assign({}, props, { value: prevError }),
+          group: assign({}, props, { value: prevGroup }),
+          groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
+          groupEnd: assign({}, props, { value: prevGroupEnd })
+        });
+      }
+      0 > disabledDepth &&
+        console.error(
+          "disabledDepth fell below zero. This is a bug in React. Please file an issue."
+        );
+    }
+    function prepareStackTrace(error, structuredStackTrace) {
+      error = (error.name || "Error") + ": " + (error.message || "");
+      for (var i = 0; i < structuredStackTrace.length; i++)
+        error += "\n    at " + structuredStackTrace[i].toString();
+      return error;
+    }
+    function describeBuiltInComponentFrame(name) {
+      if (void 0 === prefix)
+        try {
+          throw Error();
+        } catch (x) {
+          var match = x.stack.trim().match(/\n( *(at )?)/);
+          prefix = (match && match[1]) || "";
+          suffix =
+            -1 < x.stack.indexOf("\n    at")
+              ? " (<anonymous>)"
+              : -1 < x.stack.indexOf("@")
+                ? "@unknown:0:0"
+                : "";
+        }
+      return "\n" + prefix + name + suffix;
+    }
+    function describeNativeComponentFrame(fn, construct) {
+      if (!fn || reentry) return "";
+      var frame = componentFrameCache.get(fn);
+      if (void 0 !== frame) return frame;
+      reentry = !0;
+      frame = Error.prepareStackTrace;
+      Error.prepareStackTrace = prepareStackTrace;
+      var previousDispatcher = null;
+      previousDispatcher = ReactSharedInternals.H;
+      ReactSharedInternals.H = null;
+      disableLogs();
+      try {
+        var RunInRootFrame = {
+          DetermineComponentFrameRoot: function () {
+            try {
+              if (construct) {
+                var Fake = function () {
+                  throw Error();
+                };
+                Object.defineProperty(Fake.prototype, "props", {
+                  set: function () {
+                    throw Error();
+                  }
+                });
+                if ("object" === typeof Reflect && Reflect.construct) {
+                  try {
+                    Reflect.construct(Fake, []);
+                  } catch (x) {
+                    var control = x;
+                  }
+                  Reflect.construct(fn, [], Fake);
+                } else {
+                  try {
+                    Fake.call();
+                  } catch (x$0) {
+                    control = x$0;
+                  }
+                  fn.call(Fake.prototype);
+                }
+              } else {
+                try {
+                  throw Error();
+                } catch (x$1) {
+                  control = x$1;
+                }
+                (Fake = fn()) &&
+                  "function" === typeof Fake.catch &&
+                  Fake.catch(function () {});
+              }
+            } catch (sample) {
+              if (sample && control && "string" === typeof sample.stack)
+                return [sample.stack, control.stack];
+            }
+            return [null, null];
+          }
+        };
+        RunInRootFrame.DetermineComponentFrameRoot.displayName =
+          "DetermineComponentFrameRoot";
+        var namePropDescriptor = Object.getOwnPropertyDescriptor(
+          RunInRootFrame.DetermineComponentFrameRoot,
+          "name"
+        );
+        namePropDescriptor &&
+          namePropDescriptor.configurable &&
+          Object.defineProperty(
+            RunInRootFrame.DetermineComponentFrameRoot,
+            "name",
+            { value: "DetermineComponentFrameRoot" }
+          );
+        var _RunInRootFrame$Deter =
+            RunInRootFrame.DetermineComponentFrameRoot(),
+          sampleStack = _RunInRootFrame$Deter[0],
+          controlStack = _RunInRootFrame$Deter[1];
+        if (sampleStack && controlStack) {
+          var sampleLines = sampleStack.split("\n"),
+            controlLines = controlStack.split("\n");
+          for (
+            _RunInRootFrame$Deter = namePropDescriptor = 0;
+            namePropDescriptor < sampleLines.length &&
+            !sampleLines[namePropDescriptor].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            namePropDescriptor++;
+          for (
+            ;
+            _RunInRootFrame$Deter < controlLines.length &&
+            !controlLines[_RunInRootFrame$Deter].includes(
+              "DetermineComponentFrameRoot"
+            );
+
+          )
+            _RunInRootFrame$Deter++;
+          if (
+            namePropDescriptor === sampleLines.length ||
+            _RunInRootFrame$Deter === controlLines.length
+          )
+            for (
+              namePropDescriptor = sampleLines.length - 1,
+                _RunInRootFrame$Deter = controlLines.length - 1;
+              1 <= namePropDescriptor &&
+              0 <= _RunInRootFrame$Deter &&
+              sampleLines[namePropDescriptor] !==
+                controlLines[_RunInRootFrame$Deter];
+
+            )
+              _RunInRootFrame$Deter--;
+          for (
+            ;
+            1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;
+            namePropDescriptor--, _RunInRootFrame$Deter--
+          )
+            if (
+              sampleLines[namePropDescriptor] !==
+              controlLines[_RunInRootFrame$Deter]
+            ) {
+              if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {
+                do
+                  if (
+                    (namePropDescriptor--,
+                    _RunInRootFrame$Deter--,
+                    0 > _RunInRootFrame$Deter ||
+                      sampleLines[namePropDescriptor] !==
+                        controlLines[_RunInRootFrame$Deter])
+                  ) {
+                    var _frame =
+                      "\n" +
+                      sampleLines[namePropDescriptor].replace(
+                        " at new ",
+                        " at "
+                      );
+                    fn.displayName &&
+                      _frame.includes("<anonymous>") &&
+                      (_frame = _frame.replace("<anonymous>", fn.displayName));
+                    "function" === typeof fn &&
+                      componentFrameCache.set(fn, _frame);
+                    return _frame;
+                  }
+                while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
+              }
+              break;
+            }
+        }
+      } finally {
+        (reentry = !1),
+          (ReactSharedInternals.H = previousDispatcher),
+          reenableLogs(),
+          (Error.prepareStackTrace = frame);
+      }
+      sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "")
+        ? describeBuiltInComponentFrame(sampleLines)
+        : "";
+      "function" === typeof fn && componentFrameCache.set(fn, sampleLines);
+      return sampleLines;
+    }
+    function formatOwnerStack(error) {
+      var prevPrepareStackTrace = Error.prepareStackTrace;
+      Error.prepareStackTrace = prepareStackTrace;
+      error = error.stack;
+      Error.prepareStackTrace = prevPrepareStackTrace;
+      error.startsWith("Error: react-stack-top-frame\n") &&
+        (error = error.slice(29));
+      prevPrepareStackTrace = error.indexOf("\n");
+      -1 !== prevPrepareStackTrace &&
+        (error = error.slice(prevPrepareStackTrace + 1));
+      prevPrepareStackTrace = error.indexOf("react_stack_bottom_frame");
+      -1 !== prevPrepareStackTrace &&
+        (prevPrepareStackTrace = error.lastIndexOf(
+          "\n",
+          prevPrepareStackTrace
+        ));
+      if (-1 !== prevPrepareStackTrace)
+        error = error.slice(0, prevPrepareStackTrace);
+      else return "";
+      return error;
+    }
+    function describeComponentStackByType(type) {
+      if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+      if ("function" === typeof type)
+        return type.prototype && type.prototype.isReactComponent
+          ? describeNativeComponentFrame(type, !0)
+          : describeNativeComponentFrame(type, !1);
+      if ("object" === typeof type && null !== type) {
+        switch (type.$$typeof) {
+          case REACT_FORWARD_REF_TYPE:
+            return describeNativeComponentFrame(type.render, !1);
+          case REACT_MEMO_TYPE:
+            return describeNativeComponentFrame(type.type, !1);
+          case REACT_LAZY_TYPE:
+            var lazyComponent = type,
+              payload = lazyComponent._payload;
+            lazyComponent = lazyComponent._init;
+            try {
+              type = lazyComponent(payload);
+            } catch (x) {
+              return describeBuiltInComponentFrame("Lazy");
+            }
+            return describeComponentStackByType(type);
+        }
+        if ("string" === typeof type.name)
+          return (
+            (payload = type.env),
+            describeBuiltInComponentFrame(
+              type.name + (payload ? " [" + payload + "]" : "")
+            )
+          );
+      }
+      switch (type) {
+        case REACT_SUSPENSE_LIST_TYPE:
+          return describeBuiltInComponentFrame("SuspenseList");
+        case REACT_SUSPENSE_TYPE:
+          return describeBuiltInComponentFrame("Suspense");
+      }
+      return "";
+    }
+    function defaultErrorHandler(error) {
+      if (
+        "object" === typeof error &&
+        null !== error &&
+        "string" === typeof error.environmentName
+      ) {
+        var JSCompiler_inline_result = error.environmentName;
+        error = [error].slice(0);
+        "string" === typeof error[0]
+          ? error.splice(
+              0,
+              1,
+              "\u001b[0m\u001b[7m%c%s\u001b[0m%c " + error[0],
+              "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+              " " + JSCompiler_inline_result + " ",
+              ""
+            )
+          : error.splice(
+              0,
+              0,
+              "\u001b[0m\u001b[7m%c%s\u001b[0m%c ",
+              "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+              " " + JSCompiler_inline_result + " ",
+              ""
+            );
+        error.unshift(console);
+        JSCompiler_inline_result = bind.apply(console.error, error);
+        JSCompiler_inline_result();
+      } else console.error(error);
+      return null;
+    }
+    function noop() {}
+    function RequestInstance(
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var abortSet = new Set();
+      this.destination = null;
+      this.flushScheduled = !1;
+      this.resumableState = resumableState;
+      this.renderState = renderState;
+      this.rootFormatContext = rootFormatContext;
+      this.progressiveChunkSize =
+        void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+      this.status = 10;
+      this.fatalError = null;
+      this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+      this.completedPreambleSegments = this.completedRootSegment = null;
+      this.abortableTasks = abortSet;
+      this.pingedTasks = [];
+      this.clientRenderedBoundaries = [];
+      this.completedBoundaries = [];
+      this.partialBoundaries = [];
+      this.trackedPostpones = null;
+      this.onError = void 0 === onError ? defaultErrorHandler : onError;
+      this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+      this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+      this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+      this.onShellError = void 0 === onShellError ? noop : onShellError;
+      this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+      this.formState = void 0 === formState ? null : formState;
+      this.didWarnForKey = null;
+    }
+    function createRequest(
+      children,
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone,
+      formState
+    ) {
+      var now = getCurrentTime();
+      1e3 < now - lastResetTime &&
+        ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),
+        (lastResetTime = now));
+      resumableState = new RequestInstance(
+        resumableState,
+        renderState,
+        rootFormatContext,
+        progressiveChunkSize,
+        onError,
+        onAllReady,
+        onShellReady,
+        onShellError,
+        onFatalError,
+        onPostpone,
+        formState
+      );
+      renderState = createPendingSegment(
+        resumableState,
+        0,
+        null,
+        rootFormatContext,
+        !1,
+        !1
+      );
+      renderState.parentFlushed = !0;
+      children = createRenderTask(
+        resumableState,
+        null,
+        children,
+        -1,
+        null,
+        renderState,
+        null,
+        null,
+        resumableState.abortableTasks,
+        null,
+        rootFormatContext,
+        null,
+        emptyTreeContext,
+        null,
+        !1,
+        emptyContextObject,
+        null
+      );
+      pushComponentStack(children);
+      resumableState.pingedTasks.push(children);
+      return resumableState;
+    }
+    function createPrerenderRequest(
+      children,
+      resumableState,
+      renderState,
+      rootFormatContext,
+      progressiveChunkSize,
+      onError,
+      onAllReady,
+      onShellReady,
+      onShellError,
+      onFatalError,
+      onPostpone
+    ) {
+      children = createRequest(
+        children,
+        resumableState,
+        renderState,
+        rootFormatContext,
+        progressiveChunkSize,
+        onError,
+        onAllReady,
+        onShellReady,
+        onShellError,
+        onFatalError,
+        onPostpone,
+        void 0
+      );
+      children.trackedPostpones = {
+        workingMap: new Map(),
+        rootNodes: [],
+        rootSlots: null
+      };
+      return children;
+    }
+    function resolveRequest() {
+      if (currentRequest) return currentRequest;
+      var store = requestStorage.getStore();
+      return store ? store : null;
+    }
+    function pingTask(request, task) {
+      request.pingedTasks.push(task);
+      1 === request.pingedTasks.length &&
+        ((request.flushScheduled = null !== request.destination),
+        null !== request.trackedPostpones || 10 === request.status
+          ? scheduleMicrotask(function () {
+              return performWork(request);
+            })
+          : setImmediate(function () {
+              return performWork(request);
+            }));
+    }
+    function createSuspenseBoundary(
+      request,
+      fallbackAbortableTasks,
+      contentPreamble,
+      fallbackPreamble
+    ) {
+      return {
+        status: PENDING,
+        rootSegmentID: -1,
+        parentFlushed: !1,
+        pendingTasks: 0,
+        completedSegments: [],
+        byteSize: 0,
+        fallbackAbortableTasks: fallbackAbortableTasks,
+        errorDigest: null,
+        contentState: createHoistableState(),
+        fallbackState: createHoistableState(),
+        contentPreamble: contentPreamble,
+        fallbackPreamble: fallbackPreamble,
+        trackedContentKeyPath: null,
+        trackedFallbackNode: null,
+        errorMessage: null,
+        errorStack: null,
+        errorComponentStack: null
+      };
+    }
+    function createRenderTask(
+      request,
+      thenableState,
+      node,
+      childIndex,
+      blockedBoundary,
+      blockedSegment,
+      blockedPreamble,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      var task = {
+        replay: null,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: blockedSegment,
+        blockedPreamble: blockedPreamble,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createReplayTask(
+      request,
+      thenableState,
+      replay,
+      node,
+      childIndex,
+      blockedBoundary,
+      hoistableState,
+      abortSet,
+      keyPath,
+      formatContext,
+      context,
+      treeContext,
+      componentStack,
+      isFallback,
+      legacyContext,
+      debugTask
+    ) {
+      request.allPendingTasks++;
+      null === blockedBoundary
+        ? request.pendingRootTasks++
+        : blockedBoundary.pendingTasks++;
+      replay.pendingTasks++;
+      var task = {
+        replay: replay,
+        node: node,
+        childIndex: childIndex,
+        ping: function () {
+          return pingTask(request, task);
+        },
+        blockedBoundary: blockedBoundary,
+        blockedSegment: null,
+        blockedPreamble: null,
+        hoistableState: hoistableState,
+        abortSet: abortSet,
+        keyPath: keyPath,
+        formatContext: formatContext,
+        context: context,
+        treeContext: treeContext,
+        componentStack: componentStack,
+        thenableState: thenableState,
+        isFallback: isFallback
+      };
+      task.debugTask = debugTask;
+      abortSet.add(task);
+      return task;
+    }
+    function createPendingSegment(
+      request,
+      index,
+      boundary,
+      parentFormatContext,
+      lastPushedText,
+      textEmbedded
+    ) {
+      return {
+        status: PENDING,
+        parentFlushed: !1,
+        id: -1,
+        index: index,
+        chunks: [],
+        children: [],
+        preambleChildren: [],
+        parentFormatContext: parentFormatContext,
+        boundary: boundary,
+        lastPushedText: lastPushedText,
+        textEmbedded: textEmbedded
+      };
+    }
+    function getCurrentStackInDEV() {
+      if (null === currentTaskInDEV || null === currentTaskInDEV.componentStack)
+        return "";
+      var componentStack = currentTaskInDEV.componentStack;
+      try {
+        var info = "";
+        if ("string" === typeof componentStack.type)
+          info += describeBuiltInComponentFrame(componentStack.type);
+        else if ("function" === typeof componentStack.type) {
+          if (!componentStack.owner) {
+            var JSCompiler_temp_const = info,
+              fn = componentStack.type,
+              name = fn ? fn.displayName || fn.name : "";
+            var JSCompiler_inline_result = name
+              ? describeBuiltInComponentFrame(name)
+              : "";
+            info = JSCompiler_temp_const + JSCompiler_inline_result;
+          }
+        } else
+          componentStack.owner ||
+            (info += describeComponentStackByType(componentStack.type));
+        for (; componentStack; )
+          (JSCompiler_temp_const = null),
+            null != componentStack.debugStack
+              ? (JSCompiler_temp_const = formatOwnerStack(
+                  componentStack.debugStack
+                ))
+              : ((JSCompiler_inline_result = componentStack),
+                null != JSCompiler_inline_result.stack &&
+                  (JSCompiler_temp_const =
+                    "string" !== typeof JSCompiler_inline_result.stack
+                      ? (JSCompiler_inline_result.stack = formatOwnerStack(
+                          JSCompiler_inline_result.stack
+                        ))
+                      : JSCompiler_inline_result.stack)),
+            (componentStack = componentStack.owner) &&
+              JSCompiler_temp_const &&
+              (info += "\n" + JSCompiler_temp_const);
+        var JSCompiler_inline_result$jscomp$0 = info;
+      } catch (x) {
+        JSCompiler_inline_result$jscomp$0 =
+          "\nError generating stack: " + x.message + "\n" + x.stack;
+      }
+      return JSCompiler_inline_result$jscomp$0;
+    }
+    function pushServerComponentStack(task, debugInfo) {
+      if (null != debugInfo)
+        for (var i = 0; i < debugInfo.length; i++) {
+          var componentInfo = debugInfo[i];
+          "string" === typeof componentInfo.name &&
+            void 0 !== componentInfo.debugStack &&
+            ((task.componentStack = {
+              parent: task.componentStack,
+              type: componentInfo,
+              owner: componentInfo.owner,
+              stack: componentInfo.debugStack
+            }),
+            (task.debugTask = componentInfo.debugTask));
+        }
+    }
+    function pushComponentStack(task) {
+      var node = task.node;
+      if ("object" === typeof node && null !== node)
+        switch (node.$$typeof) {
+          case REACT_ELEMENT_TYPE:
+            var type = node.type,
+              owner = node._owner,
+              stack = node._debugStack;
+            pushServerComponentStack(task, node._debugInfo);
+            task.debugTask = node._debugTask;
+            task.componentStack = {
+              parent: task.componentStack,
+              type: type,
+              owner: owner,
+              stack: stack
+            };
+            break;
+          case REACT_LAZY_TYPE:
+            pushServerComponentStack(task, node._debugInfo);
+            break;
+          default:
+            "function" === typeof node.then &&
+              pushServerComponentStack(task, node._debugInfo);
+        }
+    }
+    function getThrownInfo(node$jscomp$0) {
+      var errorInfo = {};
+      node$jscomp$0 &&
+        Object.defineProperty(errorInfo, "componentStack", {
+          configurable: !0,
+          enumerable: !0,
+          get: function () {
+            try {
+              var info = "",
+                node = node$jscomp$0;
+              do
+                (info += describeComponentStackByType(node.type)),
+                  (node = node.parent);
+              while (node);
+              var stack = info;
+            } catch (x) {
+              stack = "\nError generating stack: " + x.message + "\n" + x.stack;
+            }
+            Object.defineProperty(errorInfo, "componentStack", {
+              value: stack
+            });
+            return stack;
+          }
+        });
+      return errorInfo;
+    }
+    function encodeErrorForBoundary(
+      boundary,
+      digest,
+      error,
+      thrownInfo,
+      wasAborted
+    ) {
+      boundary.errorDigest = digest;
+      error instanceof Error
+        ? ((digest = String(error.message)), (error = String(error.stack)))
+        : ((digest =
+            "object" === typeof error && null !== error
+              ? describeObjectForErrorMessage(error)
+              : String(error)),
+          (error = null));
+      wasAborted = wasAborted
+        ? "Switched to client rendering because the server rendering aborted due to:\n\n"
+        : "Switched to client rendering because the server rendering errored:\n\n";
+      boundary.errorMessage = wasAborted + digest;
+      boundary.errorStack = null !== error ? wasAborted + error : null;
+      boundary.errorComponentStack = thrownInfo.componentStack;
+    }
+    function logRecoverableError(request, error, errorInfo, debugTask) {
+      request = request.onError;
+      error = debugTask
+        ? debugTask.run(request.bind(null, error, errorInfo))
+        : request(error, errorInfo);
+      if (null != error && "string" !== typeof error)
+        console.error(
+          'onError returned something with a type other than "string". onError should return a string and may return null or undefined but must not return anything else. It received something of type "%s" instead',
+          typeof error
+        );
+      else return error;
+    }
+    function fatalError(request, error, errorInfo, debugTask) {
+      errorInfo = request.onShellError;
+      var onFatalError = request.onFatalError;
+      debugTask
+        ? (debugTask.run(errorInfo.bind(null, error)),
+          debugTask.run(onFatalError.bind(null, error)))
+        : (errorInfo(error), onFatalError(error));
+      null !== request.destination
+        ? ((request.status = CLOSED), request.destination.destroy(error))
+        : ((request.status = 13), (request.fatalError = error));
+    }
+    function renderWithHooks(
+      request,
+      task,
+      keyPath,
+      Component,
+      props,
+      secondArg
+    ) {
+      var prevThenableState = task.thenableState;
+      task.thenableState = null;
+      currentlyRenderingComponent = {};
+      currentlyRenderingTask = task;
+      currentlyRenderingRequest = request;
+      currentlyRenderingKeyPath = keyPath;
+      isInHookUserCodeInDev = !1;
+      actionStateCounter = localIdCounter = 0;
+      actionStateMatchingIndex = -1;
+      thenableIndexCounter = 0;
+      thenableState = prevThenableState;
+      for (
+        request = callComponentInDEV(Component, props, secondArg);
+        didScheduleRenderPhaseUpdate;
+
+      )
+        (didScheduleRenderPhaseUpdate = !1),
+          (actionStateCounter = localIdCounter = 0),
+          (actionStateMatchingIndex = -1),
+          (thenableIndexCounter = 0),
+          (numberOfReRenders += 1),
+          (workInProgressHook = null),
+          (request = Component(props, secondArg));
+      resetHooksState();
+      return request;
+    }
+    function finishFunctionComponent(
+      request,
+      task,
+      keyPath,
+      children,
+      hasId,
+      actionStateCount,
+      actionStateMatchingIndex
+    ) {
+      var didEmitActionStateMarkers = !1;
+      if (0 !== actionStateCount && null !== request.formState) {
+        var segment = task.blockedSegment;
+        if (null !== segment) {
+          didEmitActionStateMarkers = !0;
+          segment = segment.chunks;
+          for (var i = 0; i < actionStateCount; i++)
+            i === actionStateMatchingIndex
+              ? segment.push(formStateMarkerIsMatching)
+              : segment.push(formStateMarkerIsNotMatching);
+        }
+      }
+      actionStateCount = task.keyPath;
+      task.keyPath = keyPath;
+      hasId
+        ? ((keyPath = task.treeContext),
+          (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+          renderNode(request, task, children, -1),
+          (task.treeContext = keyPath))
+        : didEmitActionStateMarkers
+          ? renderNode(request, task, children, -1)
+          : renderNodeDestructive(request, task, children, -1);
+      task.keyPath = actionStateCount;
+    }
+    function renderElement(request, task, keyPath, type, props, ref) {
+      if ("function" === typeof type)
+        if (type.prototype && type.prototype.isReactComponent) {
+          var newProps = props;
+          if ("ref" in props) {
+            newProps = {};
+            for (var propName in props)
+              "ref" !== propName && (newProps[propName] = props[propName]);
+          }
+          var defaultProps = type.defaultProps;
+          if (defaultProps) {
+            newProps === props && (newProps = assign({}, newProps, props));
+            for (var _propName in defaultProps)
+              void 0 === newProps[_propName] &&
+                (newProps[_propName] = defaultProps[_propName]);
+          }
+          var resolvedProps = newProps;
+          var context = emptyContextObject,
+            contextType = type.contextType;
+          if (
+            "contextType" in type &&
+            null !== contextType &&
+            (void 0 === contextType ||
+              contextType.$$typeof !== REACT_CONTEXT_TYPE) &&
+            !didWarnAboutInvalidateContextType.has(type)
+          ) {
+            didWarnAboutInvalidateContextType.add(type);
+            var addendum =
+              void 0 === contextType
+                ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file."
+                : "object" !== typeof contextType
+                  ? " However, it is set to a " + typeof contextType + "."
+                  : contextType.$$typeof === REACT_CONSUMER_TYPE
+                    ? " Did you accidentally pass the Context.Consumer instead?"
+                    : " However, it is set to an object with keys {" +
+                      Object.keys(contextType).join(", ") +
+                      "}.";
+            console.error(
+              "%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s",
+              getComponentNameFromType(type) || "Component",
+              addendum
+            );
+          }
+          "object" === typeof contextType &&
+            null !== contextType &&
+            (context = contextType._currentValue);
+          var instance = new type(resolvedProps, context);
+          if (
+            "function" === typeof type.getDerivedStateFromProps &&
+            (null === instance.state || void 0 === instance.state)
+          ) {
+            var componentName = getComponentNameFromType(type) || "Component";
+            didWarnAboutUninitializedState.has(componentName) ||
+              (didWarnAboutUninitializedState.add(componentName),
+              console.error(
+                "`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.",
+                componentName,
+                null === instance.state ? "null" : "undefined",
+                componentName
+              ));
+          }
+          if (
+            "function" === typeof type.getDerivedStateFromProps ||
+            "function" === typeof instance.getSnapshotBeforeUpdate
+          ) {
+            var foundWillMountName = null,
+              foundWillReceivePropsName = null,
+              foundWillUpdateName = null;
+            "function" === typeof instance.componentWillMount &&
+            !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ? (foundWillMountName = "componentWillMount")
+              : "function" === typeof instance.UNSAFE_componentWillMount &&
+                (foundWillMountName = "UNSAFE_componentWillMount");
+            "function" === typeof instance.componentWillReceiveProps &&
+            !0 !==
+              instance.componentWillReceiveProps.__suppressDeprecationWarning
+              ? (foundWillReceivePropsName = "componentWillReceiveProps")
+              : "function" ===
+                  typeof instance.UNSAFE_componentWillReceiveProps &&
+                (foundWillReceivePropsName =
+                  "UNSAFE_componentWillReceiveProps");
+            "function" === typeof instance.componentWillUpdate &&
+            !0 !== instance.componentWillUpdate.__suppressDeprecationWarning
+              ? (foundWillUpdateName = "componentWillUpdate")
+              : "function" === typeof instance.UNSAFE_componentWillUpdate &&
+                (foundWillUpdateName = "UNSAFE_componentWillUpdate");
+            if (
+              null !== foundWillMountName ||
+              null !== foundWillReceivePropsName ||
+              null !== foundWillUpdateName
+            ) {
+              var _componentName =
+                  getComponentNameFromType(type) || "Component",
+                newApiName =
+                  "function" === typeof type.getDerivedStateFromProps
+                    ? "getDerivedStateFromProps()"
+                    : "getSnapshotBeforeUpdate()";
+              didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName) ||
+                (didWarnAboutLegacyLifecyclesAndDerivedState.add(
+                  _componentName
+                ),
+                console.error(
+                  "Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles",
+                  _componentName,
+                  newApiName,
+                  null !== foundWillMountName
+                    ? "\n  " + foundWillMountName
+                    : "",
+                  null !== foundWillReceivePropsName
+                    ? "\n  " + foundWillReceivePropsName
+                    : "",
+                  null !== foundWillUpdateName
+                    ? "\n  " + foundWillUpdateName
+                    : ""
+                ));
+            }
+          }
+          var name = getComponentNameFromType(type) || "Component";
+          instance.render ||
+            (type.prototype && "function" === typeof type.prototype.render
+              ? console.error(
+                  "No `render` method found on the %s instance: did you accidentally return an object from the constructor?",
+                  name
+                )
+              : console.error(
+                  "No `render` method found on the %s instance: you may have forgotten to define `render`.",
+                  name
+                ));
+          !instance.getInitialState ||
+            instance.getInitialState.isReactClassApproved ||
+            instance.state ||
+            console.error(
+              "getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?",
+              name
+            );
+          instance.getDefaultProps &&
+            !instance.getDefaultProps.isReactClassApproved &&
+            console.error(
+              "getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.",
+              name
+            );
+          instance.contextType &&
+            console.error(
+              "contextType was defined as an instance property on %s. Use a static property to define contextType instead.",
+              name
+            );
+          type.childContextTypes &&
+            !didWarnAboutChildContextTypes.has(type) &&
+            (didWarnAboutChildContextTypes.add(type),
+            console.error(
+              "%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          type.contextTypes &&
+            !didWarnAboutContextTypes$1.has(type) &&
+            (didWarnAboutContextTypes$1.add(type),
+            console.error(
+              "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)",
+              name
+            ));
+          "function" === typeof instance.componentShouldUpdate &&
+            console.error(
+              "%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.",
+              name
+            );
+          type.prototype &&
+            type.prototype.isPureReactComponent &&
+            "undefined" !== typeof instance.shouldComponentUpdate &&
+            console.error(
+              "%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.",
+              getComponentNameFromType(type) || "A pure component"
+            );
+          "function" === typeof instance.componentDidUnmount &&
+            console.error(
+              "%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?",
+              name
+            );
+          "function" === typeof instance.componentDidReceiveProps &&
+            console.error(
+              "%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().",
+              name
+            );
+          "function" === typeof instance.componentWillRecieveProps &&
+            console.error(
+              "%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?",
+              name
+            );
+          "function" === typeof instance.UNSAFE_componentWillRecieveProps &&
+            console.error(
+              "%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?",
+              name
+            );
+          var hasMutatedProps = instance.props !== resolvedProps;
+          void 0 !== instance.props &&
+            hasMutatedProps &&
+            console.error(
+              "When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.",
+              name
+            );
+          instance.defaultProps &&
+            console.error(
+              "Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.",
+              name,
+              name
+            );
+          "function" !== typeof instance.getSnapshotBeforeUpdate ||
+            "function" === typeof instance.componentDidUpdate ||
+            didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(type) ||
+            (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(type),
+            console.error(
+              "%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.",
+              getComponentNameFromType(type)
+            ));
+          "function" === typeof instance.getDerivedStateFromProps &&
+            console.error(
+              "%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof instance.getDerivedStateFromError &&
+            console.error(
+              "%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.",
+              name
+            );
+          "function" === typeof type.getSnapshotBeforeUpdate &&
+            console.error(
+              "%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.",
+              name
+            );
+          var state = instance.state;
+          state &&
+            ("object" !== typeof state || isArrayImpl(state)) &&
+            console.error("%s.state: must be set to an object or null", name);
+          "function" === typeof instance.getChildContext &&
+            "object" !== typeof type.childContextTypes &&
+            console.error(
+              "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().",
+              name
+            );
+          var initialState = void 0 !== instance.state ? instance.state : null;
+          instance.updater = classComponentUpdater;
+          instance.props = resolvedProps;
+          instance.state = initialState;
+          var internalInstance = { queue: [], replace: !1 };
+          instance._reactInternals = internalInstance;
+          var contextType$jscomp$0 = type.contextType;
+          instance.context =
+            "object" === typeof contextType$jscomp$0 &&
+            null !== contextType$jscomp$0
+              ? contextType$jscomp$0._currentValue
+              : emptyContextObject;
+          if (instance.state === resolvedProps) {
+            var componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Component";
+            didWarnAboutDirectlyAssigningPropsToState.has(
+              componentName$jscomp$0
+            ) ||
+              (didWarnAboutDirectlyAssigningPropsToState.add(
+                componentName$jscomp$0
+              ),
+              console.error(
+                "%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.",
+                componentName$jscomp$0
+              ));
+          }
+          var getDerivedStateFromProps = type.getDerivedStateFromProps;
+          if ("function" === typeof getDerivedStateFromProps) {
+            var partialState = getDerivedStateFromProps(
+              resolvedProps,
+              initialState
+            );
+            if (void 0 === partialState) {
+              var componentName$jscomp$1 =
+                getComponentNameFromType(type) || "Component";
+              didWarnAboutUndefinedDerivedState.has(componentName$jscomp$1) ||
+                (didWarnAboutUndefinedDerivedState.add(componentName$jscomp$1),
+                console.error(
+                  "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.",
+                  componentName$jscomp$1
+                ));
+            }
+            var JSCompiler_inline_result =
+              null === partialState || void 0 === partialState
+                ? initialState
+                : assign({}, initialState, partialState);
+            instance.state = JSCompiler_inline_result;
+          }
+          if (
+            "function" !== typeof type.getDerivedStateFromProps &&
+            "function" !== typeof instance.getSnapshotBeforeUpdate &&
+            ("function" === typeof instance.UNSAFE_componentWillMount ||
+              "function" === typeof instance.componentWillMount)
+          ) {
+            var oldState = instance.state;
+            if ("function" === typeof instance.componentWillMount) {
+              if (
+                !0 !== instance.componentWillMount.__suppressDeprecationWarning
+              ) {
+                var componentName$jscomp$2 =
+                  getComponentNameFromType(type) || "Unknown";
+                didWarnAboutDeprecatedWillMount[componentName$jscomp$2] ||
+                  (console.warn(
+                    "componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code from componentWillMount to componentDidMount (preferred in most cases) or the constructor.\n\nPlease update the following components: %s",
+                    componentName$jscomp$2
+                  ),
+                  (didWarnAboutDeprecatedWillMount[componentName$jscomp$2] =
+                    !0));
+              }
+              instance.componentWillMount();
+            }
+            "function" === typeof instance.UNSAFE_componentWillMount &&
+              instance.UNSAFE_componentWillMount();
+            oldState !== instance.state &&
+              (console.error(
+                "%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.",
+                getComponentNameFromType(type) || "Component"
+              ),
+              classComponentUpdater.enqueueReplaceState(
+                instance,
+                instance.state,
+                null
+              ));
+            if (
+              null !== internalInstance.queue &&
+              0 < internalInstance.queue.length
+            ) {
+              var oldQueue = internalInstance.queue,
+                oldReplace = internalInstance.replace;
+              internalInstance.queue = null;
+              internalInstance.replace = !1;
+              if (oldReplace && 1 === oldQueue.length)
+                instance.state = oldQueue[0];
+              else {
+                for (
+                  var nextState = oldReplace ? oldQueue[0] : instance.state,
+                    dontMutate = !0,
+                    i = oldReplace ? 1 : 0;
+                  i < oldQueue.length;
+                  i++
+                ) {
+                  var partial = oldQueue[i],
+                    partialState$jscomp$0 =
+                      "function" === typeof partial
+                        ? partial.call(
+                            instance,
+                            nextState,
+                            resolvedProps,
+                            void 0
+                          )
+                        : partial;
+                  null != partialState$jscomp$0 &&
+                    (dontMutate
+                      ? ((dontMutate = !1),
+                        (nextState = assign(
+                          {},
+                          nextState,
+                          partialState$jscomp$0
+                        )))
+                      : assign(nextState, partialState$jscomp$0));
+                }
+                instance.state = nextState;
+              }
+            } else internalInstance.queue = null;
+          }
+          var nextChildren = callRenderInDEV(instance);
+          if (12 === request.status) throw null;
+          instance.props !== resolvedProps &&
+            (didWarnAboutReassigningProps ||
+              console.error(
+                "It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.",
+                getComponentNameFromType(type) || "a component"
+              ),
+            (didWarnAboutReassigningProps = !0));
+          var prevKeyPath = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, nextChildren, -1);
+          task.keyPath = prevKeyPath;
+        } else {
+          if (type.prototype && "function" === typeof type.prototype.render) {
+            var componentName$jscomp$3 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutBadClass[componentName$jscomp$3] ||
+              (console.error(
+                "The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",
+                componentName$jscomp$3,
+                componentName$jscomp$3
+              ),
+              (didWarnAboutBadClass[componentName$jscomp$3] = !0));
+          }
+          var value = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type,
+            props,
+            void 0
+          );
+          if (12 === request.status) throw null;
+          var hasId = 0 !== localIdCounter,
+            actionStateCount = actionStateCounter,
+            actionStateMatchingIndex$jscomp$0 = actionStateMatchingIndex;
+          if (type.contextTypes) {
+            var _componentName$jscomp$0 =
+              getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypes[_componentName$jscomp$0] ||
+              ((didWarnAboutContextTypes[_componentName$jscomp$0] = !0),
+              console.error(
+                "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)",
+                _componentName$jscomp$0
+              ));
+          }
+          type &&
+            type.childContextTypes &&
+            console.error(
+              "childContextTypes cannot be defined on a function component.\n  %s.childContextTypes = ...",
+              type.displayName || type.name || "Component"
+            );
+          if ("function" === typeof type.getDerivedStateFromProps) {
+            var _componentName2 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] ||
+              (console.error(
+                "%s: Function components do not support getDerivedStateFromProps.",
+                _componentName2
+              ),
+              (didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] =
+                !0));
+          }
+          if (
+            "object" === typeof type.contextType &&
+            null !== type.contextType
+          ) {
+            var _componentName3 = getComponentNameFromType(type) || "Unknown";
+            didWarnAboutContextTypeOnFunctionComponent[_componentName3] ||
+              (console.error(
+                "%s: Function components do not support contextType.",
+                _componentName3
+              ),
+              (didWarnAboutContextTypeOnFunctionComponent[_componentName3] =
+                !0));
+          }
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            value,
+            hasId,
+            actionStateCount,
+            actionStateMatchingIndex$jscomp$0
+          );
+        }
+      else if ("string" === typeof type) {
+        var segment = task.blockedSegment;
+        if (null === segment) {
+          var children = props.children,
+            prevContext = task.formatContext,
+            prevKeyPath$jscomp$0 = task.keyPath;
+          task.formatContext = getChildFormatContext(prevContext, type, props);
+          task.keyPath = keyPath;
+          renderNode(request, task, children, -1);
+          task.formatContext = prevContext;
+          task.keyPath = prevKeyPath$jscomp$0;
+        } else {
+          var _children = pushStartInstance(
+            segment.chunks,
+            type,
+            props,
+            request.resumableState,
+            request.renderState,
+            task.blockedPreamble,
+            task.hoistableState,
+            task.formatContext,
+            segment.lastPushedText,
+            task.isFallback
+          );
+          segment.lastPushedText = !1;
+          var _prevContext = task.formatContext,
+            _prevKeyPath2 = task.keyPath;
+          task.keyPath = keyPath;
+          if (
+            (task.formatContext = getChildFormatContext(
+              _prevContext,
+              type,
+              props
+            )).insertionMode === HTML_HEAD_MODE
+          ) {
+            var preambleSegment = createPendingSegment(
+              request,
+              0,
+              null,
+              task.formatContext,
+              !1,
+              !1
+            );
+            segment.preambleChildren.push(preambleSegment);
+            var preambleTask = createRenderTask(
+              request,
+              null,
+              _children,
+              -1,
+              task.blockedBoundary,
+              preambleSegment,
+              task.blockedPreamble,
+              task.hoistableState,
+              request.abortableTasks,
+              task.keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback,
+              emptyContextObject,
+              task.debugTask
+            );
+            pushComponentStack(preambleTask);
+            request.pingedTasks.push(preambleTask);
+          } else renderNode(request, task, _children, -1);
+          task.formatContext = _prevContext;
+          task.keyPath = _prevKeyPath2;
+          a: {
+            var target = segment.chunks,
+              resumableState = request.resumableState;
+            switch (type) {
+              case "title":
+              case "style":
+              case "script":
+              case "area":
+              case "base":
+              case "br":
+              case "col":
+              case "embed":
+              case "hr":
+              case "img":
+              case "input":
+              case "keygen":
+              case "link":
+              case "meta":
+              case "param":
+              case "source":
+              case "track":
+              case "wbr":
+                break a;
+              case "body":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) {
+                  resumableState.hasBody = !0;
+                  break a;
+                }
+                break;
+              case "html":
+                if (_prevContext.insertionMode === ROOT_HTML_MODE) {
+                  resumableState.hasHtml = !0;
+                  break a;
+                }
+                break;
+              case "head":
+                if (_prevContext.insertionMode <= HTML_HTML_MODE) break a;
+            }
+            target.push(endChunkForTag(type));
+          }
+          segment.lastPushedText = !1;
+        }
+      } else {
+        switch (type) {
+          case REACT_LEGACY_HIDDEN_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_FRAGMENT_TYPE:
+            var prevKeyPath$jscomp$1 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = prevKeyPath$jscomp$1;
+            return;
+          case REACT_ACTIVITY_TYPE:
+            if ("hidden" !== props.mode) {
+              var prevKeyPath$jscomp$2 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, props.children, -1);
+              task.keyPath = prevKeyPath$jscomp$2;
+            }
+            return;
+          case REACT_SUSPENSE_LIST_TYPE:
+            var _prevKeyPath3 = task.keyPath;
+            task.keyPath = keyPath;
+            renderNodeDestructive(request, task, props.children, -1);
+            task.keyPath = _prevKeyPath3;
+            return;
+          case REACT_VIEW_TRANSITION_TYPE:
+          case REACT_SCOPE_TYPE:
+            throw Error(
+              "ReactDOMServer does not yet support scope components."
+            );
+          case REACT_SUSPENSE_TYPE:
+            a: if (null !== task.replay) {
+              var _prevKeyPath = task.keyPath;
+              task.keyPath = keyPath;
+              var _content = props.children;
+              try {
+                renderNode(request, task, _content, -1);
+              } finally {
+                task.keyPath = _prevKeyPath;
+              }
+            } else {
+              var prevKeyPath$jscomp$3 = task.keyPath,
+                parentBoundary = task.blockedBoundary,
+                parentPreamble = task.blockedPreamble,
+                parentHoistableState = task.hoistableState,
+                parentSegment = task.blockedSegment,
+                fallback = props.fallback,
+                content = props.children,
+                fallbackAbortSet = new Set();
+              var newBoundary =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              null !== request.trackedPostpones &&
+                (newBoundary.trackedContentKeyPath = keyPath);
+              var boundarySegment = createPendingSegment(
+                request,
+                parentSegment.chunks.length,
+                newBoundary,
+                task.formatContext,
+                !1,
+                !1
+              );
+              parentSegment.children.push(boundarySegment);
+              parentSegment.lastPushedText = !1;
+              var contentRootSegment = createPendingSegment(
+                request,
+                0,
+                null,
+                task.formatContext,
+                !1,
+                !1
+              );
+              contentRootSegment.parentFlushed = !0;
+              if (null !== request.trackedPostpones) {
+                var fallbackKeyPath = [
+                    keyPath[0],
+                    "Suspense Fallback",
+                    keyPath[2]
+                  ],
+                  fallbackReplayNode = [
+                    fallbackKeyPath[1],
+                    fallbackKeyPath[2],
+                    [],
+                    null
+                  ];
+                request.trackedPostpones.workingMap.set(
+                  fallbackKeyPath,
+                  fallbackReplayNode
+                );
+                newBoundary.trackedFallbackNode = fallbackReplayNode;
+                task.blockedSegment = boundarySegment;
+                task.blockedPreamble = newBoundary.fallbackPreamble;
+                task.keyPath = fallbackKeyPath;
+                boundarySegment.status = 6;
+                try {
+                  renderNode(request, task, fallback, -1),
+                    boundarySegment.lastPushedText &&
+                      boundarySegment.textEmbedded &&
+                      boundarySegment.chunks.push(textSeparator),
+                    (boundarySegment.status = COMPLETED);
+                } catch (thrownValue) {
+                  throw (
+                    ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                    thrownValue)
+                  );
+                } finally {
+                  (task.blockedSegment = parentSegment),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedPrimaryTask = createRenderTask(
+                  request,
+                  null,
+                  content,
+                  -1,
+                  newBoundary,
+                  contentRootSegment,
+                  newBoundary.contentPreamble,
+                  newBoundary.contentState,
+                  task.abortSet,
+                  keyPath,
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  task.isFallback,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedPrimaryTask);
+                request.pingedTasks.push(suspendedPrimaryTask);
+              } else {
+                task.blockedBoundary = newBoundary;
+                task.blockedPreamble = newBoundary.contentPreamble;
+                task.hoistableState = newBoundary.contentState;
+                task.blockedSegment = contentRootSegment;
+                task.keyPath = keyPath;
+                contentRootSegment.status = 6;
+                try {
+                  if (
+                    (renderNode(request, task, content, -1),
+                    contentRootSegment.lastPushedText &&
+                      contentRootSegment.textEmbedded &&
+                      contentRootSegment.chunks.push(textSeparator),
+                    (contentRootSegment.status = COMPLETED),
+                    queueCompletedSegment(newBoundary, contentRootSegment),
+                    0 === newBoundary.pendingTasks &&
+                      newBoundary.status === PENDING)
+                  ) {
+                    newBoundary.status = COMPLETED;
+                    0 === request.pendingRootTasks &&
+                      task.blockedPreamble &&
+                      preparePreamble(request);
+                    break a;
+                  }
+                } catch (thrownValue$2) {
+                  newBoundary.status = CLIENT_RENDERED;
+                  if (12 === request.status) {
+                    contentRootSegment.status = 3;
+                    var error = request.fatalError;
+                  } else
+                    (contentRootSegment.status = 4), (error = thrownValue$2);
+                  var thrownInfo = getThrownInfo(task.componentStack);
+                  var errorDigest = logRecoverableError(
+                    request,
+                    error,
+                    thrownInfo,
+                    task.debugTask
+                  );
+                  encodeErrorForBoundary(
+                    newBoundary,
+                    errorDigest,
+                    error,
+                    thrownInfo,
+                    !1
+                  );
+                  untrackBoundary(request, newBoundary);
+                } finally {
+                  (task.blockedBoundary = parentBoundary),
+                    (task.blockedPreamble = parentPreamble),
+                    (task.hoistableState = parentHoistableState),
+                    (task.blockedSegment = parentSegment),
+                    (task.keyPath = prevKeyPath$jscomp$3);
+                }
+                var suspendedFallbackTask = createRenderTask(
+                  request,
+                  null,
+                  fallback,
+                  -1,
+                  parentBoundary,
+                  boundarySegment,
+                  newBoundary.fallbackPreamble,
+                  newBoundary.fallbackState,
+                  fallbackAbortSet,
+                  [keyPath[0], "Suspense Fallback", keyPath[2]],
+                  task.formatContext,
+                  task.context,
+                  task.treeContext,
+                  task.componentStack,
+                  !0,
+                  emptyContextObject,
+                  task.debugTask
+                );
+                pushComponentStack(suspendedFallbackTask);
+                request.pingedTasks.push(suspendedFallbackTask);
+              }
+            }
+            return;
+        }
+        if ("object" === typeof type && null !== type)
+          switch (type.$$typeof) {
+            case REACT_FORWARD_REF_TYPE:
+              if ("ref" in props) {
+                var propsWithoutRef = {};
+                for (var key in props)
+                  "ref" !== key && (propsWithoutRef[key] = props[key]);
+              } else propsWithoutRef = props;
+              var children$jscomp$0 = renderWithHooks(
+                request,
+                task,
+                keyPath,
+                type.render,
+                propsWithoutRef,
+                ref
+              );
+              finishFunctionComponent(
+                request,
+                task,
+                keyPath,
+                children$jscomp$0,
+                0 !== localIdCounter,
+                actionStateCounter,
+                actionStateMatchingIndex
+              );
+              return;
+            case REACT_MEMO_TYPE:
+              renderElement(request, task, keyPath, type.type, props, ref);
+              return;
+            case REACT_PROVIDER_TYPE:
+            case REACT_CONTEXT_TYPE:
+              var value$jscomp$0 = props.value,
+                children$jscomp$1 = props.children;
+              var prevSnapshot = task.context;
+              var prevKeyPath$jscomp$4 = task.keyPath;
+              var prevValue = type._currentValue;
+              type._currentValue = value$jscomp$0;
+              void 0 !== type._currentRenderer &&
+                null !== type._currentRenderer &&
+                type._currentRenderer !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer = rendererSigil;
+              var prevNode = currentActiveSnapshot,
+                newNode = {
+                  parent: prevNode,
+                  depth: null === prevNode ? 0 : prevNode.depth + 1,
+                  context: type,
+                  parentValue: prevValue,
+                  value: value$jscomp$0
+                };
+              currentActiveSnapshot = newNode;
+              task.context = newNode;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, children$jscomp$1, -1);
+              var prevSnapshot$jscomp$0 = currentActiveSnapshot;
+              if (null === prevSnapshot$jscomp$0)
+                throw Error(
+                  "Tried to pop a Context at the root of the app. This is a bug in React."
+                );
+              prevSnapshot$jscomp$0.context !== type &&
+                console.error(
+                  "The parent context is not the expected context. This is probably a bug in React."
+                );
+              prevSnapshot$jscomp$0.context._currentValue =
+                prevSnapshot$jscomp$0.parentValue;
+              void 0 !== type._currentRenderer &&
+                null !== type._currentRenderer &&
+                type._currentRenderer !== rendererSigil &&
+                console.error(
+                  "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."
+                );
+              type._currentRenderer = rendererSigil;
+              var JSCompiler_inline_result$jscomp$0 = (currentActiveSnapshot =
+                prevSnapshot$jscomp$0.parent);
+              task.context = JSCompiler_inline_result$jscomp$0;
+              task.keyPath = prevKeyPath$jscomp$4;
+              prevSnapshot !== task.context &&
+                console.error(
+                  "Popping the context provider did not return back to the original snapshot. This is a bug in React."
+                );
+              return;
+            case REACT_CONSUMER_TYPE:
+              var context$jscomp$0 = type._context,
+                render = props.children;
+              "function" !== typeof render &&
+                console.error(
+                  "A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."
+                );
+              var newChildren = render(context$jscomp$0._currentValue),
+                prevKeyPath$jscomp$5 = task.keyPath;
+              task.keyPath = keyPath;
+              renderNodeDestructive(request, task, newChildren, -1);
+              task.keyPath = prevKeyPath$jscomp$5;
+              return;
+            case REACT_LAZY_TYPE:
+              var Component = callLazyInitInDEV(type);
+              if (12 === request.status) throw null;
+              renderElement(request, task, keyPath, Component, props, ref);
+              return;
+          }
+        var info = "";
+        if (
+          void 0 === type ||
+          ("object" === typeof type &&
+            null !== type &&
+            0 === Object.keys(type).length)
+        )
+          info +=
+            " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
+        throw Error(
+          "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+            ((null == type ? type : typeof type) + "." + info)
+        );
+      }
+    }
+    function resumeNode(request, task, segmentId, node, childIndex) {
+      var prevReplay = task.replay,
+        blockedBoundary = task.blockedBoundary,
+        resumedSegment = createPendingSegment(
+          request,
+          0,
+          null,
+          task.formatContext,
+          !1,
+          !1
+        );
+      resumedSegment.id = segmentId;
+      resumedSegment.parentFlushed = !0;
+      try {
+        (task.replay = null),
+          (task.blockedSegment = resumedSegment),
+          renderNode(request, task, node, childIndex),
+          (resumedSegment.status = COMPLETED),
+          null === blockedBoundary
+            ? (request.completedRootSegment = resumedSegment)
+            : (queueCompletedSegment(blockedBoundary, resumedSegment),
+              blockedBoundary.parentFlushed &&
+                request.partialBoundaries.push(blockedBoundary));
+      } finally {
+        (task.replay = prevReplay), (task.blockedSegment = null);
+      }
+    }
+    function replayElement(
+      request,
+      task,
+      keyPath,
+      name,
+      keyOrIndex,
+      childIndex,
+      type,
+      props,
+      ref,
+      replay
+    ) {
+      childIndex = replay.nodes;
+      for (var i = 0; i < childIndex.length; i++) {
+        var node = childIndex[i];
+        if (keyOrIndex === node[1]) {
+          if (4 === node.length) {
+            if (null !== name && name !== node[0])
+              throw Error(
+                "Expected the resume to render <" +
+                  node[0] +
+                  "> in this slot but instead it rendered <" +
+                  name +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            var childNodes = node[2];
+            node = node[3];
+            name = task.node;
+            task.replay = { nodes: childNodes, slots: node, pendingTasks: 1 };
+            try {
+              renderElement(request, task, keyPath, type, props, ref);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw (task.node === name && (task.replay = replay), x);
+              task.replay.pendingTasks--;
+              type = getThrownInfo(task.componentStack);
+              props = request;
+              request = task.blockedBoundary;
+              keyPath = x;
+              ref = node;
+              node = logRecoverableError(props, keyPath, type, task.debugTask);
+              abortRemainingReplayNodes(
+                props,
+                request,
+                childNodes,
+                ref,
+                keyPath,
+                node,
+                type,
+                !1
+              );
+            }
+            task.replay = replay;
+          } else {
+            if (type !== REACT_SUSPENSE_TYPE)
+              throw Error(
+                "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+                  (getComponentNameFromType(type) || "Unknown") +
+                  ">. The tree doesn't match so React will fallback to client rendering."
+              );
+            a: {
+              replay = void 0;
+              type = node[5];
+              ref = node[2];
+              name = node[3];
+              keyOrIndex = null === node[4] ? [] : node[4][2];
+              node = null === node[4] ? null : node[4][3];
+              var prevKeyPath = task.keyPath,
+                previousReplaySet = task.replay,
+                parentBoundary = task.blockedBoundary,
+                parentHoistableState = task.hoistableState,
+                content = props.children,
+                fallback = props.fallback,
+                fallbackAbortSet = new Set();
+              props =
+                task.formatContext.insertionMode < HTML_MODE
+                  ? createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      createPreambleState(),
+                      createPreambleState()
+                    )
+                  : createSuspenseBoundary(
+                      request,
+                      fallbackAbortSet,
+                      null,
+                      null
+                    );
+              props.parentFlushed = !0;
+              props.rootSegmentID = type;
+              task.blockedBoundary = props;
+              task.hoistableState = props.contentState;
+              task.keyPath = keyPath;
+              task.replay = { nodes: ref, slots: name, pendingTasks: 1 };
+              try {
+                renderNode(request, task, content, -1);
+                if (
+                  1 === task.replay.pendingTasks &&
+                  0 < task.replay.nodes.length
+                )
+                  throw Error(
+                    "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                  );
+                task.replay.pendingTasks--;
+                if (0 === props.pendingTasks && props.status === PENDING) {
+                  props.status = COMPLETED;
+                  request.completedBoundaries.push(props);
+                  break a;
+                }
+              } catch (error) {
+                (props.status = CLIENT_RENDERED),
+                  (childNodes = getThrownInfo(task.componentStack)),
+                  (replay = logRecoverableError(
+                    request,
+                    error,
+                    childNodes,
+                    task.debugTask
+                  )),
+                  encodeErrorForBoundary(props, replay, error, childNodes, !1),
+                  task.replay.pendingTasks--,
+                  request.clientRenderedBoundaries.push(props);
+              } finally {
+                (task.blockedBoundary = parentBoundary),
+                  (task.hoistableState = parentHoistableState),
+                  (task.replay = previousReplaySet),
+                  (task.keyPath = prevKeyPath);
+              }
+              props = createReplayTask(
+                request,
+                null,
+                { nodes: keyOrIndex, slots: node, pendingTasks: 0 },
+                fallback,
+                -1,
+                parentBoundary,
+                props.fallbackState,
+                fallbackAbortSet,
+                [keyPath[0], "Suspense Fallback", keyPath[2]],
+                task.formatContext,
+                task.context,
+                task.treeContext,
+                task.componentStack,
+                !0,
+                emptyContextObject,
+                task.debugTask
+              );
+              pushComponentStack(props);
+              request.pingedTasks.push(props);
+            }
+          }
+          childIndex.splice(i, 1);
+          break;
+        }
+      }
+    }
+    function renderNodeDestructive(request, task, node, childIndex) {
+      null !== task.replay && "number" === typeof task.replay.slots
+        ? resumeNode(request, task, task.replay.slots, node, childIndex)
+        : ((task.node = node),
+          (task.childIndex = childIndex),
+          (node = task.componentStack),
+          (childIndex = task.debugTask),
+          pushComponentStack(task),
+          retryNode(request, task),
+          (task.componentStack = node),
+          (task.debugTask = childIndex));
+    }
+    function retryNode(request, task) {
+      var node = task.node,
+        childIndex = task.childIndex;
+      if (null !== node) {
+        if ("object" === typeof node) {
+          switch (node.$$typeof) {
+            case REACT_ELEMENT_TYPE:
+              var type = node.type,
+                key = node.key;
+              node = node.props;
+              var refProp = node.ref;
+              refProp = void 0 !== refProp ? refProp : null;
+              var debugTask = task.debugTask,
+                name = getComponentNameFromType(type);
+              key = null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+              var keyPath = [task.keyPath, name, key];
+              null !== task.replay
+                ? debugTask
+                  ? debugTask.run(
+                      replayElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        name,
+                        key,
+                        childIndex,
+                        type,
+                        node,
+                        refProp,
+                        task.replay
+                      )
+                    )
+                  : replayElement(
+                      request,
+                      task,
+                      keyPath,
+                      name,
+                      key,
+                      childIndex,
+                      type,
+                      node,
+                      refProp,
+                      task.replay
+                    )
+                : debugTask
+                  ? debugTask.run(
+                      renderElement.bind(
+                        null,
+                        request,
+                        task,
+                        keyPath,
+                        type,
+                        node,
+                        refProp
+                      )
+                    )
+                  : renderElement(request, task, keyPath, type, node, refProp);
+              return;
+            case REACT_PORTAL_TYPE:
+              throw Error(
+                "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+              );
+            case REACT_LAZY_TYPE:
+              node = callLazyInitInDEV(node);
+              if (12 === request.status) throw null;
+              renderNodeDestructive(request, task, node, childIndex);
+              return;
+          }
+          if (isArrayImpl(node)) {
+            renderChildrenArray(request, task, node, childIndex);
+            return;
+          }
+          null === node || "object" !== typeof node
+            ? (key = null)
+            : ((type =
+                (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+                node["@@iterator"]),
+              (key = "function" === typeof type ? type : null));
+          if (key && (type = key.call(node))) {
+            if (type === node) {
+              if (
+                -1 !== childIndex ||
+                null === task.componentStack ||
+                "function" !== typeof task.componentStack.type ||
+                "[object GeneratorFunction]" !==
+                  Object.prototype.toString.call(task.componentStack.type) ||
+                "[object Generator]" !== Object.prototype.toString.call(type)
+              )
+                didWarnAboutGenerators ||
+                  console.error(
+                    "Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."
+                  ),
+                  (didWarnAboutGenerators = !0);
+            } else
+              node.entries !== key ||
+                didWarnAboutMaps ||
+                (console.error(
+                  "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+                ),
+                (didWarnAboutMaps = !0));
+            node = type.next();
+            if (!node.done) {
+              key = [];
+              do key.push(node.value), (node = type.next());
+              while (!node.done);
+              renderChildrenArray(request, task, key, childIndex);
+            }
+            return;
+          }
+          if ("function" === typeof node.then)
+            return (
+              (task.thenableState = null),
+              renderNodeDestructive(
+                request,
+                task,
+                unwrapThenable(node),
+                childIndex
+              )
+            );
+          if (node.$$typeof === REACT_CONTEXT_TYPE)
+            return renderNodeDestructive(
+              request,
+              task,
+              node._currentValue,
+              childIndex
+            );
+          request = Object.prototype.toString.call(node);
+          throw Error(
+            "Objects are not valid as a React child (found: " +
+              ("[object Object]" === request
+                ? "object with keys {" + Object.keys(node).join(", ") + "}"
+                : request) +
+              "). If you meant to render a collection of children, use an array instead."
+          );
+        }
+        "string" === typeof node
+          ? ((task = task.blockedSegment),
+            null !== task &&
+              (task.lastPushedText = pushTextInstance(
+                task.chunks,
+                node,
+                request.renderState,
+                task.lastPushedText
+              )))
+          : "number" === typeof node || "bigint" === typeof node
+            ? ((task = task.blockedSegment),
+              null !== task &&
+                (task.lastPushedText = pushTextInstance(
+                  task.chunks,
+                  "" + node,
+                  request.renderState,
+                  task.lastPushedText
+                )))
+            : ("function" === typeof node &&
+                ((request = node.displayName || node.name || "Component"),
+                console.error(
+                  "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.",
+                  request,
+                  request
+                )),
+              "symbol" === typeof node &&
+                console.error(
+                  "Symbols are not valid as a React child.\n  %s",
+                  String(node)
+                ));
+      }
+    }
+    function renderChildrenArray(request, task, children, childIndex) {
+      var prevKeyPath = task.keyPath,
+        previousComponentStack = task.componentStack;
+      var previousDebugTask = task.debugTask;
+      pushServerComponentStack(task, task.node._debugInfo);
+      if (
+        -1 !== childIndex &&
+        ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+        null !== task.replay)
+      ) {
+        for (
+          var replay = task.replay, replayNodes = replay.nodes, j = 0;
+          j < replayNodes.length;
+          j++
+        ) {
+          var node = replayNodes[j];
+          if (node[1] === childIndex) {
+            childIndex = node[2];
+            node = node[3];
+            task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+            try {
+              renderChildrenArray(request, task, children, -1);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+            } catch (x) {
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                (x === SuspenseException || "function" === typeof x.then)
+              )
+                throw x;
+              task.replay.pendingTasks--;
+              var thrownInfo = getThrownInfo(task.componentStack);
+              children = task.blockedBoundary;
+              var error = x,
+                resumeSlots = node;
+              node = logRecoverableError(
+                request,
+                error,
+                thrownInfo,
+                task.debugTask
+              );
+              abortRemainingReplayNodes(
+                request,
+                children,
+                childIndex,
+                resumeSlots,
+                error,
+                node,
+                thrownInfo,
+                !1
+              );
+            }
+            task.replay = replay;
+            replayNodes.splice(j, 1);
+            break;
+          }
+        }
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      replay = task.treeContext;
+      replayNodes = children.length;
+      if (
+        null !== task.replay &&
+        ((j = task.replay.slots), null !== j && "object" === typeof j)
+      ) {
+        for (childIndex = 0; childIndex < replayNodes; childIndex++)
+          (node = children[childIndex]),
+            (task.treeContext = pushTreeContext(
+              replay,
+              replayNodes,
+              childIndex
+            )),
+            (error = j[childIndex]),
+            "number" === typeof error
+              ? (resumeNode(request, task, error, node, childIndex),
+                delete j[childIndex])
+              : renderNode(request, task, node, childIndex);
+        task.treeContext = replay;
+        task.keyPath = prevKeyPath;
+        task.componentStack = previousComponentStack;
+        task.debugTask = previousDebugTask;
+        return;
+      }
+      for (j = 0; j < replayNodes; j++) {
+        childIndex = children[j];
+        resumeSlots = request;
+        node = task;
+        error = childIndex;
+        if (
+          null !== error &&
+          "object" === typeof error &&
+          (error.$$typeof === REACT_ELEMENT_TYPE ||
+            error.$$typeof === REACT_PORTAL_TYPE) &&
+          error._store &&
+          ((!error._store.validated && null == error.key) ||
+            2 === error._store.validated)
+        ) {
+          if ("object" !== typeof error._store)
+            throw Error(
+              "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue."
+            );
+          error._store.validated = 1;
+          thrownInfo = resumeSlots.didWarnForKey;
+          null == thrownInfo &&
+            (thrownInfo = resumeSlots.didWarnForKey = new WeakSet());
+          resumeSlots = node.componentStack;
+          if (null !== resumeSlots && !thrownInfo.has(resumeSlots)) {
+            thrownInfo.add(resumeSlots);
+            var componentName = getComponentNameFromType(error.type);
+            thrownInfo = error._owner;
+            var parentOwner = resumeSlots.owner;
+            resumeSlots = "";
+            if (parentOwner && "undefined" !== typeof parentOwner.type) {
+              var name = getComponentNameFromType(parentOwner.type);
+              name &&
+                (resumeSlots =
+                  "\n\nCheck the render method of `" + name + "`.");
+            }
+            resumeSlots ||
+              (componentName &&
+                (resumeSlots =
+                  "\n\nCheck the top-level render call using <" +
+                  componentName +
+                  ">."));
+            componentName = "";
+            null != thrownInfo &&
+              parentOwner !== thrownInfo &&
+              ((parentOwner = null),
+              "undefined" !== typeof thrownInfo.type
+                ? (parentOwner = getComponentNameFromType(thrownInfo.type))
+                : "string" === typeof thrownInfo.name &&
+                  (parentOwner = thrownInfo.name),
+              parentOwner &&
+                (componentName =
+                  " It was passed a child from " + parentOwner + "."));
+            thrownInfo = node.componentStack;
+            node.componentStack = {
+              parent: node.componentStack,
+              type: error.type,
+              owner: error._owner,
+              stack: error._debugStack
+            };
+            console.error(
+              'Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.',
+              resumeSlots,
+              componentName
+            );
+            node.componentStack = thrownInfo;
+          }
+        }
+        task.treeContext = pushTreeContext(replay, replayNodes, j);
+        renderNode(request, task, childIndex, j);
+      }
+      task.treeContext = replay;
+      task.keyPath = prevKeyPath;
+      task.componentStack = previousComponentStack;
+      task.debugTask = previousDebugTask;
+    }
+    function untrackBoundary(request, boundary) {
+      request = request.trackedPostpones;
+      null !== request &&
+        ((boundary = boundary.trackedContentKeyPath),
+        null !== boundary &&
+          ((boundary = request.workingMap.get(boundary)),
+          void 0 !== boundary &&
+            ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+    }
+    function spawnNewSuspendedReplayTask(request, task, thenableState) {
+      return createReplayTask(
+        request,
+        thenableState,
+        task.replay,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function spawnNewSuspendedRenderTask(request, task, thenableState) {
+      var segment = task.blockedSegment,
+        newSegment = createPendingSegment(
+          request,
+          segment.chunks.length,
+          null,
+          task.formatContext,
+          segment.lastPushedText,
+          !0
+        );
+      segment.children.push(newSegment);
+      segment.lastPushedText = !1;
+      return createRenderTask(
+        request,
+        thenableState,
+        task.node,
+        task.childIndex,
+        task.blockedBoundary,
+        newSegment,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.abortSet,
+        task.keyPath,
+        task.formatContext,
+        task.context,
+        task.treeContext,
+        task.componentStack,
+        task.isFallback,
+        emptyContextObject,
+        task.debugTask
+      );
+    }
+    function renderNode(request, task, node, childIndex) {
+      var previousFormatContext = task.formatContext,
+        previousContext = task.context,
+        previousKeyPath = task.keyPath,
+        previousTreeContext = task.treeContext,
+        previousComponentStack = task.componentStack,
+        previousDebugTask = task.debugTask,
+        segment = task.blockedSegment;
+      if (null === segment)
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue) {
+          if (
+            (resetHooksState(),
+            (node =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedReplayTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedReplayTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      else {
+        var childrenLength = segment.children.length,
+          chunkLength = segment.chunks.length;
+        try {
+          return renderNodeDestructive(request, task, node, childIndex);
+        } catch (thrownValue$3) {
+          if (
+            (resetHooksState(),
+            (segment.children.length = childrenLength),
+            (segment.chunks.length = chunkLength),
+            (node =
+              thrownValue$3 === SuspenseException
+                ? getSuspendedThenable()
+                : thrownValue$3),
+            "object" === typeof node && null !== node)
+          ) {
+            if ("function" === typeof node.then) {
+              childIndex = getThenableStateAfterSuspending();
+              request = spawnNewSuspendedRenderTask(
+                request,
+                task,
+                childIndex
+              ).ping;
+              node.then(request, request);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+            if ("Maximum call stack size exceeded" === node.message) {
+              node = getThenableStateAfterSuspending();
+              node = spawnNewSuspendedRenderTask(request, task, node);
+              request.pingedTasks.push(node);
+              task.formatContext = previousFormatContext;
+              task.context = previousContext;
+              task.keyPath = previousKeyPath;
+              task.treeContext = previousTreeContext;
+              task.componentStack = previousComponentStack;
+              task.debugTask = previousDebugTask;
+              switchContext(previousContext);
+              return;
+            }
+          }
+        }
+      }
+      task.formatContext = previousFormatContext;
+      task.context = previousContext;
+      task.keyPath = previousKeyPath;
+      task.treeContext = previousTreeContext;
+      switchContext(previousContext);
+      throw node;
+    }
+    function abortTaskSoft(task) {
+      var boundary = task.blockedBoundary;
+      task = task.blockedSegment;
+      null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+    }
+    function abortRemainingReplayNodes(
+      request$jscomp$0,
+      boundary,
+      nodes,
+      slots,
+      error$jscomp$0,
+      errorDigest$jscomp$0,
+      errorInfo$jscomp$0,
+      aborted
+    ) {
+      for (var i = 0; i < nodes.length; i++) {
+        var node = nodes[i];
+        if (4 === node.length)
+          abortRemainingReplayNodes(
+            request$jscomp$0,
+            boundary,
+            node[2],
+            node[3],
+            error$jscomp$0,
+            errorDigest$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          );
+        else {
+          var request = request$jscomp$0;
+          node = node[5];
+          var error = error$jscomp$0,
+            errorDigest = errorDigest$jscomp$0,
+            errorInfo = errorInfo$jscomp$0,
+            wasAborted = aborted,
+            resumedBoundary = createSuspenseBoundary(
+              request,
+              new Set(),
+              null,
+              null
+            );
+          resumedBoundary.parentFlushed = !0;
+          resumedBoundary.rootSegmentID = node;
+          resumedBoundary.status = CLIENT_RENDERED;
+          encodeErrorForBoundary(
+            resumedBoundary,
+            errorDigest,
+            error,
+            errorInfo,
+            wasAborted
+          );
+          resumedBoundary.parentFlushed &&
+            request.clientRenderedBoundaries.push(resumedBoundary);
+        }
+      }
+      nodes.length = 0;
+      if (null !== slots) {
+        if (null === boundary)
+          throw Error(
+            "We should not have any resumable nodes in the shell. This is a bug in React."
+          );
+        boundary.status !== CLIENT_RENDERED &&
+          ((boundary.status = CLIENT_RENDERED),
+          encodeErrorForBoundary(
+            boundary,
+            errorDigest$jscomp$0,
+            error$jscomp$0,
+            errorInfo$jscomp$0,
+            aborted
+          ),
+          boundary.parentFlushed &&
+            request$jscomp$0.clientRenderedBoundaries.push(boundary));
+        if ("object" === typeof slots)
+          for (var index in slots) delete slots[index];
+      }
+    }
+    function abortTask(task, request, error) {
+      var boundary = task.blockedBoundary,
+        segment = task.blockedSegment;
+      if (null !== segment) {
+        if (6 === segment.status) return;
+        segment.status = 3;
+      }
+      segment = getThrownInfo(task.componentStack);
+      if (null === boundary) {
+        if (13 !== request.status && request.status !== CLOSED) {
+          boundary = task.replay;
+          if (null === boundary) {
+            logRecoverableError(request, error, segment, null);
+            fatalError(request, error, segment, null);
+            return;
+          }
+          boundary.pendingTasks--;
+          0 === boundary.pendingTasks &&
+            0 < boundary.nodes.length &&
+            ((task = logRecoverableError(request, error, segment, null)),
+            abortRemainingReplayNodes(
+              request,
+              null,
+              boundary.nodes,
+              boundary.slots,
+              error,
+              task,
+              segment,
+              !0
+            ));
+          request.pendingRootTasks--;
+          0 === request.pendingRootTasks && completeShell(request);
+        }
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            ((boundary.status = CLIENT_RENDERED),
+            (task = logRecoverableError(request, error, segment, null)),
+            (boundary.status = CLIENT_RENDERED),
+            encodeErrorForBoundary(boundary, task, error, segment, !0),
+            untrackBoundary(request, boundary),
+            boundary.parentFlushed &&
+              request.clientRenderedBoundaries.push(boundary)),
+          boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+            return abortTask(fallbackTask, request, error);
+          }),
+          boundary.fallbackAbortableTasks.clear();
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function safelyEmitEarlyPreloads(request, shellComplete) {
+      try {
+        var renderState = request.renderState,
+          onHeaders = renderState.onHeaders;
+        if (onHeaders) {
+          var headers = renderState.headers;
+          if (headers) {
+            renderState.headers = null;
+            var linkHeader = headers.preconnects;
+            headers.fontPreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.fontPreloads));
+            headers.highImagePreloads &&
+              (linkHeader && (linkHeader += ", "),
+              (linkHeader += headers.highImagePreloads));
+            if (!shellComplete) {
+              var queueIter = renderState.styles.values(),
+                queueStep = queueIter.next();
+              b: for (
+                ;
+                0 < headers.remainingCapacity && !queueStep.done;
+                queueStep = queueIter.next()
+              )
+                for (
+                  var sheetIter = queueStep.value.sheets.values(),
+                    sheetStep = sheetIter.next();
+                  0 < headers.remainingCapacity && !sheetStep.done;
+                  sheetStep = sheetIter.next()
+                ) {
+                  var sheet = sheetStep.value,
+                    props = sheet.props,
+                    key = props.href,
+                    props$jscomp$0 = sheet.props;
+                  var header = getPreloadAsHeader(
+                    props$jscomp$0.href,
+                    "style",
+                    {
+                      crossOrigin: props$jscomp$0.crossOrigin,
+                      integrity: props$jscomp$0.integrity,
+                      nonce: props$jscomp$0.nonce,
+                      type: props$jscomp$0.type,
+                      fetchPriority: props$jscomp$0.fetchPriority,
+                      referrerPolicy: props$jscomp$0.referrerPolicy,
+                      media: props$jscomp$0.media
+                    }
+                  );
+                  if (0 <= (headers.remainingCapacity -= header.length + 2))
+                    (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                      linkHeader && (linkHeader += ", "),
+                      (linkHeader += header),
+                      (renderState.resets.style[key] =
+                        "string" === typeof props.crossOrigin ||
+                        "string" === typeof props.integrity
+                          ? [props.crossOrigin, props.integrity]
+                          : PRELOAD_NO_CREDS);
+                  else break b;
+                }
+            }
+            linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+          }
+        }
+      } catch (error) {
+        logRecoverableError(request, error, {}, null);
+      }
+    }
+    function completeShell(request) {
+      null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+      null === request.trackedPostpones && preparePreamble(request);
+      request.onShellError = noop;
+      request = request.onShellReady;
+      request();
+    }
+    function completeAll(request) {
+      safelyEmitEarlyPreloads(
+        request,
+        null === request.trackedPostpones
+          ? !0
+          : null === request.completedRootSegment ||
+              request.completedRootSegment.status !== POSTPONED
+      );
+      preparePreamble(request);
+      request = request.onAllReady;
+      request();
+    }
+    function queueCompletedSegment(boundary, segment) {
+      if (
+        0 === segment.chunks.length &&
+        1 === segment.children.length &&
+        null === segment.children[0].boundary &&
+        -1 === segment.children[0].id
+      ) {
+        var childSegment = segment.children[0];
+        childSegment.id = segment.id;
+        childSegment.parentFlushed = !0;
+        childSegment.status === COMPLETED &&
+          queueCompletedSegment(boundary, childSegment);
+      } else boundary.completedSegments.push(segment);
+    }
+    function finishedTask(request, boundary, segment) {
+      if (null === boundary) {
+        if (null !== segment && segment.parentFlushed) {
+          if (null !== request.completedRootSegment)
+            throw Error(
+              "There can only be one root segment. This is a bug in React."
+            );
+          request.completedRootSegment = segment;
+        }
+        request.pendingRootTasks--;
+        0 === request.pendingRootTasks && completeShell(request);
+      } else
+        boundary.pendingTasks--,
+          boundary.status !== CLIENT_RENDERED &&
+            (0 === boundary.pendingTasks
+              ? (boundary.status === PENDING && (boundary.status = COMPLETED),
+                null !== segment &&
+                  segment.parentFlushed &&
+                  segment.status === COMPLETED &&
+                  queueCompletedSegment(boundary, segment),
+                boundary.parentFlushed &&
+                  request.completedBoundaries.push(boundary),
+                boundary.status === COMPLETED &&
+                  (boundary.fallbackAbortableTasks.forEach(
+                    abortTaskSoft,
+                    request
+                  ),
+                  boundary.fallbackAbortableTasks.clear(),
+                  0 === request.pendingRootTasks &&
+                    null === request.trackedPostpones &&
+                    null !== boundary.contentPreamble &&
+                    preparePreamble(request)))
+              : null !== segment &&
+                segment.parentFlushed &&
+                segment.status === COMPLETED &&
+                (queueCompletedSegment(boundary, segment),
+                1 === boundary.completedSegments.length &&
+                  boundary.parentFlushed &&
+                  request.partialBoundaries.push(boundary)));
+      request.allPendingTasks--;
+      0 === request.allPendingTasks && completeAll(request);
+    }
+    function performWork(request$jscomp$2) {
+      if (
+        request$jscomp$2.status !== CLOSED &&
+        13 !== request$jscomp$2.status
+      ) {
+        var prevContext = currentActiveSnapshot,
+          prevDispatcher = ReactSharedInternals.H;
+        ReactSharedInternals.H = HooksDispatcher;
+        var prevAsyncDispatcher = ReactSharedInternals.A;
+        ReactSharedInternals.A = DefaultAsyncDispatcher;
+        var prevRequest = currentRequest;
+        currentRequest = request$jscomp$2;
+        var prevGetCurrentStackImpl = ReactSharedInternals.getCurrentStack;
+        ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;
+        var prevResumableState = currentResumableState;
+        currentResumableState = request$jscomp$2.resumableState;
+        try {
+          var pingedTasks = request$jscomp$2.pingedTasks,
+            i;
+          for (i = 0; i < pingedTasks.length; i++) {
+            var request = request$jscomp$2,
+              task = pingedTasks[i],
+              segment = task.blockedSegment;
+            if (null === segment) {
+              var prevTaskInDEV = void 0,
+                request$jscomp$0 = request;
+              request = task;
+              if (0 !== request.replay.pendingTasks) {
+                switchContext(request.context);
+                prevTaskInDEV = currentTaskInDEV;
+                currentTaskInDEV = request;
+                try {
+                  "number" === typeof request.replay.slots
+                    ? resumeNode(
+                        request$jscomp$0,
+                        request,
+                        request.replay.slots,
+                        request.node,
+                        request.childIndex
+                      )
+                    : retryNode(request$jscomp$0, request);
+                  if (
+                    1 === request.replay.pendingTasks &&
+                    0 < request.replay.nodes.length
+                  )
+                    throw Error(
+                      "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                    );
+                  request.replay.pendingTasks--;
+                  request.abortSet.delete(request);
+                  finishedTask(request$jscomp$0, request.blockedBoundary, null);
+                } catch (thrownValue) {
+                  resetHooksState();
+                  var x =
+                    thrownValue === SuspenseException
+                      ? getSuspendedThenable()
+                      : thrownValue;
+                  if (
+                    "object" === typeof x &&
+                    null !== x &&
+                    "function" === typeof x.then
+                  ) {
+                    var ping = request.ping;
+                    x.then(ping, ping);
+                    request.thenableState = getThenableStateAfterSuspending();
+                  } else {
+                    request.replay.pendingTasks--;
+                    request.abortSet.delete(request);
+                    var errorInfo = getThrownInfo(request.componentStack),
+                      errorDigest = void 0,
+                      request$jscomp$1 = request$jscomp$0,
+                      boundary = request.blockedBoundary,
+                      error$jscomp$0 =
+                        12 === request$jscomp$0.status
+                          ? request$jscomp$0.fatalError
+                          : x,
+                      errorInfo$jscomp$0 = errorInfo,
+                      replayNodes = request.replay.nodes,
+                      resumeSlots = request.replay.slots;
+                    errorDigest = logRecoverableError(
+                      request$jscomp$1,
+                      error$jscomp$0,
+                      errorInfo$jscomp$0,
+                      request.debugTask
+                    );
+                    abortRemainingReplayNodes(
+                      request$jscomp$1,
+                      boundary,
+                      replayNodes,
+                      resumeSlots,
+                      error$jscomp$0,
+                      errorDigest,
+                      errorInfo$jscomp$0,
+                      !1
+                    );
+                    request$jscomp$0.pendingRootTasks--;
+                    0 === request$jscomp$0.pendingRootTasks &&
+                      completeShell(request$jscomp$0);
+                    request$jscomp$0.allPendingTasks--;
+                    0 === request$jscomp$0.allPendingTasks &&
+                      completeAll(request$jscomp$0);
+                  }
+                } finally {
+                  currentTaskInDEV = prevTaskInDEV;
+                }
+              }
+            } else if (
+              ((request$jscomp$0 = prevTaskInDEV = void 0),
+              (errorDigest = task),
+              (request$jscomp$1 = segment),
+              request$jscomp$1.status === PENDING)
+            ) {
+              request$jscomp$1.status = 6;
+              switchContext(errorDigest.context);
+              request$jscomp$0 = currentTaskInDEV;
+              currentTaskInDEV = errorDigest;
+              var childrenLength = request$jscomp$1.children.length,
+                chunkLength = request$jscomp$1.chunks.length;
+              try {
+                retryNode(request, errorDigest),
+                  request$jscomp$1.lastPushedText &&
+                    request$jscomp$1.textEmbedded &&
+                    request$jscomp$1.chunks.push(textSeparator),
+                  errorDigest.abortSet.delete(errorDigest),
+                  (request$jscomp$1.status = COMPLETED),
+                  finishedTask(
+                    request,
+                    errorDigest.blockedBoundary,
+                    request$jscomp$1
+                  );
+              } catch (thrownValue) {
+                resetHooksState();
+                request$jscomp$1.children.length = childrenLength;
+                request$jscomp$1.chunks.length = chunkLength;
+                var x$jscomp$0 =
+                  thrownValue === SuspenseException
+                    ? getSuspendedThenable()
+                    : 12 === request.status
+                      ? request.fatalError
+                      : thrownValue;
+                if (
+                  "object" === typeof x$jscomp$0 &&
+                  null !== x$jscomp$0 &&
+                  "function" === typeof x$jscomp$0.then
+                ) {
+                  request$jscomp$1.status = PENDING;
+                  errorDigest.thenableState = getThenableStateAfterSuspending();
+                  var ping$jscomp$0 = errorDigest.ping;
+                  x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+                } else {
+                  var errorInfo$jscomp$1 = getThrownInfo(
+                    errorDigest.componentStack
+                  );
+                  errorDigest.abortSet.delete(errorDigest);
+                  request$jscomp$1.status = 4;
+                  var boundary$jscomp$0 = errorDigest.blockedBoundary,
+                    debugTask = errorDigest.debugTask;
+                  prevTaskInDEV = logRecoverableError(
+                    request,
+                    x$jscomp$0,
+                    errorInfo$jscomp$1,
+                    debugTask
+                  );
+                  null === boundary$jscomp$0
+                    ? fatalError(
+                        request,
+                        x$jscomp$0,
+                        errorInfo$jscomp$1,
+                        debugTask
+                      )
+                    : (boundary$jscomp$0.pendingTasks--,
+                      boundary$jscomp$0.status !== CLIENT_RENDERED &&
+                        ((boundary$jscomp$0.status = CLIENT_RENDERED),
+                        encodeErrorForBoundary(
+                          boundary$jscomp$0,
+                          prevTaskInDEV,
+                          x$jscomp$0,
+                          errorInfo$jscomp$1,
+                          !1
+                        ),
+                        untrackBoundary(request, boundary$jscomp$0),
+                        boundary$jscomp$0.parentFlushed &&
+                          request.clientRenderedBoundaries.push(
+                            boundary$jscomp$0
+                          ),
+                        0 === request.pendingRootTasks &&
+                          null === request.trackedPostpones &&
+                          null !== boundary$jscomp$0.contentPreamble &&
+                          preparePreamble(request)));
+                  request.allPendingTasks--;
+                  0 === request.allPendingTasks && completeAll(request);
+                }
+              } finally {
+                currentTaskInDEV = request$jscomp$0;
+              }
+            }
+          }
+          pingedTasks.splice(0, i);
+          null !== request$jscomp$2.destination &&
+            flushCompletedQueues(
+              request$jscomp$2,
+              request$jscomp$2.destination
+            );
+        } catch (error) {
+          (pingedTasks = {}),
+            logRecoverableError(request$jscomp$2, error, pingedTasks, null),
+            fatalError(request$jscomp$2, error, pingedTasks, null);
+        } finally {
+          (currentResumableState = prevResumableState),
+            (ReactSharedInternals.H = prevDispatcher),
+            (ReactSharedInternals.A = prevAsyncDispatcher),
+            (ReactSharedInternals.getCurrentStack = prevGetCurrentStackImpl),
+            prevDispatcher === HooksDispatcher && switchContext(prevContext),
+            (currentRequest = prevRequest);
+        }
+      }
+    }
+    function preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      segment.preambleChildren.length &&
+        collectedPreambleSegments.push(segment.preambleChildren);
+      for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+        pendingPreambles =
+          preparePreambleFromSegment(
+            request,
+            segment.children[i],
+            collectedPreambleSegments
+          ) || pendingPreambles;
+      return pendingPreambles;
+    }
+    function preparePreambleFromSegment(
+      request,
+      segment,
+      collectedPreambleSegments
+    ) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return preparePreambleFromSubtree(
+          request,
+          segment,
+          collectedPreambleSegments
+        );
+      var preamble = boundary.contentPreamble,
+        fallbackPreamble = boundary.fallbackPreamble;
+      if (null === preamble || null === fallbackPreamble) return !1;
+      switch (boundary.status) {
+        case COMPLETED:
+          hoistPreambleState(request.renderState, preamble);
+          segment = boundary.completedSegments[0];
+          if (!segment)
+            throw Error(
+              "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+            );
+          return preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          );
+        case POSTPONED:
+          if (null !== request.trackedPostpones) return !0;
+        case CLIENT_RENDERED:
+          if (segment.status === COMPLETED)
+            return (
+              hoistPreambleState(request.renderState, fallbackPreamble),
+              preparePreambleFromSubtree(
+                request,
+                segment,
+                collectedPreambleSegments
+              )
+            );
+        default:
+          return !0;
+      }
+    }
+    function preparePreamble(request) {
+      if (
+        request.completedRootSegment &&
+        null === request.completedPreambleSegments
+      ) {
+        var collectedPreambleSegments = [],
+          hasPendingPreambles = preparePreambleFromSegment(
+            request,
+            request.completedRootSegment,
+            collectedPreambleSegments
+          ),
+          preamble = request.renderState.preamble;
+        if (
+          !1 === hasPendingPreambles ||
+          (preamble.headChunks && preamble.bodyChunks)
+        )
+          request.completedPreambleSegments = collectedPreambleSegments;
+      }
+    }
+    function flushSubtree(request, destination, segment, hoistableState) {
+      segment.parentFlushed = !0;
+      switch (segment.status) {
+        case PENDING:
+          segment.id = request.nextSegmentId++;
+        case POSTPONED:
+          return (
+            (hoistableState = segment.id),
+            (segment.lastPushedText = !1),
+            (segment.textEmbedded = !1),
+            (request = request.renderState),
+            writeChunk(destination, placeholder1),
+            writeChunk(destination, request.placeholderPrefix),
+            (request = hoistableState.toString(16)),
+            writeChunk(destination, request),
+            writeChunkAndReturn(destination, placeholder2)
+          );
+        case COMPLETED:
+          segment.status = FLUSHED;
+          var r = !0,
+            chunks = segment.chunks,
+            chunkIdx = 0;
+          segment = segment.children;
+          for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+            for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+              writeChunk(destination, chunks[chunkIdx]);
+            r = flushSegment(request, destination, r, hoistableState);
+          }
+          for (; chunkIdx < chunks.length - 1; chunkIdx++)
+            writeChunk(destination, chunks[chunkIdx]);
+          chunkIdx < chunks.length &&
+            (r = writeChunkAndReturn(destination, chunks[chunkIdx]));
+          return r;
+        default:
+          throw Error(
+            "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+          );
+      }
+    }
+    function flushSegment(request, destination, segment, hoistableState) {
+      var boundary = segment.boundary;
+      if (null === boundary)
+        return flushSubtree(request, destination, segment, hoistableState);
+      boundary.parentFlushed = !0;
+      if (boundary.status === CLIENT_RENDERED) {
+        var errorDigest = boundary.errorDigest,
+          errorMessage = boundary.errorMessage,
+          errorStack = boundary.errorStack,
+          errorComponentStack = boundary.errorComponentStack;
+        writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);
+        writeChunk(destination, clientRenderedSuspenseBoundaryError1);
+        errorDigest &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
+          writeChunk(destination, escapeTextForBrowser(errorDigest)),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        errorMessage &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1B),
+          writeChunk(destination, escapeTextForBrowser(errorMessage)),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        errorStack &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1C),
+          writeChunk(destination, escapeTextForBrowser(errorStack)),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        errorComponentStack &&
+          (writeChunk(destination, clientRenderedSuspenseBoundaryError1D),
+          writeChunk(destination, escapeTextForBrowser(errorComponentStack)),
+          writeChunk(
+            destination,
+            clientRenderedSuspenseBoundaryErrorAttrInterstitial
+          ));
+        writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);
+        flushSubtree(request, destination, segment, hoistableState);
+        (request = boundary.fallbackPreamble) &&
+          writePreambleContribution(destination, request);
+        return writeChunkAndReturn(destination, endSuspenseBoundary);
+      }
+      if (boundary.status !== COMPLETED)
+        return (
+          boundary.status === PENDING &&
+            (boundary.rootSegmentID = request.nextSegmentId++),
+          0 < boundary.completedSegments.length &&
+            request.partialBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          hoistableState &&
+            ((boundary = boundary.fallbackState),
+            boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+            boundary.stylesheets.forEach(
+              hoistStylesheetDependency,
+              hoistableState
+            )),
+          flushSubtree(request, destination, segment, hoistableState),
+          writeChunkAndReturn(destination, endSuspenseBoundary)
+        );
+      if (boundary.byteSize > request.progressiveChunkSize)
+        return (
+          (boundary.rootSegmentID = request.nextSegmentId++),
+          request.completedBoundaries.push(boundary),
+          writeStartPendingSuspenseBoundary(
+            destination,
+            request.renderState,
+            boundary.rootSegmentID
+          ),
+          flushSubtree(request, destination, segment, hoistableState),
+          writeChunkAndReturn(destination, endSuspenseBoundary)
+        );
+      hoistableState &&
+        ((segment = boundary.contentState),
+        segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+      writeChunkAndReturn(destination, startCompletedSuspenseBoundary);
+      segment = boundary.completedSegments;
+      if (1 !== segment.length)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      flushSegment(request, destination, segment[0], hoistableState);
+      (request = boundary.contentPreamble) &&
+        writePreambleContribution(destination, request);
+      return writeChunkAndReturn(destination, endSuspenseBoundary);
+    }
+    function flushSegmentContainer(
+      request,
+      destination,
+      segment,
+      hoistableState
+    ) {
+      writeStartSegment(
+        destination,
+        request.renderState,
+        segment.parentFormatContext,
+        segment.id
+      );
+      flushSegment(request, destination, segment, hoistableState);
+      return writeEndSegment(destination, segment.parentFormatContext);
+    }
+    function flushCompletedBoundary(request, destination, boundary) {
+      for (
+        var completedSegments = boundary.completedSegments, i = 0;
+        i < completedSegments.length;
+        i++
+      )
+        flushPartiallyCompletedSegment(
+          request,
+          destination,
+          boundary,
+          completedSegments[i]
+        );
+      completedSegments.length = 0;
+      writeHoistablesForBoundary(
+        destination,
+        boundary.contentState,
+        request.renderState
+      );
+      completedSegments = request.resumableState;
+      request = request.renderState;
+      i = boundary.rootSegmentID;
+      boundary = boundary.contentState;
+      var requiresStyleInsertion = request.stylesToHoist;
+      request.stylesToHoist = !1;
+      writeChunk(destination, request.startInlineScript);
+      requiresStyleInsertion
+        ? (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+          NothingSent
+          ? ((completedSegments.instructions =
+              completedSegments.instructions |
+              SentStyleInsertionFunction |
+              SentCompleteBoundaryFunction),
+            writeChunk(destination, completeBoundaryWithStylesScript1FullBoth))
+          : (completedSegments.instructions & SentStyleInsertionFunction) ===
+              NothingSent
+            ? ((completedSegments.instructions |= SentStyleInsertionFunction),
+              writeChunk(
+                destination,
+                completeBoundaryWithStylesScript1FullPartial
+              ))
+            : writeChunk(destination, completeBoundaryWithStylesScript1Partial)
+        : (completedSegments.instructions & SentCompleteBoundaryFunction) ===
+            NothingSent
+          ? ((completedSegments.instructions |= SentCompleteBoundaryFunction),
+            writeChunk(destination, completeBoundaryScript1Full))
+          : writeChunk(destination, completeBoundaryScript1Partial);
+      completedSegments = i.toString(16);
+      writeChunk(destination, request.boundaryPrefix);
+      writeChunk(destination, completedSegments);
+      writeChunk(destination, completeBoundaryScript2);
+      writeChunk(destination, request.segmentPrefix);
+      writeChunk(destination, completedSegments);
+      requiresStyleInsertion
+        ? (writeChunk(destination, completeBoundaryScript3a),
+          writeStyleResourceDependenciesInJS(destination, boundary))
+        : writeChunk(destination, completeBoundaryScript3b);
+      boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd);
+      return writeBootstrap(destination, request) && boundary;
+    }
+    function flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      segment
+    ) {
+      if (segment.status === FLUSHED) return !0;
+      var hoistableState = boundary.contentState,
+        segmentID = segment.id;
+      if (-1 === segmentID) {
+        if (-1 === (segment.id = boundary.rootSegmentID))
+          throw Error(
+            "A root segment ID must have been assigned by now. This is a bug in React."
+          );
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      }
+      if (segmentID === boundary.rootSegmentID)
+        return flushSegmentContainer(
+          request,
+          destination,
+          segment,
+          hoistableState
+        );
+      flushSegmentContainer(request, destination, segment, hoistableState);
+      boundary = request.resumableState;
+      request = request.renderState;
+      writeChunk(destination, request.startInlineScript);
+      (boundary.instructions & SentCompleteSegmentFunction) === NothingSent
+        ? ((boundary.instructions |= SentCompleteSegmentFunction),
+          writeChunk(destination, completeSegmentScript1Full))
+        : writeChunk(destination, completeSegmentScript1Partial);
+      writeChunk(destination, request.segmentPrefix);
+      segmentID = segmentID.toString(16);
+      writeChunk(destination, segmentID);
+      writeChunk(destination, completeSegmentScript2);
+      writeChunk(destination, request.placeholderPrefix);
+      writeChunk(destination, segmentID);
+      destination = writeChunkAndReturn(destination, completeSegmentScriptEnd);
+      return destination;
+    }
+    function flushCompletedQueues(request, destination) {
+      currentView = new Uint8Array(2048);
+      writtenBytes = 0;
+      destinationHasCapacity$1 = !0;
+      try {
+        if (!(0 < request.pendingRootTasks)) {
+          var i,
+            completedRootSegment = request.completedRootSegment;
+          if (null !== completedRootSegment) {
+            if (completedRootSegment.status === POSTPONED) return;
+            var completedPreambleSegments = request.completedPreambleSegments;
+            if (null === completedPreambleSegments) return;
+            var renderState = request.renderState,
+              preamble = renderState.preamble,
+              htmlChunks = preamble.htmlChunks,
+              headChunks = preamble.headChunks,
+              i$jscomp$0;
+            if (htmlChunks) {
+              for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+                writeChunk(destination, htmlChunks[i$jscomp$0]);
+              if (headChunks)
+                for (
+                  i$jscomp$0 = 0;
+                  i$jscomp$0 < headChunks.length;
+                  i$jscomp$0++
+                )
+                  writeChunk(destination, headChunks[i$jscomp$0]);
+              else
+                writeChunk(destination, startChunkForTag("head")),
+                  writeChunk(destination, endOfStartTag);
+            } else if (headChunks)
+              for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+                writeChunk(destination, headChunks[i$jscomp$0]);
+            var charsetChunks = renderState.charsetChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < charsetChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, charsetChunks[i$jscomp$0]);
+            charsetChunks.length = 0;
+            renderState.preconnects.forEach(flushResource, destination);
+            renderState.preconnects.clear();
+            var viewportChunks = renderState.viewportChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < viewportChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, viewportChunks[i$jscomp$0]);
+            viewportChunks.length = 0;
+            renderState.fontPreloads.forEach(flushResource, destination);
+            renderState.fontPreloads.clear();
+            renderState.highImagePreloads.forEach(flushResource, destination);
+            renderState.highImagePreloads.clear();
+            renderState.styles.forEach(flushStylesInPreamble, destination);
+            var importMapChunks = renderState.importMapChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < importMapChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, importMapChunks[i$jscomp$0]);
+            importMapChunks.length = 0;
+            renderState.bootstrapScripts.forEach(flushResource, destination);
+            renderState.scripts.forEach(flushResource, destination);
+            renderState.scripts.clear();
+            renderState.bulkPreloads.forEach(flushResource, destination);
+            renderState.bulkPreloads.clear();
+            var hoistableChunks = renderState.hoistableChunks;
+            for (
+              i$jscomp$0 = 0;
+              i$jscomp$0 < hoistableChunks.length;
+              i$jscomp$0++
+            )
+              writeChunk(destination, hoistableChunks[i$jscomp$0]);
+            for (
+              renderState = hoistableChunks.length = 0;
+              renderState < completedPreambleSegments.length;
+              renderState++
+            ) {
+              var segments = completedPreambleSegments[renderState];
+              for (preamble = 0; preamble < segments.length; preamble++)
+                flushSegment(request, destination, segments[preamble], null);
+            }
+            var preamble$jscomp$0 = request.renderState.preamble,
+              headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+            (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) &&
+              writeChunk(destination, endChunkForTag("head"));
+            var bodyChunks = preamble$jscomp$0.bodyChunks;
+            if (bodyChunks)
+              for (
+                completedPreambleSegments = 0;
+                completedPreambleSegments < bodyChunks.length;
+                completedPreambleSegments++
+              )
+                writeChunk(destination, bodyChunks[completedPreambleSegments]);
+            flushSegment(request, destination, completedRootSegment, null);
+            request.completedRootSegment = null;
+            writeBootstrap(destination, request.renderState);
+          }
+          var renderState$jscomp$0 = request.renderState;
+          completedRootSegment = 0;
+          var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < viewportChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            writeChunk(
+              destination,
+              viewportChunks$jscomp$0[completedRootSegment]
+            );
+          viewportChunks$jscomp$0.length = 0;
+          renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+          renderState$jscomp$0.preconnects.clear();
+          renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.fontPreloads.clear();
+          renderState$jscomp$0.highImagePreloads.forEach(
+            flushResource,
+            destination
+          );
+          renderState$jscomp$0.highImagePreloads.clear();
+          renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+          renderState$jscomp$0.scripts.forEach(flushResource, destination);
+          renderState$jscomp$0.scripts.clear();
+          renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+          renderState$jscomp$0.bulkPreloads.clear();
+          var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+          for (
+            completedRootSegment = 0;
+            completedRootSegment < hoistableChunks$jscomp$0.length;
+            completedRootSegment++
+          )
+            writeChunk(
+              destination,
+              hoistableChunks$jscomp$0[completedRootSegment]
+            );
+          hoistableChunks$jscomp$0.length = 0;
+          var clientRenderedBoundaries = request.clientRenderedBoundaries;
+          for (i = 0; i < clientRenderedBoundaries.length; i++) {
+            var boundary = clientRenderedBoundaries[i];
+            renderState$jscomp$0 = destination;
+            var resumableState = request.resumableState,
+              renderState$jscomp$1 = request.renderState,
+              id = boundary.rootSegmentID,
+              errorDigest = boundary.errorDigest,
+              errorMessage = boundary.errorMessage,
+              errorStack = boundary.errorStack,
+              errorComponentStack = boundary.errorComponentStack;
+            writeChunk(
+              renderState$jscomp$0,
+              renderState$jscomp$1.startInlineScript
+            );
+            (resumableState.instructions & SentClientRenderFunction) ===
+            NothingSent
+              ? ((resumableState.instructions |= SentClientRenderFunction),
+                writeChunk(renderState$jscomp$0, clientRenderScript1Full))
+              : writeChunk(renderState$jscomp$0, clientRenderScript1Partial);
+            writeChunk(
+              renderState$jscomp$0,
+              renderState$jscomp$1.boundaryPrefix
+            );
+            writeChunk(renderState$jscomp$0, id.toString(16));
+            writeChunk(renderState$jscomp$0, clientRenderScript1A);
+            if (
+              errorDigest ||
+              errorMessage ||
+              errorStack ||
+              errorComponentStack
+            )
+              writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+                writeChunk(
+                  renderState$jscomp$0,
+                  escapeJSStringsForInstructionScripts(errorDigest || "")
+                );
+            if (errorMessage || errorStack || errorComponentStack)
+              writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+                writeChunk(
+                  renderState$jscomp$0,
+                  escapeJSStringsForInstructionScripts(errorMessage || "")
+                );
+            if (errorStack || errorComponentStack)
+              writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+                writeChunk(
+                  renderState$jscomp$0,
+                  escapeJSStringsForInstructionScripts(errorStack || "")
+                );
+            errorComponentStack &&
+              (writeChunk(
+                renderState$jscomp$0,
+                clientRenderErrorScriptArgInterstitial
+              ),
+              writeChunk(
+                renderState$jscomp$0,
+                escapeJSStringsForInstructionScripts(errorComponentStack)
+              ));
+            var JSCompiler_inline_result = writeChunkAndReturn(
+              renderState$jscomp$0,
+              clientRenderScriptEnd
+            );
+            if (!JSCompiler_inline_result) {
+              request.destination = null;
+              i++;
+              clientRenderedBoundaries.splice(0, i);
+              return;
+            }
+          }
+          clientRenderedBoundaries.splice(0, i);
+          var completedBoundaries = request.completedBoundaries;
+          for (i = 0; i < completedBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(
+                request,
+                destination,
+                completedBoundaries[i]
+              )
+            ) {
+              request.destination = null;
+              i++;
+              completedBoundaries.splice(0, i);
+              return;
+            }
+          completedBoundaries.splice(0, i);
+          completeWriting(destination);
+          currentView = new Uint8Array(2048);
+          writtenBytes = 0;
+          destinationHasCapacity$1 = !0;
+          var partialBoundaries = request.partialBoundaries;
+          for (i = 0; i < partialBoundaries.length; i++) {
+            a: {
+              clientRenderedBoundaries = request;
+              boundary = destination;
+              var boundary$jscomp$0 = partialBoundaries[i],
+                completedSegments = boundary$jscomp$0.completedSegments;
+              for (
+                JSCompiler_inline_result = 0;
+                JSCompiler_inline_result < completedSegments.length;
+                JSCompiler_inline_result++
+              )
+                if (
+                  !flushPartiallyCompletedSegment(
+                    clientRenderedBoundaries,
+                    boundary,
+                    boundary$jscomp$0,
+                    completedSegments[JSCompiler_inline_result]
+                  )
+                ) {
+                  JSCompiler_inline_result++;
+                  completedSegments.splice(0, JSCompiler_inline_result);
+                  var JSCompiler_inline_result$jscomp$0 = !1;
+                  break a;
+                }
+              completedSegments.splice(0, JSCompiler_inline_result);
+              JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+                boundary,
+                boundary$jscomp$0.contentState,
+                clientRenderedBoundaries.renderState
+              );
+            }
+            if (!JSCompiler_inline_result$jscomp$0) {
+              request.destination = null;
+              i++;
+              partialBoundaries.splice(0, i);
+              return;
+            }
+          }
+          partialBoundaries.splice(0, i);
+          var largeBoundaries = request.completedBoundaries;
+          for (i = 0; i < largeBoundaries.length; i++)
+            if (
+              !flushCompletedBoundary(request, destination, largeBoundaries[i])
+            ) {
+              request.destination = null;
+              i++;
+              largeBoundaries.splice(0, i);
+              return;
+            }
+          largeBoundaries.splice(0, i);
+        }
+      } finally {
+        0 === request.allPendingTasks &&
+        0 === request.pingedTasks.length &&
+        0 === request.clientRenderedBoundaries.length &&
+        0 === request.completedBoundaries.length
+          ? ((request.flushScheduled = !1),
+            (i = request.resumableState),
+            i.hasBody && writeChunk(destination, endChunkForTag("body")),
+            i.hasHtml && writeChunk(destination, endChunkForTag("html")),
+            completeWriting(destination),
+            flushBuffered(destination),
+            0 !== request.abortableTasks.size &&
+              console.error(
+                "There was still abortable task at the root when we closed. This is a bug in React."
+              ),
+            (request.status = CLOSED),
+            destination.end(),
+            (request.destination = null))
+          : (completeWriting(destination), flushBuffered(destination));
+      }
+    }
+    function startWork(request) {
+      request.flushScheduled = null !== request.destination;
+      scheduleMicrotask(function () {
+        return requestStorage.run(request, performWork, request);
+      });
+      setImmediate(function () {
+        10 === request.status && (request.status = 11);
+        null === request.trackedPostpones &&
+          requestStorage.run(
+            request,
+            enqueueEarlyPreloadsAfterInitialWork,
+            request
+          );
+      });
+    }
+    function enqueueEarlyPreloadsAfterInitialWork(request) {
+      safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+    }
+    function enqueueFlush(request) {
+      !1 === request.flushScheduled &&
+        0 === request.pingedTasks.length &&
+        null !== request.destination &&
+        ((request.flushScheduled = !0),
+        setImmediate(function () {
+          var destination = request.destination;
+          destination
+            ? flushCompletedQueues(request, destination)
+            : (request.flushScheduled = !1);
+        }));
+    }
+    function startFlowing(request, destination) {
+      if (13 === request.status)
+        (request.status = CLOSED), destination.destroy(request.fatalError);
+      else if (request.status !== CLOSED && null === request.destination) {
+        request.destination = destination;
+        try {
+          flushCompletedQueues(request, destination);
+        } catch (error) {
+          (destination = {}),
+            logRecoverableError(request, error, destination, null),
+            fatalError(request, error, destination, null);
+        }
+      }
+    }
+    function abort(request, reason) {
+      if (11 === request.status || 10 === request.status) request.status = 12;
+      try {
+        var abortableTasks = request.abortableTasks;
+        if (0 < abortableTasks.size) {
+          var error =
+            void 0 === reason
+              ? Error("The render was aborted by the server without a reason.")
+              : "object" === typeof reason &&
+                  null !== reason &&
+                  "function" === typeof reason.then
+                ? Error("The render was aborted by the server with a promise.")
+                : reason;
+          request.fatalError = error;
+          abortableTasks.forEach(function (task) {
+            return abortTask(task, request, error);
+          });
+          abortableTasks.clear();
+        }
+        null !== request.destination &&
+          flushCompletedQueues(request, request.destination);
+      } catch (error$4) {
+        (reason = {}),
+          logRecoverableError(request, error$4, reason, null),
+          fatalError(request, error$4, reason, null);
+      }
+    }
+    function ensureCorrectIsomorphicReactVersion() {
+      var isomorphicReactPackageVersion = React.version;
+      if ("19.1.1" !== isomorphicReactPackageVersion)
+        throw Error(
+          'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n  - react:      ' +
+            (isomorphicReactPackageVersion +
+              "\n  - react-dom:  19.1.1\nLearn more: https://react.dev/warnings/version-mismatch")
+        );
+    }
+    function createDrainHandler(destination, request) {
+      return function () {
+        return startFlowing(request, destination);
+      };
+    }
+    function createCancelHandler(request, reason) {
+      return function () {
+        request.destination = null;
+        abort(request, Error(reason));
+      };
+    }
+    function createRequestImpl(children, options) {
+      var resumableState = createResumableState(
+        options ? options.identifierPrefix : void 0,
+        options ? options.unstable_externalRuntimeSrc : void 0,
+        options ? options.bootstrapScriptContent : void 0,
+        options ? options.bootstrapScripts : void 0,
+        options ? options.bootstrapModules : void 0
+      );
+      return createRequest(
+        children,
+        resumableState,
+        createRenderState(
+          resumableState,
+          options ? options.nonce : void 0,
+          options ? options.unstable_externalRuntimeSrc : void 0,
+          options ? options.importMap : void 0,
+          options ? options.onHeaders : void 0,
+          options ? options.maxHeadersLength : void 0
+        ),
+        createRootFormatContext(options ? options.namespaceURI : void 0),
+        options ? options.progressiveChunkSize : void 0,
+        options ? options.onError : void 0,
+        options ? options.onAllReady : void 0,
+        options ? options.onShellReady : void 0,
+        options ? options.onShellError : void 0,
+        void 0,
+        options ? options.onPostpone : void 0,
+        options ? options.formState : void 0
+      );
+    }
+    function createFakeWritable(readable) {
+      return {
+        write: function (chunk) {
+          return readable.push(chunk);
+        },
+        end: function () {
+          readable.push(null);
+        },
+        destroy: function (error) {
+          readable.destroy(error);
+        }
+      };
+    }
+    var util = require("util"),
+      crypto = require("crypto"),
+      async_hooks = require("async_hooks"),
+      React = require("react"),
+      ReactDOM = require("react-dom"),
+      stream = require("stream"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+      REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+      REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+      REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+      REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+      MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+      isArrayImpl = Array.isArray,
+      jsxPropsParents = new WeakMap(),
+      jsxChildrenParents = new WeakMap(),
+      CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"),
+      scheduleMicrotask = queueMicrotask,
+      currentView = null,
+      writtenBytes = 0,
+      destinationHasCapacity$1 = !0,
+      textEncoder = new util.TextEncoder(),
+      assign = Object.assign,
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+        "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      illegalAttributeNameCache = {},
+      validatedAttributeNameCache = {},
+      unitlessNumbers = new Set(
+        "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+          " "
+        )
+      ),
+      aliases = new Map([
+        ["acceptCharset", "accept-charset"],
+        ["htmlFor", "for"],
+        ["httpEquiv", "http-equiv"],
+        ["crossOrigin", "crossorigin"],
+        ["accentHeight", "accent-height"],
+        ["alignmentBaseline", "alignment-baseline"],
+        ["arabicForm", "arabic-form"],
+        ["baselineShift", "baseline-shift"],
+        ["capHeight", "cap-height"],
+        ["clipPath", "clip-path"],
+        ["clipRule", "clip-rule"],
+        ["colorInterpolation", "color-interpolation"],
+        ["colorInterpolationFilters", "color-interpolation-filters"],
+        ["colorProfile", "color-profile"],
+        ["colorRendering", "color-rendering"],
+        ["dominantBaseline", "dominant-baseline"],
+        ["enableBackground", "enable-background"],
+        ["fillOpacity", "fill-opacity"],
+        ["fillRule", "fill-rule"],
+        ["floodColor", "flood-color"],
+        ["floodOpacity", "flood-opacity"],
+        ["fontFamily", "font-family"],
+        ["fontSize", "font-size"],
+        ["fontSizeAdjust", "font-size-adjust"],
+        ["fontStretch", "font-stretch"],
+        ["fontStyle", "font-style"],
+        ["fontVariant", "font-variant"],
+        ["fontWeight", "font-weight"],
+        ["glyphName", "glyph-name"],
+        ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+        ["glyphOrientationVertical", "glyph-orientation-vertical"],
+        ["horizAdvX", "horiz-adv-x"],
+        ["horizOriginX", "horiz-origin-x"],
+        ["imageRendering", "image-rendering"],
+        ["letterSpacing", "letter-spacing"],
+        ["lightingColor", "lighting-color"],
+        ["markerEnd", "marker-end"],
+        ["markerMid", "marker-mid"],
+        ["markerStart", "marker-start"],
+        ["overlinePosition", "overline-position"],
+        ["overlineThickness", "overline-thickness"],
+        ["paintOrder", "paint-order"],
+        ["panose-1", "panose-1"],
+        ["pointerEvents", "pointer-events"],
+        ["renderingIntent", "rendering-intent"],
+        ["shapeRendering", "shape-rendering"],
+        ["stopColor", "stop-color"],
+        ["stopOpacity", "stop-opacity"],
+        ["strikethroughPosition", "strikethrough-position"],
+        ["strikethroughThickness", "strikethrough-thickness"],
+        ["strokeDasharray", "stroke-dasharray"],
+        ["strokeDashoffset", "stroke-dashoffset"],
+        ["strokeLinecap", "stroke-linecap"],
+        ["strokeLinejoin", "stroke-linejoin"],
+        ["strokeMiterlimit", "stroke-miterlimit"],
+        ["strokeOpacity", "stroke-opacity"],
+        ["strokeWidth", "stroke-width"],
+        ["textAnchor", "text-anchor"],
+        ["textDecoration", "text-decoration"],
+        ["textRendering", "text-rendering"],
+        ["transformOrigin", "transform-origin"],
+        ["underlinePosition", "underline-position"],
+        ["underlineThickness", "underline-thickness"],
+        ["unicodeBidi", "unicode-bidi"],
+        ["unicodeRange", "unicode-range"],
+        ["unitsPerEm", "units-per-em"],
+        ["vAlphabetic", "v-alphabetic"],
+        ["vHanging", "v-hanging"],
+        ["vIdeographic", "v-ideographic"],
+        ["vMathematical", "v-mathematical"],
+        ["vectorEffect", "vector-effect"],
+        ["vertAdvY", "vert-adv-y"],
+        ["vertOriginX", "vert-origin-x"],
+        ["vertOriginY", "vert-origin-y"],
+        ["wordSpacing", "word-spacing"],
+        ["writingMode", "writing-mode"],
+        ["xmlnsXlink", "xmlns:xlink"],
+        ["xHeight", "x-height"]
+      ]),
+      hasReadOnlyValue = {
+        button: !0,
+        checkbox: !0,
+        image: !0,
+        hidden: !0,
+        radio: !0,
+        reset: !0,
+        submit: !0
+      },
+      ariaProperties = {
+        "aria-current": 0,
+        "aria-description": 0,
+        "aria-details": 0,
+        "aria-disabled": 0,
+        "aria-hidden": 0,
+        "aria-invalid": 0,
+        "aria-keyshortcuts": 0,
+        "aria-label": 0,
+        "aria-roledescription": 0,
+        "aria-autocomplete": 0,
+        "aria-checked": 0,
+        "aria-expanded": 0,
+        "aria-haspopup": 0,
+        "aria-level": 0,
+        "aria-modal": 0,
+        "aria-multiline": 0,
+        "aria-multiselectable": 0,
+        "aria-orientation": 0,
+        "aria-placeholder": 0,
+        "aria-pressed": 0,
+        "aria-readonly": 0,
+        "aria-required": 0,
+        "aria-selected": 0,
+        "aria-sort": 0,
+        "aria-valuemax": 0,
+        "aria-valuemin": 0,
+        "aria-valuenow": 0,
+        "aria-valuetext": 0,
+        "aria-atomic": 0,
+        "aria-busy": 0,
+        "aria-live": 0,
+        "aria-relevant": 0,
+        "aria-dropeffect": 0,
+        "aria-grabbed": 0,
+        "aria-activedescendant": 0,
+        "aria-colcount": 0,
+        "aria-colindex": 0,
+        "aria-colspan": 0,
+        "aria-controls": 0,
+        "aria-describedby": 0,
+        "aria-errormessage": 0,
+        "aria-flowto": 0,
+        "aria-labelledby": 0,
+        "aria-owns": 0,
+        "aria-posinset": 0,
+        "aria-rowcount": 0,
+        "aria-rowindex": 0,
+        "aria-rowspan": 0,
+        "aria-setsize": 0
+      },
+      warnedProperties$1 = {},
+      rARIA$1 = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel$1 = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      didWarnValueNull = !1,
+      possibleStandardNames = {
+        accept: "accept",
+        acceptcharset: "acceptCharset",
+        "accept-charset": "acceptCharset",
+        accesskey: "accessKey",
+        action: "action",
+        allowfullscreen: "allowFullScreen",
+        alt: "alt",
+        as: "as",
+        async: "async",
+        autocapitalize: "autoCapitalize",
+        autocomplete: "autoComplete",
+        autocorrect: "autoCorrect",
+        autofocus: "autoFocus",
+        autoplay: "autoPlay",
+        autosave: "autoSave",
+        capture: "capture",
+        cellpadding: "cellPadding",
+        cellspacing: "cellSpacing",
+        challenge: "challenge",
+        charset: "charSet",
+        checked: "checked",
+        children: "children",
+        cite: "cite",
+        class: "className",
+        classid: "classID",
+        classname: "className",
+        cols: "cols",
+        colspan: "colSpan",
+        content: "content",
+        contenteditable: "contentEditable",
+        contextmenu: "contextMenu",
+        controls: "controls",
+        controlslist: "controlsList",
+        coords: "coords",
+        crossorigin: "crossOrigin",
+        dangerouslysetinnerhtml: "dangerouslySetInnerHTML",
+        data: "data",
+        datetime: "dateTime",
+        default: "default",
+        defaultchecked: "defaultChecked",
+        defaultvalue: "defaultValue",
+        defer: "defer",
+        dir: "dir",
+        disabled: "disabled",
+        disablepictureinpicture: "disablePictureInPicture",
+        disableremoteplayback: "disableRemotePlayback",
+        download: "download",
+        draggable: "draggable",
+        enctype: "encType",
+        enterkeyhint: "enterKeyHint",
+        fetchpriority: "fetchPriority",
+        for: "htmlFor",
+        form: "form",
+        formmethod: "formMethod",
+        formaction: "formAction",
+        formenctype: "formEncType",
+        formnovalidate: "formNoValidate",
+        formtarget: "formTarget",
+        frameborder: "frameBorder",
+        headers: "headers",
+        height: "height",
+        hidden: "hidden",
+        high: "high",
+        href: "href",
+        hreflang: "hrefLang",
+        htmlfor: "htmlFor",
+        httpequiv: "httpEquiv",
+        "http-equiv": "httpEquiv",
+        icon: "icon",
+        id: "id",
+        imagesizes: "imageSizes",
+        imagesrcset: "imageSrcSet",
+        inert: "inert",
+        innerhtml: "innerHTML",
+        inputmode: "inputMode",
+        integrity: "integrity",
+        is: "is",
+        itemid: "itemID",
+        itemprop: "itemProp",
+        itemref: "itemRef",
+        itemscope: "itemScope",
+        itemtype: "itemType",
+        keyparams: "keyParams",
+        keytype: "keyType",
+        kind: "kind",
+        label: "label",
+        lang: "lang",
+        list: "list",
+        loop: "loop",
+        low: "low",
+        manifest: "manifest",
+        marginwidth: "marginWidth",
+        marginheight: "marginHeight",
+        max: "max",
+        maxlength: "maxLength",
+        media: "media",
+        mediagroup: "mediaGroup",
+        method: "method",
+        min: "min",
+        minlength: "minLength",
+        multiple: "multiple",
+        muted: "muted",
+        name: "name",
+        nomodule: "noModule",
+        nonce: "nonce",
+        novalidate: "noValidate",
+        open: "open",
+        optimum: "optimum",
+        pattern: "pattern",
+        placeholder: "placeholder",
+        playsinline: "playsInline",
+        poster: "poster",
+        preload: "preload",
+        profile: "profile",
+        radiogroup: "radioGroup",
+        readonly: "readOnly",
+        referrerpolicy: "referrerPolicy",
+        rel: "rel",
+        required: "required",
+        reversed: "reversed",
+        role: "role",
+        rows: "rows",
+        rowspan: "rowSpan",
+        sandbox: "sandbox",
+        scope: "scope",
+        scoped: "scoped",
+        scrolling: "scrolling",
+        seamless: "seamless",
+        selected: "selected",
+        shape: "shape",
+        size: "size",
+        sizes: "sizes",
+        span: "span",
+        spellcheck: "spellCheck",
+        src: "src",
+        srcdoc: "srcDoc",
+        srclang: "srcLang",
+        srcset: "srcSet",
+        start: "start",
+        step: "step",
+        style: "style",
+        summary: "summary",
+        tabindex: "tabIndex",
+        target: "target",
+        title: "title",
+        type: "type",
+        usemap: "useMap",
+        value: "value",
+        width: "width",
+        wmode: "wmode",
+        wrap: "wrap",
+        about: "about",
+        accentheight: "accentHeight",
+        "accent-height": "accentHeight",
+        accumulate: "accumulate",
+        additive: "additive",
+        alignmentbaseline: "alignmentBaseline",
+        "alignment-baseline": "alignmentBaseline",
+        allowreorder: "allowReorder",
+        alphabetic: "alphabetic",
+        amplitude: "amplitude",
+        arabicform: "arabicForm",
+        "arabic-form": "arabicForm",
+        ascent: "ascent",
+        attributename: "attributeName",
+        attributetype: "attributeType",
+        autoreverse: "autoReverse",
+        azimuth: "azimuth",
+        basefrequency: "baseFrequency",
+        baselineshift: "baselineShift",
+        "baseline-shift": "baselineShift",
+        baseprofile: "baseProfile",
+        bbox: "bbox",
+        begin: "begin",
+        bias: "bias",
+        by: "by",
+        calcmode: "calcMode",
+        capheight: "capHeight",
+        "cap-height": "capHeight",
+        clip: "clip",
+        clippath: "clipPath",
+        "clip-path": "clipPath",
+        clippathunits: "clipPathUnits",
+        cliprule: "clipRule",
+        "clip-rule": "clipRule",
+        color: "color",
+        colorinterpolation: "colorInterpolation",
+        "color-interpolation": "colorInterpolation",
+        colorinterpolationfilters: "colorInterpolationFilters",
+        "color-interpolation-filters": "colorInterpolationFilters",
+        colorprofile: "colorProfile",
+        "color-profile": "colorProfile",
+        colorrendering: "colorRendering",
+        "color-rendering": "colorRendering",
+        contentscripttype: "contentScriptType",
+        contentstyletype: "contentStyleType",
+        cursor: "cursor",
+        cx: "cx",
+        cy: "cy",
+        d: "d",
+        datatype: "datatype",
+        decelerate: "decelerate",
+        descent: "descent",
+        diffuseconstant: "diffuseConstant",
+        direction: "direction",
+        display: "display",
+        divisor: "divisor",
+        dominantbaseline: "dominantBaseline",
+        "dominant-baseline": "dominantBaseline",
+        dur: "dur",
+        dx: "dx",
+        dy: "dy",
+        edgemode: "edgeMode",
+        elevation: "elevation",
+        enablebackground: "enableBackground",
+        "enable-background": "enableBackground",
+        end: "end",
+        exponent: "exponent",
+        externalresourcesrequired: "externalResourcesRequired",
+        fill: "fill",
+        fillopacity: "fillOpacity",
+        "fill-opacity": "fillOpacity",
+        fillrule: "fillRule",
+        "fill-rule": "fillRule",
+        filter: "filter",
+        filterres: "filterRes",
+        filterunits: "filterUnits",
+        floodopacity: "floodOpacity",
+        "flood-opacity": "floodOpacity",
+        floodcolor: "floodColor",
+        "flood-color": "floodColor",
+        focusable: "focusable",
+        fontfamily: "fontFamily",
+        "font-family": "fontFamily",
+        fontsize: "fontSize",
+        "font-size": "fontSize",
+        fontsizeadjust: "fontSizeAdjust",
+        "font-size-adjust": "fontSizeAdjust",
+        fontstretch: "fontStretch",
+        "font-stretch": "fontStretch",
+        fontstyle: "fontStyle",
+        "font-style": "fontStyle",
+        fontvariant: "fontVariant",
+        "font-variant": "fontVariant",
+        fontweight: "fontWeight",
+        "font-weight": "fontWeight",
+        format: "format",
+        from: "from",
+        fx: "fx",
+        fy: "fy",
+        g1: "g1",
+        g2: "g2",
+        glyphname: "glyphName",
+        "glyph-name": "glyphName",
+        glyphorientationhorizontal: "glyphOrientationHorizontal",
+        "glyph-orientation-horizontal": "glyphOrientationHorizontal",
+        glyphorientationvertical: "glyphOrientationVertical",
+        "glyph-orientation-vertical": "glyphOrientationVertical",
+        glyphref: "glyphRef",
+        gradienttransform: "gradientTransform",
+        gradientunits: "gradientUnits",
+        hanging: "hanging",
+        horizadvx: "horizAdvX",
+        "horiz-adv-x": "horizAdvX",
+        horizoriginx: "horizOriginX",
+        "horiz-origin-x": "horizOriginX",
+        ideographic: "ideographic",
+        imagerendering: "imageRendering",
+        "image-rendering": "imageRendering",
+        in2: "in2",
+        in: "in",
+        inlist: "inlist",
+        intercept: "intercept",
+        k1: "k1",
+        k2: "k2",
+        k3: "k3",
+        k4: "k4",
+        k: "k",
+        kernelmatrix: "kernelMatrix",
+        kernelunitlength: "kernelUnitLength",
+        kerning: "kerning",
+        keypoints: "keyPoints",
+        keysplines: "keySplines",
+        keytimes: "keyTimes",
+        lengthadjust: "lengthAdjust",
+        letterspacing: "letterSpacing",
+        "letter-spacing": "letterSpacing",
+        lightingcolor: "lightingColor",
+        "lighting-color": "lightingColor",
+        limitingconeangle: "limitingConeAngle",
+        local: "local",
+        markerend: "markerEnd",
+        "marker-end": "markerEnd",
+        markerheight: "markerHeight",
+        markermid: "markerMid",
+        "marker-mid": "markerMid",
+        markerstart: "markerStart",
+        "marker-start": "markerStart",
+        markerunits: "markerUnits",
+        markerwidth: "markerWidth",
+        mask: "mask",
+        maskcontentunits: "maskContentUnits",
+        maskunits: "maskUnits",
+        mathematical: "mathematical",
+        mode: "mode",
+        numoctaves: "numOctaves",
+        offset: "offset",
+        opacity: "opacity",
+        operator: "operator",
+        order: "order",
+        orient: "orient",
+        orientation: "orientation",
+        origin: "origin",
+        overflow: "overflow",
+        overlineposition: "overlinePosition",
+        "overline-position": "overlinePosition",
+        overlinethickness: "overlineThickness",
+        "overline-thickness": "overlineThickness",
+        paintorder: "paintOrder",
+        "paint-order": "paintOrder",
+        panose1: "panose1",
+        "panose-1": "panose1",
+        pathlength: "pathLength",
+        patterncontentunits: "patternContentUnits",
+        patterntransform: "patternTransform",
+        patternunits: "patternUnits",
+        pointerevents: "pointerEvents",
+        "pointer-events": "pointerEvents",
+        points: "points",
+        pointsatx: "pointsAtX",
+        pointsaty: "pointsAtY",
+        pointsatz: "pointsAtZ",
+        popover: "popover",
+        popovertarget: "popoverTarget",
+        popovertargetaction: "popoverTargetAction",
+        prefix: "prefix",
+        preservealpha: "preserveAlpha",
+        preserveaspectratio: "preserveAspectRatio",
+        primitiveunits: "primitiveUnits",
+        property: "property",
+        r: "r",
+        radius: "radius",
+        refx: "refX",
+        refy: "refY",
+        renderingintent: "renderingIntent",
+        "rendering-intent": "renderingIntent",
+        repeatcount: "repeatCount",
+        repeatdur: "repeatDur",
+        requiredextensions: "requiredExtensions",
+        requiredfeatures: "requiredFeatures",
+        resource: "resource",
+        restart: "restart",
+        result: "result",
+        results: "results",
+        rotate: "rotate",
+        rx: "rx",
+        ry: "ry",
+        scale: "scale",
+        security: "security",
+        seed: "seed",
+        shaperendering: "shapeRendering",
+        "shape-rendering": "shapeRendering",
+        slope: "slope",
+        spacing: "spacing",
+        specularconstant: "specularConstant",
+        specularexponent: "specularExponent",
+        speed: "speed",
+        spreadmethod: "spreadMethod",
+        startoffset: "startOffset",
+        stddeviation: "stdDeviation",
+        stemh: "stemh",
+        stemv: "stemv",
+        stitchtiles: "stitchTiles",
+        stopcolor: "stopColor",
+        "stop-color": "stopColor",
+        stopopacity: "stopOpacity",
+        "stop-opacity": "stopOpacity",
+        strikethroughposition: "strikethroughPosition",
+        "strikethrough-position": "strikethroughPosition",
+        strikethroughthickness: "strikethroughThickness",
+        "strikethrough-thickness": "strikethroughThickness",
+        string: "string",
+        stroke: "stroke",
+        strokedasharray: "strokeDasharray",
+        "stroke-dasharray": "strokeDasharray",
+        strokedashoffset: "strokeDashoffset",
+        "stroke-dashoffset": "strokeDashoffset",
+        strokelinecap: "strokeLinecap",
+        "stroke-linecap": "strokeLinecap",
+        strokelinejoin: "strokeLinejoin",
+        "stroke-linejoin": "strokeLinejoin",
+        strokemiterlimit: "strokeMiterlimit",
+        "stroke-miterlimit": "strokeMiterlimit",
+        strokewidth: "strokeWidth",
+        "stroke-width": "strokeWidth",
+        strokeopacity: "strokeOpacity",
+        "stroke-opacity": "strokeOpacity",
+        suppresscontenteditablewarning: "suppressContentEditableWarning",
+        suppresshydrationwarning: "suppressHydrationWarning",
+        surfacescale: "surfaceScale",
+        systemlanguage: "systemLanguage",
+        tablevalues: "tableValues",
+        targetx: "targetX",
+        targety: "targetY",
+        textanchor: "textAnchor",
+        "text-anchor": "textAnchor",
+        textdecoration: "textDecoration",
+        "text-decoration": "textDecoration",
+        textlength: "textLength",
+        textrendering: "textRendering",
+        "text-rendering": "textRendering",
+        to: "to",
+        transform: "transform",
+        transformorigin: "transformOrigin",
+        "transform-origin": "transformOrigin",
+        typeof: "typeof",
+        u1: "u1",
+        u2: "u2",
+        underlineposition: "underlinePosition",
+        "underline-position": "underlinePosition",
+        underlinethickness: "underlineThickness",
+        "underline-thickness": "underlineThickness",
+        unicode: "unicode",
+        unicodebidi: "unicodeBidi",
+        "unicode-bidi": "unicodeBidi",
+        unicoderange: "unicodeRange",
+        "unicode-range": "unicodeRange",
+        unitsperem: "unitsPerEm",
+        "units-per-em": "unitsPerEm",
+        unselectable: "unselectable",
+        valphabetic: "vAlphabetic",
+        "v-alphabetic": "vAlphabetic",
+        values: "values",
+        vectoreffect: "vectorEffect",
+        "vector-effect": "vectorEffect",
+        version: "version",
+        vertadvy: "vertAdvY",
+        "vert-adv-y": "vertAdvY",
+        vertoriginx: "vertOriginX",
+        "vert-origin-x": "vertOriginX",
+        vertoriginy: "vertOriginY",
+        "vert-origin-y": "vertOriginY",
+        vhanging: "vHanging",
+        "v-hanging": "vHanging",
+        videographic: "vIdeographic",
+        "v-ideographic": "vIdeographic",
+        viewbox: "viewBox",
+        viewtarget: "viewTarget",
+        visibility: "visibility",
+        vmathematical: "vMathematical",
+        "v-mathematical": "vMathematical",
+        vocab: "vocab",
+        widths: "widths",
+        wordspacing: "wordSpacing",
+        "word-spacing": "wordSpacing",
+        writingmode: "writingMode",
+        "writing-mode": "writingMode",
+        x1: "x1",
+        x2: "x2",
+        x: "x",
+        xchannelselector: "xChannelSelector",
+        xheight: "xHeight",
+        "x-height": "xHeight",
+        xlinkactuate: "xlinkActuate",
+        "xlink:actuate": "xlinkActuate",
+        xlinkarcrole: "xlinkArcrole",
+        "xlink:arcrole": "xlinkArcrole",
+        xlinkhref: "xlinkHref",
+        "xlink:href": "xlinkHref",
+        xlinkrole: "xlinkRole",
+        "xlink:role": "xlinkRole",
+        xlinkshow: "xlinkShow",
+        "xlink:show": "xlinkShow",
+        xlinktitle: "xlinkTitle",
+        "xlink:title": "xlinkTitle",
+        xlinktype: "xlinkType",
+        "xlink:type": "xlinkType",
+        xmlbase: "xmlBase",
+        "xml:base": "xmlBase",
+        xmllang: "xmlLang",
+        "xml:lang": "xmlLang",
+        xmlns: "xmlns",
+        "xml:space": "xmlSpace",
+        xmlnsxlink: "xmlnsXlink",
+        "xmlns:xlink": "xmlnsXlink",
+        xmlspace: "xmlSpace",
+        y1: "y1",
+        y2: "y2",
+        y: "y",
+        ychannelselector: "yChannelSelector",
+        z: "z",
+        zoomandpan: "zoomAndPan"
+      },
+      warnedProperties = {},
+      EVENT_NAME_REGEX = /^on./,
+      INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,
+      rARIA = RegExp(
+        "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      rARIACamel = RegExp(
+        "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+      ),
+      badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,
+      msPattern$1 = /^-ms-/,
+      hyphenPattern = /-(.)/g,
+      badStyleValueWithSemicolonPattern = /;\s*$/,
+      warnedStyleNames = {},
+      warnedStyleValues = {},
+      warnedForNaNValue = !1,
+      warnedForInfinityValue = !1,
+      matchHtmlRegExp = /["'&<>]/,
+      uppercasePattern = /([A-Z])/g,
+      msPattern = /^ms-/,
+      isJavaScriptProtocol =
+        /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i,
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      ReactDOMSharedInternals =
+        ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      NotPending = Object.freeze({
+        pending: !1,
+        data: null,
+        method: null,
+        action: null
+      }),
+      previousDispatcher = ReactDOMSharedInternals.d;
+    ReactDOMSharedInternals.d = {
+      f: previousDispatcher.f,
+      r: previousDispatcher.r,
+      D: function (href) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            if (!resumableState.dnsResources.hasOwnProperty(href)) {
+              resumableState.dnsResources[href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              )
+                JSCompiler_temp =
+                  ((header =
+                    "<" +
+                    escapeHrefForLinkHeaderURLContext(href) +
+                    ">; rel=dns-prefetch"),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              JSCompiler_temp
+                ? ((renderState.resets.dns[href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((header = []),
+                  pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+                  renderState.preconnects.add(header));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.D(href);
+      },
+      C: function (href, crossOrigin) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if ("string" === typeof href && href) {
+            var bucket =
+              "use-credentials" === crossOrigin
+                ? "credentials"
+                : "string" === typeof crossOrigin
+                  ? "anonymous"
+                  : "default";
+            if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+              resumableState.connectResources[bucket][href] = EXISTS;
+              resumableState = renderState.headers;
+              var header, JSCompiler_temp;
+              if (
+                (JSCompiler_temp =
+                  resumableState && 0 < resumableState.remainingCapacity)
+              ) {
+                JSCompiler_temp =
+                  "<" +
+                  escapeHrefForLinkHeaderURLContext(href) +
+                  ">; rel=preconnect";
+                if ("string" === typeof crossOrigin) {
+                  var escapedCrossOrigin =
+                    escapeStringForLinkHeaderQuotedParamValueContext(
+                      crossOrigin,
+                      "crossOrigin"
+                    );
+                  JSCompiler_temp +=
+                    '; crossorigin="' + escapedCrossOrigin + '"';
+                }
+                JSCompiler_temp =
+                  ((header = JSCompiler_temp),
+                  0 <= (resumableState.remainingCapacity -= header.length + 2));
+              }
+              JSCompiler_temp
+                ? ((renderState.resets.connect[bucket][href] = EXISTS),
+                  resumableState.preconnects &&
+                    (resumableState.preconnects += ", "),
+                  (resumableState.preconnects += header))
+                : ((bucket = []),
+                  pushLinkImpl(bucket, {
+                    rel: "preconnect",
+                    href: href,
+                    crossOrigin: crossOrigin
+                  }),
+                  renderState.preconnects.add(bucket));
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.C(href, crossOrigin);
+      },
+      L: function (href, as, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (as && href) {
+            switch (as) {
+              case "image":
+                if (options) {
+                  var imageSrcSet = options.imageSrcSet;
+                  var imageSizes = options.imageSizes;
+                  var fetchPriority = options.fetchPriority;
+                }
+                var key = imageSrcSet
+                  ? imageSrcSet + "\n" + (imageSizes || "")
+                  : href;
+                if (resumableState.imageResources.hasOwnProperty(key)) return;
+                resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+                resumableState = renderState.headers;
+                var header;
+                resumableState &&
+                0 < resumableState.remainingCapacity &&
+                "string" !== typeof imageSrcSet &&
+                "high" === fetchPriority &&
+                ((header = getPreloadAsHeader(href, as, options)),
+                0 <= (resumableState.remainingCapacity -= header.length + 2))
+                  ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+                    resumableState.highImagePreloads &&
+                      (resumableState.highImagePreloads += ", "),
+                    (resumableState.highImagePreloads += header))
+                  : ((resumableState = []),
+                    pushLinkImpl(
+                      resumableState,
+                      assign(
+                        {
+                          rel: "preload",
+                          href: imageSrcSet ? void 0 : href,
+                          as: as
+                        },
+                        options
+                      )
+                    ),
+                    "high" === fetchPriority
+                      ? renderState.highImagePreloads.add(resumableState)
+                      : (renderState.bulkPreloads.add(resumableState),
+                        renderState.preloads.images.set(key, resumableState)));
+                break;
+              case "style":
+                if (resumableState.styleResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.styleResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.stylesheets.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                break;
+              case "script":
+                if (resumableState.scriptResources.hasOwnProperty(href)) return;
+                imageSrcSet = [];
+                renderState.preloads.scripts.set(href, imageSrcSet);
+                renderState.bulkPreloads.add(imageSrcSet);
+                pushLinkImpl(
+                  imageSrcSet,
+                  assign({ rel: "preload", href: href, as: as }, options)
+                );
+                resumableState.scriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                break;
+              default:
+                if (resumableState.unknownResources.hasOwnProperty(as)) {
+                  if (
+                    ((imageSrcSet = resumableState.unknownResources[as]),
+                    imageSrcSet.hasOwnProperty(href))
+                  )
+                    return;
+                } else
+                  (imageSrcSet = {}),
+                    (resumableState.unknownResources[as] = imageSrcSet);
+                imageSrcSet[href] = PRELOAD_NO_CREDS;
+                if (
+                  (resumableState = renderState.headers) &&
+                  0 < resumableState.remainingCapacity &&
+                  "font" === as &&
+                  ((key = getPreloadAsHeader(href, as, options)),
+                  0 <= (resumableState.remainingCapacity -= key.length + 2))
+                )
+                  (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+                    resumableState.fontPreloads &&
+                      (resumableState.fontPreloads += ", "),
+                    (resumableState.fontPreloads += key);
+                else
+                  switch (
+                    ((resumableState = []),
+                    (href = assign(
+                      { rel: "preload", href: href, as: as },
+                      options
+                    )),
+                    pushLinkImpl(resumableState, href),
+                    as)
+                  ) {
+                    case "font":
+                      renderState.fontPreloads.add(resumableState);
+                      break;
+                    default:
+                      renderState.bulkPreloads.add(resumableState);
+                  }
+            }
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.L(href, as, options);
+      },
+      m: function (href, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            var as =
+              options && "string" === typeof options.as ? options.as : "script";
+            switch (as) {
+              case "script":
+                if (resumableState.moduleScriptResources.hasOwnProperty(href))
+                  return;
+                as = [];
+                resumableState.moduleScriptResources[href] =
+                  !options ||
+                  ("string" !== typeof options.crossOrigin &&
+                    "string" !== typeof options.integrity)
+                    ? PRELOAD_NO_CREDS
+                    : [options.crossOrigin, options.integrity];
+                renderState.preloads.moduleScripts.set(href, as);
+                break;
+              default:
+                if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+                  var resources = resumableState.unknownResources[as];
+                  if (resources.hasOwnProperty(href)) return;
+                } else
+                  (resources = {}),
+                    (resumableState.moduleUnknownResources[as] = resources);
+                as = [];
+                resources[href] = PRELOAD_NO_CREDS;
+            }
+            pushLinkImpl(
+              as,
+              assign({ rel: "modulepreload", href: href }, options)
+            );
+            renderState.bulkPreloads.add(as);
+            enqueueFlush(request);
+          }
+        } else previousDispatcher.m(href, options);
+      },
+      X: function (src, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState = resumableState.scriptResources.hasOwnProperty(
+              src
+            )
+              ? resumableState.scriptResources[src]
+              : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.scriptResources[src] = EXISTS),
+              (options = assign({ src: src, async: !0 }, options)),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.scripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.X(src, options);
+      },
+      S: function (href, precedence, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (href) {
+            precedence = precedence || "default";
+            var styleQueue = renderState.styles.get(precedence),
+              resourceState = resumableState.styleResources.hasOwnProperty(href)
+                ? resumableState.styleResources[href]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.styleResources[href] = EXISTS),
+              styleQueue ||
+                ((styleQueue = {
+                  precedence: escapeTextForBrowser(precedence),
+                  rules: [],
+                  hrefs: [],
+                  sheets: new Map()
+                }),
+                renderState.styles.set(precedence, styleQueue)),
+              (precedence = {
+                state: PENDING$1,
+                props: assign(
+                  {
+                    rel: "stylesheet",
+                    href: href,
+                    "data-precedence": precedence
+                  },
+                  options
+                )
+              }),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(precedence.props, resourceState),
+                (renderState = renderState.preloads.stylesheets.get(href)) &&
+                0 < renderState.length
+                  ? (renderState.length = 0)
+                  : (precedence.state = PRELOADED)),
+              styleQueue.sheets.set(href, precedence),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.S(href, precedence, options);
+      },
+      M: function (src, options) {
+        var request = resolveRequest();
+        if (request) {
+          var resumableState = request.resumableState,
+            renderState = request.renderState;
+          if (src) {
+            var resourceState =
+              resumableState.moduleScriptResources.hasOwnProperty(src)
+                ? resumableState.moduleScriptResources[src]
+                : void 0;
+            resourceState !== EXISTS &&
+              ((resumableState.moduleScriptResources[src] = EXISTS),
+              (options = assign(
+                { src: src, type: "module", async: !0 },
+                options
+              )),
+              resourceState &&
+                (2 === resourceState.length &&
+                  adoptPreloadCredentials(options, resourceState),
+                (src = renderState.preloads.moduleScripts.get(src))) &&
+                (src.length = 0),
+              (src = []),
+              renderState.scripts.add(src),
+              pushScriptImpl(src, options),
+              enqueueFlush(request));
+          }
+        } else previousDispatcher.M(src, options);
+      }
+    };
+    var NothingSent = 0,
+      SentCompleteSegmentFunction = 1,
+      SentCompleteBoundaryFunction = 2,
+      SentClientRenderFunction = 4,
+      SentStyleInsertionFunction = 8,
+      EXISTS = null,
+      PRELOAD_NO_CREDS = [];
+    Object.freeze(PRELOAD_NO_CREDS);
+    stringToPrecomputedChunk('"></template>');
+    var startInlineScript = stringToPrecomputedChunk("<script>"),
+      endInlineScript = stringToPrecomputedChunk("\x3c/script>"),
+      startScriptSrc = stringToPrecomputedChunk('<script src="'),
+      startModuleSrc = stringToPrecomputedChunk('<script type="module" src="'),
+      scriptNonce = stringToPrecomputedChunk('" nonce="'),
+      scriptIntegirty = stringToPrecomputedChunk('" integrity="'),
+      scriptCrossOrigin = stringToPrecomputedChunk('" crossorigin="'),
+      endAsyncScript = stringToPrecomputedChunk('" async="">\x3c/script>'),
+      scriptRegex = /(<\/|<)(s)(cript)/gi,
+      importMapScriptStart = stringToPrecomputedChunk(
+        '<script type="importmap">'
+      ),
+      importMapScriptEnd = stringToPrecomputedChunk("\x3c/script>");
+    var didWarnForNewBooleanPropsWithEmptyValue = {};
+    var NoContribution = 0,
+      ROOT_HTML_MODE = 0,
+      HTML_HTML_MODE = 1,
+      HTML_MODE = 2,
+      HTML_HEAD_MODE = 3,
+      SVG_MODE = 4,
+      MATHML_MODE = 5,
+      HTML_TABLE_MODE = 6,
+      HTML_TABLE_BODY_MODE = 7,
+      HTML_TABLE_ROW_MODE = 8,
+      HTML_COLGROUP_MODE = 9,
+      textSeparator = stringToPrecomputedChunk("\x3c!-- --\x3e"),
+      styleNameCache = new Map(),
+      styleAttributeStart = stringToPrecomputedChunk(' style="'),
+      styleAssign = stringToPrecomputedChunk(":"),
+      styleSeparator = stringToPrecomputedChunk(";"),
+      attributeSeparator = stringToPrecomputedChunk(" "),
+      attributeAssign = stringToPrecomputedChunk('="'),
+      attributeEnd = stringToPrecomputedChunk('"'),
+      attributeEmptyString = stringToPrecomputedChunk('=""'),
+      actionJavaScriptURL = stringToPrecomputedChunk(
+        escapeTextForBrowser(
+          "javascript:throw new Error('React form unexpectedly submitted.')"
+        )
+      ),
+      startHiddenInputChunk = stringToPrecomputedChunk('<input type="hidden"'),
+      endOfStartTag = stringToPrecomputedChunk(">"),
+      endOfStartTagSelfClosing = stringToPrecomputedChunk("/>"),
+      didWarnDefaultInputValue = !1,
+      didWarnDefaultChecked = !1,
+      didWarnDefaultSelectValue = !1,
+      didWarnDefaultTextareaValue = !1,
+      didWarnInvalidOptionChildren = !1,
+      didWarnInvalidOptionInnerHTML = !1,
+      didWarnSelectedSetOnOption = !1,
+      didWarnFormActionType = !1,
+      didWarnFormActionName = !1,
+      didWarnFormActionTarget = !1,
+      didWarnFormActionMethod = !1,
+      selectedMarkerAttribute = stringToPrecomputedChunk(' selected=""'),
+      formReplayingRuntimeScript = stringToPrecomputedChunk(
+        'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});'
+      ),
+      formStateMarkerIsMatching = stringToPrecomputedChunk("\x3c!--F!--\x3e"),
+      formStateMarkerIsNotMatching = stringToPrecomputedChunk("\x3c!--F--\x3e"),
+      styleRegex = /(<\/|<)(s)(tyle)/gi,
+      leadingNewline = stringToPrecomputedChunk("\n"),
+      VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+      validatedTagCache = new Map(),
+      doctypeChunk = stringToPrecomputedChunk("<!DOCTYPE html>"),
+      endTagCache = new Map(),
+      placeholder1 = stringToPrecomputedChunk('<template id="'),
+      placeholder2 = stringToPrecomputedChunk('"></template>'),
+      startCompletedSuspenseBoundary =
+        stringToPrecomputedChunk("\x3c!--$--\x3e"),
+      startPendingSuspenseBoundary1 = stringToPrecomputedChunk(
+        '\x3c!--$?--\x3e<template id="'
+      ),
+      startPendingSuspenseBoundary2 = stringToPrecomputedChunk('"></template>'),
+      startClientRenderedSuspenseBoundary =
+        stringToPrecomputedChunk("\x3c!--$!--\x3e"),
+      endSuspenseBoundary = stringToPrecomputedChunk("\x3c!--/$--\x3e"),
+      clientRenderedSuspenseBoundaryError1 =
+        stringToPrecomputedChunk("<template"),
+      clientRenderedSuspenseBoundaryErrorAttrInterstitial =
+        stringToPrecomputedChunk('"'),
+      clientRenderedSuspenseBoundaryError1A =
+        stringToPrecomputedChunk(' data-dgst="'),
+      clientRenderedSuspenseBoundaryError1B =
+        stringToPrecomputedChunk(' data-msg="'),
+      clientRenderedSuspenseBoundaryError1C =
+        stringToPrecomputedChunk(' data-stck="'),
+      clientRenderedSuspenseBoundaryError1D =
+        stringToPrecomputedChunk(' data-cstck="'),
+      clientRenderedSuspenseBoundaryError2 =
+        stringToPrecomputedChunk("></template>"),
+      boundaryPreambleContributionChunkStart =
+        stringToPrecomputedChunk("\x3c!--"),
+      boundaryPreambleContributionChunkEnd = stringToPrecomputedChunk("--\x3e"),
+      startSegmentHTML = stringToPrecomputedChunk('<div hidden id="'),
+      startSegmentHTML2 = stringToPrecomputedChunk('">'),
+      endSegmentHTML = stringToPrecomputedChunk("</div>"),
+      startSegmentSVG = stringToPrecomputedChunk(
+        '<svg aria-hidden="true" style="display:none" id="'
+      ),
+      startSegmentSVG2 = stringToPrecomputedChunk('">'),
+      endSegmentSVG = stringToPrecomputedChunk("</svg>"),
+      startSegmentMathML = stringToPrecomputedChunk(
+        '<math aria-hidden="true" style="display:none" id="'
+      ),
+      startSegmentMathML2 = stringToPrecomputedChunk('">'),
+      endSegmentMathML = stringToPrecomputedChunk("</math>"),
+      startSegmentTable = stringToPrecomputedChunk('<table hidden id="'),
+      startSegmentTable2 = stringToPrecomputedChunk('">'),
+      endSegmentTable = stringToPrecomputedChunk("</table>"),
+      startSegmentTableBody = stringToPrecomputedChunk(
+        '<table hidden><tbody id="'
+      ),
+      startSegmentTableBody2 = stringToPrecomputedChunk('">'),
+      endSegmentTableBody = stringToPrecomputedChunk("</tbody></table>"),
+      startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id="'),
+      startSegmentTableRow2 = stringToPrecomputedChunk('">'),
+      endSegmentTableRow = stringToPrecomputedChunk("</tr></table>"),
+      startSegmentColGroup = stringToPrecomputedChunk(
+        '<table hidden><colgroup id="'
+      ),
+      startSegmentColGroup2 = stringToPrecomputedChunk('">'),
+      endSegmentColGroup = stringToPrecomputedChunk("</colgroup></table>"),
+      completeSegmentScript1Full = stringToPrecomputedChunk(
+        '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("'
+      ),
+      completeSegmentScript1Partial = stringToPrecomputedChunk('$RS("'),
+      completeSegmentScript2 = stringToPrecomputedChunk('","'),
+      completeSegmentScriptEnd = stringToPrecomputedChunk('")\x3c/script>');
+    stringToPrecomputedChunk('<template data-rsi="" data-sid="');
+    stringToPrecomputedChunk('" data-pid="');
+    var completeBoundaryScript1Full = stringToPrecomputedChunk(
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("'
+      ),
+      completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC("'),
+      completeBoundaryWithStylesScript1FullBoth = stringToPrecomputedChunk(
+        '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+      ),
+      completeBoundaryWithStylesScript1FullPartial = stringToPrecomputedChunk(
+        '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+      ),
+      completeBoundaryWithStylesScript1Partial =
+        stringToPrecomputedChunk('$RR("'),
+      completeBoundaryScript2 = stringToPrecomputedChunk('","'),
+      completeBoundaryScript3a = stringToPrecomputedChunk('",'),
+      completeBoundaryScript3b = stringToPrecomputedChunk('"'),
+      completeBoundaryScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+    stringToPrecomputedChunk('<template data-rci="" data-bid="');
+    stringToPrecomputedChunk('<template data-rri="" data-bid="');
+    stringToPrecomputedChunk('" data-sid="');
+    stringToPrecomputedChunk('" data-sty="');
+    var clientRenderScript1Full = stringToPrecomputedChunk(
+        '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("'
+      ),
+      clientRenderScript1Partial = stringToPrecomputedChunk('$RX("'),
+      clientRenderScript1A = stringToPrecomputedChunk('"'),
+      clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(","),
+      clientRenderScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+    stringToPrecomputedChunk('<template data-rxi="" data-bid="');
+    stringToPrecomputedChunk('" data-dgst="');
+    stringToPrecomputedChunk('" data-msg="');
+    stringToPrecomputedChunk('" data-stck="');
+    stringToPrecomputedChunk('" data-cstck="');
+    var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g,
+      regexForJSStringsInScripts = /[&><\u2028\u2029]/g,
+      lateStyleTagResourceOpen1 = stringToPrecomputedChunk(
+        '<style media="not all" data-precedence="'
+      ),
+      lateStyleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+      lateStyleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+      lateStyleTagTemplateClose = stringToPrecomputedChunk("</style>"),
+      currentlyRenderingBoundaryHasStylesToHoist = !1,
+      destinationHasCapacity = !0,
+      stylesheetFlushingQueue = [],
+      styleTagResourceOpen1 = stringToPrecomputedChunk(
+        '<style data-precedence="'
+      ),
+      styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+      spaceSeparator = stringToPrecomputedChunk(" "),
+      styleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+      styleTagResourceClose = stringToPrecomputedChunk("</style>"),
+      arrayFirstOpenBracket = stringToPrecomputedChunk("["),
+      arraySubsequentOpenBracket = stringToPrecomputedChunk(",["),
+      arrayInterstitial = stringToPrecomputedChunk(","),
+      arrayCloseBracket = stringToPrecomputedChunk("]"),
+      PENDING$1 = 0,
+      PRELOADED = 1,
+      PREAMBLE = 2,
+      LATE = 3,
+      regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g,
+      regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g,
+      bind = Function.prototype.bind,
+      requestStorage = new async_hooks.AsyncLocalStorage(),
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      emptyContextObject = {};
+    Object.freeze(emptyContextObject);
+    var rendererSigil = {};
+    var currentActiveSnapshot = null,
+      didWarnAboutNoopUpdateForComponent = {},
+      didWarnAboutDeprecatedWillMount = {};
+    var didWarnAboutUninitializedState = new Set();
+    var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
+    var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
+    var didWarnAboutDirectlyAssigningPropsToState = new Set();
+    var didWarnAboutUndefinedDerivedState = new Set();
+    var didWarnAboutContextTypes$1 = new Set();
+    var didWarnAboutChildContextTypes = new Set();
+    var didWarnAboutInvalidateContextType = new Set();
+    var didWarnOnInvalidCallback = new Set();
+    var classComponentUpdater = {
+        enqueueSetState: function (inst, payload, callback) {
+          var internals = inst._reactInternals;
+          null === internals.queue
+            ? warnNoop(inst, "setState")
+            : (internals.queue.push(payload),
+              void 0 !== callback &&
+                null !== callback &&
+                warnOnInvalidCallback(callback));
+        },
+        enqueueReplaceState: function (inst, payload, callback) {
+          inst = inst._reactInternals;
+          inst.replace = !0;
+          inst.queue = [payload];
+          void 0 !== callback &&
+            null !== callback &&
+            warnOnInvalidCallback(callback);
+        },
+        enqueueForceUpdate: function (inst, callback) {
+          null === inst._reactInternals.queue
+            ? warnNoop(inst, "forceUpdate")
+            : void 0 !== callback &&
+              null !== callback &&
+              warnOnInvalidCallback(callback);
+        }
+      },
+      emptyTreeContext = { id: 1, overflow: "" },
+      clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+      log = Math.log,
+      LN2 = Math.LN2,
+      SuspenseException = Error(
+        "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+      ),
+      suspendedThenable = null,
+      objectIs = "function" === typeof Object.is ? Object.is : is,
+      currentlyRenderingComponent = null,
+      currentlyRenderingTask = null,
+      currentlyRenderingRequest = null,
+      currentlyRenderingKeyPath = null,
+      firstWorkInProgressHook = null,
+      workInProgressHook = null,
+      isReRender = !1,
+      didScheduleRenderPhaseUpdate = !1,
+      localIdCounter = 0,
+      actionStateCounter = 0,
+      actionStateMatchingIndex = -1,
+      thenableIndexCounter = 0,
+      thenableState = null,
+      renderPhaseUpdates = null,
+      numberOfReRenders = 0,
+      isInHookUserCodeInDev = !1,
+      currentHookNameInDev,
+      HooksDispatcher = {
+        readContext: readContext,
+        use: function (usable) {
+          if (null !== usable && "object" === typeof usable) {
+            if ("function" === typeof usable.then)
+              return unwrapThenable(usable);
+            if (usable.$$typeof === REACT_CONTEXT_TYPE)
+              return readContext(usable);
+          }
+          throw Error(
+            "An unsupported type was passed to use(): " + String(usable)
+          );
+        },
+        useContext: function (context) {
+          currentHookNameInDev = "useContext";
+          resolveCurrentlyRenderingComponent();
+          return context._currentValue;
+        },
+        useMemo: useMemo,
+        useReducer: useReducer,
+        useRef: function (initialValue) {
+          currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+          workInProgressHook = createWorkInProgressHook();
+          var previousRef = workInProgressHook.memoizedState;
+          return null === previousRef
+            ? ((initialValue = { current: initialValue }),
+              Object.seal(initialValue),
+              (workInProgressHook.memoizedState = initialValue))
+            : previousRef;
+        },
+        useState: function (initialState) {
+          currentHookNameInDev = "useState";
+          return useReducer(basicStateReducer, initialState);
+        },
+        useInsertionEffect: noop$1,
+        useLayoutEffect: noop$1,
+        useCallback: function (callback, deps) {
+          return useMemo(function () {
+            return callback;
+          }, deps);
+        },
+        useImperativeHandle: noop$1,
+        useEffect: noop$1,
+        useDebugValue: noop$1,
+        useDeferredValue: function (value, initialValue) {
+          resolveCurrentlyRenderingComponent();
+          return void 0 !== initialValue ? initialValue : value;
+        },
+        useTransition: function () {
+          resolveCurrentlyRenderingComponent();
+          return [!1, unsupportedStartTransition];
+        },
+        useId: function () {
+          var treeId = currentlyRenderingTask.treeContext;
+          var overflow = treeId.overflow;
+          treeId = treeId.id;
+          treeId =
+            (treeId & ~(1 << (32 - clz32(treeId) - 1))).toString(32) + overflow;
+          var resumableState = currentResumableState;
+          if (null === resumableState)
+            throw Error(
+              "Invalid hook call. Hooks can only be called inside of the body of a function component."
+            );
+          overflow = localIdCounter++;
+          treeId = "\u00ab" + resumableState.idPrefix + "R" + treeId;
+          0 < overflow && (treeId += "H" + overflow.toString(32));
+          return treeId + "\u00bb";
+        },
+        useSyncExternalStore: function (
+          subscribe,
+          getSnapshot,
+          getServerSnapshot
+        ) {
+          if (void 0 === getServerSnapshot)
+            throw Error(
+              "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+            );
+          return getServerSnapshot();
+        },
+        useOptimistic: function (passthrough) {
+          resolveCurrentlyRenderingComponent();
+          return [passthrough, unsupportedSetOptimisticState];
+        },
+        useActionState: useActionState,
+        useFormState: useActionState,
+        useHostTransitionStatus: function () {
+          resolveCurrentlyRenderingComponent();
+          return NotPending;
+        },
+        useMemoCache: function (size) {
+          for (var data = Array(size), i = 0; i < size; i++)
+            data[i] = REACT_MEMO_CACHE_SENTINEL;
+          return data;
+        },
+        useCacheRefresh: function () {
+          return unsupportedRefresh;
+        }
+      },
+      currentResumableState = null,
+      currentTaskInDEV = null,
+      DefaultAsyncDispatcher = {
+        getCacheForType: function () {
+          throw Error("Not implemented.");
+        },
+        getOwner: function () {
+          return null === currentTaskInDEV
+            ? null
+            : currentTaskInDEV.componentStack;
+        }
+      },
+      disabledDepth = 0,
+      prevLog,
+      prevInfo,
+      prevWarn,
+      prevError,
+      prevGroup,
+      prevGroupCollapsed,
+      prevGroupEnd;
+    disabledLog.__reactDisabledLog = !0;
+    var prefix,
+      suffix,
+      reentry = !1;
+    var componentFrameCache = new (
+      "function" === typeof WeakMap ? WeakMap : Map
+    )();
+    var callComponent = {
+        react_stack_bottom_frame: function (Component, props, secondArg) {
+          return Component(props, secondArg);
+        }
+      },
+      callComponentInDEV =
+        callComponent.react_stack_bottom_frame.bind(callComponent),
+      callRender = {
+        react_stack_bottom_frame: function (instance) {
+          return instance.render();
+        }
+      },
+      callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),
+      callLazyInit = {
+        react_stack_bottom_frame: function (lazy) {
+          var init = lazy._init;
+          return init(lazy._payload);
+        }
+      },
+      callLazyInitInDEV =
+        callLazyInit.react_stack_bottom_frame.bind(callLazyInit),
+      lastResetTime = 0;
+    if (
+      "object" === typeof performance &&
+      "function" === typeof performance.now
+    ) {
+      var localPerformance = performance;
+      var getCurrentTime = function () {
+        return localPerformance.now();
+      };
+    } else {
+      var localDate = Date;
+      getCurrentTime = function () {
+        return localDate.now();
+      };
+    }
+    var CLIENT_RENDERED = 4,
+      PENDING = 0,
+      COMPLETED = 1,
+      FLUSHED = 2,
+      POSTPONED = 5,
+      CLOSED = 14,
+      currentRequest = null,
+      didWarnAboutBadClass = {},
+      didWarnAboutContextTypes = {},
+      didWarnAboutContextTypeOnFunctionComponent = {},
+      didWarnAboutGetDerivedStateOnFunctionComponent = {},
+      didWarnAboutReassigningProps = !1,
+      didWarnAboutGenerators = !1,
+      didWarnAboutMaps = !1;
+    ensureCorrectIsomorphicReactVersion();
+    ensureCorrectIsomorphicReactVersion();
+    exports.prerenderToNodeStream = function (children, options) {
+      return new Promise(function (resolve, reject) {
+        var resumableState = createResumableState(
+            options ? options.identifierPrefix : void 0,
+            options ? options.unstable_externalRuntimeSrc : void 0,
+            options ? options.bootstrapScriptContent : void 0,
+            options ? options.bootstrapScripts : void 0,
+            options ? options.bootstrapModules : void 0
+          ),
+          request = createPrerenderRequest(
+            children,
+            resumableState,
+            createRenderState(
+              resumableState,
+              void 0,
+              options ? options.unstable_externalRuntimeSrc : void 0,
+              options ? options.importMap : void 0,
+              options ? options.onHeaders : void 0,
+              options ? options.maxHeadersLength : void 0
+            ),
+            createRootFormatContext(options ? options.namespaceURI : void 0),
+            options ? options.progressiveChunkSize : void 0,
+            options ? options.onError : void 0,
+            function () {
+              var readable = new stream.Readable({
+                  read: function () {
+                    startFlowing(request, writable);
+                  }
+                }),
+                writable = createFakeWritable(readable);
+              resolve({ prelude: readable });
+            },
+            void 0,
+            void 0,
+            reject,
+            options ? options.onPostpone : void 0
+          );
+        if (options && options.signal) {
+          var signal = options.signal;
+          if (signal.aborted) abort(request, signal.reason);
+          else {
+            var listener = function () {
+              abort(request, signal.reason);
+              signal.removeEventListener("abort", listener);
+            };
+            signal.addEventListener("abort", listener);
+          }
+        }
+        startWork(request);
+      });
+    };
+    exports.renderToPipeableStream = function (children, options) {
+      var request = createRequestImpl(children, options),
+        hasStartedFlowing = !1;
+      startWork(request);
+      return {
+        pipe: function (destination) {
+          if (hasStartedFlowing)
+            throw Error(
+              "React currently only supports piping to one writable stream."
+            );
+          hasStartedFlowing = !0;
+          safelyEmitEarlyPreloads(
+            request,
+            null === request.trackedPostpones
+              ? 0 === request.pendingRootTasks
+              : null === request.completedRootSegment
+                ? 0 === request.pendingRootTasks
+                : request.completedRootSegment.status !== POSTPONED
+          );
+          startFlowing(request, destination);
+          destination.on("drain", createDrainHandler(destination, request));
+          destination.on(
+            "error",
+            createCancelHandler(
+              request,
+              "The destination stream errored while writing data."
+            )
+          );
+          destination.on(
+            "close",
+            createCancelHandler(request, "The destination stream closed early.")
+          );
+          return destination;
+        },
+        abort: function (reason) {
+          abort(request, reason);
+        }
+      };
+    };
+    exports.version = "19.1.1";
+  })();
Index: node_modules/react-dom/cjs/react-dom-server.node.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-server.node.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-server.node.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6372 @@
+/**
+ * @license React
+ * react-dom-server.node.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var util = require("util"),
+  crypto = require("crypto"),
+  async_hooks = require("async_hooks"),
+  React = require("react"),
+  ReactDOM = require("react-dom"),
+  stream = require("stream"),
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_PROVIDER_TYPE = Symbol.for("react.provider"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  REACT_SCOPE_TYPE = Symbol.for("react.scope"),
+  REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+  REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
+  REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
+  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+  MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+  isArrayImpl = Array.isArray,
+  scheduleMicrotask = queueMicrotask;
+function flushBuffered(destination) {
+  "function" === typeof destination.flush && destination.flush();
+}
+var currentView = null,
+  writtenBytes = 0,
+  destinationHasCapacity$1 = !0;
+function writeChunk(destination, chunk) {
+  if ("string" === typeof chunk) {
+    if (0 !== chunk.length)
+      if (2048 < 3 * chunk.length)
+        0 < writtenBytes &&
+          (writeToDestination(
+            destination,
+            currentView.subarray(0, writtenBytes)
+          ),
+          (currentView = new Uint8Array(2048)),
+          (writtenBytes = 0)),
+          writeToDestination(destination, chunk);
+      else {
+        var target = currentView;
+        0 < writtenBytes && (target = currentView.subarray(writtenBytes));
+        target = textEncoder.encodeInto(chunk, target);
+        var read = target.read;
+        writtenBytes += target.written;
+        read < chunk.length &&
+          (writeToDestination(
+            destination,
+            currentView.subarray(0, writtenBytes)
+          ),
+          (currentView = new Uint8Array(2048)),
+          (writtenBytes = textEncoder.encodeInto(
+            chunk.slice(read),
+            currentView
+          ).written));
+        2048 === writtenBytes &&
+          (writeToDestination(destination, currentView),
+          (currentView = new Uint8Array(2048)),
+          (writtenBytes = 0));
+      }
+  } else
+    0 !== chunk.byteLength &&
+      (2048 < chunk.byteLength
+        ? (0 < writtenBytes &&
+            (writeToDestination(
+              destination,
+              currentView.subarray(0, writtenBytes)
+            ),
+            (currentView = new Uint8Array(2048)),
+            (writtenBytes = 0)),
+          writeToDestination(destination, chunk))
+        : ((target = currentView.length - writtenBytes),
+          target < chunk.byteLength &&
+            (0 === target
+              ? writeToDestination(destination, currentView)
+              : (currentView.set(chunk.subarray(0, target), writtenBytes),
+                (writtenBytes += target),
+                writeToDestination(destination, currentView),
+                (chunk = chunk.subarray(target))),
+            (currentView = new Uint8Array(2048)),
+            (writtenBytes = 0)),
+          currentView.set(chunk, writtenBytes),
+          (writtenBytes += chunk.byteLength),
+          2048 === writtenBytes &&
+            (writeToDestination(destination, currentView),
+            (currentView = new Uint8Array(2048)),
+            (writtenBytes = 0))));
+}
+function writeToDestination(destination, view) {
+  destination = destination.write(view);
+  destinationHasCapacity$1 = destinationHasCapacity$1 && destination;
+}
+function writeChunkAndReturn(destination, chunk) {
+  writeChunk(destination, chunk);
+  return destinationHasCapacity$1;
+}
+function completeWriting(destination) {
+  currentView &&
+    0 < writtenBytes &&
+    destination.write(currentView.subarray(0, writtenBytes));
+  currentView = null;
+  writtenBytes = 0;
+  destinationHasCapacity$1 = !0;
+}
+var textEncoder = new util.TextEncoder();
+function stringToPrecomputedChunk(content) {
+  return textEncoder.encode(content);
+}
+var assign = Object.assign,
+  hasOwnProperty = Object.prototype.hasOwnProperty,
+  VALID_ATTRIBUTE_NAME_REGEX = RegExp(
+    "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"
+  ),
+  illegalAttributeNameCache = {},
+  validatedAttributeNameCache = {};
+function isAttributeNameSafe(attributeName) {
+  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))
+    return !0;
+  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;
+  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))
+    return (validatedAttributeNameCache[attributeName] = !0);
+  illegalAttributeNameCache[attributeName] = !0;
+  return !1;
+}
+var unitlessNumbers = new Set(
+    "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(
+      " "
+    )
+  ),
+  aliases = new Map([
+    ["acceptCharset", "accept-charset"],
+    ["htmlFor", "for"],
+    ["httpEquiv", "http-equiv"],
+    ["crossOrigin", "crossorigin"],
+    ["accentHeight", "accent-height"],
+    ["alignmentBaseline", "alignment-baseline"],
+    ["arabicForm", "arabic-form"],
+    ["baselineShift", "baseline-shift"],
+    ["capHeight", "cap-height"],
+    ["clipPath", "clip-path"],
+    ["clipRule", "clip-rule"],
+    ["colorInterpolation", "color-interpolation"],
+    ["colorInterpolationFilters", "color-interpolation-filters"],
+    ["colorProfile", "color-profile"],
+    ["colorRendering", "color-rendering"],
+    ["dominantBaseline", "dominant-baseline"],
+    ["enableBackground", "enable-background"],
+    ["fillOpacity", "fill-opacity"],
+    ["fillRule", "fill-rule"],
+    ["floodColor", "flood-color"],
+    ["floodOpacity", "flood-opacity"],
+    ["fontFamily", "font-family"],
+    ["fontSize", "font-size"],
+    ["fontSizeAdjust", "font-size-adjust"],
+    ["fontStretch", "font-stretch"],
+    ["fontStyle", "font-style"],
+    ["fontVariant", "font-variant"],
+    ["fontWeight", "font-weight"],
+    ["glyphName", "glyph-name"],
+    ["glyphOrientationHorizontal", "glyph-orientation-horizontal"],
+    ["glyphOrientationVertical", "glyph-orientation-vertical"],
+    ["horizAdvX", "horiz-adv-x"],
+    ["horizOriginX", "horiz-origin-x"],
+    ["imageRendering", "image-rendering"],
+    ["letterSpacing", "letter-spacing"],
+    ["lightingColor", "lighting-color"],
+    ["markerEnd", "marker-end"],
+    ["markerMid", "marker-mid"],
+    ["markerStart", "marker-start"],
+    ["overlinePosition", "overline-position"],
+    ["overlineThickness", "overline-thickness"],
+    ["paintOrder", "paint-order"],
+    ["panose-1", "panose-1"],
+    ["pointerEvents", "pointer-events"],
+    ["renderingIntent", "rendering-intent"],
+    ["shapeRendering", "shape-rendering"],
+    ["stopColor", "stop-color"],
+    ["stopOpacity", "stop-opacity"],
+    ["strikethroughPosition", "strikethrough-position"],
+    ["strikethroughThickness", "strikethrough-thickness"],
+    ["strokeDasharray", "stroke-dasharray"],
+    ["strokeDashoffset", "stroke-dashoffset"],
+    ["strokeLinecap", "stroke-linecap"],
+    ["strokeLinejoin", "stroke-linejoin"],
+    ["strokeMiterlimit", "stroke-miterlimit"],
+    ["strokeOpacity", "stroke-opacity"],
+    ["strokeWidth", "stroke-width"],
+    ["textAnchor", "text-anchor"],
+    ["textDecoration", "text-decoration"],
+    ["textRendering", "text-rendering"],
+    ["transformOrigin", "transform-origin"],
+    ["underlinePosition", "underline-position"],
+    ["underlineThickness", "underline-thickness"],
+    ["unicodeBidi", "unicode-bidi"],
+    ["unicodeRange", "unicode-range"],
+    ["unitsPerEm", "units-per-em"],
+    ["vAlphabetic", "v-alphabetic"],
+    ["vHanging", "v-hanging"],
+    ["vIdeographic", "v-ideographic"],
+    ["vMathematical", "v-mathematical"],
+    ["vectorEffect", "vector-effect"],
+    ["vertAdvY", "vert-adv-y"],
+    ["vertOriginX", "vert-origin-x"],
+    ["vertOriginY", "vert-origin-y"],
+    ["wordSpacing", "word-spacing"],
+    ["writingMode", "writing-mode"],
+    ["xmlnsXlink", "xmlns:xlink"],
+    ["xHeight", "x-height"]
+  ]),
+  matchHtmlRegExp = /["'&<>]/;
+function escapeTextForBrowser(text) {
+  if (
+    "boolean" === typeof text ||
+    "number" === typeof text ||
+    "bigint" === typeof text
+  )
+    return "" + text;
+  text = "" + text;
+  var match = matchHtmlRegExp.exec(text);
+  if (match) {
+    var html = "",
+      index,
+      lastIndex = 0;
+    for (index = match.index; index < text.length; index++) {
+      switch (text.charCodeAt(index)) {
+        case 34:
+          match = "&quot;";
+          break;
+        case 38:
+          match = "&amp;";
+          break;
+        case 39:
+          match = "&#x27;";
+          break;
+        case 60:
+          match = "&lt;";
+          break;
+        case 62:
+          match = "&gt;";
+          break;
+        default:
+          continue;
+      }
+      lastIndex !== index && (html += text.slice(lastIndex, index));
+      lastIndex = index + 1;
+      html += match;
+    }
+    text = lastIndex !== index ? html + text.slice(lastIndex, index) : html;
+  }
+  return text;
+}
+var uppercasePattern = /([A-Z])/g,
+  msPattern = /^ms-/,
+  isJavaScriptProtocol =
+    /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
+function sanitizeURL(url) {
+  return isJavaScriptProtocol.test("" + url)
+    ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')"
+    : url;
+}
+var ReactSharedInternals =
+    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  ReactDOMSharedInternals =
+    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+  sharedNotPendingObject = {
+    pending: !1,
+    data: null,
+    method: null,
+    action: null
+  },
+  previousDispatcher = ReactDOMSharedInternals.d;
+ReactDOMSharedInternals.d = {
+  f: previousDispatcher.f,
+  r: previousDispatcher.r,
+  D: prefetchDNS,
+  C: preconnect,
+  L: preload,
+  m: preloadModule,
+  X: preinitScript,
+  S: preinitStyle,
+  M: preinitModuleScript
+};
+var PRELOAD_NO_CREDS = [];
+stringToPrecomputedChunk('"></template>');
+var startInlineScript = stringToPrecomputedChunk("<script>"),
+  endInlineScript = stringToPrecomputedChunk("\x3c/script>"),
+  startScriptSrc = stringToPrecomputedChunk('<script src="'),
+  startModuleSrc = stringToPrecomputedChunk('<script type="module" src="'),
+  scriptNonce = stringToPrecomputedChunk('" nonce="'),
+  scriptIntegirty = stringToPrecomputedChunk('" integrity="'),
+  scriptCrossOrigin = stringToPrecomputedChunk('" crossorigin="'),
+  endAsyncScript = stringToPrecomputedChunk('" async="">\x3c/script>'),
+  scriptRegex = /(<\/|<)(s)(cript)/gi;
+function scriptReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\u0073" : "\\u0053") + suffix;
+}
+var importMapScriptStart = stringToPrecomputedChunk(
+    '<script type="importmap">'
+  ),
+  importMapScriptEnd = stringToPrecomputedChunk("\x3c/script>");
+function createRenderState(
+  resumableState,
+  nonce,
+  externalRuntimeConfig,
+  importMap,
+  onHeaders,
+  maxHeadersLength
+) {
+  var inlineScriptWithNonce =
+      void 0 === nonce
+        ? startInlineScript
+        : stringToPrecomputedChunk(
+            '<script nonce="' + escapeTextForBrowser(nonce) + '">'
+          ),
+    idPrefix = resumableState.idPrefix;
+  externalRuntimeConfig = [];
+  var bootstrapScriptContent = resumableState.bootstrapScriptContent,
+    bootstrapScripts = resumableState.bootstrapScripts,
+    bootstrapModules = resumableState.bootstrapModules;
+  void 0 !== bootstrapScriptContent &&
+    externalRuntimeConfig.push(
+      inlineScriptWithNonce,
+      ("" + bootstrapScriptContent).replace(scriptRegex, scriptReplacer),
+      endInlineScript
+    );
+  bootstrapScriptContent = [];
+  void 0 !== importMap &&
+    (bootstrapScriptContent.push(importMapScriptStart),
+    bootstrapScriptContent.push(
+      ("" + JSON.stringify(importMap)).replace(scriptRegex, scriptReplacer)
+    ),
+    bootstrapScriptContent.push(importMapScriptEnd));
+  importMap = onHeaders
+    ? {
+        preconnects: "",
+        fontPreloads: "",
+        highImagePreloads: "",
+        remainingCapacity:
+          2 + ("number" === typeof maxHeadersLength ? maxHeadersLength : 2e3)
+      }
+    : null;
+  onHeaders = {
+    placeholderPrefix: stringToPrecomputedChunk(idPrefix + "P:"),
+    segmentPrefix: stringToPrecomputedChunk(idPrefix + "S:"),
+    boundaryPrefix: stringToPrecomputedChunk(idPrefix + "B:"),
+    startInlineScript: inlineScriptWithNonce,
+    preamble: createPreambleState(),
+    externalRuntimeScript: null,
+    bootstrapChunks: externalRuntimeConfig,
+    importMapChunks: bootstrapScriptContent,
+    onHeaders: onHeaders,
+    headers: importMap,
+    resets: {
+      font: {},
+      dns: {},
+      connect: { default: {}, anonymous: {}, credentials: {} },
+      image: {},
+      style: {}
+    },
+    charsetChunks: [],
+    viewportChunks: [],
+    hoistableChunks: [],
+    preconnects: new Set(),
+    fontPreloads: new Set(),
+    highImagePreloads: new Set(),
+    styles: new Map(),
+    bootstrapScripts: new Set(),
+    scripts: new Set(),
+    bulkPreloads: new Set(),
+    preloads: {
+      images: new Map(),
+      stylesheets: new Map(),
+      scripts: new Map(),
+      moduleScripts: new Map()
+    },
+    nonce: nonce,
+    hoistableState: null,
+    stylesToHoist: !1
+  };
+  if (void 0 !== bootstrapScripts)
+    for (importMap = 0; importMap < bootstrapScripts.length; importMap++) {
+      var scriptConfig = bootstrapScripts[importMap];
+      idPrefix = inlineScriptWithNonce = void 0;
+      bootstrapScriptContent = {
+        rel: "preload",
+        as: "script",
+        fetchPriority: "low",
+        nonce: nonce
+      };
+      "string" === typeof scriptConfig
+        ? (bootstrapScriptContent.href = maxHeadersLength = scriptConfig)
+        : ((bootstrapScriptContent.href = maxHeadersLength = scriptConfig.src),
+          (bootstrapScriptContent.integrity = idPrefix =
+            "string" === typeof scriptConfig.integrity
+              ? scriptConfig.integrity
+              : void 0),
+          (bootstrapScriptContent.crossOrigin = inlineScriptWithNonce =
+            "string" === typeof scriptConfig || null == scriptConfig.crossOrigin
+              ? void 0
+              : "use-credentials" === scriptConfig.crossOrigin
+                ? "use-credentials"
+                : ""));
+      scriptConfig = resumableState;
+      var href = maxHeadersLength;
+      scriptConfig.scriptResources[href] = null;
+      scriptConfig.moduleScriptResources[href] = null;
+      scriptConfig = [];
+      pushLinkImpl(scriptConfig, bootstrapScriptContent);
+      onHeaders.bootstrapScripts.add(scriptConfig);
+      externalRuntimeConfig.push(
+        startScriptSrc,
+        escapeTextForBrowser(maxHeadersLength)
+      );
+      nonce &&
+        externalRuntimeConfig.push(scriptNonce, escapeTextForBrowser(nonce));
+      "string" === typeof idPrefix &&
+        externalRuntimeConfig.push(
+          scriptIntegirty,
+          escapeTextForBrowser(idPrefix)
+        );
+      "string" === typeof inlineScriptWithNonce &&
+        externalRuntimeConfig.push(
+          scriptCrossOrigin,
+          escapeTextForBrowser(inlineScriptWithNonce)
+        );
+      externalRuntimeConfig.push(endAsyncScript);
+    }
+  if (void 0 !== bootstrapModules)
+    for (
+      bootstrapScripts = 0;
+      bootstrapScripts < bootstrapModules.length;
+      bootstrapScripts++
+    )
+      (bootstrapScriptContent = bootstrapModules[bootstrapScripts]),
+        (inlineScriptWithNonce = maxHeadersLength = void 0),
+        (idPrefix = {
+          rel: "modulepreload",
+          fetchPriority: "low",
+          nonce: nonce
+        }),
+        "string" === typeof bootstrapScriptContent
+          ? (idPrefix.href = importMap = bootstrapScriptContent)
+          : ((idPrefix.href = importMap = bootstrapScriptContent.src),
+            (idPrefix.integrity = inlineScriptWithNonce =
+              "string" === typeof bootstrapScriptContent.integrity
+                ? bootstrapScriptContent.integrity
+                : void 0),
+            (idPrefix.crossOrigin = maxHeadersLength =
+              "string" === typeof bootstrapScriptContent ||
+              null == bootstrapScriptContent.crossOrigin
+                ? void 0
+                : "use-credentials" === bootstrapScriptContent.crossOrigin
+                  ? "use-credentials"
+                  : "")),
+        (bootstrapScriptContent = resumableState),
+        (scriptConfig = importMap),
+        (bootstrapScriptContent.scriptResources[scriptConfig] = null),
+        (bootstrapScriptContent.moduleScriptResources[scriptConfig] = null),
+        (bootstrapScriptContent = []),
+        pushLinkImpl(bootstrapScriptContent, idPrefix),
+        onHeaders.bootstrapScripts.add(bootstrapScriptContent),
+        externalRuntimeConfig.push(
+          startModuleSrc,
+          escapeTextForBrowser(importMap)
+        ),
+        nonce &&
+          externalRuntimeConfig.push(scriptNonce, escapeTextForBrowser(nonce)),
+        "string" === typeof inlineScriptWithNonce &&
+          externalRuntimeConfig.push(
+            scriptIntegirty,
+            escapeTextForBrowser(inlineScriptWithNonce)
+          ),
+        "string" === typeof maxHeadersLength &&
+          externalRuntimeConfig.push(
+            scriptCrossOrigin,
+            escapeTextForBrowser(maxHeadersLength)
+          ),
+        externalRuntimeConfig.push(endAsyncScript);
+  return onHeaders;
+}
+function createResumableState(
+  identifierPrefix,
+  externalRuntimeConfig,
+  bootstrapScriptContent,
+  bootstrapScripts,
+  bootstrapModules
+) {
+  return {
+    idPrefix: void 0 === identifierPrefix ? "" : identifierPrefix,
+    nextFormID: 0,
+    streamingFormat: 0,
+    bootstrapScriptContent: bootstrapScriptContent,
+    bootstrapScripts: bootstrapScripts,
+    bootstrapModules: bootstrapModules,
+    instructions: 0,
+    hasBody: !1,
+    hasHtml: !1,
+    unknownResources: {},
+    dnsResources: {},
+    connectResources: { default: {}, anonymous: {}, credentials: {} },
+    imageResources: {},
+    styleResources: {},
+    scriptResources: {},
+    moduleUnknownResources: {},
+    moduleScriptResources: {}
+  };
+}
+function createPreambleState() {
+  return {
+    htmlChunks: null,
+    headChunks: null,
+    bodyChunks: null,
+    contribution: 0
+  };
+}
+function createFormatContext(insertionMode, selectedValue, tagScope) {
+  return {
+    insertionMode: insertionMode,
+    selectedValue: selectedValue,
+    tagScope: tagScope
+  };
+}
+function createRootFormatContext(namespaceURI) {
+  return createFormatContext(
+    "http://www.w3.org/2000/svg" === namespaceURI
+      ? 4
+      : "http://www.w3.org/1998/Math/MathML" === namespaceURI
+        ? 5
+        : 0,
+    null,
+    0
+  );
+}
+function getChildFormatContext(parentContext, type, props) {
+  switch (type) {
+    case "noscript":
+      return createFormatContext(2, null, parentContext.tagScope | 1);
+    case "select":
+      return createFormatContext(
+        2,
+        null != props.value ? props.value : props.defaultValue,
+        parentContext.tagScope
+      );
+    case "svg":
+      return createFormatContext(4, null, parentContext.tagScope);
+    case "picture":
+      return createFormatContext(2, null, parentContext.tagScope | 2);
+    case "math":
+      return createFormatContext(5, null, parentContext.tagScope);
+    case "foreignObject":
+      return createFormatContext(2, null, parentContext.tagScope);
+    case "table":
+      return createFormatContext(6, null, parentContext.tagScope);
+    case "thead":
+    case "tbody":
+    case "tfoot":
+      return createFormatContext(7, null, parentContext.tagScope);
+    case "colgroup":
+      return createFormatContext(9, null, parentContext.tagScope);
+    case "tr":
+      return createFormatContext(8, null, parentContext.tagScope);
+    case "head":
+      if (2 > parentContext.insertionMode)
+        return createFormatContext(3, null, parentContext.tagScope);
+      break;
+    case "html":
+      if (0 === parentContext.insertionMode)
+        return createFormatContext(1, null, parentContext.tagScope);
+  }
+  return 6 <= parentContext.insertionMode || 2 > parentContext.insertionMode
+    ? createFormatContext(2, null, parentContext.tagScope)
+    : parentContext;
+}
+var textSeparator = stringToPrecomputedChunk("\x3c!-- --\x3e");
+function pushTextInstance(target, text, renderState, textEmbedded) {
+  if ("" === text) return textEmbedded;
+  textEmbedded && target.push(textSeparator);
+  target.push(escapeTextForBrowser(text));
+  return !0;
+}
+var styleNameCache = new Map(),
+  styleAttributeStart = stringToPrecomputedChunk(' style="'),
+  styleAssign = stringToPrecomputedChunk(":"),
+  styleSeparator = stringToPrecomputedChunk(";");
+function pushStyleAttribute(target, style) {
+  if ("object" !== typeof style)
+    throw Error(
+      "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX."
+    );
+  var isFirst = !0,
+    styleName;
+  for (styleName in style)
+    if (hasOwnProperty.call(style, styleName)) {
+      var styleValue = style[styleName];
+      if (
+        null != styleValue &&
+        "boolean" !== typeof styleValue &&
+        "" !== styleValue
+      ) {
+        if (0 === styleName.indexOf("--")) {
+          var nameChunk = escapeTextForBrowser(styleName);
+          styleValue = escapeTextForBrowser(("" + styleValue).trim());
+        } else
+          (nameChunk = styleNameCache.get(styleName)),
+            void 0 === nameChunk &&
+              ((nameChunk = stringToPrecomputedChunk(
+                escapeTextForBrowser(
+                  styleName
+                    .replace(uppercasePattern, "-$1")
+                    .toLowerCase()
+                    .replace(msPattern, "-ms-")
+                )
+              )),
+              styleNameCache.set(styleName, nameChunk)),
+            (styleValue =
+              "number" === typeof styleValue
+                ? 0 === styleValue || unitlessNumbers.has(styleName)
+                  ? "" + styleValue
+                  : styleValue + "px"
+                : escapeTextForBrowser(("" + styleValue).trim()));
+        isFirst
+          ? ((isFirst = !1),
+            target.push(
+              styleAttributeStart,
+              nameChunk,
+              styleAssign,
+              styleValue
+            ))
+          : target.push(styleSeparator, nameChunk, styleAssign, styleValue);
+      }
+    }
+  isFirst || target.push(attributeEnd);
+}
+var attributeSeparator = stringToPrecomputedChunk(" "),
+  attributeAssign = stringToPrecomputedChunk('="'),
+  attributeEnd = stringToPrecomputedChunk('"'),
+  attributeEmptyString = stringToPrecomputedChunk('=""');
+function pushBooleanAttribute(target, name, value) {
+  value &&
+    "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    target.push(attributeSeparator, name, attributeEmptyString);
+}
+function pushStringAttribute(target, name, value) {
+  "function" !== typeof value &&
+    "symbol" !== typeof value &&
+    "boolean" !== typeof value &&
+    target.push(
+      attributeSeparator,
+      name,
+      attributeAssign,
+      escapeTextForBrowser(value),
+      attributeEnd
+    );
+}
+var actionJavaScriptURL = stringToPrecomputedChunk(
+    escapeTextForBrowser(
+      "javascript:throw new Error('React form unexpectedly submitted.')"
+    )
+  ),
+  startHiddenInputChunk = stringToPrecomputedChunk('<input type="hidden"');
+function pushAdditionalFormField(value, key) {
+  this.push(startHiddenInputChunk);
+  validateAdditionalFormField(value);
+  pushStringAttribute(this, "name", key);
+  pushStringAttribute(this, "value", value);
+  this.push(endOfStartTagSelfClosing);
+}
+function validateAdditionalFormField(value) {
+  if ("string" !== typeof value)
+    throw Error(
+      "File/Blob fields are not yet supported in progressive forms. Will fallback to client hydration."
+    );
+}
+function getCustomFormFields(resumableState, formAction) {
+  if ("function" === typeof formAction.$$FORM_ACTION) {
+    var id = resumableState.nextFormID++;
+    resumableState = resumableState.idPrefix + id;
+    try {
+      var customFields = formAction.$$FORM_ACTION(resumableState);
+      if (customFields) {
+        var formData = customFields.data;
+        null != formData && formData.forEach(validateAdditionalFormField);
+      }
+      return customFields;
+    } catch (x) {
+      if ("object" === typeof x && null !== x && "function" === typeof x.then)
+        throw x;
+    }
+  }
+  return null;
+}
+function pushFormActionAttribute(
+  target,
+  resumableState,
+  renderState,
+  formAction,
+  formEncType,
+  formMethod,
+  formTarget,
+  name
+) {
+  var formData = null;
+  if ("function" === typeof formAction) {
+    var customFields = getCustomFormFields(resumableState, formAction);
+    null !== customFields
+      ? ((name = customFields.name),
+        (formAction = customFields.action || ""),
+        (formEncType = customFields.encType),
+        (formMethod = customFields.method),
+        (formTarget = customFields.target),
+        (formData = customFields.data))
+      : (target.push(
+          attributeSeparator,
+          "formAction",
+          attributeAssign,
+          actionJavaScriptURL,
+          attributeEnd
+        ),
+        (formTarget = formMethod = formEncType = formAction = name = null),
+        injectFormReplayingRuntime(resumableState, renderState));
+  }
+  null != name && pushAttribute(target, "name", name);
+  null != formAction && pushAttribute(target, "formAction", formAction);
+  null != formEncType && pushAttribute(target, "formEncType", formEncType);
+  null != formMethod && pushAttribute(target, "formMethod", formMethod);
+  null != formTarget && pushAttribute(target, "formTarget", formTarget);
+  return formData;
+}
+function pushAttribute(target, name, value) {
+  switch (name) {
+    case "className":
+      pushStringAttribute(target, "class", value);
+      break;
+    case "tabIndex":
+      pushStringAttribute(target, "tabindex", value);
+      break;
+    case "dir":
+    case "role":
+    case "viewBox":
+    case "width":
+    case "height":
+      pushStringAttribute(target, name, value);
+      break;
+    case "style":
+      pushStyleAttribute(target, value);
+      break;
+    case "src":
+    case "href":
+      if ("" === value) break;
+    case "action":
+    case "formAction":
+      if (
+        null == value ||
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(
+        attributeSeparator,
+        name,
+        attributeAssign,
+        escapeTextForBrowser(value),
+        attributeEnd
+      );
+      break;
+    case "defaultValue":
+    case "defaultChecked":
+    case "innerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "ref":
+      break;
+    case "autoFocus":
+    case "multiple":
+    case "muted":
+      pushBooleanAttribute(target, name.toLowerCase(), value);
+      break;
+    case "xlinkHref":
+      if (
+        "function" === typeof value ||
+        "symbol" === typeof value ||
+        "boolean" === typeof value
+      )
+        break;
+      value = sanitizeURL("" + value);
+      target.push(
+        attributeSeparator,
+        "xlink:href",
+        attributeAssign,
+        escapeTextForBrowser(value),
+        attributeEnd
+      );
+      break;
+    case "contentEditable":
+    case "spellCheck":
+    case "draggable":
+    case "value":
+    case "autoReverse":
+    case "externalResourcesRequired":
+    case "focusable":
+    case "preserveAlpha":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(
+          attributeSeparator,
+          name,
+          attributeAssign,
+          escapeTextForBrowser(value),
+          attributeEnd
+        );
+      break;
+    case "inert":
+    case "allowFullScreen":
+    case "async":
+    case "autoPlay":
+    case "controls":
+    case "default":
+    case "defer":
+    case "disabled":
+    case "disablePictureInPicture":
+    case "disableRemotePlayback":
+    case "formNoValidate":
+    case "hidden":
+    case "loop":
+    case "noModule":
+    case "noValidate":
+    case "open":
+    case "playsInline":
+    case "readOnly":
+    case "required":
+    case "reversed":
+    case "scoped":
+    case "seamless":
+    case "itemScope":
+      value &&
+        "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        target.push(attributeSeparator, name, attributeEmptyString);
+      break;
+    case "capture":
+    case "download":
+      !0 === value
+        ? target.push(attributeSeparator, name, attributeEmptyString)
+        : !1 !== value &&
+          "function" !== typeof value &&
+          "symbol" !== typeof value &&
+          target.push(
+            attributeSeparator,
+            name,
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+      break;
+    case "cols":
+    case "rows":
+    case "size":
+    case "span":
+      "function" !== typeof value &&
+        "symbol" !== typeof value &&
+        !isNaN(value) &&
+        1 <= value &&
+        target.push(
+          attributeSeparator,
+          name,
+          attributeAssign,
+          escapeTextForBrowser(value),
+          attributeEnd
+        );
+      break;
+    case "rowSpan":
+    case "start":
+      "function" === typeof value ||
+        "symbol" === typeof value ||
+        isNaN(value) ||
+        target.push(
+          attributeSeparator,
+          name,
+          attributeAssign,
+          escapeTextForBrowser(value),
+          attributeEnd
+        );
+      break;
+    case "xlinkActuate":
+      pushStringAttribute(target, "xlink:actuate", value);
+      break;
+    case "xlinkArcrole":
+      pushStringAttribute(target, "xlink:arcrole", value);
+      break;
+    case "xlinkRole":
+      pushStringAttribute(target, "xlink:role", value);
+      break;
+    case "xlinkShow":
+      pushStringAttribute(target, "xlink:show", value);
+      break;
+    case "xlinkTitle":
+      pushStringAttribute(target, "xlink:title", value);
+      break;
+    case "xlinkType":
+      pushStringAttribute(target, "xlink:type", value);
+      break;
+    case "xmlBase":
+      pushStringAttribute(target, "xml:base", value);
+      break;
+    case "xmlLang":
+      pushStringAttribute(target, "xml:lang", value);
+      break;
+    case "xmlSpace":
+      pushStringAttribute(target, "xml:space", value);
+      break;
+    default:
+      if (
+        !(2 < name.length) ||
+        ("o" !== name[0] && "O" !== name[0]) ||
+        ("n" !== name[1] && "N" !== name[1])
+      )
+        if (((name = aliases.get(name) || name), isAttributeNameSafe(name))) {
+          switch (typeof value) {
+            case "function":
+            case "symbol":
+              return;
+            case "boolean":
+              var prefix$8 = name.toLowerCase().slice(0, 5);
+              if ("data-" !== prefix$8 && "aria-" !== prefix$8) return;
+          }
+          target.push(
+            attributeSeparator,
+            name,
+            attributeAssign,
+            escapeTextForBrowser(value),
+            attributeEnd
+          );
+        }
+  }
+}
+var endOfStartTag = stringToPrecomputedChunk(">"),
+  endOfStartTagSelfClosing = stringToPrecomputedChunk("/>");
+function pushInnerHTML(target, innerHTML, children) {
+  if (null != innerHTML) {
+    if (null != children)
+      throw Error(
+        "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+      );
+    if ("object" !== typeof innerHTML || !("__html" in innerHTML))
+      throw Error(
+        "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+      );
+    innerHTML = innerHTML.__html;
+    null !== innerHTML && void 0 !== innerHTML && target.push("" + innerHTML);
+  }
+}
+function flattenOptionChildren(children) {
+  var content = "";
+  React.Children.forEach(children, function (child) {
+    null != child && (content += child);
+  });
+  return content;
+}
+var selectedMarkerAttribute = stringToPrecomputedChunk(' selected=""'),
+  formReplayingRuntimeScript = stringToPrecomputedChunk(
+    'addEventListener("submit",function(a){if(!a.defaultPrevented){var c=a.target,d=a.submitter,e=c.action,b=d;if(d){var f=d.getAttribute("formAction");null!=f&&(e=f,b=null)}"javascript:throw new Error(\'React form unexpectedly submitted.\')"===e&&(a.preventDefault(),b?(a=document.createElement("input"),a.name=b.name,a.value=b.value,b.parentNode.insertBefore(a,b),b=new FormData(c),a.parentNode.removeChild(a)):b=new FormData(c),a=c.ownerDocument||c,(a.$$reactFormReplay=a.$$reactFormReplay||[]).push(c,d,b))}});'
+  );
+function injectFormReplayingRuntime(resumableState, renderState) {
+  0 === (resumableState.instructions & 16) &&
+    ((resumableState.instructions |= 16),
+    renderState.bootstrapChunks.unshift(
+      renderState.startInlineScript,
+      formReplayingRuntimeScript,
+      endInlineScript
+    ));
+}
+var formStateMarkerIsMatching = stringToPrecomputedChunk("\x3c!--F!--\x3e"),
+  formStateMarkerIsNotMatching = stringToPrecomputedChunk("\x3c!--F--\x3e");
+function pushLinkImpl(target, props) {
+  target.push(startChunkForTag("link"));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTagSelfClosing);
+  return null;
+}
+var styleRegex = /(<\/|<)(s)(tyle)/gi;
+function styleReplacer(match, prefix, s, suffix) {
+  return "" + prefix + ("s" === s ? "\\73 " : "\\53 ") + suffix;
+}
+function pushSelfClosing(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  for (var propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+          case "dangerouslySetInnerHTML":
+            throw Error(
+              tag +
+                " is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+            );
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTagSelfClosing);
+  return null;
+}
+function pushTitleImpl(target, props) {
+  target.push(startChunkForTag("title"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  props = Array.isArray(children)
+    ? 2 > children.length
+      ? children[0]
+      : null
+    : children;
+  "function" !== typeof props &&
+    "symbol" !== typeof props &&
+    null !== props &&
+    void 0 !== props &&
+    target.push(escapeTextForBrowser("" + props));
+  pushInnerHTML(target, innerHTML, children);
+  target.push(endChunkForTag("title"));
+  return null;
+}
+function pushScriptImpl(target, props) {
+  target.push(startChunkForTag("script"));
+  var children = null,
+    innerHTML = null,
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            children = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, children);
+  "string" === typeof children &&
+    target.push(("" + children).replace(scriptRegex, scriptReplacer));
+  target.push(endChunkForTag("script"));
+  return null;
+}
+function pushStartSingletonElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, tag);
+  return tag;
+}
+function pushStartGenericElement(target, props, tag) {
+  target.push(startChunkForTag(tag));
+  var innerHTML = (tag = null),
+    propKey;
+  for (propKey in props)
+    if (hasOwnProperty.call(props, propKey)) {
+      var propValue = props[propKey];
+      if (null != propValue)
+        switch (propKey) {
+          case "children":
+            tag = propValue;
+            break;
+          case "dangerouslySetInnerHTML":
+            innerHTML = propValue;
+            break;
+          default:
+            pushAttribute(target, propKey, propValue);
+        }
+    }
+  target.push(endOfStartTag);
+  pushInnerHTML(target, innerHTML, tag);
+  return "string" === typeof tag
+    ? (target.push(escapeTextForBrowser(tag)), null)
+    : tag;
+}
+var leadingNewline = stringToPrecomputedChunk("\n"),
+  VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
+  validatedTagCache = new Map();
+function startChunkForTag(tag) {
+  var tagStartChunk = validatedTagCache.get(tag);
+  if (void 0 === tagStartChunk) {
+    if (!VALID_TAG_REGEX.test(tag)) throw Error("Invalid tag: " + tag);
+    tagStartChunk = stringToPrecomputedChunk("<" + tag);
+    validatedTagCache.set(tag, tagStartChunk);
+  }
+  return tagStartChunk;
+}
+var doctypeChunk = stringToPrecomputedChunk("<!DOCTYPE html>");
+function pushStartInstance(
+  target$jscomp$0,
+  type,
+  props,
+  resumableState,
+  renderState,
+  preambleState,
+  hoistableState,
+  formatContext,
+  textEmbedded,
+  isFallback
+) {
+  switch (type) {
+    case "div":
+    case "span":
+    case "svg":
+    case "path":
+      break;
+    case "a":
+      target$jscomp$0.push(startChunkForTag("a"));
+      var children = null,
+        innerHTML = null,
+        propKey;
+      for (propKey in props)
+        if (hasOwnProperty.call(props, propKey)) {
+          var propValue = props[propKey];
+          if (null != propValue)
+            switch (propKey) {
+              case "children":
+                children = propValue;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML = propValue;
+                break;
+              case "href":
+                "" === propValue
+                  ? pushStringAttribute(target$jscomp$0, "href", "")
+                  : pushAttribute(target$jscomp$0, propKey, propValue);
+                break;
+              default:
+                pushAttribute(target$jscomp$0, propKey, propValue);
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML, children);
+      if ("string" === typeof children) {
+        target$jscomp$0.push(escapeTextForBrowser(children));
+        var JSCompiler_inline_result = null;
+      } else JSCompiler_inline_result = children;
+      return JSCompiler_inline_result;
+    case "g":
+    case "p":
+    case "li":
+      break;
+    case "select":
+      target$jscomp$0.push(startChunkForTag("select"));
+      var children$jscomp$0 = null,
+        innerHTML$jscomp$0 = null,
+        propKey$jscomp$0;
+      for (propKey$jscomp$0 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$0)) {
+          var propValue$jscomp$0 = props[propKey$jscomp$0];
+          if (null != propValue$jscomp$0)
+            switch (propKey$jscomp$0) {
+              case "children":
+                children$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$0 = propValue$jscomp$0;
+                break;
+              case "defaultValue":
+              case "value":
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$0,
+                  propValue$jscomp$0
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$0, children$jscomp$0);
+      return children$jscomp$0;
+    case "option":
+      var selectedValue = formatContext.selectedValue;
+      target$jscomp$0.push(startChunkForTag("option"));
+      var children$jscomp$1 = null,
+        value = null,
+        selected = null,
+        innerHTML$jscomp$1 = null,
+        propKey$jscomp$1;
+      for (propKey$jscomp$1 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$1)) {
+          var propValue$jscomp$1 = props[propKey$jscomp$1];
+          if (null != propValue$jscomp$1)
+            switch (propKey$jscomp$1) {
+              case "children":
+                children$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "selected":
+                selected = propValue$jscomp$1;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$1 = propValue$jscomp$1;
+                break;
+              case "value":
+                value = propValue$jscomp$1;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$1,
+                  propValue$jscomp$1
+                );
+            }
+        }
+      if (null != selectedValue) {
+        var stringValue =
+          null !== value
+            ? "" + value
+            : flattenOptionChildren(children$jscomp$1);
+        if (isArrayImpl(selectedValue))
+          for (var i = 0; i < selectedValue.length; i++) {
+            if ("" + selectedValue[i] === stringValue) {
+              target$jscomp$0.push(selectedMarkerAttribute);
+              break;
+            }
+          }
+        else
+          "" + selectedValue === stringValue &&
+            target$jscomp$0.push(selectedMarkerAttribute);
+      } else selected && target$jscomp$0.push(selectedMarkerAttribute);
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$1, children$jscomp$1);
+      return children$jscomp$1;
+    case "textarea":
+      target$jscomp$0.push(startChunkForTag("textarea"));
+      var value$jscomp$0 = null,
+        defaultValue = null,
+        children$jscomp$2 = null,
+        propKey$jscomp$2;
+      for (propKey$jscomp$2 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$2)) {
+          var propValue$jscomp$2 = props[propKey$jscomp$2];
+          if (null != propValue$jscomp$2)
+            switch (propKey$jscomp$2) {
+              case "children":
+                children$jscomp$2 = propValue$jscomp$2;
+                break;
+              case "value":
+                value$jscomp$0 = propValue$jscomp$2;
+                break;
+              case "defaultValue":
+                defaultValue = propValue$jscomp$2;
+                break;
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "`dangerouslySetInnerHTML` does not make sense on <textarea>."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$2,
+                  propValue$jscomp$2
+                );
+            }
+        }
+      null === value$jscomp$0 &&
+        null !== defaultValue &&
+        (value$jscomp$0 = defaultValue);
+      target$jscomp$0.push(endOfStartTag);
+      if (null != children$jscomp$2) {
+        if (null != value$jscomp$0)
+          throw Error(
+            "If you supply `defaultValue` on a <textarea>, do not pass children."
+          );
+        if (isArrayImpl(children$jscomp$2)) {
+          if (1 < children$jscomp$2.length)
+            throw Error("<textarea> can only have at most one child.");
+          value$jscomp$0 = "" + children$jscomp$2[0];
+        }
+        value$jscomp$0 = "" + children$jscomp$2;
+      }
+      "string" === typeof value$jscomp$0 &&
+        "\n" === value$jscomp$0[0] &&
+        target$jscomp$0.push(leadingNewline);
+      null !== value$jscomp$0 &&
+        target$jscomp$0.push(escapeTextForBrowser("" + value$jscomp$0));
+      return null;
+    case "input":
+      target$jscomp$0.push(startChunkForTag("input"));
+      var name = null,
+        formAction = null,
+        formEncType = null,
+        formMethod = null,
+        formTarget = null,
+        value$jscomp$1 = null,
+        defaultValue$jscomp$0 = null,
+        checked = null,
+        defaultChecked = null,
+        propKey$jscomp$3;
+      for (propKey$jscomp$3 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$3)) {
+          var propValue$jscomp$3 = props[propKey$jscomp$3];
+          if (null != propValue$jscomp$3)
+            switch (propKey$jscomp$3) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "input is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              case "name":
+                name = propValue$jscomp$3;
+                break;
+              case "formAction":
+                formAction = propValue$jscomp$3;
+                break;
+              case "formEncType":
+                formEncType = propValue$jscomp$3;
+                break;
+              case "formMethod":
+                formMethod = propValue$jscomp$3;
+                break;
+              case "formTarget":
+                formTarget = propValue$jscomp$3;
+                break;
+              case "defaultChecked":
+                defaultChecked = propValue$jscomp$3;
+                break;
+              case "defaultValue":
+                defaultValue$jscomp$0 = propValue$jscomp$3;
+                break;
+              case "checked":
+                checked = propValue$jscomp$3;
+                break;
+              case "value":
+                value$jscomp$1 = propValue$jscomp$3;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$3,
+                  propValue$jscomp$3
+                );
+            }
+        }
+      var formData = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction,
+        formEncType,
+        formMethod,
+        formTarget,
+        name
+      );
+      null !== checked
+        ? pushBooleanAttribute(target$jscomp$0, "checked", checked)
+        : null !== defaultChecked &&
+          pushBooleanAttribute(target$jscomp$0, "checked", defaultChecked);
+      null !== value$jscomp$1
+        ? pushAttribute(target$jscomp$0, "value", value$jscomp$1)
+        : null !== defaultValue$jscomp$0 &&
+          pushAttribute(target$jscomp$0, "value", defaultValue$jscomp$0);
+      target$jscomp$0.push(endOfStartTagSelfClosing);
+      null != formData &&
+        formData.forEach(pushAdditionalFormField, target$jscomp$0);
+      return null;
+    case "button":
+      target$jscomp$0.push(startChunkForTag("button"));
+      var children$jscomp$3 = null,
+        innerHTML$jscomp$2 = null,
+        name$jscomp$0 = null,
+        formAction$jscomp$0 = null,
+        formEncType$jscomp$0 = null,
+        formMethod$jscomp$0 = null,
+        formTarget$jscomp$0 = null,
+        propKey$jscomp$4;
+      for (propKey$jscomp$4 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$4)) {
+          var propValue$jscomp$4 = props[propKey$jscomp$4];
+          if (null != propValue$jscomp$4)
+            switch (propKey$jscomp$4) {
+              case "children":
+                children$jscomp$3 = propValue$jscomp$4;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$2 = propValue$jscomp$4;
+                break;
+              case "name":
+                name$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formAction":
+                formAction$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formEncType":
+                formEncType$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formMethod":
+                formMethod$jscomp$0 = propValue$jscomp$4;
+                break;
+              case "formTarget":
+                formTarget$jscomp$0 = propValue$jscomp$4;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$4,
+                  propValue$jscomp$4
+                );
+            }
+        }
+      var formData$jscomp$0 = pushFormActionAttribute(
+        target$jscomp$0,
+        resumableState,
+        renderState,
+        formAction$jscomp$0,
+        formEncType$jscomp$0,
+        formMethod$jscomp$0,
+        formTarget$jscomp$0,
+        name$jscomp$0
+      );
+      target$jscomp$0.push(endOfStartTag);
+      null != formData$jscomp$0 &&
+        formData$jscomp$0.forEach(pushAdditionalFormField, target$jscomp$0);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$2, children$jscomp$3);
+      if ("string" === typeof children$jscomp$3) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$3));
+        var JSCompiler_inline_result$jscomp$0 = null;
+      } else JSCompiler_inline_result$jscomp$0 = children$jscomp$3;
+      return JSCompiler_inline_result$jscomp$0;
+    case "form":
+      target$jscomp$0.push(startChunkForTag("form"));
+      var children$jscomp$4 = null,
+        innerHTML$jscomp$3 = null,
+        formAction$jscomp$1 = null,
+        formEncType$jscomp$1 = null,
+        formMethod$jscomp$1 = null,
+        formTarget$jscomp$1 = null,
+        propKey$jscomp$5;
+      for (propKey$jscomp$5 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$5)) {
+          var propValue$jscomp$5 = props[propKey$jscomp$5];
+          if (null != propValue$jscomp$5)
+            switch (propKey$jscomp$5) {
+              case "children":
+                children$jscomp$4 = propValue$jscomp$5;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$3 = propValue$jscomp$5;
+                break;
+              case "action":
+                formAction$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "encType":
+                formEncType$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "method":
+                formMethod$jscomp$1 = propValue$jscomp$5;
+                break;
+              case "target":
+                formTarget$jscomp$1 = propValue$jscomp$5;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$5,
+                  propValue$jscomp$5
+                );
+            }
+        }
+      var formData$jscomp$1 = null,
+        formActionName = null;
+      if ("function" === typeof formAction$jscomp$1) {
+        var customFields = getCustomFormFields(
+          resumableState,
+          formAction$jscomp$1
+        );
+        null !== customFields
+          ? ((formAction$jscomp$1 = customFields.action || ""),
+            (formEncType$jscomp$1 = customFields.encType),
+            (formMethod$jscomp$1 = customFields.method),
+            (formTarget$jscomp$1 = customFields.target),
+            (formData$jscomp$1 = customFields.data),
+            (formActionName = customFields.name))
+          : (target$jscomp$0.push(
+              attributeSeparator,
+              "action",
+              attributeAssign,
+              actionJavaScriptURL,
+              attributeEnd
+            ),
+            (formTarget$jscomp$1 =
+              formMethod$jscomp$1 =
+              formEncType$jscomp$1 =
+              formAction$jscomp$1 =
+                null),
+            injectFormReplayingRuntime(resumableState, renderState));
+      }
+      null != formAction$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "action", formAction$jscomp$1);
+      null != formEncType$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "encType", formEncType$jscomp$1);
+      null != formMethod$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "method", formMethod$jscomp$1);
+      null != formTarget$jscomp$1 &&
+        pushAttribute(target$jscomp$0, "target", formTarget$jscomp$1);
+      target$jscomp$0.push(endOfStartTag);
+      null !== formActionName &&
+        (target$jscomp$0.push(startHiddenInputChunk),
+        pushStringAttribute(target$jscomp$0, "name", formActionName),
+        target$jscomp$0.push(endOfStartTagSelfClosing),
+        null != formData$jscomp$1 &&
+          formData$jscomp$1.forEach(pushAdditionalFormField, target$jscomp$0));
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$3, children$jscomp$4);
+      if ("string" === typeof children$jscomp$4) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$4));
+        var JSCompiler_inline_result$jscomp$1 = null;
+      } else JSCompiler_inline_result$jscomp$1 = children$jscomp$4;
+      return JSCompiler_inline_result$jscomp$1;
+    case "menuitem":
+      target$jscomp$0.push(startChunkForTag("menuitem"));
+      for (var propKey$jscomp$6 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$6)) {
+          var propValue$jscomp$6 = props[propKey$jscomp$6];
+          if (null != propValue$jscomp$6)
+            switch (propKey$jscomp$6) {
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "menuitems cannot have `children` nor `dangerouslySetInnerHTML`."
+                );
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$6,
+                  propValue$jscomp$6
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      return null;
+    case "object":
+      target$jscomp$0.push(startChunkForTag("object"));
+      var children$jscomp$5 = null,
+        innerHTML$jscomp$4 = null,
+        propKey$jscomp$7;
+      for (propKey$jscomp$7 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$7)) {
+          var propValue$jscomp$7 = props[propKey$jscomp$7];
+          if (null != propValue$jscomp$7)
+            switch (propKey$jscomp$7) {
+              case "children":
+                children$jscomp$5 = propValue$jscomp$7;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$4 = propValue$jscomp$7;
+                break;
+              case "data":
+                var sanitizedValue = sanitizeURL("" + propValue$jscomp$7);
+                if ("" === sanitizedValue) break;
+                target$jscomp$0.push(
+                  attributeSeparator,
+                  "data",
+                  attributeAssign,
+                  escapeTextForBrowser(sanitizedValue),
+                  attributeEnd
+                );
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$7,
+                  propValue$jscomp$7
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      pushInnerHTML(target$jscomp$0, innerHTML$jscomp$4, children$jscomp$5);
+      if ("string" === typeof children$jscomp$5) {
+        target$jscomp$0.push(escapeTextForBrowser(children$jscomp$5));
+        var JSCompiler_inline_result$jscomp$2 = null;
+      } else JSCompiler_inline_result$jscomp$2 = children$jscomp$5;
+      return JSCompiler_inline_result$jscomp$2;
+    case "title":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$3 = pushTitleImpl(
+          target$jscomp$0,
+          props
+        );
+      else
+        isFallback
+          ? (JSCompiler_inline_result$jscomp$3 = null)
+          : (pushTitleImpl(renderState.hoistableChunks, props),
+            (JSCompiler_inline_result$jscomp$3 = void 0));
+      return JSCompiler_inline_result$jscomp$3;
+    case "link":
+      var rel = props.rel,
+        href = props.href,
+        precedence = props.precedence;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof rel ||
+        "string" !== typeof href ||
+        "" === href
+      ) {
+        pushLinkImpl(target$jscomp$0, props);
+        var JSCompiler_inline_result$jscomp$4 = null;
+      } else if ("stylesheet" === props.rel)
+        if (
+          "string" !== typeof precedence ||
+          null != props.disabled ||
+          props.onLoad ||
+          props.onError
+        )
+          JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+            target$jscomp$0,
+            props
+          );
+        else {
+          var styleQueue = renderState.styles.get(precedence),
+            resourceState = resumableState.styleResources.hasOwnProperty(href)
+              ? resumableState.styleResources[href]
+              : void 0;
+          if (null !== resourceState) {
+            resumableState.styleResources[href] = null;
+            styleQueue ||
+              ((styleQueue = {
+                precedence: escapeTextForBrowser(precedence),
+                rules: [],
+                hrefs: [],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence, styleQueue));
+            var resource = {
+              state: 0,
+              props: assign({}, props, {
+                "data-precedence": props.precedence,
+                precedence: null
+              })
+            };
+            if (resourceState) {
+              2 === resourceState.length &&
+                adoptPreloadCredentials(resource.props, resourceState);
+              var preloadResource = renderState.preloads.stylesheets.get(href);
+              preloadResource && 0 < preloadResource.length
+                ? (preloadResource.length = 0)
+                : (resource.state = 1);
+            }
+            styleQueue.sheets.set(href, resource);
+            hoistableState && hoistableState.stylesheets.add(resource);
+          } else if (styleQueue) {
+            var resource$9 = styleQueue.sheets.get(href);
+            resource$9 &&
+              hoistableState &&
+              hoistableState.stylesheets.add(resource$9);
+          }
+          textEmbedded && target$jscomp$0.push(textSeparator);
+          JSCompiler_inline_result$jscomp$4 = null;
+        }
+      else
+        props.onLoad || props.onError
+          ? (JSCompiler_inline_result$jscomp$4 = pushLinkImpl(
+              target$jscomp$0,
+              props
+            ))
+          : (textEmbedded && target$jscomp$0.push(textSeparator),
+            (JSCompiler_inline_result$jscomp$4 = isFallback
+              ? null
+              : pushLinkImpl(renderState.hoistableChunks, props)));
+      return JSCompiler_inline_result$jscomp$4;
+    case "script":
+      var asyncProp = props.async;
+      if (
+        "string" !== typeof props.src ||
+        !props.src ||
+        !asyncProp ||
+        "function" === typeof asyncProp ||
+        "symbol" === typeof asyncProp ||
+        props.onLoad ||
+        props.onError ||
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$5 = pushScriptImpl(
+          target$jscomp$0,
+          props
+        );
+      else {
+        var key = props.src;
+        if ("module" === props.type) {
+          var resources = resumableState.moduleScriptResources;
+          var preloads = renderState.preloads.moduleScripts;
+        } else
+          (resources = resumableState.scriptResources),
+            (preloads = renderState.preloads.scripts);
+        var resourceState$jscomp$0 = resources.hasOwnProperty(key)
+          ? resources[key]
+          : void 0;
+        if (null !== resourceState$jscomp$0) {
+          resources[key] = null;
+          var scriptProps = props;
+          if (resourceState$jscomp$0) {
+            2 === resourceState$jscomp$0.length &&
+              ((scriptProps = assign({}, props)),
+              adoptPreloadCredentials(scriptProps, resourceState$jscomp$0));
+            var preloadResource$jscomp$0 = preloads.get(key);
+            preloadResource$jscomp$0 && (preloadResource$jscomp$0.length = 0);
+          }
+          var resource$jscomp$0 = [];
+          renderState.scripts.add(resource$jscomp$0);
+          pushScriptImpl(resource$jscomp$0, scriptProps);
+        }
+        textEmbedded && target$jscomp$0.push(textSeparator);
+        JSCompiler_inline_result$jscomp$5 = null;
+      }
+      return JSCompiler_inline_result$jscomp$5;
+    case "style":
+      var precedence$jscomp$0 = props.precedence,
+        href$jscomp$0 = props.href;
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp ||
+        "string" !== typeof precedence$jscomp$0 ||
+        "string" !== typeof href$jscomp$0 ||
+        "" === href$jscomp$0
+      ) {
+        target$jscomp$0.push(startChunkForTag("style"));
+        var children$jscomp$6 = null,
+          innerHTML$jscomp$5 = null,
+          propKey$jscomp$8;
+        for (propKey$jscomp$8 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$8)) {
+            var propValue$jscomp$8 = props[propKey$jscomp$8];
+            if (null != propValue$jscomp$8)
+              switch (propKey$jscomp$8) {
+                case "children":
+                  children$jscomp$6 = propValue$jscomp$8;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$5 = propValue$jscomp$8;
+                  break;
+                default:
+                  pushAttribute(
+                    target$jscomp$0,
+                    propKey$jscomp$8,
+                    propValue$jscomp$8
+                  );
+              }
+          }
+        target$jscomp$0.push(endOfStartTag);
+        var child = Array.isArray(children$jscomp$6)
+          ? 2 > children$jscomp$6.length
+            ? children$jscomp$6[0]
+            : null
+          : children$jscomp$6;
+        "function" !== typeof child &&
+          "symbol" !== typeof child &&
+          null !== child &&
+          void 0 !== child &&
+          target$jscomp$0.push(("" + child).replace(styleRegex, styleReplacer));
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$5, children$jscomp$6);
+        target$jscomp$0.push(endChunkForTag("style"));
+        var JSCompiler_inline_result$jscomp$6 = null;
+      } else {
+        var styleQueue$jscomp$0 = renderState.styles.get(precedence$jscomp$0);
+        if (
+          null !==
+          (resumableState.styleResources.hasOwnProperty(href$jscomp$0)
+            ? resumableState.styleResources[href$jscomp$0]
+            : void 0)
+        ) {
+          resumableState.styleResources[href$jscomp$0] = null;
+          styleQueue$jscomp$0
+            ? styleQueue$jscomp$0.hrefs.push(
+                escapeTextForBrowser(href$jscomp$0)
+              )
+            : ((styleQueue$jscomp$0 = {
+                precedence: escapeTextForBrowser(precedence$jscomp$0),
+                rules: [],
+                hrefs: [escapeTextForBrowser(href$jscomp$0)],
+                sheets: new Map()
+              }),
+              renderState.styles.set(precedence$jscomp$0, styleQueue$jscomp$0));
+          var target = styleQueue$jscomp$0.rules,
+            children$jscomp$7 = null,
+            innerHTML$jscomp$6 = null,
+            propKey$jscomp$9;
+          for (propKey$jscomp$9 in props)
+            if (hasOwnProperty.call(props, propKey$jscomp$9)) {
+              var propValue$jscomp$9 = props[propKey$jscomp$9];
+              if (null != propValue$jscomp$9)
+                switch (propKey$jscomp$9) {
+                  case "children":
+                    children$jscomp$7 = propValue$jscomp$9;
+                    break;
+                  case "dangerouslySetInnerHTML":
+                    innerHTML$jscomp$6 = propValue$jscomp$9;
+                }
+            }
+          var child$jscomp$0 = Array.isArray(children$jscomp$7)
+            ? 2 > children$jscomp$7.length
+              ? children$jscomp$7[0]
+              : null
+            : children$jscomp$7;
+          "function" !== typeof child$jscomp$0 &&
+            "symbol" !== typeof child$jscomp$0 &&
+            null !== child$jscomp$0 &&
+            void 0 !== child$jscomp$0 &&
+            target.push(
+              ("" + child$jscomp$0).replace(styleRegex, styleReplacer)
+            );
+          pushInnerHTML(target, innerHTML$jscomp$6, children$jscomp$7);
+        }
+        styleQueue$jscomp$0 &&
+          hoistableState &&
+          hoistableState.styles.add(styleQueue$jscomp$0);
+        textEmbedded && target$jscomp$0.push(textSeparator);
+        JSCompiler_inline_result$jscomp$6 = void 0;
+      }
+      return JSCompiler_inline_result$jscomp$6;
+    case "meta":
+      if (
+        4 === formatContext.insertionMode ||
+        formatContext.tagScope & 1 ||
+        null != props.itemProp
+      )
+        var JSCompiler_inline_result$jscomp$7 = pushSelfClosing(
+          target$jscomp$0,
+          props,
+          "meta"
+        );
+      else
+        textEmbedded && target$jscomp$0.push(textSeparator),
+          (JSCompiler_inline_result$jscomp$7 = isFallback
+            ? null
+            : "string" === typeof props.charSet
+              ? pushSelfClosing(renderState.charsetChunks, props, "meta")
+              : "viewport" === props.name
+                ? pushSelfClosing(renderState.viewportChunks, props, "meta")
+                : pushSelfClosing(renderState.hoistableChunks, props, "meta"));
+      return JSCompiler_inline_result$jscomp$7;
+    case "listing":
+    case "pre":
+      target$jscomp$0.push(startChunkForTag(type));
+      var children$jscomp$8 = null,
+        innerHTML$jscomp$7 = null,
+        propKey$jscomp$10;
+      for (propKey$jscomp$10 in props)
+        if (hasOwnProperty.call(props, propKey$jscomp$10)) {
+          var propValue$jscomp$10 = props[propKey$jscomp$10];
+          if (null != propValue$jscomp$10)
+            switch (propKey$jscomp$10) {
+              case "children":
+                children$jscomp$8 = propValue$jscomp$10;
+                break;
+              case "dangerouslySetInnerHTML":
+                innerHTML$jscomp$7 = propValue$jscomp$10;
+                break;
+              default:
+                pushAttribute(
+                  target$jscomp$0,
+                  propKey$jscomp$10,
+                  propValue$jscomp$10
+                );
+            }
+        }
+      target$jscomp$0.push(endOfStartTag);
+      if (null != innerHTML$jscomp$7) {
+        if (null != children$jscomp$8)
+          throw Error(
+            "Can only set one of `children` or `props.dangerouslySetInnerHTML`."
+          );
+        if (
+          "object" !== typeof innerHTML$jscomp$7 ||
+          !("__html" in innerHTML$jscomp$7)
+        )
+          throw Error(
+            "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information."
+          );
+        var html = innerHTML$jscomp$7.__html;
+        null !== html &&
+          void 0 !== html &&
+          ("string" === typeof html && 0 < html.length && "\n" === html[0]
+            ? target$jscomp$0.push(leadingNewline, html)
+            : target$jscomp$0.push("" + html));
+      }
+      "string" === typeof children$jscomp$8 &&
+        "\n" === children$jscomp$8[0] &&
+        target$jscomp$0.push(leadingNewline);
+      return children$jscomp$8;
+    case "img":
+      var src = props.src,
+        srcSet = props.srcSet;
+      if (
+        !(
+          "lazy" === props.loading ||
+          (!src && !srcSet) ||
+          ("string" !== typeof src && null != src) ||
+          ("string" !== typeof srcSet && null != srcSet)
+        ) &&
+        "low" !== props.fetchPriority &&
+        !1 === !!(formatContext.tagScope & 3) &&
+        ("string" !== typeof src ||
+          ":" !== src[4] ||
+          ("d" !== src[0] && "D" !== src[0]) ||
+          ("a" !== src[1] && "A" !== src[1]) ||
+          ("t" !== src[2] && "T" !== src[2]) ||
+          ("a" !== src[3] && "A" !== src[3])) &&
+        ("string" !== typeof srcSet ||
+          ":" !== srcSet[4] ||
+          ("d" !== srcSet[0] && "D" !== srcSet[0]) ||
+          ("a" !== srcSet[1] && "A" !== srcSet[1]) ||
+          ("t" !== srcSet[2] && "T" !== srcSet[2]) ||
+          ("a" !== srcSet[3] && "A" !== srcSet[3]))
+      ) {
+        var sizes = "string" === typeof props.sizes ? props.sizes : void 0,
+          key$jscomp$0 = srcSet ? srcSet + "\n" + (sizes || "") : src,
+          promotablePreloads = renderState.preloads.images,
+          resource$jscomp$1 = promotablePreloads.get(key$jscomp$0);
+        if (resource$jscomp$1) {
+          if (
+            "high" === props.fetchPriority ||
+            10 > renderState.highImagePreloads.size
+          )
+            promotablePreloads.delete(key$jscomp$0),
+              renderState.highImagePreloads.add(resource$jscomp$1);
+        } else if (
+          !resumableState.imageResources.hasOwnProperty(key$jscomp$0)
+        ) {
+          resumableState.imageResources[key$jscomp$0] = PRELOAD_NO_CREDS;
+          var input = props.crossOrigin;
+          var JSCompiler_inline_result$jscomp$8 =
+            "string" === typeof input
+              ? "use-credentials" === input
+                ? input
+                : ""
+              : void 0;
+          var headers = renderState.headers,
+            header;
+          headers &&
+          0 < headers.remainingCapacity &&
+          "string" !== typeof props.srcSet &&
+          ("high" === props.fetchPriority ||
+            500 > headers.highImagePreloads.length) &&
+          ((header = getPreloadAsHeader(src, "image", {
+            imageSrcSet: props.srcSet,
+            imageSizes: props.sizes,
+            crossOrigin: JSCompiler_inline_result$jscomp$8,
+            integrity: props.integrity,
+            nonce: props.nonce,
+            type: props.type,
+            fetchPriority: props.fetchPriority,
+            referrerPolicy: props.refererPolicy
+          })),
+          0 <= (headers.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key$jscomp$0] = PRELOAD_NO_CREDS),
+              headers.highImagePreloads && (headers.highImagePreloads += ", "),
+              (headers.highImagePreloads += header))
+            : ((resource$jscomp$1 = []),
+              pushLinkImpl(resource$jscomp$1, {
+                rel: "preload",
+                as: "image",
+                href: srcSet ? void 0 : src,
+                imageSrcSet: srcSet,
+                imageSizes: sizes,
+                crossOrigin: JSCompiler_inline_result$jscomp$8,
+                integrity: props.integrity,
+                type: props.type,
+                fetchPriority: props.fetchPriority,
+                referrerPolicy: props.referrerPolicy
+              }),
+              "high" === props.fetchPriority ||
+              10 > renderState.highImagePreloads.size
+                ? renderState.highImagePreloads.add(resource$jscomp$1)
+                : (renderState.bulkPreloads.add(resource$jscomp$1),
+                  promotablePreloads.set(key$jscomp$0, resource$jscomp$1)));
+        }
+      }
+      return pushSelfClosing(target$jscomp$0, props, "img");
+    case "base":
+    case "area":
+    case "br":
+    case "col":
+    case "embed":
+    case "hr":
+    case "keygen":
+    case "param":
+    case "source":
+    case "track":
+    case "wbr":
+      return pushSelfClosing(target$jscomp$0, props, type);
+    case "annotation-xml":
+    case "color-profile":
+    case "font-face":
+    case "font-face-src":
+    case "font-face-uri":
+    case "font-face-format":
+    case "font-face-name":
+    case "missing-glyph":
+      break;
+    case "head":
+      if (2 > formatContext.insertionMode) {
+        var preamble = preambleState || renderState.preamble;
+        if (preamble.headChunks)
+          throw Error("The `<head>` tag may only be rendered once.");
+        preamble.headChunks = [];
+        var JSCompiler_inline_result$jscomp$9 = pushStartSingletonElement(
+          preamble.headChunks,
+          props,
+          "head"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$9 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "head"
+        );
+      return JSCompiler_inline_result$jscomp$9;
+    case "body":
+      if (2 > formatContext.insertionMode) {
+        var preamble$jscomp$0 = preambleState || renderState.preamble;
+        if (preamble$jscomp$0.bodyChunks)
+          throw Error("The `<body>` tag may only be rendered once.");
+        preamble$jscomp$0.bodyChunks = [];
+        var JSCompiler_inline_result$jscomp$10 = pushStartSingletonElement(
+          preamble$jscomp$0.bodyChunks,
+          props,
+          "body"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$10 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "body"
+        );
+      return JSCompiler_inline_result$jscomp$10;
+    case "html":
+      if (0 === formatContext.insertionMode) {
+        var preamble$jscomp$1 = preambleState || renderState.preamble;
+        if (preamble$jscomp$1.htmlChunks)
+          throw Error("The `<html>` tag may only be rendered once.");
+        preamble$jscomp$1.htmlChunks = [doctypeChunk];
+        var JSCompiler_inline_result$jscomp$11 = pushStartSingletonElement(
+          preamble$jscomp$1.htmlChunks,
+          props,
+          "html"
+        );
+      } else
+        JSCompiler_inline_result$jscomp$11 = pushStartGenericElement(
+          target$jscomp$0,
+          props,
+          "html"
+        );
+      return JSCompiler_inline_result$jscomp$11;
+    default:
+      if (-1 !== type.indexOf("-")) {
+        target$jscomp$0.push(startChunkForTag(type));
+        var children$jscomp$9 = null,
+          innerHTML$jscomp$8 = null,
+          propKey$jscomp$11;
+        for (propKey$jscomp$11 in props)
+          if (hasOwnProperty.call(props, propKey$jscomp$11)) {
+            var propValue$jscomp$11 = props[propKey$jscomp$11];
+            if (null != propValue$jscomp$11) {
+              var attributeName = propKey$jscomp$11;
+              switch (propKey$jscomp$11) {
+                case "children":
+                  children$jscomp$9 = propValue$jscomp$11;
+                  break;
+                case "dangerouslySetInnerHTML":
+                  innerHTML$jscomp$8 = propValue$jscomp$11;
+                  break;
+                case "style":
+                  pushStyleAttribute(target$jscomp$0, propValue$jscomp$11);
+                  break;
+                case "suppressContentEditableWarning":
+                case "suppressHydrationWarning":
+                case "ref":
+                  break;
+                case "className":
+                  attributeName = "class";
+                default:
+                  if (
+                    isAttributeNameSafe(propKey$jscomp$11) &&
+                    "function" !== typeof propValue$jscomp$11 &&
+                    "symbol" !== typeof propValue$jscomp$11 &&
+                    !1 !== propValue$jscomp$11
+                  ) {
+                    if (!0 === propValue$jscomp$11) propValue$jscomp$11 = "";
+                    else if ("object" === typeof propValue$jscomp$11) continue;
+                    target$jscomp$0.push(
+                      attributeSeparator,
+                      attributeName,
+                      attributeAssign,
+                      escapeTextForBrowser(propValue$jscomp$11),
+                      attributeEnd
+                    );
+                  }
+              }
+            }
+          }
+        target$jscomp$0.push(endOfStartTag);
+        pushInnerHTML(target$jscomp$0, innerHTML$jscomp$8, children$jscomp$9);
+        return children$jscomp$9;
+      }
+  }
+  return pushStartGenericElement(target$jscomp$0, props, type);
+}
+var endTagCache = new Map();
+function endChunkForTag(tag) {
+  var chunk = endTagCache.get(tag);
+  void 0 === chunk &&
+    ((chunk = stringToPrecomputedChunk("</" + tag + ">")),
+    endTagCache.set(tag, chunk));
+  return chunk;
+}
+function hoistPreambleState(renderState, preambleState) {
+  renderState = renderState.preamble;
+  null === renderState.htmlChunks &&
+    preambleState.htmlChunks &&
+    ((renderState.htmlChunks = preambleState.htmlChunks),
+    (preambleState.contribution |= 1));
+  null === renderState.headChunks &&
+    preambleState.headChunks &&
+    ((renderState.headChunks = preambleState.headChunks),
+    (preambleState.contribution |= 4));
+  null === renderState.bodyChunks &&
+    preambleState.bodyChunks &&
+    ((renderState.bodyChunks = preambleState.bodyChunks),
+    (preambleState.contribution |= 2));
+}
+function writeBootstrap(destination, renderState) {
+  renderState = renderState.bootstrapChunks;
+  for (var i = 0; i < renderState.length - 1; i++)
+    writeChunk(destination, renderState[i]);
+  return i < renderState.length
+    ? ((i = renderState[i]),
+      (renderState.length = 0),
+      writeChunkAndReturn(destination, i))
+    : !0;
+}
+var placeholder1 = stringToPrecomputedChunk('<template id="'),
+  placeholder2 = stringToPrecomputedChunk('"></template>'),
+  startCompletedSuspenseBoundary = stringToPrecomputedChunk("\x3c!--$--\x3e"),
+  startPendingSuspenseBoundary1 = stringToPrecomputedChunk(
+    '\x3c!--$?--\x3e<template id="'
+  ),
+  startPendingSuspenseBoundary2 = stringToPrecomputedChunk('"></template>'),
+  startClientRenderedSuspenseBoundary =
+    stringToPrecomputedChunk("\x3c!--$!--\x3e"),
+  endSuspenseBoundary = stringToPrecomputedChunk("\x3c!--/$--\x3e"),
+  clientRenderedSuspenseBoundaryError1 = stringToPrecomputedChunk("<template"),
+  clientRenderedSuspenseBoundaryErrorAttrInterstitial =
+    stringToPrecomputedChunk('"'),
+  clientRenderedSuspenseBoundaryError1A =
+    stringToPrecomputedChunk(' data-dgst="');
+stringToPrecomputedChunk(' data-msg="');
+stringToPrecomputedChunk(' data-stck="');
+stringToPrecomputedChunk(' data-cstck="');
+var clientRenderedSuspenseBoundaryError2 =
+  stringToPrecomputedChunk("></template>");
+function writeStartPendingSuspenseBoundary(destination, renderState, id) {
+  writeChunk(destination, startPendingSuspenseBoundary1);
+  if (null === id)
+    throw Error(
+      "An ID must have been assigned before we can complete the boundary."
+    );
+  writeChunk(destination, renderState.boundaryPrefix);
+  writeChunk(destination, id.toString(16));
+  return writeChunkAndReturn(destination, startPendingSuspenseBoundary2);
+}
+var boundaryPreambleContributionChunkStart =
+    stringToPrecomputedChunk("\x3c!--"),
+  boundaryPreambleContributionChunkEnd = stringToPrecomputedChunk("--\x3e");
+function writePreambleContribution(destination, preambleState) {
+  preambleState = preambleState.contribution;
+  0 !== preambleState &&
+    (writeChunk(destination, boundaryPreambleContributionChunkStart),
+    writeChunk(destination, "" + preambleState),
+    writeChunk(destination, boundaryPreambleContributionChunkEnd));
+}
+var startSegmentHTML = stringToPrecomputedChunk('<div hidden id="'),
+  startSegmentHTML2 = stringToPrecomputedChunk('">'),
+  endSegmentHTML = stringToPrecomputedChunk("</div>"),
+  startSegmentSVG = stringToPrecomputedChunk(
+    '<svg aria-hidden="true" style="display:none" id="'
+  ),
+  startSegmentSVG2 = stringToPrecomputedChunk('">'),
+  endSegmentSVG = stringToPrecomputedChunk("</svg>"),
+  startSegmentMathML = stringToPrecomputedChunk(
+    '<math aria-hidden="true" style="display:none" id="'
+  ),
+  startSegmentMathML2 = stringToPrecomputedChunk('">'),
+  endSegmentMathML = stringToPrecomputedChunk("</math>"),
+  startSegmentTable = stringToPrecomputedChunk('<table hidden id="'),
+  startSegmentTable2 = stringToPrecomputedChunk('">'),
+  endSegmentTable = stringToPrecomputedChunk("</table>"),
+  startSegmentTableBody = stringToPrecomputedChunk('<table hidden><tbody id="'),
+  startSegmentTableBody2 = stringToPrecomputedChunk('">'),
+  endSegmentTableBody = stringToPrecomputedChunk("</tbody></table>"),
+  startSegmentTableRow = stringToPrecomputedChunk('<table hidden><tr id="'),
+  startSegmentTableRow2 = stringToPrecomputedChunk('">'),
+  endSegmentTableRow = stringToPrecomputedChunk("</tr></table>"),
+  startSegmentColGroup = stringToPrecomputedChunk(
+    '<table hidden><colgroup id="'
+  ),
+  startSegmentColGroup2 = stringToPrecomputedChunk('">'),
+  endSegmentColGroup = stringToPrecomputedChunk("</colgroup></table>");
+function writeStartSegment(destination, renderState, formatContext, id) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return (
+        writeChunk(destination, startSegmentHTML),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        writeChunkAndReturn(destination, startSegmentHTML2)
+      );
+    case 4:
+      return (
+        writeChunk(destination, startSegmentSVG),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        writeChunkAndReturn(destination, startSegmentSVG2)
+      );
+    case 5:
+      return (
+        writeChunk(destination, startSegmentMathML),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        writeChunkAndReturn(destination, startSegmentMathML2)
+      );
+    case 6:
+      return (
+        writeChunk(destination, startSegmentTable),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        writeChunkAndReturn(destination, startSegmentTable2)
+      );
+    case 7:
+      return (
+        writeChunk(destination, startSegmentTableBody),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        writeChunkAndReturn(destination, startSegmentTableBody2)
+      );
+    case 8:
+      return (
+        writeChunk(destination, startSegmentTableRow),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        writeChunkAndReturn(destination, startSegmentTableRow2)
+      );
+    case 9:
+      return (
+        writeChunk(destination, startSegmentColGroup),
+        writeChunk(destination, renderState.segmentPrefix),
+        writeChunk(destination, id.toString(16)),
+        writeChunkAndReturn(destination, startSegmentColGroup2)
+      );
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+function writeEndSegment(destination, formatContext) {
+  switch (formatContext.insertionMode) {
+    case 0:
+    case 1:
+    case 3:
+    case 2:
+      return writeChunkAndReturn(destination, endSegmentHTML);
+    case 4:
+      return writeChunkAndReturn(destination, endSegmentSVG);
+    case 5:
+      return writeChunkAndReturn(destination, endSegmentMathML);
+    case 6:
+      return writeChunkAndReturn(destination, endSegmentTable);
+    case 7:
+      return writeChunkAndReturn(destination, endSegmentTableBody);
+    case 8:
+      return writeChunkAndReturn(destination, endSegmentTableRow);
+    case 9:
+      return writeChunkAndReturn(destination, endSegmentColGroup);
+    default:
+      throw Error("Unknown insertion mode. This is a bug in React.");
+  }
+}
+var completeSegmentScript1Full = stringToPrecomputedChunk(
+    '$RS=function(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)};$RS("'
+  ),
+  completeSegmentScript1Partial = stringToPrecomputedChunk('$RS("'),
+  completeSegmentScript2 = stringToPrecomputedChunk('","'),
+  completeSegmentScriptEnd = stringToPrecomputedChunk('")\x3c/script>');
+stringToPrecomputedChunk('<template data-rsi="" data-sid="');
+stringToPrecomputedChunk('" data-pid="');
+var completeBoundaryScript1Full = stringToPrecomputedChunk(
+    '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RC("'
+  ),
+  completeBoundaryScript1Partial = stringToPrecomputedChunk('$RC("'),
+  completeBoundaryWithStylesScript1FullBoth = stringToPrecomputedChunk(
+    '$RC=function(b,c,e){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(e)b.data="$!",a.setAttribute("data-dgst",e);else{e=b.parentNode;a=b.nextSibling;var f=0;do{if(a&&8===a.nodeType){var d=a.data;if("/$"===d)if(0===f)break;else f--;else"$"!==d&&"$?"!==d&&"$!"!==d||f++}d=a.nextSibling;e.removeChild(a);a=d}while(a);for(;c.firstChild;)e.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}};$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+  ),
+  completeBoundaryWithStylesScript1FullPartial = stringToPrecomputedChunk(
+    '$RM=new Map;\n$RR=function(t,u,y){function v(n){this._p=null;n()}for(var w=$RC,p=$RM,q=new Map,r=document,g,b,h=r.querySelectorAll("link[data-precedence],style[data-precedence]"),x=[],k=0;b=h[k++];)"not all"===b.getAttribute("media")?x.push(b):("LINK"===b.tagName&&p.set(b.getAttribute("href"),b),q.set(b.dataset.precedence,g=b));b=0;h=[];var l,a;for(k=!0;;){if(k){var e=y[b++];if(!e){k=!1;b=0;continue}var c=!1,m=0;var d=e[m++];if(a=p.get(d)){var f=a._p;c=!0}else{a=r.createElement("link");a.href=\nd;a.rel="stylesheet";for(a.dataset.precedence=l=e[m++];f=e[m++];)a.setAttribute(f,e[m++]);f=a._p=new Promise(function(n,z){a.onload=v.bind(a,n);a.onerror=v.bind(a,z)});p.set(d,a)}d=a.getAttribute("media");!f||d&&!matchMedia(d).matches||h.push(f);if(c)continue}else{a=x[b++];if(!a)break;l=a.getAttribute("data-precedence");a.removeAttribute("media")}c=q.get(l)||g;c===g&&(g=a);q.set(l,a);c?c.parentNode.insertBefore(a,c.nextSibling):(c=r.head,c.insertBefore(a,c.firstChild))}Promise.all(h).then(w.bind(null,\nt,u,""),w.bind(null,t,u,"Resource failed to load"))};$RR("'
+  ),
+  completeBoundaryWithStylesScript1Partial = stringToPrecomputedChunk('$RR("'),
+  completeBoundaryScript2 = stringToPrecomputedChunk('","'),
+  completeBoundaryScript3a = stringToPrecomputedChunk('",'),
+  completeBoundaryScript3b = stringToPrecomputedChunk('"'),
+  completeBoundaryScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+stringToPrecomputedChunk('<template data-rci="" data-bid="');
+stringToPrecomputedChunk('<template data-rri="" data-bid="');
+stringToPrecomputedChunk('" data-sid="');
+stringToPrecomputedChunk('" data-sty="');
+var clientRenderScript1Full = stringToPrecomputedChunk(
+    '$RX=function(b,c,d,e,f){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),f&&(a.cstck=f),b._reactRetry&&b._reactRetry())};;$RX("'
+  ),
+  clientRenderScript1Partial = stringToPrecomputedChunk('$RX("'),
+  clientRenderScript1A = stringToPrecomputedChunk('"'),
+  clientRenderErrorScriptArgInterstitial = stringToPrecomputedChunk(","),
+  clientRenderScriptEnd = stringToPrecomputedChunk(")\x3c/script>");
+stringToPrecomputedChunk('<template data-rxi="" data-bid="');
+stringToPrecomputedChunk('" data-dgst="');
+stringToPrecomputedChunk('" data-msg="');
+stringToPrecomputedChunk('" data-stck="');
+stringToPrecomputedChunk('" data-cstck="');
+var regexForJSStringsInInstructionScripts = /[<\u2028\u2029]/g;
+function escapeJSStringsForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInInstructionScripts,
+    function (match) {
+      switch (match) {
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSStringsForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var regexForJSStringsInScripts = /[&><\u2028\u2029]/g;
+function escapeJSObjectForInstructionScripts(input) {
+  return JSON.stringify(input).replace(
+    regexForJSStringsInScripts,
+    function (match) {
+      switch (match) {
+        case "&":
+          return "\\u0026";
+        case ">":
+          return "\\u003e";
+        case "<":
+          return "\\u003c";
+        case "\u2028":
+          return "\\u2028";
+        case "\u2029":
+          return "\\u2029";
+        default:
+          throw Error(
+            "escapeJSObjectForInstructionScripts encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+          );
+      }
+    }
+  );
+}
+var lateStyleTagResourceOpen1 = stringToPrecomputedChunk(
+    '<style media="not all" data-precedence="'
+  ),
+  lateStyleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+  lateStyleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+  lateStyleTagTemplateClose = stringToPrecomputedChunk("</style>"),
+  currentlyRenderingBoundaryHasStylesToHoist = !1,
+  destinationHasCapacity = !0;
+function flushStyleTagsLateForBoundary(styleQueue) {
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs,
+    i = 0;
+  if (hrefs.length) {
+    writeChunk(this, lateStyleTagResourceOpen1);
+    writeChunk(this, styleQueue.precedence);
+    for (writeChunk(this, lateStyleTagResourceOpen2); i < hrefs.length - 1; i++)
+      writeChunk(this, hrefs[i]), writeChunk(this, spaceSeparator);
+    writeChunk(this, hrefs[i]);
+    writeChunk(this, lateStyleTagResourceOpen3);
+    for (i = 0; i < rules.length; i++) writeChunk(this, rules[i]);
+    destinationHasCapacity = writeChunkAndReturn(
+      this,
+      lateStyleTagTemplateClose
+    );
+    currentlyRenderingBoundaryHasStylesToHoist = !0;
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function hasStylesToHoist(stylesheet) {
+  return 2 !== stylesheet.state
+    ? (currentlyRenderingBoundaryHasStylesToHoist = !0)
+    : !1;
+}
+function writeHoistablesForBoundary(destination, hoistableState, renderState) {
+  currentlyRenderingBoundaryHasStylesToHoist = !1;
+  destinationHasCapacity = !0;
+  hoistableState.styles.forEach(flushStyleTagsLateForBoundary, destination);
+  hoistableState.stylesheets.forEach(hasStylesToHoist);
+  currentlyRenderingBoundaryHasStylesToHoist &&
+    (renderState.stylesToHoist = !0);
+  return destinationHasCapacity;
+}
+function flushResource(resource) {
+  for (var i = 0; i < resource.length; i++) writeChunk(this, resource[i]);
+  resource.length = 0;
+}
+var stylesheetFlushingQueue = [];
+function flushStyleInPreamble(stylesheet) {
+  pushLinkImpl(stylesheetFlushingQueue, stylesheet.props);
+  for (var i = 0; i < stylesheetFlushingQueue.length; i++)
+    writeChunk(this, stylesheetFlushingQueue[i]);
+  stylesheetFlushingQueue.length = 0;
+  stylesheet.state = 2;
+}
+var styleTagResourceOpen1 = stringToPrecomputedChunk(
+    '<style data-precedence="'
+  ),
+  styleTagResourceOpen2 = stringToPrecomputedChunk('" data-href="'),
+  spaceSeparator = stringToPrecomputedChunk(" "),
+  styleTagResourceOpen3 = stringToPrecomputedChunk('">'),
+  styleTagResourceClose = stringToPrecomputedChunk("</style>");
+function flushStylesInPreamble(styleQueue) {
+  var hasStylesheets = 0 < styleQueue.sheets.size;
+  styleQueue.sheets.forEach(flushStyleInPreamble, this);
+  styleQueue.sheets.clear();
+  var rules = styleQueue.rules,
+    hrefs = styleQueue.hrefs;
+  if (!hasStylesheets || hrefs.length) {
+    writeChunk(this, styleTagResourceOpen1);
+    writeChunk(this, styleQueue.precedence);
+    styleQueue = 0;
+    if (hrefs.length) {
+      for (
+        writeChunk(this, styleTagResourceOpen2);
+        styleQueue < hrefs.length - 1;
+        styleQueue++
+      )
+        writeChunk(this, hrefs[styleQueue]), writeChunk(this, spaceSeparator);
+      writeChunk(this, hrefs[styleQueue]);
+    }
+    writeChunk(this, styleTagResourceOpen3);
+    for (styleQueue = 0; styleQueue < rules.length; styleQueue++)
+      writeChunk(this, rules[styleQueue]);
+    writeChunk(this, styleTagResourceClose);
+    rules.length = 0;
+    hrefs.length = 0;
+  }
+}
+function preloadLateStyle(stylesheet) {
+  if (0 === stylesheet.state) {
+    stylesheet.state = 1;
+    var props = stylesheet.props;
+    pushLinkImpl(stylesheetFlushingQueue, {
+      rel: "preload",
+      as: "style",
+      href: stylesheet.props.href,
+      crossOrigin: props.crossOrigin,
+      fetchPriority: props.fetchPriority,
+      integrity: props.integrity,
+      media: props.media,
+      hrefLang: props.hrefLang,
+      referrerPolicy: props.referrerPolicy
+    });
+    for (
+      stylesheet = 0;
+      stylesheet < stylesheetFlushingQueue.length;
+      stylesheet++
+    )
+      writeChunk(this, stylesheetFlushingQueue[stylesheet]);
+    stylesheetFlushingQueue.length = 0;
+  }
+}
+function preloadLateStyles(styleQueue) {
+  styleQueue.sheets.forEach(preloadLateStyle, this);
+  styleQueue.sheets.clear();
+}
+var arrayFirstOpenBracket = stringToPrecomputedChunk("["),
+  arraySubsequentOpenBracket = stringToPrecomputedChunk(",["),
+  arrayInterstitial = stringToPrecomputedChunk(","),
+  arrayCloseBracket = stringToPrecomputedChunk("]");
+function writeStyleResourceDependenciesInJS(destination, hoistableState) {
+  writeChunk(destination, arrayFirstOpenBracket);
+  var nextArrayOpenBrackChunk = arrayFirstOpenBracket;
+  hoistableState.stylesheets.forEach(function (resource) {
+    if (2 !== resource.state)
+      if (3 === resource.state)
+        writeChunk(destination, nextArrayOpenBrackChunk),
+          writeChunk(
+            destination,
+            escapeJSObjectForInstructionScripts("" + resource.props.href)
+          ),
+          writeChunk(destination, arrayCloseBracket),
+          (nextArrayOpenBrackChunk = arraySubsequentOpenBracket);
+      else {
+        writeChunk(destination, nextArrayOpenBrackChunk);
+        var precedence = resource.props["data-precedence"],
+          props = resource.props,
+          coercedHref = sanitizeURL("" + resource.props.href);
+        writeChunk(
+          destination,
+          escapeJSObjectForInstructionScripts(coercedHref)
+        );
+        precedence = "" + precedence;
+        writeChunk(destination, arrayInterstitial);
+        writeChunk(
+          destination,
+          escapeJSObjectForInstructionScripts(precedence)
+        );
+        for (var propKey in props)
+          if (
+            hasOwnProperty.call(props, propKey) &&
+            ((precedence = props[propKey]), null != precedence)
+          )
+            switch (propKey) {
+              case "href":
+              case "rel":
+              case "precedence":
+              case "data-precedence":
+                break;
+              case "children":
+              case "dangerouslySetInnerHTML":
+                throw Error(
+                  "link is a self-closing tag and must neither have `children` nor use `dangerouslySetInnerHTML`."
+                );
+              default:
+                writeStyleResourceAttributeInJS(
+                  destination,
+                  propKey,
+                  precedence
+                );
+            }
+        writeChunk(destination, arrayCloseBracket);
+        nextArrayOpenBrackChunk = arraySubsequentOpenBracket;
+        resource.state = 3;
+      }
+  });
+  writeChunk(destination, arrayCloseBracket);
+}
+function writeStyleResourceAttributeInJS(destination, name, value) {
+  var attributeName = name.toLowerCase();
+  switch (typeof value) {
+    case "function":
+    case "symbol":
+      return;
+  }
+  switch (name) {
+    case "innerHTML":
+    case "dangerouslySetInnerHTML":
+    case "suppressContentEditableWarning":
+    case "suppressHydrationWarning":
+    case "style":
+    case "ref":
+      return;
+    case "className":
+      attributeName = "class";
+      name = "" + value;
+      break;
+    case "hidden":
+      if (!1 === value) return;
+      name = "";
+      break;
+    case "src":
+    case "href":
+      value = sanitizeURL(value);
+      name = "" + value;
+      break;
+    default:
+      if (
+        (2 < name.length &&
+          ("o" === name[0] || "O" === name[0]) &&
+          ("n" === name[1] || "N" === name[1])) ||
+        !isAttributeNameSafe(name)
+      )
+        return;
+      name = "" + value;
+  }
+  writeChunk(destination, arrayInterstitial);
+  writeChunk(destination, escapeJSObjectForInstructionScripts(attributeName));
+  writeChunk(destination, arrayInterstitial);
+  writeChunk(destination, escapeJSObjectForInstructionScripts(name));
+}
+function createHoistableState() {
+  return { styles: new Set(), stylesheets: new Set() };
+}
+function prefetchDNS(href) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      if (!resumableState.dnsResources.hasOwnProperty(href)) {
+        resumableState.dnsResources[href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        )
+          JSCompiler_temp =
+            ((header =
+              "<" +
+              ("" + href).replace(
+                regexForHrefInLinkHeaderURLContext,
+                escapeHrefForLinkHeaderURLContextReplacer
+              ) +
+              ">; rel=dns-prefetch"),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        JSCompiler_temp
+          ? ((renderState.resets.dns[href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((header = []),
+            pushLinkImpl(header, { href: href, rel: "dns-prefetch" }),
+            renderState.preconnects.add(header));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.D(href);
+}
+function preconnect(href, crossOrigin) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if ("string" === typeof href && href) {
+      var bucket =
+        "use-credentials" === crossOrigin
+          ? "credentials"
+          : "string" === typeof crossOrigin
+            ? "anonymous"
+            : "default";
+      if (!resumableState.connectResources[bucket].hasOwnProperty(href)) {
+        resumableState.connectResources[bucket][href] = null;
+        resumableState = renderState.headers;
+        var header, JSCompiler_temp;
+        if (
+          (JSCompiler_temp =
+            resumableState && 0 < resumableState.remainingCapacity)
+        ) {
+          JSCompiler_temp =
+            "<" +
+            ("" + href).replace(
+              regexForHrefInLinkHeaderURLContext,
+              escapeHrefForLinkHeaderURLContextReplacer
+            ) +
+            ">; rel=preconnect";
+          if ("string" === typeof crossOrigin) {
+            var escapedCrossOrigin = ("" + crossOrigin).replace(
+              regexForLinkHeaderQuotedParamValueContext,
+              escapeStringForLinkHeaderQuotedParamValueContextReplacer
+            );
+            JSCompiler_temp += '; crossorigin="' + escapedCrossOrigin + '"';
+          }
+          JSCompiler_temp =
+            ((header = JSCompiler_temp),
+            0 <= (resumableState.remainingCapacity -= header.length + 2));
+        }
+        JSCompiler_temp
+          ? ((renderState.resets.connect[bucket][href] = null),
+            resumableState.preconnects && (resumableState.preconnects += ", "),
+            (resumableState.preconnects += header))
+          : ((bucket = []),
+            pushLinkImpl(bucket, {
+              rel: "preconnect",
+              href: href,
+              crossOrigin: crossOrigin
+            }),
+            renderState.preconnects.add(bucket));
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.C(href, crossOrigin);
+}
+function preload(href, as, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (as && href) {
+      switch (as) {
+        case "image":
+          if (options) {
+            var imageSrcSet = options.imageSrcSet;
+            var imageSizes = options.imageSizes;
+            var fetchPriority = options.fetchPriority;
+          }
+          var key = imageSrcSet
+            ? imageSrcSet + "\n" + (imageSizes || "")
+            : href;
+          if (resumableState.imageResources.hasOwnProperty(key)) return;
+          resumableState.imageResources[key] = PRELOAD_NO_CREDS;
+          resumableState = renderState.headers;
+          var header;
+          resumableState &&
+          0 < resumableState.remainingCapacity &&
+          "string" !== typeof imageSrcSet &&
+          "high" === fetchPriority &&
+          ((header = getPreloadAsHeader(href, as, options)),
+          0 <= (resumableState.remainingCapacity -= header.length + 2))
+            ? ((renderState.resets.image[key] = PRELOAD_NO_CREDS),
+              resumableState.highImagePreloads &&
+                (resumableState.highImagePreloads += ", "),
+              (resumableState.highImagePreloads += header))
+            : ((resumableState = []),
+              pushLinkImpl(
+                resumableState,
+                assign(
+                  { rel: "preload", href: imageSrcSet ? void 0 : href, as: as },
+                  options
+                )
+              ),
+              "high" === fetchPriority
+                ? renderState.highImagePreloads.add(resumableState)
+                : (renderState.bulkPreloads.add(resumableState),
+                  renderState.preloads.images.set(key, resumableState)));
+          break;
+        case "style":
+          if (resumableState.styleResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.styleResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.stylesheets.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          break;
+        case "script":
+          if (resumableState.scriptResources.hasOwnProperty(href)) return;
+          imageSrcSet = [];
+          renderState.preloads.scripts.set(href, imageSrcSet);
+          renderState.bulkPreloads.add(imageSrcSet);
+          pushLinkImpl(
+            imageSrcSet,
+            assign({ rel: "preload", href: href, as: as }, options)
+          );
+          resumableState.scriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          break;
+        default:
+          if (resumableState.unknownResources.hasOwnProperty(as)) {
+            if (
+              ((imageSrcSet = resumableState.unknownResources[as]),
+              imageSrcSet.hasOwnProperty(href))
+            )
+              return;
+          } else
+            (imageSrcSet = {}),
+              (resumableState.unknownResources[as] = imageSrcSet);
+          imageSrcSet[href] = PRELOAD_NO_CREDS;
+          if (
+            (resumableState = renderState.headers) &&
+            0 < resumableState.remainingCapacity &&
+            "font" === as &&
+            ((key = getPreloadAsHeader(href, as, options)),
+            0 <= (resumableState.remainingCapacity -= key.length + 2))
+          )
+            (renderState.resets.font[href] = PRELOAD_NO_CREDS),
+              resumableState.fontPreloads &&
+                (resumableState.fontPreloads += ", "),
+              (resumableState.fontPreloads += key);
+          else
+            switch (
+              ((resumableState = []),
+              (href = assign({ rel: "preload", href: href, as: as }, options)),
+              pushLinkImpl(resumableState, href),
+              as)
+            ) {
+              case "font":
+                renderState.fontPreloads.add(resumableState);
+                break;
+              default:
+                renderState.bulkPreloads.add(resumableState);
+            }
+      }
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.L(href, as, options);
+}
+function preloadModule(href, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      var as =
+        options && "string" === typeof options.as ? options.as : "script";
+      switch (as) {
+        case "script":
+          if (resumableState.moduleScriptResources.hasOwnProperty(href)) return;
+          as = [];
+          resumableState.moduleScriptResources[href] =
+            !options ||
+            ("string" !== typeof options.crossOrigin &&
+              "string" !== typeof options.integrity)
+              ? PRELOAD_NO_CREDS
+              : [options.crossOrigin, options.integrity];
+          renderState.preloads.moduleScripts.set(href, as);
+          break;
+        default:
+          if (resumableState.moduleUnknownResources.hasOwnProperty(as)) {
+            var resources = resumableState.unknownResources[as];
+            if (resources.hasOwnProperty(href)) return;
+          } else
+            (resources = {}),
+              (resumableState.moduleUnknownResources[as] = resources);
+          as = [];
+          resources[href] = PRELOAD_NO_CREDS;
+      }
+      pushLinkImpl(as, assign({ rel: "modulepreload", href: href }, options));
+      renderState.bulkPreloads.add(as);
+      enqueueFlush(request);
+    }
+  } else previousDispatcher.m(href, options);
+}
+function preinitStyle(href, precedence, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (href) {
+      precedence = precedence || "default";
+      var styleQueue = renderState.styles.get(precedence),
+        resourceState = resumableState.styleResources.hasOwnProperty(href)
+          ? resumableState.styleResources[href]
+          : void 0;
+      null !== resourceState &&
+        ((resumableState.styleResources[href] = null),
+        styleQueue ||
+          ((styleQueue = {
+            precedence: escapeTextForBrowser(precedence),
+            rules: [],
+            hrefs: [],
+            sheets: new Map()
+          }),
+          renderState.styles.set(precedence, styleQueue)),
+        (precedence = {
+          state: 0,
+          props: assign(
+            { rel: "stylesheet", href: href, "data-precedence": precedence },
+            options
+          )
+        }),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(precedence.props, resourceState),
+          (renderState = renderState.preloads.stylesheets.get(href)) &&
+          0 < renderState.length
+            ? (renderState.length = 0)
+            : (precedence.state = 1)),
+        styleQueue.sheets.set(href, precedence),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.S(href, precedence, options);
+}
+function preinitScript(src, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.scriptResources.hasOwnProperty(src)
+        ? resumableState.scriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.scriptResources[src] = null),
+        (options = assign({ src: src, async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.scripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.X(src, options);
+}
+function preinitModuleScript(src, options) {
+  var request = resolveRequest();
+  if (request) {
+    var resumableState = request.resumableState,
+      renderState = request.renderState;
+    if (src) {
+      var resourceState = resumableState.moduleScriptResources.hasOwnProperty(
+        src
+      )
+        ? resumableState.moduleScriptResources[src]
+        : void 0;
+      null !== resourceState &&
+        ((resumableState.moduleScriptResources[src] = null),
+        (options = assign({ src: src, type: "module", async: !0 }, options)),
+        resourceState &&
+          (2 === resourceState.length &&
+            adoptPreloadCredentials(options, resourceState),
+          (src = renderState.preloads.moduleScripts.get(src))) &&
+          (src.length = 0),
+        (src = []),
+        renderState.scripts.add(src),
+        pushScriptImpl(src, options),
+        enqueueFlush(request));
+    }
+  } else previousDispatcher.M(src, options);
+}
+function adoptPreloadCredentials(target, preloadState) {
+  null == target.crossOrigin && (target.crossOrigin = preloadState[0]);
+  null == target.integrity && (target.integrity = preloadState[1]);
+}
+function getPreloadAsHeader(href, as, params) {
+  href = ("" + href).replace(
+    regexForHrefInLinkHeaderURLContext,
+    escapeHrefForLinkHeaderURLContextReplacer
+  );
+  as = ("" + as).replace(
+    regexForLinkHeaderQuotedParamValueContext,
+    escapeStringForLinkHeaderQuotedParamValueContextReplacer
+  );
+  as = "<" + href + '>; rel=preload; as="' + as + '"';
+  for (var paramName in params)
+    hasOwnProperty.call(params, paramName) &&
+      ((href = params[paramName]),
+      "string" === typeof href &&
+        (as +=
+          "; " +
+          paramName.toLowerCase() +
+          '="' +
+          ("" + href).replace(
+            regexForLinkHeaderQuotedParamValueContext,
+            escapeStringForLinkHeaderQuotedParamValueContextReplacer
+          ) +
+          '"'));
+  return as;
+}
+var regexForHrefInLinkHeaderURLContext = /[<>\r\n]/g;
+function escapeHrefForLinkHeaderURLContextReplacer(match) {
+  switch (match) {
+    case "<":
+      return "%3C";
+    case ">":
+      return "%3E";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeLinkHrefForHeaderContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+var regexForLinkHeaderQuotedParamValueContext = /["';,\r\n]/g;
+function escapeStringForLinkHeaderQuotedParamValueContextReplacer(match) {
+  switch (match) {
+    case '"':
+      return "%22";
+    case "'":
+      return "%27";
+    case ";":
+      return "%3B";
+    case ",":
+      return "%2C";
+    case "\n":
+      return "%0A";
+    case "\r":
+      return "%0D";
+    default:
+      throw Error(
+        "escapeStringForLinkHeaderQuotedParamValueContextReplacer encountered a match it does not know how to replace. this means the match regex and the replacement characters are no longer in sync. This is a bug in React"
+      );
+  }
+}
+function hoistStyleQueueDependency(styleQueue) {
+  this.styles.add(styleQueue);
+}
+function hoistStylesheetDependency(stylesheet) {
+  this.stylesheets.add(stylesheet);
+}
+var bind = Function.prototype.bind,
+  requestStorage = new async_hooks.AsyncLocalStorage(),
+  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function getComponentNameFromType(type) {
+  if (null == type) return null;
+  if ("function" === typeof type)
+    return type.$$typeof === REACT_CLIENT_REFERENCE
+      ? null
+      : type.displayName || type.name || null;
+  if ("string" === typeof type) return type;
+  switch (type) {
+    case REACT_FRAGMENT_TYPE:
+      return "Fragment";
+    case REACT_PROFILER_TYPE:
+      return "Profiler";
+    case REACT_STRICT_MODE_TYPE:
+      return "StrictMode";
+    case REACT_SUSPENSE_TYPE:
+      return "Suspense";
+    case REACT_SUSPENSE_LIST_TYPE:
+      return "SuspenseList";
+    case REACT_ACTIVITY_TYPE:
+      return "Activity";
+  }
+  if ("object" === typeof type)
+    switch (type.$$typeof) {
+      case REACT_PORTAL_TYPE:
+        return "Portal";
+      case REACT_CONTEXT_TYPE:
+        return (type.displayName || "Context") + ".Provider";
+      case REACT_CONSUMER_TYPE:
+        return (type._context.displayName || "Context") + ".Consumer";
+      case REACT_FORWARD_REF_TYPE:
+        var innerType = type.render;
+        type = type.displayName;
+        type ||
+          ((type = innerType.displayName || innerType.name || ""),
+          (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+        return type;
+      case REACT_MEMO_TYPE:
+        return (
+          (innerType = type.displayName || null),
+          null !== innerType
+            ? innerType
+            : getComponentNameFromType(type.type) || "Memo"
+        );
+      case REACT_LAZY_TYPE:
+        innerType = type._payload;
+        type = type._init;
+        try {
+          return getComponentNameFromType(type(innerType));
+        } catch (x) {}
+    }
+  return null;
+}
+var emptyContextObject = {},
+  currentActiveSnapshot = null;
+function popToNearestCommonAncestor(prev, next) {
+  if (prev !== next) {
+    prev.context._currentValue = prev.parentValue;
+    prev = prev.parent;
+    var parentNext = next.parent;
+    if (null === prev) {
+      if (null !== parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+    } else {
+      if (null === parentNext)
+        throw Error(
+          "The stacks must reach the root at the same time. This is a bug in React."
+        );
+      popToNearestCommonAncestor(prev, parentNext);
+    }
+    next.context._currentValue = next.value;
+  }
+}
+function popAllPrevious(prev) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  null !== prev && popAllPrevious(prev);
+}
+function pushAllNext(next) {
+  var parentNext = next.parent;
+  null !== parentNext && pushAllNext(parentNext);
+  next.context._currentValue = next.value;
+}
+function popPreviousToCommonLevel(prev, next) {
+  prev.context._currentValue = prev.parentValue;
+  prev = prev.parent;
+  if (null === prev)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === next.depth
+    ? popToNearestCommonAncestor(prev, next)
+    : popPreviousToCommonLevel(prev, next);
+}
+function popNextToCommonLevel(prev, next) {
+  var parentNext = next.parent;
+  if (null === parentNext)
+    throw Error(
+      "The depth must equal at least at zero before reaching the root. This is a bug in React."
+    );
+  prev.depth === parentNext.depth
+    ? popToNearestCommonAncestor(prev, parentNext)
+    : popNextToCommonLevel(prev, parentNext);
+  next.context._currentValue = next.value;
+}
+function switchContext(newSnapshot) {
+  var prev = currentActiveSnapshot;
+  prev !== newSnapshot &&
+    (null === prev
+      ? pushAllNext(newSnapshot)
+      : null === newSnapshot
+        ? popAllPrevious(prev)
+        : prev.depth === newSnapshot.depth
+          ? popToNearestCommonAncestor(prev, newSnapshot)
+          : prev.depth > newSnapshot.depth
+            ? popPreviousToCommonLevel(prev, newSnapshot)
+            : popNextToCommonLevel(prev, newSnapshot),
+    (currentActiveSnapshot = newSnapshot));
+}
+var classComponentUpdater = {
+    enqueueSetState: function (inst, payload) {
+      inst = inst._reactInternals;
+      null !== inst.queue && inst.queue.push(payload);
+    },
+    enqueueReplaceState: function (inst, payload) {
+      inst = inst._reactInternals;
+      inst.replace = !0;
+      inst.queue = [payload];
+    },
+    enqueueForceUpdate: function () {}
+  },
+  emptyTreeContext = { id: 1, overflow: "" };
+function pushTreeContext(baseContext, totalChildren, index) {
+  var baseIdWithLeadingBit = baseContext.id;
+  baseContext = baseContext.overflow;
+  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;
+  baseIdWithLeadingBit &= ~(1 << baseLength);
+  index += 1;
+  var length = 32 - clz32(totalChildren) + baseLength;
+  if (30 < length) {
+    var numberOfOverflowBits = baseLength - (baseLength % 5);
+    length = (
+      baseIdWithLeadingBit &
+      ((1 << numberOfOverflowBits) - 1)
+    ).toString(32);
+    baseIdWithLeadingBit >>= numberOfOverflowBits;
+    baseLength -= numberOfOverflowBits;
+    return {
+      id:
+        (1 << (32 - clz32(totalChildren) + baseLength)) |
+        (index << baseLength) |
+        baseIdWithLeadingBit,
+      overflow: length + baseContext
+    };
+  }
+  return {
+    id: (1 << length) | (index << baseLength) | baseIdWithLeadingBit,
+    overflow: baseContext
+  };
+}
+var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,
+  log = Math.log,
+  LN2 = Math.LN2;
+function clz32Fallback(x) {
+  x >>>= 0;
+  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;
+}
+var SuspenseException = Error(
+  "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."
+);
+function noop$2() {}
+function trackUsedThenable(thenableState, thenable, index) {
+  index = thenableState[index];
+  void 0 === index
+    ? thenableState.push(thenable)
+    : index !== thenable && (thenable.then(noop$2, noop$2), (thenable = index));
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw thenable.reason;
+    default:
+      "string" === typeof thenable.status
+        ? thenable.then(noop$2, noop$2)
+        : ((thenableState = thenable),
+          (thenableState.status = "pending"),
+          thenableState.then(
+            function (fulfilledValue) {
+              if ("pending" === thenable.status) {
+                var fulfilledThenable = thenable;
+                fulfilledThenable.status = "fulfilled";
+                fulfilledThenable.value = fulfilledValue;
+              }
+            },
+            function (error) {
+              if ("pending" === thenable.status) {
+                var rejectedThenable = thenable;
+                rejectedThenable.status = "rejected";
+                rejectedThenable.reason = error;
+              }
+            }
+          ));
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+      }
+      suspendedThenable = thenable;
+      throw SuspenseException;
+  }
+}
+var suspendedThenable = null;
+function getSuspendedThenable() {
+  if (null === suspendedThenable)
+    throw Error(
+      "Expected a suspended thenable. This is a bug in React. Please file an issue."
+    );
+  var thenable = suspendedThenable;
+  suspendedThenable = null;
+  return thenable;
+}
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  currentlyRenderingComponent = null,
+  currentlyRenderingTask = null,
+  currentlyRenderingRequest = null,
+  currentlyRenderingKeyPath = null,
+  firstWorkInProgressHook = null,
+  workInProgressHook = null,
+  isReRender = !1,
+  didScheduleRenderPhaseUpdate = !1,
+  localIdCounter = 0,
+  actionStateCounter = 0,
+  actionStateMatchingIndex = -1,
+  thenableIndexCounter = 0,
+  thenableState = null,
+  renderPhaseUpdates = null,
+  numberOfReRenders = 0;
+function resolveCurrentlyRenderingComponent() {
+  if (null === currentlyRenderingComponent)
+    throw Error(
+      "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+    );
+  return currentlyRenderingComponent;
+}
+function createHook() {
+  if (0 < numberOfReRenders)
+    throw Error("Rendered more hooks than during the previous render");
+  return { memoizedState: null, queue: null, next: null };
+}
+function createWorkInProgressHook() {
+  null === workInProgressHook
+    ? null === firstWorkInProgressHook
+      ? ((isReRender = !1),
+        (firstWorkInProgressHook = workInProgressHook = createHook()))
+      : ((isReRender = !0), (workInProgressHook = firstWorkInProgressHook))
+    : null === workInProgressHook.next
+      ? ((isReRender = !1),
+        (workInProgressHook = workInProgressHook.next = createHook()))
+      : ((isReRender = !0), (workInProgressHook = workInProgressHook.next));
+  return workInProgressHook;
+}
+function getThenableStateAfterSuspending() {
+  var state = thenableState;
+  thenableState = null;
+  return state;
+}
+function resetHooksState() {
+  currentlyRenderingKeyPath =
+    currentlyRenderingRequest =
+    currentlyRenderingTask =
+    currentlyRenderingComponent =
+      null;
+  didScheduleRenderPhaseUpdate = !1;
+  firstWorkInProgressHook = null;
+  numberOfReRenders = 0;
+  workInProgressHook = renderPhaseUpdates = null;
+}
+function basicStateReducer(state, action) {
+  return "function" === typeof action ? action(state) : action;
+}
+function useReducer(reducer, initialArg, init) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  if (isReRender) {
+    var queue = workInProgressHook.queue;
+    initialArg = queue.dispatch;
+    if (
+      null !== renderPhaseUpdates &&
+      ((init = renderPhaseUpdates.get(queue)), void 0 !== init)
+    ) {
+      renderPhaseUpdates.delete(queue);
+      queue = workInProgressHook.memoizedState;
+      do (queue = reducer(queue, init.action)), (init = init.next);
+      while (null !== init);
+      workInProgressHook.memoizedState = queue;
+      return [queue, initialArg];
+    }
+    return [workInProgressHook.memoizedState, initialArg];
+  }
+  reducer =
+    reducer === basicStateReducer
+      ? "function" === typeof initialArg
+        ? initialArg()
+        : initialArg
+      : void 0 !== init
+        ? init(initialArg)
+        : initialArg;
+  workInProgressHook.memoizedState = reducer;
+  reducer = workInProgressHook.queue = { last: null, dispatch: null };
+  reducer = reducer.dispatch = dispatchAction.bind(
+    null,
+    currentlyRenderingComponent,
+    reducer
+  );
+  return [workInProgressHook.memoizedState, reducer];
+}
+function useMemo(nextCreate, deps) {
+  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+  workInProgressHook = createWorkInProgressHook();
+  deps = void 0 === deps ? null : deps;
+  if (null !== workInProgressHook) {
+    var prevState = workInProgressHook.memoizedState;
+    if (null !== prevState && null !== deps) {
+      var prevDeps = prevState[1];
+      a: if (null === prevDeps) prevDeps = !1;
+      else {
+        for (var i = 0; i < prevDeps.length && i < deps.length; i++)
+          if (!objectIs(deps[i], prevDeps[i])) {
+            prevDeps = !1;
+            break a;
+          }
+        prevDeps = !0;
+      }
+      if (prevDeps) return prevState[0];
+    }
+  }
+  nextCreate = nextCreate();
+  workInProgressHook.memoizedState = [nextCreate, deps];
+  return nextCreate;
+}
+function dispatchAction(componentIdentity, queue, action) {
+  if (25 <= numberOfReRenders)
+    throw Error(
+      "Too many re-renders. React limits the number of renders to prevent an infinite loop."
+    );
+  if (componentIdentity === currentlyRenderingComponent)
+    if (
+      ((didScheduleRenderPhaseUpdate = !0),
+      (componentIdentity = { action: action, next: null }),
+      null === renderPhaseUpdates && (renderPhaseUpdates = new Map()),
+      (action = renderPhaseUpdates.get(queue)),
+      void 0 === action)
+    )
+      renderPhaseUpdates.set(queue, componentIdentity);
+    else {
+      for (queue = action; null !== queue.next; ) queue = queue.next;
+      queue.next = componentIdentity;
+    }
+}
+function unsupportedStartTransition() {
+  throw Error("startTransition cannot be called during server rendering.");
+}
+function unsupportedSetOptimisticState() {
+  throw Error("Cannot update optimistic state while rendering.");
+}
+function createPostbackActionStateKey(permalink, componentKeyPath, hookIndex) {
+  if (void 0 !== permalink) return "p" + permalink;
+  permalink = JSON.stringify([componentKeyPath, null, hookIndex]);
+  componentKeyPath = crypto.createHash("md5");
+  componentKeyPath.update(permalink);
+  return "k" + componentKeyPath.digest("hex");
+}
+function useActionState(action, initialState, permalink) {
+  resolveCurrentlyRenderingComponent();
+  var actionStateHookIndex = actionStateCounter++,
+    request = currentlyRenderingRequest;
+  if ("function" === typeof action.$$FORM_ACTION) {
+    var nextPostbackStateKey = null,
+      componentKeyPath = currentlyRenderingKeyPath;
+    request = request.formState;
+    var isSignatureEqual = action.$$IS_SIGNATURE_EQUAL;
+    if (null !== request && "function" === typeof isSignatureEqual) {
+      var postbackKey = request[1];
+      isSignatureEqual.call(action, request[2], request[3]) &&
+        ((nextPostbackStateKey = createPostbackActionStateKey(
+          permalink,
+          componentKeyPath,
+          actionStateHookIndex
+        )),
+        postbackKey === nextPostbackStateKey &&
+          ((actionStateMatchingIndex = actionStateHookIndex),
+          (initialState = request[0])));
+    }
+    var boundAction = action.bind(null, initialState);
+    action = function (payload) {
+      boundAction(payload);
+    };
+    "function" === typeof boundAction.$$FORM_ACTION &&
+      (action.$$FORM_ACTION = function (prefix) {
+        prefix = boundAction.$$FORM_ACTION(prefix);
+        void 0 !== permalink &&
+          ((permalink += ""), (prefix.action = permalink));
+        var formData = prefix.data;
+        formData &&
+          (null === nextPostbackStateKey &&
+            (nextPostbackStateKey = createPostbackActionStateKey(
+              permalink,
+              componentKeyPath,
+              actionStateHookIndex
+            )),
+          formData.append("$ACTION_KEY", nextPostbackStateKey));
+        return prefix;
+      });
+    return [initialState, action, !1];
+  }
+  var boundAction$22 = action.bind(null, initialState);
+  return [
+    initialState,
+    function (payload) {
+      boundAction$22(payload);
+    },
+    !1
+  ];
+}
+function unwrapThenable(thenable) {
+  var index = thenableIndexCounter;
+  thenableIndexCounter += 1;
+  null === thenableState && (thenableState = []);
+  return trackUsedThenable(thenableState, thenable, index);
+}
+function unsupportedRefresh() {
+  throw Error("Cache cannot be refreshed during server rendering.");
+}
+function noop$1() {}
+var HooksDispatcher = {
+    readContext: function (context) {
+      return context._currentValue;
+    },
+    use: function (usable) {
+      if (null !== usable && "object" === typeof usable) {
+        if ("function" === typeof usable.then) return unwrapThenable(usable);
+        if (usable.$$typeof === REACT_CONTEXT_TYPE) return usable._currentValue;
+      }
+      throw Error("An unsupported type was passed to use(): " + String(usable));
+    },
+    useContext: function (context) {
+      resolveCurrentlyRenderingComponent();
+      return context._currentValue;
+    },
+    useMemo: useMemo,
+    useReducer: useReducer,
+    useRef: function (initialValue) {
+      currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
+      workInProgressHook = createWorkInProgressHook();
+      var previousRef = workInProgressHook.memoizedState;
+      return null === previousRef
+        ? ((initialValue = { current: initialValue }),
+          (workInProgressHook.memoizedState = initialValue))
+        : previousRef;
+    },
+    useState: function (initialState) {
+      return useReducer(basicStateReducer, initialState);
+    },
+    useInsertionEffect: noop$1,
+    useLayoutEffect: noop$1,
+    useCallback: function (callback, deps) {
+      return useMemo(function () {
+        return callback;
+      }, deps);
+    },
+    useImperativeHandle: noop$1,
+    useEffect: noop$1,
+    useDebugValue: noop$1,
+    useDeferredValue: function (value, initialValue) {
+      resolveCurrentlyRenderingComponent();
+      return void 0 !== initialValue ? initialValue : value;
+    },
+    useTransition: function () {
+      resolveCurrentlyRenderingComponent();
+      return [!1, unsupportedStartTransition];
+    },
+    useId: function () {
+      var JSCompiler_inline_result = currentlyRenderingTask.treeContext;
+      var overflow = JSCompiler_inline_result.overflow;
+      JSCompiler_inline_result = JSCompiler_inline_result.id;
+      JSCompiler_inline_result =
+        (
+          JSCompiler_inline_result &
+          ~(1 << (32 - clz32(JSCompiler_inline_result) - 1))
+        ).toString(32) + overflow;
+      var resumableState = currentResumableState;
+      if (null === resumableState)
+        throw Error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component."
+        );
+      overflow = localIdCounter++;
+      JSCompiler_inline_result =
+        "\u00ab" + resumableState.idPrefix + "R" + JSCompiler_inline_result;
+      0 < overflow && (JSCompiler_inline_result += "H" + overflow.toString(32));
+      return JSCompiler_inline_result + "\u00bb";
+    },
+    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
+      if (void 0 === getServerSnapshot)
+        throw Error(
+          "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."
+        );
+      return getServerSnapshot();
+    },
+    useOptimistic: function (passthrough) {
+      resolveCurrentlyRenderingComponent();
+      return [passthrough, unsupportedSetOptimisticState];
+    },
+    useActionState: useActionState,
+    useFormState: useActionState,
+    useHostTransitionStatus: function () {
+      resolveCurrentlyRenderingComponent();
+      return sharedNotPendingObject;
+    },
+    useMemoCache: function (size) {
+      for (var data = Array(size), i = 0; i < size; i++)
+        data[i] = REACT_MEMO_CACHE_SENTINEL;
+      return data;
+    },
+    useCacheRefresh: function () {
+      return unsupportedRefresh;
+    }
+  },
+  currentResumableState = null,
+  DefaultAsyncDispatcher = {
+    getCacheForType: function () {
+      throw Error("Not implemented.");
+    }
+  };
+function prepareStackTrace(error, structuredStackTrace) {
+  error = (error.name || "Error") + ": " + (error.message || "");
+  for (var i = 0; i < structuredStackTrace.length; i++)
+    error += "\n    at " + structuredStackTrace[i].toString();
+  return error;
+}
+var prefix, suffix;
+function describeBuiltInComponentFrame(name) {
+  if (void 0 === prefix)
+    try {
+      throw Error();
+    } catch (x) {
+      var match = x.stack.trim().match(/\n( *(at )?)/);
+      prefix = (match && match[1]) || "";
+      suffix =
+        -1 < x.stack.indexOf("\n    at")
+          ? " (<anonymous>)"
+          : -1 < x.stack.indexOf("@")
+            ? "@unknown:0:0"
+            : "";
+    }
+  return "\n" + prefix + name + suffix;
+}
+var reentry = !1;
+function describeNativeComponentFrame(fn, construct) {
+  if (!fn || reentry) return "";
+  reentry = !0;
+  var previousPrepareStackTrace = Error.prepareStackTrace;
+  Error.prepareStackTrace = prepareStackTrace;
+  try {
+    var RunInRootFrame = {
+      DetermineComponentFrameRoot: function () {
+        try {
+          if (construct) {
+            var Fake = function () {
+              throw Error();
+            };
+            Object.defineProperty(Fake.prototype, "props", {
+              set: function () {
+                throw Error();
+              }
+            });
+            if ("object" === typeof Reflect && Reflect.construct) {
+              try {
+                Reflect.construct(Fake, []);
+              } catch (x) {
+                var control = x;
+              }
+              Reflect.construct(fn, [], Fake);
+            } else {
+              try {
+                Fake.call();
+              } catch (x$24) {
+                control = x$24;
+              }
+              fn.call(Fake.prototype);
+            }
+          } else {
+            try {
+              throw Error();
+            } catch (x$25) {
+              control = x$25;
+            }
+            (Fake = fn()) &&
+              "function" === typeof Fake.catch &&
+              Fake.catch(function () {});
+          }
+        } catch (sample) {
+          if (sample && control && "string" === typeof sample.stack)
+            return [sample.stack, control.stack];
+        }
+        return [null, null];
+      }
+    };
+    RunInRootFrame.DetermineComponentFrameRoot.displayName =
+      "DetermineComponentFrameRoot";
+    var namePropDescriptor = Object.getOwnPropertyDescriptor(
+      RunInRootFrame.DetermineComponentFrameRoot,
+      "name"
+    );
+    namePropDescriptor &&
+      namePropDescriptor.configurable &&
+      Object.defineProperty(
+        RunInRootFrame.DetermineComponentFrameRoot,
+        "name",
+        { value: "DetermineComponentFrameRoot" }
+      );
+    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),
+      sampleStack = _RunInRootFrame$Deter[0],
+      controlStack = _RunInRootFrame$Deter[1];
+    if (sampleStack && controlStack) {
+      var sampleLines = sampleStack.split("\n"),
+        controlLines = controlStack.split("\n");
+      for (
+        namePropDescriptor = RunInRootFrame = 0;
+        RunInRootFrame < sampleLines.length &&
+        !sampleLines[RunInRootFrame].includes("DetermineComponentFrameRoot");
+
+      )
+        RunInRootFrame++;
+      for (
+        ;
+        namePropDescriptor < controlLines.length &&
+        !controlLines[namePropDescriptor].includes(
+          "DetermineComponentFrameRoot"
+        );
+
+      )
+        namePropDescriptor++;
+      if (
+        RunInRootFrame === sampleLines.length ||
+        namePropDescriptor === controlLines.length
+      )
+        for (
+          RunInRootFrame = sampleLines.length - 1,
+            namePropDescriptor = controlLines.length - 1;
+          1 <= RunInRootFrame &&
+          0 <= namePropDescriptor &&
+          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];
+
+        )
+          namePropDescriptor--;
+      for (
+        ;
+        1 <= RunInRootFrame && 0 <= namePropDescriptor;
+        RunInRootFrame--, namePropDescriptor--
+      )
+        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {
+          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {
+            do
+              if (
+                (RunInRootFrame--,
+                namePropDescriptor--,
+                0 > namePropDescriptor ||
+                  sampleLines[RunInRootFrame] !==
+                    controlLines[namePropDescriptor])
+              ) {
+                var frame =
+                  "\n" +
+                  sampleLines[RunInRootFrame].replace(" at new ", " at ");
+                fn.displayName &&
+                  frame.includes("<anonymous>") &&
+                  (frame = frame.replace("<anonymous>", fn.displayName));
+                return frame;
+              }
+            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);
+          }
+          break;
+        }
+    }
+  } finally {
+    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);
+  }
+  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : "")
+    ? describeBuiltInComponentFrame(previousPrepareStackTrace)
+    : "";
+}
+function describeComponentStackByType(type) {
+  if ("string" === typeof type) return describeBuiltInComponentFrame(type);
+  if ("function" === typeof type)
+    return type.prototype && type.prototype.isReactComponent
+      ? describeNativeComponentFrame(type, !0)
+      : describeNativeComponentFrame(type, !1);
+  if ("object" === typeof type && null !== type) {
+    switch (type.$$typeof) {
+      case REACT_FORWARD_REF_TYPE:
+        return describeNativeComponentFrame(type.render, !1);
+      case REACT_MEMO_TYPE:
+        return describeNativeComponentFrame(type.type, !1);
+      case REACT_LAZY_TYPE:
+        var lazyComponent = type,
+          payload = lazyComponent._payload;
+        lazyComponent = lazyComponent._init;
+        try {
+          type = lazyComponent(payload);
+        } catch (x) {
+          return describeBuiltInComponentFrame("Lazy");
+        }
+        return describeComponentStackByType(type);
+    }
+    if ("string" === typeof type.name)
+      return (
+        (payload = type.env),
+        describeBuiltInComponentFrame(
+          type.name + (payload ? " [" + payload + "]" : "")
+        )
+      );
+  }
+  switch (type) {
+    case REACT_SUSPENSE_LIST_TYPE:
+      return describeBuiltInComponentFrame("SuspenseList");
+    case REACT_SUSPENSE_TYPE:
+      return describeBuiltInComponentFrame("Suspense");
+  }
+  return "";
+}
+function defaultErrorHandler(error) {
+  if (
+    "object" === typeof error &&
+    null !== error &&
+    "string" === typeof error.environmentName
+  ) {
+    var JSCompiler_inline_result = error.environmentName;
+    error = [error].slice(0);
+    "string" === typeof error[0]
+      ? error.splice(
+          0,
+          1,
+          "\u001b[0m\u001b[7m%c%s\u001b[0m%c " + error[0],
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        )
+      : error.splice(
+          0,
+          0,
+          "\u001b[0m\u001b[7m%c%s\u001b[0m%c ",
+          "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px",
+          " " + JSCompiler_inline_result + " ",
+          ""
+        );
+    error.unshift(console);
+    JSCompiler_inline_result = bind.apply(console.error, error);
+    JSCompiler_inline_result();
+  } else console.error(error);
+  return null;
+}
+function noop() {}
+function RequestInstance(
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  var abortSet = new Set();
+  this.destination = null;
+  this.flushScheduled = !1;
+  this.resumableState = resumableState;
+  this.renderState = renderState;
+  this.rootFormatContext = rootFormatContext;
+  this.progressiveChunkSize =
+    void 0 === progressiveChunkSize ? 12800 : progressiveChunkSize;
+  this.status = 10;
+  this.fatalError = null;
+  this.pendingRootTasks = this.allPendingTasks = this.nextSegmentId = 0;
+  this.completedPreambleSegments = this.completedRootSegment = null;
+  this.abortableTasks = abortSet;
+  this.pingedTasks = [];
+  this.clientRenderedBoundaries = [];
+  this.completedBoundaries = [];
+  this.partialBoundaries = [];
+  this.trackedPostpones = null;
+  this.onError = void 0 === onError ? defaultErrorHandler : onError;
+  this.onPostpone = void 0 === onPostpone ? noop : onPostpone;
+  this.onAllReady = void 0 === onAllReady ? noop : onAllReady;
+  this.onShellReady = void 0 === onShellReady ? noop : onShellReady;
+  this.onShellError = void 0 === onShellError ? noop : onShellError;
+  this.onFatalError = void 0 === onFatalError ? noop : onFatalError;
+  this.formState = void 0 === formState ? null : formState;
+}
+function createRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone,
+  formState
+) {
+  resumableState = new RequestInstance(
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    formState
+  );
+  renderState = createPendingSegment(
+    resumableState,
+    0,
+    null,
+    rootFormatContext,
+    !1,
+    !1
+  );
+  renderState.parentFlushed = !0;
+  children = createRenderTask(
+    resumableState,
+    null,
+    children,
+    -1,
+    null,
+    renderState,
+    null,
+    null,
+    resumableState.abortableTasks,
+    null,
+    rootFormatContext,
+    null,
+    emptyTreeContext,
+    null,
+    !1
+  );
+  pushComponentStack(children);
+  resumableState.pingedTasks.push(children);
+  return resumableState;
+}
+function createPrerenderRequest(
+  children,
+  resumableState,
+  renderState,
+  rootFormatContext,
+  progressiveChunkSize,
+  onError,
+  onAllReady,
+  onShellReady,
+  onShellError,
+  onFatalError,
+  onPostpone
+) {
+  children = createRequest(
+    children,
+    resumableState,
+    renderState,
+    rootFormatContext,
+    progressiveChunkSize,
+    onError,
+    onAllReady,
+    onShellReady,
+    onShellError,
+    onFatalError,
+    onPostpone,
+    void 0
+  );
+  children.trackedPostpones = {
+    workingMap: new Map(),
+    rootNodes: [],
+    rootSlots: null
+  };
+  return children;
+}
+var currentRequest = null;
+function resolveRequest() {
+  if (currentRequest) return currentRequest;
+  var store = requestStorage.getStore();
+  return store ? store : null;
+}
+function pingTask(request, task) {
+  request.pingedTasks.push(task);
+  1 === request.pingedTasks.length &&
+    ((request.flushScheduled = null !== request.destination),
+    null !== request.trackedPostpones || 10 === request.status
+      ? scheduleMicrotask(function () {
+          return performWork(request);
+        })
+      : setImmediate(function () {
+          return performWork(request);
+        }));
+}
+function createSuspenseBoundary(
+  request,
+  fallbackAbortableTasks,
+  contentPreamble,
+  fallbackPreamble
+) {
+  return {
+    status: 0,
+    rootSegmentID: -1,
+    parentFlushed: !1,
+    pendingTasks: 0,
+    completedSegments: [],
+    byteSize: 0,
+    fallbackAbortableTasks: fallbackAbortableTasks,
+    errorDigest: null,
+    contentState: createHoistableState(),
+    fallbackState: createHoistableState(),
+    contentPreamble: contentPreamble,
+    fallbackPreamble: fallbackPreamble,
+    trackedContentKeyPath: null,
+    trackedFallbackNode: null
+  };
+}
+function createRenderTask(
+  request,
+  thenableState,
+  node,
+  childIndex,
+  blockedBoundary,
+  blockedSegment,
+  blockedPreamble,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  var task = {
+    replay: null,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: blockedSegment,
+    blockedPreamble: blockedPreamble,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createReplayTask(
+  request,
+  thenableState,
+  replay,
+  node,
+  childIndex,
+  blockedBoundary,
+  hoistableState,
+  abortSet,
+  keyPath,
+  formatContext,
+  context,
+  treeContext,
+  componentStack,
+  isFallback
+) {
+  request.allPendingTasks++;
+  null === blockedBoundary
+    ? request.pendingRootTasks++
+    : blockedBoundary.pendingTasks++;
+  replay.pendingTasks++;
+  var task = {
+    replay: replay,
+    node: node,
+    childIndex: childIndex,
+    ping: function () {
+      return pingTask(request, task);
+    },
+    blockedBoundary: blockedBoundary,
+    blockedSegment: null,
+    blockedPreamble: null,
+    hoistableState: hoistableState,
+    abortSet: abortSet,
+    keyPath: keyPath,
+    formatContext: formatContext,
+    context: context,
+    treeContext: treeContext,
+    componentStack: componentStack,
+    thenableState: thenableState,
+    isFallback: isFallback
+  };
+  abortSet.add(task);
+  return task;
+}
+function createPendingSegment(
+  request,
+  index,
+  boundary,
+  parentFormatContext,
+  lastPushedText,
+  textEmbedded
+) {
+  return {
+    status: 0,
+    parentFlushed: !1,
+    id: -1,
+    index: index,
+    chunks: [],
+    children: [],
+    preambleChildren: [],
+    parentFormatContext: parentFormatContext,
+    boundary: boundary,
+    lastPushedText: lastPushedText,
+    textEmbedded: textEmbedded
+  };
+}
+function pushComponentStack(task) {
+  var node = task.node;
+  if ("object" === typeof node && null !== node)
+    switch (node.$$typeof) {
+      case REACT_ELEMENT_TYPE:
+        task.componentStack = { parent: task.componentStack, type: node.type };
+    }
+}
+function getThrownInfo(node$jscomp$0) {
+  var errorInfo = {};
+  node$jscomp$0 &&
+    Object.defineProperty(errorInfo, "componentStack", {
+      configurable: !0,
+      enumerable: !0,
+      get: function () {
+        try {
+          var info = "",
+            node = node$jscomp$0;
+          do
+            (info += describeComponentStackByType(node.type)),
+              (node = node.parent);
+          while (node);
+          var JSCompiler_inline_result = info;
+        } catch (x) {
+          JSCompiler_inline_result =
+            "\nError generating stack: " + x.message + "\n" + x.stack;
+        }
+        Object.defineProperty(errorInfo, "componentStack", {
+          value: JSCompiler_inline_result
+        });
+        return JSCompiler_inline_result;
+      }
+    });
+  return errorInfo;
+}
+function logRecoverableError(request, error, errorInfo) {
+  request = request.onError;
+  error = request(error, errorInfo);
+  if (null == error || "string" === typeof error) return error;
+}
+function fatalError(request, error) {
+  var onShellError = request.onShellError,
+    onFatalError = request.onFatalError;
+  onShellError(error);
+  onFatalError(error);
+  null !== request.destination
+    ? ((request.status = 14), request.destination.destroy(error))
+    : ((request.status = 13), (request.fatalError = error));
+}
+function renderWithHooks(request, task, keyPath, Component, props, secondArg) {
+  var prevThenableState = task.thenableState;
+  task.thenableState = null;
+  currentlyRenderingComponent = {};
+  currentlyRenderingTask = task;
+  currentlyRenderingRequest = request;
+  currentlyRenderingKeyPath = keyPath;
+  actionStateCounter = localIdCounter = 0;
+  actionStateMatchingIndex = -1;
+  thenableIndexCounter = 0;
+  thenableState = prevThenableState;
+  for (request = Component(props, secondArg); didScheduleRenderPhaseUpdate; )
+    (didScheduleRenderPhaseUpdate = !1),
+      (actionStateCounter = localIdCounter = 0),
+      (actionStateMatchingIndex = -1),
+      (thenableIndexCounter = 0),
+      (numberOfReRenders += 1),
+      (workInProgressHook = null),
+      (request = Component(props, secondArg));
+  resetHooksState();
+  return request;
+}
+function finishFunctionComponent(
+  request,
+  task,
+  keyPath,
+  children,
+  hasId,
+  actionStateCount,
+  actionStateMatchingIndex
+) {
+  var didEmitActionStateMarkers = !1;
+  if (0 !== actionStateCount && null !== request.formState) {
+    var segment = task.blockedSegment;
+    if (null !== segment) {
+      didEmitActionStateMarkers = !0;
+      segment = segment.chunks;
+      for (var i = 0; i < actionStateCount; i++)
+        i === actionStateMatchingIndex
+          ? segment.push(formStateMarkerIsMatching)
+          : segment.push(formStateMarkerIsNotMatching);
+    }
+  }
+  actionStateCount = task.keyPath;
+  task.keyPath = keyPath;
+  hasId
+    ? ((keyPath = task.treeContext),
+      (task.treeContext = pushTreeContext(keyPath, 1, 0)),
+      renderNode(request, task, children, -1),
+      (task.treeContext = keyPath))
+    : didEmitActionStateMarkers
+      ? renderNode(request, task, children, -1)
+      : renderNodeDestructive(request, task, children, -1);
+  task.keyPath = actionStateCount;
+}
+function renderElement(request, task, keyPath, type, props, ref) {
+  if ("function" === typeof type)
+    if (type.prototype && type.prototype.isReactComponent) {
+      var newProps = props;
+      if ("ref" in props) {
+        newProps = {};
+        for (var propName in props)
+          "ref" !== propName && (newProps[propName] = props[propName]);
+      }
+      var defaultProps = type.defaultProps;
+      if (defaultProps) {
+        newProps === props && (newProps = assign({}, newProps, props));
+        for (var propName$33 in defaultProps)
+          void 0 === newProps[propName$33] &&
+            (newProps[propName$33] = defaultProps[propName$33]);
+      }
+      props = newProps;
+      newProps = emptyContextObject;
+      defaultProps = type.contextType;
+      "object" === typeof defaultProps &&
+        null !== defaultProps &&
+        (newProps = defaultProps._currentValue);
+      newProps = new type(props, newProps);
+      var initialState = void 0 !== newProps.state ? newProps.state : null;
+      newProps.updater = classComponentUpdater;
+      newProps.props = props;
+      newProps.state = initialState;
+      defaultProps = { queue: [], replace: !1 };
+      newProps._reactInternals = defaultProps;
+      ref = type.contextType;
+      newProps.context =
+        "object" === typeof ref && null !== ref
+          ? ref._currentValue
+          : emptyContextObject;
+      ref = type.getDerivedStateFromProps;
+      "function" === typeof ref &&
+        ((ref = ref(props, initialState)),
+        (initialState =
+          null === ref || void 0 === ref
+            ? initialState
+            : assign({}, initialState, ref)),
+        (newProps.state = initialState));
+      if (
+        "function" !== typeof type.getDerivedStateFromProps &&
+        "function" !== typeof newProps.getSnapshotBeforeUpdate &&
+        ("function" === typeof newProps.UNSAFE_componentWillMount ||
+          "function" === typeof newProps.componentWillMount)
+      )
+        if (
+          ((type = newProps.state),
+          "function" === typeof newProps.componentWillMount &&
+            newProps.componentWillMount(),
+          "function" === typeof newProps.UNSAFE_componentWillMount &&
+            newProps.UNSAFE_componentWillMount(),
+          type !== newProps.state &&
+            classComponentUpdater.enqueueReplaceState(
+              newProps,
+              newProps.state,
+              null
+            ),
+          null !== defaultProps.queue && 0 < defaultProps.queue.length)
+        )
+          if (
+            ((type = defaultProps.queue),
+            (ref = defaultProps.replace),
+            (defaultProps.queue = null),
+            (defaultProps.replace = !1),
+            ref && 1 === type.length)
+          )
+            newProps.state = type[0];
+          else {
+            defaultProps = ref ? type[0] : newProps.state;
+            initialState = !0;
+            for (ref = ref ? 1 : 0; ref < type.length; ref++)
+              (propName$33 = type[ref]),
+                (propName$33 =
+                  "function" === typeof propName$33
+                    ? propName$33.call(newProps, defaultProps, props, void 0)
+                    : propName$33),
+                null != propName$33 &&
+                  (initialState
+                    ? ((initialState = !1),
+                      (defaultProps = assign({}, defaultProps, propName$33)))
+                    : assign(defaultProps, propName$33));
+            newProps.state = defaultProps;
+          }
+        else defaultProps.queue = null;
+      type = newProps.render();
+      if (12 === request.status) throw null;
+      props = task.keyPath;
+      task.keyPath = keyPath;
+      renderNodeDestructive(request, task, type, -1);
+      task.keyPath = props;
+    } else {
+      type = renderWithHooks(request, task, keyPath, type, props, void 0);
+      if (12 === request.status) throw null;
+      finishFunctionComponent(
+        request,
+        task,
+        keyPath,
+        type,
+        0 !== localIdCounter,
+        actionStateCounter,
+        actionStateMatchingIndex
+      );
+    }
+  else if ("string" === typeof type)
+    if (((newProps = task.blockedSegment), null === newProps))
+      (newProps = props.children),
+        (defaultProps = task.formatContext),
+        (initialState = task.keyPath),
+        (task.formatContext = getChildFormatContext(defaultProps, type, props)),
+        (task.keyPath = keyPath),
+        renderNode(request, task, newProps, -1),
+        (task.formatContext = defaultProps),
+        (task.keyPath = initialState);
+    else {
+      ref = pushStartInstance(
+        newProps.chunks,
+        type,
+        props,
+        request.resumableState,
+        request.renderState,
+        task.blockedPreamble,
+        task.hoistableState,
+        task.formatContext,
+        newProps.lastPushedText,
+        task.isFallback
+      );
+      newProps.lastPushedText = !1;
+      defaultProps = task.formatContext;
+      initialState = task.keyPath;
+      task.keyPath = keyPath;
+      3 ===
+      (task.formatContext = getChildFormatContext(defaultProps, type, props))
+        .insertionMode
+        ? ((keyPath = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          )),
+          newProps.preambleChildren.push(keyPath),
+          (keyPath = createRenderTask(
+            request,
+            null,
+            ref,
+            -1,
+            task.blockedBoundary,
+            keyPath,
+            task.blockedPreamble,
+            task.hoistableState,
+            request.abortableTasks,
+            task.keyPath,
+            task.formatContext,
+            task.context,
+            task.treeContext,
+            task.componentStack,
+            task.isFallback
+          )),
+          pushComponentStack(keyPath),
+          request.pingedTasks.push(keyPath))
+        : renderNode(request, task, ref, -1);
+      task.formatContext = defaultProps;
+      task.keyPath = initialState;
+      a: {
+        task = newProps.chunks;
+        request = request.resumableState;
+        switch (type) {
+          case "title":
+          case "style":
+          case "script":
+          case "area":
+          case "base":
+          case "br":
+          case "col":
+          case "embed":
+          case "hr":
+          case "img":
+          case "input":
+          case "keygen":
+          case "link":
+          case "meta":
+          case "param":
+          case "source":
+          case "track":
+          case "wbr":
+            break a;
+          case "body":
+            if (1 >= defaultProps.insertionMode) {
+              request.hasBody = !0;
+              break a;
+            }
+            break;
+          case "html":
+            if (0 === defaultProps.insertionMode) {
+              request.hasHtml = !0;
+              break a;
+            }
+            break;
+          case "head":
+            if (1 >= defaultProps.insertionMode) break a;
+        }
+        task.push(endChunkForTag(type));
+      }
+      newProps.lastPushedText = !1;
+    }
+  else {
+    switch (type) {
+      case REACT_LEGACY_HIDDEN_TYPE:
+      case REACT_STRICT_MODE_TYPE:
+      case REACT_PROFILER_TYPE:
+      case REACT_FRAGMENT_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_ACTIVITY_TYPE:
+        "hidden" !== props.mode &&
+          ((type = task.keyPath),
+          (task.keyPath = keyPath),
+          renderNodeDestructive(request, task, props.children, -1),
+          (task.keyPath = type));
+        return;
+      case REACT_SUSPENSE_LIST_TYPE:
+        type = task.keyPath;
+        task.keyPath = keyPath;
+        renderNodeDestructive(request, task, props.children, -1);
+        task.keyPath = type;
+        return;
+      case REACT_VIEW_TRANSITION_TYPE:
+      case REACT_SCOPE_TYPE:
+        throw Error("ReactDOMServer does not yet support scope components.");
+      case REACT_SUSPENSE_TYPE:
+        a: if (null !== task.replay) {
+          type = task.keyPath;
+          task.keyPath = keyPath;
+          keyPath = props.children;
+          try {
+            renderNode(request, task, keyPath, -1);
+          } finally {
+            task.keyPath = type;
+          }
+        } else {
+          type = task.keyPath;
+          var parentBoundary = task.blockedBoundary;
+          ref = task.blockedPreamble;
+          var parentHoistableState = task.hoistableState;
+          propName$33 = task.blockedSegment;
+          propName = props.fallback;
+          props = props.children;
+          var fallbackAbortSet = new Set();
+          var newBoundary =
+            2 > task.formatContext.insertionMode
+              ? createSuspenseBoundary(
+                  request,
+                  fallbackAbortSet,
+                  createPreambleState(),
+                  createPreambleState()
+                )
+              : createSuspenseBoundary(request, fallbackAbortSet, null, null);
+          null !== request.trackedPostpones &&
+            (newBoundary.trackedContentKeyPath = keyPath);
+          var boundarySegment = createPendingSegment(
+            request,
+            propName$33.chunks.length,
+            newBoundary,
+            task.formatContext,
+            !1,
+            !1
+          );
+          propName$33.children.push(boundarySegment);
+          propName$33.lastPushedText = !1;
+          var contentRootSegment = createPendingSegment(
+            request,
+            0,
+            null,
+            task.formatContext,
+            !1,
+            !1
+          );
+          contentRootSegment.parentFlushed = !0;
+          if (null !== request.trackedPostpones) {
+            newProps = [keyPath[0], "Suspense Fallback", keyPath[2]];
+            defaultProps = [newProps[1], newProps[2], [], null];
+            request.trackedPostpones.workingMap.set(newProps, defaultProps);
+            newBoundary.trackedFallbackNode = defaultProps;
+            task.blockedSegment = boundarySegment;
+            task.blockedPreamble = newBoundary.fallbackPreamble;
+            task.keyPath = newProps;
+            boundarySegment.status = 6;
+            try {
+              renderNode(request, task, propName, -1),
+                boundarySegment.lastPushedText &&
+                  boundarySegment.textEmbedded &&
+                  boundarySegment.chunks.push(textSeparator),
+                (boundarySegment.status = 1);
+            } catch (thrownValue) {
+              throw (
+                ((boundarySegment.status = 12 === request.status ? 3 : 4),
+                thrownValue)
+              );
+            } finally {
+              (task.blockedSegment = propName$33),
+                (task.blockedPreamble = ref),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              props,
+              -1,
+              newBoundary,
+              contentRootSegment,
+              newBoundary.contentPreamble,
+              newBoundary.contentState,
+              task.abortSet,
+              keyPath,
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              task.isFallback
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          } else {
+            task.blockedBoundary = newBoundary;
+            task.blockedPreamble = newBoundary.contentPreamble;
+            task.hoistableState = newBoundary.contentState;
+            task.blockedSegment = contentRootSegment;
+            task.keyPath = keyPath;
+            contentRootSegment.status = 6;
+            try {
+              if (
+                (renderNode(request, task, props, -1),
+                contentRootSegment.lastPushedText &&
+                  contentRootSegment.textEmbedded &&
+                  contentRootSegment.chunks.push(textSeparator),
+                (contentRootSegment.status = 1),
+                queueCompletedSegment(newBoundary, contentRootSegment),
+                0 === newBoundary.pendingTasks && 0 === newBoundary.status)
+              ) {
+                newBoundary.status = 1;
+                0 === request.pendingRootTasks &&
+                  task.blockedPreamble &&
+                  preparePreamble(request);
+                break a;
+              }
+            } catch (thrownValue$28) {
+              (newBoundary.status = 4),
+                12 === request.status
+                  ? ((contentRootSegment.status = 3),
+                    (newProps = request.fatalError))
+                  : ((contentRootSegment.status = 4),
+                    (newProps = thrownValue$28)),
+                (defaultProps = getThrownInfo(task.componentStack)),
+                (initialState = logRecoverableError(
+                  request,
+                  newProps,
+                  defaultProps
+                )),
+                (newBoundary.errorDigest = initialState),
+                untrackBoundary(request, newBoundary);
+            } finally {
+              (task.blockedBoundary = parentBoundary),
+                (task.blockedPreamble = ref),
+                (task.hoistableState = parentHoistableState),
+                (task.blockedSegment = propName$33),
+                (task.keyPath = type);
+            }
+            task = createRenderTask(
+              request,
+              null,
+              propName,
+              -1,
+              parentBoundary,
+              boundarySegment,
+              newBoundary.fallbackPreamble,
+              newBoundary.fallbackState,
+              fallbackAbortSet,
+              [keyPath[0], "Suspense Fallback", keyPath[2]],
+              task.formatContext,
+              task.context,
+              task.treeContext,
+              task.componentStack,
+              !0
+            );
+            pushComponentStack(task);
+            request.pingedTasks.push(task);
+          }
+        }
+        return;
+    }
+    if ("object" === typeof type && null !== type)
+      switch (type.$$typeof) {
+        case REACT_FORWARD_REF_TYPE:
+          if ("ref" in props)
+            for (newBoundary in ((newProps = {}), props))
+              "ref" !== newBoundary &&
+                (newProps[newBoundary] = props[newBoundary]);
+          else newProps = props;
+          type = renderWithHooks(
+            request,
+            task,
+            keyPath,
+            type.render,
+            newProps,
+            ref
+          );
+          finishFunctionComponent(
+            request,
+            task,
+            keyPath,
+            type,
+            0 !== localIdCounter,
+            actionStateCounter,
+            actionStateMatchingIndex
+          );
+          return;
+        case REACT_MEMO_TYPE:
+          renderElement(request, task, keyPath, type.type, props, ref);
+          return;
+        case REACT_PROVIDER_TYPE:
+        case REACT_CONTEXT_TYPE:
+          defaultProps = props.children;
+          newProps = task.keyPath;
+          props = props.value;
+          initialState = type._currentValue;
+          type._currentValue = props;
+          ref = currentActiveSnapshot;
+          currentActiveSnapshot = type = {
+            parent: ref,
+            depth: null === ref ? 0 : ref.depth + 1,
+            context: type,
+            parentValue: initialState,
+            value: props
+          };
+          task.context = type;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, defaultProps, -1);
+          request = currentActiveSnapshot;
+          if (null === request)
+            throw Error(
+              "Tried to pop a Context at the root of the app. This is a bug in React."
+            );
+          request.context._currentValue = request.parentValue;
+          request = currentActiveSnapshot = request.parent;
+          task.context = request;
+          task.keyPath = newProps;
+          return;
+        case REACT_CONSUMER_TYPE:
+          props = props.children;
+          type = props(type._context._currentValue);
+          props = task.keyPath;
+          task.keyPath = keyPath;
+          renderNodeDestructive(request, task, type, -1);
+          task.keyPath = props;
+          return;
+        case REACT_LAZY_TYPE:
+          newProps = type._init;
+          type = newProps(type._payload);
+          if (12 === request.status) throw null;
+          renderElement(request, task, keyPath, type, props, ref);
+          return;
+      }
+    throw Error(
+      "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " +
+        ((null == type ? type : typeof type) + ".")
+    );
+  }
+}
+function resumeNode(request, task, segmentId, node, childIndex) {
+  var prevReplay = task.replay,
+    blockedBoundary = task.blockedBoundary,
+    resumedSegment = createPendingSegment(
+      request,
+      0,
+      null,
+      task.formatContext,
+      !1,
+      !1
+    );
+  resumedSegment.id = segmentId;
+  resumedSegment.parentFlushed = !0;
+  try {
+    (task.replay = null),
+      (task.blockedSegment = resumedSegment),
+      renderNode(request, task, node, childIndex),
+      (resumedSegment.status = 1),
+      null === blockedBoundary
+        ? (request.completedRootSegment = resumedSegment)
+        : (queueCompletedSegment(blockedBoundary, resumedSegment),
+          blockedBoundary.parentFlushed &&
+            request.partialBoundaries.push(blockedBoundary));
+  } finally {
+    (task.replay = prevReplay), (task.blockedSegment = null);
+  }
+}
+function renderNodeDestructive(request, task, node, childIndex) {
+  null !== task.replay && "number" === typeof task.replay.slots
+    ? resumeNode(request, task, task.replay.slots, node, childIndex)
+    : ((task.node = node),
+      (task.childIndex = childIndex),
+      (node = task.componentStack),
+      pushComponentStack(task),
+      retryNode(request, task),
+      (task.componentStack = node));
+}
+function retryNode(request, task) {
+  var node = task.node,
+    childIndex = task.childIndex;
+  if (null !== node) {
+    if ("object" === typeof node) {
+      switch (node.$$typeof) {
+        case REACT_ELEMENT_TYPE:
+          var type = node.type,
+            key = node.key,
+            props = node.props;
+          node = props.ref;
+          var ref = void 0 !== node ? node : null,
+            name = getComponentNameFromType(type),
+            keyOrIndex =
+              null == key ? (-1 === childIndex ? 0 : childIndex) : key;
+          key = [task.keyPath, name, keyOrIndex];
+          if (null !== task.replay)
+            a: {
+              var replay = task.replay;
+              childIndex = replay.nodes;
+              for (node = 0; node < childIndex.length; node++) {
+                var node$jscomp$0 = childIndex[node];
+                if (keyOrIndex === node$jscomp$0[1]) {
+                  if (4 === node$jscomp$0.length) {
+                    if (null !== name && name !== node$jscomp$0[0])
+                      throw Error(
+                        "Expected the resume to render <" +
+                          node$jscomp$0[0] +
+                          "> in this slot but instead it rendered <" +
+                          name +
+                          ">. The tree doesn't match so React will fallback to client rendering."
+                      );
+                    var childNodes = node$jscomp$0[2];
+                    name = node$jscomp$0[3];
+                    keyOrIndex = task.node;
+                    task.replay = {
+                      nodes: childNodes,
+                      slots: name,
+                      pendingTasks: 1
+                    };
+                    try {
+                      renderElement(request, task, key, type, props, ref);
+                      if (
+                        1 === task.replay.pendingTasks &&
+                        0 < task.replay.nodes.length
+                      )
+                        throw Error(
+                          "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                        );
+                      task.replay.pendingTasks--;
+                    } catch (x) {
+                      if (
+                        "object" === typeof x &&
+                        null !== x &&
+                        (x === SuspenseException ||
+                          "function" === typeof x.then)
+                      )
+                        throw (
+                          (task.node === keyOrIndex && (task.replay = replay),
+                          x)
+                        );
+                      task.replay.pendingTasks--;
+                      props = getThrownInfo(task.componentStack);
+                      key = task.blockedBoundary;
+                      type = x;
+                      props = logRecoverableError(request, type, props);
+                      abortRemainingReplayNodes(
+                        request,
+                        key,
+                        childNodes,
+                        name,
+                        type,
+                        props
+                      );
+                    }
+                    task.replay = replay;
+                  } else {
+                    if (type !== REACT_SUSPENSE_TYPE)
+                      throw Error(
+                        "Expected the resume to render <Suspense> in this slot but instead it rendered <" +
+                          (getComponentNameFromType(type) || "Unknown") +
+                          ">. The tree doesn't match so React will fallback to client rendering."
+                      );
+                    b: {
+                      replay = void 0;
+                      type = node$jscomp$0[5];
+                      ref = node$jscomp$0[2];
+                      name = node$jscomp$0[3];
+                      keyOrIndex =
+                        null === node$jscomp$0[4] ? [] : node$jscomp$0[4][2];
+                      node$jscomp$0 =
+                        null === node$jscomp$0[4] ? null : node$jscomp$0[4][3];
+                      var prevKeyPath = task.keyPath,
+                        previousReplaySet = task.replay,
+                        parentBoundary = task.blockedBoundary,
+                        parentHoistableState = task.hoistableState,
+                        content = props.children,
+                        fallback = props.fallback,
+                        fallbackAbortSet = new Set();
+                      props =
+                        2 > task.formatContext.insertionMode
+                          ? createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              createPreambleState(),
+                              createPreambleState()
+                            )
+                          : createSuspenseBoundary(
+                              request,
+                              fallbackAbortSet,
+                              null,
+                              null
+                            );
+                      props.parentFlushed = !0;
+                      props.rootSegmentID = type;
+                      task.blockedBoundary = props;
+                      task.hoistableState = props.contentState;
+                      task.keyPath = key;
+                      task.replay = {
+                        nodes: ref,
+                        slots: name,
+                        pendingTasks: 1
+                      };
+                      try {
+                        renderNode(request, task, content, -1);
+                        if (
+                          1 === task.replay.pendingTasks &&
+                          0 < task.replay.nodes.length
+                        )
+                          throw Error(
+                            "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                          );
+                        task.replay.pendingTasks--;
+                        if (0 === props.pendingTasks && 0 === props.status) {
+                          props.status = 1;
+                          request.completedBoundaries.push(props);
+                          break b;
+                        }
+                      } catch (error) {
+                        (props.status = 4),
+                          (childNodes = getThrownInfo(task.componentStack)),
+                          (replay = logRecoverableError(
+                            request,
+                            error,
+                            childNodes
+                          )),
+                          (props.errorDigest = replay),
+                          task.replay.pendingTasks--,
+                          request.clientRenderedBoundaries.push(props);
+                      } finally {
+                        (task.blockedBoundary = parentBoundary),
+                          (task.hoistableState = parentHoistableState),
+                          (task.replay = previousReplaySet),
+                          (task.keyPath = prevKeyPath);
+                      }
+                      task = createReplayTask(
+                        request,
+                        null,
+                        {
+                          nodes: keyOrIndex,
+                          slots: node$jscomp$0,
+                          pendingTasks: 0
+                        },
+                        fallback,
+                        -1,
+                        parentBoundary,
+                        props.fallbackState,
+                        fallbackAbortSet,
+                        [key[0], "Suspense Fallback", key[2]],
+                        task.formatContext,
+                        task.context,
+                        task.treeContext,
+                        task.componentStack,
+                        !0
+                      );
+                      pushComponentStack(task);
+                      request.pingedTasks.push(task);
+                    }
+                  }
+                  childIndex.splice(node, 1);
+                  break a;
+                }
+              }
+            }
+          else renderElement(request, task, key, type, props, ref);
+          return;
+        case REACT_PORTAL_TYPE:
+          throw Error(
+            "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render."
+          );
+        case REACT_LAZY_TYPE:
+          childNodes = node._init;
+          node = childNodes(node._payload);
+          if (12 === request.status) throw null;
+          renderNodeDestructive(request, task, node, childIndex);
+          return;
+      }
+      if (isArrayImpl(node)) {
+        renderChildrenArray(request, task, node, childIndex);
+        return;
+      }
+      null === node || "object" !== typeof node
+        ? (childNodes = null)
+        : ((childNodes =
+            (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
+            node["@@iterator"]),
+          (childNodes = "function" === typeof childNodes ? childNodes : null));
+      if (childNodes && (childNodes = childNodes.call(node))) {
+        node = childNodes.next();
+        if (!node.done) {
+          props = [];
+          do props.push(node.value), (node = childNodes.next());
+          while (!node.done);
+          renderChildrenArray(request, task, props, childIndex);
+        }
+        return;
+      }
+      if ("function" === typeof node.then)
+        return (
+          (task.thenableState = null),
+          renderNodeDestructive(request, task, unwrapThenable(node), childIndex)
+        );
+      if (node.$$typeof === REACT_CONTEXT_TYPE)
+        return renderNodeDestructive(
+          request,
+          task,
+          node._currentValue,
+          childIndex
+        );
+      childIndex = Object.prototype.toString.call(node);
+      throw Error(
+        "Objects are not valid as a React child (found: " +
+          ("[object Object]" === childIndex
+            ? "object with keys {" + Object.keys(node).join(", ") + "}"
+            : childIndex) +
+          "). If you meant to render a collection of children, use an array instead."
+      );
+    }
+    if ("string" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+    else if ("number" === typeof node || "bigint" === typeof node)
+      (childIndex = task.blockedSegment),
+        null !== childIndex &&
+          (childIndex.lastPushedText = pushTextInstance(
+            childIndex.chunks,
+            "" + node,
+            request.renderState,
+            childIndex.lastPushedText
+          ));
+  }
+}
+function renderChildrenArray(request, task, children, childIndex) {
+  var prevKeyPath = task.keyPath;
+  if (
+    -1 !== childIndex &&
+    ((task.keyPath = [task.keyPath, "Fragment", childIndex]),
+    null !== task.replay)
+  ) {
+    for (
+      var replay = task.replay, replayNodes = replay.nodes, j = 0;
+      j < replayNodes.length;
+      j++
+    ) {
+      var node = replayNodes[j];
+      if (node[1] === childIndex) {
+        childIndex = node[2];
+        node = node[3];
+        task.replay = { nodes: childIndex, slots: node, pendingTasks: 1 };
+        try {
+          renderChildrenArray(request, task, children, -1);
+          if (1 === task.replay.pendingTasks && 0 < task.replay.nodes.length)
+            throw Error(
+              "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+            );
+          task.replay.pendingTasks--;
+        } catch (x) {
+          if (
+            "object" === typeof x &&
+            null !== x &&
+            (x === SuspenseException || "function" === typeof x.then)
+          )
+            throw x;
+          task.replay.pendingTasks--;
+          children = getThrownInfo(task.componentStack);
+          var boundary = task.blockedBoundary,
+            error = x;
+          children = logRecoverableError(request, error, children);
+          abortRemainingReplayNodes(
+            request,
+            boundary,
+            childIndex,
+            node,
+            error,
+            children
+          );
+        }
+        task.replay = replay;
+        replayNodes.splice(j, 1);
+        break;
+      }
+    }
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  replay = task.treeContext;
+  replayNodes = children.length;
+  if (
+    null !== task.replay &&
+    ((j = task.replay.slots), null !== j && "object" === typeof j)
+  ) {
+    for (childIndex = 0; childIndex < replayNodes; childIndex++)
+      (node = children[childIndex]),
+        (task.treeContext = pushTreeContext(replay, replayNodes, childIndex)),
+        (boundary = j[childIndex]),
+        "number" === typeof boundary
+          ? (resumeNode(request, task, boundary, node, childIndex),
+            delete j[childIndex])
+          : renderNode(request, task, node, childIndex);
+    task.treeContext = replay;
+    task.keyPath = prevKeyPath;
+    return;
+  }
+  for (j = 0; j < replayNodes; j++)
+    (childIndex = children[j]),
+      (task.treeContext = pushTreeContext(replay, replayNodes, j)),
+      renderNode(request, task, childIndex, j);
+  task.treeContext = replay;
+  task.keyPath = prevKeyPath;
+}
+function untrackBoundary(request, boundary) {
+  request = request.trackedPostpones;
+  null !== request &&
+    ((boundary = boundary.trackedContentKeyPath),
+    null !== boundary &&
+      ((boundary = request.workingMap.get(boundary)),
+      void 0 !== boundary &&
+        ((boundary.length = 4), (boundary[2] = []), (boundary[3] = null))));
+}
+function spawnNewSuspendedReplayTask(request, task, thenableState) {
+  return createReplayTask(
+    request,
+    thenableState,
+    task.replay,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function spawnNewSuspendedRenderTask(request, task, thenableState) {
+  var segment = task.blockedSegment,
+    newSegment = createPendingSegment(
+      request,
+      segment.chunks.length,
+      null,
+      task.formatContext,
+      segment.lastPushedText,
+      !0
+    );
+  segment.children.push(newSegment);
+  segment.lastPushedText = !1;
+  return createRenderTask(
+    request,
+    thenableState,
+    task.node,
+    task.childIndex,
+    task.blockedBoundary,
+    newSegment,
+    task.blockedPreamble,
+    task.hoistableState,
+    task.abortSet,
+    task.keyPath,
+    task.formatContext,
+    task.context,
+    task.treeContext,
+    task.componentStack,
+    task.isFallback
+  );
+}
+function renderNode(request, task, node, childIndex) {
+  var previousFormatContext = task.formatContext,
+    previousContext = task.context,
+    previousKeyPath = task.keyPath,
+    previousTreeContext = task.treeContext,
+    previousComponentStack = task.componentStack,
+    segment = task.blockedSegment;
+  if (null === segment)
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue) {
+      if (
+        (resetHooksState(),
+        (node =
+          thrownValue === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedReplayTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedReplayTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  else {
+    var childrenLength = segment.children.length,
+      chunkLength = segment.chunks.length;
+    try {
+      return renderNodeDestructive(request, task, node, childIndex);
+    } catch (thrownValue$48) {
+      if (
+        (resetHooksState(),
+        (segment.children.length = childrenLength),
+        (segment.chunks.length = chunkLength),
+        (node =
+          thrownValue$48 === SuspenseException
+            ? getSuspendedThenable()
+            : thrownValue$48),
+        "object" === typeof node && null !== node)
+      ) {
+        if ("function" === typeof node.then) {
+          childIndex = getThenableStateAfterSuspending();
+          request = spawnNewSuspendedRenderTask(request, task, childIndex).ping;
+          node.then(request, request);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+        if ("Maximum call stack size exceeded" === node.message) {
+          node = getThenableStateAfterSuspending();
+          node = spawnNewSuspendedRenderTask(request, task, node);
+          request.pingedTasks.push(node);
+          task.formatContext = previousFormatContext;
+          task.context = previousContext;
+          task.keyPath = previousKeyPath;
+          task.treeContext = previousTreeContext;
+          task.componentStack = previousComponentStack;
+          switchContext(previousContext);
+          return;
+        }
+      }
+    }
+  }
+  task.formatContext = previousFormatContext;
+  task.context = previousContext;
+  task.keyPath = previousKeyPath;
+  task.treeContext = previousTreeContext;
+  switchContext(previousContext);
+  throw node;
+}
+function abortTaskSoft(task) {
+  var boundary = task.blockedBoundary;
+  task = task.blockedSegment;
+  null !== task && ((task.status = 3), finishedTask(this, boundary, task));
+}
+function abortRemainingReplayNodes(
+  request$jscomp$0,
+  boundary,
+  nodes,
+  slots,
+  error,
+  errorDigest$jscomp$0
+) {
+  for (var i = 0; i < nodes.length; i++) {
+    var node = nodes[i];
+    if (4 === node.length)
+      abortRemainingReplayNodes(
+        request$jscomp$0,
+        boundary,
+        node[2],
+        node[3],
+        error,
+        errorDigest$jscomp$0
+      );
+    else {
+      node = node[5];
+      var request = request$jscomp$0,
+        errorDigest = errorDigest$jscomp$0,
+        resumedBoundary = createSuspenseBoundary(
+          request,
+          new Set(),
+          null,
+          null
+        );
+      resumedBoundary.parentFlushed = !0;
+      resumedBoundary.rootSegmentID = node;
+      resumedBoundary.status = 4;
+      resumedBoundary.errorDigest = errorDigest;
+      resumedBoundary.parentFlushed &&
+        request.clientRenderedBoundaries.push(resumedBoundary);
+    }
+  }
+  nodes.length = 0;
+  if (null !== slots) {
+    if (null === boundary)
+      throw Error(
+        "We should not have any resumable nodes in the shell. This is a bug in React."
+      );
+    4 !== boundary.status &&
+      ((boundary.status = 4),
+      (boundary.errorDigest = errorDigest$jscomp$0),
+      boundary.parentFlushed &&
+        request$jscomp$0.clientRenderedBoundaries.push(boundary));
+    if ("object" === typeof slots) for (var index in slots) delete slots[index];
+  }
+}
+function abortTask(task, request, error) {
+  var boundary = task.blockedBoundary,
+    segment = task.blockedSegment;
+  if (null !== segment) {
+    if (6 === segment.status) return;
+    segment.status = 3;
+  }
+  segment = getThrownInfo(task.componentStack);
+  if (null === boundary) {
+    if (13 !== request.status && 14 !== request.status) {
+      boundary = task.replay;
+      if (null === boundary) {
+        logRecoverableError(request, error, segment);
+        fatalError(request, error);
+        return;
+      }
+      boundary.pendingTasks--;
+      0 === boundary.pendingTasks &&
+        0 < boundary.nodes.length &&
+        ((task = logRecoverableError(request, error, segment)),
+        abortRemainingReplayNodes(
+          request,
+          null,
+          boundary.nodes,
+          boundary.slots,
+          error,
+          task
+        ));
+      request.pendingRootTasks--;
+      0 === request.pendingRootTasks && completeShell(request);
+    }
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        ((boundary.status = 4),
+        (task = logRecoverableError(request, error, segment)),
+        (boundary.status = 4),
+        (boundary.errorDigest = task),
+        untrackBoundary(request, boundary),
+        boundary.parentFlushed &&
+          request.clientRenderedBoundaries.push(boundary)),
+      boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
+        return abortTask(fallbackTask, request, error);
+      }),
+      boundary.fallbackAbortableTasks.clear();
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function safelyEmitEarlyPreloads(request, shellComplete) {
+  try {
+    var renderState = request.renderState,
+      onHeaders = renderState.onHeaders;
+    if (onHeaders) {
+      var headers = renderState.headers;
+      if (headers) {
+        renderState.headers = null;
+        var linkHeader = headers.preconnects;
+        headers.fontPreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.fontPreloads));
+        headers.highImagePreloads &&
+          (linkHeader && (linkHeader += ", "),
+          (linkHeader += headers.highImagePreloads));
+        if (!shellComplete) {
+          var queueIter = renderState.styles.values(),
+            queueStep = queueIter.next();
+          b: for (
+            ;
+            0 < headers.remainingCapacity && !queueStep.done;
+            queueStep = queueIter.next()
+          )
+            for (
+              var sheetIter = queueStep.value.sheets.values(),
+                sheetStep = sheetIter.next();
+              0 < headers.remainingCapacity && !sheetStep.done;
+              sheetStep = sheetIter.next()
+            ) {
+              var sheet = sheetStep.value,
+                props = sheet.props,
+                key = props.href,
+                props$jscomp$0 = sheet.props,
+                header = getPreloadAsHeader(props$jscomp$0.href, "style", {
+                  crossOrigin: props$jscomp$0.crossOrigin,
+                  integrity: props$jscomp$0.integrity,
+                  nonce: props$jscomp$0.nonce,
+                  type: props$jscomp$0.type,
+                  fetchPriority: props$jscomp$0.fetchPriority,
+                  referrerPolicy: props$jscomp$0.referrerPolicy,
+                  media: props$jscomp$0.media
+                });
+              if (0 <= (headers.remainingCapacity -= header.length + 2))
+                (renderState.resets.style[key] = PRELOAD_NO_CREDS),
+                  linkHeader && (linkHeader += ", "),
+                  (linkHeader += header),
+                  (renderState.resets.style[key] =
+                    "string" === typeof props.crossOrigin ||
+                    "string" === typeof props.integrity
+                      ? [props.crossOrigin, props.integrity]
+                      : PRELOAD_NO_CREDS);
+              else break b;
+            }
+        }
+        linkHeader ? onHeaders({ Link: linkHeader }) : onHeaders({});
+      }
+    }
+  } catch (error) {
+    logRecoverableError(request, error, {});
+  }
+}
+function completeShell(request) {
+  null === request.trackedPostpones && safelyEmitEarlyPreloads(request, !0);
+  null === request.trackedPostpones && preparePreamble(request);
+  request.onShellError = noop;
+  request = request.onShellReady;
+  request();
+}
+function completeAll(request) {
+  safelyEmitEarlyPreloads(
+    request,
+    null === request.trackedPostpones
+      ? !0
+      : null === request.completedRootSegment ||
+          5 !== request.completedRootSegment.status
+  );
+  preparePreamble(request);
+  request = request.onAllReady;
+  request();
+}
+function queueCompletedSegment(boundary, segment) {
+  if (
+    0 === segment.chunks.length &&
+    1 === segment.children.length &&
+    null === segment.children[0].boundary &&
+    -1 === segment.children[0].id
+  ) {
+    var childSegment = segment.children[0];
+    childSegment.id = segment.id;
+    childSegment.parentFlushed = !0;
+    1 === childSegment.status && queueCompletedSegment(boundary, childSegment);
+  } else boundary.completedSegments.push(segment);
+}
+function finishedTask(request, boundary, segment) {
+  if (null === boundary) {
+    if (null !== segment && segment.parentFlushed) {
+      if (null !== request.completedRootSegment)
+        throw Error(
+          "There can only be one root segment. This is a bug in React."
+        );
+      request.completedRootSegment = segment;
+    }
+    request.pendingRootTasks--;
+    0 === request.pendingRootTasks && completeShell(request);
+  } else
+    boundary.pendingTasks--,
+      4 !== boundary.status &&
+        (0 === boundary.pendingTasks
+          ? (0 === boundary.status && (boundary.status = 1),
+            null !== segment &&
+              segment.parentFlushed &&
+              1 === segment.status &&
+              queueCompletedSegment(boundary, segment),
+            boundary.parentFlushed &&
+              request.completedBoundaries.push(boundary),
+            1 === boundary.status &&
+              (boundary.fallbackAbortableTasks.forEach(abortTaskSoft, request),
+              boundary.fallbackAbortableTasks.clear(),
+              0 === request.pendingRootTasks &&
+                null === request.trackedPostpones &&
+                null !== boundary.contentPreamble &&
+                preparePreamble(request)))
+          : null !== segment &&
+            segment.parentFlushed &&
+            1 === segment.status &&
+            (queueCompletedSegment(boundary, segment),
+            1 === boundary.completedSegments.length &&
+              boundary.parentFlushed &&
+              request.partialBoundaries.push(boundary)));
+  request.allPendingTasks--;
+  0 === request.allPendingTasks && completeAll(request);
+}
+function performWork(request$jscomp$2) {
+  if (14 !== request$jscomp$2.status && 13 !== request$jscomp$2.status) {
+    var prevContext = currentActiveSnapshot,
+      prevDispatcher = ReactSharedInternals.H;
+    ReactSharedInternals.H = HooksDispatcher;
+    var prevAsyncDispatcher = ReactSharedInternals.A;
+    ReactSharedInternals.A = DefaultAsyncDispatcher;
+    var prevRequest = currentRequest;
+    currentRequest = request$jscomp$2;
+    var prevResumableState = currentResumableState;
+    currentResumableState = request$jscomp$2.resumableState;
+    try {
+      var pingedTasks = request$jscomp$2.pingedTasks,
+        i;
+      for (i = 0; i < pingedTasks.length; i++) {
+        var task = pingedTasks[i],
+          request = request$jscomp$2,
+          segment = task.blockedSegment;
+        if (null === segment) {
+          var request$jscomp$0 = request;
+          if (0 !== task.replay.pendingTasks) {
+            switchContext(task.context);
+            try {
+              "number" === typeof task.replay.slots
+                ? resumeNode(
+                    request$jscomp$0,
+                    task,
+                    task.replay.slots,
+                    task.node,
+                    task.childIndex
+                  )
+                : retryNode(request$jscomp$0, task);
+              if (
+                1 === task.replay.pendingTasks &&
+                0 < task.replay.nodes.length
+              )
+                throw Error(
+                  "Couldn't find all resumable slots by key/index during replaying. The tree doesn't match so React will fallback to client rendering."
+                );
+              task.replay.pendingTasks--;
+              task.abortSet.delete(task);
+              finishedTask(request$jscomp$0, task.blockedBoundary, null);
+            } catch (thrownValue) {
+              resetHooksState();
+              var x =
+                thrownValue === SuspenseException
+                  ? getSuspendedThenable()
+                  : thrownValue;
+              if (
+                "object" === typeof x &&
+                null !== x &&
+                "function" === typeof x.then
+              ) {
+                var ping = task.ping;
+                x.then(ping, ping);
+                task.thenableState = getThenableStateAfterSuspending();
+              } else {
+                task.replay.pendingTasks--;
+                task.abortSet.delete(task);
+                var errorInfo = getThrownInfo(task.componentStack);
+                request = void 0;
+                var request$jscomp$1 = request$jscomp$0,
+                  boundary = task.blockedBoundary,
+                  error$jscomp$0 =
+                    12 === request$jscomp$0.status
+                      ? request$jscomp$0.fatalError
+                      : x,
+                  replayNodes = task.replay.nodes,
+                  resumeSlots = task.replay.slots;
+                request = logRecoverableError(
+                  request$jscomp$1,
+                  error$jscomp$0,
+                  errorInfo
+                );
+                abortRemainingReplayNodes(
+                  request$jscomp$1,
+                  boundary,
+                  replayNodes,
+                  resumeSlots,
+                  error$jscomp$0,
+                  request
+                );
+                request$jscomp$0.pendingRootTasks--;
+                0 === request$jscomp$0.pendingRootTasks &&
+                  completeShell(request$jscomp$0);
+                request$jscomp$0.allPendingTasks--;
+                0 === request$jscomp$0.allPendingTasks &&
+                  completeAll(request$jscomp$0);
+              }
+            } finally {
+            }
+          }
+        } else if (
+          ((request$jscomp$0 = void 0),
+          (request$jscomp$1 = segment),
+          0 === request$jscomp$1.status)
+        ) {
+          request$jscomp$1.status = 6;
+          switchContext(task.context);
+          var childrenLength = request$jscomp$1.children.length,
+            chunkLength = request$jscomp$1.chunks.length;
+          try {
+            retryNode(request, task),
+              request$jscomp$1.lastPushedText &&
+                request$jscomp$1.textEmbedded &&
+                request$jscomp$1.chunks.push(textSeparator),
+              task.abortSet.delete(task),
+              (request$jscomp$1.status = 1),
+              finishedTask(request, task.blockedBoundary, request$jscomp$1);
+          } catch (thrownValue) {
+            resetHooksState();
+            request$jscomp$1.children.length = childrenLength;
+            request$jscomp$1.chunks.length = chunkLength;
+            var x$jscomp$0 =
+              thrownValue === SuspenseException
+                ? getSuspendedThenable()
+                : 12 === request.status
+                  ? request.fatalError
+                  : thrownValue;
+            if (
+              "object" === typeof x$jscomp$0 &&
+              null !== x$jscomp$0 &&
+              "function" === typeof x$jscomp$0.then
+            ) {
+              request$jscomp$1.status = 0;
+              task.thenableState = getThenableStateAfterSuspending();
+              var ping$jscomp$0 = task.ping;
+              x$jscomp$0.then(ping$jscomp$0, ping$jscomp$0);
+            } else {
+              var errorInfo$jscomp$0 = getThrownInfo(task.componentStack);
+              task.abortSet.delete(task);
+              request$jscomp$1.status = 4;
+              var boundary$jscomp$0 = task.blockedBoundary;
+              request$jscomp$0 = logRecoverableError(
+                request,
+                x$jscomp$0,
+                errorInfo$jscomp$0
+              );
+              null === boundary$jscomp$0
+                ? fatalError(request, x$jscomp$0)
+                : (boundary$jscomp$0.pendingTasks--,
+                  4 !== boundary$jscomp$0.status &&
+                    ((boundary$jscomp$0.status = 4),
+                    (boundary$jscomp$0.errorDigest = request$jscomp$0),
+                    untrackBoundary(request, boundary$jscomp$0),
+                    boundary$jscomp$0.parentFlushed &&
+                      request.clientRenderedBoundaries.push(boundary$jscomp$0),
+                    0 === request.pendingRootTasks &&
+                      null === request.trackedPostpones &&
+                      null !== boundary$jscomp$0.contentPreamble &&
+                      preparePreamble(request)));
+              request.allPendingTasks--;
+              0 === request.allPendingTasks && completeAll(request);
+            }
+          } finally {
+          }
+        }
+      }
+      pingedTasks.splice(0, i);
+      null !== request$jscomp$2.destination &&
+        flushCompletedQueues(request$jscomp$2, request$jscomp$2.destination);
+    } catch (error) {
+      logRecoverableError(request$jscomp$2, error, {}),
+        fatalError(request$jscomp$2, error);
+    } finally {
+      (currentResumableState = prevResumableState),
+        (ReactSharedInternals.H = prevDispatcher),
+        (ReactSharedInternals.A = prevAsyncDispatcher),
+        prevDispatcher === HooksDispatcher && switchContext(prevContext),
+        (currentRequest = prevRequest);
+    }
+  }
+}
+function preparePreambleFromSubtree(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  segment.preambleChildren.length &&
+    collectedPreambleSegments.push(segment.preambleChildren);
+  for (var pendingPreambles = !1, i = 0; i < segment.children.length; i++)
+    pendingPreambles =
+      preparePreambleFromSegment(
+        request,
+        segment.children[i],
+        collectedPreambleSegments
+      ) || pendingPreambles;
+  return pendingPreambles;
+}
+function preparePreambleFromSegment(
+  request,
+  segment,
+  collectedPreambleSegments
+) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return preparePreambleFromSubtree(
+      request,
+      segment,
+      collectedPreambleSegments
+    );
+  var preamble = boundary.contentPreamble,
+    fallbackPreamble = boundary.fallbackPreamble;
+  if (null === preamble || null === fallbackPreamble) return !1;
+  switch (boundary.status) {
+    case 1:
+      hoistPreambleState(request.renderState, preamble);
+      segment = boundary.completedSegments[0];
+      if (!segment)
+        throw Error(
+          "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+        );
+      return preparePreambleFromSubtree(
+        request,
+        segment,
+        collectedPreambleSegments
+      );
+    case 5:
+      if (null !== request.trackedPostpones) return !0;
+    case 4:
+      if (1 === segment.status)
+        return (
+          hoistPreambleState(request.renderState, fallbackPreamble),
+          preparePreambleFromSubtree(
+            request,
+            segment,
+            collectedPreambleSegments
+          )
+        );
+    default:
+      return !0;
+  }
+}
+function preparePreamble(request) {
+  if (
+    request.completedRootSegment &&
+    null === request.completedPreambleSegments
+  ) {
+    var collectedPreambleSegments = [],
+      hasPendingPreambles = preparePreambleFromSegment(
+        request,
+        request.completedRootSegment,
+        collectedPreambleSegments
+      ),
+      preamble = request.renderState.preamble;
+    if (
+      !1 === hasPendingPreambles ||
+      (preamble.headChunks && preamble.bodyChunks)
+    )
+      request.completedPreambleSegments = collectedPreambleSegments;
+  }
+}
+function flushSubtree(request, destination, segment, hoistableState) {
+  segment.parentFlushed = !0;
+  switch (segment.status) {
+    case 0:
+      segment.id = request.nextSegmentId++;
+    case 5:
+      return (
+        (hoistableState = segment.id),
+        (segment.lastPushedText = !1),
+        (segment.textEmbedded = !1),
+        (request = request.renderState),
+        writeChunk(destination, placeholder1),
+        writeChunk(destination, request.placeholderPrefix),
+        (request = hoistableState.toString(16)),
+        writeChunk(destination, request),
+        writeChunkAndReturn(destination, placeholder2)
+      );
+    case 1:
+      segment.status = 2;
+      var r = !0,
+        chunks = segment.chunks,
+        chunkIdx = 0;
+      segment = segment.children;
+      for (var childIdx = 0; childIdx < segment.length; childIdx++) {
+        for (r = segment[childIdx]; chunkIdx < r.index; chunkIdx++)
+          writeChunk(destination, chunks[chunkIdx]);
+        r = flushSegment(request, destination, r, hoistableState);
+      }
+      for (; chunkIdx < chunks.length - 1; chunkIdx++)
+        writeChunk(destination, chunks[chunkIdx]);
+      chunkIdx < chunks.length &&
+        (r = writeChunkAndReturn(destination, chunks[chunkIdx]));
+      return r;
+    default:
+      throw Error(
+        "Aborted, errored or already flushed boundaries should not be flushed again. This is a bug in React."
+      );
+  }
+}
+function flushSegment(request, destination, segment, hoistableState) {
+  var boundary = segment.boundary;
+  if (null === boundary)
+    return flushSubtree(request, destination, segment, hoistableState);
+  boundary.parentFlushed = !0;
+  if (4 === boundary.status) {
+    var errorDigest = boundary.errorDigest;
+    writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);
+    writeChunk(destination, clientRenderedSuspenseBoundaryError1);
+    errorDigest &&
+      (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
+      writeChunk(destination, escapeTextForBrowser(errorDigest)),
+      writeChunk(
+        destination,
+        clientRenderedSuspenseBoundaryErrorAttrInterstitial
+      ));
+    writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);
+    flushSubtree(request, destination, segment, hoistableState);
+    (request = boundary.fallbackPreamble) &&
+      writePreambleContribution(destination, request);
+    return writeChunkAndReturn(destination, endSuspenseBoundary);
+  }
+  if (1 !== boundary.status)
+    return (
+      0 === boundary.status &&
+        (boundary.rootSegmentID = request.nextSegmentId++),
+      0 < boundary.completedSegments.length &&
+        request.partialBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      hoistableState &&
+        ((boundary = boundary.fallbackState),
+        boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
+        boundary.stylesheets.forEach(
+          hoistStylesheetDependency,
+          hoistableState
+        )),
+      flushSubtree(request, destination, segment, hoistableState),
+      writeChunkAndReturn(destination, endSuspenseBoundary)
+    );
+  if (boundary.byteSize > request.progressiveChunkSize)
+    return (
+      (boundary.rootSegmentID = request.nextSegmentId++),
+      request.completedBoundaries.push(boundary),
+      writeStartPendingSuspenseBoundary(
+        destination,
+        request.renderState,
+        boundary.rootSegmentID
+      ),
+      flushSubtree(request, destination, segment, hoistableState),
+      writeChunkAndReturn(destination, endSuspenseBoundary)
+    );
+  hoistableState &&
+    ((segment = boundary.contentState),
+    segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
+    segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
+  writeChunkAndReturn(destination, startCompletedSuspenseBoundary);
+  segment = boundary.completedSegments;
+  if (1 !== segment.length)
+    throw Error(
+      "A previously unvisited boundary must have exactly one root segment. This is a bug in React."
+    );
+  flushSegment(request, destination, segment[0], hoistableState);
+  (request = boundary.contentPreamble) &&
+    writePreambleContribution(destination, request);
+  return writeChunkAndReturn(destination, endSuspenseBoundary);
+}
+function flushSegmentContainer(request, destination, segment, hoistableState) {
+  writeStartSegment(
+    destination,
+    request.renderState,
+    segment.parentFormatContext,
+    segment.id
+  );
+  flushSegment(request, destination, segment, hoistableState);
+  return writeEndSegment(destination, segment.parentFormatContext);
+}
+function flushCompletedBoundary(request, destination, boundary) {
+  for (
+    var completedSegments = boundary.completedSegments, i = 0;
+    i < completedSegments.length;
+    i++
+  )
+    flushPartiallyCompletedSegment(
+      request,
+      destination,
+      boundary,
+      completedSegments[i]
+    );
+  completedSegments.length = 0;
+  writeHoistablesForBoundary(
+    destination,
+    boundary.contentState,
+    request.renderState
+  );
+  completedSegments = request.resumableState;
+  request = request.renderState;
+  i = boundary.rootSegmentID;
+  boundary = boundary.contentState;
+  var requiresStyleInsertion = request.stylesToHoist;
+  request.stylesToHoist = !1;
+  writeChunk(destination, request.startInlineScript);
+  requiresStyleInsertion
+    ? 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 10),
+        writeChunk(destination, completeBoundaryWithStylesScript1FullBoth))
+      : 0 === (completedSegments.instructions & 8)
+        ? ((completedSegments.instructions |= 8),
+          writeChunk(destination, completeBoundaryWithStylesScript1FullPartial))
+        : writeChunk(destination, completeBoundaryWithStylesScript1Partial)
+    : 0 === (completedSegments.instructions & 2)
+      ? ((completedSegments.instructions |= 2),
+        writeChunk(destination, completeBoundaryScript1Full))
+      : writeChunk(destination, completeBoundaryScript1Partial);
+  completedSegments = i.toString(16);
+  writeChunk(destination, request.boundaryPrefix);
+  writeChunk(destination, completedSegments);
+  writeChunk(destination, completeBoundaryScript2);
+  writeChunk(destination, request.segmentPrefix);
+  writeChunk(destination, completedSegments);
+  requiresStyleInsertion
+    ? (writeChunk(destination, completeBoundaryScript3a),
+      writeStyleResourceDependenciesInJS(destination, boundary))
+    : writeChunk(destination, completeBoundaryScript3b);
+  boundary = writeChunkAndReturn(destination, completeBoundaryScriptEnd);
+  return writeBootstrap(destination, request) && boundary;
+}
+function flushPartiallyCompletedSegment(
+  request,
+  destination,
+  boundary,
+  segment
+) {
+  if (2 === segment.status) return !0;
+  var hoistableState = boundary.contentState,
+    segmentID = segment.id;
+  if (-1 === segmentID) {
+    if (-1 === (segment.id = boundary.rootSegmentID))
+      throw Error(
+        "A root segment ID must have been assigned by now. This is a bug in React."
+      );
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  }
+  if (segmentID === boundary.rootSegmentID)
+    return flushSegmentContainer(request, destination, segment, hoistableState);
+  flushSegmentContainer(request, destination, segment, hoistableState);
+  boundary = request.resumableState;
+  request = request.renderState;
+  writeChunk(destination, request.startInlineScript);
+  0 === (boundary.instructions & 1)
+    ? ((boundary.instructions |= 1),
+      writeChunk(destination, completeSegmentScript1Full))
+    : writeChunk(destination, completeSegmentScript1Partial);
+  writeChunk(destination, request.segmentPrefix);
+  segmentID = segmentID.toString(16);
+  writeChunk(destination, segmentID);
+  writeChunk(destination, completeSegmentScript2);
+  writeChunk(destination, request.placeholderPrefix);
+  writeChunk(destination, segmentID);
+  destination = writeChunkAndReturn(destination, completeSegmentScriptEnd);
+  return destination;
+}
+function flushCompletedQueues(request, destination) {
+  currentView = new Uint8Array(2048);
+  writtenBytes = 0;
+  destinationHasCapacity$1 = !0;
+  try {
+    if (!(0 < request.pendingRootTasks)) {
+      var i,
+        completedRootSegment = request.completedRootSegment;
+      if (null !== completedRootSegment) {
+        if (5 === completedRootSegment.status) return;
+        var completedPreambleSegments = request.completedPreambleSegments;
+        if (null === completedPreambleSegments) return;
+        var renderState = request.renderState,
+          preamble = renderState.preamble,
+          htmlChunks = preamble.htmlChunks,
+          headChunks = preamble.headChunks,
+          i$jscomp$0;
+        if (htmlChunks) {
+          for (i$jscomp$0 = 0; i$jscomp$0 < htmlChunks.length; i$jscomp$0++)
+            writeChunk(destination, htmlChunks[i$jscomp$0]);
+          if (headChunks)
+            for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+              writeChunk(destination, headChunks[i$jscomp$0]);
+          else
+            writeChunk(destination, startChunkForTag("head")),
+              writeChunk(destination, endOfStartTag);
+        } else if (headChunks)
+          for (i$jscomp$0 = 0; i$jscomp$0 < headChunks.length; i$jscomp$0++)
+            writeChunk(destination, headChunks[i$jscomp$0]);
+        var charsetChunks = renderState.charsetChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < charsetChunks.length; i$jscomp$0++)
+          writeChunk(destination, charsetChunks[i$jscomp$0]);
+        charsetChunks.length = 0;
+        renderState.preconnects.forEach(flushResource, destination);
+        renderState.preconnects.clear();
+        var viewportChunks = renderState.viewportChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < viewportChunks.length; i$jscomp$0++)
+          writeChunk(destination, viewportChunks[i$jscomp$0]);
+        viewportChunks.length = 0;
+        renderState.fontPreloads.forEach(flushResource, destination);
+        renderState.fontPreloads.clear();
+        renderState.highImagePreloads.forEach(flushResource, destination);
+        renderState.highImagePreloads.clear();
+        renderState.styles.forEach(flushStylesInPreamble, destination);
+        var importMapChunks = renderState.importMapChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < importMapChunks.length; i$jscomp$0++)
+          writeChunk(destination, importMapChunks[i$jscomp$0]);
+        importMapChunks.length = 0;
+        renderState.bootstrapScripts.forEach(flushResource, destination);
+        renderState.scripts.forEach(flushResource, destination);
+        renderState.scripts.clear();
+        renderState.bulkPreloads.forEach(flushResource, destination);
+        renderState.bulkPreloads.clear();
+        var hoistableChunks = renderState.hoistableChunks;
+        for (i$jscomp$0 = 0; i$jscomp$0 < hoistableChunks.length; i$jscomp$0++)
+          writeChunk(destination, hoistableChunks[i$jscomp$0]);
+        for (
+          renderState = hoistableChunks.length = 0;
+          renderState < completedPreambleSegments.length;
+          renderState++
+        ) {
+          var segments = completedPreambleSegments[renderState];
+          for (preamble = 0; preamble < segments.length; preamble++)
+            flushSegment(request, destination, segments[preamble], null);
+        }
+        var preamble$jscomp$0 = request.renderState.preamble,
+          headChunks$jscomp$0 = preamble$jscomp$0.headChunks;
+        (preamble$jscomp$0.htmlChunks || headChunks$jscomp$0) &&
+          writeChunk(destination, endChunkForTag("head"));
+        var bodyChunks = preamble$jscomp$0.bodyChunks;
+        if (bodyChunks)
+          for (
+            completedPreambleSegments = 0;
+            completedPreambleSegments < bodyChunks.length;
+            completedPreambleSegments++
+          )
+            writeChunk(destination, bodyChunks[completedPreambleSegments]);
+        flushSegment(request, destination, completedRootSegment, null);
+        request.completedRootSegment = null;
+        writeBootstrap(destination, request.renderState);
+      }
+      var renderState$jscomp$0 = request.renderState;
+      completedRootSegment = 0;
+      var viewportChunks$jscomp$0 = renderState$jscomp$0.viewportChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < viewportChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, viewportChunks$jscomp$0[completedRootSegment]);
+      viewportChunks$jscomp$0.length = 0;
+      renderState$jscomp$0.preconnects.forEach(flushResource, destination);
+      renderState$jscomp$0.preconnects.clear();
+      renderState$jscomp$0.fontPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.fontPreloads.clear();
+      renderState$jscomp$0.highImagePreloads.forEach(
+        flushResource,
+        destination
+      );
+      renderState$jscomp$0.highImagePreloads.clear();
+      renderState$jscomp$0.styles.forEach(preloadLateStyles, destination);
+      renderState$jscomp$0.scripts.forEach(flushResource, destination);
+      renderState$jscomp$0.scripts.clear();
+      renderState$jscomp$0.bulkPreloads.forEach(flushResource, destination);
+      renderState$jscomp$0.bulkPreloads.clear();
+      var hoistableChunks$jscomp$0 = renderState$jscomp$0.hoistableChunks;
+      for (
+        completedRootSegment = 0;
+        completedRootSegment < hoistableChunks$jscomp$0.length;
+        completedRootSegment++
+      )
+        writeChunk(destination, hoistableChunks$jscomp$0[completedRootSegment]);
+      hoistableChunks$jscomp$0.length = 0;
+      var clientRenderedBoundaries = request.clientRenderedBoundaries;
+      for (i = 0; i < clientRenderedBoundaries.length; i++) {
+        var boundary = clientRenderedBoundaries[i];
+        renderState$jscomp$0 = destination;
+        var resumableState = request.resumableState,
+          renderState$jscomp$1 = request.renderState,
+          id = boundary.rootSegmentID,
+          errorDigest = boundary.errorDigest;
+        writeChunk(
+          renderState$jscomp$0,
+          renderState$jscomp$1.startInlineScript
+        );
+        0 === (resumableState.instructions & 4)
+          ? ((resumableState.instructions |= 4),
+            writeChunk(renderState$jscomp$0, clientRenderScript1Full))
+          : writeChunk(renderState$jscomp$0, clientRenderScript1Partial);
+        writeChunk(renderState$jscomp$0, renderState$jscomp$1.boundaryPrefix);
+        writeChunk(renderState$jscomp$0, id.toString(16));
+        writeChunk(renderState$jscomp$0, clientRenderScript1A);
+        errorDigest &&
+          (writeChunk(
+            renderState$jscomp$0,
+            clientRenderErrorScriptArgInterstitial
+          ),
+          writeChunk(
+            renderState$jscomp$0,
+            escapeJSStringsForInstructionScripts(errorDigest || "")
+          ));
+        var JSCompiler_inline_result = writeChunkAndReturn(
+          renderState$jscomp$0,
+          clientRenderScriptEnd
+        );
+        if (!JSCompiler_inline_result) {
+          request.destination = null;
+          i++;
+          clientRenderedBoundaries.splice(0, i);
+          return;
+        }
+      }
+      clientRenderedBoundaries.splice(0, i);
+      var completedBoundaries = request.completedBoundaries;
+      for (i = 0; i < completedBoundaries.length; i++)
+        if (
+          !flushCompletedBoundary(request, destination, completedBoundaries[i])
+        ) {
+          request.destination = null;
+          i++;
+          completedBoundaries.splice(0, i);
+          return;
+        }
+      completedBoundaries.splice(0, i);
+      completeWriting(destination);
+      currentView = new Uint8Array(2048);
+      writtenBytes = 0;
+      destinationHasCapacity$1 = !0;
+      var partialBoundaries = request.partialBoundaries;
+      for (i = 0; i < partialBoundaries.length; i++) {
+        var boundary$51 = partialBoundaries[i];
+        a: {
+          clientRenderedBoundaries = request;
+          boundary = destination;
+          var completedSegments = boundary$51.completedSegments;
+          for (
+            JSCompiler_inline_result = 0;
+            JSCompiler_inline_result < completedSegments.length;
+            JSCompiler_inline_result++
+          )
+            if (
+              !flushPartiallyCompletedSegment(
+                clientRenderedBoundaries,
+                boundary,
+                boundary$51,
+                completedSegments[JSCompiler_inline_result]
+              )
+            ) {
+              JSCompiler_inline_result++;
+              completedSegments.splice(0, JSCompiler_inline_result);
+              var JSCompiler_inline_result$jscomp$0 = !1;
+              break a;
+            }
+          completedSegments.splice(0, JSCompiler_inline_result);
+          JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
+            boundary,
+            boundary$51.contentState,
+            clientRenderedBoundaries.renderState
+          );
+        }
+        if (!JSCompiler_inline_result$jscomp$0) {
+          request.destination = null;
+          i++;
+          partialBoundaries.splice(0, i);
+          return;
+        }
+      }
+      partialBoundaries.splice(0, i);
+      var largeBoundaries = request.completedBoundaries;
+      for (i = 0; i < largeBoundaries.length; i++)
+        if (!flushCompletedBoundary(request, destination, largeBoundaries[i])) {
+          request.destination = null;
+          i++;
+          largeBoundaries.splice(0, i);
+          return;
+        }
+      largeBoundaries.splice(0, i);
+    }
+  } finally {
+    0 === request.allPendingTasks &&
+    0 === request.pingedTasks.length &&
+    0 === request.clientRenderedBoundaries.length &&
+    0 === request.completedBoundaries.length
+      ? ((request.flushScheduled = !1),
+        (i = request.resumableState),
+        i.hasBody && writeChunk(destination, endChunkForTag("body")),
+        i.hasHtml && writeChunk(destination, endChunkForTag("html")),
+        completeWriting(destination),
+        flushBuffered(destination),
+        (request.status = 14),
+        destination.end(),
+        (request.destination = null))
+      : (completeWriting(destination), flushBuffered(destination));
+  }
+}
+function startWork(request) {
+  request.flushScheduled = null !== request.destination;
+  scheduleMicrotask(function () {
+    return requestStorage.run(request, performWork, request);
+  });
+  setImmediate(function () {
+    10 === request.status && (request.status = 11);
+    null === request.trackedPostpones &&
+      requestStorage.run(
+        request,
+        enqueueEarlyPreloadsAfterInitialWork,
+        request
+      );
+  });
+}
+function enqueueEarlyPreloadsAfterInitialWork(request) {
+  safelyEmitEarlyPreloads(request, 0 === request.pendingRootTasks);
+}
+function enqueueFlush(request) {
+  !1 === request.flushScheduled &&
+    0 === request.pingedTasks.length &&
+    null !== request.destination &&
+    ((request.flushScheduled = !0),
+    setImmediate(function () {
+      var destination = request.destination;
+      destination
+        ? flushCompletedQueues(request, destination)
+        : (request.flushScheduled = !1);
+    }));
+}
+function startFlowing(request, destination) {
+  if (13 === request.status)
+    (request.status = 14), destination.destroy(request.fatalError);
+  else if (14 !== request.status && null === request.destination) {
+    request.destination = destination;
+    try {
+      flushCompletedQueues(request, destination);
+    } catch (error) {
+      logRecoverableError(request, error, {}), fatalError(request, error);
+    }
+  }
+}
+function abort(request, reason) {
+  if (11 === request.status || 10 === request.status) request.status = 12;
+  try {
+    var abortableTasks = request.abortableTasks;
+    if (0 < abortableTasks.size) {
+      var error =
+        void 0 === reason
+          ? Error("The render was aborted by the server without a reason.")
+          : "object" === typeof reason &&
+              null !== reason &&
+              "function" === typeof reason.then
+            ? Error("The render was aborted by the server with a promise.")
+            : reason;
+      request.fatalError = error;
+      abortableTasks.forEach(function (task) {
+        return abortTask(task, request, error);
+      });
+      abortableTasks.clear();
+    }
+    null !== request.destination &&
+      flushCompletedQueues(request, request.destination);
+  } catch (error$53) {
+    logRecoverableError(request, error$53, {}), fatalError(request, error$53);
+  }
+}
+function ensureCorrectIsomorphicReactVersion() {
+  var isomorphicReactPackageVersion = React.version;
+  if ("19.1.1" !== isomorphicReactPackageVersion)
+    throw Error(
+      'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n  - react:      ' +
+        (isomorphicReactPackageVersion +
+          "\n  - react-dom:  19.1.1\nLearn more: https://react.dev/warnings/version-mismatch")
+    );
+}
+ensureCorrectIsomorphicReactVersion();
+function createDrainHandler(destination, request) {
+  return function () {
+    return startFlowing(request, destination);
+  };
+}
+function createCancelHandler(request, reason) {
+  return function () {
+    request.destination = null;
+    abort(request, Error(reason));
+  };
+}
+function createRequestImpl(children, options) {
+  var resumableState = createResumableState(
+    options ? options.identifierPrefix : void 0,
+    options ? options.unstable_externalRuntimeSrc : void 0,
+    options ? options.bootstrapScriptContent : void 0,
+    options ? options.bootstrapScripts : void 0,
+    options ? options.bootstrapModules : void 0
+  );
+  return createRequest(
+    children,
+    resumableState,
+    createRenderState(
+      resumableState,
+      options ? options.nonce : void 0,
+      options ? options.unstable_externalRuntimeSrc : void 0,
+      options ? options.importMap : void 0,
+      options ? options.onHeaders : void 0,
+      options ? options.maxHeadersLength : void 0
+    ),
+    createRootFormatContext(options ? options.namespaceURI : void 0),
+    options ? options.progressiveChunkSize : void 0,
+    options ? options.onError : void 0,
+    options ? options.onAllReady : void 0,
+    options ? options.onShellReady : void 0,
+    options ? options.onShellError : void 0,
+    void 0,
+    options ? options.onPostpone : void 0,
+    options ? options.formState : void 0
+  );
+}
+ensureCorrectIsomorphicReactVersion();
+function createFakeWritable(readable) {
+  return {
+    write: function (chunk) {
+      return readable.push(chunk);
+    },
+    end: function () {
+      readable.push(null);
+    },
+    destroy: function (error) {
+      readable.destroy(error);
+    }
+  };
+}
+exports.prerenderToNodeStream = function (children, options) {
+  return new Promise(function (resolve, reject) {
+    var resumableState = createResumableState(
+        options ? options.identifierPrefix : void 0,
+        options ? options.unstable_externalRuntimeSrc : void 0,
+        options ? options.bootstrapScriptContent : void 0,
+        options ? options.bootstrapScripts : void 0,
+        options ? options.bootstrapModules : void 0
+      ),
+      request = createPrerenderRequest(
+        children,
+        resumableState,
+        createRenderState(
+          resumableState,
+          void 0,
+          options ? options.unstable_externalRuntimeSrc : void 0,
+          options ? options.importMap : void 0,
+          options ? options.onHeaders : void 0,
+          options ? options.maxHeadersLength : void 0
+        ),
+        createRootFormatContext(options ? options.namespaceURI : void 0),
+        options ? options.progressiveChunkSize : void 0,
+        options ? options.onError : void 0,
+        function () {
+          var readable = new stream.Readable({
+              read: function () {
+                startFlowing(request, writable);
+              }
+            }),
+            writable = createFakeWritable(readable);
+          resolve({ prelude: readable });
+        },
+        void 0,
+        void 0,
+        reject,
+        options ? options.onPostpone : void 0
+      );
+    if (options && options.signal) {
+      var signal = options.signal;
+      if (signal.aborted) abort(request, signal.reason);
+      else {
+        var listener = function () {
+          abort(request, signal.reason);
+          signal.removeEventListener("abort", listener);
+        };
+        signal.addEventListener("abort", listener);
+      }
+    }
+    startWork(request);
+  });
+};
+exports.renderToPipeableStream = function (children, options) {
+  var request = createRequestImpl(children, options),
+    hasStartedFlowing = !1;
+  startWork(request);
+  return {
+    pipe: function (destination) {
+      if (hasStartedFlowing)
+        throw Error(
+          "React currently only supports piping to one writable stream."
+        );
+      hasStartedFlowing = !0;
+      safelyEmitEarlyPreloads(
+        request,
+        null === request.trackedPostpones
+          ? 0 === request.pendingRootTasks
+          : null === request.completedRootSegment
+            ? 0 === request.pendingRootTasks
+            : 5 !== request.completedRootSegment.status
+      );
+      startFlowing(request, destination);
+      destination.on("drain", createDrainHandler(destination, request));
+      destination.on(
+        "error",
+        createCancelHandler(
+          request,
+          "The destination stream errored while writing data."
+        )
+      );
+      destination.on(
+        "close",
+        createCancelHandler(request, "The destination stream closed early.")
+      );
+      return destination;
+    },
+    abort: function (reason) {
+      abort(request, reason);
+    }
+  };
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/cjs/react-dom-test-utils.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-test-utils.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-test-utils.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * @license React
+ * react-dom-test-utils.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    var React = require("react"),
+      didWarnAboutUsingAct = !1;
+    exports.act = function (callback) {
+      !1 === didWarnAboutUsingAct &&
+        ((didWarnAboutUsingAct = !0),
+        console.error(
+          "`ReactDOMTestUtils.act` is deprecated in favor of `React.act`. Import `act` from `react` instead of `react-dom/test-utils`. See https://react.dev/warnings/react-dom-test-utils for more info."
+        ));
+      return React.act(callback);
+    };
+  })();
Index: node_modules/react-dom/cjs/react-dom-test-utils.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom-test-utils.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom-test-utils.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * @license React
+ * react-dom-test-utils.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react"),
+  didWarnAboutUsingAct = !1;
+exports.act = function (callback) {
+  !1 === didWarnAboutUsingAct &&
+    ((didWarnAboutUsingAct = !0),
+    console.error(
+      "`ReactDOMTestUtils.act` is deprecated in favor of `React.act`. Import `act` from `react` instead of `react-dom/test-utils`. See https://react.dev/warnings/react-dom-test-utils for more info."
+    ));
+  return React.act(callback);
+};
Index: node_modules/react-dom/cjs/react-dom.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,424 @@
+/**
+ * @license React
+ * react-dom.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function noop() {}
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function createPortal$1(children, containerInfo, implementation) {
+      var key =
+        3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;
+      try {
+        testStringCoercion(key);
+        var JSCompiler_inline_result = !1;
+      } catch (e) {
+        JSCompiler_inline_result = !0;
+      }
+      JSCompiler_inline_result &&
+        (console.error(
+          "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
+          ("function" === typeof Symbol &&
+            Symbol.toStringTag &&
+            key[Symbol.toStringTag]) ||
+            key.constructor.name ||
+            "Object"
+        ),
+        testStringCoercion(key));
+      return {
+        $$typeof: REACT_PORTAL_TYPE,
+        key: null == key ? null : "" + key,
+        children: children,
+        containerInfo: containerInfo,
+        implementation: implementation
+      };
+    }
+    function getCrossOriginStringAs(as, input) {
+      if ("font" === as) return "";
+      if ("string" === typeof input)
+        return "use-credentials" === input ? input : "";
+    }
+    function getValueDescriptorExpectingObjectForWarning(thing) {
+      return null === thing
+        ? "`null`"
+        : void 0 === thing
+          ? "`undefined`"
+          : "" === thing
+            ? "an empty string"
+            : 'something with type "' + typeof thing + '"';
+    }
+    function getValueDescriptorExpectingEnumForWarning(thing) {
+      return null === thing
+        ? "`null`"
+        : void 0 === thing
+          ? "`undefined`"
+          : "" === thing
+            ? "an empty string"
+            : "string" === typeof thing
+              ? JSON.stringify(thing)
+              : "number" === typeof thing
+                ? "`" + thing + "`"
+                : 'something with type "' + typeof thing + '"';
+    }
+    function resolveDispatcher() {
+      var dispatcher = ReactSharedInternals.H;
+      null === dispatcher &&
+        console.error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      return dispatcher;
+    }
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+    var React = require("react"),
+      Internals = {
+        d: {
+          f: noop,
+          r: function () {
+            throw Error(
+              "Invalid form element. requestFormReset must be passed a form that was rendered by React."
+            );
+          },
+          D: noop,
+          C: noop,
+          L: noop,
+          m: noop,
+          X: noop,
+          S: noop,
+          M: noop
+        },
+        p: 0,
+        findDOMNode: null
+      },
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
+    ("function" === typeof Map &&
+      null != Map.prototype &&
+      "function" === typeof Map.prototype.forEach &&
+      "function" === typeof Set &&
+      null != Set.prototype &&
+      "function" === typeof Set.prototype.clear &&
+      "function" === typeof Set.prototype.forEach) ||
+      console.error(
+        "React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"
+      );
+    exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
+      Internals;
+    exports.createPortal = function (children, container) {
+      var key =
+        2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;
+      if (
+        !container ||
+        (1 !== container.nodeType &&
+          9 !== container.nodeType &&
+          11 !== container.nodeType)
+      )
+        throw Error("Target container is not a DOM element.");
+      return createPortal$1(children, container, null, key);
+    };
+    exports.flushSync = function (fn) {
+      var previousTransition = ReactSharedInternals.T,
+        previousUpdatePriority = Internals.p;
+      try {
+        if (((ReactSharedInternals.T = null), (Internals.p = 2), fn))
+          return fn();
+      } finally {
+        (ReactSharedInternals.T = previousTransition),
+          (Internals.p = previousUpdatePriority),
+          Internals.d.f() &&
+            console.error(
+              "flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task."
+            );
+      }
+    };
+    exports.preconnect = function (href, options) {
+      "string" === typeof href && href
+        ? null != options && "object" !== typeof options
+          ? console.error(
+              "ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            )
+          : null != options &&
+            "string" !== typeof options.crossOrigin &&
+            console.error(
+              "ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.",
+              getValueDescriptorExpectingObjectForWarning(options.crossOrigin)
+            )
+        : console.error(
+            "ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
+            getValueDescriptorExpectingObjectForWarning(href)
+          );
+      "string" === typeof href &&
+        (options
+          ? ((options = options.crossOrigin),
+            (options =
+              "string" === typeof options
+                ? "use-credentials" === options
+                  ? options
+                  : ""
+                : void 0))
+          : (options = null),
+        Internals.d.C(href, options));
+    };
+    exports.prefetchDNS = function (href) {
+      if ("string" !== typeof href || !href)
+        console.error(
+          "ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
+          getValueDescriptorExpectingObjectForWarning(href)
+        );
+      else if (1 < arguments.length) {
+        var options = arguments[1];
+        "object" === typeof options && options.hasOwnProperty("crossOrigin")
+          ? console.error(
+              "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            )
+          : console.error(
+              "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            );
+      }
+      "string" === typeof href && Internals.d.D(href);
+    };
+    exports.preinit = function (href, options) {
+      "string" === typeof href && href
+        ? null == options || "object" !== typeof options
+          ? console.error(
+              "ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            )
+          : "style" !== options.as &&
+            "script" !== options.as &&
+            console.error(
+              'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are "style" and "script".',
+              getValueDescriptorExpectingEnumForWarning(options.as)
+            )
+        : console.error(
+            "ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
+            getValueDescriptorExpectingObjectForWarning(href)
+          );
+      if (
+        "string" === typeof href &&
+        options &&
+        "string" === typeof options.as
+      ) {
+        var as = options.as,
+          crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),
+          integrity =
+            "string" === typeof options.integrity ? options.integrity : void 0,
+          fetchPriority =
+            "string" === typeof options.fetchPriority
+              ? options.fetchPriority
+              : void 0;
+        "style" === as
+          ? Internals.d.S(
+              href,
+              "string" === typeof options.precedence
+                ? options.precedence
+                : void 0,
+              {
+                crossOrigin: crossOrigin,
+                integrity: integrity,
+                fetchPriority: fetchPriority
+              }
+            )
+          : "script" === as &&
+            Internals.d.X(href, {
+              crossOrigin: crossOrigin,
+              integrity: integrity,
+              fetchPriority: fetchPriority,
+              nonce: "string" === typeof options.nonce ? options.nonce : void 0
+            });
+      }
+    };
+    exports.preinitModule = function (href, options) {
+      var encountered = "";
+      ("string" === typeof href && href) ||
+        (encountered +=
+          " The `href` argument encountered was " +
+          getValueDescriptorExpectingObjectForWarning(href) +
+          ".");
+      void 0 !== options && "object" !== typeof options
+        ? (encountered +=
+            " The `options` argument encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options) +
+            ".")
+        : options &&
+          "as" in options &&
+          "script" !== options.as &&
+          (encountered +=
+            " The `as` option encountered was " +
+            getValueDescriptorExpectingEnumForWarning(options.as) +
+            ".");
+      if (encountered)
+        console.error(
+          "ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s",
+          encountered
+        );
+      else
+        switch (
+          ((encountered =
+            options && "string" === typeof options.as ? options.as : "script"),
+          encountered)
+        ) {
+          case "script":
+            break;
+          default:
+            (encountered =
+              getValueDescriptorExpectingEnumForWarning(encountered)),
+              console.error(
+                'ReactDOM.preinitModule(): Currently the only supported "as" type for this function is "script" but received "%s" instead. This warning was generated for `href` "%s". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',
+                encountered,
+                href
+              );
+        }
+      if ("string" === typeof href)
+        if ("object" === typeof options && null !== options) {
+          if (null == options.as || "script" === options.as)
+            (encountered = getCrossOriginStringAs(
+              options.as,
+              options.crossOrigin
+            )),
+              Internals.d.M(href, {
+                crossOrigin: encountered,
+                integrity:
+                  "string" === typeof options.integrity
+                    ? options.integrity
+                    : void 0,
+                nonce:
+                  "string" === typeof options.nonce ? options.nonce : void 0
+              });
+        } else null == options && Internals.d.M(href);
+    };
+    exports.preload = function (href, options) {
+      var encountered = "";
+      ("string" === typeof href && href) ||
+        (encountered +=
+          " The `href` argument encountered was " +
+          getValueDescriptorExpectingObjectForWarning(href) +
+          ".");
+      null == options || "object" !== typeof options
+        ? (encountered +=
+            " The `options` argument encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options) +
+            ".")
+        : ("string" === typeof options.as && options.as) ||
+          (encountered +=
+            " The `as` option encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options.as) +
+            ".");
+      encountered &&
+        console.error(
+          'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel="preload" as="..." />` tag.%s',
+          encountered
+        );
+      if (
+        "string" === typeof href &&
+        "object" === typeof options &&
+        null !== options &&
+        "string" === typeof options.as
+      ) {
+        encountered = options.as;
+        var crossOrigin = getCrossOriginStringAs(
+          encountered,
+          options.crossOrigin
+        );
+        Internals.d.L(href, encountered, {
+          crossOrigin: crossOrigin,
+          integrity:
+            "string" === typeof options.integrity ? options.integrity : void 0,
+          nonce: "string" === typeof options.nonce ? options.nonce : void 0,
+          type: "string" === typeof options.type ? options.type : void 0,
+          fetchPriority:
+            "string" === typeof options.fetchPriority
+              ? options.fetchPriority
+              : void 0,
+          referrerPolicy:
+            "string" === typeof options.referrerPolicy
+              ? options.referrerPolicy
+              : void 0,
+          imageSrcSet:
+            "string" === typeof options.imageSrcSet
+              ? options.imageSrcSet
+              : void 0,
+          imageSizes:
+            "string" === typeof options.imageSizes
+              ? options.imageSizes
+              : void 0,
+          media: "string" === typeof options.media ? options.media : void 0
+        });
+      }
+    };
+    exports.preloadModule = function (href, options) {
+      var encountered = "";
+      ("string" === typeof href && href) ||
+        (encountered +=
+          " The `href` argument encountered was " +
+          getValueDescriptorExpectingObjectForWarning(href) +
+          ".");
+      void 0 !== options && "object" !== typeof options
+        ? (encountered +=
+            " The `options` argument encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options) +
+            ".")
+        : options &&
+          "as" in options &&
+          "string" !== typeof options.as &&
+          (encountered +=
+            " The `as` option encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options.as) +
+            ".");
+      encountered &&
+        console.error(
+          'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel="modulepreload" as="..." />` tag.%s',
+          encountered
+        );
+      "string" === typeof href &&
+        (options
+          ? ((encountered = getCrossOriginStringAs(
+              options.as,
+              options.crossOrigin
+            )),
+            Internals.d.m(href, {
+              as:
+                "string" === typeof options.as && "script" !== options.as
+                  ? options.as
+                  : void 0,
+              crossOrigin: encountered,
+              integrity:
+                "string" === typeof options.integrity
+                  ? options.integrity
+                  : void 0
+            }))
+          : Internals.d.m(href));
+    };
+    exports.requestFormReset = function (form) {
+      Internals.d.r(form);
+    };
+    exports.unstable_batchedUpdates = function (fn, a) {
+      return fn(a);
+    };
+    exports.useFormState = function (action, initialState, permalink) {
+      return resolveDispatcher().useFormState(action, initialState, permalink);
+    };
+    exports.useFormStatus = function () {
+      return resolveDispatcher().useHostTransitionStatus();
+    };
+    exports.version = "19.1.1";
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+  })();
Index: node_modules/react-dom/cjs/react-dom.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,210 @@
+/**
+ * @license React
+ * react-dom.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react");
+function formatProdErrorMessage(code) {
+  var url = "https://react.dev/errors/" + code;
+  if (1 < arguments.length) {
+    url += "?args[]=" + encodeURIComponent(arguments[1]);
+    for (var i = 2; i < arguments.length; i++)
+      url += "&args[]=" + encodeURIComponent(arguments[i]);
+  }
+  return (
+    "Minified React error #" +
+    code +
+    "; visit " +
+    url +
+    " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."
+  );
+}
+function noop() {}
+var Internals = {
+    d: {
+      f: noop,
+      r: function () {
+        throw Error(formatProdErrorMessage(522));
+      },
+      D: noop,
+      C: noop,
+      L: noop,
+      m: noop,
+      X: noop,
+      S: noop,
+      M: noop
+    },
+    p: 0,
+    findDOMNode: null
+  },
+  REACT_PORTAL_TYPE = Symbol.for("react.portal");
+function createPortal$1(children, containerInfo, implementation) {
+  var key =
+    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;
+  return {
+    $$typeof: REACT_PORTAL_TYPE,
+    key: null == key ? null : "" + key,
+    children: children,
+    containerInfo: containerInfo,
+    implementation: implementation
+  };
+}
+var ReactSharedInternals =
+  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
+function getCrossOriginStringAs(as, input) {
+  if ("font" === as) return "";
+  if ("string" === typeof input)
+    return "use-credentials" === input ? input : "";
+}
+exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
+  Internals;
+exports.createPortal = function (children, container) {
+  var key =
+    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;
+  if (
+    !container ||
+    (1 !== container.nodeType &&
+      9 !== container.nodeType &&
+      11 !== container.nodeType)
+  )
+    throw Error(formatProdErrorMessage(299));
+  return createPortal$1(children, container, null, key);
+};
+exports.flushSync = function (fn) {
+  var previousTransition = ReactSharedInternals.T,
+    previousUpdatePriority = Internals.p;
+  try {
+    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();
+  } finally {
+    (ReactSharedInternals.T = previousTransition),
+      (Internals.p = previousUpdatePriority),
+      Internals.d.f();
+  }
+};
+exports.preconnect = function (href, options) {
+  "string" === typeof href &&
+    (options
+      ? ((options = options.crossOrigin),
+        (options =
+          "string" === typeof options
+            ? "use-credentials" === options
+              ? options
+              : ""
+            : void 0))
+      : (options = null),
+    Internals.d.C(href, options));
+};
+exports.prefetchDNS = function (href) {
+  "string" === typeof href && Internals.d.D(href);
+};
+exports.preinit = function (href, options) {
+  if ("string" === typeof href && options && "string" === typeof options.as) {
+    var as = options.as,
+      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),
+      integrity =
+        "string" === typeof options.integrity ? options.integrity : void 0,
+      fetchPriority =
+        "string" === typeof options.fetchPriority
+          ? options.fetchPriority
+          : void 0;
+    "style" === as
+      ? Internals.d.S(
+          href,
+          "string" === typeof options.precedence ? options.precedence : void 0,
+          {
+            crossOrigin: crossOrigin,
+            integrity: integrity,
+            fetchPriority: fetchPriority
+          }
+        )
+      : "script" === as &&
+        Internals.d.X(href, {
+          crossOrigin: crossOrigin,
+          integrity: integrity,
+          fetchPriority: fetchPriority,
+          nonce: "string" === typeof options.nonce ? options.nonce : void 0
+        });
+  }
+};
+exports.preinitModule = function (href, options) {
+  if ("string" === typeof href)
+    if ("object" === typeof options && null !== options) {
+      if (null == options.as || "script" === options.as) {
+        var crossOrigin = getCrossOriginStringAs(
+          options.as,
+          options.crossOrigin
+        );
+        Internals.d.M(href, {
+          crossOrigin: crossOrigin,
+          integrity:
+            "string" === typeof options.integrity ? options.integrity : void 0,
+          nonce: "string" === typeof options.nonce ? options.nonce : void 0
+        });
+      }
+    } else null == options && Internals.d.M(href);
+};
+exports.preload = function (href, options) {
+  if (
+    "string" === typeof href &&
+    "object" === typeof options &&
+    null !== options &&
+    "string" === typeof options.as
+  ) {
+    var as = options.as,
+      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);
+    Internals.d.L(href, as, {
+      crossOrigin: crossOrigin,
+      integrity:
+        "string" === typeof options.integrity ? options.integrity : void 0,
+      nonce: "string" === typeof options.nonce ? options.nonce : void 0,
+      type: "string" === typeof options.type ? options.type : void 0,
+      fetchPriority:
+        "string" === typeof options.fetchPriority
+          ? options.fetchPriority
+          : void 0,
+      referrerPolicy:
+        "string" === typeof options.referrerPolicy
+          ? options.referrerPolicy
+          : void 0,
+      imageSrcSet:
+        "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,
+      imageSizes:
+        "string" === typeof options.imageSizes ? options.imageSizes : void 0,
+      media: "string" === typeof options.media ? options.media : void 0
+    });
+  }
+};
+exports.preloadModule = function (href, options) {
+  if ("string" === typeof href)
+    if (options) {
+      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);
+      Internals.d.m(href, {
+        as:
+          "string" === typeof options.as && "script" !== options.as
+            ? options.as
+            : void 0,
+        crossOrigin: crossOrigin,
+        integrity:
+          "string" === typeof options.integrity ? options.integrity : void 0
+      });
+    } else Internals.d.m(href);
+};
+exports.requestFormReset = function (form) {
+  Internals.d.r(form);
+};
+exports.unstable_batchedUpdates = function (fn, a) {
+  return fn(a);
+};
+exports.useFormState = function (action, initialState, permalink) {
+  return ReactSharedInternals.H.useFormState(action, initialState, permalink);
+};
+exports.useFormStatus = function () {
+  return ReactSharedInternals.H.useHostTransitionStatus();
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/cjs/react-dom.react-server.development.js
===================================================================
--- node_modules/react-dom/cjs/react-dom.react-server.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom.react-server.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,340 @@
+/**
+ * @license React
+ * react-dom.react-server.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function noop() {}
+    function getCrossOriginStringAs(as, input) {
+      if ("font" === as) return "";
+      if ("string" === typeof input)
+        return "use-credentials" === input ? input : "";
+    }
+    function getValueDescriptorExpectingObjectForWarning(thing) {
+      return null === thing
+        ? "`null`"
+        : void 0 === thing
+          ? "`undefined`"
+          : "" === thing
+            ? "an empty string"
+            : 'something with type "' + typeof thing + '"';
+    }
+    function getValueDescriptorExpectingEnumForWarning(thing) {
+      return null === thing
+        ? "`null`"
+        : void 0 === thing
+          ? "`undefined`"
+          : "" === thing
+            ? "an empty string"
+            : "string" === typeof thing
+              ? JSON.stringify(thing)
+              : "number" === typeof thing
+                ? "`" + thing + "`"
+                : 'something with type "' + typeof thing + '"';
+    }
+    var React = require("react"),
+      Internals = {
+        d: {
+          f: noop,
+          r: function () {
+            throw Error(
+              "Invalid form element. requestFormReset must be passed a form that was rendered by React."
+            );
+          },
+          D: noop,
+          C: noop,
+          L: noop,
+          m: noop,
+          X: noop,
+          S: noop,
+          M: noop
+        },
+        p: 0,
+        findDOMNode: null
+      };
+    if (!React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE)
+      throw Error(
+        'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.'
+      );
+    ("function" === typeof Map &&
+      null != Map.prototype &&
+      "function" === typeof Map.prototype.forEach &&
+      "function" === typeof Set &&
+      null != Set.prototype &&
+      "function" === typeof Set.prototype.clear &&
+      "function" === typeof Set.prototype.forEach) ||
+      console.error(
+        "React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"
+      );
+    exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
+      Internals;
+    exports.preconnect = function (href, options) {
+      "string" === typeof href && href
+        ? null != options && "object" !== typeof options
+          ? console.error(
+              "ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            )
+          : null != options &&
+            "string" !== typeof options.crossOrigin &&
+            console.error(
+              "ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.",
+              getValueDescriptorExpectingObjectForWarning(options.crossOrigin)
+            )
+        : console.error(
+            "ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
+            getValueDescriptorExpectingObjectForWarning(href)
+          );
+      "string" === typeof href &&
+        (options
+          ? ((options = options.crossOrigin),
+            (options =
+              "string" === typeof options
+                ? "use-credentials" === options
+                  ? options
+                  : ""
+                : void 0))
+          : (options = null),
+        Internals.d.C(href, options));
+    };
+    exports.prefetchDNS = function (href) {
+      if ("string" !== typeof href || !href)
+        console.error(
+          "ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
+          getValueDescriptorExpectingObjectForWarning(href)
+        );
+      else if (1 < arguments.length) {
+        var options = arguments[1];
+        "object" === typeof options && options.hasOwnProperty("crossOrigin")
+          ? console.error(
+              "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            )
+          : console.error(
+              "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            );
+      }
+      "string" === typeof href && Internals.d.D(href);
+    };
+    exports.preinit = function (href, options) {
+      "string" === typeof href && href
+        ? null == options || "object" !== typeof options
+          ? console.error(
+              "ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.",
+              getValueDescriptorExpectingEnumForWarning(options)
+            )
+          : "style" !== options.as &&
+            "script" !== options.as &&
+            console.error(
+              'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are "style" and "script".',
+              getValueDescriptorExpectingEnumForWarning(options.as)
+            )
+        : console.error(
+            "ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.",
+            getValueDescriptorExpectingObjectForWarning(href)
+          );
+      if (
+        "string" === typeof href &&
+        options &&
+        "string" === typeof options.as
+      ) {
+        var as = options.as,
+          crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),
+          integrity =
+            "string" === typeof options.integrity ? options.integrity : void 0,
+          fetchPriority =
+            "string" === typeof options.fetchPriority
+              ? options.fetchPriority
+              : void 0;
+        "style" === as
+          ? Internals.d.S(
+              href,
+              "string" === typeof options.precedence
+                ? options.precedence
+                : void 0,
+              {
+                crossOrigin: crossOrigin,
+                integrity: integrity,
+                fetchPriority: fetchPriority
+              }
+            )
+          : "script" === as &&
+            Internals.d.X(href, {
+              crossOrigin: crossOrigin,
+              integrity: integrity,
+              fetchPriority: fetchPriority,
+              nonce: "string" === typeof options.nonce ? options.nonce : void 0
+            });
+      }
+    };
+    exports.preinitModule = function (href, options) {
+      var encountered = "";
+      ("string" === typeof href && href) ||
+        (encountered +=
+          " The `href` argument encountered was " +
+          getValueDescriptorExpectingObjectForWarning(href) +
+          ".");
+      void 0 !== options && "object" !== typeof options
+        ? (encountered +=
+            " The `options` argument encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options) +
+            ".")
+        : options &&
+          "as" in options &&
+          "script" !== options.as &&
+          (encountered +=
+            " The `as` option encountered was " +
+            getValueDescriptorExpectingEnumForWarning(options.as) +
+            ".");
+      if (encountered)
+        console.error(
+          "ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s",
+          encountered
+        );
+      else
+        switch (
+          ((encountered =
+            options && "string" === typeof options.as ? options.as : "script"),
+          encountered)
+        ) {
+          case "script":
+            break;
+          default:
+            (encountered =
+              getValueDescriptorExpectingEnumForWarning(encountered)),
+              console.error(
+                'ReactDOM.preinitModule(): Currently the only supported "as" type for this function is "script" but received "%s" instead. This warning was generated for `href` "%s". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',
+                encountered,
+                href
+              );
+        }
+      if ("string" === typeof href)
+        if ("object" === typeof options && null !== options) {
+          if (null == options.as || "script" === options.as)
+            (encountered = getCrossOriginStringAs(
+              options.as,
+              options.crossOrigin
+            )),
+              Internals.d.M(href, {
+                crossOrigin: encountered,
+                integrity:
+                  "string" === typeof options.integrity
+                    ? options.integrity
+                    : void 0,
+                nonce:
+                  "string" === typeof options.nonce ? options.nonce : void 0
+              });
+        } else null == options && Internals.d.M(href);
+    };
+    exports.preload = function (href, options) {
+      var encountered = "";
+      ("string" === typeof href && href) ||
+        (encountered +=
+          " The `href` argument encountered was " +
+          getValueDescriptorExpectingObjectForWarning(href) +
+          ".");
+      null == options || "object" !== typeof options
+        ? (encountered +=
+            " The `options` argument encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options) +
+            ".")
+        : ("string" === typeof options.as && options.as) ||
+          (encountered +=
+            " The `as` option encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options.as) +
+            ".");
+      encountered &&
+        console.error(
+          'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel="preload" as="..." />` tag.%s',
+          encountered
+        );
+      if (
+        "string" === typeof href &&
+        "object" === typeof options &&
+        null !== options &&
+        "string" === typeof options.as
+      ) {
+        encountered = options.as;
+        var crossOrigin = getCrossOriginStringAs(
+          encountered,
+          options.crossOrigin
+        );
+        Internals.d.L(href, encountered, {
+          crossOrigin: crossOrigin,
+          integrity:
+            "string" === typeof options.integrity ? options.integrity : void 0,
+          nonce: "string" === typeof options.nonce ? options.nonce : void 0,
+          type: "string" === typeof options.type ? options.type : void 0,
+          fetchPriority:
+            "string" === typeof options.fetchPriority
+              ? options.fetchPriority
+              : void 0,
+          referrerPolicy:
+            "string" === typeof options.referrerPolicy
+              ? options.referrerPolicy
+              : void 0,
+          imageSrcSet:
+            "string" === typeof options.imageSrcSet
+              ? options.imageSrcSet
+              : void 0,
+          imageSizes:
+            "string" === typeof options.imageSizes
+              ? options.imageSizes
+              : void 0,
+          media: "string" === typeof options.media ? options.media : void 0
+        });
+      }
+    };
+    exports.preloadModule = function (href, options) {
+      var encountered = "";
+      ("string" === typeof href && href) ||
+        (encountered +=
+          " The `href` argument encountered was " +
+          getValueDescriptorExpectingObjectForWarning(href) +
+          ".");
+      void 0 !== options && "object" !== typeof options
+        ? (encountered +=
+            " The `options` argument encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options) +
+            ".")
+        : options &&
+          "as" in options &&
+          "string" !== typeof options.as &&
+          (encountered +=
+            " The `as` option encountered was " +
+            getValueDescriptorExpectingObjectForWarning(options.as) +
+            ".");
+      encountered &&
+        console.error(
+          'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel="modulepreload" as="..." />` tag.%s',
+          encountered
+        );
+      "string" === typeof href &&
+        (options
+          ? ((encountered = getCrossOriginStringAs(
+              options.as,
+              options.crossOrigin
+            )),
+            Internals.d.m(href, {
+              as:
+                "string" === typeof options.as && "script" !== options.as
+                  ? options.as
+                  : void 0,
+              crossOrigin: encountered,
+              integrity:
+                "string" === typeof options.integrity
+                  ? options.integrity
+                  : void 0
+            }))
+          : Internals.d.m(href));
+    };
+    exports.version = "19.1.1";
+  })();
Index: node_modules/react-dom/cjs/react-dom.react-server.production.js
===================================================================
--- node_modules/react-dom/cjs/react-dom.react-server.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/cjs/react-dom.react-server.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,152 @@
+/**
+ * @license React
+ * react-dom.react-server.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react");
+function noop() {}
+var Internals = {
+  d: {
+    f: noop,
+    r: function () {
+      throw Error(
+        "Invalid form element. requestFormReset must be passed a form that was rendered by React."
+      );
+    },
+    D: noop,
+    C: noop,
+    L: noop,
+    m: noop,
+    X: noop,
+    S: noop,
+    M: noop
+  },
+  p: 0,
+  findDOMNode: null
+};
+if (!React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE)
+  throw Error(
+    'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.'
+  );
+function getCrossOriginStringAs(as, input) {
+  if ("font" === as) return "";
+  if ("string" === typeof input)
+    return "use-credentials" === input ? input : "";
+}
+exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
+  Internals;
+exports.preconnect = function (href, options) {
+  "string" === typeof href &&
+    (options
+      ? ((options = options.crossOrigin),
+        (options =
+          "string" === typeof options
+            ? "use-credentials" === options
+              ? options
+              : ""
+            : void 0))
+      : (options = null),
+    Internals.d.C(href, options));
+};
+exports.prefetchDNS = function (href) {
+  "string" === typeof href && Internals.d.D(href);
+};
+exports.preinit = function (href, options) {
+  if ("string" === typeof href && options && "string" === typeof options.as) {
+    var as = options.as,
+      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),
+      integrity =
+        "string" === typeof options.integrity ? options.integrity : void 0,
+      fetchPriority =
+        "string" === typeof options.fetchPriority
+          ? options.fetchPriority
+          : void 0;
+    "style" === as
+      ? Internals.d.S(
+          href,
+          "string" === typeof options.precedence ? options.precedence : void 0,
+          {
+            crossOrigin: crossOrigin,
+            integrity: integrity,
+            fetchPriority: fetchPriority
+          }
+        )
+      : "script" === as &&
+        Internals.d.X(href, {
+          crossOrigin: crossOrigin,
+          integrity: integrity,
+          fetchPriority: fetchPriority,
+          nonce: "string" === typeof options.nonce ? options.nonce : void 0
+        });
+  }
+};
+exports.preinitModule = function (href, options) {
+  if ("string" === typeof href)
+    if ("object" === typeof options && null !== options) {
+      if (null == options.as || "script" === options.as) {
+        var crossOrigin = getCrossOriginStringAs(
+          options.as,
+          options.crossOrigin
+        );
+        Internals.d.M(href, {
+          crossOrigin: crossOrigin,
+          integrity:
+            "string" === typeof options.integrity ? options.integrity : void 0,
+          nonce: "string" === typeof options.nonce ? options.nonce : void 0
+        });
+      }
+    } else null == options && Internals.d.M(href);
+};
+exports.preload = function (href, options) {
+  if (
+    "string" === typeof href &&
+    "object" === typeof options &&
+    null !== options &&
+    "string" === typeof options.as
+  ) {
+    var as = options.as,
+      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);
+    Internals.d.L(href, as, {
+      crossOrigin: crossOrigin,
+      integrity:
+        "string" === typeof options.integrity ? options.integrity : void 0,
+      nonce: "string" === typeof options.nonce ? options.nonce : void 0,
+      type: "string" === typeof options.type ? options.type : void 0,
+      fetchPriority:
+        "string" === typeof options.fetchPriority
+          ? options.fetchPriority
+          : void 0,
+      referrerPolicy:
+        "string" === typeof options.referrerPolicy
+          ? options.referrerPolicy
+          : void 0,
+      imageSrcSet:
+        "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,
+      imageSizes:
+        "string" === typeof options.imageSizes ? options.imageSizes : void 0,
+      media: "string" === typeof options.media ? options.media : void 0
+    });
+  }
+};
+exports.preloadModule = function (href, options) {
+  if ("string" === typeof href)
+    if (options) {
+      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);
+      Internals.d.m(href, {
+        as:
+          "string" === typeof options.as && "script" !== options.as
+            ? options.as
+            : void 0,
+        crossOrigin: crossOrigin,
+        integrity:
+          "string" === typeof options.integrity ? options.integrity : void 0
+      });
+    } else Internals.d.m(href);
+};
+exports.version = "19.1.1";
Index: node_modules/react-dom/client.js
===================================================================
--- node_modules/react-dom/client.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/client.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+'use strict';
+
+function checkDCE() {
+  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
+  if (
+    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||
+    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'
+  ) {
+    return;
+  }
+  if (process.env.NODE_ENV !== 'production') {
+    // This branch is unreachable because this function is only called
+    // in production, but the condition is true only in development.
+    // Therefore if the branch is still here, dead code elimination wasn't
+    // properly applied.
+    // Don't change the message. React DevTools relies on it. Also make sure
+    // this message doesn't occur elsewhere in this function, or it will cause
+    // a false positive.
+    throw new Error('^_^');
+  }
+  try {
+    // Verify that the code above has been dead code eliminated (DCE'd).
+    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);
+  } catch (err) {
+    // DevTools shouldn't crash React, no matter what.
+    // We should still report in case we break this code.
+    console.error(err);
+  }
+}
+
+if (process.env.NODE_ENV === 'production') {
+  // DCE check should happen before ReactDOM bundle executes so that
+  // DevTools can report bad minification during injection.
+  checkDCE();
+  module.exports = require('./cjs/react-dom-client.production.js');
+} else {
+  module.exports = require('./cjs/react-dom-client.development.js');
+}
Index: node_modules/react-dom/client.react-server.js
===================================================================
--- node_modules/react-dom/client.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/client.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+'use strict';
+
+throw new Error(
+  'react-dom/client is not supported in React Server Components.'
+);
Index: node_modules/react-dom/index.js
===================================================================
--- node_modules/react-dom/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+'use strict';
+
+function checkDCE() {
+  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
+  if (
+    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||
+    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'
+  ) {
+    return;
+  }
+  if (process.env.NODE_ENV !== 'production') {
+    // This branch is unreachable because this function is only called
+    // in production, but the condition is true only in development.
+    // Therefore if the branch is still here, dead code elimination wasn't
+    // properly applied.
+    // Don't change the message. React DevTools relies on it. Also make sure
+    // this message doesn't occur elsewhere in this function, or it will cause
+    // a false positive.
+    throw new Error('^_^');
+  }
+  try {
+    // Verify that the code above has been dead code eliminated (DCE'd).
+    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);
+  } catch (err) {
+    // DevTools shouldn't crash React, no matter what.
+    // We should still report in case we break this code.
+    console.error(err);
+  }
+}
+
+if (process.env.NODE_ENV === 'production') {
+  // DCE check should happen before ReactDOM bundle executes so that
+  // DevTools can report bad minification during injection.
+  checkDCE();
+  module.exports = require('./cjs/react-dom.production.js');
+} else {
+  module.exports = require('./cjs/react-dom.development.js');
+}
Index: node_modules/react-dom/package.json
===================================================================
--- node_modules/react-dom/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+{
+  "name": "react-dom",
+  "version": "19.1.1",
+  "description": "React package for working with the DOM.",
+  "main": "index.js",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/facebook/react.git",
+    "directory": "packages/react-dom"
+  },
+  "keywords": [
+    "react"
+  ],
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/facebook/react/issues"
+  },
+  "homepage": "https://react.dev/",
+  "dependencies": {
+    "scheduler": "^0.26.0"
+  },
+  "peerDependencies": {
+    "react": "^19.1.1"
+  },
+  "files": [
+    "LICENSE",
+    "README.md",
+    "client.js",
+    "client.react-server.js",
+    "index.js",
+    "profiling.js",
+    "profiling.react-server.js",
+    "react-dom.react-server.js",
+    "server.browser.js",
+    "server.bun.js",
+    "server.edge.js",
+    "server.js",
+    "server.node.js",
+    "server.react-server.js",
+    "static.browser.js",
+    "static.edge.js",
+    "static.js",
+    "static.node.js",
+    "static.react-server.js",
+    "test-utils.js",
+    "cjs/"
+  ],
+  "exports": {
+    ".": {
+      "react-server": "./react-dom.react-server.js",
+      "default": "./index.js"
+    },
+    "./client": {
+      "react-server": "./client.react-server.js",
+      "default": "./client.js"
+    },
+    "./server": {
+      "react-server": "./server.react-server.js",
+      "workerd": "./server.edge.js",
+      "bun": "./server.bun.js",
+      "deno": "./server.browser.js",
+      "worker": "./server.browser.js",
+      "node": "./server.node.js",
+      "edge-light": "./server.edge.js",
+      "browser": "./server.browser.js",
+      "default": "./server.node.js"
+    },
+    "./server.browser": {
+      "react-server": "./server.react-server.js",
+      "default": "./server.browser.js"
+    },
+    "./server.bun": {
+      "react-server": "./server.react-server.js",
+      "default": "./server.bun.js"
+    },
+    "./server.edge": {
+      "react-server": "./server.react-server.js",
+      "default": "./server.edge.js"
+    },
+    "./server.node": {
+      "react-server": "./server.react-server.js",
+      "default": "./server.node.js"
+    },
+    "./static": {
+      "react-server": "./static.react-server.js",
+      "workerd": "./static.edge.js",
+      "deno": "./static.browser.js",
+      "worker": "./static.browser.js",
+      "node": "./static.node.js",
+      "edge-light": "./static.edge.js",
+      "browser": "./static.browser.js",
+      "default": "./static.node.js"
+    },
+    "./static.browser": {
+      "react-server": "./static.react-server.js",
+      "default": "./static.browser.js"
+    },
+    "./static.edge": {
+      "react-server": "./static.react-server.js",
+      "default": "./static.edge.js"
+    },
+    "./static.node": {
+      "react-server": "./static.react-server.js",
+      "default": "./static.node.js"
+    },
+    "./profiling": {
+      "react-server": "./profiling.react-server.js",
+      "default": "./profiling.js"
+    },
+    "./test-utils": "./test-utils.js",
+    "./package.json": "./package.json"
+  },
+  "browser": {
+    "./server.js": "./server.browser.js",
+    "./static.js": "./static.browser.js"
+  }
+}
Index: node_modules/react-dom/profiling.js
===================================================================
--- node_modules/react-dom/profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+'use strict';
+
+function checkDCE() {
+  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
+  if (
+    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||
+    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'
+  ) {
+    return;
+  }
+  if (process.env.NODE_ENV !== 'production') {
+    // This branch is unreachable because this function is only called
+    // in production, but the condition is true only in development.
+    // Therefore if the branch is still here, dead code elimination wasn't
+    // properly applied.
+    // Don't change the message. React DevTools relies on it. Also make sure
+    // this message doesn't occur elsewhere in this function, or it will cause
+    // a false positive.
+    throw new Error('^_^');
+  }
+  try {
+    // Verify that the code above has been dead code eliminated (DCE'd).
+    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);
+  } catch (err) {
+    // DevTools shouldn't crash React, no matter what.
+    // We should still report in case we break this code.
+    console.error(err);
+  }
+}
+
+if (process.env.NODE_ENV === 'production') {
+  // DCE check should happen before ReactDOM bundle executes so that
+  // DevTools can report bad minification during injection.
+  checkDCE();
+  module.exports = require('./cjs/react-dom-profiling.profiling.js');
+} else {
+  module.exports = require('./cjs/react-dom-profiling.development.js');
+}
Index: node_modules/react-dom/profiling.react-server.js
===================================================================
--- node_modules/react-dom/profiling.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/profiling.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+'use strict';
+
+throw new Error(
+  'react-dom/profiling is not supported in React Server Components.'
+);
Index: node_modules/react-dom/react-dom.react-server.js
===================================================================
--- node_modules/react-dom/react-dom.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/react-dom.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-dom.react-server.production.js');
+} else {
+  module.exports = require('./cjs/react-dom.react-server.development.js');
+}
Index: node_modules/react-dom/server.browser.js
===================================================================
--- node_modules/react-dom/server.browser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/server.browser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+var l, s;
+if (process.env.NODE_ENV === 'production') {
+  l = require('./cjs/react-dom-server-legacy.browser.production.js');
+  s = require('./cjs/react-dom-server.browser.production.js');
+} else {
+  l = require('./cjs/react-dom-server-legacy.browser.development.js');
+  s = require('./cjs/react-dom-server.browser.development.js');
+}
+
+exports.version = l.version;
+exports.renderToString = l.renderToString;
+exports.renderToStaticMarkup = l.renderToStaticMarkup;
+exports.renderToReadableStream = s.renderToReadableStream;
+if (s.resume) {
+  exports.resume = s.resume;
+}
Index: node_modules/react-dom/server.bun.js
===================================================================
--- node_modules/react-dom/server.bun.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/server.bun.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+var b;
+var l;
+if (process.env.NODE_ENV === 'production') {
+  b = require('./cjs/react-dom-server.bun.production.js');
+  l = require('./cjs/react-dom-server-legacy.browser.production.js');
+} else {
+  b = require('./cjs/react-dom-server.bun.development.js');
+  l = require('./cjs/react-dom-server-legacy.browser.development.js');
+}
+
+exports.version = b.version;
+exports.renderToReadableStream = b.renderToReadableStream;
+if (b.resume) {
+  exports.resume = b.resume;
+}
+exports.renderToString = l.renderToString;
+exports.renderToStaticMarkup = l.renderToStaticMarkup;
Index: node_modules/react-dom/server.edge.js
===================================================================
--- node_modules/react-dom/server.edge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/server.edge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+'use strict';
+
+var b;
+var l;
+if (process.env.NODE_ENV === 'production') {
+  b = require('./cjs/react-dom-server.edge.production.js');
+  l = require('./cjs/react-dom-server-legacy.browser.production.js');
+} else {
+  b = require('./cjs/react-dom-server.edge.development.js');
+  l = require('./cjs/react-dom-server-legacy.browser.development.js');
+}
+
+exports.version = b.version;
+exports.renderToReadableStream = b.renderToReadableStream;
+exports.renderToString = l.renderToString;
+exports.renderToStaticMarkup = l.renderToStaticMarkup;
+if (b.resume) {
+  exports.resume = b.resume;
+}
Index: node_modules/react-dom/server.js
===================================================================
--- node_modules/react-dom/server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('./server.node');
Index: node_modules/react-dom/server.node.js
===================================================================
--- node_modules/react-dom/server.node.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/server.node.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+'use strict';
+
+var l, s;
+if (process.env.NODE_ENV === 'production') {
+  l = require('./cjs/react-dom-server-legacy.node.production.js');
+  s = require('./cjs/react-dom-server.node.production.js');
+} else {
+  l = require('./cjs/react-dom-server-legacy.node.development.js');
+  s = require('./cjs/react-dom-server.node.development.js');
+}
+
+exports.version = l.version;
+exports.renderToString = l.renderToString;
+exports.renderToStaticMarkup = l.renderToStaticMarkup;
+exports.renderToPipeableStream = s.renderToPipeableStream;
+if (s.resumeToPipeableStream) {
+  exports.resumeToPipeableStream = s.resumeToPipeableStream;
+}
Index: node_modules/react-dom/server.react-server.js
===================================================================
--- node_modules/react-dom/server.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/server.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+'use strict';
+
+throw new Error(
+  'react-dom/server is not supported in React Server Components.'
+);
Index: node_modules/react-dom/static.browser.js
===================================================================
--- node_modules/react-dom/static.browser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/static.browser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+var s;
+if (process.env.NODE_ENV === 'production') {
+  s = require('./cjs/react-dom-server.browser.production.js');
+} else {
+  s = require('./cjs/react-dom-server.browser.development.js');
+}
+
+exports.version = s.version;
+exports.prerender = s.prerender;
+exports.resumeAndPrerender = s.resumeAndPrerender;
Index: node_modules/react-dom/static.edge.js
===================================================================
--- node_modules/react-dom/static.edge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/static.edge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+var s;
+if (process.env.NODE_ENV === 'production') {
+  s = require('./cjs/react-dom-server.edge.production.js');
+} else {
+  s = require('./cjs/react-dom-server.edge.development.js');
+}
+
+exports.version = s.version;
+exports.prerender = s.prerender;
+exports.resumeAndPrerender = s.resumeAndPrerender;
Index: node_modules/react-dom/static.js
===================================================================
--- node_modules/react-dom/static.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/static.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('./static.node');
Index: node_modules/react-dom/static.node.js
===================================================================
--- node_modules/react-dom/static.node.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/static.node.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+'use strict';
+
+var s;
+if (process.env.NODE_ENV === 'production') {
+  s = require('./cjs/react-dom-server.node.production.js');
+} else {
+  s = require('./cjs/react-dom-server.node.development.js');
+}
+
+exports.version = s.version;
+exports.prerenderToNodeStream = s.prerenderToNodeStream;
+exports.resumeAndPrerenderToNodeStream = s.resumeAndPrerenderToNodeStream;
Index: node_modules/react-dom/static.react-server.js
===================================================================
--- node_modules/react-dom/static.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/static.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+'use strict';
+
+throw new Error(
+  'react-dom/static is not supported in React Server Components.'
+);
Index: node_modules/react-dom/test-utils.js
===================================================================
--- node_modules/react-dom/test-utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-dom/test-utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-dom-test-utils.production.js');
+} else {
+  module.exports = require('./cjs/react-dom-test-utils.development.js');
+}
Index: node_modules/react-fit/LICENSE
===================================================================
--- node_modules/react-fit/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018–2024 Wojciech Maj
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/react-fit/README.md
===================================================================
--- node_modules/react-fit/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,125 @@
+[![npm](https://img.shields.io/npm/v/react-fit.svg)](https://www.npmjs.com/package/react-fit) ![downloads](https://img.shields.io/npm/dt/react-fit.svg) [![CI](https://github.com/wojtekmaj/react-fit/actions/workflows/ci.yml/badge.svg)](https://github.com/wojtekmaj/react-fit/actions)
+
+# React-Fit
+
+A component that aligns its child relatively to its parent while being aware where it may and may not fit.
+
+## tl;dr
+
+- Install by executing `npm install react-fit` or `yarn add react-fit`.
+- Import by adding `import Fit from 'react-fit'`.
+- Do stuff with it!
+  ```tsx
+  function ElementWithChild() {
+    return (
+      <Parent>
+        <Fit>
+          <PopoverChild />
+        </Fit>
+      </Parent>
+    );
+  }
+  ```
+
+## Getting started
+
+### Compatibility
+
+Your project needs to use React 16.8 or later.
+
+### Installation
+
+Add React-Fit to your project by executing `npm install react-fit` or `yarn add react-fit`.
+
+## How does it work?
+
+1. By default, the element provided to `<Fit />` as a child is displayed below its parent, aligned to the left.
+2. If the element can't fit in this position and collides with bottom and/or right border of the container, `<Fit />` checks if there's more space for the element on the other side(s) of the axis/axes the collision(s) has been detected on. If so, the element is moved above its parent and/or aligned to the right, depending on the collision axis.
+3. If the element still can't fit where it's placed, `<Fit />` decreases the element's size. If `min-width`/`min-height` are provided, they will be respected.
+
+## Positioning the element
+
+### Vertical axis (default)
+
+By default, the element is displayed below its parent, aligned to the left of its parent.
+
+```
+┌────────────┐
+│   Parent   │
+├────────────┴────────────┐
+│                         │
+│         Child           │
+│                         │
+└─────────────────────────┘
+```
+
+- To display the element above: provide `invertAxis` flag.
+- To align the element to the right: provide `invertSecondaryAxis` flag.
+
+### Horizontal axis (`mainAxis="x"`)
+
+By providing `mainAxis="x"` to `<Fit />`, the element is displayed on the right of its parent, aligned to the top of its parent.
+
+```
+┌────────────┬─────────────────────────┐
+│   Parent   │                         │
+└────────────┤         Child           │
+             │                         │
+             └─────────────────────────┘
+```
+
+- To display the element on the left: provide `invertAxis` flag.
+- To align the element to the bottom: provide `invertSecondaryAxis` flag.
+
+### Spacing
+
+By default, React-Fit leaves 8px of space between its child and the borders of the container.
+
+```
+┌──────────────────────────────────────────┐
+│ ┌────────────┐                           │
+│ │   Parent   │                           │
+│ ├────────────┴────────────┐              │
+│ │                         │              │
+│ │         Child           │              │
+│ │                         │              │
+│ └─────────────────────────┘              │
+└──────────────────────────────────────────┘
+```
+
+If you wish to change this spacing, you can provide `spacing` to `<Fit />`. For example, if you wish for the child to touch the borders of the container, decrease the spacing by providing `spacing={0}` to `<Fit />`.
+
+```
+┌──────────────────────────────────────────┐
+│ ┌────────────┐                           │
+│ │   Parent   │                           │
+│ ├────────────┴────────────┐              │
+│ │                         │              │
+│ │         Child           │              │
+│ │      (now higher)       │              │
+│ │                         │              │
+└─┴─────────────────────────┴──────────────┘
+```
+
+You can also provide different spacing for each side by providing an object, for example `spacing={{ top: 10, bottom: 20, left: 30, right: 40 }}`, to `<Fit />`. **Note:** Memoize the object or define it outside render function to avoid unnecessary re-renders.
+
+## Styling
+
+To avoid unnecessary style recalculations that may be caused by React-Fit applying the styles needed to make it work properly, the element should have absolute position, and its parent element should have relative or absolute position.
+
+## License
+
+The MIT License.
+
+## Author
+
+<table>
+  <tr>
+    <td >
+      <img src="https://avatars.githubusercontent.com/u/5426427?v=4&s=128" width="64" height="64" alt="Wojciech Maj">
+    </td>
+    <td>
+      <a href="https://github.com/wojtekmaj">Wojciech Maj</a>
+    </td>
+  </tr>
+</table>
Index: node_modules/react-fit/dist/cjs/Fit.d.ts
===================================================================
--- node_modules/react-fit/dist/cjs/Fit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/dist/cjs/Fit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/// <reference types="react" />
+type SpacingKeys = 'bottom' | 'left' | 'right' | 'top';
+type Spacing = number | {
+    [key in SpacingKeys]: number;
+};
+export type FitProps = {
+    children: React.ReactElement;
+    invertAxis?: boolean;
+    invertSecondaryAxis?: boolean;
+    mainAxis?: 'x' | 'y';
+    spacing?: number | Spacing;
+};
+export default function Fit({ children, invertAxis, invertSecondaryAxis, mainAxis, spacing, }: FitProps): JSX.Element;
+export {};
Index: node_modules/react-fit/dist/cjs/Fit.js
===================================================================
--- node_modules/react-fit/dist/cjs/Fit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/dist/cjs/Fit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,227 @@
+"use strict";
+'use client';
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var react_1 = require("react");
+var detect_element_overflow_1 = __importDefault(require("detect-element-overflow"));
+var warning_1 = __importDefault(require("warning"));
+var isBrowser = typeof document !== 'undefined';
+var isMutationObserverSupported = isBrowser && 'MutationObserver' in window;
+function capitalize(string) {
+    return (string.charAt(0).toUpperCase() + string.slice(1));
+}
+function findScrollContainer(element) {
+    var parent = element.parentElement;
+    while (parent) {
+        var overflow = window.getComputedStyle(parent).overflow;
+        if (overflow.split(' ').every(function (o) { return o === 'auto' || o === 'scroll'; })) {
+            return parent;
+        }
+        parent = parent.parentElement;
+    }
+    return document.documentElement;
+}
+function alignAxis(_a) {
+    var axis = _a.axis, container = _a.container, element = _a.element, invertAxis = _a.invertAxis, scrollContainer = _a.scrollContainer, secondary = _a.secondary, spacing = _a.spacing;
+    var style = window.getComputedStyle(element);
+    var parent = container.parentElement;
+    if (!parent) {
+        return;
+    }
+    var scrollContainerCollisions = (0, detect_element_overflow_1.default)(parent, scrollContainer);
+    var documentCollisions = (0, detect_element_overflow_1.default)(parent, document.documentElement);
+    var isX = axis === 'x';
+    var startProperty = isX ? 'left' : 'top';
+    var endProperty = isX ? 'right' : 'bottom';
+    var sizeProperty = isX ? 'width' : 'height';
+    var overflowStartProperty = "overflow".concat(capitalize(startProperty));
+    var overflowEndProperty = "overflow".concat(capitalize(endProperty));
+    var scrollProperty = "scroll".concat(capitalize(startProperty));
+    var uppercasedSizeProperty = capitalize(sizeProperty);
+    var offsetSizeProperty = "offset".concat(uppercasedSizeProperty);
+    var clientSizeProperty = "client".concat(uppercasedSizeProperty);
+    var minSizeProperty = "min-".concat(sizeProperty);
+    var scrollbarWidth = scrollContainer[offsetSizeProperty] - scrollContainer[clientSizeProperty];
+    var startSpacing = typeof spacing === 'object' ? spacing[startProperty] : spacing;
+    var availableStartSpace = -Math.max(scrollContainerCollisions[overflowStartProperty], documentCollisions[overflowStartProperty] + document.documentElement[scrollProperty]) - startSpacing;
+    var endSpacing = typeof spacing === 'object' ? spacing[endProperty] : spacing;
+    var availableEndSpace = -Math.max(scrollContainerCollisions[overflowEndProperty], documentCollisions[overflowEndProperty] - document.documentElement[scrollProperty]) -
+        endSpacing -
+        scrollbarWidth;
+    if (secondary) {
+        availableStartSpace += parent[clientSizeProperty];
+        availableEndSpace += parent[clientSizeProperty];
+    }
+    var offsetSize = element[offsetSizeProperty];
+    function displayStart() {
+        element.style[startProperty] = 'auto';
+        element.style[endProperty] = secondary ? '0' : '100%';
+    }
+    function displayEnd() {
+        element.style[startProperty] = secondary ? '0' : '100%';
+        element.style[endProperty] = 'auto';
+    }
+    function displayIfFits(availableSpace, display) {
+        var fits = offsetSize <= availableSpace;
+        if (fits) {
+            display();
+        }
+        return fits;
+    }
+    function displayStartIfFits() {
+        return displayIfFits(availableStartSpace, displayStart);
+    }
+    function displayEndIfFits() {
+        return displayIfFits(availableEndSpace, displayEnd);
+    }
+    function displayWhereverShrinkedFits() {
+        var moreSpaceStart = availableStartSpace > availableEndSpace;
+        var rawMinSize = style.getPropertyValue(minSizeProperty);
+        var minSize = rawMinSize ? parseInt(rawMinSize, 10) : null;
+        function shrinkToSize(size) {
+            (0, warning_1.default)(!minSize || size >= minSize, "<Fit />'s child will not fit anywhere with its current ".concat(minSizeProperty, " of ").concat(minSize, "px."));
+            var newSize = Math.max(size, minSize || 0);
+            (0, warning_1.default)(false, "<Fit />'s child needed to have its ".concat(sizeProperty, " decreased to ").concat(newSize, "px."));
+            element.style[sizeProperty] = "".concat(newSize, "px");
+        }
+        if (moreSpaceStart) {
+            shrinkToSize(availableStartSpace);
+            displayStart();
+        }
+        else {
+            shrinkToSize(availableEndSpace);
+            displayEnd();
+        }
+    }
+    var fits;
+    if (invertAxis) {
+        fits = displayStartIfFits() || displayEndIfFits();
+    }
+    else {
+        fits = displayEndIfFits() || displayStartIfFits();
+    }
+    if (!fits) {
+        displayWhereverShrinkedFits();
+    }
+}
+function alignMainAxis(args) {
+    alignAxis(args);
+}
+function alignSecondaryAxis(args) {
+    alignAxis(__assign(__assign({}, args), { axis: args.axis === 'x' ? 'y' : 'x', secondary: true }));
+}
+function alignBothAxis(args) {
+    var invertAxis = args.invertAxis, invertSecondaryAxis = args.invertSecondaryAxis, commonArgs = __rest(args, ["invertAxis", "invertSecondaryAxis"]);
+    alignMainAxis(__assign(__assign({}, commonArgs), { invertAxis: invertAxis }));
+    alignSecondaryAxis(__assign(__assign({}, commonArgs), { invertAxis: invertSecondaryAxis }));
+}
+function Fit(_a) {
+    var children = _a.children, invertAxis = _a.invertAxis, invertSecondaryAxis = _a.invertSecondaryAxis, _b = _a.mainAxis, mainAxis = _b === void 0 ? 'y' : _b, _c = _a.spacing, spacing = _c === void 0 ? 8 : _c;
+    var container = (0, react_1.useRef)(undefined);
+    var element = (0, react_1.useRef)(undefined);
+    var elementWidth = (0, react_1.useRef)(undefined);
+    var elementHeight = (0, react_1.useRef)(undefined);
+    var scrollContainer = (0, react_1.useRef)(undefined);
+    var fit = (0, react_1.useCallback)(function () {
+        if (!scrollContainer.current || !container.current || !element.current) {
+            return;
+        }
+        var currentElementWidth = element.current.clientWidth;
+        var currentElementHeight = element.current.clientHeight;
+        // No need to recalculate - already did that for current dimensions
+        if (elementWidth.current === currentElementWidth &&
+            elementHeight.current === currentElementHeight) {
+            return;
+        }
+        // Save the dimensions so that we know we don't need to repeat the function if unchanged
+        elementWidth.current = currentElementWidth;
+        elementHeight.current = currentElementHeight;
+        var parent = container.current.parentElement;
+        // Container was unmounted
+        if (!parent) {
+            return;
+        }
+        /**
+         * We need to ensure that <Fit />'s child has a absolute position. Otherwise,
+         * we wouldn't be able to place the child in the correct position.
+         */
+        var style = window.getComputedStyle(element.current);
+        var position = style.position;
+        if (position !== 'absolute') {
+            element.current.style.position = 'absolute';
+        }
+        /**
+         * We need to ensure that <Fit />'s parent has a relative or absolute position. Otherwise,
+         * we wouldn't be able to place the child in the correct position.
+         */
+        var parentStyle = window.getComputedStyle(parent);
+        var parentPosition = parentStyle.position;
+        if (parentPosition !== 'relative' && parentPosition !== 'absolute') {
+            parent.style.position = 'relative';
+        }
+        alignBothAxis({
+            axis: mainAxis,
+            container: container.current,
+            element: element.current,
+            invertAxis: invertAxis,
+            invertSecondaryAxis: invertSecondaryAxis,
+            scrollContainer: scrollContainer.current,
+            spacing: spacing,
+        });
+    }, [invertAxis, invertSecondaryAxis, mainAxis, spacing]);
+    var child = react_1.Children.only(children);
+    (0, react_1.useEffect)(function () {
+        fit();
+        function onMutation() {
+            fit();
+        }
+        if (isMutationObserverSupported && element.current) {
+            var mutationObserver = new MutationObserver(onMutation);
+            mutationObserver.observe(element.current, {
+                attributes: true,
+                attributeFilter: ['class', 'style'],
+            });
+        }
+    }, [fit]);
+    function assignRefs(domElement) {
+        if (!domElement || !(domElement instanceof HTMLElement)) {
+            return;
+        }
+        element.current = domElement;
+        scrollContainer.current = findScrollContainer(domElement);
+    }
+    return ((0, jsx_runtime_1.jsx)("span", { ref: function (domContainer) {
+            if (!domContainer) {
+                return;
+            }
+            container.current = domContainer;
+            var domElement = domContainer === null || domContainer === void 0 ? void 0 : domContainer.firstElementChild;
+            assignRefs(domElement);
+        }, style: { display: 'contents' }, children: child }));
+}
+exports.default = Fit;
Index: node_modules/react-fit/dist/cjs/index.d.ts
===================================================================
--- node_modules/react-fit/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import Fit from './Fit.js';
+export type { FitProps } from './Fit.js';
+export { Fit };
+export default Fit;
Index: node_modules/react-fit/dist/cjs/index.js
===================================================================
--- node_modules/react-fit/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Fit = void 0;
+var Fit_js_1 = __importDefault(require("./Fit.js"));
+exports.Fit = Fit_js_1.default;
+exports.default = Fit_js_1.default;
Index: node_modules/react-fit/dist/cjs/package.json
===================================================================
--- node_modules/react-fit/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
Index: node_modules/react-fit/dist/esm/Fit.d.ts
===================================================================
--- node_modules/react-fit/dist/esm/Fit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/dist/esm/Fit.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/// <reference types="react" />
+type SpacingKeys = 'bottom' | 'left' | 'right' | 'top';
+type Spacing = number | {
+    [key in SpacingKeys]: number;
+};
+export type FitProps = {
+    children: React.ReactElement;
+    invertAxis?: boolean;
+    invertSecondaryAxis?: boolean;
+    mainAxis?: 'x' | 'y';
+    spacing?: number | Spacing;
+};
+export default function Fit({ children, invertAxis, invertSecondaryAxis, mainAxis, spacing, }: FitProps): JSX.Element;
+export {};
Index: node_modules/react-fit/dist/esm/Fit.js
===================================================================
--- node_modules/react-fit/dist/esm/Fit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/dist/esm/Fit.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,221 @@
+'use client';
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+import { jsx as _jsx } from "react/jsx-runtime";
+import { Children, useCallback, useEffect, useRef } from 'react';
+import detectElementOverflow from 'detect-element-overflow';
+import warning from 'warning';
+var isBrowser = typeof document !== 'undefined';
+var isMutationObserverSupported = isBrowser && 'MutationObserver' in window;
+function capitalize(string) {
+    return (string.charAt(0).toUpperCase() + string.slice(1));
+}
+function findScrollContainer(element) {
+    var parent = element.parentElement;
+    while (parent) {
+        var overflow = window.getComputedStyle(parent).overflow;
+        if (overflow.split(' ').every(function (o) { return o === 'auto' || o === 'scroll'; })) {
+            return parent;
+        }
+        parent = parent.parentElement;
+    }
+    return document.documentElement;
+}
+function alignAxis(_a) {
+    var axis = _a.axis, container = _a.container, element = _a.element, invertAxis = _a.invertAxis, scrollContainer = _a.scrollContainer, secondary = _a.secondary, spacing = _a.spacing;
+    var style = window.getComputedStyle(element);
+    var parent = container.parentElement;
+    if (!parent) {
+        return;
+    }
+    var scrollContainerCollisions = detectElementOverflow(parent, scrollContainer);
+    var documentCollisions = detectElementOverflow(parent, document.documentElement);
+    var isX = axis === 'x';
+    var startProperty = isX ? 'left' : 'top';
+    var endProperty = isX ? 'right' : 'bottom';
+    var sizeProperty = isX ? 'width' : 'height';
+    var overflowStartProperty = "overflow".concat(capitalize(startProperty));
+    var overflowEndProperty = "overflow".concat(capitalize(endProperty));
+    var scrollProperty = "scroll".concat(capitalize(startProperty));
+    var uppercasedSizeProperty = capitalize(sizeProperty);
+    var offsetSizeProperty = "offset".concat(uppercasedSizeProperty);
+    var clientSizeProperty = "client".concat(uppercasedSizeProperty);
+    var minSizeProperty = "min-".concat(sizeProperty);
+    var scrollbarWidth = scrollContainer[offsetSizeProperty] - scrollContainer[clientSizeProperty];
+    var startSpacing = typeof spacing === 'object' ? spacing[startProperty] : spacing;
+    var availableStartSpace = -Math.max(scrollContainerCollisions[overflowStartProperty], documentCollisions[overflowStartProperty] + document.documentElement[scrollProperty]) - startSpacing;
+    var endSpacing = typeof spacing === 'object' ? spacing[endProperty] : spacing;
+    var availableEndSpace = -Math.max(scrollContainerCollisions[overflowEndProperty], documentCollisions[overflowEndProperty] - document.documentElement[scrollProperty]) -
+        endSpacing -
+        scrollbarWidth;
+    if (secondary) {
+        availableStartSpace += parent[clientSizeProperty];
+        availableEndSpace += parent[clientSizeProperty];
+    }
+    var offsetSize = element[offsetSizeProperty];
+    function displayStart() {
+        element.style[startProperty] = 'auto';
+        element.style[endProperty] = secondary ? '0' : '100%';
+    }
+    function displayEnd() {
+        element.style[startProperty] = secondary ? '0' : '100%';
+        element.style[endProperty] = 'auto';
+    }
+    function displayIfFits(availableSpace, display) {
+        var fits = offsetSize <= availableSpace;
+        if (fits) {
+            display();
+        }
+        return fits;
+    }
+    function displayStartIfFits() {
+        return displayIfFits(availableStartSpace, displayStart);
+    }
+    function displayEndIfFits() {
+        return displayIfFits(availableEndSpace, displayEnd);
+    }
+    function displayWhereverShrinkedFits() {
+        var moreSpaceStart = availableStartSpace > availableEndSpace;
+        var rawMinSize = style.getPropertyValue(minSizeProperty);
+        var minSize = rawMinSize ? parseInt(rawMinSize, 10) : null;
+        function shrinkToSize(size) {
+            warning(!minSize || size >= minSize, "<Fit />'s child will not fit anywhere with its current ".concat(minSizeProperty, " of ").concat(minSize, "px."));
+            var newSize = Math.max(size, minSize || 0);
+            warning(false, "<Fit />'s child needed to have its ".concat(sizeProperty, " decreased to ").concat(newSize, "px."));
+            element.style[sizeProperty] = "".concat(newSize, "px");
+        }
+        if (moreSpaceStart) {
+            shrinkToSize(availableStartSpace);
+            displayStart();
+        }
+        else {
+            shrinkToSize(availableEndSpace);
+            displayEnd();
+        }
+    }
+    var fits;
+    if (invertAxis) {
+        fits = displayStartIfFits() || displayEndIfFits();
+    }
+    else {
+        fits = displayEndIfFits() || displayStartIfFits();
+    }
+    if (!fits) {
+        displayWhereverShrinkedFits();
+    }
+}
+function alignMainAxis(args) {
+    alignAxis(args);
+}
+function alignSecondaryAxis(args) {
+    alignAxis(__assign(__assign({}, args), { axis: args.axis === 'x' ? 'y' : 'x', secondary: true }));
+}
+function alignBothAxis(args) {
+    var invertAxis = args.invertAxis, invertSecondaryAxis = args.invertSecondaryAxis, commonArgs = __rest(args, ["invertAxis", "invertSecondaryAxis"]);
+    alignMainAxis(__assign(__assign({}, commonArgs), { invertAxis: invertAxis }));
+    alignSecondaryAxis(__assign(__assign({}, commonArgs), { invertAxis: invertSecondaryAxis }));
+}
+export default function Fit(_a) {
+    var children = _a.children, invertAxis = _a.invertAxis, invertSecondaryAxis = _a.invertSecondaryAxis, _b = _a.mainAxis, mainAxis = _b === void 0 ? 'y' : _b, _c = _a.spacing, spacing = _c === void 0 ? 8 : _c;
+    var container = useRef(undefined);
+    var element = useRef(undefined);
+    var elementWidth = useRef(undefined);
+    var elementHeight = useRef(undefined);
+    var scrollContainer = useRef(undefined);
+    var fit = useCallback(function () {
+        if (!scrollContainer.current || !container.current || !element.current) {
+            return;
+        }
+        var currentElementWidth = element.current.clientWidth;
+        var currentElementHeight = element.current.clientHeight;
+        // No need to recalculate - already did that for current dimensions
+        if (elementWidth.current === currentElementWidth &&
+            elementHeight.current === currentElementHeight) {
+            return;
+        }
+        // Save the dimensions so that we know we don't need to repeat the function if unchanged
+        elementWidth.current = currentElementWidth;
+        elementHeight.current = currentElementHeight;
+        var parent = container.current.parentElement;
+        // Container was unmounted
+        if (!parent) {
+            return;
+        }
+        /**
+         * We need to ensure that <Fit />'s child has a absolute position. Otherwise,
+         * we wouldn't be able to place the child in the correct position.
+         */
+        var style = window.getComputedStyle(element.current);
+        var position = style.position;
+        if (position !== 'absolute') {
+            element.current.style.position = 'absolute';
+        }
+        /**
+         * We need to ensure that <Fit />'s parent has a relative or absolute position. Otherwise,
+         * we wouldn't be able to place the child in the correct position.
+         */
+        var parentStyle = window.getComputedStyle(parent);
+        var parentPosition = parentStyle.position;
+        if (parentPosition !== 'relative' && parentPosition !== 'absolute') {
+            parent.style.position = 'relative';
+        }
+        alignBothAxis({
+            axis: mainAxis,
+            container: container.current,
+            element: element.current,
+            invertAxis: invertAxis,
+            invertSecondaryAxis: invertSecondaryAxis,
+            scrollContainer: scrollContainer.current,
+            spacing: spacing,
+        });
+    }, [invertAxis, invertSecondaryAxis, mainAxis, spacing]);
+    var child = Children.only(children);
+    useEffect(function () {
+        fit();
+        function onMutation() {
+            fit();
+        }
+        if (isMutationObserverSupported && element.current) {
+            var mutationObserver = new MutationObserver(onMutation);
+            mutationObserver.observe(element.current, {
+                attributes: true,
+                attributeFilter: ['class', 'style'],
+            });
+        }
+    }, [fit]);
+    function assignRefs(domElement) {
+        if (!domElement || !(domElement instanceof HTMLElement)) {
+            return;
+        }
+        element.current = domElement;
+        scrollContainer.current = findScrollContainer(domElement);
+    }
+    return (_jsx("span", { ref: function (domContainer) {
+            if (!domContainer) {
+                return;
+            }
+            container.current = domContainer;
+            var domElement = domContainer === null || domContainer === void 0 ? void 0 : domContainer.firstElementChild;
+            assignRefs(domElement);
+        }, style: { display: 'contents' }, children: child }));
+}
Index: node_modules/react-fit/dist/esm/index.d.ts
===================================================================
--- node_modules/react-fit/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import Fit from './Fit.js';
+export type { FitProps } from './Fit.js';
+export { Fit };
+export default Fit;
Index: node_modules/react-fit/dist/esm/index.js
===================================================================
--- node_modules/react-fit/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import Fit from './Fit.js';
+export { Fit };
+export default Fit;
Index: node_modules/react-fit/package.json
===================================================================
--- node_modules/react-fit/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,87 @@
+{
+  "name": "react-fit",
+  "version": "2.0.1",
+  "description": "Fit a popover element on the screen.",
+  "type": "module",
+  "sideEffects": false,
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/esm/index.js",
+  "source": "./src/index.ts",
+  "types": "./dist/cjs/index.d.ts",
+  "exports": {
+    "import": "./dist/esm/index.js",
+    "require": "./dist/cjs/index.js"
+  },
+  "scripts": {
+    "build": "yarn build-esm && yarn build-cjs && yarn build-cjs-package",
+    "build-esm": "tsc --project tsconfig.build.json --outDir dist/esm",
+    "build-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs --moduleResolution node --verbatimModuleSyntax false",
+    "build-cjs-package": "echo '{\n  \"type\": \"commonjs\"\n}' > dist/cjs/package.json",
+    "clean": "rimraf dist",
+    "format": "prettier --check . --cache",
+    "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
+    "prepack": "yarn clean && yarn build",
+    "test": "yarn lint && yarn tsc && yarn format && yarn unit",
+    "tsc": "tsc",
+    "unit": "vitest",
+    "watch": "yarn build-esm --watch & yarn build-cjs --watch"
+  },
+  "keywords": [
+    "react",
+    "collision",
+    "collision-detection",
+    "position"
+  ],
+  "author": {
+    "name": "Wojciech Maj",
+    "email": "kontakt@wojtekmaj.pl"
+  },
+  "license": "MIT",
+  "dependencies": {
+    "detect-element-overflow": "^1.4.0",
+    "warning": "^4.0.0"
+  },
+  "devDependencies": {
+    "@testing-library/dom": "^10.0.0",
+    "@testing-library/jest-dom": "^6.0.0",
+    "@testing-library/react": "^15.0.0",
+    "@types/react": "*",
+    "@types/warning": "^3.0.0",
+    "eslint": "^8.56.0",
+    "eslint-config-wojtekmaj": "^1.0.0",
+    "happy-dom": "^12.6.0",
+    "prettier": "^3.2.0",
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0",
+    "rimraf": "^3.0.0",
+    "typescript": "^5.4.2",
+    "vitest": "^1.0.2"
+  },
+  "peerDependencies": {
+    "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+    "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+    "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+  },
+  "peerDependenciesMeta": {
+    "@types/react": {
+      "optional": true
+    },
+    "@types/react-dom": {
+      "optional": true
+    }
+  },
+  "publishConfig": {
+    "access": "public",
+    "provenance": true
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/wojtekmaj/react-fit.git",
+    "directory": "packages/react-fit"
+  },
+  "funding": "https://github.com/wojtekmaj/react-fit?sponsor=1"
+}
Index: node_modules/react-fit/src/Fit.spec.tsx
===================================================================
--- node_modules/react-fit/src/Fit.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/src/Fit.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+import { describe, expect, it } from 'vitest';
+import { render } from '@testing-library/react';
+
+import Fit from './Fit.js';
+
+describe('<Fit /> component', () => {
+  it('renders properly', () => {
+    const { container } = render(
+      <Fit>
+        <span />
+      </Fit>,
+    );
+
+    expect(container).toMatchSnapshot();
+  });
+
+  it('renders properly given mainAxis = "x"', () => {
+    const { container } = render(
+      <Fit mainAxis="x">
+        <span />
+      </Fit>,
+    );
+
+    expect(container).toMatchSnapshot();
+  });
+
+  it('renders properly given mainAxis = "y"', () => {
+    const { container } = render(
+      <Fit mainAxis="y">
+        <span />
+      </Fit>,
+    );
+
+    expect(container).toMatchSnapshot();
+  });
+
+  it('renders properly given React component as child', () => {
+    function Child() {
+      return <span />;
+    }
+
+    const { container } = render(
+      <Fit>
+        <Child />
+      </Fit>,
+    );
+
+    expect(container).toMatchSnapshot();
+  });
+
+  it('renders properly given element with ref prop as child', () => {
+    const { container } = render(
+      <Fit>
+        <span
+          ref={() => {
+            // Intentionally empty
+          }}
+        />
+      </Fit>,
+    );
+
+    expect(container).toMatchSnapshot();
+  });
+});
Index: node_modules/react-fit/src/Fit.tsx
===================================================================
--- node_modules/react-fit/src/Fit.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/src/Fit.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,333 @@
+'use client';
+
+import { Children, useCallback, useEffect, useRef } from 'react';
+import detectElementOverflow from 'detect-element-overflow';
+import warning from 'warning';
+
+type SpacingKeys = 'bottom' | 'left' | 'right' | 'top';
+
+type Spacing = number | { [key in SpacingKeys]: number };
+
+type AlignAxisOptions = {
+  axis: 'x' | 'y';
+  container: HTMLElement;
+  element: HTMLElement;
+  invertAxis?: boolean;
+  scrollContainer: HTMLElement;
+  secondary?: boolean;
+  spacing: Spacing;
+};
+
+type AlignBothAxisOptions = AlignAxisOptions & {
+  invertSecondaryAxis?: boolean;
+};
+
+type SizeProperty = 'width' | 'height';
+type StartProperty = 'left' | 'top';
+type EndProperty = 'right' | 'bottom';
+
+type ClientSizeProperty = 'clientWidth' | 'clientHeight';
+type MinSizeProperty = 'min-width' | 'min-height';
+type OffsetProperty = 'offsetWidth' | 'offsetHeight';
+type OverflowProperty = 'overflowLeft' | 'overflowRight' | 'overflowTop' | 'overflowBottom';
+type ScrollProperty = 'scrollLeft' | 'scrollTop';
+
+const isBrowser = typeof document !== 'undefined';
+
+const isMutationObserverSupported = isBrowser && 'MutationObserver' in window;
+
+function capitalize<T extends string>(string: T): Capitalize<T> {
+  return (string.charAt(0).toUpperCase() + string.slice(1)) as Capitalize<T>;
+}
+
+function findScrollContainer(element: HTMLElement): HTMLElement {
+  let parent = element.parentElement;
+  while (parent) {
+    const { overflow } = window.getComputedStyle(parent);
+    if (overflow.split(' ').every((o) => o === 'auto' || o === 'scroll')) {
+      return parent;
+    }
+    parent = parent.parentElement;
+  }
+
+  return document.documentElement;
+}
+
+function alignAxis({
+  axis,
+  container,
+  element,
+  invertAxis,
+  scrollContainer,
+  secondary,
+  spacing,
+}: AlignAxisOptions) {
+  const style = window.getComputedStyle(element);
+
+  const parent = container.parentElement;
+
+  if (!parent) {
+    return;
+  }
+
+  const scrollContainerCollisions = detectElementOverflow(parent, scrollContainer);
+  const documentCollisions = detectElementOverflow(parent, document.documentElement);
+
+  const isX = axis === 'x';
+  const startProperty: StartProperty = isX ? 'left' : 'top';
+  const endProperty: EndProperty = isX ? 'right' : 'bottom';
+  const sizeProperty: SizeProperty = isX ? 'width' : 'height';
+  const overflowStartProperty: OverflowProperty = `overflow${capitalize(startProperty)}` as const;
+  const overflowEndProperty: OverflowProperty = `overflow${capitalize(endProperty)}` as const;
+  const scrollProperty: ScrollProperty = `scroll${capitalize(startProperty)}` as const;
+  const uppercasedSizeProperty = capitalize(sizeProperty);
+  const offsetSizeProperty: OffsetProperty = `offset${uppercasedSizeProperty}`;
+  const clientSizeProperty: ClientSizeProperty = `client${uppercasedSizeProperty}`;
+  const minSizeProperty: MinSizeProperty = `min-${sizeProperty}`;
+
+  const scrollbarWidth = scrollContainer[offsetSizeProperty] - scrollContainer[clientSizeProperty];
+
+  const startSpacing = typeof spacing === 'object' ? spacing[startProperty] : spacing;
+  let availableStartSpace =
+    -Math.max(
+      scrollContainerCollisions[overflowStartProperty],
+      documentCollisions[overflowStartProperty] + document.documentElement[scrollProperty],
+    ) - startSpacing;
+
+  const endSpacing = typeof spacing === 'object' ? spacing[endProperty] : spacing;
+  let availableEndSpace =
+    -Math.max(
+      scrollContainerCollisions[overflowEndProperty],
+      documentCollisions[overflowEndProperty] - document.documentElement[scrollProperty],
+    ) -
+    endSpacing -
+    scrollbarWidth;
+
+  if (secondary) {
+    availableStartSpace += parent[clientSizeProperty];
+    availableEndSpace += parent[clientSizeProperty];
+  }
+
+  const offsetSize = element[offsetSizeProperty];
+
+  function displayStart() {
+    element.style[startProperty] = 'auto';
+    element.style[endProperty] = secondary ? '0' : '100%';
+  }
+
+  function displayEnd() {
+    element.style[startProperty] = secondary ? '0' : '100%';
+    element.style[endProperty] = 'auto';
+  }
+
+  function displayIfFits(availableSpace: number, display: () => void) {
+    const fits = offsetSize <= availableSpace;
+    if (fits) {
+      display();
+    }
+    return fits;
+  }
+
+  function displayStartIfFits() {
+    return displayIfFits(availableStartSpace, displayStart);
+  }
+
+  function displayEndIfFits() {
+    return displayIfFits(availableEndSpace, displayEnd);
+  }
+
+  function displayWhereverShrinkedFits() {
+    const moreSpaceStart = availableStartSpace > availableEndSpace;
+
+    const rawMinSize = style.getPropertyValue(minSizeProperty);
+    const minSize = rawMinSize ? parseInt(rawMinSize, 10) : null;
+
+    function shrinkToSize(size: number) {
+      warning(
+        !minSize || size >= minSize,
+        `<Fit />'s child will not fit anywhere with its current ${minSizeProperty} of ${minSize}px.`,
+      );
+
+      const newSize = Math.max(size, minSize || 0);
+      warning(
+        false,
+        `<Fit />'s child needed to have its ${sizeProperty} decreased to ${newSize}px.`,
+      );
+      element.style[sizeProperty] = `${newSize}px`;
+    }
+
+    if (moreSpaceStart) {
+      shrinkToSize(availableStartSpace);
+      displayStart();
+    } else {
+      shrinkToSize(availableEndSpace);
+      displayEnd();
+    }
+  }
+
+  let fits;
+
+  if (invertAxis) {
+    fits = displayStartIfFits() || displayEndIfFits();
+  } else {
+    fits = displayEndIfFits() || displayStartIfFits();
+  }
+
+  if (!fits) {
+    displayWhereverShrinkedFits();
+  }
+}
+
+function alignMainAxis(args: AlignAxisOptions) {
+  alignAxis(args);
+}
+
+function alignSecondaryAxis(args: AlignAxisOptions) {
+  alignAxis({
+    ...args,
+    axis: args.axis === 'x' ? 'y' : 'x',
+    secondary: true,
+  });
+}
+
+function alignBothAxis(args: AlignBothAxisOptions) {
+  const { invertAxis, invertSecondaryAxis, ...commonArgs } = args;
+
+  alignMainAxis({
+    ...commonArgs,
+    invertAxis,
+  });
+
+  alignSecondaryAxis({
+    ...commonArgs,
+    invertAxis: invertSecondaryAxis,
+  });
+}
+
+export type FitProps = {
+  children: React.ReactElement;
+  invertAxis?: boolean;
+  invertSecondaryAxis?: boolean;
+  mainAxis?: 'x' | 'y';
+  spacing?: number | Spacing;
+};
+
+export default function Fit({
+  children,
+  invertAxis,
+  invertSecondaryAxis,
+  mainAxis = 'y',
+  spacing = 8,
+}: FitProps) {
+  const container = useRef<HTMLElement | undefined>(undefined);
+  const element = useRef<HTMLElement | undefined>(undefined);
+  const elementWidth = useRef<number | undefined>(undefined);
+  const elementHeight = useRef<number | undefined>(undefined);
+  const scrollContainer = useRef<HTMLElement | undefined>(undefined);
+
+  const fit = useCallback(() => {
+    if (!scrollContainer.current || !container.current || !element.current) {
+      return;
+    }
+
+    const currentElementWidth = element.current.clientWidth;
+    const currentElementHeight = element.current.clientHeight;
+
+    // No need to recalculate - already did that for current dimensions
+    if (
+      elementWidth.current === currentElementWidth &&
+      elementHeight.current === currentElementHeight
+    ) {
+      return;
+    }
+
+    // Save the dimensions so that we know we don't need to repeat the function if unchanged
+    elementWidth.current = currentElementWidth;
+    elementHeight.current = currentElementHeight;
+
+    const parent = container.current.parentElement;
+
+    // Container was unmounted
+    if (!parent) {
+      return;
+    }
+
+    /**
+     * We need to ensure that <Fit />'s child has a absolute position. Otherwise,
+     * we wouldn't be able to place the child in the correct position.
+     */
+    const style = window.getComputedStyle(element.current);
+    const { position } = style;
+
+    if (position !== 'absolute') {
+      element.current.style.position = 'absolute';
+    }
+
+    /**
+     * We need to ensure that <Fit />'s parent has a relative or absolute position. Otherwise,
+     * we wouldn't be able to place the child in the correct position.
+     */
+    const parentStyle = window.getComputedStyle(parent);
+    const { position: parentPosition } = parentStyle;
+
+    if (parentPosition !== 'relative' && parentPosition !== 'absolute') {
+      parent.style.position = 'relative';
+    }
+
+    alignBothAxis({
+      axis: mainAxis,
+      container: container.current,
+      element: element.current,
+      invertAxis,
+      invertSecondaryAxis,
+      scrollContainer: scrollContainer.current,
+      spacing,
+    });
+  }, [invertAxis, invertSecondaryAxis, mainAxis, spacing]);
+
+  const child = Children.only(children);
+
+  useEffect(() => {
+    fit();
+
+    function onMutation() {
+      fit();
+    }
+
+    if (isMutationObserverSupported && element.current) {
+      const mutationObserver = new MutationObserver(onMutation);
+
+      mutationObserver.observe(element.current, {
+        attributes: true,
+        attributeFilter: ['class', 'style'],
+      });
+    }
+  }, [fit]);
+
+  function assignRefs(domElement: Element | null) {
+    if (!domElement || !(domElement instanceof HTMLElement)) {
+      return;
+    }
+
+    element.current = domElement;
+    scrollContainer.current = findScrollContainer(domElement);
+  }
+
+  return (
+    <span
+      ref={(domContainer) => {
+        if (!domContainer) {
+          return;
+        }
+
+        container.current = domContainer;
+        const domElement = domContainer?.firstElementChild;
+
+        assignRefs(domElement);
+      }}
+      style={{ display: 'contents' }}
+    >
+      {child}
+    </span>
+  );
+}
Index: node_modules/react-fit/src/__snapshots__/Fit.spec.tsx.snap
===================================================================
--- node_modules/react-fit/src/__snapshots__/Fit.spec.tsx.snap	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/src/__snapshots__/Fit.spec.tsx.snap	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`<Fit /> component > renders properly 1`] = `
+<div
+  style="position: relative;"
+>
+  <span
+    style="display: contents;"
+  >
+    <span
+      style="position: absolute; height: 0px; top: 100%; bottom: auto; width: 0px; left: 0px; right: auto;"
+    />
+  </span>
+</div>
+`;
+
+exports[`<Fit /> component > renders properly given React component as child 1`] = `
+<div
+  style="position: relative;"
+>
+  <span
+    style="display: contents;"
+  >
+    <span
+      style="position: absolute; height: 0px; top: 100%; bottom: auto; width: 0px; left: 0px; right: auto;"
+    />
+  </span>
+</div>
+`;
+
+exports[`<Fit /> component > renders properly given element with ref prop as child 1`] = `
+<div
+  style="position: relative;"
+>
+  <span
+    style="display: contents;"
+  >
+    <span
+      style="position: absolute; height: 0px; top: 100%; bottom: auto; width: 0px; left: 0px; right: auto;"
+    />
+  </span>
+</div>
+`;
+
+exports[`<Fit /> component > renders properly given mainAxis = "x" 1`] = `
+<div
+  style="position: relative;"
+>
+  <span
+    style="display: contents;"
+  >
+    <span
+      style="position: absolute; width: 0px; left: 100%; right: auto; height: 0px; top: 0px; bottom: auto;"
+    />
+  </span>
+</div>
+`;
+
+exports[`<Fit /> component > renders properly given mainAxis = "y" 1`] = `
+<div
+  style="position: relative;"
+>
+  <span
+    style="display: contents;"
+  >
+    <span
+      style="position: absolute; height: 0px; top: 100%; bottom: auto; width: 0px; left: 0px; right: auto;"
+    />
+  </span>
+</div>
+`;
Index: node_modules/react-fit/src/index.ts
===================================================================
--- node_modules/react-fit/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-fit/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import Fit from './Fit.js';
+
+export type { FitProps } from './Fit.js';
+
+export { Fit };
+
+export default Fit;
Index: node_modules/react-is/LICENSE
===================================================================
--- node_modules/react-is/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-is/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/react-is/README.md
===================================================================
--- node_modules/react-is/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-is/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,103 @@
+# `react-is`
+
+This package allows you to test arbitrary values and see if they're a particular React element type.
+
+## Installation
+
+```sh
+# Yarn
+yarn add react-is
+
+# NPM
+npm install react-is
+```
+
+## Usage
+
+### Determining if a Component is Valid
+
+```js
+import React from "react";
+import * as ReactIs from "react-is";
+
+class ClassComponent extends React.Component {
+  render() {
+    return React.createElement("div");
+  }
+}
+
+const FunctionComponent = () => React.createElement("div");
+
+const ForwardRefComponent = React.forwardRef((props, ref) =>
+  React.createElement(Component, { forwardedRef: ref, ...props })
+);
+
+const Context = React.createContext(false);
+
+ReactIs.isValidElementType("div"); // true
+ReactIs.isValidElementType(ClassComponent); // true
+ReactIs.isValidElementType(FunctionComponent); // true
+ReactIs.isValidElementType(ForwardRefComponent); // true
+ReactIs.isValidElementType(Context.Provider); // true
+ReactIs.isValidElementType(Context.Consumer); // true
+```
+
+### Determining an Element's Type
+
+#### Context
+
+```js
+import React from "react";
+import * as ReactIs from 'react-is';
+
+const ThemeContext = React.createContext("blue");
+
+ReactIs.isContextConsumer(<ThemeContext.Consumer />); // true
+ReactIs.isContextProvider(<ThemeContext.Provider />); // true
+ReactIs.typeOf(<ThemeContext.Provider />) === ReactIs.ContextProvider; // true
+ReactIs.typeOf(<ThemeContext.Consumer />) === ReactIs.ContextConsumer; // true
+```
+
+#### Element
+
+```js
+import React from "react";
+import * as ReactIs from 'react-is';
+
+ReactIs.isElement(<div />); // true
+ReactIs.typeOf(<div />) === ReactIs.Element; // true
+```
+
+#### Fragment
+
+```js
+import React from "react";
+import * as ReactIs from 'react-is';
+
+ReactIs.isFragment(<></>); // true
+ReactIs.typeOf(<></>) === ReactIs.Fragment; // true
+```
+
+#### Portal
+
+```js
+import React from "react";
+import ReactDOM from "react-dom";
+import * as ReactIs from 'react-is';
+
+const div = document.createElement("div");
+const portal = ReactDOM.createPortal(<div />, div);
+
+ReactIs.isPortal(portal); // true
+ReactIs.typeOf(portal) === ReactIs.Portal; // true
+```
+
+#### StrictMode
+
+```js
+import React from "react";
+import * as ReactIs from 'react-is';
+
+ReactIs.isStrictMode(<React.StrictMode />); // true
+ReactIs.typeOf(<React.StrictMode />) === ReactIs.StrictMode; // true
+```
Index: node_modules/react-is/cjs/react-is.development.js
===================================================================
--- node_modules/react-is/cjs/react-is.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-is/cjs/react-is.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,133 @@
+/**
+ * @license React
+ * react-is.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function typeOf(object) {
+      if ("object" === typeof object && null !== object) {
+        var $$typeof = object.$$typeof;
+        switch ($$typeof) {
+          case REACT_ELEMENT_TYPE:
+            switch (((object = object.type), object)) {
+              case REACT_FRAGMENT_TYPE:
+              case REACT_PROFILER_TYPE:
+              case REACT_STRICT_MODE_TYPE:
+              case REACT_SUSPENSE_TYPE:
+              case REACT_SUSPENSE_LIST_TYPE:
+              case REACT_VIEW_TRANSITION_TYPE:
+                return object;
+              default:
+                switch (((object = object && object.$$typeof), object)) {
+                  case REACT_CONTEXT_TYPE:
+                  case REACT_FORWARD_REF_TYPE:
+                  case REACT_LAZY_TYPE:
+                  case REACT_MEMO_TYPE:
+                    return object;
+                  case REACT_CONSUMER_TYPE:
+                    return object;
+                  default:
+                    return $$typeof;
+                }
+            }
+          case REACT_PORTAL_TYPE:
+            return $$typeof;
+        }
+      }
+    }
+    var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler");
+    Symbol.for("react.provider");
+    var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+    exports.ContextConsumer = REACT_CONSUMER_TYPE;
+    exports.ContextProvider = REACT_CONTEXT_TYPE;
+    exports.Element = REACT_ELEMENT_TYPE;
+    exports.ForwardRef = REACT_FORWARD_REF_TYPE;
+    exports.Fragment = REACT_FRAGMENT_TYPE;
+    exports.Lazy = REACT_LAZY_TYPE;
+    exports.Memo = REACT_MEMO_TYPE;
+    exports.Portal = REACT_PORTAL_TYPE;
+    exports.Profiler = REACT_PROFILER_TYPE;
+    exports.StrictMode = REACT_STRICT_MODE_TYPE;
+    exports.Suspense = REACT_SUSPENSE_TYPE;
+    exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;
+    exports.isContextConsumer = function (object) {
+      return typeOf(object) === REACT_CONSUMER_TYPE;
+    };
+    exports.isContextProvider = function (object) {
+      return typeOf(object) === REACT_CONTEXT_TYPE;
+    };
+    exports.isElement = function (object) {
+      return (
+        "object" === typeof object &&
+        null !== object &&
+        object.$$typeof === REACT_ELEMENT_TYPE
+      );
+    };
+    exports.isForwardRef = function (object) {
+      return typeOf(object) === REACT_FORWARD_REF_TYPE;
+    };
+    exports.isFragment = function (object) {
+      return typeOf(object) === REACT_FRAGMENT_TYPE;
+    };
+    exports.isLazy = function (object) {
+      return typeOf(object) === REACT_LAZY_TYPE;
+    };
+    exports.isMemo = function (object) {
+      return typeOf(object) === REACT_MEMO_TYPE;
+    };
+    exports.isPortal = function (object) {
+      return typeOf(object) === REACT_PORTAL_TYPE;
+    };
+    exports.isProfiler = function (object) {
+      return typeOf(object) === REACT_PROFILER_TYPE;
+    };
+    exports.isStrictMode = function (object) {
+      return typeOf(object) === REACT_STRICT_MODE_TYPE;
+    };
+    exports.isSuspense = function (object) {
+      return typeOf(object) === REACT_SUSPENSE_TYPE;
+    };
+    exports.isSuspenseList = function (object) {
+      return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;
+    };
+    exports.isValidElementType = function (type) {
+      return "string" === typeof type ||
+        "function" === typeof type ||
+        type === REACT_FRAGMENT_TYPE ||
+        type === REACT_PROFILER_TYPE ||
+        type === REACT_STRICT_MODE_TYPE ||
+        type === REACT_SUSPENSE_TYPE ||
+        type === REACT_SUSPENSE_LIST_TYPE ||
+        ("object" === typeof type &&
+          null !== type &&
+          (type.$$typeof === REACT_LAZY_TYPE ||
+            type.$$typeof === REACT_MEMO_TYPE ||
+            type.$$typeof === REACT_CONTEXT_TYPE ||
+            type.$$typeof === REACT_CONSUMER_TYPE ||
+            type.$$typeof === REACT_FORWARD_REF_TYPE ||
+            type.$$typeof === REACT_CLIENT_REFERENCE ||
+            void 0 !== type.getModuleId))
+        ? !0
+        : !1;
+    };
+    exports.typeOf = typeOf;
+  })();
Index: node_modules/react-is/cjs/react-is.production.js
===================================================================
--- node_modules/react-is/cjs/react-is.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-is/cjs/react-is.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,130 @@
+/**
+ * @license React
+ * react-is.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler");
+Symbol.for("react.provider");
+var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
+  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
+function typeOf(object) {
+  if ("object" === typeof object && null !== object) {
+    var $$typeof = object.$$typeof;
+    switch ($$typeof) {
+      case REACT_ELEMENT_TYPE:
+        switch (((object = object.type), object)) {
+          case REACT_FRAGMENT_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_SUSPENSE_TYPE:
+          case REACT_SUSPENSE_LIST_TYPE:
+          case REACT_VIEW_TRANSITION_TYPE:
+            return object;
+          default:
+            switch (((object = object && object.$$typeof), object)) {
+              case REACT_CONTEXT_TYPE:
+              case REACT_FORWARD_REF_TYPE:
+              case REACT_LAZY_TYPE:
+              case REACT_MEMO_TYPE:
+                return object;
+              case REACT_CONSUMER_TYPE:
+                return object;
+              default:
+                return $$typeof;
+            }
+        }
+      case REACT_PORTAL_TYPE:
+        return $$typeof;
+    }
+  }
+}
+exports.ContextConsumer = REACT_CONSUMER_TYPE;
+exports.ContextProvider = REACT_CONTEXT_TYPE;
+exports.Element = REACT_ELEMENT_TYPE;
+exports.ForwardRef = REACT_FORWARD_REF_TYPE;
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.Lazy = REACT_LAZY_TYPE;
+exports.Memo = REACT_MEMO_TYPE;
+exports.Portal = REACT_PORTAL_TYPE;
+exports.Profiler = REACT_PROFILER_TYPE;
+exports.StrictMode = REACT_STRICT_MODE_TYPE;
+exports.Suspense = REACT_SUSPENSE_TYPE;
+exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;
+exports.isContextConsumer = function (object) {
+  return typeOf(object) === REACT_CONSUMER_TYPE;
+};
+exports.isContextProvider = function (object) {
+  return typeOf(object) === REACT_CONTEXT_TYPE;
+};
+exports.isElement = function (object) {
+  return (
+    "object" === typeof object &&
+    null !== object &&
+    object.$$typeof === REACT_ELEMENT_TYPE
+  );
+};
+exports.isForwardRef = function (object) {
+  return typeOf(object) === REACT_FORWARD_REF_TYPE;
+};
+exports.isFragment = function (object) {
+  return typeOf(object) === REACT_FRAGMENT_TYPE;
+};
+exports.isLazy = function (object) {
+  return typeOf(object) === REACT_LAZY_TYPE;
+};
+exports.isMemo = function (object) {
+  return typeOf(object) === REACT_MEMO_TYPE;
+};
+exports.isPortal = function (object) {
+  return typeOf(object) === REACT_PORTAL_TYPE;
+};
+exports.isProfiler = function (object) {
+  return typeOf(object) === REACT_PROFILER_TYPE;
+};
+exports.isStrictMode = function (object) {
+  return typeOf(object) === REACT_STRICT_MODE_TYPE;
+};
+exports.isSuspense = function (object) {
+  return typeOf(object) === REACT_SUSPENSE_TYPE;
+};
+exports.isSuspenseList = function (object) {
+  return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;
+};
+exports.isValidElementType = function (type) {
+  return "string" === typeof type ||
+    "function" === typeof type ||
+    type === REACT_FRAGMENT_TYPE ||
+    type === REACT_PROFILER_TYPE ||
+    type === REACT_STRICT_MODE_TYPE ||
+    type === REACT_SUSPENSE_TYPE ||
+    type === REACT_SUSPENSE_LIST_TYPE ||
+    ("object" === typeof type &&
+      null !== type &&
+      (type.$$typeof === REACT_LAZY_TYPE ||
+        type.$$typeof === REACT_MEMO_TYPE ||
+        type.$$typeof === REACT_CONTEXT_TYPE ||
+        type.$$typeof === REACT_CONSUMER_TYPE ||
+        type.$$typeof === REACT_FORWARD_REF_TYPE ||
+        type.$$typeof === REACT_CLIENT_REFERENCE ||
+        void 0 !== type.getModuleId))
+    ? !0
+    : !1;
+};
+exports.typeOf = typeOf;
Index: node_modules/react-is/index.js
===================================================================
--- node_modules/react-is/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-is/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-is.production.js');
+} else {
+  module.exports = require('./cjs/react-is.development.js');
+}
Index: node_modules/react-is/package.json
===================================================================
--- node_modules/react-is/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-is/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+{
+  "name": "react-is",
+  "version": "19.1.1",
+  "description": "Brand checking of React Elements.",
+  "main": "index.js",
+  "sideEffects": false,
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/facebook/react.git",
+    "directory": "packages/react-is"
+  },
+  "keywords": [
+    "react"
+  ],
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/facebook/react/issues"
+  },
+  "homepage": "https://react.dev/",
+  "files": [
+    "LICENSE",
+    "README.md",
+    "index.js",
+    "cjs/"
+  ]
+}
Index: node_modules/react-redux/LICENSE.md
===================================================================
--- node_modules/react-redux/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Dan Abramov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/react-redux/README.md
===================================================================
--- node_modules/react-redux/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+# React Redux
+
+Official React bindings for [Redux](https://github.com/reduxjs/redux).
+Performant and flexible.
+
+![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/reduxjs/react-redux/test.yml?style=flat-square) [![npm version](https://img.shields.io/npm/v/react-redux.svg?style=flat-square)](https://www.npmjs.com/package/react-redux)
+[![npm downloads](https://img.shields.io/npm/dm/react-redux.svg?style=flat-square)](https://www.npmjs.com/package/react-redux)
+[![#redux channel on Discord](https://img.shields.io/badge/discord-redux@reactiflux-61DAFB.svg?style=flat-square)](http://www.reactiflux.com)
+
+## Installation
+
+### Create a React Redux App
+
+The recommended way to start new apps with React and Redux is by using [our official Redux+TS template for Vite](https://github.com/reduxjs/redux-templates), or by creating a new Next.js project using [Next's `with-redux` template](https://github.com/vercel/next.js/tree/canary/examples/with-redux).
+
+Both of these already have Redux Toolkit and React-Redux configured appropriately for that build tool, and come with a small example app that demonstrates how to use several of Redux Toolkit's features.
+
+```bash
+# Vite with our Redux+TS template
+# (using the `degit` tool to clone and extract the template)
+npx degit reduxjs/redux-templates/packages/vite-template-redux my-app
+
+# Next.js using the `with-redux` template
+npx create-next-app --example with-redux my-app
+```
+
+### An Existing React App
+
+React Redux 8.0 requires **React 16.8.3 or later** (or React Native 0.59 or later).
+
+To use React Redux with your React app, install it as a dependency:
+
+```bash
+# If you use npm:
+npm install react-redux
+
+# Or if you use Yarn:
+yarn add react-redux
+```
+
+You'll also need to [install Redux](https://redux.js.org/introduction/installation) and [set up a Redux store](https://redux.js.org/recipes/configuring-your-store/) in your app.
+
+This assumes that you’re using [npm](http://npmjs.com/) package manager
+with a module bundler like [Webpack](https://webpack.js.org/) or
+[Browserify](http://browserify.org/) to consume [CommonJS
+modules](https://webpack.js.org/api/module-methods/#commonjs).
+
+If you don’t yet use [npm](http://npmjs.com/) or a modern module bundler, and would rather prefer a single-file [UMD](https://github.com/umdjs/umd) build that makes `ReactRedux` available as a global object, you can grab a pre-built version from [cdnjs](https://cdnjs.com/libraries/react-redux). We _don’t_ recommend this approach for any serious application, as most of the libraries complementary to Redux are only available on [npm](http://npmjs.com/).
+
+## Documentation
+
+The React Redux docs are published at **https://react-redux.js.org** .
+
+## How Does It Work?
+
+The post [The History and Implementation of React-Redux](https://blog.isquaredsoftware.com/2018/11/react-redux-history-implementation/)
+explains what it does, how it works, and how the API and implementation have evolved over time.
+
+There's also a [Deep Dive into React-Redux](https://blog.isquaredsoftware.com/2019/06/presentation-react-redux-deep-dive/) talk that covers some of the same material at a higher level.
+
+## License
+
+[MIT](LICENSE.md)
Index: node_modules/react-redux/dist/cjs/index.js
===================================================================
--- node_modules/react-redux/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+'use strict'
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./react-redux.production.min.cjs')
+} else {
+  module.exports = require('./react-redux.development.cjs')
+}
Index: node_modules/react-redux/dist/cjs/react-redux.development.cjs
===================================================================
--- node_modules/react-redux/dist/cjs/react-redux.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/cjs/react-redux.development.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1116 @@
+"use strict";
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+  // If the importer is in node compatibility mode or this is not an ESM
+  // file that has been converted to a CommonJS file using a Babel-
+  // compatible transform (i.e. "__esModule" has not been set), then set
+  // "default" to the CommonJS "module.exports" for node compatibility.
+  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+  mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var src_exports = {};
+__export(src_exports, {
+  Provider: () => Provider_default,
+  ReactReduxContext: () => ReactReduxContext,
+  batch: () => batch,
+  connect: () => connect_default,
+  createDispatchHook: () => createDispatchHook,
+  createSelectorHook: () => createSelectorHook,
+  createStoreHook: () => createStoreHook,
+  shallowEqual: () => shallowEqual,
+  useDispatch: () => useDispatch,
+  useSelector: () => useSelector,
+  useStore: () => useStore
+});
+module.exports = __toCommonJS(src_exports);
+
+// src/utils/react.ts
+var React = __toESM(require("react"));
+
+// src/utils/react-is.ts
+var IS_REACT_19 = /* @__PURE__ */ React.version.startsWith("19");
+var REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(
+  IS_REACT_19 ? "react.transitional.element" : "react.element"
+);
+var REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal");
+var REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for("react.fragment");
+var REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for("react.strict_mode");
+var REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for("react.profiler");
+var REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for("react.consumer");
+var REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for("react.context");
+var REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for("react.forward_ref");
+var REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for("react.suspense");
+var REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(
+  "react.suspense_list"
+);
+var REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for("react.memo");
+var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy");
+var REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for("react.offscreen");
+var REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(
+  "react.client.reference"
+);
+var ForwardRef = REACT_FORWARD_REF_TYPE;
+var Memo = REACT_MEMO_TYPE;
+function isValidElementType(type) {
+  return typeof type === "string" || typeof type === "function" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === "object" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE || type.getModuleId !== void 0) ? true : false;
+}
+function typeOf(object) {
+  if (typeof object === "object" && object !== null) {
+    const { $$typeof } = object;
+    switch ($$typeof) {
+      case REACT_ELEMENT_TYPE:
+        switch (object = object.type, object) {
+          case REACT_FRAGMENT_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_SUSPENSE_TYPE:
+          case REACT_SUSPENSE_LIST_TYPE:
+            return object;
+          default:
+            switch (object = object && object.$$typeof, object) {
+              case REACT_CONTEXT_TYPE:
+              case REACT_FORWARD_REF_TYPE:
+              case REACT_LAZY_TYPE:
+              case REACT_MEMO_TYPE:
+                return object;
+              case REACT_CONSUMER_TYPE:
+                return object;
+              default:
+                return $$typeof;
+            }
+        }
+      case REACT_PORTAL_TYPE:
+        return $$typeof;
+    }
+  }
+}
+function isContextConsumer(object) {
+  return IS_REACT_19 ? typeOf(object) === REACT_CONSUMER_TYPE : typeOf(object) === REACT_CONTEXT_TYPE;
+}
+function isMemo(object) {
+  return typeOf(object) === REACT_MEMO_TYPE;
+}
+
+// src/utils/warning.ts
+function warning(message) {
+  if (typeof console !== "undefined" && typeof console.error === "function") {
+    console.error(message);
+  }
+  try {
+    throw new Error(message);
+  } catch (e) {
+  }
+}
+
+// src/connect/verifySubselectors.ts
+function verify(selector, methodName) {
+  if (!selector) {
+    throw new Error(`Unexpected value for ${methodName} in connect.`);
+  } else if (methodName === "mapStateToProps" || methodName === "mapDispatchToProps") {
+    if (!Object.prototype.hasOwnProperty.call(selector, "dependsOnOwnProps")) {
+      warning(
+        `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`
+      );
+    }
+  }
+}
+function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) {
+  verify(mapStateToProps, "mapStateToProps");
+  verify(mapDispatchToProps, "mapDispatchToProps");
+  verify(mergeProps, "mergeProps");
+}
+
+// src/connect/selectorFactory.ts
+function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {
+  areStatesEqual,
+  areOwnPropsEqual,
+  areStatePropsEqual
+}) {
+  let hasRunAtLeastOnce = false;
+  let state;
+  let ownProps;
+  let stateProps;
+  let dispatchProps;
+  let mergedProps;
+  function handleFirstCall(firstState, firstOwnProps) {
+    state = firstState;
+    ownProps = firstOwnProps;
+    stateProps = mapStateToProps(state, ownProps);
+    dispatchProps = mapDispatchToProps(dispatch, ownProps);
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    hasRunAtLeastOnce = true;
+    return mergedProps;
+  }
+  function handleNewPropsAndNewState() {
+    stateProps = mapStateToProps(state, ownProps);
+    if (mapDispatchToProps.dependsOnOwnProps)
+      dispatchProps = mapDispatchToProps(dispatch, ownProps);
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    return mergedProps;
+  }
+  function handleNewProps() {
+    if (mapStateToProps.dependsOnOwnProps)
+      stateProps = mapStateToProps(state, ownProps);
+    if (mapDispatchToProps.dependsOnOwnProps)
+      dispatchProps = mapDispatchToProps(dispatch, ownProps);
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    return mergedProps;
+  }
+  function handleNewState() {
+    const nextStateProps = mapStateToProps(state, ownProps);
+    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);
+    stateProps = nextStateProps;
+    if (statePropsChanged)
+      mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    return mergedProps;
+  }
+  function handleSubsequentCalls(nextState, nextOwnProps) {
+    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);
+    const stateChanged = !areStatesEqual(
+      nextState,
+      state,
+      nextOwnProps,
+      ownProps
+    );
+    state = nextState;
+    ownProps = nextOwnProps;
+    if (propsChanged && stateChanged) return handleNewPropsAndNewState();
+    if (propsChanged) return handleNewProps();
+    if (stateChanged) return handleNewState();
+    return mergedProps;
+  }
+  return function pureFinalPropsSelector(nextState, nextOwnProps) {
+    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);
+  };
+}
+function finalPropsSelectorFactory(dispatch, {
+  initMapStateToProps,
+  initMapDispatchToProps,
+  initMergeProps,
+  ...options
+}) {
+  const mapStateToProps = initMapStateToProps(dispatch, options);
+  const mapDispatchToProps = initMapDispatchToProps(dispatch, options);
+  const mergeProps = initMergeProps(dispatch, options);
+  if (true) {
+    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);
+  }
+  return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);
+}
+
+// src/utils/bindActionCreators.ts
+function bindActionCreators(actionCreators, dispatch) {
+  const boundActionCreators = {};
+  for (const key in actionCreators) {
+    const actionCreator = actionCreators[key];
+    if (typeof actionCreator === "function") {
+      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));
+    }
+  }
+  return boundActionCreators;
+}
+
+// src/utils/isPlainObject.ts
+function isPlainObject(obj) {
+  if (typeof obj !== "object" || obj === null) return false;
+  const proto = Object.getPrototypeOf(obj);
+  if (proto === null) return true;
+  let baseProto = proto;
+  while (Object.getPrototypeOf(baseProto) !== null) {
+    baseProto = Object.getPrototypeOf(baseProto);
+  }
+  return proto === baseProto;
+}
+
+// src/utils/verifyPlainObject.ts
+function verifyPlainObject(value, displayName, methodName) {
+  if (!isPlainObject(value)) {
+    warning(
+      `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`
+    );
+  }
+}
+
+// src/connect/wrapMapToProps.ts
+function wrapMapToPropsConstant(getConstant) {
+  return function initConstantSelector(dispatch) {
+    const constant = getConstant(dispatch);
+    function constantSelector() {
+      return constant;
+    }
+    constantSelector.dependsOnOwnProps = false;
+    return constantSelector;
+  };
+}
+function getDependsOnOwnProps(mapToProps) {
+  return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;
+}
+function wrapMapToPropsFunc(mapToProps, methodName) {
+  return function initProxySelector(dispatch, { displayName }) {
+    const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {
+      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, void 0);
+    };
+    proxy.dependsOnOwnProps = true;
+    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {
+      proxy.mapToProps = mapToProps;
+      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);
+      let props = proxy(stateOrDispatch, ownProps);
+      if (typeof props === "function") {
+        proxy.mapToProps = props;
+        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);
+        props = proxy(stateOrDispatch, ownProps);
+      }
+      if (true)
+        verifyPlainObject(props, displayName, methodName);
+      return props;
+    };
+    return proxy;
+  };
+}
+
+// src/connect/invalidArgFactory.ts
+function createInvalidArgFactory(arg, name) {
+  return (dispatch, options) => {
+    throw new Error(
+      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`
+    );
+  };
+}
+
+// src/connect/mapDispatchToProps.ts
+function mapDispatchToPropsFactory(mapDispatchToProps) {
+  return mapDispatchToProps && typeof mapDispatchToProps === "object" ? wrapMapToPropsConstant(
+    (dispatch) => (
+      // @ts-ignore
+      bindActionCreators(mapDispatchToProps, dispatch)
+    )
+  ) : !mapDispatchToProps ? wrapMapToPropsConstant((dispatch) => ({
+    dispatch
+  })) : typeof mapDispatchToProps === "function" ? (
+    // @ts-ignore
+    wrapMapToPropsFunc(mapDispatchToProps, "mapDispatchToProps")
+  ) : createInvalidArgFactory(mapDispatchToProps, "mapDispatchToProps");
+}
+
+// src/connect/mapStateToProps.ts
+function mapStateToPropsFactory(mapStateToProps) {
+  return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === "function" ? (
+    // @ts-ignore
+    wrapMapToPropsFunc(mapStateToProps, "mapStateToProps")
+  ) : createInvalidArgFactory(mapStateToProps, "mapStateToProps");
+}
+
+// src/connect/mergeProps.ts
+function defaultMergeProps(stateProps, dispatchProps, ownProps) {
+  return { ...ownProps, ...stateProps, ...dispatchProps };
+}
+function wrapMergePropsFunc(mergeProps) {
+  return function initMergePropsProxy(dispatch, { displayName, areMergedPropsEqual }) {
+    let hasRunOnce = false;
+    let mergedProps;
+    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {
+      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+      if (hasRunOnce) {
+        if (!areMergedPropsEqual(nextMergedProps, mergedProps))
+          mergedProps = nextMergedProps;
+      } else {
+        hasRunOnce = true;
+        mergedProps = nextMergedProps;
+        if (true)
+          verifyPlainObject(mergedProps, displayName, "mergeProps");
+      }
+      return mergedProps;
+    };
+  };
+}
+function mergePropsFactory(mergeProps) {
+  return !mergeProps ? () => defaultMergeProps : typeof mergeProps === "function" ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, "mergeProps");
+}
+
+// src/utils/batch.ts
+function defaultNoopBatch(callback) {
+  callback();
+}
+
+// src/utils/Subscription.ts
+function createListenerCollection() {
+  let first = null;
+  let last = null;
+  return {
+    clear() {
+      first = null;
+      last = null;
+    },
+    notify() {
+      defaultNoopBatch(() => {
+        let listener = first;
+        while (listener) {
+          listener.callback();
+          listener = listener.next;
+        }
+      });
+    },
+    get() {
+      const listeners = [];
+      let listener = first;
+      while (listener) {
+        listeners.push(listener);
+        listener = listener.next;
+      }
+      return listeners;
+    },
+    subscribe(callback) {
+      let isSubscribed = true;
+      const listener = last = {
+        callback,
+        next: null,
+        prev: last
+      };
+      if (listener.prev) {
+        listener.prev.next = listener;
+      } else {
+        first = listener;
+      }
+      return function unsubscribe() {
+        if (!isSubscribed || first === null) return;
+        isSubscribed = false;
+        if (listener.next) {
+          listener.next.prev = listener.prev;
+        } else {
+          last = listener.prev;
+        }
+        if (listener.prev) {
+          listener.prev.next = listener.next;
+        } else {
+          first = listener.next;
+        }
+      };
+    }
+  };
+}
+var nullListeners = {
+  notify() {
+  },
+  get: () => []
+};
+function createSubscription(store, parentSub) {
+  let unsubscribe;
+  let listeners = nullListeners;
+  let subscriptionsAmount = 0;
+  let selfSubscribed = false;
+  function addNestedSub(listener) {
+    trySubscribe();
+    const cleanupListener = listeners.subscribe(listener);
+    let removed = false;
+    return () => {
+      if (!removed) {
+        removed = true;
+        cleanupListener();
+        tryUnsubscribe();
+      }
+    };
+  }
+  function notifyNestedSubs() {
+    listeners.notify();
+  }
+  function handleChangeWrapper() {
+    if (subscription.onStateChange) {
+      subscription.onStateChange();
+    }
+  }
+  function isSubscribed() {
+    return selfSubscribed;
+  }
+  function trySubscribe() {
+    subscriptionsAmount++;
+    if (!unsubscribe) {
+      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);
+      listeners = createListenerCollection();
+    }
+  }
+  function tryUnsubscribe() {
+    subscriptionsAmount--;
+    if (unsubscribe && subscriptionsAmount === 0) {
+      unsubscribe();
+      unsubscribe = void 0;
+      listeners.clear();
+      listeners = nullListeners;
+    }
+  }
+  function trySubscribeSelf() {
+    if (!selfSubscribed) {
+      selfSubscribed = true;
+      trySubscribe();
+    }
+  }
+  function tryUnsubscribeSelf() {
+    if (selfSubscribed) {
+      selfSubscribed = false;
+      tryUnsubscribe();
+    }
+  }
+  const subscription = {
+    addNestedSub,
+    notifyNestedSubs,
+    handleChangeWrapper,
+    isSubscribed,
+    trySubscribe: trySubscribeSelf,
+    tryUnsubscribe: tryUnsubscribeSelf,
+    getListeners: () => listeners
+  };
+  return subscription;
+}
+
+// src/utils/useIsomorphicLayoutEffect.ts
+var canUseDOM = () => !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
+var isDOM = /* @__PURE__ */ canUseDOM();
+var isRunningInReactNative = () => typeof navigator !== "undefined" && navigator.product === "ReactNative";
+var isReactNative = /* @__PURE__ */ isRunningInReactNative();
+var getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? React.useLayoutEffect : React.useEffect;
+var useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();
+
+// src/utils/shallowEqual.ts
+function is(x, y) {
+  if (x === y) {
+    return x !== 0 || y !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+}
+function shallowEqual(objA, objB) {
+  if (is(objA, objB)) return true;
+  if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
+    return false;
+  }
+  const keysA = Object.keys(objA);
+  const keysB = Object.keys(objB);
+  if (keysA.length !== keysB.length) return false;
+  for (let i = 0; i < keysA.length; i++) {
+    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+      return false;
+    }
+  }
+  return true;
+}
+
+// src/utils/hoistStatics.ts
+var REACT_STATICS = {
+  childContextTypes: true,
+  contextType: true,
+  contextTypes: true,
+  defaultProps: true,
+  displayName: true,
+  getDefaultProps: true,
+  getDerivedStateFromError: true,
+  getDerivedStateFromProps: true,
+  mixins: true,
+  propTypes: true,
+  type: true
+};
+var KNOWN_STATICS = {
+  name: true,
+  length: true,
+  prototype: true,
+  caller: true,
+  callee: true,
+  arguments: true,
+  arity: true
+};
+var FORWARD_REF_STATICS = {
+  $$typeof: true,
+  render: true,
+  defaultProps: true,
+  displayName: true,
+  propTypes: true
+};
+var MEMO_STATICS = {
+  $$typeof: true,
+  compare: true,
+  defaultProps: true,
+  displayName: true,
+  propTypes: true,
+  type: true
+};
+var TYPE_STATICS = {
+  [ForwardRef]: FORWARD_REF_STATICS,
+  [Memo]: MEMO_STATICS
+};
+function getStatics(component) {
+  if (isMemo(component)) {
+    return MEMO_STATICS;
+  }
+  return TYPE_STATICS[component["$$typeof"]] || REACT_STATICS;
+}
+var defineProperty = Object.defineProperty;
+var getOwnPropertyNames = Object.getOwnPropertyNames;
+var getOwnPropertySymbols = Object.getOwnPropertySymbols;
+var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+var getPrototypeOf = Object.getPrototypeOf;
+var objectPrototype = Object.prototype;
+function hoistNonReactStatics(targetComponent, sourceComponent) {
+  if (typeof sourceComponent !== "string") {
+    if (objectPrototype) {
+      const inheritedComponent = getPrototypeOf(sourceComponent);
+      if (inheritedComponent && inheritedComponent !== objectPrototype) {
+        hoistNonReactStatics(targetComponent, inheritedComponent);
+      }
+    }
+    let keys = getOwnPropertyNames(sourceComponent);
+    if (getOwnPropertySymbols) {
+      keys = keys.concat(getOwnPropertySymbols(sourceComponent));
+    }
+    const targetStatics = getStatics(targetComponent);
+    const sourceStatics = getStatics(sourceComponent);
+    for (let i = 0; i < keys.length; ++i) {
+      const key = keys[i];
+      if (!KNOWN_STATICS[key] && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {
+        const descriptor = getOwnPropertyDescriptor(sourceComponent, key);
+        try {
+          defineProperty(targetComponent, key, descriptor);
+        } catch (e) {
+        }
+      }
+    }
+  }
+  return targetComponent;
+}
+
+// src/components/Context.ts
+var ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`);
+var gT = typeof globalThis !== "undefined" ? globalThis : (
+  /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */
+  {}
+);
+function getContext() {
+  if (!React.createContext) return {};
+  const contextMap = gT[ContextKey] ??= /* @__PURE__ */ new Map();
+  let realContext = contextMap.get(React.createContext);
+  if (!realContext) {
+    realContext = React.createContext(
+      null
+    );
+    if (true) {
+      realContext.displayName = "ReactRedux";
+    }
+    contextMap.set(React.createContext, realContext);
+  }
+  return realContext;
+}
+var ReactReduxContext = /* @__PURE__ */ getContext();
+
+// src/components/connect.tsx
+var NO_SUBSCRIPTION_ARRAY = [null, null];
+var stringifyComponent = (Comp) => {
+  try {
+    return JSON.stringify(Comp);
+  } catch (err) {
+    return String(Comp);
+  }
+};
+function useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {
+  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);
+}
+function captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs) {
+  lastWrapperProps.current = wrapperProps;
+  renderIsScheduled.current = false;
+  if (childPropsFromStoreUpdate.current) {
+    childPropsFromStoreUpdate.current = null;
+    notifyNestedSubs();
+  }
+}
+function subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, additionalSubscribeListener) {
+  if (!shouldHandleStateChanges) return () => {
+  };
+  let didUnsubscribe = false;
+  let lastThrownError = null;
+  const checkForUpdates = () => {
+    if (didUnsubscribe || !isMounted.current) {
+      return;
+    }
+    const latestStoreState = store.getState();
+    let newChildProps, error;
+    try {
+      newChildProps = childPropsSelector(
+        latestStoreState,
+        lastWrapperProps.current
+      );
+    } catch (e) {
+      error = e;
+      lastThrownError = e;
+    }
+    if (!error) {
+      lastThrownError = null;
+    }
+    if (newChildProps === lastChildProps.current) {
+      if (!renderIsScheduled.current) {
+        notifyNestedSubs();
+      }
+    } else {
+      lastChildProps.current = newChildProps;
+      childPropsFromStoreUpdate.current = newChildProps;
+      renderIsScheduled.current = true;
+      additionalSubscribeListener();
+    }
+  };
+  subscription.onStateChange = checkForUpdates;
+  subscription.trySubscribe();
+  checkForUpdates();
+  const unsubscribeWrapper = () => {
+    didUnsubscribe = true;
+    subscription.tryUnsubscribe();
+    subscription.onStateChange = null;
+    if (lastThrownError) {
+      throw lastThrownError;
+    }
+  };
+  return unsubscribeWrapper;
+}
+function strictEqual(a, b) {
+  return a === b;
+}
+var hasWarnedAboutDeprecatedPureOption = false;
+function connect(mapStateToProps, mapDispatchToProps, mergeProps, {
+  // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.
+  // @ts-ignore
+  pure,
+  areStatesEqual = strictEqual,
+  areOwnPropsEqual = shallowEqual,
+  areStatePropsEqual = shallowEqual,
+  areMergedPropsEqual = shallowEqual,
+  // use React's forwardRef to expose a ref of the wrapped component
+  forwardRef = false,
+  // the context consumer to use
+  context = ReactReduxContext
+} = {}) {
+  if (true) {
+    if (pure !== void 0 && !hasWarnedAboutDeprecatedPureOption) {
+      hasWarnedAboutDeprecatedPureOption = true;
+      warning(
+        'The `pure` option has been removed. `connect` is now always a "pure/memoized" component'
+      );
+    }
+  }
+  const Context = context;
+  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);
+  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);
+  const initMergeProps = mergePropsFactory(mergeProps);
+  const shouldHandleStateChanges = Boolean(mapStateToProps);
+  const wrapWithConnect = (WrappedComponent) => {
+    if (true) {
+      const isValid = /* @__PURE__ */ isValidElementType(WrappedComponent);
+      if (!isValid)
+        throw new Error(
+          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(
+            WrappedComponent
+          )}`
+        );
+    }
+    const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || "Component";
+    const displayName = `Connect(${wrappedComponentName})`;
+    const selectorFactoryOptions = {
+      shouldHandleStateChanges,
+      displayName,
+      wrappedComponentName,
+      WrappedComponent,
+      // @ts-ignore
+      initMapStateToProps,
+      initMapDispatchToProps,
+      initMergeProps,
+      areStatesEqual,
+      areStatePropsEqual,
+      areOwnPropsEqual,
+      areMergedPropsEqual
+    };
+    function ConnectFunction(props) {
+      const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {
+        const { reactReduxForwardedRef: reactReduxForwardedRef2, ...wrapperProps2 } = props;
+        return [props.context, reactReduxForwardedRef2, wrapperProps2];
+      }, [props]);
+      const ContextToUse = React.useMemo(() => {
+        let ResultContext = Context;
+        if (propsContext?.Consumer) {
+          if (true) {
+            const isValid = /* @__PURE__ */ isContextConsumer(
+              // @ts-ignore
+              /* @__PURE__ */ React.createElement(propsContext.Consumer, null)
+            );
+            if (!isValid) {
+              throw new Error(
+                "You must pass a valid React context consumer as `props.context`"
+              );
+            }
+            ResultContext = propsContext;
+          }
+        }
+        return ResultContext;
+      }, [propsContext, Context]);
+      const contextValue = React.useContext(ContextToUse);
+      const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);
+      const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);
+      if (!didStoreComeFromProps && !didStoreComeFromContext) {
+        throw new Error(
+          `Could not find "store" in the context of "${displayName}". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to ${displayName} in connect options.`
+        );
+      }
+      const store = didStoreComeFromProps ? props.store : contextValue.store;
+      const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;
+      const childPropsSelector = React.useMemo(() => {
+        return finalPropsSelectorFactory(store.dispatch, selectorFactoryOptions);
+      }, [store]);
+      const [subscription, notifyNestedSubs] = React.useMemo(() => {
+        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY;
+        const subscription2 = createSubscription(
+          store,
+          didStoreComeFromProps ? void 0 : contextValue.subscription
+        );
+        const notifyNestedSubs2 = subscription2.notifyNestedSubs.bind(subscription2);
+        return [subscription2, notifyNestedSubs2];
+      }, [store, didStoreComeFromProps, contextValue]);
+      const overriddenContextValue = React.useMemo(() => {
+        if (didStoreComeFromProps) {
+          return contextValue;
+        }
+        return {
+          ...contextValue,
+          subscription
+        };
+      }, [didStoreComeFromProps, contextValue, subscription]);
+      const lastChildProps = React.useRef(void 0);
+      const lastWrapperProps = React.useRef(wrapperProps);
+      const childPropsFromStoreUpdate = React.useRef(void 0);
+      const renderIsScheduled = React.useRef(false);
+      const isMounted = React.useRef(false);
+      const latestSubscriptionCallbackError = React.useRef(
+        void 0
+      );
+      useIsomorphicLayoutEffect(() => {
+        isMounted.current = true;
+        return () => {
+          isMounted.current = false;
+        };
+      }, []);
+      const actualChildPropsSelector = React.useMemo(() => {
+        const selector = () => {
+          if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {
+            return childPropsFromStoreUpdate.current;
+          }
+          return childPropsSelector(store.getState(), wrapperProps);
+        };
+        return selector;
+      }, [store, wrapperProps]);
+      const subscribeForReact = React.useMemo(() => {
+        const subscribe = (reactListener) => {
+          if (!subscription) {
+            return () => {
+            };
+          }
+          return subscribeUpdates(
+            shouldHandleStateChanges,
+            store,
+            subscription,
+            // @ts-ignore
+            childPropsSelector,
+            lastWrapperProps,
+            lastChildProps,
+            renderIsScheduled,
+            isMounted,
+            childPropsFromStoreUpdate,
+            notifyNestedSubs,
+            reactListener
+          );
+        };
+        return subscribe;
+      }, [subscription]);
+      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [
+        lastWrapperProps,
+        lastChildProps,
+        renderIsScheduled,
+        wrapperProps,
+        childPropsFromStoreUpdate,
+        notifyNestedSubs
+      ]);
+      let actualChildProps;
+      try {
+        actualChildProps = React.useSyncExternalStore(
+          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing
+          subscribeForReact,
+          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,
+          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.
+          actualChildPropsSelector,
+          getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector
+        );
+      } catch (err) {
+        if (latestSubscriptionCallbackError.current) {
+          ;
+          err.message += `
+The error may be correlated with this previous error:
+${latestSubscriptionCallbackError.current.stack}
+
+`;
+        }
+        throw err;
+      }
+      useIsomorphicLayoutEffect(() => {
+        latestSubscriptionCallbackError.current = void 0;
+        childPropsFromStoreUpdate.current = void 0;
+        lastChildProps.current = actualChildProps;
+      });
+      const renderedWrappedComponent = React.useMemo(() => {
+        return (
+          // @ts-ignore
+          /* @__PURE__ */ React.createElement(
+            WrappedComponent,
+            {
+              ...actualChildProps,
+              ref: reactReduxForwardedRef
+            }
+          )
+        );
+      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]);
+      const renderedChild = React.useMemo(() => {
+        if (shouldHandleStateChanges) {
+          return /* @__PURE__ */ React.createElement(ContextToUse.Provider, { value: overriddenContextValue }, renderedWrappedComponent);
+        }
+        return renderedWrappedComponent;
+      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);
+      return renderedChild;
+    }
+    const _Connect = React.memo(ConnectFunction);
+    const Connect = _Connect;
+    Connect.WrappedComponent = WrappedComponent;
+    Connect.displayName = ConnectFunction.displayName = displayName;
+    if (forwardRef) {
+      const _forwarded = React.forwardRef(
+        function forwardConnectRef(props, ref) {
+          return /* @__PURE__ */ React.createElement(Connect, { ...props, reactReduxForwardedRef: ref });
+        }
+      );
+      const forwarded = _forwarded;
+      forwarded.displayName = displayName;
+      forwarded.WrappedComponent = WrappedComponent;
+      return /* @__PURE__ */ hoistNonReactStatics(forwarded, WrappedComponent);
+    }
+    return /* @__PURE__ */ hoistNonReactStatics(Connect, WrappedComponent);
+  };
+  return wrapWithConnect;
+}
+var connect_default = connect;
+
+// src/components/Provider.tsx
+function Provider(providerProps) {
+  const { children, context, serverState, store } = providerProps;
+  const contextValue = React.useMemo(() => {
+    const subscription = createSubscription(store);
+    const baseContextValue = {
+      store,
+      subscription,
+      getServerState: serverState ? () => serverState : void 0
+    };
+    if (false) {
+      return baseContextValue;
+    } else {
+      const { identityFunctionCheck = "once", stabilityCheck = "once" } = providerProps;
+      return /* @__PURE__ */ Object.assign(baseContextValue, {
+        stabilityCheck,
+        identityFunctionCheck
+      });
+    }
+  }, [store, serverState]);
+  const previousState = React.useMemo(() => store.getState(), [store]);
+  useIsomorphicLayoutEffect(() => {
+    const { subscription } = contextValue;
+    subscription.onStateChange = subscription.notifyNestedSubs;
+    subscription.trySubscribe();
+    if (previousState !== store.getState()) {
+      subscription.notifyNestedSubs();
+    }
+    return () => {
+      subscription.tryUnsubscribe();
+      subscription.onStateChange = void 0;
+    };
+  }, [contextValue, previousState]);
+  const Context = context || ReactReduxContext;
+  return /* @__PURE__ */ React.createElement(Context.Provider, { value: contextValue }, children);
+}
+var Provider_default = Provider;
+
+// src/hooks/useReduxContext.ts
+function createReduxContextHook(context = ReactReduxContext) {
+  return function useReduxContext2() {
+    const contextValue = React.useContext(context);
+    if (!contextValue) {
+      throw new Error(
+        "could not find react-redux context value; please ensure the component is wrapped in a <Provider>"
+      );
+    }
+    return contextValue;
+  };
+}
+var useReduxContext = /* @__PURE__ */ createReduxContextHook();
+
+// src/hooks/useStore.ts
+function createStoreHook(context = ReactReduxContext) {
+  const useReduxContext2 = context === ReactReduxContext ? useReduxContext : (
+    // @ts-ignore
+    createReduxContextHook(context)
+  );
+  const useStore2 = () => {
+    const { store } = useReduxContext2();
+    return store;
+  };
+  Object.assign(useStore2, {
+    withTypes: () => useStore2
+  });
+  return useStore2;
+}
+var useStore = /* @__PURE__ */ createStoreHook();
+
+// src/hooks/useDispatch.ts
+function createDispatchHook(context = ReactReduxContext) {
+  const useStore2 = context === ReactReduxContext ? useStore : createStoreHook(context);
+  const useDispatch2 = () => {
+    const store = useStore2();
+    return store.dispatch;
+  };
+  Object.assign(useDispatch2, {
+    withTypes: () => useDispatch2
+  });
+  return useDispatch2;
+}
+var useDispatch = /* @__PURE__ */ createDispatchHook();
+
+// src/hooks/useSelector.ts
+var import_with_selector = require("use-sync-external-store/with-selector.js");
+var refEquality = (a, b) => a === b;
+function createSelectorHook(context = ReactReduxContext) {
+  const useReduxContext2 = context === ReactReduxContext ? useReduxContext : createReduxContextHook(context);
+  const useSelector2 = (selector, equalityFnOrOptions = {}) => {
+    const { equalityFn = refEquality } = typeof equalityFnOrOptions === "function" ? { equalityFn: equalityFnOrOptions } : equalityFnOrOptions;
+    if (true) {
+      if (!selector) {
+        throw new Error(`You must pass a selector to useSelector`);
+      }
+      if (typeof selector !== "function") {
+        throw new Error(`You must pass a function as a selector to useSelector`);
+      }
+      if (typeof equalityFn !== "function") {
+        throw new Error(
+          `You must pass a function as an equality function to useSelector`
+        );
+      }
+    }
+    const reduxContext = useReduxContext2();
+    const { store, subscription, getServerState } = reduxContext;
+    const firstRun = React.useRef(true);
+    const wrappedSelector = React.useCallback(
+      {
+        [selector.name](state) {
+          const selected = selector(state);
+          if (true) {
+            const { devModeChecks = {} } = typeof equalityFnOrOptions === "function" ? {} : equalityFnOrOptions;
+            const { identityFunctionCheck, stabilityCheck } = reduxContext;
+            const {
+              identityFunctionCheck: finalIdentityFunctionCheck,
+              stabilityCheck: finalStabilityCheck
+            } = {
+              stabilityCheck,
+              identityFunctionCheck,
+              ...devModeChecks
+            };
+            if (finalStabilityCheck === "always" || finalStabilityCheck === "once" && firstRun.current) {
+              const toCompare = selector(state);
+              if (!equalityFn(selected, toCompare)) {
+                let stack = void 0;
+                try {
+                  throw new Error();
+                } catch (e) {
+                  ;
+                  ({ stack } = e);
+                }
+                console.warn(
+                  "Selector " + (selector.name || "unknown") + " returned a different result when called with the same parameters. This can lead to unnecessary rerenders.\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization",
+                  {
+                    state,
+                    selected,
+                    selected2: toCompare,
+                    stack
+                  }
+                );
+              }
+            }
+            if (finalIdentityFunctionCheck === "always" || finalIdentityFunctionCheck === "once" && firstRun.current) {
+              if (selected === state) {
+                let stack = void 0;
+                try {
+                  throw new Error();
+                } catch (e) {
+                  ;
+                  ({ stack } = e);
+                }
+                console.warn(
+                  "Selector " + (selector.name || "unknown") + " returned the root state when called. This can lead to unnecessary rerenders.\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.",
+                  { stack }
+                );
+              }
+            }
+            if (firstRun.current) firstRun.current = false;
+          }
+          return selected;
+        }
+      }[selector.name],
+      [selector]
+    );
+    const selectedState = (0, import_with_selector.useSyncExternalStoreWithSelector)(
+      subscription.addNestedSub,
+      store.getState,
+      getServerState || store.getState,
+      wrappedSelector,
+      equalityFn
+    );
+    React.useDebugValue(selectedState);
+    return selectedState;
+  };
+  Object.assign(useSelector2, {
+    withTypes: () => useSelector2
+  });
+  return useSelector2;
+}
+var useSelector = /* @__PURE__ */ createSelectorHook();
+
+// src/exports.ts
+var batch = defaultNoopBatch;
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  Provider,
+  ReactReduxContext,
+  batch,
+  connect,
+  createDispatchHook,
+  createSelectorHook,
+  createStoreHook,
+  shallowEqual,
+  useDispatch,
+  useSelector,
+  useStore
+});
+//# sourceMappingURL=react-redux.development.cjs.map
Index: node_modules/react-redux/dist/cjs/react-redux.development.cjs.map
===================================================================
--- node_modules/react-redux/dist/cjs/react-redux.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/cjs/react-redux.development.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/index.ts","../../src/utils/react.ts","../../src/utils/react-is.ts","../../src/utils/warning.ts","../../src/connect/verifySubselectors.ts","../../src/connect/selectorFactory.ts","../../src/utils/bindActionCreators.ts","../../src/utils/isPlainObject.ts","../../src/utils/verifyPlainObject.ts","../../src/connect/wrapMapToProps.ts","../../src/connect/invalidArgFactory.ts","../../src/connect/mapDispatchToProps.ts","../../src/connect/mapStateToProps.ts","../../src/connect/mergeProps.ts","../../src/utils/batch.ts","../../src/utils/Subscription.ts","../../src/utils/useIsomorphicLayoutEffect.ts","../../src/utils/shallowEqual.ts","../../src/utils/hoistStatics.ts","../../src/components/Context.ts","../../src/components/connect.tsx","../../src/components/Provider.tsx","../../src/hooks/useReduxContext.ts","../../src/hooks/useStore.ts","../../src/hooks/useDispatch.ts","../../src/hooks/useSelector.ts","../../src/exports.ts"],"sourcesContent":["export * from './exports'\n","import * as React from 'react'\n\nexport { React }\n","import type { ElementType, MemoExoticComponent, ReactElement } from 'react'\nimport { React } from './react'\n\n// Directly ported from:\n// https://unpkg.com/browse/react-is@19.0.0/cjs/react-is.production.js\n// It's very possible this could change in the future, but given that\n// we only use these in `connect`, this is a low priority.\n\nexport const IS_REACT_19 = /* @__PURE__ */ React.version.startsWith('19')\n\nconst REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(\n  IS_REACT_19 ? 'react.transitional.element' : 'react.element',\n)\nconst REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for('react.portal')\nconst REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for('react.fragment')\nconst REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for('react.strict_mode')\nconst REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for('react.profiler')\nconst REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for('react.consumer')\nconst REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for('react.context')\nconst REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for('react.forward_ref')\nconst REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for('react.suspense')\nconst REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(\n  'react.suspense_list',\n)\nconst REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for('react.memo')\nconst REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for('react.lazy')\nconst REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for('react.offscreen')\nconst REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(\n  'react.client.reference',\n)\n\nexport const ForwardRef = REACT_FORWARD_REF_TYPE\nexport const Memo = REACT_MEMO_TYPE\n\nexport function isValidElementType(type: any): type is ElementType {\n  return typeof type === 'string' ||\n    typeof type === 'function' ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    type === REACT_OFFSCREEN_TYPE ||\n    (typeof type === 'object' &&\n      type !== null &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        type.getModuleId !== undefined))\n    ? !0\n    : !1\n}\n\nfunction typeOf(object: any): symbol | undefined {\n  if (typeof object === 'object' && object !== null) {\n    const { $$typeof } = object\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n            return object\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object\n              case REACT_CONSUMER_TYPE:\n                return object\n              default:\n                return $$typeof\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof\n    }\n  }\n}\n\nexport function isContextConsumer(object: any): object is ReactElement {\n  return IS_REACT_19\n    ? typeOf(object) === REACT_CONSUMER_TYPE\n    : typeOf(object) === REACT_CONTEXT_TYPE\n}\n\nexport function isMemo(object: any): object is MemoExoticComponent<any> {\n  return typeOf(object) === REACT_MEMO_TYPE\n}\n","/**\r\n * Prints a warning in the console if it exists.\r\n *\r\n * @param {String} message The warning message.\r\n * @returns {void}\r\n */\r\nexport default function warning(message: string) {\r\n  /* eslint-disable no-console */\r\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\r\n    console.error(message)\r\n  }\r\n  /* eslint-enable no-console */\r\n  try {\r\n    // This error was thrown as a convenience so that if you enable\r\n    // \"break on all exceptions\" in your console,\r\n    // it would pause the execution at this line.\r\n    throw new Error(message)\r\n    /* eslint-disable no-empty */\r\n  } catch (e) {}\r\n  /* eslint-enable no-empty */\r\n}\r\n","import warning from '../utils/warning'\n\nfunction verify(selector: unknown, methodName: string): void {\n  if (!selector) {\n    throw new Error(`Unexpected value for ${methodName} in connect.`)\n  } else if (\n    methodName === 'mapStateToProps' ||\n    methodName === 'mapDispatchToProps'\n  ) {\n    if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) {\n      warning(\n        `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`,\n      )\n    }\n  }\n}\n\nexport default function verifySubselectors(\n  mapStateToProps: unknown,\n  mapDispatchToProps: unknown,\n  mergeProps: unknown,\n): void {\n  verify(mapStateToProps, 'mapStateToProps')\n  verify(mapDispatchToProps, 'mapDispatchToProps')\n  verify(mergeProps, 'mergeProps')\n}\n","import type { Dispatch, Action } from 'redux'\nimport type { ComponentType } from 'react'\nimport verifySubselectors from './verifySubselectors'\nimport type { EqualityFn, ExtendedEqualityFn } from '../types'\n\nexport type SelectorFactory<S, TProps, TOwnProps, TFactoryOptions> = (\n  dispatch: Dispatch<Action<string>>,\n  factoryOptions: TFactoryOptions,\n) => Selector<S, TProps, TOwnProps>\n\nexport type Selector<S, TProps, TOwnProps = null> = TOwnProps extends\n  | null\n  | undefined\n  ? (state: S) => TProps\n  : (state: S, ownProps: TOwnProps) => TProps\n\nexport type MapStateToProps<TStateProps, TOwnProps, State> = (\n  state: State,\n  ownProps: TOwnProps,\n) => TStateProps\n\nexport type MapStateToPropsFactory<TStateProps, TOwnProps, State> = (\n  initialState: State,\n  ownProps: TOwnProps,\n) => MapStateToProps<TStateProps, TOwnProps, State>\n\nexport type MapStateToPropsParam<TStateProps, TOwnProps, State> =\n  | MapStateToPropsFactory<TStateProps, TOwnProps, State>\n  | MapStateToProps<TStateProps, TOwnProps, State>\n  | null\n  | undefined\n\nexport type MapDispatchToPropsFunction<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => TDispatchProps\n\nexport type MapDispatchToProps<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n  | TDispatchProps\n\nexport type MapDispatchToPropsFactory<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsParam<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToProps<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsNonObject<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> = (\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n) => TMergedProps\n\ninterface PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly areStatesEqual: ExtendedEqualityFn<State, TOwnProps>\n  readonly areStatePropsEqual: EqualityFn<TStateProps>\n  readonly areOwnPropsEqual: EqualityFn<TOwnProps>\n}\n\nfunction pureFinalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  mapStateToProps: WrappedMapStateToProps<TStateProps, TOwnProps, State>,\n  mapDispatchToProps: WrappedMapDispatchToProps<TDispatchProps, TOwnProps>,\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  dispatch: Dispatch<Action<string>>,\n  {\n    areStatesEqual,\n    areOwnPropsEqual,\n    areStatePropsEqual,\n  }: PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State>,\n) {\n  let hasRunAtLeastOnce = false\n  let state: State\n  let ownProps: TOwnProps\n  let stateProps: TStateProps\n  let dispatchProps: TDispatchProps\n  let mergedProps: TMergedProps\n\n  function handleFirstCall(firstState: State, firstOwnProps: TOwnProps) {\n    state = firstState\n    ownProps = firstOwnProps\n    stateProps = mapStateToProps(state, ownProps)\n    dispatchProps = mapDispatchToProps(dispatch, ownProps)\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    hasRunAtLeastOnce = true\n    return mergedProps\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps)\n      stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewState() {\n    const nextStateProps = mapStateToProps(state, ownProps)\n    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps)\n    stateProps = nextStateProps\n\n    if (statePropsChanged)\n      mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n    return mergedProps\n  }\n\n  function handleSubsequentCalls(nextState: State, nextOwnProps: TOwnProps) {\n    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps)\n    const stateChanged = !areStatesEqual(\n      nextState,\n      state,\n      nextOwnProps,\n      ownProps,\n    )\n    state = nextState\n    ownProps = nextOwnProps\n\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState()\n    if (propsChanged) return handleNewProps()\n    if (stateChanged) return handleNewState()\n    return mergedProps\n  }\n\n  return function pureFinalPropsSelector(\n    nextState: State,\n    nextOwnProps: TOwnProps,\n  ) {\n    return hasRunAtLeastOnce\n      ? handleSubsequentCalls(nextState, nextOwnProps)\n      : handleFirstCall(nextState, nextOwnProps)\n  }\n}\n\ninterface WrappedMapStateToProps<TStateProps, TOwnProps, State> {\n  (state: State, ownProps: TOwnProps): TStateProps\n  readonly dependsOnOwnProps: boolean\n}\n\ninterface WrappedMapDispatchToProps<TDispatchProps, TOwnProps> {\n  (dispatch: Dispatch<Action<string>>, ownProps: TOwnProps): TDispatchProps\n  readonly dependsOnOwnProps: boolean\n}\n\nexport interface InitOptions<TStateProps, TOwnProps, TMergedProps, State>\n  extends PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly shouldHandleStateChanges: boolean\n  readonly displayName: string\n  readonly wrappedComponentName: string\n  readonly WrappedComponent: ComponentType<TOwnProps>\n  readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n}\n\nexport interface SelectorFactoryOptions<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n> extends InitOptions<TStateProps, TOwnProps, TMergedProps, State> {\n  readonly initMapStateToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapStateToProps<TStateProps, TOwnProps, State>\n  readonly initMapDispatchToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapDispatchToProps<TDispatchProps, TOwnProps>\n  readonly initMergeProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>\n}\n\n// TODO: Add more comments\n\n// The selector returned by selectorFactory will memoize its results,\n// allowing connect's shouldComponentUpdate to return false if final\n// props have not changed.\n\nexport default function finalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  dispatch: Dispatch<Action<string>>,\n  {\n    initMapStateToProps,\n    initMapDispatchToProps,\n    initMergeProps,\n    ...options\n  }: SelectorFactoryOptions<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >,\n) {\n  const mapStateToProps = initMapStateToProps(dispatch, options)\n  const mapDispatchToProps = initMapDispatchToProps(dispatch, options)\n  const mergeProps = initMergeProps(dispatch, options)\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps)\n  }\n\n  return pureFinalPropsSelectorFactory<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options)\n}\n","import type { ActionCreatorsMapObject, Dispatch } from 'redux'\n\nexport default function bindActionCreators(\n  actionCreators: ActionCreatorsMapObject,\n  dispatch: Dispatch,\n): ActionCreatorsMapObject {\n  const boundActionCreators: ActionCreatorsMapObject = {}\n\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key]\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args))\n    }\n  }\n  return boundActionCreators\n}\n","/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: unknown) {\n  if (typeof obj !== 'object' || obj === null) return false\n\n  const proto = Object.getPrototypeOf(obj)\n  if (proto === null) return true\n\n  let baseProto = proto\n  while (Object.getPrototypeOf(baseProto) !== null) {\n    baseProto = Object.getPrototypeOf(baseProto)\n  }\n\n  return proto === baseProto\n}\n","import isPlainObject from './isPlainObject'\nimport warning from './warning'\n\nexport default function verifyPlainObject(\n  value: unknown,\n  displayName: string,\n  methodName: string,\n) {\n  if (!isPlainObject(value)) {\n    warning(\n      `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`,\n    )\n  }\n}\n","import type { ActionCreatorsMapObject, Dispatch, ActionCreator } from 'redux'\n\nimport type { FixTypeLater } from '../types'\nimport verifyPlainObject from '../utils/verifyPlainObject'\n\ntype AnyState = { [key: string]: any }\ntype StateOrDispatch<S extends AnyState = AnyState> = S | Dispatch\n\ntype AnyProps = { [key: string]: any }\n\nexport type MapToProps<P extends AnyProps = AnyProps> = {\n  // eslint-disable-next-line no-unused-vars\n  (stateOrDispatch: StateOrDispatch, ownProps?: P): FixTypeLater\n  dependsOnOwnProps?: boolean\n}\n\nexport function wrapMapToPropsConstant(\n  // * Note:\n  //  It seems that the dispatch argument\n  //  could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing)\n  //  and a state object in some others (ex: whenMapStateToPropsIsMissing)\n  // eslint-disable-next-line no-unused-vars\n  getConstant: (dispatch: Dispatch) =>\n    | {\n        dispatch?: Dispatch\n        dependsOnOwnProps?: boolean\n      }\n    | ActionCreatorsMapObject\n    | ActionCreator<any>,\n) {\n  return function initConstantSelector(dispatch: Dispatch) {\n    const constant = getConstant(dispatch)\n\n    function constantSelector() {\n      return constant\n    }\n    constantSelector.dependsOnOwnProps = false\n    return constantSelector\n  }\n}\n\n// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps?\nfunction getDependsOnOwnProps(mapToProps: MapToProps) {\n  return mapToProps.dependsOnOwnProps\n    ? Boolean(mapToProps.dependsOnOwnProps)\n    : mapToProps.length !== 1\n}\n\n// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\nexport function wrapMapToPropsFunc<P extends AnyProps = AnyProps>(\n  mapToProps: MapToProps,\n  methodName: string,\n) {\n  return function initProxySelector(\n    dispatch: Dispatch,\n    { displayName }: { displayName: string },\n  ) {\n    const proxy = function mapToPropsProxy(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      return proxy.dependsOnOwnProps\n        ? proxy.mapToProps(stateOrDispatch, ownProps)\n        : proxy.mapToProps(stateOrDispatch, undefined)\n    }\n\n    // allow detectFactoryAndVerify to get ownProps\n    proxy.dependsOnOwnProps = true\n\n    proxy.mapToProps = function detectFactoryAndVerify(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      proxy.mapToProps = mapToProps\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps)\n      let props = proxy(stateOrDispatch, ownProps)\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props)\n        props = proxy(stateOrDispatch, ownProps)\n      }\n\n      if (process.env.NODE_ENV !== 'production')\n        verifyPlainObject(props, displayName, methodName)\n\n      return props\n    }\n\n    return proxy\n  }\n}\n","import type { Action, Dispatch } from 'redux'\n\nexport function createInvalidArgFactory(arg: unknown, name: string) {\n  return (\n    dispatch: Dispatch<Action<string>>,\n    options: { readonly wrappedComponentName: string },\n  ) => {\n    throw new Error(\n      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${\n        options.wrappedComponentName\n      }.`,\n    )\n  }\n}\n","import type { Action, Dispatch } from 'redux'\nimport bindActionCreators from '../utils/bindActionCreators'\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapDispatchToPropsParam } from './selectorFactory'\n\nexport function mapDispatchToPropsFactory<TDispatchProps, TOwnProps>(\n  mapDispatchToProps:\n    | MapDispatchToPropsParam<TDispatchProps, TOwnProps>\n    | undefined,\n) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object'\n    ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) =>\n        // @ts-ignore\n        bindActionCreators(mapDispatchToProps, dispatch),\n      )\n    : !mapDispatchToProps\n      ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) => ({\n          dispatch,\n        }))\n      : typeof mapDispatchToProps === 'function'\n        ? // @ts-ignore\n          wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps')\n        : createInvalidArgFactory(mapDispatchToProps, 'mapDispatchToProps')\n}\n","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapStateToPropsParam } from './selectorFactory'\n\nexport function mapStateToPropsFactory<TStateProps, TOwnProps, State>(\n  mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n) {\n  return !mapStateToProps\n    ? wrapMapToPropsConstant(() => ({}))\n    : typeof mapStateToProps === 'function'\n      ? // @ts-ignore\n        wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps')\n      : createInvalidArgFactory(mapStateToProps, 'mapStateToProps')\n}\n","import type { Action, Dispatch } from 'redux'\nimport verifyPlainObject from '../utils/verifyPlainObject'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MergeProps } from './selectorFactory'\nimport type { EqualityFn } from '../types'\n\nfunction defaultMergeProps<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n): TMergedProps {\n  // @ts-ignore\n  return { ...ownProps, ...stateProps, ...dispatchProps }\n}\n\nfunction wrapMergePropsFunc<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n): (\n  dispatch: Dispatch<Action<string>>,\n  options: {\n    readonly displayName: string\n    readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n  },\n) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> {\n  return function initMergePropsProxy(\n    dispatch,\n    { displayName, areMergedPropsEqual },\n  ) {\n    let hasRunOnce = false\n    let mergedProps: TMergedProps\n\n    return function mergePropsProxy(\n      stateProps: TStateProps,\n      dispatchProps: TDispatchProps,\n      ownProps: TOwnProps,\n    ) {\n      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n      if (hasRunOnce) {\n        if (!areMergedPropsEqual(nextMergedProps, mergedProps))\n          mergedProps = nextMergedProps\n      } else {\n        hasRunOnce = true\n        mergedProps = nextMergedProps\n\n        if (process.env.NODE_ENV !== 'production')\n          verifyPlainObject(mergedProps, displayName, 'mergeProps')\n      }\n\n      return mergedProps\n    }\n  }\n}\n\nexport function mergePropsFactory<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n) {\n  return !mergeProps\n    ? () => defaultMergeProps\n    : typeof mergeProps === 'function'\n      ? wrapMergePropsFunc(mergeProps)\n      : createInvalidArgFactory(mergeProps, 'mergeProps')\n}\n","// Default to a dummy \"batch\" implementation that just runs the callback\r\nexport function defaultNoopBatch(callback: () => void) {\r\n  callback()\r\n}\r\n","import { defaultNoopBatch as batch } from './batch'\n\n// encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\ntype VoidFunc = () => void\n\ntype Listener = {\n  callback: VoidFunc\n  next: Listener | null\n  prev: Listener | null\n}\n\nfunction createListenerCollection() {\n  let first: Listener | null = null\n  let last: Listener | null = null\n\n  return {\n    clear() {\n      first = null\n      last = null\n    },\n\n    notify() {\n      batch(() => {\n        let listener = first\n        while (listener) {\n          listener.callback()\n          listener = listener.next\n        }\n      })\n    },\n\n    get() {\n      const listeners: Listener[] = []\n      let listener = first\n      while (listener) {\n        listeners.push(listener)\n        listener = listener.next\n      }\n      return listeners\n    },\n\n    subscribe(callback: () => void) {\n      let isSubscribed = true\n\n      const listener: Listener = (last = {\n        callback,\n        next: null,\n        prev: last,\n      })\n\n      if (listener.prev) {\n        listener.prev.next = listener\n      } else {\n        first = listener\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return\n        isSubscribed = false\n\n        if (listener.next) {\n          listener.next.prev = listener.prev\n        } else {\n          last = listener.prev\n        }\n        if (listener.prev) {\n          listener.prev.next = listener.next\n        } else {\n          first = listener.next\n        }\n      }\n    },\n  }\n}\n\ntype ListenerCollection = ReturnType<typeof createListenerCollection>\n\nexport interface Subscription {\n  addNestedSub: (listener: VoidFunc) => VoidFunc\n  notifyNestedSubs: VoidFunc\n  handleChangeWrapper: VoidFunc\n  isSubscribed: () => boolean\n  onStateChange?: VoidFunc | null\n  trySubscribe: VoidFunc\n  tryUnsubscribe: VoidFunc\n  getListeners: () => ListenerCollection\n}\n\nconst nullListeners = {\n  notify() {},\n  get: () => [],\n} as unknown as ListenerCollection\n\nexport function createSubscription(store: any, parentSub?: Subscription) {\n  let unsubscribe: VoidFunc | undefined\n  let listeners: ListenerCollection = nullListeners\n\n  // Reasons to keep the subscription active\n  let subscriptionsAmount = 0\n\n  // Is this specific subscription subscribed (or only nested ones?)\n  let selfSubscribed = false\n\n  function addNestedSub(listener: () => void) {\n    trySubscribe()\n\n    const cleanupListener = listeners.subscribe(listener)\n\n    // cleanup nested sub\n    let removed = false\n    return () => {\n      if (!removed) {\n        removed = true\n        cleanupListener()\n        tryUnsubscribe()\n      }\n    }\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify()\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange()\n    }\n  }\n\n  function isSubscribed() {\n    return selfSubscribed\n  }\n\n  function trySubscribe() {\n    subscriptionsAmount++\n    if (!unsubscribe) {\n      unsubscribe = parentSub\n        ? parentSub.addNestedSub(handleChangeWrapper)\n        : store.subscribe(handleChangeWrapper)\n\n      listeners = createListenerCollection()\n    }\n  }\n\n  function tryUnsubscribe() {\n    subscriptionsAmount--\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe()\n      unsubscribe = undefined\n      listeners.clear()\n      listeners = nullListeners\n    }\n  }\n\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true\n      trySubscribe()\n    }\n  }\n\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false\n      tryUnsubscribe()\n    }\n  }\n\n  const subscription: Subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners,\n  }\n\n  return subscription\n}\n","import { React } from '../utils/react'\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\n// Matches logic in React's `shared/ExecutionEnvironment` file\nconst canUseDOM = () =>\n  !!(\n    typeof window !== 'undefined' &&\n    typeof window.document !== 'undefined' &&\n    typeof window.document.createElement !== 'undefined'\n  )\n\nconst isDOM = /* @__PURE__ */ canUseDOM()\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\n/**\n * Checks if the code is running in a React Native environment.\n *\n * @returns Whether the code is running in a React Native environment.\n *\n * @see {@link https://github.com/facebook/react-native/issues/1331 Reference}\n */\nconst isRunningInReactNative = () =>\n  typeof navigator !== 'undefined' && navigator.product === 'ReactNative'\n\nconst isReactNative = /* @__PURE__ */ isRunningInReactNative()\n\nconst getUseIsomorphicLayoutEffect = () =>\n  isDOM || isReactNative ? React.useLayoutEffect : React.useEffect\n\nexport const useIsomorphicLayoutEffect =\n  /* @__PURE__ */ getUseIsomorphicLayoutEffect()\n","function is(x: unknown, y: unknown) {\r\n  if (x === y) {\r\n    return x !== 0 || y !== 0 || 1 / x === 1 / y\r\n  } else {\r\n    return x !== x && y !== y\r\n  }\r\n}\r\n\r\nexport default function shallowEqual(objA: any, objB: any) {\r\n  if (is(objA, objB)) return true\r\n\r\n  if (\r\n    typeof objA !== 'object' ||\r\n    objA === null ||\r\n    typeof objB !== 'object' ||\r\n    objB === null\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  const keysA = Object.keys(objA)\r\n  const keysB = Object.keys(objB)\r\n\r\n  if (keysA.length !== keysB.length) return false\r\n\r\n  for (let i = 0; i < keysA.length; i++) {\r\n    if (\r\n      !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\r\n      !is(objA[keysA[i]], objB[keysA[i]])\r\n    ) {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return true\r\n}\r\n","// Copied directly from:\n// https://github.com/mridgway/hoist-non-react-statics/blob/main/src/index.js\n// https://unpkg.com/browse/@types/hoist-non-react-statics@3.3.6/index.d.ts\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nimport type { ForwardRefExoticComponent, MemoExoticComponent } from 'react'\nimport { ForwardRef, Memo, isMemo } from '../utils/react-is'\n\nconst REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true,\n} as const\n\nconst FORWARD_REF_STATICS = {\n  $$typeof: true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n} as const\n\nconst MEMO_STATICS = {\n  $$typeof: true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst TYPE_STATICS = {\n  [ForwardRef]: FORWARD_REF_STATICS,\n  [Memo]: MEMO_STATICS,\n} as const\n\nfunction getStatics(component: any) {\n  // React v16.11 and below\n  if (isMemo(component)) {\n    return MEMO_STATICS\n  }\n\n  // React v16.12 and above\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS\n}\n\nexport type NonReactStatics<\n  Source,\n  C extends {\n    [key: string]: true\n  } = {},\n> = {\n  [key in Exclude<\n    keyof Source,\n    Source extends MemoExoticComponent<any>\n      ? keyof typeof MEMO_STATICS | keyof C\n      : Source extends ForwardRefExoticComponent<any>\n        ? keyof typeof FORWARD_REF_STATICS | keyof C\n        : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C\n  >]: Source[key]\n}\n\nconst defineProperty = Object.defineProperty\nconst getOwnPropertyNames = Object.getOwnPropertyNames\nconst getOwnPropertySymbols = Object.getOwnPropertySymbols\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor\nconst getPrototypeOf = Object.getPrototypeOf\nconst objectPrototype = Object.prototype\n\nexport default function hoistNonReactStatics<\n  Target,\n  Source,\n  CustomStatic extends {\n    [key: string]: true\n  } = {},\n>(\n  targetComponent: Target,\n  sourceComponent: Source,\n): Target & NonReactStatics<Source, CustomStatic> {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n\n    if (objectPrototype) {\n      const inheritedComponent = getPrototypeOf(sourceComponent)\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent)\n      }\n    }\n\n    let keys: (string | symbol)[] = getOwnPropertyNames(sourceComponent)\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent))\n    }\n\n    const targetStatics = getStatics(targetComponent)\n    const sourceStatics = getStatics(sourceComponent)\n\n    for (let i = 0; i < keys.length; ++i) {\n      const key = keys[i]\n      if (\n        !KNOWN_STATICS[key as keyof typeof KNOWN_STATICS] &&\n        !(sourceStatics && sourceStatics[key as keyof typeof sourceStatics]) &&\n        !(targetStatics && targetStatics[key as keyof typeof targetStatics])\n      ) {\n        const descriptor = getOwnPropertyDescriptor(sourceComponent, key)\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor!)\n        } catch (e) {\n          // ignore\n        }\n      }\n    }\n  }\n\n  return targetComponent as any\n}\n","import type { Context } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { Subscription } from '../utils/Subscription'\nimport type { ProviderProps } from './Provider'\n\nexport interface ReactReduxContextValue<\n  SS = any,\n  A extends Action<string> = UnknownAction,\n> extends Pick<ProviderProps, 'stabilityCheck' | 'identityFunctionCheck'> {\n  store: Store<SS, A>\n  subscription: Subscription\n  getServerState?: () => SS\n}\n\nconst ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`)\nconst gT: {\n  [ContextKey]?: Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >\n} = (\n  typeof globalThis !== 'undefined'\n    ? globalThis\n    : /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */ {}\n) as any\n\nfunction getContext(): Context<ReactReduxContextValue | null> {\n  if (!React.createContext) return {} as any\n\n  const contextMap = (gT[ContextKey] ??= new Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >())\n  let realContext = contextMap.get(React.createContext)\n  if (!realContext) {\n    realContext = React.createContext<ReactReduxContextValue | null>(\n      null as any,\n    )\n    if (process.env.NODE_ENV !== 'production') {\n      realContext.displayName = 'ReactRedux'\n    }\n    contextMap.set(React.createContext, realContext)\n  }\n  return realContext\n}\n\nexport const ReactReduxContext = /*#__PURE__*/ getContext()\n\nexport type ReactReduxContextInstance = typeof ReactReduxContext\n","/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport type { ComponentType } from 'react'\nimport { React } from '../utils/react'\nimport { isValidElementType, isContextConsumer } from '../utils/react-is'\n\nimport type { Store } from 'redux'\n\nimport type {\n  ConnectedComponent,\n  InferableComponentEnhancer,\n  InferableComponentEnhancerWithProps,\n  ResolveThunks,\n  DispatchProp,\n  ConnectPropsMaybeWithoutContext,\n} from '../types'\n\nimport type {\n  MapStateToPropsParam,\n  MapDispatchToPropsParam,\n  MergeProps,\n  MapDispatchToPropsNonObject,\n  SelectorFactoryOptions,\n} from '../connect/selectorFactory'\nimport defaultSelectorFactory from '../connect/selectorFactory'\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps'\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps'\nimport { mergePropsFactory } from '../connect/mergeProps'\n\nimport type { Subscription } from '../utils/Subscription'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport shallowEqual from '../utils/shallowEqual'\nimport hoistStatics from '../utils/hoistStatics'\nimport warning from '../utils/warning'\n\nimport type {\n  ReactReduxContextValue,\n  ReactReduxContextInstance,\n} from './Context'\nimport { ReactReduxContext } from './Context'\n\n// Define some constant arrays just to avoid re-creating these\nconst EMPTY_ARRAY: [unknown, number] = [null, 0]\nconst NO_SUBSCRIPTION_ARRAY = [null, null]\n\n// Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\nconst stringifyComponent = (Comp: unknown) => {\n  try {\n    return JSON.stringify(Comp)\n  } catch (err) {\n    return String(Comp)\n  }\n}\n\ntype EffectFunc = (...args: any[]) => void | ReturnType<React.EffectCallback>\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n//   and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(\n  effectFunc: EffectFunc,\n  effectArgs: any[],\n  dependencies?: React.DependencyList,\n) {\n  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies)\n}\n\n// Effect callback, extracted: assign the latest props values to refs for later usage\nfunction captureWrapperProps(\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  wrapperProps: unknown,\n  // actualChildProps: unknown,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n) {\n  // We want to capture the wrapper props and child props we used for later comparisons\n  lastWrapperProps.current = wrapperProps\n  renderIsScheduled.current = false\n\n  // If the render was from a store update, clear out that reference and cascade the subscriber update\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null\n    notifyNestedSubs()\n  }\n}\n\n// Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\nfunction subscribeUpdates(\n  shouldHandleStateChanges: boolean,\n  store: Store,\n  subscription: Subscription,\n  childPropsSelector: (state: unknown, props: unknown) => unknown,\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  isMounted: React.MutableRefObject<boolean>,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n  // forceComponentUpdateDispatch: React.Dispatch<any>,\n  additionalSubscribeListener: () => void,\n) {\n  // If we're not subscribed to the store, nothing to do here\n  if (!shouldHandleStateChanges) return () => {}\n\n  // Capture values for checking if and when this component unmounts\n  let didUnsubscribe = false\n  let lastThrownError: Error | null = null\n\n  // We'll run this callback every time a store subscription update propagates to this component\n  const checkForUpdates = () => {\n    if (didUnsubscribe || !isMounted.current) {\n      // Don't run stale listeners.\n      // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n      return\n    }\n\n    // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n    const latestStoreState = store.getState()\n\n    let newChildProps, error\n    try {\n      // Actually run the selector with the most recent store state and wrapper props\n      // to determine what the child props should be\n      newChildProps = childPropsSelector(\n        latestStoreState,\n        lastWrapperProps.current,\n      )\n    } catch (e) {\n      error = e\n      lastThrownError = e as Error | null\n    }\n\n    if (!error) {\n      lastThrownError = null\n    }\n\n    // If the child props haven't changed, nothing to do here - cascade the subscription update\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs()\n      }\n    } else {\n      // Save references to the new child props.  Note that we track the \"child props from store update\"\n      // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n      // forcing another re-render, which we don't want.\n      lastChildProps.current = newChildProps\n      childPropsFromStoreUpdate.current = newChildProps\n      renderIsScheduled.current = true\n\n      // TODO This is hacky and not how `uSES` is meant to be used\n      // Trigger the React `useSyncExternalStore` subscriber\n      additionalSubscribeListener()\n    }\n  }\n\n  // Actually subscribe to the nearest connected ancestor (or store)\n  subscription.onStateChange = checkForUpdates\n  subscription.trySubscribe()\n\n  // Pull data from the store after first render in case the store has\n  // changed since we began.\n  checkForUpdates()\n\n  const unsubscribeWrapper = () => {\n    didUnsubscribe = true\n    subscription.tryUnsubscribe()\n    subscription.onStateChange = null\n\n    if (lastThrownError) {\n      // It's possible that we caught an error due to a bad mapState function, but the\n      // parent re-rendered without this component and we're about to unmount.\n      // This shouldn't happen as long as we do top-down subscriptions correctly, but\n      // if we ever do those wrong, this throw will surface the error in our tests.\n      // In that case, throw the error from here so it doesn't get lost.\n      throw lastThrownError\n    }\n  }\n\n  return unsubscribeWrapper\n}\n\n// Reducer initial state creation for our update reducer\nconst initStateUpdates = () => EMPTY_ARRAY\n\nexport interface ConnectProps {\n  /** A custom Context instance that the component can use to access the store from an alternate Provider using that same Context instance */\n  context?: ReactReduxContextInstance\n  /** A Redux store instance to be used for subscriptions instead of the store from a Provider */\n  store?: Store\n}\n\ninterface InternalConnectProps extends ConnectProps {\n  reactReduxForwardedRef?: React.ForwardedRef<unknown>\n}\n\nfunction strictEqual(a: unknown, b: unknown) {\n  return a === b\n}\n\n/**\n * Infers the type of props that a connector will inject into a component.\n */\nexport type ConnectedProps<TConnector> =\n  TConnector extends InferableComponentEnhancerWithProps<\n    infer TInjectedProps,\n    any\n  >\n    ? unknown extends TInjectedProps\n      ? TConnector extends InferableComponentEnhancer<infer TInjectedProps>\n        ? TInjectedProps\n        : never\n      : TInjectedProps\n    : never\n\nexport interface ConnectOptions<\n  State = unknown,\n  TStateProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n> {\n  forwardRef?: boolean\n  context?: typeof ReactReduxContext\n  areStatesEqual?: (\n    nextState: State,\n    prevState: State,\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areOwnPropsEqual?: (\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areStatePropsEqual?: (\n    nextStateProps: TStateProps,\n    prevStateProps: TStateProps,\n  ) => boolean\n  areMergedPropsEqual?: (\n    nextMergedProps: TMergedProps,\n    prevMergedProps: TMergedProps,\n  ) => boolean\n}\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps\n * @param mapDispatchToProps\n * @param mergeProps\n * @param options\n */\nexport interface Connect<DefaultState = unknown> {\n  // tslint:disable:no-unnecessary-generics\n  (): InferableComponentEnhancer<DispatchProp>\n\n  /** mapState only */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  ): InferableComponentEnhancerWithProps<TStateProps & DispatchProp, TOwnProps>\n\n  /** mapDispatch only (as a function) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch only (as an object) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (as a function)*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (nullish) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n  ): InferableComponentEnhancerWithProps<TStateProps, TOwnProps>\n\n  /** mapState and mapDispatch (as an object) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mergeProps only */\n  <no_state = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<undefined, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and mergeProps */\n  <\n    TStateProps = {},\n    no_dispatch = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<TStateProps, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapDispatch (as a object) and mergeProps */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<undefined, TDispatchProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and options */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<DispatchProp & TStateProps, TOwnProps>\n\n  /** mapDispatch (as a function) and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch (as an object) and options*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as a function), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as an object), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState, mapDispatch, mergeProps, and options */\n  <\n    TStateProps = {},\n    TDispatchProps = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<\n      TStateProps,\n      TDispatchProps,\n      TOwnProps,\n      TMergedProps\n    >,\n    options?: ConnectOptions<State, TStateProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n  // tslint:enable:no-unnecessary-generics\n}\n\nlet hasWarnedAboutDeprecatedPureOption = false\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps A function that extracts values from state\n * @param mapDispatchToProps Setup for dispatching actions\n * @param mergeProps Optional callback to merge state and dispatch props together\n * @param options Options for configuring the connection\n *\n */\nfunction connect<\n  TStateProps = {},\n  TDispatchProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n  State = unknown,\n>(\n  mapStateToProps?: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  mapDispatchToProps?: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  {\n    // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n    // @ts-ignore\n    pure,\n    areStatesEqual = strictEqual,\n    areOwnPropsEqual = shallowEqual,\n    areStatePropsEqual = shallowEqual,\n    areMergedPropsEqual = shallowEqual,\n\n    // use React's forwardRef to expose a ref of the wrapped component\n    forwardRef = false,\n\n    // the context consumer to use\n    context = ReactReduxContext,\n  }: ConnectOptions<unknown, unknown, unknown, unknown> = {},\n): unknown {\n  if (process.env.NODE_ENV !== 'production') {\n    if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n      hasWarnedAboutDeprecatedPureOption = true\n      warning(\n        'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component',\n      )\n    }\n  }\n\n  const Context = context\n\n  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps)\n  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps)\n  const initMergeProps = mergePropsFactory(mergeProps)\n\n  const shouldHandleStateChanges = Boolean(mapStateToProps)\n\n  const wrapWithConnect = <TProps,>(\n    WrappedComponent: ComponentType<TProps>,\n  ) => {\n    type WrappedComponentProps = TProps &\n      ConnectPropsMaybeWithoutContext<TProps>\n\n    if (process.env.NODE_ENV !== 'production') {\n      const isValid = /*#__PURE__*/ isValidElementType(WrappedComponent)\n      if (!isValid)\n        throw new Error(\n          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\n            WrappedComponent,\n          )}`,\n        )\n    }\n\n    const wrappedComponentName =\n      WrappedComponent.displayName || WrappedComponent.name || 'Component'\n\n    const displayName = `Connect(${wrappedComponentName})`\n\n    const selectorFactoryOptions: SelectorFactoryOptions<\n      any,\n      any,\n      any,\n      any,\n      State\n    > = {\n      shouldHandleStateChanges,\n      displayName,\n      wrappedComponentName,\n      WrappedComponent,\n      // @ts-ignore\n      initMapStateToProps,\n      initMapDispatchToProps,\n      initMergeProps,\n      areStatesEqual,\n      areStatePropsEqual,\n      areOwnPropsEqual,\n      areMergedPropsEqual,\n    }\n\n    function ConnectFunction<TOwnProps>(\n      props: InternalConnectProps & TOwnProps,\n    ) {\n      const [propsContext, reactReduxForwardedRef, wrapperProps] =\n        React.useMemo(() => {\n          // Distinguish between actual \"data\" props that were passed to the wrapper component,\n          // and values needed to control behavior (forwarded refs, alternate context instances).\n          // To maintain the wrapperProps object reference, memoize this destructuring.\n          const { reactReduxForwardedRef, ...wrapperProps } = props\n          return [props.context, reactReduxForwardedRef, wrapperProps]\n        }, [props])\n\n      const ContextToUse: ReactReduxContextInstance = React.useMemo(() => {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        let ResultContext = Context\n        if (propsContext?.Consumer) {\n          if (process.env.NODE_ENV !== 'production') {\n            const isValid = /*#__PURE__*/ isContextConsumer(\n              // @ts-ignore\n              <propsContext.Consumer />,\n            )\n            if (!isValid) {\n              throw new Error(\n                'You must pass a valid React context consumer as `props.context`',\n              )\n            }\n            ResultContext = propsContext\n          }\n        }\n        return ResultContext\n      }, [propsContext, Context])\n\n      // Retrieve the store and ancestor subscription via context, if available\n      const contextValue = React.useContext(ContextToUse)\n\n      // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n      const didStoreComeFromProps =\n        Boolean(props.store) &&\n        Boolean(props.store!.getState) &&\n        Boolean(props.store!.dispatch)\n      const didStoreComeFromContext =\n        Boolean(contextValue) && Boolean(contextValue!.store)\n\n      if (\n        process.env.NODE_ENV !== 'production' &&\n        !didStoreComeFromProps &&\n        !didStoreComeFromContext\n      ) {\n        throw new Error(\n          `Could not find \"store\" in the context of ` +\n            `\"${displayName}\". Either wrap the root component in a <Provider>, ` +\n            `or pass a custom React context provider to <Provider> and the corresponding ` +\n            `React context consumer to ${displayName} in connect options.`,\n        )\n      }\n\n      // Based on the previous check, one of these must be true\n      const store: Store = didStoreComeFromProps\n        ? props.store!\n        : contextValue!.store\n\n      const getServerState = didStoreComeFromContext\n        ? contextValue!.getServerState\n        : store.getState\n\n      const childPropsSelector = React.useMemo(() => {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return defaultSelectorFactory(store.dispatch, selectorFactoryOptions)\n      }, [store])\n\n      const [subscription, notifyNestedSubs] = React.useMemo(() => {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY\n\n        // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n        const subscription = createSubscription(\n          store,\n          didStoreComeFromProps ? undefined : contextValue!.subscription,\n        )\n\n        // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n        const notifyNestedSubs =\n          subscription.notifyNestedSubs.bind(subscription)\n\n        return [subscription, notifyNestedSubs]\n      }, [store, didStoreComeFromProps, contextValue])\n\n      // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n      const overriddenContextValue = React.useMemo(() => {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue!\n        }\n\n        // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n        return {\n          ...contextValue,\n          subscription,\n        } as ReactReduxContextValue\n      }, [didStoreComeFromProps, contextValue, subscription])\n\n      // Set up refs to coordinate values between the subscription effect and the render logic\n      const lastChildProps = React.useRef<unknown>(undefined)\n      const lastWrapperProps = React.useRef(wrapperProps)\n      const childPropsFromStoreUpdate = React.useRef<unknown>(undefined)\n      const renderIsScheduled = React.useRef(false)\n      const isMounted = React.useRef(false)\n\n      // TODO: Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n       */\n      const latestSubscriptionCallbackError = React.useRef<Error | undefined>(\n        undefined,\n      )\n\n      useIsomorphicLayoutEffect(() => {\n        isMounted.current = true\n        return () => {\n          isMounted.current = false\n        }\n      }, [])\n\n      const actualChildPropsSelector = React.useMemo(() => {\n        const selector = () => {\n          // Tricky logic here:\n          // - This render may have been triggered by a Redux store update that produced new child props\n          // - However, we may have gotten new wrapper props after that\n          // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n          // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n          // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n          if (\n            childPropsFromStoreUpdate.current &&\n            wrapperProps === lastWrapperProps.current\n          ) {\n            return childPropsFromStoreUpdate.current\n          }\n\n          // TODO We're reading the store directly in render() here. Bad idea?\n          // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n          // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n          // to determine what the child props should be.\n          return childPropsSelector(store.getState(), wrapperProps)\n        }\n        return selector\n      }, [store, wrapperProps])\n\n      // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      const subscribeForReact = React.useMemo(() => {\n        const subscribe = (reactListener: () => void) => {\n          if (!subscription) {\n            return () => {}\n          }\n\n          return subscribeUpdates(\n            shouldHandleStateChanges,\n            store,\n            subscription,\n            // @ts-ignore\n            childPropsSelector,\n            lastWrapperProps,\n            lastChildProps,\n            renderIsScheduled,\n            isMounted,\n            childPropsFromStoreUpdate,\n            notifyNestedSubs,\n            reactListener,\n          )\n        }\n\n        return subscribe\n      }, [subscription])\n\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\n        lastWrapperProps,\n        lastChildProps,\n        renderIsScheduled,\n        wrapperProps,\n        childPropsFromStoreUpdate,\n        notifyNestedSubs,\n      ])\n\n      let actualChildProps: Record<string, unknown>\n\n      try {\n        actualChildProps = React.useSyncExternalStore(\n          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n          subscribeForReact,\n          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n          actualChildPropsSelector,\n          getServerState\n            ? () => childPropsSelector(getServerState(), wrapperProps)\n            : actualChildPropsSelector,\n        )\n      } catch (err) {\n        if (latestSubscriptionCallbackError.current) {\n          // eslint-disable-next-line no-extra-semi\n          ;(err as Error).message +=\n            `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`\n        }\n\n        throw err\n      }\n\n      useIsomorphicLayoutEffect(() => {\n        latestSubscriptionCallbackError.current = undefined\n        childPropsFromStoreUpdate.current = undefined\n        lastChildProps.current = actualChildProps\n      })\n\n      // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n      const renderedWrappedComponent = React.useMemo(() => {\n        return (\n          // @ts-ignore\n          <WrappedComponent\n            {...actualChildProps}\n            ref={reactReduxForwardedRef}\n          />\n        )\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps])\n\n      // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n      const renderedChild = React.useMemo(() => {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return (\n            <ContextToUse.Provider value={overriddenContextValue}>\n              {renderedWrappedComponent}\n            </ContextToUse.Provider>\n          )\n        }\n\n        return renderedWrappedComponent\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue])\n\n      return renderedChild\n    }\n\n    const _Connect = React.memo(ConnectFunction)\n\n    type ConnectedWrapperComponent = typeof _Connect & {\n      WrappedComponent: typeof WrappedComponent\n    }\n\n    // Add a hacky cast to get the right output type\n    const Connect = _Connect as unknown as ConnectedComponent<\n      typeof WrappedComponent,\n      WrappedComponentProps\n    >\n    Connect.WrappedComponent = WrappedComponent\n    Connect.displayName = ConnectFunction.displayName = displayName\n\n    if (forwardRef) {\n      const _forwarded = React.forwardRef(\n        function forwardConnectRef(props, ref) {\n          // @ts-ignore\n          return <Connect {...props} reactReduxForwardedRef={ref} />\n        },\n      )\n\n      const forwarded = _forwarded as ConnectedWrapperComponent\n      forwarded.displayName = displayName\n      forwarded.WrappedComponent = WrappedComponent\n      return /*#__PURE__*/ hoistStatics(forwarded, WrappedComponent)\n    }\n\n    return /*#__PURE__*/ hoistStatics(Connect, WrappedComponent)\n  }\n\n  return wrapWithConnect\n}\n\nexport default connect as Connect\n","import type { Context, ReactNode } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { DevModeCheckFrequency } from '../hooks/useSelector'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport type { ReactReduxContextValue } from './Context'\nimport { ReactReduxContext } from './Context'\n\nexport interface ProviderProps<\n  A extends Action<string> = UnknownAction,\n  S = unknown,\n> {\n  /**\n   * The single Redux store in your application.\n   */\n  store: Store<S, A>\n\n  /**\n   * An optional server state snapshot. Will be used during initial hydration render if available, to ensure that the UI output is consistent with the HTML generated on the server.\n   */\n  serverState?: S\n\n  /**\n   * Optional context to be used internally in react-redux. Use React.createContext() to create a context to be used.\n   * If this is used, you'll need to customize `connect` by supplying the same context provided to the Provider.\n   * Set the initial value to null, and the hooks will error\n   * if this is not overwritten by Provider.\n   */\n  context?: Context<ReactReduxContextValue<S, A> | null>\n\n  /**\n   * Determines the frequency of stability checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` stability check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck?: DevModeCheckFrequency\n\n  /**\n   * Determines the frequency of identity function checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` identity function check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck?: DevModeCheckFrequency\n\n  children: ReactNode\n}\n\nfunction Provider<A extends Action<string> = UnknownAction, S = unknown>(\n  providerProps: ProviderProps<A, S>,\n) {\n  const { children, context, serverState, store } = providerProps\n\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store)\n\n    const baseContextValue = {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : undefined,\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      return baseContextValue\n    } else {\n      const { identityFunctionCheck = 'once', stabilityCheck = 'once' } =\n        providerProps\n\n      return /* @__PURE__ */ Object.assign(baseContextValue, {\n        stabilityCheck,\n        identityFunctionCheck,\n      })\n    }\n  }, [store, serverState])\n\n  const previousState = React.useMemo(() => store.getState(), [store])\n\n  useIsomorphicLayoutEffect(() => {\n    const { subscription } = contextValue\n    subscription.onStateChange = subscription.notifyNestedSubs\n    subscription.trySubscribe()\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs()\n    }\n    return () => {\n      subscription.tryUnsubscribe()\n      subscription.onStateChange = undefined\n    }\n  }, [contextValue, previousState])\n\n  const Context = context || ReactReduxContext\n\n  return <Context.Provider value={contextValue}>{children}</Context.Provider>\n}\n\nexport default Provider\n","import { React } from '../utils/react'\nimport { ReactReduxContext } from '../components/Context'\nimport type { ReactReduxContextValue } from '../components/Context'\n\n/**\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\n */\nexport function createReduxContextHook(context = ReactReduxContext) {\n  return function useReduxContext(): ReactReduxContextValue {\n    const contextValue = React.useContext(context)\n\n    if (process.env.NODE_ENV !== 'production' && !contextValue) {\n      throw new Error(\n        'could not find react-redux context value; please ensure the component is wrapped in a <Provider>',\n      )\n    }\n\n    return contextValue!\n  }\n}\n\n/**\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @returns {any} the value of the `ReactReduxContext`\n *\n * @example\n *\n * import React from 'react'\n * import { useReduxContext } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const { store } = useReduxContext()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useReduxContext = /*#__PURE__*/ createReduxContextHook()\n","import type { Context } from 'react'\nimport type { Action, Store } from 'redux'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * Represents a type that extracts the action type from a given Redux store.\n *\n * @template StoreType - The specific type of the Redux store.\n *\n * @since 9.1.0\n * @internal\n */\nexport type ExtractStoreActionType<StoreType extends Store> =\n  StoreType extends Store<any, infer ActionType> ? ActionType : never\n\n/**\n * Represents a custom hook that provides access to the Redux store.\n *\n * @template StoreType - The specific type of the Redux store that gets returned.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseStore<StoreType extends Store> {\n  /**\n   * Returns the Redux store instance.\n   *\n   * @returns The Redux store instance.\n   */\n  (): StoreType\n\n  /**\n   * Returns the Redux store instance with specific state and action types.\n   *\n   * @returns The Redux store with the specified state and action types.\n   *\n   * @template StateType - The specific type of the state used in the store.\n   * @template ActionType - The specific type of the actions used in the store.\n   */\n  <\n    StateType extends ReturnType<StoreType['getState']> = ReturnType<\n      StoreType['getState']\n    >,\n    ActionType extends Action = ExtractStoreActionType<Store>,\n  >(): Store<StateType, ActionType>\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useStore useStore}\n   * where the type of the Redux `store` is predefined.\n   *\n   * This allows you to set the `store` type once, eliminating the need to\n   * specify it with every {@linkcode useStore useStore} call.\n   *\n   * @returns A pre-typed `useStore` with the store type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppStore = useStore.withTypes<AppStore>()\n   * ```\n   *\n   * @template OverrideStoreType - The specific type of the Redux store that gets returned.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStoreType extends StoreType,\n  >() => UseStore<OverrideStoreType>\n}\n\n/**\n * Hook factory, which creates a `useStore` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useStore` hook bound to the specified context.\n */\nexport function createStoreHook<\n  StateType = unknown,\n  ActionType extends Action = Action,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : // @ts-ignore\n        createReduxContextHook(context)\n  const useStore = () => {\n    const { store } = useReduxContext()\n    return store\n  }\n\n  Object.assign(useStore, {\n    withTypes: () => useStore,\n  })\n\n  return useStore as UseStore<Store<StateType, ActionType>>\n}\n\n/**\n * A hook to access the redux store.\n *\n * @returns {any} the redux store\n *\n * @example\n *\n * import React from 'react'\n * import { useStore } from 'react-redux'\n *\n * export const ExampleComponent = () => {\n *   const store = useStore()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useStore = /*#__PURE__*/ createStoreHook()\n","import type { Context } from 'react'\nimport type { Action, Dispatch, UnknownAction } from 'redux'\n\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport { createStoreHook, useStore as useDefaultStore } from './useStore'\n\n/**\n * Represents a custom hook that provides a dispatch function\n * from the Redux store.\n *\n * @template DispatchType - The specific type of the dispatch function.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseDispatch<\n  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,\n> {\n  /**\n   * Returns the dispatch function from the Redux store.\n   *\n   * @returns The dispatch function from the Redux store.\n   *\n   * @template AppDispatch - The specific type of the dispatch function.\n   */\n  <AppDispatch extends DispatchType = DispatchType>(): AppDispatch\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useDispatch useDispatch}\n   * where the type of the `dispatch` function is predefined.\n   *\n   * This allows you to set the `dispatch` type once, eliminating the need to\n   * specify it with every {@linkcode useDispatch useDispatch} call.\n   *\n   * @returns A pre-typed `useDispatch` with the dispatch type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppDispatch = useDispatch.withTypes<AppDispatch>()\n   * ```\n   *\n   * @template OverrideDispatchType - The specific type of the dispatch function.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideDispatchType extends DispatchType,\n  >() => UseDispatch<OverrideDispatchType>\n}\n\n/**\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useDispatch` hook bound to the specified context.\n */\nexport function createDispatchHook<\n  StateType = unknown,\n  ActionType extends Action = UnknownAction,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useStore =\n    context === ReactReduxContext ? useDefaultStore : createStoreHook(context)\n\n  const useDispatch = () => {\n    const store = useStore()\n    return store.dispatch\n  }\n\n  Object.assign(useDispatch, {\n    withTypes: () => useDispatch,\n  })\n\n  return useDispatch as UseDispatch<Dispatch<ActionType>>\n}\n\n/**\n * A hook to access the redux `dispatch` function.\n *\n * @returns {any|function} redux store's `dispatch` function\n *\n * @example\n *\n * import React, { useCallback } from 'react'\n * import { useDispatch } from 'react-redux'\n *\n * export const CounterComponent = ({ value }) => {\n *   const dispatch = useDispatch()\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\n *   return (\n *     <div>\n *       <span>{value}</span>\n *       <button onClick={increaseCounter}>Increase counter</button>\n *     </div>\n *   )\n * }\n */\nexport const useDispatch = /*#__PURE__*/ createDispatchHook()\n","//import * as React from 'react'\nimport { React } from '../utils/react'\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector.js'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport type { EqualityFn, NoInfer } from '../types'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * The frequency of development mode checks.\n *\n * @since 8.1.0\n * @internal\n */\nexport type DevModeCheckFrequency = 'never' | 'once' | 'always'\n\n/**\n * Represents the configuration for development mode checks.\n *\n * @since 9.0.0\n * @internal\n */\nexport interface DevModeChecks {\n  /**\n   * Overrides the global stability check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the stability check.\n   *\n   * @default 'once'\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck: DevModeCheckFrequency\n\n  /**\n   * Overrides the global identity function check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the identity function check.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @default 'once'\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck: DevModeCheckFrequency\n}\n\nexport interface UseSelectorOptions<Selected = unknown> {\n  equalityFn?: EqualityFn<Selected>\n\n  /**\n   * `useSelector` performs additional checks in development mode to help\n   * identify and warn about potential issues in selector behavior. This\n   * option allows you to customize the behavior of these checks per selector.\n   *\n   * @since 9.0.0\n   */\n  devModeChecks?: Partial<DevModeChecks>\n}\n\n/**\n * Represents a custom hook that allows you to extract data from the\n * Redux store state, using a selector function. The selector function\n * takes the current state as an argument and returns a part of the state\n * or some derived data. The hook also supports an optional equality\n * function or options object to customize its behavior.\n *\n * @template StateType - The specific type of state this hook operates on.\n *\n * @public\n */\nexport interface UseSelector<StateType = unknown> {\n  /**\n   * A function that takes a selector function as its first argument.\n   * The selector function is responsible for selecting a part of\n   * the Redux store's state or computing derived data.\n   *\n   * @param selector - A function that receives the current state and returns a part of the state or some derived data.\n   * @param equalityFnOrOptions - An optional equality function or options object for customizing the behavior of the selector.\n   * @returns The selected part of the state or derived data.\n   *\n   * @template TState - The specific type of state this hook operates on.\n   * @template Selected - The type of the value that the selector function will return.\n   */\n  <TState extends StateType = StateType, Selected = unknown>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions?: EqualityFn<Selected> | UseSelectorOptions<Selected>,\n  ): Selected\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useSelector useSelector}\n   * where the `state` type is predefined.\n   *\n   * This allows you to set the `state` type once, eliminating the need to\n   * specify it with every {@linkcode useSelector useSelector} call.\n   *\n   * @returns A pre-typed `useSelector` with the state type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppSelector = useSelector.withTypes<RootState>()\n   * ```\n   *\n   * @template OverrideStateType - The specific type of state this hook operates on.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStateType extends StateType,\n  >() => UseSelector<OverrideStateType>\n}\n\nconst refEquality: EqualityFn<any> = (a, b) => a === b\n\n/**\n * Hook factory, which creates a `useSelector` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useSelector` hook bound to the specified context.\n */\nexport function createSelectorHook(\n  context: React.Context<ReactReduxContextValue<\n    any,\n    any\n  > | null> = ReactReduxContext,\n): UseSelector {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : createReduxContextHook(context)\n\n  const useSelector = <TState, Selected>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions:\n      | EqualityFn<NoInfer<Selected>>\n      | UseSelectorOptions<NoInfer<Selected>> = {},\n  ): Selected => {\n    const { equalityFn = refEquality } =\n      typeof equalityFnOrOptions === 'function'\n        ? { equalityFn: equalityFnOrOptions }\n        : equalityFnOrOptions\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`)\n      }\n      if (typeof selector !== 'function') {\n        throw new Error(`You must pass a function as a selector to useSelector`)\n      }\n      if (typeof equalityFn !== 'function') {\n        throw new Error(\n          `You must pass a function as an equality function to useSelector`,\n        )\n      }\n    }\n\n    const reduxContext = useReduxContext()\n\n    const { store, subscription, getServerState } = reduxContext\n\n    const firstRun = React.useRef(true)\n\n    const wrappedSelector = React.useCallback<typeof selector>(\n      {\n        [selector.name](state: TState) {\n          const selected = selector(state)\n          if (process.env.NODE_ENV !== 'production') {\n            const { devModeChecks = {} } =\n              typeof equalityFnOrOptions === 'function'\n                ? {}\n                : equalityFnOrOptions\n            const { identityFunctionCheck, stabilityCheck } = reduxContext\n            const {\n              identityFunctionCheck: finalIdentityFunctionCheck,\n              stabilityCheck: finalStabilityCheck,\n            } = {\n              stabilityCheck,\n              identityFunctionCheck,\n              ...devModeChecks,\n            }\n            if (\n              finalStabilityCheck === 'always' ||\n              (finalStabilityCheck === 'once' && firstRun.current)\n            ) {\n              const toCompare = selector(state)\n              if (!equalityFn(selected, toCompare)) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization',\n                  {\n                    state,\n                    selected,\n                    selected2: toCompare,\n                    stack,\n                  },\n                )\n              }\n            }\n            if (\n              finalIdentityFunctionCheck === 'always' ||\n              (finalIdentityFunctionCheck === 'once' && firstRun.current)\n            ) {\n              // @ts-ignore\n              if (selected === state) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned the root state when called. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.',\n                  { stack },\n                )\n              }\n            }\n            if (firstRun.current) firstRun.current = false\n          }\n          return selected\n        },\n      }[selector.name],\n      [selector],\n    )\n\n    const selectedState = useSyncExternalStoreWithSelector(\n      subscription.addNestedSub,\n      store.getState,\n      getServerState || store.getState,\n      wrappedSelector,\n      equalityFn,\n    )\n\n    React.useDebugValue(selectedState)\n\n    return selectedState\n  }\n\n  Object.assign(useSelector, {\n    withTypes: () => useSelector,\n  })\n\n  return useSelector as UseSelector\n}\n\n/**\n * A hook to access the redux store's state. This hook takes a selector function\n * as an argument. The selector is called with the store state.\n *\n * This hook takes an optional equality comparison function as the second parameter\n * that allows you to customize the way the selected state is compared to determine\n * whether the component needs to be re-rendered.\n *\n * @param {Function} selector the selector function\n * @param {Function=} equalityFn the function that will be used to determine equality\n *\n * @returns {any} the selected state\n *\n * @example\n *\n * import React from 'react'\n * import { useSelector } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const counter = useSelector(state => state.counter)\n *   return <div>{counter}</div>\n * }\n */\nexport const useSelector = /*#__PURE__*/ createSelectorHook()\n","import connect from './components/connect'\nexport type {\n  Connect,\n  ConnectProps,\n  ConnectedProps,\n} from './components/connect'\n\nimport shallowEqual from './utils/shallowEqual'\n\nimport Provider from './components/Provider'\nimport { defaultNoopBatch } from './utils/batch'\n\nexport { ReactReduxContext } from './components/Context'\nexport type { ReactReduxContextValue } from './components/Context'\n\nexport type { ProviderProps } from './components/Provider'\n\nexport type {\n  MapDispatchToProps,\n  MapDispatchToPropsFactory,\n  MapDispatchToPropsFunction,\n  MapDispatchToPropsNonObject,\n  MapDispatchToPropsParam,\n  MapStateToProps,\n  MapStateToPropsFactory,\n  MapStateToPropsParam,\n  MergeProps,\n  Selector,\n  SelectorFactory,\n} from './connect/selectorFactory'\n\nexport { createDispatchHook, useDispatch } from './hooks/useDispatch'\nexport type { UseDispatch } from './hooks/useDispatch'\n\nexport { createSelectorHook, useSelector } from './hooks/useSelector'\nexport type { UseSelector } from './hooks/useSelector'\n\nexport { createStoreHook, useStore } from './hooks/useStore'\nexport type { UseStore } from './hooks/useStore'\n\nexport type { Subscription } from './utils/Subscription'\n\nexport * from './types'\n\n/**\n * @deprecated As of React 18, batching is enabled by default for ReactDOM and React Native.\n * This is now a no-op that immediately runs the callback.\n */\nconst batch = defaultNoopBatch\n\nexport { Provider, batch, connect, shallowEqual }\n"],"mappings":"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","names":["reactReduxForwardedRef","wrapperProps","subscription","notifyNestedSubs","useReduxContext","useReduxContext","useStore","useStore","useDispatch","useReduxContext","useSelector"]}
Index: node_modules/react-redux/dist/cjs/react-redux.production.min.cjs
===================================================================
--- node_modules/react-redux/dist/cjs/react-redux.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/cjs/react-redux.production.min.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+"use strict";var _e=Object.create;var Y=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var We=Object.getPrototypeOf,Ue=Object.prototype.hasOwnProperty;var qe=(e,t)=>{for(var o in t)Y(e,o,{get:t[o],enumerable:!0})},le=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ve(t))!Ue.call(e,r)&&r!==o&&Y(e,r,{get:()=>t[r],enumerable:!(n=Ie(t,r))||n.enumerable});return e};var Le=(e,t,o)=>(o=e!=null?_e(We(e)):{},le(t||!e||!e.__esModule?Y(o,"default",{value:e,enumerable:!0}):o,e)),je=e=>le(Y({},"__esModule",{value:!0}),e);var kt={};qe(kt,{Provider:()=>Ee,ReactReduxContext:()=>f,batch:()=>Et,connect:()=>Re,createDispatchHook:()=>pe,createSelectorHook:()=>ae,createStoreHook:()=>j,shallowEqual:()=>R,useDispatch:()=>ke,useSelector:()=>Ae,useStore:()=>G});module.exports=je(kt);var p=Le(require("react"));var $e=p.version.startsWith("19"),Ye=Symbol.for($e?"react.transitional.element":"react.element"),He=Symbol.for("react.portal"),Be=Symbol.for("react.fragment"),ze=Symbol.for("react.strict_mode"),Ke=Symbol.for("react.profiler"),Ge=Symbol.for("react.consumer"),Je=Symbol.for("react.context"),Te=Symbol.for("react.forward_ref"),Xe=Symbol.for("react.suspense"),Ze=Symbol.for("react.suspense_list"),re=Symbol.for("react.memo"),Qe=Symbol.for("react.lazy");var fe=Te,Se=re;function et(e){if(typeof e=="object"&&e!==null){let{$$typeof:t}=e;switch(t){case Ye:switch(e=e.type,e){case Be:case Ke:case ze:case Xe:case Ze:return e;default:switch(e=e&&e.$$typeof,e){case Je:case Te:case Qe:case re:return e;case Ge:return e;default:return t}}case He:return t}}}function ye(e){return et(e)===re}function tt(e,t,o,n,{areStatesEqual:r,areOwnPropsEqual:s,areStatePropsEqual:i}){let u=!1,a,c,d,P,l;function x(S,m){return a=S,c=m,d=e(a,c),P=t(n,c),l=o(d,P,c),u=!0,l}function y(){return d=e(a,c),t.dependsOnOwnProps&&(P=t(n,c)),l=o(d,P,c),l}function M(){return e.dependsOnOwnProps&&(d=e(a,c)),t.dependsOnOwnProps&&(P=t(n,c)),l=o(d,P,c),l}function T(){let S=e(a,c),m=!i(S,d);return d=S,m&&(l=o(d,P,c)),l}function w(S,m){let C=!s(m,c),v=!r(S,a,m,c);return a=S,c=m,C&&v?y():C?M():v?T():l}return function(m,C){return u?w(m,C):x(m,C)}}function ne(e,{initMapStateToProps:t,initMapDispatchToProps:o,initMergeProps:n,...r}){let s=t(e,r),i=o(e,r),u=n(e,r);return tt(s,i,u,e,r)}function se(e,t){let o={};for(let n in e){let r=e[n];typeof r=="function"&&(o[n]=(...s)=>t(r(...s)))}return o}function U(e){return function(o){let n=e(o);function r(){return n}return r.dependsOnOwnProps=!1,r}}function me(e){return e.dependsOnOwnProps?!!e.dependsOnOwnProps:e.length!==1}function H(e,t){return function(n,{displayName:r}){let s=function(u,a){return s.dependsOnOwnProps?s.mapToProps(u,a):s.mapToProps(u,void 0)};return s.dependsOnOwnProps=!0,s.mapToProps=function(u,a){s.mapToProps=e,s.dependsOnOwnProps=me(e);let c=s(u,a);return typeof c=="function"&&(s.mapToProps=c,s.dependsOnOwnProps=me(c),c=s(u,a)),c},s}}function F(e,t){return(o,n)=>{throw new Error(`Invalid value of type ${typeof e} for ${t} argument when connecting component ${n.wrappedComponentName}.`)}}function he(e){return e&&typeof e=="object"?U(t=>se(e,t)):e?typeof e=="function"?H(e,"mapDispatchToProps"):F(e,"mapDispatchToProps"):U(t=>({dispatch:t}))}function we(e){return e?typeof e=="function"?H(e,"mapStateToProps"):F(e,"mapStateToProps"):U(()=>({}))}function ot(e,t,o){return{...o,...e,...t}}function rt(e){return function(o,{displayName:n,areMergedPropsEqual:r}){let s=!1,i;return function(a,c,d){let P=e(a,c,d);return s?r(P,i)||(i=P):(s=!0,i=P),i}}}function xe(e){return e?typeof e=="function"?rt(e):F(e,"mergeProps"):()=>ot}function B(e){e()}function nt(){let e=null,t=null;return{clear(){e=null,t=null},notify(){B(()=>{let o=e;for(;o;)o.callback(),o=o.next})},get(){let o=[],n=e;for(;n;)o.push(n),n=n.next;return o},subscribe(o){let n=!0,r=t={callback:o,next:null,prev:t};return r.prev?r.prev.next=r:e=r,function(){!n||e===null||(n=!1,r.next?r.next.prev=r.prev:t=r.prev,r.prev?r.prev.next=r.next:e=r.next)}}}}var Ce={notify(){},get:()=>[]};function z(e,t){let o,n=Ce,r=0,s=!1;function i(M){d();let T=n.subscribe(M),w=!1;return()=>{w||(w=!0,T(),P())}}function u(){n.notify()}function a(){y.onStateChange&&y.onStateChange()}function c(){return s}function d(){r++,o||(o=t?t.addNestedSub(a):e.subscribe(a),n=nt())}function P(){r--,o&&r===0&&(o(),o=void 0,n.clear(),n=Ce)}function l(){s||(s=!0,d())}function x(){s&&(s=!1,P())}let y={addNestedSub:i,notifyNestedSubs:u,handleChangeWrapper:a,isSubscribed:c,trySubscribe:l,tryUnsubscribe:x,getListeners:()=>n};return y}var st=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",pt=st(),at=()=>typeof navigator<"u"&&navigator.product==="ReactNative",ct=at(),it=()=>pt||ct?p.useLayoutEffect:p.useEffect,A=it();function Oe(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function R(e,t){if(Oe(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;let o=Object.keys(e),n=Object.keys(t);if(o.length!==n.length)return!1;for(let r=0;r<o.length;r++)if(!Object.prototype.hasOwnProperty.call(t,o[r])||!Oe(e[o[r]],t[o[r]]))return!1;return!0}var ut={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Pt={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},dt={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Me={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},lt={[fe]:dt,[Se]:Me};function De(e){return ye(e)?Me:lt[e.$$typeof]||ut}var Tt=Object.defineProperty,ft=Object.getOwnPropertyNames,be=Object.getOwnPropertySymbols,St=Object.getOwnPropertyDescriptor,yt=Object.getPrototypeOf,ge=Object.prototype;function q(e,t){if(typeof t!="string"){if(ge){let s=yt(t);s&&s!==ge&&q(e,s)}let o=ft(t);be&&(o=o.concat(be(t)));let n=De(e),r=De(t);for(let s=0;s<o.length;++s){let i=o[s];if(!Pt[i]&&!(r&&r[i])&&!(n&&n[i])){let u=St(t,i);try{Tt(e,i,u)}catch{}}}}return e}var mt=Symbol.for("react-redux-context"),ht=typeof globalThis<"u"?globalThis:{};function wt(){if(!p.createContext)return{};let e=ht[mt]??=new Map,t=e.get(p.createContext);return t||(t=p.createContext(null),e.set(p.createContext,t)),t}var f=wt();var xt=[null,null];function Ct(e,t,o){A(()=>e(...t),o)}function Ot(e,t,o,n,r,s){e.current=n,o.current=!1,r.current&&(r.current=null,s())}function Dt(e,t,o,n,r,s,i,u,a,c,d){if(!e)return()=>{};let P=!1,l=null,x=()=>{if(P||!u.current)return;let M=t.getState(),T,w;try{T=n(M,r.current)}catch(S){w=S,l=S}w||(l=null),T===s.current?i.current||c():(s.current=T,a.current=T,i.current=!0,d())};return o.onStateChange=x,o.trySubscribe(),x(),()=>{if(P=!0,o.tryUnsubscribe(),o.onStateChange=null,l)throw l}}function bt(e,t){return e===t}function gt(e,t,o,{pure:n,areStatesEqual:r=bt,areOwnPropsEqual:s=R,areStatePropsEqual:i=R,areMergedPropsEqual:u=R,forwardRef:a=!1,context:c=f}={}){let d=c,P=we(e),l=he(t),x=xe(o),y=!!e;return T=>{let w=T.displayName||T.name||"Component",S=`Connect(${w})`,m={shouldHandleStateChanges:y,displayName:S,wrappedComponentName:w,WrappedComponent:T,initMapStateToProps:P,initMapDispatchToProps:l,initMergeProps:x,areStatesEqual:r,areStatePropsEqual:i,areOwnPropsEqual:s,areMergedPropsEqual:u};function C(O){let[E,J,b]=p.useMemo(()=>{let{reactReduxForwardedRef:h,...k}=O;return[O.context,h,k]},[O]),_=p.useMemo(()=>{let h=d;return E?.Consumer,h},[E,d]),D=p.useContext(_),I=!!O.store&&!!O.store.getState&&!!O.store.dispatch,ve=!!D&&!!D.store,g=I?O.store:D.store,ce=ve?D.getServerState:g.getState,X=p.useMemo(()=>ne(g.dispatch,m),[g]),[V,ie]=p.useMemo(()=>{if(!y)return xt;let h=z(g,I?void 0:D.subscription),k=h.notifyNestedSubs.bind(h);return[h,k]},[g,I,D]),ue=p.useMemo(()=>I?D:{...D,subscription:V},[I,D,V]),Z=p.useRef(void 0),Q=p.useRef(b),W=p.useRef(void 0),Pe=p.useRef(!1),ee=p.useRef(!1),te=p.useRef(void 0);A(()=>(ee.current=!0,()=>{ee.current=!1}),[]);let de=p.useMemo(()=>()=>W.current&&b===Q.current?W.current:X(g.getState(),b),[g,b]),Ne=p.useMemo(()=>k=>V?Dt(y,g,V,X,Q,Z,Pe,ee,W,ie,k):()=>{},[V]);Ct(Ot,[Q,Z,Pe,b,W,ie]);let $;try{$=p.useSyncExternalStore(Ne,de,ce?()=>X(ce(),b):de)}catch(h){throw te.current&&(h.message+=`
+The error may be correlated with this previous error:
+${te.current.stack}
+
+`),h}A(()=>{te.current=void 0,W.current=void 0,Z.current=$});let oe=p.useMemo(()=>p.createElement(T,{...$,ref:J}),[J,T,$]);return p.useMemo(()=>y?p.createElement(_.Provider,{value:ue},oe):oe,[_,oe,ue])}let N=p.memo(C);if(N.WrappedComponent=T,N.displayName=C.displayName=S,a){let E=p.forwardRef(function(b,_){return p.createElement(N,{...b,reactReduxForwardedRef:_})});return E.displayName=S,E.WrappedComponent=T,q(E,T)}return q(N,T)}}var Re=gt;function Mt(e){let{children:t,context:o,serverState:n,store:r}=e,s=p.useMemo(()=>{let a=z(r);return{store:r,subscription:a,getServerState:n?()=>n:void 0}},[r,n]),i=p.useMemo(()=>r.getState(),[r]);return A(()=>{let{subscription:a}=s;return a.onStateChange=a.notifyNestedSubs,a.trySubscribe(),i!==r.getState()&&a.notifyNestedSubs(),()=>{a.tryUnsubscribe(),a.onStateChange=void 0}},[s,i]),p.createElement((o||f).Provider,{value:s},t)}var Ee=Mt;function L(e=f){return function(){return p.useContext(e)}}var K=L();function j(e=f){let t=e===f?K:L(e),o=()=>{let{store:n}=t();return n};return Object.assign(o,{withTypes:()=>o}),o}var G=j();function pe(e=f){let t=e===f?G:j(e),o=()=>t().dispatch;return Object.assign(o,{withTypes:()=>o}),o}var ke=pe();var Fe=require("use-sync-external-store/with-selector.js");var Rt=(e,t)=>e===t;function ae(e=f){let t=e===f?K:L(e),o=(n,r={})=>{let{equalityFn:s=Rt}=typeof r=="function"?{equalityFn:r}:r,i=t(),{store:u,subscription:a,getServerState:c}=i,d=p.useRef(!0),P=p.useCallback({[n.name](x){let y=n(x);if(0){if((m==="always"||m==="once"&&d.current)&&!s(y,C))try{}catch(N){}if((S==="always"||S==="once"&&d.current)&&y===x)try{}catch(v){}}return y}}[n.name],[n]),l=(0,Fe.useSyncExternalStoreWithSelector)(a.addNestedSub,u.getState,c||u.getState,P,s);return p.useDebugValue(l),l};return Object.assign(o,{withTypes:()=>o}),o}var Ae=ae();var Et=B;0&&(module.exports={Provider,ReactReduxContext,batch,connect,createDispatchHook,createSelectorHook,createStoreHook,shallowEqual,useDispatch,useSelector,useStore});
+//# sourceMappingURL=react-redux.production.min.cjs.map
Index: node_modules/react-redux/dist/cjs/react-redux.production.min.cjs.map
===================================================================
--- node_modules/react-redux/dist/cjs/react-redux.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/cjs/react-redux.production.min.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/index.ts","../../src/utils/react.ts","../../src/utils/react-is.ts","../../src/connect/selectorFactory.ts","../../src/utils/bindActionCreators.ts","../../src/connect/wrapMapToProps.ts","../../src/connect/invalidArgFactory.ts","../../src/connect/mapDispatchToProps.ts","../../src/connect/mapStateToProps.ts","../../src/connect/mergeProps.ts","../../src/utils/batch.ts","../../src/utils/Subscription.ts","../../src/utils/useIsomorphicLayoutEffect.ts","../../src/utils/shallowEqual.ts","../../src/utils/hoistStatics.ts","../../src/components/Context.ts","../../src/components/connect.tsx","../../src/components/Provider.tsx","../../src/hooks/useReduxContext.ts","../../src/hooks/useStore.ts","../../src/hooks/useDispatch.ts","../../src/hooks/useSelector.ts","../../src/exports.ts"],"sourcesContent":["export * from './exports'\n","import * as React from 'react'\n\nexport { React }\n","import type { ElementType, MemoExoticComponent, ReactElement } from 'react'\nimport { React } from './react'\n\n// Directly ported from:\n// https://unpkg.com/browse/react-is@19.0.0/cjs/react-is.production.js\n// It's very possible this could change in the future, but given that\n// we only use these in `connect`, this is a low priority.\n\nexport const IS_REACT_19 = /* @__PURE__ */ React.version.startsWith('19')\n\nconst REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(\n  IS_REACT_19 ? 'react.transitional.element' : 'react.element',\n)\nconst REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for('react.portal')\nconst REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for('react.fragment')\nconst REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for('react.strict_mode')\nconst REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for('react.profiler')\nconst REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for('react.consumer')\nconst REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for('react.context')\nconst REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for('react.forward_ref')\nconst REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for('react.suspense')\nconst REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(\n  'react.suspense_list',\n)\nconst REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for('react.memo')\nconst REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for('react.lazy')\nconst REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for('react.offscreen')\nconst REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(\n  'react.client.reference',\n)\n\nexport const ForwardRef = REACT_FORWARD_REF_TYPE\nexport const Memo = REACT_MEMO_TYPE\n\nexport function isValidElementType(type: any): type is ElementType {\n  return typeof type === 'string' ||\n    typeof type === 'function' ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    type === REACT_OFFSCREEN_TYPE ||\n    (typeof type === 'object' &&\n      type !== null &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        type.getModuleId !== undefined))\n    ? !0\n    : !1\n}\n\nfunction typeOf(object: any): symbol | undefined {\n  if (typeof object === 'object' && object !== null) {\n    const { $$typeof } = object\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n            return object\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object\n              case REACT_CONSUMER_TYPE:\n                return object\n              default:\n                return $$typeof\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof\n    }\n  }\n}\n\nexport function isContextConsumer(object: any): object is ReactElement {\n  return IS_REACT_19\n    ? typeOf(object) === REACT_CONSUMER_TYPE\n    : typeOf(object) === REACT_CONTEXT_TYPE\n}\n\nexport function isMemo(object: any): object is MemoExoticComponent<any> {\n  return typeOf(object) === REACT_MEMO_TYPE\n}\n","import type { Dispatch, Action } from 'redux'\nimport type { ComponentType } from 'react'\nimport verifySubselectors from './verifySubselectors'\nimport type { EqualityFn, ExtendedEqualityFn } from '../types'\n\nexport type SelectorFactory<S, TProps, TOwnProps, TFactoryOptions> = (\n  dispatch: Dispatch<Action<string>>,\n  factoryOptions: TFactoryOptions,\n) => Selector<S, TProps, TOwnProps>\n\nexport type Selector<S, TProps, TOwnProps = null> = TOwnProps extends\n  | null\n  | undefined\n  ? (state: S) => TProps\n  : (state: S, ownProps: TOwnProps) => TProps\n\nexport type MapStateToProps<TStateProps, TOwnProps, State> = (\n  state: State,\n  ownProps: TOwnProps,\n) => TStateProps\n\nexport type MapStateToPropsFactory<TStateProps, TOwnProps, State> = (\n  initialState: State,\n  ownProps: TOwnProps,\n) => MapStateToProps<TStateProps, TOwnProps, State>\n\nexport type MapStateToPropsParam<TStateProps, TOwnProps, State> =\n  | MapStateToPropsFactory<TStateProps, TOwnProps, State>\n  | MapStateToProps<TStateProps, TOwnProps, State>\n  | null\n  | undefined\n\nexport type MapDispatchToPropsFunction<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => TDispatchProps\n\nexport type MapDispatchToProps<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n  | TDispatchProps\n\nexport type MapDispatchToPropsFactory<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsParam<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToProps<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsNonObject<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> = (\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n) => TMergedProps\n\ninterface PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly areStatesEqual: ExtendedEqualityFn<State, TOwnProps>\n  readonly areStatePropsEqual: EqualityFn<TStateProps>\n  readonly areOwnPropsEqual: EqualityFn<TOwnProps>\n}\n\nfunction pureFinalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  mapStateToProps: WrappedMapStateToProps<TStateProps, TOwnProps, State>,\n  mapDispatchToProps: WrappedMapDispatchToProps<TDispatchProps, TOwnProps>,\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  dispatch: Dispatch<Action<string>>,\n  {\n    areStatesEqual,\n    areOwnPropsEqual,\n    areStatePropsEqual,\n  }: PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State>,\n) {\n  let hasRunAtLeastOnce = false\n  let state: State\n  let ownProps: TOwnProps\n  let stateProps: TStateProps\n  let dispatchProps: TDispatchProps\n  let mergedProps: TMergedProps\n\n  function handleFirstCall(firstState: State, firstOwnProps: TOwnProps) {\n    state = firstState\n    ownProps = firstOwnProps\n    stateProps = mapStateToProps(state, ownProps)\n    dispatchProps = mapDispatchToProps(dispatch, ownProps)\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    hasRunAtLeastOnce = true\n    return mergedProps\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps)\n      stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewState() {\n    const nextStateProps = mapStateToProps(state, ownProps)\n    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps)\n    stateProps = nextStateProps\n\n    if (statePropsChanged)\n      mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n    return mergedProps\n  }\n\n  function handleSubsequentCalls(nextState: State, nextOwnProps: TOwnProps) {\n    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps)\n    const stateChanged = !areStatesEqual(\n      nextState,\n      state,\n      nextOwnProps,\n      ownProps,\n    )\n    state = nextState\n    ownProps = nextOwnProps\n\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState()\n    if (propsChanged) return handleNewProps()\n    if (stateChanged) return handleNewState()\n    return mergedProps\n  }\n\n  return function pureFinalPropsSelector(\n    nextState: State,\n    nextOwnProps: TOwnProps,\n  ) {\n    return hasRunAtLeastOnce\n      ? handleSubsequentCalls(nextState, nextOwnProps)\n      : handleFirstCall(nextState, nextOwnProps)\n  }\n}\n\ninterface WrappedMapStateToProps<TStateProps, TOwnProps, State> {\n  (state: State, ownProps: TOwnProps): TStateProps\n  readonly dependsOnOwnProps: boolean\n}\n\ninterface WrappedMapDispatchToProps<TDispatchProps, TOwnProps> {\n  (dispatch: Dispatch<Action<string>>, ownProps: TOwnProps): TDispatchProps\n  readonly dependsOnOwnProps: boolean\n}\n\nexport interface InitOptions<TStateProps, TOwnProps, TMergedProps, State>\n  extends PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly shouldHandleStateChanges: boolean\n  readonly displayName: string\n  readonly wrappedComponentName: string\n  readonly WrappedComponent: ComponentType<TOwnProps>\n  readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n}\n\nexport interface SelectorFactoryOptions<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n> extends InitOptions<TStateProps, TOwnProps, TMergedProps, State> {\n  readonly initMapStateToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapStateToProps<TStateProps, TOwnProps, State>\n  readonly initMapDispatchToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapDispatchToProps<TDispatchProps, TOwnProps>\n  readonly initMergeProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>\n}\n\n// TODO: Add more comments\n\n// The selector returned by selectorFactory will memoize its results,\n// allowing connect's shouldComponentUpdate to return false if final\n// props have not changed.\n\nexport default function finalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  dispatch: Dispatch<Action<string>>,\n  {\n    initMapStateToProps,\n    initMapDispatchToProps,\n    initMergeProps,\n    ...options\n  }: SelectorFactoryOptions<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >,\n) {\n  const mapStateToProps = initMapStateToProps(dispatch, options)\n  const mapDispatchToProps = initMapDispatchToProps(dispatch, options)\n  const mergeProps = initMergeProps(dispatch, options)\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps)\n  }\n\n  return pureFinalPropsSelectorFactory<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options)\n}\n","import type { ActionCreatorsMapObject, Dispatch } from 'redux'\n\nexport default function bindActionCreators(\n  actionCreators: ActionCreatorsMapObject,\n  dispatch: Dispatch,\n): ActionCreatorsMapObject {\n  const boundActionCreators: ActionCreatorsMapObject = {}\n\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key]\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args))\n    }\n  }\n  return boundActionCreators\n}\n","import type { ActionCreatorsMapObject, Dispatch, ActionCreator } from 'redux'\n\nimport type { FixTypeLater } from '../types'\nimport verifyPlainObject from '../utils/verifyPlainObject'\n\ntype AnyState = { [key: string]: any }\ntype StateOrDispatch<S extends AnyState = AnyState> = S | Dispatch\n\ntype AnyProps = { [key: string]: any }\n\nexport type MapToProps<P extends AnyProps = AnyProps> = {\n  // eslint-disable-next-line no-unused-vars\n  (stateOrDispatch: StateOrDispatch, ownProps?: P): FixTypeLater\n  dependsOnOwnProps?: boolean\n}\n\nexport function wrapMapToPropsConstant(\n  // * Note:\n  //  It seems that the dispatch argument\n  //  could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing)\n  //  and a state object in some others (ex: whenMapStateToPropsIsMissing)\n  // eslint-disable-next-line no-unused-vars\n  getConstant: (dispatch: Dispatch) =>\n    | {\n        dispatch?: Dispatch\n        dependsOnOwnProps?: boolean\n      }\n    | ActionCreatorsMapObject\n    | ActionCreator<any>,\n) {\n  return function initConstantSelector(dispatch: Dispatch) {\n    const constant = getConstant(dispatch)\n\n    function constantSelector() {\n      return constant\n    }\n    constantSelector.dependsOnOwnProps = false\n    return constantSelector\n  }\n}\n\n// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps?\nfunction getDependsOnOwnProps(mapToProps: MapToProps) {\n  return mapToProps.dependsOnOwnProps\n    ? Boolean(mapToProps.dependsOnOwnProps)\n    : mapToProps.length !== 1\n}\n\n// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\nexport function wrapMapToPropsFunc<P extends AnyProps = AnyProps>(\n  mapToProps: MapToProps,\n  methodName: string,\n) {\n  return function initProxySelector(\n    dispatch: Dispatch,\n    { displayName }: { displayName: string },\n  ) {\n    const proxy = function mapToPropsProxy(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      return proxy.dependsOnOwnProps\n        ? proxy.mapToProps(stateOrDispatch, ownProps)\n        : proxy.mapToProps(stateOrDispatch, undefined)\n    }\n\n    // allow detectFactoryAndVerify to get ownProps\n    proxy.dependsOnOwnProps = true\n\n    proxy.mapToProps = function detectFactoryAndVerify(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      proxy.mapToProps = mapToProps\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps)\n      let props = proxy(stateOrDispatch, ownProps)\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props)\n        props = proxy(stateOrDispatch, ownProps)\n      }\n\n      if (process.env.NODE_ENV !== 'production')\n        verifyPlainObject(props, displayName, methodName)\n\n      return props\n    }\n\n    return proxy\n  }\n}\n","import type { Action, Dispatch } from 'redux'\n\nexport function createInvalidArgFactory(arg: unknown, name: string) {\n  return (\n    dispatch: Dispatch<Action<string>>,\n    options: { readonly wrappedComponentName: string },\n  ) => {\n    throw new Error(\n      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${\n        options.wrappedComponentName\n      }.`,\n    )\n  }\n}\n","import type { Action, Dispatch } from 'redux'\nimport bindActionCreators from '../utils/bindActionCreators'\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapDispatchToPropsParam } from './selectorFactory'\n\nexport function mapDispatchToPropsFactory<TDispatchProps, TOwnProps>(\n  mapDispatchToProps:\n    | MapDispatchToPropsParam<TDispatchProps, TOwnProps>\n    | undefined,\n) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object'\n    ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) =>\n        // @ts-ignore\n        bindActionCreators(mapDispatchToProps, dispatch),\n      )\n    : !mapDispatchToProps\n      ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) => ({\n          dispatch,\n        }))\n      : typeof mapDispatchToProps === 'function'\n        ? // @ts-ignore\n          wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps')\n        : createInvalidArgFactory(mapDispatchToProps, 'mapDispatchToProps')\n}\n","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapStateToPropsParam } from './selectorFactory'\n\nexport function mapStateToPropsFactory<TStateProps, TOwnProps, State>(\n  mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n) {\n  return !mapStateToProps\n    ? wrapMapToPropsConstant(() => ({}))\n    : typeof mapStateToProps === 'function'\n      ? // @ts-ignore\n        wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps')\n      : createInvalidArgFactory(mapStateToProps, 'mapStateToProps')\n}\n","import type { Action, Dispatch } from 'redux'\nimport verifyPlainObject from '../utils/verifyPlainObject'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MergeProps } from './selectorFactory'\nimport type { EqualityFn } from '../types'\n\nfunction defaultMergeProps<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n): TMergedProps {\n  // @ts-ignore\n  return { ...ownProps, ...stateProps, ...dispatchProps }\n}\n\nfunction wrapMergePropsFunc<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n): (\n  dispatch: Dispatch<Action<string>>,\n  options: {\n    readonly displayName: string\n    readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n  },\n) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> {\n  return function initMergePropsProxy(\n    dispatch,\n    { displayName, areMergedPropsEqual },\n  ) {\n    let hasRunOnce = false\n    let mergedProps: TMergedProps\n\n    return function mergePropsProxy(\n      stateProps: TStateProps,\n      dispatchProps: TDispatchProps,\n      ownProps: TOwnProps,\n    ) {\n      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n      if (hasRunOnce) {\n        if (!areMergedPropsEqual(nextMergedProps, mergedProps))\n          mergedProps = nextMergedProps\n      } else {\n        hasRunOnce = true\n        mergedProps = nextMergedProps\n\n        if (process.env.NODE_ENV !== 'production')\n          verifyPlainObject(mergedProps, displayName, 'mergeProps')\n      }\n\n      return mergedProps\n    }\n  }\n}\n\nexport function mergePropsFactory<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n) {\n  return !mergeProps\n    ? () => defaultMergeProps\n    : typeof mergeProps === 'function'\n      ? wrapMergePropsFunc(mergeProps)\n      : createInvalidArgFactory(mergeProps, 'mergeProps')\n}\n","// Default to a dummy \"batch\" implementation that just runs the callback\r\nexport function defaultNoopBatch(callback: () => void) {\r\n  callback()\r\n}\r\n","import { defaultNoopBatch as batch } from './batch'\n\n// encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\ntype VoidFunc = () => void\n\ntype Listener = {\n  callback: VoidFunc\n  next: Listener | null\n  prev: Listener | null\n}\n\nfunction createListenerCollection() {\n  let first: Listener | null = null\n  let last: Listener | null = null\n\n  return {\n    clear() {\n      first = null\n      last = null\n    },\n\n    notify() {\n      batch(() => {\n        let listener = first\n        while (listener) {\n          listener.callback()\n          listener = listener.next\n        }\n      })\n    },\n\n    get() {\n      const listeners: Listener[] = []\n      let listener = first\n      while (listener) {\n        listeners.push(listener)\n        listener = listener.next\n      }\n      return listeners\n    },\n\n    subscribe(callback: () => void) {\n      let isSubscribed = true\n\n      const listener: Listener = (last = {\n        callback,\n        next: null,\n        prev: last,\n      })\n\n      if (listener.prev) {\n        listener.prev.next = listener\n      } else {\n        first = listener\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return\n        isSubscribed = false\n\n        if (listener.next) {\n          listener.next.prev = listener.prev\n        } else {\n          last = listener.prev\n        }\n        if (listener.prev) {\n          listener.prev.next = listener.next\n        } else {\n          first = listener.next\n        }\n      }\n    },\n  }\n}\n\ntype ListenerCollection = ReturnType<typeof createListenerCollection>\n\nexport interface Subscription {\n  addNestedSub: (listener: VoidFunc) => VoidFunc\n  notifyNestedSubs: VoidFunc\n  handleChangeWrapper: VoidFunc\n  isSubscribed: () => boolean\n  onStateChange?: VoidFunc | null\n  trySubscribe: VoidFunc\n  tryUnsubscribe: VoidFunc\n  getListeners: () => ListenerCollection\n}\n\nconst nullListeners = {\n  notify() {},\n  get: () => [],\n} as unknown as ListenerCollection\n\nexport function createSubscription(store: any, parentSub?: Subscription) {\n  let unsubscribe: VoidFunc | undefined\n  let listeners: ListenerCollection = nullListeners\n\n  // Reasons to keep the subscription active\n  let subscriptionsAmount = 0\n\n  // Is this specific subscription subscribed (or only nested ones?)\n  let selfSubscribed = false\n\n  function addNestedSub(listener: () => void) {\n    trySubscribe()\n\n    const cleanupListener = listeners.subscribe(listener)\n\n    // cleanup nested sub\n    let removed = false\n    return () => {\n      if (!removed) {\n        removed = true\n        cleanupListener()\n        tryUnsubscribe()\n      }\n    }\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify()\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange()\n    }\n  }\n\n  function isSubscribed() {\n    return selfSubscribed\n  }\n\n  function trySubscribe() {\n    subscriptionsAmount++\n    if (!unsubscribe) {\n      unsubscribe = parentSub\n        ? parentSub.addNestedSub(handleChangeWrapper)\n        : store.subscribe(handleChangeWrapper)\n\n      listeners = createListenerCollection()\n    }\n  }\n\n  function tryUnsubscribe() {\n    subscriptionsAmount--\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe()\n      unsubscribe = undefined\n      listeners.clear()\n      listeners = nullListeners\n    }\n  }\n\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true\n      trySubscribe()\n    }\n  }\n\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false\n      tryUnsubscribe()\n    }\n  }\n\n  const subscription: Subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners,\n  }\n\n  return subscription\n}\n","import { React } from '../utils/react'\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\n// Matches logic in React's `shared/ExecutionEnvironment` file\nconst canUseDOM = () =>\n  !!(\n    typeof window !== 'undefined' &&\n    typeof window.document !== 'undefined' &&\n    typeof window.document.createElement !== 'undefined'\n  )\n\nconst isDOM = /* @__PURE__ */ canUseDOM()\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\n/**\n * Checks if the code is running in a React Native environment.\n *\n * @returns Whether the code is running in a React Native environment.\n *\n * @see {@link https://github.com/facebook/react-native/issues/1331 Reference}\n */\nconst isRunningInReactNative = () =>\n  typeof navigator !== 'undefined' && navigator.product === 'ReactNative'\n\nconst isReactNative = /* @__PURE__ */ isRunningInReactNative()\n\nconst getUseIsomorphicLayoutEffect = () =>\n  isDOM || isReactNative ? React.useLayoutEffect : React.useEffect\n\nexport const useIsomorphicLayoutEffect =\n  /* @__PURE__ */ getUseIsomorphicLayoutEffect()\n","function is(x: unknown, y: unknown) {\r\n  if (x === y) {\r\n    return x !== 0 || y !== 0 || 1 / x === 1 / y\r\n  } else {\r\n    return x !== x && y !== y\r\n  }\r\n}\r\n\r\nexport default function shallowEqual(objA: any, objB: any) {\r\n  if (is(objA, objB)) return true\r\n\r\n  if (\r\n    typeof objA !== 'object' ||\r\n    objA === null ||\r\n    typeof objB !== 'object' ||\r\n    objB === null\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  const keysA = Object.keys(objA)\r\n  const keysB = Object.keys(objB)\r\n\r\n  if (keysA.length !== keysB.length) return false\r\n\r\n  for (let i = 0; i < keysA.length; i++) {\r\n    if (\r\n      !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\r\n      !is(objA[keysA[i]], objB[keysA[i]])\r\n    ) {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return true\r\n}\r\n","// Copied directly from:\n// https://github.com/mridgway/hoist-non-react-statics/blob/main/src/index.js\n// https://unpkg.com/browse/@types/hoist-non-react-statics@3.3.6/index.d.ts\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nimport type { ForwardRefExoticComponent, MemoExoticComponent } from 'react'\nimport { ForwardRef, Memo, isMemo } from '../utils/react-is'\n\nconst REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true,\n} as const\n\nconst FORWARD_REF_STATICS = {\n  $$typeof: true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n} as const\n\nconst MEMO_STATICS = {\n  $$typeof: true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst TYPE_STATICS = {\n  [ForwardRef]: FORWARD_REF_STATICS,\n  [Memo]: MEMO_STATICS,\n} as const\n\nfunction getStatics(component: any) {\n  // React v16.11 and below\n  if (isMemo(component)) {\n    return MEMO_STATICS\n  }\n\n  // React v16.12 and above\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS\n}\n\nexport type NonReactStatics<\n  Source,\n  C extends {\n    [key: string]: true\n  } = {},\n> = {\n  [key in Exclude<\n    keyof Source,\n    Source extends MemoExoticComponent<any>\n      ? keyof typeof MEMO_STATICS | keyof C\n      : Source extends ForwardRefExoticComponent<any>\n        ? keyof typeof FORWARD_REF_STATICS | keyof C\n        : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C\n  >]: Source[key]\n}\n\nconst defineProperty = Object.defineProperty\nconst getOwnPropertyNames = Object.getOwnPropertyNames\nconst getOwnPropertySymbols = Object.getOwnPropertySymbols\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor\nconst getPrototypeOf = Object.getPrototypeOf\nconst objectPrototype = Object.prototype\n\nexport default function hoistNonReactStatics<\n  Target,\n  Source,\n  CustomStatic extends {\n    [key: string]: true\n  } = {},\n>(\n  targetComponent: Target,\n  sourceComponent: Source,\n): Target & NonReactStatics<Source, CustomStatic> {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n\n    if (objectPrototype) {\n      const inheritedComponent = getPrototypeOf(sourceComponent)\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent)\n      }\n    }\n\n    let keys: (string | symbol)[] = getOwnPropertyNames(sourceComponent)\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent))\n    }\n\n    const targetStatics = getStatics(targetComponent)\n    const sourceStatics = getStatics(sourceComponent)\n\n    for (let i = 0; i < keys.length; ++i) {\n      const key = keys[i]\n      if (\n        !KNOWN_STATICS[key as keyof typeof KNOWN_STATICS] &&\n        !(sourceStatics && sourceStatics[key as keyof typeof sourceStatics]) &&\n        !(targetStatics && targetStatics[key as keyof typeof targetStatics])\n      ) {\n        const descriptor = getOwnPropertyDescriptor(sourceComponent, key)\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor!)\n        } catch (e) {\n          // ignore\n        }\n      }\n    }\n  }\n\n  return targetComponent as any\n}\n","import type { Context } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { Subscription } from '../utils/Subscription'\nimport type { ProviderProps } from './Provider'\n\nexport interface ReactReduxContextValue<\n  SS = any,\n  A extends Action<string> = UnknownAction,\n> extends Pick<ProviderProps, 'stabilityCheck' | 'identityFunctionCheck'> {\n  store: Store<SS, A>\n  subscription: Subscription\n  getServerState?: () => SS\n}\n\nconst ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`)\nconst gT: {\n  [ContextKey]?: Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >\n} = (\n  typeof globalThis !== 'undefined'\n    ? globalThis\n    : /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */ {}\n) as any\n\nfunction getContext(): Context<ReactReduxContextValue | null> {\n  if (!React.createContext) return {} as any\n\n  const contextMap = (gT[ContextKey] ??= new Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >())\n  let realContext = contextMap.get(React.createContext)\n  if (!realContext) {\n    realContext = React.createContext<ReactReduxContextValue | null>(\n      null as any,\n    )\n    if (process.env.NODE_ENV !== 'production') {\n      realContext.displayName = 'ReactRedux'\n    }\n    contextMap.set(React.createContext, realContext)\n  }\n  return realContext\n}\n\nexport const ReactReduxContext = /*#__PURE__*/ getContext()\n\nexport type ReactReduxContextInstance = typeof ReactReduxContext\n","/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport type { ComponentType } from 'react'\nimport { React } from '../utils/react'\nimport { isValidElementType, isContextConsumer } from '../utils/react-is'\n\nimport type { Store } from 'redux'\n\nimport type {\n  ConnectedComponent,\n  InferableComponentEnhancer,\n  InferableComponentEnhancerWithProps,\n  ResolveThunks,\n  DispatchProp,\n  ConnectPropsMaybeWithoutContext,\n} from '../types'\n\nimport type {\n  MapStateToPropsParam,\n  MapDispatchToPropsParam,\n  MergeProps,\n  MapDispatchToPropsNonObject,\n  SelectorFactoryOptions,\n} from '../connect/selectorFactory'\nimport defaultSelectorFactory from '../connect/selectorFactory'\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps'\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps'\nimport { mergePropsFactory } from '../connect/mergeProps'\n\nimport type { Subscription } from '../utils/Subscription'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport shallowEqual from '../utils/shallowEqual'\nimport hoistStatics from '../utils/hoistStatics'\nimport warning from '../utils/warning'\n\nimport type {\n  ReactReduxContextValue,\n  ReactReduxContextInstance,\n} from './Context'\nimport { ReactReduxContext } from './Context'\n\n// Define some constant arrays just to avoid re-creating these\nconst EMPTY_ARRAY: [unknown, number] = [null, 0]\nconst NO_SUBSCRIPTION_ARRAY = [null, null]\n\n// Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\nconst stringifyComponent = (Comp: unknown) => {\n  try {\n    return JSON.stringify(Comp)\n  } catch (err) {\n    return String(Comp)\n  }\n}\n\ntype EffectFunc = (...args: any[]) => void | ReturnType<React.EffectCallback>\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n//   and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(\n  effectFunc: EffectFunc,\n  effectArgs: any[],\n  dependencies?: React.DependencyList,\n) {\n  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies)\n}\n\n// Effect callback, extracted: assign the latest props values to refs for later usage\nfunction captureWrapperProps(\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  wrapperProps: unknown,\n  // actualChildProps: unknown,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n) {\n  // We want to capture the wrapper props and child props we used for later comparisons\n  lastWrapperProps.current = wrapperProps\n  renderIsScheduled.current = false\n\n  // If the render was from a store update, clear out that reference and cascade the subscriber update\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null\n    notifyNestedSubs()\n  }\n}\n\n// Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\nfunction subscribeUpdates(\n  shouldHandleStateChanges: boolean,\n  store: Store,\n  subscription: Subscription,\n  childPropsSelector: (state: unknown, props: unknown) => unknown,\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  isMounted: React.MutableRefObject<boolean>,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n  // forceComponentUpdateDispatch: React.Dispatch<any>,\n  additionalSubscribeListener: () => void,\n) {\n  // If we're not subscribed to the store, nothing to do here\n  if (!shouldHandleStateChanges) return () => {}\n\n  // Capture values for checking if and when this component unmounts\n  let didUnsubscribe = false\n  let lastThrownError: Error | null = null\n\n  // We'll run this callback every time a store subscription update propagates to this component\n  const checkForUpdates = () => {\n    if (didUnsubscribe || !isMounted.current) {\n      // Don't run stale listeners.\n      // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n      return\n    }\n\n    // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n    const latestStoreState = store.getState()\n\n    let newChildProps, error\n    try {\n      // Actually run the selector with the most recent store state and wrapper props\n      // to determine what the child props should be\n      newChildProps = childPropsSelector(\n        latestStoreState,\n        lastWrapperProps.current,\n      )\n    } catch (e) {\n      error = e\n      lastThrownError = e as Error | null\n    }\n\n    if (!error) {\n      lastThrownError = null\n    }\n\n    // If the child props haven't changed, nothing to do here - cascade the subscription update\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs()\n      }\n    } else {\n      // Save references to the new child props.  Note that we track the \"child props from store update\"\n      // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n      // forcing another re-render, which we don't want.\n      lastChildProps.current = newChildProps\n      childPropsFromStoreUpdate.current = newChildProps\n      renderIsScheduled.current = true\n\n      // TODO This is hacky and not how `uSES` is meant to be used\n      // Trigger the React `useSyncExternalStore` subscriber\n      additionalSubscribeListener()\n    }\n  }\n\n  // Actually subscribe to the nearest connected ancestor (or store)\n  subscription.onStateChange = checkForUpdates\n  subscription.trySubscribe()\n\n  // Pull data from the store after first render in case the store has\n  // changed since we began.\n  checkForUpdates()\n\n  const unsubscribeWrapper = () => {\n    didUnsubscribe = true\n    subscription.tryUnsubscribe()\n    subscription.onStateChange = null\n\n    if (lastThrownError) {\n      // It's possible that we caught an error due to a bad mapState function, but the\n      // parent re-rendered without this component and we're about to unmount.\n      // This shouldn't happen as long as we do top-down subscriptions correctly, but\n      // if we ever do those wrong, this throw will surface the error in our tests.\n      // In that case, throw the error from here so it doesn't get lost.\n      throw lastThrownError\n    }\n  }\n\n  return unsubscribeWrapper\n}\n\n// Reducer initial state creation for our update reducer\nconst initStateUpdates = () => EMPTY_ARRAY\n\nexport interface ConnectProps {\n  /** A custom Context instance that the component can use to access the store from an alternate Provider using that same Context instance */\n  context?: ReactReduxContextInstance\n  /** A Redux store instance to be used for subscriptions instead of the store from a Provider */\n  store?: Store\n}\n\ninterface InternalConnectProps extends ConnectProps {\n  reactReduxForwardedRef?: React.ForwardedRef<unknown>\n}\n\nfunction strictEqual(a: unknown, b: unknown) {\n  return a === b\n}\n\n/**\n * Infers the type of props that a connector will inject into a component.\n */\nexport type ConnectedProps<TConnector> =\n  TConnector extends InferableComponentEnhancerWithProps<\n    infer TInjectedProps,\n    any\n  >\n    ? unknown extends TInjectedProps\n      ? TConnector extends InferableComponentEnhancer<infer TInjectedProps>\n        ? TInjectedProps\n        : never\n      : TInjectedProps\n    : never\n\nexport interface ConnectOptions<\n  State = unknown,\n  TStateProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n> {\n  forwardRef?: boolean\n  context?: typeof ReactReduxContext\n  areStatesEqual?: (\n    nextState: State,\n    prevState: State,\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areOwnPropsEqual?: (\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areStatePropsEqual?: (\n    nextStateProps: TStateProps,\n    prevStateProps: TStateProps,\n  ) => boolean\n  areMergedPropsEqual?: (\n    nextMergedProps: TMergedProps,\n    prevMergedProps: TMergedProps,\n  ) => boolean\n}\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps\n * @param mapDispatchToProps\n * @param mergeProps\n * @param options\n */\nexport interface Connect<DefaultState = unknown> {\n  // tslint:disable:no-unnecessary-generics\n  (): InferableComponentEnhancer<DispatchProp>\n\n  /** mapState only */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  ): InferableComponentEnhancerWithProps<TStateProps & DispatchProp, TOwnProps>\n\n  /** mapDispatch only (as a function) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch only (as an object) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (as a function)*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (nullish) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n  ): InferableComponentEnhancerWithProps<TStateProps, TOwnProps>\n\n  /** mapState and mapDispatch (as an object) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mergeProps only */\n  <no_state = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<undefined, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and mergeProps */\n  <\n    TStateProps = {},\n    no_dispatch = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<TStateProps, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapDispatch (as a object) and mergeProps */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<undefined, TDispatchProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and options */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<DispatchProp & TStateProps, TOwnProps>\n\n  /** mapDispatch (as a function) and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch (as an object) and options*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as a function), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as an object), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState, mapDispatch, mergeProps, and options */\n  <\n    TStateProps = {},\n    TDispatchProps = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<\n      TStateProps,\n      TDispatchProps,\n      TOwnProps,\n      TMergedProps\n    >,\n    options?: ConnectOptions<State, TStateProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n  // tslint:enable:no-unnecessary-generics\n}\n\nlet hasWarnedAboutDeprecatedPureOption = false\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps A function that extracts values from state\n * @param mapDispatchToProps Setup for dispatching actions\n * @param mergeProps Optional callback to merge state and dispatch props together\n * @param options Options for configuring the connection\n *\n */\nfunction connect<\n  TStateProps = {},\n  TDispatchProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n  State = unknown,\n>(\n  mapStateToProps?: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  mapDispatchToProps?: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  {\n    // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n    // @ts-ignore\n    pure,\n    areStatesEqual = strictEqual,\n    areOwnPropsEqual = shallowEqual,\n    areStatePropsEqual = shallowEqual,\n    areMergedPropsEqual = shallowEqual,\n\n    // use React's forwardRef to expose a ref of the wrapped component\n    forwardRef = false,\n\n    // the context consumer to use\n    context = ReactReduxContext,\n  }: ConnectOptions<unknown, unknown, unknown, unknown> = {},\n): unknown {\n  if (process.env.NODE_ENV !== 'production') {\n    if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n      hasWarnedAboutDeprecatedPureOption = true\n      warning(\n        'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component',\n      )\n    }\n  }\n\n  const Context = context\n\n  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps)\n  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps)\n  const initMergeProps = mergePropsFactory(mergeProps)\n\n  const shouldHandleStateChanges = Boolean(mapStateToProps)\n\n  const wrapWithConnect = <TProps,>(\n    WrappedComponent: ComponentType<TProps>,\n  ) => {\n    type WrappedComponentProps = TProps &\n      ConnectPropsMaybeWithoutContext<TProps>\n\n    if (process.env.NODE_ENV !== 'production') {\n      const isValid = /*#__PURE__*/ isValidElementType(WrappedComponent)\n      if (!isValid)\n        throw new Error(\n          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\n            WrappedComponent,\n          )}`,\n        )\n    }\n\n    const wrappedComponentName =\n      WrappedComponent.displayName || WrappedComponent.name || 'Component'\n\n    const displayName = `Connect(${wrappedComponentName})`\n\n    const selectorFactoryOptions: SelectorFactoryOptions<\n      any,\n      any,\n      any,\n      any,\n      State\n    > = {\n      shouldHandleStateChanges,\n      displayName,\n      wrappedComponentName,\n      WrappedComponent,\n      // @ts-ignore\n      initMapStateToProps,\n      initMapDispatchToProps,\n      initMergeProps,\n      areStatesEqual,\n      areStatePropsEqual,\n      areOwnPropsEqual,\n      areMergedPropsEqual,\n    }\n\n    function ConnectFunction<TOwnProps>(\n      props: InternalConnectProps & TOwnProps,\n    ) {\n      const [propsContext, reactReduxForwardedRef, wrapperProps] =\n        React.useMemo(() => {\n          // Distinguish between actual \"data\" props that were passed to the wrapper component,\n          // and values needed to control behavior (forwarded refs, alternate context instances).\n          // To maintain the wrapperProps object reference, memoize this destructuring.\n          const { reactReduxForwardedRef, ...wrapperProps } = props\n          return [props.context, reactReduxForwardedRef, wrapperProps]\n        }, [props])\n\n      const ContextToUse: ReactReduxContextInstance = React.useMemo(() => {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        let ResultContext = Context\n        if (propsContext?.Consumer) {\n          if (process.env.NODE_ENV !== 'production') {\n            const isValid = /*#__PURE__*/ isContextConsumer(\n              // @ts-ignore\n              <propsContext.Consumer />,\n            )\n            if (!isValid) {\n              throw new Error(\n                'You must pass a valid React context consumer as `props.context`',\n              )\n            }\n            ResultContext = propsContext\n          }\n        }\n        return ResultContext\n      }, [propsContext, Context])\n\n      // Retrieve the store and ancestor subscription via context, if available\n      const contextValue = React.useContext(ContextToUse)\n\n      // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n      const didStoreComeFromProps =\n        Boolean(props.store) &&\n        Boolean(props.store!.getState) &&\n        Boolean(props.store!.dispatch)\n      const didStoreComeFromContext =\n        Boolean(contextValue) && Boolean(contextValue!.store)\n\n      if (\n        process.env.NODE_ENV !== 'production' &&\n        !didStoreComeFromProps &&\n        !didStoreComeFromContext\n      ) {\n        throw new Error(\n          `Could not find \"store\" in the context of ` +\n            `\"${displayName}\". Either wrap the root component in a <Provider>, ` +\n            `or pass a custom React context provider to <Provider> and the corresponding ` +\n            `React context consumer to ${displayName} in connect options.`,\n        )\n      }\n\n      // Based on the previous check, one of these must be true\n      const store: Store = didStoreComeFromProps\n        ? props.store!\n        : contextValue!.store\n\n      const getServerState = didStoreComeFromContext\n        ? contextValue!.getServerState\n        : store.getState\n\n      const childPropsSelector = React.useMemo(() => {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return defaultSelectorFactory(store.dispatch, selectorFactoryOptions)\n      }, [store])\n\n      const [subscription, notifyNestedSubs] = React.useMemo(() => {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY\n\n        // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n        const subscription = createSubscription(\n          store,\n          didStoreComeFromProps ? undefined : contextValue!.subscription,\n        )\n\n        // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n        const notifyNestedSubs =\n          subscription.notifyNestedSubs.bind(subscription)\n\n        return [subscription, notifyNestedSubs]\n      }, [store, didStoreComeFromProps, contextValue])\n\n      // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n      const overriddenContextValue = React.useMemo(() => {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue!\n        }\n\n        // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n        return {\n          ...contextValue,\n          subscription,\n        } as ReactReduxContextValue\n      }, [didStoreComeFromProps, contextValue, subscription])\n\n      // Set up refs to coordinate values between the subscription effect and the render logic\n      const lastChildProps = React.useRef<unknown>(undefined)\n      const lastWrapperProps = React.useRef(wrapperProps)\n      const childPropsFromStoreUpdate = React.useRef<unknown>(undefined)\n      const renderIsScheduled = React.useRef(false)\n      const isMounted = React.useRef(false)\n\n      // TODO: Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n       */\n      const latestSubscriptionCallbackError = React.useRef<Error | undefined>(\n        undefined,\n      )\n\n      useIsomorphicLayoutEffect(() => {\n        isMounted.current = true\n        return () => {\n          isMounted.current = false\n        }\n      }, [])\n\n      const actualChildPropsSelector = React.useMemo(() => {\n        const selector = () => {\n          // Tricky logic here:\n          // - This render may have been triggered by a Redux store update that produced new child props\n          // - However, we may have gotten new wrapper props after that\n          // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n          // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n          // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n          if (\n            childPropsFromStoreUpdate.current &&\n            wrapperProps === lastWrapperProps.current\n          ) {\n            return childPropsFromStoreUpdate.current\n          }\n\n          // TODO We're reading the store directly in render() here. Bad idea?\n          // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n          // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n          // to determine what the child props should be.\n          return childPropsSelector(store.getState(), wrapperProps)\n        }\n        return selector\n      }, [store, wrapperProps])\n\n      // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      const subscribeForReact = React.useMemo(() => {\n        const subscribe = (reactListener: () => void) => {\n          if (!subscription) {\n            return () => {}\n          }\n\n          return subscribeUpdates(\n            shouldHandleStateChanges,\n            store,\n            subscription,\n            // @ts-ignore\n            childPropsSelector,\n            lastWrapperProps,\n            lastChildProps,\n            renderIsScheduled,\n            isMounted,\n            childPropsFromStoreUpdate,\n            notifyNestedSubs,\n            reactListener,\n          )\n        }\n\n        return subscribe\n      }, [subscription])\n\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\n        lastWrapperProps,\n        lastChildProps,\n        renderIsScheduled,\n        wrapperProps,\n        childPropsFromStoreUpdate,\n        notifyNestedSubs,\n      ])\n\n      let actualChildProps: Record<string, unknown>\n\n      try {\n        actualChildProps = React.useSyncExternalStore(\n          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n          subscribeForReact,\n          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n          actualChildPropsSelector,\n          getServerState\n            ? () => childPropsSelector(getServerState(), wrapperProps)\n            : actualChildPropsSelector,\n        )\n      } catch (err) {\n        if (latestSubscriptionCallbackError.current) {\n          // eslint-disable-next-line no-extra-semi\n          ;(err as Error).message +=\n            `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`\n        }\n\n        throw err\n      }\n\n      useIsomorphicLayoutEffect(() => {\n        latestSubscriptionCallbackError.current = undefined\n        childPropsFromStoreUpdate.current = undefined\n        lastChildProps.current = actualChildProps\n      })\n\n      // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n      const renderedWrappedComponent = React.useMemo(() => {\n        return (\n          // @ts-ignore\n          <WrappedComponent\n            {...actualChildProps}\n            ref={reactReduxForwardedRef}\n          />\n        )\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps])\n\n      // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n      const renderedChild = React.useMemo(() => {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return (\n            <ContextToUse.Provider value={overriddenContextValue}>\n              {renderedWrappedComponent}\n            </ContextToUse.Provider>\n          )\n        }\n\n        return renderedWrappedComponent\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue])\n\n      return renderedChild\n    }\n\n    const _Connect = React.memo(ConnectFunction)\n\n    type ConnectedWrapperComponent = typeof _Connect & {\n      WrappedComponent: typeof WrappedComponent\n    }\n\n    // Add a hacky cast to get the right output type\n    const Connect = _Connect as unknown as ConnectedComponent<\n      typeof WrappedComponent,\n      WrappedComponentProps\n    >\n    Connect.WrappedComponent = WrappedComponent\n    Connect.displayName = ConnectFunction.displayName = displayName\n\n    if (forwardRef) {\n      const _forwarded = React.forwardRef(\n        function forwardConnectRef(props, ref) {\n          // @ts-ignore\n          return <Connect {...props} reactReduxForwardedRef={ref} />\n        },\n      )\n\n      const forwarded = _forwarded as ConnectedWrapperComponent\n      forwarded.displayName = displayName\n      forwarded.WrappedComponent = WrappedComponent\n      return /*#__PURE__*/ hoistStatics(forwarded, WrappedComponent)\n    }\n\n    return /*#__PURE__*/ hoistStatics(Connect, WrappedComponent)\n  }\n\n  return wrapWithConnect\n}\n\nexport default connect as Connect\n","import type { Context, ReactNode } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { DevModeCheckFrequency } from '../hooks/useSelector'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport type { ReactReduxContextValue } from './Context'\nimport { ReactReduxContext } from './Context'\n\nexport interface ProviderProps<\n  A extends Action<string> = UnknownAction,\n  S = unknown,\n> {\n  /**\n   * The single Redux store in your application.\n   */\n  store: Store<S, A>\n\n  /**\n   * An optional server state snapshot. Will be used during initial hydration render if available, to ensure that the UI output is consistent with the HTML generated on the server.\n   */\n  serverState?: S\n\n  /**\n   * Optional context to be used internally in react-redux. Use React.createContext() to create a context to be used.\n   * If this is used, you'll need to customize `connect` by supplying the same context provided to the Provider.\n   * Set the initial value to null, and the hooks will error\n   * if this is not overwritten by Provider.\n   */\n  context?: Context<ReactReduxContextValue<S, A> | null>\n\n  /**\n   * Determines the frequency of stability checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` stability check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck?: DevModeCheckFrequency\n\n  /**\n   * Determines the frequency of identity function checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` identity function check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck?: DevModeCheckFrequency\n\n  children: ReactNode\n}\n\nfunction Provider<A extends Action<string> = UnknownAction, S = unknown>(\n  providerProps: ProviderProps<A, S>,\n) {\n  const { children, context, serverState, store } = providerProps\n\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store)\n\n    const baseContextValue = {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : undefined,\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      return baseContextValue\n    } else {\n      const { identityFunctionCheck = 'once', stabilityCheck = 'once' } =\n        providerProps\n\n      return /* @__PURE__ */ Object.assign(baseContextValue, {\n        stabilityCheck,\n        identityFunctionCheck,\n      })\n    }\n  }, [store, serverState])\n\n  const previousState = React.useMemo(() => store.getState(), [store])\n\n  useIsomorphicLayoutEffect(() => {\n    const { subscription } = contextValue\n    subscription.onStateChange = subscription.notifyNestedSubs\n    subscription.trySubscribe()\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs()\n    }\n    return () => {\n      subscription.tryUnsubscribe()\n      subscription.onStateChange = undefined\n    }\n  }, [contextValue, previousState])\n\n  const Context = context || ReactReduxContext\n\n  return <Context.Provider value={contextValue}>{children}</Context.Provider>\n}\n\nexport default Provider\n","import { React } from '../utils/react'\nimport { ReactReduxContext } from '../components/Context'\nimport type { ReactReduxContextValue } from '../components/Context'\n\n/**\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\n */\nexport function createReduxContextHook(context = ReactReduxContext) {\n  return function useReduxContext(): ReactReduxContextValue {\n    const contextValue = React.useContext(context)\n\n    if (process.env.NODE_ENV !== 'production' && !contextValue) {\n      throw new Error(\n        'could not find react-redux context value; please ensure the component is wrapped in a <Provider>',\n      )\n    }\n\n    return contextValue!\n  }\n}\n\n/**\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @returns {any} the value of the `ReactReduxContext`\n *\n * @example\n *\n * import React from 'react'\n * import { useReduxContext } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const { store } = useReduxContext()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useReduxContext = /*#__PURE__*/ createReduxContextHook()\n","import type { Context } from 'react'\nimport type { Action, Store } from 'redux'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * Represents a type that extracts the action type from a given Redux store.\n *\n * @template StoreType - The specific type of the Redux store.\n *\n * @since 9.1.0\n * @internal\n */\nexport type ExtractStoreActionType<StoreType extends Store> =\n  StoreType extends Store<any, infer ActionType> ? ActionType : never\n\n/**\n * Represents a custom hook that provides access to the Redux store.\n *\n * @template StoreType - The specific type of the Redux store that gets returned.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseStore<StoreType extends Store> {\n  /**\n   * Returns the Redux store instance.\n   *\n   * @returns The Redux store instance.\n   */\n  (): StoreType\n\n  /**\n   * Returns the Redux store instance with specific state and action types.\n   *\n   * @returns The Redux store with the specified state and action types.\n   *\n   * @template StateType - The specific type of the state used in the store.\n   * @template ActionType - The specific type of the actions used in the store.\n   */\n  <\n    StateType extends ReturnType<StoreType['getState']> = ReturnType<\n      StoreType['getState']\n    >,\n    ActionType extends Action = ExtractStoreActionType<Store>,\n  >(): Store<StateType, ActionType>\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useStore useStore}\n   * where the type of the Redux `store` is predefined.\n   *\n   * This allows you to set the `store` type once, eliminating the need to\n   * specify it with every {@linkcode useStore useStore} call.\n   *\n   * @returns A pre-typed `useStore` with the store type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppStore = useStore.withTypes<AppStore>()\n   * ```\n   *\n   * @template OverrideStoreType - The specific type of the Redux store that gets returned.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStoreType extends StoreType,\n  >() => UseStore<OverrideStoreType>\n}\n\n/**\n * Hook factory, which creates a `useStore` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useStore` hook bound to the specified context.\n */\nexport function createStoreHook<\n  StateType = unknown,\n  ActionType extends Action = Action,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : // @ts-ignore\n        createReduxContextHook(context)\n  const useStore = () => {\n    const { store } = useReduxContext()\n    return store\n  }\n\n  Object.assign(useStore, {\n    withTypes: () => useStore,\n  })\n\n  return useStore as UseStore<Store<StateType, ActionType>>\n}\n\n/**\n * A hook to access the redux store.\n *\n * @returns {any} the redux store\n *\n * @example\n *\n * import React from 'react'\n * import { useStore } from 'react-redux'\n *\n * export const ExampleComponent = () => {\n *   const store = useStore()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useStore = /*#__PURE__*/ createStoreHook()\n","import type { Context } from 'react'\nimport type { Action, Dispatch, UnknownAction } from 'redux'\n\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport { createStoreHook, useStore as useDefaultStore } from './useStore'\n\n/**\n * Represents a custom hook that provides a dispatch function\n * from the Redux store.\n *\n * @template DispatchType - The specific type of the dispatch function.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseDispatch<\n  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,\n> {\n  /**\n   * Returns the dispatch function from the Redux store.\n   *\n   * @returns The dispatch function from the Redux store.\n   *\n   * @template AppDispatch - The specific type of the dispatch function.\n   */\n  <AppDispatch extends DispatchType = DispatchType>(): AppDispatch\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useDispatch useDispatch}\n   * where the type of the `dispatch` function is predefined.\n   *\n   * This allows you to set the `dispatch` type once, eliminating the need to\n   * specify it with every {@linkcode useDispatch useDispatch} call.\n   *\n   * @returns A pre-typed `useDispatch` with the dispatch type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppDispatch = useDispatch.withTypes<AppDispatch>()\n   * ```\n   *\n   * @template OverrideDispatchType - The specific type of the dispatch function.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideDispatchType extends DispatchType,\n  >() => UseDispatch<OverrideDispatchType>\n}\n\n/**\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useDispatch` hook bound to the specified context.\n */\nexport function createDispatchHook<\n  StateType = unknown,\n  ActionType extends Action = UnknownAction,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useStore =\n    context === ReactReduxContext ? useDefaultStore : createStoreHook(context)\n\n  const useDispatch = () => {\n    const store = useStore()\n    return store.dispatch\n  }\n\n  Object.assign(useDispatch, {\n    withTypes: () => useDispatch,\n  })\n\n  return useDispatch as UseDispatch<Dispatch<ActionType>>\n}\n\n/**\n * A hook to access the redux `dispatch` function.\n *\n * @returns {any|function} redux store's `dispatch` function\n *\n * @example\n *\n * import React, { useCallback } from 'react'\n * import { useDispatch } from 'react-redux'\n *\n * export const CounterComponent = ({ value }) => {\n *   const dispatch = useDispatch()\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\n *   return (\n *     <div>\n *       <span>{value}</span>\n *       <button onClick={increaseCounter}>Increase counter</button>\n *     </div>\n *   )\n * }\n */\nexport const useDispatch = /*#__PURE__*/ createDispatchHook()\n","//import * as React from 'react'\nimport { React } from '../utils/react'\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector.js'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport type { EqualityFn, NoInfer } from '../types'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * The frequency of development mode checks.\n *\n * @since 8.1.0\n * @internal\n */\nexport type DevModeCheckFrequency = 'never' | 'once' | 'always'\n\n/**\n * Represents the configuration for development mode checks.\n *\n * @since 9.0.0\n * @internal\n */\nexport interface DevModeChecks {\n  /**\n   * Overrides the global stability check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the stability check.\n   *\n   * @default 'once'\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck: DevModeCheckFrequency\n\n  /**\n   * Overrides the global identity function check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the identity function check.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @default 'once'\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck: DevModeCheckFrequency\n}\n\nexport interface UseSelectorOptions<Selected = unknown> {\n  equalityFn?: EqualityFn<Selected>\n\n  /**\n   * `useSelector` performs additional checks in development mode to help\n   * identify and warn about potential issues in selector behavior. This\n   * option allows you to customize the behavior of these checks per selector.\n   *\n   * @since 9.0.0\n   */\n  devModeChecks?: Partial<DevModeChecks>\n}\n\n/**\n * Represents a custom hook that allows you to extract data from the\n * Redux store state, using a selector function. The selector function\n * takes the current state as an argument and returns a part of the state\n * or some derived data. The hook also supports an optional equality\n * function or options object to customize its behavior.\n *\n * @template StateType - The specific type of state this hook operates on.\n *\n * @public\n */\nexport interface UseSelector<StateType = unknown> {\n  /**\n   * A function that takes a selector function as its first argument.\n   * The selector function is responsible for selecting a part of\n   * the Redux store's state or computing derived data.\n   *\n   * @param selector - A function that receives the current state and returns a part of the state or some derived data.\n   * @param equalityFnOrOptions - An optional equality function or options object for customizing the behavior of the selector.\n   * @returns The selected part of the state or derived data.\n   *\n   * @template TState - The specific type of state this hook operates on.\n   * @template Selected - The type of the value that the selector function will return.\n   */\n  <TState extends StateType = StateType, Selected = unknown>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions?: EqualityFn<Selected> | UseSelectorOptions<Selected>,\n  ): Selected\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useSelector useSelector}\n   * where the `state` type is predefined.\n   *\n   * This allows you to set the `state` type once, eliminating the need to\n   * specify it with every {@linkcode useSelector useSelector} call.\n   *\n   * @returns A pre-typed `useSelector` with the state type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppSelector = useSelector.withTypes<RootState>()\n   * ```\n   *\n   * @template OverrideStateType - The specific type of state this hook operates on.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStateType extends StateType,\n  >() => UseSelector<OverrideStateType>\n}\n\nconst refEquality: EqualityFn<any> = (a, b) => a === b\n\n/**\n * Hook factory, which creates a `useSelector` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useSelector` hook bound to the specified context.\n */\nexport function createSelectorHook(\n  context: React.Context<ReactReduxContextValue<\n    any,\n    any\n  > | null> = ReactReduxContext,\n): UseSelector {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : createReduxContextHook(context)\n\n  const useSelector = <TState, Selected>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions:\n      | EqualityFn<NoInfer<Selected>>\n      | UseSelectorOptions<NoInfer<Selected>> = {},\n  ): Selected => {\n    const { equalityFn = refEquality } =\n      typeof equalityFnOrOptions === 'function'\n        ? { equalityFn: equalityFnOrOptions }\n        : equalityFnOrOptions\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`)\n      }\n      if (typeof selector !== 'function') {\n        throw new Error(`You must pass a function as a selector to useSelector`)\n      }\n      if (typeof equalityFn !== 'function') {\n        throw new Error(\n          `You must pass a function as an equality function to useSelector`,\n        )\n      }\n    }\n\n    const reduxContext = useReduxContext()\n\n    const { store, subscription, getServerState } = reduxContext\n\n    const firstRun = React.useRef(true)\n\n    const wrappedSelector = React.useCallback<typeof selector>(\n      {\n        [selector.name](state: TState) {\n          const selected = selector(state)\n          if (process.env.NODE_ENV !== 'production') {\n            const { devModeChecks = {} } =\n              typeof equalityFnOrOptions === 'function'\n                ? {}\n                : equalityFnOrOptions\n            const { identityFunctionCheck, stabilityCheck } = reduxContext\n            const {\n              identityFunctionCheck: finalIdentityFunctionCheck,\n              stabilityCheck: finalStabilityCheck,\n            } = {\n              stabilityCheck,\n              identityFunctionCheck,\n              ...devModeChecks,\n            }\n            if (\n              finalStabilityCheck === 'always' ||\n              (finalStabilityCheck === 'once' && firstRun.current)\n            ) {\n              const toCompare = selector(state)\n              if (!equalityFn(selected, toCompare)) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization',\n                  {\n                    state,\n                    selected,\n                    selected2: toCompare,\n                    stack,\n                  },\n                )\n              }\n            }\n            if (\n              finalIdentityFunctionCheck === 'always' ||\n              (finalIdentityFunctionCheck === 'once' && firstRun.current)\n            ) {\n              // @ts-ignore\n              if (selected === state) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned the root state when called. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.',\n                  { stack },\n                )\n              }\n            }\n            if (firstRun.current) firstRun.current = false\n          }\n          return selected\n        },\n      }[selector.name],\n      [selector],\n    )\n\n    const selectedState = useSyncExternalStoreWithSelector(\n      subscription.addNestedSub,\n      store.getState,\n      getServerState || store.getState,\n      wrappedSelector,\n      equalityFn,\n    )\n\n    React.useDebugValue(selectedState)\n\n    return selectedState\n  }\n\n  Object.assign(useSelector, {\n    withTypes: () => useSelector,\n  })\n\n  return useSelector as UseSelector\n}\n\n/**\n * A hook to access the redux store's state. This hook takes a selector function\n * as an argument. The selector is called with the store state.\n *\n * This hook takes an optional equality comparison function as the second parameter\n * that allows you to customize the way the selected state is compared to determine\n * whether the component needs to be re-rendered.\n *\n * @param {Function} selector the selector function\n * @param {Function=} equalityFn the function that will be used to determine equality\n *\n * @returns {any} the selected state\n *\n * @example\n *\n * import React from 'react'\n * import { useSelector } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const counter = useSelector(state => state.counter)\n *   return <div>{counter}</div>\n * }\n */\nexport const useSelector = /*#__PURE__*/ createSelectorHook()\n","import connect from './components/connect'\nexport type {\n  Connect,\n  ConnectProps,\n  ConnectedProps,\n} from './components/connect'\n\nimport shallowEqual from './utils/shallowEqual'\n\nimport Provider from './components/Provider'\nimport { defaultNoopBatch } from './utils/batch'\n\nexport { ReactReduxContext } from './components/Context'\nexport type { ReactReduxContextValue } from './components/Context'\n\nexport type { ProviderProps } from './components/Provider'\n\nexport type {\n  MapDispatchToProps,\n  MapDispatchToPropsFactory,\n  MapDispatchToPropsFunction,\n  MapDispatchToPropsNonObject,\n  MapDispatchToPropsParam,\n  MapStateToProps,\n  MapStateToPropsFactory,\n  MapStateToPropsParam,\n  MergeProps,\n  Selector,\n  SelectorFactory,\n} from './connect/selectorFactory'\n\nexport { createDispatchHook, useDispatch } from './hooks/useDispatch'\nexport type { UseDispatch } from './hooks/useDispatch'\n\nexport { createSelectorHook, useSelector } from './hooks/useSelector'\nexport type { UseSelector } from './hooks/useSelector'\n\nexport { createStoreHook, useStore } from './hooks/useStore'\nexport type { UseStore } from './hooks/useStore'\n\nexport type { Subscription } from './utils/Subscription'\n\nexport * from './types'\n\n/**\n * @deprecated As of React 18, batching is enabled by default for ReactDOM and React Native.\n * This is now a no-op that immediately runs the callback.\n */\nconst batch = defaultNoopBatch\n\nexport { Provider, batch, connect, shallowEqual }\n"],"mappings":"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","names":["src_exports","__export","Provider_default","ReactReduxContext","batch","connect_default","createDispatchHook","createSelectorHook","createStoreHook","shallowEqual","useDispatch","useSelector","useStore","__toCommonJS","React","IS_REACT_19","React","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","ForwardRef","REACT_FORWARD_REF_TYPE","Memo","REACT_MEMO_TYPE","typeOf","object","$$typeof","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_LAZY_TYPE","REACT_MEMO_TYPE","REACT_CONSUMER_TYPE","REACT_PORTAL_TYPE","isMemo","object","typeOf","REACT_MEMO_TYPE","pureFinalPropsSelectorFactory","mapStateToProps","mapDispatchToProps","mergeProps","dispatch","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","state","ownProps","stateProps","dispatchProps","mergedProps","handleFirstCall","firstState","firstOwnProps","handleNewPropsAndNewState","handleNewProps","handleNewState","nextStateProps","statePropsChanged","handleSubsequentCalls","nextState","nextOwnProps","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","options","bindActionCreators","actionCreators","dispatch","boundActionCreators","key","actionCreator","args","wrapMapToPropsConstant","getConstant","dispatch","constant","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","methodName","displayName","proxy","stateOrDispatch","ownProps","props","createInvalidArgFactory","arg","name","dispatch","options","mapDispatchToPropsFactory","mapDispatchToProps","wrapMapToPropsConstant","dispatch","bindActionCreators","wrapMapToPropsFunc","createInvalidArgFactory","mapStateToPropsFactory","mapStateToProps","wrapMapToPropsFunc","createInvalidArgFactory","wrapMapToPropsConstant","defaultMergeProps","stateProps","dispatchProps","ownProps","wrapMergePropsFunc","mergeProps","dispatch","displayName","areMergedPropsEqual","hasRunOnce","mergedProps","nextMergedProps","mergePropsFactory","createInvalidArgFactory","defaultNoopBatch","callback","createListenerCollection","first","last","defaultNoopBatch","listener","listeners","callback","isSubscribed","nullListeners","createSubscription","store","parentSub","unsubscribe","subscriptionsAmount","selfSubscribed","addNestedSub","trySubscribe","cleanupListener","removed","tryUnsubscribe","notifyNestedSubs","handleChangeWrapper","subscription","trySubscribeSelf","tryUnsubscribeSelf","canUseDOM","isDOM","isRunningInReactNative","isReactNative","getUseIsomorphicLayoutEffect","React","useIsomorphicLayoutEffect","is","x","y","shallowEqual","objA","objB","keysA","keysB","i","REACT_STATICS","KNOWN_STATICS","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","ForwardRef","Memo","getStatics","component","isMemo","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","inheritedComponent","keys","targetStatics","sourceStatics","i","key","descriptor","ContextKey","gT","getContext","React","contextMap","realContext","ReactReduxContext","NO_SUBSCRIPTION_ARRAY","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","dependencies","useIsomorphicLayoutEffect","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","childPropsFromStoreUpdate","notifyNestedSubs","subscribeUpdates","shouldHandleStateChanges","store","subscription","childPropsSelector","isMounted","additionalSubscribeListener","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","newChildProps","error","e","strictEqual","a","b","connect","mapStateToProps","mapDispatchToProps","mergeProps","pure","areStatesEqual","strictEqual","areOwnPropsEqual","shallowEqual","areStatePropsEqual","areMergedPropsEqual","forwardRef","context","ReactReduxContext","Context","initMapStateToProps","mapStateToPropsFactory","initMapDispatchToProps","mapDispatchToPropsFactory","initMergeProps","mergePropsFactory","shouldHandleStateChanges","WrappedComponent","wrappedComponentName","displayName","selectorFactoryOptions","ConnectFunction","props","propsContext","reactReduxForwardedRef","wrapperProps","React","ContextToUse","ResultContext","contextValue","didStoreComeFromProps","didStoreComeFromContext","store","getServerState","childPropsSelector","finalPropsSelectorFactory","subscription","notifyNestedSubs","NO_SUBSCRIPTION_ARRAY","createSubscription","overriddenContextValue","lastChildProps","lastWrapperProps","childPropsFromStoreUpdate","renderIsScheduled","isMounted","latestSubscriptionCallbackError","useIsomorphicLayoutEffect","actualChildPropsSelector","subscribeForReact","reactListener","subscribeUpdates","useIsomorphicLayoutEffectWithArgs","captureWrapperProps","actualChildProps","err","renderedWrappedComponent","Connect","forwarded","ref","hoistNonReactStatics","connect_default","Provider","providerProps","children","context","serverState","store","contextValue","React","subscription","createSubscription","previousState","useIsomorphicLayoutEffect","ReactReduxContext","Provider_default","createReduxContextHook","context","ReactReduxContext","React","useReduxContext","createStoreHook","context","ReactReduxContext","useReduxContext","createReduxContextHook","useStore","store","createDispatchHook","context","ReactReduxContext","useStore","createStoreHook","useDispatch","import_with_selector","refEquality","a","b","createSelectorHook","context","ReactReduxContext","useReduxContext","createReduxContextHook","useSelector","selector","equalityFnOrOptions","equalityFn","reduxContext","store","subscription","getServerState","firstRun","React","wrappedSelector","state","selected","finalStabilityCheck","toCompare","e","finalIdentityFunctionCheck","selectedState","batch","defaultNoopBatch"]}
Index: node_modules/react-redux/dist/react-redux.browser.mjs
===================================================================
--- node_modules/react-redux/dist/react-redux.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/react-redux.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import*as p from"react";var Re=p.version.startsWith("19"),Ee=Symbol.for(Re?"react.transitional.element":"react.element"),ke=Symbol.for("react.portal"),Fe=Symbol.for("react.fragment"),Ae=Symbol.for("react.strict_mode"),ve=Symbol.for("react.profiler"),Ne=Symbol.for("react.consumer"),_e=Symbol.for("react.context"),ue=Symbol.for("react.forward_ref"),Ie=Symbol.for("react.suspense"),Ve=Symbol.for("react.suspense_list"),te=Symbol.for("react.memo"),We=Symbol.for("react.lazy");var Pe=ue,de=te;function Ue(e){if(typeof e=="object"&&e!==null){let{$$typeof:t}=e;switch(t){case Ee:switch(e=e.type,e){case Fe:case ve:case Ae:case Ie:case Ve:return e;default:switch(e=e&&e.$$typeof,e){case _e:case ue:case We:case te:return e;case Ne:return e;default:return t}}case ke:return t}}}function le(e){return Ue(e)===te}function qe(e,t,o,n,{areStatesEqual:r,areOwnPropsEqual:s,areStatePropsEqual:i}){let u=!1,a,c,d,P,l;function x(f,m){return a=f,c=m,d=e(a,c),P=t(n,c),l=o(d,P,c),u=!0,l}function y(){return d=e(a,c),t.dependsOnOwnProps&&(P=t(n,c)),l=o(d,P,c),l}function M(){return e.dependsOnOwnProps&&(d=e(a,c)),t.dependsOnOwnProps&&(P=t(n,c)),l=o(d,P,c),l}function T(){let f=e(a,c),m=!i(f,d);return d=f,m&&(l=o(d,P,c)),l}function w(f,m){let C=!s(m,c),v=!r(f,a,m,c);return a=f,c=m,C&&v?y():C?M():v?T():l}return function(m,C){return u?w(m,C):x(m,C)}}function oe(e,{initMapStateToProps:t,initMapDispatchToProps:o,initMergeProps:n,...r}){let s=t(e,r),i=o(e,r),u=n(e,r);return qe(s,i,u,e,r)}function re(e,t){let o={};for(let n in e){let r=e[n];typeof r=="function"&&(o[n]=(...s)=>t(r(...s)))}return o}function U(e){return function(o){let n=e(o);function r(){return n}return r.dependsOnOwnProps=!1,r}}function Te(e){return e.dependsOnOwnProps?!!e.dependsOnOwnProps:e.length!==1}function $(e,t){return function(n,{displayName:r}){let s=function(u,a){return s.dependsOnOwnProps?s.mapToProps(u,a):s.mapToProps(u,void 0)};return s.dependsOnOwnProps=!0,s.mapToProps=function(u,a){s.mapToProps=e,s.dependsOnOwnProps=Te(e);let c=s(u,a);return typeof c=="function"&&(s.mapToProps=c,s.dependsOnOwnProps=Te(c),c=s(u,a)),c},s}}function k(e,t){return(o,n)=>{throw new Error(`Invalid value of type ${typeof e} for ${t} argument when connecting component ${n.wrappedComponentName}.`)}}function fe(e){return e&&typeof e=="object"?U(t=>re(e,t)):e?typeof e=="function"?$(e,"mapDispatchToProps"):k(e,"mapDispatchToProps"):U(t=>({dispatch:t}))}function Se(e){return e?typeof e=="function"?$(e,"mapStateToProps"):k(e,"mapStateToProps"):U(()=>({}))}function Le(e,t,o){return{...o,...e,...t}}function je(e){return function(o,{displayName:n,areMergedPropsEqual:r}){let s=!1,i;return function(a,c,d){let P=e(a,c,d);return s?r(P,i)||(i=P):(s=!0,i=P),i}}}function ye(e){return e?typeof e=="function"?je(e):k(e,"mergeProps"):()=>Le}function Y(e){e()}function $e(){let e=null,t=null;return{clear(){e=null,t=null},notify(){Y(()=>{let o=e;for(;o;)o.callback(),o=o.next})},get(){let o=[],n=e;for(;n;)o.push(n),n=n.next;return o},subscribe(o){let n=!0,r=t={callback:o,next:null,prev:t};return r.prev?r.prev.next=r:e=r,function(){!n||e===null||(n=!1,r.next?r.next.prev=r.prev:t=r.prev,r.prev?r.prev.next=r.next:e=r.next)}}}}var me={notify(){},get:()=>[]};function H(e,t){let o,n=me,r=0,s=!1;function i(M){d();let T=n.subscribe(M),w=!1;return()=>{w||(w=!0,T(),P())}}function u(){n.notify()}function a(){y.onStateChange&&y.onStateChange()}function c(){return s}function d(){r++,o||(o=t?t.addNestedSub(a):e.subscribe(a),n=$e())}function P(){r--,o&&r===0&&(o(),o=void 0,n.clear(),n=me)}function l(){s||(s=!0,d())}function x(){s&&(s=!1,P())}let y={addNestedSub:i,notifyNestedSubs:u,handleChangeWrapper:a,isSubscribed:c,trySubscribe:l,tryUnsubscribe:x,getListeners:()=>n};return y}var Ye=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",He=Ye(),Be=()=>typeof navigator<"u"&&navigator.product==="ReactNative",ze=Be(),Ke=()=>He||ze?p.useLayoutEffect:p.useEffect,F=Ke();function he(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function A(e,t){if(he(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;let o=Object.keys(e),n=Object.keys(t);if(o.length!==n.length)return!1;for(let r=0;r<o.length;r++)if(!Object.prototype.hasOwnProperty.call(t,o[r])||!he(e[o[r]],t[o[r]]))return!1;return!0}var Ge={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Je={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Xe={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Oe={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Ze={[Pe]:Xe,[de]:Oe};function we(e){return le(e)?Oe:Ze[e.$$typeof]||Ge}var Qe=Object.defineProperty,et=Object.getOwnPropertyNames,xe=Object.getOwnPropertySymbols,tt=Object.getOwnPropertyDescriptor,ot=Object.getPrototypeOf,Ce=Object.prototype;function q(e,t){if(typeof t!="string"){if(Ce){let s=ot(t);s&&s!==Ce&&q(e,s)}let o=et(t);xe&&(o=o.concat(xe(t)));let n=we(e),r=we(t);for(let s=0;s<o.length;++s){let i=o[s];if(!Je[i]&&!(r&&r[i])&&!(n&&n[i])){let u=tt(t,i);try{Qe(e,i,u)}catch{}}}}return e}var rt=Symbol.for("react-redux-context"),nt=typeof globalThis<"u"?globalThis:{};function st(){if(!p.createContext)return{};let e=nt[rt]??=new Map,t=e.get(p.createContext);return t||(t=p.createContext(null),e.set(p.createContext,t)),t}var S=st();var pt=[null,null];function at(e,t,o){F(()=>e(...t),o)}function ct(e,t,o,n,r,s){e.current=n,o.current=!1,r.current&&(r.current=null,s())}function it(e,t,o,n,r,s,i,u,a,c,d){if(!e)return()=>{};let P=!1,l=null,x=()=>{if(P||!u.current)return;let M=t.getState(),T,w;try{T=n(M,r.current)}catch(f){w=f,l=f}w||(l=null),T===s.current?i.current||c():(s.current=T,a.current=T,i.current=!0,d())};return o.onStateChange=x,o.trySubscribe(),x(),()=>{if(P=!0,o.tryUnsubscribe(),o.onStateChange=null,l)throw l}}function ut(e,t){return e===t}function Pt(e,t,o,{pure:n,areStatesEqual:r=ut,areOwnPropsEqual:s=A,areStatePropsEqual:i=A,areMergedPropsEqual:u=A,forwardRef:a=!1,context:c=S}={}){let d=c,P=Se(e),l=fe(t),x=ye(o),y=!!e;return T=>{let w=T.displayName||T.name||"Component",f=`Connect(${w})`,m={shouldHandleStateChanges:y,displayName:f,wrappedComponentName:w,WrappedComponent:T,initMapStateToProps:P,initMapDispatchToProps:l,initMergeProps:x,areStatesEqual:r,areStatePropsEqual:i,areOwnPropsEqual:s,areMergedPropsEqual:u};function C(O){let[R,K,b]=p.useMemo(()=>{let{reactReduxForwardedRef:h,...E}=O;return[O.context,h,E]},[O]),_=p.useMemo(()=>{let h=d;return R?.Consumer,h},[R,d]),D=p.useContext(_),I=!!O.store&&!!O.store.getState&&!!O.store.dispatch,ge=!!D&&!!D.store,g=I?O.store:D.store,se=ge?D.getServerState:g.getState,G=p.useMemo(()=>oe(g.dispatch,m),[g]),[V,pe]=p.useMemo(()=>{if(!y)return pt;let h=H(g,I?void 0:D.subscription),E=h.notifyNestedSubs.bind(h);return[h,E]},[g,I,D]),ae=p.useMemo(()=>I?D:{...D,subscription:V},[I,D,V]),J=p.useRef(void 0),X=p.useRef(b),W=p.useRef(void 0),ce=p.useRef(!1),Z=p.useRef(!1),Q=p.useRef(void 0);F(()=>(Z.current=!0,()=>{Z.current=!1}),[]);let ie=p.useMemo(()=>()=>W.current&&b===X.current?W.current:G(g.getState(),b),[g,b]),Me=p.useMemo(()=>E=>V?it(y,g,V,G,X,J,ce,Z,W,pe,E):()=>{},[V]);at(ct,[X,J,ce,b,W,pe]);let j;try{j=p.useSyncExternalStore(Me,ie,se?()=>G(se(),b):ie)}catch(h){throw Q.current&&(h.message+=`
+The error may be correlated with this previous error:
+${Q.current.stack}
+
+`),h}F(()=>{Q.current=void 0,W.current=void 0,J.current=j});let ee=p.useMemo(()=>p.createElement(T,{...j,ref:K}),[K,T,j]);return p.useMemo(()=>y?p.createElement(_.Provider,{value:ae},ee):ee,[_,ee,ae])}let N=p.memo(C);if(N.WrappedComponent=T,N.displayName=C.displayName=f,a){let R=p.forwardRef(function(b,_){return p.createElement(N,{...b,reactReduxForwardedRef:_})});return R.displayName=f,R.WrappedComponent=T,q(R,T)}return q(N,T)}}var dt=Pt;function lt(e){let{children:t,context:o,serverState:n,store:r}=e,s=p.useMemo(()=>{let a=H(r);return{store:r,subscription:a,getServerState:n?()=>n:void 0}},[r,n]),i=p.useMemo(()=>r.getState(),[r]);return F(()=>{let{subscription:a}=s;return a.onStateChange=a.notifyNestedSubs,a.trySubscribe(),i!==r.getState()&&a.notifyNestedSubs(),()=>{a.tryUnsubscribe(),a.onStateChange=void 0}},[s,i]),p.createElement((o||S).Provider,{value:s},t)}var Tt=lt;function L(e=S){return function(){return p.useContext(e)}}var B=L();function z(e=S){let t=e===S?B:L(e),o=()=>{let{store:n}=t();return n};return Object.assign(o,{withTypes:()=>o}),o}var ne=z();function De(e=S){let t=e===S?ne:z(e),o=()=>t().dispatch;return Object.assign(o,{withTypes:()=>o}),o}var ft=De();import{useSyncExternalStoreWithSelector as St}from"use-sync-external-store/with-selector.js";var yt=(e,t)=>e===t;function be(e=S){let t=e===S?B:L(e),o=(n,r={})=>{let{equalityFn:s=yt}=typeof r=="function"?{equalityFn:r}:r,i=t(),{store:u,subscription:a,getServerState:c}=i,d=p.useRef(!0),P=p.useCallback({[n.name](x){let y=n(x);if(0){if((m==="always"||m==="once"&&d.current)&&!s(y,C))try{}catch(N){}if((f==="always"||f==="once"&&d.current)&&y===x)try{}catch(v){}}return y}}[n.name],[n]),l=St(a.addNestedSub,u.getState,c||u.getState,P,s);return p.useDebugValue(l),l};return Object.assign(o,{withTypes:()=>o}),o}var mt=be();var Mo=Y;export{Tt as Provider,S as ReactReduxContext,Mo as batch,dt as connect,De as createDispatchHook,be as createSelectorHook,z as createStoreHook,A as shallowEqual,ft as useDispatch,mt as useSelector,ne as useStore};
+//# sourceMappingURL=react-redux.browser.mjs.map
Index: node_modules/react-redux/dist/react-redux.browser.mjs.map
===================================================================
--- node_modules/react-redux/dist/react-redux.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/react-redux.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/utils/react.ts","../src/utils/react-is.ts","../src/connect/selectorFactory.ts","../src/utils/bindActionCreators.ts","../src/connect/wrapMapToProps.ts","../src/connect/invalidArgFactory.ts","../src/connect/mapDispatchToProps.ts","../src/connect/mapStateToProps.ts","../src/connect/mergeProps.ts","../src/utils/batch.ts","../src/utils/Subscription.ts","../src/utils/useIsomorphicLayoutEffect.ts","../src/utils/shallowEqual.ts","../src/utils/hoistStatics.ts","../src/components/Context.ts","../src/components/connect.tsx","../src/components/Provider.tsx","../src/hooks/useReduxContext.ts","../src/hooks/useStore.ts","../src/hooks/useDispatch.ts","../src/hooks/useSelector.ts","../src/exports.ts"],"sourcesContent":["import * as React from 'react'\n\nexport { React }\n","import type { ElementType, MemoExoticComponent, ReactElement } from 'react'\nimport { React } from './react'\n\n// Directly ported from:\n// https://unpkg.com/browse/react-is@19.0.0/cjs/react-is.production.js\n// It's very possible this could change in the future, but given that\n// we only use these in `connect`, this is a low priority.\n\nexport const IS_REACT_19 = /* @__PURE__ */ React.version.startsWith('19')\n\nconst REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(\n  IS_REACT_19 ? 'react.transitional.element' : 'react.element',\n)\nconst REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for('react.portal')\nconst REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for('react.fragment')\nconst REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for('react.strict_mode')\nconst REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for('react.profiler')\nconst REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for('react.consumer')\nconst REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for('react.context')\nconst REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for('react.forward_ref')\nconst REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for('react.suspense')\nconst REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(\n  'react.suspense_list',\n)\nconst REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for('react.memo')\nconst REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for('react.lazy')\nconst REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for('react.offscreen')\nconst REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(\n  'react.client.reference',\n)\n\nexport const ForwardRef = REACT_FORWARD_REF_TYPE\nexport const Memo = REACT_MEMO_TYPE\n\nexport function isValidElementType(type: any): type is ElementType {\n  return typeof type === 'string' ||\n    typeof type === 'function' ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    type === REACT_OFFSCREEN_TYPE ||\n    (typeof type === 'object' &&\n      type !== null &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        type.getModuleId !== undefined))\n    ? !0\n    : !1\n}\n\nfunction typeOf(object: any): symbol | undefined {\n  if (typeof object === 'object' && object !== null) {\n    const { $$typeof } = object\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n            return object\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object\n              case REACT_CONSUMER_TYPE:\n                return object\n              default:\n                return $$typeof\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof\n    }\n  }\n}\n\nexport function isContextConsumer(object: any): object is ReactElement {\n  return IS_REACT_19\n    ? typeOf(object) === REACT_CONSUMER_TYPE\n    : typeOf(object) === REACT_CONTEXT_TYPE\n}\n\nexport function isMemo(object: any): object is MemoExoticComponent<any> {\n  return typeOf(object) === REACT_MEMO_TYPE\n}\n","import type { Dispatch, Action } from 'redux'\nimport type { ComponentType } from 'react'\nimport verifySubselectors from './verifySubselectors'\nimport type { EqualityFn, ExtendedEqualityFn } from '../types'\n\nexport type SelectorFactory<S, TProps, TOwnProps, TFactoryOptions> = (\n  dispatch: Dispatch<Action<string>>,\n  factoryOptions: TFactoryOptions,\n) => Selector<S, TProps, TOwnProps>\n\nexport type Selector<S, TProps, TOwnProps = null> = TOwnProps extends\n  | null\n  | undefined\n  ? (state: S) => TProps\n  : (state: S, ownProps: TOwnProps) => TProps\n\nexport type MapStateToProps<TStateProps, TOwnProps, State> = (\n  state: State,\n  ownProps: TOwnProps,\n) => TStateProps\n\nexport type MapStateToPropsFactory<TStateProps, TOwnProps, State> = (\n  initialState: State,\n  ownProps: TOwnProps,\n) => MapStateToProps<TStateProps, TOwnProps, State>\n\nexport type MapStateToPropsParam<TStateProps, TOwnProps, State> =\n  | MapStateToPropsFactory<TStateProps, TOwnProps, State>\n  | MapStateToProps<TStateProps, TOwnProps, State>\n  | null\n  | undefined\n\nexport type MapDispatchToPropsFunction<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => TDispatchProps\n\nexport type MapDispatchToProps<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n  | TDispatchProps\n\nexport type MapDispatchToPropsFactory<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsParam<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToProps<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsNonObject<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> = (\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n) => TMergedProps\n\ninterface PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly areStatesEqual: ExtendedEqualityFn<State, TOwnProps>\n  readonly areStatePropsEqual: EqualityFn<TStateProps>\n  readonly areOwnPropsEqual: EqualityFn<TOwnProps>\n}\n\nfunction pureFinalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  mapStateToProps: WrappedMapStateToProps<TStateProps, TOwnProps, State>,\n  mapDispatchToProps: WrappedMapDispatchToProps<TDispatchProps, TOwnProps>,\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  dispatch: Dispatch<Action<string>>,\n  {\n    areStatesEqual,\n    areOwnPropsEqual,\n    areStatePropsEqual,\n  }: PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State>,\n) {\n  let hasRunAtLeastOnce = false\n  let state: State\n  let ownProps: TOwnProps\n  let stateProps: TStateProps\n  let dispatchProps: TDispatchProps\n  let mergedProps: TMergedProps\n\n  function handleFirstCall(firstState: State, firstOwnProps: TOwnProps) {\n    state = firstState\n    ownProps = firstOwnProps\n    stateProps = mapStateToProps(state, ownProps)\n    dispatchProps = mapDispatchToProps(dispatch, ownProps)\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    hasRunAtLeastOnce = true\n    return mergedProps\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps)\n      stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewState() {\n    const nextStateProps = mapStateToProps(state, ownProps)\n    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps)\n    stateProps = nextStateProps\n\n    if (statePropsChanged)\n      mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n    return mergedProps\n  }\n\n  function handleSubsequentCalls(nextState: State, nextOwnProps: TOwnProps) {\n    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps)\n    const stateChanged = !areStatesEqual(\n      nextState,\n      state,\n      nextOwnProps,\n      ownProps,\n    )\n    state = nextState\n    ownProps = nextOwnProps\n\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState()\n    if (propsChanged) return handleNewProps()\n    if (stateChanged) return handleNewState()\n    return mergedProps\n  }\n\n  return function pureFinalPropsSelector(\n    nextState: State,\n    nextOwnProps: TOwnProps,\n  ) {\n    return hasRunAtLeastOnce\n      ? handleSubsequentCalls(nextState, nextOwnProps)\n      : handleFirstCall(nextState, nextOwnProps)\n  }\n}\n\ninterface WrappedMapStateToProps<TStateProps, TOwnProps, State> {\n  (state: State, ownProps: TOwnProps): TStateProps\n  readonly dependsOnOwnProps: boolean\n}\n\ninterface WrappedMapDispatchToProps<TDispatchProps, TOwnProps> {\n  (dispatch: Dispatch<Action<string>>, ownProps: TOwnProps): TDispatchProps\n  readonly dependsOnOwnProps: boolean\n}\n\nexport interface InitOptions<TStateProps, TOwnProps, TMergedProps, State>\n  extends PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly shouldHandleStateChanges: boolean\n  readonly displayName: string\n  readonly wrappedComponentName: string\n  readonly WrappedComponent: ComponentType<TOwnProps>\n  readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n}\n\nexport interface SelectorFactoryOptions<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n> extends InitOptions<TStateProps, TOwnProps, TMergedProps, State> {\n  readonly initMapStateToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapStateToProps<TStateProps, TOwnProps, State>\n  readonly initMapDispatchToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapDispatchToProps<TDispatchProps, TOwnProps>\n  readonly initMergeProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>\n}\n\n// TODO: Add more comments\n\n// The selector returned by selectorFactory will memoize its results,\n// allowing connect's shouldComponentUpdate to return false if final\n// props have not changed.\n\nexport default function finalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  dispatch: Dispatch<Action<string>>,\n  {\n    initMapStateToProps,\n    initMapDispatchToProps,\n    initMergeProps,\n    ...options\n  }: SelectorFactoryOptions<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >,\n) {\n  const mapStateToProps = initMapStateToProps(dispatch, options)\n  const mapDispatchToProps = initMapDispatchToProps(dispatch, options)\n  const mergeProps = initMergeProps(dispatch, options)\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps)\n  }\n\n  return pureFinalPropsSelectorFactory<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options)\n}\n","import type { ActionCreatorsMapObject, Dispatch } from 'redux'\n\nexport default function bindActionCreators(\n  actionCreators: ActionCreatorsMapObject,\n  dispatch: Dispatch,\n): ActionCreatorsMapObject {\n  const boundActionCreators: ActionCreatorsMapObject = {}\n\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key]\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args))\n    }\n  }\n  return boundActionCreators\n}\n","import type { ActionCreatorsMapObject, Dispatch, ActionCreator } from 'redux'\n\nimport type { FixTypeLater } from '../types'\nimport verifyPlainObject from '../utils/verifyPlainObject'\n\ntype AnyState = { [key: string]: any }\ntype StateOrDispatch<S extends AnyState = AnyState> = S | Dispatch\n\ntype AnyProps = { [key: string]: any }\n\nexport type MapToProps<P extends AnyProps = AnyProps> = {\n  // eslint-disable-next-line no-unused-vars\n  (stateOrDispatch: StateOrDispatch, ownProps?: P): FixTypeLater\n  dependsOnOwnProps?: boolean\n}\n\nexport function wrapMapToPropsConstant(\n  // * Note:\n  //  It seems that the dispatch argument\n  //  could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing)\n  //  and a state object in some others (ex: whenMapStateToPropsIsMissing)\n  // eslint-disable-next-line no-unused-vars\n  getConstant: (dispatch: Dispatch) =>\n    | {\n        dispatch?: Dispatch\n        dependsOnOwnProps?: boolean\n      }\n    | ActionCreatorsMapObject\n    | ActionCreator<any>,\n) {\n  return function initConstantSelector(dispatch: Dispatch) {\n    const constant = getConstant(dispatch)\n\n    function constantSelector() {\n      return constant\n    }\n    constantSelector.dependsOnOwnProps = false\n    return constantSelector\n  }\n}\n\n// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps?\nfunction getDependsOnOwnProps(mapToProps: MapToProps) {\n  return mapToProps.dependsOnOwnProps\n    ? Boolean(mapToProps.dependsOnOwnProps)\n    : mapToProps.length !== 1\n}\n\n// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\nexport function wrapMapToPropsFunc<P extends AnyProps = AnyProps>(\n  mapToProps: MapToProps,\n  methodName: string,\n) {\n  return function initProxySelector(\n    dispatch: Dispatch,\n    { displayName }: { displayName: string },\n  ) {\n    const proxy = function mapToPropsProxy(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      return proxy.dependsOnOwnProps\n        ? proxy.mapToProps(stateOrDispatch, ownProps)\n        : proxy.mapToProps(stateOrDispatch, undefined)\n    }\n\n    // allow detectFactoryAndVerify to get ownProps\n    proxy.dependsOnOwnProps = true\n\n    proxy.mapToProps = function detectFactoryAndVerify(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      proxy.mapToProps = mapToProps\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps)\n      let props = proxy(stateOrDispatch, ownProps)\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props)\n        props = proxy(stateOrDispatch, ownProps)\n      }\n\n      if (process.env.NODE_ENV !== 'production')\n        verifyPlainObject(props, displayName, methodName)\n\n      return props\n    }\n\n    return proxy\n  }\n}\n","import type { Action, Dispatch } from 'redux'\n\nexport function createInvalidArgFactory(arg: unknown, name: string) {\n  return (\n    dispatch: Dispatch<Action<string>>,\n    options: { readonly wrappedComponentName: string },\n  ) => {\n    throw new Error(\n      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${\n        options.wrappedComponentName\n      }.`,\n    )\n  }\n}\n","import type { Action, Dispatch } from 'redux'\nimport bindActionCreators from '../utils/bindActionCreators'\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapDispatchToPropsParam } from './selectorFactory'\n\nexport function mapDispatchToPropsFactory<TDispatchProps, TOwnProps>(\n  mapDispatchToProps:\n    | MapDispatchToPropsParam<TDispatchProps, TOwnProps>\n    | undefined,\n) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object'\n    ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) =>\n        // @ts-ignore\n        bindActionCreators(mapDispatchToProps, dispatch),\n      )\n    : !mapDispatchToProps\n      ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) => ({\n          dispatch,\n        }))\n      : typeof mapDispatchToProps === 'function'\n        ? // @ts-ignore\n          wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps')\n        : createInvalidArgFactory(mapDispatchToProps, 'mapDispatchToProps')\n}\n","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapStateToPropsParam } from './selectorFactory'\n\nexport function mapStateToPropsFactory<TStateProps, TOwnProps, State>(\n  mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n) {\n  return !mapStateToProps\n    ? wrapMapToPropsConstant(() => ({}))\n    : typeof mapStateToProps === 'function'\n      ? // @ts-ignore\n        wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps')\n      : createInvalidArgFactory(mapStateToProps, 'mapStateToProps')\n}\n","import type { Action, Dispatch } from 'redux'\nimport verifyPlainObject from '../utils/verifyPlainObject'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MergeProps } from './selectorFactory'\nimport type { EqualityFn } from '../types'\n\nfunction defaultMergeProps<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n): TMergedProps {\n  // @ts-ignore\n  return { ...ownProps, ...stateProps, ...dispatchProps }\n}\n\nfunction wrapMergePropsFunc<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n): (\n  dispatch: Dispatch<Action<string>>,\n  options: {\n    readonly displayName: string\n    readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n  },\n) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> {\n  return function initMergePropsProxy(\n    dispatch,\n    { displayName, areMergedPropsEqual },\n  ) {\n    let hasRunOnce = false\n    let mergedProps: TMergedProps\n\n    return function mergePropsProxy(\n      stateProps: TStateProps,\n      dispatchProps: TDispatchProps,\n      ownProps: TOwnProps,\n    ) {\n      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n      if (hasRunOnce) {\n        if (!areMergedPropsEqual(nextMergedProps, mergedProps))\n          mergedProps = nextMergedProps\n      } else {\n        hasRunOnce = true\n        mergedProps = nextMergedProps\n\n        if (process.env.NODE_ENV !== 'production')\n          verifyPlainObject(mergedProps, displayName, 'mergeProps')\n      }\n\n      return mergedProps\n    }\n  }\n}\n\nexport function mergePropsFactory<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n) {\n  return !mergeProps\n    ? () => defaultMergeProps\n    : typeof mergeProps === 'function'\n      ? wrapMergePropsFunc(mergeProps)\n      : createInvalidArgFactory(mergeProps, 'mergeProps')\n}\n","// Default to a dummy \"batch\" implementation that just runs the callback\r\nexport function defaultNoopBatch(callback: () => void) {\r\n  callback()\r\n}\r\n","import { defaultNoopBatch as batch } from './batch'\n\n// encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\ntype VoidFunc = () => void\n\ntype Listener = {\n  callback: VoidFunc\n  next: Listener | null\n  prev: Listener | null\n}\n\nfunction createListenerCollection() {\n  let first: Listener | null = null\n  let last: Listener | null = null\n\n  return {\n    clear() {\n      first = null\n      last = null\n    },\n\n    notify() {\n      batch(() => {\n        let listener = first\n        while (listener) {\n          listener.callback()\n          listener = listener.next\n        }\n      })\n    },\n\n    get() {\n      const listeners: Listener[] = []\n      let listener = first\n      while (listener) {\n        listeners.push(listener)\n        listener = listener.next\n      }\n      return listeners\n    },\n\n    subscribe(callback: () => void) {\n      let isSubscribed = true\n\n      const listener: Listener = (last = {\n        callback,\n        next: null,\n        prev: last,\n      })\n\n      if (listener.prev) {\n        listener.prev.next = listener\n      } else {\n        first = listener\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return\n        isSubscribed = false\n\n        if (listener.next) {\n          listener.next.prev = listener.prev\n        } else {\n          last = listener.prev\n        }\n        if (listener.prev) {\n          listener.prev.next = listener.next\n        } else {\n          first = listener.next\n        }\n      }\n    },\n  }\n}\n\ntype ListenerCollection = ReturnType<typeof createListenerCollection>\n\nexport interface Subscription {\n  addNestedSub: (listener: VoidFunc) => VoidFunc\n  notifyNestedSubs: VoidFunc\n  handleChangeWrapper: VoidFunc\n  isSubscribed: () => boolean\n  onStateChange?: VoidFunc | null\n  trySubscribe: VoidFunc\n  tryUnsubscribe: VoidFunc\n  getListeners: () => ListenerCollection\n}\n\nconst nullListeners = {\n  notify() {},\n  get: () => [],\n} as unknown as ListenerCollection\n\nexport function createSubscription(store: any, parentSub?: Subscription) {\n  let unsubscribe: VoidFunc | undefined\n  let listeners: ListenerCollection = nullListeners\n\n  // Reasons to keep the subscription active\n  let subscriptionsAmount = 0\n\n  // Is this specific subscription subscribed (or only nested ones?)\n  let selfSubscribed = false\n\n  function addNestedSub(listener: () => void) {\n    trySubscribe()\n\n    const cleanupListener = listeners.subscribe(listener)\n\n    // cleanup nested sub\n    let removed = false\n    return () => {\n      if (!removed) {\n        removed = true\n        cleanupListener()\n        tryUnsubscribe()\n      }\n    }\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify()\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange()\n    }\n  }\n\n  function isSubscribed() {\n    return selfSubscribed\n  }\n\n  function trySubscribe() {\n    subscriptionsAmount++\n    if (!unsubscribe) {\n      unsubscribe = parentSub\n        ? parentSub.addNestedSub(handleChangeWrapper)\n        : store.subscribe(handleChangeWrapper)\n\n      listeners = createListenerCollection()\n    }\n  }\n\n  function tryUnsubscribe() {\n    subscriptionsAmount--\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe()\n      unsubscribe = undefined\n      listeners.clear()\n      listeners = nullListeners\n    }\n  }\n\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true\n      trySubscribe()\n    }\n  }\n\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false\n      tryUnsubscribe()\n    }\n  }\n\n  const subscription: Subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners,\n  }\n\n  return subscription\n}\n","import { React } from '../utils/react'\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\n// Matches logic in React's `shared/ExecutionEnvironment` file\nconst canUseDOM = () =>\n  !!(\n    typeof window !== 'undefined' &&\n    typeof window.document !== 'undefined' &&\n    typeof window.document.createElement !== 'undefined'\n  )\n\nconst isDOM = /* @__PURE__ */ canUseDOM()\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\n/**\n * Checks if the code is running in a React Native environment.\n *\n * @returns Whether the code is running in a React Native environment.\n *\n * @see {@link https://github.com/facebook/react-native/issues/1331 Reference}\n */\nconst isRunningInReactNative = () =>\n  typeof navigator !== 'undefined' && navigator.product === 'ReactNative'\n\nconst isReactNative = /* @__PURE__ */ isRunningInReactNative()\n\nconst getUseIsomorphicLayoutEffect = () =>\n  isDOM || isReactNative ? React.useLayoutEffect : React.useEffect\n\nexport const useIsomorphicLayoutEffect =\n  /* @__PURE__ */ getUseIsomorphicLayoutEffect()\n","function is(x: unknown, y: unknown) {\r\n  if (x === y) {\r\n    return x !== 0 || y !== 0 || 1 / x === 1 / y\r\n  } else {\r\n    return x !== x && y !== y\r\n  }\r\n}\r\n\r\nexport default function shallowEqual(objA: any, objB: any) {\r\n  if (is(objA, objB)) return true\r\n\r\n  if (\r\n    typeof objA !== 'object' ||\r\n    objA === null ||\r\n    typeof objB !== 'object' ||\r\n    objB === null\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  const keysA = Object.keys(objA)\r\n  const keysB = Object.keys(objB)\r\n\r\n  if (keysA.length !== keysB.length) return false\r\n\r\n  for (let i = 0; i < keysA.length; i++) {\r\n    if (\r\n      !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\r\n      !is(objA[keysA[i]], objB[keysA[i]])\r\n    ) {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return true\r\n}\r\n","// Copied directly from:\n// https://github.com/mridgway/hoist-non-react-statics/blob/main/src/index.js\n// https://unpkg.com/browse/@types/hoist-non-react-statics@3.3.6/index.d.ts\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nimport type { ForwardRefExoticComponent, MemoExoticComponent } from 'react'\nimport { ForwardRef, Memo, isMemo } from '../utils/react-is'\n\nconst REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true,\n} as const\n\nconst FORWARD_REF_STATICS = {\n  $$typeof: true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n} as const\n\nconst MEMO_STATICS = {\n  $$typeof: true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst TYPE_STATICS = {\n  [ForwardRef]: FORWARD_REF_STATICS,\n  [Memo]: MEMO_STATICS,\n} as const\n\nfunction getStatics(component: any) {\n  // React v16.11 and below\n  if (isMemo(component)) {\n    return MEMO_STATICS\n  }\n\n  // React v16.12 and above\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS\n}\n\nexport type NonReactStatics<\n  Source,\n  C extends {\n    [key: string]: true\n  } = {},\n> = {\n  [key in Exclude<\n    keyof Source,\n    Source extends MemoExoticComponent<any>\n      ? keyof typeof MEMO_STATICS | keyof C\n      : Source extends ForwardRefExoticComponent<any>\n        ? keyof typeof FORWARD_REF_STATICS | keyof C\n        : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C\n  >]: Source[key]\n}\n\nconst defineProperty = Object.defineProperty\nconst getOwnPropertyNames = Object.getOwnPropertyNames\nconst getOwnPropertySymbols = Object.getOwnPropertySymbols\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor\nconst getPrototypeOf = Object.getPrototypeOf\nconst objectPrototype = Object.prototype\n\nexport default function hoistNonReactStatics<\n  Target,\n  Source,\n  CustomStatic extends {\n    [key: string]: true\n  } = {},\n>(\n  targetComponent: Target,\n  sourceComponent: Source,\n): Target & NonReactStatics<Source, CustomStatic> {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n\n    if (objectPrototype) {\n      const inheritedComponent = getPrototypeOf(sourceComponent)\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent)\n      }\n    }\n\n    let keys: (string | symbol)[] = getOwnPropertyNames(sourceComponent)\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent))\n    }\n\n    const targetStatics = getStatics(targetComponent)\n    const sourceStatics = getStatics(sourceComponent)\n\n    for (let i = 0; i < keys.length; ++i) {\n      const key = keys[i]\n      if (\n        !KNOWN_STATICS[key as keyof typeof KNOWN_STATICS] &&\n        !(sourceStatics && sourceStatics[key as keyof typeof sourceStatics]) &&\n        !(targetStatics && targetStatics[key as keyof typeof targetStatics])\n      ) {\n        const descriptor = getOwnPropertyDescriptor(sourceComponent, key)\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor!)\n        } catch (e) {\n          // ignore\n        }\n      }\n    }\n  }\n\n  return targetComponent as any\n}\n","import type { Context } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { Subscription } from '../utils/Subscription'\nimport type { ProviderProps } from './Provider'\n\nexport interface ReactReduxContextValue<\n  SS = any,\n  A extends Action<string> = UnknownAction,\n> extends Pick<ProviderProps, 'stabilityCheck' | 'identityFunctionCheck'> {\n  store: Store<SS, A>\n  subscription: Subscription\n  getServerState?: () => SS\n}\n\nconst ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`)\nconst gT: {\n  [ContextKey]?: Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >\n} = (\n  typeof globalThis !== 'undefined'\n    ? globalThis\n    : /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */ {}\n) as any\n\nfunction getContext(): Context<ReactReduxContextValue | null> {\n  if (!React.createContext) return {} as any\n\n  const contextMap = (gT[ContextKey] ??= new Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >())\n  let realContext = contextMap.get(React.createContext)\n  if (!realContext) {\n    realContext = React.createContext<ReactReduxContextValue | null>(\n      null as any,\n    )\n    if (process.env.NODE_ENV !== 'production') {\n      realContext.displayName = 'ReactRedux'\n    }\n    contextMap.set(React.createContext, realContext)\n  }\n  return realContext\n}\n\nexport const ReactReduxContext = /*#__PURE__*/ getContext()\n\nexport type ReactReduxContextInstance = typeof ReactReduxContext\n","/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport type { ComponentType } from 'react'\nimport { React } from '../utils/react'\nimport { isValidElementType, isContextConsumer } from '../utils/react-is'\n\nimport type { Store } from 'redux'\n\nimport type {\n  ConnectedComponent,\n  InferableComponentEnhancer,\n  InferableComponentEnhancerWithProps,\n  ResolveThunks,\n  DispatchProp,\n  ConnectPropsMaybeWithoutContext,\n} from '../types'\n\nimport type {\n  MapStateToPropsParam,\n  MapDispatchToPropsParam,\n  MergeProps,\n  MapDispatchToPropsNonObject,\n  SelectorFactoryOptions,\n} from '../connect/selectorFactory'\nimport defaultSelectorFactory from '../connect/selectorFactory'\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps'\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps'\nimport { mergePropsFactory } from '../connect/mergeProps'\n\nimport type { Subscription } from '../utils/Subscription'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport shallowEqual from '../utils/shallowEqual'\nimport hoistStatics from '../utils/hoistStatics'\nimport warning from '../utils/warning'\n\nimport type {\n  ReactReduxContextValue,\n  ReactReduxContextInstance,\n} from './Context'\nimport { ReactReduxContext } from './Context'\n\n// Define some constant arrays just to avoid re-creating these\nconst EMPTY_ARRAY: [unknown, number] = [null, 0]\nconst NO_SUBSCRIPTION_ARRAY = [null, null]\n\n// Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\nconst stringifyComponent = (Comp: unknown) => {\n  try {\n    return JSON.stringify(Comp)\n  } catch (err) {\n    return String(Comp)\n  }\n}\n\ntype EffectFunc = (...args: any[]) => void | ReturnType<React.EffectCallback>\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n//   and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(\n  effectFunc: EffectFunc,\n  effectArgs: any[],\n  dependencies?: React.DependencyList,\n) {\n  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies)\n}\n\n// Effect callback, extracted: assign the latest props values to refs for later usage\nfunction captureWrapperProps(\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  wrapperProps: unknown,\n  // actualChildProps: unknown,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n) {\n  // We want to capture the wrapper props and child props we used for later comparisons\n  lastWrapperProps.current = wrapperProps\n  renderIsScheduled.current = false\n\n  // If the render was from a store update, clear out that reference and cascade the subscriber update\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null\n    notifyNestedSubs()\n  }\n}\n\n// Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\nfunction subscribeUpdates(\n  shouldHandleStateChanges: boolean,\n  store: Store,\n  subscription: Subscription,\n  childPropsSelector: (state: unknown, props: unknown) => unknown,\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  isMounted: React.MutableRefObject<boolean>,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n  // forceComponentUpdateDispatch: React.Dispatch<any>,\n  additionalSubscribeListener: () => void,\n) {\n  // If we're not subscribed to the store, nothing to do here\n  if (!shouldHandleStateChanges) return () => {}\n\n  // Capture values for checking if and when this component unmounts\n  let didUnsubscribe = false\n  let lastThrownError: Error | null = null\n\n  // We'll run this callback every time a store subscription update propagates to this component\n  const checkForUpdates = () => {\n    if (didUnsubscribe || !isMounted.current) {\n      // Don't run stale listeners.\n      // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n      return\n    }\n\n    // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n    const latestStoreState = store.getState()\n\n    let newChildProps, error\n    try {\n      // Actually run the selector with the most recent store state and wrapper props\n      // to determine what the child props should be\n      newChildProps = childPropsSelector(\n        latestStoreState,\n        lastWrapperProps.current,\n      )\n    } catch (e) {\n      error = e\n      lastThrownError = e as Error | null\n    }\n\n    if (!error) {\n      lastThrownError = null\n    }\n\n    // If the child props haven't changed, nothing to do here - cascade the subscription update\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs()\n      }\n    } else {\n      // Save references to the new child props.  Note that we track the \"child props from store update\"\n      // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n      // forcing another re-render, which we don't want.\n      lastChildProps.current = newChildProps\n      childPropsFromStoreUpdate.current = newChildProps\n      renderIsScheduled.current = true\n\n      // TODO This is hacky and not how `uSES` is meant to be used\n      // Trigger the React `useSyncExternalStore` subscriber\n      additionalSubscribeListener()\n    }\n  }\n\n  // Actually subscribe to the nearest connected ancestor (or store)\n  subscription.onStateChange = checkForUpdates\n  subscription.trySubscribe()\n\n  // Pull data from the store after first render in case the store has\n  // changed since we began.\n  checkForUpdates()\n\n  const unsubscribeWrapper = () => {\n    didUnsubscribe = true\n    subscription.tryUnsubscribe()\n    subscription.onStateChange = null\n\n    if (lastThrownError) {\n      // It's possible that we caught an error due to a bad mapState function, but the\n      // parent re-rendered without this component and we're about to unmount.\n      // This shouldn't happen as long as we do top-down subscriptions correctly, but\n      // if we ever do those wrong, this throw will surface the error in our tests.\n      // In that case, throw the error from here so it doesn't get lost.\n      throw lastThrownError\n    }\n  }\n\n  return unsubscribeWrapper\n}\n\n// Reducer initial state creation for our update reducer\nconst initStateUpdates = () => EMPTY_ARRAY\n\nexport interface ConnectProps {\n  /** A custom Context instance that the component can use to access the store from an alternate Provider using that same Context instance */\n  context?: ReactReduxContextInstance\n  /** A Redux store instance to be used for subscriptions instead of the store from a Provider */\n  store?: Store\n}\n\ninterface InternalConnectProps extends ConnectProps {\n  reactReduxForwardedRef?: React.ForwardedRef<unknown>\n}\n\nfunction strictEqual(a: unknown, b: unknown) {\n  return a === b\n}\n\n/**\n * Infers the type of props that a connector will inject into a component.\n */\nexport type ConnectedProps<TConnector> =\n  TConnector extends InferableComponentEnhancerWithProps<\n    infer TInjectedProps,\n    any\n  >\n    ? unknown extends TInjectedProps\n      ? TConnector extends InferableComponentEnhancer<infer TInjectedProps>\n        ? TInjectedProps\n        : never\n      : TInjectedProps\n    : never\n\nexport interface ConnectOptions<\n  State = unknown,\n  TStateProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n> {\n  forwardRef?: boolean\n  context?: typeof ReactReduxContext\n  areStatesEqual?: (\n    nextState: State,\n    prevState: State,\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areOwnPropsEqual?: (\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areStatePropsEqual?: (\n    nextStateProps: TStateProps,\n    prevStateProps: TStateProps,\n  ) => boolean\n  areMergedPropsEqual?: (\n    nextMergedProps: TMergedProps,\n    prevMergedProps: TMergedProps,\n  ) => boolean\n}\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps\n * @param mapDispatchToProps\n * @param mergeProps\n * @param options\n */\nexport interface Connect<DefaultState = unknown> {\n  // tslint:disable:no-unnecessary-generics\n  (): InferableComponentEnhancer<DispatchProp>\n\n  /** mapState only */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  ): InferableComponentEnhancerWithProps<TStateProps & DispatchProp, TOwnProps>\n\n  /** mapDispatch only (as a function) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch only (as an object) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (as a function)*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (nullish) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n  ): InferableComponentEnhancerWithProps<TStateProps, TOwnProps>\n\n  /** mapState and mapDispatch (as an object) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mergeProps only */\n  <no_state = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<undefined, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and mergeProps */\n  <\n    TStateProps = {},\n    no_dispatch = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<TStateProps, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapDispatch (as a object) and mergeProps */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<undefined, TDispatchProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and options */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<DispatchProp & TStateProps, TOwnProps>\n\n  /** mapDispatch (as a function) and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch (as an object) and options*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as a function), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as an object), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState, mapDispatch, mergeProps, and options */\n  <\n    TStateProps = {},\n    TDispatchProps = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<\n      TStateProps,\n      TDispatchProps,\n      TOwnProps,\n      TMergedProps\n    >,\n    options?: ConnectOptions<State, TStateProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n  // tslint:enable:no-unnecessary-generics\n}\n\nlet hasWarnedAboutDeprecatedPureOption = false\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps A function that extracts values from state\n * @param mapDispatchToProps Setup for dispatching actions\n * @param mergeProps Optional callback to merge state and dispatch props together\n * @param options Options for configuring the connection\n *\n */\nfunction connect<\n  TStateProps = {},\n  TDispatchProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n  State = unknown,\n>(\n  mapStateToProps?: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  mapDispatchToProps?: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  {\n    // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n    // @ts-ignore\n    pure,\n    areStatesEqual = strictEqual,\n    areOwnPropsEqual = shallowEqual,\n    areStatePropsEqual = shallowEqual,\n    areMergedPropsEqual = shallowEqual,\n\n    // use React's forwardRef to expose a ref of the wrapped component\n    forwardRef = false,\n\n    // the context consumer to use\n    context = ReactReduxContext,\n  }: ConnectOptions<unknown, unknown, unknown, unknown> = {},\n): unknown {\n  if (process.env.NODE_ENV !== 'production') {\n    if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n      hasWarnedAboutDeprecatedPureOption = true\n      warning(\n        'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component',\n      )\n    }\n  }\n\n  const Context = context\n\n  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps)\n  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps)\n  const initMergeProps = mergePropsFactory(mergeProps)\n\n  const shouldHandleStateChanges = Boolean(mapStateToProps)\n\n  const wrapWithConnect = <TProps,>(\n    WrappedComponent: ComponentType<TProps>,\n  ) => {\n    type WrappedComponentProps = TProps &\n      ConnectPropsMaybeWithoutContext<TProps>\n\n    if (process.env.NODE_ENV !== 'production') {\n      const isValid = /*#__PURE__*/ isValidElementType(WrappedComponent)\n      if (!isValid)\n        throw new Error(\n          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\n            WrappedComponent,\n          )}`,\n        )\n    }\n\n    const wrappedComponentName =\n      WrappedComponent.displayName || WrappedComponent.name || 'Component'\n\n    const displayName = `Connect(${wrappedComponentName})`\n\n    const selectorFactoryOptions: SelectorFactoryOptions<\n      any,\n      any,\n      any,\n      any,\n      State\n    > = {\n      shouldHandleStateChanges,\n      displayName,\n      wrappedComponentName,\n      WrappedComponent,\n      // @ts-ignore\n      initMapStateToProps,\n      initMapDispatchToProps,\n      initMergeProps,\n      areStatesEqual,\n      areStatePropsEqual,\n      areOwnPropsEqual,\n      areMergedPropsEqual,\n    }\n\n    function ConnectFunction<TOwnProps>(\n      props: InternalConnectProps & TOwnProps,\n    ) {\n      const [propsContext, reactReduxForwardedRef, wrapperProps] =\n        React.useMemo(() => {\n          // Distinguish between actual \"data\" props that were passed to the wrapper component,\n          // and values needed to control behavior (forwarded refs, alternate context instances).\n          // To maintain the wrapperProps object reference, memoize this destructuring.\n          const { reactReduxForwardedRef, ...wrapperProps } = props\n          return [props.context, reactReduxForwardedRef, wrapperProps]\n        }, [props])\n\n      const ContextToUse: ReactReduxContextInstance = React.useMemo(() => {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        let ResultContext = Context\n        if (propsContext?.Consumer) {\n          if (process.env.NODE_ENV !== 'production') {\n            const isValid = /*#__PURE__*/ isContextConsumer(\n              // @ts-ignore\n              <propsContext.Consumer />,\n            )\n            if (!isValid) {\n              throw new Error(\n                'You must pass a valid React context consumer as `props.context`',\n              )\n            }\n            ResultContext = propsContext\n          }\n        }\n        return ResultContext\n      }, [propsContext, Context])\n\n      // Retrieve the store and ancestor subscription via context, if available\n      const contextValue = React.useContext(ContextToUse)\n\n      // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n      const didStoreComeFromProps =\n        Boolean(props.store) &&\n        Boolean(props.store!.getState) &&\n        Boolean(props.store!.dispatch)\n      const didStoreComeFromContext =\n        Boolean(contextValue) && Boolean(contextValue!.store)\n\n      if (\n        process.env.NODE_ENV !== 'production' &&\n        !didStoreComeFromProps &&\n        !didStoreComeFromContext\n      ) {\n        throw new Error(\n          `Could not find \"store\" in the context of ` +\n            `\"${displayName}\". Either wrap the root component in a <Provider>, ` +\n            `or pass a custom React context provider to <Provider> and the corresponding ` +\n            `React context consumer to ${displayName} in connect options.`,\n        )\n      }\n\n      // Based on the previous check, one of these must be true\n      const store: Store = didStoreComeFromProps\n        ? props.store!\n        : contextValue!.store\n\n      const getServerState = didStoreComeFromContext\n        ? contextValue!.getServerState\n        : store.getState\n\n      const childPropsSelector = React.useMemo(() => {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return defaultSelectorFactory(store.dispatch, selectorFactoryOptions)\n      }, [store])\n\n      const [subscription, notifyNestedSubs] = React.useMemo(() => {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY\n\n        // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n        const subscription = createSubscription(\n          store,\n          didStoreComeFromProps ? undefined : contextValue!.subscription,\n        )\n\n        // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n        const notifyNestedSubs =\n          subscription.notifyNestedSubs.bind(subscription)\n\n        return [subscription, notifyNestedSubs]\n      }, [store, didStoreComeFromProps, contextValue])\n\n      // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n      const overriddenContextValue = React.useMemo(() => {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue!\n        }\n\n        // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n        return {\n          ...contextValue,\n          subscription,\n        } as ReactReduxContextValue\n      }, [didStoreComeFromProps, contextValue, subscription])\n\n      // Set up refs to coordinate values between the subscription effect and the render logic\n      const lastChildProps = React.useRef<unknown>(undefined)\n      const lastWrapperProps = React.useRef(wrapperProps)\n      const childPropsFromStoreUpdate = React.useRef<unknown>(undefined)\n      const renderIsScheduled = React.useRef(false)\n      const isMounted = React.useRef(false)\n\n      // TODO: Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n       */\n      const latestSubscriptionCallbackError = React.useRef<Error | undefined>(\n        undefined,\n      )\n\n      useIsomorphicLayoutEffect(() => {\n        isMounted.current = true\n        return () => {\n          isMounted.current = false\n        }\n      }, [])\n\n      const actualChildPropsSelector = React.useMemo(() => {\n        const selector = () => {\n          // Tricky logic here:\n          // - This render may have been triggered by a Redux store update that produced new child props\n          // - However, we may have gotten new wrapper props after that\n          // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n          // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n          // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n          if (\n            childPropsFromStoreUpdate.current &&\n            wrapperProps === lastWrapperProps.current\n          ) {\n            return childPropsFromStoreUpdate.current\n          }\n\n          // TODO We're reading the store directly in render() here. Bad idea?\n          // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n          // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n          // to determine what the child props should be.\n          return childPropsSelector(store.getState(), wrapperProps)\n        }\n        return selector\n      }, [store, wrapperProps])\n\n      // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      const subscribeForReact = React.useMemo(() => {\n        const subscribe = (reactListener: () => void) => {\n          if (!subscription) {\n            return () => {}\n          }\n\n          return subscribeUpdates(\n            shouldHandleStateChanges,\n            store,\n            subscription,\n            // @ts-ignore\n            childPropsSelector,\n            lastWrapperProps,\n            lastChildProps,\n            renderIsScheduled,\n            isMounted,\n            childPropsFromStoreUpdate,\n            notifyNestedSubs,\n            reactListener,\n          )\n        }\n\n        return subscribe\n      }, [subscription])\n\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\n        lastWrapperProps,\n        lastChildProps,\n        renderIsScheduled,\n        wrapperProps,\n        childPropsFromStoreUpdate,\n        notifyNestedSubs,\n      ])\n\n      let actualChildProps: Record<string, unknown>\n\n      try {\n        actualChildProps = React.useSyncExternalStore(\n          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n          subscribeForReact,\n          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n          actualChildPropsSelector,\n          getServerState\n            ? () => childPropsSelector(getServerState(), wrapperProps)\n            : actualChildPropsSelector,\n        )\n      } catch (err) {\n        if (latestSubscriptionCallbackError.current) {\n          // eslint-disable-next-line no-extra-semi\n          ;(err as Error).message +=\n            `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`\n        }\n\n        throw err\n      }\n\n      useIsomorphicLayoutEffect(() => {\n        latestSubscriptionCallbackError.current = undefined\n        childPropsFromStoreUpdate.current = undefined\n        lastChildProps.current = actualChildProps\n      })\n\n      // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n      const renderedWrappedComponent = React.useMemo(() => {\n        return (\n          // @ts-ignore\n          <WrappedComponent\n            {...actualChildProps}\n            ref={reactReduxForwardedRef}\n          />\n        )\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps])\n\n      // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n      const renderedChild = React.useMemo(() => {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return (\n            <ContextToUse.Provider value={overriddenContextValue}>\n              {renderedWrappedComponent}\n            </ContextToUse.Provider>\n          )\n        }\n\n        return renderedWrappedComponent\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue])\n\n      return renderedChild\n    }\n\n    const _Connect = React.memo(ConnectFunction)\n\n    type ConnectedWrapperComponent = typeof _Connect & {\n      WrappedComponent: typeof WrappedComponent\n    }\n\n    // Add a hacky cast to get the right output type\n    const Connect = _Connect as unknown as ConnectedComponent<\n      typeof WrappedComponent,\n      WrappedComponentProps\n    >\n    Connect.WrappedComponent = WrappedComponent\n    Connect.displayName = ConnectFunction.displayName = displayName\n\n    if (forwardRef) {\n      const _forwarded = React.forwardRef(\n        function forwardConnectRef(props, ref) {\n          // @ts-ignore\n          return <Connect {...props} reactReduxForwardedRef={ref} />\n        },\n      )\n\n      const forwarded = _forwarded as ConnectedWrapperComponent\n      forwarded.displayName = displayName\n      forwarded.WrappedComponent = WrappedComponent\n      return /*#__PURE__*/ hoistStatics(forwarded, WrappedComponent)\n    }\n\n    return /*#__PURE__*/ hoistStatics(Connect, WrappedComponent)\n  }\n\n  return wrapWithConnect\n}\n\nexport default connect as Connect\n","import type { Context, ReactNode } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { DevModeCheckFrequency } from '../hooks/useSelector'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport type { ReactReduxContextValue } from './Context'\nimport { ReactReduxContext } from './Context'\n\nexport interface ProviderProps<\n  A extends Action<string> = UnknownAction,\n  S = unknown,\n> {\n  /**\n   * The single Redux store in your application.\n   */\n  store: Store<S, A>\n\n  /**\n   * An optional server state snapshot. Will be used during initial hydration render if available, to ensure that the UI output is consistent with the HTML generated on the server.\n   */\n  serverState?: S\n\n  /**\n   * Optional context to be used internally in react-redux. Use React.createContext() to create a context to be used.\n   * If this is used, you'll need to customize `connect` by supplying the same context provided to the Provider.\n   * Set the initial value to null, and the hooks will error\n   * if this is not overwritten by Provider.\n   */\n  context?: Context<ReactReduxContextValue<S, A> | null>\n\n  /**\n   * Determines the frequency of stability checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` stability check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck?: DevModeCheckFrequency\n\n  /**\n   * Determines the frequency of identity function checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` identity function check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck?: DevModeCheckFrequency\n\n  children: ReactNode\n}\n\nfunction Provider<A extends Action<string> = UnknownAction, S = unknown>(\n  providerProps: ProviderProps<A, S>,\n) {\n  const { children, context, serverState, store } = providerProps\n\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store)\n\n    const baseContextValue = {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : undefined,\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      return baseContextValue\n    } else {\n      const { identityFunctionCheck = 'once', stabilityCheck = 'once' } =\n        providerProps\n\n      return /* @__PURE__ */ Object.assign(baseContextValue, {\n        stabilityCheck,\n        identityFunctionCheck,\n      })\n    }\n  }, [store, serverState])\n\n  const previousState = React.useMemo(() => store.getState(), [store])\n\n  useIsomorphicLayoutEffect(() => {\n    const { subscription } = contextValue\n    subscription.onStateChange = subscription.notifyNestedSubs\n    subscription.trySubscribe()\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs()\n    }\n    return () => {\n      subscription.tryUnsubscribe()\n      subscription.onStateChange = undefined\n    }\n  }, [contextValue, previousState])\n\n  const Context = context || ReactReduxContext\n\n  return <Context.Provider value={contextValue}>{children}</Context.Provider>\n}\n\nexport default Provider\n","import { React } from '../utils/react'\nimport { ReactReduxContext } from '../components/Context'\nimport type { ReactReduxContextValue } from '../components/Context'\n\n/**\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\n */\nexport function createReduxContextHook(context = ReactReduxContext) {\n  return function useReduxContext(): ReactReduxContextValue {\n    const contextValue = React.useContext(context)\n\n    if (process.env.NODE_ENV !== 'production' && !contextValue) {\n      throw new Error(\n        'could not find react-redux context value; please ensure the component is wrapped in a <Provider>',\n      )\n    }\n\n    return contextValue!\n  }\n}\n\n/**\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @returns {any} the value of the `ReactReduxContext`\n *\n * @example\n *\n * import React from 'react'\n * import { useReduxContext } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const { store } = useReduxContext()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useReduxContext = /*#__PURE__*/ createReduxContextHook()\n","import type { Context } from 'react'\nimport type { Action, Store } from 'redux'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * Represents a type that extracts the action type from a given Redux store.\n *\n * @template StoreType - The specific type of the Redux store.\n *\n * @since 9.1.0\n * @internal\n */\nexport type ExtractStoreActionType<StoreType extends Store> =\n  StoreType extends Store<any, infer ActionType> ? ActionType : never\n\n/**\n * Represents a custom hook that provides access to the Redux store.\n *\n * @template StoreType - The specific type of the Redux store that gets returned.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseStore<StoreType extends Store> {\n  /**\n   * Returns the Redux store instance.\n   *\n   * @returns The Redux store instance.\n   */\n  (): StoreType\n\n  /**\n   * Returns the Redux store instance with specific state and action types.\n   *\n   * @returns The Redux store with the specified state and action types.\n   *\n   * @template StateType - The specific type of the state used in the store.\n   * @template ActionType - The specific type of the actions used in the store.\n   */\n  <\n    StateType extends ReturnType<StoreType['getState']> = ReturnType<\n      StoreType['getState']\n    >,\n    ActionType extends Action = ExtractStoreActionType<Store>,\n  >(): Store<StateType, ActionType>\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useStore useStore}\n   * where the type of the Redux `store` is predefined.\n   *\n   * This allows you to set the `store` type once, eliminating the need to\n   * specify it with every {@linkcode useStore useStore} call.\n   *\n   * @returns A pre-typed `useStore` with the store type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppStore = useStore.withTypes<AppStore>()\n   * ```\n   *\n   * @template OverrideStoreType - The specific type of the Redux store that gets returned.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStoreType extends StoreType,\n  >() => UseStore<OverrideStoreType>\n}\n\n/**\n * Hook factory, which creates a `useStore` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useStore` hook bound to the specified context.\n */\nexport function createStoreHook<\n  StateType = unknown,\n  ActionType extends Action = Action,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : // @ts-ignore\n        createReduxContextHook(context)\n  const useStore = () => {\n    const { store } = useReduxContext()\n    return store\n  }\n\n  Object.assign(useStore, {\n    withTypes: () => useStore,\n  })\n\n  return useStore as UseStore<Store<StateType, ActionType>>\n}\n\n/**\n * A hook to access the redux store.\n *\n * @returns {any} the redux store\n *\n * @example\n *\n * import React from 'react'\n * import { useStore } from 'react-redux'\n *\n * export const ExampleComponent = () => {\n *   const store = useStore()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useStore = /*#__PURE__*/ createStoreHook()\n","import type { Context } from 'react'\nimport type { Action, Dispatch, UnknownAction } from 'redux'\n\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport { createStoreHook, useStore as useDefaultStore } from './useStore'\n\n/**\n * Represents a custom hook that provides a dispatch function\n * from the Redux store.\n *\n * @template DispatchType - The specific type of the dispatch function.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseDispatch<\n  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,\n> {\n  /**\n   * Returns the dispatch function from the Redux store.\n   *\n   * @returns The dispatch function from the Redux store.\n   *\n   * @template AppDispatch - The specific type of the dispatch function.\n   */\n  <AppDispatch extends DispatchType = DispatchType>(): AppDispatch\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useDispatch useDispatch}\n   * where the type of the `dispatch` function is predefined.\n   *\n   * This allows you to set the `dispatch` type once, eliminating the need to\n   * specify it with every {@linkcode useDispatch useDispatch} call.\n   *\n   * @returns A pre-typed `useDispatch` with the dispatch type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppDispatch = useDispatch.withTypes<AppDispatch>()\n   * ```\n   *\n   * @template OverrideDispatchType - The specific type of the dispatch function.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideDispatchType extends DispatchType,\n  >() => UseDispatch<OverrideDispatchType>\n}\n\n/**\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useDispatch` hook bound to the specified context.\n */\nexport function createDispatchHook<\n  StateType = unknown,\n  ActionType extends Action = UnknownAction,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useStore =\n    context === ReactReduxContext ? useDefaultStore : createStoreHook(context)\n\n  const useDispatch = () => {\n    const store = useStore()\n    return store.dispatch\n  }\n\n  Object.assign(useDispatch, {\n    withTypes: () => useDispatch,\n  })\n\n  return useDispatch as UseDispatch<Dispatch<ActionType>>\n}\n\n/**\n * A hook to access the redux `dispatch` function.\n *\n * @returns {any|function} redux store's `dispatch` function\n *\n * @example\n *\n * import React, { useCallback } from 'react'\n * import { useDispatch } from 'react-redux'\n *\n * export const CounterComponent = ({ value }) => {\n *   const dispatch = useDispatch()\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\n *   return (\n *     <div>\n *       <span>{value}</span>\n *       <button onClick={increaseCounter}>Increase counter</button>\n *     </div>\n *   )\n * }\n */\nexport const useDispatch = /*#__PURE__*/ createDispatchHook()\n","//import * as React from 'react'\nimport { React } from '../utils/react'\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector.js'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport type { EqualityFn, NoInfer } from '../types'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * The frequency of development mode checks.\n *\n * @since 8.1.0\n * @internal\n */\nexport type DevModeCheckFrequency = 'never' | 'once' | 'always'\n\n/**\n * Represents the configuration for development mode checks.\n *\n * @since 9.0.0\n * @internal\n */\nexport interface DevModeChecks {\n  /**\n   * Overrides the global stability check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the stability check.\n   *\n   * @default 'once'\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck: DevModeCheckFrequency\n\n  /**\n   * Overrides the global identity function check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the identity function check.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @default 'once'\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck: DevModeCheckFrequency\n}\n\nexport interface UseSelectorOptions<Selected = unknown> {\n  equalityFn?: EqualityFn<Selected>\n\n  /**\n   * `useSelector` performs additional checks in development mode to help\n   * identify and warn about potential issues in selector behavior. This\n   * option allows you to customize the behavior of these checks per selector.\n   *\n   * @since 9.0.0\n   */\n  devModeChecks?: Partial<DevModeChecks>\n}\n\n/**\n * Represents a custom hook that allows you to extract data from the\n * Redux store state, using a selector function. The selector function\n * takes the current state as an argument and returns a part of the state\n * or some derived data. The hook also supports an optional equality\n * function or options object to customize its behavior.\n *\n * @template StateType - The specific type of state this hook operates on.\n *\n * @public\n */\nexport interface UseSelector<StateType = unknown> {\n  /**\n   * A function that takes a selector function as its first argument.\n   * The selector function is responsible for selecting a part of\n   * the Redux store's state or computing derived data.\n   *\n   * @param selector - A function that receives the current state and returns a part of the state or some derived data.\n   * @param equalityFnOrOptions - An optional equality function or options object for customizing the behavior of the selector.\n   * @returns The selected part of the state or derived data.\n   *\n   * @template TState - The specific type of state this hook operates on.\n   * @template Selected - The type of the value that the selector function will return.\n   */\n  <TState extends StateType = StateType, Selected = unknown>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions?: EqualityFn<Selected> | UseSelectorOptions<Selected>,\n  ): Selected\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useSelector useSelector}\n   * where the `state` type is predefined.\n   *\n   * This allows you to set the `state` type once, eliminating the need to\n   * specify it with every {@linkcode useSelector useSelector} call.\n   *\n   * @returns A pre-typed `useSelector` with the state type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppSelector = useSelector.withTypes<RootState>()\n   * ```\n   *\n   * @template OverrideStateType - The specific type of state this hook operates on.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStateType extends StateType,\n  >() => UseSelector<OverrideStateType>\n}\n\nconst refEquality: EqualityFn<any> = (a, b) => a === b\n\n/**\n * Hook factory, which creates a `useSelector` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useSelector` hook bound to the specified context.\n */\nexport function createSelectorHook(\n  context: React.Context<ReactReduxContextValue<\n    any,\n    any\n  > | null> = ReactReduxContext,\n): UseSelector {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : createReduxContextHook(context)\n\n  const useSelector = <TState, Selected>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions:\n      | EqualityFn<NoInfer<Selected>>\n      | UseSelectorOptions<NoInfer<Selected>> = {},\n  ): Selected => {\n    const { equalityFn = refEquality } =\n      typeof equalityFnOrOptions === 'function'\n        ? { equalityFn: equalityFnOrOptions }\n        : equalityFnOrOptions\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`)\n      }\n      if (typeof selector !== 'function') {\n        throw new Error(`You must pass a function as a selector to useSelector`)\n      }\n      if (typeof equalityFn !== 'function') {\n        throw new Error(\n          `You must pass a function as an equality function to useSelector`,\n        )\n      }\n    }\n\n    const reduxContext = useReduxContext()\n\n    const { store, subscription, getServerState } = reduxContext\n\n    const firstRun = React.useRef(true)\n\n    const wrappedSelector = React.useCallback<typeof selector>(\n      {\n        [selector.name](state: TState) {\n          const selected = selector(state)\n          if (process.env.NODE_ENV !== 'production') {\n            const { devModeChecks = {} } =\n              typeof equalityFnOrOptions === 'function'\n                ? {}\n                : equalityFnOrOptions\n            const { identityFunctionCheck, stabilityCheck } = reduxContext\n            const {\n              identityFunctionCheck: finalIdentityFunctionCheck,\n              stabilityCheck: finalStabilityCheck,\n            } = {\n              stabilityCheck,\n              identityFunctionCheck,\n              ...devModeChecks,\n            }\n            if (\n              finalStabilityCheck === 'always' ||\n              (finalStabilityCheck === 'once' && firstRun.current)\n            ) {\n              const toCompare = selector(state)\n              if (!equalityFn(selected, toCompare)) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization',\n                  {\n                    state,\n                    selected,\n                    selected2: toCompare,\n                    stack,\n                  },\n                )\n              }\n            }\n            if (\n              finalIdentityFunctionCheck === 'always' ||\n              (finalIdentityFunctionCheck === 'once' && firstRun.current)\n            ) {\n              // @ts-ignore\n              if (selected === state) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned the root state when called. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.',\n                  { stack },\n                )\n              }\n            }\n            if (firstRun.current) firstRun.current = false\n          }\n          return selected\n        },\n      }[selector.name],\n      [selector],\n    )\n\n    const selectedState = useSyncExternalStoreWithSelector(\n      subscription.addNestedSub,\n      store.getState,\n      getServerState || store.getState,\n      wrappedSelector,\n      equalityFn,\n    )\n\n    React.useDebugValue(selectedState)\n\n    return selectedState\n  }\n\n  Object.assign(useSelector, {\n    withTypes: () => useSelector,\n  })\n\n  return useSelector as UseSelector\n}\n\n/**\n * A hook to access the redux store's state. This hook takes a selector function\n * as an argument. The selector is called with the store state.\n *\n * This hook takes an optional equality comparison function as the second parameter\n * that allows you to customize the way the selected state is compared to determine\n * whether the component needs to be re-rendered.\n *\n * @param {Function} selector the selector function\n * @param {Function=} equalityFn the function that will be used to determine equality\n *\n * @returns {any} the selected state\n *\n * @example\n *\n * import React from 'react'\n * import { useSelector } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const counter = useSelector(state => state.counter)\n *   return <div>{counter}</div>\n * }\n */\nexport const useSelector = /*#__PURE__*/ createSelectorHook()\n","import connect from './components/connect'\nexport type {\n  Connect,\n  ConnectProps,\n  ConnectedProps,\n} from './components/connect'\n\nimport shallowEqual from './utils/shallowEqual'\n\nimport Provider from './components/Provider'\nimport { defaultNoopBatch } from './utils/batch'\n\nexport { ReactReduxContext } from './components/Context'\nexport type { ReactReduxContextValue } from './components/Context'\n\nexport type { ProviderProps } from './components/Provider'\n\nexport type {\n  MapDispatchToProps,\n  MapDispatchToPropsFactory,\n  MapDispatchToPropsFunction,\n  MapDispatchToPropsNonObject,\n  MapDispatchToPropsParam,\n  MapStateToProps,\n  MapStateToPropsFactory,\n  MapStateToPropsParam,\n  MergeProps,\n  Selector,\n  SelectorFactory,\n} from './connect/selectorFactory'\n\nexport { createDispatchHook, useDispatch } from './hooks/useDispatch'\nexport type { UseDispatch } from './hooks/useDispatch'\n\nexport { createSelectorHook, useSelector } from './hooks/useSelector'\nexport type { UseSelector } from './hooks/useSelector'\n\nexport { createStoreHook, useStore } from './hooks/useStore'\nexport type { UseStore } from './hooks/useStore'\n\nexport type { Subscription } from './utils/Subscription'\n\nexport * from './types'\n\n/**\n * @deprecated As of React 18, batching is enabled by default for ReactDOM and React Native.\n * This is now a no-op that immediately runs the callback.\n */\nconst batch = defaultNoopBatch\n\nexport { Provider, batch, connect, shallowEqual }\n"],"mappings":"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","names":["React","IS_REACT_19","React","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","ForwardRef","REACT_FORWARD_REF_TYPE","Memo","REACT_MEMO_TYPE","typeOf","object","$$typeof","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_LAZY_TYPE","REACT_MEMO_TYPE","REACT_CONSUMER_TYPE","REACT_PORTAL_TYPE","isMemo","object","typeOf","REACT_MEMO_TYPE","pureFinalPropsSelectorFactory","mapStateToProps","mapDispatchToProps","mergeProps","dispatch","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","state","ownProps","stateProps","dispatchProps","mergedProps","handleFirstCall","firstState","firstOwnProps","handleNewPropsAndNewState","handleNewProps","handleNewState","nextStateProps","statePropsChanged","handleSubsequentCalls","nextState","nextOwnProps","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","options","bindActionCreators","actionCreators","dispatch","boundActionCreators","key","actionCreator","args","wrapMapToPropsConstant","getConstant","dispatch","constant","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","methodName","displayName","proxy","stateOrDispatch","ownProps","props","createInvalidArgFactory","arg","name","dispatch","options","mapDispatchToPropsFactory","mapDispatchToProps","wrapMapToPropsConstant","dispatch","bindActionCreators","wrapMapToPropsFunc","createInvalidArgFactory","mapStateToPropsFactory","mapStateToProps","wrapMapToPropsFunc","createInvalidArgFactory","wrapMapToPropsConstant","defaultMergeProps","stateProps","dispatchProps","ownProps","wrapMergePropsFunc","mergeProps","dispatch","displayName","areMergedPropsEqual","hasRunOnce","mergedProps","nextMergedProps","mergePropsFactory","createInvalidArgFactory","defaultNoopBatch","callback","createListenerCollection","first","last","defaultNoopBatch","listener","listeners","callback","isSubscribed","nullListeners","createSubscription","store","parentSub","unsubscribe","subscriptionsAmount","selfSubscribed","addNestedSub","trySubscribe","cleanupListener","removed","tryUnsubscribe","notifyNestedSubs","handleChangeWrapper","subscription","trySubscribeSelf","tryUnsubscribeSelf","canUseDOM","isDOM","isRunningInReactNative","isReactNative","getUseIsomorphicLayoutEffect","React","useIsomorphicLayoutEffect","is","x","y","shallowEqual","objA","objB","keysA","keysB","i","REACT_STATICS","KNOWN_STATICS","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","ForwardRef","Memo","getStatics","component","isMemo","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","inheritedComponent","keys","targetStatics","sourceStatics","i","key","descriptor","ContextKey","gT","getContext","React","contextMap","realContext","ReactReduxContext","NO_SUBSCRIPTION_ARRAY","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","dependencies","useIsomorphicLayoutEffect","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","childPropsFromStoreUpdate","notifyNestedSubs","subscribeUpdates","shouldHandleStateChanges","store","subscription","childPropsSelector","isMounted","additionalSubscribeListener","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","newChildProps","error","e","strictEqual","a","b","connect","mapStateToProps","mapDispatchToProps","mergeProps","pure","areStatesEqual","strictEqual","areOwnPropsEqual","shallowEqual","areStatePropsEqual","areMergedPropsEqual","forwardRef","context","ReactReduxContext","Context","initMapStateToProps","mapStateToPropsFactory","initMapDispatchToProps","mapDispatchToPropsFactory","initMergeProps","mergePropsFactory","shouldHandleStateChanges","WrappedComponent","wrappedComponentName","displayName","selectorFactoryOptions","ConnectFunction","props","propsContext","reactReduxForwardedRef","wrapperProps","React","ContextToUse","ResultContext","contextValue","didStoreComeFromProps","didStoreComeFromContext","store","getServerState","childPropsSelector","finalPropsSelectorFactory","subscription","notifyNestedSubs","NO_SUBSCRIPTION_ARRAY","createSubscription","overriddenContextValue","lastChildProps","lastWrapperProps","childPropsFromStoreUpdate","renderIsScheduled","isMounted","latestSubscriptionCallbackError","useIsomorphicLayoutEffect","actualChildPropsSelector","subscribeForReact","reactListener","subscribeUpdates","useIsomorphicLayoutEffectWithArgs","captureWrapperProps","actualChildProps","err","renderedWrappedComponent","Connect","forwarded","ref","hoistNonReactStatics","connect_default","Provider","providerProps","children","context","serverState","store","contextValue","React","subscription","createSubscription","previousState","useIsomorphicLayoutEffect","ReactReduxContext","Provider_default","createReduxContextHook","context","ReactReduxContext","React","useReduxContext","createStoreHook","context","ReactReduxContext","useReduxContext","createReduxContextHook","useStore","store","createDispatchHook","context","ReactReduxContext","useStore","createStoreHook","useDispatch","useSyncExternalStoreWithSelector","refEquality","a","b","createSelectorHook","context","ReactReduxContext","useReduxContext","createReduxContextHook","useSelector","selector","equalityFnOrOptions","equalityFn","reduxContext","store","subscription","getServerState","firstRun","React","wrappedSelector","state","selected","finalStabilityCheck","toCompare","e","finalIdentityFunctionCheck","selectedState","useSyncExternalStoreWithSelector","batch","defaultNoopBatch"]}
Index: node_modules/react-redux/dist/react-redux.d.ts
===================================================================
--- node_modules/react-redux/dist/react-redux.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/react-redux.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,566 @@
+import * as React from 'react';
+import { MemoExoticComponent, ForwardRefExoticComponent, Context, ReactNode, ComponentType, ComponentClass, ClassAttributes, JSX, FunctionComponent } from 'react';
+import { Action, UnknownAction, Store, Dispatch } from 'redux';
+
+/**
+ * Copyright 2015, Yahoo! Inc.
+ * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
+ */
+
+declare const REACT_STATICS: {
+    readonly childContextTypes: true;
+    readonly contextType: true;
+    readonly contextTypes: true;
+    readonly defaultProps: true;
+    readonly displayName: true;
+    readonly getDefaultProps: true;
+    readonly getDerivedStateFromError: true;
+    readonly getDerivedStateFromProps: true;
+    readonly mixins: true;
+    readonly propTypes: true;
+    readonly type: true;
+};
+declare const KNOWN_STATICS: {
+    readonly name: true;
+    readonly length: true;
+    readonly prototype: true;
+    readonly caller: true;
+    readonly callee: true;
+    readonly arguments: true;
+    readonly arity: true;
+};
+declare const FORWARD_REF_STATICS: {
+    readonly $$typeof: true;
+    readonly render: true;
+    readonly defaultProps: true;
+    readonly displayName: true;
+    readonly propTypes: true;
+};
+declare const MEMO_STATICS: {
+    readonly $$typeof: true;
+    readonly compare: true;
+    readonly defaultProps: true;
+    readonly displayName: true;
+    readonly propTypes: true;
+    readonly type: true;
+};
+type NonReactStatics<Source, C extends {
+    [key: string]: true;
+} = {}> = {
+    [key in Exclude<keyof Source, Source extends MemoExoticComponent<any> ? keyof typeof MEMO_STATICS | keyof C : Source extends ForwardRefExoticComponent<any> ? keyof typeof FORWARD_REF_STATICS | keyof C : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C>]: Source[key];
+};
+
+type VoidFunc = () => void;
+type Listener = {
+    callback: VoidFunc;
+    next: Listener | null;
+    prev: Listener | null;
+};
+declare function createListenerCollection(): {
+    clear(): void;
+    notify(): void;
+    get(): Listener[];
+    subscribe(callback: () => void): () => void;
+};
+type ListenerCollection = ReturnType<typeof createListenerCollection>;
+interface Subscription {
+    addNestedSub: (listener: VoidFunc) => VoidFunc;
+    notifyNestedSubs: VoidFunc;
+    handleChangeWrapper: VoidFunc;
+    isSubscribed: () => boolean;
+    onStateChange?: VoidFunc | null;
+    trySubscribe: VoidFunc;
+    tryUnsubscribe: VoidFunc;
+    getListeners: () => ListenerCollection;
+}
+
+interface ProviderProps<A extends Action<string> = UnknownAction, S = unknown> {
+    /**
+     * The single Redux store in your application.
+     */
+    store: Store<S, A>;
+    /**
+     * An optional server state snapshot. Will be used during initial hydration render if available, to ensure that the UI output is consistent with the HTML generated on the server.
+     */
+    serverState?: S;
+    /**
+     * Optional context to be used internally in react-redux. Use React.createContext() to create a context to be used.
+     * If this is used, you'll need to customize `connect` by supplying the same context provided to the Provider.
+     * Set the initial value to null, and the hooks will error
+     * if this is not overwritten by Provider.
+     */
+    context?: Context<ReactReduxContextValue<S, A> | null>;
+    /**
+     * Determines the frequency of stability checks for all selectors.
+     * This setting overrides the global configuration for
+     * the `useSelector` stability check, allowing you to specify how often
+     * these checks should occur in development mode.
+     *
+     * @since 8.1.0
+     */
+    stabilityCheck?: DevModeCheckFrequency;
+    /**
+     * Determines the frequency of identity function checks for all selectors.
+     * This setting overrides the global configuration for
+     * the `useSelector` identity function check, allowing you to specify how often
+     * these checks should occur in development mode.
+     *
+     * **Note**: Previously referred to as `noopCheck`.
+     *
+     * @since 9.0.0
+     */
+    identityFunctionCheck?: DevModeCheckFrequency;
+    children: ReactNode;
+}
+declare function Provider<A extends Action<string> = UnknownAction, S = unknown>(providerProps: ProviderProps<A, S>): React.JSX.Element;
+
+interface ReactReduxContextValue<SS = any, A extends Action<string> = UnknownAction> extends Pick<ProviderProps, 'stabilityCheck' | 'identityFunctionCheck'> {
+    store: Store<SS, A>;
+    subscription: Subscription;
+    getServerState?: () => SS;
+}
+declare const ReactReduxContext: Context<ReactReduxContextValue<any, UnknownAction> | null>;
+type ReactReduxContextInstance = typeof ReactReduxContext;
+
+/**
+ * The frequency of development mode checks.
+ *
+ * @since 8.1.0
+ * @internal
+ */
+type DevModeCheckFrequency = 'never' | 'once' | 'always';
+/**
+ * Represents the configuration for development mode checks.
+ *
+ * @since 9.0.0
+ * @internal
+ */
+interface DevModeChecks {
+    /**
+     * Overrides the global stability check for the selector.
+     * - `once` - Run only the first time the selector is called.
+     * - `always` - Run every time the selector is called.
+     * - `never` - Never run the stability check.
+     *
+     * @default 'once'
+     *
+     * @since 8.1.0
+     */
+    stabilityCheck: DevModeCheckFrequency;
+    /**
+     * Overrides the global identity function check for the selector.
+     * - `once` - Run only the first time the selector is called.
+     * - `always` - Run every time the selector is called.
+     * - `never` - Never run the identity function check.
+     *
+     * **Note**: Previously referred to as `noopCheck`.
+     *
+     * @default 'once'
+     *
+     * @since 9.0.0
+     */
+    identityFunctionCheck: DevModeCheckFrequency;
+}
+interface UseSelectorOptions<Selected = unknown> {
+    equalityFn?: EqualityFn<Selected>;
+    /**
+     * `useSelector` performs additional checks in development mode to help
+     * identify and warn about potential issues in selector behavior. This
+     * option allows you to customize the behavior of these checks per selector.
+     *
+     * @since 9.0.0
+     */
+    devModeChecks?: Partial<DevModeChecks>;
+}
+/**
+ * Represents a custom hook that allows you to extract data from the
+ * Redux store state, using a selector function. The selector function
+ * takes the current state as an argument and returns a part of the state
+ * or some derived data. The hook also supports an optional equality
+ * function or options object to customize its behavior.
+ *
+ * @template StateType - The specific type of state this hook operates on.
+ *
+ * @public
+ */
+interface UseSelector<StateType = unknown> {
+    /**
+     * A function that takes a selector function as its first argument.
+     * The selector function is responsible for selecting a part of
+     * the Redux store's state or computing derived data.
+     *
+     * @param selector - A function that receives the current state and returns a part of the state or some derived data.
+     * @param equalityFnOrOptions - An optional equality function or options object for customizing the behavior of the selector.
+     * @returns The selected part of the state or derived data.
+     *
+     * @template TState - The specific type of state this hook operates on.
+     * @template Selected - The type of the value that the selector function will return.
+     */
+    <TState extends StateType = StateType, Selected = unknown>(selector: (state: TState) => Selected, equalityFnOrOptions?: EqualityFn<Selected> | UseSelectorOptions<Selected>): Selected;
+    /**
+     * Creates a "pre-typed" version of {@linkcode useSelector useSelector}
+     * where the `state` type is predefined.
+     *
+     * This allows you to set the `state` type once, eliminating the need to
+     * specify it with every {@linkcode useSelector useSelector} call.
+     *
+     * @returns A pre-typed `useSelector` with the state type already defined.
+     *
+     * @example
+     * ```ts
+     * export const useAppSelector = useSelector.withTypes<RootState>()
+     * ```
+     *
+     * @template OverrideStateType - The specific type of state this hook operates on.
+     *
+     * @since 9.1.0
+     */
+    withTypes: <OverrideStateType extends StateType>() => UseSelector<OverrideStateType>;
+}
+/**
+ * Hook factory, which creates a `useSelector` hook bound to a given context.
+ *
+ * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
+ * @returns {Function} A `useSelector` hook bound to the specified context.
+ */
+declare function createSelectorHook(context?: React.Context<ReactReduxContextValue<any, any> | null>): UseSelector;
+/**
+ * A hook to access the redux store's state. This hook takes a selector function
+ * as an argument. The selector is called with the store state.
+ *
+ * This hook takes an optional equality comparison function as the second parameter
+ * that allows you to customize the way the selected state is compared to determine
+ * whether the component needs to be re-rendered.
+ *
+ * @param {Function} selector the selector function
+ * @param {Function=} equalityFn the function that will be used to determine equality
+ *
+ * @returns {any} the selected state
+ *
+ * @example
+ *
+ * import React from 'react'
+ * import { useSelector } from 'react-redux'
+ *
+ * export const CounterComponent = () => {
+ *   const counter = useSelector(state => state.counter)
+ *   return <div>{counter}</div>
+ * }
+ */
+declare const useSelector: UseSelector<unknown>;
+
+type FixTypeLater = any;
+type EqualityFn<T> = (a: T, b: T) => boolean;
+type ExtendedEqualityFn<T, P> = (a: T, b: T, c: P, d: P) => boolean;
+type AnyIfEmpty<T extends object> = keyof T extends never ? any : T;
+type DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;
+interface DispatchProp<A extends Action<string> = UnknownAction> {
+    dispatch: Dispatch<A>;
+}
+/**
+ * A property P will be present if:
+ * - it is present in DecorationTargetProps
+ *
+ * Its value will be dependent on the following conditions
+ * - if property P is present in InjectedProps and its definition extends the definition
+ *   in DecorationTargetProps, then its definition will be that of DecorationTargetProps[P]
+ * - if property P is not present in InjectedProps then its definition will be that of
+ *   DecorationTargetProps[P]
+ * - if property P is present in InjectedProps but does not extend the
+ *   DecorationTargetProps[P] definition, its definition will be that of InjectedProps[P]
+ */
+type Matching<InjectedProps, DecorationTargetProps> = {
+    [P in keyof DecorationTargetProps]: P extends keyof InjectedProps ? InjectedProps[P] extends DecorationTargetProps[P] ? DecorationTargetProps[P] : InjectedProps[P] : DecorationTargetProps[P];
+};
+/**
+ * a property P will be present if :
+ * - it is present in both DecorationTargetProps and InjectedProps
+ * - InjectedProps[P] can satisfy DecorationTargetProps[P]
+ * ie: decorated component can accept more types than decorator is injecting
+ *
+ * For decoration, inject props or ownProps are all optionally
+ * required by the decorated (right hand side) component.
+ * But any property required by the decorated component must be satisfied by the injected property.
+ */
+type Shared<InjectedProps, DecorationTargetProps> = {
+    [P in Extract<keyof InjectedProps, keyof DecorationTargetProps>]?: InjectedProps[P] extends DecorationTargetProps[P] ? DecorationTargetProps[P] : never;
+};
+type GetProps<C> = C extends ComponentType<infer P> ? C extends ComponentClass<P> ? ClassAttributes<InstanceType<C>> & P : P : never;
+type GetLibraryManagedProps<C> = JSX.LibraryManagedAttributes<C, GetProps<C>>;
+type ConnectedComponent<C extends ComponentType<any>, P> = FunctionComponent<P> & NonReactStatics<C> & {
+    WrappedComponent: C;
+};
+type ConnectPropsMaybeWithoutContext<TActualOwnProps> = TActualOwnProps extends {
+    context: any;
+} ? Omit<ConnectProps, 'context'> : ConnectProps;
+type Identity<T> = T;
+type Mapped<T> = Identity<{
+    [k in keyof T]: T[k];
+}>;
+type InferableComponentEnhancerWithProps<TInjectedProps, TNeedsProps> = <C extends ComponentType<Matching<TInjectedProps, GetProps<C>>>>(component: C) => ConnectedComponent<C, Mapped<DistributiveOmit<GetLibraryManagedProps<C>, keyof Shared<TInjectedProps, GetLibraryManagedProps<C>>> & TNeedsProps & ConnectPropsMaybeWithoutContext<TNeedsProps & GetProps<C>>>>;
+type InferableComponentEnhancer<TInjectedProps> = InferableComponentEnhancerWithProps<TInjectedProps, {}>;
+type InferThunkActionCreatorType<TActionCreator extends (...args: any[]) => any> = TActionCreator extends (...args: infer TParams) => (...args: any[]) => infer TReturn ? (...args: TParams) => TReturn : TActionCreator;
+type HandleThunkActionCreator<TActionCreator> = TActionCreator extends (...args: any[]) => any ? InferThunkActionCreatorType<TActionCreator> : TActionCreator;
+type ResolveThunks<TDispatchProps> = TDispatchProps extends {
+    [key: string]: any;
+} ? {
+    [C in keyof TDispatchProps]: HandleThunkActionCreator<TDispatchProps[C]>;
+} : TDispatchProps;
+/**
+ * This interface allows you to easily create a hook that is properly typed for your
+ * store's root state.
+ *
+ * @example
+ *
+ * interface RootState {
+ *   property: string;
+ * }
+ *
+ * const useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;
+ */
+interface TypedUseSelectorHook<TState> {
+    <TSelected>(selector: (state: TState) => TSelected, equalityFn?: EqualityFn<NoInfer<TSelected>>): TSelected;
+    <Selected = unknown>(selector: (state: TState) => Selected, options?: UseSelectorOptions<Selected>): Selected;
+}
+type NoInfer<T> = [T][T extends any ? 0 : never];
+
+type SelectorFactory<S, TProps, TOwnProps, TFactoryOptions> = (dispatch: Dispatch<Action<string>>, factoryOptions: TFactoryOptions) => Selector<S, TProps, TOwnProps>;
+type Selector<S, TProps, TOwnProps = null> = TOwnProps extends null | undefined ? (state: S) => TProps : (state: S, ownProps: TOwnProps) => TProps;
+type MapStateToProps<TStateProps, TOwnProps, State> = (state: State, ownProps: TOwnProps) => TStateProps;
+type MapStateToPropsFactory<TStateProps, TOwnProps, State> = (initialState: State, ownProps: TOwnProps) => MapStateToProps<TStateProps, TOwnProps, State>;
+type MapStateToPropsParam<TStateProps, TOwnProps, State> = MapStateToPropsFactory<TStateProps, TOwnProps, State> | MapStateToProps<TStateProps, TOwnProps, State> | null | undefined;
+type MapDispatchToPropsFunction<TDispatchProps, TOwnProps> = (dispatch: Dispatch<Action<string>>, ownProps: TOwnProps) => TDispatchProps;
+type MapDispatchToProps<TDispatchProps, TOwnProps> = MapDispatchToPropsFunction<TDispatchProps, TOwnProps> | TDispatchProps;
+type MapDispatchToPropsFactory<TDispatchProps, TOwnProps> = (dispatch: Dispatch<Action<string>>, ownProps: TOwnProps) => MapDispatchToPropsFunction<TDispatchProps, TOwnProps>;
+type MapDispatchToPropsParam<TDispatchProps, TOwnProps> = MapDispatchToPropsFactory<TDispatchProps, TOwnProps> | MapDispatchToProps<TDispatchProps, TOwnProps>;
+type MapDispatchToPropsNonObject<TDispatchProps, TOwnProps> = MapDispatchToPropsFactory<TDispatchProps, TOwnProps> | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>;
+type MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> = (stateProps: TStateProps, dispatchProps: TDispatchProps, ownProps: TOwnProps) => TMergedProps;
+
+interface ConnectProps {
+    /** A custom Context instance that the component can use to access the store from an alternate Provider using that same Context instance */
+    context?: ReactReduxContextInstance;
+    /** A Redux store instance to be used for subscriptions instead of the store from a Provider */
+    store?: Store;
+}
+/**
+ * Infers the type of props that a connector will inject into a component.
+ */
+type ConnectedProps<TConnector> = TConnector extends InferableComponentEnhancerWithProps<infer TInjectedProps, any> ? unknown extends TInjectedProps ? TConnector extends InferableComponentEnhancer<infer TInjectedProps> ? TInjectedProps : never : TInjectedProps : never;
+interface ConnectOptions<State = unknown, TStateProps = {}, TOwnProps = {}, TMergedProps = {}> {
+    forwardRef?: boolean;
+    context?: typeof ReactReduxContext;
+    areStatesEqual?: (nextState: State, prevState: State, nextOwnProps: TOwnProps, prevOwnProps: TOwnProps) => boolean;
+    areOwnPropsEqual?: (nextOwnProps: TOwnProps, prevOwnProps: TOwnProps) => boolean;
+    areStatePropsEqual?: (nextStateProps: TStateProps, prevStateProps: TStateProps) => boolean;
+    areMergedPropsEqual?: (nextMergedProps: TMergedProps, prevMergedProps: TMergedProps) => boolean;
+}
+/**
+ * Connects a React component to a Redux store.
+ *
+ * - Without arguments, just wraps the component, without changing the behavior / props
+ *
+ * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior
+ * is to override ownProps (as stated in the docs), so what remains is everything that's
+ * not a state or dispatch prop
+ *
+ * - When 3rd param is passed, we don't know if ownProps propagate and whether they
+ * should be valid component props, because it depends on mergeProps implementation.
+ * As such, it is the user's responsibility to extend ownProps interface from state or
+ * dispatch props or both when applicable
+ *
+ * @param mapStateToProps
+ * @param mapDispatchToProps
+ * @param mergeProps
+ * @param options
+ */
+interface Connect<DefaultState = unknown> {
+    (): InferableComponentEnhancer<DispatchProp>;
+    /** mapState only */
+    <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>): InferableComponentEnhancerWithProps<TStateProps & DispatchProp, TOwnProps>;
+    /** mapDispatch only (as a function) */
+    <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(mapStateToProps: null | undefined, mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>;
+    /** mapDispatch only (as an object) */
+    <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(mapStateToProps: null | undefined, mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>): InferableComponentEnhancerWithProps<ResolveThunks<TDispatchProps>, TOwnProps>;
+    /** mapState and mapDispatch (as a function)*/
+    <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>, mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>): InferableComponentEnhancerWithProps<TStateProps & TDispatchProps, TOwnProps>;
+    /** mapState and mapDispatch (nullish) */
+    <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>, mapDispatchToProps: null | undefined): InferableComponentEnhancerWithProps<TStateProps, TOwnProps>;
+    /** mapState and mapDispatch (as an object) */
+    <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>, mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>): InferableComponentEnhancerWithProps<TStateProps & ResolveThunks<TDispatchProps>, TOwnProps>;
+    /** mergeProps only */
+    <no_state = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}>(mapStateToProps: null | undefined, mapDispatchToProps: null | undefined, mergeProps: MergeProps<undefined, DispatchProp, TOwnProps, TMergedProps>): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>;
+    /** mapState and mergeProps */
+    <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}, State = DefaultState>(mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>, mapDispatchToProps: null | undefined, mergeProps: MergeProps<TStateProps, DispatchProp, TOwnProps, TMergedProps>): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>;
+    /** mapDispatch (as a object) and mergeProps */
+    <no_state = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}>(mapStateToProps: null | undefined, mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>, mergeProps: MergeProps<undefined, TDispatchProps, TOwnProps, TMergedProps>): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>;
+    /** mapState and options */
+    <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>, mapDispatchToProps: null | undefined, mergeProps: null | undefined, options: ConnectOptions<State, TStateProps, TOwnProps>): InferableComponentEnhancerWithProps<DispatchProp & TStateProps, TOwnProps>;
+    /** mapDispatch (as a function) and options */
+    <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(mapStateToProps: null | undefined, mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>, mergeProps: null | undefined, options: ConnectOptions<{}, TStateProps, TOwnProps>): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>;
+    /** mapDispatch (as an object) and options*/
+    <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(mapStateToProps: null | undefined, mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>, mergeProps: null | undefined, options: ConnectOptions<{}, TStateProps, TOwnProps>): InferableComponentEnhancerWithProps<ResolveThunks<TDispatchProps>, TOwnProps>;
+    /** mapState,  mapDispatch (as a function), and options */
+    <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>, mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>, mergeProps: null | undefined, options: ConnectOptions<State, TStateProps, TOwnProps>): InferableComponentEnhancerWithProps<TStateProps & TDispatchProps, TOwnProps>;
+    /** mapState,  mapDispatch (as an object), and options */
+    <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>, mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>, mergeProps: null | undefined, options: ConnectOptions<State, TStateProps, TOwnProps>): InferableComponentEnhancerWithProps<TStateProps & ResolveThunks<TDispatchProps>, TOwnProps>;
+    /** mapState, mapDispatch, mergeProps, and options */
+    <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}, State = DefaultState>(mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>, mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>, mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>, options?: ConnectOptions<State, TStateProps, TOwnProps, TMergedProps>): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>;
+}
+declare const _default: Connect;
+
+declare function shallowEqual(objA: any, objB: any): boolean;
+
+declare function defaultNoopBatch(callback: () => void): void;
+
+/**
+ * Represents a custom hook that provides a dispatch function
+ * from the Redux store.
+ *
+ * @template DispatchType - The specific type of the dispatch function.
+ *
+ * @since 9.1.0
+ * @public
+ */
+interface UseDispatch<DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>> {
+    /**
+     * Returns the dispatch function from the Redux store.
+     *
+     * @returns The dispatch function from the Redux store.
+     *
+     * @template AppDispatch - The specific type of the dispatch function.
+     */
+    <AppDispatch extends DispatchType = DispatchType>(): AppDispatch;
+    /**
+     * Creates a "pre-typed" version of {@linkcode useDispatch useDispatch}
+     * where the type of the `dispatch` function is predefined.
+     *
+     * This allows you to set the `dispatch` type once, eliminating the need to
+     * specify it with every {@linkcode useDispatch useDispatch} call.
+     *
+     * @returns A pre-typed `useDispatch` with the dispatch type already defined.
+     *
+     * @example
+     * ```ts
+     * export const useAppDispatch = useDispatch.withTypes<AppDispatch>()
+     * ```
+     *
+     * @template OverrideDispatchType - The specific type of the dispatch function.
+     *
+     * @since 9.1.0
+     */
+    withTypes: <OverrideDispatchType extends DispatchType>() => UseDispatch<OverrideDispatchType>;
+}
+/**
+ * Hook factory, which creates a `useDispatch` hook bound to a given context.
+ *
+ * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
+ * @returns {Function} A `useDispatch` hook bound to the specified context.
+ */
+declare function createDispatchHook<StateType = unknown, ActionType extends Action = UnknownAction>(context?: Context<ReactReduxContextValue<StateType, ActionType> | null>): UseDispatch<Dispatch<ActionType>>;
+/**
+ * A hook to access the redux `dispatch` function.
+ *
+ * @returns {any|function} redux store's `dispatch` function
+ *
+ * @example
+ *
+ * import React, { useCallback } from 'react'
+ * import { useDispatch } from 'react-redux'
+ *
+ * export const CounterComponent = ({ value }) => {
+ *   const dispatch = useDispatch()
+ *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])
+ *   return (
+ *     <div>
+ *       <span>{value}</span>
+ *       <button onClick={increaseCounter}>Increase counter</button>
+ *     </div>
+ *   )
+ * }
+ */
+declare const useDispatch: UseDispatch<Dispatch<UnknownAction>>;
+
+/**
+ * Represents a type that extracts the action type from a given Redux store.
+ *
+ * @template StoreType - The specific type of the Redux store.
+ *
+ * @since 9.1.0
+ * @internal
+ */
+type ExtractStoreActionType<StoreType extends Store> = StoreType extends Store<any, infer ActionType> ? ActionType : never;
+/**
+ * Represents a custom hook that provides access to the Redux store.
+ *
+ * @template StoreType - The specific type of the Redux store that gets returned.
+ *
+ * @since 9.1.0
+ * @public
+ */
+interface UseStore<StoreType extends Store> {
+    /**
+     * Returns the Redux store instance.
+     *
+     * @returns The Redux store instance.
+     */
+    (): StoreType;
+    /**
+     * Returns the Redux store instance with specific state and action types.
+     *
+     * @returns The Redux store with the specified state and action types.
+     *
+     * @template StateType - The specific type of the state used in the store.
+     * @template ActionType - The specific type of the actions used in the store.
+     */
+    <StateType extends ReturnType<StoreType['getState']> = ReturnType<StoreType['getState']>, ActionType extends Action = ExtractStoreActionType<Store>>(): Store<StateType, ActionType>;
+    /**
+     * Creates a "pre-typed" version of {@linkcode useStore useStore}
+     * where the type of the Redux `store` is predefined.
+     *
+     * This allows you to set the `store` type once, eliminating the need to
+     * specify it with every {@linkcode useStore useStore} call.
+     *
+     * @returns A pre-typed `useStore` with the store type already defined.
+     *
+     * @example
+     * ```ts
+     * export const useAppStore = useStore.withTypes<AppStore>()
+     * ```
+     *
+     * @template OverrideStoreType - The specific type of the Redux store that gets returned.
+     *
+     * @since 9.1.0
+     */
+    withTypes: <OverrideStoreType extends StoreType>() => UseStore<OverrideStoreType>;
+}
+/**
+ * Hook factory, which creates a `useStore` hook bound to a given context.
+ *
+ * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
+ * @returns {Function} A `useStore` hook bound to the specified context.
+ */
+declare function createStoreHook<StateType = unknown, ActionType extends Action = Action>(context?: Context<ReactReduxContextValue<StateType, ActionType> | null>): UseStore<Store<StateType, ActionType>>;
+/**
+ * A hook to access the redux store.
+ *
+ * @returns {any} the redux store
+ *
+ * @example
+ *
+ * import React from 'react'
+ * import { useStore } from 'react-redux'
+ *
+ * export const ExampleComponent = () => {
+ *   const store = useStore()
+ *   return <div>{store.getState()}</div>
+ * }
+ */
+declare const useStore: UseStore<Store<unknown, Action, unknown>>;
+
+/**
+ * @deprecated As of React 18, batching is enabled by default for ReactDOM and React Native.
+ * This is now a no-op that immediately runs the callback.
+ */
+declare const batch: typeof defaultNoopBatch;
+
+export { type AnyIfEmpty, type Connect, type ConnectProps, type ConnectPropsMaybeWithoutContext, type ConnectedComponent, type ConnectedProps, type DispatchProp, type DistributiveOmit, type EqualityFn, type ExtendedEqualityFn, type FixTypeLater, type GetLibraryManagedProps, type GetProps, type HandleThunkActionCreator, type InferThunkActionCreatorType, type InferableComponentEnhancer, type InferableComponentEnhancerWithProps, type MapDispatchToProps, type MapDispatchToPropsFactory, type MapDispatchToPropsFunction, type MapDispatchToPropsNonObject, type MapDispatchToPropsParam, type MapStateToProps, type MapStateToPropsFactory, type MapStateToPropsParam, type Mapped, type Matching, type MergeProps, type NoInfer, Provider, type ProviderProps, ReactReduxContext, type ReactReduxContextValue, type ResolveThunks, type Selector, type SelectorFactory, type Shared, type Subscription, type TypedUseSelectorHook, type UseDispatch, type UseSelector, type UseStore, batch, _default as connect, createDispatchHook, createSelectorHook, createStoreHook, shallowEqual, useDispatch, useSelector, useStore };
Index: node_modules/react-redux/dist/react-redux.legacy-esm.js
===================================================================
--- node_modules/react-redux/dist/react-redux.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/react-redux.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1103 @@
+var __defProp = Object.defineProperty;
+var __defProps = Object.defineProperties;
+var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
+var __getOwnPropSymbols = Object.getOwnPropertySymbols;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __propIsEnum = Object.prototype.propertyIsEnumerable;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __spreadValues = (a, b) => {
+  for (var prop in b || (b = {}))
+    if (__hasOwnProp.call(b, prop))
+      __defNormalProp(a, prop, b[prop]);
+  if (__getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(b)) {
+      if (__propIsEnum.call(b, prop))
+        __defNormalProp(a, prop, b[prop]);
+    }
+  return a;
+};
+var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
+var __objRest = (source, exclude) => {
+  var target = {};
+  for (var prop in source)
+    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
+      target[prop] = source[prop];
+  if (source != null && __getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(source)) {
+      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
+        target[prop] = source[prop];
+    }
+  return target;
+};
+
+// src/utils/react.ts
+import * as React from "react";
+
+// src/utils/react-is.ts
+var IS_REACT_19 = /* @__PURE__ */ React.version.startsWith("19");
+var REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(
+  IS_REACT_19 ? "react.transitional.element" : "react.element"
+);
+var REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal");
+var REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for("react.fragment");
+var REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for("react.strict_mode");
+var REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for("react.profiler");
+var REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for("react.consumer");
+var REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for("react.context");
+var REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for("react.forward_ref");
+var REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for("react.suspense");
+var REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(
+  "react.suspense_list"
+);
+var REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for("react.memo");
+var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy");
+var REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for("react.offscreen");
+var REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(
+  "react.client.reference"
+);
+var ForwardRef = REACT_FORWARD_REF_TYPE;
+var Memo = REACT_MEMO_TYPE;
+function isValidElementType(type) {
+  return typeof type === "string" || typeof type === "function" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === "object" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE || type.getModuleId !== void 0) ? true : false;
+}
+function typeOf(object) {
+  if (typeof object === "object" && object !== null) {
+    const { $$typeof } = object;
+    switch ($$typeof) {
+      case REACT_ELEMENT_TYPE:
+        switch (object = object.type, object) {
+          case REACT_FRAGMENT_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_SUSPENSE_TYPE:
+          case REACT_SUSPENSE_LIST_TYPE:
+            return object;
+          default:
+            switch (object = object && object.$$typeof, object) {
+              case REACT_CONTEXT_TYPE:
+              case REACT_FORWARD_REF_TYPE:
+              case REACT_LAZY_TYPE:
+              case REACT_MEMO_TYPE:
+                return object;
+              case REACT_CONSUMER_TYPE:
+                return object;
+              default:
+                return $$typeof;
+            }
+        }
+      case REACT_PORTAL_TYPE:
+        return $$typeof;
+    }
+  }
+}
+function isContextConsumer(object) {
+  return IS_REACT_19 ? typeOf(object) === REACT_CONSUMER_TYPE : typeOf(object) === REACT_CONTEXT_TYPE;
+}
+function isMemo(object) {
+  return typeOf(object) === REACT_MEMO_TYPE;
+}
+
+// src/utils/warning.ts
+function warning(message) {
+  if (typeof console !== "undefined" && typeof console.error === "function") {
+    console.error(message);
+  }
+  try {
+    throw new Error(message);
+  } catch (e) {
+  }
+}
+
+// src/connect/verifySubselectors.ts
+function verify(selector, methodName) {
+  if (!selector) {
+    throw new Error(`Unexpected value for ${methodName} in connect.`);
+  } else if (methodName === "mapStateToProps" || methodName === "mapDispatchToProps") {
+    if (!Object.prototype.hasOwnProperty.call(selector, "dependsOnOwnProps")) {
+      warning(
+        `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`
+      );
+    }
+  }
+}
+function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) {
+  verify(mapStateToProps, "mapStateToProps");
+  verify(mapDispatchToProps, "mapDispatchToProps");
+  verify(mergeProps, "mergeProps");
+}
+
+// src/connect/selectorFactory.ts
+function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {
+  areStatesEqual,
+  areOwnPropsEqual,
+  areStatePropsEqual
+}) {
+  let hasRunAtLeastOnce = false;
+  let state;
+  let ownProps;
+  let stateProps;
+  let dispatchProps;
+  let mergedProps;
+  function handleFirstCall(firstState, firstOwnProps) {
+    state = firstState;
+    ownProps = firstOwnProps;
+    stateProps = mapStateToProps(state, ownProps);
+    dispatchProps = mapDispatchToProps(dispatch, ownProps);
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    hasRunAtLeastOnce = true;
+    return mergedProps;
+  }
+  function handleNewPropsAndNewState() {
+    stateProps = mapStateToProps(state, ownProps);
+    if (mapDispatchToProps.dependsOnOwnProps)
+      dispatchProps = mapDispatchToProps(dispatch, ownProps);
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    return mergedProps;
+  }
+  function handleNewProps() {
+    if (mapStateToProps.dependsOnOwnProps)
+      stateProps = mapStateToProps(state, ownProps);
+    if (mapDispatchToProps.dependsOnOwnProps)
+      dispatchProps = mapDispatchToProps(dispatch, ownProps);
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    return mergedProps;
+  }
+  function handleNewState() {
+    const nextStateProps = mapStateToProps(state, ownProps);
+    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);
+    stateProps = nextStateProps;
+    if (statePropsChanged)
+      mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    return mergedProps;
+  }
+  function handleSubsequentCalls(nextState, nextOwnProps) {
+    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);
+    const stateChanged = !areStatesEqual(
+      nextState,
+      state,
+      nextOwnProps,
+      ownProps
+    );
+    state = nextState;
+    ownProps = nextOwnProps;
+    if (propsChanged && stateChanged) return handleNewPropsAndNewState();
+    if (propsChanged) return handleNewProps();
+    if (stateChanged) return handleNewState();
+    return mergedProps;
+  }
+  return function pureFinalPropsSelector(nextState, nextOwnProps) {
+    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);
+  };
+}
+function finalPropsSelectorFactory(dispatch, _a) {
+  var _b = _a, {
+    initMapStateToProps,
+    initMapDispatchToProps,
+    initMergeProps
+  } = _b, options = __objRest(_b, [
+    "initMapStateToProps",
+    "initMapDispatchToProps",
+    "initMergeProps"
+  ]);
+  const mapStateToProps = initMapStateToProps(dispatch, options);
+  const mapDispatchToProps = initMapDispatchToProps(dispatch, options);
+  const mergeProps = initMergeProps(dispatch, options);
+  if (process.env.NODE_ENV !== "production") {
+    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);
+  }
+  return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);
+}
+
+// src/utils/bindActionCreators.ts
+function bindActionCreators(actionCreators, dispatch) {
+  const boundActionCreators = {};
+  for (const key in actionCreators) {
+    const actionCreator = actionCreators[key];
+    if (typeof actionCreator === "function") {
+      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));
+    }
+  }
+  return boundActionCreators;
+}
+
+// src/utils/isPlainObject.ts
+function isPlainObject(obj) {
+  if (typeof obj !== "object" || obj === null) return false;
+  const proto = Object.getPrototypeOf(obj);
+  if (proto === null) return true;
+  let baseProto = proto;
+  while (Object.getPrototypeOf(baseProto) !== null) {
+    baseProto = Object.getPrototypeOf(baseProto);
+  }
+  return proto === baseProto;
+}
+
+// src/utils/verifyPlainObject.ts
+function verifyPlainObject(value, displayName, methodName) {
+  if (!isPlainObject(value)) {
+    warning(
+      `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`
+    );
+  }
+}
+
+// src/connect/wrapMapToProps.ts
+function wrapMapToPropsConstant(getConstant) {
+  return function initConstantSelector(dispatch) {
+    const constant = getConstant(dispatch);
+    function constantSelector() {
+      return constant;
+    }
+    constantSelector.dependsOnOwnProps = false;
+    return constantSelector;
+  };
+}
+function getDependsOnOwnProps(mapToProps) {
+  return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;
+}
+function wrapMapToPropsFunc(mapToProps, methodName) {
+  return function initProxySelector(dispatch, { displayName }) {
+    const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {
+      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, void 0);
+    };
+    proxy.dependsOnOwnProps = true;
+    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {
+      proxy.mapToProps = mapToProps;
+      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);
+      let props = proxy(stateOrDispatch, ownProps);
+      if (typeof props === "function") {
+        proxy.mapToProps = props;
+        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);
+        props = proxy(stateOrDispatch, ownProps);
+      }
+      if (process.env.NODE_ENV !== "production")
+        verifyPlainObject(props, displayName, methodName);
+      return props;
+    };
+    return proxy;
+  };
+}
+
+// src/connect/invalidArgFactory.ts
+function createInvalidArgFactory(arg, name) {
+  return (dispatch, options) => {
+    throw new Error(
+      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`
+    );
+  };
+}
+
+// src/connect/mapDispatchToProps.ts
+function mapDispatchToPropsFactory(mapDispatchToProps) {
+  return mapDispatchToProps && typeof mapDispatchToProps === "object" ? wrapMapToPropsConstant(
+    (dispatch) => (
+      // @ts-ignore
+      bindActionCreators(mapDispatchToProps, dispatch)
+    )
+  ) : !mapDispatchToProps ? wrapMapToPropsConstant((dispatch) => ({
+    dispatch
+  })) : typeof mapDispatchToProps === "function" ? (
+    // @ts-ignore
+    wrapMapToPropsFunc(mapDispatchToProps, "mapDispatchToProps")
+  ) : createInvalidArgFactory(mapDispatchToProps, "mapDispatchToProps");
+}
+
+// src/connect/mapStateToProps.ts
+function mapStateToPropsFactory(mapStateToProps) {
+  return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === "function" ? (
+    // @ts-ignore
+    wrapMapToPropsFunc(mapStateToProps, "mapStateToProps")
+  ) : createInvalidArgFactory(mapStateToProps, "mapStateToProps");
+}
+
+// src/connect/mergeProps.ts
+function defaultMergeProps(stateProps, dispatchProps, ownProps) {
+  return __spreadValues(__spreadValues(__spreadValues({}, ownProps), stateProps), dispatchProps);
+}
+function wrapMergePropsFunc(mergeProps) {
+  return function initMergePropsProxy(dispatch, { displayName, areMergedPropsEqual }) {
+    let hasRunOnce = false;
+    let mergedProps;
+    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {
+      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+      if (hasRunOnce) {
+        if (!areMergedPropsEqual(nextMergedProps, mergedProps))
+          mergedProps = nextMergedProps;
+      } else {
+        hasRunOnce = true;
+        mergedProps = nextMergedProps;
+        if (process.env.NODE_ENV !== "production")
+          verifyPlainObject(mergedProps, displayName, "mergeProps");
+      }
+      return mergedProps;
+    };
+  };
+}
+function mergePropsFactory(mergeProps) {
+  return !mergeProps ? () => defaultMergeProps : typeof mergeProps === "function" ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, "mergeProps");
+}
+
+// src/utils/batch.ts
+function defaultNoopBatch(callback) {
+  callback();
+}
+
+// src/utils/Subscription.ts
+function createListenerCollection() {
+  let first = null;
+  let last = null;
+  return {
+    clear() {
+      first = null;
+      last = null;
+    },
+    notify() {
+      defaultNoopBatch(() => {
+        let listener = first;
+        while (listener) {
+          listener.callback();
+          listener = listener.next;
+        }
+      });
+    },
+    get() {
+      const listeners = [];
+      let listener = first;
+      while (listener) {
+        listeners.push(listener);
+        listener = listener.next;
+      }
+      return listeners;
+    },
+    subscribe(callback) {
+      let isSubscribed = true;
+      const listener = last = {
+        callback,
+        next: null,
+        prev: last
+      };
+      if (listener.prev) {
+        listener.prev.next = listener;
+      } else {
+        first = listener;
+      }
+      return function unsubscribe() {
+        if (!isSubscribed || first === null) return;
+        isSubscribed = false;
+        if (listener.next) {
+          listener.next.prev = listener.prev;
+        } else {
+          last = listener.prev;
+        }
+        if (listener.prev) {
+          listener.prev.next = listener.next;
+        } else {
+          first = listener.next;
+        }
+      };
+    }
+  };
+}
+var nullListeners = {
+  notify() {
+  },
+  get: () => []
+};
+function createSubscription(store, parentSub) {
+  let unsubscribe;
+  let listeners = nullListeners;
+  let subscriptionsAmount = 0;
+  let selfSubscribed = false;
+  function addNestedSub(listener) {
+    trySubscribe();
+    const cleanupListener = listeners.subscribe(listener);
+    let removed = false;
+    return () => {
+      if (!removed) {
+        removed = true;
+        cleanupListener();
+        tryUnsubscribe();
+      }
+    };
+  }
+  function notifyNestedSubs() {
+    listeners.notify();
+  }
+  function handleChangeWrapper() {
+    if (subscription.onStateChange) {
+      subscription.onStateChange();
+    }
+  }
+  function isSubscribed() {
+    return selfSubscribed;
+  }
+  function trySubscribe() {
+    subscriptionsAmount++;
+    if (!unsubscribe) {
+      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);
+      listeners = createListenerCollection();
+    }
+  }
+  function tryUnsubscribe() {
+    subscriptionsAmount--;
+    if (unsubscribe && subscriptionsAmount === 0) {
+      unsubscribe();
+      unsubscribe = void 0;
+      listeners.clear();
+      listeners = nullListeners;
+    }
+  }
+  function trySubscribeSelf() {
+    if (!selfSubscribed) {
+      selfSubscribed = true;
+      trySubscribe();
+    }
+  }
+  function tryUnsubscribeSelf() {
+    if (selfSubscribed) {
+      selfSubscribed = false;
+      tryUnsubscribe();
+    }
+  }
+  const subscription = {
+    addNestedSub,
+    notifyNestedSubs,
+    handleChangeWrapper,
+    isSubscribed,
+    trySubscribe: trySubscribeSelf,
+    tryUnsubscribe: tryUnsubscribeSelf,
+    getListeners: () => listeners
+  };
+  return subscription;
+}
+
+// src/utils/useIsomorphicLayoutEffect.ts
+var canUseDOM = () => !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
+var isDOM = /* @__PURE__ */ canUseDOM();
+var isRunningInReactNative = () => typeof navigator !== "undefined" && navigator.product === "ReactNative";
+var isReactNative = /* @__PURE__ */ isRunningInReactNative();
+var getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? React.useLayoutEffect : React.useEffect;
+var useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();
+
+// src/utils/shallowEqual.ts
+function is(x, y) {
+  if (x === y) {
+    return x !== 0 || y !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+}
+function shallowEqual(objA, objB) {
+  if (is(objA, objB)) return true;
+  if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
+    return false;
+  }
+  const keysA = Object.keys(objA);
+  const keysB = Object.keys(objB);
+  if (keysA.length !== keysB.length) return false;
+  for (let i = 0; i < keysA.length; i++) {
+    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+      return false;
+    }
+  }
+  return true;
+}
+
+// src/utils/hoistStatics.ts
+var REACT_STATICS = {
+  childContextTypes: true,
+  contextType: true,
+  contextTypes: true,
+  defaultProps: true,
+  displayName: true,
+  getDefaultProps: true,
+  getDerivedStateFromError: true,
+  getDerivedStateFromProps: true,
+  mixins: true,
+  propTypes: true,
+  type: true
+};
+var KNOWN_STATICS = {
+  name: true,
+  length: true,
+  prototype: true,
+  caller: true,
+  callee: true,
+  arguments: true,
+  arity: true
+};
+var FORWARD_REF_STATICS = {
+  $$typeof: true,
+  render: true,
+  defaultProps: true,
+  displayName: true,
+  propTypes: true
+};
+var MEMO_STATICS = {
+  $$typeof: true,
+  compare: true,
+  defaultProps: true,
+  displayName: true,
+  propTypes: true,
+  type: true
+};
+var TYPE_STATICS = {
+  [ForwardRef]: FORWARD_REF_STATICS,
+  [Memo]: MEMO_STATICS
+};
+function getStatics(component) {
+  if (isMemo(component)) {
+    return MEMO_STATICS;
+  }
+  return TYPE_STATICS[component["$$typeof"]] || REACT_STATICS;
+}
+var defineProperty = Object.defineProperty;
+var getOwnPropertyNames = Object.getOwnPropertyNames;
+var getOwnPropertySymbols = Object.getOwnPropertySymbols;
+var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+var getPrototypeOf = Object.getPrototypeOf;
+var objectPrototype = Object.prototype;
+function hoistNonReactStatics(targetComponent, sourceComponent) {
+  if (typeof sourceComponent !== "string") {
+    if (objectPrototype) {
+      const inheritedComponent = getPrototypeOf(sourceComponent);
+      if (inheritedComponent && inheritedComponent !== objectPrototype) {
+        hoistNonReactStatics(targetComponent, inheritedComponent);
+      }
+    }
+    let keys = getOwnPropertyNames(sourceComponent);
+    if (getOwnPropertySymbols) {
+      keys = keys.concat(getOwnPropertySymbols(sourceComponent));
+    }
+    const targetStatics = getStatics(targetComponent);
+    const sourceStatics = getStatics(sourceComponent);
+    for (let i = 0; i < keys.length; ++i) {
+      const key = keys[i];
+      if (!KNOWN_STATICS[key] && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {
+        const descriptor = getOwnPropertyDescriptor(sourceComponent, key);
+        try {
+          defineProperty(targetComponent, key, descriptor);
+        } catch (e) {
+        }
+      }
+    }
+  }
+  return targetComponent;
+}
+
+// src/components/Context.ts
+var ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`);
+var gT = typeof globalThis !== "undefined" ? globalThis : (
+  /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */
+  {}
+);
+function getContext() {
+  var _a;
+  if (!React.createContext) return {};
+  const contextMap = (_a = gT[ContextKey]) != null ? _a : gT[ContextKey] = /* @__PURE__ */ new Map();
+  let realContext = contextMap.get(React.createContext);
+  if (!realContext) {
+    realContext = React.createContext(
+      null
+    );
+    if (process.env.NODE_ENV !== "production") {
+      realContext.displayName = "ReactRedux";
+    }
+    contextMap.set(React.createContext, realContext);
+  }
+  return realContext;
+}
+var ReactReduxContext = /* @__PURE__ */ getContext();
+
+// src/components/connect.tsx
+var NO_SUBSCRIPTION_ARRAY = [null, null];
+var stringifyComponent = (Comp) => {
+  try {
+    return JSON.stringify(Comp);
+  } catch (err) {
+    return String(Comp);
+  }
+};
+function useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {
+  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);
+}
+function captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs) {
+  lastWrapperProps.current = wrapperProps;
+  renderIsScheduled.current = false;
+  if (childPropsFromStoreUpdate.current) {
+    childPropsFromStoreUpdate.current = null;
+    notifyNestedSubs();
+  }
+}
+function subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, additionalSubscribeListener) {
+  if (!shouldHandleStateChanges) return () => {
+  };
+  let didUnsubscribe = false;
+  let lastThrownError = null;
+  const checkForUpdates = () => {
+    if (didUnsubscribe || !isMounted.current) {
+      return;
+    }
+    const latestStoreState = store.getState();
+    let newChildProps, error;
+    try {
+      newChildProps = childPropsSelector(
+        latestStoreState,
+        lastWrapperProps.current
+      );
+    } catch (e) {
+      error = e;
+      lastThrownError = e;
+    }
+    if (!error) {
+      lastThrownError = null;
+    }
+    if (newChildProps === lastChildProps.current) {
+      if (!renderIsScheduled.current) {
+        notifyNestedSubs();
+      }
+    } else {
+      lastChildProps.current = newChildProps;
+      childPropsFromStoreUpdate.current = newChildProps;
+      renderIsScheduled.current = true;
+      additionalSubscribeListener();
+    }
+  };
+  subscription.onStateChange = checkForUpdates;
+  subscription.trySubscribe();
+  checkForUpdates();
+  const unsubscribeWrapper = () => {
+    didUnsubscribe = true;
+    subscription.tryUnsubscribe();
+    subscription.onStateChange = null;
+    if (lastThrownError) {
+      throw lastThrownError;
+    }
+  };
+  return unsubscribeWrapper;
+}
+function strictEqual(a, b) {
+  return a === b;
+}
+var hasWarnedAboutDeprecatedPureOption = false;
+function connect(mapStateToProps, mapDispatchToProps, mergeProps, {
+  // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.
+  // @ts-ignore
+  pure,
+  areStatesEqual = strictEqual,
+  areOwnPropsEqual = shallowEqual,
+  areStatePropsEqual = shallowEqual,
+  areMergedPropsEqual = shallowEqual,
+  // use React's forwardRef to expose a ref of the wrapped component
+  forwardRef = false,
+  // the context consumer to use
+  context = ReactReduxContext
+} = {}) {
+  if (process.env.NODE_ENV !== "production") {
+    if (pure !== void 0 && !hasWarnedAboutDeprecatedPureOption) {
+      hasWarnedAboutDeprecatedPureOption = true;
+      warning(
+        'The `pure` option has been removed. `connect` is now always a "pure/memoized" component'
+      );
+    }
+  }
+  const Context = context;
+  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);
+  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);
+  const initMergeProps = mergePropsFactory(mergeProps);
+  const shouldHandleStateChanges = Boolean(mapStateToProps);
+  const wrapWithConnect = (WrappedComponent) => {
+    if (process.env.NODE_ENV !== "production") {
+      const isValid = /* @__PURE__ */ isValidElementType(WrappedComponent);
+      if (!isValid)
+        throw new Error(
+          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(
+            WrappedComponent
+          )}`
+        );
+    }
+    const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || "Component";
+    const displayName = `Connect(${wrappedComponentName})`;
+    const selectorFactoryOptions = {
+      shouldHandleStateChanges,
+      displayName,
+      wrappedComponentName,
+      WrappedComponent,
+      // @ts-ignore
+      initMapStateToProps,
+      initMapDispatchToProps,
+      initMergeProps,
+      areStatesEqual,
+      areStatePropsEqual,
+      areOwnPropsEqual,
+      areMergedPropsEqual
+    };
+    function ConnectFunction(props) {
+      const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {
+        const _a = props, { reactReduxForwardedRef: reactReduxForwardedRef2 } = _a, wrapperProps2 = __objRest(_a, ["reactReduxForwardedRef"]);
+        return [props.context, reactReduxForwardedRef2, wrapperProps2];
+      }, [props]);
+      const ContextToUse = React.useMemo(() => {
+        let ResultContext = Context;
+        if (propsContext == null ? void 0 : propsContext.Consumer) {
+          if (process.env.NODE_ENV !== "production") {
+            const isValid = /* @__PURE__ */ isContextConsumer(
+              // @ts-ignore
+              /* @__PURE__ */ React.createElement(propsContext.Consumer, null)
+            );
+            if (!isValid) {
+              throw new Error(
+                "You must pass a valid React context consumer as `props.context`"
+              );
+            }
+            ResultContext = propsContext;
+          }
+        }
+        return ResultContext;
+      }, [propsContext, Context]);
+      const contextValue = React.useContext(ContextToUse);
+      const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);
+      const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);
+      if (process.env.NODE_ENV !== "production" && !didStoreComeFromProps && !didStoreComeFromContext) {
+        throw new Error(
+          `Could not find "store" in the context of "${displayName}". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to ${displayName} in connect options.`
+        );
+      }
+      const store = didStoreComeFromProps ? props.store : contextValue.store;
+      const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;
+      const childPropsSelector = React.useMemo(() => {
+        return finalPropsSelectorFactory(store.dispatch, selectorFactoryOptions);
+      }, [store]);
+      const [subscription, notifyNestedSubs] = React.useMemo(() => {
+        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY;
+        const subscription2 = createSubscription(
+          store,
+          didStoreComeFromProps ? void 0 : contextValue.subscription
+        );
+        const notifyNestedSubs2 = subscription2.notifyNestedSubs.bind(subscription2);
+        return [subscription2, notifyNestedSubs2];
+      }, [store, didStoreComeFromProps, contextValue]);
+      const overriddenContextValue = React.useMemo(() => {
+        if (didStoreComeFromProps) {
+          return contextValue;
+        }
+        return __spreadProps(__spreadValues({}, contextValue), {
+          subscription
+        });
+      }, [didStoreComeFromProps, contextValue, subscription]);
+      const lastChildProps = React.useRef(void 0);
+      const lastWrapperProps = React.useRef(wrapperProps);
+      const childPropsFromStoreUpdate = React.useRef(void 0);
+      const renderIsScheduled = React.useRef(false);
+      const isMounted = React.useRef(false);
+      const latestSubscriptionCallbackError = React.useRef(
+        void 0
+      );
+      useIsomorphicLayoutEffect(() => {
+        isMounted.current = true;
+        return () => {
+          isMounted.current = false;
+        };
+      }, []);
+      const actualChildPropsSelector = React.useMemo(() => {
+        const selector = () => {
+          if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {
+            return childPropsFromStoreUpdate.current;
+          }
+          return childPropsSelector(store.getState(), wrapperProps);
+        };
+        return selector;
+      }, [store, wrapperProps]);
+      const subscribeForReact = React.useMemo(() => {
+        const subscribe = (reactListener) => {
+          if (!subscription) {
+            return () => {
+            };
+          }
+          return subscribeUpdates(
+            shouldHandleStateChanges,
+            store,
+            subscription,
+            // @ts-ignore
+            childPropsSelector,
+            lastWrapperProps,
+            lastChildProps,
+            renderIsScheduled,
+            isMounted,
+            childPropsFromStoreUpdate,
+            notifyNestedSubs,
+            reactListener
+          );
+        };
+        return subscribe;
+      }, [subscription]);
+      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [
+        lastWrapperProps,
+        lastChildProps,
+        renderIsScheduled,
+        wrapperProps,
+        childPropsFromStoreUpdate,
+        notifyNestedSubs
+      ]);
+      let actualChildProps;
+      try {
+        actualChildProps = React.useSyncExternalStore(
+          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing
+          subscribeForReact,
+          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,
+          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.
+          actualChildPropsSelector,
+          getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector
+        );
+      } catch (err) {
+        if (latestSubscriptionCallbackError.current) {
+          ;
+          err.message += `
+The error may be correlated with this previous error:
+${latestSubscriptionCallbackError.current.stack}
+
+`;
+        }
+        throw err;
+      }
+      useIsomorphicLayoutEffect(() => {
+        latestSubscriptionCallbackError.current = void 0;
+        childPropsFromStoreUpdate.current = void 0;
+        lastChildProps.current = actualChildProps;
+      });
+      const renderedWrappedComponent = React.useMemo(() => {
+        return (
+          // @ts-ignore
+          /* @__PURE__ */ React.createElement(
+            WrappedComponent,
+            __spreadProps(__spreadValues({}, actualChildProps), {
+              ref: reactReduxForwardedRef
+            })
+          )
+        );
+      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]);
+      const renderedChild = React.useMemo(() => {
+        if (shouldHandleStateChanges) {
+          return /* @__PURE__ */ React.createElement(ContextToUse.Provider, { value: overriddenContextValue }, renderedWrappedComponent);
+        }
+        return renderedWrappedComponent;
+      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);
+      return renderedChild;
+    }
+    const _Connect = React.memo(ConnectFunction);
+    const Connect = _Connect;
+    Connect.WrappedComponent = WrappedComponent;
+    Connect.displayName = ConnectFunction.displayName = displayName;
+    if (forwardRef) {
+      const _forwarded = React.forwardRef(
+        function forwardConnectRef(props, ref) {
+          return /* @__PURE__ */ React.createElement(Connect, __spreadProps(__spreadValues({}, props), { reactReduxForwardedRef: ref }));
+        }
+      );
+      const forwarded = _forwarded;
+      forwarded.displayName = displayName;
+      forwarded.WrappedComponent = WrappedComponent;
+      return /* @__PURE__ */ hoistNonReactStatics(forwarded, WrappedComponent);
+    }
+    return /* @__PURE__ */ hoistNonReactStatics(Connect, WrappedComponent);
+  };
+  return wrapWithConnect;
+}
+var connect_default = connect;
+
+// src/components/Provider.tsx
+function Provider(providerProps) {
+  const { children, context, serverState, store } = providerProps;
+  const contextValue = React.useMemo(() => {
+    const subscription = createSubscription(store);
+    const baseContextValue = {
+      store,
+      subscription,
+      getServerState: serverState ? () => serverState : void 0
+    };
+    if (process.env.NODE_ENV === "production") {
+      return baseContextValue;
+    } else {
+      const { identityFunctionCheck = "once", stabilityCheck = "once" } = providerProps;
+      return /* @__PURE__ */ Object.assign(baseContextValue, {
+        stabilityCheck,
+        identityFunctionCheck
+      });
+    }
+  }, [store, serverState]);
+  const previousState = React.useMemo(() => store.getState(), [store]);
+  useIsomorphicLayoutEffect(() => {
+    const { subscription } = contextValue;
+    subscription.onStateChange = subscription.notifyNestedSubs;
+    subscription.trySubscribe();
+    if (previousState !== store.getState()) {
+      subscription.notifyNestedSubs();
+    }
+    return () => {
+      subscription.tryUnsubscribe();
+      subscription.onStateChange = void 0;
+    };
+  }, [contextValue, previousState]);
+  const Context = context || ReactReduxContext;
+  return /* @__PURE__ */ React.createElement(Context.Provider, { value: contextValue }, children);
+}
+var Provider_default = Provider;
+
+// src/hooks/useReduxContext.ts
+function createReduxContextHook(context = ReactReduxContext) {
+  return function useReduxContext2() {
+    const contextValue = React.useContext(context);
+    if (process.env.NODE_ENV !== "production" && !contextValue) {
+      throw new Error(
+        "could not find react-redux context value; please ensure the component is wrapped in a <Provider>"
+      );
+    }
+    return contextValue;
+  };
+}
+var useReduxContext = /* @__PURE__ */ createReduxContextHook();
+
+// src/hooks/useStore.ts
+function createStoreHook(context = ReactReduxContext) {
+  const useReduxContext2 = context === ReactReduxContext ? useReduxContext : (
+    // @ts-ignore
+    createReduxContextHook(context)
+  );
+  const useStore2 = () => {
+    const { store } = useReduxContext2();
+    return store;
+  };
+  Object.assign(useStore2, {
+    withTypes: () => useStore2
+  });
+  return useStore2;
+}
+var useStore = /* @__PURE__ */ createStoreHook();
+
+// src/hooks/useDispatch.ts
+function createDispatchHook(context = ReactReduxContext) {
+  const useStore2 = context === ReactReduxContext ? useStore : createStoreHook(context);
+  const useDispatch2 = () => {
+    const store = useStore2();
+    return store.dispatch;
+  };
+  Object.assign(useDispatch2, {
+    withTypes: () => useDispatch2
+  });
+  return useDispatch2;
+}
+var useDispatch = /* @__PURE__ */ createDispatchHook();
+
+// src/hooks/useSelector.ts
+import { useSyncExternalStoreWithSelector } from "use-sync-external-store/with-selector.js";
+var refEquality = (a, b) => a === b;
+function createSelectorHook(context = ReactReduxContext) {
+  const useReduxContext2 = context === ReactReduxContext ? useReduxContext : createReduxContextHook(context);
+  const useSelector2 = (selector, equalityFnOrOptions = {}) => {
+    const { equalityFn = refEquality } = typeof equalityFnOrOptions === "function" ? { equalityFn: equalityFnOrOptions } : equalityFnOrOptions;
+    if (process.env.NODE_ENV !== "production") {
+      if (!selector) {
+        throw new Error(`You must pass a selector to useSelector`);
+      }
+      if (typeof selector !== "function") {
+        throw new Error(`You must pass a function as a selector to useSelector`);
+      }
+      if (typeof equalityFn !== "function") {
+        throw new Error(
+          `You must pass a function as an equality function to useSelector`
+        );
+      }
+    }
+    const reduxContext = useReduxContext2();
+    const { store, subscription, getServerState } = reduxContext;
+    const firstRun = React.useRef(true);
+    const wrappedSelector = React.useCallback(
+      {
+        [selector.name](state) {
+          const selected = selector(state);
+          if (process.env.NODE_ENV !== "production") {
+            const { devModeChecks = {} } = typeof equalityFnOrOptions === "function" ? {} : equalityFnOrOptions;
+            const { identityFunctionCheck, stabilityCheck } = reduxContext;
+            const {
+              identityFunctionCheck: finalIdentityFunctionCheck,
+              stabilityCheck: finalStabilityCheck
+            } = __spreadValues({
+              stabilityCheck,
+              identityFunctionCheck
+            }, devModeChecks);
+            if (finalStabilityCheck === "always" || finalStabilityCheck === "once" && firstRun.current) {
+              const toCompare = selector(state);
+              if (!equalityFn(selected, toCompare)) {
+                let stack = void 0;
+                try {
+                  throw new Error();
+                } catch (e) {
+                  ;
+                  ({ stack } = e);
+                }
+                console.warn(
+                  "Selector " + (selector.name || "unknown") + " returned a different result when called with the same parameters. This can lead to unnecessary rerenders.\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization",
+                  {
+                    state,
+                    selected,
+                    selected2: toCompare,
+                    stack
+                  }
+                );
+              }
+            }
+            if (finalIdentityFunctionCheck === "always" || finalIdentityFunctionCheck === "once" && firstRun.current) {
+              if (selected === state) {
+                let stack = void 0;
+                try {
+                  throw new Error();
+                } catch (e) {
+                  ;
+                  ({ stack } = e);
+                }
+                console.warn(
+                  "Selector " + (selector.name || "unknown") + " returned the root state when called. This can lead to unnecessary rerenders.\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.",
+                  { stack }
+                );
+              }
+            }
+            if (firstRun.current) firstRun.current = false;
+          }
+          return selected;
+        }
+      }[selector.name],
+      [selector]
+    );
+    const selectedState = useSyncExternalStoreWithSelector(
+      subscription.addNestedSub,
+      store.getState,
+      getServerState || store.getState,
+      wrappedSelector,
+      equalityFn
+    );
+    React.useDebugValue(selectedState);
+    return selectedState;
+  };
+  Object.assign(useSelector2, {
+    withTypes: () => useSelector2
+  });
+  return useSelector2;
+}
+var useSelector = /* @__PURE__ */ createSelectorHook();
+
+// src/exports.ts
+var batch = defaultNoopBatch;
+export {
+  Provider_default as Provider,
+  ReactReduxContext,
+  batch,
+  connect_default as connect,
+  createDispatchHook,
+  createSelectorHook,
+  createStoreHook,
+  shallowEqual,
+  useDispatch,
+  useSelector,
+  useStore
+};
+//# sourceMappingURL=react-redux.legacy-esm.js.map
Index: node_modules/react-redux/dist/react-redux.legacy-esm.js.map
===================================================================
--- node_modules/react-redux/dist/react-redux.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/react-redux.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/utils/react.ts","../src/utils/react-is.ts","../src/utils/warning.ts","../src/connect/verifySubselectors.ts","../src/connect/selectorFactory.ts","../src/utils/bindActionCreators.ts","../src/utils/isPlainObject.ts","../src/utils/verifyPlainObject.ts","../src/connect/wrapMapToProps.ts","../src/connect/invalidArgFactory.ts","../src/connect/mapDispatchToProps.ts","../src/connect/mapStateToProps.ts","../src/connect/mergeProps.ts","../src/utils/batch.ts","../src/utils/Subscription.ts","../src/utils/useIsomorphicLayoutEffect.ts","../src/utils/shallowEqual.ts","../src/utils/hoistStatics.ts","../src/components/Context.ts","../src/components/connect.tsx","../src/components/Provider.tsx","../src/hooks/useReduxContext.ts","../src/hooks/useStore.ts","../src/hooks/useDispatch.ts","../src/hooks/useSelector.ts","../src/exports.ts"],"sourcesContent":["import * as React from 'react'\n\nexport { React }\n","import type { ElementType, MemoExoticComponent, ReactElement } from 'react'\nimport { React } from './react'\n\n// Directly ported from:\n// https://unpkg.com/browse/react-is@19.0.0/cjs/react-is.production.js\n// It's very possible this could change in the future, but given that\n// we only use these in `connect`, this is a low priority.\n\nexport const IS_REACT_19 = /* @__PURE__ */ React.version.startsWith('19')\n\nconst REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(\n  IS_REACT_19 ? 'react.transitional.element' : 'react.element',\n)\nconst REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for('react.portal')\nconst REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for('react.fragment')\nconst REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for('react.strict_mode')\nconst REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for('react.profiler')\nconst REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for('react.consumer')\nconst REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for('react.context')\nconst REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for('react.forward_ref')\nconst REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for('react.suspense')\nconst REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(\n  'react.suspense_list',\n)\nconst REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for('react.memo')\nconst REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for('react.lazy')\nconst REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for('react.offscreen')\nconst REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(\n  'react.client.reference',\n)\n\nexport const ForwardRef = REACT_FORWARD_REF_TYPE\nexport const Memo = REACT_MEMO_TYPE\n\nexport function isValidElementType(type: any): type is ElementType {\n  return typeof type === 'string' ||\n    typeof type === 'function' ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    type === REACT_OFFSCREEN_TYPE ||\n    (typeof type === 'object' &&\n      type !== null &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        type.getModuleId !== undefined))\n    ? !0\n    : !1\n}\n\nfunction typeOf(object: any): symbol | undefined {\n  if (typeof object === 'object' && object !== null) {\n    const { $$typeof } = object\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n            return object\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object\n              case REACT_CONSUMER_TYPE:\n                return object\n              default:\n                return $$typeof\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof\n    }\n  }\n}\n\nexport function isContextConsumer(object: any): object is ReactElement {\n  return IS_REACT_19\n    ? typeOf(object) === REACT_CONSUMER_TYPE\n    : typeOf(object) === REACT_CONTEXT_TYPE\n}\n\nexport function isMemo(object: any): object is MemoExoticComponent<any> {\n  return typeOf(object) === REACT_MEMO_TYPE\n}\n","/**\r\n * Prints a warning in the console if it exists.\r\n *\r\n * @param {String} message The warning message.\r\n * @returns {void}\r\n */\r\nexport default function warning(message: string) {\r\n  /* eslint-disable no-console */\r\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\r\n    console.error(message)\r\n  }\r\n  /* eslint-enable no-console */\r\n  try {\r\n    // This error was thrown as a convenience so that if you enable\r\n    // \"break on all exceptions\" in your console,\r\n    // it would pause the execution at this line.\r\n    throw new Error(message)\r\n    /* eslint-disable no-empty */\r\n  } catch (e) {}\r\n  /* eslint-enable no-empty */\r\n}\r\n","import warning from '../utils/warning'\n\nfunction verify(selector: unknown, methodName: string): void {\n  if (!selector) {\n    throw new Error(`Unexpected value for ${methodName} in connect.`)\n  } else if (\n    methodName === 'mapStateToProps' ||\n    methodName === 'mapDispatchToProps'\n  ) {\n    if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) {\n      warning(\n        `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`,\n      )\n    }\n  }\n}\n\nexport default function verifySubselectors(\n  mapStateToProps: unknown,\n  mapDispatchToProps: unknown,\n  mergeProps: unknown,\n): void {\n  verify(mapStateToProps, 'mapStateToProps')\n  verify(mapDispatchToProps, 'mapDispatchToProps')\n  verify(mergeProps, 'mergeProps')\n}\n","import type { Dispatch, Action } from 'redux'\nimport type { ComponentType } from 'react'\nimport verifySubselectors from './verifySubselectors'\nimport type { EqualityFn, ExtendedEqualityFn } from '../types'\n\nexport type SelectorFactory<S, TProps, TOwnProps, TFactoryOptions> = (\n  dispatch: Dispatch<Action<string>>,\n  factoryOptions: TFactoryOptions,\n) => Selector<S, TProps, TOwnProps>\n\nexport type Selector<S, TProps, TOwnProps = null> = TOwnProps extends\n  | null\n  | undefined\n  ? (state: S) => TProps\n  : (state: S, ownProps: TOwnProps) => TProps\n\nexport type MapStateToProps<TStateProps, TOwnProps, State> = (\n  state: State,\n  ownProps: TOwnProps,\n) => TStateProps\n\nexport type MapStateToPropsFactory<TStateProps, TOwnProps, State> = (\n  initialState: State,\n  ownProps: TOwnProps,\n) => MapStateToProps<TStateProps, TOwnProps, State>\n\nexport type MapStateToPropsParam<TStateProps, TOwnProps, State> =\n  | MapStateToPropsFactory<TStateProps, TOwnProps, State>\n  | MapStateToProps<TStateProps, TOwnProps, State>\n  | null\n  | undefined\n\nexport type MapDispatchToPropsFunction<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => TDispatchProps\n\nexport type MapDispatchToProps<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n  | TDispatchProps\n\nexport type MapDispatchToPropsFactory<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsParam<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToProps<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsNonObject<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> = (\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n) => TMergedProps\n\ninterface PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly areStatesEqual: ExtendedEqualityFn<State, TOwnProps>\n  readonly areStatePropsEqual: EqualityFn<TStateProps>\n  readonly areOwnPropsEqual: EqualityFn<TOwnProps>\n}\n\nfunction pureFinalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  mapStateToProps: WrappedMapStateToProps<TStateProps, TOwnProps, State>,\n  mapDispatchToProps: WrappedMapDispatchToProps<TDispatchProps, TOwnProps>,\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  dispatch: Dispatch<Action<string>>,\n  {\n    areStatesEqual,\n    areOwnPropsEqual,\n    areStatePropsEqual,\n  }: PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State>,\n) {\n  let hasRunAtLeastOnce = false\n  let state: State\n  let ownProps: TOwnProps\n  let stateProps: TStateProps\n  let dispatchProps: TDispatchProps\n  let mergedProps: TMergedProps\n\n  function handleFirstCall(firstState: State, firstOwnProps: TOwnProps) {\n    state = firstState\n    ownProps = firstOwnProps\n    stateProps = mapStateToProps(state, ownProps)\n    dispatchProps = mapDispatchToProps(dispatch, ownProps)\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    hasRunAtLeastOnce = true\n    return mergedProps\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps)\n      stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewState() {\n    const nextStateProps = mapStateToProps(state, ownProps)\n    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps)\n    stateProps = nextStateProps\n\n    if (statePropsChanged)\n      mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n    return mergedProps\n  }\n\n  function handleSubsequentCalls(nextState: State, nextOwnProps: TOwnProps) {\n    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps)\n    const stateChanged = !areStatesEqual(\n      nextState,\n      state,\n      nextOwnProps,\n      ownProps,\n    )\n    state = nextState\n    ownProps = nextOwnProps\n\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState()\n    if (propsChanged) return handleNewProps()\n    if (stateChanged) return handleNewState()\n    return mergedProps\n  }\n\n  return function pureFinalPropsSelector(\n    nextState: State,\n    nextOwnProps: TOwnProps,\n  ) {\n    return hasRunAtLeastOnce\n      ? handleSubsequentCalls(nextState, nextOwnProps)\n      : handleFirstCall(nextState, nextOwnProps)\n  }\n}\n\ninterface WrappedMapStateToProps<TStateProps, TOwnProps, State> {\n  (state: State, ownProps: TOwnProps): TStateProps\n  readonly dependsOnOwnProps: boolean\n}\n\ninterface WrappedMapDispatchToProps<TDispatchProps, TOwnProps> {\n  (dispatch: Dispatch<Action<string>>, ownProps: TOwnProps): TDispatchProps\n  readonly dependsOnOwnProps: boolean\n}\n\nexport interface InitOptions<TStateProps, TOwnProps, TMergedProps, State>\n  extends PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly shouldHandleStateChanges: boolean\n  readonly displayName: string\n  readonly wrappedComponentName: string\n  readonly WrappedComponent: ComponentType<TOwnProps>\n  readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n}\n\nexport interface SelectorFactoryOptions<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n> extends InitOptions<TStateProps, TOwnProps, TMergedProps, State> {\n  readonly initMapStateToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapStateToProps<TStateProps, TOwnProps, State>\n  readonly initMapDispatchToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapDispatchToProps<TDispatchProps, TOwnProps>\n  readonly initMergeProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>\n}\n\n// TODO: Add more comments\n\n// The selector returned by selectorFactory will memoize its results,\n// allowing connect's shouldComponentUpdate to return false if final\n// props have not changed.\n\nexport default function finalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  dispatch: Dispatch<Action<string>>,\n  {\n    initMapStateToProps,\n    initMapDispatchToProps,\n    initMergeProps,\n    ...options\n  }: SelectorFactoryOptions<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >,\n) {\n  const mapStateToProps = initMapStateToProps(dispatch, options)\n  const mapDispatchToProps = initMapDispatchToProps(dispatch, options)\n  const mergeProps = initMergeProps(dispatch, options)\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps)\n  }\n\n  return pureFinalPropsSelectorFactory<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options)\n}\n","import type { ActionCreatorsMapObject, Dispatch } from 'redux'\n\nexport default function bindActionCreators(\n  actionCreators: ActionCreatorsMapObject,\n  dispatch: Dispatch,\n): ActionCreatorsMapObject {\n  const boundActionCreators: ActionCreatorsMapObject = {}\n\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key]\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args))\n    }\n  }\n  return boundActionCreators\n}\n","/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: unknown) {\n  if (typeof obj !== 'object' || obj === null) return false\n\n  const proto = Object.getPrototypeOf(obj)\n  if (proto === null) return true\n\n  let baseProto = proto\n  while (Object.getPrototypeOf(baseProto) !== null) {\n    baseProto = Object.getPrototypeOf(baseProto)\n  }\n\n  return proto === baseProto\n}\n","import isPlainObject from './isPlainObject'\nimport warning from './warning'\n\nexport default function verifyPlainObject(\n  value: unknown,\n  displayName: string,\n  methodName: string,\n) {\n  if (!isPlainObject(value)) {\n    warning(\n      `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`,\n    )\n  }\n}\n","import type { ActionCreatorsMapObject, Dispatch, ActionCreator } from 'redux'\n\nimport type { FixTypeLater } from '../types'\nimport verifyPlainObject from '../utils/verifyPlainObject'\n\ntype AnyState = { [key: string]: any }\ntype StateOrDispatch<S extends AnyState = AnyState> = S | Dispatch\n\ntype AnyProps = { [key: string]: any }\n\nexport type MapToProps<P extends AnyProps = AnyProps> = {\n  // eslint-disable-next-line no-unused-vars\n  (stateOrDispatch: StateOrDispatch, ownProps?: P): FixTypeLater\n  dependsOnOwnProps?: boolean\n}\n\nexport function wrapMapToPropsConstant(\n  // * Note:\n  //  It seems that the dispatch argument\n  //  could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing)\n  //  and a state object in some others (ex: whenMapStateToPropsIsMissing)\n  // eslint-disable-next-line no-unused-vars\n  getConstant: (dispatch: Dispatch) =>\n    | {\n        dispatch?: Dispatch\n        dependsOnOwnProps?: boolean\n      }\n    | ActionCreatorsMapObject\n    | ActionCreator<any>,\n) {\n  return function initConstantSelector(dispatch: Dispatch) {\n    const constant = getConstant(dispatch)\n\n    function constantSelector() {\n      return constant\n    }\n    constantSelector.dependsOnOwnProps = false\n    return constantSelector\n  }\n}\n\n// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps?\nfunction getDependsOnOwnProps(mapToProps: MapToProps) {\n  return mapToProps.dependsOnOwnProps\n    ? Boolean(mapToProps.dependsOnOwnProps)\n    : mapToProps.length !== 1\n}\n\n// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\nexport function wrapMapToPropsFunc<P extends AnyProps = AnyProps>(\n  mapToProps: MapToProps,\n  methodName: string,\n) {\n  return function initProxySelector(\n    dispatch: Dispatch,\n    { displayName }: { displayName: string },\n  ) {\n    const proxy = function mapToPropsProxy(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      return proxy.dependsOnOwnProps\n        ? proxy.mapToProps(stateOrDispatch, ownProps)\n        : proxy.mapToProps(stateOrDispatch, undefined)\n    }\n\n    // allow detectFactoryAndVerify to get ownProps\n    proxy.dependsOnOwnProps = true\n\n    proxy.mapToProps = function detectFactoryAndVerify(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      proxy.mapToProps = mapToProps\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps)\n      let props = proxy(stateOrDispatch, ownProps)\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props)\n        props = proxy(stateOrDispatch, ownProps)\n      }\n\n      if (process.env.NODE_ENV !== 'production')\n        verifyPlainObject(props, displayName, methodName)\n\n      return props\n    }\n\n    return proxy\n  }\n}\n","import type { Action, Dispatch } from 'redux'\n\nexport function createInvalidArgFactory(arg: unknown, name: string) {\n  return (\n    dispatch: Dispatch<Action<string>>,\n    options: { readonly wrappedComponentName: string },\n  ) => {\n    throw new Error(\n      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${\n        options.wrappedComponentName\n      }.`,\n    )\n  }\n}\n","import type { Action, Dispatch } from 'redux'\nimport bindActionCreators from '../utils/bindActionCreators'\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapDispatchToPropsParam } from './selectorFactory'\n\nexport function mapDispatchToPropsFactory<TDispatchProps, TOwnProps>(\n  mapDispatchToProps:\n    | MapDispatchToPropsParam<TDispatchProps, TOwnProps>\n    | undefined,\n) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object'\n    ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) =>\n        // @ts-ignore\n        bindActionCreators(mapDispatchToProps, dispatch),\n      )\n    : !mapDispatchToProps\n      ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) => ({\n          dispatch,\n        }))\n      : typeof mapDispatchToProps === 'function'\n        ? // @ts-ignore\n          wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps')\n        : createInvalidArgFactory(mapDispatchToProps, 'mapDispatchToProps')\n}\n","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapStateToPropsParam } from './selectorFactory'\n\nexport function mapStateToPropsFactory<TStateProps, TOwnProps, State>(\n  mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n) {\n  return !mapStateToProps\n    ? wrapMapToPropsConstant(() => ({}))\n    : typeof mapStateToProps === 'function'\n      ? // @ts-ignore\n        wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps')\n      : createInvalidArgFactory(mapStateToProps, 'mapStateToProps')\n}\n","import type { Action, Dispatch } from 'redux'\nimport verifyPlainObject from '../utils/verifyPlainObject'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MergeProps } from './selectorFactory'\nimport type { EqualityFn } from '../types'\n\nfunction defaultMergeProps<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n): TMergedProps {\n  // @ts-ignore\n  return { ...ownProps, ...stateProps, ...dispatchProps }\n}\n\nfunction wrapMergePropsFunc<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n): (\n  dispatch: Dispatch<Action<string>>,\n  options: {\n    readonly displayName: string\n    readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n  },\n) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> {\n  return function initMergePropsProxy(\n    dispatch,\n    { displayName, areMergedPropsEqual },\n  ) {\n    let hasRunOnce = false\n    let mergedProps: TMergedProps\n\n    return function mergePropsProxy(\n      stateProps: TStateProps,\n      dispatchProps: TDispatchProps,\n      ownProps: TOwnProps,\n    ) {\n      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n      if (hasRunOnce) {\n        if (!areMergedPropsEqual(nextMergedProps, mergedProps))\n          mergedProps = nextMergedProps\n      } else {\n        hasRunOnce = true\n        mergedProps = nextMergedProps\n\n        if (process.env.NODE_ENV !== 'production')\n          verifyPlainObject(mergedProps, displayName, 'mergeProps')\n      }\n\n      return mergedProps\n    }\n  }\n}\n\nexport function mergePropsFactory<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n) {\n  return !mergeProps\n    ? () => defaultMergeProps\n    : typeof mergeProps === 'function'\n      ? wrapMergePropsFunc(mergeProps)\n      : createInvalidArgFactory(mergeProps, 'mergeProps')\n}\n","// Default to a dummy \"batch\" implementation that just runs the callback\r\nexport function defaultNoopBatch(callback: () => void) {\r\n  callback()\r\n}\r\n","import { defaultNoopBatch as batch } from './batch'\n\n// encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\ntype VoidFunc = () => void\n\ntype Listener = {\n  callback: VoidFunc\n  next: Listener | null\n  prev: Listener | null\n}\n\nfunction createListenerCollection() {\n  let first: Listener | null = null\n  let last: Listener | null = null\n\n  return {\n    clear() {\n      first = null\n      last = null\n    },\n\n    notify() {\n      batch(() => {\n        let listener = first\n        while (listener) {\n          listener.callback()\n          listener = listener.next\n        }\n      })\n    },\n\n    get() {\n      const listeners: Listener[] = []\n      let listener = first\n      while (listener) {\n        listeners.push(listener)\n        listener = listener.next\n      }\n      return listeners\n    },\n\n    subscribe(callback: () => void) {\n      let isSubscribed = true\n\n      const listener: Listener = (last = {\n        callback,\n        next: null,\n        prev: last,\n      })\n\n      if (listener.prev) {\n        listener.prev.next = listener\n      } else {\n        first = listener\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return\n        isSubscribed = false\n\n        if (listener.next) {\n          listener.next.prev = listener.prev\n        } else {\n          last = listener.prev\n        }\n        if (listener.prev) {\n          listener.prev.next = listener.next\n        } else {\n          first = listener.next\n        }\n      }\n    },\n  }\n}\n\ntype ListenerCollection = ReturnType<typeof createListenerCollection>\n\nexport interface Subscription {\n  addNestedSub: (listener: VoidFunc) => VoidFunc\n  notifyNestedSubs: VoidFunc\n  handleChangeWrapper: VoidFunc\n  isSubscribed: () => boolean\n  onStateChange?: VoidFunc | null\n  trySubscribe: VoidFunc\n  tryUnsubscribe: VoidFunc\n  getListeners: () => ListenerCollection\n}\n\nconst nullListeners = {\n  notify() {},\n  get: () => [],\n} as unknown as ListenerCollection\n\nexport function createSubscription(store: any, parentSub?: Subscription) {\n  let unsubscribe: VoidFunc | undefined\n  let listeners: ListenerCollection = nullListeners\n\n  // Reasons to keep the subscription active\n  let subscriptionsAmount = 0\n\n  // Is this specific subscription subscribed (or only nested ones?)\n  let selfSubscribed = false\n\n  function addNestedSub(listener: () => void) {\n    trySubscribe()\n\n    const cleanupListener = listeners.subscribe(listener)\n\n    // cleanup nested sub\n    let removed = false\n    return () => {\n      if (!removed) {\n        removed = true\n        cleanupListener()\n        tryUnsubscribe()\n      }\n    }\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify()\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange()\n    }\n  }\n\n  function isSubscribed() {\n    return selfSubscribed\n  }\n\n  function trySubscribe() {\n    subscriptionsAmount++\n    if (!unsubscribe) {\n      unsubscribe = parentSub\n        ? parentSub.addNestedSub(handleChangeWrapper)\n        : store.subscribe(handleChangeWrapper)\n\n      listeners = createListenerCollection()\n    }\n  }\n\n  function tryUnsubscribe() {\n    subscriptionsAmount--\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe()\n      unsubscribe = undefined\n      listeners.clear()\n      listeners = nullListeners\n    }\n  }\n\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true\n      trySubscribe()\n    }\n  }\n\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false\n      tryUnsubscribe()\n    }\n  }\n\n  const subscription: Subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners,\n  }\n\n  return subscription\n}\n","import { React } from '../utils/react'\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\n// Matches logic in React's `shared/ExecutionEnvironment` file\nconst canUseDOM = () =>\n  !!(\n    typeof window !== 'undefined' &&\n    typeof window.document !== 'undefined' &&\n    typeof window.document.createElement !== 'undefined'\n  )\n\nconst isDOM = /* @__PURE__ */ canUseDOM()\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\n/**\n * Checks if the code is running in a React Native environment.\n *\n * @returns Whether the code is running in a React Native environment.\n *\n * @see {@link https://github.com/facebook/react-native/issues/1331 Reference}\n */\nconst isRunningInReactNative = () =>\n  typeof navigator !== 'undefined' && navigator.product === 'ReactNative'\n\nconst isReactNative = /* @__PURE__ */ isRunningInReactNative()\n\nconst getUseIsomorphicLayoutEffect = () =>\n  isDOM || isReactNative ? React.useLayoutEffect : React.useEffect\n\nexport const useIsomorphicLayoutEffect =\n  /* @__PURE__ */ getUseIsomorphicLayoutEffect()\n","function is(x: unknown, y: unknown) {\r\n  if (x === y) {\r\n    return x !== 0 || y !== 0 || 1 / x === 1 / y\r\n  } else {\r\n    return x !== x && y !== y\r\n  }\r\n}\r\n\r\nexport default function shallowEqual(objA: any, objB: any) {\r\n  if (is(objA, objB)) return true\r\n\r\n  if (\r\n    typeof objA !== 'object' ||\r\n    objA === null ||\r\n    typeof objB !== 'object' ||\r\n    objB === null\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  const keysA = Object.keys(objA)\r\n  const keysB = Object.keys(objB)\r\n\r\n  if (keysA.length !== keysB.length) return false\r\n\r\n  for (let i = 0; i < keysA.length; i++) {\r\n    if (\r\n      !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\r\n      !is(objA[keysA[i]], objB[keysA[i]])\r\n    ) {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return true\r\n}\r\n","// Copied directly from:\n// https://github.com/mridgway/hoist-non-react-statics/blob/main/src/index.js\n// https://unpkg.com/browse/@types/hoist-non-react-statics@3.3.6/index.d.ts\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nimport type { ForwardRefExoticComponent, MemoExoticComponent } from 'react'\nimport { ForwardRef, Memo, isMemo } from '../utils/react-is'\n\nconst REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true,\n} as const\n\nconst FORWARD_REF_STATICS = {\n  $$typeof: true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n} as const\n\nconst MEMO_STATICS = {\n  $$typeof: true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst TYPE_STATICS = {\n  [ForwardRef]: FORWARD_REF_STATICS,\n  [Memo]: MEMO_STATICS,\n} as const\n\nfunction getStatics(component: any) {\n  // React v16.11 and below\n  if (isMemo(component)) {\n    return MEMO_STATICS\n  }\n\n  // React v16.12 and above\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS\n}\n\nexport type NonReactStatics<\n  Source,\n  C extends {\n    [key: string]: true\n  } = {},\n> = {\n  [key in Exclude<\n    keyof Source,\n    Source extends MemoExoticComponent<any>\n      ? keyof typeof MEMO_STATICS | keyof C\n      : Source extends ForwardRefExoticComponent<any>\n        ? keyof typeof FORWARD_REF_STATICS | keyof C\n        : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C\n  >]: Source[key]\n}\n\nconst defineProperty = Object.defineProperty\nconst getOwnPropertyNames = Object.getOwnPropertyNames\nconst getOwnPropertySymbols = Object.getOwnPropertySymbols\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor\nconst getPrototypeOf = Object.getPrototypeOf\nconst objectPrototype = Object.prototype\n\nexport default function hoistNonReactStatics<\n  Target,\n  Source,\n  CustomStatic extends {\n    [key: string]: true\n  } = {},\n>(\n  targetComponent: Target,\n  sourceComponent: Source,\n): Target & NonReactStatics<Source, CustomStatic> {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n\n    if (objectPrototype) {\n      const inheritedComponent = getPrototypeOf(sourceComponent)\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent)\n      }\n    }\n\n    let keys: (string | symbol)[] = getOwnPropertyNames(sourceComponent)\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent))\n    }\n\n    const targetStatics = getStatics(targetComponent)\n    const sourceStatics = getStatics(sourceComponent)\n\n    for (let i = 0; i < keys.length; ++i) {\n      const key = keys[i]\n      if (\n        !KNOWN_STATICS[key as keyof typeof KNOWN_STATICS] &&\n        !(sourceStatics && sourceStatics[key as keyof typeof sourceStatics]) &&\n        !(targetStatics && targetStatics[key as keyof typeof targetStatics])\n      ) {\n        const descriptor = getOwnPropertyDescriptor(sourceComponent, key)\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor!)\n        } catch (e) {\n          // ignore\n        }\n      }\n    }\n  }\n\n  return targetComponent as any\n}\n","import type { Context } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { Subscription } from '../utils/Subscription'\nimport type { ProviderProps } from './Provider'\n\nexport interface ReactReduxContextValue<\n  SS = any,\n  A extends Action<string> = UnknownAction,\n> extends Pick<ProviderProps, 'stabilityCheck' | 'identityFunctionCheck'> {\n  store: Store<SS, A>\n  subscription: Subscription\n  getServerState?: () => SS\n}\n\nconst ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`)\nconst gT: {\n  [ContextKey]?: Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >\n} = (\n  typeof globalThis !== 'undefined'\n    ? globalThis\n    : /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */ {}\n) as any\n\nfunction getContext(): Context<ReactReduxContextValue | null> {\n  if (!React.createContext) return {} as any\n\n  const contextMap = (gT[ContextKey] ??= new Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >())\n  let realContext = contextMap.get(React.createContext)\n  if (!realContext) {\n    realContext = React.createContext<ReactReduxContextValue | null>(\n      null as any,\n    )\n    if (process.env.NODE_ENV !== 'production') {\n      realContext.displayName = 'ReactRedux'\n    }\n    contextMap.set(React.createContext, realContext)\n  }\n  return realContext\n}\n\nexport const ReactReduxContext = /*#__PURE__*/ getContext()\n\nexport type ReactReduxContextInstance = typeof ReactReduxContext\n","/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport type { ComponentType } from 'react'\nimport { React } from '../utils/react'\nimport { isValidElementType, isContextConsumer } from '../utils/react-is'\n\nimport type { Store } from 'redux'\n\nimport type {\n  ConnectedComponent,\n  InferableComponentEnhancer,\n  InferableComponentEnhancerWithProps,\n  ResolveThunks,\n  DispatchProp,\n  ConnectPropsMaybeWithoutContext,\n} from '../types'\n\nimport type {\n  MapStateToPropsParam,\n  MapDispatchToPropsParam,\n  MergeProps,\n  MapDispatchToPropsNonObject,\n  SelectorFactoryOptions,\n} from '../connect/selectorFactory'\nimport defaultSelectorFactory from '../connect/selectorFactory'\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps'\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps'\nimport { mergePropsFactory } from '../connect/mergeProps'\n\nimport type { Subscription } from '../utils/Subscription'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport shallowEqual from '../utils/shallowEqual'\nimport hoistStatics from '../utils/hoistStatics'\nimport warning from '../utils/warning'\n\nimport type {\n  ReactReduxContextValue,\n  ReactReduxContextInstance,\n} from './Context'\nimport { ReactReduxContext } from './Context'\n\n// Define some constant arrays just to avoid re-creating these\nconst EMPTY_ARRAY: [unknown, number] = [null, 0]\nconst NO_SUBSCRIPTION_ARRAY = [null, null]\n\n// Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\nconst stringifyComponent = (Comp: unknown) => {\n  try {\n    return JSON.stringify(Comp)\n  } catch (err) {\n    return String(Comp)\n  }\n}\n\ntype EffectFunc = (...args: any[]) => void | ReturnType<React.EffectCallback>\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n//   and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(\n  effectFunc: EffectFunc,\n  effectArgs: any[],\n  dependencies?: React.DependencyList,\n) {\n  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies)\n}\n\n// Effect callback, extracted: assign the latest props values to refs for later usage\nfunction captureWrapperProps(\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  wrapperProps: unknown,\n  // actualChildProps: unknown,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n) {\n  // We want to capture the wrapper props and child props we used for later comparisons\n  lastWrapperProps.current = wrapperProps\n  renderIsScheduled.current = false\n\n  // If the render was from a store update, clear out that reference and cascade the subscriber update\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null\n    notifyNestedSubs()\n  }\n}\n\n// Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\nfunction subscribeUpdates(\n  shouldHandleStateChanges: boolean,\n  store: Store,\n  subscription: Subscription,\n  childPropsSelector: (state: unknown, props: unknown) => unknown,\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  isMounted: React.MutableRefObject<boolean>,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n  // forceComponentUpdateDispatch: React.Dispatch<any>,\n  additionalSubscribeListener: () => void,\n) {\n  // If we're not subscribed to the store, nothing to do here\n  if (!shouldHandleStateChanges) return () => {}\n\n  // Capture values for checking if and when this component unmounts\n  let didUnsubscribe = false\n  let lastThrownError: Error | null = null\n\n  // We'll run this callback every time a store subscription update propagates to this component\n  const checkForUpdates = () => {\n    if (didUnsubscribe || !isMounted.current) {\n      // Don't run stale listeners.\n      // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n      return\n    }\n\n    // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n    const latestStoreState = store.getState()\n\n    let newChildProps, error\n    try {\n      // Actually run the selector with the most recent store state and wrapper props\n      // to determine what the child props should be\n      newChildProps = childPropsSelector(\n        latestStoreState,\n        lastWrapperProps.current,\n      )\n    } catch (e) {\n      error = e\n      lastThrownError = e as Error | null\n    }\n\n    if (!error) {\n      lastThrownError = null\n    }\n\n    // If the child props haven't changed, nothing to do here - cascade the subscription update\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs()\n      }\n    } else {\n      // Save references to the new child props.  Note that we track the \"child props from store update\"\n      // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n      // forcing another re-render, which we don't want.\n      lastChildProps.current = newChildProps\n      childPropsFromStoreUpdate.current = newChildProps\n      renderIsScheduled.current = true\n\n      // TODO This is hacky and not how `uSES` is meant to be used\n      // Trigger the React `useSyncExternalStore` subscriber\n      additionalSubscribeListener()\n    }\n  }\n\n  // Actually subscribe to the nearest connected ancestor (or store)\n  subscription.onStateChange = checkForUpdates\n  subscription.trySubscribe()\n\n  // Pull data from the store after first render in case the store has\n  // changed since we began.\n  checkForUpdates()\n\n  const unsubscribeWrapper = () => {\n    didUnsubscribe = true\n    subscription.tryUnsubscribe()\n    subscription.onStateChange = null\n\n    if (lastThrownError) {\n      // It's possible that we caught an error due to a bad mapState function, but the\n      // parent re-rendered without this component and we're about to unmount.\n      // This shouldn't happen as long as we do top-down subscriptions correctly, but\n      // if we ever do those wrong, this throw will surface the error in our tests.\n      // In that case, throw the error from here so it doesn't get lost.\n      throw lastThrownError\n    }\n  }\n\n  return unsubscribeWrapper\n}\n\n// Reducer initial state creation for our update reducer\nconst initStateUpdates = () => EMPTY_ARRAY\n\nexport interface ConnectProps {\n  /** A custom Context instance that the component can use to access the store from an alternate Provider using that same Context instance */\n  context?: ReactReduxContextInstance\n  /** A Redux store instance to be used for subscriptions instead of the store from a Provider */\n  store?: Store\n}\n\ninterface InternalConnectProps extends ConnectProps {\n  reactReduxForwardedRef?: React.ForwardedRef<unknown>\n}\n\nfunction strictEqual(a: unknown, b: unknown) {\n  return a === b\n}\n\n/**\n * Infers the type of props that a connector will inject into a component.\n */\nexport type ConnectedProps<TConnector> =\n  TConnector extends InferableComponentEnhancerWithProps<\n    infer TInjectedProps,\n    any\n  >\n    ? unknown extends TInjectedProps\n      ? TConnector extends InferableComponentEnhancer<infer TInjectedProps>\n        ? TInjectedProps\n        : never\n      : TInjectedProps\n    : never\n\nexport interface ConnectOptions<\n  State = unknown,\n  TStateProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n> {\n  forwardRef?: boolean\n  context?: typeof ReactReduxContext\n  areStatesEqual?: (\n    nextState: State,\n    prevState: State,\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areOwnPropsEqual?: (\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areStatePropsEqual?: (\n    nextStateProps: TStateProps,\n    prevStateProps: TStateProps,\n  ) => boolean\n  areMergedPropsEqual?: (\n    nextMergedProps: TMergedProps,\n    prevMergedProps: TMergedProps,\n  ) => boolean\n}\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps\n * @param mapDispatchToProps\n * @param mergeProps\n * @param options\n */\nexport interface Connect<DefaultState = unknown> {\n  // tslint:disable:no-unnecessary-generics\n  (): InferableComponentEnhancer<DispatchProp>\n\n  /** mapState only */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  ): InferableComponentEnhancerWithProps<TStateProps & DispatchProp, TOwnProps>\n\n  /** mapDispatch only (as a function) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch only (as an object) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (as a function)*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (nullish) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n  ): InferableComponentEnhancerWithProps<TStateProps, TOwnProps>\n\n  /** mapState and mapDispatch (as an object) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mergeProps only */\n  <no_state = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<undefined, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and mergeProps */\n  <\n    TStateProps = {},\n    no_dispatch = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<TStateProps, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapDispatch (as a object) and mergeProps */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<undefined, TDispatchProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and options */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<DispatchProp & TStateProps, TOwnProps>\n\n  /** mapDispatch (as a function) and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch (as an object) and options*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as a function), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as an object), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState, mapDispatch, mergeProps, and options */\n  <\n    TStateProps = {},\n    TDispatchProps = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<\n      TStateProps,\n      TDispatchProps,\n      TOwnProps,\n      TMergedProps\n    >,\n    options?: ConnectOptions<State, TStateProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n  // tslint:enable:no-unnecessary-generics\n}\n\nlet hasWarnedAboutDeprecatedPureOption = false\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps A function that extracts values from state\n * @param mapDispatchToProps Setup for dispatching actions\n * @param mergeProps Optional callback to merge state and dispatch props together\n * @param options Options for configuring the connection\n *\n */\nfunction connect<\n  TStateProps = {},\n  TDispatchProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n  State = unknown,\n>(\n  mapStateToProps?: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  mapDispatchToProps?: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  {\n    // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n    // @ts-ignore\n    pure,\n    areStatesEqual = strictEqual,\n    areOwnPropsEqual = shallowEqual,\n    areStatePropsEqual = shallowEqual,\n    areMergedPropsEqual = shallowEqual,\n\n    // use React's forwardRef to expose a ref of the wrapped component\n    forwardRef = false,\n\n    // the context consumer to use\n    context = ReactReduxContext,\n  }: ConnectOptions<unknown, unknown, unknown, unknown> = {},\n): unknown {\n  if (process.env.NODE_ENV !== 'production') {\n    if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n      hasWarnedAboutDeprecatedPureOption = true\n      warning(\n        'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component',\n      )\n    }\n  }\n\n  const Context = context\n\n  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps)\n  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps)\n  const initMergeProps = mergePropsFactory(mergeProps)\n\n  const shouldHandleStateChanges = Boolean(mapStateToProps)\n\n  const wrapWithConnect = <TProps,>(\n    WrappedComponent: ComponentType<TProps>,\n  ) => {\n    type WrappedComponentProps = TProps &\n      ConnectPropsMaybeWithoutContext<TProps>\n\n    if (process.env.NODE_ENV !== 'production') {\n      const isValid = /*#__PURE__*/ isValidElementType(WrappedComponent)\n      if (!isValid)\n        throw new Error(\n          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\n            WrappedComponent,\n          )}`,\n        )\n    }\n\n    const wrappedComponentName =\n      WrappedComponent.displayName || WrappedComponent.name || 'Component'\n\n    const displayName = `Connect(${wrappedComponentName})`\n\n    const selectorFactoryOptions: SelectorFactoryOptions<\n      any,\n      any,\n      any,\n      any,\n      State\n    > = {\n      shouldHandleStateChanges,\n      displayName,\n      wrappedComponentName,\n      WrappedComponent,\n      // @ts-ignore\n      initMapStateToProps,\n      initMapDispatchToProps,\n      initMergeProps,\n      areStatesEqual,\n      areStatePropsEqual,\n      areOwnPropsEqual,\n      areMergedPropsEqual,\n    }\n\n    function ConnectFunction<TOwnProps>(\n      props: InternalConnectProps & TOwnProps,\n    ) {\n      const [propsContext, reactReduxForwardedRef, wrapperProps] =\n        React.useMemo(() => {\n          // Distinguish between actual \"data\" props that were passed to the wrapper component,\n          // and values needed to control behavior (forwarded refs, alternate context instances).\n          // To maintain the wrapperProps object reference, memoize this destructuring.\n          const { reactReduxForwardedRef, ...wrapperProps } = props\n          return [props.context, reactReduxForwardedRef, wrapperProps]\n        }, [props])\n\n      const ContextToUse: ReactReduxContextInstance = React.useMemo(() => {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        let ResultContext = Context\n        if (propsContext?.Consumer) {\n          if (process.env.NODE_ENV !== 'production') {\n            const isValid = /*#__PURE__*/ isContextConsumer(\n              // @ts-ignore\n              <propsContext.Consumer />,\n            )\n            if (!isValid) {\n              throw new Error(\n                'You must pass a valid React context consumer as `props.context`',\n              )\n            }\n            ResultContext = propsContext\n          }\n        }\n        return ResultContext\n      }, [propsContext, Context])\n\n      // Retrieve the store and ancestor subscription via context, if available\n      const contextValue = React.useContext(ContextToUse)\n\n      // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n      const didStoreComeFromProps =\n        Boolean(props.store) &&\n        Boolean(props.store!.getState) &&\n        Boolean(props.store!.dispatch)\n      const didStoreComeFromContext =\n        Boolean(contextValue) && Boolean(contextValue!.store)\n\n      if (\n        process.env.NODE_ENV !== 'production' &&\n        !didStoreComeFromProps &&\n        !didStoreComeFromContext\n      ) {\n        throw new Error(\n          `Could not find \"store\" in the context of ` +\n            `\"${displayName}\". Either wrap the root component in a <Provider>, ` +\n            `or pass a custom React context provider to <Provider> and the corresponding ` +\n            `React context consumer to ${displayName} in connect options.`,\n        )\n      }\n\n      // Based on the previous check, one of these must be true\n      const store: Store = didStoreComeFromProps\n        ? props.store!\n        : contextValue!.store\n\n      const getServerState = didStoreComeFromContext\n        ? contextValue!.getServerState\n        : store.getState\n\n      const childPropsSelector = React.useMemo(() => {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return defaultSelectorFactory(store.dispatch, selectorFactoryOptions)\n      }, [store])\n\n      const [subscription, notifyNestedSubs] = React.useMemo(() => {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY\n\n        // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n        const subscription = createSubscription(\n          store,\n          didStoreComeFromProps ? undefined : contextValue!.subscription,\n        )\n\n        // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n        const notifyNestedSubs =\n          subscription.notifyNestedSubs.bind(subscription)\n\n        return [subscription, notifyNestedSubs]\n      }, [store, didStoreComeFromProps, contextValue])\n\n      // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n      const overriddenContextValue = React.useMemo(() => {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue!\n        }\n\n        // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n        return {\n          ...contextValue,\n          subscription,\n        } as ReactReduxContextValue\n      }, [didStoreComeFromProps, contextValue, subscription])\n\n      // Set up refs to coordinate values between the subscription effect and the render logic\n      const lastChildProps = React.useRef<unknown>(undefined)\n      const lastWrapperProps = React.useRef(wrapperProps)\n      const childPropsFromStoreUpdate = React.useRef<unknown>(undefined)\n      const renderIsScheduled = React.useRef(false)\n      const isMounted = React.useRef(false)\n\n      // TODO: Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n       */\n      const latestSubscriptionCallbackError = React.useRef<Error | undefined>(\n        undefined,\n      )\n\n      useIsomorphicLayoutEffect(() => {\n        isMounted.current = true\n        return () => {\n          isMounted.current = false\n        }\n      }, [])\n\n      const actualChildPropsSelector = React.useMemo(() => {\n        const selector = () => {\n          // Tricky logic here:\n          // - This render may have been triggered by a Redux store update that produced new child props\n          // - However, we may have gotten new wrapper props after that\n          // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n          // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n          // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n          if (\n            childPropsFromStoreUpdate.current &&\n            wrapperProps === lastWrapperProps.current\n          ) {\n            return childPropsFromStoreUpdate.current\n          }\n\n          // TODO We're reading the store directly in render() here. Bad idea?\n          // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n          // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n          // to determine what the child props should be.\n          return childPropsSelector(store.getState(), wrapperProps)\n        }\n        return selector\n      }, [store, wrapperProps])\n\n      // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      const subscribeForReact = React.useMemo(() => {\n        const subscribe = (reactListener: () => void) => {\n          if (!subscription) {\n            return () => {}\n          }\n\n          return subscribeUpdates(\n            shouldHandleStateChanges,\n            store,\n            subscription,\n            // @ts-ignore\n            childPropsSelector,\n            lastWrapperProps,\n            lastChildProps,\n            renderIsScheduled,\n            isMounted,\n            childPropsFromStoreUpdate,\n            notifyNestedSubs,\n            reactListener,\n          )\n        }\n\n        return subscribe\n      }, [subscription])\n\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\n        lastWrapperProps,\n        lastChildProps,\n        renderIsScheduled,\n        wrapperProps,\n        childPropsFromStoreUpdate,\n        notifyNestedSubs,\n      ])\n\n      let actualChildProps: Record<string, unknown>\n\n      try {\n        actualChildProps = React.useSyncExternalStore(\n          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n          subscribeForReact,\n          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n          actualChildPropsSelector,\n          getServerState\n            ? () => childPropsSelector(getServerState(), wrapperProps)\n            : actualChildPropsSelector,\n        )\n      } catch (err) {\n        if (latestSubscriptionCallbackError.current) {\n          // eslint-disable-next-line no-extra-semi\n          ;(err as Error).message +=\n            `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`\n        }\n\n        throw err\n      }\n\n      useIsomorphicLayoutEffect(() => {\n        latestSubscriptionCallbackError.current = undefined\n        childPropsFromStoreUpdate.current = undefined\n        lastChildProps.current = actualChildProps\n      })\n\n      // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n      const renderedWrappedComponent = React.useMemo(() => {\n        return (\n          // @ts-ignore\n          <WrappedComponent\n            {...actualChildProps}\n            ref={reactReduxForwardedRef}\n          />\n        )\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps])\n\n      // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n      const renderedChild = React.useMemo(() => {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return (\n            <ContextToUse.Provider value={overriddenContextValue}>\n              {renderedWrappedComponent}\n            </ContextToUse.Provider>\n          )\n        }\n\n        return renderedWrappedComponent\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue])\n\n      return renderedChild\n    }\n\n    const _Connect = React.memo(ConnectFunction)\n\n    type ConnectedWrapperComponent = typeof _Connect & {\n      WrappedComponent: typeof WrappedComponent\n    }\n\n    // Add a hacky cast to get the right output type\n    const Connect = _Connect as unknown as ConnectedComponent<\n      typeof WrappedComponent,\n      WrappedComponentProps\n    >\n    Connect.WrappedComponent = WrappedComponent\n    Connect.displayName = ConnectFunction.displayName = displayName\n\n    if (forwardRef) {\n      const _forwarded = React.forwardRef(\n        function forwardConnectRef(props, ref) {\n          // @ts-ignore\n          return <Connect {...props} reactReduxForwardedRef={ref} />\n        },\n      )\n\n      const forwarded = _forwarded as ConnectedWrapperComponent\n      forwarded.displayName = displayName\n      forwarded.WrappedComponent = WrappedComponent\n      return /*#__PURE__*/ hoistStatics(forwarded, WrappedComponent)\n    }\n\n    return /*#__PURE__*/ hoistStatics(Connect, WrappedComponent)\n  }\n\n  return wrapWithConnect\n}\n\nexport default connect as Connect\n","import type { Context, ReactNode } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { DevModeCheckFrequency } from '../hooks/useSelector'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport type { ReactReduxContextValue } from './Context'\nimport { ReactReduxContext } from './Context'\n\nexport interface ProviderProps<\n  A extends Action<string> = UnknownAction,\n  S = unknown,\n> {\n  /**\n   * The single Redux store in your application.\n   */\n  store: Store<S, A>\n\n  /**\n   * An optional server state snapshot. Will be used during initial hydration render if available, to ensure that the UI output is consistent with the HTML generated on the server.\n   */\n  serverState?: S\n\n  /**\n   * Optional context to be used internally in react-redux. Use React.createContext() to create a context to be used.\n   * If this is used, you'll need to customize `connect` by supplying the same context provided to the Provider.\n   * Set the initial value to null, and the hooks will error\n   * if this is not overwritten by Provider.\n   */\n  context?: Context<ReactReduxContextValue<S, A> | null>\n\n  /**\n   * Determines the frequency of stability checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` stability check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck?: DevModeCheckFrequency\n\n  /**\n   * Determines the frequency of identity function checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` identity function check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck?: DevModeCheckFrequency\n\n  children: ReactNode\n}\n\nfunction Provider<A extends Action<string> = UnknownAction, S = unknown>(\n  providerProps: ProviderProps<A, S>,\n) {\n  const { children, context, serverState, store } = providerProps\n\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store)\n\n    const baseContextValue = {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : undefined,\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      return baseContextValue\n    } else {\n      const { identityFunctionCheck = 'once', stabilityCheck = 'once' } =\n        providerProps\n\n      return /* @__PURE__ */ Object.assign(baseContextValue, {\n        stabilityCheck,\n        identityFunctionCheck,\n      })\n    }\n  }, [store, serverState])\n\n  const previousState = React.useMemo(() => store.getState(), [store])\n\n  useIsomorphicLayoutEffect(() => {\n    const { subscription } = contextValue\n    subscription.onStateChange = subscription.notifyNestedSubs\n    subscription.trySubscribe()\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs()\n    }\n    return () => {\n      subscription.tryUnsubscribe()\n      subscription.onStateChange = undefined\n    }\n  }, [contextValue, previousState])\n\n  const Context = context || ReactReduxContext\n\n  return <Context.Provider value={contextValue}>{children}</Context.Provider>\n}\n\nexport default Provider\n","import { React } from '../utils/react'\nimport { ReactReduxContext } from '../components/Context'\nimport type { ReactReduxContextValue } from '../components/Context'\n\n/**\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\n */\nexport function createReduxContextHook(context = ReactReduxContext) {\n  return function useReduxContext(): ReactReduxContextValue {\n    const contextValue = React.useContext(context)\n\n    if (process.env.NODE_ENV !== 'production' && !contextValue) {\n      throw new Error(\n        'could not find react-redux context value; please ensure the component is wrapped in a <Provider>',\n      )\n    }\n\n    return contextValue!\n  }\n}\n\n/**\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @returns {any} the value of the `ReactReduxContext`\n *\n * @example\n *\n * import React from 'react'\n * import { useReduxContext } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const { store } = useReduxContext()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useReduxContext = /*#__PURE__*/ createReduxContextHook()\n","import type { Context } from 'react'\nimport type { Action, Store } from 'redux'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * Represents a type that extracts the action type from a given Redux store.\n *\n * @template StoreType - The specific type of the Redux store.\n *\n * @since 9.1.0\n * @internal\n */\nexport type ExtractStoreActionType<StoreType extends Store> =\n  StoreType extends Store<any, infer ActionType> ? ActionType : never\n\n/**\n * Represents a custom hook that provides access to the Redux store.\n *\n * @template StoreType - The specific type of the Redux store that gets returned.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseStore<StoreType extends Store> {\n  /**\n   * Returns the Redux store instance.\n   *\n   * @returns The Redux store instance.\n   */\n  (): StoreType\n\n  /**\n   * Returns the Redux store instance with specific state and action types.\n   *\n   * @returns The Redux store with the specified state and action types.\n   *\n   * @template StateType - The specific type of the state used in the store.\n   * @template ActionType - The specific type of the actions used in the store.\n   */\n  <\n    StateType extends ReturnType<StoreType['getState']> = ReturnType<\n      StoreType['getState']\n    >,\n    ActionType extends Action = ExtractStoreActionType<Store>,\n  >(): Store<StateType, ActionType>\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useStore useStore}\n   * where the type of the Redux `store` is predefined.\n   *\n   * This allows you to set the `store` type once, eliminating the need to\n   * specify it with every {@linkcode useStore useStore} call.\n   *\n   * @returns A pre-typed `useStore` with the store type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppStore = useStore.withTypes<AppStore>()\n   * ```\n   *\n   * @template OverrideStoreType - The specific type of the Redux store that gets returned.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStoreType extends StoreType,\n  >() => UseStore<OverrideStoreType>\n}\n\n/**\n * Hook factory, which creates a `useStore` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useStore` hook bound to the specified context.\n */\nexport function createStoreHook<\n  StateType = unknown,\n  ActionType extends Action = Action,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : // @ts-ignore\n        createReduxContextHook(context)\n  const useStore = () => {\n    const { store } = useReduxContext()\n    return store\n  }\n\n  Object.assign(useStore, {\n    withTypes: () => useStore,\n  })\n\n  return useStore as UseStore<Store<StateType, ActionType>>\n}\n\n/**\n * A hook to access the redux store.\n *\n * @returns {any} the redux store\n *\n * @example\n *\n * import React from 'react'\n * import { useStore } from 'react-redux'\n *\n * export const ExampleComponent = () => {\n *   const store = useStore()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useStore = /*#__PURE__*/ createStoreHook()\n","import type { Context } from 'react'\nimport type { Action, Dispatch, UnknownAction } from 'redux'\n\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport { createStoreHook, useStore as useDefaultStore } from './useStore'\n\n/**\n * Represents a custom hook that provides a dispatch function\n * from the Redux store.\n *\n * @template DispatchType - The specific type of the dispatch function.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseDispatch<\n  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,\n> {\n  /**\n   * Returns the dispatch function from the Redux store.\n   *\n   * @returns The dispatch function from the Redux store.\n   *\n   * @template AppDispatch - The specific type of the dispatch function.\n   */\n  <AppDispatch extends DispatchType = DispatchType>(): AppDispatch\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useDispatch useDispatch}\n   * where the type of the `dispatch` function is predefined.\n   *\n   * This allows you to set the `dispatch` type once, eliminating the need to\n   * specify it with every {@linkcode useDispatch useDispatch} call.\n   *\n   * @returns A pre-typed `useDispatch` with the dispatch type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppDispatch = useDispatch.withTypes<AppDispatch>()\n   * ```\n   *\n   * @template OverrideDispatchType - The specific type of the dispatch function.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideDispatchType extends DispatchType,\n  >() => UseDispatch<OverrideDispatchType>\n}\n\n/**\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useDispatch` hook bound to the specified context.\n */\nexport function createDispatchHook<\n  StateType = unknown,\n  ActionType extends Action = UnknownAction,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useStore =\n    context === ReactReduxContext ? useDefaultStore : createStoreHook(context)\n\n  const useDispatch = () => {\n    const store = useStore()\n    return store.dispatch\n  }\n\n  Object.assign(useDispatch, {\n    withTypes: () => useDispatch,\n  })\n\n  return useDispatch as UseDispatch<Dispatch<ActionType>>\n}\n\n/**\n * A hook to access the redux `dispatch` function.\n *\n * @returns {any|function} redux store's `dispatch` function\n *\n * @example\n *\n * import React, { useCallback } from 'react'\n * import { useDispatch } from 'react-redux'\n *\n * export const CounterComponent = ({ value }) => {\n *   const dispatch = useDispatch()\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\n *   return (\n *     <div>\n *       <span>{value}</span>\n *       <button onClick={increaseCounter}>Increase counter</button>\n *     </div>\n *   )\n * }\n */\nexport const useDispatch = /*#__PURE__*/ createDispatchHook()\n","//import * as React from 'react'\nimport { React } from '../utils/react'\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector.js'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport type { EqualityFn, NoInfer } from '../types'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * The frequency of development mode checks.\n *\n * @since 8.1.0\n * @internal\n */\nexport type DevModeCheckFrequency = 'never' | 'once' | 'always'\n\n/**\n * Represents the configuration for development mode checks.\n *\n * @since 9.0.0\n * @internal\n */\nexport interface DevModeChecks {\n  /**\n   * Overrides the global stability check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the stability check.\n   *\n   * @default 'once'\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck: DevModeCheckFrequency\n\n  /**\n   * Overrides the global identity function check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the identity function check.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @default 'once'\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck: DevModeCheckFrequency\n}\n\nexport interface UseSelectorOptions<Selected = unknown> {\n  equalityFn?: EqualityFn<Selected>\n\n  /**\n   * `useSelector` performs additional checks in development mode to help\n   * identify and warn about potential issues in selector behavior. This\n   * option allows you to customize the behavior of these checks per selector.\n   *\n   * @since 9.0.0\n   */\n  devModeChecks?: Partial<DevModeChecks>\n}\n\n/**\n * Represents a custom hook that allows you to extract data from the\n * Redux store state, using a selector function. The selector function\n * takes the current state as an argument and returns a part of the state\n * or some derived data. The hook also supports an optional equality\n * function or options object to customize its behavior.\n *\n * @template StateType - The specific type of state this hook operates on.\n *\n * @public\n */\nexport interface UseSelector<StateType = unknown> {\n  /**\n   * A function that takes a selector function as its first argument.\n   * The selector function is responsible for selecting a part of\n   * the Redux store's state or computing derived data.\n   *\n   * @param selector - A function that receives the current state and returns a part of the state or some derived data.\n   * @param equalityFnOrOptions - An optional equality function or options object for customizing the behavior of the selector.\n   * @returns The selected part of the state or derived data.\n   *\n   * @template TState - The specific type of state this hook operates on.\n   * @template Selected - The type of the value that the selector function will return.\n   */\n  <TState extends StateType = StateType, Selected = unknown>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions?: EqualityFn<Selected> | UseSelectorOptions<Selected>,\n  ): Selected\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useSelector useSelector}\n   * where the `state` type is predefined.\n   *\n   * This allows you to set the `state` type once, eliminating the need to\n   * specify it with every {@linkcode useSelector useSelector} call.\n   *\n   * @returns A pre-typed `useSelector` with the state type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppSelector = useSelector.withTypes<RootState>()\n   * ```\n   *\n   * @template OverrideStateType - The specific type of state this hook operates on.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStateType extends StateType,\n  >() => UseSelector<OverrideStateType>\n}\n\nconst refEquality: EqualityFn<any> = (a, b) => a === b\n\n/**\n * Hook factory, which creates a `useSelector` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useSelector` hook bound to the specified context.\n */\nexport function createSelectorHook(\n  context: React.Context<ReactReduxContextValue<\n    any,\n    any\n  > | null> = ReactReduxContext,\n): UseSelector {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : createReduxContextHook(context)\n\n  const useSelector = <TState, Selected>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions:\n      | EqualityFn<NoInfer<Selected>>\n      | UseSelectorOptions<NoInfer<Selected>> = {},\n  ): Selected => {\n    const { equalityFn = refEquality } =\n      typeof equalityFnOrOptions === 'function'\n        ? { equalityFn: equalityFnOrOptions }\n        : equalityFnOrOptions\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`)\n      }\n      if (typeof selector !== 'function') {\n        throw new Error(`You must pass a function as a selector to useSelector`)\n      }\n      if (typeof equalityFn !== 'function') {\n        throw new Error(\n          `You must pass a function as an equality function to useSelector`,\n        )\n      }\n    }\n\n    const reduxContext = useReduxContext()\n\n    const { store, subscription, getServerState } = reduxContext\n\n    const firstRun = React.useRef(true)\n\n    const wrappedSelector = React.useCallback<typeof selector>(\n      {\n        [selector.name](state: TState) {\n          const selected = selector(state)\n          if (process.env.NODE_ENV !== 'production') {\n            const { devModeChecks = {} } =\n              typeof equalityFnOrOptions === 'function'\n                ? {}\n                : equalityFnOrOptions\n            const { identityFunctionCheck, stabilityCheck } = reduxContext\n            const {\n              identityFunctionCheck: finalIdentityFunctionCheck,\n              stabilityCheck: finalStabilityCheck,\n            } = {\n              stabilityCheck,\n              identityFunctionCheck,\n              ...devModeChecks,\n            }\n            if (\n              finalStabilityCheck === 'always' ||\n              (finalStabilityCheck === 'once' && firstRun.current)\n            ) {\n              const toCompare = selector(state)\n              if (!equalityFn(selected, toCompare)) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization',\n                  {\n                    state,\n                    selected,\n                    selected2: toCompare,\n                    stack,\n                  },\n                )\n              }\n            }\n            if (\n              finalIdentityFunctionCheck === 'always' ||\n              (finalIdentityFunctionCheck === 'once' && firstRun.current)\n            ) {\n              // @ts-ignore\n              if (selected === state) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned the root state when called. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.',\n                  { stack },\n                )\n              }\n            }\n            if (firstRun.current) firstRun.current = false\n          }\n          return selected\n        },\n      }[selector.name],\n      [selector],\n    )\n\n    const selectedState = useSyncExternalStoreWithSelector(\n      subscription.addNestedSub,\n      store.getState,\n      getServerState || store.getState,\n      wrappedSelector,\n      equalityFn,\n    )\n\n    React.useDebugValue(selectedState)\n\n    return selectedState\n  }\n\n  Object.assign(useSelector, {\n    withTypes: () => useSelector,\n  })\n\n  return useSelector as UseSelector\n}\n\n/**\n * A hook to access the redux store's state. This hook takes a selector function\n * as an argument. The selector is called with the store state.\n *\n * This hook takes an optional equality comparison function as the second parameter\n * that allows you to customize the way the selected state is compared to determine\n * whether the component needs to be re-rendered.\n *\n * @param {Function} selector the selector function\n * @param {Function=} equalityFn the function that will be used to determine equality\n *\n * @returns {any} the selected state\n *\n * @example\n *\n * import React from 'react'\n * import { useSelector } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const counter = useSelector(state => state.counter)\n *   return <div>{counter}</div>\n * }\n */\nexport const useSelector = /*#__PURE__*/ createSelectorHook()\n","import connect from './components/connect'\nexport type {\n  Connect,\n  ConnectProps,\n  ConnectedProps,\n} from './components/connect'\n\nimport shallowEqual from './utils/shallowEqual'\n\nimport Provider from './components/Provider'\nimport { defaultNoopBatch } from './utils/batch'\n\nexport { ReactReduxContext } from './components/Context'\nexport type { ReactReduxContextValue } from './components/Context'\n\nexport type { ProviderProps } from './components/Provider'\n\nexport type {\n  MapDispatchToProps,\n  MapDispatchToPropsFactory,\n  MapDispatchToPropsFunction,\n  MapDispatchToPropsNonObject,\n  MapDispatchToPropsParam,\n  MapStateToProps,\n  MapStateToPropsFactory,\n  MapStateToPropsParam,\n  MergeProps,\n  Selector,\n  SelectorFactory,\n} from './connect/selectorFactory'\n\nexport { createDispatchHook, useDispatch } from './hooks/useDispatch'\nexport type { UseDispatch } from './hooks/useDispatch'\n\nexport { createSelectorHook, useSelector } from './hooks/useSelector'\nexport type { UseSelector } from './hooks/useSelector'\n\nexport { createStoreHook, useStore } from './hooks/useStore'\nexport type { UseStore } from './hooks/useStore'\n\nexport type { Subscription } from './utils/Subscription'\n\nexport * from './types'\n\n/**\n * @deprecated As of React 18, batching is enabled by default for ReactDOM and React Native.\n * This is now a no-op that immediately runs the callback.\n */\nconst batch = defaultNoopBatch\n\nexport { Provider, batch, connect, shallowEqual }\n"],"mappings":"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","names":["reactReduxForwardedRef","wrapperProps","subscription","notifyNestedSubs","useReduxContext","useReduxContext","useStore","useStore","useDispatch","useReduxContext","useSelector"]}
Index: node_modules/react-redux/dist/react-redux.mjs
===================================================================
--- node_modules/react-redux/dist/react-redux.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/react-redux.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1069 @@
+// src/utils/react.ts
+import * as React from "react";
+
+// src/utils/react-is.ts
+var IS_REACT_19 = /* @__PURE__ */ React.version.startsWith("19");
+var REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(
+  IS_REACT_19 ? "react.transitional.element" : "react.element"
+);
+var REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal");
+var REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for("react.fragment");
+var REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for("react.strict_mode");
+var REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for("react.profiler");
+var REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for("react.consumer");
+var REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for("react.context");
+var REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for("react.forward_ref");
+var REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for("react.suspense");
+var REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(
+  "react.suspense_list"
+);
+var REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for("react.memo");
+var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy");
+var REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for("react.offscreen");
+var REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(
+  "react.client.reference"
+);
+var ForwardRef = REACT_FORWARD_REF_TYPE;
+var Memo = REACT_MEMO_TYPE;
+function isValidElementType(type) {
+  return typeof type === "string" || typeof type === "function" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === "object" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE || type.getModuleId !== void 0) ? true : false;
+}
+function typeOf(object) {
+  if (typeof object === "object" && object !== null) {
+    const { $$typeof } = object;
+    switch ($$typeof) {
+      case REACT_ELEMENT_TYPE:
+        switch (object = object.type, object) {
+          case REACT_FRAGMENT_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_SUSPENSE_TYPE:
+          case REACT_SUSPENSE_LIST_TYPE:
+            return object;
+          default:
+            switch (object = object && object.$$typeof, object) {
+              case REACT_CONTEXT_TYPE:
+              case REACT_FORWARD_REF_TYPE:
+              case REACT_LAZY_TYPE:
+              case REACT_MEMO_TYPE:
+                return object;
+              case REACT_CONSUMER_TYPE:
+                return object;
+              default:
+                return $$typeof;
+            }
+        }
+      case REACT_PORTAL_TYPE:
+        return $$typeof;
+    }
+  }
+}
+function isContextConsumer(object) {
+  return IS_REACT_19 ? typeOf(object) === REACT_CONSUMER_TYPE : typeOf(object) === REACT_CONTEXT_TYPE;
+}
+function isMemo(object) {
+  return typeOf(object) === REACT_MEMO_TYPE;
+}
+
+// src/utils/warning.ts
+function warning(message) {
+  if (typeof console !== "undefined" && typeof console.error === "function") {
+    console.error(message);
+  }
+  try {
+    throw new Error(message);
+  } catch (e) {
+  }
+}
+
+// src/connect/verifySubselectors.ts
+function verify(selector, methodName) {
+  if (!selector) {
+    throw new Error(`Unexpected value for ${methodName} in connect.`);
+  } else if (methodName === "mapStateToProps" || methodName === "mapDispatchToProps") {
+    if (!Object.prototype.hasOwnProperty.call(selector, "dependsOnOwnProps")) {
+      warning(
+        `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`
+      );
+    }
+  }
+}
+function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) {
+  verify(mapStateToProps, "mapStateToProps");
+  verify(mapDispatchToProps, "mapDispatchToProps");
+  verify(mergeProps, "mergeProps");
+}
+
+// src/connect/selectorFactory.ts
+function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {
+  areStatesEqual,
+  areOwnPropsEqual,
+  areStatePropsEqual
+}) {
+  let hasRunAtLeastOnce = false;
+  let state;
+  let ownProps;
+  let stateProps;
+  let dispatchProps;
+  let mergedProps;
+  function handleFirstCall(firstState, firstOwnProps) {
+    state = firstState;
+    ownProps = firstOwnProps;
+    stateProps = mapStateToProps(state, ownProps);
+    dispatchProps = mapDispatchToProps(dispatch, ownProps);
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    hasRunAtLeastOnce = true;
+    return mergedProps;
+  }
+  function handleNewPropsAndNewState() {
+    stateProps = mapStateToProps(state, ownProps);
+    if (mapDispatchToProps.dependsOnOwnProps)
+      dispatchProps = mapDispatchToProps(dispatch, ownProps);
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    return mergedProps;
+  }
+  function handleNewProps() {
+    if (mapStateToProps.dependsOnOwnProps)
+      stateProps = mapStateToProps(state, ownProps);
+    if (mapDispatchToProps.dependsOnOwnProps)
+      dispatchProps = mapDispatchToProps(dispatch, ownProps);
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    return mergedProps;
+  }
+  function handleNewState() {
+    const nextStateProps = mapStateToProps(state, ownProps);
+    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);
+    stateProps = nextStateProps;
+    if (statePropsChanged)
+      mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+    return mergedProps;
+  }
+  function handleSubsequentCalls(nextState, nextOwnProps) {
+    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);
+    const stateChanged = !areStatesEqual(
+      nextState,
+      state,
+      nextOwnProps,
+      ownProps
+    );
+    state = nextState;
+    ownProps = nextOwnProps;
+    if (propsChanged && stateChanged) return handleNewPropsAndNewState();
+    if (propsChanged) return handleNewProps();
+    if (stateChanged) return handleNewState();
+    return mergedProps;
+  }
+  return function pureFinalPropsSelector(nextState, nextOwnProps) {
+    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);
+  };
+}
+function finalPropsSelectorFactory(dispatch, {
+  initMapStateToProps,
+  initMapDispatchToProps,
+  initMergeProps,
+  ...options
+}) {
+  const mapStateToProps = initMapStateToProps(dispatch, options);
+  const mapDispatchToProps = initMapDispatchToProps(dispatch, options);
+  const mergeProps = initMergeProps(dispatch, options);
+  if (process.env.NODE_ENV !== "production") {
+    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);
+  }
+  return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);
+}
+
+// src/utils/bindActionCreators.ts
+function bindActionCreators(actionCreators, dispatch) {
+  const boundActionCreators = {};
+  for (const key in actionCreators) {
+    const actionCreator = actionCreators[key];
+    if (typeof actionCreator === "function") {
+      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));
+    }
+  }
+  return boundActionCreators;
+}
+
+// src/utils/isPlainObject.ts
+function isPlainObject(obj) {
+  if (typeof obj !== "object" || obj === null) return false;
+  const proto = Object.getPrototypeOf(obj);
+  if (proto === null) return true;
+  let baseProto = proto;
+  while (Object.getPrototypeOf(baseProto) !== null) {
+    baseProto = Object.getPrototypeOf(baseProto);
+  }
+  return proto === baseProto;
+}
+
+// src/utils/verifyPlainObject.ts
+function verifyPlainObject(value, displayName, methodName) {
+  if (!isPlainObject(value)) {
+    warning(
+      `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`
+    );
+  }
+}
+
+// src/connect/wrapMapToProps.ts
+function wrapMapToPropsConstant(getConstant) {
+  return function initConstantSelector(dispatch) {
+    const constant = getConstant(dispatch);
+    function constantSelector() {
+      return constant;
+    }
+    constantSelector.dependsOnOwnProps = false;
+    return constantSelector;
+  };
+}
+function getDependsOnOwnProps(mapToProps) {
+  return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;
+}
+function wrapMapToPropsFunc(mapToProps, methodName) {
+  return function initProxySelector(dispatch, { displayName }) {
+    const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {
+      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, void 0);
+    };
+    proxy.dependsOnOwnProps = true;
+    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {
+      proxy.mapToProps = mapToProps;
+      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);
+      let props = proxy(stateOrDispatch, ownProps);
+      if (typeof props === "function") {
+        proxy.mapToProps = props;
+        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);
+        props = proxy(stateOrDispatch, ownProps);
+      }
+      if (process.env.NODE_ENV !== "production")
+        verifyPlainObject(props, displayName, methodName);
+      return props;
+    };
+    return proxy;
+  };
+}
+
+// src/connect/invalidArgFactory.ts
+function createInvalidArgFactory(arg, name) {
+  return (dispatch, options) => {
+    throw new Error(
+      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`
+    );
+  };
+}
+
+// src/connect/mapDispatchToProps.ts
+function mapDispatchToPropsFactory(mapDispatchToProps) {
+  return mapDispatchToProps && typeof mapDispatchToProps === "object" ? wrapMapToPropsConstant(
+    (dispatch) => (
+      // @ts-ignore
+      bindActionCreators(mapDispatchToProps, dispatch)
+    )
+  ) : !mapDispatchToProps ? wrapMapToPropsConstant((dispatch) => ({
+    dispatch
+  })) : typeof mapDispatchToProps === "function" ? (
+    // @ts-ignore
+    wrapMapToPropsFunc(mapDispatchToProps, "mapDispatchToProps")
+  ) : createInvalidArgFactory(mapDispatchToProps, "mapDispatchToProps");
+}
+
+// src/connect/mapStateToProps.ts
+function mapStateToPropsFactory(mapStateToProps) {
+  return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === "function" ? (
+    // @ts-ignore
+    wrapMapToPropsFunc(mapStateToProps, "mapStateToProps")
+  ) : createInvalidArgFactory(mapStateToProps, "mapStateToProps");
+}
+
+// src/connect/mergeProps.ts
+function defaultMergeProps(stateProps, dispatchProps, ownProps) {
+  return { ...ownProps, ...stateProps, ...dispatchProps };
+}
+function wrapMergePropsFunc(mergeProps) {
+  return function initMergePropsProxy(dispatch, { displayName, areMergedPropsEqual }) {
+    let hasRunOnce = false;
+    let mergedProps;
+    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {
+      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);
+      if (hasRunOnce) {
+        if (!areMergedPropsEqual(nextMergedProps, mergedProps))
+          mergedProps = nextMergedProps;
+      } else {
+        hasRunOnce = true;
+        mergedProps = nextMergedProps;
+        if (process.env.NODE_ENV !== "production")
+          verifyPlainObject(mergedProps, displayName, "mergeProps");
+      }
+      return mergedProps;
+    };
+  };
+}
+function mergePropsFactory(mergeProps) {
+  return !mergeProps ? () => defaultMergeProps : typeof mergeProps === "function" ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, "mergeProps");
+}
+
+// src/utils/batch.ts
+function defaultNoopBatch(callback) {
+  callback();
+}
+
+// src/utils/Subscription.ts
+function createListenerCollection() {
+  let first = null;
+  let last = null;
+  return {
+    clear() {
+      first = null;
+      last = null;
+    },
+    notify() {
+      defaultNoopBatch(() => {
+        let listener = first;
+        while (listener) {
+          listener.callback();
+          listener = listener.next;
+        }
+      });
+    },
+    get() {
+      const listeners = [];
+      let listener = first;
+      while (listener) {
+        listeners.push(listener);
+        listener = listener.next;
+      }
+      return listeners;
+    },
+    subscribe(callback) {
+      let isSubscribed = true;
+      const listener = last = {
+        callback,
+        next: null,
+        prev: last
+      };
+      if (listener.prev) {
+        listener.prev.next = listener;
+      } else {
+        first = listener;
+      }
+      return function unsubscribe() {
+        if (!isSubscribed || first === null) return;
+        isSubscribed = false;
+        if (listener.next) {
+          listener.next.prev = listener.prev;
+        } else {
+          last = listener.prev;
+        }
+        if (listener.prev) {
+          listener.prev.next = listener.next;
+        } else {
+          first = listener.next;
+        }
+      };
+    }
+  };
+}
+var nullListeners = {
+  notify() {
+  },
+  get: () => []
+};
+function createSubscription(store, parentSub) {
+  let unsubscribe;
+  let listeners = nullListeners;
+  let subscriptionsAmount = 0;
+  let selfSubscribed = false;
+  function addNestedSub(listener) {
+    trySubscribe();
+    const cleanupListener = listeners.subscribe(listener);
+    let removed = false;
+    return () => {
+      if (!removed) {
+        removed = true;
+        cleanupListener();
+        tryUnsubscribe();
+      }
+    };
+  }
+  function notifyNestedSubs() {
+    listeners.notify();
+  }
+  function handleChangeWrapper() {
+    if (subscription.onStateChange) {
+      subscription.onStateChange();
+    }
+  }
+  function isSubscribed() {
+    return selfSubscribed;
+  }
+  function trySubscribe() {
+    subscriptionsAmount++;
+    if (!unsubscribe) {
+      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);
+      listeners = createListenerCollection();
+    }
+  }
+  function tryUnsubscribe() {
+    subscriptionsAmount--;
+    if (unsubscribe && subscriptionsAmount === 0) {
+      unsubscribe();
+      unsubscribe = void 0;
+      listeners.clear();
+      listeners = nullListeners;
+    }
+  }
+  function trySubscribeSelf() {
+    if (!selfSubscribed) {
+      selfSubscribed = true;
+      trySubscribe();
+    }
+  }
+  function tryUnsubscribeSelf() {
+    if (selfSubscribed) {
+      selfSubscribed = false;
+      tryUnsubscribe();
+    }
+  }
+  const subscription = {
+    addNestedSub,
+    notifyNestedSubs,
+    handleChangeWrapper,
+    isSubscribed,
+    trySubscribe: trySubscribeSelf,
+    tryUnsubscribe: tryUnsubscribeSelf,
+    getListeners: () => listeners
+  };
+  return subscription;
+}
+
+// src/utils/useIsomorphicLayoutEffect.ts
+var canUseDOM = () => !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
+var isDOM = /* @__PURE__ */ canUseDOM();
+var isRunningInReactNative = () => typeof navigator !== "undefined" && navigator.product === "ReactNative";
+var isReactNative = /* @__PURE__ */ isRunningInReactNative();
+var getUseIsomorphicLayoutEffect = () => isDOM || isReactNative ? React.useLayoutEffect : React.useEffect;
+var useIsomorphicLayoutEffect = /* @__PURE__ */ getUseIsomorphicLayoutEffect();
+
+// src/utils/shallowEqual.ts
+function is(x, y) {
+  if (x === y) {
+    return x !== 0 || y !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+}
+function shallowEqual(objA, objB) {
+  if (is(objA, objB)) return true;
+  if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
+    return false;
+  }
+  const keysA = Object.keys(objA);
+  const keysB = Object.keys(objB);
+  if (keysA.length !== keysB.length) return false;
+  for (let i = 0; i < keysA.length; i++) {
+    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+      return false;
+    }
+  }
+  return true;
+}
+
+// src/utils/hoistStatics.ts
+var REACT_STATICS = {
+  childContextTypes: true,
+  contextType: true,
+  contextTypes: true,
+  defaultProps: true,
+  displayName: true,
+  getDefaultProps: true,
+  getDerivedStateFromError: true,
+  getDerivedStateFromProps: true,
+  mixins: true,
+  propTypes: true,
+  type: true
+};
+var KNOWN_STATICS = {
+  name: true,
+  length: true,
+  prototype: true,
+  caller: true,
+  callee: true,
+  arguments: true,
+  arity: true
+};
+var FORWARD_REF_STATICS = {
+  $$typeof: true,
+  render: true,
+  defaultProps: true,
+  displayName: true,
+  propTypes: true
+};
+var MEMO_STATICS = {
+  $$typeof: true,
+  compare: true,
+  defaultProps: true,
+  displayName: true,
+  propTypes: true,
+  type: true
+};
+var TYPE_STATICS = {
+  [ForwardRef]: FORWARD_REF_STATICS,
+  [Memo]: MEMO_STATICS
+};
+function getStatics(component) {
+  if (isMemo(component)) {
+    return MEMO_STATICS;
+  }
+  return TYPE_STATICS[component["$$typeof"]] || REACT_STATICS;
+}
+var defineProperty = Object.defineProperty;
+var getOwnPropertyNames = Object.getOwnPropertyNames;
+var getOwnPropertySymbols = Object.getOwnPropertySymbols;
+var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+var getPrototypeOf = Object.getPrototypeOf;
+var objectPrototype = Object.prototype;
+function hoistNonReactStatics(targetComponent, sourceComponent) {
+  if (typeof sourceComponent !== "string") {
+    if (objectPrototype) {
+      const inheritedComponent = getPrototypeOf(sourceComponent);
+      if (inheritedComponent && inheritedComponent !== objectPrototype) {
+        hoistNonReactStatics(targetComponent, inheritedComponent);
+      }
+    }
+    let keys = getOwnPropertyNames(sourceComponent);
+    if (getOwnPropertySymbols) {
+      keys = keys.concat(getOwnPropertySymbols(sourceComponent));
+    }
+    const targetStatics = getStatics(targetComponent);
+    const sourceStatics = getStatics(sourceComponent);
+    for (let i = 0; i < keys.length; ++i) {
+      const key = keys[i];
+      if (!KNOWN_STATICS[key] && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {
+        const descriptor = getOwnPropertyDescriptor(sourceComponent, key);
+        try {
+          defineProperty(targetComponent, key, descriptor);
+        } catch (e) {
+        }
+      }
+    }
+  }
+  return targetComponent;
+}
+
+// src/components/Context.ts
+var ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`);
+var gT = typeof globalThis !== "undefined" ? globalThis : (
+  /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */
+  {}
+);
+function getContext() {
+  if (!React.createContext) return {};
+  const contextMap = gT[ContextKey] ??= /* @__PURE__ */ new Map();
+  let realContext = contextMap.get(React.createContext);
+  if (!realContext) {
+    realContext = React.createContext(
+      null
+    );
+    if (process.env.NODE_ENV !== "production") {
+      realContext.displayName = "ReactRedux";
+    }
+    contextMap.set(React.createContext, realContext);
+  }
+  return realContext;
+}
+var ReactReduxContext = /* @__PURE__ */ getContext();
+
+// src/components/connect.tsx
+var NO_SUBSCRIPTION_ARRAY = [null, null];
+var stringifyComponent = (Comp) => {
+  try {
+    return JSON.stringify(Comp);
+  } catch (err) {
+    return String(Comp);
+  }
+};
+function useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {
+  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);
+}
+function captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs) {
+  lastWrapperProps.current = wrapperProps;
+  renderIsScheduled.current = false;
+  if (childPropsFromStoreUpdate.current) {
+    childPropsFromStoreUpdate.current = null;
+    notifyNestedSubs();
+  }
+}
+function subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, additionalSubscribeListener) {
+  if (!shouldHandleStateChanges) return () => {
+  };
+  let didUnsubscribe = false;
+  let lastThrownError = null;
+  const checkForUpdates = () => {
+    if (didUnsubscribe || !isMounted.current) {
+      return;
+    }
+    const latestStoreState = store.getState();
+    let newChildProps, error;
+    try {
+      newChildProps = childPropsSelector(
+        latestStoreState,
+        lastWrapperProps.current
+      );
+    } catch (e) {
+      error = e;
+      lastThrownError = e;
+    }
+    if (!error) {
+      lastThrownError = null;
+    }
+    if (newChildProps === lastChildProps.current) {
+      if (!renderIsScheduled.current) {
+        notifyNestedSubs();
+      }
+    } else {
+      lastChildProps.current = newChildProps;
+      childPropsFromStoreUpdate.current = newChildProps;
+      renderIsScheduled.current = true;
+      additionalSubscribeListener();
+    }
+  };
+  subscription.onStateChange = checkForUpdates;
+  subscription.trySubscribe();
+  checkForUpdates();
+  const unsubscribeWrapper = () => {
+    didUnsubscribe = true;
+    subscription.tryUnsubscribe();
+    subscription.onStateChange = null;
+    if (lastThrownError) {
+      throw lastThrownError;
+    }
+  };
+  return unsubscribeWrapper;
+}
+function strictEqual(a, b) {
+  return a === b;
+}
+var hasWarnedAboutDeprecatedPureOption = false;
+function connect(mapStateToProps, mapDispatchToProps, mergeProps, {
+  // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.
+  // @ts-ignore
+  pure,
+  areStatesEqual = strictEqual,
+  areOwnPropsEqual = shallowEqual,
+  areStatePropsEqual = shallowEqual,
+  areMergedPropsEqual = shallowEqual,
+  // use React's forwardRef to expose a ref of the wrapped component
+  forwardRef = false,
+  // the context consumer to use
+  context = ReactReduxContext
+} = {}) {
+  if (process.env.NODE_ENV !== "production") {
+    if (pure !== void 0 && !hasWarnedAboutDeprecatedPureOption) {
+      hasWarnedAboutDeprecatedPureOption = true;
+      warning(
+        'The `pure` option has been removed. `connect` is now always a "pure/memoized" component'
+      );
+    }
+  }
+  const Context = context;
+  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);
+  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);
+  const initMergeProps = mergePropsFactory(mergeProps);
+  const shouldHandleStateChanges = Boolean(mapStateToProps);
+  const wrapWithConnect = (WrappedComponent) => {
+    if (process.env.NODE_ENV !== "production") {
+      const isValid = /* @__PURE__ */ isValidElementType(WrappedComponent);
+      if (!isValid)
+        throw new Error(
+          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(
+            WrappedComponent
+          )}`
+        );
+    }
+    const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || "Component";
+    const displayName = `Connect(${wrappedComponentName})`;
+    const selectorFactoryOptions = {
+      shouldHandleStateChanges,
+      displayName,
+      wrappedComponentName,
+      WrappedComponent,
+      // @ts-ignore
+      initMapStateToProps,
+      initMapDispatchToProps,
+      initMergeProps,
+      areStatesEqual,
+      areStatePropsEqual,
+      areOwnPropsEqual,
+      areMergedPropsEqual
+    };
+    function ConnectFunction(props) {
+      const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {
+        const { reactReduxForwardedRef: reactReduxForwardedRef2, ...wrapperProps2 } = props;
+        return [props.context, reactReduxForwardedRef2, wrapperProps2];
+      }, [props]);
+      const ContextToUse = React.useMemo(() => {
+        let ResultContext = Context;
+        if (propsContext?.Consumer) {
+          if (process.env.NODE_ENV !== "production") {
+            const isValid = /* @__PURE__ */ isContextConsumer(
+              // @ts-ignore
+              /* @__PURE__ */ React.createElement(propsContext.Consumer, null)
+            );
+            if (!isValid) {
+              throw new Error(
+                "You must pass a valid React context consumer as `props.context`"
+              );
+            }
+            ResultContext = propsContext;
+          }
+        }
+        return ResultContext;
+      }, [propsContext, Context]);
+      const contextValue = React.useContext(ContextToUse);
+      const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);
+      const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);
+      if (process.env.NODE_ENV !== "production" && !didStoreComeFromProps && !didStoreComeFromContext) {
+        throw new Error(
+          `Could not find "store" in the context of "${displayName}". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to ${displayName} in connect options.`
+        );
+      }
+      const store = didStoreComeFromProps ? props.store : contextValue.store;
+      const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;
+      const childPropsSelector = React.useMemo(() => {
+        return finalPropsSelectorFactory(store.dispatch, selectorFactoryOptions);
+      }, [store]);
+      const [subscription, notifyNestedSubs] = React.useMemo(() => {
+        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY;
+        const subscription2 = createSubscription(
+          store,
+          didStoreComeFromProps ? void 0 : contextValue.subscription
+        );
+        const notifyNestedSubs2 = subscription2.notifyNestedSubs.bind(subscription2);
+        return [subscription2, notifyNestedSubs2];
+      }, [store, didStoreComeFromProps, contextValue]);
+      const overriddenContextValue = React.useMemo(() => {
+        if (didStoreComeFromProps) {
+          return contextValue;
+        }
+        return {
+          ...contextValue,
+          subscription
+        };
+      }, [didStoreComeFromProps, contextValue, subscription]);
+      const lastChildProps = React.useRef(void 0);
+      const lastWrapperProps = React.useRef(wrapperProps);
+      const childPropsFromStoreUpdate = React.useRef(void 0);
+      const renderIsScheduled = React.useRef(false);
+      const isMounted = React.useRef(false);
+      const latestSubscriptionCallbackError = React.useRef(
+        void 0
+      );
+      useIsomorphicLayoutEffect(() => {
+        isMounted.current = true;
+        return () => {
+          isMounted.current = false;
+        };
+      }, []);
+      const actualChildPropsSelector = React.useMemo(() => {
+        const selector = () => {
+          if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {
+            return childPropsFromStoreUpdate.current;
+          }
+          return childPropsSelector(store.getState(), wrapperProps);
+        };
+        return selector;
+      }, [store, wrapperProps]);
+      const subscribeForReact = React.useMemo(() => {
+        const subscribe = (reactListener) => {
+          if (!subscription) {
+            return () => {
+            };
+          }
+          return subscribeUpdates(
+            shouldHandleStateChanges,
+            store,
+            subscription,
+            // @ts-ignore
+            childPropsSelector,
+            lastWrapperProps,
+            lastChildProps,
+            renderIsScheduled,
+            isMounted,
+            childPropsFromStoreUpdate,
+            notifyNestedSubs,
+            reactListener
+          );
+        };
+        return subscribe;
+      }, [subscription]);
+      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [
+        lastWrapperProps,
+        lastChildProps,
+        renderIsScheduled,
+        wrapperProps,
+        childPropsFromStoreUpdate,
+        notifyNestedSubs
+      ]);
+      let actualChildProps;
+      try {
+        actualChildProps = React.useSyncExternalStore(
+          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing
+          subscribeForReact,
+          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,
+          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.
+          actualChildPropsSelector,
+          getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector
+        );
+      } catch (err) {
+        if (latestSubscriptionCallbackError.current) {
+          ;
+          err.message += `
+The error may be correlated with this previous error:
+${latestSubscriptionCallbackError.current.stack}
+
+`;
+        }
+        throw err;
+      }
+      useIsomorphicLayoutEffect(() => {
+        latestSubscriptionCallbackError.current = void 0;
+        childPropsFromStoreUpdate.current = void 0;
+        lastChildProps.current = actualChildProps;
+      });
+      const renderedWrappedComponent = React.useMemo(() => {
+        return (
+          // @ts-ignore
+          /* @__PURE__ */ React.createElement(
+            WrappedComponent,
+            {
+              ...actualChildProps,
+              ref: reactReduxForwardedRef
+            }
+          )
+        );
+      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]);
+      const renderedChild = React.useMemo(() => {
+        if (shouldHandleStateChanges) {
+          return /* @__PURE__ */ React.createElement(ContextToUse.Provider, { value: overriddenContextValue }, renderedWrappedComponent);
+        }
+        return renderedWrappedComponent;
+      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);
+      return renderedChild;
+    }
+    const _Connect = React.memo(ConnectFunction);
+    const Connect = _Connect;
+    Connect.WrappedComponent = WrappedComponent;
+    Connect.displayName = ConnectFunction.displayName = displayName;
+    if (forwardRef) {
+      const _forwarded = React.forwardRef(
+        function forwardConnectRef(props, ref) {
+          return /* @__PURE__ */ React.createElement(Connect, { ...props, reactReduxForwardedRef: ref });
+        }
+      );
+      const forwarded = _forwarded;
+      forwarded.displayName = displayName;
+      forwarded.WrappedComponent = WrappedComponent;
+      return /* @__PURE__ */ hoistNonReactStatics(forwarded, WrappedComponent);
+    }
+    return /* @__PURE__ */ hoistNonReactStatics(Connect, WrappedComponent);
+  };
+  return wrapWithConnect;
+}
+var connect_default = connect;
+
+// src/components/Provider.tsx
+function Provider(providerProps) {
+  const { children, context, serverState, store } = providerProps;
+  const contextValue = React.useMemo(() => {
+    const subscription = createSubscription(store);
+    const baseContextValue = {
+      store,
+      subscription,
+      getServerState: serverState ? () => serverState : void 0
+    };
+    if (process.env.NODE_ENV === "production") {
+      return baseContextValue;
+    } else {
+      const { identityFunctionCheck = "once", stabilityCheck = "once" } = providerProps;
+      return /* @__PURE__ */ Object.assign(baseContextValue, {
+        stabilityCheck,
+        identityFunctionCheck
+      });
+    }
+  }, [store, serverState]);
+  const previousState = React.useMemo(() => store.getState(), [store]);
+  useIsomorphicLayoutEffect(() => {
+    const { subscription } = contextValue;
+    subscription.onStateChange = subscription.notifyNestedSubs;
+    subscription.trySubscribe();
+    if (previousState !== store.getState()) {
+      subscription.notifyNestedSubs();
+    }
+    return () => {
+      subscription.tryUnsubscribe();
+      subscription.onStateChange = void 0;
+    };
+  }, [contextValue, previousState]);
+  const Context = context || ReactReduxContext;
+  return /* @__PURE__ */ React.createElement(Context.Provider, { value: contextValue }, children);
+}
+var Provider_default = Provider;
+
+// src/hooks/useReduxContext.ts
+function createReduxContextHook(context = ReactReduxContext) {
+  return function useReduxContext2() {
+    const contextValue = React.useContext(context);
+    if (process.env.NODE_ENV !== "production" && !contextValue) {
+      throw new Error(
+        "could not find react-redux context value; please ensure the component is wrapped in a <Provider>"
+      );
+    }
+    return contextValue;
+  };
+}
+var useReduxContext = /* @__PURE__ */ createReduxContextHook();
+
+// src/hooks/useStore.ts
+function createStoreHook(context = ReactReduxContext) {
+  const useReduxContext2 = context === ReactReduxContext ? useReduxContext : (
+    // @ts-ignore
+    createReduxContextHook(context)
+  );
+  const useStore2 = () => {
+    const { store } = useReduxContext2();
+    return store;
+  };
+  Object.assign(useStore2, {
+    withTypes: () => useStore2
+  });
+  return useStore2;
+}
+var useStore = /* @__PURE__ */ createStoreHook();
+
+// src/hooks/useDispatch.ts
+function createDispatchHook(context = ReactReduxContext) {
+  const useStore2 = context === ReactReduxContext ? useStore : createStoreHook(context);
+  const useDispatch2 = () => {
+    const store = useStore2();
+    return store.dispatch;
+  };
+  Object.assign(useDispatch2, {
+    withTypes: () => useDispatch2
+  });
+  return useDispatch2;
+}
+var useDispatch = /* @__PURE__ */ createDispatchHook();
+
+// src/hooks/useSelector.ts
+import { useSyncExternalStoreWithSelector } from "use-sync-external-store/with-selector.js";
+var refEquality = (a, b) => a === b;
+function createSelectorHook(context = ReactReduxContext) {
+  const useReduxContext2 = context === ReactReduxContext ? useReduxContext : createReduxContextHook(context);
+  const useSelector2 = (selector, equalityFnOrOptions = {}) => {
+    const { equalityFn = refEquality } = typeof equalityFnOrOptions === "function" ? { equalityFn: equalityFnOrOptions } : equalityFnOrOptions;
+    if (process.env.NODE_ENV !== "production") {
+      if (!selector) {
+        throw new Error(`You must pass a selector to useSelector`);
+      }
+      if (typeof selector !== "function") {
+        throw new Error(`You must pass a function as a selector to useSelector`);
+      }
+      if (typeof equalityFn !== "function") {
+        throw new Error(
+          `You must pass a function as an equality function to useSelector`
+        );
+      }
+    }
+    const reduxContext = useReduxContext2();
+    const { store, subscription, getServerState } = reduxContext;
+    const firstRun = React.useRef(true);
+    const wrappedSelector = React.useCallback(
+      {
+        [selector.name](state) {
+          const selected = selector(state);
+          if (process.env.NODE_ENV !== "production") {
+            const { devModeChecks = {} } = typeof equalityFnOrOptions === "function" ? {} : equalityFnOrOptions;
+            const { identityFunctionCheck, stabilityCheck } = reduxContext;
+            const {
+              identityFunctionCheck: finalIdentityFunctionCheck,
+              stabilityCheck: finalStabilityCheck
+            } = {
+              stabilityCheck,
+              identityFunctionCheck,
+              ...devModeChecks
+            };
+            if (finalStabilityCheck === "always" || finalStabilityCheck === "once" && firstRun.current) {
+              const toCompare = selector(state);
+              if (!equalityFn(selected, toCompare)) {
+                let stack = void 0;
+                try {
+                  throw new Error();
+                } catch (e) {
+                  ;
+                  ({ stack } = e);
+                }
+                console.warn(
+                  "Selector " + (selector.name || "unknown") + " returned a different result when called with the same parameters. This can lead to unnecessary rerenders.\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization",
+                  {
+                    state,
+                    selected,
+                    selected2: toCompare,
+                    stack
+                  }
+                );
+              }
+            }
+            if (finalIdentityFunctionCheck === "always" || finalIdentityFunctionCheck === "once" && firstRun.current) {
+              if (selected === state) {
+                let stack = void 0;
+                try {
+                  throw new Error();
+                } catch (e) {
+                  ;
+                  ({ stack } = e);
+                }
+                console.warn(
+                  "Selector " + (selector.name || "unknown") + " returned the root state when called. This can lead to unnecessary rerenders.\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.",
+                  { stack }
+                );
+              }
+            }
+            if (firstRun.current) firstRun.current = false;
+          }
+          return selected;
+        }
+      }[selector.name],
+      [selector]
+    );
+    const selectedState = useSyncExternalStoreWithSelector(
+      subscription.addNestedSub,
+      store.getState,
+      getServerState || store.getState,
+      wrappedSelector,
+      equalityFn
+    );
+    React.useDebugValue(selectedState);
+    return selectedState;
+  };
+  Object.assign(useSelector2, {
+    withTypes: () => useSelector2
+  });
+  return useSelector2;
+}
+var useSelector = /* @__PURE__ */ createSelectorHook();
+
+// src/exports.ts
+var batch = defaultNoopBatch;
+export {
+  Provider_default as Provider,
+  ReactReduxContext,
+  batch,
+  connect_default as connect,
+  createDispatchHook,
+  createSelectorHook,
+  createStoreHook,
+  shallowEqual,
+  useDispatch,
+  useSelector,
+  useStore
+};
+//# sourceMappingURL=react-redux.mjs.map
Index: node_modules/react-redux/dist/react-redux.mjs.map
===================================================================
--- node_modules/react-redux/dist/react-redux.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/react-redux.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/utils/react.ts","../src/utils/react-is.ts","../src/utils/warning.ts","../src/connect/verifySubselectors.ts","../src/connect/selectorFactory.ts","../src/utils/bindActionCreators.ts","../src/utils/isPlainObject.ts","../src/utils/verifyPlainObject.ts","../src/connect/wrapMapToProps.ts","../src/connect/invalidArgFactory.ts","../src/connect/mapDispatchToProps.ts","../src/connect/mapStateToProps.ts","../src/connect/mergeProps.ts","../src/utils/batch.ts","../src/utils/Subscription.ts","../src/utils/useIsomorphicLayoutEffect.ts","../src/utils/shallowEqual.ts","../src/utils/hoistStatics.ts","../src/components/Context.ts","../src/components/connect.tsx","../src/components/Provider.tsx","../src/hooks/useReduxContext.ts","../src/hooks/useStore.ts","../src/hooks/useDispatch.ts","../src/hooks/useSelector.ts","../src/exports.ts"],"sourcesContent":["import * as React from 'react'\n\nexport { React }\n","import type { ElementType, MemoExoticComponent, ReactElement } from 'react'\nimport { React } from './react'\n\n// Directly ported from:\n// https://unpkg.com/browse/react-is@19.0.0/cjs/react-is.production.js\n// It's very possible this could change in the future, but given that\n// we only use these in `connect`, this is a low priority.\n\nexport const IS_REACT_19 = /* @__PURE__ */ React.version.startsWith('19')\n\nconst REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(\n  IS_REACT_19 ? 'react.transitional.element' : 'react.element',\n)\nconst REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for('react.portal')\nconst REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for('react.fragment')\nconst REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for('react.strict_mode')\nconst REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for('react.profiler')\nconst REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for('react.consumer')\nconst REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for('react.context')\nconst REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for('react.forward_ref')\nconst REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for('react.suspense')\nconst REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(\n  'react.suspense_list',\n)\nconst REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for('react.memo')\nconst REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for('react.lazy')\nconst REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for('react.offscreen')\nconst REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(\n  'react.client.reference',\n)\n\nexport const ForwardRef = REACT_FORWARD_REF_TYPE\nexport const Memo = REACT_MEMO_TYPE\n\nexport function isValidElementType(type: any): type is ElementType {\n  return typeof type === 'string' ||\n    typeof type === 'function' ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    type === REACT_OFFSCREEN_TYPE ||\n    (typeof type === 'object' &&\n      type !== null &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        type.getModuleId !== undefined))\n    ? !0\n    : !1\n}\n\nfunction typeOf(object: any): symbol | undefined {\n  if (typeof object === 'object' && object !== null) {\n    const { $$typeof } = object\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n            return object\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object\n              case REACT_CONSUMER_TYPE:\n                return object\n              default:\n                return $$typeof\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof\n    }\n  }\n}\n\nexport function isContextConsumer(object: any): object is ReactElement {\n  return IS_REACT_19\n    ? typeOf(object) === REACT_CONSUMER_TYPE\n    : typeOf(object) === REACT_CONTEXT_TYPE\n}\n\nexport function isMemo(object: any): object is MemoExoticComponent<any> {\n  return typeOf(object) === REACT_MEMO_TYPE\n}\n","/**\r\n * Prints a warning in the console if it exists.\r\n *\r\n * @param {String} message The warning message.\r\n * @returns {void}\r\n */\r\nexport default function warning(message: string) {\r\n  /* eslint-disable no-console */\r\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\r\n    console.error(message)\r\n  }\r\n  /* eslint-enable no-console */\r\n  try {\r\n    // This error was thrown as a convenience so that if you enable\r\n    // \"break on all exceptions\" in your console,\r\n    // it would pause the execution at this line.\r\n    throw new Error(message)\r\n    /* eslint-disable no-empty */\r\n  } catch (e) {}\r\n  /* eslint-enable no-empty */\r\n}\r\n","import warning from '../utils/warning'\n\nfunction verify(selector: unknown, methodName: string): void {\n  if (!selector) {\n    throw new Error(`Unexpected value for ${methodName} in connect.`)\n  } else if (\n    methodName === 'mapStateToProps' ||\n    methodName === 'mapDispatchToProps'\n  ) {\n    if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) {\n      warning(\n        `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`,\n      )\n    }\n  }\n}\n\nexport default function verifySubselectors(\n  mapStateToProps: unknown,\n  mapDispatchToProps: unknown,\n  mergeProps: unknown,\n): void {\n  verify(mapStateToProps, 'mapStateToProps')\n  verify(mapDispatchToProps, 'mapDispatchToProps')\n  verify(mergeProps, 'mergeProps')\n}\n","import type { Dispatch, Action } from 'redux'\nimport type { ComponentType } from 'react'\nimport verifySubselectors from './verifySubselectors'\nimport type { EqualityFn, ExtendedEqualityFn } from '../types'\n\nexport type SelectorFactory<S, TProps, TOwnProps, TFactoryOptions> = (\n  dispatch: Dispatch<Action<string>>,\n  factoryOptions: TFactoryOptions,\n) => Selector<S, TProps, TOwnProps>\n\nexport type Selector<S, TProps, TOwnProps = null> = TOwnProps extends\n  | null\n  | undefined\n  ? (state: S) => TProps\n  : (state: S, ownProps: TOwnProps) => TProps\n\nexport type MapStateToProps<TStateProps, TOwnProps, State> = (\n  state: State,\n  ownProps: TOwnProps,\n) => TStateProps\n\nexport type MapStateToPropsFactory<TStateProps, TOwnProps, State> = (\n  initialState: State,\n  ownProps: TOwnProps,\n) => MapStateToProps<TStateProps, TOwnProps, State>\n\nexport type MapStateToPropsParam<TStateProps, TOwnProps, State> =\n  | MapStateToPropsFactory<TStateProps, TOwnProps, State>\n  | MapStateToProps<TStateProps, TOwnProps, State>\n  | null\n  | undefined\n\nexport type MapDispatchToPropsFunction<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => TDispatchProps\n\nexport type MapDispatchToProps<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n  | TDispatchProps\n\nexport type MapDispatchToPropsFactory<TDispatchProps, TOwnProps> = (\n  dispatch: Dispatch<Action<string>>,\n  ownProps: TOwnProps,\n) => MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsParam<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToProps<TDispatchProps, TOwnProps>\n\nexport type MapDispatchToPropsNonObject<TDispatchProps, TOwnProps> =\n  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>\n  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>\n\nexport type MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> = (\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n) => TMergedProps\n\ninterface PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly areStatesEqual: ExtendedEqualityFn<State, TOwnProps>\n  readonly areStatePropsEqual: EqualityFn<TStateProps>\n  readonly areOwnPropsEqual: EqualityFn<TOwnProps>\n}\n\nfunction pureFinalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  mapStateToProps: WrappedMapStateToProps<TStateProps, TOwnProps, State>,\n  mapDispatchToProps: WrappedMapDispatchToProps<TDispatchProps, TOwnProps>,\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  dispatch: Dispatch<Action<string>>,\n  {\n    areStatesEqual,\n    areOwnPropsEqual,\n    areStatePropsEqual,\n  }: PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State>,\n) {\n  let hasRunAtLeastOnce = false\n  let state: State\n  let ownProps: TOwnProps\n  let stateProps: TStateProps\n  let dispatchProps: TDispatchProps\n  let mergedProps: TMergedProps\n\n  function handleFirstCall(firstState: State, firstOwnProps: TOwnProps) {\n    state = firstState\n    ownProps = firstOwnProps\n    stateProps = mapStateToProps(state, ownProps)\n    dispatchProps = mapDispatchToProps(dispatch, ownProps)\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    hasRunAtLeastOnce = true\n    return mergedProps\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps)\n      stateProps = mapStateToProps(state, ownProps)\n\n    if (mapDispatchToProps.dependsOnOwnProps)\n      dispatchProps = mapDispatchToProps(dispatch, ownProps)\n\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n    return mergedProps\n  }\n\n  function handleNewState() {\n    const nextStateProps = mapStateToProps(state, ownProps)\n    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps)\n    stateProps = nextStateProps\n\n    if (statePropsChanged)\n      mergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n    return mergedProps\n  }\n\n  function handleSubsequentCalls(nextState: State, nextOwnProps: TOwnProps) {\n    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps)\n    const stateChanged = !areStatesEqual(\n      nextState,\n      state,\n      nextOwnProps,\n      ownProps,\n    )\n    state = nextState\n    ownProps = nextOwnProps\n\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState()\n    if (propsChanged) return handleNewProps()\n    if (stateChanged) return handleNewState()\n    return mergedProps\n  }\n\n  return function pureFinalPropsSelector(\n    nextState: State,\n    nextOwnProps: TOwnProps,\n  ) {\n    return hasRunAtLeastOnce\n      ? handleSubsequentCalls(nextState, nextOwnProps)\n      : handleFirstCall(nextState, nextOwnProps)\n  }\n}\n\ninterface WrappedMapStateToProps<TStateProps, TOwnProps, State> {\n  (state: State, ownProps: TOwnProps): TStateProps\n  readonly dependsOnOwnProps: boolean\n}\n\ninterface WrappedMapDispatchToProps<TDispatchProps, TOwnProps> {\n  (dispatch: Dispatch<Action<string>>, ownProps: TOwnProps): TDispatchProps\n  readonly dependsOnOwnProps: boolean\n}\n\nexport interface InitOptions<TStateProps, TOwnProps, TMergedProps, State>\n  extends PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {\n  readonly shouldHandleStateChanges: boolean\n  readonly displayName: string\n  readonly wrappedComponentName: string\n  readonly WrappedComponent: ComponentType<TOwnProps>\n  readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n}\n\nexport interface SelectorFactoryOptions<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n> extends InitOptions<TStateProps, TOwnProps, TMergedProps, State> {\n  readonly initMapStateToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapStateToProps<TStateProps, TOwnProps, State>\n  readonly initMapDispatchToProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => WrappedMapDispatchToProps<TDispatchProps, TOwnProps>\n  readonly initMergeProps: (\n    dispatch: Dispatch<Action<string>>,\n    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,\n  ) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>\n}\n\n// TODO: Add more comments\n\n// The selector returned by selectorFactory will memoize its results,\n// allowing connect's shouldComponentUpdate to return false if final\n// props have not changed.\n\nexport default function finalPropsSelectorFactory<\n  TStateProps,\n  TOwnProps,\n  TDispatchProps,\n  TMergedProps,\n  State,\n>(\n  dispatch: Dispatch<Action<string>>,\n  {\n    initMapStateToProps,\n    initMapDispatchToProps,\n    initMergeProps,\n    ...options\n  }: SelectorFactoryOptions<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >,\n) {\n  const mapStateToProps = initMapStateToProps(dispatch, options)\n  const mapDispatchToProps = initMapDispatchToProps(dispatch, options)\n  const mergeProps = initMergeProps(dispatch, options)\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps)\n  }\n\n  return pureFinalPropsSelectorFactory<\n    TStateProps,\n    TOwnProps,\n    TDispatchProps,\n    TMergedProps,\n    State\n  >(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options)\n}\n","import type { ActionCreatorsMapObject, Dispatch } from 'redux'\n\nexport default function bindActionCreators(\n  actionCreators: ActionCreatorsMapObject,\n  dispatch: Dispatch,\n): ActionCreatorsMapObject {\n  const boundActionCreators: ActionCreatorsMapObject = {}\n\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key]\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args))\n    }\n  }\n  return boundActionCreators\n}\n","/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: unknown) {\n  if (typeof obj !== 'object' || obj === null) return false\n\n  const proto = Object.getPrototypeOf(obj)\n  if (proto === null) return true\n\n  let baseProto = proto\n  while (Object.getPrototypeOf(baseProto) !== null) {\n    baseProto = Object.getPrototypeOf(baseProto)\n  }\n\n  return proto === baseProto\n}\n","import isPlainObject from './isPlainObject'\nimport warning from './warning'\n\nexport default function verifyPlainObject(\n  value: unknown,\n  displayName: string,\n  methodName: string,\n) {\n  if (!isPlainObject(value)) {\n    warning(\n      `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`,\n    )\n  }\n}\n","import type { ActionCreatorsMapObject, Dispatch, ActionCreator } from 'redux'\n\nimport type { FixTypeLater } from '../types'\nimport verifyPlainObject from '../utils/verifyPlainObject'\n\ntype AnyState = { [key: string]: any }\ntype StateOrDispatch<S extends AnyState = AnyState> = S | Dispatch\n\ntype AnyProps = { [key: string]: any }\n\nexport type MapToProps<P extends AnyProps = AnyProps> = {\n  // eslint-disable-next-line no-unused-vars\n  (stateOrDispatch: StateOrDispatch, ownProps?: P): FixTypeLater\n  dependsOnOwnProps?: boolean\n}\n\nexport function wrapMapToPropsConstant(\n  // * Note:\n  //  It seems that the dispatch argument\n  //  could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing)\n  //  and a state object in some others (ex: whenMapStateToPropsIsMissing)\n  // eslint-disable-next-line no-unused-vars\n  getConstant: (dispatch: Dispatch) =>\n    | {\n        dispatch?: Dispatch\n        dependsOnOwnProps?: boolean\n      }\n    | ActionCreatorsMapObject\n    | ActionCreator<any>,\n) {\n  return function initConstantSelector(dispatch: Dispatch) {\n    const constant = getConstant(dispatch)\n\n    function constantSelector() {\n      return constant\n    }\n    constantSelector.dependsOnOwnProps = false\n    return constantSelector\n  }\n}\n\n// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps?\nfunction getDependsOnOwnProps(mapToProps: MapToProps) {\n  return mapToProps.dependsOnOwnProps\n    ? Boolean(mapToProps.dependsOnOwnProps)\n    : mapToProps.length !== 1\n}\n\n// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\nexport function wrapMapToPropsFunc<P extends AnyProps = AnyProps>(\n  mapToProps: MapToProps,\n  methodName: string,\n) {\n  return function initProxySelector(\n    dispatch: Dispatch,\n    { displayName }: { displayName: string },\n  ) {\n    const proxy = function mapToPropsProxy(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      return proxy.dependsOnOwnProps\n        ? proxy.mapToProps(stateOrDispatch, ownProps)\n        : proxy.mapToProps(stateOrDispatch, undefined)\n    }\n\n    // allow detectFactoryAndVerify to get ownProps\n    proxy.dependsOnOwnProps = true\n\n    proxy.mapToProps = function detectFactoryAndVerify(\n      stateOrDispatch: StateOrDispatch,\n      ownProps?: P,\n    ): MapToProps {\n      proxy.mapToProps = mapToProps\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps)\n      let props = proxy(stateOrDispatch, ownProps)\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props)\n        props = proxy(stateOrDispatch, ownProps)\n      }\n\n      if (process.env.NODE_ENV !== 'production')\n        verifyPlainObject(props, displayName, methodName)\n\n      return props\n    }\n\n    return proxy\n  }\n}\n","import type { Action, Dispatch } from 'redux'\n\nexport function createInvalidArgFactory(arg: unknown, name: string) {\n  return (\n    dispatch: Dispatch<Action<string>>,\n    options: { readonly wrappedComponentName: string },\n  ) => {\n    throw new Error(\n      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${\n        options.wrappedComponentName\n      }.`,\n    )\n  }\n}\n","import type { Action, Dispatch } from 'redux'\nimport bindActionCreators from '../utils/bindActionCreators'\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapDispatchToPropsParam } from './selectorFactory'\n\nexport function mapDispatchToPropsFactory<TDispatchProps, TOwnProps>(\n  mapDispatchToProps:\n    | MapDispatchToPropsParam<TDispatchProps, TOwnProps>\n    | undefined,\n) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object'\n    ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) =>\n        // @ts-ignore\n        bindActionCreators(mapDispatchToProps, dispatch),\n      )\n    : !mapDispatchToProps\n      ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) => ({\n          dispatch,\n        }))\n      : typeof mapDispatchToProps === 'function'\n        ? // @ts-ignore\n          wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps')\n        : createInvalidArgFactory(mapDispatchToProps, 'mapDispatchToProps')\n}\n","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MapStateToPropsParam } from './selectorFactory'\n\nexport function mapStateToPropsFactory<TStateProps, TOwnProps, State>(\n  mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n) {\n  return !mapStateToProps\n    ? wrapMapToPropsConstant(() => ({}))\n    : typeof mapStateToProps === 'function'\n      ? // @ts-ignore\n        wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps')\n      : createInvalidArgFactory(mapStateToProps, 'mapStateToProps')\n}\n","import type { Action, Dispatch } from 'redux'\nimport verifyPlainObject from '../utils/verifyPlainObject'\nimport { createInvalidArgFactory } from './invalidArgFactory'\nimport type { MergeProps } from './selectorFactory'\nimport type { EqualityFn } from '../types'\n\nfunction defaultMergeProps<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  stateProps: TStateProps,\n  dispatchProps: TDispatchProps,\n  ownProps: TOwnProps,\n): TMergedProps {\n  // @ts-ignore\n  return { ...ownProps, ...stateProps, ...dispatchProps }\n}\n\nfunction wrapMergePropsFunc<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n): (\n  dispatch: Dispatch<Action<string>>,\n  options: {\n    readonly displayName: string\n    readonly areMergedPropsEqual: EqualityFn<TMergedProps>\n  },\n) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> {\n  return function initMergePropsProxy(\n    dispatch,\n    { displayName, areMergedPropsEqual },\n  ) {\n    let hasRunOnce = false\n    let mergedProps: TMergedProps\n\n    return function mergePropsProxy(\n      stateProps: TStateProps,\n      dispatchProps: TDispatchProps,\n      ownProps: TOwnProps,\n    ) {\n      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps)\n\n      if (hasRunOnce) {\n        if (!areMergedPropsEqual(nextMergedProps, mergedProps))\n          mergedProps = nextMergedProps\n      } else {\n        hasRunOnce = true\n        mergedProps = nextMergedProps\n\n        if (process.env.NODE_ENV !== 'production')\n          verifyPlainObject(mergedProps, displayName, 'mergeProps')\n      }\n\n      return mergedProps\n    }\n  }\n}\n\nexport function mergePropsFactory<\n  TStateProps,\n  TDispatchProps,\n  TOwnProps,\n  TMergedProps,\n>(\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n) {\n  return !mergeProps\n    ? () => defaultMergeProps\n    : typeof mergeProps === 'function'\n      ? wrapMergePropsFunc(mergeProps)\n      : createInvalidArgFactory(mergeProps, 'mergeProps')\n}\n","// Default to a dummy \"batch\" implementation that just runs the callback\r\nexport function defaultNoopBatch(callback: () => void) {\r\n  callback()\r\n}\r\n","import { defaultNoopBatch as batch } from './batch'\n\n// encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\ntype VoidFunc = () => void\n\ntype Listener = {\n  callback: VoidFunc\n  next: Listener | null\n  prev: Listener | null\n}\n\nfunction createListenerCollection() {\n  let first: Listener | null = null\n  let last: Listener | null = null\n\n  return {\n    clear() {\n      first = null\n      last = null\n    },\n\n    notify() {\n      batch(() => {\n        let listener = first\n        while (listener) {\n          listener.callback()\n          listener = listener.next\n        }\n      })\n    },\n\n    get() {\n      const listeners: Listener[] = []\n      let listener = first\n      while (listener) {\n        listeners.push(listener)\n        listener = listener.next\n      }\n      return listeners\n    },\n\n    subscribe(callback: () => void) {\n      let isSubscribed = true\n\n      const listener: Listener = (last = {\n        callback,\n        next: null,\n        prev: last,\n      })\n\n      if (listener.prev) {\n        listener.prev.next = listener\n      } else {\n        first = listener\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return\n        isSubscribed = false\n\n        if (listener.next) {\n          listener.next.prev = listener.prev\n        } else {\n          last = listener.prev\n        }\n        if (listener.prev) {\n          listener.prev.next = listener.next\n        } else {\n          first = listener.next\n        }\n      }\n    },\n  }\n}\n\ntype ListenerCollection = ReturnType<typeof createListenerCollection>\n\nexport interface Subscription {\n  addNestedSub: (listener: VoidFunc) => VoidFunc\n  notifyNestedSubs: VoidFunc\n  handleChangeWrapper: VoidFunc\n  isSubscribed: () => boolean\n  onStateChange?: VoidFunc | null\n  trySubscribe: VoidFunc\n  tryUnsubscribe: VoidFunc\n  getListeners: () => ListenerCollection\n}\n\nconst nullListeners = {\n  notify() {},\n  get: () => [],\n} as unknown as ListenerCollection\n\nexport function createSubscription(store: any, parentSub?: Subscription) {\n  let unsubscribe: VoidFunc | undefined\n  let listeners: ListenerCollection = nullListeners\n\n  // Reasons to keep the subscription active\n  let subscriptionsAmount = 0\n\n  // Is this specific subscription subscribed (or only nested ones?)\n  let selfSubscribed = false\n\n  function addNestedSub(listener: () => void) {\n    trySubscribe()\n\n    const cleanupListener = listeners.subscribe(listener)\n\n    // cleanup nested sub\n    let removed = false\n    return () => {\n      if (!removed) {\n        removed = true\n        cleanupListener()\n        tryUnsubscribe()\n      }\n    }\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify()\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange()\n    }\n  }\n\n  function isSubscribed() {\n    return selfSubscribed\n  }\n\n  function trySubscribe() {\n    subscriptionsAmount++\n    if (!unsubscribe) {\n      unsubscribe = parentSub\n        ? parentSub.addNestedSub(handleChangeWrapper)\n        : store.subscribe(handleChangeWrapper)\n\n      listeners = createListenerCollection()\n    }\n  }\n\n  function tryUnsubscribe() {\n    subscriptionsAmount--\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe()\n      unsubscribe = undefined\n      listeners.clear()\n      listeners = nullListeners\n    }\n  }\n\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true\n      trySubscribe()\n    }\n  }\n\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false\n      tryUnsubscribe()\n    }\n  }\n\n  const subscription: Subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners,\n  }\n\n  return subscription\n}\n","import { React } from '../utils/react'\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\n// Matches logic in React's `shared/ExecutionEnvironment` file\nconst canUseDOM = () =>\n  !!(\n    typeof window !== 'undefined' &&\n    typeof window.document !== 'undefined' &&\n    typeof window.document.createElement !== 'undefined'\n  )\n\nconst isDOM = /* @__PURE__ */ canUseDOM()\n\n// Under React Native, we know that we always want to use useLayoutEffect\n\n/**\n * Checks if the code is running in a React Native environment.\n *\n * @returns Whether the code is running in a React Native environment.\n *\n * @see {@link https://github.com/facebook/react-native/issues/1331 Reference}\n */\nconst isRunningInReactNative = () =>\n  typeof navigator !== 'undefined' && navigator.product === 'ReactNative'\n\nconst isReactNative = /* @__PURE__ */ isRunningInReactNative()\n\nconst getUseIsomorphicLayoutEffect = () =>\n  isDOM || isReactNative ? React.useLayoutEffect : React.useEffect\n\nexport const useIsomorphicLayoutEffect =\n  /* @__PURE__ */ getUseIsomorphicLayoutEffect()\n","function is(x: unknown, y: unknown) {\r\n  if (x === y) {\r\n    return x !== 0 || y !== 0 || 1 / x === 1 / y\r\n  } else {\r\n    return x !== x && y !== y\r\n  }\r\n}\r\n\r\nexport default function shallowEqual(objA: any, objB: any) {\r\n  if (is(objA, objB)) return true\r\n\r\n  if (\r\n    typeof objA !== 'object' ||\r\n    objA === null ||\r\n    typeof objB !== 'object' ||\r\n    objB === null\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  const keysA = Object.keys(objA)\r\n  const keysB = Object.keys(objB)\r\n\r\n  if (keysA.length !== keysB.length) return false\r\n\r\n  for (let i = 0; i < keysA.length; i++) {\r\n    if (\r\n      !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\r\n      !is(objA[keysA[i]], objB[keysA[i]])\r\n    ) {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return true\r\n}\r\n","// Copied directly from:\n// https://github.com/mridgway/hoist-non-react-statics/blob/main/src/index.js\n// https://unpkg.com/browse/@types/hoist-non-react-statics@3.3.6/index.d.ts\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nimport type { ForwardRefExoticComponent, MemoExoticComponent } from 'react'\nimport { ForwardRef, Memo, isMemo } from '../utils/react-is'\n\nconst REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true,\n} as const\n\nconst FORWARD_REF_STATICS = {\n  $$typeof: true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n} as const\n\nconst MEMO_STATICS = {\n  $$typeof: true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true,\n} as const\n\nconst TYPE_STATICS = {\n  [ForwardRef]: FORWARD_REF_STATICS,\n  [Memo]: MEMO_STATICS,\n} as const\n\nfunction getStatics(component: any) {\n  // React v16.11 and below\n  if (isMemo(component)) {\n    return MEMO_STATICS\n  }\n\n  // React v16.12 and above\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS\n}\n\nexport type NonReactStatics<\n  Source,\n  C extends {\n    [key: string]: true\n  } = {},\n> = {\n  [key in Exclude<\n    keyof Source,\n    Source extends MemoExoticComponent<any>\n      ? keyof typeof MEMO_STATICS | keyof C\n      : Source extends ForwardRefExoticComponent<any>\n        ? keyof typeof FORWARD_REF_STATICS | keyof C\n        : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C\n  >]: Source[key]\n}\n\nconst defineProperty = Object.defineProperty\nconst getOwnPropertyNames = Object.getOwnPropertyNames\nconst getOwnPropertySymbols = Object.getOwnPropertySymbols\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor\nconst getPrototypeOf = Object.getPrototypeOf\nconst objectPrototype = Object.prototype\n\nexport default function hoistNonReactStatics<\n  Target,\n  Source,\n  CustomStatic extends {\n    [key: string]: true\n  } = {},\n>(\n  targetComponent: Target,\n  sourceComponent: Source,\n): Target & NonReactStatics<Source, CustomStatic> {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n\n    if (objectPrototype) {\n      const inheritedComponent = getPrototypeOf(sourceComponent)\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent)\n      }\n    }\n\n    let keys: (string | symbol)[] = getOwnPropertyNames(sourceComponent)\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent))\n    }\n\n    const targetStatics = getStatics(targetComponent)\n    const sourceStatics = getStatics(sourceComponent)\n\n    for (let i = 0; i < keys.length; ++i) {\n      const key = keys[i]\n      if (\n        !KNOWN_STATICS[key as keyof typeof KNOWN_STATICS] &&\n        !(sourceStatics && sourceStatics[key as keyof typeof sourceStatics]) &&\n        !(targetStatics && targetStatics[key as keyof typeof targetStatics])\n      ) {\n        const descriptor = getOwnPropertyDescriptor(sourceComponent, key)\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor!)\n        } catch (e) {\n          // ignore\n        }\n      }\n    }\n  }\n\n  return targetComponent as any\n}\n","import type { Context } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { Subscription } from '../utils/Subscription'\nimport type { ProviderProps } from './Provider'\n\nexport interface ReactReduxContextValue<\n  SS = any,\n  A extends Action<string> = UnknownAction,\n> extends Pick<ProviderProps, 'stabilityCheck' | 'identityFunctionCheck'> {\n  store: Store<SS, A>\n  subscription: Subscription\n  getServerState?: () => SS\n}\n\nconst ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`)\nconst gT: {\n  [ContextKey]?: Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >\n} = (\n  typeof globalThis !== 'undefined'\n    ? globalThis\n    : /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */ {}\n) as any\n\nfunction getContext(): Context<ReactReduxContextValue | null> {\n  if (!React.createContext) return {} as any\n\n  const contextMap = (gT[ContextKey] ??= new Map<\n    typeof React.createContext,\n    Context<ReactReduxContextValue | null>\n  >())\n  let realContext = contextMap.get(React.createContext)\n  if (!realContext) {\n    realContext = React.createContext<ReactReduxContextValue | null>(\n      null as any,\n    )\n    if (process.env.NODE_ENV !== 'production') {\n      realContext.displayName = 'ReactRedux'\n    }\n    contextMap.set(React.createContext, realContext)\n  }\n  return realContext\n}\n\nexport const ReactReduxContext = /*#__PURE__*/ getContext()\n\nexport type ReactReduxContextInstance = typeof ReactReduxContext\n","/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport type { ComponentType } from 'react'\nimport { React } from '../utils/react'\nimport { isValidElementType, isContextConsumer } from '../utils/react-is'\n\nimport type { Store } from 'redux'\n\nimport type {\n  ConnectedComponent,\n  InferableComponentEnhancer,\n  InferableComponentEnhancerWithProps,\n  ResolveThunks,\n  DispatchProp,\n  ConnectPropsMaybeWithoutContext,\n} from '../types'\n\nimport type {\n  MapStateToPropsParam,\n  MapDispatchToPropsParam,\n  MergeProps,\n  MapDispatchToPropsNonObject,\n  SelectorFactoryOptions,\n} from '../connect/selectorFactory'\nimport defaultSelectorFactory from '../connect/selectorFactory'\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps'\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps'\nimport { mergePropsFactory } from '../connect/mergeProps'\n\nimport type { Subscription } from '../utils/Subscription'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport shallowEqual from '../utils/shallowEqual'\nimport hoistStatics from '../utils/hoistStatics'\nimport warning from '../utils/warning'\n\nimport type {\n  ReactReduxContextValue,\n  ReactReduxContextInstance,\n} from './Context'\nimport { ReactReduxContext } from './Context'\n\n// Define some constant arrays just to avoid re-creating these\nconst EMPTY_ARRAY: [unknown, number] = [null, 0]\nconst NO_SUBSCRIPTION_ARRAY = [null, null]\n\n// Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\nconst stringifyComponent = (Comp: unknown) => {\n  try {\n    return JSON.stringify(Comp)\n  } catch (err) {\n    return String(Comp)\n  }\n}\n\ntype EffectFunc = (...args: any[]) => void | ReturnType<React.EffectCallback>\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n//   and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(\n  effectFunc: EffectFunc,\n  effectArgs: any[],\n  dependencies?: React.DependencyList,\n) {\n  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies)\n}\n\n// Effect callback, extracted: assign the latest props values to refs for later usage\nfunction captureWrapperProps(\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  wrapperProps: unknown,\n  // actualChildProps: unknown,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n) {\n  // We want to capture the wrapper props and child props we used for later comparisons\n  lastWrapperProps.current = wrapperProps\n  renderIsScheduled.current = false\n\n  // If the render was from a store update, clear out that reference and cascade the subscriber update\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null\n    notifyNestedSubs()\n  }\n}\n\n// Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\nfunction subscribeUpdates(\n  shouldHandleStateChanges: boolean,\n  store: Store,\n  subscription: Subscription,\n  childPropsSelector: (state: unknown, props: unknown) => unknown,\n  lastWrapperProps: React.MutableRefObject<unknown>,\n  lastChildProps: React.MutableRefObject<unknown>,\n  renderIsScheduled: React.MutableRefObject<boolean>,\n  isMounted: React.MutableRefObject<boolean>,\n  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,\n  notifyNestedSubs: () => void,\n  // forceComponentUpdateDispatch: React.Dispatch<any>,\n  additionalSubscribeListener: () => void,\n) {\n  // If we're not subscribed to the store, nothing to do here\n  if (!shouldHandleStateChanges) return () => {}\n\n  // Capture values for checking if and when this component unmounts\n  let didUnsubscribe = false\n  let lastThrownError: Error | null = null\n\n  // We'll run this callback every time a store subscription update propagates to this component\n  const checkForUpdates = () => {\n    if (didUnsubscribe || !isMounted.current) {\n      // Don't run stale listeners.\n      // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n      return\n    }\n\n    // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n    const latestStoreState = store.getState()\n\n    let newChildProps, error\n    try {\n      // Actually run the selector with the most recent store state and wrapper props\n      // to determine what the child props should be\n      newChildProps = childPropsSelector(\n        latestStoreState,\n        lastWrapperProps.current,\n      )\n    } catch (e) {\n      error = e\n      lastThrownError = e as Error | null\n    }\n\n    if (!error) {\n      lastThrownError = null\n    }\n\n    // If the child props haven't changed, nothing to do here - cascade the subscription update\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs()\n      }\n    } else {\n      // Save references to the new child props.  Note that we track the \"child props from store update\"\n      // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n      // forcing another re-render, which we don't want.\n      lastChildProps.current = newChildProps\n      childPropsFromStoreUpdate.current = newChildProps\n      renderIsScheduled.current = true\n\n      // TODO This is hacky and not how `uSES` is meant to be used\n      // Trigger the React `useSyncExternalStore` subscriber\n      additionalSubscribeListener()\n    }\n  }\n\n  // Actually subscribe to the nearest connected ancestor (or store)\n  subscription.onStateChange = checkForUpdates\n  subscription.trySubscribe()\n\n  // Pull data from the store after first render in case the store has\n  // changed since we began.\n  checkForUpdates()\n\n  const unsubscribeWrapper = () => {\n    didUnsubscribe = true\n    subscription.tryUnsubscribe()\n    subscription.onStateChange = null\n\n    if (lastThrownError) {\n      // It's possible that we caught an error due to a bad mapState function, but the\n      // parent re-rendered without this component and we're about to unmount.\n      // This shouldn't happen as long as we do top-down subscriptions correctly, but\n      // if we ever do those wrong, this throw will surface the error in our tests.\n      // In that case, throw the error from here so it doesn't get lost.\n      throw lastThrownError\n    }\n  }\n\n  return unsubscribeWrapper\n}\n\n// Reducer initial state creation for our update reducer\nconst initStateUpdates = () => EMPTY_ARRAY\n\nexport interface ConnectProps {\n  /** A custom Context instance that the component can use to access the store from an alternate Provider using that same Context instance */\n  context?: ReactReduxContextInstance\n  /** A Redux store instance to be used for subscriptions instead of the store from a Provider */\n  store?: Store\n}\n\ninterface InternalConnectProps extends ConnectProps {\n  reactReduxForwardedRef?: React.ForwardedRef<unknown>\n}\n\nfunction strictEqual(a: unknown, b: unknown) {\n  return a === b\n}\n\n/**\n * Infers the type of props that a connector will inject into a component.\n */\nexport type ConnectedProps<TConnector> =\n  TConnector extends InferableComponentEnhancerWithProps<\n    infer TInjectedProps,\n    any\n  >\n    ? unknown extends TInjectedProps\n      ? TConnector extends InferableComponentEnhancer<infer TInjectedProps>\n        ? TInjectedProps\n        : never\n      : TInjectedProps\n    : never\n\nexport interface ConnectOptions<\n  State = unknown,\n  TStateProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n> {\n  forwardRef?: boolean\n  context?: typeof ReactReduxContext\n  areStatesEqual?: (\n    nextState: State,\n    prevState: State,\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areOwnPropsEqual?: (\n    nextOwnProps: TOwnProps,\n    prevOwnProps: TOwnProps,\n  ) => boolean\n\n  areStatePropsEqual?: (\n    nextStateProps: TStateProps,\n    prevStateProps: TStateProps,\n  ) => boolean\n  areMergedPropsEqual?: (\n    nextMergedProps: TMergedProps,\n    prevMergedProps: TMergedProps,\n  ) => boolean\n}\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps\n * @param mapDispatchToProps\n * @param mergeProps\n * @param options\n */\nexport interface Connect<DefaultState = unknown> {\n  // tslint:disable:no-unnecessary-generics\n  (): InferableComponentEnhancer<DispatchProp>\n\n  /** mapState only */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  ): InferableComponentEnhancerWithProps<TStateProps & DispatchProp, TOwnProps>\n\n  /** mapDispatch only (as a function) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch only (as an object) */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (as a function)*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState and mapDispatch (nullish) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n  ): InferableComponentEnhancerWithProps<TStateProps, TOwnProps>\n\n  /** mapState and mapDispatch (as an object) */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mergeProps only */\n  <no_state = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<undefined, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and mergeProps */\n  <\n    TStateProps = {},\n    no_dispatch = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: MergeProps<TStateProps, DispatchProp, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapDispatch (as a object) and mergeProps */\n  <no_state = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<undefined, TDispatchProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n\n  /** mapState and options */\n  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: null | undefined,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<DispatchProp & TStateProps, TOwnProps>\n\n  /** mapDispatch (as a function) and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>\n\n  /** mapDispatch (as an object) and options*/\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(\n    mapStateToProps: null | undefined,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<{}, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as a function), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & TDispatchProps,\n    TOwnProps\n  >\n\n  /** mapState,  mapDispatch (as an object), and options */\n  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: null | undefined,\n    options: ConnectOptions<State, TStateProps, TOwnProps>,\n  ): InferableComponentEnhancerWithProps<\n    TStateProps & ResolveThunks<TDispatchProps>,\n    TOwnProps\n  >\n\n  /** mapState, mapDispatch, mergeProps, and options */\n  <\n    TStateProps = {},\n    TDispatchProps = {},\n    TOwnProps = {},\n    TMergedProps = {},\n    State = DefaultState,\n  >(\n    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n    mergeProps: MergeProps<\n      TStateProps,\n      TDispatchProps,\n      TOwnProps,\n      TMergedProps\n    >,\n    options?: ConnectOptions<State, TStateProps, TOwnProps, TMergedProps>,\n  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>\n  // tslint:enable:no-unnecessary-generics\n}\n\nlet hasWarnedAboutDeprecatedPureOption = false\n\n/**\n * Connects a React component to a Redux store.\n *\n * - Without arguments, just wraps the component, without changing the behavior / props\n *\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\n * is to override ownProps (as stated in the docs), so what remains is everything that's\n * not a state or dispatch prop\n *\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\n * should be valid component props, because it depends on mergeProps implementation.\n * As such, it is the user's responsibility to extend ownProps interface from state or\n * dispatch props or both when applicable\n *\n * @param mapStateToProps A function that extracts values from state\n * @param mapDispatchToProps Setup for dispatching actions\n * @param mergeProps Optional callback to merge state and dispatch props together\n * @param options Options for configuring the connection\n *\n */\nfunction connect<\n  TStateProps = {},\n  TDispatchProps = {},\n  TOwnProps = {},\n  TMergedProps = {},\n  State = unknown,\n>(\n  mapStateToProps?: MapStateToPropsParam<TStateProps, TOwnProps, State>,\n  mapDispatchToProps?: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,\n  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,\n  {\n    // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n    // @ts-ignore\n    pure,\n    areStatesEqual = strictEqual,\n    areOwnPropsEqual = shallowEqual,\n    areStatePropsEqual = shallowEqual,\n    areMergedPropsEqual = shallowEqual,\n\n    // use React's forwardRef to expose a ref of the wrapped component\n    forwardRef = false,\n\n    // the context consumer to use\n    context = ReactReduxContext,\n  }: ConnectOptions<unknown, unknown, unknown, unknown> = {},\n): unknown {\n  if (process.env.NODE_ENV !== 'production') {\n    if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n      hasWarnedAboutDeprecatedPureOption = true\n      warning(\n        'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component',\n      )\n    }\n  }\n\n  const Context = context\n\n  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps)\n  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps)\n  const initMergeProps = mergePropsFactory(mergeProps)\n\n  const shouldHandleStateChanges = Boolean(mapStateToProps)\n\n  const wrapWithConnect = <TProps,>(\n    WrappedComponent: ComponentType<TProps>,\n  ) => {\n    type WrappedComponentProps = TProps &\n      ConnectPropsMaybeWithoutContext<TProps>\n\n    if (process.env.NODE_ENV !== 'production') {\n      const isValid = /*#__PURE__*/ isValidElementType(WrappedComponent)\n      if (!isValid)\n        throw new Error(\n          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\n            WrappedComponent,\n          )}`,\n        )\n    }\n\n    const wrappedComponentName =\n      WrappedComponent.displayName || WrappedComponent.name || 'Component'\n\n    const displayName = `Connect(${wrappedComponentName})`\n\n    const selectorFactoryOptions: SelectorFactoryOptions<\n      any,\n      any,\n      any,\n      any,\n      State\n    > = {\n      shouldHandleStateChanges,\n      displayName,\n      wrappedComponentName,\n      WrappedComponent,\n      // @ts-ignore\n      initMapStateToProps,\n      initMapDispatchToProps,\n      initMergeProps,\n      areStatesEqual,\n      areStatePropsEqual,\n      areOwnPropsEqual,\n      areMergedPropsEqual,\n    }\n\n    function ConnectFunction<TOwnProps>(\n      props: InternalConnectProps & TOwnProps,\n    ) {\n      const [propsContext, reactReduxForwardedRef, wrapperProps] =\n        React.useMemo(() => {\n          // Distinguish between actual \"data\" props that were passed to the wrapper component,\n          // and values needed to control behavior (forwarded refs, alternate context instances).\n          // To maintain the wrapperProps object reference, memoize this destructuring.\n          const { reactReduxForwardedRef, ...wrapperProps } = props\n          return [props.context, reactReduxForwardedRef, wrapperProps]\n        }, [props])\n\n      const ContextToUse: ReactReduxContextInstance = React.useMemo(() => {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        let ResultContext = Context\n        if (propsContext?.Consumer) {\n          if (process.env.NODE_ENV !== 'production') {\n            const isValid = /*#__PURE__*/ isContextConsumer(\n              // @ts-ignore\n              <propsContext.Consumer />,\n            )\n            if (!isValid) {\n              throw new Error(\n                'You must pass a valid React context consumer as `props.context`',\n              )\n            }\n            ResultContext = propsContext\n          }\n        }\n        return ResultContext\n      }, [propsContext, Context])\n\n      // Retrieve the store and ancestor subscription via context, if available\n      const contextValue = React.useContext(ContextToUse)\n\n      // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n      const didStoreComeFromProps =\n        Boolean(props.store) &&\n        Boolean(props.store!.getState) &&\n        Boolean(props.store!.dispatch)\n      const didStoreComeFromContext =\n        Boolean(contextValue) && Boolean(contextValue!.store)\n\n      if (\n        process.env.NODE_ENV !== 'production' &&\n        !didStoreComeFromProps &&\n        !didStoreComeFromContext\n      ) {\n        throw new Error(\n          `Could not find \"store\" in the context of ` +\n            `\"${displayName}\". Either wrap the root component in a <Provider>, ` +\n            `or pass a custom React context provider to <Provider> and the corresponding ` +\n            `React context consumer to ${displayName} in connect options.`,\n        )\n      }\n\n      // Based on the previous check, one of these must be true\n      const store: Store = didStoreComeFromProps\n        ? props.store!\n        : contextValue!.store\n\n      const getServerState = didStoreComeFromContext\n        ? contextValue!.getServerState\n        : store.getState\n\n      const childPropsSelector = React.useMemo(() => {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return defaultSelectorFactory(store.dispatch, selectorFactoryOptions)\n      }, [store])\n\n      const [subscription, notifyNestedSubs] = React.useMemo(() => {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY\n\n        // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n        const subscription = createSubscription(\n          store,\n          didStoreComeFromProps ? undefined : contextValue!.subscription,\n        )\n\n        // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n        const notifyNestedSubs =\n          subscription.notifyNestedSubs.bind(subscription)\n\n        return [subscription, notifyNestedSubs]\n      }, [store, didStoreComeFromProps, contextValue])\n\n      // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n      const overriddenContextValue = React.useMemo(() => {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue!\n        }\n\n        // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n        return {\n          ...contextValue,\n          subscription,\n        } as ReactReduxContextValue\n      }, [didStoreComeFromProps, contextValue, subscription])\n\n      // Set up refs to coordinate values between the subscription effect and the render logic\n      const lastChildProps = React.useRef<unknown>(undefined)\n      const lastWrapperProps = React.useRef(wrapperProps)\n      const childPropsFromStoreUpdate = React.useRef<unknown>(undefined)\n      const renderIsScheduled = React.useRef(false)\n      const isMounted = React.useRef(false)\n\n      // TODO: Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n      /**\n       * @todo Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.\n       */\n      const latestSubscriptionCallbackError = React.useRef<Error | undefined>(\n        undefined,\n      )\n\n      useIsomorphicLayoutEffect(() => {\n        isMounted.current = true\n        return () => {\n          isMounted.current = false\n        }\n      }, [])\n\n      const actualChildPropsSelector = React.useMemo(() => {\n        const selector = () => {\n          // Tricky logic here:\n          // - This render may have been triggered by a Redux store update that produced new child props\n          // - However, we may have gotten new wrapper props after that\n          // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n          // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n          // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n          if (\n            childPropsFromStoreUpdate.current &&\n            wrapperProps === lastWrapperProps.current\n          ) {\n            return childPropsFromStoreUpdate.current\n          }\n\n          // TODO We're reading the store directly in render() here. Bad idea?\n          // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n          // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n          // to determine what the child props should be.\n          return childPropsSelector(store.getState(), wrapperProps)\n        }\n        return selector\n      }, [store, wrapperProps])\n\n      // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      const subscribeForReact = React.useMemo(() => {\n        const subscribe = (reactListener: () => void) => {\n          if (!subscription) {\n            return () => {}\n          }\n\n          return subscribeUpdates(\n            shouldHandleStateChanges,\n            store,\n            subscription,\n            // @ts-ignore\n            childPropsSelector,\n            lastWrapperProps,\n            lastChildProps,\n            renderIsScheduled,\n            isMounted,\n            childPropsFromStoreUpdate,\n            notifyNestedSubs,\n            reactListener,\n          )\n        }\n\n        return subscribe\n      }, [subscription])\n\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\n        lastWrapperProps,\n        lastChildProps,\n        renderIsScheduled,\n        wrapperProps,\n        childPropsFromStoreUpdate,\n        notifyNestedSubs,\n      ])\n\n      let actualChildProps: Record<string, unknown>\n\n      try {\n        actualChildProps = React.useSyncExternalStore(\n          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n          subscribeForReact,\n          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n          actualChildPropsSelector,\n          getServerState\n            ? () => childPropsSelector(getServerState(), wrapperProps)\n            : actualChildPropsSelector,\n        )\n      } catch (err) {\n        if (latestSubscriptionCallbackError.current) {\n          // eslint-disable-next-line no-extra-semi\n          ;(err as Error).message +=\n            `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`\n        }\n\n        throw err\n      }\n\n      useIsomorphicLayoutEffect(() => {\n        latestSubscriptionCallbackError.current = undefined\n        childPropsFromStoreUpdate.current = undefined\n        lastChildProps.current = actualChildProps\n      })\n\n      // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n      const renderedWrappedComponent = React.useMemo(() => {\n        return (\n          // @ts-ignore\n          <WrappedComponent\n            {...actualChildProps}\n            ref={reactReduxForwardedRef}\n          />\n        )\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps])\n\n      // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n      const renderedChild = React.useMemo(() => {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return (\n            <ContextToUse.Provider value={overriddenContextValue}>\n              {renderedWrappedComponent}\n            </ContextToUse.Provider>\n          )\n        }\n\n        return renderedWrappedComponent\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue])\n\n      return renderedChild\n    }\n\n    const _Connect = React.memo(ConnectFunction)\n\n    type ConnectedWrapperComponent = typeof _Connect & {\n      WrappedComponent: typeof WrappedComponent\n    }\n\n    // Add a hacky cast to get the right output type\n    const Connect = _Connect as unknown as ConnectedComponent<\n      typeof WrappedComponent,\n      WrappedComponentProps\n    >\n    Connect.WrappedComponent = WrappedComponent\n    Connect.displayName = ConnectFunction.displayName = displayName\n\n    if (forwardRef) {\n      const _forwarded = React.forwardRef(\n        function forwardConnectRef(props, ref) {\n          // @ts-ignore\n          return <Connect {...props} reactReduxForwardedRef={ref} />\n        },\n      )\n\n      const forwarded = _forwarded as ConnectedWrapperComponent\n      forwarded.displayName = displayName\n      forwarded.WrappedComponent = WrappedComponent\n      return /*#__PURE__*/ hoistStatics(forwarded, WrappedComponent)\n    }\n\n    return /*#__PURE__*/ hoistStatics(Connect, WrappedComponent)\n  }\n\n  return wrapWithConnect\n}\n\nexport default connect as Connect\n","import type { Context, ReactNode } from 'react'\nimport { React } from '../utils/react'\nimport type { Action, Store, UnknownAction } from 'redux'\nimport type { DevModeCheckFrequency } from '../hooks/useSelector'\nimport { createSubscription } from '../utils/Subscription'\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\nimport type { ReactReduxContextValue } from './Context'\nimport { ReactReduxContext } from './Context'\n\nexport interface ProviderProps<\n  A extends Action<string> = UnknownAction,\n  S = unknown,\n> {\n  /**\n   * The single Redux store in your application.\n   */\n  store: Store<S, A>\n\n  /**\n   * An optional server state snapshot. Will be used during initial hydration render if available, to ensure that the UI output is consistent with the HTML generated on the server.\n   */\n  serverState?: S\n\n  /**\n   * Optional context to be used internally in react-redux. Use React.createContext() to create a context to be used.\n   * If this is used, you'll need to customize `connect` by supplying the same context provided to the Provider.\n   * Set the initial value to null, and the hooks will error\n   * if this is not overwritten by Provider.\n   */\n  context?: Context<ReactReduxContextValue<S, A> | null>\n\n  /**\n   * Determines the frequency of stability checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` stability check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck?: DevModeCheckFrequency\n\n  /**\n   * Determines the frequency of identity function checks for all selectors.\n   * This setting overrides the global configuration for\n   * the `useSelector` identity function check, allowing you to specify how often\n   * these checks should occur in development mode.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck?: DevModeCheckFrequency\n\n  children: ReactNode\n}\n\nfunction Provider<A extends Action<string> = UnknownAction, S = unknown>(\n  providerProps: ProviderProps<A, S>,\n) {\n  const { children, context, serverState, store } = providerProps\n\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store)\n\n    const baseContextValue = {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : undefined,\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      return baseContextValue\n    } else {\n      const { identityFunctionCheck = 'once', stabilityCheck = 'once' } =\n        providerProps\n\n      return /* @__PURE__ */ Object.assign(baseContextValue, {\n        stabilityCheck,\n        identityFunctionCheck,\n      })\n    }\n  }, [store, serverState])\n\n  const previousState = React.useMemo(() => store.getState(), [store])\n\n  useIsomorphicLayoutEffect(() => {\n    const { subscription } = contextValue\n    subscription.onStateChange = subscription.notifyNestedSubs\n    subscription.trySubscribe()\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs()\n    }\n    return () => {\n      subscription.tryUnsubscribe()\n      subscription.onStateChange = undefined\n    }\n  }, [contextValue, previousState])\n\n  const Context = context || ReactReduxContext\n\n  return <Context.Provider value={contextValue}>{children}</Context.Provider>\n}\n\nexport default Provider\n","import { React } from '../utils/react'\nimport { ReactReduxContext } from '../components/Context'\nimport type { ReactReduxContextValue } from '../components/Context'\n\n/**\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\n */\nexport function createReduxContextHook(context = ReactReduxContext) {\n  return function useReduxContext(): ReactReduxContextValue {\n    const contextValue = React.useContext(context)\n\n    if (process.env.NODE_ENV !== 'production' && !contextValue) {\n      throw new Error(\n        'could not find react-redux context value; please ensure the component is wrapped in a <Provider>',\n      )\n    }\n\n    return contextValue!\n  }\n}\n\n/**\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @returns {any} the value of the `ReactReduxContext`\n *\n * @example\n *\n * import React from 'react'\n * import { useReduxContext } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const { store } = useReduxContext()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useReduxContext = /*#__PURE__*/ createReduxContextHook()\n","import type { Context } from 'react'\nimport type { Action, Store } from 'redux'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * Represents a type that extracts the action type from a given Redux store.\n *\n * @template StoreType - The specific type of the Redux store.\n *\n * @since 9.1.0\n * @internal\n */\nexport type ExtractStoreActionType<StoreType extends Store> =\n  StoreType extends Store<any, infer ActionType> ? ActionType : never\n\n/**\n * Represents a custom hook that provides access to the Redux store.\n *\n * @template StoreType - The specific type of the Redux store that gets returned.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseStore<StoreType extends Store> {\n  /**\n   * Returns the Redux store instance.\n   *\n   * @returns The Redux store instance.\n   */\n  (): StoreType\n\n  /**\n   * Returns the Redux store instance with specific state and action types.\n   *\n   * @returns The Redux store with the specified state and action types.\n   *\n   * @template StateType - The specific type of the state used in the store.\n   * @template ActionType - The specific type of the actions used in the store.\n   */\n  <\n    StateType extends ReturnType<StoreType['getState']> = ReturnType<\n      StoreType['getState']\n    >,\n    ActionType extends Action = ExtractStoreActionType<Store>,\n  >(): Store<StateType, ActionType>\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useStore useStore}\n   * where the type of the Redux `store` is predefined.\n   *\n   * This allows you to set the `store` type once, eliminating the need to\n   * specify it with every {@linkcode useStore useStore} call.\n   *\n   * @returns A pre-typed `useStore` with the store type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppStore = useStore.withTypes<AppStore>()\n   * ```\n   *\n   * @template OverrideStoreType - The specific type of the Redux store that gets returned.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStoreType extends StoreType,\n  >() => UseStore<OverrideStoreType>\n}\n\n/**\n * Hook factory, which creates a `useStore` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useStore` hook bound to the specified context.\n */\nexport function createStoreHook<\n  StateType = unknown,\n  ActionType extends Action = Action,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : // @ts-ignore\n        createReduxContextHook(context)\n  const useStore = () => {\n    const { store } = useReduxContext()\n    return store\n  }\n\n  Object.assign(useStore, {\n    withTypes: () => useStore,\n  })\n\n  return useStore as UseStore<Store<StateType, ActionType>>\n}\n\n/**\n * A hook to access the redux store.\n *\n * @returns {any} the redux store\n *\n * @example\n *\n * import React from 'react'\n * import { useStore } from 'react-redux'\n *\n * export const ExampleComponent = () => {\n *   const store = useStore()\n *   return <div>{store.getState()}</div>\n * }\n */\nexport const useStore = /*#__PURE__*/ createStoreHook()\n","import type { Context } from 'react'\nimport type { Action, Dispatch, UnknownAction } from 'redux'\n\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport { createStoreHook, useStore as useDefaultStore } from './useStore'\n\n/**\n * Represents a custom hook that provides a dispatch function\n * from the Redux store.\n *\n * @template DispatchType - The specific type of the dispatch function.\n *\n * @since 9.1.0\n * @public\n */\nexport interface UseDispatch<\n  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,\n> {\n  /**\n   * Returns the dispatch function from the Redux store.\n   *\n   * @returns The dispatch function from the Redux store.\n   *\n   * @template AppDispatch - The specific type of the dispatch function.\n   */\n  <AppDispatch extends DispatchType = DispatchType>(): AppDispatch\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useDispatch useDispatch}\n   * where the type of the `dispatch` function is predefined.\n   *\n   * This allows you to set the `dispatch` type once, eliminating the need to\n   * specify it with every {@linkcode useDispatch useDispatch} call.\n   *\n   * @returns A pre-typed `useDispatch` with the dispatch type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppDispatch = useDispatch.withTypes<AppDispatch>()\n   * ```\n   *\n   * @template OverrideDispatchType - The specific type of the dispatch function.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideDispatchType extends DispatchType,\n  >() => UseDispatch<OverrideDispatchType>\n}\n\n/**\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useDispatch` hook bound to the specified context.\n */\nexport function createDispatchHook<\n  StateType = unknown,\n  ActionType extends Action = UnknownAction,\n>(\n  // @ts-ignore\n  context?: Context<ReactReduxContextValue<\n    StateType,\n    ActionType\n  > | null> = ReactReduxContext,\n) {\n  const useStore =\n    context === ReactReduxContext ? useDefaultStore : createStoreHook(context)\n\n  const useDispatch = () => {\n    const store = useStore()\n    return store.dispatch\n  }\n\n  Object.assign(useDispatch, {\n    withTypes: () => useDispatch,\n  })\n\n  return useDispatch as UseDispatch<Dispatch<ActionType>>\n}\n\n/**\n * A hook to access the redux `dispatch` function.\n *\n * @returns {any|function} redux store's `dispatch` function\n *\n * @example\n *\n * import React, { useCallback } from 'react'\n * import { useDispatch } from 'react-redux'\n *\n * export const CounterComponent = ({ value }) => {\n *   const dispatch = useDispatch()\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\n *   return (\n *     <div>\n *       <span>{value}</span>\n *       <button onClick={increaseCounter}>Increase counter</button>\n *     </div>\n *   )\n * }\n */\nexport const useDispatch = /*#__PURE__*/ createDispatchHook()\n","//import * as React from 'react'\nimport { React } from '../utils/react'\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector.js'\nimport type { ReactReduxContextValue } from '../components/Context'\nimport { ReactReduxContext } from '../components/Context'\nimport type { EqualityFn, NoInfer } from '../types'\nimport {\n  createReduxContextHook,\n  useReduxContext as useDefaultReduxContext,\n} from './useReduxContext'\n\n/**\n * The frequency of development mode checks.\n *\n * @since 8.1.0\n * @internal\n */\nexport type DevModeCheckFrequency = 'never' | 'once' | 'always'\n\n/**\n * Represents the configuration for development mode checks.\n *\n * @since 9.0.0\n * @internal\n */\nexport interface DevModeChecks {\n  /**\n   * Overrides the global stability check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the stability check.\n   *\n   * @default 'once'\n   *\n   * @since 8.1.0\n   */\n  stabilityCheck: DevModeCheckFrequency\n\n  /**\n   * Overrides the global identity function check for the selector.\n   * - `once` - Run only the first time the selector is called.\n   * - `always` - Run every time the selector is called.\n   * - `never` - Never run the identity function check.\n   *\n   * **Note**: Previously referred to as `noopCheck`.\n   *\n   * @default 'once'\n   *\n   * @since 9.0.0\n   */\n  identityFunctionCheck: DevModeCheckFrequency\n}\n\nexport interface UseSelectorOptions<Selected = unknown> {\n  equalityFn?: EqualityFn<Selected>\n\n  /**\n   * `useSelector` performs additional checks in development mode to help\n   * identify and warn about potential issues in selector behavior. This\n   * option allows you to customize the behavior of these checks per selector.\n   *\n   * @since 9.0.0\n   */\n  devModeChecks?: Partial<DevModeChecks>\n}\n\n/**\n * Represents a custom hook that allows you to extract data from the\n * Redux store state, using a selector function. The selector function\n * takes the current state as an argument and returns a part of the state\n * or some derived data. The hook also supports an optional equality\n * function or options object to customize its behavior.\n *\n * @template StateType - The specific type of state this hook operates on.\n *\n * @public\n */\nexport interface UseSelector<StateType = unknown> {\n  /**\n   * A function that takes a selector function as its first argument.\n   * The selector function is responsible for selecting a part of\n   * the Redux store's state or computing derived data.\n   *\n   * @param selector - A function that receives the current state and returns a part of the state or some derived data.\n   * @param equalityFnOrOptions - An optional equality function or options object for customizing the behavior of the selector.\n   * @returns The selected part of the state or derived data.\n   *\n   * @template TState - The specific type of state this hook operates on.\n   * @template Selected - The type of the value that the selector function will return.\n   */\n  <TState extends StateType = StateType, Selected = unknown>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions?: EqualityFn<Selected> | UseSelectorOptions<Selected>,\n  ): Selected\n\n  /**\n   * Creates a \"pre-typed\" version of {@linkcode useSelector useSelector}\n   * where the `state` type is predefined.\n   *\n   * This allows you to set the `state` type once, eliminating the need to\n   * specify it with every {@linkcode useSelector useSelector} call.\n   *\n   * @returns A pre-typed `useSelector` with the state type already defined.\n   *\n   * @example\n   * ```ts\n   * export const useAppSelector = useSelector.withTypes<RootState>()\n   * ```\n   *\n   * @template OverrideStateType - The specific type of state this hook operates on.\n   *\n   * @since 9.1.0\n   */\n  withTypes: <\n    OverrideStateType extends StateType,\n  >() => UseSelector<OverrideStateType>\n}\n\nconst refEquality: EqualityFn<any> = (a, b) => a === b\n\n/**\n * Hook factory, which creates a `useSelector` hook bound to a given context.\n *\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\n * @returns {Function} A `useSelector` hook bound to the specified context.\n */\nexport function createSelectorHook(\n  context: React.Context<ReactReduxContextValue<\n    any,\n    any\n  > | null> = ReactReduxContext,\n): UseSelector {\n  const useReduxContext =\n    context === ReactReduxContext\n      ? useDefaultReduxContext\n      : createReduxContextHook(context)\n\n  const useSelector = <TState, Selected>(\n    selector: (state: TState) => Selected,\n    equalityFnOrOptions:\n      | EqualityFn<NoInfer<Selected>>\n      | UseSelectorOptions<NoInfer<Selected>> = {},\n  ): Selected => {\n    const { equalityFn = refEquality } =\n      typeof equalityFnOrOptions === 'function'\n        ? { equalityFn: equalityFnOrOptions }\n        : equalityFnOrOptions\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`)\n      }\n      if (typeof selector !== 'function') {\n        throw new Error(`You must pass a function as a selector to useSelector`)\n      }\n      if (typeof equalityFn !== 'function') {\n        throw new Error(\n          `You must pass a function as an equality function to useSelector`,\n        )\n      }\n    }\n\n    const reduxContext = useReduxContext()\n\n    const { store, subscription, getServerState } = reduxContext\n\n    const firstRun = React.useRef(true)\n\n    const wrappedSelector = React.useCallback<typeof selector>(\n      {\n        [selector.name](state: TState) {\n          const selected = selector(state)\n          if (process.env.NODE_ENV !== 'production') {\n            const { devModeChecks = {} } =\n              typeof equalityFnOrOptions === 'function'\n                ? {}\n                : equalityFnOrOptions\n            const { identityFunctionCheck, stabilityCheck } = reduxContext\n            const {\n              identityFunctionCheck: finalIdentityFunctionCheck,\n              stabilityCheck: finalStabilityCheck,\n            } = {\n              stabilityCheck,\n              identityFunctionCheck,\n              ...devModeChecks,\n            }\n            if (\n              finalStabilityCheck === 'always' ||\n              (finalStabilityCheck === 'once' && firstRun.current)\n            ) {\n              const toCompare = selector(state)\n              if (!equalityFn(selected, toCompare)) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization',\n                  {\n                    state,\n                    selected,\n                    selected2: toCompare,\n                    stack,\n                  },\n                )\n              }\n            }\n            if (\n              finalIdentityFunctionCheck === 'always' ||\n              (finalIdentityFunctionCheck === 'once' && firstRun.current)\n            ) {\n              // @ts-ignore\n              if (selected === state) {\n                let stack: string | undefined = undefined\n                try {\n                  throw new Error()\n                } catch (e) {\n                  // eslint-disable-next-line no-extra-semi\n                  ;({ stack } = e as Error)\n                }\n                console.warn(\n                  'Selector ' +\n                    (selector.name || 'unknown') +\n                    ' returned the root state when called. This can lead to unnecessary rerenders.' +\n                    '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.',\n                  { stack },\n                )\n              }\n            }\n            if (firstRun.current) firstRun.current = false\n          }\n          return selected\n        },\n      }[selector.name],\n      [selector],\n    )\n\n    const selectedState = useSyncExternalStoreWithSelector(\n      subscription.addNestedSub,\n      store.getState,\n      getServerState || store.getState,\n      wrappedSelector,\n      equalityFn,\n    )\n\n    React.useDebugValue(selectedState)\n\n    return selectedState\n  }\n\n  Object.assign(useSelector, {\n    withTypes: () => useSelector,\n  })\n\n  return useSelector as UseSelector\n}\n\n/**\n * A hook to access the redux store's state. This hook takes a selector function\n * as an argument. The selector is called with the store state.\n *\n * This hook takes an optional equality comparison function as the second parameter\n * that allows you to customize the way the selected state is compared to determine\n * whether the component needs to be re-rendered.\n *\n * @param {Function} selector the selector function\n * @param {Function=} equalityFn the function that will be used to determine equality\n *\n * @returns {any} the selected state\n *\n * @example\n *\n * import React from 'react'\n * import { useSelector } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const counter = useSelector(state => state.counter)\n *   return <div>{counter}</div>\n * }\n */\nexport const useSelector = /*#__PURE__*/ createSelectorHook()\n","import connect from './components/connect'\nexport type {\n  Connect,\n  ConnectProps,\n  ConnectedProps,\n} from './components/connect'\n\nimport shallowEqual from './utils/shallowEqual'\n\nimport Provider from './components/Provider'\nimport { defaultNoopBatch } from './utils/batch'\n\nexport { ReactReduxContext } from './components/Context'\nexport type { ReactReduxContextValue } from './components/Context'\n\nexport type { ProviderProps } from './components/Provider'\n\nexport type {\n  MapDispatchToProps,\n  MapDispatchToPropsFactory,\n  MapDispatchToPropsFunction,\n  MapDispatchToPropsNonObject,\n  MapDispatchToPropsParam,\n  MapStateToProps,\n  MapStateToPropsFactory,\n  MapStateToPropsParam,\n  MergeProps,\n  Selector,\n  SelectorFactory,\n} from './connect/selectorFactory'\n\nexport { createDispatchHook, useDispatch } from './hooks/useDispatch'\nexport type { UseDispatch } from './hooks/useDispatch'\n\nexport { createSelectorHook, useSelector } from './hooks/useSelector'\nexport type { UseSelector } from './hooks/useSelector'\n\nexport { createStoreHook, useStore } from './hooks/useStore'\nexport type { UseStore } from './hooks/useStore'\n\nexport type { Subscription } from './utils/Subscription'\n\nexport * from './types'\n\n/**\n * @deprecated As of React 18, batching is enabled by default for ReactDOM and React Native.\n * This is now a no-op that immediately runs the callback.\n */\nconst batch = defaultNoopBatch\n\nexport { Provider, batch, connect, shallowEqual }\n"],"mappings":"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","names":["reactReduxForwardedRef","wrapperProps","subscription","notifyNestedSubs","useReduxContext","useReduxContext","useStore","useStore","useDispatch","useReduxContext","useSelector"]}
Index: node_modules/react-redux/dist/rsc.mjs
===================================================================
--- node_modules/react-redux/dist/rsc.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/rsc.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+// src/utils/shallowEqual.ts
+function is(x, y) {
+  if (x === y) {
+    return x !== 0 || y !== 0 || 1 / x === 1 / y;
+  } else {
+    return x !== x && y !== y;
+  }
+}
+function shallowEqual(objA, objB) {
+  if (is(objA, objB)) return true;
+  if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
+    return false;
+  }
+  const keysA = Object.keys(objA);
+  const keysB = Object.keys(objB);
+  if (keysA.length !== keysB.length) return false;
+  for (let i = 0; i < keysA.length; i++) {
+    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
+      return false;
+    }
+  }
+  return true;
+}
+
+// src/index-rsc.ts
+var throwNotSupportedError = (...args) => {
+  throw new Error(
+    "This function is not supported in React Server Components. Please only use this export in a Client Component."
+  );
+};
+var ReactReduxContext = {};
+export {
+  throwNotSupportedError as Provider,
+  ReactReduxContext,
+  throwNotSupportedError as batch,
+  throwNotSupportedError as connect,
+  throwNotSupportedError as createDispatchHook,
+  throwNotSupportedError as createSelectorHook,
+  throwNotSupportedError as createStoreHook,
+  shallowEqual,
+  throwNotSupportedError as useDispatch,
+  throwNotSupportedError as useSelector,
+  throwNotSupportedError as useStore
+};
+//# sourceMappingURL=rsc.mjs.map
Index: node_modules/react-redux/dist/rsc.mjs.map
===================================================================
--- node_modules/react-redux/dist/rsc.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/dist/rsc.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/utils/shallowEqual.ts","../src/index-rsc.ts"],"sourcesContent":["function is(x: unknown, y: unknown) {\r\n  if (x === y) {\r\n    return x !== 0 || y !== 0 || 1 / x === 1 / y\r\n  } else {\r\n    return x !== x && y !== y\r\n  }\r\n}\r\n\r\nexport default function shallowEqual(objA: any, objB: any) {\r\n  if (is(objA, objB)) return true\r\n\r\n  if (\r\n    typeof objA !== 'object' ||\r\n    objA === null ||\r\n    typeof objB !== 'object' ||\r\n    objB === null\r\n  ) {\r\n    return false\r\n  }\r\n\r\n  const keysA = Object.keys(objA)\r\n  const keysB = Object.keys(objB)\r\n\r\n  if (keysA.length !== keysB.length) return false\r\n\r\n  for (let i = 0; i < keysA.length; i++) {\r\n    if (\r\n      !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\r\n      !is(objA[keysA[i]], objB[keysA[i]])\r\n    ) {\r\n      return false\r\n    }\r\n  }\r\n\r\n  return true\r\n}\r\n","import type * as normal from './index'\nimport type * as rsc from './index-rsc'\n\n// checks to make sure we didn't forgot to replicate any exports\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst _check: typeof normal = {} as typeof rsc\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst _check2: typeof rsc = {} as typeof normal\n\n// -------------------------------------------------------------------------------------\n\nconst throwNotSupportedError = ((\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  ...args: any[]\n): any => {\n  throw new Error(\n    'This function is not supported in React Server Components. Please only use this export in a Client Component.',\n  )\n}) as any\n\nexport {\n  throwNotSupportedError as Provider,\n  throwNotSupportedError as batch,\n  throwNotSupportedError as connect,\n  throwNotSupportedError as createDispatchHook,\n  throwNotSupportedError as createSelectorHook,\n  throwNotSupportedError as createStoreHook,\n  throwNotSupportedError as useDispatch,\n  throwNotSupportedError as useSelector,\n  throwNotSupportedError as useStore,\n}\nexport const ReactReduxContext = {} as any\nexport { default as shallowEqual } from './utils/shallowEqual'\n"],"mappings":";AAAA,SAAS,GAAG,GAAY,GAAY;AAClC,MAAI,MAAM,GAAG;AACX,WAAO,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI;AAAA,EAC7C,OAAO;AACL,WAAO,MAAM,KAAK,MAAM;AAAA,EAC1B;AACF;AAEe,SAAR,aAA8B,MAAW,MAAW;AACzD,MAAI,GAAG,MAAM,IAAI,EAAG,QAAO;AAE3B,MACE,OAAO,SAAS,YAChB,SAAS,QACT,OAAO,SAAS,YAChB,SAAS,MACT;AACA,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,QAAM,QAAQ,OAAO,KAAK,IAAI;AAE9B,MAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAE1C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QACE,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CAAC,CAAC,KACpD,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,GAClC;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;;;ACvBA,IAAM,yBAA0B,IAE3B,SACK;AACR,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAaO,IAAM,oBAAoB,CAAC;","names":[]}
Index: node_modules/react-redux/package.json
===================================================================
--- node_modules/react-redux/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,100 @@
+{
+  "name": "react-redux",
+  "version": "9.2.0",
+  "description": "Official React bindings for Redux",
+  "keywords": [
+    "react",
+    "reactjs",
+    "redux"
+  ],
+  "license": "MIT",
+  "author": "Dan Abramov <dan.abramov@me.com> (https://github.com/gaearon)",
+  "homepage": "https://github.com/reduxjs/react-redux",
+  "repository": "github:reduxjs/react-redux",
+  "bugs": "https://github.com/reduxjs/react-redux/issues",
+  "module": "dist/react-redux.legacy-esm.js",
+  "main": "dist/cjs/index.js",
+  "react-native": "./dist/react-redux.legacy-esm.js",
+  "types": "dist/react-redux.d.ts",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "types": "./dist/react-redux.d.ts",
+      "react-server": "./dist/rsc.mjs",
+      "react-native": "./dist/react-redux.legacy-esm.js",
+      "import": "./dist/react-redux.mjs",
+      "default": "./dist/cjs/index.js"
+    },
+    "./alternate-renderers": {
+      "types": "./dist/react-redux.d.ts",
+      "import": "./dist/react-redux.mjs",
+      "default": "./dist/cjs/index.js"
+    }
+  },
+  "sideEffects": false,
+  "files": [
+    "dist",
+    "src"
+  ],
+  "scripts": {
+    "build": "yarn clean && tsup",
+    "clean": "rimraf lib dist es coverage",
+    "api-types": "api-extractor run --local",
+    "format": "prettier --write \"{src,test}/**/*.{js,ts,tsx}\" \"docs/**/*.md\"",
+    "lint": "eslint src test",
+    "lint:fix": "eslint src test --fix",
+    "prepack": "yarn build",
+    "pretest": "yarn lint",
+    "test": "vitest --run --typecheck",
+    "test:watch": "vitest --watch",
+    "type-tests": "tsc --noEmit -p tsconfig.test.json",
+    "coverage": "codecov"
+  },
+  "peerDependencies": {
+    "@types/react": "^18.2.25 || ^19",
+    "react": "^18.0 || ^19",
+    "redux": "^5.0.0"
+  },
+  "peerDependenciesMeta": {
+    "@types/react": {
+      "optional": true
+    },
+    "redux": {
+      "optional": true
+    }
+  },
+  "dependencies": {
+    "@types/use-sync-external-store": "^0.0.6",
+    "use-sync-external-store": "^1.4.0"
+  },
+  "devDependencies": {
+    "@microsoft/api-extractor": "^7.47.0",
+    "@reduxjs/toolkit": "^2.2.5",
+    "@testing-library/dom": "^10.4.0",
+    "@testing-library/jest-dom": "^6.6.3",
+    "@testing-library/react": "^16.1.0",
+    "@types/node": "^20.14.2",
+    "@types/prop-types": "^15.7.12",
+    "@types/react": "^19.0.1",
+    "@types/react-dom": "^19.0.1",
+    "codecov": "^3.8.3",
+    "cross-env": "^7.0.3",
+    "eslint": "^8.57.0",
+    "eslint-config-prettier": "^9.1.0",
+    "eslint-import-resolver-typescript": "^3.6.1",
+    "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-prettier": "^5.1.3",
+    "eslint-plugin-react": "^7.34.2",
+    "jsdom": "^25.0.1",
+    "prettier": "^3.3.3",
+    "react": "^19.0.0",
+    "react-dom": "^19.0.0",
+    "redux": "^5.0.1",
+    "rimraf": "^5.0.7",
+    "tsup": "^8.3.5",
+    "typescript": "^5.5.4",
+    "typescript-eslint": "^7.12.0",
+    "vitest": "^1.6.0"
+  },
+  "packageManager": "yarn@4.4.1"
+}
Index: node_modules/react-redux/src/components/Context.ts
===================================================================
--- node_modules/react-redux/src/components/Context.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/components/Context.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import type { Context } from 'react'
+import { React } from '../utils/react'
+import type { Action, Store, UnknownAction } from 'redux'
+import type { Subscription } from '../utils/Subscription'
+import type { ProviderProps } from './Provider'
+
+export interface ReactReduxContextValue<
+  SS = any,
+  A extends Action<string> = UnknownAction,
+> extends Pick<ProviderProps, 'stabilityCheck' | 'identityFunctionCheck'> {
+  store: Store<SS, A>
+  subscription: Subscription
+  getServerState?: () => SS
+}
+
+const ContextKey = /* @__PURE__ */ Symbol.for(`react-redux-context`)
+const gT: {
+  [ContextKey]?: Map<
+    typeof React.createContext,
+    Context<ReactReduxContextValue | null>
+  >
+} = (
+  typeof globalThis !== 'undefined'
+    ? globalThis
+    : /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */ {}
+) as any
+
+function getContext(): Context<ReactReduxContextValue | null> {
+  if (!React.createContext) return {} as any
+
+  const contextMap = (gT[ContextKey] ??= new Map<
+    typeof React.createContext,
+    Context<ReactReduxContextValue | null>
+  >())
+  let realContext = contextMap.get(React.createContext)
+  if (!realContext) {
+    realContext = React.createContext<ReactReduxContextValue | null>(
+      null as any,
+    )
+    if (process.env.NODE_ENV !== 'production') {
+      realContext.displayName = 'ReactRedux'
+    }
+    contextMap.set(React.createContext, realContext)
+  }
+  return realContext
+}
+
+export const ReactReduxContext = /*#__PURE__*/ getContext()
+
+export type ReactReduxContextInstance = typeof ReactReduxContext
Index: node_modules/react-redux/src/components/Provider.tsx
===================================================================
--- node_modules/react-redux/src/components/Provider.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/components/Provider.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,105 @@
+import type { Context, ReactNode } from 'react'
+import { React } from '../utils/react'
+import type { Action, Store, UnknownAction } from 'redux'
+import type { DevModeCheckFrequency } from '../hooks/useSelector'
+import { createSubscription } from '../utils/Subscription'
+import { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'
+import type { ReactReduxContextValue } from './Context'
+import { ReactReduxContext } from './Context'
+
+export interface ProviderProps<
+  A extends Action<string> = UnknownAction,
+  S = unknown,
+> {
+  /**
+   * The single Redux store in your application.
+   */
+  store: Store<S, A>
+
+  /**
+   * An optional server state snapshot. Will be used during initial hydration render if available, to ensure that the UI output is consistent with the HTML generated on the server.
+   */
+  serverState?: S
+
+  /**
+   * Optional context to be used internally in react-redux. Use React.createContext() to create a context to be used.
+   * If this is used, you'll need to customize `connect` by supplying the same context provided to the Provider.
+   * Set the initial value to null, and the hooks will error
+   * if this is not overwritten by Provider.
+   */
+  context?: Context<ReactReduxContextValue<S, A> | null>
+
+  /**
+   * Determines the frequency of stability checks for all selectors.
+   * This setting overrides the global configuration for
+   * the `useSelector` stability check, allowing you to specify how often
+   * these checks should occur in development mode.
+   *
+   * @since 8.1.0
+   */
+  stabilityCheck?: DevModeCheckFrequency
+
+  /**
+   * Determines the frequency of identity function checks for all selectors.
+   * This setting overrides the global configuration for
+   * the `useSelector` identity function check, allowing you to specify how often
+   * these checks should occur in development mode.
+   *
+   * **Note**: Previously referred to as `noopCheck`.
+   *
+   * @since 9.0.0
+   */
+  identityFunctionCheck?: DevModeCheckFrequency
+
+  children: ReactNode
+}
+
+function Provider<A extends Action<string> = UnknownAction, S = unknown>(
+  providerProps: ProviderProps<A, S>,
+) {
+  const { children, context, serverState, store } = providerProps
+
+  const contextValue = React.useMemo(() => {
+    const subscription = createSubscription(store)
+
+    const baseContextValue = {
+      store,
+      subscription,
+      getServerState: serverState ? () => serverState : undefined,
+    }
+
+    if (process.env.NODE_ENV === 'production') {
+      return baseContextValue
+    } else {
+      const { identityFunctionCheck = 'once', stabilityCheck = 'once' } =
+        providerProps
+
+      return /* @__PURE__ */ Object.assign(baseContextValue, {
+        stabilityCheck,
+        identityFunctionCheck,
+      })
+    }
+  }, [store, serverState])
+
+  const previousState = React.useMemo(() => store.getState(), [store])
+
+  useIsomorphicLayoutEffect(() => {
+    const { subscription } = contextValue
+    subscription.onStateChange = subscription.notifyNestedSubs
+    subscription.trySubscribe()
+
+    if (previousState !== store.getState()) {
+      subscription.notifyNestedSubs()
+    }
+    return () => {
+      subscription.tryUnsubscribe()
+      subscription.onStateChange = undefined
+    }
+  }, [contextValue, previousState])
+
+  const Context = context || ReactReduxContext
+
+  return <Context.Provider value={contextValue}>{children}</Context.Provider>
+}
+
+export default Provider
Index: node_modules/react-redux/src/components/connect.tsx
===================================================================
--- node_modules/react-redux/src/components/connect.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/components/connect.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,813 @@
+/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */
+import type { ComponentType } from 'react'
+import { React } from '../utils/react'
+import { isValidElementType, isContextConsumer } from '../utils/react-is'
+
+import type { Store } from 'redux'
+
+import type {
+  ConnectedComponent,
+  InferableComponentEnhancer,
+  InferableComponentEnhancerWithProps,
+  ResolveThunks,
+  DispatchProp,
+  ConnectPropsMaybeWithoutContext,
+} from '../types'
+
+import type {
+  MapStateToPropsParam,
+  MapDispatchToPropsParam,
+  MergeProps,
+  MapDispatchToPropsNonObject,
+  SelectorFactoryOptions,
+} from '../connect/selectorFactory'
+import defaultSelectorFactory from '../connect/selectorFactory'
+import { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps'
+import { mapStateToPropsFactory } from '../connect/mapStateToProps'
+import { mergePropsFactory } from '../connect/mergeProps'
+
+import type { Subscription } from '../utils/Subscription'
+import { createSubscription } from '../utils/Subscription'
+import { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'
+import shallowEqual from '../utils/shallowEqual'
+import hoistStatics from '../utils/hoistStatics'
+import warning from '../utils/warning'
+
+import type {
+  ReactReduxContextValue,
+  ReactReduxContextInstance,
+} from './Context'
+import { ReactReduxContext } from './Context'
+
+// Define some constant arrays just to avoid re-creating these
+const EMPTY_ARRAY: [unknown, number] = [null, 0]
+const NO_SUBSCRIPTION_ARRAY = [null, null]
+
+// Attempts to stringify whatever not-really-a-component value we were given
+// for logging in an error message
+const stringifyComponent = (Comp: unknown) => {
+  try {
+    return JSON.stringify(Comp)
+  } catch (err) {
+    return String(Comp)
+  }
+}
+
+type EffectFunc = (...args: any[]) => void | ReturnType<React.EffectCallback>
+
+// This is "just" a `useLayoutEffect`, but with two modifications:
+// - we need to fall back to `useEffect` in SSR to avoid annoying warnings
+// - we extract this to a separate function to avoid closing over values
+//   and causing memory leaks
+function useIsomorphicLayoutEffectWithArgs(
+  effectFunc: EffectFunc,
+  effectArgs: any[],
+  dependencies?: React.DependencyList,
+) {
+  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies)
+}
+
+// Effect callback, extracted: assign the latest props values to refs for later usage
+function captureWrapperProps(
+  lastWrapperProps: React.MutableRefObject<unknown>,
+  lastChildProps: React.MutableRefObject<unknown>,
+  renderIsScheduled: React.MutableRefObject<boolean>,
+  wrapperProps: unknown,
+  // actualChildProps: unknown,
+  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,
+  notifyNestedSubs: () => void,
+) {
+  // We want to capture the wrapper props and child props we used for later comparisons
+  lastWrapperProps.current = wrapperProps
+  renderIsScheduled.current = false
+
+  // If the render was from a store update, clear out that reference and cascade the subscriber update
+  if (childPropsFromStoreUpdate.current) {
+    childPropsFromStoreUpdate.current = null
+    notifyNestedSubs()
+  }
+}
+
+// Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,
+// check for updates after dispatched actions, and trigger re-renders.
+function subscribeUpdates(
+  shouldHandleStateChanges: boolean,
+  store: Store,
+  subscription: Subscription,
+  childPropsSelector: (state: unknown, props: unknown) => unknown,
+  lastWrapperProps: React.MutableRefObject<unknown>,
+  lastChildProps: React.MutableRefObject<unknown>,
+  renderIsScheduled: React.MutableRefObject<boolean>,
+  isMounted: React.MutableRefObject<boolean>,
+  childPropsFromStoreUpdate: React.MutableRefObject<unknown>,
+  notifyNestedSubs: () => void,
+  // forceComponentUpdateDispatch: React.Dispatch<any>,
+  additionalSubscribeListener: () => void,
+) {
+  // If we're not subscribed to the store, nothing to do here
+  if (!shouldHandleStateChanges) return () => {}
+
+  // Capture values for checking if and when this component unmounts
+  let didUnsubscribe = false
+  let lastThrownError: Error | null = null
+
+  // We'll run this callback every time a store subscription update propagates to this component
+  const checkForUpdates = () => {
+    if (didUnsubscribe || !isMounted.current) {
+      // Don't run stale listeners.
+      // Redux doesn't guarantee unsubscriptions happen until next dispatch.
+      return
+    }
+
+    // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it
+    const latestStoreState = store.getState()
+
+    let newChildProps, error
+    try {
+      // Actually run the selector with the most recent store state and wrapper props
+      // to determine what the child props should be
+      newChildProps = childPropsSelector(
+        latestStoreState,
+        lastWrapperProps.current,
+      )
+    } catch (e) {
+      error = e
+      lastThrownError = e as Error | null
+    }
+
+    if (!error) {
+      lastThrownError = null
+    }
+
+    // If the child props haven't changed, nothing to do here - cascade the subscription update
+    if (newChildProps === lastChildProps.current) {
+      if (!renderIsScheduled.current) {
+        notifyNestedSubs()
+      }
+    } else {
+      // Save references to the new child props.  Note that we track the "child props from store update"
+      // as a ref instead of a useState/useReducer because we need a way to determine if that value has
+      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without
+      // forcing another re-render, which we don't want.
+      lastChildProps.current = newChildProps
+      childPropsFromStoreUpdate.current = newChildProps
+      renderIsScheduled.current = true
+
+      // TODO This is hacky and not how `uSES` is meant to be used
+      // Trigger the React `useSyncExternalStore` subscriber
+      additionalSubscribeListener()
+    }
+  }
+
+  // Actually subscribe to the nearest connected ancestor (or store)
+  subscription.onStateChange = checkForUpdates
+  subscription.trySubscribe()
+
+  // Pull data from the store after first render in case the store has
+  // changed since we began.
+  checkForUpdates()
+
+  const unsubscribeWrapper = () => {
+    didUnsubscribe = true
+    subscription.tryUnsubscribe()
+    subscription.onStateChange = null
+
+    if (lastThrownError) {
+      // It's possible that we caught an error due to a bad mapState function, but the
+      // parent re-rendered without this component and we're about to unmount.
+      // This shouldn't happen as long as we do top-down subscriptions correctly, but
+      // if we ever do those wrong, this throw will surface the error in our tests.
+      // In that case, throw the error from here so it doesn't get lost.
+      throw lastThrownError
+    }
+  }
+
+  return unsubscribeWrapper
+}
+
+// Reducer initial state creation for our update reducer
+const initStateUpdates = () => EMPTY_ARRAY
+
+export interface ConnectProps {
+  /** A custom Context instance that the component can use to access the store from an alternate Provider using that same Context instance */
+  context?: ReactReduxContextInstance
+  /** A Redux store instance to be used for subscriptions instead of the store from a Provider */
+  store?: Store
+}
+
+interface InternalConnectProps extends ConnectProps {
+  reactReduxForwardedRef?: React.ForwardedRef<unknown>
+}
+
+function strictEqual(a: unknown, b: unknown) {
+  return a === b
+}
+
+/**
+ * Infers the type of props that a connector will inject into a component.
+ */
+export type ConnectedProps<TConnector> =
+  TConnector extends InferableComponentEnhancerWithProps<
+    infer TInjectedProps,
+    any
+  >
+    ? unknown extends TInjectedProps
+      ? TConnector extends InferableComponentEnhancer<infer TInjectedProps>
+        ? TInjectedProps
+        : never
+      : TInjectedProps
+    : never
+
+export interface ConnectOptions<
+  State = unknown,
+  TStateProps = {},
+  TOwnProps = {},
+  TMergedProps = {},
+> {
+  forwardRef?: boolean
+  context?: typeof ReactReduxContext
+  areStatesEqual?: (
+    nextState: State,
+    prevState: State,
+    nextOwnProps: TOwnProps,
+    prevOwnProps: TOwnProps,
+  ) => boolean
+
+  areOwnPropsEqual?: (
+    nextOwnProps: TOwnProps,
+    prevOwnProps: TOwnProps,
+  ) => boolean
+
+  areStatePropsEqual?: (
+    nextStateProps: TStateProps,
+    prevStateProps: TStateProps,
+  ) => boolean
+  areMergedPropsEqual?: (
+    nextMergedProps: TMergedProps,
+    prevMergedProps: TMergedProps,
+  ) => boolean
+}
+
+/**
+ * Connects a React component to a Redux store.
+ *
+ * - Without arguments, just wraps the component, without changing the behavior / props
+ *
+ * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior
+ * is to override ownProps (as stated in the docs), so what remains is everything that's
+ * not a state or dispatch prop
+ *
+ * - When 3rd param is passed, we don't know if ownProps propagate and whether they
+ * should be valid component props, because it depends on mergeProps implementation.
+ * As such, it is the user's responsibility to extend ownProps interface from state or
+ * dispatch props or both when applicable
+ *
+ * @param mapStateToProps
+ * @param mapDispatchToProps
+ * @param mergeProps
+ * @param options
+ */
+export interface Connect<DefaultState = unknown> {
+  // tslint:disable:no-unnecessary-generics
+  (): InferableComponentEnhancer<DispatchProp>
+
+  /** mapState only */
+  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(
+    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+  ): InferableComponentEnhancerWithProps<TStateProps & DispatchProp, TOwnProps>
+
+  /** mapDispatch only (as a function) */
+  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(
+    mapStateToProps: null | undefined,
+    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,
+  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>
+
+  /** mapDispatch only (as an object) */
+  <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(
+    mapStateToProps: null | undefined,
+    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
+  ): InferableComponentEnhancerWithProps<
+    ResolveThunks<TDispatchProps>,
+    TOwnProps
+  >
+
+  /** mapState and mapDispatch (as a function)*/
+  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(
+    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,
+  ): InferableComponentEnhancerWithProps<
+    TStateProps & TDispatchProps,
+    TOwnProps
+  >
+
+  /** mapState and mapDispatch (nullish) */
+  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(
+    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+    mapDispatchToProps: null | undefined,
+  ): InferableComponentEnhancerWithProps<TStateProps, TOwnProps>
+
+  /** mapState and mapDispatch (as an object) */
+  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(
+    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
+  ): InferableComponentEnhancerWithProps<
+    TStateProps & ResolveThunks<TDispatchProps>,
+    TOwnProps
+  >
+
+  /** mergeProps only */
+  <no_state = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}>(
+    mapStateToProps: null | undefined,
+    mapDispatchToProps: null | undefined,
+    mergeProps: MergeProps<undefined, DispatchProp, TOwnProps, TMergedProps>,
+  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>
+
+  /** mapState and mergeProps */
+  <
+    TStateProps = {},
+    no_dispatch = {},
+    TOwnProps = {},
+    TMergedProps = {},
+    State = DefaultState,
+  >(
+    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+    mapDispatchToProps: null | undefined,
+    mergeProps: MergeProps<TStateProps, DispatchProp, TOwnProps, TMergedProps>,
+  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>
+
+  /** mapDispatch (as a object) and mergeProps */
+  <no_state = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}>(
+    mapStateToProps: null | undefined,
+    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
+    mergeProps: MergeProps<undefined, TDispatchProps, TOwnProps, TMergedProps>,
+  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>
+
+  /** mapState and options */
+  <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(
+    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+    mapDispatchToProps: null | undefined,
+    mergeProps: null | undefined,
+    options: ConnectOptions<State, TStateProps, TOwnProps>,
+  ): InferableComponentEnhancerWithProps<DispatchProp & TStateProps, TOwnProps>
+
+  /** mapDispatch (as a function) and options */
+  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(
+    mapStateToProps: null | undefined,
+    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,
+    mergeProps: null | undefined,
+    options: ConnectOptions<{}, TStateProps, TOwnProps>,
+  ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>
+
+  /** mapDispatch (as an object) and options*/
+  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(
+    mapStateToProps: null | undefined,
+    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
+    mergeProps: null | undefined,
+    options: ConnectOptions<{}, TStateProps, TOwnProps>,
+  ): InferableComponentEnhancerWithProps<
+    ResolveThunks<TDispatchProps>,
+    TOwnProps
+  >
+
+  /** mapState,  mapDispatch (as a function), and options */
+  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(
+    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+    mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,
+    mergeProps: null | undefined,
+    options: ConnectOptions<State, TStateProps, TOwnProps>,
+  ): InferableComponentEnhancerWithProps<
+    TStateProps & TDispatchProps,
+    TOwnProps
+  >
+
+  /** mapState,  mapDispatch (as an object), and options */
+  <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(
+    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
+    mergeProps: null | undefined,
+    options: ConnectOptions<State, TStateProps, TOwnProps>,
+  ): InferableComponentEnhancerWithProps<
+    TStateProps & ResolveThunks<TDispatchProps>,
+    TOwnProps
+  >
+
+  /** mapState, mapDispatch, mergeProps, and options */
+  <
+    TStateProps = {},
+    TDispatchProps = {},
+    TOwnProps = {},
+    TMergedProps = {},
+    State = DefaultState,
+  >(
+    mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+    mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
+    mergeProps: MergeProps<
+      TStateProps,
+      TDispatchProps,
+      TOwnProps,
+      TMergedProps
+    >,
+    options?: ConnectOptions<State, TStateProps, TOwnProps, TMergedProps>,
+  ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>
+  // tslint:enable:no-unnecessary-generics
+}
+
+let hasWarnedAboutDeprecatedPureOption = false
+
+/**
+ * Connects a React component to a Redux store.
+ *
+ * - Without arguments, just wraps the component, without changing the behavior / props
+ *
+ * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior
+ * is to override ownProps (as stated in the docs), so what remains is everything that's
+ * not a state or dispatch prop
+ *
+ * - When 3rd param is passed, we don't know if ownProps propagate and whether they
+ * should be valid component props, because it depends on mergeProps implementation.
+ * As such, it is the user's responsibility to extend ownProps interface from state or
+ * dispatch props or both when applicable
+ *
+ * @param mapStateToProps A function that extracts values from state
+ * @param mapDispatchToProps Setup for dispatching actions
+ * @param mergeProps Optional callback to merge state and dispatch props together
+ * @param options Options for configuring the connection
+ *
+ */
+function connect<
+  TStateProps = {},
+  TDispatchProps = {},
+  TOwnProps = {},
+  TMergedProps = {},
+  State = unknown,
+>(
+  mapStateToProps?: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+  mapDispatchToProps?: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
+  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,
+  {
+    // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.
+    // @ts-ignore
+    pure,
+    areStatesEqual = strictEqual,
+    areOwnPropsEqual = shallowEqual,
+    areStatePropsEqual = shallowEqual,
+    areMergedPropsEqual = shallowEqual,
+
+    // use React's forwardRef to expose a ref of the wrapped component
+    forwardRef = false,
+
+    // the context consumer to use
+    context = ReactReduxContext,
+  }: ConnectOptions<unknown, unknown, unknown, unknown> = {},
+): unknown {
+  if (process.env.NODE_ENV !== 'production') {
+    if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {
+      hasWarnedAboutDeprecatedPureOption = true
+      warning(
+        'The `pure` option has been removed. `connect` is now always a "pure/memoized" component',
+      )
+    }
+  }
+
+  const Context = context
+
+  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps)
+  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps)
+  const initMergeProps = mergePropsFactory(mergeProps)
+
+  const shouldHandleStateChanges = Boolean(mapStateToProps)
+
+  const wrapWithConnect = <TProps,>(
+    WrappedComponent: ComponentType<TProps>,
+  ) => {
+    type WrappedComponentProps = TProps &
+      ConnectPropsMaybeWithoutContext<TProps>
+
+    if (process.env.NODE_ENV !== 'production') {
+      const isValid = /*#__PURE__*/ isValidElementType(WrappedComponent)
+      if (!isValid)
+        throw new Error(
+          `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(
+            WrappedComponent,
+          )}`,
+        )
+    }
+
+    const wrappedComponentName =
+      WrappedComponent.displayName || WrappedComponent.name || 'Component'
+
+    const displayName = `Connect(${wrappedComponentName})`
+
+    const selectorFactoryOptions: SelectorFactoryOptions<
+      any,
+      any,
+      any,
+      any,
+      State
+    > = {
+      shouldHandleStateChanges,
+      displayName,
+      wrappedComponentName,
+      WrappedComponent,
+      // @ts-ignore
+      initMapStateToProps,
+      initMapDispatchToProps,
+      initMergeProps,
+      areStatesEqual,
+      areStatePropsEqual,
+      areOwnPropsEqual,
+      areMergedPropsEqual,
+    }
+
+    function ConnectFunction<TOwnProps>(
+      props: InternalConnectProps & TOwnProps,
+    ) {
+      const [propsContext, reactReduxForwardedRef, wrapperProps] =
+        React.useMemo(() => {
+          // Distinguish between actual "data" props that were passed to the wrapper component,
+          // and values needed to control behavior (forwarded refs, alternate context instances).
+          // To maintain the wrapperProps object reference, memoize this destructuring.
+          const { reactReduxForwardedRef, ...wrapperProps } = props
+          return [props.context, reactReduxForwardedRef, wrapperProps]
+        }, [props])
+
+      const ContextToUse: ReactReduxContextInstance = React.useMemo(() => {
+        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.
+        // Memoize the check that determines which context instance we should use.
+        let ResultContext = Context
+        if (propsContext?.Consumer) {
+          if (process.env.NODE_ENV !== 'production') {
+            const isValid = /*#__PURE__*/ isContextConsumer(
+              // @ts-ignore
+              <propsContext.Consumer />,
+            )
+            if (!isValid) {
+              throw new Error(
+                'You must pass a valid React context consumer as `props.context`',
+              )
+            }
+            ResultContext = propsContext
+          }
+        }
+        return ResultContext
+      }, [propsContext, Context])
+
+      // Retrieve the store and ancestor subscription via context, if available
+      const contextValue = React.useContext(ContextToUse)
+
+      // The store _must_ exist as either a prop or in context.
+      // We'll check to see if it _looks_ like a Redux store first.
+      // This allows us to pass through a `store` prop that is just a plain value.
+      const didStoreComeFromProps =
+        Boolean(props.store) &&
+        Boolean(props.store!.getState) &&
+        Boolean(props.store!.dispatch)
+      const didStoreComeFromContext =
+        Boolean(contextValue) && Boolean(contextValue!.store)
+
+      if (
+        process.env.NODE_ENV !== 'production' &&
+        !didStoreComeFromProps &&
+        !didStoreComeFromContext
+      ) {
+        throw new Error(
+          `Could not find "store" in the context of ` +
+            `"${displayName}". Either wrap the root component in a <Provider>, ` +
+            `or pass a custom React context provider to <Provider> and the corresponding ` +
+            `React context consumer to ${displayName} in connect options.`,
+        )
+      }
+
+      // Based on the previous check, one of these must be true
+      const store: Store = didStoreComeFromProps
+        ? props.store!
+        : contextValue!.store
+
+      const getServerState = didStoreComeFromContext
+        ? contextValue!.getServerState
+        : store.getState
+
+      const childPropsSelector = React.useMemo(() => {
+        // The child props selector needs the store reference as an input.
+        // Re-create this selector whenever the store changes.
+        return defaultSelectorFactory(store.dispatch, selectorFactoryOptions)
+      }, [store])
+
+      const [subscription, notifyNestedSubs] = React.useMemo(() => {
+        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY
+
+        // This Subscription's source should match where store came from: props vs. context. A component
+        // connected to the store via props shouldn't use subscription from context, or vice versa.
+        const subscription = createSubscription(
+          store,
+          didStoreComeFromProps ? undefined : contextValue!.subscription,
+        )
+
+        // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in
+        // the middle of the notification loop, where `subscription` will then be null. This can
+        // probably be avoided if Subscription's listeners logic is changed to not call listeners
+        // that have been unsubscribed in the  middle of the notification loop.
+        const notifyNestedSubs =
+          subscription.notifyNestedSubs.bind(subscription)
+
+        return [subscription, notifyNestedSubs]
+      }, [store, didStoreComeFromProps, contextValue])
+
+      // Determine what {store, subscription} value should be put into nested context, if necessary,
+      // and memoize that value to avoid unnecessary context updates.
+      const overriddenContextValue = React.useMemo(() => {
+        if (didStoreComeFromProps) {
+          // This component is directly subscribed to a store from props.
+          // We don't want descendants reading from this store - pass down whatever
+          // the existing context value is from the nearest connected ancestor.
+          return contextValue!
+        }
+
+        // Otherwise, put this component's subscription instance into context, so that
+        // connected descendants won't update until after this component is done
+        return {
+          ...contextValue,
+          subscription,
+        } as ReactReduxContextValue
+      }, [didStoreComeFromProps, contextValue, subscription])
+
+      // Set up refs to coordinate values between the subscription effect and the render logic
+      const lastChildProps = React.useRef<unknown>(undefined)
+      const lastWrapperProps = React.useRef(wrapperProps)
+      const childPropsFromStoreUpdate = React.useRef<unknown>(undefined)
+      const renderIsScheduled = React.useRef(false)
+      const isMounted = React.useRef(false)
+
+      // TODO: Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.
+      /**
+       * @todo Change this to `React.useRef<Error>(undefined)` after upgrading to React 19.
+       */
+      const latestSubscriptionCallbackError = React.useRef<Error | undefined>(
+        undefined,
+      )
+
+      useIsomorphicLayoutEffect(() => {
+        isMounted.current = true
+        return () => {
+          isMounted.current = false
+        }
+      }, [])
+
+      const actualChildPropsSelector = React.useMemo(() => {
+        const selector = () => {
+          // Tricky logic here:
+          // - This render may have been triggered by a Redux store update that produced new child props
+          // - However, we may have gotten new wrapper props after that
+          // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.
+          // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.
+          // So, we'll use the child props from store update only if the wrapper props are the same as last time.
+          if (
+            childPropsFromStoreUpdate.current &&
+            wrapperProps === lastWrapperProps.current
+          ) {
+            return childPropsFromStoreUpdate.current
+          }
+
+          // TODO We're reading the store directly in render() here. Bad idea?
+          // This will likely cause Bad Things (TM) to happen in Concurrent Mode.
+          // Note that we do this because on renders _not_ caused by store updates, we need the latest store state
+          // to determine what the child props should be.
+          return childPropsSelector(store.getState(), wrapperProps)
+        }
+        return selector
+      }, [store, wrapperProps])
+
+      // We need this to execute synchronously every time we re-render. However, React warns
+      // about useLayoutEffect in SSR, so we try to detect environment and fall back to
+      // just useEffect instead to avoid the warning, since neither will run anyway.
+
+      const subscribeForReact = React.useMemo(() => {
+        const subscribe = (reactListener: () => void) => {
+          if (!subscription) {
+            return () => {}
+          }
+
+          return subscribeUpdates(
+            shouldHandleStateChanges,
+            store,
+            subscription,
+            // @ts-ignore
+            childPropsSelector,
+            lastWrapperProps,
+            lastChildProps,
+            renderIsScheduled,
+            isMounted,
+            childPropsFromStoreUpdate,
+            notifyNestedSubs,
+            reactListener,
+          )
+        }
+
+        return subscribe
+      }, [subscription])
+
+      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [
+        lastWrapperProps,
+        lastChildProps,
+        renderIsScheduled,
+        wrapperProps,
+        childPropsFromStoreUpdate,
+        notifyNestedSubs,
+      ])
+
+      let actualChildProps: Record<string, unknown>
+
+      try {
+        actualChildProps = React.useSyncExternalStore(
+          // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing
+          subscribeForReact,
+          // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,
+          // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.
+          actualChildPropsSelector,
+          getServerState
+            ? () => childPropsSelector(getServerState(), wrapperProps)
+            : actualChildPropsSelector,
+        )
+      } catch (err) {
+        if (latestSubscriptionCallbackError.current) {
+          // eslint-disable-next-line no-extra-semi
+          ;(err as Error).message +=
+            `\nThe error may be correlated with this previous error:\n${latestSubscriptionCallbackError.current.stack}\n\n`
+        }
+
+        throw err
+      }
+
+      useIsomorphicLayoutEffect(() => {
+        latestSubscriptionCallbackError.current = undefined
+        childPropsFromStoreUpdate.current = undefined
+        lastChildProps.current = actualChildProps
+      })
+
+      // Now that all that's done, we can finally try to actually render the child component.
+      // We memoize the elements for the rendered child component as an optimization.
+      const renderedWrappedComponent = React.useMemo(() => {
+        return (
+          // @ts-ignore
+          <WrappedComponent
+            {...actualChildProps}
+            ref={reactReduxForwardedRef}
+          />
+        )
+      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps])
+
+      // If React sees the exact same element reference as last time, it bails out of re-rendering
+      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.
+      const renderedChild = React.useMemo(() => {
+        if (shouldHandleStateChanges) {
+          // If this component is subscribed to store updates, we need to pass its own
+          // subscription instance down to our descendants. That means rendering the same
+          // Context instance, and putting a different value into the context.
+          return (
+            <ContextToUse.Provider value={overriddenContextValue}>
+              {renderedWrappedComponent}
+            </ContextToUse.Provider>
+          )
+        }
+
+        return renderedWrappedComponent
+      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue])
+
+      return renderedChild
+    }
+
+    const _Connect = React.memo(ConnectFunction)
+
+    type ConnectedWrapperComponent = typeof _Connect & {
+      WrappedComponent: typeof WrappedComponent
+    }
+
+    // Add a hacky cast to get the right output type
+    const Connect = _Connect as unknown as ConnectedComponent<
+      typeof WrappedComponent,
+      WrappedComponentProps
+    >
+    Connect.WrappedComponent = WrappedComponent
+    Connect.displayName = ConnectFunction.displayName = displayName
+
+    if (forwardRef) {
+      const _forwarded = React.forwardRef(
+        function forwardConnectRef(props, ref) {
+          // @ts-ignore
+          return <Connect {...props} reactReduxForwardedRef={ref} />
+        },
+      )
+
+      const forwarded = _forwarded as ConnectedWrapperComponent
+      forwarded.displayName = displayName
+      forwarded.WrappedComponent = WrappedComponent
+      return /*#__PURE__*/ hoistStatics(forwarded, WrappedComponent)
+    }
+
+    return /*#__PURE__*/ hoistStatics(Connect, WrappedComponent)
+  }
+
+  return wrapWithConnect
+}
+
+export default connect as Connect
Index: node_modules/react-redux/src/connect/invalidArgFactory.ts
===================================================================
--- node_modules/react-redux/src/connect/invalidArgFactory.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/connect/invalidArgFactory.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import type { Action, Dispatch } from 'redux'
+
+export function createInvalidArgFactory(arg: unknown, name: string) {
+  return (
+    dispatch: Dispatch<Action<string>>,
+    options: { readonly wrappedComponentName: string },
+  ) => {
+    throw new Error(
+      `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${
+        options.wrappedComponentName
+      }.`,
+    )
+  }
+}
Index: node_modules/react-redux/src/connect/mapDispatchToProps.ts
===================================================================
--- node_modules/react-redux/src/connect/mapDispatchToProps.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/connect/mapDispatchToProps.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import type { Action, Dispatch } from 'redux'
+import bindActionCreators from '../utils/bindActionCreators'
+import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'
+import { createInvalidArgFactory } from './invalidArgFactory'
+import type { MapDispatchToPropsParam } from './selectorFactory'
+
+export function mapDispatchToPropsFactory<TDispatchProps, TOwnProps>(
+  mapDispatchToProps:
+    | MapDispatchToPropsParam<TDispatchProps, TOwnProps>
+    | undefined,
+) {
+  return mapDispatchToProps && typeof mapDispatchToProps === 'object'
+    ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) =>
+        // @ts-ignore
+        bindActionCreators(mapDispatchToProps, dispatch),
+      )
+    : !mapDispatchToProps
+      ? wrapMapToPropsConstant((dispatch: Dispatch<Action<string>>) => ({
+          dispatch,
+        }))
+      : typeof mapDispatchToProps === 'function'
+        ? // @ts-ignore
+          wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps')
+        : createInvalidArgFactory(mapDispatchToProps, 'mapDispatchToProps')
+}
Index: node_modules/react-redux/src/connect/mapStateToProps.ts
===================================================================
--- node_modules/react-redux/src/connect/mapStateToProps.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/connect/mapStateToProps.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps'
+import { createInvalidArgFactory } from './invalidArgFactory'
+import type { MapStateToPropsParam } from './selectorFactory'
+
+export function mapStateToPropsFactory<TStateProps, TOwnProps, State>(
+  mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
+) {
+  return !mapStateToProps
+    ? wrapMapToPropsConstant(() => ({}))
+    : typeof mapStateToProps === 'function'
+      ? // @ts-ignore
+        wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps')
+      : createInvalidArgFactory(mapStateToProps, 'mapStateToProps')
+}
Index: node_modules/react-redux/src/connect/mergeProps.ts
===================================================================
--- node_modules/react-redux/src/connect/mergeProps.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/connect/mergeProps.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,78 @@
+import type { Action, Dispatch } from 'redux'
+import verifyPlainObject from '../utils/verifyPlainObject'
+import { createInvalidArgFactory } from './invalidArgFactory'
+import type { MergeProps } from './selectorFactory'
+import type { EqualityFn } from '../types'
+
+function defaultMergeProps<
+  TStateProps,
+  TDispatchProps,
+  TOwnProps,
+  TMergedProps,
+>(
+  stateProps: TStateProps,
+  dispatchProps: TDispatchProps,
+  ownProps: TOwnProps,
+): TMergedProps {
+  // @ts-ignore
+  return { ...ownProps, ...stateProps, ...dispatchProps }
+}
+
+function wrapMergePropsFunc<
+  TStateProps,
+  TDispatchProps,
+  TOwnProps,
+  TMergedProps,
+>(
+  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,
+): (
+  dispatch: Dispatch<Action<string>>,
+  options: {
+    readonly displayName: string
+    readonly areMergedPropsEqual: EqualityFn<TMergedProps>
+  },
+) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> {
+  return function initMergePropsProxy(
+    dispatch,
+    { displayName, areMergedPropsEqual },
+  ) {
+    let hasRunOnce = false
+    let mergedProps: TMergedProps
+
+    return function mergePropsProxy(
+      stateProps: TStateProps,
+      dispatchProps: TDispatchProps,
+      ownProps: TOwnProps,
+    ) {
+      const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps)
+
+      if (hasRunOnce) {
+        if (!areMergedPropsEqual(nextMergedProps, mergedProps))
+          mergedProps = nextMergedProps
+      } else {
+        hasRunOnce = true
+        mergedProps = nextMergedProps
+
+        if (process.env.NODE_ENV !== 'production')
+          verifyPlainObject(mergedProps, displayName, 'mergeProps')
+      }
+
+      return mergedProps
+    }
+  }
+}
+
+export function mergePropsFactory<
+  TStateProps,
+  TDispatchProps,
+  TOwnProps,
+  TMergedProps,
+>(
+  mergeProps?: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,
+) {
+  return !mergeProps
+    ? () => defaultMergeProps
+    : typeof mergeProps === 'function'
+      ? wrapMergePropsFunc(mergeProps)
+      : createInvalidArgFactory(mergeProps, 'mergeProps')
+}
Index: node_modules/react-redux/src/connect/selectorFactory.ts
===================================================================
--- node_modules/react-redux/src/connect/selectorFactory.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/connect/selectorFactory.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,242 @@
+import type { Dispatch, Action } from 'redux'
+import type { ComponentType } from 'react'
+import verifySubselectors from './verifySubselectors'
+import type { EqualityFn, ExtendedEqualityFn } from '../types'
+
+export type SelectorFactory<S, TProps, TOwnProps, TFactoryOptions> = (
+  dispatch: Dispatch<Action<string>>,
+  factoryOptions: TFactoryOptions,
+) => Selector<S, TProps, TOwnProps>
+
+export type Selector<S, TProps, TOwnProps = null> = TOwnProps extends
+  | null
+  | undefined
+  ? (state: S) => TProps
+  : (state: S, ownProps: TOwnProps) => TProps
+
+export type MapStateToProps<TStateProps, TOwnProps, State> = (
+  state: State,
+  ownProps: TOwnProps,
+) => TStateProps
+
+export type MapStateToPropsFactory<TStateProps, TOwnProps, State> = (
+  initialState: State,
+  ownProps: TOwnProps,
+) => MapStateToProps<TStateProps, TOwnProps, State>
+
+export type MapStateToPropsParam<TStateProps, TOwnProps, State> =
+  | MapStateToPropsFactory<TStateProps, TOwnProps, State>
+  | MapStateToProps<TStateProps, TOwnProps, State>
+  | null
+  | undefined
+
+export type MapDispatchToPropsFunction<TDispatchProps, TOwnProps> = (
+  dispatch: Dispatch<Action<string>>,
+  ownProps: TOwnProps,
+) => TDispatchProps
+
+export type MapDispatchToProps<TDispatchProps, TOwnProps> =
+  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>
+  | TDispatchProps
+
+export type MapDispatchToPropsFactory<TDispatchProps, TOwnProps> = (
+  dispatch: Dispatch<Action<string>>,
+  ownProps: TOwnProps,
+) => MapDispatchToPropsFunction<TDispatchProps, TOwnProps>
+
+export type MapDispatchToPropsParam<TDispatchProps, TOwnProps> =
+  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>
+  | MapDispatchToProps<TDispatchProps, TOwnProps>
+
+export type MapDispatchToPropsNonObject<TDispatchProps, TOwnProps> =
+  | MapDispatchToPropsFactory<TDispatchProps, TOwnProps>
+  | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>
+
+export type MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> = (
+  stateProps: TStateProps,
+  dispatchProps: TDispatchProps,
+  ownProps: TOwnProps,
+) => TMergedProps
+
+interface PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {
+  readonly areStatesEqual: ExtendedEqualityFn<State, TOwnProps>
+  readonly areStatePropsEqual: EqualityFn<TStateProps>
+  readonly areOwnPropsEqual: EqualityFn<TOwnProps>
+}
+
+function pureFinalPropsSelectorFactory<
+  TStateProps,
+  TOwnProps,
+  TDispatchProps,
+  TMergedProps,
+  State,
+>(
+  mapStateToProps: WrappedMapStateToProps<TStateProps, TOwnProps, State>,
+  mapDispatchToProps: WrappedMapDispatchToProps<TDispatchProps, TOwnProps>,
+  mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,
+  dispatch: Dispatch<Action<string>>,
+  {
+    areStatesEqual,
+    areOwnPropsEqual,
+    areStatePropsEqual,
+  }: PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State>,
+) {
+  let hasRunAtLeastOnce = false
+  let state: State
+  let ownProps: TOwnProps
+  let stateProps: TStateProps
+  let dispatchProps: TDispatchProps
+  let mergedProps: TMergedProps
+
+  function handleFirstCall(firstState: State, firstOwnProps: TOwnProps) {
+    state = firstState
+    ownProps = firstOwnProps
+    stateProps = mapStateToProps(state, ownProps)
+    dispatchProps = mapDispatchToProps(dispatch, ownProps)
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)
+    hasRunAtLeastOnce = true
+    return mergedProps
+  }
+
+  function handleNewPropsAndNewState() {
+    stateProps = mapStateToProps(state, ownProps)
+
+    if (mapDispatchToProps.dependsOnOwnProps)
+      dispatchProps = mapDispatchToProps(dispatch, ownProps)
+
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)
+    return mergedProps
+  }
+
+  function handleNewProps() {
+    if (mapStateToProps.dependsOnOwnProps)
+      stateProps = mapStateToProps(state, ownProps)
+
+    if (mapDispatchToProps.dependsOnOwnProps)
+      dispatchProps = mapDispatchToProps(dispatch, ownProps)
+
+    mergedProps = mergeProps(stateProps, dispatchProps, ownProps)
+    return mergedProps
+  }
+
+  function handleNewState() {
+    const nextStateProps = mapStateToProps(state, ownProps)
+    const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps)
+    stateProps = nextStateProps
+
+    if (statePropsChanged)
+      mergedProps = mergeProps(stateProps, dispatchProps, ownProps)
+
+    return mergedProps
+  }
+
+  function handleSubsequentCalls(nextState: State, nextOwnProps: TOwnProps) {
+    const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps)
+    const stateChanged = !areStatesEqual(
+      nextState,
+      state,
+      nextOwnProps,
+      ownProps,
+    )
+    state = nextState
+    ownProps = nextOwnProps
+
+    if (propsChanged && stateChanged) return handleNewPropsAndNewState()
+    if (propsChanged) return handleNewProps()
+    if (stateChanged) return handleNewState()
+    return mergedProps
+  }
+
+  return function pureFinalPropsSelector(
+    nextState: State,
+    nextOwnProps: TOwnProps,
+  ) {
+    return hasRunAtLeastOnce
+      ? handleSubsequentCalls(nextState, nextOwnProps)
+      : handleFirstCall(nextState, nextOwnProps)
+  }
+}
+
+interface WrappedMapStateToProps<TStateProps, TOwnProps, State> {
+  (state: State, ownProps: TOwnProps): TStateProps
+  readonly dependsOnOwnProps: boolean
+}
+
+interface WrappedMapDispatchToProps<TDispatchProps, TOwnProps> {
+  (dispatch: Dispatch<Action<string>>, ownProps: TOwnProps): TDispatchProps
+  readonly dependsOnOwnProps: boolean
+}
+
+export interface InitOptions<TStateProps, TOwnProps, TMergedProps, State>
+  extends PureSelectorFactoryComparisonOptions<TStateProps, TOwnProps, State> {
+  readonly shouldHandleStateChanges: boolean
+  readonly displayName: string
+  readonly wrappedComponentName: string
+  readonly WrappedComponent: ComponentType<TOwnProps>
+  readonly areMergedPropsEqual: EqualityFn<TMergedProps>
+}
+
+export interface SelectorFactoryOptions<
+  TStateProps,
+  TOwnProps,
+  TDispatchProps,
+  TMergedProps,
+  State,
+> extends InitOptions<TStateProps, TOwnProps, TMergedProps, State> {
+  readonly initMapStateToProps: (
+    dispatch: Dispatch<Action<string>>,
+    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,
+  ) => WrappedMapStateToProps<TStateProps, TOwnProps, State>
+  readonly initMapDispatchToProps: (
+    dispatch: Dispatch<Action<string>>,
+    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,
+  ) => WrappedMapDispatchToProps<TDispatchProps, TOwnProps>
+  readonly initMergeProps: (
+    dispatch: Dispatch<Action<string>>,
+    options: InitOptions<TStateProps, TOwnProps, TMergedProps, State>,
+  ) => MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>
+}
+
+// TODO: Add more comments
+
+// The selector returned by selectorFactory will memoize its results,
+// allowing connect's shouldComponentUpdate to return false if final
+// props have not changed.
+
+export default function finalPropsSelectorFactory<
+  TStateProps,
+  TOwnProps,
+  TDispatchProps,
+  TMergedProps,
+  State,
+>(
+  dispatch: Dispatch<Action<string>>,
+  {
+    initMapStateToProps,
+    initMapDispatchToProps,
+    initMergeProps,
+    ...options
+  }: SelectorFactoryOptions<
+    TStateProps,
+    TOwnProps,
+    TDispatchProps,
+    TMergedProps,
+    State
+  >,
+) {
+  const mapStateToProps = initMapStateToProps(dispatch, options)
+  const mapDispatchToProps = initMapDispatchToProps(dispatch, options)
+  const mergeProps = initMergeProps(dispatch, options)
+
+  if (process.env.NODE_ENV !== 'production') {
+    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps)
+  }
+
+  return pureFinalPropsSelectorFactory<
+    TStateProps,
+    TOwnProps,
+    TDispatchProps,
+    TMergedProps,
+    State
+  >(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options)
+}
Index: node_modules/react-redux/src/connect/verifySubselectors.ts
===================================================================
--- node_modules/react-redux/src/connect/verifySubselectors.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/connect/verifySubselectors.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import warning from '../utils/warning'
+
+function verify(selector: unknown, methodName: string): void {
+  if (!selector) {
+    throw new Error(`Unexpected value for ${methodName} in connect.`)
+  } else if (
+    methodName === 'mapStateToProps' ||
+    methodName === 'mapDispatchToProps'
+  ) {
+    if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) {
+      warning(
+        `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`,
+      )
+    }
+  }
+}
+
+export default function verifySubselectors(
+  mapStateToProps: unknown,
+  mapDispatchToProps: unknown,
+  mergeProps: unknown,
+): void {
+  verify(mapStateToProps, 'mapStateToProps')
+  verify(mapDispatchToProps, 'mapDispatchToProps')
+  verify(mergeProps, 'mergeProps')
+}
Index: node_modules/react-redux/src/connect/wrapMapToProps.ts
===================================================================
--- node_modules/react-redux/src/connect/wrapMapToProps.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/connect/wrapMapToProps.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+import type { ActionCreatorsMapObject, Dispatch, ActionCreator } from 'redux'
+
+import type { FixTypeLater } from '../types'
+import verifyPlainObject from '../utils/verifyPlainObject'
+
+type AnyState = { [key: string]: any }
+type StateOrDispatch<S extends AnyState = AnyState> = S | Dispatch
+
+type AnyProps = { [key: string]: any }
+
+export type MapToProps<P extends AnyProps = AnyProps> = {
+  // eslint-disable-next-line no-unused-vars
+  (stateOrDispatch: StateOrDispatch, ownProps?: P): FixTypeLater
+  dependsOnOwnProps?: boolean
+}
+
+export function wrapMapToPropsConstant(
+  // * Note:
+  //  It seems that the dispatch argument
+  //  could be a dispatch function in some cases (ex: whenMapDispatchToPropsIsMissing)
+  //  and a state object in some others (ex: whenMapStateToPropsIsMissing)
+  // eslint-disable-next-line no-unused-vars
+  getConstant: (dispatch: Dispatch) =>
+    | {
+        dispatch?: Dispatch
+        dependsOnOwnProps?: boolean
+      }
+    | ActionCreatorsMapObject
+    | ActionCreator<any>,
+) {
+  return function initConstantSelector(dispatch: Dispatch) {
+    const constant = getConstant(dispatch)
+
+    function constantSelector() {
+      return constant
+    }
+    constantSelector.dependsOnOwnProps = false
+    return constantSelector
+  }
+}
+
+// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args
+// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine
+// whether mapToProps needs to be invoked when props have changed.
+//
+// A length of one signals that mapToProps does not depend on props from the parent component.
+// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and
+// therefore not reporting its length accurately..
+// TODO Can this get pulled out so that we can subscribe directly to the store if we don't need ownProps?
+function getDependsOnOwnProps(mapToProps: MapToProps) {
+  return mapToProps.dependsOnOwnProps
+    ? Boolean(mapToProps.dependsOnOwnProps)
+    : mapToProps.length !== 1
+}
+
+// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,
+// this function wraps mapToProps in a proxy function which does several things:
+//
+//  * Detects whether the mapToProps function being called depends on props, which
+//    is used by selectorFactory to decide if it should reinvoke on props changes.
+//
+//  * On first call, handles mapToProps if returns another function, and treats that
+//    new function as the true mapToProps for subsequent calls.
+//
+//  * On first call, verifies the first result is a plain object, in order to warn
+//    the developer that their mapToProps function is not returning a valid result.
+//
+export function wrapMapToPropsFunc<P extends AnyProps = AnyProps>(
+  mapToProps: MapToProps,
+  methodName: string,
+) {
+  return function initProxySelector(
+    dispatch: Dispatch,
+    { displayName }: { displayName: string },
+  ) {
+    const proxy = function mapToPropsProxy(
+      stateOrDispatch: StateOrDispatch,
+      ownProps?: P,
+    ): MapToProps {
+      return proxy.dependsOnOwnProps
+        ? proxy.mapToProps(stateOrDispatch, ownProps)
+        : proxy.mapToProps(stateOrDispatch, undefined)
+    }
+
+    // allow detectFactoryAndVerify to get ownProps
+    proxy.dependsOnOwnProps = true
+
+    proxy.mapToProps = function detectFactoryAndVerify(
+      stateOrDispatch: StateOrDispatch,
+      ownProps?: P,
+    ): MapToProps {
+      proxy.mapToProps = mapToProps
+      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps)
+      let props = proxy(stateOrDispatch, ownProps)
+
+      if (typeof props === 'function') {
+        proxy.mapToProps = props
+        proxy.dependsOnOwnProps = getDependsOnOwnProps(props)
+        props = proxy(stateOrDispatch, ownProps)
+      }
+
+      if (process.env.NODE_ENV !== 'production')
+        verifyPlainObject(props, displayName, methodName)
+
+      return props
+    }
+
+    return proxy
+  }
+}
Index: node_modules/react-redux/src/exports.ts
===================================================================
--- node_modules/react-redux/src/exports.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/exports.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+import connect from './components/connect'
+export type {
+  Connect,
+  ConnectProps,
+  ConnectedProps,
+} from './components/connect'
+
+import shallowEqual from './utils/shallowEqual'
+
+import Provider from './components/Provider'
+import { defaultNoopBatch } from './utils/batch'
+
+export { ReactReduxContext } from './components/Context'
+export type { ReactReduxContextValue } from './components/Context'
+
+export type { ProviderProps } from './components/Provider'
+
+export type {
+  MapDispatchToProps,
+  MapDispatchToPropsFactory,
+  MapDispatchToPropsFunction,
+  MapDispatchToPropsNonObject,
+  MapDispatchToPropsParam,
+  MapStateToProps,
+  MapStateToPropsFactory,
+  MapStateToPropsParam,
+  MergeProps,
+  Selector,
+  SelectorFactory,
+} from './connect/selectorFactory'
+
+export { createDispatchHook, useDispatch } from './hooks/useDispatch'
+export type { UseDispatch } from './hooks/useDispatch'
+
+export { createSelectorHook, useSelector } from './hooks/useSelector'
+export type { UseSelector } from './hooks/useSelector'
+
+export { createStoreHook, useStore } from './hooks/useStore'
+export type { UseStore } from './hooks/useStore'
+
+export type { Subscription } from './utils/Subscription'
+
+export * from './types'
+
+/**
+ * @deprecated As of React 18, batching is enabled by default for ReactDOM and React Native.
+ * This is now a no-op that immediately runs the callback.
+ */
+const batch = defaultNoopBatch
+
+export { Provider, batch, connect, shallowEqual }
Index: node_modules/react-redux/src/hooks/useDispatch.ts
===================================================================
--- node_modules/react-redux/src/hooks/useDispatch.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/hooks/useDispatch.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,104 @@
+import type { Context } from 'react'
+import type { Action, Dispatch, UnknownAction } from 'redux'
+
+import type { ReactReduxContextValue } from '../components/Context'
+import { ReactReduxContext } from '../components/Context'
+import { createStoreHook, useStore as useDefaultStore } from './useStore'
+
+/**
+ * Represents a custom hook that provides a dispatch function
+ * from the Redux store.
+ *
+ * @template DispatchType - The specific type of the dispatch function.
+ *
+ * @since 9.1.0
+ * @public
+ */
+export interface UseDispatch<
+  DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>,
+> {
+  /**
+   * Returns the dispatch function from the Redux store.
+   *
+   * @returns The dispatch function from the Redux store.
+   *
+   * @template AppDispatch - The specific type of the dispatch function.
+   */
+  <AppDispatch extends DispatchType = DispatchType>(): AppDispatch
+
+  /**
+   * Creates a "pre-typed" version of {@linkcode useDispatch useDispatch}
+   * where the type of the `dispatch` function is predefined.
+   *
+   * This allows you to set the `dispatch` type once, eliminating the need to
+   * specify it with every {@linkcode useDispatch useDispatch} call.
+   *
+   * @returns A pre-typed `useDispatch` with the dispatch type already defined.
+   *
+   * @example
+   * ```ts
+   * export const useAppDispatch = useDispatch.withTypes<AppDispatch>()
+   * ```
+   *
+   * @template OverrideDispatchType - The specific type of the dispatch function.
+   *
+   * @since 9.1.0
+   */
+  withTypes: <
+    OverrideDispatchType extends DispatchType,
+  >() => UseDispatch<OverrideDispatchType>
+}
+
+/**
+ * Hook factory, which creates a `useDispatch` hook bound to a given context.
+ *
+ * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
+ * @returns {Function} A `useDispatch` hook bound to the specified context.
+ */
+export function createDispatchHook<
+  StateType = unknown,
+  ActionType extends Action = UnknownAction,
+>(
+  // @ts-ignore
+  context?: Context<ReactReduxContextValue<
+    StateType,
+    ActionType
+  > | null> = ReactReduxContext,
+) {
+  const useStore =
+    context === ReactReduxContext ? useDefaultStore : createStoreHook(context)
+
+  const useDispatch = () => {
+    const store = useStore()
+    return store.dispatch
+  }
+
+  Object.assign(useDispatch, {
+    withTypes: () => useDispatch,
+  })
+
+  return useDispatch as UseDispatch<Dispatch<ActionType>>
+}
+
+/**
+ * A hook to access the redux `dispatch` function.
+ *
+ * @returns {any|function} redux store's `dispatch` function
+ *
+ * @example
+ *
+ * import React, { useCallback } from 'react'
+ * import { useDispatch } from 'react-redux'
+ *
+ * export const CounterComponent = ({ value }) => {
+ *   const dispatch = useDispatch()
+ *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])
+ *   return (
+ *     <div>
+ *       <span>{value}</span>
+ *       <button onClick={increaseCounter}>Increase counter</button>
+ *     </div>
+ *   )
+ * }
+ */
+export const useDispatch = /*#__PURE__*/ createDispatchHook()
Index: node_modules/react-redux/src/hooks/useReduxContext.ts
===================================================================
--- node_modules/react-redux/src/hooks/useReduxContext.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/hooks/useReduxContext.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+import { React } from '../utils/react'
+import { ReactReduxContext } from '../components/Context'
+import type { ReactReduxContextValue } from '../components/Context'
+
+/**
+ * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level
+ * hook that you should usually not need to call directly.
+ *
+ * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
+ * @returns {Function} A `useReduxContext` hook bound to the specified context.
+ */
+export function createReduxContextHook(context = ReactReduxContext) {
+  return function useReduxContext(): ReactReduxContextValue {
+    const contextValue = React.useContext(context)
+
+    if (process.env.NODE_ENV !== 'production' && !contextValue) {
+      throw new Error(
+        'could not find react-redux context value; please ensure the component is wrapped in a <Provider>',
+      )
+    }
+
+    return contextValue!
+  }
+}
+
+/**
+ * A hook to access the value of the `ReactReduxContext`. This is a low-level
+ * hook that you should usually not need to call directly.
+ *
+ * @returns {any} the value of the `ReactReduxContext`
+ *
+ * @example
+ *
+ * import React from 'react'
+ * import { useReduxContext } from 'react-redux'
+ *
+ * export const CounterComponent = () => {
+ *   const { store } = useReduxContext()
+ *   return <div>{store.getState()}</div>
+ * }
+ */
+export const useReduxContext = /*#__PURE__*/ createReduxContextHook()
Index: node_modules/react-redux/src/hooks/useSelector.ts
===================================================================
--- node_modules/react-redux/src/hooks/useSelector.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/hooks/useSelector.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,286 @@
+//import * as React from 'react'
+import { React } from '../utils/react'
+import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector.js'
+import type { ReactReduxContextValue } from '../components/Context'
+import { ReactReduxContext } from '../components/Context'
+import type { EqualityFn, NoInfer } from '../types'
+import {
+  createReduxContextHook,
+  useReduxContext as useDefaultReduxContext,
+} from './useReduxContext'
+
+/**
+ * The frequency of development mode checks.
+ *
+ * @since 8.1.0
+ * @internal
+ */
+export type DevModeCheckFrequency = 'never' | 'once' | 'always'
+
+/**
+ * Represents the configuration for development mode checks.
+ *
+ * @since 9.0.0
+ * @internal
+ */
+export interface DevModeChecks {
+  /**
+   * Overrides the global stability check for the selector.
+   * - `once` - Run only the first time the selector is called.
+   * - `always` - Run every time the selector is called.
+   * - `never` - Never run the stability check.
+   *
+   * @default 'once'
+   *
+   * @since 8.1.0
+   */
+  stabilityCheck: DevModeCheckFrequency
+
+  /**
+   * Overrides the global identity function check for the selector.
+   * - `once` - Run only the first time the selector is called.
+   * - `always` - Run every time the selector is called.
+   * - `never` - Never run the identity function check.
+   *
+   * **Note**: Previously referred to as `noopCheck`.
+   *
+   * @default 'once'
+   *
+   * @since 9.0.0
+   */
+  identityFunctionCheck: DevModeCheckFrequency
+}
+
+export interface UseSelectorOptions<Selected = unknown> {
+  equalityFn?: EqualityFn<Selected>
+
+  /**
+   * `useSelector` performs additional checks in development mode to help
+   * identify and warn about potential issues in selector behavior. This
+   * option allows you to customize the behavior of these checks per selector.
+   *
+   * @since 9.0.0
+   */
+  devModeChecks?: Partial<DevModeChecks>
+}
+
+/**
+ * Represents a custom hook that allows you to extract data from the
+ * Redux store state, using a selector function. The selector function
+ * takes the current state as an argument and returns a part of the state
+ * or some derived data. The hook also supports an optional equality
+ * function or options object to customize its behavior.
+ *
+ * @template StateType - The specific type of state this hook operates on.
+ *
+ * @public
+ */
+export interface UseSelector<StateType = unknown> {
+  /**
+   * A function that takes a selector function as its first argument.
+   * The selector function is responsible for selecting a part of
+   * the Redux store's state or computing derived data.
+   *
+   * @param selector - A function that receives the current state and returns a part of the state or some derived data.
+   * @param equalityFnOrOptions - An optional equality function or options object for customizing the behavior of the selector.
+   * @returns The selected part of the state or derived data.
+   *
+   * @template TState - The specific type of state this hook operates on.
+   * @template Selected - The type of the value that the selector function will return.
+   */
+  <TState extends StateType = StateType, Selected = unknown>(
+    selector: (state: TState) => Selected,
+    equalityFnOrOptions?: EqualityFn<Selected> | UseSelectorOptions<Selected>,
+  ): Selected
+
+  /**
+   * Creates a "pre-typed" version of {@linkcode useSelector useSelector}
+   * where the `state` type is predefined.
+   *
+   * This allows you to set the `state` type once, eliminating the need to
+   * specify it with every {@linkcode useSelector useSelector} call.
+   *
+   * @returns A pre-typed `useSelector` with the state type already defined.
+   *
+   * @example
+   * ```ts
+   * export const useAppSelector = useSelector.withTypes<RootState>()
+   * ```
+   *
+   * @template OverrideStateType - The specific type of state this hook operates on.
+   *
+   * @since 9.1.0
+   */
+  withTypes: <
+    OverrideStateType extends StateType,
+  >() => UseSelector<OverrideStateType>
+}
+
+const refEquality: EqualityFn<any> = (a, b) => a === b
+
+/**
+ * Hook factory, which creates a `useSelector` hook bound to a given context.
+ *
+ * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
+ * @returns {Function} A `useSelector` hook bound to the specified context.
+ */
+export function createSelectorHook(
+  context: React.Context<ReactReduxContextValue<
+    any,
+    any
+  > | null> = ReactReduxContext,
+): UseSelector {
+  const useReduxContext =
+    context === ReactReduxContext
+      ? useDefaultReduxContext
+      : createReduxContextHook(context)
+
+  const useSelector = <TState, Selected>(
+    selector: (state: TState) => Selected,
+    equalityFnOrOptions:
+      | EqualityFn<NoInfer<Selected>>
+      | UseSelectorOptions<NoInfer<Selected>> = {},
+  ): Selected => {
+    const { equalityFn = refEquality } =
+      typeof equalityFnOrOptions === 'function'
+        ? { equalityFn: equalityFnOrOptions }
+        : equalityFnOrOptions
+    if (process.env.NODE_ENV !== 'production') {
+      if (!selector) {
+        throw new Error(`You must pass a selector to useSelector`)
+      }
+      if (typeof selector !== 'function') {
+        throw new Error(`You must pass a function as a selector to useSelector`)
+      }
+      if (typeof equalityFn !== 'function') {
+        throw new Error(
+          `You must pass a function as an equality function to useSelector`,
+        )
+      }
+    }
+
+    const reduxContext = useReduxContext()
+
+    const { store, subscription, getServerState } = reduxContext
+
+    const firstRun = React.useRef(true)
+
+    const wrappedSelector = React.useCallback<typeof selector>(
+      {
+        [selector.name](state: TState) {
+          const selected = selector(state)
+          if (process.env.NODE_ENV !== 'production') {
+            const { devModeChecks = {} } =
+              typeof equalityFnOrOptions === 'function'
+                ? {}
+                : equalityFnOrOptions
+            const { identityFunctionCheck, stabilityCheck } = reduxContext
+            const {
+              identityFunctionCheck: finalIdentityFunctionCheck,
+              stabilityCheck: finalStabilityCheck,
+            } = {
+              stabilityCheck,
+              identityFunctionCheck,
+              ...devModeChecks,
+            }
+            if (
+              finalStabilityCheck === 'always' ||
+              (finalStabilityCheck === 'once' && firstRun.current)
+            ) {
+              const toCompare = selector(state)
+              if (!equalityFn(selected, toCompare)) {
+                let stack: string | undefined = undefined
+                try {
+                  throw new Error()
+                } catch (e) {
+                  // eslint-disable-next-line no-extra-semi
+                  ;({ stack } = e as Error)
+                }
+                console.warn(
+                  'Selector ' +
+                    (selector.name || 'unknown') +
+                    ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' +
+                    '\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization',
+                  {
+                    state,
+                    selected,
+                    selected2: toCompare,
+                    stack,
+                  },
+                )
+              }
+            }
+            if (
+              finalIdentityFunctionCheck === 'always' ||
+              (finalIdentityFunctionCheck === 'once' && firstRun.current)
+            ) {
+              // @ts-ignore
+              if (selected === state) {
+                let stack: string | undefined = undefined
+                try {
+                  throw new Error()
+                } catch (e) {
+                  // eslint-disable-next-line no-extra-semi
+                  ;({ stack } = e as Error)
+                }
+                console.warn(
+                  'Selector ' +
+                    (selector.name || 'unknown') +
+                    ' returned the root state when called. This can lead to unnecessary rerenders.' +
+                    '\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.',
+                  { stack },
+                )
+              }
+            }
+            if (firstRun.current) firstRun.current = false
+          }
+          return selected
+        },
+      }[selector.name],
+      [selector],
+    )
+
+    const selectedState = useSyncExternalStoreWithSelector(
+      subscription.addNestedSub,
+      store.getState,
+      getServerState || store.getState,
+      wrappedSelector,
+      equalityFn,
+    )
+
+    React.useDebugValue(selectedState)
+
+    return selectedState
+  }
+
+  Object.assign(useSelector, {
+    withTypes: () => useSelector,
+  })
+
+  return useSelector as UseSelector
+}
+
+/**
+ * A hook to access the redux store's state. This hook takes a selector function
+ * as an argument. The selector is called with the store state.
+ *
+ * This hook takes an optional equality comparison function as the second parameter
+ * that allows you to customize the way the selected state is compared to determine
+ * whether the component needs to be re-rendered.
+ *
+ * @param {Function} selector the selector function
+ * @param {Function=} equalityFn the function that will be used to determine equality
+ *
+ * @returns {any} the selected state
+ *
+ * @example
+ *
+ * import React from 'react'
+ * import { useSelector } from 'react-redux'
+ *
+ * export const CounterComponent = () => {
+ *   const counter = useSelector(state => state.counter)
+ *   return <div>{counter}</div>
+ * }
+ */
+export const useSelector = /*#__PURE__*/ createSelectorHook()
Index: node_modules/react-redux/src/hooks/useStore.ts
===================================================================
--- node_modules/react-redux/src/hooks/useStore.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/hooks/useStore.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,123 @@
+import type { Context } from 'react'
+import type { Action, Store } from 'redux'
+import type { ReactReduxContextValue } from '../components/Context'
+import { ReactReduxContext } from '../components/Context'
+import {
+  createReduxContextHook,
+  useReduxContext as useDefaultReduxContext,
+} from './useReduxContext'
+
+/**
+ * Represents a type that extracts the action type from a given Redux store.
+ *
+ * @template StoreType - The specific type of the Redux store.
+ *
+ * @since 9.1.0
+ * @internal
+ */
+export type ExtractStoreActionType<StoreType extends Store> =
+  StoreType extends Store<any, infer ActionType> ? ActionType : never
+
+/**
+ * Represents a custom hook that provides access to the Redux store.
+ *
+ * @template StoreType - The specific type of the Redux store that gets returned.
+ *
+ * @since 9.1.0
+ * @public
+ */
+export interface UseStore<StoreType extends Store> {
+  /**
+   * Returns the Redux store instance.
+   *
+   * @returns The Redux store instance.
+   */
+  (): StoreType
+
+  /**
+   * Returns the Redux store instance with specific state and action types.
+   *
+   * @returns The Redux store with the specified state and action types.
+   *
+   * @template StateType - The specific type of the state used in the store.
+   * @template ActionType - The specific type of the actions used in the store.
+   */
+  <
+    StateType extends ReturnType<StoreType['getState']> = ReturnType<
+      StoreType['getState']
+    >,
+    ActionType extends Action = ExtractStoreActionType<Store>,
+  >(): Store<StateType, ActionType>
+
+  /**
+   * Creates a "pre-typed" version of {@linkcode useStore useStore}
+   * where the type of the Redux `store` is predefined.
+   *
+   * This allows you to set the `store` type once, eliminating the need to
+   * specify it with every {@linkcode useStore useStore} call.
+   *
+   * @returns A pre-typed `useStore` with the store type already defined.
+   *
+   * @example
+   * ```ts
+   * export const useAppStore = useStore.withTypes<AppStore>()
+   * ```
+   *
+   * @template OverrideStoreType - The specific type of the Redux store that gets returned.
+   *
+   * @since 9.1.0
+   */
+  withTypes: <
+    OverrideStoreType extends StoreType,
+  >() => UseStore<OverrideStoreType>
+}
+
+/**
+ * Hook factory, which creates a `useStore` hook bound to a given context.
+ *
+ * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
+ * @returns {Function} A `useStore` hook bound to the specified context.
+ */
+export function createStoreHook<
+  StateType = unknown,
+  ActionType extends Action = Action,
+>(
+  // @ts-ignore
+  context?: Context<ReactReduxContextValue<
+    StateType,
+    ActionType
+  > | null> = ReactReduxContext,
+) {
+  const useReduxContext =
+    context === ReactReduxContext
+      ? useDefaultReduxContext
+      : // @ts-ignore
+        createReduxContextHook(context)
+  const useStore = () => {
+    const { store } = useReduxContext()
+    return store
+  }
+
+  Object.assign(useStore, {
+    withTypes: () => useStore,
+  })
+
+  return useStore as UseStore<Store<StateType, ActionType>>
+}
+
+/**
+ * A hook to access the redux store.
+ *
+ * @returns {any} the redux store
+ *
+ * @example
+ *
+ * import React from 'react'
+ * import { useStore } from 'react-redux'
+ *
+ * export const ExampleComponent = () => {
+ *   const store = useStore()
+ *   return <div>{store.getState()}</div>
+ * }
+ */
+export const useStore = /*#__PURE__*/ createStoreHook()
Index: node_modules/react-redux/src/index-rsc.ts
===================================================================
--- node_modules/react-redux/src/index-rsc.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/index-rsc.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import type * as normal from './index'
+import type * as rsc from './index-rsc'
+
+// checks to make sure we didn't forgot to replicate any exports
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+const _check: typeof normal = {} as typeof rsc
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+const _check2: typeof rsc = {} as typeof normal
+
+// -------------------------------------------------------------------------------------
+
+const throwNotSupportedError = ((
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  ...args: any[]
+): any => {
+  throw new Error(
+    'This function is not supported in React Server Components. Please only use this export in a Client Component.',
+  )
+}) as any
+
+export {
+  throwNotSupportedError as Provider,
+  throwNotSupportedError as batch,
+  throwNotSupportedError as connect,
+  throwNotSupportedError as createDispatchHook,
+  throwNotSupportedError as createSelectorHook,
+  throwNotSupportedError as createStoreHook,
+  throwNotSupportedError as useDispatch,
+  throwNotSupportedError as useSelector,
+  throwNotSupportedError as useStore,
+}
+export const ReactReduxContext = {} as any
+export { default as shallowEqual } from './utils/shallowEqual'
Index: node_modules/react-redux/src/index.ts
===================================================================
--- node_modules/react-redux/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export * from './exports'
Index: node_modules/react-redux/src/types.ts
===================================================================
--- node_modules/react-redux/src/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,180 @@
+import type {
+  ClassAttributes,
+  ComponentClass,
+  ComponentType,
+  FunctionComponent,
+  JSX,
+} from 'react'
+
+import type { Action, UnknownAction, Dispatch } from 'redux'
+
+import type { NonReactStatics } from './utils/hoistStatics'
+
+import type { ConnectProps } from './components/connect'
+
+import type { UseSelectorOptions } from './hooks/useSelector'
+
+export type FixTypeLater = any
+
+export type EqualityFn<T> = (a: T, b: T) => boolean
+
+export type ExtendedEqualityFn<T, P> = (a: T, b: T, c: P, d: P) => boolean
+
+export type AnyIfEmpty<T extends object> = keyof T extends never ? any : T
+
+export type DistributiveOmit<T, K extends keyof T> = T extends unknown
+  ? Omit<T, K>
+  : never
+
+export interface DispatchProp<A extends Action<string> = UnknownAction> {
+  dispatch: Dispatch<A>
+}
+
+/**
+ * A property P will be present if:
+ * - it is present in DecorationTargetProps
+ *
+ * Its value will be dependent on the following conditions
+ * - if property P is present in InjectedProps and its definition extends the definition
+ *   in DecorationTargetProps, then its definition will be that of DecorationTargetProps[P]
+ * - if property P is not present in InjectedProps then its definition will be that of
+ *   DecorationTargetProps[P]
+ * - if property P is present in InjectedProps but does not extend the
+ *   DecorationTargetProps[P] definition, its definition will be that of InjectedProps[P]
+ */
+export type Matching<InjectedProps, DecorationTargetProps> = {
+  [P in keyof DecorationTargetProps]: P extends keyof InjectedProps
+    ? InjectedProps[P] extends DecorationTargetProps[P]
+      ? DecorationTargetProps[P]
+      : InjectedProps[P]
+    : DecorationTargetProps[P]
+}
+
+/**
+ * a property P will be present if :
+ * - it is present in both DecorationTargetProps and InjectedProps
+ * - InjectedProps[P] can satisfy DecorationTargetProps[P]
+ * ie: decorated component can accept more types than decorator is injecting
+ *
+ * For decoration, inject props or ownProps are all optionally
+ * required by the decorated (right hand side) component.
+ * But any property required by the decorated component must be satisfied by the injected property.
+ */
+export type Shared<InjectedProps, DecorationTargetProps> = {
+  [P in Extract<
+    keyof InjectedProps,
+    keyof DecorationTargetProps
+  >]?: InjectedProps[P] extends DecorationTargetProps[P]
+    ? DecorationTargetProps[P]
+    : never
+}
+
+// Infers prop type from component C
+export type GetProps<C> =
+  C extends ComponentType<infer P>
+    ? C extends ComponentClass<P>
+      ? ClassAttributes<InstanceType<C>> & P
+      : P
+    : never
+
+// Applies LibraryManagedAttributes (proper handling of defaultProps
+// and propTypes).
+export type GetLibraryManagedProps<C> = JSX.LibraryManagedAttributes<
+  C,
+  GetProps<C>
+>
+
+// Applies LibraryManagedAttributes (proper handling of defaultProps
+// and propTypes), as well as defines WrappedComponent.
+export type ConnectedComponent<
+  C extends ComponentType<any>,
+  P,
+> = FunctionComponent<P> &
+  NonReactStatics<C> & {
+    WrappedComponent: C
+  }
+
+export type ConnectPropsMaybeWithoutContext<TActualOwnProps> =
+  TActualOwnProps extends { context: any }
+    ? Omit<ConnectProps, 'context'>
+    : ConnectProps
+
+type Identity<T> = T
+export type Mapped<T> = Identity<{ [k in keyof T]: T[k] }>
+
+// Injects props and removes them from the prop requirements.
+// Will not pass through the injected props if they are passed in during
+// render. Also adds new prop requirements from TNeedsProps.
+// Uses distributive omit to preserve discriminated unions part of original prop type.
+// Note> Most of the time TNeedsProps is empty, because the overloads in `Connect`
+// just pass in `{}`.  The real props we need come from the component.
+export type InferableComponentEnhancerWithProps<TInjectedProps, TNeedsProps> = <
+  C extends ComponentType<Matching<TInjectedProps, GetProps<C>>>,
+>(
+  component: C,
+) => ConnectedComponent<
+  C,
+  Mapped<
+    DistributiveOmit<
+      GetLibraryManagedProps<C>,
+      keyof Shared<TInjectedProps, GetLibraryManagedProps<C>>
+    > &
+      TNeedsProps &
+      ConnectPropsMaybeWithoutContext<TNeedsProps & GetProps<C>>
+  >
+>
+
+// Injects props and removes them from the prop requirements.
+// Will not pass through the injected props if they are passed in during
+// render.
+export type InferableComponentEnhancer<TInjectedProps> =
+  InferableComponentEnhancerWithProps<TInjectedProps, {}>
+
+export type InferThunkActionCreatorType<
+  TActionCreator extends (...args: any[]) => any,
+> = TActionCreator extends (
+  ...args: infer TParams
+) => (...args: any[]) => infer TReturn
+  ? (...args: TParams) => TReturn
+  : TActionCreator
+
+export type HandleThunkActionCreator<TActionCreator> = TActionCreator extends (
+  ...args: any[]
+) => any
+  ? InferThunkActionCreatorType<TActionCreator>
+  : TActionCreator
+
+// redux-thunk middleware returns thunk's return value from dispatch call
+// https://github.com/reduxjs/redux-thunk#composition
+export type ResolveThunks<TDispatchProps> = TDispatchProps extends {
+  [key: string]: any
+}
+  ? {
+      [C in keyof TDispatchProps]: HandleThunkActionCreator<TDispatchProps[C]>
+    }
+  : TDispatchProps
+
+/**
+ * This interface allows you to easily create a hook that is properly typed for your
+ * store's root state.
+ *
+ * @example
+ *
+ * interface RootState {
+ *   property: string;
+ * }
+ *
+ * const useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;
+ */
+export interface TypedUseSelectorHook<TState> {
+  <TSelected>(
+    selector: (state: TState) => TSelected,
+    equalityFn?: EqualityFn<NoInfer<TSelected>>,
+  ): TSelected
+  <Selected = unknown>(
+    selector: (state: TState) => Selected,
+    options?: UseSelectorOptions<Selected>,
+  ): Selected
+}
+
+export type NoInfer<T> = [T][T extends any ? 0 : never]
Index: node_modules/react-redux/src/utils/Subscription.ts
===================================================================
--- node_modules/react-redux/src/utils/Subscription.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/Subscription.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,183 @@
+import { defaultNoopBatch as batch } from './batch'
+
+// encapsulates the subscription logic for connecting a component to the redux store, as
+// well as nesting subscriptions of descendant components, so that we can ensure the
+// ancestor components re-render before descendants
+
+type VoidFunc = () => void
+
+type Listener = {
+  callback: VoidFunc
+  next: Listener | null
+  prev: Listener | null
+}
+
+function createListenerCollection() {
+  let first: Listener | null = null
+  let last: Listener | null = null
+
+  return {
+    clear() {
+      first = null
+      last = null
+    },
+
+    notify() {
+      batch(() => {
+        let listener = first
+        while (listener) {
+          listener.callback()
+          listener = listener.next
+        }
+      })
+    },
+
+    get() {
+      const listeners: Listener[] = []
+      let listener = first
+      while (listener) {
+        listeners.push(listener)
+        listener = listener.next
+      }
+      return listeners
+    },
+
+    subscribe(callback: () => void) {
+      let isSubscribed = true
+
+      const listener: Listener = (last = {
+        callback,
+        next: null,
+        prev: last,
+      })
+
+      if (listener.prev) {
+        listener.prev.next = listener
+      } else {
+        first = listener
+      }
+
+      return function unsubscribe() {
+        if (!isSubscribed || first === null) return
+        isSubscribed = false
+
+        if (listener.next) {
+          listener.next.prev = listener.prev
+        } else {
+          last = listener.prev
+        }
+        if (listener.prev) {
+          listener.prev.next = listener.next
+        } else {
+          first = listener.next
+        }
+      }
+    },
+  }
+}
+
+type ListenerCollection = ReturnType<typeof createListenerCollection>
+
+export interface Subscription {
+  addNestedSub: (listener: VoidFunc) => VoidFunc
+  notifyNestedSubs: VoidFunc
+  handleChangeWrapper: VoidFunc
+  isSubscribed: () => boolean
+  onStateChange?: VoidFunc | null
+  trySubscribe: VoidFunc
+  tryUnsubscribe: VoidFunc
+  getListeners: () => ListenerCollection
+}
+
+const nullListeners = {
+  notify() {},
+  get: () => [],
+} as unknown as ListenerCollection
+
+export function createSubscription(store: any, parentSub?: Subscription) {
+  let unsubscribe: VoidFunc | undefined
+  let listeners: ListenerCollection = nullListeners
+
+  // Reasons to keep the subscription active
+  let subscriptionsAmount = 0
+
+  // Is this specific subscription subscribed (or only nested ones?)
+  let selfSubscribed = false
+
+  function addNestedSub(listener: () => void) {
+    trySubscribe()
+
+    const cleanupListener = listeners.subscribe(listener)
+
+    // cleanup nested sub
+    let removed = false
+    return () => {
+      if (!removed) {
+        removed = true
+        cleanupListener()
+        tryUnsubscribe()
+      }
+    }
+  }
+
+  function notifyNestedSubs() {
+    listeners.notify()
+  }
+
+  function handleChangeWrapper() {
+    if (subscription.onStateChange) {
+      subscription.onStateChange()
+    }
+  }
+
+  function isSubscribed() {
+    return selfSubscribed
+  }
+
+  function trySubscribe() {
+    subscriptionsAmount++
+    if (!unsubscribe) {
+      unsubscribe = parentSub
+        ? parentSub.addNestedSub(handleChangeWrapper)
+        : store.subscribe(handleChangeWrapper)
+
+      listeners = createListenerCollection()
+    }
+  }
+
+  function tryUnsubscribe() {
+    subscriptionsAmount--
+    if (unsubscribe && subscriptionsAmount === 0) {
+      unsubscribe()
+      unsubscribe = undefined
+      listeners.clear()
+      listeners = nullListeners
+    }
+  }
+
+  function trySubscribeSelf() {
+    if (!selfSubscribed) {
+      selfSubscribed = true
+      trySubscribe()
+    }
+  }
+
+  function tryUnsubscribeSelf() {
+    if (selfSubscribed) {
+      selfSubscribed = false
+      tryUnsubscribe()
+    }
+  }
+
+  const subscription: Subscription = {
+    addNestedSub,
+    notifyNestedSubs,
+    handleChangeWrapper,
+    isSubscribed,
+    trySubscribe: trySubscribeSelf,
+    tryUnsubscribe: tryUnsubscribeSelf,
+    getListeners: () => listeners,
+  }
+
+  return subscription
+}
Index: node_modules/react-redux/src/utils/batch.ts
===================================================================
--- node_modules/react-redux/src/utils/batch.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/batch.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+// Default to a dummy "batch" implementation that just runs the callback
+export function defaultNoopBatch(callback: () => void) {
+  callback()
+}
Index: node_modules/react-redux/src/utils/bindActionCreators.ts
===================================================================
--- node_modules/react-redux/src/utils/bindActionCreators.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/bindActionCreators.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import type { ActionCreatorsMapObject, Dispatch } from 'redux'
+
+export default function bindActionCreators(
+  actionCreators: ActionCreatorsMapObject,
+  dispatch: Dispatch,
+): ActionCreatorsMapObject {
+  const boundActionCreators: ActionCreatorsMapObject = {}
+
+  for (const key in actionCreators) {
+    const actionCreator = actionCreators[key]
+    if (typeof actionCreator === 'function') {
+      boundActionCreators[key] = (...args) => dispatch(actionCreator(...args))
+    }
+  }
+  return boundActionCreators
+}
Index: node_modules/react-redux/src/utils/hoistStatics.ts
===================================================================
--- node_modules/react-redux/src/utils/hoistStatics.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/hoistStatics.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,139 @@
+// Copied directly from:
+// https://github.com/mridgway/hoist-non-react-statics/blob/main/src/index.js
+// https://unpkg.com/browse/@types/hoist-non-react-statics@3.3.6/index.d.ts
+
+/**
+ * Copyright 2015, Yahoo! Inc.
+ * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
+ */
+import type { ForwardRefExoticComponent, MemoExoticComponent } from 'react'
+import { ForwardRef, Memo, isMemo } from '../utils/react-is'
+
+const REACT_STATICS = {
+  childContextTypes: true,
+  contextType: true,
+  contextTypes: true,
+  defaultProps: true,
+  displayName: true,
+  getDefaultProps: true,
+  getDerivedStateFromError: true,
+  getDerivedStateFromProps: true,
+  mixins: true,
+  propTypes: true,
+  type: true,
+} as const
+
+const KNOWN_STATICS = {
+  name: true,
+  length: true,
+  prototype: true,
+  caller: true,
+  callee: true,
+  arguments: true,
+  arity: true,
+} as const
+
+const FORWARD_REF_STATICS = {
+  $$typeof: true,
+  render: true,
+  defaultProps: true,
+  displayName: true,
+  propTypes: true,
+} as const
+
+const MEMO_STATICS = {
+  $$typeof: true,
+  compare: true,
+  defaultProps: true,
+  displayName: true,
+  propTypes: true,
+  type: true,
+} as const
+
+const TYPE_STATICS = {
+  [ForwardRef]: FORWARD_REF_STATICS,
+  [Memo]: MEMO_STATICS,
+} as const
+
+function getStatics(component: any) {
+  // React v16.11 and below
+  if (isMemo(component)) {
+    return MEMO_STATICS
+  }
+
+  // React v16.12 and above
+  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS
+}
+
+export type NonReactStatics<
+  Source,
+  C extends {
+    [key: string]: true
+  } = {},
+> = {
+  [key in Exclude<
+    keyof Source,
+    Source extends MemoExoticComponent<any>
+      ? keyof typeof MEMO_STATICS | keyof C
+      : Source extends ForwardRefExoticComponent<any>
+        ? keyof typeof FORWARD_REF_STATICS | keyof C
+        : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C
+  >]: Source[key]
+}
+
+const defineProperty = Object.defineProperty
+const getOwnPropertyNames = Object.getOwnPropertyNames
+const getOwnPropertySymbols = Object.getOwnPropertySymbols
+const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor
+const getPrototypeOf = Object.getPrototypeOf
+const objectPrototype = Object.prototype
+
+export default function hoistNonReactStatics<
+  Target,
+  Source,
+  CustomStatic extends {
+    [key: string]: true
+  } = {},
+>(
+  targetComponent: Target,
+  sourceComponent: Source,
+): Target & NonReactStatics<Source, CustomStatic> {
+  if (typeof sourceComponent !== 'string') {
+    // don't hoist over string (html) components
+
+    if (objectPrototype) {
+      const inheritedComponent = getPrototypeOf(sourceComponent)
+      if (inheritedComponent && inheritedComponent !== objectPrototype) {
+        hoistNonReactStatics(targetComponent, inheritedComponent)
+      }
+    }
+
+    let keys: (string | symbol)[] = getOwnPropertyNames(sourceComponent)
+
+    if (getOwnPropertySymbols) {
+      keys = keys.concat(getOwnPropertySymbols(sourceComponent))
+    }
+
+    const targetStatics = getStatics(targetComponent)
+    const sourceStatics = getStatics(sourceComponent)
+
+    for (let i = 0; i < keys.length; ++i) {
+      const key = keys[i]
+      if (
+        !KNOWN_STATICS[key as keyof typeof KNOWN_STATICS] &&
+        !(sourceStatics && sourceStatics[key as keyof typeof sourceStatics]) &&
+        !(targetStatics && targetStatics[key as keyof typeof targetStatics])
+      ) {
+        const descriptor = getOwnPropertyDescriptor(sourceComponent, key)
+        try {
+          // Avoid failures from read-only properties
+          defineProperty(targetComponent, key, descriptor!)
+        } catch (e) {
+          // ignore
+        }
+      }
+    }
+  }
+
+  return targetComponent as any
+}
Index: node_modules/react-redux/src/utils/isPlainObject.ts
===================================================================
--- node_modules/react-redux/src/utils/isPlainObject.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/isPlainObject.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * @param {any} obj The object to inspect.
+ * @returns {boolean} True if the argument appears to be a plain object.
+ */
+export default function isPlainObject(obj: unknown) {
+  if (typeof obj !== 'object' || obj === null) return false
+
+  const proto = Object.getPrototypeOf(obj)
+  if (proto === null) return true
+
+  let baseProto = proto
+  while (Object.getPrototypeOf(baseProto) !== null) {
+    baseProto = Object.getPrototypeOf(baseProto)
+  }
+
+  return proto === baseProto
+}
Index: node_modules/react-redux/src/utils/react-is.ts
===================================================================
--- node_modules/react-redux/src/utils/react-is.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/react-is.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,97 @@
+import type { ElementType, MemoExoticComponent, ReactElement } from 'react'
+import { React } from './react'
+
+// Directly ported from:
+// https://unpkg.com/browse/react-is@19.0.0/cjs/react-is.production.js
+// It's very possible this could change in the future, but given that
+// we only use these in `connect`, this is a low priority.
+
+export const IS_REACT_19 = /* @__PURE__ */ React.version.startsWith('19')
+
+const REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for(
+  IS_REACT_19 ? 'react.transitional.element' : 'react.element',
+)
+const REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for('react.portal')
+const REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for('react.fragment')
+const REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for('react.strict_mode')
+const REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for('react.profiler')
+const REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for('react.consumer')
+const REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for('react.context')
+const REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for('react.forward_ref')
+const REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for('react.suspense')
+const REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for(
+  'react.suspense_list',
+)
+const REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for('react.memo')
+const REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for('react.lazy')
+const REACT_OFFSCREEN_TYPE = /* @__PURE__ */ Symbol.for('react.offscreen')
+const REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for(
+  'react.client.reference',
+)
+
+export const ForwardRef = REACT_FORWARD_REF_TYPE
+export const Memo = REACT_MEMO_TYPE
+
+export function isValidElementType(type: any): type is ElementType {
+  return typeof type === 'string' ||
+    typeof type === 'function' ||
+    type === REACT_FRAGMENT_TYPE ||
+    type === REACT_PROFILER_TYPE ||
+    type === REACT_STRICT_MODE_TYPE ||
+    type === REACT_SUSPENSE_TYPE ||
+    type === REACT_SUSPENSE_LIST_TYPE ||
+    type === REACT_OFFSCREEN_TYPE ||
+    (typeof type === 'object' &&
+      type !== null &&
+      (type.$$typeof === REACT_LAZY_TYPE ||
+        type.$$typeof === REACT_MEMO_TYPE ||
+        type.$$typeof === REACT_CONTEXT_TYPE ||
+        type.$$typeof === REACT_CONSUMER_TYPE ||
+        type.$$typeof === REACT_FORWARD_REF_TYPE ||
+        type.$$typeof === REACT_CLIENT_REFERENCE ||
+        type.getModuleId !== undefined))
+    ? !0
+    : !1
+}
+
+function typeOf(object: any): symbol | undefined {
+  if (typeof object === 'object' && object !== null) {
+    const { $$typeof } = object
+
+    switch ($$typeof) {
+      case REACT_ELEMENT_TYPE:
+        switch (((object = object.type), object)) {
+          case REACT_FRAGMENT_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_SUSPENSE_TYPE:
+          case REACT_SUSPENSE_LIST_TYPE:
+            return object
+          default:
+            switch (((object = object && object.$$typeof), object)) {
+              case REACT_CONTEXT_TYPE:
+              case REACT_FORWARD_REF_TYPE:
+              case REACT_LAZY_TYPE:
+              case REACT_MEMO_TYPE:
+                return object
+              case REACT_CONSUMER_TYPE:
+                return object
+              default:
+                return $$typeof
+            }
+        }
+      case REACT_PORTAL_TYPE:
+        return $$typeof
+    }
+  }
+}
+
+export function isContextConsumer(object: any): object is ReactElement {
+  return IS_REACT_19
+    ? typeOf(object) === REACT_CONSUMER_TYPE
+    : typeOf(object) === REACT_CONTEXT_TYPE
+}
+
+export function isMemo(object: any): object is MemoExoticComponent<any> {
+  return typeOf(object) === REACT_MEMO_TYPE
+}
Index: node_modules/react-redux/src/utils/react.ts
===================================================================
--- node_modules/react-redux/src/utils/react.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/react.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react'
+
+export { React }
Index: node_modules/react-redux/src/utils/shallowEqual.ts
===================================================================
--- node_modules/react-redux/src/utils/shallowEqual.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/shallowEqual.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+function is(x: unknown, y: unknown) {
+  if (x === y) {
+    return x !== 0 || y !== 0 || 1 / x === 1 / y
+  } else {
+    return x !== x && y !== y
+  }
+}
+
+export default function shallowEqual(objA: any, objB: any) {
+  if (is(objA, objB)) return true
+
+  if (
+    typeof objA !== 'object' ||
+    objA === null ||
+    typeof objB !== 'object' ||
+    objB === null
+  ) {
+    return false
+  }
+
+  const keysA = Object.keys(objA)
+  const keysB = Object.keys(objB)
+
+  if (keysA.length !== keysB.length) return false
+
+  for (let i = 0; i < keysA.length; i++) {
+    if (
+      !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||
+      !is(objA[keysA[i]], objB[keysA[i]])
+    ) {
+      return false
+    }
+  }
+
+  return true
+}
Index: node_modules/react-redux/src/utils/useIsomorphicLayoutEffect.ts
===================================================================
--- node_modules/react-redux/src/utils/useIsomorphicLayoutEffect.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/useIsomorphicLayoutEffect.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { React } from '../utils/react'
+
+// React currently throws a warning when using useLayoutEffect on the server.
+// To get around it, we can conditionally useEffect on the server (no-op) and
+// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store
+// subscription callback always has the selector from the latest render commit
+// available, otherwise a store update may happen between render and the effect,
+// which may cause missed updates; we also must ensure the store subscription
+// is created synchronously, otherwise a store update may occur before the
+// subscription is created and an inconsistent state may be observed
+
+// Matches logic in React's `shared/ExecutionEnvironment` file
+const canUseDOM = () =>
+  !!(
+    typeof window !== 'undefined' &&
+    typeof window.document !== 'undefined' &&
+    typeof window.document.createElement !== 'undefined'
+  )
+
+const isDOM = /* @__PURE__ */ canUseDOM()
+
+// Under React Native, we know that we always want to use useLayoutEffect
+
+/**
+ * Checks if the code is running in a React Native environment.
+ *
+ * @returns Whether the code is running in a React Native environment.
+ *
+ * @see {@link https://github.com/facebook/react-native/issues/1331 Reference}
+ */
+const isRunningInReactNative = () =>
+  typeof navigator !== 'undefined' && navigator.product === 'ReactNative'
+
+const isReactNative = /* @__PURE__ */ isRunningInReactNative()
+
+const getUseIsomorphicLayoutEffect = () =>
+  isDOM || isReactNative ? React.useLayoutEffect : React.useEffect
+
+export const useIsomorphicLayoutEffect =
+  /* @__PURE__ */ getUseIsomorphicLayoutEffect()
Index: node_modules/react-redux/src/utils/useSyncExternalStore.ts
===================================================================
--- node_modules/react-redux/src/utils/useSyncExternalStore.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/useSyncExternalStore.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import type { useSyncExternalStore } from 'use-sync-external-store'
+import type { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector'
+
+export const notInitialized = () => {
+  throw new Error('uSES not initialized!')
+}
+
+export type uSES = typeof useSyncExternalStore
+export type uSESWS = typeof useSyncExternalStoreWithSelector
Index: node_modules/react-redux/src/utils/verifyPlainObject.ts
===================================================================
--- node_modules/react-redux/src/utils/verifyPlainObject.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/verifyPlainObject.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import isPlainObject from './isPlainObject'
+import warning from './warning'
+
+export default function verifyPlainObject(
+  value: unknown,
+  displayName: string,
+  methodName: string,
+) {
+  if (!isPlainObject(value)) {
+    warning(
+      `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`,
+    )
+  }
+}
Index: node_modules/react-redux/src/utils/warning.ts
===================================================================
--- node_modules/react-redux/src/utils/warning.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-redux/src/utils/warning.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Prints a warning in the console if it exists.
+ *
+ * @param {String} message The warning message.
+ * @returns {void}
+ */
+export default function warning(message: string) {
+  /* eslint-disable no-console */
+  if (typeof console !== 'undefined' && typeof console.error === 'function') {
+    console.error(message)
+  }
+  /* eslint-enable no-console */
+  try {
+    // This error was thrown as a convenience so that if you enable
+    // "break on all exceptions" in your console,
+    // it would pause the execution at this line.
+    throw new Error(message)
+    /* eslint-disable no-empty */
+  } catch (e) {}
+  /* eslint-enable no-empty */
+}
Index: node_modules/react-time-picker/LICENSE
===================================================================
--- node_modules/react-time-picker/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017–2024 Wojciech Maj
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/react-time-picker/README.md
===================================================================
--- node_modules/react-time-picker/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,149 @@
+[![npm](https://img.shields.io/npm/v/react-time-picker.svg)](https://www.npmjs.com/package/react-time-picker) ![downloads](https://img.shields.io/npm/dt/react-time-picker.svg) [![CI](https://github.com/wojtekmaj/react-time-picker/actions/workflows/ci.yml/badge.svg)](https://github.com/wojtekmaj/react-time-picker/actions)
+
+# React-Time-Picker
+
+A time picker for your React app.
+
+- Supports virtually any language
+- No moment.js needed
+
+## tl;dr
+
+- Install by executing `npm install react-time-picker` or `yarn add react-time-picker`.
+- Import by adding `import TimePicker from 'react-time-picker'`.
+- Use by adding `<TimePicker />`. Use `onChange` prop for getting new values.
+
+## Demo
+
+A minimal demo page can be found in `sample` directory.
+
+[Online demo](https://projects.wojtekmaj.pl/react-time-picker/) is also available!
+
+## Consider native alternative
+
+If you don't need to support legacy browsers and don't need the advanced features this package provides, consider using native time input instead. It's more accessible, adds no extra weight to your bundle, and works better on mobile devices.
+
+```tsx
+<input aria-label="Time" type="time" />
+```
+
+## Looking for a date picker or a datetime picker?
+
+React-Time-Picker will play nicely with [React-Date-Picker](https://github.com/wojtekmaj/react-date-picker) and [React-DateTime-Picker](https://github.com/wojtekmaj/react-datetime-picker). Check them out!
+
+## Getting started
+
+### Compatibility
+
+Your project needs to use React 16.3 or later. If you use an older version of React, please refer to the table below to find a suitable React-Time-Picker version.
+
+| React version | Newest compatible React-Time-Picker version |
+| ------------- | ------------------------------------------- |
+| ≥16.3         | latest                                      |
+| ≥16.0         | 3.x                                         |
+
+#### Legacy browsers
+
+If you need to support legacy browsers like Internet Explorer 10, you will need to use [Intl.js](https://github.com/andyearnshaw/Intl.js/) or another Intl polyfill along with React-Date-Picker.
+
+### Installation
+
+Add React-Time-Picker to your project by executing `npm install react-time-picker` or `yarn add react-time-picker`.
+
+### Usage
+
+Here's an example of basic usage:
+
+```tsx
+import { useState } from 'react';
+import TimePicker from 'react-time-picker';
+
+function MyApp() {
+  const [value, onChange] = useState('10:00');
+
+  return (
+    <div>
+      <TimePicker onChange={onChange} value={value} />
+    </div>
+  );
+}
+```
+
+### Custom styling
+
+If you want to use default React-Date-Picker and React-Clock styling to build upon it, you can import them by using:
+
+```ts
+import 'react-time-picker/dist/TimePicker.css';
+import 'react-clock/dist/Clock.css';
+```
+
+## User guide
+
+### TimePicker
+
+Displays an input field complete with custom inputs, native input and a clock.
+
+#### Props
+
+| Prop name            | Description                                                                                                                                                                                                                                                                                                                                       | Default value                         | Example values                                                                                                                                                                                                                        |
+| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| amPmAriaLabel        | `aria-label` for the AM/PM select input.                                                                                                                                                                                                                                                                                                          | n/a                                   | `"Select AM/PM"`                                                                                                                                                                                                                      |
+| autoFocus            | Automatically focuses the input on mount.                                                                                                                                                                                                                                                                                                         | n/a                                   | `true`                                                                                                                                                                                                                                |
+| className            | Class name(s) that will be added along with `"react-time-picker"` to the main React-Time-Picker `<div>` element.                                                                                                                                                                                                                                  | n/a                                   | <ul><li>String: `"class1 class2"`</li><li>Array of strings: `["class1", "class2 class3"]`</li></ul>                                                                                                                                   |
+| clearAriaLabel       | `aria-label` for the clear button.                                                                                                                                                                                                                                                                                                                | n/a                                   | `"Clear value"`                                                                                                                                                                                                                       |
+| clearIcon            | Content of the clear button. Setting the value explicitly to `null` will hide the icon.                                                                                                                                                                                                                                                           | (default icon)                        | <ul><li>String: `"Clear"`</li><li>React element: `<ClearIcon />`</li><li>React function: `ClearIcon`</li></ul>                                                                                                                        |
+| clockAriaLabel       | `aria-label` for the clock button.                                                                                                                                                                                                                                                                                                                | n/a                                   | `"Toggle clock"`                                                                                                                                                                                                                      |
+| clockProps           | Props to pass to React-Clock component.                                                                                                                                                                                                                                                                                                           | n/a                                   | See [React-Clock documentation](https://github.com/wojtekmaj/react-clock)                                                                                                                                                             |
+| clockIcon            | Content of the clock button. Setting the value explicitly to `null` will hide the icon.                                                                                                                                                                                                                                                           | (default icon)                        | <ul><li>String: `"Clock"`</li><li>React element: `<ClockIcon />`</li><li>React function: `ClockIcon`</li></ul>                                                                                                                        |
+| closeClock           | Whether to close the clock on value selection. **Note**: It's recommended to use `shouldCloseClock` function instead.                                                                                                                                                                                                                             | `true`                                | `false`                                                                                                                                                                                                                               |
+| data-testid          | `data-testid` attribute for the main React-Time-Picker `<div>` element.                                                                                                                                                                                                                                                                           | n/a                                   | `"time-picker"`                                                                                                                                                                                                                       |
+| disableClock         | When set to `true`, will remove the clock and the button toggling its visibility.                                                                                                                                                                                                                                                                 | `false`                               | `true`                                                                                                                                                                                                                                |
+| disabled             | Whether the time picker should be disabled.                                                                                                                                                                                                                                                                                                       | `false`                               | `true`                                                                                                                                                                                                                                |
+| format               | Input format based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). Supported values are: `H`, `HH`, `h`, `hh`, `m`, `mm`, `s`, `ss`, `a`. **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client. | n/a                                   | `"h:m:s a"`                                                                                                                                                                                                                           |
+| hourAriaLabel        | `aria-label` for the hour input.                                                                                                                                                                                                                                                                                                                  | n/a                                   | `"Hour"`                                                                                                                                                                                                                              |
+| hourPlaceholder      | `placeholder` for the hour input.                                                                                                                                                                                                                                                                                                                 | `"--"`                                | `"hh"`                                                                                                                                                                                                                                |
+| id                   | `id` attribute for the main React-Time-Picker `<div>` element.                                                                                                                                                                                                                                                                                    | n/a                                   | `"time-picker"`                                                                                                                                                                                                                       |
+| isOpen               | Whether the clock should be opened.                                                                                                                                                                                                                                                                                                               | `false`                               | `true`                                                                                                                                                                                                                                |
+| locale               | Locale that should be used by the time picker and the clock. Can be any [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag). **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.                                                                | Server locale/User's browser settings | `"hu-HU"`                                                                                                                                                                                                                             |
+| maxDetail            | How detailed time picking shall be. Can be `"hour"`, `"minute"` or `"second"`.                                                                                                                                                                                                                                                                    | `"minute"`                            | `"second"`                                                                                                                                                                                                                            |
+| maxTime              | Maximum time that the user can select.                                                                                                                                                                                                                                                                                                            | n/a                                   | <ul><li>Date: `new Date()`</li><li>String: `"22:15:00"`</li></ul>                                                                                                                                                                     |
+| minTime              | Minimum date that the user can select.                                                                                                                                                                                                                                                                                                            | n/a                                   | <ul><li>Date: `new Date()`</li><li>String: `"22:15:00"`</li></ul>                                                                                                                                                                     |
+| minuteAriaLabel      | `aria-label` for the minute input.                                                                                                                                                                                                                                                                                                                | n/a                                   | `"Minute"`                                                                                                                                                                                                                            |
+| minutePlaceholder    | `placeholder` for the minute input.                                                                                                                                                                                                                                                                                                               | `"--"`                                | `"mm"`                                                                                                                                                                                                                                |
+| name                 | Input name.                                                                                                                                                                                                                                                                                                                                       | `"time"`                              | `"myCustomName"`                                                                                                                                                                                                                      |
+| nativeInputAriaLabel | `aria-label` for the native time input.                                                                                                                                                                                                                                                                                                           | n/a                                   | `"Time"`                                                                                                                                                                                                                              |
+| onChange             | Function called when the user picks a valid time.                                                                                                                                                                                                                                                                                                 | n/a                                   | `(value) => alert('New time is: ', value)`                                                                                                                                                                                            |
+| onClockClose         | Function called when the clock closes.                                                                                                                                                                                                                                                                                                            | n/a                                   | `() => alert('Clock closed')`                                                                                                                                                                                                         |
+| onClockOpen          | Function called when the clock opens.                                                                                                                                                                                                                                                                                                             | n/a                                   | `() => alert('Clock opened')`                                                                                                                                                                                                         |
+| onFocus              | Function called when the user focuses an input.                                                                                                                                                                                                                                                                                                   | n/a                                   | `(event) => alert('Focused input: ', event.target.name)`                                                                                                                                                                              |
+| onInvalidChange      | Function called when the user picks an invalid time.                                                                                                                                                                                                                                                                                              | n/a                                   | `() => alert('Invalid time')`                                                                                                                                                                                                         |
+| openClockOnFocus     | Whether to open the clock on input focus. **Note**: It's recommended to use `shouldOpenClock` function instead.                                                                                                                                                                                                                                   | `true`                                | `false`                                                                                                                                                                                                                               |
+| portalContainer      | Element to render the clock in using portal.                                                                                                                                                                                                                                                                                                      | n/a                                   | `document.getElementById('my-div')`                                                                                                                                                                                                   |
+| required             | Whether time input should be required.                                                                                                                                                                                                                                                                                                            | `false`                               | `true`                                                                                                                                                                                                                                |
+| secondAriaLabel      | `aria-label` for the second input.                                                                                                                                                                                                                                                                                                                | n/a                                   | `"Second"`                                                                                                                                                                                                                            |
+| secondPlaceholder    | `placeholder` for the second input.                                                                                                                                                                                                                                                                                                               | `"--"`                                | `"ss"`                                                                                                                                                                                                                                |
+| shouldCloseClock     | Function called before the clock closes. `reason` can be `"buttonClick"`, `"escape"`, `"outsideAction"`, or `"select"`. If it returns `false`, the clock will not close.                                                                                                                                                                          | n/a                                   | `({ reason }) => reason !== 'outsideAction'`                                                                                                                                                                                          |
+| shouldOpenClock      | Function called before the clock opens. `reason` can be `"buttonClick"` or `"focus"`. If it returns `false`, the clock will not open.                                                                                                                                                                                                             | n/a                                   | `({ reason }) => reason !== 'focus'`                                                                                                                                                                                                  |
+| value                | Input value. Note that if you pass an array of values, only first value will be fully utilized.                                                                                                                                                                                                                                                   | n/a                                   | <ul><li>Date: `new Date(2017, 0, 1, 22, 15)`</li><li>String: `"22:15:00"`</li><li>An array of dates: `[new Date(2017, 0, 1, 22, 15), new Date(2017, 0, 1, 23, 45)]`</li><li>An array of strings: `["22:15:00", "23:45:00"]`</li></ul> |
+
+### Clock
+
+TimePicker component passes all props to React-Clock, with the exception of `className` (you can use `clockClassName` for that instead). There are tons of customizations you can do! For more information, see [Clock component props](https://github.com/wojtekmaj/react-clock#props).
+
+## License
+
+The MIT License.
+
+## Author
+
+<table>
+  <tr>
+    <td >
+      <img src="https://avatars.githubusercontent.com/u/5426427?v=4&s=128" width="64" height="64" alt="Wojciech Maj">
+    </td>
+    <td>
+      <a href="https://github.com/wojtekmaj">Wojciech Maj</a>
+    </td>
+  </tr>
+</table>
Index: node_modules/react-time-picker/dist/TimePicker.css
===================================================================
--- node_modules/react-time-picker/dist/TimePicker.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/TimePicker.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,119 @@
+.react-time-picker {
+  display: inline-flex;
+  position: relative;
+}
+
+.react-time-picker,
+.react-time-picker *,
+.react-time-picker *:before,
+.react-time-picker *:after {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.react-time-picker--disabled {
+  background-color: #f0f0f0;
+  color: #6d6d6d;
+}
+
+.react-time-picker__wrapper {
+  display: flex;
+  flex-grow: 1;
+  flex-shrink: 0;
+  border: thin solid gray;
+}
+
+.react-time-picker__inputGroup {
+  min-width: calc((4px * 3) + 0.54em * 6 + 0.217em * 2);
+  flex-grow: 1;
+  padding: 0 2px;
+  box-sizing: content-box;
+}
+
+.react-time-picker__inputGroup__divider {
+  padding: 1px 0;
+  white-space: pre;
+}
+
+.react-time-picker__inputGroup__divider,
+.react-time-picker__inputGroup__leadingZero {
+  display: inline-block;
+  font: inherit;
+}
+
+.react-time-picker__inputGroup__input {
+  min-width: 0.54em;
+  height: 100%;
+  position: relative;
+  padding: 0 1px;
+  border: 0;
+  background: none;
+  color: currentColor;
+  font: inherit;
+  box-sizing: content-box;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+
+.react-time-picker__inputGroup__input::-webkit-outer-spin-button,
+.react-time-picker__inputGroup__input::-webkit-inner-spin-button {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  margin: 0;
+}
+
+.react-time-picker__inputGroup__input:invalid {
+  background: rgba(255, 0, 0, 0.1);
+}
+
+.react-time-picker__inputGroup__input--hasLeadingZero {
+  margin-left: -0.54em;
+  padding-left: calc(1px + 0.54em);
+}
+
+.react-time-picker__inputGroup__amPm {
+  font: inherit;
+  -webkit-appearance: menulist;
+  -moz-appearance: menulist;
+  appearance: menulist;
+}
+
+.react-time-picker__button {
+  border: 0;
+  background: transparent;
+  padding: 4px 6px;
+}
+
+.react-time-picker__button:enabled {
+  cursor: pointer;
+}
+
+.react-time-picker__button:enabled:hover .react-time-picker__button__icon,
+.react-time-picker__button:enabled:focus .react-time-picker__button__icon {
+  stroke: #0078d7;
+}
+
+.react-time-picker__button:disabled .react-time-picker__button__icon {
+  stroke: #6d6d6d;
+}
+
+.react-time-picker__button svg {
+  display: inherit;
+}
+
+.react-time-picker__clock {
+  width: 200px;
+  height: 200px;
+  max-width: 100vw;
+  padding: 25px;
+  background-color: white;
+  border: thin solid #a0a096;
+  z-index: 1;
+}
+
+.react-time-picker__clock--closed {
+  display: none;
+}
Index: node_modules/react-time-picker/dist/cjs/Divider.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/Divider.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/Divider.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+/// <reference types="react" />
+type DividerProps = {
+    children?: React.ReactNode;
+};
+export default function Divider({ children }: DividerProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/Divider.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/Divider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/Divider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+function Divider(_a) {
+    var children = _a.children;
+    return (0, jsx_runtime_1.jsx)("span", { className: "react-time-picker__inputGroup__divider", children: children });
+}
+exports.default = Divider;
Index: node_modules/react-time-picker/dist/cjs/TimeInput.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/// <reference types="react" />
+import type { Detail, LooseValuePiece, Value } from './shared/types.js';
+type TimeInputProps = {
+    amPmAriaLabel?: string;
+    autoFocus?: boolean;
+    className: string;
+    disabled?: boolean;
+    format?: string;
+    hourAriaLabel?: string;
+    hourPlaceholder?: string;
+    isClockOpen?: boolean | null;
+    locale?: string;
+    maxDetail?: Detail;
+    maxTime?: string;
+    minTime?: string;
+    minuteAriaLabel?: string;
+    minutePlaceholder?: string;
+    name?: string;
+    nativeInputAriaLabel?: string;
+    onChange?: (value: Value, shouldCloseClock: boolean) => void;
+    onInvalidChange?: () => void;
+    required?: boolean;
+    secondAriaLabel?: string;
+    secondPlaceholder?: string;
+    value?: LooseValuePiece;
+};
+export default function TimeInput({ amPmAriaLabel, autoFocus, className, disabled, format, hourAriaLabel, hourPlaceholder, isClockOpen: isClockOpenProps, locale, maxDetail, maxTime, minTime, minuteAriaLabel, minutePlaceholder, name, nativeInputAriaLabel, onChange: onChangeProps, onInvalidChange, required, secondAriaLabel, secondPlaceholder, value: valueProps, }: TimeInputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/TimeInput.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,386 @@
+"use strict";
+'use client';
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var react_1 = require("react");
+var date_utils_1 = require("@wojtekmaj/date-utils");
+var Divider_js_1 = __importDefault(require("./Divider.js"));
+var Hour12Input_js_1 = __importDefault(require("./TimeInput/Hour12Input.js"));
+var Hour24Input_js_1 = __importDefault(require("./TimeInput/Hour24Input.js"));
+var MinuteInput_js_1 = __importDefault(require("./TimeInput/MinuteInput.js"));
+var SecondInput_js_1 = __importDefault(require("./TimeInput/SecondInput.js"));
+var NativeInput_js_1 = __importDefault(require("./TimeInput/NativeInput.js"));
+var AmPm_js_1 = __importDefault(require("./TimeInput/AmPm.js"));
+var dateFormatter_js_1 = require("./shared/dateFormatter.js");
+var dates_js_1 = require("./shared/dates.js");
+var utils_js_1 = require("./shared/utils.js");
+var getFormatterOptionsCache = {};
+var allViews = ['hour', 'minute', 'second'];
+function isInternalInput(element) {
+    return element.dataset.input === 'true';
+}
+function findInput(element, property) {
+    var nextElement = element;
+    do {
+        nextElement = nextElement[property];
+    } while (nextElement && !isInternalInput(nextElement));
+    return nextElement;
+}
+function focus(element) {
+    if (element) {
+        element.focus();
+    }
+}
+function renderCustomInputs(placeholder, elementFunctions, allowMultipleInstances) {
+    var usedFunctions = [];
+    var pattern = new RegExp(Object.keys(elementFunctions)
+        .map(function (el) { return "".concat(el, "+"); })
+        .join('|'), 'g');
+    var matches = placeholder.match(pattern);
+    return placeholder.split(pattern).reduce(function (arr, element, index) {
+        var divider = element && (
+        // eslint-disable-next-line react/no-array-index-key
+        (0, jsx_runtime_1.jsx)(Divider_js_1.default, { children: element }, "separator_".concat(index)));
+        arr.push(divider);
+        var currentMatch = matches && matches[index];
+        if (currentMatch) {
+            var renderFunction = elementFunctions[currentMatch] ||
+                elementFunctions[Object.keys(elementFunctions).find(function (elementFunction) {
+                    return currentMatch.match(elementFunction);
+                })];
+            if (!renderFunction) {
+                return arr;
+            }
+            if (!allowMultipleInstances && usedFunctions.includes(renderFunction)) {
+                arr.push(currentMatch);
+            }
+            else {
+                arr.push(renderFunction(currentMatch, index));
+                usedFunctions.push(renderFunction);
+            }
+        }
+        return arr;
+    }, []);
+}
+var formatNumber = (0, dateFormatter_js_1.getNumberFormatter)({ useGrouping: false });
+function TimeInput(_a) {
+    var amPmAriaLabel = _a.amPmAriaLabel, autoFocus = _a.autoFocus, className = _a.className, disabled = _a.disabled, format = _a.format, hourAriaLabel = _a.hourAriaLabel, hourPlaceholder = _a.hourPlaceholder, _b = _a.isClockOpen, isClockOpenProps = _b === void 0 ? null : _b, locale = _a.locale, _c = _a.maxDetail, maxDetail = _c === void 0 ? 'minute' : _c, maxTime = _a.maxTime, minTime = _a.minTime, minuteAriaLabel = _a.minuteAriaLabel, minutePlaceholder = _a.minutePlaceholder, _d = _a.name, name = _d === void 0 ? 'time' : _d, nativeInputAriaLabel = _a.nativeInputAriaLabel, onChangeProps = _a.onChange, onInvalidChange = _a.onInvalidChange, required = _a.required, secondAriaLabel = _a.secondAriaLabel, secondPlaceholder = _a.secondPlaceholder, valueProps = _a.value;
+    var _e = (0, react_1.useState)(null), amPm = _e[0], setAmPm = _e[1];
+    var _f = (0, react_1.useState)(null), hour = _f[0], setHour = _f[1];
+    var _g = (0, react_1.useState)(null), minute = _g[0], setMinute = _g[1];
+    var _h = (0, react_1.useState)(null), second = _h[0], setSecond = _h[1];
+    var _j = (0, react_1.useState)(null), value = _j[0], setValue = _j[1];
+    var amPmInput = (0, react_1.useRef)(null);
+    var hour12Input = (0, react_1.useRef)(null);
+    var hour24Input = (0, react_1.useRef)(null);
+    var minuteInput = (0, react_1.useRef)(null);
+    var secondInput = (0, react_1.useRef)(null);
+    var _k = (0, react_1.useState)(isClockOpenProps), isClockOpen = _k[0], setIsClockOpen = _k[1];
+    var lastPressedKey = (0, react_1.useRef)(undefined);
+    (0, react_1.useEffect)(function () {
+        setIsClockOpen(isClockOpenProps);
+    }, [isClockOpenProps]);
+    (0, react_1.useEffect)(function () {
+        var nextValue = valueProps;
+        if (nextValue) {
+            setAmPm((0, dates_js_1.convert24to12)((0, date_utils_1.getHours)(nextValue))[1]);
+            setHour((0, date_utils_1.getHours)(nextValue).toString());
+            setMinute((0, date_utils_1.getMinutes)(nextValue).toString());
+            setSecond((0, date_utils_1.getSeconds)(nextValue).toString());
+            setValue(nextValue);
+        }
+        else {
+            setAmPm(null);
+            setHour(null);
+            setMinute(null);
+            setSecond(null);
+            setValue(null);
+        }
+    }, [
+        valueProps,
+        minTime,
+        maxTime,
+        maxDetail,
+        // Toggling clock visibility resets values
+        isClockOpen,
+    ]);
+    var valueType = maxDetail;
+    var formatTime = (function () {
+        var level = allViews.indexOf(maxDetail);
+        var formatterOptions = getFormatterOptionsCache[level] ||
+            (function () {
+                var options = { hour: 'numeric' };
+                if (level >= 1) {
+                    options.minute = 'numeric';
+                }
+                if (level >= 2) {
+                    options.second = 'numeric';
+                }
+                getFormatterOptionsCache[level] = options;
+                return options;
+            })();
+        return (0, dateFormatter_js_1.getFormatter)(formatterOptions);
+    })();
+    /**
+     * Gets current value in a desired format.
+     */
+    function getProcessedValue(value) {
+        var processFunction = (function () {
+            switch (valueType) {
+                case 'hour':
+                case 'minute':
+                    return date_utils_1.getHoursMinutes;
+                case 'second':
+                    return date_utils_1.getHoursMinutesSeconds;
+                default:
+                    throw new Error('Invalid valueType');
+            }
+        })();
+        return processFunction(value);
+    }
+    var placeholder = format ||
+        (function () {
+            var hour24 = 21;
+            var hour12 = 9;
+            var minute = 13;
+            var second = 14;
+            var date = new Date(2017, 0, 1, hour24, minute, second);
+            return formatTime(locale, date)
+                .replace(formatNumber(locale, hour12), 'h')
+                .replace(formatNumber(locale, hour24), 'H')
+                .replace(formatNumber(locale, minute), 'mm')
+                .replace(formatNumber(locale, second), 'ss')
+                .replace(new RegExp((0, utils_js_1.getAmPmLabels)(locale).join('|')), 'a');
+        })();
+    var divider = (function () {
+        var dividers = placeholder.match(/[^0-9a-z]/i);
+        return dividers ? dividers[0] : null;
+    })();
+    function onClick(event) {
+        if (event.target === event.currentTarget) {
+            // Wrapper was directly clicked
+            var firstInput = event.target.children[1];
+            focus(firstInput);
+        }
+    }
+    function onKeyDown(event) {
+        lastPressedKey.current = event.key;
+        switch (event.key) {
+            case 'ArrowLeft':
+            case 'ArrowRight':
+            case divider: {
+                event.preventDefault();
+                var input = event.target;
+                var property = event.key === 'ArrowLeft' ? 'previousElementSibling' : 'nextElementSibling';
+                var nextInput = findInput(input, property);
+                focus(nextInput);
+                break;
+            }
+            default:
+        }
+    }
+    function onKeyUp(event) {
+        var key = event.key, input = event.target;
+        var isLastPressedKey = lastPressedKey.current === key;
+        if (!isLastPressedKey) {
+            return;
+        }
+        var isNumberKey = !isNaN(Number(key));
+        if (!isNumberKey) {
+            return;
+        }
+        var max = input.getAttribute('max');
+        if (!max) {
+            return;
+        }
+        var value = input.value;
+        /**
+         * Given 1, the smallest possible number the user could type by adding another digit is 10.
+         * 10 would be a valid value given max = 12, so we won't jump to the next input.
+         * However, given 2, smallers possible number would be 20, and thus keeping the focus in
+         * this field doesn't make sense.
+         */
+        if (Number(value) * 10 > Number(max) || value.length >= max.length) {
+            var property = 'nextElementSibling';
+            var nextInput = findInput(input, property);
+            focus(nextInput);
+        }
+    }
+    /**
+     * Called after internal onChange. Checks input validity. If all fields are valid,
+     * calls props.onChange.
+     */
+    function onChangeExternal() {
+        if (!onChangeProps) {
+            return;
+        }
+        function filterBoolean(value) {
+            return Boolean(value);
+        }
+        var formElements = [
+            amPmInput.current,
+            hour12Input.current,
+            hour24Input.current,
+            minuteInput.current,
+            secondInput.current,
+        ].filter(filterBoolean);
+        var formElementsWithoutSelect = formElements.slice(1);
+        var values = {};
+        formElements.forEach(function (formElement) {
+            values[formElement.name] =
+                formElement.type === 'number'
+                    ? 'valueAsNumber' in formElement
+                        ? formElement.valueAsNumber
+                        : Number(formElement.value)
+                    : formElement.value;
+        });
+        var isEveryValueEmpty = formElementsWithoutSelect.every(function (formElement) { return !formElement.value; });
+        if (isEveryValueEmpty) {
+            onChangeProps(null, false);
+            return;
+        }
+        var isEveryValueFilled = formElements.every(function (formElement) { return formElement.value; });
+        var isEveryValueValid = formElements.every(function (formElement) { return formElement.validity.valid; });
+        if (isEveryValueFilled && isEveryValueValid) {
+            var hour_1 = Number(values.hour24 ||
+                (values.hour12 && values.amPm && (0, dates_js_1.convert12to24)(values.hour12, values.amPm)) ||
+                0);
+            var minute_1 = Number(values.minute || 0);
+            var second_1 = Number(values.second || 0);
+            var padStart = function (num) { return "0".concat(num).slice(-2); };
+            var proposedValue = "".concat(padStart(hour_1), ":").concat(padStart(minute_1), ":").concat(padStart(second_1));
+            var processedValue = getProcessedValue(proposedValue);
+            onChangeProps(processedValue, false);
+            return;
+        }
+        if (!onInvalidChange) {
+            return;
+        }
+        onInvalidChange();
+    }
+    /**
+     * Called when non-native date input is changed.
+     */
+    function onChange(event) {
+        var _a = event.target, name = _a.name, value = _a.value;
+        switch (name) {
+            case 'amPm':
+                setAmPm(value);
+                break;
+            case 'hour12':
+                setHour(value ? (0, dates_js_1.convert12to24)(value, amPm || 'am').toString() : '');
+                break;
+            case 'hour24':
+                setHour(value);
+                break;
+            case 'minute':
+                setMinute(value);
+                break;
+            case 'second':
+                setSecond(value);
+                break;
+        }
+        onChangeExternal();
+    }
+    /**
+     * Called when native date input is changed.
+     */
+    function onChangeNative(event) {
+        var value = event.target.value;
+        if (!onChangeProps) {
+            return;
+        }
+        var processedValue = value || null;
+        onChangeProps(processedValue, false);
+    }
+    var commonInputProps = {
+        className: className,
+        disabled: disabled,
+        maxTime: maxTime,
+        minTime: minTime,
+        onChange: onChange,
+        onKeyDown: onKeyDown,
+        onKeyUp: onKeyUp,
+        // This is only for showing validity when editing
+        required: Boolean(required || isClockOpen),
+    };
+    function renderHour12(currentMatch, index) {
+        if (currentMatch && currentMatch.length > 2) {
+            throw new Error("Unsupported token: ".concat(currentMatch));
+        }
+        var showLeadingZeros = currentMatch ? currentMatch.length === 2 : false;
+        return ((0, jsx_runtime_1.jsx)(Hour12Input_js_1.default, __assign({}, commonInputProps, { amPm: amPm, ariaLabel: hourAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, inputRef: hour12Input, placeholder: hourPlaceholder, showLeadingZeros: showLeadingZeros, value: hour }), "hour12"));
+    }
+    function renderHour24(currentMatch, index) {
+        if (currentMatch && currentMatch.length > 2) {
+            throw new Error("Unsupported token: ".concat(currentMatch));
+        }
+        var showLeadingZeros = currentMatch ? currentMatch.length === 2 : false;
+        return ((0, jsx_runtime_1.jsx)(Hour24Input_js_1.default, __assign({}, commonInputProps, { ariaLabel: hourAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, inputRef: hour24Input, placeholder: hourPlaceholder, showLeadingZeros: showLeadingZeros, value: hour }), "hour24"));
+    }
+    function renderHour(currentMatch, index) {
+        if (/h/.test(currentMatch)) {
+            return renderHour12(currentMatch, index);
+        }
+        return renderHour24(currentMatch, index);
+    }
+    function renderMinute(currentMatch, index) {
+        if (currentMatch && currentMatch.length > 2) {
+            throw new Error("Unsupported token: ".concat(currentMatch));
+        }
+        var showLeadingZeros = currentMatch ? currentMatch.length === 2 : false;
+        return ((0, jsx_runtime_1.jsx)(MinuteInput_js_1.default, __assign({}, commonInputProps, { ariaLabel: minuteAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, hour: hour, inputRef: minuteInput, placeholder: minutePlaceholder, showLeadingZeros: showLeadingZeros, value: minute }), "minute"));
+    }
+    function renderSecond(currentMatch, index) {
+        if (currentMatch && currentMatch.length > 2) {
+            throw new Error("Unsupported token: ".concat(currentMatch));
+        }
+        var showLeadingZeros = currentMatch ? currentMatch.length === 2 : true;
+        return ((0, jsx_runtime_1.jsx)(SecondInput_js_1.default, __assign({}, commonInputProps, { ariaLabel: secondAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, hour: hour, inputRef: secondInput, minute: minute, placeholder: secondPlaceholder, showLeadingZeros: showLeadingZeros, value: second }), "second"));
+    }
+    function renderAmPm(currentMatch, index) {
+        return ((0, jsx_runtime_1.jsx)(AmPm_js_1.default, __assign({}, commonInputProps, { ariaLabel: amPmAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, inputRef: amPmInput, locale: locale, onChange: onChange, value: amPm }), "ampm"));
+    }
+    function renderCustomInputsInternal() {
+        var elementFunctions = {
+            h: renderHour,
+            H: renderHour,
+            m: renderMinute,
+            s: renderSecond,
+            a: renderAmPm,
+        };
+        var allowMultipleInstances = typeof format !== 'undefined';
+        return renderCustomInputs(placeholder, elementFunctions, allowMultipleInstances);
+    }
+    function renderNativeInput() {
+        return ((0, jsx_runtime_1.jsx)(NativeInput_js_1.default, { ariaLabel: nativeInputAriaLabel, disabled: disabled, maxTime: maxTime, minTime: minTime, name: name, onChange: onChangeNative, required: required, value: value, valueType: valueType }, "time"));
+    }
+    return (
+    // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
+    (0, jsx_runtime_1.jsxs)("div", { className: className, onClick: onClick, children: [renderNativeInput(), renderCustomInputsInternal()] }));
+}
+exports.default = TimeInput;
Index: node_modules/react-time-picker/dist/cjs/TimeInput/AmPm.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/AmPm.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/AmPm.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/// <reference types="react" />
+type AmPmProps = {
+    ariaLabel?: string;
+    autoFocus?: boolean;
+    className: string;
+    disabled?: boolean;
+    inputRef?: React.RefObject<HTMLSelectElement | null>;
+    locale?: string;
+    maxTime?: string;
+    minTime?: string;
+    onChange?: (event: React.ChangeEvent<HTMLSelectElement> & {
+        target: HTMLSelectElement;
+    }) => void;
+    onKeyDown?: (event: React.KeyboardEvent<HTMLSelectElement> & {
+        target: HTMLSelectElement;
+    }) => void;
+    required?: boolean;
+    value?: string | null;
+};
+export default function AmPm({ ariaLabel, autoFocus, className, disabled, inputRef, locale, maxTime, minTime, onChange, onKeyDown, required, value, }: AmPmProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/TimeInput/AmPm.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/AmPm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/AmPm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var clsx_1 = __importDefault(require("clsx"));
+var date_utils_1 = require("@wojtekmaj/date-utils");
+var dates_js_1 = require("../shared/dates.js");
+var utils_js_1 = require("../shared/utils.js");
+function AmPm(_a) {
+    var ariaLabel = _a.ariaLabel, autoFocus = _a.autoFocus, className = _a.className, disabled = _a.disabled, inputRef = _a.inputRef, locale = _a.locale, maxTime = _a.maxTime, minTime = _a.minTime, onChange = _a.onChange, onKeyDown = _a.onKeyDown, required = _a.required, value = _a.value;
+    var amDisabled = minTime ? (0, dates_js_1.convert24to12)((0, date_utils_1.getHours)(minTime))[1] === 'pm' : false;
+    var pmDisabled = maxTime ? (0, dates_js_1.convert24to12)((0, date_utils_1.getHours)(maxTime))[1] === 'am' : false;
+    var name = 'amPm';
+    var _b = (0, utils_js_1.getAmPmLabels)(locale), amLabel = _b[0], pmLabel = _b[1];
+    return ((0, jsx_runtime_1.jsxs)("select", { "aria-label": ariaLabel, autoFocus: autoFocus, className: (0, clsx_1.default)("".concat(className, "__input"), "".concat(className, "__").concat(name)), "data-input": "true", "data-select": "true", disabled: disabled, name: name, onChange: onChange, onKeyDown: onKeyDown, 
+        // Assertion is needed for React 18 compatibility
+        ref: inputRef, required: required, value: value !== null ? value : '', children: [!value && (0, jsx_runtime_1.jsx)("option", { value: "", children: "--" }), (0, jsx_runtime_1.jsx)("option", { disabled: amDisabled, value: "am", children: amLabel }), (0, jsx_runtime_1.jsx)("option", { disabled: pmDisabled, value: "pm", children: pmLabel })] }));
+}
+exports.default = AmPm;
Index: node_modules/react-time-picker/dist/cjs/TimeInput/Hour12Input.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/Hour12Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/Hour12Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+/// <reference types="react" />
+import Input from './Input.js';
+import type { AmPmType } from '../shared/types.js';
+type Hour12InputProps = {
+    amPm: AmPmType | null;
+    maxTime?: string;
+    minTime?: string;
+    value?: string | null;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name' | 'nameForClass'>;
+export default function Hour12Input({ amPm, maxTime, minTime, value, ...otherProps }: Hour12InputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/TimeInput/Hour12Input.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/Hour12Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/Hour12Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var date_utils_1 = require("@wojtekmaj/date-utils");
+var Input_js_1 = __importDefault(require("./Input.js"));
+var dates_js_1 = require("../shared/dates.js");
+var utils_js_1 = require("../shared/utils.js");
+function Hour12Input(_a) {
+    var amPm = _a.amPm, maxTime = _a.maxTime, minTime = _a.minTime, value = _a.value, otherProps = __rest(_a, ["amPm", "maxTime", "minTime", "value"]);
+    var maxHour = (0, utils_js_1.safeMin)(12, maxTime &&
+        (function () {
+            var _a = (0, dates_js_1.convert24to12)((0, date_utils_1.getHours)(maxTime)), maxHourResult = _a[0], maxAmPm = _a[1];
+            if (maxAmPm !== amPm) {
+                // pm is always after am, so we should ignore validation
+                return null;
+            }
+            return maxHourResult;
+        })());
+    var minHour = (0, utils_js_1.safeMax)(1, minTime &&
+        (function () {
+            var _a = (0, dates_js_1.convert24to12)((0, date_utils_1.getHours)(minTime)), minHourResult = _a[0], minAmPm = _a[1];
+            if (
+            // pm is always after am, so we should ignore validation
+            minAmPm !== amPm ||
+                // If minHour is 12 am/pm, user should be able to enter 12, 1, ..., 11.
+                minHourResult === 12) {
+                return null;
+            }
+            return minHourResult;
+        })());
+    var value12 = value ? (0, dates_js_1.convert24to12)(value)[0].toString() : '';
+    return ((0, jsx_runtime_1.jsx)(Input_js_1.default, __assign({ max: maxHour, min: minHour, name: "hour12", nameForClass: "hour", value: value12 }, otherProps)));
+}
+exports.default = Hour12Input;
Index: node_modules/react-time-picker/dist/cjs/TimeInput/Hour24Input.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/Hour24Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/Hour24Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+/// <reference types="react" />
+import Input from './Input.js';
+type Hour24InputProps = {
+    maxTime?: string;
+    minTime?: string;
+    value?: string | null;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name' | 'nameForClass'>;
+export default function Hour24Input({ maxTime, minTime, ...otherProps }: Hour24InputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/TimeInput/Hour24Input.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/Hour24Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/Hour24Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var date_utils_1 = require("@wojtekmaj/date-utils");
+var Input_js_1 = __importDefault(require("./Input.js"));
+var utils_js_1 = require("../shared/utils.js");
+function Hour24Input(_a) {
+    var maxTime = _a.maxTime, minTime = _a.minTime, otherProps = __rest(_a, ["maxTime", "minTime"]);
+    var maxHour = (0, utils_js_1.safeMin)(23, maxTime && (0, date_utils_1.getHours)(maxTime));
+    var minHour = (0, utils_js_1.safeMax)(0, minTime && (0, date_utils_1.getHours)(minTime));
+    return (0, jsx_runtime_1.jsx)(Input_js_1.default, __assign({ max: maxHour, min: minHour, name: "hour24", nameForClass: "hour" }, otherProps));
+}
+exports.default = Hour24Input;
Index: node_modules/react-time-picker/dist/cjs/TimeInput/Input.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/// <reference types="react" />
+type InputProps = {
+    ariaLabel?: string;
+    autoFocus?: boolean;
+    className?: string;
+    disabled?: boolean;
+    inputRef?: React.RefObject<HTMLInputElement | null>;
+    max: number;
+    min: number;
+    name: string;
+    nameForClass?: string;
+    onChange?: (event: React.ChangeEvent<HTMLInputElement> & {
+        target: HTMLInputElement;
+    }) => void;
+    onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement> & {
+        target: HTMLInputElement;
+    }) => void;
+    onKeyUp?: (event: React.KeyboardEvent<HTMLInputElement> & {
+        target: HTMLInputElement;
+    }) => void;
+    placeholder?: string;
+    required?: boolean;
+    showLeadingZeros?: boolean;
+    step?: number;
+    value?: string | null;
+};
+export default function Input({ ariaLabel, autoFocus, className, disabled, inputRef, max, min, name, nameForClass, onChange, onKeyDown, onKeyUp, placeholder, required, showLeadingZeros, step, value, }: InputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/TimeInput/Input.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,136 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+    __setModuleDefault(result, mod);
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var react_1 = require("react");
+var clsx_1 = __importDefault(require("clsx"));
+var update_input_width_1 = __importStar(require("update-input-width"));
+var isBrowser = typeof document !== 'undefined';
+var useIsomorphicLayoutEffect = isBrowser ? react_1.useLayoutEffect : react_1.useEffect;
+var isIEOrEdgeLegacy = isBrowser && /(MSIE|Trident\/|Edge\/)/.test(navigator.userAgent);
+var isFirefox = isBrowser && /Firefox/.test(navigator.userAgent);
+function onFocus(event) {
+    var target = event.target;
+    if (isIEOrEdgeLegacy) {
+        requestAnimationFrame(function () { return target.select(); });
+    }
+    else {
+        target.select();
+    }
+}
+function updateInputWidthOnLoad(element) {
+    if (document.readyState === 'complete') {
+        return;
+    }
+    function onLoad() {
+        (0, update_input_width_1.default)(element);
+    }
+    window.addEventListener('load', onLoad);
+}
+function updateInputWidthOnFontLoad(element) {
+    if (!document.fonts) {
+        return;
+    }
+    var font = (0, update_input_width_1.getFontShorthand)(element);
+    if (!font) {
+        return;
+    }
+    var isFontLoaded = document.fonts.check(font);
+    if (isFontLoaded) {
+        return;
+    }
+    function onLoadingDone() {
+        (0, update_input_width_1.default)(element);
+    }
+    document.fonts.addEventListener('loadingdone', onLoadingDone);
+}
+function getSelectionString(input) {
+    /**
+     * window.getSelection().toString() returns empty string in IE11 and Firefox,
+     * so alternatives come first.
+     */
+    if (input &&
+        'selectionStart' in input &&
+        input.selectionStart !== null &&
+        'selectionEnd' in input &&
+        input.selectionEnd !== null) {
+        return input.value.slice(input.selectionStart, input.selectionEnd);
+    }
+    if ('getSelection' in window) {
+        var selection = window.getSelection();
+        return selection && selection.toString();
+    }
+    return null;
+}
+function makeOnKeyPress(maxLength) {
+    if (maxLength === null) {
+        return undefined;
+    }
+    /**
+     * Prevents keystrokes that would not produce a number or when value after keystroke would
+     * exceed maxLength.
+     */
+    return function onKeyPress(event) {
+        if (isFirefox) {
+            // See https://github.com/wojtekmaj/react-time-picker/issues/92
+            return;
+        }
+        var key = event.key, input = event.target;
+        var value = input.value;
+        var isNumberKey = key.length === 1 && /\d/.test(key);
+        var selection = getSelectionString(input);
+        if (!isNumberKey || !(selection || value.length < maxLength)) {
+            event.preventDefault();
+        }
+    };
+}
+function Input(_a) {
+    var ariaLabel = _a.ariaLabel, autoFocus = _a.autoFocus, className = _a.className, disabled = _a.disabled, inputRef = _a.inputRef, max = _a.max, min = _a.min, name = _a.name, nameForClass = _a.nameForClass, onChange = _a.onChange, onKeyDown = _a.onKeyDown, onKeyUp = _a.onKeyUp, _b = _a.placeholder, placeholder = _b === void 0 ? '--' : _b, required = _a.required, showLeadingZeros = _a.showLeadingZeros, step = _a.step, value = _a.value;
+    useIsomorphicLayoutEffect(function () {
+        if (!inputRef || !inputRef.current) {
+            return;
+        }
+        (0, update_input_width_1.default)(inputRef.current);
+        updateInputWidthOnLoad(inputRef.current);
+        updateInputWidthOnFontLoad(inputRef.current);
+    }, [inputRef, value]);
+    var hasLeadingZero = showLeadingZeros &&
+        value &&
+        Number(value) < 10 &&
+        (value === '0' || !value.toString().startsWith('0'));
+    var maxLength = max ? max.toString().length : null;
+    return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [hasLeadingZero ? (0, jsx_runtime_1.jsx)("span", { className: "".concat(className, "__leadingZero"), children: "0" }) : null, (0, jsx_runtime_1.jsx)("input", { "aria-label": ariaLabel, autoComplete: "off", autoFocus: autoFocus, className: (0, clsx_1.default)("".concat(className, "__input"), "".concat(className, "__").concat(nameForClass || name), hasLeadingZero && "".concat(className, "__input--hasLeadingZero")), "data-input": "true", disabled: disabled, inputMode: "numeric", max: max, min: min, name: name, onChange: onChange, onFocus: onFocus, onKeyDown: onKeyDown, onKeyPress: makeOnKeyPress(maxLength), onKeyUp: function (event) {
+                    (0, update_input_width_1.default)(event.target);
+                    if (onKeyUp) {
+                        onKeyUp(event);
+                    }
+                }, placeholder: placeholder, 
+                // Assertion is needed for React 18 compatibility
+                ref: inputRef, required: required, step: step, type: "number", value: value !== null ? value : '' })] }));
+}
+exports.default = Input;
Index: node_modules/react-time-picker/dist/cjs/TimeInput/MinuteInput.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/MinuteInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/MinuteInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/// <reference types="react" />
+import Input from './Input.js';
+type MinuteInputProps = {
+    hour?: string | null;
+    maxTime?: string;
+    minTime?: string;
+    showLeadingZeros?: boolean;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name'>;
+export default function MinuteInput({ hour, maxTime, minTime, showLeadingZeros, ...otherProps }: MinuteInputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/TimeInput/MinuteInput.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/MinuteInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/MinuteInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var date_utils_1 = require("@wojtekmaj/date-utils");
+var Input_js_1 = __importDefault(require("./Input.js"));
+var utils_js_1 = require("../shared/utils.js");
+function MinuteInput(_a) {
+    var hour = _a.hour, maxTime = _a.maxTime, minTime = _a.minTime, _b = _a.showLeadingZeros, showLeadingZeros = _b === void 0 ? true : _b, otherProps = __rest(_a, ["hour", "maxTime", "minTime", "showLeadingZeros"]);
+    function isSameHour(date) {
+        return hour === (0, date_utils_1.getHours)(date).toString();
+    }
+    var maxMinute = (0, utils_js_1.safeMin)(59, maxTime && isSameHour(maxTime) && (0, date_utils_1.getMinutes)(maxTime));
+    var minMinute = (0, utils_js_1.safeMax)(0, minTime && isSameHour(minTime) && (0, date_utils_1.getMinutes)(minTime));
+    return ((0, jsx_runtime_1.jsx)(Input_js_1.default, __assign({ max: maxMinute, min: minMinute, name: "minute", showLeadingZeros: showLeadingZeros }, otherProps)));
+}
+exports.default = MinuteInput;
Index: node_modules/react-time-picker/dist/cjs/TimeInput/NativeInput.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/NativeInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/NativeInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/// <reference types="react" />
+type NativeInputProps = {
+    ariaLabel?: string;
+    disabled?: boolean;
+    maxTime?: string;
+    minTime?: string;
+    name?: string;
+    onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
+    required?: boolean;
+    value?: string | Date | null;
+    valueType: 'hour' | 'minute' | 'second';
+};
+export default function NativeInput({ ariaLabel, disabled, maxTime, minTime, name, onChange, required, value, valueType, }: NativeInputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/TimeInput/NativeInput.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/NativeInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/NativeInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var date_utils_1 = require("@wojtekmaj/date-utils");
+function NativeInput(_a) {
+    var ariaLabel = _a.ariaLabel, disabled = _a.disabled, maxTime = _a.maxTime, minTime = _a.minTime, name = _a.name, onChange = _a.onChange, required = _a.required, value = _a.value, valueType = _a.valueType;
+    var nativeValueParser = (function () {
+        switch (valueType) {
+            case 'hour':
+                return function (receivedValue) { return "".concat((0, date_utils_1.getHours)(receivedValue), ":00"); };
+            case 'minute':
+                return date_utils_1.getHoursMinutes;
+            case 'second':
+                return date_utils_1.getHoursMinutesSeconds;
+            default:
+                throw new Error('Invalid valueType');
+        }
+    })();
+    var step = (function () {
+        switch (valueType) {
+            case 'hour':
+                return 3600;
+            case 'minute':
+                return 60;
+            case 'second':
+                return 1;
+            default:
+                throw new Error('Invalid valueType');
+        }
+    })();
+    function stopPropagation(event) {
+        event.stopPropagation();
+    }
+    return ((0, jsx_runtime_1.jsx)("input", { "aria-label": ariaLabel, disabled: disabled, hidden: true, max: maxTime ? nativeValueParser(maxTime) : undefined, min: minTime ? nativeValueParser(minTime) : undefined, name: name, onChange: onChange, onFocus: stopPropagation, required: required, step: step, style: {
+            visibility: 'hidden',
+            position: 'absolute',
+            zIndex: '-999',
+        }, type: "time", value: value ? nativeValueParser(value) : '' }));
+}
+exports.default = NativeInput;
Index: node_modules/react-time-picker/dist/cjs/TimeInput/SecondInput.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/SecondInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/SecondInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+/// <reference types="react" />
+import Input from './Input.js';
+type SecondInputProps = {
+    hour?: string | null;
+    maxTime?: string;
+    minTime?: string;
+    minute?: string | null;
+    showLeadingZeros?: boolean;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name'>;
+export default function SecondInput({ hour, maxTime, minTime, minute, showLeadingZeros, ...otherProps }: SecondInputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/TimeInput/SecondInput.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimeInput/SecondInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimeInput/SecondInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var date_utils_1 = require("@wojtekmaj/date-utils");
+var Input_js_1 = __importDefault(require("./Input.js"));
+var utils_js_1 = require("../shared/utils.js");
+function SecondInput(_a) {
+    var hour = _a.hour, maxTime = _a.maxTime, minTime = _a.minTime, minute = _a.minute, _b = _a.showLeadingZeros, showLeadingZeros = _b === void 0 ? true : _b, otherProps = __rest(_a, ["hour", "maxTime", "minTime", "minute", "showLeadingZeros"]);
+    function isSameMinute(date) {
+        return hour === (0, date_utils_1.getHours)(date).toString() && minute === (0, date_utils_1.getMinutes)(date).toString();
+    }
+    var maxSecond = (0, utils_js_1.safeMin)(59, maxTime && isSameMinute(maxTime) && (0, date_utils_1.getSeconds)(maxTime));
+    var minSecond = (0, utils_js_1.safeMax)(0, minTime && isSameMinute(minTime) && (0, date_utils_1.getSeconds)(minTime));
+    return ((0, jsx_runtime_1.jsx)(Input_js_1.default, __assign({ max: maxSecond, min: minSecond, name: "second", showLeadingZeros: showLeadingZeros }, otherProps)));
+}
+exports.default = SecondInput;
Index: node_modules/react-time-picker/dist/cjs/TimePicker.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimePicker.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimePicker.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,271 @@
+/// <reference types="react" />
+import makeEventProps from 'make-event-props';
+import Clock from 'react-clock';
+import type { ClassName, CloseReason, Detail, LooseValue, OpenReason, Value } from './shared/types.js';
+type ReactNodeLike = React.ReactNode | string | number | boolean | null | undefined;
+type Icon = ReactNodeLike | ReactNodeLike[];
+type IconOrRenderFunction = Icon | React.ComponentType | React.ReactElement;
+type ClockProps = Omit<React.ComponentPropsWithoutRef<typeof Clock>, 'value'>;
+type EventProps = ReturnType<typeof makeEventProps>;
+export type TimePickerProps = {
+    /**
+     * `aria-label` for the AM/PM select input.
+     *
+     * @example 'Select AM/PM'
+     */
+    amPmAriaLabel?: string;
+    /**
+     * Automatically focuses the input on mount.
+     *
+     * @example true
+     */
+    autoFocus?: boolean;
+    /**
+     * Class name(s) that will be added along with `"react-time-picker"` to the main React-Time-Picker `<div>` element.
+     *
+     * @example 'class1 class2'
+     * @example ['class1', 'class2 class3']
+     */
+    className?: ClassName;
+    /**
+     * `aria-label` for the clear button.
+     *
+     * @example 'Clear value'
+     */
+    clearAriaLabel?: string;
+    /**
+     * Content of the clear button. Setting the value explicitly to `null` will hide the icon.
+     *
+     * @example 'Clear'
+     * @example <ClearIcon />
+     * @example ClearIcon
+     */
+    clearIcon?: IconOrRenderFunction | null;
+    /**
+     * `aria-label` for the clock button.
+     *
+     * @example 'Toggle clock'
+     */
+    clockAriaLabel?: string;
+    /**
+     * Content of the clock button. Setting the value explicitly to `null` will hide the icon.
+     *
+     * @example 'Clock'
+     * @example <ClockIcon />
+     * @example ClockIcon
+     */
+    clockIcon?: IconOrRenderFunction | null;
+    /**
+     * Props to pass to React-Clock component.
+     */
+    clockProps?: ClockProps;
+    /**
+     * Whether to close the clock on value selection.
+     *
+     * **Note**: It's recommended to use `shouldCloseClock` function instead.
+     *
+     * @default true
+     * @example false
+     */
+    closeClock?: boolean;
+    /**
+     * `data-testid` attribute for the main React-Time-Picker `<div>` element.
+     *
+     * @example 'time-picker'
+     */
+    'data-testid'?: string;
+    /**
+     * When set to `true`, will remove the clock and the button toggling its visibility.
+     *
+     * @default false
+     * @example true
+     */
+    disableClock?: boolean;
+    /**
+     * Whether the time picker should be disabled.
+     *
+     * @default false
+     * @example true
+     */
+    disabled?: boolean;
+    /**
+     * Input format based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). Supported values are: `H`, `HH`, `h`, `hh`, `m`, `mm`, `s`, `ss`, `a`.
+     *
+     * **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.
+     *
+     * @example 'h:m:s a'
+     */
+    format?: string;
+    /**
+     * `aria-label` for the hour input.
+     *
+     * @example 'Hour'
+     */
+    hourAriaLabel?: string;
+    /**
+     * `placeholder` for the hour input.
+     *
+     * @default '--'
+     * @example 'hh'
+     */
+    hourPlaceholder?: string;
+    /**
+     * `id` attribute for the main React-TimeRange-Picker `<div>` element.
+     *
+     * @example 'time-picker'
+     */
+    id?: string;
+    /**
+     * Whether the clock should be opened.
+     *
+     * @default false
+     * @example true
+     */
+    isOpen?: boolean;
+    /**
+     * Locale that should be used by the datetime picker and the calendar. Can be any [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag).
+     *
+     * **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.
+     *
+     * @example 'hu-HU'
+     */
+    locale?: string;
+    /**
+     * How detailed time picking shall be. Can be `"hour"`, `"minute"` or `"second"`.
+     *
+     * @default 'minute'
+     * @example 'second'
+     */
+    maxDetail?: Detail;
+    /**
+     * Maximum date that the user can select.
+     *
+     * @example new Date()
+     * @example '22:15:00'
+     */
+    maxTime?: string;
+    /**
+     * Minimum date that the user can select.
+     *
+     * @example new Date()
+     * @example '22:15:00'
+     */
+    minTime?: string;
+    /**
+     * `aria-label` for the minute input.
+     *
+     * @example 'Minute'
+     */
+    minuteAriaLabel?: string;
+    /**
+     * `placeholder` for the minute input.
+     *
+     * @default '--'
+     * @example 'mm'
+     */
+    minutePlaceholder?: string;
+    /**
+     * Input name.
+     *
+     * @default 'time'
+     */
+    name?: string;
+    /**
+     * `aria-label` for the native time input.
+     *
+     * @example 'Time'
+     */
+    nativeInputAriaLabel?: string;
+    /**
+     * Function called when the user picks a valid time.
+     *
+     * @example (value) => alert('New time is: ', value)
+     */
+    onChange?: (value: Value) => void;
+    /**
+     * Function called when the clock closes.
+     *
+     * @example () => alert('Clock closed')
+     */
+    onClockClose?: () => void;
+    /**
+     * Function called when the clock opens.
+     *
+     * @example () => alert('Clock opened')
+     */
+    onClockOpen?: () => void;
+    /**
+     * Function called when the user focuses an input.
+     *
+     * @example (event) => alert('Focused input: ', event.target.name)
+     */
+    onFocus?: (event: React.FocusEvent<HTMLDivElement>) => void;
+    /**
+     * Function called when the user picks an invalid time.
+     *
+     * @example () => alert('Invalid time')
+     */
+    onInvalidChange?: () => void;
+    /**
+     * Whether to open the clock on input focus.
+     *
+     * **Note**: It's recommended to use `shouldOpenClock` function instead.
+     *
+     * @default true
+     * @example false
+     */
+    openClockOnFocus?: boolean;
+    /**
+     * Element to render the clock in using portal.
+     *
+     * @example document.getElementById('my-div')
+     */
+    portalContainer?: HTMLElement | null;
+    /**
+     * Whether time input should be required.
+     *
+     * @default false
+     * @example true
+     */
+    required?: boolean;
+    /**
+     * `aria-label` for the second input.
+     *
+     * @example 'Second'
+     */
+    secondAriaLabel?: string;
+    /**
+     * `placeholder` for the second input.
+     *
+     * @default '--'
+     * @example 'ss'
+     */
+    secondPlaceholder?: string;
+    /**
+     * Function called before the clock closes. `reason` can be `"buttonClick"`, `"escape"`, `"outsideAction"`, or `"select"`. If it returns `false`, the clock will not close.
+     *
+     * @example ({ reason }) => reason !== 'outsideAction'
+     */
+    shouldCloseClock?: ({ reason }: {
+        reason: CloseReason;
+    }) => boolean;
+    /**
+     * Function called before the clock opens. `reason` can be `"buttonClick"` or `"focus"`. If it returns `false`, the clock will not open.
+     *
+     * @example ({ reason }) => reason !== 'focus'
+     */
+    shouldOpenClock?: ({ reason }: {
+        reason: OpenReason;
+    }) => boolean;
+    /**
+     * Input value. Note that if you pass an array of values, only first value will be fully utilized.
+     *
+     * @example new Date(2017, 0, 1, 22, 15)
+     * @example '22:15:00'
+     * @example [new Date(2017, 0, 1, 22, 15), new Date(2017, 0, 1, 23, 45)]
+     * @example ["22:15:00", "23:45:00"]
+     */
+    value?: LooseValue;
+} & Omit<EventProps, 'onChange' | 'onFocus'>;
+export default function TimePicker(props: TimePickerProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/cjs/TimePicker.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/TimePicker.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/TimePicker.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,194 @@
+"use strict";
+'use client';
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var jsx_runtime_1 = require("react/jsx-runtime");
+var react_1 = require("react");
+var react_dom_1 = require("react-dom");
+var make_event_props_1 = __importDefault(require("make-event-props"));
+var clsx_1 = __importDefault(require("clsx"));
+var react_clock_1 = __importDefault(require("react-clock"));
+var react_fit_1 = __importDefault(require("react-fit"));
+var TimeInput_js_1 = __importDefault(require("./TimeInput.js"));
+var baseClassName = 'react-time-picker';
+var outsideActionEvents = ['mousedown', 'focusin', 'touchstart'];
+var iconProps = {
+    xmlns: 'http://www.w3.org/2000/svg',
+    width: 19,
+    height: 19,
+    viewBox: '0 0 19 19',
+    stroke: 'black',
+    strokeWidth: 2,
+};
+var ClockIcon = ((0, jsx_runtime_1.jsxs)("svg", __assign({}, iconProps, { className: "".concat(baseClassName, "__clock-button__icon ").concat(baseClassName, "__button__icon"), fill: "none", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "9.5", cy: "9.5", r: "7.5" }), (0, jsx_runtime_1.jsx)("path", { d: "M9.5 4.5 v5 h4" })] })));
+var ClearIcon = ((0, jsx_runtime_1.jsxs)("svg", __assign({}, iconProps, { className: "".concat(baseClassName, "__clear-button__icon ").concat(baseClassName, "__button__icon"), children: [(0, jsx_runtime_1.jsx)("line", { x1: "4", x2: "15", y1: "4", y2: "15" }), (0, jsx_runtime_1.jsx)("line", { x1: "15", x2: "4", y1: "4", y2: "15" })] })));
+function TimePicker(props) {
+    var amPmAriaLabel = props.amPmAriaLabel, autoFocus = props.autoFocus, className = props.className, clearAriaLabel = props.clearAriaLabel, _a = props.clearIcon, clearIcon = _a === void 0 ? ClearIcon : _a, clockAriaLabel = props.clockAriaLabel, _b = props.clockIcon, clockIcon = _b === void 0 ? ClockIcon : _b, _c = props.closeClock, shouldCloseClockOnSelect = _c === void 0 ? true : _c, dataTestid = props["data-testid"], hourAriaLabel = props.hourAriaLabel, hourPlaceholder = props.hourPlaceholder, disableClock = props.disableClock, disabled = props.disabled, format = props.format, id = props.id, _d = props.isOpen, isOpenProps = _d === void 0 ? null : _d, locale = props.locale, maxTime = props.maxTime, _e = props.maxDetail, maxDetail = _e === void 0 ? 'minute' : _e, minTime = props.minTime, minuteAriaLabel = props.minuteAriaLabel, minutePlaceholder = props.minutePlaceholder, _f = props.name, name = _f === void 0 ? 'time' : _f, nativeInputAriaLabel = props.nativeInputAriaLabel, onClockClose = props.onClockClose, onClockOpen = props.onClockOpen, onChangeProps = props.onChange, onFocusProps = props.onFocus, onInvalidChange = props.onInvalidChange, _g = props.openClockOnFocus, openClockOnFocus = _g === void 0 ? true : _g, required = props.required, value = props.value, secondAriaLabel = props.secondAriaLabel, secondPlaceholder = props.secondPlaceholder, shouldCloseClock = props.shouldCloseClock, shouldOpenClock = props.shouldOpenClock, otherProps = __rest(props, ["amPmAriaLabel", "autoFocus", "className", "clearAriaLabel", "clearIcon", "clockAriaLabel", "clockIcon", "closeClock", 'data-testid', "hourAriaLabel", "hourPlaceholder", "disableClock", "disabled", "format", "id", "isOpen", "locale", "maxTime", "maxDetail", "minTime", "minuteAriaLabel", "minutePlaceholder", "name", "nativeInputAriaLabel", "onClockClose", "onClockOpen", "onChange", "onFocus", "onInvalidChange", "openClockOnFocus", "required", "value", "secondAriaLabel", "secondPlaceholder", "shouldCloseClock", "shouldOpenClock"]);
+    var _h = (0, react_1.useState)(isOpenProps), isOpen = _h[0], setIsOpen = _h[1];
+    var wrapper = (0, react_1.useRef)(null);
+    var clockWrapper = (0, react_1.useRef)(null);
+    (0, react_1.useEffect)(function () {
+        setIsOpen(isOpenProps);
+    }, [isOpenProps]);
+    function openClock(_a) {
+        var reason = _a.reason;
+        if (shouldOpenClock) {
+            if (!shouldOpenClock({ reason: reason })) {
+                return;
+            }
+        }
+        setIsOpen(true);
+        if (onClockOpen) {
+            onClockOpen();
+        }
+    }
+    var closeClock = (0, react_1.useCallback)(function (_a) {
+        var reason = _a.reason;
+        if (shouldCloseClock) {
+            if (!shouldCloseClock({ reason: reason })) {
+                return;
+            }
+        }
+        setIsOpen(false);
+        if (onClockClose) {
+            onClockClose();
+        }
+    }, [onClockClose, shouldCloseClock]);
+    function toggleClock() {
+        if (isOpen) {
+            closeClock({ reason: 'buttonClick' });
+        }
+        else {
+            openClock({ reason: 'buttonClick' });
+        }
+    }
+    function onChange(value, shouldCloseClock) {
+        if (shouldCloseClock === void 0) { shouldCloseClock = shouldCloseClockOnSelect; }
+        if (shouldCloseClock) {
+            closeClock({ reason: 'select' });
+        }
+        if (onChangeProps) {
+            onChangeProps(value);
+        }
+    }
+    function onFocus(event) {
+        if (onFocusProps) {
+            onFocusProps(event);
+        }
+        if (
+        // Internet Explorer still fires onFocus on disabled elements
+        disabled ||
+            isOpen ||
+            !openClockOnFocus ||
+            event.target.dataset.select === 'true') {
+            return;
+        }
+        openClock({ reason: 'focus' });
+    }
+    var onKeyDown = (0, react_1.useCallback)(function (event) {
+        if (event.key === 'Escape') {
+            closeClock({ reason: 'escape' });
+        }
+    }, [closeClock]);
+    function clear() {
+        onChange(null);
+    }
+    function stopPropagation(event) {
+        event.stopPropagation();
+    }
+    var onOutsideAction = (0, react_1.useCallback)(function (event) {
+        var wrapperEl = wrapper.current;
+        var clockWrapperEl = clockWrapper.current;
+        // Try event.composedPath first to handle clicks inside a Shadow DOM.
+        var target = ('composedPath' in event ? event.composedPath()[0] : event.target);
+        if (target &&
+            wrapperEl &&
+            !wrapperEl.contains(target) &&
+            (!clockWrapperEl || !clockWrapperEl.contains(target))) {
+            closeClock({ reason: 'outsideAction' });
+        }
+    }, [clockWrapper, closeClock, wrapper]);
+    var handleOutsideActionListeners = (0, react_1.useCallback)(function (shouldListen) {
+        if (shouldListen === void 0) { shouldListen = isOpen; }
+        outsideActionEvents.forEach(function (event) {
+            if (shouldListen) {
+                document.addEventListener(event, onOutsideAction);
+            }
+            else {
+                document.removeEventListener(event, onOutsideAction);
+            }
+        });
+        if (shouldListen) {
+            document.addEventListener('keydown', onKeyDown);
+        }
+        else {
+            document.removeEventListener('keydown', onKeyDown);
+        }
+    }, [isOpen, onOutsideAction, onKeyDown]);
+    (0, react_1.useEffect)(function () {
+        handleOutsideActionListeners();
+        return function () {
+            handleOutsideActionListeners(false);
+        };
+    }, [handleOutsideActionListeners]);
+    function renderInputs() {
+        var valueFrom = (Array.isArray(value) ? value : [value])[0];
+        var ariaLabelProps = {
+            amPmAriaLabel: amPmAriaLabel,
+            hourAriaLabel: hourAriaLabel,
+            minuteAriaLabel: minuteAriaLabel,
+            nativeInputAriaLabel: nativeInputAriaLabel,
+            secondAriaLabel: secondAriaLabel,
+        };
+        var placeholderProps = {
+            hourPlaceholder: hourPlaceholder,
+            minutePlaceholder: minutePlaceholder,
+            secondPlaceholder: secondPlaceholder,
+        };
+        return ((0, jsx_runtime_1.jsxs)("div", { className: "".concat(baseClassName, "__wrapper"), children: [(0, jsx_runtime_1.jsx)(TimeInput_js_1.default, __assign({}, ariaLabelProps, placeholderProps, { 
+                    // eslint-disable-next-line jsx-a11y/no-autofocus
+                    autoFocus: autoFocus, className: "".concat(baseClassName, "__inputGroup"), disabled: disabled, format: format, isClockOpen: isOpen, locale: locale, maxDetail: maxDetail, maxTime: maxTime, minTime: minTime, name: name, onChange: onChange, onInvalidChange: onInvalidChange, required: required, value: valueFrom })), clearIcon !== null && ((0, jsx_runtime_1.jsx)("button", { "aria-label": clearAriaLabel, className: "".concat(baseClassName, "__clear-button ").concat(baseClassName, "__button"), disabled: disabled, onClick: clear, onFocus: stopPropagation, type: "button", children: typeof clearIcon === 'function' ? (0, react_1.createElement)(clearIcon) : clearIcon })), clockIcon !== null && !disableClock && ((0, jsx_runtime_1.jsx)("button", { "aria-expanded": isOpen || false, "aria-label": clockAriaLabel, className: "".concat(baseClassName, "__clock-button ").concat(baseClassName, "__button"), disabled: disabled, onClick: toggleClock, onFocus: stopPropagation, type: "button", children: typeof clockIcon === 'function' ? (0, react_1.createElement)(clockIcon) : clockIcon }))] }));
+    }
+    function renderClock() {
+        if (isOpen === null || disableClock) {
+            return null;
+        }
+        var clockProps = props.clockProps, portalContainer = props.portalContainer, value = props.value;
+        var className = "".concat(baseClassName, "__clock");
+        var classNames = (0, clsx_1.default)(className, "".concat(className, "--").concat(isOpen ? 'open' : 'closed'));
+        var valueFrom = (Array.isArray(value) ? value : [value])[0];
+        var clock = (0, jsx_runtime_1.jsx)(react_clock_1.default, __assign({ locale: locale, value: valueFrom }, clockProps));
+        return portalContainer ? ((0, react_dom_1.createPortal)((0, jsx_runtime_1.jsx)("div", { ref: clockWrapper, className: classNames, children: clock }), portalContainer)) : ((0, jsx_runtime_1.jsx)(react_fit_1.default, { children: (0, jsx_runtime_1.jsx)("div", { ref: function (ref) {
+                    if (ref && !isOpen) {
+                        ref.removeAttribute('style');
+                    }
+                }, className: classNames, children: clock }) }));
+    }
+    var eventProps = (0, react_1.useMemo)(function () { return (0, make_event_props_1.default)(otherProps); }, [otherProps]);
+    return ((0, jsx_runtime_1.jsxs)("div", __assign({ className: (0, clsx_1.default)(baseClassName, "".concat(baseClassName, "--").concat(isOpen ? 'open' : 'closed'), "".concat(baseClassName, "--").concat(disabled ? 'disabled' : 'enabled'), className), "data-testid": dataTestid, id: id }, eventProps, { onFocus: onFocus, ref: wrapper, children: [renderInputs(), renderClock()] })));
+}
+exports.default = TimePicker;
Index: node_modules/react-time-picker/dist/cjs/index.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import TimePicker from './TimePicker.js';
+export type { TimePickerProps } from './TimePicker.js';
+export { TimePicker };
+export default TimePicker;
Index: node_modules/react-time-picker/dist/cjs/index.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TimePicker = void 0;
+var TimePicker_js_1 = __importDefault(require("./TimePicker.js"));
+exports.TimePicker = TimePicker_js_1.default;
+exports.default = TimePicker_js_1.default;
Index: node_modules/react-time-picker/dist/cjs/package.json
===================================================================
--- node_modules/react-time-picker/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
Index: node_modules/react-time-picker/dist/cjs/shared/dateFormatter.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/shared/dateFormatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/shared/dateFormatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export declare function getFormatter(options: Intl.DateTimeFormatOptions): (locale: string | undefined, date: Date) => string;
+export declare function getNumberFormatter(options: Intl.NumberFormatOptions): (locale: string | undefined, number: number) => any;
Index: node_modules/react-time-picker/dist/cjs/shared/dateFormatter.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/shared/dateFormatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/shared/dateFormatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getNumberFormatter = exports.getFormatter = void 0;
+var get_user_locale_1 = __importDefault(require("get-user-locale"));
+var formatterCache = new Map();
+function getFormatter(options) {
+    return function formatter(locale, date) {
+        var localeWithDefault = locale || (0, get_user_locale_1.default)();
+        if (!formatterCache.has(localeWithDefault)) {
+            formatterCache.set(localeWithDefault, new Map());
+        }
+        var formatterCacheLocale = formatterCache.get(localeWithDefault);
+        if (!formatterCacheLocale.has(options)) {
+            formatterCacheLocale.set(options, new Intl.DateTimeFormat(localeWithDefault || undefined, options).format);
+        }
+        return formatterCacheLocale.get(options)(date);
+    };
+}
+exports.getFormatter = getFormatter;
+var numberFormatterCache = new Map();
+function getNumberFormatter(options) {
+    return function (locale, number) {
+        var localeWithDefault = locale || (0, get_user_locale_1.default)();
+        if (!numberFormatterCache.has(localeWithDefault)) {
+            numberFormatterCache.set(localeWithDefault, new Map());
+        }
+        var numberFormatterCacheLocale = numberFormatterCache.get(localeWithDefault);
+        if (!numberFormatterCacheLocale.has(options)) {
+            numberFormatterCacheLocale.set(options, new Intl.NumberFormat(localeWithDefault || undefined, options).format);
+        }
+        return numberFormatterCacheLocale.get(options)(number);
+    };
+}
+exports.getNumberFormatter = getNumberFormatter;
Index: node_modules/react-time-picker/dist/cjs/shared/dates.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/shared/dates.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/shared/dates.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import type { AmPmType } from './types.js';
+export declare function convert12to24(hour12: string | number, amPm: AmPmType): number;
+export declare function convert24to12(hour24: string | number): [number, AmPmType];
Index: node_modules/react-time-picker/dist/cjs/shared/dates.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/shared/dates.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/shared/dates.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.convert24to12 = exports.convert12to24 = void 0;
+function convert12to24(hour12, amPm) {
+    var hour24 = Number(hour12);
+    if (amPm === 'am' && hour24 === 12) {
+        hour24 = 0;
+    }
+    else if (amPm === 'pm' && hour24 < 12) {
+        hour24 += 12;
+    }
+    return hour24;
+}
+exports.convert12to24 = convert12to24;
+function convert24to12(hour24) {
+    var hour12 = Number(hour24) % 12 || 12;
+    return [hour12, Number(hour24) < 12 ? 'am' : 'pm'];
+}
+exports.convert24to12 = convert24to12;
Index: node_modules/react-time-picker/dist/cjs/shared/types.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/shared/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/shared/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export type Range<T> = [T, T];
+export type AmPmType = 'am' | 'pm';
+export type ClassName = string | null | undefined | (string | null | undefined)[];
+export type CloseReason = 'buttonClick' | 'escape' | 'outsideAction' | 'select';
+export type Detail = 'hour' | 'minute' | 'second';
+export type LooseValuePiece = string | Date | null;
+export type LooseValue = LooseValuePiece | Range<LooseValuePiece>;
+export type OpenReason = 'buttonClick' | 'focus';
+export type Value = string | null;
Index: node_modules/react-time-picker/dist/cjs/shared/types.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/shared/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/shared/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
Index: node_modules/react-time-picker/dist/cjs/shared/utils.d.ts
===================================================================
--- node_modules/react-time-picker/dist/cjs/shared/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/shared/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export declare function getAmPmLabels(locale: string | undefined): [string, string];
+export declare function safeMin(...args: unknown[]): number;
+export declare function safeMax(...args: unknown[]): number;
Index: node_modules/react-time-picker/dist/cjs/shared/utils.js
===================================================================
--- node_modules/react-time-picker/dist/cjs/shared/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/cjs/shared/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.safeMax = exports.safeMin = exports.getAmPmLabels = void 0;
+var dateFormatter_js_1 = require("./dateFormatter.js");
+var nines = ['9', '٩'];
+var ninesRegExp = new RegExp("[".concat(nines.join(''), "]"));
+var amPmFormatter = (0, dateFormatter_js_1.getFormatter)({ hour: 'numeric' });
+function getAmPmLabels(locale) {
+    var amString = amPmFormatter(locale, new Date(2017, 0, 1, 9));
+    var pmString = amPmFormatter(locale, new Date(2017, 0, 1, 21));
+    var _a = amString.split(ninesRegExp), am1 = _a[0], am2 = _a[1];
+    var _b = pmString.split(ninesRegExp), pm1 = _b[0], pm2 = _b[1];
+    if (pm2 !== undefined) {
+        // If pm2 is undefined, nine was not found in pmString - this locale is not using 12-hour time
+        if (am1 !== pm1) {
+            return [am1, pm1].map(function (el) { return el.trim(); });
+        }
+        if (am2 !== pm2) {
+            return [am2, pm2].map(function (el) { return el.trim(); });
+        }
+    }
+    // Fallback
+    return ['AM', 'PM'];
+}
+exports.getAmPmLabels = getAmPmLabels;
+function isValidNumber(num) {
+    return num !== null && num !== false && !Number.isNaN(Number(num));
+}
+function safeMin() {
+    var args = [];
+    for (var _i = 0; _i < arguments.length; _i++) {
+        args[_i] = arguments[_i];
+    }
+    return Math.min.apply(Math, args.filter(isValidNumber));
+}
+exports.safeMin = safeMin;
+function safeMax() {
+    var args = [];
+    for (var _i = 0; _i < arguments.length; _i++) {
+        args[_i] = arguments[_i];
+    }
+    return Math.max.apply(Math, args.filter(isValidNumber));
+}
+exports.safeMax = safeMax;
Index: node_modules/react-time-picker/dist/esm/Divider.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/Divider.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/Divider.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+/// <reference types="react" />
+type DividerProps = {
+    children?: React.ReactNode;
+};
+export default function Divider({ children }: DividerProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/Divider.js
===================================================================
--- node_modules/react-time-picker/dist/esm/Divider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/Divider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { jsx as _jsx } from "react/jsx-runtime";
+export default function Divider(_a) {
+    var children = _a.children;
+    return _jsx("span", { className: "react-time-picker__inputGroup__divider", children: children });
+}
Index: node_modules/react-time-picker/dist/esm/TimeInput.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/// <reference types="react" />
+import type { Detail, LooseValuePiece, Value } from './shared/types.js';
+type TimeInputProps = {
+    amPmAriaLabel?: string;
+    autoFocus?: boolean;
+    className: string;
+    disabled?: boolean;
+    format?: string;
+    hourAriaLabel?: string;
+    hourPlaceholder?: string;
+    isClockOpen?: boolean | null;
+    locale?: string;
+    maxDetail?: Detail;
+    maxTime?: string;
+    minTime?: string;
+    minuteAriaLabel?: string;
+    minutePlaceholder?: string;
+    name?: string;
+    nativeInputAriaLabel?: string;
+    onChange?: (value: Value, shouldCloseClock: boolean) => void;
+    onInvalidChange?: () => void;
+    required?: boolean;
+    secondAriaLabel?: string;
+    secondPlaceholder?: string;
+    value?: LooseValuePiece;
+};
+export default function TimeInput({ amPmAriaLabel, autoFocus, className, disabled, format, hourAriaLabel, hourPlaceholder, isClockOpen: isClockOpenProps, locale, maxDetail, maxTime, minTime, minuteAriaLabel, minutePlaceholder, name, nativeInputAriaLabel, onChange: onChangeProps, onInvalidChange, required, secondAriaLabel, secondPlaceholder, value: valueProps, }: TimeInputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/TimeInput.js
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,380 @@
+'use client';
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
+import { useEffect, useRef, useState } from 'react';
+import { getHours, getMinutes, getSeconds, getHoursMinutes, getHoursMinutesSeconds, } from '@wojtekmaj/date-utils';
+import Divider from './Divider.js';
+import Hour12Input from './TimeInput/Hour12Input.js';
+import Hour24Input from './TimeInput/Hour24Input.js';
+import MinuteInput from './TimeInput/MinuteInput.js';
+import SecondInput from './TimeInput/SecondInput.js';
+import NativeInput from './TimeInput/NativeInput.js';
+import AmPm from './TimeInput/AmPm.js';
+import { getFormatter, getNumberFormatter } from './shared/dateFormatter.js';
+import { convert12to24, convert24to12 } from './shared/dates.js';
+import { getAmPmLabels } from './shared/utils.js';
+var getFormatterOptionsCache = {};
+var allViews = ['hour', 'minute', 'second'];
+function isInternalInput(element) {
+    return element.dataset.input === 'true';
+}
+function findInput(element, property) {
+    var nextElement = element;
+    do {
+        nextElement = nextElement[property];
+    } while (nextElement && !isInternalInput(nextElement));
+    return nextElement;
+}
+function focus(element) {
+    if (element) {
+        element.focus();
+    }
+}
+function renderCustomInputs(placeholder, elementFunctions, allowMultipleInstances) {
+    var usedFunctions = [];
+    var pattern = new RegExp(Object.keys(elementFunctions)
+        .map(function (el) { return "".concat(el, "+"); })
+        .join('|'), 'g');
+    var matches = placeholder.match(pattern);
+    return placeholder.split(pattern).reduce(function (arr, element, index) {
+        var divider = element && (
+        // eslint-disable-next-line react/no-array-index-key
+        _jsx(Divider, { children: element }, "separator_".concat(index)));
+        arr.push(divider);
+        var currentMatch = matches && matches[index];
+        if (currentMatch) {
+            var renderFunction = elementFunctions[currentMatch] ||
+                elementFunctions[Object.keys(elementFunctions).find(function (elementFunction) {
+                    return currentMatch.match(elementFunction);
+                })];
+            if (!renderFunction) {
+                return arr;
+            }
+            if (!allowMultipleInstances && usedFunctions.includes(renderFunction)) {
+                arr.push(currentMatch);
+            }
+            else {
+                arr.push(renderFunction(currentMatch, index));
+                usedFunctions.push(renderFunction);
+            }
+        }
+        return arr;
+    }, []);
+}
+var formatNumber = getNumberFormatter({ useGrouping: false });
+export default function TimeInput(_a) {
+    var amPmAriaLabel = _a.amPmAriaLabel, autoFocus = _a.autoFocus, className = _a.className, disabled = _a.disabled, format = _a.format, hourAriaLabel = _a.hourAriaLabel, hourPlaceholder = _a.hourPlaceholder, _b = _a.isClockOpen, isClockOpenProps = _b === void 0 ? null : _b, locale = _a.locale, _c = _a.maxDetail, maxDetail = _c === void 0 ? 'minute' : _c, maxTime = _a.maxTime, minTime = _a.minTime, minuteAriaLabel = _a.minuteAriaLabel, minutePlaceholder = _a.minutePlaceholder, _d = _a.name, name = _d === void 0 ? 'time' : _d, nativeInputAriaLabel = _a.nativeInputAriaLabel, onChangeProps = _a.onChange, onInvalidChange = _a.onInvalidChange, required = _a.required, secondAriaLabel = _a.secondAriaLabel, secondPlaceholder = _a.secondPlaceholder, valueProps = _a.value;
+    var _e = useState(null), amPm = _e[0], setAmPm = _e[1];
+    var _f = useState(null), hour = _f[0], setHour = _f[1];
+    var _g = useState(null), minute = _g[0], setMinute = _g[1];
+    var _h = useState(null), second = _h[0], setSecond = _h[1];
+    var _j = useState(null), value = _j[0], setValue = _j[1];
+    var amPmInput = useRef(null);
+    var hour12Input = useRef(null);
+    var hour24Input = useRef(null);
+    var minuteInput = useRef(null);
+    var secondInput = useRef(null);
+    var _k = useState(isClockOpenProps), isClockOpen = _k[0], setIsClockOpen = _k[1];
+    var lastPressedKey = useRef(undefined);
+    useEffect(function () {
+        setIsClockOpen(isClockOpenProps);
+    }, [isClockOpenProps]);
+    useEffect(function () {
+        var nextValue = valueProps;
+        if (nextValue) {
+            setAmPm(convert24to12(getHours(nextValue))[1]);
+            setHour(getHours(nextValue).toString());
+            setMinute(getMinutes(nextValue).toString());
+            setSecond(getSeconds(nextValue).toString());
+            setValue(nextValue);
+        }
+        else {
+            setAmPm(null);
+            setHour(null);
+            setMinute(null);
+            setSecond(null);
+            setValue(null);
+        }
+    }, [
+        valueProps,
+        minTime,
+        maxTime,
+        maxDetail,
+        // Toggling clock visibility resets values
+        isClockOpen,
+    ]);
+    var valueType = maxDetail;
+    var formatTime = (function () {
+        var level = allViews.indexOf(maxDetail);
+        var formatterOptions = getFormatterOptionsCache[level] ||
+            (function () {
+                var options = { hour: 'numeric' };
+                if (level >= 1) {
+                    options.minute = 'numeric';
+                }
+                if (level >= 2) {
+                    options.second = 'numeric';
+                }
+                getFormatterOptionsCache[level] = options;
+                return options;
+            })();
+        return getFormatter(formatterOptions);
+    })();
+    /**
+     * Gets current value in a desired format.
+     */
+    function getProcessedValue(value) {
+        var processFunction = (function () {
+            switch (valueType) {
+                case 'hour':
+                case 'minute':
+                    return getHoursMinutes;
+                case 'second':
+                    return getHoursMinutesSeconds;
+                default:
+                    throw new Error('Invalid valueType');
+            }
+        })();
+        return processFunction(value);
+    }
+    var placeholder = format ||
+        (function () {
+            var hour24 = 21;
+            var hour12 = 9;
+            var minute = 13;
+            var second = 14;
+            var date = new Date(2017, 0, 1, hour24, minute, second);
+            return formatTime(locale, date)
+                .replace(formatNumber(locale, hour12), 'h')
+                .replace(formatNumber(locale, hour24), 'H')
+                .replace(formatNumber(locale, minute), 'mm')
+                .replace(formatNumber(locale, second), 'ss')
+                .replace(new RegExp(getAmPmLabels(locale).join('|')), 'a');
+        })();
+    var divider = (function () {
+        var dividers = placeholder.match(/[^0-9a-z]/i);
+        return dividers ? dividers[0] : null;
+    })();
+    function onClick(event) {
+        if (event.target === event.currentTarget) {
+            // Wrapper was directly clicked
+            var firstInput = event.target.children[1];
+            focus(firstInput);
+        }
+    }
+    function onKeyDown(event) {
+        lastPressedKey.current = event.key;
+        switch (event.key) {
+            case 'ArrowLeft':
+            case 'ArrowRight':
+            case divider: {
+                event.preventDefault();
+                var input = event.target;
+                var property = event.key === 'ArrowLeft' ? 'previousElementSibling' : 'nextElementSibling';
+                var nextInput = findInput(input, property);
+                focus(nextInput);
+                break;
+            }
+            default:
+        }
+    }
+    function onKeyUp(event) {
+        var key = event.key, input = event.target;
+        var isLastPressedKey = lastPressedKey.current === key;
+        if (!isLastPressedKey) {
+            return;
+        }
+        var isNumberKey = !isNaN(Number(key));
+        if (!isNumberKey) {
+            return;
+        }
+        var max = input.getAttribute('max');
+        if (!max) {
+            return;
+        }
+        var value = input.value;
+        /**
+         * Given 1, the smallest possible number the user could type by adding another digit is 10.
+         * 10 would be a valid value given max = 12, so we won't jump to the next input.
+         * However, given 2, smallers possible number would be 20, and thus keeping the focus in
+         * this field doesn't make sense.
+         */
+        if (Number(value) * 10 > Number(max) || value.length >= max.length) {
+            var property = 'nextElementSibling';
+            var nextInput = findInput(input, property);
+            focus(nextInput);
+        }
+    }
+    /**
+     * Called after internal onChange. Checks input validity. If all fields are valid,
+     * calls props.onChange.
+     */
+    function onChangeExternal() {
+        if (!onChangeProps) {
+            return;
+        }
+        function filterBoolean(value) {
+            return Boolean(value);
+        }
+        var formElements = [
+            amPmInput.current,
+            hour12Input.current,
+            hour24Input.current,
+            minuteInput.current,
+            secondInput.current,
+        ].filter(filterBoolean);
+        var formElementsWithoutSelect = formElements.slice(1);
+        var values = {};
+        formElements.forEach(function (formElement) {
+            values[formElement.name] =
+                formElement.type === 'number'
+                    ? 'valueAsNumber' in formElement
+                        ? formElement.valueAsNumber
+                        : Number(formElement.value)
+                    : formElement.value;
+        });
+        var isEveryValueEmpty = formElementsWithoutSelect.every(function (formElement) { return !formElement.value; });
+        if (isEveryValueEmpty) {
+            onChangeProps(null, false);
+            return;
+        }
+        var isEveryValueFilled = formElements.every(function (formElement) { return formElement.value; });
+        var isEveryValueValid = formElements.every(function (formElement) { return formElement.validity.valid; });
+        if (isEveryValueFilled && isEveryValueValid) {
+            var hour_1 = Number(values.hour24 ||
+                (values.hour12 && values.amPm && convert12to24(values.hour12, values.amPm)) ||
+                0);
+            var minute_1 = Number(values.minute || 0);
+            var second_1 = Number(values.second || 0);
+            var padStart = function (num) { return "0".concat(num).slice(-2); };
+            var proposedValue = "".concat(padStart(hour_1), ":").concat(padStart(minute_1), ":").concat(padStart(second_1));
+            var processedValue = getProcessedValue(proposedValue);
+            onChangeProps(processedValue, false);
+            return;
+        }
+        if (!onInvalidChange) {
+            return;
+        }
+        onInvalidChange();
+    }
+    /**
+     * Called when non-native date input is changed.
+     */
+    function onChange(event) {
+        var _a = event.target, name = _a.name, value = _a.value;
+        switch (name) {
+            case 'amPm':
+                setAmPm(value);
+                break;
+            case 'hour12':
+                setHour(value ? convert12to24(value, amPm || 'am').toString() : '');
+                break;
+            case 'hour24':
+                setHour(value);
+                break;
+            case 'minute':
+                setMinute(value);
+                break;
+            case 'second':
+                setSecond(value);
+                break;
+        }
+        onChangeExternal();
+    }
+    /**
+     * Called when native date input is changed.
+     */
+    function onChangeNative(event) {
+        var value = event.target.value;
+        if (!onChangeProps) {
+            return;
+        }
+        var processedValue = value || null;
+        onChangeProps(processedValue, false);
+    }
+    var commonInputProps = {
+        className: className,
+        disabled: disabled,
+        maxTime: maxTime,
+        minTime: minTime,
+        onChange: onChange,
+        onKeyDown: onKeyDown,
+        onKeyUp: onKeyUp,
+        // This is only for showing validity when editing
+        required: Boolean(required || isClockOpen),
+    };
+    function renderHour12(currentMatch, index) {
+        if (currentMatch && currentMatch.length > 2) {
+            throw new Error("Unsupported token: ".concat(currentMatch));
+        }
+        var showLeadingZeros = currentMatch ? currentMatch.length === 2 : false;
+        return (_jsx(Hour12Input, __assign({}, commonInputProps, { amPm: amPm, ariaLabel: hourAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, inputRef: hour12Input, placeholder: hourPlaceholder, showLeadingZeros: showLeadingZeros, value: hour }), "hour12"));
+    }
+    function renderHour24(currentMatch, index) {
+        if (currentMatch && currentMatch.length > 2) {
+            throw new Error("Unsupported token: ".concat(currentMatch));
+        }
+        var showLeadingZeros = currentMatch ? currentMatch.length === 2 : false;
+        return (_jsx(Hour24Input, __assign({}, commonInputProps, { ariaLabel: hourAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, inputRef: hour24Input, placeholder: hourPlaceholder, showLeadingZeros: showLeadingZeros, value: hour }), "hour24"));
+    }
+    function renderHour(currentMatch, index) {
+        if (/h/.test(currentMatch)) {
+            return renderHour12(currentMatch, index);
+        }
+        return renderHour24(currentMatch, index);
+    }
+    function renderMinute(currentMatch, index) {
+        if (currentMatch && currentMatch.length > 2) {
+            throw new Error("Unsupported token: ".concat(currentMatch));
+        }
+        var showLeadingZeros = currentMatch ? currentMatch.length === 2 : false;
+        return (_jsx(MinuteInput, __assign({}, commonInputProps, { ariaLabel: minuteAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, hour: hour, inputRef: minuteInput, placeholder: minutePlaceholder, showLeadingZeros: showLeadingZeros, value: minute }), "minute"));
+    }
+    function renderSecond(currentMatch, index) {
+        if (currentMatch && currentMatch.length > 2) {
+            throw new Error("Unsupported token: ".concat(currentMatch));
+        }
+        var showLeadingZeros = currentMatch ? currentMatch.length === 2 : true;
+        return (_jsx(SecondInput, __assign({}, commonInputProps, { ariaLabel: secondAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, hour: hour, inputRef: secondInput, minute: minute, placeholder: secondPlaceholder, showLeadingZeros: showLeadingZeros, value: second }), "second"));
+    }
+    function renderAmPm(currentMatch, index) {
+        return (_jsx(AmPm, __assign({}, commonInputProps, { ariaLabel: amPmAriaLabel, 
+            // eslint-disable-next-line jsx-a11y/no-autofocus
+            autoFocus: index === 0 && autoFocus, inputRef: amPmInput, locale: locale, onChange: onChange, value: amPm }), "ampm"));
+    }
+    function renderCustomInputsInternal() {
+        var elementFunctions = {
+            h: renderHour,
+            H: renderHour,
+            m: renderMinute,
+            s: renderSecond,
+            a: renderAmPm,
+        };
+        var allowMultipleInstances = typeof format !== 'undefined';
+        return renderCustomInputs(placeholder, elementFunctions, allowMultipleInstances);
+    }
+    function renderNativeInput() {
+        return (_jsx(NativeInput, { ariaLabel: nativeInputAriaLabel, disabled: disabled, maxTime: maxTime, minTime: minTime, name: name, onChange: onChangeNative, required: required, value: value, valueType: valueType }, "time"));
+    }
+    return (
+    // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
+    _jsxs("div", { className: className, onClick: onClick, children: [renderNativeInput(), renderCustomInputsInternal()] }));
+}
Index: node_modules/react-time-picker/dist/esm/TimeInput/AmPm.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/AmPm.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/AmPm.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/// <reference types="react" />
+type AmPmProps = {
+    ariaLabel?: string;
+    autoFocus?: boolean;
+    className: string;
+    disabled?: boolean;
+    inputRef?: React.RefObject<HTMLSelectElement | null>;
+    locale?: string;
+    maxTime?: string;
+    minTime?: string;
+    onChange?: (event: React.ChangeEvent<HTMLSelectElement> & {
+        target: HTMLSelectElement;
+    }) => void;
+    onKeyDown?: (event: React.KeyboardEvent<HTMLSelectElement> & {
+        target: HTMLSelectElement;
+    }) => void;
+    required?: boolean;
+    value?: string | null;
+};
+export default function AmPm({ ariaLabel, autoFocus, className, disabled, inputRef, locale, maxTime, minTime, onChange, onKeyDown, required, value, }: AmPmProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/TimeInput/AmPm.js
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/AmPm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/AmPm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
+import clsx from 'clsx';
+import { getHours } from '@wojtekmaj/date-utils';
+import { convert24to12 } from '../shared/dates.js';
+import { getAmPmLabels } from '../shared/utils.js';
+export default function AmPm(_a) {
+    var ariaLabel = _a.ariaLabel, autoFocus = _a.autoFocus, className = _a.className, disabled = _a.disabled, inputRef = _a.inputRef, locale = _a.locale, maxTime = _a.maxTime, minTime = _a.minTime, onChange = _a.onChange, onKeyDown = _a.onKeyDown, required = _a.required, value = _a.value;
+    var amDisabled = minTime ? convert24to12(getHours(minTime))[1] === 'pm' : false;
+    var pmDisabled = maxTime ? convert24to12(getHours(maxTime))[1] === 'am' : false;
+    var name = 'amPm';
+    var _b = getAmPmLabels(locale), amLabel = _b[0], pmLabel = _b[1];
+    return (_jsxs("select", { "aria-label": ariaLabel, autoFocus: autoFocus, className: clsx("".concat(className, "__input"), "".concat(className, "__").concat(name)), "data-input": "true", "data-select": "true", disabled: disabled, name: name, onChange: onChange, onKeyDown: onKeyDown, 
+        // Assertion is needed for React 18 compatibility
+        ref: inputRef, required: required, value: value !== null ? value : '', children: [!value && _jsx("option", { value: "", children: "--" }), _jsx("option", { disabled: amDisabled, value: "am", children: amLabel }), _jsx("option", { disabled: pmDisabled, value: "pm", children: pmLabel })] }));
+}
Index: node_modules/react-time-picker/dist/esm/TimeInput/Hour12Input.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/Hour12Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/Hour12Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+/// <reference types="react" />
+import Input from './Input.js';
+import type { AmPmType } from '../shared/types.js';
+type Hour12InputProps = {
+    amPm: AmPmType | null;
+    maxTime?: string;
+    minTime?: string;
+    value?: string | null;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name' | 'nameForClass'>;
+export default function Hour12Input({ amPm, maxTime, minTime, value, ...otherProps }: Hour12InputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/TimeInput/Hour12Input.js
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/Hour12Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/Hour12Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+import { jsx as _jsx } from "react/jsx-runtime";
+import { getHours } from '@wojtekmaj/date-utils';
+import Input from './Input.js';
+import { convert24to12 } from '../shared/dates.js';
+import { safeMin, safeMax } from '../shared/utils.js';
+export default function Hour12Input(_a) {
+    var amPm = _a.amPm, maxTime = _a.maxTime, minTime = _a.minTime, value = _a.value, otherProps = __rest(_a, ["amPm", "maxTime", "minTime", "value"]);
+    var maxHour = safeMin(12, maxTime &&
+        (function () {
+            var _a = convert24to12(getHours(maxTime)), maxHourResult = _a[0], maxAmPm = _a[1];
+            if (maxAmPm !== amPm) {
+                // pm is always after am, so we should ignore validation
+                return null;
+            }
+            return maxHourResult;
+        })());
+    var minHour = safeMax(1, minTime &&
+        (function () {
+            var _a = convert24to12(getHours(minTime)), minHourResult = _a[0], minAmPm = _a[1];
+            if (
+            // pm is always after am, so we should ignore validation
+            minAmPm !== amPm ||
+                // If minHour is 12 am/pm, user should be able to enter 12, 1, ..., 11.
+                minHourResult === 12) {
+                return null;
+            }
+            return minHourResult;
+        })());
+    var value12 = value ? convert24to12(value)[0].toString() : '';
+    return (_jsx(Input, __assign({ max: maxHour, min: minHour, name: "hour12", nameForClass: "hour", value: value12 }, otherProps)));
+}
Index: node_modules/react-time-picker/dist/esm/TimeInput/Hour24Input.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/Hour24Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/Hour24Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+/// <reference types="react" />
+import Input from './Input.js';
+type Hour24InputProps = {
+    maxTime?: string;
+    minTime?: string;
+    value?: string | null;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name' | 'nameForClass'>;
+export default function Hour24Input({ maxTime, minTime, ...otherProps }: Hour24InputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/TimeInput/Hour24Input.js
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/Hour24Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/Hour24Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+import { jsx as _jsx } from "react/jsx-runtime";
+import { getHours } from '@wojtekmaj/date-utils';
+import Input from './Input.js';
+import { safeMin, safeMax } from '../shared/utils.js';
+export default function Hour24Input(_a) {
+    var maxTime = _a.maxTime, minTime = _a.minTime, otherProps = __rest(_a, ["maxTime", "minTime"]);
+    var maxHour = safeMin(23, maxTime && getHours(maxTime));
+    var minHour = safeMax(0, minTime && getHours(minTime));
+    return _jsx(Input, __assign({ max: maxHour, min: minHour, name: "hour24", nameForClass: "hour" }, otherProps));
+}
Index: node_modules/react-time-picker/dist/esm/TimeInput/Input.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/Input.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+/// <reference types="react" />
+type InputProps = {
+    ariaLabel?: string;
+    autoFocus?: boolean;
+    className?: string;
+    disabled?: boolean;
+    inputRef?: React.RefObject<HTMLInputElement | null>;
+    max: number;
+    min: number;
+    name: string;
+    nameForClass?: string;
+    onChange?: (event: React.ChangeEvent<HTMLInputElement> & {
+        target: HTMLInputElement;
+    }) => void;
+    onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement> & {
+        target: HTMLInputElement;
+    }) => void;
+    onKeyUp?: (event: React.KeyboardEvent<HTMLInputElement> & {
+        target: HTMLInputElement;
+    }) => void;
+    placeholder?: string;
+    required?: boolean;
+    showLeadingZeros?: boolean;
+    step?: number;
+    value?: string | null;
+};
+export default function Input({ ariaLabel, autoFocus, className, disabled, inputRef, max, min, name, nameForClass, onChange, onKeyDown, onKeyUp, placeholder, required, showLeadingZeros, step, value, }: InputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/TimeInput/Input.js
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/Input.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,107 @@
+import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
+import { useEffect, useLayoutEffect } from 'react';
+import clsx from 'clsx';
+import updateInputWidth, { getFontShorthand } from 'update-input-width';
+var isBrowser = typeof document !== 'undefined';
+var useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;
+var isIEOrEdgeLegacy = isBrowser && /(MSIE|Trident\/|Edge\/)/.test(navigator.userAgent);
+var isFirefox = isBrowser && /Firefox/.test(navigator.userAgent);
+function onFocus(event) {
+    var target = event.target;
+    if (isIEOrEdgeLegacy) {
+        requestAnimationFrame(function () { return target.select(); });
+    }
+    else {
+        target.select();
+    }
+}
+function updateInputWidthOnLoad(element) {
+    if (document.readyState === 'complete') {
+        return;
+    }
+    function onLoad() {
+        updateInputWidth(element);
+    }
+    window.addEventListener('load', onLoad);
+}
+function updateInputWidthOnFontLoad(element) {
+    if (!document.fonts) {
+        return;
+    }
+    var font = getFontShorthand(element);
+    if (!font) {
+        return;
+    }
+    var isFontLoaded = document.fonts.check(font);
+    if (isFontLoaded) {
+        return;
+    }
+    function onLoadingDone() {
+        updateInputWidth(element);
+    }
+    document.fonts.addEventListener('loadingdone', onLoadingDone);
+}
+function getSelectionString(input) {
+    /**
+     * window.getSelection().toString() returns empty string in IE11 and Firefox,
+     * so alternatives come first.
+     */
+    if (input &&
+        'selectionStart' in input &&
+        input.selectionStart !== null &&
+        'selectionEnd' in input &&
+        input.selectionEnd !== null) {
+        return input.value.slice(input.selectionStart, input.selectionEnd);
+    }
+    if ('getSelection' in window) {
+        var selection = window.getSelection();
+        return selection && selection.toString();
+    }
+    return null;
+}
+function makeOnKeyPress(maxLength) {
+    if (maxLength === null) {
+        return undefined;
+    }
+    /**
+     * Prevents keystrokes that would not produce a number or when value after keystroke would
+     * exceed maxLength.
+     */
+    return function onKeyPress(event) {
+        if (isFirefox) {
+            // See https://github.com/wojtekmaj/react-time-picker/issues/92
+            return;
+        }
+        var key = event.key, input = event.target;
+        var value = input.value;
+        var isNumberKey = key.length === 1 && /\d/.test(key);
+        var selection = getSelectionString(input);
+        if (!isNumberKey || !(selection || value.length < maxLength)) {
+            event.preventDefault();
+        }
+    };
+}
+export default function Input(_a) {
+    var ariaLabel = _a.ariaLabel, autoFocus = _a.autoFocus, className = _a.className, disabled = _a.disabled, inputRef = _a.inputRef, max = _a.max, min = _a.min, name = _a.name, nameForClass = _a.nameForClass, onChange = _a.onChange, onKeyDown = _a.onKeyDown, onKeyUp = _a.onKeyUp, _b = _a.placeholder, placeholder = _b === void 0 ? '--' : _b, required = _a.required, showLeadingZeros = _a.showLeadingZeros, step = _a.step, value = _a.value;
+    useIsomorphicLayoutEffect(function () {
+        if (!inputRef || !inputRef.current) {
+            return;
+        }
+        updateInputWidth(inputRef.current);
+        updateInputWidthOnLoad(inputRef.current);
+        updateInputWidthOnFontLoad(inputRef.current);
+    }, [inputRef, value]);
+    var hasLeadingZero = showLeadingZeros &&
+        value &&
+        Number(value) < 10 &&
+        (value === '0' || !value.toString().startsWith('0'));
+    var maxLength = max ? max.toString().length : null;
+    return (_jsxs(_Fragment, { children: [hasLeadingZero ? _jsx("span", { className: "".concat(className, "__leadingZero"), children: "0" }) : null, _jsx("input", { "aria-label": ariaLabel, autoComplete: "off", autoFocus: autoFocus, className: clsx("".concat(className, "__input"), "".concat(className, "__").concat(nameForClass || name), hasLeadingZero && "".concat(className, "__input--hasLeadingZero")), "data-input": "true", disabled: disabled, inputMode: "numeric", max: max, min: min, name: name, onChange: onChange, onFocus: onFocus, onKeyDown: onKeyDown, onKeyPress: makeOnKeyPress(maxLength), onKeyUp: function (event) {
+                    updateInputWidth(event.target);
+                    if (onKeyUp) {
+                        onKeyUp(event);
+                    }
+                }, placeholder: placeholder, 
+                // Assertion is needed for React 18 compatibility
+                ref: inputRef, required: required, step: step, type: "number", value: value !== null ? value : '' })] }));
+}
Index: node_modules/react-time-picker/dist/esm/TimeInput/MinuteInput.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/MinuteInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/MinuteInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/// <reference types="react" />
+import Input from './Input.js';
+type MinuteInputProps = {
+    hour?: string | null;
+    maxTime?: string;
+    minTime?: string;
+    showLeadingZeros?: boolean;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name'>;
+export default function MinuteInput({ hour, maxTime, minTime, showLeadingZeros, ...otherProps }: MinuteInputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/TimeInput/MinuteInput.js
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/MinuteInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/MinuteInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+import { jsx as _jsx } from "react/jsx-runtime";
+import { getHours, getMinutes } from '@wojtekmaj/date-utils';
+import Input from './Input.js';
+import { safeMin, safeMax } from '../shared/utils.js';
+export default function MinuteInput(_a) {
+    var hour = _a.hour, maxTime = _a.maxTime, minTime = _a.minTime, _b = _a.showLeadingZeros, showLeadingZeros = _b === void 0 ? true : _b, otherProps = __rest(_a, ["hour", "maxTime", "minTime", "showLeadingZeros"]);
+    function isSameHour(date) {
+        return hour === getHours(date).toString();
+    }
+    var maxMinute = safeMin(59, maxTime && isSameHour(maxTime) && getMinutes(maxTime));
+    var minMinute = safeMax(0, minTime && isSameHour(minTime) && getMinutes(minTime));
+    return (_jsx(Input, __assign({ max: maxMinute, min: minMinute, name: "minute", showLeadingZeros: showLeadingZeros }, otherProps)));
+}
Index: node_modules/react-time-picker/dist/esm/TimeInput/NativeInput.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/NativeInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/NativeInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/// <reference types="react" />
+type NativeInputProps = {
+    ariaLabel?: string;
+    disabled?: boolean;
+    maxTime?: string;
+    minTime?: string;
+    name?: string;
+    onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
+    required?: boolean;
+    value?: string | Date | null;
+    valueType: 'hour' | 'minute' | 'second';
+};
+export default function NativeInput({ ariaLabel, disabled, maxTime, minTime, name, onChange, required, value, valueType, }: NativeInputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/TimeInput/NativeInput.js
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/NativeInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/NativeInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { jsx as _jsx } from "react/jsx-runtime";
+import { getHours, getHoursMinutes, getHoursMinutesSeconds } from '@wojtekmaj/date-utils';
+export default function NativeInput(_a) {
+    var ariaLabel = _a.ariaLabel, disabled = _a.disabled, maxTime = _a.maxTime, minTime = _a.minTime, name = _a.name, onChange = _a.onChange, required = _a.required, value = _a.value, valueType = _a.valueType;
+    var nativeValueParser = (function () {
+        switch (valueType) {
+            case 'hour':
+                return function (receivedValue) { return "".concat(getHours(receivedValue), ":00"); };
+            case 'minute':
+                return getHoursMinutes;
+            case 'second':
+                return getHoursMinutesSeconds;
+            default:
+                throw new Error('Invalid valueType');
+        }
+    })();
+    var step = (function () {
+        switch (valueType) {
+            case 'hour':
+                return 3600;
+            case 'minute':
+                return 60;
+            case 'second':
+                return 1;
+            default:
+                throw new Error('Invalid valueType');
+        }
+    })();
+    function stopPropagation(event) {
+        event.stopPropagation();
+    }
+    return (_jsx("input", { "aria-label": ariaLabel, disabled: disabled, hidden: true, max: maxTime ? nativeValueParser(maxTime) : undefined, min: minTime ? nativeValueParser(minTime) : undefined, name: name, onChange: onChange, onFocus: stopPropagation, required: required, step: step, style: {
+            visibility: 'hidden',
+            position: 'absolute',
+            zIndex: '-999',
+        }, type: "time", value: value ? nativeValueParser(value) : '' }));
+}
Index: node_modules/react-time-picker/dist/esm/TimeInput/SecondInput.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/SecondInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/SecondInput.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+/// <reference types="react" />
+import Input from './Input.js';
+type SecondInputProps = {
+    hour?: string | null;
+    maxTime?: string;
+    minTime?: string;
+    minute?: string | null;
+    showLeadingZeros?: boolean;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name'>;
+export default function SecondInput({ hour, maxTime, minTime, minute, showLeadingZeros, ...otherProps }: SecondInputProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/TimeInput/SecondInput.js
===================================================================
--- node_modules/react-time-picker/dist/esm/TimeInput/SecondInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimeInput/SecondInput.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+import { jsx as _jsx } from "react/jsx-runtime";
+import { getHours, getMinutes, getSeconds } from '@wojtekmaj/date-utils';
+import Input from './Input.js';
+import { safeMin, safeMax } from '../shared/utils.js';
+export default function SecondInput(_a) {
+    var hour = _a.hour, maxTime = _a.maxTime, minTime = _a.minTime, minute = _a.minute, _b = _a.showLeadingZeros, showLeadingZeros = _b === void 0 ? true : _b, otherProps = __rest(_a, ["hour", "maxTime", "minTime", "minute", "showLeadingZeros"]);
+    function isSameMinute(date) {
+        return hour === getHours(date).toString() && minute === getMinutes(date).toString();
+    }
+    var maxSecond = safeMin(59, maxTime && isSameMinute(maxTime) && getSeconds(maxTime));
+    var minSecond = safeMax(0, minTime && isSameMinute(minTime) && getSeconds(minTime));
+    return (_jsx(Input, __assign({ max: maxSecond, min: minSecond, name: "second", showLeadingZeros: showLeadingZeros }, otherProps)));
+}
Index: node_modules/react-time-picker/dist/esm/TimePicker.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/TimePicker.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimePicker.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,271 @@
+/// <reference types="react" />
+import makeEventProps from 'make-event-props';
+import Clock from 'react-clock';
+import type { ClassName, CloseReason, Detail, LooseValue, OpenReason, Value } from './shared/types.js';
+type ReactNodeLike = React.ReactNode | string | number | boolean | null | undefined;
+type Icon = ReactNodeLike | ReactNodeLike[];
+type IconOrRenderFunction = Icon | React.ComponentType | React.ReactElement;
+type ClockProps = Omit<React.ComponentPropsWithoutRef<typeof Clock>, 'value'>;
+type EventProps = ReturnType<typeof makeEventProps>;
+export type TimePickerProps = {
+    /**
+     * `aria-label` for the AM/PM select input.
+     *
+     * @example 'Select AM/PM'
+     */
+    amPmAriaLabel?: string;
+    /**
+     * Automatically focuses the input on mount.
+     *
+     * @example true
+     */
+    autoFocus?: boolean;
+    /**
+     * Class name(s) that will be added along with `"react-time-picker"` to the main React-Time-Picker `<div>` element.
+     *
+     * @example 'class1 class2'
+     * @example ['class1', 'class2 class3']
+     */
+    className?: ClassName;
+    /**
+     * `aria-label` for the clear button.
+     *
+     * @example 'Clear value'
+     */
+    clearAriaLabel?: string;
+    /**
+     * Content of the clear button. Setting the value explicitly to `null` will hide the icon.
+     *
+     * @example 'Clear'
+     * @example <ClearIcon />
+     * @example ClearIcon
+     */
+    clearIcon?: IconOrRenderFunction | null;
+    /**
+     * `aria-label` for the clock button.
+     *
+     * @example 'Toggle clock'
+     */
+    clockAriaLabel?: string;
+    /**
+     * Content of the clock button. Setting the value explicitly to `null` will hide the icon.
+     *
+     * @example 'Clock'
+     * @example <ClockIcon />
+     * @example ClockIcon
+     */
+    clockIcon?: IconOrRenderFunction | null;
+    /**
+     * Props to pass to React-Clock component.
+     */
+    clockProps?: ClockProps;
+    /**
+     * Whether to close the clock on value selection.
+     *
+     * **Note**: It's recommended to use `shouldCloseClock` function instead.
+     *
+     * @default true
+     * @example false
+     */
+    closeClock?: boolean;
+    /**
+     * `data-testid` attribute for the main React-Time-Picker `<div>` element.
+     *
+     * @example 'time-picker'
+     */
+    'data-testid'?: string;
+    /**
+     * When set to `true`, will remove the clock and the button toggling its visibility.
+     *
+     * @default false
+     * @example true
+     */
+    disableClock?: boolean;
+    /**
+     * Whether the time picker should be disabled.
+     *
+     * @default false
+     * @example true
+     */
+    disabled?: boolean;
+    /**
+     * Input format based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). Supported values are: `H`, `HH`, `h`, `hh`, `m`, `mm`, `s`, `ss`, `a`.
+     *
+     * **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.
+     *
+     * @example 'h:m:s a'
+     */
+    format?: string;
+    /**
+     * `aria-label` for the hour input.
+     *
+     * @example 'Hour'
+     */
+    hourAriaLabel?: string;
+    /**
+     * `placeholder` for the hour input.
+     *
+     * @default '--'
+     * @example 'hh'
+     */
+    hourPlaceholder?: string;
+    /**
+     * `id` attribute for the main React-TimeRange-Picker `<div>` element.
+     *
+     * @example 'time-picker'
+     */
+    id?: string;
+    /**
+     * Whether the clock should be opened.
+     *
+     * @default false
+     * @example true
+     */
+    isOpen?: boolean;
+    /**
+     * Locale that should be used by the datetime picker and the calendar. Can be any [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag).
+     *
+     * **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.
+     *
+     * @example 'hu-HU'
+     */
+    locale?: string;
+    /**
+     * How detailed time picking shall be. Can be `"hour"`, `"minute"` or `"second"`.
+     *
+     * @default 'minute'
+     * @example 'second'
+     */
+    maxDetail?: Detail;
+    /**
+     * Maximum date that the user can select.
+     *
+     * @example new Date()
+     * @example '22:15:00'
+     */
+    maxTime?: string;
+    /**
+     * Minimum date that the user can select.
+     *
+     * @example new Date()
+     * @example '22:15:00'
+     */
+    minTime?: string;
+    /**
+     * `aria-label` for the minute input.
+     *
+     * @example 'Minute'
+     */
+    minuteAriaLabel?: string;
+    /**
+     * `placeholder` for the minute input.
+     *
+     * @default '--'
+     * @example 'mm'
+     */
+    minutePlaceholder?: string;
+    /**
+     * Input name.
+     *
+     * @default 'time'
+     */
+    name?: string;
+    /**
+     * `aria-label` for the native time input.
+     *
+     * @example 'Time'
+     */
+    nativeInputAriaLabel?: string;
+    /**
+     * Function called when the user picks a valid time.
+     *
+     * @example (value) => alert('New time is: ', value)
+     */
+    onChange?: (value: Value) => void;
+    /**
+     * Function called when the clock closes.
+     *
+     * @example () => alert('Clock closed')
+     */
+    onClockClose?: () => void;
+    /**
+     * Function called when the clock opens.
+     *
+     * @example () => alert('Clock opened')
+     */
+    onClockOpen?: () => void;
+    /**
+     * Function called when the user focuses an input.
+     *
+     * @example (event) => alert('Focused input: ', event.target.name)
+     */
+    onFocus?: (event: React.FocusEvent<HTMLDivElement>) => void;
+    /**
+     * Function called when the user picks an invalid time.
+     *
+     * @example () => alert('Invalid time')
+     */
+    onInvalidChange?: () => void;
+    /**
+     * Whether to open the clock on input focus.
+     *
+     * **Note**: It's recommended to use `shouldOpenClock` function instead.
+     *
+     * @default true
+     * @example false
+     */
+    openClockOnFocus?: boolean;
+    /**
+     * Element to render the clock in using portal.
+     *
+     * @example document.getElementById('my-div')
+     */
+    portalContainer?: HTMLElement | null;
+    /**
+     * Whether time input should be required.
+     *
+     * @default false
+     * @example true
+     */
+    required?: boolean;
+    /**
+     * `aria-label` for the second input.
+     *
+     * @example 'Second'
+     */
+    secondAriaLabel?: string;
+    /**
+     * `placeholder` for the second input.
+     *
+     * @default '--'
+     * @example 'ss'
+     */
+    secondPlaceholder?: string;
+    /**
+     * Function called before the clock closes. `reason` can be `"buttonClick"`, `"escape"`, `"outsideAction"`, or `"select"`. If it returns `false`, the clock will not close.
+     *
+     * @example ({ reason }) => reason !== 'outsideAction'
+     */
+    shouldCloseClock?: ({ reason }: {
+        reason: CloseReason;
+    }) => boolean;
+    /**
+     * Function called before the clock opens. `reason` can be `"buttonClick"` or `"focus"`. If it returns `false`, the clock will not open.
+     *
+     * @example ({ reason }) => reason !== 'focus'
+     */
+    shouldOpenClock?: ({ reason }: {
+        reason: OpenReason;
+    }) => boolean;
+    /**
+     * Input value. Note that if you pass an array of values, only first value will be fully utilized.
+     *
+     * @example new Date(2017, 0, 1, 22, 15)
+     * @example '22:15:00'
+     * @example [new Date(2017, 0, 1, 22, 15), new Date(2017, 0, 1, 23, 45)]
+     * @example ["22:15:00", "23:45:00"]
+     */
+    value?: LooseValue;
+} & Omit<EventProps, 'onChange' | 'onFocus'>;
+export default function TimePicker(props: TimePickerProps): JSX.Element;
+export {};
Index: node_modules/react-time-picker/dist/esm/TimePicker.js
===================================================================
--- node_modules/react-time-picker/dist/esm/TimePicker.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/TimePicker.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,188 @@
+'use client';
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+var __rest = (this && this.__rest) || function (s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+};
+import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
+import { createElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import { createPortal } from 'react-dom';
+import makeEventProps from 'make-event-props';
+import clsx from 'clsx';
+import Clock from 'react-clock';
+import Fit from 'react-fit';
+import TimeInput from './TimeInput.js';
+var baseClassName = 'react-time-picker';
+var outsideActionEvents = ['mousedown', 'focusin', 'touchstart'];
+var iconProps = {
+    xmlns: 'http://www.w3.org/2000/svg',
+    width: 19,
+    height: 19,
+    viewBox: '0 0 19 19',
+    stroke: 'black',
+    strokeWidth: 2,
+};
+var ClockIcon = (_jsxs("svg", __assign({}, iconProps, { className: "".concat(baseClassName, "__clock-button__icon ").concat(baseClassName, "__button__icon"), fill: "none", children: [_jsx("circle", { cx: "9.5", cy: "9.5", r: "7.5" }), _jsx("path", { d: "M9.5 4.5 v5 h4" })] })));
+var ClearIcon = (_jsxs("svg", __assign({}, iconProps, { className: "".concat(baseClassName, "__clear-button__icon ").concat(baseClassName, "__button__icon"), children: [_jsx("line", { x1: "4", x2: "15", y1: "4", y2: "15" }), _jsx("line", { x1: "15", x2: "4", y1: "4", y2: "15" })] })));
+export default function TimePicker(props) {
+    var amPmAriaLabel = props.amPmAriaLabel, autoFocus = props.autoFocus, className = props.className, clearAriaLabel = props.clearAriaLabel, _a = props.clearIcon, clearIcon = _a === void 0 ? ClearIcon : _a, clockAriaLabel = props.clockAriaLabel, _b = props.clockIcon, clockIcon = _b === void 0 ? ClockIcon : _b, _c = props.closeClock, shouldCloseClockOnSelect = _c === void 0 ? true : _c, dataTestid = props["data-testid"], hourAriaLabel = props.hourAriaLabel, hourPlaceholder = props.hourPlaceholder, disableClock = props.disableClock, disabled = props.disabled, format = props.format, id = props.id, _d = props.isOpen, isOpenProps = _d === void 0 ? null : _d, locale = props.locale, maxTime = props.maxTime, _e = props.maxDetail, maxDetail = _e === void 0 ? 'minute' : _e, minTime = props.minTime, minuteAriaLabel = props.minuteAriaLabel, minutePlaceholder = props.minutePlaceholder, _f = props.name, name = _f === void 0 ? 'time' : _f, nativeInputAriaLabel = props.nativeInputAriaLabel, onClockClose = props.onClockClose, onClockOpen = props.onClockOpen, onChangeProps = props.onChange, onFocusProps = props.onFocus, onInvalidChange = props.onInvalidChange, _g = props.openClockOnFocus, openClockOnFocus = _g === void 0 ? true : _g, required = props.required, value = props.value, secondAriaLabel = props.secondAriaLabel, secondPlaceholder = props.secondPlaceholder, shouldCloseClock = props.shouldCloseClock, shouldOpenClock = props.shouldOpenClock, otherProps = __rest(props, ["amPmAriaLabel", "autoFocus", "className", "clearAriaLabel", "clearIcon", "clockAriaLabel", "clockIcon", "closeClock", 'data-testid', "hourAriaLabel", "hourPlaceholder", "disableClock", "disabled", "format", "id", "isOpen", "locale", "maxTime", "maxDetail", "minTime", "minuteAriaLabel", "minutePlaceholder", "name", "nativeInputAriaLabel", "onClockClose", "onClockOpen", "onChange", "onFocus", "onInvalidChange", "openClockOnFocus", "required", "value", "secondAriaLabel", "secondPlaceholder", "shouldCloseClock", "shouldOpenClock"]);
+    var _h = useState(isOpenProps), isOpen = _h[0], setIsOpen = _h[1];
+    var wrapper = useRef(null);
+    var clockWrapper = useRef(null);
+    useEffect(function () {
+        setIsOpen(isOpenProps);
+    }, [isOpenProps]);
+    function openClock(_a) {
+        var reason = _a.reason;
+        if (shouldOpenClock) {
+            if (!shouldOpenClock({ reason: reason })) {
+                return;
+            }
+        }
+        setIsOpen(true);
+        if (onClockOpen) {
+            onClockOpen();
+        }
+    }
+    var closeClock = useCallback(function (_a) {
+        var reason = _a.reason;
+        if (shouldCloseClock) {
+            if (!shouldCloseClock({ reason: reason })) {
+                return;
+            }
+        }
+        setIsOpen(false);
+        if (onClockClose) {
+            onClockClose();
+        }
+    }, [onClockClose, shouldCloseClock]);
+    function toggleClock() {
+        if (isOpen) {
+            closeClock({ reason: 'buttonClick' });
+        }
+        else {
+            openClock({ reason: 'buttonClick' });
+        }
+    }
+    function onChange(value, shouldCloseClock) {
+        if (shouldCloseClock === void 0) { shouldCloseClock = shouldCloseClockOnSelect; }
+        if (shouldCloseClock) {
+            closeClock({ reason: 'select' });
+        }
+        if (onChangeProps) {
+            onChangeProps(value);
+        }
+    }
+    function onFocus(event) {
+        if (onFocusProps) {
+            onFocusProps(event);
+        }
+        if (
+        // Internet Explorer still fires onFocus on disabled elements
+        disabled ||
+            isOpen ||
+            !openClockOnFocus ||
+            event.target.dataset.select === 'true') {
+            return;
+        }
+        openClock({ reason: 'focus' });
+    }
+    var onKeyDown = useCallback(function (event) {
+        if (event.key === 'Escape') {
+            closeClock({ reason: 'escape' });
+        }
+    }, [closeClock]);
+    function clear() {
+        onChange(null);
+    }
+    function stopPropagation(event) {
+        event.stopPropagation();
+    }
+    var onOutsideAction = useCallback(function (event) {
+        var wrapperEl = wrapper.current;
+        var clockWrapperEl = clockWrapper.current;
+        // Try event.composedPath first to handle clicks inside a Shadow DOM.
+        var target = ('composedPath' in event ? event.composedPath()[0] : event.target);
+        if (target &&
+            wrapperEl &&
+            !wrapperEl.contains(target) &&
+            (!clockWrapperEl || !clockWrapperEl.contains(target))) {
+            closeClock({ reason: 'outsideAction' });
+        }
+    }, [clockWrapper, closeClock, wrapper]);
+    var handleOutsideActionListeners = useCallback(function (shouldListen) {
+        if (shouldListen === void 0) { shouldListen = isOpen; }
+        outsideActionEvents.forEach(function (event) {
+            if (shouldListen) {
+                document.addEventListener(event, onOutsideAction);
+            }
+            else {
+                document.removeEventListener(event, onOutsideAction);
+            }
+        });
+        if (shouldListen) {
+            document.addEventListener('keydown', onKeyDown);
+        }
+        else {
+            document.removeEventListener('keydown', onKeyDown);
+        }
+    }, [isOpen, onOutsideAction, onKeyDown]);
+    useEffect(function () {
+        handleOutsideActionListeners();
+        return function () {
+            handleOutsideActionListeners(false);
+        };
+    }, [handleOutsideActionListeners]);
+    function renderInputs() {
+        var valueFrom = (Array.isArray(value) ? value : [value])[0];
+        var ariaLabelProps = {
+            amPmAriaLabel: amPmAriaLabel,
+            hourAriaLabel: hourAriaLabel,
+            minuteAriaLabel: minuteAriaLabel,
+            nativeInputAriaLabel: nativeInputAriaLabel,
+            secondAriaLabel: secondAriaLabel,
+        };
+        var placeholderProps = {
+            hourPlaceholder: hourPlaceholder,
+            minutePlaceholder: minutePlaceholder,
+            secondPlaceholder: secondPlaceholder,
+        };
+        return (_jsxs("div", { className: "".concat(baseClassName, "__wrapper"), children: [_jsx(TimeInput, __assign({}, ariaLabelProps, placeholderProps, { 
+                    // eslint-disable-next-line jsx-a11y/no-autofocus
+                    autoFocus: autoFocus, className: "".concat(baseClassName, "__inputGroup"), disabled: disabled, format: format, isClockOpen: isOpen, locale: locale, maxDetail: maxDetail, maxTime: maxTime, minTime: minTime, name: name, onChange: onChange, onInvalidChange: onInvalidChange, required: required, value: valueFrom })), clearIcon !== null && (_jsx("button", { "aria-label": clearAriaLabel, className: "".concat(baseClassName, "__clear-button ").concat(baseClassName, "__button"), disabled: disabled, onClick: clear, onFocus: stopPropagation, type: "button", children: typeof clearIcon === 'function' ? createElement(clearIcon) : clearIcon })), clockIcon !== null && !disableClock && (_jsx("button", { "aria-expanded": isOpen || false, "aria-label": clockAriaLabel, className: "".concat(baseClassName, "__clock-button ").concat(baseClassName, "__button"), disabled: disabled, onClick: toggleClock, onFocus: stopPropagation, type: "button", children: typeof clockIcon === 'function' ? createElement(clockIcon) : clockIcon }))] }));
+    }
+    function renderClock() {
+        if (isOpen === null || disableClock) {
+            return null;
+        }
+        var clockProps = props.clockProps, portalContainer = props.portalContainer, value = props.value;
+        var className = "".concat(baseClassName, "__clock");
+        var classNames = clsx(className, "".concat(className, "--").concat(isOpen ? 'open' : 'closed'));
+        var valueFrom = (Array.isArray(value) ? value : [value])[0];
+        var clock = _jsx(Clock, __assign({ locale: locale, value: valueFrom }, clockProps));
+        return portalContainer ? (createPortal(_jsx("div", { ref: clockWrapper, className: classNames, children: clock }), portalContainer)) : (_jsx(Fit, { children: _jsx("div", { ref: function (ref) {
+                    if (ref && !isOpen) {
+                        ref.removeAttribute('style');
+                    }
+                }, className: classNames, children: clock }) }));
+    }
+    var eventProps = useMemo(function () { return makeEventProps(otherProps); }, [otherProps]);
+    return (_jsxs("div", __assign({ className: clsx(baseClassName, "".concat(baseClassName, "--").concat(isOpen ? 'open' : 'closed'), "".concat(baseClassName, "--").concat(disabled ? 'disabled' : 'enabled'), className), "data-testid": dataTestid, id: id }, eventProps, { onFocus: onFocus, ref: wrapper, children: [renderInputs(), renderClock()] })));
+}
Index: node_modules/react-time-picker/dist/esm/index.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import TimePicker from './TimePicker.js';
+export type { TimePickerProps } from './TimePicker.js';
+export { TimePicker };
+export default TimePicker;
Index: node_modules/react-time-picker/dist/esm/index.js
===================================================================
--- node_modules/react-time-picker/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import TimePicker from './TimePicker.js';
+export { TimePicker };
+export default TimePicker;
Index: node_modules/react-time-picker/dist/esm/shared/dateFormatter.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/shared/dateFormatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/shared/dateFormatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export declare function getFormatter(options: Intl.DateTimeFormatOptions): (locale: string | undefined, date: Date) => string;
+export declare function getNumberFormatter(options: Intl.NumberFormatOptions): (locale: string | undefined, number: number) => any;
Index: node_modules/react-time-picker/dist/esm/shared/dateFormatter.js
===================================================================
--- node_modules/react-time-picker/dist/esm/shared/dateFormatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/shared/dateFormatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import getUserLocale from 'get-user-locale';
+var formatterCache = new Map();
+export function getFormatter(options) {
+    return function formatter(locale, date) {
+        var localeWithDefault = locale || getUserLocale();
+        if (!formatterCache.has(localeWithDefault)) {
+            formatterCache.set(localeWithDefault, new Map());
+        }
+        var formatterCacheLocale = formatterCache.get(localeWithDefault);
+        if (!formatterCacheLocale.has(options)) {
+            formatterCacheLocale.set(options, new Intl.DateTimeFormat(localeWithDefault || undefined, options).format);
+        }
+        return formatterCacheLocale.get(options)(date);
+    };
+}
+var numberFormatterCache = new Map();
+export function getNumberFormatter(options) {
+    return function (locale, number) {
+        var localeWithDefault = locale || getUserLocale();
+        if (!numberFormatterCache.has(localeWithDefault)) {
+            numberFormatterCache.set(localeWithDefault, new Map());
+        }
+        var numberFormatterCacheLocale = numberFormatterCache.get(localeWithDefault);
+        if (!numberFormatterCacheLocale.has(options)) {
+            numberFormatterCacheLocale.set(options, new Intl.NumberFormat(localeWithDefault || undefined, options).format);
+        }
+        return numberFormatterCacheLocale.get(options)(number);
+    };
+}
Index: node_modules/react-time-picker/dist/esm/shared/dates.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/shared/dates.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/shared/dates.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import type { AmPmType } from './types.js';
+export declare function convert12to24(hour12: string | number, amPm: AmPmType): number;
+export declare function convert24to12(hour24: string | number): [number, AmPmType];
Index: node_modules/react-time-picker/dist/esm/shared/dates.js
===================================================================
--- node_modules/react-time-picker/dist/esm/shared/dates.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/shared/dates.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+export function convert12to24(hour12, amPm) {
+    var hour24 = Number(hour12);
+    if (amPm === 'am' && hour24 === 12) {
+        hour24 = 0;
+    }
+    else if (amPm === 'pm' && hour24 < 12) {
+        hour24 += 12;
+    }
+    return hour24;
+}
+export function convert24to12(hour24) {
+    var hour12 = Number(hour24) % 12 || 12;
+    return [hour12, Number(hour24) < 12 ? 'am' : 'pm'];
+}
Index: node_modules/react-time-picker/dist/esm/shared/types.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/shared/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/shared/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export type Range<T> = [T, T];
+export type AmPmType = 'am' | 'pm';
+export type ClassName = string | null | undefined | (string | null | undefined)[];
+export type CloseReason = 'buttonClick' | 'escape' | 'outsideAction' | 'select';
+export type Detail = 'hour' | 'minute' | 'second';
+export type LooseValuePiece = string | Date | null;
+export type LooseValue = LooseValuePiece | Range<LooseValuePiece>;
+export type OpenReason = 'buttonClick' | 'focus';
+export type Value = string | null;
Index: node_modules/react-time-picker/dist/esm/shared/types.js
===================================================================
--- node_modules/react-time-picker/dist/esm/shared/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/shared/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/react-time-picker/dist/esm/shared/utils.d.ts
===================================================================
--- node_modules/react-time-picker/dist/esm/shared/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/shared/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export declare function getAmPmLabels(locale: string | undefined): [string, string];
+export declare function safeMin(...args: unknown[]): number;
+export declare function safeMax(...args: unknown[]): number;
Index: node_modules/react-time-picker/dist/esm/shared/utils.js
===================================================================
--- node_modules/react-time-picker/dist/esm/shared/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/dist/esm/shared/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+import { getFormatter } from './dateFormatter.js';
+var nines = ['9', '٩'];
+var ninesRegExp = new RegExp("[".concat(nines.join(''), "]"));
+var amPmFormatter = getFormatter({ hour: 'numeric' });
+export function getAmPmLabels(locale) {
+    var amString = amPmFormatter(locale, new Date(2017, 0, 1, 9));
+    var pmString = amPmFormatter(locale, new Date(2017, 0, 1, 21));
+    var _a = amString.split(ninesRegExp), am1 = _a[0], am2 = _a[1];
+    var _b = pmString.split(ninesRegExp), pm1 = _b[0], pm2 = _b[1];
+    if (pm2 !== undefined) {
+        // If pm2 is undefined, nine was not found in pmString - this locale is not using 12-hour time
+        if (am1 !== pm1) {
+            return [am1, pm1].map(function (el) { return el.trim(); });
+        }
+        if (am2 !== pm2) {
+            return [am2, pm2].map(function (el) { return el.trim(); });
+        }
+    }
+    // Fallback
+    return ['AM', 'PM'];
+}
+function isValidNumber(num) {
+    return num !== null && num !== false && !Number.isNaN(Number(num));
+}
+export function safeMin() {
+    var args = [];
+    for (var _i = 0; _i < arguments.length; _i++) {
+        args[_i] = arguments[_i];
+    }
+    return Math.min.apply(Math, args.filter(isValidNumber));
+}
+export function safeMax() {
+    var args = [];
+    for (var _i = 0; _i < arguments.length; _i++) {
+        args[_i] = arguments[_i];
+    }
+    return Math.max.apply(Math, args.filter(isValidNumber));
+}
Index: node_modules/react-time-picker/package.json
===================================================================
--- node_modules/react-time-picker/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,171 @@
+{
+  "name": "react-time-picker",
+  "version": "7.0.0",
+  "description": "A time picker for your React app.",
+  "type": "module",
+  "sideEffects": [
+    "*.css"
+  ],
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/esm/index.js",
+  "source": "./src/index.ts",
+  "types": "./dist/cjs/index.d.ts",
+  "exports": {
+    ".": {
+      "import": "./dist/esm/index.js",
+      "require": "./dist/cjs/index.js"
+    },
+    "./dist/TimeInput": {
+      "import": "./dist/esm/TimeInput.js",
+      "require": "./dist/cjs/TimeInput.js"
+    },
+    "./dist/TimeInput.js": {
+      "import": "./dist/esm/TimeInput.js",
+      "require": "./dist/cjs/TimeInput.js"
+    },
+    "./dist/TimeInput/Hour12Input": {
+      "import": "./dist/esm/TimeInput/Hour12Input.js",
+      "require": "./dist/cjs/TimeInput/Hour12Input.js"
+    },
+    "./dist/TimeInput/Hour12Input.js": {
+      "import": "./dist/esm/TimeInput/Hour12Input.js",
+      "require": "./dist/cjs/TimeInput/Hour12Input.js"
+    },
+    "./dist/TimeInput/Hour24Input": {
+      "import": "./dist/esm/TimeInput/Hour24Input.js",
+      "require": "./dist/cjs/TimeInput/Hour24Input.js"
+    },
+    "./dist/TimeInput/Hour24Input.js": {
+      "import": "./dist/esm/TimeInput/Hour24Input.js",
+      "require": "./dist/cjs/TimeInput/Hour24Input.js"
+    },
+    "./dist/TimeInput/MinuteInput": {
+      "import": "./dist/esm/TimeInput/MinuteInput.js",
+      "require": "./dist/cjs/TimeInput/MinuteInput.js"
+    },
+    "./dist/TimeInput/MinuteInput.js": {
+      "import": "./dist/esm/TimeInput/MinuteInput.js",
+      "require": "./dist/cjs/TimeInput/MinuteInput.js"
+    },
+    "./dist/TimeInput/SecondInput": {
+      "import": "./dist/esm/TimeInput/SecondInput.js",
+      "require": "./dist/cjs/TimeInput/SecondInput.js"
+    },
+    "./dist/TimeInput/SecondInput.js": {
+      "import": "./dist/esm/TimeInput/SecondInput.js",
+      "require": "./dist/cjs/TimeInput/SecondInput.js"
+    },
+    "./dist/TimeInput/AmPm": {
+      "import": "./dist/esm/TimeInput/AmPm.js",
+      "require": "./dist/cjs/TimeInput/AmPm.js"
+    },
+    "./dist/TimeInput/AmPm.js": {
+      "import": "./dist/esm/TimeInput/AmPm.js",
+      "require": "./dist/cjs/TimeInput/AmPm.js"
+    },
+    "./dist/cjs/TimeInput": "./dist/cjs/TimeInput.js",
+    "./dist/cjs/TimeInput.js": "./dist/cjs/TimeInput.js",
+    "./dist/cjs/TimeInput/Hour12Input": "./dist/cjs/TimeInput/Hour12Input.js",
+    "./dist/cjs/TimeInput/Hour12Input.js": "./dist/cjs/TimeInput/Hour12Input.js",
+    "./dist/cjs/TimeInput/Hour24Input": "./dist/cjs/TimeInput/Hour24Input.js",
+    "./dist/cjs/TimeInput/Hour24Input.js": "./dist/cjs/TimeInput/Hour24Input.js",
+    "./dist/cjs/TimeInput/MinuteInput": "./dist/cjs/TimeInput/MinuteInput.js",
+    "./dist/cjs/TimeInput/MinuteInput.js": "./dist/cjs/TimeInput/MinuteInput.js",
+    "./dist/cjs/TimeInput/SecondInput": "./dist/cjs/TimeInput/SecondInput.js",
+    "./dist/cjs/TimeInput/SecondInput.js": "./dist/cjs/TimeInput/SecondInput.js",
+    "./dist/cjs/TimeInput/AmPm": "./dist/cjs/TimeInput/AmPm.js",
+    "./dist/cjs/TimeInput/AmPm.js": "./dist/cjs/TimeInput/AmPm.js",
+    "./dist/esm/TimeInput": "./dist/esm/TimeInput.js",
+    "./dist/esm/TimeInput.js": "./dist/esm/TimeInput.js",
+    "./dist/esm/TimeInput/Hour12Input": "./dist/esm/TimeInput/Hour12Input.js",
+    "./dist/esm/TimeInput/Hour12Input.js": "./dist/esm/TimeInput/Hour12Input.js",
+    "./dist/esm/TimeInput/Hour24Input": "./dist/esm/TimeInput/Hour24Input.js",
+    "./dist/esm/TimeInput/Hour24Input.js": "./dist/esm/TimeInput/Hour24Input.js",
+    "./dist/esm/TimeInput/MinuteInput": "./dist/esm/TimeInput/MinuteInput.js",
+    "./dist/esm/TimeInput/MinuteInput.js": "./dist/esm/TimeInput/MinuteInput.js",
+    "./dist/esm/TimeInput/SecondInput": "./dist/esm/TimeInput/SecondInput.js",
+    "./dist/esm/TimeInput/SecondInput.js": "./dist/esm/TimeInput/SecondInput.js",
+    "./dist/esm/TimeInput/AmPm": "./dist/esm/TimeInput/AmPm.js",
+    "./dist/esm/TimeInput/AmPm.js": "./dist/esm/TimeInput/AmPm.js",
+    "./dist/TimePicker.css": "./dist/TimePicker.css"
+  },
+  "scripts": {
+    "build": "yarn build-js && yarn copy-styles",
+    "build-js": "yarn build-js-esm && yarn build-js-cjs && yarn build-js-cjs-package",
+    "build-js-esm": "tsc --project tsconfig.build.json --outDir dist/esm",
+    "build-js-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs --moduleResolution node --verbatimModuleSyntax false",
+    "build-js-cjs-package": "echo '{\n  \"type\": \"commonjs\"\n}' > dist/cjs/package.json",
+    "clean": "rimraf dist",
+    "copy-styles": "cpy 'src/**/*.css' dist",
+    "format": "prettier --check . --cache",
+    "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
+    "prepack": "yarn clean && yarn build",
+    "test": "yarn lint && yarn tsc && yarn format && yarn unit",
+    "tsc": "tsc",
+    "unit": "vitest",
+    "watch": "yarn build-js-esm --watch & yarn build-js-cjs --watch & nodemon --watch src --ext css --exec \"yarn copy-styles\""
+  },
+  "keywords": [
+    "react",
+    "time",
+    "time-picker"
+  ],
+  "author": {
+    "name": "Wojciech Maj",
+    "email": "kontakt@wojtekmaj.pl"
+  },
+  "license": "MIT",
+  "dependencies": {
+    "@wojtekmaj/date-utils": "^1.1.3",
+    "clsx": "^2.0.0",
+    "get-user-locale": "^2.2.1",
+    "make-event-props": "^1.6.0",
+    "react-clock": "^5.0.0",
+    "react-fit": "^2.0.0",
+    "update-input-width": "^1.4.0"
+  },
+  "devDependencies": {
+    "@testing-library/dom": "^10.0.0",
+    "@testing-library/jest-dom": "^6.0.0",
+    "@testing-library/react": "^15.0.0",
+    "@testing-library/user-event": "^14.5.0",
+    "@types/node": "*",
+    "@types/react": "*",
+    "cpy-cli": "^5.0.0",
+    "eslint": "^8.56.0",
+    "eslint-config-wojtekmaj": "^1.0.0",
+    "happy-dom": "^12.6.0",
+    "nodemon": "^3.0.0",
+    "prettier": "^3.2.0",
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0",
+    "rimraf": "^3.0.0",
+    "typescript": "^5.4.2",
+    "vitest": "^1.0.2",
+    "vitest-canvas-mock": "^0.2.2"
+  },
+  "peerDependencies": {
+    "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+    "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+    "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+  },
+  "peerDependenciesMeta": {
+    "@types/react": {
+      "optional": true
+    }
+  },
+  "publishConfig": {
+    "access": "public",
+    "provenance": true
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/wojtekmaj/react-time-picker.git",
+    "directory": "packages/react-time-picker"
+  },
+  "funding": "https://github.com/wojtekmaj/react-time-picker?sponsor=1"
+}
Index: node_modules/react-time-picker/src/Divider.tsx
===================================================================
--- node_modules/react-time-picker/src/Divider.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/Divider.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+type DividerProps = {
+  children?: React.ReactNode;
+};
+
+export default function Divider({ children }: DividerProps) {
+  return <span className="react-time-picker__inputGroup__divider">{children}</span>;
+}
Index: node_modules/react-time-picker/src/TimeInput.spec.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,512 @@
+import { beforeEach, describe, expect, it, vi } from 'vitest';
+import { fireEvent, render } from '@testing-library/react';
+import { userEvent } from '@testing-library/user-event';
+
+import TimeInput from './TimeInput.js';
+
+import { muteConsole, restoreConsole } from '../../../test-utils.js';
+
+vi.useFakeTimers();
+
+const hasFullICU = (() => {
+  try {
+    const date = new Date(2018, 0, 1, 21);
+    const formatter = new Intl.DateTimeFormat('de-DE', { hour: 'numeric' });
+    return formatter.format(date).includes('21');
+  } catch (err) {
+    return false;
+  }
+})();
+
+const itIfFullICU = it.skipIf(!hasFullICU);
+
+describe('TimeInput', () => {
+  const defaultProps = {
+    className: 'react-time-picker__inputGroup',
+  };
+
+  let user: ReturnType<typeof userEvent.setup>;
+  beforeEach(() => {
+    user = userEvent.setup({
+      advanceTimers: vi.advanceTimersByTime.bind(vi),
+    });
+  });
+
+  it('renders a native input and custom inputs', () => {
+    const { container } = render(<TimeInput {...defaultProps} />);
+
+    const nativeInput = container.querySelector('input[type="time"]');
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    expect(nativeInput).toBeInTheDocument();
+    expect(customInputs).toHaveLength(2);
+  });
+
+  it('does not render second input when maxDetail is "minute" or less', () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="minute" />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const secondInput = container.querySelector('input[name="second"]');
+    const minuteInput = container.querySelector('input[name="minute"]');
+    const hourInput = container.querySelector('input[name^="hour"]');
+
+    expect(customInputs).toHaveLength(2);
+    expect(secondInput).toBeFalsy();
+    expect(minuteInput).toBeInTheDocument();
+    expect(hourInput).toBeInTheDocument();
+  });
+
+  it('does not render second and minute inputs when maxDetail is "hour" or less', () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="hour" />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const secondInput = container.querySelector('input[name="second"]');
+    const minuteInput = container.querySelector('input[name="minute"]');
+    const hourInput = container.querySelector('input[name^="hour"]');
+
+    expect(customInputs).toHaveLength(1);
+    expect(secondInput).toBeFalsy();
+    expect(minuteInput).toBeFalsy();
+    expect(hourInput).toBeInTheDocument();
+  });
+
+  it('shows a given time in all inputs correctly (12-hour format)', () => {
+    const date = '22:17:03';
+
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="second" value={date} />);
+
+    const nativeInput = container.querySelector('input[type="time"]');
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    expect(nativeInput).toHaveValue(date);
+    expect(customInputs[0]).toHaveValue(10);
+    expect(customInputs[1]).toHaveValue(17);
+    expect(customInputs[2]).toHaveValue(3);
+  });
+
+  itIfFullICU('shows a given time in all inputs correctly (24-hour format)', () => {
+    const date = '22:17:03';
+
+    const { container } = render(
+      <TimeInput {...defaultProps} locale="de-DE" maxDetail="second" value={date} />,
+    );
+
+    const nativeInput = container.querySelector('input[type="time"]');
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    expect(nativeInput).toHaveValue(date);
+    expect(customInputs[0]).toHaveValue(22);
+    expect(customInputs[1]).toHaveValue(17);
+    expect(customInputs[2]).toHaveValue(3);
+  });
+
+  it('shows empty value in all inputs correctly given null', () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="second" value={null} />);
+
+    const nativeInput = container.querySelector('input[type="time"]');
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    expect(nativeInput).toHaveAttribute('value', '');
+    expect(customInputs[0]).toHaveAttribute('value', '');
+    expect(customInputs[1]).toHaveAttribute('value', '');
+    expect(customInputs[2]).toHaveAttribute('value', '');
+  });
+
+  it('clears the value correctly', () => {
+    const date = '22:17:03';
+
+    const { container, rerender } = render(
+      <TimeInput {...defaultProps} maxDetail="second" value={date} />,
+    );
+
+    rerender(<TimeInput {...defaultProps} maxDetail="second" value={null} />);
+
+    const nativeInput = container.querySelector('input[type="time"]');
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    expect(nativeInput).toHaveAttribute('value', '');
+    expect(customInputs[0]).toHaveAttribute('value', '');
+    expect(customInputs[1]).toHaveAttribute('value', '');
+    expect(customInputs[2]).toHaveAttribute('value', '');
+  });
+
+  it('renders custom inputs in a proper order (12-hour format)', () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="second" />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    expect(customInputs[0]).toHaveAttribute('name', 'hour12');
+    expect(customInputs[1]).toHaveAttribute('name', 'minute');
+    expect(customInputs[2]).toHaveAttribute('name', 'second');
+  });
+
+  itIfFullICU('renders custom inputs in a proper order (24-hour format)', () => {
+    const { container } = render(<TimeInput {...defaultProps} locale="de-DE" maxDetail="second" />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    expect(customInputs[0]).toHaveAttribute('name', 'hour24');
+    expect(customInputs[1]).toHaveAttribute('name', 'minute');
+    expect(customInputs[2]).toHaveAttribute('name', 'second');
+  });
+
+  it.todo('renders hour input without leading zero by default');
+
+  it.todo('renders minute input with leading zero by default');
+
+  it.todo('renders second input with leading zero by default');
+
+  describe('renders custom input in a proper order given format', () => {
+    it('renders "h" properly', () => {
+      const { container } = render(<TimeInput {...defaultProps} format="h" />);
+
+      const componentInput = container.querySelector('input[name="hour12"]');
+      const customInputs = container.querySelectorAll('input[data-input]');
+
+      expect(componentInput).toBeInTheDocument();
+      expect(customInputs).toHaveLength(1);
+    });
+
+    it('renders "hh" properly', () => {
+      const { container } = render(<TimeInput {...defaultProps} format="hh" />);
+
+      const componentInput = container.querySelector('input[name="hour12"]');
+      const customInputs = container.querySelectorAll('input[data-input]');
+
+      expect(componentInput).toBeInTheDocument();
+      expect(customInputs).toHaveLength(1);
+    });
+
+    it('throws error for "hhh"', () => {
+      muteConsole();
+
+      const renderComponent = () => render(<TimeInput {...defaultProps} format="hhh" />);
+
+      expect(renderComponent).toThrow('Unsupported token: hhh');
+
+      restoreConsole();
+    });
+
+    it('renders "H" properly', () => {
+      const { container } = render(<TimeInput {...defaultProps} format="H" />);
+
+      const componentInput = container.querySelector('input[name="hour24"]');
+      const customInputs = container.querySelectorAll('input[data-input]');
+
+      expect(componentInput).toBeInTheDocument();
+      expect(customInputs).toHaveLength(1);
+    });
+
+    it('renders "HH" properly', () => {
+      const { container } = render(<TimeInput {...defaultProps} format="HH" />);
+
+      const componentInput = container.querySelector('input[name="hour24"]');
+      const customInputs = container.querySelectorAll('input[data-input]');
+
+      expect(componentInput).toBeInTheDocument();
+      expect(customInputs).toHaveLength(1);
+    });
+
+    it('throws error for "HHH"', () => {
+      muteConsole();
+
+      const renderComponent = () => render(<TimeInput {...defaultProps} format="HHH" />);
+
+      expect(renderComponent).toThrow('Unsupported token: HHH');
+
+      restoreConsole();
+    });
+
+    it('renders "m" properly', () => {
+      const { container } = render(<TimeInput {...defaultProps} format="m" />);
+
+      const componentInput = container.querySelector('input[name="minute"]');
+      const customInputs = container.querySelectorAll('input[data-input]');
+
+      expect(componentInput).toBeInTheDocument();
+      expect(customInputs).toHaveLength(1);
+    });
+
+    it('renders "mm" properly', () => {
+      const { container } = render(<TimeInput {...defaultProps} format="mm" />);
+
+      const componentInput = container.querySelector('input[name="minute"]');
+      const customInputs = container.querySelectorAll('input[data-input]');
+
+      expect(componentInput).toBeInTheDocument();
+      expect(customInputs).toHaveLength(1);
+    });
+
+    it('throws error for "mmm"', () => {
+      muteConsole();
+
+      const renderComponent = () => render(<TimeInput {...defaultProps} format="mmm" />);
+
+      expect(renderComponent).toThrow('Unsupported token: mmm');
+
+      restoreConsole();
+    });
+
+    it('renders "s" properly', () => {
+      const { container } = render(<TimeInput {...defaultProps} format="s" />);
+
+      const componentInput = container.querySelector('input[name="second"]');
+      const customInputs = container.querySelectorAll('input[data-input]');
+
+      expect(componentInput).toBeInTheDocument();
+      expect(customInputs).toHaveLength(1);
+    });
+
+    it('renders "ss" properly', () => {
+      const { container } = render(<TimeInput {...defaultProps} format="ss" />);
+
+      const componentInput = container.querySelector('input[name="second"]');
+      const customInputs = container.querySelectorAll('input[data-input]');
+
+      expect(componentInput).toBeInTheDocument();
+      expect(customInputs).toHaveLength(1);
+    });
+
+    it('throws error for "sss"', () => {
+      muteConsole();
+
+      const renderComponent = () => render(<TimeInput {...defaultProps} format="sss" />);
+
+      expect(renderComponent).toThrow('Unsupported token: sss');
+
+      restoreConsole();
+    });
+
+    it('renders "a" properly', () => {
+      const { container } = render(<TimeInput {...defaultProps} format="a" />);
+
+      const componentSelect = container.querySelector('select[name="amPm"]');
+      const customInputs = container.querySelectorAll('input[data-input]');
+
+      expect(componentSelect).toBeInTheDocument();
+      expect(customInputs).toHaveLength(0);
+    });
+  });
+
+  it('renders proper input separators', () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="second" />);
+
+    const separators = container.querySelectorAll('.react-time-picker__inputGroup__divider');
+
+    expect(separators).toHaveLength(3);
+    expect(separators[0]).toHaveTextContent(':');
+    expect(separators[1]).toHaveTextContent(':');
+    expect(separators[2]).toHaveTextContent(''); // Non-breaking space
+  });
+
+  it('renders proper amount of separators', () => {
+    const { container } = render(<TimeInput {...defaultProps} />);
+
+    const separators = container.querySelectorAll('.react-time-picker__inputGroup__divider');
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const ampm = container.querySelectorAll('select');
+
+    expect(separators).toHaveLength(customInputs.length + ampm.length - 1);
+  });
+
+  it('jumps to the next field when right arrow is pressed', async () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="second" />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0] as HTMLInputElement;
+    const minuteInput = customInputs[1];
+
+    await user.type(hourInput, '{arrowright}');
+
+    expect(minuteInput).toHaveFocus();
+  });
+
+  it('jumps to the next field when separator key is pressed', async () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="second" />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0] as HTMLInputElement;
+    const minuteInput = customInputs[1];
+
+    const separator = container.querySelector(
+      '.react-time-picker__inputGroup__divider',
+    ) as HTMLSpanElement;
+    const separatorKey = separator.textContent as string;
+
+    await user.type(hourInput, separatorKey);
+
+    expect(minuteInput).toHaveFocus();
+  });
+
+  it('does not jump to the next field when right arrow is pressed when the last input is focused', async () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="second" />);
+
+    const select = container.querySelector('select') as HTMLSelectElement;
+
+    await user.type(select, '{arrowright}');
+
+    expect(select).toHaveFocus();
+  });
+
+  it('jumps to the previous field when left arrow is pressed', async () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="second" />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0];
+    const minuteInput = customInputs[1] as HTMLInputElement;
+
+    await user.type(minuteInput, '{arrowleft}');
+
+    expect(hourInput).toHaveFocus();
+  });
+
+  it('does not jump to the previous field when left arrow is pressed when the first input is focused', async () => {
+    const { container } = render(<TimeInput {...defaultProps} maxDetail="second" />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0] as HTMLInputElement;
+
+    await user.type(hourInput, '{arrowleft}');
+
+    expect(hourInput).toHaveFocus();
+  });
+
+  it("jumps to the next field when a value which can't be extended to another valid value is entered", async () => {
+    const { container } = render(<TimeInput {...defaultProps} />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0] as HTMLInputElement;
+    const minuteInput = customInputs[1];
+
+    await user.type(hourInput, '4');
+
+    expect(minuteInput).toHaveFocus();
+  });
+
+  it('jumps to the next field when a value as long as the length of maximum value is entered', async () => {
+    const { container } = render(<TimeInput {...defaultProps} />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0] as HTMLInputElement;
+    const minuteInput = customInputs[1];
+
+    await user.type(hourInput, '03');
+
+    expect(minuteInput).toHaveFocus();
+  });
+
+  it("jumps to the next field when a value which can't be extended to another valid value is entered by typing with multiple keys", async () => {
+    function getActiveElement() {
+      return document.activeElement as HTMLInputElement;
+    }
+
+    function keyDown(key: string, initial = false) {
+      const element = getActiveElement();
+      fireEvent.keyDown(element, { key });
+      fireEvent.keyPress(element, { key });
+      element.value = (initial ? '' : element.value) + key;
+    }
+
+    function keyUp(key: string) {
+      fireEvent.keyUp(getActiveElement(), { key });
+    }
+
+    const date = '22:17:03';
+
+    const { container } = render(<TimeInput {...defaultProps} value={date} />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0] as HTMLInputElement;
+    const minuteInput = customInputs[1];
+
+    hourInput.focus();
+    expect(hourInput).toHaveFocus();
+
+    keyDown('1', true);
+    keyDown('2');
+
+    keyUp('1');
+    expect(hourInput).toHaveFocus();
+
+    keyUp('2');
+    expect(minuteInput).toHaveFocus();
+  });
+
+  it('does not jump the next field when a value which can be extended to another valid value is entered', async () => {
+    const { container } = render(<TimeInput {...defaultProps} />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0] as HTMLInputElement;
+
+    await user.type(hourInput, '1');
+
+    expect(hourInput).toHaveFocus();
+  });
+
+  it('triggers onChange correctly when changed custom input', () => {
+    const onChange = vi.fn();
+    const date = '22:17:03';
+
+    const { container } = render(
+      <TimeInput {...defaultProps} maxDetail="second" onChange={onChange} value={date} />,
+    );
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0] as HTMLInputElement;
+
+    fireEvent.change(hourInput, { target: { value: '8' } });
+
+    expect(onChange).toHaveBeenCalled();
+    expect(onChange).toHaveBeenCalledWith('20:17:03', false);
+  });
+
+  it('triggers onChange correctly when cleared custom inputs', () => {
+    const onChange = vi.fn();
+    const date = '22:17:03';
+
+    const { container } = render(
+      <TimeInput {...defaultProps} maxDetail="second" onChange={onChange} value={date} />,
+    );
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    customInputs.forEach((customInput) => {
+      fireEvent.change(customInput, { target: { value: '' } });
+    });
+
+    expect(onChange).toHaveBeenCalledTimes(1);
+    expect(onChange).toHaveBeenCalledWith(null, false);
+  });
+
+  it('triggers onChange correctly when changed native input', () => {
+    const onChange = vi.fn();
+    const date = '22:17:03';
+
+    const { container } = render(
+      <TimeInput {...defaultProps} maxDetail="second" onChange={onChange} value={date} />,
+    );
+
+    const nativeInput = container.querySelector('input[type="time"]') as HTMLInputElement;
+
+    fireEvent.change(nativeInput, { target: { value: '20:17:03' } });
+
+    expect(onChange).toHaveBeenCalled();
+    expect(onChange).toHaveBeenCalledWith('20:17:03', false);
+  });
+
+  it('triggers onChange correctly when cleared native input', () => {
+    const onChange = vi.fn();
+    const date = '22:17:03';
+
+    const { container } = render(
+      <TimeInput {...defaultProps} maxDetail="second" onChange={onChange} value={date} />,
+    );
+
+    const nativeInput = container.querySelector('input[type="time"]') as HTMLInputElement;
+
+    fireEvent.change(nativeInput, { target: { value: '' } });
+
+    expect(onChange).toHaveBeenCalled();
+    expect(onChange).toHaveBeenCalledWith(null, false);
+  });
+});
Index: node_modules/react-time-picker/src/TimeInput.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,604 @@
+'use client';
+
+import { useEffect, useRef, useState } from 'react';
+import {
+  getHours,
+  getMinutes,
+  getSeconds,
+  getHoursMinutes,
+  getHoursMinutesSeconds,
+} from '@wojtekmaj/date-utils';
+
+import Divider from './Divider.js';
+import Hour12Input from './TimeInput/Hour12Input.js';
+import Hour24Input from './TimeInput/Hour24Input.js';
+import MinuteInput from './TimeInput/MinuteInput.js';
+import SecondInput from './TimeInput/SecondInput.js';
+import NativeInput from './TimeInput/NativeInput.js';
+import AmPm from './TimeInput/AmPm.js';
+
+import { getFormatter, getNumberFormatter } from './shared/dateFormatter.js';
+import { convert12to24, convert24to12 } from './shared/dates.js';
+import { getAmPmLabels } from './shared/utils.js';
+
+import type { AmPmType, Detail, LooseValuePiece, Value } from './shared/types.js';
+
+const getFormatterOptionsCache: Record<string, Intl.DateTimeFormatOptions> = {};
+
+const allViews = ['hour', 'minute', 'second'] as const;
+
+function isInternalInput(element: HTMLElement) {
+  return element.dataset.input === 'true';
+}
+
+function findInput(
+  element: HTMLElement,
+  property: 'previousElementSibling' | 'nextElementSibling',
+) {
+  let nextElement: HTMLElement | null = element;
+  do {
+    nextElement = nextElement[property] as HTMLElement | null;
+  } while (nextElement && !isInternalInput(nextElement));
+  return nextElement;
+}
+
+function focus(element?: HTMLElement | null) {
+  if (element) {
+    element.focus();
+  }
+}
+
+type RenderFunction = (match: string, index: number) => React.ReactNode;
+
+function renderCustomInputs(
+  placeholder: string,
+  elementFunctions: Record<string, RenderFunction>,
+  allowMultipleInstances: boolean,
+) {
+  const usedFunctions: RenderFunction[] = [];
+  const pattern = new RegExp(
+    Object.keys(elementFunctions)
+      .map((el) => `${el}+`)
+      .join('|'),
+    'g',
+  );
+  const matches = placeholder.match(pattern);
+
+  return placeholder.split(pattern).reduce<React.ReactNode[]>((arr, element, index) => {
+    const divider = element && (
+      // eslint-disable-next-line react/no-array-index-key
+      <Divider key={`separator_${index}`}>{element}</Divider>
+    );
+    arr.push(divider);
+    const currentMatch = matches && matches[index];
+
+    if (currentMatch) {
+      const renderFunction =
+        elementFunctions[currentMatch] ||
+        elementFunctions[
+          Object.keys(elementFunctions).find((elementFunction) =>
+            currentMatch.match(elementFunction),
+          ) as string
+        ];
+
+      if (!renderFunction) {
+        return arr;
+      }
+
+      if (!allowMultipleInstances && usedFunctions.includes(renderFunction)) {
+        arr.push(currentMatch);
+      } else {
+        arr.push(renderFunction(currentMatch, index));
+        usedFunctions.push(renderFunction);
+      }
+    }
+
+    return arr;
+  }, []);
+}
+
+const formatNumber = getNumberFormatter({ useGrouping: false });
+
+type TimeInputProps = {
+  amPmAriaLabel?: string;
+  autoFocus?: boolean;
+  className: string;
+  disabled?: boolean;
+  format?: string;
+  hourAriaLabel?: string;
+  hourPlaceholder?: string;
+  isClockOpen?: boolean | null;
+  locale?: string;
+  maxDetail?: Detail;
+  maxTime?: string;
+  minTime?: string;
+  minuteAriaLabel?: string;
+  minutePlaceholder?: string;
+  name?: string;
+  nativeInputAriaLabel?: string;
+  onChange?: (value: Value, shouldCloseClock: boolean) => void;
+  onInvalidChange?: () => void;
+  required?: boolean;
+  secondAriaLabel?: string;
+  secondPlaceholder?: string;
+  value?: LooseValuePiece;
+};
+
+export default function TimeInput({
+  amPmAriaLabel,
+  autoFocus,
+  className,
+  disabled,
+  format,
+  hourAriaLabel,
+  hourPlaceholder,
+  isClockOpen: isClockOpenProps = null,
+  locale,
+  maxDetail = 'minute',
+  maxTime,
+  minTime,
+  minuteAriaLabel,
+  minutePlaceholder,
+  name = 'time',
+  nativeInputAriaLabel,
+  onChange: onChangeProps,
+  onInvalidChange,
+  required,
+  secondAriaLabel,
+  secondPlaceholder,
+  value: valueProps,
+}: TimeInputProps) {
+  const [amPm, setAmPm] = useState<AmPmType | null>(null);
+  const [hour, setHour] = useState<string | null>(null);
+  const [minute, setMinute] = useState<string | null>(null);
+  const [second, setSecond] = useState<string | null>(null);
+  const [value, setValue] = useState<string | Date | null>(null);
+  const amPmInput = useRef<HTMLSelectElement>(null);
+  const hour12Input = useRef<HTMLInputElement>(null);
+  const hour24Input = useRef<HTMLInputElement>(null);
+  const minuteInput = useRef<HTMLInputElement>(null);
+  const secondInput = useRef<HTMLInputElement>(null);
+  const [isClockOpen, setIsClockOpen] = useState(isClockOpenProps);
+  const lastPressedKey = useRef<KeyboardEvent['key'] | undefined>(undefined);
+
+  useEffect(() => {
+    setIsClockOpen(isClockOpenProps);
+  }, [isClockOpenProps]);
+
+  useEffect(() => {
+    const nextValue = valueProps;
+
+    if (nextValue) {
+      setAmPm(convert24to12(getHours(nextValue))[1]);
+      setHour(getHours(nextValue).toString());
+      setMinute(getMinutes(nextValue).toString());
+      setSecond(getSeconds(nextValue).toString());
+      setValue(nextValue);
+    } else {
+      setAmPm(null);
+      setHour(null);
+      setMinute(null);
+      setSecond(null);
+      setValue(null);
+    }
+  }, [
+    valueProps,
+    minTime,
+    maxTime,
+    maxDetail,
+    // Toggling clock visibility resets values
+    isClockOpen,
+  ]);
+
+  const valueType = maxDetail;
+
+  const formatTime = (() => {
+    const level = allViews.indexOf(maxDetail);
+    const formatterOptions =
+      getFormatterOptionsCache[level] ||
+      (() => {
+        const options: Intl.DateTimeFormatOptions = { hour: 'numeric' };
+        if (level >= 1) {
+          options.minute = 'numeric';
+        }
+        if (level >= 2) {
+          options.second = 'numeric';
+        }
+
+        getFormatterOptionsCache[level] = options;
+
+        return options;
+      })();
+
+    return getFormatter(formatterOptions);
+  })();
+
+  /**
+   * Gets current value in a desired format.
+   */
+  function getProcessedValue(value: string) {
+    const processFunction = (() => {
+      switch (valueType) {
+        case 'hour':
+        case 'minute':
+          return getHoursMinutes;
+        case 'second':
+          return getHoursMinutesSeconds;
+        default:
+          throw new Error('Invalid valueType');
+      }
+    })();
+
+    return processFunction(value);
+  }
+
+  const placeholder =
+    format ||
+    (() => {
+      const hour24 = 21;
+      const hour12 = 9;
+      const minute = 13;
+      const second = 14;
+      const date = new Date(2017, 0, 1, hour24, minute, second);
+
+      return formatTime(locale, date)
+        .replace(formatNumber(locale, hour12), 'h')
+        .replace(formatNumber(locale, hour24), 'H')
+        .replace(formatNumber(locale, minute), 'mm')
+        .replace(formatNumber(locale, second), 'ss')
+        .replace(new RegExp(getAmPmLabels(locale).join('|')), 'a');
+    })();
+
+  const divider = (() => {
+    const dividers = placeholder.match(/[^0-9a-z]/i);
+    return dividers ? dividers[0] : null;
+  })();
+
+  function onClick(event: React.MouseEvent<HTMLDivElement> & { target: HTMLDivElement }) {
+    if (event.target === event.currentTarget) {
+      // Wrapper was directly clicked
+      const firstInput = event.target.children[1] as HTMLInputElement;
+      focus(firstInput);
+    }
+  }
+
+  function onKeyDown(
+    event:
+      | (React.KeyboardEvent<HTMLInputElement> & { target: HTMLInputElement })
+      | (React.KeyboardEvent<HTMLSelectElement> & { target: HTMLSelectElement }),
+  ) {
+    lastPressedKey.current = event.key;
+
+    switch (event.key) {
+      case 'ArrowLeft':
+      case 'ArrowRight':
+      case divider: {
+        event.preventDefault();
+
+        const { target: input } = event;
+        const property =
+          event.key === 'ArrowLeft' ? 'previousElementSibling' : 'nextElementSibling';
+        const nextInput = findInput(input, property);
+        focus(nextInput);
+        break;
+      }
+      default:
+    }
+  }
+
+  function onKeyUp(event: React.KeyboardEvent<HTMLInputElement> & { target: HTMLInputElement }) {
+    const { key, target: input } = event;
+
+    const isLastPressedKey = lastPressedKey.current === key;
+
+    if (!isLastPressedKey) {
+      return;
+    }
+
+    const isNumberKey = !isNaN(Number(key));
+
+    if (!isNumberKey) {
+      return;
+    }
+
+    const max = input.getAttribute('max');
+
+    if (!max) {
+      return;
+    }
+
+    const { value } = input;
+
+    /**
+     * Given 1, the smallest possible number the user could type by adding another digit is 10.
+     * 10 would be a valid value given max = 12, so we won't jump to the next input.
+     * However, given 2, smallers possible number would be 20, and thus keeping the focus in
+     * this field doesn't make sense.
+     */
+    if (Number(value) * 10 > Number(max) || value.length >= max.length) {
+      const property = 'nextElementSibling';
+      const nextInput = findInput(input, property);
+      focus(nextInput);
+    }
+  }
+
+  /**
+   * Called after internal onChange. Checks input validity. If all fields are valid,
+   * calls props.onChange.
+   */
+  function onChangeExternal() {
+    if (!onChangeProps) {
+      return;
+    }
+
+    type NonFalsy<T> = T extends false | 0 | '' | null | undefined | 0n ? never : T;
+
+    function filterBoolean<T>(value: T): value is NonFalsy<typeof value> {
+      return Boolean(value);
+    }
+
+    const formElements = [
+      amPmInput.current,
+      hour12Input.current,
+      hour24Input.current,
+      minuteInput.current,
+      secondInput.current,
+    ].filter(filterBoolean);
+
+    const formElementsWithoutSelect = formElements.slice(1);
+
+    const values: Record<string, string | number> & {
+      amPm?: AmPmType;
+    } = {};
+    formElements.forEach((formElement) => {
+      values[formElement.name] =
+        formElement.type === 'number'
+          ? 'valueAsNumber' in formElement
+            ? formElement.valueAsNumber
+            : Number(formElement.value)
+          : formElement.value;
+    });
+
+    const isEveryValueEmpty = formElementsWithoutSelect.every((formElement) => !formElement.value);
+
+    if (isEveryValueEmpty) {
+      onChangeProps(null, false);
+      return;
+    }
+
+    const isEveryValueFilled = formElements.every((formElement) => formElement.value);
+    const isEveryValueValid = formElements.every((formElement) => formElement.validity.valid);
+
+    if (isEveryValueFilled && isEveryValueValid) {
+      const hour = Number(
+        values.hour24 ||
+          (values.hour12 && values.amPm && convert12to24(values.hour12, values.amPm)) ||
+          0,
+      );
+      const minute = Number(values.minute || 0);
+      const second = Number(values.second || 0);
+
+      const padStart = (num: string | number) => `0${num}`.slice(-2);
+
+      const proposedValue = `${padStart(hour)}:${padStart(minute)}:${padStart(second)}`;
+
+      const processedValue = getProcessedValue(proposedValue);
+      onChangeProps(processedValue, false);
+      return;
+    }
+
+    if (!onInvalidChange) {
+      return;
+    }
+
+    onInvalidChange();
+  }
+
+  /**
+   * Called when non-native date input is changed.
+   */
+  function onChange(event: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) {
+    const { name, value } = event.target;
+
+    switch (name) {
+      case 'amPm':
+        setAmPm(value as AmPmType);
+        break;
+      case 'hour12':
+        setHour(value ? convert12to24(value, amPm || 'am').toString() : '');
+        break;
+      case 'hour24':
+        setHour(value);
+        break;
+      case 'minute':
+        setMinute(value);
+        break;
+      case 'second':
+        setSecond(value);
+        break;
+    }
+
+    onChangeExternal();
+  }
+
+  /**
+   * Called when native date input is changed.
+   */
+  function onChangeNative(event: React.ChangeEvent<HTMLInputElement>) {
+    const { value } = event.target;
+
+    if (!onChangeProps) {
+      return;
+    }
+
+    const processedValue = value || null;
+
+    onChangeProps(processedValue, false);
+  }
+
+  const commonInputProps = {
+    className,
+    disabled,
+    maxTime,
+    minTime,
+    onChange,
+    onKeyDown,
+    onKeyUp,
+    // This is only for showing validity when editing
+    required: Boolean(required || isClockOpen),
+  };
+
+  function renderHour12(currentMatch: string, index: number) {
+    if (currentMatch && currentMatch.length > 2) {
+      throw new Error(`Unsupported token: ${currentMatch}`);
+    }
+
+    const showLeadingZeros = currentMatch ? currentMatch.length === 2 : false;
+
+    return (
+      <Hour12Input
+        key="hour12"
+        {...commonInputProps}
+        amPm={amPm}
+        ariaLabel={hourAriaLabel}
+        // eslint-disable-next-line jsx-a11y/no-autofocus
+        autoFocus={index === 0 && autoFocus}
+        inputRef={hour12Input}
+        placeholder={hourPlaceholder}
+        showLeadingZeros={showLeadingZeros}
+        value={hour}
+      />
+    );
+  }
+
+  function renderHour24(currentMatch: string, index: number) {
+    if (currentMatch && currentMatch.length > 2) {
+      throw new Error(`Unsupported token: ${currentMatch}`);
+    }
+
+    const showLeadingZeros = currentMatch ? currentMatch.length === 2 : false;
+
+    return (
+      <Hour24Input
+        key="hour24"
+        {...commonInputProps}
+        ariaLabel={hourAriaLabel}
+        // eslint-disable-next-line jsx-a11y/no-autofocus
+        autoFocus={index === 0 && autoFocus}
+        inputRef={hour24Input}
+        placeholder={hourPlaceholder}
+        showLeadingZeros={showLeadingZeros}
+        value={hour}
+      />
+    );
+  }
+
+  function renderHour(currentMatch: string, index: number) {
+    if (/h/.test(currentMatch)) {
+      return renderHour12(currentMatch, index);
+    }
+
+    return renderHour24(currentMatch, index);
+  }
+
+  function renderMinute(currentMatch: string, index: number) {
+    if (currentMatch && currentMatch.length > 2) {
+      throw new Error(`Unsupported token: ${currentMatch}`);
+    }
+
+    const showLeadingZeros = currentMatch ? currentMatch.length === 2 : false;
+
+    return (
+      <MinuteInput
+        key="minute"
+        {...commonInputProps}
+        ariaLabel={minuteAriaLabel}
+        // eslint-disable-next-line jsx-a11y/no-autofocus
+        autoFocus={index === 0 && autoFocus}
+        hour={hour}
+        inputRef={minuteInput}
+        placeholder={minutePlaceholder}
+        showLeadingZeros={showLeadingZeros}
+        value={minute}
+      />
+    );
+  }
+
+  function renderSecond(currentMatch: string, index: number) {
+    if (currentMatch && currentMatch.length > 2) {
+      throw new Error(`Unsupported token: ${currentMatch}`);
+    }
+
+    const showLeadingZeros = currentMatch ? currentMatch.length === 2 : true;
+
+    return (
+      <SecondInput
+        key="second"
+        {...commonInputProps}
+        ariaLabel={secondAriaLabel}
+        // eslint-disable-next-line jsx-a11y/no-autofocus
+        autoFocus={index === 0 && autoFocus}
+        hour={hour}
+        inputRef={secondInput}
+        minute={minute}
+        placeholder={secondPlaceholder}
+        showLeadingZeros={showLeadingZeros}
+        value={second}
+      />
+    );
+  }
+
+  function renderAmPm(currentMatch: string, index: number) {
+    return (
+      <AmPm
+        key="ampm"
+        {...commonInputProps}
+        ariaLabel={amPmAriaLabel}
+        // eslint-disable-next-line jsx-a11y/no-autofocus
+        autoFocus={index === 0 && autoFocus}
+        inputRef={amPmInput}
+        locale={locale}
+        onChange={onChange}
+        value={amPm}
+      />
+    );
+  }
+
+  function renderCustomInputsInternal() {
+    const elementFunctions = {
+      h: renderHour,
+      H: renderHour,
+      m: renderMinute,
+      s: renderSecond,
+      a: renderAmPm,
+    };
+
+    const allowMultipleInstances = typeof format !== 'undefined';
+    return renderCustomInputs(placeholder, elementFunctions, allowMultipleInstances);
+  }
+
+  function renderNativeInput() {
+    return (
+      <NativeInput
+        key="time"
+        ariaLabel={nativeInputAriaLabel}
+        disabled={disabled}
+        maxTime={maxTime}
+        minTime={minTime}
+        name={name}
+        onChange={onChangeNative}
+        required={required}
+        value={value}
+        valueType={valueType}
+      />
+    );
+  }
+
+  return (
+    // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
+    <div className={className} onClick={onClick}>
+      {renderNativeInput()}
+      {renderCustomInputsInternal()}
+    </div>
+  );
+}
Index: node_modules/react-time-picker/src/TimeInput/AmPm.spec.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/AmPm.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/AmPm.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,125 @@
+import { describe, expect, it } from 'vitest';
+import { render } from '@testing-library/react';
+
+import AmPm from './AmPm.js';
+
+describe('AmPm', () => {
+  const defaultProps = {
+    className: '',
+    onChange: () => {
+      // Intentionally empty
+    },
+  } satisfies React.ComponentProps<typeof AmPm>;
+
+  it('renders a select', () => {
+    const { container } = render(<AmPm {...defaultProps} />);
+
+    const select = container.querySelector('select') as HTMLSelectElement;
+    expect(select).toBeInTheDocument();
+
+    const options = select.querySelectorAll('option');
+    expect(options).toHaveLength(3);
+  });
+
+  it('applies given aria-label properly', () => {
+    const amPmAriaLabel = 'Select AM/PM';
+
+    const { container } = render(<AmPm {...defaultProps} ariaLabel={amPmAriaLabel} />);
+
+    const select = container.querySelector('select');
+
+    expect(select).toHaveAttribute('aria-label', amPmAriaLabel);
+  });
+
+  it('has proper name defined', () => {
+    const { container } = render(<AmPm {...defaultProps} />);
+
+    const select = container.querySelector('select');
+
+    expect(select).toHaveAttribute('name', 'amPm');
+  });
+
+  it('has proper className defined', () => {
+    const className = 'react-time-picker';
+
+    const { container } = render(<AmPm {...defaultProps} className={className} />);
+
+    const select = container.querySelector('select');
+
+    expect(select).toHaveClass('react-time-picker__input');
+    expect(select).toHaveClass('react-time-picker__amPm');
+  });
+
+  it('displays given value properly', () => {
+    const value = 'pm';
+
+    const { container } = render(<AmPm {...defaultProps} value={value} />);
+
+    const select = container.querySelector('select');
+
+    expect(select).toHaveValue(value);
+  });
+
+  it('does not disable select by default', () => {
+    const { container } = render(<AmPm {...defaultProps} />);
+
+    const select = container.querySelector('select');
+
+    expect(select).not.toBeDisabled();
+  });
+
+  it('disables input given disabled flag', () => {
+    const { container } = render(<AmPm {...defaultProps} disabled />);
+
+    const select = container.querySelector('select');
+
+    expect(select).toBeDisabled();
+  });
+
+  it('should not disable anything by default', () => {
+    const { container } = render(<AmPm {...defaultProps} />);
+
+    const select = container.querySelector('select') as HTMLSelectElement;
+    const optionAm = select.querySelector('option[value="am"]');
+    const optionPm = select.querySelector('option[value="pm"]');
+
+    expect(optionAm).not.toBeDisabled();
+    expect(optionPm).not.toBeDisabled();
+  });
+
+  it('should disable "pm" given maxTime before 12:00 pm', () => {
+    const { container } = render(<AmPm {...defaultProps} maxTime="11:59" />);
+
+    const select = container.querySelector('select') as HTMLSelectElement;
+    const optionPm = select.querySelector('option[value="pm"]');
+
+    expect(optionPm).toBeDisabled();
+  });
+
+  it('should not disable "pm" given maxTime after or equal to 12:00 pm', () => {
+    const { container } = render(<AmPm {...defaultProps} maxTime="12:00" />);
+
+    const select = container.querySelector('select') as HTMLSelectElement;
+    const optionPm = select.querySelector('option[value="pm"]');
+
+    expect(optionPm).not.toBeDisabled();
+  });
+
+  it('should disable "am" given minTime after or equal to 12:00 pm', () => {
+    const { container } = render(<AmPm {...defaultProps} minTime="12:00" />);
+
+    const select = container.querySelector('select') as HTMLSelectElement;
+    const optionAm = select.querySelector('option[value="am"]');
+
+    expect(optionAm).toBeDisabled();
+  });
+
+  it('should not disable "am" given minTime before 12:00 pm', () => {
+    const { container } = render(<AmPm {...defaultProps} minTime="11:59" />);
+
+    const select = container.querySelector('select') as HTMLSelectElement;
+    const optionAm = select.querySelector('option[value="pm"]');
+
+    expect(optionAm).not.toBeDisabled();
+  });
+});
Index: node_modules/react-time-picker/src/TimeInput/AmPm.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/AmPm.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/AmPm.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+import clsx from 'clsx';
+import { getHours } from '@wojtekmaj/date-utils';
+
+import { convert24to12 } from '../shared/dates.js';
+import { getAmPmLabels } from '../shared/utils.js';
+
+/* eslint-disable jsx-a11y/no-autofocus */
+
+type AmPmProps = {
+  ariaLabel?: string;
+  autoFocus?: boolean;
+  className: string;
+  disabled?: boolean;
+  inputRef?: React.RefObject<HTMLSelectElement | null>;
+  locale?: string;
+  maxTime?: string;
+  minTime?: string;
+  onChange?: (event: React.ChangeEvent<HTMLSelectElement> & { target: HTMLSelectElement }) => void;
+  onKeyDown?: (
+    event: React.KeyboardEvent<HTMLSelectElement> & { target: HTMLSelectElement },
+  ) => void;
+  required?: boolean;
+  value?: string | null;
+};
+
+export default function AmPm({
+  ariaLabel,
+  autoFocus,
+  className,
+  disabled,
+  inputRef,
+  locale,
+  maxTime,
+  minTime,
+  onChange,
+  onKeyDown,
+  required,
+  value,
+}: AmPmProps) {
+  const amDisabled = minTime ? convert24to12(getHours(minTime))[1] === 'pm' : false;
+  const pmDisabled = maxTime ? convert24to12(getHours(maxTime))[1] === 'am' : false;
+
+  const name = 'amPm';
+  const [amLabel, pmLabel] = getAmPmLabels(locale);
+
+  return (
+    <select
+      aria-label={ariaLabel}
+      autoFocus={autoFocus}
+      className={clsx(`${className}__input`, `${className}__${name}`)}
+      data-input="true"
+      data-select="true"
+      disabled={disabled}
+      name={name}
+      onChange={onChange}
+      onKeyDown={onKeyDown}
+      // Assertion is needed for React 18 compatibility
+      ref={inputRef as React.RefObject<HTMLSelectElement>}
+      required={required}
+      value={value !== null ? value : ''}
+    >
+      {!value && <option value="">--</option>}
+      <option disabled={amDisabled} value="am">
+        {amLabel}
+      </option>
+      <option disabled={pmDisabled} value="pm">
+        {pmLabel}
+      </option>
+    </select>
+  );
+}
Index: node_modules/react-time-picker/src/TimeInput/Hour12Input.spec.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/Hour12Input.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/Hour12Input.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,253 @@
+import { describe, expect, it } from 'vitest';
+import { createRef } from 'react';
+import { render } from '@testing-library/react';
+
+import Hour12Input from './Hour12Input.js';
+
+describe('Hour12Input', () => {
+  const defaultProps = {
+    amPm: 'am',
+    className: '',
+    onChange: () => {
+      // Intentionally empty
+    },
+  } satisfies React.ComponentProps<typeof Hour12Input>;
+
+  it('renders an input', () => {
+    const { container } = render(<Hour12Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeInTheDocument();
+  });
+
+  it('applies given aria-label properly', () => {
+    const hourAriaLabel = 'Hour';
+
+    const { container } = render(<Hour12Input {...defaultProps} ariaLabel={hourAriaLabel} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('aria-label', hourAriaLabel);
+  });
+
+  it('applies given placeholder properly', () => {
+    const hourPlaceholder = 'hh';
+
+    const { container } = render(<Hour12Input {...defaultProps} placeholder={hourPlaceholder} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('placeholder', hourPlaceholder);
+  });
+
+  it('renders "0" given showLeadingZeros if hour is <10', () => {
+    const { container } = render(<Hour12Input {...defaultProps} showLeadingZeros value="9" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).toHaveTextContent('0');
+    expect(input).toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('does not render "0" given showLeadingZeros if hour is >=10', () => {
+    const { container } = render(<Hour12Input {...defaultProps} showLeadingZeros value="10" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).not.toHaveTextContent('0');
+    expect(input).not.toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('does not render "0" if not given showLeadingZeros', () => {
+    const { container } = render(<Hour12Input {...defaultProps} value="9" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).not.toHaveTextContent('0');
+    expect(input).not.toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('has proper name defined', () => {
+    const { container } = render(<Hour12Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('name', 'hour12');
+  });
+
+  it('has proper className defined', () => {
+    const className = 'react-time-picker';
+
+    const { container } = render(<Hour12Input {...defaultProps} className={className} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveClass('react-time-picker__input');
+    expect(input).toHaveClass('react-time-picker__hour');
+  });
+
+  it('displays given value properly (am)', () => {
+    const value = '11';
+
+    const { container } = render(<Hour12Input {...defaultProps} value={value} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveValue(Number(value));
+  });
+
+  it('displays given value properly (pm)', () => {
+    const value = '22';
+
+    const { container } = render(<Hour12Input {...defaultProps} value={value} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveValue(Number(value) - 12);
+  });
+
+  it('does not disable input by default', () => {
+    const { container } = render(<Hour12Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeDisabled();
+  });
+
+  it('disables input given disabled flag', () => {
+    const { container } = render(<Hour12Input {...defaultProps} disabled />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeDisabled();
+  });
+
+  it('is not required input by default', () => {
+    const { container } = render(<Hour12Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeRequired();
+  });
+
+  it('required input given required flag', () => {
+    const { container } = render(<Hour12Input {...defaultProps} required />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeRequired();
+  });
+
+  it('handles inputRef properly', () => {
+    const inputRef = createRef<HTMLInputElement>();
+
+    render(<Hour12Input {...defaultProps} inputRef={inputRef} />);
+
+    expect(inputRef.current).toBeInstanceOf(HTMLInputElement);
+  });
+
+  it('has min = "1" by default', () => {
+    const { container } = render(<Hour12Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '1');
+  });
+
+  it('has min = (hour in minTime) given am minTime when amPm is am', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="am" minTime="5:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '5');
+  });
+
+  it('has min = (hour in minTime) given pm minTime when amPm is pm', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="pm" minTime="17:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '5');
+  });
+
+  it('has min = "1" given am minTime when amPm is pm', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="pm" minTime="5:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '1');
+  });
+
+  it('has min = "1" given pm minTime when amPm is am', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="am" minTime="17:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '1');
+  });
+
+  it('has min = "1" given 12 am minTime when amPm is am', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="am" minTime="00:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '1');
+  });
+
+  it('has min = "1" given 12 pm minTime when amPm is pm', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="pm" minTime="12:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '1');
+  });
+
+  it('has max = "12" by default', () => {
+    const { container } = render(<Hour12Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '12');
+  });
+
+  it('has max = (hour in maxTime) given am maxTime when amPm is am', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="am" maxTime="5:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '5');
+  });
+
+  it('has max = (hour in maxTime) given pm maxTime when amPm is pm', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="pm" maxTime="17:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '5');
+  });
+
+  it('has max = "12" given am maxTime when amPm is pm', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="pm" maxTime="5:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '12');
+  });
+
+  it('has max = "12" given pm maxTime when amPm is am', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="am" maxTime="17:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '12');
+  });
+
+  it('has max = "12" given 12 pm minTime when amPm is pm', () => {
+    const { container } = render(<Hour12Input {...defaultProps} amPm="pm" maxTime="12:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '12');
+  });
+});
Index: node_modules/react-time-picker/src/TimeInput/Hour12Input.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/Hour12Input.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/Hour12Input.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+import { getHours } from '@wojtekmaj/date-utils';
+
+import Input from './Input.js';
+
+import { convert24to12 } from '../shared/dates.js';
+import { safeMin, safeMax } from '../shared/utils.js';
+
+import type { AmPmType } from '../shared/types.js';
+
+type Hour12InputProps = {
+  amPm: AmPmType | null;
+  maxTime?: string;
+  minTime?: string;
+  value?: string | null;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name' | 'nameForClass'>;
+
+export default function Hour12Input({
+  amPm,
+  maxTime,
+  minTime,
+  value,
+  ...otherProps
+}: Hour12InputProps) {
+  const maxHour = safeMin(
+    12,
+    maxTime &&
+      (() => {
+        const [maxHourResult, maxAmPm] = convert24to12(getHours(maxTime));
+
+        if (maxAmPm !== amPm) {
+          // pm is always after am, so we should ignore validation
+          return null;
+        }
+
+        return maxHourResult;
+      })(),
+  );
+
+  const minHour = safeMax(
+    1,
+    minTime &&
+      (() => {
+        const [minHourResult, minAmPm] = convert24to12(getHours(minTime));
+
+        if (
+          // pm is always after am, so we should ignore validation
+          minAmPm !== amPm ||
+          // If minHour is 12 am/pm, user should be able to enter 12, 1, ..., 11.
+          minHourResult === 12
+        ) {
+          return null;
+        }
+
+        return minHourResult;
+      })(),
+  );
+
+  const value12 = value ? convert24to12(value)[0].toString() : '';
+
+  return (
+    <Input
+      max={maxHour}
+      min={minHour}
+      name="hour12"
+      nameForClass="hour"
+      value={value12}
+      {...otherProps}
+    />
+  );
+}
Index: node_modules/react-time-picker/src/TimeInput/Hour24Input.spec.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/Hour24Input.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/Hour24Input.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,188 @@
+import { describe, expect, it } from 'vitest';
+import { createRef } from 'react';
+import { render } from '@testing-library/react';
+
+import Hour24Input from './Hour24Input.js';
+
+describe('Hour24Input', () => {
+  const defaultProps = {
+    className: '',
+    onChange: () => {
+      // Intentionally empty
+    },
+  } satisfies React.ComponentProps<typeof Hour24Input>;
+
+  it('renders an input', () => {
+    const { container } = render(<Hour24Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeInTheDocument();
+  });
+
+  it('applies given aria-label properly', () => {
+    const hourAriaLabel = 'Hour';
+
+    const { container } = render(<Hour24Input {...defaultProps} ariaLabel={hourAriaLabel} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('aria-label', hourAriaLabel);
+  });
+
+  it('applies given placeholder properly', () => {
+    const hourPlaceholder = 'Hour';
+
+    const { container } = render(<Hour24Input {...defaultProps} placeholder={hourPlaceholder} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('placeholder', hourPlaceholder);
+  });
+
+  it('renders "0" given showLeadingZeros if hour is <10', () => {
+    const { container } = render(<Hour24Input {...defaultProps} showLeadingZeros value="9" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).toHaveTextContent('0');
+    expect(input).toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('renders "0" given showLeadingZeros if hour is 0', () => {
+    const { container } = render(<Hour24Input {...defaultProps} showLeadingZeros value="0" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).toHaveTextContent('0');
+    expect(input).toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('does not render "0" given showLeadingZeros if hour is <10 with leading zero already', () => {
+    const { container } = render(<Hour24Input {...defaultProps} showLeadingZeros value="09" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).not.toHaveTextContent('0');
+    expect(input).not.toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('does not render "0" given showLeadingZeros if hour is >=10', () => {
+    const { container } = render(<Hour24Input {...defaultProps} showLeadingZeros value="10" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).not.toHaveTextContent('0');
+    expect(input).not.toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('does not render "0" if not given showLeadingZeros', () => {
+    const { container } = render(<Hour24Input {...defaultProps} value="9" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).not.toHaveTextContent('0');
+    expect(input).not.toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('has proper name defined', () => {
+    const { container } = render(<Hour24Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('name', 'hour24');
+  });
+
+  it('has proper className defined', () => {
+    const className = 'react-time-picker';
+
+    const { container } = render(<Hour24Input {...defaultProps} className={className} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveClass('react-time-picker__input');
+    expect(input).toHaveClass('react-time-picker__hour');
+  });
+
+  it('displays given value properly', () => {
+    const value = '11';
+
+    const { container } = render(<Hour24Input {...defaultProps} value={value} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveValue(Number(value));
+  });
+
+  it('does not disable input by default', () => {
+    const { container } = render(<Hour24Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeDisabled();
+  });
+
+  it('disables input given disabled flag', () => {
+    const { container } = render(<Hour24Input {...defaultProps} disabled />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeDisabled();
+  });
+
+  it('is not required input by default', () => {
+    const { container } = render(<Hour24Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeRequired();
+  });
+
+  it('required input given required flag', () => {
+    const { container } = render(<Hour24Input {...defaultProps} required />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeRequired();
+  });
+
+  it('handles inputRef properly', () => {
+    const inputRef = createRef<HTMLInputElement>();
+
+    render(<Hour24Input {...defaultProps} inputRef={inputRef} />);
+
+    expect(inputRef.current).toBeInstanceOf(HTMLInputElement);
+  });
+
+  it('has min = "0" by default', () => {
+    const { container } = render(<Hour24Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '0');
+  });
+
+  it('has min = (hour in minTime) given minTime', () => {
+    const { container } = render(<Hour24Input {...defaultProps} minTime="17:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '17');
+  });
+
+  it('has max = "23" by default', () => {
+    const { container } = render(<Hour24Input {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '23');
+  });
+
+  it('has max = (hour in maxTime) given maxTime', () => {
+    const { container } = render(<Hour24Input {...defaultProps} maxTime="17:35" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '17');
+  });
+});
Index: node_modules/react-time-picker/src/TimeInput/Hour24Input.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/Hour24Input.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/Hour24Input.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import { getHours } from '@wojtekmaj/date-utils';
+
+import Input from './Input.js';
+
+import { safeMin, safeMax } from '../shared/utils.js';
+
+type Hour24InputProps = {
+  maxTime?: string;
+  minTime?: string;
+  value?: string | null;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name' | 'nameForClass'>;
+
+export default function Hour24Input({ maxTime, minTime, ...otherProps }: Hour24InputProps) {
+  const maxHour = safeMin(23, maxTime && getHours(maxTime));
+  const minHour = safeMax(0, minTime && getHours(minTime));
+
+  return <Input max={maxHour} min={minHour} name="hour24" nameForClass="hour" {...otherProps} />;
+}
Index: node_modules/react-time-picker/src/TimeInput/Input.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/Input.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/Input.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,208 @@
+import { useEffect, useLayoutEffect } from 'react';
+import clsx from 'clsx';
+import updateInputWidth, { getFontShorthand } from 'update-input-width';
+
+/* eslint-disable jsx-a11y/no-autofocus */
+
+type InputProps = {
+  ariaLabel?: string;
+  autoFocus?: boolean;
+  className?: string;
+  disabled?: boolean;
+  inputRef?: React.RefObject<HTMLInputElement | null>;
+  max: number;
+  min: number;
+  name: string;
+  nameForClass?: string;
+  onChange?: (event: React.ChangeEvent<HTMLInputElement> & { target: HTMLInputElement }) => void;
+  onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement> & { target: HTMLInputElement }) => void;
+  onKeyUp?: (event: React.KeyboardEvent<HTMLInputElement> & { target: HTMLInputElement }) => void;
+  placeholder?: string;
+  required?: boolean;
+  showLeadingZeros?: boolean;
+  step?: number;
+  value?: string | null;
+};
+
+const isBrowser = typeof document !== 'undefined';
+
+const useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;
+
+const isIEOrEdgeLegacy = isBrowser && /(MSIE|Trident\/|Edge\/)/.test(navigator.userAgent);
+
+const isFirefox = isBrowser && /Firefox/.test(navigator.userAgent);
+
+function onFocus(event: React.FocusEvent<HTMLInputElement>) {
+  const { target } = event;
+
+  if (isIEOrEdgeLegacy) {
+    requestAnimationFrame(() => target.select());
+  } else {
+    target.select();
+  }
+}
+
+function updateInputWidthOnLoad(element: HTMLInputElement) {
+  if (document.readyState === 'complete') {
+    return;
+  }
+
+  function onLoad() {
+    updateInputWidth(element);
+  }
+
+  window.addEventListener('load', onLoad);
+}
+
+function updateInputWidthOnFontLoad(element: HTMLInputElement) {
+  if (!document.fonts) {
+    return;
+  }
+
+  const font = getFontShorthand(element);
+
+  if (!font) {
+    return;
+  }
+
+  const isFontLoaded = document.fonts.check(font);
+
+  if (isFontLoaded) {
+    return;
+  }
+
+  function onLoadingDone() {
+    updateInputWidth(element);
+  }
+
+  document.fonts.addEventListener('loadingdone', onLoadingDone);
+}
+
+function getSelectionString(input: HTMLInputElement) {
+  /**
+   * window.getSelection().toString() returns empty string in IE11 and Firefox,
+   * so alternatives come first.
+   */
+  if (
+    input &&
+    'selectionStart' in input &&
+    input.selectionStart !== null &&
+    'selectionEnd' in input &&
+    input.selectionEnd !== null
+  ) {
+    return input.value.slice(input.selectionStart, input.selectionEnd);
+  }
+
+  if ('getSelection' in window) {
+    const selection = window.getSelection();
+    return selection && selection.toString();
+  }
+
+  return null;
+}
+
+function makeOnKeyPress(maxLength: number | null) {
+  if (maxLength === null) {
+    return undefined;
+  }
+
+  /**
+   * Prevents keystrokes that would not produce a number or when value after keystroke would
+   * exceed maxLength.
+   */
+  return function onKeyPress(
+    event: React.KeyboardEvent<HTMLInputElement> & { target: HTMLInputElement },
+  ) {
+    if (isFirefox) {
+      // See https://github.com/wojtekmaj/react-time-picker/issues/92
+      return;
+    }
+
+    const { key, target: input } = event;
+    const { value } = input;
+
+    const isNumberKey = key.length === 1 && /\d/.test(key);
+    const selection = getSelectionString(input);
+
+    if (!isNumberKey || !(selection || value.length < maxLength)) {
+      event.preventDefault();
+    }
+  };
+}
+
+export default function Input({
+  ariaLabel,
+  autoFocus,
+  className,
+  disabled,
+  inputRef,
+  max,
+  min,
+  name,
+  nameForClass,
+  onChange,
+  onKeyDown,
+  onKeyUp,
+  placeholder = '--',
+  required,
+  showLeadingZeros,
+  step,
+  value,
+}: InputProps) {
+  useIsomorphicLayoutEffect(() => {
+    if (!inputRef || !inputRef.current) {
+      return;
+    }
+
+    updateInputWidth(inputRef.current);
+    updateInputWidthOnLoad(inputRef.current);
+    updateInputWidthOnFontLoad(inputRef.current);
+  }, [inputRef, value]);
+
+  const hasLeadingZero =
+    showLeadingZeros &&
+    value &&
+    Number(value) < 10 &&
+    (value === '0' || !value.toString().startsWith('0'));
+  const maxLength = max ? max.toString().length : null;
+
+  return (
+    <>
+      {hasLeadingZero ? <span className={`${className}__leadingZero`}>0</span> : null}
+      <input
+        aria-label={ariaLabel}
+        autoComplete="off"
+        autoFocus={autoFocus}
+        className={clsx(
+          `${className}__input`,
+          `${className}__${nameForClass || name}`,
+          hasLeadingZero && `${className}__input--hasLeadingZero`,
+        )}
+        data-input="true"
+        disabled={disabled}
+        inputMode="numeric"
+        max={max}
+        min={min}
+        name={name}
+        onChange={onChange}
+        onFocus={onFocus}
+        onKeyDown={onKeyDown}
+        onKeyPress={makeOnKeyPress(maxLength)}
+        onKeyUp={(event: React.KeyboardEvent<HTMLInputElement> & { target: HTMLInputElement }) => {
+          updateInputWidth(event.target);
+
+          if (onKeyUp) {
+            onKeyUp(event);
+          }
+        }}
+        placeholder={placeholder}
+        // Assertion is needed for React 18 compatibility
+        ref={inputRef as React.RefObject<HTMLInputElement>}
+        required={required}
+        step={step}
+        type="number"
+        value={value !== null ? value : ''}
+      />
+    </>
+  );
+}
Index: node_modules/react-time-picker/src/TimeInput/MinuteInput.spec.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/MinuteInput.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/MinuteInput.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,195 @@
+import { describe, expect, it } from 'vitest';
+import { createRef } from 'react';
+import { render } from '@testing-library/react';
+
+import MinuteInput from './MinuteInput.js';
+
+describe('MinuteInput', () => {
+  const defaultProps = {
+    className: 'className',
+    onChange: () => {
+      // Intentionally empty
+    },
+  } satisfies React.ComponentProps<typeof MinuteInput>;
+
+  it('renders an input', () => {
+    const { container } = render(<MinuteInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeInTheDocument();
+  });
+
+  it('applies given aria-label properly', () => {
+    const minuteAriaLabel = 'Minute';
+
+    const { container } = render(<MinuteInput {...defaultProps} ariaLabel={minuteAriaLabel} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('aria-label', minuteAriaLabel);
+  });
+
+  it('applies given placeholder properly', () => {
+    const minutePlaceholder = 'mm';
+
+    const { container } = render(<MinuteInput {...defaultProps} placeholder={minutePlaceholder} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('placeholder', minutePlaceholder);
+  });
+
+  it('renders "0" if minute is <10', () => {
+    const { container } = render(<MinuteInput {...defaultProps} value="9" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).toHaveTextContent('0');
+    expect(input).toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('renders "0" given showLeadingZeros if minute is 0', () => {
+    const { container } = render(<MinuteInput {...defaultProps} showLeadingZeros value="0" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).toHaveTextContent('0');
+    expect(input).toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('does not render "0" given showLeadingZeros if minute is <10 with leading zero already', () => {
+    const { container } = render(<MinuteInput {...defaultProps} showLeadingZeros value="09" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).not.toHaveTextContent('0');
+    expect(input).not.toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('does not render "0" if minute is >=10', () => {
+    const { container } = render(<MinuteInput {...defaultProps} value="10" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).not.toHaveTextContent('0');
+    expect(input).not.toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('has proper name defined', () => {
+    const { container } = render(<MinuteInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('name', 'minute');
+  });
+
+  it('has proper className defined', () => {
+    const className = 'react-time-picker';
+
+    const { container } = render(<MinuteInput {...defaultProps} className={className} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveClass('react-time-picker__input');
+    expect(input).toHaveClass('react-time-picker__minute');
+  });
+
+  it('displays given value properly', () => {
+    const value = '11';
+
+    const { container } = render(<MinuteInput {...defaultProps} value={value} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveValue(Number(value));
+  });
+
+  it('does not disable input by default', () => {
+    const { container } = render(<MinuteInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeDisabled();
+  });
+
+  it('disables input given disabled flag', () => {
+    const { container } = render(<MinuteInput {...defaultProps} disabled />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeDisabled();
+  });
+
+  it('is not required input by default', () => {
+    const { container } = render(<MinuteInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeRequired();
+  });
+
+  it('required input given required flag', () => {
+    const { container } = render(<MinuteInput {...defaultProps} required />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeRequired();
+  });
+
+  it('handles inputRef properly', () => {
+    const inputRef = createRef<HTMLInputElement>();
+
+    render(<MinuteInput {...defaultProps} inputRef={inputRef} />);
+
+    expect(inputRef.current).toBeInstanceOf(HTMLInputElement);
+  });
+
+  it('has min = "0" by default', () => {
+    const { container } = render(<MinuteInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '0');
+  });
+
+  it('has min = "0" given minTime in a past hour', () => {
+    const { container } = render(<MinuteInput {...defaultProps} hour="22" minTime="21:40" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '0');
+  });
+
+  it('has min = (minute in minTime) given minTime in a current hour', () => {
+    const { container } = render(<MinuteInput {...defaultProps} hour="22" minTime="22:40" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '40');
+  });
+
+  it('has max = "59" by default', () => {
+    const { container } = render(<MinuteInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '59');
+  });
+
+  it('has max = "59" given maxTime in a future hour', () => {
+    const { container } = render(<MinuteInput {...defaultProps} hour="22" maxTime="23:40" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '59');
+  });
+
+  it('has max = (minute in maxHour) given maxTime in a current hour', () => {
+    const { container } = render(<MinuteInput {...defaultProps} hour="22" maxTime="22:40" />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '40');
+  });
+});
Index: node_modules/react-time-picker/src/TimeInput/MinuteInput.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/MinuteInput.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/MinuteInput.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { getHours, getMinutes } from '@wojtekmaj/date-utils';
+
+import Input from './Input.js';
+
+import { safeMin, safeMax } from '../shared/utils.js';
+
+type MinuteInputProps = {
+  hour?: string | null;
+  maxTime?: string;
+  minTime?: string;
+  showLeadingZeros?: boolean;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name'>;
+
+export default function MinuteInput({
+  hour,
+  maxTime,
+  minTime,
+  showLeadingZeros = true,
+  ...otherProps
+}: MinuteInputProps) {
+  function isSameHour(date: string | Date) {
+    return hour === getHours(date).toString();
+  }
+
+  const maxMinute = safeMin(59, maxTime && isSameHour(maxTime) && getMinutes(maxTime));
+  const minMinute = safeMax(0, minTime && isSameHour(minTime) && getMinutes(minTime));
+
+  return (
+    <Input
+      max={maxMinute}
+      min={minMinute}
+      name="minute"
+      showLeadingZeros={showLeadingZeros}
+      {...otherProps}
+    />
+  );
+}
Index: node_modules/react-time-picker/src/TimeInput/NativeInput.spec.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/NativeInput.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/NativeInput.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,180 @@
+import { describe, expect, it } from 'vitest';
+import { render } from '@testing-library/react';
+
+import NativeInput from './NativeInput.js';
+
+describe('NativeInput', () => {
+  const defaultProps = {
+    onChange: () => {
+      // Intentionally empty
+    },
+    valueType: 'second',
+  } satisfies React.ComponentProps<typeof NativeInput>;
+
+  it('renders an input', () => {
+    const { container } = render(<NativeInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeInTheDocument();
+  });
+
+  it('applies given aria-label properly', () => {
+    const nativeInputAriaLabel = 'Date';
+
+    const { container } = render(
+      <NativeInput {...defaultProps} ariaLabel={nativeInputAriaLabel} />,
+    );
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('aria-label', nativeInputAriaLabel);
+  });
+
+  it('has proper name defined', () => {
+    const name = 'testName';
+
+    const { container } = render(<NativeInput {...defaultProps} name={name} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('name', name);
+  });
+
+  it.each`
+    valueType   | parsedValue
+    ${'second'} | ${'22:17:41'}
+    ${'minute'} | ${'22:17'}
+    ${'hour'}   | ${'22:00'}
+  `('displays given value properly if valueType is $valueType', ({ valueType, parsedValue }) => {
+    const value = '22:17:41';
+
+    const { container } = render(
+      <NativeInput {...defaultProps} value={value} valueType={valueType} />,
+    );
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveValue(parsedValue);
+  });
+
+  it('does not disable input by default', () => {
+    const { container } = render(<NativeInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeDisabled();
+  });
+
+  it('disables input given disabled flag', () => {
+    const { container } = render(<NativeInput {...defaultProps} disabled />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeDisabled();
+  });
+
+  it('is not required input by default', () => {
+    const { container } = render(<NativeInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeRequired();
+  });
+
+  it('required input given required flag', () => {
+    const { container } = render(<NativeInput {...defaultProps} required />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeRequired();
+  });
+
+  it('has no min by default', () => {
+    const { container } = render(<NativeInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toHaveAttribute('min');
+  });
+
+  it.each`
+    valueType   | parsedMin
+    ${'second'} | ${'22:00:00'}
+    ${'minute'} | ${'22:00'}
+    ${'hour'}   | ${'22:00'}
+  `(
+    'has proper min for minTime which is a full hour if valueType is $valueType',
+    ({ valueType, parsedMin }) => {
+      const { container } = render(
+        <NativeInput {...defaultProps} minTime="22:00:00" valueType={valueType} />,
+      );
+
+      const input = container.querySelector('input');
+
+      expect(input).toHaveAttribute('min', parsedMin);
+    },
+  );
+
+  it.each`
+    valueType   | parsedMin
+    ${'second'} | ${'22:17:41'}
+    ${'minute'} | ${'22:17'}
+    ${'hour'}   | ${'22:00'}
+  `(
+    'has proper min for minTime which is not a full hour if valueType is $valueType',
+    ({ valueType, parsedMin }) => {
+      const { container } = render(
+        <NativeInput {...defaultProps} minTime="22:17:41" valueType={valueType} />,
+      );
+
+      const input = container.querySelector('input');
+
+      expect(input).toHaveAttribute('min', parsedMin);
+    },
+  );
+
+  it('has no max by default', () => {
+    const { container } = render(<NativeInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toHaveAttribute('max');
+  });
+
+  it.each`
+    valueType   | parsedMax
+    ${'second'} | ${'22:00:00'}
+    ${'minute'} | ${'22:00'}
+    ${'hour'}   | ${'22:00'}
+  `(
+    'has proper max for maxTime which is a full hour if valueType is $valueType',
+    ({ valueType, parsedMax }) => {
+      const { container } = render(
+        <NativeInput {...defaultProps} maxTime="22:00:00" valueType={valueType} />,
+      );
+
+      const input = container.querySelector('input');
+
+      expect(input).toHaveAttribute('max', parsedMax);
+    },
+  );
+
+  it.each`
+    valueType   | parsedMax
+    ${'second'} | ${'22:17:41'}
+    ${'minute'} | ${'22:17'}
+    ${'hour'}   | ${'22:00'}
+  `(
+    'has proper max for maxTime which is not a full hour if valueType is $valueType',
+    ({ valueType, parsedMax }) => {
+      const { container } = render(
+        <NativeInput {...defaultProps} maxTime="22:17:41" valueType={valueType} />,
+      );
+
+      const input = container.querySelector('input');
+
+      expect(input).toHaveAttribute('max', parsedMax);
+    },
+  );
+});
Index: node_modules/react-time-picker/src/TimeInput/NativeInput.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/NativeInput.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/NativeInput.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+import { getHours, getHoursMinutes, getHoursMinutesSeconds } from '@wojtekmaj/date-utils';
+
+type NativeInputProps = {
+  ariaLabel?: string;
+  disabled?: boolean;
+  maxTime?: string;
+  minTime?: string;
+  name?: string;
+  onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
+  required?: boolean;
+  value?: string | Date | null;
+  valueType: 'hour' | 'minute' | 'second';
+};
+
+export default function NativeInput({
+  ariaLabel,
+  disabled,
+  maxTime,
+  minTime,
+  name,
+  onChange,
+  required,
+  value,
+  valueType,
+}: NativeInputProps) {
+  const nativeValueParser = (() => {
+    switch (valueType) {
+      case 'hour':
+        return (receivedValue: string | Date) => `${getHours(receivedValue)}:00`;
+      case 'minute':
+        return getHoursMinutes;
+      case 'second':
+        return getHoursMinutesSeconds;
+      default:
+        throw new Error('Invalid valueType');
+    }
+  })();
+
+  const step = (() => {
+    switch (valueType) {
+      case 'hour':
+        return 3600;
+      case 'minute':
+        return 60;
+      case 'second':
+        return 1;
+      default:
+        throw new Error('Invalid valueType');
+    }
+  })();
+
+  function stopPropagation(event: React.FocusEvent<HTMLInputElement>) {
+    event.stopPropagation();
+  }
+
+  return (
+    <input
+      aria-label={ariaLabel}
+      disabled={disabled}
+      hidden
+      max={maxTime ? nativeValueParser(maxTime) : undefined}
+      min={minTime ? nativeValueParser(minTime) : undefined}
+      name={name}
+      onChange={onChange}
+      onFocus={stopPropagation}
+      required={required}
+      step={step}
+      style={{
+        visibility: 'hidden',
+        position: 'absolute',
+        zIndex: '-999',
+      }}
+      type="time"
+      value={value ? nativeValueParser(value) : ''}
+    />
+  );
+}
Index: node_modules/react-time-picker/src/TimeInput/SecondInput.spec.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/SecondInput.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/SecondInput.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,203 @@
+import { describe, expect, it } from 'vitest';
+import { createRef } from 'react';
+import { render } from '@testing-library/react';
+
+import SecondInput from './SecondInput.js';
+
+describe('SecondInput', () => {
+  const defaultProps = {
+    className: 'className',
+    onChange: () => {
+      // Intentionally empty
+    },
+  } satisfies React.ComponentProps<typeof SecondInput>;
+
+  it('renders an input', () => {
+    const { container } = render(<SecondInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeInTheDocument();
+  });
+
+  it('applies given aria-label properly', () => {
+    const secondAriaLabel = 'Second';
+
+    const { container } = render(<SecondInput {...defaultProps} ariaLabel={secondAriaLabel} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('aria-label', secondAriaLabel);
+  });
+
+  it('applies given placeholder properly', () => {
+    const secondPlaceholder = 'ss';
+
+    const { container } = render(<SecondInput {...defaultProps} placeholder={secondPlaceholder} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('placeholder', secondPlaceholder);
+  });
+
+  it('renders "0" if second is <10', () => {
+    const { container } = render(<SecondInput {...defaultProps} value="9" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).toHaveTextContent('0');
+    expect(input).toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('renders "0" given showLeadingZeros if second is 0', () => {
+    const { container } = render(<SecondInput {...defaultProps} showLeadingZeros value="0" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).toHaveTextContent('0');
+    expect(input).toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('does not render "0" given showLeadingZeros if second is <10 with leading zero already', () => {
+    const { container } = render(<SecondInput {...defaultProps} showLeadingZeros value="09" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).not.toHaveTextContent('0');
+    expect(input).not.toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('does not render "0" if second is >=10', () => {
+    const { container } = render(<SecondInput {...defaultProps} value="10" />);
+
+    const input = container.querySelector('input');
+
+    expect(container).not.toHaveTextContent('0');
+    expect(input).not.toHaveClass(`${defaultProps.className}__input--hasLeadingZero`);
+  });
+
+  it('has proper name defined', () => {
+    const { container } = render(<SecondInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('name', 'second');
+  });
+
+  it('has proper className defined', () => {
+    const className = 'react-time-picker';
+
+    const { container } = render(<SecondInput {...defaultProps} className={className} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveClass('react-time-picker__input');
+    expect(input).toHaveClass('react-time-picker__second');
+  });
+
+  it('displays given value properly', () => {
+    const value = '11';
+
+    const { container } = render(<SecondInput {...defaultProps} value={value} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveValue(Number(value));
+  });
+
+  it('does not disable input by default', () => {
+    const { container } = render(<SecondInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeDisabled();
+  });
+
+  it('disables input given disabled flag', () => {
+    const { container } = render(<SecondInput {...defaultProps} disabled />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeDisabled();
+  });
+
+  it('is not required input by default', () => {
+    const { container } = render(<SecondInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).not.toBeRequired();
+  });
+
+  it('required input given required flag', () => {
+    const { container } = render(<SecondInput {...defaultProps} required />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toBeRequired();
+  });
+
+  it('handles inputRef properly', () => {
+    const inputRef = createRef<HTMLInputElement>();
+
+    render(<SecondInput {...defaultProps} inputRef={inputRef} />);
+
+    expect(inputRef.current).toBeInstanceOf(HTMLInputElement);
+  });
+
+  it('has min = "0" by default', () => {
+    const { container } = render(<SecondInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '0');
+  });
+
+  it('has min = "0" given minDate in a past minute', () => {
+    const { container } = render(
+      <SecondInput {...defaultProps} hour="22" minTime="21:40:15" minute="40" />,
+    );
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '0');
+  });
+
+  it('has min = (second in minTime) given minTime in a current minute', () => {
+    const { container } = render(
+      <SecondInput {...defaultProps} hour="22" minTime="22:40:15" minute="40" />,
+    );
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('min', '15');
+  });
+
+  it('has max = "59" by default', () => {
+    const { container } = render(<SecondInput {...defaultProps} />);
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '59');
+  });
+
+  it('has max = "59" given maxTime in a future minute', () => {
+    const { container } = render(
+      <SecondInput {...defaultProps} hour="22" maxTime="23:40:15" minute="40" />,
+    );
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '59');
+  });
+
+  it('has max = (second in maxHour) given maxTime in a current minute', () => {
+    const { container } = render(
+      <SecondInput {...defaultProps} hour="22" maxTime="22:40:15" minute="40" />,
+    );
+
+    const input = container.querySelector('input');
+
+    expect(input).toHaveAttribute('max', '15');
+  });
+});
Index: node_modules/react-time-picker/src/TimeInput/SecondInput.tsx
===================================================================
--- node_modules/react-time-picker/src/TimeInput/SecondInput.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimeInput/SecondInput.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { getHours, getMinutes, getSeconds } from '@wojtekmaj/date-utils';
+
+import Input from './Input.js';
+
+import { safeMin, safeMax } from '../shared/utils.js';
+
+type SecondInputProps = {
+  hour?: string | null;
+  maxTime?: string;
+  minTime?: string;
+  minute?: string | null;
+  showLeadingZeros?: boolean;
+} & Omit<React.ComponentProps<typeof Input>, 'max' | 'min' | 'name'>;
+
+export default function SecondInput({
+  hour,
+  maxTime,
+  minTime,
+  minute,
+  showLeadingZeros = true,
+  ...otherProps
+}: SecondInputProps) {
+  function isSameMinute(date: string | Date) {
+    return hour === getHours(date).toString() && minute === getMinutes(date).toString();
+  }
+
+  const maxSecond = safeMin(59, maxTime && isSameMinute(maxTime) && getSeconds(maxTime));
+  const minSecond = safeMax(0, minTime && isSameMinute(minTime) && getSeconds(minTime));
+
+  return (
+    <Input
+      max={maxSecond}
+      min={minSecond}
+      name="second"
+      showLeadingZeros={showLeadingZeros}
+      {...otherProps}
+    />
+  );
+}
Index: node_modules/react-time-picker/src/TimePicker.css
===================================================================
--- node_modules/react-time-picker/src/TimePicker.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimePicker.css	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,119 @@
+.react-time-picker {
+  display: inline-flex;
+  position: relative;
+}
+
+.react-time-picker,
+.react-time-picker *,
+.react-time-picker *:before,
+.react-time-picker *:after {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+.react-time-picker--disabled {
+  background-color: #f0f0f0;
+  color: #6d6d6d;
+}
+
+.react-time-picker__wrapper {
+  display: flex;
+  flex-grow: 1;
+  flex-shrink: 0;
+  border: thin solid gray;
+}
+
+.react-time-picker__inputGroup {
+  min-width: calc((4px * 3) + 0.54em * 6 + 0.217em * 2);
+  flex-grow: 1;
+  padding: 0 2px;
+  box-sizing: content-box;
+}
+
+.react-time-picker__inputGroup__divider {
+  padding: 1px 0;
+  white-space: pre;
+}
+
+.react-time-picker__inputGroup__divider,
+.react-time-picker__inputGroup__leadingZero {
+  display: inline-block;
+  font: inherit;
+}
+
+.react-time-picker__inputGroup__input {
+  min-width: 0.54em;
+  height: 100%;
+  position: relative;
+  padding: 0 1px;
+  border: 0;
+  background: none;
+  color: currentColor;
+  font: inherit;
+  box-sizing: content-box;
+  -webkit-appearance: textfield;
+  -moz-appearance: textfield;
+  appearance: textfield;
+}
+
+.react-time-picker__inputGroup__input::-webkit-outer-spin-button,
+.react-time-picker__inputGroup__input::-webkit-inner-spin-button {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  margin: 0;
+}
+
+.react-time-picker__inputGroup__input:invalid {
+  background: rgba(255, 0, 0, 0.1);
+}
+
+.react-time-picker__inputGroup__input--hasLeadingZero {
+  margin-left: -0.54em;
+  padding-left: calc(1px + 0.54em);
+}
+
+.react-time-picker__inputGroup__amPm {
+  font: inherit;
+  -webkit-appearance: menulist;
+  -moz-appearance: menulist;
+  appearance: menulist;
+}
+
+.react-time-picker__button {
+  border: 0;
+  background: transparent;
+  padding: 4px 6px;
+}
+
+.react-time-picker__button:enabled {
+  cursor: pointer;
+}
+
+.react-time-picker__button:enabled:hover .react-time-picker__button__icon,
+.react-time-picker__button:enabled:focus .react-time-picker__button__icon {
+  stroke: #0078d7;
+}
+
+.react-time-picker__button:disabled .react-time-picker__button__icon {
+  stroke: #6d6d6d;
+}
+
+.react-time-picker__button svg {
+  display: inherit;
+}
+
+.react-time-picker__clock {
+  width: 200px;
+  height: 200px;
+  max-width: 100vw;
+  padding: 25px;
+  background-color: white;
+  border: thin solid #a0a096;
+  z-index: 1;
+}
+
+.react-time-picker__clock--closed {
+  display: none;
+}
Index: node_modules/react-time-picker/src/TimePicker.spec.tsx
===================================================================
--- node_modules/react-time-picker/src/TimePicker.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimePicker.spec.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,554 @@
+import { describe, expect, it, vi } from 'vitest';
+import { act, fireEvent, render, waitFor, waitForElementToBeRemoved } from '@testing-library/react';
+import { userEvent } from '@testing-library/user-event';
+
+import TimePicker from './TimePicker.js';
+
+async function waitForElementToBeRemovedOrHidden(callback: () => HTMLElement | null) {
+  const element = callback();
+
+  if (element) {
+    try {
+      await waitFor(() =>
+        expect(element).toHaveAttribute('class', expect.stringContaining('--closed')),
+      );
+    } catch (error) {
+      await waitForElementToBeRemoved(element);
+    }
+  }
+}
+
+describe('TimePicker', () => {
+  it('passes default name to TimeInput', () => {
+    const { container } = render(<TimePicker />);
+
+    const nativeInput = container.querySelector('input[type="time"]');
+
+    expect(nativeInput).toHaveAttribute('name', 'time');
+  });
+
+  it('passes custom name to TimeInput', () => {
+    const name = 'testName';
+
+    const { container } = render(<TimePicker name={name} />);
+
+    const nativeInput = container.querySelector('input[type="time"]');
+
+    expect(nativeInput).toHaveAttribute('name', name);
+  });
+
+  it('passes autoFocus flag to TimeInput', () => {
+    // eslint-disable-next-line jsx-a11y/no-autofocus
+    const { container } = render(<TimePicker autoFocus />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    expect(customInputs[0]).toHaveFocus();
+  });
+
+  it('passes disabled flag to TimeInput', () => {
+    const { container } = render(<TimePicker disabled />);
+
+    const nativeInput = container.querySelector('input[type="time"]');
+
+    expect(nativeInput).toBeDisabled();
+  });
+
+  it('passes format to TimeInput', () => {
+    const { container } = render(<TimePicker format="ss" />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+
+    expect(customInputs).toHaveLength(1);
+    expect(customInputs[0]).toHaveAttribute('name', 'second');
+  });
+
+  it('passes aria-label props to TimeInput', () => {
+    const ariaLabelProps = {
+      amPmAriaLabel: 'Select AM/PM',
+      clearAriaLabel: 'Clear value',
+      clockAriaLabel: 'Toggle clock',
+      hourAriaLabel: 'Hour',
+      minuteAriaLabel: 'Minute',
+      nativeInputAriaLabel: 'Time',
+      secondAriaLabel: 'Second',
+    };
+
+    const { container } = render(<TimePicker {...ariaLabelProps} maxDetail="second" />);
+
+    const clockButton = container.querySelector('button.react-time-picker__clock-button');
+    const clearButton = container.querySelector('button.react-time-picker__clear-button');
+
+    const nativeInput = container.querySelector('input[type="time"]');
+    const amPmSelect = container.querySelector('select[name="amPm"]');
+
+    const hourInput = container.querySelector('input[name="hour12"]');
+    const minuteInput = container.querySelector('input[name="minute"]');
+    const secondInput = container.querySelector('input[name="second"]');
+
+    expect(clockButton).toHaveAttribute('aria-label', ariaLabelProps.clockAriaLabel);
+    expect(clearButton).toHaveAttribute('aria-label', ariaLabelProps.clearAriaLabel);
+
+    expect(nativeInput).toHaveAttribute('aria-label', ariaLabelProps.nativeInputAriaLabel);
+    expect(amPmSelect).toHaveAttribute('aria-label', ariaLabelProps.amPmAriaLabel);
+
+    expect(hourInput).toHaveAttribute('aria-label', ariaLabelProps.hourAriaLabel);
+    expect(minuteInput).toHaveAttribute('aria-label', ariaLabelProps.minuteAriaLabel);
+    expect(secondInput).toHaveAttribute('aria-label', ariaLabelProps.secondAriaLabel);
+  });
+
+  it('passes placeholder props to TimeInput', () => {
+    const placeholderProps = {
+      hourPlaceholder: 'hh',
+      minutePlaceholder: 'mm',
+      secondPlaceholder: 'ss',
+    };
+
+    const { container } = render(<TimePicker {...placeholderProps} maxDetail="second" />);
+
+    const hourInput = container.querySelector('input[name="hour12"]');
+    const minuteInput = container.querySelector('input[name="minute"]');
+    const secondInput = container.querySelector('input[name="second"]');
+
+    expect(hourInput).toHaveAttribute('placeholder', placeholderProps.hourPlaceholder);
+    expect(minuteInput).toHaveAttribute('placeholder', placeholderProps.minutePlaceholder);
+    expect(secondInput).toHaveAttribute('placeholder', placeholderProps.secondPlaceholder);
+  });
+
+  describe('passes value to TimeInput', () => {
+    it('passes single value to TimeInput', () => {
+      const value = new Date(2019, 0, 1);
+
+      const { container } = render(<TimePicker value={value} />);
+
+      const nativeInput = container.querySelector('input[type="time"]');
+
+      expect(nativeInput).toHaveValue('00:00');
+    });
+
+    it('passes the first item of an array of values to TimeInput', () => {
+      const value1 = new Date(2019, 0, 1);
+      const value2 = new Date(2019, 6, 1);
+
+      const { container } = render(<TimePicker value={[value1, value2]} />);
+
+      const nativeInput = container.querySelector('input[type="time"]');
+
+      expect(nativeInput).toHaveValue('00:00');
+    });
+  });
+
+  it('applies className to its wrapper when given a string', () => {
+    const className = 'testClassName';
+
+    const { container } = render(<TimePicker className={className} />);
+
+    const wrapper = container.firstElementChild;
+
+    expect(wrapper).toHaveClass(className);
+  });
+
+  it('applies "--open" className to its wrapper when given isOpen flag', () => {
+    const { container } = render(<TimePicker isOpen />);
+
+    const wrapper = container.firstElementChild;
+
+    expect(wrapper).toHaveClass('react-time-picker--open');
+  });
+
+  it('applies clock className to the clock when given a string', () => {
+    const clockClassName = 'testClassName';
+
+    const { container } = render(<TimePicker clockProps={{ className: clockClassName }} isOpen />);
+
+    const clock = container.querySelector('.react-clock');
+
+    expect(clock).toHaveClass(clockClassName);
+  });
+
+  it('renders TimeInput component', () => {
+    const { container } = render(<TimePicker />);
+
+    const nativeInput = container.querySelector('input[type="time"]');
+
+    expect(nativeInput).toBeInTheDocument();
+  });
+
+  describe('renders clear button properly', () => {
+    it('renders clear button', () => {
+      const { container } = render(<TimePicker />);
+
+      const clearButton = container.querySelector('button.react-time-picker__clear-button');
+
+      expect(clearButton).toBeInTheDocument();
+    });
+
+    it('renders clear icon by default when clearIcon is not given', () => {
+      const { container } = render(<TimePicker />);
+
+      const clearButton = container.querySelector(
+        'button.react-time-picker__clear-button',
+      ) as HTMLButtonElement;
+
+      const clearIcon = clearButton.querySelector('svg');
+
+      expect(clearIcon).toBeInTheDocument();
+    });
+
+    it('renders clear icon when given clearIcon as a string', () => {
+      const { container } = render(<TimePicker clearIcon="❌" />);
+
+      const clearButton = container.querySelector('button.react-time-picker__clear-button');
+
+      expect(clearButton).toHaveTextContent('❌');
+    });
+
+    it('renders clear icon when given clearIcon as a React element', () => {
+      function ClearIcon() {
+        return <>❌</>;
+      }
+
+      const { container } = render(<TimePicker clearIcon={<ClearIcon />} />);
+
+      const clearButton = container.querySelector('button.react-time-picker__clear-button');
+
+      expect(clearButton).toHaveTextContent('❌');
+    });
+
+    it('renders clear icon when given clearIcon as a function', () => {
+      function ClearIcon() {
+        return <>❌</>;
+      }
+
+      const { container } = render(<TimePicker clearIcon={ClearIcon} />);
+
+      const clearButton = container.querySelector('button.react-time-picker__clear-button');
+
+      expect(clearButton).toHaveTextContent('❌');
+    });
+  });
+
+  describe('renders clock button properly', () => {
+    it('renders clock button', () => {
+      const { container } = render(<TimePicker />);
+
+      const clockButton = container.querySelector('button.react-time-picker__clock-button');
+
+      expect(clockButton).toBeInTheDocument();
+    });
+
+    it('renders clock icon by default when clockIcon is not given', () => {
+      const { container } = render(<TimePicker />);
+
+      const clockButton = container.querySelector(
+        'button.react-time-picker__clock-button',
+      ) as HTMLButtonElement;
+
+      const clockIcon = clockButton.querySelector('svg');
+
+      expect(clockIcon).toBeInTheDocument();
+    });
+
+    it('renders clock icon when given clockIcon as a string', () => {
+      const { container } = render(<TimePicker clockIcon="🕒" />);
+
+      const clockButton = container.querySelector('button.react-time-picker__clock-button');
+
+      expect(clockButton).toHaveTextContent('🕒');
+    });
+
+    it('renders clock icon when given clockIcon as a React element', () => {
+      function ClockIcon() {
+        return <>🕒</>;
+      }
+
+      const { container } = render(<TimePicker clockIcon={<ClockIcon />} />);
+
+      const clockButton = container.querySelector('button.react-time-picker__clock-button');
+
+      expect(clockButton).toHaveTextContent('🕒');
+    });
+
+    it('renders clock icon when given clockIcon as a function', () => {
+      function ClockIcon() {
+        return <>🕒</>;
+      }
+
+      const { container } = render(<TimePicker clockIcon={ClockIcon} />);
+
+      const clockButton = container.querySelector('button.react-time-picker__clock-button');
+
+      expect(clockButton).toHaveTextContent('🕒');
+    });
+  });
+
+  it('renders Clock component when given isOpen flag', () => {
+    const { container } = render(<TimePicker isOpen />);
+
+    const clock = container.querySelector('.react-clock');
+
+    expect(clock).toBeInTheDocument();
+  });
+
+  it('does not render Clock component when given disableClock & isOpen flags', () => {
+    const { container } = render(<TimePicker disableClock isOpen />);
+
+    const clock = container.querySelector('.react-clock');
+
+    expect(clock).toBeFalsy();
+  });
+
+  it('opens Clock component when given isOpen flag by changing props', () => {
+    const { container, rerender } = render(<TimePicker />);
+
+    const clock = container.querySelector('.react-clock');
+
+    expect(clock).toBeFalsy();
+
+    rerender(<TimePicker isOpen />);
+
+    const clock2 = container.querySelector('.react-clock');
+
+    expect(clock2).toBeInTheDocument();
+  });
+
+  it('opens Clock component when clicking on a button', () => {
+    const { container } = render(<TimePicker />);
+
+    const clock = container.querySelector('.react-clock');
+    const button = container.querySelector(
+      'button.react-time-picker__clock-button',
+    ) as HTMLButtonElement;
+
+    expect(clock).toBeFalsy();
+
+    fireEvent.click(button);
+
+    const clock2 = container.querySelector('.react-clock');
+
+    expect(clock2).toBeInTheDocument();
+  });
+
+  describe('handles opening Clock component when focusing on an input inside properly', () => {
+    it('opens Clock component when focusing on an input inside by default', () => {
+      const { container } = render(<TimePicker />);
+
+      const clock = container.querySelector('.react-clock');
+      const input = container.querySelector('input[name^="hour"]') as HTMLInputElement;
+
+      expect(clock).toBeFalsy();
+
+      fireEvent.focus(input);
+
+      const clock2 = container.querySelector('.react-clock');
+
+      expect(clock2).toBeInTheDocument();
+    });
+
+    it('opens Clock component when focusing on an input inside given openClockOnFocus = true', () => {
+      const { container } = render(<TimePicker openClockOnFocus />);
+
+      const clock = container.querySelector('.react-clock');
+      const input = container.querySelector('input[name^="hour"]') as HTMLInputElement;
+
+      expect(clock).toBeFalsy();
+
+      fireEvent.focus(input);
+
+      const clock2 = container.querySelector('.react-clock');
+
+      expect(clock2).toBeInTheDocument();
+    });
+
+    it('does not open Clock component when focusing on an input inside given openClockOnFocus = false', () => {
+      const { container } = render(<TimePicker openClockOnFocus={false} />);
+
+      const clock = container.querySelector('.react-clock');
+      const input = container.querySelector('input[name^="hour"]') as HTMLInputElement;
+
+      expect(clock).toBeFalsy();
+
+      fireEvent.focus(input);
+
+      const clock2 = container.querySelector('.react-clock');
+
+      expect(clock2).toBeFalsy();
+    });
+
+    it('does not open Clock when focusing on an input inside given shouldOpenCalendar function returning false', () => {
+      const shouldOpenClock = () => false;
+
+      const { container } = render(<TimePicker shouldOpenClock={shouldOpenClock} />);
+
+      const clock = container.querySelector('.react-clock');
+      const input = container.querySelector('input[name^="hour"]') as HTMLInputElement;
+
+      expect(clock).toBeFalsy();
+
+      fireEvent.focus(input);
+
+      const clock2 = container.querySelector('.react-clock');
+
+      expect(clock2).toBeFalsy();
+    });
+
+    it('does not open Clock component when focusing on a select element', () => {
+      const { container } = render(<TimePicker format="hh:mm:ss a" />);
+
+      const clock = container.querySelector('.react-clock');
+      const select = container.querySelector('select[name="amPm"]') as HTMLSelectElement;
+
+      expect(clock).toBeFalsy();
+
+      fireEvent.focus(select);
+
+      const clock2 = container.querySelector('.react-clock');
+
+      expect(clock2).toBeFalsy();
+    });
+  });
+
+  it('closes Clock component when clicked outside', async () => {
+    const { container } = render(<TimePicker isOpen />);
+
+    userEvent.click(document.body);
+
+    await waitForElementToBeRemovedOrHidden(() =>
+      container.querySelector('.react-time-picker__clock'),
+    );
+  });
+
+  it('does not close Clock clicked outside with shouldCloseClock function returning false', () => {
+    const shouldCloseClock = () => false;
+
+    const { container } = render(<TimePicker isOpen shouldCloseClock={shouldCloseClock} />);
+
+    userEvent.click(document.body);
+
+    const clock = container.querySelector('.react-clock');
+
+    expect(clock).toBeInTheDocument();
+  });
+
+  it('closes Clock component when focused outside', async () => {
+    const { container } = render(<TimePicker isOpen />);
+
+    fireEvent.focusIn(document.body);
+
+    await waitForElementToBeRemovedOrHidden(() =>
+      container.querySelector('.react-time-picker__clock'),
+    );
+  });
+
+  it('closes Clock component when tapped outside', async () => {
+    const { container } = render(<TimePicker isOpen />);
+
+    fireEvent.touchStart(document.body);
+
+    await waitForElementToBeRemovedOrHidden(() =>
+      container.querySelector('.react-time-picker__clock'),
+    );
+  });
+
+  it('does not close Clock component when focused inside', () => {
+    const { container } = render(<TimePicker isOpen />);
+
+    const customInputs = container.querySelectorAll('input[data-input]');
+    const hourInput = customInputs[0] as HTMLInputElement;
+    const minuteInput = customInputs[1] as HTMLInputElement;
+
+    fireEvent.blur(hourInput);
+    fireEvent.focus(minuteInput);
+
+    const clock = container.querySelector('.react-clock');
+
+    expect(clock).toBeInTheDocument();
+  });
+
+  it('does not close Clock when changing value', () => {
+    const { container } = render(<TimePicker isOpen />);
+
+    const hourInput = container.querySelector('input[name="hour12"]') as HTMLInputElement;
+
+    act(() => {
+      fireEvent.change(hourInput, { target: { value: '9' } });
+    });
+
+    const clock = container.querySelector('.react-clock');
+
+    expect(clock).toBeInTheDocument();
+  });
+
+  it('calls onChange callback when changing value', () => {
+    const value = '22:41:28';
+    const onChange = vi.fn();
+
+    const { container } = render(
+      <TimePicker maxDetail="second" onChange={onChange} value={value} />,
+    );
+
+    const hourInput = container.querySelector('input[name="hour12"]') as HTMLInputElement;
+
+    act(() => {
+      fireEvent.change(hourInput, { target: { value: '9' } });
+    });
+
+    expect(onChange).toHaveBeenCalledWith('21:41:28');
+  });
+
+  it('calls onInvalidChange callback when changing value to an invalid one', () => {
+    const value = '22:41:28';
+    const onInvalidChange = vi.fn();
+
+    const { container } = render(
+      <TimePicker maxDetail="second" onInvalidChange={onInvalidChange} value={value} />,
+    );
+
+    const hourInput = container.querySelector('input[name="hour12"]') as HTMLInputElement;
+
+    act(() => {
+      fireEvent.change(hourInput, { target: { value: '99' } });
+    });
+
+    expect(onInvalidChange).toHaveBeenCalled();
+  });
+
+  it('clears the value when clicking on a button', () => {
+    const onChange = vi.fn();
+
+    const { container } = render(<TimePicker onChange={onChange} />);
+
+    const clock = container.querySelector('.react-clock');
+    const button = container.querySelector(
+      'button.react-time-picker__clear-button',
+    ) as HTMLButtonElement;
+
+    expect(clock).toBeFalsy();
+
+    fireEvent.click(button);
+
+    expect(onChange).toHaveBeenCalledWith(null);
+  });
+
+  it('calls onClick callback when clicked a page (sample of mouse events family)', () => {
+    const onClick = vi.fn();
+
+    const { container } = render(<TimePicker onClick={onClick} />);
+
+    const wrapper = container.firstElementChild as HTMLDivElement;
+    fireEvent.click(wrapper);
+
+    expect(onClick).toHaveBeenCalled();
+  });
+
+  it('calls onTouchStart callback when touched a page (sample of touch events family)', () => {
+    const onTouchStart = vi.fn();
+
+    const { container } = render(<TimePicker onTouchStart={onTouchStart} />);
+
+    const wrapper = container.firstElementChild as HTMLDivElement;
+    fireEvent.touchStart(wrapper);
+
+    expect(onTouchStart).toHaveBeenCalled();
+  });
+});
Index: node_modules/react-time-picker/src/TimePicker.tsx
===================================================================
--- node_modules/react-time-picker/src/TimePicker.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/TimePicker.tsx	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,627 @@
+'use client';
+
+import { createElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import { createPortal } from 'react-dom';
+import makeEventProps from 'make-event-props';
+import clsx from 'clsx';
+import Clock from 'react-clock';
+import Fit from 'react-fit';
+
+import TimeInput from './TimeInput.js';
+
+import type {
+  ClassName,
+  CloseReason,
+  Detail,
+  LooseValue,
+  OpenReason,
+  Value,
+} from './shared/types.js';
+
+const baseClassName = 'react-time-picker';
+const outsideActionEvents = ['mousedown', 'focusin', 'touchstart'] as const;
+
+const iconProps = {
+  xmlns: 'http://www.w3.org/2000/svg',
+  width: 19,
+  height: 19,
+  viewBox: '0 0 19 19',
+  stroke: 'black',
+  strokeWidth: 2,
+};
+
+const ClockIcon = (
+  <svg
+    {...iconProps}
+    className={`${baseClassName}__clock-button__icon ${baseClassName}__button__icon`}
+    fill="none"
+  >
+    <circle cx="9.5" cy="9.5" r="7.5" />
+    <path d="M9.5 4.5 v5 h4" />
+  </svg>
+);
+
+const ClearIcon = (
+  <svg
+    {...iconProps}
+    className={`${baseClassName}__clear-button__icon ${baseClassName}__button__icon`}
+  >
+    <line x1="4" x2="15" y1="4" y2="15" />
+    <line x1="15" x2="4" y1="4" y2="15" />
+  </svg>
+);
+
+type ReactNodeLike = React.ReactNode | string | number | boolean | null | undefined;
+
+type Icon = ReactNodeLike | ReactNodeLike[];
+
+type IconOrRenderFunction = Icon | React.ComponentType | React.ReactElement;
+
+type ClockProps = Omit<React.ComponentPropsWithoutRef<typeof Clock>, 'value'>;
+
+type EventProps = ReturnType<typeof makeEventProps>;
+
+export type TimePickerProps = {
+  /**
+   * `aria-label` for the AM/PM select input.
+   *
+   * @example 'Select AM/PM'
+   */
+  amPmAriaLabel?: string;
+  /**
+   * Automatically focuses the input on mount.
+   *
+   * @example true
+   */
+  autoFocus?: boolean;
+  /**
+   * Class name(s) that will be added along with `"react-time-picker"` to the main React-Time-Picker `<div>` element.
+   *
+   * @example 'class1 class2'
+   * @example ['class1', 'class2 class3']
+   */
+  className?: ClassName;
+  /**
+   * `aria-label` for the clear button.
+   *
+   * @example 'Clear value'
+   */
+  clearAriaLabel?: string;
+  /**
+   * Content of the clear button. Setting the value explicitly to `null` will hide the icon.
+   *
+   * @example 'Clear'
+   * @example <ClearIcon />
+   * @example ClearIcon
+   */
+  clearIcon?: IconOrRenderFunction | null;
+  /**
+   * `aria-label` for the clock button.
+   *
+   * @example 'Toggle clock'
+   */
+  clockAriaLabel?: string;
+  /**
+   * Content of the clock button. Setting the value explicitly to `null` will hide the icon.
+   *
+   * @example 'Clock'
+   * @example <ClockIcon />
+   * @example ClockIcon
+   */
+  clockIcon?: IconOrRenderFunction | null;
+  /**
+   * Props to pass to React-Clock component.
+   */
+  clockProps?: ClockProps;
+  /**
+   * Whether to close the clock on value selection.
+   *
+   * **Note**: It's recommended to use `shouldCloseClock` function instead.
+   *
+   * @default true
+   * @example false
+   */
+  closeClock?: boolean;
+  /**
+   * `data-testid` attribute for the main React-Time-Picker `<div>` element.
+   *
+   * @example 'time-picker'
+   */
+  'data-testid'?: string;
+  /**
+   * When set to `true`, will remove the clock and the button toggling its visibility.
+   *
+   * @default false
+   * @example true
+   */
+  disableClock?: boolean;
+  /**
+   * Whether the time picker should be disabled.
+   *
+   * @default false
+   * @example true
+   */
+  disabled?: boolean;
+  /**
+   * Input format based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). Supported values are: `H`, `HH`, `h`, `hh`, `m`, `mm`, `s`, `ss`, `a`.
+   *
+   * **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.
+   *
+   * @example 'h:m:s a'
+   */
+  format?: string;
+  /**
+   * `aria-label` for the hour input.
+   *
+   * @example 'Hour'
+   */
+  hourAriaLabel?: string;
+  /**
+   * `placeholder` for the hour input.
+   *
+   * @default '--'
+   * @example 'hh'
+   */
+  hourPlaceholder?: string;
+  /**
+   * `id` attribute for the main React-TimeRange-Picker `<div>` element.
+   *
+   * @example 'time-picker'
+   */
+  id?: string;
+  /**
+   * Whether the clock should be opened.
+   *
+   * @default false
+   * @example true
+   */
+  isOpen?: boolean;
+  /**
+   * Locale that should be used by the datetime picker and the calendar. Can be any [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag).
+   *
+   * **Note**: When using SSR, setting this prop may help resolving hydration errors caused by locale mismatch between server and client.
+   *
+   * @example 'hu-HU'
+   */
+  locale?: string;
+  /**
+   * How detailed time picking shall be. Can be `"hour"`, `"minute"` or `"second"`.
+   *
+   * @default 'minute'
+   * @example 'second'
+   */
+  maxDetail?: Detail;
+  /**
+   * Maximum date that the user can select.
+   *
+   * @example new Date()
+   * @example '22:15:00'
+   */
+  maxTime?: string;
+  /**
+   * Minimum date that the user can select.
+   *
+   * @example new Date()
+   * @example '22:15:00'
+   */
+  minTime?: string;
+  /**
+   * `aria-label` for the minute input.
+   *
+   * @example 'Minute'
+   */
+  minuteAriaLabel?: string;
+  /**
+   * `placeholder` for the minute input.
+   *
+   * @default '--'
+   * @example 'mm'
+   */
+  minutePlaceholder?: string;
+  /**
+   * Input name.
+   *
+   * @default 'time'
+   */
+  name?: string;
+  /**
+   * `aria-label` for the native time input.
+   *
+   * @example 'Time'
+   */
+  nativeInputAriaLabel?: string;
+  /**
+   * Function called when the user picks a valid time.
+   *
+   * @example (value) => alert('New time is: ', value)
+   */
+  onChange?: (value: Value) => void;
+  /**
+   * Function called when the clock closes.
+   *
+   * @example () => alert('Clock closed')
+   */
+  onClockClose?: () => void;
+  /**
+   * Function called when the clock opens.
+   *
+   * @example () => alert('Clock opened')
+   */
+  onClockOpen?: () => void;
+  /**
+   * Function called when the user focuses an input.
+   *
+   * @example (event) => alert('Focused input: ', event.target.name)
+   */
+  onFocus?: (event: React.FocusEvent<HTMLDivElement>) => void;
+  /**
+   * Function called when the user picks an invalid time.
+   *
+   * @example () => alert('Invalid time')
+   */
+  onInvalidChange?: () => void;
+  /**
+   * Whether to open the clock on input focus.
+   *
+   * **Note**: It's recommended to use `shouldOpenClock` function instead.
+   *
+   * @default true
+   * @example false
+   */
+  openClockOnFocus?: boolean;
+  /**
+   * Element to render the clock in using portal.
+   *
+   * @example document.getElementById('my-div')
+   */
+  portalContainer?: HTMLElement | null;
+  /**
+   * Whether time input should be required.
+   *
+   * @default false
+   * @example true
+   */
+  required?: boolean;
+  /**
+   * `aria-label` for the second input.
+   *
+   * @example 'Second'
+   */
+  secondAriaLabel?: string;
+  /**
+   * `placeholder` for the second input.
+   *
+   * @default '--'
+   * @example 'ss'
+   */
+  secondPlaceholder?: string;
+  /**
+   * Function called before the clock closes. `reason` can be `"buttonClick"`, `"escape"`, `"outsideAction"`, or `"select"`. If it returns `false`, the clock will not close.
+   *
+   * @example ({ reason }) => reason !== 'outsideAction'
+   */
+  shouldCloseClock?: ({ reason }: { reason: CloseReason }) => boolean;
+  /**
+   * Function called before the clock opens. `reason` can be `"buttonClick"` or `"focus"`. If it returns `false`, the clock will not open.
+   *
+   * @example ({ reason }) => reason !== 'focus'
+   */
+  shouldOpenClock?: ({ reason }: { reason: OpenReason }) => boolean;
+  /**
+   * Input value. Note that if you pass an array of values, only first value will be fully utilized.
+   *
+   * @example new Date(2017, 0, 1, 22, 15)
+   * @example '22:15:00'
+   * @example [new Date(2017, 0, 1, 22, 15), new Date(2017, 0, 1, 23, 45)]
+   * @example ["22:15:00", "23:45:00"]
+   */
+  value?: LooseValue;
+} & Omit<EventProps, 'onChange' | 'onFocus'>;
+
+export default function TimePicker(props: TimePickerProps) {
+  const {
+    amPmAriaLabel,
+    autoFocus,
+    className,
+    clearAriaLabel,
+    clearIcon = ClearIcon,
+    clockAriaLabel,
+    clockIcon = ClockIcon,
+    closeClock: shouldCloseClockOnSelect = true,
+    'data-testid': dataTestid,
+    hourAriaLabel,
+    hourPlaceholder,
+    disableClock,
+    disabled,
+    format,
+    id,
+    isOpen: isOpenProps = null,
+    locale,
+    maxTime,
+    maxDetail = 'minute',
+    minTime,
+    minuteAriaLabel,
+    minutePlaceholder,
+    name = 'time',
+    nativeInputAriaLabel,
+    onClockClose,
+    onClockOpen,
+    onChange: onChangeProps,
+    onFocus: onFocusProps,
+    onInvalidChange,
+    openClockOnFocus = true,
+    required,
+    value,
+    secondAriaLabel,
+    secondPlaceholder,
+    shouldCloseClock,
+    shouldOpenClock,
+    ...otherProps
+  } = props;
+
+  const [isOpen, setIsOpen] = useState<boolean | null>(isOpenProps);
+  const wrapper = useRef<HTMLDivElement>(null);
+  const clockWrapper = useRef<HTMLDivElement>(null);
+
+  useEffect(() => {
+    setIsOpen(isOpenProps);
+  }, [isOpenProps]);
+
+  function openClock({ reason }: { reason: OpenReason }) {
+    if (shouldOpenClock) {
+      if (!shouldOpenClock({ reason })) {
+        return;
+      }
+    }
+
+    setIsOpen(true);
+
+    if (onClockOpen) {
+      onClockOpen();
+    }
+  }
+
+  const closeClock = useCallback(
+    ({ reason }: { reason: CloseReason }) => {
+      if (shouldCloseClock) {
+        if (!shouldCloseClock({ reason })) {
+          return;
+        }
+      }
+
+      setIsOpen(false);
+
+      if (onClockClose) {
+        onClockClose();
+      }
+    },
+    [onClockClose, shouldCloseClock],
+  );
+
+  function toggleClock() {
+    if (isOpen) {
+      closeClock({ reason: 'buttonClick' });
+    } else {
+      openClock({ reason: 'buttonClick' });
+    }
+  }
+
+  function onChange(value: Value, shouldCloseClock: boolean = shouldCloseClockOnSelect) {
+    if (shouldCloseClock) {
+      closeClock({ reason: 'select' });
+    }
+
+    if (onChangeProps) {
+      onChangeProps(value);
+    }
+  }
+
+  function onFocus(event: React.FocusEvent<HTMLInputElement>) {
+    if (onFocusProps) {
+      onFocusProps(event);
+    }
+
+    if (
+      // Internet Explorer still fires onFocus on disabled elements
+      disabled ||
+      isOpen ||
+      !openClockOnFocus ||
+      event.target.dataset.select === 'true'
+    ) {
+      return;
+    }
+
+    openClock({ reason: 'focus' });
+  }
+
+  const onKeyDown = useCallback(
+    (event: KeyboardEvent) => {
+      if (event.key === 'Escape') {
+        closeClock({ reason: 'escape' });
+      }
+    },
+    [closeClock],
+  );
+
+  function clear() {
+    onChange(null);
+  }
+
+  function stopPropagation(event: React.FocusEvent) {
+    event.stopPropagation();
+  }
+
+  const onOutsideAction = useCallback(
+    (event: Event) => {
+      const { current: wrapperEl } = wrapper;
+      const { current: clockWrapperEl } = clockWrapper;
+
+      // Try event.composedPath first to handle clicks inside a Shadow DOM.
+      const target = (
+        'composedPath' in event ? event.composedPath()[0] : (event as Event).target
+      ) as HTMLElement;
+
+      if (
+        target &&
+        wrapperEl &&
+        !wrapperEl.contains(target) &&
+        (!clockWrapperEl || !clockWrapperEl.contains(target))
+      ) {
+        closeClock({ reason: 'outsideAction' });
+      }
+    },
+    [clockWrapper, closeClock, wrapper],
+  );
+
+  const handleOutsideActionListeners = useCallback(
+    (shouldListen = isOpen) => {
+      outsideActionEvents.forEach((event) => {
+        if (shouldListen) {
+          document.addEventListener(event, onOutsideAction);
+        } else {
+          document.removeEventListener(event, onOutsideAction);
+        }
+      });
+
+      if (shouldListen) {
+        document.addEventListener('keydown', onKeyDown);
+      } else {
+        document.removeEventListener('keydown', onKeyDown);
+      }
+    },
+    [isOpen, onOutsideAction, onKeyDown],
+  );
+
+  useEffect(() => {
+    handleOutsideActionListeners();
+
+    return () => {
+      handleOutsideActionListeners(false);
+    };
+  }, [handleOutsideActionListeners]);
+
+  function renderInputs() {
+    const [valueFrom] = Array.isArray(value) ? value : [value];
+
+    const ariaLabelProps = {
+      amPmAriaLabel,
+      hourAriaLabel,
+      minuteAriaLabel,
+      nativeInputAriaLabel,
+      secondAriaLabel,
+    };
+
+    const placeholderProps = {
+      hourPlaceholder,
+      minutePlaceholder,
+      secondPlaceholder,
+    };
+
+    return (
+      <div className={`${baseClassName}__wrapper`}>
+        <TimeInput
+          {...ariaLabelProps}
+          {...placeholderProps}
+          // eslint-disable-next-line jsx-a11y/no-autofocus
+          autoFocus={autoFocus}
+          className={`${baseClassName}__inputGroup`}
+          disabled={disabled}
+          format={format}
+          isClockOpen={isOpen}
+          locale={locale}
+          maxDetail={maxDetail}
+          maxTime={maxTime}
+          minTime={minTime}
+          name={name}
+          onChange={onChange}
+          onInvalidChange={onInvalidChange}
+          required={required}
+          value={valueFrom}
+        />
+        {clearIcon !== null && (
+          <button
+            aria-label={clearAriaLabel}
+            className={`${baseClassName}__clear-button ${baseClassName}__button`}
+            disabled={disabled}
+            onClick={clear}
+            onFocus={stopPropagation}
+            type="button"
+          >
+            {typeof clearIcon === 'function' ? createElement(clearIcon) : clearIcon}
+          </button>
+        )}
+        {clockIcon !== null && !disableClock && (
+          <button
+            aria-expanded={isOpen || false}
+            aria-label={clockAriaLabel}
+            className={`${baseClassName}__clock-button ${baseClassName}__button`}
+            disabled={disabled}
+            onClick={toggleClock}
+            onFocus={stopPropagation}
+            type="button"
+          >
+            {typeof clockIcon === 'function' ? createElement(clockIcon) : clockIcon}
+          </button>
+        )}
+      </div>
+    );
+  }
+
+  function renderClock() {
+    if (isOpen === null || disableClock) {
+      return null;
+    }
+
+    const { clockProps, portalContainer, value } = props;
+
+    const className = `${baseClassName}__clock`;
+    const classNames = clsx(className, `${className}--${isOpen ? 'open' : 'closed'}`);
+
+    const [valueFrom] = Array.isArray(value) ? value : [value];
+
+    const clock = <Clock locale={locale} value={valueFrom} {...clockProps} />;
+
+    return portalContainer ? (
+      createPortal(
+        <div ref={clockWrapper} className={classNames}>
+          {clock}
+        </div>,
+        portalContainer,
+      )
+    ) : (
+      <Fit>
+        <div
+          ref={(ref) => {
+            if (ref && !isOpen) {
+              ref.removeAttribute('style');
+            }
+          }}
+          className={classNames}
+        >
+          {clock}
+        </div>
+      </Fit>
+    );
+  }
+
+  const eventProps = useMemo(() => makeEventProps(otherProps), [otherProps]);
+
+  return (
+    <div
+      className={clsx(
+        baseClassName,
+        `${baseClassName}--${isOpen ? 'open' : 'closed'}`,
+        `${baseClassName}--${disabled ? 'disabled' : 'enabled'}`,
+        className,
+      )}
+      data-testid={dataTestid}
+      id={id}
+      {...eventProps}
+      onFocus={onFocus}
+      ref={wrapper}
+    >
+      {renderInputs()}
+      {renderClock()}
+    </div>
+  );
+}
Index: node_modules/react-time-picker/src/index.ts
===================================================================
--- node_modules/react-time-picker/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import TimePicker from './TimePicker.js';
+
+export type { TimePickerProps } from './TimePicker.js';
+
+export { TimePicker };
+
+export default TimePicker;
Index: node_modules/react-time-picker/src/shared/dateFormatter.ts
===================================================================
--- node_modules/react-time-picker/src/shared/dateFormatter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/shared/dateFormatter.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+import getUserLocale from 'get-user-locale';
+
+const formatterCache = new Map();
+
+export function getFormatter(
+  options: Intl.DateTimeFormatOptions,
+): (locale: string | undefined, date: Date) => string {
+  return function formatter(locale: string | undefined, date: Date): string {
+    const localeWithDefault = locale || getUserLocale();
+
+    if (!formatterCache.has(localeWithDefault)) {
+      formatterCache.set(localeWithDefault, new Map());
+    }
+
+    const formatterCacheLocale = formatterCache.get(localeWithDefault);
+
+    if (!formatterCacheLocale.has(options)) {
+      formatterCacheLocale.set(
+        options,
+        new Intl.DateTimeFormat(localeWithDefault || undefined, options).format,
+      );
+    }
+
+    return formatterCacheLocale.get(options)(date);
+  };
+}
+
+const numberFormatterCache = new Map();
+
+export function getNumberFormatter(options: Intl.NumberFormatOptions) {
+  return (locale: string | undefined, number: number) => {
+    const localeWithDefault = locale || getUserLocale();
+
+    if (!numberFormatterCache.has(localeWithDefault)) {
+      numberFormatterCache.set(localeWithDefault, new Map());
+    }
+
+    const numberFormatterCacheLocale = numberFormatterCache.get(localeWithDefault);
+
+    if (!numberFormatterCacheLocale.has(options)) {
+      numberFormatterCacheLocale.set(
+        options,
+        new Intl.NumberFormat(localeWithDefault || undefined, options).format,
+      );
+    }
+
+    return numberFormatterCacheLocale.get(options)(number);
+  };
+}
Index: node_modules/react-time-picker/src/shared/dates.spec.ts
===================================================================
--- node_modules/react-time-picker/src/shared/dates.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/shared/dates.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,66 @@
+import { describe, expect, it } from 'vitest';
+import { convert12to24, convert24to12 } from './dates.js';
+
+describe('convert12to24', () => {
+  it.each`
+    hour12 | amPm    | hour24
+    ${12}  | ${'am'} | ${0}
+    ${1}   | ${'am'} | ${1}
+    ${2}   | ${'am'} | ${2}
+    ${3}   | ${'am'} | ${3}
+    ${4}   | ${'am'} | ${4}
+    ${5}   | ${'am'} | ${5}
+    ${6}   | ${'am'} | ${6}
+    ${7}   | ${'am'} | ${7}
+    ${8}   | ${'am'} | ${8}
+    ${9}   | ${'am'} | ${9}
+    ${10}  | ${'am'} | ${10}
+    ${11}  | ${'am'} | ${11}
+    ${12}  | ${'pm'} | ${12}
+    ${1}   | ${'pm'} | ${13}
+    ${2}   | ${'pm'} | ${14}
+    ${3}   | ${'pm'} | ${15}
+    ${4}   | ${'pm'} | ${16}
+    ${5}   | ${'pm'} | ${17}
+    ${6}   | ${'pm'} | ${18}
+    ${7}   | ${'pm'} | ${19}
+    ${8}   | ${'pm'} | ${20}
+    ${9}   | ${'pm'} | ${21}
+    ${10}  | ${'pm'} | ${22}
+    ${11}  | ${'pm'} | ${23}
+  `('returns $hour24 for $hour12 $amPm', ({ hour12, amPm, hour24 }) => {
+    expect(convert12to24(hour12, amPm)).toBe(hour24);
+  });
+});
+
+describe('convert24to12', () => {
+  it.each`
+    hour24 | hour12 | amPm
+    ${0}   | ${12}  | ${'am'}
+    ${1}   | ${1}   | ${'am'}
+    ${2}   | ${2}   | ${'am'}
+    ${3}   | ${3}   | ${'am'}
+    ${4}   | ${4}   | ${'am'}
+    ${5}   | ${5}   | ${'am'}
+    ${6}   | ${6}   | ${'am'}
+    ${7}   | ${7}   | ${'am'}
+    ${8}   | ${8}   | ${'am'}
+    ${9}   | ${9}   | ${'am'}
+    ${10}  | ${10}  | ${'am'}
+    ${11}  | ${11}  | ${'am'}
+    ${12}  | ${12}  | ${'pm'}
+    ${13}  | ${1}   | ${'pm'}
+    ${14}  | ${2}   | ${'pm'}
+    ${15}  | ${3}   | ${'pm'}
+    ${16}  | ${4}   | ${'pm'}
+    ${17}  | ${5}   | ${'pm'}
+    ${18}  | ${6}   | ${'pm'}
+    ${19}  | ${7}   | ${'pm'}
+    ${20}  | ${8}   | ${'pm'}
+    ${21}  | ${9}   | ${'pm'}
+    ${22}  | ${10}  | ${'pm'}
+    ${23}  | ${11}  | ${'pm'}
+  `('returns $hour12 $amPm for $hour24', ({ hour24, hour12, amPm }) => {
+    expect(convert24to12(hour24)).toEqual([hour12, amPm]);
+  });
+});
Index: node_modules/react-time-picker/src/shared/dates.ts
===================================================================
--- node_modules/react-time-picker/src/shared/dates.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/shared/dates.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import type { AmPmType } from './types.js';
+
+export function convert12to24(hour12: string | number, amPm: AmPmType): number {
+  let hour24 = Number(hour12);
+
+  if (amPm === 'am' && hour24 === 12) {
+    hour24 = 0;
+  } else if (amPm === 'pm' && hour24 < 12) {
+    hour24 += 12;
+  }
+
+  return hour24;
+}
+
+export function convert24to12(hour24: string | number): [number, AmPmType] {
+  const hour12 = Number(hour24) % 12 || 12;
+
+  return [hour12, Number(hour24) < 12 ? 'am' : 'pm'];
+}
Index: node_modules/react-time-picker/src/shared/types.ts
===================================================================
--- node_modules/react-time-picker/src/shared/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/shared/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+export type Range<T> = [T, T];
+
+export type AmPmType = 'am' | 'pm';
+
+export type ClassName = string | null | undefined | (string | null | undefined)[];
+
+export type CloseReason = 'buttonClick' | 'escape' | 'outsideAction' | 'select';
+
+export type Detail = 'hour' | 'minute' | 'second';
+
+export type LooseValuePiece = string | Date | null;
+
+export type LooseValue = LooseValuePiece | Range<LooseValuePiece>;
+
+export type OpenReason = 'buttonClick' | 'focus';
+
+export type Value = string | null;
Index: node_modules/react-time-picker/src/shared/utils.spec.ts
===================================================================
--- node_modules/react-time-picker/src/shared/utils.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/shared/utils.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,78 @@
+import { describe, expect, it } from 'vitest';
+import { safeMin, safeMax } from './utils.js';
+
+describe('safeMin', () => {
+  it('returns Infinity given no values', () => {
+    const result = safeMin();
+
+    expect(result).toBe(Infinity);
+  });
+
+  it('returns the smallest value given valid numbers', () => {
+    const result = safeMin(3, 4, 5);
+
+    expect(result).toBe(3);
+  });
+
+  it('returns the smallest value given valid numbers with zero', () => {
+    const result = safeMin(0, 1, 2);
+
+    expect(result).toBe(0);
+  });
+
+  it('returns the smallest value given valid number and null', () => {
+    const result = safeMin(1, 2, null);
+
+    expect(result).toBe(1);
+  });
+
+  it('returns the smallest value given valid number and undefined', () => {
+    const result = safeMin(1, 2, undefined);
+
+    expect(result).toBe(1);
+  });
+
+  it('returns the smallest value given valid numbers as strings', () => {
+    const result = safeMin('1', '2');
+
+    expect(result).toBe(1);
+  });
+});
+
+describe('safeMax', () => {
+  it('returns -Infinity given no values', () => {
+    const result = safeMax();
+
+    expect(result).toBe(-Infinity);
+  });
+
+  it('returns the largest value given valid numbers', () => {
+    const result = safeMax(3, 4, 5);
+
+    expect(result).toBe(5);
+  });
+
+  it('returns the largest value given valid numbers with zero', () => {
+    const result = safeMax(-2, -1, 0);
+
+    expect(result).toBe(0);
+  });
+
+  it('returns the largest value given valid number and null', () => {
+    const result = safeMax(3, 4, null);
+
+    expect(result).toBe(4);
+  });
+
+  it('returns the largest value given valid number and undefined', () => {
+    const result = safeMax(3, 4, undefined);
+
+    expect(result).toBe(4);
+  });
+
+  it('returns the largest value given valid numbers as strings', () => {
+    const result = safeMax('3', '4');
+
+    expect(result).toBe(4);
+  });
+});
Index: node_modules/react-time-picker/src/shared/utils.ts
===================================================================
--- node_modules/react-time-picker/src/shared/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react-time-picker/src/shared/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { getFormatter } from './dateFormatter.js';
+
+const nines = ['9', '٩'];
+const ninesRegExp = new RegExp(`[${nines.join('')}]`);
+const amPmFormatter = getFormatter({ hour: 'numeric' });
+
+export function getAmPmLabels(locale: string | undefined): [string, string] {
+  const amString = amPmFormatter(locale, new Date(2017, 0, 1, 9));
+  const pmString = amPmFormatter(locale, new Date(2017, 0, 1, 21));
+
+  const [am1, am2] = amString.split(ninesRegExp) as [string, string];
+  const [pm1, pm2] = pmString.split(ninesRegExp) as [string, string];
+
+  if (pm2 !== undefined) {
+    // If pm2 is undefined, nine was not found in pmString - this locale is not using 12-hour time
+    if (am1 !== pm1) {
+      return [am1, pm1].map((el) => el.trim()) as [string, string];
+    }
+
+    if (am2 !== pm2) {
+      return [am2, pm2].map((el) => el.trim()) as [string, string];
+    }
+  }
+
+  // Fallback
+  return ['AM', 'PM'];
+}
+
+function isValidNumber(num: unknown): num is number {
+  return num !== null && num !== false && !Number.isNaN(Number(num));
+}
+
+export function safeMin(...args: unknown[]) {
+  return Math.min(...args.filter(isValidNumber));
+}
+
+export function safeMax(...args: unknown[]) {
+  return Math.max(...args.filter(isValidNumber));
+}
Index: node_modules/react/LICENSE
===================================================================
--- node_modules/react/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/react/README.md
===================================================================
--- node_modules/react/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+# `react`
+
+React is a JavaScript library for creating user interfaces.
+
+The `react` package contains only the functionality necessary to define React components. It is typically used together with a React renderer like `react-dom` for the web, or `react-native` for the native environments.
+
+**Note:** by default, React will be in development mode. The development version includes extra warnings about common mistakes, whereas the production version includes extra performance optimizations and strips all error messages. Don't forget to use the [production build](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build) when deploying your application.
+
+## Usage
+
+```js
+import { useState } from 'react';
+import { createRoot } from 'react-dom/client';
+
+function Counter() {
+  const [count, setCount] = useState(0);
+  return (
+    <>
+      <h1>{count}</h1>
+      <button onClick={() => setCount(count + 1)}>
+        Increment
+      </button>
+    </>
+  );
+}
+
+const root = createRoot(document.getElementById('root'));
+root.render(<Counter />);
+```
+
+## Documentation
+
+See https://react.dev/
+
+## API
+
+See https://react.dev/reference/react
Index: node_modules/react/cjs/react-compiler-runtime.development.js
===================================================================
--- node_modules/react/cjs/react-compiler-runtime.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-compiler-runtime.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+/**
+ * @license React
+ * react-compiler-runtime.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    var ReactSharedInternals =
+      require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
+    exports.c = function (size) {
+      var dispatcher = ReactSharedInternals.H;
+      null === dispatcher &&
+        console.error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      return dispatcher.useMemoCache(size);
+    };
+  })();
Index: node_modules/react/cjs/react-compiler-runtime.production.js
===================================================================
--- node_modules/react/cjs/react-compiler-runtime.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-compiler-runtime.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * @license React
+ * react-compiler-runtime.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var ReactSharedInternals =
+  require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
+exports.c = function (size) {
+  return ReactSharedInternals.H.useMemoCache(size);
+};
Index: node_modules/react/cjs/react-compiler-runtime.profiling.js
===================================================================
--- node_modules/react/cjs/react-compiler-runtime.profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-compiler-runtime.profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * @license React
+ * react-compiler-runtime.profiling.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var ReactSharedInternals =
+  require("react").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
+exports.c = function (size) {
+  return ReactSharedInternals.H.useMemoCache(size);
+};
Index: node_modules/react/cjs/react-jsx-dev-runtime.development.js
===================================================================
--- node_modules/react/cjs/react-jsx-dev-runtime.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-dev-runtime.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,349 @@
+/**
+ * @license React
+ * react-jsx-dev-runtime.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkKeyStringCoercion(value) {
+      try {
+        testStringCoercion(value);
+        var JSCompiler_inline_result = !1;
+      } catch (e) {
+        JSCompiler_inline_result = !0;
+      }
+      if (JSCompiler_inline_result) {
+        JSCompiler_inline_result = console;
+        var JSCompiler_temp_const = JSCompiler_inline_result.error;
+        var JSCompiler_inline_result$jscomp$0 =
+          ("function" === typeof Symbol &&
+            Symbol.toStringTag &&
+            value[Symbol.toStringTag]) ||
+          value.constructor.name ||
+          "Object";
+        JSCompiler_temp_const.call(
+          JSCompiler_inline_result,
+          "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
+          JSCompiler_inline_result$jscomp$0
+        );
+        return testStringCoercion(value);
+      }
+    }
+    function getTaskName(type) {
+      if (type === REACT_FRAGMENT_TYPE) return "<>";
+      if (
+        "object" === typeof type &&
+        null !== type &&
+        type.$$typeof === REACT_LAZY_TYPE
+      )
+        return "<...>";
+      try {
+        var name = getComponentNameFromType(type);
+        return name ? "<" + name + ">" : "<...>";
+      } catch (x) {
+        return "<...>";
+      }
+    }
+    function getOwner() {
+      var dispatcher = ReactSharedInternals.A;
+      return null === dispatcher ? null : dispatcher.getOwner();
+    }
+    function UnknownOwner() {
+      return Error("react-stack-top-frame");
+    }
+    function hasValidKey(config) {
+      if (hasOwnProperty.call(config, "key")) {
+        var getter = Object.getOwnPropertyDescriptor(config, "key").get;
+        if (getter && getter.isReactWarning) return !1;
+      }
+      return void 0 !== config.key;
+    }
+    function defineKeyPropWarningGetter(props, displayName) {
+      function warnAboutAccessingKey() {
+        specialPropKeyWarningShown ||
+          ((specialPropKeyWarningShown = !0),
+          console.error(
+            "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
+            displayName
+          ));
+      }
+      warnAboutAccessingKey.isReactWarning = !0;
+      Object.defineProperty(props, "key", {
+        get: warnAboutAccessingKey,
+        configurable: !0
+      });
+    }
+    function elementRefGetterWithDeprecationWarning() {
+      var componentName = getComponentNameFromType(this.type);
+      didWarnAboutElementRef[componentName] ||
+        ((didWarnAboutElementRef[componentName] = !0),
+        console.error(
+          "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
+        ));
+      componentName = this.props.ref;
+      return void 0 !== componentName ? componentName : null;
+    }
+    function ReactElement(
+      type,
+      key,
+      self,
+      source,
+      owner,
+      props,
+      debugStack,
+      debugTask
+    ) {
+      self = props.ref;
+      type = {
+        $$typeof: REACT_ELEMENT_TYPE,
+        type: type,
+        key: key,
+        props: props,
+        _owner: owner
+      };
+      null !== (void 0 !== self ? self : null)
+        ? Object.defineProperty(type, "ref", {
+            enumerable: !1,
+            get: elementRefGetterWithDeprecationWarning
+          })
+        : Object.defineProperty(type, "ref", { enumerable: !1, value: null });
+      type._store = {};
+      Object.defineProperty(type._store, "validated", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: 0
+      });
+      Object.defineProperty(type, "_debugInfo", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: null
+      });
+      Object.defineProperty(type, "_debugStack", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugStack
+      });
+      Object.defineProperty(type, "_debugTask", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugTask
+      });
+      Object.freeze && (Object.freeze(type.props), Object.freeze(type));
+      return type;
+    }
+    function jsxDEVImpl(
+      type,
+      config,
+      maybeKey,
+      isStaticChildren,
+      source,
+      self,
+      debugStack,
+      debugTask
+    ) {
+      var children = config.children;
+      if (void 0 !== children)
+        if (isStaticChildren)
+          if (isArrayImpl(children)) {
+            for (
+              isStaticChildren = 0;
+              isStaticChildren < children.length;
+              isStaticChildren++
+            )
+              validateChildKeys(children[isStaticChildren]);
+            Object.freeze && Object.freeze(children);
+          } else
+            console.error(
+              "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
+            );
+        else validateChildKeys(children);
+      if (hasOwnProperty.call(config, "key")) {
+        children = getComponentNameFromType(type);
+        var keys = Object.keys(config).filter(function (k) {
+          return "key" !== k;
+        });
+        isStaticChildren =
+          0 < keys.length
+            ? "{key: someKey, " + keys.join(": ..., ") + ": ...}"
+            : "{key: someKey}";
+        didWarnAboutKeySpread[children + isStaticChildren] ||
+          ((keys =
+            0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"),
+          console.error(
+            'A props object containing a "key" prop is being spread into JSX:\n  let props = %s;\n  <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n  let props = %s;\n  <%s key={someKey} {...props} />',
+            isStaticChildren,
+            children,
+            keys,
+            children
+          ),
+          (didWarnAboutKeySpread[children + isStaticChildren] = !0));
+      }
+      children = null;
+      void 0 !== maybeKey &&
+        (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey));
+      hasValidKey(config) &&
+        (checkKeyStringCoercion(config.key), (children = "" + config.key));
+      if ("key" in config) {
+        maybeKey = {};
+        for (var propName in config)
+          "key" !== propName && (maybeKey[propName] = config[propName]);
+      } else maybeKey = config;
+      children &&
+        defineKeyPropWarningGetter(
+          maybeKey,
+          "function" === typeof type
+            ? type.displayName || type.name || "Unknown"
+            : type
+        );
+      return ReactElement(
+        type,
+        children,
+        self,
+        source,
+        getOwner(),
+        maybeKey,
+        debugStack,
+        debugTask
+      );
+    }
+    function validateChildKeys(node) {
+      "object" === typeof node &&
+        null !== node &&
+        node.$$typeof === REACT_ELEMENT_TYPE &&
+        node._store &&
+        (node._store.validated = 1);
+    }
+    var React = require("react"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler");
+    Symbol.for("react.provider");
+    var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      isArrayImpl = Array.isArray,
+      createTask = console.createTask
+        ? console.createTask
+        : function () {
+            return null;
+          };
+    React = {
+      react_stack_bottom_frame: function (callStackForError) {
+        return callStackForError();
+      }
+    };
+    var specialPropKeyWarningShown;
+    var didWarnAboutElementRef = {};
+    var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(
+      React,
+      UnknownOwner
+    )();
+    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
+    var didWarnAboutKeySpread = {};
+    exports.Fragment = REACT_FRAGMENT_TYPE;
+    exports.jsxDEV = function (
+      type,
+      config,
+      maybeKey,
+      isStaticChildren,
+      source,
+      self
+    ) {
+      var trackActualOwner =
+        1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
+      return jsxDEVImpl(
+        type,
+        config,
+        maybeKey,
+        isStaticChildren,
+        source,
+        self,
+        trackActualOwner
+          ? Error("react-stack-top-frame")
+          : unknownOwnerDebugStack,
+        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+  })();
Index: node_modules/react/cjs/react-jsx-dev-runtime.production.js
===================================================================
--- node_modules/react/cjs/react-jsx-dev-runtime.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-dev-runtime.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * @license React
+ * react-jsx-dev-runtime.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.jsxDEV = void 0;
Index: node_modules/react/cjs/react-jsx-dev-runtime.profiling.js
===================================================================
--- node_modules/react/cjs/react-jsx-dev-runtime.profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-dev-runtime.profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * @license React
+ * react-jsx-dev-runtime.profiling.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.jsxDEV = void 0;
Index: node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js
===================================================================
--- node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,385 @@
+/**
+ * @license React
+ * react-jsx-dev-runtime.react-server.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkKeyStringCoercion(value) {
+      try {
+        testStringCoercion(value);
+        var JSCompiler_inline_result = !1;
+      } catch (e) {
+        JSCompiler_inline_result = !0;
+      }
+      if (JSCompiler_inline_result) {
+        JSCompiler_inline_result = console;
+        var JSCompiler_temp_const = JSCompiler_inline_result.error;
+        var JSCompiler_inline_result$jscomp$0 =
+          ("function" === typeof Symbol &&
+            Symbol.toStringTag &&
+            value[Symbol.toStringTag]) ||
+          value.constructor.name ||
+          "Object";
+        JSCompiler_temp_const.call(
+          JSCompiler_inline_result,
+          "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
+          JSCompiler_inline_result$jscomp$0
+        );
+        return testStringCoercion(value);
+      }
+    }
+    function getTaskName(type) {
+      if (type === REACT_FRAGMENT_TYPE) return "<>";
+      if (
+        "object" === typeof type &&
+        null !== type &&
+        type.$$typeof === REACT_LAZY_TYPE
+      )
+        return "<...>";
+      try {
+        var name = getComponentNameFromType(type);
+        return name ? "<" + name + ">" : "<...>";
+      } catch (x) {
+        return "<...>";
+      }
+    }
+    function getOwner() {
+      var dispatcher = ReactSharedInternalsServer.A;
+      return null === dispatcher ? null : dispatcher.getOwner();
+    }
+    function UnknownOwner() {
+      return Error("react-stack-top-frame");
+    }
+    function hasValidKey(config) {
+      if (hasOwnProperty.call(config, "key")) {
+        var getter = Object.getOwnPropertyDescriptor(config, "key").get;
+        if (getter && getter.isReactWarning) return !1;
+      }
+      return void 0 !== config.key;
+    }
+    function defineKeyPropWarningGetter(props, displayName) {
+      function warnAboutAccessingKey() {
+        specialPropKeyWarningShown ||
+          ((specialPropKeyWarningShown = !0),
+          console.error(
+            "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
+            displayName
+          ));
+      }
+      warnAboutAccessingKey.isReactWarning = !0;
+      Object.defineProperty(props, "key", {
+        get: warnAboutAccessingKey,
+        configurable: !0
+      });
+    }
+    function elementRefGetterWithDeprecationWarning() {
+      var componentName = getComponentNameFromType(this.type);
+      didWarnAboutElementRef[componentName] ||
+        ((didWarnAboutElementRef[componentName] = !0),
+        console.error(
+          "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
+        ));
+      componentName = this.props.ref;
+      return void 0 !== componentName ? componentName : null;
+    }
+    function ReactElement(
+      type,
+      key,
+      self,
+      source,
+      owner,
+      props,
+      debugStack,
+      debugTask
+    ) {
+      self = props.ref;
+      type = {
+        $$typeof: REACT_ELEMENT_TYPE,
+        type: type,
+        key: key,
+        props: props,
+        _owner: owner
+      };
+      null !== (void 0 !== self ? self : null)
+        ? Object.defineProperty(type, "ref", {
+            enumerable: !1,
+            get: elementRefGetterWithDeprecationWarning
+          })
+        : Object.defineProperty(type, "ref", { enumerable: !1, value: null });
+      type._store = {};
+      Object.defineProperty(type._store, "validated", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: 0
+      });
+      Object.defineProperty(type, "_debugInfo", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: null
+      });
+      Object.defineProperty(type, "_debugStack", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugStack
+      });
+      Object.defineProperty(type, "_debugTask", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugTask
+      });
+      Object.freeze && (Object.freeze(type.props), Object.freeze(type));
+      return type;
+    }
+    function jsxDEVImpl(
+      type,
+      config,
+      maybeKey,
+      isStaticChildren,
+      source,
+      self,
+      debugStack,
+      debugTask
+    ) {
+      var children = config.children;
+      if (void 0 !== children)
+        if (isStaticChildren)
+          if (isArrayImpl(children)) {
+            for (
+              isStaticChildren = 0;
+              isStaticChildren < children.length;
+              isStaticChildren++
+            )
+              validateChildKeys(children[isStaticChildren]);
+            Object.freeze && Object.freeze(children);
+          } else
+            console.error(
+              "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
+            );
+        else validateChildKeys(children);
+      if (hasOwnProperty.call(config, "key")) {
+        children = getComponentNameFromType(type);
+        var keys = Object.keys(config).filter(function (k) {
+          return "key" !== k;
+        });
+        isStaticChildren =
+          0 < keys.length
+            ? "{key: someKey, " + keys.join(": ..., ") + ": ...}"
+            : "{key: someKey}";
+        didWarnAboutKeySpread[children + isStaticChildren] ||
+          ((keys =
+            0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"),
+          console.error(
+            'A props object containing a "key" prop is being spread into JSX:\n  let props = %s;\n  <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n  let props = %s;\n  <%s key={someKey} {...props} />',
+            isStaticChildren,
+            children,
+            keys,
+            children
+          ),
+          (didWarnAboutKeySpread[children + isStaticChildren] = !0));
+      }
+      children = null;
+      void 0 !== maybeKey &&
+        (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey));
+      hasValidKey(config) &&
+        (checkKeyStringCoercion(config.key), (children = "" + config.key));
+      if ("key" in config) {
+        maybeKey = {};
+        for (var propName in config)
+          "key" !== propName && (maybeKey[propName] = config[propName]);
+      } else maybeKey = config;
+      children &&
+        defineKeyPropWarningGetter(
+          maybeKey,
+          "function" === typeof type
+            ? type.displayName || type.name || "Unknown"
+            : type
+        );
+      return ReactElement(
+        type,
+        children,
+        self,
+        source,
+        getOwner(),
+        maybeKey,
+        debugStack,
+        debugTask
+      );
+    }
+    function validateChildKeys(node) {
+      "object" === typeof node &&
+        null !== node &&
+        node.$$typeof === REACT_ELEMENT_TYPE &&
+        node._store &&
+        (node._store.validated = 1);
+    }
+    var React = require("react"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler");
+    Symbol.for("react.provider");
+    var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      ReactSharedInternalsServer =
+        React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
+    if (!ReactSharedInternalsServer)
+      throw Error(
+        'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.'
+      );
+    var hasOwnProperty = Object.prototype.hasOwnProperty,
+      isArrayImpl = Array.isArray,
+      createTask = console.createTask
+        ? console.createTask
+        : function () {
+            return null;
+          };
+    React = {
+      react_stack_bottom_frame: function (callStackForError) {
+        return callStackForError();
+      }
+    };
+    var specialPropKeyWarningShown;
+    var didWarnAboutElementRef = {};
+    var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(
+      React,
+      UnknownOwner
+    )();
+    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
+    var didWarnAboutKeySpread = {};
+    exports.Fragment = REACT_FRAGMENT_TYPE;
+    exports.jsx = function (type, config, maybeKey, source, self) {
+      var trackActualOwner =
+        1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++;
+      return jsxDEVImpl(
+        type,
+        config,
+        maybeKey,
+        !1,
+        source,
+        self,
+        trackActualOwner
+          ? Error("react-stack-top-frame")
+          : unknownOwnerDebugStack,
+        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+    exports.jsxDEV = function (
+      type,
+      config,
+      maybeKey,
+      isStaticChildren,
+      source,
+      self
+    ) {
+      var trackActualOwner =
+        1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++;
+      return jsxDEVImpl(
+        type,
+        config,
+        maybeKey,
+        isStaticChildren,
+        source,
+        self,
+        trackActualOwner
+          ? Error("react-stack-top-frame")
+          : unknownOwnerDebugStack,
+        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+    exports.jsxs = function (type, config, maybeKey, source, self) {
+      var trackActualOwner =
+        1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++;
+      return jsxDEVImpl(
+        type,
+        config,
+        maybeKey,
+        !0,
+        source,
+        self,
+        trackActualOwner
+          ? Error("react-stack-top-frame")
+          : unknownOwnerDebugStack,
+        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+  })();
Index: node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js
===================================================================
--- node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+/**
+ * @license React
+ * react-jsx-dev-runtime.react-server.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react"),
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
+if (!React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE)
+  throw Error(
+    'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.'
+  );
+function jsxProd(type, config, maybeKey) {
+  var key = null;
+  void 0 !== maybeKey && (key = "" + maybeKey);
+  void 0 !== config.key && (key = "" + config.key);
+  if ("key" in config) {
+    maybeKey = {};
+    for (var propName in config)
+      "key" !== propName && (maybeKey[propName] = config[propName]);
+  } else maybeKey = config;
+  config = maybeKey.ref;
+  return {
+    $$typeof: REACT_ELEMENT_TYPE,
+    type: type,
+    key: key,
+    ref: void 0 !== config ? config : null,
+    props: maybeKey
+  };
+}
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.jsx = jsxProd;
+exports.jsxDEV = void 0;
+exports.jsxs = jsxProd;
Index: node_modules/react/cjs/react-jsx-runtime.development.js
===================================================================
--- node_modules/react/cjs/react-jsx-runtime.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-runtime.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,358 @@
+/**
+ * @license React
+ * react-jsx-runtime.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkKeyStringCoercion(value) {
+      try {
+        testStringCoercion(value);
+        var JSCompiler_inline_result = !1;
+      } catch (e) {
+        JSCompiler_inline_result = !0;
+      }
+      if (JSCompiler_inline_result) {
+        JSCompiler_inline_result = console;
+        var JSCompiler_temp_const = JSCompiler_inline_result.error;
+        var JSCompiler_inline_result$jscomp$0 =
+          ("function" === typeof Symbol &&
+            Symbol.toStringTag &&
+            value[Symbol.toStringTag]) ||
+          value.constructor.name ||
+          "Object";
+        JSCompiler_temp_const.call(
+          JSCompiler_inline_result,
+          "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
+          JSCompiler_inline_result$jscomp$0
+        );
+        return testStringCoercion(value);
+      }
+    }
+    function getTaskName(type) {
+      if (type === REACT_FRAGMENT_TYPE) return "<>";
+      if (
+        "object" === typeof type &&
+        null !== type &&
+        type.$$typeof === REACT_LAZY_TYPE
+      )
+        return "<...>";
+      try {
+        var name = getComponentNameFromType(type);
+        return name ? "<" + name + ">" : "<...>";
+      } catch (x) {
+        return "<...>";
+      }
+    }
+    function getOwner() {
+      var dispatcher = ReactSharedInternals.A;
+      return null === dispatcher ? null : dispatcher.getOwner();
+    }
+    function UnknownOwner() {
+      return Error("react-stack-top-frame");
+    }
+    function hasValidKey(config) {
+      if (hasOwnProperty.call(config, "key")) {
+        var getter = Object.getOwnPropertyDescriptor(config, "key").get;
+        if (getter && getter.isReactWarning) return !1;
+      }
+      return void 0 !== config.key;
+    }
+    function defineKeyPropWarningGetter(props, displayName) {
+      function warnAboutAccessingKey() {
+        specialPropKeyWarningShown ||
+          ((specialPropKeyWarningShown = !0),
+          console.error(
+            "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
+            displayName
+          ));
+      }
+      warnAboutAccessingKey.isReactWarning = !0;
+      Object.defineProperty(props, "key", {
+        get: warnAboutAccessingKey,
+        configurable: !0
+      });
+    }
+    function elementRefGetterWithDeprecationWarning() {
+      var componentName = getComponentNameFromType(this.type);
+      didWarnAboutElementRef[componentName] ||
+        ((didWarnAboutElementRef[componentName] = !0),
+        console.error(
+          "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
+        ));
+      componentName = this.props.ref;
+      return void 0 !== componentName ? componentName : null;
+    }
+    function ReactElement(
+      type,
+      key,
+      self,
+      source,
+      owner,
+      props,
+      debugStack,
+      debugTask
+    ) {
+      self = props.ref;
+      type = {
+        $$typeof: REACT_ELEMENT_TYPE,
+        type: type,
+        key: key,
+        props: props,
+        _owner: owner
+      };
+      null !== (void 0 !== self ? self : null)
+        ? Object.defineProperty(type, "ref", {
+            enumerable: !1,
+            get: elementRefGetterWithDeprecationWarning
+          })
+        : Object.defineProperty(type, "ref", { enumerable: !1, value: null });
+      type._store = {};
+      Object.defineProperty(type._store, "validated", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: 0
+      });
+      Object.defineProperty(type, "_debugInfo", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: null
+      });
+      Object.defineProperty(type, "_debugStack", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugStack
+      });
+      Object.defineProperty(type, "_debugTask", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugTask
+      });
+      Object.freeze && (Object.freeze(type.props), Object.freeze(type));
+      return type;
+    }
+    function jsxDEVImpl(
+      type,
+      config,
+      maybeKey,
+      isStaticChildren,
+      source,
+      self,
+      debugStack,
+      debugTask
+    ) {
+      var children = config.children;
+      if (void 0 !== children)
+        if (isStaticChildren)
+          if (isArrayImpl(children)) {
+            for (
+              isStaticChildren = 0;
+              isStaticChildren < children.length;
+              isStaticChildren++
+            )
+              validateChildKeys(children[isStaticChildren]);
+            Object.freeze && Object.freeze(children);
+          } else
+            console.error(
+              "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
+            );
+        else validateChildKeys(children);
+      if (hasOwnProperty.call(config, "key")) {
+        children = getComponentNameFromType(type);
+        var keys = Object.keys(config).filter(function (k) {
+          return "key" !== k;
+        });
+        isStaticChildren =
+          0 < keys.length
+            ? "{key: someKey, " + keys.join(": ..., ") + ": ...}"
+            : "{key: someKey}";
+        didWarnAboutKeySpread[children + isStaticChildren] ||
+          ((keys =
+            0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"),
+          console.error(
+            'A props object containing a "key" prop is being spread into JSX:\n  let props = %s;\n  <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n  let props = %s;\n  <%s key={someKey} {...props} />',
+            isStaticChildren,
+            children,
+            keys,
+            children
+          ),
+          (didWarnAboutKeySpread[children + isStaticChildren] = !0));
+      }
+      children = null;
+      void 0 !== maybeKey &&
+        (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey));
+      hasValidKey(config) &&
+        (checkKeyStringCoercion(config.key), (children = "" + config.key));
+      if ("key" in config) {
+        maybeKey = {};
+        for (var propName in config)
+          "key" !== propName && (maybeKey[propName] = config[propName]);
+      } else maybeKey = config;
+      children &&
+        defineKeyPropWarningGetter(
+          maybeKey,
+          "function" === typeof type
+            ? type.displayName || type.name || "Unknown"
+            : type
+        );
+      return ReactElement(
+        type,
+        children,
+        self,
+        source,
+        getOwner(),
+        maybeKey,
+        debugStack,
+        debugTask
+      );
+    }
+    function validateChildKeys(node) {
+      "object" === typeof node &&
+        null !== node &&
+        node.$$typeof === REACT_ELEMENT_TYPE &&
+        node._store &&
+        (node._store.validated = 1);
+    }
+    var React = require("react"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler");
+    Symbol.for("react.provider");
+    var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      ReactSharedInternals =
+        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      isArrayImpl = Array.isArray,
+      createTask = console.createTask
+        ? console.createTask
+        : function () {
+            return null;
+          };
+    React = {
+      react_stack_bottom_frame: function (callStackForError) {
+        return callStackForError();
+      }
+    };
+    var specialPropKeyWarningShown;
+    var didWarnAboutElementRef = {};
+    var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(
+      React,
+      UnknownOwner
+    )();
+    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
+    var didWarnAboutKeySpread = {};
+    exports.Fragment = REACT_FRAGMENT_TYPE;
+    exports.jsx = function (type, config, maybeKey, source, self) {
+      var trackActualOwner =
+        1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
+      return jsxDEVImpl(
+        type,
+        config,
+        maybeKey,
+        !1,
+        source,
+        self,
+        trackActualOwner
+          ? Error("react-stack-top-frame")
+          : unknownOwnerDebugStack,
+        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+    exports.jsxs = function (type, config, maybeKey, source, self) {
+      var trackActualOwner =
+        1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
+      return jsxDEVImpl(
+        type,
+        config,
+        maybeKey,
+        !0,
+        source,
+        self,
+        trackActualOwner
+          ? Error("react-stack-top-frame")
+          : unknownOwnerDebugStack,
+        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+  })();
Index: node_modules/react/cjs/react-jsx-runtime.production.js
===================================================================
--- node_modules/react/cjs/react-jsx-runtime.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-runtime.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+/**
+ * @license React
+ * react-jsx-runtime.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
+function jsxProd(type, config, maybeKey) {
+  var key = null;
+  void 0 !== maybeKey && (key = "" + maybeKey);
+  void 0 !== config.key && (key = "" + config.key);
+  if ("key" in config) {
+    maybeKey = {};
+    for (var propName in config)
+      "key" !== propName && (maybeKey[propName] = config[propName]);
+  } else maybeKey = config;
+  config = maybeKey.ref;
+  return {
+    $$typeof: REACT_ELEMENT_TYPE,
+    type: type,
+    key: key,
+    ref: void 0 !== config ? config : null,
+    props: maybeKey
+  };
+}
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.jsx = jsxProd;
+exports.jsxs = jsxProd;
Index: node_modules/react/cjs/react-jsx-runtime.profiling.js
===================================================================
--- node_modules/react/cjs/react-jsx-runtime.profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-runtime.profiling.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+/**
+ * @license React
+ * react-jsx-runtime.profiling.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
+function jsxProd(type, config, maybeKey) {
+  var key = null;
+  void 0 !== maybeKey && (key = "" + maybeKey);
+  void 0 !== config.key && (key = "" + config.key);
+  if ("key" in config) {
+    maybeKey = {};
+    for (var propName in config)
+      "key" !== propName && (maybeKey[propName] = config[propName]);
+  } else maybeKey = config;
+  config = maybeKey.ref;
+  return {
+    $$typeof: REACT_ELEMENT_TYPE,
+    type: type,
+    key: key,
+    ref: void 0 !== config ? config : null,
+    props: maybeKey
+  };
+}
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.jsx = jsxProd;
+exports.jsxs = jsxProd;
Index: node_modules/react/cjs/react-jsx-runtime.react-server.development.js
===================================================================
--- node_modules/react/cjs/react-jsx-runtime.react-server.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-runtime.react-server.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,385 @@
+/**
+ * @license React
+ * react-jsx-runtime.react-server.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkKeyStringCoercion(value) {
+      try {
+        testStringCoercion(value);
+        var JSCompiler_inline_result = !1;
+      } catch (e) {
+        JSCompiler_inline_result = !0;
+      }
+      if (JSCompiler_inline_result) {
+        JSCompiler_inline_result = console;
+        var JSCompiler_temp_const = JSCompiler_inline_result.error;
+        var JSCompiler_inline_result$jscomp$0 =
+          ("function" === typeof Symbol &&
+            Symbol.toStringTag &&
+            value[Symbol.toStringTag]) ||
+          value.constructor.name ||
+          "Object";
+        JSCompiler_temp_const.call(
+          JSCompiler_inline_result,
+          "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
+          JSCompiler_inline_result$jscomp$0
+        );
+        return testStringCoercion(value);
+      }
+    }
+    function getTaskName(type) {
+      if (type === REACT_FRAGMENT_TYPE) return "<>";
+      if (
+        "object" === typeof type &&
+        null !== type &&
+        type.$$typeof === REACT_LAZY_TYPE
+      )
+        return "<...>";
+      try {
+        var name = getComponentNameFromType(type);
+        return name ? "<" + name + ">" : "<...>";
+      } catch (x) {
+        return "<...>";
+      }
+    }
+    function getOwner() {
+      var dispatcher = ReactSharedInternalsServer.A;
+      return null === dispatcher ? null : dispatcher.getOwner();
+    }
+    function UnknownOwner() {
+      return Error("react-stack-top-frame");
+    }
+    function hasValidKey(config) {
+      if (hasOwnProperty.call(config, "key")) {
+        var getter = Object.getOwnPropertyDescriptor(config, "key").get;
+        if (getter && getter.isReactWarning) return !1;
+      }
+      return void 0 !== config.key;
+    }
+    function defineKeyPropWarningGetter(props, displayName) {
+      function warnAboutAccessingKey() {
+        specialPropKeyWarningShown ||
+          ((specialPropKeyWarningShown = !0),
+          console.error(
+            "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
+            displayName
+          ));
+      }
+      warnAboutAccessingKey.isReactWarning = !0;
+      Object.defineProperty(props, "key", {
+        get: warnAboutAccessingKey,
+        configurable: !0
+      });
+    }
+    function elementRefGetterWithDeprecationWarning() {
+      var componentName = getComponentNameFromType(this.type);
+      didWarnAboutElementRef[componentName] ||
+        ((didWarnAboutElementRef[componentName] = !0),
+        console.error(
+          "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
+        ));
+      componentName = this.props.ref;
+      return void 0 !== componentName ? componentName : null;
+    }
+    function ReactElement(
+      type,
+      key,
+      self,
+      source,
+      owner,
+      props,
+      debugStack,
+      debugTask
+    ) {
+      self = props.ref;
+      type = {
+        $$typeof: REACT_ELEMENT_TYPE,
+        type: type,
+        key: key,
+        props: props,
+        _owner: owner
+      };
+      null !== (void 0 !== self ? self : null)
+        ? Object.defineProperty(type, "ref", {
+            enumerable: !1,
+            get: elementRefGetterWithDeprecationWarning
+          })
+        : Object.defineProperty(type, "ref", { enumerable: !1, value: null });
+      type._store = {};
+      Object.defineProperty(type._store, "validated", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: 0
+      });
+      Object.defineProperty(type, "_debugInfo", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: null
+      });
+      Object.defineProperty(type, "_debugStack", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugStack
+      });
+      Object.defineProperty(type, "_debugTask", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugTask
+      });
+      Object.freeze && (Object.freeze(type.props), Object.freeze(type));
+      return type;
+    }
+    function jsxDEVImpl(
+      type,
+      config,
+      maybeKey,
+      isStaticChildren,
+      source,
+      self,
+      debugStack,
+      debugTask
+    ) {
+      var children = config.children;
+      if (void 0 !== children)
+        if (isStaticChildren)
+          if (isArrayImpl(children)) {
+            for (
+              isStaticChildren = 0;
+              isStaticChildren < children.length;
+              isStaticChildren++
+            )
+              validateChildKeys(children[isStaticChildren]);
+            Object.freeze && Object.freeze(children);
+          } else
+            console.error(
+              "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
+            );
+        else validateChildKeys(children);
+      if (hasOwnProperty.call(config, "key")) {
+        children = getComponentNameFromType(type);
+        var keys = Object.keys(config).filter(function (k) {
+          return "key" !== k;
+        });
+        isStaticChildren =
+          0 < keys.length
+            ? "{key: someKey, " + keys.join(": ..., ") + ": ...}"
+            : "{key: someKey}";
+        didWarnAboutKeySpread[children + isStaticChildren] ||
+          ((keys =
+            0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"),
+          console.error(
+            'A props object containing a "key" prop is being spread into JSX:\n  let props = %s;\n  <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n  let props = %s;\n  <%s key={someKey} {...props} />',
+            isStaticChildren,
+            children,
+            keys,
+            children
+          ),
+          (didWarnAboutKeySpread[children + isStaticChildren] = !0));
+      }
+      children = null;
+      void 0 !== maybeKey &&
+        (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey));
+      hasValidKey(config) &&
+        (checkKeyStringCoercion(config.key), (children = "" + config.key));
+      if ("key" in config) {
+        maybeKey = {};
+        for (var propName in config)
+          "key" !== propName && (maybeKey[propName] = config[propName]);
+      } else maybeKey = config;
+      children &&
+        defineKeyPropWarningGetter(
+          maybeKey,
+          "function" === typeof type
+            ? type.displayName || type.name || "Unknown"
+            : type
+        );
+      return ReactElement(
+        type,
+        children,
+        self,
+        source,
+        getOwner(),
+        maybeKey,
+        debugStack,
+        debugTask
+      );
+    }
+    function validateChildKeys(node) {
+      "object" === typeof node &&
+        null !== node &&
+        node.$$typeof === REACT_ELEMENT_TYPE &&
+        node._store &&
+        (node._store.validated = 1);
+    }
+    var React = require("react"),
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler");
+    Symbol.for("react.provider");
+    var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      ReactSharedInternalsServer =
+        React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
+    if (!ReactSharedInternalsServer)
+      throw Error(
+        'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.'
+      );
+    var hasOwnProperty = Object.prototype.hasOwnProperty,
+      isArrayImpl = Array.isArray,
+      createTask = console.createTask
+        ? console.createTask
+        : function () {
+            return null;
+          };
+    React = {
+      react_stack_bottom_frame: function (callStackForError) {
+        return callStackForError();
+      }
+    };
+    var specialPropKeyWarningShown;
+    var didWarnAboutElementRef = {};
+    var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(
+      React,
+      UnknownOwner
+    )();
+    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
+    var didWarnAboutKeySpread = {};
+    exports.Fragment = REACT_FRAGMENT_TYPE;
+    exports.jsx = function (type, config, maybeKey, source, self) {
+      var trackActualOwner =
+        1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++;
+      return jsxDEVImpl(
+        type,
+        config,
+        maybeKey,
+        !1,
+        source,
+        self,
+        trackActualOwner
+          ? Error("react-stack-top-frame")
+          : unknownOwnerDebugStack,
+        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+    exports.jsxDEV = function (
+      type,
+      config,
+      maybeKey,
+      isStaticChildren,
+      source,
+      self
+    ) {
+      var trackActualOwner =
+        1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++;
+      return jsxDEVImpl(
+        type,
+        config,
+        maybeKey,
+        isStaticChildren,
+        source,
+        self,
+        trackActualOwner
+          ? Error("react-stack-top-frame")
+          : unknownOwnerDebugStack,
+        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+    exports.jsxs = function (type, config, maybeKey, source, self) {
+      var trackActualOwner =
+        1e4 > ReactSharedInternalsServer.recentlyCreatedOwnerStacks++;
+      return jsxDEVImpl(
+        type,
+        config,
+        maybeKey,
+        !0,
+        source,
+        self,
+        trackActualOwner
+          ? Error("react-stack-top-frame")
+          : unknownOwnerDebugStack,
+        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+  })();
Index: node_modules/react/cjs/react-jsx-runtime.react-server.production.js
===================================================================
--- node_modules/react/cjs/react-jsx-runtime.react-server.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react-jsx-runtime.react-server.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+/**
+ * @license React
+ * react-jsx-runtime.react-server.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react"),
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
+if (!React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE)
+  throw Error(
+    'The "react" package in this environment is not configured correctly. The "react-server" condition must be enabled in any environment that runs React Server Components.'
+  );
+function jsxProd(type, config, maybeKey) {
+  var key = null;
+  void 0 !== maybeKey && (key = "" + maybeKey);
+  void 0 !== config.key && (key = "" + config.key);
+  if ("key" in config) {
+    maybeKey = {};
+    for (var propName in config)
+      "key" !== propName && (maybeKey[propName] = config[propName]);
+  } else maybeKey = config;
+  config = maybeKey.ref;
+  return {
+    $$typeof: REACT_ELEMENT_TYPE,
+    type: type,
+    key: key,
+    ref: void 0 !== config ? config : null,
+    props: maybeKey
+  };
+}
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.jsx = jsxProd;
+exports.jsxDEV = void 0;
+exports.jsxs = jsxProd;
Index: node_modules/react/cjs/react.development.js
===================================================================
--- node_modules/react/cjs/react.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1243 @@
+/**
+ * @license React
+ * react.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function defineDeprecationWarning(methodName, info) {
+      Object.defineProperty(Component.prototype, methodName, {
+        get: function () {
+          console.warn(
+            "%s(...) is deprecated in plain JavaScript React classes. %s",
+            info[0],
+            info[1]
+          );
+        }
+      });
+    }
+    function getIteratorFn(maybeIterable) {
+      if (null === maybeIterable || "object" !== typeof maybeIterable)
+        return null;
+      maybeIterable =
+        (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
+        maybeIterable["@@iterator"];
+      return "function" === typeof maybeIterable ? maybeIterable : null;
+    }
+    function warnNoop(publicInstance, callerName) {
+      publicInstance =
+        ((publicInstance = publicInstance.constructor) &&
+          (publicInstance.displayName || publicInstance.name)) ||
+        "ReactClass";
+      var warningKey = publicInstance + "." + callerName;
+      didWarnStateUpdateForUnmountedComponent[warningKey] ||
+        (console.error(
+          "Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",
+          callerName,
+          publicInstance
+        ),
+        (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));
+    }
+    function Component(props, context, updater) {
+      this.props = props;
+      this.context = context;
+      this.refs = emptyObject;
+      this.updater = updater || ReactNoopUpdateQueue;
+    }
+    function ComponentDummy() {}
+    function PureComponent(props, context, updater) {
+      this.props = props;
+      this.context = context;
+      this.refs = emptyObject;
+      this.updater = updater || ReactNoopUpdateQueue;
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkKeyStringCoercion(value) {
+      try {
+        testStringCoercion(value);
+        var JSCompiler_inline_result = !1;
+      } catch (e) {
+        JSCompiler_inline_result = !0;
+      }
+      if (JSCompiler_inline_result) {
+        JSCompiler_inline_result = console;
+        var JSCompiler_temp_const = JSCompiler_inline_result.error;
+        var JSCompiler_inline_result$jscomp$0 =
+          ("function" === typeof Symbol &&
+            Symbol.toStringTag &&
+            value[Symbol.toStringTag]) ||
+          value.constructor.name ||
+          "Object";
+        JSCompiler_temp_const.call(
+          JSCompiler_inline_result,
+          "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
+          JSCompiler_inline_result$jscomp$0
+        );
+        return testStringCoercion(value);
+      }
+    }
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function getTaskName(type) {
+      if (type === REACT_FRAGMENT_TYPE) return "<>";
+      if (
+        "object" === typeof type &&
+        null !== type &&
+        type.$$typeof === REACT_LAZY_TYPE
+      )
+        return "<...>";
+      try {
+        var name = getComponentNameFromType(type);
+        return name ? "<" + name + ">" : "<...>";
+      } catch (x) {
+        return "<...>";
+      }
+    }
+    function getOwner() {
+      var dispatcher = ReactSharedInternals.A;
+      return null === dispatcher ? null : dispatcher.getOwner();
+    }
+    function UnknownOwner() {
+      return Error("react-stack-top-frame");
+    }
+    function hasValidKey(config) {
+      if (hasOwnProperty.call(config, "key")) {
+        var getter = Object.getOwnPropertyDescriptor(config, "key").get;
+        if (getter && getter.isReactWarning) return !1;
+      }
+      return void 0 !== config.key;
+    }
+    function defineKeyPropWarningGetter(props, displayName) {
+      function warnAboutAccessingKey() {
+        specialPropKeyWarningShown ||
+          ((specialPropKeyWarningShown = !0),
+          console.error(
+            "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
+            displayName
+          ));
+      }
+      warnAboutAccessingKey.isReactWarning = !0;
+      Object.defineProperty(props, "key", {
+        get: warnAboutAccessingKey,
+        configurable: !0
+      });
+    }
+    function elementRefGetterWithDeprecationWarning() {
+      var componentName = getComponentNameFromType(this.type);
+      didWarnAboutElementRef[componentName] ||
+        ((didWarnAboutElementRef[componentName] = !0),
+        console.error(
+          "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
+        ));
+      componentName = this.props.ref;
+      return void 0 !== componentName ? componentName : null;
+    }
+    function ReactElement(
+      type,
+      key,
+      self,
+      source,
+      owner,
+      props,
+      debugStack,
+      debugTask
+    ) {
+      self = props.ref;
+      type = {
+        $$typeof: REACT_ELEMENT_TYPE,
+        type: type,
+        key: key,
+        props: props,
+        _owner: owner
+      };
+      null !== (void 0 !== self ? self : null)
+        ? Object.defineProperty(type, "ref", {
+            enumerable: !1,
+            get: elementRefGetterWithDeprecationWarning
+          })
+        : Object.defineProperty(type, "ref", { enumerable: !1, value: null });
+      type._store = {};
+      Object.defineProperty(type._store, "validated", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: 0
+      });
+      Object.defineProperty(type, "_debugInfo", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: null
+      });
+      Object.defineProperty(type, "_debugStack", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugStack
+      });
+      Object.defineProperty(type, "_debugTask", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugTask
+      });
+      Object.freeze && (Object.freeze(type.props), Object.freeze(type));
+      return type;
+    }
+    function cloneAndReplaceKey(oldElement, newKey) {
+      newKey = ReactElement(
+        oldElement.type,
+        newKey,
+        void 0,
+        void 0,
+        oldElement._owner,
+        oldElement.props,
+        oldElement._debugStack,
+        oldElement._debugTask
+      );
+      oldElement._store &&
+        (newKey._store.validated = oldElement._store.validated);
+      return newKey;
+    }
+    function isValidElement(object) {
+      return (
+        "object" === typeof object &&
+        null !== object &&
+        object.$$typeof === REACT_ELEMENT_TYPE
+      );
+    }
+    function escape(key) {
+      var escaperLookup = { "=": "=0", ":": "=2" };
+      return (
+        "$" +
+        key.replace(/[=:]/g, function (match) {
+          return escaperLookup[match];
+        })
+      );
+    }
+    function getElementKey(element, index) {
+      return "object" === typeof element &&
+        null !== element &&
+        null != element.key
+        ? (checkKeyStringCoercion(element.key), escape("" + element.key))
+        : index.toString(36);
+    }
+    function noop$1() {}
+    function resolveThenable(thenable) {
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+        default:
+          switch (
+            ("string" === typeof thenable.status
+              ? thenable.then(noop$1, noop$1)
+              : ((thenable.status = "pending"),
+                thenable.then(
+                  function (fulfilledValue) {
+                    "pending" === thenable.status &&
+                      ((thenable.status = "fulfilled"),
+                      (thenable.value = fulfilledValue));
+                  },
+                  function (error) {
+                    "pending" === thenable.status &&
+                      ((thenable.status = "rejected"),
+                      (thenable.reason = error));
+                  }
+                )),
+            thenable.status)
+          ) {
+            case "fulfilled":
+              return thenable.value;
+            case "rejected":
+              throw thenable.reason;
+          }
+      }
+      throw thenable;
+    }
+    function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
+      var type = typeof children;
+      if ("undefined" === type || "boolean" === type) children = null;
+      var invokeCallback = !1;
+      if (null === children) invokeCallback = !0;
+      else
+        switch (type) {
+          case "bigint":
+          case "string":
+          case "number":
+            invokeCallback = !0;
+            break;
+          case "object":
+            switch (children.$$typeof) {
+              case REACT_ELEMENT_TYPE:
+              case REACT_PORTAL_TYPE:
+                invokeCallback = !0;
+                break;
+              case REACT_LAZY_TYPE:
+                return (
+                  (invokeCallback = children._init),
+                  mapIntoArray(
+                    invokeCallback(children._payload),
+                    array,
+                    escapedPrefix,
+                    nameSoFar,
+                    callback
+                  )
+                );
+            }
+        }
+      if (invokeCallback) {
+        invokeCallback = children;
+        callback = callback(invokeCallback);
+        var childKey =
+          "" === nameSoFar ? "." + getElementKey(invokeCallback, 0) : nameSoFar;
+        isArrayImpl(callback)
+          ? ((escapedPrefix = ""),
+            null != childKey &&
+              (escapedPrefix =
+                childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"),
+            mapIntoArray(callback, array, escapedPrefix, "", function (c) {
+              return c;
+            }))
+          : null != callback &&
+            (isValidElement(callback) &&
+              (null != callback.key &&
+                ((invokeCallback && invokeCallback.key === callback.key) ||
+                  checkKeyStringCoercion(callback.key)),
+              (escapedPrefix = cloneAndReplaceKey(
+                callback,
+                escapedPrefix +
+                  (null == callback.key ||
+                  (invokeCallback && invokeCallback.key === callback.key)
+                    ? ""
+                    : ("" + callback.key).replace(
+                        userProvidedKeyEscapeRegex,
+                        "$&/"
+                      ) + "/") +
+                  childKey
+              )),
+              "" !== nameSoFar &&
+                null != invokeCallback &&
+                isValidElement(invokeCallback) &&
+                null == invokeCallback.key &&
+                invokeCallback._store &&
+                !invokeCallback._store.validated &&
+                (escapedPrefix._store.validated = 2),
+              (callback = escapedPrefix)),
+            array.push(callback));
+        return 1;
+      }
+      invokeCallback = 0;
+      childKey = "" === nameSoFar ? "." : nameSoFar + ":";
+      if (isArrayImpl(children))
+        for (var i = 0; i < children.length; i++)
+          (nameSoFar = children[i]),
+            (type = childKey + getElementKey(nameSoFar, i)),
+            (invokeCallback += mapIntoArray(
+              nameSoFar,
+              array,
+              escapedPrefix,
+              type,
+              callback
+            ));
+      else if (((i = getIteratorFn(children)), "function" === typeof i))
+        for (
+          i === children.entries &&
+            (didWarnAboutMaps ||
+              console.warn(
+                "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+              ),
+            (didWarnAboutMaps = !0)),
+            children = i.call(children),
+            i = 0;
+          !(nameSoFar = children.next()).done;
+
+        )
+          (nameSoFar = nameSoFar.value),
+            (type = childKey + getElementKey(nameSoFar, i++)),
+            (invokeCallback += mapIntoArray(
+              nameSoFar,
+              array,
+              escapedPrefix,
+              type,
+              callback
+            ));
+      else if ("object" === type) {
+        if ("function" === typeof children.then)
+          return mapIntoArray(
+            resolveThenable(children),
+            array,
+            escapedPrefix,
+            nameSoFar,
+            callback
+          );
+        array = String(children);
+        throw Error(
+          "Objects are not valid as a React child (found: " +
+            ("[object Object]" === array
+              ? "object with keys {" + Object.keys(children).join(", ") + "}"
+              : array) +
+            "). If you meant to render a collection of children, use an array instead."
+        );
+      }
+      return invokeCallback;
+    }
+    function mapChildren(children, func, context) {
+      if (null == children) return children;
+      var result = [],
+        count = 0;
+      mapIntoArray(children, result, "", "", function (child) {
+        return func.call(context, child, count++);
+      });
+      return result;
+    }
+    function lazyInitializer(payload) {
+      if (-1 === payload._status) {
+        var ctor = payload._result;
+        ctor = ctor();
+        ctor.then(
+          function (moduleObject) {
+            if (0 === payload._status || -1 === payload._status)
+              (payload._status = 1), (payload._result = moduleObject);
+          },
+          function (error) {
+            if (0 === payload._status || -1 === payload._status)
+              (payload._status = 2), (payload._result = error);
+          }
+        );
+        -1 === payload._status &&
+          ((payload._status = 0), (payload._result = ctor));
+      }
+      if (1 === payload._status)
+        return (
+          (ctor = payload._result),
+          void 0 === ctor &&
+            console.error(
+              "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n  const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?",
+              ctor
+            ),
+          "default" in ctor ||
+            console.error(
+              "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n  const MyComponent = lazy(() => import('./MyComponent'))",
+              ctor
+            ),
+          ctor.default
+        );
+      throw payload._result;
+    }
+    function resolveDispatcher() {
+      var dispatcher = ReactSharedInternals.H;
+      null === dispatcher &&
+        console.error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      return dispatcher;
+    }
+    function noop() {}
+    function enqueueTask(task) {
+      if (null === enqueueTaskImpl)
+        try {
+          var requireString = ("require" + Math.random()).slice(0, 7);
+          enqueueTaskImpl = (module && module[requireString]).call(
+            module,
+            "timers"
+          ).setImmediate;
+        } catch (_err) {
+          enqueueTaskImpl = function (callback) {
+            !1 === didWarnAboutMessageChannel &&
+              ((didWarnAboutMessageChannel = !0),
+              "undefined" === typeof MessageChannel &&
+                console.error(
+                  "This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."
+                ));
+            var channel = new MessageChannel();
+            channel.port1.onmessage = callback;
+            channel.port2.postMessage(void 0);
+          };
+        }
+      return enqueueTaskImpl(task);
+    }
+    function aggregateErrors(errors) {
+      return 1 < errors.length && "function" === typeof AggregateError
+        ? new AggregateError(errors)
+        : errors[0];
+    }
+    function popActScope(prevActQueue, prevActScopeDepth) {
+      prevActScopeDepth !== actScopeDepth - 1 &&
+        console.error(
+          "You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "
+        );
+      actScopeDepth = prevActScopeDepth;
+    }
+    function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {
+      var queue = ReactSharedInternals.actQueue;
+      if (null !== queue)
+        if (0 !== queue.length)
+          try {
+            flushActQueue(queue);
+            enqueueTask(function () {
+              return recursivelyFlushAsyncActWork(returnValue, resolve, reject);
+            });
+            return;
+          } catch (error) {
+            ReactSharedInternals.thrownErrors.push(error);
+          }
+        else ReactSharedInternals.actQueue = null;
+      0 < ReactSharedInternals.thrownErrors.length
+        ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),
+          (ReactSharedInternals.thrownErrors.length = 0),
+          reject(queue))
+        : resolve(returnValue);
+    }
+    function flushActQueue(queue) {
+      if (!isFlushing) {
+        isFlushing = !0;
+        var i = 0;
+        try {
+          for (; i < queue.length; i++) {
+            var callback = queue[i];
+            do {
+              ReactSharedInternals.didUsePromise = !1;
+              var continuation = callback(!1);
+              if (null !== continuation) {
+                if (ReactSharedInternals.didUsePromise) {
+                  queue[i] = callback;
+                  queue.splice(0, i);
+                  return;
+                }
+                callback = continuation;
+              } else break;
+            } while (1);
+          }
+          queue.length = 0;
+        } catch (error) {
+          queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);
+        } finally {
+          isFlushing = !1;
+        }
+      }
+    }
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+    var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler");
+    Symbol.for("react.provider");
+    var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+      didWarnStateUpdateForUnmountedComponent = {},
+      ReactNoopUpdateQueue = {
+        isMounted: function () {
+          return !1;
+        },
+        enqueueForceUpdate: function (publicInstance) {
+          warnNoop(publicInstance, "forceUpdate");
+        },
+        enqueueReplaceState: function (publicInstance) {
+          warnNoop(publicInstance, "replaceState");
+        },
+        enqueueSetState: function (publicInstance) {
+          warnNoop(publicInstance, "setState");
+        }
+      },
+      assign = Object.assign,
+      emptyObject = {};
+    Object.freeze(emptyObject);
+    Component.prototype.isReactComponent = {};
+    Component.prototype.setState = function (partialState, callback) {
+      if (
+        "object" !== typeof partialState &&
+        "function" !== typeof partialState &&
+        null != partialState
+      )
+        throw Error(
+          "takes an object of state variables to update or a function which returns an object of state variables."
+        );
+      this.updater.enqueueSetState(this, partialState, callback, "setState");
+    };
+    Component.prototype.forceUpdate = function (callback) {
+      this.updater.enqueueForceUpdate(this, callback, "forceUpdate");
+    };
+    var deprecatedAPIs = {
+        isMounted: [
+          "isMounted",
+          "Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."
+        ],
+        replaceState: [
+          "replaceState",
+          "Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."
+        ]
+      },
+      fnName;
+    for (fnName in deprecatedAPIs)
+      deprecatedAPIs.hasOwnProperty(fnName) &&
+        defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
+    ComponentDummy.prototype = Component.prototype;
+    deprecatedAPIs = PureComponent.prototype = new ComponentDummy();
+    deprecatedAPIs.constructor = PureComponent;
+    assign(deprecatedAPIs, Component.prototype);
+    deprecatedAPIs.isPureReactComponent = !0;
+    var isArrayImpl = Array.isArray,
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      ReactSharedInternals = {
+        H: null,
+        A: null,
+        T: null,
+        S: null,
+        V: null,
+        actQueue: null,
+        isBatchingLegacy: !1,
+        didScheduleLegacyUpdate: !1,
+        didUsePromise: !1,
+        thrownErrors: [],
+        getCurrentStack: null,
+        recentlyCreatedOwnerStacks: 0
+      },
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      createTask = console.createTask
+        ? console.createTask
+        : function () {
+            return null;
+          };
+    deprecatedAPIs = {
+      react_stack_bottom_frame: function (callStackForError) {
+        return callStackForError();
+      }
+    };
+    var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;
+    var didWarnAboutElementRef = {};
+    var unknownOwnerDebugStack = deprecatedAPIs.react_stack_bottom_frame.bind(
+      deprecatedAPIs,
+      UnknownOwner
+    )();
+    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
+    var didWarnAboutMaps = !1,
+      userProvidedKeyEscapeRegex = /\/+/g,
+      reportGlobalError =
+        "function" === typeof reportError
+          ? reportError
+          : function (error) {
+              if (
+                "object" === typeof window &&
+                "function" === typeof window.ErrorEvent
+              ) {
+                var event = new window.ErrorEvent("error", {
+                  bubbles: !0,
+                  cancelable: !0,
+                  message:
+                    "object" === typeof error &&
+                    null !== error &&
+                    "string" === typeof error.message
+                      ? String(error.message)
+                      : String(error),
+                  error: error
+                });
+                if (!window.dispatchEvent(event)) return;
+              } else if (
+                "object" === typeof process &&
+                "function" === typeof process.emit
+              ) {
+                process.emit("uncaughtException", error);
+                return;
+              }
+              console.error(error);
+            },
+      didWarnAboutMessageChannel = !1,
+      enqueueTaskImpl = null,
+      actScopeDepth = 0,
+      didWarnNoAwaitAct = !1,
+      isFlushing = !1,
+      queueSeveralMicrotasks =
+        "function" === typeof queueMicrotask
+          ? function (callback) {
+              queueMicrotask(function () {
+                return queueMicrotask(callback);
+              });
+            }
+          : enqueueTask;
+    deprecatedAPIs = Object.freeze({
+      __proto__: null,
+      c: function (size) {
+        return resolveDispatcher().useMemoCache(size);
+      }
+    });
+    exports.Children = {
+      map: mapChildren,
+      forEach: function (children, forEachFunc, forEachContext) {
+        mapChildren(
+          children,
+          function () {
+            forEachFunc.apply(this, arguments);
+          },
+          forEachContext
+        );
+      },
+      count: function (children) {
+        var n = 0;
+        mapChildren(children, function () {
+          n++;
+        });
+        return n;
+      },
+      toArray: function (children) {
+        return (
+          mapChildren(children, function (child) {
+            return child;
+          }) || []
+        );
+      },
+      only: function (children) {
+        if (!isValidElement(children))
+          throw Error(
+            "React.Children.only expected to receive a single React element child."
+          );
+        return children;
+      }
+    };
+    exports.Component = Component;
+    exports.Fragment = REACT_FRAGMENT_TYPE;
+    exports.Profiler = REACT_PROFILER_TYPE;
+    exports.PureComponent = PureComponent;
+    exports.StrictMode = REACT_STRICT_MODE_TYPE;
+    exports.Suspense = REACT_SUSPENSE_TYPE;
+    exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
+      ReactSharedInternals;
+    exports.__COMPILER_RUNTIME = deprecatedAPIs;
+    exports.act = function (callback) {
+      var prevActQueue = ReactSharedInternals.actQueue,
+        prevActScopeDepth = actScopeDepth;
+      actScopeDepth++;
+      var queue = (ReactSharedInternals.actQueue =
+          null !== prevActQueue ? prevActQueue : []),
+        didAwaitActCall = !1;
+      try {
+        var result = callback();
+      } catch (error) {
+        ReactSharedInternals.thrownErrors.push(error);
+      }
+      if (0 < ReactSharedInternals.thrownErrors.length)
+        throw (
+          (popActScope(prevActQueue, prevActScopeDepth),
+          (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),
+          (ReactSharedInternals.thrownErrors.length = 0),
+          callback)
+        );
+      if (
+        null !== result &&
+        "object" === typeof result &&
+        "function" === typeof result.then
+      ) {
+        var thenable = result;
+        queueSeveralMicrotasks(function () {
+          didAwaitActCall ||
+            didWarnNoAwaitAct ||
+            ((didWarnNoAwaitAct = !0),
+            console.error(
+              "You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"
+            ));
+        });
+        return {
+          then: function (resolve, reject) {
+            didAwaitActCall = !0;
+            thenable.then(
+              function (returnValue) {
+                popActScope(prevActQueue, prevActScopeDepth);
+                if (0 === prevActScopeDepth) {
+                  try {
+                    flushActQueue(queue),
+                      enqueueTask(function () {
+                        return recursivelyFlushAsyncActWork(
+                          returnValue,
+                          resolve,
+                          reject
+                        );
+                      });
+                  } catch (error$0) {
+                    ReactSharedInternals.thrownErrors.push(error$0);
+                  }
+                  if (0 < ReactSharedInternals.thrownErrors.length) {
+                    var _thrownError = aggregateErrors(
+                      ReactSharedInternals.thrownErrors
+                    );
+                    ReactSharedInternals.thrownErrors.length = 0;
+                    reject(_thrownError);
+                  }
+                } else resolve(returnValue);
+              },
+              function (error) {
+                popActScope(prevActQueue, prevActScopeDepth);
+                0 < ReactSharedInternals.thrownErrors.length
+                  ? ((error = aggregateErrors(
+                      ReactSharedInternals.thrownErrors
+                    )),
+                    (ReactSharedInternals.thrownErrors.length = 0),
+                    reject(error))
+                  : reject(error);
+              }
+            );
+          }
+        };
+      }
+      var returnValue$jscomp$0 = result;
+      popActScope(prevActQueue, prevActScopeDepth);
+      0 === prevActScopeDepth &&
+        (flushActQueue(queue),
+        0 !== queue.length &&
+          queueSeveralMicrotasks(function () {
+            didAwaitActCall ||
+              didWarnNoAwaitAct ||
+              ((didWarnNoAwaitAct = !0),
+              console.error(
+                "A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)"
+              ));
+          }),
+        (ReactSharedInternals.actQueue = null));
+      if (0 < ReactSharedInternals.thrownErrors.length)
+        throw (
+          ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),
+          (ReactSharedInternals.thrownErrors.length = 0),
+          callback)
+        );
+      return {
+        then: function (resolve, reject) {
+          didAwaitActCall = !0;
+          0 === prevActScopeDepth
+            ? ((ReactSharedInternals.actQueue = queue),
+              enqueueTask(function () {
+                return recursivelyFlushAsyncActWork(
+                  returnValue$jscomp$0,
+                  resolve,
+                  reject
+                );
+              }))
+            : resolve(returnValue$jscomp$0);
+        }
+      };
+    };
+    exports.cache = function (fn) {
+      return function () {
+        return fn.apply(null, arguments);
+      };
+    };
+    exports.captureOwnerStack = function () {
+      var getCurrentStack = ReactSharedInternals.getCurrentStack;
+      return null === getCurrentStack ? null : getCurrentStack();
+    };
+    exports.cloneElement = function (element, config, children) {
+      if (null === element || void 0 === element)
+        throw Error(
+          "The argument must be a React element, but you passed " +
+            element +
+            "."
+        );
+      var props = assign({}, element.props),
+        key = element.key,
+        owner = element._owner;
+      if (null != config) {
+        var JSCompiler_inline_result;
+        a: {
+          if (
+            hasOwnProperty.call(config, "ref") &&
+            (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(
+              config,
+              "ref"
+            ).get) &&
+            JSCompiler_inline_result.isReactWarning
+          ) {
+            JSCompiler_inline_result = !1;
+            break a;
+          }
+          JSCompiler_inline_result = void 0 !== config.ref;
+        }
+        JSCompiler_inline_result && (owner = getOwner());
+        hasValidKey(config) &&
+          (checkKeyStringCoercion(config.key), (key = "" + config.key));
+        for (propName in config)
+          !hasOwnProperty.call(config, propName) ||
+            "key" === propName ||
+            "__self" === propName ||
+            "__source" === propName ||
+            ("ref" === propName && void 0 === config.ref) ||
+            (props[propName] = config[propName]);
+      }
+      var propName = arguments.length - 2;
+      if (1 === propName) props.children = children;
+      else if (1 < propName) {
+        JSCompiler_inline_result = Array(propName);
+        for (var i = 0; i < propName; i++)
+          JSCompiler_inline_result[i] = arguments[i + 2];
+        props.children = JSCompiler_inline_result;
+      }
+      props = ReactElement(
+        element.type,
+        key,
+        void 0,
+        void 0,
+        owner,
+        props,
+        element._debugStack,
+        element._debugTask
+      );
+      for (key = 2; key < arguments.length; key++)
+        (owner = arguments[key]),
+          isValidElement(owner) && owner._store && (owner._store.validated = 1);
+      return props;
+    };
+    exports.createContext = function (defaultValue) {
+      defaultValue = {
+        $$typeof: REACT_CONTEXT_TYPE,
+        _currentValue: defaultValue,
+        _currentValue2: defaultValue,
+        _threadCount: 0,
+        Provider: null,
+        Consumer: null
+      };
+      defaultValue.Provider = defaultValue;
+      defaultValue.Consumer = {
+        $$typeof: REACT_CONSUMER_TYPE,
+        _context: defaultValue
+      };
+      defaultValue._currentRenderer = null;
+      defaultValue._currentRenderer2 = null;
+      return defaultValue;
+    };
+    exports.createElement = function (type, config, children) {
+      for (var i = 2; i < arguments.length; i++) {
+        var node = arguments[i];
+        isValidElement(node) && node._store && (node._store.validated = 1);
+      }
+      i = {};
+      node = null;
+      if (null != config)
+        for (propName in (didWarnAboutOldJSXRuntime ||
+          !("__self" in config) ||
+          "key" in config ||
+          ((didWarnAboutOldJSXRuntime = !0),
+          console.warn(
+            "Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform"
+          )),
+        hasValidKey(config) &&
+          (checkKeyStringCoercion(config.key), (node = "" + config.key)),
+        config))
+          hasOwnProperty.call(config, propName) &&
+            "key" !== propName &&
+            "__self" !== propName &&
+            "__source" !== propName &&
+            (i[propName] = config[propName]);
+      var childrenLength = arguments.length - 2;
+      if (1 === childrenLength) i.children = children;
+      else if (1 < childrenLength) {
+        for (
+          var childArray = Array(childrenLength), _i = 0;
+          _i < childrenLength;
+          _i++
+        )
+          childArray[_i] = arguments[_i + 2];
+        Object.freeze && Object.freeze(childArray);
+        i.children = childArray;
+      }
+      if (type && type.defaultProps)
+        for (propName in ((childrenLength = type.defaultProps), childrenLength))
+          void 0 === i[propName] && (i[propName] = childrenLength[propName]);
+      node &&
+        defineKeyPropWarningGetter(
+          i,
+          "function" === typeof type
+            ? type.displayName || type.name || "Unknown"
+            : type
+        );
+      var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
+      return ReactElement(
+        type,
+        node,
+        void 0,
+        void 0,
+        getOwner(),
+        i,
+        propName ? Error("react-stack-top-frame") : unknownOwnerDebugStack,
+        propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+    exports.createRef = function () {
+      var refObject = { current: null };
+      Object.seal(refObject);
+      return refObject;
+    };
+    exports.forwardRef = function (render) {
+      null != render && render.$$typeof === REACT_MEMO_TYPE
+        ? console.error(
+            "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."
+          )
+        : "function" !== typeof render
+          ? console.error(
+              "forwardRef requires a render function but was given %s.",
+              null === render ? "null" : typeof render
+            )
+          : 0 !== render.length &&
+            2 !== render.length &&
+            console.error(
+              "forwardRef render functions accept exactly two parameters: props and ref. %s",
+              1 === render.length
+                ? "Did you forget to use the ref parameter?"
+                : "Any additional parameter will be undefined."
+            );
+      null != render &&
+        null != render.defaultProps &&
+        console.error(
+          "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?"
+        );
+      var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },
+        ownName;
+      Object.defineProperty(elementType, "displayName", {
+        enumerable: !1,
+        configurable: !0,
+        get: function () {
+          return ownName;
+        },
+        set: function (name) {
+          ownName = name;
+          render.name ||
+            render.displayName ||
+            (Object.defineProperty(render, "name", { value: name }),
+            (render.displayName = name));
+        }
+      });
+      return elementType;
+    };
+    exports.isValidElement = isValidElement;
+    exports.lazy = function (ctor) {
+      return {
+        $$typeof: REACT_LAZY_TYPE,
+        _payload: { _status: -1, _result: ctor },
+        _init: lazyInitializer
+      };
+    };
+    exports.memo = function (type, compare) {
+      null == type &&
+        console.error(
+          "memo: The first argument must be a component. Instead received: %s",
+          null === type ? "null" : typeof type
+        );
+      compare = {
+        $$typeof: REACT_MEMO_TYPE,
+        type: type,
+        compare: void 0 === compare ? null : compare
+      };
+      var ownName;
+      Object.defineProperty(compare, "displayName", {
+        enumerable: !1,
+        configurable: !0,
+        get: function () {
+          return ownName;
+        },
+        set: function (name) {
+          ownName = name;
+          type.name ||
+            type.displayName ||
+            (Object.defineProperty(type, "name", { value: name }),
+            (type.displayName = name));
+        }
+      });
+      return compare;
+    };
+    exports.startTransition = function (scope) {
+      var prevTransition = ReactSharedInternals.T,
+        currentTransition = {};
+      ReactSharedInternals.T = currentTransition;
+      currentTransition._updatedFibers = new Set();
+      try {
+        var returnValue = scope(),
+          onStartTransitionFinish = ReactSharedInternals.S;
+        null !== onStartTransitionFinish &&
+          onStartTransitionFinish(currentTransition, returnValue);
+        "object" === typeof returnValue &&
+          null !== returnValue &&
+          "function" === typeof returnValue.then &&
+          returnValue.then(noop, reportGlobalError);
+      } catch (error) {
+        reportGlobalError(error);
+      } finally {
+        null === prevTransition &&
+          currentTransition._updatedFibers &&
+          ((scope = currentTransition._updatedFibers.size),
+          currentTransition._updatedFibers.clear(),
+          10 < scope &&
+            console.warn(
+              "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."
+            )),
+          (ReactSharedInternals.T = prevTransition);
+      }
+    };
+    exports.unstable_useCacheRefresh = function () {
+      return resolveDispatcher().useCacheRefresh();
+    };
+    exports.use = function (usable) {
+      return resolveDispatcher().use(usable);
+    };
+    exports.useActionState = function (action, initialState, permalink) {
+      return resolveDispatcher().useActionState(
+        action,
+        initialState,
+        permalink
+      );
+    };
+    exports.useCallback = function (callback, deps) {
+      return resolveDispatcher().useCallback(callback, deps);
+    };
+    exports.useContext = function (Context) {
+      var dispatcher = resolveDispatcher();
+      Context.$$typeof === REACT_CONSUMER_TYPE &&
+        console.error(
+          "Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?"
+        );
+      return dispatcher.useContext(Context);
+    };
+    exports.useDebugValue = function (value, formatterFn) {
+      return resolveDispatcher().useDebugValue(value, formatterFn);
+    };
+    exports.useDeferredValue = function (value, initialValue) {
+      return resolveDispatcher().useDeferredValue(value, initialValue);
+    };
+    exports.useEffect = function (create, createDeps, update) {
+      null == create &&
+        console.warn(
+          "React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?"
+        );
+      var dispatcher = resolveDispatcher();
+      if ("function" === typeof update)
+        throw Error(
+          "useEffect CRUD overload is not enabled in this build of React."
+        );
+      return dispatcher.useEffect(create, createDeps);
+    };
+    exports.useId = function () {
+      return resolveDispatcher().useId();
+    };
+    exports.useImperativeHandle = function (ref, create, deps) {
+      return resolveDispatcher().useImperativeHandle(ref, create, deps);
+    };
+    exports.useInsertionEffect = function (create, deps) {
+      null == create &&
+        console.warn(
+          "React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?"
+        );
+      return resolveDispatcher().useInsertionEffect(create, deps);
+    };
+    exports.useLayoutEffect = function (create, deps) {
+      null == create &&
+        console.warn(
+          "React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?"
+        );
+      return resolveDispatcher().useLayoutEffect(create, deps);
+    };
+    exports.useMemo = function (create, deps) {
+      return resolveDispatcher().useMemo(create, deps);
+    };
+    exports.useOptimistic = function (passthrough, reducer) {
+      return resolveDispatcher().useOptimistic(passthrough, reducer);
+    };
+    exports.useReducer = function (reducer, initialArg, init) {
+      return resolveDispatcher().useReducer(reducer, initialArg, init);
+    };
+    exports.useRef = function (initialValue) {
+      return resolveDispatcher().useRef(initialValue);
+    };
+    exports.useState = function (initialState) {
+      return resolveDispatcher().useState(initialState);
+    };
+    exports.useSyncExternalStore = function (
+      subscribe,
+      getSnapshot,
+      getServerSnapshot
+    ) {
+      return resolveDispatcher().useSyncExternalStore(
+        subscribe,
+        getSnapshot,
+        getServerSnapshot
+      );
+    };
+    exports.useTransition = function () {
+      return resolveDispatcher().useTransition();
+    };
+    exports.version = "19.1.1";
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+  })();
Index: node_modules/react/cjs/react.production.js
===================================================================
--- node_modules/react/cjs/react.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,546 @@
+/**
+ * @license React
+ * react.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+  REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
+function getIteratorFn(maybeIterable) {
+  if (null === maybeIterable || "object" !== typeof maybeIterable) return null;
+  maybeIterable =
+    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
+    maybeIterable["@@iterator"];
+  return "function" === typeof maybeIterable ? maybeIterable : null;
+}
+var ReactNoopUpdateQueue = {
+    isMounted: function () {
+      return !1;
+    },
+    enqueueForceUpdate: function () {},
+    enqueueReplaceState: function () {},
+    enqueueSetState: function () {}
+  },
+  assign = Object.assign,
+  emptyObject = {};
+function Component(props, context, updater) {
+  this.props = props;
+  this.context = context;
+  this.refs = emptyObject;
+  this.updater = updater || ReactNoopUpdateQueue;
+}
+Component.prototype.isReactComponent = {};
+Component.prototype.setState = function (partialState, callback) {
+  if (
+    "object" !== typeof partialState &&
+    "function" !== typeof partialState &&
+    null != partialState
+  )
+    throw Error(
+      "takes an object of state variables to update or a function which returns an object of state variables."
+    );
+  this.updater.enqueueSetState(this, partialState, callback, "setState");
+};
+Component.prototype.forceUpdate = function (callback) {
+  this.updater.enqueueForceUpdate(this, callback, "forceUpdate");
+};
+function ComponentDummy() {}
+ComponentDummy.prototype = Component.prototype;
+function PureComponent(props, context, updater) {
+  this.props = props;
+  this.context = context;
+  this.refs = emptyObject;
+  this.updater = updater || ReactNoopUpdateQueue;
+}
+var pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());
+pureComponentPrototype.constructor = PureComponent;
+assign(pureComponentPrototype, Component.prototype);
+pureComponentPrototype.isPureReactComponent = !0;
+var isArrayImpl = Array.isArray,
+  ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },
+  hasOwnProperty = Object.prototype.hasOwnProperty;
+function ReactElement(type, key, self, source, owner, props) {
+  self = props.ref;
+  return {
+    $$typeof: REACT_ELEMENT_TYPE,
+    type: type,
+    key: key,
+    ref: void 0 !== self ? self : null,
+    props: props
+  };
+}
+function cloneAndReplaceKey(oldElement, newKey) {
+  return ReactElement(
+    oldElement.type,
+    newKey,
+    void 0,
+    void 0,
+    void 0,
+    oldElement.props
+  );
+}
+function isValidElement(object) {
+  return (
+    "object" === typeof object &&
+    null !== object &&
+    object.$$typeof === REACT_ELEMENT_TYPE
+  );
+}
+function escape(key) {
+  var escaperLookup = { "=": "=0", ":": "=2" };
+  return (
+    "$" +
+    key.replace(/[=:]/g, function (match) {
+      return escaperLookup[match];
+    })
+  );
+}
+var userProvidedKeyEscapeRegex = /\/+/g;
+function getElementKey(element, index) {
+  return "object" === typeof element && null !== element && null != element.key
+    ? escape("" + element.key)
+    : index.toString(36);
+}
+function noop$1() {}
+function resolveThenable(thenable) {
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw thenable.reason;
+    default:
+      switch (
+        ("string" === typeof thenable.status
+          ? thenable.then(noop$1, noop$1)
+          : ((thenable.status = "pending"),
+            thenable.then(
+              function (fulfilledValue) {
+                "pending" === thenable.status &&
+                  ((thenable.status = "fulfilled"),
+                  (thenable.value = fulfilledValue));
+              },
+              function (error) {
+                "pending" === thenable.status &&
+                  ((thenable.status = "rejected"), (thenable.reason = error));
+              }
+            )),
+        thenable.status)
+      ) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+      }
+  }
+  throw thenable;
+}
+function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
+  var type = typeof children;
+  if ("undefined" === type || "boolean" === type) children = null;
+  var invokeCallback = !1;
+  if (null === children) invokeCallback = !0;
+  else
+    switch (type) {
+      case "bigint":
+      case "string":
+      case "number":
+        invokeCallback = !0;
+        break;
+      case "object":
+        switch (children.$$typeof) {
+          case REACT_ELEMENT_TYPE:
+          case REACT_PORTAL_TYPE:
+            invokeCallback = !0;
+            break;
+          case REACT_LAZY_TYPE:
+            return (
+              (invokeCallback = children._init),
+              mapIntoArray(
+                invokeCallback(children._payload),
+                array,
+                escapedPrefix,
+                nameSoFar,
+                callback
+              )
+            );
+        }
+    }
+  if (invokeCallback)
+    return (
+      (callback = callback(children)),
+      (invokeCallback =
+        "" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar),
+      isArrayImpl(callback)
+        ? ((escapedPrefix = ""),
+          null != invokeCallback &&
+            (escapedPrefix =
+              invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"),
+          mapIntoArray(callback, array, escapedPrefix, "", function (c) {
+            return c;
+          }))
+        : null != callback &&
+          (isValidElement(callback) &&
+            (callback = cloneAndReplaceKey(
+              callback,
+              escapedPrefix +
+                (null == callback.key ||
+                (children && children.key === callback.key)
+                  ? ""
+                  : ("" + callback.key).replace(
+                      userProvidedKeyEscapeRegex,
+                      "$&/"
+                    ) + "/") +
+                invokeCallback
+            )),
+          array.push(callback)),
+      1
+    );
+  invokeCallback = 0;
+  var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":";
+  if (isArrayImpl(children))
+    for (var i = 0; i < children.length; i++)
+      (nameSoFar = children[i]),
+        (type = nextNamePrefix + getElementKey(nameSoFar, i)),
+        (invokeCallback += mapIntoArray(
+          nameSoFar,
+          array,
+          escapedPrefix,
+          type,
+          callback
+        ));
+  else if (((i = getIteratorFn(children)), "function" === typeof i))
+    for (
+      children = i.call(children), i = 0;
+      !(nameSoFar = children.next()).done;
+
+    )
+      (nameSoFar = nameSoFar.value),
+        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),
+        (invokeCallback += mapIntoArray(
+          nameSoFar,
+          array,
+          escapedPrefix,
+          type,
+          callback
+        ));
+  else if ("object" === type) {
+    if ("function" === typeof children.then)
+      return mapIntoArray(
+        resolveThenable(children),
+        array,
+        escapedPrefix,
+        nameSoFar,
+        callback
+      );
+    array = String(children);
+    throw Error(
+      "Objects are not valid as a React child (found: " +
+        ("[object Object]" === array
+          ? "object with keys {" + Object.keys(children).join(", ") + "}"
+          : array) +
+        "). If you meant to render a collection of children, use an array instead."
+    );
+  }
+  return invokeCallback;
+}
+function mapChildren(children, func, context) {
+  if (null == children) return children;
+  var result = [],
+    count = 0;
+  mapIntoArray(children, result, "", "", function (child) {
+    return func.call(context, child, count++);
+  });
+  return result;
+}
+function lazyInitializer(payload) {
+  if (-1 === payload._status) {
+    var ctor = payload._result;
+    ctor = ctor();
+    ctor.then(
+      function (moduleObject) {
+        if (0 === payload._status || -1 === payload._status)
+          (payload._status = 1), (payload._result = moduleObject);
+      },
+      function (error) {
+        if (0 === payload._status || -1 === payload._status)
+          (payload._status = 2), (payload._result = error);
+      }
+    );
+    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));
+  }
+  if (1 === payload._status) return payload._result.default;
+  throw payload._result;
+}
+var reportGlobalError =
+  "function" === typeof reportError
+    ? reportError
+    : function (error) {
+        if (
+          "object" === typeof window &&
+          "function" === typeof window.ErrorEvent
+        ) {
+          var event = new window.ErrorEvent("error", {
+            bubbles: !0,
+            cancelable: !0,
+            message:
+              "object" === typeof error &&
+              null !== error &&
+              "string" === typeof error.message
+                ? String(error.message)
+                : String(error),
+            error: error
+          });
+          if (!window.dispatchEvent(event)) return;
+        } else if (
+          "object" === typeof process &&
+          "function" === typeof process.emit
+        ) {
+          process.emit("uncaughtException", error);
+          return;
+        }
+        console.error(error);
+      };
+function noop() {}
+exports.Children = {
+  map: mapChildren,
+  forEach: function (children, forEachFunc, forEachContext) {
+    mapChildren(
+      children,
+      function () {
+        forEachFunc.apply(this, arguments);
+      },
+      forEachContext
+    );
+  },
+  count: function (children) {
+    var n = 0;
+    mapChildren(children, function () {
+      n++;
+    });
+    return n;
+  },
+  toArray: function (children) {
+    return (
+      mapChildren(children, function (child) {
+        return child;
+      }) || []
+    );
+  },
+  only: function (children) {
+    if (!isValidElement(children))
+      throw Error(
+        "React.Children.only expected to receive a single React element child."
+      );
+    return children;
+  }
+};
+exports.Component = Component;
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.Profiler = REACT_PROFILER_TYPE;
+exports.PureComponent = PureComponent;
+exports.StrictMode = REACT_STRICT_MODE_TYPE;
+exports.Suspense = REACT_SUSPENSE_TYPE;
+exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
+  ReactSharedInternals;
+exports.__COMPILER_RUNTIME = {
+  __proto__: null,
+  c: function (size) {
+    return ReactSharedInternals.H.useMemoCache(size);
+  }
+};
+exports.cache = function (fn) {
+  return function () {
+    return fn.apply(null, arguments);
+  };
+};
+exports.cloneElement = function (element, config, children) {
+  if (null === element || void 0 === element)
+    throw Error(
+      "The argument must be a React element, but you passed " + element + "."
+    );
+  var props = assign({}, element.props),
+    key = element.key,
+    owner = void 0;
+  if (null != config)
+    for (propName in (void 0 !== config.ref && (owner = void 0),
+    void 0 !== config.key && (key = "" + config.key),
+    config))
+      !hasOwnProperty.call(config, propName) ||
+        "key" === propName ||
+        "__self" === propName ||
+        "__source" === propName ||
+        ("ref" === propName && void 0 === config.ref) ||
+        (props[propName] = config[propName]);
+  var propName = arguments.length - 2;
+  if (1 === propName) props.children = children;
+  else if (1 < propName) {
+    for (var childArray = Array(propName), i = 0; i < propName; i++)
+      childArray[i] = arguments[i + 2];
+    props.children = childArray;
+  }
+  return ReactElement(element.type, key, void 0, void 0, owner, props);
+};
+exports.createContext = function (defaultValue) {
+  defaultValue = {
+    $$typeof: REACT_CONTEXT_TYPE,
+    _currentValue: defaultValue,
+    _currentValue2: defaultValue,
+    _threadCount: 0,
+    Provider: null,
+    Consumer: null
+  };
+  defaultValue.Provider = defaultValue;
+  defaultValue.Consumer = {
+    $$typeof: REACT_CONSUMER_TYPE,
+    _context: defaultValue
+  };
+  return defaultValue;
+};
+exports.createElement = function (type, config, children) {
+  var propName,
+    props = {},
+    key = null;
+  if (null != config)
+    for (propName in (void 0 !== config.key && (key = "" + config.key), config))
+      hasOwnProperty.call(config, propName) &&
+        "key" !== propName &&
+        "__self" !== propName &&
+        "__source" !== propName &&
+        (props[propName] = config[propName]);
+  var childrenLength = arguments.length - 2;
+  if (1 === childrenLength) props.children = children;
+  else if (1 < childrenLength) {
+    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)
+      childArray[i] = arguments[i + 2];
+    props.children = childArray;
+  }
+  if (type && type.defaultProps)
+    for (propName in ((childrenLength = type.defaultProps), childrenLength))
+      void 0 === props[propName] &&
+        (props[propName] = childrenLength[propName]);
+  return ReactElement(type, key, void 0, void 0, null, props);
+};
+exports.createRef = function () {
+  return { current: null };
+};
+exports.forwardRef = function (render) {
+  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };
+};
+exports.isValidElement = isValidElement;
+exports.lazy = function (ctor) {
+  return {
+    $$typeof: REACT_LAZY_TYPE,
+    _payload: { _status: -1, _result: ctor },
+    _init: lazyInitializer
+  };
+};
+exports.memo = function (type, compare) {
+  return {
+    $$typeof: REACT_MEMO_TYPE,
+    type: type,
+    compare: void 0 === compare ? null : compare
+  };
+};
+exports.startTransition = function (scope) {
+  var prevTransition = ReactSharedInternals.T,
+    currentTransition = {};
+  ReactSharedInternals.T = currentTransition;
+  try {
+    var returnValue = scope(),
+      onStartTransitionFinish = ReactSharedInternals.S;
+    null !== onStartTransitionFinish &&
+      onStartTransitionFinish(currentTransition, returnValue);
+    "object" === typeof returnValue &&
+      null !== returnValue &&
+      "function" === typeof returnValue.then &&
+      returnValue.then(noop, reportGlobalError);
+  } catch (error) {
+    reportGlobalError(error);
+  } finally {
+    ReactSharedInternals.T = prevTransition;
+  }
+};
+exports.unstable_useCacheRefresh = function () {
+  return ReactSharedInternals.H.useCacheRefresh();
+};
+exports.use = function (usable) {
+  return ReactSharedInternals.H.use(usable);
+};
+exports.useActionState = function (action, initialState, permalink) {
+  return ReactSharedInternals.H.useActionState(action, initialState, permalink);
+};
+exports.useCallback = function (callback, deps) {
+  return ReactSharedInternals.H.useCallback(callback, deps);
+};
+exports.useContext = function (Context) {
+  return ReactSharedInternals.H.useContext(Context);
+};
+exports.useDebugValue = function () {};
+exports.useDeferredValue = function (value, initialValue) {
+  return ReactSharedInternals.H.useDeferredValue(value, initialValue);
+};
+exports.useEffect = function (create, createDeps, update) {
+  var dispatcher = ReactSharedInternals.H;
+  if ("function" === typeof update)
+    throw Error(
+      "useEffect CRUD overload is not enabled in this build of React."
+    );
+  return dispatcher.useEffect(create, createDeps);
+};
+exports.useId = function () {
+  return ReactSharedInternals.H.useId();
+};
+exports.useImperativeHandle = function (ref, create, deps) {
+  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);
+};
+exports.useInsertionEffect = function (create, deps) {
+  return ReactSharedInternals.H.useInsertionEffect(create, deps);
+};
+exports.useLayoutEffect = function (create, deps) {
+  return ReactSharedInternals.H.useLayoutEffect(create, deps);
+};
+exports.useMemo = function (create, deps) {
+  return ReactSharedInternals.H.useMemo(create, deps);
+};
+exports.useOptimistic = function (passthrough, reducer) {
+  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);
+};
+exports.useReducer = function (reducer, initialArg, init) {
+  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);
+};
+exports.useRef = function (initialValue) {
+  return ReactSharedInternals.H.useRef(initialValue);
+};
+exports.useState = function (initialState) {
+  return ReactSharedInternals.H.useState(initialState);
+};
+exports.useSyncExternalStore = function (
+  subscribe,
+  getSnapshot,
+  getServerSnapshot
+) {
+  return ReactSharedInternals.H.useSyncExternalStore(
+    subscribe,
+    getSnapshot,
+    getServerSnapshot
+  );
+};
+exports.useTransition = function () {
+  return ReactSharedInternals.H.useTransition();
+};
+exports.version = "19.1.1";
Index: node_modules/react/cjs/react.react-server.development.js
===================================================================
--- node_modules/react/cjs/react.react-server.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react.react-server.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,817 @@
+/**
+ * @license React
+ * react.react-server.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function getIteratorFn(maybeIterable) {
+      if (null === maybeIterable || "object" !== typeof maybeIterable)
+        return null;
+      maybeIterable =
+        (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
+        maybeIterable["@@iterator"];
+      return "function" === typeof maybeIterable ? maybeIterable : null;
+    }
+    function testStringCoercion(value) {
+      return "" + value;
+    }
+    function checkKeyStringCoercion(value) {
+      try {
+        testStringCoercion(value);
+        var JSCompiler_inline_result = !1;
+      } catch (e) {
+        JSCompiler_inline_result = !0;
+      }
+      if (JSCompiler_inline_result) {
+        JSCompiler_inline_result = console;
+        var JSCompiler_temp_const = JSCompiler_inline_result.error;
+        var JSCompiler_inline_result$jscomp$0 =
+          ("function" === typeof Symbol &&
+            Symbol.toStringTag &&
+            value[Symbol.toStringTag]) ||
+          value.constructor.name ||
+          "Object";
+        JSCompiler_temp_const.call(
+          JSCompiler_inline_result,
+          "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
+          JSCompiler_inline_result$jscomp$0
+        );
+        return testStringCoercion(value);
+      }
+    }
+    function getComponentNameFromType(type) {
+      if (null == type) return null;
+      if ("function" === typeof type)
+        return type.$$typeof === REACT_CLIENT_REFERENCE
+          ? null
+          : type.displayName || type.name || null;
+      if ("string" === typeof type) return type;
+      switch (type) {
+        case REACT_FRAGMENT_TYPE:
+          return "Fragment";
+        case REACT_PROFILER_TYPE:
+          return "Profiler";
+        case REACT_STRICT_MODE_TYPE:
+          return "StrictMode";
+        case REACT_SUSPENSE_TYPE:
+          return "Suspense";
+        case REACT_SUSPENSE_LIST_TYPE:
+          return "SuspenseList";
+        case REACT_ACTIVITY_TYPE:
+          return "Activity";
+      }
+      if ("object" === typeof type)
+        switch (
+          ("number" === typeof type.tag &&
+            console.error(
+              "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
+            ),
+          type.$$typeof)
+        ) {
+          case REACT_PORTAL_TYPE:
+            return "Portal";
+          case REACT_CONTEXT_TYPE:
+            return (type.displayName || "Context") + ".Provider";
+          case REACT_CONSUMER_TYPE:
+            return (type._context.displayName || "Context") + ".Consumer";
+          case REACT_FORWARD_REF_TYPE:
+            var innerType = type.render;
+            type = type.displayName;
+            type ||
+              ((type = innerType.displayName || innerType.name || ""),
+              (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
+            return type;
+          case REACT_MEMO_TYPE:
+            return (
+              (innerType = type.displayName || null),
+              null !== innerType
+                ? innerType
+                : getComponentNameFromType(type.type) || "Memo"
+            );
+          case REACT_LAZY_TYPE:
+            innerType = type._payload;
+            type = type._init;
+            try {
+              return getComponentNameFromType(type(innerType));
+            } catch (x) {}
+        }
+      return null;
+    }
+    function getTaskName(type) {
+      if (type === REACT_FRAGMENT_TYPE) return "<>";
+      if (
+        "object" === typeof type &&
+        null !== type &&
+        type.$$typeof === REACT_LAZY_TYPE
+      )
+        return "<...>";
+      try {
+        var name = getComponentNameFromType(type);
+        return name ? "<" + name + ">" : "<...>";
+      } catch (x) {
+        return "<...>";
+      }
+    }
+    function getOwner() {
+      var dispatcher = ReactSharedInternals.A;
+      return null === dispatcher ? null : dispatcher.getOwner();
+    }
+    function UnknownOwner() {
+      return Error("react-stack-top-frame");
+    }
+    function hasValidKey(config) {
+      if (hasOwnProperty.call(config, "key")) {
+        var getter = Object.getOwnPropertyDescriptor(config, "key").get;
+        if (getter && getter.isReactWarning) return !1;
+      }
+      return void 0 !== config.key;
+    }
+    function defineKeyPropWarningGetter(props, displayName) {
+      function warnAboutAccessingKey() {
+        specialPropKeyWarningShown ||
+          ((specialPropKeyWarningShown = !0),
+          console.error(
+            "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
+            displayName
+          ));
+      }
+      warnAboutAccessingKey.isReactWarning = !0;
+      Object.defineProperty(props, "key", {
+        get: warnAboutAccessingKey,
+        configurable: !0
+      });
+    }
+    function elementRefGetterWithDeprecationWarning() {
+      var componentName = getComponentNameFromType(this.type);
+      didWarnAboutElementRef[componentName] ||
+        ((didWarnAboutElementRef[componentName] = !0),
+        console.error(
+          "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
+        ));
+      componentName = this.props.ref;
+      return void 0 !== componentName ? componentName : null;
+    }
+    function ReactElement(
+      type,
+      key,
+      self,
+      source,
+      owner,
+      props,
+      debugStack,
+      debugTask
+    ) {
+      self = props.ref;
+      type = {
+        $$typeof: REACT_ELEMENT_TYPE,
+        type: type,
+        key: key,
+        props: props,
+        _owner: owner
+      };
+      null !== (void 0 !== self ? self : null)
+        ? Object.defineProperty(type, "ref", {
+            enumerable: !1,
+            get: elementRefGetterWithDeprecationWarning
+          })
+        : Object.defineProperty(type, "ref", { enumerable: !1, value: null });
+      type._store = {};
+      Object.defineProperty(type._store, "validated", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: 0
+      });
+      Object.defineProperty(type, "_debugInfo", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: null
+      });
+      Object.defineProperty(type, "_debugStack", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugStack
+      });
+      Object.defineProperty(type, "_debugTask", {
+        configurable: !1,
+        enumerable: !1,
+        writable: !0,
+        value: debugTask
+      });
+      Object.freeze && (Object.freeze(type.props), Object.freeze(type));
+      return type;
+    }
+    function cloneAndReplaceKey(oldElement, newKey) {
+      newKey = ReactElement(
+        oldElement.type,
+        newKey,
+        void 0,
+        void 0,
+        oldElement._owner,
+        oldElement.props,
+        oldElement._debugStack,
+        oldElement._debugTask
+      );
+      oldElement._store &&
+        (newKey._store.validated = oldElement._store.validated);
+      return newKey;
+    }
+    function isValidElement(object) {
+      return (
+        "object" === typeof object &&
+        null !== object &&
+        object.$$typeof === REACT_ELEMENT_TYPE
+      );
+    }
+    function escape(key) {
+      var escaperLookup = { "=": "=0", ":": "=2" };
+      return (
+        "$" +
+        key.replace(/[=:]/g, function (match) {
+          return escaperLookup[match];
+        })
+      );
+    }
+    function getElementKey(element, index) {
+      return "object" === typeof element &&
+        null !== element &&
+        null != element.key
+        ? (checkKeyStringCoercion(element.key), escape("" + element.key))
+        : index.toString(36);
+    }
+    function noop() {}
+    function resolveThenable(thenable) {
+      switch (thenable.status) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+        default:
+          switch (
+            ("string" === typeof thenable.status
+              ? thenable.then(noop, noop)
+              : ((thenable.status = "pending"),
+                thenable.then(
+                  function (fulfilledValue) {
+                    "pending" === thenable.status &&
+                      ((thenable.status = "fulfilled"),
+                      (thenable.value = fulfilledValue));
+                  },
+                  function (error) {
+                    "pending" === thenable.status &&
+                      ((thenable.status = "rejected"),
+                      (thenable.reason = error));
+                  }
+                )),
+            thenable.status)
+          ) {
+            case "fulfilled":
+              return thenable.value;
+            case "rejected":
+              throw thenable.reason;
+          }
+      }
+      throw thenable;
+    }
+    function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
+      var type = typeof children;
+      if ("undefined" === type || "boolean" === type) children = null;
+      var invokeCallback = !1;
+      if (null === children) invokeCallback = !0;
+      else
+        switch (type) {
+          case "bigint":
+          case "string":
+          case "number":
+            invokeCallback = !0;
+            break;
+          case "object":
+            switch (children.$$typeof) {
+              case REACT_ELEMENT_TYPE:
+              case REACT_PORTAL_TYPE:
+                invokeCallback = !0;
+                break;
+              case REACT_LAZY_TYPE:
+                return (
+                  (invokeCallback = children._init),
+                  mapIntoArray(
+                    invokeCallback(children._payload),
+                    array,
+                    escapedPrefix,
+                    nameSoFar,
+                    callback
+                  )
+                );
+            }
+        }
+      if (invokeCallback) {
+        invokeCallback = children;
+        callback = callback(invokeCallback);
+        var childKey =
+          "" === nameSoFar ? "." + getElementKey(invokeCallback, 0) : nameSoFar;
+        isArrayImpl(callback)
+          ? ((escapedPrefix = ""),
+            null != childKey &&
+              (escapedPrefix =
+                childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"),
+            mapIntoArray(callback, array, escapedPrefix, "", function (c) {
+              return c;
+            }))
+          : null != callback &&
+            (isValidElement(callback) &&
+              (null != callback.key &&
+                ((invokeCallback && invokeCallback.key === callback.key) ||
+                  checkKeyStringCoercion(callback.key)),
+              (escapedPrefix = cloneAndReplaceKey(
+                callback,
+                escapedPrefix +
+                  (null == callback.key ||
+                  (invokeCallback && invokeCallback.key === callback.key)
+                    ? ""
+                    : ("" + callback.key).replace(
+                        userProvidedKeyEscapeRegex,
+                        "$&/"
+                      ) + "/") +
+                  childKey
+              )),
+              "" !== nameSoFar &&
+                null != invokeCallback &&
+                isValidElement(invokeCallback) &&
+                null == invokeCallback.key &&
+                invokeCallback._store &&
+                !invokeCallback._store.validated &&
+                (escapedPrefix._store.validated = 2),
+              (callback = escapedPrefix)),
+            array.push(callback));
+        return 1;
+      }
+      invokeCallback = 0;
+      childKey = "" === nameSoFar ? "." : nameSoFar + ":";
+      if (isArrayImpl(children))
+        for (var i = 0; i < children.length; i++)
+          (nameSoFar = children[i]),
+            (type = childKey + getElementKey(nameSoFar, i)),
+            (invokeCallback += mapIntoArray(
+              nameSoFar,
+              array,
+              escapedPrefix,
+              type,
+              callback
+            ));
+      else if (((i = getIteratorFn(children)), "function" === typeof i))
+        for (
+          i === children.entries &&
+            (didWarnAboutMaps ||
+              console.warn(
+                "Using Maps as children is not supported. Use an array of keyed ReactElements instead."
+              ),
+            (didWarnAboutMaps = !0)),
+            children = i.call(children),
+            i = 0;
+          !(nameSoFar = children.next()).done;
+
+        )
+          (nameSoFar = nameSoFar.value),
+            (type = childKey + getElementKey(nameSoFar, i++)),
+            (invokeCallback += mapIntoArray(
+              nameSoFar,
+              array,
+              escapedPrefix,
+              type,
+              callback
+            ));
+      else if ("object" === type) {
+        if ("function" === typeof children.then)
+          return mapIntoArray(
+            resolveThenable(children),
+            array,
+            escapedPrefix,
+            nameSoFar,
+            callback
+          );
+        array = String(children);
+        throw Error(
+          "Objects are not valid as a React child (found: " +
+            ("[object Object]" === array
+              ? "object with keys {" + Object.keys(children).join(", ") + "}"
+              : array) +
+            "). If you meant to render a collection of children, use an array instead."
+        );
+      }
+      return invokeCallback;
+    }
+    function mapChildren(children, func, context) {
+      if (null == children) return children;
+      var result = [],
+        count = 0;
+      mapIntoArray(children, result, "", "", function (child) {
+        return func.call(context, child, count++);
+      });
+      return result;
+    }
+    function resolveDispatcher() {
+      var dispatcher = ReactSharedInternals.H;
+      null === dispatcher &&
+        console.error(
+          "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."
+        );
+      return dispatcher;
+    }
+    function lazyInitializer(payload) {
+      if (-1 === payload._status) {
+        var ctor = payload._result;
+        ctor = ctor();
+        ctor.then(
+          function (moduleObject) {
+            if (0 === payload._status || -1 === payload._status)
+              (payload._status = 1), (payload._result = moduleObject);
+          },
+          function (error) {
+            if (0 === payload._status || -1 === payload._status)
+              (payload._status = 2), (payload._result = error);
+          }
+        );
+        -1 === payload._status &&
+          ((payload._status = 0), (payload._result = ctor));
+      }
+      if (1 === payload._status)
+        return (
+          (ctor = payload._result),
+          void 0 === ctor &&
+            console.error(
+              "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n  const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?",
+              ctor
+            ),
+          "default" in ctor ||
+            console.error(
+              "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n  const MyComponent = lazy(() => import('./MyComponent'))",
+              ctor
+            ),
+          ctor.default
+        );
+      throw payload._result;
+    }
+    function createCacheRoot() {
+      return new WeakMap();
+    }
+    function createCacheNode() {
+      return { s: 0, v: void 0, o: null, p: null };
+    }
+    var ReactSharedInternals = {
+        H: null,
+        A: null,
+        getCurrentStack: null,
+        recentlyCreatedOwnerStacks: 0
+      },
+      isArrayImpl = Array.isArray,
+      REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+      REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+      REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+      REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+      REACT_PROFILER_TYPE = Symbol.for("react.profiler");
+    Symbol.for("react.provider");
+    var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
+      REACT_CONTEXT_TYPE = Symbol.for("react.context"),
+      REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+      REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+      REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
+      REACT_MEMO_TYPE = Symbol.for("react.memo"),
+      REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+      REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
+      MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
+      REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
+      hasOwnProperty = Object.prototype.hasOwnProperty,
+      assign = Object.assign,
+      createTask = console.createTask
+        ? console.createTask
+        : function () {
+            return null;
+          },
+      createFakeCallStack = {
+        react_stack_bottom_frame: function (callStackForError) {
+          return callStackForError();
+        }
+      },
+      specialPropKeyWarningShown,
+      didWarnAboutOldJSXRuntime;
+    var didWarnAboutElementRef = {};
+    var unknownOwnerDebugStack =
+      createFakeCallStack.react_stack_bottom_frame.bind(
+        createFakeCallStack,
+        UnknownOwner
+      )();
+    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
+    var didWarnAboutMaps = !1,
+      userProvidedKeyEscapeRegex = /\/+/g;
+    exports.Children = {
+      map: mapChildren,
+      forEach: function (children, forEachFunc, forEachContext) {
+        mapChildren(
+          children,
+          function () {
+            forEachFunc.apply(this, arguments);
+          },
+          forEachContext
+        );
+      },
+      count: function (children) {
+        var n = 0;
+        mapChildren(children, function () {
+          n++;
+        });
+        return n;
+      },
+      toArray: function (children) {
+        return (
+          mapChildren(children, function (child) {
+            return child;
+          }) || []
+        );
+      },
+      only: function (children) {
+        if (!isValidElement(children))
+          throw Error(
+            "React.Children.only expected to receive a single React element child."
+          );
+        return children;
+      }
+    };
+    exports.Fragment = REACT_FRAGMENT_TYPE;
+    exports.Profiler = REACT_PROFILER_TYPE;
+    exports.StrictMode = REACT_STRICT_MODE_TYPE;
+    exports.Suspense = REACT_SUSPENSE_TYPE;
+    exports.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
+      ReactSharedInternals;
+    exports.cache = function (fn) {
+      return function () {
+        var dispatcher = ReactSharedInternals.A;
+        if (!dispatcher) return fn.apply(null, arguments);
+        var fnMap = dispatcher.getCacheForType(createCacheRoot);
+        dispatcher = fnMap.get(fn);
+        void 0 === dispatcher &&
+          ((dispatcher = createCacheNode()), fnMap.set(fn, dispatcher));
+        fnMap = 0;
+        for (var l = arguments.length; fnMap < l; fnMap++) {
+          var arg = arguments[fnMap];
+          if (
+            "function" === typeof arg ||
+            ("object" === typeof arg && null !== arg)
+          ) {
+            var objectCache = dispatcher.o;
+            null === objectCache &&
+              (dispatcher.o = objectCache = new WeakMap());
+            dispatcher = objectCache.get(arg);
+            void 0 === dispatcher &&
+              ((dispatcher = createCacheNode()),
+              objectCache.set(arg, dispatcher));
+          } else
+            (objectCache = dispatcher.p),
+              null === objectCache && (dispatcher.p = objectCache = new Map()),
+              (dispatcher = objectCache.get(arg)),
+              void 0 === dispatcher &&
+                ((dispatcher = createCacheNode()),
+                objectCache.set(arg, dispatcher));
+        }
+        if (1 === dispatcher.s) return dispatcher.v;
+        if (2 === dispatcher.s) throw dispatcher.v;
+        try {
+          var result = fn.apply(null, arguments);
+          fnMap = dispatcher;
+          fnMap.s = 1;
+          return (fnMap.v = result);
+        } catch (error) {
+          throw (
+            ((result = dispatcher), (result.s = 2), (result.v = error), error)
+          );
+        }
+      };
+    };
+    exports.captureOwnerStack = function () {
+      var getCurrentStack = ReactSharedInternals.getCurrentStack;
+      return null === getCurrentStack ? null : getCurrentStack();
+    };
+    exports.cloneElement = function (element, config, children) {
+      if (null === element || void 0 === element)
+        throw Error(
+          "The argument must be a React element, but you passed " +
+            element +
+            "."
+        );
+      var props = assign({}, element.props),
+        key = element.key,
+        owner = element._owner;
+      if (null != config) {
+        var JSCompiler_inline_result;
+        a: {
+          if (
+            hasOwnProperty.call(config, "ref") &&
+            (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(
+              config,
+              "ref"
+            ).get) &&
+            JSCompiler_inline_result.isReactWarning
+          ) {
+            JSCompiler_inline_result = !1;
+            break a;
+          }
+          JSCompiler_inline_result = void 0 !== config.ref;
+        }
+        JSCompiler_inline_result && (owner = getOwner());
+        hasValidKey(config) &&
+          (checkKeyStringCoercion(config.key), (key = "" + config.key));
+        for (propName in config)
+          !hasOwnProperty.call(config, propName) ||
+            "key" === propName ||
+            "__self" === propName ||
+            "__source" === propName ||
+            ("ref" === propName && void 0 === config.ref) ||
+            (props[propName] = config[propName]);
+      }
+      var propName = arguments.length - 2;
+      if (1 === propName) props.children = children;
+      else if (1 < propName) {
+        JSCompiler_inline_result = Array(propName);
+        for (var i = 0; i < propName; i++)
+          JSCompiler_inline_result[i] = arguments[i + 2];
+        props.children = JSCompiler_inline_result;
+      }
+      props = ReactElement(
+        element.type,
+        key,
+        void 0,
+        void 0,
+        owner,
+        props,
+        element._debugStack,
+        element._debugTask
+      );
+      for (key = 2; key < arguments.length; key++)
+        (owner = arguments[key]),
+          isValidElement(owner) && owner._store && (owner._store.validated = 1);
+      return props;
+    };
+    exports.createElement = function (type, config, children) {
+      for (var i = 2; i < arguments.length; i++) {
+        var node = arguments[i];
+        isValidElement(node) && node._store && (node._store.validated = 1);
+      }
+      i = {};
+      node = null;
+      if (null != config)
+        for (propName in (didWarnAboutOldJSXRuntime ||
+          !("__self" in config) ||
+          "key" in config ||
+          ((didWarnAboutOldJSXRuntime = !0),
+          console.warn(
+            "Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform"
+          )),
+        hasValidKey(config) &&
+          (checkKeyStringCoercion(config.key), (node = "" + config.key)),
+        config))
+          hasOwnProperty.call(config, propName) &&
+            "key" !== propName &&
+            "__self" !== propName &&
+            "__source" !== propName &&
+            (i[propName] = config[propName]);
+      var childrenLength = arguments.length - 2;
+      if (1 === childrenLength) i.children = children;
+      else if (1 < childrenLength) {
+        for (
+          var childArray = Array(childrenLength), _i = 0;
+          _i < childrenLength;
+          _i++
+        )
+          childArray[_i] = arguments[_i + 2];
+        Object.freeze && Object.freeze(childArray);
+        i.children = childArray;
+      }
+      if (type && type.defaultProps)
+        for (propName in ((childrenLength = type.defaultProps), childrenLength))
+          void 0 === i[propName] && (i[propName] = childrenLength[propName]);
+      node &&
+        defineKeyPropWarningGetter(
+          i,
+          "function" === typeof type
+            ? type.displayName || type.name || "Unknown"
+            : type
+        );
+      var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
+      return ReactElement(
+        type,
+        node,
+        void 0,
+        void 0,
+        getOwner(),
+        i,
+        propName ? Error("react-stack-top-frame") : unknownOwnerDebugStack,
+        propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask
+      );
+    };
+    exports.createRef = function () {
+      var refObject = { current: null };
+      Object.seal(refObject);
+      return refObject;
+    };
+    exports.forwardRef = function (render) {
+      null != render && render.$$typeof === REACT_MEMO_TYPE
+        ? console.error(
+            "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."
+          )
+        : "function" !== typeof render
+          ? console.error(
+              "forwardRef requires a render function but was given %s.",
+              null === render ? "null" : typeof render
+            )
+          : 0 !== render.length &&
+            2 !== render.length &&
+            console.error(
+              "forwardRef render functions accept exactly two parameters: props and ref. %s",
+              1 === render.length
+                ? "Did you forget to use the ref parameter?"
+                : "Any additional parameter will be undefined."
+            );
+      null != render &&
+        null != render.defaultProps &&
+        console.error(
+          "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?"
+        );
+      var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },
+        ownName;
+      Object.defineProperty(elementType, "displayName", {
+        enumerable: !1,
+        configurable: !0,
+        get: function () {
+          return ownName;
+        },
+        set: function (name) {
+          ownName = name;
+          render.name ||
+            render.displayName ||
+            (Object.defineProperty(render, "name", { value: name }),
+            (render.displayName = name));
+        }
+      });
+      return elementType;
+    };
+    exports.isValidElement = isValidElement;
+    exports.lazy = function (ctor) {
+      return {
+        $$typeof: REACT_LAZY_TYPE,
+        _payload: { _status: -1, _result: ctor },
+        _init: lazyInitializer
+      };
+    };
+    exports.memo = function (type, compare) {
+      null == type &&
+        console.error(
+          "memo: The first argument must be a component. Instead received: %s",
+          null === type ? "null" : typeof type
+        );
+      compare = {
+        $$typeof: REACT_MEMO_TYPE,
+        type: type,
+        compare: void 0 === compare ? null : compare
+      };
+      var ownName;
+      Object.defineProperty(compare, "displayName", {
+        enumerable: !1,
+        configurable: !0,
+        get: function () {
+          return ownName;
+        },
+        set: function (name) {
+          ownName = name;
+          type.name ||
+            type.displayName ||
+            (Object.defineProperty(type, "name", { value: name }),
+            (type.displayName = name));
+        }
+      });
+      return compare;
+    };
+    exports.use = function (usable) {
+      return resolveDispatcher().use(usable);
+    };
+    exports.useCallback = function (callback, deps) {
+      return resolveDispatcher().useCallback(callback, deps);
+    };
+    exports.useDebugValue = function (value, formatterFn) {
+      return resolveDispatcher().useDebugValue(value, formatterFn);
+    };
+    exports.useId = function () {
+      return resolveDispatcher().useId();
+    };
+    exports.useMemo = function (create, deps) {
+      return resolveDispatcher().useMemo(create, deps);
+    };
+    exports.version = "19.1.1";
+  })();
Index: node_modules/react/cjs/react.react-server.production.js
===================================================================
--- node_modules/react/cjs/react.react-server.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/cjs/react.react-server.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,429 @@
+/**
+ * @license React
+ * react.react-server.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var ReactSharedInternals = { H: null, A: null };
+function formatProdErrorMessage(code) {
+  var url = "https://react.dev/errors/" + code;
+  if (1 < arguments.length) {
+    url += "?args[]=" + encodeURIComponent(arguments[1]);
+    for (var i = 2; i < arguments.length; i++)
+      url += "&args[]=" + encodeURIComponent(arguments[i]);
+  }
+  return (
+    "Minified React error #" +
+    code +
+    "; visit " +
+    url +
+    " for the full message or use the non-minified dev environment for full errors and additional helpful warnings."
+  );
+}
+var isArrayImpl = Array.isArray,
+  REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
+  REACT_PORTAL_TYPE = Symbol.for("react.portal"),
+  REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
+  REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
+  REACT_PROFILER_TYPE = Symbol.for("react.profiler"),
+  REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
+  REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
+  REACT_MEMO_TYPE = Symbol.for("react.memo"),
+  REACT_LAZY_TYPE = Symbol.for("react.lazy"),
+  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
+function getIteratorFn(maybeIterable) {
+  if (null === maybeIterable || "object" !== typeof maybeIterable) return null;
+  maybeIterable =
+    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
+    maybeIterable["@@iterator"];
+  return "function" === typeof maybeIterable ? maybeIterable : null;
+}
+var hasOwnProperty = Object.prototype.hasOwnProperty,
+  assign = Object.assign;
+function ReactElement(type, key, self, source, owner, props) {
+  self = props.ref;
+  return {
+    $$typeof: REACT_ELEMENT_TYPE,
+    type: type,
+    key: key,
+    ref: void 0 !== self ? self : null,
+    props: props
+  };
+}
+function cloneAndReplaceKey(oldElement, newKey) {
+  return ReactElement(
+    oldElement.type,
+    newKey,
+    void 0,
+    void 0,
+    void 0,
+    oldElement.props
+  );
+}
+function isValidElement(object) {
+  return (
+    "object" === typeof object &&
+    null !== object &&
+    object.$$typeof === REACT_ELEMENT_TYPE
+  );
+}
+function escape(key) {
+  var escaperLookup = { "=": "=0", ":": "=2" };
+  return (
+    "$" +
+    key.replace(/[=:]/g, function (match) {
+      return escaperLookup[match];
+    })
+  );
+}
+var userProvidedKeyEscapeRegex = /\/+/g;
+function getElementKey(element, index) {
+  return "object" === typeof element && null !== element && null != element.key
+    ? escape("" + element.key)
+    : index.toString(36);
+}
+function noop() {}
+function resolveThenable(thenable) {
+  switch (thenable.status) {
+    case "fulfilled":
+      return thenable.value;
+    case "rejected":
+      throw thenable.reason;
+    default:
+      switch (
+        ("string" === typeof thenable.status
+          ? thenable.then(noop, noop)
+          : ((thenable.status = "pending"),
+            thenable.then(
+              function (fulfilledValue) {
+                "pending" === thenable.status &&
+                  ((thenable.status = "fulfilled"),
+                  (thenable.value = fulfilledValue));
+              },
+              function (error) {
+                "pending" === thenable.status &&
+                  ((thenable.status = "rejected"), (thenable.reason = error));
+              }
+            )),
+        thenable.status)
+      ) {
+        case "fulfilled":
+          return thenable.value;
+        case "rejected":
+          throw thenable.reason;
+      }
+  }
+  throw thenable;
+}
+function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
+  var type = typeof children;
+  if ("undefined" === type || "boolean" === type) children = null;
+  var invokeCallback = !1;
+  if (null === children) invokeCallback = !0;
+  else
+    switch (type) {
+      case "bigint":
+      case "string":
+      case "number":
+        invokeCallback = !0;
+        break;
+      case "object":
+        switch (children.$$typeof) {
+          case REACT_ELEMENT_TYPE:
+          case REACT_PORTAL_TYPE:
+            invokeCallback = !0;
+            break;
+          case REACT_LAZY_TYPE:
+            return (
+              (invokeCallback = children._init),
+              mapIntoArray(
+                invokeCallback(children._payload),
+                array,
+                escapedPrefix,
+                nameSoFar,
+                callback
+              )
+            );
+        }
+    }
+  if (invokeCallback)
+    return (
+      (callback = callback(children)),
+      (invokeCallback =
+        "" === nameSoFar ? "." + getElementKey(children, 0) : nameSoFar),
+      isArrayImpl(callback)
+        ? ((escapedPrefix = ""),
+          null != invokeCallback &&
+            (escapedPrefix =
+              invokeCallback.replace(userProvidedKeyEscapeRegex, "$&/") + "/"),
+          mapIntoArray(callback, array, escapedPrefix, "", function (c) {
+            return c;
+          }))
+        : null != callback &&
+          (isValidElement(callback) &&
+            (callback = cloneAndReplaceKey(
+              callback,
+              escapedPrefix +
+                (null == callback.key ||
+                (children && children.key === callback.key)
+                  ? ""
+                  : ("" + callback.key).replace(
+                      userProvidedKeyEscapeRegex,
+                      "$&/"
+                    ) + "/") +
+                invokeCallback
+            )),
+          array.push(callback)),
+      1
+    );
+  invokeCallback = 0;
+  var nextNamePrefix = "" === nameSoFar ? "." : nameSoFar + ":";
+  if (isArrayImpl(children))
+    for (var i = 0; i < children.length; i++)
+      (nameSoFar = children[i]),
+        (type = nextNamePrefix + getElementKey(nameSoFar, i)),
+        (invokeCallback += mapIntoArray(
+          nameSoFar,
+          array,
+          escapedPrefix,
+          type,
+          callback
+        ));
+  else if (((i = getIteratorFn(children)), "function" === typeof i))
+    for (
+      children = i.call(children), i = 0;
+      !(nameSoFar = children.next()).done;
+
+    )
+      (nameSoFar = nameSoFar.value),
+        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),
+        (invokeCallback += mapIntoArray(
+          nameSoFar,
+          array,
+          escapedPrefix,
+          type,
+          callback
+        ));
+  else if ("object" === type) {
+    if ("function" === typeof children.then)
+      return mapIntoArray(
+        resolveThenable(children),
+        array,
+        escapedPrefix,
+        nameSoFar,
+        callback
+      );
+    array = String(children);
+    throw Error(
+      formatProdErrorMessage(
+        31,
+        "[object Object]" === array
+          ? "object with keys {" + Object.keys(children).join(", ") + "}"
+          : array
+      )
+    );
+  }
+  return invokeCallback;
+}
+function mapChildren(children, func, context) {
+  if (null == children) return children;
+  var result = [],
+    count = 0;
+  mapIntoArray(children, result, "", "", function (child) {
+    return func.call(context, child, count++);
+  });
+  return result;
+}
+function lazyInitializer(payload) {
+  if (-1 === payload._status) {
+    var ctor = payload._result;
+    ctor = ctor();
+    ctor.then(
+      function (moduleObject) {
+        if (0 === payload._status || -1 === payload._status)
+          (payload._status = 1), (payload._result = moduleObject);
+      },
+      function (error) {
+        if (0 === payload._status || -1 === payload._status)
+          (payload._status = 2), (payload._result = error);
+      }
+    );
+    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));
+  }
+  if (1 === payload._status) return payload._result.default;
+  throw payload._result;
+}
+function createCacheRoot() {
+  return new WeakMap();
+}
+function createCacheNode() {
+  return { s: 0, v: void 0, o: null, p: null };
+}
+exports.Children = {
+  map: mapChildren,
+  forEach: function (children, forEachFunc, forEachContext) {
+    mapChildren(
+      children,
+      function () {
+        forEachFunc.apply(this, arguments);
+      },
+      forEachContext
+    );
+  },
+  count: function (children) {
+    var n = 0;
+    mapChildren(children, function () {
+      n++;
+    });
+    return n;
+  },
+  toArray: function (children) {
+    return (
+      mapChildren(children, function (child) {
+        return child;
+      }) || []
+    );
+  },
+  only: function (children) {
+    if (!isValidElement(children)) throw Error(formatProdErrorMessage(143));
+    return children;
+  }
+};
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.Profiler = REACT_PROFILER_TYPE;
+exports.StrictMode = REACT_STRICT_MODE_TYPE;
+exports.Suspense = REACT_SUSPENSE_TYPE;
+exports.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =
+  ReactSharedInternals;
+exports.cache = function (fn) {
+  return function () {
+    var dispatcher = ReactSharedInternals.A;
+    if (!dispatcher) return fn.apply(null, arguments);
+    var fnMap = dispatcher.getCacheForType(createCacheRoot);
+    dispatcher = fnMap.get(fn);
+    void 0 === dispatcher &&
+      ((dispatcher = createCacheNode()), fnMap.set(fn, dispatcher));
+    fnMap = 0;
+    for (var l = arguments.length; fnMap < l; fnMap++) {
+      var arg = arguments[fnMap];
+      if (
+        "function" === typeof arg ||
+        ("object" === typeof arg && null !== arg)
+      ) {
+        var objectCache = dispatcher.o;
+        null === objectCache && (dispatcher.o = objectCache = new WeakMap());
+        dispatcher = objectCache.get(arg);
+        void 0 === dispatcher &&
+          ((dispatcher = createCacheNode()), objectCache.set(arg, dispatcher));
+      } else
+        (objectCache = dispatcher.p),
+          null === objectCache && (dispatcher.p = objectCache = new Map()),
+          (dispatcher = objectCache.get(arg)),
+          void 0 === dispatcher &&
+            ((dispatcher = createCacheNode()),
+            objectCache.set(arg, dispatcher));
+    }
+    if (1 === dispatcher.s) return dispatcher.v;
+    if (2 === dispatcher.s) throw dispatcher.v;
+    try {
+      var result = fn.apply(null, arguments);
+      fnMap = dispatcher;
+      fnMap.s = 1;
+      return (fnMap.v = result);
+    } catch (error) {
+      throw ((result = dispatcher), (result.s = 2), (result.v = error), error);
+    }
+  };
+};
+exports.captureOwnerStack = function () {
+  return null;
+};
+exports.cloneElement = function (element, config, children) {
+  if (null === element || void 0 === element)
+    throw Error(formatProdErrorMessage(267, element));
+  var props = assign({}, element.props),
+    key = element.key,
+    owner = void 0;
+  if (null != config)
+    for (propName in (void 0 !== config.ref && (owner = void 0),
+    void 0 !== config.key && (key = "" + config.key),
+    config))
+      !hasOwnProperty.call(config, propName) ||
+        "key" === propName ||
+        "__self" === propName ||
+        "__source" === propName ||
+        ("ref" === propName && void 0 === config.ref) ||
+        (props[propName] = config[propName]);
+  var propName = arguments.length - 2;
+  if (1 === propName) props.children = children;
+  else if (1 < propName) {
+    for (var childArray = Array(propName), i = 0; i < propName; i++)
+      childArray[i] = arguments[i + 2];
+    props.children = childArray;
+  }
+  return ReactElement(element.type, key, void 0, void 0, owner, props);
+};
+exports.createElement = function (type, config, children) {
+  var propName,
+    props = {},
+    key = null;
+  if (null != config)
+    for (propName in (void 0 !== config.key && (key = "" + config.key), config))
+      hasOwnProperty.call(config, propName) &&
+        "key" !== propName &&
+        "__self" !== propName &&
+        "__source" !== propName &&
+        (props[propName] = config[propName]);
+  var childrenLength = arguments.length - 2;
+  if (1 === childrenLength) props.children = children;
+  else if (1 < childrenLength) {
+    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)
+      childArray[i] = arguments[i + 2];
+    props.children = childArray;
+  }
+  if (type && type.defaultProps)
+    for (propName in ((childrenLength = type.defaultProps), childrenLength))
+      void 0 === props[propName] &&
+        (props[propName] = childrenLength[propName]);
+  return ReactElement(type, key, void 0, void 0, null, props);
+};
+exports.createRef = function () {
+  return { current: null };
+};
+exports.forwardRef = function (render) {
+  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };
+};
+exports.isValidElement = isValidElement;
+exports.lazy = function (ctor) {
+  return {
+    $$typeof: REACT_LAZY_TYPE,
+    _payload: { _status: -1, _result: ctor },
+    _init: lazyInitializer
+  };
+};
+exports.memo = function (type, compare) {
+  return {
+    $$typeof: REACT_MEMO_TYPE,
+    type: type,
+    compare: void 0 === compare ? null : compare
+  };
+};
+exports.use = function (usable) {
+  return ReactSharedInternals.H.use(usable);
+};
+exports.useCallback = function (callback, deps) {
+  return ReactSharedInternals.H.useCallback(callback, deps);
+};
+exports.useDebugValue = function () {};
+exports.useId = function () {
+  return ReactSharedInternals.H.useId();
+};
+exports.useMemo = function (create, deps) {
+  return ReactSharedInternals.H.useMemo(create, deps);
+};
+exports.version = "19.1.1";
Index: node_modules/react/compiler-runtime.js
===================================================================
--- node_modules/react/compiler-runtime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/compiler-runtime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-compiler-runtime.production.js');
+} else {
+  module.exports = require('./cjs/react-compiler-runtime.development.js');
+}
Index: node_modules/react/index.js
===================================================================
--- node_modules/react/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react.production.js');
+} else {
+  module.exports = require('./cjs/react.development.js');
+}
Index: node_modules/react/jsx-dev-runtime.js
===================================================================
--- node_modules/react/jsx-dev-runtime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/jsx-dev-runtime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-jsx-dev-runtime.production.js');
+} else {
+  module.exports = require('./cjs/react-jsx-dev-runtime.development.js');
+}
Index: node_modules/react/jsx-dev-runtime.react-server.js
===================================================================
--- node_modules/react/jsx-dev-runtime.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/jsx-dev-runtime.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-jsx-dev-runtime.react-server.production.js');
+} else {
+  module.exports = require('./cjs/react-jsx-dev-runtime.react-server.development.js');
+}
Index: node_modules/react/jsx-runtime.js
===================================================================
--- node_modules/react/jsx-runtime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/jsx-runtime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-jsx-runtime.production.js');
+} else {
+  module.exports = require('./cjs/react-jsx-runtime.development.js');
+}
Index: node_modules/react/jsx-runtime.react-server.js
===================================================================
--- node_modules/react/jsx-runtime.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/jsx-runtime.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-jsx-runtime.react-server.production.js');
+} else {
+  module.exports = require('./cjs/react-jsx-runtime.react-server.development.js');
+}
Index: node_modules/react/package.json
===================================================================
--- node_modules/react/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+{
+  "name": "react",
+  "description": "React is a JavaScript library for building user interfaces.",
+  "keywords": [
+    "react"
+  ],
+  "version": "19.1.1",
+  "homepage": "https://react.dev/",
+  "bugs": "https://github.com/facebook/react/issues",
+  "license": "MIT",
+  "files": [
+    "LICENSE",
+    "README.md",
+    "index.js",
+    "cjs/",
+    "compiler-runtime.js",
+    "jsx-runtime.js",
+    "jsx-runtime.react-server.js",
+    "jsx-dev-runtime.js",
+    "jsx-dev-runtime.react-server.js",
+    "react.react-server.js"
+  ],
+  "main": "index.js",
+  "exports": {
+    ".": {
+      "react-server": "./react.react-server.js",
+      "default": "./index.js"
+    },
+    "./package.json": "./package.json",
+    "./jsx-runtime": {
+      "react-server": "./jsx-runtime.react-server.js",
+      "default": "./jsx-runtime.js"
+    },
+    "./jsx-dev-runtime": {
+      "react-server": "./jsx-dev-runtime.react-server.js",
+      "default": "./jsx-dev-runtime.js"
+    },
+    "./compiler-runtime": {
+      "react-server": "./compiler-runtime.js",
+      "default": "./compiler-runtime.js"
+    }
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/facebook/react.git",
+    "directory": "packages/react"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  }
+}
Index: node_modules/react/react.react-server.js
===================================================================
--- node_modules/react/react.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/react/react.react-server.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react.react-server.production.js');
+} else {
+  module.exports = require('./cjs/react.react-server.development.js');
+}
Index: node_modules/recharts/CHANGELOG.md
===================================================================
--- node_modules/recharts/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1940 @@
+## ⚠️ Next versions change notes are available only on the [GitHub Releases](https://github.com/recharts/recharts/releases) page ⚠️
+
+## 2.2.0 (Dec 8, 2022)
+### feat
+- Support keyboard navigation in pie chart (#2923) 
+- Allow reversing the tooltip direction (#3056)
+### fix
+- fix rounding leading to hairline gaps (#3075)
+- fix: do not override zero brush end index (#3076)
+- fix: allow dragging brush when the mouse is outside (#3072)
+- fix: add label type to line props (#3068)
+- Ensure LabelList generic extends Data interface (#2954)
+
+## 2.1.16 (Oct 29, 2022)
+
+### fix
+- Fix incorrect date in CHAGELOG (#3016)
+- Let formatter function run even when value is falsy (#3026)
+- Fix(Sankey): update tooltip active state by trigger type(hover/click) (#3021)
+- Fix Area's `baseValue` prop (#3013)
+
+## 2.1.15 (Oct 12, 2022)
+
+### fix
+- Fix scroll on hover
+- DefaultTooltipContent.tsx Solving type error for entry.value and entry.name
+
+### chore
+- Revert D3 version
+
+
+## 2.1.14 (Sep 7, 2022)
+### fix
+- Add inactiveShape prop to Pie component (#2900)
+- Revert "chore: move type deps into devDependencies (#2843)" (#2942)
+- Fix typing of default tooltip formatter (#2924)
+- Take letter-spacing and font-size into consideration while rendering ticks (#2898)
+- Add formatter function type to tooltip props (#2916)
+- doc: Update CHANGELOG.md about d3 7.x (#2919)
+
+## 2.1.13 (Jul 26, 2022)
+
+### fix
+
+- set animate flag before chart data update (#2911)
+- Error bar domain fix (#2863)
+- fix: fix "recharts@… doesn't provide prop-types, requested by react-smooth" warning (#2895)
+
+### chore
+
+- upgrade d3 (#2893)
+
+## 2.1.12 (Jun 27, 2022)
+
+### fix
+
+- update react-smooth version
+- update d3 from 6.x to 7.x it may break some tools like jest
+
+fix config for jest is to add the following configuration
+
+```javascript
+const path = require('path');
+// took from d3/package.json
+const d3Pkgs = [
+	'd3',
+	'd3-array',
+	'd3-axis',
+	'd3-brush',
+	'd3-chord',
+	'd3-color',
+	'd3-contour',
+	'd3-delaunay',
+	'd3-dispatch',
+	'd3-drag',
+	'd3-dsv',
+	'd3-ease',
+	'd3-fetch',
+	'd3-force',
+	'd3-format',
+	'd3-geo',
+	'd3-hierarchy',
+	'd3-interpolate',
+	'd3-path',
+	'd3-polygon',
+	'd3-quadtree',
+	'd3-random',
+	'd3-scale',
+	'd3-scale-chromatic',
+	'd3-selection',
+	'd3-shape',
+	'd3-time',
+	'd3-time-format',
+	'd3-timer',
+	'd3-transition',
+	'd3-zoom',
+];
+
+// option 1 map module to an bundled version of the package which is es5
+const moduleNameMapper = d3Pkgs.reduce((acc, pkg) => {
+	acc[`^${pkg}$`] = path.join(require.resolve(pkg), `../../dist/${pkg}.min.js`);
+	return acc;
+}, {});
+
+module.exports = {
+	moduleNameMapper: {
+		// option 1
+		// ...moduleNameMapper
+	},
+	transform: {
+		// match mjs js jsx ts tsx
+		'^.+\\.m?[jt]sx?$': 'babel-jest',
+	},
+	// stop ignore node_modules transform since d3 and others start to put es6 as main of packages
+	transformIgnorePatterns: [
+		// option 2, stop ignore transform on es6 packages
+		`/node_modules/(?!${d3Pkgs.join('|')}|internmap|d3-delaunay|delaunator|robust-predicates)`,
+		// option 3, stop ignore transform on all node_modules
+		// `/node_modules/(?!.*)`,
+	],
+};
+```
+
+## 2.1.11 (Jun 24, 2022)
+
+### feat
+
+-  Adds react `^18.0.0`  as valid peerDependency (#2820)
+
+## 2.1.10 (May 19, 2022)
+
+### feat
+
+- Add ARIA1.2 attributes to the SvgElementPropKeys filter array
+- Added Storybook Badge (#2840)
+- Handling of undefined values and type checks in DefaultTooltipContent
+
+### fix
+
+- Axis scale=band no longer works as of Recharts 2.x.x (#2742)
+
+### chore
+
+- chore: move type deps into devDependencies (#2843)
+
+## 2.1.9 (Feb 10, 2022)
+
+### feat
+
+- feat: allow axis domain to accept a callback (#2770)
+- Categorical chart callback types (#2739)
+
+### fix
+
+- Fixing types in strict mode (#2745) (#2747)
+- Fix: removes overlapping legend for categorical charts (#2752)
+- Categorical chart callback types (#2739)
+
+## 2.1.8 (dec 14, 2021)
+
+### fix
+
+- Must use import to load ES Module (#2658)
+
+## 2.1.7 (dec 14, 2021)
+
+### fix
+
+- Treemap do not render depth (#2718 #2719)
+- Update PolarRadiusAxis.tsx (#2720)
+
+### chore
+
+- Update d3-interpolate, d3-scale and d3-shape (#2707)
+
+## 2.1.6 (oct 26, 2021)
+
+### fix
+
+- Fix types folder missing
+
+## 2.1.5 (oct 15, 2021)
+
+### fix
+
+- Fixed types for legend events (#2267 #2269)
+- Fix the react-is version (#2670)
+- Fix type declaration errors when tsc (#2675)
+- Fix(build-umd): add webpack output options libraryTarget (#2684)
+
+## 2.1.4 (sep 19, 2021)
+
+### fix
+
+- Fix: ResponsiveContainer makes legend overlapping with chart when re-rendering (#2660)
+- Fix: rendering of a single bar when maxBarSize is absent and barSize is present (#2659)
+
+## 2.1.3 (sep 18, 2021)
+
+### fix
+
+- fix: Customized component has no key (#2637)
+- Fix XAxis scale property type (#2641)
+
+## 2.1.2 (aug 24, 2021)
+
+### fix
+
+- Fixes undefined field reference when optional variables not supplied (#2630)
+- Fix fragment children (#2481)
+## 2.1.1 (aug 21, 2021)
+
+### fix
+
+- Fix: responsive container
+
+## 2.1.0 (aug 10, 2021)
+
+### feat
+
+- Wrap ResponsiveContainer with forwardRef
+
+### fix
+
+- Fix for recharts issue #1787
+- Add chart type to tooltip payload
+## 2.0.10 (jul 13, 2021)
+### feat
+
+- Feat: Allow automated axis padding for "gap" and "no-gap" for barcharts with continuous axis #2457
+- Passthrough position attribute on createLabeledScales
+
+### fix
+
+- fix: barchart for a single data point #2512
+- fix: the bar label type definition #2582
+- fix: show scatter chart tooltip cross cursor #2592
+
+## 2.0.9 (mar 24, 2021)
+
+### chore
+
+- update test config and webpack, etc
+
+## fix
+
+- fix for missing sankey tooltips, fix #2496
+- added polyfill for ReactResizeDetector, fix #2504
+- fix condition to actually remove the listener, fix #2498
+- fix typing of <Area type /> prop, fix #2471
+
+## 2.0.8 (Feb 24, 2021)
+
+### feat
+
+- allow to show tooltip when hover or click bar item for <BarChart /> and <RadialBarChart />
+- add api `getXScales`, `getYScales`, `getXScaleByAxisId`, `getYScaleByAxisId`, `getItemByXY` to chart, fix #2422
+- Add SyncMethod to categorical charts
+- `findAllByType` searches for match inside of a fragment
+- allow to add customized `polarAngles` and `polarRadius` to <PolarGrid />, fix #2452
+
+### fix
+
+- fix Tooltip receive wrong payload when mouse enter <Line />, .etc, fix #2394
+- fix Treemap tooltip when use `dataKey` to specify value, fix #2428
+
+### deps
+
+- update react-resize-detector to 6.6.0, fix #2431
+
+
+## 2.0.7 (Feb 18, 2021)
+
+### fix
+
+- add missed type definition of tickMargin in XAxis, YAxis, fix #2427
+- filter out nil elements of chart
+- ensures `id="undefined"` is not rendered to the DOM when use ResponsiveContainer
+- fix auto scale type of ComposedChart, fix #2403
+- Fix .d.ts types that relay on d3
+
+## 2.0.6 (Feb 08, 2021)
+
+### fix
+
+- fix types error in npm pkg, fix #2398
+
+## 2.0.5 (Feb 08, 2021)
+
+### feat
+
+-  defer when syncing to other charts
+
+### fix
+
+- Fix Customized component types
+- fix child event not dispatched, fix #2414
+
+## 2.0.4 (Jan 27, 2021)
+
+### feat
+
+- add maxLines prop to Text component
+
+
+### fix
+
+- Add `payload` to `Payload` interface
+- prevent rerender errors in ResponsiveContainer
+- Add PieLabel, PieLabelRenderProps types
+
+### deps
+
+- Upgrade react-resize-detector(4.x => 5.x) types to match the library
+
+
+
+## 2.0.3 (Jan 13, 2021)
+
+### refactor
+
+- use `getDerivedStateFromProps` to replace `UNSAFE_componentWillReceiveProps`, support react@17, #2385
+
+## 2.0.2 (Jan 12, 2021)
+
+### fix
+
+- fix lint error
+
+## 2.0.1 (Jan 12, 2021)
+
+### fix
+
+- Fix typo, createLabeldScales -> createLabeledScales
+- Prefer Number.isFinite if available
+- fix types error
+- fix(package.json): disable side effects explicitly
+
+
+### feat
+
+- Add aria-hidden to measurementSpan
+
+
+## 2.0.0 (Dec 29, 2020)
+
+### fix
+
+- fix minAngle for 0 in PieChart, fix ##2237
+- fix type error of <Bar />, fix #2335
+- fix type error of cursor in <Tooltip />, fix #2178
+- fix Props of XAxis, fix #2128
+- export Props of components, fix #2319, #2156, #2203
+- Fix typo, getRectangePath -> getRectanglePath in Rectangle
+- allow Duplicated Category for bar charts not using correct entries for custom tool tips
+- fixing typescript array coalesce
+- fix types error of sankey, fix #2280
+- Fixed SVG path for pie charts when corner radius is set to a value other than zero (#2331)
+
+### feat
+
+- add props `reversed` to `<Funnel />`
+- add `breakAll` props to `<Text />` to allow break all for chinese
+- fix width of labelList in Funnel; fix #2056, #1866
+- support range RadarChart and add props `connectNulls` to <Radar />, fix #1890
+- add ability to pass in custom legend icon.
+
+### deps
+
+- upgrade react-resize-detector to 5.2.0 and fix ts error, fix #2300
+- update react-smooth to 1.0.6 to fix bug after upgrading d3
+- upgrade d3 packages
+
+
+## 2.0.0-beta.8 (Nov 16, 2020)
+
+### fix
+
+-  Add color change for inactive legend label
+- fix stackOffset="sign" in #2292, and add props stackOffset="positive" to fix #1667
+
+### refactor
+
+- update `filterSvgElements` and `renderByOrder`
+- Replace core-js polyfill and remove babel-polyfill
+
+
+## 2.0.0-beta.7 (Sep 08, 2020)
+
+### fix
+
+- Fix flickering tooltip by keeping the isTooltipActive flag from the previous state
+- fix(AreaDot Type): add option to use a function that returns a react element
+- Fix typescript error in polar radar
+- Fix typos in Label.renderCallByParent
+- Add type definition for label prop on XAxis, YAxis and ZAxis
+
+### feat
+
+- Pass tickFormatter as a prop to customized tick component
+- Allow array value for last data element in Funnel to set bottom width instead of forcing 0
+-  Add payloadIndex to cursor props
+
+## 2.0.0-beta.6 (May 12, 2020)
+
+### fix
+
+- fix error of Brush when data is empty, but chart width or height or Brush update, fix #2093
+- fix build error , fix #2120
+- fix attrs of <Label />, reverts previous change: now `positionAttrs` is again after `attrs`
+- Get legend wrapper boundingRect to correctly compute legend offset, fix #2062
+
+### feat
+
+- support customized traveller of Brush, fix #1600
+
+## 2.0.0-beta.5 (Mar 26, 2020)
+
+### fix
+
+- fix types of generateCategoricalChart
+- fix position of tooltip when the categorical axis has time scale
+- fix position of tooltip when direction is rtl
+- fix name of Scatter in tooltip
+- Fix outerArcAngle and innerArcAngle when cornerIsExternal == true
+- fix IE 11 supoort because of d3-scale@3.x
+
+### feat
+
+- add Global setting, include "isSsr"
+- support tooltip trigger by click event
+- add static method `registerSymbol` to Symbols
+- add payload to formatter and labelFormatter in Tooltip
+- allow domain of axis to change the order of categories
+
+
+## 2.0.0-beta.4 (Mar 17, 2020)
+
+### fix
+
+- fix error of <Curve /> when add child to <Line />, fix #2051
+- fix Stack AreaChart when some values is negative, fix #1667
+- fix stack AreaChart when some values is nill, fix #1601
+
+### dep
+
+- Upgrade reduce-css-calc
+
+### chore
+
+- add types
+
+
+## 2.0.0-beta.3 (Mar 13, 2020)
+
+### fix
+
+- fix range of ReferenceArea of BarChart, fix #2045
+- fix className of axis line, fix ##2024
+- fix ComposedChart when has multiple <Bar/>, fix #2031
+- fix ComposedChart when specify scale of <XAxis />, fix #2010
+
+### chore
+
+- update eslint and add .prettierrc
+
+## 2.0.0-beta.2 (Mar 10, 2020)
+
+### fix
+
+- Do word line calculation only when needed
+- Fixes arc angles when `cornerIsExternal` is used
+- Invert cartesian label position based on negative values
+- Fix usage of hooks in Tooltip, Label, Legend and Customized
+- Move draging-end listener to the window for brush
+- Fix trigger after mouse leave
+- Added the angle as key which need to be used in the Label align
+- Rewrite index.js to index.ts, update scripts in package.json
+
+### feat
+
+- Added index to tickFormatter
+- Allow axis line customization through axisLine prop
+
+## 2.0.0-beta.1 (Dec 03, 2019)
+
+### fix
+
+- fix error parameters in `appendOffsetOfLegend`
+- fix style of <Area />
+
+## 2.0.0-beta.0 (Dec 03, 2019)
+
+### feat
+
+- Only support react@16
+- Use typescript to rewrite src/
+
+## 1.8.5 (Oct 22, 2019)
+
+### fix
+
+- revert [PR#1916](https://github.com/recharts/recharts/pull/1916)
+- fix Text update, fix #1914
+
+## 1.8.4 (Oct 22, 2019)
+
+### fix
+
+- Adding Composed chart to rescaled charts, to fix #1887
+
+## 1.8.3 (Oct 17, 2019)
+
+### fix
+
+- fix: rollback to componentWillReceiveProps, fix crash in react@15
+
+## 1.8.2 (Oct 17, 2019)
+
+### fix
+
+- Used UNSAFE_componentWillReceiveProps to replace componentDidUpdate
+
+## 1.8.1 (Oct 16, 2019)
+
+### fix
+
+- Fixed Text Component crash
+- Fixed eslint errors in src/
+
+
+### feat
+
+- Add props of <Brush /> to always show text
+- Add onClick event to sankey chart
+- Shape prop can be used without any other prop in reference area
+
+## 1.8.0 (Oct 15, 2019)
+
+### refactor
+
+- react unsafe methods refactored
+
+## 1.7.1 (Aug 13, 2019)
+
+### fix
+
+- Fix bar chart tooltip (#1837)
+
+## 1.7.0 (Aug 08, 2019)
+
+### feat
+
+- allow events on Text and Label components
+- Enable Tooltip's `translate` style
+- Added position props for ReferenceLine to allow to control offset of it
+
+### fix
+
+- handle `dataKey` as function, get correct data array for tooltip
+- fix style of legend in case of area and radar use fill for fallback color
+
+## 1.6.2 (May 22, 2019)
+
+### feat
+
+- Add cornerIsExternal prop to center rounded corner at radial bar edge
+- Add new component `Customized` to render customized content which can user internal state and props
+- Add props `tooltipType="none"` to hide tooltip data for Area, Bar, Line, Scatter, Funnel, Pie, Radar, RadialBar
+
+### fix
+
+- fix the order of tooltip items when not specify itemSorter
+- Fix typo in example of RadialBarChart
+
+
+## 1.6.1 (May 20, 2019)
+
+### fix
+
+- fix "Maximum call stack size exceeded" error when use label={<Label />}
+- fix bug of "Cannot read property reduce of undefined in Text.js"
+- fix `getDomainOfDataByKey` when all the values are null or undefined
+
+## 1.6.0(May 14, 2019)
+
+### fix
+
+- Use y-axis ticks to determine y-axis category
+- fix bug in ThreeMap inside ResponsiveContainer, fix #1692
+- Avoid same keys on label and line, fixes #1302
+- use _.max to replace Math.max.apply, use _.min to replace Math.min.apply
+
+### feat
+
+- Adds forceCornerRadius prop to RadialBar
+- calculate width with aspect and height when width is falsey
+
+## 1.5.0(Feb 15, 2019)
+
+### fix
+
+- fix the bug of ReferenceLine when calculate coordinates, fix #1643
+- fix bug of Scatter in ComposedChart
+
+### feat
+
+- allow aria-* attributes and "role", "focusable", "tabIndex" of charts, fix #1226, fix #1584
+- add new props "paylodUniqBy" to Tooltip and Legend
+
+## 1.4.4(Feb 15, 2019)
+
+### fix
+
+- fix the bug of automatically calculate the y-coordinate of yAxis tick when tick has unit, fix #1623
+- render clipPath in <defs />, fix bug in generateCategoricalChart, fix #1592
+- remove React.Fragment in DefaultTooltipContent, fix #1645
+
+## 1.4.3(Feb 12, 2019)
+
+### fix
+
+- fix bug of <Rectangle /> when width < 0 && `radius` is not null, fix #1596
+- fix paddingAngle of Pie when render only <Pie /> not <PieChart />
+- fix onMouseEnter and Tooltip for Pie on FireFox
+
+### feat
+
+- Make the timeOut timer for the brush configurable through props
+- Allow to format name in Tooltips
+
+### dep
+
+- Update lodash version to 4.17.5 and install webpack-dev-server@3.1.14 dev dependency
+- Updated package.json to mark effectful modules
+- chore: update version of sinon, from 4.x to 7.x
+
+
+## 1.4.2(Dec 21, 2018)
+
+### refactor
+
+- Refactor transition of <Area />, <Line />, <Radar />, make transition more smoothly when the length of dataset changes
+
+### fix
+
+- replace lodash isFinite with Number.isFinite, meanwhile add polyfill core-js's Number polyfill in order to use Number.usFinite directly
+- updated area chart to cut off dots on left most axis
+
+## 1.4.1(Nov 16, 2018)
+
+### fix
+
+- Fix height of TreeMap
+
+## 1.4.0(Nov 15, 2018)
+
+### feat
+
+- Add FunnelChart and Trapezoid
+- Add nested Treemap
+
+## 1.3.6(Nov 07, 2018)
+
+### fix
+
+- Fix bug preventing use of functions or custom components for the Bar background prop
+- Fix incorrect sort logic in stripe rendering
+
+### feat
+
+- Added animateNewValues property to Line
+
+## 1.3.5(Oct 25, 2018)
+
+### fix
+
+- use lodash _.values instead of Object.values
+- perfer YAxis which has finite domain and nice ticks when a chart has many YAxes
+- fix <Area /> for expected length height attribute
+
+### chore
+
+- add babel-plugin-lodash in babelrc
+- update webpack.config.js to remove sourceMap in umd/Recharts.min.js
+
+## 1.3.4(Oct 13, 2018)
+
+### fix
+
+- Fix domain calculation with 0 values (#1519)
+
+## 1.3.3(Oct 10, 2018)
+
+### feat
+
+- find yAxisWithNiceTicks and choose it over getAnyElementOfObject
+
+### fix
+
+- update recharts-scale to 0.4.2 to fix bug of DecimalError when data is Inifinity, fix #1493
+
+## 1.3.2(Oct 07, 2018)
+
+### fix
+
+- Fix axis type error
+- Fix add sideEffects flag to enable tree-shaing
+
+## 1.3.1(Sep 29, 2018)
+
+### fix
+
+- Fix the react-resize-detector don't match react 15
+
+## 1.3.0(Sep 28, 2018)
+
+### feat
+
+- upgrade recharts-scale to 0.4.0, to fix the calculation of big float
+
+## 1.2.0(Sep 7, 2018)
+
+### feat
+
+- Add blendStroke prop to Pie component
+- Adding contentStyle prop to Tooltip for styling DefaultTooltipContent
+
+### fix
+
+- Fixed typo of playload -> payload in Radar chart
+- Fix PieChart animation event handlers not firing
+- Fix alwaysShow warn() condition in ReferenceLine
+- Fix Tooltip disappears when using setState()
+
+## 1.1.0(Jul 19, 2018)
+
+### feat
+
+- Allow reference areas which extend past the canvas bounds
+- Allow to add more classes in tooltips
+- Reference line segment by specifying a pair of
+ endpoints
+
+## 1.0.1(Jul 05, 2018)
+
+### fix
+
+- only use babel-es in es6/, fix #1372
+
+## 1.0.0(Jul 05, 2018)
+
+### fix
+
+- #1195 Replace axis scale value `utcTime` with `utc`
+- remove wrapperStyle on DefaultTooltipContent
+- Clip dots of <Line />
+- Move style spread to after default styles to allow overriding
+- Fixing range area chart bottom bound. Base line needed to be filterted for connecting
+ null
+- Fix tooltips that disappear while mouse still over a scatter point
+
+### refactor
+
+- use lodash-es for es6 build
+- Factor out some scale- and rect-related functions
+
+### feat
+
+- Add touchStart & touchEnd event handling
+- Add explicit prop `defaultShowTooltip`  to activate tooltip
+- Position the 'top' label outside the element for negative heights
+
+## 1.0.0-beta.10(Jan 31, 2018)
+
+### fix
+
+- fix Scatter Chart:lineType 'fitting' does not work
+- Update to allow CSP compliance on setting styles
+- Remove react-transition-group from peerDependencies
+
+### refactor
+
+- Replace flatmap of reduce to _.flatmap in getDomainOfDataByKey
+
+### feat
+
+- Add the gap of props for brush
+
+## 1.0.0-beta.9(Jan 09, 2018)
+
+### fix
+
+- Fix `verticalFill` and `horizontalFill` in `<CartesianGrid />` when points are unordered
+
+## 1.0.0-beta.8(Jan 09, 2018)
+
+### feat
+
+- Add props `useTranslate3d` to control whether use translate3d or translate in <Tooltip />
+- Add props `verticalFill` and `horizontalFill` in `<CartesianGrid />` to show grid background
+- Add  `visibleTicksCount` in props of customized tick of `<CartesianAxis />`
+
+### fix
+
+- Replace lodash _.get with simple Array.prototype.find
+- Prevent texts from being selected when dragging the brush
+- Add try...catch... when getTotalLength is called by a svg path to fix IE bug
+
+## 1.0.0-beta.7(Dec 21, 2017)
+
+### feat
+
+- Add props `allowDuplicatedCategory` to XAxis, YAxis, PolarAngleAxis, PolarRadiusAxis, to remove duplicated category when type="category"
+- Add props id in `<Area />`, `<Bar />`, `<Line />`, `<Scatter />`, `<Label />`, `<LabelList />` for SSR
+- Support specify domain of category type axis when allowDuplicatedCategory is false, add cooresponding "xAis", "yAxis", "zAxis" to the props or customized shape of Scatter
+
+### fix
+
+- Fx sanketartAngle and endAngle of RadarChart diagram not re-rendering when updating data prop
+- Fix animation of AreaChart when baseLine is NaN / undefined
+- Fix default startAngle and endAngle of RadarChart
+- Use cloneElement to create Legend
+
+## 1.0.0-beta.6(Dec 02, 2017)
+
+### feat
+
+- Add props `background` to support background rectange in `<Bar />`
+- add props `tickMargin` which set the space between text and tick line
+
+### fix
+
+- update PRESENTATION_ATTRIBUTES to allow set the radius of each `<Rectangle />` of BarChart
+- render Legend when all values of Pie is 0
+- fix animation of intial `<Bar />`
+
+## 1.0.0-beta.5(Nov 24, 2017)
+
+### fix
+
+- fix `isChildrenEqual` when chart has a single child in an array
+- support LabelList in ScatterChart
+
+## 1.0.0-beta.4(Nov 24, 2017)
+
+### fix
+
+- fix Label when content is a function and return simple string
+- add name to propTypes of Scatter
+- fix ** error of lib/
+
+## 1.0.0-beta.3(Nov 23, 2017)
+
+### feat
+
+- Add datakey to proops of customized dot
+
+### fix
+
+- Removed the use of `Children.only` from the isSingleChildEqual call. Appears to resolve the issue logged at https://github.com/recharts/recharts/issues/935
+- Fix Line Animation with given Magic Number
+- Don't break text contents on non-breaking spaces
+- Support for "strokeDasharray" in <Legend/>
+- Fix Bar Animation with the given Magic Number
+- Fix position of `<Label />`
+- Fix exception of AreaChart when all the values are null
+- Fix the orders of polar angle ticks in RadarChart
+- Replace ** width Math.pow
+
+## 1.0.0-beta.2(Nov 17, 2017)
+
+### fix
+
+- fix attributes order of `<Label />`
+- fix the domain of Axis when specify `ticks`
+
+### feat
+
+- allow set x, y, width, height, horizontalPoints, verticalPoints of CartesianGrid
+- add props to the parameters of callbacks
+
+### refactor
+
+- add id prop to Pie Component
+- Update Bar and Line to allow them to recognise multiple ErrorBars
+
+## 1.0.0-beta.1(Nov 06, 2017)
+
+### feat
+
+- Add index to line props in Pie
+- Update ReferenceDot.js
+
+### chore
+
+- update react-resize-detector, react-smooth to support react16
+
+## 1.0.0-beta.0(Oct 24, 2017)
+
+### feat
+
+- Allow ReferenceArea to cover available space
+- Support React 16
+
+### fix
+
+- Fix bug of animation when toggle the value of `isAnimationActive`
+
+## 1.0.0-alpha.6(Oct 10, 2017)
+
+### feat
+
+- Add props `reverseStackOrder` to reverse the order of stacked items
+- Allow an arbirary domain for cartesian X and Y axes
+- Added className prop for Label
+
+### fix
+
+- Fix confused parameter `startX` in `<Brush />`
+- Fix ScatterChart when the type of XAxis is "category"
+
+### docs
+
+- Fix typo initilaState -> initialState
+
+
+## 1.0.0-alpha.5(Sep 16, 2017)
+
+### fix
+
+- Don't check for animation when it is disabled
+- fix bug of paddingAngle when isAnimationActive is true
+
+### feat
+
+- add props filterNull to `Tooltip`, null values will not be filtered when filterNull = false
+
+### refactor
+
+- Allowing length in different unit in ResponsiveContainer
+  By allowing type: String on 'minHeight', 'minWidth', 'maxHeight' property, developers can use length in different units like em, pt etc.
+- Render curve with fill first in Area
+
+
+### dep
+
+- remove react-transition-group in peer dependencies
+- Updates resize-detector to 0.6, close #705, fix the problem with strange scrollbars appearing over the charts
+
+## 1.0.0-alpha.4(Aug 21, 2017)
+
+### fix
+
+- Fix error 'Cannot read property 'map' of undefined' in Pie
+- Fix bug of parsing the width of Brush
+- Don't render any path when width === 0 || height === 0 in Rectangle
+### refactor
+
+- Avoid calculating ticks if tick is set to false
+- Update the order of parsing data in mixed components
+
+### feat
+
+- Render unit when the props unit of XAxis, YAxis is specified
+- Add default nameKey to "name" property in Pie
+- Add props className and id to ResponsiveContainer
+
+### dep
+
+- Update recharts-scale to fix bug of ticks
+
+## 1.0.0-alpha.3(Aug 12, 2017)
+
+### fix
+
+- fix bug of isChildrenEqual
+- fix "hide" props of YAxis
+
+## 1.0.0-alpha.2(Jul 10, 2017)
+
+### feat
+
+- Add props className to ReferenceLine, ReferenceDot, ReferenceArea
+- Specify the contents of LabelList by `dataKey`
+
+### fix
+
+- Fix faulty logic check in inRange function
+- onTouchMove event call method that handle tooltip and active dot draw
+- Show tooltip on drag movement on touch devices
+- Fix viewBox of Label when render implicit label
+- Fix label of Pie
+- Fix events of Pie and PieChart
+- Fix bug of interplateNumber
+- Fix the bug of parsing "dataMin - 0.05" like domain
+
+## 1.0.0-alpha.1(Jun 11, 2017)
+
+### fix
+
+- update the propType of the props data or Bar
+- fix the type of Curve
+- fix connectNulls of `Line`
+- update version of recharts-scale to fix #713
+- fix valueKey of Pie temporarily and add logs when use deprecated "valueKey"
+- bind events to Radar
+- fix animation of active-dot
+
+## 1.0.0-alpha.0(May 24, 2017)
+
+### refactor
+
+- refactor PolarCharts
+- refactor Animation
+- refactor Label and LabelLis
+
+### fix
+
+- fix scale of ErrorBar
+
+## 0.22.4 (Apr 26, 2017)
+
+### fix
+
+- fix dot customized className
+
+### dep
+
+- update react-smooth, and react-transition-group
+
+## 0.22.3 (Apr 19, 2017)
+
+### refactor
+
+- add mathSign in DataUtils to replace Math.sign
+
+## 0.22.2 (Apr 18, 2017)
+
+### fix
+
+- fix spelling error of fillOpacity
+- fix bug of axis when has duplicated ticks
+
+
+## 0.22.1 (Apr 13, 2017)
+
+### feat
+
+- Add legendType: ‘none’ to not render coresponding legend item
+- use prop-types instead of React.PropTypes
+
+### fix
+
+- Fix re-rendering element bug when adding new elements
+- Fix circular dependence of Brush.js and LineChart.js
+
+## 0.22.0 (Apr 05, 2017)
+
+### feat
+
+- Add event handlers to component  Dot
+- Support embedded chart as a panoram in Brush
+- Add props reversed to `XAxis` and `YAxis` to reverse the range of axis
+
+### fix
+
+- Fix error or time scale
+
+## 0.21.2 (Mar 01, 2017)
+
+### fix
+
+- fix ticks for specified domain
+
+## 0.21.1 (Feb 28, 2017)
+
+### fix
+
+- Update recharts-scale to fix bug of ticks
+
+## 0.21.0 (Feb 28, 2017)
+
+### feat
+
+- Support band area and band bar
+- support customized horizontal line and vertical line in CartesianGrid
+- support customized events in ReferenceArea, ReferenceLine
+- add formatter in `Legend`
+
+### fix
+
+- Fix empty tick when category axis has nil values
+- fix the propTypes of fontSize
+- support props dx and dy in Text
+- fix bug of stacked bar when spcify domain of axis
+- fix the barSize of bars in `<Bar />` when too many bars
+
+## 0.20.8 (Feb 15, 2017)
+
+### fix
+
+- Fix bug when onBBoxUpdate of Legend is null
+
+## 0.20.7 (Feb 15, 2017)
+
+### fix
+
+- Fix stack chart when only have one stacked element
+- Fix the offset when the boundary box update
+- Fix position of XAxis in ScatterChart when the orientation is right
+- Use DataUtils.uniqueId to replace lodash.uniqueId
+
+### feat
+
+- Add props `mirror` in XAxis and YAxis, support mirror ticks
+- Add props iconType to the props of Legend which can specify the icon type of legend
+
+## 0.20.6 (Feb 08, 2017)
+
+### fix
+
+- Fix `dataStartIndex` and `dataEndIndex` of synchronized chart
+- Use lodash.uniqueId to produce the id of Pie
+
+## 0.20.5 (Jan 17, 2017)
+
+### fix
+
+- fix "Maximum call stack size exceeded error" caused by Tooltip update
+
+## 0.20.4 (Jan 17, 2017)
+
+### fix
+- Animate of Tooltip may crash browser sometimes, use style transition to do the animation of tooltip
+
+## 0.20.3 (Jan 17, 2017)
+
+### fix
+
+- Fix Tooltip in ScatterChart
+- Fix radius of Rectangle when height < 0
+
+### feat
+
+- Add clip path in Area, Bar and Scatter
+- Add onMouseDown and onMouseUp hooks in generateCategoricalChart
+
+### chore
+
+- Disable babel transform es2015 modules to commonjs for es6 build
+- Use cross-env to support windows builds, likewise downgrade linebreak-style to warning
+- Update release.sh
+
+## 0.20.2 (Jan 05, 2017)
+
+### fix
+
+- remove opacity in ErrorBar
+- fix `Tooltip` when `coordinate` is null
+
+### feat
+
+- add props `basevalue` in `AreaChart`
+- add clipPath when xAxis or yAxis of `Line` allow data overflow
+- allow dataKey to be a map function
+- support Tooltip in Sankey and Tooltip
+- Allow Brush to set default startIndex and endIndex
+
+## 0.20.1 (Dec 27, 2016)
+
+### fix
+
+- Fix bug of `isChildrenEqual`  when component has child `null`
+- Adjust `barGap` when `bandSize` is too small to display bars
+
+
+### feat
+
+- Add props `payload` and `value`, update props `index` in `activeDot` of `Line`, `Area`
+
+### refactor
+
+- Move polyfill of `Math.sign` to polyfill.js
+
+## 0.20.0 (Dec 26, 2016)
+
+### feat
+
+- Support `ErrorBar` in `Line`, `Area`, `Bar`, `Scatter`
+- Support touch event in `LineChart`, `AreaChart`, `BarChart`
+- Add props `throttleDelay` in `LineChart`, `AreaChart`, `BarChart` for performance
+- Support cornerRadius in Sector, RadialBar and Pie
+- Support events in CartesianAxis, PolarAngleAxis, PolarRadiusAxis
+- Support touch events in Brush
+
+### refactor
+
+- Use `getStringSize` to calculate the width of `Text`
+- Refactor children comparsion in `generateCategoricalChart`, and add updateId to force Brush update when children update
+- Refactor `getMouseInfo` to remove some duplicated codes in `generateCategoricalChart`
+- Refactor Tooltip and Legend, remove react-dom-server
+
+### fix
+
+- Fix the `chartId` in `handleReceiveSyncEvent` of `generateCategoricalChart`
+
+## 0.19.1(Dec 15, 2016)
+
+### fix
+
+-  Adding missing event propTypes
+- support x, y of `Text` are number or text
+- fix proptypes of Scatter to allow that the props `data` can be a array of array
+- fix server side render check `isSsr`
+- remove duplicated "square" in legendType
+- fix `getStringSize` when server side rendering check fails
+- fix animation error when update Line which has props stroke-dasharray
+- fix bug of BarChart when add stackId in only one Bar and update test cases
+
+## 0.19.0 (Nov 23, 2016)
+
+### refactor
+
+- remove unneed `Animate` in `Bar` and `Rectangle`
+- refactor interval of `CartesianAxis`, support "preserveStart", "preserveEnd", "preserveStartEnd"
+- add payload in the `Tooltip` and `Scatter` of `ScatterChart`, and unify the payload of Components
+
+### feat
+
+- `RadialBar` support events triggered on the entire bar
+- support customized lable in `RadialBar`
+- support `maxHeight` in `ResponsiveContianer`
+
+### fix
+
+- fix multiple y-axes breaks chart when plotting only single datum
+- Relax propTypes.ticks in CartesianAxis
+
+## 0.18.0 (Nov 15, 2016)
+
+### feat
+
+- support customized scale function of categorical charts
+- support customized events in Legend
+
+### refactor
+
+- refactor ResponsiveContainer with ReactResizeDetector
+- change the default value of isAnimationActive
+- remove some unneed default attributes of Components
+
+### fix
+
+- fix wrong written default props
+- fix twice triggered event in Bar
+- fix treemap stroke pollution cause by defaultProps
+
+## 0.17.0 | 0.17.1 (Nov 08, 2016)
+
+### fix
+
+- fix strokeDasharray of Line
+- add payload in Legend payload item
+- fix position of vertical Legend
+- Recalculate points after width or height change
+
+### refactor
+
+- refactor ticks filter algorithm of CartesianAxis
+- change order of stacked BarChart and AreaChart
+- refactor event handlers of PieChart, RadarChart, Brush, RadialBarChart
+- support onMouseEnter, onMouseLeave, onMouseMove, onClick in categorical chart
+
+## 0.16.2 (Nov 04, 2016)
+
+### fix
+
+- fix dash line animation
+- fix the bug when the children of categorical chart change
+
+### feat
+
+- support shape in ReferenceLine
+
+### refactor
+
+- render Bar, Area, Line according to the order of Bar, Area, Line in ComposedChart
+
+## 0.16.1 (Nov 03, 2016)
+
+### fix
+
+- refactor to treat NaN like undefined or null, fix #303
+- fix tranform origin of Bar, fix #292
+
+### feat
+
+- support customized position of Tooltip, fix #31
+
+### docs
+
+- fix LodashModuleReplacementPlugin
+
+## 0.16.0 (Nov 03, 2016)
+
+### refactor
+
+- Major Performance Change - Re-Use Expensive To Generate Data
+
+### feat
+
+- support both x-axis and y-axis are numerical axis, fix #183
+- add animation events in `Line`, `Area`, `Bar`
+
+### fix
+
+- fix angle of PolorRadiusAxis
+
+## 0.15.3 (Oct 28, 2016)
+
+### feat
+
+- Add angle property to PRESENTATION_ATTRIBUTES (#307)
+
+### Dev
+- chore: update istanbul plugin and add yarn.lock
+
+## 0.15.2 (Oct 13, 2016)
+
+### Fix
+
+- support empty margin in generateCategoricalChart
+- fix the label of RadialBarChart
+- fix the bug of `<Text>{0}</Text>`
+- fix the bug of ScatterChart when margin lose some attributes
+
+### Feat
+
+- support maxBarSize in BarChart and Bar
+- support fill in CartesianGrid
+
+### Refactor
+
+- simplify the calculation of width and height when specified aspect
+
+## 0.15.1 (Sep 26, 2016)
+
+### fix
+
+- Fix label/tick vertical alignment of Text
+
+## 0.15.0 (Sep 23, 2016)
+
+### feat
+
+- New Component `Text`
+
+### refactor
+
+- Fix possible memory leak warning of events
+
+### fix
+
+- minPointSize working when value is 0
+- Restored support for discrete values in Line and Area charts
+- Allowed for strings to be used as axis id in the ScatterChart
+
+## 0.14.2 (Sep 19, 2016)
+
+### Fix
+
+- Stop caching span in memory of getStringSize
+- Fix the bug of LineChart and ScaterChart when some data is null or undefined
+
+### feat
+
+- ScatterChart support for attributes using data and Cell
+
+## 0.14.1 (Sep 12, 2016)
+
+- Fix webpack.config.js
+
+## 0.14.0 (Sep 12, 2016)
+
+### Feat
+
+- allow label function to return a string
+- Pass entry to formatter function
+- Support labels in ScatterChart axis
+- Add dataKey in the payload of Legend
+- support allowDataOverflow in XAxis, YAxis, PolarRadiusAxis
+
+### Refactor
+
+- Refactor the received props of Surface
+
+### Fix
+
+- Fixed up handling of nulls for domain creation
+- Stopped domain calculation reverting to 0 for missing data points
+- Fix the bug of stacked areas which have yAxisId different from "0"
+- Fix the spelling error of AniamtionDecorator
+
+### Docs
+
+- Update webpack.config.js, to support AMD
+
+## 0.13.4 (Aug 24, 2016)
+
+### Feat
+
+- Add cartesian Component ReferenceArea
+
+### Refactor
+
+- Refactor ResponsiveContainer and support minHeight, minWidth, aspect in ResponsiveContainer
+
+### Fix
+
+- Fix the position of Bar for charts which have multiple y-axes
+
+## 0.13.3 (Aug 17, 2016)
+
+### Feat
+
+- Support the functionality that syncs multiple categorical charts when mouse enter, move, leave a chart, or when change the brush of one chart
+
+### Fix
+
+- Fix the bug of stack offset function - "sign"
+- Fix the propTypes or legendType
+
+## 0.13.2 (Aug 15, 2016)
+
+### Feat
+
+- Add an option "sign" to the props stackOffset in BarChart and AreaChart which allows the bars and areas to be stacked according to the sign of value.
+
+### Fix
+
+- Fix the the bug of legend in ScatterChart and refactor symbols.
+
+## 0.13.1 (Aug 08, 2016)
+
+### Fix
+
+- Fix the bug that tooltip did not show up for pie chart while using nameKey and valueKey
+
+### Refactor
+
+- Refactor Brush as controlled component
+
+## 0.13.0 (Aug 03, 2016)
+
+### Fix
+
+- Ensured all tooltip-related state gets reset upon receiving new data for all the charts
+
+### feat
+
+- Support smooth curve in Scatter
+- Support props connectNulls in Area, Line, and Curve,
+
+### refactor
+
+- Refactor animation of Area
+
+## 0.12.8 (Aug 01, 2016)
+
+### fix
+
+- Fix the bug of getTicksOfScale
+- Fix the bug of radius of ClipPath is so small that some texts of Pie is covered
+
+## 0.12.7 (July 25, 2016)
+
+### feat
+
+- Add itemSorter to tooltips
+- add props allowDecimals in XAxis and YAxis
+
+## 0.12.6 (July 21, 2016)
+
+### feat
+
+- Support Tooltip  of RadarChart
+
+### fix
+
+- Fix the initial value of state isAnimationFinished in Line and Area
+- Fix the spelling error, pressentation => presentation (CartesianAxis)
+- Tweak text in RadarSpec
+
+## 0.12.5 (July 12, 2016)
+
+### feat
+
+- Add paddingAngle in Pie, fix #142
+
+### deps
+
+- update version of react, fix #138, fix #103
+
+## 0.12.4 (July 8, 2016)
+
+### fix
+
+- Fix the bug of calculation accuracy in IE(Sector)
+- Remove unneed props "formatter" in Area and Bar
+- Fix props which can be supported by html tags and svg tags
+
+### refactor
+
+- Support multiple activeIndex in Pie
+
+### deps
+
+- Update d3-scale and d3-shape to the latest version
+- Update version of react-smooth and recharts-scale
+- Restrict the version of react to '~15.1.0'
+
+## 0.12.3 (June 30, 2016)
+
+### fix
+
+- Fix the bug that no animation when data change, but points of Line are the same
+
+### refactor
+
+- Remove xAxisMap and yAxisMap in ReferenceDot and ReferenceLine
+
+## 0.12.2 (June 29, 2016)
+
+### feat
+
+- Add margin props in Sankey to avoid outer-clip
+- Add shape props in ReferenceDot
+
+### fix
+
+- Fix the width and height of wrapper
+
+## 0.12.1 (June 24, 2016)
+
+### fix
+
+- Fix the bug with a hack method that global css will affect the width and height of Legend, Tooltip
+
+## 0.12.0 (June 23, 2016)
+
+### feat
+
+- Add padding in XAxis and YAxis
+- Support minPointSize in Bar
+- Support "dataMin - 110" and "dataMax + 100" in the domain of numeric axis
+
+### refactor
+
+- Refactor Treemap, change ratio to aspectRatio
+
+### fix
+
+- Fix the bug of axisId in BarChart
+- Fix the bug of tooltip's position in BarChart
+- Fix PropTypes of `type` in `Area`
+
+## 0.11.0 (June 17, 2016)
+
+### feat
+
+- Add Sankey
+
+### fix
+
+- Fix the bug of Area when the data break off in some points
+- Fix the bug of ticks when 0 in ticks
+
+### refactor
+
+- Refactor the payload of tooltip, and the props of activeDot in AreaChart
+
+## 0.10.10 (June 13, 2016)
+
+### fix
+
+- Fix the position of labels in Bar
+
+## 0.10.9 (June 12, 2016)
+
+### refactor
+
+- Use react-container-dimensions to refactor ResponsiveContainer, close #104, close #105
+
+## 0.10.8 (June 2, 2016)
+
+### feat
+
+- Support any svg elements in the charts, such as defs, linearGradient
+
+## 0.10.7 (May 30, 2016)
+
+### fix
+
+- Fix the bug of Brush when data or the size of container changes.
+
+## 0.10.6 (May 25, 2016)
+
+### feat
+
+- Add customized event handlers in BarChart
+- Add curveMonotoneX and curveMonotoneY in Curve and Line
+- Pass stackOffset type as an optional parameter for categorical chart
+- Add `isFront` in ReferenceLine and ReferenceDot to support auxiliary information at differents z-index
+
+### fix
+
+- Fix legend position with margin
+
+## 0.10.5 (May 9, 2016)
+
+### feat
+
+- Support more interpolations in Curve, Line
+- Allow to set custom tick formatter function for Brush start/end index
+
+## 0.10.4 (May 5, 2016)
+
+### feat
+
+- support animation when data update
+
+### refactor
+
+- refactor event handlers in charts
+
+### fix
+
+- fix tooltip position in BarChart
+
+## 0.10.3 (May 4, 2016)
+
+### fix
+
+- fix bug of ReactUtils in Firefox 31
+
+## 0.10.2 (May 4, 2016)
+
+### refactor
+
+- refactor data in Pie which was modified internally
+
+## 0.10.1 (April 27, 2016)
+
+### feat
+
+- Support Tooltip in Treemap
+
+### fix
+
+- Rename `Symbol` to `Symbols`
+- Fix the key of `activeDot` in `AreaChart`
+
+## 0.10.0 (April 21, 2016)
+
+### refactor
+
+- Refactor *ticks* specified in `XAxis`, `YAxis`
+- Use area of `Symbol` to show the size of number in ScatterChart
+- Refactor the `activeShape` in `Scatter`
+
+### feat
+
+- Add `Symbol` and support different `Symbol` in ScatterChart
+
+### fix
+
+- Fix the content of legend in `PieChart`
+- Fix the crush bug when categorical axis has duplicate labels
+- Fix the bug of calculating tick width
+
+## 0.9.3 (April 12, 2016)
+
+### deps
+
+- Update react-smooth to 0.1.4
+
+## 0.9.2 (April 12, 2016)
+
+### deps
+
+- Update react to 15.0.0
+
+## 0.9.1 (April 8, 2016)
+
+### fix
+
+- Fix the bug of bar animation
+
+### deps
+
+- update version of rechats-scale, and babel-eslint
+
+## 0.9.0 (April 7, 2016)
+
+### refactor
+
+- Remove default event handler in Pie, and add `activeIndex` to let user control the active sector
+- Remove detectElementResize
+- Add activeDot in Line and Area
+
+### fix
+
+- Fix the bug of updating line when the length of line is zero at first
+- Fix the base value of AreaChart which was set to be 0 before
+
+## 0.8.8 (March 25, 2016)
+
+### refactor
+
+- Support fixed value of width or height in ResponsiveContainer
+
+## 0.8.7 (March 21, 2016)
+
+### refactor
+
+- Don't overwrite payload in Legend when customized payload has been setted
+
+## 0.8.6 (March 09, 2016)
+
+### refactor
+
+- Use detectElementResize in react-virtualized to refactor ResponsiveContainer
+
+### fix
+
+- Fix ssr render bug of CartesianAxis
+
+## 0.8.5 (March 08, 2016)
+
+### feat
+
+- Add support of function type customized element
+
+### fix
+
+- fix the props labelLine in Pie
+- fix the bug of PureRender
+
+### test
+
+- Add more test cases
+
+## 0.8.4 (March 02, 2016)
+
+### refactor
+
+- Refactor the implementation type of renderPolygon in `Radar`
+- Refactor code in `Treemap`
+- Remove `invariant` and add `LogUtils`
+
+### feat
+
+- Add animation of Area, Radar, RadialBar, Scatter
+- Add label formatter to default tooltip
+- Add props labelLine in `Pie`
+- Add Cell of `Pie` to set different options for each sector
+- Add Cell support in `Bar`, `RadialBar`
+
+### fix
+
+- Fix Pie chart Label position, When using custom label It was not rendering as part of the curve group.
+- Fix `isAnimationActive` props in `Area`
+
+## 0.8.3 (February 25, 2016)
+
+### refactor
+- refactor CartesianChart to a high order component, move some function to /util/CartesianUtils which can be used in ScatterChart.
+- Simplify ComposedChart, remove duplicated code
+- use `filterEventAttributes` to add events props
+- cancel selecting line and area in LineChart, AreaChart, ComposedChart
+
+## 0.8.2 (February 24, 2016)
+
+### fix
+- rollback last fix of Line animation from value
+
+## 0.8.1 (February 24, 2016)
+
+### fix
+- fix the bug of Line animation from value
+
+## 0.8.0 (February 22, 2016)
+
+### feat
+- implement ReferenceDot in cartesian charts
+- support alwaysShow of ReferenceLine and ReferenceDot
+
+### refactor
+- refactor domain of CartesianAxis and PolarRadiusAxis
+- refactor this props name in ReferenceLine
+
+### fix
+- fix the bug of calculate extent in RadarChart
+- fix some bugs of server side rendering when document is called
+
+
+## 0.7.0 (February 17, 2016)
+
+### UI
+- feat: support dasharray line animation
+- refactor(CartesianAxis, PolarAngleAxis, PolarRadiusAxis):rename label to tick
+- feat(label): add label of CartesianAxis, PolarRadiusAxis, ReferenceLine
+- feat: Implement tooltip for PieChart
+- feat:Implement tooltip for RadialBarChart
+- deps(d3-scale,d3-shape,oui-dom-util): 1.update version of d3-scale, d3-shape, oui-dom-util 2.update some api of d3-scale
+
+## 0.6.3 (February 10, 2016)
+
+### UI
+- refactor(Legend): refactor the location of legend
+- fix(CartesianChart,CartesianAxis): 1. fix the bug of dataStartIndex && dataEndIndex when the length of data was changed 2. fix the default value of tickFormatter
+- fix(cartesian/Line.js): fix Line animation bug
+
+## 0.6.2 (February 9, 2016)
+
+### UI
+- feat: use lodash `isEqual` write new pureRender
+
+## 0.6.1 (February 5, 2016)
+
+### UI
+- fix(Pie, RadialBarChart): fix the default value of cx, cy, innerRadius, outerRadius
+
+## 0.6.0 (February 5, 2016)
+
+### UI
+- refactor: rename AdaptionWrapper to ResponsiveContainer
+- refactor: delete some repeated codes, and use polarToCartesian in PolarUtils
+- fix: update the defaultProps of cx, cy, innerRadius, outerRadius
+- fix(Sector, AdaptionWrapper):1. fix the bug of Sector when innerRadius is 0 2. fix the bug of unbind event when component is unmounted
+- feat(util): use lodash replace utils
+
+## 0.5.2 (February 4, 2016)
+
+### UI
+- fix(RadarChart): fix the bug of unreasonable default value for radius in PolarAngleAxis
+
+### Docs
+- chore: change main and jsnext:main in package.json
+
+## 0.5.1 (February 4, 2016)
+
+### UI
+- feat: support percentage string in the props(cx, cy, innerRadius, outerRadius) of RadarChart, PieChart, RadialChart
+- fix(PolarRadiusAxis): add props domain
+- refactor(CartesianAxis): remove unneeded props domain
+
+### Docs
+- chore: optimize npm script commands
+- chore: update pkg
+
+## 0.5.0 (February 3, 2016)
+
+### UI
+- feat(AdaptionWrapper): add AdaptionWrapper to make charts adapt to the size of parent dom
+- refactor: directory structure adjustment
+- fix(LineChart, CartesianChart): 1.fix the bug of margin when only part of the attributes are specified 2.fix the bug of number axis when domain is specified 3.fix the bug of category number when no dataKey is specified 4.format the code in README.md
+- refactor(treemap): support tree structure data; changed props that pass to shape
+
+### Test
+- test: 1.rename some test files 2.add test case of LodashUtil
+- test(treemap): modified treemap test
+
+### Docs
+- deps: add dependence oui-dom-utils
+- chore(README.md): add syntax highlighting to the readme
+- chore(package.json): add keyword react-component
+
+## 0.4.9 (February 2, 2016)
+
+### UI
+- refactor(CartesianAxis, PolarAngleAxis): change props name "orient" to "orientation"
+- refactor(Line, Bar, Pie): refactor animation using new react-smooth
+- refactor(Pie, RidalBar): remove the props clockWise, and add the props endAngle
+### Test
+- test(Line, Bar, Radar, Scatter): add test case
+
+## 0.4.7 (February 1, 2016)
+
+### UI
+- refactor(RadarChart, Radar, PolarAngleAxis, PolarRadiusAxis): refactor the components of Radar
+- refactor(classNames): refactor the method of package a className
+- refactor(Pie): add nameKey in Pie
+
+## 0.4.6 (January 29, 2016)
+
+### UI
+- refactor(Legend): refactor the legend in all the charts, change the location method of legend
+- feat(radar): add new RadarChart with the new component used in Chart, like PolarAngleAxis PolarRadiusAxis PolarGrid Polygon ex
+
+### Test
+- feat(test): add test for charts, chartWrappers, components, and shapes
+
+## 0.4.5 (January 29, 2016)
+
+### UI
+- fix(Curve): fix the bug of curve defined function
+- fix(ComposedChart): fix the bug of bar position when a line and a bar display a same group of data.
+- chore(webpack.config.js): add react, react-dom, react-dom-server to external
+- deps(react, react-dom): update version to v0.14.7
+
+## 0.4.4 (January 28, 2016)
+
+### Dev
+- chore(webpack.config.js): add build command
+
+## 0.4.3 (January 28, 2016)
+
+### UI
+- deps(recharts-scale, react-smooth): update version of recharts-scale and react-smooth
+- refactor(Bar, RadialBar, TreemapChart, Tooltip): rename the props customContent
+
+## 0.4.2 (January 28, 2016)
+
+### UI
+- Add support of stack value in BarChart, AreaChart, ComposedChart
+
+## 0.4.1 (January 27, 2016)
+
+### UI
+- Change name of the props in Tooltip, Legend
+- Fix the bug of customized label element in CartesianAxis
+- Remove repeated, meaningless constructor functions
+
+## 0.4.0 (January 26, 2016)
+
+### UI
+- Refactor some components, include CartesianAxis, Legend, Tooltip etc, to unify some props name.
+
Index: node_modules/recharts/CONTRIBUTING.md
===================================================================
--- node_modules/recharts/CONTRIBUTING.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/CONTRIBUTING.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,76 @@
+# Contributing to Recharts
+
+We'd love for you to contribute to our source code and to make Recharts even better than it is today!
+
+If you want to know how to develop then check out the [Development Guide](/DEVELOPING.md).
+
+Here are the guidelines we'd like you to follow:
+
+## Ongoing Initiatives
+
+We use Github Discussion to organize our discussion along new initiatives and organize ourselves. Please do check the [announcements](https://github.com/recharts/recharts/discussions/categories/announcements) section for an overview of recent initiatives.
+
+Also feel free to join us on Slack: https://recharts.slack.com/archives/C042Q5K5UDC
+
+## <a name="issues"></a>Issues and Bugs
+
+### Where to Find Known Issues
+
+We will be using [GitHub Issues](https://github.com/recharts/recharts/issues) for our bugs and feature requests. We will keep a close eye on this and try to make it clear when we have an internal fix in progress. Before filing a new task, try to make sure your problem doesn't already exist.
+
+### Reporting New Issues
+
+The best way to get your bug fixed is to provide a reduced test case. codesandbox provide a way to give live examples. You can fork our example in [recharts.org](http://recharts.org/) to show your case.
+
+## <a name="testing"></a>Testing
+
+We do cherish tests. They help us move swiftly, and release with confidence.
+In our repo, you will find three types of tests: Unit tests, rendering tests with RTL, and user interaction tests in storybook.
+Wherever possible we prefer the simplest tests - unit tests. Only where needed / useful we would use RTL or storybook tests.
+
+### Unit tests
+
+When implementing a new feature we would prefer to extract pure helper function for data processing. Such functions are found a few utils files. An example is `test/util/ShallowEqual.spec.ts`
+
+### React Testing Library
+
+Some behaviour must be tested upon rendering, such as interactions between components (Line, Tooltip), see `test/component/Tooltip.visibility.spec.tsx` for an example.
+
+### Storybook Test Runner
+
+Storybook also has a great interface for adding tests. By default every story in storybook is a smoke test (rendering without error logs means the test passed). Additionally, it is possible to add actual tests as play functions with an assert to a story. This will often be easier than using React Testing Library, because the natural test debugging tool is Storybook itself. See for example `storybook/stories/Examples/cartesian/ReferenceLine/ReferenceLineIfOverflow.stories.tsx`
+
+### Mutation tests
+
+We have [stryker](https://stryker-mutator.io/docs/) installed and ready to use for mutation testing.
+
+If you want to run mutation test be aware that these may take hours! A single file will take 15 minutes or more.
+
+To run, update the list of checked files in `./stryker.config.mjs` and then run with `npm run test-mutation`.
+
+You will find test output in your console, and also HTML report in the `./reports` folder.
+
+## <a name="pr"></a>Pull Requests
+
+**Working on your first Pull Request?** You can learn how from this _free_ series [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github)
+
+_Before_ submitting a pull request, please make sure the following is done…
+
+- Search [GitHub](https://github.com/recharts/recharts/pulls) for an open or closed Pull Request that relates to your submission. You don't want to duplicate effort.
+
+- Fork the repo and create your branch from `main`.
+- If you have added functionality or changed existing functionality, be sure to add a test. Ideally a unit test for helper function, or a test that includes rendering with RTL.
+- If you've changed APIs, make sure that the stories in Storybook are working as expected.
+- Ensure the test suite passes (`npm run test`).
+- Make sure your code lints (`npm run lint`) - we've done our best to make sure these rules match our internal linting guidelines.
+
+## <a name="code"></a>Code Guide
+
+Our linter will catch most styling issues that may exist in your code.
+You can check the status of your code styling by running: `npm run lint`
+
+However, there are still some styles that the linter cannot pick up. If you are unsure about something, looking at [Airbnb's Style Guide](https://github.com/airbnb/javascript) will guide you in the right direction.
+
+## <a name="license"></a>License
+
+By contributing to Recharts, you agree that your contributions will be licensed under its MIT license.
Index: node_modules/recharts/DEVELOPING.md
===================================================================
--- node_modules/recharts/DEVELOPING.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/DEVELOPING.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,122 @@
+# Setup and dev build
+
+```sh
+$ git clone https://github.com/recharts/recharts.git
+$ cd recharts
+$ npm install
+$ npm run build
+```
+
+If you want to know the guidelines we follow then read (CONTRIBUTING.md)[/CONTRIBUTING.md].
+
+## Running tests
+
+```sh
+$ npm run test
+```
+
+## Running mutation tests
+
+Mutation tests may take several hours to complete.
+You may want to first open `./stryker.config.mjs` and set the `mutate` property to a specific file or directory
+that you want to test.
+
+Mutation tests do not run in CI.
+
+```sh
+$ npm run test-mutation
+```
+
+## Running lint and types
+
+You may also want to enable ESLint and Prettier configuration in your favourite IDE.
+
+```sh
+$ npm run lint
+$ npm run check-types
+```
+
+## Storybook
+
+To run the Storybook UI:
+
+```sh
+$ npm run storybook
+```
+
+and then browse to http://localhost:6006.
+
+While the storybook is running:
+
+```sh
+$ npm run test-storybook
+```
+
+## Run visual regression tests (using playwright)
+
+### Prerequisites
+
+Playwright tests are running inside Docker. You will need to have Docker installed and running.
+See https://docs.docker.com/get-started/get-docker/. You do not need Docker account or login.
+
+You only need to do this once.
+
+### Build the Docker image
+
+This takes two or three minutes to complete.
+You will need to re-build every time you make a change to dependencies in `package.json`.
+
+```sh
+$ npm run test-vr:prepare
+```
+
+### Run the tests
+
+Now, the usual loop. Write a new test, run it, fix it, repeat.
+
+```sh
+$ npm run test-vr
+```
+
+Alternatively, the UI playwright mode is available as well:
+
+```sh
+$ npm run test-vr:ui
+````
+
+If you want to record new snapshots or update the old ones, you can run:
+
+```sh
+$ npm run test-vr:update
+```
+
+You will see new files created in the `test-vr/__snapshots__` directory, please commit them to the repository!
+
+### See VR test results
+
+Open http://localhost:9323 in your browser to see the results of the tests.
+The CLI will tell you to run a "show-report" which is not necessary because there is already a Docker container running
+in the background and serving the report. Just open the URL in your browser.
+
+## Releases
+
+[Releases](https://github.com/recharts/recharts/releases) are automated via GH Actions - when a new release is created
+in GH, CI will trigger that:
+
+1. Runs a build
+2. Runs tests
+3. Runs `npm publish`
+
+Version increments and tagging are not automated at this time.
+
+### Release testing
+
+Until we can automate more, it should be preferred to test as close to the results of `npm publish` as we possibly can.
+This ensures we don't publish unintended breaking changes. One way to do that is using `yalc` - `npm i -g yalc`.
+
+1. Make your changes in recharts
+2. `yalc publish` in recharts
+3. `yalc add recharts` in your test package (ex: in a vite or webpack reach app with recharts installed, imported, and
+   your recent changes used)
+4. `npm install`
+5. Test a local run, a build, etc.
Index: node_modules/recharts/LICENSE
===================================================================
--- node_modules/recharts/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present recharts
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
Index: node_modules/recharts/README.md
===================================================================
--- node_modules/recharts/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+# Recharts
+
+[![storybook](https://raw.githubusercontent.com/storybooks/brand/master/badge/badge-storybook.svg)](https://recharts.org/en-US/storybook)
+[![Build Status](https://github.com/recharts/recharts/workflows/Node.js%20CI/badge.svg)](https://github.com/recharts/recharts/actions)
+[![codecov](https://codecov.io/gh/recharts/recharts/graph/badge.svg?token=Bn6L2hrl8T)](https://codecov.io/gh/recharts/recharts)
+[![npm version](https://badge.fury.io/js/recharts.svg)](http://badge.fury.io/js/recharts)
+[![npm downloads](https://img.shields.io/npm/dm/recharts.svg?style=flat-square)](https://www.npmjs.com/package/recharts)
+[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](/LICENSE)
+
+## Introduction
+
+Recharts is a **Redefined** chart library built with [React](https://facebook.github.io/react/) and [D3](http://d3js.org).
+
+The main purpose of this library is to help you to write charts in React applications without any pain. Main principles of Recharts are:
+
+1. **Simply** deploy with React components.
+2. **Native** SVG support, lightweight with minimal dependencies.
+3. **Declarative** components.
+
+Documentation at [recharts.org](https://recharts.org) and our [storybook](https://recharts.org/en-US/storybook)
+
+Also see [the wiki](https://github.com/recharts/recharts/wiki).
+
+All development is done on the `main` branch. The current latest release and storybook documentation reflects what is on the `release` branch.
+
+## Examples
+
+```jsx
+<LineChart width={400} height={400} data={data}>
+  <XAxis dataKey="name" />
+  <Tooltip />
+  <CartesianGrid stroke="#f5f5f5" />
+  <Line type="monotone" dataKey="uv" stroke="#ff7300" />
+  <Line type="monotone" dataKey="pv" stroke="#387908" />
+</LineChart>
+```
+
+All the components of Recharts are clearly separated. The LineChart is composed of x axis, tooltip, grid, and line items, and each of them is an independent React Component. The clear separation and composition of components is one of the principle Recharts follows.
+
+## Installation
+
+### npm
+
+NPM is the easiest and fastest way to get started using Recharts. It is also the recommended installation method when building single-page applications (SPAs). It pairs nicely with a CommonJS module bundler such as Webpack.
+
+```sh
+# latest stable
+$ npm install recharts react-is
+```
+
+`react-is` needs to match the version of your installed `react` package.
+
+### umd
+
+The UMD build is also available on unpkg.com:
+
+```html
+<script src="https://unpkg.com/react/umd/react.production.min.js"></script>
+<script src="https://unpkg.com/react-dom/umd/react-dom.production.min.js"></script>
+<script src="https://unpkg.com/react-is/umd/react-is.production.min.js"></script>
+<script src="https://unpkg.com/recharts/umd/Recharts.min.js"></script>
+```
+
+Then you can find the library on `window.Recharts`.
+
+## Contributing
+
+Recharts is open source. If you want to contribute to the project, please read the [CONTRIBUTING.md](/CONTRIBUTING.md)
+to understand how to contribute to the project and [DEVELOPING.md](/DEVELOPING.md) to set up your development
+environment.
+
+## Thanks
+
+<a href="https://www.chromatic.com/"><img src="https://user-images.githubusercontent.com/321738/84662277-e3db4f80-af1b-11ea-88f5-91d67a5e59f6.png" width="153" height="30" alt="Chromatic" /></a>
+
+Thanks to [Chromatic](https://www.chromatic.com/) for providing the visual testing platform that helps us review UI changes and catch visual regressions.
+
+[![JetBrains logo.](https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg)](https://jb.gg/OpenSourceSupport)
+
+Thanks to JetBrains for providing OSS development license for their IDEs.
+
+## License
+
+[MIT](http://opensource.org/licenses/MIT)
+
+Copyright (c) 2015-2024 Recharts Group.
Index: node_modules/recharts/es6/animation/Animate.js
===================================================================
--- node_modules/recharts/es6/animation/Animate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/Animate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,259 @@
+var _excluded = ["children", "begin", "duration", "attributeName", "easing", "isActive", "from", "to", "canBegin", "onAnimationEnd", "shouldReAnimate", "onAnimationReStart", "animationManager"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { Children, cloneElement, PureComponent } from 'react';
+import isEqual from 'es-toolkit/compat/isEqual';
+import { configEasing } from './easing';
+import configUpdate from './configUpdate';
+import { getTransitionVal } from './util';
+import { useAnimationManager } from './useAnimationManager';
+class AnimateImpl extends PureComponent {
+  constructor(props, context) {
+    super(props, context);
+    _defineProperty(this, "mounted", false);
+    _defineProperty(this, "manager", undefined);
+    _defineProperty(this, "stopJSAnimation", null);
+    _defineProperty(this, "unSubscribe", null);
+    var {
+      isActive,
+      attributeName,
+      from,
+      to,
+      children,
+      duration,
+      animationManager
+    } = this.props;
+    this.manager = animationManager;
+    this.handleStyleChange = this.handleStyleChange.bind(this);
+    this.changeStyle = this.changeStyle.bind(this);
+    if (!isActive || duration <= 0) {
+      this.state = {
+        style: {}
+      };
+
+      // if children is a function and animation is not active, set style to 'to'
+      if (typeof children === 'function') {
+        this.state = {
+          style: to
+        };
+      }
+      return;
+    }
+    if (from) {
+      if (typeof children === 'function') {
+        this.state = {
+          style: from
+        };
+        return;
+      }
+      this.state = {
+        style: attributeName ? {
+          [attributeName]: from
+        } : from
+      };
+    } else {
+      this.state = {
+        style: {}
+      };
+    }
+  }
+  componentDidMount() {
+    var {
+      isActive,
+      canBegin
+    } = this.props;
+    this.mounted = true;
+    if (!isActive || !canBegin) {
+      return;
+    }
+    this.runAnimation(this.props);
+  }
+  componentDidUpdate(prevProps) {
+    var {
+      isActive,
+      canBegin,
+      attributeName,
+      shouldReAnimate,
+      to,
+      from: currentFrom
+    } = this.props;
+    var {
+      style
+    } = this.state;
+    if (!canBegin) {
+      return;
+    }
+    if (!isActive) {
+      var newState = {
+        style: attributeName ? {
+          [attributeName]: to
+        } : to
+      };
+      if (this.state && style) {
+        if (attributeName && style[attributeName] !== to || !attributeName && style !== to) {
+          this.setState(newState);
+        }
+      }
+      return;
+    }
+    if (isEqual(prevProps.to, to) && prevProps.canBegin && prevProps.isActive) {
+      return;
+    }
+    var isTriggered = !prevProps.canBegin || !prevProps.isActive;
+    this.manager.stop();
+    if (this.stopJSAnimation) {
+      this.stopJSAnimation();
+    }
+    var from = isTriggered || shouldReAnimate ? currentFrom : prevProps.to;
+    if (this.state && style) {
+      var _newState = {
+        style: attributeName ? {
+          [attributeName]: from
+        } : from
+      };
+      if (attributeName && style[attributeName] !== from || !attributeName && style !== from) {
+        this.setState(_newState);
+      }
+    }
+    this.runAnimation(_objectSpread(_objectSpread({}, this.props), {}, {
+      from,
+      begin: 0
+    }));
+  }
+  componentWillUnmount() {
+    this.mounted = false;
+    var {
+      onAnimationEnd
+    } = this.props;
+    if (this.unSubscribe) {
+      this.unSubscribe();
+    }
+    this.manager.stop();
+    if (this.stopJSAnimation) {
+      this.stopJSAnimation();
+    }
+    if (onAnimationEnd) {
+      onAnimationEnd();
+    }
+  }
+  handleStyleChange(style) {
+    this.changeStyle(style);
+  }
+  changeStyle(style) {
+    if (this.mounted) {
+      this.setState({
+        style
+      });
+    }
+  }
+  runJSAnimation(props) {
+    var {
+      from,
+      to,
+      duration,
+      easing,
+      begin,
+      onAnimationEnd,
+      onAnimationStart
+    } = props;
+    var startAnimation = configUpdate(from, to, configEasing(easing), duration, this.changeStyle, this.manager.getTimeoutController());
+    var finalStartAnimation = () => {
+      this.stopJSAnimation = startAnimation();
+    };
+    this.manager.start([onAnimationStart, begin, finalStartAnimation, duration, onAnimationEnd]);
+  }
+  runAnimation(props) {
+    var {
+      begin,
+      duration,
+      attributeName,
+      to: propsTo,
+      easing,
+      onAnimationStart,
+      onAnimationEnd,
+      children
+    } = props;
+    this.unSubscribe = this.manager.subscribe(this.handleStyleChange);
+    if (typeof easing === 'function' || typeof children === 'function' || easing === 'spring') {
+      this.runJSAnimation(props);
+      return;
+    }
+    var to = attributeName ? {
+      [attributeName]: propsTo
+    } : propsTo;
+    var transition = getTransitionVal(Object.keys(to), duration, easing);
+    this.manager.start([onAnimationStart, begin, _objectSpread(_objectSpread({}, to), {}, {
+      transition
+    }), duration, onAnimationEnd]);
+  }
+  render() {
+    var _this$props = this.props,
+      {
+        children,
+        begin,
+        duration,
+        attributeName,
+        easing,
+        isActive,
+        from,
+        to,
+        canBegin,
+        onAnimationEnd,
+        shouldReAnimate,
+        onAnimationReStart,
+        animationManager
+      } = _this$props,
+      others = _objectWithoutProperties(_this$props, _excluded);
+    var count = Children.count(children);
+    var stateStyle = this.state.style;
+    if (typeof children === 'function') {
+      return children(stateStyle);
+    }
+    if (!isActive || count === 0 || duration <= 0) {
+      return children;
+    }
+    var cloneContainer = container => {
+      var {
+        style = {},
+        className
+      } = container.props;
+      var res = /*#__PURE__*/cloneElement(container, _objectSpread(_objectSpread({}, others), {}, {
+        style: _objectSpread(_objectSpread({}, style), stateStyle),
+        className
+      }));
+      return res;
+    };
+    if (count === 1) {
+      // @ts-expect-error TODO - fix the type error
+      return cloneContainer(Children.only(children));
+    }
+
+    // @ts-expect-error TODO - fix the type error
+    return /*#__PURE__*/React.createElement("div", null, Children.map(children, child => cloneContainer(child)));
+  }
+}
+_defineProperty(AnimateImpl, "displayName", 'Animate');
+_defineProperty(AnimateImpl, "defaultProps", {
+  begin: 0,
+  duration: 1000,
+  attributeName: '',
+  easing: 'ease',
+  isActive: true,
+  canBegin: true,
+  onAnimationEnd: () => {},
+  onAnimationStart: () => {}
+});
+export function Animate(props) {
+  var _props$attributeName;
+  var animationManager = useAnimationManager((_props$attributeName = props.attributeName) !== null && _props$attributeName !== void 0 ? _props$attributeName : Object.keys(props.to).join(','), props.animationManager);
+  return /*#__PURE__*/React.createElement(AnimateImpl, _extends({}, props, {
+    animationManager: animationManager
+  }));
+}
Index: node_modules/recharts/es6/animation/AnimationManager.js
===================================================================
--- node_modules/recharts/es6/animation/AnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/AnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,66 @@
+/**
+ * Represents a single item in the ReactSmoothQueue.
+ * The item can be:
+ * - A number representing a delay in milliseconds.
+ * - An object representing a style change
+ * - A StartAnimationFunction that starts eased transition and calls different render
+ *      because of course in Recharts we have to have three ways to do everything
+ * - An arbitrary function to be executed
+ */
+
+export function createAnimateManager(timeoutController) {
+  var currStyle;
+  var handleChange = () => null;
+  var shouldStop = false;
+  var cancelTimeout = null;
+  var setStyle = _style => {
+    if (shouldStop) {
+      return;
+    }
+    if (Array.isArray(_style)) {
+      if (!_style.length) {
+        return;
+      }
+      var styles = _style;
+      var [curr, ...restStyles] = styles;
+      if (typeof curr === 'number') {
+        cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles), curr);
+        return;
+      }
+      setStyle(curr);
+      cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles));
+      return;
+    }
+    if (typeof _style === 'string') {
+      currStyle = _style;
+      handleChange(currStyle);
+    }
+    if (typeof _style === 'object') {
+      currStyle = _style;
+      handleChange(currStyle);
+    }
+    if (typeof _style === 'function') {
+      _style();
+    }
+  };
+  return {
+    stop: () => {
+      shouldStop = true;
+    },
+    start: style => {
+      shouldStop = false;
+      if (cancelTimeout) {
+        cancelTimeout();
+        cancelTimeout = null;
+      }
+      setStyle(style);
+    },
+    subscribe: _handleChange => {
+      handleChange = _handleChange;
+      return () => {
+        handleChange = () => null;
+      };
+    },
+    getTimeoutController: () => timeoutController
+  };
+}
Index: node_modules/recharts/es6/animation/CSSTransitionAnimate.js
===================================================================
--- node_modules/recharts/es6/animation/CSSTransitionAnimate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/CSSTransitionAnimate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+import { useEffect, useState } from 'react';
+import { noop } from 'es-toolkit';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { useAnimationManager } from './useAnimationManager';
+import { getTransitionVal } from './util';
+var defaultProps = {
+  begin: 0,
+  duration: 1000,
+  easing: 'ease',
+  isActive: true,
+  canBegin: true,
+  onAnimationEnd: () => {},
+  onAnimationStart: () => {}
+};
+export function CSSTransitionAnimate(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultProps);
+  var {
+    from,
+    to,
+    attributeName,
+    isActive,
+    canBegin,
+    duration,
+    easing,
+    begin,
+    onAnimationEnd,
+    onAnimationStart,
+    children
+  } = props;
+  var animationManager = useAnimationManager(attributeName, props.animationManager);
+  var [style, setStyle] = useState(isActive ? from : to);
+  useEffect(() => {
+    if (!isActive) {
+      setStyle(to);
+    }
+  }, [isActive, to]);
+  useEffect(() => {
+    if (!isActive || !canBegin) {
+      return noop;
+    }
+    var unsubscribe = animationManager.subscribe(setStyle);
+    animationManager.start([onAnimationStart, begin, to, duration, onAnimationEnd]);
+    return () => {
+      animationManager.stop();
+      if (unsubscribe) {
+        unsubscribe();
+      }
+      onAnimationEnd();
+    };
+  }, [isActive, canBegin, duration, easing, begin, onAnimationStart, onAnimationEnd, animationManager, to]);
+  if (isActive && canBegin) {
+    var transition = getTransitionVal([attributeName], duration, easing);
+    return children({
+      transition,
+      [attributeName]: style
+    });
+  }
+  return children({
+    [attributeName]: style
+  });
+}
Index: node_modules/recharts/es6/animation/JavascriptAnimate.js
===================================================================
--- node_modules/recharts/es6/animation/JavascriptAnimate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/JavascriptAnimate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+import { useEffect, useRef, useState } from 'react';
+import { noop } from 'es-toolkit';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import configUpdate from './configUpdate';
+import { configEasing } from './easing';
+import { useAnimationManager } from './useAnimationManager';
+var defaultJavascriptAnimateProps = {
+  begin: 0,
+  duration: 1000,
+  easing: 'ease',
+  isActive: true,
+  canBegin: true,
+  onAnimationEnd: () => {},
+  onAnimationStart: () => {}
+};
+var from = {
+  t: 0
+};
+var to = {
+  t: 1
+};
+export function JavascriptAnimate(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultJavascriptAnimateProps);
+  var {
+    isActive,
+    canBegin,
+    duration,
+    easing,
+    begin,
+    onAnimationEnd,
+    onAnimationStart,
+    children
+  } = props;
+  var animationManager = useAnimationManager('JavascriptAnimate', props.animationManager);
+  var [style, setStyle] = useState(isActive ? from : to);
+  var stopJSAnimation = useRef(null);
+  useEffect(() => {
+    if (!isActive) {
+      setStyle(to);
+    }
+  }, [isActive]);
+  useEffect(() => {
+    if (!isActive || !canBegin) {
+      return noop;
+    }
+    var startAnimation = configUpdate(from, to, configEasing(easing), duration, setStyle, animationManager.getTimeoutController());
+    var onAnimationActive = () => {
+      stopJSAnimation.current = startAnimation();
+    };
+    animationManager.start([onAnimationStart, begin, onAnimationActive, duration, onAnimationEnd]);
+    return () => {
+      animationManager.stop();
+      if (stopJSAnimation.current) {
+        stopJSAnimation.current();
+      }
+      onAnimationEnd();
+    };
+  }, [isActive, canBegin, duration, easing, begin, onAnimationStart, onAnimationEnd, animationManager]);
+  return children(style.t);
+}
Index: node_modules/recharts/es6/animation/configUpdate.js
===================================================================
--- node_modules/recharts/es6/animation/configUpdate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/configUpdate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,119 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { getIntersectionKeys, mapObject } from './util';
+export var alpha = (begin, end, k) => begin + (end - begin) * k;
+var needContinue = _ref => {
+  var {
+    from,
+    to
+  } = _ref;
+  return from !== to;
+};
+/*
+ * @description: cal new from value and velocity in each stepper
+ * @return: { [styleProperty]: { from, to, velocity } }
+ */
+var calStepperVals = (easing, preVals, steps) => {
+  var nextStepVals = mapObject((key, val) => {
+    if (needContinue(val)) {
+      var [newX, newV] = easing(val.from, val.to, val.velocity);
+      return _objectSpread(_objectSpread({}, val), {}, {
+        from: newX,
+        velocity: newV
+      });
+    }
+    return val;
+  }, preVals);
+  if (steps < 1) {
+    return mapObject((key, val) => {
+      if (needContinue(val)) {
+        return _objectSpread(_objectSpread({}, val), {}, {
+          velocity: alpha(val.velocity, nextStepVals[key].velocity, steps),
+          from: alpha(val.from, nextStepVals[key].from, steps)
+        });
+      }
+      return val;
+    }, preVals);
+  }
+  return calStepperVals(easing, nextStepVals, steps - 1);
+};
+function createStepperUpdate(from, to, easing, interKeys, render, timeoutController) {
+  var preTime;
+  var stepperStyle = interKeys.reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+    [key]: {
+      from: from[key],
+      velocity: 0,
+      to: to[key]
+    }
+  }), {});
+  var getCurrStyle = () => mapObject((key, val) => val.from, stepperStyle);
+  var shouldStopAnimation = () => !Object.values(stepperStyle).filter(needContinue).length;
+  var stopAnimation = null;
+  var stepperUpdate = now => {
+    if (!preTime) {
+      preTime = now;
+    }
+    var deltaTime = now - preTime;
+    var steps = deltaTime / easing.dt;
+    stepperStyle = calStepperVals(easing, stepperStyle, steps);
+    // get union set and add compatible prefix
+    render(_objectSpread(_objectSpread(_objectSpread({}, from), to), getCurrStyle()));
+    preTime = now;
+    if (!shouldStopAnimation()) {
+      stopAnimation = timeoutController.setTimeout(stepperUpdate);
+    }
+  };
+
+  // return start animation method
+  return () => {
+    stopAnimation = timeoutController.setTimeout(stepperUpdate);
+
+    // return stop animation method
+    return () => {
+      stopAnimation();
+    };
+  };
+}
+function createTimingUpdate(from, to, easing, duration, interKeys, render, timeoutController) {
+  var stopAnimation = null;
+  var timingStyle = interKeys.reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+    [key]: [from[key], to[key]]
+  }), {});
+  var beginTime;
+  var timingUpdate = now => {
+    if (!beginTime) {
+      beginTime = now;
+    }
+    var t = (now - beginTime) / duration;
+    var currStyle = mapObject((key, val) => alpha(...val, easing(t)), timingStyle);
+
+    // get union set and add compatible prefix
+    render(_objectSpread(_objectSpread(_objectSpread({}, from), to), currStyle));
+    if (t < 1) {
+      stopAnimation = timeoutController.setTimeout(timingUpdate);
+    } else {
+      var finalStyle = mapObject((key, val) => alpha(...val, easing(1)), timingStyle);
+      render(_objectSpread(_objectSpread(_objectSpread({}, from), to), finalStyle));
+    }
+  };
+
+  // return start animation method
+  return () => {
+    stopAnimation = timeoutController.setTimeout(timingUpdate);
+
+    // return stop animation method
+    return () => {
+      stopAnimation();
+    };
+  };
+}
+
+// configure update function
+// eslint-disable-next-line import/no-default-export
+export default (from, to, easing, duration, render, timeoutController) => {
+  var interKeys = getIntersectionKeys(from, to);
+  return easing.isStepper === true ? createStepperUpdate(from, to, easing, interKeys, render, timeoutController) : createTimingUpdate(from, to, easing, duration, interKeys, render, timeoutController);
+};
Index: node_modules/recharts/es6/animation/createDefaultAnimationManager.js
===================================================================
--- node_modules/recharts/es6/animation/createDefaultAnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/createDefaultAnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { createAnimateManager } from './AnimationManager';
+import { RequestAnimationFrameTimeoutController } from './timeoutController';
+export function createDefaultAnimationManager() {
+  return createAnimateManager(new RequestAnimationFrameTimeoutController());
+}
Index: node_modules/recharts/es6/animation/easing.js
===================================================================
--- node_modules/recharts/es6/animation/easing.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/easing.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+export var ACCURACY = 1e-4;
+var cubicBezierFactor = (c1, c2) => [0, 3 * c1, 3 * c2 - 6 * c1, 3 * c1 - 3 * c2 + 1];
+var evaluatePolynomial = (params, t) => params.map((param, i) => param * t ** i).reduce((pre, curr) => pre + curr);
+var cubicBezier = (c1, c2) => t => {
+  var params = cubicBezierFactor(c1, c2);
+  return evaluatePolynomial(params, t);
+};
+var derivativeCubicBezier = (c1, c2) => t => {
+  var params = cubicBezierFactor(c1, c2);
+  var newParams = [...params.map((param, i) => param * i).slice(1), 0];
+  return evaluatePolynomial(newParams, t);
+};
+// calculate cubic-bezier using Newton's method
+export var configBezier = function configBezier() {
+  var x1, x2, y1, y2;
+  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+  if (args.length === 1) {
+    switch (args[0]) {
+      case 'linear':
+        [x1, y1, x2, y2] = [0.0, 0.0, 1.0, 1.0];
+        break;
+      case 'ease':
+        [x1, y1, x2, y2] = [0.25, 0.1, 0.25, 1.0];
+        break;
+      case 'ease-in':
+        [x1, y1, x2, y2] = [0.42, 0.0, 1.0, 1.0];
+        break;
+      case 'ease-out':
+        [x1, y1, x2, y2] = [0.42, 0.0, 0.58, 1.0];
+        break;
+      case 'ease-in-out':
+        [x1, y1, x2, y2] = [0.0, 0.0, 0.58, 1.0];
+        break;
+      default:
+        {
+          var easing = args[0].split('(');
+          if (easing[0] === 'cubic-bezier' && easing[1].split(')')[0].split(',').length === 4) {
+            [x1, y1, x2, y2] = easing[1].split(')')[0].split(',').map(x => parseFloat(x));
+          }
+        }
+    }
+  } else if (args.length === 4) {
+    [x1, y1, x2, y2] = args;
+  }
+  var curveX = cubicBezier(x1, x2);
+  var curveY = cubicBezier(y1, y2);
+  var derCurveX = derivativeCubicBezier(x1, x2);
+  var rangeValue = value => {
+    if (value > 1) {
+      return 1;
+    }
+    if (value < 0) {
+      return 0;
+    }
+    return value;
+  };
+  var bezier = _t => {
+    var t = _t > 1 ? 1 : _t;
+    var x = t;
+    for (var i = 0; i < 8; ++i) {
+      var evalT = curveX(x) - t;
+      var derVal = derCurveX(x);
+      if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {
+        return curveY(x);
+      }
+      x = rangeValue(x - evalT / derVal);
+    }
+    return curveY(x);
+  };
+  bezier.isStepper = false;
+  return bezier;
+};
+export var configSpring = function configSpring() {
+  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+  var {
+    stiff = 100,
+    damping = 8,
+    dt = 17
+  } = config;
+  var stepper = (currX, destX, currV) => {
+    var FSpring = -(currX - destX) * stiff;
+    var FDamping = currV * damping;
+    var newV = currV + (FSpring - FDamping) * dt / 1000;
+    var newX = currV * dt / 1000 + currX;
+    if (Math.abs(newX - destX) < ACCURACY && Math.abs(newV) < ACCURACY) {
+      return [destX, 0];
+    }
+    return [newX, newV];
+  };
+  stepper.isStepper = true;
+  stepper.dt = dt;
+  return stepper;
+};
+export var configEasing = easing => {
+  if (typeof easing === 'string') {
+    switch (easing) {
+      case 'ease':
+      case 'ease-in-out':
+      case 'ease-out':
+      case 'ease-in':
+      case 'linear':
+        return configBezier(easing);
+      case 'spring':
+        return configSpring();
+      default:
+        if (easing.split('(')[0] === 'cubic-bezier') {
+          return configBezier(easing);
+        }
+    }
+  }
+  if (typeof easing === 'function') {
+    return easing;
+  }
+  return null;
+};
Index: node_modules/recharts/es6/animation/timeoutController.js
===================================================================
--- node_modules/recharts/es6/animation/timeoutController.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/timeoutController.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+/**
+ * Callback type for the timeout function.
+ * Receives current time in milliseconds as an argument.
+ */
+
+/**
+ * A function that, when called, cancels the timeout.
+ */
+
+export class RequestAnimationFrameTimeoutController {
+  setTimeout(callback) {
+    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+    var startTime = performance.now();
+    var requestId = null;
+    var executeCallback = now => {
+      if (now - startTime >= delay) {
+        callback(now);
+        // tests fail without the extra if, even when five lines below it's not needed
+        // TODO finish transition to the mocked timeout controller and then remove this condition
+      } else if (typeof requestAnimationFrame === 'function') {
+        requestId = requestAnimationFrame(executeCallback);
+      }
+    };
+    requestId = requestAnimationFrame(executeCallback);
+    return () => {
+      cancelAnimationFrame(requestId);
+    };
+  }
+}
Index: node_modules/recharts/es6/animation/useAnimationManager.js
===================================================================
--- node_modules/recharts/es6/animation/useAnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/useAnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { createContext, useContext, useMemo } from 'react';
+import { createDefaultAnimationManager } from './createDefaultAnimationManager';
+export var AnimationManagerContext = /*#__PURE__*/createContext(createDefaultAnimationManager);
+export function useAnimationManager(animationId, animationManagerFromProps) {
+  var contextAnimationManager = useContext(AnimationManagerContext);
+  return useMemo(() => animationManagerFromProps !== null && animationManagerFromProps !== void 0 ? animationManagerFromProps : contextAnimationManager(animationId), [animationId, animationManagerFromProps, contextAnimationManager]);
+}
Index: node_modules/recharts/es6/animation/util.js
===================================================================
--- node_modules/recharts/es6/animation/util.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/animation/util.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/*
+ * @description: convert camel case to dash case
+ * string => string
+ */
+export var getDashCase = name => name.replace(/([A-Z])/g, v => "-".concat(v.toLowerCase()));
+export var getTransitionVal = (props, duration, easing) => props.map(prop => "".concat(getDashCase(prop), " ").concat(duration, "ms ").concat(easing)).join(',');
+
+/**
+ * Finds the intersection of keys between two objects
+ * @param {object} preObj previous object
+ * @param {object} nextObj next object
+ * @returns an array of keys that exist in both objects
+ */
+export var getIntersectionKeys = (preObj, nextObj) => [Object.keys(preObj), Object.keys(nextObj)].reduce((a, b) => a.filter(c => b.includes(c)));
+
+/**
+ * Maps an object to another object
+ * @param {function} fn function to map
+ * @param {object} obj object to map
+ * @returns mapped object
+ */
+export var mapObject = (fn, obj) => Object.keys(obj).reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+  [key]: fn(key, obj[key])
+}), {});
Index: node_modules/recharts/es6/cartesian/Area.js
===================================================================
--- node_modules/recharts/es6/cartesian/Area.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/Area.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,781 @@
+var _excluded = ["id"],
+  _excluded2 = ["activeDot", "animationBegin", "animationDuration", "animationEasing", "connectNulls", "dot", "fill", "fillOpacity", "hide", "isAnimationActive", "legendType", "stroke", "xAxisId", "yAxisId"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { PureComponent, useCallback, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { Curve } from '../shape/Curve';
+import { Dot } from '../shape/Dot';
+import { Layer } from '../container/Layer';
+import { LabelList } from '../component/LabelList';
+import { Global } from '../util/Global';
+import { interpolate, isNan, isNullish, isNumber } from '../util/DataUtils';
+import { getCateCoordinateOfLine, getNormalizedStackId, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { filterProps, isClipDot } from '../util/ReactUtils';
+import { ActivePoints } from '../component/ActivePoints';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';
+import { selectArea } from '../state/selectors/areaSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { useChartLayout } from '../context/chartLayoutContext';
+import { useChartName } from '../state/selectors/selectors';
+import { SetLegendPayload } from '../state/SetLegendPayload';
+import { useAppSelector } from '../state/hooks';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
+import { usePlotArea } from '../hooks';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+
+function getLegendItemColor(stroke, fill) {
+  return stroke && stroke !== 'none' ? stroke : fill;
+}
+var computeLegendPayloadFromAreaData = props => {
+  var {
+    dataKey,
+    name,
+    stroke,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: getLegendItemColor(stroke, fill),
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    data,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    unit
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey: undefined,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: props.tooltipType,
+      color: getLegendItemColor(stroke, fill),
+      unit
+    }
+  };
+}
+var renderDotItem = (option, props) => {
+  var dotItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    dotItem = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    dotItem = option(props);
+  } else {
+    var className = clsx('recharts-area-dot', typeof option !== 'boolean' ? option.className : '');
+    dotItem = /*#__PURE__*/React.createElement(Dot, _extends({}, props, {
+      className: className
+    }));
+  }
+  return dotItem;
+};
+function shouldRenderDots(points, dot) {
+  if (points == null) {
+    return false;
+  }
+  if (dot) {
+    return true;
+  }
+  return points.length === 1;
+}
+function Dots(_ref) {
+  var {
+    clipPathId,
+    points,
+    props
+  } = _ref;
+  var {
+    needClip,
+    dot,
+    dataKey
+  } = props;
+  if (!shouldRenderDots(points, dot)) {
+    return null;
+  }
+  var clipDot = isClipDot(dot);
+  var areaProps = svgPropertiesNoEvents(props);
+  var customDotProps = filterProps(dot, true);
+  var dots = points.map((entry, i) => {
+    var dotProps = _objectSpread(_objectSpread(_objectSpread({
+      key: "dot-".concat(i),
+      r: 3
+    }, areaProps), customDotProps), {}, {
+      index: i,
+      cx: entry.x,
+      cy: entry.y,
+      dataKey,
+      value: entry.value,
+      payload: entry.payload,
+      points
+    });
+    return renderDotItem(dot, dotProps);
+  });
+  var dotsProps = {
+    clipPath: needClip ? "url(#clipPath-".concat(clipDot ? '' : 'dots-').concat(clipPathId, ")") : undefined
+  };
+  return /*#__PURE__*/React.createElement(Layer, _extends({
+    className: "recharts-area-dots"
+  }, dotsProps), dots);
+}
+function StaticArea(_ref2) {
+  var {
+    points,
+    baseLine,
+    needClip,
+    clipPathId,
+    props,
+    showLabels
+  } = _ref2;
+  var {
+    layout,
+    type,
+    stroke,
+    connectNulls,
+    isRange
+  } = props;
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded);
+  var allOtherProps = svgPropertiesNoEvents(propsWithoutId);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, (points === null || points === void 0 ? void 0 : points.length) > 1 && /*#__PURE__*/React.createElement(Layer, {
+    clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined
+  }, /*#__PURE__*/React.createElement(Curve, _extends({}, allOtherProps, {
+    id: id,
+    points: points,
+    connectNulls: connectNulls,
+    type: type,
+    baseLine: baseLine,
+    layout: layout,
+    stroke: "none",
+    className: "recharts-area-area"
+  })), stroke !== 'none' && /*#__PURE__*/React.createElement(Curve, _extends({}, allOtherProps, {
+    className: "recharts-area-curve",
+    layout: layout,
+    type: type,
+    connectNulls: connectNulls,
+    fill: "none",
+    points: points
+  })), stroke !== 'none' && isRange && /*#__PURE__*/React.createElement(Curve, _extends({}, allOtherProps, {
+    className: "recharts-area-curve",
+    layout: layout,
+    type: type,
+    connectNulls: connectNulls,
+    fill: "none",
+    points: baseLine
+  }))), /*#__PURE__*/React.createElement(Dots, {
+    points: points,
+    props: propsWithoutId,
+    clipPathId: clipPathId
+  }), showLabels && LabelList.renderCallByParent(propsWithoutId, points));
+}
+function VerticalRect(_ref3) {
+  var {
+    alpha,
+    baseLine,
+    points,
+    strokeWidth
+  } = _ref3;
+  var startY = points[0].y;
+  var endY = points[points.length - 1].y;
+  if (!isWellBehavedNumber(startY) || !isWellBehavedNumber(endY)) {
+    return null;
+  }
+  var height = alpha * Math.abs(startY - endY);
+  var maxX = Math.max(...points.map(entry => entry.x || 0));
+  if (isNumber(baseLine)) {
+    maxX = Math.max(baseLine, maxX);
+  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {
+    maxX = Math.max(...baseLine.map(entry => entry.x || 0), maxX);
+  }
+  if (isNumber(maxX)) {
+    return /*#__PURE__*/React.createElement("rect", {
+      x: 0,
+      y: startY < endY ? startY : startY - height,
+      width: maxX + (strokeWidth ? parseInt("".concat(strokeWidth), 10) : 1),
+      height: Math.floor(height)
+    });
+  }
+  return null;
+}
+function HorizontalRect(_ref4) {
+  var {
+    alpha,
+    baseLine,
+    points,
+    strokeWidth
+  } = _ref4;
+  var startX = points[0].x;
+  var endX = points[points.length - 1].x;
+  if (!isWellBehavedNumber(startX) || !isWellBehavedNumber(endX)) {
+    return null;
+  }
+  var width = alpha * Math.abs(startX - endX);
+  var maxY = Math.max(...points.map(entry => entry.y || 0));
+  if (isNumber(baseLine)) {
+    maxY = Math.max(baseLine, maxY);
+  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {
+    maxY = Math.max(...baseLine.map(entry => entry.y || 0), maxY);
+  }
+  if (isNumber(maxY)) {
+    return /*#__PURE__*/React.createElement("rect", {
+      x: startX < endX ? startX : startX - width,
+      y: 0,
+      width: width,
+      height: Math.floor(maxY + (strokeWidth ? parseInt("".concat(strokeWidth), 10) : 1))
+    });
+  }
+  return null;
+}
+function ClipRect(_ref5) {
+  var {
+    alpha,
+    layout,
+    points,
+    baseLine,
+    strokeWidth
+  } = _ref5;
+  if (layout === 'vertical') {
+    return /*#__PURE__*/React.createElement(VerticalRect, {
+      alpha: alpha,
+      points: points,
+      baseLine: baseLine,
+      strokeWidth: strokeWidth
+    });
+  }
+  return /*#__PURE__*/React.createElement(HorizontalRect, {
+    alpha: alpha,
+    points: points,
+    baseLine: baseLine,
+    strokeWidth: strokeWidth
+  });
+}
+function AreaWithAnimation(_ref6) {
+  var {
+    needClip,
+    clipPathId,
+    props,
+    previousPointsRef,
+    previousBaselineRef
+  } = _ref6;
+  var {
+    points,
+    baseLine,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationStart,
+    onAnimationEnd
+  } = props;
+  var animationId = useAnimationId(props, 'recharts-area-');
+  var [isAnimating, setIsAnimating] = useState(true);
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  var prevPoints = previousPointsRef.current;
+  var prevBaseLine = previousBaselineRef.current;
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    if (prevPoints) {
+      var prevPointsDiffFactor = prevPoints.length / points.length;
+      var stepPoints =
+      /*
+       * Here it is important that at the very end of the animation, on the last frame,
+       * we render the original points without any interpolation.
+       * This is needed because the code above is checking for reference equality to decide if the animation should run
+       * and if we create a new array instance (even if the numbers were the same)
+       * then we would break animations.
+       */
+      t === 1 ? points : points.map((entry, index) => {
+        var prevPointIndex = Math.floor(index * prevPointsDiffFactor);
+        if (prevPoints[prevPointIndex]) {
+          var prev = prevPoints[prevPointIndex];
+          return _objectSpread(_objectSpread({}, entry), {}, {
+            x: interpolate(prev.x, entry.x, t),
+            y: interpolate(prev.y, entry.y, t)
+          });
+        }
+        return entry;
+      });
+      var stepBaseLine;
+      if (isNumber(baseLine)) {
+        stepBaseLine = interpolate(prevBaseLine, baseLine, t);
+      } else if (isNullish(baseLine) || isNan(baseLine)) {
+        stepBaseLine = interpolate(prevBaseLine, 0, t);
+      } else {
+        stepBaseLine = baseLine.map((entry, index) => {
+          var prevPointIndex = Math.floor(index * prevPointsDiffFactor);
+          if (Array.isArray(prevBaseLine) && prevBaseLine[prevPointIndex]) {
+            var prev = prevBaseLine[prevPointIndex];
+            return _objectSpread(_objectSpread({}, entry), {}, {
+              x: interpolate(prev.x, entry.x, t),
+              y: interpolate(prev.y, entry.y, t)
+            });
+          }
+          return entry;
+        });
+      }
+      if (t > 0) {
+        /*
+         * We need to keep the refs in the parent component because we need to remember the last shape of the animation
+         * even if AreaWithAnimation is unmounted as that happens when changing props.
+         *
+         * And we need to update the refs here because here is where the interpolation is computed.
+         * Eslint doesn't like changing function arguments, but we need it so here is an eslint-disable.
+         */
+        // eslint-disable-next-line no-param-reassign
+        previousPointsRef.current = stepPoints;
+        // eslint-disable-next-line no-param-reassign
+        previousBaselineRef.current = stepBaseLine;
+      }
+      return /*#__PURE__*/React.createElement(StaticArea, {
+        points: stepPoints,
+        baseLine: stepBaseLine,
+        needClip: needClip,
+        clipPathId: clipPathId,
+        props: props,
+        showLabels: !isAnimating
+      });
+    }
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = points;
+      // eslint-disable-next-line no-param-reassign
+      previousBaselineRef.current = baseLine;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("clipPath", {
+      id: "animationClipPath-".concat(clipPathId)
+    }, /*#__PURE__*/React.createElement(ClipRect, {
+      alpha: t,
+      points: points,
+      baseLine: baseLine,
+      layout: props.layout,
+      strokeWidth: props.strokeWidth
+    }))), /*#__PURE__*/React.createElement(Layer, {
+      clipPath: "url(#animationClipPath-".concat(clipPathId, ")")
+    }, /*#__PURE__*/React.createElement(StaticArea, {
+      points: points,
+      baseLine: baseLine,
+      needClip: needClip,
+      clipPathId: clipPathId,
+      props: props,
+      showLabels: true
+    })));
+  });
+}
+
+/*
+ * This components decides if the area should be animated or not.
+ * It also holds the state of the animation.
+ */
+function RenderArea(_ref7) {
+  var {
+    needClip,
+    clipPathId,
+    props
+  } = _ref7;
+  var {
+    points,
+    baseLine,
+    isAnimationActive
+  } = props;
+
+  /*
+   * These two must be refs, not state!
+   * Because we want to store the most recent shape of the animation in case we have to interrupt the animation;
+   * that happens when user initiates another animation before the current one finishes.
+   *
+   * If this was a useState, then every step in the animation would trigger a re-render.
+   * So, useRef it is.
+   */
+  var previousPointsRef = useRef(null);
+  var previousBaselineRef = useRef();
+  var prevPoints = previousPointsRef.current;
+  var prevBaseLine = previousBaselineRef.current;
+  if (isAnimationActive &&
+  /*
+   * Here it's important that we unmount of AreaWithAnimation in case points are undefined
+   * - this will make sure to interrupt the animation if it's running.
+   * We still get to keep the last shape of the animation in the refs above.
+   */
+  points && points.length && (prevPoints !== points || prevBaseLine !== baseLine)) {
+    return /*#__PURE__*/React.createElement(AreaWithAnimation, {
+      needClip: needClip,
+      clipPathId: clipPathId,
+      props: props,
+      previousPointsRef: previousPointsRef,
+      previousBaselineRef: previousBaselineRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(StaticArea, {
+    points: points,
+    baseLine: baseLine,
+    needClip: needClip,
+    clipPathId: clipPathId,
+    props: props,
+    showLabels: true
+  });
+}
+class AreaWithState extends PureComponent {
+  render() {
+    var _filterProps;
+    var {
+      hide,
+      dot,
+      points,
+      className,
+      top,
+      left,
+      needClip,
+      xAxisId,
+      yAxisId,
+      width,
+      height,
+      id,
+      baseLine
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = clsx('recharts-area', className);
+    var clipPathId = id;
+    var {
+      r = 3,
+      strokeWidth = 2
+    } = (_filterProps = filterProps(dot, false)) !== null && _filterProps !== void 0 ? _filterProps : {
+      r: 3,
+      strokeWidth: 2
+    };
+    var clipDot = isClipDot(dot);
+    var dotSize = r * 2 + strokeWidth;
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass
+    }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {
+      clipPathId: clipPathId,
+      xAxisId: xAxisId,
+      yAxisId: yAxisId
+    }), !clipDot && /*#__PURE__*/React.createElement("clipPath", {
+      id: "clipPath-dots-".concat(clipPathId)
+    }, /*#__PURE__*/React.createElement("rect", {
+      x: left - dotSize / 2,
+      y: top - dotSize / 2,
+      width: width + dotSize,
+      height: height + dotSize
+    }))), /*#__PURE__*/React.createElement(RenderArea, {
+      needClip: needClip,
+      clipPathId: clipPathId,
+      props: this.props
+    })), /*#__PURE__*/React.createElement(ActivePoints, {
+      points: points,
+      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),
+      itemDataKey: this.props.dataKey,
+      activeDot: this.props.activeDot
+    }), this.props.isRange && Array.isArray(baseLine) && /*#__PURE__*/React.createElement(ActivePoints, {
+      points: baseLine,
+      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),
+      itemDataKey: this.props.dataKey,
+      activeDot: this.props.activeDot
+    }));
+  }
+}
+var defaultAreaProps = {
+  activeDot: true,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  connectNulls: false,
+  dot: false,
+  fill: '#3182bd',
+  fillOpacity: 0.6,
+  hide: false,
+  isAnimationActive: !Global.isSsr,
+  legendType: 'line',
+  stroke: '#3182bd',
+  xAxisId: 0,
+  yAxisId: 0
+};
+function AreaImpl(props) {
+  var _useAppSelector;
+  var _resolveDefaultProps = resolveDefaultProps(props, defaultAreaProps),
+    {
+      activeDot,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      connectNulls,
+      dot,
+      fill,
+      fillOpacity,
+      hide,
+      isAnimationActive,
+      legendType,
+      stroke,
+      xAxisId,
+      yAxisId
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded2);
+  var layout = useChartLayout();
+  var chartName = useChartName();
+  var {
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  var isPanorama = useIsPanorama();
+  var {
+    points,
+    isRange,
+    baseLine
+  } = (_useAppSelector = useAppSelector(state => selectArea(state, xAxisId, yAxisId, isPanorama, props.id))) !== null && _useAppSelector !== void 0 ? _useAppSelector : {};
+  var plotArea = usePlotArea();
+  if (layout !== 'horizontal' && layout !== 'vertical' || plotArea == null) {
+    // Can't render Area in an unsupported layout
+    return null;
+  }
+  if (chartName !== 'AreaChart' && chartName !== 'ComposedChart') {
+    // There is nothing stopping us from rendering Area in other charts, except for historical reasons. Do we want to allow that?
+    return null;
+  }
+  var {
+    height,
+    width,
+    x: left,
+    y: top
+  } = plotArea;
+  if (!points || !points.length) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(AreaWithState, _extends({}, everythingElse, {
+    activeDot: activeDot,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    baseLine: baseLine,
+    connectNulls: connectNulls,
+    dot: dot,
+    fill: fill,
+    fillOpacity: fillOpacity,
+    height: height,
+    hide: hide,
+    layout: layout,
+    isAnimationActive: isAnimationActive,
+    isRange: isRange,
+    legendType: legendType,
+    needClip: needClip,
+    points: points,
+    stroke: stroke,
+    width: width,
+    left: left,
+    top: top,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId
+  }));
+}
+export var getBaseValue = (layout, chartBaseValue, itemBaseValue, xAxis, yAxis) => {
+  // The baseValue can be defined both on the AreaChart, and on the Area.
+  // The value for the item takes precedence.
+  var baseValue = itemBaseValue !== null && itemBaseValue !== void 0 ? itemBaseValue : chartBaseValue;
+  if (isNumber(baseValue)) {
+    return baseValue;
+  }
+  var numericAxis = layout === 'horizontal' ? yAxis : xAxis;
+  // @ts-expect-error d3scale .domain() returns unknown, Math.max expects number
+  var domain = numericAxis.scale.domain();
+  if (numericAxis.type === 'number') {
+    var domainMax = Math.max(domain[0], domain[1]);
+    var domainMin = Math.min(domain[0], domain[1]);
+    if (baseValue === 'dataMin') {
+      return domainMin;
+    }
+    if (baseValue === 'dataMax') {
+      return domainMax;
+    }
+    return domainMax < 0 ? domainMax : Math.max(Math.min(domain[0], domain[1]), 0);
+  }
+  if (baseValue === 'dataMin') {
+    return domain[0];
+  }
+  if (baseValue === 'dataMax') {
+    return domain[1];
+  }
+  return domain[0];
+};
+export function computeArea(_ref8) {
+  var {
+    areaSettings: {
+      connectNulls,
+      baseValue: itemBaseValue,
+      dataKey
+    },
+    stackedData,
+    layout,
+    chartBaseValue,
+    xAxis,
+    yAxis,
+    displayedData,
+    dataStartIndex,
+    xAxisTicks,
+    yAxisTicks,
+    bandSize
+  } = _ref8;
+  var hasStack = stackedData && stackedData.length;
+  var baseValue = getBaseValue(layout, chartBaseValue, itemBaseValue, xAxis, yAxis);
+  var isHorizontalLayout = layout === 'horizontal';
+  var isRange = false;
+  var points = displayedData.map((entry, index) => {
+    var value;
+    if (hasStack) {
+      value = stackedData[dataStartIndex + index];
+    } else {
+      value = getValueByDataKey(entry, dataKey);
+      if (!Array.isArray(value)) {
+        value = [baseValue, value];
+      } else {
+        isRange = true;
+      }
+    }
+    var isBreakPoint = value[1] == null || hasStack && !connectNulls && getValueByDataKey(entry, dataKey) == null;
+    if (isHorizontalLayout) {
+      return {
+        // @ts-expect-error getCateCoordinateOfLine expects chart data to be an object, we allow unknown
+        x: getCateCoordinateOfLine({
+          axis: xAxis,
+          ticks: xAxisTicks,
+          bandSize,
+          entry,
+          index
+        }),
+        y: isBreakPoint ? null : yAxis.scale(value[1]),
+        value,
+        payload: entry
+      };
+    }
+    return {
+      x: isBreakPoint ? null : xAxis.scale(value[1]),
+      // @ts-expect-error getCateCoordinateOfLine expects chart data to be an object, we allow unknown
+      y: getCateCoordinateOfLine({
+        axis: yAxis,
+        ticks: yAxisTicks,
+        bandSize,
+        entry,
+        index
+      }),
+      value,
+      payload: entry
+    };
+  });
+  var baseLine;
+  if (hasStack || isRange) {
+    baseLine = points.map(entry => {
+      var x = Array.isArray(entry.value) ? entry.value[0] : null;
+      if (isHorizontalLayout) {
+        return {
+          x: entry.x,
+          y: x != null && entry.y != null ? yAxis.scale(x) : null,
+          payload: entry.payload
+        };
+      }
+      return {
+        x: x != null ? xAxis.scale(x) : null,
+        y: entry.y,
+        payload: entry.payload
+      };
+    });
+  } else {
+    baseLine = isHorizontalLayout ? yAxis.scale(baseValue) : xAxis.scale(baseValue);
+  }
+  return {
+    points,
+    baseLine,
+    isRange
+  };
+}
+export function Area(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultAreaProps);
+  var isPanorama = useIsPanorama();
+  // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "area"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromAreaData(props)
+  }), /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: props
+  }), /*#__PURE__*/React.createElement(SetCartesianGraphicalItem, {
+    type: "area",
+    id: id,
+    data: props.data,
+    dataKey: props.dataKey,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: 0,
+    stackId: getNormalizedStackId(props.stackId),
+    hide: props.hide,
+    barSize: undefined,
+    baseValue: props.baseValue,
+    isPanorama: isPanorama,
+    connectNulls: props.connectNulls
+  }), /*#__PURE__*/React.createElement(AreaImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+Area.displayName = 'Area';
Index: node_modules/recharts/es6/cartesian/Bar.js
===================================================================
--- node_modules/recharts/es6/cartesian/Bar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/Bar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,562 @@
+var _excluded = ["onMouseEnter", "onMouseLeave", "onClick"],
+  _excluded2 = ["value", "background", "tooltipPosition"],
+  _excluded3 = ["id"],
+  _excluded4 = ["onMouseEnter", "onClick", "onMouseLeave"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { PureComponent, useCallback, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { Cell } from '../component/Cell';
+import { LabelList } from '../component/LabelList';
+import { interpolate, isNan, mathSign } from '../util/DataUtils';
+import { filterProps, findAllByType } from '../util/ReactUtils';
+import { Global } from '../util/Global';
+import { getBaseValueOfBar, getCateCoordinateOfBar, getNormalizedStackId, getTooltipNameProp, getValueByDataKey, truncateByDomain } from '../util/ChartUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { BarRectangle, minPointSizeCallback } from '../util/BarUtils';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { SetErrorBarContext } from '../context/ErrorBarContext';
+import { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';
+import { useChartLayout } from '../context/chartLayoutContext';
+import { selectBarRectangles } from '../state/selectors/barSelectors';
+import { useAppSelector } from '../state/hooks';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { selectActiveTooltipDataKey, selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { SetLegendPayload } from '../state/SetLegendPayload';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+var computeLegendPayloadFromBarData = props => {
+  var {
+    dataKey,
+    name,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: fill,
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    unit
+  } = props;
+  return {
+    dataDefinedOnItem: undefined,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey: undefined,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: props.tooltipType,
+      color: props.fill,
+      unit
+    }
+  };
+}
+function BarBackground(props) {
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var {
+    data,
+    dataKey,
+    background: backgroundFromProps,
+    allOtherBarProps
+  } = props;
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onMouseLeave: onMouseLeaveFromProps,
+      onClick: onItemClickFromProps
+    } = allOtherBarProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherBarProps, _excluded);
+
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, dataKey);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, dataKey);
+  if (!backgroundFromProps || data == null) {
+    return null;
+  }
+  var backgroundProps = filterProps(backgroundFromProps, false);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, data.map((entry, i) => {
+    var {
+        value,
+        background: backgroundFromDataEntry,
+        tooltipPosition
+      } = entry,
+      rest = _objectWithoutProperties(entry, _excluded2);
+    if (!backgroundFromDataEntry) {
+      return null;
+    }
+
+    // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+    var onMouseEnter = onMouseEnterFromContext(entry, i);
+    // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+    var onMouseLeave = onMouseLeaveFromContext(entry, i);
+    // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+    var onClick = onClickFromContext(entry, i);
+    var barRectangleProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
+      option: backgroundFromProps,
+      isActive: String(i) === activeIndex
+    }, rest), {}, {
+      // @ts-expect-error BarRectangle props do not accept `fill` property.
+      fill: '#eee'
+    }, backgroundFromDataEntry), backgroundProps), adaptEventsOfChild(restOfAllOtherProps, entry, i)), {}, {
+      onMouseEnter,
+      onMouseLeave,
+      onClick,
+      dataKey,
+      index: i,
+      className: 'recharts-bar-background-rectangle'
+    });
+    return /*#__PURE__*/React.createElement(BarRectangle, _extends({
+      key: "background-bar-".concat(i)
+    }, barRectangleProps));
+  }));
+}
+function BarRectangles(_ref) {
+  var {
+    data,
+    props,
+    showLabels
+  } = _ref;
+  var _svgPropertiesNoEvent = svgPropertiesNoEvents(props),
+    {
+      id
+    } = _svgPropertiesNoEvent,
+    baseProps = _objectWithoutProperties(_svgPropertiesNoEvent, _excluded3);
+  var {
+    shape,
+    dataKey,
+    activeBar
+  } = props;
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var activeDataKey = useAppSelector(selectActiveTooltipDataKey);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = props,
+    restOfAllOtherProps = _objectWithoutProperties(props, _excluded4);
+
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, dataKey);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, dataKey);
+  if (!data) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, data.map((entry, i) => {
+    /*
+     * Bars support stacking, meaning that there can be multiple bars at the same x value.
+     * With Tooltip shared=false we only want to highlight the currently active Bar, not all.
+     *
+     * Also, if the tooltip is shared, we want to highlight all bars at the same x value
+     * regardless of the dataKey.
+     *
+     * With shared Tooltip, the activeDataKey is undefined.
+     */
+    var isActive = activeBar && String(i) === activeIndex && (activeDataKey == null || dataKey === activeDataKey);
+    var option = isActive ? activeBar : shape;
+    // ts-expect-error event types are not compatible - this only fires with strictNullChecks on
+    var barRectangleProps = _objectSpread(_objectSpread(_objectSpread({}, baseProps), entry), {}, {
+      isActive,
+      option,
+      index: i,
+      dataKey
+    });
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: "recharts-bar-rectangle"
+    }, adaptEventsOfChild(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+      ,
+      onClick: onClickFromContext(entry, i)
+      // https://github.com/recharts/recharts/issues/5415
+      // eslint-disable-next-line react/no-array-index-key
+      ,
+      key: "rectangle-".concat(entry === null || entry === void 0 ? void 0 : entry.x, "-").concat(entry === null || entry === void 0 ? void 0 : entry.y, "-").concat(entry === null || entry === void 0 ? void 0 : entry.value, "-").concat(i)
+    }), /*#__PURE__*/React.createElement(BarRectangle, barRectangleProps));
+  }), showLabels && LabelList.renderCallByParent(props, data));
+}
+function RectanglesWithAnimation(_ref2) {
+  var {
+    props,
+    previousRectanglesRef
+  } = _ref2;
+  var {
+    data,
+    layout,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevData = previousRectanglesRef.current;
+  var animationId = useAnimationId(props, 'recharts-bar-');
+  var [isAnimating, setIsAnimating] = useState(false);
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    var stepData = t === 1 ? data : data === null || data === void 0 ? void 0 : data.map((entry, index) => {
+      var prev = prevData && prevData[index];
+      if (prev) {
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: interpolate(prev.x, entry.x, t),
+          y: interpolate(prev.y, entry.y, t),
+          width: interpolate(prev.width, entry.width, t),
+          height: interpolate(prev.height, entry.height, t)
+        });
+      }
+      if (layout === 'horizontal') {
+        var h = interpolate(0, entry.height, t);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          y: entry.y + entry.height - h,
+          height: h
+        });
+      }
+      var w = interpolate(0, entry.width, t);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        width: w
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousRectanglesRef.current = stepData !== null && stepData !== void 0 ? stepData : null;
+    }
+    if (stepData == null) {
+      return null;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(BarRectangles, {
+      props: props,
+      data: stepData,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderRectangles(props) {
+  var {
+    data,
+    isAnimationActive
+  } = props;
+  var previousRectanglesRef = useRef(null);
+  if (isAnimationActive && data && data.length && (previousRectanglesRef.current == null || previousRectanglesRef.current !== data)) {
+    return /*#__PURE__*/React.createElement(RectanglesWithAnimation, {
+      previousRectanglesRef: previousRectanglesRef,
+      props: props
+    });
+  }
+  return /*#__PURE__*/React.createElement(BarRectangles, {
+    props: props,
+    data: data,
+    showLabels: true
+  });
+}
+var defaultMinPointSize = 0;
+var errorBarDataPointFormatter = (dataPoint, dataKey) => {
+  /**
+   * if the value coming from `selectBarRectangles` is an array then this is a stacked bar chart.
+   * arr[1] represents end value of the bar since the data is in the form of [startValue, endValue].
+   * */
+  var value = Array.isArray(dataPoint.value) ? dataPoint.value[1] : dataPoint.value;
+  return {
+    x: dataPoint.x,
+    y: dataPoint.y,
+    value,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    errorVal: getValueByDataKey(dataPoint, dataKey)
+  };
+};
+class BarWithState extends PureComponent {
+  render() {
+    var {
+      hide,
+      data,
+      dataKey,
+      className,
+      xAxisId,
+      yAxisId,
+      needClip,
+      background,
+      id
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = clsx('recharts-bar', className);
+    var clipPathId = id;
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass,
+      id: id
+    }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {
+      clipPathId: clipPathId,
+      xAxisId: xAxisId,
+      yAxisId: yAxisId
+    })), /*#__PURE__*/React.createElement(Layer, {
+      className: "recharts-bar-rectangles",
+      clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined
+    }, /*#__PURE__*/React.createElement(BarBackground, {
+      data: data,
+      dataKey: dataKey,
+      background: background,
+      allOtherBarProps: this.props
+    }), /*#__PURE__*/React.createElement(RenderRectangles, this.props)), this.props.children);
+  }
+}
+var defaultBarProps = {
+  activeBar: false,
+  animationBegin: 0,
+  animationDuration: 400,
+  animationEasing: 'ease',
+  hide: false,
+  isAnimationActive: !Global.isSsr,
+  legendType: 'rect',
+  minPointSize: defaultMinPointSize,
+  xAxisId: 0,
+  yAxisId: 0
+};
+function BarImpl(props) {
+  var {
+    xAxisId,
+    yAxisId,
+    hide,
+    legendType,
+    minPointSize,
+    activeBar,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    isAnimationActive
+  } = props;
+  var {
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  var layout = useChartLayout();
+  var isPanorama = useIsPanorama();
+  var cells = findAllByType(props.children, Cell);
+  var rects = useAppSelector(state => selectBarRectangles(state, xAxisId, yAxisId, isPanorama, props.id, cells));
+  if (layout !== 'vertical' && layout !== 'horizontal') {
+    return null;
+  }
+  var errorBarOffset;
+  var firstDataPoint = rects === null || rects === void 0 ? void 0 : rects[0];
+  if (firstDataPoint == null || firstDataPoint.height == null || firstDataPoint.width == null) {
+    errorBarOffset = 0;
+  } else {
+    errorBarOffset = layout === 'vertical' ? firstDataPoint.height / 2 : firstDataPoint.width / 2;
+  }
+  return /*#__PURE__*/React.createElement(SetErrorBarContext, {
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    data: rects,
+    dataPointFormatter: errorBarDataPointFormatter,
+    errorBarOffset: errorBarOffset
+  }, /*#__PURE__*/React.createElement(BarWithState, _extends({}, props, {
+    layout: layout,
+    needClip: needClip,
+    data: rects,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    hide: hide,
+    legendType: legendType,
+    minPointSize: minPointSize,
+    activeBar: activeBar,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive
+  })));
+}
+export function computeBarRectangles(_ref3) {
+  var {
+    layout,
+    barSettings: {
+      dataKey,
+      minPointSize: minPointSizeProp
+    },
+    pos,
+    bandSize,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    stackedData,
+    displayedData,
+    offset,
+    cells
+  } = _ref3;
+  var numericAxis = layout === 'horizontal' ? yAxis : xAxis;
+  // @ts-expect-error this assumes that the domain is always numeric, but doesn't check for it
+  var stackedDomain = stackedData ? numericAxis.scale.domain() : null;
+  var baseValue = getBaseValueOfBar({
+    numericAxis
+  });
+  return displayedData.map((entry, index) => {
+    var value, x, y, width, height, background;
+    if (stackedData) {
+      // we don't need to use dataStartIndex here, because stackedData is already sliced from the selector
+      value = truncateByDomain(stackedData[index], stackedDomain);
+    } else {
+      value = getValueByDataKey(entry, dataKey);
+      if (!Array.isArray(value)) {
+        value = [baseValue, value];
+      }
+    }
+    var minPointSize = minPointSizeCallback(minPointSizeProp, defaultMinPointSize)(value[1], index);
+    if (layout === 'horizontal') {
+      var _ref4;
+      var [baseValueScale, currentValueScale] = [yAxis.scale(value[0]), yAxis.scale(value[1])];
+      x = getCateCoordinateOfBar({
+        axis: xAxis,
+        ticks: xAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      y = (_ref4 = currentValueScale !== null && currentValueScale !== void 0 ? currentValueScale : baseValueScale) !== null && _ref4 !== void 0 ? _ref4 : undefined;
+      width = pos.size;
+      var computedHeight = baseValueScale - currentValueScale;
+      height = isNan(computedHeight) ? 0 : computedHeight;
+      background = {
+        x,
+        y: offset.top,
+        width,
+        height: offset.height
+      };
+      if (Math.abs(minPointSize) > 0 && Math.abs(height) < Math.abs(minPointSize)) {
+        var delta = mathSign(height || minPointSize) * (Math.abs(minPointSize) - Math.abs(height));
+        y -= delta;
+        height += delta;
+      }
+    } else {
+      var [_baseValueScale, _currentValueScale] = [xAxis.scale(value[0]), xAxis.scale(value[1])];
+      x = _baseValueScale;
+      y = getCateCoordinateOfBar({
+        axis: yAxis,
+        ticks: yAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      width = _currentValueScale - _baseValueScale;
+      height = pos.size;
+      background = {
+        x: offset.left,
+        y,
+        width: offset.width,
+        height
+      };
+      if (Math.abs(minPointSize) > 0 && Math.abs(width) < Math.abs(minPointSize)) {
+        var _delta = mathSign(width || minPointSize) * (Math.abs(minPointSize) - Math.abs(width));
+        width += _delta;
+      }
+    }
+    if (x == null || y == null || width == null || height == null) {
+      return null;
+    }
+    var barRectangleItem = _objectSpread(_objectSpread({}, entry), {}, {
+      x,
+      y,
+      width,
+      height,
+      value: stackedData ? value : value[1],
+      payload: entry,
+      background,
+      tooltipPosition: {
+        x: x + width / 2,
+        y: y + height / 2
+      }
+    }, cells && cells[index] && cells[index].props);
+    return barRectangleItem;
+  }).filter(Boolean);
+}
+export function Bar(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultBarProps);
+  var isPanorama = useIsPanorama();
+  // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "bar"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromBarData(props)
+  }), /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: props
+  }), /*#__PURE__*/React.createElement(SetCartesianGraphicalItem, {
+    type: "bar",
+    id: id
+    // Bar does not allow setting data directly on the graphical item (why?)
+    ,
+    data: undefined,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: 0,
+    dataKey: props.dataKey,
+    stackId: getNormalizedStackId(props.stackId),
+    hide: props.hide,
+    barSize: props.barSize,
+    minPointSize: props.minPointSize,
+    maxBarSize: props.maxBarSize,
+    isPanorama: isPanorama
+  }), /*#__PURE__*/React.createElement(BarImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+Bar.displayName = 'Bar';
Index: node_modules/recharts/es6/cartesian/Brush.js
===================================================================
--- node_modules/recharts/es6/cartesian/Brush.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/Brush.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,857 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { Children, PureComponent, useCallback, useContext, useEffect } from 'react';
+import { clsx } from 'clsx';
+import { scalePoint } from 'victory-vendor/d3-scale';
+import range from 'es-toolkit/compat/range';
+import { Layer } from '../container/Layer';
+import { Text } from '../component/Text';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { isNumber } from '../util/DataUtils';
+import { generatePrefixStyle } from '../util/CssPrefixUtils';
+import { useChartData, useDataIndex } from '../context/chartDataContext';
+import { BrushUpdateDispatchContext } from '../context/brushUpdateContext';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { setDataStartEndIndexes } from '../state/chartDataSlice';
+import { setBrushSettings } from '../state/brushSlice';
+import { PanoramaContextProvider } from '../context/PanoramaContext';
+import { selectBrushDimensions } from '../state/selectors/brushSelectors';
+import { useBrushChartSynchronisation } from '../synchronisation/useChartSynchronisation';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+
+// Why is this tickFormatter different from the other TickFormatters? This one allows to return numbers too for some reason.
+
+function DefaultTraveller(props) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    stroke
+  } = props;
+  var lineY = Math.floor(y + height / 2) - 1;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("rect", {
+    x: x,
+    y: y,
+    width: width,
+    height: height,
+    fill: stroke,
+    stroke: "none"
+  }), /*#__PURE__*/React.createElement("line", {
+    x1: x + 1,
+    y1: lineY,
+    x2: x + width - 1,
+    y2: lineY,
+    fill: "none",
+    stroke: "#fff"
+  }), /*#__PURE__*/React.createElement("line", {
+    x1: x + 1,
+    y1: lineY + 2,
+    x2: x + width - 1,
+    y2: lineY + 2,
+    fill: "none",
+    stroke: "#fff"
+  }));
+}
+function Traveller(props) {
+  var {
+    travellerProps,
+    travellerType
+  } = props;
+  if (/*#__PURE__*/React.isValidElement(travellerType)) {
+    // @ts-expect-error element cloning disagrees with the types (and it should)
+    return /*#__PURE__*/React.cloneElement(travellerType, travellerProps);
+  }
+  if (typeof travellerType === 'function') {
+    return travellerType(travellerProps);
+  }
+  return /*#__PURE__*/React.createElement(DefaultTraveller, travellerProps);
+}
+function TravellerLayer(_ref) {
+  var _data$startIndex, _data$endIndex;
+  var {
+    otherProps,
+    travellerX,
+    id,
+    onMouseEnter,
+    onMouseLeave,
+    onMouseDown,
+    onTouchStart,
+    onTravellerMoveKeyboard,
+    onFocus,
+    onBlur
+  } = _ref;
+  var {
+    y,
+    x: xFromProps,
+    travellerWidth,
+    height,
+    traveller,
+    ariaLabel,
+    data,
+    startIndex,
+    endIndex
+  } = otherProps;
+  var x = Math.max(travellerX, xFromProps);
+  var travellerProps = _objectSpread(_objectSpread({}, svgPropertiesNoEvents(otherProps)), {}, {
+    x,
+    y,
+    width: travellerWidth,
+    height
+  });
+  var ariaLabelBrush = ariaLabel || "Min value: ".concat((_data$startIndex = data[startIndex]) === null || _data$startIndex === void 0 ? void 0 : _data$startIndex.name, ", Max value: ").concat((_data$endIndex = data[endIndex]) === null || _data$endIndex === void 0 ? void 0 : _data$endIndex.name);
+  return /*#__PURE__*/React.createElement(Layer, {
+    tabIndex: 0,
+    role: "slider",
+    "aria-label": ariaLabelBrush,
+    "aria-valuenow": travellerX,
+    className: "recharts-brush-traveller",
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onMouseDown: onMouseDown,
+    onTouchStart: onTouchStart,
+    onKeyDown: e => {
+      if (!['ArrowLeft', 'ArrowRight'].includes(e.key)) {
+        return;
+      }
+      e.preventDefault();
+      e.stopPropagation();
+      onTravellerMoveKeyboard(e.key === 'ArrowRight' ? 1 : -1, id);
+    },
+    onFocus: onFocus,
+    onBlur: onBlur,
+    style: {
+      cursor: 'col-resize'
+    }
+  }, /*#__PURE__*/React.createElement(Traveller, {
+    travellerType: traveller,
+    travellerProps: travellerProps
+  }));
+}
+/*
+ * This one cannot be a React Component because React is not happy with it returning only string | number.
+ * React wants a full React.JSX.Element but that is not compatible with Text component.
+ */
+function getTextOfTick(props) {
+  var {
+    index,
+    data,
+    tickFormatter,
+    dataKey
+  } = props;
+  // @ts-expect-error getValueByDataKey does not validate the output type
+  var text = getValueByDataKey(data[index], dataKey, index);
+  return typeof tickFormatter === 'function' ? tickFormatter(text, index) : text;
+}
+function getIndexInRange(valueRange, x) {
+  var len = valueRange.length;
+  var start = 0;
+  var end = len - 1;
+  while (end - start > 1) {
+    var middle = Math.floor((start + end) / 2);
+    if (valueRange[middle] > x) {
+      end = middle;
+    } else {
+      start = middle;
+    }
+  }
+  return x >= valueRange[end] ? end : start;
+}
+function getIndex(_ref2) {
+  var {
+    startX,
+    endX,
+    scaleValues,
+    gap,
+    data
+  } = _ref2;
+  var lastIndex = data.length - 1;
+  var min = Math.min(startX, endX);
+  var max = Math.max(startX, endX);
+  var minIndex = getIndexInRange(scaleValues, min);
+  var maxIndex = getIndexInRange(scaleValues, max);
+  return {
+    startIndex: minIndex - minIndex % gap,
+    endIndex: maxIndex === lastIndex ? lastIndex : maxIndex - maxIndex % gap
+  };
+}
+function Background(_ref3) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    fill,
+    stroke
+  } = _ref3;
+  return /*#__PURE__*/React.createElement("rect", {
+    stroke: stroke,
+    fill: fill,
+    x: x,
+    y: y,
+    width: width,
+    height: height
+  });
+}
+function BrushText(_ref4) {
+  var {
+    startIndex,
+    endIndex,
+    y,
+    height,
+    travellerWidth,
+    stroke,
+    tickFormatter,
+    dataKey,
+    data,
+    startX,
+    endX
+  } = _ref4;
+  var offset = 5;
+  var attrs = {
+    pointerEvents: 'none',
+    fill: stroke
+  };
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-brush-texts"
+  }, /*#__PURE__*/React.createElement(Text, _extends({
+    textAnchor: "end",
+    verticalAnchor: "middle",
+    x: Math.min(startX, endX) - offset,
+    y: y + height / 2
+  }, attrs), getTextOfTick({
+    index: startIndex,
+    tickFormatter,
+    dataKey,
+    data
+  })), /*#__PURE__*/React.createElement(Text, _extends({
+    textAnchor: "start",
+    verticalAnchor: "middle",
+    x: Math.max(startX, endX) + travellerWidth + offset,
+    y: y + height / 2
+  }, attrs), getTextOfTick({
+    index: endIndex,
+    tickFormatter,
+    dataKey,
+    data
+  })));
+}
+function Slide(_ref5) {
+  var {
+    y,
+    height,
+    stroke,
+    travellerWidth,
+    startX,
+    endX,
+    onMouseEnter,
+    onMouseLeave,
+    onMouseDown,
+    onTouchStart
+  } = _ref5;
+  var x = Math.min(startX, endX) + travellerWidth;
+  var width = Math.max(Math.abs(endX - startX) - travellerWidth, 0);
+  return /*#__PURE__*/React.createElement("rect", {
+    className: "recharts-brush-slide",
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onMouseDown: onMouseDown,
+    onTouchStart: onTouchStart,
+    style: {
+      cursor: 'move'
+    },
+    stroke: "none",
+    fill: stroke,
+    fillOpacity: 0.2,
+    x: x,
+    y: y,
+    width: width,
+    height: height
+  });
+}
+function Panorama(_ref6) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    data,
+    children,
+    padding
+  } = _ref6;
+  var isPanoramic = React.Children.count(children) === 1;
+  if (!isPanoramic) {
+    return null;
+  }
+  var chartElement = Children.only(children);
+  if (!chartElement) {
+    return null;
+  }
+  return /*#__PURE__*/React.cloneElement(chartElement, {
+    x,
+    y,
+    width,
+    height,
+    margin: padding,
+    compact: true,
+    data
+  });
+}
+var createScale = _ref7 => {
+  var {
+    data,
+    startIndex,
+    endIndex,
+    x,
+    width,
+    travellerWidth
+  } = _ref7;
+  if (!data || !data.length) {
+    return {};
+  }
+  var len = data.length;
+  var scale = scalePoint().domain(range(0, len)).range([x, x + width - travellerWidth]);
+  var scaleValues = scale.domain().map(entry => scale(entry));
+  return {
+    isTextActive: false,
+    isSlideMoving: false,
+    isTravellerMoving: false,
+    isTravellerFocused: false,
+    startX: scale(startIndex),
+    endX: scale(endIndex),
+    scale,
+    scaleValues
+  };
+};
+var isTouch = e => e.changedTouches && !!e.changedTouches.length;
+class BrushWithState extends PureComponent {
+  constructor(props) {
+    super(props);
+    _defineProperty(this, "handleDrag", e => {
+      if (this.leaveTimer) {
+        clearTimeout(this.leaveTimer);
+        this.leaveTimer = null;
+      }
+      if (this.state.isTravellerMoving) {
+        this.handleTravellerMove(e);
+      } else if (this.state.isSlideMoving) {
+        this.handleSlideDrag(e);
+      }
+    });
+    _defineProperty(this, "handleTouchMove", e => {
+      if (e.changedTouches != null && e.changedTouches.length > 0) {
+        this.handleDrag(e.changedTouches[0]);
+      }
+    });
+    _defineProperty(this, "handleDragEnd", () => {
+      this.setState({
+        isTravellerMoving: false,
+        isSlideMoving: false
+      }, () => {
+        var {
+          endIndex,
+          onDragEnd,
+          startIndex
+        } = this.props;
+        onDragEnd === null || onDragEnd === void 0 || onDragEnd({
+          endIndex,
+          startIndex
+        });
+      });
+      this.detachDragEndListener();
+    });
+    _defineProperty(this, "handleLeaveWrapper", () => {
+      if (this.state.isTravellerMoving || this.state.isSlideMoving) {
+        this.leaveTimer = window.setTimeout(this.handleDragEnd, this.props.leaveTimeOut);
+      }
+    });
+    _defineProperty(this, "handleEnterSlideOrTraveller", () => {
+      this.setState({
+        isTextActive: true
+      });
+    });
+    _defineProperty(this, "handleLeaveSlideOrTraveller", () => {
+      this.setState({
+        isTextActive: false
+      });
+    });
+    _defineProperty(this, "handleSlideDragStart", e => {
+      var event = isTouch(e) ? e.changedTouches[0] : e;
+      this.setState({
+        isTravellerMoving: false,
+        isSlideMoving: true,
+        slideMoveStartX: event.pageX
+      });
+      this.attachDragEndListener();
+    });
+    _defineProperty(this, "handleTravellerMoveKeyboard", (direction, id) => {
+      var {
+        data,
+        gap
+      } = this.props;
+      // scaleValues are a list of coordinates. For example: [65, 250, 435, 620, 805, 990].
+      var {
+        scaleValues,
+        startX,
+        endX
+      } = this.state;
+      if (scaleValues == null) {
+        return;
+      }
+      // currentScaleValue refers to which coordinate the current traveller should be placed at.
+      var currentScaleValue = this.state[id];
+      var currentIndex = scaleValues.indexOf(currentScaleValue);
+      if (currentIndex === -1) {
+        return;
+      }
+      var newIndex = currentIndex + direction;
+      if (newIndex === -1 || newIndex >= scaleValues.length) {
+        return;
+      }
+      var newScaleValue = scaleValues[newIndex];
+
+      // Prevent travellers from being on top of each other or overlapping
+      if (id === 'startX' && newScaleValue >= endX || id === 'endX' && newScaleValue <= startX) {
+        return;
+      }
+      this.setState(
+      // @ts-expect-error not sure why typescript is not happy with this, partial update is fine in React
+      {
+        [id]: newScaleValue
+      }, () => {
+        this.props.onChange(getIndex({
+          startX: this.state.startX,
+          endX: this.state.endX,
+          data,
+          gap,
+          scaleValues
+        }));
+      });
+    });
+    this.travellerDragStartHandlers = {
+      startX: this.handleTravellerDragStart.bind(this, 'startX'),
+      endX: this.handleTravellerDragStart.bind(this, 'endX')
+    };
+    this.state = {
+      brushMoveStartX: 0,
+      movingTravellerId: undefined,
+      endX: 0,
+      startX: 0,
+      slideMoveStartX: 0
+    };
+  }
+  static getDerivedStateFromProps(nextProps, prevState) {
+    var {
+      data,
+      width,
+      x,
+      travellerWidth,
+      startIndex,
+      endIndex,
+      startIndexControlledFromProps,
+      endIndexControlledFromProps
+    } = nextProps;
+    if (data !== prevState.prevData) {
+      return _objectSpread({
+        prevData: data,
+        prevTravellerWidth: travellerWidth,
+        prevX: x,
+        prevWidth: width
+      }, data && data.length ? createScale({
+        data,
+        width,
+        x,
+        travellerWidth,
+        startIndex,
+        endIndex
+      }) : {
+        scale: undefined,
+        scaleValues: undefined
+      });
+    }
+    var prevScale = prevState.scale;
+    if (prevScale && (width !== prevState.prevWidth || x !== prevState.prevX || travellerWidth !== prevState.prevTravellerWidth)) {
+      prevScale.range([x, x + width - travellerWidth]);
+      var scaleValues = prevScale.domain().map(entry => prevScale(entry)).filter(Boolean);
+      return {
+        prevData: data,
+        prevTravellerWidth: travellerWidth,
+        prevX: x,
+        prevWidth: width,
+        startX: prevScale(nextProps.startIndex),
+        endX: prevScale(nextProps.endIndex),
+        scaleValues
+      };
+    }
+    if (prevState.scale && !prevState.isSlideMoving && !prevState.isTravellerMoving && !prevState.isTravellerFocused && !prevState.isTextActive) {
+      /*
+       * If the startIndex or endIndex are controlled from the outside,
+       * we need to keep the startX and end up to date.
+       * Also we do not want to do that while user is interacting in the brush,
+       * because this will trigger re-render and interrupt the drag&drop.
+       */
+      if (startIndexControlledFromProps != null && prevState.prevStartIndexControlledFromProps !== startIndexControlledFromProps) {
+        return {
+          startX: prevState.scale(startIndexControlledFromProps),
+          prevStartIndexControlledFromProps: startIndexControlledFromProps
+        };
+      }
+      if (endIndexControlledFromProps != null && prevState.prevEndIndexControlledFromProps !== endIndexControlledFromProps) {
+        return {
+          endX: prevState.scale(endIndexControlledFromProps),
+          prevEndIndexControlledFromProps: endIndexControlledFromProps
+        };
+      }
+    }
+    return null;
+  }
+  componentWillUnmount() {
+    if (this.leaveTimer) {
+      clearTimeout(this.leaveTimer);
+      this.leaveTimer = null;
+    }
+    this.detachDragEndListener();
+  }
+  attachDragEndListener() {
+    window.addEventListener('mouseup', this.handleDragEnd, true);
+    window.addEventListener('touchend', this.handleDragEnd, true);
+    window.addEventListener('mousemove', this.handleDrag, true);
+  }
+  detachDragEndListener() {
+    window.removeEventListener('mouseup', this.handleDragEnd, true);
+    window.removeEventListener('touchend', this.handleDragEnd, true);
+    window.removeEventListener('mousemove', this.handleDrag, true);
+  }
+  handleSlideDrag(e) {
+    var {
+      slideMoveStartX,
+      startX,
+      endX,
+      scaleValues
+    } = this.state;
+    if (scaleValues == null) {
+      return;
+    }
+    var {
+      x,
+      width,
+      travellerWidth,
+      startIndex,
+      endIndex,
+      onChange,
+      data,
+      gap
+    } = this.props;
+    var delta = e.pageX - slideMoveStartX;
+    if (delta > 0) {
+      delta = Math.min(delta, x + width - travellerWidth - endX, x + width - travellerWidth - startX);
+    } else if (delta < 0) {
+      delta = Math.max(delta, x - startX, x - endX);
+    }
+    var newIndex = getIndex({
+      startX: startX + delta,
+      endX: endX + delta,
+      data,
+      gap,
+      scaleValues
+    });
+    if ((newIndex.startIndex !== startIndex || newIndex.endIndex !== endIndex) && onChange) {
+      onChange(newIndex);
+    }
+    this.setState({
+      startX: startX + delta,
+      endX: endX + delta,
+      slideMoveStartX: e.pageX
+    });
+  }
+  handleTravellerDragStart(id, e) {
+    var event = isTouch(e) ? e.changedTouches[0] : e;
+    this.setState({
+      isSlideMoving: false,
+      isTravellerMoving: true,
+      movingTravellerId: id,
+      brushMoveStartX: event.pageX
+    });
+    this.attachDragEndListener();
+  }
+  handleTravellerMove(e) {
+    var {
+      brushMoveStartX,
+      movingTravellerId,
+      endX,
+      startX,
+      scaleValues
+    } = this.state;
+    if (movingTravellerId == null) {
+      return;
+    }
+    var prevValue = this.state[movingTravellerId];
+    var {
+      x,
+      width,
+      travellerWidth,
+      onChange,
+      gap,
+      data
+    } = this.props;
+    var params = {
+      startX: this.state.startX,
+      endX: this.state.endX,
+      data,
+      gap,
+      scaleValues
+    };
+    var delta = e.pageX - brushMoveStartX;
+    if (delta > 0) {
+      delta = Math.min(delta, x + width - travellerWidth - prevValue);
+    } else if (delta < 0) {
+      delta = Math.max(delta, x - prevValue);
+    }
+    params[movingTravellerId] = prevValue + delta;
+    var newIndex = getIndex(params);
+    var {
+      startIndex,
+      endIndex
+    } = newIndex;
+    var isFullGap = () => {
+      var lastIndex = data.length - 1;
+      if (movingTravellerId === 'startX' && (endX > startX ? startIndex % gap === 0 : endIndex % gap === 0) || endX < startX && endIndex === lastIndex || movingTravellerId === 'endX' && (endX > startX ? endIndex % gap === 0 : startIndex % gap === 0) || endX > startX && endIndex === lastIndex) {
+        return true;
+      }
+      return false;
+    };
+    this.setState(
+    // @ts-expect-error not sure why typescript is not happy with this, partial update is fine in React
+    {
+      [movingTravellerId]: prevValue + delta,
+      brushMoveStartX: e.pageX
+    }, () => {
+      if (onChange) {
+        if (isFullGap()) {
+          onChange(newIndex);
+        }
+      }
+    });
+  }
+  render() {
+    var {
+      data,
+      className,
+      children,
+      x,
+      y,
+      dy,
+      width,
+      height,
+      alwaysShowText,
+      fill,
+      stroke,
+      startIndex,
+      endIndex,
+      travellerWidth,
+      tickFormatter,
+      dataKey,
+      padding
+    } = this.props;
+    var {
+      startX,
+      endX,
+      isTextActive,
+      isSlideMoving,
+      isTravellerMoving,
+      isTravellerFocused
+    } = this.state;
+    if (!data || !data.length || !isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || width <= 0 || height <= 0) {
+      return null;
+    }
+    var layerClass = clsx('recharts-brush', className);
+    var style = generatePrefixStyle('userSelect', 'none');
+    var calculatedY = y + (dy !== null && dy !== void 0 ? dy : 0);
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass,
+      onMouseLeave: this.handleLeaveWrapper,
+      onTouchMove: this.handleTouchMove,
+      style: style
+    }, /*#__PURE__*/React.createElement(Background, {
+      x: x,
+      y: calculatedY,
+      width: width,
+      height: height,
+      fill: fill,
+      stroke: stroke
+    }), /*#__PURE__*/React.createElement(PanoramaContextProvider, null, /*#__PURE__*/React.createElement(Panorama, {
+      x: x,
+      y: calculatedY,
+      width: width,
+      height: height,
+      data: data,
+      padding: padding
+    }, children)), /*#__PURE__*/React.createElement(Slide, {
+      y: calculatedY,
+      height: height,
+      stroke: stroke,
+      travellerWidth: travellerWidth,
+      startX: startX,
+      endX: endX,
+      onMouseEnter: this.handleEnterSlideOrTraveller,
+      onMouseLeave: this.handleLeaveSlideOrTraveller,
+      onMouseDown: this.handleSlideDragStart,
+      onTouchStart: this.handleSlideDragStart
+    }), /*#__PURE__*/React.createElement(TravellerLayer, {
+      travellerX: startX,
+      id: "startX",
+      otherProps: _objectSpread(_objectSpread({}, this.props), {}, {
+        y: calculatedY
+      }),
+      onMouseEnter: this.handleEnterSlideOrTraveller,
+      onMouseLeave: this.handleLeaveSlideOrTraveller,
+      onMouseDown: this.travellerDragStartHandlers.startX,
+      onTouchStart: this.travellerDragStartHandlers.startX,
+      onTravellerMoveKeyboard: this.handleTravellerMoveKeyboard,
+      onFocus: () => {
+        this.setState({
+          isTravellerFocused: true
+        });
+      },
+      onBlur: () => {
+        this.setState({
+          isTravellerFocused: false
+        });
+      }
+    }), /*#__PURE__*/React.createElement(TravellerLayer, {
+      travellerX: endX,
+      id: "endX",
+      otherProps: _objectSpread(_objectSpread({}, this.props), {}, {
+        y: calculatedY
+      }),
+      onMouseEnter: this.handleEnterSlideOrTraveller,
+      onMouseLeave: this.handleLeaveSlideOrTraveller,
+      onMouseDown: this.travellerDragStartHandlers.endX,
+      onTouchStart: this.travellerDragStartHandlers.endX,
+      onTravellerMoveKeyboard: this.handleTravellerMoveKeyboard,
+      onFocus: () => {
+        this.setState({
+          isTravellerFocused: true
+        });
+      },
+      onBlur: () => {
+        this.setState({
+          isTravellerFocused: false
+        });
+      }
+    }), (isTextActive || isSlideMoving || isTravellerMoving || isTravellerFocused || alwaysShowText) && /*#__PURE__*/React.createElement(BrushText, {
+      startIndex: startIndex,
+      endIndex: endIndex,
+      y: calculatedY,
+      height: height,
+      travellerWidth: travellerWidth,
+      stroke: stroke,
+      tickFormatter: tickFormatter,
+      dataKey: dataKey,
+      data: data,
+      startX: startX,
+      endX: endX
+    }));
+  }
+}
+function BrushInternal(props) {
+  var dispatch = useAppDispatch();
+  var chartData = useChartData();
+  var dataIndexes = useDataIndex();
+  var onChangeFromContext = useContext(BrushUpdateDispatchContext);
+  var onChangeFromProps = props.onChange;
+  var {
+    startIndex: startIndexFromProps,
+    endIndex: endIndexFromProps
+  } = props;
+  useEffect(() => {
+    // start and end index can be controlled from props, and we need them to stay up-to-date in the Redux state too
+    dispatch(setDataStartEndIndexes({
+      startIndex: startIndexFromProps,
+      endIndex: endIndexFromProps
+    }));
+  }, [dispatch, endIndexFromProps, startIndexFromProps]);
+  useBrushChartSynchronisation();
+  var onChange = useCallback(nextState => {
+    if (dataIndexes == null) {
+      return;
+    }
+    var {
+      startIndex,
+      endIndex
+    } = dataIndexes;
+    if (nextState.startIndex !== startIndex || nextState.endIndex !== endIndex) {
+      onChangeFromContext === null || onChangeFromContext === void 0 || onChangeFromContext(nextState);
+      onChangeFromProps === null || onChangeFromProps === void 0 || onChangeFromProps(nextState);
+      dispatch(setDataStartEndIndexes(nextState));
+    }
+  }, [onChangeFromProps, onChangeFromContext, dispatch, dataIndexes]);
+  var brushDimensions = useAppSelector(selectBrushDimensions);
+  if (brushDimensions == null || dataIndexes == null || chartData == null || !chartData.length) {
+    return null;
+  }
+  var {
+    startIndex,
+    endIndex
+  } = dataIndexes;
+  var {
+    x,
+    y,
+    width
+  } = brushDimensions;
+  var contextProperties = {
+    data: chartData,
+    x,
+    y,
+    width,
+    startIndex,
+    endIndex,
+    onChange
+  };
+  return /*#__PURE__*/React.createElement(BrushWithState, _extends({}, props, contextProperties, {
+    startIndexControlledFromProps: startIndexFromProps !== null && startIndexFromProps !== void 0 ? startIndexFromProps : undefined,
+    endIndexControlledFromProps: endIndexFromProps !== null && endIndexFromProps !== void 0 ? endIndexFromProps : undefined
+  }));
+}
+function BrushSettingsDispatcher(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setBrushSettings(props));
+    return () => {
+      dispatch(setBrushSettings(null));
+    };
+  }, [dispatch, props]);
+  return null;
+}
+var defaultBrushProps = {
+  height: 40,
+  travellerWidth: 5,
+  gap: 1,
+  fill: '#fff',
+  stroke: '#666',
+  padding: {
+    top: 1,
+    right: 1,
+    bottom: 1,
+    left: 1
+  },
+  leaveTimeOut: 1000,
+  alwaysShowText: false
+};
+export function Brush(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultBrushProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BrushSettingsDispatcher, {
+    height: props.height,
+    x: props.x,
+    y: props.y,
+    width: props.width,
+    padding: props.padding
+  }), /*#__PURE__*/React.createElement(BrushInternal, props));
+}
+Brush.displayName = 'Brush';
Index: node_modules/recharts/es6/cartesian/CartesianAxis.js
===================================================================
--- node_modules/recharts/es6/cartesian/CartesianAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/CartesianAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,350 @@
+var _excluded = ["viewBox"],
+  _excluded2 = ["viewBox"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * @fileOverview Cartesian Axis
+ */
+import * as React from 'react';
+import { Component } from 'react';
+import get from 'es-toolkit/compat/get';
+import { clsx } from 'clsx';
+import { shallowEqual } from '../util/ShallowEqual';
+import { Layer } from '../container/Layer';
+import { Text } from '../component/Text';
+import { Label } from '../component/Label';
+import { isNumber } from '../util/DataUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { filterProps } from '../util/ReactUtils';
+import { getTicks } from './getTicks';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+
+/** The orientation of the axis in correspondence to the chart */
+
+/** A unit to be appended to a value */
+
+/** The formatter function of tick */
+
+/*
+ * `viewBox` and `scale` are SVG attributes.
+ * Recharts however - unfortunately - has its own attributes named `viewBox` and `scale`
+ * that are completely different data shape and different purpose.
+ */
+
+export class CartesianAxis extends Component {
+  constructor(props) {
+    super(props);
+    this.tickRefs = /*#__PURE__*/React.createRef();
+    this.tickRefs.current = [];
+    this.state = {
+      fontSize: '',
+      letterSpacing: ''
+    };
+  }
+  shouldComponentUpdate(_ref, nextState) {
+    var {
+        viewBox
+      } = _ref,
+      restProps = _objectWithoutProperties(_ref, _excluded);
+    // props.viewBox is sometimes generated every time -
+    // check that specially as object equality is likely to fail
+    var _this$props = this.props,
+      {
+        viewBox: viewBoxOld
+      } = _this$props,
+      restPropsOld = _objectWithoutProperties(_this$props, _excluded2);
+    return !shallowEqual(viewBox, viewBoxOld) || !shallowEqual(restProps, restPropsOld) || !shallowEqual(nextState, this.state);
+  }
+
+  /**
+   * Calculate the coordinates of endpoints in ticks
+   * @param  data The data of a simple tick
+   * @return (x1, y1): The coordinate of endpoint close to tick text
+   *  (x2, y2): The coordinate of endpoint close to axis
+   */
+  getTickLineCoord(data) {
+    var {
+      x,
+      y,
+      width,
+      height,
+      orientation,
+      tickSize,
+      mirror,
+      tickMargin
+    } = this.props;
+    var x1, x2, y1, y2, tx, ty;
+    var sign = mirror ? -1 : 1;
+    var finalTickSize = data.tickSize || tickSize;
+    var tickCoord = isNumber(data.tickCoord) ? data.tickCoord : data.coordinate;
+    switch (orientation) {
+      case 'top':
+        x1 = x2 = data.coordinate;
+        y2 = y + +!mirror * height;
+        y1 = y2 - sign * finalTickSize;
+        ty = y1 - sign * tickMargin;
+        tx = tickCoord;
+        break;
+      case 'left':
+        y1 = y2 = data.coordinate;
+        x2 = x + +!mirror * width;
+        x1 = x2 - sign * finalTickSize;
+        tx = x1 - sign * tickMargin;
+        ty = tickCoord;
+        break;
+      case 'right':
+        y1 = y2 = data.coordinate;
+        x2 = x + +mirror * width;
+        x1 = x2 + sign * finalTickSize;
+        tx = x1 + sign * tickMargin;
+        ty = tickCoord;
+        break;
+      default:
+        x1 = x2 = data.coordinate;
+        y2 = y + +mirror * height;
+        y1 = y2 + sign * finalTickSize;
+        ty = y1 + sign * tickMargin;
+        tx = tickCoord;
+        break;
+    }
+    return {
+      line: {
+        x1,
+        y1,
+        x2,
+        y2
+      },
+      tick: {
+        x: tx,
+        y: ty
+      }
+    };
+  }
+  getTickTextAnchor() {
+    var {
+      orientation,
+      mirror
+    } = this.props;
+    var textAnchor;
+    switch (orientation) {
+      case 'left':
+        textAnchor = mirror ? 'start' : 'end';
+        break;
+      case 'right':
+        textAnchor = mirror ? 'end' : 'start';
+        break;
+      default:
+        textAnchor = 'middle';
+        break;
+    }
+    return textAnchor;
+  }
+  getTickVerticalAnchor() {
+    var {
+      orientation,
+      mirror
+    } = this.props;
+    switch (orientation) {
+      case 'left':
+      case 'right':
+        return 'middle';
+      case 'top':
+        return mirror ? 'start' : 'end';
+      default:
+        return mirror ? 'end' : 'start';
+    }
+  }
+  renderAxisLine() {
+    var {
+      x,
+      y,
+      width,
+      height,
+      orientation,
+      mirror,
+      axisLine
+    } = this.props;
+    var props = _objectSpread(_objectSpread(_objectSpread({}, filterProps(this.props, false)), filterProps(axisLine, false)), {}, {
+      fill: 'none'
+    });
+    if (orientation === 'top' || orientation === 'bottom') {
+      var needHeight = +(orientation === 'top' && !mirror || orientation === 'bottom' && mirror);
+      props = _objectSpread(_objectSpread({}, props), {}, {
+        x1: x,
+        y1: y + needHeight * height,
+        x2: x + width,
+        y2: y + needHeight * height
+      });
+    } else {
+      var needWidth = +(orientation === 'left' && !mirror || orientation === 'right' && mirror);
+      props = _objectSpread(_objectSpread({}, props), {}, {
+        x1: x + needWidth * width,
+        y1: y,
+        x2: x + needWidth * width,
+        y2: y + height
+      });
+    }
+    return /*#__PURE__*/React.createElement("line", _extends({}, props, {
+      className: clsx('recharts-cartesian-axis-line', get(axisLine, 'className'))
+    }));
+  }
+  static renderTickItem(option, props, value) {
+    var tickItem;
+    var combinedClassName = clsx(props.className, 'recharts-cartesian-axis-tick-value');
+    if (/*#__PURE__*/React.isValidElement(option)) {
+      tickItem = /*#__PURE__*/React.cloneElement(option, _objectSpread(_objectSpread({}, props), {}, {
+        className: combinedClassName
+      }));
+    } else if (typeof option === 'function') {
+      tickItem = option(_objectSpread(_objectSpread({}, props), {}, {
+        className: combinedClassName
+      }));
+    } else {
+      var className = 'recharts-cartesian-axis-tick-value';
+      if (typeof option !== 'boolean') {
+        className = clsx(className, option.className);
+      }
+      tickItem = /*#__PURE__*/React.createElement(Text, _extends({}, props, {
+        className: className
+      }), value);
+    }
+    return tickItem;
+  }
+
+  /**
+   * render the ticks
+   * @param {string} fontSize Fontsize to consider for tick spacing
+   * @param {string} letterSpacing Letter spacing to consider for tick spacing
+   * @param {Array} ticks The ticks to actually render (overrides what was passed in props)
+   * @return {ReactElement | null} renderedTicks
+   */
+  renderTicks(fontSize, letterSpacing) {
+    var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
+    var {
+      tickLine,
+      stroke,
+      tick,
+      tickFormatter,
+      unit,
+      padding
+    } = this.props;
+    // @ts-expect-error some properties are optional in props but required in getTicks
+    var finalTicks = getTicks(_objectSpread(_objectSpread({}, this.props), {}, {
+      ticks
+    }), fontSize, letterSpacing);
+    var textAnchor = this.getTickTextAnchor();
+    var verticalAnchor = this.getTickVerticalAnchor();
+    var axisProps = svgPropertiesNoEvents(this.props);
+    var customTickProps = filterProps(tick, false);
+    var tickLineProps = _objectSpread(_objectSpread({}, axisProps), {}, {
+      fill: 'none'
+    }, filterProps(tickLine, false));
+    var items = finalTicks.map((entry, i) => {
+      var {
+        line: lineCoord,
+        tick: tickCoord
+      } = this.getTickLineCoord(entry);
+      var tickProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
+        textAnchor,
+        verticalAnchor
+      }, axisProps), {}, {
+        stroke: 'none',
+        fill: stroke
+      }, customTickProps), tickCoord), {}, {
+        index: i,
+        payload: entry,
+        visibleTicksCount: finalTicks.length,
+        tickFormatter,
+        padding
+      });
+      return /*#__PURE__*/React.createElement(Layer, _extends({
+        className: "recharts-cartesian-axis-tick",
+        key: "tick-".concat(entry.value, "-").concat(entry.coordinate, "-").concat(entry.tickCoord)
+      }, adaptEventsOfChild(this.props, entry, i)), tickLine &&
+      /*#__PURE__*/
+      // @ts-expect-error recharts scale is not compatible with SVG scale
+      React.createElement("line", _extends({}, tickLineProps, lineCoord, {
+        className: clsx('recharts-cartesian-axis-tick-line', get(tickLine, 'className'))
+      })), tick && CartesianAxis.renderTickItem(tick, tickProps, "".concat(typeof tickFormatter === 'function' ? tickFormatter(entry.value, i) : entry.value).concat(unit || '')));
+    });
+    return items.length > 0 ? /*#__PURE__*/React.createElement("g", {
+      className: "recharts-cartesian-axis-ticks"
+    }, items) : null;
+  }
+  render() {
+    var {
+      axisLine,
+      width,
+      height,
+      className,
+      hide
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var {
+      ticks
+    } = this.props;
+
+    /*
+     * This is different condition from what validateWidthHeight is doing;
+     * the CartesianAxis does allow width or height to be undefined.
+     */
+    if (width != null && width <= 0 || height != null && height <= 0) {
+      return null;
+    }
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: clsx('recharts-cartesian-axis', className),
+      ref: _ref2 => {
+        if (_ref2) {
+          var tickNodes = _ref2.getElementsByClassName('recharts-cartesian-axis-tick-value');
+          this.tickRefs.current = Array.from(tickNodes);
+          var tick = tickNodes[0];
+          if (tick) {
+            var calculatedFontSize = window.getComputedStyle(tick).fontSize;
+            var calculatedLetterSpacing = window.getComputedStyle(tick).letterSpacing;
+            if (calculatedFontSize !== this.state.fontSize || calculatedLetterSpacing !== this.state.letterSpacing) {
+              this.setState({
+                fontSize: window.getComputedStyle(tick).fontSize,
+                letterSpacing: window.getComputedStyle(tick).letterSpacing
+              });
+            }
+          }
+        }
+      }
+    }, axisLine && this.renderAxisLine(), this.renderTicks(this.state.fontSize, this.state.letterSpacing, ticks), Label.renderCallByParent(this.props));
+  }
+}
+_defineProperty(CartesianAxis, "displayName", 'CartesianAxis');
+_defineProperty(CartesianAxis, "defaultProps", {
+  x: 0,
+  y: 0,
+  width: 0,
+  height: 0,
+  viewBox: {
+    x: 0,
+    y: 0,
+    width: 0,
+    height: 0
+  },
+  // The orientation of axis
+  orientation: 'bottom',
+  // The ticks
+  ticks: [],
+  stroke: '#666',
+  tickLine: true,
+  axisLine: true,
+  tick: true,
+  mirror: false,
+  minTickGap: 5,
+  // The width or height of tick
+  tickSize: 6,
+  tickMargin: 2,
+  interval: 'preserveEnd'
+});
Index: node_modules/recharts/es6/cartesian/CartesianGrid.js
===================================================================
--- node_modules/recharts/es6/cartesian/CartesianGrid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/CartesianGrid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,390 @@
+var _excluded = ["x1", "y1", "x2", "y2", "key"],
+  _excluded2 = ["offset"],
+  _excluded3 = ["xAxisId", "yAxisId"],
+  _excluded4 = ["xAxisId", "yAxisId"];
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Cartesian Grid
+ */
+import * as React from 'react';
+import { warn } from '../util/LogUtils';
+import { isNumber } from '../util/DataUtils';
+import { getCoordinatesOfGrid, getTicksOfAxis } from '../util/ChartUtils';
+import { getTicks } from './getTicks';
+import { CartesianAxis } from './CartesianAxis';
+import { useChartHeight, useChartWidth, useOffsetInternal } from '../context/chartLayoutContext';
+import { selectAxisPropsNeededForCartesianGridTicksGenerator } from '../state/selectors/axisSelectors';
+import { useAppSelector } from '../state/hooks';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+
+/**
+ * The <CartesianGrid horizontal
+ */
+
+var Background = props => {
+  var {
+    fill
+  } = props;
+  if (!fill || fill === 'none') {
+    return null;
+  }
+  var {
+    fillOpacity,
+    x,
+    y,
+    width,
+    height,
+    ry
+  } = props;
+  return /*#__PURE__*/React.createElement("rect", {
+    x: x,
+    y: y,
+    ry: ry,
+    width: width,
+    height: height,
+    stroke: "none",
+    fill: fill,
+    fillOpacity: fillOpacity,
+    className: "recharts-cartesian-grid-bg"
+  });
+};
+function renderLineItem(option, props) {
+  var lineItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error typescript does not see the props type when cloning an element
+    lineItem = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    lineItem = option(props);
+  } else {
+    var {
+        x1,
+        y1,
+        x2,
+        y2,
+        key
+      } = props,
+      others = _objectWithoutProperties(props, _excluded);
+    var _svgPropertiesNoEvent = svgPropertiesNoEvents(others),
+      {
+        offset: __
+      } = _svgPropertiesNoEvent,
+      restOfFilteredProps = _objectWithoutProperties(_svgPropertiesNoEvent, _excluded2);
+    lineItem = /*#__PURE__*/React.createElement("line", _extends({}, restOfFilteredProps, {
+      x1: x1,
+      y1: y1,
+      x2: x2,
+      y2: y2,
+      fill: "none",
+      key: key
+    }));
+  }
+  return lineItem;
+}
+function HorizontalGridLines(props) {
+  var {
+    x,
+    width,
+    horizontal = true,
+    horizontalPoints
+  } = props;
+  if (!horizontal || !horizontalPoints || !horizontalPoints.length) {
+    return null;
+  }
+  var {
+      xAxisId,
+      yAxisId
+    } = props,
+    otherLineItemProps = _objectWithoutProperties(props, _excluded3);
+  var items = horizontalPoints.map((entry, i) => {
+    var lineItemProps = _objectSpread(_objectSpread({}, otherLineItemProps), {}, {
+      x1: x,
+      y1: entry,
+      x2: x + width,
+      y2: entry,
+      key: "line-".concat(i),
+      index: i
+    });
+    return renderLineItem(horizontal, lineItemProps);
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-grid-horizontal"
+  }, items);
+}
+function VerticalGridLines(props) {
+  var {
+    y,
+    height,
+    vertical = true,
+    verticalPoints
+  } = props;
+  if (!vertical || !verticalPoints || !verticalPoints.length) {
+    return null;
+  }
+  var {
+      xAxisId,
+      yAxisId
+    } = props,
+    otherLineItemProps = _objectWithoutProperties(props, _excluded4);
+  var items = verticalPoints.map((entry, i) => {
+    var lineItemProps = _objectSpread(_objectSpread({}, otherLineItemProps), {}, {
+      x1: entry,
+      y1: y,
+      x2: entry,
+      y2: y + height,
+      key: "line-".concat(i),
+      index: i
+    });
+    return renderLineItem(vertical, lineItemProps);
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-grid-vertical"
+  }, items);
+}
+function HorizontalStripes(props) {
+  var {
+    horizontalFill,
+    fillOpacity,
+    x,
+    y,
+    width,
+    height,
+    horizontalPoints,
+    horizontal = true
+  } = props;
+  if (!horizontal || !horizontalFill || !horizontalFill.length) {
+    return null;
+  }
+
+  // Why =y -y? I was trying to find any difference that this makes, with floating point numbers and edge cases but ... nothing.
+  var roundedSortedHorizontalPoints = horizontalPoints.map(e => Math.round(e + y - y)).sort((a, b) => a - b);
+  // Why is this condition `!==` instead of `<=` ?
+  if (y !== roundedSortedHorizontalPoints[0]) {
+    roundedSortedHorizontalPoints.unshift(0);
+  }
+  var items = roundedSortedHorizontalPoints.map((entry, i) => {
+    // Why do we strip only the last stripe if it is invisible, and not all invisible stripes?
+    var lastStripe = !roundedSortedHorizontalPoints[i + 1];
+    var lineHeight = lastStripe ? y + height - entry : roundedSortedHorizontalPoints[i + 1] - entry;
+    if (lineHeight <= 0) {
+      return null;
+    }
+    var colorIndex = i % horizontalFill.length;
+    return /*#__PURE__*/React.createElement("rect", {
+      key: "react-".concat(i) // eslint-disable-line react/no-array-index-key
+      ,
+      y: entry,
+      x: x,
+      height: lineHeight,
+      width: width,
+      stroke: "none",
+      fill: horizontalFill[colorIndex],
+      fillOpacity: fillOpacity,
+      className: "recharts-cartesian-grid-bg"
+    });
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-gridstripes-horizontal"
+  }, items);
+}
+function VerticalStripes(props) {
+  var {
+    vertical = true,
+    verticalFill,
+    fillOpacity,
+    x,
+    y,
+    width,
+    height,
+    verticalPoints
+  } = props;
+  if (!vertical || !verticalFill || !verticalFill.length) {
+    return null;
+  }
+  var roundedSortedVerticalPoints = verticalPoints.map(e => Math.round(e + x - x)).sort((a, b) => a - b);
+  if (x !== roundedSortedVerticalPoints[0]) {
+    roundedSortedVerticalPoints.unshift(0);
+  }
+  var items = roundedSortedVerticalPoints.map((entry, i) => {
+    var lastStripe = !roundedSortedVerticalPoints[i + 1];
+    var lineWidth = lastStripe ? x + width - entry : roundedSortedVerticalPoints[i + 1] - entry;
+    if (lineWidth <= 0) {
+      return null;
+    }
+    var colorIndex = i % verticalFill.length;
+    return /*#__PURE__*/React.createElement("rect", {
+      key: "react-".concat(i) // eslint-disable-line react/no-array-index-key
+      ,
+      x: entry,
+      y: y,
+      width: lineWidth,
+      height: height,
+      stroke: "none",
+      fill: verticalFill[colorIndex],
+      fillOpacity: fillOpacity,
+      className: "recharts-cartesian-grid-bg"
+    });
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-gridstripes-vertical"
+  }, items);
+}
+var defaultVerticalCoordinatesGenerator = (_ref, syncWithTicks) => {
+  var {
+    xAxis,
+    width,
+    height,
+    offset
+  } = _ref;
+  return getCoordinatesOfGrid(getTicks(_objectSpread(_objectSpread(_objectSpread({}, CartesianAxis.defaultProps), xAxis), {}, {
+    ticks: getTicksOfAxis(xAxis, true),
+    viewBox: {
+      x: 0,
+      y: 0,
+      width,
+      height
+    }
+  })), offset.left, offset.left + offset.width, syncWithTicks);
+};
+var defaultHorizontalCoordinatesGenerator = (_ref2, syncWithTicks) => {
+  var {
+    yAxis,
+    width,
+    height,
+    offset
+  } = _ref2;
+  return getCoordinatesOfGrid(getTicks(_objectSpread(_objectSpread(_objectSpread({}, CartesianAxis.defaultProps), yAxis), {}, {
+    ticks: getTicksOfAxis(yAxis, true),
+    viewBox: {
+      x: 0,
+      y: 0,
+      width,
+      height
+    }
+  })), offset.top, offset.top + offset.height, syncWithTicks);
+};
+var defaultProps = {
+  horizontal: true,
+  vertical: true,
+  // The ordinates of horizontal grid lines
+  horizontalPoints: [],
+  // The abscissas of vertical grid lines
+  verticalPoints: [],
+  stroke: '#ccc',
+  fill: 'none',
+  // The fill of colors of grid lines
+  verticalFill: [],
+  horizontalFill: [],
+  xAxisId: 0,
+  yAxisId: 0
+};
+export function CartesianGrid(props) {
+  var chartWidth = useChartWidth();
+  var chartHeight = useChartHeight();
+  var offset = useOffsetInternal();
+  var propsIncludingDefaults = _objectSpread(_objectSpread({}, resolveDefaultProps(props, defaultProps)), {}, {
+    x: isNumber(props.x) ? props.x : offset.left,
+    y: isNumber(props.y) ? props.y : offset.top,
+    width: isNumber(props.width) ? props.width : offset.width,
+    height: isNumber(props.height) ? props.height : offset.height
+  });
+  var {
+    xAxisId,
+    yAxisId,
+    x,
+    y,
+    width,
+    height,
+    syncWithTicks,
+    horizontalValues,
+    verticalValues
+  } = propsIncludingDefaults;
+  var isPanorama = useIsPanorama();
+  var xAxis = useAppSelector(state => selectAxisPropsNeededForCartesianGridTicksGenerator(state, 'xAxis', xAxisId, isPanorama));
+  var yAxis = useAppSelector(state => selectAxisPropsNeededForCartesianGridTicksGenerator(state, 'yAxis', yAxisId, isPanorama));
+  if (!isNumber(width) || width <= 0 || !isNumber(height) || height <= 0 || !isNumber(x) || x !== +x || !isNumber(y) || y !== +y) {
+    return null;
+  }
+
+  /*
+   * verticalCoordinatesGenerator and horizontalCoordinatesGenerator are defined
+   * outside the propsIncludingDefaults because they were never part of the original props
+   * and they were never passed as a prop down to horizontal/vertical custom elements.
+   * If we add these two to propsIncludingDefaults then we are changing public API.
+   * Not a bad thing per se but also not necessary.
+   */
+  var verticalCoordinatesGenerator = propsIncludingDefaults.verticalCoordinatesGenerator || defaultVerticalCoordinatesGenerator;
+  var horizontalCoordinatesGenerator = propsIncludingDefaults.horizontalCoordinatesGenerator || defaultHorizontalCoordinatesGenerator;
+  var {
+    horizontalPoints,
+    verticalPoints
+  } = propsIncludingDefaults;
+
+  // No horizontal points are specified
+  if ((!horizontalPoints || !horizontalPoints.length) && typeof horizontalCoordinatesGenerator === 'function') {
+    var isHorizontalValues = horizontalValues && horizontalValues.length;
+    var generatorResult = horizontalCoordinatesGenerator({
+      yAxis: yAxis ? _objectSpread(_objectSpread({}, yAxis), {}, {
+        ticks: isHorizontalValues ? horizontalValues : yAxis.ticks
+      }) : undefined,
+      width: chartWidth,
+      height: chartHeight,
+      offset
+    }, isHorizontalValues ? true : syncWithTicks);
+    warn(Array.isArray(generatorResult), "horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof generatorResult, "]"));
+    if (Array.isArray(generatorResult)) {
+      horizontalPoints = generatorResult;
+    }
+  }
+
+  // No vertical points are specified
+  if ((!verticalPoints || !verticalPoints.length) && typeof verticalCoordinatesGenerator === 'function') {
+    var isVerticalValues = verticalValues && verticalValues.length;
+    var _generatorResult = verticalCoordinatesGenerator({
+      xAxis: xAxis ? _objectSpread(_objectSpread({}, xAxis), {}, {
+        ticks: isVerticalValues ? verticalValues : xAxis.ticks
+      }) : undefined,
+      width: chartWidth,
+      height: chartHeight,
+      offset
+    }, isVerticalValues ? true : syncWithTicks);
+    warn(Array.isArray(_generatorResult), "verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof _generatorResult, "]"));
+    if (Array.isArray(_generatorResult)) {
+      verticalPoints = _generatorResult;
+    }
+  }
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-grid"
+  }, /*#__PURE__*/React.createElement(Background, {
+    fill: propsIncludingDefaults.fill,
+    fillOpacity: propsIncludingDefaults.fillOpacity,
+    x: propsIncludingDefaults.x,
+    y: propsIncludingDefaults.y,
+    width: propsIncludingDefaults.width,
+    height: propsIncludingDefaults.height,
+    ry: propsIncludingDefaults.ry
+  }), /*#__PURE__*/React.createElement(HorizontalStripes, _extends({}, propsIncludingDefaults, {
+    horizontalPoints: horizontalPoints
+  })), /*#__PURE__*/React.createElement(VerticalStripes, _extends({}, propsIncludingDefaults, {
+    verticalPoints: verticalPoints
+  })), /*#__PURE__*/React.createElement(HorizontalGridLines, _extends({}, propsIncludingDefaults, {
+    offset: offset,
+    horizontalPoints: horizontalPoints,
+    xAxis: xAxis,
+    yAxis: yAxis
+  })), /*#__PURE__*/React.createElement(VerticalGridLines, _extends({}, propsIncludingDefaults, {
+    offset: offset,
+    verticalPoints: verticalPoints,
+    xAxis: xAxis,
+    yAxis: yAxis
+  })));
+}
+CartesianGrid.displayName = 'CartesianGrid';
Index: node_modules/recharts/es6/cartesian/ErrorBar.js
===================================================================
--- node_modules/recharts/es6/cartesian/ErrorBar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/ErrorBar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,228 @@
+var _excluded = ["direction", "width", "dataKey", "isAnimationActive", "animationBegin", "animationDuration", "animationEasing"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Render a group of error bar
+ */
+import * as React from 'react';
+import { Component } from 'react';
+import { Layer } from '../container/Layer';
+import { ReportErrorBarSettings, useErrorBarContext } from '../context/ErrorBarContext';
+import { useXAxis, useYAxis } from '../hooks';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { useChartLayout } from '../context/chartLayoutContext';
+import { CSSTransitionAnimate } from '../animation/CSSTransitionAnimate';
+
+/**
+ * So usually the direction is decided by the chart layout.
+ * Horizontal layout means error bars are vertical means direction=y
+ * Vertical layout means error bars are horizontal means direction=x
+ *
+ * Except! In Scatter chart, error bars can go both ways.
+ *
+ * So this property is only ever used in Scatter chart, and ignored elsewhere.
+ */
+
+/**
+ * External ErrorBar props, visible for users of the library
+ */
+
+/**
+ * Props after defaults, and required props have been applied.
+ */
+
+function ErrorBarImpl(props) {
+  var {
+      direction,
+      width,
+      dataKey,
+      isAnimationActive,
+      animationBegin,
+      animationDuration,
+      animationEasing
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var svgProps = svgPropertiesNoEvents(others);
+  var {
+    data,
+    dataPointFormatter,
+    xAxisId,
+    yAxisId,
+    errorBarOffset: offset
+  } = useErrorBarContext();
+  var xAxis = useXAxis(xAxisId);
+  var yAxis = useYAxis(yAxisId);
+  if ((xAxis === null || xAxis === void 0 ? void 0 : xAxis.scale) == null || (yAxis === null || yAxis === void 0 ? void 0 : yAxis.scale) == null || data == null) {
+    return null;
+  }
+
+  // ErrorBar requires type number XAxis, why?
+  if (direction === 'x' && xAxis.type !== 'number') {
+    return null;
+  }
+  var errorBars = data.map(entry => {
+    var {
+      x,
+      y,
+      value,
+      errorVal
+    } = dataPointFormatter(entry, dataKey, direction);
+    if (!errorVal || x == null || y == null) {
+      return null;
+    }
+    var lineCoordinates = [];
+    var lowBound, highBound;
+    if (Array.isArray(errorVal)) {
+      [lowBound, highBound] = errorVal;
+    } else {
+      lowBound = highBound = errorVal;
+    }
+    if (direction === 'x') {
+      // error bar for horizontal charts, the y is fixed, x is a range value
+      var {
+        scale
+      } = xAxis;
+      var yMid = y + offset;
+      var yMin = yMid + width;
+      var yMax = yMid - width;
+      var xMin = scale(value - lowBound);
+      var xMax = scale(value + highBound);
+
+      // the right line of |--|
+      lineCoordinates.push({
+        x1: xMax,
+        y1: yMin,
+        x2: xMax,
+        y2: yMax
+      });
+      // the middle line of |--|
+      lineCoordinates.push({
+        x1: xMin,
+        y1: yMid,
+        x2: xMax,
+        y2: yMid
+      });
+      // the left line of |--|
+      lineCoordinates.push({
+        x1: xMin,
+        y1: yMin,
+        x2: xMin,
+        y2: yMax
+      });
+    } else if (direction === 'y') {
+      // error bar for horizontal charts, the x is fixed, y is a range value
+      var {
+        scale: _scale
+      } = yAxis;
+      var xMid = x + offset;
+      var _xMin = xMid - width;
+      var _xMax = xMid + width;
+      var _yMin = _scale(value - lowBound);
+      var _yMax = _scale(value + highBound);
+
+      // the top line
+      lineCoordinates.push({
+        x1: _xMin,
+        y1: _yMax,
+        x2: _xMax,
+        y2: _yMax
+      });
+      // the middle line
+      lineCoordinates.push({
+        x1: xMid,
+        y1: _yMin,
+        x2: xMid,
+        y2: _yMax
+      });
+      // the bottom line
+      lineCoordinates.push({
+        x1: _xMin,
+        y1: _yMin,
+        x2: _xMax,
+        y2: _yMin
+      });
+    }
+    var scaleDirection = direction === 'x' ? 'scaleX' : 'scaleY';
+    var transformOrigin = "".concat(x + offset, "px ").concat(y + offset, "px");
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: "recharts-errorBar",
+      key: "bar-".concat(lineCoordinates.map(c => "".concat(c.x1, "-").concat(c.x2, "-").concat(c.y1, "-").concat(c.y2)))
+    }, svgProps), lineCoordinates.map(coordinates => {
+      var lineStyle = isAnimationActive ? {
+        transformOrigin
+      } : undefined;
+      return /*#__PURE__*/React.createElement(CSSTransitionAnimate, {
+        from: "".concat(scaleDirection, "(0)"),
+        to: "".concat(scaleDirection, "(1)"),
+        attributeName: "transform",
+        begin: animationBegin,
+        easing: animationEasing,
+        isActive: isAnimationActive,
+        duration: animationDuration,
+        key: "line-".concat(coordinates.x1, "-").concat(coordinates.x2, "-").concat(coordinates.y1, "-").concat(coordinates.y2)
+      }, style => /*#__PURE__*/React.createElement("line", _extends({}, coordinates, {
+        style: _objectSpread(_objectSpread({}, lineStyle), style)
+      })));
+    }));
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-errorBars"
+  }, errorBars);
+}
+function useErrorBarDirection(directionFromProps) {
+  var layout = useChartLayout();
+  if (directionFromProps != null) {
+    return directionFromProps;
+  }
+  if (layout != null) {
+    return layout === 'horizontal' ? 'y' : 'x';
+  }
+  return 'x';
+}
+var errorBarDefaultProps = {
+  stroke: 'black',
+  strokeWidth: 1.5,
+  width: 5,
+  offset: 0,
+  isAnimationActive: true,
+  animationBegin: 0,
+  animationDuration: 400,
+  animationEasing: 'ease-in-out'
+};
+function ErrorBarInternal(props) {
+  var realDirection = useErrorBarDirection(props.direction);
+  var {
+    width,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing
+  } = resolveDefaultProps(props, errorBarDefaultProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportErrorBarSettings, {
+    dataKey: props.dataKey,
+    direction: realDirection
+  }), /*#__PURE__*/React.createElement(ErrorBarImpl, _extends({}, props, {
+    direction: realDirection,
+    width: width,
+    isAnimationActive: isAnimationActive,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing
+  })));
+}
+
+// eslint-disable-next-line react/prefer-stateless-function
+export class ErrorBar extends Component {
+  render() {
+    return /*#__PURE__*/React.createElement(ErrorBarInternal, this.props);
+  }
+}
+_defineProperty(ErrorBar, "defaultProps", errorBarDefaultProps);
+_defineProperty(ErrorBar, "displayName", 'ErrorBar');
Index: node_modules/recharts/es6/cartesian/Funnel.js
===================================================================
--- node_modules/recharts/es6/cartesian/Funnel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/Funnel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,451 @@
+var _excluded = ["onMouseEnter", "onClick", "onMouseLeave", "shape", "activeShape"],
+  _excluded2 = ["stroke", "fill", "legendType", "hide", "isAnimationActive", "animationBegin", "animationDuration", "animationEasing", "nameKey", "lastShapeType"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/* eslint-disable max-classes-per-file */
+import * as React from 'react';
+import { PureComponent, useCallback, useMemo, useRef, useState } from 'react';
+import omit from 'es-toolkit/compat/omit';
+import { clsx } from 'clsx';
+import { selectActiveIndex } from '../state/selectors/selectors';
+import { useAppSelector } from '../state/hooks';
+import { Layer } from '../container/Layer';
+import { LabelList } from '../component/LabelList';
+import { Global } from '../util/Global';
+import { interpolateNumber, isNumber } from '../util/DataUtils';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { FunnelTrapezoid } from '../util/FunnelUtils';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { selectFunnelTrapezoids } from '../state/selectors/funnelSelectors';
+import { findAllByType } from '../util/ReactUtils';
+import { Cell } from '../component/Cell';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { usePlotArea } from '../hooks';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    nameKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType,
+    data
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: props.trapezoids.map(_ref => {
+      var {
+        tooltipPosition
+      } = _ref;
+      return tooltipPosition;
+    }),
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      name,
+      nameKey,
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '' // Funnel does not have unit, why?
+    }
+  };
+}
+function FunnelTrapezoids(props) {
+  var {
+    trapezoids,
+    allOtherFunnelProps,
+    showLabels
+  } = props;
+  var activeItemIndex = useAppSelector(state => selectActiveIndex(state, 'item', state.tooltip.settings.trigger, undefined));
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps,
+      shape,
+      activeShape
+    } = allOtherFunnelProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherFunnelProps, _excluded);
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherFunnelProps.dataKey);
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherFunnelProps.dataKey);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, trapezoids.map((entry, i) => {
+    var isActiveIndex = activeShape && activeItemIndex === String(i);
+    var trapezoidOptions = isActiveIndex ? activeShape : shape;
+    var trapezoidProps = _objectSpread(_objectSpread({}, entry), {}, {
+      option: trapezoidOptions,
+      isActive: isActiveIndex,
+      stroke: entry.stroke
+    });
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: "recharts-funnel-trapezoid"
+    }, adaptEventsOfChild(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error the types need a bit of attention
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onClick: onClickFromContext(entry, i),
+      key: "trapezoid-".concat(entry === null || entry === void 0 ? void 0 : entry.x, "-").concat(entry === null || entry === void 0 ? void 0 : entry.y, "-").concat(entry === null || entry === void 0 ? void 0 : entry.name, "-").concat(entry === null || entry === void 0 ? void 0 : entry.value)
+    }), /*#__PURE__*/React.createElement(FunnelTrapezoid, trapezoidProps));
+  }), showLabels && LabelList.renderCallByParent(allOtherFunnelProps, trapezoids));
+}
+var latestId = 0;
+
+/**
+ * This hook will return a unique animation id for the given reference.
+ * The ID increments every time the reference changes.
+ * @param reference The reference to track
+ * @returns The unique animation ID
+ */
+function useAnimationId(reference) {
+  var idRef = useRef(latestId);
+  var ref = useRef(reference);
+  if (ref.current !== reference) {
+    idRef.current += 1;
+    latestId = idRef.current;
+    ref.current = reference;
+  }
+  return idRef.current;
+}
+function TrapezoidsWithAnimation(_ref2) {
+  var {
+    previousTrapezoidsRef,
+    props
+  } = _ref2;
+  var {
+    trapezoids,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevTrapezoids = previousTrapezoidsRef.current;
+  var [isAnimating, setIsAnimating] = useState(true);
+  var animationId = useAnimationId(trapezoids);
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    key: animationId,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd
+  }, t => {
+    var stepData = t === 1 ? trapezoids : trapezoids.map((entry, index) => {
+      var prev = prevTrapezoids && prevTrapezoids[index];
+      if (prev) {
+        var _interpolatorX = interpolateNumber(prev.x, entry.x);
+        var _interpolatorY = interpolateNumber(prev.y, entry.y);
+        var _interpolatorUpperWidth = interpolateNumber(prev.upperWidth, entry.upperWidth);
+        var _interpolatorLowerWidth = interpolateNumber(prev.lowerWidth, entry.lowerWidth);
+        var _interpolatorHeight = interpolateNumber(prev.height, entry.height);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: _interpolatorX(t),
+          y: _interpolatorY(t),
+          upperWidth: _interpolatorUpperWidth(t),
+          lowerWidth: _interpolatorLowerWidth(t),
+          height: _interpolatorHeight(t)
+        });
+      }
+      var interpolatorX = interpolateNumber(entry.x + entry.upperWidth / 2, entry.x);
+      var interpolatorY = interpolateNumber(entry.y + entry.height / 2, entry.y);
+      var interpolatorUpperWidth = interpolateNumber(0, entry.upperWidth);
+      var interpolatorLowerWidth = interpolateNumber(0, entry.lowerWidth);
+      var interpolatorHeight = interpolateNumber(0, entry.height);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        x: interpolatorX(t),
+        y: interpolatorY(t),
+        upperWidth: interpolatorUpperWidth(t),
+        lowerWidth: interpolatorLowerWidth(t),
+        height: interpolatorHeight(t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousTrapezoidsRef.current = stepData;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(FunnelTrapezoids, {
+      trapezoids: stepData,
+      allOtherFunnelProps: props,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderTrapezoids(props) {
+  var {
+    trapezoids,
+    isAnimationActive
+  } = props;
+  var previousTrapezoidsRef = useRef(null);
+  var prevTrapezoids = previousTrapezoidsRef.current;
+  if (isAnimationActive && trapezoids && trapezoids.length && (!prevTrapezoids || prevTrapezoids !== trapezoids)) {
+    return /*#__PURE__*/React.createElement(TrapezoidsWithAnimation, {
+      props: props,
+      previousTrapezoidsRef: previousTrapezoidsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(FunnelTrapezoids, {
+    trapezoids: trapezoids,
+    allOtherFunnelProps: props,
+    showLabels: true
+  });
+}
+var getRealWidthHeight = (customWidth, offset) => {
+  var {
+    width,
+    height,
+    left,
+    right,
+    top,
+    bottom
+  } = offset;
+  var realHeight = height;
+  var realWidth = width;
+  if (isNumber(customWidth)) {
+    realWidth = customWidth;
+  } else if (typeof customWidth === 'string') {
+    realWidth = realWidth * parseFloat(customWidth) / 100;
+  }
+  return {
+    realWidth: realWidth - left - right - 50,
+    realHeight: realHeight - bottom - top,
+    offsetX: (width - realWidth) / 2,
+    offsetY: (height - realHeight) / 2
+  };
+};
+export class FunnelWithState extends PureComponent {
+  render() {
+    var {
+      className
+    } = this.props;
+    var layerClass = clsx('recharts-trapezoids', className);
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass
+    }, /*#__PURE__*/React.createElement(RenderTrapezoids, this.props));
+  }
+}
+var defaultFunnelProps = {
+  stroke: '#fff',
+  fill: '#808080',
+  legendType: 'rect',
+  hide: false,
+  isAnimationActive: !Global.isSsr,
+  animationBegin: 400,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  nameKey: 'name',
+  lastShapeType: 'triangle'
+};
+function FunnelImpl(props) {
+  var {
+    height,
+    width
+  } = usePlotArea();
+  var _resolveDefaultProps = resolveDefaultProps(props, defaultFunnelProps),
+    {
+      stroke,
+      fill,
+      legendType,
+      hide,
+      isAnimationActive,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      nameKey,
+      lastShapeType
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded2);
+  var presentationProps = svgPropertiesNoEvents(props);
+  var cells = findAllByType(props.children, Cell);
+  var funnelSettings = useMemo(() => ({
+    dataKey: props.dataKey,
+    nameKey,
+    data: props.data,
+    tooltipType: props.tooltipType,
+    lastShapeType,
+    reversed: props.reversed,
+    customWidth: props.width,
+    cells,
+    presentationProps
+  }), [props.dataKey, nameKey, props.data, props.tooltipType, lastShapeType, props.reversed, props.width, cells, presentationProps]);
+  var {
+    trapezoids
+  } = useAppSelector(state => selectFunnelTrapezoids(state, funnelSettings));
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: _objectSpread(_objectSpread({}, props), {}, {
+      trapezoids
+    })
+  }), hide ? null : /*#__PURE__*/React.createElement(FunnelWithState, _extends({}, everythingElse, {
+    stroke: stroke,
+    fill: fill,
+    nameKey: nameKey,
+    lastShapeType: lastShapeType,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive,
+    hide: hide,
+    legendType: legendType,
+    height: height,
+    width: width,
+    trapezoids: trapezoids
+  })));
+}
+export function computeFunnelTrapezoids(_ref3) {
+  var {
+    dataKey,
+    nameKey,
+    displayedData,
+    tooltipType,
+    lastShapeType,
+    reversed,
+    offset,
+    customWidth
+  } = _ref3;
+  var {
+    left,
+    top
+  } = offset;
+  var {
+    realHeight,
+    realWidth,
+    offsetX,
+    offsetY
+  } = getRealWidthHeight(customWidth, offset);
+  var maxValue = Math.max.apply(null, displayedData.map(entry => getValueByDataKey(entry, dataKey, 0)));
+  var len = displayedData.length;
+  var rowHeight = realHeight / len;
+  var parentViewBox = {
+    x: offset.left,
+    y: offset.top,
+    width: offset.width,
+    height: offset.height
+  };
+  var trapezoids = displayedData.map((entry, i) => {
+    var rawVal = getValueByDataKey(entry, dataKey, 0);
+    var name = getValueByDataKey(entry, nameKey, i);
+    var val = rawVal;
+    var nextVal;
+    if (i !== len - 1) {
+      nextVal = getValueByDataKey(displayedData[i + 1], dataKey, 0);
+      if (nextVal instanceof Array) {
+        [nextVal] = nextVal;
+      }
+    } else if (rawVal instanceof Array && rawVal.length === 2) {
+      [val, nextVal] = rawVal;
+    } else if (lastShapeType === 'rectangle') {
+      nextVal = val;
+    } else {
+      nextVal = 0;
+    }
+
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    var x = (maxValue - val) * realWidth / (2 * maxValue) + top + 25 + offsetX;
+    var y = rowHeight * i + left + offsetY;
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    var upperWidth = val / maxValue * realWidth;
+    var lowerWidth = nextVal / maxValue * realWidth;
+    var tooltipPayload = [{
+      name,
+      value: val,
+      payload: entry,
+      dataKey,
+      type: tooltipType
+    }];
+    var tooltipPosition = {
+      x: x + upperWidth / 2,
+      y: y + rowHeight / 2
+    };
+    return _objectSpread(_objectSpread({
+      x,
+      y,
+      width: Math.max(upperWidth, lowerWidth),
+      upperWidth,
+      lowerWidth,
+      height: rowHeight,
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      name,
+      val,
+      tooltipPayload,
+      tooltipPosition
+    }, omit(entry, ['width'])), {}, {
+      payload: entry,
+      parentViewBox,
+      labelViewBox: {
+        x: x + (upperWidth - lowerWidth) / 4,
+        y,
+        width: Math.abs(upperWidth - lowerWidth) / 2 + Math.min(upperWidth, lowerWidth),
+        height: rowHeight
+      }
+    });
+  });
+  if (reversed) {
+    trapezoids = trapezoids.map((entry, index) => {
+      var newY = entry.y - index * rowHeight + (len - 1 - index) * rowHeight;
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        upperWidth: entry.lowerWidth,
+        lowerWidth: entry.upperWidth,
+        x: entry.x - (entry.lowerWidth - entry.upperWidth) / 2,
+        y: entry.y - index * rowHeight + (len - 1 - index) * rowHeight,
+        tooltipPosition: _objectSpread(_objectSpread({}, entry.tooltipPosition), {}, {
+          y: newY + rowHeight / 2
+        }),
+        labelViewBox: _objectSpread(_objectSpread({}, entry.labelViewBox), {}, {
+          y: newY
+        })
+      });
+    });
+  }
+  return {
+    trapezoids,
+    data: displayedData
+  };
+}
+export class Funnel extends PureComponent {
+  render() {
+    return /*#__PURE__*/React.createElement(FunnelImpl, this.props);
+  }
+}
+_defineProperty(Funnel, "displayName", 'Funnel');
+_defineProperty(Funnel, "defaultProps", defaultFunnelProps);
Index: node_modules/recharts/es6/cartesian/GraphicalItemClipPath.js
===================================================================
--- node_modules/recharts/es6/cartesian/GraphicalItemClipPath.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/GraphicalItemClipPath.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+import * as React from 'react';
+import { useAppSelector } from '../state/hooks';
+import { implicitXAxis, implicitYAxis, selectXAxisSettings, selectYAxisSettings } from '../state/selectors/axisSelectors';
+import { usePlotArea } from '../hooks';
+export function useNeedsClip(xAxisId, yAxisId) {
+  var _xAxis$allowDataOverf, _yAxis$allowDataOverf;
+  var xAxis = useAppSelector(state => selectXAxisSettings(state, xAxisId));
+  var yAxis = useAppSelector(state => selectYAxisSettings(state, yAxisId));
+  var needClipX = (_xAxis$allowDataOverf = xAxis === null || xAxis === void 0 ? void 0 : xAxis.allowDataOverflow) !== null && _xAxis$allowDataOverf !== void 0 ? _xAxis$allowDataOverf : implicitXAxis.allowDataOverflow;
+  var needClipY = (_yAxis$allowDataOverf = yAxis === null || yAxis === void 0 ? void 0 : yAxis.allowDataOverflow) !== null && _yAxis$allowDataOverf !== void 0 ? _yAxis$allowDataOverf : implicitYAxis.allowDataOverflow;
+  var needClip = needClipX || needClipY;
+  return {
+    needClip,
+    needClipX,
+    needClipY
+  };
+}
+export function GraphicalItemClipPath(_ref) {
+  var {
+    xAxisId,
+    yAxisId,
+    clipPathId
+  } = _ref;
+  var plotArea = usePlotArea();
+  var {
+    needClipX,
+    needClipY,
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  if (!needClip) {
+    return null;
+  }
+  var {
+    x,
+    y,
+    width,
+    height
+  } = plotArea;
+  return /*#__PURE__*/React.createElement("clipPath", {
+    id: "clipPath-".concat(clipPathId)
+  }, /*#__PURE__*/React.createElement("rect", {
+    x: needClipX ? x : x - width / 2,
+    y: needClipY ? y : y - height / 2,
+    width: needClipX ? width : width * 2,
+    height: needClipY ? height : height * 2
+  }));
+}
Index: node_modules/recharts/es6/cartesian/Line.js
===================================================================
--- node_modules/recharts/es6/cartesian/Line.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/Line.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,646 @@
+var _excluded = ["id"],
+  _excluded2 = ["type", "layout", "connectNulls", "needClip"],
+  _excluded3 = ["activeDot", "animateNewValues", "animationBegin", "animationDuration", "animationEasing", "connectNulls", "dot", "hide", "isAnimationActive", "label", "legendType", "xAxisId", "yAxisId", "id"];
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { Component, useCallback, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { Curve } from '../shape/Curve';
+import { Dot } from '../shape/Dot';
+import { Layer } from '../container/Layer';
+import { LabelList } from '../component/LabelList';
+import { interpolate, isNullish } from '../util/DataUtils';
+import { filterProps, isClipDot } from '../util/ReactUtils';
+import { Global } from '../util/Global';
+import { getCateCoordinateOfLine, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { ActivePoints } from '../component/ActivePoints';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { SetErrorBarContext } from '../context/ErrorBarContext';
+import { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';
+import { useChartLayout } from '../context/chartLayoutContext';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { selectLinePoints } from '../state/selectors/lineSelectors';
+import { useAppSelector } from '../state/hooks';
+import { SetLegendPayload } from '../state/SetLegendPayload';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { usePlotArea } from '../hooks';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+
+var computeLegendPayloadFromAreaData = props => {
+  var {
+    dataKey,
+    name,
+    stroke,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: stroke,
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    data,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    unit
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey: undefined,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: props.tooltipType,
+      color: props.stroke,
+      unit
+    }
+  };
+}
+var generateSimpleStrokeDasharray = (totalLength, length) => {
+  return "".concat(length, "px ").concat(totalLength - length, "px");
+};
+function repeat(lines, count) {
+  var linesUnit = lines.length % 2 !== 0 ? [...lines, 0] : lines;
+  var result = [];
+  for (var i = 0; i < count; ++i) {
+    result = [...result, ...linesUnit];
+  }
+  return result;
+}
+var getStrokeDasharray = (length, totalLength, lines) => {
+  var lineLength = lines.reduce((pre, next) => pre + next);
+
+  // if lineLength is 0 return the default when no strokeDasharray is provided
+  if (!lineLength) {
+    return generateSimpleStrokeDasharray(totalLength, length);
+  }
+  var count = Math.floor(length / lineLength);
+  var remainLength = length % lineLength;
+  var restLength = totalLength - length;
+  var remainLines = [];
+  for (var i = 0, sum = 0; i < lines.length; sum += lines[i], ++i) {
+    if (sum + lines[i] > remainLength) {
+      remainLines = [...lines.slice(0, i), remainLength - sum];
+      break;
+    }
+  }
+  var emptyLines = remainLines.length % 2 === 0 ? [0, restLength] : [restLength];
+  return [...repeat(lines, count), ...remainLines, ...emptyLines].map(line => "".concat(line, "px")).join(', ');
+};
+function renderDotItem(option, props) {
+  var dotItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    dotItem = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    dotItem = option(props);
+  } else {
+    var className = clsx('recharts-line-dot', typeof option !== 'boolean' ? option.className : '');
+    dotItem = /*#__PURE__*/React.createElement(Dot, _extends({}, props, {
+      className: className
+    }));
+  }
+  return dotItem;
+}
+function shouldRenderDots(points, dot) {
+  if (points == null) {
+    return false;
+  }
+  if (dot) {
+    return true;
+  }
+  return points.length === 1;
+}
+function Dots(_ref) {
+  var {
+    clipPathId,
+    points,
+    props
+  } = _ref;
+  var {
+    dot,
+    dataKey,
+    needClip
+  } = props;
+  if (!shouldRenderDots(points, dot)) {
+    return null;
+  }
+
+  /*
+   * Exclude ID from the props passed to the Dots component
+   * because then the ID would be applied to multiple dots and it would no longer be unique.
+   */
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded);
+  var clipDot = isClipDot(dot);
+  var lineProps = svgPropertiesNoEvents(propsWithoutId);
+  var customDotProps = filterProps(dot, true);
+  var dots = points.map((entry, i) => {
+    var dotProps = _objectSpread(_objectSpread(_objectSpread({
+      key: "dot-".concat(i),
+      r: 3
+    }, lineProps), customDotProps), {}, {
+      index: i,
+      cx: entry.x,
+      cy: entry.y,
+      dataKey,
+      value: entry.value,
+      payload: entry.payload,
+      points
+    });
+    return renderDotItem(dot, dotProps);
+  });
+  var dotsProps = {
+    clipPath: needClip ? "url(#clipPath-".concat(clipDot ? '' : 'dots-').concat(clipPathId, ")") : undefined
+  };
+  return /*#__PURE__*/React.createElement(Layer, _extends({
+    className: "recharts-line-dots",
+    key: "dots"
+  }, dotsProps), dots);
+}
+function StaticCurve(_ref2) {
+  var {
+    clipPathId,
+    pathRef,
+    points,
+    strokeDasharray,
+    props,
+    showLabels
+  } = _ref2;
+  var {
+      type,
+      layout,
+      connectNulls,
+      needClip
+    } = props,
+    others = _objectWithoutProperties(props, _excluded2);
+  var curveProps = _objectSpread(_objectSpread({}, filterProps(others, true)), {}, {
+    fill: 'none',
+    className: 'recharts-line-curve',
+    clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined,
+    points,
+    type,
+    layout,
+    connectNulls,
+    strokeDasharray: strokeDasharray !== null && strokeDasharray !== void 0 ? strokeDasharray : props.strokeDasharray
+  });
+  return /*#__PURE__*/React.createElement(React.Fragment, null, (points === null || points === void 0 ? void 0 : points.length) > 1 && /*#__PURE__*/React.createElement(Curve, _extends({}, curveProps, {
+    pathRef: pathRef
+  })), /*#__PURE__*/React.createElement(Dots, {
+    points: points,
+    clipPathId: clipPathId,
+    props: props
+  }), showLabels && LabelList.renderCallByParent(props, points));
+}
+function getTotalLength(mainCurve) {
+  try {
+    return mainCurve && mainCurve.getTotalLength && mainCurve.getTotalLength() || 0;
+  } catch (_unused) {
+    return 0;
+  }
+}
+function CurveWithAnimation(_ref3) {
+  var {
+    clipPathId,
+    props,
+    pathRef,
+    previousPointsRef,
+    longestAnimatedLengthRef
+  } = _ref3;
+  var {
+    points,
+    strokeDasharray,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    animateNewValues,
+    width,
+    height,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevPoints = previousPointsRef.current;
+  var animationId = useAnimationId(props, 'recharts-line-');
+  var [isAnimating, setIsAnimating] = useState(false);
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  var totalLength = getTotalLength(pathRef.current);
+  /*
+   * Here we want to detect if the length animation has been interrupted.
+   * For that we keep a reference to the furthest length that has been animated.
+   *
+   * And then, to keep things smooth, we add to it the current length that is being animated right now.
+   *
+   * If we did Math.max then it makes the length animation "pause" but we want to keep it smooth
+   * so in case we have some "leftover" length from the previous animation we add it to the current length.
+   *
+   * This is not perfect because the animation changes speed due to easing. The default easing is 'ease' which is not linear
+   * and makes it stand out. But it's good enough I suppose.
+   * If we want to fix it then we need to keep track of multiple animations and their easing and timings.
+   *
+   * If you want to see this in action, try to change the dataKey of the line chart while the initial animation is running.
+   * The Line begins with zero length and slowly grows to the full length. While this growth is in progress,
+   * change the dataKey and the Line will continue growing from where it has grown so far.
+   */
+  var startingPoint = longestAnimatedLengthRef.current;
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    var lengthInterpolated = interpolate(startingPoint, totalLength + startingPoint, t);
+    var curLength = Math.min(lengthInterpolated, totalLength);
+    var currentStrokeDasharray;
+    if (strokeDasharray) {
+      var lines = "".concat(strokeDasharray).split(/[,\s]+/gim).map(num => parseFloat(num));
+      currentStrokeDasharray = getStrokeDasharray(curLength, totalLength, lines);
+    } else {
+      currentStrokeDasharray = generateSimpleStrokeDasharray(totalLength, curLength);
+    }
+    if (prevPoints) {
+      var prevPointsDiffFactor = prevPoints.length / points.length;
+      var stepData = t === 1 ? points : points.map((entry, index) => {
+        var prevPointIndex = Math.floor(index * prevPointsDiffFactor);
+        if (prevPoints[prevPointIndex]) {
+          var prev = prevPoints[prevPointIndex];
+          return _objectSpread(_objectSpread({}, entry), {}, {
+            x: interpolate(prev.x, entry.x, t),
+            y: interpolate(prev.y, entry.y, t)
+          });
+        }
+
+        // magic number of faking previous x and y location
+        if (animateNewValues) {
+          return _objectSpread(_objectSpread({}, entry), {}, {
+            x: interpolate(width * 2, entry.x, t),
+            y: interpolate(height / 2, entry.y, t)
+          });
+        }
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: entry.x,
+          y: entry.y
+        });
+      });
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = stepData;
+      return /*#__PURE__*/React.createElement(StaticCurve, {
+        props: props,
+        points: stepData,
+        clipPathId: clipPathId,
+        pathRef: pathRef,
+        showLabels: !isAnimating,
+        strokeDasharray: currentStrokeDasharray
+      });
+    }
+
+    /*
+     * Here it is important to wait a little bit with updating the previousPointsRef
+     * before the animation has a time to initialize.
+     * If we set the previous pointsRef immediately, we set it before the Legend height it calculated
+     * and before pathRef is set.
+     * If that happens, the Line will re-render again after Legend had reported its height
+     * which will start a new animation with the previous points as the starting point
+     * which gives the effect of the Line animating slightly upwards (where the animation distance equals the Legend height).
+     * Waiting for t > 0 is indirect but good enough to ensure that the Legend height is calculated and animation works properly.
+     *
+     * Total length similarly is calculated from the pathRef. We should not update the previousPointsRef
+     * before the pathRef is set, otherwise we will have a wrong total length.
+     */
+    if (t > 0 && totalLength > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = points;
+      /*
+       * totalLength is set from a ref and is not updated in the first tick of the animation.
+       * It defaults to zero which is exactly what we want here because we want to grow from zero,
+       * however the same happens when the data change.
+       *
+       * In that case we want to remember the previous length and continue from there, and only animate the shape.
+       *
+       * Therefore the totalLength > 0 check.
+       *
+       * The Animate is about to fire handleAnimationStart which will update the state
+       * and cause a re-render and read a new proper totalLength which will be used in the next tick
+       * and update the longestAnimatedLengthRef.
+       */
+      // eslint-disable-next-line no-param-reassign
+      longestAnimatedLengthRef.current = curLength;
+    }
+    return /*#__PURE__*/React.createElement(StaticCurve, {
+      props: props,
+      points: points,
+      clipPathId: clipPathId,
+      pathRef: pathRef,
+      showLabels: !isAnimating,
+      strokeDasharray: currentStrokeDasharray
+    });
+  });
+}
+function RenderCurve(_ref4) {
+  var {
+    clipPathId,
+    props
+  } = _ref4;
+  var {
+    points,
+    isAnimationActive
+  } = props;
+  var previousPointsRef = useRef(null);
+  var longestAnimatedLengthRef = useRef(0);
+  var pathRef = useRef(null);
+  var prevPoints = previousPointsRef.current;
+  if (isAnimationActive && points && points.length && prevPoints !== points) {
+    return /*#__PURE__*/React.createElement(CurveWithAnimation, {
+      props: props,
+      clipPathId: clipPathId,
+      previousPointsRef: previousPointsRef,
+      longestAnimatedLengthRef: longestAnimatedLengthRef,
+      pathRef: pathRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(StaticCurve, {
+    props: props,
+    points: points,
+    clipPathId: clipPathId,
+    pathRef: pathRef,
+    showLabels: true
+  });
+}
+var errorBarDataPointFormatter = (dataPoint, dataKey) => {
+  return {
+    x: dataPoint.x,
+    y: dataPoint.y,
+    value: dataPoint.value,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    errorVal: getValueByDataKey(dataPoint.payload, dataKey)
+  };
+};
+
+// eslint-disable-next-line react/prefer-stateless-function
+class LineWithState extends Component {
+  render() {
+    var _filterProps;
+    var {
+      hide,
+      dot,
+      points,
+      className,
+      xAxisId,
+      yAxisId,
+      top,
+      left,
+      width,
+      height,
+      id,
+      needClip
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = clsx('recharts-line', className);
+    var clipPathId = id;
+    var {
+      r = 3,
+      strokeWidth = 2
+    } = (_filterProps = filterProps(dot, false)) !== null && _filterProps !== void 0 ? _filterProps : {
+      r: 3,
+      strokeWidth: 2
+    };
+    var clipDot = isClipDot(dot);
+    var dotSize = r * 2 + strokeWidth;
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass
+    }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {
+      clipPathId: clipPathId,
+      xAxisId: xAxisId,
+      yAxisId: yAxisId
+    }), !clipDot && /*#__PURE__*/React.createElement("clipPath", {
+      id: "clipPath-dots-".concat(clipPathId)
+    }, /*#__PURE__*/React.createElement("rect", {
+      x: left - dotSize / 2,
+      y: top - dotSize / 2,
+      width: width + dotSize,
+      height: height + dotSize
+    }))), /*#__PURE__*/React.createElement(RenderCurve, {
+      props: this.props,
+      clipPathId: clipPathId
+    }), /*#__PURE__*/React.createElement(SetErrorBarContext, {
+      xAxisId: xAxisId,
+      yAxisId: yAxisId,
+      data: points,
+      dataPointFormatter: errorBarDataPointFormatter,
+      errorBarOffset: 0
+    }, this.props.children)), /*#__PURE__*/React.createElement(ActivePoints, {
+      activeDot: this.props.activeDot,
+      points: points,
+      mainColor: this.props.stroke,
+      itemDataKey: this.props.dataKey
+    }));
+  }
+}
+var defaultLineProps = {
+  activeDot: true,
+  animateNewValues: true,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  connectNulls: false,
+  dot: true,
+  fill: '#fff',
+  hide: false,
+  isAnimationActive: !Global.isSsr,
+  label: false,
+  legendType: 'line',
+  stroke: '#3182bd',
+  strokeWidth: 1,
+  xAxisId: 0,
+  yAxisId: 0
+};
+function LineImpl(props) {
+  var _resolveDefaultProps = resolveDefaultProps(props, defaultLineProps),
+    {
+      activeDot,
+      animateNewValues,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      connectNulls,
+      dot,
+      hide,
+      isAnimationActive,
+      label,
+      legendType,
+      xAxisId,
+      yAxisId,
+      id
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded3);
+  var {
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  var plotArea = usePlotArea();
+  var layout = useChartLayout();
+  var isPanorama = useIsPanorama();
+  var points = useAppSelector(state => selectLinePoints(state, xAxisId, yAxisId, isPanorama, id));
+  if (layout !== 'horizontal' && layout !== 'vertical' || points == null || plotArea == null) {
+    // Cannot render Line in an unsupported layout
+    return null;
+  }
+  var {
+    height,
+    width,
+    x: left,
+    y: top
+  } = plotArea;
+  return /*#__PURE__*/React.createElement(LineWithState, _extends({}, everythingElse, {
+    id: id,
+    connectNulls: connectNulls,
+    dot: dot,
+    activeDot: activeDot,
+    animateNewValues: animateNewValues,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive,
+    hide: hide,
+    label: label,
+    legendType: legendType,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    points: points,
+    layout: layout,
+    height: height,
+    width: width,
+    left: left,
+    top: top,
+    needClip: needClip
+  }));
+}
+export function computeLinePoints(_ref5) {
+  var {
+    layout,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    dataKey,
+    bandSize,
+    displayedData
+  } = _ref5;
+  return displayedData.map((entry, index) => {
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    var value = getValueByDataKey(entry, dataKey);
+    if (layout === 'horizontal') {
+      var _x = getCateCoordinateOfLine({
+        axis: xAxis,
+        ticks: xAxisTicks,
+        bandSize,
+        entry,
+        index
+      });
+      var _y = isNullish(value) ? null : yAxis.scale(value);
+      return {
+        x: _x,
+        y: _y,
+        value,
+        payload: entry
+      };
+    }
+    var x = isNullish(value) ? null : xAxis.scale(value);
+    var y = getCateCoordinateOfLine({
+      axis: yAxis,
+      ticks: yAxisTicks,
+      bandSize,
+      entry,
+      index
+    });
+    if (x == null || y == null) {
+      return null;
+    }
+    return {
+      x,
+      y,
+      value,
+      payload: entry
+    };
+  }).filter(Boolean);
+}
+export function Line(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultLineProps);
+  var isPanorama = useIsPanorama();
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "line"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromAreaData(props)
+  }), /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: props
+  }), /*#__PURE__*/React.createElement(SetCartesianGraphicalItem, {
+    type: "line",
+    id: id,
+    data: props.data,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: 0,
+    dataKey: props.dataKey,
+    hide: props.hide,
+    isPanorama: isPanorama
+  }), /*#__PURE__*/React.createElement(LineImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+Line.displayName = 'Line';
Index: node_modules/recharts/es6/cartesian/ReferenceArea.js
===================================================================
--- node_modules/recharts/es6/cartesian/ReferenceArea.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/ReferenceArea.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,144 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { Component, useEffect } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { Label } from '../component/Label';
+import { createLabeledScales, rectWithPoints } from '../util/CartesianUtils';
+import { isNumOrStr } from '../util/DataUtils';
+import { Rectangle } from '../shape/Rectangle';
+import { filterProps } from '../util/ReactUtils';
+import { addArea, removeArea } from '../state/referenceElementsSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectAxisScale } from '../state/selectors/axisSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { useClipPathId } from '../container/ClipPathProvider';
+var getRect = (hasX1, hasX2, hasY1, hasY2, xAxisScale, yAxisScale, props) => {
+  var {
+    x1: xValue1,
+    x2: xValue2,
+    y1: yValue1,
+    y2: yValue2
+  } = props;
+  if (xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var scales = createLabeledScales({
+    x: xAxisScale,
+    y: yAxisScale
+  });
+  var p1 = {
+    x: hasX1 ? scales.x.apply(xValue1, {
+      position: 'start'
+    }) : scales.x.rangeMin,
+    y: hasY1 ? scales.y.apply(yValue1, {
+      position: 'start'
+    }) : scales.y.rangeMin
+  };
+  var p2 = {
+    x: hasX2 ? scales.x.apply(xValue2, {
+      position: 'end'
+    }) : scales.x.rangeMax,
+    y: hasY2 ? scales.y.apply(yValue2, {
+      position: 'end'
+    }) : scales.y.rangeMax
+  };
+  if (props.ifOverflow === 'discard' && (!scales.isInRange(p1) || !scales.isInRange(p2))) {
+    return null;
+  }
+  return rectWithPoints(p1, p2);
+};
+var renderRect = (option, props) => {
+  var rect;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    rect = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    rect = option(props);
+  } else {
+    rect = /*#__PURE__*/React.createElement(Rectangle, _extends({}, props, {
+      className: "recharts-reference-area-rect"
+    }));
+  }
+  return rect;
+};
+function ReportReferenceArea(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addArea(props));
+    return () => {
+      dispatch(removeArea(props));
+    };
+  });
+  return null;
+}
+function ReferenceAreaImpl(props) {
+  var {
+    x1,
+    x2,
+    y1,
+    y2,
+    className,
+    shape,
+    xAxisId,
+    yAxisId
+  } = props;
+  var clipPathId = useClipPathId();
+  var isPanorama = useIsPanorama();
+  var xAxisScale = useAppSelector(state => selectAxisScale(state, 'xAxis', xAxisId, isPanorama));
+  var yAxisScale = useAppSelector(state => selectAxisScale(state, 'yAxis', yAxisId, isPanorama));
+  if (xAxisScale == null || !yAxisScale == null) {
+    return null;
+  }
+  var hasX1 = isNumOrStr(x1);
+  var hasX2 = isNumOrStr(x2);
+  var hasY1 = isNumOrStr(y1);
+  var hasY2 = isNumOrStr(y2);
+  if (!hasX1 && !hasX2 && !hasY1 && !hasY2 && !shape) {
+    return null;
+  }
+  var rect = getRect(hasX1, hasX2, hasY1, hasY2, xAxisScale, yAxisScale, props);
+  if (!rect && !shape) {
+    return null;
+  }
+  var isOverflowHidden = props.ifOverflow === 'hidden';
+  var clipPath = isOverflowHidden ? "url(#".concat(clipPathId, ")") : undefined;
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-reference-area', className)
+  }, renderRect(shape, _objectSpread(_objectSpread({
+    clipPath
+  }, filterProps(props, true)), rect)), Label.renderCallByParent(props, rect));
+}
+function ReferenceAreaSettingsDispatcher(props) {
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportReferenceArea, {
+    yAxisId: props.yAxisId,
+    xAxisId: props.xAxisId,
+    ifOverflow: props.ifOverflow,
+    x1: props.x1,
+    x2: props.x2,
+    y1: props.y1,
+    y2: props.y2
+  }), /*#__PURE__*/React.createElement(ReferenceAreaImpl, props));
+}
+
+// eslint-disable-next-line react/prefer-stateless-function
+export class ReferenceArea extends Component {
+  render() {
+    return /*#__PURE__*/React.createElement(ReferenceAreaSettingsDispatcher, this.props);
+  }
+}
+_defineProperty(ReferenceArea, "displayName", 'ReferenceArea');
+_defineProperty(ReferenceArea, "defaultProps", {
+  ifOverflow: 'discard',
+  xAxisId: 0,
+  yAxisId: 0,
+  r: 10,
+  fill: '#ccc',
+  fillOpacity: 0.5,
+  stroke: 'none',
+  strokeWidth: 1
+});
Index: node_modules/recharts/es6/cartesian/ReferenceDot.js
===================================================================
--- node_modules/recharts/es6/cartesian/ReferenceDot.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/ReferenceDot.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,141 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { Component, useEffect } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { Dot } from '../shape/Dot';
+import { Label } from '../component/Label';
+import { isNumOrStr } from '../util/DataUtils';
+import { createLabeledScales } from '../util/CartesianUtils';
+import { filterProps } from '../util/ReactUtils';
+import { addDot, removeDot } from '../state/referenceElementsSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectAxisScale } from '../state/selectors/axisSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { useClipPathId } from '../container/ClipPathProvider';
+var useCoordinate = (x, y, xAxisId, yAxisId, ifOverflow) => {
+  var isX = isNumOrStr(x);
+  var isY = isNumOrStr(y);
+  var isPanorama = useIsPanorama();
+  var xAxisScale = useAppSelector(state => selectAxisScale(state, 'xAxis', xAxisId, isPanorama));
+  var yAxisScale = useAppSelector(state => selectAxisScale(state, 'yAxis', yAxisId, isPanorama));
+  if (!isX || !isY || xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var scales = createLabeledScales({
+    x: xAxisScale,
+    y: yAxisScale
+  });
+  var result = scales.apply({
+    x,
+    y
+  }, {
+    bandAware: true
+  });
+  if (ifOverflow === 'discard' && !scales.isInRange(result)) {
+    return null;
+  }
+  return result;
+};
+function ReportReferenceDot(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addDot(props));
+    return () => {
+      dispatch(removeDot(props));
+    };
+  });
+  return null;
+}
+var renderDot = (option, props) => {
+  var dot;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    dot = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    dot = option(props);
+  } else {
+    dot = /*#__PURE__*/React.createElement(Dot, _extends({}, props, {
+      cx: props.cx,
+      cy: props.cy,
+      className: "recharts-reference-dot-dot"
+    }));
+  }
+  return dot;
+};
+function ReferenceDotImpl(props) {
+  var {
+    x,
+    y,
+    r
+  } = props;
+  var clipPathId = useClipPathId();
+  var coordinate = useCoordinate(x, y, props.xAxisId, props.yAxisId, props.ifOverflow);
+  if (!coordinate) {
+    return null;
+  }
+  var {
+    x: cx,
+    y: cy
+  } = coordinate;
+  var {
+    shape,
+    className,
+    ifOverflow
+  } = props;
+  var clipPath = ifOverflow === 'hidden' ? "url(#".concat(clipPathId, ")") : undefined;
+  var dotProps = _objectSpread(_objectSpread({
+    clipPath
+  }, filterProps(props, true)), {}, {
+    cx,
+    cy
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-reference-dot', className)
+  }, renderDot(shape, dotProps), Label.renderCallByParent(props, {
+    x: cx - r,
+    y: cy - r,
+    width: 2 * r,
+    height: 2 * r
+  }));
+}
+function ReferenceDotSettingsDispatcher(props) {
+  var {
+    x,
+    y,
+    r,
+    ifOverflow,
+    yAxisId,
+    xAxisId
+  } = props;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportReferenceDot, {
+    y: y,
+    x: x,
+    r: r,
+    yAxisId: yAxisId,
+    xAxisId: xAxisId,
+    ifOverflow: ifOverflow
+  }), /*#__PURE__*/React.createElement(ReferenceDotImpl, props));
+}
+
+// eslint-disable-next-line react/prefer-stateless-function
+export class ReferenceDot extends Component {
+  render() {
+    return /*#__PURE__*/React.createElement(ReferenceDotSettingsDispatcher, this.props);
+  }
+}
+_defineProperty(ReferenceDot, "displayName", 'ReferenceDot');
+_defineProperty(ReferenceDot, "defaultProps", {
+  ifOverflow: 'discard',
+  xAxisId: 0,
+  yAxisId: 0,
+  r: 10,
+  fill: '#fff',
+  stroke: '#ccc',
+  fillOpacity: 1,
+  strokeWidth: 1
+});
Index: node_modules/recharts/es6/cartesian/ReferenceLine.js
===================================================================
--- node_modules/recharts/es6/cartesian/ReferenceLine.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/ReferenceLine.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,202 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+/**
+ * @fileOverview Reference Line
+ */
+import * as React from 'react';
+import { Component, useEffect } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { Label } from '../component/Label';
+import { isNan, isNumOrStr } from '../util/DataUtils';
+import { createLabeledScales, rectWithCoords } from '../util/CartesianUtils';
+import { filterProps } from '../util/ReactUtils';
+import { useViewBox } from '../context/chartLayoutContext';
+import { addLine, removeLine } from '../state/referenceElementsSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectAxisScale, selectXAxisSettings, selectYAxisSettings } from '../state/selectors/axisSelectors';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { useClipPathId } from '../container/ClipPathProvider';
+
+/**
+ * This excludes `viewBox` prop from svg for two reasons:
+ * 1. The components wants viewBox of object type, and svg wants string
+ *    - so there's a conflict, and the component will throw if it gets string
+ * 2. Internally the component calls `filterProps` which filters the viewBox away anyway
+ */
+
+var renderLine = (option, props) => {
+  var line;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    line = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    line = option(props);
+  } else {
+    line = /*#__PURE__*/React.createElement("line", _extends({}, props, {
+      className: "recharts-reference-line-line"
+    }));
+  }
+  return line;
+};
+// TODO: ScaleHelper
+export var getEndPoints = (scales, isFixedX, isFixedY, isSegment, viewBox, position, xAxisOrientation, yAxisOrientation, props) => {
+  var {
+    x,
+    y,
+    width,
+    height
+  } = viewBox;
+  if (isFixedY) {
+    var {
+      y: yCoord
+    } = props;
+    var coord = scales.y.apply(yCoord, {
+      position
+    });
+    // don't render the line if the scale can't compute a result that makes sense
+    if (isNan(coord)) return null;
+    if (props.ifOverflow === 'discard' && !scales.y.isInRange(coord)) {
+      return null;
+    }
+    var points = [{
+      x: x + width,
+      y: coord
+    }, {
+      x,
+      y: coord
+    }];
+    return yAxisOrientation === 'left' ? points.reverse() : points;
+  }
+  if (isFixedX) {
+    var {
+      x: xCoord
+    } = props;
+    var _coord = scales.x.apply(xCoord, {
+      position
+    });
+    // don't render the line if the scale can't compute a result that makes sense
+    if (isNan(_coord)) return null;
+    if (props.ifOverflow === 'discard' && !scales.x.isInRange(_coord)) {
+      return null;
+    }
+    var _points = [{
+      x: _coord,
+      y: y + height
+    }, {
+      x: _coord,
+      y
+    }];
+    return xAxisOrientation === 'top' ? _points.reverse() : _points;
+  }
+  if (isSegment) {
+    var {
+      segment
+    } = props;
+    var _points2 = segment.map(p => scales.apply(p, {
+      position
+    }));
+    if (props.ifOverflow === 'discard' && _points2.some(p => !scales.isInRange(p))) {
+      return null;
+    }
+    return _points2;
+  }
+  return null;
+};
+function ReportReferenceLine(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addLine(props));
+    return () => {
+      dispatch(removeLine(props));
+    };
+  });
+  return null;
+}
+function ReferenceLineImpl(props) {
+  var {
+    x: fixedX,
+    y: fixedY,
+    segment,
+    xAxisId,
+    yAxisId,
+    shape,
+    className,
+    ifOverflow
+  } = props;
+  var isPanorama = useIsPanorama();
+  var clipPathId = useClipPathId();
+  var xAxis = useAppSelector(state => selectXAxisSettings(state, xAxisId));
+  var yAxis = useAppSelector(state => selectYAxisSettings(state, yAxisId));
+  var xAxisScale = useAppSelector(state => selectAxisScale(state, 'xAxis', xAxisId, isPanorama));
+  var yAxisScale = useAppSelector(state => selectAxisScale(state, 'yAxis', yAxisId, isPanorama));
+  var viewBox = useViewBox();
+  var isFixedX = isNumOrStr(fixedX);
+  var isFixedY = isNumOrStr(fixedY);
+  if (!clipPathId || !viewBox || xAxis == null || yAxis == null || xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var scales = createLabeledScales({
+    x: xAxisScale,
+    y: yAxisScale
+  });
+  var isSegment = segment && segment.length === 2;
+  var endPoints = getEndPoints(scales, isFixedX, isFixedY, isSegment, viewBox, props.position, xAxis.orientation, yAxis.orientation, props);
+  if (!endPoints) {
+    return null;
+  }
+  var [{
+    x: x1,
+    y: y1
+  }, {
+    x: x2,
+    y: y2
+  }] = endPoints;
+  var clipPath = ifOverflow === 'hidden' ? "url(#".concat(clipPathId, ")") : undefined;
+  var lineProps = _objectSpread(_objectSpread({
+    clipPath
+  }, filterProps(props, true)), {}, {
+    x1,
+    y1,
+    x2,
+    y2
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-reference-line', className)
+  }, renderLine(shape, lineProps), Label.renderCallByParent(props, rectWithCoords({
+    x1,
+    y1,
+    x2,
+    y2
+  })));
+}
+function ReferenceLineSettingsDispatcher(props) {
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportReferenceLine, {
+    yAxisId: props.yAxisId,
+    xAxisId: props.xAxisId,
+    ifOverflow: props.ifOverflow,
+    x: props.x,
+    y: props.y
+  }), /*#__PURE__*/React.createElement(ReferenceLineImpl, props));
+}
+
+// eslint-disable-next-line react/prefer-stateless-function
+export class ReferenceLine extends Component {
+  render() {
+    return /*#__PURE__*/React.createElement(ReferenceLineSettingsDispatcher, this.props);
+  }
+}
+_defineProperty(ReferenceLine, "displayName", 'ReferenceLine');
+_defineProperty(ReferenceLine, "defaultProps", {
+  ifOverflow: 'discard',
+  xAxisId: 0,
+  yAxisId: 0,
+  fill: 'none',
+  stroke: '#ccc',
+  fillOpacity: 1,
+  strokeWidth: 1,
+  position: 'middle'
+});
Index: node_modules/recharts/es6/cartesian/Scatter.js
===================================================================
--- node_modules/recharts/es6/cartesian/Scatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/Scatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,534 @@
+var _excluded = ["onMouseEnter", "onClick", "onMouseLeave"],
+  _excluded2 = ["id"],
+  _excluded3 = ["animationBegin", "animationDuration", "animationEasing", "hide", "isAnimationActive", "legendType", "lineJointType", "lineType", "shape", "xAxisId", "yAxisId", "zAxisId"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { useCallback, useMemo, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { LabelList } from '../component/LabelList';
+import { filterProps, findAllByType } from '../util/ReactUtils';
+import { Global } from '../util/Global';
+import { ZAxis } from './ZAxis';
+import { Curve } from '../shape/Curve';
+import { Cell } from '../component/Cell';
+import { getLinearRegression, interpolateNumber, isNullish } from '../util/DataUtils';
+import { getCateCoordinateOfLine, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { ScatterSymbol } from '../util/ScatterUtils';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { SetErrorBarContext } from '../context/ErrorBarContext';
+import { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';
+import { selectScatterPoints } from '../state/selectors/scatterSelectors';
+import { useAppSelector } from '../state/hooks';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { SetLegendPayload } from '../state/SetLegendPayload';
+import { DATA_ITEM_DATAKEY_ATTRIBUTE_NAME, DATA_ITEM_INDEX_ATTRIBUTE_NAME } from '../util/Constants';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+
+var computeLegendPayloadFromScatterProps = props => {
+  var {
+    dataKey,
+    name,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: fill,
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+function ScatterLine(_ref) {
+  var {
+    points,
+    props
+  } = _ref;
+  var {
+    line,
+    lineType,
+    lineJointType
+  } = props;
+  if (!line) {
+    return null;
+  }
+  var scatterProps = svgPropertiesNoEvents(props);
+  var customLineProps = filterProps(line, false);
+  var linePoints, lineItem;
+  if (lineType === 'joint') {
+    linePoints = points.map(entry => ({
+      x: entry.cx,
+      y: entry.cy
+    }));
+  } else if (lineType === 'fitting') {
+    var {
+      xmin,
+      xmax,
+      a,
+      b
+    } = getLinearRegression(points);
+    var linearExp = x => a * x + b;
+    linePoints = [{
+      x: xmin,
+      y: linearExp(xmin)
+    }, {
+      x: xmax,
+      y: linearExp(xmax)
+    }];
+  }
+  var lineProps = _objectSpread(_objectSpread(_objectSpread({}, scatterProps), {}, {
+    fill: 'none',
+    stroke: scatterProps && scatterProps.fill
+  }, customLineProps), {}, {
+    points: linePoints
+  });
+  if (/*#__PURE__*/React.isValidElement(line)) {
+    lineItem = /*#__PURE__*/React.cloneElement(line, lineProps);
+  } else if (typeof line === 'function') {
+    lineItem = line(lineProps);
+  } else {
+    lineItem = /*#__PURE__*/React.createElement(Curve, _extends({}, lineProps, {
+      type: lineJointType
+    }));
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-scatter-line",
+    key: "recharts-scatter-line"
+  }, lineItem);
+}
+function ScatterSymbols(props) {
+  var {
+    points,
+    showLabels,
+    allOtherScatterProps
+  } = props;
+  var {
+    shape,
+    activeShape,
+    dataKey
+  } = allOtherScatterProps;
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = allOtherScatterProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherScatterProps, _excluded);
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherScatterProps.dataKey);
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherScatterProps.dataKey);
+  if (points == null) {
+    return null;
+  }
+  var {
+      id
+    } = allOtherScatterProps,
+    allOtherPropsWithoutId = _objectWithoutProperties(allOtherScatterProps, _excluded2);
+  var baseProps = svgPropertiesNoEvents(allOtherPropsWithoutId);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ScatterLine, {
+    points: points,
+    props: allOtherPropsWithoutId
+  }), points.map((entry, i) => {
+    var isActive = activeShape && activeIndex === String(i);
+    var option = isActive ? activeShape : shape;
+    var symbolProps = _objectSpread(_objectSpread(_objectSpread({
+      key: "symbol-".concat(i)
+    }, baseProps), entry), {}, {
+      [DATA_ITEM_INDEX_ATTRIBUTE_NAME]: i,
+      [DATA_ITEM_DATAKEY_ATTRIBUTE_NAME]: String(dataKey)
+    });
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: "recharts-scatter-symbol"
+    }, adaptEventsOfChild(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error the types need a bit of attention
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onClick: onClickFromContext(entry, i)
+      // eslint-disable-next-line react/no-array-index-key
+      ,
+      key: "symbol-".concat(entry === null || entry === void 0 ? void 0 : entry.cx, "-").concat(entry === null || entry === void 0 ? void 0 : entry.cy, "-").concat(entry === null || entry === void 0 ? void 0 : entry.size, "-").concat(i)
+    }), /*#__PURE__*/React.createElement(ScatterSymbol, _extends({
+      option: option,
+      isActive: isActive
+    }, symbolProps)));
+  }), showLabels && LabelList.renderCallByParent(allOtherPropsWithoutId, points));
+}
+function SymbolsWithAnimation(_ref2) {
+  var {
+    previousPointsRef,
+    props
+  } = _ref2;
+  var {
+    points,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing
+  } = props;
+  var prevPoints = previousPointsRef.current;
+  var animationId = useAnimationId(props, 'recharts-scatter-');
+  var [isAnimating, setIsAnimating] = useState(false);
+  var handleAnimationEnd = useCallback(() => {
+    // Scatter doesn't have onAnimationEnd prop, and if we want to add it we do it here
+    // if (typeof onAnimationEnd === 'function') {
+    //   onAnimationEnd();
+    // }
+    setIsAnimating(false);
+  }, []);
+  var handleAnimationStart = useCallback(() => {
+    // Scatter doesn't have onAnimationStart prop, and if we want to add it we do it here
+    // if (typeof onAnimationStart === 'function') {
+    //   onAnimationStart();
+    // }
+    setIsAnimating(true);
+  }, []);
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    var stepData = t === 1 ? points : points.map((entry, index) => {
+      var prev = prevPoints && prevPoints[index];
+      if (prev) {
+        var interpolatorCx = interpolateNumber(prev.cx, entry.cx);
+        var interpolatorCy = interpolateNumber(prev.cy, entry.cy);
+        var interpolatorSize = interpolateNumber(prev.size, entry.size);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          cx: interpolatorCx(t),
+          cy: interpolatorCy(t),
+          size: interpolatorSize(t)
+        });
+      }
+      var interpolator = interpolateNumber(0, entry.size);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        size: interpolator(t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = stepData;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(ScatterSymbols, {
+      points: stepData,
+      allOtherScatterProps: props,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderSymbols(props) {
+  var {
+    points,
+    isAnimationActive
+  } = props;
+  var previousPointsRef = useRef(null);
+  var prevPoints = previousPointsRef.current;
+  if (isAnimationActive && points && points.length && (!prevPoints || prevPoints !== points)) {
+    return /*#__PURE__*/React.createElement(SymbolsWithAnimation, {
+      props: props,
+      previousPointsRef: previousPointsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(ScatterSymbols, {
+    points: points,
+    allOtherScatterProps: props,
+    showLabels: true
+  });
+}
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    points,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType
+  } = props;
+  return {
+    dataDefinedOnItem: points === null || points === void 0 ? void 0 : points.map(p => p.tooltipPayload),
+    positions: points === null || points === void 0 ? void 0 : points.map(p => p.tooltipPosition),
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      nameKey: undefined,
+      dataKey,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '' // why doesn't Scatter support unit?
+    }
+  };
+}
+export function computeScatterPoints(_ref3) {
+  var {
+    displayedData,
+    xAxis,
+    yAxis,
+    zAxis,
+    scatterSettings,
+    xAxisTicks,
+    yAxisTicks,
+    cells
+  } = _ref3;
+  var xAxisDataKey = isNullish(xAxis.dataKey) ? scatterSettings.dataKey : xAxis.dataKey;
+  var yAxisDataKey = isNullish(yAxis.dataKey) ? scatterSettings.dataKey : yAxis.dataKey;
+  var zAxisDataKey = zAxis && zAxis.dataKey;
+  var defaultRangeZ = zAxis ? zAxis.range : ZAxis.defaultProps.range;
+  var defaultZ = defaultRangeZ && defaultRangeZ[0];
+  var xBandSize = xAxis.scale.bandwidth ? xAxis.scale.bandwidth() : 0;
+  var yBandSize = yAxis.scale.bandwidth ? yAxis.scale.bandwidth() : 0;
+  return displayedData.map((entry, index) => {
+    var x = getValueByDataKey(entry, xAxisDataKey);
+    var y = getValueByDataKey(entry, yAxisDataKey);
+    var z = !isNullish(zAxisDataKey) && getValueByDataKey(entry, zAxisDataKey) || '-';
+    var tooltipPayload = [{
+      // @ts-expect-error name prop should not have dataKey in it
+      name: isNullish(xAxis.dataKey) ? scatterSettings.name : xAxis.name || xAxis.dataKey,
+      unit: xAxis.unit || '',
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      value: x,
+      payload: entry,
+      dataKey: xAxisDataKey,
+      type: scatterSettings.tooltipType
+    }, {
+      // @ts-expect-error name prop should not have dataKey in it
+      name: isNullish(yAxis.dataKey) ? scatterSettings.name : yAxis.name || yAxis.dataKey,
+      unit: yAxis.unit || '',
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      value: y,
+      payload: entry,
+      dataKey: yAxisDataKey,
+      type: scatterSettings.tooltipType
+    }];
+    if (z !== '-') {
+      tooltipPayload.push({
+        // @ts-expect-error name prop should not have dataKey in it
+        name: zAxis.name || zAxis.dataKey,
+        unit: zAxis.unit || '',
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        value: z,
+        payload: entry,
+        dataKey: zAxisDataKey,
+        type: scatterSettings.tooltipType
+      });
+    }
+    var cx = getCateCoordinateOfLine({
+      axis: xAxis,
+      ticks: xAxisTicks,
+      bandSize: xBandSize,
+      entry,
+      index,
+      dataKey: xAxisDataKey
+    });
+    var cy = getCateCoordinateOfLine({
+      axis: yAxis,
+      ticks: yAxisTicks,
+      bandSize: yBandSize,
+      entry,
+      index,
+      dataKey: yAxisDataKey
+    });
+    var size = z !== '-' ? zAxis.scale(z) : defaultZ;
+    var radius = Math.sqrt(Math.max(size, 0) / Math.PI);
+    return _objectSpread(_objectSpread({}, entry), {}, {
+      cx,
+      cy,
+      x: cx - radius,
+      y: cy - radius,
+      width: 2 * radius,
+      height: 2 * radius,
+      size,
+      node: {
+        x,
+        y,
+        z
+      },
+      tooltipPayload,
+      tooltipPosition: {
+        x: cx,
+        y: cy
+      },
+      payload: entry
+    }, cells && cells[index] && cells[index].props);
+  });
+}
+var errorBarDataPointFormatter = (dataPoint, dataKey, direction) => {
+  return {
+    x: dataPoint.cx,
+    y: dataPoint.cy,
+    value: direction === 'x' ? +dataPoint.node.x : +dataPoint.node.y,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    errorVal: getValueByDataKey(dataPoint, dataKey)
+  };
+};
+function ScatterWithId(props) {
+  var {
+    hide,
+    points,
+    className,
+    needClip,
+    xAxisId,
+    yAxisId,
+    id,
+    children
+  } = props;
+  if (hide) {
+    return null;
+  }
+  var layerClass = clsx('recharts-scatter', className);
+  var clipPathId = id;
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: layerClass,
+    clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : null,
+    id: id
+  }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(GraphicalItemClipPath, {
+    clipPathId: clipPathId,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId
+  })), /*#__PURE__*/React.createElement(SetErrorBarContext, {
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    data: points,
+    dataPointFormatter: errorBarDataPointFormatter,
+    errorBarOffset: 0
+  }, children), /*#__PURE__*/React.createElement(Layer, {
+    key: "recharts-scatter-symbols"
+  }, /*#__PURE__*/React.createElement(RenderSymbols, props)));
+}
+var defaultScatterProps = {
+  xAxisId: 0,
+  yAxisId: 0,
+  zAxisId: 0,
+  legendType: 'circle',
+  lineType: 'joint',
+  lineJointType: 'linear',
+  data: [],
+  shape: 'circle',
+  hide: false,
+  isAnimationActive: !Global.isSsr,
+  animationBegin: 0,
+  animationDuration: 400,
+  animationEasing: 'linear'
+};
+function ScatterImpl(props) {
+  var _resolveDefaultProps = resolveDefaultProps(props, defaultScatterProps),
+    {
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      hide,
+      isAnimationActive,
+      legendType,
+      lineJointType,
+      lineType,
+      shape,
+      xAxisId,
+      yAxisId,
+      zAxisId
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded3);
+  var {
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  var cells = useMemo(() => findAllByType(props.children, Cell), [props.children]);
+  var isPanorama = useIsPanorama();
+  var points = useAppSelector(state => {
+    return selectScatterPoints(state, xAxisId, yAxisId, zAxisId, props.id, cells, isPanorama);
+  });
+  if (needClip == null) {
+    return null;
+  }
+  /*
+   * Do not check if points is null here!
+   * It is important that the animation component receives `null` as points
+   * so that it can reset its internal state and start animating to new positions.
+   */
+  // if (points == null)
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: _objectSpread(_objectSpread({}, props), {}, {
+      points
+    })
+  }), /*#__PURE__*/React.createElement(ScatterWithId, _extends({}, everythingElse, {
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    zAxisId: zAxisId,
+    lineType: lineType,
+    lineJointType: lineJointType,
+    legendType: legendType,
+    shape: shape,
+    hide: hide,
+    isAnimationActive: isAnimationActive,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    points: points,
+    needClip: needClip
+  })));
+}
+export function Scatter(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultScatterProps);
+  var isPanorama = useIsPanorama();
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: props.id,
+    type: "scatter"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromScatterProps(props)
+  }), /*#__PURE__*/React.createElement(SetCartesianGraphicalItem, {
+    type: "scatter",
+    id: id,
+    data: props.data,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: props.zAxisId,
+    dataKey: props.dataKey,
+    hide: props.hide,
+    name: props.name,
+    tooltipType: props.tooltipType,
+    isPanorama: isPanorama
+  }), /*#__PURE__*/React.createElement(ScatterImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+Scatter.displayName = 'Scatter';
Index: node_modules/recharts/es6/cartesian/XAxis.js
===================================================================
--- node_modules/recharts/es6/cartesian/XAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/XAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,125 @@
+var _excluded = ["children"],
+  _excluded2 = ["dangerouslySetInnerHTML", "ticks"];
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview X Axis
+ */
+import * as React from 'react';
+import { Component, useEffect, useMemo } from 'react';
+import { clsx } from 'clsx';
+import { CartesianAxis } from './CartesianAxis';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { addXAxis, removeXAxis } from '../state/cartesianAxisSlice';
+import { implicitXAxis, selectAxisScale, selectTicksOfAxis, selectXAxisPosition, selectXAxisSettings, selectXAxisSize } from '../state/selectors/axisSelectors';
+import { selectAxisViewBox } from '../state/selectors/selectChartOffsetInternal';
+import { useIsPanorama } from '../context/PanoramaContext';
+function SetXAxisSettings(props) {
+  var dispatch = useAppDispatch();
+  var settings = useMemo(() => {
+    var {
+        children
+      } = props,
+      rest = _objectWithoutProperties(props, _excluded);
+    return rest;
+  }, [props]);
+  var synchronizedSettings = useAppSelector(state => selectXAxisSettings(state, settings.id));
+  var settingsAreSynchronized = settings === synchronizedSettings;
+  useEffect(() => {
+    dispatch(addXAxis(settings));
+    return () => {
+      dispatch(removeXAxis(settings));
+    };
+  }, [settings, dispatch]);
+  if (settingsAreSynchronized) {
+    return props.children;
+  }
+  return null;
+}
+var XAxisImpl = props => {
+  var {
+    xAxisId,
+    className
+  } = props;
+  var viewBox = useAppSelector(selectAxisViewBox);
+  var isPanorama = useIsPanorama();
+  var axisType = 'xAxis';
+  var scale = useAppSelector(state => selectAxisScale(state, axisType, xAxisId, isPanorama));
+  var cartesianTickItems = useAppSelector(state => selectTicksOfAxis(state, axisType, xAxisId, isPanorama));
+  var axisSize = useAppSelector(state => selectXAxisSize(state, xAxisId));
+  var position = useAppSelector(state => selectXAxisPosition(state, xAxisId));
+  if (axisSize == null || position == null) {
+    return null;
+  }
+  var {
+      dangerouslySetInnerHTML,
+      ticks
+    } = props,
+    allOtherProps = _objectWithoutProperties(props, _excluded2);
+  return /*#__PURE__*/React.createElement(CartesianAxis, _extends({}, allOtherProps, {
+    scale: scale,
+    x: position.x,
+    y: position.y,
+    width: axisSize.width,
+    height: axisSize.height,
+    className: clsx("recharts-".concat(axisType, " ").concat(axisType), className),
+    viewBox: viewBox,
+    ticks: cartesianTickItems
+  }));
+};
+var XAxisSettingsDispatcher = props => {
+  var _props$interval, _props$includeHidden, _props$angle, _props$minTickGap, _props$tick;
+  return /*#__PURE__*/React.createElement(SetXAxisSettings, {
+    interval: (_props$interval = props.interval) !== null && _props$interval !== void 0 ? _props$interval : 'preserveEnd',
+    id: props.xAxisId,
+    scale: props.scale,
+    type: props.type,
+    padding: props.padding,
+    allowDataOverflow: props.allowDataOverflow,
+    domain: props.domain,
+    dataKey: props.dataKey,
+    allowDuplicatedCategory: props.allowDuplicatedCategory,
+    allowDecimals: props.allowDecimals,
+    tickCount: props.tickCount,
+    includeHidden: (_props$includeHidden = props.includeHidden) !== null && _props$includeHidden !== void 0 ? _props$includeHidden : false,
+    reversed: props.reversed,
+    ticks: props.ticks,
+    height: props.height,
+    orientation: props.orientation,
+    mirror: props.mirror,
+    hide: props.hide,
+    unit: props.unit,
+    name: props.name,
+    angle: (_props$angle = props.angle) !== null && _props$angle !== void 0 ? _props$angle : 0,
+    minTickGap: (_props$minTickGap = props.minTickGap) !== null && _props$minTickGap !== void 0 ? _props$minTickGap : 5,
+    tick: (_props$tick = props.tick) !== null && _props$tick !== void 0 ? _props$tick : true,
+    tickFormatter: props.tickFormatter
+  }, /*#__PURE__*/React.createElement(XAxisImpl, props));
+};
+
+// eslint-disable-next-line react/prefer-stateless-function
+export class XAxis extends Component {
+  render() {
+    return /*#__PURE__*/React.createElement(XAxisSettingsDispatcher, this.props);
+  }
+}
+_defineProperty(XAxis, "displayName", 'XAxis');
+_defineProperty(XAxis, "defaultProps", {
+  allowDataOverflow: implicitXAxis.allowDataOverflow,
+  allowDecimals: implicitXAxis.allowDecimals,
+  allowDuplicatedCategory: implicitXAxis.allowDuplicatedCategory,
+  height: implicitXAxis.height,
+  hide: false,
+  mirror: implicitXAxis.mirror,
+  orientation: implicitXAxis.orientation,
+  padding: implicitXAxis.padding,
+  reversed: implicitXAxis.reversed,
+  scale: implicitXAxis.scale,
+  tickCount: implicitXAxis.tickCount,
+  type: implicitXAxis.type,
+  xAxisId: 0
+});
Index: node_modules/recharts/es6/cartesian/YAxis.js
===================================================================
--- node_modules/recharts/es6/cartesian/YAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/YAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,148 @@
+var _excluded = ["dangerouslySetInnerHTML", "ticks"];
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { Component, useEffect, useRef, useLayoutEffect, isValidElement } from 'react';
+import { clsx } from 'clsx';
+import { CartesianAxis } from './CartesianAxis';
+import { addYAxis, removeYAxis, updateYAxisWidth } from '../state/cartesianAxisSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { implicitYAxis, selectAxisScale, selectTicksOfAxis, selectYAxisPosition, selectYAxisSize } from '../state/selectors/axisSelectors';
+import { selectAxisViewBox } from '../state/selectors/selectChartOffsetInternal';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { getCalculatedYAxisWidth } from '../util/YAxisUtils';
+import { isLabelContentAFunction } from '../component/Label';
+function SetYAxisSettings(settings) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addYAxis(settings));
+    return () => {
+      dispatch(removeYAxis(settings));
+    };
+  }, [settings, dispatch]);
+  return null;
+}
+var YAxisImpl = props => {
+  var _cartesianAxisRef$cur;
+  var {
+    yAxisId,
+    className,
+    width,
+    label
+  } = props;
+  var cartesianAxisRef = useRef(null);
+  var labelRef = useRef(null);
+  var viewBox = useAppSelector(selectAxisViewBox);
+  var isPanorama = useIsPanorama();
+  var dispatch = useAppDispatch();
+  var axisType = 'yAxis';
+  var scale = useAppSelector(state => selectAxisScale(state, axisType, yAxisId, isPanorama));
+  var axisSize = useAppSelector(state => selectYAxisSize(state, yAxisId));
+  var position = useAppSelector(state => selectYAxisPosition(state, yAxisId));
+  var cartesianTickItems = useAppSelector(state => selectTicksOfAxis(state, axisType, yAxisId, isPanorama));
+  useLayoutEffect(() => {
+    var _axisComponent$tickRe;
+    // No dynamic width calculation is done when width !== 'auto'
+    // or when a function/react element is used for label
+    if (width !== 'auto' || !axisSize || isLabelContentAFunction(label) || /*#__PURE__*/isValidElement(label)) return;
+    var axisComponent = cartesianAxisRef.current;
+    var tickNodes = axisComponent === null || axisComponent === void 0 || (_axisComponent$tickRe = axisComponent.tickRefs) === null || _axisComponent$tickRe === void 0 ? void 0 : _axisComponent$tickRe.current;
+    var {
+      tickSize,
+      tickMargin
+    } = axisComponent.props;
+
+    // get calculated width based on the label width, ticks etc
+    var updatedYAxisWidth = getCalculatedYAxisWidth({
+      ticks: tickNodes,
+      label: labelRef.current,
+      labelGapWithTick: 5,
+      tickSize,
+      tickMargin
+    });
+
+    // if the width has changed, dispatch an action to update the width
+    if (Math.round(axisSize.width) !== Math.round(updatedYAxisWidth)) dispatch(updateYAxisWidth({
+      id: yAxisId,
+      width: updatedYAxisWidth
+    }));
+  }, [cartesianAxisRef, cartesianAxisRef === null || cartesianAxisRef === void 0 || (_cartesianAxisRef$cur = cartesianAxisRef.current) === null || _cartesianAxisRef$cur === void 0 || (_cartesianAxisRef$cur = _cartesianAxisRef$cur.tickRefs) === null || _cartesianAxisRef$cur === void 0 ? void 0 : _cartesianAxisRef$cur.current, // required to do re-calculation when using brush
+  axisSize === null || axisSize === void 0 ? void 0 : axisSize.width, axisSize, dispatch, label, yAxisId, width]);
+  if (axisSize == null || position == null) {
+    return null;
+  }
+  var {
+      dangerouslySetInnerHTML,
+      ticks
+    } = props,
+    allOtherProps = _objectWithoutProperties(props, _excluded);
+  return /*#__PURE__*/React.createElement(CartesianAxis, _extends({}, allOtherProps, {
+    ref: cartesianAxisRef,
+    labelRef: labelRef,
+    scale: scale,
+    x: position.x,
+    y: position.y,
+    width: axisSize.width,
+    height: axisSize.height,
+    className: clsx("recharts-".concat(axisType, " ").concat(axisType), className),
+    viewBox: viewBox,
+    ticks: cartesianTickItems
+  }));
+};
+var YAxisSettingsDispatcher = props => {
+  var _props$interval, _props$includeHidden, _props$angle, _props$minTickGap, _props$tick;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetYAxisSettings, {
+    interval: (_props$interval = props.interval) !== null && _props$interval !== void 0 ? _props$interval : 'preserveEnd',
+    id: props.yAxisId,
+    scale: props.scale,
+    type: props.type,
+    domain: props.domain,
+    allowDataOverflow: props.allowDataOverflow,
+    dataKey: props.dataKey,
+    allowDuplicatedCategory: props.allowDuplicatedCategory,
+    allowDecimals: props.allowDecimals,
+    tickCount: props.tickCount,
+    padding: props.padding,
+    includeHidden: (_props$includeHidden = props.includeHidden) !== null && _props$includeHidden !== void 0 ? _props$includeHidden : false,
+    reversed: props.reversed,
+    ticks: props.ticks,
+    width: props.width,
+    orientation: props.orientation,
+    mirror: props.mirror,
+    hide: props.hide,
+    unit: props.unit,
+    name: props.name,
+    angle: (_props$angle = props.angle) !== null && _props$angle !== void 0 ? _props$angle : 0,
+    minTickGap: (_props$minTickGap = props.minTickGap) !== null && _props$minTickGap !== void 0 ? _props$minTickGap : 5,
+    tick: (_props$tick = props.tick) !== null && _props$tick !== void 0 ? _props$tick : true,
+    tickFormatter: props.tickFormatter
+  }), /*#__PURE__*/React.createElement(YAxisImpl, props));
+};
+export var YAxisDefaultProps = {
+  allowDataOverflow: implicitYAxis.allowDataOverflow,
+  allowDecimals: implicitYAxis.allowDecimals,
+  allowDuplicatedCategory: implicitYAxis.allowDuplicatedCategory,
+  hide: false,
+  mirror: implicitYAxis.mirror,
+  orientation: implicitYAxis.orientation,
+  padding: implicitYAxis.padding,
+  reversed: implicitYAxis.reversed,
+  scale: implicitYAxis.scale,
+  tickCount: implicitYAxis.tickCount,
+  type: implicitYAxis.type,
+  width: implicitYAxis.width,
+  yAxisId: 0
+};
+
+// eslint-disable-next-line react/prefer-stateless-function
+export class YAxis extends Component {
+  render() {
+    return /*#__PURE__*/React.createElement(YAxisSettingsDispatcher, this.props);
+  }
+}
+_defineProperty(YAxis, "displayName", 'YAxis');
+_defineProperty(YAxis, "defaultProps", YAxisDefaultProps);
Index: node_modules/recharts/es6/cartesian/ZAxis.js
===================================================================
--- node_modules/recharts/es6/cartesian/ZAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/ZAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { Component, useEffect } from 'react';
+import { addZAxis, removeZAxis } from '../state/cartesianAxisSlice';
+import { useAppDispatch } from '../state/hooks';
+import { implicitZAxis } from '../state/selectors/axisSelectors';
+function SetZAxisSettings(settings) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addZAxis(settings));
+    return () => {
+      dispatch(removeZAxis(settings));
+    };
+  }, [settings, dispatch]);
+  return null;
+}
+// eslint-disable-next-line react/prefer-stateless-function
+export class ZAxis extends Component {
+  render() {
+    return /*#__PURE__*/React.createElement(SetZAxisSettings, {
+      domain: this.props.domain,
+      id: this.props.zAxisId,
+      dataKey: this.props.dataKey,
+      name: this.props.name,
+      unit: this.props.unit,
+      range: this.props.range,
+      scale: this.props.scale,
+      type: this.props.type,
+      allowDuplicatedCategory: implicitZAxis.allowDuplicatedCategory,
+      allowDataOverflow: implicitZAxis.allowDataOverflow,
+      reversed: implicitZAxis.reversed,
+      includeHidden: implicitZAxis.includeHidden
+    });
+  }
+}
+_defineProperty(ZAxis, "displayName", 'ZAxis');
+_defineProperty(ZAxis, "defaultProps", {
+  zAxisId: 0,
+  range: implicitZAxis.range,
+  scale: implicitZAxis.scale,
+  type: implicitZAxis.type
+});
Index: node_modules/recharts/es6/cartesian/getEquidistantTicks.js
===================================================================
--- node_modules/recharts/es6/cartesian/getEquidistantTicks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/getEquidistantTicks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+import { isVisible } from '../util/TickUtils';
+import { getEveryNthWithCondition } from '../util/getEveryNthWithCondition';
+export function getEquidistantTicks(sign, boundaries, getTickSize, ticks, minTickGap) {
+  // If the ticks are readonly, then the slice might not be necessary
+  var result = (ticks || []).slice();
+  var {
+    start: initialStart,
+    end
+  } = boundaries;
+  var index = 0;
+  // Premature optimisation idea 1: Estimate a lower bound, and start from there.
+  // For now, start from every tick
+  var stepsize = 1;
+  var start = initialStart;
+  var _loop = function _loop() {
+      // Given stepsize, evaluate whether every stepsize-th tick can be shown.
+      // If it can not, then increase the stepsize by 1, and try again.
+
+      var entry = ticks === null || ticks === void 0 ? void 0 : ticks[index];
+
+      // Break condition - If we have evaluated all the ticks, then we are done.
+      if (entry === undefined) {
+        return {
+          v: getEveryNthWithCondition(ticks, stepsize)
+        };
+      }
+
+      // Check if the element collides with the next element
+      var i = index;
+      var size;
+      var getSize = () => {
+        if (size === undefined) {
+          size = getTickSize(entry, i);
+        }
+        return size;
+      };
+      var tickCoord = entry.coordinate;
+      // We will always show the first tick.
+      var isShow = index === 0 || isVisible(sign, tickCoord, getSize, start, end);
+      if (!isShow) {
+        // Start all over with a larger stepsize
+        index = 0;
+        start = initialStart;
+        stepsize += 1;
+      }
+      if (isShow) {
+        // If it can be shown, update the start
+        start = tickCoord + sign * (getSize() / 2 + minTickGap);
+        index += stepsize;
+      }
+    },
+    _ret;
+  while (stepsize <= result.length) {
+    _ret = _loop();
+    if (_ret) return _ret.v;
+  }
+  return [];
+}
Index: node_modules/recharts/es6/cartesian/getTicks.js
===================================================================
--- node_modules/recharts/es6/cartesian/getTicks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/cartesian/getTicks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,159 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { mathSign, isNumber } from '../util/DataUtils';
+import { getStringSize } from '../util/DOMUtils';
+import { Global } from '../util/Global';
+import { isVisible, getTickBoundaries, getNumberIntervalTicks, getAngledTickWidth } from '../util/TickUtils';
+import { getEquidistantTicks } from './getEquidistantTicks';
+function getTicksEnd(sign, boundaries, getTickSize, ticks, minTickGap) {
+  var result = (ticks || []).slice();
+  var len = result.length;
+  var {
+    start
+  } = boundaries;
+  var {
+    end
+  } = boundaries;
+  var _loop = function _loop(i) {
+    var entry = result[i];
+    var size;
+    var getSize = () => {
+      if (size === undefined) {
+        size = getTickSize(entry, i);
+      }
+      return size;
+    };
+    if (i === len - 1) {
+      var gap = sign * (entry.coordinate + sign * getSize() / 2 - end);
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: gap > 0 ? entry.coordinate - gap * sign : entry.coordinate
+      });
+    } else {
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: entry.coordinate
+      });
+    }
+    var isShow = isVisible(sign, entry.tickCoord, getSize, start, end);
+    if (isShow) {
+      end = entry.tickCoord - sign * (getSize() / 2 + minTickGap);
+      result[i] = _objectSpread(_objectSpread({}, entry), {}, {
+        isShow: true
+      });
+    }
+  };
+  for (var i = len - 1; i >= 0; i--) {
+    _loop(i);
+  }
+  return result;
+}
+function getTicksStart(sign, boundaries, getTickSize, ticks, minTickGap, preserveEnd) {
+  // This method is mutating the array so clone is indeed necessary here
+  var result = (ticks || []).slice();
+  var len = result.length;
+  var {
+    start,
+    end
+  } = boundaries;
+  if (preserveEnd) {
+    // Try to guarantee the tail to be displayed
+    var tail = ticks[len - 1];
+    var tailSize = getTickSize(tail, len - 1);
+    var tailGap = sign * (tail.coordinate + sign * tailSize / 2 - end);
+    result[len - 1] = tail = _objectSpread(_objectSpread({}, tail), {}, {
+      tickCoord: tailGap > 0 ? tail.coordinate - tailGap * sign : tail.coordinate
+    });
+    var isTailShow = isVisible(sign, tail.tickCoord, () => tailSize, start, end);
+    if (isTailShow) {
+      end = tail.tickCoord - sign * (tailSize / 2 + minTickGap);
+      result[len - 1] = _objectSpread(_objectSpread({}, tail), {}, {
+        isShow: true
+      });
+    }
+  }
+  var count = preserveEnd ? len - 1 : len;
+  var _loop2 = function _loop2(i) {
+    var entry = result[i];
+    var size;
+    var getSize = () => {
+      if (size === undefined) {
+        size = getTickSize(entry, i);
+      }
+      return size;
+    };
+    if (i === 0) {
+      var gap = sign * (entry.coordinate - sign * getSize() / 2 - start);
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: gap < 0 ? entry.coordinate - gap * sign : entry.coordinate
+      });
+    } else {
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: entry.coordinate
+      });
+    }
+    var isShow = isVisible(sign, entry.tickCoord, getSize, start, end);
+    if (isShow) {
+      start = entry.tickCoord + sign * (getSize() / 2 + minTickGap);
+      result[i] = _objectSpread(_objectSpread({}, entry), {}, {
+        isShow: true
+      });
+    }
+  };
+  for (var i = 0; i < count; i++) {
+    _loop2(i);
+  }
+  return result;
+}
+export function getTicks(props, fontSize, letterSpacing) {
+  var {
+    tick,
+    ticks,
+    viewBox,
+    minTickGap,
+    orientation,
+    interval,
+    tickFormatter,
+    unit,
+    angle
+  } = props;
+  if (!ticks || !ticks.length || !tick) {
+    return [];
+  }
+  if (isNumber(interval) || Global.isSsr) {
+    var _getNumberIntervalTic;
+    return (_getNumberIntervalTic = getNumberIntervalTicks(ticks, isNumber(interval) ? interval : 0)) !== null && _getNumberIntervalTic !== void 0 ? _getNumberIntervalTic : [];
+  }
+  var candidates = [];
+  var sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height';
+  var unitSize = unit && sizeKey === 'width' ? getStringSize(unit, {
+    fontSize,
+    letterSpacing
+  }) : {
+    width: 0,
+    height: 0
+  };
+  var getTickSize = (content, index) => {
+    var value = typeof tickFormatter === 'function' ? tickFormatter(content.value, index) : content.value;
+    // Recharts only supports angles when sizeKey === 'width'
+    return sizeKey === 'width' ? getAngledTickWidth(getStringSize(value, {
+      fontSize,
+      letterSpacing
+    }), unitSize, angle) : getStringSize(value, {
+      fontSize,
+      letterSpacing
+    })[sizeKey];
+  };
+  var sign = ticks.length >= 2 ? mathSign(ticks[1].coordinate - ticks[0].coordinate) : 1;
+  var boundaries = getTickBoundaries(viewBox, sign, sizeKey);
+  if (interval === 'equidistantPreserveStart') {
+    return getEquidistantTicks(sign, boundaries, getTickSize, ticks, minTickGap);
+  }
+  if (interval === 'preserveStart' || interval === 'preserveStartEnd') {
+    candidates = getTicksStart(sign, boundaries, getTickSize, ticks, minTickGap, interval === 'preserveStartEnd');
+  } else {
+    candidates = getTicksEnd(sign, boundaries, getTickSize, ticks, minTickGap);
+  }
+  return candidates.filter(entry => entry.isShow);
+}
Index: node_modules/recharts/es6/chart/AreaChart.js
===================================================================
--- node_modules/recharts/es6/chart/AreaChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/AreaChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['axis'];
+export var AreaChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "AreaChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/BarChart.js
===================================================================
--- node_modules/recharts/es6/chart/BarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/BarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['axis', 'item'];
+export var BarChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "BarChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/CartesianChart.js
===================================================================
--- node_modules/recharts/es6/chart/CartesianChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/CartesianChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,89 @@
+var _excluded = ["width", "height"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { ChartDataContextProvider } from '../context/chartDataContext';
+import { ReportMainChartProps } from '../state/ReportMainChartProps';
+import { ReportChartProps } from '../state/ReportChartProps';
+import { CategoricalChart } from './CategoricalChart';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+var defaultMargin = {
+  top: 5,
+  right: 5,
+  bottom: 5,
+  left: 5
+};
+var defaultProps = {
+  accessibilityLayer: true,
+  layout: 'horizontal',
+  stackOffset: 'none',
+  barCategoryGap: '10%',
+  barGap: 4,
+  margin: defaultMargin,
+  reverseStackOrder: false,
+  syncMethod: 'index'
+};
+
+/**
+ * These are one-time, immutable options that decide the chart's behavior.
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
+ * but usually we would expect that they use one of the convenience components like BarChart, LineChart, etc.
+ */
+
+export var CartesianChart = /*#__PURE__*/forwardRef(function CartesianChart(props, ref) {
+  var _categoricalChartProp;
+  var rootChartProps = resolveDefaultProps(props.categoricalChartProps, defaultProps);
+  var {
+      width,
+      height
+    } = rootChartProps,
+    otherCategoricalProps = _objectWithoutProperties(rootChartProps, _excluded);
+  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {
+    return null;
+  }
+  var {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher,
+    categoricalChartProps
+  } = props;
+  var options = {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher,
+    eventEmitter: undefined
+  };
+  return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: (_categoricalChartProp = categoricalChartProps.id) !== null && _categoricalChartProp !== void 0 ? _categoricalChartProp : chartName
+  }, /*#__PURE__*/React.createElement(ChartDataContextProvider, {
+    chartData: categoricalChartProps.data
+  }), /*#__PURE__*/React.createElement(ReportMainChartProps, {
+    width: width,
+    height: height,
+    layout: rootChartProps.layout,
+    margin: rootChartProps.margin
+  }), /*#__PURE__*/React.createElement(ReportChartProps, {
+    accessibilityLayer: rootChartProps.accessibilityLayer,
+    barCategoryGap: rootChartProps.barCategoryGap,
+    maxBarSize: rootChartProps.maxBarSize,
+    stackOffset: rootChartProps.stackOffset,
+    barGap: rootChartProps.barGap,
+    barSize: rootChartProps.barSize,
+    syncId: rootChartProps.syncId,
+    syncMethod: rootChartProps.syncMethod,
+    className: rootChartProps.className
+  }), /*#__PURE__*/React.createElement(CategoricalChart, _extends({}, otherCategoricalProps, {
+    width: width,
+    height: height,
+    ref: ref
+  })));
+});
Index: node_modules/recharts/es6/chart/CategoricalChart.js
===================================================================
--- node_modules/recharts/es6/chart/CategoricalChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/CategoricalChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+var _excluded = ["children", "className", "width", "height", "style", "compact", "title", "desc"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { RootSurface } from '../container/RootSurface';
+import { RechartsWrapper } from './RechartsWrapper';
+import { ClipPathProvider } from '../container/ClipPathProvider';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+export var CategoricalChart = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+      children,
+      className,
+      width,
+      height,
+      style,
+      compact,
+      title,
+      desc
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var attrs = svgPropertiesNoEvents(others);
+
+  // The "compact" mode is used as the panorama within Brush
+  if (compact) {
+    return /*#__PURE__*/React.createElement(RootSurface, {
+      otherAttributes: attrs,
+      title: title,
+      desc: desc
+    }, children);
+  }
+  return /*#__PURE__*/React.createElement(RechartsWrapper, {
+    className: className,
+    style: style,
+    width: width,
+    height: height,
+    onClick: props.onClick,
+    onMouseLeave: props.onMouseLeave,
+    onMouseEnter: props.onMouseEnter,
+    onMouseMove: props.onMouseMove,
+    onMouseDown: props.onMouseDown,
+    onMouseUp: props.onMouseUp,
+    onContextMenu: props.onContextMenu,
+    onDoubleClick: props.onDoubleClick,
+    onTouchStart: props.onTouchStart,
+    onTouchMove: props.onTouchMove,
+    onTouchEnd: props.onTouchEnd
+  }, /*#__PURE__*/React.createElement(RootSurface, {
+    otherAttributes: attrs,
+    title: title,
+    desc: desc,
+    ref: ref
+  }, /*#__PURE__*/React.createElement(ClipPathProvider, null, children)));
+});
Index: node_modules/recharts/es6/chart/ComposedChart.js
===================================================================
--- node_modules/recharts/es6/chart/ComposedChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/ComposedChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['axis'];
+export var ComposedChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "ComposedChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/FunnelChart.js
===================================================================
--- node_modules/recharts/es6/chart/FunnelChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/FunnelChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['item'];
+export var FunnelChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "FunnelChart",
+    defaultTooltipEventType: "item",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/LineChart.js
===================================================================
--- node_modules/recharts/es6/chart/LineChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/LineChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['axis'];
+export var LineChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "LineChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/PieChart.js
===================================================================
--- node_modules/recharts/es6/chart/PieChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/PieChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { PolarChart } from './PolarChart';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+var allowedTooltipTypes = ['item'];
+var defaultProps = {
+  layout: 'centric',
+  startAngle: 0,
+  endAngle: 360,
+  cx: '50%',
+  cy: '50%',
+  innerRadius: 0,
+  outerRadius: '80%'
+};
+export var PieChart = /*#__PURE__*/forwardRef((props, ref) => {
+  var propsWithDefaults = resolveDefaultProps(props, defaultProps);
+  return /*#__PURE__*/React.createElement(PolarChart, {
+    chartName: "PieChart",
+    defaultTooltipEventType: "item",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: propsWithDefaults,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/PolarChart.js
===================================================================
--- node_modules/recharts/es6/chart/PolarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/PolarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,111 @@
+var _excluded = ["width", "height", "layout"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import { forwardRef } from 'react';
+import * as React from 'react';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { ChartDataContextProvider } from '../context/chartDataContext';
+import { ReportMainChartProps } from '../state/ReportMainChartProps';
+import { ReportChartProps } from '../state/ReportChartProps';
+import { ReportPolarOptions } from '../state/ReportPolarOptions';
+import { CategoricalChart } from './CategoricalChart';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+var defaultMargin = {
+  top: 5,
+  right: 5,
+  bottom: 5,
+  left: 5
+};
+
+/**
+ * These default props are the same for all PolarChart components.
+ */
+var defaultProps = {
+  accessibilityLayer: true,
+  stackOffset: 'none',
+  barCategoryGap: '10%',
+  barGap: 4,
+  margin: defaultMargin,
+  reverseStackOrder: false,
+  syncMethod: 'index',
+  layout: 'radial'
+};
+
+/**
+ * These props are required for the PolarChart to function correctly.
+ * Users usually would not need to specify these explicitly,
+ * because the convenience components like PieChart, RadarChart, etc.
+ * will provide these defaults.
+ * We can't have the defaults in this file because each of those convenience components
+ * have their own opinions about what they should be.
+ */
+
+/**
+ * These are one-time, immutable options that decide the chart's behavior.
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
+ * but usually we would expect that they use one of the convenience components like PieChart, RadarChart, etc.
+ */
+
+export var PolarChart = /*#__PURE__*/forwardRef(function PolarChart(props, ref) {
+  var _polarChartProps$id;
+  var polarChartProps = resolveDefaultProps(props.categoricalChartProps, defaultProps);
+  var {
+      width,
+      height,
+      layout
+    } = polarChartProps,
+    otherCategoricalProps = _objectWithoutProperties(polarChartProps, _excluded);
+  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {
+    return null;
+  }
+  var {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher
+  } = props;
+  var options = {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher,
+    eventEmitter: undefined
+  };
+  return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: (_polarChartProps$id = polarChartProps.id) !== null && _polarChartProps$id !== void 0 ? _polarChartProps$id : chartName
+  }, /*#__PURE__*/React.createElement(ChartDataContextProvider, {
+    chartData: polarChartProps.data
+  }), /*#__PURE__*/React.createElement(ReportMainChartProps, {
+    width: width,
+    height: height,
+    layout: layout,
+    margin: polarChartProps.margin
+  }), /*#__PURE__*/React.createElement(ReportChartProps, {
+    accessibilityLayer: polarChartProps.accessibilityLayer,
+    barCategoryGap: polarChartProps.barCategoryGap,
+    maxBarSize: polarChartProps.maxBarSize,
+    stackOffset: polarChartProps.stackOffset,
+    barGap: polarChartProps.barGap,
+    barSize: polarChartProps.barSize,
+    syncId: polarChartProps.syncId,
+    syncMethod: polarChartProps.syncMethod,
+    className: polarChartProps.className
+  }), /*#__PURE__*/React.createElement(ReportPolarOptions, {
+    cx: polarChartProps.cx,
+    cy: polarChartProps.cy,
+    startAngle: polarChartProps.startAngle,
+    endAngle: polarChartProps.endAngle,
+    innerRadius: polarChartProps.innerRadius,
+    outerRadius: polarChartProps.outerRadius
+  }), /*#__PURE__*/React.createElement(CategoricalChart, _extends({
+    width: width,
+    height: height
+  }, otherCategoricalProps, {
+    ref: ref
+  })));
+});
Index: node_modules/recharts/es6/chart/RadarChart.js
===================================================================
--- node_modules/recharts/es6/chart/RadarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/RadarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { PolarChart } from './PolarChart';
+var allowedTooltipTypes = ['axis'];
+var defaultProps = {
+  layout: 'centric',
+  startAngle: 90,
+  endAngle: -270,
+  cx: '50%',
+  cy: '50%',
+  innerRadius: 0,
+  outerRadius: '80%'
+};
+export var RadarChart = /*#__PURE__*/forwardRef((props, ref) => {
+  var propsWithDefaults = resolveDefaultProps(props, defaultProps);
+  return /*#__PURE__*/React.createElement(PolarChart, {
+    chartName: "RadarChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: propsWithDefaults,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/RadialBarChart.js
===================================================================
--- node_modules/recharts/es6/chart/RadialBarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/RadialBarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { PolarChart } from './PolarChart';
+var allowedTooltipTypes = ['axis', 'item'];
+var defaultProps = {
+  layout: 'radial',
+  startAngle: 0,
+  endAngle: 360,
+  cx: '50%',
+  cy: '50%',
+  innerRadius: 0,
+  outerRadius: '80%'
+};
+export var RadialBarChart = /*#__PURE__*/forwardRef((props, ref) => {
+  var propsWithDefaults = resolveDefaultProps(props, defaultProps);
+  return /*#__PURE__*/React.createElement(PolarChart, {
+    chartName: "RadialBarChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: propsWithDefaults,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/RechartsWrapper.js
===================================================================
--- node_modules/recharts/es6/chart/RechartsWrapper.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/RechartsWrapper.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,165 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { forwardRef, useState, useCallback } from 'react';
+import { clsx } from 'clsx';
+import { mouseLeaveChart } from '../state/tooltipSlice';
+import { useAppDispatch } from '../state/hooks';
+import { mouseClickAction, mouseMoveAction } from '../state/mouseEventsMiddleware';
+import { useSynchronisedEventsFromOtherCharts } from '../synchronisation/useChartSynchronisation';
+import { focusAction, keyDownAction } from '../state/keyboardEventsMiddleware';
+import { useReportScale } from '../util/useReportScale';
+import { externalEventAction } from '../state/externalEventsMiddleware';
+import { touchEventAction } from '../state/touchEventsMiddleware';
+import { TooltipPortalContext } from '../context/tooltipPortalContext';
+import { LegendPortalContext } from '../context/legendPortalContext';
+export var RechartsWrapper = /*#__PURE__*/forwardRef((_ref, ref) => {
+  var {
+    children,
+    className,
+    height,
+    onClick,
+    onContextMenu,
+    onDoubleClick,
+    onMouseDown,
+    onMouseEnter,
+    onMouseLeave,
+    onMouseMove,
+    onMouseUp,
+    onTouchEnd,
+    onTouchMove,
+    onTouchStart,
+    style,
+    width
+  } = _ref;
+  var dispatch = useAppDispatch();
+  var [tooltipPortal, setTooltipPortal] = useState(null);
+  var [legendPortal, setLegendPortal] = useState(null);
+  useSynchronisedEventsFromOtherCharts();
+  var setScaleRef = useReportScale();
+  var innerRef = useCallback(node => {
+    setScaleRef(node);
+    if (typeof ref === 'function') {
+      ref(node);
+    }
+    setTooltipPortal(node);
+    setLegendPortal(node);
+  }, [setScaleRef, ref, setTooltipPortal, setLegendPortal]);
+  var myOnClick = useCallback(e => {
+    dispatch(mouseClickAction(e));
+    dispatch(externalEventAction({
+      handler: onClick,
+      reactEvent: e
+    }));
+  }, [dispatch, onClick]);
+  var myOnMouseEnter = useCallback(e => {
+    dispatch(mouseMoveAction(e));
+    dispatch(externalEventAction({
+      handler: onMouseEnter,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseEnter]);
+  var myOnMouseLeave = useCallback(e => {
+    dispatch(mouseLeaveChart());
+    dispatch(externalEventAction({
+      handler: onMouseLeave,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseLeave]);
+  var myOnMouseMove = useCallback(e => {
+    dispatch(mouseMoveAction(e));
+    dispatch(externalEventAction({
+      handler: onMouseMove,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseMove]);
+  var onFocus = useCallback(() => {
+    dispatch(focusAction());
+  }, [dispatch]);
+  var onKeyDown = useCallback(e => {
+    dispatch(keyDownAction(e.key));
+  }, [dispatch]);
+  var myOnContextMenu = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onContextMenu,
+      reactEvent: e
+    }));
+  }, [dispatch, onContextMenu]);
+  var myOnDoubleClick = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onDoubleClick,
+      reactEvent: e
+    }));
+  }, [dispatch, onDoubleClick]);
+  var myOnMouseDown = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onMouseDown,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseDown]);
+  var myOnMouseUp = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onMouseUp,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseUp]);
+  var myOnTouchStart = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onTouchStart,
+      reactEvent: e
+    }));
+  }, [dispatch, onTouchStart]);
+
+  /*
+   * onTouchMove is special because it behaves different from mouse events.
+   * Mouse events have enter + leave combo that notify us when the mouse is over
+   * a certain element. Touch events don't have that; touch only gives us
+   * start (finger down), end (finger up) and move (finger moving).
+   * So we need to figure out which element the user is touching
+   * ourselves. Fortunately, there's a convenient method for that:
+   * https://developer.mozilla.org/en-US/docs/Web/API/Document/elementFromPoint
+   */
+  var myOnTouchMove = useCallback(e => {
+    dispatch(touchEventAction(e));
+    dispatch(externalEventAction({
+      handler: onTouchMove,
+      reactEvent: e
+    }));
+  }, [dispatch, onTouchMove]);
+  var myOnTouchEnd = useCallback(e => {
+    dispatch(externalEventAction({
+      handler: onTouchEnd,
+      reactEvent: e
+    }));
+  }, [dispatch, onTouchEnd]);
+  return /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {
+    value: tooltipPortal
+  }, /*#__PURE__*/React.createElement(LegendPortalContext.Provider, {
+    value: legendPortal
+  }, /*#__PURE__*/React.createElement("div", {
+    className: clsx('recharts-wrapper', className),
+    style: _objectSpread({
+      position: 'relative',
+      cursor: 'default',
+      width,
+      height
+    }, style),
+    onClick: myOnClick,
+    onContextMenu: myOnContextMenu,
+    onDoubleClick: myOnDoubleClick,
+    onFocus: onFocus,
+    onKeyDown: onKeyDown,
+    onMouseDown: myOnMouseDown,
+    onMouseEnter: myOnMouseEnter,
+    onMouseLeave: myOnMouseLeave,
+    onMouseMove: myOnMouseMove,
+    onMouseUp: myOnMouseUp,
+    onTouchEnd: myOnTouchEnd,
+    onTouchMove: myOnTouchMove,
+    onTouchStart: myOnTouchStart,
+    ref: innerRef
+  }, children)));
+});
Index: node_modules/recharts/es6/chart/Sankey.js
===================================================================
--- node_modules/recharts/es6/chart/Sankey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/Sankey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,779 @@
+var _excluded = ["sourceX", "sourceY", "sourceControlX", "targetX", "targetY", "targetControlX", "linkWidth"],
+  _excluded2 = ["width", "height", "className", "style", "children"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { PureComponent } from 'react';
+import maxBy from 'es-toolkit/compat/maxBy';
+import sumBy from 'es-toolkit/compat/sumBy';
+import get from 'es-toolkit/compat/get';
+import { Surface } from '../container/Surface';
+import { Layer } from '../container/Layer';
+import { Rectangle } from '../shape/Rectangle';
+import { shallowEqual } from '../util/ShallowEqual';
+import { filterProps } from '../util/ReactUtils';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { ReportChartMargin, ReportChartSize } from '../context/chartLayoutContext';
+import { TooltipPortalContext } from '../context/tooltipPortalContext';
+import { RechartsWrapper } from './RechartsWrapper';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { useAppDispatch } from '../state/hooks';
+import { mouseLeaveItem, setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { SetComputedData } from '../context/chartDataContext';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+var interpolationGenerator = (a, b) => {
+  var ka = +a;
+  var kb = b - ka;
+  return t => ka + kb * t;
+};
+var centerY = node => node.y + node.dy / 2;
+var getValue = entry => entry && entry.value || 0;
+var getSumOfIds = (links, ids) => ids.reduce((result, id) => result + getValue(links[id]), 0);
+var getSumWithWeightedSource = (tree, links, ids) => ids.reduce((result, id) => {
+  var link = links[id];
+  var sourceNode = tree[link.source];
+  return result + centerY(sourceNode) * getValue(links[id]);
+}, 0);
+var getSumWithWeightedTarget = (tree, links, ids) => ids.reduce((result, id) => {
+  var link = links[id];
+  var targetNode = tree[link.target];
+  return result + centerY(targetNode) * getValue(links[id]);
+}, 0);
+var ascendingY = (a, b) => a.y - b.y;
+var searchTargetsAndSources = (links, id) => {
+  var sourceNodes = [];
+  var sourceLinks = [];
+  var targetNodes = [];
+  var targetLinks = [];
+  for (var i = 0, len = links.length; i < len; i++) {
+    var link = links[i];
+    if (link.source === id) {
+      targetNodes.push(link.target);
+      targetLinks.push(i);
+    }
+    if (link.target === id) {
+      sourceNodes.push(link.source);
+      sourceLinks.push(i);
+    }
+  }
+  return {
+    sourceNodes,
+    sourceLinks,
+    targetLinks,
+    targetNodes
+  };
+};
+var updateDepthOfTargets = (tree, curNode) => {
+  var {
+    targetNodes
+  } = curNode;
+  for (var i = 0, len = targetNodes.length; i < len; i++) {
+    var target = tree[targetNodes[i]];
+    if (target) {
+      target.depth = Math.max(curNode.depth + 1, target.depth);
+      updateDepthOfTargets(tree, target);
+    }
+  }
+};
+var getNodesTree = (_ref, width, nodeWidth) => {
+  var {
+    nodes,
+    links
+  } = _ref;
+  var tree = nodes.map((entry, index) => {
+    var result = searchTargetsAndSources(links, index);
+    return _objectSpread(_objectSpread(_objectSpread({}, entry), result), {}, {
+      value: Math.max(getSumOfIds(links, result.sourceLinks), getSumOfIds(links, result.targetLinks)),
+      depth: 0
+    });
+  });
+  for (var i = 0, len = tree.length; i < len; i++) {
+    var node = tree[i];
+    if (!node.sourceNodes.length) {
+      updateDepthOfTargets(tree, node);
+    }
+  }
+  var maxDepth = maxBy(tree, entry => entry.depth).depth;
+  if (maxDepth >= 1) {
+    var childWidth = (width - nodeWidth) / maxDepth;
+    for (var _i = 0, _len = tree.length; _i < _len; _i++) {
+      var _node = tree[_i];
+      if (!_node.targetNodes.length) {
+        _node.depth = maxDepth;
+      }
+      _node.x = _node.depth * childWidth;
+      _node.dx = nodeWidth;
+    }
+  }
+  return {
+    tree,
+    maxDepth
+  };
+};
+var getDepthTree = tree => {
+  var result = [];
+  for (var i = 0, len = tree.length; i < len; i++) {
+    var node = tree[i];
+    if (!result[node.depth]) {
+      result[node.depth] = [];
+    }
+    result[node.depth].push(node);
+  }
+  return result;
+};
+var updateYOfTree = (depthTree, height, nodePadding, links) => {
+  var yRatio = Math.min(...depthTree.map(nodes => (height - (nodes.length - 1) * nodePadding) / sumBy(nodes, getValue)));
+  for (var d = 0, maxDepth = depthTree.length; d < maxDepth; d++) {
+    for (var i = 0, len = depthTree[d].length; i < len; i++) {
+      var node = depthTree[d][i];
+      node.y = i;
+      node.dy = node.value * yRatio;
+    }
+  }
+  return links.map(link => _objectSpread(_objectSpread({}, link), {}, {
+    dy: getValue(link) * yRatio
+  }));
+};
+var resolveCollisions = function resolveCollisions(depthTree, height, nodePadding) {
+  var sort = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
+  for (var i = 0, len = depthTree.length; i < len; i++) {
+    var nodes = depthTree[i];
+    var n = nodes.length;
+
+    // Sort by the value of y
+    if (sort) {
+      nodes.sort(ascendingY);
+    }
+    var y0 = 0;
+    for (var j = 0; j < n; j++) {
+      var node = nodes[j];
+      var dy = y0 - node.y;
+      if (dy > 0) {
+        node.y += dy;
+      }
+      y0 = node.y + node.dy + nodePadding;
+    }
+    y0 = height + nodePadding;
+    for (var _j = n - 1; _j >= 0; _j--) {
+      var _node2 = nodes[_j];
+      var _dy = _node2.y + _node2.dy + nodePadding - y0;
+      if (_dy > 0) {
+        _node2.y -= _dy;
+        y0 = _node2.y;
+      } else {
+        break;
+      }
+    }
+  }
+};
+var relaxLeftToRight = (tree, depthTree, links, alpha) => {
+  for (var i = 0, maxDepth = depthTree.length; i < maxDepth; i++) {
+    var nodes = depthTree[i];
+    for (var j = 0, len = nodes.length; j < len; j++) {
+      var node = nodes[j];
+      if (node.sourceLinks.length) {
+        var sourceSum = getSumOfIds(links, node.sourceLinks);
+        var weightedSum = getSumWithWeightedSource(tree, links, node.sourceLinks);
+        var y = weightedSum / sourceSum;
+        node.y += (y - centerY(node)) * alpha;
+      }
+    }
+  }
+};
+var relaxRightToLeft = (tree, depthTree, links, alpha) => {
+  for (var i = depthTree.length - 1; i >= 0; i--) {
+    var nodes = depthTree[i];
+    for (var j = 0, len = nodes.length; j < len; j++) {
+      var node = nodes[j];
+      if (node.targetLinks.length) {
+        var targetSum = getSumOfIds(links, node.targetLinks);
+        var weightedSum = getSumWithWeightedTarget(tree, links, node.targetLinks);
+        var y = weightedSum / targetSum;
+        node.y += (y - centerY(node)) * alpha;
+      }
+    }
+  }
+};
+var updateYOfLinks = (tree, links) => {
+  for (var i = 0, len = tree.length; i < len; i++) {
+    var node = tree[i];
+    var sy = 0;
+    var ty = 0;
+    node.targetLinks.sort((a, b) => tree[links[a].target].y - tree[links[b].target].y);
+    node.sourceLinks.sort((a, b) => tree[links[a].source].y - tree[links[b].source].y);
+    for (var j = 0, tLen = node.targetLinks.length; j < tLen; j++) {
+      var link = links[node.targetLinks[j]];
+      if (link) {
+        link.sy = sy;
+        sy += link.dy;
+      }
+    }
+    for (var _j2 = 0, sLen = node.sourceLinks.length; _j2 < sLen; _j2++) {
+      var _link = links[node.sourceLinks[_j2]];
+      if (_link) {
+        _link.ty = ty;
+        ty += _link.dy;
+      }
+    }
+  }
+};
+var computeData = _ref2 => {
+  var {
+    data,
+    width,
+    height,
+    iterations,
+    nodeWidth,
+    nodePadding,
+    sort
+  } = _ref2;
+  var {
+    links
+  } = data;
+  var {
+    tree
+  } = getNodesTree(data, width, nodeWidth);
+  var depthTree = getDepthTree(tree);
+  var newLinks = updateYOfTree(depthTree, height, nodePadding, links);
+  resolveCollisions(depthTree, height, nodePadding, sort);
+  var alpha = 1;
+  for (var i = 1; i <= iterations; i++) {
+    relaxRightToLeft(tree, depthTree, newLinks, alpha *= 0.99);
+    resolveCollisions(depthTree, height, nodePadding, sort);
+    relaxLeftToRight(tree, depthTree, newLinks, alpha);
+    resolveCollisions(depthTree, height, nodePadding, sort);
+  }
+  updateYOfLinks(tree, newLinks);
+  return {
+    nodes: tree,
+    links: newLinks
+  };
+};
+var getCoordinateOfTooltip = (item, type) => {
+  if (type === 'node') {
+    return {
+      x: +item.x + +item.width / 2,
+      y: +item.y + +item.height / 2
+    };
+  }
+  return 'sourceX' in item && {
+    x: (item.sourceX + item.targetX) / 2,
+    y: (item.sourceY + item.targetY) / 2
+  };
+};
+var getPayloadOfTooltip = (item, type, nameKey) => {
+  var {
+    payload
+  } = item;
+  if (type === 'node') {
+    return {
+      payload,
+      name: getValueByDataKey(payload, nameKey, ''),
+      value: getValueByDataKey(payload, 'value')
+    };
+  }
+  if ('source' in payload && payload.source && payload.target) {
+    var sourceName = getValueByDataKey(payload.source, nameKey, '');
+    var targetName = getValueByDataKey(payload.target, nameKey, '');
+    return {
+      payload,
+      name: "".concat(sourceName, " - ").concat(targetName),
+      value: getValueByDataKey(payload, 'value')
+    };
+  }
+  return null;
+};
+export var sankeyPayloadSearcher = (_, activeIndex, computedData, nameKey) => {
+  if (activeIndex == null || typeof activeIndex !== 'string') {
+    return undefined;
+  }
+  var splitIndex = activeIndex.split('-');
+  var [targetType, index] = splitIndex;
+  var item = get(computedData, "".concat(targetType, "s[").concat(index, "]"));
+  if (item) {
+    var payload = getPayloadOfTooltip(item, targetType, nameKey);
+    return payload;
+  }
+  return undefined;
+};
+var options = {
+  chartName: 'Sankey',
+  defaultTooltipEventType: 'item',
+  validateTooltipEventTypes: ['item'],
+  tooltipPayloadSearcher: sankeyPayloadSearcher,
+  eventEmitter: undefined
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    nameKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    data
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      name,
+      nameKey,
+      color: fill,
+      unit: '' // Sankey does not have unit, why?
+    }
+  };
+}
+
+// TODO: improve types - NodeOptions uses SankeyNode, LinkOptions uses LinkProps. Standardize.
+
+// Why is margin not a Sankey prop? No clue. Probably it should be
+var defaultSankeyMargin = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+function renderLinkItem(option, props) {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  if (typeof option === 'function') {
+    return option(props);
+  }
+  var {
+      sourceX,
+      sourceY,
+      sourceControlX,
+      targetX,
+      targetY,
+      targetControlX,
+      linkWidth
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  return /*#__PURE__*/React.createElement("path", _extends({
+    className: "recharts-sankey-link",
+    d: "\n          M".concat(sourceX, ",").concat(sourceY, "\n          C").concat(sourceControlX, ",").concat(sourceY, " ").concat(targetControlX, ",").concat(targetY, " ").concat(targetX, ",").concat(targetY, "\n        "),
+    fill: "none",
+    stroke: "#333",
+    strokeWidth: linkWidth,
+    strokeOpacity: "0.2"
+  }, svgPropertiesNoEvents(others)));
+}
+var buildLinkProps = _ref3 => {
+  var {
+    link,
+    nodes,
+    left,
+    top,
+    i,
+    linkContent,
+    linkCurvature
+  } = _ref3;
+  var {
+    sy: sourceRelativeY,
+    ty: targetRelativeY,
+    dy: linkWidth
+  } = link;
+  var sourceNode = nodes[link.source];
+  var targetNode = nodes[link.target];
+  var sourceX = sourceNode.x + sourceNode.dx + left;
+  var targetX = targetNode.x + left;
+  var interpolationFunc = interpolationGenerator(sourceX, targetX);
+  var sourceControlX = interpolationFunc(linkCurvature);
+  var targetControlX = interpolationFunc(1 - linkCurvature);
+  var sourceY = sourceNode.y + sourceRelativeY + linkWidth / 2 + top;
+  var targetY = targetNode.y + targetRelativeY + linkWidth / 2 + top;
+  var linkProps = _objectSpread({
+    sourceX,
+    targetX,
+    sourceY,
+    targetY,
+    sourceControlX,
+    targetControlX,
+    sourceRelativeY,
+    targetRelativeY,
+    linkWidth,
+    index: i,
+    payload: _objectSpread(_objectSpread({}, link), {}, {
+      source: sourceNode,
+      target: targetNode
+    })
+  }, filterProps(linkContent, false));
+  return linkProps;
+};
+function SankeyLinkElement(_ref4) {
+  var {
+    props,
+    i,
+    linkContent,
+    onMouseEnter: _onMouseEnter,
+    onMouseLeave: _onMouseLeave,
+    onClick: _onClick,
+    dataKey
+  } = _ref4;
+  var activeCoordinate = getCoordinateOfTooltip(props, 'link');
+  var activeIndex = "link-".concat(i);
+  var dispatch = useAppDispatch();
+  var events = {
+    onMouseEnter: e => {
+      dispatch(setActiveMouseOverItemIndex({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+      _onMouseEnter(props, e);
+    },
+    onMouseLeave: e => {
+      dispatch(mouseLeaveItem());
+      _onMouseLeave(props, e);
+    },
+    onClick: e => {
+      dispatch(setActiveClickItemIndex({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+      _onClick(props, e);
+    }
+  };
+  return /*#__PURE__*/React.createElement(Layer, events, renderLinkItem(linkContent, props));
+}
+function AllSankeyLinkElements(_ref5) {
+  var {
+    modifiedLinks,
+    links,
+    linkContent,
+    onMouseEnter,
+    onMouseLeave,
+    onClick,
+    dataKey
+  } = _ref5;
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-sankey-links",
+    key: "recharts-sankey-links"
+  }, links.map((link, i) => {
+    var linkProps = modifiedLinks[i];
+    return /*#__PURE__*/React.createElement(SankeyLinkElement, {
+      key: "link-".concat(link.source, "-").concat(link.target, "-").concat(link.value),
+      props: linkProps,
+      linkContent: linkContent,
+      i: i,
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick,
+      dataKey: dataKey
+    });
+  }));
+}
+function renderNodeItem(option, props) {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  if (typeof option === 'function') {
+    return option(props);
+  }
+  return (
+    /*#__PURE__*/
+    // @ts-expect-error recharts radius is not compatible with SVG radius
+    React.createElement(Rectangle, _extends({
+      className: "recharts-sankey-node",
+      fill: "#0088fe",
+      fillOpacity: "0.8"
+    }, svgPropertiesNoEvents(props)))
+  );
+}
+var buildNodeProps = _ref6 => {
+  var {
+    node,
+    nodeContent,
+    top,
+    left,
+    i
+  } = _ref6;
+  var {
+    x,
+    y,
+    dx,
+    dy
+  } = node;
+  var nodeProps = _objectSpread(_objectSpread({}, filterProps(nodeContent, false)), {}, {
+    x: x + left,
+    y: y + top,
+    width: dx,
+    height: dy,
+    index: i,
+    payload: node
+  });
+  return nodeProps;
+};
+function NodeElement(_ref7) {
+  var {
+    props,
+    nodeContent,
+    i,
+    onMouseEnter: _onMouseEnter2,
+    onMouseLeave: _onMouseLeave2,
+    onClick: _onClick2,
+    dataKey
+  } = _ref7;
+  var dispatch = useAppDispatch();
+  var activeCoordinate = getCoordinateOfTooltip(props, 'node');
+  var activeIndex = "node-".concat(i);
+  var events = {
+    onMouseEnter: e => {
+      dispatch(setActiveMouseOverItemIndex({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+      _onMouseEnter2(props, e);
+    },
+    onMouseLeave: e => {
+      dispatch(mouseLeaveItem());
+      _onMouseLeave2(props, e);
+    },
+    onClick: e => {
+      dispatch(setActiveClickItemIndex({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+      _onClick2(props, e);
+    }
+  };
+  return /*#__PURE__*/React.createElement(Layer, events, renderNodeItem(nodeContent, props));
+}
+function AllNodeElements(_ref8) {
+  var {
+    modifiedNodes,
+    nodeContent,
+    onMouseEnter,
+    onMouseLeave,
+    onClick,
+    dataKey
+  } = _ref8;
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-sankey-nodes",
+    key: "recharts-sankey-nodes"
+  }, modifiedNodes.map((modifiedNode, i) => {
+    return /*#__PURE__*/React.createElement(NodeElement, {
+      props: modifiedNode,
+      nodeContent: nodeContent,
+      i: i,
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick,
+      dataKey: dataKey
+    });
+  }));
+}
+export class Sankey extends PureComponent {
+  constructor() {
+    super(...arguments);
+    _defineProperty(this, "state", {
+      nodes: [],
+      links: [],
+      modifiedLinks: [],
+      modifiedNodes: []
+    });
+  }
+  static getDerivedStateFromProps(nextProps, prevState) {
+    var {
+      data,
+      width,
+      height,
+      margin,
+      iterations,
+      nodeWidth,
+      nodePadding,
+      sort,
+      linkCurvature
+    } = nextProps;
+    if (data !== prevState.prevData || width !== prevState.prevWidth || height !== prevState.prevHeight || !shallowEqual(margin, prevState.prevMargin) || iterations !== prevState.prevIterations || nodeWidth !== prevState.prevNodeWidth || nodePadding !== prevState.prevNodePadding || sort !== prevState.sort) {
+      var contentWidth = width - (margin && margin.left || 0) - (margin && margin.right || 0);
+      var contentHeight = height - (margin && margin.top || 0) - (margin && margin.bottom || 0);
+      var {
+        links,
+        nodes
+      } = computeData({
+        data,
+        width: contentWidth,
+        height: contentHeight,
+        iterations,
+        nodeWidth,
+        nodePadding,
+        sort
+      });
+      var top = get(margin, 'top') || 0;
+      var left = get(margin, 'left') || 0;
+      var modifiedLinks = links.map((link, i) => {
+        return buildLinkProps({
+          link,
+          nodes,
+          i,
+          top,
+          left,
+          linkContent: nextProps.link,
+          linkCurvature
+        });
+      });
+      var modifiedNodes = nodes.map((node, i) => {
+        return buildNodeProps({
+          node,
+          nodeContent: nextProps.node,
+          i,
+          top,
+          left
+        });
+      });
+      return _objectSpread(_objectSpread({}, prevState), {}, {
+        nodes,
+        links,
+        modifiedLinks,
+        modifiedNodes,
+        prevData: data,
+        prevWidth: iterations,
+        prevHeight: height,
+        prevMargin: margin,
+        prevNodePadding: nodePadding,
+        prevNodeWidth: nodeWidth,
+        prevIterations: iterations,
+        prevSort: sort
+      });
+    }
+    return null;
+  }
+  handleMouseEnter(item, type, e) {
+    var {
+      onMouseEnter
+    } = this.props;
+    if (onMouseEnter) {
+      onMouseEnter(item, type, e);
+    }
+  }
+  handleMouseLeave(item, type, e) {
+    var {
+      onMouseLeave
+    } = this.props;
+    if (onMouseLeave) {
+      onMouseLeave(item, type, e);
+    }
+  }
+  handleClick(item, type, e) {
+    var {
+      onClick
+    } = this.props;
+    if (onClick) onClick(item, type, e);
+  }
+  render() {
+    var _this$props = this.props,
+      {
+        width,
+        height,
+        className,
+        style,
+        children
+      } = _this$props,
+      others = _objectWithoutProperties(_this$props, _excluded2);
+    if (!isPositiveNumber(width) || !isPositiveNumber(height)) {
+      return null;
+    }
+    var {
+      links,
+      modifiedNodes,
+      modifiedLinks
+    } = this.state;
+    var attrs = svgPropertiesNoEvents(others);
+    return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+      preloadedState: {
+        options
+      },
+      reduxStoreName: className !== null && className !== void 0 ? className : 'Sankey'
+    }, /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+      fn: getTooltipEntrySettings,
+      args: this.props
+    }), /*#__PURE__*/React.createElement(SetComputedData, {
+      computedData: {
+        links: modifiedLinks,
+        nodes: modifiedNodes
+      }
+    }), /*#__PURE__*/React.createElement(ReportChartSize, {
+      width: width,
+      height: height
+    }), /*#__PURE__*/React.createElement(ReportChartMargin, {
+      margin: defaultSankeyMargin
+    }), /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {
+      value: this.state.tooltipPortal
+    }, /*#__PURE__*/React.createElement(RechartsWrapper, {
+      className: className,
+      style: style,
+      width: width,
+      height: height,
+      ref: node => {
+        if (this.state.tooltipPortal == null) {
+          this.setState({
+            tooltipPortal: node
+          });
+        }
+      },
+      onMouseEnter: undefined,
+      onMouseLeave: undefined,
+      onClick: undefined,
+      onMouseMove: undefined,
+      onMouseDown: undefined,
+      onMouseUp: undefined,
+      onContextMenu: undefined,
+      onDoubleClick: undefined,
+      onTouchStart: undefined,
+      onTouchMove: undefined,
+      onTouchEnd: undefined
+    }, /*#__PURE__*/React.createElement(Surface, _extends({}, attrs, {
+      width: width,
+      height: height
+    }), children, /*#__PURE__*/React.createElement(AllSankeyLinkElements, {
+      links: links,
+      modifiedLinks: modifiedLinks,
+      linkContent: this.props.link,
+      dataKey: this.props.dataKey,
+      onMouseEnter: (linkProps, e) => this.handleMouseEnter(linkProps, 'link', e),
+      onMouseLeave: (linkProps, e) => this.handleMouseLeave(linkProps, 'link', e),
+      onClick: (linkProps, e) => this.handleClick(linkProps, 'link', e)
+    }), /*#__PURE__*/React.createElement(AllNodeElements, {
+      modifiedNodes: modifiedNodes,
+      nodeContent: this.props.node,
+      dataKey: this.props.dataKey,
+      onMouseEnter: (nodeProps, e) => this.handleMouseEnter(nodeProps, 'node', e),
+      onMouseLeave: (nodeProps, e) => this.handleMouseLeave(nodeProps, 'node', e),
+      onClick: (nodeProps, e) => this.handleClick(nodeProps, 'node', e)
+    })))));
+  }
+}
+_defineProperty(Sankey, "displayName", 'Sankey');
+_defineProperty(Sankey, "defaultProps", {
+  nameKey: 'name',
+  dataKey: 'value',
+  nodePadding: 10,
+  nodeWidth: 10,
+  linkCurvature: 0.5,
+  iterations: 32,
+  margin: {
+    top: 5,
+    right: 5,
+    bottom: 5,
+    left: 5
+  },
+  sort: true
+});
Index: node_modules/recharts/es6/chart/ScatterChart.js
===================================================================
--- node_modules/recharts/es6/chart/ScatterChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/ScatterChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { arrayTooltipSearcher } from '../state/optionsSlice';
+import { CartesianChart } from './CartesianChart';
+var allowedTooltipTypes = ['item'];
+export var ScatterChart = /*#__PURE__*/forwardRef((props, ref) => {
+  return /*#__PURE__*/React.createElement(CartesianChart, {
+    chartName: "ScatterChart",
+    defaultTooltipEventType: "item",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/es6/chart/SunburstChart.js
===================================================================
--- node_modules/recharts/es6/chart/SunburstChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/SunburstChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,279 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { useState } from 'react';
+import { scaleLinear } from 'victory-vendor/d3-scale';
+import { clsx } from 'clsx';
+import get from 'es-toolkit/compat/get';
+import { Surface } from '../container/Surface';
+import { Layer } from '../container/Layer';
+import { Sector } from '../shape/Sector';
+import { Text } from '../component/Text';
+import { polarToCartesian } from '../util/PolarUtils';
+import { ReportChartMargin, ReportChartSize } from '../context/chartLayoutContext';
+import { TooltipPortalContext } from '../context/tooltipPortalContext';
+import { RechartsWrapper } from './RechartsWrapper';
+import { mouseLeaveItem, setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { useAppDispatch } from '../state/hooks';
+var defaultTextProps = {
+  fontWeight: 'bold',
+  paintOrder: 'stroke fill',
+  fontSize: '.75rem',
+  stroke: '#FFF',
+  fill: 'black',
+  pointerEvents: 'none'
+};
+function getMaxDepthOf(node) {
+  if (!node.children || node.children.length === 0) return 1;
+
+  // Calculate depth for each child and find the maximum
+  var childDepths = node.children.map(d => getMaxDepthOf(d));
+  return 1 + Math.max(...childDepths);
+}
+function convertMapToRecord(map) {
+  var record = {};
+  map.forEach((value, key) => {
+    record[key] = value;
+  });
+  return record;
+}
+function getTooltipEntrySettings(_ref) {
+  var {
+    dataKey,
+    nameKey,
+    data,
+    stroke,
+    fill,
+    positions
+  } = _ref;
+  return {
+    dataDefinedOnItem: data.children,
+    // Redux store will not accept a Map because it's not serializable
+    positions: convertMapToRecord(positions),
+    // Sunburst does not support many of the properties as other charts do so there's plenty of defaults here
+    settings: {
+      stroke,
+      strokeWidth: undefined,
+      fill,
+      nameKey,
+      dataKey,
+      // if there is a nameKey use it, otherwise make the name of the tooltip the dataKey itself
+      name: nameKey ? undefined : dataKey,
+      hide: false,
+      type: undefined,
+      color: fill,
+      unit: ''
+    }
+  };
+}
+
+// Why is margin not a sunburst prop? No clue. Probably it should be
+var defaultSunburstMargin = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+export var payloadSearcher = (data, activeIndex) => {
+  return get(data, activeIndex);
+};
+export var addToSunburstNodeIndex = function addToSunburstNodeIndex(indexInChildrenArr) {
+  var activeTooltipIndexSoFar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+  return "".concat(activeTooltipIndexSoFar, "children[").concat(indexInChildrenArr, "]");
+};
+var preloadedState = {
+  options: {
+    validateTooltipEventTypes: ['item'],
+    defaultTooltipEventType: 'item',
+    chartName: 'Sunburst',
+    tooltipPayloadSearcher: payloadSearcher,
+    eventEmitter: undefined
+  }
+};
+var SunburstChartImpl = _ref2 => {
+  var {
+    className,
+    data,
+    children,
+    width,
+    height,
+    padding = 2,
+    dataKey = 'value',
+    nameKey = 'name',
+    ringPadding = 2,
+    innerRadius = 50,
+    fill = '#333',
+    stroke = '#FFF',
+    textOptions = defaultTextProps,
+    outerRadius = Math.min(width, height) / 2,
+    cx = width / 2,
+    cy = height / 2,
+    startAngle = 0,
+    endAngle = 360,
+    onClick,
+    onMouseEnter,
+    onMouseLeave
+  } = _ref2;
+  var dispatch = useAppDispatch();
+  var rScale = scaleLinear([0, data[dataKey]], [0, endAngle]);
+  var treeDepth = getMaxDepthOf(data);
+  var thickness = (outerRadius - innerRadius) / treeDepth;
+  var sectors = [];
+  var positions = new Map([]);
+  var [tooltipPortal, setTooltipPortal] = useState(null);
+  // event handlers
+  function handleMouseEnter(node, e) {
+    if (onMouseEnter) onMouseEnter(node, e);
+    dispatch(setActiveMouseOverItemIndex({
+      activeIndex: node.tooltipIndex,
+      activeDataKey: dataKey,
+      activeCoordinate: positions.get(node.name)
+    }));
+  }
+  function handleMouseLeave(node, e) {
+    if (onMouseLeave) onMouseLeave(node, e);
+    dispatch(mouseLeaveItem());
+  }
+  function handleClick(node) {
+    if (onClick) onClick(node);
+    dispatch(setActiveClickItemIndex({
+      activeIndex: node.tooltipIndex,
+      activeDataKey: dataKey,
+      activeCoordinate: positions.get(node.name)
+    }));
+  }
+
+  // recursively add nodes for each data point and its children
+  function drawArcs(childNodes, options) {
+    var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
+    var {
+      radius,
+      innerR,
+      initialAngle,
+      childColor,
+      nestedActiveTooltipIndex
+    } = options;
+    var currentAngle = initialAngle;
+    if (!childNodes) return; // base case: no children of this node
+
+    childNodes.forEach((d, i) => {
+      var _ref3, _d$fill;
+      var currentTooltipIndex = depth === 1 ? "[".concat(i, "]") : addToSunburstNodeIndex(i, nestedActiveTooltipIndex);
+      var nodeWithIndex = _objectSpread(_objectSpread({}, d), {}, {
+        tooltipIndex: currentTooltipIndex
+      });
+      var arcLength = rScale(d[dataKey]);
+      var start = currentAngle;
+      // color priority - if there's a color on the individual point use that, otherwise use parent color or default
+      var fillColor = (_ref3 = (_d$fill = d === null || d === void 0 ? void 0 : d.fill) !== null && _d$fill !== void 0 ? _d$fill : childColor) !== null && _ref3 !== void 0 ? _ref3 : fill;
+      var {
+        x: textX,
+        y: textY
+      } = polarToCartesian(0, 0, innerR + radius / 2, -(start + arcLength - arcLength / 2));
+      currentAngle += arcLength;
+      sectors.push(
+      /*#__PURE__*/
+      // eslint-disable-next-line react/no-array-index-key
+      React.createElement("g", {
+        key: "sunburst-sector-".concat(d.name, "-").concat(i)
+      }, /*#__PURE__*/React.createElement(Sector, {
+        onClick: () => handleClick(nodeWithIndex),
+        onMouseEnter: e => handleMouseEnter(nodeWithIndex, e),
+        onMouseLeave: e => handleMouseLeave(nodeWithIndex, e),
+        fill: fillColor,
+        stroke: stroke,
+        strokeWidth: padding,
+        startAngle: start,
+        endAngle: start + arcLength,
+        innerRadius: innerR,
+        outerRadius: innerR + radius,
+        cx: cx,
+        cy: cy
+      }), /*#__PURE__*/React.createElement(Text, _extends({}, textOptions, {
+        alignmentBaseline: "middle",
+        textAnchor: "middle",
+        x: textX + cx,
+        y: cy - textY
+      }), d[dataKey])));
+      var {
+        x: tooltipX,
+        y: tooltipY
+      } = polarToCartesian(cx, cy, innerR + radius / 2, start);
+      positions.set(d.name, {
+        x: tooltipX,
+        y: tooltipY
+      });
+      return drawArcs(d.children, {
+        radius,
+        innerR: innerR + radius + ringPadding,
+        initialAngle: start,
+        childColor: fillColor,
+        nestedActiveTooltipIndex: currentTooltipIndex
+      }, depth + 1);
+    });
+  }
+  drawArcs(data.children, {
+    radius: thickness,
+    innerR: innerRadius,
+    initialAngle: startAngle
+  });
+  var layerClass = clsx('recharts-sunburst', className);
+  return /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {
+    value: tooltipPortal
+  }, /*#__PURE__*/React.createElement(RechartsWrapper, {
+    className: className,
+    width: width
+    // Sunburst doesn't support `style` property, why?
+    ,
+    height: height,
+    ref: node => {
+      if (tooltipPortal == null && node != null) {
+        setTooltipPortal(node);
+      }
+    },
+    onMouseEnter: undefined,
+    onMouseLeave: undefined,
+    onClick: undefined,
+    onMouseMove: undefined,
+    onMouseDown: undefined,
+    onMouseUp: undefined,
+    onContextMenu: undefined,
+    onDoubleClick: undefined,
+    onTouchStart: undefined,
+    onTouchMove: undefined,
+    onTouchEnd: undefined
+  }, /*#__PURE__*/React.createElement(Surface, {
+    width: width,
+    height: height
+  }, /*#__PURE__*/React.createElement(Layer, {
+    className: layerClass
+  }, sectors), /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: {
+      dataKey,
+      data,
+      stroke,
+      fill,
+      nameKey,
+      positions
+    }
+  }), children)));
+};
+export var SunburstChart = props => {
+  var _props$className;
+  return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+    preloadedState: preloadedState,
+    reduxStoreName: (_props$className = props.className) !== null && _props$className !== void 0 ? _props$className : 'SunburstChart'
+  }, /*#__PURE__*/React.createElement(ReportChartSize, {
+    width: props.width,
+    height: props.height
+  }), /*#__PURE__*/React.createElement(ReportChartMargin, {
+    margin: defaultSunburstMargin
+  }), /*#__PURE__*/React.createElement(SunburstChartImpl, props));
+};
Index: node_modules/recharts/es6/chart/Treemap.js
===================================================================
--- node_modules/recharts/es6/chart/Treemap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/Treemap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,784 @@
+var _excluded = ["width", "height", "className", "style", "children", "type"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { PureComponent } from 'react';
+import omit from 'es-toolkit/compat/omit';
+import get from 'es-toolkit/compat/get';
+import { Layer } from '../container/Layer';
+import { Surface } from '../container/Surface';
+import { Polygon } from '../shape/Polygon';
+import { Rectangle } from '../shape/Rectangle';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { COLOR_PANEL } from '../util/Constants';
+import { isNan, uniqueId } from '../util/DataUtils';
+import { getStringSize } from '../util/DOMUtils';
+import { Global } from '../util/Global';
+import { ReportChartMargin, ReportChartSize } from '../context/chartLayoutContext';
+import { TooltipPortalContext } from '../context/tooltipPortalContext';
+import { RechartsWrapper } from './RechartsWrapper';
+import { setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { RechartsStoreProvider } from '../state/RechartsStoreProvider';
+import { useAppDispatch } from '../state/hooks';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { CSSTransitionAnimate } from '../animation/CSSTransitionAnimate';
+var NODE_VALUE_KEY = 'value';
+
+/**
+ * This is what end users defines as `data` on Treemap.
+ */
+
+/**
+ * This is what is returned from `squarify`, the final treemap data structure
+ * that gets rendered and is stored in
+ */
+
+export var treemapPayloadSearcher = (data, activeIndex) => {
+  return get(data, activeIndex);
+};
+export var addToTreemapNodeIndex = function addToTreemapNodeIndex(indexInChildrenArr) {
+  var activeTooltipIndexSoFar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+  return "".concat(activeTooltipIndexSoFar, "children[").concat(indexInChildrenArr, "]");
+};
+var options = {
+  chartName: 'Treemap',
+  defaultTooltipEventType: 'item',
+  validateTooltipEventTypes: ['item'],
+  tooltipPayloadSearcher: treemapPayloadSearcher,
+  eventEmitter: undefined
+};
+export var computeNode = _ref => {
+  var {
+    depth,
+    node,
+    index,
+    dataKey,
+    nameKey,
+    nestedActiveTooltipIndex
+  } = _ref;
+  var currentTooltipIndex = depth === 0 ? '' : addToTreemapNodeIndex(index, nestedActiveTooltipIndex);
+  var {
+    children
+  } = node;
+  var childDepth = depth + 1;
+  var computedChildren = children && children.length ? children.map((child, i) => computeNode({
+    depth: childDepth,
+    node: child,
+    index: i,
+    dataKey,
+    nameKey,
+    nestedActiveTooltipIndex: currentTooltipIndex
+  })) : null;
+  var nodeValue;
+  if (children && children.length) {
+    nodeValue = computedChildren.reduce((result, child) => result + child[NODE_VALUE_KEY], 0);
+  } else {
+    // TODO need to verify dataKey
+    nodeValue = isNan(node[dataKey]) || node[dataKey] <= 0 ? 0 : node[dataKey];
+  }
+  return _objectSpread(_objectSpread({}, node), {}, {
+    children: computedChildren,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    name: getValueByDataKey(node, nameKey, ''),
+    [NODE_VALUE_KEY]: nodeValue,
+    depth,
+    index,
+    tooltipIndex: currentTooltipIndex
+  });
+};
+var filterRect = node => ({
+  x: node.x,
+  y: node.y,
+  width: node.width,
+  height: node.height
+});
+
+// Compute the area for each child based on value & scale.
+var getAreaOfChildren = (children, areaValueRatio) => {
+  var ratio = areaValueRatio < 0 ? 0 : areaValueRatio;
+  return children.map(child => {
+    var area = child[NODE_VALUE_KEY] * ratio;
+    return _objectSpread(_objectSpread({}, child), {}, {
+      area: isNan(area) || area <= 0 ? 0 : area
+    });
+  });
+};
+
+// Computes the score for the specified row, as the worst aspect ratio.
+var getWorstScore = (row, parentSize, aspectRatio) => {
+  var parentArea = parentSize * parentSize;
+  var rowArea = row.area * row.area;
+  var {
+    min,
+    max
+  } = row.reduce((result, child) => ({
+    min: Math.min(result.min, child.area),
+    max: Math.max(result.max, child.area)
+  }), {
+    min: Infinity,
+    max: 0
+  });
+  return rowArea ? Math.max(parentArea * max * aspectRatio / rowArea, rowArea / (parentArea * min * aspectRatio)) : Infinity;
+};
+var horizontalPosition = (row, parentSize, parentRect, isFlush) => {
+  var rowHeight = parentSize ? Math.round(row.area / parentSize) : 0;
+  if (isFlush || rowHeight > parentRect.height) {
+    rowHeight = parentRect.height;
+  }
+  var curX = parentRect.x;
+  var child;
+  for (var i = 0, len = row.length; i < len; i++) {
+    child = row[i];
+    child.x = curX;
+    child.y = parentRect.y;
+    child.height = rowHeight;
+    child.width = Math.min(rowHeight ? Math.round(child.area / rowHeight) : 0, parentRect.x + parentRect.width - curX);
+    curX += child.width;
+  }
+  // add the remain x to the last one of row
+  child.width += parentRect.x + parentRect.width - curX;
+  return _objectSpread(_objectSpread({}, parentRect), {}, {
+    y: parentRect.y + rowHeight,
+    height: parentRect.height - rowHeight
+  });
+};
+var verticalPosition = (row, parentSize, parentRect, isFlush) => {
+  var rowWidth = parentSize ? Math.round(row.area / parentSize) : 0;
+  if (isFlush || rowWidth > parentRect.width) {
+    rowWidth = parentRect.width;
+  }
+  var curY = parentRect.y;
+  var child;
+  for (var i = 0, len = row.length; i < len; i++) {
+    child = row[i];
+    child.x = parentRect.x;
+    child.y = curY;
+    child.width = rowWidth;
+    child.height = Math.min(rowWidth ? Math.round(child.area / rowWidth) : 0, parentRect.y + parentRect.height - curY);
+    curY += child.height;
+  }
+  if (child) {
+    child.height += parentRect.y + parentRect.height - curY;
+  }
+  return _objectSpread(_objectSpread({}, parentRect), {}, {
+    x: parentRect.x + rowWidth,
+    width: parentRect.width - rowWidth
+  });
+};
+var position = (row, parentSize, parentRect, isFlush) => {
+  if (parentSize === parentRect.width) {
+    return horizontalPosition(row, parentSize, parentRect, isFlush);
+  }
+  return verticalPosition(row, parentSize, parentRect, isFlush);
+};
+
+// Recursively arranges the specified node's children into squarified rows.
+var squarify = (node, aspectRatio) => {
+  var {
+    children
+  } = node;
+  if (children && children.length) {
+    var rect = filterRect(node);
+    // maybe a bug
+    var row = [];
+    var best = Infinity; // the best row score so far
+    var child, score; // the current row score
+    var size = Math.min(rect.width, rect.height); // initial orientation
+    var scaleChildren = getAreaOfChildren(children, rect.width * rect.height / node[NODE_VALUE_KEY]);
+    var tempChildren = scaleChildren.slice();
+    row.area = 0;
+    while (tempChildren.length > 0) {
+      // row first
+      // eslint-disable-next-line prefer-destructuring
+      row.push(child = tempChildren[0]);
+      row.area += child.area;
+      score = getWorstScore(row, size, aspectRatio);
+      if (score <= best) {
+        // continue with this orientation
+        tempChildren.shift();
+        best = score;
+      } else {
+        // abort, and try a different orientation
+        row.area -= row.pop().area;
+        rect = position(row, size, rect, false);
+        size = Math.min(rect.width, rect.height);
+        row.length = row.area = 0;
+        best = Infinity;
+      }
+    }
+    if (row.length) {
+      rect = position(row, size, rect, true);
+      row.length = row.area = 0;
+    }
+    return _objectSpread(_objectSpread({}, node), {}, {
+      children: scaleChildren.map(c => squarify(c, aspectRatio))
+    });
+  }
+  return node;
+};
+var defaultState = {
+  isAnimationFinished: false,
+  formatRoot: null,
+  currentRoot: null,
+  nestIndex: []
+};
+function ContentItem(_ref2) {
+  var {
+    content,
+    nodeProps,
+    type,
+    colorPanel,
+    onMouseEnter,
+    onMouseLeave,
+    onClick
+  } = _ref2;
+  if (/*#__PURE__*/React.isValidElement(content)) {
+    return /*#__PURE__*/React.createElement(Layer, {
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick
+    }, /*#__PURE__*/React.cloneElement(content, nodeProps));
+  }
+  if (typeof content === 'function') {
+    return /*#__PURE__*/React.createElement(Layer, {
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick
+    }, content(nodeProps));
+  }
+  // optimize default shape
+  var {
+    x,
+    y,
+    width,
+    height,
+    index
+  } = nodeProps;
+  var arrow = null;
+  if (width > 10 && height > 10 && nodeProps.children && type === 'nest') {
+    arrow = /*#__PURE__*/React.createElement(Polygon, {
+      points: [{
+        x: x + 2,
+        y: y + height / 2
+      }, {
+        x: x + 6,
+        y: y + height / 2 + 3
+      }, {
+        x: x + 2,
+        y: y + height / 2 + 6
+      }]
+    });
+  }
+  var text = null;
+  var nameSize = getStringSize(nodeProps.name);
+  if (width > 20 && height > 20 && nameSize.width < width && nameSize.height < height) {
+    text = /*#__PURE__*/React.createElement("text", {
+      x: x + 8,
+      y: y + height / 2 + 7,
+      fontSize: 14
+    }, nodeProps.name);
+  }
+  var colors = colorPanel || COLOR_PANEL;
+  return /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement(Rectangle, _extends({
+    fill: nodeProps.depth < 2 ? colors[index % colors.length] : 'rgba(255,255,255,0)',
+    stroke: "#fff"
+  }, omit(nodeProps, ['children']), {
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onClick: onClick,
+    "data-recharts-item-index": nodeProps.tooltipIndex
+  })), arrow, text);
+}
+function ContentItemWithEvents(props) {
+  var dispatch = useAppDispatch();
+  var activeCoordinate = props.nodeProps ? {
+    x: props.nodeProps.x + props.nodeProps.width / 2,
+    y: props.nodeProps.y + props.nodeProps.height / 2
+  } : null;
+  var onMouseEnter = () => {
+    dispatch(setActiveMouseOverItemIndex({
+      activeIndex: props.nodeProps.tooltipIndex,
+      activeDataKey: props.dataKey,
+      activeCoordinate
+    }));
+  };
+  var onMouseLeave = () => {
+    // clearing state on mouseLeaveItem causes re-rendering issues
+    // we don't actually want to do this for TreeMap - we clear state when we leave the entire chart instead
+  };
+  var onClick = () => {
+    dispatch(setActiveClickItemIndex({
+      activeIndex: props.nodeProps.tooltipIndex,
+      activeDataKey: props.dataKey,
+      activeCoordinate
+    }));
+  };
+  return /*#__PURE__*/React.createElement(ContentItem, _extends({}, props, {
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onClick: onClick
+  }));
+}
+function getTooltipEntrySettings(_ref3) {
+  var {
+    props,
+    currentRoot
+  } = _ref3;
+  var {
+    dataKey,
+    nameKey,
+    stroke,
+    fill
+  } = props;
+  return {
+    dataDefinedOnItem: currentRoot,
+    positions: undefined,
+    // TODO I think Treemap has the capability of computing positions and supporting defaultIndex? Except it doesn't yet
+    settings: {
+      stroke,
+      strokeWidth: undefined,
+      fill,
+      dataKey,
+      nameKey,
+      name: undefined,
+      // Each TreemapNode has its own name
+      hide: false,
+      type: undefined,
+      color: fill,
+      unit: ''
+    }
+  };
+}
+
+// Why is margin not a treemap prop? No clue. Probably it should be
+var defaultTreemapMargin = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+class TreemapWithState extends PureComponent {
+  constructor() {
+    super(...arguments);
+    _defineProperty(this, "state", _objectSpread({}, defaultState));
+    _defineProperty(this, "handleAnimationEnd", () => {
+      var {
+        onAnimationEnd
+      } = this.props;
+      this.setState({
+        isAnimationFinished: true
+      });
+      if (typeof onAnimationEnd === 'function') {
+        onAnimationEnd();
+      }
+    });
+    _defineProperty(this, "handleAnimationStart", () => {
+      var {
+        onAnimationStart
+      } = this.props;
+      this.setState({
+        isAnimationFinished: false
+      });
+      if (typeof onAnimationStart === 'function') {
+        onAnimationStart();
+      }
+    });
+    _defineProperty(this, "handleTouchMove", (_state, e) => {
+      var touchEvent = e.touches[0];
+      var target = document.elementFromPoint(touchEvent.clientX, touchEvent.clientY);
+      if (!target || !target.getAttribute) {
+        return;
+      }
+      var itemIndex = target.getAttribute('data-recharts-item-index');
+      var activeNode = treemapPayloadSearcher(this.state.formatRoot, itemIndex);
+      if (!activeNode) {
+        return;
+      }
+      var {
+        dataKey,
+        dispatch
+      } = this.props;
+      var activeCoordinate = {
+        x: activeNode.x + activeNode.width / 2,
+        y: activeNode.y + activeNode.height / 2
+      };
+
+      // Treemap does not support onTouchMove prop, but it could
+      // onTouchMove?.(activeNode, Number(itemIndex), e);
+      dispatch(setActiveMouseOverItemIndex({
+        activeIndex: itemIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+    });
+  }
+  static getDerivedStateFromProps(nextProps, prevState) {
+    if (nextProps.data !== prevState.prevData || nextProps.type !== prevState.prevType || nextProps.width !== prevState.prevWidth || nextProps.height !== prevState.prevHeight || nextProps.dataKey !== prevState.prevDataKey || nextProps.aspectRatio !== prevState.prevAspectRatio) {
+      var root = computeNode({
+        depth: 0,
+        // @ts-expect-error missing properties
+        node: {
+          children: nextProps.data,
+          x: 0,
+          y: 0,
+          width: nextProps.width,
+          height: nextProps.height
+        },
+        index: 0,
+        dataKey: nextProps.dataKey,
+        nameKey: nextProps.nameKey
+      });
+      var formatRoot = squarify(root, nextProps.aspectRatio);
+      return _objectSpread(_objectSpread({}, prevState), {}, {
+        formatRoot,
+        currentRoot: root,
+        nestIndex: [root],
+        prevAspectRatio: nextProps.aspectRatio,
+        prevData: nextProps.data,
+        prevWidth: nextProps.width,
+        prevHeight: nextProps.height,
+        prevDataKey: nextProps.dataKey,
+        prevType: nextProps.type
+      });
+    }
+    return null;
+  }
+  handleMouseEnter(node, e) {
+    e.persist();
+    var {
+      onMouseEnter
+    } = this.props;
+    if (onMouseEnter) {
+      onMouseEnter(node, e);
+    }
+  }
+  handleMouseLeave(node, e) {
+    e.persist();
+    var {
+      onMouseLeave
+    } = this.props;
+    if (onMouseLeave) {
+      onMouseLeave(node, e);
+    }
+  }
+  handleClick(node) {
+    var {
+      onClick,
+      type
+    } = this.props;
+    if (type === 'nest' && node.children) {
+      var {
+        width,
+        height,
+        dataKey,
+        nameKey,
+        aspectRatio
+      } = this.props;
+      var root = computeNode({
+        depth: 0,
+        node: _objectSpread(_objectSpread({}, node), {}, {
+          x: 0,
+          y: 0,
+          width,
+          height
+        }),
+        index: 0,
+        dataKey,
+        nameKey,
+        // with Treemap nesting, should this continue nesting the index or start from empty string?
+        nestedActiveTooltipIndex: node.tooltipIndex
+      });
+      var formatRoot = squarify(root, aspectRatio);
+      var {
+        nestIndex
+      } = this.state;
+      nestIndex.push(node);
+      this.setState({
+        formatRoot,
+        currentRoot: root,
+        nestIndex
+      });
+    }
+    if (onClick) {
+      onClick(node);
+    }
+  }
+  handleNestIndex(node, i) {
+    var {
+      nestIndex
+    } = this.state;
+    var {
+      width,
+      height,
+      dataKey,
+      nameKey,
+      aspectRatio
+    } = this.props;
+    var root = computeNode({
+      depth: 0,
+      node: _objectSpread(_objectSpread({}, node), {}, {
+        x: 0,
+        y: 0,
+        width,
+        height
+      }),
+      index: 0,
+      dataKey,
+      nameKey,
+      // with Treemap nesting, should this continue nesting the index or start from empty string?
+      nestedActiveTooltipIndex: node.tooltipIndex
+    });
+    var formatRoot = squarify(root, aspectRatio);
+    nestIndex = nestIndex.slice(0, i + 1);
+    this.setState({
+      formatRoot,
+      currentRoot: node,
+      nestIndex
+    });
+  }
+  renderItem(content, nodeProps, isLeaf) {
+    var {
+      isAnimationActive,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      isUpdateAnimationActive,
+      type,
+      colorPanel,
+      dataKey
+    } = this.props;
+    var {
+      isAnimationFinished
+    } = this.state;
+    var {
+      width,
+      height,
+      x,
+      y,
+      depth
+    } = nodeProps;
+    var translateX = parseInt("".concat((Math.random() * 2 - 1) * width), 10);
+    var event = {};
+    if (isLeaf || type === 'nest') {
+      event = {
+        onMouseEnter: this.handleMouseEnter.bind(this, nodeProps),
+        onMouseLeave: this.handleMouseLeave.bind(this, nodeProps),
+        onClick: this.handleClick.bind(this, nodeProps)
+      };
+    }
+    if (!isAnimationActive) {
+      return /*#__PURE__*/React.createElement(Layer, event, /*#__PURE__*/React.createElement(ContentItemWithEvents, {
+        content: content,
+        dataKey: dataKey,
+        nodeProps: _objectSpread(_objectSpread({}, nodeProps), {}, {
+          isAnimationActive: false,
+          isUpdateAnimationActive: false,
+          width,
+          height,
+          x,
+          y
+        }),
+        type: type,
+        colorPanel: colorPanel
+      }));
+    }
+    return /*#__PURE__*/React.createElement(CSSTransitionAnimate, {
+      from: "translate(".concat(translateX, "px, ").concat(translateX, "px)"),
+      to: "translate(0, 0)",
+      attributeName: "transform",
+      begin: animationBegin,
+      easing: animationEasing,
+      isActive: isAnimationActive,
+      duration: animationDuration,
+      onAnimationStart: this.handleAnimationStart,
+      onAnimationEnd: this.handleAnimationEnd
+    }, style => /*#__PURE__*/React.createElement(Layer, _extends({}, event, {
+      style: style
+    }), depth > 2 && !isAnimationFinished ? null : /*#__PURE__*/React.createElement(ContentItemWithEvents, {
+      content: content,
+      dataKey: dataKey,
+      nodeProps: _objectSpread(_objectSpread({}, nodeProps), {}, {
+        isAnimationActive,
+        isUpdateAnimationActive: !isUpdateAnimationActive,
+        width,
+        height,
+        x,
+        y
+      }),
+      type: type,
+      colorPanel: colorPanel
+    })));
+  }
+  renderNode(root, node) {
+    var {
+      content,
+      type
+    } = this.props;
+    var nodeProps = _objectSpread(_objectSpread(_objectSpread({}, svgPropertiesNoEvents(this.props)), node), {}, {
+      root
+    });
+    var isLeaf = !node.children || !node.children.length;
+    var {
+      currentRoot
+    } = this.state;
+    var isCurrentRootChild = (currentRoot.children || []).filter(item => item.depth === node.depth && item.name === node.name);
+    if (!isCurrentRootChild.length && root.depth && type === 'nest') {
+      return null;
+    }
+    return /*#__PURE__*/React.createElement(Layer, {
+      key: "recharts-treemap-node-".concat(nodeProps.x, "-").concat(nodeProps.y, "-").concat(nodeProps.name),
+      className: "recharts-treemap-depth-".concat(node.depth)
+    }, this.renderItem(content, nodeProps, isLeaf), node.children && node.children.length ? node.children.map(child => this.renderNode(node, child)) : null);
+  }
+  renderAllNodes() {
+    var {
+      formatRoot
+    } = this.state;
+    if (!formatRoot) {
+      return null;
+    }
+    return this.renderNode(formatRoot, formatRoot);
+  }
+
+  // render nest treemap
+  renderNestIndex() {
+    var {
+      nameKey,
+      nestIndexContent
+    } = this.props;
+    var {
+      nestIndex
+    } = this.state;
+    return /*#__PURE__*/React.createElement("div", {
+      className: "recharts-treemap-nest-index-wrapper",
+      style: {
+        marginTop: '8px',
+        textAlign: 'center'
+      }
+    }, nestIndex.map((item, i) => {
+      // TODO need to verify nameKey type
+      var name = get(item, nameKey, 'root');
+      var content = null;
+      if (/*#__PURE__*/React.isValidElement(nestIndexContent)) {
+        content = /*#__PURE__*/React.cloneElement(nestIndexContent, item, i);
+      }
+      if (typeof nestIndexContent === 'function') {
+        content = nestIndexContent(item, i);
+      } else {
+        content = name;
+      }
+      return (
+        /*#__PURE__*/
+        // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
+        React.createElement("div", {
+          onClick: this.handleNestIndex.bind(this, item, i),
+          key: "nest-index-".concat(uniqueId()),
+          className: "recharts-treemap-nest-index-box",
+          style: {
+            cursor: 'pointer',
+            display: 'inline-block',
+            padding: '0 7px',
+            background: '#000',
+            color: '#fff',
+            marginRight: '3px'
+          }
+        }, content)
+      );
+    }));
+  }
+  render() {
+    var _this$props = this.props,
+      {
+        width,
+        height,
+        className,
+        style,
+        children,
+        type
+      } = _this$props,
+      others = _objectWithoutProperties(_this$props, _excluded);
+    var attrs = svgPropertiesNoEvents(others);
+    return /*#__PURE__*/React.createElement(TooltipPortalContext.Provider, {
+      value: this.state.tooltipPortal
+    }, /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+      fn: getTooltipEntrySettings,
+      args: {
+        props: this.props,
+        currentRoot: this.state.currentRoot
+      }
+    }), /*#__PURE__*/React.createElement(RechartsWrapper, {
+      className: className,
+      style: style,
+      width: width,
+      height: height,
+      ref: node => {
+        if (this.state.tooltipPortal == null) {
+          this.setState({
+            tooltipPortal: node
+          });
+        }
+      },
+      onMouseEnter: undefined,
+      onMouseLeave: undefined,
+      onClick: undefined,
+      onMouseMove: undefined,
+      onMouseDown: undefined,
+      onMouseUp: undefined,
+      onContextMenu: undefined,
+      onDoubleClick: undefined,
+      onTouchStart: undefined,
+      onTouchMove: this.handleTouchMove,
+      onTouchEnd: undefined
+    }, /*#__PURE__*/React.createElement(Surface, _extends({}, attrs, {
+      width: width,
+      height: type === 'nest' ? height - 30 : height
+    }), this.renderAllNodes(), children), type === 'nest' && this.renderNestIndex()));
+  }
+}
+_defineProperty(TreemapWithState, "displayName", 'Treemap');
+_defineProperty(TreemapWithState, "defaultProps", {
+  aspectRatio: 0.5 * (1 + Math.sqrt(5)),
+  dataKey: 'value',
+  nameKey: 'name',
+  type: 'flat',
+  isAnimationActive: !Global.isSsr,
+  isUpdateAnimationActive: !Global.isSsr,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'linear'
+});
+function TreemapDispatchInject(props) {
+  var dispatch = useAppDispatch();
+  return /*#__PURE__*/React.createElement(TreemapWithState, _extends({}, props, {
+    dispatch: dispatch
+  }));
+}
+export function Treemap(props) {
+  var _props$className;
+  var {
+    width,
+    height
+  } = props;
+  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: (_props$className = props.className) !== null && _props$className !== void 0 ? _props$className : 'Treemap'
+  }, /*#__PURE__*/React.createElement(ReportChartSize, {
+    width: width,
+    height: height
+  }), /*#__PURE__*/React.createElement(ReportChartMargin, {
+    margin: defaultTreemapMargin
+  }), /*#__PURE__*/React.createElement(TreemapDispatchInject, props));
+}
Index: node_modules/recharts/es6/chart/types.js
===================================================================
--- node_modules/recharts/es6/chart/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/chart/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/component/ActivePoints.js
===================================================================
--- node_modules/recharts/es6/component/ActivePoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/ActivePoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,75 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { cloneElement, isValidElement } from 'react';
+import { adaptEventHandlers } from '../util/types';
+import { filterProps } from '../util/ReactUtils';
+import { Dot } from '../shape/Dot';
+import { Layer } from '../container/Layer';
+import { useAppSelector } from '../state/hooks';
+import { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { useActiveTooltipDataPoints } from '../hooks';
+import { isNullish } from '../util/DataUtils';
+var renderActivePoint = _ref => {
+  var {
+    point,
+    childIndex,
+    mainColor,
+    activeDot,
+    dataKey
+  } = _ref;
+  if (activeDot === false || point.x == null || point.y == null) {
+    return null;
+  }
+  var dotProps = _objectSpread(_objectSpread({
+    index: childIndex,
+    dataKey,
+    cx: point.x,
+    cy: point.y,
+    r: 4,
+    fill: mainColor !== null && mainColor !== void 0 ? mainColor : 'none',
+    strokeWidth: 2,
+    stroke: '#fff',
+    payload: point.payload,
+    value: point.value
+  }, filterProps(activeDot, false)), adaptEventHandlers(activeDot));
+  var dot;
+  if (/*#__PURE__*/isValidElement(activeDot)) {
+    // @ts-expect-error element cloning does not have types
+    dot = /*#__PURE__*/cloneElement(activeDot, dotProps);
+  } else if (typeof activeDot === 'function') {
+    dot = activeDot(dotProps);
+  } else {
+    dot = /*#__PURE__*/React.createElement(Dot, dotProps);
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-active-dot"
+  }, dot);
+};
+export function ActivePoints(_ref2) {
+  var {
+    points,
+    mainColor,
+    activeDot,
+    itemDataKey
+  } = _ref2;
+  var activeTooltipIndex = useAppSelector(selectActiveTooltipIndex);
+  var activeDataPoints = useActiveTooltipDataPoints();
+  if (points == null || activeDataPoints == null) {
+    return null;
+  }
+  var activePoint = points.find(p => activeDataPoints.includes(p.payload));
+  if (isNullish(activePoint)) {
+    return null;
+  }
+  return renderActivePoint({
+    point: activePoint,
+    childIndex: Number(activeTooltipIndex),
+    mainColor,
+    dataKey: itemDataKey,
+    activeDot
+  });
+}
Index: node_modules/recharts/es6/component/Cell.js
===================================================================
--- node_modules/recharts/es6/component/Cell.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/Cell.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+/**
+ * @fileOverview Cross
+ */
+
+export var Cell = _props => null;
+Cell.displayName = 'Cell';
Index: node_modules/recharts/es6/component/Cursor.js
===================================================================
--- node_modules/recharts/es6/component/Cursor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/Cursor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,113 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { cloneElement, createElement, isValidElement } from 'react';
+import { clsx } from 'clsx';
+import { Curve } from '../shape/Curve';
+import { Cross } from '../shape/Cross';
+import { getCursorRectangle } from '../util/cursor/getCursorRectangle';
+import { Rectangle } from '../shape/Rectangle';
+import { getRadialCursorPoints } from '../util/cursor/getRadialCursorPoints';
+import { Sector } from '../shape/Sector';
+import { getCursorPoints } from '../util/cursor/getCursorPoints';
+import { filterProps } from '../util/ReactUtils';
+import { useChartLayout, useOffsetInternal } from '../context/chartLayoutContext';
+import { useTooltipAxisBandSize } from '../context/useTooltipAxis';
+import { useChartName } from '../state/selectors/selectors';
+
+/**
+ * If set false, no cursor will be drawn when tooltip is active.
+ * If set an object, the option is the configuration of cursor.
+ * If set a React element, the option is the custom react element of drawing cursor
+ */
+
+export function CursorInternal(props) {
+  var {
+    coordinate,
+    payload,
+    index,
+    offset,
+    tooltipAxisBandSize,
+    layout,
+    cursor,
+    tooltipEventType,
+    chartName
+  } = props;
+
+  // The cursor is a part of the Tooltip, and it should be shown (by default) when the Tooltip is active.
+  var activeCoordinate = coordinate;
+  var activePayload = payload;
+  var activeTooltipIndex = index;
+  if (!cursor || !activeCoordinate || chartName !== 'ScatterChart' && tooltipEventType !== 'axis') {
+    return null;
+  }
+  var restProps, cursorComp;
+  if (chartName === 'ScatterChart') {
+    restProps = activeCoordinate;
+    cursorComp = Cross;
+  } else if (chartName === 'BarChart') {
+    restProps = getCursorRectangle(layout, activeCoordinate, offset, tooltipAxisBandSize);
+    cursorComp = Rectangle;
+  } else if (layout === 'radial') {
+    // @ts-expect-error TODO the state is marked as containing Coordinate but actually in polar charts it contains PolarCoordinate, we should keep the polar state separate
+    var {
+      cx,
+      cy,
+      radius,
+      startAngle,
+      endAngle
+    } = getRadialCursorPoints(activeCoordinate);
+    restProps = {
+      cx,
+      cy,
+      startAngle,
+      endAngle,
+      innerRadius: radius,
+      outerRadius: radius
+    };
+    cursorComp = Sector;
+  } else {
+    restProps = {
+      points: getCursorPoints(layout, activeCoordinate, offset)
+    };
+    cursorComp = Curve;
+  }
+  var extraClassName = typeof cursor === 'object' && 'className' in cursor ? cursor.className : undefined;
+  var cursorProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
+    stroke: '#ccc',
+    pointerEvents: 'none'
+  }, offset), restProps), filterProps(cursor, false)), {}, {
+    payload: activePayload,
+    payloadIndex: activeTooltipIndex,
+    className: clsx('recharts-tooltip-cursor', extraClassName)
+  });
+  return /*#__PURE__*/isValidElement(cursor) ? /*#__PURE__*/cloneElement(cursor, cursorProps) : /*#__PURE__*/createElement(cursorComp, cursorProps);
+}
+
+/*
+ * Cursor is the background, or a highlight,
+ * that shows when user mouses over or activates
+ * an area.
+ *
+ * It usually shows together with a tooltip
+ * to emphasise which part of the chart does the tooltip refer to.
+ */
+export function Cursor(props) {
+  var tooltipAxisBandSize = useTooltipAxisBandSize();
+  var offset = useOffsetInternal();
+  var layout = useChartLayout();
+  var chartName = useChartName();
+  return /*#__PURE__*/React.createElement(CursorInternal, _extends({}, props, {
+    coordinate: props.coordinate,
+    index: props.index,
+    payload: props.payload,
+    offset: offset,
+    layout: layout,
+    tooltipAxisBandSize: tooltipAxisBandSize,
+    chartName: chartName
+  }));
+}
Index: node_modules/recharts/es6/component/Customized.js
===================================================================
--- node_modules/recharts/es6/component/Customized.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/Customized.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+var _excluded = ["component"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Customized
+ */
+import * as React from 'react';
+import { isValidElement, cloneElement, createElement } from 'react';
+import { Layer } from '../container/Layer';
+import { warn } from '../util/LogUtils';
+/**
+ * custom svg elements by rechart instance props and state.
+ * @returns {Object}   svg elements
+ */
+export function Customized(_ref) {
+  var {
+      component
+    } = _ref,
+    props = _objectWithoutProperties(_ref, _excluded);
+  var child;
+  if (/*#__PURE__*/isValidElement(component)) {
+    child = /*#__PURE__*/cloneElement(component, props);
+  } else if (typeof component === 'function') {
+    child = /*#__PURE__*/createElement(component, props);
+  } else {
+    warn(false, "Customized's props `component` must be React.element or Function, but got %s.", typeof component);
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-customized-wrapper"
+  }, child);
+}
+Customized.displayName = 'Customized';
Index: node_modules/recharts/es6/component/DefaultLegendContent.js
===================================================================
--- node_modules/recharts/es6/component/DefaultLegendContent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/DefaultLegendContent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,168 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * @fileOverview Default Legend Content
+ */
+import * as React from 'react';
+import { PureComponent } from 'react';
+import { clsx } from 'clsx';
+import { Surface } from '../container/Surface';
+import { Symbols } from '../shape/Symbols';
+import { adaptEventsOfChild } from '../util/types';
+var SIZE = 32;
+export class DefaultLegendContent extends PureComponent {
+  /**
+   * Render the path of icon
+   * @param data Data of each legend item
+   * @param iconType if defined, it will always render this icon. If undefined then it uses icon from data.type
+   * @return Path element
+   */
+  renderIcon(data, iconType) {
+    var {
+      inactiveColor
+    } = this.props;
+    var halfSize = SIZE / 2;
+    var sixthSize = SIZE / 6;
+    var thirdSize = SIZE / 3;
+    var color = data.inactive ? inactiveColor : data.color;
+    var preferredIcon = iconType !== null && iconType !== void 0 ? iconType : data.type;
+    if (preferredIcon === 'none') {
+      return null;
+    }
+    if (preferredIcon === 'plainline') {
+      return /*#__PURE__*/React.createElement("line", {
+        strokeWidth: 4,
+        fill: "none",
+        stroke: color,
+        strokeDasharray: data.payload.strokeDasharray,
+        x1: 0,
+        y1: halfSize,
+        x2: SIZE,
+        y2: halfSize,
+        className: "recharts-legend-icon"
+      });
+    }
+    if (preferredIcon === 'line') {
+      return /*#__PURE__*/React.createElement("path", {
+        strokeWidth: 4,
+        fill: "none",
+        stroke: color,
+        d: "M0,".concat(halfSize, "h").concat(thirdSize, "\n            A").concat(sixthSize, ",").concat(sixthSize, ",0,1,1,").concat(2 * thirdSize, ",").concat(halfSize, "\n            H").concat(SIZE, "M").concat(2 * thirdSize, ",").concat(halfSize, "\n            A").concat(sixthSize, ",").concat(sixthSize, ",0,1,1,").concat(thirdSize, ",").concat(halfSize),
+        className: "recharts-legend-icon"
+      });
+    }
+    if (preferredIcon === 'rect') {
+      return /*#__PURE__*/React.createElement("path", {
+        stroke: "none",
+        fill: color,
+        d: "M0,".concat(SIZE / 8, "h").concat(SIZE, "v").concat(SIZE * 3 / 4, "h").concat(-SIZE, "z"),
+        className: "recharts-legend-icon"
+      });
+    }
+    if (/*#__PURE__*/React.isValidElement(data.legendIcon)) {
+      var iconProps = _objectSpread({}, data);
+      delete iconProps.legendIcon;
+      return /*#__PURE__*/React.cloneElement(data.legendIcon, iconProps);
+    }
+    return /*#__PURE__*/React.createElement(Symbols, {
+      fill: color,
+      cx: halfSize,
+      cy: halfSize,
+      size: SIZE,
+      sizeType: "diameter",
+      type: preferredIcon
+    });
+  }
+
+  /**
+   * Draw items of legend
+   * @return Items
+   */
+  renderItems() {
+    var {
+      payload,
+      iconSize,
+      layout,
+      formatter,
+      inactiveColor,
+      iconType
+    } = this.props;
+    var viewBox = {
+      x: 0,
+      y: 0,
+      width: SIZE,
+      height: SIZE
+    };
+    var itemStyle = {
+      display: layout === 'horizontal' ? 'inline-block' : 'block',
+      marginRight: 10
+    };
+    var svgStyle = {
+      display: 'inline-block',
+      verticalAlign: 'middle',
+      marginRight: 4
+    };
+    return payload.map((entry, i) => {
+      var finalFormatter = entry.formatter || formatter;
+      var className = clsx({
+        'recharts-legend-item': true,
+        ["legend-item-".concat(i)]: true,
+        inactive: entry.inactive
+      });
+      if (entry.type === 'none') {
+        return null;
+      }
+      var color = entry.inactive ? inactiveColor : entry.color;
+      var finalValue = finalFormatter ? finalFormatter(entry.value, entry, i) : entry.value;
+      return /*#__PURE__*/React.createElement("li", _extends({
+        className: className,
+        style: itemStyle
+        // eslint-disable-next-line react/no-array-index-key
+        ,
+        key: "legend-item-".concat(i)
+      }, adaptEventsOfChild(this.props, entry, i)), /*#__PURE__*/React.createElement(Surface, {
+        width: iconSize,
+        height: iconSize,
+        viewBox: viewBox,
+        style: svgStyle,
+        "aria-label": "".concat(finalValue, " legend icon")
+      }, this.renderIcon(entry, iconType)), /*#__PURE__*/React.createElement("span", {
+        className: "recharts-legend-item-text",
+        style: {
+          color
+        }
+      }, finalValue));
+    });
+  }
+  render() {
+    var {
+      payload,
+      layout,
+      align
+    } = this.props;
+    if (!payload || !payload.length) {
+      return null;
+    }
+    var finalStyle = {
+      padding: 0,
+      margin: 0,
+      textAlign: layout === 'horizontal' ? align : 'left'
+    };
+    return /*#__PURE__*/React.createElement("ul", {
+      className: "recharts-default-legend",
+      style: finalStyle
+    }, this.renderItems());
+  }
+}
+_defineProperty(DefaultLegendContent, "displayName", 'Legend');
+_defineProperty(DefaultLegendContent, "defaultProps", {
+  align: 'center',
+  iconSize: 14,
+  inactiveColor: '#ccc',
+  layout: 'horizontal',
+  verticalAlign: 'middle'
+});
Index: node_modules/recharts/es6/component/DefaultTooltipContent.js
===================================================================
--- node_modules/recharts/es6/component/DefaultTooltipContent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/DefaultTooltipContent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,119 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * @fileOverview Default Tooltip Content
+ */
+
+import * as React from 'react';
+import sortBy from 'es-toolkit/compat/sortBy';
+import { clsx } from 'clsx';
+import { isNullish, isNumOrStr } from '../util/DataUtils';
+function defaultFormatter(value) {
+  return Array.isArray(value) && isNumOrStr(value[0]) && isNumOrStr(value[1]) ? value.join(' ~ ') : value;
+}
+export var DefaultTooltipContent = props => {
+  var {
+    separator = ' : ',
+    contentStyle = {},
+    itemStyle = {},
+    labelStyle = {},
+    payload,
+    formatter,
+    itemSorter,
+    wrapperClassName,
+    labelClassName,
+    label,
+    labelFormatter,
+    accessibilityLayer = false
+  } = props;
+  var renderContent = () => {
+    if (payload && payload.length) {
+      var listStyle = {
+        padding: 0,
+        margin: 0
+      };
+      var items = (itemSorter ? sortBy(payload, itemSorter) : payload).map((entry, i) => {
+        if (entry.type === 'none') {
+          return null;
+        }
+        var finalFormatter = entry.formatter || formatter || defaultFormatter;
+        var {
+          value,
+          name
+        } = entry;
+        var finalValue = value;
+        var finalName = name;
+        if (finalFormatter) {
+          var formatted = finalFormatter(value, name, entry, i, payload);
+          if (Array.isArray(formatted)) {
+            [finalValue, finalName] = formatted;
+          } else if (formatted != null) {
+            finalValue = formatted;
+          } else {
+            return null;
+          }
+        }
+        var finalItemStyle = _objectSpread({
+          display: 'block',
+          paddingTop: 4,
+          paddingBottom: 4,
+          color: entry.color || '#000'
+        }, itemStyle);
+        return (
+          /*#__PURE__*/
+          // eslint-disable-next-line react/no-array-index-key
+          React.createElement("li", {
+            className: "recharts-tooltip-item",
+            key: "tooltip-item-".concat(i),
+            style: finalItemStyle
+          }, isNumOrStr(finalName) ? /*#__PURE__*/React.createElement("span", {
+            className: "recharts-tooltip-item-name"
+          }, finalName) : null, isNumOrStr(finalName) ? /*#__PURE__*/React.createElement("span", {
+            className: "recharts-tooltip-item-separator"
+          }, separator) : null, /*#__PURE__*/React.createElement("span", {
+            className: "recharts-tooltip-item-value"
+          }, finalValue), /*#__PURE__*/React.createElement("span", {
+            className: "recharts-tooltip-item-unit"
+          }, entry.unit || ''))
+        );
+      });
+      return /*#__PURE__*/React.createElement("ul", {
+        className: "recharts-tooltip-item-list",
+        style: listStyle
+      }, items);
+    }
+    return null;
+  };
+  var finalStyle = _objectSpread({
+    margin: 0,
+    padding: 10,
+    backgroundColor: '#fff',
+    border: '1px solid #ccc',
+    whiteSpace: 'nowrap'
+  }, contentStyle);
+  var finalLabelStyle = _objectSpread({
+    margin: 0
+  }, labelStyle);
+  var hasLabel = !isNullish(label);
+  var finalLabel = hasLabel ? label : '';
+  var wrapperCN = clsx('recharts-default-tooltip', wrapperClassName);
+  var labelCN = clsx('recharts-tooltip-label', labelClassName);
+  if (hasLabel && labelFormatter && payload !== undefined && payload !== null) {
+    finalLabel = labelFormatter(label, payload);
+  }
+  var accessibilityAttributes = accessibilityLayer ? {
+    role: 'status',
+    'aria-live': 'assertive'
+  } : {};
+  return /*#__PURE__*/React.createElement("div", _extends({
+    className: wrapperCN,
+    style: finalStyle
+  }, accessibilityAttributes), /*#__PURE__*/React.createElement("p", {
+    className: labelCN,
+    style: finalLabelStyle
+  }, /*#__PURE__*/React.isValidElement(finalLabel) ? finalLabel : "".concat(finalLabel)), renderContent());
+};
Index: node_modules/recharts/es6/component/Label.js
===================================================================
--- node_modules/recharts/es6/component/Label.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/Label.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,494 @@
+var _excluded = ["offset"],
+  _excluded2 = ["labelRef"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { cloneElement, isValidElement, createElement } from 'react';
+import { clsx } from 'clsx';
+import { Text } from './Text';
+import { findAllByType, filterProps } from '../util/ReactUtils';
+import { isNumOrStr, isNumber, isPercent, getPercentValue, uniqueId, mathSign, isNullish } from '../util/DataUtils';
+import { polarToCartesian } from '../util/PolarUtils';
+import { useViewBox } from '../context/chartLayoutContext';
+import { useAppSelector } from '../state/hooks';
+import { selectPolarViewBox } from '../state/selectors/polarAxisSelectors';
+var getLabel = props => {
+  var {
+    value,
+    formatter
+  } = props;
+  var label = isNullish(props.children) ? value : props.children;
+  if (typeof formatter === 'function') {
+    return formatter(label);
+  }
+  return label;
+};
+export var isLabelContentAFunction = content => {
+  return content != null && typeof content === 'function';
+};
+var getDeltaAngle = (startAngle, endAngle) => {
+  var sign = mathSign(endAngle - startAngle);
+  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);
+  return sign * deltaAngle;
+};
+var renderRadialLabel = (labelProps, label, attrs, viewBox) => {
+  var {
+    position,
+    offset,
+    className
+  } = labelProps;
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle,
+    clockWise
+  } = viewBox;
+  var radius = (innerRadius + outerRadius) / 2;
+  var deltaAngle = getDeltaAngle(startAngle, endAngle);
+  var sign = deltaAngle >= 0 ? 1 : -1;
+  var labelAngle, direction;
+  if (position === 'insideStart') {
+    labelAngle = startAngle + sign * offset;
+    direction = clockWise;
+  } else if (position === 'insideEnd') {
+    labelAngle = endAngle - sign * offset;
+    direction = !clockWise;
+  } else if (position === 'end') {
+    labelAngle = endAngle + sign * offset;
+    direction = clockWise;
+  }
+  direction = deltaAngle <= 0 ? direction : !direction;
+  var startPoint = polarToCartesian(cx, cy, radius, labelAngle);
+  var endPoint = polarToCartesian(cx, cy, radius, labelAngle + (direction ? 1 : -1) * 359);
+  var path = "M".concat(startPoint.x, ",").concat(startPoint.y, "\n    A").concat(radius, ",").concat(radius, ",0,1,").concat(direction ? 0 : 1, ",\n    ").concat(endPoint.x, ",").concat(endPoint.y);
+  var id = isNullish(labelProps.id) ? uniqueId('recharts-radial-line-') : labelProps.id;
+  return /*#__PURE__*/React.createElement("text", _extends({}, attrs, {
+    dominantBaseline: "central",
+    className: clsx('recharts-radial-bar-label', className)
+  }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("path", {
+    id: id,
+    d: path
+  })), /*#__PURE__*/React.createElement("textPath", {
+    xlinkHref: "#".concat(id)
+  }, label));
+};
+var getAttrsOfPolarLabel = (viewBox, offset, position) => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle
+  } = viewBox;
+  var midAngle = (startAngle + endAngle) / 2;
+  if (position === 'outside') {
+    var {
+      x: _x,
+      y: _y
+    } = polarToCartesian(cx, cy, outerRadius + offset, midAngle);
+    return {
+      x: _x,
+      y: _y,
+      textAnchor: _x >= cx ? 'start' : 'end',
+      verticalAnchor: 'middle'
+    };
+  }
+  if (position === 'center') {
+    return {
+      x: cx,
+      y: cy,
+      textAnchor: 'middle',
+      verticalAnchor: 'middle'
+    };
+  }
+  if (position === 'centerTop') {
+    return {
+      x: cx,
+      y: cy,
+      textAnchor: 'middle',
+      verticalAnchor: 'start'
+    };
+  }
+  if (position === 'centerBottom') {
+    return {
+      x: cx,
+      y: cy,
+      textAnchor: 'middle',
+      verticalAnchor: 'end'
+    };
+  }
+  var r = (innerRadius + outerRadius) / 2;
+  var {
+    x,
+    y
+  } = polarToCartesian(cx, cy, r, midAngle);
+  return {
+    x,
+    y,
+    textAnchor: 'middle',
+    verticalAnchor: 'middle'
+  };
+};
+var getAttrsOfCartesianLabel = (props, viewBox) => {
+  var {
+    parentViewBox,
+    offset,
+    position
+  } = props;
+  var {
+    x,
+    y,
+    width,
+    height
+  } = viewBox;
+
+  // Define vertical offsets and position inverts based on the value being positive or negative
+  var verticalSign = height >= 0 ? 1 : -1;
+  var verticalOffset = verticalSign * offset;
+  var verticalEnd = verticalSign > 0 ? 'end' : 'start';
+  var verticalStart = verticalSign > 0 ? 'start' : 'end';
+
+  // Define horizontal offsets and position inverts based on the value being positive or negative
+  var horizontalSign = width >= 0 ? 1 : -1;
+  var horizontalOffset = horizontalSign * offset;
+  var horizontalEnd = horizontalSign > 0 ? 'end' : 'start';
+  var horizontalStart = horizontalSign > 0 ? 'start' : 'end';
+  if (position === 'top') {
+    var attrs = {
+      x: x + width / 2,
+      y: y - verticalSign * offset,
+      textAnchor: 'middle',
+      verticalAnchor: verticalEnd
+    };
+    return _objectSpread(_objectSpread({}, attrs), parentViewBox ? {
+      height: Math.max(y - parentViewBox.y, 0),
+      width
+    } : {});
+  }
+  if (position === 'bottom') {
+    var _attrs = {
+      x: x + width / 2,
+      y: y + height + verticalOffset,
+      textAnchor: 'middle',
+      verticalAnchor: verticalStart
+    };
+    return _objectSpread(_objectSpread({}, _attrs), parentViewBox ? {
+      height: Math.max(parentViewBox.y + parentViewBox.height - (y + height), 0),
+      width
+    } : {});
+  }
+  if (position === 'left') {
+    var _attrs2 = {
+      x: x - horizontalOffset,
+      y: y + height / 2,
+      textAnchor: horizontalEnd,
+      verticalAnchor: 'middle'
+    };
+    return _objectSpread(_objectSpread({}, _attrs2), parentViewBox ? {
+      width: Math.max(_attrs2.x - parentViewBox.x, 0),
+      height
+    } : {});
+  }
+  if (position === 'right') {
+    var _attrs3 = {
+      x: x + width + horizontalOffset,
+      y: y + height / 2,
+      textAnchor: horizontalStart,
+      verticalAnchor: 'middle'
+    };
+    return _objectSpread(_objectSpread({}, _attrs3), parentViewBox ? {
+      width: Math.max(parentViewBox.x + parentViewBox.width - _attrs3.x, 0),
+      height
+    } : {});
+  }
+  var sizeAttrs = parentViewBox ? {
+    width,
+    height
+  } : {};
+  if (position === 'insideLeft') {
+    return _objectSpread({
+      x: x + horizontalOffset,
+      y: y + height / 2,
+      textAnchor: horizontalStart,
+      verticalAnchor: 'middle'
+    }, sizeAttrs);
+  }
+  if (position === 'insideRight') {
+    return _objectSpread({
+      x: x + width - horizontalOffset,
+      y: y + height / 2,
+      textAnchor: horizontalEnd,
+      verticalAnchor: 'middle'
+    }, sizeAttrs);
+  }
+  if (position === 'insideTop') {
+    return _objectSpread({
+      x: x + width / 2,
+      y: y + verticalOffset,
+      textAnchor: 'middle',
+      verticalAnchor: verticalStart
+    }, sizeAttrs);
+  }
+  if (position === 'insideBottom') {
+    return _objectSpread({
+      x: x + width / 2,
+      y: y + height - verticalOffset,
+      textAnchor: 'middle',
+      verticalAnchor: verticalEnd
+    }, sizeAttrs);
+  }
+  if (position === 'insideTopLeft') {
+    return _objectSpread({
+      x: x + horizontalOffset,
+      y: y + verticalOffset,
+      textAnchor: horizontalStart,
+      verticalAnchor: verticalStart
+    }, sizeAttrs);
+  }
+  if (position === 'insideTopRight') {
+    return _objectSpread({
+      x: x + width - horizontalOffset,
+      y: y + verticalOffset,
+      textAnchor: horizontalEnd,
+      verticalAnchor: verticalStart
+    }, sizeAttrs);
+  }
+  if (position === 'insideBottomLeft') {
+    return _objectSpread({
+      x: x + horizontalOffset,
+      y: y + height - verticalOffset,
+      textAnchor: horizontalStart,
+      verticalAnchor: verticalEnd
+    }, sizeAttrs);
+  }
+  if (position === 'insideBottomRight') {
+    return _objectSpread({
+      x: x + width - horizontalOffset,
+      y: y + height - verticalOffset,
+      textAnchor: horizontalEnd,
+      verticalAnchor: verticalEnd
+    }, sizeAttrs);
+  }
+  if (!!position && typeof position === 'object' && (isNumber(position.x) || isPercent(position.x)) && (isNumber(position.y) || isPercent(position.y))) {
+    return _objectSpread({
+      x: x + getPercentValue(position.x, width),
+      y: y + getPercentValue(position.y, height),
+      textAnchor: 'end',
+      verticalAnchor: 'end'
+    }, sizeAttrs);
+  }
+  return _objectSpread({
+    x: x + width / 2,
+    y: y + height / 2,
+    textAnchor: 'middle',
+    verticalAnchor: 'middle'
+  }, sizeAttrs);
+};
+var isPolar = viewBox => 'cx' in viewBox && isNumber(viewBox.cx);
+export function Label(_ref) {
+  var {
+      offset = 5
+    } = _ref,
+    restProps = _objectWithoutProperties(_ref, _excluded);
+  var props = _objectSpread({
+    offset
+  }, restProps);
+  var {
+    viewBox: viewBoxFromProps,
+    position,
+    value,
+    children,
+    content,
+    className = '',
+    textBreakAll,
+    labelRef
+  } = props;
+  var polarViewBox = useAppSelector(selectPolarViewBox);
+  var cartesianViewBox = useViewBox();
+
+  /*
+   * I am not proud about this solution but it's a quick fix for https://github.com/recharts/recharts/issues/6030#issuecomment-3155352460.
+   * What we should really do is split Label into two components: CartesianLabel and PolarLabel and then handle their respective viewBoxes separately.
+   * Also other components should set its own viewBox in a context so that we can fix https://github.com/recharts/recharts/issues/6156
+   */
+  var resolvedViewBox = position === 'center' ? cartesianViewBox : polarViewBox !== null && polarViewBox !== void 0 ? polarViewBox : cartesianViewBox;
+  var viewBox = viewBoxFromProps || resolvedViewBox;
+  if (!viewBox || isNullish(value) && isNullish(children) && ! /*#__PURE__*/isValidElement(content) && typeof content !== 'function') {
+    return null;
+  }
+  var propsWithViewBox = _objectSpread(_objectSpread({}, props), {}, {
+    viewBox
+  });
+  if (/*#__PURE__*/isValidElement(content)) {
+    var {
+        labelRef: _
+      } = propsWithViewBox,
+      propsWithoutLabelRef = _objectWithoutProperties(propsWithViewBox, _excluded2);
+    return /*#__PURE__*/cloneElement(content, propsWithoutLabelRef);
+  }
+  var label;
+  if (typeof content === 'function') {
+    label = /*#__PURE__*/createElement(content, propsWithViewBox);
+    if (/*#__PURE__*/isValidElement(label)) {
+      return label;
+    }
+  } else {
+    label = getLabel(props);
+  }
+  var isPolarLabel = isPolar(viewBox);
+  var attrs = filterProps(props, true);
+  if (isPolarLabel && (position === 'insideStart' || position === 'insideEnd' || position === 'end')) {
+    return renderRadialLabel(props, label, attrs, viewBox);
+  }
+  var positionAttrs = isPolarLabel ? getAttrsOfPolarLabel(viewBox, props.offset, props.position) : getAttrsOfCartesianLabel(props, viewBox);
+  return /*#__PURE__*/React.createElement(Text, _extends({
+    ref: labelRef,
+    className: clsx('recharts-label', className)
+  }, attrs, positionAttrs, {
+    breakAll: textBreakAll
+  }), label);
+}
+Label.displayName = 'Label';
+var parseViewBox = props => {
+  var {
+    cx,
+    cy,
+    angle,
+    startAngle,
+    endAngle,
+    r,
+    radius,
+    innerRadius,
+    outerRadius,
+    x,
+    y,
+    top,
+    left,
+    width,
+    height,
+    clockWise,
+    labelViewBox
+  } = props;
+  if (labelViewBox) {
+    return labelViewBox;
+  }
+  if (isNumber(width) && isNumber(height)) {
+    if (isNumber(x) && isNumber(y)) {
+      return {
+        x,
+        y,
+        width,
+        height
+      };
+    }
+    if (isNumber(top) && isNumber(left)) {
+      return {
+        x: top,
+        y: left,
+        width,
+        height
+      };
+    }
+  }
+  if (isNumber(x) && isNumber(y)) {
+    return {
+      x,
+      y,
+      width: 0,
+      height: 0
+    };
+  }
+  if (isNumber(cx) && isNumber(cy)) {
+    return {
+      cx,
+      cy,
+      startAngle: startAngle || angle || 0,
+      endAngle: endAngle || angle || 0,
+      innerRadius: innerRadius || 0,
+      outerRadius: outerRadius || radius || r || 0,
+      clockWise
+    };
+  }
+  if (props.viewBox) {
+    return props.viewBox;
+  }
+  return undefined;
+};
+var parseLabel = (label, viewBox, labelRef) => {
+  if (!label) {
+    return null;
+  }
+  var commonProps = {
+    viewBox,
+    labelRef
+  };
+  if (label === true) {
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit"
+    }, commonProps));
+  }
+  if (isNumOrStr(label)) {
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit",
+      value: label
+    }, commonProps));
+  }
+  if (/*#__PURE__*/isValidElement(label)) {
+    if (label.type === Label) {
+      return /*#__PURE__*/cloneElement(label, _objectSpread({
+        key: 'label-implicit'
+      }, commonProps));
+    }
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit",
+      content: label
+    }, commonProps));
+  }
+  if (isLabelContentAFunction(label)) {
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit",
+      content: label
+    }, commonProps));
+  }
+  if (label && typeof label === 'object') {
+    return /*#__PURE__*/React.createElement(Label, _extends({}, label, {
+      key: "label-implicit"
+    }, commonProps));
+  }
+  return null;
+};
+var renderCallByParent = function renderCallByParent(parentProps, viewBox) {
+  var checkPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  if (!parentProps || !parentProps.children && checkPropsLabel && !parentProps.label) {
+    return null;
+  }
+  var {
+    children,
+    labelRef
+  } = parentProps;
+  var parentViewBox = parseViewBox(parentProps);
+  var explicitChildren = findAllByType(children, Label).map((child, index) => {
+    return /*#__PURE__*/cloneElement(child, {
+      viewBox: viewBox || parentViewBox,
+      // eslint-disable-next-line react/no-array-index-key
+      key: "label-".concat(index)
+    });
+  });
+  if (!checkPropsLabel) {
+    return explicitChildren;
+  }
+  var implicitLabel = parseLabel(parentProps.label, viewBox || parentViewBox, labelRef);
+  return [implicitLabel, ...explicitChildren];
+};
+Label.parseViewBox = parseViewBox;
+Label.renderCallByParent = renderCallByParent;
Index: node_modules/recharts/es6/component/LabelList.js
===================================================================
--- node_modules/recharts/es6/component/LabelList.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/LabelList.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,102 @@
+var _excluded = ["valueAccessor"],
+  _excluded2 = ["data", "dataKey", "clockWise", "id", "textBreakAll"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { cloneElement } from 'react';
+import last from 'es-toolkit/compat/last';
+import { Label, isLabelContentAFunction } from './Label';
+import { Layer } from '../container/Layer';
+import { findAllByType, filterProps } from '../util/ReactUtils';
+import { getValueByDataKey } from '../util/ChartUtils';
+import { isNullish } from '../util/DataUtils';
+var defaultAccessor = entry => Array.isArray(entry.value) ? last(entry.value) : entry.value;
+export function LabelList(_ref) {
+  var {
+      valueAccessor = defaultAccessor
+    } = _ref,
+    restProps = _objectWithoutProperties(_ref, _excluded);
+  var {
+      data,
+      dataKey,
+      clockWise,
+      id,
+      textBreakAll
+    } = restProps,
+    others = _objectWithoutProperties(restProps, _excluded2);
+  if (!data || !data.length) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-label-list"
+  }, data.map((entry, index) => {
+    var value = isNullish(dataKey) ? valueAccessor(entry, index) : getValueByDataKey(entry && entry.payload, dataKey);
+    var idProps = isNullish(id) ? {} : {
+      id: "".concat(id, "-").concat(index)
+    };
+    return /*#__PURE__*/React.createElement(Label, _extends({}, filterProps(entry, true), others, idProps, {
+      parentViewBox: entry.parentViewBox,
+      value: value,
+      textBreakAll: textBreakAll,
+      viewBox: Label.parseViewBox(isNullish(clockWise) ? entry : _objectSpread(_objectSpread({}, entry), {}, {
+        clockWise
+      })),
+      key: "label-".concat(index) // eslint-disable-line react/no-array-index-key
+      ,
+      index: index
+    }));
+  }));
+}
+LabelList.displayName = 'LabelList';
+function parseLabelList(label, data) {
+  if (!label) {
+    return null;
+  }
+  if (label === true) {
+    return /*#__PURE__*/React.createElement(LabelList, {
+      key: "labelList-implicit",
+      data: data
+    });
+  }
+  if (/*#__PURE__*/React.isValidElement(label) || isLabelContentAFunction(label)) {
+    return /*#__PURE__*/React.createElement(LabelList, {
+      key: "labelList-implicit",
+      data: data,
+      content: label
+    });
+  }
+  if (typeof label === 'object') {
+    return /*#__PURE__*/React.createElement(LabelList, _extends({
+      data: data
+    }, label, {
+      key: "labelList-implicit"
+    }));
+  }
+  return null;
+}
+function renderCallByParent(parentProps, data) {
+  var checkPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  if (!parentProps || !parentProps.children && checkPropsLabel && !parentProps.label) {
+    return null;
+  }
+  var {
+    children
+  } = parentProps;
+  var explicitChildren = findAllByType(children, LabelList).map((child, index) => /*#__PURE__*/cloneElement(child, {
+    data,
+    // eslint-disable-next-line react/no-array-index-key
+    key: "labelList-".concat(index)
+  }));
+  if (!checkPropsLabel) {
+    return explicitChildren;
+  }
+  var implicitLabelList = parseLabelList(parentProps.label, data);
+  return [implicitLabelList, ...explicitChildren];
+}
+LabelList.renderCallByParent = renderCallByParent;
Index: node_modules/recharts/es6/component/Legend.js
===================================================================
--- node_modules/recharts/es6/component/Legend.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/Legend.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,170 @@
+var _excluded = ["contextPayload"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { PureComponent, useEffect } from 'react';
+import { createPortal } from 'react-dom';
+import { useLegendPortal } from '../context/legendPortalContext';
+import { DefaultLegendContent } from './DefaultLegendContent';
+import { isNumber } from '../util/DataUtils';
+import { getUniqPayload } from '../util/payload/getUniqPayload';
+import { useLegendPayload } from '../context/legendPayloadContext';
+import { useElementOffset } from '../util/useElementOffset';
+import { useChartHeight, useChartWidth, useMargin } from '../context/chartLayoutContext';
+import { setLegendSettings, setLegendSize } from '../state/legendSlice';
+import { useAppDispatch } from '../state/hooks';
+function defaultUniqBy(entry) {
+  return entry.value;
+}
+function LegendContent(props) {
+  var {
+      contextPayload
+    } = props,
+    otherProps = _objectWithoutProperties(props, _excluded);
+  var finalPayload = getUniqPayload(contextPayload, props.payloadUniqBy, defaultUniqBy);
+  var contentProps = _objectSpread(_objectSpread({}, otherProps), {}, {
+    payload: finalPayload
+  });
+  if (/*#__PURE__*/React.isValidElement(props.content)) {
+    return /*#__PURE__*/React.cloneElement(props.content, contentProps);
+  }
+  if (typeof props.content === 'function') {
+    return /*#__PURE__*/React.createElement(props.content, contentProps);
+  }
+  return /*#__PURE__*/React.createElement(DefaultLegendContent, contentProps);
+}
+function getDefaultPosition(style, props, margin, chartWidth, chartHeight, box) {
+  var {
+    layout,
+    align,
+    verticalAlign
+  } = props;
+  var hPos, vPos;
+  if (!style || (style.left === undefined || style.left === null) && (style.right === undefined || style.right === null)) {
+    if (align === 'center' && layout === 'vertical') {
+      hPos = {
+        left: ((chartWidth || 0) - box.width) / 2
+      };
+    } else {
+      hPos = align === 'right' ? {
+        right: margin && margin.right || 0
+      } : {
+        left: margin && margin.left || 0
+      };
+    }
+  }
+  if (!style || (style.top === undefined || style.top === null) && (style.bottom === undefined || style.bottom === null)) {
+    if (verticalAlign === 'middle') {
+      vPos = {
+        top: ((chartHeight || 0) - box.height) / 2
+      };
+    } else {
+      vPos = verticalAlign === 'bottom' ? {
+        bottom: margin && margin.bottom || 0
+      } : {
+        top: margin && margin.top || 0
+      };
+    }
+  }
+  return _objectSpread(_objectSpread({}, hPos), vPos);
+}
+function LegendSettingsDispatcher(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setLegendSettings(props));
+  }, [dispatch, props]);
+  return null;
+}
+function LegendSizeDispatcher(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setLegendSize(props));
+    return () => {
+      dispatch(setLegendSize({
+        width: 0,
+        height: 0
+      }));
+    };
+  }, [dispatch, props]);
+  return null;
+}
+function LegendWrapper(props) {
+  var contextPayload = useLegendPayload();
+  var legendPortalFromContext = useLegendPortal();
+  var margin = useMargin();
+  var {
+    width: widthFromProps,
+    height: heightFromProps,
+    wrapperStyle,
+    portal: portalFromProps
+  } = props;
+  // The contextPayload is not used directly inside the hook, but we need the onBBoxUpdate call
+  // when the payload changes, therefore it's here as a dependency.
+  var [lastBoundingBox, updateBoundingBox] = useElementOffset([contextPayload]);
+  var chartWidth = useChartWidth();
+  var chartHeight = useChartHeight();
+  var maxWidth = chartWidth - (margin.left || 0) - (margin.right || 0);
+  // eslint-disable-next-line @typescript-eslint/no-use-before-define
+  var widthOrHeight = Legend.getWidthOrHeight(props.layout, heightFromProps, widthFromProps, maxWidth);
+  // if the user supplies their own portal, only use their defined wrapper styles
+  var outerStyle = portalFromProps ? wrapperStyle : _objectSpread(_objectSpread({
+    position: 'absolute',
+    width: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.width) || widthFromProps || 'auto',
+    height: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.height) || heightFromProps || 'auto'
+  }, getDefaultPosition(wrapperStyle, props, margin, chartWidth, chartHeight, lastBoundingBox)), wrapperStyle);
+  var legendPortal = portalFromProps !== null && portalFromProps !== void 0 ? portalFromProps : legendPortalFromContext;
+  if (legendPortal == null) {
+    return null;
+  }
+  var legendElement = /*#__PURE__*/React.createElement("div", {
+    className: "recharts-legend-wrapper",
+    style: outerStyle,
+    ref: updateBoundingBox
+  }, /*#__PURE__*/React.createElement(LegendSettingsDispatcher, {
+    layout: props.layout,
+    align: props.align,
+    verticalAlign: props.verticalAlign,
+    itemSorter: props.itemSorter
+  }), /*#__PURE__*/React.createElement(LegendSizeDispatcher, {
+    width: lastBoundingBox.width,
+    height: lastBoundingBox.height
+  }), /*#__PURE__*/React.createElement(LegendContent, _extends({}, props, widthOrHeight, {
+    margin: margin,
+    chartWidth: chartWidth,
+    chartHeight: chartHeight,
+    contextPayload: contextPayload
+  })));
+  return /*#__PURE__*/createPortal(legendElement, legendPortal);
+}
+export class Legend extends PureComponent {
+  static getWidthOrHeight(layout, height, width, maxWidth) {
+    if (layout === 'vertical' && isNumber(height)) {
+      return {
+        height
+      };
+    }
+    if (layout === 'horizontal') {
+      return {
+        width: width || maxWidth
+      };
+    }
+    return null;
+  }
+  render() {
+    return /*#__PURE__*/React.createElement(LegendWrapper, this.props);
+  }
+}
+_defineProperty(Legend, "displayName", 'Legend');
+_defineProperty(Legend, "defaultProps", {
+  align: 'center',
+  iconSize: 14,
+  itemSorter: 'value',
+  layout: 'horizontal',
+  verticalAlign: 'bottom'
+});
Index: node_modules/recharts/es6/component/ResponsiveContainer.js
===================================================================
--- node_modules/recharts/es6/component/ResponsiveContainer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/ResponsiveContainer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,141 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { clsx } from 'clsx';
+import * as React from 'react';
+import { forwardRef, cloneElement, useState, useImperativeHandle, useRef, useEffect, useMemo, useCallback } from 'react';
+import throttle from 'es-toolkit/compat/throttle';
+import { isPercent } from '../util/DataUtils';
+import { warn } from '../util/LogUtils';
+export var ResponsiveContainer = /*#__PURE__*/forwardRef((_ref, ref) => {
+  var {
+    aspect,
+    initialDimension = {
+      width: -1,
+      height: -1
+    },
+    width = '100%',
+    height = '100%',
+    /*
+     * default min-width to 0 if not specified - 'auto' causes issues with flexbox
+     * https://github.com/recharts/recharts/issues/172
+     */
+    minWidth = 0,
+    minHeight,
+    maxHeight,
+    children,
+    debounce = 0,
+    id,
+    className,
+    onResize,
+    style = {}
+  } = _ref;
+  var containerRef = useRef(null);
+  var onResizeRef = useRef();
+  onResizeRef.current = onResize;
+  useImperativeHandle(ref, () => containerRef.current);
+  var [sizes, setSizes] = useState({
+    containerWidth: initialDimension.width,
+    containerHeight: initialDimension.height
+  });
+  var setContainerSize = useCallback((newWidth, newHeight) => {
+    setSizes(prevState => {
+      var roundedWidth = Math.round(newWidth);
+      var roundedHeight = Math.round(newHeight);
+      if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {
+        return prevState;
+      }
+      return {
+        containerWidth: roundedWidth,
+        containerHeight: roundedHeight
+      };
+    });
+  }, []);
+  useEffect(() => {
+    var callback = entries => {
+      var _onResizeRef$current;
+      var {
+        width: containerWidth,
+        height: containerHeight
+      } = entries[0].contentRect;
+      setContainerSize(containerWidth, containerHeight);
+      (_onResizeRef$current = onResizeRef.current) === null || _onResizeRef$current === void 0 || _onResizeRef$current.call(onResizeRef, containerWidth, containerHeight);
+    };
+    if (debounce > 0) {
+      callback = throttle(callback, debounce, {
+        trailing: true,
+        leading: false
+      });
+    }
+    var observer = new ResizeObserver(callback);
+    var {
+      width: containerWidth,
+      height: containerHeight
+    } = containerRef.current.getBoundingClientRect();
+    setContainerSize(containerWidth, containerHeight);
+    observer.observe(containerRef.current);
+    return () => {
+      observer.disconnect();
+    };
+  }, [setContainerSize, debounce]);
+  var chartContent = useMemo(() => {
+    var {
+      containerWidth,
+      containerHeight
+    } = sizes;
+    if (containerWidth < 0 || containerHeight < 0) {
+      return null;
+    }
+    warn(isPercent(width) || isPercent(height), "The width(%s) and height(%s) are both fixed numbers,\n       maybe you don't need to use a ResponsiveContainer.", width, height);
+    warn(!aspect || aspect > 0, 'The aspect(%s) must be greater than zero.', aspect);
+    var calculatedWidth = isPercent(width) ? containerWidth : width;
+    var calculatedHeight = isPercent(height) ? containerHeight : height;
+    if (aspect && aspect > 0) {
+      // Preserve the desired aspect ratio
+      if (calculatedWidth) {
+        // Will default to using width for aspect ratio
+        calculatedHeight = calculatedWidth / aspect;
+      } else if (calculatedHeight) {
+        // But we should also take height into consideration
+        calculatedWidth = calculatedHeight * aspect;
+      }
+
+      // if maxHeight is set, overwrite if calculatedHeight is greater than maxHeight
+      if (maxHeight && calculatedHeight > maxHeight) {
+        calculatedHeight = maxHeight;
+      }
+    }
+    warn(calculatedWidth > 0 || calculatedHeight > 0, "The width(%s) and height(%s) of chart should be greater than 0,\n       please check the style of container, or the props width(%s) and height(%s),\n       or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\n       height and width.", calculatedWidth, calculatedHeight, width, height, minWidth, minHeight, aspect);
+    return React.Children.map(children, child => {
+      return /*#__PURE__*/cloneElement(child, {
+        width: calculatedWidth,
+        height: calculatedHeight,
+        // calculate the actual size and override it.
+        style: _objectSpread({
+          width: calculatedWidth,
+          height: calculatedHeight
+        }, child.props.style)
+      });
+    });
+  }, [aspect, children, height, maxHeight, minHeight, minWidth, sizes, width]);
+  return /*#__PURE__*/React.createElement("div", {
+    id: id ? "".concat(id) : undefined,
+    className: clsx('recharts-responsive-container', className),
+    style: _objectSpread(_objectSpread({}, style), {}, {
+      width,
+      height,
+      minWidth,
+      minHeight,
+      maxHeight
+    }),
+    ref: containerRef
+  }, /*#__PURE__*/React.createElement("div", {
+    style: {
+      width: 0,
+      height: 0,
+      overflow: 'visible'
+    }
+  }, chartContent));
+});
Index: node_modules/recharts/es6/component/Text.js
===================================================================
--- node_modules/recharts/es6/component/Text.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/Text.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,249 @@
+var _excluded = ["x", "y", "lineHeight", "capHeight", "scaleToFit", "textAnchor", "verticalAnchor", "fill"],
+  _excluded2 = ["dx", "dy", "angle", "className", "breakAll"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useMemo, forwardRef } from 'react';
+import { clsx } from 'clsx';
+import { isNullish, isNumber, isNumOrStr } from '../util/DataUtils';
+import { Global } from '../util/Global';
+import { filterProps } from '../util/ReactUtils';
+import { getStringSize } from '../util/DOMUtils';
+import { reduceCSSCalc } from '../util/ReduceCSSCalc';
+var BREAKING_SPACES = /[ \f\n\r\t\v\u2028\u2029]+/;
+var calculateWordWidths = _ref => {
+  var {
+    children,
+    breakAll,
+    style
+  } = _ref;
+  try {
+    var words = [];
+    if (!isNullish(children)) {
+      if (breakAll) {
+        words = children.toString().split('');
+      } else {
+        words = children.toString().split(BREAKING_SPACES);
+      }
+    }
+    var wordsWithComputedWidth = words.map(word => ({
+      word,
+      width: getStringSize(word, style).width
+    }));
+    var spaceWidth = breakAll ? 0 : getStringSize('\u00A0', style).width;
+    return {
+      wordsWithComputedWidth,
+      spaceWidth
+    };
+  } catch (_unused) {
+    return null;
+  }
+};
+var calculateWordsByLines = (_ref2, initialWordsWithComputedWith, spaceWidth, lineWidth, scaleToFit) => {
+  var {
+    maxLines,
+    children,
+    style,
+    breakAll
+  } = _ref2;
+  var shouldLimitLines = isNumber(maxLines);
+  var text = children;
+  var calculate = function calculate() {
+    var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+    return words.reduce((result, _ref3) => {
+      var {
+        word,
+        width
+      } = _ref3;
+      var currentLine = result[result.length - 1];
+      if (currentLine && (lineWidth == null || scaleToFit || currentLine.width + width + spaceWidth < Number(lineWidth))) {
+        // Word can be added to an existing line
+        currentLine.words.push(word);
+        currentLine.width += width + spaceWidth;
+      } else {
+        // Add first word to line or word is too long to scaleToFit on existing line
+        var newLine = {
+          words: [word],
+          width
+        };
+        result.push(newLine);
+      }
+      return result;
+    }, []);
+  };
+  var originalResult = calculate(initialWordsWithComputedWith);
+  var findLongestLine = words => words.reduce((a, b) => a.width > b.width ? a : b);
+  if (!shouldLimitLines || scaleToFit) {
+    return originalResult;
+  }
+  var overflows = originalResult.length > maxLines || findLongestLine(originalResult).width > Number(lineWidth);
+  if (!overflows) {
+    return originalResult;
+  }
+  var suffix = '…';
+  var checkOverflow = index => {
+    var tempText = text.slice(0, index);
+    var words = calculateWordWidths({
+      breakAll,
+      style,
+      children: tempText + suffix
+    }).wordsWithComputedWidth;
+    var result = calculate(words);
+    var doesOverflow = result.length > maxLines || findLongestLine(result).width > Number(lineWidth);
+    return [doesOverflow, result];
+  };
+  var start = 0;
+  var end = text.length - 1;
+  var iterations = 0;
+  var trimmedResult;
+  while (start <= end && iterations <= text.length - 1) {
+    var middle = Math.floor((start + end) / 2);
+    var prev = middle - 1;
+    var [doesPrevOverflow, result] = checkOverflow(prev);
+    var [doesMiddleOverflow] = checkOverflow(middle);
+    if (!doesPrevOverflow && !doesMiddleOverflow) {
+      start = middle + 1;
+    }
+    if (doesPrevOverflow && doesMiddleOverflow) {
+      end = middle - 1;
+    }
+    if (!doesPrevOverflow && doesMiddleOverflow) {
+      trimmedResult = result;
+      break;
+    }
+    iterations++;
+  }
+
+  // Fallback to originalResult (result without trimming) if we cannot find the
+  // where to trim.  This should not happen :tm:
+  return trimmedResult || originalResult;
+};
+var getWordsWithoutCalculate = children => {
+  var words = !isNullish(children) ? children.toString().split(BREAKING_SPACES) : [];
+  return [{
+    words
+  }];
+};
+export var getWordsByLines = _ref4 => {
+  var {
+    width,
+    scaleToFit,
+    children,
+    style,
+    breakAll,
+    maxLines
+  } = _ref4;
+  // Only perform calculations if using features that require them (multiline, scaleToFit)
+  if ((width || scaleToFit) && !Global.isSsr) {
+    var wordsWithComputedWidth, spaceWidth;
+    var wordWidths = calculateWordWidths({
+      breakAll,
+      children,
+      style
+    });
+    if (wordWidths) {
+      var {
+        wordsWithComputedWidth: wcw,
+        spaceWidth: sw
+      } = wordWidths;
+      wordsWithComputedWidth = wcw;
+      spaceWidth = sw;
+    } else {
+      return getWordsWithoutCalculate(children);
+    }
+    return calculateWordsByLines({
+      breakAll,
+      children,
+      maxLines,
+      style
+    }, wordsWithComputedWidth, spaceWidth, width, scaleToFit);
+  }
+  return getWordsWithoutCalculate(children);
+};
+var DEFAULT_FILL = '#808080';
+export var Text = /*#__PURE__*/forwardRef((_ref5, ref) => {
+  var {
+      x: propsX = 0,
+      y: propsY = 0,
+      lineHeight = '1em',
+      // Magic number from d3
+      capHeight = '0.71em',
+      scaleToFit = false,
+      textAnchor = 'start',
+      // Maintain compat with existing charts / default SVG behavior
+      verticalAnchor = 'end',
+      fill = DEFAULT_FILL
+    } = _ref5,
+    props = _objectWithoutProperties(_ref5, _excluded);
+  var wordsByLines = useMemo(() => {
+    return getWordsByLines({
+      breakAll: props.breakAll,
+      children: props.children,
+      maxLines: props.maxLines,
+      scaleToFit,
+      style: props.style,
+      width: props.width
+    });
+  }, [props.breakAll, props.children, props.maxLines, scaleToFit, props.style, props.width]);
+  var {
+      dx,
+      dy,
+      angle,
+      className,
+      breakAll
+    } = props,
+    textProps = _objectWithoutProperties(props, _excluded2);
+  if (!isNumOrStr(propsX) || !isNumOrStr(propsY)) {
+    return null;
+  }
+  var x = propsX + (isNumber(dx) ? dx : 0);
+  var y = propsY + (isNumber(dy) ? dy : 0);
+  var startDy;
+  switch (verticalAnchor) {
+    case 'start':
+      startDy = reduceCSSCalc("calc(".concat(capHeight, ")"));
+      break;
+    case 'middle':
+      startDy = reduceCSSCalc("calc(".concat((wordsByLines.length - 1) / 2, " * -").concat(lineHeight, " + (").concat(capHeight, " / 2))"));
+      break;
+    default:
+      startDy = reduceCSSCalc("calc(".concat(wordsByLines.length - 1, " * -").concat(lineHeight, ")"));
+      break;
+  }
+  var transforms = [];
+  if (scaleToFit) {
+    var lineWidth = wordsByLines[0].width;
+    var {
+      width
+    } = props;
+    transforms.push("scale(".concat(isNumber(width) ? width / lineWidth : 1, ")"));
+  }
+  if (angle) {
+    transforms.push("rotate(".concat(angle, ", ").concat(x, ", ").concat(y, ")"));
+  }
+  if (transforms.length) {
+    textProps.transform = transforms.join(' ');
+  }
+  return /*#__PURE__*/React.createElement("text", _extends({}, filterProps(textProps, true), {
+    ref: ref,
+    x: x,
+    y: y,
+    className: clsx('recharts-text', className),
+    textAnchor: textAnchor,
+    fill: fill.includes('url') ? DEFAULT_FILL : fill
+  }), wordsByLines.map((line, index) => {
+    var words = line.words.join(breakAll ? '' : ' ');
+    return (
+      /*#__PURE__*/
+      // duplicate words will cause duplicate keys
+      // eslint-disable-next-line react/no-array-index-key
+      React.createElement("tspan", {
+        x: x,
+        dy: index === 0 ? startDy : lineHeight,
+        key: "".concat(words, "-").concat(index)
+      }, words)
+    );
+  }));
+});
+Text.displayName = 'Text';
Index: node_modules/recharts/es6/component/Tooltip.js
===================================================================
--- node_modules/recharts/es6/component/Tooltip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/Tooltip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,162 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { useEffect } from 'react';
+import { createPortal } from 'react-dom';
+import { DefaultTooltipContent } from './DefaultTooltipContent';
+import { TooltipBoundingBox } from './TooltipBoundingBox';
+import { Global } from '../util/Global';
+import { getUniqPayload } from '../util/payload/getUniqPayload';
+import { useViewBox } from '../context/chartLayoutContext';
+import { useAccessibilityLayer } from '../context/accessibilityContext';
+import { useElementOffset } from '../util/useElementOffset';
+import { Cursor } from './Cursor';
+import { selectActiveCoordinate, selectActiveLabel, selectIsTooltipActive, selectTooltipPayload } from '../state/selectors/selectors';
+import { useTooltipPortal } from '../context/tooltipPortalContext';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { setTooltipSettingsState } from '../state/tooltipSlice';
+import { useTooltipChartSynchronisation } from '../synchronisation/useChartSynchronisation';
+import { useTooltipEventType } from '../state/selectors/selectTooltipEventType';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+function defaultUniqBy(entry) {
+  return entry.dataKey;
+}
+function renderContent(content, props) {
+  if (/*#__PURE__*/React.isValidElement(content)) {
+    return /*#__PURE__*/React.cloneElement(content, props);
+  }
+  if (typeof content === 'function') {
+    return /*#__PURE__*/React.createElement(content, props);
+  }
+  return /*#__PURE__*/React.createElement(DefaultTooltipContent, props);
+}
+var emptyPayload = [];
+var defaultTooltipProps = {
+  allowEscapeViewBox: {
+    x: false,
+    y: false
+  },
+  animationDuration: 400,
+  animationEasing: 'ease',
+  axisId: 0,
+  contentStyle: {},
+  cursor: true,
+  filterNull: true,
+  isAnimationActive: !Global.isSsr,
+  itemSorter: 'name',
+  itemStyle: {},
+  labelStyle: {},
+  offset: 10,
+  reverseDirection: {
+    x: false,
+    y: false
+  },
+  separator: ' : ',
+  trigger: 'hover',
+  useTranslate3d: false,
+  wrapperStyle: {}
+};
+export function Tooltip(outsideProps) {
+  var props = resolveDefaultProps(outsideProps, defaultTooltipProps);
+  var {
+    active: activeFromProps,
+    allowEscapeViewBox,
+    animationDuration,
+    animationEasing,
+    content,
+    filterNull,
+    isAnimationActive,
+    offset,
+    payloadUniqBy,
+    position,
+    reverseDirection,
+    useTranslate3d,
+    wrapperStyle,
+    cursor,
+    shared,
+    trigger,
+    defaultIndex,
+    portal: portalFromProps,
+    axisId
+  } = props;
+  var dispatch = useAppDispatch();
+  var defaultIndexAsString = typeof defaultIndex === 'number' ? String(defaultIndex) : defaultIndex;
+  useEffect(() => {
+    dispatch(setTooltipSettingsState({
+      shared,
+      trigger,
+      axisId,
+      active: activeFromProps,
+      defaultIndex: defaultIndexAsString
+    }));
+  }, [dispatch, shared, trigger, axisId, activeFromProps, defaultIndexAsString]);
+  var viewBox = useViewBox();
+  var accessibilityLayer = useAccessibilityLayer();
+  var tooltipEventType = useTooltipEventType(shared);
+  var {
+    activeIndex,
+    isActive
+  } = useAppSelector(state => selectIsTooltipActive(state, tooltipEventType, trigger, defaultIndexAsString));
+  var payloadFromRedux = useAppSelector(state => selectTooltipPayload(state, tooltipEventType, trigger, defaultIndexAsString));
+  var labelFromRedux = useAppSelector(state => selectActiveLabel(state, tooltipEventType, trigger, defaultIndexAsString));
+  var coordinate = useAppSelector(state => selectActiveCoordinate(state, tooltipEventType, trigger, defaultIndexAsString));
+  var payload = payloadFromRedux;
+  var tooltipPortalFromContext = useTooltipPortal();
+  /*
+   * The user can set `active=true` on the Tooltip in which case the Tooltip will stay always active,
+   * or `active=false` in which case the Tooltip never shows.
+   *
+   * If the `active` prop is not defined then it will show and hide based on mouse or keyboard activity.
+   */
+  var finalIsActive = activeFromProps !== null && activeFromProps !== void 0 ? activeFromProps : isActive;
+  var [lastBoundingBox, updateBoundingBox] = useElementOffset([payload, finalIsActive]);
+  var finalLabel = tooltipEventType === 'axis' ? labelFromRedux : undefined;
+  useTooltipChartSynchronisation(tooltipEventType, trigger, coordinate, finalLabel, activeIndex, finalIsActive);
+  var tooltipPortal = portalFromProps !== null && portalFromProps !== void 0 ? portalFromProps : tooltipPortalFromContext;
+  if (tooltipPortal == null) {
+    return null;
+  }
+  var finalPayload = payload !== null && payload !== void 0 ? payload : emptyPayload;
+  if (!finalIsActive) {
+    finalPayload = emptyPayload;
+  }
+  if (filterNull && finalPayload.length) {
+    finalPayload = getUniqPayload(payload.filter(entry => entry.value != null && (entry.hide !== true || props.includeHidden)), payloadUniqBy, defaultUniqBy);
+  }
+  var hasPayload = finalPayload.length > 0;
+  var tooltipElement = /*#__PURE__*/React.createElement(TooltipBoundingBox, {
+    allowEscapeViewBox: allowEscapeViewBox,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive,
+    active: finalIsActive,
+    coordinate: coordinate,
+    hasPayload: hasPayload,
+    offset: offset,
+    position: position,
+    reverseDirection: reverseDirection,
+    useTranslate3d: useTranslate3d,
+    viewBox: viewBox,
+    wrapperStyle: wrapperStyle,
+    lastBoundingBox: lastBoundingBox,
+    innerRef: updateBoundingBox,
+    hasPortalFromProps: Boolean(portalFromProps)
+  }, renderContent(content, _objectSpread(_objectSpread({}, props), {}, {
+    // @ts-expect-error renderContent method expects the payload to be mutable, TODO make it immutable
+    payload: finalPayload,
+    label: finalLabel,
+    active: finalIsActive,
+    coordinate,
+    accessibilityLayer
+  })));
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/createPortal(tooltipElement, tooltipPortal), finalIsActive && /*#__PURE__*/React.createElement(Cursor, {
+    cursor: cursor,
+    tooltipEventType: tooltipEventType,
+    coordinate: coordinate,
+    payload: payload,
+    index: activeIndex
+  }));
+}
Index: node_modules/recharts/es6/component/TooltipBoundingBox.js
===================================================================
--- node_modules/recharts/es6/component/TooltipBoundingBox.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/component/TooltipBoundingBox.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { PureComponent } from 'react';
+import { getTooltipTranslate } from '../util/tooltip/translate';
+export class TooltipBoundingBox extends PureComponent {
+  constructor() {
+    super(...arguments);
+    _defineProperty(this, "state", {
+      dismissed: false,
+      dismissedAtCoordinate: {
+        x: 0,
+        y: 0
+      }
+    });
+    _defineProperty(this, "handleKeyDown", event => {
+      if (event.key === 'Escape') {
+        var _this$props$coordinat, _this$props$coordinat2, _this$props$coordinat3, _this$props$coordinat4;
+        this.setState({
+          dismissed: true,
+          dismissedAtCoordinate: {
+            x: (_this$props$coordinat = (_this$props$coordinat2 = this.props.coordinate) === null || _this$props$coordinat2 === void 0 ? void 0 : _this$props$coordinat2.x) !== null && _this$props$coordinat !== void 0 ? _this$props$coordinat : 0,
+            y: (_this$props$coordinat3 = (_this$props$coordinat4 = this.props.coordinate) === null || _this$props$coordinat4 === void 0 ? void 0 : _this$props$coordinat4.y) !== null && _this$props$coordinat3 !== void 0 ? _this$props$coordinat3 : 0
+          }
+        });
+      }
+    });
+  }
+  componentDidMount() {
+    document.addEventListener('keydown', this.handleKeyDown);
+  }
+  componentWillUnmount() {
+    document.removeEventListener('keydown', this.handleKeyDown);
+  }
+  componentDidUpdate() {
+    var _this$props$coordinat5, _this$props$coordinat6;
+    if (!this.state.dismissed) {
+      return;
+    }
+    if (((_this$props$coordinat5 = this.props.coordinate) === null || _this$props$coordinat5 === void 0 ? void 0 : _this$props$coordinat5.x) !== this.state.dismissedAtCoordinate.x || ((_this$props$coordinat6 = this.props.coordinate) === null || _this$props$coordinat6 === void 0 ? void 0 : _this$props$coordinat6.y) !== this.state.dismissedAtCoordinate.y) {
+      this.state.dismissed = false;
+    }
+  }
+  render() {
+    var {
+      active,
+      allowEscapeViewBox,
+      animationDuration,
+      animationEasing,
+      children,
+      coordinate,
+      hasPayload,
+      isAnimationActive,
+      offset,
+      position,
+      reverseDirection,
+      useTranslate3d,
+      viewBox,
+      wrapperStyle,
+      lastBoundingBox,
+      innerRef,
+      hasPortalFromProps
+    } = this.props;
+    var {
+      cssClasses,
+      cssProperties
+    } = getTooltipTranslate({
+      allowEscapeViewBox,
+      coordinate,
+      offsetTopLeft: offset,
+      position,
+      reverseDirection,
+      tooltipBox: {
+        height: lastBoundingBox.height,
+        width: lastBoundingBox.width
+      },
+      useTranslate3d,
+      viewBox
+    });
+
+    // do not use absolute styles if the user has passed a custom portal prop
+    var positionStyles = hasPortalFromProps ? {} : _objectSpread(_objectSpread({
+      transition: isAnimationActive && active ? "transform ".concat(animationDuration, "ms ").concat(animationEasing) : undefined
+    }, cssProperties), {}, {
+      pointerEvents: 'none',
+      visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden',
+      position: 'absolute',
+      top: 0,
+      left: 0
+    });
+    var outerStyle = _objectSpread(_objectSpread({}, positionStyles), {}, {
+      visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden'
+    }, wrapperStyle);
+    return (
+      /*#__PURE__*/
+      // This element allow listening to the `Escape` key. See https://github.com/recharts/recharts/pull/2925
+      React.createElement("div", {
+        // @ts-expect-error typescript library does not recognize xmlns attribute, but it's required for an HTML chunk inside SVG.
+        xmlns: "http://www.w3.org/1999/xhtml",
+        tabIndex: -1,
+        className: cssClasses,
+        style: outerStyle,
+        ref: innerRef
+      }, children)
+    );
+  }
+}
Index: node_modules/recharts/es6/container/ClipPathProvider.js
===================================================================
--- node_modules/recharts/es6/container/ClipPathProvider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/container/ClipPathProvider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+import * as React from 'react';
+import { createContext, useContext, useState } from 'react';
+import { uniqueId } from '../util/DataUtils';
+import { usePlotArea } from '../hooks';
+var ClipPathIdContext = /*#__PURE__*/createContext(undefined);
+
+/**
+ * Generates a unique clip path ID for use in SVG elements,
+ * and puts it in a context provider.
+ *
+ * To read the clip path ID, use the `useClipPathId` hook,
+ * or render `<ClipPath>` component which will automatically use the ID from this context.
+ *
+ * @param props children - React children to be wrapped by the provider
+ * @returns React Context Provider
+ */
+export var ClipPathProvider = _ref => {
+  var {
+    children
+  } = _ref;
+  var [clipPathId] = useState("".concat(uniqueId('recharts'), "-clip"));
+  var plotArea = usePlotArea();
+  if (plotArea == null) {
+    return null;
+  }
+  var {
+    x,
+    y,
+    width,
+    height
+  } = plotArea;
+  return /*#__PURE__*/React.createElement(ClipPathIdContext.Provider, {
+    value: clipPathId
+  }, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("clipPath", {
+    id: clipPathId
+  }, /*#__PURE__*/React.createElement("rect", {
+    x: x,
+    y: y,
+    height: height,
+    width: width
+  }))), children);
+};
+export var useClipPathId = () => {
+  return useContext(ClipPathIdContext);
+};
Index: node_modules/recharts/es6/container/Layer.js
===================================================================
--- node_modules/recharts/es6/container/Layer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/container/Layer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+var _excluded = ["children", "className"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { filterProps } from '../util/ReactUtils';
+export var Layer = /*#__PURE__*/React.forwardRef((props, ref) => {
+  var {
+      children,
+      className
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var layerClass = clsx('recharts-layer', className);
+  return /*#__PURE__*/React.createElement("g", _extends({
+    className: layerClass
+  }, filterProps(others, true), {
+    ref: ref
+  }), children);
+});
Index: node_modules/recharts/es6/container/RootSurface.js
===================================================================
--- node_modules/recharts/es6/container/RootSurface.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/container/RootSurface.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+var _excluded = ["children"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { useChartHeight, useChartWidth } from '../context/chartLayoutContext';
+import { useAccessibilityLayer } from '../context/accessibilityContext';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { Surface } from './Surface';
+import { useAppSelector } from '../state/hooks';
+import { selectBrushDimensions } from '../state/selectors/brushSelectors';
+import { isPositiveNumber } from '../util/isWellBehavedNumber';
+var FULL_WIDTH_AND_HEIGHT = {
+  width: '100%',
+  height: '100%'
+};
+var MainChartSurface = /*#__PURE__*/forwardRef((props, ref) => {
+  var width = useChartWidth();
+  var height = useChartHeight();
+  var hasAccessibilityLayer = useAccessibilityLayer();
+  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {
+    return null;
+  }
+  var {
+    children,
+    otherAttributes,
+    title,
+    desc
+  } = props;
+  var tabIndex, role;
+  if (typeof otherAttributes.tabIndex === 'number') {
+    tabIndex = otherAttributes.tabIndex;
+  } else {
+    tabIndex = hasAccessibilityLayer ? 0 : undefined;
+  }
+  if (typeof otherAttributes.role === 'string') {
+    role = otherAttributes.role;
+  } else {
+    role = hasAccessibilityLayer ? 'application' : undefined;
+  }
+  return /*#__PURE__*/React.createElement(Surface, _extends({}, otherAttributes, {
+    title: title,
+    desc: desc,
+    role: role,
+    tabIndex: tabIndex,
+    width: width,
+    height: height,
+    style: FULL_WIDTH_AND_HEIGHT,
+    ref: ref
+  }), children);
+});
+var BrushPanoramaSurface = _ref => {
+  var {
+    children
+  } = _ref;
+  var brushDimensions = useAppSelector(selectBrushDimensions);
+  if (!brushDimensions) {
+    return null;
+  }
+  var {
+    width,
+    height,
+    y,
+    x
+  } = brushDimensions;
+  return /*#__PURE__*/React.createElement(Surface, {
+    width: width,
+    height: height,
+    x: x,
+    y: y
+  }, children);
+};
+export var RootSurface = /*#__PURE__*/forwardRef((_ref2, ref) => {
+  var {
+      children
+    } = _ref2,
+    rest = _objectWithoutProperties(_ref2, _excluded);
+  var isPanorama = useIsPanorama();
+  if (isPanorama) {
+    return /*#__PURE__*/React.createElement(BrushPanoramaSurface, null, children);
+  }
+  return /*#__PURE__*/React.createElement(MainChartSurface, _extends({
+    ref: ref
+  }, rest), children);
+});
Index: node_modules/recharts/es6/container/Surface.js
===================================================================
--- node_modules/recharts/es6/container/Surface.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/container/Surface.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+var _excluded = ["children", "width", "height", "viewBox", "className", "style", "title", "desc"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Surface
+ */
+import * as React from 'react';
+import { forwardRef } from 'react';
+import { clsx } from 'clsx';
+import { filterProps } from '../util/ReactUtils';
+export var Surface = /*#__PURE__*/forwardRef((props, ref) => {
+  var {
+      children,
+      width,
+      height,
+      viewBox,
+      className,
+      style,
+      title,
+      desc
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var svgView = viewBox || {
+    width,
+    height,
+    x: 0,
+    y: 0
+  };
+  var layerClass = clsx('recharts-surface', className);
+  return /*#__PURE__*/React.createElement("svg", _extends({}, filterProps(others, true, 'svg'), {
+    className: layerClass,
+    width: width,
+    height: height,
+    style: style,
+    viewBox: "".concat(svgView.x, " ").concat(svgView.y, " ").concat(svgView.width, " ").concat(svgView.height),
+    ref: ref
+  }), /*#__PURE__*/React.createElement("title", null, title), /*#__PURE__*/React.createElement("desc", null, desc), children);
+});
Index: node_modules/recharts/es6/context/ErrorBarContext.js
===================================================================
--- node_modules/recharts/es6/context/ErrorBarContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/ErrorBarContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+var _excluded = ["children"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { createContext, useContext, useEffect } from 'react';
+import { addErrorBar, removeErrorBar } from '../state/errorBarSlice';
+import { useAppDispatch } from '../state/hooks';
+import { useGraphicalItemId } from './RegisterGraphicalItemId';
+var noop = () => {};
+var initialContextState = {
+  data: [],
+  xAxisId: 'xAxis-0',
+  yAxisId: 'yAxis-0',
+  dataPointFormatter: () => ({
+    x: 0,
+    y: 0,
+    value: 0
+  }),
+  errorBarOffset: 0
+};
+var ErrorBarContext = /*#__PURE__*/createContext(initialContextState);
+export function SetErrorBarContext(props) {
+  var {
+      children
+    } = props,
+    rest = _objectWithoutProperties(props, _excluded);
+  return /*#__PURE__*/React.createElement(ErrorBarContext.Provider, {
+    value: rest
+  }, children);
+}
+export var useErrorBarContext = () => useContext(ErrorBarContext);
+export function ReportErrorBarSettings(props) {
+  var dispatch = useAppDispatch();
+  var graphicalItemId = useGraphicalItemId();
+  useEffect(() => {
+    if (graphicalItemId == null) {
+      // ErrorBar outside a graphical item context does not do anything.
+      return noop;
+    }
+    var payload = {
+      itemId: graphicalItemId,
+      errorBar: props
+    };
+    dispatch(addErrorBar(payload));
+    return () => {
+      dispatch(removeErrorBar(payload));
+    };
+  }, [dispatch, graphicalItemId, props]);
+  return null;
+}
Index: node_modules/recharts/es6/context/PanoramaContext.js
===================================================================
--- node_modules/recharts/es6/context/PanoramaContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/PanoramaContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { createContext, useContext } from 'react';
+var PanoramaContext = /*#__PURE__*/createContext(null);
+export var useIsPanorama = () => useContext(PanoramaContext) != null;
+export var PanoramaContextProvider = _ref => {
+  var {
+    children
+  } = _ref;
+  return /*#__PURE__*/React.createElement(PanoramaContext.Provider, {
+    value: true
+  }, children);
+};
Index: node_modules/recharts/es6/context/RegisterGraphicalItemId.js
===================================================================
--- node_modules/recharts/es6/context/RegisterGraphicalItemId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/RegisterGraphicalItemId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import * as React from 'react';
+import { createContext, useContext } from 'react';
+import { useUniqueId } from '../util/useUniqueId';
+var GraphicalItemIdContext = /*#__PURE__*/createContext(undefined);
+export var RegisterGraphicalItemId = _ref => {
+  var {
+    id,
+    type,
+    children
+  } = _ref;
+  var resolvedId = useUniqueId("recharts-".concat(type), id);
+  return /*#__PURE__*/React.createElement(GraphicalItemIdContext.Provider, {
+    value: resolvedId
+  }, children(resolvedId));
+};
+export function useGraphicalItemId() {
+  return useContext(GraphicalItemIdContext);
+}
Index: node_modules/recharts/es6/context/accessibilityContext.js
===================================================================
--- node_modules/recharts/es6/context/accessibilityContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/accessibilityContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+import { useAppSelector } from '../state/hooks';
+export var useAccessibilityLayer = () => useAppSelector(state => state.rootProps.accessibilityLayer);
Index: node_modules/recharts/es6/context/brushUpdateContext.js
===================================================================
--- node_modules/recharts/es6/context/brushUpdateContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/brushUpdateContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+import { createContext } from 'react';
+export var BrushUpdateDispatchContext = /*#__PURE__*/createContext(() => {});
Index: node_modules/recharts/es6/context/chartDataContext.js
===================================================================
--- node_modules/recharts/es6/context/chartDataContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/chartDataContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,78 @@
+import { useEffect } from 'react';
+import { setChartData, setComputedData } from '../state/chartDataSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { useIsPanorama } from './PanoramaContext';
+export var ChartDataContextProvider = props => {
+  var {
+    chartData
+  } = props;
+  var dispatch = useAppDispatch();
+  var isPanorama = useIsPanorama();
+  useEffect(() => {
+    if (isPanorama) {
+      // Panorama mode reuses data from the main chart, so we must not overwrite it here.
+      return () => {
+        // there is nothing to clean up
+      };
+    }
+    dispatch(setChartData(chartData));
+    return () => {
+      dispatch(setChartData(undefined));
+    };
+  }, [chartData, dispatch, isPanorama]);
+  return null;
+};
+export var SetComputedData = props => {
+  var {
+    computedData
+  } = props;
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setComputedData(computedData));
+    return () => {
+      dispatch(setChartData(undefined));
+    };
+  }, [computedData, dispatch]);
+  return null;
+};
+var selectChartData = state => state.chartData.chartData;
+
+/**
+ * "data" is the data of the chart - it has no type because this part of recharts is very flexible.
+ * Basically it's an array of "something" and then there's the dataKey property in various places
+ * that's meant to pull other things away from the data.
+ *
+ * Some charts have `data` defined on the chart root, and they will return the array through this hook.
+ * For example: <ComposedChart data={data} />.
+ *
+ * Other charts, such as Pie, have data defined on individual graphical elements.
+ * These charts will return `undefined` through this hook, and you need to read the data from children.
+ * For example: <PieChart><Pie data={data} />
+ *
+ * Some charts also allow setting both - data on the parent, and data on the children at the same time!
+ * However, this particular selector will only return the ones defined on the parent.
+ *
+ * @deprecated use one of the other selectors instead - which one, depends on how do you identify the applicable graphical items.
+ *
+ * @return data array for some charts and undefined for other
+ */
+export var useChartData = () => useAppSelector(selectChartData);
+var selectDataIndex = state => {
+  var {
+    dataStartIndex,
+    dataEndIndex
+  } = state.chartData;
+  return {
+    startIndex: dataStartIndex,
+    endIndex: dataEndIndex
+  };
+};
+
+/**
+ * startIndex and endIndex are data boundaries, set through Brush.
+ *
+ * @return object with startIndex and endIndex
+ */
+export var useDataIndex = () => {
+  return useAppSelector(selectDataIndex);
+};
Index: node_modules/recharts/es6/context/chartLayoutContext.js
===================================================================
--- node_modules/recharts/es6/context/chartLayoutContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/chartLayoutContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,118 @@
+import { useEffect } from 'react';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { setChartSize, setMargin } from '../state/layoutSlice';
+import { selectChartOffsetInternal, selectChartViewBox } from '../state/selectors/selectChartOffsetInternal';
+import { selectChartHeight, selectChartWidth } from '../state/selectors/containerSelectors';
+import { useIsPanorama } from './PanoramaContext';
+import { selectBrushDimensions, selectBrushSettings } from '../state/selectors/brushSelectors';
+export var useViewBox = () => {
+  var _useAppSelector;
+  var panorama = useIsPanorama();
+  var rootViewBox = useAppSelector(selectChartViewBox);
+  var brushDimensions = useAppSelector(selectBrushDimensions);
+  var brushPadding = (_useAppSelector = useAppSelector(selectBrushSettings)) === null || _useAppSelector === void 0 ? void 0 : _useAppSelector.padding;
+  if (!panorama || !brushDimensions || !brushPadding) {
+    return rootViewBox;
+  }
+  return {
+    width: brushDimensions.width - brushPadding.left - brushPadding.right,
+    height: brushDimensions.height - brushPadding.top - brushPadding.bottom,
+    x: brushPadding.left,
+    y: brushPadding.top
+  };
+};
+var manyComponentsThrowErrorsIfOffsetIsUndefined = {
+  top: 0,
+  bottom: 0,
+  left: 0,
+  right: 0,
+  width: 0,
+  height: 0,
+  brushBottom: 0
+};
+/**
+ * For internal use only. If you want this information, `import { useOffset } from 'recharts'` instead.
+ *
+ * Returns the offset of the chart in pixels.
+ *
+ * @returns {ChartOffsetInternal} The offset of the chart in pixels, or a default value if not in a chart context.
+ */
+export var useOffsetInternal = () => {
+  var _useAppSelector2;
+  return (_useAppSelector2 = useAppSelector(selectChartOffsetInternal)) !== null && _useAppSelector2 !== void 0 ? _useAppSelector2 : manyComponentsThrowErrorsIfOffsetIsUndefined;
+};
+
+/**
+ * Returns the width of the chart in pixels.
+ *
+ * If you are using chart with hardcoded `width` prop, then the width returned will be the same
+ * as the `width` prop on the main chart element.
+ *
+ * If you are using a chart with a `ResponsiveContainer`, the width will be the size of the chart
+ * as the ResponsiveContainer has decided it would be.
+ *
+ * If the chart has any axes or legend, the `width` will be the size of the chart
+ * including the axes and legend. Meaning: adding axes and legend will not change the width.
+ *
+ * The dimensions do not scale, meaning as user zoom in and out, the width number will not change
+ * as the chart gets visually larger or smaller.
+ *
+ * Returns `undefined` if used outside a chart context.
+ *
+ * @returns {number | undefined} The width of the chart in pixels, or `undefined` if not in a chart context.
+ */
+export var useChartWidth = () => {
+  return useAppSelector(selectChartWidth);
+};
+
+/**
+ * Returns the height of the chart in pixels.
+ *
+ * If you are using chart with hardcoded `height` props, then the height returned will be the same
+ * as the `height` prop on the main chart element.
+ *
+ * If you are using a chart with a `ResponsiveContainer`, the height will be the size of the chart
+ * as the ResponsiveContainer has decided it would be.
+ *
+ * If the chart has any axes or legend, the `height` will be the size of the chart
+ * including the axes and legend. Meaning: adding axes and legend will not change the height.
+ *
+ * The dimensions do not scale, meaning as user zoom in and out, the height number will not change
+ * as the chart gets visually larger or smaller.
+ *
+ * Returns `undefined` if used outside a chart context.
+ *
+ * @returns {number | undefined} The height of the chart in pixels, or `undefined` if not in a chart context.
+ */
+export var useChartHeight = () => {
+  return useAppSelector(selectChartHeight);
+};
+var manyComponentsThrowErrorsIfMarginIsUndefined = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+export var useMargin = () => {
+  var _useAppSelector3;
+  return (_useAppSelector3 = useAppSelector(state => state.layout.margin)) !== null && _useAppSelector3 !== void 0 ? _useAppSelector3 : manyComponentsThrowErrorsIfMarginIsUndefined;
+};
+export var selectChartLayout = state => state.layout.layoutType;
+export var useChartLayout = () => useAppSelector(selectChartLayout);
+export var ReportChartSize = props => {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setChartSize(props));
+  }, [dispatch, props]);
+  return null;
+};
+export var ReportChartMargin = _ref => {
+  var {
+    margin
+  } = _ref;
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(setMargin(margin));
+  }, [dispatch, margin]);
+  return null;
+};
Index: node_modules/recharts/es6/context/legendPayloadContext.js
===================================================================
--- node_modules/recharts/es6/context/legendPayloadContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/legendPayloadContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { useAppSelector } from '../state/hooks';
+import { selectLegendPayload } from '../state/selectors/legendSelectors';
+
+/**
+ * Use this hook in Legend, or anywhere else where you want to read the current Legend items.
+ * @return all Legend items ready to be rendered
+ */
+export function useLegendPayload() {
+  return useAppSelector(selectLegendPayload);
+}
Index: node_modules/recharts/es6/context/legendPortalContext.js
===================================================================
--- node_modules/recharts/es6/context/legendPortalContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/legendPortalContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { createContext, useContext } from 'react';
+export var LegendPortalContext = /*#__PURE__*/createContext(null);
+export var useLegendPortal = () => useContext(LegendPortalContext);
Index: node_modules/recharts/es6/context/tooltipContext.js
===================================================================
--- node_modules/recharts/es6/context/tooltipContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/tooltipContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { useAppDispatch } from '../state/hooks';
+import { mouseLeaveItem, setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';
+export var useMouseEnterItemDispatch = (onMouseEnterFromProps, dataKey) => {
+  var dispatch = useAppDispatch();
+  return (data, index) => event => {
+    onMouseEnterFromProps === null || onMouseEnterFromProps === void 0 || onMouseEnterFromProps(data, index, event);
+    dispatch(setActiveMouseOverItemIndex({
+      activeIndex: String(index),
+      activeDataKey: dataKey,
+      activeCoordinate: data.tooltipPosition
+    }));
+  };
+};
+export var useMouseLeaveItemDispatch = onMouseLeaveFromProps => {
+  var dispatch = useAppDispatch();
+  return (data, index) => event => {
+    onMouseLeaveFromProps === null || onMouseLeaveFromProps === void 0 || onMouseLeaveFromProps(data, index, event);
+    dispatch(mouseLeaveItem());
+  };
+};
+export var useMouseClickItemDispatch = (onMouseClickFromProps, dataKey) => {
+  var dispatch = useAppDispatch();
+  return (data, index) => event => {
+    onMouseClickFromProps === null || onMouseClickFromProps === void 0 || onMouseClickFromProps(data, index, event);
+    dispatch(setActiveClickItemIndex({
+      activeIndex: String(index),
+      activeDataKey: dataKey,
+      activeCoordinate: data.tooltipPosition
+    }));
+  };
+};
Index: node_modules/recharts/es6/context/tooltipPortalContext.js
===================================================================
--- node_modules/recharts/es6/context/tooltipPortalContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/tooltipPortalContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { createContext, useContext } from 'react';
+export var TooltipPortalContext = /*#__PURE__*/createContext(null);
+export var useTooltipPortal = () => useContext(TooltipPortalContext);
Index: node_modules/recharts/es6/context/useTooltipAxis.js
===================================================================
--- node_modules/recharts/es6/context/useTooltipAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/context/useTooltipAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { useAppSelector } from '../state/hooks';
+import { getBandSizeOfAxis } from '../util/ChartUtils';
+import { selectTooltipAxisScale, selectTooltipAxisTicks } from '../state/selectors/tooltipSelectors';
+import { selectTooltipAxis } from '../state/selectors/selectTooltipAxis';
+export var useTooltipAxis = () => useAppSelector(selectTooltipAxis);
+export var useTooltipAxisBandSize = () => {
+  var tooltipAxis = useTooltipAxis();
+  var tooltipTicks = useAppSelector(selectTooltipAxisTicks);
+  var tooltipAxisScale = useAppSelector(selectTooltipAxisScale);
+  return getBandSizeOfAxis(_objectSpread(_objectSpread({}, tooltipAxis), {}, {
+    scale: tooltipAxisScale
+  }), tooltipTicks);
+};
Index: node_modules/recharts/es6/hooks.js
===================================================================
--- node_modules/recharts/es6/hooks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/hooks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+import { selectAxisWithScale } from './state/selectors/axisSelectors';
+import { useAppSelector } from './state/hooks';
+import { useIsPanorama } from './context/PanoramaContext';
+import { selectActiveLabel, selectActiveTooltipDataPoints } from './state/selectors/tooltipSelectors';
+import { selectChartOffset } from './state/selectors/selectChartOffset';
+import { selectPlotArea } from './state/selectors/selectPlotArea';
+export var useXAxis = xAxisId => {
+  var isPanorama = useIsPanorama();
+  return useAppSelector(state => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama));
+};
+export var useYAxis = yAxisId => {
+  var isPanorama = useIsPanorama();
+  return useAppSelector(state => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama));
+};
+
+/**
+ * Returns the active tooltip label. The label is one of the values from the chart data,
+ * and is used to display in the tooltip content.
+ *
+ * Returns undefined if there is no active user interaction or if used outside a chart context
+ *
+ * @returns string | undefined
+ */
+export var useActiveTooltipLabel = () => {
+  return useAppSelector(selectActiveLabel);
+};
+
+/**
+ * Offset defines the blank space between the chart and the plot area.
+ * This blank space is occupied by supporting elements like axes, legends, and brushes.
+ * This also includes any margins that might be applied to the chart.
+ *
+ * @returns Offset of the chart in pixels, or undefined if used outside a chart context.
+ */
+export var useOffset = () => {
+  return useAppSelector(selectChartOffset);
+};
+
+/**
+ * Plot area is the area where the actual chart data is rendered.
+ * This means: bars, lines, scatter points, etc.
+ *
+ * The plot area is calculated based on the chart dimensions and the offset.
+ *
+ * @returns Plot area of the chart in pixels, or undefined if used outside a chart context.
+ */
+export var usePlotArea = () => {
+  return useAppSelector(selectPlotArea);
+};
+
+/**
+ * Returns the currently active data points being displayed in the Tooltip.
+ * Active means that it is currently visible; this hook will return `undefined` if there is no current interaction.
+ *
+ * This follows the `<Tooltip />` props, if the Tooltip element is present in the chart.
+ * If there is no `<Tooltip />` then this hook will follow the default Tooltip props.
+ *
+ * Data point is whatever you pass as an input to the chart using the `data={}` prop.
+ *
+ * This returns an array because a chart can have multiple graphical items in it (multiple Lines for example)
+ * and tooltip with `shared={true}` will display all items at the same time.
+ *
+ * Returns undefined when used outside a chart context.
+ *
+ * @returns Data points that are currently visible in a Tooltip
+ */
+export var useActiveTooltipDataPoints = () => {
+  return useAppSelector(selectActiveTooltipDataPoints);
+};
Index: node_modules/recharts/es6/index.js
===================================================================
--- node_modules/recharts/es6/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+// "export type" declarations on separate lines are in use
+// to workaround babel issue(s) 11465 12578
+//
+
+// see https://github.com/babel/babel/issues/11464#issuecomment-617606898
+export { Surface } from './container/Surface';
+export { Layer } from './container/Layer';
+export { Legend } from './component/Legend';
+export { DefaultLegendContent } from './component/DefaultLegendContent';
+export { Tooltip } from './component/Tooltip';
+export { DefaultTooltipContent } from './component/DefaultTooltipContent';
+export { ResponsiveContainer } from './component/ResponsiveContainer';
+export { Cell } from './component/Cell';
+export { Text } from './component/Text';
+export { Label } from './component/Label';
+export { LabelList } from './component/LabelList';
+export { Customized } from './component/Customized';
+export { Sector } from './shape/Sector';
+export { Curve } from './shape/Curve';
+export { Rectangle } from './shape/Rectangle';
+export { Polygon } from './shape/Polygon';
+export { Dot } from './shape/Dot';
+export { Cross } from './shape/Cross';
+export { Symbols } from './shape/Symbols';
+export { PolarGrid } from './polar/PolarGrid';
+export { PolarRadiusAxis } from './polar/PolarRadiusAxis';
+export { PolarAngleAxis } from './polar/PolarAngleAxis';
+export { Pie } from './polar/Pie';
+export { Radar } from './polar/Radar';
+export { RadialBar } from './polar/RadialBar';
+export { Brush } from './cartesian/Brush';
+export { ReferenceLine } from './cartesian/ReferenceLine';
+export { ReferenceDot } from './cartesian/ReferenceDot';
+export { ReferenceArea } from './cartesian/ReferenceArea';
+export { CartesianAxis } from './cartesian/CartesianAxis';
+export { CartesianGrid } from './cartesian/CartesianGrid';
+export { Line } from './cartesian/Line';
+export { Area } from './cartesian/Area';
+export { Bar } from './cartesian/Bar';
+export { Scatter } from './cartesian/Scatter';
+export { XAxis } from './cartesian/XAxis';
+export { YAxis } from './cartesian/YAxis';
+export { ZAxis } from './cartesian/ZAxis';
+export { ErrorBar } from './cartesian/ErrorBar';
+export { LineChart } from './chart/LineChart';
+export { BarChart } from './chart/BarChart';
+export { PieChart } from './chart/PieChart';
+export { Treemap } from './chart/Treemap';
+export { Sankey } from './chart/Sankey';
+export { RadarChart } from './chart/RadarChart';
+export { ScatterChart } from './chart/ScatterChart';
+export { AreaChart } from './chart/AreaChart';
+export { RadialBarChart } from './chart/RadialBarChart';
+export { ComposedChart } from './chart/ComposedChart';
+export { SunburstChart } from './chart/SunburstChart';
+export { Funnel } from './cartesian/Funnel';
+export { FunnelChart } from './chart/FunnelChart';
+export { Trapezoid } from './shape/Trapezoid';
+export { Global } from './util/Global';
+/** export getNiceTickValues so this can be used as a replacement for what is in recharts-scale */
+export { getNiceTickValues } from './util/scale/getNiceTickValues';
+export { useActiveTooltipLabel, useOffset, usePlotArea, useActiveTooltipDataPoints } from './hooks';
+export { useChartHeight, useChartWidth } from './context/chartLayoutContext';
Index: node_modules/recharts/es6/polar/Pie.js
===================================================================
--- node_modules/recharts/es6/polar/Pie.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/polar/Pie.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,533 @@
+var _excluded = ["onMouseEnter", "onClick", "onMouseLeave"],
+  _excluded2 = ["id"],
+  _excluded3 = ["id"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { useCallback, useMemo, useRef, useState } from 'react';
+import get from 'es-toolkit/compat/get';
+import { clsx } from 'clsx';
+import { selectPieLegend, selectPieSectors } from '../state/selectors/pieSelectors';
+import { useAppSelector } from '../state/hooks';
+import { Layer } from '../container/Layer';
+import { Curve } from '../shape/Curve';
+import { Text } from '../component/Text';
+import { Cell } from '../component/Cell';
+import { filterProps, findAllByType } from '../util/ReactUtils';
+import { Global } from '../util/Global';
+import { getMaxRadius, polarToCartesian } from '../util/PolarUtils';
+import { getPercentValue, interpolateNumber, isNumber, mathSign } from '../util/DataUtils';
+import { getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { Shape } from '../util/ActiveShapeUtils';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { SetPolarLegendPayload } from '../state/SetLegendPayload';
+import { DATA_ITEM_DATAKEY_ATTRIBUTE_NAME, DATA_ITEM_INDEX_ATTRIBUTE_NAME } from '../util/Constants';
+import { useAnimationId } from '../util/useAnimationId';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetPolarGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+function SetPiePayloadLegend(props) {
+  var cells = useMemo(() => findAllByType(props.children, Cell), [props.children]);
+  var legendPayload = useAppSelector(state => selectPieLegend(state, props.id, cells));
+  if (legendPayload == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(SetPolarLegendPayload, {
+    legendPayload: legendPayload
+  });
+}
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    nameKey,
+    sectors,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType
+  } = props;
+  return {
+    dataDefinedOnItem: sectors === null || sectors === void 0 ? void 0 : sectors.map(p => p.tooltipPayload),
+    positions: sectors === null || sectors === void 0 ? void 0 : sectors.map(p => p.tooltipPosition),
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '' // why doesn't Pie support unit?
+    }
+  };
+}
+var getTextAnchor = (x, cx) => {
+  if (x > cx) {
+    return 'start';
+  }
+  if (x < cx) {
+    return 'end';
+  }
+  return 'middle';
+};
+var getOuterRadius = (dataPoint, outerRadius, maxPieRadius) => {
+  if (typeof outerRadius === 'function') {
+    return outerRadius(dataPoint);
+  }
+  return getPercentValue(outerRadius, maxPieRadius, maxPieRadius * 0.8);
+};
+var parseCoordinateOfPie = (item, offset, dataPoint) => {
+  var {
+    top,
+    left,
+    width,
+    height
+  } = offset;
+  var maxPieRadius = getMaxRadius(width, height);
+  var cx = left + getPercentValue(item.cx, width, width / 2);
+  var cy = top + getPercentValue(item.cy, height, height / 2);
+  var innerRadius = getPercentValue(item.innerRadius, maxPieRadius, 0);
+  var outerRadius = getOuterRadius(dataPoint, item.outerRadius, maxPieRadius);
+  var maxRadius = item.maxRadius || Math.sqrt(width * width + height * height) / 2;
+  return {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    maxRadius
+  };
+};
+var parseDeltaAngle = (startAngle, endAngle) => {
+  var sign = mathSign(endAngle - startAngle);
+  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);
+  return sign * deltaAngle;
+};
+var renderLabelLineItem = (option, props) => {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  if (typeof option === 'function') {
+    return option(props);
+  }
+  var className = clsx('recharts-pie-label-line', typeof option !== 'boolean' ? option.className : '');
+  return /*#__PURE__*/React.createElement(Curve, _extends({}, props, {
+    type: "linear",
+    className: className
+  }));
+};
+var renderLabelItem = (option, props, value) => {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  var label = value;
+  if (typeof option === 'function') {
+    label = option(props);
+    if (/*#__PURE__*/React.isValidElement(label)) {
+      return label;
+    }
+  }
+  var className = clsx('recharts-pie-label-text', typeof option !== 'boolean' && typeof option !== 'function' ? option.className : '');
+  return /*#__PURE__*/React.createElement(Text, _extends({}, props, {
+    alignmentBaseline: "middle",
+    className: className
+  }), label);
+};
+function PieLabels(_ref) {
+  var {
+    sectors,
+    props,
+    showLabels
+  } = _ref;
+  var {
+    label,
+    labelLine,
+    dataKey
+  } = props;
+  if (!showLabels || !label || !sectors) {
+    return null;
+  }
+  var pieProps = svgPropertiesNoEvents(props);
+  var customLabelProps = filterProps(label, false);
+  var customLabelLineProps = filterProps(labelLine, false);
+  var offsetRadius = typeof label === 'object' && 'offsetRadius' in label && label.offsetRadius || 20;
+  var labels = sectors.map((entry, i) => {
+    var midAngle = (entry.startAngle + entry.endAngle) / 2;
+    var endPoint = polarToCartesian(entry.cx, entry.cy, entry.outerRadius + offsetRadius, midAngle);
+    var labelProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieProps), entry), {}, {
+      stroke: 'none'
+    }, customLabelProps), {}, {
+      index: i,
+      textAnchor: getTextAnchor(endPoint.x, entry.cx)
+    }, endPoint);
+    var lineProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieProps), entry), {}, {
+      fill: 'none',
+      stroke: entry.fill
+    }, customLabelLineProps), {}, {
+      index: i,
+      points: [polarToCartesian(entry.cx, entry.cy, entry.outerRadius, midAngle), endPoint],
+      key: 'line'
+    });
+    return (
+      /*#__PURE__*/
+      // eslint-disable-next-line react/no-array-index-key
+      React.createElement(Layer, {
+        key: "label-".concat(entry.startAngle, "-").concat(entry.endAngle, "-").concat(entry.midAngle, "-").concat(i)
+      }, labelLine && renderLabelLineItem(labelLine, lineProps), renderLabelItem(label, labelProps, getValueByDataKey(entry, dataKey)))
+    );
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-pie-labels"
+  }, labels);
+}
+function PieSectors(props) {
+  var {
+    sectors,
+    activeShape,
+    inactiveShape: inactiveShapeProp,
+    allOtherPieProps,
+    showLabels
+  } = props;
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = allOtherPieProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherPieProps, _excluded);
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherPieProps.dataKey);
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherPieProps.dataKey);
+  if (sectors == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, sectors.map((entry, i) => {
+    if ((entry === null || entry === void 0 ? void 0 : entry.startAngle) === 0 && (entry === null || entry === void 0 ? void 0 : entry.endAngle) === 0 && sectors.length !== 1) return null;
+    var isSectorActive = activeShape && String(i) === activeIndex;
+    var inactiveShape = activeIndex ? inactiveShapeProp : null;
+    var sectorOptions = isSectorActive ? activeShape : inactiveShape;
+    var sectorProps = _objectSpread(_objectSpread({}, entry), {}, {
+      stroke: entry.stroke,
+      tabIndex: -1,
+      [DATA_ITEM_INDEX_ATTRIBUTE_NAME]: i,
+      [DATA_ITEM_DATAKEY_ATTRIBUTE_NAME]: allOtherPieProps.dataKey
+    });
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      tabIndex: -1,
+      className: "recharts-pie-sector"
+    }, adaptEventsOfChild(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error the types need a bit of attention
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onClick: onClickFromContext(entry, i)
+      // eslint-disable-next-line react/no-array-index-key
+      ,
+      key: "sector-".concat(entry === null || entry === void 0 ? void 0 : entry.startAngle, "-").concat(entry === null || entry === void 0 ? void 0 : entry.endAngle, "-").concat(entry.midAngle, "-").concat(i)
+    }), /*#__PURE__*/React.createElement(Shape, _extends({
+      option: sectorOptions,
+      isActive: isSectorActive,
+      shapeType: "sector"
+    }, sectorProps)));
+  }), /*#__PURE__*/React.createElement(PieLabels, {
+    sectors: sectors,
+    props: allOtherPieProps,
+    showLabels: showLabels
+  }));
+}
+export function computePieSectors(_ref2) {
+  var _pieSettings$paddingA;
+  var {
+    pieSettings,
+    displayedData,
+    cells,
+    offset
+  } = _ref2;
+  var {
+    cornerRadius,
+    startAngle,
+    endAngle,
+    dataKey,
+    nameKey,
+    tooltipType
+  } = pieSettings;
+  var minAngle = Math.abs(pieSettings.minAngle);
+  var deltaAngle = parseDeltaAngle(startAngle, endAngle);
+  var absDeltaAngle = Math.abs(deltaAngle);
+  var paddingAngle = displayedData.length <= 1 ? 0 : (_pieSettings$paddingA = pieSettings.paddingAngle) !== null && _pieSettings$paddingA !== void 0 ? _pieSettings$paddingA : 0;
+  var notZeroItemCount = displayedData.filter(entry => getValueByDataKey(entry, dataKey, 0) !== 0).length;
+  var totalPaddingAngle = (absDeltaAngle >= 360 ? notZeroItemCount : notZeroItemCount - 1) * paddingAngle;
+  var realTotalAngle = absDeltaAngle - notZeroItemCount * minAngle - totalPaddingAngle;
+  var sum = displayedData.reduce((result, entry) => {
+    var val = getValueByDataKey(entry, dataKey, 0);
+    return result + (isNumber(val) ? val : 0);
+  }, 0);
+  var sectors;
+  if (sum > 0) {
+    var prev;
+    sectors = displayedData.map((entry, i) => {
+      var val = getValueByDataKey(entry, dataKey, 0);
+      var name = getValueByDataKey(entry, nameKey, i);
+      var coordinate = parseCoordinateOfPie(pieSettings, offset, entry);
+      var percent = (isNumber(val) ? val : 0) / sum;
+      var tempStartAngle;
+      var entryWithCellInfo = _objectSpread(_objectSpread({}, entry), cells && cells[i] && cells[i].props);
+      if (i) {
+        tempStartAngle = prev.endAngle + mathSign(deltaAngle) * paddingAngle * (val !== 0 ? 1 : 0);
+      } else {
+        tempStartAngle = startAngle;
+      }
+      var tempEndAngle = tempStartAngle + mathSign(deltaAngle) * ((val !== 0 ? minAngle : 0) + percent * realTotalAngle);
+      var midAngle = (tempStartAngle + tempEndAngle) / 2;
+      var middleRadius = (coordinate.innerRadius + coordinate.outerRadius) / 2;
+      var tooltipPayload = [{
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        name,
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        value: val,
+        payload: entryWithCellInfo,
+        dataKey,
+        type: tooltipType
+      }];
+      var tooltipPosition = polarToCartesian(coordinate.cx, coordinate.cy, middleRadius, midAngle);
+      prev = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieSettings.presentationProps), {}, {
+        percent,
+        cornerRadius,
+        name,
+        tooltipPayload,
+        midAngle,
+        middleRadius,
+        tooltipPosition
+      }, entryWithCellInfo), coordinate), {}, {
+        value: getValueByDataKey(entry, dataKey),
+        startAngle: tempStartAngle,
+        endAngle: tempEndAngle,
+        payload: entryWithCellInfo,
+        paddingAngle: mathSign(deltaAngle) * paddingAngle
+      });
+      return prev;
+    });
+  }
+  return sectors;
+}
+function SectorsWithAnimation(_ref3) {
+  var {
+    props,
+    previousSectorsRef
+  } = _ref3;
+  var {
+    sectors,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    activeShape,
+    inactiveShape,
+    onAnimationStart,
+    onAnimationEnd
+  } = props;
+  var animationId = useAnimationId(props, 'recharts-pie-');
+  var prevSectors = previousSectorsRef.current;
+  var [isAnimating, setIsAnimating] = useState(true);
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd,
+    key: animationId
+  }, t => {
+    var stepData = [];
+    var first = sectors && sectors[0];
+    var curAngle = first.startAngle;
+    sectors.forEach((entry, index) => {
+      var prev = prevSectors && prevSectors[index];
+      var paddingAngle = index > 0 ? get(entry, 'paddingAngle', 0) : 0;
+      if (prev) {
+        var angleIp = interpolateNumber(prev.endAngle - prev.startAngle, entry.endAngle - entry.startAngle);
+        var latest = _objectSpread(_objectSpread({}, entry), {}, {
+          startAngle: curAngle + paddingAngle,
+          endAngle: curAngle + angleIp(t) + paddingAngle
+        });
+        stepData.push(latest);
+        curAngle = latest.endAngle;
+      } else {
+        var {
+          endAngle,
+          startAngle
+        } = entry;
+        var interpolatorAngle = interpolateNumber(0, endAngle - startAngle);
+        var deltaAngle = interpolatorAngle(t);
+        var _latest = _objectSpread(_objectSpread({}, entry), {}, {
+          startAngle: curAngle + paddingAngle,
+          endAngle: curAngle + deltaAngle + paddingAngle
+        });
+        stepData.push(_latest);
+        curAngle = _latest.endAngle;
+      }
+    });
+
+    // eslint-disable-next-line no-param-reassign
+    previousSectorsRef.current = stepData;
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(PieSectors, {
+      sectors: stepData,
+      activeShape: activeShape,
+      inactiveShape: inactiveShape,
+      allOtherPieProps: props,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderSectors(props) {
+  var {
+    sectors,
+    isAnimationActive,
+    activeShape,
+    inactiveShape
+  } = props;
+  var previousSectorsRef = useRef(null);
+  var prevSectors = previousSectorsRef.current;
+  if (isAnimationActive && sectors && sectors.length && (!prevSectors || prevSectors !== sectors)) {
+    return /*#__PURE__*/React.createElement(SectorsWithAnimation, {
+      props: props,
+      previousSectorsRef: previousSectorsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(PieSectors, {
+    sectors: sectors,
+    activeShape: activeShape,
+    inactiveShape: inactiveShape,
+    allOtherPieProps: props,
+    showLabels: true
+  });
+}
+function PieWithTouchMove(props) {
+  var {
+    hide,
+    className,
+    rootTabIndex
+  } = props;
+  var layerClass = clsx('recharts-pie', className);
+  if (hide) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    tabIndex: rootTabIndex,
+    className: layerClass
+  }, /*#__PURE__*/React.createElement(RenderSectors, props));
+}
+var defaultPieProps = {
+  animationBegin: 400,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  cx: '50%',
+  cy: '50%',
+  dataKey: 'value',
+  endAngle: 360,
+  fill: '#808080',
+  hide: false,
+  innerRadius: 0,
+  isAnimationActive: !Global.isSsr,
+  labelLine: true,
+  legendType: 'rect',
+  minAngle: 0,
+  nameKey: 'name',
+  outerRadius: '80%',
+  paddingAngle: 0,
+  rootTabIndex: 0,
+  startAngle: 0,
+  stroke: '#fff'
+};
+function PieImpl(props) {
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded2);
+  var cells = useMemo(() => findAllByType(props.children, Cell), [props.children]);
+  var sectors = useAppSelector(state => selectPieSectors(state, id, cells));
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: _objectSpread(_objectSpread({}, props), {}, {
+      sectors
+    })
+  }), /*#__PURE__*/React.createElement(PieWithTouchMove, _extends({}, propsWithoutId, {
+    sectors: sectors
+  })));
+}
+export function Pie(outsideProps) {
+  var _resolveDefaultProps = resolveDefaultProps(outsideProps, defaultPieProps),
+    {
+      id: externalId
+    } = _resolveDefaultProps,
+    propsWithoutId = _objectWithoutProperties(_resolveDefaultProps, _excluded3);
+  var presentationProps = svgPropertiesNoEvents(propsWithoutId);
+  return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+    id: externalId,
+    type: "pie"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetPolarGraphicalItem, {
+    type: "pie",
+    id: id,
+    data: propsWithoutId.data,
+    dataKey: propsWithoutId.dataKey,
+    hide: propsWithoutId.hide,
+    angleAxisId: 0,
+    radiusAxisId: 0,
+    name: propsWithoutId.name,
+    nameKey: propsWithoutId.nameKey,
+    tooltipType: propsWithoutId.tooltipType,
+    legendType: propsWithoutId.legendType,
+    fill: propsWithoutId.fill,
+    cx: propsWithoutId.cx,
+    cy: propsWithoutId.cy,
+    startAngle: propsWithoutId.startAngle,
+    endAngle: propsWithoutId.endAngle,
+    paddingAngle: propsWithoutId.paddingAngle,
+    minAngle: propsWithoutId.minAngle,
+    innerRadius: propsWithoutId.innerRadius,
+    outerRadius: propsWithoutId.outerRadius,
+    cornerRadius: propsWithoutId.cornerRadius
+    // @ts-expect-error we're passing DataKey and other internals as presentationProps
+    ,
+    presentationProps: presentationProps
+  }), /*#__PURE__*/React.createElement(SetPiePayloadLegend, _extends({}, propsWithoutId, {
+    id: id
+  })), /*#__PURE__*/React.createElement(PieImpl, _extends({}, propsWithoutId, {
+    id: id
+  })), propsWithoutId.children));
+}
+Pie.displayName = 'Pie';
Index: node_modules/recharts/es6/polar/PolarAngleAxis.js
===================================================================
--- node_modules/recharts/es6/polar/PolarAngleAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/polar/PolarAngleAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,246 @@
+var _excluded = ["children"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { PureComponent, useEffect, useMemo } from 'react';
+import { clsx } from 'clsx';
+import { Layer } from '../container/Layer';
+import { Dot } from '../shape/Dot';
+import { Polygon } from '../shape/Polygon';
+import { Text } from '../component/Text';
+import { adaptEventsOfChild } from '../util/types';
+import { filterProps } from '../util/ReactUtils';
+import { getTickClassName, polarToCartesian } from '../util/PolarUtils';
+import { addAngleAxis, removeAngleAxis } from '../state/polarAxisSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectPolarAxisScale, selectPolarAxisTicks } from '../state/selectors/polarScaleSelectors';
+import { selectAngleAxis, selectPolarViewBox } from '../state/selectors/polarAxisSelectors';
+import { defaultPolarAngleAxisProps } from './defaultPolarAngleAxisProps';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+var RADIAN = Math.PI / 180;
+var eps = 1e-5;
+
+/**
+ * These are injected from Redux, are required, but cannot be set by user.
+ */
+
+var AXIS_TYPE = 'angleAxis';
+function SetAngleAxisSettings(props) {
+  var dispatch = useAppDispatch();
+  var settings = useMemo(() => {
+    var {
+        children
+      } = props,
+      rest = _objectWithoutProperties(props, _excluded);
+    return rest;
+  }, [props]);
+  var synchronizedSettings = useAppSelector(state => selectAngleAxis(state, settings.id));
+  var settingsAreSynchronized = settings === synchronizedSettings;
+  useEffect(() => {
+    dispatch(addAngleAxis(settings));
+    return () => {
+      dispatch(removeAngleAxis(settings));
+    };
+  }, [dispatch, settings]);
+  if (settingsAreSynchronized) {
+    return props.children;
+  }
+  return null;
+}
+
+/**
+ * Calculate the coordinate of line endpoint
+ * @param data The data if there are ticks
+ * @param props axis settings
+ * @return (x1, y1): The point close to text,
+ *         (x2, y2): The point close to axis
+ */
+var getTickLineCoord = (data, props) => {
+  var {
+    cx,
+    cy,
+    radius,
+    orientation,
+    tickSize
+  } = props;
+  var tickLineSize = tickSize || 8;
+  var p1 = polarToCartesian(cx, cy, radius, data.coordinate);
+  var p2 = polarToCartesian(cx, cy, radius + (orientation === 'inner' ? -1 : 1) * tickLineSize, data.coordinate);
+  return {
+    x1: p1.x,
+    y1: p1.y,
+    x2: p2.x,
+    y2: p2.y
+  };
+};
+
+/**
+ * Get the text-anchor of each tick
+ * @param data Data of ticks
+ * @param orientation of the axis ticks
+ * @return text-anchor
+ */
+var getTickTextAnchor = (data, orientation) => {
+  var cos = Math.cos(-data.coordinate * RADIAN);
+  if (cos > eps) {
+    return orientation === 'outer' ? 'start' : 'end';
+  }
+  if (cos < -eps) {
+    return orientation === 'outer' ? 'end' : 'start';
+  }
+  return 'middle';
+};
+var AxisLine = props => {
+  var {
+    cx,
+    cy,
+    radius,
+    axisLineType,
+    axisLine,
+    ticks
+  } = props;
+  if (!axisLine) {
+    return null;
+  }
+  var axisLineProps = _objectSpread(_objectSpread({}, svgPropertiesNoEvents(props)), {}, {
+    fill: 'none'
+  }, filterProps(axisLine, false));
+  if (axisLineType === 'circle') {
+    // @ts-expect-error wrong SVG element type
+    return /*#__PURE__*/React.createElement(Dot, _extends({
+      className: "recharts-polar-angle-axis-line"
+    }, axisLineProps, {
+      cx: cx,
+      cy: cy,
+      r: radius
+    }));
+  }
+  var points = ticks.map(entry => polarToCartesian(cx, cy, radius, entry.coordinate));
+
+  // @ts-expect-error wrong SVG element type
+  return /*#__PURE__*/React.createElement(Polygon, _extends({
+    className: "recharts-polar-angle-axis-line"
+  }, axisLineProps, {
+    points: points
+  }));
+};
+var TickItemText = _ref => {
+  var {
+    tick,
+    tickProps,
+    value
+  } = _ref;
+  if (!tick) {
+    return null;
+  }
+  if (/*#__PURE__*/React.isValidElement(tick)) {
+    // @ts-expect-error element cloning makes typescript unhappy and me too
+    return /*#__PURE__*/React.cloneElement(tick, tickProps);
+  }
+  if (typeof tick === 'function') {
+    return tick(tickProps);
+  }
+  return /*#__PURE__*/React.createElement(Text, _extends({}, tickProps, {
+    className: "recharts-polar-angle-axis-tick-value"
+  }), value);
+};
+var Ticks = props => {
+  var {
+    tick,
+    tickLine,
+    tickFormatter,
+    stroke,
+    ticks
+  } = props;
+  var axisProps = svgPropertiesNoEvents(props);
+  var customTickProps = filterProps(tick, false);
+  var tickLineProps = _objectSpread(_objectSpread({}, axisProps), {}, {
+    fill: 'none'
+  }, filterProps(tickLine, false));
+  var items = ticks.map((entry, i) => {
+    var lineCoord = getTickLineCoord(entry, props);
+    var textAnchor = getTickTextAnchor(entry, props.orientation);
+    var tickProps = _objectSpread(_objectSpread(_objectSpread({}, axisProps), {}, {
+      textAnchor,
+      stroke: 'none',
+      fill: stroke
+    }, customTickProps), {}, {
+      index: i,
+      payload: entry,
+      x: lineCoord.x2,
+      y: lineCoord.y2
+    });
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: clsx('recharts-polar-angle-axis-tick', getTickClassName(tick)),
+      key: "tick-".concat(entry.coordinate)
+    }, adaptEventsOfChild(props, entry, i)), tickLine && /*#__PURE__*/React.createElement("line", _extends({
+      className: "recharts-polar-angle-axis-tick-line"
+    }, tickLineProps, lineCoord)), /*#__PURE__*/React.createElement(TickItemText, {
+      tick: tick,
+      tickProps: tickProps,
+      value: tickFormatter ? tickFormatter(entry.value, i) : entry.value
+    }));
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-polar-angle-axis-ticks"
+  }, items);
+};
+export var PolarAngleAxisWrapper = defaultsAndInputs => {
+  var {
+    angleAxisId
+  } = defaultsAndInputs;
+  var viewBox = useAppSelector(selectPolarViewBox);
+  var scale = useAppSelector(state => selectPolarAxisScale(state, 'angleAxis', angleAxisId));
+  var isPanorama = useIsPanorama();
+  var ticks = useAppSelector(state => selectPolarAxisTicks(state, 'angleAxis', angleAxisId, isPanorama));
+  if (viewBox == null || !ticks || !ticks.length) {
+    return null;
+  }
+  var props = _objectSpread(_objectSpread(_objectSpread({}, defaultsAndInputs), {}, {
+    scale
+  }, viewBox), {}, {
+    radius: viewBox.outerRadius
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-polar-angle-axis', AXIS_TYPE, props.className)
+  }, /*#__PURE__*/React.createElement(AxisLine, _extends({}, props, {
+    ticks: ticks
+  })), /*#__PURE__*/React.createElement(Ticks, _extends({}, props, {
+    ticks: ticks
+  })));
+};
+export class PolarAngleAxis extends PureComponent {
+  render() {
+    if (this.props.radius <= 0) return null;
+    return /*#__PURE__*/React.createElement(SetAngleAxisSettings, {
+      id: this.props.angleAxisId,
+      scale: this.props.scale,
+      type: this.props.type,
+      dataKey: this.props.dataKey,
+      unit: undefined,
+      name: this.props.name,
+      allowDuplicatedCategory: false // Ignoring the prop on purpose because axis calculation behaves as if it was false and Tooltip requires it to be true.
+      ,
+      allowDataOverflow: false,
+      reversed: this.props.reversed,
+      includeHidden: false,
+      allowDecimals: this.props.allowDecimals,
+      tickCount: this.props.tickCount
+      // @ts-expect-error the type does not match. Is RadiusAxis really expecting what it says?
+      ,
+      ticks: this.props.ticks,
+      tick: this.props.tick,
+      domain: this.props.domain
+    }, /*#__PURE__*/React.createElement(PolarAngleAxisWrapper, this.props));
+  }
+}
+_defineProperty(PolarAngleAxis, "displayName", 'PolarAngleAxis');
+_defineProperty(PolarAngleAxis, "axisType", AXIS_TYPE);
+_defineProperty(PolarAngleAxis, "defaultProps", defaultPolarAngleAxisProps);
Index: node_modules/recharts/es6/polar/PolarGrid.js
===================================================================
--- node_modules/recharts/es6/polar/PolarGrid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/polar/PolarGrid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,192 @@
+var _excluded = ["gridType", "radialLines", "angleAxisId", "radiusAxisId", "cx", "cy", "innerRadius", "outerRadius"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { clsx } from 'clsx';
+import * as React from 'react';
+import { polarToCartesian } from '../util/PolarUtils';
+import { useAppSelector } from '../state/hooks';
+import { selectPolarGridAngles, selectPolarGridRadii } from '../state/selectors/polarGridSelectors';
+import { selectPolarViewBox } from '../state/selectors/polarAxisSelectors';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+var getPolygonPath = (radius, cx, cy, polarAngles) => {
+  var path = '';
+  polarAngles.forEach((angle, i) => {
+    var point = polarToCartesian(cx, cy, radius, angle);
+    if (i) {
+      path += "L ".concat(point.x, ",").concat(point.y);
+    } else {
+      path += "M ".concat(point.x, ",").concat(point.y);
+    }
+  });
+  path += 'Z';
+  return path;
+};
+
+// Draw axis of radial line
+var PolarAngles = props => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    polarAngles,
+    radialLines
+  } = props;
+  if (!polarAngles || !polarAngles.length || !radialLines) {
+    return null;
+  }
+  var polarAnglesProps = _objectSpread({
+    stroke: '#ccc'
+  }, svgPropertiesNoEvents(props));
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-polar-grid-angle"
+  }, polarAngles.map(entry => {
+    var start = polarToCartesian(cx, cy, innerRadius, entry);
+    var end = polarToCartesian(cx, cy, outerRadius, entry);
+    return /*#__PURE__*/React.createElement("line", _extends({}, polarAnglesProps, {
+      key: "line-".concat(entry),
+      x1: start.x,
+      y1: start.y,
+      x2: end.x,
+      y2: end.y
+    }));
+  }));
+};
+
+// Draw concentric circles
+var ConcentricCircle = props => {
+  var {
+    cx,
+    cy,
+    radius,
+    index
+  } = props;
+  var concentricCircleProps = _objectSpread(_objectSpread({
+    stroke: '#ccc'
+  }, svgPropertiesNoEvents(props)), {}, {
+    fill: 'none'
+  });
+  return (
+    /*#__PURE__*/
+    // @ts-expect-error wrong SVG element type
+    React.createElement("circle", _extends({}, concentricCircleProps, {
+      className: clsx('recharts-polar-grid-concentric-circle', props.className),
+      key: "circle-".concat(index),
+      cx: cx,
+      cy: cy,
+      r: radius
+    }))
+  );
+};
+
+// Draw concentric polygons
+var ConcentricPolygon = props => {
+  var {
+    radius,
+    index
+  } = props;
+  var concentricPolygonProps = _objectSpread(_objectSpread({
+    stroke: '#ccc'
+  }, svgPropertiesNoEvents(props)), {}, {
+    fill: 'none'
+  });
+  return /*#__PURE__*/React.createElement("path", _extends({}, concentricPolygonProps, {
+    className: clsx('recharts-polar-grid-concentric-polygon', props.className),
+    key: "path-".concat(index),
+    d: getPolygonPath(radius, props.cx, props.cy, props.polarAngles)
+  }));
+};
+
+// Draw concentric axis
+var ConcentricGridPath = props => {
+  var {
+    polarRadius,
+    gridType
+  } = props;
+  if (!polarRadius || !polarRadius.length) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-polar-grid-concentric"
+  }, polarRadius.map((entry, i) => {
+    var key = i;
+    if (gridType === 'circle') return /*#__PURE__*/React.createElement(ConcentricCircle, _extends({
+      key: key
+    }, props, {
+      radius: entry,
+      index: i
+    }));
+    return /*#__PURE__*/React.createElement(ConcentricPolygon, _extends({
+      key: key
+    }, props, {
+      radius: entry,
+      index: i
+    }));
+  }));
+};
+export var PolarGrid = _ref => {
+  var _ref2, _polarViewBox$cx, _ref3, _polarViewBox$cy, _ref4, _polarViewBox$innerRa, _ref5, _polarViewBox$outerRa;
+  var {
+      gridType = 'polygon',
+      radialLines = true,
+      angleAxisId = 0,
+      radiusAxisId = 0,
+      cx: cxFromOutside,
+      cy: cyFromOutside,
+      innerRadius: innerRadiusFromOutside,
+      outerRadius: outerRadiusFromOutside
+    } = _ref,
+    inputs = _objectWithoutProperties(_ref, _excluded);
+  var polarViewBox = useAppSelector(selectPolarViewBox);
+  var props = _objectSpread({
+    cx: (_ref2 = (_polarViewBox$cx = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.cx) !== null && _polarViewBox$cx !== void 0 ? _polarViewBox$cx : cxFromOutside) !== null && _ref2 !== void 0 ? _ref2 : 0,
+    cy: (_ref3 = (_polarViewBox$cy = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.cy) !== null && _polarViewBox$cy !== void 0 ? _polarViewBox$cy : cyFromOutside) !== null && _ref3 !== void 0 ? _ref3 : 0,
+    innerRadius: (_ref4 = (_polarViewBox$innerRa = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.innerRadius) !== null && _polarViewBox$innerRa !== void 0 ? _polarViewBox$innerRa : innerRadiusFromOutside) !== null && _ref4 !== void 0 ? _ref4 : 0,
+    outerRadius: (_ref5 = (_polarViewBox$outerRa = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.outerRadius) !== null && _polarViewBox$outerRa !== void 0 ? _polarViewBox$outerRa : outerRadiusFromOutside) !== null && _ref5 !== void 0 ? _ref5 : 0
+  }, inputs);
+  var {
+    polarAngles: polarAnglesInput,
+    polarRadius: polarRadiusInput,
+    cx,
+    cy,
+    innerRadius,
+    outerRadius
+  } = props;
+  var polarAnglesFromRedux = useAppSelector(state => selectPolarGridAngles(state, angleAxisId));
+  var polarRadiiFromRedux = useAppSelector(state => selectPolarGridRadii(state, radiusAxisId));
+  var polarAngles = Array.isArray(polarAnglesInput) ? polarAnglesInput : polarAnglesFromRedux;
+  var polarRadius = Array.isArray(polarRadiusInput) ? polarRadiusInput : polarRadiiFromRedux;
+  if (outerRadius <= 0 || polarAngles == null || polarRadius == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-polar-grid"
+  }, /*#__PURE__*/React.createElement(PolarAngles, _extends({
+    cx: cx,
+    cy: cy,
+    innerRadius: innerRadius,
+    outerRadius: outerRadius,
+    gridType: gridType,
+    radialLines: radialLines
+  }, props, {
+    polarAngles: polarAngles,
+    polarRadius: polarRadius
+  })), /*#__PURE__*/React.createElement(ConcentricGridPath, _extends({
+    cx: cx,
+    cy: cy,
+    innerRadius: innerRadius,
+    outerRadius: outerRadius,
+    gridType: gridType,
+    radialLines: radialLines
+  }, props, {
+    polarAngles: polarAngles,
+    polarRadius: polarRadius
+  })));
+};
+PolarGrid.displayName = 'PolarGrid';
Index: node_modules/recharts/es6/polar/PolarRadiusAxis.js
===================================================================
--- node_modules/recharts/es6/polar/PolarRadiusAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/polar/PolarRadiusAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,200 @@
+var _excluded = ["cx", "cy", "angle", "axisLine"],
+  _excluded2 = ["angle", "tickFormatter", "stroke", "tick"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { PureComponent, useEffect } from 'react';
+import maxBy from 'es-toolkit/compat/maxBy';
+import minBy from 'es-toolkit/compat/minBy';
+import { clsx } from 'clsx';
+import { Text } from '../component/Text';
+import { Label } from '../component/Label';
+import { Layer } from '../container/Layer';
+import { getTickClassName, polarToCartesian } from '../util/PolarUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { filterProps } from '../util/ReactUtils';
+import { addRadiusAxis, removeRadiusAxis } from '../state/polarAxisSlice';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectPolarAxisScale, selectPolarAxisTicks } from '../state/selectors/polarScaleSelectors';
+import { selectPolarViewBox } from '../state/selectors/polarAxisSelectors';
+import { defaultPolarRadiusAxisProps } from './defaultPolarRadiusAxisProps';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+var AXIS_TYPE = 'radiusAxis';
+function SetRadiusAxisSettings(settings) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addRadiusAxis(settings));
+    return () => {
+      dispatch(removeRadiusAxis(settings));
+    };
+  });
+  return null;
+}
+
+/**
+ * Calculate the coordinate of tick
+ * @param coordinate The radius of tick
+ * @param angle from props
+ * @param cx from chart
+ * @param cy from chart
+ * @return (x, y)
+ */
+var getTickValueCoord = (_ref, angle, cx, cy) => {
+  var {
+    coordinate
+  } = _ref;
+  return polarToCartesian(cx, cy, coordinate, angle);
+};
+var getTickTextAnchor = orientation => {
+  var textAnchor;
+  switch (orientation) {
+    case 'left':
+      textAnchor = 'end';
+      break;
+    case 'right':
+      textAnchor = 'start';
+      break;
+    default:
+      textAnchor = 'middle';
+      break;
+  }
+  return textAnchor;
+};
+var getViewBox = (angle, cx, cy, ticks) => {
+  var maxRadiusTick = maxBy(ticks, entry => entry.coordinate || 0);
+  var minRadiusTick = minBy(ticks, entry => entry.coordinate || 0);
+  return {
+    cx,
+    cy,
+    startAngle: angle,
+    endAngle: angle,
+    innerRadius: minRadiusTick.coordinate || 0,
+    outerRadius: maxRadiusTick.coordinate || 0
+  };
+};
+var renderAxisLine = (props, ticks) => {
+  var {
+      cx,
+      cy,
+      angle,
+      axisLine
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var extent = ticks.reduce((result, entry) => [Math.min(result[0], entry.coordinate), Math.max(result[1], entry.coordinate)], [Infinity, -Infinity]);
+  var point0 = polarToCartesian(cx, cy, extent[0], angle);
+  var point1 = polarToCartesian(cx, cy, extent[1], angle);
+  var axisLineProps = _objectSpread(_objectSpread(_objectSpread({}, svgPropertiesNoEvents(others)), {}, {
+    fill: 'none'
+  }, filterProps(axisLine, false)), {}, {
+    x1: point0.x,
+    y1: point0.y,
+    x2: point1.x,
+    y2: point1.y
+  });
+
+  // @ts-expect-error wrong SVG element type
+  return /*#__PURE__*/React.createElement("line", _extends({
+    className: "recharts-polar-radius-axis-line"
+  }, axisLineProps));
+};
+var renderTickItem = (option, tickProps, value) => {
+  var tickItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    tickItem = /*#__PURE__*/React.cloneElement(option, tickProps);
+  } else if (typeof option === 'function') {
+    tickItem = option(tickProps);
+  } else {
+    tickItem = /*#__PURE__*/React.createElement(Text, _extends({}, tickProps, {
+      className: "recharts-polar-radius-axis-tick-value"
+    }), value);
+  }
+  return tickItem;
+};
+var renderTicks = (props, ticks) => {
+  var {
+      angle,
+      tickFormatter,
+      stroke,
+      tick
+    } = props,
+    others = _objectWithoutProperties(props, _excluded2);
+  var textAnchor = getTickTextAnchor(props.orientation);
+  var axisProps = svgPropertiesNoEvents(others);
+  var customTickProps = filterProps(tick, false);
+  var items = ticks.map((entry, i) => {
+    var coord = getTickValueCoord(entry, props.angle, props.cx, props.cy);
+    var tickProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
+      textAnchor,
+      transform: "rotate(".concat(90 - angle, ", ").concat(coord.x, ", ").concat(coord.y, ")")
+    }, axisProps), {}, {
+      stroke: 'none',
+      fill: stroke
+    }, customTickProps), {}, {
+      index: i
+    }, coord), {}, {
+      payload: entry
+    });
+    return /*#__PURE__*/React.createElement(Layer, _extends({
+      className: clsx('recharts-polar-radius-axis-tick', getTickClassName(tick)),
+      key: "tick-".concat(entry.coordinate)
+    }, adaptEventsOfChild(props, entry, i)), renderTickItem(tick, tickProps, tickFormatter ? tickFormatter(entry.value, i) : entry.value));
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-polar-radius-axis-ticks"
+  }, items);
+};
+export var PolarRadiusAxisWrapper = defaultsAndInputs => {
+  var {
+    radiusAxisId
+  } = defaultsAndInputs;
+  var viewBox = useAppSelector(selectPolarViewBox);
+  var scale = useAppSelector(state => selectPolarAxisScale(state, 'radiusAxis', radiusAxisId));
+  var ticks = useAppSelector(state => selectPolarAxisTicks(state, 'radiusAxis', radiusAxisId, false));
+  if (viewBox == null || !ticks || !ticks.length) {
+    return null;
+  }
+  var props = _objectSpread(_objectSpread(_objectSpread({}, defaultsAndInputs), {}, {
+    scale
+  }, viewBox), {}, {
+    radius: viewBox.outerRadius
+  });
+  var {
+    tick,
+    axisLine
+  } = props;
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: clsx('recharts-polar-radius-axis', AXIS_TYPE, props.className)
+  }, axisLine && renderAxisLine(props, ticks), tick && renderTicks(props, ticks), Label.renderCallByParent(props, getViewBox(props.angle, props.cx, props.cy, ticks)));
+};
+export class PolarRadiusAxis extends PureComponent {
+  render() {
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetRadiusAxisSettings, {
+      domain: this.props.domain,
+      id: this.props.radiusAxisId,
+      scale: this.props.scale,
+      type: this.props.type,
+      dataKey: this.props.dataKey,
+      unit: undefined,
+      name: this.props.name,
+      allowDuplicatedCategory: this.props.allowDuplicatedCategory,
+      allowDataOverflow: this.props.allowDataOverflow,
+      reversed: this.props.reversed,
+      includeHidden: this.props.includeHidden,
+      allowDecimals: this.props.allowDecimals,
+      tickCount: this.props.tickCount
+      // @ts-expect-error the type does not match. Is RadiusAxis really expecting what it says?
+      ,
+      ticks: this.props.ticks,
+      tick: this.props.tick
+    }), /*#__PURE__*/React.createElement(PolarRadiusAxisWrapper, this.props));
+  }
+}
+_defineProperty(PolarRadiusAxis, "displayName", 'PolarRadiusAxis');
+_defineProperty(PolarRadiusAxis, "axisType", AXIS_TYPE);
+_defineProperty(PolarRadiusAxis, "defaultProps", defaultPolarRadiusAxisProps);
Index: node_modules/recharts/es6/polar/Radar.js
===================================================================
--- node_modules/recharts/es6/polar/Radar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/polar/Radar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,407 @@
+var _excluded = ["id"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+// eslint-disable-next-line max-classes-per-file
+import * as React from 'react';
+import { PureComponent, useCallback, useRef, useState } from 'react';
+import last from 'es-toolkit/compat/last';
+import { clsx } from 'clsx';
+import { interpolateNumber, isNullish } from '../util/DataUtils';
+import { Global } from '../util/Global';
+import { polarToCartesian } from '../util/PolarUtils';
+import { getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';
+import { Polygon } from '../shape/Polygon';
+import { Dot } from '../shape/Dot';
+import { Layer } from '../container/Layer';
+import { LabelList } from '../component/LabelList';
+import { filterProps } from '../util/ReactUtils';
+import { ActivePoints } from '../component/ActivePoints';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { selectRadarPoints } from '../state/selectors/radarSelectors';
+import { useAppSelector } from '../state/hooks';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { SetPolarLegendPayload } from '../state/SetLegendPayload';
+import { useAnimationId } from '../util/useAnimationId';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetPolarGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+function getLegendItemColor(stroke, fill) {
+  return stroke && stroke !== 'none' ? stroke : fill;
+}
+var computeLegendPayloadFromRadarSectors = props => {
+  var {
+    dataKey,
+    name,
+    stroke,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: getLegendItemColor(stroke, fill),
+    value: getTooltipNameProp(name, dataKey),
+    payload: props
+  }];
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType
+  } = props;
+  return {
+    /*
+     * I suppose this here _could_ return props.points
+     * because while Radar does not support item tooltip mode, it _could_ support it.
+     * But when I actually do return the points here, a defaultIndex test starts failing.
+     * So, undefined it is.
+     */
+    dataDefinedOnItem: undefined,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      nameKey: undefined,
+      // RadarChart does not have nameKey unfortunately
+      dataKey,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: getLegendItemColor(stroke, fill),
+      unit: '' // why doesn't Radar support unit?
+    }
+  };
+}
+function renderDotItem(option, props) {
+  var dotItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error typescript is unhappy with cloned props type
+    dotItem = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    dotItem = option(props);
+  } else {
+    dotItem = /*#__PURE__*/React.createElement(Dot, _extends({}, props, {
+      className: clsx('recharts-radar-dot', typeof option !== 'boolean' ? option.className : '')
+    }));
+  }
+  return dotItem;
+}
+export function computeRadarPoints(_ref) {
+  var {
+    radiusAxis,
+    angleAxis,
+    displayedData,
+    dataKey,
+    bandSize
+  } = _ref;
+  var {
+    cx,
+    cy
+  } = angleAxis;
+  var isRange = false;
+  var points = [];
+  var angleBandSize = angleAxis.type !== 'number' ? bandSize !== null && bandSize !== void 0 ? bandSize : 0 : 0;
+  displayedData.forEach((entry, i) => {
+    var name = getValueByDataKey(entry, angleAxis.dataKey, i);
+    var value = getValueByDataKey(entry, dataKey);
+    var angle = angleAxis.scale(name) + angleBandSize;
+    var pointValue = Array.isArray(value) ? last(value) : value;
+    var radius = isNullish(pointValue) ? undefined : radiusAxis.scale(pointValue);
+    if (Array.isArray(value) && value.length >= 2) {
+      isRange = true;
+    }
+    points.push(_objectSpread(_objectSpread({}, polarToCartesian(cx, cy, radius, angle)), {}, {
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      name,
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      value,
+      cx,
+      cy,
+      radius,
+      angle,
+      payload: entry
+    }));
+  });
+  var baseLinePoints = [];
+  if (isRange) {
+    points.forEach(point => {
+      if (Array.isArray(point.value)) {
+        var baseValue = point.value[0];
+        var radius = isNullish(baseValue) ? undefined : radiusAxis.scale(baseValue);
+        baseLinePoints.push(_objectSpread(_objectSpread({}, point), {}, {
+          radius
+        }, polarToCartesian(cx, cy, radius, point.angle)));
+      } else {
+        baseLinePoints.push(point);
+      }
+    });
+  }
+  return {
+    points,
+    isRange,
+    baseLinePoints
+  };
+}
+function Dots(_ref2) {
+  var {
+    points,
+    props
+  } = _ref2;
+  var {
+    dot,
+    dataKey
+  } = props;
+  if (!dot) {
+    return null;
+  }
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded);
+  var baseProps = svgPropertiesNoEvents(propsWithoutId);
+  var customDotProps = filterProps(dot, true);
+  var dots = points.map((entry, i) => {
+    var dotProps = _objectSpread(_objectSpread(_objectSpread({
+      key: "dot-".concat(i),
+      r: 3
+    }, baseProps), customDotProps), {}, {
+      dataKey,
+      cx: entry.x,
+      cy: entry.y,
+      index: i,
+      payload: entry
+    });
+
+    // @ts-expect-error r type is not compatible
+    return renderDotItem(dot, dotProps);
+  });
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-radar-dots"
+  }, dots);
+}
+function StaticPolygon(_ref3) {
+  var {
+    points,
+    props,
+    showLabels
+  } = _ref3;
+  if (points == null) {
+    return null;
+  }
+  var {
+    shape,
+    isRange,
+    baseLinePoints,
+    connectNulls
+  } = props;
+  var handleMouseEnter = e => {
+    var {
+      onMouseEnter
+    } = props;
+    if (onMouseEnter) {
+      onMouseEnter(props, e);
+    }
+  };
+  var handleMouseLeave = e => {
+    var {
+      onMouseLeave
+    } = props;
+    if (onMouseLeave) {
+      onMouseLeave(props, e);
+    }
+  };
+  var radar;
+  if (/*#__PURE__*/React.isValidElement(shape)) {
+    radar = /*#__PURE__*/React.cloneElement(shape, _objectSpread(_objectSpread({}, props), {}, {
+      points
+    }));
+  } else if (typeof shape === 'function') {
+    radar = shape(_objectSpread(_objectSpread({}, props), {}, {
+      points
+    }));
+  } else {
+    radar = /*#__PURE__*/React.createElement(Polygon, _extends({}, filterProps(props, true), {
+      onMouseEnter: handleMouseEnter,
+      onMouseLeave: handleMouseLeave,
+      points: points,
+      baseLinePoints: isRange ? baseLinePoints : null,
+      connectNulls: connectNulls
+    }));
+  }
+  return /*#__PURE__*/React.createElement(Layer, {
+    className: "recharts-radar-polygon"
+  }, radar, /*#__PURE__*/React.createElement(Dots, {
+    props: props,
+    points: points
+  }), showLabels && LabelList.renderCallByParent(props, points));
+}
+function PolygonWithAnimation(_ref4) {
+  var {
+    props,
+    previousPointsRef
+  } = _ref4;
+  var {
+    points,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevPoints = previousPointsRef.current;
+  var animationId = useAnimationId(props, 'recharts-radar-');
+  var [isAnimating, setIsAnimating] = useState(true);
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    key: "radar-".concat(animationId),
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart
+  }, t => {
+    var prevPointsDiffFactor = prevPoints && prevPoints.length / points.length;
+    var stepData = t === 1 ? points : points.map((entry, index) => {
+      var prev = prevPoints && prevPoints[Math.floor(index * prevPointsDiffFactor)];
+      if (prev) {
+        var _interpolatorX = interpolateNumber(prev.x, entry.x);
+        var _interpolatorY = interpolateNumber(prev.y, entry.y);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: _interpolatorX(t),
+          y: _interpolatorY(t)
+        });
+      }
+      var interpolatorX = interpolateNumber(entry.cx, entry.x);
+      var interpolatorY = interpolateNumber(entry.cy, entry.y);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        x: interpolatorX(t),
+        y: interpolatorY(t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = stepData;
+    }
+    return /*#__PURE__*/React.createElement(StaticPolygon, {
+      points: stepData,
+      props: props,
+      showLabels: !isAnimating
+    });
+  });
+}
+function RenderPolygon(props) {
+  var {
+    points,
+    isAnimationActive,
+    isRange
+  } = props;
+  var previousPointsRef = useRef(undefined);
+  var prevPoints = previousPointsRef.current;
+  if (isAnimationActive && points && points.length && !isRange && (!prevPoints || prevPoints !== points)) {
+    return /*#__PURE__*/React.createElement(PolygonWithAnimation, {
+      props: props,
+      previousPointsRef: previousPointsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(StaticPolygon, {
+    points: points,
+    props: props,
+    showLabels: true
+  });
+}
+var defaultRadarProps = {
+  angleAxisId: 0,
+  radiusAxisId: 0,
+  hide: false,
+  activeDot: true,
+  dot: false,
+  legendType: 'rect',
+  isAnimationActive: !Global.isSsr,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease'
+};
+class RadarWithState extends PureComponent {
+  render() {
+    var {
+      hide,
+      className,
+      points
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = clsx('recharts-radar', className);
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass
+    }, /*#__PURE__*/React.createElement(RenderPolygon, this.props)), /*#__PURE__*/React.createElement(ActivePoints, {
+      points: points,
+      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),
+      itemDataKey: this.props.dataKey,
+      activeDot: this.props.activeDot
+    }));
+  }
+}
+function RadarImpl(props) {
+  var isPanorama = useIsPanorama();
+  var radarPoints = useAppSelector(state => selectRadarPoints(state, props.radiusAxisId, props.angleAxisId, isPanorama, props.dataKey));
+  return /*#__PURE__*/React.createElement(RadarWithState, _extends({}, props, {
+    points: radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.points,
+    baseLinePoints: radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.baseLinePoints,
+    isRange: radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.isRange
+  }));
+}
+export class Radar extends PureComponent {
+  render() {
+    return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+      id: this.props.id,
+      type: "radar"
+    }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetPolarGraphicalItem, {
+      type: "radar",
+      id: id,
+      data: undefined // Radar does not have data prop, why?
+      ,
+      dataKey: this.props.dataKey,
+      hide: this.props.hide,
+      angleAxisId: this.props.angleAxisId,
+      radiusAxisId: this.props.radiusAxisId
+    }), /*#__PURE__*/React.createElement(SetPolarLegendPayload, {
+      legendPayload: computeLegendPayloadFromRadarSectors(this.props)
+    }), /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+      fn: getTooltipEntrySettings,
+      args: this.props
+    }), /*#__PURE__*/React.createElement(RadarImpl, _extends({}, this.props, {
+      id: id
+    }))));
+  }
+}
+_defineProperty(Radar, "displayName", 'Radar');
+_defineProperty(Radar, "defaultProps", defaultRadarProps);
Index: node_modules/recharts/es6/polar/RadialBar.js
===================================================================
--- node_modules/recharts/es6/polar/RadialBar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/polar/RadialBar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,425 @@
+var _excluded = ["shape", "activeShape", "cornerRadius", "id"],
+  _excluded2 = ["onMouseEnter", "onClick", "onMouseLeave"],
+  _excluded3 = ["value", "background"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+// eslint-disable-next-line max-classes-per-file
+import * as React from 'react';
+import { PureComponent, useCallback, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { parseCornerRadius, RadialBarSector } from '../util/RadialBarUtils';
+import { Layer } from '../container/Layer';
+import { findAllByType, filterProps } from '../util/ReactUtils';
+import { Global } from '../util/Global';
+import { LabelList } from '../component/LabelList';
+import { Cell } from '../component/Cell';
+import { mathSign, interpolateNumber } from '../util/DataUtils';
+import { getCateCoordinateOfBar, getValueByDataKey, truncateByDomain, getTooltipNameProp, getNormalizedStackId } from '../util/ChartUtils';
+import { adaptEventsOfChild } from '../util/types';
+import { useMouseClickItemDispatch, useMouseEnterItemDispatch, useMouseLeaveItemDispatch } from '../context/tooltipContext';
+import { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';
+import { selectRadialBarLegendPayload, selectRadialBarSectors } from '../state/selectors/radialBarSelectors';
+import { useAppSelector } from '../state/hooks';
+import { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';
+import { SetPolarLegendPayload } from '../state/SetLegendPayload';
+import { useAnimationId } from '../util/useAnimationId';
+import { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';
+import { SetPolarGraphicalItem } from '../state/SetGraphicalItem';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+import { JavascriptAnimate } from '../animation/JavascriptAnimate';
+var STABLE_EMPTY_ARRAY = [];
+function RadialBarSectors(_ref) {
+  var {
+    sectors,
+    allOtherRadialBarProps,
+    showLabels
+  } = _ref;
+  var {
+      shape,
+      activeShape,
+      cornerRadius,
+      id
+    } = allOtherRadialBarProps,
+    others = _objectWithoutProperties(allOtherRadialBarProps, _excluded);
+  var baseProps = svgPropertiesNoEvents(others);
+  var activeIndex = useAppSelector(selectActiveTooltipIndex);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = allOtherRadialBarProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherRadialBarProps, _excluded2);
+  var onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherRadialBarProps.dataKey);
+  var onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);
+  var onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherRadialBarProps.dataKey);
+  if (sectors == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, sectors.map((entry, i) => {
+    var isActive = activeShape && activeIndex === String(i);
+    // @ts-expect-error the types need a bit of attention
+    var onMouseEnter = onMouseEnterFromContext(entry, i);
+    // @ts-expect-error the types need a bit of attention
+    var onMouseLeave = onMouseLeaveFromContext(entry, i);
+    // @ts-expect-error the types need a bit of attention
+    var onClick = onClickFromContext(entry, i);
+
+    // @ts-expect-error cx types are incompatible
+    var radialBarSectorProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, baseProps), {}, {
+      cornerRadius: parseCornerRadius(cornerRadius)
+    }, entry), adaptEventsOfChild(restOfAllOtherProps, entry, i)), {}, {
+      onMouseEnter,
+      onMouseLeave,
+      onClick,
+      key: "sector-".concat(i),
+      className: "recharts-radial-bar-sector ".concat(entry.className),
+      forceCornerRadius: others.forceCornerRadius,
+      cornerIsExternal: others.cornerIsExternal,
+      isActive,
+      option: isActive ? activeShape : shape
+    });
+    return /*#__PURE__*/React.createElement(RadialBarSector, radialBarSectorProps);
+  }), showLabels && LabelList.renderCallByParent(allOtherRadialBarProps, sectors));
+}
+function SectorsWithAnimation(_ref2) {
+  var {
+    props,
+    previousSectorsRef
+  } = _ref2;
+  var {
+    data,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var animationId = useAnimationId(props, 'recharts-radialbar-');
+  var prevData = previousSectorsRef.current;
+  var [isAnimating, setIsAnimating] = useState(true);
+  var handleAnimationEnd = useCallback(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = useCallback(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd,
+    key: animationId
+  }, t => {
+    var stepData = t === 1 ? data : (data !== null && data !== void 0 ? data : STABLE_EMPTY_ARRAY).map((entry, index) => {
+      var prev = prevData && prevData[index];
+      if (prev) {
+        var interpolatorStartAngle = interpolateNumber(prev.startAngle, entry.startAngle);
+        var interpolatorEndAngle = interpolateNumber(prev.endAngle, entry.endAngle);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          startAngle: interpolatorStartAngle(t),
+          endAngle: interpolatorEndAngle(t)
+        });
+      }
+      var {
+        endAngle,
+        startAngle
+      } = entry;
+      var interpolator = interpolateNumber(startAngle, endAngle);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        endAngle: interpolator(t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousSectorsRef.current = stepData !== null && stepData !== void 0 ? stepData : null;
+    }
+    return /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(RadialBarSectors, {
+      sectors: stepData !== null && stepData !== void 0 ? stepData : STABLE_EMPTY_ARRAY,
+      allOtherRadialBarProps: props,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderSectors(props) {
+  var {
+    data = [],
+    isAnimationActive
+  } = props;
+  var previousSectorsRef = useRef(null);
+  var prevData = previousSectorsRef.current;
+  if (isAnimationActive && data && data.length && (!prevData || prevData !== data)) {
+    return /*#__PURE__*/React.createElement(SectorsWithAnimation, {
+      props: props,
+      previousSectorsRef: previousSectorsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(RadialBarSectors, {
+    sectors: data,
+    allOtherRadialBarProps: props,
+    showLabels: true
+  });
+}
+function SetRadialBarPayloadLegend(props) {
+  var legendPayload = useAppSelector(state => selectRadialBarLegendPayload(state, props.legendType));
+  return /*#__PURE__*/React.createElement(SetPolarLegendPayload, {
+    legendPayload: legendPayload !== null && legendPayload !== void 0 ? legendPayload : []
+  });
+}
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    data,
+    stroke,
+    strokeWidth,
+    name,
+    hide,
+    fill,
+    tooltipType
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      nameKey: undefined,
+      // RadialBar does not have nameKey, why?
+      dataKey,
+      name: getTooltipNameProp(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '' // Why does RadialBar not support unit?
+    }
+  };
+}
+class RadialBarWithState extends PureComponent {
+  renderBackground(sectors) {
+    if (sectors == null) {
+      return null;
+    }
+    var {
+      cornerRadius
+    } = this.props;
+    var backgroundProps = filterProps(this.props.background, false);
+    return sectors.map((entry, i) => {
+      var {
+          value,
+          background
+        } = entry,
+        rest = _objectWithoutProperties(entry, _excluded3);
+      if (!background) {
+        return null;
+      }
+      var props = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
+        cornerRadius: parseCornerRadius(cornerRadius)
+      }, rest), {}, {
+        fill: '#eee'
+      }, background), backgroundProps), adaptEventsOfChild(this.props, entry, i)), {}, {
+        index: i,
+        key: "sector-".concat(i),
+        className: clsx('recharts-radial-bar-background-sector', backgroundProps === null || backgroundProps === void 0 ? void 0 : backgroundProps.className),
+        option: background,
+        isActive: false
+      });
+      return /*#__PURE__*/React.createElement(RadialBarSector, props);
+    });
+  }
+  render() {
+    var {
+      hide,
+      data,
+      className,
+      background
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = clsx('recharts-area', className);
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: layerClass
+    }, background && /*#__PURE__*/React.createElement(Layer, {
+      className: "recharts-radial-bar-background"
+    }, this.renderBackground(data)), /*#__PURE__*/React.createElement(Layer, {
+      className: "recharts-radial-bar-sectors"
+    }, /*#__PURE__*/React.createElement(RenderSectors, this.props)));
+  }
+}
+function RadialBarImpl(props) {
+  var _useAppSelector;
+  var cells = findAllByType(props.children, Cell);
+  var radialBarSettings = {
+    data: undefined,
+    hide: false,
+    id: props.id,
+    dataKey: props.dataKey,
+    minPointSize: props.minPointSize,
+    stackId: getNormalizedStackId(props.stackId),
+    maxBarSize: props.maxBarSize,
+    barSize: props.barSize,
+    type: 'radialBar',
+    angleAxisId: props.angleAxisId,
+    radiusAxisId: props.radiusAxisId
+  };
+  var data = (_useAppSelector = useAppSelector(state => selectRadialBarSectors(state, props.radiusAxisId, props.angleAxisId, radialBarSettings, cells))) !== null && _useAppSelector !== void 0 ? _useAppSelector : STABLE_EMPTY_ARRAY;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: _objectSpread(_objectSpread({}, props), {}, {
+      data
+    })
+  }), /*#__PURE__*/React.createElement(RadialBarWithState, _extends({}, props, {
+    data: data
+  })));
+}
+var defaultRadialBarProps = {
+  angleAxisId: 0,
+  radiusAxisId: 0,
+  minPointSize: 0,
+  hide: false,
+  legendType: 'rect',
+  data: [],
+  isAnimationActive: !Global.isSsr,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  forceCornerRadius: false,
+  cornerIsExternal: false
+};
+export function computeRadialBarDataItems(_ref3) {
+  var {
+    displayedData,
+    stackedData,
+    dataStartIndex,
+    stackedDomain,
+    dataKey,
+    baseValue,
+    layout,
+    radiusAxis,
+    radiusAxisTicks,
+    bandSize,
+    pos,
+    angleAxis,
+    minPointSize,
+    cx,
+    cy,
+    angleAxisTicks,
+    cells,
+    startAngle: rootStartAngle,
+    endAngle: rootEndAngle
+  } = _ref3;
+  return (displayedData !== null && displayedData !== void 0 ? displayedData : []).map((entry, index) => {
+    var value, innerRadius, outerRadius, startAngle, endAngle, backgroundSector;
+    if (stackedData) {
+      // @ts-expect-error truncateByDomain expects only numerical domain, but it can received categorical domain too
+      value = truncateByDomain(stackedData[dataStartIndex + index], stackedDomain);
+    } else {
+      value = getValueByDataKey(entry, dataKey);
+      if (!Array.isArray(value)) {
+        value = [baseValue, value];
+      }
+    }
+    if (layout === 'radial') {
+      innerRadius = getCateCoordinateOfBar({
+        axis: radiusAxis,
+        ticks: radiusAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      endAngle = angleAxis.scale(value[1]);
+      startAngle = angleAxis.scale(value[0]);
+      outerRadius = (innerRadius !== null && innerRadius !== void 0 ? innerRadius : 0) + pos.size;
+      var deltaAngle = endAngle - startAngle;
+      if (Math.abs(minPointSize) > 0 && Math.abs(deltaAngle) < Math.abs(minPointSize)) {
+        var delta = mathSign(deltaAngle || minPointSize) * (Math.abs(minPointSize) - Math.abs(deltaAngle));
+        endAngle += delta;
+      }
+      backgroundSector = {
+        background: {
+          cx,
+          cy,
+          innerRadius,
+          outerRadius,
+          startAngle: rootStartAngle,
+          endAngle: rootEndAngle
+        }
+      };
+    } else {
+      innerRadius = radiusAxis.scale(value[0]);
+      outerRadius = radiusAxis.scale(value[1]);
+      startAngle = getCateCoordinateOfBar({
+        axis: angleAxis,
+        ticks: angleAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      endAngle = (startAngle !== null && startAngle !== void 0 ? startAngle : 0) + pos.size;
+      var deltaRadius = outerRadius - innerRadius;
+      if (Math.abs(minPointSize) > 0 && Math.abs(deltaRadius) < Math.abs(minPointSize)) {
+        var _delta = mathSign(deltaRadius || minPointSize) * (Math.abs(minPointSize) - Math.abs(deltaRadius));
+        outerRadius += _delta;
+      }
+    }
+    return _objectSpread(_objectSpread(_objectSpread({}, entry), backgroundSector), {}, {
+      payload: entry,
+      value: stackedData ? value : value[1],
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      startAngle,
+      endAngle
+    }, cells && cells[index] && cells[index].props);
+  });
+}
+export class RadialBar extends PureComponent {
+  render() {
+    return /*#__PURE__*/React.createElement(RegisterGraphicalItemId, {
+      id: this.props.id,
+      type: "radialBar"
+    }, id => {
+      var _this$props$hide, _this$props$angleAxis, _this$props$radiusAxi;
+      return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetPolarGraphicalItem, {
+        type: "radialBar",
+        id: id
+        // TODO: do we need this anymore and is the below comment true? Strict nulls complains about it
+        ,
+        data: undefined // data prop is injected through generator and overwrites what user passes in
+        ,
+        dataKey: this.props.dataKey
+        // TS is not smart enough to know defaultProps has values due to the explicit Partial type
+        ,
+        hide: (_this$props$hide = this.props.hide) !== null && _this$props$hide !== void 0 ? _this$props$hide : defaultRadialBarProps.hide,
+        angleAxisId: (_this$props$angleAxis = this.props.angleAxisId) !== null && _this$props$angleAxis !== void 0 ? _this$props$angleAxis : defaultRadialBarProps.angleAxisId,
+        radiusAxisId: (_this$props$radiusAxi = this.props.radiusAxisId) !== null && _this$props$radiusAxi !== void 0 ? _this$props$radiusAxi : defaultRadialBarProps.radiusAxisId,
+        stackId: getNormalizedStackId(this.props.stackId),
+        barSize: this.props.barSize,
+        minPointSize: this.props.minPointSize,
+        maxBarSize: this.props.maxBarSize
+      }), /*#__PURE__*/React.createElement(SetRadialBarPayloadLegend, this.props), /*#__PURE__*/React.createElement(RadialBarImpl, _extends({}, this.props, {
+        id: id
+      })));
+    });
+  }
+}
+_defineProperty(RadialBar, "displayName", 'RadialBar');
+_defineProperty(RadialBar, "defaultProps", defaultRadialBarProps);
Index: node_modules/recharts/es6/polar/defaultPolarAngleAxisProps.js
===================================================================
--- node_modules/recharts/es6/polar/defaultPolarAngleAxisProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/polar/defaultPolarAngleAxisProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+export var defaultPolarAngleAxisProps = {
+  allowDuplicatedCategory: true,
+  // if I set this to false then Tooltip synchronisation stops working in Radar, wtf
+  angleAxisId: 0,
+  axisLine: true,
+  cx: 0,
+  cy: 0,
+  orientation: 'outer',
+  reversed: false,
+  scale: 'auto',
+  tick: true,
+  tickLine: true,
+  tickSize: 8,
+  type: 'category'
+};
Index: node_modules/recharts/es6/polar/defaultPolarRadiusAxisProps.js
===================================================================
--- node_modules/recharts/es6/polar/defaultPolarRadiusAxisProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/polar/defaultPolarRadiusAxisProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+export var defaultPolarRadiusAxisProps = {
+  allowDataOverflow: false,
+  allowDuplicatedCategory: true,
+  angle: 0,
+  axisLine: true,
+  cx: 0,
+  cy: 0,
+  orientation: 'right',
+  radiusAxisId: 0,
+  scale: 'auto',
+  stroke: '#ccc',
+  tick: true,
+  tickCount: 5,
+  type: 'number'
+};
Index: node_modules/recharts/es6/shape/Cross.js
===================================================================
--- node_modules/recharts/es6/shape/Cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/shape/Cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+var _excluded = ["x", "y", "top", "left", "width", "height", "className"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Cross
+ */
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { isNumber } from '../util/DataUtils';
+import { filterProps } from '../util/ReactUtils';
+var getPath = (x, y, width, height, top, left) => {
+  return "M".concat(x, ",").concat(top, "v").concat(height, "M").concat(left, ",").concat(y, "h").concat(width);
+};
+export var Cross = _ref => {
+  var {
+      x = 0,
+      y = 0,
+      top = 0,
+      left = 0,
+      width = 0,
+      height = 0,
+      className
+    } = _ref,
+    rest = _objectWithoutProperties(_ref, _excluded);
+  var props = _objectSpread({
+    x,
+    y,
+    top,
+    left,
+    width,
+    height
+  }, rest);
+  if (!isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || !isNumber(top) || !isNumber(left)) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement("path", _extends({}, filterProps(props, true), {
+    className: clsx('recharts-cross', className),
+    d: getPath(x, y, width, height, top, left)
+  }));
+};
Index: node_modules/recharts/es6/shape/Curve.js
===================================================================
--- node_modules/recharts/es6/shape/Curve.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/shape/Curve.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * @fileOverview Curve
+ */
+import * as React from 'react';
+import { line as shapeLine, area as shapeArea, curveBasisClosed, curveBasisOpen, curveBasis, curveBumpX, curveBumpY, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from 'victory-vendor/d3-shape';
+import { clsx } from 'clsx';
+import { adaptEventHandlers } from '../util/types';
+import { isNumber, upperFirst } from '../util/DataUtils';
+import { isWellBehavedNumber } from '../util/isWellBehavedNumber';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+var CURVE_FACTORIES = {
+  curveBasisClosed,
+  curveBasisOpen,
+  curveBasis,
+  curveBumpX,
+  curveBumpY,
+  curveLinearClosed,
+  curveLinear,
+  curveMonotoneX,
+  curveMonotoneY,
+  curveNatural,
+  curveStep,
+  curveStepAfter,
+  curveStepBefore
+};
+
+/**
+ * @deprecated use {@link Coordinate} instead
+ * Duplicated with `Coordinate` in `util/types.ts`
+ */
+
+/**
+ * @deprecated use {@link NullableCoordinate} instead
+ * Duplicated with `NullableCoordinate` in `util/types.ts`
+ */
+
+var defined = p => isWellBehavedNumber(p.x) && isWellBehavedNumber(p.y);
+var getX = p => p.x;
+var getY = p => p.y;
+var getCurveFactory = (type, layout) => {
+  if (typeof type === 'function') {
+    return type;
+  }
+  var name = "curve".concat(upperFirst(type));
+  if ((name === 'curveMonotone' || name === 'curveBump') && layout) {
+    return CURVE_FACTORIES["".concat(name).concat(layout === 'vertical' ? 'Y' : 'X')];
+  }
+  return CURVE_FACTORIES[name] || curveLinear;
+};
+/**
+ * Calculate the path of curve. Returns null if points is an empty array.
+ * @return path or null
+ */
+export var getPath = _ref => {
+  var {
+    type = 'linear',
+    points = [],
+    baseLine,
+    layout,
+    connectNulls = false
+  } = _ref;
+  var curveFactory = getCurveFactory(type, layout);
+  var formatPoints = connectNulls ? points.filter(defined) : points;
+  var lineFunction;
+  if (Array.isArray(baseLine)) {
+    var formatBaseLine = connectNulls ? baseLine.filter(base => defined(base)) : baseLine;
+    var areaPoints = formatPoints.map((entry, index) => _objectSpread(_objectSpread({}, entry), {}, {
+      base: formatBaseLine[index]
+    }));
+    if (layout === 'vertical') {
+      lineFunction = shapeArea().y(getY).x1(getX).x0(d => d.base.x);
+    } else {
+      lineFunction = shapeArea().x(getX).y1(getY).y0(d => d.base.y);
+    }
+    lineFunction.defined(defined).curve(curveFactory);
+    return lineFunction(areaPoints);
+  }
+  if (layout === 'vertical' && isNumber(baseLine)) {
+    lineFunction = shapeArea().y(getY).x1(getX).x0(baseLine);
+  } else if (isNumber(baseLine)) {
+    lineFunction = shapeArea().x(getX).y1(getY).y0(baseLine);
+  } else {
+    lineFunction = shapeLine().x(getX).y(getY);
+  }
+  lineFunction.defined(defined).curve(curveFactory);
+  return lineFunction(formatPoints);
+};
+export var Curve = props => {
+  var {
+    className,
+    points,
+    path,
+    pathRef
+  } = props;
+  if ((!points || !points.length) && !path) {
+    return null;
+  }
+  var realPath = points && points.length ? getPath(props) : path;
+  return /*#__PURE__*/React.createElement("path", _extends({}, svgPropertiesNoEvents(props), adaptEventHandlers(props), {
+    className: clsx('recharts-curve', className),
+    d: realPath === null ? undefined : realPath,
+    ref: pathRef
+  }));
+};
Index: node_modules/recharts/es6/shape/Dot.js
===================================================================
--- node_modules/recharts/es6/shape/Dot.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/shape/Dot.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+/**
+ * @fileOverview Dot
+ */
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { adaptEventHandlers } from '../util/types';
+import { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';
+export var Dot = props => {
+  var {
+    cx,
+    cy,
+    r,
+    className
+  } = props;
+  var layerClass = clsx('recharts-dot', className);
+  if (cx === +cx && cy === +cy && r === +r) {
+    return /*#__PURE__*/React.createElement("circle", _extends({}, svgPropertiesNoEvents(props), adaptEventHandlers(props), {
+      className: layerClass,
+      cx: cx,
+      cy: cy,
+      r: r
+    }));
+  }
+  return null;
+};
Index: node_modules/recharts/es6/shape/Polygon.js
===================================================================
--- node_modules/recharts/es6/shape/Polygon.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/shape/Polygon.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+var _excluded = ["points", "className", "baseLinePoints", "connectNulls"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Polygon
+ */
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { filterProps } from '../util/ReactUtils';
+var isValidatePoint = point => {
+  return point && point.x === +point.x && point.y === +point.y;
+};
+var getParsedPoints = function getParsedPoints() {
+  var points = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+  var segmentPoints = [[]];
+  points.forEach(entry => {
+    if (isValidatePoint(entry)) {
+      segmentPoints[segmentPoints.length - 1].push(entry);
+    } else if (segmentPoints[segmentPoints.length - 1].length > 0) {
+      // add another path
+      segmentPoints.push([]);
+    }
+  });
+  if (isValidatePoint(points[0])) {
+    segmentPoints[segmentPoints.length - 1].push(points[0]);
+  }
+  if (segmentPoints[segmentPoints.length - 1].length <= 0) {
+    segmentPoints = segmentPoints.slice(0, -1);
+  }
+  return segmentPoints;
+};
+var getSinglePolygonPath = (points, connectNulls) => {
+  var segmentPoints = getParsedPoints(points);
+  if (connectNulls) {
+    segmentPoints = [segmentPoints.reduce((res, segPoints) => {
+      return [...res, ...segPoints];
+    }, [])];
+  }
+  var polygonPath = segmentPoints.map(segPoints => {
+    return segPoints.reduce((path, point, index) => {
+      return "".concat(path).concat(index === 0 ? 'M' : 'L').concat(point.x, ",").concat(point.y);
+    }, '');
+  }).join('');
+  return segmentPoints.length === 1 ? "".concat(polygonPath, "Z") : polygonPath;
+};
+var getRanglePath = (points, baseLinePoints, connectNulls) => {
+  var outerPath = getSinglePolygonPath(points, connectNulls);
+  return "".concat(outerPath.slice(-1) === 'Z' ? outerPath.slice(0, -1) : outerPath, "L").concat(getSinglePolygonPath(baseLinePoints.reverse(), connectNulls).slice(1));
+};
+export var Polygon = props => {
+  var {
+      points,
+      className,
+      baseLinePoints,
+      connectNulls
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  if (!points || !points.length) {
+    return null;
+  }
+  var layerClass = clsx('recharts-polygon', className);
+  if (baseLinePoints && baseLinePoints.length) {
+    var hasStroke = others.stroke && others.stroke !== 'none';
+    var rangePath = getRanglePath(points, baseLinePoints, connectNulls);
+    return /*#__PURE__*/React.createElement("g", {
+      className: layerClass
+    }, /*#__PURE__*/React.createElement("path", _extends({}, filterProps(others, true), {
+      fill: rangePath.slice(-1) === 'Z' ? others.fill : 'none',
+      stroke: "none",
+      d: rangePath
+    })), hasStroke ? /*#__PURE__*/React.createElement("path", _extends({}, filterProps(others, true), {
+      fill: "none",
+      d: getSinglePolygonPath(points, connectNulls)
+    })) : null, hasStroke ? /*#__PURE__*/React.createElement("path", _extends({}, filterProps(others, true), {
+      fill: "none",
+      d: getSinglePolygonPath(baseLinePoints, connectNulls)
+    })) : null);
+  }
+  var singlePath = getSinglePolygonPath(points, connectNulls);
+  return /*#__PURE__*/React.createElement("path", _extends({}, filterProps(others, true), {
+    fill: singlePath.slice(-1) === 'Z' ? others.fill : 'none',
+    className: layerClass,
+    d: singlePath
+  }));
+};
Index: node_modules/recharts/es6/shape/Rectangle.js
===================================================================
--- node_modules/recharts/es6/shape/Rectangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/shape/Rectangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,148 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+/**
+ * @fileOverview Rectangle
+ */
+import * as React from 'react';
+import { useEffect, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { filterProps } from '../util/ReactUtils';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { Animate } from '../animation/Animate';
+var getRectanglePath = (x, y, width, height, radius) => {
+  var maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2);
+  var ySign = height >= 0 ? 1 : -1;
+  var xSign = width >= 0 ? 1 : -1;
+  var clockWise = height >= 0 && width >= 0 || height < 0 && width < 0 ? 1 : 0;
+  var path;
+  if (maxRadius > 0 && radius instanceof Array) {
+    var newRadius = [0, 0, 0, 0];
+    for (var i = 0, len = 4; i < len; i++) {
+      newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i];
+    }
+    path = "M".concat(x, ",").concat(y + ySign * newRadius[0]);
+    if (newRadius[0] > 0) {
+      path += "A ".concat(newRadius[0], ",").concat(newRadius[0], ",0,0,").concat(clockWise, ",").concat(x + xSign * newRadius[0], ",").concat(y);
+    }
+    path += "L ".concat(x + width - xSign * newRadius[1], ",").concat(y);
+    if (newRadius[1] > 0) {
+      path += "A ".concat(newRadius[1], ",").concat(newRadius[1], ",0,0,").concat(clockWise, ",\n        ").concat(x + width, ",").concat(y + ySign * newRadius[1]);
+    }
+    path += "L ".concat(x + width, ",").concat(y + height - ySign * newRadius[2]);
+    if (newRadius[2] > 0) {
+      path += "A ".concat(newRadius[2], ",").concat(newRadius[2], ",0,0,").concat(clockWise, ",\n        ").concat(x + width - xSign * newRadius[2], ",").concat(y + height);
+    }
+    path += "L ".concat(x + xSign * newRadius[3], ",").concat(y + height);
+    if (newRadius[3] > 0) {
+      path += "A ".concat(newRadius[3], ",").concat(newRadius[3], ",0,0,").concat(clockWise, ",\n        ").concat(x, ",").concat(y + height - ySign * newRadius[3]);
+    }
+    path += 'Z';
+  } else if (maxRadius > 0 && radius === +radius && radius > 0) {
+    var _newRadius = Math.min(maxRadius, radius);
+    path = "M ".concat(x, ",").concat(y + ySign * _newRadius, "\n            A ").concat(_newRadius, ",").concat(_newRadius, ",0,0,").concat(clockWise, ",").concat(x + xSign * _newRadius, ",").concat(y, "\n            L ").concat(x + width - xSign * _newRadius, ",").concat(y, "\n            A ").concat(_newRadius, ",").concat(_newRadius, ",0,0,").concat(clockWise, ",").concat(x + width, ",").concat(y + ySign * _newRadius, "\n            L ").concat(x + width, ",").concat(y + height - ySign * _newRadius, "\n            A ").concat(_newRadius, ",").concat(_newRadius, ",0,0,").concat(clockWise, ",").concat(x + width - xSign * _newRadius, ",").concat(y + height, "\n            L ").concat(x + xSign * _newRadius, ",").concat(y + height, "\n            A ").concat(_newRadius, ",").concat(_newRadius, ",0,0,").concat(clockWise, ",").concat(x, ",").concat(y + height - ySign * _newRadius, " Z");
+  } else {
+    path = "M ".concat(x, ",").concat(y, " h ").concat(width, " v ").concat(height, " h ").concat(-width, " Z");
+  }
+  return path;
+};
+var defaultProps = {
+  x: 0,
+  y: 0,
+  width: 0,
+  height: 0,
+  // The radius of border
+  // The radius of four corners when radius is a number
+  // The radius of left-top, right-top, right-bottom, left-bottom when radius is an array
+  radius: 0,
+  isAnimationActive: false,
+  isUpdateAnimationActive: false,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease'
+};
+export var Rectangle = rectangleProps => {
+  var props = resolveDefaultProps(rectangleProps, defaultProps);
+  var pathRef = useRef(null);
+  var [totalLength, setTotalLength] = useState(-1);
+  useEffect(() => {
+    if (pathRef.current && pathRef.current.getTotalLength) {
+      try {
+        var pathTotalLength = pathRef.current.getTotalLength();
+        if (pathTotalLength) {
+          setTotalLength(pathTotalLength);
+        }
+      } catch (_unused) {
+        // calculate total length error
+      }
+    }
+  }, []);
+  var {
+    x,
+    y,
+    width,
+    height,
+    radius,
+    className
+  } = props;
+  var {
+    animationEasing,
+    animationDuration,
+    animationBegin,
+    isAnimationActive,
+    isUpdateAnimationActive
+  } = props;
+  if (x !== +x || y !== +y || width !== +width || height !== +height || width === 0 || height === 0) {
+    return null;
+  }
+  var layerClass = clsx('recharts-rectangle', className);
+  if (!isUpdateAnimationActive) {
+    return /*#__PURE__*/React.createElement("path", _extends({}, filterProps(props, true), {
+      className: layerClass,
+      d: getRectanglePath(x, y, width, height, radius)
+    }));
+  }
+  return /*#__PURE__*/React.createElement(Animate, {
+    canBegin: totalLength > 0,
+    from: {
+      width,
+      height,
+      x,
+      y
+    },
+    to: {
+      width,
+      height,
+      x,
+      y
+    },
+    duration: animationDuration
+    // @ts-expect-error TODO - fix the type error
+    ,
+    animationEasing: animationEasing,
+    isActive: isUpdateAnimationActive
+  }, _ref => {
+    var {
+      width: currWidth,
+      height: currHeight,
+      x: currX,
+      y: currY
+    } = _ref;
+    return /*#__PURE__*/React.createElement(Animate, {
+      canBegin: totalLength > 0
+      // @ts-expect-error TODO - fix the type error
+      ,
+      from: "0px ".concat(totalLength === -1 ? 1 : totalLength, "px")
+      // @ts-expect-error TODO - fix the type error
+      ,
+      to: "".concat(totalLength, "px 0px"),
+      attributeName: "strokeDasharray",
+      begin: animationBegin,
+      duration: animationDuration,
+      isActive: isAnimationActive,
+      easing: animationEasing
+    }, /*#__PURE__*/React.createElement("path", _extends({}, filterProps(props, true), {
+      className: layerClass,
+      d: getRectanglePath(currX, currY, currWidth, currHeight, radius),
+      ref: pathRef
+    })));
+  });
+};
Index: node_modules/recharts/es6/shape/Sector.js
===================================================================
--- node_modules/recharts/es6/shape/Sector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/shape/Sector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,222 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+import * as React from 'react';
+import { clsx } from 'clsx';
+import { filterProps } from '../util/ReactUtils';
+import { polarToCartesian, RADIAN } from '../util/PolarUtils';
+import { getPercentValue, mathSign } from '../util/DataUtils';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+var getDeltaAngle = (startAngle, endAngle) => {
+  var sign = mathSign(endAngle - startAngle);
+  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);
+  return sign * deltaAngle;
+};
+var getTangentCircle = _ref => {
+  var {
+    cx,
+    cy,
+    radius,
+    angle,
+    sign,
+    isExternal,
+    cornerRadius,
+    cornerIsExternal
+  } = _ref;
+  var centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;
+  var theta = Math.asin(cornerRadius / centerRadius) / RADIAN;
+  var centerAngle = cornerIsExternal ? angle : angle + sign * theta;
+  var center = polarToCartesian(cx, cy, centerRadius, centerAngle);
+  // The coordinate of point which is tangent to the circle
+  var circleTangency = polarToCartesian(cx, cy, radius, centerAngle);
+  // The coordinate of point which is tangent to the radius line
+  var lineTangencyAngle = cornerIsExternal ? angle - sign * theta : angle;
+  var lineTangency = polarToCartesian(cx, cy, centerRadius * Math.cos(theta * RADIAN), lineTangencyAngle);
+  return {
+    center,
+    circleTangency,
+    lineTangency,
+    theta
+  };
+};
+var getSectorPath = _ref2 => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle
+  } = _ref2;
+  var angle = getDeltaAngle(startAngle, endAngle);
+
+  // When the angle of sector equals to 360, star point and end point coincide
+  var tempEndAngle = startAngle + angle;
+  var outerStartPoint = polarToCartesian(cx, cy, outerRadius, startAngle);
+  var outerEndPoint = polarToCartesian(cx, cy, outerRadius, tempEndAngle);
+  var path = "M ".concat(outerStartPoint.x, ",").concat(outerStartPoint.y, "\n    A ").concat(outerRadius, ",").concat(outerRadius, ",0,\n    ").concat(+(Math.abs(angle) > 180), ",").concat(+(startAngle > tempEndAngle), ",\n    ").concat(outerEndPoint.x, ",").concat(outerEndPoint.y, "\n  ");
+  if (innerRadius > 0) {
+    var innerStartPoint = polarToCartesian(cx, cy, innerRadius, startAngle);
+    var innerEndPoint = polarToCartesian(cx, cy, innerRadius, tempEndAngle);
+    path += "L ".concat(innerEndPoint.x, ",").concat(innerEndPoint.y, "\n            A ").concat(innerRadius, ",").concat(innerRadius, ",0,\n            ").concat(+(Math.abs(angle) > 180), ",").concat(+(startAngle <= tempEndAngle), ",\n            ").concat(innerStartPoint.x, ",").concat(innerStartPoint.y, " Z");
+  } else {
+    path += "L ".concat(cx, ",").concat(cy, " Z");
+  }
+  return path;
+};
+var getSectorWithCorner = _ref3 => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    cornerRadius,
+    forceCornerRadius,
+    cornerIsExternal,
+    startAngle,
+    endAngle
+  } = _ref3;
+  var sign = mathSign(endAngle - startAngle);
+  var {
+    circleTangency: soct,
+    lineTangency: solt,
+    theta: sot
+  } = getTangentCircle({
+    cx,
+    cy,
+    radius: outerRadius,
+    angle: startAngle,
+    sign,
+    cornerRadius,
+    cornerIsExternal
+  });
+  var {
+    circleTangency: eoct,
+    lineTangency: eolt,
+    theta: eot
+  } = getTangentCircle({
+    cx,
+    cy,
+    radius: outerRadius,
+    angle: endAngle,
+    sign: -sign,
+    cornerRadius,
+    cornerIsExternal
+  });
+  var outerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sot - eot;
+  if (outerArcAngle < 0) {
+    if (forceCornerRadius) {
+      return "M ".concat(solt.x, ",").concat(solt.y, "\n        a").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,1,").concat(cornerRadius * 2, ",0\n        a").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,1,").concat(-cornerRadius * 2, ",0\n      ");
+    }
+    return getSectorPath({
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      startAngle,
+      endAngle
+    });
+  }
+  var path = "M ".concat(solt.x, ",").concat(solt.y, "\n    A").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,").concat(+(sign < 0), ",").concat(soct.x, ",").concat(soct.y, "\n    A").concat(outerRadius, ",").concat(outerRadius, ",0,").concat(+(outerArcAngle > 180), ",").concat(+(sign < 0), ",").concat(eoct.x, ",").concat(eoct.y, "\n    A").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,").concat(+(sign < 0), ",").concat(eolt.x, ",").concat(eolt.y, "\n  ");
+  if (innerRadius > 0) {
+    var {
+      circleTangency: sict,
+      lineTangency: silt,
+      theta: sit
+    } = getTangentCircle({
+      cx,
+      cy,
+      radius: innerRadius,
+      angle: startAngle,
+      sign,
+      isExternal: true,
+      cornerRadius,
+      cornerIsExternal
+    });
+    var {
+      circleTangency: eict,
+      lineTangency: eilt,
+      theta: eit
+    } = getTangentCircle({
+      cx,
+      cy,
+      radius: innerRadius,
+      angle: endAngle,
+      sign: -sign,
+      isExternal: true,
+      cornerRadius,
+      cornerIsExternal
+    });
+    var innerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sit - eit;
+    if (innerArcAngle < 0 && cornerRadius === 0) {
+      return "".concat(path, "L").concat(cx, ",").concat(cy, "Z");
+    }
+    path += "L".concat(eilt.x, ",").concat(eilt.y, "\n      A").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,").concat(+(sign < 0), ",").concat(eict.x, ",").concat(eict.y, "\n      A").concat(innerRadius, ",").concat(innerRadius, ",0,").concat(+(innerArcAngle > 180), ",").concat(+(sign > 0), ",").concat(sict.x, ",").concat(sict.y, "\n      A").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,").concat(+(sign < 0), ",").concat(silt.x, ",").concat(silt.y, "Z");
+  } else {
+    path += "L".concat(cx, ",").concat(cy, "Z");
+  }
+  return path;
+};
+
+/**
+ * SVG cx, cy are `string | number | undefined`, but internally we use `number` so let's
+ * override the types here.
+ */
+
+var defaultProps = {
+  cx: 0,
+  cy: 0,
+  innerRadius: 0,
+  outerRadius: 0,
+  startAngle: 0,
+  endAngle: 0,
+  cornerRadius: 0,
+  forceCornerRadius: false,
+  cornerIsExternal: false
+};
+export var Sector = sectorProps => {
+  var props = resolveDefaultProps(sectorProps, defaultProps);
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    cornerRadius,
+    forceCornerRadius,
+    cornerIsExternal,
+    startAngle,
+    endAngle,
+    className
+  } = props;
+  if (outerRadius < innerRadius || startAngle === endAngle) {
+    return null;
+  }
+  var layerClass = clsx('recharts-sector', className);
+  var deltaRadius = outerRadius - innerRadius;
+  var cr = getPercentValue(cornerRadius, deltaRadius, 0, true);
+  var path;
+  if (cr > 0 && Math.abs(startAngle - endAngle) < 360) {
+    path = getSectorWithCorner({
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      cornerRadius: Math.min(cr, deltaRadius / 2),
+      forceCornerRadius,
+      cornerIsExternal,
+      startAngle,
+      endAngle
+    });
+  } else {
+    path = getSectorPath({
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      startAngle,
+      endAngle
+    });
+  }
+  return /*#__PURE__*/React.createElement("path", _extends({}, filterProps(props, true), {
+    className: layerClass,
+    d: path
+  }));
+};
Index: node_modules/recharts/es6/shape/Symbols.js
===================================================================
--- node_modules/recharts/es6/shape/Symbols.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/shape/Symbols.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,96 @@
+var _excluded = ["type", "size", "sizeType"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * @fileOverview Curve
+ */
+import * as React from 'react';
+import { symbol as shapeSymbol, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye } from 'victory-vendor/d3-shape';
+import { clsx } from 'clsx';
+import { filterProps } from '../util/ReactUtils';
+import { upperFirst } from '../util/DataUtils';
+var symbolFactories = {
+  symbolCircle,
+  symbolCross,
+  symbolDiamond,
+  symbolSquare,
+  symbolStar,
+  symbolTriangle,
+  symbolWye
+};
+var RADIAN = Math.PI / 180;
+var getSymbolFactory = type => {
+  var name = "symbol".concat(upperFirst(type));
+  return symbolFactories[name] || symbolCircle;
+};
+var calculateAreaSize = (size, sizeType, type) => {
+  if (sizeType === 'area') {
+    return size;
+  }
+  switch (type) {
+    case 'cross':
+      return 5 * size * size / 9;
+    case 'diamond':
+      return 0.5 * size * size / Math.sqrt(3);
+    case 'square':
+      return size * size;
+    case 'star':
+      {
+        var angle = 18 * RADIAN;
+        return 1.25 * size * size * (Math.tan(angle) - Math.tan(angle * 2) * Math.tan(angle) ** 2);
+      }
+    case 'triangle':
+      return Math.sqrt(3) * size * size / 4;
+    case 'wye':
+      return (21 - 10 * Math.sqrt(3)) * size * size / 8;
+    default:
+      return Math.PI * size * size / 4;
+  }
+};
+var registerSymbol = (key, factory) => {
+  symbolFactories["symbol".concat(upperFirst(key))] = factory;
+};
+export var Symbols = _ref => {
+  var {
+      type = 'circle',
+      size = 64,
+      sizeType = 'area'
+    } = _ref,
+    rest = _objectWithoutProperties(_ref, _excluded);
+  var props = _objectSpread(_objectSpread({}, rest), {}, {
+    type,
+    size,
+    sizeType
+  });
+
+  /**
+   * Calculate the path of curve
+   * @return {String} path
+   */
+  var getPath = () => {
+    var symbolFactory = getSymbolFactory(type);
+    var symbol = shapeSymbol().type(symbolFactory).size(calculateAreaSize(size, sizeType, type));
+    return symbol();
+  };
+  var {
+    className,
+    cx,
+    cy
+  } = props;
+  var filteredProps = filterProps(props, true);
+  if (cx === +cx && cy === +cy && size === +size) {
+    return /*#__PURE__*/React.createElement("path", _extends({}, filteredProps, {
+      className: clsx('recharts-symbols', className),
+      transform: "translate(".concat(cx, ", ").concat(cy, ")"),
+      d: getPath()
+    }));
+  }
+  return null;
+};
+Symbols.registerSymbol = registerSymbol;
Index: node_modules/recharts/es6/shape/Trapezoid.js
===================================================================
--- node_modules/recharts/es6/shape/Trapezoid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/shape/Trapezoid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,119 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+/**
+ * @fileOverview Rectangle
+ */
+import * as React from 'react';
+import { useEffect, useRef, useState } from 'react';
+import { clsx } from 'clsx';
+import { filterProps } from '../util/ReactUtils';
+import { resolveDefaultProps } from '../util/resolveDefaultProps';
+import { Animate } from '../animation/Animate';
+var getTrapezoidPath = (x, y, upperWidth, lowerWidth, height) => {
+  var widthGap = upperWidth - lowerWidth;
+  var path;
+  path = "M ".concat(x, ",").concat(y);
+  path += "L ".concat(x + upperWidth, ",").concat(y);
+  path += "L ".concat(x + upperWidth - widthGap / 2, ",").concat(y + height);
+  path += "L ".concat(x + upperWidth - widthGap / 2 - lowerWidth, ",").concat(y + height);
+  path += "L ".concat(x, ",").concat(y, " Z");
+  return path;
+};
+var defaultProps = {
+  x: 0,
+  y: 0,
+  upperWidth: 0,
+  lowerWidth: 0,
+  height: 0,
+  isUpdateAnimationActive: false,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease'
+};
+export var Trapezoid = props => {
+  var trapezoidProps = resolveDefaultProps(props, defaultProps);
+  var pathRef = useRef();
+  var [totalLength, setTotalLength] = useState(-1);
+  useEffect(() => {
+    if (pathRef.current && pathRef.current.getTotalLength) {
+      try {
+        var pathTotalLength = pathRef.current.getTotalLength();
+        if (pathTotalLength) {
+          setTotalLength(pathTotalLength);
+        }
+      } catch (_unused) {
+        // calculate total length error
+      }
+    }
+  }, []);
+  var {
+    x,
+    y,
+    upperWidth,
+    lowerWidth,
+    height,
+    className
+  } = trapezoidProps;
+  var {
+    animationEasing,
+    animationDuration,
+    animationBegin,
+    isUpdateAnimationActive
+  } = trapezoidProps;
+  if (x !== +x || y !== +y || upperWidth !== +upperWidth || lowerWidth !== +lowerWidth || height !== +height || upperWidth === 0 && lowerWidth === 0 || height === 0) {
+    return null;
+  }
+  var layerClass = clsx('recharts-trapezoid', className);
+  if (!isUpdateAnimationActive) {
+    return /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", _extends({}, filterProps(trapezoidProps, true), {
+      className: layerClass,
+      d: getTrapezoidPath(x, y, upperWidth, lowerWidth, height)
+    })));
+  }
+  return /*#__PURE__*/React.createElement(Animate, {
+    canBegin: totalLength > 0,
+    from: {
+      upperWidth: 0,
+      lowerWidth: 0,
+      height,
+      x,
+      y
+    },
+    to: {
+      upperWidth,
+      lowerWidth,
+      height,
+      x,
+      y
+    },
+    duration: animationDuration
+    // @ts-expect-error TODO - fix the type error
+    ,
+    animationEasing: animationEasing,
+    isActive: isUpdateAnimationActive
+  }, _ref => {
+    var {
+      upperWidth: currUpperWidth,
+      lowerWidth: currLowerWidth,
+      height: currHeight,
+      x: currX,
+      y: currY
+    } = _ref;
+    return /*#__PURE__*/React.createElement(Animate, {
+      canBegin: totalLength > 0
+      // @ts-expect-error TODO - fix the type error
+      ,
+      from: "0px ".concat(totalLength === -1 ? 1 : totalLength, "px")
+      // @ts-expect-error TODO - fix the type error
+      ,
+      to: "".concat(totalLength, "px 0px"),
+      attributeName: "strokeDasharray",
+      begin: animationBegin,
+      duration: animationDuration,
+      easing: animationEasing
+    }, /*#__PURE__*/React.createElement("path", _extends({}, filterProps(trapezoidProps, true), {
+      className: layerClass,
+      d: getTrapezoidPath(currX, currY, currUpperWidth, currLowerWidth, currHeight),
+      ref: pathRef
+    })));
+  });
+};
Index: node_modules/recharts/es6/state/RechartsReduxContext.js
===================================================================
--- node_modules/recharts/es6/state/RechartsReduxContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/RechartsReduxContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { createContext } from 'react';
+
+/*
+ * This is a copy of the React-Redux context type, but with our own store type.
+ * We could import directly from react-redux like this:
+ * import { ReactReduxContextValue } from 'react-redux/src/components/Context';
+ * but that makes typescript angry with some errors I am not sure how to resolve
+ * so copy it is.
+ */
+
+/**
+ * We need to use our own independent Redux context because we need to avoid interfering with other people's Redux stores
+ * in case they decide to install and use Recharts in another Redux app which is likely to happen.
+ *
+ * https://react-redux.js.org/using-react-redux/accessing-store#providing-custom-context
+ */
+export var RechartsReduxContext = /*#__PURE__*/createContext(null);
Index: node_modules/recharts/es6/state/RechartsStoreProvider.js
===================================================================
--- node_modules/recharts/es6/state/RechartsStoreProvider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/RechartsStoreProvider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+import * as React from 'react';
+import { useRef } from 'react';
+import { Provider } from 'react-redux';
+import { createRechartsStore } from './store';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { RechartsReduxContext } from './RechartsReduxContext';
+export function RechartsStoreProvider(_ref) {
+  var {
+    preloadedState,
+    children,
+    reduxStoreName
+  } = _ref;
+  var isPanorama = useIsPanorama();
+  /*
+   * Why the ref? Redux official documentation recommends to use store as a singleton,
+   * and reuse that everywhere: https://redux-toolkit.js.org/api/configureStore#basic-example
+   *
+   * Which is correct! Except that is considering deploying Redux in an app.
+   * Recharts as a library supports multiple charts on the same page.
+   * And each of these charts needs its own store independent of others!
+   *
+   * The alternative is to have everything in the store keyed by the chart id.
+   * Which would make working with everything a little bit more painful because we need the chart id everywhere.
+   */
+  var storeRef = useRef(null);
+
+  /*
+   * Panorama means that this chart is not its own chart, it's only a "preview"
+   * being rendered as a child of Brush.
+   * In such case, it should not have a store on its own - it should implicitly inherit
+   * whatever data is in the "parent" or "root" chart.
+   * Which here is represented by not having a Provider at all. All selectors will use the root store by default.
+   */
+  if (isPanorama) {
+    return children;
+  }
+  if (storeRef.current == null) {
+    storeRef.current = createRechartsStore(preloadedState, reduxStoreName);
+  }
+
+  // ts-expect-error React-Redux types demand that the context internal value is not null, but we have that as default.
+  var nonNullContext = RechartsReduxContext;
+  return /*#__PURE__*/React.createElement(Provider, {
+    context: nonNullContext,
+    store: storeRef.current
+  }, children);
+}
Index: node_modules/recharts/es6/state/ReportChartProps.js
===================================================================
--- node_modules/recharts/es6/state/ReportChartProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/ReportChartProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { useEffect } from 'react';
+import { updateOptions } from './rootPropsSlice';
+import { useAppDispatch } from './hooks';
+export function ReportChartProps(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(updateOptions(props));
+  }, [dispatch, props]);
+  return null;
+}
Index: node_modules/recharts/es6/state/ReportMainChartProps.js
===================================================================
--- node_modules/recharts/es6/state/ReportMainChartProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/ReportMainChartProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+import { useEffect } from 'react';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { setChartSize, setLayout, setMargin } from './layoutSlice';
+import { useAppDispatch } from './hooks';
+
+/**
+ * "Main" props are props that are only accepted on the main chart,
+ * as opposed to the small panorama chart inside a Brush.
+ */
+
+export function ReportMainChartProps(_ref) {
+  var {
+    layout,
+    width,
+    height,
+    margin
+  } = _ref;
+  var dispatch = useAppDispatch();
+
+  /*
+   * Skip dispatching properties in panorama chart for two reasons:
+   * 1. The root chart should be deciding on these properties, and
+   * 2. Brush reads these properties from redux store, and so they must remain stable
+   *      to avoid circular dependency and infinite re-rendering.
+   */
+  var isPanorama = useIsPanorama();
+  /*
+   * useEffect here is required to avoid the "Cannot update a component while rendering a different component" error.
+   * https://github.com/facebook/react/issues/18178
+   *
+   * Reported in https://github.com/recharts/recharts/issues/5514
+   */
+  useEffect(() => {
+    if (!isPanorama) {
+      dispatch(setLayout(layout));
+      dispatch(setChartSize({
+        width,
+        height
+      }));
+      dispatch(setMargin(margin));
+    }
+  }, [dispatch, isPanorama, layout, width, height, margin]);
+  return null;
+}
Index: node_modules/recharts/es6/state/ReportPolarOptions.js
===================================================================
--- node_modules/recharts/es6/state/ReportPolarOptions.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/ReportPolarOptions.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { useEffect } from 'react';
+import { useAppDispatch } from './hooks';
+import { updatePolarOptions } from './polarOptionsSlice';
+export function ReportPolarOptions(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(updatePolarOptions(props));
+  }, [dispatch, props]);
+  return null;
+}
Index: node_modules/recharts/es6/state/SetGraphicalItem.js
===================================================================
--- node_modules/recharts/es6/state/SetGraphicalItem.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/SetGraphicalItem.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import { useEffect, useRef } from 'react';
+import { useAppDispatch } from './hooks';
+import { addCartesianGraphicalItem, addPolarGraphicalItem, removeCartesianGraphicalItem, removePolarGraphicalItem, replaceCartesianGraphicalItem } from './graphicalItemsSlice';
+export function SetCartesianGraphicalItem(props) {
+  var dispatch = useAppDispatch();
+  var prevPropsRef = useRef(null);
+  useEffect(() => {
+    if (prevPropsRef.current === null) {
+      dispatch(addCartesianGraphicalItem(props));
+    } else if (prevPropsRef.current !== props) {
+      dispatch(replaceCartesianGraphicalItem({
+        prev: prevPropsRef.current,
+        next: props
+      }));
+    }
+    prevPropsRef.current = props;
+  }, [dispatch, props]);
+  useEffect(() => {
+    return () => {
+      if (prevPropsRef.current) {
+        dispatch(removeCartesianGraphicalItem(prevPropsRef.current));
+        /*
+         * Here we have to reset the ref to null because in StrictMode, the effect will run twice,
+         * but it will keep the same ref value from the first render.
+         *
+         * In browser, React will clear the ref after the first effect cleanup,
+         * so that wouldn't be an issue.
+         *
+         * In StrictMode, however, the ref is kept,
+         * and in the hook above the code checks for `prevPropsRef.current === null`
+         * which would be false so it would not dispatch the `addCartesianGraphicalItem` action again.
+         *
+         * https://github.com/recharts/recharts/issues/6022
+         */
+        prevPropsRef.current = null;
+      }
+    };
+  }, [dispatch]);
+  return null;
+}
+export function SetPolarGraphicalItem(props) {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(addPolarGraphicalItem(props));
+    return () => {
+      dispatch(removePolarGraphicalItem(props));
+    };
+  }, [dispatch, props]);
+  return null;
+}
Index: node_modules/recharts/es6/state/SetLegendPayload.js
===================================================================
--- node_modules/recharts/es6/state/SetLegendPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/SetLegendPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { useEffect } from 'react';
+import { useIsPanorama } from '../context/PanoramaContext';
+import { selectChartLayout } from '../context/chartLayoutContext';
+import { useAppDispatch, useAppSelector } from './hooks';
+import { addLegendPayload, removeLegendPayload } from './legendSlice';
+var noop = () => {};
+export function SetLegendPayload(_ref) {
+  var {
+    legendPayload
+  } = _ref;
+  var dispatch = useAppDispatch();
+  var isPanorama = useIsPanorama();
+  useEffect(() => {
+    if (isPanorama) {
+      return noop;
+    }
+    dispatch(addLegendPayload(legendPayload));
+    return () => {
+      dispatch(removeLegendPayload(legendPayload));
+    };
+  }, [dispatch, isPanorama, legendPayload]);
+  return null;
+}
+export function SetPolarLegendPayload(_ref2) {
+  var {
+    legendPayload
+  } = _ref2;
+  var dispatch = useAppDispatch();
+  var layout = useAppSelector(selectChartLayout);
+  useEffect(() => {
+    if (layout !== 'centric' && layout !== 'radial') {
+      return noop;
+    }
+    dispatch(addLegendPayload(legendPayload));
+    return () => {
+      dispatch(removeLegendPayload(legendPayload));
+    };
+  }, [dispatch, layout, legendPayload]);
+  return null;
+}
Index: node_modules/recharts/es6/state/SetTooltipEntrySettings.js
===================================================================
--- node_modules/recharts/es6/state/SetTooltipEntrySettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/SetTooltipEntrySettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import { useEffect } from 'react';
+import { useAppDispatch } from './hooks';
+import { addTooltipEntrySettings, removeTooltipEntrySettings } from './tooltipSlice';
+import { useIsPanorama } from '../context/PanoramaContext';
+export function SetTooltipEntrySettings(_ref) {
+  var {
+    fn,
+    args
+  } = _ref;
+  var dispatch = useAppDispatch();
+  var isPanorama = useIsPanorama();
+  useEffect(() => {
+    if (isPanorama) {
+      // Panorama graphical items should never contribute to Tooltip payload.
+      return undefined;
+    }
+    var tooltipEntrySettings = fn(args);
+    dispatch(addTooltipEntrySettings(tooltipEntrySettings));
+    return () => {
+      dispatch(removeTooltipEntrySettings(tooltipEntrySettings));
+    };
+  }, [fn, args, dispatch, isPanorama]);
+  return null;
+}
Index: node_modules/recharts/es6/state/brushSlice.js
===================================================================
--- node_modules/recharts/es6/state/brushSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/brushSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import { createSlice } from '@reduxjs/toolkit';
+
+/**
+ * From all Brush properties, only height has a default value and will always be defined.
+ * Other properties are nullable and will be computed from offsets and margins if they are not set.
+ */
+
+var initialState = {
+  x: 0,
+  y: 0,
+  width: 0,
+  height: 0,
+  padding: {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  }
+};
+export var brushSlice = createSlice({
+  name: 'brush',
+  initialState,
+  reducers: {
+    setBrushSettings(_state, action) {
+      if (action.payload == null) {
+        return initialState;
+      }
+      return action.payload;
+    }
+  }
+});
+export var {
+  setBrushSettings
+} = brushSlice.actions;
+export var brushReducer = brushSlice.reducer;
Index: node_modules/recharts/es6/state/cartesianAxisSlice.js
===================================================================
--- node_modules/recharts/es6/state/cartesianAxisSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/cartesianAxisSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,79 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSlice } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+
+/**
+ * Properties shared in X, Y, and Z axes
+ */
+
+/**
+ * These are the external props, visible for users as they set them using our public API.
+ * There is all sorts of internal computed things based on these, but they will come through selectors.
+ *
+ * Properties shared between X and Y axes
+ */
+
+/**
+ * Z axis is special because it's never displayed. It controls the size of Scatter dots,
+ * but it never displays ticks anywhere.
+ */
+
+var initialState = {
+  xAxis: {},
+  yAxis: {},
+  zAxis: {}
+};
+
+/**
+ * This is the slice where each individual Axis element pushes its own configuration.
+ * Prefer to use this one instead of axisSlice.
+ */
+var cartesianAxisSlice = createSlice({
+  name: 'cartesianAxis',
+  initialState,
+  reducers: {
+    addXAxis(state, action) {
+      state.xAxis[action.payload.id] = castDraft(action.payload);
+    },
+    removeXAxis(state, action) {
+      delete state.xAxis[action.payload.id];
+    },
+    addYAxis(state, action) {
+      state.yAxis[action.payload.id] = castDraft(action.payload);
+    },
+    removeYAxis(state, action) {
+      delete state.yAxis[action.payload.id];
+    },
+    addZAxis(state, action) {
+      state.zAxis[action.payload.id] = castDraft(action.payload);
+    },
+    removeZAxis(state, action) {
+      delete state.zAxis[action.payload.id];
+    },
+    updateYAxisWidth(state, action) {
+      var {
+        id,
+        width
+      } = action.payload;
+      if (state.yAxis[id]) {
+        state.yAxis[id] = _objectSpread(_objectSpread({}, state.yAxis[id]), {}, {
+          width
+        });
+      }
+    }
+  }
+});
+export var {
+  addXAxis,
+  removeXAxis,
+  addYAxis,
+  removeYAxis,
+  addZAxis,
+  removeZAxis,
+  updateYAxisWidth
+} = cartesianAxisSlice.actions;
+export var cartesianAxisReducer = cartesianAxisSlice.reducer;
Index: node_modules/recharts/es6/state/chartDataSlice.js
===================================================================
--- node_modules/recharts/es6/state/chartDataSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/chartDataSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+import { createSlice } from '@reduxjs/toolkit';
+
+/**
+ * This is the data that's coming through main chart `data` prop
+ * Recharts is very flexible in what it accepts so the type is very flexible too.
+ * This will typically be an object, and various components will provide various `dataKey`
+ * that dictates how to pull data from that object.
+ *
+ * TL;DR: before dataKey
+ */
+
+/**
+ * So this is the same unknown type as ChartData but this is after the dataKey has been applied.
+ * We still don't know what the type is - that depends on what exactly it was before the dataKey application,
+ * and the dataKey can return whatever anyway - but let's keep it separate as a form of documentation.
+ *
+ * TL;DR: ChartData after dataKey.
+ */
+
+export var initialChartDataState = {
+  chartData: undefined,
+  computedData: undefined,
+  dataStartIndex: 0,
+  dataEndIndex: 0
+};
+var chartDataSlice = createSlice({
+  name: 'chartData',
+  initialState: initialChartDataState,
+  reducers: {
+    setChartData(state, action) {
+      state.chartData = action.payload;
+      if (action.payload == null) {
+        state.dataStartIndex = 0;
+        state.dataEndIndex = 0;
+        return;
+      }
+      if (action.payload.length > 0 && state.dataEndIndex !== action.payload.length - 1) {
+        state.dataEndIndex = action.payload.length - 1;
+      }
+    },
+    setComputedData(state, action) {
+      state.computedData = action.payload;
+    },
+    setDataStartEndIndexes(state, action) {
+      var {
+        startIndex,
+        endIndex
+      } = action.payload;
+      if (startIndex != null) {
+        state.dataStartIndex = startIndex;
+      }
+      if (endIndex != null) {
+        state.dataEndIndex = endIndex;
+      }
+    }
+  }
+});
+export var {
+  setChartData,
+  setDataStartEndIndexes,
+  setComputedData
+} = chartDataSlice.actions;
+export var chartDataReducer = chartDataSlice.reducer;
Index: node_modules/recharts/es6/state/errorBarSlice.js
===================================================================
--- node_modules/recharts/es6/state/errorBarSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/errorBarSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import { createSlice } from '@reduxjs/toolkit';
+
+/**
+ * ErrorBars have lot more settings but all the others are scoped to the component itself.
+ * Only some of them required to be reported to the global store because XAxis and YAxis need to know
+ * if the error bar is contributing to extending the axis domain.
+ */
+
+var initialState = {};
+var errorBarSlice = createSlice({
+  name: 'errorBars',
+  initialState,
+  reducers: {
+    addErrorBar: (state, action) => {
+      var {
+        itemId,
+        errorBar
+      } = action.payload;
+      if (!state[itemId]) {
+        state[itemId] = [];
+      }
+      state[itemId].push(errorBar);
+    },
+    removeErrorBar: (state, action) => {
+      var {
+        itemId,
+        errorBar
+      } = action.payload;
+      if (state[itemId]) {
+        state[itemId] = state[itemId].filter(e => e.dataKey !== errorBar.dataKey || e.direction !== errorBar.direction);
+      }
+    }
+  }
+});
+export var {
+  addErrorBar,
+  removeErrorBar
+} = errorBarSlice.actions;
+export var errorBarReducer = errorBarSlice.reducer;
Index: node_modules/recharts/es6/state/externalEventsMiddleware.js
===================================================================
--- node_modules/recharts/es6/state/externalEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/externalEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
+import { selectActiveLabel, selectActiveTooltipCoordinate, selectActiveTooltipDataKey, selectActiveTooltipIndex, selectIsTooltipActive } from './selectors/tooltipSelectors';
+export var externalEventAction = createAction('externalEvent');
+export var externalEventsMiddleware = createListenerMiddleware();
+externalEventsMiddleware.startListening({
+  actionCreator: externalEventAction,
+  effect: (action, listenerApi) => {
+    if (action.payload.handler == null) {
+      return;
+    }
+    var state = listenerApi.getState();
+    var nextState = {
+      activeCoordinate: selectActiveTooltipCoordinate(state),
+      activeDataKey: selectActiveTooltipDataKey(state),
+      activeIndex: selectActiveTooltipIndex(state),
+      activeLabel: selectActiveLabel(state),
+      activeTooltipIndex: selectActiveTooltipIndex(state),
+      isTooltipActive: selectIsTooltipActive(state)
+    };
+    action.payload.handler(nextState, action.payload.reactEvent);
+  }
+});
Index: node_modules/recharts/es6/state/graphicalItemsSlice.js
===================================================================
--- node_modules/recharts/es6/state/graphicalItemsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/graphicalItemsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+import { createSlice, current } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+
+/**
+ * Unique ID of the graphical item.
+ * This is used to identify the graphical item in the state and in the React tree.
+ * This is required for every graphical item - it's either provided by the user or generated automatically.
+ */
+
+var initialState = {
+  cartesianItems: [],
+  polarItems: []
+};
+var graphicalItemsSlice = createSlice({
+  name: 'graphicalItems',
+  initialState,
+  reducers: {
+    addCartesianGraphicalItem(state, action) {
+      state.cartesianItems.push(castDraft(action.payload));
+    },
+    replaceCartesianGraphicalItem(state, action) {
+      var {
+        prev,
+        next
+      } = action.payload;
+      var index = current(state).cartesianItems.indexOf(castDraft(prev));
+      if (index > -1) {
+        state.cartesianItems[index] = castDraft(next);
+      }
+    },
+    removeCartesianGraphicalItem(state, action) {
+      var index = current(state).cartesianItems.indexOf(castDraft(action.payload));
+      if (index > -1) {
+        state.cartesianItems.splice(index, 1);
+      }
+    },
+    addPolarGraphicalItem(state, action) {
+      state.polarItems.push(castDraft(action.payload));
+    },
+    removePolarGraphicalItem(state, action) {
+      var index = current(state).polarItems.indexOf(castDraft(action.payload));
+      if (index > -1) {
+        state.polarItems.splice(index, 1);
+      }
+    }
+  }
+});
+export var {
+  addCartesianGraphicalItem,
+  replaceCartesianGraphicalItem,
+  removeCartesianGraphicalItem,
+  addPolarGraphicalItem,
+  removePolarGraphicalItem
+} = graphicalItemsSlice.actions;
+export var graphicalItemsReducer = graphicalItemsSlice.reducer;
Index: node_modules/recharts/es6/state/hooks.js
===================================================================
--- node_modules/recharts/es6/state/hooks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/hooks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';
+import { useContext } from 'react';
+import { RechartsReduxContext } from './RechartsReduxContext';
+var noopDispatch = a => a;
+export var useAppDispatch = () => {
+  var context = useContext(RechartsReduxContext);
+  if (context) {
+    return context.store.dispatch;
+  }
+  return noopDispatch;
+};
+var noop = () => {};
+var addNestedSubNoop = () => noop;
+var refEquality = (a, b) => a === b;
+
+/**
+ * This is a recharts variant of `useSelector` from 'react-redux' package.
+ *
+ * The difference is that react-redux version will throw an Error when used outside of Redux context.
+ *
+ * This, recharts version, will return undefined instead.
+ *
+ * This is because we want to allow using our components outside the Chart wrapper,
+ * and have people provide all props explicitly.
+ *
+ * If however they use the component inside a chart wrapper then those props become optional,
+ * and we read them from Redux state instead.
+ *
+ * @param selector for pulling things out of Redux store; will not be called if the store is not accessible
+ * @return whatever the selector returned; or undefined when outside of Redux store
+ */
+export function useAppSelector(selector) {
+  var context = useContext(RechartsReduxContext);
+  return useSyncExternalStoreWithSelector(context ? context.subscription.addNestedSub : addNestedSubNoop, context ? context.store.getState : noop, context ? context.store.getState : noop, context ? selector : noop, refEquality);
+}
Index: node_modules/recharts/es6/state/keyboardEventsMiddleware.js
===================================================================
--- node_modules/recharts/es6/state/keyboardEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/keyboardEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
+import { setKeyboardInteraction } from './tooltipSlice';
+import { selectTooltipAxisTicks, selectTooltipDisplayedData } from './selectors/tooltipSelectors';
+import { selectCoordinateForDefaultIndex } from './selectors/selectors';
+import { selectChartDirection } from './selectors/axisSelectors';
+import { combineActiveTooltipIndex } from './selectors/combiners/combineActiveTooltipIndex';
+export var keyDownAction = createAction('keyDown');
+export var focusAction = createAction('focus');
+export var keyboardEventsMiddleware = createListenerMiddleware();
+keyboardEventsMiddleware.startListening({
+  actionCreator: keyDownAction,
+  effect: (action, listenerApi) => {
+    var state = listenerApi.getState();
+    var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
+    if (!accessibilityLayerIsActive) {
+      return;
+    }
+    var {
+      keyboardInteraction
+    } = state.tooltip;
+    var key = action.payload;
+    if (key !== 'ArrowRight' && key !== 'ArrowLeft' && key !== 'Enter') {
+      return;
+    }
+
+    // TODO this is lacking index for charts that do not support numeric indexes
+    var currentIndex = Number(combineActiveTooltipIndex(keyboardInteraction, selectTooltipDisplayedData(state)));
+    var tooltipTicks = selectTooltipAxisTicks(state);
+    if (key === 'Enter') {
+      var _coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(keyboardInteraction.index));
+      listenerApi.dispatch(setKeyboardInteraction({
+        active: !keyboardInteraction.active,
+        activeIndex: keyboardInteraction.index,
+        activeDataKey: keyboardInteraction.dataKey,
+        activeCoordinate: _coordinate
+      }));
+      return;
+    }
+    var direction = selectChartDirection(state);
+    var directionMultiplier = direction === 'left-to-right' ? 1 : -1;
+    var movement = key === 'ArrowRight' ? 1 : -1;
+    var nextIndex = currentIndex + movement * directionMultiplier;
+    if (tooltipTicks == null || nextIndex >= tooltipTicks.length || nextIndex < 0) {
+      return;
+    }
+    var coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(nextIndex));
+    listenerApi.dispatch(setKeyboardInteraction({
+      active: true,
+      activeIndex: nextIndex.toString(),
+      activeDataKey: undefined,
+      activeCoordinate: coordinate
+    }));
+  }
+});
+keyboardEventsMiddleware.startListening({
+  actionCreator: focusAction,
+  effect: (_action, listenerApi) => {
+    var state = listenerApi.getState();
+    var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
+    if (!accessibilityLayerIsActive) {
+      return;
+    }
+    var {
+      keyboardInteraction
+    } = state.tooltip;
+    if (keyboardInteraction.active) {
+      return;
+    }
+    if (keyboardInteraction.index == null) {
+      var nextIndex = '0';
+      var coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(nextIndex));
+      listenerApi.dispatch(setKeyboardInteraction({
+        activeDataKey: undefined,
+        active: true,
+        activeIndex: nextIndex,
+        activeCoordinate: coordinate
+      }));
+    }
+  }
+});
Index: node_modules/recharts/es6/state/layoutSlice.js
===================================================================
--- node_modules/recharts/es6/state/layoutSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/layoutSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+import { createSlice } from '@reduxjs/toolkit';
+var initialState = {
+  layoutType: 'horizontal',
+  width: 0,
+  height: 0,
+  margin: {
+    top: 5,
+    right: 5,
+    bottom: 5,
+    left: 5
+  },
+  scale: 1
+};
+var chartLayoutSlice = createSlice({
+  name: 'chartLayout',
+  initialState,
+  reducers: {
+    setLayout(state, action) {
+      state.layoutType = action.payload;
+    },
+    setChartSize(state, action) {
+      state.width = action.payload.width;
+      state.height = action.payload.height;
+    },
+    setMargin(state, action) {
+      state.margin.top = action.payload.top;
+      state.margin.right = action.payload.right;
+      state.margin.bottom = action.payload.bottom;
+      state.margin.left = action.payload.left;
+    },
+    setScale(state, action) {
+      state.scale = action.payload;
+    }
+  }
+});
+export var {
+  setMargin,
+  setLayout,
+  setChartSize,
+  setScale
+} = chartLayoutSlice.actions;
+export var chartLayoutReducer = chartLayoutSlice.reducer;
Index: node_modules/recharts/es6/state/legendSlice.js
===================================================================
--- node_modules/recharts/es6/state/legendSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/legendSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+import { createSlice, current } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+
+/**
+ * The properties inside this state update independently of each other and quite often.
+ * When selecting, never select the whole state because you are going to get
+ * unnecessary re-renders. Select only the properties you need.
+ *
+ * This is why this state type is not exported - don't use it directly.
+ */
+
+var initialState = {
+  settings: {
+    layout: 'horizontal',
+    align: 'center',
+    verticalAlign: 'middle',
+    itemSorter: 'value'
+  },
+  size: {
+    width: 0,
+    height: 0
+  },
+  payload: []
+};
+var legendSlice = createSlice({
+  name: 'legend',
+  initialState,
+  reducers: {
+    setLegendSize(state, action) {
+      state.size.width = action.payload.width;
+      state.size.height = action.payload.height;
+    },
+    setLegendSettings(state, action) {
+      state.settings.align = action.payload.align;
+      state.settings.layout = action.payload.layout;
+      state.settings.verticalAlign = action.payload.verticalAlign;
+      state.settings.itemSorter = action.payload.itemSorter;
+    },
+    addLegendPayload(state, action) {
+      state.payload.push(castDraft(action.payload));
+    },
+    removeLegendPayload(state, action) {
+      var index = current(state).payload.indexOf(castDraft(action.payload));
+      if (index > -1) {
+        state.payload.splice(index, 1);
+      }
+    }
+  }
+});
+export var {
+  setLegendSize,
+  setLegendSettings,
+  addLegendPayload,
+  removeLegendPayload
+} = legendSlice.actions;
+export var legendReducer = legendSlice.reducer;
Index: node_modules/recharts/es6/state/mouseEventsMiddleware.js
===================================================================
--- node_modules/recharts/es6/state/mouseEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/mouseEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
+import { mouseLeaveChart, setMouseClickAxisIndex, setMouseOverAxisIndex } from './tooltipSlice';
+import { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';
+import { selectTooltipEventType } from './selectors/selectTooltipEventType';
+import { getChartPointer } from '../util/getChartPointer';
+export var mouseClickAction = createAction('mouseClick');
+export var mouseClickMiddleware = createListenerMiddleware();
+
+// TODO: there's a bug here when you click the chart the activeIndex resets to zero
+mouseClickMiddleware.startListening({
+  actionCreator: mouseClickAction,
+  effect: (action, listenerApi) => {
+    var mousePointer = action.payload;
+    var activeProps = selectActivePropsFromChartPointer(listenerApi.getState(), getChartPointer(mousePointer));
+    if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {
+      listenerApi.dispatch(setMouseClickAxisIndex({
+        activeIndex: activeProps.activeIndex,
+        activeDataKey: undefined,
+        activeCoordinate: activeProps.activeCoordinate
+      }));
+    }
+  }
+});
+export var mouseMoveAction = createAction('mouseMove');
+export var mouseMoveMiddleware = createListenerMiddleware();
+mouseMoveMiddleware.startListening({
+  actionCreator: mouseMoveAction,
+  effect: (action, listenerApi) => {
+    var mousePointer = action.payload;
+    var state = listenerApi.getState();
+    var tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);
+    var activeProps = selectActivePropsFromChartPointer(state, getChartPointer(mousePointer));
+
+    // this functionality only applies to charts that have axes
+    if (tooltipEventType === 'axis') {
+      if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {
+        listenerApi.dispatch(setMouseOverAxisIndex({
+          activeIndex: activeProps.activeIndex,
+          activeDataKey: undefined,
+          activeCoordinate: activeProps.activeCoordinate
+        }));
+      } else {
+        // this is needed to clear tooltip state when the mouse moves out of the inRange (svg - offset) function, but not yet out of the svg
+        listenerApi.dispatch(mouseLeaveChart());
+      }
+    }
+  }
+});
Index: node_modules/recharts/es6/state/optionsSlice.js
===================================================================
--- node_modules/recharts/es6/state/optionsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/optionsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+import { createSlice } from '@reduxjs/toolkit';
+import { isNan } from '../util/DataUtils';
+
+/**
+ * These chart options are decided internally, by Recharts,
+ * and will not change during the lifetime of the chart.
+ *
+ * Changing these options can be done by swapping the root element
+ * which will make a brand-new Redux store.
+ *
+ * If you want to store options that can be changed by the user,
+ * use UpdatableChartOptions in rootPropsSlice.ts.
+ */
+
+export function arrayTooltipSearcher(data, strIndex) {
+  if (!strIndex) return undefined;
+  var numIndex = Number.parseInt(strIndex, 10);
+  if (isNan(numIndex)) {
+    return undefined;
+  }
+  return data === null || data === void 0 ? void 0 : data[numIndex];
+}
+var initialState = {
+  chartName: '',
+  tooltipPayloadSearcher: undefined,
+  eventEmitter: undefined,
+  defaultTooltipEventType: 'axis'
+};
+var optionsSlice = createSlice({
+  name: 'options',
+  initialState,
+  reducers: {
+    createEventEmitter: state => {
+      if (state.eventEmitter == null) {
+        state.eventEmitter = Symbol('rechartsEventEmitter');
+      }
+    }
+  }
+});
+export var optionsReducer = optionsSlice.reducer;
+export var {
+  createEventEmitter
+} = optionsSlice.actions;
Index: node_modules/recharts/es6/state/polarAxisSlice.js
===================================================================
--- node_modules/recharts/es6/state/polarAxisSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/polarAxisSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import { createSlice } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+var initialState = {
+  radiusAxis: {},
+  angleAxis: {}
+};
+var polarAxisSlice = createSlice({
+  name: 'polarAxis',
+  initialState,
+  reducers: {
+    addRadiusAxis(state, action) {
+      state.radiusAxis[action.payload.id] = castDraft(action.payload);
+    },
+    removeRadiusAxis(state, action) {
+      delete state.radiusAxis[action.payload.id];
+    },
+    addAngleAxis(state, action) {
+      state.angleAxis[action.payload.id] = castDraft(action.payload);
+    },
+    removeAngleAxis(state, action) {
+      delete state.angleAxis[action.payload.id];
+    }
+  }
+});
+export var {
+  addRadiusAxis,
+  removeRadiusAxis,
+  addAngleAxis,
+  removeAngleAxis
+} = polarAxisSlice.actions;
+export var polarAxisReducer = polarAxisSlice.reducer;
Index: node_modules/recharts/es6/state/polarOptionsSlice.js
===================================================================
--- node_modules/recharts/es6/state/polarOptionsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/polarOptionsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { createSlice } from '@reduxjs/toolkit';
+var polarOptionsSlice = createSlice({
+  name: 'polarOptions',
+  initialState: null,
+  reducers: {
+    updatePolarOptions: (_state, action) => {
+      return action.payload;
+    }
+  }
+});
+export var {
+  updatePolarOptions
+} = polarOptionsSlice.actions;
+export var polarOptionsReducer = polarOptionsSlice.reducer;
Index: node_modules/recharts/es6/state/reduxDevtoolsJsonStringifyReplacer.js
===================================================================
--- node_modules/recharts/es6/state/reduxDevtoolsJsonStringifyReplacer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/reduxDevtoolsJsonStringifyReplacer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export function reduxDevtoolsJsonStringifyReplacer(_key, value) {
+  if (value instanceof HTMLElement) {
+    return "HTMLElement <".concat(value.tagName, " class=\"").concat(value.className, "\">");
+  }
+  if (value === window) {
+    return 'global.window';
+  }
+  return value;
+}
Index: node_modules/recharts/es6/state/referenceElementsSlice.js
===================================================================
--- node_modules/recharts/es6/state/referenceElementsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/referenceElementsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+import { createSlice, current } from '@reduxjs/toolkit';
+var initialState = {
+  dots: [],
+  areas: [],
+  lines: []
+};
+export var referenceElementsSlice = createSlice({
+  name: 'referenceElements',
+  initialState,
+  reducers: {
+    addDot: (state, action) => {
+      state.dots.push(action.payload);
+    },
+    removeDot: (state, action) => {
+      var index = current(state).dots.findIndex(dot => dot === action.payload);
+      if (index !== -1) {
+        state.dots.splice(index, 1);
+      }
+    },
+    addArea: (state, action) => {
+      state.areas.push(action.payload);
+    },
+    removeArea: (state, action) => {
+      var index = current(state).areas.findIndex(area => area === action.payload);
+      if (index !== -1) {
+        state.areas.splice(index, 1);
+      }
+    },
+    addLine: (state, action) => {
+      state.lines.push(action.payload);
+    },
+    removeLine: (state, action) => {
+      var index = current(state).lines.findIndex(line => line === action.payload);
+      if (index !== -1) {
+        state.lines.splice(index, 1);
+      }
+    }
+  }
+});
+export var {
+  addDot,
+  removeDot,
+  addArea,
+  removeArea,
+  addLine,
+  removeLine
+} = referenceElementsSlice.actions;
+export var referenceElementsReducer = referenceElementsSlice.reducer;
Index: node_modules/recharts/es6/state/rootPropsSlice.js
===================================================================
--- node_modules/recharts/es6/state/rootPropsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/rootPropsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { createSlice } from '@reduxjs/toolkit';
+
+/**
+ * These are chart options that users can choose - which means they can also
+ * choose to change them which should trigger a re-render.
+ */
+
+export var initialState = {
+  accessibilityLayer: true,
+  barCategoryGap: '10%',
+  barGap: 4,
+  barSize: undefined,
+  className: undefined,
+  maxBarSize: undefined,
+  stackOffset: 'none',
+  syncId: undefined,
+  syncMethod: 'index'
+};
+var rootPropsSlice = createSlice({
+  name: 'rootProps',
+  initialState,
+  reducers: {
+    updateOptions: (state, action) => {
+      var _action$payload$barGa;
+      state.accessibilityLayer = action.payload.accessibilityLayer;
+      state.barCategoryGap = action.payload.barCategoryGap;
+      state.barGap = (_action$payload$barGa = action.payload.barGap) !== null && _action$payload$barGa !== void 0 ? _action$payload$barGa : initialState.barGap;
+      state.barSize = action.payload.barSize;
+      state.maxBarSize = action.payload.maxBarSize;
+      state.stackOffset = action.payload.stackOffset;
+      state.syncId = action.payload.syncId;
+      state.syncMethod = action.payload.syncMethod;
+      state.className = action.payload.className;
+    }
+  }
+});
+export var rootPropsReducer = rootPropsSlice.reducer;
+export var {
+  updateOptions
+} = rootPropsSlice.actions;
Index: node_modules/recharts/es6/state/selectors/areaSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/areaSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/areaSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,94 @@
+import { createSelector } from 'reselect';
+import { computeArea } from '../../cartesian/Area';
+import { selectAxisWithScale, selectStackGroups, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems } from './axisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';
+import { getBandSizeOfAxis, isCategoricalAxis } from '../../util/ChartUtils';
+import { getStackSeriesIdentifier } from '../../util/stacks/getStackSeriesIdentifier';
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, isPanorama) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, isPanorama) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+var selectBandSize = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {
+  if (isCategoricalAxis(layout, 'xAxis')) {
+    return getBandSizeOfAxis(xAxis, xAxisTicks, false);
+  }
+  return getBandSizeOfAxis(yAxis, yAxisTicks, false);
+});
+var pickAreaId = (_state, _xAxisId, _yAxisId, _isPanorama, id) => id;
+
+/*
+ * There is a race condition problem because we read some data from props and some from the state.
+ * The state is updated through a dispatch and is one render behind,
+ * and so we have this weird one tick render where the displayedData in one selector have the old dataKey
+ * but the new dataKey in another selector.
+ *
+ * A proper fix is to either move everything into the state, or read the dataKey always from props
+ * - but this is a smaller change.
+ */
+var selectSynchronisedAreaSettings = createSelector([selectUnfilteredCartesianItems, pickAreaId], (graphicalItems, id) => graphicalItems.filter(item => item.type === 'area').find(item => item.id === id));
+export var selectGraphicalItemStackedData = (state, xAxisId, yAxisId, isPanorama, id) => {
+  var _stackGroups$stackId;
+  var areaSettings = selectSynchronisedAreaSettings(state, xAxisId, yAxisId, isPanorama, id);
+  if (areaSettings == null) {
+    return undefined;
+  }
+  var layout = selectChartLayout(state);
+  var isXAxisCategorical = isCategoricalAxis(layout, 'xAxis');
+  var stackGroups;
+  if (isXAxisCategorical) {
+    stackGroups = selectStackGroups(state, 'yAxis', yAxisId, isPanorama);
+  } else {
+    stackGroups = selectStackGroups(state, 'xAxis', xAxisId, isPanorama);
+  }
+  if (stackGroups == null) {
+    return undefined;
+  }
+  var {
+    stackId
+  } = areaSettings;
+  var stackSeriesIdentifier = getStackSeriesIdentifier(areaSettings);
+  if (stackId == null || stackSeriesIdentifier == null) {
+    return undefined;
+  }
+  var groups = (_stackGroups$stackId = stackGroups[stackId]) === null || _stackGroups$stackId === void 0 ? void 0 : _stackGroups$stackId.stackedData;
+  return groups === null || groups === void 0 ? void 0 : groups.find(v => v.key === stackSeriesIdentifier);
+};
+export var selectArea = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectGraphicalItemStackedData, selectChartDataWithIndexesIfNotInPanorama, selectBandSize, selectSynchronisedAreaSettings], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks, stackedData, _ref, bandSize, areaSettings) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (areaSettings == null || layout !== 'horizontal' && layout !== 'vertical' || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || xAxisTicks.length === 0 || yAxisTicks.length === 0 || bandSize == null) {
+    return undefined;
+  }
+  var {
+    data
+  } = areaSettings;
+  var displayedData;
+  if (data && data.length > 0) {
+    displayedData = data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+
+  // Where is this supposed to come from? No charts have that as a prop.
+  var chartBaseValue = undefined;
+  return computeArea({
+    layout,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    dataStartIndex,
+    areaSettings,
+    stackedData,
+    displayedData,
+    chartBaseValue,
+    bandSize
+  });
+});
Index: node_modules/recharts/es6/state/selectors/axisSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/axisSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/axisSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1196 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import range from 'es-toolkit/compat/range';
+import * as d3Scales from 'victory-vendor/d3-scale';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { checkDomainOfScale, getDomainOfStackGroups, getStackedData, getValueByDataKey, isCategoricalAxis } from '../../util/ChartUtils';
+import { selectChartDataWithIndexes, selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';
+import { isWellFormedNumberDomain, numericalDomainSpecifiedWithoutRequiringData, parseNumericalUserDomain } from '../../util/isDomainSpecifiedByUser';
+import { getPercentValue, hasDuplicate, isNan, isNumber, isNumOrStr, mathSign, upperFirst } from '../../util/DataUtils';
+import { isWellBehavedNumber } from '../../util/isWellBehavedNumber';
+import { getNiceTickValues, getTickValuesFixedDomain } from '../../util/scale';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+import { selectAllXAxes, selectAllYAxes } from './selectAllAxes';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectBrushDimensions, selectBrushSettings } from './brushSelectors';
+import { selectBarCategoryGap, selectChartName, selectStackOffsetType } from './rootPropsSelectors';
+import { selectAngleAxis, selectAngleAxisRange, selectRadiusAxis, selectRadiusAxisRange } from './polarAxisSelectors';
+import { pickAxisType } from './pickAxisType';
+import { pickAxisId } from './pickAxisId';
+import { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';
+import { DEFAULT_Y_AXIS_WIDTH } from '../../util/Constants';
+import { getStackSeriesIdentifier } from '../../util/stacks/getStackSeriesIdentifier';
+import { selectTooltipAxis } from './selectTooltipAxis';
+import { combineDisplayedStackedData } from './combiners/combineDisplayedStackedData';
+import { isStacked } from '../types/StackedGraphicalItem';
+var defaultNumericDomain = [0, 'auto'];
+
+/**
+ * angle, radius, X, Y, and Z axes all have domain and range and scale and associated settings
+ */
+
+/**
+ * X and Y axes have ticks. Z axis is never displayed and so it lacks ticks
+ * and tick settings.
+ */
+
+/**
+ * If an axis is not explicitly defined as an element,
+ * we still need to render something in the chart and we need
+ * some object to hold the domain and default settings.
+ */
+export var implicitXAxis = {
+  allowDataOverflow: false,
+  allowDecimals: true,
+  allowDuplicatedCategory: true,
+  angle: 0,
+  dataKey: undefined,
+  domain: undefined,
+  height: 30,
+  hide: true,
+  id: 0,
+  includeHidden: false,
+  interval: 'preserveEnd',
+  minTickGap: 5,
+  mirror: false,
+  name: undefined,
+  orientation: 'bottom',
+  padding: {
+    left: 0,
+    right: 0
+  },
+  reversed: false,
+  scale: 'auto',
+  tick: true,
+  tickCount: 5,
+  tickFormatter: undefined,
+  ticks: undefined,
+  type: 'category',
+  unit: undefined
+};
+export var selectXAxisSettings = (state, axisId) => {
+  var axis = state.cartesianAxis.xAxis[axisId];
+  if (axis == null) {
+    return implicitXAxis;
+  }
+  return axis;
+};
+
+/**
+ * If an axis is not explicitly defined as an element,
+ * we still need to render something in the chart and we need
+ * some object to hold the domain and default settings.
+ */
+export var implicitYAxis = {
+  allowDataOverflow: false,
+  allowDecimals: true,
+  allowDuplicatedCategory: true,
+  angle: 0,
+  dataKey: undefined,
+  domain: defaultNumericDomain,
+  hide: true,
+  id: 0,
+  includeHidden: false,
+  interval: 'preserveEnd',
+  minTickGap: 5,
+  mirror: false,
+  name: undefined,
+  orientation: 'left',
+  padding: {
+    top: 0,
+    bottom: 0
+  },
+  reversed: false,
+  scale: 'auto',
+  tick: true,
+  tickCount: 5,
+  tickFormatter: undefined,
+  ticks: undefined,
+  type: 'number',
+  unit: undefined,
+  width: DEFAULT_Y_AXIS_WIDTH
+};
+export var selectYAxisSettings = (state, axisId) => {
+  var axis = state.cartesianAxis.yAxis[axisId];
+  if (axis == null) {
+    return implicitYAxis;
+  }
+  return axis;
+};
+export var implicitZAxis = {
+  domain: [0, 'auto'],
+  includeHidden: false,
+  reversed: false,
+  allowDataOverflow: false,
+  allowDuplicatedCategory: false,
+  dataKey: undefined,
+  id: 0,
+  name: '',
+  range: [64, 64],
+  scale: 'auto',
+  type: 'number',
+  unit: ''
+};
+export var selectZAxisSettings = (state, axisId) => {
+  var axis = state.cartesianAxis.zAxis[axisId];
+  if (axis == null) {
+    return implicitZAxis;
+  }
+  return axis;
+};
+export var selectBaseAxis = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSettings(state, axisId);
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSettings(state, axisId);
+      }
+    case 'zAxis':
+      {
+        return selectZAxisSettings(state, axisId);
+      }
+    case 'angleAxis':
+      {
+        return selectAngleAxis(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return selectRadiusAxis(state, axisId);
+      }
+    default:
+      throw new Error("Unexpected axis type: ".concat(axisType));
+  }
+};
+var selectCartesianAxisSettings = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSettings(state, axisId);
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSettings(state, axisId);
+      }
+    default:
+      throw new Error("Unexpected axis type: ".concat(axisType));
+  }
+};
+
+/**
+ * Selects either an X or Y axis. Doesn't work with Z axis - for that, instead use selectBaseAxis.
+ * @param state Root state
+ * @param axisType xAxis | yAxis
+ * @param axisId xAxisId | yAxisId
+ * @returns axis settings object
+ */
+export var selectAxisSettings = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSettings(state, axisId);
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSettings(state, axisId);
+      }
+    case 'angleAxis':
+      {
+        return selectAngleAxis(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return selectRadiusAxis(state, axisId);
+      }
+    default:
+      throw new Error("Unexpected axis type: ".concat(axisType));
+  }
+};
+
+/**
+ * @param state RechartsRootState
+ * @return boolean true if there is at least one Bar or RadialBar
+ */
+export var selectHasBar = state => state.graphicalItems.cartesianItems.some(item => item.type === 'bar') || state.graphicalItems.polarItems.some(item => item.type === 'radialBar');
+
+/**
+ * Filters CartesianGraphicalItemSettings by the relevant axis ID
+ * @param axisType 'xAxis' | 'yAxis' | 'zAxis' | 'radiusAxis' | 'angleAxis'
+ * @param axisId from props, defaults to 0
+ *
+ * @returns Predicate function that return true for CartesianGraphicalItemSettings that are relevant to the specified axis
+ */
+export function itemAxisPredicate(axisType, axisId) {
+  return item => {
+    switch (axisType) {
+      case 'xAxis':
+        // This is sensitive to the data type, as 0 !== '0'. I wonder if we should be more flexible. How does 2.x branch behave? TODO write test for that
+        return 'xAxisId' in item && item.xAxisId === axisId;
+      case 'yAxis':
+        return 'yAxisId' in item && item.yAxisId === axisId;
+      case 'zAxis':
+        return 'zAxisId' in item && item.zAxisId === axisId;
+      case 'angleAxis':
+        return 'angleAxisId' in item && item.angleAxisId === axisId;
+      case 'radiusAxis':
+        return 'radiusAxisId' in item && item.radiusAxisId === axisId;
+      default:
+        return false;
+    }
+  };
+}
+export var selectUnfilteredCartesianItems = state => state.graphicalItems.cartesianItems;
+var selectAxisPredicate = createSelector([pickAxisType, pickAxisId], itemAxisPredicate);
+export var combineGraphicalItemsSettings = (graphicalItems, axisSettings, axisPredicate) => graphicalItems.filter(axisPredicate).filter(item => {
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.includeHidden) === true) {
+    return true;
+  }
+  return !item.hide;
+});
+export var selectCartesianItemsSettings = createSelector([selectUnfilteredCartesianItems, selectBaseAxis, selectAxisPredicate], combineGraphicalItemsSettings);
+export var selectStackedCartesianItemsSettings = createSelector([selectCartesianItemsSettings], cartesianItems => {
+  return cartesianItems.filter(item => item.type === 'area' || item.type === 'bar').filter(isStacked);
+});
+export var filterGraphicalNotStackedItems = cartesianItems => cartesianItems.filter(item => !('stackId' in item) || item.stackId === undefined);
+var selectCartesianItemsSettingsExceptStacked = createSelector([selectCartesianItemsSettings], filterGraphicalNotStackedItems);
+export var combineGraphicalItemsData = cartesianItems => cartesianItems.map(item => item.data).filter(Boolean).flat(1);
+
+/**
+ * This is a "cheap" selector - it returns the data but doesn't iterate them, so it is not sensitive on the array length.
+ * Also does not apply dataKey yet.
+ * @param state RechartsRootState
+ * @returns data defined on the chart graphical items, such as Line or Scatter or Pie, and filtered with appropriate dataKey
+ */
+export var selectCartesianGraphicalItemsData = createSelector([selectCartesianItemsSettings], combineGraphicalItemsData);
+export var combineDisplayedData = (graphicalItemsData, _ref) => {
+  var {
+    chartData = [],
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (graphicalItemsData.length > 0) {
+    /*
+     * There is no slicing when data is defined on graphical items. Why?
+     * Because Brush ignores data defined on graphical items,
+     * and does not render.
+     * So Brush will never show up in a Scatter chart for example.
+     * This is something we will need to fix.
+     *
+     * Now, when the root chart data is not defined, the dataEndIndex is 0,
+     * which means the itemsData will be sliced to an empty array anyway.
+     * But that's an implementation detail, and we can fix that too.
+     *
+     * Also, in absence of Axis dataKey, we use the dataKey from each item, respectively.
+     * This is the usual pattern for numerical axis, that is the one where bars go up:
+     * users don't specify any dataKey by default and expect the axis to "just match the data".
+     */
+    return graphicalItemsData;
+  }
+  return chartData.slice(dataStartIndex, dataEndIndex + 1);
+};
+
+/**
+ * This selector will return all data there is in the chart: graphical items, chart root, all together.
+ * Useful for figuring out an axis domain (because that needs to know of everything),
+ * not useful for rendering individual graphical elements (because they need to know which data is theirs and which is not).
+ *
+ * This function will discard the original indexes, so it is also not useful for anything that depends on ordering.
+ */
+export var selectDisplayedData = createSelector([selectCartesianGraphicalItemsData, selectChartDataWithIndexesIfNotInPanorama], combineDisplayedData);
+export var combineAppliedValues = (data, axisSettings, items) => {
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {
+    return data.map(item => ({
+      value: getValueByDataKey(item, axisSettings.dataKey)
+    }));
+  }
+  if (items.length > 0) {
+    return items.map(item => item.dataKey).flatMap(dataKey => data.map(entry => ({
+      value: getValueByDataKey(entry, dataKey)
+    })));
+  }
+  return data.map(entry => ({
+    value: entry
+  }));
+};
+
+/**
+ * This selector will return all values with the appropriate dataKey applied on them.
+ * Which dataKey is appropriate depends on where it is defined.
+ *
+ * This is an expensive selector - it will iterate all data and compute their value using the provided dataKey.
+ */
+export var selectAllAppliedValues = createSelector([selectDisplayedData, selectBaseAxis, selectCartesianItemsSettings], combineAppliedValues);
+export function isErrorBarRelevantForAxisType(axisType, errorBar) {
+  switch (axisType) {
+    case 'xAxis':
+      return errorBar.direction === 'x';
+    case 'yAxis':
+      return errorBar.direction === 'y';
+    default:
+      return false;
+  }
+}
+
+/**
+ * This is type of "error" in chart. It is set by using ErrorBar, and it can represent confidence interval,
+ * or gap in the data, or standard deviation, or quartiles in boxplot, or whiskers or whatever.
+ *
+ * We will internally represent it as a tuple of two numbers, where the first number is the lower bound and the second number is the upper bound.
+ *
+ * It is also true that the first number should be lower than or equal to the associated "main value",
+ * and the second number should be higher than or equal to the associated "main value".
+ */
+
+export function fromMainValueToError(value) {
+  if (isNumber(value) && Number.isFinite(value)) {
+    return [value, value];
+  }
+  if (Array.isArray(value)) {
+    var minError = Math.min(...value);
+    var maxError = Math.max(...value);
+    if (!isNan(minError) && !isNan(maxError) && Number.isFinite(minError) && Number.isFinite(maxError)) {
+      return [minError, maxError];
+    }
+  }
+  return undefined;
+}
+function onlyAllowNumbers(data) {
+  return data.filter(v => isNumOrStr(v) || v instanceof Date).map(Number).filter(n => isNan(n) === false);
+}
+
+/**
+ * @param entry One item in the 'data' array. Could be anything really - this is defined externally. This is the raw, before dataKey application
+ * @param appliedValue This is the result of applying the 'main' dataKey on the `entry`.
+ * @param relevantErrorBars Error bars that are relevant for the current axis and layout and all that.
+ * @return either undefined or an array of ErrorValue
+ */
+export function getErrorDomainByDataKey(entry, appliedValue, relevantErrorBars) {
+  if (!relevantErrorBars || typeof appliedValue !== 'number' || isNan(appliedValue)) {
+    return [];
+  }
+  if (!relevantErrorBars.length) {
+    return [];
+  }
+  return onlyAllowNumbers(relevantErrorBars.flatMap(eb => {
+    var errorValue = getValueByDataKey(entry, eb.dataKey);
+    var lowBound, highBound;
+    if (Array.isArray(errorValue)) {
+      [lowBound, highBound] = errorValue;
+    } else {
+      lowBound = highBound = errorValue;
+    }
+    if (!isWellBehavedNumber(lowBound) || !isWellBehavedNumber(highBound)) {
+      return undefined;
+    }
+    return [appliedValue - lowBound, appliedValue + highBound];
+  }));
+}
+export var selectDisplayedStackedData = createSelector([selectStackedCartesianItemsSettings, selectChartDataWithIndexesIfNotInPanorama, selectTooltipAxis], combineDisplayedStackedData);
+export var combineStackGroups = (displayedData, items, stackOffsetType) => {
+  var initialItemsGroups = {};
+  var itemsGroup = items.reduce((acc, item) => {
+    if (item.stackId == null) {
+      return acc;
+    }
+    if (acc[item.stackId] == null) {
+      acc[item.stackId] = [];
+    }
+    acc[item.stackId].push(item);
+    return acc;
+  }, initialItemsGroups);
+  return Object.fromEntries(Object.entries(itemsGroup).map(_ref2 => {
+    var [stackId, graphicalItems] = _ref2;
+    var dataKeys = graphicalItems.map(getStackSeriesIdentifier);
+    return [stackId, {
+      // @ts-expect-error getStackedData requires that the input is array of objects, Recharts does not test for that
+      stackedData: getStackedData(displayedData, dataKeys, stackOffsetType),
+      graphicalItems
+    }];
+  }));
+};
+
+/**
+ * Stack groups are groups of graphical items that stack on each other.
+ * Stack is a function of axis type (X, Y), axis ID, and stack ID.
+ * Graphical items that do not have a stack ID are not going to be present in stack groups.
+ */
+export var selectStackGroups = createSelector([selectDisplayedStackedData, selectStackedCartesianItemsSettings, selectStackOffsetType], combineStackGroups);
+export var combineDomainOfStackGroups = (stackGroups, _ref3, axisType) => {
+  var {
+    dataStartIndex,
+    dataEndIndex
+  } = _ref3;
+  if (axisType === 'zAxis') {
+    // ZAxis ignores stacks
+    return undefined;
+  }
+  var domainOfStackGroups = getDomainOfStackGroups(stackGroups, dataStartIndex, dataEndIndex);
+  if (domainOfStackGroups != null && domainOfStackGroups[0] === 0 && domainOfStackGroups[1] === 0) {
+    return undefined;
+  }
+  return domainOfStackGroups;
+};
+export var selectDomainOfStackGroups = createSelector([selectStackGroups, selectChartDataWithIndexes, pickAxisType], combineDomainOfStackGroups);
+export var combineAppliedNumericalValuesIncludingErrorValues = (data, axisSettings, items, errorBars, axisType) => {
+  if (items.length > 0) {
+    return data.flatMap(entry => {
+      return items.flatMap(item => {
+        var _errorBars$item$id, _axisSettings$dataKey;
+        var relevantErrorBars = (_errorBars$item$id = errorBars[item.id]) === null || _errorBars$item$id === void 0 ? void 0 : _errorBars$item$id.filter(errorBar => isErrorBarRelevantForAxisType(axisType, errorBar));
+        var valueByDataKey = getValueByDataKey(entry, (_axisSettings$dataKey = axisSettings.dataKey) !== null && _axisSettings$dataKey !== void 0 ? _axisSettings$dataKey : item.dataKey);
+        return {
+          value: valueByDataKey,
+          errorDomain: getErrorDomainByDataKey(entry, valueByDataKey, relevantErrorBars)
+        };
+      });
+    }).filter(Boolean);
+  }
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {
+    return data.map(item => ({
+      value: getValueByDataKey(item, axisSettings.dataKey),
+      errorDomain: []
+    }));
+  }
+  return data.map(entry => ({
+    value: entry,
+    errorDomain: []
+  }));
+};
+export var selectAllErrorBarSettings = state => state.errorBars;
+var combineRelevantErrorBarSettings = (cartesianItemsSettings, allErrorBarSettings, axisType) => {
+  return cartesianItemsSettings.flatMap(item => {
+    return allErrorBarSettings[item.id];
+  }).filter(Boolean).filter(e => {
+    return isErrorBarRelevantForAxisType(axisType, e);
+  });
+};
+export var selectErrorBarsSettingsExceptStacked = createSelector([selectCartesianItemsSettingsExceptStacked, selectAllErrorBarSettings, pickAxisType], combineRelevantErrorBarSettings);
+export var selectAllAppliedNumericalValuesIncludingErrorValues = createSelector([selectDisplayedData, selectBaseAxis, selectCartesianItemsSettingsExceptStacked, selectAllErrorBarSettings, pickAxisType], combineAppliedNumericalValuesIncludingErrorValues);
+function onlyAllowNumbersAndStringsAndDates(item) {
+  var {
+    value
+  } = item;
+  if (isNumOrStr(value) || value instanceof Date) {
+    return value;
+  }
+  return undefined;
+}
+var computeNumericalDomain = dataWithErrorDomains => {
+  var allDataSquished = dataWithErrorDomains
+  // This flatMap has to be flat because we're creating a new array in the return value
+  .flatMap(d => [d.value, d.errorDomain])
+  // This flat is needed because a) errorDomain is an array, and b) value may be a number, or it may be a range (for Area, for example)
+  .flat(1);
+  var onlyNumbers = onlyAllowNumbers(allDataSquished);
+  if (onlyNumbers.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...onlyNumbers), Math.max(...onlyNumbers)];
+};
+var computeDomainOfTypeCategory = (allDataSquished, axisSettings, isCategorical) => {
+  var categoricalDomain = allDataSquished.map(onlyAllowNumbersAndStringsAndDates).filter(v => v != null);
+  if (isCategorical && (axisSettings.dataKey == null || axisSettings.allowDuplicatedCategory && hasDuplicate(categoricalDomain))) {
+    /*
+     * 1. In an absence of dataKey, Recharts will use array indexes as its categorical domain
+     * 2. When category axis has duplicated text, serial numbers are used to generate scale
+     */
+    return range(0, allDataSquished.length);
+  }
+  if (axisSettings.allowDuplicatedCategory) {
+    return categoricalDomain;
+  }
+  return Array.from(new Set(categoricalDomain));
+};
+export var getDomainDefinition = axisSettings => {
+  var _axisSettings$domain;
+  if (axisSettings == null || !('domain' in axisSettings)) {
+    return defaultNumericDomain;
+  }
+  if (axisSettings.domain != null) {
+    return axisSettings.domain;
+  }
+  if (axisSettings.ticks != null) {
+    if (axisSettings.type === 'number') {
+      var allValues = onlyAllowNumbers(axisSettings.ticks);
+      return [Math.min(...allValues), Math.max(...allValues)];
+    }
+    if (axisSettings.type === 'category') {
+      return axisSettings.ticks.map(String);
+    }
+  }
+  return (_axisSettings$domain = axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.domain) !== null && _axisSettings$domain !== void 0 ? _axisSettings$domain : defaultNumericDomain;
+};
+export var mergeDomains = function mergeDomains() {
+  for (var _len = arguments.length, domains = new Array(_len), _key = 0; _key < _len; _key++) {
+    domains[_key] = arguments[_key];
+  }
+  var allDomains = domains.filter(Boolean);
+  if (allDomains.length === 0) {
+    return undefined;
+  }
+  var allValues = allDomains.flat();
+  var min = Math.min(...allValues);
+  var max = Math.max(...allValues);
+  return [min, max];
+};
+export var selectReferenceDots = state => state.referenceElements.dots;
+export var filterReferenceElements = (elements, axisType, axisId) => {
+  return elements.filter(el => el.ifOverflow === 'extendDomain').filter(el => {
+    if (axisType === 'xAxis') {
+      return el.xAxisId === axisId;
+    }
+    return el.yAxisId === axisId;
+  });
+};
+export var selectReferenceDotsByAxis = createSelector([selectReferenceDots, pickAxisType, pickAxisId], filterReferenceElements);
+export var selectReferenceAreas = state => state.referenceElements.areas;
+export var selectReferenceAreasByAxis = createSelector([selectReferenceAreas, pickAxisType, pickAxisId], filterReferenceElements);
+export var selectReferenceLines = state => state.referenceElements.lines;
+export var selectReferenceLinesByAxis = createSelector([selectReferenceLines, pickAxisType, pickAxisId], filterReferenceElements);
+export var combineDotsDomain = (dots, axisType) => {
+  var allCoords = onlyAllowNumbers(dots.map(dot => axisType === 'xAxis' ? dot.x : dot.y));
+  if (allCoords.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...allCoords), Math.max(...allCoords)];
+};
+var selectReferenceDotsDomain = createSelector(selectReferenceDotsByAxis, pickAxisType, combineDotsDomain);
+export var combineAreasDomain = (areas, axisType) => {
+  var allCoords = onlyAllowNumbers(areas.flatMap(area => [axisType === 'xAxis' ? area.x1 : area.y1, axisType === 'xAxis' ? area.x2 : area.y2]));
+  if (allCoords.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...allCoords), Math.max(...allCoords)];
+};
+var selectReferenceAreasDomain = createSelector([selectReferenceAreasByAxis, pickAxisType], combineAreasDomain);
+export var combineLinesDomain = (lines, axisType) => {
+  var allCoords = onlyAllowNumbers(lines.map(line => axisType === 'xAxis' ? line.x : line.y));
+  if (allCoords.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...allCoords), Math.max(...allCoords)];
+};
+var selectReferenceLinesDomain = createSelector(selectReferenceLinesByAxis, pickAxisType, combineLinesDomain);
+var selectReferenceElementsDomain = createSelector(selectReferenceDotsDomain, selectReferenceLinesDomain, selectReferenceAreasDomain, (dotsDomain, linesDomain, areasDomain) => {
+  return mergeDomains(dotsDomain, areasDomain, linesDomain);
+});
+export var selectDomainDefinition = createSelector([selectBaseAxis], getDomainDefinition);
+export var combineNumericalDomain = (axisSettings, domainDefinition, domainOfStackGroups, allDataWithErrorDomains, referenceElementsDomain, layout, axisType) => {
+  var domainFromUserPreference = numericalDomainSpecifiedWithoutRequiringData(domainDefinition, axisSettings.allowDataOverflow);
+  if (domainFromUserPreference != null) {
+    // We're done! No need to compute anything else.
+    return domainFromUserPreference;
+  }
+  var shouldIncludeDomainOfStackGroups = layout === 'vertical' && axisType === 'xAxis' || layout === 'horizontal' && axisType === 'yAxis';
+  var mergedDomains = shouldIncludeDomainOfStackGroups ? mergeDomains(domainOfStackGroups, referenceElementsDomain, computeNumericalDomain(allDataWithErrorDomains)) : mergeDomains(referenceElementsDomain, computeNumericalDomain(allDataWithErrorDomains));
+  return parseNumericalUserDomain(domainDefinition, mergedDomains, axisSettings.allowDataOverflow);
+};
+export var selectNumericalDomain = createSelector([selectBaseAxis, selectDomainDefinition, selectDomainOfStackGroups, selectAllAppliedNumericalValuesIncludingErrorValues, selectReferenceElementsDomain, selectChartLayout, pickAxisType], combineNumericalDomain);
+
+/**
+ * Expand by design maps everything between 0 and 1,
+ * there is nothing to compute.
+ * See https://d3js.org/d3-shape/stack#stack-offsets
+ */
+var expandDomain = [0, 1];
+export var combineAxisDomain = (axisSettings, layout, displayedData, allAppliedValues, stackOffsetType, axisType, numericalDomain) => {
+  if ((axisSettings == null || displayedData == null || displayedData.length === 0) && numericalDomain === undefined) {
+    return undefined;
+  }
+  var {
+    dataKey,
+    type
+  } = axisSettings;
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  if (isCategorical && dataKey == null) {
+    return range(0, displayedData.length);
+  }
+  if (type === 'category') {
+    return computeDomainOfTypeCategory(allAppliedValues, axisSettings, isCategorical);
+  }
+  if (stackOffsetType === 'expand') {
+    return expandDomain;
+  }
+  return numericalDomain;
+};
+export var selectAxisDomain = createSelector([selectBaseAxis, selectChartLayout, selectDisplayedData, selectAllAppliedValues, selectStackOffsetType, pickAxisType, selectNumericalDomain], combineAxisDomain);
+export var combineRealScaleType = (axisConfig, layout, hasBar, chartType, axisType) => {
+  if (axisConfig == null) {
+    return undefined;
+  }
+  var {
+    scale,
+    type
+  } = axisConfig;
+  if (scale === 'auto') {
+    if (layout === 'radial' && axisType === 'radiusAxis') {
+      return 'band';
+    }
+    if (layout === 'radial' && axisType === 'angleAxis') {
+      return 'linear';
+    }
+    if (type === 'category' && chartType && (chartType.indexOf('LineChart') >= 0 || chartType.indexOf('AreaChart') >= 0 || chartType.indexOf('ComposedChart') >= 0 && !hasBar)) {
+      return 'point';
+    }
+    if (type === 'category') {
+      return 'band';
+    }
+    return 'linear';
+  }
+  if (typeof scale === 'string') {
+    var name = "scale".concat(upperFirst(scale));
+    return name in d3Scales ? name : 'point';
+  }
+  return undefined;
+};
+export var selectRealScaleType = createSelector([selectBaseAxis, selectChartLayout, selectHasBar, selectChartName, pickAxisType], combineRealScaleType);
+function getD3ScaleFromType(realScaleType) {
+  if (realScaleType == null) {
+    return undefined;
+  }
+  if (realScaleType in d3Scales) {
+    // @ts-expect-error we should do better type verification here
+    return d3Scales[realScaleType]();
+  }
+  var name = "scale".concat(upperFirst(realScaleType));
+  if (name in d3Scales) {
+    // @ts-expect-error we should do better type verification here
+    return d3Scales[name]();
+  }
+  return undefined;
+}
+export function combineScaleFunction(axis, realScaleType, axisDomain, axisRange) {
+  if (axisDomain == null || axisRange == null) {
+    return undefined;
+  }
+  if (typeof axis.scale === 'function') {
+    // @ts-expect-error we're going to assume here that if axis.scale is a function then it is a d3Scale function
+    return axis.scale.copy().domain(axisDomain).range(axisRange);
+  }
+  var d3ScaleFunction = getD3ScaleFromType(realScaleType);
+  if (d3ScaleFunction == null) {
+    return undefined;
+  }
+  var scale = d3ScaleFunction.domain(axisDomain).range(axisRange);
+  // I don't like this function because it mutates the scale. We should come up with a way to compute the domain up front.
+  checkDomainOfScale(scale);
+  return scale;
+}
+export var combineNiceTicks = (axisDomain, axisSettings, realScaleType) => {
+  var domainDefinition = getDomainDefinition(axisSettings);
+  if (realScaleType !== 'auto' && realScaleType !== 'linear') {
+    return undefined;
+  }
+  if (axisSettings != null && axisSettings.tickCount && Array.isArray(domainDefinition) && (domainDefinition[0] === 'auto' || domainDefinition[1] === 'auto') && isWellFormedNumberDomain(axisDomain)) {
+    return getNiceTickValues(axisDomain, axisSettings.tickCount, axisSettings.allowDecimals);
+  }
+  if (axisSettings != null && axisSettings.tickCount && axisSettings.type === 'number' && isWellFormedNumberDomain(axisDomain)) {
+    return getTickValuesFixedDomain(axisDomain, axisSettings.tickCount, axisSettings.allowDecimals);
+  }
+  return undefined;
+};
+export var selectNiceTicks = createSelector([selectAxisDomain, selectAxisSettings, selectRealScaleType], combineNiceTicks);
+export var combineAxisDomainWithNiceTicks = (axisSettings, domain, niceTicks, axisType) => {
+  if (
+  /*
+   * Angle axis for some reason uses nice ticks when rendering axis tick labels,
+   * but doesn't use nice ticks for extending domain like all the other axes do.
+   * Not really sure why? Is there a good reason,
+   * or is it just because someone added support for nice ticks to the other axes and forgot this one?
+   */
+  axisType !== 'angleAxis' && (axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.type) === 'number' && isWellFormedNumberDomain(domain) && Array.isArray(niceTicks) && niceTicks.length > 0) {
+    var minFromDomain = domain[0];
+    var minFromTicks = niceTicks[0];
+    var maxFromDomain = domain[1];
+    var maxFromTicks = niceTicks[niceTicks.length - 1];
+    return [Math.min(minFromDomain, minFromTicks), Math.max(maxFromDomain, maxFromTicks)];
+  }
+  return domain;
+};
+export var selectAxisDomainIncludingNiceTicks = createSelector([selectBaseAxis, selectAxisDomain, selectNiceTicks, pickAxisType], combineAxisDomainWithNiceTicks);
+
+/**
+ * Returns the smallest gap, between two numbers in the data, as a ratio of the whole range (max - min).
+ * Ignores domain provided by user and only considers domain from data.
+ *
+ * The result is a number between 0 and 1.
+ */
+export var selectSmallestDistanceBetweenValues = createSelector(selectAllAppliedValues, selectBaseAxis, (allDataSquished, axisSettings) => {
+  if (!axisSettings || axisSettings.type !== 'number') {
+    return undefined;
+  }
+  var smallestDistanceBetweenValues = Infinity;
+  var sortedValues = Array.from(onlyAllowNumbers(allDataSquished.map(d => d.value))).sort((a, b) => a - b);
+  if (sortedValues.length < 2) {
+    return Infinity;
+  }
+  var diff = sortedValues[sortedValues.length - 1] - sortedValues[0];
+  if (diff === 0) {
+    return Infinity;
+  }
+  // Only do n - 1 distance calculations because there's only n - 1 distances between n values.
+  for (var i = 0; i < sortedValues.length - 1; i++) {
+    var distance = sortedValues[i + 1] - sortedValues[i];
+    smallestDistanceBetweenValues = Math.min(smallestDistanceBetweenValues, distance);
+  }
+  return smallestDistanceBetweenValues / diff;
+});
+var selectCalculatedPadding = createSelector(selectSmallestDistanceBetweenValues, selectChartLayout, selectBarCategoryGap, selectChartOffsetInternal, (_1, _2, _3, padding) => padding, (smallestDistanceInPercent, layout, barCategoryGap, offset, padding) => {
+  if (!isWellBehavedNumber(smallestDistanceInPercent)) {
+    return 0;
+  }
+  var rangeWidth = layout === 'vertical' ? offset.height : offset.width;
+  if (padding === 'gap') {
+    return smallestDistanceInPercent * rangeWidth / 2;
+  }
+  if (padding === 'no-gap') {
+    var gap = getPercentValue(barCategoryGap, smallestDistanceInPercent * rangeWidth);
+    var halfBand = smallestDistanceInPercent * rangeWidth / 2;
+    return halfBand - gap - (halfBand - gap) / rangeWidth * gap;
+  }
+  return 0;
+});
+export var selectCalculatedXAxisPadding = (state, axisId) => {
+  var xAxisSettings = selectXAxisSettings(state, axisId);
+  if (xAxisSettings == null || typeof xAxisSettings.padding !== 'string') {
+    return 0;
+  }
+  return selectCalculatedPadding(state, 'xAxis', axisId, xAxisSettings.padding);
+};
+export var selectCalculatedYAxisPadding = (state, axisId) => {
+  var yAxisSettings = selectYAxisSettings(state, axisId);
+  if (yAxisSettings == null || typeof yAxisSettings.padding !== 'string') {
+    return 0;
+  }
+  return selectCalculatedPadding(state, 'yAxis', axisId, yAxisSettings.padding);
+};
+var selectXAxisPadding = createSelector(selectXAxisSettings, selectCalculatedXAxisPadding, (xAxisSettings, calculated) => {
+  var _padding$left, _padding$right;
+  if (xAxisSettings == null) {
+    return {
+      left: 0,
+      right: 0
+    };
+  }
+  var {
+    padding
+  } = xAxisSettings;
+  if (typeof padding === 'string') {
+    return {
+      left: calculated,
+      right: calculated
+    };
+  }
+  return {
+    left: ((_padding$left = padding.left) !== null && _padding$left !== void 0 ? _padding$left : 0) + calculated,
+    right: ((_padding$right = padding.right) !== null && _padding$right !== void 0 ? _padding$right : 0) + calculated
+  };
+});
+var selectYAxisPadding = createSelector(selectYAxisSettings, selectCalculatedYAxisPadding, (yAxisSettings, calculated) => {
+  var _padding$top, _padding$bottom;
+  if (yAxisSettings == null) {
+    return {
+      top: 0,
+      bottom: 0
+    };
+  }
+  var {
+    padding
+  } = yAxisSettings;
+  if (typeof padding === 'string') {
+    return {
+      top: calculated,
+      bottom: calculated
+    };
+  }
+  return {
+    top: ((_padding$top = padding.top) !== null && _padding$top !== void 0 ? _padding$top : 0) + calculated,
+    bottom: ((_padding$bottom = padding.bottom) !== null && _padding$bottom !== void 0 ? _padding$bottom : 0) + calculated
+  };
+});
+export var combineXAxisRange = createSelector([selectChartOffsetInternal, selectXAxisPadding, selectBrushDimensions, selectBrushSettings, (_state, _axisId, isPanorama) => isPanorama], (offset, padding, brushDimensions, _ref4, isPanorama) => {
+  var {
+    padding: brushPadding
+  } = _ref4;
+  if (isPanorama) {
+    return [brushPadding.left, brushDimensions.width - brushPadding.right];
+  }
+  return [offset.left + padding.left, offset.left + offset.width - padding.right];
+});
+export var combineYAxisRange = createSelector([selectChartOffsetInternal, selectChartLayout, selectYAxisPadding, selectBrushDimensions, selectBrushSettings, (_state, _axisId, isPanorama) => isPanorama], (offset, layout, padding, brushDimensions, _ref5, isPanorama) => {
+  var {
+    padding: brushPadding
+  } = _ref5;
+  if (isPanorama) {
+    return [brushDimensions.height - brushPadding.bottom, brushPadding.top];
+  }
+  if (layout === 'horizontal') {
+    return [offset.top + offset.height - padding.bottom, offset.top + padding.top];
+  }
+  return [offset.top + padding.top, offset.top + offset.height - padding.bottom];
+});
+export var selectAxisRange = (state, axisType, axisId, isPanorama) => {
+  var _selectZAxisSettings;
+  switch (axisType) {
+    case 'xAxis':
+      return combineXAxisRange(state, axisId, isPanorama);
+    case 'yAxis':
+      return combineYAxisRange(state, axisId, isPanorama);
+    case 'zAxis':
+      return (_selectZAxisSettings = selectZAxisSettings(state, axisId)) === null || _selectZAxisSettings === void 0 ? void 0 : _selectZAxisSettings.range;
+    case 'angleAxis':
+      return selectAngleAxisRange(state);
+    case 'radiusAxis':
+      return selectRadiusAxisRange(state, axisId);
+    default:
+      return undefined;
+  }
+};
+export var selectAxisRangeWithReverse = createSelector([selectBaseAxis, selectAxisRange], combineAxisRangeWithReverse);
+export var selectAxisScale = createSelector([selectBaseAxis, selectRealScaleType, selectAxisDomainIncludingNiceTicks, selectAxisRangeWithReverse], combineScaleFunction);
+export var selectErrorBarsSettings = createSelector([selectCartesianItemsSettings, selectAllErrorBarSettings, pickAxisType], combineRelevantErrorBarSettings);
+function compareIds(a, b) {
+  if (a.id < b.id) {
+    return -1;
+  }
+  if (a.id > b.id) {
+    return 1;
+  }
+  return 0;
+}
+var pickAxisOrientation = (_state, orientation) => orientation;
+var pickMirror = (_state, _orientation, mirror) => mirror;
+var selectAllXAxesWithOffsetType = createSelector(selectAllXAxes, pickAxisOrientation, pickMirror, (allAxes, orientation, mirror) => allAxes.filter(axis => axis.orientation === orientation).filter(axis => axis.mirror === mirror).sort(compareIds));
+var selectAllYAxesWithOffsetType = createSelector(selectAllYAxes, pickAxisOrientation, pickMirror, (allAxes, orientation, mirror) => allAxes.filter(axis => axis.orientation === orientation).filter(axis => axis.mirror === mirror).sort(compareIds));
+var getXAxisSize = (offset, axisSettings) => {
+  return {
+    width: offset.width,
+    height: axisSettings.height
+  };
+};
+var getYAxisSize = (offset, axisSettings) => {
+  var width = typeof axisSettings.width === 'number' ? axisSettings.width : DEFAULT_Y_AXIS_WIDTH;
+  return {
+    width,
+    height: offset.height
+  };
+};
+export var selectXAxisSize = createSelector(selectChartOffsetInternal, selectXAxisSettings, getXAxisSize);
+var combineXAxisPositionStartingPoint = (offset, orientation, chartHeight) => {
+  switch (orientation) {
+    case 'top':
+      return offset.top;
+    case 'bottom':
+      return chartHeight - offset.bottom;
+    default:
+      return 0;
+  }
+};
+var combineYAxisPositionStartingPoint = (offset, orientation, chartWidth) => {
+  switch (orientation) {
+    case 'left':
+      return offset.left;
+    case 'right':
+      return chartWidth - offset.right;
+    default:
+      return 0;
+  }
+};
+export var selectAllXAxesOffsetSteps = createSelector(selectChartHeight, selectChartOffsetInternal, selectAllXAxesWithOffsetType, pickAxisOrientation, pickMirror, (chartHeight, offset, allAxesWithSameOffsetType, orientation, mirror) => {
+  var steps = {};
+  var position;
+  allAxesWithSameOffsetType.forEach(axis => {
+    var axisSize = getXAxisSize(offset, axis);
+    if (position == null) {
+      position = combineXAxisPositionStartingPoint(offset, orientation, chartHeight);
+    }
+    var needSpace = orientation === 'top' && !mirror || orientation === 'bottom' && mirror;
+    steps[axis.id] = position - Number(needSpace) * axisSize.height;
+    position += (needSpace ? -1 : 1) * axisSize.height;
+  });
+  return steps;
+});
+export var selectAllYAxesOffsetSteps = createSelector(selectChartWidth, selectChartOffsetInternal, selectAllYAxesWithOffsetType, pickAxisOrientation, pickMirror, (chartWidth, offset, allAxesWithSameOffsetType, orientation, mirror) => {
+  var steps = {};
+  var position;
+  allAxesWithSameOffsetType.forEach(axis => {
+    var axisSize = getYAxisSize(offset, axis);
+    if (position == null) {
+      position = combineYAxisPositionStartingPoint(offset, orientation, chartWidth);
+    }
+    var needSpace = orientation === 'left' && !mirror || orientation === 'right' && mirror;
+    steps[axis.id] = position - Number(needSpace) * axisSize.width;
+    position += (needSpace ? -1 : 1) * axisSize.width;
+  });
+  return steps;
+});
+export var selectXAxisPosition = (state, axisId) => {
+  var offset = selectChartOffsetInternal(state);
+  var axisSettings = selectXAxisSettings(state, axisId);
+  if (axisSettings == null) {
+    return undefined;
+  }
+  var allSteps = selectAllXAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);
+  var stepOfThisAxis = allSteps[axisId];
+  if (stepOfThisAxis == null) {
+    return {
+      x: offset.left,
+      y: 0
+    };
+  }
+  return {
+    x: offset.left,
+    y: stepOfThisAxis
+  };
+};
+export var selectYAxisPosition = (state, axisId) => {
+  var offset = selectChartOffsetInternal(state);
+  var axisSettings = selectYAxisSettings(state, axisId);
+  if (axisSettings == null) {
+    return undefined;
+  }
+  var allSteps = selectAllYAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);
+  var stepOfThisAxis = allSteps[axisId];
+  if (stepOfThisAxis == null) {
+    return {
+      x: 0,
+      y: offset.top
+    };
+  }
+  return {
+    x: stepOfThisAxis,
+    y: offset.top
+  };
+};
+export var selectYAxisSize = createSelector(selectChartOffsetInternal, selectYAxisSettings, (offset, axisSettings) => {
+  var width = typeof axisSettings.width === 'number' ? axisSettings.width : DEFAULT_Y_AXIS_WIDTH;
+  return {
+    width,
+    height: offset.height
+  };
+});
+export var selectCartesianAxisSize = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSize(state, axisId).width;
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSize(state, axisId).height;
+      }
+    default:
+      {
+        return undefined;
+      }
+  }
+};
+export var combineDuplicateDomain = (chartLayout, appliedValues, axis, axisType) => {
+  if (axis == null) {
+    return undefined;
+  }
+  var {
+    allowDuplicatedCategory,
+    type,
+    dataKey
+  } = axis;
+  var isCategorical = isCategoricalAxis(chartLayout, axisType);
+  var allData = appliedValues.map(av => av.value);
+  if (dataKey && isCategorical && type === 'category' && allowDuplicatedCategory && hasDuplicate(allData)) {
+    return allData;
+  }
+  return undefined;
+};
+export var selectDuplicateDomain = createSelector([selectChartLayout, selectAllAppliedValues, selectBaseAxis, pickAxisType], combineDuplicateDomain);
+export var combineCategoricalDomain = (layout, appliedValues, axis, axisType) => {
+  if (axis == null || axis.dataKey == null) {
+    return undefined;
+  }
+  var {
+    type,
+    scale
+  } = axis;
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  if (isCategorical && (type === 'number' || scale !== 'auto')) {
+    return appliedValues.map(d => d.value);
+  }
+  return undefined;
+};
+export var selectCategoricalDomain = createSelector([selectChartLayout, selectAllAppliedValues, selectAxisSettings, pickAxisType], combineCategoricalDomain);
+export var selectAxisPropsNeededForCartesianGridTicksGenerator = createSelector([selectChartLayout, selectCartesianAxisSettings, selectRealScaleType, selectAxisScale, selectDuplicateDomain, selectCategoricalDomain, selectAxisRange, selectNiceTicks, pickAxisType], (layout, axis, realScaleType, scale, duplicateDomain, categoricalDomain, axisRange, niceTicks, axisType) => {
+  if (axis == null) {
+    return null;
+  }
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  return {
+    angle: axis.angle,
+    interval: axis.interval,
+    minTickGap: axis.minTickGap,
+    orientation: axis.orientation,
+    tick: axis.tick,
+    tickCount: axis.tickCount,
+    tickFormatter: axis.tickFormatter,
+    ticks: axis.ticks,
+    type: axis.type,
+    unit: axis.unit,
+    axisType,
+    categoricalDomain,
+    duplicateDomain,
+    isCategorical,
+    niceTicks,
+    range: axisRange,
+    realScaleType,
+    scale
+  };
+});
+export var combineAxisTicks = (layout, axis, realScaleType, scale, niceTicks, axisRange, duplicateDomain, categoricalDomain, axisType) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  var {
+    type,
+    ticks,
+    tickCount
+  } = axis;
+
+  // This is testing for `scaleBand` but for band axis the type is reported as `band` so this looks like a dead code with a workaround elsewhere?
+  var offsetForBand = realScaleType === 'scaleBand' && typeof scale.bandwidth === 'function' ? scale.bandwidth() / 2 : 2;
+  var offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
+  offset = axisType === 'angleAxis' && axisRange != null && axisRange.length >= 2 ? mathSign(axisRange[0] - axisRange[1]) * 2 * offset : offset;
+
+  // The ticks set by user should only affect the ticks adjacent to axis line
+  var ticksOrNiceTicks = ticks || niceTicks;
+  if (ticksOrNiceTicks) {
+    var result = ticksOrNiceTicks.map((entry, index) => {
+      var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;
+      return {
+        index,
+        // If the scaleContent is not a number, the coordinate will be NaN.
+        // That could be the case for example with a PointScale and a string as domain.
+        coordinate: scale(scaleContent) + offset,
+        value: entry,
+        offset
+      };
+    });
+    return result.filter(row => !isNan(row.coordinate));
+  }
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      index,
+      offset
+    }));
+  }
+  if (scale.ticks) {
+    return scale.ticks(tickCount)
+    // @ts-expect-error why does the offset go here? The type does not require it
+    .map(entry => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      offset
+    }));
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => ({
+    coordinate: scale(entry) + offset,
+    value: duplicateDomain ? duplicateDomain[entry] : entry,
+    index,
+    offset
+  }));
+};
+export var selectTicksOfAxis = createSelector([selectChartLayout, selectAxisSettings, selectRealScaleType, selectAxisScale, selectNiceTicks, selectAxisRange, selectDuplicateDomain, selectCategoricalDomain, pickAxisType], combineAxisTicks);
+export var combineGraphicalItemTicks = (layout, axis, scale, axisRange, duplicateDomain, categoricalDomain, axisType) => {
+  if (axis == null || scale == null || axisRange == null || axisRange[0] === axisRange[1]) {
+    return undefined;
+  }
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  var {
+    tickCount
+  } = axis;
+  var offset = 0;
+  offset = axisType === 'angleAxis' && (axisRange === null || axisRange === void 0 ? void 0 : axisRange.length) >= 2 ? mathSign(axisRange[0] - axisRange[1]) * 2 * offset : offset;
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      index,
+      offset
+    }));
+  }
+  if (scale.ticks) {
+    return scale.ticks(tickCount)
+    // @ts-expect-error why does the offset go here? The type does not require it
+    .map(entry => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      offset
+    }));
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => ({
+    coordinate: scale(entry) + offset,
+    value: duplicateDomain ? duplicateDomain[entry] : entry,
+    index,
+    offset
+  }));
+};
+export var selectTicksOfGraphicalItem = createSelector([selectChartLayout, selectAxisSettings, selectAxisScale, selectAxisRange, selectDuplicateDomain, selectCategoricalDomain, pickAxisType], combineGraphicalItemTicks);
+export var selectAxisWithScale = createSelector(selectBaseAxis, selectAxisScale, (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+var selectZAxisScale = createSelector([selectBaseAxis, selectRealScaleType, selectAxisDomain, selectAxisRangeWithReverse], combineScaleFunction);
+export var selectZAxisWithScale = createSelector((state, _axisType, axisId) => selectZAxisSettings(state, axisId), selectZAxisScale, (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+
+/**
+ * We are also going to need to implement polar chart directions if we want to support keyboard controls for those.
+ */
+
+export var selectChartDirection = createSelector([selectChartLayout, selectAllXAxes, selectAllYAxes], (layout, allXAxes, allYAxes) => {
+  switch (layout) {
+    case 'horizontal':
+      {
+        return allXAxes.some(axis => axis.reversed) ? 'right-to-left' : 'left-to-right';
+      }
+    case 'vertical':
+      {
+        return allYAxes.some(axis => axis.reversed) ? 'bottom-to-top' : 'top-to-bottom';
+      }
+    // TODO: make this better. For now, right arrow triggers "forward", left arrow "back"
+    // however, the tooltip moves an unintuitive direction because of how the indices are rendered
+    case 'centric':
+    case 'radial':
+      {
+        return 'left-to-right';
+      }
+    default:
+      {
+        return undefined;
+      }
+  }
+});
Index: node_modules/recharts/es6/state/selectors/barSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/barSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/barSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,270 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { selectAxisWithScale, selectCartesianAxisSize, selectStackGroups, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems } from './axisSelectors';
+import { getPercentValue, isNullish } from '../../util/DataUtils';
+import { getBandSizeOfAxis } from '../../util/ChartUtils';
+import { computeBarRectangles } from '../../cartesian/Bar';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectBarCategoryGap, selectBarGap, selectRootBarSize, selectRootMaxBarSize } from './rootPropsSelectors';
+import { isWellBehavedNumber } from '../../util/isWellBehavedNumber';
+import { getStackSeriesIdentifier } from '../../util/stacks/getStackSeriesIdentifier';
+import { isStacked } from '../types/StackedGraphicalItem';
+var pickXAxisId = (_state, xAxisId) => xAxisId;
+var pickYAxisId = (_state, _xAxisId, yAxisId) => yAxisId;
+var pickIsPanorama = (_state, _xAxisId, _yAxisId, isPanorama) => isPanorama;
+var pickBarId = (_state, _xAxisId, _yAxisId, _isPanorama, id) => id;
+var selectSynchronisedBarSettings = createSelector([selectUnfilteredCartesianItems, pickBarId], (graphicalItems, id) => graphicalItems.filter(item => item.type === 'bar').find(item => item.id === id));
+export var selectMaxBarSize = createSelector([selectSynchronisedBarSettings], barSettings => barSettings === null || barSettings === void 0 ? void 0 : barSettings.maxBarSize);
+var pickCells = (_state, _xAxisId, _yAxisId, _isPanorama, _id, cells) => cells;
+var getBarSize = (globalSize, totalSize, selfSize) => {
+  var barSize = selfSize !== null && selfSize !== void 0 ? selfSize : globalSize;
+  if (isNullish(barSize)) {
+    return undefined;
+  }
+  return getPercentValue(barSize, totalSize, 0);
+};
+export var selectAllVisibleBars = createSelector([selectChartLayout, selectUnfilteredCartesianItems, pickXAxisId, pickYAxisId, pickIsPanorama], (layout, allItems, xAxisId, yAxisId, isPanorama) => allItems.filter(i => {
+  if (layout === 'horizontal') {
+    return i.xAxisId === xAxisId;
+  }
+  return i.yAxisId === yAxisId;
+}).filter(i => i.isPanorama === isPanorama).filter(i => i.hide === false).filter(i => i.type === 'bar'));
+var selectBarStackGroups = (state, xAxisId, yAxisId, isPanorama) => {
+  var layout = selectChartLayout(state);
+  if (layout === 'horizontal') {
+    return selectStackGroups(state, 'yAxis', yAxisId, isPanorama);
+  }
+  return selectStackGroups(state, 'xAxis', xAxisId, isPanorama);
+};
+export var selectBarCartesianAxisSize = (state, xAxisId, yAxisId) => {
+  var layout = selectChartLayout(state);
+  if (layout === 'horizontal') {
+    return selectCartesianAxisSize(state, 'xAxis', xAxisId);
+  }
+  return selectCartesianAxisSize(state, 'yAxis', yAxisId);
+};
+export var combineBarSizeList = (allBars, globalSize, totalSize) => {
+  var initialValue = {};
+  var stackedBars = allBars.filter(isStacked);
+  var unstackedBars = allBars.filter(b => b.stackId == null);
+  var groupByStack = stackedBars.reduce((acc, bar) => {
+    if (!acc[bar.stackId]) {
+      acc[bar.stackId] = [];
+    }
+    acc[bar.stackId].push(bar);
+    return acc;
+  }, initialValue);
+  var stackedSizeList = Object.entries(groupByStack).map(_ref => {
+    var [stackId, bars] = _ref;
+    var dataKeys = bars.map(b => b.dataKey);
+    var barSize = getBarSize(globalSize, totalSize, bars[0].barSize);
+    return {
+      stackId,
+      dataKeys,
+      barSize
+    };
+  });
+  var unstackedSizeList = unstackedBars.map(b => {
+    var dataKeys = [b.dataKey].filter(dk => dk != null);
+    var barSize = getBarSize(globalSize, totalSize, b.barSize);
+    return {
+      stackId: undefined,
+      dataKeys,
+      barSize
+    };
+  });
+  return [...stackedSizeList, ...unstackedSizeList];
+};
+export var selectBarSizeList = createSelector([selectAllVisibleBars, selectRootBarSize, selectBarCartesianAxisSize], combineBarSizeList);
+export var selectBarBandSize = (state, xAxisId, yAxisId, isPanorama, id) => {
+  var _ref2, _getBandSizeOfAxis;
+  var barSettings = selectSynchronisedBarSettings(state, xAxisId, yAxisId, isPanorama, id);
+  if (barSettings == null) {
+    return undefined;
+  }
+  var layout = selectChartLayout(state);
+  var globalMaxBarSize = selectRootMaxBarSize(state);
+  var {
+    maxBarSize: childMaxBarSize
+  } = barSettings;
+  var maxBarSize = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;
+  var axis, ticks;
+  if (layout === 'horizontal') {
+    axis = selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+    ticks = selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+  } else {
+    axis = selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+    ticks = selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+  }
+  return (_ref2 = (_getBandSizeOfAxis = getBandSizeOfAxis(axis, ticks, true)) !== null && _getBandSizeOfAxis !== void 0 ? _getBandSizeOfAxis : maxBarSize) !== null && _ref2 !== void 0 ? _ref2 : 0;
+};
+export var selectAxisBandSize = (state, xAxisId, yAxisId, isPanorama) => {
+  var layout = selectChartLayout(state);
+  var axis, ticks;
+  if (layout === 'horizontal') {
+    axis = selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+    ticks = selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+  } else {
+    axis = selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+    ticks = selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+  }
+  return getBandSizeOfAxis(axis, ticks);
+};
+function getBarPositions(barGap, barCategoryGap, bandSize, sizeList, maxBarSize) {
+  var len = sizeList.length;
+  if (len < 1) {
+    return undefined;
+  }
+  var realBarGap = getPercentValue(barGap, bandSize, 0, true);
+  var result;
+  var initialValue = [];
+
+  // whether is barSize set by user
+  // Okay but why does it check only for the first element? What if the first element is set but others are not?
+  if (isWellBehavedNumber(sizeList[0].barSize)) {
+    var useFull = false;
+    var fullBarSize = bandSize / len;
+    var sum = sizeList.reduce((res, entry) => res + (entry.barSize || 0), 0);
+    sum += (len - 1) * realBarGap;
+    if (sum >= bandSize) {
+      sum -= (len - 1) * realBarGap;
+      realBarGap = 0;
+    }
+    if (sum >= bandSize && fullBarSize > 0) {
+      useFull = true;
+      fullBarSize *= 0.9;
+      sum = len * fullBarSize;
+    }
+    var offset = (bandSize - sum) / 2 >> 0;
+    var prev = {
+      offset: offset - realBarGap,
+      size: 0
+    };
+    result = sizeList.reduce((res, entry) => {
+      var _entry$barSize;
+      var newPosition = {
+        stackId: entry.stackId,
+        dataKeys: entry.dataKeys,
+        position: {
+          offset: prev.offset + prev.size + realBarGap,
+          size: useFull ? fullBarSize : (_entry$barSize = entry.barSize) !== null && _entry$barSize !== void 0 ? _entry$barSize : 0
+        }
+      };
+      var newRes = [...res, newPosition];
+      prev = newRes[newRes.length - 1].position;
+      return newRes;
+    }, initialValue);
+  } else {
+    var _offset = getPercentValue(barCategoryGap, bandSize, 0, true);
+    if (bandSize - 2 * _offset - (len - 1) * realBarGap <= 0) {
+      realBarGap = 0;
+    }
+    var originalSize = (bandSize - 2 * _offset - (len - 1) * realBarGap) / len;
+    if (originalSize > 1) {
+      originalSize >>= 0;
+    }
+    var size = isWellBehavedNumber(maxBarSize) ? Math.min(originalSize, maxBarSize) : originalSize;
+    result = sizeList.reduce((res, entry, i) => [...res, {
+      stackId: entry.stackId,
+      dataKeys: entry.dataKeys,
+      position: {
+        offset: _offset + (originalSize + realBarGap) * i + (originalSize - size) / 2,
+        size
+      }
+    }], initialValue);
+  }
+  return result;
+}
+export var combineAllBarPositions = (sizeList, globalMaxBarSize, barGap, barCategoryGap, barBandSize, bandSize, childMaxBarSize) => {
+  var maxBarSize = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;
+  var allBarPositions = getBarPositions(barGap, barCategoryGap, barBandSize !== bandSize ? barBandSize : bandSize, sizeList, maxBarSize);
+  if (barBandSize !== bandSize && allBarPositions != null) {
+    allBarPositions = allBarPositions.map(pos => _objectSpread(_objectSpread({}, pos), {}, {
+      position: _objectSpread(_objectSpread({}, pos.position), {}, {
+        offset: pos.position.offset - barBandSize / 2
+      })
+    }));
+  }
+  return allBarPositions;
+};
+export var selectAllBarPositions = createSelector([selectBarSizeList, selectRootMaxBarSize, selectBarGap, selectBarCategoryGap, selectBarBandSize, selectAxisBandSize, selectMaxBarSize], combineAllBarPositions);
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, isPanorama) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, isPanorama) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+export var selectBarPosition = createSelector([selectAllBarPositions, selectSynchronisedBarSettings], (allBarPositions, barSettings) => {
+  if (allBarPositions == null || barSettings == null) {
+    return undefined;
+  }
+  var position = allBarPositions.find(p => p.stackId === barSettings.stackId && barSettings.dataKey != null && p.dataKeys.includes(barSettings.dataKey));
+  if (position == null) {
+    return undefined;
+  }
+  return position.position;
+});
+export var combineStackedData = (stackGroups, barSettings) => {
+  var stackSeriesIdentifier = getStackSeriesIdentifier(barSettings);
+  if (!stackGroups || stackSeriesIdentifier == null || barSettings == null) {
+    return undefined;
+  }
+  var {
+    stackId
+  } = barSettings;
+  if (stackId == null) {
+    return undefined;
+  }
+  var stackGroup = stackGroups[stackId];
+  if (!stackGroup) {
+    return undefined;
+  }
+  var {
+    stackedData
+  } = stackGroup;
+  if (!stackedData) {
+    return undefined;
+  }
+  return stackedData.find(sd => sd.key === stackSeriesIdentifier);
+};
+var selectStackedDataOfItem = createSelector([selectBarStackGroups, selectSynchronisedBarSettings], combineStackedData);
+export var selectBarRectangles = createSelector([selectChartOffsetInternal, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectBarPosition, selectChartLayout, selectChartDataWithIndexesIfNotInPanorama, selectAxisBandSize, selectStackedDataOfItem, selectSynchronisedBarSettings, pickCells], (offset, xAxis, yAxis, xAxisTicks, yAxisTicks, pos, layout, _ref3, bandSize, stackedData, barSettings, cells) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref3;
+  if (barSettings == null || pos == null || layout !== 'horizontal' && layout !== 'vertical' || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || bandSize == null) {
+    return undefined;
+  }
+  var {
+    data
+  } = barSettings;
+  var displayedData;
+  if (data != null && data.length > 0) {
+    displayedData = data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return computeBarRectangles({
+    layout,
+    barSettings,
+    pos,
+    bandSize,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    stackedData,
+    displayedData,
+    offset,
+    cells
+  });
+});
Index: node_modules/recharts/es6/state/selectors/brushSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/brushSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/brushSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { createSelector } from 'reselect';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectMargin } from './containerSelectors';
+import { isNumber } from '../../util/DataUtils';
+export var selectBrushSettings = state => state.brush;
+export var selectBrushDimensions = createSelector([selectBrushSettings, selectChartOffsetInternal, selectMargin], (brushSettings, offset, margin) => ({
+  height: brushSettings.height,
+  x: isNumber(brushSettings.x) ? brushSettings.x : offset.left,
+  y: isNumber(brushSettings.y) ? brushSettings.y : offset.top + offset.height + offset.brushBottom - ((margin === null || margin === void 0 ? void 0 : margin.bottom) || 0),
+  width: isNumber(brushSettings.width) ? brushSettings.width : offset.width
+}));
Index: node_modules/recharts/es6/state/selectors/combiners/combineActiveLabel.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineActiveLabel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/combiners/combineActiveLabel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { isNan } from '../../../util/DataUtils';
+export var combineActiveLabel = (tooltipTicks, activeIndex) => {
+  var _tooltipTicks$n;
+  var n = Number(activeIndex);
+  if (isNan(n) || activeIndex == null) {
+    return undefined;
+  }
+  return n >= 0 ? tooltipTicks === null || tooltipTicks === void 0 || (_tooltipTicks$n = tooltipTicks[n]) === null || _tooltipTicks$n === void 0 ? void 0 : _tooltipTicks$n.value : undefined;
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineActiveTooltipIndex.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineActiveTooltipIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/combiners/combineActiveTooltipIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import { isWellBehavedNumber } from '../../../util/isWellBehavedNumber';
+export var combineActiveTooltipIndex = (tooltipInteraction, chartData) => {
+  var desiredIndex = tooltipInteraction === null || tooltipInteraction === void 0 ? void 0 : tooltipInteraction.index;
+  if (desiredIndex == null) {
+    return null;
+  }
+  var indexAsNumber = Number(desiredIndex);
+  if (!isWellBehavedNumber(indexAsNumber)) {
+    // this is for charts like Sankey and Treemap that do not support numerical indexes. We need a proper solution for this before we can start supporting keyboard events on these charts.
+    return desiredIndex;
+  }
+
+  /*
+   * Zero is a trivial limit for single-dimensional charts like Line and Area,
+   * but this also needs a support for multidimensional charts like Sankey and Treemap! TODO
+   */
+  var lowerLimit = 0;
+  var upperLimit = +Infinity;
+  if (chartData.length > 0) {
+    upperLimit = chartData.length - 1;
+  }
+
+  // now let's clamp the desiredIndex between the limits
+  return String(Math.max(lowerLimit, Math.min(indexAsNumber, upperLimit)));
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineAxisRangeWithReverse.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineAxisRangeWithReverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/combiners/combineAxisRangeWithReverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export var combineAxisRangeWithReverse = (axisSettings, axisRange) => {
+  if (!axisSettings || !axisRange) {
+    return undefined;
+  }
+  if (axisSettings !== null && axisSettings !== void 0 && axisSettings.reversed) {
+    return [axisRange[1], axisRange[0]];
+  }
+  return axisRange;
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineCoordinateForDefaultIndex.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineCoordinateForDefaultIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/combiners/combineCoordinateForDefaultIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+export var combineCoordinateForDefaultIndex = (width, height, layout, offset, tooltipTicks, defaultIndex, tooltipConfigurations, tooltipPayloadSearcher) => {
+  if (defaultIndex == null || tooltipPayloadSearcher == null) {
+    return undefined;
+  }
+  // With defaultIndex alone, we don't have enough information to decide _which_ of the multiple tooltips to display. So we choose the first one.
+  var firstConfiguration = tooltipConfigurations[0];
+  // @ts-expect-error we need to rethink the tooltipPayloadSearcher type
+  var maybePosition = firstConfiguration == null ? undefined : tooltipPayloadSearcher(firstConfiguration.positions, defaultIndex);
+  if (maybePosition != null) {
+    return maybePosition;
+  }
+  var tick = tooltipTicks === null || tooltipTicks === void 0 ? void 0 : tooltipTicks[Number(defaultIndex)];
+  if (!tick) {
+    return undefined;
+  }
+  switch (layout) {
+    case 'horizontal':
+      {
+        return {
+          x: tick.coordinate,
+          y: (offset.top + height) / 2
+        };
+      }
+    default:
+      {
+        // This logic is not super sound - it conflates vertical, radial, centric layouts into just one. TODO improve!
+        return {
+          x: (offset.left + width) / 2,
+          y: tick.coordinate
+        };
+      }
+  }
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineDisplayedStackedData.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineDisplayedStackedData.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/combiners/combineDisplayedStackedData.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+import { getStackSeriesIdentifier } from '../../../util/stacks/getStackSeriesIdentifier';
+import { getValueByDataKey } from '../../../util/ChartUtils';
+
+/**
+ * In a stacked chart, each graphical item has its own data. That data could be either:
+ * - defined on the chart root, in which case the item gets a unique dataKey
+ * - or defined on the item itself, in which case multiple items can share the same dataKey
+ *
+ * That means we cannot use the dataKey as a unique identifier for the item.
+ *
+ * This type represents a single data point in a stacked chart, where each key is a series identifier
+ * and the value is the numeric value for that series using the numerical axis dataKey.
+ */
+
+export function combineDisplayedStackedData(stackedGraphicalItems, _ref, tooltipAxisSettings) {
+  var {
+    chartData = []
+  } = _ref;
+  var tooltipDataKey = tooltipAxisSettings === null || tooltipAxisSettings === void 0 ? void 0 : tooltipAxisSettings.dataKey;
+
+  // A map of tooltip data keys to the stacked data points
+  var knownItemsByDataKey = new Map();
+  stackedGraphicalItems.forEach(item => {
+    var _item$data;
+    // If there is no data on the individual item then we use the root chart data
+    var resolvedData = (_item$data = item.data) !== null && _item$data !== void 0 ? _item$data : chartData;
+    if (resolvedData == null || resolvedData.length === 0) {
+      // if that didn't work then we skip this item
+      return;
+    }
+    var stackIdentifier = getStackSeriesIdentifier(item);
+    resolvedData.forEach((entry, index) => {
+      var tooltipValue = tooltipDataKey == null ? index : String(getValueByDataKey(entry, tooltipDataKey, null));
+      var numericValue = getValueByDataKey(entry, item.dataKey, 0);
+      var curr;
+      if (knownItemsByDataKey.has(tooltipValue)) {
+        curr = knownItemsByDataKey.get(tooltipValue);
+      } else {
+        curr = {};
+      }
+      Object.assign(curr, {
+        [stackIdentifier]: numericValue
+      });
+      knownItemsByDataKey.set(tooltipValue, curr);
+    });
+  });
+  return Array.from(knownItemsByDataKey.values());
+}
Index: node_modules/recharts/es6/state/selectors/combiners/combineTooltipInteractionState.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineTooltipInteractionState.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/combiners/combineTooltipInteractionState.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { noInteraction } from '../../tooltipSlice';
+function chooseAppropriateMouseInteraction(tooltipState, tooltipEventType, trigger) {
+  if (tooltipEventType === 'axis') {
+    if (trigger === 'click') {
+      return tooltipState.axisInteraction.click;
+    }
+    return tooltipState.axisInteraction.hover;
+  }
+  if (trigger === 'click') {
+    return tooltipState.itemInteraction.click;
+  }
+  return tooltipState.itemInteraction.hover;
+}
+function hasBeenActivePreviously(tooltipInteractionState) {
+  return tooltipInteractionState.index != null;
+}
+export var combineTooltipInteractionState = (tooltipState, tooltipEventType, trigger, defaultIndex) => {
+  if (tooltipEventType == null) {
+    return noInteraction;
+  }
+  var appropriateMouseInteraction = chooseAppropriateMouseInteraction(tooltipState, tooltipEventType, trigger);
+  if (appropriateMouseInteraction == null) {
+    return noInteraction;
+  }
+  if (appropriateMouseInteraction.active) {
+    return appropriateMouseInteraction;
+  }
+  if (tooltipState.keyboardInteraction.active) {
+    return tooltipState.keyboardInteraction;
+  }
+  if (tooltipState.syncInteraction.active && tooltipState.syncInteraction.index != null) {
+    return tooltipState.syncInteraction;
+  }
+  var activeFromProps = tooltipState.settings.active === true;
+  if (hasBeenActivePreviously(appropriateMouseInteraction)) {
+    if (activeFromProps) {
+      return _objectSpread(_objectSpread({}, appropriateMouseInteraction), {}, {
+        active: true
+      });
+    }
+  } else if (defaultIndex != null) {
+    return {
+      active: true,
+      coordinate: undefined,
+      dataKey: undefined,
+      index: defaultIndex
+    };
+  }
+  return _objectSpread(_objectSpread({}, noInteraction), {}, {
+    coordinate: appropriateMouseInteraction.coordinate
+  });
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayload.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { findEntryInArray } from '../../../util/DataUtils';
+import { getTooltipEntry, getValueByDataKey } from '../../../util/ChartUtils';
+import { getSliced } from '../../../util/getSliced';
+function selectFinalData(dataDefinedOnItem, dataDefinedOnChart) {
+  /*
+   * If a payload has data specified directly from the graphical item, prefer that.
+   * Otherwise, fill in data from the chart level, using the same index.
+   */
+  if (dataDefinedOnItem != null) {
+    return dataDefinedOnItem;
+  }
+  return dataDefinedOnChart;
+}
+export var combineTooltipPayload = (tooltipPayloadConfigurations, activeIndex, chartDataState, tooltipAxis, activeLabel, tooltipPayloadSearcher, tooltipEventType) => {
+  if (activeIndex == null || tooltipPayloadSearcher == null) {
+    return undefined;
+  }
+  var {
+    chartData,
+    computedData,
+    dataStartIndex,
+    dataEndIndex
+  } = chartDataState;
+  var init = [];
+  return tooltipPayloadConfigurations.reduce((agg, _ref) => {
+    var _settings$dataKey;
+    var {
+      dataDefinedOnItem,
+      settings
+    } = _ref;
+    var finalData = selectFinalData(dataDefinedOnItem, chartData);
+    var sliced = Array.isArray(finalData) ? getSliced(finalData, dataStartIndex, dataEndIndex) : finalData;
+    var finalDataKey = (_settings$dataKey = settings === null || settings === void 0 ? void 0 : settings.dataKey) !== null && _settings$dataKey !== void 0 ? _settings$dataKey : tooltipAxis === null || tooltipAxis === void 0 ? void 0 : tooltipAxis.dataKey;
+    // BaseAxisProps does not support nameKey but it could!
+    var finalNameKey = settings === null || settings === void 0 ? void 0 : settings.nameKey; // ?? tooltipAxis?.nameKey;
+    var tooltipPayload;
+    if (tooltipAxis !== null && tooltipAxis !== void 0 && tooltipAxis.dataKey && Array.isArray(sliced) &&
+    /*
+     * findEntryInArray won't work for Scatter because Scatter provides an array of arrays
+     * as tooltip payloads and findEntryInArray is not prepared to handle that.
+     * Sad but also ScatterChart only allows 'item' tooltipEventType
+     * and also this is only a problem if there are multiple Scatters and each has its own data array
+     * so let's fix that some other time.
+     */
+    !Array.isArray(sliced[0]) &&
+    /*
+     * If the tooltipEventType is 'axis', we should search for the dataKey in the sliced data
+     * because thanks to allowDuplicatedCategory=false, the order of elements in the array
+     * no longer matches the order of elements in the original data
+     * and so we need to search by the active dataKey + label rather than by index.
+     *
+     * The same happens if multiple graphical items are present in the chart
+     * and each of them has its own data array. Those arrays get concatenated
+     * and again the tooltip index no longer matches the original data.
+     *
+     * On the other hand the tooltipEventType 'item' should always search by index
+     * because we get the index from interacting over the individual elements
+     * which is always accurate, irrespective of the allowDuplicatedCategory setting.
+     */
+    tooltipEventType === 'axis') {
+      tooltipPayload = findEntryInArray(sliced, tooltipAxis.dataKey, activeLabel);
+    } else {
+      /*
+       * This is a problem because it assumes that the index is pointing to the displayed data
+       * which it isn't because the index is pointing to the tooltip ticks array.
+       * The above approach (with findEntryInArray) is the correct one, but it only works
+       * if the axis dataKey is defined explicitly, and if the data is an array of objects.
+       */
+      tooltipPayload = tooltipPayloadSearcher(sliced, activeIndex, computedData, finalNameKey);
+    }
+    if (Array.isArray(tooltipPayload)) {
+      tooltipPayload.forEach(item => {
+        var newSettings = _objectSpread(_objectSpread({}, settings), {}, {
+          name: item.name,
+          unit: item.unit,
+          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.
+          color: undefined,
+          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.
+          fill: undefined
+        });
+        agg.push(getTooltipEntry({
+          tooltipEntrySettings: newSettings,
+          dataKey: item.dataKey,
+          payload: item.payload,
+          // @ts-expect-error getValueByDataKey does not validate the output type
+          value: getValueByDataKey(item.payload, item.dataKey),
+          name: item.name
+        }));
+      });
+    } else {
+      var _getValueByDataKey;
+      // I am not quite sure why these two branches (Array vs Array of Arrays) have to behave differently - I imagine we should unify these. 3.x breaking change?
+      agg.push(getTooltipEntry({
+        tooltipEntrySettings: settings,
+        dataKey: finalDataKey,
+        payload: tooltipPayload,
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        value: getValueByDataKey(tooltipPayload, finalDataKey),
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        name: (_getValueByDataKey = getValueByDataKey(tooltipPayload, finalNameKey)) !== null && _getValueByDataKey !== void 0 ? _getValueByDataKey : settings === null || settings === void 0 ? void 0 : settings.name
+      }));
+    }
+    return agg;
+  }, init);
+};
Index: node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayloadConfigurations.js
===================================================================
--- node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayloadConfigurations.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/combiners/combineTooltipPayloadConfigurations.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+export var combineTooltipPayloadConfigurations = (tooltipState, tooltipEventType, trigger, defaultIndex) => {
+  // if tooltip reacts to axis interaction, then we display all items at the same time.
+  if (tooltipEventType === 'axis') {
+    return tooltipState.tooltipItemPayloads;
+  }
+  /*
+   * By now we already know that tooltipEventType is 'item', so we can only search in itemInteractions.
+   * item means that only the hovered or clicked item will be present in the tooltip.
+   */
+  if (tooltipState.tooltipItemPayloads.length === 0) {
+    // No point filtering if the payload is empty
+    return [];
+  }
+  var filterByDataKey;
+  if (trigger === 'hover') {
+    filterByDataKey = tooltipState.itemInteraction.hover.dataKey;
+  } else {
+    filterByDataKey = tooltipState.itemInteraction.click.dataKey;
+  }
+  if (filterByDataKey == null && defaultIndex != null) {
+    /*
+     * So when we use `defaultIndex` - we don't have a dataKey to filter by because user did not hover over anything yet.
+     * In that case let's display the first item in the tooltip; after all, this is `item` interaction case,
+     * so we should display only one item at a time instead of all.
+     */
+    return [tooltipState.tooltipItemPayloads[0]];
+  }
+  return tooltipState.tooltipItemPayloads.filter(tpc => {
+    var _tpc$settings;
+    return ((_tpc$settings = tpc.settings) === null || _tpc$settings === void 0 ? void 0 : _tpc$settings.dataKey) === filterByDataKey;
+  });
+};
Index: node_modules/recharts/es6/state/selectors/containerSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/containerSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/containerSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+export var selectChartWidth = state => state.layout.width;
+export var selectChartHeight = state => state.layout.height;
+export var selectContainerScale = state => state.layout.scale;
+export var selectMargin = state => state.layout.margin;
Index: node_modules/recharts/es6/state/selectors/dataSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/dataSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/dataSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import { createSelector } from 'reselect';
+/**
+ * This selector always returns the data with the indexes set by a Brush.
+ * Trouble is, that might or might not be what you want.
+ *
+ * In charts with Brush, you will sometimes want to select the full range of data, and sometimes the one decided by the Brush
+ * - even if the Brush is active, the panorama inside the Brush should show the full range of data.
+ *
+ * So instead of this selector, consider using either selectChartDataAndAlwaysIgnoreIndexes or selectChartDataWithIndexesIfNotInPanorama
+ *
+ * @param state RechartsRootState
+ * @returns data defined on the chart root element, such as BarChart or ScatterChart
+ */
+export var selectChartDataWithIndexes = state => state.chartData;
+
+/**
+ * This selector will always return the full range of data, ignoring the indexes set by a Brush.
+ * Useful for when you want to render the full range of data, even if a Brush is active.
+ * For example: in the Brush panorama, in Legend, in Tooltip.
+ */
+export var selectChartDataAndAlwaysIgnoreIndexes = createSelector([selectChartDataWithIndexes], dataState => {
+  var dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0;
+  return {
+    chartData: dataState.chartData,
+    computedData: dataState.computedData,
+    dataEndIndex,
+    dataStartIndex: 0
+  };
+});
+export var selectChartDataWithIndexesIfNotInPanorama = (state, _unused1, _unused2, isPanorama) => {
+  if (isPanorama) {
+    return selectChartDataAndAlwaysIgnoreIndexes(state);
+  }
+  return selectChartDataWithIndexes(state);
+};
Index: node_modules/recharts/es6/state/selectors/funnelSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/funnelSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/funnelSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { computeFunnelTrapezoids } from '../../cartesian/Funnel';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';
+var pickFunnelSettings = (_state, funnelSettings) => funnelSettings;
+export var selectFunnelTrapezoids = createSelector([selectChartOffsetInternal, pickFunnelSettings, selectChartDataAndAlwaysIgnoreIndexes], (offset, _ref, _ref2) => {
+  var {
+    data,
+    dataKey,
+    nameKey,
+    tooltipType,
+    lastShapeType,
+    reversed,
+    customWidth,
+    cells,
+    presentationProps
+  } = _ref;
+  var {
+    chartData
+  } = _ref2;
+  var displayedData;
+  if (data != null && data.length > 0) {
+    displayedData = data;
+  } else if (chartData != null && chartData.length > 0) {
+    displayedData = chartData;
+  }
+  if (displayedData && displayedData.length) {
+    displayedData = displayedData.map((entry, index) => _objectSpread(_objectSpread(_objectSpread({
+      payload: entry
+    }, presentationProps), entry), cells && cells[index] && cells[index].props));
+  } else if (cells && cells.length) {
+    displayedData = cells.map(cell => _objectSpread(_objectSpread({}, presentationProps), cell.props));
+  } else {
+    return {
+      trapezoids: [],
+      data: displayedData
+    };
+  }
+  return computeFunnelTrapezoids({
+    dataKey,
+    nameKey,
+    displayedData,
+    tooltipType,
+    lastShapeType,
+    reversed,
+    offset,
+    customWidth
+  });
+});
Index: node_modules/recharts/es6/state/selectors/legendSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/legendSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/legendSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { createSelector } from 'reselect';
+import sortBy from 'es-toolkit/compat/sortBy';
+export var selectLegendSettings = state => state.legend.settings;
+export var selectLegendSize = state => state.legend.size;
+var selectAllLegendPayload2DArray = state => state.legend.payload;
+export var selectLegendPayload = createSelector([selectAllLegendPayload2DArray, selectLegendSettings], (payloads, _ref) => {
+  var {
+    itemSorter
+  } = _ref;
+  var flat = payloads.flat(1);
+  return itemSorter ? sortBy(flat, itemSorter) : flat;
+});
Index: node_modules/recharts/es6/state/selectors/lineSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/lineSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/lineSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+import { createSelector } from 'reselect';
+import { computeLinePoints } from '../../cartesian/Line';
+import { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectAxisWithScale, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems } from './axisSelectors';
+import { getBandSizeOfAxis, isCategoricalAxis } from '../../util/ChartUtils';
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, isPanorama) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, isPanorama) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, isPanorama) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+var selectBandSize = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {
+  if (isCategoricalAxis(layout, 'xAxis')) {
+    return getBandSizeOfAxis(xAxis, xAxisTicks, false);
+  }
+  return getBandSizeOfAxis(yAxis, yAxisTicks, false);
+});
+var pickLineId = (_state, _xAxisId, _yAxisId, _isPanorama, id) => id;
+function isLineSettings(item) {
+  return item.type === 'line';
+}
+
+/*
+ * There is a race condition problem because we read some data from props and some from the state.
+ * The state is updated through a dispatch and is one render behind,
+ * and so we have this weird one tick render where the displayedData in one selector have the old dataKey
+ * but the new dataKey in another selector.
+ *
+ * So here instead of reading the dataKey from the props, we always read it from the state.
+ */
+var selectSynchronisedLineSettings = createSelector([selectUnfilteredCartesianItems, pickLineId], (graphicalItems, id) => graphicalItems.filter(isLineSettings).find(x => x.id === id));
+export var selectLinePoints = createSelector([selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectSynchronisedLineSettings, selectBandSize, selectChartDataWithIndexesIfNotInPanorama], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks, lineSettings, bandSize, _ref) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (lineSettings == null || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || xAxisTicks.length === 0 || yAxisTicks.length === 0 || bandSize == null) {
+    return undefined;
+  }
+  var {
+    dataKey,
+    data
+  } = lineSettings;
+  var displayedData;
+  if (data != null && data.length > 0) {
+    displayedData = data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return computeLinePoints({
+    layout,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    dataKey,
+    bandSize,
+    displayedData
+  });
+});
Index: node_modules/recharts/es6/state/selectors/pickAxisId.js
===================================================================
--- node_modules/recharts/es6/state/selectors/pickAxisId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/pickAxisId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export var pickAxisId = (_state, _axisType, axisId) => axisId;
Index: node_modules/recharts/es6/state/selectors/pickAxisType.js
===================================================================
--- node_modules/recharts/es6/state/selectors/pickAxisType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/pickAxisType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export var pickAxisType = (_state, axisType) => axisType;
Index: node_modules/recharts/es6/state/selectors/pieSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/pieSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/pieSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { computePieSectors } from '../../polar/Pie';
+import { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { getTooltipNameProp, getValueByDataKey } from '../../util/ChartUtils';
+import { selectUnfilteredPolarItems } from './polarSelectors';
+var pickId = (_state, id) => id;
+var selectSynchronisedPieSettings = createSelector([selectUnfilteredPolarItems, pickId], (graphicalItems, id) => graphicalItems.filter(item => item.type === 'pie').find(item => item.id === id));
+
+// Keep stable reference to an empty array to prevent re-renders
+var emptyArray = [];
+var pickCells = (_state, _id, cells) => {
+  if ((cells === null || cells === void 0 ? void 0 : cells.length) === 0) {
+    return emptyArray;
+  }
+  return cells;
+};
+export var selectDisplayedData = createSelector([selectChartDataAndAlwaysIgnoreIndexes, selectSynchronisedPieSettings, pickCells], (_ref, pieSettings, cells) => {
+  var {
+    chartData
+  } = _ref;
+  if (pieSettings == null) {
+    return undefined;
+  }
+  var displayedData;
+  if ((pieSettings === null || pieSettings === void 0 ? void 0 : pieSettings.data) != null && pieSettings.data.length > 0) {
+    displayedData = pieSettings.data;
+  } else {
+    displayedData = chartData;
+  }
+  if ((!displayedData || !displayedData.length) && cells != null) {
+    displayedData = cells.map(cell => _objectSpread(_objectSpread({}, pieSettings.presentationProps), cell.props));
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return displayedData;
+});
+export var selectPieLegend = createSelector([selectDisplayedData, selectSynchronisedPieSettings, pickCells], (displayedData, pieSettings, cells) => {
+  if (displayedData == null || pieSettings == null) {
+    return undefined;
+  }
+  return displayedData.map((entry, i) => {
+    var _cells$i;
+    var name = getValueByDataKey(entry, pieSettings.nameKey, pieSettings.name);
+    var color;
+    if (cells !== null && cells !== void 0 && (_cells$i = cells[i]) !== null && _cells$i !== void 0 && (_cells$i = _cells$i.props) !== null && _cells$i !== void 0 && _cells$i.fill) {
+      color = cells[i].props.fill;
+    } else if (typeof entry === 'object' && entry != null && 'fill' in entry) {
+      color = entry.fill;
+    } else {
+      color = pieSettings.fill;
+    }
+    return {
+      value: getTooltipNameProp(name, pieSettings.dataKey),
+      color,
+      payload: entry,
+      type: pieSettings.legendType
+    };
+  });
+});
+export var selectPieSectors = createSelector([selectDisplayedData, selectSynchronisedPieSettings, pickCells, selectChartOffsetInternal], (displayedData, pieSettings, cells, offset) => {
+  if (pieSettings == null || displayedData == null) {
+    return undefined;
+  }
+  return computePieSectors({
+    offset,
+    pieSettings,
+    displayedData,
+    cells
+  });
+});
Index: node_modules/recharts/es6/state/selectors/polarAxisSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/polarAxisSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/polarAxisSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,149 @@
+import { createSelector } from 'reselect';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { getMaxRadius } from '../../util/PolarUtils';
+import { getPercentValue } from '../../util/DataUtils';
+import { defaultPolarAngleAxisProps } from '../../polar/defaultPolarAngleAxisProps';
+import { defaultPolarRadiusAxisProps } from '../../polar/defaultPolarRadiusAxisProps';
+import { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+export var implicitAngleAxis = {
+  allowDataOverflow: false,
+  allowDecimals: false,
+  allowDuplicatedCategory: false,
+  // defaultPolarAngleAxisProps.allowDuplicatedCategory has it set to true but the actual axis rendering ignores the prop because reasons,
+  dataKey: undefined,
+  domain: undefined,
+  id: defaultPolarAngleAxisProps.angleAxisId,
+  includeHidden: false,
+  name: undefined,
+  reversed: defaultPolarAngleAxisProps.reversed,
+  scale: defaultPolarAngleAxisProps.scale,
+  tick: defaultPolarAngleAxisProps.tick,
+  tickCount: undefined,
+  ticks: undefined,
+  type: defaultPolarAngleAxisProps.type,
+  unit: undefined
+};
+export var implicitRadiusAxis = {
+  allowDataOverflow: defaultPolarRadiusAxisProps.allowDataOverflow,
+  allowDecimals: false,
+  allowDuplicatedCategory: defaultPolarRadiusAxisProps.allowDuplicatedCategory,
+  dataKey: undefined,
+  domain: undefined,
+  id: defaultPolarRadiusAxisProps.radiusAxisId,
+  includeHidden: false,
+  name: undefined,
+  reversed: false,
+  scale: defaultPolarRadiusAxisProps.scale,
+  tick: defaultPolarRadiusAxisProps.tick,
+  tickCount: defaultPolarRadiusAxisProps.tickCount,
+  ticks: undefined,
+  type: defaultPolarRadiusAxisProps.type,
+  unit: undefined
+};
+export var implicitRadialBarAngleAxis = {
+  allowDataOverflow: false,
+  allowDecimals: false,
+  allowDuplicatedCategory: defaultPolarAngleAxisProps.allowDuplicatedCategory,
+  dataKey: undefined,
+  domain: undefined,
+  id: defaultPolarAngleAxisProps.angleAxisId,
+  includeHidden: false,
+  name: undefined,
+  reversed: false,
+  scale: defaultPolarAngleAxisProps.scale,
+  tick: defaultPolarAngleAxisProps.tick,
+  tickCount: undefined,
+  ticks: undefined,
+  type: 'number',
+  unit: undefined
+};
+export var implicitRadialBarRadiusAxis = {
+  allowDataOverflow: defaultPolarRadiusAxisProps.allowDataOverflow,
+  allowDecimals: false,
+  allowDuplicatedCategory: defaultPolarRadiusAxisProps.allowDuplicatedCategory,
+  dataKey: undefined,
+  domain: undefined,
+  id: defaultPolarRadiusAxisProps.radiusAxisId,
+  includeHidden: false,
+  name: undefined,
+  reversed: false,
+  scale: defaultPolarRadiusAxisProps.scale,
+  tick: defaultPolarRadiusAxisProps.tick,
+  tickCount: defaultPolarRadiusAxisProps.tickCount,
+  ticks: undefined,
+  type: 'category',
+  unit: undefined
+};
+export var selectAngleAxis = (state, angleAxisId) => {
+  if (state.polarAxis.angleAxis[angleAxisId] != null) {
+    return state.polarAxis.angleAxis[angleAxisId];
+  }
+  if (state.layout.layoutType === 'radial') {
+    return implicitRadialBarAngleAxis;
+  }
+  return implicitAngleAxis;
+};
+export var selectRadiusAxis = (state, radiusAxisId) => {
+  if (state.polarAxis.radiusAxis[radiusAxisId] != null) {
+    return state.polarAxis.radiusAxis[radiusAxisId];
+  }
+  if (state.layout.layoutType === 'radial') {
+    return implicitRadialBarRadiusAxis;
+  }
+  return implicitRadiusAxis;
+};
+export var selectPolarOptions = state => state.polarOptions;
+export var selectMaxRadius = createSelector([selectChartWidth, selectChartHeight, selectChartOffsetInternal], getMaxRadius);
+var selectInnerRadius = createSelector([selectPolarOptions, selectMaxRadius], (polarChartOptions, maxRadius) => {
+  if (polarChartOptions == null) {
+    return undefined;
+  }
+  return getPercentValue(polarChartOptions.innerRadius, maxRadius, 0);
+});
+export var selectOuterRadius = createSelector([selectPolarOptions, selectMaxRadius], (polarChartOptions, maxRadius) => {
+  if (polarChartOptions == null) {
+    return undefined;
+  }
+  return getPercentValue(polarChartOptions.outerRadius, maxRadius, maxRadius * 0.8);
+});
+var combineAngleAxisRange = polarOptions => {
+  if (polarOptions == null) {
+    return [0, 0];
+  }
+  var {
+    startAngle,
+    endAngle
+  } = polarOptions;
+  return [startAngle, endAngle];
+};
+export var selectAngleAxisRange = createSelector([selectPolarOptions], combineAngleAxisRange);
+export var selectAngleAxisRangeWithReversed = createSelector([selectAngleAxis, selectAngleAxisRange], combineAxisRangeWithReverse);
+export var selectRadiusAxisRange = createSelector([selectMaxRadius, selectInnerRadius, selectOuterRadius], (maxRadius, innerRadius, outerRadius) => {
+  if (maxRadius == null || innerRadius == null || outerRadius == null) {
+    return undefined;
+  }
+  return [innerRadius, outerRadius];
+});
+export var selectRadiusAxisRangeWithReversed = createSelector([selectRadiusAxis, selectRadiusAxisRange], combineAxisRangeWithReverse);
+export var selectPolarViewBox = createSelector([selectChartLayout, selectPolarOptions, selectInnerRadius, selectOuterRadius, selectChartWidth, selectChartHeight], (layout, polarOptions, innerRadius, outerRadius, width, height) => {
+  if (layout !== 'centric' && layout !== 'radial' || polarOptions == null || innerRadius == null || outerRadius == null) {
+    return undefined;
+  }
+  var {
+    cx,
+    cy,
+    startAngle,
+    endAngle
+  } = polarOptions;
+  return {
+    cx: getPercentValue(cx, width, width / 2),
+    cy: getPercentValue(cy, height, height / 2),
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle,
+    clockWise: false
+  };
+});
Index: node_modules/recharts/es6/state/selectors/polarGridSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/polarGridSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/polarGridSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import { createSelector } from 'reselect';
+import { selectPolarAxisTicks } from './polarScaleSelectors';
+var selectAngleAxisTicks = (state, anglexisId) => selectPolarAxisTicks(state, 'angleAxis', anglexisId, false);
+export var selectPolarGridAngles = createSelector([selectAngleAxisTicks], ticks => {
+  if (!ticks) {
+    return undefined;
+  }
+  return ticks.map(tick => tick.coordinate);
+});
+var selectRadiusAxisTicks = (state, radiusAxisId) => selectPolarAxisTicks(state, 'radiusAxis', radiusAxisId, false);
+export var selectPolarGridRadii = createSelector([selectRadiusAxisTicks], ticks => {
+  if (!ticks) {
+    return undefined;
+  }
+  return ticks.map(tick => tick.coordinate);
+});
Index: node_modules/recharts/es6/state/selectors/polarScaleSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/polarScaleSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/polarScaleSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+import { createSelector } from 'reselect';
+import { combineAxisTicks, combineCategoricalDomain, combineGraphicalItemTicks, combineScaleFunction, selectAxisSettings, selectDuplicateDomain, selectRealScaleType } from './axisSelectors';
+import { selectAngleAxis, selectAngleAxisRangeWithReversed, selectRadiusAxis, selectRadiusAxisRangeWithReversed } from './polarAxisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectPolarAppliedValues, selectPolarAxisDomainIncludingNiceTicks, selectPolarNiceTicks } from './polarSelectors';
+import { pickAxisType } from './pickAxisType';
+export var selectPolarAxis = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'angleAxis':
+      {
+        return selectAngleAxis(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return selectRadiusAxis(state, axisId);
+      }
+    default:
+      {
+        throw new Error("Unexpected axis type: ".concat(axisType));
+      }
+  }
+};
+var selectPolarAxisRangeWithReversed = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'angleAxis':
+      {
+        return selectAngleAxisRangeWithReversed(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return selectRadiusAxisRangeWithReversed(state, axisId);
+      }
+    default:
+      {
+        throw new Error("Unexpected axis type: ".concat(axisType));
+      }
+  }
+};
+export var selectPolarAxisScale = createSelector([selectPolarAxis, selectRealScaleType, selectPolarAxisDomainIncludingNiceTicks, selectPolarAxisRangeWithReversed], combineScaleFunction);
+export var selectPolarCategoricalDomain = createSelector([selectChartLayout, selectPolarAppliedValues, selectAxisSettings, pickAxisType], combineCategoricalDomain);
+export var selectPolarAxisTicks = createSelector([selectChartLayout, selectPolarAxis, selectRealScaleType, selectPolarAxisScale, selectPolarNiceTicks, selectPolarAxisRangeWithReversed, selectDuplicateDomain, selectPolarCategoricalDomain, pickAxisType], combineAxisTicks);
+export var selectPolarGraphicalItemAxisTicks = createSelector([selectChartLayout, selectPolarAxis, selectPolarAxisScale, selectPolarAxisRangeWithReversed, selectDuplicateDomain, selectPolarCategoricalDomain, pickAxisType], combineGraphicalItemTicks);
Index: node_modules/recharts/es6/state/selectors/polarSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/polarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/polarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+import { createSelector } from 'reselect';
+import { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';
+import { combineAppliedValues, combineAxisDomain, combineAxisDomainWithNiceTicks, combineDisplayedData, combineGraphicalItemsData, combineGraphicalItemsSettings, combineNiceTicks, combineNumericalDomain, itemAxisPredicate, selectBaseAxis, selectDomainDefinition, selectRealScaleType } from './axisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { getValueByDataKey } from '../../util/ChartUtils';
+import { pickAxisType } from './pickAxisType';
+import { pickAxisId } from './pickAxisId';
+import { selectStackOffsetType } from './rootPropsSelectors';
+export var selectUnfilteredPolarItems = state => state.graphicalItems.polarItems;
+var selectAxisPredicate = createSelector([pickAxisType, pickAxisId], itemAxisPredicate);
+export var selectPolarItemsSettings = createSelector([selectUnfilteredPolarItems, selectBaseAxis, selectAxisPredicate], combineGraphicalItemsSettings);
+var selectPolarGraphicalItemsData = createSelector([selectPolarItemsSettings], combineGraphicalItemsData);
+export var selectPolarDisplayedData = createSelector([selectPolarGraphicalItemsData, selectChartDataAndAlwaysIgnoreIndexes], combineDisplayedData);
+export var selectPolarAppliedValues = createSelector([selectPolarDisplayedData, selectBaseAxis, selectPolarItemsSettings], combineAppliedValues);
+export var selectAllPolarAppliedNumericalValues = createSelector([selectPolarDisplayedData, selectBaseAxis, selectPolarItemsSettings], (data, axisSettings, items) => {
+  if (items.length > 0) {
+    return data.flatMap(entry => {
+      return items.flatMap(item => {
+        var _axisSettings$dataKey;
+        var valueByDataKey = getValueByDataKey(entry, (_axisSettings$dataKey = axisSettings.dataKey) !== null && _axisSettings$dataKey !== void 0 ? _axisSettings$dataKey : item.dataKey);
+        return {
+          value: valueByDataKey,
+          errorDomain: [] // polar charts do not have error bars
+        };
+      });
+    }).filter(Boolean);
+  }
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {
+    return data.map(item => ({
+      value: getValueByDataKey(item, axisSettings.dataKey),
+      errorDomain: []
+    }));
+  }
+  return data.map(entry => ({
+    value: entry,
+    errorDomain: []
+  }));
+});
+var unsupportedInPolarChart = () => undefined;
+var selectPolarNumericalDomain = createSelector([selectBaseAxis, selectDomainDefinition, unsupportedInPolarChart, selectAllPolarAppliedNumericalValues, unsupportedInPolarChart, selectChartLayout, pickAxisType], combineNumericalDomain);
+export var selectPolarAxisDomain = createSelector([selectBaseAxis, selectChartLayout, selectPolarDisplayedData, selectPolarAppliedValues, selectStackOffsetType, pickAxisType, selectPolarNumericalDomain], combineAxisDomain);
+export var selectPolarNiceTicks = createSelector([selectPolarAxisDomain, selectBaseAxis, selectRealScaleType], combineNiceTicks);
+export var selectPolarAxisDomainIncludingNiceTicks = createSelector([selectBaseAxis, selectPolarAxisDomain, selectPolarNiceTicks, pickAxisType], combineAxisDomainWithNiceTicks);
Index: node_modules/recharts/es6/state/selectors/radarSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/radarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/radarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,89 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { computeRadarPoints } from '../../polar/Radar';
+import { selectPolarAxisScale, selectPolarAxisTicks } from './polarScaleSelectors';
+import { selectAngleAxis, selectPolarViewBox, selectRadiusAxis } from './polarAxisSelectors';
+import { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { getBandSizeOfAxis, isCategoricalAxis } from '../../util/ChartUtils';
+import { selectUnfilteredPolarItems } from './polarSelectors';
+var selectRadiusAxisScale = (state, radiusAxisId) => selectPolarAxisScale(state, 'radiusAxis', radiusAxisId);
+var selectRadiusAxisForRadar = createSelector([selectRadiusAxisScale], scale => {
+  if (scale == null) {
+    return undefined;
+  }
+  return {
+    scale
+  };
+});
+export var selectRadiusAxisForBandSize = createSelector([selectRadiusAxis, selectRadiusAxisScale], (axisSettings, scale) => {
+  if (axisSettings == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axisSettings), {}, {
+    scale
+  });
+});
+var selectRadiusAxisTicks = (state, radiusAxisId, _angleAxisId, isPanorama) => {
+  return selectPolarAxisTicks(state, 'radiusAxis', radiusAxisId, isPanorama);
+};
+var selectAngleAxisForRadar = (state, _radiusAxisId, angleAxisId) => selectAngleAxis(state, angleAxisId);
+var selectPolarAxisScaleForRadar = (state, _radiusAxisId, angleAxisId) => selectPolarAxisScale(state, 'angleAxis', angleAxisId);
+export var selectAngleAxisForBandSize = createSelector([selectAngleAxisForRadar, selectPolarAxisScaleForRadar], (axisSettings, scale) => {
+  if (axisSettings == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axisSettings), {}, {
+    scale
+  });
+});
+var selectAngleAxisTicks = (state, _radiusAxisId, angleAxisId, isPanorama) => {
+  return selectPolarAxisTicks(state, 'angleAxis', angleAxisId, isPanorama);
+};
+export var selectAngleAxisWithScaleAndViewport = createSelector([selectAngleAxisForRadar, selectPolarAxisScaleForRadar, selectPolarViewBox], (axisOptions, scale, polarViewBox) => {
+  if (polarViewBox == null || scale == null) {
+    return undefined;
+  }
+  return {
+    scale,
+    type: axisOptions.type,
+    dataKey: axisOptions.dataKey,
+    cx: polarViewBox.cx,
+    cy: polarViewBox.cy
+  };
+});
+var pickDataKey = (_state, _radiusAxisId, _angleAxisId, _isPanorama, radarDataKey) => radarDataKey;
+var selectBandSizeOfAxis = createSelector([selectChartLayout, selectRadiusAxisForBandSize, selectRadiusAxisTicks, selectAngleAxisForBandSize, selectAngleAxisTicks], (layout, radiusAxis, radiusAxisTicks, angleAxis, angleAxisTicks) => {
+  if (isCategoricalAxis(layout, 'radiusAxis')) {
+    return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, false);
+  }
+  return getBandSizeOfAxis(angleAxis, angleAxisTicks, false);
+});
+var selectSynchronisedRadarDataKey = createSelector([selectUnfilteredPolarItems, pickDataKey], (graphicalItems, radarDataKey) => {
+  if (graphicalItems.some(pgis => pgis.type === 'radar' && radarDataKey === pgis.dataKey)) {
+    return radarDataKey;
+  }
+  return undefined;
+});
+export var selectRadarPoints = createSelector([selectRadiusAxisForRadar, selectAngleAxisWithScaleAndViewport, selectChartDataAndAlwaysIgnoreIndexes, selectSynchronisedRadarDataKey, selectBandSizeOfAxis], (radiusAxis, angleAxis, _ref, dataKey, bandSize) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (radiusAxis == null || angleAxis == null || chartData == null || bandSize == null || dataKey == null) {
+    return undefined;
+  }
+  var displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);
+  return computeRadarPoints({
+    radiusAxis,
+    angleAxis,
+    displayedData,
+    dataKey,
+    bandSize
+  });
+});
Index: node_modules/recharts/es6/state/selectors/radialBarSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/radialBarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/radialBarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,187 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import { computeRadialBarDataItems } from '../../polar/RadialBar';
+import { selectChartDataAndAlwaysIgnoreIndexes, selectChartDataWithIndexes } from './dataSelectors';
+import { selectPolarAxisScale, selectPolarAxisTicks, selectPolarGraphicalItemAxisTicks } from './polarScaleSelectors';
+import { combineStackGroups } from './axisSelectors';
+import { selectAngleAxis, selectPolarViewBox, selectRadiusAxis } from './polarAxisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { getBandSizeOfAxis, getBaseValueOfBar, isCategoricalAxis } from '../../util/ChartUtils';
+import { combineAllBarPositions, combineBarSizeList, combineStackedData } from './barSelectors';
+import { selectBarCategoryGap, selectBarGap, selectRootBarSize, selectRootMaxBarSize, selectStackOffsetType } from './rootPropsSelectors';
+import { selectPolarItemsSettings, selectUnfilteredPolarItems } from './polarSelectors';
+import { isNullish } from '../../util/DataUtils';
+import { combineDisplayedStackedData } from './combiners/combineDisplayedStackedData';
+import { selectTooltipAxis } from './selectTooltipAxis';
+import { isStacked } from '../types/StackedGraphicalItem';
+var selectRadiusAxisForRadialBar = (state, radiusAxisId) => selectRadiusAxis(state, radiusAxisId);
+var selectRadiusAxisScaleForRadar = (state, radiusAxisId) => selectPolarAxisScale(state, 'radiusAxis', radiusAxisId);
+export var selectRadiusAxisWithScale = createSelector([selectRadiusAxisForRadialBar, selectRadiusAxisScaleForRadar], (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+export var selectRadiusAxisTicks = (state, radiusAxisId, _angleAxisId, isPanorama) => {
+  return selectPolarGraphicalItemAxisTicks(state, 'radiusAxis', radiusAxisId, isPanorama);
+};
+var selectAngleAxisForRadialBar = (state, _radiusAxisId, angleAxisId) => selectAngleAxis(state, angleAxisId);
+var selectAngleAxisScaleForRadialBar = (state, _radiusAxisId, angleAxisId) => selectPolarAxisScale(state, 'angleAxis', angleAxisId);
+export var selectAngleAxisWithScale = createSelector([selectAngleAxisForRadialBar, selectAngleAxisScaleForRadialBar], (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+var selectAngleAxisTicks = (state, _radiusAxisId, angleAxisId, isPanorama) => {
+  return selectPolarAxisTicks(state, 'angleAxis', angleAxisId, isPanorama);
+};
+var pickRadialBarSettings = (_state, _radiusAxisId, _angleAxisId, radialBarSettings) => radialBarSettings;
+var selectSynchronisedRadialBarSettings = createSelector([selectUnfilteredPolarItems, pickRadialBarSettings], (graphicalItems, radialBarSettingsFromProps) => {
+  if (graphicalItems.some(pgis => pgis.type === 'radialBar' && radialBarSettingsFromProps.dataKey === pgis.dataKey && radialBarSettingsFromProps.stackId === pgis.stackId)) {
+    return radialBarSettingsFromProps;
+  }
+  return undefined;
+});
+export var selectBandSizeOfPolarAxis = createSelector([selectChartLayout, selectRadiusAxisWithScale, selectRadiusAxisTicks, selectAngleAxisWithScale, selectAngleAxisTicks], (layout, radiusAxis, radiusAxisTicks, angleAxis, angleAxisTicks) => {
+  if (isCategoricalAxis(layout, 'radiusAxis')) {
+    return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, false);
+  }
+  return getBandSizeOfAxis(angleAxis, angleAxisTicks, false);
+});
+export var selectBaseValue = createSelector([selectAngleAxisWithScale, selectRadiusAxisWithScale, selectChartLayout], (angleAxis, radiusAxis, layout) => {
+  var numericAxis = layout === 'radial' ? angleAxis : radiusAxis;
+  if (numericAxis == null || numericAxis.scale == null) {
+    return undefined;
+  }
+  return getBaseValueOfBar({
+    numericAxis
+  });
+});
+var pickCells = (_state, _radiusAxisId, _angleAxisId, _radialBarSettings, cells) => cells;
+var pickAngleAxisId = (_state, _radiusAxisId, angleAxisId, _radialBarSettings, _cells) => angleAxisId;
+var pickRadiusAxisId = (_state, radiusAxisId, _angleAxisId, _radialBarSettings, _cells) => radiusAxisId;
+export var pickMaxBarSize = (_state, _radiusAxisId, _angleAxisId, radialBarSettings, _cells) => radialBarSettings.maxBarSize;
+var selectAllVisibleRadialBars = createSelector([selectChartLayout, selectUnfilteredPolarItems, pickAngleAxisId, pickRadiusAxisId], (layout, allItems, angleAxisId, radiusAxisId) => {
+  return allItems.filter(i => {
+    if (layout === 'centric') {
+      return i.angleAxisId === angleAxisId;
+    }
+    return i.radiusAxisId === radiusAxisId;
+  }).filter(i => i.hide === false).filter(i => i.type === 'radialBar');
+});
+
+/**
+ * The generator never returned the totalSize which means that barSize in polar chart can not support percent values.
+ * We can add that if we want to I suppose.
+ * @returns undefined - but it should be a total size of numerical axis in polar chart
+ */
+var selectPolarBarAxisSize = () => undefined;
+export var selectPolarBarSizeList = createSelector([selectAllVisibleRadialBars, selectRootBarSize, selectPolarBarAxisSize], combineBarSizeList);
+export var selectPolarBarBandSize = createSelector([selectChartLayout, selectRootMaxBarSize, selectAngleAxisWithScale, selectAngleAxisTicks, selectRadiusAxisWithScale, selectRadiusAxisTicks, pickMaxBarSize], (layout, globalMaxBarSize, angleAxis, angleAxisTicks, radiusAxis, radiusAxisTicks, childMaxBarSize) => {
+  var _ref2, _getBandSizeOfAxis2;
+  var maxBarSize = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;
+  if (layout === 'centric') {
+    var _ref, _getBandSizeOfAxis;
+    return (_ref = (_getBandSizeOfAxis = getBandSizeOfAxis(angleAxis, angleAxisTicks, true)) !== null && _getBandSizeOfAxis !== void 0 ? _getBandSizeOfAxis : maxBarSize) !== null && _ref !== void 0 ? _ref : 0;
+  }
+  return (_ref2 = (_getBandSizeOfAxis2 = getBandSizeOfAxis(radiusAxis, radiusAxisTicks, true)) !== null && _getBandSizeOfAxis2 !== void 0 ? _getBandSizeOfAxis2 : maxBarSize) !== null && _ref2 !== void 0 ? _ref2 : 0;
+});
+export var selectAllPolarBarPositions = createSelector([selectPolarBarSizeList, selectRootMaxBarSize, selectBarGap, selectBarCategoryGap, selectPolarBarBandSize, selectBandSizeOfPolarAxis, pickMaxBarSize], combineAllBarPositions);
+export var selectPolarBarPosition = createSelector([selectAllPolarBarPositions, selectSynchronisedRadialBarSettings], (allBarPositions, barSettings) => {
+  if (allBarPositions == null || barSettings == null) {
+    return undefined;
+  }
+  var position = allBarPositions.find(p => p.stackId === barSettings.stackId && barSettings.dataKey != null && p.dataKeys.includes(barSettings.dataKey));
+  if (position == null) {
+    return undefined;
+  }
+  return position.position;
+});
+var selectStackedRadialBars = createSelector([selectPolarItemsSettings], allPolarItems => allPolarItems.filter(item => item.type === 'radialBar').filter(isStacked));
+var selectPolarCombinedStackedData = createSelector([selectStackedRadialBars, selectChartDataAndAlwaysIgnoreIndexes, selectTooltipAxis], combineDisplayedStackedData);
+var selectStackGroups = createSelector([selectPolarCombinedStackedData, selectStackedRadialBars, selectStackOffsetType], combineStackGroups);
+var selectRadialBarStackGroups = (state, radiusAxisId, angleAxisId) => {
+  var layout = selectChartLayout(state);
+  if (layout === 'centric') {
+    return selectStackGroups(state, 'radiusAxis', radiusAxisId);
+  }
+  return selectStackGroups(state, 'angleAxis', angleAxisId);
+};
+var selectPolarStackedData = createSelector([selectRadialBarStackGroups, selectSynchronisedRadialBarSettings], combineStackedData);
+export var selectRadialBarSectors = createSelector([selectAngleAxisWithScale, selectAngleAxisTicks, selectRadiusAxisWithScale, selectRadiusAxisTicks, selectChartDataWithIndexes, selectSynchronisedRadialBarSettings, selectBandSizeOfPolarAxis, selectChartLayout, selectBaseValue, selectPolarViewBox, pickCells, selectPolarBarPosition, selectPolarStackedData], (angleAxis, angleAxisTicks, radiusAxis, radiusAxisTicks, _ref3, radialBarSettings, bandSize, layout, baseValue, polarViewBox, cells, pos, stackedData) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref3;
+  if (radialBarSettings == null || radiusAxis == null || angleAxis == null || chartData == null || bandSize == null || pos == null || layout !== 'centric' && layout !== 'radial' || radiusAxisTicks == null) {
+    return [];
+  }
+  var {
+    dataKey,
+    minPointSize
+  } = radialBarSettings;
+  var {
+    cx,
+    cy,
+    startAngle,
+    endAngle
+  } = polarViewBox;
+  var displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);
+  var numericAxis = layout === 'centric' ? radiusAxis : angleAxis;
+  var stackedDomain = stackedData ? numericAxis.scale.domain() : null;
+  return computeRadialBarDataItems({
+    angleAxis,
+    angleAxisTicks,
+    bandSize,
+    baseValue,
+    cells,
+    cx,
+    cy,
+    dataKey,
+    dataStartIndex,
+    displayedData,
+    endAngle,
+    layout,
+    minPointSize,
+    pos,
+    radiusAxis,
+    radiusAxisTicks,
+    stackedData,
+    stackedDomain,
+    startAngle
+  });
+});
+export var selectRadialBarLegendPayload = createSelector([selectChartDataAndAlwaysIgnoreIndexes, (_s, l) => l], (_ref4, legendType) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref4;
+  if (chartData == null) {
+    return [];
+  }
+  var displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);
+  if (displayedData.length === 0) {
+    return [];
+  }
+  return displayedData.map(entry => {
+    return {
+      type: legendType,
+      // @ts-expect-error we need a better typing for our data inputs
+      value: entry.name,
+      // @ts-expect-error we need a better typing for our data inputs
+      color: entry.fill,
+      payload: entry
+    };
+  });
+});
Index: node_modules/recharts/es6/state/selectors/rootPropsSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/rootPropsSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/rootPropsSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export var selectRootMaxBarSize = state => state.rootProps.maxBarSize;
+export var selectBarGap = state => state.rootProps.barGap;
+export var selectBarCategoryGap = state => state.rootProps.barCategoryGap;
+export var selectRootBarSize = state => state.rootProps.barSize;
+export var selectStackOffsetType = state => state.rootProps.stackOffset;
+export var selectChartName = state => state.options.chartName;
+export var selectSyncId = state => state.rootProps.syncId;
+export var selectSyncMethod = state => state.rootProps.syncMethod;
+export var selectEventEmitter = state => state.options.eventEmitter;
Index: node_modules/recharts/es6/state/selectors/scatterSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/scatterSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/scatterSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+import { createSelector } from 'reselect';
+import { computeScatterPoints } from '../../cartesian/Scatter';
+import { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';
+import { selectAxisWithScale, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems, selectZAxisWithScale } from './axisSelectors';
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, _zAxisId, _id, _cells, isPanorama) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, _zAxisId, _id, _cells, isPanorama) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, _zAxisId, _id, _cells, isPanorama) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, _zAxisId, _id, _cells, isPanorama) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);
+var selectZAxis = (state, _xAxisId, _yAxisId, zAxisId) => selectZAxisWithScale(state, 'zAxis', zAxisId, false);
+var pickScatterId = (_state, _xAxisId, _yAxisId, _zAxisId, id) => id;
+var pickCells = (_state, _xAxisId, _yAxisId, _zAxisId, _id, cells) => cells;
+var scatterChartDataSelector = (state, xAxisId, yAxisId, _zAxisId, _id, _cells, isPanorama) => selectChartDataWithIndexesIfNotInPanorama(state, xAxisId, yAxisId, isPanorama);
+var selectSynchronisedScatterSettings = createSelector([selectUnfilteredCartesianItems, pickScatterId], (graphicalItems, id) => {
+  return graphicalItems.filter(item => item.type === 'scatter').find(item => item.id === id);
+});
+export var selectScatterPoints = createSelector([scatterChartDataSelector, selectXAxisWithScale, selectXAxisTicks, selectYAxisWithScale, selectYAxisTicks, selectZAxis, selectSynchronisedScatterSettings, pickCells], (_ref, xAxis, xAxisTicks, yAxis, yAxisTicks, zAxis, scatterSettings, cells) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (scatterSettings == null) {
+    return undefined;
+  }
+  var displayedData;
+  if ((scatterSettings === null || scatterSettings === void 0 ? void 0 : scatterSettings.data) != null && scatterSettings.data.length > 0) {
+    displayedData = scatterSettings.data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || (xAxisTicks === null || xAxisTicks === void 0 ? void 0 : xAxisTicks.length) === 0 || (yAxisTicks === null || yAxisTicks === void 0 ? void 0 : yAxisTicks.length) === 0) {
+    return undefined;
+  }
+  return computeScatterPoints({
+    displayedData,
+    xAxis,
+    yAxis,
+    zAxis,
+    scatterSettings,
+    xAxisTicks,
+    yAxisTicks,
+    cells
+  });
+});
Index: node_modules/recharts/es6/state/selectors/selectActivePropsFromChartPointer.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectActivePropsFromChartPointer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectActivePropsFromChartPointer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { createSelector } from 'reselect';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectTooltipAxisRangeWithReverse, selectTooltipAxisTicks } from './tooltipSelectors';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { combineActiveProps, selectOrderedTooltipTicks } from './selectors';
+import { selectPolarViewBox } from './polarAxisSelectors';
+import { selectTooltipAxisType } from './selectTooltipAxisType';
+var pickChartPointer = (_state, chartPointer) => chartPointer;
+export var selectActivePropsFromChartPointer = createSelector([pickChartPointer, selectChartLayout, selectPolarViewBox, selectTooltipAxisType, selectTooltipAxisRangeWithReverse, selectTooltipAxisTicks, selectOrderedTooltipTicks, selectChartOffsetInternal], combineActiveProps);
Index: node_modules/recharts/es6/state/selectors/selectAllAxes.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectAllAxes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectAllAxes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { createSelector } from 'reselect';
+export var selectAllXAxes = createSelector(state => state.cartesianAxis.xAxis, xAxisMap => {
+  return Object.values(xAxisMap);
+});
+export var selectAllYAxes = createSelector(state => state.cartesianAxis.yAxis, yAxisMap => {
+  return Object.values(yAxisMap);
+});
Index: node_modules/recharts/es6/state/selectors/selectChartOffset.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectChartOffset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectChartOffset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { createSelector } from 'reselect';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+export var selectChartOffset = createSelector([selectChartOffsetInternal], offsetInternal => {
+  if (!offsetInternal) {
+    return undefined;
+  }
+  return {
+    top: offsetInternal.top,
+    bottom: offsetInternal.bottom,
+    left: offsetInternal.left,
+    right: offsetInternal.right
+  };
+});
Index: node_modules/recharts/es6/state/selectors/selectChartOffsetInternal.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectChartOffsetInternal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectChartOffsetInternal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,76 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { createSelector } from 'reselect';
+import get from 'es-toolkit/compat/get';
+import { selectLegendSettings, selectLegendSize } from './legendSelectors';
+import { appendOffsetOfLegend } from '../../util/ChartUtils';
+import { selectChartHeight, selectChartWidth, selectMargin } from './containerSelectors';
+import { selectAllXAxes, selectAllYAxes } from './selectAllAxes';
+import { DEFAULT_Y_AXIS_WIDTH } from '../../util/Constants';
+export var selectBrushHeight = state => state.brush.height;
+
+/**
+ * For internal use only.
+ *
+ * @param root state
+ * @return ChartOffsetInternal
+ */
+export var selectChartOffsetInternal = createSelector([selectChartWidth, selectChartHeight, selectMargin, selectBrushHeight, selectAllXAxes, selectAllYAxes, selectLegendSettings, selectLegendSize], (chartWidth, chartHeight, margin, brushHeight, xAxes, yAxes, legendSettings, legendSize) => {
+  var offsetH = yAxes.reduce((result, entry) => {
+    var {
+      orientation
+    } = entry;
+    if (!entry.mirror && !entry.hide) {
+      var width = typeof entry.width === 'number' ? entry.width : DEFAULT_Y_AXIS_WIDTH;
+      return _objectSpread(_objectSpread({}, result), {}, {
+        [orientation]: result[orientation] + width
+      });
+    }
+    return result;
+  }, {
+    left: margin.left || 0,
+    right: margin.right || 0
+  });
+  var offsetV = xAxes.reduce((result, entry) => {
+    var {
+      orientation
+    } = entry;
+    if (!entry.mirror && !entry.hide) {
+      return _objectSpread(_objectSpread({}, result), {}, {
+        [orientation]: get(result, "".concat(orientation)) + entry.height
+      });
+    }
+    return result;
+  }, {
+    top: margin.top || 0,
+    bottom: margin.bottom || 0
+  });
+  var offset = _objectSpread(_objectSpread({}, offsetV), offsetH);
+  var brushBottom = offset.bottom;
+  offset.bottom += brushHeight;
+  offset = appendOffsetOfLegend(offset, legendSettings, legendSize);
+  var offsetWidth = chartWidth - offset.left - offset.right;
+  var offsetHeight = chartHeight - offset.top - offset.bottom;
+  return _objectSpread(_objectSpread({
+    brushBottom
+  }, offset), {}, {
+    // never return negative values for height and width
+    width: Math.max(offsetWidth, 0),
+    height: Math.max(offsetHeight, 0)
+  });
+});
+export var selectChartViewBox = createSelector(selectChartOffsetInternal, offset => ({
+  x: offset.left,
+  y: offset.top,
+  width: offset.width,
+  height: offset.height
+}));
+export var selectAxisViewBox = createSelector(selectChartWidth, selectChartHeight, (width, height) => ({
+  x: 0,
+  y: 0,
+  width,
+  height
+}));
Index: node_modules/recharts/es6/state/selectors/selectPlotArea.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectPlotArea.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectPlotArea.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { createSelector } from 'reselect';
+import { selectChartOffset } from './selectChartOffset';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+export var selectPlotArea = createSelector([selectChartOffset, selectChartWidth, selectChartHeight], (offset, chartWidth, chartHeight) => {
+  if (!offset || chartWidth == null || chartHeight == null) {
+    return undefined;
+  }
+  return {
+    x: offset.left,
+    y: offset.top,
+    width: Math.max(0, chartWidth - offset.left - offset.right),
+    height: Math.max(0, chartHeight - offset.top - offset.bottom)
+  };
+});
Index: node_modules/recharts/es6/state/selectors/selectTooltipAxis.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectTooltipAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { selectAxisSettings } from './axisSelectors';
+import { selectTooltipAxisType } from './selectTooltipAxisType';
+import { selectTooltipAxisId } from './selectTooltipAxisId';
+export var selectTooltipAxis = state => {
+  var axisType = selectTooltipAxisType(state);
+  var axisId = selectTooltipAxisId(state);
+  return selectAxisSettings(state, axisType, axisId);
+};
Index: node_modules/recharts/es6/state/selectors/selectTooltipAxisId.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipAxisId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectTooltipAxisId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export var selectTooltipAxisId = state => state.tooltip.settings.axisId;
Index: node_modules/recharts/es6/state/selectors/selectTooltipAxisType.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipAxisType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectTooltipAxisType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import { selectChartLayout } from '../../context/chartLayoutContext';
+export var selectTooltipAxisType = state => {
+  var layout = selectChartLayout(state);
+  if (layout === 'horizontal') {
+    return 'xAxis';
+  }
+  if (layout === 'vertical') {
+    return 'yAxis';
+  }
+  if (layout === 'centric') {
+    return 'angleAxis';
+  }
+  return 'radiusAxis';
+};
Index: node_modules/recharts/es6/state/selectors/selectTooltipEventType.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipEventType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectTooltipEventType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { useAppSelector } from '../hooks';
+export var selectDefaultTooltipEventType = state => state.options.defaultTooltipEventType;
+export var selectValidateTooltipEventTypes = state => state.options.validateTooltipEventTypes;
+export function combineTooltipEventType(shared, defaultTooltipEventType, validateTooltipEventTypes) {
+  if (shared == null) {
+    return defaultTooltipEventType;
+  }
+  var eventType = shared ? 'axis' : 'item';
+  if (validateTooltipEventTypes == null) {
+    return defaultTooltipEventType;
+  }
+  return validateTooltipEventTypes.includes(eventType) ? eventType : defaultTooltipEventType;
+}
+export function selectTooltipEventType(state, shared) {
+  var defaultTooltipEventType = selectDefaultTooltipEventType(state);
+  var validateTooltipEventTypes = selectValidateTooltipEventTypes(state);
+  return combineTooltipEventType(shared, defaultTooltipEventType, validateTooltipEventTypes);
+}
+export function useTooltipEventType(shared) {
+  return useAppSelector(state => selectTooltipEventType(state, shared));
+}
Index: node_modules/recharts/es6/state/selectors/selectTooltipPayloadSearcher.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipPayloadSearcher.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectTooltipPayloadSearcher.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export var selectTooltipPayloadSearcher = state => state.options.tooltipPayloadSearcher;
Index: node_modules/recharts/es6/state/selectors/selectTooltipSettings.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectTooltipSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export var selectTooltipSettings = state => state.tooltip.settings;
Index: node_modules/recharts/es6/state/selectors/selectTooltipState.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectTooltipState.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectTooltipState.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export var selectTooltipState = state => state.tooltip;
Index: node_modules/recharts/es6/state/selectors/selectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/selectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/selectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+import { createSelector } from 'reselect';
+import sortBy from 'es-toolkit/compat/sortBy';
+import { useAppSelector } from '../hooks';
+import { calculateActiveTickIndex, calculateTooltipPos, getActiveCoordinate, inRange } from '../../util/ChartUtils';
+import { selectChartDataWithIndexes } from './dataSelectors';
+import { selectTooltipAxisTicks, selectTooltipDisplayedData } from './tooltipSelectors';
+import { selectChartName } from './rootPropsSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+import { combineActiveLabel } from './combiners/combineActiveLabel';
+import { combineTooltipInteractionState } from './combiners/combineTooltipInteractionState';
+import { combineActiveTooltipIndex } from './combiners/combineActiveTooltipIndex';
+import { combineCoordinateForDefaultIndex } from './combiners/combineCoordinateForDefaultIndex';
+import { combineTooltipPayloadConfigurations } from './combiners/combineTooltipPayloadConfigurations';
+import { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';
+import { selectTooltipState } from './selectTooltipState';
+import { combineTooltipPayload } from './combiners/combineTooltipPayload';
+import { selectTooltipAxis } from './selectTooltipAxis';
+export var useChartName = () => {
+  return useAppSelector(selectChartName);
+};
+var pickTooltipEventType = (_state, tooltipEventType) => tooltipEventType;
+var pickTrigger = (_state, _tooltipEventType, trigger) => trigger;
+var pickDefaultIndex = (_state, _tooltipEventType, _trigger, defaultIndex) => defaultIndex;
+export var selectOrderedTooltipTicks = createSelector(selectTooltipAxisTicks, ticks => sortBy(ticks, o => o.coordinate));
+export var selectTooltipInteractionState = createSelector([selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex], combineTooltipInteractionState);
+export var selectActiveIndex = createSelector([selectTooltipInteractionState, selectTooltipDisplayedData], combineActiveTooltipIndex);
+export var selectTooltipDataKey = (state, tooltipEventType, trigger) => {
+  if (tooltipEventType == null) {
+    return undefined;
+  }
+  var tooltipState = selectTooltipState(state);
+  if (tooltipEventType === 'axis') {
+    if (trigger === 'hover') {
+      return tooltipState.axisInteraction.hover.dataKey;
+    }
+    return tooltipState.axisInteraction.click.dataKey;
+  }
+  if (trigger === 'hover') {
+    return tooltipState.itemInteraction.hover.dataKey;
+  }
+  return tooltipState.itemInteraction.click.dataKey;
+};
+export var selectTooltipPayloadConfigurations = createSelector([selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex], combineTooltipPayloadConfigurations);
+export var selectCoordinateForDefaultIndex = createSelector([selectChartWidth, selectChartHeight, selectChartLayout, selectChartOffsetInternal, selectTooltipAxisTicks, pickDefaultIndex, selectTooltipPayloadConfigurations, selectTooltipPayloadSearcher], combineCoordinateForDefaultIndex);
+export var selectActiveCoordinate = createSelector([selectTooltipInteractionState, selectCoordinateForDefaultIndex], (tooltipInteractionState, defaultIndexCoordinate) => {
+  var _tooltipInteractionSt;
+  return (_tooltipInteractionSt = tooltipInteractionState.coordinate) !== null && _tooltipInteractionSt !== void 0 ? _tooltipInteractionSt : defaultIndexCoordinate;
+});
+export var selectActiveLabel = createSelector(selectTooltipAxisTicks, selectActiveIndex, combineActiveLabel);
+export var selectTooltipPayload = createSelector([selectTooltipPayloadConfigurations, selectActiveIndex, selectChartDataWithIndexes, selectTooltipAxis, selectActiveLabel, selectTooltipPayloadSearcher, pickTooltipEventType], combineTooltipPayload);
+export var selectIsTooltipActive = createSelector([selectTooltipInteractionState], tooltipInteractionState => {
+  return {
+    isActive: tooltipInteractionState.active,
+    activeIndex: tooltipInteractionState.index
+  };
+});
+export var combineActiveProps = (chartEvent, layout, polarViewBox, tooltipAxisType, tooltipAxisRange, tooltipTicks, orderedTooltipTicks, offset) => {
+  if (!chartEvent || !layout || !tooltipAxisType || !tooltipAxisRange || !tooltipTicks) {
+    return undefined;
+  }
+  var rangeObj = inRange(chartEvent.chartX, chartEvent.chartY, layout, polarViewBox, offset);
+  if (!rangeObj) {
+    return undefined;
+  }
+  var pos = calculateTooltipPos(rangeObj, layout);
+  var activeIndex = calculateActiveTickIndex(pos, orderedTooltipTicks, tooltipTicks, tooltipAxisType, tooltipAxisRange);
+  var activeCoordinate = getActiveCoordinate(layout, tooltipTicks, activeIndex, rangeObj);
+  return {
+    activeIndex: String(activeIndex),
+    activeCoordinate
+  };
+};
Index: node_modules/recharts/es6/state/selectors/tooltipSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/tooltipSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/tooltipSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,131 @@
+import { createSelector } from 'reselect';
+import { combineAppliedNumericalValuesIncludingErrorValues, combineAppliedValues, combineAreasDomain, combineAxisDomain, combineAxisDomainWithNiceTicks, combineCategoricalDomain, combineDisplayedData, combineDomainOfStackGroups, combineDotsDomain, combineDuplicateDomain, combineGraphicalItemsData, combineGraphicalItemsSettings, combineLinesDomain, combineNiceTicks, combineNumericalDomain, combineRealScaleType, combineScaleFunction, combineStackGroups, filterGraphicalNotStackedItems, filterReferenceElements, getDomainDefinition, itemAxisPredicate, mergeDomains, selectAllErrorBarSettings, selectAxisRange, selectHasBar, selectReferenceAreas, selectReferenceDots, selectReferenceLines } from './axisSelectors';
+import { selectChartLayout } from '../../context/chartLayoutContext';
+import { isCategoricalAxis } from '../../util/ChartUtils';
+import { selectChartDataWithIndexes } from './dataSelectors';
+import { selectChartName, selectStackOffsetType } from './rootPropsSelectors';
+import { mathSign } from '../../util/DataUtils';
+import { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';
+import { combineTooltipEventType, selectDefaultTooltipEventType, selectValidateTooltipEventTypes } from './selectTooltipEventType';
+import { combineActiveLabel } from './combiners/combineActiveLabel';
+import { selectTooltipSettings } from './selectTooltipSettings';
+import { combineTooltipInteractionState } from './combiners/combineTooltipInteractionState';
+import { combineActiveTooltipIndex } from './combiners/combineActiveTooltipIndex';
+import { combineCoordinateForDefaultIndex } from './combiners/combineCoordinateForDefaultIndex';
+import { selectChartHeight, selectChartWidth } from './containerSelectors';
+import { selectChartOffsetInternal } from './selectChartOffsetInternal';
+import { combineTooltipPayloadConfigurations } from './combiners/combineTooltipPayloadConfigurations';
+import { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';
+import { selectTooltipState } from './selectTooltipState';
+import { combineTooltipPayload } from './combiners/combineTooltipPayload';
+import { selectTooltipAxisId } from './selectTooltipAxisId';
+import { selectTooltipAxisType } from './selectTooltipAxisType';
+import { selectTooltipAxis } from './selectTooltipAxis';
+import { combineDisplayedStackedData } from './combiners/combineDisplayedStackedData';
+import { isStacked } from '../types/StackedGraphicalItem';
+export var selectTooltipAxisRealScaleType = createSelector([selectTooltipAxis, selectChartLayout, selectHasBar, selectChartName, selectTooltipAxisType], combineRealScaleType);
+export var selectAllUnfilteredGraphicalItems = createSelector([state => state.graphicalItems.cartesianItems, state => state.graphicalItems.polarItems], (cartesianItems, polarItems) => [...cartesianItems, ...polarItems]);
+var selectTooltipAxisPredicate = createSelector([selectTooltipAxisType, selectTooltipAxisId], itemAxisPredicate);
+export var selectAllGraphicalItemsSettings = createSelector([selectAllUnfilteredGraphicalItems, selectTooltipAxis, selectTooltipAxisPredicate], combineGraphicalItemsSettings);
+var selectAllStackedGraphicalItemsSettings = createSelector([selectAllGraphicalItemsSettings], graphicalItems => graphicalItems.filter(isStacked));
+export var selectTooltipGraphicalItemsData = createSelector([selectAllGraphicalItemsSettings], combineGraphicalItemsData);
+
+/**
+ * Data for tooltip always use the data with indexes set by a Brush,
+ * and never accept the isPanorama flag:
+ * because Tooltip never displays inside the panorama anyway
+ * so we don't need to worry what would happen there.
+ */
+export var selectTooltipDisplayedData = createSelector([selectTooltipGraphicalItemsData, selectChartDataWithIndexes], combineDisplayedData);
+var selectTooltipStackedData = createSelector([selectAllStackedGraphicalItemsSettings, selectChartDataWithIndexes, selectTooltipAxis], combineDisplayedStackedData);
+var selectAllTooltipAppliedValues = createSelector([selectTooltipDisplayedData, selectTooltipAxis, selectAllGraphicalItemsSettings], combineAppliedValues);
+var selectTooltipAxisDomainDefinition = createSelector([selectTooltipAxis], getDomainDefinition);
+var selectAllStackedGraphicalItems = createSelector([selectAllGraphicalItemsSettings], graphicalItems => graphicalItems.filter(isStacked));
+var selectTooltipStackGroups = createSelector([selectTooltipStackedData, selectAllStackedGraphicalItems, selectStackOffsetType], combineStackGroups);
+var selectTooltipDomainOfStackGroups = createSelector([selectTooltipStackGroups, selectChartDataWithIndexes, selectTooltipAxisType], combineDomainOfStackGroups);
+var selectTooltipItemsSettingsExceptStacked = createSelector([selectAllGraphicalItemsSettings], filterGraphicalNotStackedItems);
+var selectTooltipAllAppliedNumericalValuesIncludingErrorValues = createSelector([selectTooltipDisplayedData, selectTooltipAxis, selectTooltipItemsSettingsExceptStacked, selectAllErrorBarSettings, selectTooltipAxisType], combineAppliedNumericalValuesIncludingErrorValues);
+var selectReferenceDotsByTooltipAxis = createSelector([selectReferenceDots, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);
+var selectTooltipReferenceDotsDomain = createSelector([selectReferenceDotsByTooltipAxis, selectTooltipAxisType], combineDotsDomain);
+var selectReferenceAreasByTooltipAxis = createSelector([selectReferenceAreas, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);
+var selectTooltipReferenceAreasDomain = createSelector([selectReferenceAreasByTooltipAxis, selectTooltipAxisType], combineAreasDomain);
+var selectReferenceLinesByTooltipAxis = createSelector([selectReferenceLines, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);
+var selectTooltipReferenceLinesDomain = createSelector([selectReferenceLinesByTooltipAxis, selectTooltipAxisType], combineLinesDomain);
+var selectTooltipReferenceElementsDomain = createSelector([selectTooltipReferenceDotsDomain, selectTooltipReferenceLinesDomain, selectTooltipReferenceAreasDomain], mergeDomains);
+var selectTooltipNumericalDomain = createSelector([selectTooltipAxis, selectTooltipAxisDomainDefinition, selectTooltipDomainOfStackGroups, selectTooltipAllAppliedNumericalValuesIncludingErrorValues, selectTooltipReferenceElementsDomain, selectChartLayout, selectTooltipAxisType], combineNumericalDomain);
+export var selectTooltipAxisDomain = createSelector([selectTooltipAxis, selectChartLayout, selectTooltipDisplayedData, selectAllTooltipAppliedValues, selectStackOffsetType, selectTooltipAxisType, selectTooltipNumericalDomain], combineAxisDomain);
+var selectTooltipNiceTicks = createSelector([selectTooltipAxisDomain, selectTooltipAxis, selectTooltipAxisRealScaleType], combineNiceTicks);
+export var selectTooltipAxisDomainIncludingNiceTicks = createSelector([selectTooltipAxis, selectTooltipAxisDomain, selectTooltipNiceTicks, selectTooltipAxisType], combineAxisDomainWithNiceTicks);
+var selectTooltipAxisRange = state => {
+  var axisType = selectTooltipAxisType(state);
+  var axisId = selectTooltipAxisId(state);
+  var isPanorama = false; // Tooltip never displays in panorama so this is safe to assume
+  return selectAxisRange(state, axisType, axisId, isPanorama);
+};
+export var selectTooltipAxisRangeWithReverse = createSelector([selectTooltipAxis, selectTooltipAxisRange], combineAxisRangeWithReverse);
+export var selectTooltipAxisScale = createSelector([selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisDomainIncludingNiceTicks, selectTooltipAxisRangeWithReverse], combineScaleFunction);
+var selectTooltipDuplicateDomain = createSelector([selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType], combineDuplicateDomain);
+export var selectTooltipCategoricalDomain = createSelector([selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType], combineCategoricalDomain);
+var combineTicksOfTooltipAxis = (layout, axis, realScaleType, scale, range, duplicateDomain, categoricalDomain, axisType) => {
+  if (!axis) {
+    return undefined;
+  }
+  var {
+    type
+  } = axis;
+  var isCategorical = isCategoricalAxis(layout, axisType);
+  if (!scale) {
+    return undefined;
+  }
+  var offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;
+  var offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
+  offset = axisType === 'angleAxis' && range != null && (range === null || range === void 0 ? void 0 : range.length) >= 2 ? mathSign(range[0] - range[1]) * 2 * offset : offset;
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      index,
+      offset
+    }));
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => ({
+    coordinate: scale(entry) + offset,
+    value: duplicateDomain ? duplicateDomain[entry] : entry,
+    index,
+    offset
+  }));
+};
+export var selectTooltipAxisTicks = createSelector([selectChartLayout, selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisScale, selectTooltipAxisRange, selectTooltipDuplicateDomain, selectTooltipCategoricalDomain, selectTooltipAxisType], combineTicksOfTooltipAxis);
+var selectTooltipEventType = createSelector([selectDefaultTooltipEventType, selectValidateTooltipEventTypes, selectTooltipSettings], (defaultTooltipEventType, validateTooltipEventType, settings) => combineTooltipEventType(settings.shared, defaultTooltipEventType, validateTooltipEventType));
+var selectTooltipTrigger = state => state.tooltip.settings.trigger;
+var selectDefaultIndex = state => state.tooltip.settings.defaultIndex;
+var selectTooltipInteractionState = createSelector([selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], combineTooltipInteractionState);
+export var selectActiveTooltipIndex = createSelector([selectTooltipInteractionState, selectTooltipDisplayedData], combineActiveTooltipIndex);
+export var selectActiveLabel = createSelector([selectTooltipAxisTicks, selectActiveTooltipIndex], combineActiveLabel);
+export var selectActiveTooltipDataKey = createSelector([selectTooltipInteractionState], tooltipInteraction => {
+  if (!tooltipInteraction) {
+    return undefined;
+  }
+  return tooltipInteraction.dataKey;
+});
+var selectTooltipPayloadConfigurations = createSelector([selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], combineTooltipPayloadConfigurations);
+var selectTooltipCoordinateForDefaultIndex = createSelector([selectChartWidth, selectChartHeight, selectChartLayout, selectChartOffsetInternal, selectTooltipAxisTicks, selectDefaultIndex, selectTooltipPayloadConfigurations, selectTooltipPayloadSearcher], combineCoordinateForDefaultIndex);
+export var selectActiveTooltipCoordinate = createSelector([selectTooltipInteractionState, selectTooltipCoordinateForDefaultIndex], (tooltipInteractionState, defaultIndexCoordinate) => {
+  if (tooltipInteractionState !== null && tooltipInteractionState !== void 0 && tooltipInteractionState.coordinate) {
+    return tooltipInteractionState.coordinate;
+  }
+  return defaultIndexCoordinate;
+});
+export var selectIsTooltipActive = createSelector([selectTooltipInteractionState], tooltipInteractionState => tooltipInteractionState.active);
+export var selectActiveTooltipPayload = createSelector([selectTooltipPayloadConfigurations, selectActiveTooltipIndex, selectChartDataWithIndexes, selectTooltipAxis, selectActiveLabel, selectTooltipPayloadSearcher, selectTooltipEventType], combineTooltipPayload);
+export var selectActiveTooltipDataPoints = createSelector([selectActiveTooltipPayload], payload => {
+  if (payload == null) {
+    return undefined;
+  }
+  var dataPoints = payload.map(p => p.payload).filter(p => p != null);
+  return Array.from(new Set(dataPoints));
+});
Index: node_modules/recharts/es6/state/selectors/touchSelectors.js
===================================================================
--- node_modules/recharts/es6/state/selectors/touchSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/selectors/touchSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { createSelector } from 'reselect';
+import { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';
+import { selectTooltipState } from './selectTooltipState';
+var selectAllTooltipPayloadConfiguration = createSelector([selectTooltipState], tooltipState => tooltipState.tooltipItemPayloads);
+export var selectTooltipCoordinate = createSelector([selectAllTooltipPayloadConfiguration, selectTooltipPayloadSearcher, (_state, tooltipIndex, _dataKey) => tooltipIndex, (_state, _tooltipIndex, dataKey) => dataKey], (allTooltipConfigurations, tooltipPayloadSearcher, tooltipIndex, dataKey) => {
+  var mostRelevantTooltipConfiguration = allTooltipConfigurations.find(tooltipConfiguration => {
+    return tooltipConfiguration.settings.dataKey === dataKey;
+  });
+  if (mostRelevantTooltipConfiguration == null) {
+    return undefined;
+  }
+  var {
+    positions
+  } = mostRelevantTooltipConfiguration;
+  if (positions == null) {
+    return undefined;
+  }
+  // @ts-expect-error tooltipPayloadSearcher is not typed well
+  var maybePosition = tooltipPayloadSearcher(positions, tooltipIndex);
+  return maybePosition;
+});
Index: node_modules/recharts/es6/state/store.js
===================================================================
--- node_modules/recharts/es6/state/store.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/store.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+import { combineReducers, configureStore } from '@reduxjs/toolkit';
+import { optionsReducer } from './optionsSlice';
+import { tooltipReducer } from './tooltipSlice';
+import { chartDataReducer } from './chartDataSlice';
+import { chartLayoutReducer } from './layoutSlice';
+import { mouseClickMiddleware, mouseMoveMiddleware } from './mouseEventsMiddleware';
+import { reduxDevtoolsJsonStringifyReplacer } from './reduxDevtoolsJsonStringifyReplacer';
+import { cartesianAxisReducer } from './cartesianAxisSlice';
+import { graphicalItemsReducer } from './graphicalItemsSlice';
+import { referenceElementsReducer } from './referenceElementsSlice';
+import { brushReducer } from './brushSlice';
+import { legendReducer } from './legendSlice';
+import { rootPropsReducer } from './rootPropsSlice';
+import { polarAxisReducer } from './polarAxisSlice';
+import { polarOptionsReducer } from './polarOptionsSlice';
+import { keyboardEventsMiddleware } from './keyboardEventsMiddleware';
+import { externalEventsMiddleware } from './externalEventsMiddleware';
+import { touchEventMiddleware } from './touchEventsMiddleware';
+import { errorBarReducer } from './errorBarSlice';
+var rootReducer = combineReducers({
+  brush: brushReducer,
+  cartesianAxis: cartesianAxisReducer,
+  chartData: chartDataReducer,
+  errorBars: errorBarReducer,
+  graphicalItems: graphicalItemsReducer,
+  layout: chartLayoutReducer,
+  legend: legendReducer,
+  options: optionsReducer,
+  polarAxis: polarAxisReducer,
+  polarOptions: polarOptionsReducer,
+  referenceElements: referenceElementsReducer,
+  rootProps: rootPropsReducer,
+  tooltip: tooltipReducer
+});
+export var createRechartsStore = function createRechartsStore(preloadedState) {
+  var chartName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Chart';
+  return configureStore({
+    reducer: rootReducer,
+    // redux-toolkit v1 types are unhappy with the preloadedState type. Remove the `as any` when bumping to v2
+    preloadedState: preloadedState,
+    // @ts-expect-error redux-toolkit v1 types are unhappy with the middleware array. Remove this comment when bumping to v2
+    middleware: getDefaultMiddleware => getDefaultMiddleware({
+      serializableCheck: false
+    }).concat([mouseClickMiddleware.middleware, mouseMoveMiddleware.middleware, keyboardEventsMiddleware.middleware, externalEventsMiddleware.middleware, touchEventMiddleware.middleware]),
+    devTools: {
+      serialize: {
+        replacer: reduxDevtoolsJsonStringifyReplacer
+      },
+      name: "recharts-".concat(chartName)
+    }
+  });
+};
Index: node_modules/recharts/es6/state/tooltipSlice.js
===================================================================
--- node_modules/recharts/es6/state/tooltipSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/tooltipSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,184 @@
+import { createSlice, current } from '@reduxjs/toolkit';
+import { castDraft } from 'immer';
+
+/**
+ * One Tooltip can display multiple TooltipPayloadEntries at a time.
+ */
+
+/**
+ * So what happens is that the tooltip payload is decided based on the available data, and the dataKey.
+ * The dataKey can either be defined on the graphical element (like Line, or Bar)
+ * or on the tooltip itself.
+ *
+ * The data can be defined in the chart element, or in the graphical item.
+ *
+ * So this type is all the settings, other than the data + dataKey complications.
+ */
+
+/**
+ * This is what Tooltip renders.
+ */
+
+/**
+ * null means no active index
+ * string means: whichever index from the chart data it is.
+ * Different charts have different requirements on data shapes,
+ * and are also responsible for providing a function that will accept this index
+ * and return data.
+ */
+
+/**
+ * Different items have different data shapes so the state has no opinion on what the data shape should be;
+ * the only requirement is that the chart also provides a searcher function
+ * that accepts the data, and a key, and returns whatever the payload in Tooltip should be.
+ */
+
+/**
+ * So this informs the "tooltip event type". Tooltip event type can be either "axis" or "item"
+ * and it is used for two things:
+ * 1. Sets the active area
+ * 2. Sets the background and cursor highlights
+ *
+ * Some charts only allow to have one type of tooltip event type, some allow both.
+ * Those charts that allow both will have one default, and the "shared" prop will be used to switch between them.
+ * Undefined means "use the chart default".
+ *
+ * Charts that only allow one tooltip event type, will ignore the shared prop.
+ */
+
+/**
+ * A generic state for user interaction with the chart.
+ * User interaction can come through multiple channels: mouse events, keyboard events, or hardcoded in props, or synchronised from other charts.
+ *
+ * Each of the interaction states is represented as TooltipInteractionState,
+ * and then the selectors and Tooltip will decide which of the interaction states to use.
+ */
+
+export var noInteraction = {
+  active: false,
+  index: null,
+  dataKey: undefined,
+  coordinate: undefined
+};
+
+/**
+ * The tooltip interaction state stores:
+ *
+ * - Which graphical item is user interacting with at the moment,
+ * - which axis (or, which part of chart background) is user interacting with at the moment
+ * - The data that individual graphical items wish to be displayed in case the tooltip gets activated
+ */
+
+export var initialState = {
+  itemInteraction: {
+    click: noInteraction,
+    hover: noInteraction
+  },
+  axisInteraction: {
+    click: noInteraction,
+    hover: noInteraction
+  },
+  keyboardInteraction: noInteraction,
+  syncInteraction: {
+    active: false,
+    index: null,
+    dataKey: undefined,
+    label: undefined,
+    coordinate: undefined
+  },
+  tooltipItemPayloads: [],
+  settings: {
+    shared: undefined,
+    trigger: 'hover',
+    axisId: 0,
+    active: false,
+    defaultIndex: undefined
+  }
+};
+var tooltipSlice = createSlice({
+  name: 'tooltip',
+  initialState,
+  reducers: {
+    addTooltipEntrySettings(state, action) {
+      state.tooltipItemPayloads.push(castDraft(action.payload));
+    },
+    removeTooltipEntrySettings(state, action) {
+      var index = current(state).tooltipItemPayloads.indexOf(castDraft(action.payload));
+      if (index > -1) {
+        state.tooltipItemPayloads.splice(index, 1);
+      }
+    },
+    setTooltipSettingsState(state, action) {
+      state.settings = action.payload;
+    },
+    setActiveMouseOverItemIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.keyboardInteraction.active = false;
+      state.itemInteraction.hover.active = true;
+      state.itemInteraction.hover.index = action.payload.activeIndex;
+      state.itemInteraction.hover.dataKey = action.payload.activeDataKey;
+      state.itemInteraction.hover.coordinate = action.payload.activeCoordinate;
+    },
+    mouseLeaveChart(state) {
+      /*
+       * Clear only the active flags. Why?
+       * 1. Keep Coordinate to preserve animation - next time the Tooltip appears, we want to render it from
+       * the last place where it was when it disappeared.
+       * 2. We want to keep all the properties anyway just in case the tooltip has `active=true` prop
+       * and continues being visible even after the mouse has left the chart.
+       */
+      state.itemInteraction.hover.active = false;
+      state.axisInteraction.hover.active = false;
+    },
+    mouseLeaveItem(state) {
+      state.itemInteraction.hover.active = false;
+    },
+    setActiveClickItemIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.itemInteraction.click.active = true;
+      state.keyboardInteraction.active = false;
+      state.itemInteraction.click.index = action.payload.activeIndex;
+      state.itemInteraction.click.dataKey = action.payload.activeDataKey;
+      state.itemInteraction.click.coordinate = action.payload.activeCoordinate;
+    },
+    setMouseOverAxisIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.axisInteraction.hover.active = true;
+      state.keyboardInteraction.active = false;
+      state.axisInteraction.hover.index = action.payload.activeIndex;
+      state.axisInteraction.hover.dataKey = action.payload.activeDataKey;
+      state.axisInteraction.hover.coordinate = action.payload.activeCoordinate;
+    },
+    setMouseClickAxisIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.keyboardInteraction.active = false;
+      state.axisInteraction.click.active = true;
+      state.axisInteraction.click.index = action.payload.activeIndex;
+      state.axisInteraction.click.dataKey = action.payload.activeDataKey;
+      state.axisInteraction.click.coordinate = action.payload.activeCoordinate;
+    },
+    setSyncInteraction(state, action) {
+      state.syncInteraction = action.payload;
+    },
+    setKeyboardInteraction(state, action) {
+      state.keyboardInteraction.active = action.payload.active;
+      state.keyboardInteraction.index = action.payload.activeIndex;
+      state.keyboardInteraction.coordinate = action.payload.activeCoordinate;
+      state.keyboardInteraction.dataKey = action.payload.activeDataKey;
+    }
+  }
+});
+export var {
+  addTooltipEntrySettings,
+  removeTooltipEntrySettings,
+  setTooltipSettingsState,
+  setActiveMouseOverItemIndex,
+  mouseLeaveItem,
+  mouseLeaveChart,
+  setActiveClickItemIndex,
+  setMouseOverAxisIndex,
+  setMouseClickAxisIndex,
+  setSyncInteraction,
+  setKeyboardInteraction
+} = tooltipSlice.actions;
+export var tooltipReducer = tooltipSlice.reducer;
Index: node_modules/recharts/es6/state/touchEventsMiddleware.js
===================================================================
--- node_modules/recharts/es6/state/touchEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/touchEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+import { createAction, createListenerMiddleware } from '@reduxjs/toolkit';
+import { setActiveMouseOverItemIndex, setMouseOverAxisIndex } from './tooltipSlice';
+import { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';
+import { getChartPointer } from '../util/getChartPointer';
+import { selectTooltipEventType } from './selectors/selectTooltipEventType';
+import { DATA_ITEM_DATAKEY_ATTRIBUTE_NAME, DATA_ITEM_INDEX_ATTRIBUTE_NAME } from '../util/Constants';
+import { selectTooltipCoordinate } from './selectors/touchSelectors';
+export var touchEventAction = createAction('touchMove');
+export var touchEventMiddleware = createListenerMiddleware();
+touchEventMiddleware.startListening({
+  actionCreator: touchEventAction,
+  effect: (action, listenerApi) => {
+    var touchEvent = action.payload;
+    var state = listenerApi.getState();
+    var tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);
+    if (tooltipEventType === 'axis') {
+      var activeProps = selectActivePropsFromChartPointer(state, getChartPointer({
+        clientX: touchEvent.touches[0].clientX,
+        clientY: touchEvent.touches[0].clientY,
+        currentTarget: touchEvent.currentTarget
+      }));
+      if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {
+        listenerApi.dispatch(setMouseOverAxisIndex({
+          activeIndex: activeProps.activeIndex,
+          activeDataKey: undefined,
+          activeCoordinate: activeProps.activeCoordinate
+        }));
+      }
+    } else if (tooltipEventType === 'item') {
+      var _target$getAttribute;
+      var touch = touchEvent.touches[0];
+      var target = document.elementFromPoint(touch.clientX, touch.clientY);
+      if (!target || !target.getAttribute) {
+        return;
+      }
+      var itemIndex = target.getAttribute(DATA_ITEM_INDEX_ATTRIBUTE_NAME);
+      var dataKey = (_target$getAttribute = target.getAttribute(DATA_ITEM_DATAKEY_ATTRIBUTE_NAME)) !== null && _target$getAttribute !== void 0 ? _target$getAttribute : undefined;
+      var coordinate = selectTooltipCoordinate(listenerApi.getState(), itemIndex, dataKey);
+      listenerApi.dispatch(setActiveMouseOverItemIndex({
+        activeDataKey: dataKey,
+        activeIndex: itemIndex,
+        activeCoordinate: coordinate
+      }));
+    }
+  }
+});
Index: node_modules/recharts/es6/state/types/AreaSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/AreaSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/types/AreaSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/BarSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/BarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/types/BarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/LineSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/LineSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/types/LineSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/PieSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/PieSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/types/PieSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/RadarSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/RadarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/types/RadarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/RadialBarSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/RadialBarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/types/RadialBarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/ScatterSettings.js
===================================================================
--- node_modules/recharts/es6/state/types/ScatterSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/types/ScatterSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/state/types/StackedGraphicalItem.js
===================================================================
--- node_modules/recharts/es6/state/types/StackedGraphicalItem.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/state/types/StackedGraphicalItem.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+/**
+ * Some graphical items allow data stacking. The stacks are optional,
+ * so all props here are optional too.
+ */
+
+/**
+ * Some graphical items allow data stacking.
+ * This interface is used to represent the items that are stacked
+ * because the user has provided the stackId and dataKey properties.
+ */
+
+export function isStacked(graphicalItem) {
+  return graphicalItem.stackId != null && graphicalItem.dataKey != null;
+}
Index: node_modules/recharts/es6/synchronisation/syncSelectors.js
===================================================================
--- node_modules/recharts/es6/synchronisation/syncSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/synchronisation/syncSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export function selectSynchronisedTooltipState(state) {
+  return state.tooltip.syncInteraction;
+}
Index: node_modules/recharts/es6/synchronisation/types.js
===================================================================
--- node_modules/recharts/es6/synchronisation/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/synchronisation/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/synchronisation/useChartSynchronisation.js
===================================================================
--- node_modules/recharts/es6/synchronisation/useChartSynchronisation.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/synchronisation/useChartSynchronisation.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,214 @@
+import { useEffect } from 'react';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectEventEmitter, selectSyncId, selectSyncMethod } from '../state/selectors/rootPropsSelectors';
+import { BRUSH_SYNC_EVENT, eventCenter, TOOLTIP_SYNC_EVENT } from '../util/Events';
+import { createEventEmitter } from '../state/optionsSlice';
+import { setSyncInteraction } from '../state/tooltipSlice';
+import { selectTooltipDataKey } from '../state/selectors/selectors';
+import { selectTooltipAxisTicks } from '../state/selectors/tooltipSelectors';
+import { selectSynchronisedTooltipState } from './syncSelectors';
+import { useChartLayout, useViewBox } from '../context/chartLayoutContext';
+import { setDataStartEndIndexes } from '../state/chartDataSlice';
+var noop = () => {};
+function useTooltipSyncEventsListener() {
+  var mySyncId = useAppSelector(selectSyncId);
+  var myEventEmitter = useAppSelector(selectEventEmitter);
+  var dispatch = useAppDispatch();
+  var syncMethod = useAppSelector(selectSyncMethod);
+  var tooltipTicks = useAppSelector(selectTooltipAxisTicks);
+  var layout = useChartLayout();
+  var viewBox = useViewBox();
+  var className = useAppSelector(state => state.rootProps.className);
+  useEffect(() => {
+    if (mySyncId == null) {
+      // This chart is not synchronised with any other chart so we don't need to listen for any events.
+      return noop;
+    }
+    var listener = (incomingSyncId, action, emitter) => {
+      if (myEventEmitter === emitter) {
+        // We don't want to dispatch actions that we sent ourselves.
+        return;
+      }
+      if (mySyncId !== incomingSyncId) {
+        // This event is not for this chart
+        return;
+      }
+      if (syncMethod === 'index') {
+        dispatch(action);
+        // This is the default behaviour, we don't need to do anything else.
+        return;
+      }
+      if (tooltipTicks == null) {
+        // for the other two sync methods, we need the ticks to be available
+        return;
+      }
+      var activeTick;
+      if (typeof syncMethod === 'function') {
+        /*
+         * This is what the data shape in 2.x CategoricalChartState used to look like.
+         * In 3.x we store things differently but let's try to keep the old shape for compatibility.
+         */
+        var syncMethodParam = {
+          activeTooltipIndex: action.payload.index == null ? undefined : Number(action.payload.index),
+          isTooltipActive: action.payload.active,
+          activeIndex: action.payload.index == null ? undefined : Number(action.payload.index),
+          activeLabel: action.payload.label,
+          activeDataKey: action.payload.dataKey,
+          activeCoordinate: action.payload.coordinate
+        };
+        // Call a callback function. If there is an application specific algorithm
+        var activeTooltipIndex = syncMethod(tooltipTicks, syncMethodParam);
+        activeTick = tooltipTicks[activeTooltipIndex];
+      } else if (syncMethod === 'value') {
+        // labels are always strings, tick.value might be a string or a number, depending on axis type
+        activeTick = tooltipTicks.find(tick => String(tick.value) === action.payload.label);
+      }
+      var {
+        coordinate
+      } = action.payload;
+      if (activeTick == null || action.payload.active === false || coordinate == null || viewBox == null) {
+        dispatch(setSyncInteraction({
+          active: false,
+          coordinate: undefined,
+          dataKey: undefined,
+          index: null,
+          label: undefined
+        }));
+        return;
+      }
+      var {
+        x,
+        y
+      } = coordinate;
+      var validateChartX = Math.min(x, viewBox.x + viewBox.width);
+      var validateChartY = Math.min(y, viewBox.y + viewBox.height);
+      var activeCoordinate = {
+        x: layout === 'horizontal' ? activeTick.coordinate : validateChartX,
+        y: layout === 'horizontal' ? validateChartY : activeTick.coordinate
+      };
+      var syncAction = setSyncInteraction({
+        active: action.payload.active,
+        coordinate: activeCoordinate,
+        dataKey: action.payload.dataKey,
+        index: String(activeTick.index),
+        label: action.payload.label
+      });
+      dispatch(syncAction);
+    };
+    eventCenter.on(TOOLTIP_SYNC_EVENT, listener);
+    return () => {
+      eventCenter.off(TOOLTIP_SYNC_EVENT, listener);
+    };
+  }, [className, dispatch, myEventEmitter, mySyncId, syncMethod, tooltipTicks, layout, viewBox]);
+}
+function useBrushSyncEventsListener() {
+  var mySyncId = useAppSelector(selectSyncId);
+  var myEventEmitter = useAppSelector(selectEventEmitter);
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    if (mySyncId == null) {
+      // This chart is not synchronised with any other chart so we don't need to listen for any events.
+      return noop;
+    }
+    var listener = (incomingSyncId, action, emitter) => {
+      if (myEventEmitter === emitter) {
+        // We don't want to dispatch actions that we sent ourselves.
+        return;
+      }
+      if (mySyncId === incomingSyncId) {
+        dispatch(setDataStartEndIndexes(action));
+      }
+    };
+    eventCenter.on(BRUSH_SYNC_EVENT, listener);
+    return () => {
+      eventCenter.off(BRUSH_SYNC_EVENT, listener);
+    };
+  }, [dispatch, myEventEmitter, mySyncId]);
+}
+
+/**
+ * Will receive synchronisation events from other charts.
+ *
+ * Reads syncMethod from state and decides how to synchronise the tooltip based on that.
+ *
+ * @returns void
+ */
+export function useSynchronisedEventsFromOtherCharts() {
+  var dispatch = useAppDispatch();
+  useEffect(() => {
+    dispatch(createEventEmitter());
+  }, [dispatch]);
+  useTooltipSyncEventsListener();
+  useBrushSyncEventsListener();
+}
+
+/**
+ * Will send events to other charts.
+ * If syncId is undefined, no events will be sent.
+ *
+ * This ignores the syncMethod, because that is set and computed on the receiving end.
+ *
+ * @param tooltipEventType from Tooltip
+ * @param trigger from Tooltip
+ * @param activeCoordinate from state
+ * @param activeLabel from state
+ * @param activeIndex from state
+ * @param isTooltipActive from state
+ * @returns void
+ */
+export function useTooltipChartSynchronisation(tooltipEventType, trigger, activeCoordinate, activeLabel, activeIndex, isTooltipActive) {
+  var activeDataKey = useAppSelector(state => selectTooltipDataKey(state, tooltipEventType, trigger));
+  var eventEmitterSymbol = useAppSelector(selectEventEmitter);
+  var syncId = useAppSelector(selectSyncId);
+  var syncMethod = useAppSelector(selectSyncMethod);
+  var tooltipState = useAppSelector(selectSynchronisedTooltipState);
+  var isReceivingSynchronisation = tooltipState === null || tooltipState === void 0 ? void 0 : tooltipState.active;
+  useEffect(() => {
+    if (isReceivingSynchronisation) {
+      /*
+       * This chart currently has active tooltip, synchronised from another chart.
+       * Let's not send any outgoing synchronisation events while that's happening
+       * to avoid infinite loops.
+       */
+      return;
+    }
+    if (syncId == null) {
+      /*
+       * syncId is not set, means that this chart is not synchronised with any other chart,
+       * means we don't need to send synchronisation events
+       */
+      return;
+    }
+    if (eventEmitterSymbol == null) {
+      /*
+       * When using Recharts internal hooks and selectors outside charts context,
+       * these properties will be undefined. Let's return silently instead of throwing an error.
+       */
+      return;
+    }
+    var syncAction = setSyncInteraction({
+      active: isTooltipActive,
+      coordinate: activeCoordinate,
+      dataKey: activeDataKey,
+      index: activeIndex,
+      label: typeof activeLabel === 'number' ? String(activeLabel) : activeLabel
+    });
+    eventCenter.emit(TOOLTIP_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);
+  }, [isReceivingSynchronisation, activeCoordinate, activeDataKey, activeIndex, activeLabel, eventEmitterSymbol, syncId, syncMethod, isTooltipActive]);
+}
+export function useBrushChartSynchronisation() {
+  var syncId = useAppSelector(selectSyncId);
+  var eventEmitterSymbol = useAppSelector(selectEventEmitter);
+  var brushStartIndex = useAppSelector(state => state.chartData.dataStartIndex);
+  var brushEndIndex = useAppSelector(state => state.chartData.dataEndIndex);
+  useEffect(() => {
+    if (syncId == null || brushStartIndex == null || brushEndIndex == null || eventEmitterSymbol == null) {
+      return;
+    }
+    var syncAction = {
+      startIndex: brushStartIndex,
+      endIndex: brushEndIndex
+    };
+    eventCenter.emit(BRUSH_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);
+  }, [brushEndIndex, brushStartIndex, eventEmitterSymbol, syncId]);
+}
Index: node_modules/recharts/es6/types.js
===================================================================
--- node_modules/recharts/es6/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/util/ActiveShapeUtils.js
===================================================================
--- node_modules/recharts/es6/util/ActiveShapeUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/ActiveShapeUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,98 @@
+var _excluded = ["option", "shapeType", "propTransformer", "activeClassName", "isActive"];
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { cloneElement, isValidElement } from 'react';
+import isPlainObject from 'es-toolkit/compat/isPlainObject';
+import { Rectangle } from '../shape/Rectangle';
+import { Trapezoid } from '../shape/Trapezoid';
+import { Sector } from '../shape/Sector';
+import { Layer } from '../container/Layer';
+import { Symbols } from '../shape/Symbols';
+
+/**
+ * This is an abstraction for rendering a user defined prop for a customized shape in several forms.
+ *
+ * <Shape /> is the root and will handle taking in:
+ *  - an object of svg properties
+ *  - a boolean
+ *  - a render prop(inline function that returns jsx)
+ *  - a React element
+ *
+ * <ShapeSelector /> is a subcomponent of <Shape /> and used to match a component
+ * to the value of props.shapeType that is passed to the root.
+ *
+ */
+
+function defaultPropTransformer(option, props) {
+  return _objectSpread(_objectSpread({}, props), option);
+}
+function isSymbolsProps(shapeType, _elementProps) {
+  return shapeType === 'symbols';
+}
+function ShapeSelector(_ref) {
+  var {
+    shapeType,
+    elementProps
+  } = _ref;
+  switch (shapeType) {
+    case 'rectangle':
+      return /*#__PURE__*/React.createElement(Rectangle, elementProps);
+    case 'trapezoid':
+      return /*#__PURE__*/React.createElement(Trapezoid, elementProps);
+    case 'sector':
+      return /*#__PURE__*/React.createElement(Sector, elementProps);
+    case 'symbols':
+      if (isSymbolsProps(shapeType, elementProps)) {
+        return /*#__PURE__*/React.createElement(Symbols, elementProps);
+      }
+      break;
+    default:
+      return null;
+  }
+}
+export function getPropsFromShapeOption(option) {
+  if (/*#__PURE__*/isValidElement(option)) {
+    return option.props;
+  }
+  return option;
+}
+export function Shape(_ref2) {
+  var {
+      option,
+      shapeType,
+      propTransformer = defaultPropTransformer,
+      activeClassName = 'recharts-active-shape',
+      isActive
+    } = _ref2,
+    props = _objectWithoutProperties(_ref2, _excluded);
+  var shape;
+  if (/*#__PURE__*/isValidElement(option)) {
+    shape = /*#__PURE__*/cloneElement(option, _objectSpread(_objectSpread({}, props), getPropsFromShapeOption(option)));
+  } else if (typeof option === 'function') {
+    shape = option(props);
+  } else if (isPlainObject(option) && typeof option !== 'boolean') {
+    var nextProps = propTransformer(option, props);
+    shape = /*#__PURE__*/React.createElement(ShapeSelector, {
+      shapeType: shapeType,
+      elementProps: nextProps
+    });
+  } else {
+    var elementProps = props;
+    shape = /*#__PURE__*/React.createElement(ShapeSelector, {
+      shapeType: shapeType,
+      elementProps: elementProps
+    });
+  }
+  if (isActive) {
+    return /*#__PURE__*/React.createElement(Layer, {
+      className: activeClassName
+    }, shape);
+  }
+  return shape;
+}
Index: node_modules/recharts/es6/util/BarUtils.js
===================================================================
--- node_modules/recharts/es6/util/BarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/BarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+var _excluded = ["x", "y"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import invariant from 'tiny-invariant';
+import { Shape } from './ActiveShapeUtils';
+import { isNullish, isNumber } from './DataUtils';
+
+// Rectangle props is expecting x, y, height, width as numbers, name as a string, and radius as a custom type
+// When props are being spread in from a user defined component in Bar,
+// the prop types of an SVGElement have these typed as something else.
+// This function will return the passed in props
+// along with x, y, height as numbers, name as a string, and radius as number | [number, number, number, number]
+function typeguardBarRectangleProps(_ref, props) {
+  var {
+      x: xProp,
+      y: yProp
+    } = _ref,
+    option = _objectWithoutProperties(_ref, _excluded);
+  var xValue = "".concat(xProp);
+  var x = parseInt(xValue, 10);
+  var yValue = "".concat(yProp);
+  var y = parseInt(yValue, 10);
+  var heightValue = "".concat(props.height || option.height);
+  var height = parseInt(heightValue, 10);
+  var widthValue = "".concat(props.width || option.width);
+  var width = parseInt(widthValue, 10);
+  return _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, props), option), x ? {
+    x
+  } : {}), y ? {
+    y
+  } : {}), {}, {
+    height,
+    width,
+    name: props.name,
+    radius: props.radius
+  });
+}
+export function BarRectangle(props) {
+  return /*#__PURE__*/React.createElement(Shape, _extends({
+    shapeType: "rectangle",
+    propTransformer: typeguardBarRectangleProps,
+    activeClassName: "recharts-active-bar"
+  }, props));
+}
+/**
+ * Safely gets minPointSize from the minPointSize prop if it is a function
+ * @param minPointSize minPointSize as passed to the Bar component
+ * @param defaultValue default minPointSize
+ * @returns minPointSize
+ */
+export var minPointSizeCallback = function minPointSizeCallback(minPointSize) {
+  var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+  return (value, index) => {
+    if (isNumber(minPointSize)) return minPointSize;
+    var isValueNumberOrNil = isNumber(value) || isNullish(value);
+    if (isValueNumberOrNil) {
+      return minPointSize(value, index);
+    }
+    !isValueNumberOrNil ? process.env.NODE_ENV !== "production" ? invariant(false, "minPointSize callback function received a value with type of ".concat(typeof value, ". Currently only numbers or null/undefined are supported.")) : invariant(false) : void 0;
+    return defaultValue;
+  };
+};
Index: node_modules/recharts/es6/util/CartesianUtils.js
===================================================================
--- node_modules/recharts/es6/util/CartesianUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/CartesianUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,160 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+export var rectWithPoints = (_ref, _ref2) => {
+  var {
+    x: x1,
+    y: y1
+  } = _ref;
+  var {
+    x: x2,
+    y: y2
+  } = _ref2;
+  return {
+    x: Math.min(x1, x2),
+    y: Math.min(y1, y2),
+    width: Math.abs(x2 - x1),
+    height: Math.abs(y2 - y1)
+  };
+};
+
+/**
+ * Compute the x, y, width, and height of a box from two reference points.
+ * @param  {Object} coords     x1, x2, y1, and y2
+ * @return {Object} object
+ */
+export var rectWithCoords = _ref3 => {
+  var {
+    x1,
+    y1,
+    x2,
+    y2
+  } = _ref3;
+  return rectWithPoints({
+    x: x1,
+    y: y1
+  }, {
+    x: x2,
+    y: y2
+  });
+};
+export class ScaleHelper {
+  static create(obj) {
+    return new ScaleHelper(obj);
+  }
+  constructor(scale) {
+    this.scale = scale;
+  }
+  get domain() {
+    return this.scale.domain;
+  }
+  get range() {
+    return this.scale.range;
+  }
+  get rangeMin() {
+    return this.range()[0];
+  }
+  get rangeMax() {
+    return this.range()[1];
+  }
+  get bandwidth() {
+    return this.scale.bandwidth;
+  }
+  apply(value) {
+    var {
+      bandAware,
+      position
+    } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+    if (value === undefined) {
+      return undefined;
+    }
+    if (position) {
+      switch (position) {
+        case 'start':
+          {
+            return this.scale(value);
+          }
+        case 'middle':
+          {
+            var offset = this.bandwidth ? this.bandwidth() / 2 : 0;
+            return this.scale(value) + offset;
+          }
+        case 'end':
+          {
+            var _offset = this.bandwidth ? this.bandwidth() : 0;
+            return this.scale(value) + _offset;
+          }
+        default:
+          {
+            return this.scale(value);
+          }
+      }
+    }
+    if (bandAware) {
+      var _offset2 = this.bandwidth ? this.bandwidth() / 2 : 0;
+      return this.scale(value) + _offset2;
+    }
+    return this.scale(value);
+  }
+  isInRange(value) {
+    var range = this.range();
+    var first = range[0];
+    var last = range[range.length - 1];
+    return first <= last ? value >= first && value <= last : value >= last && value <= first;
+  }
+}
+_defineProperty(ScaleHelper, "EPS", 1e-4);
+export var createLabeledScales = options => {
+  var scales = Object.keys(options).reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+    [key]: ScaleHelper.create(options[key])
+  }), {});
+  return _objectSpread(_objectSpread({}, scales), {}, {
+    apply(coord) {
+      var {
+        bandAware,
+        position
+      } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+      return Object.fromEntries(Object.entries(coord).map(_ref4 => {
+        var [label, value] = _ref4;
+        return [label, scales[label].apply(value, {
+          bandAware,
+          position
+        })];
+      }));
+    },
+    isInRange(coord) {
+      return Object.keys(coord).every(label => scales[label].isInRange(coord[label]));
+    }
+  });
+};
+
+/** Normalizes the angle so that 0 <= angle < 180.
+ * @param {number} angle Angle in degrees.
+ * @return {number} the normalized angle with a value of at least 0 and never greater or equal to 180. */
+export function normalizeAngle(angle) {
+  return (angle % 180 + 180) % 180;
+}
+
+/** Calculates the width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.
+ * @param {Object} size Width and height of the text in a horizontal position.
+ * @param {number} angle Angle in degrees in which the text is displayed.
+ * @return {number} The width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.
+ */
+export var getAngledRectangleWidth = function getAngledRectangleWidth(_ref5) {
+  var {
+    width,
+    height
+  } = _ref5;
+  var angle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+  // Ensure angle is >= 0 && < 180
+  var normalizedAngle = normalizeAngle(angle);
+  var angleRadians = normalizedAngle * Math.PI / 180;
+
+  /* Depending on the height and width of the rectangle, we may need to use different formulas to calculate the angled
+   * width. This threshold defines when each formula should kick in. */
+  var angleThreshold = Math.atan(height / width);
+  var angledWidth = angleRadians > angleThreshold && angleRadians < Math.PI - angleThreshold ? height / Math.sin(angleRadians) : width / Math.cos(angleRadians);
+  return Math.abs(angledWidth);
+};
Index: node_modules/recharts/es6/util/ChartUtils.js
===================================================================
--- node_modules/recharts/es6/util/ChartUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/ChartUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,578 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import sortBy from 'es-toolkit/compat/sortBy';
+import get from 'es-toolkit/compat/get';
+import { stack as shapeStack, stackOffsetExpand, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderNone } from 'victory-vendor/d3-shape';
+import { findEntryInArray, isNan, isNullish, isNumber, isNumOrStr, mathSign } from './DataUtils';
+import { inRangeOfSector, polarToCartesian } from './PolarUtils';
+import { getSliced } from './getSliced';
+export function getValueByDataKey(obj, dataKey, defaultValue) {
+  if (isNullish(obj) || isNullish(dataKey)) {
+    return defaultValue;
+  }
+  if (isNumOrStr(dataKey)) {
+    return get(obj, dataKey, defaultValue);
+  }
+  if (typeof dataKey === 'function') {
+    return dataKey(obj);
+  }
+  return defaultValue;
+}
+export var calculateActiveTickIndex = (coordinate, ticks, unsortedTicks, axisType, range) => {
+  var _ticks$length;
+  var index = -1;
+  var len = (_ticks$length = ticks === null || ticks === void 0 ? void 0 : ticks.length) !== null && _ticks$length !== void 0 ? _ticks$length : 0;
+
+  // if there are 1 or fewer ticks or if there is no coordinate then the active tick is at index 0
+  if (len <= 1 || coordinate == null) {
+    return 0;
+  }
+  if (axisType === 'angleAxis' && range != null && Math.abs(Math.abs(range[1] - range[0]) - 360) <= 1e-6) {
+    // ticks are distributed in a circle
+    for (var i = 0; i < len; i++) {
+      var before = i > 0 ? unsortedTicks[i - 1].coordinate : unsortedTicks[len - 1].coordinate;
+      var cur = unsortedTicks[i].coordinate;
+      var after = i >= len - 1 ? unsortedTicks[0].coordinate : unsortedTicks[i + 1].coordinate;
+      var sameDirectionCoord = void 0;
+      if (mathSign(cur - before) !== mathSign(after - cur)) {
+        var diffInterval = [];
+        if (mathSign(after - cur) === mathSign(range[1] - range[0])) {
+          sameDirectionCoord = after;
+          var curInRange = cur + range[1] - range[0];
+          diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2);
+          diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2);
+        } else {
+          sameDirectionCoord = before;
+          var afterInRange = after + range[1] - range[0];
+          diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2);
+          diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2);
+        }
+        var sameInterval = [Math.min(cur, (sameDirectionCoord + cur) / 2), Math.max(cur, (sameDirectionCoord + cur) / 2)];
+        if (coordinate > sameInterval[0] && coordinate <= sameInterval[1] || coordinate >= diffInterval[0] && coordinate <= diffInterval[1]) {
+          ({
+            index
+          } = unsortedTicks[i]);
+          break;
+        }
+      } else {
+        var minValue = Math.min(before, after);
+        var maxValue = Math.max(before, after);
+        if (coordinate > (minValue + cur) / 2 && coordinate <= (maxValue + cur) / 2) {
+          ({
+            index
+          } = unsortedTicks[i]);
+          break;
+        }
+      }
+    }
+  } else if (ticks) {
+    // ticks are distributed in a single direction
+    for (var _i = 0; _i < len; _i++) {
+      if (_i === 0 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i > 0 && _i < len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i === len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2) {
+        ({
+          index
+        } = ticks[_i]);
+        break;
+      }
+    }
+  }
+  return index;
+};
+export var appendOffsetOfLegend = (offset, legendSettings, legendSize) => {
+  if (legendSettings && legendSize) {
+    var {
+      width: boxWidth,
+      height: boxHeight
+    } = legendSize;
+    var {
+      align,
+      verticalAlign,
+      layout
+    } = legendSettings;
+    if ((layout === 'vertical' || layout === 'horizontal' && verticalAlign === 'middle') && align !== 'center' && isNumber(offset[align])) {
+      return _objectSpread(_objectSpread({}, offset), {}, {
+        [align]: offset[align] + (boxWidth || 0)
+      });
+    }
+    if ((layout === 'horizontal' || layout === 'vertical' && align === 'center') && verticalAlign !== 'middle' && isNumber(offset[verticalAlign])) {
+      return _objectSpread(_objectSpread({}, offset), {}, {
+        [verticalAlign]: offset[verticalAlign] + (boxHeight || 0)
+      });
+    }
+  }
+  return offset;
+};
+export var isCategoricalAxis = (layout, axisType) => layout === 'horizontal' && axisType === 'xAxis' || layout === 'vertical' && axisType === 'yAxis' || layout === 'centric' && axisType === 'angleAxis' || layout === 'radial' && axisType === 'radiusAxis';
+
+/**
+ * Calculate the Coordinates of grid
+ * @param  {Array} ticks           The ticks in axis
+ * @param {Number} minValue        The minimum value of axis
+ * @param {Number} maxValue        The maximum value of axis
+ * @param {boolean} syncWithTicks  Synchronize grid lines with ticks or not
+ * @return {Array}                 Coordinates
+ */
+export var getCoordinatesOfGrid = (ticks, minValue, maxValue, syncWithTicks) => {
+  if (syncWithTicks) {
+    return ticks.map(entry => entry.coordinate);
+  }
+  var hasMin, hasMax;
+  var values = ticks.map(entry => {
+    if (entry.coordinate === minValue) {
+      hasMin = true;
+    }
+    if (entry.coordinate === maxValue) {
+      hasMax = true;
+    }
+    return entry.coordinate;
+  });
+  if (!hasMin) {
+    values.push(minValue);
+  }
+  if (!hasMax) {
+    values.push(maxValue);
+  }
+  return values;
+};
+
+/**
+ * A subset of d3-scale that Recharts is using
+ */
+
+/**
+ * Get the ticks of an axis
+ * @param  {Object}  axis The configuration of an axis
+ * @param {Boolean} isGrid Whether or not are the ticks in grid
+ * @param {Boolean} isAll Return the ticks of all the points or not
+ * @return {Array}  Ticks
+ */
+export var getTicksOfAxis = (axis, isGrid, isAll) => {
+  if (!axis) {
+    return null;
+  }
+  var {
+    duplicateDomain,
+    type,
+    range,
+    scale,
+    realScaleType,
+    isCategorical,
+    categoricalDomain,
+    tickCount,
+    ticks,
+    niceTicks,
+    axisType
+  } = axis;
+  if (!scale) {
+    return null;
+  }
+  var offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;
+  var offset = (isGrid || isAll) && type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
+  offset = axisType === 'angleAxis' && range && range.length >= 2 ? mathSign(range[0] - range[1]) * 2 * offset : offset;
+
+  // The ticks set by user should only affect the ticks adjacent to axis line
+  if (isGrid && (ticks || niceTicks)) {
+    var result = (ticks || niceTicks || []).map((entry, index) => {
+      var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;
+      return {
+        // If the scaleContent is not a number, the coordinate will be NaN.
+        // That could be the case for example with a PointScale and a string as domain.
+        coordinate: scale(scaleContent) + offset,
+        value: entry,
+        offset,
+        index
+      };
+    });
+    return result.filter(row => !isNan(row.coordinate));
+  }
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      index,
+      offset
+    }));
+  }
+  if (scale.ticks && !isAll && tickCount != null) {
+    return scale.ticks(tickCount).map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      offset,
+      index
+    }));
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => ({
+    coordinate: scale(entry) + offset,
+    value: duplicateDomain ? duplicateDomain[entry] : entry,
+    index,
+    offset
+  }));
+};
+var EPS = 1e-4;
+export var checkDomainOfScale = scale => {
+  var domain = scale.domain();
+  if (!domain || domain.length <= 2) {
+    return;
+  }
+  var len = domain.length;
+  var range = scale.range();
+  var minValue = Math.min(range[0], range[1]) - EPS;
+  var maxValue = Math.max(range[0], range[1]) + EPS;
+  var first = scale(domain[0]);
+  var last = scale(domain[len - 1]);
+  if (first < minValue || first > maxValue || last < minValue || last > maxValue) {
+    scale.domain([domain[0], domain[len - 1]]);
+  }
+};
+
+/**
+ * Both value and domain are tuples of two numbers
+ * - but the type stays as array of numbers until we have better support in rest of the app
+ * @param value input that will be truncated
+ * @param domain boundaries
+ * @returns tuple of two numbers
+ */
+export var truncateByDomain = (value, domain) => {
+  if (!domain || domain.length !== 2 || !isNumber(domain[0]) || !isNumber(domain[1])) {
+    return value;
+  }
+  var minValue = Math.min(domain[0], domain[1]);
+  var maxValue = Math.max(domain[0], domain[1]);
+  var result = [value[0], value[1]];
+  if (!isNumber(value[0]) || value[0] < minValue) {
+    result[0] = minValue;
+  }
+  if (!isNumber(value[1]) || value[1] > maxValue) {
+    result[1] = maxValue;
+  }
+  if (result[0] > maxValue) {
+    result[0] = maxValue;
+  }
+  if (result[1] < minValue) {
+    result[1] = minValue;
+  }
+  return result;
+};
+
+/**
+ * Stacks all positive numbers above zero and all negative numbers below zero.
+ *
+ * If all values in the series are positive then this behaves the same as 'none' stacker.
+ *
+ * @param {Array} series from d3-shape Stack
+ * @return {Array} series with applied offset
+ */
+export var offsetSign = series => {
+  var n = series.length;
+  if (n <= 0) {
+    return;
+  }
+  for (var j = 0, m = series[0].length; j < m; ++j) {
+    var positive = 0;
+    var negative = 0;
+    for (var i = 0; i < n; ++i) {
+      var value = isNan(series[i][j][1]) ? series[i][j][0] : series[i][j][1];
+
+      /* eslint-disable prefer-destructuring, no-param-reassign */
+      if (value >= 0) {
+        series[i][j][0] = positive;
+        series[i][j][1] = positive + value;
+        positive = series[i][j][1];
+      } else {
+        series[i][j][0] = negative;
+        series[i][j][1] = negative + value;
+        negative = series[i][j][1];
+      }
+      /* eslint-enable prefer-destructuring, no-param-reassign */
+    }
+  }
+};
+
+/**
+ * Replaces all negative values with zero when stacking data.
+ *
+ * If all values in the series are positive then this behaves the same as 'none' stacker.
+ *
+ * @param {Array} series from d3-shape Stack
+ * @return {Array} series with applied offset
+ */
+export var offsetPositive = series => {
+  var n = series.length;
+  if (n <= 0) {
+    return;
+  }
+  for (var j = 0, m = series[0].length; j < m; ++j) {
+    var positive = 0;
+    for (var i = 0; i < n; ++i) {
+      var value = isNan(series[i][j][1]) ? series[i][j][0] : series[i][j][1];
+
+      /* eslint-disable prefer-destructuring, no-param-reassign */
+      if (value >= 0) {
+        series[i][j][0] = positive;
+        series[i][j][1] = positive + value;
+        positive = series[i][j][1];
+      } else {
+        series[i][j][0] = 0;
+        series[i][j][1] = 0;
+      }
+      /* eslint-enable prefer-destructuring, no-param-reassign */
+    }
+  }
+};
+
+/**
+ * Function type to compute offset for stacked data.
+ *
+ * d3-shape has something fishy going on with its types.
+ * In @definitelytyped/d3-shape, this function (the offset accessor) is typed as Series<> => void.
+ * However! When I actually open the storybook I can see that the offset accessor actually receives Array<Series<>>.
+ * The same I can see in the source code itself:
+ * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042
+ * That one unfortunately has no types but we can tell it passes three-dimensional array.
+ *
+ * Which leads me to believe that definitelytyped is wrong on this one.
+ * There's open discussion on this topic without much attention:
+ * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042
+ */
+
+var STACK_OFFSET_MAP = {
+  sign: offsetSign,
+  // @ts-expect-error definitelytyped types are incorrect
+  expand: stackOffsetExpand,
+  // @ts-expect-error definitelytyped types are incorrect
+  none: stackOffsetNone,
+  // @ts-expect-error definitelytyped types are incorrect
+  silhouette: stackOffsetSilhouette,
+  // @ts-expect-error definitelytyped types are incorrect
+  wiggle: stackOffsetWiggle,
+  positive: offsetPositive
+};
+export var getStackedData = (data, dataKeys, offsetType) => {
+  var offsetAccessor = STACK_OFFSET_MAP[offsetType];
+  var stack = shapeStack().keys(dataKeys).value((d, key) => +getValueByDataKey(d, key, 0)).order(stackOrderNone)
+  // @ts-expect-error definitelytyped types are incorrect
+  .offset(offsetAccessor);
+  return stack(data);
+};
+
+/**
+ * Stack IDs in the external props allow numbers; but internally we use it as an object key
+ * and object keys are always strings. Also, it would be kinda confusing if stackId=8 and stackId='8' were different stacks
+ * so let's just force a string.
+ */
+
+export function getNormalizedStackId(publicStackId) {
+  return publicStackId == null ? undefined : String(publicStackId);
+}
+export function getCateCoordinateOfLine(_ref) {
+  var {
+    axis,
+    ticks,
+    bandSize,
+    entry,
+    index,
+    dataKey
+  } = _ref;
+  if (axis.type === 'category') {
+    // find coordinate of category axis by the value of category
+    // @ts-expect-error why does this use direct object access instead of getValueByDataKey?
+    if (!axis.allowDuplicatedCategory && axis.dataKey && !isNullish(entry[axis.dataKey])) {
+      // @ts-expect-error why does this use direct object access instead of getValueByDataKey?
+      var matchedTick = findEntryInArray(ticks, 'value', entry[axis.dataKey]);
+      if (matchedTick) {
+        return matchedTick.coordinate + bandSize / 2;
+      }
+    }
+    return ticks[index] ? ticks[index].coordinate + bandSize / 2 : null;
+  }
+  var value = getValueByDataKey(entry, !isNullish(dataKey) ? dataKey : axis.dataKey);
+
+  // @ts-expect-error getValueByDataKey does not validate the output type
+  return !isNullish(value) ? axis.scale(value) : null;
+}
+export var getCateCoordinateOfBar = _ref2 => {
+  var {
+    axis,
+    ticks,
+    offset,
+    bandSize,
+    entry,
+    index
+  } = _ref2;
+  if (axis.type === 'category') {
+    return ticks[index] ? ticks[index].coordinate + offset : null;
+  }
+  var value = getValueByDataKey(entry, axis.dataKey, axis.scale.domain()[index]);
+  return !isNullish(value) ? axis.scale(value) - bandSize / 2 + offset : null;
+};
+export var getBaseValueOfBar = _ref3 => {
+  var {
+    numericAxis
+  } = _ref3;
+  var domain = numericAxis.scale.domain();
+  if (numericAxis.type === 'number') {
+    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript
+    var minValue = Math.min(domain[0], domain[1]);
+    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript
+    var maxValue = Math.max(domain[0], domain[1]);
+    if (minValue <= 0 && maxValue >= 0) {
+      return 0;
+    }
+    if (maxValue < 0) {
+      return maxValue;
+    }
+    return minValue;
+  }
+  return domain[0];
+};
+var getDomainOfSingle = data => {
+  var flat = data.flat(2).filter(isNumber);
+  return [Math.min(...flat), Math.max(...flat)];
+};
+var makeDomainFinite = domain => {
+  return [domain[0] === Infinity ? 0 : domain[0], domain[1] === -Infinity ? 0 : domain[1]];
+};
+export var getDomainOfStackGroups = (stackGroups, startIndex, endIndex) => {
+  if (stackGroups == null) {
+    return undefined;
+  }
+  return makeDomainFinite(Object.keys(stackGroups).reduce((result, stackId) => {
+    var group = stackGroups[stackId];
+    var {
+      stackedData
+    } = group;
+    var domain = stackedData.reduce((res, entry) => {
+      var sliced = getSliced(entry, startIndex, endIndex);
+      var s = getDomainOfSingle(sliced);
+      return [Math.min(res[0], s[0]), Math.max(res[1], s[1])];
+    }, [Infinity, -Infinity]);
+    return [Math.min(domain[0], result[0]), Math.max(domain[1], result[1])];
+  }, [Infinity, -Infinity]));
+};
+export var MIN_VALUE_REG = /^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;
+export var MAX_VALUE_REG = /^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;
+
+/**
+ * Calculate the size between two category
+ * @param  {Object} axis  The options of axis
+ * @param  {Array}  ticks The ticks of axis
+ * @param  {Boolean} isBar if items in axis are bars
+ * @return {Number} Size
+ */
+export var getBandSizeOfAxis = (axis, ticks, isBar) => {
+  if (axis && axis.scale && axis.scale.bandwidth) {
+    var bandWidth = axis.scale.bandwidth();
+    if (!isBar || bandWidth > 0) {
+      return bandWidth;
+    }
+  }
+  if (axis && ticks && ticks.length >= 2) {
+    var orderedTicks = sortBy(ticks, o => o.coordinate);
+    var bandSize = Infinity;
+    for (var i = 1, len = orderedTicks.length; i < len; i++) {
+      var cur = orderedTicks[i];
+      var prev = orderedTicks[i - 1];
+      bandSize = Math.min((cur.coordinate || 0) - (prev.coordinate || 0), bandSize);
+    }
+    return bandSize === Infinity ? 0 : bandSize;
+  }
+  return isBar ? undefined : 0;
+};
+export function getTooltipEntry(_ref4) {
+  var {
+    tooltipEntrySettings,
+    dataKey,
+    payload,
+    value,
+    name
+  } = _ref4;
+  return _objectSpread(_objectSpread({}, tooltipEntrySettings), {}, {
+    dataKey,
+    payload,
+    value,
+    name
+  });
+}
+export function getTooltipNameProp(nameFromItem, dataKey) {
+  if (nameFromItem) {
+    return String(nameFromItem);
+  }
+  if (typeof dataKey === 'string') {
+    return dataKey;
+  }
+  return undefined;
+}
+export function inRange(x, y, layout, polarViewBox, offset) {
+  if (layout === 'horizontal' || layout === 'vertical') {
+    var isInRange = x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height;
+    return isInRange ? {
+      x,
+      y
+    } : null;
+  }
+  if (polarViewBox) {
+    return inRangeOfSector({
+      x,
+      y
+    }, polarViewBox);
+  }
+  return null;
+}
+export var getActiveCoordinate = (layout, tooltipTicks, activeIndex, rangeObj) => {
+  var entry = tooltipTicks.find(tick => tick && tick.index === activeIndex);
+  if (entry) {
+    if (layout === 'horizontal') {
+      return {
+        x: entry.coordinate,
+        y: rangeObj.y
+      };
+    }
+    if (layout === 'vertical') {
+      return {
+        x: rangeObj.x,
+        y: entry.coordinate
+      };
+    }
+    if (layout === 'centric') {
+      var _angle = entry.coordinate;
+      var {
+        radius: _radius
+      } = rangeObj;
+      return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), polarToCartesian(rangeObj.cx, rangeObj.cy, _radius, _angle)), {}, {
+        angle: _angle,
+        radius: _radius
+      });
+    }
+    var radius = entry.coordinate;
+    var {
+      angle
+    } = rangeObj;
+    return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle)), {}, {
+      angle,
+      radius
+    });
+  }
+  return {
+    x: 0,
+    y: 0
+  };
+};
+export var calculateTooltipPos = (rangeObj, layout) => {
+  if (layout === 'horizontal') {
+    return rangeObj.x;
+  }
+  if (layout === 'vertical') {
+    return rangeObj.y;
+  }
+  if (layout === 'centric') {
+    return rangeObj.angle;
+  }
+  return rangeObj.radius;
+};
Index: node_modules/recharts/es6/util/Constants.js
===================================================================
--- node_modules/recharts/es6/util/Constants.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/Constants.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+export var COLOR_PANEL = ['#1890FF', '#66B5FF', '#41D9C7', '#2FC25B', '#6EDB8F', '#9AE65C', '#FACC14', '#E6965C', '#57AD71', '#223273', '#738AE6', '#7564CC', '#8543E0', '#A877ED', '#5C8EE6', '#13C2C2', '#70E0E0', '#5CA3E6', '#3436C7', '#8082FF', '#DD81E6', '#F04864', '#FA7D92', '#D598D9'];
+
+/**
+ * We use this attribute to identify which element is the one that the user is touching.
+ * The index is the position of the element in the data array.
+ * This can be either a number (for array-based charts) or a string (for the charts that have a matrix-shaped data).
+ */
+export var DATA_ITEM_INDEX_ATTRIBUTE_NAME = 'data-recharts-item-index';
+/**
+ * We use this attribute to identify which element is the one that the user is touching.
+ * DataKey works here as a kind of identifier for the element. It's not a perfect identifier for ~two~ three reasons:
+ *
+ * 1. There can be two different elements with the same dataKey; we won't know which is it
+ * 2. DataKey can be a function, and that serialized will be a `[Function: anonymous]` string
+ * which means we will be able to identify that it was a function but can't tell which one.
+ * This will lead to some weird bugs. A proper fix would be to either:
+ * a) use a unique identifier for each element (passed from props, or generated)
+ * b) figure out how to compare the dataKey or graphical item by object reference
+ *
+ * a) is a fuss because we don't have the unique identifier in props,
+ * and b) is possible most of the time except for touchMove events which work differently from mouseEnter/mouseLeave:
+ * - while mouseEnter is fired for the element that the mouse is over,
+ * touchMove is fired for the element where user has started touching. As the finger moves,
+ * we can identify the element that the user is touching by using the elementFromPoint method,
+ * but it keeps calling the handler on the element where touchStart was fired.
+ *
+ * Okay and now I discovered a third reason: the dataKey can be undefined and that's still fine
+ * because if dataKey is undefined then graphical elements assume the dataKey of the axes.
+ * Which makes it a convenient way of using recharts to render a chart but horrible identifier.
+ */
+export var DATA_ITEM_DATAKEY_ATTRIBUTE_NAME = 'data-recharts-item-data-key';
+export var DEFAULT_Y_AXIS_WIDTH = 60;
Index: node_modules/recharts/es6/util/CssPrefixUtils.js
===================================================================
--- node_modules/recharts/es6/util/CssPrefixUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/CssPrefixUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];
+export var generatePrefixStyle = (name, value) => {
+  if (!name) {
+    return undefined;
+  }
+  var camelName = name.replace(/(\w)/, v => v.toUpperCase());
+  var result = PREFIX_LIST.reduce((res, entry) => _objectSpread(_objectSpread({}, res), {}, {
+    [entry + camelName]: value
+  }), {});
+  result[name] = value;
+  return result;
+};
Index: node_modules/recharts/es6/util/DOMUtils.js
===================================================================
--- node_modules/recharts/es6/util/DOMUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/DOMUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,127 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { Global } from './Global';
+import { LRUCache } from './LRUCache';
+var defaultConfig = {
+  cacheSize: 2000,
+  enableCache: true
+};
+var currentConfig = _objectSpread({}, defaultConfig);
+var stringCache = new LRUCache(currentConfig.cacheSize);
+var SPAN_STYLE = {
+  position: 'absolute',
+  top: '-20000px',
+  left: 0,
+  padding: 0,
+  margin: 0,
+  border: 'none',
+  whiteSpace: 'pre'
+};
+var MEASUREMENT_SPAN_ID = 'recharts_measurement_span';
+function createCacheKey(text, style) {
+  // Simple string concatenation for better performance than JSON.stringify
+  var fontSize = style.fontSize || '';
+  var fontFamily = style.fontFamily || '';
+  var fontWeight = style.fontWeight || '';
+  var fontStyle = style.fontStyle || '';
+  var letterSpacing = style.letterSpacing || '';
+  var textTransform = style.textTransform || '';
+  return "".concat(text, "|").concat(fontSize, "|").concat(fontFamily, "|").concat(fontWeight, "|").concat(fontStyle, "|").concat(letterSpacing, "|").concat(textTransform);
+}
+
+/**
+ * Measure text using DOM (accurate but slower)
+ * @param text - The text to measure
+ * @param style - CSS style properties to apply
+ * @returns The size of the text
+ */
+var measureTextWithDOM = (text, style) => {
+  try {
+    var measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);
+    if (!measurementSpan) {
+      measurementSpan = document.createElement('span');
+      measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);
+      measurementSpan.setAttribute('aria-hidden', 'true');
+      document.body.appendChild(measurementSpan);
+    }
+
+    // Apply styles directly without unnecessary object creation
+    Object.assign(measurementSpan.style, SPAN_STYLE, style);
+    measurementSpan.textContent = "".concat(text);
+    var rect = measurementSpan.getBoundingClientRect();
+    return {
+      width: rect.width,
+      height: rect.height
+    };
+  } catch (_unused) {
+    return {
+      width: 0,
+      height: 0
+    };
+  }
+};
+export var getStringSize = function getStringSize(text) {
+  var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+  if (text === undefined || text === null || Global.isSsr) {
+    return {
+      width: 0,
+      height: 0
+    };
+  }
+
+  // If caching is disabled, measure directly
+  if (!currentConfig.enableCache) {
+    return measureTextWithDOM(text, style);
+  }
+  var cacheKey = createCacheKey(text, style);
+  var cachedResult = stringCache.get(cacheKey);
+  if (cachedResult) {
+    return cachedResult;
+  }
+
+  // Measure using DOM
+  var result = measureTextWithDOM(text, style);
+
+  // Store in LRU cache
+  stringCache.set(cacheKey, result);
+  return result;
+};
+
+/**
+ * Configure text measurement behavior
+ * @param config - Partial configuration to apply
+ * @returns void
+ */
+export var configureTextMeasurement = config => {
+  var newConfig = _objectSpread(_objectSpread({}, currentConfig), config);
+  if (newConfig.cacheSize !== currentConfig.cacheSize) {
+    stringCache = new LRUCache(newConfig.cacheSize);
+  }
+  currentConfig = newConfig;
+};
+
+/**
+ * Get current text measurement configuration
+ * @returns Current configuration
+ */
+export var getTextMeasurementConfig = () => _objectSpread({}, currentConfig);
+
+/**
+ * Clear the string size cache. Useful for testing or memory management.
+ * @returns void
+ */
+export var clearStringCache = () => {
+  stringCache.clear();
+};
+
+/**
+ * Get cache statistics for debugging purposes.
+ * @returns Cache statistics including size and max size
+ */
+export var getStringCacheStats = () => ({
+  size: stringCache.size(),
+  maxSize: currentConfig.cacheSize
+});
Index: node_modules/recharts/es6/util/DataUtils.js
===================================================================
--- node_modules/recharts/es6/util/DataUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/DataUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,154 @@
+import get from 'es-toolkit/compat/get';
+export var mathSign = value => {
+  if (value === 0) {
+    return 0;
+  }
+  if (value > 0) {
+    return 1;
+  }
+  return -1;
+};
+export var isNan = value => {
+  // eslint-disable-next-line eqeqeq
+  return typeof value == 'number' && value != +value;
+};
+export var isPercent = value => typeof value === 'string' && value.indexOf('%') === value.length - 1;
+export var isNumber = value => (typeof value === 'number' || value instanceof Number) && !isNan(value);
+export var isNumOrStr = value => isNumber(value) || typeof value === 'string';
+var idCounter = 0;
+export var uniqueId = prefix => {
+  var id = ++idCounter;
+  return "".concat(prefix || '').concat(id);
+};
+
+/**
+ * Get percent value of a total value
+ * @param {number|string} percent A percent
+ * @param {number} totalValue     Total value
+ * @param {number} defaultValue   The value returned when percent is undefined or invalid
+ * @param {boolean} validate      If set to be true, the result will be validated
+ * @return {number} value
+ */
+export var getPercentValue = function getPercentValue(percent, totalValue) {
+  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+  var validate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+  if (!isNumber(percent) && typeof percent !== 'string') {
+    return defaultValue;
+  }
+  var value;
+  if (isPercent(percent)) {
+    if (totalValue == null) {
+      return defaultValue;
+    }
+    var index = percent.indexOf('%');
+    value = totalValue * parseFloat(percent.slice(0, index)) / 100;
+  } else {
+    value = +percent;
+  }
+  if (isNan(value)) {
+    value = defaultValue;
+  }
+  if (validate && totalValue != null && value > totalValue) {
+    value = totalValue;
+  }
+  return value;
+};
+export var hasDuplicate = ary => {
+  if (!Array.isArray(ary)) {
+    return false;
+  }
+  var len = ary.length;
+  var cache = {};
+  for (var i = 0; i < len; i++) {
+    if (!cache[ary[i]]) {
+      cache[ary[i]] = true;
+    } else {
+      return true;
+    }
+  }
+  return false;
+};
+
+/**
+ * @deprecated instead use {@link interpolate}
+ *  this function returns a function that is called immediately in all use-cases.
+ *  Instead, use interpolate which returns a number and skips the anonymous function step.
+ *  @param numberA The first number
+ *  @param numberB The second number
+ *  @return A function that returns the interpolated number
+ */
+export var interpolateNumber = (numberA, numberB) => {
+  if (isNumber(numberA) && isNumber(numberB)) {
+    return t => numberA + t * (numberB - numberA);
+  }
+  return () => numberB;
+};
+export function interpolate(start, end, t) {
+  if (isNumber(start) && isNumber(end)) {
+    return start + t * (end - start);
+  }
+  return end;
+}
+export function findEntryInArray(ary, specifiedKey, specifiedValue) {
+  if (!ary || !ary.length) {
+    return undefined;
+  }
+  return ary.find(entry => entry && (typeof specifiedKey === 'function' ? specifiedKey(entry) : get(entry, specifiedKey)) === specifiedValue);
+}
+
+/**
+ * The least square linear regression
+ * @param {Array} data The array of points
+ * @returns {Object} The domain of x, and the parameter of linear function
+ */
+export var getLinearRegression = data => {
+  if (!data || !data.length) {
+    return null;
+  }
+  var len = data.length;
+  var xsum = 0;
+  var ysum = 0;
+  var xysum = 0;
+  var xxsum = 0;
+  var xmin = Infinity;
+  var xmax = -Infinity;
+  var xcurrent = 0;
+  var ycurrent = 0;
+  for (var i = 0; i < len; i++) {
+    xcurrent = data[i].cx || 0;
+    ycurrent = data[i].cy || 0;
+    xsum += xcurrent;
+    ysum += ycurrent;
+    xysum += xcurrent * ycurrent;
+    xxsum += xcurrent * xcurrent;
+    xmin = Math.min(xmin, xcurrent);
+    xmax = Math.max(xmax, xcurrent);
+  }
+  var a = len * xxsum !== xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0;
+  return {
+    xmin,
+    xmax,
+    a,
+    b: (ysum - a * xsum) / len
+  };
+};
+/**
+ * Checks if the value is null or undefined
+ * @param value The value to check
+ * @returns true if the value is null or undefined
+ */
+export var isNullish = value => {
+  return value === null || typeof value === 'undefined';
+};
+
+/**
+ *Uppercase the first letter of a string
+ * @param {string} value The string to uppercase
+ * @returns {string} The uppercased string
+ */
+export var upperFirst = value => {
+  if (isNullish(value)) {
+    return value;
+  }
+  return "".concat(value.charAt(0).toUpperCase()).concat(value.slice(1));
+};
Index: node_modules/recharts/es6/util/Events.js
===================================================================
--- node_modules/recharts/es6/util/Events.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/Events.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import EventEmitter from 'eventemitter3';
+var eventCenter = new EventEmitter();
+export { eventCenter };
+export var TOOLTIP_SYNC_EVENT = 'recharts.syncEvent.tooltip';
+export var BRUSH_SYNC_EVENT = 'recharts.syncEvent.brush';
Index: node_modules/recharts/es6/util/FunnelUtils.js
===================================================================
--- node_modules/recharts/es6/util/FunnelUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/FunnelUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { Shape, getPropsFromShapeOption } from './ActiveShapeUtils';
+
+// Trapezoid props is expecting x, y, height as numbers.
+// When props are being spread in from a user defined component in Funnel,
+// the prop types of an SVGElement have these typed as string | number.
+// This function will return the passed in props along with x, y, height as numbers.
+export function typeGuardTrapezoidProps(option, props) {
+  var xValue = "".concat(props.x || option.x);
+  var x = parseInt(xValue, 10);
+  var yValue = "".concat(props.y || option.y);
+  var y = parseInt(yValue, 10);
+  var heightValue = "".concat((props === null || props === void 0 ? void 0 : props.height) || (option === null || option === void 0 ? void 0 : option.height));
+  var height = parseInt(heightValue, 10);
+  return _objectSpread(_objectSpread(_objectSpread({}, props), getPropsFromShapeOption(option)), {}, {
+    height,
+    x,
+    y
+  });
+}
+export function FunnelTrapezoid(props) {
+  return /*#__PURE__*/React.createElement(Shape, _extends({
+    shapeType: "trapezoid",
+    propTransformer: typeGuardTrapezoidProps
+  }, props));
+}
Index: node_modules/recharts/es6/util/Global.js
===================================================================
--- node_modules/recharts/es6/util/Global.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/Global.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+var parseIsSsrByDefault = () => !(typeof window !== 'undefined' && window.document && Boolean(window.document.createElement) && window.setTimeout);
+export var Global = {
+  isSsr: parseIsSsrByDefault()
+};
Index: node_modules/recharts/es6/util/IfOverflow.js
===================================================================
--- node_modules/recharts/es6/util/IfOverflow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/IfOverflow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/util/LRUCache.js
===================================================================
--- node_modules/recharts/es6/util/LRUCache.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/LRUCache.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * Simple LRU (Least Recently Used) cache implementation
+ */
+export class LRUCache {
+  constructor(maxSize) {
+    _defineProperty(this, "cache", new Map());
+    this.maxSize = maxSize;
+  }
+  get(key) {
+    var value = this.cache.get(key);
+    if (value !== undefined) {
+      this.cache.delete(key);
+      this.cache.set(key, value);
+    }
+    return value;
+  }
+  set(key, value) {
+    if (this.cache.has(key)) {
+      this.cache.delete(key);
+    } else if (this.cache.size >= this.maxSize) {
+      var firstKey = this.cache.keys().next().value;
+      this.cache.delete(firstKey);
+    }
+    this.cache.set(key, value);
+  }
+  clear() {
+    this.cache.clear();
+  }
+  size() {
+    return this.cache.size;
+  }
+}
Index: node_modules/recharts/es6/util/LogUtils.js
===================================================================
--- node_modules/recharts/es6/util/LogUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/LogUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+/* eslint no-console: 0 */
+var isDev = process.env.NODE_ENV !== 'production';
+export var warn = function warn(condition, format) {
+  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+    args[_key - 2] = arguments[_key];
+  }
+  if (isDev && typeof console !== 'undefined' && console.warn) {
+    if (format === undefined) {
+      console.warn('LogUtils requires an error message argument');
+    }
+    if (!condition) {
+      if (format === undefined) {
+        console.warn('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
+      } else {
+        var argIndex = 0;
+        console.warn(format.replace(/%s/g, () => args[argIndex++]));
+      }
+    }
+  }
+};
Index: node_modules/recharts/es6/util/PolarUtils.js
===================================================================
--- node_modules/recharts/es6/util/PolarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/PolarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,146 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import { isValidElement } from 'react';
+export var RADIAN = Math.PI / 180;
+export var degreeToRadian = angle => angle * Math.PI / 180;
+export var radianToDegree = angleInRadian => angleInRadian * 180 / Math.PI;
+export var polarToCartesian = (cx, cy, radius, angle) => ({
+  x: cx + Math.cos(-RADIAN * angle) * radius,
+  y: cy + Math.sin(-RADIAN * angle) * radius
+});
+export var getMaxRadius = function getMaxRadius(width, height) {
+  var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0,
+    width: 0,
+    height: 0,
+    brushBottom: 0
+  };
+  return Math.min(Math.abs(width - (offset.left || 0) - (offset.right || 0)), Math.abs(height - (offset.top || 0) - (offset.bottom || 0))) / 2;
+};
+export var distanceBetweenPoints = (point, anotherPoint) => {
+  var {
+    x: x1,
+    y: y1
+  } = point;
+  var {
+    x: x2,
+    y: y2
+  } = anotherPoint;
+  return Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);
+};
+export var getAngleOfPoint = (_ref, _ref2) => {
+  var {
+    x,
+    y
+  } = _ref;
+  var {
+    cx,
+    cy
+  } = _ref2;
+  var radius = distanceBetweenPoints({
+    x,
+    y
+  }, {
+    x: cx,
+    y: cy
+  });
+  if (radius <= 0) {
+    return {
+      radius,
+      angle: 0
+    };
+  }
+  var cos = (x - cx) / radius;
+  var angleInRadian = Math.acos(cos);
+  if (y > cy) {
+    angleInRadian = 2 * Math.PI - angleInRadian;
+  }
+  return {
+    radius,
+    angle: radianToDegree(angleInRadian),
+    angleInRadian
+  };
+};
+export var formatAngleOfSector = _ref3 => {
+  var {
+    startAngle,
+    endAngle
+  } = _ref3;
+  var startCnt = Math.floor(startAngle / 360);
+  var endCnt = Math.floor(endAngle / 360);
+  var min = Math.min(startCnt, endCnt);
+  return {
+    startAngle: startAngle - min * 360,
+    endAngle: endAngle - min * 360
+  };
+};
+var reverseFormatAngleOfSector = (angle, _ref4) => {
+  var {
+    startAngle,
+    endAngle
+  } = _ref4;
+  var startCnt = Math.floor(startAngle / 360);
+  var endCnt = Math.floor(endAngle / 360);
+  var min = Math.min(startCnt, endCnt);
+  return angle + min * 360;
+};
+export var inRangeOfSector = (_ref5, viewBox) => {
+  var {
+    x,
+    y
+  } = _ref5;
+  var {
+    radius,
+    angle
+  } = getAngleOfPoint({
+    x,
+    y
+  }, viewBox);
+  var {
+    innerRadius,
+    outerRadius
+  } = viewBox;
+  if (radius < innerRadius || radius > outerRadius) {
+    return null;
+  }
+  if (radius === 0) {
+    return null;
+  }
+  var {
+    startAngle,
+    endAngle
+  } = formatAngleOfSector(viewBox);
+  var formatAngle = angle;
+  var inRange;
+  if (startAngle <= endAngle) {
+    while (formatAngle > endAngle) {
+      formatAngle -= 360;
+    }
+    while (formatAngle < startAngle) {
+      formatAngle += 360;
+    }
+    inRange = formatAngle >= startAngle && formatAngle <= endAngle;
+  } else {
+    while (formatAngle > startAngle) {
+      formatAngle -= 360;
+    }
+    while (formatAngle < endAngle) {
+      formatAngle += 360;
+    }
+    inRange = formatAngle >= endAngle && formatAngle <= startAngle;
+  }
+  if (inRange) {
+    return _objectSpread(_objectSpread({}, viewBox), {}, {
+      radius,
+      angle: reverseFormatAngleOfSector(formatAngle, viewBox)
+    });
+  }
+  return null;
+};
+export var getTickClassName = tick => ! /*#__PURE__*/isValidElement(tick) && typeof tick !== 'function' && typeof tick !== 'boolean' && tick != null ? tick.className : '';
Index: node_modules/recharts/es6/util/RadialBarUtils.js
===================================================================
--- node_modules/recharts/es6/util/RadialBarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/RadialBarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+import * as React from 'react';
+import { Shape } from './ActiveShapeUtils';
+export function parseCornerRadius(cornerRadius) {
+  if (typeof cornerRadius === 'string') {
+    return parseInt(cornerRadius, 10);
+  }
+  return cornerRadius;
+}
+
+// Sector props is expecting cx, cy as numbers.
+// When props are being spread in from a user defined component in RadialBar,
+// the prop types of an SVGElement have these typed as string | number.
+// This function will return the passed in props along with cx, cy as numbers.
+export function typeGuardSectorProps(option, props) {
+  var cxValue = "".concat(props.cx || option.cx);
+  var cx = Number(cxValue);
+  var cyValue = "".concat(props.cy || option.cy);
+  var cy = Number(cyValue);
+  return _objectSpread(_objectSpread(_objectSpread({}, props), option), {}, {
+    cx,
+    cy
+  });
+}
+export function RadialBarSector(props) {
+  return /*#__PURE__*/React.createElement(Shape, _extends({
+    shapeType: "sector",
+    propTransformer: typeGuardSectorProps
+  }, props));
+}
Index: node_modules/recharts/es6/util/ReactUtils.js
===================================================================
--- node_modules/recharts/es6/util/ReactUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/ReactUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,154 @@
+import get from 'es-toolkit/compat/get';
+import { Children, isValidElement } from 'react';
+import { isFragment } from 'react-is';
+import { isNullish } from './DataUtils';
+import { FilteredElementKeyMap } from './types';
+import { isEventKey } from './excludeEventProps';
+import { isSvgElementPropKey } from './svgPropertiesNoEvents';
+export var SCALE_TYPES = ['auto', 'linear', 'pow', 'sqrt', 'log', 'identity', 'time', 'band', 'point', 'ordinal', 'quantile', 'quantize', 'utc', 'sequential', 'threshold'];
+
+/**
+ * @deprecated instead find another approach that does not depend on displayName.
+ * Get the display name of a component
+ * @param  {Object} Comp Specified Component
+ * @return {String}      Display name of Component
+ */
+export var getDisplayName = Comp => {
+  if (typeof Comp === 'string') {
+    return Comp;
+  }
+  if (!Comp) {
+    return '';
+  }
+  return Comp.displayName || Comp.name || 'Component';
+};
+
+// `toArray` gets called multiple times during the render
+// so we can memoize last invocation (since reference to `children` is the same)
+var lastChildren = null;
+var lastResult = null;
+
+/**
+ * @deprecated instead find another approach that does not require reading React Elements from DOM.
+ *
+ * @param children do not use
+ * @return deprecated do not use
+ */
+export var toArray = children => {
+  if (children === lastChildren && Array.isArray(lastResult)) {
+    return lastResult;
+  }
+  var result = [];
+  Children.forEach(children, child => {
+    if (isNullish(child)) return;
+    if (isFragment(child)) {
+      result = result.concat(toArray(child.props.children));
+    } else {
+      // @ts-expect-error this could still be Iterable<ReactNode> and TS does not like that
+      result.push(child);
+    }
+  });
+  lastResult = result;
+  lastChildren = children;
+  return result;
+};
+
+/**
+ * @deprecated instead find another approach that does not require reading React Elements from DOM.
+ *
+ * Find and return all matched children by type.
+ * `type` must be a React.ComponentType
+ *
+ * @param children do not use
+ * @param type do not use
+ * @return deprecated do not use
+ */
+export function findAllByType(children, type) {
+  var result = [];
+  var types = [];
+  if (Array.isArray(type)) {
+    types = type.map(t => getDisplayName(t));
+  } else {
+    types = [getDisplayName(type)];
+  }
+  toArray(children).forEach(child => {
+    var childType = get(child, 'type.displayName') || get(child, 'type.name');
+    // ts-expect-error toArray and lodash.get are not compatible. Let's get rid of the whole findAllByType function
+    if (types.indexOf(childType) !== -1) {
+      result.push(child);
+    }
+  });
+  return result;
+}
+export var isClipDot = dot => {
+  if (dot && typeof dot === 'object' && 'clipDot' in dot) {
+    return Boolean(dot.clipDot);
+  }
+  return true;
+};
+
+/**
+ * Checks if the property is valid to spread onto an SVG element or onto a specific component
+ * @param {unknown} property property value currently being compared
+ * @param {string} key property key currently being compared
+ * @param {boolean} includeEvents if events are included in spreadable props
+ * @param {boolean} svgElementType checks against map of SVG element types to attributes
+ * @returns {boolean} is prop valid
+ */
+export var isValidSpreadableProp = (property, key, includeEvents, svgElementType) => {
+  var _ref;
+  if (typeof key === 'symbol' || typeof key === 'number') {
+    // Allow symbols and numbers as valid keys
+    return true;
+  }
+  /**
+   * If the svg element type is explicitly included, check against the filtered element key map
+   * to determine if there are attributes that should only exist on that element type.
+   * @todo Add an internal cjs version of https://github.com/wooorm/svg-element-attributes for full coverage.
+   */
+  var matchingElementTypeKeys = (_ref = svgElementType && (FilteredElementKeyMap === null || FilteredElementKeyMap === void 0 ? void 0 : FilteredElementKeyMap[svgElementType])) !== null && _ref !== void 0 ? _ref : [];
+  var isDataAttribute = key.startsWith('data-');
+  var isSpecificSvgAttribute = typeof property !== 'function' && (Boolean(svgElementType) && matchingElementTypeKeys.includes(key) || isSvgElementPropKey(key));
+  var isEventAttribute = Boolean(includeEvents) && isEventKey(key);
+  return isDataAttribute || isSpecificSvgAttribute || isEventAttribute;
+};
+
+/**
+ * Filters the props object to only include valid SVG attributes or event handlers.
+ * @deprecated do not use this function, as it is not type-safe and may lead to unexpected behavior. Returns `any`.
+ * Instead, use:
+ * - `excludeEventProps` to exclude event handlers
+ * - `svgOnlyNoEvents` to exclude non-SVG attributes, and exclude event handlers too
+ * @param props - The props object to filter, which can be a Record, Component, FunctionComponent, boolean, or unknown.
+ * @param includeEvents - A boolean indicating whether to include event handlers in the filtered props.
+ * @param svgElementType - An optional parameter specifying the type of SVG element to filter attributes for.
+ * @returns A new object containing only valid SVG attributes or event handlers, or null if the input is not valid.
+ */
+export var filterProps = (props, includeEvents, svgElementType) => {
+  if (!props || typeof props === 'function' || typeof props === 'boolean') {
+    return null;
+  }
+  var inputProps = props;
+  if (/*#__PURE__*/isValidElement(props)) {
+    inputProps = props.props;
+  }
+  if (typeof inputProps !== 'object' && typeof inputProps !== 'function') {
+    return null;
+  }
+  var out = {};
+
+  /**
+   * Props are blindly spread onto SVG elements. This loop filters out properties that we don't want to spread.
+   * Items filtered out are as follows:
+   *   - functions in properties that are SVG attributes (functions are included when includeEvents is true)
+   *   - props that are SVG attributes but don't matched the passed svgElementType
+   *   - any prop that is not in SVGElementPropKeys (or in EventKeys if includeEvents is true)
+   */
+  Object.keys(inputProps).forEach(key => {
+    var _inputProps;
+    if (isValidSpreadableProp((_inputProps = inputProps) === null || _inputProps === void 0 ? void 0 : _inputProps[key], key, includeEvents, svgElementType)) {
+      out[key] = inputProps[key];
+    }
+  });
+  return out;
+};
Index: node_modules/recharts/es6/util/ReduceCSSCalc.js
===================================================================
--- node_modules/recharts/es6/util/ReduceCSSCalc.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/ReduceCSSCalc.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,133 @@
+import { isNan } from './DataUtils';
+var MULTIPLY_OR_DIVIDE_REGEX = /(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/;
+var ADD_OR_SUBTRACT_REGEX = /(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/;
+var CSS_LENGTH_UNIT_REGEX = /^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/;
+var NUM_SPLIT_REGEX = /(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/;
+var CONVERSION_RATES = {
+  cm: 96 / 2.54,
+  mm: 96 / 25.4,
+  pt: 96 / 72,
+  pc: 96 / 6,
+  in: 96,
+  Q: 96 / (2.54 * 40),
+  px: 1
+};
+var FIXED_CSS_LENGTH_UNITS = Object.keys(CONVERSION_RATES);
+var STR_NAN = 'NaN';
+function convertToPx(value, unit) {
+  return value * CONVERSION_RATES[unit];
+}
+class DecimalCSS {
+  static parse(str) {
+    var _NUM_SPLIT_REGEX$exec;
+    var [, numStr, unit] = (_NUM_SPLIT_REGEX$exec = NUM_SPLIT_REGEX.exec(str)) !== null && _NUM_SPLIT_REGEX$exec !== void 0 ? _NUM_SPLIT_REGEX$exec : [];
+    return new DecimalCSS(parseFloat(numStr), unit !== null && unit !== void 0 ? unit : '');
+  }
+  constructor(num, unit) {
+    this.num = num;
+    this.unit = unit;
+    this.num = num;
+    this.unit = unit;
+    if (isNan(num)) {
+      this.unit = '';
+    }
+    if (unit !== '' && !CSS_LENGTH_UNIT_REGEX.test(unit)) {
+      this.num = NaN;
+      this.unit = '';
+    }
+    if (FIXED_CSS_LENGTH_UNITS.includes(unit)) {
+      this.num = convertToPx(num, unit);
+      this.unit = 'px';
+    }
+  }
+  add(other) {
+    if (this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num + other.num, this.unit);
+  }
+  subtract(other) {
+    if (this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num - other.num, this.unit);
+  }
+  multiply(other) {
+    if (this.unit !== '' && other.unit !== '' && this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num * other.num, this.unit || other.unit);
+  }
+  divide(other) {
+    if (this.unit !== '' && other.unit !== '' && this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num / other.num, this.unit || other.unit);
+  }
+  toString() {
+    return "".concat(this.num).concat(this.unit);
+  }
+  isNaN() {
+    return isNan(this.num);
+  }
+}
+function calculateArithmetic(expr) {
+  if (expr.includes(STR_NAN)) {
+    return STR_NAN;
+  }
+  var newExpr = expr;
+  while (newExpr.includes('*') || newExpr.includes('/')) {
+    var _MULTIPLY_OR_DIVIDE_R;
+    var [, leftOperand, operator, rightOperand] = (_MULTIPLY_OR_DIVIDE_R = MULTIPLY_OR_DIVIDE_REGEX.exec(newExpr)) !== null && _MULTIPLY_OR_DIVIDE_R !== void 0 ? _MULTIPLY_OR_DIVIDE_R : [];
+    var lTs = DecimalCSS.parse(leftOperand !== null && leftOperand !== void 0 ? leftOperand : '');
+    var rTs = DecimalCSS.parse(rightOperand !== null && rightOperand !== void 0 ? rightOperand : '');
+    var result = operator === '*' ? lTs.multiply(rTs) : lTs.divide(rTs);
+    if (result.isNaN()) {
+      return STR_NAN;
+    }
+    newExpr = newExpr.replace(MULTIPLY_OR_DIVIDE_REGEX, result.toString());
+  }
+  while (newExpr.includes('+') || /.-\d+(?:\.\d+)?/.test(newExpr)) {
+    var _ADD_OR_SUBTRACT_REGE;
+    var [, _leftOperand, _operator, _rightOperand] = (_ADD_OR_SUBTRACT_REGE = ADD_OR_SUBTRACT_REGEX.exec(newExpr)) !== null && _ADD_OR_SUBTRACT_REGE !== void 0 ? _ADD_OR_SUBTRACT_REGE : [];
+    var _lTs = DecimalCSS.parse(_leftOperand !== null && _leftOperand !== void 0 ? _leftOperand : '');
+    var _rTs = DecimalCSS.parse(_rightOperand !== null && _rightOperand !== void 0 ? _rightOperand : '');
+    var _result = _operator === '+' ? _lTs.add(_rTs) : _lTs.subtract(_rTs);
+    if (_result.isNaN()) {
+      return STR_NAN;
+    }
+    newExpr = newExpr.replace(ADD_OR_SUBTRACT_REGEX, _result.toString());
+  }
+  return newExpr;
+}
+var PARENTHESES_REGEX = /\(([^()]*)\)/;
+function calculateParentheses(expr) {
+  var newExpr = expr;
+  var match;
+  // eslint-disable-next-line no-cond-assign
+  while ((match = PARENTHESES_REGEX.exec(newExpr)) != null) {
+    var [, parentheticalExpression] = match;
+    newExpr = newExpr.replace(PARENTHESES_REGEX, calculateArithmetic(parentheticalExpression));
+  }
+  return newExpr;
+}
+function evaluateExpression(expression) {
+  var newExpr = expression.replace(/\s+/g, '');
+  newExpr = calculateParentheses(newExpr);
+  newExpr = calculateArithmetic(newExpr);
+  return newExpr;
+}
+export function safeEvaluateExpression(expression) {
+  try {
+    return evaluateExpression(expression);
+  } catch (_unused) {
+    return STR_NAN;
+  }
+}
+export function reduceCSSCalc(expression) {
+  var result = safeEvaluateExpression(expression.slice(5, -1));
+  if (result === STR_NAN) {
+    return '';
+  }
+  return result;
+}
Index: node_modules/recharts/es6/util/ScatterUtils.js
===================================================================
--- node_modules/recharts/es6/util/ScatterUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/ScatterUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+var _excluded = ["option", "isActive"];
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { Symbols } from '../shape/Symbols';
+import { Shape } from './ActiveShapeUtils';
+export function ScatterSymbol(_ref) {
+  var {
+      option,
+      isActive
+    } = _ref,
+    props = _objectWithoutProperties(_ref, _excluded);
+  if (typeof option === 'string') {
+    return /*#__PURE__*/React.createElement(Shape, _extends({
+      option: /*#__PURE__*/React.createElement(Symbols, _extends({
+        type: option
+      }, props)),
+      isActive: isActive,
+      shapeType: "symbols"
+    }, props));
+  }
+  return /*#__PURE__*/React.createElement(Shape, _extends({
+    option: option,
+    isActive: isActive,
+    shapeType: "symbols"
+  }, props));
+}
Index: node_modules/recharts/es6/util/ShallowEqual.js
===================================================================
--- node_modules/recharts/es6/util/ShallowEqual.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/ShallowEqual.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+export function shallowEqual(a, b) {
+  /* eslint-disable no-restricted-syntax */
+  for (var key in a) {
+    if ({}.hasOwnProperty.call(a, key) && (!{}.hasOwnProperty.call(b, key) || a[key] !== b[key])) {
+      return false;
+    }
+  }
+  for (var _key in b) {
+    if ({}.hasOwnProperty.call(b, _key) && !{}.hasOwnProperty.call(a, _key)) {
+      return false;
+    }
+  }
+  return true;
+}
Index: node_modules/recharts/es6/util/TickUtils.js
===================================================================
--- node_modules/recharts/es6/util/TickUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/TickUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { getAngledRectangleWidth } from './CartesianUtils';
+import { getEveryNthWithCondition } from './getEveryNthWithCondition';
+export function getAngledTickWidth(contentSize, unitSize, angle) {
+  var size = {
+    width: contentSize.width + unitSize.width,
+    height: contentSize.height + unitSize.height
+  };
+  return getAngledRectangleWidth(size, angle);
+}
+export function getTickBoundaries(viewBox, sign, sizeKey) {
+  var isWidth = sizeKey === 'width';
+  var {
+    x,
+    y,
+    width,
+    height
+  } = viewBox;
+  if (sign === 1) {
+    return {
+      start: isWidth ? x : y,
+      end: isWidth ? x + width : y + height
+    };
+  }
+  return {
+    start: isWidth ? x + width : y + height,
+    end: isWidth ? x : y
+  };
+}
+export function isVisible(sign, tickPosition, getSize, start, end) {
+  /* Since getSize() is expensive (it reads the ticks' size from the DOM), we do this check first to avoid calculating
+   * the tick's size. */
+  if (sign * tickPosition < sign * start || sign * tickPosition > sign * end) {
+    return false;
+  }
+  var size = getSize();
+  return sign * (tickPosition - sign * size / 2 - start) >= 0 && sign * (tickPosition + sign * size / 2 - end) <= 0;
+}
+export function getNumberIntervalTicks(ticks, interval) {
+  return getEveryNthWithCondition(ticks, interval + 1);
+}
Index: node_modules/recharts/es6/util/YAxisUtils.js
===================================================================
--- node_modules/recharts/es6/util/YAxisUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/YAxisUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+/**
+ * Calculates the width of the Y-axis based on the tick labels and the axis label.
+ * @param {Object} params - The parameters object.
+ * @param {React.RefObject<any>} params.cartesianAxisRef - The ref to the CartesianAxis component.
+ * @param {React.RefObject<Element>} params.labelRef - The ref to the label element.
+ * @param {number} [params.labelGapWithTick=5] - The gap between the label and the tick.
+ * @returns {number} The calculated width of the Y-axis.
+ */
+export var getCalculatedYAxisWidth = _ref => {
+  var {
+    ticks,
+    label,
+    labelGapWithTick = 5,
+    // Default gap between label and tick
+    tickSize = 0,
+    tickMargin = 0
+  } = _ref;
+  // find the max width of the tick labels
+  var maxTickWidth = 0;
+  if (ticks) {
+    ticks.forEach(tickNode => {
+      if (tickNode) {
+        var bbox = tickNode.getBoundingClientRect();
+        if (bbox.width > maxTickWidth) {
+          maxTickWidth = bbox.width;
+        }
+      }
+    });
+
+    // calculate width of the axis label
+    var labelWidth = label ? label.getBoundingClientRect().width : 0;
+    var tickWidth = tickSize + tickMargin;
+
+    // calculate the updated width of the y-axis
+    var updatedYAxisWidth = maxTickWidth + tickWidth + labelWidth + (label ? labelGapWithTick : 0);
+    return Math.round(updatedYAxisWidth);
+  }
+  return 0;
+};
Index: node_modules/recharts/es6/util/cursor/getCursorPoints.js
===================================================================
--- node_modules/recharts/es6/util/cursor/getCursorPoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/cursor/getCursorPoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+import { polarToCartesian } from '../PolarUtils';
+import { getRadialCursorPoints } from './getRadialCursorPoints';
+export function getCursorPoints(layout, activeCoordinate, offset) {
+  var x1, y1, x2, y2;
+  if (layout === 'horizontal') {
+    x1 = activeCoordinate.x;
+    x2 = x1;
+    y1 = offset.top;
+    y2 = offset.top + offset.height;
+  } else if (layout === 'vertical') {
+    y1 = activeCoordinate.y;
+    y2 = y1;
+    x1 = offset.left;
+    x2 = offset.left + offset.width;
+  } else if (activeCoordinate.cx != null && activeCoordinate.cy != null) {
+    if (layout === 'centric') {
+      var {
+        cx,
+        cy,
+        innerRadius,
+        outerRadius,
+        angle
+      } = activeCoordinate;
+      var innerPoint = polarToCartesian(cx, cy, innerRadius, angle);
+      var outerPoint = polarToCartesian(cx, cy, outerRadius, angle);
+      x1 = innerPoint.x;
+      y1 = innerPoint.y;
+      x2 = outerPoint.x;
+      y2 = outerPoint.y;
+    } else {
+      // @ts-expect-error TODO the state is marked as containing Coordinate but actually in polar charts it contains PolarCoordinate, we should keep the polar state separate
+      return getRadialCursorPoints(activeCoordinate);
+    }
+  }
+  return [{
+    x: x1,
+    y: y1
+  }, {
+    x: x2,
+    y: y2
+  }];
+}
Index: node_modules/recharts/es6/util/cursor/getCursorRectangle.js
===================================================================
--- node_modules/recharts/es6/util/cursor/getCursorRectangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/cursor/getCursorRectangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+export function getCursorRectangle(layout, activeCoordinate, offset, tooltipAxisBandSize) {
+  var halfSize = tooltipAxisBandSize / 2;
+  return {
+    stroke: 'none',
+    fill: '#ccc',
+    x: layout === 'horizontal' ? activeCoordinate.x - halfSize : offset.left + 0.5,
+    y: layout === 'horizontal' ? offset.top + 0.5 : activeCoordinate.y - halfSize,
+    width: layout === 'horizontal' ? tooltipAxisBandSize : offset.width - 1,
+    height: layout === 'horizontal' ? offset.height - 1 : tooltipAxisBandSize
+  };
+}
Index: node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js
===================================================================
--- node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+import { polarToCartesian } from '../PolarUtils';
+/**
+ * Only applicable for radial layouts
+ * @param {Object} activeCoordinate ChartCoordinate
+ * @returns {Object} RadialCursorPoints
+ */
+export function getRadialCursorPoints(activeCoordinate) {
+  var {
+    cx,
+    cy,
+    radius,
+    startAngle,
+    endAngle
+  } = activeCoordinate;
+  var startPoint = polarToCartesian(cx, cy, radius, startAngle);
+  var endPoint = polarToCartesian(cx, cy, radius, endAngle);
+  return {
+    points: [startPoint, endPoint],
+    cx,
+    cy,
+    radius,
+    startAngle,
+    endAngle
+  };
+}
Index: node_modules/recharts/es6/util/excludeEventProps.js
===================================================================
--- node_modules/recharts/es6/util/excludeEventProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/excludeEventProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+var EventKeys = ['dangerouslySetInnerHTML', 'onCopy', 'onCopyCapture', 'onCut', 'onCutCapture', 'onPaste', 'onPasteCapture', 'onCompositionEnd', 'onCompositionEndCapture', 'onCompositionStart', 'onCompositionStartCapture', 'onCompositionUpdate', 'onCompositionUpdateCapture', 'onFocus', 'onFocusCapture', 'onBlur', 'onBlurCapture', 'onChange', 'onChangeCapture', 'onBeforeInput', 'onBeforeInputCapture', 'onInput', 'onInputCapture', 'onReset', 'onResetCapture', 'onSubmit', 'onSubmitCapture', 'onInvalid', 'onInvalidCapture', 'onLoad', 'onLoadCapture', 'onError', 'onErrorCapture', 'onKeyDown', 'onKeyDownCapture', 'onKeyPress', 'onKeyPressCapture', 'onKeyUp', 'onKeyUpCapture', 'onAbort', 'onAbortCapture', 'onCanPlay', 'onCanPlayCapture', 'onCanPlayThrough', 'onCanPlayThroughCapture', 'onDurationChange', 'onDurationChangeCapture', 'onEmptied', 'onEmptiedCapture', 'onEncrypted', 'onEncryptedCapture', 'onEnded', 'onEndedCapture', 'onLoadedData', 'onLoadedDataCapture', 'onLoadedMetadata', 'onLoadedMetadataCapture', 'onLoadStart', 'onLoadStartCapture', 'onPause', 'onPauseCapture', 'onPlay', 'onPlayCapture', 'onPlaying', 'onPlayingCapture', 'onProgress', 'onProgressCapture', 'onRateChange', 'onRateChangeCapture', 'onSeeked', 'onSeekedCapture', 'onSeeking', 'onSeekingCapture', 'onStalled', 'onStalledCapture', 'onSuspend', 'onSuspendCapture', 'onTimeUpdate', 'onTimeUpdateCapture', 'onVolumeChange', 'onVolumeChangeCapture', 'onWaiting', 'onWaitingCapture', 'onAuxClick', 'onAuxClickCapture', 'onClick', 'onClickCapture', 'onContextMenu', 'onContextMenuCapture', 'onDoubleClick', 'onDoubleClickCapture', 'onDrag', 'onDragCapture', 'onDragEnd', 'onDragEndCapture', 'onDragEnter', 'onDragEnterCapture', 'onDragExit', 'onDragExitCapture', 'onDragLeave', 'onDragLeaveCapture', 'onDragOver', 'onDragOverCapture', 'onDragStart', 'onDragStartCapture', 'onDrop', 'onDropCapture', 'onMouseDown', 'onMouseDownCapture', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseMoveCapture', 'onMouseOut', 'onMouseOutCapture', 'onMouseOver', 'onMouseOverCapture', 'onMouseUp', 'onMouseUpCapture', 'onSelect', 'onSelectCapture', 'onTouchCancel', 'onTouchCancelCapture', 'onTouchEnd', 'onTouchEndCapture', 'onTouchMove', 'onTouchMoveCapture', 'onTouchStart', 'onTouchStartCapture', 'onPointerDown', 'onPointerDownCapture', 'onPointerMove', 'onPointerMoveCapture', 'onPointerUp', 'onPointerUpCapture', 'onPointerCancel', 'onPointerCancelCapture', 'onPointerEnter', 'onPointerEnterCapture', 'onPointerLeave', 'onPointerLeaveCapture', 'onPointerOver', 'onPointerOverCapture', 'onPointerOut', 'onPointerOutCapture', 'onGotPointerCapture', 'onGotPointerCaptureCapture', 'onLostPointerCapture', 'onLostPointerCaptureCapture', 'onScroll', 'onScrollCapture', 'onWheel', 'onWheelCapture', 'onAnimationStart', 'onAnimationStartCapture', 'onAnimationEnd', 'onAnimationEndCapture', 'onAnimationIteration', 'onAnimationIterationCapture', 'onTransitionEnd', 'onTransitionEndCapture'];
+export function isEventKey(key) {
+  if (typeof key !== 'string') {
+    return false;
+  }
+  var allowedEventKeys = EventKeys;
+  return allowedEventKeys.includes(key);
+}
+
+/**
+ * Filters out event properties from the given object.
+ * This function is useful for cleaning up props before passing them to a React component,
+ * @param obj - The object containing properties to filter.
+ * @returns A new object containing only the properties that are not event handlers.
+ */
+export function excludeEventProps(obj) {
+  var filteredEntries = Object.entries(obj).filter(_ref => {
+    var [key] = _ref;
+    return !isEventKey(key);
+  });
+  return Object.fromEntries(filteredEntries);
+}
Index: node_modules/recharts/es6/util/getChartPointer.js
===================================================================
--- node_modules/recharts/es6/util/getChartPointer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/getChartPointer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+/**
+ * Computes the chart coordinates from the mouse event.
+ *
+ * The coordinates are relative to the top-left corner of the chart,
+ * where the top-left corner of the chart is (0, 0).
+ * Moving right, the x-coordinate increases, and moving down, the y-coordinate increases.
+ *
+ * The coordinates are rounded to the nearest integer and are including a CSS transform scale.
+ * So a chart that's scaled will return the same coordinates as a chart that's not scaled.
+ *
+ * @param event The mouse event from React event handlers
+ * @return chartPointer The chart coordinates relative to the top-left corner of the chart
+ */
+export var getChartPointer = event => {
+  var rect = event.currentTarget.getBoundingClientRect();
+  var scaleX = rect.width / event.currentTarget.offsetWidth;
+  var scaleY = rect.height / event.currentTarget.offsetHeight;
+  return {
+    /*
+     * Here it's important to use:
+     * - event.clientX and event.clientY to get the mouse position relative to the viewport, including scroll.
+     * - pageX and pageY are not used because they are relative to the whole document, and ignore scroll.
+     * - rect.left and rect.top are used to get the position of the chart relative to the viewport.
+     * - offsetX and offsetY are not used because they are relative to the offset parent
+     *  which may or may not be the same as the clientX and clientY, depending on the position of the chart in the DOM
+     *  and surrounding element styles. CSS position: relative, absolute, fixed, will change the offset parent.
+     * - scaleX and scaleY are necessary for when the chart element is scaled using CSS `transform: scale(N)`.
+     */
+    chartX: Math.round((event.clientX - rect.left) / scaleX),
+    chartY: Math.round((event.clientY - rect.top) / scaleY)
+  };
+};
Index: node_modules/recharts/es6/util/getEveryNthWithCondition.js
===================================================================
--- node_modules/recharts/es6/util/getEveryNthWithCondition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/getEveryNthWithCondition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+/**
+ * Given an array and a number N, return a new array which contains every nTh
+ * element of the input array. For n below 1, an empty array is returned.
+ * If isValid is provided, all candidates must suffice the condition, else undefined is returned.
+ * @param {T[]} array An input array.
+ * @param {integer} n A number
+ * @param {Function} isValid A function to evaluate a candidate form the array
+ * @returns {T[]} The result array of the same type as the input array.
+ */
+export function getEveryNthWithCondition(array, n, isValid) {
+  if (n < 1) {
+    return [];
+  }
+  if (n === 1 && isValid === undefined) {
+    return array;
+  }
+  var result = [];
+  for (var i = 0; i < array.length; i += n) {
+    if (isValid === undefined || isValid(array[i]) === true) {
+      result.push(array[i]);
+    } else {
+      return undefined;
+    }
+  }
+  return result;
+}
Index: node_modules/recharts/es6/util/getSliced.js
===================================================================
--- node_modules/recharts/es6/util/getSliced.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/getSliced.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export function getSliced(arr, startIndex, endIndex) {
+  if (!Array.isArray(arr)) {
+    return arr;
+  }
+  if (arr && startIndex + endIndex !== 0) {
+    return arr.slice(startIndex, endIndex + 1);
+  }
+  return arr;
+}
Index: node_modules/recharts/es6/util/isDomainSpecifiedByUser.js
===================================================================
--- node_modules/recharts/es6/util/isDomainSpecifiedByUser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/isDomainSpecifiedByUser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,177 @@
+import { MAX_VALUE_REG, MIN_VALUE_REG } from './ChartUtils';
+import { isNumber } from './DataUtils';
+import { isWellBehavedNumber } from './isWellBehavedNumber';
+export function isWellFormedNumberDomain(v) {
+  if (Array.isArray(v) && v.length === 2) {
+    var [min, max] = v;
+    if (isWellBehavedNumber(min) && isWellBehavedNumber(max)) {
+      return true;
+    }
+  }
+  return false;
+}
+export function extendDomain(providedDomain, boundaryDomain, allowDataOverflow) {
+  if (allowDataOverflow) {
+    // If the data are allowed to overflow - we're fine with whatever user provided
+    return providedDomain;
+  }
+  /*
+   * If the data are not allowed to overflow - we need to extend the domain.
+   * Means that effectively the user is allowed to make the domain larger
+   * but not smaller.
+   */
+  return [Math.min(providedDomain[0], boundaryDomain[0]), Math.max(providedDomain[1], boundaryDomain[1])];
+}
+
+/**
+ * So Recharts allows users to provide their own domains,
+ * but it also places some expectations on what the domain is.
+ * We can improve on the typescript typing, but we also need a runtime test
+ to observe that the user-provided domain is well-formed,
+ * that is: an array with exactly two numbers.
+ *
+ * This function does not accept data as an argument.
+ * This is to enable a performance optimization - if the domain is there,
+ * and we know what it is without traversing all the data,
+ * then we don't have to traverse all the data!
+ *
+ * If the user-provided domain is not well-formed,
+ * this function will return undefined - in which case we should traverse the data to calculate the real domain.
+ *
+ * This function is for parsing the numerical domain only.
+ *
+ * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.
+ * @param allowDataOverflow boolean, provided by users. If true then the data domain wins
+ *
+ * @return [min, max] domain if it's well-formed; undefined if the domain is invalid
+ */
+export function numericalDomainSpecifiedWithoutRequiringData(userDomain, allowDataOverflow) {
+  if (!allowDataOverflow) {
+    // Cannot compute data overflow if the data is not provided
+    return undefined;
+  }
+  if (typeof userDomain === 'function') {
+    // The user function expects the data to be provided as an argument
+    return undefined;
+  }
+  if (Array.isArray(userDomain) && userDomain.length === 2) {
+    var [providedMin, providedMax] = userDomain;
+    var finalMin, finalMax;
+    if (isWellBehavedNumber(providedMin)) {
+      finalMin = providedMin;
+    } else if (typeof providedMin === 'function') {
+      // The user function expects the data to be provided as an argument
+      return undefined;
+    }
+    if (isWellBehavedNumber(providedMax)) {
+      finalMax = providedMax;
+    } else if (typeof providedMax === 'function') {
+      // The user function expects the data to be provided as an argument
+      return undefined;
+    }
+    var candidate = [finalMin, finalMax];
+    if (isWellFormedNumberDomain(candidate)) {
+      return candidate;
+    }
+  }
+  return undefined;
+}
+
+/**
+ * So Recharts allows users to provide their own domains,
+ * but it also places some expectations on what the domain is.
+ * We can improve on the typescript typing, but we also need a runtime test
+ * to observe that the user-provided domain is well-formed,
+ * that is: an array with exactly two numbers.
+ * If the user-provided domain is not well-formed,
+ * this function will return undefined - in which case we should traverse the data to calculate the real domain.
+ *
+ * This function is for parsing the numerical domain only.
+ *
+ * You are probably thinking, why does domain need tick count?
+ * Well it adjusts the domain based on where the "nice ticks" land, and nice ticks depend on the tick count.
+ *
+ * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.
+ * @param dataDomain calculated from data. Can be undefined, as an option for performance optimization
+ * @param allowDataOverflow provided by users. If true then the data domain wins
+ *
+ * @return [min, max] domain if it's well-formed; undefined if the domain is invalid
+ */
+export function parseNumericalUserDomain(userDomain, dataDomain, allowDataOverflow) {
+  if (!allowDataOverflow && dataDomain == null) {
+    // Cannot compute data overflow if the data is not provided
+    return undefined;
+  }
+  if (typeof userDomain === 'function' && dataDomain != null) {
+    try {
+      var result = userDomain(dataDomain, allowDataOverflow);
+      if (isWellFormedNumberDomain(result)) {
+        return extendDomain(result, dataDomain, allowDataOverflow);
+      }
+    } catch (_unused) {
+      /* ignore the exception and compute domain from data later */
+    }
+  }
+  if (Array.isArray(userDomain) && userDomain.length === 2) {
+    var [providedMin, providedMax] = userDomain;
+    var finalMin, finalMax;
+    if (providedMin === 'auto') {
+      if (dataDomain != null) {
+        finalMin = Math.min(...dataDomain);
+      }
+    } else if (isNumber(providedMin)) {
+      finalMin = providedMin;
+    } else if (typeof providedMin === 'function') {
+      try {
+        if (dataDomain != null) {
+          finalMin = providedMin(dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[0]);
+        }
+      } catch (_unused2) {
+        /* ignore the exception and compute domain from data later */
+      }
+    } else if (typeof providedMin === 'string' && MIN_VALUE_REG.test(providedMin)) {
+      var match = MIN_VALUE_REG.exec(providedMin);
+      if (match == null || dataDomain == null) {
+        finalMin = undefined;
+      } else {
+        var value = +match[1];
+        finalMin = dataDomain[0] - value;
+      }
+    } else {
+      finalMin = dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[0];
+    }
+    if (providedMax === 'auto') {
+      if (dataDomain != null) {
+        finalMax = Math.max(...dataDomain);
+      }
+    } else if (isNumber(providedMax)) {
+      finalMax = providedMax;
+    } else if (typeof providedMax === 'function') {
+      try {
+        if (dataDomain != null) {
+          finalMax = providedMax(dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[1]);
+        }
+      } catch (_unused3) {
+        /* ignore the exception and compute domain from data later */
+      }
+    } else if (typeof providedMax === 'string' && MAX_VALUE_REG.test(providedMax)) {
+      var _match = MAX_VALUE_REG.exec(providedMax);
+      if (_match == null || dataDomain == null) {
+        finalMax = undefined;
+      } else {
+        var _value = +_match[1];
+        finalMax = dataDomain[1] + _value;
+      }
+    } else {
+      finalMax = dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[1];
+    }
+    var candidate = [finalMin, finalMax];
+    if (isWellFormedNumberDomain(candidate)) {
+      if (dataDomain == null) {
+        return candidate;
+      }
+      return extendDomain(candidate, dataDomain, allowDataOverflow);
+    }
+  }
+  return undefined;
+}
Index: node_modules/recharts/es6/util/isWellBehavedNumber.js
===================================================================
--- node_modules/recharts/es6/util/isWellBehavedNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/isWellBehavedNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export function isWellBehavedNumber(n) {
+  return Number.isFinite(n);
+}
+export function isPositiveNumber(n) {
+  return typeof n === 'number' && n > 0 && Number.isFinite(n);
+}
Index: node_modules/recharts/es6/util/payload/getUniqPayload.js
===================================================================
--- node_modules/recharts/es6/util/payload/getUniqPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/payload/getUniqPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import uniqBy from 'es-toolkit/compat/uniqBy';
+
+/**
+ * This is configuration option that decides how to filter for unique values only:
+ *
+ * - `false` means "no filter"
+ * - `true` means "use recharts default filter"
+ * - function means "use return of this function as the default key"
+ */
+
+export function getUniqPayload(payload, option, defaultUniqBy) {
+  if (option === true) {
+    return uniqBy(payload, defaultUniqBy);
+  }
+  if (typeof option === 'function') {
+    return uniqBy(payload, option);
+  }
+  return payload;
+}
Index: node_modules/recharts/es6/util/resolveDefaultProps.js
===================================================================
--- node_modules/recharts/es6/util/resolveDefaultProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/resolveDefaultProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,85 @@
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * This function mimics the behavior of the `defaultProps` static property in React.
+ * Functional components do not have a defaultProps property, so this function is useful to resolve default props.
+ *
+ * The common recommendation is to use ES6 destructuring with default values in the function signature,
+ * but you need to be careful there and make sure you destructure all the individual properties
+ * and not the whole object. See the test file for example.
+ *
+ * And because destructuring all properties one by one is a faff, and it's easy to miss one property,
+ * this function exists.
+ *
+ * @param realProps - the props object passed to the component by the user
+ * @param defaultProps - the default props object defined in the component by Recharts
+ * @returns - the props object with all the default props resolved. All `undefined` values are replaced with the default value.
+ */
+export function resolveDefaultProps(realProps, defaultProps) {
+  /*
+   * To avoid mutating the original `realProps` object passed to the function, create a shallow copy of it.
+   * `resolvedProps` will be modified directly with the defaults.
+   */
+  var resolvedProps = _objectSpread({}, realProps);
+  /*
+   * Since the function guarantees `D extends Partial<T>`, this assignment is safe.
+   * It allows TypeScript to work with the well-defined `Partial<T>` type inside the loop,
+   * making subsequent type inference (especially for `dp[key]`) much more straightforward for the compiler.
+   * This is a key step to improve type safety *without* value assertions later.
+   */
+  var dp = defaultProps;
+  /*
+   * `Object.keys` doesn't preserve strong key types - it always returns Array<string>.
+   * However, due to the `D extends Partial<T>` constraint,
+   * we know these keys *must* also be valid keys of `T`.
+   * This assertion informs TypeScript of this relationship, avoiding type errors when using `key` to index `acc` (type T).
+   *
+   * Type assertions are not sound but in this case it's necessary
+   * as `Object.keys` does not do what we want it to do.
+   */
+  var keys = Object.keys(defaultProps);
+  var withDefaults = keys.reduce((acc, key) => {
+    if (acc[key] === undefined && dp[key] !== undefined) {
+      acc[key] = dp[key];
+    }
+    return acc;
+  }, resolvedProps);
+  /*
+   * And again type assertions are not safe but here we have done the runtime work
+   * so let's bypass the lack of static type safety and tell the compiler what happened.
+   */
+  return withDefaults;
+}
+
+/**
+ * Helper type to extract the keys of T that are required.
+ * It iterates through each key K in T. If Pick<T, K> cannot be assigned an empty object {},
+ * it means K is required, so we keep K; otherwise, we discard it (never).
+ * [keyof T] at the end creates a union of the kept keys.
+ */
+
+/**
+ * Helper type to extract the keys of T that are optional.
+ * It iterates through each key K in T. If Pick<T, K> can be assigned an empty object {},
+ * it means K is optional (or potentially missing), so we keep K; otherwise, we discard it (never).
+ * [keyof T] at the end creates a union of the kept keys.
+ */
+
+/**
+ * Helper type to ensure keys of D exist in T.
+ * For each key K in D, if K is also a key of T, keep the type D[K].
+ * If K is NOT a key of T, map it to type `never`.
+ * An object cannot have a property of type `never`, effectively disallowing extra keys.
+ */
+
+/**
+ * This type will take a source type `Props` and a default type `Defaults` and will return a new type
+ * where all properties that are optional in `Props` but required in `Defaults` are made required in the result.
+ * Properties that are required in `Props` and optional in `Defaults` will remain required.
+ * Properties that are optional in both `Props` and `Defaults` will remain optional.
+ *
+ * This is useful for creating a type that represents the resolved props of a component with default props.
+ */
Index: node_modules/recharts/es6/util/scale/getNiceTickValues.js
===================================================================
--- node_modules/recharts/es6/util/scale/getNiceTickValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/scale/getNiceTickValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,209 @@
+/**
+ * @fileOverview calculate tick values of scale
+ * @author xile611, arcthur
+ * @date 2015-09-17
+ */
+import Decimal from 'decimal.js-light';
+import { compose, range, memoize, map, reverse } from './util/utils';
+import { getDigitCount, rangeStep } from './util/arithmetic';
+
+/**
+ * Calculate a interval of a minimum value and a maximum value
+ *
+ * @param  {Number} min       The minimum value
+ * @param  {Number} max       The maximum value
+ * @return {Array} An interval
+ */
+export var getValidInterval = _ref => {
+  var [min, max] = _ref;
+  var [validMin, validMax] = [min, max];
+
+  // exchange
+  if (min > max) {
+    [validMin, validMax] = [max, min];
+  }
+  return [validMin, validMax];
+};
+
+/**
+ * Calculate the step which is easy to understand between ticks, like 10, 20, 25
+ *
+ * @param  roughStep        The rough step calculated by dividing the difference by the tickCount
+ * @param  allowDecimals    Allow the ticks to be decimals or not
+ * @param  correctionFactor A correction factor
+ * @return The step which is easy to understand between two ticks
+ */
+export var getFormatStep = (roughStep, allowDecimals, correctionFactor) => {
+  if (roughStep.lte(0)) {
+    return new Decimal(0);
+  }
+  var digitCount = getDigitCount(roughStep.toNumber());
+  // The ratio between the rough step and the smallest number which has a bigger
+  // order of magnitudes than the rough step
+  var digitCountValue = new Decimal(10).pow(digitCount);
+  var stepRatio = roughStep.div(digitCountValue);
+  // When an integer and a float multiplied, the accuracy of result may be wrong
+  var stepRatioScale = digitCount !== 1 ? 0.05 : 0.1;
+  var amendStepRatio = new Decimal(Math.ceil(stepRatio.div(stepRatioScale).toNumber())).add(correctionFactor).mul(stepRatioScale);
+  var formatStep = amendStepRatio.mul(digitCountValue);
+  return allowDecimals ? new Decimal(formatStep.toNumber()) : new Decimal(Math.ceil(formatStep.toNumber()));
+};
+
+/**
+ * calculate the ticks when the minimum value equals to the maximum value
+ *
+ * @param  value         The minimum value which is also the maximum value
+ * @param  tickCount     The count of ticks
+ * @param  allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+export var getTickOfSingleValue = (value, tickCount, allowDecimals) => {
+  var step = new Decimal(1);
+  // calculate the middle value of ticks
+  var middle = new Decimal(value);
+  if (!middle.isint() && allowDecimals) {
+    var absVal = Math.abs(value);
+    if (absVal < 1) {
+      // The step should be a float number when the difference is smaller than 1
+      step = new Decimal(10).pow(getDigitCount(value) - 1);
+      middle = new Decimal(Math.floor(middle.div(step).toNumber())).mul(step);
+    } else if (absVal > 1) {
+      // Return the maximum integer which is smaller than 'value' when 'value' is greater than 1
+      middle = new Decimal(Math.floor(value));
+    }
+  } else if (value === 0) {
+    middle = new Decimal(Math.floor((tickCount - 1) / 2));
+  } else if (!allowDecimals) {
+    middle = new Decimal(Math.floor(value));
+  }
+  var middleIndex = Math.floor((tickCount - 1) / 2);
+  var fn = compose(map(n => middle.add(new Decimal(n - middleIndex).mul(step)).toNumber()), range);
+  return fn(0, tickCount);
+};
+
+/**
+ * Calculate the step
+ *
+ * @param  min              The minimum value of an interval
+ * @param  max              The maximum value of an interval
+ * @param  tickCount        The count of ticks
+ * @param  allowDecimals    Allow the ticks to be decimals or not
+ * @param  correctionFactor A correction factor
+ * @return The step, minimum value of ticks, maximum value of ticks
+ */
+var _calculateStep = function calculateStep(min, max, tickCount, allowDecimals) {
+  var correctionFactor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
+  // dirty hack (for recharts' test)
+  if (!Number.isFinite((max - min) / (tickCount - 1))) {
+    return {
+      step: new Decimal(0),
+      tickMin: new Decimal(0),
+      tickMax: new Decimal(0)
+    };
+  }
+
+  // The step which is easy to understand between two ticks
+  var step = getFormatStep(new Decimal(max).sub(min).div(tickCount - 1), allowDecimals, correctionFactor);
+
+  // A medial value of ticks
+  var middle;
+
+  // When 0 is inside the interval, 0 should be a tick
+  if (min <= 0 && max >= 0) {
+    middle = new Decimal(0);
+  } else {
+    // calculate the middle value
+    middle = new Decimal(min).add(max).div(2);
+    // minus modulo value
+    middle = middle.sub(new Decimal(middle).mod(step));
+  }
+  var belowCount = Math.ceil(middle.sub(min).div(step).toNumber());
+  var upCount = Math.ceil(new Decimal(max).sub(middle).div(step).toNumber());
+  var scaleCount = belowCount + upCount + 1;
+  if (scaleCount > tickCount) {
+    // When more ticks need to cover the interval, step should be bigger.
+    return _calculateStep(min, max, tickCount, allowDecimals, correctionFactor + 1);
+  }
+  if (scaleCount < tickCount) {
+    // When less ticks can cover the interval, we should add some additional ticks
+    upCount = max > 0 ? upCount + (tickCount - scaleCount) : upCount;
+    belowCount = max > 0 ? belowCount : belowCount + (tickCount - scaleCount);
+  }
+  return {
+    step,
+    tickMin: middle.sub(new Decimal(belowCount).mul(step)),
+    tickMax: middle.add(new Decimal(upCount).mul(step))
+  };
+};
+
+/**
+ * Calculate the ticks of an interval. Ticks can appear outside the interval
+ * if it makes them more rounded and nice.
+ *
+ * @param tuple of [min,max] min: The minimum value, max: The maximum value
+ * @param tickCount     The count of ticks
+ * @param allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+export { _calculateStep as calculateStep };
+function getNiceTickValuesFn(_ref2) {
+  var [min, max] = _ref2;
+  var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;
+  var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  // More than two ticks should be return
+  var count = Math.max(tickCount, 2);
+  var [cormin, cormax] = getValidInterval([min, max]);
+  if (cormin === -Infinity || cormax === Infinity) {
+    var _values = cormax === Infinity ? [cormin, ...range(0, tickCount - 1).map(() => Infinity)] : [...range(0, tickCount - 1).map(() => -Infinity), cormax];
+    return min > max ? reverse(_values) : _values;
+  }
+  if (cormin === cormax) {
+    return getTickOfSingleValue(cormin, tickCount, allowDecimals);
+  }
+
+  // Get the step between two ticks
+  var {
+    step,
+    tickMin,
+    tickMax
+  } = _calculateStep(cormin, cormax, count, allowDecimals, 0);
+  var values = rangeStep(tickMin, tickMax.add(new Decimal(0.1).mul(step)), step);
+  return min > max ? reverse(values) : values;
+}
+
+/**
+ * Calculate the ticks of an interval.
+ * Ticks will be constrained to the interval [min, max] even if it makes them less rounded and nice.
+ *
+ * @param tuple of [min,max] min: The minimum value, max: The maximum value
+ * @param tickCount     The count of ticks. This function may return less than tickCount ticks if the interval is too small.
+ * @param allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+function getTickValuesFixedDomainFn(_ref3, tickCount) {
+  var [min, max] = _ref3;
+  var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  // More than two ticks should be return
+  var [cormin, cormax] = getValidInterval([min, max]);
+  if (cormin === -Infinity || cormax === Infinity) {
+    return [min, max];
+  }
+  if (cormin === cormax) {
+    return [cormin];
+  }
+  var count = Math.max(tickCount, 2);
+  var step = getFormatStep(new Decimal(cormax).sub(cormin).div(count - 1), allowDecimals, 0);
+  var values = [...rangeStep(new Decimal(cormin), new Decimal(cormax), step), cormax];
+  if (allowDecimals === false) {
+    /*
+     * allowDecimals is false means that we want to have integer ticks.
+     * The step is guaranteed to be an integer in the code above which is great start
+     * but when the first step is not an integer, it will start stepping from a decimal value anyway.
+     * So we need to round all the values to integers after the fact.
+     */
+    values = values.map(value => Math.round(value));
+  }
+  return min > max ? reverse(values) : values;
+}
+export var getNiceTickValues = memoize(getNiceTickValuesFn);
+export var getTickValuesFixedDomain = memoize(getTickValuesFixedDomainFn);
Index: node_modules/recharts/es6/util/scale/index.js
===================================================================
--- node_modules/recharts/es6/util/scale/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/scale/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { getNiceTickValues, getTickValuesFixedDomain } from './getNiceTickValues';
Index: node_modules/recharts/es6/util/scale/util/arithmetic.js
===================================================================
--- node_modules/recharts/es6/util/scale/util/arithmetic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/scale/util/arithmetic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,93 @@
+/**
+ * @fileOverview Some common arithmetic methods
+ * @author xile611
+ * @date 2015-09-17
+ */
+import Decimal from 'decimal.js-light';
+import { curry } from './utils';
+
+/**
+ * Get the digit count of a number.
+ * If the absolute value is in the interval [0.1, 1), the result is 0.
+ * If the absolute value is in the interval [0.01, 0.1), the digit count is -1.
+ * If the absolute value is in the interval [0.001, 0.01), the digit count is -2.
+ *
+ * @param  {Number} value The number
+ * @return {Integer}      Digit count
+ */
+function getDigitCount(value) {
+  var result;
+  if (value === 0) {
+    result = 1;
+  } else {
+    result = Math.floor(new Decimal(value).abs().log(10).toNumber()) + 1;
+  }
+  return result;
+}
+
+/**
+ * Get the data in the interval [start, end) with a fixed step.
+ * Also handles JS calculation precision issues.
+ *
+ * @param  {Decimal} start Start point
+ * @param  {Decimal} end   End point, not included
+ * @param  {Decimal} step  Step size
+ * @return {Array}         Array of numbers
+ */
+function rangeStep(start, end, step) {
+  var num = new Decimal(start);
+  var i = 0;
+  var result = [];
+
+  // magic number to prevent infinite loop
+  while (num.lt(end) && i < 100000) {
+    result.push(num.toNumber());
+    num = num.add(step);
+    i++;
+  }
+  return result;
+}
+
+/**
+ * Linear interpolation of numbers.
+ *
+ * @param  {Number} a  Endpoint of the domain
+ * @param  {Number} b  Endpoint of the domain
+ * @param  {Number} t  A value in [0, 1]
+ * @return {Number}    A value in the domain
+ */
+var interpolateNumber = curry((a, b, t) => {
+  var newA = +a;
+  var newB = +b;
+  return newA + t * (newB - newA);
+});
+
+/**
+ * Inverse operation of linear interpolation.
+ *
+ * @param  {Number} a Endpoint of the domain
+ * @param  {Number} b Endpoint of the domain
+ * @param  {Number} x Can be considered as an output value after interpolation
+ * @return {Number}   When x is in the range a ~ b, the return value is in [0, 1]
+ */
+var uninterpolateNumber = curry((a, b, x) => {
+  var diff = b - +a;
+  diff = diff || Infinity;
+  return (x - a) / diff;
+});
+
+/**
+ * Inverse operation of linear interpolation with truncation.
+ *
+ * @param  {Number} a Endpoint of the domain
+ * @param  {Number} b Endpoint of the domain
+ * @param  {Number} x Can be considered as an output value after interpolation
+ * @return {Number}   When x is in the interval a ~ b, the return value is in [0, 1].
+ *                    When x is not in the interval a ~ b, it will be truncated to the interval a ~ b.
+ */
+var uninterpolateTruncation = curry((a, b, x) => {
+  var diff = b - +a;
+  diff = diff || Infinity;
+  return Math.max(0, Math.min(1, (x - a) / diff));
+});
+export { rangeStep, getDigitCount, interpolateNumber, uninterpolateNumber, uninterpolateTruncation };
Index: node_modules/recharts/es6/util/scale/util/utils.js
===================================================================
--- node_modules/recharts/es6/util/scale/util/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/scale/util/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,87 @@
+var identity = i => i;
+export var PLACE_HOLDER = {
+  '@@functional/placeholder': true
+};
+var isPlaceHolder = val => val === PLACE_HOLDER;
+var curry0 = fn => function _curried() {
+  if (arguments.length === 0 || arguments.length === 1 && isPlaceHolder(arguments.length <= 0 ? undefined : arguments[0])) {
+    return _curried;
+  }
+  return fn(...arguments);
+};
+var curryN = (n, fn) => {
+  if (n === 1) {
+    return fn;
+  }
+  return curry0(function () {
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+    var argsLength = args.filter(arg => arg !== PLACE_HOLDER).length;
+    if (argsLength >= n) {
+      return fn(...args);
+    }
+    return curryN(n - argsLength, curry0(function () {
+      for (var _len2 = arguments.length, restArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+        restArgs[_key2] = arguments[_key2];
+      }
+      var newArgs = args.map(arg => isPlaceHolder(arg) ? restArgs.shift() : arg);
+      return fn(...newArgs, ...restArgs);
+    }));
+  });
+};
+export var curry = fn => curryN(fn.length, fn);
+export var range = (begin, end) => {
+  var arr = [];
+  for (var i = begin; i < end; ++i) {
+    arr[i - begin] = i;
+  }
+  return arr;
+};
+export var map = curry((fn, arr) => {
+  if (Array.isArray(arr)) {
+    return arr.map(fn);
+  }
+  return Object.keys(arr).map(key => arr[key]).map(fn);
+});
+export var compose = function compose() {
+  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+    args[_key3] = arguments[_key3];
+  }
+  if (!args.length) {
+    return identity;
+  }
+  var fns = args.reverse();
+  // first function can receive multiply arguments
+  var firstFn = fns[0];
+  var tailsFn = fns.slice(1);
+  return function () {
+    return tailsFn.reduce((res, fn) => fn(res), firstFn(...arguments));
+  };
+};
+export var reverse = arr => {
+  if (Array.isArray(arr)) {
+    return arr.reverse();
+  }
+
+  // can be string
+  return arr.split('').reverse().join('');
+};
+export var memoize = fn => {
+  var lastArgs = null;
+  var lastResult = null;
+  return function () {
+    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+      args[_key4] = arguments[_key4];
+    }
+    if (lastArgs && args.every((val, i) => {
+      var _lastArgs;
+      return val === ((_lastArgs = lastArgs) === null || _lastArgs === void 0 ? void 0 : _lastArgs[i]);
+    })) {
+      return lastResult;
+    }
+    lastArgs = args;
+    lastResult = fn(...args);
+    return lastResult;
+  };
+};
Index: node_modules/recharts/es6/util/stacks/getStackSeriesIdentifier.js
===================================================================
--- node_modules/recharts/es6/util/stacks/getStackSeriesIdentifier.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/stacks/getStackSeriesIdentifier.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+/**
+ * Returns identifier for stack series which is one individual graphical item in the stack.
+ * @param graphicalItem - The graphical item representing the series in the stack.
+ * @return The identifier for the series in the stack
+ */
+export function getStackSeriesIdentifier(graphicalItem) {
+  return graphicalItem === null || graphicalItem === void 0 ? void 0 : graphicalItem.id;
+}
Index: node_modules/recharts/es6/util/stacks/stackTypes.js
===================================================================
--- node_modules/recharts/es6/util/stacks/stackTypes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/stacks/stackTypes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export {};
Index: node_modules/recharts/es6/util/svgPropertiesNoEvents.js
===================================================================
--- node_modules/recharts/es6/util/svgPropertiesNoEvents.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/svgPropertiesNoEvents.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+var SVGElementPropKeys = ['aria-activedescendant', 'aria-atomic', 'aria-autocomplete', 'aria-busy', 'aria-checked', 'aria-colcount', 'aria-colindex', 'aria-colspan', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-errormessage', 'aria-expanded', 'aria-flowto', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-level', 'aria-live', 'aria-modal', 'aria-multiline', 'aria-multiselectable', 'aria-orientation', 'aria-owns', 'aria-placeholder', 'aria-posinset', 'aria-pressed', 'aria-readonly', 'aria-relevant', 'aria-required', 'aria-roledescription', 'aria-rowcount', 'aria-rowindex', 'aria-rowspan', 'aria-selected', 'aria-setsize', 'aria-sort', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext', 'className', 'color', 'height', 'id', 'lang', 'max', 'media', 'method', 'min', 'name', 'style',
+/*
+ * removed 'type' SVGElementPropKey because we do not currently use any SVG elements
+ * that can use it, and it conflicts with the recharts prop 'type'
+ * https://github.com/recharts/recharts/pull/3327
+ * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/type
+ */
+// 'type',
+'target', 'width', 'role', 'tabIndex', 'accentHeight', 'accumulate', 'additive', 'alignmentBaseline', 'allowReorder', 'alphabetic', 'amplitude', 'arabicForm', 'ascent', 'attributeName', 'attributeType', 'autoReverse', 'azimuth', 'baseFrequency', 'baselineShift', 'baseProfile', 'bbox', 'begin', 'bias', 'by', 'calcMode', 'capHeight', 'clip', 'clipPath', 'clipPathUnits', 'clipRule', 'colorInterpolation', 'colorInterpolationFilters', 'colorProfile', 'colorRendering', 'contentScriptType', 'contentStyleType', 'cursor', 'cx', 'cy', 'd', 'decelerate', 'descent', 'diffuseConstant', 'direction', 'display', 'divisor', 'dominantBaseline', 'dur', 'dx', 'dy', 'edgeMode', 'elevation', 'enableBackground', 'end', 'exponent', 'externalResourcesRequired', 'fill', 'fillOpacity', 'fillRule', 'filter', 'filterRes', 'filterUnits', 'floodColor', 'floodOpacity', 'focusable', 'fontFamily', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontWeight', 'format', 'from', 'fx', 'fy', 'g1', 'g2', 'glyphName', 'glyphOrientationHorizontal', 'glyphOrientationVertical', 'glyphRef', 'gradientTransform', 'gradientUnits', 'hanging', 'horizAdvX', 'horizOriginX', 'href', 'ideographic', 'imageRendering', 'in2', 'in', 'intercept', 'k1', 'k2', 'k3', 'k4', 'k', 'kernelMatrix', 'kernelUnitLength', 'kerning', 'keyPoints', 'keySplines', 'keyTimes', 'lengthAdjust', 'letterSpacing', 'lightingColor', 'limitingConeAngle', 'local', 'markerEnd', 'markerHeight', 'markerMid', 'markerStart', 'markerUnits', 'markerWidth', 'mask', 'maskContentUnits', 'maskUnits', 'mathematical', 'mode', 'numOctaves', 'offset', 'opacity', 'operator', 'order', 'orient', 'orientation', 'origin', 'overflow', 'overlinePosition', 'overlineThickness', 'paintOrder', 'panose1', 'pathLength', 'patternContentUnits', 'patternTransform', 'patternUnits', 'pointerEvents', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'preserveAlpha', 'preserveAspectRatio', 'primitiveUnits', 'r', 'radius', 'refX', 'refY', 'renderingIntent', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'result', 'rotate', 'rx', 'ry', 'seed', 'shapeRendering', 'slope', 'spacing', 'specularConstant', 'specularExponent', 'speed', 'spreadMethod', 'startOffset', 'stdDeviation', 'stemh', 'stemv', 'stitchTiles', 'stopColor', 'stopOpacity', 'strikethroughPosition', 'strikethroughThickness', 'string', 'stroke', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'surfaceScale', 'systemLanguage', 'tableValues', 'targetX', 'targetY', 'textAnchor', 'textDecoration', 'textLength', 'textRendering', 'to', 'transform', 'u1', 'u2', 'underlinePosition', 'underlineThickness', 'unicode', 'unicodeBidi', 'unicodeRange', 'unitsPerEm', 'vAlphabetic', 'values', 'vectorEffect', 'version', 'vertAdvY', 'vertOriginX', 'vertOriginY', 'vHanging', 'vIdeographic', 'viewTarget', 'visibility', 'vMathematical', 'widths', 'wordSpacing', 'writingMode', 'x1', 'x2', 'x', 'xChannelSelector', 'xHeight', 'xlinkActuate', 'xlinkArcrole', 'xlinkHref', 'xlinkRole', 'xlinkShow', 'xlinkTitle', 'xlinkType', 'xmlBase', 'xmlLang', 'xmlns', 'xmlnsXlink', 'xmlSpace', 'y1', 'y2', 'y', 'yChannelSelector', 'z', 'zoomAndPan', 'ref', 'key', 'angle'];
+export function isSvgElementPropKey(key) {
+  if (typeof key !== 'string') {
+    return false;
+  }
+  var allowedSvgKeys = SVGElementPropKeys;
+  return allowedSvgKeys.includes(key);
+}
+
+/**
+ * Filters an object to only include SVG properties. Removes all event handlers too.
+ * @param obj - The object to filter
+ * @returns A new object containing only valid SVG properties, excluding event handlers.
+ */
+export function svgPropertiesNoEvents(obj) {
+  var filteredEntries = Object.entries(obj).filter(_ref => {
+    var [key] = _ref;
+    return isSvgElementPropKey(key);
+  });
+  return Object.fromEntries(filteredEntries);
+}
Index: node_modules/recharts/es6/util/tooltip/translate.js
===================================================================
--- node_modules/recharts/es6/util/tooltip/translate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/tooltip/translate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,123 @@
+import { clsx } from 'clsx';
+import { isNumber } from '../DataUtils';
+var CSS_CLASS_PREFIX = 'recharts-tooltip-wrapper';
+var TOOLTIP_HIDDEN = {
+  visibility: 'hidden'
+};
+export function getTooltipCSSClassName(_ref) {
+  var {
+    coordinate,
+    translateX,
+    translateY
+  } = _ref;
+  return clsx(CSS_CLASS_PREFIX, {
+    ["".concat(CSS_CLASS_PREFIX, "-right")]: isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX >= coordinate.x,
+    ["".concat(CSS_CLASS_PREFIX, "-left")]: isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX < coordinate.x,
+    ["".concat(CSS_CLASS_PREFIX, "-bottom")]: isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY >= coordinate.y,
+    ["".concat(CSS_CLASS_PREFIX, "-top")]: isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY < coordinate.y
+  });
+}
+export function getTooltipTranslateXY(_ref2) {
+  var {
+    allowEscapeViewBox,
+    coordinate,
+    key,
+    offsetTopLeft,
+    position,
+    reverseDirection,
+    tooltipDimension,
+    viewBox,
+    viewBoxDimension
+  } = _ref2;
+  if (position && isNumber(position[key])) {
+    return position[key];
+  }
+  var negative = coordinate[key] - tooltipDimension - (offsetTopLeft > 0 ? offsetTopLeft : 0);
+  var positive = coordinate[key] + offsetTopLeft;
+  if (allowEscapeViewBox[key]) {
+    return reverseDirection[key] ? negative : positive;
+  }
+  var viewBoxKey = viewBox[key];
+  if (viewBoxKey == null) {
+    return 0;
+  }
+  if (reverseDirection[key]) {
+    var _tooltipBoundary = negative;
+    var _viewBoxBoundary = viewBoxKey;
+    if (_tooltipBoundary < _viewBoxBoundary) {
+      return Math.max(positive, viewBoxKey);
+    }
+    return Math.max(negative, viewBoxKey);
+  }
+  if (viewBoxDimension == null) {
+    return 0;
+  }
+  var tooltipBoundary = positive + tooltipDimension;
+  var viewBoxBoundary = viewBoxKey + viewBoxDimension;
+  if (tooltipBoundary > viewBoxBoundary) {
+    return Math.max(negative, viewBoxKey);
+  }
+  return Math.max(positive, viewBoxKey);
+}
+export function getTransformStyle(_ref3) {
+  var {
+    translateX,
+    translateY,
+    useTranslate3d
+  } = _ref3;
+  return {
+    transform: useTranslate3d ? "translate3d(".concat(translateX, "px, ").concat(translateY, "px, 0)") : "translate(".concat(translateX, "px, ").concat(translateY, "px)")
+  };
+}
+export function getTooltipTranslate(_ref4) {
+  var {
+    allowEscapeViewBox,
+    coordinate,
+    offsetTopLeft,
+    position,
+    reverseDirection,
+    tooltipBox,
+    useTranslate3d,
+    viewBox
+  } = _ref4;
+  var cssProperties, translateX, translateY;
+  if (tooltipBox.height > 0 && tooltipBox.width > 0 && coordinate) {
+    translateX = getTooltipTranslateXY({
+      allowEscapeViewBox,
+      coordinate,
+      key: 'x',
+      offsetTopLeft,
+      position,
+      reverseDirection,
+      tooltipDimension: tooltipBox.width,
+      viewBox,
+      viewBoxDimension: viewBox.width
+    });
+    translateY = getTooltipTranslateXY({
+      allowEscapeViewBox,
+      coordinate,
+      key: 'y',
+      offsetTopLeft,
+      position,
+      reverseDirection,
+      tooltipDimension: tooltipBox.height,
+      viewBox,
+      viewBoxDimension: viewBox.height
+    });
+    cssProperties = getTransformStyle({
+      translateX,
+      translateY,
+      useTranslate3d
+    });
+  } else {
+    cssProperties = TOOLTIP_HIDDEN;
+  }
+  return {
+    cssProperties,
+    cssClasses: getTooltipCSSClassName({
+      translateX,
+      translateY,
+      coordinate
+    })
+  };
+}
Index: node_modules/recharts/es6/util/types.js
===================================================================
--- node_modules/recharts/es6/util/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,171 @@
+import { isValidElement } from 'react';
+import { isEventKey } from './excludeEventProps';
+
+/**
+ * Determines how values are stacked:
+ *
+ * - `none` is the default, it adds values on top of each other. No smarts. Negative values will overlap.
+ * - `expand` make it so that the values always add up to 1 - so the chart will look like a rectangle.
+ * - `wiggle` and `silhouette` tries to keep the chart centered.
+ * - `sign` stacks positive values above zero and negative values below zero. Similar to `none` but handles negatives.
+ * - `positive` ignores all negative values, and then behaves like \`none\`.
+ *
+ * Also see https://d3js.org/d3-shape/stack#stack-offsets
+ * (note that the `diverging` offset in d3 is named `sign` in recharts)
+ */
+
+/**
+ * @deprecated use either `CartesianLayout` or `PolarLayout` instead.
+ * Mixing both charts families leads to ambiguity in the type system.
+ * These two layouts share very few properties, so it is best to keep them separate.
+ */
+
+/**
+ * @deprecated do not use: too many properties, mixing too many concepts, cartesian and polar together, everything optional.
+ */
+
+//
+// Event Handler Types -- Copied from @types/react/index.d.ts and adapted for Props.
+//
+
+var SVGContainerPropKeys = ['viewBox', 'children'];
+var PolyElementKeys = ['points', 'pathLength'];
+
+/** svg element types that have specific attribute filtration requirements */
+
+/** map of svg element types to unique svg attributes that belong to that element */
+export var FilteredElementKeyMap = {
+  svg: SVGContainerPropKeys,
+  polygon: PolyElementKeys,
+  polyline: PolyElementKeys
+};
+
+/** The type of easing function to use for animations */
+
+/** Specifies the duration of animation, the unit of this option is ms. */
+
+/**
+ * This object defines the offset of the chart area and width and height and brush and ... it's a bit too much information all in one.
+ * We use it internally but let's not expose it to the outside world.
+ * If you are looking for this information, instead import `ChartOffset` or `PlotArea` from `recharts`.
+ */
+
+/**
+ * The domain of axis.
+ * This is the definition
+ *
+ * Numeric domain is always defined by an array of exactly two values, for the min and the max of the axis.
+ * Categorical domain is defined as array of all possible values.
+ *
+ * Can be specified in many ways:
+ * - array of numbers
+ * - with special strings like 'dataMin' and 'dataMax'
+ * - with special string math like 'dataMin - 100'
+ * - with keyword 'auto'
+ * - or a function
+ * - array of functions
+ * - or a combination of the above
+ */
+
+/**
+ * NumberDomain is an evaluated {@link AxisDomain}.
+ * Unlike {@link AxisDomain}, it has no variety - it's a tuple of two number.
+ * This is after all the keywords and functions were evaluated and what is left is [min, max].
+ *
+ * Know that the min, max values are not guaranteed to be nice numbers - values like -Infinity or NaN are possible.
+ *
+ * There are also `category` axes that have different things than numbers in their domain.
+ */
+
+/** The props definition of base axis */
+
+/** Defines how ticks are placed and whether / how tick collisions are handled.
+ * 'preserveStart' keeps the left tick on collision and ensures that the first tick is always shown.
+ * 'preserveEnd' keeps the right tick on collision and ensures that the last tick is always shown.
+ * 'preserveStartEnd' keeps the left tick on collision and ensures that the first and last ticks always show.
+ * 'equidistantPreserveStart' selects a number N such that every nTh tick will be shown without collision.
+ */
+
+/**
+ * Ticks can be any type when the axis is the type of category.
+ *
+ * Ticks must be numbers when the axis is the type of number.
+ */
+
+export var adaptEventHandlers = (props, newHandler) => {
+  if (!props || typeof props === 'function' || typeof props === 'boolean') {
+    return null;
+  }
+  var inputProps = props;
+  if (/*#__PURE__*/isValidElement(props)) {
+    inputProps = props.props;
+  }
+  if (typeof inputProps !== 'object' && typeof inputProps !== 'function') {
+    return null;
+  }
+  var out = {};
+  Object.keys(inputProps).forEach(key => {
+    if (isEventKey(key)) {
+      out[key] = newHandler || (e => inputProps[key](inputProps, e));
+    }
+  });
+  return out;
+};
+var getEventHandlerOfChild = (originalHandler, data, index) => e => {
+  originalHandler(data, index, e);
+  return null;
+};
+export var adaptEventsOfChild = (props, data, index) => {
+  if (props === null || typeof props !== 'object' && typeof props !== 'function') {
+    return null;
+  }
+  var out = null;
+  Object.keys(props).forEach(key => {
+    var item = props[key];
+    if (isEventKey(key) && typeof item === 'function') {
+      if (!out) out = {};
+      out[key] = getEventHandlerOfChild(item, data, index);
+    }
+  });
+  return out;
+};
+
+/**
+ * 'axis' means that all graphical items belonging to this axis tick will be highlighted,
+ * and all will be present in the tooltip.
+ * Tooltip with 'axis' will display when hovering on the chart background.
+ *
+ * 'item' means only the one graphical item being hovered will show in the tooltip.
+ * Tooltip with 'item' will display when hovering over individual graphical items.
+ *
+ * This is calculated internally;
+ * charts have a `defaultTooltipEventType` and `validateTooltipEventTypes` options.
+ *
+ * Users then use <Tooltip shared={true} /> or <Tooltip shared={false} /> to control their preference,
+ * and charts will then see what is allowed and what is not.
+ */
+
+/**
+ * These are the props we are going to pass to an `activeDot` if it is a function or a custom Component
+ */
+
+/**
+ * This is the type of `activeDot` prop on:
+ * - Area
+ * - Line
+ * - Radar
+ */
+
+// TODO we need two different range objects, one for polar and another for cartesian layouts
+
+/**
+ * Simplified version of the MouseEvent so that we don't have to mock the whole thing in tests.
+ *
+ * This is meant to represent the React.MouseEvent
+ * which is a wrapper on top of https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent
+ */
+
+/**
+ * Coordinates relative to the top-left corner of the chart.
+ * Also include scale which means that a chart that's scaled will return the same coordinates as a chart that's not scaled.
+ */
Index: node_modules/recharts/es6/util/useAnimationId.js
===================================================================
--- node_modules/recharts/es6/util/useAnimationId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/useAnimationId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { useRef } from 'react';
+import { uniqueId } from './DataUtils';
+
+/**
+ * This hook returns a unique animation id for the object input.
+ * If input changes (as in, reference equality is different), the animation id will change.
+ * If input does not change, the animation id will not change.
+ *
+ * This is useful for animations. The Animate component
+ * does have a `shouldReAnimate` prop but that doesn't seem to be doing what the name implies.
+ * Also, we don't always want to re-animate on every render;
+ * we only want to re-animate when the input changes. Not the internal state (e.g. `isAnimating`).
+ *
+ * @param input The object to check for changes. Uses reference equality (=== operator)
+ * @param prefix Optional prefix to use for the animation id
+ * @returns A unique animation id
+ */
+export function useAnimationId(input) {
+  var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'animation-';
+  var animationId = useRef(uniqueId(prefix));
+  var prevProps = useRef(input);
+  if (prevProps.current !== input) {
+    animationId.current = uniqueId(prefix);
+    prevProps.current = input;
+  }
+  return animationId.current;
+}
Index: node_modules/recharts/es6/util/useElementOffset.js
===================================================================
--- node_modules/recharts/es6/util/useElementOffset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/useElementOffset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+import { useCallback, useState } from 'react';
+var EPS = 1;
+
+/**
+ * TODO this documentation does not reflect what this hook is doing, update it.
+ * Stores the `offsetHeight`, `offsetLeft`, `offsetTop`, and `offsetWidth` of a DOM element.
+ */
+
+/**
+ * Use this to listen to element layout changes.
+ *
+ * Very useful for reading actual sizes of DOM elements relative to the viewport.
+ *
+ * @param extraDependencies use this to trigger new DOM dimensions read when any of these change. Good for things like payload and label, that will re-render something down in the children array, but you want to read the layout box of a parent.
+ * @returns [lastElementOffset, updateElementOffset] most recent value, and setter. Pass the setter to a DOM element ref like this: `<div ref={updateElementOffset}>`
+ */
+export function useElementOffset() {
+  var extraDependencies = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+  var [lastBoundingBox, setLastBoundingBox] = useState({
+    height: 0,
+    left: 0,
+    top: 0,
+    width: 0
+  });
+  var updateBoundingBox = useCallback(node => {
+    if (node != null) {
+      var rect = node.getBoundingClientRect();
+      var box = {
+        height: rect.height,
+        left: rect.left,
+        top: rect.top,
+        width: rect.width
+      };
+      if (Math.abs(box.height - lastBoundingBox.height) > EPS || Math.abs(box.left - lastBoundingBox.left) > EPS || Math.abs(box.top - lastBoundingBox.top) > EPS || Math.abs(box.width - lastBoundingBox.width) > EPS) {
+        setLastBoundingBox({
+          height: box.height,
+          left: box.left,
+          top: box.top,
+          width: box.width
+        });
+      }
+    }
+  }, [lastBoundingBox.width, lastBoundingBox.height, lastBoundingBox.top, lastBoundingBox.left, ...extraDependencies]);
+  return [lastBoundingBox, updateBoundingBox];
+}
Index: node_modules/recharts/es6/util/useId.js
===================================================================
--- node_modules/recharts/es6/util/useId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/useId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+var _ref;
+import * as React from 'react';
+import { uniqueId } from './DataUtils';
+
+/**
+ * Fallback for React.useId() for versions prior to React 18.
+ * Generates a unique ID using a simple counter and a prefix.
+ *
+ * @returns A unique ID that remains consistent across renders.
+ */
+export var useIdFallback = () => {
+  var [id] = React.useState(() => uniqueId('uid-'));
+  return id;
+};
+
+/*
+ * This weird syntax is used to avoid a build-time error in React 17 and earlier when building with Webpack.
+ * See https://github.com/webpack/webpack/issues/14814
+ */
+export var useId = (_ref = React['useId'.toString()]) !== null && _ref !== void 0 ? _ref : useIdFallback;
Index: node_modules/recharts/es6/util/useReportScale.js
===================================================================
--- node_modules/recharts/es6/util/useReportScale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/useReportScale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { useEffect, useState } from 'react';
+import { useAppDispatch, useAppSelector } from '../state/hooks';
+import { selectContainerScale } from '../state/selectors/containerSelectors';
+import { setScale } from '../state/layoutSlice';
+import { isWellBehavedNumber } from './isWellBehavedNumber';
+export function useReportScale() {
+  var dispatch = useAppDispatch();
+  var [ref, setRef] = useState(null);
+  var scale = useAppSelector(selectContainerScale);
+  useEffect(() => {
+    if (ref == null) {
+      return;
+    }
+    var rect = ref.getBoundingClientRect();
+    var newScale = rect.width / ref.offsetWidth;
+    if (isWellBehavedNumber(newScale) && newScale !== scale) {
+      dispatch(setScale(newScale));
+    }
+  }, [ref, dispatch, scale]);
+  return setRef;
+}
Index: node_modules/recharts/es6/util/useUniqueId.js
===================================================================
--- node_modules/recharts/es6/util/useUniqueId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/es6/util/useUniqueId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+import { useId } from './useId';
+
+/**
+ * A hook that generates a unique ID. It uses React.useId() in React 18+ for SSR safety
+ * and falls back to a client-side-only unique ID generator for older versions.
+ *
+ * The ID will stay the same across renders, and you can optionally provide a prefix.
+ *
+ * @param [prefix] - An optional prefix for the generated ID.
+ * @param [customId] - An optional custom ID to override the generated one.
+ * @returns The unique ID.
+ */
+export function useUniqueId(prefix, customId) {
+  /*
+   * We have to call this hook here even if we don't use the result because
+   * rules of hooks demand that hooks are never called conditionally.
+   */
+  var generatedId = useId();
+
+  // If a custom ID is provided, it always takes precedence.
+  if (customId) {
+    return customId;
+  }
+
+  // Apply the prefix if one was provided.
+  return prefix ? "".concat(prefix, "-").concat(generatedId) : generatedId;
+}
+
+/**
+ * The useUniqueId hook returns a unique ID that is either reused from external props or generated internally.
+ * Either way the ID is now guaranteed to be present so no more nulls or undefined.
+ */
Index: node_modules/recharts/lib/animation/Animate.js
===================================================================
--- node_modules/recharts/lib/animation/Animate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/Animate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,267 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Animate = Animate;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _isEqual = _interopRequireDefault(require("es-toolkit/compat/isEqual"));
+var _easing = require("./easing");
+var _configUpdate = _interopRequireDefault(require("./configUpdate"));
+var _util = require("./util");
+var _useAnimationManager = require("./useAnimationManager");
+var _excluded = ["children", "begin", "duration", "attributeName", "easing", "isActive", "from", "to", "canBegin", "onAnimationEnd", "shouldReAnimate", "onAnimationReStart", "animationManager"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+class AnimateImpl extends _react.PureComponent {
+  constructor(props, context) {
+    super(props, context);
+    _defineProperty(this, "mounted", false);
+    _defineProperty(this, "manager", undefined);
+    _defineProperty(this, "stopJSAnimation", null);
+    _defineProperty(this, "unSubscribe", null);
+    var {
+      isActive,
+      attributeName,
+      from,
+      to,
+      children,
+      duration,
+      animationManager
+    } = this.props;
+    this.manager = animationManager;
+    this.handleStyleChange = this.handleStyleChange.bind(this);
+    this.changeStyle = this.changeStyle.bind(this);
+    if (!isActive || duration <= 0) {
+      this.state = {
+        style: {}
+      };
+
+      // if children is a function and animation is not active, set style to 'to'
+      if (typeof children === 'function') {
+        this.state = {
+          style: to
+        };
+      }
+      return;
+    }
+    if (from) {
+      if (typeof children === 'function') {
+        this.state = {
+          style: from
+        };
+        return;
+      }
+      this.state = {
+        style: attributeName ? {
+          [attributeName]: from
+        } : from
+      };
+    } else {
+      this.state = {
+        style: {}
+      };
+    }
+  }
+  componentDidMount() {
+    var {
+      isActive,
+      canBegin
+    } = this.props;
+    this.mounted = true;
+    if (!isActive || !canBegin) {
+      return;
+    }
+    this.runAnimation(this.props);
+  }
+  componentDidUpdate(prevProps) {
+    var {
+      isActive,
+      canBegin,
+      attributeName,
+      shouldReAnimate,
+      to,
+      from: currentFrom
+    } = this.props;
+    var {
+      style
+    } = this.state;
+    if (!canBegin) {
+      return;
+    }
+    if (!isActive) {
+      var newState = {
+        style: attributeName ? {
+          [attributeName]: to
+        } : to
+      };
+      if (this.state && style) {
+        if (attributeName && style[attributeName] !== to || !attributeName && style !== to) {
+          this.setState(newState);
+        }
+      }
+      return;
+    }
+    if ((0, _isEqual.default)(prevProps.to, to) && prevProps.canBegin && prevProps.isActive) {
+      return;
+    }
+    var isTriggered = !prevProps.canBegin || !prevProps.isActive;
+    this.manager.stop();
+    if (this.stopJSAnimation) {
+      this.stopJSAnimation();
+    }
+    var from = isTriggered || shouldReAnimate ? currentFrom : prevProps.to;
+    if (this.state && style) {
+      var _newState = {
+        style: attributeName ? {
+          [attributeName]: from
+        } : from
+      };
+      if (attributeName && style[attributeName] !== from || !attributeName && style !== from) {
+        this.setState(_newState);
+      }
+    }
+    this.runAnimation(_objectSpread(_objectSpread({}, this.props), {}, {
+      from,
+      begin: 0
+    }));
+  }
+  componentWillUnmount() {
+    this.mounted = false;
+    var {
+      onAnimationEnd
+    } = this.props;
+    if (this.unSubscribe) {
+      this.unSubscribe();
+    }
+    this.manager.stop();
+    if (this.stopJSAnimation) {
+      this.stopJSAnimation();
+    }
+    if (onAnimationEnd) {
+      onAnimationEnd();
+    }
+  }
+  handleStyleChange(style) {
+    this.changeStyle(style);
+  }
+  changeStyle(style) {
+    if (this.mounted) {
+      this.setState({
+        style
+      });
+    }
+  }
+  runJSAnimation(props) {
+    var {
+      from,
+      to,
+      duration,
+      easing,
+      begin,
+      onAnimationEnd,
+      onAnimationStart
+    } = props;
+    var startAnimation = (0, _configUpdate.default)(from, to, (0, _easing.configEasing)(easing), duration, this.changeStyle, this.manager.getTimeoutController());
+    var finalStartAnimation = () => {
+      this.stopJSAnimation = startAnimation();
+    };
+    this.manager.start([onAnimationStart, begin, finalStartAnimation, duration, onAnimationEnd]);
+  }
+  runAnimation(props) {
+    var {
+      begin,
+      duration,
+      attributeName,
+      to: propsTo,
+      easing,
+      onAnimationStart,
+      onAnimationEnd,
+      children
+    } = props;
+    this.unSubscribe = this.manager.subscribe(this.handleStyleChange);
+    if (typeof easing === 'function' || typeof children === 'function' || easing === 'spring') {
+      this.runJSAnimation(props);
+      return;
+    }
+    var to = attributeName ? {
+      [attributeName]: propsTo
+    } : propsTo;
+    var transition = (0, _util.getTransitionVal)(Object.keys(to), duration, easing);
+    this.manager.start([onAnimationStart, begin, _objectSpread(_objectSpread({}, to), {}, {
+      transition
+    }), duration, onAnimationEnd]);
+  }
+  render() {
+    var _this$props = this.props,
+      {
+        children,
+        begin,
+        duration,
+        attributeName,
+        easing,
+        isActive,
+        from,
+        to,
+        canBegin,
+        onAnimationEnd,
+        shouldReAnimate,
+        onAnimationReStart,
+        animationManager
+      } = _this$props,
+      others = _objectWithoutProperties(_this$props, _excluded);
+    var count = _react.Children.count(children);
+    var stateStyle = this.state.style;
+    if (typeof children === 'function') {
+      return children(stateStyle);
+    }
+    if (!isActive || count === 0 || duration <= 0) {
+      return children;
+    }
+    var cloneContainer = container => {
+      var {
+        style = {},
+        className
+      } = container.props;
+      var res = /*#__PURE__*/(0, _react.cloneElement)(container, _objectSpread(_objectSpread({}, others), {}, {
+        style: _objectSpread(_objectSpread({}, style), stateStyle),
+        className
+      }));
+      return res;
+    };
+    if (count === 1) {
+      // @ts-expect-error TODO - fix the type error
+      return cloneContainer(_react.Children.only(children));
+    }
+
+    // @ts-expect-error TODO - fix the type error
+    return /*#__PURE__*/React.createElement("div", null, _react.Children.map(children, child => cloneContainer(child)));
+  }
+}
+_defineProperty(AnimateImpl, "displayName", 'Animate');
+_defineProperty(AnimateImpl, "defaultProps", {
+  begin: 0,
+  duration: 1000,
+  attributeName: '',
+  easing: 'ease',
+  isActive: true,
+  canBegin: true,
+  onAnimationEnd: () => {},
+  onAnimationStart: () => {}
+});
+function Animate(props) {
+  var _props$attributeName;
+  var animationManager = (0, _useAnimationManager.useAnimationManager)((_props$attributeName = props.attributeName) !== null && _props$attributeName !== void 0 ? _props$attributeName : Object.keys(props.to).join(','), props.animationManager);
+  return /*#__PURE__*/React.createElement(AnimateImpl, _extends({}, props, {
+    animationManager: animationManager
+  }));
+}
Index: node_modules/recharts/lib/animation/AnimationManager.js
===================================================================
--- node_modules/recharts/lib/animation/AnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/AnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,72 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.createAnimateManager = createAnimateManager;
+/**
+ * Represents a single item in the ReactSmoothQueue.
+ * The item can be:
+ * - A number representing a delay in milliseconds.
+ * - An object representing a style change
+ * - A StartAnimationFunction that starts eased transition and calls different render
+ *      because of course in Recharts we have to have three ways to do everything
+ * - An arbitrary function to be executed
+ */
+
+function createAnimateManager(timeoutController) {
+  var currStyle;
+  var handleChange = () => null;
+  var shouldStop = false;
+  var cancelTimeout = null;
+  var setStyle = _style => {
+    if (shouldStop) {
+      return;
+    }
+    if (Array.isArray(_style)) {
+      if (!_style.length) {
+        return;
+      }
+      var styles = _style;
+      var [curr, ...restStyles] = styles;
+      if (typeof curr === 'number') {
+        cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles), curr);
+        return;
+      }
+      setStyle(curr);
+      cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles));
+      return;
+    }
+    if (typeof _style === 'string') {
+      currStyle = _style;
+      handleChange(currStyle);
+    }
+    if (typeof _style === 'object') {
+      currStyle = _style;
+      handleChange(currStyle);
+    }
+    if (typeof _style === 'function') {
+      _style();
+    }
+  };
+  return {
+    stop: () => {
+      shouldStop = true;
+    },
+    start: style => {
+      shouldStop = false;
+      if (cancelTimeout) {
+        cancelTimeout();
+        cancelTimeout = null;
+      }
+      setStyle(style);
+    },
+    subscribe: _handleChange => {
+      handleChange = _handleChange;
+      return () => {
+        handleChange = () => null;
+      };
+    },
+    getTimeoutController: () => timeoutController
+  };
+}
Index: node_modules/recharts/lib/animation/CSSTransitionAnimate.js
===================================================================
--- node_modules/recharts/lib/animation/CSSTransitionAnimate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/CSSTransitionAnimate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CSSTransitionAnimate = CSSTransitionAnimate;
+var _react = require("react");
+var _esToolkit = require("es-toolkit");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _useAnimationManager = require("./useAnimationManager");
+var _util = require("./util");
+var defaultProps = {
+  begin: 0,
+  duration: 1000,
+  easing: 'ease',
+  isActive: true,
+  canBegin: true,
+  onAnimationEnd: () => {},
+  onAnimationStart: () => {}
+};
+function CSSTransitionAnimate(outsideProps) {
+  var props = (0, _resolveDefaultProps.resolveDefaultProps)(outsideProps, defaultProps);
+  var {
+    from,
+    to,
+    attributeName,
+    isActive,
+    canBegin,
+    duration,
+    easing,
+    begin,
+    onAnimationEnd,
+    onAnimationStart,
+    children
+  } = props;
+  var animationManager = (0, _useAnimationManager.useAnimationManager)(attributeName, props.animationManager);
+  var [style, setStyle] = (0, _react.useState)(isActive ? from : to);
+  (0, _react.useEffect)(() => {
+    if (!isActive) {
+      setStyle(to);
+    }
+  }, [isActive, to]);
+  (0, _react.useEffect)(() => {
+    if (!isActive || !canBegin) {
+      return _esToolkit.noop;
+    }
+    var unsubscribe = animationManager.subscribe(setStyle);
+    animationManager.start([onAnimationStart, begin, to, duration, onAnimationEnd]);
+    return () => {
+      animationManager.stop();
+      if (unsubscribe) {
+        unsubscribe();
+      }
+      onAnimationEnd();
+    };
+  }, [isActive, canBegin, duration, easing, begin, onAnimationStart, onAnimationEnd, animationManager, to]);
+  if (isActive && canBegin) {
+    var transition = (0, _util.getTransitionVal)([attributeName], duration, easing);
+    return children({
+      transition,
+      [attributeName]: style
+    });
+  }
+  return children({
+    [attributeName]: style
+  });
+}
Index: node_modules/recharts/lib/animation/JavascriptAnimate.js
===================================================================
--- node_modules/recharts/lib/animation/JavascriptAnimate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/JavascriptAnimate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.JavascriptAnimate = JavascriptAnimate;
+var _react = require("react");
+var _esToolkit = require("es-toolkit");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _configUpdate = _interopRequireDefault(require("./configUpdate"));
+var _easing = require("./easing");
+var _useAnimationManager = require("./useAnimationManager");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var defaultJavascriptAnimateProps = {
+  begin: 0,
+  duration: 1000,
+  easing: 'ease',
+  isActive: true,
+  canBegin: true,
+  onAnimationEnd: () => {},
+  onAnimationStart: () => {}
+};
+var from = {
+  t: 0
+};
+var to = {
+  t: 1
+};
+function JavascriptAnimate(outsideProps) {
+  var props = (0, _resolveDefaultProps.resolveDefaultProps)(outsideProps, defaultJavascriptAnimateProps);
+  var {
+    isActive,
+    canBegin,
+    duration,
+    easing,
+    begin,
+    onAnimationEnd,
+    onAnimationStart,
+    children
+  } = props;
+  var animationManager = (0, _useAnimationManager.useAnimationManager)('JavascriptAnimate', props.animationManager);
+  var [style, setStyle] = (0, _react.useState)(isActive ? from : to);
+  var stopJSAnimation = (0, _react.useRef)(null);
+  (0, _react.useEffect)(() => {
+    if (!isActive) {
+      setStyle(to);
+    }
+  }, [isActive]);
+  (0, _react.useEffect)(() => {
+    if (!isActive || !canBegin) {
+      return _esToolkit.noop;
+    }
+    var startAnimation = (0, _configUpdate.default)(from, to, (0, _easing.configEasing)(easing), duration, setStyle, animationManager.getTimeoutController());
+    var onAnimationActive = () => {
+      stopJSAnimation.current = startAnimation();
+    };
+    animationManager.start([onAnimationStart, begin, onAnimationActive, duration, onAnimationEnd]);
+    return () => {
+      animationManager.stop();
+      if (stopJSAnimation.current) {
+        stopJSAnimation.current();
+      }
+      onAnimationEnd();
+    };
+  }, [isActive, canBegin, duration, easing, begin, onAnimationStart, onAnimationEnd, animationManager]);
+  return children(style.t);
+}
Index: node_modules/recharts/lib/animation/configUpdate.js
===================================================================
--- node_modules/recharts/lib/animation/configUpdate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/configUpdate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,127 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.alpha = void 0;
+var _util = require("./util");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var alpha = (begin, end, k) => begin + (end - begin) * k;
+exports.alpha = alpha;
+var needContinue = _ref => {
+  var {
+    from,
+    to
+  } = _ref;
+  return from !== to;
+};
+/*
+ * @description: cal new from value and velocity in each stepper
+ * @return: { [styleProperty]: { from, to, velocity } }
+ */
+var calStepperVals = (easing, preVals, steps) => {
+  var nextStepVals = (0, _util.mapObject)((key, val) => {
+    if (needContinue(val)) {
+      var [newX, newV] = easing(val.from, val.to, val.velocity);
+      return _objectSpread(_objectSpread({}, val), {}, {
+        from: newX,
+        velocity: newV
+      });
+    }
+    return val;
+  }, preVals);
+  if (steps < 1) {
+    return (0, _util.mapObject)((key, val) => {
+      if (needContinue(val)) {
+        return _objectSpread(_objectSpread({}, val), {}, {
+          velocity: alpha(val.velocity, nextStepVals[key].velocity, steps),
+          from: alpha(val.from, nextStepVals[key].from, steps)
+        });
+      }
+      return val;
+    }, preVals);
+  }
+  return calStepperVals(easing, nextStepVals, steps - 1);
+};
+function createStepperUpdate(from, to, easing, interKeys, render, timeoutController) {
+  var preTime;
+  var stepperStyle = interKeys.reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+    [key]: {
+      from: from[key],
+      velocity: 0,
+      to: to[key]
+    }
+  }), {});
+  var getCurrStyle = () => (0, _util.mapObject)((key, val) => val.from, stepperStyle);
+  var shouldStopAnimation = () => !Object.values(stepperStyle).filter(needContinue).length;
+  var stopAnimation = null;
+  var stepperUpdate = now => {
+    if (!preTime) {
+      preTime = now;
+    }
+    var deltaTime = now - preTime;
+    var steps = deltaTime / easing.dt;
+    stepperStyle = calStepperVals(easing, stepperStyle, steps);
+    // get union set and add compatible prefix
+    render(_objectSpread(_objectSpread(_objectSpread({}, from), to), getCurrStyle()));
+    preTime = now;
+    if (!shouldStopAnimation()) {
+      stopAnimation = timeoutController.setTimeout(stepperUpdate);
+    }
+  };
+
+  // return start animation method
+  return () => {
+    stopAnimation = timeoutController.setTimeout(stepperUpdate);
+
+    // return stop animation method
+    return () => {
+      stopAnimation();
+    };
+  };
+}
+function createTimingUpdate(from, to, easing, duration, interKeys, render, timeoutController) {
+  var stopAnimation = null;
+  var timingStyle = interKeys.reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+    [key]: [from[key], to[key]]
+  }), {});
+  var beginTime;
+  var timingUpdate = now => {
+    if (!beginTime) {
+      beginTime = now;
+    }
+    var t = (now - beginTime) / duration;
+    var currStyle = (0, _util.mapObject)((key, val) => alpha(...val, easing(t)), timingStyle);
+
+    // get union set and add compatible prefix
+    render(_objectSpread(_objectSpread(_objectSpread({}, from), to), currStyle));
+    if (t < 1) {
+      stopAnimation = timeoutController.setTimeout(timingUpdate);
+    } else {
+      var finalStyle = (0, _util.mapObject)((key, val) => alpha(...val, easing(1)), timingStyle);
+      render(_objectSpread(_objectSpread(_objectSpread({}, from), to), finalStyle));
+    }
+  };
+
+  // return start animation method
+  return () => {
+    stopAnimation = timeoutController.setTimeout(timingUpdate);
+
+    // return stop animation method
+    return () => {
+      stopAnimation();
+    };
+  };
+}
+
+// configure update function
+// eslint-disable-next-line import/no-default-export
+var _default = (from, to, easing, duration, render, timeoutController) => {
+  var interKeys = (0, _util.getIntersectionKeys)(from, to);
+  return easing.isStepper === true ? createStepperUpdate(from, to, easing, interKeys, render, timeoutController) : createTimingUpdate(from, to, easing, duration, interKeys, render, timeoutController);
+};
+exports.default = _default;
Index: node_modules/recharts/lib/animation/createDefaultAnimationManager.js
===================================================================
--- node_modules/recharts/lib/animation/createDefaultAnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/createDefaultAnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.createDefaultAnimationManager = createDefaultAnimationManager;
+var _AnimationManager = require("./AnimationManager");
+var _timeoutController = require("./timeoutController");
+function createDefaultAnimationManager() {
+  return (0, _AnimationManager.createAnimateManager)(new _timeoutController.RequestAnimationFrameTimeoutController());
+}
Index: node_modules/recharts/lib/animation/easing.js
===================================================================
--- node_modules/recharts/lib/animation/easing.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/easing.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,124 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.configSpring = exports.configEasing = exports.configBezier = exports.ACCURACY = void 0;
+var ACCURACY = exports.ACCURACY = 1e-4;
+var cubicBezierFactor = (c1, c2) => [0, 3 * c1, 3 * c2 - 6 * c1, 3 * c1 - 3 * c2 + 1];
+var evaluatePolynomial = (params, t) => params.map((param, i) => param * t ** i).reduce((pre, curr) => pre + curr);
+var cubicBezier = (c1, c2) => t => {
+  var params = cubicBezierFactor(c1, c2);
+  return evaluatePolynomial(params, t);
+};
+var derivativeCubicBezier = (c1, c2) => t => {
+  var params = cubicBezierFactor(c1, c2);
+  var newParams = [...params.map((param, i) => param * i).slice(1), 0];
+  return evaluatePolynomial(newParams, t);
+};
+// calculate cubic-bezier using Newton's method
+var configBezier = exports.configBezier = function configBezier() {
+  var x1, x2, y1, y2;
+  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+  if (args.length === 1) {
+    switch (args[0]) {
+      case 'linear':
+        [x1, y1, x2, y2] = [0.0, 0.0, 1.0, 1.0];
+        break;
+      case 'ease':
+        [x1, y1, x2, y2] = [0.25, 0.1, 0.25, 1.0];
+        break;
+      case 'ease-in':
+        [x1, y1, x2, y2] = [0.42, 0.0, 1.0, 1.0];
+        break;
+      case 'ease-out':
+        [x1, y1, x2, y2] = [0.42, 0.0, 0.58, 1.0];
+        break;
+      case 'ease-in-out':
+        [x1, y1, x2, y2] = [0.0, 0.0, 0.58, 1.0];
+        break;
+      default:
+        {
+          var easing = args[0].split('(');
+          if (easing[0] === 'cubic-bezier' && easing[1].split(')')[0].split(',').length === 4) {
+            [x1, y1, x2, y2] = easing[1].split(')')[0].split(',').map(x => parseFloat(x));
+          }
+        }
+    }
+  } else if (args.length === 4) {
+    [x1, y1, x2, y2] = args;
+  }
+  var curveX = cubicBezier(x1, x2);
+  var curveY = cubicBezier(y1, y2);
+  var derCurveX = derivativeCubicBezier(x1, x2);
+  var rangeValue = value => {
+    if (value > 1) {
+      return 1;
+    }
+    if (value < 0) {
+      return 0;
+    }
+    return value;
+  };
+  var bezier = _t => {
+    var t = _t > 1 ? 1 : _t;
+    var x = t;
+    for (var i = 0; i < 8; ++i) {
+      var evalT = curveX(x) - t;
+      var derVal = derCurveX(x);
+      if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {
+        return curveY(x);
+      }
+      x = rangeValue(x - evalT / derVal);
+    }
+    return curveY(x);
+  };
+  bezier.isStepper = false;
+  return bezier;
+};
+var configSpring = exports.configSpring = function configSpring() {
+  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+  var {
+    stiff = 100,
+    damping = 8,
+    dt = 17
+  } = config;
+  var stepper = (currX, destX, currV) => {
+    var FSpring = -(currX - destX) * stiff;
+    var FDamping = currV * damping;
+    var newV = currV + (FSpring - FDamping) * dt / 1000;
+    var newX = currV * dt / 1000 + currX;
+    if (Math.abs(newX - destX) < ACCURACY && Math.abs(newV) < ACCURACY) {
+      return [destX, 0];
+    }
+    return [newX, newV];
+  };
+  stepper.isStepper = true;
+  stepper.dt = dt;
+  return stepper;
+};
+var configEasing = easing => {
+  if (typeof easing === 'string') {
+    switch (easing) {
+      case 'ease':
+      case 'ease-in-out':
+      case 'ease-out':
+      case 'ease-in':
+      case 'linear':
+        return configBezier(easing);
+      case 'spring':
+        return configSpring();
+      default:
+        if (easing.split('(')[0] === 'cubic-bezier') {
+          return configBezier(easing);
+        }
+    }
+  }
+  if (typeof easing === 'function') {
+    return easing;
+  }
+  return null;
+};
+exports.configEasing = configEasing;
Index: node_modules/recharts/lib/animation/timeoutController.js
===================================================================
--- node_modules/recharts/lib/animation/timeoutController.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/timeoutController.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RequestAnimationFrameTimeoutController = void 0;
+/**
+ * Callback type for the timeout function.
+ * Receives current time in milliseconds as an argument.
+ */
+
+/**
+ * A function that, when called, cancels the timeout.
+ */
+
+class RequestAnimationFrameTimeoutController {
+  setTimeout(callback) {
+    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+    var startTime = performance.now();
+    var requestId = null;
+    var executeCallback = now => {
+      if (now - startTime >= delay) {
+        callback(now);
+        // tests fail without the extra if, even when five lines below it's not needed
+        // TODO finish transition to the mocked timeout controller and then remove this condition
+      } else if (typeof requestAnimationFrame === 'function') {
+        requestId = requestAnimationFrame(executeCallback);
+      }
+    };
+    requestId = requestAnimationFrame(executeCallback);
+    return () => {
+      cancelAnimationFrame(requestId);
+    };
+  }
+}
+exports.RequestAnimationFrameTimeoutController = RequestAnimationFrameTimeoutController;
Index: node_modules/recharts/lib/animation/useAnimationManager.js
===================================================================
--- node_modules/recharts/lib/animation/useAnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/useAnimationManager.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.AnimationManagerContext = void 0;
+exports.useAnimationManager = useAnimationManager;
+var _react = require("react");
+var _createDefaultAnimationManager = require("./createDefaultAnimationManager");
+var AnimationManagerContext = exports.AnimationManagerContext = /*#__PURE__*/(0, _react.createContext)(_createDefaultAnimationManager.createDefaultAnimationManager);
+function useAnimationManager(animationId, animationManagerFromProps) {
+  var contextAnimationManager = (0, _react.useContext)(AnimationManagerContext);
+  return (0, _react.useMemo)(() => animationManagerFromProps !== null && animationManagerFromProps !== void 0 ? animationManagerFromProps : contextAnimationManager(animationId), [animationId, animationManagerFromProps, contextAnimationManager]);
+}
Index: node_modules/recharts/lib/animation/util.js
===================================================================
--- node_modules/recharts/lib/animation/util.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/animation/util.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.mapObject = exports.getTransitionVal = exports.getIntersectionKeys = exports.getDashCase = void 0;
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/*
+ * @description: convert camel case to dash case
+ * string => string
+ */
+var getDashCase = name => name.replace(/([A-Z])/g, v => "-".concat(v.toLowerCase()));
+exports.getDashCase = getDashCase;
+var getTransitionVal = (props, duration, easing) => props.map(prop => "".concat(getDashCase(prop), " ").concat(duration, "ms ").concat(easing)).join(',');
+
+/**
+ * Finds the intersection of keys between two objects
+ * @param {object} preObj previous object
+ * @param {object} nextObj next object
+ * @returns an array of keys that exist in both objects
+ */
+exports.getTransitionVal = getTransitionVal;
+var getIntersectionKeys = (preObj, nextObj) => [Object.keys(preObj), Object.keys(nextObj)].reduce((a, b) => a.filter(c => b.includes(c)));
+
+/**
+ * Maps an object to another object
+ * @param {function} fn function to map
+ * @param {object} obj object to map
+ * @returns mapped object
+ */
+exports.getIntersectionKeys = getIntersectionKeys;
+var mapObject = (fn, obj) => Object.keys(obj).reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+  [key]: fn(key, obj[key])
+}), {});
+exports.mapObject = mapObject;
Index: node_modules/recharts/lib/cartesian/Area.js
===================================================================
--- node_modules/recharts/lib/cartesian/Area.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/Area.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,790 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Area = Area;
+exports.computeArea = computeArea;
+exports.getBaseValue = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Curve = require("../shape/Curve");
+var _Dot = require("../shape/Dot");
+var _Layer = require("../container/Layer");
+var _LabelList = require("../component/LabelList");
+var _Global = require("../util/Global");
+var _DataUtils = require("../util/DataUtils");
+var _ChartUtils = require("../util/ChartUtils");
+var _ReactUtils = require("../util/ReactUtils");
+var _ActivePoints = require("../component/ActivePoints");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _GraphicalItemClipPath = require("./GraphicalItemClipPath");
+var _areaSelectors = require("../state/selectors/areaSelectors");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _selectors = require("../state/selectors/selectors");
+var _SetLegendPayload = require("../state/SetLegendPayload");
+var _hooks = require("../state/hooks");
+var _useAnimationId = require("../util/useAnimationId");
+var _resolveDefaultProps2 = require("../util/resolveDefaultProps");
+var _isWellBehavedNumber = require("../util/isWellBehavedNumber");
+var _hooks2 = require("../hooks");
+var _RegisterGraphicalItemId = require("../context/RegisterGraphicalItemId");
+var _SetGraphicalItem = require("../state/SetGraphicalItem");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _JavascriptAnimate = require("../animation/JavascriptAnimate");
+var _excluded = ["id"],
+  _excluded2 = ["activeDot", "animationBegin", "animationDuration", "animationEasing", "connectNulls", "dot", "fill", "fillOpacity", "hide", "isAnimationActive", "legendType", "stroke", "xAxisId", "yAxisId"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+
+function getLegendItemColor(stroke, fill) {
+  return stroke && stroke !== 'none' ? stroke : fill;
+}
+var computeLegendPayloadFromAreaData = props => {
+  var {
+    dataKey,
+    name,
+    stroke,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: getLegendItemColor(stroke, fill),
+    value: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+    payload: props
+  }];
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    data,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    unit
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey: undefined,
+      name: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+      hide,
+      type: props.tooltipType,
+      color: getLegendItemColor(stroke, fill),
+      unit
+    }
+  };
+}
+var renderDotItem = (option, props) => {
+  var dotItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    dotItem = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    dotItem = option(props);
+  } else {
+    var className = (0, _clsx.clsx)('recharts-area-dot', typeof option !== 'boolean' ? option.className : '');
+    dotItem = /*#__PURE__*/React.createElement(_Dot.Dot, _extends({}, props, {
+      className: className
+    }));
+  }
+  return dotItem;
+};
+function shouldRenderDots(points, dot) {
+  if (points == null) {
+    return false;
+  }
+  if (dot) {
+    return true;
+  }
+  return points.length === 1;
+}
+function Dots(_ref) {
+  var {
+    clipPathId,
+    points,
+    props
+  } = _ref;
+  var {
+    needClip,
+    dot,
+    dataKey
+  } = props;
+  if (!shouldRenderDots(points, dot)) {
+    return null;
+  }
+  var clipDot = (0, _ReactUtils.isClipDot)(dot);
+  var areaProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props);
+  var customDotProps = (0, _ReactUtils.filterProps)(dot, true);
+  var dots = points.map((entry, i) => {
+    var dotProps = _objectSpread(_objectSpread(_objectSpread({
+      key: "dot-".concat(i),
+      r: 3
+    }, areaProps), customDotProps), {}, {
+      index: i,
+      cx: entry.x,
+      cy: entry.y,
+      dataKey,
+      value: entry.value,
+      payload: entry.payload,
+      points
+    });
+    return renderDotItem(dot, dotProps);
+  });
+  var dotsProps = {
+    clipPath: needClip ? "url(#clipPath-".concat(clipDot ? '' : 'dots-').concat(clipPathId, ")") : undefined
+  };
+  return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+    className: "recharts-area-dots"
+  }, dotsProps), dots);
+}
+function StaticArea(_ref2) {
+  var {
+    points,
+    baseLine,
+    needClip,
+    clipPathId,
+    props,
+    showLabels
+  } = _ref2;
+  var {
+    layout,
+    type,
+    stroke,
+    connectNulls,
+    isRange
+  } = props;
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded);
+  var allOtherProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(propsWithoutId);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, (points === null || points === void 0 ? void 0 : points.length) > 1 && /*#__PURE__*/React.createElement(_Layer.Layer, {
+    clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined
+  }, /*#__PURE__*/React.createElement(_Curve.Curve, _extends({}, allOtherProps, {
+    id: id,
+    points: points,
+    connectNulls: connectNulls,
+    type: type,
+    baseLine: baseLine,
+    layout: layout,
+    stroke: "none",
+    className: "recharts-area-area"
+  })), stroke !== 'none' && /*#__PURE__*/React.createElement(_Curve.Curve, _extends({}, allOtherProps, {
+    className: "recharts-area-curve",
+    layout: layout,
+    type: type,
+    connectNulls: connectNulls,
+    fill: "none",
+    points: points
+  })), stroke !== 'none' && isRange && /*#__PURE__*/React.createElement(_Curve.Curve, _extends({}, allOtherProps, {
+    className: "recharts-area-curve",
+    layout: layout,
+    type: type,
+    connectNulls: connectNulls,
+    fill: "none",
+    points: baseLine
+  }))), /*#__PURE__*/React.createElement(Dots, {
+    points: points,
+    props: propsWithoutId,
+    clipPathId: clipPathId
+  }), showLabels && _LabelList.LabelList.renderCallByParent(propsWithoutId, points));
+}
+function VerticalRect(_ref3) {
+  var {
+    alpha,
+    baseLine,
+    points,
+    strokeWidth
+  } = _ref3;
+  var startY = points[0].y;
+  var endY = points[points.length - 1].y;
+  if (!(0, _isWellBehavedNumber.isWellBehavedNumber)(startY) || !(0, _isWellBehavedNumber.isWellBehavedNumber)(endY)) {
+    return null;
+  }
+  var height = alpha * Math.abs(startY - endY);
+  var maxX = Math.max(...points.map(entry => entry.x || 0));
+  if ((0, _DataUtils.isNumber)(baseLine)) {
+    maxX = Math.max(baseLine, maxX);
+  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {
+    maxX = Math.max(...baseLine.map(entry => entry.x || 0), maxX);
+  }
+  if ((0, _DataUtils.isNumber)(maxX)) {
+    return /*#__PURE__*/React.createElement("rect", {
+      x: 0,
+      y: startY < endY ? startY : startY - height,
+      width: maxX + (strokeWidth ? parseInt("".concat(strokeWidth), 10) : 1),
+      height: Math.floor(height)
+    });
+  }
+  return null;
+}
+function HorizontalRect(_ref4) {
+  var {
+    alpha,
+    baseLine,
+    points,
+    strokeWidth
+  } = _ref4;
+  var startX = points[0].x;
+  var endX = points[points.length - 1].x;
+  if (!(0, _isWellBehavedNumber.isWellBehavedNumber)(startX) || !(0, _isWellBehavedNumber.isWellBehavedNumber)(endX)) {
+    return null;
+  }
+  var width = alpha * Math.abs(startX - endX);
+  var maxY = Math.max(...points.map(entry => entry.y || 0));
+  if ((0, _DataUtils.isNumber)(baseLine)) {
+    maxY = Math.max(baseLine, maxY);
+  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {
+    maxY = Math.max(...baseLine.map(entry => entry.y || 0), maxY);
+  }
+  if ((0, _DataUtils.isNumber)(maxY)) {
+    return /*#__PURE__*/React.createElement("rect", {
+      x: startX < endX ? startX : startX - width,
+      y: 0,
+      width: width,
+      height: Math.floor(maxY + (strokeWidth ? parseInt("".concat(strokeWidth), 10) : 1))
+    });
+  }
+  return null;
+}
+function ClipRect(_ref5) {
+  var {
+    alpha,
+    layout,
+    points,
+    baseLine,
+    strokeWidth
+  } = _ref5;
+  if (layout === 'vertical') {
+    return /*#__PURE__*/React.createElement(VerticalRect, {
+      alpha: alpha,
+      points: points,
+      baseLine: baseLine,
+      strokeWidth: strokeWidth
+    });
+  }
+  return /*#__PURE__*/React.createElement(HorizontalRect, {
+    alpha: alpha,
+    points: points,
+    baseLine: baseLine,
+    strokeWidth: strokeWidth
+  });
+}
+function AreaWithAnimation(_ref6) {
+  var {
+    needClip,
+    clipPathId,
+    props,
+    previousPointsRef,
+    previousBaselineRef
+  } = _ref6;
+  var {
+    points,
+    baseLine,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationStart,
+    onAnimationEnd
+  } = props;
+  var animationId = (0, _useAnimationId.useAnimationId)(props, 'recharts-area-');
+  var [isAnimating, setIsAnimating] = (0, _react.useState)(true);
+  var handleAnimationEnd = (0, _react.useCallback)(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = (0, _react.useCallback)(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  var prevPoints = previousPointsRef.current;
+  var prevBaseLine = previousBaselineRef.current;
+  return /*#__PURE__*/React.createElement(_JavascriptAnimate.JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    if (prevPoints) {
+      var prevPointsDiffFactor = prevPoints.length / points.length;
+      var stepPoints =
+      /*
+       * Here it is important that at the very end of the animation, on the last frame,
+       * we render the original points without any interpolation.
+       * This is needed because the code above is checking for reference equality to decide if the animation should run
+       * and if we create a new array instance (even if the numbers were the same)
+       * then we would break animations.
+       */
+      t === 1 ? points : points.map((entry, index) => {
+        var prevPointIndex = Math.floor(index * prevPointsDiffFactor);
+        if (prevPoints[prevPointIndex]) {
+          var prev = prevPoints[prevPointIndex];
+          return _objectSpread(_objectSpread({}, entry), {}, {
+            x: (0, _DataUtils.interpolate)(prev.x, entry.x, t),
+            y: (0, _DataUtils.interpolate)(prev.y, entry.y, t)
+          });
+        }
+        return entry;
+      });
+      var stepBaseLine;
+      if ((0, _DataUtils.isNumber)(baseLine)) {
+        stepBaseLine = (0, _DataUtils.interpolate)(prevBaseLine, baseLine, t);
+      } else if ((0, _DataUtils.isNullish)(baseLine) || (0, _DataUtils.isNan)(baseLine)) {
+        stepBaseLine = (0, _DataUtils.interpolate)(prevBaseLine, 0, t);
+      } else {
+        stepBaseLine = baseLine.map((entry, index) => {
+          var prevPointIndex = Math.floor(index * prevPointsDiffFactor);
+          if (Array.isArray(prevBaseLine) && prevBaseLine[prevPointIndex]) {
+            var prev = prevBaseLine[prevPointIndex];
+            return _objectSpread(_objectSpread({}, entry), {}, {
+              x: (0, _DataUtils.interpolate)(prev.x, entry.x, t),
+              y: (0, _DataUtils.interpolate)(prev.y, entry.y, t)
+            });
+          }
+          return entry;
+        });
+      }
+      if (t > 0) {
+        /*
+         * We need to keep the refs in the parent component because we need to remember the last shape of the animation
+         * even if AreaWithAnimation is unmounted as that happens when changing props.
+         *
+         * And we need to update the refs here because here is where the interpolation is computed.
+         * Eslint doesn't like changing function arguments, but we need it so here is an eslint-disable.
+         */
+        // eslint-disable-next-line no-param-reassign
+        previousPointsRef.current = stepPoints;
+        // eslint-disable-next-line no-param-reassign
+        previousBaselineRef.current = stepBaseLine;
+      }
+      return /*#__PURE__*/React.createElement(StaticArea, {
+        points: stepPoints,
+        baseLine: stepBaseLine,
+        needClip: needClip,
+        clipPathId: clipPathId,
+        props: props,
+        showLabels: !isAnimating
+      });
+    }
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = points;
+      // eslint-disable-next-line no-param-reassign
+      previousBaselineRef.current = baseLine;
+    }
+    return /*#__PURE__*/React.createElement(_Layer.Layer, null, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("clipPath", {
+      id: "animationClipPath-".concat(clipPathId)
+    }, /*#__PURE__*/React.createElement(ClipRect, {
+      alpha: t,
+      points: points,
+      baseLine: baseLine,
+      layout: props.layout,
+      strokeWidth: props.strokeWidth
+    }))), /*#__PURE__*/React.createElement(_Layer.Layer, {
+      clipPath: "url(#animationClipPath-".concat(clipPathId, ")")
+    }, /*#__PURE__*/React.createElement(StaticArea, {
+      points: points,
+      baseLine: baseLine,
+      needClip: needClip,
+      clipPathId: clipPathId,
+      props: props,
+      showLabels: true
+    })));
+  });
+}
+
+/*
+ * This components decides if the area should be animated or not.
+ * It also holds the state of the animation.
+ */
+function RenderArea(_ref7) {
+  var {
+    needClip,
+    clipPathId,
+    props
+  } = _ref7;
+  var {
+    points,
+    baseLine,
+    isAnimationActive
+  } = props;
+
+  /*
+   * These two must be refs, not state!
+   * Because we want to store the most recent shape of the animation in case we have to interrupt the animation;
+   * that happens when user initiates another animation before the current one finishes.
+   *
+   * If this was a useState, then every step in the animation would trigger a re-render.
+   * So, useRef it is.
+   */
+  var previousPointsRef = (0, _react.useRef)(null);
+  var previousBaselineRef = (0, _react.useRef)();
+  var prevPoints = previousPointsRef.current;
+  var prevBaseLine = previousBaselineRef.current;
+  if (isAnimationActive &&
+  /*
+   * Here it's important that we unmount of AreaWithAnimation in case points are undefined
+   * - this will make sure to interrupt the animation if it's running.
+   * We still get to keep the last shape of the animation in the refs above.
+   */
+  points && points.length && (prevPoints !== points || prevBaseLine !== baseLine)) {
+    return /*#__PURE__*/React.createElement(AreaWithAnimation, {
+      needClip: needClip,
+      clipPathId: clipPathId,
+      props: props,
+      previousPointsRef: previousPointsRef,
+      previousBaselineRef: previousBaselineRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(StaticArea, {
+    points: points,
+    baseLine: baseLine,
+    needClip: needClip,
+    clipPathId: clipPathId,
+    props: props,
+    showLabels: true
+  });
+}
+class AreaWithState extends _react.PureComponent {
+  render() {
+    var _filterProps;
+    var {
+      hide,
+      dot,
+      points,
+      className,
+      top,
+      left,
+      needClip,
+      xAxisId,
+      yAxisId,
+      width,
+      height,
+      id,
+      baseLine
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = (0, _clsx.clsx)('recharts-area', className);
+    var clipPathId = id;
+    var {
+      r = 3,
+      strokeWidth = 2
+    } = (_filterProps = (0, _ReactUtils.filterProps)(dot, false)) !== null && _filterProps !== void 0 ? _filterProps : {
+      r: 3,
+      strokeWidth: 2
+    };
+    var clipDot = (0, _ReactUtils.isClipDot)(dot);
+    var dotSize = r * 2 + strokeWidth;
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: layerClass
+    }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(_GraphicalItemClipPath.GraphicalItemClipPath, {
+      clipPathId: clipPathId,
+      xAxisId: xAxisId,
+      yAxisId: yAxisId
+    }), !clipDot && /*#__PURE__*/React.createElement("clipPath", {
+      id: "clipPath-dots-".concat(clipPathId)
+    }, /*#__PURE__*/React.createElement("rect", {
+      x: left - dotSize / 2,
+      y: top - dotSize / 2,
+      width: width + dotSize,
+      height: height + dotSize
+    }))), /*#__PURE__*/React.createElement(RenderArea, {
+      needClip: needClip,
+      clipPathId: clipPathId,
+      props: this.props
+    })), /*#__PURE__*/React.createElement(_ActivePoints.ActivePoints, {
+      points: points,
+      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),
+      itemDataKey: this.props.dataKey,
+      activeDot: this.props.activeDot
+    }), this.props.isRange && Array.isArray(baseLine) && /*#__PURE__*/React.createElement(_ActivePoints.ActivePoints, {
+      points: baseLine,
+      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),
+      itemDataKey: this.props.dataKey,
+      activeDot: this.props.activeDot
+    }));
+  }
+}
+var defaultAreaProps = {
+  activeDot: true,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  connectNulls: false,
+  dot: false,
+  fill: '#3182bd',
+  fillOpacity: 0.6,
+  hide: false,
+  isAnimationActive: !_Global.Global.isSsr,
+  legendType: 'line',
+  stroke: '#3182bd',
+  xAxisId: 0,
+  yAxisId: 0
+};
+function AreaImpl(props) {
+  var _useAppSelector;
+  var _resolveDefaultProps = (0, _resolveDefaultProps2.resolveDefaultProps)(props, defaultAreaProps),
+    {
+      activeDot,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      connectNulls,
+      dot,
+      fill,
+      fillOpacity,
+      hide,
+      isAnimationActive,
+      legendType,
+      stroke,
+      xAxisId,
+      yAxisId
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded2);
+  var layout = (0, _chartLayoutContext.useChartLayout)();
+  var chartName = (0, _selectors.useChartName)();
+  var {
+    needClip
+  } = (0, _GraphicalItemClipPath.useNeedsClip)(xAxisId, yAxisId);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var {
+    points,
+    isRange,
+    baseLine
+  } = (_useAppSelector = (0, _hooks.useAppSelector)(state => (0, _areaSelectors.selectArea)(state, xAxisId, yAxisId, isPanorama, props.id))) !== null && _useAppSelector !== void 0 ? _useAppSelector : {};
+  var plotArea = (0, _hooks2.usePlotArea)();
+  if (layout !== 'horizontal' && layout !== 'vertical' || plotArea == null) {
+    // Can't render Area in an unsupported layout
+    return null;
+  }
+  if (chartName !== 'AreaChart' && chartName !== 'ComposedChart') {
+    // There is nothing stopping us from rendering Area in other charts, except for historical reasons. Do we want to allow that?
+    return null;
+  }
+  var {
+    height,
+    width,
+    x: left,
+    y: top
+  } = plotArea;
+  if (!points || !points.length) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(AreaWithState, _extends({}, everythingElse, {
+    activeDot: activeDot,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    baseLine: baseLine,
+    connectNulls: connectNulls,
+    dot: dot,
+    fill: fill,
+    fillOpacity: fillOpacity,
+    height: height,
+    hide: hide,
+    layout: layout,
+    isAnimationActive: isAnimationActive,
+    isRange: isRange,
+    legendType: legendType,
+    needClip: needClip,
+    points: points,
+    stroke: stroke,
+    width: width,
+    left: left,
+    top: top,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId
+  }));
+}
+var getBaseValue = (layout, chartBaseValue, itemBaseValue, xAxis, yAxis) => {
+  // The baseValue can be defined both on the AreaChart, and on the Area.
+  // The value for the item takes precedence.
+  var baseValue = itemBaseValue !== null && itemBaseValue !== void 0 ? itemBaseValue : chartBaseValue;
+  if ((0, _DataUtils.isNumber)(baseValue)) {
+    return baseValue;
+  }
+  var numericAxis = layout === 'horizontal' ? yAxis : xAxis;
+  // @ts-expect-error d3scale .domain() returns unknown, Math.max expects number
+  var domain = numericAxis.scale.domain();
+  if (numericAxis.type === 'number') {
+    var domainMax = Math.max(domain[0], domain[1]);
+    var domainMin = Math.min(domain[0], domain[1]);
+    if (baseValue === 'dataMin') {
+      return domainMin;
+    }
+    if (baseValue === 'dataMax') {
+      return domainMax;
+    }
+    return domainMax < 0 ? domainMax : Math.max(Math.min(domain[0], domain[1]), 0);
+  }
+  if (baseValue === 'dataMin') {
+    return domain[0];
+  }
+  if (baseValue === 'dataMax') {
+    return domain[1];
+  }
+  return domain[0];
+};
+exports.getBaseValue = getBaseValue;
+function computeArea(_ref8) {
+  var {
+    areaSettings: {
+      connectNulls,
+      baseValue: itemBaseValue,
+      dataKey
+    },
+    stackedData,
+    layout,
+    chartBaseValue,
+    xAxis,
+    yAxis,
+    displayedData,
+    dataStartIndex,
+    xAxisTicks,
+    yAxisTicks,
+    bandSize
+  } = _ref8;
+  var hasStack = stackedData && stackedData.length;
+  var baseValue = getBaseValue(layout, chartBaseValue, itemBaseValue, xAxis, yAxis);
+  var isHorizontalLayout = layout === 'horizontal';
+  var isRange = false;
+  var points = displayedData.map((entry, index) => {
+    var value;
+    if (hasStack) {
+      value = stackedData[dataStartIndex + index];
+    } else {
+      value = (0, _ChartUtils.getValueByDataKey)(entry, dataKey);
+      if (!Array.isArray(value)) {
+        value = [baseValue, value];
+      } else {
+        isRange = true;
+      }
+    }
+    var isBreakPoint = value[1] == null || hasStack && !connectNulls && (0, _ChartUtils.getValueByDataKey)(entry, dataKey) == null;
+    if (isHorizontalLayout) {
+      return {
+        // @ts-expect-error getCateCoordinateOfLine expects chart data to be an object, we allow unknown
+        x: (0, _ChartUtils.getCateCoordinateOfLine)({
+          axis: xAxis,
+          ticks: xAxisTicks,
+          bandSize,
+          entry,
+          index
+        }),
+        y: isBreakPoint ? null : yAxis.scale(value[1]),
+        value,
+        payload: entry
+      };
+    }
+    return {
+      x: isBreakPoint ? null : xAxis.scale(value[1]),
+      // @ts-expect-error getCateCoordinateOfLine expects chart data to be an object, we allow unknown
+      y: (0, _ChartUtils.getCateCoordinateOfLine)({
+        axis: yAxis,
+        ticks: yAxisTicks,
+        bandSize,
+        entry,
+        index
+      }),
+      value,
+      payload: entry
+    };
+  });
+  var baseLine;
+  if (hasStack || isRange) {
+    baseLine = points.map(entry => {
+      var x = Array.isArray(entry.value) ? entry.value[0] : null;
+      if (isHorizontalLayout) {
+        return {
+          x: entry.x,
+          y: x != null && entry.y != null ? yAxis.scale(x) : null,
+          payload: entry.payload
+        };
+      }
+      return {
+        x: x != null ? xAxis.scale(x) : null,
+        y: entry.y,
+        payload: entry.payload
+      };
+    });
+  } else {
+    baseLine = isHorizontalLayout ? yAxis.scale(baseValue) : xAxis.scale(baseValue);
+  }
+  return {
+    points,
+    baseLine,
+    isRange
+  };
+}
+function Area(outsideProps) {
+  var props = (0, _resolveDefaultProps2.resolveDefaultProps)(outsideProps, defaultAreaProps);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.
+  return /*#__PURE__*/React.createElement(_RegisterGraphicalItemId.RegisterGraphicalItemId, {
+    id: props.id,
+    type: "area"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetLegendPayload.SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromAreaData(props)
+  }), /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: props
+  }), /*#__PURE__*/React.createElement(_SetGraphicalItem.SetCartesianGraphicalItem, {
+    type: "area",
+    id: id,
+    data: props.data,
+    dataKey: props.dataKey,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: 0,
+    stackId: (0, _ChartUtils.getNormalizedStackId)(props.stackId),
+    hide: props.hide,
+    barSize: undefined,
+    baseValue: props.baseValue,
+    isPanorama: isPanorama,
+    connectNulls: props.connectNulls
+  }), /*#__PURE__*/React.createElement(AreaImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+Area.displayName = 'Area';
Index: node_modules/recharts/lib/cartesian/Bar.js
===================================================================
--- node_modules/recharts/lib/cartesian/Bar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/Bar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,570 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Bar = Bar;
+exports.computeBarRectangles = computeBarRectangles;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Layer = require("../container/Layer");
+var _Cell = require("../component/Cell");
+var _LabelList = require("../component/LabelList");
+var _DataUtils = require("../util/DataUtils");
+var _ReactUtils = require("../util/ReactUtils");
+var _Global = require("../util/Global");
+var _ChartUtils = require("../util/ChartUtils");
+var _types = require("../util/types");
+var _BarUtils = require("../util/BarUtils");
+var _tooltipContext = require("../context/tooltipContext");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _ErrorBarContext = require("../context/ErrorBarContext");
+var _GraphicalItemClipPath = require("./GraphicalItemClipPath");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _barSelectors = require("../state/selectors/barSelectors");
+var _hooks = require("../state/hooks");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _tooltipSelectors = require("../state/selectors/tooltipSelectors");
+var _SetLegendPayload = require("../state/SetLegendPayload");
+var _useAnimationId = require("../util/useAnimationId");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _RegisterGraphicalItemId = require("../context/RegisterGraphicalItemId");
+var _SetGraphicalItem = require("../state/SetGraphicalItem");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _JavascriptAnimate = require("../animation/JavascriptAnimate");
+var _excluded = ["onMouseEnter", "onMouseLeave", "onClick"],
+  _excluded2 = ["value", "background", "tooltipPosition"],
+  _excluded3 = ["id"],
+  _excluded4 = ["onMouseEnter", "onClick", "onMouseLeave"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var computeLegendPayloadFromBarData = props => {
+  var {
+    dataKey,
+    name,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: fill,
+    value: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+    payload: props
+  }];
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    unit
+  } = props;
+  return {
+    dataDefinedOnItem: undefined,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey: undefined,
+      name: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+      hide,
+      type: props.tooltipType,
+      color: props.fill,
+      unit
+    }
+  };
+}
+function BarBackground(props) {
+  var activeIndex = (0, _hooks.useAppSelector)(_tooltipSelectors.selectActiveTooltipIndex);
+  var {
+    data,
+    dataKey,
+    background: backgroundFromProps,
+    allOtherBarProps
+  } = props;
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onMouseLeave: onMouseLeaveFromProps,
+      onClick: onItemClickFromProps
+    } = allOtherBarProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherBarProps, _excluded);
+
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseEnterFromContext = (0, _tooltipContext.useMouseEnterItemDispatch)(onMouseEnterFromProps, dataKey);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseLeaveFromContext = (0, _tooltipContext.useMouseLeaveItemDispatch)(onMouseLeaveFromProps);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onClickFromContext = (0, _tooltipContext.useMouseClickItemDispatch)(onItemClickFromProps, dataKey);
+  if (!backgroundFromProps || data == null) {
+    return null;
+  }
+  var backgroundProps = (0, _ReactUtils.filterProps)(backgroundFromProps, false);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, data.map((entry, i) => {
+    var {
+        value,
+        background: backgroundFromDataEntry,
+        tooltipPosition
+      } = entry,
+      rest = _objectWithoutProperties(entry, _excluded2);
+    if (!backgroundFromDataEntry) {
+      return null;
+    }
+
+    // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+    var onMouseEnter = onMouseEnterFromContext(entry, i);
+    // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+    var onMouseLeave = onMouseLeaveFromContext(entry, i);
+    // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+    var onClick = onClickFromContext(entry, i);
+    var barRectangleProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
+      option: backgroundFromProps,
+      isActive: String(i) === activeIndex
+    }, rest), {}, {
+      // @ts-expect-error BarRectangle props do not accept `fill` property.
+      fill: '#eee'
+    }, backgroundFromDataEntry), backgroundProps), (0, _types.adaptEventsOfChild)(restOfAllOtherProps, entry, i)), {}, {
+      onMouseEnter,
+      onMouseLeave,
+      onClick,
+      dataKey,
+      index: i,
+      className: 'recharts-bar-background-rectangle'
+    });
+    return /*#__PURE__*/React.createElement(_BarUtils.BarRectangle, _extends({
+      key: "background-bar-".concat(i)
+    }, barRectangleProps));
+  }));
+}
+function BarRectangles(_ref) {
+  var {
+    data,
+    props,
+    showLabels
+  } = _ref;
+  var _svgPropertiesNoEvent = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props),
+    {
+      id
+    } = _svgPropertiesNoEvent,
+    baseProps = _objectWithoutProperties(_svgPropertiesNoEvent, _excluded3);
+  var {
+    shape,
+    dataKey,
+    activeBar
+  } = props;
+  var activeIndex = (0, _hooks.useAppSelector)(_tooltipSelectors.selectActiveTooltipIndex);
+  var activeDataKey = (0, _hooks.useAppSelector)(_tooltipSelectors.selectActiveTooltipDataKey);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = props,
+    restOfAllOtherProps = _objectWithoutProperties(props, _excluded4);
+
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseEnterFromContext = (0, _tooltipContext.useMouseEnterItemDispatch)(onMouseEnterFromProps, dataKey);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onMouseLeaveFromContext = (0, _tooltipContext.useMouseLeaveItemDispatch)(onMouseLeaveFromProps);
+  // @ts-expect-error bar mouse events are not compatible with recharts mouse events
+  var onClickFromContext = (0, _tooltipContext.useMouseClickItemDispatch)(onItemClickFromProps, dataKey);
+  if (!data) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, data.map((entry, i) => {
+    /*
+     * Bars support stacking, meaning that there can be multiple bars at the same x value.
+     * With Tooltip shared=false we only want to highlight the currently active Bar, not all.
+     *
+     * Also, if the tooltip is shared, we want to highlight all bars at the same x value
+     * regardless of the dataKey.
+     *
+     * With shared Tooltip, the activeDataKey is undefined.
+     */
+    var isActive = activeBar && String(i) === activeIndex && (activeDataKey == null || dataKey === activeDataKey);
+    var option = isActive ? activeBar : shape;
+    // ts-expect-error event types are not compatible - this only fires with strictNullChecks on
+    var barRectangleProps = _objectSpread(_objectSpread(_objectSpread({}, baseProps), entry), {}, {
+      isActive,
+      option,
+      index: i,
+      dataKey
+    });
+    return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+      className: "recharts-bar-rectangle"
+    }, (0, _types.adaptEventsOfChild)(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!
+      ,
+      onClick: onClickFromContext(entry, i)
+      // https://github.com/recharts/recharts/issues/5415
+      // eslint-disable-next-line react/no-array-index-key
+      ,
+      key: "rectangle-".concat(entry === null || entry === void 0 ? void 0 : entry.x, "-").concat(entry === null || entry === void 0 ? void 0 : entry.y, "-").concat(entry === null || entry === void 0 ? void 0 : entry.value, "-").concat(i)
+    }), /*#__PURE__*/React.createElement(_BarUtils.BarRectangle, barRectangleProps));
+  }), showLabels && _LabelList.LabelList.renderCallByParent(props, data));
+}
+function RectanglesWithAnimation(_ref2) {
+  var {
+    props,
+    previousRectanglesRef
+  } = _ref2;
+  var {
+    data,
+    layout,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevData = previousRectanglesRef.current;
+  var animationId = (0, _useAnimationId.useAnimationId)(props, 'recharts-bar-');
+  var [isAnimating, setIsAnimating] = (0, _react.useState)(false);
+  var handleAnimationEnd = (0, _react.useCallback)(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = (0, _react.useCallback)(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(_JavascriptAnimate.JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    var stepData = t === 1 ? data : data === null || data === void 0 ? void 0 : data.map((entry, index) => {
+      var prev = prevData && prevData[index];
+      if (prev) {
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: (0, _DataUtils.interpolate)(prev.x, entry.x, t),
+          y: (0, _DataUtils.interpolate)(prev.y, entry.y, t),
+          width: (0, _DataUtils.interpolate)(prev.width, entry.width, t),
+          height: (0, _DataUtils.interpolate)(prev.height, entry.height, t)
+        });
+      }
+      if (layout === 'horizontal') {
+        var h = (0, _DataUtils.interpolate)(0, entry.height, t);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          y: entry.y + entry.height - h,
+          height: h
+        });
+      }
+      var w = (0, _DataUtils.interpolate)(0, entry.width, t);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        width: w
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousRectanglesRef.current = stepData !== null && stepData !== void 0 ? stepData : null;
+    }
+    if (stepData == null) {
+      return null;
+    }
+    return /*#__PURE__*/React.createElement(_Layer.Layer, null, /*#__PURE__*/React.createElement(BarRectangles, {
+      props: props,
+      data: stepData,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderRectangles(props) {
+  var {
+    data,
+    isAnimationActive
+  } = props;
+  var previousRectanglesRef = (0, _react.useRef)(null);
+  if (isAnimationActive && data && data.length && (previousRectanglesRef.current == null || previousRectanglesRef.current !== data)) {
+    return /*#__PURE__*/React.createElement(RectanglesWithAnimation, {
+      previousRectanglesRef: previousRectanglesRef,
+      props: props
+    });
+  }
+  return /*#__PURE__*/React.createElement(BarRectangles, {
+    props: props,
+    data: data,
+    showLabels: true
+  });
+}
+var defaultMinPointSize = 0;
+var errorBarDataPointFormatter = (dataPoint, dataKey) => {
+  /**
+   * if the value coming from `selectBarRectangles` is an array then this is a stacked bar chart.
+   * arr[1] represents end value of the bar since the data is in the form of [startValue, endValue].
+   * */
+  var value = Array.isArray(dataPoint.value) ? dataPoint.value[1] : dataPoint.value;
+  return {
+    x: dataPoint.x,
+    y: dataPoint.y,
+    value,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    errorVal: (0, _ChartUtils.getValueByDataKey)(dataPoint, dataKey)
+  };
+};
+class BarWithState extends _react.PureComponent {
+  render() {
+    var {
+      hide,
+      data,
+      dataKey,
+      className,
+      xAxisId,
+      yAxisId,
+      needClip,
+      background,
+      id
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = (0, _clsx.clsx)('recharts-bar', className);
+    var clipPathId = id;
+    return /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: layerClass,
+      id: id
+    }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(_GraphicalItemClipPath.GraphicalItemClipPath, {
+      clipPathId: clipPathId,
+      xAxisId: xAxisId,
+      yAxisId: yAxisId
+    })), /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: "recharts-bar-rectangles",
+      clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined
+    }, /*#__PURE__*/React.createElement(BarBackground, {
+      data: data,
+      dataKey: dataKey,
+      background: background,
+      allOtherBarProps: this.props
+    }), /*#__PURE__*/React.createElement(RenderRectangles, this.props)), this.props.children);
+  }
+}
+var defaultBarProps = {
+  activeBar: false,
+  animationBegin: 0,
+  animationDuration: 400,
+  animationEasing: 'ease',
+  hide: false,
+  isAnimationActive: !_Global.Global.isSsr,
+  legendType: 'rect',
+  minPointSize: defaultMinPointSize,
+  xAxisId: 0,
+  yAxisId: 0
+};
+function BarImpl(props) {
+  var {
+    xAxisId,
+    yAxisId,
+    hide,
+    legendType,
+    minPointSize,
+    activeBar,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    isAnimationActive
+  } = props;
+  var {
+    needClip
+  } = (0, _GraphicalItemClipPath.useNeedsClip)(xAxisId, yAxisId);
+  var layout = (0, _chartLayoutContext.useChartLayout)();
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var cells = (0, _ReactUtils.findAllByType)(props.children, _Cell.Cell);
+  var rects = (0, _hooks.useAppSelector)(state => (0, _barSelectors.selectBarRectangles)(state, xAxisId, yAxisId, isPanorama, props.id, cells));
+  if (layout !== 'vertical' && layout !== 'horizontal') {
+    return null;
+  }
+  var errorBarOffset;
+  var firstDataPoint = rects === null || rects === void 0 ? void 0 : rects[0];
+  if (firstDataPoint == null || firstDataPoint.height == null || firstDataPoint.width == null) {
+    errorBarOffset = 0;
+  } else {
+    errorBarOffset = layout === 'vertical' ? firstDataPoint.height / 2 : firstDataPoint.width / 2;
+  }
+  return /*#__PURE__*/React.createElement(_ErrorBarContext.SetErrorBarContext, {
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    data: rects,
+    dataPointFormatter: errorBarDataPointFormatter,
+    errorBarOffset: errorBarOffset
+  }, /*#__PURE__*/React.createElement(BarWithState, _extends({}, props, {
+    layout: layout,
+    needClip: needClip,
+    data: rects,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    hide: hide,
+    legendType: legendType,
+    minPointSize: minPointSize,
+    activeBar: activeBar,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive
+  })));
+}
+function computeBarRectangles(_ref3) {
+  var {
+    layout,
+    barSettings: {
+      dataKey,
+      minPointSize: minPointSizeProp
+    },
+    pos,
+    bandSize,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    stackedData,
+    displayedData,
+    offset,
+    cells
+  } = _ref3;
+  var numericAxis = layout === 'horizontal' ? yAxis : xAxis;
+  // @ts-expect-error this assumes that the domain is always numeric, but doesn't check for it
+  var stackedDomain = stackedData ? numericAxis.scale.domain() : null;
+  var baseValue = (0, _ChartUtils.getBaseValueOfBar)({
+    numericAxis
+  });
+  return displayedData.map((entry, index) => {
+    var value, x, y, width, height, background;
+    if (stackedData) {
+      // we don't need to use dataStartIndex here, because stackedData is already sliced from the selector
+      value = (0, _ChartUtils.truncateByDomain)(stackedData[index], stackedDomain);
+    } else {
+      value = (0, _ChartUtils.getValueByDataKey)(entry, dataKey);
+      if (!Array.isArray(value)) {
+        value = [baseValue, value];
+      }
+    }
+    var minPointSize = (0, _BarUtils.minPointSizeCallback)(minPointSizeProp, defaultMinPointSize)(value[1], index);
+    if (layout === 'horizontal') {
+      var _ref4;
+      var [baseValueScale, currentValueScale] = [yAxis.scale(value[0]), yAxis.scale(value[1])];
+      x = (0, _ChartUtils.getCateCoordinateOfBar)({
+        axis: xAxis,
+        ticks: xAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      y = (_ref4 = currentValueScale !== null && currentValueScale !== void 0 ? currentValueScale : baseValueScale) !== null && _ref4 !== void 0 ? _ref4 : undefined;
+      width = pos.size;
+      var computedHeight = baseValueScale - currentValueScale;
+      height = (0, _DataUtils.isNan)(computedHeight) ? 0 : computedHeight;
+      background = {
+        x,
+        y: offset.top,
+        width,
+        height: offset.height
+      };
+      if (Math.abs(minPointSize) > 0 && Math.abs(height) < Math.abs(minPointSize)) {
+        var delta = (0, _DataUtils.mathSign)(height || minPointSize) * (Math.abs(minPointSize) - Math.abs(height));
+        y -= delta;
+        height += delta;
+      }
+    } else {
+      var [_baseValueScale, _currentValueScale] = [xAxis.scale(value[0]), xAxis.scale(value[1])];
+      x = _baseValueScale;
+      y = (0, _ChartUtils.getCateCoordinateOfBar)({
+        axis: yAxis,
+        ticks: yAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      width = _currentValueScale - _baseValueScale;
+      height = pos.size;
+      background = {
+        x: offset.left,
+        y,
+        width: offset.width,
+        height
+      };
+      if (Math.abs(minPointSize) > 0 && Math.abs(width) < Math.abs(minPointSize)) {
+        var _delta = (0, _DataUtils.mathSign)(width || minPointSize) * (Math.abs(minPointSize) - Math.abs(width));
+        width += _delta;
+      }
+    }
+    if (x == null || y == null || width == null || height == null) {
+      return null;
+    }
+    var barRectangleItem = _objectSpread(_objectSpread({}, entry), {}, {
+      x,
+      y,
+      width,
+      height,
+      value: stackedData ? value : value[1],
+      payload: entry,
+      background,
+      tooltipPosition: {
+        x: x + width / 2,
+        y: y + height / 2
+      }
+    }, cells && cells[index] && cells[index].props);
+    return barRectangleItem;
+  }).filter(Boolean);
+}
+function Bar(outsideProps) {
+  var props = (0, _resolveDefaultProps.resolveDefaultProps)(outsideProps, defaultBarProps);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.
+  return /*#__PURE__*/React.createElement(_RegisterGraphicalItemId.RegisterGraphicalItemId, {
+    id: props.id,
+    type: "bar"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetLegendPayload.SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromBarData(props)
+  }), /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: props
+  }), /*#__PURE__*/React.createElement(_SetGraphicalItem.SetCartesianGraphicalItem, {
+    type: "bar",
+    id: id
+    // Bar does not allow setting data directly on the graphical item (why?)
+    ,
+    data: undefined,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: 0,
+    dataKey: props.dataKey,
+    stackId: (0, _ChartUtils.getNormalizedStackId)(props.stackId),
+    hide: props.hide,
+    barSize: props.barSize,
+    minPointSize: props.minPointSize,
+    maxBarSize: props.maxBarSize,
+    isPanorama: isPanorama
+  }), /*#__PURE__*/React.createElement(BarImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+Bar.displayName = 'Bar';
Index: node_modules/recharts/lib/cartesian/Brush.js
===================================================================
--- node_modules/recharts/lib/cartesian/Brush.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/Brush.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,864 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Brush = Brush;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _d3Scale = require("victory-vendor/d3-scale");
+var _range = _interopRequireDefault(require("es-toolkit/compat/range"));
+var _Layer = require("../container/Layer");
+var _Text = require("../component/Text");
+var _ChartUtils = require("../util/ChartUtils");
+var _DataUtils = require("../util/DataUtils");
+var _CssPrefixUtils = require("../util/CssPrefixUtils");
+var _chartDataContext = require("../context/chartDataContext");
+var _brushUpdateContext = require("../context/brushUpdateContext");
+var _hooks = require("../state/hooks");
+var _chartDataSlice = require("../state/chartDataSlice");
+var _brushSlice = require("../state/brushSlice");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _brushSelectors = require("../state/selectors/brushSelectors");
+var _useChartSynchronisation = require("../synchronisation/useChartSynchronisation");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+// Why is this tickFormatter different from the other TickFormatters? This one allows to return numbers too for some reason.
+
+function DefaultTraveller(props) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    stroke
+  } = props;
+  var lineY = Math.floor(y + height / 2) - 1;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("rect", {
+    x: x,
+    y: y,
+    width: width,
+    height: height,
+    fill: stroke,
+    stroke: "none"
+  }), /*#__PURE__*/React.createElement("line", {
+    x1: x + 1,
+    y1: lineY,
+    x2: x + width - 1,
+    y2: lineY,
+    fill: "none",
+    stroke: "#fff"
+  }), /*#__PURE__*/React.createElement("line", {
+    x1: x + 1,
+    y1: lineY + 2,
+    x2: x + width - 1,
+    y2: lineY + 2,
+    fill: "none",
+    stroke: "#fff"
+  }));
+}
+function Traveller(props) {
+  var {
+    travellerProps,
+    travellerType
+  } = props;
+  if (/*#__PURE__*/React.isValidElement(travellerType)) {
+    // @ts-expect-error element cloning disagrees with the types (and it should)
+    return /*#__PURE__*/React.cloneElement(travellerType, travellerProps);
+  }
+  if (typeof travellerType === 'function') {
+    return travellerType(travellerProps);
+  }
+  return /*#__PURE__*/React.createElement(DefaultTraveller, travellerProps);
+}
+function TravellerLayer(_ref) {
+  var _data$startIndex, _data$endIndex;
+  var {
+    otherProps,
+    travellerX,
+    id,
+    onMouseEnter,
+    onMouseLeave,
+    onMouseDown,
+    onTouchStart,
+    onTravellerMoveKeyboard,
+    onFocus,
+    onBlur
+  } = _ref;
+  var {
+    y,
+    x: xFromProps,
+    travellerWidth,
+    height,
+    traveller,
+    ariaLabel,
+    data,
+    startIndex,
+    endIndex
+  } = otherProps;
+  var x = Math.max(travellerX, xFromProps);
+  var travellerProps = _objectSpread(_objectSpread({}, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(otherProps)), {}, {
+    x,
+    y,
+    width: travellerWidth,
+    height
+  });
+  var ariaLabelBrush = ariaLabel || "Min value: ".concat((_data$startIndex = data[startIndex]) === null || _data$startIndex === void 0 ? void 0 : _data$startIndex.name, ", Max value: ").concat((_data$endIndex = data[endIndex]) === null || _data$endIndex === void 0 ? void 0 : _data$endIndex.name);
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    tabIndex: 0,
+    role: "slider",
+    "aria-label": ariaLabelBrush,
+    "aria-valuenow": travellerX,
+    className: "recharts-brush-traveller",
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onMouseDown: onMouseDown,
+    onTouchStart: onTouchStart,
+    onKeyDown: e => {
+      if (!['ArrowLeft', 'ArrowRight'].includes(e.key)) {
+        return;
+      }
+      e.preventDefault();
+      e.stopPropagation();
+      onTravellerMoveKeyboard(e.key === 'ArrowRight' ? 1 : -1, id);
+    },
+    onFocus: onFocus,
+    onBlur: onBlur,
+    style: {
+      cursor: 'col-resize'
+    }
+  }, /*#__PURE__*/React.createElement(Traveller, {
+    travellerType: traveller,
+    travellerProps: travellerProps
+  }));
+}
+/*
+ * This one cannot be a React Component because React is not happy with it returning only string | number.
+ * React wants a full React.JSX.Element but that is not compatible with Text component.
+ */
+function getTextOfTick(props) {
+  var {
+    index,
+    data,
+    tickFormatter,
+    dataKey
+  } = props;
+  // @ts-expect-error getValueByDataKey does not validate the output type
+  var text = (0, _ChartUtils.getValueByDataKey)(data[index], dataKey, index);
+  return typeof tickFormatter === 'function' ? tickFormatter(text, index) : text;
+}
+function getIndexInRange(valueRange, x) {
+  var len = valueRange.length;
+  var start = 0;
+  var end = len - 1;
+  while (end - start > 1) {
+    var middle = Math.floor((start + end) / 2);
+    if (valueRange[middle] > x) {
+      end = middle;
+    } else {
+      start = middle;
+    }
+  }
+  return x >= valueRange[end] ? end : start;
+}
+function getIndex(_ref2) {
+  var {
+    startX,
+    endX,
+    scaleValues,
+    gap,
+    data
+  } = _ref2;
+  var lastIndex = data.length - 1;
+  var min = Math.min(startX, endX);
+  var max = Math.max(startX, endX);
+  var minIndex = getIndexInRange(scaleValues, min);
+  var maxIndex = getIndexInRange(scaleValues, max);
+  return {
+    startIndex: minIndex - minIndex % gap,
+    endIndex: maxIndex === lastIndex ? lastIndex : maxIndex - maxIndex % gap
+  };
+}
+function Background(_ref3) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    fill,
+    stroke
+  } = _ref3;
+  return /*#__PURE__*/React.createElement("rect", {
+    stroke: stroke,
+    fill: fill,
+    x: x,
+    y: y,
+    width: width,
+    height: height
+  });
+}
+function BrushText(_ref4) {
+  var {
+    startIndex,
+    endIndex,
+    y,
+    height,
+    travellerWidth,
+    stroke,
+    tickFormatter,
+    dataKey,
+    data,
+    startX,
+    endX
+  } = _ref4;
+  var offset = 5;
+  var attrs = {
+    pointerEvents: 'none',
+    fill: stroke
+  };
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-brush-texts"
+  }, /*#__PURE__*/React.createElement(_Text.Text, _extends({
+    textAnchor: "end",
+    verticalAnchor: "middle",
+    x: Math.min(startX, endX) - offset,
+    y: y + height / 2
+  }, attrs), getTextOfTick({
+    index: startIndex,
+    tickFormatter,
+    dataKey,
+    data
+  })), /*#__PURE__*/React.createElement(_Text.Text, _extends({
+    textAnchor: "start",
+    verticalAnchor: "middle",
+    x: Math.max(startX, endX) + travellerWidth + offset,
+    y: y + height / 2
+  }, attrs), getTextOfTick({
+    index: endIndex,
+    tickFormatter,
+    dataKey,
+    data
+  })));
+}
+function Slide(_ref5) {
+  var {
+    y,
+    height,
+    stroke,
+    travellerWidth,
+    startX,
+    endX,
+    onMouseEnter,
+    onMouseLeave,
+    onMouseDown,
+    onTouchStart
+  } = _ref5;
+  var x = Math.min(startX, endX) + travellerWidth;
+  var width = Math.max(Math.abs(endX - startX) - travellerWidth, 0);
+  return /*#__PURE__*/React.createElement("rect", {
+    className: "recharts-brush-slide",
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onMouseDown: onMouseDown,
+    onTouchStart: onTouchStart,
+    style: {
+      cursor: 'move'
+    },
+    stroke: "none",
+    fill: stroke,
+    fillOpacity: 0.2,
+    x: x,
+    y: y,
+    width: width,
+    height: height
+  });
+}
+function Panorama(_ref6) {
+  var {
+    x,
+    y,
+    width,
+    height,
+    data,
+    children,
+    padding
+  } = _ref6;
+  var isPanoramic = React.Children.count(children) === 1;
+  if (!isPanoramic) {
+    return null;
+  }
+  var chartElement = _react.Children.only(children);
+  if (!chartElement) {
+    return null;
+  }
+  return /*#__PURE__*/React.cloneElement(chartElement, {
+    x,
+    y,
+    width,
+    height,
+    margin: padding,
+    compact: true,
+    data
+  });
+}
+var createScale = _ref7 => {
+  var {
+    data,
+    startIndex,
+    endIndex,
+    x,
+    width,
+    travellerWidth
+  } = _ref7;
+  if (!data || !data.length) {
+    return {};
+  }
+  var len = data.length;
+  var scale = (0, _d3Scale.scalePoint)().domain((0, _range.default)(0, len)).range([x, x + width - travellerWidth]);
+  var scaleValues = scale.domain().map(entry => scale(entry));
+  return {
+    isTextActive: false,
+    isSlideMoving: false,
+    isTravellerMoving: false,
+    isTravellerFocused: false,
+    startX: scale(startIndex),
+    endX: scale(endIndex),
+    scale,
+    scaleValues
+  };
+};
+var isTouch = e => e.changedTouches && !!e.changedTouches.length;
+class BrushWithState extends _react.PureComponent {
+  constructor(props) {
+    super(props);
+    _defineProperty(this, "handleDrag", e => {
+      if (this.leaveTimer) {
+        clearTimeout(this.leaveTimer);
+        this.leaveTimer = null;
+      }
+      if (this.state.isTravellerMoving) {
+        this.handleTravellerMove(e);
+      } else if (this.state.isSlideMoving) {
+        this.handleSlideDrag(e);
+      }
+    });
+    _defineProperty(this, "handleTouchMove", e => {
+      if (e.changedTouches != null && e.changedTouches.length > 0) {
+        this.handleDrag(e.changedTouches[0]);
+      }
+    });
+    _defineProperty(this, "handleDragEnd", () => {
+      this.setState({
+        isTravellerMoving: false,
+        isSlideMoving: false
+      }, () => {
+        var {
+          endIndex,
+          onDragEnd,
+          startIndex
+        } = this.props;
+        onDragEnd === null || onDragEnd === void 0 || onDragEnd({
+          endIndex,
+          startIndex
+        });
+      });
+      this.detachDragEndListener();
+    });
+    _defineProperty(this, "handleLeaveWrapper", () => {
+      if (this.state.isTravellerMoving || this.state.isSlideMoving) {
+        this.leaveTimer = window.setTimeout(this.handleDragEnd, this.props.leaveTimeOut);
+      }
+    });
+    _defineProperty(this, "handleEnterSlideOrTraveller", () => {
+      this.setState({
+        isTextActive: true
+      });
+    });
+    _defineProperty(this, "handleLeaveSlideOrTraveller", () => {
+      this.setState({
+        isTextActive: false
+      });
+    });
+    _defineProperty(this, "handleSlideDragStart", e => {
+      var event = isTouch(e) ? e.changedTouches[0] : e;
+      this.setState({
+        isTravellerMoving: false,
+        isSlideMoving: true,
+        slideMoveStartX: event.pageX
+      });
+      this.attachDragEndListener();
+    });
+    _defineProperty(this, "handleTravellerMoveKeyboard", (direction, id) => {
+      var {
+        data,
+        gap
+      } = this.props;
+      // scaleValues are a list of coordinates. For example: [65, 250, 435, 620, 805, 990].
+      var {
+        scaleValues,
+        startX,
+        endX
+      } = this.state;
+      if (scaleValues == null) {
+        return;
+      }
+      // currentScaleValue refers to which coordinate the current traveller should be placed at.
+      var currentScaleValue = this.state[id];
+      var currentIndex = scaleValues.indexOf(currentScaleValue);
+      if (currentIndex === -1) {
+        return;
+      }
+      var newIndex = currentIndex + direction;
+      if (newIndex === -1 || newIndex >= scaleValues.length) {
+        return;
+      }
+      var newScaleValue = scaleValues[newIndex];
+
+      // Prevent travellers from being on top of each other or overlapping
+      if (id === 'startX' && newScaleValue >= endX || id === 'endX' && newScaleValue <= startX) {
+        return;
+      }
+      this.setState(
+      // @ts-expect-error not sure why typescript is not happy with this, partial update is fine in React
+      {
+        [id]: newScaleValue
+      }, () => {
+        this.props.onChange(getIndex({
+          startX: this.state.startX,
+          endX: this.state.endX,
+          data,
+          gap,
+          scaleValues
+        }));
+      });
+    });
+    this.travellerDragStartHandlers = {
+      startX: this.handleTravellerDragStart.bind(this, 'startX'),
+      endX: this.handleTravellerDragStart.bind(this, 'endX')
+    };
+    this.state = {
+      brushMoveStartX: 0,
+      movingTravellerId: undefined,
+      endX: 0,
+      startX: 0,
+      slideMoveStartX: 0
+    };
+  }
+  static getDerivedStateFromProps(nextProps, prevState) {
+    var {
+      data,
+      width,
+      x,
+      travellerWidth,
+      startIndex,
+      endIndex,
+      startIndexControlledFromProps,
+      endIndexControlledFromProps
+    } = nextProps;
+    if (data !== prevState.prevData) {
+      return _objectSpread({
+        prevData: data,
+        prevTravellerWidth: travellerWidth,
+        prevX: x,
+        prevWidth: width
+      }, data && data.length ? createScale({
+        data,
+        width,
+        x,
+        travellerWidth,
+        startIndex,
+        endIndex
+      }) : {
+        scale: undefined,
+        scaleValues: undefined
+      });
+    }
+    var prevScale = prevState.scale;
+    if (prevScale && (width !== prevState.prevWidth || x !== prevState.prevX || travellerWidth !== prevState.prevTravellerWidth)) {
+      prevScale.range([x, x + width - travellerWidth]);
+      var scaleValues = prevScale.domain().map(entry => prevScale(entry)).filter(Boolean);
+      return {
+        prevData: data,
+        prevTravellerWidth: travellerWidth,
+        prevX: x,
+        prevWidth: width,
+        startX: prevScale(nextProps.startIndex),
+        endX: prevScale(nextProps.endIndex),
+        scaleValues
+      };
+    }
+    if (prevState.scale && !prevState.isSlideMoving && !prevState.isTravellerMoving && !prevState.isTravellerFocused && !prevState.isTextActive) {
+      /*
+       * If the startIndex or endIndex are controlled from the outside,
+       * we need to keep the startX and end up to date.
+       * Also we do not want to do that while user is interacting in the brush,
+       * because this will trigger re-render and interrupt the drag&drop.
+       */
+      if (startIndexControlledFromProps != null && prevState.prevStartIndexControlledFromProps !== startIndexControlledFromProps) {
+        return {
+          startX: prevState.scale(startIndexControlledFromProps),
+          prevStartIndexControlledFromProps: startIndexControlledFromProps
+        };
+      }
+      if (endIndexControlledFromProps != null && prevState.prevEndIndexControlledFromProps !== endIndexControlledFromProps) {
+        return {
+          endX: prevState.scale(endIndexControlledFromProps),
+          prevEndIndexControlledFromProps: endIndexControlledFromProps
+        };
+      }
+    }
+    return null;
+  }
+  componentWillUnmount() {
+    if (this.leaveTimer) {
+      clearTimeout(this.leaveTimer);
+      this.leaveTimer = null;
+    }
+    this.detachDragEndListener();
+  }
+  attachDragEndListener() {
+    window.addEventListener('mouseup', this.handleDragEnd, true);
+    window.addEventListener('touchend', this.handleDragEnd, true);
+    window.addEventListener('mousemove', this.handleDrag, true);
+  }
+  detachDragEndListener() {
+    window.removeEventListener('mouseup', this.handleDragEnd, true);
+    window.removeEventListener('touchend', this.handleDragEnd, true);
+    window.removeEventListener('mousemove', this.handleDrag, true);
+  }
+  handleSlideDrag(e) {
+    var {
+      slideMoveStartX,
+      startX,
+      endX,
+      scaleValues
+    } = this.state;
+    if (scaleValues == null) {
+      return;
+    }
+    var {
+      x,
+      width,
+      travellerWidth,
+      startIndex,
+      endIndex,
+      onChange,
+      data,
+      gap
+    } = this.props;
+    var delta = e.pageX - slideMoveStartX;
+    if (delta > 0) {
+      delta = Math.min(delta, x + width - travellerWidth - endX, x + width - travellerWidth - startX);
+    } else if (delta < 0) {
+      delta = Math.max(delta, x - startX, x - endX);
+    }
+    var newIndex = getIndex({
+      startX: startX + delta,
+      endX: endX + delta,
+      data,
+      gap,
+      scaleValues
+    });
+    if ((newIndex.startIndex !== startIndex || newIndex.endIndex !== endIndex) && onChange) {
+      onChange(newIndex);
+    }
+    this.setState({
+      startX: startX + delta,
+      endX: endX + delta,
+      slideMoveStartX: e.pageX
+    });
+  }
+  handleTravellerDragStart(id, e) {
+    var event = isTouch(e) ? e.changedTouches[0] : e;
+    this.setState({
+      isSlideMoving: false,
+      isTravellerMoving: true,
+      movingTravellerId: id,
+      brushMoveStartX: event.pageX
+    });
+    this.attachDragEndListener();
+  }
+  handleTravellerMove(e) {
+    var {
+      brushMoveStartX,
+      movingTravellerId,
+      endX,
+      startX,
+      scaleValues
+    } = this.state;
+    if (movingTravellerId == null) {
+      return;
+    }
+    var prevValue = this.state[movingTravellerId];
+    var {
+      x,
+      width,
+      travellerWidth,
+      onChange,
+      gap,
+      data
+    } = this.props;
+    var params = {
+      startX: this.state.startX,
+      endX: this.state.endX,
+      data,
+      gap,
+      scaleValues
+    };
+    var delta = e.pageX - brushMoveStartX;
+    if (delta > 0) {
+      delta = Math.min(delta, x + width - travellerWidth - prevValue);
+    } else if (delta < 0) {
+      delta = Math.max(delta, x - prevValue);
+    }
+    params[movingTravellerId] = prevValue + delta;
+    var newIndex = getIndex(params);
+    var {
+      startIndex,
+      endIndex
+    } = newIndex;
+    var isFullGap = () => {
+      var lastIndex = data.length - 1;
+      if (movingTravellerId === 'startX' && (endX > startX ? startIndex % gap === 0 : endIndex % gap === 0) || endX < startX && endIndex === lastIndex || movingTravellerId === 'endX' && (endX > startX ? endIndex % gap === 0 : startIndex % gap === 0) || endX > startX && endIndex === lastIndex) {
+        return true;
+      }
+      return false;
+    };
+    this.setState(
+    // @ts-expect-error not sure why typescript is not happy with this, partial update is fine in React
+    {
+      [movingTravellerId]: prevValue + delta,
+      brushMoveStartX: e.pageX
+    }, () => {
+      if (onChange) {
+        if (isFullGap()) {
+          onChange(newIndex);
+        }
+      }
+    });
+  }
+  render() {
+    var {
+      data,
+      className,
+      children,
+      x,
+      y,
+      dy,
+      width,
+      height,
+      alwaysShowText,
+      fill,
+      stroke,
+      startIndex,
+      endIndex,
+      travellerWidth,
+      tickFormatter,
+      dataKey,
+      padding
+    } = this.props;
+    var {
+      startX,
+      endX,
+      isTextActive,
+      isSlideMoving,
+      isTravellerMoving,
+      isTravellerFocused
+    } = this.state;
+    if (!data || !data.length || !(0, _DataUtils.isNumber)(x) || !(0, _DataUtils.isNumber)(y) || !(0, _DataUtils.isNumber)(width) || !(0, _DataUtils.isNumber)(height) || width <= 0 || height <= 0) {
+      return null;
+    }
+    var layerClass = (0, _clsx.clsx)('recharts-brush', className);
+    var style = (0, _CssPrefixUtils.generatePrefixStyle)('userSelect', 'none');
+    var calculatedY = y + (dy !== null && dy !== void 0 ? dy : 0);
+    return /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: layerClass,
+      onMouseLeave: this.handleLeaveWrapper,
+      onTouchMove: this.handleTouchMove,
+      style: style
+    }, /*#__PURE__*/React.createElement(Background, {
+      x: x,
+      y: calculatedY,
+      width: width,
+      height: height,
+      fill: fill,
+      stroke: stroke
+    }), /*#__PURE__*/React.createElement(_PanoramaContext.PanoramaContextProvider, null, /*#__PURE__*/React.createElement(Panorama, {
+      x: x,
+      y: calculatedY,
+      width: width,
+      height: height,
+      data: data,
+      padding: padding
+    }, children)), /*#__PURE__*/React.createElement(Slide, {
+      y: calculatedY,
+      height: height,
+      stroke: stroke,
+      travellerWidth: travellerWidth,
+      startX: startX,
+      endX: endX,
+      onMouseEnter: this.handleEnterSlideOrTraveller,
+      onMouseLeave: this.handleLeaveSlideOrTraveller,
+      onMouseDown: this.handleSlideDragStart,
+      onTouchStart: this.handleSlideDragStart
+    }), /*#__PURE__*/React.createElement(TravellerLayer, {
+      travellerX: startX,
+      id: "startX",
+      otherProps: _objectSpread(_objectSpread({}, this.props), {}, {
+        y: calculatedY
+      }),
+      onMouseEnter: this.handleEnterSlideOrTraveller,
+      onMouseLeave: this.handleLeaveSlideOrTraveller,
+      onMouseDown: this.travellerDragStartHandlers.startX,
+      onTouchStart: this.travellerDragStartHandlers.startX,
+      onTravellerMoveKeyboard: this.handleTravellerMoveKeyboard,
+      onFocus: () => {
+        this.setState({
+          isTravellerFocused: true
+        });
+      },
+      onBlur: () => {
+        this.setState({
+          isTravellerFocused: false
+        });
+      }
+    }), /*#__PURE__*/React.createElement(TravellerLayer, {
+      travellerX: endX,
+      id: "endX",
+      otherProps: _objectSpread(_objectSpread({}, this.props), {}, {
+        y: calculatedY
+      }),
+      onMouseEnter: this.handleEnterSlideOrTraveller,
+      onMouseLeave: this.handleLeaveSlideOrTraveller,
+      onMouseDown: this.travellerDragStartHandlers.endX,
+      onTouchStart: this.travellerDragStartHandlers.endX,
+      onTravellerMoveKeyboard: this.handleTravellerMoveKeyboard,
+      onFocus: () => {
+        this.setState({
+          isTravellerFocused: true
+        });
+      },
+      onBlur: () => {
+        this.setState({
+          isTravellerFocused: false
+        });
+      }
+    }), (isTextActive || isSlideMoving || isTravellerMoving || isTravellerFocused || alwaysShowText) && /*#__PURE__*/React.createElement(BrushText, {
+      startIndex: startIndex,
+      endIndex: endIndex,
+      y: calculatedY,
+      height: height,
+      travellerWidth: travellerWidth,
+      stroke: stroke,
+      tickFormatter: tickFormatter,
+      dataKey: dataKey,
+      data: data,
+      startX: startX,
+      endX: endX
+    }));
+  }
+}
+function BrushInternal(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var chartData = (0, _chartDataContext.useChartData)();
+  var dataIndexes = (0, _chartDataContext.useDataIndex)();
+  var onChangeFromContext = (0, _react.useContext)(_brushUpdateContext.BrushUpdateDispatchContext);
+  var onChangeFromProps = props.onChange;
+  var {
+    startIndex: startIndexFromProps,
+    endIndex: endIndexFromProps
+  } = props;
+  (0, _react.useEffect)(() => {
+    // start and end index can be controlled from props, and we need them to stay up-to-date in the Redux state too
+    dispatch((0, _chartDataSlice.setDataStartEndIndexes)({
+      startIndex: startIndexFromProps,
+      endIndex: endIndexFromProps
+    }));
+  }, [dispatch, endIndexFromProps, startIndexFromProps]);
+  (0, _useChartSynchronisation.useBrushChartSynchronisation)();
+  var onChange = (0, _react.useCallback)(nextState => {
+    if (dataIndexes == null) {
+      return;
+    }
+    var {
+      startIndex,
+      endIndex
+    } = dataIndexes;
+    if (nextState.startIndex !== startIndex || nextState.endIndex !== endIndex) {
+      onChangeFromContext === null || onChangeFromContext === void 0 || onChangeFromContext(nextState);
+      onChangeFromProps === null || onChangeFromProps === void 0 || onChangeFromProps(nextState);
+      dispatch((0, _chartDataSlice.setDataStartEndIndexes)(nextState));
+    }
+  }, [onChangeFromProps, onChangeFromContext, dispatch, dataIndexes]);
+  var brushDimensions = (0, _hooks.useAppSelector)(_brushSelectors.selectBrushDimensions);
+  if (brushDimensions == null || dataIndexes == null || chartData == null || !chartData.length) {
+    return null;
+  }
+  var {
+    startIndex,
+    endIndex
+  } = dataIndexes;
+  var {
+    x,
+    y,
+    width
+  } = brushDimensions;
+  var contextProperties = {
+    data: chartData,
+    x,
+    y,
+    width,
+    startIndex,
+    endIndex,
+    onChange
+  };
+  return /*#__PURE__*/React.createElement(BrushWithState, _extends({}, props, contextProperties, {
+    startIndexControlledFromProps: startIndexFromProps !== null && startIndexFromProps !== void 0 ? startIndexFromProps : undefined,
+    endIndexControlledFromProps: endIndexFromProps !== null && endIndexFromProps !== void 0 ? endIndexFromProps : undefined
+  }));
+}
+function BrushSettingsDispatcher(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _brushSlice.setBrushSettings)(props));
+    return () => {
+      dispatch((0, _brushSlice.setBrushSettings)(null));
+    };
+  }, [dispatch, props]);
+  return null;
+}
+var defaultBrushProps = {
+  height: 40,
+  travellerWidth: 5,
+  gap: 1,
+  fill: '#fff',
+  stroke: '#666',
+  padding: {
+    top: 1,
+    right: 1,
+    bottom: 1,
+    left: 1
+  },
+  leaveTimeOut: 1000,
+  alwaysShowText: false
+};
+function Brush(outsideProps) {
+  var props = (0, _resolveDefaultProps.resolveDefaultProps)(outsideProps, defaultBrushProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BrushSettingsDispatcher, {
+    height: props.height,
+    x: props.x,
+    y: props.y,
+    width: props.width,
+    padding: props.padding
+  }), /*#__PURE__*/React.createElement(BrushInternal, props));
+}
+Brush.displayName = 'Brush';
Index: node_modules/recharts/lib/cartesian/CartesianAxis.js
===================================================================
--- node_modules/recharts/lib/cartesian/CartesianAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/CartesianAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,357 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CartesianAxis = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _get = _interopRequireDefault(require("es-toolkit/compat/get"));
+var _clsx = require("clsx");
+var _ShallowEqual = require("../util/ShallowEqual");
+var _Layer = require("../container/Layer");
+var _Text = require("../component/Text");
+var _Label = require("../component/Label");
+var _DataUtils = require("../util/DataUtils");
+var _types = require("../util/types");
+var _ReactUtils = require("../util/ReactUtils");
+var _getTicks = require("./getTicks");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _excluded = ["viewBox"],
+  _excluded2 = ["viewBox"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /**
+ * @fileOverview Cartesian Axis
+ */
+/** The orientation of the axis in correspondence to the chart */
+
+/** A unit to be appended to a value */
+
+/** The formatter function of tick */
+
+/*
+ * `viewBox` and `scale` are SVG attributes.
+ * Recharts however - unfortunately - has its own attributes named `viewBox` and `scale`
+ * that are completely different data shape and different purpose.
+ */
+
+class CartesianAxis extends _react.Component {
+  constructor(props) {
+    super(props);
+    this.tickRefs = /*#__PURE__*/React.createRef();
+    this.tickRefs.current = [];
+    this.state = {
+      fontSize: '',
+      letterSpacing: ''
+    };
+  }
+  shouldComponentUpdate(_ref, nextState) {
+    var {
+        viewBox
+      } = _ref,
+      restProps = _objectWithoutProperties(_ref, _excluded);
+    // props.viewBox is sometimes generated every time -
+    // check that specially as object equality is likely to fail
+    var _this$props = this.props,
+      {
+        viewBox: viewBoxOld
+      } = _this$props,
+      restPropsOld = _objectWithoutProperties(_this$props, _excluded2);
+    return !(0, _ShallowEqual.shallowEqual)(viewBox, viewBoxOld) || !(0, _ShallowEqual.shallowEqual)(restProps, restPropsOld) || !(0, _ShallowEqual.shallowEqual)(nextState, this.state);
+  }
+
+  /**
+   * Calculate the coordinates of endpoints in ticks
+   * @param  data The data of a simple tick
+   * @return (x1, y1): The coordinate of endpoint close to tick text
+   *  (x2, y2): The coordinate of endpoint close to axis
+   */
+  getTickLineCoord(data) {
+    var {
+      x,
+      y,
+      width,
+      height,
+      orientation,
+      tickSize,
+      mirror,
+      tickMargin
+    } = this.props;
+    var x1, x2, y1, y2, tx, ty;
+    var sign = mirror ? -1 : 1;
+    var finalTickSize = data.tickSize || tickSize;
+    var tickCoord = (0, _DataUtils.isNumber)(data.tickCoord) ? data.tickCoord : data.coordinate;
+    switch (orientation) {
+      case 'top':
+        x1 = x2 = data.coordinate;
+        y2 = y + +!mirror * height;
+        y1 = y2 - sign * finalTickSize;
+        ty = y1 - sign * tickMargin;
+        tx = tickCoord;
+        break;
+      case 'left':
+        y1 = y2 = data.coordinate;
+        x2 = x + +!mirror * width;
+        x1 = x2 - sign * finalTickSize;
+        tx = x1 - sign * tickMargin;
+        ty = tickCoord;
+        break;
+      case 'right':
+        y1 = y2 = data.coordinate;
+        x2 = x + +mirror * width;
+        x1 = x2 + sign * finalTickSize;
+        tx = x1 + sign * tickMargin;
+        ty = tickCoord;
+        break;
+      default:
+        x1 = x2 = data.coordinate;
+        y2 = y + +mirror * height;
+        y1 = y2 + sign * finalTickSize;
+        ty = y1 + sign * tickMargin;
+        tx = tickCoord;
+        break;
+    }
+    return {
+      line: {
+        x1,
+        y1,
+        x2,
+        y2
+      },
+      tick: {
+        x: tx,
+        y: ty
+      }
+    };
+  }
+  getTickTextAnchor() {
+    var {
+      orientation,
+      mirror
+    } = this.props;
+    var textAnchor;
+    switch (orientation) {
+      case 'left':
+        textAnchor = mirror ? 'start' : 'end';
+        break;
+      case 'right':
+        textAnchor = mirror ? 'end' : 'start';
+        break;
+      default:
+        textAnchor = 'middle';
+        break;
+    }
+    return textAnchor;
+  }
+  getTickVerticalAnchor() {
+    var {
+      orientation,
+      mirror
+    } = this.props;
+    switch (orientation) {
+      case 'left':
+      case 'right':
+        return 'middle';
+      case 'top':
+        return mirror ? 'start' : 'end';
+      default:
+        return mirror ? 'end' : 'start';
+    }
+  }
+  renderAxisLine() {
+    var {
+      x,
+      y,
+      width,
+      height,
+      orientation,
+      mirror,
+      axisLine
+    } = this.props;
+    var props = _objectSpread(_objectSpread(_objectSpread({}, (0, _ReactUtils.filterProps)(this.props, false)), (0, _ReactUtils.filterProps)(axisLine, false)), {}, {
+      fill: 'none'
+    });
+    if (orientation === 'top' || orientation === 'bottom') {
+      var needHeight = +(orientation === 'top' && !mirror || orientation === 'bottom' && mirror);
+      props = _objectSpread(_objectSpread({}, props), {}, {
+        x1: x,
+        y1: y + needHeight * height,
+        x2: x + width,
+        y2: y + needHeight * height
+      });
+    } else {
+      var needWidth = +(orientation === 'left' && !mirror || orientation === 'right' && mirror);
+      props = _objectSpread(_objectSpread({}, props), {}, {
+        x1: x + needWidth * width,
+        y1: y,
+        x2: x + needWidth * width,
+        y2: y + height
+      });
+    }
+    return /*#__PURE__*/React.createElement("line", _extends({}, props, {
+      className: (0, _clsx.clsx)('recharts-cartesian-axis-line', (0, _get.default)(axisLine, 'className'))
+    }));
+  }
+  static renderTickItem(option, props, value) {
+    var tickItem;
+    var combinedClassName = (0, _clsx.clsx)(props.className, 'recharts-cartesian-axis-tick-value');
+    if (/*#__PURE__*/React.isValidElement(option)) {
+      tickItem = /*#__PURE__*/React.cloneElement(option, _objectSpread(_objectSpread({}, props), {}, {
+        className: combinedClassName
+      }));
+    } else if (typeof option === 'function') {
+      tickItem = option(_objectSpread(_objectSpread({}, props), {}, {
+        className: combinedClassName
+      }));
+    } else {
+      var className = 'recharts-cartesian-axis-tick-value';
+      if (typeof option !== 'boolean') {
+        className = (0, _clsx.clsx)(className, option.className);
+      }
+      tickItem = /*#__PURE__*/React.createElement(_Text.Text, _extends({}, props, {
+        className: className
+      }), value);
+    }
+    return tickItem;
+  }
+
+  /**
+   * render the ticks
+   * @param {string} fontSize Fontsize to consider for tick spacing
+   * @param {string} letterSpacing Letter spacing to consider for tick spacing
+   * @param {Array} ticks The ticks to actually render (overrides what was passed in props)
+   * @return {ReactElement | null} renderedTicks
+   */
+  renderTicks(fontSize, letterSpacing) {
+    var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
+    var {
+      tickLine,
+      stroke,
+      tick,
+      tickFormatter,
+      unit,
+      padding
+    } = this.props;
+    // @ts-expect-error some properties are optional in props but required in getTicks
+    var finalTicks = (0, _getTicks.getTicks)(_objectSpread(_objectSpread({}, this.props), {}, {
+      ticks
+    }), fontSize, letterSpacing);
+    var textAnchor = this.getTickTextAnchor();
+    var verticalAnchor = this.getTickVerticalAnchor();
+    var axisProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(this.props);
+    var customTickProps = (0, _ReactUtils.filterProps)(tick, false);
+    var tickLineProps = _objectSpread(_objectSpread({}, axisProps), {}, {
+      fill: 'none'
+    }, (0, _ReactUtils.filterProps)(tickLine, false));
+    var items = finalTicks.map((entry, i) => {
+      var {
+        line: lineCoord,
+        tick: tickCoord
+      } = this.getTickLineCoord(entry);
+      var tickProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
+        textAnchor,
+        verticalAnchor
+      }, axisProps), {}, {
+        stroke: 'none',
+        fill: stroke
+      }, customTickProps), tickCoord), {}, {
+        index: i,
+        payload: entry,
+        visibleTicksCount: finalTicks.length,
+        tickFormatter,
+        padding
+      });
+      return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+        className: "recharts-cartesian-axis-tick",
+        key: "tick-".concat(entry.value, "-").concat(entry.coordinate, "-").concat(entry.tickCoord)
+      }, (0, _types.adaptEventsOfChild)(this.props, entry, i)), tickLine &&
+      /*#__PURE__*/
+      // @ts-expect-error recharts scale is not compatible with SVG scale
+      React.createElement("line", _extends({}, tickLineProps, lineCoord, {
+        className: (0, _clsx.clsx)('recharts-cartesian-axis-tick-line', (0, _get.default)(tickLine, 'className'))
+      })), tick && CartesianAxis.renderTickItem(tick, tickProps, "".concat(typeof tickFormatter === 'function' ? tickFormatter(entry.value, i) : entry.value).concat(unit || '')));
+    });
+    return items.length > 0 ? /*#__PURE__*/React.createElement("g", {
+      className: "recharts-cartesian-axis-ticks"
+    }, items) : null;
+  }
+  render() {
+    var {
+      axisLine,
+      width,
+      height,
+      className,
+      hide
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var {
+      ticks
+    } = this.props;
+
+    /*
+     * This is different condition from what validateWidthHeight is doing;
+     * the CartesianAxis does allow width or height to be undefined.
+     */
+    if (width != null && width <= 0 || height != null && height <= 0) {
+      return null;
+    }
+    return /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: (0, _clsx.clsx)('recharts-cartesian-axis', className),
+      ref: _ref2 => {
+        if (_ref2) {
+          var tickNodes = _ref2.getElementsByClassName('recharts-cartesian-axis-tick-value');
+          this.tickRefs.current = Array.from(tickNodes);
+          var tick = tickNodes[0];
+          if (tick) {
+            var calculatedFontSize = window.getComputedStyle(tick).fontSize;
+            var calculatedLetterSpacing = window.getComputedStyle(tick).letterSpacing;
+            if (calculatedFontSize !== this.state.fontSize || calculatedLetterSpacing !== this.state.letterSpacing) {
+              this.setState({
+                fontSize: window.getComputedStyle(tick).fontSize,
+                letterSpacing: window.getComputedStyle(tick).letterSpacing
+              });
+            }
+          }
+        }
+      }
+    }, axisLine && this.renderAxisLine(), this.renderTicks(this.state.fontSize, this.state.letterSpacing, ticks), _Label.Label.renderCallByParent(this.props));
+  }
+}
+exports.CartesianAxis = CartesianAxis;
+_defineProperty(CartesianAxis, "displayName", 'CartesianAxis');
+_defineProperty(CartesianAxis, "defaultProps", {
+  x: 0,
+  y: 0,
+  width: 0,
+  height: 0,
+  viewBox: {
+    x: 0,
+    y: 0,
+    width: 0,
+    height: 0
+  },
+  // The orientation of axis
+  orientation: 'bottom',
+  // The ticks
+  ticks: [],
+  stroke: '#666',
+  tickLine: true,
+  axisLine: true,
+  tick: true,
+  mirror: false,
+  minTickGap: 5,
+  // The width or height of tick
+  tickSize: 6,
+  tickMargin: 2,
+  interval: 'preserveEnd'
+});
Index: node_modules/recharts/lib/cartesian/CartesianGrid.js
===================================================================
--- node_modules/recharts/lib/cartesian/CartesianGrid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/CartesianGrid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,396 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CartesianGrid = CartesianGrid;
+var React = _interopRequireWildcard(require("react"));
+var _LogUtils = require("../util/LogUtils");
+var _DataUtils = require("../util/DataUtils");
+var _ChartUtils = require("../util/ChartUtils");
+var _getTicks = require("./getTicks");
+var _CartesianAxis = require("./CartesianAxis");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _axisSelectors = require("../state/selectors/axisSelectors");
+var _hooks = require("../state/hooks");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _excluded = ["x1", "y1", "x2", "y2", "key"],
+  _excluded2 = ["offset"],
+  _excluded3 = ["xAxisId", "yAxisId"],
+  _excluded4 = ["xAxisId", "yAxisId"];
+/**
+ * @fileOverview Cartesian Grid
+ */
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * The <CartesianGrid horizontal
+ */
+
+var Background = props => {
+  var {
+    fill
+  } = props;
+  if (!fill || fill === 'none') {
+    return null;
+  }
+  var {
+    fillOpacity,
+    x,
+    y,
+    width,
+    height,
+    ry
+  } = props;
+  return /*#__PURE__*/React.createElement("rect", {
+    x: x,
+    y: y,
+    ry: ry,
+    width: width,
+    height: height,
+    stroke: "none",
+    fill: fill,
+    fillOpacity: fillOpacity,
+    className: "recharts-cartesian-grid-bg"
+  });
+};
+function renderLineItem(option, props) {
+  var lineItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error typescript does not see the props type when cloning an element
+    lineItem = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    lineItem = option(props);
+  } else {
+    var {
+        x1,
+        y1,
+        x2,
+        y2,
+        key
+      } = props,
+      others = _objectWithoutProperties(props, _excluded);
+    var _svgPropertiesNoEvent = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(others),
+      {
+        offset: __
+      } = _svgPropertiesNoEvent,
+      restOfFilteredProps = _objectWithoutProperties(_svgPropertiesNoEvent, _excluded2);
+    lineItem = /*#__PURE__*/React.createElement("line", _extends({}, restOfFilteredProps, {
+      x1: x1,
+      y1: y1,
+      x2: x2,
+      y2: y2,
+      fill: "none",
+      key: key
+    }));
+  }
+  return lineItem;
+}
+function HorizontalGridLines(props) {
+  var {
+    x,
+    width,
+    horizontal = true,
+    horizontalPoints
+  } = props;
+  if (!horizontal || !horizontalPoints || !horizontalPoints.length) {
+    return null;
+  }
+  var {
+      xAxisId,
+      yAxisId
+    } = props,
+    otherLineItemProps = _objectWithoutProperties(props, _excluded3);
+  var items = horizontalPoints.map((entry, i) => {
+    var lineItemProps = _objectSpread(_objectSpread({}, otherLineItemProps), {}, {
+      x1: x,
+      y1: entry,
+      x2: x + width,
+      y2: entry,
+      key: "line-".concat(i),
+      index: i
+    });
+    return renderLineItem(horizontal, lineItemProps);
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-grid-horizontal"
+  }, items);
+}
+function VerticalGridLines(props) {
+  var {
+    y,
+    height,
+    vertical = true,
+    verticalPoints
+  } = props;
+  if (!vertical || !verticalPoints || !verticalPoints.length) {
+    return null;
+  }
+  var {
+      xAxisId,
+      yAxisId
+    } = props,
+    otherLineItemProps = _objectWithoutProperties(props, _excluded4);
+  var items = verticalPoints.map((entry, i) => {
+    var lineItemProps = _objectSpread(_objectSpread({}, otherLineItemProps), {}, {
+      x1: entry,
+      y1: y,
+      x2: entry,
+      y2: y + height,
+      key: "line-".concat(i),
+      index: i
+    });
+    return renderLineItem(vertical, lineItemProps);
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-grid-vertical"
+  }, items);
+}
+function HorizontalStripes(props) {
+  var {
+    horizontalFill,
+    fillOpacity,
+    x,
+    y,
+    width,
+    height,
+    horizontalPoints,
+    horizontal = true
+  } = props;
+  if (!horizontal || !horizontalFill || !horizontalFill.length) {
+    return null;
+  }
+
+  // Why =y -y? I was trying to find any difference that this makes, with floating point numbers and edge cases but ... nothing.
+  var roundedSortedHorizontalPoints = horizontalPoints.map(e => Math.round(e + y - y)).sort((a, b) => a - b);
+  // Why is this condition `!==` instead of `<=` ?
+  if (y !== roundedSortedHorizontalPoints[0]) {
+    roundedSortedHorizontalPoints.unshift(0);
+  }
+  var items = roundedSortedHorizontalPoints.map((entry, i) => {
+    // Why do we strip only the last stripe if it is invisible, and not all invisible stripes?
+    var lastStripe = !roundedSortedHorizontalPoints[i + 1];
+    var lineHeight = lastStripe ? y + height - entry : roundedSortedHorizontalPoints[i + 1] - entry;
+    if (lineHeight <= 0) {
+      return null;
+    }
+    var colorIndex = i % horizontalFill.length;
+    return /*#__PURE__*/React.createElement("rect", {
+      key: "react-".concat(i) // eslint-disable-line react/no-array-index-key
+      ,
+      y: entry,
+      x: x,
+      height: lineHeight,
+      width: width,
+      stroke: "none",
+      fill: horizontalFill[colorIndex],
+      fillOpacity: fillOpacity,
+      className: "recharts-cartesian-grid-bg"
+    });
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-gridstripes-horizontal"
+  }, items);
+}
+function VerticalStripes(props) {
+  var {
+    vertical = true,
+    verticalFill,
+    fillOpacity,
+    x,
+    y,
+    width,
+    height,
+    verticalPoints
+  } = props;
+  if (!vertical || !verticalFill || !verticalFill.length) {
+    return null;
+  }
+  var roundedSortedVerticalPoints = verticalPoints.map(e => Math.round(e + x - x)).sort((a, b) => a - b);
+  if (x !== roundedSortedVerticalPoints[0]) {
+    roundedSortedVerticalPoints.unshift(0);
+  }
+  var items = roundedSortedVerticalPoints.map((entry, i) => {
+    var lastStripe = !roundedSortedVerticalPoints[i + 1];
+    var lineWidth = lastStripe ? x + width - entry : roundedSortedVerticalPoints[i + 1] - entry;
+    if (lineWidth <= 0) {
+      return null;
+    }
+    var colorIndex = i % verticalFill.length;
+    return /*#__PURE__*/React.createElement("rect", {
+      key: "react-".concat(i) // eslint-disable-line react/no-array-index-key
+      ,
+      x: entry,
+      y: y,
+      width: lineWidth,
+      height: height,
+      stroke: "none",
+      fill: verticalFill[colorIndex],
+      fillOpacity: fillOpacity,
+      className: "recharts-cartesian-grid-bg"
+    });
+  });
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-gridstripes-vertical"
+  }, items);
+}
+var defaultVerticalCoordinatesGenerator = (_ref, syncWithTicks) => {
+  var {
+    xAxis,
+    width,
+    height,
+    offset
+  } = _ref;
+  return (0, _ChartUtils.getCoordinatesOfGrid)((0, _getTicks.getTicks)(_objectSpread(_objectSpread(_objectSpread({}, _CartesianAxis.CartesianAxis.defaultProps), xAxis), {}, {
+    ticks: (0, _ChartUtils.getTicksOfAxis)(xAxis, true),
+    viewBox: {
+      x: 0,
+      y: 0,
+      width,
+      height
+    }
+  })), offset.left, offset.left + offset.width, syncWithTicks);
+};
+var defaultHorizontalCoordinatesGenerator = (_ref2, syncWithTicks) => {
+  var {
+    yAxis,
+    width,
+    height,
+    offset
+  } = _ref2;
+  return (0, _ChartUtils.getCoordinatesOfGrid)((0, _getTicks.getTicks)(_objectSpread(_objectSpread(_objectSpread({}, _CartesianAxis.CartesianAxis.defaultProps), yAxis), {}, {
+    ticks: (0, _ChartUtils.getTicksOfAxis)(yAxis, true),
+    viewBox: {
+      x: 0,
+      y: 0,
+      width,
+      height
+    }
+  })), offset.top, offset.top + offset.height, syncWithTicks);
+};
+var defaultProps = {
+  horizontal: true,
+  vertical: true,
+  // The ordinates of horizontal grid lines
+  horizontalPoints: [],
+  // The abscissas of vertical grid lines
+  verticalPoints: [],
+  stroke: '#ccc',
+  fill: 'none',
+  // The fill of colors of grid lines
+  verticalFill: [],
+  horizontalFill: [],
+  xAxisId: 0,
+  yAxisId: 0
+};
+function CartesianGrid(props) {
+  var chartWidth = (0, _chartLayoutContext.useChartWidth)();
+  var chartHeight = (0, _chartLayoutContext.useChartHeight)();
+  var offset = (0, _chartLayoutContext.useOffsetInternal)();
+  var propsIncludingDefaults = _objectSpread(_objectSpread({}, (0, _resolveDefaultProps.resolveDefaultProps)(props, defaultProps)), {}, {
+    x: (0, _DataUtils.isNumber)(props.x) ? props.x : offset.left,
+    y: (0, _DataUtils.isNumber)(props.y) ? props.y : offset.top,
+    width: (0, _DataUtils.isNumber)(props.width) ? props.width : offset.width,
+    height: (0, _DataUtils.isNumber)(props.height) ? props.height : offset.height
+  });
+  var {
+    xAxisId,
+    yAxisId,
+    x,
+    y,
+    width,
+    height,
+    syncWithTicks,
+    horizontalValues,
+    verticalValues
+  } = propsIncludingDefaults;
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var xAxis = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisPropsNeededForCartesianGridTicksGenerator)(state, 'xAxis', xAxisId, isPanorama));
+  var yAxis = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisPropsNeededForCartesianGridTicksGenerator)(state, 'yAxis', yAxisId, isPanorama));
+  if (!(0, _DataUtils.isNumber)(width) || width <= 0 || !(0, _DataUtils.isNumber)(height) || height <= 0 || !(0, _DataUtils.isNumber)(x) || x !== +x || !(0, _DataUtils.isNumber)(y) || y !== +y) {
+    return null;
+  }
+
+  /*
+   * verticalCoordinatesGenerator and horizontalCoordinatesGenerator are defined
+   * outside the propsIncludingDefaults because they were never part of the original props
+   * and they were never passed as a prop down to horizontal/vertical custom elements.
+   * If we add these two to propsIncludingDefaults then we are changing public API.
+   * Not a bad thing per se but also not necessary.
+   */
+  var verticalCoordinatesGenerator = propsIncludingDefaults.verticalCoordinatesGenerator || defaultVerticalCoordinatesGenerator;
+  var horizontalCoordinatesGenerator = propsIncludingDefaults.horizontalCoordinatesGenerator || defaultHorizontalCoordinatesGenerator;
+  var {
+    horizontalPoints,
+    verticalPoints
+  } = propsIncludingDefaults;
+
+  // No horizontal points are specified
+  if ((!horizontalPoints || !horizontalPoints.length) && typeof horizontalCoordinatesGenerator === 'function') {
+    var isHorizontalValues = horizontalValues && horizontalValues.length;
+    var generatorResult = horizontalCoordinatesGenerator({
+      yAxis: yAxis ? _objectSpread(_objectSpread({}, yAxis), {}, {
+        ticks: isHorizontalValues ? horizontalValues : yAxis.ticks
+      }) : undefined,
+      width: chartWidth,
+      height: chartHeight,
+      offset
+    }, isHorizontalValues ? true : syncWithTicks);
+    (0, _LogUtils.warn)(Array.isArray(generatorResult), "horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof generatorResult, "]"));
+    if (Array.isArray(generatorResult)) {
+      horizontalPoints = generatorResult;
+    }
+  }
+
+  // No vertical points are specified
+  if ((!verticalPoints || !verticalPoints.length) && typeof verticalCoordinatesGenerator === 'function') {
+    var isVerticalValues = verticalValues && verticalValues.length;
+    var _generatorResult = verticalCoordinatesGenerator({
+      xAxis: xAxis ? _objectSpread(_objectSpread({}, xAxis), {}, {
+        ticks: isVerticalValues ? verticalValues : xAxis.ticks
+      }) : undefined,
+      width: chartWidth,
+      height: chartHeight,
+      offset
+    }, isVerticalValues ? true : syncWithTicks);
+    (0, _LogUtils.warn)(Array.isArray(_generatorResult), "verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof _generatorResult, "]"));
+    if (Array.isArray(_generatorResult)) {
+      verticalPoints = _generatorResult;
+    }
+  }
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-cartesian-grid"
+  }, /*#__PURE__*/React.createElement(Background, {
+    fill: propsIncludingDefaults.fill,
+    fillOpacity: propsIncludingDefaults.fillOpacity,
+    x: propsIncludingDefaults.x,
+    y: propsIncludingDefaults.y,
+    width: propsIncludingDefaults.width,
+    height: propsIncludingDefaults.height,
+    ry: propsIncludingDefaults.ry
+  }), /*#__PURE__*/React.createElement(HorizontalStripes, _extends({}, propsIncludingDefaults, {
+    horizontalPoints: horizontalPoints
+  })), /*#__PURE__*/React.createElement(VerticalStripes, _extends({}, propsIncludingDefaults, {
+    verticalPoints: verticalPoints
+  })), /*#__PURE__*/React.createElement(HorizontalGridLines, _extends({}, propsIncludingDefaults, {
+    offset: offset,
+    horizontalPoints: horizontalPoints,
+    xAxis: xAxis,
+    yAxis: yAxis
+  })), /*#__PURE__*/React.createElement(VerticalGridLines, _extends({}, propsIncludingDefaults, {
+    offset: offset,
+    verticalPoints: verticalPoints,
+    xAxis: xAxis,
+    yAxis: yAxis
+  })));
+}
+CartesianGrid.displayName = 'CartesianGrid';
Index: node_modules/recharts/lib/cartesian/ErrorBar.js
===================================================================
--- node_modules/recharts/lib/cartesian/ErrorBar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/ErrorBar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,235 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ErrorBar = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _Layer = require("../container/Layer");
+var _ErrorBarContext = require("../context/ErrorBarContext");
+var _hooks = require("../hooks");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _CSSTransitionAnimate = require("../animation/CSSTransitionAnimate");
+var _excluded = ["direction", "width", "dataKey", "isAnimationActive", "animationBegin", "animationDuration", "animationEasing"];
+/**
+ * @fileOverview Render a group of error bar
+ */
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * So usually the direction is decided by the chart layout.
+ * Horizontal layout means error bars are vertical means direction=y
+ * Vertical layout means error bars are horizontal means direction=x
+ *
+ * Except! In Scatter chart, error bars can go both ways.
+ *
+ * So this property is only ever used in Scatter chart, and ignored elsewhere.
+ */
+
+/**
+ * External ErrorBar props, visible for users of the library
+ */
+
+/**
+ * Props after defaults, and required props have been applied.
+ */
+
+function ErrorBarImpl(props) {
+  var {
+      direction,
+      width,
+      dataKey,
+      isAnimationActive,
+      animationBegin,
+      animationDuration,
+      animationEasing
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var svgProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(others);
+  var {
+    data,
+    dataPointFormatter,
+    xAxisId,
+    yAxisId,
+    errorBarOffset: offset
+  } = (0, _ErrorBarContext.useErrorBarContext)();
+  var xAxis = (0, _hooks.useXAxis)(xAxisId);
+  var yAxis = (0, _hooks.useYAxis)(yAxisId);
+  if ((xAxis === null || xAxis === void 0 ? void 0 : xAxis.scale) == null || (yAxis === null || yAxis === void 0 ? void 0 : yAxis.scale) == null || data == null) {
+    return null;
+  }
+
+  // ErrorBar requires type number XAxis, why?
+  if (direction === 'x' && xAxis.type !== 'number') {
+    return null;
+  }
+  var errorBars = data.map(entry => {
+    var {
+      x,
+      y,
+      value,
+      errorVal
+    } = dataPointFormatter(entry, dataKey, direction);
+    if (!errorVal || x == null || y == null) {
+      return null;
+    }
+    var lineCoordinates = [];
+    var lowBound, highBound;
+    if (Array.isArray(errorVal)) {
+      [lowBound, highBound] = errorVal;
+    } else {
+      lowBound = highBound = errorVal;
+    }
+    if (direction === 'x') {
+      // error bar for horizontal charts, the y is fixed, x is a range value
+      var {
+        scale
+      } = xAxis;
+      var yMid = y + offset;
+      var yMin = yMid + width;
+      var yMax = yMid - width;
+      var xMin = scale(value - lowBound);
+      var xMax = scale(value + highBound);
+
+      // the right line of |--|
+      lineCoordinates.push({
+        x1: xMax,
+        y1: yMin,
+        x2: xMax,
+        y2: yMax
+      });
+      // the middle line of |--|
+      lineCoordinates.push({
+        x1: xMin,
+        y1: yMid,
+        x2: xMax,
+        y2: yMid
+      });
+      // the left line of |--|
+      lineCoordinates.push({
+        x1: xMin,
+        y1: yMin,
+        x2: xMin,
+        y2: yMax
+      });
+    } else if (direction === 'y') {
+      // error bar for horizontal charts, the x is fixed, y is a range value
+      var {
+        scale: _scale
+      } = yAxis;
+      var xMid = x + offset;
+      var _xMin = xMid - width;
+      var _xMax = xMid + width;
+      var _yMin = _scale(value - lowBound);
+      var _yMax = _scale(value + highBound);
+
+      // the top line
+      lineCoordinates.push({
+        x1: _xMin,
+        y1: _yMax,
+        x2: _xMax,
+        y2: _yMax
+      });
+      // the middle line
+      lineCoordinates.push({
+        x1: xMid,
+        y1: _yMin,
+        x2: xMid,
+        y2: _yMax
+      });
+      // the bottom line
+      lineCoordinates.push({
+        x1: _xMin,
+        y1: _yMin,
+        x2: _xMax,
+        y2: _yMin
+      });
+    }
+    var scaleDirection = direction === 'x' ? 'scaleX' : 'scaleY';
+    var transformOrigin = "".concat(x + offset, "px ").concat(y + offset, "px");
+    return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+      className: "recharts-errorBar",
+      key: "bar-".concat(lineCoordinates.map(c => "".concat(c.x1, "-").concat(c.x2, "-").concat(c.y1, "-").concat(c.y2)))
+    }, svgProps), lineCoordinates.map(coordinates => {
+      var lineStyle = isAnimationActive ? {
+        transformOrigin
+      } : undefined;
+      return /*#__PURE__*/React.createElement(_CSSTransitionAnimate.CSSTransitionAnimate, {
+        from: "".concat(scaleDirection, "(0)"),
+        to: "".concat(scaleDirection, "(1)"),
+        attributeName: "transform",
+        begin: animationBegin,
+        easing: animationEasing,
+        isActive: isAnimationActive,
+        duration: animationDuration,
+        key: "line-".concat(coordinates.x1, "-").concat(coordinates.x2, "-").concat(coordinates.y1, "-").concat(coordinates.y2)
+      }, style => /*#__PURE__*/React.createElement("line", _extends({}, coordinates, {
+        style: _objectSpread(_objectSpread({}, lineStyle), style)
+      })));
+    }));
+  });
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-errorBars"
+  }, errorBars);
+}
+function useErrorBarDirection(directionFromProps) {
+  var layout = (0, _chartLayoutContext.useChartLayout)();
+  if (directionFromProps != null) {
+    return directionFromProps;
+  }
+  if (layout != null) {
+    return layout === 'horizontal' ? 'y' : 'x';
+  }
+  return 'x';
+}
+var errorBarDefaultProps = {
+  stroke: 'black',
+  strokeWidth: 1.5,
+  width: 5,
+  offset: 0,
+  isAnimationActive: true,
+  animationBegin: 0,
+  animationDuration: 400,
+  animationEasing: 'ease-in-out'
+};
+function ErrorBarInternal(props) {
+  var realDirection = useErrorBarDirection(props.direction);
+  var {
+    width,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing
+  } = (0, _resolveDefaultProps.resolveDefaultProps)(props, errorBarDefaultProps);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_ErrorBarContext.ReportErrorBarSettings, {
+    dataKey: props.dataKey,
+    direction: realDirection
+  }), /*#__PURE__*/React.createElement(ErrorBarImpl, _extends({}, props, {
+    direction: realDirection,
+    width: width,
+    isAnimationActive: isAnimationActive,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing
+  })));
+}
+
+// eslint-disable-next-line react/prefer-stateless-function
+class ErrorBar extends _react.Component {
+  render() {
+    return /*#__PURE__*/React.createElement(ErrorBarInternal, this.props);
+  }
+}
+exports.ErrorBar = ErrorBar;
+_defineProperty(ErrorBar, "defaultProps", errorBarDefaultProps);
+_defineProperty(ErrorBar, "displayName", 'ErrorBar');
Index: node_modules/recharts/lib/cartesian/Funnel.js
===================================================================
--- node_modules/recharts/lib/cartesian/Funnel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/Funnel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,461 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.FunnelWithState = exports.Funnel = void 0;
+exports.computeFunnelTrapezoids = computeFunnelTrapezoids;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _omit = _interopRequireDefault(require("es-toolkit/compat/omit"));
+var _clsx = require("clsx");
+var _selectors = require("../state/selectors/selectors");
+var _hooks = require("../state/hooks");
+var _Layer = require("../container/Layer");
+var _LabelList = require("../component/LabelList");
+var _Global = require("../util/Global");
+var _DataUtils = require("../util/DataUtils");
+var _ChartUtils = require("../util/ChartUtils");
+var _types = require("../util/types");
+var _FunnelUtils = require("../util/FunnelUtils");
+var _tooltipContext = require("../context/tooltipContext");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _funnelSelectors = require("../state/selectors/funnelSelectors");
+var _ReactUtils = require("../util/ReactUtils");
+var _Cell = require("../component/Cell");
+var _resolveDefaultProps2 = require("../util/resolveDefaultProps");
+var _hooks2 = require("../hooks");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _JavascriptAnimate = require("../animation/JavascriptAnimate");
+var _excluded = ["onMouseEnter", "onClick", "onMouseLeave", "shape", "activeShape"],
+  _excluded2 = ["stroke", "fill", "legendType", "hide", "isAnimationActive", "animationBegin", "animationDuration", "animationEasing", "nameKey", "lastShapeType"];
+/* eslint-disable max-classes-per-file */
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    nameKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType,
+    data
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: props.trapezoids.map(_ref => {
+      var {
+        tooltipPosition
+      } = _ref;
+      return tooltipPosition;
+    }),
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      name,
+      nameKey,
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '' // Funnel does not have unit, why?
+    }
+  };
+}
+function FunnelTrapezoids(props) {
+  var {
+    trapezoids,
+    allOtherFunnelProps,
+    showLabels
+  } = props;
+  var activeItemIndex = (0, _hooks.useAppSelector)(state => (0, _selectors.selectActiveIndex)(state, 'item', state.tooltip.settings.trigger, undefined));
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps,
+      shape,
+      activeShape
+    } = allOtherFunnelProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherFunnelProps, _excluded);
+  var onMouseEnterFromContext = (0, _tooltipContext.useMouseEnterItemDispatch)(onMouseEnterFromProps, allOtherFunnelProps.dataKey);
+  var onMouseLeaveFromContext = (0, _tooltipContext.useMouseLeaveItemDispatch)(onMouseLeaveFromProps);
+  var onClickFromContext = (0, _tooltipContext.useMouseClickItemDispatch)(onItemClickFromProps, allOtherFunnelProps.dataKey);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, trapezoids.map((entry, i) => {
+    var isActiveIndex = activeShape && activeItemIndex === String(i);
+    var trapezoidOptions = isActiveIndex ? activeShape : shape;
+    var trapezoidProps = _objectSpread(_objectSpread({}, entry), {}, {
+      option: trapezoidOptions,
+      isActive: isActiveIndex,
+      stroke: entry.stroke
+    });
+    return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+      className: "recharts-funnel-trapezoid"
+    }, (0, _types.adaptEventsOfChild)(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error the types need a bit of attention
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onClick: onClickFromContext(entry, i),
+      key: "trapezoid-".concat(entry === null || entry === void 0 ? void 0 : entry.x, "-").concat(entry === null || entry === void 0 ? void 0 : entry.y, "-").concat(entry === null || entry === void 0 ? void 0 : entry.name, "-").concat(entry === null || entry === void 0 ? void 0 : entry.value)
+    }), /*#__PURE__*/React.createElement(_FunnelUtils.FunnelTrapezoid, trapezoidProps));
+  }), showLabels && _LabelList.LabelList.renderCallByParent(allOtherFunnelProps, trapezoids));
+}
+var latestId = 0;
+
+/**
+ * This hook will return a unique animation id for the given reference.
+ * The ID increments every time the reference changes.
+ * @param reference The reference to track
+ * @returns The unique animation ID
+ */
+function useAnimationId(reference) {
+  var idRef = (0, _react.useRef)(latestId);
+  var ref = (0, _react.useRef)(reference);
+  if (ref.current !== reference) {
+    idRef.current += 1;
+    latestId = idRef.current;
+    ref.current = reference;
+  }
+  return idRef.current;
+}
+function TrapezoidsWithAnimation(_ref2) {
+  var {
+    previousTrapezoidsRef,
+    props
+  } = _ref2;
+  var {
+    trapezoids,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevTrapezoids = previousTrapezoidsRef.current;
+  var [isAnimating, setIsAnimating] = (0, _react.useState)(true);
+  var animationId = useAnimationId(trapezoids);
+  var handleAnimationEnd = (0, _react.useCallback)(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = (0, _react.useCallback)(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(_JavascriptAnimate.JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    key: animationId,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd
+  }, t => {
+    var stepData = t === 1 ? trapezoids : trapezoids.map((entry, index) => {
+      var prev = prevTrapezoids && prevTrapezoids[index];
+      if (prev) {
+        var _interpolatorX = (0, _DataUtils.interpolateNumber)(prev.x, entry.x);
+        var _interpolatorY = (0, _DataUtils.interpolateNumber)(prev.y, entry.y);
+        var _interpolatorUpperWidth = (0, _DataUtils.interpolateNumber)(prev.upperWidth, entry.upperWidth);
+        var _interpolatorLowerWidth = (0, _DataUtils.interpolateNumber)(prev.lowerWidth, entry.lowerWidth);
+        var _interpolatorHeight = (0, _DataUtils.interpolateNumber)(prev.height, entry.height);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: _interpolatorX(t),
+          y: _interpolatorY(t),
+          upperWidth: _interpolatorUpperWidth(t),
+          lowerWidth: _interpolatorLowerWidth(t),
+          height: _interpolatorHeight(t)
+        });
+      }
+      var interpolatorX = (0, _DataUtils.interpolateNumber)(entry.x + entry.upperWidth / 2, entry.x);
+      var interpolatorY = (0, _DataUtils.interpolateNumber)(entry.y + entry.height / 2, entry.y);
+      var interpolatorUpperWidth = (0, _DataUtils.interpolateNumber)(0, entry.upperWidth);
+      var interpolatorLowerWidth = (0, _DataUtils.interpolateNumber)(0, entry.lowerWidth);
+      var interpolatorHeight = (0, _DataUtils.interpolateNumber)(0, entry.height);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        x: interpolatorX(t),
+        y: interpolatorY(t),
+        upperWidth: interpolatorUpperWidth(t),
+        lowerWidth: interpolatorLowerWidth(t),
+        height: interpolatorHeight(t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousTrapezoidsRef.current = stepData;
+    }
+    return /*#__PURE__*/React.createElement(_Layer.Layer, null, /*#__PURE__*/React.createElement(FunnelTrapezoids, {
+      trapezoids: stepData,
+      allOtherFunnelProps: props,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderTrapezoids(props) {
+  var {
+    trapezoids,
+    isAnimationActive
+  } = props;
+  var previousTrapezoidsRef = (0, _react.useRef)(null);
+  var prevTrapezoids = previousTrapezoidsRef.current;
+  if (isAnimationActive && trapezoids && trapezoids.length && (!prevTrapezoids || prevTrapezoids !== trapezoids)) {
+    return /*#__PURE__*/React.createElement(TrapezoidsWithAnimation, {
+      props: props,
+      previousTrapezoidsRef: previousTrapezoidsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(FunnelTrapezoids, {
+    trapezoids: trapezoids,
+    allOtherFunnelProps: props,
+    showLabels: true
+  });
+}
+var getRealWidthHeight = (customWidth, offset) => {
+  var {
+    width,
+    height,
+    left,
+    right,
+    top,
+    bottom
+  } = offset;
+  var realHeight = height;
+  var realWidth = width;
+  if ((0, _DataUtils.isNumber)(customWidth)) {
+    realWidth = customWidth;
+  } else if (typeof customWidth === 'string') {
+    realWidth = realWidth * parseFloat(customWidth) / 100;
+  }
+  return {
+    realWidth: realWidth - left - right - 50,
+    realHeight: realHeight - bottom - top,
+    offsetX: (width - realWidth) / 2,
+    offsetY: (height - realHeight) / 2
+  };
+};
+class FunnelWithState extends _react.PureComponent {
+  render() {
+    var {
+      className
+    } = this.props;
+    var layerClass = (0, _clsx.clsx)('recharts-trapezoids', className);
+    return /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: layerClass
+    }, /*#__PURE__*/React.createElement(RenderTrapezoids, this.props));
+  }
+}
+exports.FunnelWithState = FunnelWithState;
+var defaultFunnelProps = {
+  stroke: '#fff',
+  fill: '#808080',
+  legendType: 'rect',
+  hide: false,
+  isAnimationActive: !_Global.Global.isSsr,
+  animationBegin: 400,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  nameKey: 'name',
+  lastShapeType: 'triangle'
+};
+function FunnelImpl(props) {
+  var {
+    height,
+    width
+  } = (0, _hooks2.usePlotArea)();
+  var _resolveDefaultProps = (0, _resolveDefaultProps2.resolveDefaultProps)(props, defaultFunnelProps),
+    {
+      stroke,
+      fill,
+      legendType,
+      hide,
+      isAnimationActive,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      nameKey,
+      lastShapeType
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded2);
+  var presentationProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props);
+  var cells = (0, _ReactUtils.findAllByType)(props.children, _Cell.Cell);
+  var funnelSettings = (0, _react.useMemo)(() => ({
+    dataKey: props.dataKey,
+    nameKey,
+    data: props.data,
+    tooltipType: props.tooltipType,
+    lastShapeType,
+    reversed: props.reversed,
+    customWidth: props.width,
+    cells,
+    presentationProps
+  }), [props.dataKey, nameKey, props.data, props.tooltipType, lastShapeType, props.reversed, props.width, cells, presentationProps]);
+  var {
+    trapezoids
+  } = (0, _hooks.useAppSelector)(state => (0, _funnelSelectors.selectFunnelTrapezoids)(state, funnelSettings));
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: _objectSpread(_objectSpread({}, props), {}, {
+      trapezoids
+    })
+  }), hide ? null : /*#__PURE__*/React.createElement(FunnelWithState, _extends({}, everythingElse, {
+    stroke: stroke,
+    fill: fill,
+    nameKey: nameKey,
+    lastShapeType: lastShapeType,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive,
+    hide: hide,
+    legendType: legendType,
+    height: height,
+    width: width,
+    trapezoids: trapezoids
+  })));
+}
+function computeFunnelTrapezoids(_ref3) {
+  var {
+    dataKey,
+    nameKey,
+    displayedData,
+    tooltipType,
+    lastShapeType,
+    reversed,
+    offset,
+    customWidth
+  } = _ref3;
+  var {
+    left,
+    top
+  } = offset;
+  var {
+    realHeight,
+    realWidth,
+    offsetX,
+    offsetY
+  } = getRealWidthHeight(customWidth, offset);
+  var maxValue = Math.max.apply(null, displayedData.map(entry => (0, _ChartUtils.getValueByDataKey)(entry, dataKey, 0)));
+  var len = displayedData.length;
+  var rowHeight = realHeight / len;
+  var parentViewBox = {
+    x: offset.left,
+    y: offset.top,
+    width: offset.width,
+    height: offset.height
+  };
+  var trapezoids = displayedData.map((entry, i) => {
+    var rawVal = (0, _ChartUtils.getValueByDataKey)(entry, dataKey, 0);
+    var name = (0, _ChartUtils.getValueByDataKey)(entry, nameKey, i);
+    var val = rawVal;
+    var nextVal;
+    if (i !== len - 1) {
+      nextVal = (0, _ChartUtils.getValueByDataKey)(displayedData[i + 1], dataKey, 0);
+      if (nextVal instanceof Array) {
+        [nextVal] = nextVal;
+      }
+    } else if (rawVal instanceof Array && rawVal.length === 2) {
+      [val, nextVal] = rawVal;
+    } else if (lastShapeType === 'rectangle') {
+      nextVal = val;
+    } else {
+      nextVal = 0;
+    }
+
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    var x = (maxValue - val) * realWidth / (2 * maxValue) + top + 25 + offsetX;
+    var y = rowHeight * i + left + offsetY;
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    var upperWidth = val / maxValue * realWidth;
+    var lowerWidth = nextVal / maxValue * realWidth;
+    var tooltipPayload = [{
+      name,
+      value: val,
+      payload: entry,
+      dataKey,
+      type: tooltipType
+    }];
+    var tooltipPosition = {
+      x: x + upperWidth / 2,
+      y: y + rowHeight / 2
+    };
+    return _objectSpread(_objectSpread({
+      x,
+      y,
+      width: Math.max(upperWidth, lowerWidth),
+      upperWidth,
+      lowerWidth,
+      height: rowHeight,
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      name,
+      val,
+      tooltipPayload,
+      tooltipPosition
+    }, (0, _omit.default)(entry, ['width'])), {}, {
+      payload: entry,
+      parentViewBox,
+      labelViewBox: {
+        x: x + (upperWidth - lowerWidth) / 4,
+        y,
+        width: Math.abs(upperWidth - lowerWidth) / 2 + Math.min(upperWidth, lowerWidth),
+        height: rowHeight
+      }
+    });
+  });
+  if (reversed) {
+    trapezoids = trapezoids.map((entry, index) => {
+      var newY = entry.y - index * rowHeight + (len - 1 - index) * rowHeight;
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        upperWidth: entry.lowerWidth,
+        lowerWidth: entry.upperWidth,
+        x: entry.x - (entry.lowerWidth - entry.upperWidth) / 2,
+        y: entry.y - index * rowHeight + (len - 1 - index) * rowHeight,
+        tooltipPosition: _objectSpread(_objectSpread({}, entry.tooltipPosition), {}, {
+          y: newY + rowHeight / 2
+        }),
+        labelViewBox: _objectSpread(_objectSpread({}, entry.labelViewBox), {}, {
+          y: newY
+        })
+      });
+    });
+  }
+  return {
+    trapezoids,
+    data: displayedData
+  };
+}
+class Funnel extends _react.PureComponent {
+  render() {
+    return /*#__PURE__*/React.createElement(FunnelImpl, this.props);
+  }
+}
+exports.Funnel = Funnel;
+_defineProperty(Funnel, "displayName", 'Funnel');
+_defineProperty(Funnel, "defaultProps", defaultFunnelProps);
Index: node_modules/recharts/lib/cartesian/GraphicalItemClipPath.js
===================================================================
--- node_modules/recharts/lib/cartesian/GraphicalItemClipPath.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/GraphicalItemClipPath.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.GraphicalItemClipPath = GraphicalItemClipPath;
+exports.useNeedsClip = useNeedsClip;
+var React = _interopRequireWildcard(require("react"));
+var _hooks = require("../state/hooks");
+var _axisSelectors = require("../state/selectors/axisSelectors");
+var _hooks2 = require("../hooks");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function useNeedsClip(xAxisId, yAxisId) {
+  var _xAxis$allowDataOverf, _yAxis$allowDataOverf;
+  var xAxis = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectXAxisSettings)(state, xAxisId));
+  var yAxis = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectYAxisSettings)(state, yAxisId));
+  var needClipX = (_xAxis$allowDataOverf = xAxis === null || xAxis === void 0 ? void 0 : xAxis.allowDataOverflow) !== null && _xAxis$allowDataOverf !== void 0 ? _xAxis$allowDataOverf : _axisSelectors.implicitXAxis.allowDataOverflow;
+  var needClipY = (_yAxis$allowDataOverf = yAxis === null || yAxis === void 0 ? void 0 : yAxis.allowDataOverflow) !== null && _yAxis$allowDataOverf !== void 0 ? _yAxis$allowDataOverf : _axisSelectors.implicitYAxis.allowDataOverflow;
+  var needClip = needClipX || needClipY;
+  return {
+    needClip,
+    needClipX,
+    needClipY
+  };
+}
+function GraphicalItemClipPath(_ref) {
+  var {
+    xAxisId,
+    yAxisId,
+    clipPathId
+  } = _ref;
+  var plotArea = (0, _hooks2.usePlotArea)();
+  var {
+    needClipX,
+    needClipY,
+    needClip
+  } = useNeedsClip(xAxisId, yAxisId);
+  if (!needClip) {
+    return null;
+  }
+  var {
+    x,
+    y,
+    width,
+    height
+  } = plotArea;
+  return /*#__PURE__*/React.createElement("clipPath", {
+    id: "clipPath-".concat(clipPathId)
+  }, /*#__PURE__*/React.createElement("rect", {
+    x: needClipX ? x : x - width / 2,
+    y: needClipY ? y : y - height / 2,
+    width: needClipX ? width : width * 2,
+    height: needClipY ? height : height * 2
+  }));
+}
Index: node_modules/recharts/lib/cartesian/Line.js
===================================================================
--- node_modules/recharts/lib/cartesian/Line.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/Line.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,653 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Line = Line;
+exports.computeLinePoints = computeLinePoints;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Curve = require("../shape/Curve");
+var _Dot = require("../shape/Dot");
+var _Layer = require("../container/Layer");
+var _LabelList = require("../component/LabelList");
+var _DataUtils = require("../util/DataUtils");
+var _ReactUtils = require("../util/ReactUtils");
+var _Global = require("../util/Global");
+var _ChartUtils = require("../util/ChartUtils");
+var _ActivePoints = require("../component/ActivePoints");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _ErrorBarContext = require("../context/ErrorBarContext");
+var _GraphicalItemClipPath = require("./GraphicalItemClipPath");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _lineSelectors = require("../state/selectors/lineSelectors");
+var _hooks = require("../state/hooks");
+var _SetLegendPayload = require("../state/SetLegendPayload");
+var _useAnimationId = require("../util/useAnimationId");
+var _resolveDefaultProps2 = require("../util/resolveDefaultProps");
+var _hooks2 = require("../hooks");
+var _RegisterGraphicalItemId = require("../context/RegisterGraphicalItemId");
+var _SetGraphicalItem = require("../state/SetGraphicalItem");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _JavascriptAnimate = require("../animation/JavascriptAnimate");
+var _excluded = ["id"],
+  _excluded2 = ["type", "layout", "connectNulls", "needClip"],
+  _excluded3 = ["activeDot", "animateNewValues", "animationBegin", "animationDuration", "animationEasing", "connectNulls", "dot", "hide", "isAnimationActive", "label", "legendType", "xAxisId", "yAxisId", "id"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+
+var computeLegendPayloadFromAreaData = props => {
+  var {
+    dataKey,
+    name,
+    stroke,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: stroke,
+    value: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+    payload: props
+  }];
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    data,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    unit
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey: undefined,
+      name: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+      hide,
+      type: props.tooltipType,
+      color: props.stroke,
+      unit
+    }
+  };
+}
+var generateSimpleStrokeDasharray = (totalLength, length) => {
+  return "".concat(length, "px ").concat(totalLength - length, "px");
+};
+function repeat(lines, count) {
+  var linesUnit = lines.length % 2 !== 0 ? [...lines, 0] : lines;
+  var result = [];
+  for (var i = 0; i < count; ++i) {
+    result = [...result, ...linesUnit];
+  }
+  return result;
+}
+var getStrokeDasharray = (length, totalLength, lines) => {
+  var lineLength = lines.reduce((pre, next) => pre + next);
+
+  // if lineLength is 0 return the default when no strokeDasharray is provided
+  if (!lineLength) {
+    return generateSimpleStrokeDasharray(totalLength, length);
+  }
+  var count = Math.floor(length / lineLength);
+  var remainLength = length % lineLength;
+  var restLength = totalLength - length;
+  var remainLines = [];
+  for (var i = 0, sum = 0; i < lines.length; sum += lines[i], ++i) {
+    if (sum + lines[i] > remainLength) {
+      remainLines = [...lines.slice(0, i), remainLength - sum];
+      break;
+    }
+  }
+  var emptyLines = remainLines.length % 2 === 0 ? [0, restLength] : [restLength];
+  return [...repeat(lines, count), ...remainLines, ...emptyLines].map(line => "".concat(line, "px")).join(', ');
+};
+function renderDotItem(option, props) {
+  var dotItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    dotItem = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    dotItem = option(props);
+  } else {
+    var className = (0, _clsx.clsx)('recharts-line-dot', typeof option !== 'boolean' ? option.className : '');
+    dotItem = /*#__PURE__*/React.createElement(_Dot.Dot, _extends({}, props, {
+      className: className
+    }));
+  }
+  return dotItem;
+}
+function shouldRenderDots(points, dot) {
+  if (points == null) {
+    return false;
+  }
+  if (dot) {
+    return true;
+  }
+  return points.length === 1;
+}
+function Dots(_ref) {
+  var {
+    clipPathId,
+    points,
+    props
+  } = _ref;
+  var {
+    dot,
+    dataKey,
+    needClip
+  } = props;
+  if (!shouldRenderDots(points, dot)) {
+    return null;
+  }
+
+  /*
+   * Exclude ID from the props passed to the Dots component
+   * because then the ID would be applied to multiple dots and it would no longer be unique.
+   */
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded);
+  var clipDot = (0, _ReactUtils.isClipDot)(dot);
+  var lineProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(propsWithoutId);
+  var customDotProps = (0, _ReactUtils.filterProps)(dot, true);
+  var dots = points.map((entry, i) => {
+    var dotProps = _objectSpread(_objectSpread(_objectSpread({
+      key: "dot-".concat(i),
+      r: 3
+    }, lineProps), customDotProps), {}, {
+      index: i,
+      cx: entry.x,
+      cy: entry.y,
+      dataKey,
+      value: entry.value,
+      payload: entry.payload,
+      points
+    });
+    return renderDotItem(dot, dotProps);
+  });
+  var dotsProps = {
+    clipPath: needClip ? "url(#clipPath-".concat(clipDot ? '' : 'dots-').concat(clipPathId, ")") : undefined
+  };
+  return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+    className: "recharts-line-dots",
+    key: "dots"
+  }, dotsProps), dots);
+}
+function StaticCurve(_ref2) {
+  var {
+    clipPathId,
+    pathRef,
+    points,
+    strokeDasharray,
+    props,
+    showLabels
+  } = _ref2;
+  var {
+      type,
+      layout,
+      connectNulls,
+      needClip
+    } = props,
+    others = _objectWithoutProperties(props, _excluded2);
+  var curveProps = _objectSpread(_objectSpread({}, (0, _ReactUtils.filterProps)(others, true)), {}, {
+    fill: 'none',
+    className: 'recharts-line-curve',
+    clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : undefined,
+    points,
+    type,
+    layout,
+    connectNulls,
+    strokeDasharray: strokeDasharray !== null && strokeDasharray !== void 0 ? strokeDasharray : props.strokeDasharray
+  });
+  return /*#__PURE__*/React.createElement(React.Fragment, null, (points === null || points === void 0 ? void 0 : points.length) > 1 && /*#__PURE__*/React.createElement(_Curve.Curve, _extends({}, curveProps, {
+    pathRef: pathRef
+  })), /*#__PURE__*/React.createElement(Dots, {
+    points: points,
+    clipPathId: clipPathId,
+    props: props
+  }), showLabels && _LabelList.LabelList.renderCallByParent(props, points));
+}
+function getTotalLength(mainCurve) {
+  try {
+    return mainCurve && mainCurve.getTotalLength && mainCurve.getTotalLength() || 0;
+  } catch (_unused) {
+    return 0;
+  }
+}
+function CurveWithAnimation(_ref3) {
+  var {
+    clipPathId,
+    props,
+    pathRef,
+    previousPointsRef,
+    longestAnimatedLengthRef
+  } = _ref3;
+  var {
+    points,
+    strokeDasharray,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    animateNewValues,
+    width,
+    height,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevPoints = previousPointsRef.current;
+  var animationId = (0, _useAnimationId.useAnimationId)(props, 'recharts-line-');
+  var [isAnimating, setIsAnimating] = (0, _react.useState)(false);
+  var handleAnimationEnd = (0, _react.useCallback)(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = (0, _react.useCallback)(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  var totalLength = getTotalLength(pathRef.current);
+  /*
+   * Here we want to detect if the length animation has been interrupted.
+   * For that we keep a reference to the furthest length that has been animated.
+   *
+   * And then, to keep things smooth, we add to it the current length that is being animated right now.
+   *
+   * If we did Math.max then it makes the length animation "pause" but we want to keep it smooth
+   * so in case we have some "leftover" length from the previous animation we add it to the current length.
+   *
+   * This is not perfect because the animation changes speed due to easing. The default easing is 'ease' which is not linear
+   * and makes it stand out. But it's good enough I suppose.
+   * If we want to fix it then we need to keep track of multiple animations and their easing and timings.
+   *
+   * If you want to see this in action, try to change the dataKey of the line chart while the initial animation is running.
+   * The Line begins with zero length and slowly grows to the full length. While this growth is in progress,
+   * change the dataKey and the Line will continue growing from where it has grown so far.
+   */
+  var startingPoint = longestAnimatedLengthRef.current;
+  return /*#__PURE__*/React.createElement(_JavascriptAnimate.JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    var lengthInterpolated = (0, _DataUtils.interpolate)(startingPoint, totalLength + startingPoint, t);
+    var curLength = Math.min(lengthInterpolated, totalLength);
+    var currentStrokeDasharray;
+    if (strokeDasharray) {
+      var lines = "".concat(strokeDasharray).split(/[,\s]+/gim).map(num => parseFloat(num));
+      currentStrokeDasharray = getStrokeDasharray(curLength, totalLength, lines);
+    } else {
+      currentStrokeDasharray = generateSimpleStrokeDasharray(totalLength, curLength);
+    }
+    if (prevPoints) {
+      var prevPointsDiffFactor = prevPoints.length / points.length;
+      var stepData = t === 1 ? points : points.map((entry, index) => {
+        var prevPointIndex = Math.floor(index * prevPointsDiffFactor);
+        if (prevPoints[prevPointIndex]) {
+          var prev = prevPoints[prevPointIndex];
+          return _objectSpread(_objectSpread({}, entry), {}, {
+            x: (0, _DataUtils.interpolate)(prev.x, entry.x, t),
+            y: (0, _DataUtils.interpolate)(prev.y, entry.y, t)
+          });
+        }
+
+        // magic number of faking previous x and y location
+        if (animateNewValues) {
+          return _objectSpread(_objectSpread({}, entry), {}, {
+            x: (0, _DataUtils.interpolate)(width * 2, entry.x, t),
+            y: (0, _DataUtils.interpolate)(height / 2, entry.y, t)
+          });
+        }
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: entry.x,
+          y: entry.y
+        });
+      });
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = stepData;
+      return /*#__PURE__*/React.createElement(StaticCurve, {
+        props: props,
+        points: stepData,
+        clipPathId: clipPathId,
+        pathRef: pathRef,
+        showLabels: !isAnimating,
+        strokeDasharray: currentStrokeDasharray
+      });
+    }
+
+    /*
+     * Here it is important to wait a little bit with updating the previousPointsRef
+     * before the animation has a time to initialize.
+     * If we set the previous pointsRef immediately, we set it before the Legend height it calculated
+     * and before pathRef is set.
+     * If that happens, the Line will re-render again after Legend had reported its height
+     * which will start a new animation with the previous points as the starting point
+     * which gives the effect of the Line animating slightly upwards (where the animation distance equals the Legend height).
+     * Waiting for t > 0 is indirect but good enough to ensure that the Legend height is calculated and animation works properly.
+     *
+     * Total length similarly is calculated from the pathRef. We should not update the previousPointsRef
+     * before the pathRef is set, otherwise we will have a wrong total length.
+     */
+    if (t > 0 && totalLength > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = points;
+      /*
+       * totalLength is set from a ref and is not updated in the first tick of the animation.
+       * It defaults to zero which is exactly what we want here because we want to grow from zero,
+       * however the same happens when the data change.
+       *
+       * In that case we want to remember the previous length and continue from there, and only animate the shape.
+       *
+       * Therefore the totalLength > 0 check.
+       *
+       * The Animate is about to fire handleAnimationStart which will update the state
+       * and cause a re-render and read a new proper totalLength which will be used in the next tick
+       * and update the longestAnimatedLengthRef.
+       */
+      // eslint-disable-next-line no-param-reassign
+      longestAnimatedLengthRef.current = curLength;
+    }
+    return /*#__PURE__*/React.createElement(StaticCurve, {
+      props: props,
+      points: points,
+      clipPathId: clipPathId,
+      pathRef: pathRef,
+      showLabels: !isAnimating,
+      strokeDasharray: currentStrokeDasharray
+    });
+  });
+}
+function RenderCurve(_ref4) {
+  var {
+    clipPathId,
+    props
+  } = _ref4;
+  var {
+    points,
+    isAnimationActive
+  } = props;
+  var previousPointsRef = (0, _react.useRef)(null);
+  var longestAnimatedLengthRef = (0, _react.useRef)(0);
+  var pathRef = (0, _react.useRef)(null);
+  var prevPoints = previousPointsRef.current;
+  if (isAnimationActive && points && points.length && prevPoints !== points) {
+    return /*#__PURE__*/React.createElement(CurveWithAnimation, {
+      props: props,
+      clipPathId: clipPathId,
+      previousPointsRef: previousPointsRef,
+      longestAnimatedLengthRef: longestAnimatedLengthRef,
+      pathRef: pathRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(StaticCurve, {
+    props: props,
+    points: points,
+    clipPathId: clipPathId,
+    pathRef: pathRef,
+    showLabels: true
+  });
+}
+var errorBarDataPointFormatter = (dataPoint, dataKey) => {
+  return {
+    x: dataPoint.x,
+    y: dataPoint.y,
+    value: dataPoint.value,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    errorVal: (0, _ChartUtils.getValueByDataKey)(dataPoint.payload, dataKey)
+  };
+};
+
+// eslint-disable-next-line react/prefer-stateless-function
+class LineWithState extends _react.Component {
+  render() {
+    var _filterProps;
+    var {
+      hide,
+      dot,
+      points,
+      className,
+      xAxisId,
+      yAxisId,
+      top,
+      left,
+      width,
+      height,
+      id,
+      needClip
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = (0, _clsx.clsx)('recharts-line', className);
+    var clipPathId = id;
+    var {
+      r = 3,
+      strokeWidth = 2
+    } = (_filterProps = (0, _ReactUtils.filterProps)(dot, false)) !== null && _filterProps !== void 0 ? _filterProps : {
+      r: 3,
+      strokeWidth: 2
+    };
+    var clipDot = (0, _ReactUtils.isClipDot)(dot);
+    var dotSize = r * 2 + strokeWidth;
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: layerClass
+    }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(_GraphicalItemClipPath.GraphicalItemClipPath, {
+      clipPathId: clipPathId,
+      xAxisId: xAxisId,
+      yAxisId: yAxisId
+    }), !clipDot && /*#__PURE__*/React.createElement("clipPath", {
+      id: "clipPath-dots-".concat(clipPathId)
+    }, /*#__PURE__*/React.createElement("rect", {
+      x: left - dotSize / 2,
+      y: top - dotSize / 2,
+      width: width + dotSize,
+      height: height + dotSize
+    }))), /*#__PURE__*/React.createElement(RenderCurve, {
+      props: this.props,
+      clipPathId: clipPathId
+    }), /*#__PURE__*/React.createElement(_ErrorBarContext.SetErrorBarContext, {
+      xAxisId: xAxisId,
+      yAxisId: yAxisId,
+      data: points,
+      dataPointFormatter: errorBarDataPointFormatter,
+      errorBarOffset: 0
+    }, this.props.children)), /*#__PURE__*/React.createElement(_ActivePoints.ActivePoints, {
+      activeDot: this.props.activeDot,
+      points: points,
+      mainColor: this.props.stroke,
+      itemDataKey: this.props.dataKey
+    }));
+  }
+}
+var defaultLineProps = {
+  activeDot: true,
+  animateNewValues: true,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  connectNulls: false,
+  dot: true,
+  fill: '#fff',
+  hide: false,
+  isAnimationActive: !_Global.Global.isSsr,
+  label: false,
+  legendType: 'line',
+  stroke: '#3182bd',
+  strokeWidth: 1,
+  xAxisId: 0,
+  yAxisId: 0
+};
+function LineImpl(props) {
+  var _resolveDefaultProps = (0, _resolveDefaultProps2.resolveDefaultProps)(props, defaultLineProps),
+    {
+      activeDot,
+      animateNewValues,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      connectNulls,
+      dot,
+      hide,
+      isAnimationActive,
+      label,
+      legendType,
+      xAxisId,
+      yAxisId,
+      id
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded3);
+  var {
+    needClip
+  } = (0, _GraphicalItemClipPath.useNeedsClip)(xAxisId, yAxisId);
+  var plotArea = (0, _hooks2.usePlotArea)();
+  var layout = (0, _chartLayoutContext.useChartLayout)();
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var points = (0, _hooks.useAppSelector)(state => (0, _lineSelectors.selectLinePoints)(state, xAxisId, yAxisId, isPanorama, id));
+  if (layout !== 'horizontal' && layout !== 'vertical' || points == null || plotArea == null) {
+    // Cannot render Line in an unsupported layout
+    return null;
+  }
+  var {
+    height,
+    width,
+    x: left,
+    y: top
+  } = plotArea;
+  return /*#__PURE__*/React.createElement(LineWithState, _extends({}, everythingElse, {
+    id: id,
+    connectNulls: connectNulls,
+    dot: dot,
+    activeDot: activeDot,
+    animateNewValues: animateNewValues,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive,
+    hide: hide,
+    label: label,
+    legendType: legendType,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    points: points,
+    layout: layout,
+    height: height,
+    width: width,
+    left: left,
+    top: top,
+    needClip: needClip
+  }));
+}
+function computeLinePoints(_ref5) {
+  var {
+    layout,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    dataKey,
+    bandSize,
+    displayedData
+  } = _ref5;
+  return displayedData.map((entry, index) => {
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    var value = (0, _ChartUtils.getValueByDataKey)(entry, dataKey);
+    if (layout === 'horizontal') {
+      var _x = (0, _ChartUtils.getCateCoordinateOfLine)({
+        axis: xAxis,
+        ticks: xAxisTicks,
+        bandSize,
+        entry,
+        index
+      });
+      var _y = (0, _DataUtils.isNullish)(value) ? null : yAxis.scale(value);
+      return {
+        x: _x,
+        y: _y,
+        value,
+        payload: entry
+      };
+    }
+    var x = (0, _DataUtils.isNullish)(value) ? null : xAxis.scale(value);
+    var y = (0, _ChartUtils.getCateCoordinateOfLine)({
+      axis: yAxis,
+      ticks: yAxisTicks,
+      bandSize,
+      entry,
+      index
+    });
+    if (x == null || y == null) {
+      return null;
+    }
+    return {
+      x,
+      y,
+      value,
+      payload: entry
+    };
+  }).filter(Boolean);
+}
+function Line(outsideProps) {
+  var props = (0, _resolveDefaultProps2.resolveDefaultProps)(outsideProps, defaultLineProps);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  return /*#__PURE__*/React.createElement(_RegisterGraphicalItemId.RegisterGraphicalItemId, {
+    id: props.id,
+    type: "line"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetLegendPayload.SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromAreaData(props)
+  }), /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: props
+  }), /*#__PURE__*/React.createElement(_SetGraphicalItem.SetCartesianGraphicalItem, {
+    type: "line",
+    id: id,
+    data: props.data,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: 0,
+    dataKey: props.dataKey,
+    hide: props.hide,
+    isPanorama: isPanorama
+  }), /*#__PURE__*/React.createElement(LineImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+Line.displayName = 'Line';
Index: node_modules/recharts/lib/cartesian/ReferenceArea.js
===================================================================
--- node_modules/recharts/lib/cartesian/ReferenceArea.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/ReferenceArea.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,152 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ReferenceArea = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Layer = require("../container/Layer");
+var _Label = require("../component/Label");
+var _CartesianUtils = require("../util/CartesianUtils");
+var _DataUtils = require("../util/DataUtils");
+var _Rectangle = require("../shape/Rectangle");
+var _ReactUtils = require("../util/ReactUtils");
+var _referenceElementsSlice = require("../state/referenceElementsSlice");
+var _hooks = require("../state/hooks");
+var _axisSelectors = require("../state/selectors/axisSelectors");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _ClipPathProvider = require("../container/ClipPathProvider");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+var getRect = (hasX1, hasX2, hasY1, hasY2, xAxisScale, yAxisScale, props) => {
+  var {
+    x1: xValue1,
+    x2: xValue2,
+    y1: yValue1,
+    y2: yValue2
+  } = props;
+  if (xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var scales = (0, _CartesianUtils.createLabeledScales)({
+    x: xAxisScale,
+    y: yAxisScale
+  });
+  var p1 = {
+    x: hasX1 ? scales.x.apply(xValue1, {
+      position: 'start'
+    }) : scales.x.rangeMin,
+    y: hasY1 ? scales.y.apply(yValue1, {
+      position: 'start'
+    }) : scales.y.rangeMin
+  };
+  var p2 = {
+    x: hasX2 ? scales.x.apply(xValue2, {
+      position: 'end'
+    }) : scales.x.rangeMax,
+    y: hasY2 ? scales.y.apply(yValue2, {
+      position: 'end'
+    }) : scales.y.rangeMax
+  };
+  if (props.ifOverflow === 'discard' && (!scales.isInRange(p1) || !scales.isInRange(p2))) {
+    return null;
+  }
+  return (0, _CartesianUtils.rectWithPoints)(p1, p2);
+};
+var renderRect = (option, props) => {
+  var rect;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    rect = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    rect = option(props);
+  } else {
+    rect = /*#__PURE__*/React.createElement(_Rectangle.Rectangle, _extends({}, props, {
+      className: "recharts-reference-area-rect"
+    }));
+  }
+  return rect;
+};
+function ReportReferenceArea(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _referenceElementsSlice.addArea)(props));
+    return () => {
+      dispatch((0, _referenceElementsSlice.removeArea)(props));
+    };
+  });
+  return null;
+}
+function ReferenceAreaImpl(props) {
+  var {
+    x1,
+    x2,
+    y1,
+    y2,
+    className,
+    shape,
+    xAxisId,
+    yAxisId
+  } = props;
+  var clipPathId = (0, _ClipPathProvider.useClipPathId)();
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var xAxisScale = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisScale)(state, 'xAxis', xAxisId, isPanorama));
+  var yAxisScale = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisScale)(state, 'yAxis', yAxisId, isPanorama));
+  if (xAxisScale == null || !yAxisScale == null) {
+    return null;
+  }
+  var hasX1 = (0, _DataUtils.isNumOrStr)(x1);
+  var hasX2 = (0, _DataUtils.isNumOrStr)(x2);
+  var hasY1 = (0, _DataUtils.isNumOrStr)(y1);
+  var hasY2 = (0, _DataUtils.isNumOrStr)(y2);
+  if (!hasX1 && !hasX2 && !hasY1 && !hasY2 && !shape) {
+    return null;
+  }
+  var rect = getRect(hasX1, hasX2, hasY1, hasY2, xAxisScale, yAxisScale, props);
+  if (!rect && !shape) {
+    return null;
+  }
+  var isOverflowHidden = props.ifOverflow === 'hidden';
+  var clipPath = isOverflowHidden ? "url(#".concat(clipPathId, ")") : undefined;
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: (0, _clsx.clsx)('recharts-reference-area', className)
+  }, renderRect(shape, _objectSpread(_objectSpread({
+    clipPath
+  }, (0, _ReactUtils.filterProps)(props, true)), rect)), _Label.Label.renderCallByParent(props, rect));
+}
+function ReferenceAreaSettingsDispatcher(props) {
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportReferenceArea, {
+    yAxisId: props.yAxisId,
+    xAxisId: props.xAxisId,
+    ifOverflow: props.ifOverflow,
+    x1: props.x1,
+    x2: props.x2,
+    y1: props.y1,
+    y2: props.y2
+  }), /*#__PURE__*/React.createElement(ReferenceAreaImpl, props));
+}
+
+// eslint-disable-next-line react/prefer-stateless-function
+class ReferenceArea extends _react.Component {
+  render() {
+    return /*#__PURE__*/React.createElement(ReferenceAreaSettingsDispatcher, this.props);
+  }
+}
+exports.ReferenceArea = ReferenceArea;
+_defineProperty(ReferenceArea, "displayName", 'ReferenceArea');
+_defineProperty(ReferenceArea, "defaultProps", {
+  ifOverflow: 'discard',
+  xAxisId: 0,
+  yAxisId: 0,
+  r: 10,
+  fill: '#ccc',
+  fillOpacity: 0.5,
+  stroke: 'none',
+  strokeWidth: 1
+});
Index: node_modules/recharts/lib/cartesian/ReferenceDot.js
===================================================================
--- node_modules/recharts/lib/cartesian/ReferenceDot.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/ReferenceDot.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,149 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ReferenceDot = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Layer = require("../container/Layer");
+var _Dot = require("../shape/Dot");
+var _Label = require("../component/Label");
+var _DataUtils = require("../util/DataUtils");
+var _CartesianUtils = require("../util/CartesianUtils");
+var _ReactUtils = require("../util/ReactUtils");
+var _referenceElementsSlice = require("../state/referenceElementsSlice");
+var _hooks = require("../state/hooks");
+var _axisSelectors = require("../state/selectors/axisSelectors");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _ClipPathProvider = require("../container/ClipPathProvider");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+var useCoordinate = (x, y, xAxisId, yAxisId, ifOverflow) => {
+  var isX = (0, _DataUtils.isNumOrStr)(x);
+  var isY = (0, _DataUtils.isNumOrStr)(y);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var xAxisScale = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisScale)(state, 'xAxis', xAxisId, isPanorama));
+  var yAxisScale = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisScale)(state, 'yAxis', yAxisId, isPanorama));
+  if (!isX || !isY || xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var scales = (0, _CartesianUtils.createLabeledScales)({
+    x: xAxisScale,
+    y: yAxisScale
+  });
+  var result = scales.apply({
+    x,
+    y
+  }, {
+    bandAware: true
+  });
+  if (ifOverflow === 'discard' && !scales.isInRange(result)) {
+    return null;
+  }
+  return result;
+};
+function ReportReferenceDot(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _referenceElementsSlice.addDot)(props));
+    return () => {
+      dispatch((0, _referenceElementsSlice.removeDot)(props));
+    };
+  });
+  return null;
+}
+var renderDot = (option, props) => {
+  var dot;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    dot = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    dot = option(props);
+  } else {
+    dot = /*#__PURE__*/React.createElement(_Dot.Dot, _extends({}, props, {
+      cx: props.cx,
+      cy: props.cy,
+      className: "recharts-reference-dot-dot"
+    }));
+  }
+  return dot;
+};
+function ReferenceDotImpl(props) {
+  var {
+    x,
+    y,
+    r
+  } = props;
+  var clipPathId = (0, _ClipPathProvider.useClipPathId)();
+  var coordinate = useCoordinate(x, y, props.xAxisId, props.yAxisId, props.ifOverflow);
+  if (!coordinate) {
+    return null;
+  }
+  var {
+    x: cx,
+    y: cy
+  } = coordinate;
+  var {
+    shape,
+    className,
+    ifOverflow
+  } = props;
+  var clipPath = ifOverflow === 'hidden' ? "url(#".concat(clipPathId, ")") : undefined;
+  var dotProps = _objectSpread(_objectSpread({
+    clipPath
+  }, (0, _ReactUtils.filterProps)(props, true)), {}, {
+    cx,
+    cy
+  });
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: (0, _clsx.clsx)('recharts-reference-dot', className)
+  }, renderDot(shape, dotProps), _Label.Label.renderCallByParent(props, {
+    x: cx - r,
+    y: cy - r,
+    width: 2 * r,
+    height: 2 * r
+  }));
+}
+function ReferenceDotSettingsDispatcher(props) {
+  var {
+    x,
+    y,
+    r,
+    ifOverflow,
+    yAxisId,
+    xAxisId
+  } = props;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportReferenceDot, {
+    y: y,
+    x: x,
+    r: r,
+    yAxisId: yAxisId,
+    xAxisId: xAxisId,
+    ifOverflow: ifOverflow
+  }), /*#__PURE__*/React.createElement(ReferenceDotImpl, props));
+}
+
+// eslint-disable-next-line react/prefer-stateless-function
+class ReferenceDot extends _react.Component {
+  render() {
+    return /*#__PURE__*/React.createElement(ReferenceDotSettingsDispatcher, this.props);
+  }
+}
+exports.ReferenceDot = ReferenceDot;
+_defineProperty(ReferenceDot, "displayName", 'ReferenceDot');
+_defineProperty(ReferenceDot, "defaultProps", {
+  ifOverflow: 'discard',
+  xAxisId: 0,
+  yAxisId: 0,
+  r: 10,
+  fill: '#fff',
+  stroke: '#ccc',
+  fillOpacity: 1,
+  strokeWidth: 1
+});
Index: node_modules/recharts/lib/cartesian/ReferenceLine.js
===================================================================
--- node_modules/recharts/lib/cartesian/ReferenceLine.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/ReferenceLine.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,209 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getEndPoints = exports.ReferenceLine = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Layer = require("../container/Layer");
+var _Label = require("../component/Label");
+var _DataUtils = require("../util/DataUtils");
+var _CartesianUtils = require("../util/CartesianUtils");
+var _ReactUtils = require("../util/ReactUtils");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _referenceElementsSlice = require("../state/referenceElementsSlice");
+var _hooks = require("../state/hooks");
+var _axisSelectors = require("../state/selectors/axisSelectors");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _ClipPathProvider = require("../container/ClipPathProvider");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /**
+ * @fileOverview Reference Line
+ */
+/**
+ * This excludes `viewBox` prop from svg for two reasons:
+ * 1. The components wants viewBox of object type, and svg wants string
+ *    - so there's a conflict, and the component will throw if it gets string
+ * 2. Internally the component calls `filterProps` which filters the viewBox away anyway
+ */
+
+var renderLine = (option, props) => {
+  var line;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    line = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    line = option(props);
+  } else {
+    line = /*#__PURE__*/React.createElement("line", _extends({}, props, {
+      className: "recharts-reference-line-line"
+    }));
+  }
+  return line;
+};
+// TODO: ScaleHelper
+var getEndPoints = (scales, isFixedX, isFixedY, isSegment, viewBox, position, xAxisOrientation, yAxisOrientation, props) => {
+  var {
+    x,
+    y,
+    width,
+    height
+  } = viewBox;
+  if (isFixedY) {
+    var {
+      y: yCoord
+    } = props;
+    var coord = scales.y.apply(yCoord, {
+      position
+    });
+    // don't render the line if the scale can't compute a result that makes sense
+    if ((0, _DataUtils.isNan)(coord)) return null;
+    if (props.ifOverflow === 'discard' && !scales.y.isInRange(coord)) {
+      return null;
+    }
+    var points = [{
+      x: x + width,
+      y: coord
+    }, {
+      x,
+      y: coord
+    }];
+    return yAxisOrientation === 'left' ? points.reverse() : points;
+  }
+  if (isFixedX) {
+    var {
+      x: xCoord
+    } = props;
+    var _coord = scales.x.apply(xCoord, {
+      position
+    });
+    // don't render the line if the scale can't compute a result that makes sense
+    if ((0, _DataUtils.isNan)(_coord)) return null;
+    if (props.ifOverflow === 'discard' && !scales.x.isInRange(_coord)) {
+      return null;
+    }
+    var _points = [{
+      x: _coord,
+      y: y + height
+    }, {
+      x: _coord,
+      y
+    }];
+    return xAxisOrientation === 'top' ? _points.reverse() : _points;
+  }
+  if (isSegment) {
+    var {
+      segment
+    } = props;
+    var _points2 = segment.map(p => scales.apply(p, {
+      position
+    }));
+    if (props.ifOverflow === 'discard' && _points2.some(p => !scales.isInRange(p))) {
+      return null;
+    }
+    return _points2;
+  }
+  return null;
+};
+exports.getEndPoints = getEndPoints;
+function ReportReferenceLine(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _referenceElementsSlice.addLine)(props));
+    return () => {
+      dispatch((0, _referenceElementsSlice.removeLine)(props));
+    };
+  });
+  return null;
+}
+function ReferenceLineImpl(props) {
+  var {
+    x: fixedX,
+    y: fixedY,
+    segment,
+    xAxisId,
+    yAxisId,
+    shape,
+    className,
+    ifOverflow
+  } = props;
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var clipPathId = (0, _ClipPathProvider.useClipPathId)();
+  var xAxis = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectXAxisSettings)(state, xAxisId));
+  var yAxis = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectYAxisSettings)(state, yAxisId));
+  var xAxisScale = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisScale)(state, 'xAxis', xAxisId, isPanorama));
+  var yAxisScale = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisScale)(state, 'yAxis', yAxisId, isPanorama));
+  var viewBox = (0, _chartLayoutContext.useViewBox)();
+  var isFixedX = (0, _DataUtils.isNumOrStr)(fixedX);
+  var isFixedY = (0, _DataUtils.isNumOrStr)(fixedY);
+  if (!clipPathId || !viewBox || xAxis == null || yAxis == null || xAxisScale == null || yAxisScale == null) {
+    return null;
+  }
+  var scales = (0, _CartesianUtils.createLabeledScales)({
+    x: xAxisScale,
+    y: yAxisScale
+  });
+  var isSegment = segment && segment.length === 2;
+  var endPoints = getEndPoints(scales, isFixedX, isFixedY, isSegment, viewBox, props.position, xAxis.orientation, yAxis.orientation, props);
+  if (!endPoints) {
+    return null;
+  }
+  var [{
+    x: x1,
+    y: y1
+  }, {
+    x: x2,
+    y: y2
+  }] = endPoints;
+  var clipPath = ifOverflow === 'hidden' ? "url(#".concat(clipPathId, ")") : undefined;
+  var lineProps = _objectSpread(_objectSpread({
+    clipPath
+  }, (0, _ReactUtils.filterProps)(props, true)), {}, {
+    x1,
+    y1,
+    x2,
+    y2
+  });
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: (0, _clsx.clsx)('recharts-reference-line', className)
+  }, renderLine(shape, lineProps), _Label.Label.renderCallByParent(props, (0, _CartesianUtils.rectWithCoords)({
+    x1,
+    y1,
+    x2,
+    y2
+  })));
+}
+function ReferenceLineSettingsDispatcher(props) {
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ReportReferenceLine, {
+    yAxisId: props.yAxisId,
+    xAxisId: props.xAxisId,
+    ifOverflow: props.ifOverflow,
+    x: props.x,
+    y: props.y
+  }), /*#__PURE__*/React.createElement(ReferenceLineImpl, props));
+}
+
+// eslint-disable-next-line react/prefer-stateless-function
+class ReferenceLine extends _react.Component {
+  render() {
+    return /*#__PURE__*/React.createElement(ReferenceLineSettingsDispatcher, this.props);
+  }
+}
+exports.ReferenceLine = ReferenceLine;
+_defineProperty(ReferenceLine, "displayName", 'ReferenceLine');
+_defineProperty(ReferenceLine, "defaultProps", {
+  ifOverflow: 'discard',
+  xAxisId: 0,
+  yAxisId: 0,
+  fill: 'none',
+  stroke: '#ccc',
+  fillOpacity: 1,
+  strokeWidth: 1,
+  position: 'middle'
+});
Index: node_modules/recharts/lib/cartesian/Scatter.js
===================================================================
--- node_modules/recharts/lib/cartesian/Scatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/Scatter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,541 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Scatter = Scatter;
+exports.computeScatterPoints = computeScatterPoints;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Layer = require("../container/Layer");
+var _LabelList = require("../component/LabelList");
+var _ReactUtils = require("../util/ReactUtils");
+var _Global = require("../util/Global");
+var _ZAxis = require("./ZAxis");
+var _Curve = require("../shape/Curve");
+var _Cell = require("../component/Cell");
+var _DataUtils = require("../util/DataUtils");
+var _ChartUtils = require("../util/ChartUtils");
+var _types = require("../util/types");
+var _ScatterUtils = require("../util/ScatterUtils");
+var _tooltipContext = require("../context/tooltipContext");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _ErrorBarContext = require("../context/ErrorBarContext");
+var _GraphicalItemClipPath = require("./GraphicalItemClipPath");
+var _scatterSelectors = require("../state/selectors/scatterSelectors");
+var _hooks = require("../state/hooks");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _tooltipSelectors = require("../state/selectors/tooltipSelectors");
+var _SetLegendPayload = require("../state/SetLegendPayload");
+var _Constants = require("../util/Constants");
+var _useAnimationId = require("../util/useAnimationId");
+var _resolveDefaultProps2 = require("../util/resolveDefaultProps");
+var _RegisterGraphicalItemId = require("../context/RegisterGraphicalItemId");
+var _SetGraphicalItem = require("../state/SetGraphicalItem");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _JavascriptAnimate = require("../animation/JavascriptAnimate");
+var _excluded = ["onMouseEnter", "onClick", "onMouseLeave"],
+  _excluded2 = ["id"],
+  _excluded3 = ["animationBegin", "animationDuration", "animationEasing", "hide", "isAnimationActive", "legendType", "lineJointType", "lineType", "shape", "xAxisId", "yAxisId", "zAxisId"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+/**
+ * External props, intended for end users to fill in
+ */
+
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+
+var computeLegendPayloadFromScatterProps = props => {
+  var {
+    dataKey,
+    name,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: fill,
+    value: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+    payload: props
+  }];
+};
+function ScatterLine(_ref) {
+  var {
+    points,
+    props
+  } = _ref;
+  var {
+    line,
+    lineType,
+    lineJointType
+  } = props;
+  if (!line) {
+    return null;
+  }
+  var scatterProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props);
+  var customLineProps = (0, _ReactUtils.filterProps)(line, false);
+  var linePoints, lineItem;
+  if (lineType === 'joint') {
+    linePoints = points.map(entry => ({
+      x: entry.cx,
+      y: entry.cy
+    }));
+  } else if (lineType === 'fitting') {
+    var {
+      xmin,
+      xmax,
+      a,
+      b
+    } = (0, _DataUtils.getLinearRegression)(points);
+    var linearExp = x => a * x + b;
+    linePoints = [{
+      x: xmin,
+      y: linearExp(xmin)
+    }, {
+      x: xmax,
+      y: linearExp(xmax)
+    }];
+  }
+  var lineProps = _objectSpread(_objectSpread(_objectSpread({}, scatterProps), {}, {
+    fill: 'none',
+    stroke: scatterProps && scatterProps.fill
+  }, customLineProps), {}, {
+    points: linePoints
+  });
+  if (/*#__PURE__*/React.isValidElement(line)) {
+    lineItem = /*#__PURE__*/React.cloneElement(line, lineProps);
+  } else if (typeof line === 'function') {
+    lineItem = line(lineProps);
+  } else {
+    lineItem = /*#__PURE__*/React.createElement(_Curve.Curve, _extends({}, lineProps, {
+      type: lineJointType
+    }));
+  }
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-scatter-line",
+    key: "recharts-scatter-line"
+  }, lineItem);
+}
+function ScatterSymbols(props) {
+  var {
+    points,
+    showLabels,
+    allOtherScatterProps
+  } = props;
+  var {
+    shape,
+    activeShape,
+    dataKey
+  } = allOtherScatterProps;
+  var activeIndex = (0, _hooks.useAppSelector)(_tooltipSelectors.selectActiveTooltipIndex);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = allOtherScatterProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherScatterProps, _excluded);
+  var onMouseEnterFromContext = (0, _tooltipContext.useMouseEnterItemDispatch)(onMouseEnterFromProps, allOtherScatterProps.dataKey);
+  var onMouseLeaveFromContext = (0, _tooltipContext.useMouseLeaveItemDispatch)(onMouseLeaveFromProps);
+  var onClickFromContext = (0, _tooltipContext.useMouseClickItemDispatch)(onItemClickFromProps, allOtherScatterProps.dataKey);
+  if (points == null) {
+    return null;
+  }
+  var {
+      id
+    } = allOtherScatterProps,
+    allOtherPropsWithoutId = _objectWithoutProperties(allOtherScatterProps, _excluded2);
+  var baseProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(allOtherPropsWithoutId);
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ScatterLine, {
+    points: points,
+    props: allOtherPropsWithoutId
+  }), points.map((entry, i) => {
+    var isActive = activeShape && activeIndex === String(i);
+    var option = isActive ? activeShape : shape;
+    var symbolProps = _objectSpread(_objectSpread(_objectSpread({
+      key: "symbol-".concat(i)
+    }, baseProps), entry), {}, {
+      [_Constants.DATA_ITEM_INDEX_ATTRIBUTE_NAME]: i,
+      [_Constants.DATA_ITEM_DATAKEY_ATTRIBUTE_NAME]: String(dataKey)
+    });
+    return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+      className: "recharts-scatter-symbol"
+    }, (0, _types.adaptEventsOfChild)(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error the types need a bit of attention
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onClick: onClickFromContext(entry, i)
+      // eslint-disable-next-line react/no-array-index-key
+      ,
+      key: "symbol-".concat(entry === null || entry === void 0 ? void 0 : entry.cx, "-").concat(entry === null || entry === void 0 ? void 0 : entry.cy, "-").concat(entry === null || entry === void 0 ? void 0 : entry.size, "-").concat(i)
+    }), /*#__PURE__*/React.createElement(_ScatterUtils.ScatterSymbol, _extends({
+      option: option,
+      isActive: isActive
+    }, symbolProps)));
+  }), showLabels && _LabelList.LabelList.renderCallByParent(allOtherPropsWithoutId, points));
+}
+function SymbolsWithAnimation(_ref2) {
+  var {
+    previousPointsRef,
+    props
+  } = _ref2;
+  var {
+    points,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing
+  } = props;
+  var prevPoints = previousPointsRef.current;
+  var animationId = (0, _useAnimationId.useAnimationId)(props, 'recharts-scatter-');
+  var [isAnimating, setIsAnimating] = (0, _react.useState)(false);
+  var handleAnimationEnd = (0, _react.useCallback)(() => {
+    // Scatter doesn't have onAnimationEnd prop, and if we want to add it we do it here
+    // if (typeof onAnimationEnd === 'function') {
+    //   onAnimationEnd();
+    // }
+    setIsAnimating(false);
+  }, []);
+  var handleAnimationStart = (0, _react.useCallback)(() => {
+    // Scatter doesn't have onAnimationStart prop, and if we want to add it we do it here
+    // if (typeof onAnimationStart === 'function') {
+    //   onAnimationStart();
+    // }
+    setIsAnimating(true);
+  }, []);
+  return /*#__PURE__*/React.createElement(_JavascriptAnimate.JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart,
+    key: animationId
+  }, t => {
+    var stepData = t === 1 ? points : points.map((entry, index) => {
+      var prev = prevPoints && prevPoints[index];
+      if (prev) {
+        var interpolatorCx = (0, _DataUtils.interpolateNumber)(prev.cx, entry.cx);
+        var interpolatorCy = (0, _DataUtils.interpolateNumber)(prev.cy, entry.cy);
+        var interpolatorSize = (0, _DataUtils.interpolateNumber)(prev.size, entry.size);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          cx: interpolatorCx(t),
+          cy: interpolatorCy(t),
+          size: interpolatorSize(t)
+        });
+      }
+      var interpolator = (0, _DataUtils.interpolateNumber)(0, entry.size);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        size: interpolator(t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = stepData;
+    }
+    return /*#__PURE__*/React.createElement(_Layer.Layer, null, /*#__PURE__*/React.createElement(ScatterSymbols, {
+      points: stepData,
+      allOtherScatterProps: props,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderSymbols(props) {
+  var {
+    points,
+    isAnimationActive
+  } = props;
+  var previousPointsRef = (0, _react.useRef)(null);
+  var prevPoints = previousPointsRef.current;
+  if (isAnimationActive && points && points.length && (!prevPoints || prevPoints !== points)) {
+    return /*#__PURE__*/React.createElement(SymbolsWithAnimation, {
+      props: props,
+      previousPointsRef: previousPointsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(ScatterSymbols, {
+    points: points,
+    allOtherScatterProps: props,
+    showLabels: true
+  });
+}
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    points,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType
+  } = props;
+  return {
+    dataDefinedOnItem: points === null || points === void 0 ? void 0 : points.map(p => p.tooltipPayload),
+    positions: points === null || points === void 0 ? void 0 : points.map(p => p.tooltipPosition),
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      nameKey: undefined,
+      dataKey,
+      name: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '' // why doesn't Scatter support unit?
+    }
+  };
+}
+function computeScatterPoints(_ref3) {
+  var {
+    displayedData,
+    xAxis,
+    yAxis,
+    zAxis,
+    scatterSettings,
+    xAxisTicks,
+    yAxisTicks,
+    cells
+  } = _ref3;
+  var xAxisDataKey = (0, _DataUtils.isNullish)(xAxis.dataKey) ? scatterSettings.dataKey : xAxis.dataKey;
+  var yAxisDataKey = (0, _DataUtils.isNullish)(yAxis.dataKey) ? scatterSettings.dataKey : yAxis.dataKey;
+  var zAxisDataKey = zAxis && zAxis.dataKey;
+  var defaultRangeZ = zAxis ? zAxis.range : _ZAxis.ZAxis.defaultProps.range;
+  var defaultZ = defaultRangeZ && defaultRangeZ[0];
+  var xBandSize = xAxis.scale.bandwidth ? xAxis.scale.bandwidth() : 0;
+  var yBandSize = yAxis.scale.bandwidth ? yAxis.scale.bandwidth() : 0;
+  return displayedData.map((entry, index) => {
+    var x = (0, _ChartUtils.getValueByDataKey)(entry, xAxisDataKey);
+    var y = (0, _ChartUtils.getValueByDataKey)(entry, yAxisDataKey);
+    var z = !(0, _DataUtils.isNullish)(zAxisDataKey) && (0, _ChartUtils.getValueByDataKey)(entry, zAxisDataKey) || '-';
+    var tooltipPayload = [{
+      // @ts-expect-error name prop should not have dataKey in it
+      name: (0, _DataUtils.isNullish)(xAxis.dataKey) ? scatterSettings.name : xAxis.name || xAxis.dataKey,
+      unit: xAxis.unit || '',
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      value: x,
+      payload: entry,
+      dataKey: xAxisDataKey,
+      type: scatterSettings.tooltipType
+    }, {
+      // @ts-expect-error name prop should not have dataKey in it
+      name: (0, _DataUtils.isNullish)(yAxis.dataKey) ? scatterSettings.name : yAxis.name || yAxis.dataKey,
+      unit: yAxis.unit || '',
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      value: y,
+      payload: entry,
+      dataKey: yAxisDataKey,
+      type: scatterSettings.tooltipType
+    }];
+    if (z !== '-') {
+      tooltipPayload.push({
+        // @ts-expect-error name prop should not have dataKey in it
+        name: zAxis.name || zAxis.dataKey,
+        unit: zAxis.unit || '',
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        value: z,
+        payload: entry,
+        dataKey: zAxisDataKey,
+        type: scatterSettings.tooltipType
+      });
+    }
+    var cx = (0, _ChartUtils.getCateCoordinateOfLine)({
+      axis: xAxis,
+      ticks: xAxisTicks,
+      bandSize: xBandSize,
+      entry,
+      index,
+      dataKey: xAxisDataKey
+    });
+    var cy = (0, _ChartUtils.getCateCoordinateOfLine)({
+      axis: yAxis,
+      ticks: yAxisTicks,
+      bandSize: yBandSize,
+      entry,
+      index,
+      dataKey: yAxisDataKey
+    });
+    var size = z !== '-' ? zAxis.scale(z) : defaultZ;
+    var radius = Math.sqrt(Math.max(size, 0) / Math.PI);
+    return _objectSpread(_objectSpread({}, entry), {}, {
+      cx,
+      cy,
+      x: cx - radius,
+      y: cy - radius,
+      width: 2 * radius,
+      height: 2 * radius,
+      size,
+      node: {
+        x,
+        y,
+        z
+      },
+      tooltipPayload,
+      tooltipPosition: {
+        x: cx,
+        y: cy
+      },
+      payload: entry
+    }, cells && cells[index] && cells[index].props);
+  });
+}
+var errorBarDataPointFormatter = (dataPoint, dataKey, direction) => {
+  return {
+    x: dataPoint.cx,
+    y: dataPoint.cy,
+    value: direction === 'x' ? +dataPoint.node.x : +dataPoint.node.y,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    errorVal: (0, _ChartUtils.getValueByDataKey)(dataPoint, dataKey)
+  };
+};
+function ScatterWithId(props) {
+  var {
+    hide,
+    points,
+    className,
+    needClip,
+    xAxisId,
+    yAxisId,
+    id,
+    children
+  } = props;
+  if (hide) {
+    return null;
+  }
+  var layerClass = (0, _clsx.clsx)('recharts-scatter', className);
+  var clipPathId = id;
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: layerClass,
+    clipPath: needClip ? "url(#clipPath-".concat(clipPathId, ")") : null,
+    id: id
+  }, needClip && /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement(_GraphicalItemClipPath.GraphicalItemClipPath, {
+    clipPathId: clipPathId,
+    xAxisId: xAxisId,
+    yAxisId: yAxisId
+  })), /*#__PURE__*/React.createElement(_ErrorBarContext.SetErrorBarContext, {
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    data: points,
+    dataPointFormatter: errorBarDataPointFormatter,
+    errorBarOffset: 0
+  }, children), /*#__PURE__*/React.createElement(_Layer.Layer, {
+    key: "recharts-scatter-symbols"
+  }, /*#__PURE__*/React.createElement(RenderSymbols, props)));
+}
+var defaultScatterProps = {
+  xAxisId: 0,
+  yAxisId: 0,
+  zAxisId: 0,
+  legendType: 'circle',
+  lineType: 'joint',
+  lineJointType: 'linear',
+  data: [],
+  shape: 'circle',
+  hide: false,
+  isAnimationActive: !_Global.Global.isSsr,
+  animationBegin: 0,
+  animationDuration: 400,
+  animationEasing: 'linear'
+};
+function ScatterImpl(props) {
+  var _resolveDefaultProps = (0, _resolveDefaultProps2.resolveDefaultProps)(props, defaultScatterProps),
+    {
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      hide,
+      isAnimationActive,
+      legendType,
+      lineJointType,
+      lineType,
+      shape,
+      xAxisId,
+      yAxisId,
+      zAxisId
+    } = _resolveDefaultProps,
+    everythingElse = _objectWithoutProperties(_resolveDefaultProps, _excluded3);
+  var {
+    needClip
+  } = (0, _GraphicalItemClipPath.useNeedsClip)(xAxisId, yAxisId);
+  var cells = (0, _react.useMemo)(() => (0, _ReactUtils.findAllByType)(props.children, _Cell.Cell), [props.children]);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var points = (0, _hooks.useAppSelector)(state => {
+    return (0, _scatterSelectors.selectScatterPoints)(state, xAxisId, yAxisId, zAxisId, props.id, cells, isPanorama);
+  });
+  if (needClip == null) {
+    return null;
+  }
+  /*
+   * Do not check if points is null here!
+   * It is important that the animation component receives `null` as points
+   * so that it can reset its internal state and start animating to new positions.
+   */
+  // if (points == null)
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: _objectSpread(_objectSpread({}, props), {}, {
+      points
+    })
+  }), /*#__PURE__*/React.createElement(ScatterWithId, _extends({}, everythingElse, {
+    xAxisId: xAxisId,
+    yAxisId: yAxisId,
+    zAxisId: zAxisId,
+    lineType: lineType,
+    lineJointType: lineJointType,
+    legendType: legendType,
+    shape: shape,
+    hide: hide,
+    isAnimationActive: isAnimationActive,
+    animationBegin: animationBegin,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    points: points,
+    needClip: needClip
+  })));
+}
+function Scatter(outsideProps) {
+  var props = (0, _resolveDefaultProps2.resolveDefaultProps)(outsideProps, defaultScatterProps);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  return /*#__PURE__*/React.createElement(_RegisterGraphicalItemId.RegisterGraphicalItemId, {
+    id: props.id,
+    type: "scatter"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetLegendPayload.SetLegendPayload, {
+    legendPayload: computeLegendPayloadFromScatterProps(props)
+  }), /*#__PURE__*/React.createElement(_SetGraphicalItem.SetCartesianGraphicalItem, {
+    type: "scatter",
+    id: id,
+    data: props.data,
+    xAxisId: props.xAxisId,
+    yAxisId: props.yAxisId,
+    zAxisId: props.zAxisId,
+    dataKey: props.dataKey,
+    hide: props.hide,
+    name: props.name,
+    tooltipType: props.tooltipType,
+    isPanorama: isPanorama
+  }), /*#__PURE__*/React.createElement(ScatterImpl, _extends({}, props, {
+    id: id
+  }))));
+}
+Scatter.displayName = 'Scatter';
Index: node_modules/recharts/lib/cartesian/XAxis.js
===================================================================
--- node_modules/recharts/lib/cartesian/XAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/XAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,133 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.XAxis = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _CartesianAxis = require("./CartesianAxis");
+var _hooks = require("../state/hooks");
+var _cartesianAxisSlice = require("../state/cartesianAxisSlice");
+var _axisSelectors = require("../state/selectors/axisSelectors");
+var _selectChartOffsetInternal = require("../state/selectors/selectChartOffsetInternal");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _excluded = ["children"],
+  _excluded2 = ["dangerouslySetInnerHTML", "ticks"];
+/**
+ * @fileOverview X Axis
+ */
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function SetXAxisSettings(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var settings = (0, _react.useMemo)(() => {
+    var {
+        children
+      } = props,
+      rest = _objectWithoutProperties(props, _excluded);
+    return rest;
+  }, [props]);
+  var synchronizedSettings = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectXAxisSettings)(state, settings.id));
+  var settingsAreSynchronized = settings === synchronizedSettings;
+  (0, _react.useEffect)(() => {
+    dispatch((0, _cartesianAxisSlice.addXAxis)(settings));
+    return () => {
+      dispatch((0, _cartesianAxisSlice.removeXAxis)(settings));
+    };
+  }, [settings, dispatch]);
+  if (settingsAreSynchronized) {
+    return props.children;
+  }
+  return null;
+}
+var XAxisImpl = props => {
+  var {
+    xAxisId,
+    className
+  } = props;
+  var viewBox = (0, _hooks.useAppSelector)(_selectChartOffsetInternal.selectAxisViewBox);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var axisType = 'xAxis';
+  var scale = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisScale)(state, axisType, xAxisId, isPanorama));
+  var cartesianTickItems = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectTicksOfAxis)(state, axisType, xAxisId, isPanorama));
+  var axisSize = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectXAxisSize)(state, xAxisId));
+  var position = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectXAxisPosition)(state, xAxisId));
+  if (axisSize == null || position == null) {
+    return null;
+  }
+  var {
+      dangerouslySetInnerHTML,
+      ticks
+    } = props,
+    allOtherProps = _objectWithoutProperties(props, _excluded2);
+  return /*#__PURE__*/React.createElement(_CartesianAxis.CartesianAxis, _extends({}, allOtherProps, {
+    scale: scale,
+    x: position.x,
+    y: position.y,
+    width: axisSize.width,
+    height: axisSize.height,
+    className: (0, _clsx.clsx)("recharts-".concat(axisType, " ").concat(axisType), className),
+    viewBox: viewBox,
+    ticks: cartesianTickItems
+  }));
+};
+var XAxisSettingsDispatcher = props => {
+  var _props$interval, _props$includeHidden, _props$angle, _props$minTickGap, _props$tick;
+  return /*#__PURE__*/React.createElement(SetXAxisSettings, {
+    interval: (_props$interval = props.interval) !== null && _props$interval !== void 0 ? _props$interval : 'preserveEnd',
+    id: props.xAxisId,
+    scale: props.scale,
+    type: props.type,
+    padding: props.padding,
+    allowDataOverflow: props.allowDataOverflow,
+    domain: props.domain,
+    dataKey: props.dataKey,
+    allowDuplicatedCategory: props.allowDuplicatedCategory,
+    allowDecimals: props.allowDecimals,
+    tickCount: props.tickCount,
+    includeHidden: (_props$includeHidden = props.includeHidden) !== null && _props$includeHidden !== void 0 ? _props$includeHidden : false,
+    reversed: props.reversed,
+    ticks: props.ticks,
+    height: props.height,
+    orientation: props.orientation,
+    mirror: props.mirror,
+    hide: props.hide,
+    unit: props.unit,
+    name: props.name,
+    angle: (_props$angle = props.angle) !== null && _props$angle !== void 0 ? _props$angle : 0,
+    minTickGap: (_props$minTickGap = props.minTickGap) !== null && _props$minTickGap !== void 0 ? _props$minTickGap : 5,
+    tick: (_props$tick = props.tick) !== null && _props$tick !== void 0 ? _props$tick : true,
+    tickFormatter: props.tickFormatter
+  }, /*#__PURE__*/React.createElement(XAxisImpl, props));
+};
+
+// eslint-disable-next-line react/prefer-stateless-function
+class XAxis extends _react.Component {
+  render() {
+    return /*#__PURE__*/React.createElement(XAxisSettingsDispatcher, this.props);
+  }
+}
+exports.XAxis = XAxis;
+_defineProperty(XAxis, "displayName", 'XAxis');
+_defineProperty(XAxis, "defaultProps", {
+  allowDataOverflow: _axisSelectors.implicitXAxis.allowDataOverflow,
+  allowDecimals: _axisSelectors.implicitXAxis.allowDecimals,
+  allowDuplicatedCategory: _axisSelectors.implicitXAxis.allowDuplicatedCategory,
+  height: _axisSelectors.implicitXAxis.height,
+  hide: false,
+  mirror: _axisSelectors.implicitXAxis.mirror,
+  orientation: _axisSelectors.implicitXAxis.orientation,
+  padding: _axisSelectors.implicitXAxis.padding,
+  reversed: _axisSelectors.implicitXAxis.reversed,
+  scale: _axisSelectors.implicitXAxis.scale,
+  tickCount: _axisSelectors.implicitXAxis.tickCount,
+  type: _axisSelectors.implicitXAxis.type,
+  xAxisId: 0
+});
Index: node_modules/recharts/lib/cartesian/YAxis.js
===================================================================
--- node_modules/recharts/lib/cartesian/YAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/YAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,156 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.YAxisDefaultProps = exports.YAxis = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _CartesianAxis = require("./CartesianAxis");
+var _cartesianAxisSlice = require("../state/cartesianAxisSlice");
+var _hooks = require("../state/hooks");
+var _axisSelectors = require("../state/selectors/axisSelectors");
+var _selectChartOffsetInternal = require("../state/selectors/selectChartOffsetInternal");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _YAxisUtils = require("../util/YAxisUtils");
+var _Label = require("../component/Label");
+var _excluded = ["dangerouslySetInnerHTML", "ticks"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function SetYAxisSettings(settings) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _cartesianAxisSlice.addYAxis)(settings));
+    return () => {
+      dispatch((0, _cartesianAxisSlice.removeYAxis)(settings));
+    };
+  }, [settings, dispatch]);
+  return null;
+}
+var YAxisImpl = props => {
+  var _cartesianAxisRef$cur;
+  var {
+    yAxisId,
+    className,
+    width,
+    label
+  } = props;
+  var cartesianAxisRef = (0, _react.useRef)(null);
+  var labelRef = (0, _react.useRef)(null);
+  var viewBox = (0, _hooks.useAppSelector)(_selectChartOffsetInternal.selectAxisViewBox);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var axisType = 'yAxis';
+  var scale = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisScale)(state, axisType, yAxisId, isPanorama));
+  var axisSize = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectYAxisSize)(state, yAxisId));
+  var position = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectYAxisPosition)(state, yAxisId));
+  var cartesianTickItems = (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectTicksOfAxis)(state, axisType, yAxisId, isPanorama));
+  (0, _react.useLayoutEffect)(() => {
+    var _axisComponent$tickRe;
+    // No dynamic width calculation is done when width !== 'auto'
+    // or when a function/react element is used for label
+    if (width !== 'auto' || !axisSize || (0, _Label.isLabelContentAFunction)(label) || /*#__PURE__*/(0, _react.isValidElement)(label)) return;
+    var axisComponent = cartesianAxisRef.current;
+    var tickNodes = axisComponent === null || axisComponent === void 0 || (_axisComponent$tickRe = axisComponent.tickRefs) === null || _axisComponent$tickRe === void 0 ? void 0 : _axisComponent$tickRe.current;
+    var {
+      tickSize,
+      tickMargin
+    } = axisComponent.props;
+
+    // get calculated width based on the label width, ticks etc
+    var updatedYAxisWidth = (0, _YAxisUtils.getCalculatedYAxisWidth)({
+      ticks: tickNodes,
+      label: labelRef.current,
+      labelGapWithTick: 5,
+      tickSize,
+      tickMargin
+    });
+
+    // if the width has changed, dispatch an action to update the width
+    if (Math.round(axisSize.width) !== Math.round(updatedYAxisWidth)) dispatch((0, _cartesianAxisSlice.updateYAxisWidth)({
+      id: yAxisId,
+      width: updatedYAxisWidth
+    }));
+  }, [cartesianAxisRef, cartesianAxisRef === null || cartesianAxisRef === void 0 || (_cartesianAxisRef$cur = cartesianAxisRef.current) === null || _cartesianAxisRef$cur === void 0 || (_cartesianAxisRef$cur = _cartesianAxisRef$cur.tickRefs) === null || _cartesianAxisRef$cur === void 0 ? void 0 : _cartesianAxisRef$cur.current, // required to do re-calculation when using brush
+  axisSize === null || axisSize === void 0 ? void 0 : axisSize.width, axisSize, dispatch, label, yAxisId, width]);
+  if (axisSize == null || position == null) {
+    return null;
+  }
+  var {
+      dangerouslySetInnerHTML,
+      ticks
+    } = props,
+    allOtherProps = _objectWithoutProperties(props, _excluded);
+  return /*#__PURE__*/React.createElement(_CartesianAxis.CartesianAxis, _extends({}, allOtherProps, {
+    ref: cartesianAxisRef,
+    labelRef: labelRef,
+    scale: scale,
+    x: position.x,
+    y: position.y,
+    width: axisSize.width,
+    height: axisSize.height,
+    className: (0, _clsx.clsx)("recharts-".concat(axisType, " ").concat(axisType), className),
+    viewBox: viewBox,
+    ticks: cartesianTickItems
+  }));
+};
+var YAxisSettingsDispatcher = props => {
+  var _props$interval, _props$includeHidden, _props$angle, _props$minTickGap, _props$tick;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetYAxisSettings, {
+    interval: (_props$interval = props.interval) !== null && _props$interval !== void 0 ? _props$interval : 'preserveEnd',
+    id: props.yAxisId,
+    scale: props.scale,
+    type: props.type,
+    domain: props.domain,
+    allowDataOverflow: props.allowDataOverflow,
+    dataKey: props.dataKey,
+    allowDuplicatedCategory: props.allowDuplicatedCategory,
+    allowDecimals: props.allowDecimals,
+    tickCount: props.tickCount,
+    padding: props.padding,
+    includeHidden: (_props$includeHidden = props.includeHidden) !== null && _props$includeHidden !== void 0 ? _props$includeHidden : false,
+    reversed: props.reversed,
+    ticks: props.ticks,
+    width: props.width,
+    orientation: props.orientation,
+    mirror: props.mirror,
+    hide: props.hide,
+    unit: props.unit,
+    name: props.name,
+    angle: (_props$angle = props.angle) !== null && _props$angle !== void 0 ? _props$angle : 0,
+    minTickGap: (_props$minTickGap = props.minTickGap) !== null && _props$minTickGap !== void 0 ? _props$minTickGap : 5,
+    tick: (_props$tick = props.tick) !== null && _props$tick !== void 0 ? _props$tick : true,
+    tickFormatter: props.tickFormatter
+  }), /*#__PURE__*/React.createElement(YAxisImpl, props));
+};
+var YAxisDefaultProps = exports.YAxisDefaultProps = {
+  allowDataOverflow: _axisSelectors.implicitYAxis.allowDataOverflow,
+  allowDecimals: _axisSelectors.implicitYAxis.allowDecimals,
+  allowDuplicatedCategory: _axisSelectors.implicitYAxis.allowDuplicatedCategory,
+  hide: false,
+  mirror: _axisSelectors.implicitYAxis.mirror,
+  orientation: _axisSelectors.implicitYAxis.orientation,
+  padding: _axisSelectors.implicitYAxis.padding,
+  reversed: _axisSelectors.implicitYAxis.reversed,
+  scale: _axisSelectors.implicitYAxis.scale,
+  tickCount: _axisSelectors.implicitYAxis.tickCount,
+  type: _axisSelectors.implicitYAxis.type,
+  width: _axisSelectors.implicitYAxis.width,
+  yAxisId: 0
+};
+
+// eslint-disable-next-line react/prefer-stateless-function
+class YAxis extends _react.Component {
+  render() {
+    return /*#__PURE__*/React.createElement(YAxisSettingsDispatcher, this.props);
+  }
+}
+exports.YAxis = YAxis;
+_defineProperty(YAxis, "displayName", 'YAxis');
+_defineProperty(YAxis, "defaultProps", YAxisDefaultProps);
Index: node_modules/recharts/lib/cartesian/ZAxis.js
===================================================================
--- node_modules/recharts/lib/cartesian/ZAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/ZAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ZAxis = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _cartesianAxisSlice = require("../state/cartesianAxisSlice");
+var _hooks = require("../state/hooks");
+var _axisSelectors = require("../state/selectors/axisSelectors");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function SetZAxisSettings(settings) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _cartesianAxisSlice.addZAxis)(settings));
+    return () => {
+      dispatch((0, _cartesianAxisSlice.removeZAxis)(settings));
+    };
+  }, [settings, dispatch]);
+  return null;
+}
+// eslint-disable-next-line react/prefer-stateless-function
+class ZAxis extends _react.Component {
+  render() {
+    return /*#__PURE__*/React.createElement(SetZAxisSettings, {
+      domain: this.props.domain,
+      id: this.props.zAxisId,
+      dataKey: this.props.dataKey,
+      name: this.props.name,
+      unit: this.props.unit,
+      range: this.props.range,
+      scale: this.props.scale,
+      type: this.props.type,
+      allowDuplicatedCategory: _axisSelectors.implicitZAxis.allowDuplicatedCategory,
+      allowDataOverflow: _axisSelectors.implicitZAxis.allowDataOverflow,
+      reversed: _axisSelectors.implicitZAxis.reversed,
+      includeHidden: _axisSelectors.implicitZAxis.includeHidden
+    });
+  }
+}
+exports.ZAxis = ZAxis;
+_defineProperty(ZAxis, "displayName", 'ZAxis');
+_defineProperty(ZAxis, "defaultProps", {
+  zAxisId: 0,
+  range: _axisSelectors.implicitZAxis.range,
+  scale: _axisSelectors.implicitZAxis.scale,
+  type: _axisSelectors.implicitZAxis.type
+});
Index: node_modules/recharts/lib/cartesian/getEquidistantTicks.js
===================================================================
--- node_modules/recharts/lib/cartesian/getEquidistantTicks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/getEquidistantTicks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getEquidistantTicks = getEquidistantTicks;
+var _TickUtils = require("../util/TickUtils");
+var _getEveryNthWithCondition = require("../util/getEveryNthWithCondition");
+function getEquidistantTicks(sign, boundaries, getTickSize, ticks, minTickGap) {
+  // If the ticks are readonly, then the slice might not be necessary
+  var result = (ticks || []).slice();
+  var {
+    start: initialStart,
+    end
+  } = boundaries;
+  var index = 0;
+  // Premature optimisation idea 1: Estimate a lower bound, and start from there.
+  // For now, start from every tick
+  var stepsize = 1;
+  var start = initialStart;
+  var _loop = function _loop() {
+      // Given stepsize, evaluate whether every stepsize-th tick can be shown.
+      // If it can not, then increase the stepsize by 1, and try again.
+
+      var entry = ticks === null || ticks === void 0 ? void 0 : ticks[index];
+
+      // Break condition - If we have evaluated all the ticks, then we are done.
+      if (entry === undefined) {
+        return {
+          v: (0, _getEveryNthWithCondition.getEveryNthWithCondition)(ticks, stepsize)
+        };
+      }
+
+      // Check if the element collides with the next element
+      var i = index;
+      var size;
+      var getSize = () => {
+        if (size === undefined) {
+          size = getTickSize(entry, i);
+        }
+        return size;
+      };
+      var tickCoord = entry.coordinate;
+      // We will always show the first tick.
+      var isShow = index === 0 || (0, _TickUtils.isVisible)(sign, tickCoord, getSize, start, end);
+      if (!isShow) {
+        // Start all over with a larger stepsize
+        index = 0;
+        start = initialStart;
+        stepsize += 1;
+      }
+      if (isShow) {
+        // If it can be shown, update the start
+        start = tickCoord + sign * (getSize() / 2 + minTickGap);
+        index += stepsize;
+      }
+    },
+    _ret;
+  while (stepsize <= result.length) {
+    _ret = _loop();
+    if (_ret) return _ret.v;
+  }
+  return [];
+}
Index: node_modules/recharts/lib/cartesian/getTicks.js
===================================================================
--- node_modules/recharts/lib/cartesian/getTicks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/cartesian/getTicks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,165 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getTicks = getTicks;
+var _DataUtils = require("../util/DataUtils");
+var _DOMUtils = require("../util/DOMUtils");
+var _Global = require("../util/Global");
+var _TickUtils = require("../util/TickUtils");
+var _getEquidistantTicks = require("./getEquidistantTicks");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function getTicksEnd(sign, boundaries, getTickSize, ticks, minTickGap) {
+  var result = (ticks || []).slice();
+  var len = result.length;
+  var {
+    start
+  } = boundaries;
+  var {
+    end
+  } = boundaries;
+  var _loop = function _loop(i) {
+    var entry = result[i];
+    var size;
+    var getSize = () => {
+      if (size === undefined) {
+        size = getTickSize(entry, i);
+      }
+      return size;
+    };
+    if (i === len - 1) {
+      var gap = sign * (entry.coordinate + sign * getSize() / 2 - end);
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: gap > 0 ? entry.coordinate - gap * sign : entry.coordinate
+      });
+    } else {
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: entry.coordinate
+      });
+    }
+    var isShow = (0, _TickUtils.isVisible)(sign, entry.tickCoord, getSize, start, end);
+    if (isShow) {
+      end = entry.tickCoord - sign * (getSize() / 2 + minTickGap);
+      result[i] = _objectSpread(_objectSpread({}, entry), {}, {
+        isShow: true
+      });
+    }
+  };
+  for (var i = len - 1; i >= 0; i--) {
+    _loop(i);
+  }
+  return result;
+}
+function getTicksStart(sign, boundaries, getTickSize, ticks, minTickGap, preserveEnd) {
+  // This method is mutating the array so clone is indeed necessary here
+  var result = (ticks || []).slice();
+  var len = result.length;
+  var {
+    start,
+    end
+  } = boundaries;
+  if (preserveEnd) {
+    // Try to guarantee the tail to be displayed
+    var tail = ticks[len - 1];
+    var tailSize = getTickSize(tail, len - 1);
+    var tailGap = sign * (tail.coordinate + sign * tailSize / 2 - end);
+    result[len - 1] = tail = _objectSpread(_objectSpread({}, tail), {}, {
+      tickCoord: tailGap > 0 ? tail.coordinate - tailGap * sign : tail.coordinate
+    });
+    var isTailShow = (0, _TickUtils.isVisible)(sign, tail.tickCoord, () => tailSize, start, end);
+    if (isTailShow) {
+      end = tail.tickCoord - sign * (tailSize / 2 + minTickGap);
+      result[len - 1] = _objectSpread(_objectSpread({}, tail), {}, {
+        isShow: true
+      });
+    }
+  }
+  var count = preserveEnd ? len - 1 : len;
+  var _loop2 = function _loop2(i) {
+    var entry = result[i];
+    var size;
+    var getSize = () => {
+      if (size === undefined) {
+        size = getTickSize(entry, i);
+      }
+      return size;
+    };
+    if (i === 0) {
+      var gap = sign * (entry.coordinate - sign * getSize() / 2 - start);
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: gap < 0 ? entry.coordinate - gap * sign : entry.coordinate
+      });
+    } else {
+      result[i] = entry = _objectSpread(_objectSpread({}, entry), {}, {
+        tickCoord: entry.coordinate
+      });
+    }
+    var isShow = (0, _TickUtils.isVisible)(sign, entry.tickCoord, getSize, start, end);
+    if (isShow) {
+      start = entry.tickCoord + sign * (getSize() / 2 + minTickGap);
+      result[i] = _objectSpread(_objectSpread({}, entry), {}, {
+        isShow: true
+      });
+    }
+  };
+  for (var i = 0; i < count; i++) {
+    _loop2(i);
+  }
+  return result;
+}
+function getTicks(props, fontSize, letterSpacing) {
+  var {
+    tick,
+    ticks,
+    viewBox,
+    minTickGap,
+    orientation,
+    interval,
+    tickFormatter,
+    unit,
+    angle
+  } = props;
+  if (!ticks || !ticks.length || !tick) {
+    return [];
+  }
+  if ((0, _DataUtils.isNumber)(interval) || _Global.Global.isSsr) {
+    var _getNumberIntervalTic;
+    return (_getNumberIntervalTic = (0, _TickUtils.getNumberIntervalTicks)(ticks, (0, _DataUtils.isNumber)(interval) ? interval : 0)) !== null && _getNumberIntervalTic !== void 0 ? _getNumberIntervalTic : [];
+  }
+  var candidates = [];
+  var sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height';
+  var unitSize = unit && sizeKey === 'width' ? (0, _DOMUtils.getStringSize)(unit, {
+    fontSize,
+    letterSpacing
+  }) : {
+    width: 0,
+    height: 0
+  };
+  var getTickSize = (content, index) => {
+    var value = typeof tickFormatter === 'function' ? tickFormatter(content.value, index) : content.value;
+    // Recharts only supports angles when sizeKey === 'width'
+    return sizeKey === 'width' ? (0, _TickUtils.getAngledTickWidth)((0, _DOMUtils.getStringSize)(value, {
+      fontSize,
+      letterSpacing
+    }), unitSize, angle) : (0, _DOMUtils.getStringSize)(value, {
+      fontSize,
+      letterSpacing
+    })[sizeKey];
+  };
+  var sign = ticks.length >= 2 ? (0, _DataUtils.mathSign)(ticks[1].coordinate - ticks[0].coordinate) : 1;
+  var boundaries = (0, _TickUtils.getTickBoundaries)(viewBox, sign, sizeKey);
+  if (interval === 'equidistantPreserveStart') {
+    return (0, _getEquidistantTicks.getEquidistantTicks)(sign, boundaries, getTickSize, ticks, minTickGap);
+  }
+  if (interval === 'preserveStart' || interval === 'preserveStartEnd') {
+    candidates = getTicksStart(sign, boundaries, getTickSize, ticks, minTickGap, interval === 'preserveStartEnd');
+  } else {
+    candidates = getTicksEnd(sign, boundaries, getTickSize, ticks, minTickGap);
+  }
+  return candidates.filter(entry => entry.isShow);
+}
Index: node_modules/recharts/lib/chart/AreaChart.js
===================================================================
--- node_modules/recharts/lib/chart/AreaChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/AreaChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.AreaChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _optionsSlice = require("../state/optionsSlice");
+var _CartesianChart = require("./CartesianChart");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var allowedTooltipTypes = ['axis'];
+var AreaChart = exports.AreaChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  return /*#__PURE__*/React.createElement(_CartesianChart.CartesianChart, {
+    chartName: "AreaChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: _optionsSlice.arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/lib/chart/BarChart.js
===================================================================
--- node_modules/recharts/lib/chart/BarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/BarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.BarChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _optionsSlice = require("../state/optionsSlice");
+var _CartesianChart = require("./CartesianChart");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var allowedTooltipTypes = ['axis', 'item'];
+var BarChart = exports.BarChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  return /*#__PURE__*/React.createElement(_CartesianChart.CartesianChart, {
+    chartName: "BarChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: _optionsSlice.arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/lib/chart/CartesianChart.js
===================================================================
--- node_modules/recharts/lib/chart/CartesianChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/CartesianChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,96 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CartesianChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _RechartsStoreProvider = require("../state/RechartsStoreProvider");
+var _chartDataContext = require("../context/chartDataContext");
+var _ReportMainChartProps = require("../state/ReportMainChartProps");
+var _ReportChartProps = require("../state/ReportChartProps");
+var _CategoricalChart = require("./CategoricalChart");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _isWellBehavedNumber = require("../util/isWellBehavedNumber");
+var _excluded = ["width", "height"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var defaultMargin = {
+  top: 5,
+  right: 5,
+  bottom: 5,
+  left: 5
+};
+var defaultProps = {
+  accessibilityLayer: true,
+  layout: 'horizontal',
+  stackOffset: 'none',
+  barCategoryGap: '10%',
+  barGap: 4,
+  margin: defaultMargin,
+  reverseStackOrder: false,
+  syncMethod: 'index'
+};
+
+/**
+ * These are one-time, immutable options that decide the chart's behavior.
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
+ * but usually we would expect that they use one of the convenience components like BarChart, LineChart, etc.
+ */
+
+var CartesianChart = exports.CartesianChart = /*#__PURE__*/(0, _react.forwardRef)(function CartesianChart(props, ref) {
+  var _categoricalChartProp;
+  var rootChartProps = (0, _resolveDefaultProps.resolveDefaultProps)(props.categoricalChartProps, defaultProps);
+  var {
+      width,
+      height
+    } = rootChartProps,
+    otherCategoricalProps = _objectWithoutProperties(rootChartProps, _excluded);
+  if (!(0, _isWellBehavedNumber.isPositiveNumber)(width) || !(0, _isWellBehavedNumber.isPositiveNumber)(height)) {
+    return null;
+  }
+  var {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher,
+    categoricalChartProps
+  } = props;
+  var options = {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher,
+    eventEmitter: undefined
+  };
+  return /*#__PURE__*/React.createElement(_RechartsStoreProvider.RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: (_categoricalChartProp = categoricalChartProps.id) !== null && _categoricalChartProp !== void 0 ? _categoricalChartProp : chartName
+  }, /*#__PURE__*/React.createElement(_chartDataContext.ChartDataContextProvider, {
+    chartData: categoricalChartProps.data
+  }), /*#__PURE__*/React.createElement(_ReportMainChartProps.ReportMainChartProps, {
+    width: width,
+    height: height,
+    layout: rootChartProps.layout,
+    margin: rootChartProps.margin
+  }), /*#__PURE__*/React.createElement(_ReportChartProps.ReportChartProps, {
+    accessibilityLayer: rootChartProps.accessibilityLayer,
+    barCategoryGap: rootChartProps.barCategoryGap,
+    maxBarSize: rootChartProps.maxBarSize,
+    stackOffset: rootChartProps.stackOffset,
+    barGap: rootChartProps.barGap,
+    barSize: rootChartProps.barSize,
+    syncId: rootChartProps.syncId,
+    syncMethod: rootChartProps.syncMethod,
+    className: rootChartProps.className
+  }), /*#__PURE__*/React.createElement(_CategoricalChart.CategoricalChart, _extends({}, otherCategoricalProps, {
+    width: width,
+    height: height,
+    ref: ref
+  })));
+});
Index: node_modules/recharts/lib/chart/CategoricalChart.js
===================================================================
--- node_modules/recharts/lib/chart/CategoricalChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/CategoricalChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CategoricalChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _RootSurface = require("../container/RootSurface");
+var _RechartsWrapper = require("./RechartsWrapper");
+var _ClipPathProvider = require("../container/ClipPathProvider");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _excluded = ["children", "className", "width", "height", "style", "compact", "title", "desc"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var CategoricalChart = exports.CategoricalChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  var {
+      children,
+      className,
+      width,
+      height,
+      style,
+      compact,
+      title,
+      desc
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var attrs = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(others);
+
+  // The "compact" mode is used as the panorama within Brush
+  if (compact) {
+    return /*#__PURE__*/React.createElement(_RootSurface.RootSurface, {
+      otherAttributes: attrs,
+      title: title,
+      desc: desc
+    }, children);
+  }
+  return /*#__PURE__*/React.createElement(_RechartsWrapper.RechartsWrapper, {
+    className: className,
+    style: style,
+    width: width,
+    height: height,
+    onClick: props.onClick,
+    onMouseLeave: props.onMouseLeave,
+    onMouseEnter: props.onMouseEnter,
+    onMouseMove: props.onMouseMove,
+    onMouseDown: props.onMouseDown,
+    onMouseUp: props.onMouseUp,
+    onContextMenu: props.onContextMenu,
+    onDoubleClick: props.onDoubleClick,
+    onTouchStart: props.onTouchStart,
+    onTouchMove: props.onTouchMove,
+    onTouchEnd: props.onTouchEnd
+  }, /*#__PURE__*/React.createElement(_RootSurface.RootSurface, {
+    otherAttributes: attrs,
+    title: title,
+    desc: desc,
+    ref: ref
+  }, /*#__PURE__*/React.createElement(_ClipPathProvider.ClipPathProvider, null, children)));
+});
Index: node_modules/recharts/lib/chart/ComposedChart.js
===================================================================
--- node_modules/recharts/lib/chart/ComposedChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/ComposedChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ComposedChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _optionsSlice = require("../state/optionsSlice");
+var _CartesianChart = require("./CartesianChart");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var allowedTooltipTypes = ['axis'];
+var ComposedChart = exports.ComposedChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  return /*#__PURE__*/React.createElement(_CartesianChart.CartesianChart, {
+    chartName: "ComposedChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: _optionsSlice.arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/lib/chart/FunnelChart.js
===================================================================
--- node_modules/recharts/lib/chart/FunnelChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/FunnelChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.FunnelChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _optionsSlice = require("../state/optionsSlice");
+var _CartesianChart = require("./CartesianChart");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var allowedTooltipTypes = ['item'];
+var FunnelChart = exports.FunnelChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  return /*#__PURE__*/React.createElement(_CartesianChart.CartesianChart, {
+    chartName: "FunnelChart",
+    defaultTooltipEventType: "item",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: _optionsSlice.arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/lib/chart/LineChart.js
===================================================================
--- node_modules/recharts/lib/chart/LineChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/LineChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.LineChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _optionsSlice = require("../state/optionsSlice");
+var _CartesianChart = require("./CartesianChart");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var allowedTooltipTypes = ['axis'];
+var LineChart = exports.LineChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  return /*#__PURE__*/React.createElement(_CartesianChart.CartesianChart, {
+    chartName: "LineChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: _optionsSlice.arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/lib/chart/PieChart.js
===================================================================
--- node_modules/recharts/lib/chart/PieChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/PieChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.PieChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _optionsSlice = require("../state/optionsSlice");
+var _PolarChart = require("./PolarChart");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var allowedTooltipTypes = ['item'];
+var defaultProps = {
+  layout: 'centric',
+  startAngle: 0,
+  endAngle: 360,
+  cx: '50%',
+  cy: '50%',
+  innerRadius: 0,
+  outerRadius: '80%'
+};
+var PieChart = exports.PieChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  var propsWithDefaults = (0, _resolveDefaultProps.resolveDefaultProps)(props, defaultProps);
+  return /*#__PURE__*/React.createElement(_PolarChart.PolarChart, {
+    chartName: "PieChart",
+    defaultTooltipEventType: "item",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: _optionsSlice.arrayTooltipSearcher,
+    categoricalChartProps: propsWithDefaults,
+    ref: ref
+  });
+});
Index: node_modules/recharts/lib/chart/PolarChart.js
===================================================================
--- node_modules/recharts/lib/chart/PolarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/PolarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,118 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.PolarChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _RechartsStoreProvider = require("../state/RechartsStoreProvider");
+var _chartDataContext = require("../context/chartDataContext");
+var _ReportMainChartProps = require("../state/ReportMainChartProps");
+var _ReportChartProps = require("../state/ReportChartProps");
+var _ReportPolarOptions = require("../state/ReportPolarOptions");
+var _CategoricalChart = require("./CategoricalChart");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _isWellBehavedNumber = require("../util/isWellBehavedNumber");
+var _excluded = ["width", "height", "layout"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var defaultMargin = {
+  top: 5,
+  right: 5,
+  bottom: 5,
+  left: 5
+};
+
+/**
+ * These default props are the same for all PolarChart components.
+ */
+var defaultProps = {
+  accessibilityLayer: true,
+  stackOffset: 'none',
+  barCategoryGap: '10%',
+  barGap: 4,
+  margin: defaultMargin,
+  reverseStackOrder: false,
+  syncMethod: 'index',
+  layout: 'radial'
+};
+
+/**
+ * These props are required for the PolarChart to function correctly.
+ * Users usually would not need to specify these explicitly,
+ * because the convenience components like PieChart, RadarChart, etc.
+ * will provide these defaults.
+ * We can't have the defaults in this file because each of those convenience components
+ * have their own opinions about what they should be.
+ */
+
+/**
+ * These are one-time, immutable options that decide the chart's behavior.
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
+ * but usually we would expect that they use one of the convenience components like PieChart, RadarChart, etc.
+ */
+
+var PolarChart = exports.PolarChart = /*#__PURE__*/(0, _react.forwardRef)(function PolarChart(props, ref) {
+  var _polarChartProps$id;
+  var polarChartProps = (0, _resolveDefaultProps.resolveDefaultProps)(props.categoricalChartProps, defaultProps);
+  var {
+      width,
+      height,
+      layout
+    } = polarChartProps,
+    otherCategoricalProps = _objectWithoutProperties(polarChartProps, _excluded);
+  if (!(0, _isWellBehavedNumber.isPositiveNumber)(width) || !(0, _isWellBehavedNumber.isPositiveNumber)(height)) {
+    return null;
+  }
+  var {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher
+  } = props;
+  var options = {
+    chartName,
+    defaultTooltipEventType,
+    validateTooltipEventTypes,
+    tooltipPayloadSearcher,
+    eventEmitter: undefined
+  };
+  return /*#__PURE__*/React.createElement(_RechartsStoreProvider.RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: (_polarChartProps$id = polarChartProps.id) !== null && _polarChartProps$id !== void 0 ? _polarChartProps$id : chartName
+  }, /*#__PURE__*/React.createElement(_chartDataContext.ChartDataContextProvider, {
+    chartData: polarChartProps.data
+  }), /*#__PURE__*/React.createElement(_ReportMainChartProps.ReportMainChartProps, {
+    width: width,
+    height: height,
+    layout: layout,
+    margin: polarChartProps.margin
+  }), /*#__PURE__*/React.createElement(_ReportChartProps.ReportChartProps, {
+    accessibilityLayer: polarChartProps.accessibilityLayer,
+    barCategoryGap: polarChartProps.barCategoryGap,
+    maxBarSize: polarChartProps.maxBarSize,
+    stackOffset: polarChartProps.stackOffset,
+    barGap: polarChartProps.barGap,
+    barSize: polarChartProps.barSize,
+    syncId: polarChartProps.syncId,
+    syncMethod: polarChartProps.syncMethod,
+    className: polarChartProps.className
+  }), /*#__PURE__*/React.createElement(_ReportPolarOptions.ReportPolarOptions, {
+    cx: polarChartProps.cx,
+    cy: polarChartProps.cy,
+    startAngle: polarChartProps.startAngle,
+    endAngle: polarChartProps.endAngle,
+    innerRadius: polarChartProps.innerRadius,
+    outerRadius: polarChartProps.outerRadius
+  }), /*#__PURE__*/React.createElement(_CategoricalChart.CategoricalChart, _extends({
+    width: width,
+    height: height
+  }, otherCategoricalProps, {
+    ref: ref
+  })));
+});
Index: node_modules/recharts/lib/chart/RadarChart.js
===================================================================
--- node_modules/recharts/lib/chart/RadarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/RadarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RadarChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _optionsSlice = require("../state/optionsSlice");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _PolarChart = require("./PolarChart");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var allowedTooltipTypes = ['axis'];
+var defaultProps = {
+  layout: 'centric',
+  startAngle: 90,
+  endAngle: -270,
+  cx: '50%',
+  cy: '50%',
+  innerRadius: 0,
+  outerRadius: '80%'
+};
+var RadarChart = exports.RadarChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  var propsWithDefaults = (0, _resolveDefaultProps.resolveDefaultProps)(props, defaultProps);
+  return /*#__PURE__*/React.createElement(_PolarChart.PolarChart, {
+    chartName: "RadarChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: _optionsSlice.arrayTooltipSearcher,
+    categoricalChartProps: propsWithDefaults,
+    ref: ref
+  });
+});
Index: node_modules/recharts/lib/chart/RadialBarChart.js
===================================================================
--- node_modules/recharts/lib/chart/RadialBarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/RadialBarChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RadialBarChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _optionsSlice = require("../state/optionsSlice");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _PolarChart = require("./PolarChart");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var allowedTooltipTypes = ['axis', 'item'];
+var defaultProps = {
+  layout: 'radial',
+  startAngle: 0,
+  endAngle: 360,
+  cx: '50%',
+  cy: '50%',
+  innerRadius: 0,
+  outerRadius: '80%'
+};
+var RadialBarChart = exports.RadialBarChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  var propsWithDefaults = (0, _resolveDefaultProps.resolveDefaultProps)(props, defaultProps);
+  return /*#__PURE__*/React.createElement(_PolarChart.PolarChart, {
+    chartName: "RadialBarChart",
+    defaultTooltipEventType: "axis",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: _optionsSlice.arrayTooltipSearcher,
+    categoricalChartProps: propsWithDefaults,
+    ref: ref
+  });
+});
Index: node_modules/recharts/lib/chart/RechartsWrapper.js
===================================================================
--- node_modules/recharts/lib/chart/RechartsWrapper.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/RechartsWrapper.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,172 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RechartsWrapper = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _tooltipSlice = require("../state/tooltipSlice");
+var _hooks = require("../state/hooks");
+var _mouseEventsMiddleware = require("../state/mouseEventsMiddleware");
+var _useChartSynchronisation = require("../synchronisation/useChartSynchronisation");
+var _keyboardEventsMiddleware = require("../state/keyboardEventsMiddleware");
+var _useReportScale = require("../util/useReportScale");
+var _externalEventsMiddleware = require("../state/externalEventsMiddleware");
+var _touchEventsMiddleware = require("../state/touchEventsMiddleware");
+var _tooltipPortalContext = require("../context/tooltipPortalContext");
+var _legendPortalContext = require("../context/legendPortalContext");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var RechartsWrapper = exports.RechartsWrapper = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
+  var {
+    children,
+    className,
+    height,
+    onClick,
+    onContextMenu,
+    onDoubleClick,
+    onMouseDown,
+    onMouseEnter,
+    onMouseLeave,
+    onMouseMove,
+    onMouseUp,
+    onTouchEnd,
+    onTouchMove,
+    onTouchStart,
+    style,
+    width
+  } = _ref;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var [tooltipPortal, setTooltipPortal] = (0, _react.useState)(null);
+  var [legendPortal, setLegendPortal] = (0, _react.useState)(null);
+  (0, _useChartSynchronisation.useSynchronisedEventsFromOtherCharts)();
+  var setScaleRef = (0, _useReportScale.useReportScale)();
+  var innerRef = (0, _react.useCallback)(node => {
+    setScaleRef(node);
+    if (typeof ref === 'function') {
+      ref(node);
+    }
+    setTooltipPortal(node);
+    setLegendPortal(node);
+  }, [setScaleRef, ref, setTooltipPortal, setLegendPortal]);
+  var myOnClick = (0, _react.useCallback)(e => {
+    dispatch((0, _mouseEventsMiddleware.mouseClickAction)(e));
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onClick,
+      reactEvent: e
+    }));
+  }, [dispatch, onClick]);
+  var myOnMouseEnter = (0, _react.useCallback)(e => {
+    dispatch((0, _mouseEventsMiddleware.mouseMoveAction)(e));
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onMouseEnter,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseEnter]);
+  var myOnMouseLeave = (0, _react.useCallback)(e => {
+    dispatch((0, _tooltipSlice.mouseLeaveChart)());
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onMouseLeave,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseLeave]);
+  var myOnMouseMove = (0, _react.useCallback)(e => {
+    dispatch((0, _mouseEventsMiddleware.mouseMoveAction)(e));
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onMouseMove,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseMove]);
+  var onFocus = (0, _react.useCallback)(() => {
+    dispatch((0, _keyboardEventsMiddleware.focusAction)());
+  }, [dispatch]);
+  var onKeyDown = (0, _react.useCallback)(e => {
+    dispatch((0, _keyboardEventsMiddleware.keyDownAction)(e.key));
+  }, [dispatch]);
+  var myOnContextMenu = (0, _react.useCallback)(e => {
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onContextMenu,
+      reactEvent: e
+    }));
+  }, [dispatch, onContextMenu]);
+  var myOnDoubleClick = (0, _react.useCallback)(e => {
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onDoubleClick,
+      reactEvent: e
+    }));
+  }, [dispatch, onDoubleClick]);
+  var myOnMouseDown = (0, _react.useCallback)(e => {
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onMouseDown,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseDown]);
+  var myOnMouseUp = (0, _react.useCallback)(e => {
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onMouseUp,
+      reactEvent: e
+    }));
+  }, [dispatch, onMouseUp]);
+  var myOnTouchStart = (0, _react.useCallback)(e => {
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onTouchStart,
+      reactEvent: e
+    }));
+  }, [dispatch, onTouchStart]);
+
+  /*
+   * onTouchMove is special because it behaves different from mouse events.
+   * Mouse events have enter + leave combo that notify us when the mouse is over
+   * a certain element. Touch events don't have that; touch only gives us
+   * start (finger down), end (finger up) and move (finger moving).
+   * So we need to figure out which element the user is touching
+   * ourselves. Fortunately, there's a convenient method for that:
+   * https://developer.mozilla.org/en-US/docs/Web/API/Document/elementFromPoint
+   */
+  var myOnTouchMove = (0, _react.useCallback)(e => {
+    dispatch((0, _touchEventsMiddleware.touchEventAction)(e));
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onTouchMove,
+      reactEvent: e
+    }));
+  }, [dispatch, onTouchMove]);
+  var myOnTouchEnd = (0, _react.useCallback)(e => {
+    dispatch((0, _externalEventsMiddleware.externalEventAction)({
+      handler: onTouchEnd,
+      reactEvent: e
+    }));
+  }, [dispatch, onTouchEnd]);
+  return /*#__PURE__*/React.createElement(_tooltipPortalContext.TooltipPortalContext.Provider, {
+    value: tooltipPortal
+  }, /*#__PURE__*/React.createElement(_legendPortalContext.LegendPortalContext.Provider, {
+    value: legendPortal
+  }, /*#__PURE__*/React.createElement("div", {
+    className: (0, _clsx.clsx)('recharts-wrapper', className),
+    style: _objectSpread({
+      position: 'relative',
+      cursor: 'default',
+      width,
+      height
+    }, style),
+    onClick: myOnClick,
+    onContextMenu: myOnContextMenu,
+    onDoubleClick: myOnDoubleClick,
+    onFocus: onFocus,
+    onKeyDown: onKeyDown,
+    onMouseDown: myOnMouseDown,
+    onMouseEnter: myOnMouseEnter,
+    onMouseLeave: myOnMouseLeave,
+    onMouseMove: myOnMouseMove,
+    onMouseUp: myOnMouseUp,
+    onTouchEnd: myOnTouchEnd,
+    onTouchMove: myOnTouchMove,
+    onTouchStart: myOnTouchStart,
+    ref: innerRef
+  }, children)));
+});
Index: node_modules/recharts/lib/chart/Sankey.js
===================================================================
--- node_modules/recharts/lib/chart/Sankey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/Sankey.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,789 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.sankeyPayloadSearcher = exports.Sankey = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _maxBy = _interopRequireDefault(require("es-toolkit/compat/maxBy"));
+var _sumBy = _interopRequireDefault(require("es-toolkit/compat/sumBy"));
+var _get = _interopRequireDefault(require("es-toolkit/compat/get"));
+var _Surface = require("../container/Surface");
+var _Layer = require("../container/Layer");
+var _Rectangle = require("../shape/Rectangle");
+var _ShallowEqual = require("../util/ShallowEqual");
+var _ReactUtils = require("../util/ReactUtils");
+var _ChartUtils = require("../util/ChartUtils");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _tooltipPortalContext = require("../context/tooltipPortalContext");
+var _RechartsWrapper = require("./RechartsWrapper");
+var _RechartsStoreProvider = require("../state/RechartsStoreProvider");
+var _hooks = require("../state/hooks");
+var _tooltipSlice = require("../state/tooltipSlice");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _chartDataContext = require("../context/chartDataContext");
+var _isWellBehavedNumber = require("../util/isWellBehavedNumber");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _excluded = ["sourceX", "sourceY", "sourceControlX", "targetX", "targetY", "targetControlX", "linkWidth"],
+  _excluded2 = ["width", "height", "className", "style", "children"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var interpolationGenerator = (a, b) => {
+  var ka = +a;
+  var kb = b - ka;
+  return t => ka + kb * t;
+};
+var centerY = node => node.y + node.dy / 2;
+var getValue = entry => entry && entry.value || 0;
+var getSumOfIds = (links, ids) => ids.reduce((result, id) => result + getValue(links[id]), 0);
+var getSumWithWeightedSource = (tree, links, ids) => ids.reduce((result, id) => {
+  var link = links[id];
+  var sourceNode = tree[link.source];
+  return result + centerY(sourceNode) * getValue(links[id]);
+}, 0);
+var getSumWithWeightedTarget = (tree, links, ids) => ids.reduce((result, id) => {
+  var link = links[id];
+  var targetNode = tree[link.target];
+  return result + centerY(targetNode) * getValue(links[id]);
+}, 0);
+var ascendingY = (a, b) => a.y - b.y;
+var searchTargetsAndSources = (links, id) => {
+  var sourceNodes = [];
+  var sourceLinks = [];
+  var targetNodes = [];
+  var targetLinks = [];
+  for (var i = 0, len = links.length; i < len; i++) {
+    var link = links[i];
+    if (link.source === id) {
+      targetNodes.push(link.target);
+      targetLinks.push(i);
+    }
+    if (link.target === id) {
+      sourceNodes.push(link.source);
+      sourceLinks.push(i);
+    }
+  }
+  return {
+    sourceNodes,
+    sourceLinks,
+    targetLinks,
+    targetNodes
+  };
+};
+var updateDepthOfTargets = (tree, curNode) => {
+  var {
+    targetNodes
+  } = curNode;
+  for (var i = 0, len = targetNodes.length; i < len; i++) {
+    var target = tree[targetNodes[i]];
+    if (target) {
+      target.depth = Math.max(curNode.depth + 1, target.depth);
+      updateDepthOfTargets(tree, target);
+    }
+  }
+};
+var getNodesTree = (_ref, width, nodeWidth) => {
+  var {
+    nodes,
+    links
+  } = _ref;
+  var tree = nodes.map((entry, index) => {
+    var result = searchTargetsAndSources(links, index);
+    return _objectSpread(_objectSpread(_objectSpread({}, entry), result), {}, {
+      value: Math.max(getSumOfIds(links, result.sourceLinks), getSumOfIds(links, result.targetLinks)),
+      depth: 0
+    });
+  });
+  for (var i = 0, len = tree.length; i < len; i++) {
+    var node = tree[i];
+    if (!node.sourceNodes.length) {
+      updateDepthOfTargets(tree, node);
+    }
+  }
+  var maxDepth = (0, _maxBy.default)(tree, entry => entry.depth).depth;
+  if (maxDepth >= 1) {
+    var childWidth = (width - nodeWidth) / maxDepth;
+    for (var _i = 0, _len = tree.length; _i < _len; _i++) {
+      var _node = tree[_i];
+      if (!_node.targetNodes.length) {
+        _node.depth = maxDepth;
+      }
+      _node.x = _node.depth * childWidth;
+      _node.dx = nodeWidth;
+    }
+  }
+  return {
+    tree,
+    maxDepth
+  };
+};
+var getDepthTree = tree => {
+  var result = [];
+  for (var i = 0, len = tree.length; i < len; i++) {
+    var node = tree[i];
+    if (!result[node.depth]) {
+      result[node.depth] = [];
+    }
+    result[node.depth].push(node);
+  }
+  return result;
+};
+var updateYOfTree = (depthTree, height, nodePadding, links) => {
+  var yRatio = Math.min(...depthTree.map(nodes => (height - (nodes.length - 1) * nodePadding) / (0, _sumBy.default)(nodes, getValue)));
+  for (var d = 0, maxDepth = depthTree.length; d < maxDepth; d++) {
+    for (var i = 0, len = depthTree[d].length; i < len; i++) {
+      var node = depthTree[d][i];
+      node.y = i;
+      node.dy = node.value * yRatio;
+    }
+  }
+  return links.map(link => _objectSpread(_objectSpread({}, link), {}, {
+    dy: getValue(link) * yRatio
+  }));
+};
+var resolveCollisions = function resolveCollisions(depthTree, height, nodePadding) {
+  var sort = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
+  for (var i = 0, len = depthTree.length; i < len; i++) {
+    var nodes = depthTree[i];
+    var n = nodes.length;
+
+    // Sort by the value of y
+    if (sort) {
+      nodes.sort(ascendingY);
+    }
+    var y0 = 0;
+    for (var j = 0; j < n; j++) {
+      var node = nodes[j];
+      var dy = y0 - node.y;
+      if (dy > 0) {
+        node.y += dy;
+      }
+      y0 = node.y + node.dy + nodePadding;
+    }
+    y0 = height + nodePadding;
+    for (var _j = n - 1; _j >= 0; _j--) {
+      var _node2 = nodes[_j];
+      var _dy = _node2.y + _node2.dy + nodePadding - y0;
+      if (_dy > 0) {
+        _node2.y -= _dy;
+        y0 = _node2.y;
+      } else {
+        break;
+      }
+    }
+  }
+};
+var relaxLeftToRight = (tree, depthTree, links, alpha) => {
+  for (var i = 0, maxDepth = depthTree.length; i < maxDepth; i++) {
+    var nodes = depthTree[i];
+    for (var j = 0, len = nodes.length; j < len; j++) {
+      var node = nodes[j];
+      if (node.sourceLinks.length) {
+        var sourceSum = getSumOfIds(links, node.sourceLinks);
+        var weightedSum = getSumWithWeightedSource(tree, links, node.sourceLinks);
+        var y = weightedSum / sourceSum;
+        node.y += (y - centerY(node)) * alpha;
+      }
+    }
+  }
+};
+var relaxRightToLeft = (tree, depthTree, links, alpha) => {
+  for (var i = depthTree.length - 1; i >= 0; i--) {
+    var nodes = depthTree[i];
+    for (var j = 0, len = nodes.length; j < len; j++) {
+      var node = nodes[j];
+      if (node.targetLinks.length) {
+        var targetSum = getSumOfIds(links, node.targetLinks);
+        var weightedSum = getSumWithWeightedTarget(tree, links, node.targetLinks);
+        var y = weightedSum / targetSum;
+        node.y += (y - centerY(node)) * alpha;
+      }
+    }
+  }
+};
+var updateYOfLinks = (tree, links) => {
+  for (var i = 0, len = tree.length; i < len; i++) {
+    var node = tree[i];
+    var sy = 0;
+    var ty = 0;
+    node.targetLinks.sort((a, b) => tree[links[a].target].y - tree[links[b].target].y);
+    node.sourceLinks.sort((a, b) => tree[links[a].source].y - tree[links[b].source].y);
+    for (var j = 0, tLen = node.targetLinks.length; j < tLen; j++) {
+      var link = links[node.targetLinks[j]];
+      if (link) {
+        link.sy = sy;
+        sy += link.dy;
+      }
+    }
+    for (var _j2 = 0, sLen = node.sourceLinks.length; _j2 < sLen; _j2++) {
+      var _link = links[node.sourceLinks[_j2]];
+      if (_link) {
+        _link.ty = ty;
+        ty += _link.dy;
+      }
+    }
+  }
+};
+var computeData = _ref2 => {
+  var {
+    data,
+    width,
+    height,
+    iterations,
+    nodeWidth,
+    nodePadding,
+    sort
+  } = _ref2;
+  var {
+    links
+  } = data;
+  var {
+    tree
+  } = getNodesTree(data, width, nodeWidth);
+  var depthTree = getDepthTree(tree);
+  var newLinks = updateYOfTree(depthTree, height, nodePadding, links);
+  resolveCollisions(depthTree, height, nodePadding, sort);
+  var alpha = 1;
+  for (var i = 1; i <= iterations; i++) {
+    relaxRightToLeft(tree, depthTree, newLinks, alpha *= 0.99);
+    resolveCollisions(depthTree, height, nodePadding, sort);
+    relaxLeftToRight(tree, depthTree, newLinks, alpha);
+    resolveCollisions(depthTree, height, nodePadding, sort);
+  }
+  updateYOfLinks(tree, newLinks);
+  return {
+    nodes: tree,
+    links: newLinks
+  };
+};
+var getCoordinateOfTooltip = (item, type) => {
+  if (type === 'node') {
+    return {
+      x: +item.x + +item.width / 2,
+      y: +item.y + +item.height / 2
+    };
+  }
+  return 'sourceX' in item && {
+    x: (item.sourceX + item.targetX) / 2,
+    y: (item.sourceY + item.targetY) / 2
+  };
+};
+var getPayloadOfTooltip = (item, type, nameKey) => {
+  var {
+    payload
+  } = item;
+  if (type === 'node') {
+    return {
+      payload,
+      name: (0, _ChartUtils.getValueByDataKey)(payload, nameKey, ''),
+      value: (0, _ChartUtils.getValueByDataKey)(payload, 'value')
+    };
+  }
+  if ('source' in payload && payload.source && payload.target) {
+    var sourceName = (0, _ChartUtils.getValueByDataKey)(payload.source, nameKey, '');
+    var targetName = (0, _ChartUtils.getValueByDataKey)(payload.target, nameKey, '');
+    return {
+      payload,
+      name: "".concat(sourceName, " - ").concat(targetName),
+      value: (0, _ChartUtils.getValueByDataKey)(payload, 'value')
+    };
+  }
+  return null;
+};
+var sankeyPayloadSearcher = (_, activeIndex, computedData, nameKey) => {
+  if (activeIndex == null || typeof activeIndex !== 'string') {
+    return undefined;
+  }
+  var splitIndex = activeIndex.split('-');
+  var [targetType, index] = splitIndex;
+  var item = (0, _get.default)(computedData, "".concat(targetType, "s[").concat(index, "]"));
+  if (item) {
+    var payload = getPayloadOfTooltip(item, targetType, nameKey);
+    return payload;
+  }
+  return undefined;
+};
+exports.sankeyPayloadSearcher = sankeyPayloadSearcher;
+var options = {
+  chartName: 'Sankey',
+  defaultTooltipEventType: 'item',
+  validateTooltipEventTypes: ['item'],
+  tooltipPayloadSearcher: sankeyPayloadSearcher,
+  eventEmitter: undefined
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    nameKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    data
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      name,
+      nameKey,
+      color: fill,
+      unit: '' // Sankey does not have unit, why?
+    }
+  };
+}
+
+// TODO: improve types - NodeOptions uses SankeyNode, LinkOptions uses LinkProps. Standardize.
+
+// Why is margin not a Sankey prop? No clue. Probably it should be
+var defaultSankeyMargin = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+function renderLinkItem(option, props) {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  if (typeof option === 'function') {
+    return option(props);
+  }
+  var {
+      sourceX,
+      sourceY,
+      sourceControlX,
+      targetX,
+      targetY,
+      targetControlX,
+      linkWidth
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  return /*#__PURE__*/React.createElement("path", _extends({
+    className: "recharts-sankey-link",
+    d: "\n          M".concat(sourceX, ",").concat(sourceY, "\n          C").concat(sourceControlX, ",").concat(sourceY, " ").concat(targetControlX, ",").concat(targetY, " ").concat(targetX, ",").concat(targetY, "\n        "),
+    fill: "none",
+    stroke: "#333",
+    strokeWidth: linkWidth,
+    strokeOpacity: "0.2"
+  }, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(others)));
+}
+var buildLinkProps = _ref3 => {
+  var {
+    link,
+    nodes,
+    left,
+    top,
+    i,
+    linkContent,
+    linkCurvature
+  } = _ref3;
+  var {
+    sy: sourceRelativeY,
+    ty: targetRelativeY,
+    dy: linkWidth
+  } = link;
+  var sourceNode = nodes[link.source];
+  var targetNode = nodes[link.target];
+  var sourceX = sourceNode.x + sourceNode.dx + left;
+  var targetX = targetNode.x + left;
+  var interpolationFunc = interpolationGenerator(sourceX, targetX);
+  var sourceControlX = interpolationFunc(linkCurvature);
+  var targetControlX = interpolationFunc(1 - linkCurvature);
+  var sourceY = sourceNode.y + sourceRelativeY + linkWidth / 2 + top;
+  var targetY = targetNode.y + targetRelativeY + linkWidth / 2 + top;
+  var linkProps = _objectSpread({
+    sourceX,
+    targetX,
+    sourceY,
+    targetY,
+    sourceControlX,
+    targetControlX,
+    sourceRelativeY,
+    targetRelativeY,
+    linkWidth,
+    index: i,
+    payload: _objectSpread(_objectSpread({}, link), {}, {
+      source: sourceNode,
+      target: targetNode
+    })
+  }, (0, _ReactUtils.filterProps)(linkContent, false));
+  return linkProps;
+};
+function SankeyLinkElement(_ref4) {
+  var {
+    props,
+    i,
+    linkContent,
+    onMouseEnter: _onMouseEnter,
+    onMouseLeave: _onMouseLeave,
+    onClick: _onClick,
+    dataKey
+  } = _ref4;
+  var activeCoordinate = getCoordinateOfTooltip(props, 'link');
+  var activeIndex = "link-".concat(i);
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var events = {
+    onMouseEnter: e => {
+      dispatch((0, _tooltipSlice.setActiveMouseOverItemIndex)({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+      _onMouseEnter(props, e);
+    },
+    onMouseLeave: e => {
+      dispatch((0, _tooltipSlice.mouseLeaveItem)());
+      _onMouseLeave(props, e);
+    },
+    onClick: e => {
+      dispatch((0, _tooltipSlice.setActiveClickItemIndex)({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+      _onClick(props, e);
+    }
+  };
+  return /*#__PURE__*/React.createElement(_Layer.Layer, events, renderLinkItem(linkContent, props));
+}
+function AllSankeyLinkElements(_ref5) {
+  var {
+    modifiedLinks,
+    links,
+    linkContent,
+    onMouseEnter,
+    onMouseLeave,
+    onClick,
+    dataKey
+  } = _ref5;
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-sankey-links",
+    key: "recharts-sankey-links"
+  }, links.map((link, i) => {
+    var linkProps = modifiedLinks[i];
+    return /*#__PURE__*/React.createElement(SankeyLinkElement, {
+      key: "link-".concat(link.source, "-").concat(link.target, "-").concat(link.value),
+      props: linkProps,
+      linkContent: linkContent,
+      i: i,
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick,
+      dataKey: dataKey
+    });
+  }));
+}
+function renderNodeItem(option, props) {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  if (typeof option === 'function') {
+    return option(props);
+  }
+  return (
+    /*#__PURE__*/
+    // @ts-expect-error recharts radius is not compatible with SVG radius
+    React.createElement(_Rectangle.Rectangle, _extends({
+      className: "recharts-sankey-node",
+      fill: "#0088fe",
+      fillOpacity: "0.8"
+    }, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props)))
+  );
+}
+var buildNodeProps = _ref6 => {
+  var {
+    node,
+    nodeContent,
+    top,
+    left,
+    i
+  } = _ref6;
+  var {
+    x,
+    y,
+    dx,
+    dy
+  } = node;
+  var nodeProps = _objectSpread(_objectSpread({}, (0, _ReactUtils.filterProps)(nodeContent, false)), {}, {
+    x: x + left,
+    y: y + top,
+    width: dx,
+    height: dy,
+    index: i,
+    payload: node
+  });
+  return nodeProps;
+};
+function NodeElement(_ref7) {
+  var {
+    props,
+    nodeContent,
+    i,
+    onMouseEnter: _onMouseEnter2,
+    onMouseLeave: _onMouseLeave2,
+    onClick: _onClick2,
+    dataKey
+  } = _ref7;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var activeCoordinate = getCoordinateOfTooltip(props, 'node');
+  var activeIndex = "node-".concat(i);
+  var events = {
+    onMouseEnter: e => {
+      dispatch((0, _tooltipSlice.setActiveMouseOverItemIndex)({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+      _onMouseEnter2(props, e);
+    },
+    onMouseLeave: e => {
+      dispatch((0, _tooltipSlice.mouseLeaveItem)());
+      _onMouseLeave2(props, e);
+    },
+    onClick: e => {
+      dispatch((0, _tooltipSlice.setActiveClickItemIndex)({
+        activeIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+      _onClick2(props, e);
+    }
+  };
+  return /*#__PURE__*/React.createElement(_Layer.Layer, events, renderNodeItem(nodeContent, props));
+}
+function AllNodeElements(_ref8) {
+  var {
+    modifiedNodes,
+    nodeContent,
+    onMouseEnter,
+    onMouseLeave,
+    onClick,
+    dataKey
+  } = _ref8;
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-sankey-nodes",
+    key: "recharts-sankey-nodes"
+  }, modifiedNodes.map((modifiedNode, i) => {
+    return /*#__PURE__*/React.createElement(NodeElement, {
+      props: modifiedNode,
+      nodeContent: nodeContent,
+      i: i,
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick,
+      dataKey: dataKey
+    });
+  }));
+}
+class Sankey extends _react.PureComponent {
+  constructor() {
+    super(...arguments);
+    _defineProperty(this, "state", {
+      nodes: [],
+      links: [],
+      modifiedLinks: [],
+      modifiedNodes: []
+    });
+  }
+  static getDerivedStateFromProps(nextProps, prevState) {
+    var {
+      data,
+      width,
+      height,
+      margin,
+      iterations,
+      nodeWidth,
+      nodePadding,
+      sort,
+      linkCurvature
+    } = nextProps;
+    if (data !== prevState.prevData || width !== prevState.prevWidth || height !== prevState.prevHeight || !(0, _ShallowEqual.shallowEqual)(margin, prevState.prevMargin) || iterations !== prevState.prevIterations || nodeWidth !== prevState.prevNodeWidth || nodePadding !== prevState.prevNodePadding || sort !== prevState.sort) {
+      var contentWidth = width - (margin && margin.left || 0) - (margin && margin.right || 0);
+      var contentHeight = height - (margin && margin.top || 0) - (margin && margin.bottom || 0);
+      var {
+        links,
+        nodes
+      } = computeData({
+        data,
+        width: contentWidth,
+        height: contentHeight,
+        iterations,
+        nodeWidth,
+        nodePadding,
+        sort
+      });
+      var top = (0, _get.default)(margin, 'top') || 0;
+      var left = (0, _get.default)(margin, 'left') || 0;
+      var modifiedLinks = links.map((link, i) => {
+        return buildLinkProps({
+          link,
+          nodes,
+          i,
+          top,
+          left,
+          linkContent: nextProps.link,
+          linkCurvature
+        });
+      });
+      var modifiedNodes = nodes.map((node, i) => {
+        return buildNodeProps({
+          node,
+          nodeContent: nextProps.node,
+          i,
+          top,
+          left
+        });
+      });
+      return _objectSpread(_objectSpread({}, prevState), {}, {
+        nodes,
+        links,
+        modifiedLinks,
+        modifiedNodes,
+        prevData: data,
+        prevWidth: iterations,
+        prevHeight: height,
+        prevMargin: margin,
+        prevNodePadding: nodePadding,
+        prevNodeWidth: nodeWidth,
+        prevIterations: iterations,
+        prevSort: sort
+      });
+    }
+    return null;
+  }
+  handleMouseEnter(item, type, e) {
+    var {
+      onMouseEnter
+    } = this.props;
+    if (onMouseEnter) {
+      onMouseEnter(item, type, e);
+    }
+  }
+  handleMouseLeave(item, type, e) {
+    var {
+      onMouseLeave
+    } = this.props;
+    if (onMouseLeave) {
+      onMouseLeave(item, type, e);
+    }
+  }
+  handleClick(item, type, e) {
+    var {
+      onClick
+    } = this.props;
+    if (onClick) onClick(item, type, e);
+  }
+  render() {
+    var _this$props = this.props,
+      {
+        width,
+        height,
+        className,
+        style,
+        children
+      } = _this$props,
+      others = _objectWithoutProperties(_this$props, _excluded2);
+    if (!(0, _isWellBehavedNumber.isPositiveNumber)(width) || !(0, _isWellBehavedNumber.isPositiveNumber)(height)) {
+      return null;
+    }
+    var {
+      links,
+      modifiedNodes,
+      modifiedLinks
+    } = this.state;
+    var attrs = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(others);
+    return /*#__PURE__*/React.createElement(_RechartsStoreProvider.RechartsStoreProvider, {
+      preloadedState: {
+        options
+      },
+      reduxStoreName: className !== null && className !== void 0 ? className : 'Sankey'
+    }, /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+      fn: getTooltipEntrySettings,
+      args: this.props
+    }), /*#__PURE__*/React.createElement(_chartDataContext.SetComputedData, {
+      computedData: {
+        links: modifiedLinks,
+        nodes: modifiedNodes
+      }
+    }), /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartSize, {
+      width: width,
+      height: height
+    }), /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartMargin, {
+      margin: defaultSankeyMargin
+    }), /*#__PURE__*/React.createElement(_tooltipPortalContext.TooltipPortalContext.Provider, {
+      value: this.state.tooltipPortal
+    }, /*#__PURE__*/React.createElement(_RechartsWrapper.RechartsWrapper, {
+      className: className,
+      style: style,
+      width: width,
+      height: height,
+      ref: node => {
+        if (this.state.tooltipPortal == null) {
+          this.setState({
+            tooltipPortal: node
+          });
+        }
+      },
+      onMouseEnter: undefined,
+      onMouseLeave: undefined,
+      onClick: undefined,
+      onMouseMove: undefined,
+      onMouseDown: undefined,
+      onMouseUp: undefined,
+      onContextMenu: undefined,
+      onDoubleClick: undefined,
+      onTouchStart: undefined,
+      onTouchMove: undefined,
+      onTouchEnd: undefined
+    }, /*#__PURE__*/React.createElement(_Surface.Surface, _extends({}, attrs, {
+      width: width,
+      height: height
+    }), children, /*#__PURE__*/React.createElement(AllSankeyLinkElements, {
+      links: links,
+      modifiedLinks: modifiedLinks,
+      linkContent: this.props.link,
+      dataKey: this.props.dataKey,
+      onMouseEnter: (linkProps, e) => this.handleMouseEnter(linkProps, 'link', e),
+      onMouseLeave: (linkProps, e) => this.handleMouseLeave(linkProps, 'link', e),
+      onClick: (linkProps, e) => this.handleClick(linkProps, 'link', e)
+    }), /*#__PURE__*/React.createElement(AllNodeElements, {
+      modifiedNodes: modifiedNodes,
+      nodeContent: this.props.node,
+      dataKey: this.props.dataKey,
+      onMouseEnter: (nodeProps, e) => this.handleMouseEnter(nodeProps, 'node', e),
+      onMouseLeave: (nodeProps, e) => this.handleMouseLeave(nodeProps, 'node', e),
+      onClick: (nodeProps, e) => this.handleClick(nodeProps, 'node', e)
+    })))));
+  }
+}
+exports.Sankey = Sankey;
+_defineProperty(Sankey, "displayName", 'Sankey');
+_defineProperty(Sankey, "defaultProps", {
+  nameKey: 'name',
+  dataKey: 'value',
+  nodePadding: 10,
+  nodeWidth: 10,
+  linkCurvature: 0.5,
+  iterations: 32,
+  margin: {
+    top: 5,
+    right: 5,
+    bottom: 5,
+    left: 5
+  },
+  sort: true
+});
Index: node_modules/recharts/lib/chart/ScatterChart.js
===================================================================
--- node_modules/recharts/lib/chart/ScatterChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/ScatterChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ScatterChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _optionsSlice = require("../state/optionsSlice");
+var _CartesianChart = require("./CartesianChart");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var allowedTooltipTypes = ['item'];
+var ScatterChart = exports.ScatterChart = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  return /*#__PURE__*/React.createElement(_CartesianChart.CartesianChart, {
+    chartName: "ScatterChart",
+    defaultTooltipEventType: "item",
+    validateTooltipEventTypes: allowedTooltipTypes,
+    tooltipPayloadSearcher: _optionsSlice.arrayTooltipSearcher,
+    categoricalChartProps: props,
+    ref: ref
+  });
+});
Index: node_modules/recharts/lib/chart/SunburstChart.js
===================================================================
--- node_modules/recharts/lib/chart/SunburstChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/SunburstChart.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,289 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.payloadSearcher = exports.addToSunburstNodeIndex = exports.SunburstChart = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _d3Scale = require("victory-vendor/d3-scale");
+var _clsx = require("clsx");
+var _get = _interopRequireDefault(require("es-toolkit/compat/get"));
+var _Surface = require("../container/Surface");
+var _Layer = require("../container/Layer");
+var _Sector = require("../shape/Sector");
+var _Text = require("../component/Text");
+var _PolarUtils = require("../util/PolarUtils");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _tooltipPortalContext = require("../context/tooltipPortalContext");
+var _RechartsWrapper = require("./RechartsWrapper");
+var _tooltipSlice = require("../state/tooltipSlice");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _RechartsStoreProvider = require("../state/RechartsStoreProvider");
+var _hooks = require("../state/hooks");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var defaultTextProps = {
+  fontWeight: 'bold',
+  paintOrder: 'stroke fill',
+  fontSize: '.75rem',
+  stroke: '#FFF',
+  fill: 'black',
+  pointerEvents: 'none'
+};
+function getMaxDepthOf(node) {
+  if (!node.children || node.children.length === 0) return 1;
+
+  // Calculate depth for each child and find the maximum
+  var childDepths = node.children.map(d => getMaxDepthOf(d));
+  return 1 + Math.max(...childDepths);
+}
+function convertMapToRecord(map) {
+  var record = {};
+  map.forEach((value, key) => {
+    record[key] = value;
+  });
+  return record;
+}
+function getTooltipEntrySettings(_ref) {
+  var {
+    dataKey,
+    nameKey,
+    data,
+    stroke,
+    fill,
+    positions
+  } = _ref;
+  return {
+    dataDefinedOnItem: data.children,
+    // Redux store will not accept a Map because it's not serializable
+    positions: convertMapToRecord(positions),
+    // Sunburst does not support many of the properties as other charts do so there's plenty of defaults here
+    settings: {
+      stroke,
+      strokeWidth: undefined,
+      fill,
+      nameKey,
+      dataKey,
+      // if there is a nameKey use it, otherwise make the name of the tooltip the dataKey itself
+      name: nameKey ? undefined : dataKey,
+      hide: false,
+      type: undefined,
+      color: fill,
+      unit: ''
+    }
+  };
+}
+
+// Why is margin not a sunburst prop? No clue. Probably it should be
+var defaultSunburstMargin = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+var payloadSearcher = (data, activeIndex) => {
+  return (0, _get.default)(data, activeIndex);
+};
+exports.payloadSearcher = payloadSearcher;
+var addToSunburstNodeIndex = exports.addToSunburstNodeIndex = function addToSunburstNodeIndex(indexInChildrenArr) {
+  var activeTooltipIndexSoFar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+  return "".concat(activeTooltipIndexSoFar, "children[").concat(indexInChildrenArr, "]");
+};
+var preloadedState = {
+  options: {
+    validateTooltipEventTypes: ['item'],
+    defaultTooltipEventType: 'item',
+    chartName: 'Sunburst',
+    tooltipPayloadSearcher: payloadSearcher,
+    eventEmitter: undefined
+  }
+};
+var SunburstChartImpl = _ref2 => {
+  var {
+    className,
+    data,
+    children,
+    width,
+    height,
+    padding = 2,
+    dataKey = 'value',
+    nameKey = 'name',
+    ringPadding = 2,
+    innerRadius = 50,
+    fill = '#333',
+    stroke = '#FFF',
+    textOptions = defaultTextProps,
+    outerRadius = Math.min(width, height) / 2,
+    cx = width / 2,
+    cy = height / 2,
+    startAngle = 0,
+    endAngle = 360,
+    onClick,
+    onMouseEnter,
+    onMouseLeave
+  } = _ref2;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var rScale = (0, _d3Scale.scaleLinear)([0, data[dataKey]], [0, endAngle]);
+  var treeDepth = getMaxDepthOf(data);
+  var thickness = (outerRadius - innerRadius) / treeDepth;
+  var sectors = [];
+  var positions = new Map([]);
+  var [tooltipPortal, setTooltipPortal] = (0, _react.useState)(null);
+  // event handlers
+  function handleMouseEnter(node, e) {
+    if (onMouseEnter) onMouseEnter(node, e);
+    dispatch((0, _tooltipSlice.setActiveMouseOverItemIndex)({
+      activeIndex: node.tooltipIndex,
+      activeDataKey: dataKey,
+      activeCoordinate: positions.get(node.name)
+    }));
+  }
+  function handleMouseLeave(node, e) {
+    if (onMouseLeave) onMouseLeave(node, e);
+    dispatch((0, _tooltipSlice.mouseLeaveItem)());
+  }
+  function handleClick(node) {
+    if (onClick) onClick(node);
+    dispatch((0, _tooltipSlice.setActiveClickItemIndex)({
+      activeIndex: node.tooltipIndex,
+      activeDataKey: dataKey,
+      activeCoordinate: positions.get(node.name)
+    }));
+  }
+
+  // recursively add nodes for each data point and its children
+  function drawArcs(childNodes, options) {
+    var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
+    var {
+      radius,
+      innerR,
+      initialAngle,
+      childColor,
+      nestedActiveTooltipIndex
+    } = options;
+    var currentAngle = initialAngle;
+    if (!childNodes) return; // base case: no children of this node
+
+    childNodes.forEach((d, i) => {
+      var _ref3, _d$fill;
+      var currentTooltipIndex = depth === 1 ? "[".concat(i, "]") : addToSunburstNodeIndex(i, nestedActiveTooltipIndex);
+      var nodeWithIndex = _objectSpread(_objectSpread({}, d), {}, {
+        tooltipIndex: currentTooltipIndex
+      });
+      var arcLength = rScale(d[dataKey]);
+      var start = currentAngle;
+      // color priority - if there's a color on the individual point use that, otherwise use parent color or default
+      var fillColor = (_ref3 = (_d$fill = d === null || d === void 0 ? void 0 : d.fill) !== null && _d$fill !== void 0 ? _d$fill : childColor) !== null && _ref3 !== void 0 ? _ref3 : fill;
+      var {
+        x: textX,
+        y: textY
+      } = (0, _PolarUtils.polarToCartesian)(0, 0, innerR + radius / 2, -(start + arcLength - arcLength / 2));
+      currentAngle += arcLength;
+      sectors.push(
+      /*#__PURE__*/
+      // eslint-disable-next-line react/no-array-index-key
+      React.createElement("g", {
+        key: "sunburst-sector-".concat(d.name, "-").concat(i)
+      }, /*#__PURE__*/React.createElement(_Sector.Sector, {
+        onClick: () => handleClick(nodeWithIndex),
+        onMouseEnter: e => handleMouseEnter(nodeWithIndex, e),
+        onMouseLeave: e => handleMouseLeave(nodeWithIndex, e),
+        fill: fillColor,
+        stroke: stroke,
+        strokeWidth: padding,
+        startAngle: start,
+        endAngle: start + arcLength,
+        innerRadius: innerR,
+        outerRadius: innerR + radius,
+        cx: cx,
+        cy: cy
+      }), /*#__PURE__*/React.createElement(_Text.Text, _extends({}, textOptions, {
+        alignmentBaseline: "middle",
+        textAnchor: "middle",
+        x: textX + cx,
+        y: cy - textY
+      }), d[dataKey])));
+      var {
+        x: tooltipX,
+        y: tooltipY
+      } = (0, _PolarUtils.polarToCartesian)(cx, cy, innerR + radius / 2, start);
+      positions.set(d.name, {
+        x: tooltipX,
+        y: tooltipY
+      });
+      return drawArcs(d.children, {
+        radius,
+        innerR: innerR + radius + ringPadding,
+        initialAngle: start,
+        childColor: fillColor,
+        nestedActiveTooltipIndex: currentTooltipIndex
+      }, depth + 1);
+    });
+  }
+  drawArcs(data.children, {
+    radius: thickness,
+    innerR: innerRadius,
+    initialAngle: startAngle
+  });
+  var layerClass = (0, _clsx.clsx)('recharts-sunburst', className);
+  return /*#__PURE__*/React.createElement(_tooltipPortalContext.TooltipPortalContext.Provider, {
+    value: tooltipPortal
+  }, /*#__PURE__*/React.createElement(_RechartsWrapper.RechartsWrapper, {
+    className: className,
+    width: width
+    // Sunburst doesn't support `style` property, why?
+    ,
+    height: height,
+    ref: node => {
+      if (tooltipPortal == null && node != null) {
+        setTooltipPortal(node);
+      }
+    },
+    onMouseEnter: undefined,
+    onMouseLeave: undefined,
+    onClick: undefined,
+    onMouseMove: undefined,
+    onMouseDown: undefined,
+    onMouseUp: undefined,
+    onContextMenu: undefined,
+    onDoubleClick: undefined,
+    onTouchStart: undefined,
+    onTouchMove: undefined,
+    onTouchEnd: undefined
+  }, /*#__PURE__*/React.createElement(_Surface.Surface, {
+    width: width,
+    height: height
+  }, /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: layerClass
+  }, sectors), /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: {
+      dataKey,
+      data,
+      stroke,
+      fill,
+      nameKey,
+      positions
+    }
+  }), children)));
+};
+var SunburstChart = props => {
+  var _props$className;
+  return /*#__PURE__*/React.createElement(_RechartsStoreProvider.RechartsStoreProvider, {
+    preloadedState: preloadedState,
+    reduxStoreName: (_props$className = props.className) !== null && _props$className !== void 0 ? _props$className : 'SunburstChart'
+  }, /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartSize, {
+    width: props.width,
+    height: props.height
+  }), /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartMargin, {
+    margin: defaultSunburstMargin
+  }), /*#__PURE__*/React.createElement(SunburstChartImpl, props));
+};
+exports.SunburstChart = SunburstChart;
Index: node_modules/recharts/lib/chart/Treemap.js
===================================================================
--- node_modules/recharts/lib/chart/Treemap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/Treemap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,795 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Treemap = Treemap;
+exports.treemapPayloadSearcher = exports.computeNode = exports.addToTreemapNodeIndex = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _omit = _interopRequireDefault(require("es-toolkit/compat/omit"));
+var _get = _interopRequireDefault(require("es-toolkit/compat/get"));
+var _Layer = require("../container/Layer");
+var _Surface = require("../container/Surface");
+var _Polygon = require("../shape/Polygon");
+var _Rectangle = require("../shape/Rectangle");
+var _ChartUtils = require("../util/ChartUtils");
+var _Constants = require("../util/Constants");
+var _DataUtils = require("../util/DataUtils");
+var _DOMUtils = require("../util/DOMUtils");
+var _Global = require("../util/Global");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _tooltipPortalContext = require("../context/tooltipPortalContext");
+var _RechartsWrapper = require("./RechartsWrapper");
+var _tooltipSlice = require("../state/tooltipSlice");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _RechartsStoreProvider = require("../state/RechartsStoreProvider");
+var _hooks = require("../state/hooks");
+var _isWellBehavedNumber = require("../util/isWellBehavedNumber");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _CSSTransitionAnimate = require("../animation/CSSTransitionAnimate");
+var _excluded = ["width", "height", "className", "style", "children", "type"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var NODE_VALUE_KEY = 'value';
+
+/**
+ * This is what end users defines as `data` on Treemap.
+ */
+
+/**
+ * This is what is returned from `squarify`, the final treemap data structure
+ * that gets rendered and is stored in
+ */
+
+var treemapPayloadSearcher = (data, activeIndex) => {
+  return (0, _get.default)(data, activeIndex);
+};
+exports.treemapPayloadSearcher = treemapPayloadSearcher;
+var addToTreemapNodeIndex = exports.addToTreemapNodeIndex = function addToTreemapNodeIndex(indexInChildrenArr) {
+  var activeTooltipIndexSoFar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
+  return "".concat(activeTooltipIndexSoFar, "children[").concat(indexInChildrenArr, "]");
+};
+var options = {
+  chartName: 'Treemap',
+  defaultTooltipEventType: 'item',
+  validateTooltipEventTypes: ['item'],
+  tooltipPayloadSearcher: treemapPayloadSearcher,
+  eventEmitter: undefined
+};
+var computeNode = _ref => {
+  var {
+    depth,
+    node,
+    index,
+    dataKey,
+    nameKey,
+    nestedActiveTooltipIndex
+  } = _ref;
+  var currentTooltipIndex = depth === 0 ? '' : addToTreemapNodeIndex(index, nestedActiveTooltipIndex);
+  var {
+    children
+  } = node;
+  var childDepth = depth + 1;
+  var computedChildren = children && children.length ? children.map((child, i) => computeNode({
+    depth: childDepth,
+    node: child,
+    index: i,
+    dataKey,
+    nameKey,
+    nestedActiveTooltipIndex: currentTooltipIndex
+  })) : null;
+  var nodeValue;
+  if (children && children.length) {
+    nodeValue = computedChildren.reduce((result, child) => result + child[NODE_VALUE_KEY], 0);
+  } else {
+    // TODO need to verify dataKey
+    nodeValue = (0, _DataUtils.isNan)(node[dataKey]) || node[dataKey] <= 0 ? 0 : node[dataKey];
+  }
+  return _objectSpread(_objectSpread({}, node), {}, {
+    children: computedChildren,
+    // @ts-expect-error getValueByDataKey does not validate the output type
+    name: (0, _ChartUtils.getValueByDataKey)(node, nameKey, ''),
+    [NODE_VALUE_KEY]: nodeValue,
+    depth,
+    index,
+    tooltipIndex: currentTooltipIndex
+  });
+};
+exports.computeNode = computeNode;
+var filterRect = node => ({
+  x: node.x,
+  y: node.y,
+  width: node.width,
+  height: node.height
+});
+
+// Compute the area for each child based on value & scale.
+var getAreaOfChildren = (children, areaValueRatio) => {
+  var ratio = areaValueRatio < 0 ? 0 : areaValueRatio;
+  return children.map(child => {
+    var area = child[NODE_VALUE_KEY] * ratio;
+    return _objectSpread(_objectSpread({}, child), {}, {
+      area: (0, _DataUtils.isNan)(area) || area <= 0 ? 0 : area
+    });
+  });
+};
+
+// Computes the score for the specified row, as the worst aspect ratio.
+var getWorstScore = (row, parentSize, aspectRatio) => {
+  var parentArea = parentSize * parentSize;
+  var rowArea = row.area * row.area;
+  var {
+    min,
+    max
+  } = row.reduce((result, child) => ({
+    min: Math.min(result.min, child.area),
+    max: Math.max(result.max, child.area)
+  }), {
+    min: Infinity,
+    max: 0
+  });
+  return rowArea ? Math.max(parentArea * max * aspectRatio / rowArea, rowArea / (parentArea * min * aspectRatio)) : Infinity;
+};
+var horizontalPosition = (row, parentSize, parentRect, isFlush) => {
+  var rowHeight = parentSize ? Math.round(row.area / parentSize) : 0;
+  if (isFlush || rowHeight > parentRect.height) {
+    rowHeight = parentRect.height;
+  }
+  var curX = parentRect.x;
+  var child;
+  for (var i = 0, len = row.length; i < len; i++) {
+    child = row[i];
+    child.x = curX;
+    child.y = parentRect.y;
+    child.height = rowHeight;
+    child.width = Math.min(rowHeight ? Math.round(child.area / rowHeight) : 0, parentRect.x + parentRect.width - curX);
+    curX += child.width;
+  }
+  // add the remain x to the last one of row
+  child.width += parentRect.x + parentRect.width - curX;
+  return _objectSpread(_objectSpread({}, parentRect), {}, {
+    y: parentRect.y + rowHeight,
+    height: parentRect.height - rowHeight
+  });
+};
+var verticalPosition = (row, parentSize, parentRect, isFlush) => {
+  var rowWidth = parentSize ? Math.round(row.area / parentSize) : 0;
+  if (isFlush || rowWidth > parentRect.width) {
+    rowWidth = parentRect.width;
+  }
+  var curY = parentRect.y;
+  var child;
+  for (var i = 0, len = row.length; i < len; i++) {
+    child = row[i];
+    child.x = parentRect.x;
+    child.y = curY;
+    child.width = rowWidth;
+    child.height = Math.min(rowWidth ? Math.round(child.area / rowWidth) : 0, parentRect.y + parentRect.height - curY);
+    curY += child.height;
+  }
+  if (child) {
+    child.height += parentRect.y + parentRect.height - curY;
+  }
+  return _objectSpread(_objectSpread({}, parentRect), {}, {
+    x: parentRect.x + rowWidth,
+    width: parentRect.width - rowWidth
+  });
+};
+var position = (row, parentSize, parentRect, isFlush) => {
+  if (parentSize === parentRect.width) {
+    return horizontalPosition(row, parentSize, parentRect, isFlush);
+  }
+  return verticalPosition(row, parentSize, parentRect, isFlush);
+};
+
+// Recursively arranges the specified node's children into squarified rows.
+var squarify = (node, aspectRatio) => {
+  var {
+    children
+  } = node;
+  if (children && children.length) {
+    var rect = filterRect(node);
+    // maybe a bug
+    var row = [];
+    var best = Infinity; // the best row score so far
+    var child, score; // the current row score
+    var size = Math.min(rect.width, rect.height); // initial orientation
+    var scaleChildren = getAreaOfChildren(children, rect.width * rect.height / node[NODE_VALUE_KEY]);
+    var tempChildren = scaleChildren.slice();
+    row.area = 0;
+    while (tempChildren.length > 0) {
+      // row first
+      // eslint-disable-next-line prefer-destructuring
+      row.push(child = tempChildren[0]);
+      row.area += child.area;
+      score = getWorstScore(row, size, aspectRatio);
+      if (score <= best) {
+        // continue with this orientation
+        tempChildren.shift();
+        best = score;
+      } else {
+        // abort, and try a different orientation
+        row.area -= row.pop().area;
+        rect = position(row, size, rect, false);
+        size = Math.min(rect.width, rect.height);
+        row.length = row.area = 0;
+        best = Infinity;
+      }
+    }
+    if (row.length) {
+      rect = position(row, size, rect, true);
+      row.length = row.area = 0;
+    }
+    return _objectSpread(_objectSpread({}, node), {}, {
+      children: scaleChildren.map(c => squarify(c, aspectRatio))
+    });
+  }
+  return node;
+};
+var defaultState = {
+  isAnimationFinished: false,
+  formatRoot: null,
+  currentRoot: null,
+  nestIndex: []
+};
+function ContentItem(_ref2) {
+  var {
+    content,
+    nodeProps,
+    type,
+    colorPanel,
+    onMouseEnter,
+    onMouseLeave,
+    onClick
+  } = _ref2;
+  if (/*#__PURE__*/React.isValidElement(content)) {
+    return /*#__PURE__*/React.createElement(_Layer.Layer, {
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick
+    }, /*#__PURE__*/React.cloneElement(content, nodeProps));
+  }
+  if (typeof content === 'function') {
+    return /*#__PURE__*/React.createElement(_Layer.Layer, {
+      onMouseEnter: onMouseEnter,
+      onMouseLeave: onMouseLeave,
+      onClick: onClick
+    }, content(nodeProps));
+  }
+  // optimize default shape
+  var {
+    x,
+    y,
+    width,
+    height,
+    index
+  } = nodeProps;
+  var arrow = null;
+  if (width > 10 && height > 10 && nodeProps.children && type === 'nest') {
+    arrow = /*#__PURE__*/React.createElement(_Polygon.Polygon, {
+      points: [{
+        x: x + 2,
+        y: y + height / 2
+      }, {
+        x: x + 6,
+        y: y + height / 2 + 3
+      }, {
+        x: x + 2,
+        y: y + height / 2 + 6
+      }]
+    });
+  }
+  var text = null;
+  var nameSize = (0, _DOMUtils.getStringSize)(nodeProps.name);
+  if (width > 20 && height > 20 && nameSize.width < width && nameSize.height < height) {
+    text = /*#__PURE__*/React.createElement("text", {
+      x: x + 8,
+      y: y + height / 2 + 7,
+      fontSize: 14
+    }, nodeProps.name);
+  }
+  var colors = colorPanel || _Constants.COLOR_PANEL;
+  return /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement(_Rectangle.Rectangle, _extends({
+    fill: nodeProps.depth < 2 ? colors[index % colors.length] : 'rgba(255,255,255,0)',
+    stroke: "#fff"
+  }, (0, _omit.default)(nodeProps, ['children']), {
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onClick: onClick,
+    "data-recharts-item-index": nodeProps.tooltipIndex
+  })), arrow, text);
+}
+function ContentItemWithEvents(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var activeCoordinate = props.nodeProps ? {
+    x: props.nodeProps.x + props.nodeProps.width / 2,
+    y: props.nodeProps.y + props.nodeProps.height / 2
+  } : null;
+  var onMouseEnter = () => {
+    dispatch((0, _tooltipSlice.setActiveMouseOverItemIndex)({
+      activeIndex: props.nodeProps.tooltipIndex,
+      activeDataKey: props.dataKey,
+      activeCoordinate
+    }));
+  };
+  var onMouseLeave = () => {
+    // clearing state on mouseLeaveItem causes re-rendering issues
+    // we don't actually want to do this for TreeMap - we clear state when we leave the entire chart instead
+  };
+  var onClick = () => {
+    dispatch((0, _tooltipSlice.setActiveClickItemIndex)({
+      activeIndex: props.nodeProps.tooltipIndex,
+      activeDataKey: props.dataKey,
+      activeCoordinate
+    }));
+  };
+  return /*#__PURE__*/React.createElement(ContentItem, _extends({}, props, {
+    onMouseEnter: onMouseEnter,
+    onMouseLeave: onMouseLeave,
+    onClick: onClick
+  }));
+}
+function getTooltipEntrySettings(_ref3) {
+  var {
+    props,
+    currentRoot
+  } = _ref3;
+  var {
+    dataKey,
+    nameKey,
+    stroke,
+    fill
+  } = props;
+  return {
+    dataDefinedOnItem: currentRoot,
+    positions: undefined,
+    // TODO I think Treemap has the capability of computing positions and supporting defaultIndex? Except it doesn't yet
+    settings: {
+      stroke,
+      strokeWidth: undefined,
+      fill,
+      dataKey,
+      nameKey,
+      name: undefined,
+      // Each TreemapNode has its own name
+      hide: false,
+      type: undefined,
+      color: fill,
+      unit: ''
+    }
+  };
+}
+
+// Why is margin not a treemap prop? No clue. Probably it should be
+var defaultTreemapMargin = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+class TreemapWithState extends _react.PureComponent {
+  constructor() {
+    super(...arguments);
+    _defineProperty(this, "state", _objectSpread({}, defaultState));
+    _defineProperty(this, "handleAnimationEnd", () => {
+      var {
+        onAnimationEnd
+      } = this.props;
+      this.setState({
+        isAnimationFinished: true
+      });
+      if (typeof onAnimationEnd === 'function') {
+        onAnimationEnd();
+      }
+    });
+    _defineProperty(this, "handleAnimationStart", () => {
+      var {
+        onAnimationStart
+      } = this.props;
+      this.setState({
+        isAnimationFinished: false
+      });
+      if (typeof onAnimationStart === 'function') {
+        onAnimationStart();
+      }
+    });
+    _defineProperty(this, "handleTouchMove", (_state, e) => {
+      var touchEvent = e.touches[0];
+      var target = document.elementFromPoint(touchEvent.clientX, touchEvent.clientY);
+      if (!target || !target.getAttribute) {
+        return;
+      }
+      var itemIndex = target.getAttribute('data-recharts-item-index');
+      var activeNode = treemapPayloadSearcher(this.state.formatRoot, itemIndex);
+      if (!activeNode) {
+        return;
+      }
+      var {
+        dataKey,
+        dispatch
+      } = this.props;
+      var activeCoordinate = {
+        x: activeNode.x + activeNode.width / 2,
+        y: activeNode.y + activeNode.height / 2
+      };
+
+      // Treemap does not support onTouchMove prop, but it could
+      // onTouchMove?.(activeNode, Number(itemIndex), e);
+      dispatch((0, _tooltipSlice.setActiveMouseOverItemIndex)({
+        activeIndex: itemIndex,
+        activeDataKey: dataKey,
+        activeCoordinate
+      }));
+    });
+  }
+  static getDerivedStateFromProps(nextProps, prevState) {
+    if (nextProps.data !== prevState.prevData || nextProps.type !== prevState.prevType || nextProps.width !== prevState.prevWidth || nextProps.height !== prevState.prevHeight || nextProps.dataKey !== prevState.prevDataKey || nextProps.aspectRatio !== prevState.prevAspectRatio) {
+      var root = computeNode({
+        depth: 0,
+        // @ts-expect-error missing properties
+        node: {
+          children: nextProps.data,
+          x: 0,
+          y: 0,
+          width: nextProps.width,
+          height: nextProps.height
+        },
+        index: 0,
+        dataKey: nextProps.dataKey,
+        nameKey: nextProps.nameKey
+      });
+      var formatRoot = squarify(root, nextProps.aspectRatio);
+      return _objectSpread(_objectSpread({}, prevState), {}, {
+        formatRoot,
+        currentRoot: root,
+        nestIndex: [root],
+        prevAspectRatio: nextProps.aspectRatio,
+        prevData: nextProps.data,
+        prevWidth: nextProps.width,
+        prevHeight: nextProps.height,
+        prevDataKey: nextProps.dataKey,
+        prevType: nextProps.type
+      });
+    }
+    return null;
+  }
+  handleMouseEnter(node, e) {
+    e.persist();
+    var {
+      onMouseEnter
+    } = this.props;
+    if (onMouseEnter) {
+      onMouseEnter(node, e);
+    }
+  }
+  handleMouseLeave(node, e) {
+    e.persist();
+    var {
+      onMouseLeave
+    } = this.props;
+    if (onMouseLeave) {
+      onMouseLeave(node, e);
+    }
+  }
+  handleClick(node) {
+    var {
+      onClick,
+      type
+    } = this.props;
+    if (type === 'nest' && node.children) {
+      var {
+        width,
+        height,
+        dataKey,
+        nameKey,
+        aspectRatio
+      } = this.props;
+      var root = computeNode({
+        depth: 0,
+        node: _objectSpread(_objectSpread({}, node), {}, {
+          x: 0,
+          y: 0,
+          width,
+          height
+        }),
+        index: 0,
+        dataKey,
+        nameKey,
+        // with Treemap nesting, should this continue nesting the index or start from empty string?
+        nestedActiveTooltipIndex: node.tooltipIndex
+      });
+      var formatRoot = squarify(root, aspectRatio);
+      var {
+        nestIndex
+      } = this.state;
+      nestIndex.push(node);
+      this.setState({
+        formatRoot,
+        currentRoot: root,
+        nestIndex
+      });
+    }
+    if (onClick) {
+      onClick(node);
+    }
+  }
+  handleNestIndex(node, i) {
+    var {
+      nestIndex
+    } = this.state;
+    var {
+      width,
+      height,
+      dataKey,
+      nameKey,
+      aspectRatio
+    } = this.props;
+    var root = computeNode({
+      depth: 0,
+      node: _objectSpread(_objectSpread({}, node), {}, {
+        x: 0,
+        y: 0,
+        width,
+        height
+      }),
+      index: 0,
+      dataKey,
+      nameKey,
+      // with Treemap nesting, should this continue nesting the index or start from empty string?
+      nestedActiveTooltipIndex: node.tooltipIndex
+    });
+    var formatRoot = squarify(root, aspectRatio);
+    nestIndex = nestIndex.slice(0, i + 1);
+    this.setState({
+      formatRoot,
+      currentRoot: node,
+      nestIndex
+    });
+  }
+  renderItem(content, nodeProps, isLeaf) {
+    var {
+      isAnimationActive,
+      animationBegin,
+      animationDuration,
+      animationEasing,
+      isUpdateAnimationActive,
+      type,
+      colorPanel,
+      dataKey
+    } = this.props;
+    var {
+      isAnimationFinished
+    } = this.state;
+    var {
+      width,
+      height,
+      x,
+      y,
+      depth
+    } = nodeProps;
+    var translateX = parseInt("".concat((Math.random() * 2 - 1) * width), 10);
+    var event = {};
+    if (isLeaf || type === 'nest') {
+      event = {
+        onMouseEnter: this.handleMouseEnter.bind(this, nodeProps),
+        onMouseLeave: this.handleMouseLeave.bind(this, nodeProps),
+        onClick: this.handleClick.bind(this, nodeProps)
+      };
+    }
+    if (!isAnimationActive) {
+      return /*#__PURE__*/React.createElement(_Layer.Layer, event, /*#__PURE__*/React.createElement(ContentItemWithEvents, {
+        content: content,
+        dataKey: dataKey,
+        nodeProps: _objectSpread(_objectSpread({}, nodeProps), {}, {
+          isAnimationActive: false,
+          isUpdateAnimationActive: false,
+          width,
+          height,
+          x,
+          y
+        }),
+        type: type,
+        colorPanel: colorPanel
+      }));
+    }
+    return /*#__PURE__*/React.createElement(_CSSTransitionAnimate.CSSTransitionAnimate, {
+      from: "translate(".concat(translateX, "px, ").concat(translateX, "px)"),
+      to: "translate(0, 0)",
+      attributeName: "transform",
+      begin: animationBegin,
+      easing: animationEasing,
+      isActive: isAnimationActive,
+      duration: animationDuration,
+      onAnimationStart: this.handleAnimationStart,
+      onAnimationEnd: this.handleAnimationEnd
+    }, style => /*#__PURE__*/React.createElement(_Layer.Layer, _extends({}, event, {
+      style: style
+    }), depth > 2 && !isAnimationFinished ? null : /*#__PURE__*/React.createElement(ContentItemWithEvents, {
+      content: content,
+      dataKey: dataKey,
+      nodeProps: _objectSpread(_objectSpread({}, nodeProps), {}, {
+        isAnimationActive,
+        isUpdateAnimationActive: !isUpdateAnimationActive,
+        width,
+        height,
+        x,
+        y
+      }),
+      type: type,
+      colorPanel: colorPanel
+    })));
+  }
+  renderNode(root, node) {
+    var {
+      content,
+      type
+    } = this.props;
+    var nodeProps = _objectSpread(_objectSpread(_objectSpread({}, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(this.props)), node), {}, {
+      root
+    });
+    var isLeaf = !node.children || !node.children.length;
+    var {
+      currentRoot
+    } = this.state;
+    var isCurrentRootChild = (currentRoot.children || []).filter(item => item.depth === node.depth && item.name === node.name);
+    if (!isCurrentRootChild.length && root.depth && type === 'nest') {
+      return null;
+    }
+    return /*#__PURE__*/React.createElement(_Layer.Layer, {
+      key: "recharts-treemap-node-".concat(nodeProps.x, "-").concat(nodeProps.y, "-").concat(nodeProps.name),
+      className: "recharts-treemap-depth-".concat(node.depth)
+    }, this.renderItem(content, nodeProps, isLeaf), node.children && node.children.length ? node.children.map(child => this.renderNode(node, child)) : null);
+  }
+  renderAllNodes() {
+    var {
+      formatRoot
+    } = this.state;
+    if (!formatRoot) {
+      return null;
+    }
+    return this.renderNode(formatRoot, formatRoot);
+  }
+
+  // render nest treemap
+  renderNestIndex() {
+    var {
+      nameKey,
+      nestIndexContent
+    } = this.props;
+    var {
+      nestIndex
+    } = this.state;
+    return /*#__PURE__*/React.createElement("div", {
+      className: "recharts-treemap-nest-index-wrapper",
+      style: {
+        marginTop: '8px',
+        textAlign: 'center'
+      }
+    }, nestIndex.map((item, i) => {
+      // TODO need to verify nameKey type
+      var name = (0, _get.default)(item, nameKey, 'root');
+      var content = null;
+      if (/*#__PURE__*/React.isValidElement(nestIndexContent)) {
+        content = /*#__PURE__*/React.cloneElement(nestIndexContent, item, i);
+      }
+      if (typeof nestIndexContent === 'function') {
+        content = nestIndexContent(item, i);
+      } else {
+        content = name;
+      }
+      return (
+        /*#__PURE__*/
+        // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
+        React.createElement("div", {
+          onClick: this.handleNestIndex.bind(this, item, i),
+          key: "nest-index-".concat((0, _DataUtils.uniqueId)()),
+          className: "recharts-treemap-nest-index-box",
+          style: {
+            cursor: 'pointer',
+            display: 'inline-block',
+            padding: '0 7px',
+            background: '#000',
+            color: '#fff',
+            marginRight: '3px'
+          }
+        }, content)
+      );
+    }));
+  }
+  render() {
+    var _this$props = this.props,
+      {
+        width,
+        height,
+        className,
+        style,
+        children,
+        type
+      } = _this$props,
+      others = _objectWithoutProperties(_this$props, _excluded);
+    var attrs = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(others);
+    return /*#__PURE__*/React.createElement(_tooltipPortalContext.TooltipPortalContext.Provider, {
+      value: this.state.tooltipPortal
+    }, /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+      fn: getTooltipEntrySettings,
+      args: {
+        props: this.props,
+        currentRoot: this.state.currentRoot
+      }
+    }), /*#__PURE__*/React.createElement(_RechartsWrapper.RechartsWrapper, {
+      className: className,
+      style: style,
+      width: width,
+      height: height,
+      ref: node => {
+        if (this.state.tooltipPortal == null) {
+          this.setState({
+            tooltipPortal: node
+          });
+        }
+      },
+      onMouseEnter: undefined,
+      onMouseLeave: undefined,
+      onClick: undefined,
+      onMouseMove: undefined,
+      onMouseDown: undefined,
+      onMouseUp: undefined,
+      onContextMenu: undefined,
+      onDoubleClick: undefined,
+      onTouchStart: undefined,
+      onTouchMove: this.handleTouchMove,
+      onTouchEnd: undefined
+    }, /*#__PURE__*/React.createElement(_Surface.Surface, _extends({}, attrs, {
+      width: width,
+      height: type === 'nest' ? height - 30 : height
+    }), this.renderAllNodes(), children), type === 'nest' && this.renderNestIndex()));
+  }
+}
+_defineProperty(TreemapWithState, "displayName", 'Treemap');
+_defineProperty(TreemapWithState, "defaultProps", {
+  aspectRatio: 0.5 * (1 + Math.sqrt(5)),
+  dataKey: 'value',
+  nameKey: 'name',
+  type: 'flat',
+  isAnimationActive: !_Global.Global.isSsr,
+  isUpdateAnimationActive: !_Global.Global.isSsr,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'linear'
+});
+function TreemapDispatchInject(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  return /*#__PURE__*/React.createElement(TreemapWithState, _extends({}, props, {
+    dispatch: dispatch
+  }));
+}
+function Treemap(props) {
+  var _props$className;
+  var {
+    width,
+    height
+  } = props;
+  if (!(0, _isWellBehavedNumber.isPositiveNumber)(width) || !(0, _isWellBehavedNumber.isPositiveNumber)(height)) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(_RechartsStoreProvider.RechartsStoreProvider, {
+    preloadedState: {
+      options
+    },
+    reduxStoreName: (_props$className = props.className) !== null && _props$className !== void 0 ? _props$className : 'Treemap'
+  }, /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartSize, {
+    width: width,
+    height: height
+  }), /*#__PURE__*/React.createElement(_chartLayoutContext.ReportChartMargin, {
+    margin: defaultTreemapMargin
+  }), /*#__PURE__*/React.createElement(TreemapDispatchInject, props));
+}
Index: node_modules/recharts/lib/chart/types.js
===================================================================
--- node_modules/recharts/lib/chart/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/chart/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/component/ActivePoints.js
===================================================================
--- node_modules/recharts/lib/component/ActivePoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/ActivePoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,82 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ActivePoints = ActivePoints;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _types = require("../util/types");
+var _ReactUtils = require("../util/ReactUtils");
+var _Dot = require("../shape/Dot");
+var _Layer = require("../container/Layer");
+var _hooks = require("../state/hooks");
+var _tooltipSelectors = require("../state/selectors/tooltipSelectors");
+var _hooks2 = require("../hooks");
+var _DataUtils = require("../util/DataUtils");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var renderActivePoint = _ref => {
+  var {
+    point,
+    childIndex,
+    mainColor,
+    activeDot,
+    dataKey
+  } = _ref;
+  if (activeDot === false || point.x == null || point.y == null) {
+    return null;
+  }
+  var dotProps = _objectSpread(_objectSpread({
+    index: childIndex,
+    dataKey,
+    cx: point.x,
+    cy: point.y,
+    r: 4,
+    fill: mainColor !== null && mainColor !== void 0 ? mainColor : 'none',
+    strokeWidth: 2,
+    stroke: '#fff',
+    payload: point.payload,
+    value: point.value
+  }, (0, _ReactUtils.filterProps)(activeDot, false)), (0, _types.adaptEventHandlers)(activeDot));
+  var dot;
+  if (/*#__PURE__*/(0, _react.isValidElement)(activeDot)) {
+    // @ts-expect-error element cloning does not have types
+    dot = /*#__PURE__*/(0, _react.cloneElement)(activeDot, dotProps);
+  } else if (typeof activeDot === 'function') {
+    dot = activeDot(dotProps);
+  } else {
+    dot = /*#__PURE__*/React.createElement(_Dot.Dot, dotProps);
+  }
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-active-dot"
+  }, dot);
+};
+function ActivePoints(_ref2) {
+  var {
+    points,
+    mainColor,
+    activeDot,
+    itemDataKey
+  } = _ref2;
+  var activeTooltipIndex = (0, _hooks.useAppSelector)(_tooltipSelectors.selectActiveTooltipIndex);
+  var activeDataPoints = (0, _hooks2.useActiveTooltipDataPoints)();
+  if (points == null || activeDataPoints == null) {
+    return null;
+  }
+  var activePoint = points.find(p => activeDataPoints.includes(p.payload));
+  if ((0, _DataUtils.isNullish)(activePoint)) {
+    return null;
+  }
+  return renderActivePoint({
+    point: activePoint,
+    childIndex: Number(activeTooltipIndex),
+    mainColor,
+    dataKey: itemDataKey,
+    activeDot
+  });
+}
Index: node_modules/recharts/lib/component/Cell.js
===================================================================
--- node_modules/recharts/lib/component/Cell.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/Cell.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Cell = void 0;
+/**
+ * @fileOverview Cross
+ */
+
+var Cell = _props => null;
+exports.Cell = Cell;
+Cell.displayName = 'Cell';
Index: node_modules/recharts/lib/component/Cursor.js
===================================================================
--- node_modules/recharts/lib/component/Cursor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/Cursor.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,120 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Cursor = Cursor;
+exports.CursorInternal = CursorInternal;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Curve = require("../shape/Curve");
+var _Cross = require("../shape/Cross");
+var _getCursorRectangle = require("../util/cursor/getCursorRectangle");
+var _Rectangle = require("../shape/Rectangle");
+var _getRadialCursorPoints = require("../util/cursor/getRadialCursorPoints");
+var _Sector = require("../shape/Sector");
+var _getCursorPoints = require("../util/cursor/getCursorPoints");
+var _ReactUtils = require("../util/ReactUtils");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _useTooltipAxis = require("../context/useTooltipAxis");
+var _selectors = require("../state/selectors/selectors");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * If set false, no cursor will be drawn when tooltip is active.
+ * If set an object, the option is the configuration of cursor.
+ * If set a React element, the option is the custom react element of drawing cursor
+ */
+
+function CursorInternal(props) {
+  var {
+    coordinate,
+    payload,
+    index,
+    offset,
+    tooltipAxisBandSize,
+    layout,
+    cursor,
+    tooltipEventType,
+    chartName
+  } = props;
+
+  // The cursor is a part of the Tooltip, and it should be shown (by default) when the Tooltip is active.
+  var activeCoordinate = coordinate;
+  var activePayload = payload;
+  var activeTooltipIndex = index;
+  if (!cursor || !activeCoordinate || chartName !== 'ScatterChart' && tooltipEventType !== 'axis') {
+    return null;
+  }
+  var restProps, cursorComp;
+  if (chartName === 'ScatterChart') {
+    restProps = activeCoordinate;
+    cursorComp = _Cross.Cross;
+  } else if (chartName === 'BarChart') {
+    restProps = (0, _getCursorRectangle.getCursorRectangle)(layout, activeCoordinate, offset, tooltipAxisBandSize);
+    cursorComp = _Rectangle.Rectangle;
+  } else if (layout === 'radial') {
+    // @ts-expect-error TODO the state is marked as containing Coordinate but actually in polar charts it contains PolarCoordinate, we should keep the polar state separate
+    var {
+      cx,
+      cy,
+      radius,
+      startAngle,
+      endAngle
+    } = (0, _getRadialCursorPoints.getRadialCursorPoints)(activeCoordinate);
+    restProps = {
+      cx,
+      cy,
+      startAngle,
+      endAngle,
+      innerRadius: radius,
+      outerRadius: radius
+    };
+    cursorComp = _Sector.Sector;
+  } else {
+    restProps = {
+      points: (0, _getCursorPoints.getCursorPoints)(layout, activeCoordinate, offset)
+    };
+    cursorComp = _Curve.Curve;
+  }
+  var extraClassName = typeof cursor === 'object' && 'className' in cursor ? cursor.className : undefined;
+  var cursorProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
+    stroke: '#ccc',
+    pointerEvents: 'none'
+  }, offset), restProps), (0, _ReactUtils.filterProps)(cursor, false)), {}, {
+    payload: activePayload,
+    payloadIndex: activeTooltipIndex,
+    className: (0, _clsx.clsx)('recharts-tooltip-cursor', extraClassName)
+  });
+  return /*#__PURE__*/(0, _react.isValidElement)(cursor) ? /*#__PURE__*/(0, _react.cloneElement)(cursor, cursorProps) : /*#__PURE__*/(0, _react.createElement)(cursorComp, cursorProps);
+}
+
+/*
+ * Cursor is the background, or a highlight,
+ * that shows when user mouses over or activates
+ * an area.
+ *
+ * It usually shows together with a tooltip
+ * to emphasise which part of the chart does the tooltip refer to.
+ */
+function Cursor(props) {
+  var tooltipAxisBandSize = (0, _useTooltipAxis.useTooltipAxisBandSize)();
+  var offset = (0, _chartLayoutContext.useOffsetInternal)();
+  var layout = (0, _chartLayoutContext.useChartLayout)();
+  var chartName = (0, _selectors.useChartName)();
+  return /*#__PURE__*/React.createElement(CursorInternal, _extends({}, props, {
+    coordinate: props.coordinate,
+    index: props.index,
+    payload: props.payload,
+    offset: offset,
+    layout: layout,
+    tooltipAxisBandSize: tooltipAxisBandSize,
+    chartName: chartName
+  }));
+}
Index: node_modules/recharts/lib/component/Customized.js
===================================================================
--- node_modules/recharts/lib/component/Customized.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/Customized.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Customized = Customized;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _Layer = require("../container/Layer");
+var _LogUtils = require("../util/LogUtils");
+var _excluded = ["component"];
+/**
+ * @fileOverview Customized
+ */
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+/**
+ * custom svg elements by rechart instance props and state.
+ * @returns {Object}   svg elements
+ */
+function Customized(_ref) {
+  var {
+      component
+    } = _ref,
+    props = _objectWithoutProperties(_ref, _excluded);
+  var child;
+  if (/*#__PURE__*/(0, _react.isValidElement)(component)) {
+    child = /*#__PURE__*/(0, _react.cloneElement)(component, props);
+  } else if (typeof component === 'function') {
+    child = /*#__PURE__*/(0, _react.createElement)(component, props);
+  } else {
+    (0, _LogUtils.warn)(false, "Customized's props `component` must be React.element or Function, but got %s.", typeof component);
+  }
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-customized-wrapper"
+  }, child);
+}
+Customized.displayName = 'Customized';
Index: node_modules/recharts/lib/component/DefaultLegendContent.js
===================================================================
--- node_modules/recharts/lib/component/DefaultLegendContent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/DefaultLegendContent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,175 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.DefaultLegendContent = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Surface = require("../container/Surface");
+var _Symbols = require("../shape/Symbols");
+var _types = require("../util/types");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /**
+ * @fileOverview Default Legend Content
+ */
+var SIZE = 32;
+class DefaultLegendContent extends _react.PureComponent {
+  /**
+   * Render the path of icon
+   * @param data Data of each legend item
+   * @param iconType if defined, it will always render this icon. If undefined then it uses icon from data.type
+   * @return Path element
+   */
+  renderIcon(data, iconType) {
+    var {
+      inactiveColor
+    } = this.props;
+    var halfSize = SIZE / 2;
+    var sixthSize = SIZE / 6;
+    var thirdSize = SIZE / 3;
+    var color = data.inactive ? inactiveColor : data.color;
+    var preferredIcon = iconType !== null && iconType !== void 0 ? iconType : data.type;
+    if (preferredIcon === 'none') {
+      return null;
+    }
+    if (preferredIcon === 'plainline') {
+      return /*#__PURE__*/React.createElement("line", {
+        strokeWidth: 4,
+        fill: "none",
+        stroke: color,
+        strokeDasharray: data.payload.strokeDasharray,
+        x1: 0,
+        y1: halfSize,
+        x2: SIZE,
+        y2: halfSize,
+        className: "recharts-legend-icon"
+      });
+    }
+    if (preferredIcon === 'line') {
+      return /*#__PURE__*/React.createElement("path", {
+        strokeWidth: 4,
+        fill: "none",
+        stroke: color,
+        d: "M0,".concat(halfSize, "h").concat(thirdSize, "\n            A").concat(sixthSize, ",").concat(sixthSize, ",0,1,1,").concat(2 * thirdSize, ",").concat(halfSize, "\n            H").concat(SIZE, "M").concat(2 * thirdSize, ",").concat(halfSize, "\n            A").concat(sixthSize, ",").concat(sixthSize, ",0,1,1,").concat(thirdSize, ",").concat(halfSize),
+        className: "recharts-legend-icon"
+      });
+    }
+    if (preferredIcon === 'rect') {
+      return /*#__PURE__*/React.createElement("path", {
+        stroke: "none",
+        fill: color,
+        d: "M0,".concat(SIZE / 8, "h").concat(SIZE, "v").concat(SIZE * 3 / 4, "h").concat(-SIZE, "z"),
+        className: "recharts-legend-icon"
+      });
+    }
+    if (/*#__PURE__*/React.isValidElement(data.legendIcon)) {
+      var iconProps = _objectSpread({}, data);
+      delete iconProps.legendIcon;
+      return /*#__PURE__*/React.cloneElement(data.legendIcon, iconProps);
+    }
+    return /*#__PURE__*/React.createElement(_Symbols.Symbols, {
+      fill: color,
+      cx: halfSize,
+      cy: halfSize,
+      size: SIZE,
+      sizeType: "diameter",
+      type: preferredIcon
+    });
+  }
+
+  /**
+   * Draw items of legend
+   * @return Items
+   */
+  renderItems() {
+    var {
+      payload,
+      iconSize,
+      layout,
+      formatter,
+      inactiveColor,
+      iconType
+    } = this.props;
+    var viewBox = {
+      x: 0,
+      y: 0,
+      width: SIZE,
+      height: SIZE
+    };
+    var itemStyle = {
+      display: layout === 'horizontal' ? 'inline-block' : 'block',
+      marginRight: 10
+    };
+    var svgStyle = {
+      display: 'inline-block',
+      verticalAlign: 'middle',
+      marginRight: 4
+    };
+    return payload.map((entry, i) => {
+      var finalFormatter = entry.formatter || formatter;
+      var className = (0, _clsx.clsx)({
+        'recharts-legend-item': true,
+        ["legend-item-".concat(i)]: true,
+        inactive: entry.inactive
+      });
+      if (entry.type === 'none') {
+        return null;
+      }
+      var color = entry.inactive ? inactiveColor : entry.color;
+      var finalValue = finalFormatter ? finalFormatter(entry.value, entry, i) : entry.value;
+      return /*#__PURE__*/React.createElement("li", _extends({
+        className: className,
+        style: itemStyle
+        // eslint-disable-next-line react/no-array-index-key
+        ,
+        key: "legend-item-".concat(i)
+      }, (0, _types.adaptEventsOfChild)(this.props, entry, i)), /*#__PURE__*/React.createElement(_Surface.Surface, {
+        width: iconSize,
+        height: iconSize,
+        viewBox: viewBox,
+        style: svgStyle,
+        "aria-label": "".concat(finalValue, " legend icon")
+      }, this.renderIcon(entry, iconType)), /*#__PURE__*/React.createElement("span", {
+        className: "recharts-legend-item-text",
+        style: {
+          color
+        }
+      }, finalValue));
+    });
+  }
+  render() {
+    var {
+      payload,
+      layout,
+      align
+    } = this.props;
+    if (!payload || !payload.length) {
+      return null;
+    }
+    var finalStyle = {
+      padding: 0,
+      margin: 0,
+      textAlign: layout === 'horizontal' ? align : 'left'
+    };
+    return /*#__PURE__*/React.createElement("ul", {
+      className: "recharts-default-legend",
+      style: finalStyle
+    }, this.renderItems());
+  }
+}
+exports.DefaultLegendContent = DefaultLegendContent;
+_defineProperty(DefaultLegendContent, "displayName", 'Legend');
+_defineProperty(DefaultLegendContent, "defaultProps", {
+  align: 'center',
+  iconSize: 14,
+  inactiveColor: '#ccc',
+  layout: 'horizontal',
+  verticalAlign: 'middle'
+});
Index: node_modules/recharts/lib/component/DefaultTooltipContent.js
===================================================================
--- node_modules/recharts/lib/component/DefaultTooltipContent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/DefaultTooltipContent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,126 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.DefaultTooltipContent = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _sortBy = _interopRequireDefault(require("es-toolkit/compat/sortBy"));
+var _clsx = require("clsx");
+var _DataUtils = require("../util/DataUtils");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /**
+ * @fileOverview Default Tooltip Content
+ */
+function defaultFormatter(value) {
+  return Array.isArray(value) && (0, _DataUtils.isNumOrStr)(value[0]) && (0, _DataUtils.isNumOrStr)(value[1]) ? value.join(' ~ ') : value;
+}
+var DefaultTooltipContent = props => {
+  var {
+    separator = ' : ',
+    contentStyle = {},
+    itemStyle = {},
+    labelStyle = {},
+    payload,
+    formatter,
+    itemSorter,
+    wrapperClassName,
+    labelClassName,
+    label,
+    labelFormatter,
+    accessibilityLayer = false
+  } = props;
+  var renderContent = () => {
+    if (payload && payload.length) {
+      var listStyle = {
+        padding: 0,
+        margin: 0
+      };
+      var items = (itemSorter ? (0, _sortBy.default)(payload, itemSorter) : payload).map((entry, i) => {
+        if (entry.type === 'none') {
+          return null;
+        }
+        var finalFormatter = entry.formatter || formatter || defaultFormatter;
+        var {
+          value,
+          name
+        } = entry;
+        var finalValue = value;
+        var finalName = name;
+        if (finalFormatter) {
+          var formatted = finalFormatter(value, name, entry, i, payload);
+          if (Array.isArray(formatted)) {
+            [finalValue, finalName] = formatted;
+          } else if (formatted != null) {
+            finalValue = formatted;
+          } else {
+            return null;
+          }
+        }
+        var finalItemStyle = _objectSpread({
+          display: 'block',
+          paddingTop: 4,
+          paddingBottom: 4,
+          color: entry.color || '#000'
+        }, itemStyle);
+        return (
+          /*#__PURE__*/
+          // eslint-disable-next-line react/no-array-index-key
+          React.createElement("li", {
+            className: "recharts-tooltip-item",
+            key: "tooltip-item-".concat(i),
+            style: finalItemStyle
+          }, (0, _DataUtils.isNumOrStr)(finalName) ? /*#__PURE__*/React.createElement("span", {
+            className: "recharts-tooltip-item-name"
+          }, finalName) : null, (0, _DataUtils.isNumOrStr)(finalName) ? /*#__PURE__*/React.createElement("span", {
+            className: "recharts-tooltip-item-separator"
+          }, separator) : null, /*#__PURE__*/React.createElement("span", {
+            className: "recharts-tooltip-item-value"
+          }, finalValue), /*#__PURE__*/React.createElement("span", {
+            className: "recharts-tooltip-item-unit"
+          }, entry.unit || ''))
+        );
+      });
+      return /*#__PURE__*/React.createElement("ul", {
+        className: "recharts-tooltip-item-list",
+        style: listStyle
+      }, items);
+    }
+    return null;
+  };
+  var finalStyle = _objectSpread({
+    margin: 0,
+    padding: 10,
+    backgroundColor: '#fff',
+    border: '1px solid #ccc',
+    whiteSpace: 'nowrap'
+  }, contentStyle);
+  var finalLabelStyle = _objectSpread({
+    margin: 0
+  }, labelStyle);
+  var hasLabel = !(0, _DataUtils.isNullish)(label);
+  var finalLabel = hasLabel ? label : '';
+  var wrapperCN = (0, _clsx.clsx)('recharts-default-tooltip', wrapperClassName);
+  var labelCN = (0, _clsx.clsx)('recharts-tooltip-label', labelClassName);
+  if (hasLabel && labelFormatter && payload !== undefined && payload !== null) {
+    finalLabel = labelFormatter(label, payload);
+  }
+  var accessibilityAttributes = accessibilityLayer ? {
+    role: 'status',
+    'aria-live': 'assertive'
+  } : {};
+  return /*#__PURE__*/React.createElement("div", _extends({
+    className: wrapperCN,
+    style: finalStyle
+  }, accessibilityAttributes), /*#__PURE__*/React.createElement("p", {
+    className: labelCN,
+    style: finalLabelStyle
+  }, /*#__PURE__*/React.isValidElement(finalLabel) ? finalLabel : "".concat(finalLabel)), renderContent());
+};
+exports.DefaultTooltipContent = DefaultTooltipContent;
Index: node_modules/recharts/lib/component/Label.js
===================================================================
--- node_modules/recharts/lib/component/Label.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/Label.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,503 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Label = Label;
+exports.isLabelContentAFunction = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Text = require("./Text");
+var _ReactUtils = require("../util/ReactUtils");
+var _DataUtils = require("../util/DataUtils");
+var _PolarUtils = require("../util/PolarUtils");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _hooks = require("../state/hooks");
+var _polarAxisSelectors = require("../state/selectors/polarAxisSelectors");
+var _excluded = ["offset"],
+  _excluded2 = ["labelRef"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+var getLabel = props => {
+  var {
+    value,
+    formatter
+  } = props;
+  var label = (0, _DataUtils.isNullish)(props.children) ? value : props.children;
+  if (typeof formatter === 'function') {
+    return formatter(label);
+  }
+  return label;
+};
+var isLabelContentAFunction = content => {
+  return content != null && typeof content === 'function';
+};
+exports.isLabelContentAFunction = isLabelContentAFunction;
+var getDeltaAngle = (startAngle, endAngle) => {
+  var sign = (0, _DataUtils.mathSign)(endAngle - startAngle);
+  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);
+  return sign * deltaAngle;
+};
+var renderRadialLabel = (labelProps, label, attrs, viewBox) => {
+  var {
+    position,
+    offset,
+    className
+  } = labelProps;
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle,
+    clockWise
+  } = viewBox;
+  var radius = (innerRadius + outerRadius) / 2;
+  var deltaAngle = getDeltaAngle(startAngle, endAngle);
+  var sign = deltaAngle >= 0 ? 1 : -1;
+  var labelAngle, direction;
+  if (position === 'insideStart') {
+    labelAngle = startAngle + sign * offset;
+    direction = clockWise;
+  } else if (position === 'insideEnd') {
+    labelAngle = endAngle - sign * offset;
+    direction = !clockWise;
+  } else if (position === 'end') {
+    labelAngle = endAngle + sign * offset;
+    direction = clockWise;
+  }
+  direction = deltaAngle <= 0 ? direction : !direction;
+  var startPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, radius, labelAngle);
+  var endPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, radius, labelAngle + (direction ? 1 : -1) * 359);
+  var path = "M".concat(startPoint.x, ",").concat(startPoint.y, "\n    A").concat(radius, ",").concat(radius, ",0,1,").concat(direction ? 0 : 1, ",\n    ").concat(endPoint.x, ",").concat(endPoint.y);
+  var id = (0, _DataUtils.isNullish)(labelProps.id) ? (0, _DataUtils.uniqueId)('recharts-radial-line-') : labelProps.id;
+  return /*#__PURE__*/React.createElement("text", _extends({}, attrs, {
+    dominantBaseline: "central",
+    className: (0, _clsx.clsx)('recharts-radial-bar-label', className)
+  }), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("path", {
+    id: id,
+    d: path
+  })), /*#__PURE__*/React.createElement("textPath", {
+    xlinkHref: "#".concat(id)
+  }, label));
+};
+var getAttrsOfPolarLabel = (viewBox, offset, position) => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle
+  } = viewBox;
+  var midAngle = (startAngle + endAngle) / 2;
+  if (position === 'outside') {
+    var {
+      x: _x,
+      y: _y
+    } = (0, _PolarUtils.polarToCartesian)(cx, cy, outerRadius + offset, midAngle);
+    return {
+      x: _x,
+      y: _y,
+      textAnchor: _x >= cx ? 'start' : 'end',
+      verticalAnchor: 'middle'
+    };
+  }
+  if (position === 'center') {
+    return {
+      x: cx,
+      y: cy,
+      textAnchor: 'middle',
+      verticalAnchor: 'middle'
+    };
+  }
+  if (position === 'centerTop') {
+    return {
+      x: cx,
+      y: cy,
+      textAnchor: 'middle',
+      verticalAnchor: 'start'
+    };
+  }
+  if (position === 'centerBottom') {
+    return {
+      x: cx,
+      y: cy,
+      textAnchor: 'middle',
+      verticalAnchor: 'end'
+    };
+  }
+  var r = (innerRadius + outerRadius) / 2;
+  var {
+    x,
+    y
+  } = (0, _PolarUtils.polarToCartesian)(cx, cy, r, midAngle);
+  return {
+    x,
+    y,
+    textAnchor: 'middle',
+    verticalAnchor: 'middle'
+  };
+};
+var getAttrsOfCartesianLabel = (props, viewBox) => {
+  var {
+    parentViewBox,
+    offset,
+    position
+  } = props;
+  var {
+    x,
+    y,
+    width,
+    height
+  } = viewBox;
+
+  // Define vertical offsets and position inverts based on the value being positive or negative
+  var verticalSign = height >= 0 ? 1 : -1;
+  var verticalOffset = verticalSign * offset;
+  var verticalEnd = verticalSign > 0 ? 'end' : 'start';
+  var verticalStart = verticalSign > 0 ? 'start' : 'end';
+
+  // Define horizontal offsets and position inverts based on the value being positive or negative
+  var horizontalSign = width >= 0 ? 1 : -1;
+  var horizontalOffset = horizontalSign * offset;
+  var horizontalEnd = horizontalSign > 0 ? 'end' : 'start';
+  var horizontalStart = horizontalSign > 0 ? 'start' : 'end';
+  if (position === 'top') {
+    var attrs = {
+      x: x + width / 2,
+      y: y - verticalSign * offset,
+      textAnchor: 'middle',
+      verticalAnchor: verticalEnd
+    };
+    return _objectSpread(_objectSpread({}, attrs), parentViewBox ? {
+      height: Math.max(y - parentViewBox.y, 0),
+      width
+    } : {});
+  }
+  if (position === 'bottom') {
+    var _attrs = {
+      x: x + width / 2,
+      y: y + height + verticalOffset,
+      textAnchor: 'middle',
+      verticalAnchor: verticalStart
+    };
+    return _objectSpread(_objectSpread({}, _attrs), parentViewBox ? {
+      height: Math.max(parentViewBox.y + parentViewBox.height - (y + height), 0),
+      width
+    } : {});
+  }
+  if (position === 'left') {
+    var _attrs2 = {
+      x: x - horizontalOffset,
+      y: y + height / 2,
+      textAnchor: horizontalEnd,
+      verticalAnchor: 'middle'
+    };
+    return _objectSpread(_objectSpread({}, _attrs2), parentViewBox ? {
+      width: Math.max(_attrs2.x - parentViewBox.x, 0),
+      height
+    } : {});
+  }
+  if (position === 'right') {
+    var _attrs3 = {
+      x: x + width + horizontalOffset,
+      y: y + height / 2,
+      textAnchor: horizontalStart,
+      verticalAnchor: 'middle'
+    };
+    return _objectSpread(_objectSpread({}, _attrs3), parentViewBox ? {
+      width: Math.max(parentViewBox.x + parentViewBox.width - _attrs3.x, 0),
+      height
+    } : {});
+  }
+  var sizeAttrs = parentViewBox ? {
+    width,
+    height
+  } : {};
+  if (position === 'insideLeft') {
+    return _objectSpread({
+      x: x + horizontalOffset,
+      y: y + height / 2,
+      textAnchor: horizontalStart,
+      verticalAnchor: 'middle'
+    }, sizeAttrs);
+  }
+  if (position === 'insideRight') {
+    return _objectSpread({
+      x: x + width - horizontalOffset,
+      y: y + height / 2,
+      textAnchor: horizontalEnd,
+      verticalAnchor: 'middle'
+    }, sizeAttrs);
+  }
+  if (position === 'insideTop') {
+    return _objectSpread({
+      x: x + width / 2,
+      y: y + verticalOffset,
+      textAnchor: 'middle',
+      verticalAnchor: verticalStart
+    }, sizeAttrs);
+  }
+  if (position === 'insideBottom') {
+    return _objectSpread({
+      x: x + width / 2,
+      y: y + height - verticalOffset,
+      textAnchor: 'middle',
+      verticalAnchor: verticalEnd
+    }, sizeAttrs);
+  }
+  if (position === 'insideTopLeft') {
+    return _objectSpread({
+      x: x + horizontalOffset,
+      y: y + verticalOffset,
+      textAnchor: horizontalStart,
+      verticalAnchor: verticalStart
+    }, sizeAttrs);
+  }
+  if (position === 'insideTopRight') {
+    return _objectSpread({
+      x: x + width - horizontalOffset,
+      y: y + verticalOffset,
+      textAnchor: horizontalEnd,
+      verticalAnchor: verticalStart
+    }, sizeAttrs);
+  }
+  if (position === 'insideBottomLeft') {
+    return _objectSpread({
+      x: x + horizontalOffset,
+      y: y + height - verticalOffset,
+      textAnchor: horizontalStart,
+      verticalAnchor: verticalEnd
+    }, sizeAttrs);
+  }
+  if (position === 'insideBottomRight') {
+    return _objectSpread({
+      x: x + width - horizontalOffset,
+      y: y + height - verticalOffset,
+      textAnchor: horizontalEnd,
+      verticalAnchor: verticalEnd
+    }, sizeAttrs);
+  }
+  if (!!position && typeof position === 'object' && ((0, _DataUtils.isNumber)(position.x) || (0, _DataUtils.isPercent)(position.x)) && ((0, _DataUtils.isNumber)(position.y) || (0, _DataUtils.isPercent)(position.y))) {
+    return _objectSpread({
+      x: x + (0, _DataUtils.getPercentValue)(position.x, width),
+      y: y + (0, _DataUtils.getPercentValue)(position.y, height),
+      textAnchor: 'end',
+      verticalAnchor: 'end'
+    }, sizeAttrs);
+  }
+  return _objectSpread({
+    x: x + width / 2,
+    y: y + height / 2,
+    textAnchor: 'middle',
+    verticalAnchor: 'middle'
+  }, sizeAttrs);
+};
+var isPolar = viewBox => 'cx' in viewBox && (0, _DataUtils.isNumber)(viewBox.cx);
+function Label(_ref) {
+  var {
+      offset = 5
+    } = _ref,
+    restProps = _objectWithoutProperties(_ref, _excluded);
+  var props = _objectSpread({
+    offset
+  }, restProps);
+  var {
+    viewBox: viewBoxFromProps,
+    position,
+    value,
+    children,
+    content,
+    className = '',
+    textBreakAll,
+    labelRef
+  } = props;
+  var polarViewBox = (0, _hooks.useAppSelector)(_polarAxisSelectors.selectPolarViewBox);
+  var cartesianViewBox = (0, _chartLayoutContext.useViewBox)();
+
+  /*
+   * I am not proud about this solution but it's a quick fix for https://github.com/recharts/recharts/issues/6030#issuecomment-3155352460.
+   * What we should really do is split Label into two components: CartesianLabel and PolarLabel and then handle their respective viewBoxes separately.
+   * Also other components should set its own viewBox in a context so that we can fix https://github.com/recharts/recharts/issues/6156
+   */
+  var resolvedViewBox = position === 'center' ? cartesianViewBox : polarViewBox !== null && polarViewBox !== void 0 ? polarViewBox : cartesianViewBox;
+  var viewBox = viewBoxFromProps || resolvedViewBox;
+  if (!viewBox || (0, _DataUtils.isNullish)(value) && (0, _DataUtils.isNullish)(children) && ! /*#__PURE__*/(0, _react.isValidElement)(content) && typeof content !== 'function') {
+    return null;
+  }
+  var propsWithViewBox = _objectSpread(_objectSpread({}, props), {}, {
+    viewBox
+  });
+  if (/*#__PURE__*/(0, _react.isValidElement)(content)) {
+    var {
+        labelRef: _
+      } = propsWithViewBox,
+      propsWithoutLabelRef = _objectWithoutProperties(propsWithViewBox, _excluded2);
+    return /*#__PURE__*/(0, _react.cloneElement)(content, propsWithoutLabelRef);
+  }
+  var label;
+  if (typeof content === 'function') {
+    label = /*#__PURE__*/(0, _react.createElement)(content, propsWithViewBox);
+    if (/*#__PURE__*/(0, _react.isValidElement)(label)) {
+      return label;
+    }
+  } else {
+    label = getLabel(props);
+  }
+  var isPolarLabel = isPolar(viewBox);
+  var attrs = (0, _ReactUtils.filterProps)(props, true);
+  if (isPolarLabel && (position === 'insideStart' || position === 'insideEnd' || position === 'end')) {
+    return renderRadialLabel(props, label, attrs, viewBox);
+  }
+  var positionAttrs = isPolarLabel ? getAttrsOfPolarLabel(viewBox, props.offset, props.position) : getAttrsOfCartesianLabel(props, viewBox);
+  return /*#__PURE__*/React.createElement(_Text.Text, _extends({
+    ref: labelRef,
+    className: (0, _clsx.clsx)('recharts-label', className)
+  }, attrs, positionAttrs, {
+    breakAll: textBreakAll
+  }), label);
+}
+Label.displayName = 'Label';
+var parseViewBox = props => {
+  var {
+    cx,
+    cy,
+    angle,
+    startAngle,
+    endAngle,
+    r,
+    radius,
+    innerRadius,
+    outerRadius,
+    x,
+    y,
+    top,
+    left,
+    width,
+    height,
+    clockWise,
+    labelViewBox
+  } = props;
+  if (labelViewBox) {
+    return labelViewBox;
+  }
+  if ((0, _DataUtils.isNumber)(width) && (0, _DataUtils.isNumber)(height)) {
+    if ((0, _DataUtils.isNumber)(x) && (0, _DataUtils.isNumber)(y)) {
+      return {
+        x,
+        y,
+        width,
+        height
+      };
+    }
+    if ((0, _DataUtils.isNumber)(top) && (0, _DataUtils.isNumber)(left)) {
+      return {
+        x: top,
+        y: left,
+        width,
+        height
+      };
+    }
+  }
+  if ((0, _DataUtils.isNumber)(x) && (0, _DataUtils.isNumber)(y)) {
+    return {
+      x,
+      y,
+      width: 0,
+      height: 0
+    };
+  }
+  if ((0, _DataUtils.isNumber)(cx) && (0, _DataUtils.isNumber)(cy)) {
+    return {
+      cx,
+      cy,
+      startAngle: startAngle || angle || 0,
+      endAngle: endAngle || angle || 0,
+      innerRadius: innerRadius || 0,
+      outerRadius: outerRadius || radius || r || 0,
+      clockWise
+    };
+  }
+  if (props.viewBox) {
+    return props.viewBox;
+  }
+  return undefined;
+};
+var parseLabel = (label, viewBox, labelRef) => {
+  if (!label) {
+    return null;
+  }
+  var commonProps = {
+    viewBox,
+    labelRef
+  };
+  if (label === true) {
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit"
+    }, commonProps));
+  }
+  if ((0, _DataUtils.isNumOrStr)(label)) {
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit",
+      value: label
+    }, commonProps));
+  }
+  if (/*#__PURE__*/(0, _react.isValidElement)(label)) {
+    if (label.type === Label) {
+      return /*#__PURE__*/(0, _react.cloneElement)(label, _objectSpread({
+        key: 'label-implicit'
+      }, commonProps));
+    }
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit",
+      content: label
+    }, commonProps));
+  }
+  if (isLabelContentAFunction(label)) {
+    return /*#__PURE__*/React.createElement(Label, _extends({
+      key: "label-implicit",
+      content: label
+    }, commonProps));
+  }
+  if (label && typeof label === 'object') {
+    return /*#__PURE__*/React.createElement(Label, _extends({}, label, {
+      key: "label-implicit"
+    }, commonProps));
+  }
+  return null;
+};
+var renderCallByParent = function renderCallByParent(parentProps, viewBox) {
+  var checkPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  if (!parentProps || !parentProps.children && checkPropsLabel && !parentProps.label) {
+    return null;
+  }
+  var {
+    children,
+    labelRef
+  } = parentProps;
+  var parentViewBox = parseViewBox(parentProps);
+  var explicitChildren = (0, _ReactUtils.findAllByType)(children, Label).map((child, index) => {
+    return /*#__PURE__*/(0, _react.cloneElement)(child, {
+      viewBox: viewBox || parentViewBox,
+      // eslint-disable-next-line react/no-array-index-key
+      key: "label-".concat(index)
+    });
+  });
+  if (!checkPropsLabel) {
+    return explicitChildren;
+  }
+  var implicitLabel = parseLabel(parentProps.label, viewBox || parentViewBox, labelRef);
+  return [implicitLabel, ...explicitChildren];
+};
+Label.parseViewBox = parseViewBox;
+Label.renderCallByParent = renderCallByParent;
Index: node_modules/recharts/lib/component/LabelList.js
===================================================================
--- node_modules/recharts/lib/component/LabelList.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/LabelList.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,110 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.LabelList = LabelList;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _last = _interopRequireDefault(require("es-toolkit/compat/last"));
+var _Label = require("./Label");
+var _Layer = require("../container/Layer");
+var _ReactUtils = require("../util/ReactUtils");
+var _ChartUtils = require("../util/ChartUtils");
+var _DataUtils = require("../util/DataUtils");
+var _excluded = ["valueAccessor"],
+  _excluded2 = ["data", "dataKey", "clockWise", "id", "textBreakAll"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var defaultAccessor = entry => Array.isArray(entry.value) ? (0, _last.default)(entry.value) : entry.value;
+function LabelList(_ref) {
+  var {
+      valueAccessor = defaultAccessor
+    } = _ref,
+    restProps = _objectWithoutProperties(_ref, _excluded);
+  var {
+      data,
+      dataKey,
+      clockWise,
+      id,
+      textBreakAll
+    } = restProps,
+    others = _objectWithoutProperties(restProps, _excluded2);
+  if (!data || !data.length) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-label-list"
+  }, data.map((entry, index) => {
+    var value = (0, _DataUtils.isNullish)(dataKey) ? valueAccessor(entry, index) : (0, _ChartUtils.getValueByDataKey)(entry && entry.payload, dataKey);
+    var idProps = (0, _DataUtils.isNullish)(id) ? {} : {
+      id: "".concat(id, "-").concat(index)
+    };
+    return /*#__PURE__*/React.createElement(_Label.Label, _extends({}, (0, _ReactUtils.filterProps)(entry, true), others, idProps, {
+      parentViewBox: entry.parentViewBox,
+      value: value,
+      textBreakAll: textBreakAll,
+      viewBox: _Label.Label.parseViewBox((0, _DataUtils.isNullish)(clockWise) ? entry : _objectSpread(_objectSpread({}, entry), {}, {
+        clockWise
+      })),
+      key: "label-".concat(index) // eslint-disable-line react/no-array-index-key
+      ,
+      index: index
+    }));
+  }));
+}
+LabelList.displayName = 'LabelList';
+function parseLabelList(label, data) {
+  if (!label) {
+    return null;
+  }
+  if (label === true) {
+    return /*#__PURE__*/React.createElement(LabelList, {
+      key: "labelList-implicit",
+      data: data
+    });
+  }
+  if (/*#__PURE__*/React.isValidElement(label) || (0, _Label.isLabelContentAFunction)(label)) {
+    return /*#__PURE__*/React.createElement(LabelList, {
+      key: "labelList-implicit",
+      data: data,
+      content: label
+    });
+  }
+  if (typeof label === 'object') {
+    return /*#__PURE__*/React.createElement(LabelList, _extends({
+      data: data
+    }, label, {
+      key: "labelList-implicit"
+    }));
+  }
+  return null;
+}
+function renderCallByParent(parentProps, data) {
+  var checkPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  if (!parentProps || !parentProps.children && checkPropsLabel && !parentProps.label) {
+    return null;
+  }
+  var {
+    children
+  } = parentProps;
+  var explicitChildren = (0, _ReactUtils.findAllByType)(children, LabelList).map((child, index) => /*#__PURE__*/(0, _react.cloneElement)(child, {
+    data,
+    // eslint-disable-next-line react/no-array-index-key
+    key: "labelList-".concat(index)
+  }));
+  if (!checkPropsLabel) {
+    return explicitChildren;
+  }
+  var implicitLabelList = parseLabelList(parentProps.label, data);
+  return [implicitLabelList, ...explicitChildren];
+}
+LabelList.renderCallByParent = renderCallByParent;
Index: node_modules/recharts/lib/component/Legend.js
===================================================================
--- node_modules/recharts/lib/component/Legend.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/Legend.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,178 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Legend = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _reactDom = require("react-dom");
+var _legendPortalContext = require("../context/legendPortalContext");
+var _DefaultLegendContent = require("./DefaultLegendContent");
+var _DataUtils = require("../util/DataUtils");
+var _getUniqPayload = require("../util/payload/getUniqPayload");
+var _legendPayloadContext = require("../context/legendPayloadContext");
+var _useElementOffset = require("../util/useElementOffset");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _legendSlice = require("../state/legendSlice");
+var _hooks = require("../state/hooks");
+var _excluded = ["contextPayload"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function defaultUniqBy(entry) {
+  return entry.value;
+}
+function LegendContent(props) {
+  var {
+      contextPayload
+    } = props,
+    otherProps = _objectWithoutProperties(props, _excluded);
+  var finalPayload = (0, _getUniqPayload.getUniqPayload)(contextPayload, props.payloadUniqBy, defaultUniqBy);
+  var contentProps = _objectSpread(_objectSpread({}, otherProps), {}, {
+    payload: finalPayload
+  });
+  if (/*#__PURE__*/React.isValidElement(props.content)) {
+    return /*#__PURE__*/React.cloneElement(props.content, contentProps);
+  }
+  if (typeof props.content === 'function') {
+    return /*#__PURE__*/React.createElement(props.content, contentProps);
+  }
+  return /*#__PURE__*/React.createElement(_DefaultLegendContent.DefaultLegendContent, contentProps);
+}
+function getDefaultPosition(style, props, margin, chartWidth, chartHeight, box) {
+  var {
+    layout,
+    align,
+    verticalAlign
+  } = props;
+  var hPos, vPos;
+  if (!style || (style.left === undefined || style.left === null) && (style.right === undefined || style.right === null)) {
+    if (align === 'center' && layout === 'vertical') {
+      hPos = {
+        left: ((chartWidth || 0) - box.width) / 2
+      };
+    } else {
+      hPos = align === 'right' ? {
+        right: margin && margin.right || 0
+      } : {
+        left: margin && margin.left || 0
+      };
+    }
+  }
+  if (!style || (style.top === undefined || style.top === null) && (style.bottom === undefined || style.bottom === null)) {
+    if (verticalAlign === 'middle') {
+      vPos = {
+        top: ((chartHeight || 0) - box.height) / 2
+      };
+    } else {
+      vPos = verticalAlign === 'bottom' ? {
+        bottom: margin && margin.bottom || 0
+      } : {
+        top: margin && margin.top || 0
+      };
+    }
+  }
+  return _objectSpread(_objectSpread({}, hPos), vPos);
+}
+function LegendSettingsDispatcher(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _legendSlice.setLegendSettings)(props));
+  }, [dispatch, props]);
+  return null;
+}
+function LegendSizeDispatcher(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _legendSlice.setLegendSize)(props));
+    return () => {
+      dispatch((0, _legendSlice.setLegendSize)({
+        width: 0,
+        height: 0
+      }));
+    };
+  }, [dispatch, props]);
+  return null;
+}
+function LegendWrapper(props) {
+  var contextPayload = (0, _legendPayloadContext.useLegendPayload)();
+  var legendPortalFromContext = (0, _legendPortalContext.useLegendPortal)();
+  var margin = (0, _chartLayoutContext.useMargin)();
+  var {
+    width: widthFromProps,
+    height: heightFromProps,
+    wrapperStyle,
+    portal: portalFromProps
+  } = props;
+  // The contextPayload is not used directly inside the hook, but we need the onBBoxUpdate call
+  // when the payload changes, therefore it's here as a dependency.
+  var [lastBoundingBox, updateBoundingBox] = (0, _useElementOffset.useElementOffset)([contextPayload]);
+  var chartWidth = (0, _chartLayoutContext.useChartWidth)();
+  var chartHeight = (0, _chartLayoutContext.useChartHeight)();
+  var maxWidth = chartWidth - (margin.left || 0) - (margin.right || 0);
+  // eslint-disable-next-line @typescript-eslint/no-use-before-define
+  var widthOrHeight = Legend.getWidthOrHeight(props.layout, heightFromProps, widthFromProps, maxWidth);
+  // if the user supplies their own portal, only use their defined wrapper styles
+  var outerStyle = portalFromProps ? wrapperStyle : _objectSpread(_objectSpread({
+    position: 'absolute',
+    width: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.width) || widthFromProps || 'auto',
+    height: (widthOrHeight === null || widthOrHeight === void 0 ? void 0 : widthOrHeight.height) || heightFromProps || 'auto'
+  }, getDefaultPosition(wrapperStyle, props, margin, chartWidth, chartHeight, lastBoundingBox)), wrapperStyle);
+  var legendPortal = portalFromProps !== null && portalFromProps !== void 0 ? portalFromProps : legendPortalFromContext;
+  if (legendPortal == null) {
+    return null;
+  }
+  var legendElement = /*#__PURE__*/React.createElement("div", {
+    className: "recharts-legend-wrapper",
+    style: outerStyle,
+    ref: updateBoundingBox
+  }, /*#__PURE__*/React.createElement(LegendSettingsDispatcher, {
+    layout: props.layout,
+    align: props.align,
+    verticalAlign: props.verticalAlign,
+    itemSorter: props.itemSorter
+  }), /*#__PURE__*/React.createElement(LegendSizeDispatcher, {
+    width: lastBoundingBox.width,
+    height: lastBoundingBox.height
+  }), /*#__PURE__*/React.createElement(LegendContent, _extends({}, props, widthOrHeight, {
+    margin: margin,
+    chartWidth: chartWidth,
+    chartHeight: chartHeight,
+    contextPayload: contextPayload
+  })));
+  return /*#__PURE__*/(0, _reactDom.createPortal)(legendElement, legendPortal);
+}
+class Legend extends _react.PureComponent {
+  static getWidthOrHeight(layout, height, width, maxWidth) {
+    if (layout === 'vertical' && (0, _DataUtils.isNumber)(height)) {
+      return {
+        height
+      };
+    }
+    if (layout === 'horizontal') {
+      return {
+        width: width || maxWidth
+      };
+    }
+    return null;
+  }
+  render() {
+    return /*#__PURE__*/React.createElement(LegendWrapper, this.props);
+  }
+}
+exports.Legend = Legend;
+_defineProperty(Legend, "displayName", 'Legend');
+_defineProperty(Legend, "defaultProps", {
+  align: 'center',
+  iconSize: 14,
+  itemSorter: 'value',
+  layout: 'horizontal',
+  verticalAlign: 'bottom'
+});
Index: node_modules/recharts/lib/component/ResponsiveContainer.js
===================================================================
--- node_modules/recharts/lib/component/ResponsiveContainer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/ResponsiveContainer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,149 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ResponsiveContainer = void 0;
+var _clsx = require("clsx");
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _throttle = _interopRequireDefault(require("es-toolkit/compat/throttle"));
+var _DataUtils = require("../util/DataUtils");
+var _LogUtils = require("../util/LogUtils");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var ResponsiveContainer = exports.ResponsiveContainer = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
+  var {
+    aspect,
+    initialDimension = {
+      width: -1,
+      height: -1
+    },
+    width = '100%',
+    height = '100%',
+    /*
+     * default min-width to 0 if not specified - 'auto' causes issues with flexbox
+     * https://github.com/recharts/recharts/issues/172
+     */
+    minWidth = 0,
+    minHeight,
+    maxHeight,
+    children,
+    debounce = 0,
+    id,
+    className,
+    onResize,
+    style = {}
+  } = _ref;
+  var containerRef = (0, _react.useRef)(null);
+  var onResizeRef = (0, _react.useRef)();
+  onResizeRef.current = onResize;
+  (0, _react.useImperativeHandle)(ref, () => containerRef.current);
+  var [sizes, setSizes] = (0, _react.useState)({
+    containerWidth: initialDimension.width,
+    containerHeight: initialDimension.height
+  });
+  var setContainerSize = (0, _react.useCallback)((newWidth, newHeight) => {
+    setSizes(prevState => {
+      var roundedWidth = Math.round(newWidth);
+      var roundedHeight = Math.round(newHeight);
+      if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {
+        return prevState;
+      }
+      return {
+        containerWidth: roundedWidth,
+        containerHeight: roundedHeight
+      };
+    });
+  }, []);
+  (0, _react.useEffect)(() => {
+    var callback = entries => {
+      var _onResizeRef$current;
+      var {
+        width: containerWidth,
+        height: containerHeight
+      } = entries[0].contentRect;
+      setContainerSize(containerWidth, containerHeight);
+      (_onResizeRef$current = onResizeRef.current) === null || _onResizeRef$current === void 0 || _onResizeRef$current.call(onResizeRef, containerWidth, containerHeight);
+    };
+    if (debounce > 0) {
+      callback = (0, _throttle.default)(callback, debounce, {
+        trailing: true,
+        leading: false
+      });
+    }
+    var observer = new ResizeObserver(callback);
+    var {
+      width: containerWidth,
+      height: containerHeight
+    } = containerRef.current.getBoundingClientRect();
+    setContainerSize(containerWidth, containerHeight);
+    observer.observe(containerRef.current);
+    return () => {
+      observer.disconnect();
+    };
+  }, [setContainerSize, debounce]);
+  var chartContent = (0, _react.useMemo)(() => {
+    var {
+      containerWidth,
+      containerHeight
+    } = sizes;
+    if (containerWidth < 0 || containerHeight < 0) {
+      return null;
+    }
+    (0, _LogUtils.warn)((0, _DataUtils.isPercent)(width) || (0, _DataUtils.isPercent)(height), "The width(%s) and height(%s) are both fixed numbers,\n       maybe you don't need to use a ResponsiveContainer.", width, height);
+    (0, _LogUtils.warn)(!aspect || aspect > 0, 'The aspect(%s) must be greater than zero.', aspect);
+    var calculatedWidth = (0, _DataUtils.isPercent)(width) ? containerWidth : width;
+    var calculatedHeight = (0, _DataUtils.isPercent)(height) ? containerHeight : height;
+    if (aspect && aspect > 0) {
+      // Preserve the desired aspect ratio
+      if (calculatedWidth) {
+        // Will default to using width for aspect ratio
+        calculatedHeight = calculatedWidth / aspect;
+      } else if (calculatedHeight) {
+        // But we should also take height into consideration
+        calculatedWidth = calculatedHeight * aspect;
+      }
+
+      // if maxHeight is set, overwrite if calculatedHeight is greater than maxHeight
+      if (maxHeight && calculatedHeight > maxHeight) {
+        calculatedHeight = maxHeight;
+      }
+    }
+    (0, _LogUtils.warn)(calculatedWidth > 0 || calculatedHeight > 0, "The width(%s) and height(%s) of chart should be greater than 0,\n       please check the style of container, or the props width(%s) and height(%s),\n       or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\n       height and width.", calculatedWidth, calculatedHeight, width, height, minWidth, minHeight, aspect);
+    return React.Children.map(children, child => {
+      return /*#__PURE__*/(0, _react.cloneElement)(child, {
+        width: calculatedWidth,
+        height: calculatedHeight,
+        // calculate the actual size and override it.
+        style: _objectSpread({
+          width: calculatedWidth,
+          height: calculatedHeight
+        }, child.props.style)
+      });
+    });
+  }, [aspect, children, height, maxHeight, minHeight, minWidth, sizes, width]);
+  return /*#__PURE__*/React.createElement("div", {
+    id: id ? "".concat(id) : undefined,
+    className: (0, _clsx.clsx)('recharts-responsive-container', className),
+    style: _objectSpread(_objectSpread({}, style), {}, {
+      width,
+      height,
+      minWidth,
+      minHeight,
+      maxHeight
+    }),
+    ref: containerRef
+  }, /*#__PURE__*/React.createElement("div", {
+    style: {
+      width: 0,
+      height: 0,
+      overflow: 'visible'
+    }
+  }, chartContent));
+});
Index: node_modules/recharts/lib/component/Text.js
===================================================================
--- node_modules/recharts/lib/component/Text.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/Text.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,257 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getWordsByLines = exports.Text = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _DataUtils = require("../util/DataUtils");
+var _Global = require("../util/Global");
+var _ReactUtils = require("../util/ReactUtils");
+var _DOMUtils = require("../util/DOMUtils");
+var _ReduceCSSCalc = require("../util/ReduceCSSCalc");
+var _excluded = ["x", "y", "lineHeight", "capHeight", "scaleToFit", "textAnchor", "verticalAnchor", "fill"],
+  _excluded2 = ["dx", "dy", "angle", "className", "breakAll"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var BREAKING_SPACES = /[ \f\n\r\t\v\u2028\u2029]+/;
+var calculateWordWidths = _ref => {
+  var {
+    children,
+    breakAll,
+    style
+  } = _ref;
+  try {
+    var words = [];
+    if (!(0, _DataUtils.isNullish)(children)) {
+      if (breakAll) {
+        words = children.toString().split('');
+      } else {
+        words = children.toString().split(BREAKING_SPACES);
+      }
+    }
+    var wordsWithComputedWidth = words.map(word => ({
+      word,
+      width: (0, _DOMUtils.getStringSize)(word, style).width
+    }));
+    var spaceWidth = breakAll ? 0 : (0, _DOMUtils.getStringSize)('\u00A0', style).width;
+    return {
+      wordsWithComputedWidth,
+      spaceWidth
+    };
+  } catch (_unused) {
+    return null;
+  }
+};
+var calculateWordsByLines = (_ref2, initialWordsWithComputedWith, spaceWidth, lineWidth, scaleToFit) => {
+  var {
+    maxLines,
+    children,
+    style,
+    breakAll
+  } = _ref2;
+  var shouldLimitLines = (0, _DataUtils.isNumber)(maxLines);
+  var text = children;
+  var calculate = function calculate() {
+    var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+    return words.reduce((result, _ref3) => {
+      var {
+        word,
+        width
+      } = _ref3;
+      var currentLine = result[result.length - 1];
+      if (currentLine && (lineWidth == null || scaleToFit || currentLine.width + width + spaceWidth < Number(lineWidth))) {
+        // Word can be added to an existing line
+        currentLine.words.push(word);
+        currentLine.width += width + spaceWidth;
+      } else {
+        // Add first word to line or word is too long to scaleToFit on existing line
+        var newLine = {
+          words: [word],
+          width
+        };
+        result.push(newLine);
+      }
+      return result;
+    }, []);
+  };
+  var originalResult = calculate(initialWordsWithComputedWith);
+  var findLongestLine = words => words.reduce((a, b) => a.width > b.width ? a : b);
+  if (!shouldLimitLines || scaleToFit) {
+    return originalResult;
+  }
+  var overflows = originalResult.length > maxLines || findLongestLine(originalResult).width > Number(lineWidth);
+  if (!overflows) {
+    return originalResult;
+  }
+  var suffix = '…';
+  var checkOverflow = index => {
+    var tempText = text.slice(0, index);
+    var words = calculateWordWidths({
+      breakAll,
+      style,
+      children: tempText + suffix
+    }).wordsWithComputedWidth;
+    var result = calculate(words);
+    var doesOverflow = result.length > maxLines || findLongestLine(result).width > Number(lineWidth);
+    return [doesOverflow, result];
+  };
+  var start = 0;
+  var end = text.length - 1;
+  var iterations = 0;
+  var trimmedResult;
+  while (start <= end && iterations <= text.length - 1) {
+    var middle = Math.floor((start + end) / 2);
+    var prev = middle - 1;
+    var [doesPrevOverflow, result] = checkOverflow(prev);
+    var [doesMiddleOverflow] = checkOverflow(middle);
+    if (!doesPrevOverflow && !doesMiddleOverflow) {
+      start = middle + 1;
+    }
+    if (doesPrevOverflow && doesMiddleOverflow) {
+      end = middle - 1;
+    }
+    if (!doesPrevOverflow && doesMiddleOverflow) {
+      trimmedResult = result;
+      break;
+    }
+    iterations++;
+  }
+
+  // Fallback to originalResult (result without trimming) if we cannot find the
+  // where to trim.  This should not happen :tm:
+  return trimmedResult || originalResult;
+};
+var getWordsWithoutCalculate = children => {
+  var words = !(0, _DataUtils.isNullish)(children) ? children.toString().split(BREAKING_SPACES) : [];
+  return [{
+    words
+  }];
+};
+var getWordsByLines = _ref4 => {
+  var {
+    width,
+    scaleToFit,
+    children,
+    style,
+    breakAll,
+    maxLines
+  } = _ref4;
+  // Only perform calculations if using features that require them (multiline, scaleToFit)
+  if ((width || scaleToFit) && !_Global.Global.isSsr) {
+    var wordsWithComputedWidth, spaceWidth;
+    var wordWidths = calculateWordWidths({
+      breakAll,
+      children,
+      style
+    });
+    if (wordWidths) {
+      var {
+        wordsWithComputedWidth: wcw,
+        spaceWidth: sw
+      } = wordWidths;
+      wordsWithComputedWidth = wcw;
+      spaceWidth = sw;
+    } else {
+      return getWordsWithoutCalculate(children);
+    }
+    return calculateWordsByLines({
+      breakAll,
+      children,
+      maxLines,
+      style
+    }, wordsWithComputedWidth, spaceWidth, width, scaleToFit);
+  }
+  return getWordsWithoutCalculate(children);
+};
+exports.getWordsByLines = getWordsByLines;
+var DEFAULT_FILL = '#808080';
+var Text = exports.Text = /*#__PURE__*/(0, _react.forwardRef)((_ref5, ref) => {
+  var {
+      x: propsX = 0,
+      y: propsY = 0,
+      lineHeight = '1em',
+      // Magic number from d3
+      capHeight = '0.71em',
+      scaleToFit = false,
+      textAnchor = 'start',
+      // Maintain compat with existing charts / default SVG behavior
+      verticalAnchor = 'end',
+      fill = DEFAULT_FILL
+    } = _ref5,
+    props = _objectWithoutProperties(_ref5, _excluded);
+  var wordsByLines = (0, _react.useMemo)(() => {
+    return getWordsByLines({
+      breakAll: props.breakAll,
+      children: props.children,
+      maxLines: props.maxLines,
+      scaleToFit,
+      style: props.style,
+      width: props.width
+    });
+  }, [props.breakAll, props.children, props.maxLines, scaleToFit, props.style, props.width]);
+  var {
+      dx,
+      dy,
+      angle,
+      className,
+      breakAll
+    } = props,
+    textProps = _objectWithoutProperties(props, _excluded2);
+  if (!(0, _DataUtils.isNumOrStr)(propsX) || !(0, _DataUtils.isNumOrStr)(propsY)) {
+    return null;
+  }
+  var x = propsX + ((0, _DataUtils.isNumber)(dx) ? dx : 0);
+  var y = propsY + ((0, _DataUtils.isNumber)(dy) ? dy : 0);
+  var startDy;
+  switch (verticalAnchor) {
+    case 'start':
+      startDy = (0, _ReduceCSSCalc.reduceCSSCalc)("calc(".concat(capHeight, ")"));
+      break;
+    case 'middle':
+      startDy = (0, _ReduceCSSCalc.reduceCSSCalc)("calc(".concat((wordsByLines.length - 1) / 2, " * -").concat(lineHeight, " + (").concat(capHeight, " / 2))"));
+      break;
+    default:
+      startDy = (0, _ReduceCSSCalc.reduceCSSCalc)("calc(".concat(wordsByLines.length - 1, " * -").concat(lineHeight, ")"));
+      break;
+  }
+  var transforms = [];
+  if (scaleToFit) {
+    var lineWidth = wordsByLines[0].width;
+    var {
+      width
+    } = props;
+    transforms.push("scale(".concat((0, _DataUtils.isNumber)(width) ? width / lineWidth : 1, ")"));
+  }
+  if (angle) {
+    transforms.push("rotate(".concat(angle, ", ").concat(x, ", ").concat(y, ")"));
+  }
+  if (transforms.length) {
+    textProps.transform = transforms.join(' ');
+  }
+  return /*#__PURE__*/React.createElement("text", _extends({}, (0, _ReactUtils.filterProps)(textProps, true), {
+    ref: ref,
+    x: x,
+    y: y,
+    className: (0, _clsx.clsx)('recharts-text', className),
+    textAnchor: textAnchor,
+    fill: fill.includes('url') ? DEFAULT_FILL : fill
+  }), wordsByLines.map((line, index) => {
+    var words = line.words.join(breakAll ? '' : ' ');
+    return (
+      /*#__PURE__*/
+      // duplicate words will cause duplicate keys
+      // eslint-disable-next-line react/no-array-index-key
+      React.createElement("tspan", {
+        x: x,
+        dy: index === 0 ? startDy : lineHeight,
+        key: "".concat(words, "-").concat(index)
+      }, words)
+    );
+  }));
+});
+Text.displayName = 'Text';
Index: node_modules/recharts/lib/component/Tooltip.js
===================================================================
--- node_modules/recharts/lib/component/Tooltip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/Tooltip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,169 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Tooltip = Tooltip;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _reactDom = require("react-dom");
+var _DefaultTooltipContent = require("./DefaultTooltipContent");
+var _TooltipBoundingBox = require("./TooltipBoundingBox");
+var _Global = require("../util/Global");
+var _getUniqPayload = require("../util/payload/getUniqPayload");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _accessibilityContext = require("../context/accessibilityContext");
+var _useElementOffset = require("../util/useElementOffset");
+var _Cursor = require("./Cursor");
+var _selectors = require("../state/selectors/selectors");
+var _tooltipPortalContext = require("../context/tooltipPortalContext");
+var _hooks = require("../state/hooks");
+var _tooltipSlice = require("../state/tooltipSlice");
+var _useChartSynchronisation = require("../synchronisation/useChartSynchronisation");
+var _selectTooltipEventType = require("../state/selectors/selectTooltipEventType");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function defaultUniqBy(entry) {
+  return entry.dataKey;
+}
+function renderContent(content, props) {
+  if (/*#__PURE__*/React.isValidElement(content)) {
+    return /*#__PURE__*/React.cloneElement(content, props);
+  }
+  if (typeof content === 'function') {
+    return /*#__PURE__*/React.createElement(content, props);
+  }
+  return /*#__PURE__*/React.createElement(_DefaultTooltipContent.DefaultTooltipContent, props);
+}
+var emptyPayload = [];
+var defaultTooltipProps = {
+  allowEscapeViewBox: {
+    x: false,
+    y: false
+  },
+  animationDuration: 400,
+  animationEasing: 'ease',
+  axisId: 0,
+  contentStyle: {},
+  cursor: true,
+  filterNull: true,
+  isAnimationActive: !_Global.Global.isSsr,
+  itemSorter: 'name',
+  itemStyle: {},
+  labelStyle: {},
+  offset: 10,
+  reverseDirection: {
+    x: false,
+    y: false
+  },
+  separator: ' : ',
+  trigger: 'hover',
+  useTranslate3d: false,
+  wrapperStyle: {}
+};
+function Tooltip(outsideProps) {
+  var props = (0, _resolveDefaultProps.resolveDefaultProps)(outsideProps, defaultTooltipProps);
+  var {
+    active: activeFromProps,
+    allowEscapeViewBox,
+    animationDuration,
+    animationEasing,
+    content,
+    filterNull,
+    isAnimationActive,
+    offset,
+    payloadUniqBy,
+    position,
+    reverseDirection,
+    useTranslate3d,
+    wrapperStyle,
+    cursor,
+    shared,
+    trigger,
+    defaultIndex,
+    portal: portalFromProps,
+    axisId
+  } = props;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var defaultIndexAsString = typeof defaultIndex === 'number' ? String(defaultIndex) : defaultIndex;
+  (0, _react.useEffect)(() => {
+    dispatch((0, _tooltipSlice.setTooltipSettingsState)({
+      shared,
+      trigger,
+      axisId,
+      active: activeFromProps,
+      defaultIndex: defaultIndexAsString
+    }));
+  }, [dispatch, shared, trigger, axisId, activeFromProps, defaultIndexAsString]);
+  var viewBox = (0, _chartLayoutContext.useViewBox)();
+  var accessibilityLayer = (0, _accessibilityContext.useAccessibilityLayer)();
+  var tooltipEventType = (0, _selectTooltipEventType.useTooltipEventType)(shared);
+  var {
+    activeIndex,
+    isActive
+  } = (0, _hooks.useAppSelector)(state => (0, _selectors.selectIsTooltipActive)(state, tooltipEventType, trigger, defaultIndexAsString));
+  var payloadFromRedux = (0, _hooks.useAppSelector)(state => (0, _selectors.selectTooltipPayload)(state, tooltipEventType, trigger, defaultIndexAsString));
+  var labelFromRedux = (0, _hooks.useAppSelector)(state => (0, _selectors.selectActiveLabel)(state, tooltipEventType, trigger, defaultIndexAsString));
+  var coordinate = (0, _hooks.useAppSelector)(state => (0, _selectors.selectActiveCoordinate)(state, tooltipEventType, trigger, defaultIndexAsString));
+  var payload = payloadFromRedux;
+  var tooltipPortalFromContext = (0, _tooltipPortalContext.useTooltipPortal)();
+  /*
+   * The user can set `active=true` on the Tooltip in which case the Tooltip will stay always active,
+   * or `active=false` in which case the Tooltip never shows.
+   *
+   * If the `active` prop is not defined then it will show and hide based on mouse or keyboard activity.
+   */
+  var finalIsActive = activeFromProps !== null && activeFromProps !== void 0 ? activeFromProps : isActive;
+  var [lastBoundingBox, updateBoundingBox] = (0, _useElementOffset.useElementOffset)([payload, finalIsActive]);
+  var finalLabel = tooltipEventType === 'axis' ? labelFromRedux : undefined;
+  (0, _useChartSynchronisation.useTooltipChartSynchronisation)(tooltipEventType, trigger, coordinate, finalLabel, activeIndex, finalIsActive);
+  var tooltipPortal = portalFromProps !== null && portalFromProps !== void 0 ? portalFromProps : tooltipPortalFromContext;
+  if (tooltipPortal == null) {
+    return null;
+  }
+  var finalPayload = payload !== null && payload !== void 0 ? payload : emptyPayload;
+  if (!finalIsActive) {
+    finalPayload = emptyPayload;
+  }
+  if (filterNull && finalPayload.length) {
+    finalPayload = (0, _getUniqPayload.getUniqPayload)(payload.filter(entry => entry.value != null && (entry.hide !== true || props.includeHidden)), payloadUniqBy, defaultUniqBy);
+  }
+  var hasPayload = finalPayload.length > 0;
+  var tooltipElement = /*#__PURE__*/React.createElement(_TooltipBoundingBox.TooltipBoundingBox, {
+    allowEscapeViewBox: allowEscapeViewBox,
+    animationDuration: animationDuration,
+    animationEasing: animationEasing,
+    isAnimationActive: isAnimationActive,
+    active: finalIsActive,
+    coordinate: coordinate,
+    hasPayload: hasPayload,
+    offset: offset,
+    position: position,
+    reverseDirection: reverseDirection,
+    useTranslate3d: useTranslate3d,
+    viewBox: viewBox,
+    wrapperStyle: wrapperStyle,
+    lastBoundingBox: lastBoundingBox,
+    innerRef: updateBoundingBox,
+    hasPortalFromProps: Boolean(portalFromProps)
+  }, renderContent(content, _objectSpread(_objectSpread({}, props), {}, {
+    // @ts-expect-error renderContent method expects the payload to be mutable, TODO make it immutable
+    payload: finalPayload,
+    label: finalLabel,
+    active: finalIsActive,
+    coordinate,
+    accessibilityLayer
+  })));
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/(0, _reactDom.createPortal)(tooltipElement, tooltipPortal), finalIsActive && /*#__PURE__*/React.createElement(_Cursor.Cursor, {
+    cursor: cursor,
+    tooltipEventType: tooltipEventType,
+    coordinate: coordinate,
+    payload: payload,
+    index: activeIndex
+  }));
+}
Index: node_modules/recharts/lib/component/TooltipBoundingBox.js
===================================================================
--- node_modules/recharts/lib/component/TooltipBoundingBox.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/component/TooltipBoundingBox.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,118 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.TooltipBoundingBox = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _translate = require("../util/tooltip/translate");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+class TooltipBoundingBox extends _react.PureComponent {
+  constructor() {
+    super(...arguments);
+    _defineProperty(this, "state", {
+      dismissed: false,
+      dismissedAtCoordinate: {
+        x: 0,
+        y: 0
+      }
+    });
+    _defineProperty(this, "handleKeyDown", event => {
+      if (event.key === 'Escape') {
+        var _this$props$coordinat, _this$props$coordinat2, _this$props$coordinat3, _this$props$coordinat4;
+        this.setState({
+          dismissed: true,
+          dismissedAtCoordinate: {
+            x: (_this$props$coordinat = (_this$props$coordinat2 = this.props.coordinate) === null || _this$props$coordinat2 === void 0 ? void 0 : _this$props$coordinat2.x) !== null && _this$props$coordinat !== void 0 ? _this$props$coordinat : 0,
+            y: (_this$props$coordinat3 = (_this$props$coordinat4 = this.props.coordinate) === null || _this$props$coordinat4 === void 0 ? void 0 : _this$props$coordinat4.y) !== null && _this$props$coordinat3 !== void 0 ? _this$props$coordinat3 : 0
+          }
+        });
+      }
+    });
+  }
+  componentDidMount() {
+    document.addEventListener('keydown', this.handleKeyDown);
+  }
+  componentWillUnmount() {
+    document.removeEventListener('keydown', this.handleKeyDown);
+  }
+  componentDidUpdate() {
+    var _this$props$coordinat5, _this$props$coordinat6;
+    if (!this.state.dismissed) {
+      return;
+    }
+    if (((_this$props$coordinat5 = this.props.coordinate) === null || _this$props$coordinat5 === void 0 ? void 0 : _this$props$coordinat5.x) !== this.state.dismissedAtCoordinate.x || ((_this$props$coordinat6 = this.props.coordinate) === null || _this$props$coordinat6 === void 0 ? void 0 : _this$props$coordinat6.y) !== this.state.dismissedAtCoordinate.y) {
+      this.state.dismissed = false;
+    }
+  }
+  render() {
+    var {
+      active,
+      allowEscapeViewBox,
+      animationDuration,
+      animationEasing,
+      children,
+      coordinate,
+      hasPayload,
+      isAnimationActive,
+      offset,
+      position,
+      reverseDirection,
+      useTranslate3d,
+      viewBox,
+      wrapperStyle,
+      lastBoundingBox,
+      innerRef,
+      hasPortalFromProps
+    } = this.props;
+    var {
+      cssClasses,
+      cssProperties
+    } = (0, _translate.getTooltipTranslate)({
+      allowEscapeViewBox,
+      coordinate,
+      offsetTopLeft: offset,
+      position,
+      reverseDirection,
+      tooltipBox: {
+        height: lastBoundingBox.height,
+        width: lastBoundingBox.width
+      },
+      useTranslate3d,
+      viewBox
+    });
+
+    // do not use absolute styles if the user has passed a custom portal prop
+    var positionStyles = hasPortalFromProps ? {} : _objectSpread(_objectSpread({
+      transition: isAnimationActive && active ? "transform ".concat(animationDuration, "ms ").concat(animationEasing) : undefined
+    }, cssProperties), {}, {
+      pointerEvents: 'none',
+      visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden',
+      position: 'absolute',
+      top: 0,
+      left: 0
+    });
+    var outerStyle = _objectSpread(_objectSpread({}, positionStyles), {}, {
+      visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden'
+    }, wrapperStyle);
+    return (
+      /*#__PURE__*/
+      // This element allow listening to the `Escape` key. See https://github.com/recharts/recharts/pull/2925
+      React.createElement("div", {
+        // @ts-expect-error typescript library does not recognize xmlns attribute, but it's required for an HTML chunk inside SVG.
+        xmlns: "http://www.w3.org/1999/xhtml",
+        tabIndex: -1,
+        className: cssClasses,
+        style: outerStyle,
+        ref: innerRef
+      }, children)
+    );
+  }
+}
+exports.TooltipBoundingBox = TooltipBoundingBox;
Index: node_modules/recharts/lib/container/ClipPathProvider.js
===================================================================
--- node_modules/recharts/lib/container/ClipPathProvider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/container/ClipPathProvider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useClipPathId = exports.ClipPathProvider = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _DataUtils = require("../util/DataUtils");
+var _hooks = require("../hooks");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var ClipPathIdContext = /*#__PURE__*/(0, _react.createContext)(undefined);
+
+/**
+ * Generates a unique clip path ID for use in SVG elements,
+ * and puts it in a context provider.
+ *
+ * To read the clip path ID, use the `useClipPathId` hook,
+ * or render `<ClipPath>` component which will automatically use the ID from this context.
+ *
+ * @param props children - React children to be wrapped by the provider
+ * @returns React Context Provider
+ */
+var ClipPathProvider = _ref => {
+  var {
+    children
+  } = _ref;
+  var [clipPathId] = (0, _react.useState)("".concat((0, _DataUtils.uniqueId)('recharts'), "-clip"));
+  var plotArea = (0, _hooks.usePlotArea)();
+  if (plotArea == null) {
+    return null;
+  }
+  var {
+    x,
+    y,
+    width,
+    height
+  } = plotArea;
+  return /*#__PURE__*/React.createElement(ClipPathIdContext.Provider, {
+    value: clipPathId
+  }, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("clipPath", {
+    id: clipPathId
+  }, /*#__PURE__*/React.createElement("rect", {
+    x: x,
+    y: y,
+    height: height,
+    width: width
+  }))), children);
+};
+exports.ClipPathProvider = ClipPathProvider;
+var useClipPathId = () => {
+  return (0, _react.useContext)(ClipPathIdContext);
+};
+exports.useClipPathId = useClipPathId;
Index: node_modules/recharts/lib/container/Layer.js
===================================================================
--- node_modules/recharts/lib/container/Layer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/container/Layer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Layer = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _clsx = require("clsx");
+var _ReactUtils = require("../util/ReactUtils");
+var _excluded = ["children", "className"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var Layer = exports.Layer = /*#__PURE__*/React.forwardRef((props, ref) => {
+  var {
+      children,
+      className
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var layerClass = (0, _clsx.clsx)('recharts-layer', className);
+  return /*#__PURE__*/React.createElement("g", _extends({
+    className: layerClass
+  }, (0, _ReactUtils.filterProps)(others, true), {
+    ref: ref
+  }), children);
+});
Index: node_modules/recharts/lib/container/RootSurface.js
===================================================================
--- node_modules/recharts/lib/container/RootSurface.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/container/RootSurface.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,93 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RootSurface = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _accessibilityContext = require("../context/accessibilityContext");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _Surface = require("./Surface");
+var _hooks = require("../state/hooks");
+var _brushSelectors = require("../state/selectors/brushSelectors");
+var _isWellBehavedNumber = require("../util/isWellBehavedNumber");
+var _excluded = ["children"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+var FULL_WIDTH_AND_HEIGHT = {
+  width: '100%',
+  height: '100%'
+};
+var MainChartSurface = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  var width = (0, _chartLayoutContext.useChartWidth)();
+  var height = (0, _chartLayoutContext.useChartHeight)();
+  var hasAccessibilityLayer = (0, _accessibilityContext.useAccessibilityLayer)();
+  if (!(0, _isWellBehavedNumber.isPositiveNumber)(width) || !(0, _isWellBehavedNumber.isPositiveNumber)(height)) {
+    return null;
+  }
+  var {
+    children,
+    otherAttributes,
+    title,
+    desc
+  } = props;
+  var tabIndex, role;
+  if (typeof otherAttributes.tabIndex === 'number') {
+    tabIndex = otherAttributes.tabIndex;
+  } else {
+    tabIndex = hasAccessibilityLayer ? 0 : undefined;
+  }
+  if (typeof otherAttributes.role === 'string') {
+    role = otherAttributes.role;
+  } else {
+    role = hasAccessibilityLayer ? 'application' : undefined;
+  }
+  return /*#__PURE__*/React.createElement(_Surface.Surface, _extends({}, otherAttributes, {
+    title: title,
+    desc: desc,
+    role: role,
+    tabIndex: tabIndex,
+    width: width,
+    height: height,
+    style: FULL_WIDTH_AND_HEIGHT,
+    ref: ref
+  }), children);
+});
+var BrushPanoramaSurface = _ref => {
+  var {
+    children
+  } = _ref;
+  var brushDimensions = (0, _hooks.useAppSelector)(_brushSelectors.selectBrushDimensions);
+  if (!brushDimensions) {
+    return null;
+  }
+  var {
+    width,
+    height,
+    y,
+    x
+  } = brushDimensions;
+  return /*#__PURE__*/React.createElement(_Surface.Surface, {
+    width: width,
+    height: height,
+    x: x,
+    y: y
+  }, children);
+};
+var RootSurface = exports.RootSurface = /*#__PURE__*/(0, _react.forwardRef)((_ref2, ref) => {
+  var {
+      children
+    } = _ref2,
+    rest = _objectWithoutProperties(_ref2, _excluded);
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  if (isPanorama) {
+    return /*#__PURE__*/React.createElement(BrushPanoramaSurface, null, children);
+  }
+  return /*#__PURE__*/React.createElement(MainChartSurface, _extends({
+    ref: ref
+  }, rest), children);
+});
Index: node_modules/recharts/lib/container/Surface.js
===================================================================
--- node_modules/recharts/lib/container/Surface.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/container/Surface.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Surface = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _ReactUtils = require("../util/ReactUtils");
+var _excluded = ["children", "width", "height", "viewBox", "className", "style", "title", "desc"];
+/**
+ * @fileOverview Surface
+ */
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var Surface = exports.Surface = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
+  var {
+      children,
+      width,
+      height,
+      viewBox,
+      className,
+      style,
+      title,
+      desc
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var svgView = viewBox || {
+    width,
+    height,
+    x: 0,
+    y: 0
+  };
+  var layerClass = (0, _clsx.clsx)('recharts-surface', className);
+  return /*#__PURE__*/React.createElement("svg", _extends({}, (0, _ReactUtils.filterProps)(others, true, 'svg'), {
+    className: layerClass,
+    width: width,
+    height: height,
+    style: style,
+    viewBox: "".concat(svgView.x, " ").concat(svgView.y, " ").concat(svgView.width, " ").concat(svgView.height),
+    ref: ref
+  }), /*#__PURE__*/React.createElement("title", null, title), /*#__PURE__*/React.createElement("desc", null, desc), children);
+});
Index: node_modules/recharts/lib/context/ErrorBarContext.js
===================================================================
--- node_modules/recharts/lib/context/ErrorBarContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/ErrorBarContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ReportErrorBarSettings = ReportErrorBarSettings;
+exports.SetErrorBarContext = SetErrorBarContext;
+exports.useErrorBarContext = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _errorBarSlice = require("../state/errorBarSlice");
+var _hooks = require("../state/hooks");
+var _RegisterGraphicalItemId = require("./RegisterGraphicalItemId");
+var _excluded = ["children"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var noop = () => {};
+var initialContextState = {
+  data: [],
+  xAxisId: 'xAxis-0',
+  yAxisId: 'yAxis-0',
+  dataPointFormatter: () => ({
+    x: 0,
+    y: 0,
+    value: 0
+  }),
+  errorBarOffset: 0
+};
+var ErrorBarContext = /*#__PURE__*/(0, _react.createContext)(initialContextState);
+function SetErrorBarContext(props) {
+  var {
+      children
+    } = props,
+    rest = _objectWithoutProperties(props, _excluded);
+  return /*#__PURE__*/React.createElement(ErrorBarContext.Provider, {
+    value: rest
+  }, children);
+}
+var useErrorBarContext = () => (0, _react.useContext)(ErrorBarContext);
+exports.useErrorBarContext = useErrorBarContext;
+function ReportErrorBarSettings(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var graphicalItemId = (0, _RegisterGraphicalItemId.useGraphicalItemId)();
+  (0, _react.useEffect)(() => {
+    if (graphicalItemId == null) {
+      // ErrorBar outside a graphical item context does not do anything.
+      return noop;
+    }
+    var payload = {
+      itemId: graphicalItemId,
+      errorBar: props
+    };
+    dispatch((0, _errorBarSlice.addErrorBar)(payload));
+    return () => {
+      dispatch((0, _errorBarSlice.removeErrorBar)(payload));
+    };
+  }, [dispatch, graphicalItemId, props]);
+  return null;
+}
Index: node_modules/recharts/lib/context/PanoramaContext.js
===================================================================
--- node_modules/recharts/lib/context/PanoramaContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/PanoramaContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useIsPanorama = exports.PanoramaContextProvider = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var PanoramaContext = /*#__PURE__*/(0, _react.createContext)(null);
+var useIsPanorama = () => (0, _react.useContext)(PanoramaContext) != null;
+exports.useIsPanorama = useIsPanorama;
+var PanoramaContextProvider = _ref => {
+  var {
+    children
+  } = _ref;
+  return /*#__PURE__*/React.createElement(PanoramaContext.Provider, {
+    value: true
+  }, children);
+};
+exports.PanoramaContextProvider = PanoramaContextProvider;
Index: node_modules/recharts/lib/context/RegisterGraphicalItemId.js
===================================================================
--- node_modules/recharts/lib/context/RegisterGraphicalItemId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/RegisterGraphicalItemId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RegisterGraphicalItemId = void 0;
+exports.useGraphicalItemId = useGraphicalItemId;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _useUniqueId = require("../util/useUniqueId");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+var GraphicalItemIdContext = /*#__PURE__*/(0, _react.createContext)(undefined);
+var RegisterGraphicalItemId = _ref => {
+  var {
+    id,
+    type,
+    children
+  } = _ref;
+  var resolvedId = (0, _useUniqueId.useUniqueId)("recharts-".concat(type), id);
+  return /*#__PURE__*/React.createElement(GraphicalItemIdContext.Provider, {
+    value: resolvedId
+  }, children(resolvedId));
+};
+exports.RegisterGraphicalItemId = RegisterGraphicalItemId;
+function useGraphicalItemId() {
+  return (0, _react.useContext)(GraphicalItemIdContext);
+}
Index: node_modules/recharts/lib/context/accessibilityContext.js
===================================================================
--- node_modules/recharts/lib/context/accessibilityContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/accessibilityContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useAccessibilityLayer = void 0;
+var _hooks = require("../state/hooks");
+var useAccessibilityLayer = () => (0, _hooks.useAppSelector)(state => state.rootProps.accessibilityLayer);
+exports.useAccessibilityLayer = useAccessibilityLayer;
Index: node_modules/recharts/lib/context/brushUpdateContext.js
===================================================================
--- node_modules/recharts/lib/context/brushUpdateContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/brushUpdateContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.BrushUpdateDispatchContext = void 0;
+var _react = require("react");
+var BrushUpdateDispatchContext = exports.BrushUpdateDispatchContext = /*#__PURE__*/(0, _react.createContext)(() => {});
Index: node_modules/recharts/lib/context/chartDataContext.js
===================================================================
--- node_modules/recharts/lib/context/chartDataContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/chartDataContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,88 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useDataIndex = exports.useChartData = exports.SetComputedData = exports.ChartDataContextProvider = void 0;
+var _react = require("react");
+var _chartDataSlice = require("../state/chartDataSlice");
+var _hooks = require("../state/hooks");
+var _PanoramaContext = require("./PanoramaContext");
+var ChartDataContextProvider = props => {
+  var {
+    chartData
+  } = props;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  (0, _react.useEffect)(() => {
+    if (isPanorama) {
+      // Panorama mode reuses data from the main chart, so we must not overwrite it here.
+      return () => {
+        // there is nothing to clean up
+      };
+    }
+    dispatch((0, _chartDataSlice.setChartData)(chartData));
+    return () => {
+      dispatch((0, _chartDataSlice.setChartData)(undefined));
+    };
+  }, [chartData, dispatch, isPanorama]);
+  return null;
+};
+exports.ChartDataContextProvider = ChartDataContextProvider;
+var SetComputedData = props => {
+  var {
+    computedData
+  } = props;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _chartDataSlice.setComputedData)(computedData));
+    return () => {
+      dispatch((0, _chartDataSlice.setChartData)(undefined));
+    };
+  }, [computedData, dispatch]);
+  return null;
+};
+exports.SetComputedData = SetComputedData;
+var selectChartData = state => state.chartData.chartData;
+
+/**
+ * "data" is the data of the chart - it has no type because this part of recharts is very flexible.
+ * Basically it's an array of "something" and then there's the dataKey property in various places
+ * that's meant to pull other things away from the data.
+ *
+ * Some charts have `data` defined on the chart root, and they will return the array through this hook.
+ * For example: <ComposedChart data={data} />.
+ *
+ * Other charts, such as Pie, have data defined on individual graphical elements.
+ * These charts will return `undefined` through this hook, and you need to read the data from children.
+ * For example: <PieChart><Pie data={data} />
+ *
+ * Some charts also allow setting both - data on the parent, and data on the children at the same time!
+ * However, this particular selector will only return the ones defined on the parent.
+ *
+ * @deprecated use one of the other selectors instead - which one, depends on how do you identify the applicable graphical items.
+ *
+ * @return data array for some charts and undefined for other
+ */
+var useChartData = () => (0, _hooks.useAppSelector)(selectChartData);
+exports.useChartData = useChartData;
+var selectDataIndex = state => {
+  var {
+    dataStartIndex,
+    dataEndIndex
+  } = state.chartData;
+  return {
+    startIndex: dataStartIndex,
+    endIndex: dataEndIndex
+  };
+};
+
+/**
+ * startIndex and endIndex are data boundaries, set through Brush.
+ *
+ * @return object with startIndex and endIndex
+ */
+var useDataIndex = () => {
+  return (0, _hooks.useAppSelector)(selectDataIndex);
+};
+exports.useDataIndex = useDataIndex;
Index: node_modules/recharts/lib/context/chartLayoutContext.js
===================================================================
--- node_modules/recharts/lib/context/chartLayoutContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/chartLayoutContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,133 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useViewBox = exports.useOffsetInternal = exports.useMargin = exports.useChartWidth = exports.useChartLayout = exports.useChartHeight = exports.selectChartLayout = exports.ReportChartSize = exports.ReportChartMargin = void 0;
+var _react = require("react");
+var _hooks = require("../state/hooks");
+var _layoutSlice = require("../state/layoutSlice");
+var _selectChartOffsetInternal = require("../state/selectors/selectChartOffsetInternal");
+var _containerSelectors = require("../state/selectors/containerSelectors");
+var _PanoramaContext = require("./PanoramaContext");
+var _brushSelectors = require("../state/selectors/brushSelectors");
+var useViewBox = () => {
+  var _useAppSelector;
+  var panorama = (0, _PanoramaContext.useIsPanorama)();
+  var rootViewBox = (0, _hooks.useAppSelector)(_selectChartOffsetInternal.selectChartViewBox);
+  var brushDimensions = (0, _hooks.useAppSelector)(_brushSelectors.selectBrushDimensions);
+  var brushPadding = (_useAppSelector = (0, _hooks.useAppSelector)(_brushSelectors.selectBrushSettings)) === null || _useAppSelector === void 0 ? void 0 : _useAppSelector.padding;
+  if (!panorama || !brushDimensions || !brushPadding) {
+    return rootViewBox;
+  }
+  return {
+    width: brushDimensions.width - brushPadding.left - brushPadding.right,
+    height: brushDimensions.height - brushPadding.top - brushPadding.bottom,
+    x: brushPadding.left,
+    y: brushPadding.top
+  };
+};
+exports.useViewBox = useViewBox;
+var manyComponentsThrowErrorsIfOffsetIsUndefined = {
+  top: 0,
+  bottom: 0,
+  left: 0,
+  right: 0,
+  width: 0,
+  height: 0,
+  brushBottom: 0
+};
+/**
+ * For internal use only. If you want this information, `import { useOffset } from 'recharts'` instead.
+ *
+ * Returns the offset of the chart in pixels.
+ *
+ * @returns {ChartOffsetInternal} The offset of the chart in pixels, or a default value if not in a chart context.
+ */
+var useOffsetInternal = () => {
+  var _useAppSelector2;
+  return (_useAppSelector2 = (0, _hooks.useAppSelector)(_selectChartOffsetInternal.selectChartOffsetInternal)) !== null && _useAppSelector2 !== void 0 ? _useAppSelector2 : manyComponentsThrowErrorsIfOffsetIsUndefined;
+};
+
+/**
+ * Returns the width of the chart in pixels.
+ *
+ * If you are using chart with hardcoded `width` prop, then the width returned will be the same
+ * as the `width` prop on the main chart element.
+ *
+ * If you are using a chart with a `ResponsiveContainer`, the width will be the size of the chart
+ * as the ResponsiveContainer has decided it would be.
+ *
+ * If the chart has any axes or legend, the `width` will be the size of the chart
+ * including the axes and legend. Meaning: adding axes and legend will not change the width.
+ *
+ * The dimensions do not scale, meaning as user zoom in and out, the width number will not change
+ * as the chart gets visually larger or smaller.
+ *
+ * Returns `undefined` if used outside a chart context.
+ *
+ * @returns {number | undefined} The width of the chart in pixels, or `undefined` if not in a chart context.
+ */
+exports.useOffsetInternal = useOffsetInternal;
+var useChartWidth = () => {
+  return (0, _hooks.useAppSelector)(_containerSelectors.selectChartWidth);
+};
+
+/**
+ * Returns the height of the chart in pixels.
+ *
+ * If you are using chart with hardcoded `height` props, then the height returned will be the same
+ * as the `height` prop on the main chart element.
+ *
+ * If you are using a chart with a `ResponsiveContainer`, the height will be the size of the chart
+ * as the ResponsiveContainer has decided it would be.
+ *
+ * If the chart has any axes or legend, the `height` will be the size of the chart
+ * including the axes and legend. Meaning: adding axes and legend will not change the height.
+ *
+ * The dimensions do not scale, meaning as user zoom in and out, the height number will not change
+ * as the chart gets visually larger or smaller.
+ *
+ * Returns `undefined` if used outside a chart context.
+ *
+ * @returns {number | undefined} The height of the chart in pixels, or `undefined` if not in a chart context.
+ */
+exports.useChartWidth = useChartWidth;
+var useChartHeight = () => {
+  return (0, _hooks.useAppSelector)(_containerSelectors.selectChartHeight);
+};
+exports.useChartHeight = useChartHeight;
+var manyComponentsThrowErrorsIfMarginIsUndefined = {
+  top: 0,
+  right: 0,
+  bottom: 0,
+  left: 0
+};
+var useMargin = () => {
+  var _useAppSelector3;
+  return (_useAppSelector3 = (0, _hooks.useAppSelector)(state => state.layout.margin)) !== null && _useAppSelector3 !== void 0 ? _useAppSelector3 : manyComponentsThrowErrorsIfMarginIsUndefined;
+};
+exports.useMargin = useMargin;
+var selectChartLayout = state => state.layout.layoutType;
+exports.selectChartLayout = selectChartLayout;
+var useChartLayout = () => (0, _hooks.useAppSelector)(selectChartLayout);
+exports.useChartLayout = useChartLayout;
+var ReportChartSize = props => {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _layoutSlice.setChartSize)(props));
+  }, [dispatch, props]);
+  return null;
+};
+exports.ReportChartSize = ReportChartSize;
+var ReportChartMargin = _ref => {
+  var {
+    margin
+  } = _ref;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _layoutSlice.setMargin)(margin));
+  }, [dispatch, margin]);
+  return null;
+};
+exports.ReportChartMargin = ReportChartMargin;
Index: node_modules/recharts/lib/context/legendPayloadContext.js
===================================================================
--- node_modules/recharts/lib/context/legendPayloadContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/legendPayloadContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useLegendPayload = useLegendPayload;
+var _hooks = require("../state/hooks");
+var _legendSelectors = require("../state/selectors/legendSelectors");
+/**
+ * Use this hook in Legend, or anywhere else where you want to read the current Legend items.
+ * @return all Legend items ready to be rendered
+ */
+function useLegendPayload() {
+  return (0, _hooks.useAppSelector)(_legendSelectors.selectLegendPayload);
+}
Index: node_modules/recharts/lib/context/legendPortalContext.js
===================================================================
--- node_modules/recharts/lib/context/legendPortalContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/legendPortalContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useLegendPortal = exports.LegendPortalContext = void 0;
+var _react = require("react");
+var LegendPortalContext = exports.LegendPortalContext = /*#__PURE__*/(0, _react.createContext)(null);
+var useLegendPortal = () => (0, _react.useContext)(LegendPortalContext);
+exports.useLegendPortal = useLegendPortal;
Index: node_modules/recharts/lib/context/tooltipContext.js
===================================================================
--- node_modules/recharts/lib/context/tooltipContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/tooltipContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useMouseLeaveItemDispatch = exports.useMouseEnterItemDispatch = exports.useMouseClickItemDispatch = void 0;
+var _hooks = require("../state/hooks");
+var _tooltipSlice = require("../state/tooltipSlice");
+var useMouseEnterItemDispatch = (onMouseEnterFromProps, dataKey) => {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  return (data, index) => event => {
+    onMouseEnterFromProps === null || onMouseEnterFromProps === void 0 || onMouseEnterFromProps(data, index, event);
+    dispatch((0, _tooltipSlice.setActiveMouseOverItemIndex)({
+      activeIndex: String(index),
+      activeDataKey: dataKey,
+      activeCoordinate: data.tooltipPosition
+    }));
+  };
+};
+exports.useMouseEnterItemDispatch = useMouseEnterItemDispatch;
+var useMouseLeaveItemDispatch = onMouseLeaveFromProps => {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  return (data, index) => event => {
+    onMouseLeaveFromProps === null || onMouseLeaveFromProps === void 0 || onMouseLeaveFromProps(data, index, event);
+    dispatch((0, _tooltipSlice.mouseLeaveItem)());
+  };
+};
+exports.useMouseLeaveItemDispatch = useMouseLeaveItemDispatch;
+var useMouseClickItemDispatch = (onMouseClickFromProps, dataKey) => {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  return (data, index) => event => {
+    onMouseClickFromProps === null || onMouseClickFromProps === void 0 || onMouseClickFromProps(data, index, event);
+    dispatch((0, _tooltipSlice.setActiveClickItemIndex)({
+      activeIndex: String(index),
+      activeDataKey: dataKey,
+      activeCoordinate: data.tooltipPosition
+    }));
+  };
+};
+exports.useMouseClickItemDispatch = useMouseClickItemDispatch;
Index: node_modules/recharts/lib/context/tooltipPortalContext.js
===================================================================
--- node_modules/recharts/lib/context/tooltipPortalContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/tooltipPortalContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useTooltipPortal = exports.TooltipPortalContext = void 0;
+var _react = require("react");
+var TooltipPortalContext = exports.TooltipPortalContext = /*#__PURE__*/(0, _react.createContext)(null);
+var useTooltipPortal = () => (0, _react.useContext)(TooltipPortalContext);
+exports.useTooltipPortal = useTooltipPortal;
Index: node_modules/recharts/lib/context/useTooltipAxis.js
===================================================================
--- node_modules/recharts/lib/context/useTooltipAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/context/useTooltipAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useTooltipAxisBandSize = exports.useTooltipAxis = void 0;
+var _hooks = require("../state/hooks");
+var _ChartUtils = require("../util/ChartUtils");
+var _tooltipSelectors = require("../state/selectors/tooltipSelectors");
+var _selectTooltipAxis = require("../state/selectors/selectTooltipAxis");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var useTooltipAxis = () => (0, _hooks.useAppSelector)(_selectTooltipAxis.selectTooltipAxis);
+exports.useTooltipAxis = useTooltipAxis;
+var useTooltipAxisBandSize = () => {
+  var tooltipAxis = useTooltipAxis();
+  var tooltipTicks = (0, _hooks.useAppSelector)(_tooltipSelectors.selectTooltipAxisTicks);
+  var tooltipAxisScale = (0, _hooks.useAppSelector)(_tooltipSelectors.selectTooltipAxisScale);
+  return (0, _ChartUtils.getBandSizeOfAxis)(_objectSpread(_objectSpread({}, tooltipAxis), {}, {
+    scale: tooltipAxisScale
+  }), tooltipTicks);
+};
+exports.useTooltipAxisBandSize = useTooltipAxisBandSize;
Index: node_modules/recharts/lib/hooks.js
===================================================================
--- node_modules/recharts/lib/hooks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/hooks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,81 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useYAxis = exports.useXAxis = exports.usePlotArea = exports.useOffset = exports.useActiveTooltipLabel = exports.useActiveTooltipDataPoints = void 0;
+var _axisSelectors = require("./state/selectors/axisSelectors");
+var _hooks = require("./state/hooks");
+var _PanoramaContext = require("./context/PanoramaContext");
+var _tooltipSelectors = require("./state/selectors/tooltipSelectors");
+var _selectChartOffset = require("./state/selectors/selectChartOffset");
+var _selectPlotArea = require("./state/selectors/selectPlotArea");
+var useXAxis = xAxisId => {
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  return (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisWithScale)(state, 'xAxis', xAxisId, isPanorama));
+};
+exports.useXAxis = useXAxis;
+var useYAxis = yAxisId => {
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  return (0, _hooks.useAppSelector)(state => (0, _axisSelectors.selectAxisWithScale)(state, 'yAxis', yAxisId, isPanorama));
+};
+
+/**
+ * Returns the active tooltip label. The label is one of the values from the chart data,
+ * and is used to display in the tooltip content.
+ *
+ * Returns undefined if there is no active user interaction or if used outside a chart context
+ *
+ * @returns string | undefined
+ */
+exports.useYAxis = useYAxis;
+var useActiveTooltipLabel = () => {
+  return (0, _hooks.useAppSelector)(_tooltipSelectors.selectActiveLabel);
+};
+
+/**
+ * Offset defines the blank space between the chart and the plot area.
+ * This blank space is occupied by supporting elements like axes, legends, and brushes.
+ * This also includes any margins that might be applied to the chart.
+ *
+ * @returns Offset of the chart in pixels, or undefined if used outside a chart context.
+ */
+exports.useActiveTooltipLabel = useActiveTooltipLabel;
+var useOffset = () => {
+  return (0, _hooks.useAppSelector)(_selectChartOffset.selectChartOffset);
+};
+
+/**
+ * Plot area is the area where the actual chart data is rendered.
+ * This means: bars, lines, scatter points, etc.
+ *
+ * The plot area is calculated based on the chart dimensions and the offset.
+ *
+ * @returns Plot area of the chart in pixels, or undefined if used outside a chart context.
+ */
+exports.useOffset = useOffset;
+var usePlotArea = () => {
+  return (0, _hooks.useAppSelector)(_selectPlotArea.selectPlotArea);
+};
+
+/**
+ * Returns the currently active data points being displayed in the Tooltip.
+ * Active means that it is currently visible; this hook will return `undefined` if there is no current interaction.
+ *
+ * This follows the `<Tooltip />` props, if the Tooltip element is present in the chart.
+ * If there is no `<Tooltip />` then this hook will follow the default Tooltip props.
+ *
+ * Data point is whatever you pass as an input to the chart using the `data={}` prop.
+ *
+ * This returns an array because a chart can have multiple graphical items in it (multiple Lines for example)
+ * and tooltip with `shared={true}` will display all items at the same time.
+ *
+ * Returns undefined when used outside a chart context.
+ *
+ * @returns Data points that are currently visible in a Tooltip
+ */
+exports.usePlotArea = usePlotArea;
+var useActiveTooltipDataPoints = () => {
+  return (0, _hooks.useAppSelector)(_tooltipSelectors.selectActiveTooltipDataPoints);
+};
+exports.useActiveTooltipDataPoints = useActiveTooltipDataPoints;
Index: node_modules/recharts/lib/index.js
===================================================================
--- node_modules/recharts/lib/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,428 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "Area", {
+  enumerable: true,
+  get: function get() {
+    return _Area.Area;
+  }
+});
+Object.defineProperty(exports, "AreaChart", {
+  enumerable: true,
+  get: function get() {
+    return _AreaChart.AreaChart;
+  }
+});
+Object.defineProperty(exports, "Bar", {
+  enumerable: true,
+  get: function get() {
+    return _Bar.Bar;
+  }
+});
+Object.defineProperty(exports, "BarChart", {
+  enumerable: true,
+  get: function get() {
+    return _BarChart.BarChart;
+  }
+});
+Object.defineProperty(exports, "Brush", {
+  enumerable: true,
+  get: function get() {
+    return _Brush.Brush;
+  }
+});
+Object.defineProperty(exports, "CartesianAxis", {
+  enumerable: true,
+  get: function get() {
+    return _CartesianAxis.CartesianAxis;
+  }
+});
+Object.defineProperty(exports, "CartesianGrid", {
+  enumerable: true,
+  get: function get() {
+    return _CartesianGrid.CartesianGrid;
+  }
+});
+Object.defineProperty(exports, "Cell", {
+  enumerable: true,
+  get: function get() {
+    return _Cell.Cell;
+  }
+});
+Object.defineProperty(exports, "ComposedChart", {
+  enumerable: true,
+  get: function get() {
+    return _ComposedChart.ComposedChart;
+  }
+});
+Object.defineProperty(exports, "Cross", {
+  enumerable: true,
+  get: function get() {
+    return _Cross.Cross;
+  }
+});
+Object.defineProperty(exports, "Curve", {
+  enumerable: true,
+  get: function get() {
+    return _Curve.Curve;
+  }
+});
+Object.defineProperty(exports, "Customized", {
+  enumerable: true,
+  get: function get() {
+    return _Customized.Customized;
+  }
+});
+Object.defineProperty(exports, "DefaultLegendContent", {
+  enumerable: true,
+  get: function get() {
+    return _DefaultLegendContent.DefaultLegendContent;
+  }
+});
+Object.defineProperty(exports, "DefaultTooltipContent", {
+  enumerable: true,
+  get: function get() {
+    return _DefaultTooltipContent.DefaultTooltipContent;
+  }
+});
+Object.defineProperty(exports, "Dot", {
+  enumerable: true,
+  get: function get() {
+    return _Dot.Dot;
+  }
+});
+Object.defineProperty(exports, "ErrorBar", {
+  enumerable: true,
+  get: function get() {
+    return _ErrorBar.ErrorBar;
+  }
+});
+Object.defineProperty(exports, "Funnel", {
+  enumerable: true,
+  get: function get() {
+    return _Funnel.Funnel;
+  }
+});
+Object.defineProperty(exports, "FunnelChart", {
+  enumerable: true,
+  get: function get() {
+    return _FunnelChart.FunnelChart;
+  }
+});
+Object.defineProperty(exports, "Global", {
+  enumerable: true,
+  get: function get() {
+    return _Global.Global;
+  }
+});
+Object.defineProperty(exports, "Label", {
+  enumerable: true,
+  get: function get() {
+    return _Label.Label;
+  }
+});
+Object.defineProperty(exports, "LabelList", {
+  enumerable: true,
+  get: function get() {
+    return _LabelList.LabelList;
+  }
+});
+Object.defineProperty(exports, "Layer", {
+  enumerable: true,
+  get: function get() {
+    return _Layer.Layer;
+  }
+});
+Object.defineProperty(exports, "Legend", {
+  enumerable: true,
+  get: function get() {
+    return _Legend.Legend;
+  }
+});
+Object.defineProperty(exports, "Line", {
+  enumerable: true,
+  get: function get() {
+    return _Line.Line;
+  }
+});
+Object.defineProperty(exports, "LineChart", {
+  enumerable: true,
+  get: function get() {
+    return _LineChart.LineChart;
+  }
+});
+Object.defineProperty(exports, "Pie", {
+  enumerable: true,
+  get: function get() {
+    return _Pie.Pie;
+  }
+});
+Object.defineProperty(exports, "PieChart", {
+  enumerable: true,
+  get: function get() {
+    return _PieChart.PieChart;
+  }
+});
+Object.defineProperty(exports, "PolarAngleAxis", {
+  enumerable: true,
+  get: function get() {
+    return _PolarAngleAxis.PolarAngleAxis;
+  }
+});
+Object.defineProperty(exports, "PolarGrid", {
+  enumerable: true,
+  get: function get() {
+    return _PolarGrid.PolarGrid;
+  }
+});
+Object.defineProperty(exports, "PolarRadiusAxis", {
+  enumerable: true,
+  get: function get() {
+    return _PolarRadiusAxis.PolarRadiusAxis;
+  }
+});
+Object.defineProperty(exports, "Polygon", {
+  enumerable: true,
+  get: function get() {
+    return _Polygon.Polygon;
+  }
+});
+Object.defineProperty(exports, "Radar", {
+  enumerable: true,
+  get: function get() {
+    return _Radar.Radar;
+  }
+});
+Object.defineProperty(exports, "RadarChart", {
+  enumerable: true,
+  get: function get() {
+    return _RadarChart.RadarChart;
+  }
+});
+Object.defineProperty(exports, "RadialBar", {
+  enumerable: true,
+  get: function get() {
+    return _RadialBar.RadialBar;
+  }
+});
+Object.defineProperty(exports, "RadialBarChart", {
+  enumerable: true,
+  get: function get() {
+    return _RadialBarChart.RadialBarChart;
+  }
+});
+Object.defineProperty(exports, "Rectangle", {
+  enumerable: true,
+  get: function get() {
+    return _Rectangle.Rectangle;
+  }
+});
+Object.defineProperty(exports, "ReferenceArea", {
+  enumerable: true,
+  get: function get() {
+    return _ReferenceArea.ReferenceArea;
+  }
+});
+Object.defineProperty(exports, "ReferenceDot", {
+  enumerable: true,
+  get: function get() {
+    return _ReferenceDot.ReferenceDot;
+  }
+});
+Object.defineProperty(exports, "ReferenceLine", {
+  enumerable: true,
+  get: function get() {
+    return _ReferenceLine.ReferenceLine;
+  }
+});
+Object.defineProperty(exports, "ResponsiveContainer", {
+  enumerable: true,
+  get: function get() {
+    return _ResponsiveContainer.ResponsiveContainer;
+  }
+});
+Object.defineProperty(exports, "Sankey", {
+  enumerable: true,
+  get: function get() {
+    return _Sankey.Sankey;
+  }
+});
+Object.defineProperty(exports, "Scatter", {
+  enumerable: true,
+  get: function get() {
+    return _Scatter.Scatter;
+  }
+});
+Object.defineProperty(exports, "ScatterChart", {
+  enumerable: true,
+  get: function get() {
+    return _ScatterChart.ScatterChart;
+  }
+});
+Object.defineProperty(exports, "Sector", {
+  enumerable: true,
+  get: function get() {
+    return _Sector.Sector;
+  }
+});
+Object.defineProperty(exports, "SunburstChart", {
+  enumerable: true,
+  get: function get() {
+    return _SunburstChart.SunburstChart;
+  }
+});
+Object.defineProperty(exports, "Surface", {
+  enumerable: true,
+  get: function get() {
+    return _Surface.Surface;
+  }
+});
+Object.defineProperty(exports, "Symbols", {
+  enumerable: true,
+  get: function get() {
+    return _Symbols.Symbols;
+  }
+});
+Object.defineProperty(exports, "Text", {
+  enumerable: true,
+  get: function get() {
+    return _Text.Text;
+  }
+});
+Object.defineProperty(exports, "Tooltip", {
+  enumerable: true,
+  get: function get() {
+    return _Tooltip.Tooltip;
+  }
+});
+Object.defineProperty(exports, "Trapezoid", {
+  enumerable: true,
+  get: function get() {
+    return _Trapezoid.Trapezoid;
+  }
+});
+Object.defineProperty(exports, "Treemap", {
+  enumerable: true,
+  get: function get() {
+    return _Treemap.Treemap;
+  }
+});
+Object.defineProperty(exports, "XAxis", {
+  enumerable: true,
+  get: function get() {
+    return _XAxis.XAxis;
+  }
+});
+Object.defineProperty(exports, "YAxis", {
+  enumerable: true,
+  get: function get() {
+    return _YAxis.YAxis;
+  }
+});
+Object.defineProperty(exports, "ZAxis", {
+  enumerable: true,
+  get: function get() {
+    return _ZAxis.ZAxis;
+  }
+});
+Object.defineProperty(exports, "getNiceTickValues", {
+  enumerable: true,
+  get: function get() {
+    return _getNiceTickValues.getNiceTickValues;
+  }
+});
+Object.defineProperty(exports, "useActiveTooltipDataPoints", {
+  enumerable: true,
+  get: function get() {
+    return _hooks.useActiveTooltipDataPoints;
+  }
+});
+Object.defineProperty(exports, "useActiveTooltipLabel", {
+  enumerable: true,
+  get: function get() {
+    return _hooks.useActiveTooltipLabel;
+  }
+});
+Object.defineProperty(exports, "useChartHeight", {
+  enumerable: true,
+  get: function get() {
+    return _chartLayoutContext.useChartHeight;
+  }
+});
+Object.defineProperty(exports, "useChartWidth", {
+  enumerable: true,
+  get: function get() {
+    return _chartLayoutContext.useChartWidth;
+  }
+});
+Object.defineProperty(exports, "useOffset", {
+  enumerable: true,
+  get: function get() {
+    return _hooks.useOffset;
+  }
+});
+Object.defineProperty(exports, "usePlotArea", {
+  enumerable: true,
+  get: function get() {
+    return _hooks.usePlotArea;
+  }
+});
+var _Surface = require("./container/Surface");
+var _Layer = require("./container/Layer");
+var _Legend = require("./component/Legend");
+var _DefaultLegendContent = require("./component/DefaultLegendContent");
+var _Tooltip = require("./component/Tooltip");
+var _DefaultTooltipContent = require("./component/DefaultTooltipContent");
+var _ResponsiveContainer = require("./component/ResponsiveContainer");
+var _Cell = require("./component/Cell");
+var _Text = require("./component/Text");
+var _Label = require("./component/Label");
+var _LabelList = require("./component/LabelList");
+var _Customized = require("./component/Customized");
+var _Sector = require("./shape/Sector");
+var _Curve = require("./shape/Curve");
+var _Rectangle = require("./shape/Rectangle");
+var _Polygon = require("./shape/Polygon");
+var _Dot = require("./shape/Dot");
+var _Cross = require("./shape/Cross");
+var _Symbols = require("./shape/Symbols");
+var _PolarGrid = require("./polar/PolarGrid");
+var _PolarRadiusAxis = require("./polar/PolarRadiusAxis");
+var _PolarAngleAxis = require("./polar/PolarAngleAxis");
+var _Pie = require("./polar/Pie");
+var _Radar = require("./polar/Radar");
+var _RadialBar = require("./polar/RadialBar");
+var _Brush = require("./cartesian/Brush");
+var _ReferenceLine = require("./cartesian/ReferenceLine");
+var _ReferenceDot = require("./cartesian/ReferenceDot");
+var _ReferenceArea = require("./cartesian/ReferenceArea");
+var _CartesianAxis = require("./cartesian/CartesianAxis");
+var _CartesianGrid = require("./cartesian/CartesianGrid");
+var _Line = require("./cartesian/Line");
+var _Area = require("./cartesian/Area");
+var _Bar = require("./cartesian/Bar");
+var _Scatter = require("./cartesian/Scatter");
+var _XAxis = require("./cartesian/XAxis");
+var _YAxis = require("./cartesian/YAxis");
+var _ZAxis = require("./cartesian/ZAxis");
+var _ErrorBar = require("./cartesian/ErrorBar");
+var _LineChart = require("./chart/LineChart");
+var _BarChart = require("./chart/BarChart");
+var _PieChart = require("./chart/PieChart");
+var _Treemap = require("./chart/Treemap");
+var _Sankey = require("./chart/Sankey");
+var _RadarChart = require("./chart/RadarChart");
+var _ScatterChart = require("./chart/ScatterChart");
+var _AreaChart = require("./chart/AreaChart");
+var _RadialBarChart = require("./chart/RadialBarChart");
+var _ComposedChart = require("./chart/ComposedChart");
+var _SunburstChart = require("./chart/SunburstChart");
+var _Funnel = require("./cartesian/Funnel");
+var _FunnelChart = require("./chart/FunnelChart");
+var _Trapezoid = require("./shape/Trapezoid");
+var _Global = require("./util/Global");
+var _getNiceTickValues = require("./util/scale/getNiceTickValues");
+var _hooks = require("./hooks");
+var _chartLayoutContext = require("./context/chartLayoutContext");
Index: node_modules/recharts/lib/polar/Pie.js
===================================================================
--- node_modules/recharts/lib/polar/Pie.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/polar/Pie.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,541 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Pie = Pie;
+exports.computePieSectors = computePieSectors;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _get = _interopRequireDefault(require("es-toolkit/compat/get"));
+var _clsx = require("clsx");
+var _pieSelectors = require("../state/selectors/pieSelectors");
+var _hooks = require("../state/hooks");
+var _Layer = require("../container/Layer");
+var _Curve = require("../shape/Curve");
+var _Text = require("../component/Text");
+var _Cell = require("../component/Cell");
+var _ReactUtils = require("../util/ReactUtils");
+var _Global = require("../util/Global");
+var _PolarUtils = require("../util/PolarUtils");
+var _DataUtils = require("../util/DataUtils");
+var _ChartUtils = require("../util/ChartUtils");
+var _types = require("../util/types");
+var _ActiveShapeUtils = require("../util/ActiveShapeUtils");
+var _tooltipContext = require("../context/tooltipContext");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _tooltipSelectors = require("../state/selectors/tooltipSelectors");
+var _SetLegendPayload = require("../state/SetLegendPayload");
+var _Constants = require("../util/Constants");
+var _useAnimationId = require("../util/useAnimationId");
+var _resolveDefaultProps2 = require("../util/resolveDefaultProps");
+var _RegisterGraphicalItemId = require("../context/RegisterGraphicalItemId");
+var _SetGraphicalItem = require("../state/SetGraphicalItem");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _JavascriptAnimate = require("../animation/JavascriptAnimate");
+var _excluded = ["onMouseEnter", "onClick", "onMouseLeave"],
+  _excluded2 = ["id"],
+  _excluded3 = ["id"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+
+function SetPiePayloadLegend(props) {
+  var cells = (0, _react.useMemo)(() => (0, _ReactUtils.findAllByType)(props.children, _Cell.Cell), [props.children]);
+  var legendPayload = (0, _hooks.useAppSelector)(state => (0, _pieSelectors.selectPieLegend)(state, props.id, cells));
+  if (legendPayload == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(_SetLegendPayload.SetPolarLegendPayload, {
+    legendPayload: legendPayload
+  });
+}
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    nameKey,
+    sectors,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType
+  } = props;
+  return {
+    dataDefinedOnItem: sectors === null || sectors === void 0 ? void 0 : sectors.map(p => p.tooltipPayload),
+    positions: sectors === null || sectors === void 0 ? void 0 : sectors.map(p => p.tooltipPosition),
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      dataKey,
+      nameKey,
+      name: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '' // why doesn't Pie support unit?
+    }
+  };
+}
+var getTextAnchor = (x, cx) => {
+  if (x > cx) {
+    return 'start';
+  }
+  if (x < cx) {
+    return 'end';
+  }
+  return 'middle';
+};
+var getOuterRadius = (dataPoint, outerRadius, maxPieRadius) => {
+  if (typeof outerRadius === 'function') {
+    return outerRadius(dataPoint);
+  }
+  return (0, _DataUtils.getPercentValue)(outerRadius, maxPieRadius, maxPieRadius * 0.8);
+};
+var parseCoordinateOfPie = (item, offset, dataPoint) => {
+  var {
+    top,
+    left,
+    width,
+    height
+  } = offset;
+  var maxPieRadius = (0, _PolarUtils.getMaxRadius)(width, height);
+  var cx = left + (0, _DataUtils.getPercentValue)(item.cx, width, width / 2);
+  var cy = top + (0, _DataUtils.getPercentValue)(item.cy, height, height / 2);
+  var innerRadius = (0, _DataUtils.getPercentValue)(item.innerRadius, maxPieRadius, 0);
+  var outerRadius = getOuterRadius(dataPoint, item.outerRadius, maxPieRadius);
+  var maxRadius = item.maxRadius || Math.sqrt(width * width + height * height) / 2;
+  return {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    maxRadius
+  };
+};
+var parseDeltaAngle = (startAngle, endAngle) => {
+  var sign = (0, _DataUtils.mathSign)(endAngle - startAngle);
+  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);
+  return sign * deltaAngle;
+};
+var renderLabelLineItem = (option, props) => {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  if (typeof option === 'function') {
+    return option(props);
+  }
+  var className = (0, _clsx.clsx)('recharts-pie-label-line', typeof option !== 'boolean' ? option.className : '');
+  return /*#__PURE__*/React.createElement(_Curve.Curve, _extends({}, props, {
+    type: "linear",
+    className: className
+  }));
+};
+var renderLabelItem = (option, props, value) => {
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    return /*#__PURE__*/React.cloneElement(option, props);
+  }
+  var label = value;
+  if (typeof option === 'function') {
+    label = option(props);
+    if (/*#__PURE__*/React.isValidElement(label)) {
+      return label;
+    }
+  }
+  var className = (0, _clsx.clsx)('recharts-pie-label-text', typeof option !== 'boolean' && typeof option !== 'function' ? option.className : '');
+  return /*#__PURE__*/React.createElement(_Text.Text, _extends({}, props, {
+    alignmentBaseline: "middle",
+    className: className
+  }), label);
+};
+function PieLabels(_ref) {
+  var {
+    sectors,
+    props,
+    showLabels
+  } = _ref;
+  var {
+    label,
+    labelLine,
+    dataKey
+  } = props;
+  if (!showLabels || !label || !sectors) {
+    return null;
+  }
+  var pieProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props);
+  var customLabelProps = (0, _ReactUtils.filterProps)(label, false);
+  var customLabelLineProps = (0, _ReactUtils.filterProps)(labelLine, false);
+  var offsetRadius = typeof label === 'object' && 'offsetRadius' in label && label.offsetRadius || 20;
+  var labels = sectors.map((entry, i) => {
+    var midAngle = (entry.startAngle + entry.endAngle) / 2;
+    var endPoint = (0, _PolarUtils.polarToCartesian)(entry.cx, entry.cy, entry.outerRadius + offsetRadius, midAngle);
+    var labelProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieProps), entry), {}, {
+      stroke: 'none'
+    }, customLabelProps), {}, {
+      index: i,
+      textAnchor: getTextAnchor(endPoint.x, entry.cx)
+    }, endPoint);
+    var lineProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieProps), entry), {}, {
+      fill: 'none',
+      stroke: entry.fill
+    }, customLabelLineProps), {}, {
+      index: i,
+      points: [(0, _PolarUtils.polarToCartesian)(entry.cx, entry.cy, entry.outerRadius, midAngle), endPoint],
+      key: 'line'
+    });
+    return (
+      /*#__PURE__*/
+      // eslint-disable-next-line react/no-array-index-key
+      React.createElement(_Layer.Layer, {
+        key: "label-".concat(entry.startAngle, "-").concat(entry.endAngle, "-").concat(entry.midAngle, "-").concat(i)
+      }, labelLine && renderLabelLineItem(labelLine, lineProps), renderLabelItem(label, labelProps, (0, _ChartUtils.getValueByDataKey)(entry, dataKey)))
+    );
+  });
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-pie-labels"
+  }, labels);
+}
+function PieSectors(props) {
+  var {
+    sectors,
+    activeShape,
+    inactiveShape: inactiveShapeProp,
+    allOtherPieProps,
+    showLabels
+  } = props;
+  var activeIndex = (0, _hooks.useAppSelector)(_tooltipSelectors.selectActiveTooltipIndex);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = allOtherPieProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherPieProps, _excluded);
+  var onMouseEnterFromContext = (0, _tooltipContext.useMouseEnterItemDispatch)(onMouseEnterFromProps, allOtherPieProps.dataKey);
+  var onMouseLeaveFromContext = (0, _tooltipContext.useMouseLeaveItemDispatch)(onMouseLeaveFromProps);
+  var onClickFromContext = (0, _tooltipContext.useMouseClickItemDispatch)(onItemClickFromProps, allOtherPieProps.dataKey);
+  if (sectors == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, sectors.map((entry, i) => {
+    if ((entry === null || entry === void 0 ? void 0 : entry.startAngle) === 0 && (entry === null || entry === void 0 ? void 0 : entry.endAngle) === 0 && sectors.length !== 1) return null;
+    var isSectorActive = activeShape && String(i) === activeIndex;
+    var inactiveShape = activeIndex ? inactiveShapeProp : null;
+    var sectorOptions = isSectorActive ? activeShape : inactiveShape;
+    var sectorProps = _objectSpread(_objectSpread({}, entry), {}, {
+      stroke: entry.stroke,
+      tabIndex: -1,
+      [_Constants.DATA_ITEM_INDEX_ATTRIBUTE_NAME]: i,
+      [_Constants.DATA_ITEM_DATAKEY_ATTRIBUTE_NAME]: allOtherPieProps.dataKey
+    });
+    return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+      tabIndex: -1,
+      className: "recharts-pie-sector"
+    }, (0, _types.adaptEventsOfChild)(restOfAllOtherProps, entry, i), {
+      // @ts-expect-error the types need a bit of attention
+      onMouseEnter: onMouseEnterFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onMouseLeave: onMouseLeaveFromContext(entry, i)
+      // @ts-expect-error the types need a bit of attention
+      ,
+      onClick: onClickFromContext(entry, i)
+      // eslint-disable-next-line react/no-array-index-key
+      ,
+      key: "sector-".concat(entry === null || entry === void 0 ? void 0 : entry.startAngle, "-").concat(entry === null || entry === void 0 ? void 0 : entry.endAngle, "-").concat(entry.midAngle, "-").concat(i)
+    }), /*#__PURE__*/React.createElement(_ActiveShapeUtils.Shape, _extends({
+      option: sectorOptions,
+      isActive: isSectorActive,
+      shapeType: "sector"
+    }, sectorProps)));
+  }), /*#__PURE__*/React.createElement(PieLabels, {
+    sectors: sectors,
+    props: allOtherPieProps,
+    showLabels: showLabels
+  }));
+}
+function computePieSectors(_ref2) {
+  var _pieSettings$paddingA;
+  var {
+    pieSettings,
+    displayedData,
+    cells,
+    offset
+  } = _ref2;
+  var {
+    cornerRadius,
+    startAngle,
+    endAngle,
+    dataKey,
+    nameKey,
+    tooltipType
+  } = pieSettings;
+  var minAngle = Math.abs(pieSettings.minAngle);
+  var deltaAngle = parseDeltaAngle(startAngle, endAngle);
+  var absDeltaAngle = Math.abs(deltaAngle);
+  var paddingAngle = displayedData.length <= 1 ? 0 : (_pieSettings$paddingA = pieSettings.paddingAngle) !== null && _pieSettings$paddingA !== void 0 ? _pieSettings$paddingA : 0;
+  var notZeroItemCount = displayedData.filter(entry => (0, _ChartUtils.getValueByDataKey)(entry, dataKey, 0) !== 0).length;
+  var totalPaddingAngle = (absDeltaAngle >= 360 ? notZeroItemCount : notZeroItemCount - 1) * paddingAngle;
+  var realTotalAngle = absDeltaAngle - notZeroItemCount * minAngle - totalPaddingAngle;
+  var sum = displayedData.reduce((result, entry) => {
+    var val = (0, _ChartUtils.getValueByDataKey)(entry, dataKey, 0);
+    return result + ((0, _DataUtils.isNumber)(val) ? val : 0);
+  }, 0);
+  var sectors;
+  if (sum > 0) {
+    var prev;
+    sectors = displayedData.map((entry, i) => {
+      var val = (0, _ChartUtils.getValueByDataKey)(entry, dataKey, 0);
+      var name = (0, _ChartUtils.getValueByDataKey)(entry, nameKey, i);
+      var coordinate = parseCoordinateOfPie(pieSettings, offset, entry);
+      var percent = ((0, _DataUtils.isNumber)(val) ? val : 0) / sum;
+      var tempStartAngle;
+      var entryWithCellInfo = _objectSpread(_objectSpread({}, entry), cells && cells[i] && cells[i].props);
+      if (i) {
+        tempStartAngle = prev.endAngle + (0, _DataUtils.mathSign)(deltaAngle) * paddingAngle * (val !== 0 ? 1 : 0);
+      } else {
+        tempStartAngle = startAngle;
+      }
+      var tempEndAngle = tempStartAngle + (0, _DataUtils.mathSign)(deltaAngle) * ((val !== 0 ? minAngle : 0) + percent * realTotalAngle);
+      var midAngle = (tempStartAngle + tempEndAngle) / 2;
+      var middleRadius = (coordinate.innerRadius + coordinate.outerRadius) / 2;
+      var tooltipPayload = [{
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        name,
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        value: val,
+        payload: entryWithCellInfo,
+        dataKey,
+        type: tooltipType
+      }];
+      var tooltipPosition = (0, _PolarUtils.polarToCartesian)(coordinate.cx, coordinate.cy, middleRadius, midAngle);
+      prev = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, pieSettings.presentationProps), {}, {
+        percent,
+        cornerRadius,
+        name,
+        tooltipPayload,
+        midAngle,
+        middleRadius,
+        tooltipPosition
+      }, entryWithCellInfo), coordinate), {}, {
+        value: (0, _ChartUtils.getValueByDataKey)(entry, dataKey),
+        startAngle: tempStartAngle,
+        endAngle: tempEndAngle,
+        payload: entryWithCellInfo,
+        paddingAngle: (0, _DataUtils.mathSign)(deltaAngle) * paddingAngle
+      });
+      return prev;
+    });
+  }
+  return sectors;
+}
+function SectorsWithAnimation(_ref3) {
+  var {
+    props,
+    previousSectorsRef
+  } = _ref3;
+  var {
+    sectors,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    activeShape,
+    inactiveShape,
+    onAnimationStart,
+    onAnimationEnd
+  } = props;
+  var animationId = (0, _useAnimationId.useAnimationId)(props, 'recharts-pie-');
+  var prevSectors = previousSectorsRef.current;
+  var [isAnimating, setIsAnimating] = (0, _react.useState)(true);
+  var handleAnimationEnd = (0, _react.useCallback)(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = (0, _react.useCallback)(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(_JavascriptAnimate.JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd,
+    key: animationId
+  }, t => {
+    var stepData = [];
+    var first = sectors && sectors[0];
+    var curAngle = first.startAngle;
+    sectors.forEach((entry, index) => {
+      var prev = prevSectors && prevSectors[index];
+      var paddingAngle = index > 0 ? (0, _get.default)(entry, 'paddingAngle', 0) : 0;
+      if (prev) {
+        var angleIp = (0, _DataUtils.interpolateNumber)(prev.endAngle - prev.startAngle, entry.endAngle - entry.startAngle);
+        var latest = _objectSpread(_objectSpread({}, entry), {}, {
+          startAngle: curAngle + paddingAngle,
+          endAngle: curAngle + angleIp(t) + paddingAngle
+        });
+        stepData.push(latest);
+        curAngle = latest.endAngle;
+      } else {
+        var {
+          endAngle,
+          startAngle
+        } = entry;
+        var interpolatorAngle = (0, _DataUtils.interpolateNumber)(0, endAngle - startAngle);
+        var deltaAngle = interpolatorAngle(t);
+        var _latest = _objectSpread(_objectSpread({}, entry), {}, {
+          startAngle: curAngle + paddingAngle,
+          endAngle: curAngle + deltaAngle + paddingAngle
+        });
+        stepData.push(_latest);
+        curAngle = _latest.endAngle;
+      }
+    });
+
+    // eslint-disable-next-line no-param-reassign
+    previousSectorsRef.current = stepData;
+    return /*#__PURE__*/React.createElement(_Layer.Layer, null, /*#__PURE__*/React.createElement(PieSectors, {
+      sectors: stepData,
+      activeShape: activeShape,
+      inactiveShape: inactiveShape,
+      allOtherPieProps: props,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderSectors(props) {
+  var {
+    sectors,
+    isAnimationActive,
+    activeShape,
+    inactiveShape
+  } = props;
+  var previousSectorsRef = (0, _react.useRef)(null);
+  var prevSectors = previousSectorsRef.current;
+  if (isAnimationActive && sectors && sectors.length && (!prevSectors || prevSectors !== sectors)) {
+    return /*#__PURE__*/React.createElement(SectorsWithAnimation, {
+      props: props,
+      previousSectorsRef: previousSectorsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(PieSectors, {
+    sectors: sectors,
+    activeShape: activeShape,
+    inactiveShape: inactiveShape,
+    allOtherPieProps: props,
+    showLabels: true
+  });
+}
+function PieWithTouchMove(props) {
+  var {
+    hide,
+    className,
+    rootTabIndex
+  } = props;
+  var layerClass = (0, _clsx.clsx)('recharts-pie', className);
+  if (hide) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    tabIndex: rootTabIndex,
+    className: layerClass
+  }, /*#__PURE__*/React.createElement(RenderSectors, props));
+}
+var defaultPieProps = {
+  animationBegin: 400,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  cx: '50%',
+  cy: '50%',
+  dataKey: 'value',
+  endAngle: 360,
+  fill: '#808080',
+  hide: false,
+  innerRadius: 0,
+  isAnimationActive: !_Global.Global.isSsr,
+  labelLine: true,
+  legendType: 'rect',
+  minAngle: 0,
+  nameKey: 'name',
+  outerRadius: '80%',
+  paddingAngle: 0,
+  rootTabIndex: 0,
+  startAngle: 0,
+  stroke: '#fff'
+};
+function PieImpl(props) {
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded2);
+  var cells = (0, _react.useMemo)(() => (0, _ReactUtils.findAllByType)(props.children, _Cell.Cell), [props.children]);
+  var sectors = (0, _hooks.useAppSelector)(state => (0, _pieSelectors.selectPieSectors)(state, id, cells));
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: _objectSpread(_objectSpread({}, props), {}, {
+      sectors
+    })
+  }), /*#__PURE__*/React.createElement(PieWithTouchMove, _extends({}, propsWithoutId, {
+    sectors: sectors
+  })));
+}
+function Pie(outsideProps) {
+  var _resolveDefaultProps = (0, _resolveDefaultProps2.resolveDefaultProps)(outsideProps, defaultPieProps),
+    {
+      id: externalId
+    } = _resolveDefaultProps,
+    propsWithoutId = _objectWithoutProperties(_resolveDefaultProps, _excluded3);
+  var presentationProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(propsWithoutId);
+  return /*#__PURE__*/React.createElement(_RegisterGraphicalItemId.RegisterGraphicalItemId, {
+    id: externalId,
+    type: "pie"
+  }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetGraphicalItem.SetPolarGraphicalItem, {
+    type: "pie",
+    id: id,
+    data: propsWithoutId.data,
+    dataKey: propsWithoutId.dataKey,
+    hide: propsWithoutId.hide,
+    angleAxisId: 0,
+    radiusAxisId: 0,
+    name: propsWithoutId.name,
+    nameKey: propsWithoutId.nameKey,
+    tooltipType: propsWithoutId.tooltipType,
+    legendType: propsWithoutId.legendType,
+    fill: propsWithoutId.fill,
+    cx: propsWithoutId.cx,
+    cy: propsWithoutId.cy,
+    startAngle: propsWithoutId.startAngle,
+    endAngle: propsWithoutId.endAngle,
+    paddingAngle: propsWithoutId.paddingAngle,
+    minAngle: propsWithoutId.minAngle,
+    innerRadius: propsWithoutId.innerRadius,
+    outerRadius: propsWithoutId.outerRadius,
+    cornerRadius: propsWithoutId.cornerRadius
+    // @ts-expect-error we're passing DataKey and other internals as presentationProps
+    ,
+    presentationProps: presentationProps
+  }), /*#__PURE__*/React.createElement(SetPiePayloadLegend, _extends({}, propsWithoutId, {
+    id: id
+  })), /*#__PURE__*/React.createElement(PieImpl, _extends({}, propsWithoutId, {
+    id: id
+  })), propsWithoutId.children));
+}
+Pie.displayName = 'Pie';
Index: node_modules/recharts/lib/polar/PolarAngleAxis.js
===================================================================
--- node_modules/recharts/lib/polar/PolarAngleAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/polar/PolarAngleAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,255 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.PolarAngleAxisWrapper = exports.PolarAngleAxis = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _Layer = require("../container/Layer");
+var _Dot = require("../shape/Dot");
+var _Polygon = require("../shape/Polygon");
+var _Text = require("../component/Text");
+var _types = require("../util/types");
+var _ReactUtils = require("../util/ReactUtils");
+var _PolarUtils = require("../util/PolarUtils");
+var _polarAxisSlice = require("../state/polarAxisSlice");
+var _hooks = require("../state/hooks");
+var _polarScaleSelectors = require("../state/selectors/polarScaleSelectors");
+var _polarAxisSelectors = require("../state/selectors/polarAxisSelectors");
+var _defaultPolarAngleAxisProps = require("./defaultPolarAngleAxisProps");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _excluded = ["children"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var RADIAN = Math.PI / 180;
+var eps = 1e-5;
+
+/**
+ * These are injected from Redux, are required, but cannot be set by user.
+ */
+
+var AXIS_TYPE = 'angleAxis';
+function SetAngleAxisSettings(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var settings = (0, _react.useMemo)(() => {
+    var {
+        children
+      } = props,
+      rest = _objectWithoutProperties(props, _excluded);
+    return rest;
+  }, [props]);
+  var synchronizedSettings = (0, _hooks.useAppSelector)(state => (0, _polarAxisSelectors.selectAngleAxis)(state, settings.id));
+  var settingsAreSynchronized = settings === synchronizedSettings;
+  (0, _react.useEffect)(() => {
+    dispatch((0, _polarAxisSlice.addAngleAxis)(settings));
+    return () => {
+      dispatch((0, _polarAxisSlice.removeAngleAxis)(settings));
+    };
+  }, [dispatch, settings]);
+  if (settingsAreSynchronized) {
+    return props.children;
+  }
+  return null;
+}
+
+/**
+ * Calculate the coordinate of line endpoint
+ * @param data The data if there are ticks
+ * @param props axis settings
+ * @return (x1, y1): The point close to text,
+ *         (x2, y2): The point close to axis
+ */
+var getTickLineCoord = (data, props) => {
+  var {
+    cx,
+    cy,
+    radius,
+    orientation,
+    tickSize
+  } = props;
+  var tickLineSize = tickSize || 8;
+  var p1 = (0, _PolarUtils.polarToCartesian)(cx, cy, radius, data.coordinate);
+  var p2 = (0, _PolarUtils.polarToCartesian)(cx, cy, radius + (orientation === 'inner' ? -1 : 1) * tickLineSize, data.coordinate);
+  return {
+    x1: p1.x,
+    y1: p1.y,
+    x2: p2.x,
+    y2: p2.y
+  };
+};
+
+/**
+ * Get the text-anchor of each tick
+ * @param data Data of ticks
+ * @param orientation of the axis ticks
+ * @return text-anchor
+ */
+var getTickTextAnchor = (data, orientation) => {
+  var cos = Math.cos(-data.coordinate * RADIAN);
+  if (cos > eps) {
+    return orientation === 'outer' ? 'start' : 'end';
+  }
+  if (cos < -eps) {
+    return orientation === 'outer' ? 'end' : 'start';
+  }
+  return 'middle';
+};
+var AxisLine = props => {
+  var {
+    cx,
+    cy,
+    radius,
+    axisLineType,
+    axisLine,
+    ticks
+  } = props;
+  if (!axisLine) {
+    return null;
+  }
+  var axisLineProps = _objectSpread(_objectSpread({}, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props)), {}, {
+    fill: 'none'
+  }, (0, _ReactUtils.filterProps)(axisLine, false));
+  if (axisLineType === 'circle') {
+    // @ts-expect-error wrong SVG element type
+    return /*#__PURE__*/React.createElement(_Dot.Dot, _extends({
+      className: "recharts-polar-angle-axis-line"
+    }, axisLineProps, {
+      cx: cx,
+      cy: cy,
+      r: radius
+    }));
+  }
+  var points = ticks.map(entry => (0, _PolarUtils.polarToCartesian)(cx, cy, radius, entry.coordinate));
+
+  // @ts-expect-error wrong SVG element type
+  return /*#__PURE__*/React.createElement(_Polygon.Polygon, _extends({
+    className: "recharts-polar-angle-axis-line"
+  }, axisLineProps, {
+    points: points
+  }));
+};
+var TickItemText = _ref => {
+  var {
+    tick,
+    tickProps,
+    value
+  } = _ref;
+  if (!tick) {
+    return null;
+  }
+  if (/*#__PURE__*/React.isValidElement(tick)) {
+    // @ts-expect-error element cloning makes typescript unhappy and me too
+    return /*#__PURE__*/React.cloneElement(tick, tickProps);
+  }
+  if (typeof tick === 'function') {
+    return tick(tickProps);
+  }
+  return /*#__PURE__*/React.createElement(_Text.Text, _extends({}, tickProps, {
+    className: "recharts-polar-angle-axis-tick-value"
+  }), value);
+};
+var Ticks = props => {
+  var {
+    tick,
+    tickLine,
+    tickFormatter,
+    stroke,
+    ticks
+  } = props;
+  var axisProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props);
+  var customTickProps = (0, _ReactUtils.filterProps)(tick, false);
+  var tickLineProps = _objectSpread(_objectSpread({}, axisProps), {}, {
+    fill: 'none'
+  }, (0, _ReactUtils.filterProps)(tickLine, false));
+  var items = ticks.map((entry, i) => {
+    var lineCoord = getTickLineCoord(entry, props);
+    var textAnchor = getTickTextAnchor(entry, props.orientation);
+    var tickProps = _objectSpread(_objectSpread(_objectSpread({}, axisProps), {}, {
+      textAnchor,
+      stroke: 'none',
+      fill: stroke
+    }, customTickProps), {}, {
+      index: i,
+      payload: entry,
+      x: lineCoord.x2,
+      y: lineCoord.y2
+    });
+    return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+      className: (0, _clsx.clsx)('recharts-polar-angle-axis-tick', (0, _PolarUtils.getTickClassName)(tick)),
+      key: "tick-".concat(entry.coordinate)
+    }, (0, _types.adaptEventsOfChild)(props, entry, i)), tickLine && /*#__PURE__*/React.createElement("line", _extends({
+      className: "recharts-polar-angle-axis-tick-line"
+    }, tickLineProps, lineCoord)), /*#__PURE__*/React.createElement(TickItemText, {
+      tick: tick,
+      tickProps: tickProps,
+      value: tickFormatter ? tickFormatter(entry.value, i) : entry.value
+    }));
+  });
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-polar-angle-axis-ticks"
+  }, items);
+};
+var PolarAngleAxisWrapper = defaultsAndInputs => {
+  var {
+    angleAxisId
+  } = defaultsAndInputs;
+  var viewBox = (0, _hooks.useAppSelector)(_polarAxisSelectors.selectPolarViewBox);
+  var scale = (0, _hooks.useAppSelector)(state => (0, _polarScaleSelectors.selectPolarAxisScale)(state, 'angleAxis', angleAxisId));
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var ticks = (0, _hooks.useAppSelector)(state => (0, _polarScaleSelectors.selectPolarAxisTicks)(state, 'angleAxis', angleAxisId, isPanorama));
+  if (viewBox == null || !ticks || !ticks.length) {
+    return null;
+  }
+  var props = _objectSpread(_objectSpread(_objectSpread({}, defaultsAndInputs), {}, {
+    scale
+  }, viewBox), {}, {
+    radius: viewBox.outerRadius
+  });
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: (0, _clsx.clsx)('recharts-polar-angle-axis', AXIS_TYPE, props.className)
+  }, /*#__PURE__*/React.createElement(AxisLine, _extends({}, props, {
+    ticks: ticks
+  })), /*#__PURE__*/React.createElement(Ticks, _extends({}, props, {
+    ticks: ticks
+  })));
+};
+exports.PolarAngleAxisWrapper = PolarAngleAxisWrapper;
+class PolarAngleAxis extends _react.PureComponent {
+  render() {
+    if (this.props.radius <= 0) return null;
+    return /*#__PURE__*/React.createElement(SetAngleAxisSettings, {
+      id: this.props.angleAxisId,
+      scale: this.props.scale,
+      type: this.props.type,
+      dataKey: this.props.dataKey,
+      unit: undefined,
+      name: this.props.name,
+      allowDuplicatedCategory: false // Ignoring the prop on purpose because axis calculation behaves as if it was false and Tooltip requires it to be true.
+      ,
+      allowDataOverflow: false,
+      reversed: this.props.reversed,
+      includeHidden: false,
+      allowDecimals: this.props.allowDecimals,
+      tickCount: this.props.tickCount
+      // @ts-expect-error the type does not match. Is RadiusAxis really expecting what it says?
+      ,
+      ticks: this.props.ticks,
+      tick: this.props.tick,
+      domain: this.props.domain
+    }, /*#__PURE__*/React.createElement(PolarAngleAxisWrapper, this.props));
+  }
+}
+exports.PolarAngleAxis = PolarAngleAxis;
+_defineProperty(PolarAngleAxis, "displayName", 'PolarAngleAxis');
+_defineProperty(PolarAngleAxis, "axisType", AXIS_TYPE);
+_defineProperty(PolarAngleAxis, "defaultProps", _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps);
Index: node_modules/recharts/lib/polar/PolarGrid.js
===================================================================
--- node_modules/recharts/lib/polar/PolarGrid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/polar/PolarGrid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,200 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.PolarGrid = void 0;
+var _clsx = require("clsx");
+var React = _interopRequireWildcard(require("react"));
+var _PolarUtils = require("../util/PolarUtils");
+var _hooks = require("../state/hooks");
+var _polarGridSelectors = require("../state/selectors/polarGridSelectors");
+var _polarAxisSelectors = require("../state/selectors/polarAxisSelectors");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _excluded = ["gridType", "radialLines", "angleAxisId", "radiusAxisId", "cx", "cy", "innerRadius", "outerRadius"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var getPolygonPath = (radius, cx, cy, polarAngles) => {
+  var path = '';
+  polarAngles.forEach((angle, i) => {
+    var point = (0, _PolarUtils.polarToCartesian)(cx, cy, radius, angle);
+    if (i) {
+      path += "L ".concat(point.x, ",").concat(point.y);
+    } else {
+      path += "M ".concat(point.x, ",").concat(point.y);
+    }
+  });
+  path += 'Z';
+  return path;
+};
+
+// Draw axis of radial line
+var PolarAngles = props => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    polarAngles,
+    radialLines
+  } = props;
+  if (!polarAngles || !polarAngles.length || !radialLines) {
+    return null;
+  }
+  var polarAnglesProps = _objectSpread({
+    stroke: '#ccc'
+  }, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props));
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-polar-grid-angle"
+  }, polarAngles.map(entry => {
+    var start = (0, _PolarUtils.polarToCartesian)(cx, cy, innerRadius, entry);
+    var end = (0, _PolarUtils.polarToCartesian)(cx, cy, outerRadius, entry);
+    return /*#__PURE__*/React.createElement("line", _extends({}, polarAnglesProps, {
+      key: "line-".concat(entry),
+      x1: start.x,
+      y1: start.y,
+      x2: end.x,
+      y2: end.y
+    }));
+  }));
+};
+
+// Draw concentric circles
+var ConcentricCircle = props => {
+  var {
+    cx,
+    cy,
+    radius,
+    index
+  } = props;
+  var concentricCircleProps = _objectSpread(_objectSpread({
+    stroke: '#ccc'
+  }, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props)), {}, {
+    fill: 'none'
+  });
+  return (
+    /*#__PURE__*/
+    // @ts-expect-error wrong SVG element type
+    React.createElement("circle", _extends({}, concentricCircleProps, {
+      className: (0, _clsx.clsx)('recharts-polar-grid-concentric-circle', props.className),
+      key: "circle-".concat(index),
+      cx: cx,
+      cy: cy,
+      r: radius
+    }))
+  );
+};
+
+// Draw concentric polygons
+var ConcentricPolygon = props => {
+  var {
+    radius,
+    index
+  } = props;
+  var concentricPolygonProps = _objectSpread(_objectSpread({
+    stroke: '#ccc'
+  }, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props)), {}, {
+    fill: 'none'
+  });
+  return /*#__PURE__*/React.createElement("path", _extends({}, concentricPolygonProps, {
+    className: (0, _clsx.clsx)('recharts-polar-grid-concentric-polygon', props.className),
+    key: "path-".concat(index),
+    d: getPolygonPath(radius, props.cx, props.cy, props.polarAngles)
+  }));
+};
+
+// Draw concentric axis
+var ConcentricGridPath = props => {
+  var {
+    polarRadius,
+    gridType
+  } = props;
+  if (!polarRadius || !polarRadius.length) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-polar-grid-concentric"
+  }, polarRadius.map((entry, i) => {
+    var key = i;
+    if (gridType === 'circle') return /*#__PURE__*/React.createElement(ConcentricCircle, _extends({
+      key: key
+    }, props, {
+      radius: entry,
+      index: i
+    }));
+    return /*#__PURE__*/React.createElement(ConcentricPolygon, _extends({
+      key: key
+    }, props, {
+      radius: entry,
+      index: i
+    }));
+  }));
+};
+var PolarGrid = _ref => {
+  var _ref2, _polarViewBox$cx, _ref3, _polarViewBox$cy, _ref4, _polarViewBox$innerRa, _ref5, _polarViewBox$outerRa;
+  var {
+      gridType = 'polygon',
+      radialLines = true,
+      angleAxisId = 0,
+      radiusAxisId = 0,
+      cx: cxFromOutside,
+      cy: cyFromOutside,
+      innerRadius: innerRadiusFromOutside,
+      outerRadius: outerRadiusFromOutside
+    } = _ref,
+    inputs = _objectWithoutProperties(_ref, _excluded);
+  var polarViewBox = (0, _hooks.useAppSelector)(_polarAxisSelectors.selectPolarViewBox);
+  var props = _objectSpread({
+    cx: (_ref2 = (_polarViewBox$cx = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.cx) !== null && _polarViewBox$cx !== void 0 ? _polarViewBox$cx : cxFromOutside) !== null && _ref2 !== void 0 ? _ref2 : 0,
+    cy: (_ref3 = (_polarViewBox$cy = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.cy) !== null && _polarViewBox$cy !== void 0 ? _polarViewBox$cy : cyFromOutside) !== null && _ref3 !== void 0 ? _ref3 : 0,
+    innerRadius: (_ref4 = (_polarViewBox$innerRa = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.innerRadius) !== null && _polarViewBox$innerRa !== void 0 ? _polarViewBox$innerRa : innerRadiusFromOutside) !== null && _ref4 !== void 0 ? _ref4 : 0,
+    outerRadius: (_ref5 = (_polarViewBox$outerRa = polarViewBox === null || polarViewBox === void 0 ? void 0 : polarViewBox.outerRadius) !== null && _polarViewBox$outerRa !== void 0 ? _polarViewBox$outerRa : outerRadiusFromOutside) !== null && _ref5 !== void 0 ? _ref5 : 0
+  }, inputs);
+  var {
+    polarAngles: polarAnglesInput,
+    polarRadius: polarRadiusInput,
+    cx,
+    cy,
+    innerRadius,
+    outerRadius
+  } = props;
+  var polarAnglesFromRedux = (0, _hooks.useAppSelector)(state => (0, _polarGridSelectors.selectPolarGridAngles)(state, angleAxisId));
+  var polarRadiiFromRedux = (0, _hooks.useAppSelector)(state => (0, _polarGridSelectors.selectPolarGridRadii)(state, radiusAxisId));
+  var polarAngles = Array.isArray(polarAnglesInput) ? polarAnglesInput : polarAnglesFromRedux;
+  var polarRadius = Array.isArray(polarRadiusInput) ? polarRadiusInput : polarRadiiFromRedux;
+  if (outerRadius <= 0 || polarAngles == null || polarRadius == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement("g", {
+    className: "recharts-polar-grid"
+  }, /*#__PURE__*/React.createElement(PolarAngles, _extends({
+    cx: cx,
+    cy: cy,
+    innerRadius: innerRadius,
+    outerRadius: outerRadius,
+    gridType: gridType,
+    radialLines: radialLines
+  }, props, {
+    polarAngles: polarAngles,
+    polarRadius: polarRadius
+  })), /*#__PURE__*/React.createElement(ConcentricGridPath, _extends({
+    cx: cx,
+    cy: cy,
+    innerRadius: innerRadius,
+    outerRadius: outerRadius,
+    gridType: gridType,
+    radialLines: radialLines
+  }, props, {
+    polarAngles: polarAngles,
+    polarRadius: polarRadius
+  })));
+};
+exports.PolarGrid = PolarGrid;
+PolarGrid.displayName = 'PolarGrid';
Index: node_modules/recharts/lib/polar/PolarRadiusAxis.js
===================================================================
--- node_modules/recharts/lib/polar/PolarRadiusAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/polar/PolarRadiusAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,210 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.PolarRadiusAxisWrapper = exports.PolarRadiusAxis = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _maxBy = _interopRequireDefault(require("es-toolkit/compat/maxBy"));
+var _minBy = _interopRequireDefault(require("es-toolkit/compat/minBy"));
+var _clsx = require("clsx");
+var _Text = require("../component/Text");
+var _Label = require("../component/Label");
+var _Layer = require("../container/Layer");
+var _PolarUtils = require("../util/PolarUtils");
+var _types = require("../util/types");
+var _ReactUtils = require("../util/ReactUtils");
+var _polarAxisSlice = require("../state/polarAxisSlice");
+var _hooks = require("../state/hooks");
+var _polarScaleSelectors = require("../state/selectors/polarScaleSelectors");
+var _polarAxisSelectors = require("../state/selectors/polarAxisSelectors");
+var _defaultPolarRadiusAxisProps = require("./defaultPolarRadiusAxisProps");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _excluded = ["cx", "cy", "angle", "axisLine"],
+  _excluded2 = ["angle", "tickFormatter", "stroke", "tick"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var AXIS_TYPE = 'radiusAxis';
+function SetRadiusAxisSettings(settings) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _polarAxisSlice.addRadiusAxis)(settings));
+    return () => {
+      dispatch((0, _polarAxisSlice.removeRadiusAxis)(settings));
+    };
+  });
+  return null;
+}
+
+/**
+ * Calculate the coordinate of tick
+ * @param coordinate The radius of tick
+ * @param angle from props
+ * @param cx from chart
+ * @param cy from chart
+ * @return (x, y)
+ */
+var getTickValueCoord = (_ref, angle, cx, cy) => {
+  var {
+    coordinate
+  } = _ref;
+  return (0, _PolarUtils.polarToCartesian)(cx, cy, coordinate, angle);
+};
+var getTickTextAnchor = orientation => {
+  var textAnchor;
+  switch (orientation) {
+    case 'left':
+      textAnchor = 'end';
+      break;
+    case 'right':
+      textAnchor = 'start';
+      break;
+    default:
+      textAnchor = 'middle';
+      break;
+  }
+  return textAnchor;
+};
+var getViewBox = (angle, cx, cy, ticks) => {
+  var maxRadiusTick = (0, _maxBy.default)(ticks, entry => entry.coordinate || 0);
+  var minRadiusTick = (0, _minBy.default)(ticks, entry => entry.coordinate || 0);
+  return {
+    cx,
+    cy,
+    startAngle: angle,
+    endAngle: angle,
+    innerRadius: minRadiusTick.coordinate || 0,
+    outerRadius: maxRadiusTick.coordinate || 0
+  };
+};
+var renderAxisLine = (props, ticks) => {
+  var {
+      cx,
+      cy,
+      angle,
+      axisLine
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  var extent = ticks.reduce((result, entry) => [Math.min(result[0], entry.coordinate), Math.max(result[1], entry.coordinate)], [Infinity, -Infinity]);
+  var point0 = (0, _PolarUtils.polarToCartesian)(cx, cy, extent[0], angle);
+  var point1 = (0, _PolarUtils.polarToCartesian)(cx, cy, extent[1], angle);
+  var axisLineProps = _objectSpread(_objectSpread(_objectSpread({}, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(others)), {}, {
+    fill: 'none'
+  }, (0, _ReactUtils.filterProps)(axisLine, false)), {}, {
+    x1: point0.x,
+    y1: point0.y,
+    x2: point1.x,
+    y2: point1.y
+  });
+
+  // @ts-expect-error wrong SVG element type
+  return /*#__PURE__*/React.createElement("line", _extends({
+    className: "recharts-polar-radius-axis-line"
+  }, axisLineProps));
+};
+var renderTickItem = (option, tickProps, value) => {
+  var tickItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    tickItem = /*#__PURE__*/React.cloneElement(option, tickProps);
+  } else if (typeof option === 'function') {
+    tickItem = option(tickProps);
+  } else {
+    tickItem = /*#__PURE__*/React.createElement(_Text.Text, _extends({}, tickProps, {
+      className: "recharts-polar-radius-axis-tick-value"
+    }), value);
+  }
+  return tickItem;
+};
+var renderTicks = (props, ticks) => {
+  var {
+      angle,
+      tickFormatter,
+      stroke,
+      tick
+    } = props,
+    others = _objectWithoutProperties(props, _excluded2);
+  var textAnchor = getTickTextAnchor(props.orientation);
+  var axisProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(others);
+  var customTickProps = (0, _ReactUtils.filterProps)(tick, false);
+  var items = ticks.map((entry, i) => {
+    var coord = getTickValueCoord(entry, props.angle, props.cx, props.cy);
+    var tickProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
+      textAnchor,
+      transform: "rotate(".concat(90 - angle, ", ").concat(coord.x, ", ").concat(coord.y, ")")
+    }, axisProps), {}, {
+      stroke: 'none',
+      fill: stroke
+    }, customTickProps), {}, {
+      index: i
+    }, coord), {}, {
+      payload: entry
+    });
+    return /*#__PURE__*/React.createElement(_Layer.Layer, _extends({
+      className: (0, _clsx.clsx)('recharts-polar-radius-axis-tick', (0, _PolarUtils.getTickClassName)(tick)),
+      key: "tick-".concat(entry.coordinate)
+    }, (0, _types.adaptEventsOfChild)(props, entry, i)), renderTickItem(tick, tickProps, tickFormatter ? tickFormatter(entry.value, i) : entry.value));
+  });
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-polar-radius-axis-ticks"
+  }, items);
+};
+var PolarRadiusAxisWrapper = defaultsAndInputs => {
+  var {
+    radiusAxisId
+  } = defaultsAndInputs;
+  var viewBox = (0, _hooks.useAppSelector)(_polarAxisSelectors.selectPolarViewBox);
+  var scale = (0, _hooks.useAppSelector)(state => (0, _polarScaleSelectors.selectPolarAxisScale)(state, 'radiusAxis', radiusAxisId));
+  var ticks = (0, _hooks.useAppSelector)(state => (0, _polarScaleSelectors.selectPolarAxisTicks)(state, 'radiusAxis', radiusAxisId, false));
+  if (viewBox == null || !ticks || !ticks.length) {
+    return null;
+  }
+  var props = _objectSpread(_objectSpread(_objectSpread({}, defaultsAndInputs), {}, {
+    scale
+  }, viewBox), {}, {
+    radius: viewBox.outerRadius
+  });
+  var {
+    tick,
+    axisLine
+  } = props;
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: (0, _clsx.clsx)('recharts-polar-radius-axis', AXIS_TYPE, props.className)
+  }, axisLine && renderAxisLine(props, ticks), tick && renderTicks(props, ticks), _Label.Label.renderCallByParent(props, getViewBox(props.angle, props.cx, props.cy, ticks)));
+};
+exports.PolarRadiusAxisWrapper = PolarRadiusAxisWrapper;
+class PolarRadiusAxis extends _react.PureComponent {
+  render() {
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SetRadiusAxisSettings, {
+      domain: this.props.domain,
+      id: this.props.radiusAxisId,
+      scale: this.props.scale,
+      type: this.props.type,
+      dataKey: this.props.dataKey,
+      unit: undefined,
+      name: this.props.name,
+      allowDuplicatedCategory: this.props.allowDuplicatedCategory,
+      allowDataOverflow: this.props.allowDataOverflow,
+      reversed: this.props.reversed,
+      includeHidden: this.props.includeHidden,
+      allowDecimals: this.props.allowDecimals,
+      tickCount: this.props.tickCount
+      // @ts-expect-error the type does not match. Is RadiusAxis really expecting what it says?
+      ,
+      ticks: this.props.ticks,
+      tick: this.props.tick
+    }), /*#__PURE__*/React.createElement(PolarRadiusAxisWrapper, this.props));
+  }
+}
+exports.PolarRadiusAxis = PolarRadiusAxis;
+_defineProperty(PolarRadiusAxis, "displayName", 'PolarRadiusAxis');
+_defineProperty(PolarRadiusAxis, "axisType", AXIS_TYPE);
+_defineProperty(PolarRadiusAxis, "defaultProps", _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps);
Index: node_modules/recharts/lib/polar/Radar.js
===================================================================
--- node_modules/recharts/lib/polar/Radar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/polar/Radar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,416 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Radar = void 0;
+exports.computeRadarPoints = computeRadarPoints;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _last = _interopRequireDefault(require("es-toolkit/compat/last"));
+var _clsx = require("clsx");
+var _DataUtils = require("../util/DataUtils");
+var _Global = require("../util/Global");
+var _PolarUtils = require("../util/PolarUtils");
+var _ChartUtils = require("../util/ChartUtils");
+var _Polygon = require("../shape/Polygon");
+var _Dot = require("../shape/Dot");
+var _Layer = require("../container/Layer");
+var _LabelList = require("../component/LabelList");
+var _ReactUtils = require("../util/ReactUtils");
+var _ActivePoints = require("../component/ActivePoints");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _radarSelectors = require("../state/selectors/radarSelectors");
+var _hooks = require("../state/hooks");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _SetLegendPayload = require("../state/SetLegendPayload");
+var _useAnimationId = require("../util/useAnimationId");
+var _RegisterGraphicalItemId = require("../context/RegisterGraphicalItemId");
+var _SetGraphicalItem = require("../state/SetGraphicalItem");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _JavascriptAnimate = require("../animation/JavascriptAnimate");
+var _excluded = ["id"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } // eslint-disable-next-line max-classes-per-file
+function getLegendItemColor(stroke, fill) {
+  return stroke && stroke !== 'none' ? stroke : fill;
+}
+var computeLegendPayloadFromRadarSectors = props => {
+  var {
+    dataKey,
+    name,
+    stroke,
+    fill,
+    legendType,
+    hide
+  } = props;
+  return [{
+    inactive: hide,
+    dataKey,
+    type: legendType,
+    color: getLegendItemColor(stroke, fill),
+    value: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+    payload: props
+  }];
+};
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    stroke,
+    strokeWidth,
+    fill,
+    name,
+    hide,
+    tooltipType
+  } = props;
+  return {
+    /*
+     * I suppose this here _could_ return props.points
+     * because while Radar does not support item tooltip mode, it _could_ support it.
+     * But when I actually do return the points here, a defaultIndex test starts failing.
+     * So, undefined it is.
+     */
+    dataDefinedOnItem: undefined,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      nameKey: undefined,
+      // RadarChart does not have nameKey unfortunately
+      dataKey,
+      name: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: getLegendItemColor(stroke, fill),
+      unit: '' // why doesn't Radar support unit?
+    }
+  };
+}
+function renderDotItem(option, props) {
+  var dotItem;
+  if (/*#__PURE__*/React.isValidElement(option)) {
+    // @ts-expect-error typescript is unhappy with cloned props type
+    dotItem = /*#__PURE__*/React.cloneElement(option, props);
+  } else if (typeof option === 'function') {
+    dotItem = option(props);
+  } else {
+    dotItem = /*#__PURE__*/React.createElement(_Dot.Dot, _extends({}, props, {
+      className: (0, _clsx.clsx)('recharts-radar-dot', typeof option !== 'boolean' ? option.className : '')
+    }));
+  }
+  return dotItem;
+}
+function computeRadarPoints(_ref) {
+  var {
+    radiusAxis,
+    angleAxis,
+    displayedData,
+    dataKey,
+    bandSize
+  } = _ref;
+  var {
+    cx,
+    cy
+  } = angleAxis;
+  var isRange = false;
+  var points = [];
+  var angleBandSize = angleAxis.type !== 'number' ? bandSize !== null && bandSize !== void 0 ? bandSize : 0 : 0;
+  displayedData.forEach((entry, i) => {
+    var name = (0, _ChartUtils.getValueByDataKey)(entry, angleAxis.dataKey, i);
+    var value = (0, _ChartUtils.getValueByDataKey)(entry, dataKey);
+    var angle = angleAxis.scale(name) + angleBandSize;
+    var pointValue = Array.isArray(value) ? (0, _last.default)(value) : value;
+    var radius = (0, _DataUtils.isNullish)(pointValue) ? undefined : radiusAxis.scale(pointValue);
+    if (Array.isArray(value) && value.length >= 2) {
+      isRange = true;
+    }
+    points.push(_objectSpread(_objectSpread({}, (0, _PolarUtils.polarToCartesian)(cx, cy, radius, angle)), {}, {
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      name,
+      // @ts-expect-error getValueByDataKey does not validate the output type
+      value,
+      cx,
+      cy,
+      radius,
+      angle,
+      payload: entry
+    }));
+  });
+  var baseLinePoints = [];
+  if (isRange) {
+    points.forEach(point => {
+      if (Array.isArray(point.value)) {
+        var baseValue = point.value[0];
+        var radius = (0, _DataUtils.isNullish)(baseValue) ? undefined : radiusAxis.scale(baseValue);
+        baseLinePoints.push(_objectSpread(_objectSpread({}, point), {}, {
+          radius
+        }, (0, _PolarUtils.polarToCartesian)(cx, cy, radius, point.angle)));
+      } else {
+        baseLinePoints.push(point);
+      }
+    });
+  }
+  return {
+    points,
+    isRange,
+    baseLinePoints
+  };
+}
+function Dots(_ref2) {
+  var {
+    points,
+    props
+  } = _ref2;
+  var {
+    dot,
+    dataKey
+  } = props;
+  if (!dot) {
+    return null;
+  }
+  var {
+      id
+    } = props,
+    propsWithoutId = _objectWithoutProperties(props, _excluded);
+  var baseProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(propsWithoutId);
+  var customDotProps = (0, _ReactUtils.filterProps)(dot, true);
+  var dots = points.map((entry, i) => {
+    var dotProps = _objectSpread(_objectSpread(_objectSpread({
+      key: "dot-".concat(i),
+      r: 3
+    }, baseProps), customDotProps), {}, {
+      dataKey,
+      cx: entry.x,
+      cy: entry.y,
+      index: i,
+      payload: entry
+    });
+
+    // @ts-expect-error r type is not compatible
+    return renderDotItem(dot, dotProps);
+  });
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-radar-dots"
+  }, dots);
+}
+function StaticPolygon(_ref3) {
+  var {
+    points,
+    props,
+    showLabels
+  } = _ref3;
+  if (points == null) {
+    return null;
+  }
+  var {
+    shape,
+    isRange,
+    baseLinePoints,
+    connectNulls
+  } = props;
+  var handleMouseEnter = e => {
+    var {
+      onMouseEnter
+    } = props;
+    if (onMouseEnter) {
+      onMouseEnter(props, e);
+    }
+  };
+  var handleMouseLeave = e => {
+    var {
+      onMouseLeave
+    } = props;
+    if (onMouseLeave) {
+      onMouseLeave(props, e);
+    }
+  };
+  var radar;
+  if (/*#__PURE__*/React.isValidElement(shape)) {
+    radar = /*#__PURE__*/React.cloneElement(shape, _objectSpread(_objectSpread({}, props), {}, {
+      points
+    }));
+  } else if (typeof shape === 'function') {
+    radar = shape(_objectSpread(_objectSpread({}, props), {}, {
+      points
+    }));
+  } else {
+    radar = /*#__PURE__*/React.createElement(_Polygon.Polygon, _extends({}, (0, _ReactUtils.filterProps)(props, true), {
+      onMouseEnter: handleMouseEnter,
+      onMouseLeave: handleMouseLeave,
+      points: points,
+      baseLinePoints: isRange ? baseLinePoints : null,
+      connectNulls: connectNulls
+    }));
+  }
+  return /*#__PURE__*/React.createElement(_Layer.Layer, {
+    className: "recharts-radar-polygon"
+  }, radar, /*#__PURE__*/React.createElement(Dots, {
+    props: props,
+    points: points
+  }), showLabels && _LabelList.LabelList.renderCallByParent(props, points));
+}
+function PolygonWithAnimation(_ref4) {
+  var {
+    props,
+    previousPointsRef
+  } = _ref4;
+  var {
+    points,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var prevPoints = previousPointsRef.current;
+  var animationId = (0, _useAnimationId.useAnimationId)(props, 'recharts-radar-');
+  var [isAnimating, setIsAnimating] = (0, _react.useState)(true);
+  var handleAnimationEnd = (0, _react.useCallback)(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = (0, _react.useCallback)(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(_JavascriptAnimate.JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    key: "radar-".concat(animationId),
+    onAnimationEnd: handleAnimationEnd,
+    onAnimationStart: handleAnimationStart
+  }, t => {
+    var prevPointsDiffFactor = prevPoints && prevPoints.length / points.length;
+    var stepData = t === 1 ? points : points.map((entry, index) => {
+      var prev = prevPoints && prevPoints[Math.floor(index * prevPointsDiffFactor)];
+      if (prev) {
+        var _interpolatorX = (0, _DataUtils.interpolateNumber)(prev.x, entry.x);
+        var _interpolatorY = (0, _DataUtils.interpolateNumber)(prev.y, entry.y);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          x: _interpolatorX(t),
+          y: _interpolatorY(t)
+        });
+      }
+      var interpolatorX = (0, _DataUtils.interpolateNumber)(entry.cx, entry.x);
+      var interpolatorY = (0, _DataUtils.interpolateNumber)(entry.cy, entry.y);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        x: interpolatorX(t),
+        y: interpolatorY(t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousPointsRef.current = stepData;
+    }
+    return /*#__PURE__*/React.createElement(StaticPolygon, {
+      points: stepData,
+      props: props,
+      showLabels: !isAnimating
+    });
+  });
+}
+function RenderPolygon(props) {
+  var {
+    points,
+    isAnimationActive,
+    isRange
+  } = props;
+  var previousPointsRef = (0, _react.useRef)(undefined);
+  var prevPoints = previousPointsRef.current;
+  if (isAnimationActive && points && points.length && !isRange && (!prevPoints || prevPoints !== points)) {
+    return /*#__PURE__*/React.createElement(PolygonWithAnimation, {
+      props: props,
+      previousPointsRef: previousPointsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(StaticPolygon, {
+    points: points,
+    props: props,
+    showLabels: true
+  });
+}
+var defaultRadarProps = {
+  angleAxisId: 0,
+  radiusAxisId: 0,
+  hide: false,
+  activeDot: true,
+  dot: false,
+  legendType: 'rect',
+  isAnimationActive: !_Global.Global.isSsr,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease'
+};
+class RadarWithState extends _react.PureComponent {
+  render() {
+    var {
+      hide,
+      className,
+      points
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = (0, _clsx.clsx)('recharts-radar', className);
+    return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: layerClass
+    }, /*#__PURE__*/React.createElement(RenderPolygon, this.props)), /*#__PURE__*/React.createElement(_ActivePoints.ActivePoints, {
+      points: points,
+      mainColor: getLegendItemColor(this.props.stroke, this.props.fill),
+      itemDataKey: this.props.dataKey,
+      activeDot: this.props.activeDot
+    }));
+  }
+}
+function RadarImpl(props) {
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  var radarPoints = (0, _hooks.useAppSelector)(state => (0, _radarSelectors.selectRadarPoints)(state, props.radiusAxisId, props.angleAxisId, isPanorama, props.dataKey));
+  return /*#__PURE__*/React.createElement(RadarWithState, _extends({}, props, {
+    points: radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.points,
+    baseLinePoints: radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.baseLinePoints,
+    isRange: radarPoints === null || radarPoints === void 0 ? void 0 : radarPoints.isRange
+  }));
+}
+class Radar extends _react.PureComponent {
+  render() {
+    return /*#__PURE__*/React.createElement(_RegisterGraphicalItemId.RegisterGraphicalItemId, {
+      id: this.props.id,
+      type: "radar"
+    }, id => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetGraphicalItem.SetPolarGraphicalItem, {
+      type: "radar",
+      id: id,
+      data: undefined // Radar does not have data prop, why?
+      ,
+      dataKey: this.props.dataKey,
+      hide: this.props.hide,
+      angleAxisId: this.props.angleAxisId,
+      radiusAxisId: this.props.radiusAxisId
+    }), /*#__PURE__*/React.createElement(_SetLegendPayload.SetPolarLegendPayload, {
+      legendPayload: computeLegendPayloadFromRadarSectors(this.props)
+    }), /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+      fn: getTooltipEntrySettings,
+      args: this.props
+    }), /*#__PURE__*/React.createElement(RadarImpl, _extends({}, this.props, {
+      id: id
+    }))));
+  }
+}
+exports.Radar = Radar;
+_defineProperty(Radar, "displayName", 'Radar');
+_defineProperty(Radar, "defaultProps", defaultRadarProps);
Index: node_modules/recharts/lib/polar/RadialBar.js
===================================================================
--- node_modules/recharts/lib/polar/RadialBar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/polar/RadialBar.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,433 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RadialBar = void 0;
+exports.computeRadialBarDataItems = computeRadialBarDataItems;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _RadialBarUtils = require("../util/RadialBarUtils");
+var _Layer = require("../container/Layer");
+var _ReactUtils = require("../util/ReactUtils");
+var _Global = require("../util/Global");
+var _LabelList = require("../component/LabelList");
+var _Cell = require("../component/Cell");
+var _DataUtils = require("../util/DataUtils");
+var _ChartUtils = require("../util/ChartUtils");
+var _types = require("../util/types");
+var _tooltipContext = require("../context/tooltipContext");
+var _SetTooltipEntrySettings = require("../state/SetTooltipEntrySettings");
+var _radialBarSelectors = require("../state/selectors/radialBarSelectors");
+var _hooks = require("../state/hooks");
+var _tooltipSelectors = require("../state/selectors/tooltipSelectors");
+var _SetLegendPayload = require("../state/SetLegendPayload");
+var _useAnimationId = require("../util/useAnimationId");
+var _RegisterGraphicalItemId = require("../context/RegisterGraphicalItemId");
+var _SetGraphicalItem = require("../state/SetGraphicalItem");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+var _JavascriptAnimate = require("../animation/JavascriptAnimate");
+var _excluded = ["shape", "activeShape", "cornerRadius", "id"],
+  _excluded2 = ["onMouseEnter", "onClick", "onMouseLeave"],
+  _excluded3 = ["value", "background"]; // eslint-disable-next-line max-classes-per-file
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var STABLE_EMPTY_ARRAY = [];
+function RadialBarSectors(_ref) {
+  var {
+    sectors,
+    allOtherRadialBarProps,
+    showLabels
+  } = _ref;
+  var {
+      shape,
+      activeShape,
+      cornerRadius,
+      id
+    } = allOtherRadialBarProps,
+    others = _objectWithoutProperties(allOtherRadialBarProps, _excluded);
+  var baseProps = (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(others);
+  var activeIndex = (0, _hooks.useAppSelector)(_tooltipSelectors.selectActiveTooltipIndex);
+  var {
+      onMouseEnter: onMouseEnterFromProps,
+      onClick: onItemClickFromProps,
+      onMouseLeave: onMouseLeaveFromProps
+    } = allOtherRadialBarProps,
+    restOfAllOtherProps = _objectWithoutProperties(allOtherRadialBarProps, _excluded2);
+  var onMouseEnterFromContext = (0, _tooltipContext.useMouseEnterItemDispatch)(onMouseEnterFromProps, allOtherRadialBarProps.dataKey);
+  var onMouseLeaveFromContext = (0, _tooltipContext.useMouseLeaveItemDispatch)(onMouseLeaveFromProps);
+  var onClickFromContext = (0, _tooltipContext.useMouseClickItemDispatch)(onItemClickFromProps, allOtherRadialBarProps.dataKey);
+  if (sectors == null) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement(React.Fragment, null, sectors.map((entry, i) => {
+    var isActive = activeShape && activeIndex === String(i);
+    // @ts-expect-error the types need a bit of attention
+    var onMouseEnter = onMouseEnterFromContext(entry, i);
+    // @ts-expect-error the types need a bit of attention
+    var onMouseLeave = onMouseLeaveFromContext(entry, i);
+    // @ts-expect-error the types need a bit of attention
+    var onClick = onClickFromContext(entry, i);
+
+    // @ts-expect-error cx types are incompatible
+    var radialBarSectorProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, baseProps), {}, {
+      cornerRadius: (0, _RadialBarUtils.parseCornerRadius)(cornerRadius)
+    }, entry), (0, _types.adaptEventsOfChild)(restOfAllOtherProps, entry, i)), {}, {
+      onMouseEnter,
+      onMouseLeave,
+      onClick,
+      key: "sector-".concat(i),
+      className: "recharts-radial-bar-sector ".concat(entry.className),
+      forceCornerRadius: others.forceCornerRadius,
+      cornerIsExternal: others.cornerIsExternal,
+      isActive,
+      option: isActive ? activeShape : shape
+    });
+    return /*#__PURE__*/React.createElement(_RadialBarUtils.RadialBarSector, radialBarSectorProps);
+  }), showLabels && _LabelList.LabelList.renderCallByParent(allOtherRadialBarProps, sectors));
+}
+function SectorsWithAnimation(_ref2) {
+  var {
+    props,
+    previousSectorsRef
+  } = _ref2;
+  var {
+    data,
+    isAnimationActive,
+    animationBegin,
+    animationDuration,
+    animationEasing,
+    onAnimationEnd,
+    onAnimationStart
+  } = props;
+  var animationId = (0, _useAnimationId.useAnimationId)(props, 'recharts-radialbar-');
+  var prevData = previousSectorsRef.current;
+  var [isAnimating, setIsAnimating] = (0, _react.useState)(true);
+  var handleAnimationEnd = (0, _react.useCallback)(() => {
+    if (typeof onAnimationEnd === 'function') {
+      onAnimationEnd();
+    }
+    setIsAnimating(false);
+  }, [onAnimationEnd]);
+  var handleAnimationStart = (0, _react.useCallback)(() => {
+    if (typeof onAnimationStart === 'function') {
+      onAnimationStart();
+    }
+    setIsAnimating(true);
+  }, [onAnimationStart]);
+  return /*#__PURE__*/React.createElement(_JavascriptAnimate.JavascriptAnimate, {
+    begin: animationBegin,
+    duration: animationDuration,
+    isActive: isAnimationActive,
+    easing: animationEasing,
+    onAnimationStart: handleAnimationStart,
+    onAnimationEnd: handleAnimationEnd,
+    key: animationId
+  }, t => {
+    var stepData = t === 1 ? data : (data !== null && data !== void 0 ? data : STABLE_EMPTY_ARRAY).map((entry, index) => {
+      var prev = prevData && prevData[index];
+      if (prev) {
+        var interpolatorStartAngle = (0, _DataUtils.interpolateNumber)(prev.startAngle, entry.startAngle);
+        var interpolatorEndAngle = (0, _DataUtils.interpolateNumber)(prev.endAngle, entry.endAngle);
+        return _objectSpread(_objectSpread({}, entry), {}, {
+          startAngle: interpolatorStartAngle(t),
+          endAngle: interpolatorEndAngle(t)
+        });
+      }
+      var {
+        endAngle,
+        startAngle
+      } = entry;
+      var interpolator = (0, _DataUtils.interpolateNumber)(startAngle, endAngle);
+      return _objectSpread(_objectSpread({}, entry), {}, {
+        endAngle: interpolator(t)
+      });
+    });
+    if (t > 0) {
+      // eslint-disable-next-line no-param-reassign
+      previousSectorsRef.current = stepData !== null && stepData !== void 0 ? stepData : null;
+    }
+    return /*#__PURE__*/React.createElement(_Layer.Layer, null, /*#__PURE__*/React.createElement(RadialBarSectors, {
+      sectors: stepData !== null && stepData !== void 0 ? stepData : STABLE_EMPTY_ARRAY,
+      allOtherRadialBarProps: props,
+      showLabels: !isAnimating
+    }));
+  });
+}
+function RenderSectors(props) {
+  var {
+    data = [],
+    isAnimationActive
+  } = props;
+  var previousSectorsRef = (0, _react.useRef)(null);
+  var prevData = previousSectorsRef.current;
+  if (isAnimationActive && data && data.length && (!prevData || prevData !== data)) {
+    return /*#__PURE__*/React.createElement(SectorsWithAnimation, {
+      props: props,
+      previousSectorsRef: previousSectorsRef
+    });
+  }
+  return /*#__PURE__*/React.createElement(RadialBarSectors, {
+    sectors: data,
+    allOtherRadialBarProps: props,
+    showLabels: true
+  });
+}
+function SetRadialBarPayloadLegend(props) {
+  var legendPayload = (0, _hooks.useAppSelector)(state => (0, _radialBarSelectors.selectRadialBarLegendPayload)(state, props.legendType));
+  return /*#__PURE__*/React.createElement(_SetLegendPayload.SetPolarLegendPayload, {
+    legendPayload: legendPayload !== null && legendPayload !== void 0 ? legendPayload : []
+  });
+}
+function getTooltipEntrySettings(props) {
+  var {
+    dataKey,
+    data,
+    stroke,
+    strokeWidth,
+    name,
+    hide,
+    fill,
+    tooltipType
+  } = props;
+  return {
+    dataDefinedOnItem: data,
+    positions: undefined,
+    settings: {
+      stroke,
+      strokeWidth,
+      fill,
+      nameKey: undefined,
+      // RadialBar does not have nameKey, why?
+      dataKey,
+      name: (0, _ChartUtils.getTooltipNameProp)(name, dataKey),
+      hide,
+      type: tooltipType,
+      color: fill,
+      unit: '' // Why does RadialBar not support unit?
+    }
+  };
+}
+class RadialBarWithState extends _react.PureComponent {
+  renderBackground(sectors) {
+    if (sectors == null) {
+      return null;
+    }
+    var {
+      cornerRadius
+    } = this.props;
+    var backgroundProps = (0, _ReactUtils.filterProps)(this.props.background, false);
+    return sectors.map((entry, i) => {
+      var {
+          value,
+          background
+        } = entry,
+        rest = _objectWithoutProperties(entry, _excluded3);
+      if (!background) {
+        return null;
+      }
+      var props = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
+        cornerRadius: (0, _RadialBarUtils.parseCornerRadius)(cornerRadius)
+      }, rest), {}, {
+        fill: '#eee'
+      }, background), backgroundProps), (0, _types.adaptEventsOfChild)(this.props, entry, i)), {}, {
+        index: i,
+        key: "sector-".concat(i),
+        className: (0, _clsx.clsx)('recharts-radial-bar-background-sector', backgroundProps === null || backgroundProps === void 0 ? void 0 : backgroundProps.className),
+        option: background,
+        isActive: false
+      });
+      return /*#__PURE__*/React.createElement(_RadialBarUtils.RadialBarSector, props);
+    });
+  }
+  render() {
+    var {
+      hide,
+      data,
+      className,
+      background
+    } = this.props;
+    if (hide) {
+      return null;
+    }
+    var layerClass = (0, _clsx.clsx)('recharts-area', className);
+    return /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: layerClass
+    }, background && /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: "recharts-radial-bar-background"
+    }, this.renderBackground(data)), /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: "recharts-radial-bar-sectors"
+    }, /*#__PURE__*/React.createElement(RenderSectors, this.props)));
+  }
+}
+function RadialBarImpl(props) {
+  var _useAppSelector;
+  var cells = (0, _ReactUtils.findAllByType)(props.children, _Cell.Cell);
+  var radialBarSettings = {
+    data: undefined,
+    hide: false,
+    id: props.id,
+    dataKey: props.dataKey,
+    minPointSize: props.minPointSize,
+    stackId: (0, _ChartUtils.getNormalizedStackId)(props.stackId),
+    maxBarSize: props.maxBarSize,
+    barSize: props.barSize,
+    type: 'radialBar',
+    angleAxisId: props.angleAxisId,
+    radiusAxisId: props.radiusAxisId
+  };
+  var data = (_useAppSelector = (0, _hooks.useAppSelector)(state => (0, _radialBarSelectors.selectRadialBarSectors)(state, props.radiusAxisId, props.angleAxisId, radialBarSettings, cells))) !== null && _useAppSelector !== void 0 ? _useAppSelector : STABLE_EMPTY_ARRAY;
+  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetTooltipEntrySettings.SetTooltipEntrySettings, {
+    fn: getTooltipEntrySettings,
+    args: _objectSpread(_objectSpread({}, props), {}, {
+      data
+    })
+  }), /*#__PURE__*/React.createElement(RadialBarWithState, _extends({}, props, {
+    data: data
+  })));
+}
+var defaultRadialBarProps = {
+  angleAxisId: 0,
+  radiusAxisId: 0,
+  minPointSize: 0,
+  hide: false,
+  legendType: 'rect',
+  data: [],
+  isAnimationActive: !_Global.Global.isSsr,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease',
+  forceCornerRadius: false,
+  cornerIsExternal: false
+};
+function computeRadialBarDataItems(_ref3) {
+  var {
+    displayedData,
+    stackedData,
+    dataStartIndex,
+    stackedDomain,
+    dataKey,
+    baseValue,
+    layout,
+    radiusAxis,
+    radiusAxisTicks,
+    bandSize,
+    pos,
+    angleAxis,
+    minPointSize,
+    cx,
+    cy,
+    angleAxisTicks,
+    cells,
+    startAngle: rootStartAngle,
+    endAngle: rootEndAngle
+  } = _ref3;
+  return (displayedData !== null && displayedData !== void 0 ? displayedData : []).map((entry, index) => {
+    var value, innerRadius, outerRadius, startAngle, endAngle, backgroundSector;
+    if (stackedData) {
+      // @ts-expect-error truncateByDomain expects only numerical domain, but it can received categorical domain too
+      value = (0, _ChartUtils.truncateByDomain)(stackedData[dataStartIndex + index], stackedDomain);
+    } else {
+      value = (0, _ChartUtils.getValueByDataKey)(entry, dataKey);
+      if (!Array.isArray(value)) {
+        value = [baseValue, value];
+      }
+    }
+    if (layout === 'radial') {
+      innerRadius = (0, _ChartUtils.getCateCoordinateOfBar)({
+        axis: radiusAxis,
+        ticks: radiusAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      endAngle = angleAxis.scale(value[1]);
+      startAngle = angleAxis.scale(value[0]);
+      outerRadius = (innerRadius !== null && innerRadius !== void 0 ? innerRadius : 0) + pos.size;
+      var deltaAngle = endAngle - startAngle;
+      if (Math.abs(minPointSize) > 0 && Math.abs(deltaAngle) < Math.abs(minPointSize)) {
+        var delta = (0, _DataUtils.mathSign)(deltaAngle || minPointSize) * (Math.abs(minPointSize) - Math.abs(deltaAngle));
+        endAngle += delta;
+      }
+      backgroundSector = {
+        background: {
+          cx,
+          cy,
+          innerRadius,
+          outerRadius,
+          startAngle: rootStartAngle,
+          endAngle: rootEndAngle
+        }
+      };
+    } else {
+      innerRadius = radiusAxis.scale(value[0]);
+      outerRadius = radiusAxis.scale(value[1]);
+      startAngle = (0, _ChartUtils.getCateCoordinateOfBar)({
+        axis: angleAxis,
+        ticks: angleAxisTicks,
+        bandSize,
+        offset: pos.offset,
+        entry,
+        index
+      });
+      endAngle = (startAngle !== null && startAngle !== void 0 ? startAngle : 0) + pos.size;
+      var deltaRadius = outerRadius - innerRadius;
+      if (Math.abs(minPointSize) > 0 && Math.abs(deltaRadius) < Math.abs(minPointSize)) {
+        var _delta = (0, _DataUtils.mathSign)(deltaRadius || minPointSize) * (Math.abs(minPointSize) - Math.abs(deltaRadius));
+        outerRadius += _delta;
+      }
+    }
+    return _objectSpread(_objectSpread(_objectSpread({}, entry), backgroundSector), {}, {
+      payload: entry,
+      value: stackedData ? value : value[1],
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      startAngle,
+      endAngle
+    }, cells && cells[index] && cells[index].props);
+  });
+}
+class RadialBar extends _react.PureComponent {
+  render() {
+    return /*#__PURE__*/React.createElement(_RegisterGraphicalItemId.RegisterGraphicalItemId, {
+      id: this.props.id,
+      type: "radialBar"
+    }, id => {
+      var _this$props$hide, _this$props$angleAxis, _this$props$radiusAxi;
+      return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_SetGraphicalItem.SetPolarGraphicalItem, {
+        type: "radialBar",
+        id: id
+        // TODO: do we need this anymore and is the below comment true? Strict nulls complains about it
+        ,
+        data: undefined // data prop is injected through generator and overwrites what user passes in
+        ,
+        dataKey: this.props.dataKey
+        // TS is not smart enough to know defaultProps has values due to the explicit Partial type
+        ,
+        hide: (_this$props$hide = this.props.hide) !== null && _this$props$hide !== void 0 ? _this$props$hide : defaultRadialBarProps.hide,
+        angleAxisId: (_this$props$angleAxis = this.props.angleAxisId) !== null && _this$props$angleAxis !== void 0 ? _this$props$angleAxis : defaultRadialBarProps.angleAxisId,
+        radiusAxisId: (_this$props$radiusAxi = this.props.radiusAxisId) !== null && _this$props$radiusAxi !== void 0 ? _this$props$radiusAxi : defaultRadialBarProps.radiusAxisId,
+        stackId: (0, _ChartUtils.getNormalizedStackId)(this.props.stackId),
+        barSize: this.props.barSize,
+        minPointSize: this.props.minPointSize,
+        maxBarSize: this.props.maxBarSize
+      }), /*#__PURE__*/React.createElement(SetRadialBarPayloadLegend, this.props), /*#__PURE__*/React.createElement(RadialBarImpl, _extends({}, this.props, {
+        id: id
+      })));
+    });
+  }
+}
+exports.RadialBar = RadialBar;
+_defineProperty(RadialBar, "displayName", 'RadialBar');
+_defineProperty(RadialBar, "defaultProps", defaultRadialBarProps);
Index: node_modules/recharts/lib/polar/defaultPolarAngleAxisProps.js
===================================================================
--- node_modules/recharts/lib/polar/defaultPolarAngleAxisProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/polar/defaultPolarAngleAxisProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.defaultPolarAngleAxisProps = void 0;
+var defaultPolarAngleAxisProps = exports.defaultPolarAngleAxisProps = {
+  allowDuplicatedCategory: true,
+  // if I set this to false then Tooltip synchronisation stops working in Radar, wtf
+  angleAxisId: 0,
+  axisLine: true,
+  cx: 0,
+  cy: 0,
+  orientation: 'outer',
+  reversed: false,
+  scale: 'auto',
+  tick: true,
+  tickLine: true,
+  tickSize: 8,
+  type: 'category'
+};
Index: node_modules/recharts/lib/polar/defaultPolarRadiusAxisProps.js
===================================================================
--- node_modules/recharts/lib/polar/defaultPolarRadiusAxisProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/polar/defaultPolarRadiusAxisProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.defaultPolarRadiusAxisProps = void 0;
+var defaultPolarRadiusAxisProps = exports.defaultPolarRadiusAxisProps = {
+  allowDataOverflow: false,
+  allowDuplicatedCategory: true,
+  angle: 0,
+  axisLine: true,
+  cx: 0,
+  cy: 0,
+  orientation: 'right',
+  radiusAxisId: 0,
+  scale: 'auto',
+  stroke: '#ccc',
+  tick: true,
+  tickCount: 5,
+  type: 'number'
+};
Index: node_modules/recharts/lib/shape/Cross.js
===================================================================
--- node_modules/recharts/lib/shape/Cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/shape/Cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Cross = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _clsx = require("clsx");
+var _DataUtils = require("../util/DataUtils");
+var _ReactUtils = require("../util/ReactUtils");
+var _excluded = ["x", "y", "top", "left", "width", "height", "className"];
+/**
+ * @fileOverview Cross
+ */
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var getPath = (x, y, width, height, top, left) => {
+  return "M".concat(x, ",").concat(top, "v").concat(height, "M").concat(left, ",").concat(y, "h").concat(width);
+};
+var Cross = _ref => {
+  var {
+      x = 0,
+      y = 0,
+      top = 0,
+      left = 0,
+      width = 0,
+      height = 0,
+      className
+    } = _ref,
+    rest = _objectWithoutProperties(_ref, _excluded);
+  var props = _objectSpread({
+    x,
+    y,
+    top,
+    left,
+    width,
+    height
+  }, rest);
+  if (!(0, _DataUtils.isNumber)(x) || !(0, _DataUtils.isNumber)(y) || !(0, _DataUtils.isNumber)(width) || !(0, _DataUtils.isNumber)(height) || !(0, _DataUtils.isNumber)(top) || !(0, _DataUtils.isNumber)(left)) {
+    return null;
+  }
+  return /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(props, true), {
+    className: (0, _clsx.clsx)('recharts-cross', className),
+    d: getPath(x, y, width, height, top, left)
+  }));
+};
+exports.Cross = Cross;
Index: node_modules/recharts/lib/shape/Curve.js
===================================================================
--- node_modules/recharts/lib/shape/Curve.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/shape/Curve.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,118 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getPath = exports.Curve = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _d3Shape = require("victory-vendor/d3-shape");
+var _clsx = require("clsx");
+var _types = require("../util/types");
+var _DataUtils = require("../util/DataUtils");
+var _isWellBehavedNumber = require("../util/isWellBehavedNumber");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /**
+ * @fileOverview Curve
+ */
+var CURVE_FACTORIES = {
+  curveBasisClosed: _d3Shape.curveBasisClosed,
+  curveBasisOpen: _d3Shape.curveBasisOpen,
+  curveBasis: _d3Shape.curveBasis,
+  curveBumpX: _d3Shape.curveBumpX,
+  curveBumpY: _d3Shape.curveBumpY,
+  curveLinearClosed: _d3Shape.curveLinearClosed,
+  curveLinear: _d3Shape.curveLinear,
+  curveMonotoneX: _d3Shape.curveMonotoneX,
+  curveMonotoneY: _d3Shape.curveMonotoneY,
+  curveNatural: _d3Shape.curveNatural,
+  curveStep: _d3Shape.curveStep,
+  curveStepAfter: _d3Shape.curveStepAfter,
+  curveStepBefore: _d3Shape.curveStepBefore
+};
+
+/**
+ * @deprecated use {@link Coordinate} instead
+ * Duplicated with `Coordinate` in `util/types.ts`
+ */
+
+/**
+ * @deprecated use {@link NullableCoordinate} instead
+ * Duplicated with `NullableCoordinate` in `util/types.ts`
+ */
+
+var defined = p => (0, _isWellBehavedNumber.isWellBehavedNumber)(p.x) && (0, _isWellBehavedNumber.isWellBehavedNumber)(p.y);
+var getX = p => p.x;
+var getY = p => p.y;
+var getCurveFactory = (type, layout) => {
+  if (typeof type === 'function') {
+    return type;
+  }
+  var name = "curve".concat((0, _DataUtils.upperFirst)(type));
+  if ((name === 'curveMonotone' || name === 'curveBump') && layout) {
+    return CURVE_FACTORIES["".concat(name).concat(layout === 'vertical' ? 'Y' : 'X')];
+  }
+  return CURVE_FACTORIES[name] || _d3Shape.curveLinear;
+};
+/**
+ * Calculate the path of curve. Returns null if points is an empty array.
+ * @return path or null
+ */
+var getPath = _ref => {
+  var {
+    type = 'linear',
+    points = [],
+    baseLine,
+    layout,
+    connectNulls = false
+  } = _ref;
+  var curveFactory = getCurveFactory(type, layout);
+  var formatPoints = connectNulls ? points.filter(defined) : points;
+  var lineFunction;
+  if (Array.isArray(baseLine)) {
+    var formatBaseLine = connectNulls ? baseLine.filter(base => defined(base)) : baseLine;
+    var areaPoints = formatPoints.map((entry, index) => _objectSpread(_objectSpread({}, entry), {}, {
+      base: formatBaseLine[index]
+    }));
+    if (layout === 'vertical') {
+      lineFunction = (0, _d3Shape.area)().y(getY).x1(getX).x0(d => d.base.x);
+    } else {
+      lineFunction = (0, _d3Shape.area)().x(getX).y1(getY).y0(d => d.base.y);
+    }
+    lineFunction.defined(defined).curve(curveFactory);
+    return lineFunction(areaPoints);
+  }
+  if (layout === 'vertical' && (0, _DataUtils.isNumber)(baseLine)) {
+    lineFunction = (0, _d3Shape.area)().y(getY).x1(getX).x0(baseLine);
+  } else if ((0, _DataUtils.isNumber)(baseLine)) {
+    lineFunction = (0, _d3Shape.area)().x(getX).y1(getY).y0(baseLine);
+  } else {
+    lineFunction = (0, _d3Shape.line)().x(getX).y(getY);
+  }
+  lineFunction.defined(defined).curve(curveFactory);
+  return lineFunction(formatPoints);
+};
+exports.getPath = getPath;
+var Curve = props => {
+  var {
+    className,
+    points,
+    path,
+    pathRef
+  } = props;
+  if ((!points || !points.length) && !path) {
+    return null;
+  }
+  var realPath = points && points.length ? getPath(props) : path;
+  return /*#__PURE__*/React.createElement("path", _extends({}, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props), (0, _types.adaptEventHandlers)(props), {
+    className: (0, _clsx.clsx)('recharts-curve', className),
+    d: realPath === null ? undefined : realPath,
+    ref: pathRef
+  }));
+};
+exports.Curve = Curve;
Index: node_modules/recharts/lib/shape/Dot.js
===================================================================
--- node_modules/recharts/lib/shape/Dot.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/shape/Dot.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Dot = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _clsx = require("clsx");
+var _types = require("../util/types");
+var _svgPropertiesNoEvents = require("../util/svgPropertiesNoEvents");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /**
+ * @fileOverview Dot
+ */
+var Dot = props => {
+  var {
+    cx,
+    cy,
+    r,
+    className
+  } = props;
+  var layerClass = (0, _clsx.clsx)('recharts-dot', className);
+  if (cx === +cx && cy === +cy && r === +r) {
+    return /*#__PURE__*/React.createElement("circle", _extends({}, (0, _svgPropertiesNoEvents.svgPropertiesNoEvents)(props), (0, _types.adaptEventHandlers)(props), {
+      className: layerClass,
+      cx: cx,
+      cy: cy,
+      r: r
+    }));
+  }
+  return null;
+};
+exports.Dot = Dot;
Index: node_modules/recharts/lib/shape/Polygon.js
===================================================================
--- node_modules/recharts/lib/shape/Polygon.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/shape/Polygon.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,94 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Polygon = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _clsx = require("clsx");
+var _ReactUtils = require("../util/ReactUtils");
+var _excluded = ["points", "className", "baseLinePoints", "connectNulls"];
+/**
+ * @fileOverview Polygon
+ */
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var isValidatePoint = point => {
+  return point && point.x === +point.x && point.y === +point.y;
+};
+var getParsedPoints = function getParsedPoints() {
+  var points = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+  var segmentPoints = [[]];
+  points.forEach(entry => {
+    if (isValidatePoint(entry)) {
+      segmentPoints[segmentPoints.length - 1].push(entry);
+    } else if (segmentPoints[segmentPoints.length - 1].length > 0) {
+      // add another path
+      segmentPoints.push([]);
+    }
+  });
+  if (isValidatePoint(points[0])) {
+    segmentPoints[segmentPoints.length - 1].push(points[0]);
+  }
+  if (segmentPoints[segmentPoints.length - 1].length <= 0) {
+    segmentPoints = segmentPoints.slice(0, -1);
+  }
+  return segmentPoints;
+};
+var getSinglePolygonPath = (points, connectNulls) => {
+  var segmentPoints = getParsedPoints(points);
+  if (connectNulls) {
+    segmentPoints = [segmentPoints.reduce((res, segPoints) => {
+      return [...res, ...segPoints];
+    }, [])];
+  }
+  var polygonPath = segmentPoints.map(segPoints => {
+    return segPoints.reduce((path, point, index) => {
+      return "".concat(path).concat(index === 0 ? 'M' : 'L').concat(point.x, ",").concat(point.y);
+    }, '');
+  }).join('');
+  return segmentPoints.length === 1 ? "".concat(polygonPath, "Z") : polygonPath;
+};
+var getRanglePath = (points, baseLinePoints, connectNulls) => {
+  var outerPath = getSinglePolygonPath(points, connectNulls);
+  return "".concat(outerPath.slice(-1) === 'Z' ? outerPath.slice(0, -1) : outerPath, "L").concat(getSinglePolygonPath(baseLinePoints.reverse(), connectNulls).slice(1));
+};
+var Polygon = props => {
+  var {
+      points,
+      className,
+      baseLinePoints,
+      connectNulls
+    } = props,
+    others = _objectWithoutProperties(props, _excluded);
+  if (!points || !points.length) {
+    return null;
+  }
+  var layerClass = (0, _clsx.clsx)('recharts-polygon', className);
+  if (baseLinePoints && baseLinePoints.length) {
+    var hasStroke = others.stroke && others.stroke !== 'none';
+    var rangePath = getRanglePath(points, baseLinePoints, connectNulls);
+    return /*#__PURE__*/React.createElement("g", {
+      className: layerClass
+    }, /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(others, true), {
+      fill: rangePath.slice(-1) === 'Z' ? others.fill : 'none',
+      stroke: "none",
+      d: rangePath
+    })), hasStroke ? /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(others, true), {
+      fill: "none",
+      d: getSinglePolygonPath(points, connectNulls)
+    })) : null, hasStroke ? /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(others, true), {
+      fill: "none",
+      d: getSinglePolygonPath(baseLinePoints, connectNulls)
+    })) : null);
+  }
+  var singlePath = getSinglePolygonPath(points, connectNulls);
+  return /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(others, true), {
+    fill: singlePath.slice(-1) === 'Z' ? others.fill : 'none',
+    className: layerClass,
+    d: singlePath
+  }));
+};
+exports.Polygon = Polygon;
Index: node_modules/recharts/lib/shape/Rectangle.js
===================================================================
--- node_modules/recharts/lib/shape/Rectangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/shape/Rectangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,155 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Rectangle = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _ReactUtils = require("../util/ReactUtils");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _Animate = require("../animation/Animate");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /**
+ * @fileOverview Rectangle
+ */
+var getRectanglePath = (x, y, width, height, radius) => {
+  var maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2);
+  var ySign = height >= 0 ? 1 : -1;
+  var xSign = width >= 0 ? 1 : -1;
+  var clockWise = height >= 0 && width >= 0 || height < 0 && width < 0 ? 1 : 0;
+  var path;
+  if (maxRadius > 0 && radius instanceof Array) {
+    var newRadius = [0, 0, 0, 0];
+    for (var i = 0, len = 4; i < len; i++) {
+      newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i];
+    }
+    path = "M".concat(x, ",").concat(y + ySign * newRadius[0]);
+    if (newRadius[0] > 0) {
+      path += "A ".concat(newRadius[0], ",").concat(newRadius[0], ",0,0,").concat(clockWise, ",").concat(x + xSign * newRadius[0], ",").concat(y);
+    }
+    path += "L ".concat(x + width - xSign * newRadius[1], ",").concat(y);
+    if (newRadius[1] > 0) {
+      path += "A ".concat(newRadius[1], ",").concat(newRadius[1], ",0,0,").concat(clockWise, ",\n        ").concat(x + width, ",").concat(y + ySign * newRadius[1]);
+    }
+    path += "L ".concat(x + width, ",").concat(y + height - ySign * newRadius[2]);
+    if (newRadius[2] > 0) {
+      path += "A ".concat(newRadius[2], ",").concat(newRadius[2], ",0,0,").concat(clockWise, ",\n        ").concat(x + width - xSign * newRadius[2], ",").concat(y + height);
+    }
+    path += "L ".concat(x + xSign * newRadius[3], ",").concat(y + height);
+    if (newRadius[3] > 0) {
+      path += "A ".concat(newRadius[3], ",").concat(newRadius[3], ",0,0,").concat(clockWise, ",\n        ").concat(x, ",").concat(y + height - ySign * newRadius[3]);
+    }
+    path += 'Z';
+  } else if (maxRadius > 0 && radius === +radius && radius > 0) {
+    var _newRadius = Math.min(maxRadius, radius);
+    path = "M ".concat(x, ",").concat(y + ySign * _newRadius, "\n            A ").concat(_newRadius, ",").concat(_newRadius, ",0,0,").concat(clockWise, ",").concat(x + xSign * _newRadius, ",").concat(y, "\n            L ").concat(x + width - xSign * _newRadius, ",").concat(y, "\n            A ").concat(_newRadius, ",").concat(_newRadius, ",0,0,").concat(clockWise, ",").concat(x + width, ",").concat(y + ySign * _newRadius, "\n            L ").concat(x + width, ",").concat(y + height - ySign * _newRadius, "\n            A ").concat(_newRadius, ",").concat(_newRadius, ",0,0,").concat(clockWise, ",").concat(x + width - xSign * _newRadius, ",").concat(y + height, "\n            L ").concat(x + xSign * _newRadius, ",").concat(y + height, "\n            A ").concat(_newRadius, ",").concat(_newRadius, ",0,0,").concat(clockWise, ",").concat(x, ",").concat(y + height - ySign * _newRadius, " Z");
+  } else {
+    path = "M ".concat(x, ",").concat(y, " h ").concat(width, " v ").concat(height, " h ").concat(-width, " Z");
+  }
+  return path;
+};
+var defaultProps = {
+  x: 0,
+  y: 0,
+  width: 0,
+  height: 0,
+  // The radius of border
+  // The radius of four corners when radius is a number
+  // The radius of left-top, right-top, right-bottom, left-bottom when radius is an array
+  radius: 0,
+  isAnimationActive: false,
+  isUpdateAnimationActive: false,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease'
+};
+var Rectangle = rectangleProps => {
+  var props = (0, _resolveDefaultProps.resolveDefaultProps)(rectangleProps, defaultProps);
+  var pathRef = (0, _react.useRef)(null);
+  var [totalLength, setTotalLength] = (0, _react.useState)(-1);
+  (0, _react.useEffect)(() => {
+    if (pathRef.current && pathRef.current.getTotalLength) {
+      try {
+        var pathTotalLength = pathRef.current.getTotalLength();
+        if (pathTotalLength) {
+          setTotalLength(pathTotalLength);
+        }
+      } catch (_unused) {
+        // calculate total length error
+      }
+    }
+  }, []);
+  var {
+    x,
+    y,
+    width,
+    height,
+    radius,
+    className
+  } = props;
+  var {
+    animationEasing,
+    animationDuration,
+    animationBegin,
+    isAnimationActive,
+    isUpdateAnimationActive
+  } = props;
+  if (x !== +x || y !== +y || width !== +width || height !== +height || width === 0 || height === 0) {
+    return null;
+  }
+  var layerClass = (0, _clsx.clsx)('recharts-rectangle', className);
+  if (!isUpdateAnimationActive) {
+    return /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(props, true), {
+      className: layerClass,
+      d: getRectanglePath(x, y, width, height, radius)
+    }));
+  }
+  return /*#__PURE__*/React.createElement(_Animate.Animate, {
+    canBegin: totalLength > 0,
+    from: {
+      width,
+      height,
+      x,
+      y
+    },
+    to: {
+      width,
+      height,
+      x,
+      y
+    },
+    duration: animationDuration
+    // @ts-expect-error TODO - fix the type error
+    ,
+    animationEasing: animationEasing,
+    isActive: isUpdateAnimationActive
+  }, _ref => {
+    var {
+      width: currWidth,
+      height: currHeight,
+      x: currX,
+      y: currY
+    } = _ref;
+    return /*#__PURE__*/React.createElement(_Animate.Animate, {
+      canBegin: totalLength > 0
+      // @ts-expect-error TODO - fix the type error
+      ,
+      from: "0px ".concat(totalLength === -1 ? 1 : totalLength, "px")
+      // @ts-expect-error TODO - fix the type error
+      ,
+      to: "".concat(totalLength, "px 0px"),
+      attributeName: "strokeDasharray",
+      begin: animationBegin,
+      duration: animationDuration,
+      isActive: isAnimationActive,
+      easing: animationEasing
+    }, /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(props, true), {
+      className: layerClass,
+      d: getRectanglePath(currX, currY, currWidth, currHeight, radius),
+      ref: pathRef
+    })));
+  });
+};
+exports.Rectangle = Rectangle;
Index: node_modules/recharts/lib/shape/Sector.js
===================================================================
--- node_modules/recharts/lib/shape/Sector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/shape/Sector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,230 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Sector = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _clsx = require("clsx");
+var _ReactUtils = require("../util/ReactUtils");
+var _PolarUtils = require("../util/PolarUtils");
+var _DataUtils = require("../util/DataUtils");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+var getDeltaAngle = (startAngle, endAngle) => {
+  var sign = (0, _DataUtils.mathSign)(endAngle - startAngle);
+  var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);
+  return sign * deltaAngle;
+};
+var getTangentCircle = _ref => {
+  var {
+    cx,
+    cy,
+    radius,
+    angle,
+    sign,
+    isExternal,
+    cornerRadius,
+    cornerIsExternal
+  } = _ref;
+  var centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;
+  var theta = Math.asin(cornerRadius / centerRadius) / _PolarUtils.RADIAN;
+  var centerAngle = cornerIsExternal ? angle : angle + sign * theta;
+  var center = (0, _PolarUtils.polarToCartesian)(cx, cy, centerRadius, centerAngle);
+  // The coordinate of point which is tangent to the circle
+  var circleTangency = (0, _PolarUtils.polarToCartesian)(cx, cy, radius, centerAngle);
+  // The coordinate of point which is tangent to the radius line
+  var lineTangencyAngle = cornerIsExternal ? angle - sign * theta : angle;
+  var lineTangency = (0, _PolarUtils.polarToCartesian)(cx, cy, centerRadius * Math.cos(theta * _PolarUtils.RADIAN), lineTangencyAngle);
+  return {
+    center,
+    circleTangency,
+    lineTangency,
+    theta
+  };
+};
+var getSectorPath = _ref2 => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle
+  } = _ref2;
+  var angle = getDeltaAngle(startAngle, endAngle);
+
+  // When the angle of sector equals to 360, star point and end point coincide
+  var tempEndAngle = startAngle + angle;
+  var outerStartPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, outerRadius, startAngle);
+  var outerEndPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, outerRadius, tempEndAngle);
+  var path = "M ".concat(outerStartPoint.x, ",").concat(outerStartPoint.y, "\n    A ").concat(outerRadius, ",").concat(outerRadius, ",0,\n    ").concat(+(Math.abs(angle) > 180), ",").concat(+(startAngle > tempEndAngle), ",\n    ").concat(outerEndPoint.x, ",").concat(outerEndPoint.y, "\n  ");
+  if (innerRadius > 0) {
+    var innerStartPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, innerRadius, startAngle);
+    var innerEndPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, innerRadius, tempEndAngle);
+    path += "L ".concat(innerEndPoint.x, ",").concat(innerEndPoint.y, "\n            A ").concat(innerRadius, ",").concat(innerRadius, ",0,\n            ").concat(+(Math.abs(angle) > 180), ",").concat(+(startAngle <= tempEndAngle), ",\n            ").concat(innerStartPoint.x, ",").concat(innerStartPoint.y, " Z");
+  } else {
+    path += "L ".concat(cx, ",").concat(cy, " Z");
+  }
+  return path;
+};
+var getSectorWithCorner = _ref3 => {
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    cornerRadius,
+    forceCornerRadius,
+    cornerIsExternal,
+    startAngle,
+    endAngle
+  } = _ref3;
+  var sign = (0, _DataUtils.mathSign)(endAngle - startAngle);
+  var {
+    circleTangency: soct,
+    lineTangency: solt,
+    theta: sot
+  } = getTangentCircle({
+    cx,
+    cy,
+    radius: outerRadius,
+    angle: startAngle,
+    sign,
+    cornerRadius,
+    cornerIsExternal
+  });
+  var {
+    circleTangency: eoct,
+    lineTangency: eolt,
+    theta: eot
+  } = getTangentCircle({
+    cx,
+    cy,
+    radius: outerRadius,
+    angle: endAngle,
+    sign: -sign,
+    cornerRadius,
+    cornerIsExternal
+  });
+  var outerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sot - eot;
+  if (outerArcAngle < 0) {
+    if (forceCornerRadius) {
+      return "M ".concat(solt.x, ",").concat(solt.y, "\n        a").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,1,").concat(cornerRadius * 2, ",0\n        a").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,1,").concat(-cornerRadius * 2, ",0\n      ");
+    }
+    return getSectorPath({
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      startAngle,
+      endAngle
+    });
+  }
+  var path = "M ".concat(solt.x, ",").concat(solt.y, "\n    A").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,").concat(+(sign < 0), ",").concat(soct.x, ",").concat(soct.y, "\n    A").concat(outerRadius, ",").concat(outerRadius, ",0,").concat(+(outerArcAngle > 180), ",").concat(+(sign < 0), ",").concat(eoct.x, ",").concat(eoct.y, "\n    A").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,").concat(+(sign < 0), ",").concat(eolt.x, ",").concat(eolt.y, "\n  ");
+  if (innerRadius > 0) {
+    var {
+      circleTangency: sict,
+      lineTangency: silt,
+      theta: sit
+    } = getTangentCircle({
+      cx,
+      cy,
+      radius: innerRadius,
+      angle: startAngle,
+      sign,
+      isExternal: true,
+      cornerRadius,
+      cornerIsExternal
+    });
+    var {
+      circleTangency: eict,
+      lineTangency: eilt,
+      theta: eit
+    } = getTangentCircle({
+      cx,
+      cy,
+      radius: innerRadius,
+      angle: endAngle,
+      sign: -sign,
+      isExternal: true,
+      cornerRadius,
+      cornerIsExternal
+    });
+    var innerArcAngle = cornerIsExternal ? Math.abs(startAngle - endAngle) : Math.abs(startAngle - endAngle) - sit - eit;
+    if (innerArcAngle < 0 && cornerRadius === 0) {
+      return "".concat(path, "L").concat(cx, ",").concat(cy, "Z");
+    }
+    path += "L".concat(eilt.x, ",").concat(eilt.y, "\n      A").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,").concat(+(sign < 0), ",").concat(eict.x, ",").concat(eict.y, "\n      A").concat(innerRadius, ",").concat(innerRadius, ",0,").concat(+(innerArcAngle > 180), ",").concat(+(sign > 0), ",").concat(sict.x, ",").concat(sict.y, "\n      A").concat(cornerRadius, ",").concat(cornerRadius, ",0,0,").concat(+(sign < 0), ",").concat(silt.x, ",").concat(silt.y, "Z");
+  } else {
+    path += "L".concat(cx, ",").concat(cy, "Z");
+  }
+  return path;
+};
+
+/**
+ * SVG cx, cy are `string | number | undefined`, but internally we use `number` so let's
+ * override the types here.
+ */
+
+var defaultProps = {
+  cx: 0,
+  cy: 0,
+  innerRadius: 0,
+  outerRadius: 0,
+  startAngle: 0,
+  endAngle: 0,
+  cornerRadius: 0,
+  forceCornerRadius: false,
+  cornerIsExternal: false
+};
+var Sector = sectorProps => {
+  var props = (0, _resolveDefaultProps.resolveDefaultProps)(sectorProps, defaultProps);
+  var {
+    cx,
+    cy,
+    innerRadius,
+    outerRadius,
+    cornerRadius,
+    forceCornerRadius,
+    cornerIsExternal,
+    startAngle,
+    endAngle,
+    className
+  } = props;
+  if (outerRadius < innerRadius || startAngle === endAngle) {
+    return null;
+  }
+  var layerClass = (0, _clsx.clsx)('recharts-sector', className);
+  var deltaRadius = outerRadius - innerRadius;
+  var cr = (0, _DataUtils.getPercentValue)(cornerRadius, deltaRadius, 0, true);
+  var path;
+  if (cr > 0 && Math.abs(startAngle - endAngle) < 360) {
+    path = getSectorWithCorner({
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      cornerRadius: Math.min(cr, deltaRadius / 2),
+      forceCornerRadius,
+      cornerIsExternal,
+      startAngle,
+      endAngle
+    });
+  } else {
+    path = getSectorPath({
+      cx,
+      cy,
+      innerRadius,
+      outerRadius,
+      startAngle,
+      endAngle
+    });
+  }
+  return /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(props, true), {
+    className: layerClass,
+    d: path
+  }));
+};
+exports.Sector = Sector;
Index: node_modules/recharts/lib/shape/Symbols.js
===================================================================
--- node_modules/recharts/lib/shape/Symbols.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/shape/Symbols.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,104 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Symbols = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _d3Shape = require("victory-vendor/d3-shape");
+var _clsx = require("clsx");
+var _ReactUtils = require("../util/ReactUtils");
+var _DataUtils = require("../util/DataUtils");
+var _excluded = ["type", "size", "sizeType"];
+/**
+ * @fileOverview Curve
+ */
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+var symbolFactories = {
+  symbolCircle: _d3Shape.symbolCircle,
+  symbolCross: _d3Shape.symbolCross,
+  symbolDiamond: _d3Shape.symbolDiamond,
+  symbolSquare: _d3Shape.symbolSquare,
+  symbolStar: _d3Shape.symbolStar,
+  symbolTriangle: _d3Shape.symbolTriangle,
+  symbolWye: _d3Shape.symbolWye
+};
+var RADIAN = Math.PI / 180;
+var getSymbolFactory = type => {
+  var name = "symbol".concat((0, _DataUtils.upperFirst)(type));
+  return symbolFactories[name] || _d3Shape.symbolCircle;
+};
+var calculateAreaSize = (size, sizeType, type) => {
+  if (sizeType === 'area') {
+    return size;
+  }
+  switch (type) {
+    case 'cross':
+      return 5 * size * size / 9;
+    case 'diamond':
+      return 0.5 * size * size / Math.sqrt(3);
+    case 'square':
+      return size * size;
+    case 'star':
+      {
+        var angle = 18 * RADIAN;
+        return 1.25 * size * size * (Math.tan(angle) - Math.tan(angle * 2) * Math.tan(angle) ** 2);
+      }
+    case 'triangle':
+      return Math.sqrt(3) * size * size / 4;
+    case 'wye':
+      return (21 - 10 * Math.sqrt(3)) * size * size / 8;
+    default:
+      return Math.PI * size * size / 4;
+  }
+};
+var registerSymbol = (key, factory) => {
+  symbolFactories["symbol".concat((0, _DataUtils.upperFirst)(key))] = factory;
+};
+var Symbols = _ref => {
+  var {
+      type = 'circle',
+      size = 64,
+      sizeType = 'area'
+    } = _ref,
+    rest = _objectWithoutProperties(_ref, _excluded);
+  var props = _objectSpread(_objectSpread({}, rest), {}, {
+    type,
+    size,
+    sizeType
+  });
+
+  /**
+   * Calculate the path of curve
+   * @return {String} path
+   */
+  var getPath = () => {
+    var symbolFactory = getSymbolFactory(type);
+    var symbol = (0, _d3Shape.symbol)().type(symbolFactory).size(calculateAreaSize(size, sizeType, type));
+    return symbol();
+  };
+  var {
+    className,
+    cx,
+    cy
+  } = props;
+  var filteredProps = (0, _ReactUtils.filterProps)(props, true);
+  if (cx === +cx && cy === +cy && size === +size) {
+    return /*#__PURE__*/React.createElement("path", _extends({}, filteredProps, {
+      className: (0, _clsx.clsx)('recharts-symbols', className),
+      transform: "translate(".concat(cx, ", ").concat(cy, ")"),
+      d: getPath()
+    }));
+  }
+  return null;
+};
+exports.Symbols = Symbols;
+Symbols.registerSymbol = registerSymbol;
Index: node_modules/recharts/lib/shape/Trapezoid.js
===================================================================
--- node_modules/recharts/lib/shape/Trapezoid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/shape/Trapezoid.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,126 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Trapezoid = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _clsx = require("clsx");
+var _ReactUtils = require("../util/ReactUtils");
+var _resolveDefaultProps = require("../util/resolveDefaultProps");
+var _Animate = require("../animation/Animate");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /**
+ * @fileOverview Rectangle
+ */
+var getTrapezoidPath = (x, y, upperWidth, lowerWidth, height) => {
+  var widthGap = upperWidth - lowerWidth;
+  var path;
+  path = "M ".concat(x, ",").concat(y);
+  path += "L ".concat(x + upperWidth, ",").concat(y);
+  path += "L ".concat(x + upperWidth - widthGap / 2, ",").concat(y + height);
+  path += "L ".concat(x + upperWidth - widthGap / 2 - lowerWidth, ",").concat(y + height);
+  path += "L ".concat(x, ",").concat(y, " Z");
+  return path;
+};
+var defaultProps = {
+  x: 0,
+  y: 0,
+  upperWidth: 0,
+  lowerWidth: 0,
+  height: 0,
+  isUpdateAnimationActive: false,
+  animationBegin: 0,
+  animationDuration: 1500,
+  animationEasing: 'ease'
+};
+var Trapezoid = props => {
+  var trapezoidProps = (0, _resolveDefaultProps.resolveDefaultProps)(props, defaultProps);
+  var pathRef = (0, _react.useRef)();
+  var [totalLength, setTotalLength] = (0, _react.useState)(-1);
+  (0, _react.useEffect)(() => {
+    if (pathRef.current && pathRef.current.getTotalLength) {
+      try {
+        var pathTotalLength = pathRef.current.getTotalLength();
+        if (pathTotalLength) {
+          setTotalLength(pathTotalLength);
+        }
+      } catch (_unused) {
+        // calculate total length error
+      }
+    }
+  }, []);
+  var {
+    x,
+    y,
+    upperWidth,
+    lowerWidth,
+    height,
+    className
+  } = trapezoidProps;
+  var {
+    animationEasing,
+    animationDuration,
+    animationBegin,
+    isUpdateAnimationActive
+  } = trapezoidProps;
+  if (x !== +x || y !== +y || upperWidth !== +upperWidth || lowerWidth !== +lowerWidth || height !== +height || upperWidth === 0 && lowerWidth === 0 || height === 0) {
+    return null;
+  }
+  var layerClass = (0, _clsx.clsx)('recharts-trapezoid', className);
+  if (!isUpdateAnimationActive) {
+    return /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(trapezoidProps, true), {
+      className: layerClass,
+      d: getTrapezoidPath(x, y, upperWidth, lowerWidth, height)
+    })));
+  }
+  return /*#__PURE__*/React.createElement(_Animate.Animate, {
+    canBegin: totalLength > 0,
+    from: {
+      upperWidth: 0,
+      lowerWidth: 0,
+      height,
+      x,
+      y
+    },
+    to: {
+      upperWidth,
+      lowerWidth,
+      height,
+      x,
+      y
+    },
+    duration: animationDuration
+    // @ts-expect-error TODO - fix the type error
+    ,
+    animationEasing: animationEasing,
+    isActive: isUpdateAnimationActive
+  }, _ref => {
+    var {
+      upperWidth: currUpperWidth,
+      lowerWidth: currLowerWidth,
+      height: currHeight,
+      x: currX,
+      y: currY
+    } = _ref;
+    return /*#__PURE__*/React.createElement(_Animate.Animate, {
+      canBegin: totalLength > 0
+      // @ts-expect-error TODO - fix the type error
+      ,
+      from: "0px ".concat(totalLength === -1 ? 1 : totalLength, "px")
+      // @ts-expect-error TODO - fix the type error
+      ,
+      to: "".concat(totalLength, "px 0px"),
+      attributeName: "strokeDasharray",
+      begin: animationBegin,
+      duration: animationDuration,
+      easing: animationEasing
+    }, /*#__PURE__*/React.createElement("path", _extends({}, (0, _ReactUtils.filterProps)(trapezoidProps, true), {
+      className: layerClass,
+      d: getTrapezoidPath(currX, currY, currUpperWidth, currLowerWidth, currHeight),
+      ref: pathRef
+    })));
+  });
+};
+exports.Trapezoid = Trapezoid;
Index: node_modules/recharts/lib/state/RechartsReduxContext.js
===================================================================
--- node_modules/recharts/lib/state/RechartsReduxContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/RechartsReduxContext.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RechartsReduxContext = void 0;
+var _react = require("react");
+/*
+ * This is a copy of the React-Redux context type, but with our own store type.
+ * We could import directly from react-redux like this:
+ * import { ReactReduxContextValue } from 'react-redux/src/components/Context';
+ * but that makes typescript angry with some errors I am not sure how to resolve
+ * so copy it is.
+ */
+
+/**
+ * We need to use our own independent Redux context because we need to avoid interfering with other people's Redux stores
+ * in case they decide to install and use Recharts in another Redux app which is likely to happen.
+ *
+ * https://react-redux.js.org/using-react-redux/accessing-store#providing-custom-context
+ */
+var RechartsReduxContext = exports.RechartsReduxContext = /*#__PURE__*/(0, _react.createContext)(null);
Index: node_modules/recharts/lib/state/RechartsStoreProvider.js
===================================================================
--- node_modules/recharts/lib/state/RechartsStoreProvider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/RechartsStoreProvider.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RechartsStoreProvider = RechartsStoreProvider;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _reactRedux = require("react-redux");
+var _store = require("./store");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _RechartsReduxContext = require("./RechartsReduxContext");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function RechartsStoreProvider(_ref) {
+  var {
+    preloadedState,
+    children,
+    reduxStoreName
+  } = _ref;
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  /*
+   * Why the ref? Redux official documentation recommends to use store as a singleton,
+   * and reuse that everywhere: https://redux-toolkit.js.org/api/configureStore#basic-example
+   *
+   * Which is correct! Except that is considering deploying Redux in an app.
+   * Recharts as a library supports multiple charts on the same page.
+   * And each of these charts needs its own store independent of others!
+   *
+   * The alternative is to have everything in the store keyed by the chart id.
+   * Which would make working with everything a little bit more painful because we need the chart id everywhere.
+   */
+  var storeRef = (0, _react.useRef)(null);
+
+  /*
+   * Panorama means that this chart is not its own chart, it's only a "preview"
+   * being rendered as a child of Brush.
+   * In such case, it should not have a store on its own - it should implicitly inherit
+   * whatever data is in the "parent" or "root" chart.
+   * Which here is represented by not having a Provider at all. All selectors will use the root store by default.
+   */
+  if (isPanorama) {
+    return children;
+  }
+  if (storeRef.current == null) {
+    storeRef.current = (0, _store.createRechartsStore)(preloadedState, reduxStoreName);
+  }
+
+  // ts-expect-error React-Redux types demand that the context internal value is not null, but we have that as default.
+  var nonNullContext = _RechartsReduxContext.RechartsReduxContext;
+  return /*#__PURE__*/React.createElement(_reactRedux.Provider, {
+    context: nonNullContext,
+    store: storeRef.current
+  }, children);
+}
Index: node_modules/recharts/lib/state/ReportChartProps.js
===================================================================
--- node_modules/recharts/lib/state/ReportChartProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/ReportChartProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ReportChartProps = ReportChartProps;
+var _react = require("react");
+var _rootPropsSlice = require("./rootPropsSlice");
+var _hooks = require("./hooks");
+function ReportChartProps(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _rootPropsSlice.updateOptions)(props));
+  }, [dispatch, props]);
+  return null;
+}
Index: node_modules/recharts/lib/state/ReportMainChartProps.js
===================================================================
--- node_modules/recharts/lib/state/ReportMainChartProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/ReportMainChartProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ReportMainChartProps = ReportMainChartProps;
+var _react = require("react");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _layoutSlice = require("./layoutSlice");
+var _hooks = require("./hooks");
+/**
+ * "Main" props are props that are only accepted on the main chart,
+ * as opposed to the small panorama chart inside a Brush.
+ */
+
+function ReportMainChartProps(_ref) {
+  var {
+    layout,
+    width,
+    height,
+    margin
+  } = _ref;
+  var dispatch = (0, _hooks.useAppDispatch)();
+
+  /*
+   * Skip dispatching properties in panorama chart for two reasons:
+   * 1. The root chart should be deciding on these properties, and
+   * 2. Brush reads these properties from redux store, and so they must remain stable
+   *      to avoid circular dependency and infinite re-rendering.
+   */
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  /*
+   * useEffect here is required to avoid the "Cannot update a component while rendering a different component" error.
+   * https://github.com/facebook/react/issues/18178
+   *
+   * Reported in https://github.com/recharts/recharts/issues/5514
+   */
+  (0, _react.useEffect)(() => {
+    if (!isPanorama) {
+      dispatch((0, _layoutSlice.setLayout)(layout));
+      dispatch((0, _layoutSlice.setChartSize)({
+        width,
+        height
+      }));
+      dispatch((0, _layoutSlice.setMargin)(margin));
+    }
+  }, [dispatch, isPanorama, layout, width, height, margin]);
+  return null;
+}
Index: node_modules/recharts/lib/state/ReportPolarOptions.js
===================================================================
--- node_modules/recharts/lib/state/ReportPolarOptions.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/ReportPolarOptions.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ReportPolarOptions = ReportPolarOptions;
+var _react = require("react");
+var _hooks = require("./hooks");
+var _polarOptionsSlice = require("./polarOptionsSlice");
+function ReportPolarOptions(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _polarOptionsSlice.updatePolarOptions)(props));
+  }, [dispatch, props]);
+  return null;
+}
Index: node_modules/recharts/lib/state/SetGraphicalItem.js
===================================================================
--- node_modules/recharts/lib/state/SetGraphicalItem.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/SetGraphicalItem.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.SetCartesianGraphicalItem = SetCartesianGraphicalItem;
+exports.SetPolarGraphicalItem = SetPolarGraphicalItem;
+var _react = require("react");
+var _hooks = require("./hooks");
+var _graphicalItemsSlice = require("./graphicalItemsSlice");
+function SetCartesianGraphicalItem(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var prevPropsRef = (0, _react.useRef)(null);
+  (0, _react.useEffect)(() => {
+    if (prevPropsRef.current === null) {
+      dispatch((0, _graphicalItemsSlice.addCartesianGraphicalItem)(props));
+    } else if (prevPropsRef.current !== props) {
+      dispatch((0, _graphicalItemsSlice.replaceCartesianGraphicalItem)({
+        prev: prevPropsRef.current,
+        next: props
+      }));
+    }
+    prevPropsRef.current = props;
+  }, [dispatch, props]);
+  (0, _react.useEffect)(() => {
+    return () => {
+      if (prevPropsRef.current) {
+        dispatch((0, _graphicalItemsSlice.removeCartesianGraphicalItem)(prevPropsRef.current));
+        /*
+         * Here we have to reset the ref to null because in StrictMode, the effect will run twice,
+         * but it will keep the same ref value from the first render.
+         *
+         * In browser, React will clear the ref after the first effect cleanup,
+         * so that wouldn't be an issue.
+         *
+         * In StrictMode, however, the ref is kept,
+         * and in the hook above the code checks for `prevPropsRef.current === null`
+         * which would be false so it would not dispatch the `addCartesianGraphicalItem` action again.
+         *
+         * https://github.com/recharts/recharts/issues/6022
+         */
+        prevPropsRef.current = null;
+      }
+    };
+  }, [dispatch]);
+  return null;
+}
+function SetPolarGraphicalItem(props) {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _graphicalItemsSlice.addPolarGraphicalItem)(props));
+    return () => {
+      dispatch((0, _graphicalItemsSlice.removePolarGraphicalItem)(props));
+    };
+  }, [dispatch, props]);
+  return null;
+}
Index: node_modules/recharts/lib/state/SetLegendPayload.js
===================================================================
--- node_modules/recharts/lib/state/SetLegendPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/SetLegendPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.SetLegendPayload = SetLegendPayload;
+exports.SetPolarLegendPayload = SetPolarLegendPayload;
+var _react = require("react");
+var _PanoramaContext = require("../context/PanoramaContext");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _hooks = require("./hooks");
+var _legendSlice = require("./legendSlice");
+var noop = () => {};
+function SetLegendPayload(_ref) {
+  var {
+    legendPayload
+  } = _ref;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  (0, _react.useEffect)(() => {
+    if (isPanorama) {
+      return noop;
+    }
+    dispatch((0, _legendSlice.addLegendPayload)(legendPayload));
+    return () => {
+      dispatch((0, _legendSlice.removeLegendPayload)(legendPayload));
+    };
+  }, [dispatch, isPanorama, legendPayload]);
+  return null;
+}
+function SetPolarLegendPayload(_ref2) {
+  var {
+    legendPayload
+  } = _ref2;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var layout = (0, _hooks.useAppSelector)(_chartLayoutContext.selectChartLayout);
+  (0, _react.useEffect)(() => {
+    if (layout !== 'centric' && layout !== 'radial') {
+      return noop;
+    }
+    dispatch((0, _legendSlice.addLegendPayload)(legendPayload));
+    return () => {
+      dispatch((0, _legendSlice.removeLegendPayload)(legendPayload));
+    };
+  }, [dispatch, layout, legendPayload]);
+  return null;
+}
Index: node_modules/recharts/lib/state/SetTooltipEntrySettings.js
===================================================================
--- node_modules/recharts/lib/state/SetTooltipEntrySettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/SetTooltipEntrySettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.SetTooltipEntrySettings = SetTooltipEntrySettings;
+var _react = require("react");
+var _hooks = require("./hooks");
+var _tooltipSlice = require("./tooltipSlice");
+var _PanoramaContext = require("../context/PanoramaContext");
+function SetTooltipEntrySettings(_ref) {
+  var {
+    fn,
+    args
+  } = _ref;
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var isPanorama = (0, _PanoramaContext.useIsPanorama)();
+  (0, _react.useEffect)(() => {
+    if (isPanorama) {
+      // Panorama graphical items should never contribute to Tooltip payload.
+      return undefined;
+    }
+    var tooltipEntrySettings = fn(args);
+    dispatch((0, _tooltipSlice.addTooltipEntrySettings)(tooltipEntrySettings));
+    return () => {
+      dispatch((0, _tooltipSlice.removeTooltipEntrySettings)(tooltipEntrySettings));
+    };
+  }, [fn, args, dispatch, isPanorama]);
+  return null;
+}
Index: node_modules/recharts/lib/state/brushSlice.js
===================================================================
--- node_modules/recharts/lib/state/brushSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/brushSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.setBrushSettings = exports.brushSlice = exports.brushReducer = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+/**
+ * From all Brush properties, only height has a default value and will always be defined.
+ * Other properties are nullable and will be computed from offsets and margins if they are not set.
+ */
+
+var initialState = {
+  x: 0,
+  y: 0,
+  width: 0,
+  height: 0,
+  padding: {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  }
+};
+var brushSlice = exports.brushSlice = (0, _toolkit.createSlice)({
+  name: 'brush',
+  initialState,
+  reducers: {
+    setBrushSettings(_state, action) {
+      if (action.payload == null) {
+        return initialState;
+      }
+      return action.payload;
+    }
+  }
+});
+var {
+  setBrushSettings
+} = brushSlice.actions;
+exports.setBrushSettings = setBrushSettings;
+var brushReducer = exports.brushReducer = brushSlice.reducer;
Index: node_modules/recharts/lib/state/cartesianAxisSlice.js
===================================================================
--- node_modules/recharts/lib/state/cartesianAxisSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/cartesianAxisSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,91 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.updateYAxisWidth = exports.removeZAxis = exports.removeYAxis = exports.removeXAxis = exports.cartesianAxisReducer = exports.addZAxis = exports.addYAxis = exports.addXAxis = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _immer = require("immer");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * Properties shared in X, Y, and Z axes
+ */
+
+/**
+ * These are the external props, visible for users as they set them using our public API.
+ * There is all sorts of internal computed things based on these, but they will come through selectors.
+ *
+ * Properties shared between X and Y axes
+ */
+
+/**
+ * Z axis is special because it's never displayed. It controls the size of Scatter dots,
+ * but it never displays ticks anywhere.
+ */
+
+var initialState = {
+  xAxis: {},
+  yAxis: {},
+  zAxis: {}
+};
+
+/**
+ * This is the slice where each individual Axis element pushes its own configuration.
+ * Prefer to use this one instead of axisSlice.
+ */
+var cartesianAxisSlice = (0, _toolkit.createSlice)({
+  name: 'cartesianAxis',
+  initialState,
+  reducers: {
+    addXAxis(state, action) {
+      state.xAxis[action.payload.id] = (0, _immer.castDraft)(action.payload);
+    },
+    removeXAxis(state, action) {
+      delete state.xAxis[action.payload.id];
+    },
+    addYAxis(state, action) {
+      state.yAxis[action.payload.id] = (0, _immer.castDraft)(action.payload);
+    },
+    removeYAxis(state, action) {
+      delete state.yAxis[action.payload.id];
+    },
+    addZAxis(state, action) {
+      state.zAxis[action.payload.id] = (0, _immer.castDraft)(action.payload);
+    },
+    removeZAxis(state, action) {
+      delete state.zAxis[action.payload.id];
+    },
+    updateYAxisWidth(state, action) {
+      var {
+        id,
+        width
+      } = action.payload;
+      if (state.yAxis[id]) {
+        state.yAxis[id] = _objectSpread(_objectSpread({}, state.yAxis[id]), {}, {
+          width
+        });
+      }
+    }
+  }
+});
+var {
+  addXAxis,
+  removeXAxis,
+  addYAxis,
+  removeYAxis,
+  addZAxis,
+  removeZAxis,
+  updateYAxisWidth
+} = cartesianAxisSlice.actions;
+exports.updateYAxisWidth = updateYAxisWidth;
+exports.removeZAxis = removeZAxis;
+exports.addZAxis = addZAxis;
+exports.removeYAxis = removeYAxis;
+exports.addYAxis = addYAxis;
+exports.removeXAxis = removeXAxis;
+exports.addXAxis = addXAxis;
+var cartesianAxisReducer = exports.cartesianAxisReducer = cartesianAxisSlice.reducer;
Index: node_modules/recharts/lib/state/chartDataSlice.js
===================================================================
--- node_modules/recharts/lib/state/chartDataSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/chartDataSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.setDataStartEndIndexes = exports.setComputedData = exports.setChartData = exports.initialChartDataState = exports.chartDataReducer = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+/**
+ * This is the data that's coming through main chart `data` prop
+ * Recharts is very flexible in what it accepts so the type is very flexible too.
+ * This will typically be an object, and various components will provide various `dataKey`
+ * that dictates how to pull data from that object.
+ *
+ * TL;DR: before dataKey
+ */
+
+/**
+ * So this is the same unknown type as ChartData but this is after the dataKey has been applied.
+ * We still don't know what the type is - that depends on what exactly it was before the dataKey application,
+ * and the dataKey can return whatever anyway - but let's keep it separate as a form of documentation.
+ *
+ * TL;DR: ChartData after dataKey.
+ */
+
+var initialChartDataState = exports.initialChartDataState = {
+  chartData: undefined,
+  computedData: undefined,
+  dataStartIndex: 0,
+  dataEndIndex: 0
+};
+var chartDataSlice = (0, _toolkit.createSlice)({
+  name: 'chartData',
+  initialState: initialChartDataState,
+  reducers: {
+    setChartData(state, action) {
+      state.chartData = action.payload;
+      if (action.payload == null) {
+        state.dataStartIndex = 0;
+        state.dataEndIndex = 0;
+        return;
+      }
+      if (action.payload.length > 0 && state.dataEndIndex !== action.payload.length - 1) {
+        state.dataEndIndex = action.payload.length - 1;
+      }
+    },
+    setComputedData(state, action) {
+      state.computedData = action.payload;
+    },
+    setDataStartEndIndexes(state, action) {
+      var {
+        startIndex,
+        endIndex
+      } = action.payload;
+      if (startIndex != null) {
+        state.dataStartIndex = startIndex;
+      }
+      if (endIndex != null) {
+        state.dataEndIndex = endIndex;
+      }
+    }
+  }
+});
+var {
+  setChartData,
+  setDataStartEndIndexes,
+  setComputedData
+} = chartDataSlice.actions;
+exports.setComputedData = setComputedData;
+exports.setDataStartEndIndexes = setDataStartEndIndexes;
+exports.setChartData = setChartData;
+var chartDataReducer = exports.chartDataReducer = chartDataSlice.reducer;
Index: node_modules/recharts/lib/state/errorBarSlice.js
===================================================================
--- node_modules/recharts/lib/state/errorBarSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/errorBarSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.removeErrorBar = exports.errorBarReducer = exports.addErrorBar = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+/**
+ * ErrorBars have lot more settings but all the others are scoped to the component itself.
+ * Only some of them required to be reported to the global store because XAxis and YAxis need to know
+ * if the error bar is contributing to extending the axis domain.
+ */
+
+var initialState = {};
+var errorBarSlice = (0, _toolkit.createSlice)({
+  name: 'errorBars',
+  initialState,
+  reducers: {
+    addErrorBar: (state, action) => {
+      var {
+        itemId,
+        errorBar
+      } = action.payload;
+      if (!state[itemId]) {
+        state[itemId] = [];
+      }
+      state[itemId].push(errorBar);
+    },
+    removeErrorBar: (state, action) => {
+      var {
+        itemId,
+        errorBar
+      } = action.payload;
+      if (state[itemId]) {
+        state[itemId] = state[itemId].filter(e => e.dataKey !== errorBar.dataKey || e.direction !== errorBar.direction);
+      }
+    }
+  }
+});
+var {
+  addErrorBar,
+  removeErrorBar
+} = errorBarSlice.actions;
+exports.removeErrorBar = removeErrorBar;
+exports.addErrorBar = addErrorBar;
+var errorBarReducer = exports.errorBarReducer = errorBarSlice.reducer;
Index: node_modules/recharts/lib/state/externalEventsMiddleware.js
===================================================================
--- node_modules/recharts/lib/state/externalEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/externalEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.externalEventsMiddleware = exports.externalEventAction = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _tooltipSelectors = require("./selectors/tooltipSelectors");
+var externalEventAction = exports.externalEventAction = (0, _toolkit.createAction)('externalEvent');
+var externalEventsMiddleware = exports.externalEventsMiddleware = (0, _toolkit.createListenerMiddleware)();
+externalEventsMiddleware.startListening({
+  actionCreator: externalEventAction,
+  effect: (action, listenerApi) => {
+    if (action.payload.handler == null) {
+      return;
+    }
+    var state = listenerApi.getState();
+    var nextState = {
+      activeCoordinate: (0, _tooltipSelectors.selectActiveTooltipCoordinate)(state),
+      activeDataKey: (0, _tooltipSelectors.selectActiveTooltipDataKey)(state),
+      activeIndex: (0, _tooltipSelectors.selectActiveTooltipIndex)(state),
+      activeLabel: (0, _tooltipSelectors.selectActiveLabel)(state),
+      activeTooltipIndex: (0, _tooltipSelectors.selectActiveTooltipIndex)(state),
+      isTooltipActive: (0, _tooltipSelectors.selectIsTooltipActive)(state)
+    };
+    action.payload.handler(nextState, action.payload.reactEvent);
+  }
+});
Index: node_modules/recharts/lib/state/graphicalItemsSlice.js
===================================================================
--- node_modules/recharts/lib/state/graphicalItemsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/graphicalItemsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.replaceCartesianGraphicalItem = exports.removePolarGraphicalItem = exports.removeCartesianGraphicalItem = exports.graphicalItemsReducer = exports.addPolarGraphicalItem = exports.addCartesianGraphicalItem = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _immer = require("immer");
+/**
+ * Unique ID of the graphical item.
+ * This is used to identify the graphical item in the state and in the React tree.
+ * This is required for every graphical item - it's either provided by the user or generated automatically.
+ */
+
+var initialState = {
+  cartesianItems: [],
+  polarItems: []
+};
+var graphicalItemsSlice = (0, _toolkit.createSlice)({
+  name: 'graphicalItems',
+  initialState,
+  reducers: {
+    addCartesianGraphicalItem(state, action) {
+      state.cartesianItems.push((0, _immer.castDraft)(action.payload));
+    },
+    replaceCartesianGraphicalItem(state, action) {
+      var {
+        prev,
+        next
+      } = action.payload;
+      var index = (0, _toolkit.current)(state).cartesianItems.indexOf((0, _immer.castDraft)(prev));
+      if (index > -1) {
+        state.cartesianItems[index] = (0, _immer.castDraft)(next);
+      }
+    },
+    removeCartesianGraphicalItem(state, action) {
+      var index = (0, _toolkit.current)(state).cartesianItems.indexOf((0, _immer.castDraft)(action.payload));
+      if (index > -1) {
+        state.cartesianItems.splice(index, 1);
+      }
+    },
+    addPolarGraphicalItem(state, action) {
+      state.polarItems.push((0, _immer.castDraft)(action.payload));
+    },
+    removePolarGraphicalItem(state, action) {
+      var index = (0, _toolkit.current)(state).polarItems.indexOf((0, _immer.castDraft)(action.payload));
+      if (index > -1) {
+        state.polarItems.splice(index, 1);
+      }
+    }
+  }
+});
+var {
+  addCartesianGraphicalItem,
+  replaceCartesianGraphicalItem,
+  removeCartesianGraphicalItem,
+  addPolarGraphicalItem,
+  removePolarGraphicalItem
+} = graphicalItemsSlice.actions;
+exports.removePolarGraphicalItem = removePolarGraphicalItem;
+exports.addPolarGraphicalItem = addPolarGraphicalItem;
+exports.removeCartesianGraphicalItem = removeCartesianGraphicalItem;
+exports.replaceCartesianGraphicalItem = replaceCartesianGraphicalItem;
+exports.addCartesianGraphicalItem = addCartesianGraphicalItem;
+var graphicalItemsReducer = exports.graphicalItemsReducer = graphicalItemsSlice.reducer;
Index: node_modules/recharts/lib/state/hooks.js
===================================================================
--- node_modules/recharts/lib/state/hooks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/hooks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useAppDispatch = void 0;
+exports.useAppSelector = useAppSelector;
+var _withSelector = require("use-sync-external-store/shim/with-selector");
+var _react = require("react");
+var _RechartsReduxContext = require("./RechartsReduxContext");
+var noopDispatch = a => a;
+var useAppDispatch = () => {
+  var context = (0, _react.useContext)(_RechartsReduxContext.RechartsReduxContext);
+  if (context) {
+    return context.store.dispatch;
+  }
+  return noopDispatch;
+};
+exports.useAppDispatch = useAppDispatch;
+var noop = () => {};
+var addNestedSubNoop = () => noop;
+var refEquality = (a, b) => a === b;
+
+/**
+ * This is a recharts variant of `useSelector` from 'react-redux' package.
+ *
+ * The difference is that react-redux version will throw an Error when used outside of Redux context.
+ *
+ * This, recharts version, will return undefined instead.
+ *
+ * This is because we want to allow using our components outside the Chart wrapper,
+ * and have people provide all props explicitly.
+ *
+ * If however they use the component inside a chart wrapper then those props become optional,
+ * and we read them from Redux state instead.
+ *
+ * @param selector for pulling things out of Redux store; will not be called if the store is not accessible
+ * @return whatever the selector returned; or undefined when outside of Redux store
+ */
+function useAppSelector(selector) {
+  var context = (0, _react.useContext)(_RechartsReduxContext.RechartsReduxContext);
+  return (0, _withSelector.useSyncExternalStoreWithSelector)(context ? context.subscription.addNestedSub : addNestedSubNoop, context ? context.store.getState : noop, context ? context.store.getState : noop, context ? selector : noop, refEquality);
+}
Index: node_modules/recharts/lib/state/keyboardEventsMiddleware.js
===================================================================
--- node_modules/recharts/lib/state/keyboardEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/keyboardEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,86 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.keyboardEventsMiddleware = exports.keyDownAction = exports.focusAction = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _tooltipSlice = require("./tooltipSlice");
+var _tooltipSelectors = require("./selectors/tooltipSelectors");
+var _selectors = require("./selectors/selectors");
+var _axisSelectors = require("./selectors/axisSelectors");
+var _combineActiveTooltipIndex = require("./selectors/combiners/combineActiveTooltipIndex");
+var keyDownAction = exports.keyDownAction = (0, _toolkit.createAction)('keyDown');
+var focusAction = exports.focusAction = (0, _toolkit.createAction)('focus');
+var keyboardEventsMiddleware = exports.keyboardEventsMiddleware = (0, _toolkit.createListenerMiddleware)();
+keyboardEventsMiddleware.startListening({
+  actionCreator: keyDownAction,
+  effect: (action, listenerApi) => {
+    var state = listenerApi.getState();
+    var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
+    if (!accessibilityLayerIsActive) {
+      return;
+    }
+    var {
+      keyboardInteraction
+    } = state.tooltip;
+    var key = action.payload;
+    if (key !== 'ArrowRight' && key !== 'ArrowLeft' && key !== 'Enter') {
+      return;
+    }
+
+    // TODO this is lacking index for charts that do not support numeric indexes
+    var currentIndex = Number((0, _combineActiveTooltipIndex.combineActiveTooltipIndex)(keyboardInteraction, (0, _tooltipSelectors.selectTooltipDisplayedData)(state)));
+    var tooltipTicks = (0, _tooltipSelectors.selectTooltipAxisTicks)(state);
+    if (key === 'Enter') {
+      var _coordinate = (0, _selectors.selectCoordinateForDefaultIndex)(state, 'axis', 'hover', String(keyboardInteraction.index));
+      listenerApi.dispatch((0, _tooltipSlice.setKeyboardInteraction)({
+        active: !keyboardInteraction.active,
+        activeIndex: keyboardInteraction.index,
+        activeDataKey: keyboardInteraction.dataKey,
+        activeCoordinate: _coordinate
+      }));
+      return;
+    }
+    var direction = (0, _axisSelectors.selectChartDirection)(state);
+    var directionMultiplier = direction === 'left-to-right' ? 1 : -1;
+    var movement = key === 'ArrowRight' ? 1 : -1;
+    var nextIndex = currentIndex + movement * directionMultiplier;
+    if (tooltipTicks == null || nextIndex >= tooltipTicks.length || nextIndex < 0) {
+      return;
+    }
+    var coordinate = (0, _selectors.selectCoordinateForDefaultIndex)(state, 'axis', 'hover', String(nextIndex));
+    listenerApi.dispatch((0, _tooltipSlice.setKeyboardInteraction)({
+      active: true,
+      activeIndex: nextIndex.toString(),
+      activeDataKey: undefined,
+      activeCoordinate: coordinate
+    }));
+  }
+});
+keyboardEventsMiddleware.startListening({
+  actionCreator: focusAction,
+  effect: (_action, listenerApi) => {
+    var state = listenerApi.getState();
+    var accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;
+    if (!accessibilityLayerIsActive) {
+      return;
+    }
+    var {
+      keyboardInteraction
+    } = state.tooltip;
+    if (keyboardInteraction.active) {
+      return;
+    }
+    if (keyboardInteraction.index == null) {
+      var nextIndex = '0';
+      var coordinate = (0, _selectors.selectCoordinateForDefaultIndex)(state, 'axis', 'hover', String(nextIndex));
+      listenerApi.dispatch((0, _tooltipSlice.setKeyboardInteraction)({
+        activeDataKey: undefined,
+        active: true,
+        activeIndex: nextIndex,
+        activeCoordinate: coordinate
+      }));
+    }
+  }
+});
Index: node_modules/recharts/lib/state/layoutSlice.js
===================================================================
--- node_modules/recharts/lib/state/layoutSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/layoutSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.setScale = exports.setMargin = exports.setLayout = exports.setChartSize = exports.chartLayoutReducer = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var initialState = {
+  layoutType: 'horizontal',
+  width: 0,
+  height: 0,
+  margin: {
+    top: 5,
+    right: 5,
+    bottom: 5,
+    left: 5
+  },
+  scale: 1
+};
+var chartLayoutSlice = (0, _toolkit.createSlice)({
+  name: 'chartLayout',
+  initialState,
+  reducers: {
+    setLayout(state, action) {
+      state.layoutType = action.payload;
+    },
+    setChartSize(state, action) {
+      state.width = action.payload.width;
+      state.height = action.payload.height;
+    },
+    setMargin(state, action) {
+      state.margin.top = action.payload.top;
+      state.margin.right = action.payload.right;
+      state.margin.bottom = action.payload.bottom;
+      state.margin.left = action.payload.left;
+    },
+    setScale(state, action) {
+      state.scale = action.payload;
+    }
+  }
+});
+var {
+  setMargin,
+  setLayout,
+  setChartSize,
+  setScale
+} = chartLayoutSlice.actions;
+exports.setScale = setScale;
+exports.setChartSize = setChartSize;
+exports.setLayout = setLayout;
+exports.setMargin = setMargin;
+var chartLayoutReducer = exports.chartLayoutReducer = chartLayoutSlice.reducer;
Index: node_modules/recharts/lib/state/legendSlice.js
===================================================================
--- node_modules/recharts/lib/state/legendSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/legendSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.setLegendSize = exports.setLegendSettings = exports.removeLegendPayload = exports.legendReducer = exports.addLegendPayload = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _immer = require("immer");
+/**
+ * The properties inside this state update independently of each other and quite often.
+ * When selecting, never select the whole state because you are going to get
+ * unnecessary re-renders. Select only the properties you need.
+ *
+ * This is why this state type is not exported - don't use it directly.
+ */
+
+var initialState = {
+  settings: {
+    layout: 'horizontal',
+    align: 'center',
+    verticalAlign: 'middle',
+    itemSorter: 'value'
+  },
+  size: {
+    width: 0,
+    height: 0
+  },
+  payload: []
+};
+var legendSlice = (0, _toolkit.createSlice)({
+  name: 'legend',
+  initialState,
+  reducers: {
+    setLegendSize(state, action) {
+      state.size.width = action.payload.width;
+      state.size.height = action.payload.height;
+    },
+    setLegendSettings(state, action) {
+      state.settings.align = action.payload.align;
+      state.settings.layout = action.payload.layout;
+      state.settings.verticalAlign = action.payload.verticalAlign;
+      state.settings.itemSorter = action.payload.itemSorter;
+    },
+    addLegendPayload(state, action) {
+      state.payload.push((0, _immer.castDraft)(action.payload));
+    },
+    removeLegendPayload(state, action) {
+      var index = (0, _toolkit.current)(state).payload.indexOf((0, _immer.castDraft)(action.payload));
+      if (index > -1) {
+        state.payload.splice(index, 1);
+      }
+    }
+  }
+});
+var {
+  setLegendSize,
+  setLegendSettings,
+  addLegendPayload,
+  removeLegendPayload
+} = legendSlice.actions;
+exports.removeLegendPayload = removeLegendPayload;
+exports.addLegendPayload = addLegendPayload;
+exports.setLegendSettings = setLegendSettings;
+exports.setLegendSize = setLegendSize;
+var legendReducer = exports.legendReducer = legendSlice.reducer;
Index: node_modules/recharts/lib/state/mouseEventsMiddleware.js
===================================================================
--- node_modules/recharts/lib/state/mouseEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/mouseEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.mouseMoveMiddleware = exports.mouseMoveAction = exports.mouseClickMiddleware = exports.mouseClickAction = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _tooltipSlice = require("./tooltipSlice");
+var _selectActivePropsFromChartPointer = require("./selectors/selectActivePropsFromChartPointer");
+var _selectTooltipEventType = require("./selectors/selectTooltipEventType");
+var _getChartPointer = require("../util/getChartPointer");
+var mouseClickAction = exports.mouseClickAction = (0, _toolkit.createAction)('mouseClick');
+var mouseClickMiddleware = exports.mouseClickMiddleware = (0, _toolkit.createListenerMiddleware)();
+
+// TODO: there's a bug here when you click the chart the activeIndex resets to zero
+mouseClickMiddleware.startListening({
+  actionCreator: mouseClickAction,
+  effect: (action, listenerApi) => {
+    var mousePointer = action.payload;
+    var activeProps = (0, _selectActivePropsFromChartPointer.selectActivePropsFromChartPointer)(listenerApi.getState(), (0, _getChartPointer.getChartPointer)(mousePointer));
+    if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {
+      listenerApi.dispatch((0, _tooltipSlice.setMouseClickAxisIndex)({
+        activeIndex: activeProps.activeIndex,
+        activeDataKey: undefined,
+        activeCoordinate: activeProps.activeCoordinate
+      }));
+    }
+  }
+});
+var mouseMoveAction = exports.mouseMoveAction = (0, _toolkit.createAction)('mouseMove');
+var mouseMoveMiddleware = exports.mouseMoveMiddleware = (0, _toolkit.createListenerMiddleware)();
+mouseMoveMiddleware.startListening({
+  actionCreator: mouseMoveAction,
+  effect: (action, listenerApi) => {
+    var mousePointer = action.payload;
+    var state = listenerApi.getState();
+    var tooltipEventType = (0, _selectTooltipEventType.selectTooltipEventType)(state, state.tooltip.settings.shared);
+    var activeProps = (0, _selectActivePropsFromChartPointer.selectActivePropsFromChartPointer)(state, (0, _getChartPointer.getChartPointer)(mousePointer));
+
+    // this functionality only applies to charts that have axes
+    if (tooltipEventType === 'axis') {
+      if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {
+        listenerApi.dispatch((0, _tooltipSlice.setMouseOverAxisIndex)({
+          activeIndex: activeProps.activeIndex,
+          activeDataKey: undefined,
+          activeCoordinate: activeProps.activeCoordinate
+        }));
+      } else {
+        // this is needed to clear tooltip state when the mouse moves out of the inRange (svg - offset) function, but not yet out of the svg
+        listenerApi.dispatch((0, _tooltipSlice.mouseLeaveChart)());
+      }
+    }
+  }
+});
Index: node_modules/recharts/lib/state/optionsSlice.js
===================================================================
--- node_modules/recharts/lib/state/optionsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/optionsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.arrayTooltipSearcher = arrayTooltipSearcher;
+exports.optionsReducer = exports.createEventEmitter = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _DataUtils = require("../util/DataUtils");
+/**
+ * These chart options are decided internally, by Recharts,
+ * and will not change during the lifetime of the chart.
+ *
+ * Changing these options can be done by swapping the root element
+ * which will make a brand-new Redux store.
+ *
+ * If you want to store options that can be changed by the user,
+ * use UpdatableChartOptions in rootPropsSlice.ts.
+ */
+
+function arrayTooltipSearcher(data, strIndex) {
+  if (!strIndex) return undefined;
+  var numIndex = Number.parseInt(strIndex, 10);
+  if ((0, _DataUtils.isNan)(numIndex)) {
+    return undefined;
+  }
+  return data === null || data === void 0 ? void 0 : data[numIndex];
+}
+var initialState = {
+  chartName: '',
+  tooltipPayloadSearcher: undefined,
+  eventEmitter: undefined,
+  defaultTooltipEventType: 'axis'
+};
+var optionsSlice = (0, _toolkit.createSlice)({
+  name: 'options',
+  initialState,
+  reducers: {
+    createEventEmitter: state => {
+      if (state.eventEmitter == null) {
+        state.eventEmitter = Symbol('rechartsEventEmitter');
+      }
+    }
+  }
+});
+var optionsReducer = exports.optionsReducer = optionsSlice.reducer;
+var {
+  createEventEmitter
+} = optionsSlice.actions;
+exports.createEventEmitter = createEventEmitter;
Index: node_modules/recharts/lib/state/polarAxisSlice.js
===================================================================
--- node_modules/recharts/lib/state/polarAxisSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/polarAxisSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.removeRadiusAxis = exports.removeAngleAxis = exports.polarAxisReducer = exports.addRadiusAxis = exports.addAngleAxis = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _immer = require("immer");
+var initialState = {
+  radiusAxis: {},
+  angleAxis: {}
+};
+var polarAxisSlice = (0, _toolkit.createSlice)({
+  name: 'polarAxis',
+  initialState,
+  reducers: {
+    addRadiusAxis(state, action) {
+      state.radiusAxis[action.payload.id] = (0, _immer.castDraft)(action.payload);
+    },
+    removeRadiusAxis(state, action) {
+      delete state.radiusAxis[action.payload.id];
+    },
+    addAngleAxis(state, action) {
+      state.angleAxis[action.payload.id] = (0, _immer.castDraft)(action.payload);
+    },
+    removeAngleAxis(state, action) {
+      delete state.angleAxis[action.payload.id];
+    }
+  }
+});
+var {
+  addRadiusAxis,
+  removeRadiusAxis,
+  addAngleAxis,
+  removeAngleAxis
+} = polarAxisSlice.actions;
+exports.removeAngleAxis = removeAngleAxis;
+exports.addAngleAxis = addAngleAxis;
+exports.removeRadiusAxis = removeRadiusAxis;
+exports.addRadiusAxis = addRadiusAxis;
+var polarAxisReducer = exports.polarAxisReducer = polarAxisSlice.reducer;
Index: node_modules/recharts/lib/state/polarOptionsSlice.js
===================================================================
--- node_modules/recharts/lib/state/polarOptionsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/polarOptionsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.updatePolarOptions = exports.polarOptionsReducer = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var polarOptionsSlice = (0, _toolkit.createSlice)({
+  name: 'polarOptions',
+  initialState: null,
+  reducers: {
+    updatePolarOptions: (_state, action) => {
+      return action.payload;
+    }
+  }
+});
+var {
+  updatePolarOptions
+} = polarOptionsSlice.actions;
+exports.updatePolarOptions = updatePolarOptions;
+var polarOptionsReducer = exports.polarOptionsReducer = polarOptionsSlice.reducer;
Index: node_modules/recharts/lib/state/reduxDevtoolsJsonStringifyReplacer.js
===================================================================
--- node_modules/recharts/lib/state/reduxDevtoolsJsonStringifyReplacer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/reduxDevtoolsJsonStringifyReplacer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.reduxDevtoolsJsonStringifyReplacer = reduxDevtoolsJsonStringifyReplacer;
+function reduxDevtoolsJsonStringifyReplacer(_key, value) {
+  if (value instanceof HTMLElement) {
+    return "HTMLElement <".concat(value.tagName, " class=\"").concat(value.className, "\">");
+  }
+  if (value === window) {
+    return 'global.window';
+  }
+  return value;
+}
Index: node_modules/recharts/lib/state/referenceElementsSlice.js
===================================================================
--- node_modules/recharts/lib/state/referenceElementsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/referenceElementsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.removeLine = exports.removeDot = exports.removeArea = exports.referenceElementsSlice = exports.referenceElementsReducer = exports.addLine = exports.addDot = exports.addArea = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var initialState = {
+  dots: [],
+  areas: [],
+  lines: []
+};
+var referenceElementsSlice = exports.referenceElementsSlice = (0, _toolkit.createSlice)({
+  name: 'referenceElements',
+  initialState,
+  reducers: {
+    addDot: (state, action) => {
+      state.dots.push(action.payload);
+    },
+    removeDot: (state, action) => {
+      var index = (0, _toolkit.current)(state).dots.findIndex(dot => dot === action.payload);
+      if (index !== -1) {
+        state.dots.splice(index, 1);
+      }
+    },
+    addArea: (state, action) => {
+      state.areas.push(action.payload);
+    },
+    removeArea: (state, action) => {
+      var index = (0, _toolkit.current)(state).areas.findIndex(area => area === action.payload);
+      if (index !== -1) {
+        state.areas.splice(index, 1);
+      }
+    },
+    addLine: (state, action) => {
+      state.lines.push(action.payload);
+    },
+    removeLine: (state, action) => {
+      var index = (0, _toolkit.current)(state).lines.findIndex(line => line === action.payload);
+      if (index !== -1) {
+        state.lines.splice(index, 1);
+      }
+    }
+  }
+});
+var {
+  addDot,
+  removeDot,
+  addArea,
+  removeArea,
+  addLine,
+  removeLine
+} = referenceElementsSlice.actions;
+exports.removeLine = removeLine;
+exports.addLine = addLine;
+exports.removeArea = removeArea;
+exports.addArea = addArea;
+exports.removeDot = removeDot;
+exports.addDot = addDot;
+var referenceElementsReducer = exports.referenceElementsReducer = referenceElementsSlice.reducer;
Index: node_modules/recharts/lib/state/rootPropsSlice.js
===================================================================
--- node_modules/recharts/lib/state/rootPropsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/rootPropsSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.updateOptions = exports.rootPropsReducer = exports.initialState = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+/**
+ * These are chart options that users can choose - which means they can also
+ * choose to change them which should trigger a re-render.
+ */
+
+var initialState = exports.initialState = {
+  accessibilityLayer: true,
+  barCategoryGap: '10%',
+  barGap: 4,
+  barSize: undefined,
+  className: undefined,
+  maxBarSize: undefined,
+  stackOffset: 'none',
+  syncId: undefined,
+  syncMethod: 'index'
+};
+var rootPropsSlice = (0, _toolkit.createSlice)({
+  name: 'rootProps',
+  initialState,
+  reducers: {
+    updateOptions: (state, action) => {
+      var _action$payload$barGa;
+      state.accessibilityLayer = action.payload.accessibilityLayer;
+      state.barCategoryGap = action.payload.barCategoryGap;
+      state.barGap = (_action$payload$barGa = action.payload.barGap) !== null && _action$payload$barGa !== void 0 ? _action$payload$barGa : initialState.barGap;
+      state.barSize = action.payload.barSize;
+      state.maxBarSize = action.payload.maxBarSize;
+      state.stackOffset = action.payload.stackOffset;
+      state.syncId = action.payload.syncId;
+      state.syncMethod = action.payload.syncMethod;
+      state.className = action.payload.className;
+    }
+  }
+});
+var rootPropsReducer = exports.rootPropsReducer = rootPropsSlice.reducer;
+var {
+  updateOptions
+} = rootPropsSlice.actions;
+exports.updateOptions = updateOptions;
Index: node_modules/recharts/lib/state/selectors/areaSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/areaSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/areaSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,101 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectGraphicalItemStackedData = exports.selectArea = void 0;
+var _reselect = require("reselect");
+var _Area = require("../../cartesian/Area");
+var _axisSelectors = require("./axisSelectors");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _dataSelectors = require("./dataSelectors");
+var _ChartUtils = require("../../util/ChartUtils");
+var _getStackSeriesIdentifier = require("../../util/stacks/getStackSeriesIdentifier");
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, isPanorama) => (0, _axisSelectors.selectAxisWithScale)(state, 'xAxis', xAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, isPanorama) => (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, isPanorama) => (0, _axisSelectors.selectAxisWithScale)(state, 'yAxis', yAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, isPanorama) => (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'yAxis', yAxisId, isPanorama);
+var selectBandSize = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {
+  if ((0, _ChartUtils.isCategoricalAxis)(layout, 'xAxis')) {
+    return (0, _ChartUtils.getBandSizeOfAxis)(xAxis, xAxisTicks, false);
+  }
+  return (0, _ChartUtils.getBandSizeOfAxis)(yAxis, yAxisTicks, false);
+});
+var pickAreaId = (_state, _xAxisId, _yAxisId, _isPanorama, id) => id;
+
+/*
+ * There is a race condition problem because we read some data from props and some from the state.
+ * The state is updated through a dispatch and is one render behind,
+ * and so we have this weird one tick render where the displayedData in one selector have the old dataKey
+ * but the new dataKey in another selector.
+ *
+ * A proper fix is to either move everything into the state, or read the dataKey always from props
+ * - but this is a smaller change.
+ */
+var selectSynchronisedAreaSettings = (0, _reselect.createSelector)([_axisSelectors.selectUnfilteredCartesianItems, pickAreaId], (graphicalItems, id) => graphicalItems.filter(item => item.type === 'area').find(item => item.id === id));
+var selectGraphicalItemStackedData = (state, xAxisId, yAxisId, isPanorama, id) => {
+  var _stackGroups$stackId;
+  var areaSettings = selectSynchronisedAreaSettings(state, xAxisId, yAxisId, isPanorama, id);
+  if (areaSettings == null) {
+    return undefined;
+  }
+  var layout = (0, _chartLayoutContext.selectChartLayout)(state);
+  var isXAxisCategorical = (0, _ChartUtils.isCategoricalAxis)(layout, 'xAxis');
+  var stackGroups;
+  if (isXAxisCategorical) {
+    stackGroups = (0, _axisSelectors.selectStackGroups)(state, 'yAxis', yAxisId, isPanorama);
+  } else {
+    stackGroups = (0, _axisSelectors.selectStackGroups)(state, 'xAxis', xAxisId, isPanorama);
+  }
+  if (stackGroups == null) {
+    return undefined;
+  }
+  var {
+    stackId
+  } = areaSettings;
+  var stackSeriesIdentifier = (0, _getStackSeriesIdentifier.getStackSeriesIdentifier)(areaSettings);
+  if (stackId == null || stackSeriesIdentifier == null) {
+    return undefined;
+  }
+  var groups = (_stackGroups$stackId = stackGroups[stackId]) === null || _stackGroups$stackId === void 0 ? void 0 : _stackGroups$stackId.stackedData;
+  return groups === null || groups === void 0 ? void 0 : groups.find(v => v.key === stackSeriesIdentifier);
+};
+exports.selectGraphicalItemStackedData = selectGraphicalItemStackedData;
+var selectArea = exports.selectArea = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectGraphicalItemStackedData, _dataSelectors.selectChartDataWithIndexesIfNotInPanorama, selectBandSize, selectSynchronisedAreaSettings], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks, stackedData, _ref, bandSize, areaSettings) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (areaSettings == null || layout !== 'horizontal' && layout !== 'vertical' || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || xAxisTicks.length === 0 || yAxisTicks.length === 0 || bandSize == null) {
+    return undefined;
+  }
+  var {
+    data
+  } = areaSettings;
+  var displayedData;
+  if (data && data.length > 0) {
+    displayedData = data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+
+  // Where is this supposed to come from? No charts have that as a prop.
+  var chartBaseValue = undefined;
+  return (0, _Area.computeArea)({
+    layout,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    dataStartIndex,
+    areaSettings,
+    stackedData,
+    displayedData,
+    chartBaseValue,
+    bandSize
+  });
+});
Index: node_modules/recharts/lib/state/selectors/axisSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/axisSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/axisSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1252 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineRealScaleType = exports.combineNumericalDomain = exports.combineNiceTicks = exports.combineLinesDomain = exports.combineGraphicalItemsSettings = exports.combineGraphicalItemsData = exports.combineGraphicalItemTicks = exports.combineDuplicateDomain = exports.combineDotsDomain = exports.combineDomainOfStackGroups = exports.combineDisplayedData = exports.combineCategoricalDomain = exports.combineAxisTicks = exports.combineAxisDomainWithNiceTicks = exports.combineAxisDomain = exports.combineAreasDomain = exports.combineAppliedValues = exports.combineAppliedNumericalValuesIncludingErrorValues = void 0;
+exports.combineScaleFunction = combineScaleFunction;
+exports.filterReferenceElements = exports.filterGraphicalNotStackedItems = exports.combineYAxisRange = exports.combineXAxisRange = exports.combineStackGroups = void 0;
+exports.fromMainValueToError = fromMainValueToError;
+exports.getDomainDefinition = void 0;
+exports.getErrorDomainByDataKey = getErrorDomainByDataKey;
+exports.implicitZAxis = exports.implicitYAxis = exports.implicitXAxis = void 0;
+exports.isErrorBarRelevantForAxisType = isErrorBarRelevantForAxisType;
+exports.itemAxisPredicate = itemAxisPredicate;
+exports.selectZAxisWithScale = exports.selectZAxisSettings = exports.selectYAxisSize = exports.selectYAxisSettings = exports.selectYAxisPosition = exports.selectXAxisSize = exports.selectXAxisSettings = exports.selectXAxisPosition = exports.selectUnfilteredCartesianItems = exports.selectTicksOfGraphicalItem = exports.selectTicksOfAxis = exports.selectStackedCartesianItemsSettings = exports.selectStackGroups = exports.selectSmallestDistanceBetweenValues = exports.selectReferenceLinesByAxis = exports.selectReferenceLines = exports.selectReferenceDotsByAxis = exports.selectReferenceDots = exports.selectReferenceAreasByAxis = exports.selectReferenceAreas = exports.selectRealScaleType = exports.selectNumericalDomain = exports.selectNiceTicks = exports.selectHasBar = exports.selectErrorBarsSettingsExceptStacked = exports.selectErrorBarsSettings = exports.selectDuplicateDomain = exports.selectDomainOfStackGroups = exports.selectDomainDefinition = exports.selectDisplayedStackedData = exports.selectDisplayedData = exports.selectChartDirection = exports.selectCategoricalDomain = exports.selectCartesianItemsSettings = exports.selectCartesianGraphicalItemsData = exports.selectCartesianAxisSize = exports.selectCalculatedYAxisPadding = exports.selectCalculatedXAxisPadding = exports.selectBaseAxis = exports.selectAxisWithScale = exports.selectAxisSettings = exports.selectAxisScale = exports.selectAxisRangeWithReverse = exports.selectAxisRange = exports.selectAxisPropsNeededForCartesianGridTicksGenerator = exports.selectAxisDomainIncludingNiceTicks = exports.selectAxisDomain = exports.selectAllYAxesOffsetSteps = exports.selectAllXAxesOffsetSteps = exports.selectAllErrorBarSettings = exports.selectAllAppliedValues = exports.selectAllAppliedNumericalValuesIncludingErrorValues = exports.mergeDomains = void 0;
+var _reselect = require("reselect");
+var _range = _interopRequireDefault(require("es-toolkit/compat/range"));
+var d3Scales = _interopRequireWildcard(require("victory-vendor/d3-scale"));
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _ChartUtils = require("../../util/ChartUtils");
+var _dataSelectors = require("./dataSelectors");
+var _isDomainSpecifiedByUser = require("../../util/isDomainSpecifiedByUser");
+var _DataUtils = require("../../util/DataUtils");
+var _isWellBehavedNumber = require("../../util/isWellBehavedNumber");
+var _scale = require("../../util/scale");
+var _containerSelectors = require("./containerSelectors");
+var _selectAllAxes = require("./selectAllAxes");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var _brushSelectors = require("./brushSelectors");
+var _rootPropsSelectors = require("./rootPropsSelectors");
+var _polarAxisSelectors = require("./polarAxisSelectors");
+var _pickAxisType = require("./pickAxisType");
+var _pickAxisId = require("./pickAxisId");
+var _combineAxisRangeWithReverse = require("./combiners/combineAxisRangeWithReverse");
+var _Constants = require("../../util/Constants");
+var _getStackSeriesIdentifier = require("../../util/stacks/getStackSeriesIdentifier");
+var _selectTooltipAxis = require("./selectTooltipAxis");
+var _combineDisplayedStackedData = require("./combiners/combineDisplayedStackedData");
+var _StackedGraphicalItem = require("../types/StackedGraphicalItem");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var defaultNumericDomain = [0, 'auto'];
+
+/**
+ * angle, radius, X, Y, and Z axes all have domain and range and scale and associated settings
+ */
+
+/**
+ * X and Y axes have ticks. Z axis is never displayed and so it lacks ticks
+ * and tick settings.
+ */
+
+/**
+ * If an axis is not explicitly defined as an element,
+ * we still need to render something in the chart and we need
+ * some object to hold the domain and default settings.
+ */
+var implicitXAxis = exports.implicitXAxis = {
+  allowDataOverflow: false,
+  allowDecimals: true,
+  allowDuplicatedCategory: true,
+  angle: 0,
+  dataKey: undefined,
+  domain: undefined,
+  height: 30,
+  hide: true,
+  id: 0,
+  includeHidden: false,
+  interval: 'preserveEnd',
+  minTickGap: 5,
+  mirror: false,
+  name: undefined,
+  orientation: 'bottom',
+  padding: {
+    left: 0,
+    right: 0
+  },
+  reversed: false,
+  scale: 'auto',
+  tick: true,
+  tickCount: 5,
+  tickFormatter: undefined,
+  ticks: undefined,
+  type: 'category',
+  unit: undefined
+};
+var selectXAxisSettings = (state, axisId) => {
+  var axis = state.cartesianAxis.xAxis[axisId];
+  if (axis == null) {
+    return implicitXAxis;
+  }
+  return axis;
+};
+
+/**
+ * If an axis is not explicitly defined as an element,
+ * we still need to render something in the chart and we need
+ * some object to hold the domain and default settings.
+ */
+exports.selectXAxisSettings = selectXAxisSettings;
+var implicitYAxis = exports.implicitYAxis = {
+  allowDataOverflow: false,
+  allowDecimals: true,
+  allowDuplicatedCategory: true,
+  angle: 0,
+  dataKey: undefined,
+  domain: defaultNumericDomain,
+  hide: true,
+  id: 0,
+  includeHidden: false,
+  interval: 'preserveEnd',
+  minTickGap: 5,
+  mirror: false,
+  name: undefined,
+  orientation: 'left',
+  padding: {
+    top: 0,
+    bottom: 0
+  },
+  reversed: false,
+  scale: 'auto',
+  tick: true,
+  tickCount: 5,
+  tickFormatter: undefined,
+  ticks: undefined,
+  type: 'number',
+  unit: undefined,
+  width: _Constants.DEFAULT_Y_AXIS_WIDTH
+};
+var selectYAxisSettings = (state, axisId) => {
+  var axis = state.cartesianAxis.yAxis[axisId];
+  if (axis == null) {
+    return implicitYAxis;
+  }
+  return axis;
+};
+exports.selectYAxisSettings = selectYAxisSettings;
+var implicitZAxis = exports.implicitZAxis = {
+  domain: [0, 'auto'],
+  includeHidden: false,
+  reversed: false,
+  allowDataOverflow: false,
+  allowDuplicatedCategory: false,
+  dataKey: undefined,
+  id: 0,
+  name: '',
+  range: [64, 64],
+  scale: 'auto',
+  type: 'number',
+  unit: ''
+};
+var selectZAxisSettings = (state, axisId) => {
+  var axis = state.cartesianAxis.zAxis[axisId];
+  if (axis == null) {
+    return implicitZAxis;
+  }
+  return axis;
+};
+exports.selectZAxisSettings = selectZAxisSettings;
+var selectBaseAxis = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSettings(state, axisId);
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSettings(state, axisId);
+      }
+    case 'zAxis':
+      {
+        return selectZAxisSettings(state, axisId);
+      }
+    case 'angleAxis':
+      {
+        return (0, _polarAxisSelectors.selectAngleAxis)(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return (0, _polarAxisSelectors.selectRadiusAxis)(state, axisId);
+      }
+    default:
+      throw new Error("Unexpected axis type: ".concat(axisType));
+  }
+};
+exports.selectBaseAxis = selectBaseAxis;
+var selectCartesianAxisSettings = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSettings(state, axisId);
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSettings(state, axisId);
+      }
+    default:
+      throw new Error("Unexpected axis type: ".concat(axisType));
+  }
+};
+
+/**
+ * Selects either an X or Y axis. Doesn't work with Z axis - for that, instead use selectBaseAxis.
+ * @param state Root state
+ * @param axisType xAxis | yAxis
+ * @param axisId xAxisId | yAxisId
+ * @returns axis settings object
+ */
+var selectAxisSettings = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSettings(state, axisId);
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSettings(state, axisId);
+      }
+    case 'angleAxis':
+      {
+        return (0, _polarAxisSelectors.selectAngleAxis)(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return (0, _polarAxisSelectors.selectRadiusAxis)(state, axisId);
+      }
+    default:
+      throw new Error("Unexpected axis type: ".concat(axisType));
+  }
+};
+
+/**
+ * @param state RechartsRootState
+ * @return boolean true if there is at least one Bar or RadialBar
+ */
+exports.selectAxisSettings = selectAxisSettings;
+var selectHasBar = state => state.graphicalItems.cartesianItems.some(item => item.type === 'bar') || state.graphicalItems.polarItems.some(item => item.type === 'radialBar');
+
+/**
+ * Filters CartesianGraphicalItemSettings by the relevant axis ID
+ * @param axisType 'xAxis' | 'yAxis' | 'zAxis' | 'radiusAxis' | 'angleAxis'
+ * @param axisId from props, defaults to 0
+ *
+ * @returns Predicate function that return true for CartesianGraphicalItemSettings that are relevant to the specified axis
+ */
+exports.selectHasBar = selectHasBar;
+function itemAxisPredicate(axisType, axisId) {
+  return item => {
+    switch (axisType) {
+      case 'xAxis':
+        // This is sensitive to the data type, as 0 !== '0'. I wonder if we should be more flexible. How does 2.x branch behave? TODO write test for that
+        return 'xAxisId' in item && item.xAxisId === axisId;
+      case 'yAxis':
+        return 'yAxisId' in item && item.yAxisId === axisId;
+      case 'zAxis':
+        return 'zAxisId' in item && item.zAxisId === axisId;
+      case 'angleAxis':
+        return 'angleAxisId' in item && item.angleAxisId === axisId;
+      case 'radiusAxis':
+        return 'radiusAxisId' in item && item.radiusAxisId === axisId;
+      default:
+        return false;
+    }
+  };
+}
+var selectUnfilteredCartesianItems = state => state.graphicalItems.cartesianItems;
+exports.selectUnfilteredCartesianItems = selectUnfilteredCartesianItems;
+var selectAxisPredicate = (0, _reselect.createSelector)([_pickAxisType.pickAxisType, _pickAxisId.pickAxisId], itemAxisPredicate);
+var combineGraphicalItemsSettings = (graphicalItems, axisSettings, axisPredicate) => graphicalItems.filter(axisPredicate).filter(item => {
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.includeHidden) === true) {
+    return true;
+  }
+  return !item.hide;
+});
+exports.combineGraphicalItemsSettings = combineGraphicalItemsSettings;
+var selectCartesianItemsSettings = exports.selectCartesianItemsSettings = (0, _reselect.createSelector)([selectUnfilteredCartesianItems, selectBaseAxis, selectAxisPredicate], combineGraphicalItemsSettings);
+var selectStackedCartesianItemsSettings = exports.selectStackedCartesianItemsSettings = (0, _reselect.createSelector)([selectCartesianItemsSettings], cartesianItems => {
+  return cartesianItems.filter(item => item.type === 'area' || item.type === 'bar').filter(_StackedGraphicalItem.isStacked);
+});
+var filterGraphicalNotStackedItems = cartesianItems => cartesianItems.filter(item => !('stackId' in item) || item.stackId === undefined);
+exports.filterGraphicalNotStackedItems = filterGraphicalNotStackedItems;
+var selectCartesianItemsSettingsExceptStacked = (0, _reselect.createSelector)([selectCartesianItemsSettings], filterGraphicalNotStackedItems);
+var combineGraphicalItemsData = cartesianItems => cartesianItems.map(item => item.data).filter(Boolean).flat(1);
+
+/**
+ * This is a "cheap" selector - it returns the data but doesn't iterate them, so it is not sensitive on the array length.
+ * Also does not apply dataKey yet.
+ * @param state RechartsRootState
+ * @returns data defined on the chart graphical items, such as Line or Scatter or Pie, and filtered with appropriate dataKey
+ */
+exports.combineGraphicalItemsData = combineGraphicalItemsData;
+var selectCartesianGraphicalItemsData = exports.selectCartesianGraphicalItemsData = (0, _reselect.createSelector)([selectCartesianItemsSettings], combineGraphicalItemsData);
+var combineDisplayedData = (graphicalItemsData, _ref) => {
+  var {
+    chartData = [],
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (graphicalItemsData.length > 0) {
+    /*
+     * There is no slicing when data is defined on graphical items. Why?
+     * Because Brush ignores data defined on graphical items,
+     * and does not render.
+     * So Brush will never show up in a Scatter chart for example.
+     * This is something we will need to fix.
+     *
+     * Now, when the root chart data is not defined, the dataEndIndex is 0,
+     * which means the itemsData will be sliced to an empty array anyway.
+     * But that's an implementation detail, and we can fix that too.
+     *
+     * Also, in absence of Axis dataKey, we use the dataKey from each item, respectively.
+     * This is the usual pattern for numerical axis, that is the one where bars go up:
+     * users don't specify any dataKey by default and expect the axis to "just match the data".
+     */
+    return graphicalItemsData;
+  }
+  return chartData.slice(dataStartIndex, dataEndIndex + 1);
+};
+
+/**
+ * This selector will return all data there is in the chart: graphical items, chart root, all together.
+ * Useful for figuring out an axis domain (because that needs to know of everything),
+ * not useful for rendering individual graphical elements (because they need to know which data is theirs and which is not).
+ *
+ * This function will discard the original indexes, so it is also not useful for anything that depends on ordering.
+ */
+exports.combineDisplayedData = combineDisplayedData;
+var selectDisplayedData = exports.selectDisplayedData = (0, _reselect.createSelector)([selectCartesianGraphicalItemsData, _dataSelectors.selectChartDataWithIndexesIfNotInPanorama], combineDisplayedData);
+var combineAppliedValues = (data, axisSettings, items) => {
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {
+    return data.map(item => ({
+      value: (0, _ChartUtils.getValueByDataKey)(item, axisSettings.dataKey)
+    }));
+  }
+  if (items.length > 0) {
+    return items.map(item => item.dataKey).flatMap(dataKey => data.map(entry => ({
+      value: (0, _ChartUtils.getValueByDataKey)(entry, dataKey)
+    })));
+  }
+  return data.map(entry => ({
+    value: entry
+  }));
+};
+
+/**
+ * This selector will return all values with the appropriate dataKey applied on them.
+ * Which dataKey is appropriate depends on where it is defined.
+ *
+ * This is an expensive selector - it will iterate all data and compute their value using the provided dataKey.
+ */
+exports.combineAppliedValues = combineAppliedValues;
+var selectAllAppliedValues = exports.selectAllAppliedValues = (0, _reselect.createSelector)([selectDisplayedData, selectBaseAxis, selectCartesianItemsSettings], combineAppliedValues);
+function isErrorBarRelevantForAxisType(axisType, errorBar) {
+  switch (axisType) {
+    case 'xAxis':
+      return errorBar.direction === 'x';
+    case 'yAxis':
+      return errorBar.direction === 'y';
+    default:
+      return false;
+  }
+}
+
+/**
+ * This is type of "error" in chart. It is set by using ErrorBar, and it can represent confidence interval,
+ * or gap in the data, or standard deviation, or quartiles in boxplot, or whiskers or whatever.
+ *
+ * We will internally represent it as a tuple of two numbers, where the first number is the lower bound and the second number is the upper bound.
+ *
+ * It is also true that the first number should be lower than or equal to the associated "main value",
+ * and the second number should be higher than or equal to the associated "main value".
+ */
+
+function fromMainValueToError(value) {
+  if ((0, _DataUtils.isNumber)(value) && Number.isFinite(value)) {
+    return [value, value];
+  }
+  if (Array.isArray(value)) {
+    var minError = Math.min(...value);
+    var maxError = Math.max(...value);
+    if (!(0, _DataUtils.isNan)(minError) && !(0, _DataUtils.isNan)(maxError) && Number.isFinite(minError) && Number.isFinite(maxError)) {
+      return [minError, maxError];
+    }
+  }
+  return undefined;
+}
+function onlyAllowNumbers(data) {
+  return data.filter(v => (0, _DataUtils.isNumOrStr)(v) || v instanceof Date).map(Number).filter(n => (0, _DataUtils.isNan)(n) === false);
+}
+
+/**
+ * @param entry One item in the 'data' array. Could be anything really - this is defined externally. This is the raw, before dataKey application
+ * @param appliedValue This is the result of applying the 'main' dataKey on the `entry`.
+ * @param relevantErrorBars Error bars that are relevant for the current axis and layout and all that.
+ * @return either undefined or an array of ErrorValue
+ */
+function getErrorDomainByDataKey(entry, appliedValue, relevantErrorBars) {
+  if (!relevantErrorBars || typeof appliedValue !== 'number' || (0, _DataUtils.isNan)(appliedValue)) {
+    return [];
+  }
+  if (!relevantErrorBars.length) {
+    return [];
+  }
+  return onlyAllowNumbers(relevantErrorBars.flatMap(eb => {
+    var errorValue = (0, _ChartUtils.getValueByDataKey)(entry, eb.dataKey);
+    var lowBound, highBound;
+    if (Array.isArray(errorValue)) {
+      [lowBound, highBound] = errorValue;
+    } else {
+      lowBound = highBound = errorValue;
+    }
+    if (!(0, _isWellBehavedNumber.isWellBehavedNumber)(lowBound) || !(0, _isWellBehavedNumber.isWellBehavedNumber)(highBound)) {
+      return undefined;
+    }
+    return [appliedValue - lowBound, appliedValue + highBound];
+  }));
+}
+var selectDisplayedStackedData = exports.selectDisplayedStackedData = (0, _reselect.createSelector)([selectStackedCartesianItemsSettings, _dataSelectors.selectChartDataWithIndexesIfNotInPanorama, _selectTooltipAxis.selectTooltipAxis], _combineDisplayedStackedData.combineDisplayedStackedData);
+var combineStackGroups = (displayedData, items, stackOffsetType) => {
+  var initialItemsGroups = {};
+  var itemsGroup = items.reduce((acc, item) => {
+    if (item.stackId == null) {
+      return acc;
+    }
+    if (acc[item.stackId] == null) {
+      acc[item.stackId] = [];
+    }
+    acc[item.stackId].push(item);
+    return acc;
+  }, initialItemsGroups);
+  return Object.fromEntries(Object.entries(itemsGroup).map(_ref2 => {
+    var [stackId, graphicalItems] = _ref2;
+    var dataKeys = graphicalItems.map(_getStackSeriesIdentifier.getStackSeriesIdentifier);
+    return [stackId, {
+      // @ts-expect-error getStackedData requires that the input is array of objects, Recharts does not test for that
+      stackedData: (0, _ChartUtils.getStackedData)(displayedData, dataKeys, stackOffsetType),
+      graphicalItems
+    }];
+  }));
+};
+
+/**
+ * Stack groups are groups of graphical items that stack on each other.
+ * Stack is a function of axis type (X, Y), axis ID, and stack ID.
+ * Graphical items that do not have a stack ID are not going to be present in stack groups.
+ */
+exports.combineStackGroups = combineStackGroups;
+var selectStackGroups = exports.selectStackGroups = (0, _reselect.createSelector)([selectDisplayedStackedData, selectStackedCartesianItemsSettings, _rootPropsSelectors.selectStackOffsetType], combineStackGroups);
+var combineDomainOfStackGroups = (stackGroups, _ref3, axisType) => {
+  var {
+    dataStartIndex,
+    dataEndIndex
+  } = _ref3;
+  if (axisType === 'zAxis') {
+    // ZAxis ignores stacks
+    return undefined;
+  }
+  var domainOfStackGroups = (0, _ChartUtils.getDomainOfStackGroups)(stackGroups, dataStartIndex, dataEndIndex);
+  if (domainOfStackGroups != null && domainOfStackGroups[0] === 0 && domainOfStackGroups[1] === 0) {
+    return undefined;
+  }
+  return domainOfStackGroups;
+};
+exports.combineDomainOfStackGroups = combineDomainOfStackGroups;
+var selectDomainOfStackGroups = exports.selectDomainOfStackGroups = (0, _reselect.createSelector)([selectStackGroups, _dataSelectors.selectChartDataWithIndexes, _pickAxisType.pickAxisType], combineDomainOfStackGroups);
+var combineAppliedNumericalValuesIncludingErrorValues = (data, axisSettings, items, errorBars, axisType) => {
+  if (items.length > 0) {
+    return data.flatMap(entry => {
+      return items.flatMap(item => {
+        var _errorBars$item$id, _axisSettings$dataKey;
+        var relevantErrorBars = (_errorBars$item$id = errorBars[item.id]) === null || _errorBars$item$id === void 0 ? void 0 : _errorBars$item$id.filter(errorBar => isErrorBarRelevantForAxisType(axisType, errorBar));
+        var valueByDataKey = (0, _ChartUtils.getValueByDataKey)(entry, (_axisSettings$dataKey = axisSettings.dataKey) !== null && _axisSettings$dataKey !== void 0 ? _axisSettings$dataKey : item.dataKey);
+        return {
+          value: valueByDataKey,
+          errorDomain: getErrorDomainByDataKey(entry, valueByDataKey, relevantErrorBars)
+        };
+      });
+    }).filter(Boolean);
+  }
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {
+    return data.map(item => ({
+      value: (0, _ChartUtils.getValueByDataKey)(item, axisSettings.dataKey),
+      errorDomain: []
+    }));
+  }
+  return data.map(entry => ({
+    value: entry,
+    errorDomain: []
+  }));
+};
+exports.combineAppliedNumericalValuesIncludingErrorValues = combineAppliedNumericalValuesIncludingErrorValues;
+var selectAllErrorBarSettings = state => state.errorBars;
+exports.selectAllErrorBarSettings = selectAllErrorBarSettings;
+var combineRelevantErrorBarSettings = (cartesianItemsSettings, allErrorBarSettings, axisType) => {
+  return cartesianItemsSettings.flatMap(item => {
+    return allErrorBarSettings[item.id];
+  }).filter(Boolean).filter(e => {
+    return isErrorBarRelevantForAxisType(axisType, e);
+  });
+};
+var selectErrorBarsSettingsExceptStacked = exports.selectErrorBarsSettingsExceptStacked = (0, _reselect.createSelector)([selectCartesianItemsSettingsExceptStacked, selectAllErrorBarSettings, _pickAxisType.pickAxisType], combineRelevantErrorBarSettings);
+var selectAllAppliedNumericalValuesIncludingErrorValues = exports.selectAllAppliedNumericalValuesIncludingErrorValues = (0, _reselect.createSelector)([selectDisplayedData, selectBaseAxis, selectCartesianItemsSettingsExceptStacked, selectAllErrorBarSettings, _pickAxisType.pickAxisType], combineAppliedNumericalValuesIncludingErrorValues);
+function onlyAllowNumbersAndStringsAndDates(item) {
+  var {
+    value
+  } = item;
+  if ((0, _DataUtils.isNumOrStr)(value) || value instanceof Date) {
+    return value;
+  }
+  return undefined;
+}
+var computeNumericalDomain = dataWithErrorDomains => {
+  var allDataSquished = dataWithErrorDomains
+  // This flatMap has to be flat because we're creating a new array in the return value
+  .flatMap(d => [d.value, d.errorDomain])
+  // This flat is needed because a) errorDomain is an array, and b) value may be a number, or it may be a range (for Area, for example)
+  .flat(1);
+  var onlyNumbers = onlyAllowNumbers(allDataSquished);
+  if (onlyNumbers.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...onlyNumbers), Math.max(...onlyNumbers)];
+};
+var computeDomainOfTypeCategory = (allDataSquished, axisSettings, isCategorical) => {
+  var categoricalDomain = allDataSquished.map(onlyAllowNumbersAndStringsAndDates).filter(v => v != null);
+  if (isCategorical && (axisSettings.dataKey == null || axisSettings.allowDuplicatedCategory && (0, _DataUtils.hasDuplicate)(categoricalDomain))) {
+    /*
+     * 1. In an absence of dataKey, Recharts will use array indexes as its categorical domain
+     * 2. When category axis has duplicated text, serial numbers are used to generate scale
+     */
+    return (0, _range.default)(0, allDataSquished.length);
+  }
+  if (axisSettings.allowDuplicatedCategory) {
+    return categoricalDomain;
+  }
+  return Array.from(new Set(categoricalDomain));
+};
+var getDomainDefinition = axisSettings => {
+  var _axisSettings$domain;
+  if (axisSettings == null || !('domain' in axisSettings)) {
+    return defaultNumericDomain;
+  }
+  if (axisSettings.domain != null) {
+    return axisSettings.domain;
+  }
+  if (axisSettings.ticks != null) {
+    if (axisSettings.type === 'number') {
+      var allValues = onlyAllowNumbers(axisSettings.ticks);
+      return [Math.min(...allValues), Math.max(...allValues)];
+    }
+    if (axisSettings.type === 'category') {
+      return axisSettings.ticks.map(String);
+    }
+  }
+  return (_axisSettings$domain = axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.domain) !== null && _axisSettings$domain !== void 0 ? _axisSettings$domain : defaultNumericDomain;
+};
+exports.getDomainDefinition = getDomainDefinition;
+var mergeDomains = exports.mergeDomains = function mergeDomains() {
+  for (var _len = arguments.length, domains = new Array(_len), _key = 0; _key < _len; _key++) {
+    domains[_key] = arguments[_key];
+  }
+  var allDomains = domains.filter(Boolean);
+  if (allDomains.length === 0) {
+    return undefined;
+  }
+  var allValues = allDomains.flat();
+  var min = Math.min(...allValues);
+  var max = Math.max(...allValues);
+  return [min, max];
+};
+var selectReferenceDots = state => state.referenceElements.dots;
+exports.selectReferenceDots = selectReferenceDots;
+var filterReferenceElements = (elements, axisType, axisId) => {
+  return elements.filter(el => el.ifOverflow === 'extendDomain').filter(el => {
+    if (axisType === 'xAxis') {
+      return el.xAxisId === axisId;
+    }
+    return el.yAxisId === axisId;
+  });
+};
+exports.filterReferenceElements = filterReferenceElements;
+var selectReferenceDotsByAxis = exports.selectReferenceDotsByAxis = (0, _reselect.createSelector)([selectReferenceDots, _pickAxisType.pickAxisType, _pickAxisId.pickAxisId], filterReferenceElements);
+var selectReferenceAreas = state => state.referenceElements.areas;
+exports.selectReferenceAreas = selectReferenceAreas;
+var selectReferenceAreasByAxis = exports.selectReferenceAreasByAxis = (0, _reselect.createSelector)([selectReferenceAreas, _pickAxisType.pickAxisType, _pickAxisId.pickAxisId], filterReferenceElements);
+var selectReferenceLines = state => state.referenceElements.lines;
+exports.selectReferenceLines = selectReferenceLines;
+var selectReferenceLinesByAxis = exports.selectReferenceLinesByAxis = (0, _reselect.createSelector)([selectReferenceLines, _pickAxisType.pickAxisType, _pickAxisId.pickAxisId], filterReferenceElements);
+var combineDotsDomain = (dots, axisType) => {
+  var allCoords = onlyAllowNumbers(dots.map(dot => axisType === 'xAxis' ? dot.x : dot.y));
+  if (allCoords.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...allCoords), Math.max(...allCoords)];
+};
+exports.combineDotsDomain = combineDotsDomain;
+var selectReferenceDotsDomain = (0, _reselect.createSelector)(selectReferenceDotsByAxis, _pickAxisType.pickAxisType, combineDotsDomain);
+var combineAreasDomain = (areas, axisType) => {
+  var allCoords = onlyAllowNumbers(areas.flatMap(area => [axisType === 'xAxis' ? area.x1 : area.y1, axisType === 'xAxis' ? area.x2 : area.y2]));
+  if (allCoords.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...allCoords), Math.max(...allCoords)];
+};
+exports.combineAreasDomain = combineAreasDomain;
+var selectReferenceAreasDomain = (0, _reselect.createSelector)([selectReferenceAreasByAxis, _pickAxisType.pickAxisType], combineAreasDomain);
+var combineLinesDomain = (lines, axisType) => {
+  var allCoords = onlyAllowNumbers(lines.map(line => axisType === 'xAxis' ? line.x : line.y));
+  if (allCoords.length === 0) {
+    return undefined;
+  }
+  return [Math.min(...allCoords), Math.max(...allCoords)];
+};
+exports.combineLinesDomain = combineLinesDomain;
+var selectReferenceLinesDomain = (0, _reselect.createSelector)(selectReferenceLinesByAxis, _pickAxisType.pickAxisType, combineLinesDomain);
+var selectReferenceElementsDomain = (0, _reselect.createSelector)(selectReferenceDotsDomain, selectReferenceLinesDomain, selectReferenceAreasDomain, (dotsDomain, linesDomain, areasDomain) => {
+  return mergeDomains(dotsDomain, areasDomain, linesDomain);
+});
+var selectDomainDefinition = exports.selectDomainDefinition = (0, _reselect.createSelector)([selectBaseAxis], getDomainDefinition);
+var combineNumericalDomain = (axisSettings, domainDefinition, domainOfStackGroups, allDataWithErrorDomains, referenceElementsDomain, layout, axisType) => {
+  var domainFromUserPreference = (0, _isDomainSpecifiedByUser.numericalDomainSpecifiedWithoutRequiringData)(domainDefinition, axisSettings.allowDataOverflow);
+  if (domainFromUserPreference != null) {
+    // We're done! No need to compute anything else.
+    return domainFromUserPreference;
+  }
+  var shouldIncludeDomainOfStackGroups = layout === 'vertical' && axisType === 'xAxis' || layout === 'horizontal' && axisType === 'yAxis';
+  var mergedDomains = shouldIncludeDomainOfStackGroups ? mergeDomains(domainOfStackGroups, referenceElementsDomain, computeNumericalDomain(allDataWithErrorDomains)) : mergeDomains(referenceElementsDomain, computeNumericalDomain(allDataWithErrorDomains));
+  return (0, _isDomainSpecifiedByUser.parseNumericalUserDomain)(domainDefinition, mergedDomains, axisSettings.allowDataOverflow);
+};
+exports.combineNumericalDomain = combineNumericalDomain;
+var selectNumericalDomain = exports.selectNumericalDomain = (0, _reselect.createSelector)([selectBaseAxis, selectDomainDefinition, selectDomainOfStackGroups, selectAllAppliedNumericalValuesIncludingErrorValues, selectReferenceElementsDomain, _chartLayoutContext.selectChartLayout, _pickAxisType.pickAxisType], combineNumericalDomain);
+
+/**
+ * Expand by design maps everything between 0 and 1,
+ * there is nothing to compute.
+ * See https://d3js.org/d3-shape/stack#stack-offsets
+ */
+var expandDomain = [0, 1];
+var combineAxisDomain = (axisSettings, layout, displayedData, allAppliedValues, stackOffsetType, axisType, numericalDomain) => {
+  if ((axisSettings == null || displayedData == null || displayedData.length === 0) && numericalDomain === undefined) {
+    return undefined;
+  }
+  var {
+    dataKey,
+    type
+  } = axisSettings;
+  var isCategorical = (0, _ChartUtils.isCategoricalAxis)(layout, axisType);
+  if (isCategorical && dataKey == null) {
+    return (0, _range.default)(0, displayedData.length);
+  }
+  if (type === 'category') {
+    return computeDomainOfTypeCategory(allAppliedValues, axisSettings, isCategorical);
+  }
+  if (stackOffsetType === 'expand') {
+    return expandDomain;
+  }
+  return numericalDomain;
+};
+exports.combineAxisDomain = combineAxisDomain;
+var selectAxisDomain = exports.selectAxisDomain = (0, _reselect.createSelector)([selectBaseAxis, _chartLayoutContext.selectChartLayout, selectDisplayedData, selectAllAppliedValues, _rootPropsSelectors.selectStackOffsetType, _pickAxisType.pickAxisType, selectNumericalDomain], combineAxisDomain);
+var combineRealScaleType = (axisConfig, layout, hasBar, chartType, axisType) => {
+  if (axisConfig == null) {
+    return undefined;
+  }
+  var {
+    scale,
+    type
+  } = axisConfig;
+  if (scale === 'auto') {
+    if (layout === 'radial' && axisType === 'radiusAxis') {
+      return 'band';
+    }
+    if (layout === 'radial' && axisType === 'angleAxis') {
+      return 'linear';
+    }
+    if (type === 'category' && chartType && (chartType.indexOf('LineChart') >= 0 || chartType.indexOf('AreaChart') >= 0 || chartType.indexOf('ComposedChart') >= 0 && !hasBar)) {
+      return 'point';
+    }
+    if (type === 'category') {
+      return 'band';
+    }
+    return 'linear';
+  }
+  if (typeof scale === 'string') {
+    var name = "scale".concat((0, _DataUtils.upperFirst)(scale));
+    return name in d3Scales ? name : 'point';
+  }
+  return undefined;
+};
+exports.combineRealScaleType = combineRealScaleType;
+var selectRealScaleType = exports.selectRealScaleType = (0, _reselect.createSelector)([selectBaseAxis, _chartLayoutContext.selectChartLayout, selectHasBar, _rootPropsSelectors.selectChartName, _pickAxisType.pickAxisType], combineRealScaleType);
+function getD3ScaleFromType(realScaleType) {
+  if (realScaleType == null) {
+    return undefined;
+  }
+  if (realScaleType in d3Scales) {
+    // @ts-expect-error we should do better type verification here
+    return d3Scales[realScaleType]();
+  }
+  var name = "scale".concat((0, _DataUtils.upperFirst)(realScaleType));
+  if (name in d3Scales) {
+    // @ts-expect-error we should do better type verification here
+    return d3Scales[name]();
+  }
+  return undefined;
+}
+function combineScaleFunction(axis, realScaleType, axisDomain, axisRange) {
+  if (axisDomain == null || axisRange == null) {
+    return undefined;
+  }
+  if (typeof axis.scale === 'function') {
+    // @ts-expect-error we're going to assume here that if axis.scale is a function then it is a d3Scale function
+    return axis.scale.copy().domain(axisDomain).range(axisRange);
+  }
+  var d3ScaleFunction = getD3ScaleFromType(realScaleType);
+  if (d3ScaleFunction == null) {
+    return undefined;
+  }
+  var scale = d3ScaleFunction.domain(axisDomain).range(axisRange);
+  // I don't like this function because it mutates the scale. We should come up with a way to compute the domain up front.
+  (0, _ChartUtils.checkDomainOfScale)(scale);
+  return scale;
+}
+var combineNiceTicks = (axisDomain, axisSettings, realScaleType) => {
+  var domainDefinition = getDomainDefinition(axisSettings);
+  if (realScaleType !== 'auto' && realScaleType !== 'linear') {
+    return undefined;
+  }
+  if (axisSettings != null && axisSettings.tickCount && Array.isArray(domainDefinition) && (domainDefinition[0] === 'auto' || domainDefinition[1] === 'auto') && (0, _isDomainSpecifiedByUser.isWellFormedNumberDomain)(axisDomain)) {
+    return (0, _scale.getNiceTickValues)(axisDomain, axisSettings.tickCount, axisSettings.allowDecimals);
+  }
+  if (axisSettings != null && axisSettings.tickCount && axisSettings.type === 'number' && (0, _isDomainSpecifiedByUser.isWellFormedNumberDomain)(axisDomain)) {
+    return (0, _scale.getTickValuesFixedDomain)(axisDomain, axisSettings.tickCount, axisSettings.allowDecimals);
+  }
+  return undefined;
+};
+exports.combineNiceTicks = combineNiceTicks;
+var selectNiceTicks = exports.selectNiceTicks = (0, _reselect.createSelector)([selectAxisDomain, selectAxisSettings, selectRealScaleType], combineNiceTicks);
+var combineAxisDomainWithNiceTicks = (axisSettings, domain, niceTicks, axisType) => {
+  if (
+  /*
+   * Angle axis for some reason uses nice ticks when rendering axis tick labels,
+   * but doesn't use nice ticks for extending domain like all the other axes do.
+   * Not really sure why? Is there a good reason,
+   * or is it just because someone added support for nice ticks to the other axes and forgot this one?
+   */
+  axisType !== 'angleAxis' && (axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.type) === 'number' && (0, _isDomainSpecifiedByUser.isWellFormedNumberDomain)(domain) && Array.isArray(niceTicks) && niceTicks.length > 0) {
+    var minFromDomain = domain[0];
+    var minFromTicks = niceTicks[0];
+    var maxFromDomain = domain[1];
+    var maxFromTicks = niceTicks[niceTicks.length - 1];
+    return [Math.min(minFromDomain, minFromTicks), Math.max(maxFromDomain, maxFromTicks)];
+  }
+  return domain;
+};
+exports.combineAxisDomainWithNiceTicks = combineAxisDomainWithNiceTicks;
+var selectAxisDomainIncludingNiceTicks = exports.selectAxisDomainIncludingNiceTicks = (0, _reselect.createSelector)([selectBaseAxis, selectAxisDomain, selectNiceTicks, _pickAxisType.pickAxisType], combineAxisDomainWithNiceTicks);
+
+/**
+ * Returns the smallest gap, between two numbers in the data, as a ratio of the whole range (max - min).
+ * Ignores domain provided by user and only considers domain from data.
+ *
+ * The result is a number between 0 and 1.
+ */
+var selectSmallestDistanceBetweenValues = exports.selectSmallestDistanceBetweenValues = (0, _reselect.createSelector)(selectAllAppliedValues, selectBaseAxis, (allDataSquished, axisSettings) => {
+  if (!axisSettings || axisSettings.type !== 'number') {
+    return undefined;
+  }
+  var smallestDistanceBetweenValues = Infinity;
+  var sortedValues = Array.from(onlyAllowNumbers(allDataSquished.map(d => d.value))).sort((a, b) => a - b);
+  if (sortedValues.length < 2) {
+    return Infinity;
+  }
+  var diff = sortedValues[sortedValues.length - 1] - sortedValues[0];
+  if (diff === 0) {
+    return Infinity;
+  }
+  // Only do n - 1 distance calculations because there's only n - 1 distances between n values.
+  for (var i = 0; i < sortedValues.length - 1; i++) {
+    var distance = sortedValues[i + 1] - sortedValues[i];
+    smallestDistanceBetweenValues = Math.min(smallestDistanceBetweenValues, distance);
+  }
+  return smallestDistanceBetweenValues / diff;
+});
+var selectCalculatedPadding = (0, _reselect.createSelector)(selectSmallestDistanceBetweenValues, _chartLayoutContext.selectChartLayout, _rootPropsSelectors.selectBarCategoryGap, _selectChartOffsetInternal.selectChartOffsetInternal, (_1, _2, _3, padding) => padding, (smallestDistanceInPercent, layout, barCategoryGap, offset, padding) => {
+  if (!(0, _isWellBehavedNumber.isWellBehavedNumber)(smallestDistanceInPercent)) {
+    return 0;
+  }
+  var rangeWidth = layout === 'vertical' ? offset.height : offset.width;
+  if (padding === 'gap') {
+    return smallestDistanceInPercent * rangeWidth / 2;
+  }
+  if (padding === 'no-gap') {
+    var gap = (0, _DataUtils.getPercentValue)(barCategoryGap, smallestDistanceInPercent * rangeWidth);
+    var halfBand = smallestDistanceInPercent * rangeWidth / 2;
+    return halfBand - gap - (halfBand - gap) / rangeWidth * gap;
+  }
+  return 0;
+});
+var selectCalculatedXAxisPadding = (state, axisId) => {
+  var xAxisSettings = selectXAxisSettings(state, axisId);
+  if (xAxisSettings == null || typeof xAxisSettings.padding !== 'string') {
+    return 0;
+  }
+  return selectCalculatedPadding(state, 'xAxis', axisId, xAxisSettings.padding);
+};
+exports.selectCalculatedXAxisPadding = selectCalculatedXAxisPadding;
+var selectCalculatedYAxisPadding = (state, axisId) => {
+  var yAxisSettings = selectYAxisSettings(state, axisId);
+  if (yAxisSettings == null || typeof yAxisSettings.padding !== 'string') {
+    return 0;
+  }
+  return selectCalculatedPadding(state, 'yAxis', axisId, yAxisSettings.padding);
+};
+exports.selectCalculatedYAxisPadding = selectCalculatedYAxisPadding;
+var selectXAxisPadding = (0, _reselect.createSelector)(selectXAxisSettings, selectCalculatedXAxisPadding, (xAxisSettings, calculated) => {
+  var _padding$left, _padding$right;
+  if (xAxisSettings == null) {
+    return {
+      left: 0,
+      right: 0
+    };
+  }
+  var {
+    padding
+  } = xAxisSettings;
+  if (typeof padding === 'string') {
+    return {
+      left: calculated,
+      right: calculated
+    };
+  }
+  return {
+    left: ((_padding$left = padding.left) !== null && _padding$left !== void 0 ? _padding$left : 0) + calculated,
+    right: ((_padding$right = padding.right) !== null && _padding$right !== void 0 ? _padding$right : 0) + calculated
+  };
+});
+var selectYAxisPadding = (0, _reselect.createSelector)(selectYAxisSettings, selectCalculatedYAxisPadding, (yAxisSettings, calculated) => {
+  var _padding$top, _padding$bottom;
+  if (yAxisSettings == null) {
+    return {
+      top: 0,
+      bottom: 0
+    };
+  }
+  var {
+    padding
+  } = yAxisSettings;
+  if (typeof padding === 'string') {
+    return {
+      top: calculated,
+      bottom: calculated
+    };
+  }
+  return {
+    top: ((_padding$top = padding.top) !== null && _padding$top !== void 0 ? _padding$top : 0) + calculated,
+    bottom: ((_padding$bottom = padding.bottom) !== null && _padding$bottom !== void 0 ? _padding$bottom : 0) + calculated
+  };
+});
+var combineXAxisRange = exports.combineXAxisRange = (0, _reselect.createSelector)([_selectChartOffsetInternal.selectChartOffsetInternal, selectXAxisPadding, _brushSelectors.selectBrushDimensions, _brushSelectors.selectBrushSettings, (_state, _axisId, isPanorama) => isPanorama], (offset, padding, brushDimensions, _ref4, isPanorama) => {
+  var {
+    padding: brushPadding
+  } = _ref4;
+  if (isPanorama) {
+    return [brushPadding.left, brushDimensions.width - brushPadding.right];
+  }
+  return [offset.left + padding.left, offset.left + offset.width - padding.right];
+});
+var combineYAxisRange = exports.combineYAxisRange = (0, _reselect.createSelector)([_selectChartOffsetInternal.selectChartOffsetInternal, _chartLayoutContext.selectChartLayout, selectYAxisPadding, _brushSelectors.selectBrushDimensions, _brushSelectors.selectBrushSettings, (_state, _axisId, isPanorama) => isPanorama], (offset, layout, padding, brushDimensions, _ref5, isPanorama) => {
+  var {
+    padding: brushPadding
+  } = _ref5;
+  if (isPanorama) {
+    return [brushDimensions.height - brushPadding.bottom, brushPadding.top];
+  }
+  if (layout === 'horizontal') {
+    return [offset.top + offset.height - padding.bottom, offset.top + padding.top];
+  }
+  return [offset.top + padding.top, offset.top + offset.height - padding.bottom];
+});
+var selectAxisRange = (state, axisType, axisId, isPanorama) => {
+  var _selectZAxisSettings;
+  switch (axisType) {
+    case 'xAxis':
+      return combineXAxisRange(state, axisId, isPanorama);
+    case 'yAxis':
+      return combineYAxisRange(state, axisId, isPanorama);
+    case 'zAxis':
+      return (_selectZAxisSettings = selectZAxisSettings(state, axisId)) === null || _selectZAxisSettings === void 0 ? void 0 : _selectZAxisSettings.range;
+    case 'angleAxis':
+      return (0, _polarAxisSelectors.selectAngleAxisRange)(state);
+    case 'radiusAxis':
+      return (0, _polarAxisSelectors.selectRadiusAxisRange)(state, axisId);
+    default:
+      return undefined;
+  }
+};
+exports.selectAxisRange = selectAxisRange;
+var selectAxisRangeWithReverse = exports.selectAxisRangeWithReverse = (0, _reselect.createSelector)([selectBaseAxis, selectAxisRange], _combineAxisRangeWithReverse.combineAxisRangeWithReverse);
+var selectAxisScale = exports.selectAxisScale = (0, _reselect.createSelector)([selectBaseAxis, selectRealScaleType, selectAxisDomainIncludingNiceTicks, selectAxisRangeWithReverse], combineScaleFunction);
+var selectErrorBarsSettings = exports.selectErrorBarsSettings = (0, _reselect.createSelector)([selectCartesianItemsSettings, selectAllErrorBarSettings, _pickAxisType.pickAxisType], combineRelevantErrorBarSettings);
+function compareIds(a, b) {
+  if (a.id < b.id) {
+    return -1;
+  }
+  if (a.id > b.id) {
+    return 1;
+  }
+  return 0;
+}
+var pickAxisOrientation = (_state, orientation) => orientation;
+var pickMirror = (_state, _orientation, mirror) => mirror;
+var selectAllXAxesWithOffsetType = (0, _reselect.createSelector)(_selectAllAxes.selectAllXAxes, pickAxisOrientation, pickMirror, (allAxes, orientation, mirror) => allAxes.filter(axis => axis.orientation === orientation).filter(axis => axis.mirror === mirror).sort(compareIds));
+var selectAllYAxesWithOffsetType = (0, _reselect.createSelector)(_selectAllAxes.selectAllYAxes, pickAxisOrientation, pickMirror, (allAxes, orientation, mirror) => allAxes.filter(axis => axis.orientation === orientation).filter(axis => axis.mirror === mirror).sort(compareIds));
+var getXAxisSize = (offset, axisSettings) => {
+  return {
+    width: offset.width,
+    height: axisSettings.height
+  };
+};
+var getYAxisSize = (offset, axisSettings) => {
+  var width = typeof axisSettings.width === 'number' ? axisSettings.width : _Constants.DEFAULT_Y_AXIS_WIDTH;
+  return {
+    width,
+    height: offset.height
+  };
+};
+var selectXAxisSize = exports.selectXAxisSize = (0, _reselect.createSelector)(_selectChartOffsetInternal.selectChartOffsetInternal, selectXAxisSettings, getXAxisSize);
+var combineXAxisPositionStartingPoint = (offset, orientation, chartHeight) => {
+  switch (orientation) {
+    case 'top':
+      return offset.top;
+    case 'bottom':
+      return chartHeight - offset.bottom;
+    default:
+      return 0;
+  }
+};
+var combineYAxisPositionStartingPoint = (offset, orientation, chartWidth) => {
+  switch (orientation) {
+    case 'left':
+      return offset.left;
+    case 'right':
+      return chartWidth - offset.right;
+    default:
+      return 0;
+  }
+};
+var selectAllXAxesOffsetSteps = exports.selectAllXAxesOffsetSteps = (0, _reselect.createSelector)(_containerSelectors.selectChartHeight, _selectChartOffsetInternal.selectChartOffsetInternal, selectAllXAxesWithOffsetType, pickAxisOrientation, pickMirror, (chartHeight, offset, allAxesWithSameOffsetType, orientation, mirror) => {
+  var steps = {};
+  var position;
+  allAxesWithSameOffsetType.forEach(axis => {
+    var axisSize = getXAxisSize(offset, axis);
+    if (position == null) {
+      position = combineXAxisPositionStartingPoint(offset, orientation, chartHeight);
+    }
+    var needSpace = orientation === 'top' && !mirror || orientation === 'bottom' && mirror;
+    steps[axis.id] = position - Number(needSpace) * axisSize.height;
+    position += (needSpace ? -1 : 1) * axisSize.height;
+  });
+  return steps;
+});
+var selectAllYAxesOffsetSteps = exports.selectAllYAxesOffsetSteps = (0, _reselect.createSelector)(_containerSelectors.selectChartWidth, _selectChartOffsetInternal.selectChartOffsetInternal, selectAllYAxesWithOffsetType, pickAxisOrientation, pickMirror, (chartWidth, offset, allAxesWithSameOffsetType, orientation, mirror) => {
+  var steps = {};
+  var position;
+  allAxesWithSameOffsetType.forEach(axis => {
+    var axisSize = getYAxisSize(offset, axis);
+    if (position == null) {
+      position = combineYAxisPositionStartingPoint(offset, orientation, chartWidth);
+    }
+    var needSpace = orientation === 'left' && !mirror || orientation === 'right' && mirror;
+    steps[axis.id] = position - Number(needSpace) * axisSize.width;
+    position += (needSpace ? -1 : 1) * axisSize.width;
+  });
+  return steps;
+});
+var selectXAxisPosition = (state, axisId) => {
+  var offset = (0, _selectChartOffsetInternal.selectChartOffsetInternal)(state);
+  var axisSettings = selectXAxisSettings(state, axisId);
+  if (axisSettings == null) {
+    return undefined;
+  }
+  var allSteps = selectAllXAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);
+  var stepOfThisAxis = allSteps[axisId];
+  if (stepOfThisAxis == null) {
+    return {
+      x: offset.left,
+      y: 0
+    };
+  }
+  return {
+    x: offset.left,
+    y: stepOfThisAxis
+  };
+};
+exports.selectXAxisPosition = selectXAxisPosition;
+var selectYAxisPosition = (state, axisId) => {
+  var offset = (0, _selectChartOffsetInternal.selectChartOffsetInternal)(state);
+  var axisSettings = selectYAxisSettings(state, axisId);
+  if (axisSettings == null) {
+    return undefined;
+  }
+  var allSteps = selectAllYAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);
+  var stepOfThisAxis = allSteps[axisId];
+  if (stepOfThisAxis == null) {
+    return {
+      x: 0,
+      y: offset.top
+    };
+  }
+  return {
+    x: stepOfThisAxis,
+    y: offset.top
+  };
+};
+exports.selectYAxisPosition = selectYAxisPosition;
+var selectYAxisSize = exports.selectYAxisSize = (0, _reselect.createSelector)(_selectChartOffsetInternal.selectChartOffsetInternal, selectYAxisSettings, (offset, axisSettings) => {
+  var width = typeof axisSettings.width === 'number' ? axisSettings.width : _Constants.DEFAULT_Y_AXIS_WIDTH;
+  return {
+    width,
+    height: offset.height
+  };
+});
+var selectCartesianAxisSize = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'xAxis':
+      {
+        return selectXAxisSize(state, axisId).width;
+      }
+    case 'yAxis':
+      {
+        return selectYAxisSize(state, axisId).height;
+      }
+    default:
+      {
+        return undefined;
+      }
+  }
+};
+exports.selectCartesianAxisSize = selectCartesianAxisSize;
+var combineDuplicateDomain = (chartLayout, appliedValues, axis, axisType) => {
+  if (axis == null) {
+    return undefined;
+  }
+  var {
+    allowDuplicatedCategory,
+    type,
+    dataKey
+  } = axis;
+  var isCategorical = (0, _ChartUtils.isCategoricalAxis)(chartLayout, axisType);
+  var allData = appliedValues.map(av => av.value);
+  if (dataKey && isCategorical && type === 'category' && allowDuplicatedCategory && (0, _DataUtils.hasDuplicate)(allData)) {
+    return allData;
+  }
+  return undefined;
+};
+exports.combineDuplicateDomain = combineDuplicateDomain;
+var selectDuplicateDomain = exports.selectDuplicateDomain = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectAllAppliedValues, selectBaseAxis, _pickAxisType.pickAxisType], combineDuplicateDomain);
+var combineCategoricalDomain = (layout, appliedValues, axis, axisType) => {
+  if (axis == null || axis.dataKey == null) {
+    return undefined;
+  }
+  var {
+    type,
+    scale
+  } = axis;
+  var isCategorical = (0, _ChartUtils.isCategoricalAxis)(layout, axisType);
+  if (isCategorical && (type === 'number' || scale !== 'auto')) {
+    return appliedValues.map(d => d.value);
+  }
+  return undefined;
+};
+exports.combineCategoricalDomain = combineCategoricalDomain;
+var selectCategoricalDomain = exports.selectCategoricalDomain = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectAllAppliedValues, selectAxisSettings, _pickAxisType.pickAxisType], combineCategoricalDomain);
+var selectAxisPropsNeededForCartesianGridTicksGenerator = exports.selectAxisPropsNeededForCartesianGridTicksGenerator = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectCartesianAxisSettings, selectRealScaleType, selectAxisScale, selectDuplicateDomain, selectCategoricalDomain, selectAxisRange, selectNiceTicks, _pickAxisType.pickAxisType], (layout, axis, realScaleType, scale, duplicateDomain, categoricalDomain, axisRange, niceTicks, axisType) => {
+  if (axis == null) {
+    return null;
+  }
+  var isCategorical = (0, _ChartUtils.isCategoricalAxis)(layout, axisType);
+  return {
+    angle: axis.angle,
+    interval: axis.interval,
+    minTickGap: axis.minTickGap,
+    orientation: axis.orientation,
+    tick: axis.tick,
+    tickCount: axis.tickCount,
+    tickFormatter: axis.tickFormatter,
+    ticks: axis.ticks,
+    type: axis.type,
+    unit: axis.unit,
+    axisType,
+    categoricalDomain,
+    duplicateDomain,
+    isCategorical,
+    niceTicks,
+    range: axisRange,
+    realScaleType,
+    scale
+  };
+});
+var combineAxisTicks = (layout, axis, realScaleType, scale, niceTicks, axisRange, duplicateDomain, categoricalDomain, axisType) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  var isCategorical = (0, _ChartUtils.isCategoricalAxis)(layout, axisType);
+  var {
+    type,
+    ticks,
+    tickCount
+  } = axis;
+
+  // This is testing for `scaleBand` but for band axis the type is reported as `band` so this looks like a dead code with a workaround elsewhere?
+  var offsetForBand = realScaleType === 'scaleBand' && typeof scale.bandwidth === 'function' ? scale.bandwidth() / 2 : 2;
+  var offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
+  offset = axisType === 'angleAxis' && axisRange != null && axisRange.length >= 2 ? (0, _DataUtils.mathSign)(axisRange[0] - axisRange[1]) * 2 * offset : offset;
+
+  // The ticks set by user should only affect the ticks adjacent to axis line
+  var ticksOrNiceTicks = ticks || niceTicks;
+  if (ticksOrNiceTicks) {
+    var result = ticksOrNiceTicks.map((entry, index) => {
+      var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;
+      return {
+        index,
+        // If the scaleContent is not a number, the coordinate will be NaN.
+        // That could be the case for example with a PointScale and a string as domain.
+        coordinate: scale(scaleContent) + offset,
+        value: entry,
+        offset
+      };
+    });
+    return result.filter(row => !(0, _DataUtils.isNan)(row.coordinate));
+  }
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      index,
+      offset
+    }));
+  }
+  if (scale.ticks) {
+    return scale.ticks(tickCount)
+    // @ts-expect-error why does the offset go here? The type does not require it
+    .map(entry => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      offset
+    }));
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => ({
+    coordinate: scale(entry) + offset,
+    value: duplicateDomain ? duplicateDomain[entry] : entry,
+    index,
+    offset
+  }));
+};
+exports.combineAxisTicks = combineAxisTicks;
+var selectTicksOfAxis = exports.selectTicksOfAxis = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectAxisSettings, selectRealScaleType, selectAxisScale, selectNiceTicks, selectAxisRange, selectDuplicateDomain, selectCategoricalDomain, _pickAxisType.pickAxisType], combineAxisTicks);
+var combineGraphicalItemTicks = (layout, axis, scale, axisRange, duplicateDomain, categoricalDomain, axisType) => {
+  if (axis == null || scale == null || axisRange == null || axisRange[0] === axisRange[1]) {
+    return undefined;
+  }
+  var isCategorical = (0, _ChartUtils.isCategoricalAxis)(layout, axisType);
+  var {
+    tickCount
+  } = axis;
+  var offset = 0;
+  offset = axisType === 'angleAxis' && (axisRange === null || axisRange === void 0 ? void 0 : axisRange.length) >= 2 ? (0, _DataUtils.mathSign)(axisRange[0] - axisRange[1]) * 2 * offset : offset;
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      index,
+      offset
+    }));
+  }
+  if (scale.ticks) {
+    return scale.ticks(tickCount)
+    // @ts-expect-error why does the offset go here? The type does not require it
+    .map(entry => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      offset
+    }));
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => ({
+    coordinate: scale(entry) + offset,
+    value: duplicateDomain ? duplicateDomain[entry] : entry,
+    index,
+    offset
+  }));
+};
+exports.combineGraphicalItemTicks = combineGraphicalItemTicks;
+var selectTicksOfGraphicalItem = exports.selectTicksOfGraphicalItem = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectAxisSettings, selectAxisScale, selectAxisRange, selectDuplicateDomain, selectCategoricalDomain, _pickAxisType.pickAxisType], combineGraphicalItemTicks);
+var selectAxisWithScale = exports.selectAxisWithScale = (0, _reselect.createSelector)(selectBaseAxis, selectAxisScale, (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+var selectZAxisScale = (0, _reselect.createSelector)([selectBaseAxis, selectRealScaleType, selectAxisDomain, selectAxisRangeWithReverse], combineScaleFunction);
+var selectZAxisWithScale = exports.selectZAxisWithScale = (0, _reselect.createSelector)((state, _axisType, axisId) => selectZAxisSettings(state, axisId), selectZAxisScale, (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+
+/**
+ * We are also going to need to implement polar chart directions if we want to support keyboard controls for those.
+ */
+
+var selectChartDirection = exports.selectChartDirection = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, _selectAllAxes.selectAllXAxes, _selectAllAxes.selectAllYAxes], (layout, allXAxes, allYAxes) => {
+  switch (layout) {
+    case 'horizontal':
+      {
+        return allXAxes.some(axis => axis.reversed) ? 'right-to-left' : 'left-to-right';
+      }
+    case 'vertical':
+      {
+        return allYAxes.some(axis => axis.reversed) ? 'bottom-to-top' : 'top-to-bottom';
+      }
+    // TODO: make this better. For now, right arrow triggers "forward", left arrow "back"
+    // however, the tooltip moves an unintuitive direction because of how the indices are rendered
+    case 'centric':
+    case 'radial':
+      {
+        return 'left-to-right';
+      }
+    default:
+      {
+        return undefined;
+      }
+  }
+});
Index: node_modules/recharts/lib/state/selectors/barSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/barSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/barSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,282 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectMaxBarSize = exports.selectBarSizeList = exports.selectBarRectangles = exports.selectBarPosition = exports.selectBarCartesianAxisSize = exports.selectBarBandSize = exports.selectAxisBandSize = exports.selectAllVisibleBars = exports.selectAllBarPositions = exports.combineStackedData = exports.combineBarSizeList = exports.combineAllBarPositions = void 0;
+var _reselect = require("reselect");
+var _axisSelectors = require("./axisSelectors");
+var _DataUtils = require("../../util/DataUtils");
+var _ChartUtils = require("../../util/ChartUtils");
+var _Bar = require("../../cartesian/Bar");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _dataSelectors = require("./dataSelectors");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var _rootPropsSelectors = require("./rootPropsSelectors");
+var _isWellBehavedNumber = require("../../util/isWellBehavedNumber");
+var _getStackSeriesIdentifier = require("../../util/stacks/getStackSeriesIdentifier");
+var _StackedGraphicalItem = require("../types/StackedGraphicalItem");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var pickXAxisId = (_state, xAxisId) => xAxisId;
+var pickYAxisId = (_state, _xAxisId, yAxisId) => yAxisId;
+var pickIsPanorama = (_state, _xAxisId, _yAxisId, isPanorama) => isPanorama;
+var pickBarId = (_state, _xAxisId, _yAxisId, _isPanorama, id) => id;
+var selectSynchronisedBarSettings = (0, _reselect.createSelector)([_axisSelectors.selectUnfilteredCartesianItems, pickBarId], (graphicalItems, id) => graphicalItems.filter(item => item.type === 'bar').find(item => item.id === id));
+var selectMaxBarSize = exports.selectMaxBarSize = (0, _reselect.createSelector)([selectSynchronisedBarSettings], barSettings => barSettings === null || barSettings === void 0 ? void 0 : barSettings.maxBarSize);
+var pickCells = (_state, _xAxisId, _yAxisId, _isPanorama, _id, cells) => cells;
+var getBarSize = (globalSize, totalSize, selfSize) => {
+  var barSize = selfSize !== null && selfSize !== void 0 ? selfSize : globalSize;
+  if ((0, _DataUtils.isNullish)(barSize)) {
+    return undefined;
+  }
+  return (0, _DataUtils.getPercentValue)(barSize, totalSize, 0);
+};
+var selectAllVisibleBars = exports.selectAllVisibleBars = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, _axisSelectors.selectUnfilteredCartesianItems, pickXAxisId, pickYAxisId, pickIsPanorama], (layout, allItems, xAxisId, yAxisId, isPanorama) => allItems.filter(i => {
+  if (layout === 'horizontal') {
+    return i.xAxisId === xAxisId;
+  }
+  return i.yAxisId === yAxisId;
+}).filter(i => i.isPanorama === isPanorama).filter(i => i.hide === false).filter(i => i.type === 'bar'));
+var selectBarStackGroups = (state, xAxisId, yAxisId, isPanorama) => {
+  var layout = (0, _chartLayoutContext.selectChartLayout)(state);
+  if (layout === 'horizontal') {
+    return (0, _axisSelectors.selectStackGroups)(state, 'yAxis', yAxisId, isPanorama);
+  }
+  return (0, _axisSelectors.selectStackGroups)(state, 'xAxis', xAxisId, isPanorama);
+};
+var selectBarCartesianAxisSize = (state, xAxisId, yAxisId) => {
+  var layout = (0, _chartLayoutContext.selectChartLayout)(state);
+  if (layout === 'horizontal') {
+    return (0, _axisSelectors.selectCartesianAxisSize)(state, 'xAxis', xAxisId);
+  }
+  return (0, _axisSelectors.selectCartesianAxisSize)(state, 'yAxis', yAxisId);
+};
+exports.selectBarCartesianAxisSize = selectBarCartesianAxisSize;
+var combineBarSizeList = (allBars, globalSize, totalSize) => {
+  var initialValue = {};
+  var stackedBars = allBars.filter(_StackedGraphicalItem.isStacked);
+  var unstackedBars = allBars.filter(b => b.stackId == null);
+  var groupByStack = stackedBars.reduce((acc, bar) => {
+    if (!acc[bar.stackId]) {
+      acc[bar.stackId] = [];
+    }
+    acc[bar.stackId].push(bar);
+    return acc;
+  }, initialValue);
+  var stackedSizeList = Object.entries(groupByStack).map(_ref => {
+    var [stackId, bars] = _ref;
+    var dataKeys = bars.map(b => b.dataKey);
+    var barSize = getBarSize(globalSize, totalSize, bars[0].barSize);
+    return {
+      stackId,
+      dataKeys,
+      barSize
+    };
+  });
+  var unstackedSizeList = unstackedBars.map(b => {
+    var dataKeys = [b.dataKey].filter(dk => dk != null);
+    var barSize = getBarSize(globalSize, totalSize, b.barSize);
+    return {
+      stackId: undefined,
+      dataKeys,
+      barSize
+    };
+  });
+  return [...stackedSizeList, ...unstackedSizeList];
+};
+exports.combineBarSizeList = combineBarSizeList;
+var selectBarSizeList = exports.selectBarSizeList = (0, _reselect.createSelector)([selectAllVisibleBars, _rootPropsSelectors.selectRootBarSize, selectBarCartesianAxisSize], combineBarSizeList);
+var selectBarBandSize = (state, xAxisId, yAxisId, isPanorama, id) => {
+  var _ref2, _getBandSizeOfAxis;
+  var barSettings = selectSynchronisedBarSettings(state, xAxisId, yAxisId, isPanorama, id);
+  if (barSettings == null) {
+    return undefined;
+  }
+  var layout = (0, _chartLayoutContext.selectChartLayout)(state);
+  var globalMaxBarSize = (0, _rootPropsSelectors.selectRootMaxBarSize)(state);
+  var {
+    maxBarSize: childMaxBarSize
+  } = barSettings;
+  var maxBarSize = (0, _DataUtils.isNullish)(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;
+  var axis, ticks;
+  if (layout === 'horizontal') {
+    axis = (0, _axisSelectors.selectAxisWithScale)(state, 'xAxis', xAxisId, isPanorama);
+    ticks = (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'xAxis', xAxisId, isPanorama);
+  } else {
+    axis = (0, _axisSelectors.selectAxisWithScale)(state, 'yAxis', yAxisId, isPanorama);
+    ticks = (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'yAxis', yAxisId, isPanorama);
+  }
+  return (_ref2 = (_getBandSizeOfAxis = (0, _ChartUtils.getBandSizeOfAxis)(axis, ticks, true)) !== null && _getBandSizeOfAxis !== void 0 ? _getBandSizeOfAxis : maxBarSize) !== null && _ref2 !== void 0 ? _ref2 : 0;
+};
+exports.selectBarBandSize = selectBarBandSize;
+var selectAxisBandSize = (state, xAxisId, yAxisId, isPanorama) => {
+  var layout = (0, _chartLayoutContext.selectChartLayout)(state);
+  var axis, ticks;
+  if (layout === 'horizontal') {
+    axis = (0, _axisSelectors.selectAxisWithScale)(state, 'xAxis', xAxisId, isPanorama);
+    ticks = (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'xAxis', xAxisId, isPanorama);
+  } else {
+    axis = (0, _axisSelectors.selectAxisWithScale)(state, 'yAxis', yAxisId, isPanorama);
+    ticks = (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'yAxis', yAxisId, isPanorama);
+  }
+  return (0, _ChartUtils.getBandSizeOfAxis)(axis, ticks);
+};
+exports.selectAxisBandSize = selectAxisBandSize;
+function getBarPositions(barGap, barCategoryGap, bandSize, sizeList, maxBarSize) {
+  var len = sizeList.length;
+  if (len < 1) {
+    return undefined;
+  }
+  var realBarGap = (0, _DataUtils.getPercentValue)(barGap, bandSize, 0, true);
+  var result;
+  var initialValue = [];
+
+  // whether is barSize set by user
+  // Okay but why does it check only for the first element? What if the first element is set but others are not?
+  if ((0, _isWellBehavedNumber.isWellBehavedNumber)(sizeList[0].barSize)) {
+    var useFull = false;
+    var fullBarSize = bandSize / len;
+    var sum = sizeList.reduce((res, entry) => res + (entry.barSize || 0), 0);
+    sum += (len - 1) * realBarGap;
+    if (sum >= bandSize) {
+      sum -= (len - 1) * realBarGap;
+      realBarGap = 0;
+    }
+    if (sum >= bandSize && fullBarSize > 0) {
+      useFull = true;
+      fullBarSize *= 0.9;
+      sum = len * fullBarSize;
+    }
+    var offset = (bandSize - sum) / 2 >> 0;
+    var prev = {
+      offset: offset - realBarGap,
+      size: 0
+    };
+    result = sizeList.reduce((res, entry) => {
+      var _entry$barSize;
+      var newPosition = {
+        stackId: entry.stackId,
+        dataKeys: entry.dataKeys,
+        position: {
+          offset: prev.offset + prev.size + realBarGap,
+          size: useFull ? fullBarSize : (_entry$barSize = entry.barSize) !== null && _entry$barSize !== void 0 ? _entry$barSize : 0
+        }
+      };
+      var newRes = [...res, newPosition];
+      prev = newRes[newRes.length - 1].position;
+      return newRes;
+    }, initialValue);
+  } else {
+    var _offset = (0, _DataUtils.getPercentValue)(barCategoryGap, bandSize, 0, true);
+    if (bandSize - 2 * _offset - (len - 1) * realBarGap <= 0) {
+      realBarGap = 0;
+    }
+    var originalSize = (bandSize - 2 * _offset - (len - 1) * realBarGap) / len;
+    if (originalSize > 1) {
+      originalSize >>= 0;
+    }
+    var size = (0, _isWellBehavedNumber.isWellBehavedNumber)(maxBarSize) ? Math.min(originalSize, maxBarSize) : originalSize;
+    result = sizeList.reduce((res, entry, i) => [...res, {
+      stackId: entry.stackId,
+      dataKeys: entry.dataKeys,
+      position: {
+        offset: _offset + (originalSize + realBarGap) * i + (originalSize - size) / 2,
+        size
+      }
+    }], initialValue);
+  }
+  return result;
+}
+var combineAllBarPositions = (sizeList, globalMaxBarSize, barGap, barCategoryGap, barBandSize, bandSize, childMaxBarSize) => {
+  var maxBarSize = (0, _DataUtils.isNullish)(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;
+  var allBarPositions = getBarPositions(barGap, barCategoryGap, barBandSize !== bandSize ? barBandSize : bandSize, sizeList, maxBarSize);
+  if (barBandSize !== bandSize && allBarPositions != null) {
+    allBarPositions = allBarPositions.map(pos => _objectSpread(_objectSpread({}, pos), {}, {
+      position: _objectSpread(_objectSpread({}, pos.position), {}, {
+        offset: pos.position.offset - barBandSize / 2
+      })
+    }));
+  }
+  return allBarPositions;
+};
+exports.combineAllBarPositions = combineAllBarPositions;
+var selectAllBarPositions = exports.selectAllBarPositions = (0, _reselect.createSelector)([selectBarSizeList, _rootPropsSelectors.selectRootMaxBarSize, _rootPropsSelectors.selectBarGap, _rootPropsSelectors.selectBarCategoryGap, selectBarBandSize, selectAxisBandSize, selectMaxBarSize], combineAllBarPositions);
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, isPanorama) => (0, _axisSelectors.selectAxisWithScale)(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, isPanorama) => (0, _axisSelectors.selectAxisWithScale)(state, 'yAxis', yAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, isPanorama) => (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, isPanorama) => (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'yAxis', yAxisId, isPanorama);
+var selectBarPosition = exports.selectBarPosition = (0, _reselect.createSelector)([selectAllBarPositions, selectSynchronisedBarSettings], (allBarPositions, barSettings) => {
+  if (allBarPositions == null || barSettings == null) {
+    return undefined;
+  }
+  var position = allBarPositions.find(p => p.stackId === barSettings.stackId && barSettings.dataKey != null && p.dataKeys.includes(barSettings.dataKey));
+  if (position == null) {
+    return undefined;
+  }
+  return position.position;
+});
+var combineStackedData = (stackGroups, barSettings) => {
+  var stackSeriesIdentifier = (0, _getStackSeriesIdentifier.getStackSeriesIdentifier)(barSettings);
+  if (!stackGroups || stackSeriesIdentifier == null || barSettings == null) {
+    return undefined;
+  }
+  var {
+    stackId
+  } = barSettings;
+  if (stackId == null) {
+    return undefined;
+  }
+  var stackGroup = stackGroups[stackId];
+  if (!stackGroup) {
+    return undefined;
+  }
+  var {
+    stackedData
+  } = stackGroup;
+  if (!stackedData) {
+    return undefined;
+  }
+  return stackedData.find(sd => sd.key === stackSeriesIdentifier);
+};
+exports.combineStackedData = combineStackedData;
+var selectStackedDataOfItem = (0, _reselect.createSelector)([selectBarStackGroups, selectSynchronisedBarSettings], combineStackedData);
+var selectBarRectangles = exports.selectBarRectangles = (0, _reselect.createSelector)([_selectChartOffsetInternal.selectChartOffsetInternal, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectBarPosition, _chartLayoutContext.selectChartLayout, _dataSelectors.selectChartDataWithIndexesIfNotInPanorama, selectAxisBandSize, selectStackedDataOfItem, selectSynchronisedBarSettings, pickCells], (offset, xAxis, yAxis, xAxisTicks, yAxisTicks, pos, layout, _ref3, bandSize, stackedData, barSettings, cells) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref3;
+  if (barSettings == null || pos == null || layout !== 'horizontal' && layout !== 'vertical' || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || bandSize == null) {
+    return undefined;
+  }
+  var {
+    data
+  } = barSettings;
+  var displayedData;
+  if (data != null && data.length > 0) {
+    displayedData = data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return (0, _Bar.computeBarRectangles)({
+    layout,
+    barSettings,
+    pos,
+    bandSize,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    stackedData,
+    displayedData,
+    offset,
+    cells
+  });
+});
Index: node_modules/recharts/lib/state/selectors/brushSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/brushSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/brushSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectBrushSettings = exports.selectBrushDimensions = void 0;
+var _reselect = require("reselect");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var _containerSelectors = require("./containerSelectors");
+var _DataUtils = require("../../util/DataUtils");
+var selectBrushSettings = state => state.brush;
+exports.selectBrushSettings = selectBrushSettings;
+var selectBrushDimensions = exports.selectBrushDimensions = (0, _reselect.createSelector)([selectBrushSettings, _selectChartOffsetInternal.selectChartOffsetInternal, _containerSelectors.selectMargin], (brushSettings, offset, margin) => ({
+  height: brushSettings.height,
+  x: (0, _DataUtils.isNumber)(brushSettings.x) ? brushSettings.x : offset.left,
+  y: (0, _DataUtils.isNumber)(brushSettings.y) ? brushSettings.y : offset.top + offset.height + offset.brushBottom - ((margin === null || margin === void 0 ? void 0 : margin.bottom) || 0),
+  width: (0, _DataUtils.isNumber)(brushSettings.width) ? brushSettings.width : offset.width
+}));
Index: node_modules/recharts/lib/state/selectors/combiners/combineActiveLabel.js
===================================================================
--- node_modules/recharts/lib/state/selectors/combiners/combineActiveLabel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/combiners/combineActiveLabel.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineActiveLabel = void 0;
+var _DataUtils = require("../../../util/DataUtils");
+var combineActiveLabel = (tooltipTicks, activeIndex) => {
+  var _tooltipTicks$n;
+  var n = Number(activeIndex);
+  if ((0, _DataUtils.isNan)(n) || activeIndex == null) {
+    return undefined;
+  }
+  return n >= 0 ? tooltipTicks === null || tooltipTicks === void 0 || (_tooltipTicks$n = tooltipTicks[n]) === null || _tooltipTicks$n === void 0 ? void 0 : _tooltipTicks$n.value : undefined;
+};
+exports.combineActiveLabel = combineActiveLabel;
Index: node_modules/recharts/lib/state/selectors/combiners/combineActiveTooltipIndex.js
===================================================================
--- node_modules/recharts/lib/state/selectors/combiners/combineActiveTooltipIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/combiners/combineActiveTooltipIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineActiveTooltipIndex = void 0;
+var _isWellBehavedNumber = require("../../../util/isWellBehavedNumber");
+var combineActiveTooltipIndex = (tooltipInteraction, chartData) => {
+  var desiredIndex = tooltipInteraction === null || tooltipInteraction === void 0 ? void 0 : tooltipInteraction.index;
+  if (desiredIndex == null) {
+    return null;
+  }
+  var indexAsNumber = Number(desiredIndex);
+  if (!(0, _isWellBehavedNumber.isWellBehavedNumber)(indexAsNumber)) {
+    // this is for charts like Sankey and Treemap that do not support numerical indexes. We need a proper solution for this before we can start supporting keyboard events on these charts.
+    return desiredIndex;
+  }
+
+  /*
+   * Zero is a trivial limit for single-dimensional charts like Line and Area,
+   * but this also needs a support for multidimensional charts like Sankey and Treemap! TODO
+   */
+  var lowerLimit = 0;
+  var upperLimit = +Infinity;
+  if (chartData.length > 0) {
+    upperLimit = chartData.length - 1;
+  }
+
+  // now let's clamp the desiredIndex between the limits
+  return String(Math.max(lowerLimit, Math.min(indexAsNumber, upperLimit)));
+};
+exports.combineActiveTooltipIndex = combineActiveTooltipIndex;
Index: node_modules/recharts/lib/state/selectors/combiners/combineAxisRangeWithReverse.js
===================================================================
--- node_modules/recharts/lib/state/selectors/combiners/combineAxisRangeWithReverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/combiners/combineAxisRangeWithReverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineAxisRangeWithReverse = void 0;
+var combineAxisRangeWithReverse = (axisSettings, axisRange) => {
+  if (!axisSettings || !axisRange) {
+    return undefined;
+  }
+  if (axisSettings !== null && axisSettings !== void 0 && axisSettings.reversed) {
+    return [axisRange[1], axisRange[0]];
+  }
+  return axisRange;
+};
+exports.combineAxisRangeWithReverse = combineAxisRangeWithReverse;
Index: node_modules/recharts/lib/state/selectors/combiners/combineCoordinateForDefaultIndex.js
===================================================================
--- node_modules/recharts/lib/state/selectors/combiners/combineCoordinateForDefaultIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/combiners/combineCoordinateForDefaultIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineCoordinateForDefaultIndex = void 0;
+var combineCoordinateForDefaultIndex = (width, height, layout, offset, tooltipTicks, defaultIndex, tooltipConfigurations, tooltipPayloadSearcher) => {
+  if (defaultIndex == null || tooltipPayloadSearcher == null) {
+    return undefined;
+  }
+  // With defaultIndex alone, we don't have enough information to decide _which_ of the multiple tooltips to display. So we choose the first one.
+  var firstConfiguration = tooltipConfigurations[0];
+  // @ts-expect-error we need to rethink the tooltipPayloadSearcher type
+  var maybePosition = firstConfiguration == null ? undefined : tooltipPayloadSearcher(firstConfiguration.positions, defaultIndex);
+  if (maybePosition != null) {
+    return maybePosition;
+  }
+  var tick = tooltipTicks === null || tooltipTicks === void 0 ? void 0 : tooltipTicks[Number(defaultIndex)];
+  if (!tick) {
+    return undefined;
+  }
+  switch (layout) {
+    case 'horizontal':
+      {
+        return {
+          x: tick.coordinate,
+          y: (offset.top + height) / 2
+        };
+      }
+    default:
+      {
+        // This logic is not super sound - it conflates vertical, radial, centric layouts into just one. TODO improve!
+        return {
+          x: (offset.left + width) / 2,
+          y: tick.coordinate
+        };
+      }
+  }
+};
+exports.combineCoordinateForDefaultIndex = combineCoordinateForDefaultIndex;
Index: node_modules/recharts/lib/state/selectors/combiners/combineDisplayedStackedData.js
===================================================================
--- node_modules/recharts/lib/state/selectors/combiners/combineDisplayedStackedData.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/combiners/combineDisplayedStackedData.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineDisplayedStackedData = combineDisplayedStackedData;
+var _getStackSeriesIdentifier = require("../../../util/stacks/getStackSeriesIdentifier");
+var _ChartUtils = require("../../../util/ChartUtils");
+/**
+ * In a stacked chart, each graphical item has its own data. That data could be either:
+ * - defined on the chart root, in which case the item gets a unique dataKey
+ * - or defined on the item itself, in which case multiple items can share the same dataKey
+ *
+ * That means we cannot use the dataKey as a unique identifier for the item.
+ *
+ * This type represents a single data point in a stacked chart, where each key is a series identifier
+ * and the value is the numeric value for that series using the numerical axis dataKey.
+ */
+
+function combineDisplayedStackedData(stackedGraphicalItems, _ref, tooltipAxisSettings) {
+  var {
+    chartData = []
+  } = _ref;
+  var tooltipDataKey = tooltipAxisSettings === null || tooltipAxisSettings === void 0 ? void 0 : tooltipAxisSettings.dataKey;
+
+  // A map of tooltip data keys to the stacked data points
+  var knownItemsByDataKey = new Map();
+  stackedGraphicalItems.forEach(item => {
+    var _item$data;
+    // If there is no data on the individual item then we use the root chart data
+    var resolvedData = (_item$data = item.data) !== null && _item$data !== void 0 ? _item$data : chartData;
+    if (resolvedData == null || resolvedData.length === 0) {
+      // if that didn't work then we skip this item
+      return;
+    }
+    var stackIdentifier = (0, _getStackSeriesIdentifier.getStackSeriesIdentifier)(item);
+    resolvedData.forEach((entry, index) => {
+      var tooltipValue = tooltipDataKey == null ? index : String((0, _ChartUtils.getValueByDataKey)(entry, tooltipDataKey, null));
+      var numericValue = (0, _ChartUtils.getValueByDataKey)(entry, item.dataKey, 0);
+      var curr;
+      if (knownItemsByDataKey.has(tooltipValue)) {
+        curr = knownItemsByDataKey.get(tooltipValue);
+      } else {
+        curr = {};
+      }
+      Object.assign(curr, {
+        [stackIdentifier]: numericValue
+      });
+      knownItemsByDataKey.set(tooltipValue, curr);
+    });
+  });
+  return Array.from(knownItemsByDataKey.values());
+}
Index: node_modules/recharts/lib/state/selectors/combiners/combineTooltipInteractionState.js
===================================================================
--- node_modules/recharts/lib/state/selectors/combiners/combineTooltipInteractionState.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/combiners/combineTooltipInteractionState.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineTooltipInteractionState = void 0;
+var _tooltipSlice = require("../../tooltipSlice");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function chooseAppropriateMouseInteraction(tooltipState, tooltipEventType, trigger) {
+  if (tooltipEventType === 'axis') {
+    if (trigger === 'click') {
+      return tooltipState.axisInteraction.click;
+    }
+    return tooltipState.axisInteraction.hover;
+  }
+  if (trigger === 'click') {
+    return tooltipState.itemInteraction.click;
+  }
+  return tooltipState.itemInteraction.hover;
+}
+function hasBeenActivePreviously(tooltipInteractionState) {
+  return tooltipInteractionState.index != null;
+}
+var combineTooltipInteractionState = (tooltipState, tooltipEventType, trigger, defaultIndex) => {
+  if (tooltipEventType == null) {
+    return _tooltipSlice.noInteraction;
+  }
+  var appropriateMouseInteraction = chooseAppropriateMouseInteraction(tooltipState, tooltipEventType, trigger);
+  if (appropriateMouseInteraction == null) {
+    return _tooltipSlice.noInteraction;
+  }
+  if (appropriateMouseInteraction.active) {
+    return appropriateMouseInteraction;
+  }
+  if (tooltipState.keyboardInteraction.active) {
+    return tooltipState.keyboardInteraction;
+  }
+  if (tooltipState.syncInteraction.active && tooltipState.syncInteraction.index != null) {
+    return tooltipState.syncInteraction;
+  }
+  var activeFromProps = tooltipState.settings.active === true;
+  if (hasBeenActivePreviously(appropriateMouseInteraction)) {
+    if (activeFromProps) {
+      return _objectSpread(_objectSpread({}, appropriateMouseInteraction), {}, {
+        active: true
+      });
+    }
+  } else if (defaultIndex != null) {
+    return {
+      active: true,
+      coordinate: undefined,
+      dataKey: undefined,
+      index: defaultIndex
+    };
+  }
+  return _objectSpread(_objectSpread({}, _tooltipSlice.noInteraction), {}, {
+    coordinate: appropriateMouseInteraction.coordinate
+  });
+};
+exports.combineTooltipInteractionState = combineTooltipInteractionState;
Index: node_modules/recharts/lib/state/selectors/combiners/combineTooltipPayload.js
===================================================================
--- node_modules/recharts/lib/state/selectors/combiners/combineTooltipPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/combiners/combineTooltipPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineTooltipPayload = void 0;
+var _DataUtils = require("../../../util/DataUtils");
+var _ChartUtils = require("../../../util/ChartUtils");
+var _getSliced = require("../../../util/getSliced");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function selectFinalData(dataDefinedOnItem, dataDefinedOnChart) {
+  /*
+   * If a payload has data specified directly from the graphical item, prefer that.
+   * Otherwise, fill in data from the chart level, using the same index.
+   */
+  if (dataDefinedOnItem != null) {
+    return dataDefinedOnItem;
+  }
+  return dataDefinedOnChart;
+}
+var combineTooltipPayload = (tooltipPayloadConfigurations, activeIndex, chartDataState, tooltipAxis, activeLabel, tooltipPayloadSearcher, tooltipEventType) => {
+  if (activeIndex == null || tooltipPayloadSearcher == null) {
+    return undefined;
+  }
+  var {
+    chartData,
+    computedData,
+    dataStartIndex,
+    dataEndIndex
+  } = chartDataState;
+  var init = [];
+  return tooltipPayloadConfigurations.reduce((agg, _ref) => {
+    var _settings$dataKey;
+    var {
+      dataDefinedOnItem,
+      settings
+    } = _ref;
+    var finalData = selectFinalData(dataDefinedOnItem, chartData);
+    var sliced = Array.isArray(finalData) ? (0, _getSliced.getSliced)(finalData, dataStartIndex, dataEndIndex) : finalData;
+    var finalDataKey = (_settings$dataKey = settings === null || settings === void 0 ? void 0 : settings.dataKey) !== null && _settings$dataKey !== void 0 ? _settings$dataKey : tooltipAxis === null || tooltipAxis === void 0 ? void 0 : tooltipAxis.dataKey;
+    // BaseAxisProps does not support nameKey but it could!
+    var finalNameKey = settings === null || settings === void 0 ? void 0 : settings.nameKey; // ?? tooltipAxis?.nameKey;
+    var tooltipPayload;
+    if (tooltipAxis !== null && tooltipAxis !== void 0 && tooltipAxis.dataKey && Array.isArray(sliced) &&
+    /*
+     * findEntryInArray won't work for Scatter because Scatter provides an array of arrays
+     * as tooltip payloads and findEntryInArray is not prepared to handle that.
+     * Sad but also ScatterChart only allows 'item' tooltipEventType
+     * and also this is only a problem if there are multiple Scatters and each has its own data array
+     * so let's fix that some other time.
+     */
+    !Array.isArray(sliced[0]) &&
+    /*
+     * If the tooltipEventType is 'axis', we should search for the dataKey in the sliced data
+     * because thanks to allowDuplicatedCategory=false, the order of elements in the array
+     * no longer matches the order of elements in the original data
+     * and so we need to search by the active dataKey + label rather than by index.
+     *
+     * The same happens if multiple graphical items are present in the chart
+     * and each of them has its own data array. Those arrays get concatenated
+     * and again the tooltip index no longer matches the original data.
+     *
+     * On the other hand the tooltipEventType 'item' should always search by index
+     * because we get the index from interacting over the individual elements
+     * which is always accurate, irrespective of the allowDuplicatedCategory setting.
+     */
+    tooltipEventType === 'axis') {
+      tooltipPayload = (0, _DataUtils.findEntryInArray)(sliced, tooltipAxis.dataKey, activeLabel);
+    } else {
+      /*
+       * This is a problem because it assumes that the index is pointing to the displayed data
+       * which it isn't because the index is pointing to the tooltip ticks array.
+       * The above approach (with findEntryInArray) is the correct one, but it only works
+       * if the axis dataKey is defined explicitly, and if the data is an array of objects.
+       */
+      tooltipPayload = tooltipPayloadSearcher(sliced, activeIndex, computedData, finalNameKey);
+    }
+    if (Array.isArray(tooltipPayload)) {
+      tooltipPayload.forEach(item => {
+        var newSettings = _objectSpread(_objectSpread({}, settings), {}, {
+          name: item.name,
+          unit: item.unit,
+          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.
+          color: undefined,
+          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.
+          fill: undefined
+        });
+        agg.push((0, _ChartUtils.getTooltipEntry)({
+          tooltipEntrySettings: newSettings,
+          dataKey: item.dataKey,
+          payload: item.payload,
+          // @ts-expect-error getValueByDataKey does not validate the output type
+          value: (0, _ChartUtils.getValueByDataKey)(item.payload, item.dataKey),
+          name: item.name
+        }));
+      });
+    } else {
+      var _getValueByDataKey;
+      // I am not quite sure why these two branches (Array vs Array of Arrays) have to behave differently - I imagine we should unify these. 3.x breaking change?
+      agg.push((0, _ChartUtils.getTooltipEntry)({
+        tooltipEntrySettings: settings,
+        dataKey: finalDataKey,
+        payload: tooltipPayload,
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        value: (0, _ChartUtils.getValueByDataKey)(tooltipPayload, finalDataKey),
+        // @ts-expect-error getValueByDataKey does not validate the output type
+        name: (_getValueByDataKey = (0, _ChartUtils.getValueByDataKey)(tooltipPayload, finalNameKey)) !== null && _getValueByDataKey !== void 0 ? _getValueByDataKey : settings === null || settings === void 0 ? void 0 : settings.name
+      }));
+    }
+    return agg;
+  }, init);
+};
+exports.combineTooltipPayload = combineTooltipPayload;
Index: node_modules/recharts/lib/state/selectors/combiners/combineTooltipPayloadConfigurations.js
===================================================================
--- node_modules/recharts/lib/state/selectors/combiners/combineTooltipPayloadConfigurations.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/combiners/combineTooltipPayloadConfigurations.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineTooltipPayloadConfigurations = void 0;
+var combineTooltipPayloadConfigurations = (tooltipState, tooltipEventType, trigger, defaultIndex) => {
+  // if tooltip reacts to axis interaction, then we display all items at the same time.
+  if (tooltipEventType === 'axis') {
+    return tooltipState.tooltipItemPayloads;
+  }
+  /*
+   * By now we already know that tooltipEventType is 'item', so we can only search in itemInteractions.
+   * item means that only the hovered or clicked item will be present in the tooltip.
+   */
+  if (tooltipState.tooltipItemPayloads.length === 0) {
+    // No point filtering if the payload is empty
+    return [];
+  }
+  var filterByDataKey;
+  if (trigger === 'hover') {
+    filterByDataKey = tooltipState.itemInteraction.hover.dataKey;
+  } else {
+    filterByDataKey = tooltipState.itemInteraction.click.dataKey;
+  }
+  if (filterByDataKey == null && defaultIndex != null) {
+    /*
+     * So when we use `defaultIndex` - we don't have a dataKey to filter by because user did not hover over anything yet.
+     * In that case let's display the first item in the tooltip; after all, this is `item` interaction case,
+     * so we should display only one item at a time instead of all.
+     */
+    return [tooltipState.tooltipItemPayloads[0]];
+  }
+  return tooltipState.tooltipItemPayloads.filter(tpc => {
+    var _tpc$settings;
+    return ((_tpc$settings = tpc.settings) === null || _tpc$settings === void 0 ? void 0 : _tpc$settings.dataKey) === filterByDataKey;
+  });
+};
+exports.combineTooltipPayloadConfigurations = combineTooltipPayloadConfigurations;
Index: node_modules/recharts/lib/state/selectors/containerSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/containerSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/containerSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectMargin = exports.selectContainerScale = exports.selectChartWidth = exports.selectChartHeight = void 0;
+var selectChartWidth = state => state.layout.width;
+exports.selectChartWidth = selectChartWidth;
+var selectChartHeight = state => state.layout.height;
+exports.selectChartHeight = selectChartHeight;
+var selectContainerScale = state => state.layout.scale;
+exports.selectContainerScale = selectContainerScale;
+var selectMargin = state => state.layout.margin;
+exports.selectMargin = selectMargin;
Index: node_modules/recharts/lib/state/selectors/dataSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/dataSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/dataSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectChartDataWithIndexesIfNotInPanorama = exports.selectChartDataWithIndexes = exports.selectChartDataAndAlwaysIgnoreIndexes = void 0;
+var _reselect = require("reselect");
+/**
+ * This selector always returns the data with the indexes set by a Brush.
+ * Trouble is, that might or might not be what you want.
+ *
+ * In charts with Brush, you will sometimes want to select the full range of data, and sometimes the one decided by the Brush
+ * - even if the Brush is active, the panorama inside the Brush should show the full range of data.
+ *
+ * So instead of this selector, consider using either selectChartDataAndAlwaysIgnoreIndexes or selectChartDataWithIndexesIfNotInPanorama
+ *
+ * @param state RechartsRootState
+ * @returns data defined on the chart root element, such as BarChart or ScatterChart
+ */
+var selectChartDataWithIndexes = state => state.chartData;
+
+/**
+ * This selector will always return the full range of data, ignoring the indexes set by a Brush.
+ * Useful for when you want to render the full range of data, even if a Brush is active.
+ * For example: in the Brush panorama, in Legend, in Tooltip.
+ */
+exports.selectChartDataWithIndexes = selectChartDataWithIndexes;
+var selectChartDataAndAlwaysIgnoreIndexes = exports.selectChartDataAndAlwaysIgnoreIndexes = (0, _reselect.createSelector)([selectChartDataWithIndexes], dataState => {
+  var dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0;
+  return {
+    chartData: dataState.chartData,
+    computedData: dataState.computedData,
+    dataEndIndex,
+    dataStartIndex: 0
+  };
+});
+var selectChartDataWithIndexesIfNotInPanorama = (state, _unused1, _unused2, isPanorama) => {
+  if (isPanorama) {
+    return selectChartDataAndAlwaysIgnoreIndexes(state);
+  }
+  return selectChartDataWithIndexes(state);
+};
+exports.selectChartDataWithIndexesIfNotInPanorama = selectChartDataWithIndexesIfNotInPanorama;
Index: node_modules/recharts/lib/state/selectors/funnelSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/funnelSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/funnelSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectFunnelTrapezoids = void 0;
+var _reselect = require("reselect");
+var _Funnel = require("../../cartesian/Funnel");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var _dataSelectors = require("./dataSelectors");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var pickFunnelSettings = (_state, funnelSettings) => funnelSettings;
+var selectFunnelTrapezoids = exports.selectFunnelTrapezoids = (0, _reselect.createSelector)([_selectChartOffsetInternal.selectChartOffsetInternal, pickFunnelSettings, _dataSelectors.selectChartDataAndAlwaysIgnoreIndexes], (offset, _ref, _ref2) => {
+  var {
+    data,
+    dataKey,
+    nameKey,
+    tooltipType,
+    lastShapeType,
+    reversed,
+    customWidth,
+    cells,
+    presentationProps
+  } = _ref;
+  var {
+    chartData
+  } = _ref2;
+  var displayedData;
+  if (data != null && data.length > 0) {
+    displayedData = data;
+  } else if (chartData != null && chartData.length > 0) {
+    displayedData = chartData;
+  }
+  if (displayedData && displayedData.length) {
+    displayedData = displayedData.map((entry, index) => _objectSpread(_objectSpread(_objectSpread({
+      payload: entry
+    }, presentationProps), entry), cells && cells[index] && cells[index].props));
+  } else if (cells && cells.length) {
+    displayedData = cells.map(cell => _objectSpread(_objectSpread({}, presentationProps), cell.props));
+  } else {
+    return {
+      trapezoids: [],
+      data: displayedData
+    };
+  }
+  return (0, _Funnel.computeFunnelTrapezoids)({
+    dataKey,
+    nameKey,
+    displayedData,
+    tooltipType,
+    lastShapeType,
+    reversed,
+    offset,
+    customWidth
+  });
+});
Index: node_modules/recharts/lib/state/selectors/legendSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/legendSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/legendSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectLegendSize = exports.selectLegendSettings = exports.selectLegendPayload = void 0;
+var _reselect = require("reselect");
+var _sortBy = _interopRequireDefault(require("es-toolkit/compat/sortBy"));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var selectLegendSettings = state => state.legend.settings;
+exports.selectLegendSettings = selectLegendSettings;
+var selectLegendSize = state => state.legend.size;
+exports.selectLegendSize = selectLegendSize;
+var selectAllLegendPayload2DArray = state => state.legend.payload;
+var selectLegendPayload = exports.selectLegendPayload = (0, _reselect.createSelector)([selectAllLegendPayload2DArray, selectLegendSettings], (payloads, _ref) => {
+  var {
+    itemSorter
+  } = _ref;
+  var flat = payloads.flat(1);
+  return itemSorter ? (0, _sortBy.default)(flat, itemSorter) : flat;
+});
Index: node_modules/recharts/lib/state/selectors/lineSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/lineSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/lineSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectLinePoints = void 0;
+var _reselect = require("reselect");
+var _Line = require("../../cartesian/Line");
+var _dataSelectors = require("./dataSelectors");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _axisSelectors = require("./axisSelectors");
+var _ChartUtils = require("../../util/ChartUtils");
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, isPanorama) => (0, _axisSelectors.selectAxisWithScale)(state, 'xAxis', xAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, isPanorama) => (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, isPanorama) => (0, _axisSelectors.selectAxisWithScale)(state, 'yAxis', yAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, isPanorama) => (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'yAxis', yAxisId, isPanorama);
+var selectBandSize = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {
+  if ((0, _ChartUtils.isCategoricalAxis)(layout, 'xAxis')) {
+    return (0, _ChartUtils.getBandSizeOfAxis)(xAxis, xAxisTicks, false);
+  }
+  return (0, _ChartUtils.getBandSizeOfAxis)(yAxis, yAxisTicks, false);
+});
+var pickLineId = (_state, _xAxisId, _yAxisId, _isPanorama, id) => id;
+function isLineSettings(item) {
+  return item.type === 'line';
+}
+
+/*
+ * There is a race condition problem because we read some data from props and some from the state.
+ * The state is updated through a dispatch and is one render behind,
+ * and so we have this weird one tick render where the displayedData in one selector have the old dataKey
+ * but the new dataKey in another selector.
+ *
+ * So here instead of reading the dataKey from the props, we always read it from the state.
+ */
+var selectSynchronisedLineSettings = (0, _reselect.createSelector)([_axisSelectors.selectUnfilteredCartesianItems, pickLineId], (graphicalItems, id) => graphicalItems.filter(isLineSettings).find(x => x.id === id));
+var selectLinePoints = exports.selectLinePoints = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks, selectSynchronisedLineSettings, selectBandSize, _dataSelectors.selectChartDataWithIndexesIfNotInPanorama], (layout, xAxis, yAxis, xAxisTicks, yAxisTicks, lineSettings, bandSize, _ref) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (lineSettings == null || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || xAxisTicks.length === 0 || yAxisTicks.length === 0 || bandSize == null) {
+    return undefined;
+  }
+  var {
+    dataKey,
+    data
+  } = lineSettings;
+  var displayedData;
+  if (data != null && data.length > 0) {
+    displayedData = data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return (0, _Line.computeLinePoints)({
+    layout,
+    xAxis,
+    yAxis,
+    xAxisTicks,
+    yAxisTicks,
+    dataKey,
+    bandSize,
+    displayedData
+  });
+});
Index: node_modules/recharts/lib/state/selectors/pickAxisId.js
===================================================================
--- node_modules/recharts/lib/state/selectors/pickAxisId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/pickAxisId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.pickAxisId = void 0;
+var pickAxisId = (_state, _axisType, axisId) => axisId;
+exports.pickAxisId = pickAxisId;
Index: node_modules/recharts/lib/state/selectors/pickAxisType.js
===================================================================
--- node_modules/recharts/lib/state/selectors/pickAxisType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/pickAxisType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.pickAxisType = void 0;
+var pickAxisType = (_state, axisType) => axisType;
+exports.pickAxisType = pickAxisType;
Index: node_modules/recharts/lib/state/selectors/pieSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/pieSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/pieSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,83 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectPieSectors = exports.selectPieLegend = exports.selectDisplayedData = void 0;
+var _reselect = require("reselect");
+var _Pie = require("../../polar/Pie");
+var _dataSelectors = require("./dataSelectors");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var _ChartUtils = require("../../util/ChartUtils");
+var _polarSelectors = require("./polarSelectors");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var pickId = (_state, id) => id;
+var selectSynchronisedPieSettings = (0, _reselect.createSelector)([_polarSelectors.selectUnfilteredPolarItems, pickId], (graphicalItems, id) => graphicalItems.filter(item => item.type === 'pie').find(item => item.id === id));
+
+// Keep stable reference to an empty array to prevent re-renders
+var emptyArray = [];
+var pickCells = (_state, _id, cells) => {
+  if ((cells === null || cells === void 0 ? void 0 : cells.length) === 0) {
+    return emptyArray;
+  }
+  return cells;
+};
+var selectDisplayedData = exports.selectDisplayedData = (0, _reselect.createSelector)([_dataSelectors.selectChartDataAndAlwaysIgnoreIndexes, selectSynchronisedPieSettings, pickCells], (_ref, pieSettings, cells) => {
+  var {
+    chartData
+  } = _ref;
+  if (pieSettings == null) {
+    return undefined;
+  }
+  var displayedData;
+  if ((pieSettings === null || pieSettings === void 0 ? void 0 : pieSettings.data) != null && pieSettings.data.length > 0) {
+    displayedData = pieSettings.data;
+  } else {
+    displayedData = chartData;
+  }
+  if ((!displayedData || !displayedData.length) && cells != null) {
+    displayedData = cells.map(cell => _objectSpread(_objectSpread({}, pieSettings.presentationProps), cell.props));
+  }
+  if (displayedData == null) {
+    return undefined;
+  }
+  return displayedData;
+});
+var selectPieLegend = exports.selectPieLegend = (0, _reselect.createSelector)([selectDisplayedData, selectSynchronisedPieSettings, pickCells], (displayedData, pieSettings, cells) => {
+  if (displayedData == null || pieSettings == null) {
+    return undefined;
+  }
+  return displayedData.map((entry, i) => {
+    var _cells$i;
+    var name = (0, _ChartUtils.getValueByDataKey)(entry, pieSettings.nameKey, pieSettings.name);
+    var color;
+    if (cells !== null && cells !== void 0 && (_cells$i = cells[i]) !== null && _cells$i !== void 0 && (_cells$i = _cells$i.props) !== null && _cells$i !== void 0 && _cells$i.fill) {
+      color = cells[i].props.fill;
+    } else if (typeof entry === 'object' && entry != null && 'fill' in entry) {
+      color = entry.fill;
+    } else {
+      color = pieSettings.fill;
+    }
+    return {
+      value: (0, _ChartUtils.getTooltipNameProp)(name, pieSettings.dataKey),
+      color,
+      payload: entry,
+      type: pieSettings.legendType
+    };
+  });
+});
+var selectPieSectors = exports.selectPieSectors = (0, _reselect.createSelector)([selectDisplayedData, selectSynchronisedPieSettings, pickCells, _selectChartOffsetInternal.selectChartOffsetInternal], (displayedData, pieSettings, cells, offset) => {
+  if (pieSettings == null || displayedData == null) {
+    return undefined;
+  }
+  return (0, _Pie.computePieSectors)({
+    offset,
+    pieSettings,
+    displayedData,
+    cells
+  });
+});
Index: node_modules/recharts/lib/state/selectors/polarAxisSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/polarAxisSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/polarAxisSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,158 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectRadiusAxisRangeWithReversed = exports.selectRadiusAxisRange = exports.selectRadiusAxis = exports.selectPolarViewBox = exports.selectPolarOptions = exports.selectOuterRadius = exports.selectMaxRadius = exports.selectAngleAxisRangeWithReversed = exports.selectAngleAxisRange = exports.selectAngleAxis = exports.implicitRadiusAxis = exports.implicitRadialBarRadiusAxis = exports.implicitRadialBarAngleAxis = exports.implicitAngleAxis = void 0;
+var _reselect = require("reselect");
+var _containerSelectors = require("./containerSelectors");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var _PolarUtils = require("../../util/PolarUtils");
+var _DataUtils = require("../../util/DataUtils");
+var _defaultPolarAngleAxisProps = require("../../polar/defaultPolarAngleAxisProps");
+var _defaultPolarRadiusAxisProps = require("../../polar/defaultPolarRadiusAxisProps");
+var _combineAxisRangeWithReverse = require("./combiners/combineAxisRangeWithReverse");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var implicitAngleAxis = exports.implicitAngleAxis = {
+  allowDataOverflow: false,
+  allowDecimals: false,
+  allowDuplicatedCategory: false,
+  // defaultPolarAngleAxisProps.allowDuplicatedCategory has it set to true but the actual axis rendering ignores the prop because reasons,
+  dataKey: undefined,
+  domain: undefined,
+  id: _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps.angleAxisId,
+  includeHidden: false,
+  name: undefined,
+  reversed: _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps.reversed,
+  scale: _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps.scale,
+  tick: _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps.tick,
+  tickCount: undefined,
+  ticks: undefined,
+  type: _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps.type,
+  unit: undefined
+};
+var implicitRadiusAxis = exports.implicitRadiusAxis = {
+  allowDataOverflow: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.allowDataOverflow,
+  allowDecimals: false,
+  allowDuplicatedCategory: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.allowDuplicatedCategory,
+  dataKey: undefined,
+  domain: undefined,
+  id: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.radiusAxisId,
+  includeHidden: false,
+  name: undefined,
+  reversed: false,
+  scale: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.scale,
+  tick: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.tick,
+  tickCount: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.tickCount,
+  ticks: undefined,
+  type: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.type,
+  unit: undefined
+};
+var implicitRadialBarAngleAxis = exports.implicitRadialBarAngleAxis = {
+  allowDataOverflow: false,
+  allowDecimals: false,
+  allowDuplicatedCategory: _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps.allowDuplicatedCategory,
+  dataKey: undefined,
+  domain: undefined,
+  id: _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps.angleAxisId,
+  includeHidden: false,
+  name: undefined,
+  reversed: false,
+  scale: _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps.scale,
+  tick: _defaultPolarAngleAxisProps.defaultPolarAngleAxisProps.tick,
+  tickCount: undefined,
+  ticks: undefined,
+  type: 'number',
+  unit: undefined
+};
+var implicitRadialBarRadiusAxis = exports.implicitRadialBarRadiusAxis = {
+  allowDataOverflow: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.allowDataOverflow,
+  allowDecimals: false,
+  allowDuplicatedCategory: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.allowDuplicatedCategory,
+  dataKey: undefined,
+  domain: undefined,
+  id: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.radiusAxisId,
+  includeHidden: false,
+  name: undefined,
+  reversed: false,
+  scale: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.scale,
+  tick: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.tick,
+  tickCount: _defaultPolarRadiusAxisProps.defaultPolarRadiusAxisProps.tickCount,
+  ticks: undefined,
+  type: 'category',
+  unit: undefined
+};
+var selectAngleAxis = (state, angleAxisId) => {
+  if (state.polarAxis.angleAxis[angleAxisId] != null) {
+    return state.polarAxis.angleAxis[angleAxisId];
+  }
+  if (state.layout.layoutType === 'radial') {
+    return implicitRadialBarAngleAxis;
+  }
+  return implicitAngleAxis;
+};
+exports.selectAngleAxis = selectAngleAxis;
+var selectRadiusAxis = (state, radiusAxisId) => {
+  if (state.polarAxis.radiusAxis[radiusAxisId] != null) {
+    return state.polarAxis.radiusAxis[radiusAxisId];
+  }
+  if (state.layout.layoutType === 'radial') {
+    return implicitRadialBarRadiusAxis;
+  }
+  return implicitRadiusAxis;
+};
+exports.selectRadiusAxis = selectRadiusAxis;
+var selectPolarOptions = state => state.polarOptions;
+exports.selectPolarOptions = selectPolarOptions;
+var selectMaxRadius = exports.selectMaxRadius = (0, _reselect.createSelector)([_containerSelectors.selectChartWidth, _containerSelectors.selectChartHeight, _selectChartOffsetInternal.selectChartOffsetInternal], _PolarUtils.getMaxRadius);
+var selectInnerRadius = (0, _reselect.createSelector)([selectPolarOptions, selectMaxRadius], (polarChartOptions, maxRadius) => {
+  if (polarChartOptions == null) {
+    return undefined;
+  }
+  return (0, _DataUtils.getPercentValue)(polarChartOptions.innerRadius, maxRadius, 0);
+});
+var selectOuterRadius = exports.selectOuterRadius = (0, _reselect.createSelector)([selectPolarOptions, selectMaxRadius], (polarChartOptions, maxRadius) => {
+  if (polarChartOptions == null) {
+    return undefined;
+  }
+  return (0, _DataUtils.getPercentValue)(polarChartOptions.outerRadius, maxRadius, maxRadius * 0.8);
+});
+var combineAngleAxisRange = polarOptions => {
+  if (polarOptions == null) {
+    return [0, 0];
+  }
+  var {
+    startAngle,
+    endAngle
+  } = polarOptions;
+  return [startAngle, endAngle];
+};
+var selectAngleAxisRange = exports.selectAngleAxisRange = (0, _reselect.createSelector)([selectPolarOptions], combineAngleAxisRange);
+var selectAngleAxisRangeWithReversed = exports.selectAngleAxisRangeWithReversed = (0, _reselect.createSelector)([selectAngleAxis, selectAngleAxisRange], _combineAxisRangeWithReverse.combineAxisRangeWithReverse);
+var selectRadiusAxisRange = exports.selectRadiusAxisRange = (0, _reselect.createSelector)([selectMaxRadius, selectInnerRadius, selectOuterRadius], (maxRadius, innerRadius, outerRadius) => {
+  if (maxRadius == null || innerRadius == null || outerRadius == null) {
+    return undefined;
+  }
+  return [innerRadius, outerRadius];
+});
+var selectRadiusAxisRangeWithReversed = exports.selectRadiusAxisRangeWithReversed = (0, _reselect.createSelector)([selectRadiusAxis, selectRadiusAxisRange], _combineAxisRangeWithReverse.combineAxisRangeWithReverse);
+var selectPolarViewBox = exports.selectPolarViewBox = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectPolarOptions, selectInnerRadius, selectOuterRadius, _containerSelectors.selectChartWidth, _containerSelectors.selectChartHeight], (layout, polarOptions, innerRadius, outerRadius, width, height) => {
+  if (layout !== 'centric' && layout !== 'radial' || polarOptions == null || innerRadius == null || outerRadius == null) {
+    return undefined;
+  }
+  var {
+    cx,
+    cy,
+    startAngle,
+    endAngle
+  } = polarOptions;
+  return {
+    cx: (0, _DataUtils.getPercentValue)(cx, width, width / 2),
+    cy: (0, _DataUtils.getPercentValue)(cy, height, height / 2),
+    innerRadius,
+    outerRadius,
+    startAngle,
+    endAngle,
+    clockWise: false
+  };
+});
Index: node_modules/recharts/lib/state/selectors/polarGridSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/polarGridSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/polarGridSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectPolarGridRadii = exports.selectPolarGridAngles = void 0;
+var _reselect = require("reselect");
+var _polarScaleSelectors = require("./polarScaleSelectors");
+var selectAngleAxisTicks = (state, anglexisId) => (0, _polarScaleSelectors.selectPolarAxisTicks)(state, 'angleAxis', anglexisId, false);
+var selectPolarGridAngles = exports.selectPolarGridAngles = (0, _reselect.createSelector)([selectAngleAxisTicks], ticks => {
+  if (!ticks) {
+    return undefined;
+  }
+  return ticks.map(tick => tick.coordinate);
+});
+var selectRadiusAxisTicks = (state, radiusAxisId) => (0, _polarScaleSelectors.selectPolarAxisTicks)(state, 'radiusAxis', radiusAxisId, false);
+var selectPolarGridRadii = exports.selectPolarGridRadii = (0, _reselect.createSelector)([selectRadiusAxisTicks], ticks => {
+  if (!ticks) {
+    return undefined;
+  }
+  return ticks.map(tick => tick.coordinate);
+});
Index: node_modules/recharts/lib/state/selectors/polarScaleSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/polarScaleSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/polarScaleSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectPolarGraphicalItemAxisTicks = exports.selectPolarCategoricalDomain = exports.selectPolarAxisTicks = exports.selectPolarAxisScale = exports.selectPolarAxis = void 0;
+var _reselect = require("reselect");
+var _axisSelectors = require("./axisSelectors");
+var _polarAxisSelectors = require("./polarAxisSelectors");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _polarSelectors = require("./polarSelectors");
+var _pickAxisType = require("./pickAxisType");
+var selectPolarAxis = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'angleAxis':
+      {
+        return (0, _polarAxisSelectors.selectAngleAxis)(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return (0, _polarAxisSelectors.selectRadiusAxis)(state, axisId);
+      }
+    default:
+      {
+        throw new Error("Unexpected axis type: ".concat(axisType));
+      }
+  }
+};
+exports.selectPolarAxis = selectPolarAxis;
+var selectPolarAxisRangeWithReversed = (state, axisType, axisId) => {
+  switch (axisType) {
+    case 'angleAxis':
+      {
+        return (0, _polarAxisSelectors.selectAngleAxisRangeWithReversed)(state, axisId);
+      }
+    case 'radiusAxis':
+      {
+        return (0, _polarAxisSelectors.selectRadiusAxisRangeWithReversed)(state, axisId);
+      }
+    default:
+      {
+        throw new Error("Unexpected axis type: ".concat(axisType));
+      }
+  }
+};
+var selectPolarAxisScale = exports.selectPolarAxisScale = (0, _reselect.createSelector)([selectPolarAxis, _axisSelectors.selectRealScaleType, _polarSelectors.selectPolarAxisDomainIncludingNiceTicks, selectPolarAxisRangeWithReversed], _axisSelectors.combineScaleFunction);
+var selectPolarCategoricalDomain = exports.selectPolarCategoricalDomain = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, _polarSelectors.selectPolarAppliedValues, _axisSelectors.selectAxisSettings, _pickAxisType.pickAxisType], _axisSelectors.combineCategoricalDomain);
+var selectPolarAxisTicks = exports.selectPolarAxisTicks = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectPolarAxis, _axisSelectors.selectRealScaleType, selectPolarAxisScale, _polarSelectors.selectPolarNiceTicks, selectPolarAxisRangeWithReversed, _axisSelectors.selectDuplicateDomain, selectPolarCategoricalDomain, _pickAxisType.pickAxisType], _axisSelectors.combineAxisTicks);
+var selectPolarGraphicalItemAxisTicks = exports.selectPolarGraphicalItemAxisTicks = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectPolarAxis, selectPolarAxisScale, selectPolarAxisRangeWithReversed, _axisSelectors.selectDuplicateDomain, selectPolarCategoricalDomain, _pickAxisType.pickAxisType], _axisSelectors.combineGraphicalItemTicks);
Index: node_modules/recharts/lib/state/selectors/polarSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/polarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/polarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectUnfilteredPolarItems = exports.selectPolarNiceTicks = exports.selectPolarItemsSettings = exports.selectPolarDisplayedData = exports.selectPolarAxisDomainIncludingNiceTicks = exports.selectPolarAxisDomain = exports.selectPolarAppliedValues = exports.selectAllPolarAppliedNumericalValues = void 0;
+var _reselect = require("reselect");
+var _dataSelectors = require("./dataSelectors");
+var _axisSelectors = require("./axisSelectors");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _ChartUtils = require("../../util/ChartUtils");
+var _pickAxisType = require("./pickAxisType");
+var _pickAxisId = require("./pickAxisId");
+var _rootPropsSelectors = require("./rootPropsSelectors");
+var selectUnfilteredPolarItems = state => state.graphicalItems.polarItems;
+exports.selectUnfilteredPolarItems = selectUnfilteredPolarItems;
+var selectAxisPredicate = (0, _reselect.createSelector)([_pickAxisType.pickAxisType, _pickAxisId.pickAxisId], _axisSelectors.itemAxisPredicate);
+var selectPolarItemsSettings = exports.selectPolarItemsSettings = (0, _reselect.createSelector)([selectUnfilteredPolarItems, _axisSelectors.selectBaseAxis, selectAxisPredicate], _axisSelectors.combineGraphicalItemsSettings);
+var selectPolarGraphicalItemsData = (0, _reselect.createSelector)([selectPolarItemsSettings], _axisSelectors.combineGraphicalItemsData);
+var selectPolarDisplayedData = exports.selectPolarDisplayedData = (0, _reselect.createSelector)([selectPolarGraphicalItemsData, _dataSelectors.selectChartDataAndAlwaysIgnoreIndexes], _axisSelectors.combineDisplayedData);
+var selectPolarAppliedValues = exports.selectPolarAppliedValues = (0, _reselect.createSelector)([selectPolarDisplayedData, _axisSelectors.selectBaseAxis, selectPolarItemsSettings], _axisSelectors.combineAppliedValues);
+var selectAllPolarAppliedNumericalValues = exports.selectAllPolarAppliedNumericalValues = (0, _reselect.createSelector)([selectPolarDisplayedData, _axisSelectors.selectBaseAxis, selectPolarItemsSettings], (data, axisSettings, items) => {
+  if (items.length > 0) {
+    return data.flatMap(entry => {
+      return items.flatMap(item => {
+        var _axisSettings$dataKey;
+        var valueByDataKey = (0, _ChartUtils.getValueByDataKey)(entry, (_axisSettings$dataKey = axisSettings.dataKey) !== null && _axisSettings$dataKey !== void 0 ? _axisSettings$dataKey : item.dataKey);
+        return {
+          value: valueByDataKey,
+          errorDomain: [] // polar charts do not have error bars
+        };
+      });
+    }).filter(Boolean);
+  }
+  if ((axisSettings === null || axisSettings === void 0 ? void 0 : axisSettings.dataKey) != null) {
+    return data.map(item => ({
+      value: (0, _ChartUtils.getValueByDataKey)(item, axisSettings.dataKey),
+      errorDomain: []
+    }));
+  }
+  return data.map(entry => ({
+    value: entry,
+    errorDomain: []
+  }));
+});
+var unsupportedInPolarChart = () => undefined;
+var selectPolarNumericalDomain = (0, _reselect.createSelector)([_axisSelectors.selectBaseAxis, _axisSelectors.selectDomainDefinition, unsupportedInPolarChart, selectAllPolarAppliedNumericalValues, unsupportedInPolarChart, _chartLayoutContext.selectChartLayout, _pickAxisType.pickAxisType], _axisSelectors.combineNumericalDomain);
+var selectPolarAxisDomain = exports.selectPolarAxisDomain = (0, _reselect.createSelector)([_axisSelectors.selectBaseAxis, _chartLayoutContext.selectChartLayout, selectPolarDisplayedData, selectPolarAppliedValues, _rootPropsSelectors.selectStackOffsetType, _pickAxisType.pickAxisType, selectPolarNumericalDomain], _axisSelectors.combineAxisDomain);
+var selectPolarNiceTicks = exports.selectPolarNiceTicks = (0, _reselect.createSelector)([selectPolarAxisDomain, _axisSelectors.selectBaseAxis, _axisSelectors.selectRealScaleType], _axisSelectors.combineNiceTicks);
+var selectPolarAxisDomainIncludingNiceTicks = exports.selectPolarAxisDomainIncludingNiceTicks = (0, _reselect.createSelector)([_axisSelectors.selectBaseAxis, selectPolarAxisDomain, selectPolarNiceTicks, _pickAxisType.pickAxisType], _axisSelectors.combineAxisDomainWithNiceTicks);
Index: node_modules/recharts/lib/state/selectors/radarSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/radarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/radarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,95 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectRadiusAxisForBandSize = exports.selectRadarPoints = exports.selectAngleAxisWithScaleAndViewport = exports.selectAngleAxisForBandSize = void 0;
+var _reselect = require("reselect");
+var _Radar = require("../../polar/Radar");
+var _polarScaleSelectors = require("./polarScaleSelectors");
+var _polarAxisSelectors = require("./polarAxisSelectors");
+var _dataSelectors = require("./dataSelectors");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _ChartUtils = require("../../util/ChartUtils");
+var _polarSelectors = require("./polarSelectors");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var selectRadiusAxisScale = (state, radiusAxisId) => (0, _polarScaleSelectors.selectPolarAxisScale)(state, 'radiusAxis', radiusAxisId);
+var selectRadiusAxisForRadar = (0, _reselect.createSelector)([selectRadiusAxisScale], scale => {
+  if (scale == null) {
+    return undefined;
+  }
+  return {
+    scale
+  };
+});
+var selectRadiusAxisForBandSize = exports.selectRadiusAxisForBandSize = (0, _reselect.createSelector)([_polarAxisSelectors.selectRadiusAxis, selectRadiusAxisScale], (axisSettings, scale) => {
+  if (axisSettings == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axisSettings), {}, {
+    scale
+  });
+});
+var selectRadiusAxisTicks = (state, radiusAxisId, _angleAxisId, isPanorama) => {
+  return (0, _polarScaleSelectors.selectPolarAxisTicks)(state, 'radiusAxis', radiusAxisId, isPanorama);
+};
+var selectAngleAxisForRadar = (state, _radiusAxisId, angleAxisId) => (0, _polarAxisSelectors.selectAngleAxis)(state, angleAxisId);
+var selectPolarAxisScaleForRadar = (state, _radiusAxisId, angleAxisId) => (0, _polarScaleSelectors.selectPolarAxisScale)(state, 'angleAxis', angleAxisId);
+var selectAngleAxisForBandSize = exports.selectAngleAxisForBandSize = (0, _reselect.createSelector)([selectAngleAxisForRadar, selectPolarAxisScaleForRadar], (axisSettings, scale) => {
+  if (axisSettings == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axisSettings), {}, {
+    scale
+  });
+});
+var selectAngleAxisTicks = (state, _radiusAxisId, angleAxisId, isPanorama) => {
+  return (0, _polarScaleSelectors.selectPolarAxisTicks)(state, 'angleAxis', angleAxisId, isPanorama);
+};
+var selectAngleAxisWithScaleAndViewport = exports.selectAngleAxisWithScaleAndViewport = (0, _reselect.createSelector)([selectAngleAxisForRadar, selectPolarAxisScaleForRadar, _polarAxisSelectors.selectPolarViewBox], (axisOptions, scale, polarViewBox) => {
+  if (polarViewBox == null || scale == null) {
+    return undefined;
+  }
+  return {
+    scale,
+    type: axisOptions.type,
+    dataKey: axisOptions.dataKey,
+    cx: polarViewBox.cx,
+    cy: polarViewBox.cy
+  };
+});
+var pickDataKey = (_state, _radiusAxisId, _angleAxisId, _isPanorama, radarDataKey) => radarDataKey;
+var selectBandSizeOfAxis = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectRadiusAxisForBandSize, selectRadiusAxisTicks, selectAngleAxisForBandSize, selectAngleAxisTicks], (layout, radiusAxis, radiusAxisTicks, angleAxis, angleAxisTicks) => {
+  if ((0, _ChartUtils.isCategoricalAxis)(layout, 'radiusAxis')) {
+    return (0, _ChartUtils.getBandSizeOfAxis)(radiusAxis, radiusAxisTicks, false);
+  }
+  return (0, _ChartUtils.getBandSizeOfAxis)(angleAxis, angleAxisTicks, false);
+});
+var selectSynchronisedRadarDataKey = (0, _reselect.createSelector)([_polarSelectors.selectUnfilteredPolarItems, pickDataKey], (graphicalItems, radarDataKey) => {
+  if (graphicalItems.some(pgis => pgis.type === 'radar' && radarDataKey === pgis.dataKey)) {
+    return radarDataKey;
+  }
+  return undefined;
+});
+var selectRadarPoints = exports.selectRadarPoints = (0, _reselect.createSelector)([selectRadiusAxisForRadar, selectAngleAxisWithScaleAndViewport, _dataSelectors.selectChartDataAndAlwaysIgnoreIndexes, selectSynchronisedRadarDataKey, selectBandSizeOfAxis], (radiusAxis, angleAxis, _ref, dataKey, bandSize) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (radiusAxis == null || angleAxis == null || chartData == null || bandSize == null || dataKey == null) {
+    return undefined;
+  }
+  var displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);
+  return (0, _Radar.computeRadarPoints)({
+    radiusAxis,
+    angleAxis,
+    displayedData,
+    dataKey,
+    bandSize
+  });
+});
Index: node_modules/recharts/lib/state/selectors/radialBarSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/radialBarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/radialBarSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,195 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectRadiusAxisWithScale = exports.selectRadiusAxisTicks = exports.selectRadialBarSectors = exports.selectRadialBarLegendPayload = exports.selectPolarBarSizeList = exports.selectPolarBarPosition = exports.selectPolarBarBandSize = exports.selectBaseValue = exports.selectBandSizeOfPolarAxis = exports.selectAngleAxisWithScale = exports.selectAllPolarBarPositions = exports.pickMaxBarSize = void 0;
+var _reselect = require("reselect");
+var _RadialBar = require("../../polar/RadialBar");
+var _dataSelectors = require("./dataSelectors");
+var _polarScaleSelectors = require("./polarScaleSelectors");
+var _axisSelectors = require("./axisSelectors");
+var _polarAxisSelectors = require("./polarAxisSelectors");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _ChartUtils = require("../../util/ChartUtils");
+var _barSelectors = require("./barSelectors");
+var _rootPropsSelectors = require("./rootPropsSelectors");
+var _polarSelectors = require("./polarSelectors");
+var _DataUtils = require("../../util/DataUtils");
+var _combineDisplayedStackedData = require("./combiners/combineDisplayedStackedData");
+var _selectTooltipAxis = require("./selectTooltipAxis");
+var _StackedGraphicalItem = require("../types/StackedGraphicalItem");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var selectRadiusAxisForRadialBar = (state, radiusAxisId) => (0, _polarAxisSelectors.selectRadiusAxis)(state, radiusAxisId);
+var selectRadiusAxisScaleForRadar = (state, radiusAxisId) => (0, _polarScaleSelectors.selectPolarAxisScale)(state, 'radiusAxis', radiusAxisId);
+var selectRadiusAxisWithScale = exports.selectRadiusAxisWithScale = (0, _reselect.createSelector)([selectRadiusAxisForRadialBar, selectRadiusAxisScaleForRadar], (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+var selectRadiusAxisTicks = (state, radiusAxisId, _angleAxisId, isPanorama) => {
+  return (0, _polarScaleSelectors.selectPolarGraphicalItemAxisTicks)(state, 'radiusAxis', radiusAxisId, isPanorama);
+};
+exports.selectRadiusAxisTicks = selectRadiusAxisTicks;
+var selectAngleAxisForRadialBar = (state, _radiusAxisId, angleAxisId) => (0, _polarAxisSelectors.selectAngleAxis)(state, angleAxisId);
+var selectAngleAxisScaleForRadialBar = (state, _radiusAxisId, angleAxisId) => (0, _polarScaleSelectors.selectPolarAxisScale)(state, 'angleAxis', angleAxisId);
+var selectAngleAxisWithScale = exports.selectAngleAxisWithScale = (0, _reselect.createSelector)([selectAngleAxisForRadialBar, selectAngleAxisScaleForRadialBar], (axis, scale) => {
+  if (axis == null || scale == null) {
+    return undefined;
+  }
+  return _objectSpread(_objectSpread({}, axis), {}, {
+    scale
+  });
+});
+var selectAngleAxisTicks = (state, _radiusAxisId, angleAxisId, isPanorama) => {
+  return (0, _polarScaleSelectors.selectPolarAxisTicks)(state, 'angleAxis', angleAxisId, isPanorama);
+};
+var pickRadialBarSettings = (_state, _radiusAxisId, _angleAxisId, radialBarSettings) => radialBarSettings;
+var selectSynchronisedRadialBarSettings = (0, _reselect.createSelector)([_polarSelectors.selectUnfilteredPolarItems, pickRadialBarSettings], (graphicalItems, radialBarSettingsFromProps) => {
+  if (graphicalItems.some(pgis => pgis.type === 'radialBar' && radialBarSettingsFromProps.dataKey === pgis.dataKey && radialBarSettingsFromProps.stackId === pgis.stackId)) {
+    return radialBarSettingsFromProps;
+  }
+  return undefined;
+});
+var selectBandSizeOfPolarAxis = exports.selectBandSizeOfPolarAxis = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectRadiusAxisWithScale, selectRadiusAxisTicks, selectAngleAxisWithScale, selectAngleAxisTicks], (layout, radiusAxis, radiusAxisTicks, angleAxis, angleAxisTicks) => {
+  if ((0, _ChartUtils.isCategoricalAxis)(layout, 'radiusAxis')) {
+    return (0, _ChartUtils.getBandSizeOfAxis)(radiusAxis, radiusAxisTicks, false);
+  }
+  return (0, _ChartUtils.getBandSizeOfAxis)(angleAxis, angleAxisTicks, false);
+});
+var selectBaseValue = exports.selectBaseValue = (0, _reselect.createSelector)([selectAngleAxisWithScale, selectRadiusAxisWithScale, _chartLayoutContext.selectChartLayout], (angleAxis, radiusAxis, layout) => {
+  var numericAxis = layout === 'radial' ? angleAxis : radiusAxis;
+  if (numericAxis == null || numericAxis.scale == null) {
+    return undefined;
+  }
+  return (0, _ChartUtils.getBaseValueOfBar)({
+    numericAxis
+  });
+});
+var pickCells = (_state, _radiusAxisId, _angleAxisId, _radialBarSettings, cells) => cells;
+var pickAngleAxisId = (_state, _radiusAxisId, angleAxisId, _radialBarSettings, _cells) => angleAxisId;
+var pickRadiusAxisId = (_state, radiusAxisId, _angleAxisId, _radialBarSettings, _cells) => radiusAxisId;
+var pickMaxBarSize = (_state, _radiusAxisId, _angleAxisId, radialBarSettings, _cells) => radialBarSettings.maxBarSize;
+exports.pickMaxBarSize = pickMaxBarSize;
+var selectAllVisibleRadialBars = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, _polarSelectors.selectUnfilteredPolarItems, pickAngleAxisId, pickRadiusAxisId], (layout, allItems, angleAxisId, radiusAxisId) => {
+  return allItems.filter(i => {
+    if (layout === 'centric') {
+      return i.angleAxisId === angleAxisId;
+    }
+    return i.radiusAxisId === radiusAxisId;
+  }).filter(i => i.hide === false).filter(i => i.type === 'radialBar');
+});
+
+/**
+ * The generator never returned the totalSize which means that barSize in polar chart can not support percent values.
+ * We can add that if we want to I suppose.
+ * @returns undefined - but it should be a total size of numerical axis in polar chart
+ */
+var selectPolarBarAxisSize = () => undefined;
+var selectPolarBarSizeList = exports.selectPolarBarSizeList = (0, _reselect.createSelector)([selectAllVisibleRadialBars, _rootPropsSelectors.selectRootBarSize, selectPolarBarAxisSize], _barSelectors.combineBarSizeList);
+var selectPolarBarBandSize = exports.selectPolarBarBandSize = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, _rootPropsSelectors.selectRootMaxBarSize, selectAngleAxisWithScale, selectAngleAxisTicks, selectRadiusAxisWithScale, selectRadiusAxisTicks, pickMaxBarSize], (layout, globalMaxBarSize, angleAxis, angleAxisTicks, radiusAxis, radiusAxisTicks, childMaxBarSize) => {
+  var _ref2, _getBandSizeOfAxis2;
+  var maxBarSize = (0, _DataUtils.isNullish)(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;
+  if (layout === 'centric') {
+    var _ref, _getBandSizeOfAxis;
+    return (_ref = (_getBandSizeOfAxis = (0, _ChartUtils.getBandSizeOfAxis)(angleAxis, angleAxisTicks, true)) !== null && _getBandSizeOfAxis !== void 0 ? _getBandSizeOfAxis : maxBarSize) !== null && _ref !== void 0 ? _ref : 0;
+  }
+  return (_ref2 = (_getBandSizeOfAxis2 = (0, _ChartUtils.getBandSizeOfAxis)(radiusAxis, radiusAxisTicks, true)) !== null && _getBandSizeOfAxis2 !== void 0 ? _getBandSizeOfAxis2 : maxBarSize) !== null && _ref2 !== void 0 ? _ref2 : 0;
+});
+var selectAllPolarBarPositions = exports.selectAllPolarBarPositions = (0, _reselect.createSelector)([selectPolarBarSizeList, _rootPropsSelectors.selectRootMaxBarSize, _rootPropsSelectors.selectBarGap, _rootPropsSelectors.selectBarCategoryGap, selectPolarBarBandSize, selectBandSizeOfPolarAxis, pickMaxBarSize], _barSelectors.combineAllBarPositions);
+var selectPolarBarPosition = exports.selectPolarBarPosition = (0, _reselect.createSelector)([selectAllPolarBarPositions, selectSynchronisedRadialBarSettings], (allBarPositions, barSettings) => {
+  if (allBarPositions == null || barSettings == null) {
+    return undefined;
+  }
+  var position = allBarPositions.find(p => p.stackId === barSettings.stackId && barSettings.dataKey != null && p.dataKeys.includes(barSettings.dataKey));
+  if (position == null) {
+    return undefined;
+  }
+  return position.position;
+});
+var selectStackedRadialBars = (0, _reselect.createSelector)([_polarSelectors.selectPolarItemsSettings], allPolarItems => allPolarItems.filter(item => item.type === 'radialBar').filter(_StackedGraphicalItem.isStacked));
+var selectPolarCombinedStackedData = (0, _reselect.createSelector)([selectStackedRadialBars, _dataSelectors.selectChartDataAndAlwaysIgnoreIndexes, _selectTooltipAxis.selectTooltipAxis], _combineDisplayedStackedData.combineDisplayedStackedData);
+var selectStackGroups = (0, _reselect.createSelector)([selectPolarCombinedStackedData, selectStackedRadialBars, _rootPropsSelectors.selectStackOffsetType], _axisSelectors.combineStackGroups);
+var selectRadialBarStackGroups = (state, radiusAxisId, angleAxisId) => {
+  var layout = (0, _chartLayoutContext.selectChartLayout)(state);
+  if (layout === 'centric') {
+    return selectStackGroups(state, 'radiusAxis', radiusAxisId);
+  }
+  return selectStackGroups(state, 'angleAxis', angleAxisId);
+};
+var selectPolarStackedData = (0, _reselect.createSelector)([selectRadialBarStackGroups, selectSynchronisedRadialBarSettings], _barSelectors.combineStackedData);
+var selectRadialBarSectors = exports.selectRadialBarSectors = (0, _reselect.createSelector)([selectAngleAxisWithScale, selectAngleAxisTicks, selectRadiusAxisWithScale, selectRadiusAxisTicks, _dataSelectors.selectChartDataWithIndexes, selectSynchronisedRadialBarSettings, selectBandSizeOfPolarAxis, _chartLayoutContext.selectChartLayout, selectBaseValue, _polarAxisSelectors.selectPolarViewBox, pickCells, selectPolarBarPosition, selectPolarStackedData], (angleAxis, angleAxisTicks, radiusAxis, radiusAxisTicks, _ref3, radialBarSettings, bandSize, layout, baseValue, polarViewBox, cells, pos, stackedData) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref3;
+  if (radialBarSettings == null || radiusAxis == null || angleAxis == null || chartData == null || bandSize == null || pos == null || layout !== 'centric' && layout !== 'radial' || radiusAxisTicks == null) {
+    return [];
+  }
+  var {
+    dataKey,
+    minPointSize
+  } = radialBarSettings;
+  var {
+    cx,
+    cy,
+    startAngle,
+    endAngle
+  } = polarViewBox;
+  var displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);
+  var numericAxis = layout === 'centric' ? radiusAxis : angleAxis;
+  var stackedDomain = stackedData ? numericAxis.scale.domain() : null;
+  return (0, _RadialBar.computeRadialBarDataItems)({
+    angleAxis,
+    angleAxisTicks,
+    bandSize,
+    baseValue,
+    cells,
+    cx,
+    cy,
+    dataKey,
+    dataStartIndex,
+    displayedData,
+    endAngle,
+    layout,
+    minPointSize,
+    pos,
+    radiusAxis,
+    radiusAxisTicks,
+    stackedData,
+    stackedDomain,
+    startAngle
+  });
+});
+var selectRadialBarLegendPayload = exports.selectRadialBarLegendPayload = (0, _reselect.createSelector)([_dataSelectors.selectChartDataAndAlwaysIgnoreIndexes, (_s, l) => l], (_ref4, legendType) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref4;
+  if (chartData == null) {
+    return [];
+  }
+  var displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);
+  if (displayedData.length === 0) {
+    return [];
+  }
+  return displayedData.map(entry => {
+    return {
+      type: legendType,
+      // @ts-expect-error we need a better typing for our data inputs
+      value: entry.name,
+      // @ts-expect-error we need a better typing for our data inputs
+      color: entry.fill,
+      payload: entry
+    };
+  });
+});
Index: node_modules/recharts/lib/state/selectors/rootPropsSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/rootPropsSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/rootPropsSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectSyncMethod = exports.selectSyncId = exports.selectStackOffsetType = exports.selectRootMaxBarSize = exports.selectRootBarSize = exports.selectEventEmitter = exports.selectChartName = exports.selectBarGap = exports.selectBarCategoryGap = void 0;
+var selectRootMaxBarSize = state => state.rootProps.maxBarSize;
+exports.selectRootMaxBarSize = selectRootMaxBarSize;
+var selectBarGap = state => state.rootProps.barGap;
+exports.selectBarGap = selectBarGap;
+var selectBarCategoryGap = state => state.rootProps.barCategoryGap;
+exports.selectBarCategoryGap = selectBarCategoryGap;
+var selectRootBarSize = state => state.rootProps.barSize;
+exports.selectRootBarSize = selectRootBarSize;
+var selectStackOffsetType = state => state.rootProps.stackOffset;
+exports.selectStackOffsetType = selectStackOffsetType;
+var selectChartName = state => state.options.chartName;
+exports.selectChartName = selectChartName;
+var selectSyncId = state => state.rootProps.syncId;
+exports.selectSyncId = selectSyncId;
+var selectSyncMethod = state => state.rootProps.syncMethod;
+exports.selectSyncMethod = selectSyncMethod;
+var selectEventEmitter = state => state.options.eventEmitter;
+exports.selectEventEmitter = selectEventEmitter;
Index: node_modules/recharts/lib/state/selectors/scatterSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/scatterSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/scatterSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectScatterPoints = void 0;
+var _reselect = require("reselect");
+var _Scatter = require("../../cartesian/Scatter");
+var _dataSelectors = require("./dataSelectors");
+var _axisSelectors = require("./axisSelectors");
+var selectXAxisWithScale = (state, xAxisId, _yAxisId, _zAxisId, _id, _cells, isPanorama) => (0, _axisSelectors.selectAxisWithScale)(state, 'xAxis', xAxisId, isPanorama);
+var selectXAxisTicks = (state, xAxisId, _yAxisId, _zAxisId, _id, _cells, isPanorama) => (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'xAxis', xAxisId, isPanorama);
+var selectYAxisWithScale = (state, _xAxisId, yAxisId, _zAxisId, _id, _cells, isPanorama) => (0, _axisSelectors.selectAxisWithScale)(state, 'yAxis', yAxisId, isPanorama);
+var selectYAxisTicks = (state, _xAxisId, yAxisId, _zAxisId, _id, _cells, isPanorama) => (0, _axisSelectors.selectTicksOfGraphicalItem)(state, 'yAxis', yAxisId, isPanorama);
+var selectZAxis = (state, _xAxisId, _yAxisId, zAxisId) => (0, _axisSelectors.selectZAxisWithScale)(state, 'zAxis', zAxisId, false);
+var pickScatterId = (_state, _xAxisId, _yAxisId, _zAxisId, id) => id;
+var pickCells = (_state, _xAxisId, _yAxisId, _zAxisId, _id, cells) => cells;
+var scatterChartDataSelector = (state, xAxisId, yAxisId, _zAxisId, _id, _cells, isPanorama) => (0, _dataSelectors.selectChartDataWithIndexesIfNotInPanorama)(state, xAxisId, yAxisId, isPanorama);
+var selectSynchronisedScatterSettings = (0, _reselect.createSelector)([_axisSelectors.selectUnfilteredCartesianItems, pickScatterId], (graphicalItems, id) => {
+  return graphicalItems.filter(item => item.type === 'scatter').find(item => item.id === id);
+});
+var selectScatterPoints = exports.selectScatterPoints = (0, _reselect.createSelector)([scatterChartDataSelector, selectXAxisWithScale, selectXAxisTicks, selectYAxisWithScale, selectYAxisTicks, selectZAxis, selectSynchronisedScatterSettings, pickCells], (_ref, xAxis, xAxisTicks, yAxis, yAxisTicks, zAxis, scatterSettings, cells) => {
+  var {
+    chartData,
+    dataStartIndex,
+    dataEndIndex
+  } = _ref;
+  if (scatterSettings == null) {
+    return undefined;
+  }
+  var displayedData;
+  if ((scatterSettings === null || scatterSettings === void 0 ? void 0 : scatterSettings.data) != null && scatterSettings.data.length > 0) {
+    displayedData = scatterSettings.data;
+  } else {
+    displayedData = chartData === null || chartData === void 0 ? void 0 : chartData.slice(dataStartIndex, dataEndIndex + 1);
+  }
+  if (displayedData == null || xAxis == null || yAxis == null || xAxisTicks == null || yAxisTicks == null || (xAxisTicks === null || xAxisTicks === void 0 ? void 0 : xAxisTicks.length) === 0 || (yAxisTicks === null || yAxisTicks === void 0 ? void 0 : yAxisTicks.length) === 0) {
+    return undefined;
+  }
+  return (0, _Scatter.computeScatterPoints)({
+    displayedData,
+    xAxis,
+    yAxis,
+    zAxis,
+    scatterSettings,
+    xAxisTicks,
+    yAxisTicks,
+    cells
+  });
+});
Index: node_modules/recharts/lib/state/selectors/selectActivePropsFromChartPointer.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectActivePropsFromChartPointer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectActivePropsFromChartPointer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectActivePropsFromChartPointer = void 0;
+var _reselect = require("reselect");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _tooltipSelectors = require("./tooltipSelectors");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var _selectors = require("./selectors");
+var _polarAxisSelectors = require("./polarAxisSelectors");
+var _selectTooltipAxisType = require("./selectTooltipAxisType");
+var pickChartPointer = (_state, chartPointer) => chartPointer;
+var selectActivePropsFromChartPointer = exports.selectActivePropsFromChartPointer = (0, _reselect.createSelector)([pickChartPointer, _chartLayoutContext.selectChartLayout, _polarAxisSelectors.selectPolarViewBox, _selectTooltipAxisType.selectTooltipAxisType, _tooltipSelectors.selectTooltipAxisRangeWithReverse, _tooltipSelectors.selectTooltipAxisTicks, _selectors.selectOrderedTooltipTicks, _selectChartOffsetInternal.selectChartOffsetInternal], _selectors.combineActiveProps);
Index: node_modules/recharts/lib/state/selectors/selectAllAxes.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectAllAxes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectAllAxes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectAllYAxes = exports.selectAllXAxes = void 0;
+var _reselect = require("reselect");
+var selectAllXAxes = exports.selectAllXAxes = (0, _reselect.createSelector)(state => state.cartesianAxis.xAxis, xAxisMap => {
+  return Object.values(xAxisMap);
+});
+var selectAllYAxes = exports.selectAllYAxes = (0, _reselect.createSelector)(state => state.cartesianAxis.yAxis, yAxisMap => {
+  return Object.values(yAxisMap);
+});
Index: node_modules/recharts/lib/state/selectors/selectChartOffset.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectChartOffset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectChartOffset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectChartOffset = void 0;
+var _reselect = require("reselect");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var selectChartOffset = exports.selectChartOffset = (0, _reselect.createSelector)([_selectChartOffsetInternal.selectChartOffsetInternal], offsetInternal => {
+  if (!offsetInternal) {
+    return undefined;
+  }
+  return {
+    top: offsetInternal.top,
+    bottom: offsetInternal.bottom,
+    left: offsetInternal.left,
+    right: offsetInternal.right
+  };
+});
Index: node_modules/recharts/lib/state/selectors/selectChartOffsetInternal.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectChartOffsetInternal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectChartOffsetInternal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,84 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectChartViewBox = exports.selectChartOffsetInternal = exports.selectBrushHeight = exports.selectAxisViewBox = void 0;
+var _reselect = require("reselect");
+var _get = _interopRequireDefault(require("es-toolkit/compat/get"));
+var _legendSelectors = require("./legendSelectors");
+var _ChartUtils = require("../../util/ChartUtils");
+var _containerSelectors = require("./containerSelectors");
+var _selectAllAxes = require("./selectAllAxes");
+var _Constants = require("../../util/Constants");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var selectBrushHeight = state => state.brush.height;
+
+/**
+ * For internal use only.
+ *
+ * @param root state
+ * @return ChartOffsetInternal
+ */
+exports.selectBrushHeight = selectBrushHeight;
+var selectChartOffsetInternal = exports.selectChartOffsetInternal = (0, _reselect.createSelector)([_containerSelectors.selectChartWidth, _containerSelectors.selectChartHeight, _containerSelectors.selectMargin, selectBrushHeight, _selectAllAxes.selectAllXAxes, _selectAllAxes.selectAllYAxes, _legendSelectors.selectLegendSettings, _legendSelectors.selectLegendSize], (chartWidth, chartHeight, margin, brushHeight, xAxes, yAxes, legendSettings, legendSize) => {
+  var offsetH = yAxes.reduce((result, entry) => {
+    var {
+      orientation
+    } = entry;
+    if (!entry.mirror && !entry.hide) {
+      var width = typeof entry.width === 'number' ? entry.width : _Constants.DEFAULT_Y_AXIS_WIDTH;
+      return _objectSpread(_objectSpread({}, result), {}, {
+        [orientation]: result[orientation] + width
+      });
+    }
+    return result;
+  }, {
+    left: margin.left || 0,
+    right: margin.right || 0
+  });
+  var offsetV = xAxes.reduce((result, entry) => {
+    var {
+      orientation
+    } = entry;
+    if (!entry.mirror && !entry.hide) {
+      return _objectSpread(_objectSpread({}, result), {}, {
+        [orientation]: (0, _get.default)(result, "".concat(orientation)) + entry.height
+      });
+    }
+    return result;
+  }, {
+    top: margin.top || 0,
+    bottom: margin.bottom || 0
+  });
+  var offset = _objectSpread(_objectSpread({}, offsetV), offsetH);
+  var brushBottom = offset.bottom;
+  offset.bottom += brushHeight;
+  offset = (0, _ChartUtils.appendOffsetOfLegend)(offset, legendSettings, legendSize);
+  var offsetWidth = chartWidth - offset.left - offset.right;
+  var offsetHeight = chartHeight - offset.top - offset.bottom;
+  return _objectSpread(_objectSpread({
+    brushBottom
+  }, offset), {}, {
+    // never return negative values for height and width
+    width: Math.max(offsetWidth, 0),
+    height: Math.max(offsetHeight, 0)
+  });
+});
+var selectChartViewBox = exports.selectChartViewBox = (0, _reselect.createSelector)(selectChartOffsetInternal, offset => ({
+  x: offset.left,
+  y: offset.top,
+  width: offset.width,
+  height: offset.height
+}));
+var selectAxisViewBox = exports.selectAxisViewBox = (0, _reselect.createSelector)(_containerSelectors.selectChartWidth, _containerSelectors.selectChartHeight, (width, height) => ({
+  x: 0,
+  y: 0,
+  width,
+  height
+}));
Index: node_modules/recharts/lib/state/selectors/selectPlotArea.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectPlotArea.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectPlotArea.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectPlotArea = void 0;
+var _reselect = require("reselect");
+var _selectChartOffset = require("./selectChartOffset");
+var _containerSelectors = require("./containerSelectors");
+var selectPlotArea = exports.selectPlotArea = (0, _reselect.createSelector)([_selectChartOffset.selectChartOffset, _containerSelectors.selectChartWidth, _containerSelectors.selectChartHeight], (offset, chartWidth, chartHeight) => {
+  if (!offset || chartWidth == null || chartHeight == null) {
+    return undefined;
+  }
+  return {
+    x: offset.left,
+    y: offset.top,
+    width: Math.max(0, chartWidth - offset.left - offset.right),
+    height: Math.max(0, chartHeight - offset.top - offset.bottom)
+  };
+});
Index: node_modules/recharts/lib/state/selectors/selectTooltipAxis.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectTooltipAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectTooltipAxis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectTooltipAxis = void 0;
+var _axisSelectors = require("./axisSelectors");
+var _selectTooltipAxisType = require("./selectTooltipAxisType");
+var _selectTooltipAxisId = require("./selectTooltipAxisId");
+var selectTooltipAxis = state => {
+  var axisType = (0, _selectTooltipAxisType.selectTooltipAxisType)(state);
+  var axisId = (0, _selectTooltipAxisId.selectTooltipAxisId)(state);
+  return (0, _axisSelectors.selectAxisSettings)(state, axisType, axisId);
+};
+exports.selectTooltipAxis = selectTooltipAxis;
Index: node_modules/recharts/lib/state/selectors/selectTooltipAxisId.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectTooltipAxisId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectTooltipAxisId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectTooltipAxisId = void 0;
+var selectTooltipAxisId = state => state.tooltip.settings.axisId;
+exports.selectTooltipAxisId = selectTooltipAxisId;
Index: node_modules/recharts/lib/state/selectors/selectTooltipAxisType.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectTooltipAxisType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectTooltipAxisType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectTooltipAxisType = void 0;
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var selectTooltipAxisType = state => {
+  var layout = (0, _chartLayoutContext.selectChartLayout)(state);
+  if (layout === 'horizontal') {
+    return 'xAxis';
+  }
+  if (layout === 'vertical') {
+    return 'yAxis';
+  }
+  if (layout === 'centric') {
+    return 'angleAxis';
+  }
+  return 'radiusAxis';
+};
+exports.selectTooltipAxisType = selectTooltipAxisType;
Index: node_modules/recharts/lib/state/selectors/selectTooltipEventType.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectTooltipEventType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectTooltipEventType.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.combineTooltipEventType = combineTooltipEventType;
+exports.selectDefaultTooltipEventType = void 0;
+exports.selectTooltipEventType = selectTooltipEventType;
+exports.selectValidateTooltipEventTypes = void 0;
+exports.useTooltipEventType = useTooltipEventType;
+var _hooks = require("../hooks");
+var selectDefaultTooltipEventType = state => state.options.defaultTooltipEventType;
+exports.selectDefaultTooltipEventType = selectDefaultTooltipEventType;
+var selectValidateTooltipEventTypes = state => state.options.validateTooltipEventTypes;
+exports.selectValidateTooltipEventTypes = selectValidateTooltipEventTypes;
+function combineTooltipEventType(shared, defaultTooltipEventType, validateTooltipEventTypes) {
+  if (shared == null) {
+    return defaultTooltipEventType;
+  }
+  var eventType = shared ? 'axis' : 'item';
+  if (validateTooltipEventTypes == null) {
+    return defaultTooltipEventType;
+  }
+  return validateTooltipEventTypes.includes(eventType) ? eventType : defaultTooltipEventType;
+}
+function selectTooltipEventType(state, shared) {
+  var defaultTooltipEventType = selectDefaultTooltipEventType(state);
+  var validateTooltipEventTypes = selectValidateTooltipEventTypes(state);
+  return combineTooltipEventType(shared, defaultTooltipEventType, validateTooltipEventTypes);
+}
+function useTooltipEventType(shared) {
+  return (0, _hooks.useAppSelector)(state => selectTooltipEventType(state, shared));
+}
Index: node_modules/recharts/lib/state/selectors/selectTooltipPayloadSearcher.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectTooltipPayloadSearcher.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectTooltipPayloadSearcher.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectTooltipPayloadSearcher = void 0;
+var selectTooltipPayloadSearcher = state => state.options.tooltipPayloadSearcher;
+exports.selectTooltipPayloadSearcher = selectTooltipPayloadSearcher;
Index: node_modules/recharts/lib/state/selectors/selectTooltipSettings.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectTooltipSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectTooltipSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectTooltipSettings = void 0;
+var selectTooltipSettings = state => state.tooltip.settings;
+exports.selectTooltipSettings = selectTooltipSettings;
Index: node_modules/recharts/lib/state/selectors/selectTooltipState.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectTooltipState.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectTooltipState.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectTooltipState = void 0;
+var selectTooltipState = state => state.tooltip;
+exports.selectTooltipState = selectTooltipState;
Index: node_modules/recharts/lib/state/selectors/selectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/selectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/selectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,84 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useChartName = exports.selectTooltipPayloadConfigurations = exports.selectTooltipPayload = exports.selectTooltipInteractionState = exports.selectTooltipDataKey = exports.selectOrderedTooltipTicks = exports.selectIsTooltipActive = exports.selectCoordinateForDefaultIndex = exports.selectActiveLabel = exports.selectActiveIndex = exports.selectActiveCoordinate = exports.combineActiveProps = void 0;
+var _reselect = require("reselect");
+var _sortBy = _interopRequireDefault(require("es-toolkit/compat/sortBy"));
+var _hooks = require("../hooks");
+var _ChartUtils = require("../../util/ChartUtils");
+var _dataSelectors = require("./dataSelectors");
+var _tooltipSelectors = require("./tooltipSelectors");
+var _rootPropsSelectors = require("./rootPropsSelectors");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var _containerSelectors = require("./containerSelectors");
+var _combineActiveLabel = require("./combiners/combineActiveLabel");
+var _combineTooltipInteractionState = require("./combiners/combineTooltipInteractionState");
+var _combineActiveTooltipIndex = require("./combiners/combineActiveTooltipIndex");
+var _combineCoordinateForDefaultIndex = require("./combiners/combineCoordinateForDefaultIndex");
+var _combineTooltipPayloadConfigurations = require("./combiners/combineTooltipPayloadConfigurations");
+var _selectTooltipPayloadSearcher = require("./selectTooltipPayloadSearcher");
+var _selectTooltipState = require("./selectTooltipState");
+var _combineTooltipPayload = require("./combiners/combineTooltipPayload");
+var _selectTooltipAxis = require("./selectTooltipAxis");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var useChartName = () => {
+  return (0, _hooks.useAppSelector)(_rootPropsSelectors.selectChartName);
+};
+exports.useChartName = useChartName;
+var pickTooltipEventType = (_state, tooltipEventType) => tooltipEventType;
+var pickTrigger = (_state, _tooltipEventType, trigger) => trigger;
+var pickDefaultIndex = (_state, _tooltipEventType, _trigger, defaultIndex) => defaultIndex;
+var selectOrderedTooltipTicks = exports.selectOrderedTooltipTicks = (0, _reselect.createSelector)(_tooltipSelectors.selectTooltipAxisTicks, ticks => (0, _sortBy.default)(ticks, o => o.coordinate));
+var selectTooltipInteractionState = exports.selectTooltipInteractionState = (0, _reselect.createSelector)([_selectTooltipState.selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex], _combineTooltipInteractionState.combineTooltipInteractionState);
+var selectActiveIndex = exports.selectActiveIndex = (0, _reselect.createSelector)([selectTooltipInteractionState, _tooltipSelectors.selectTooltipDisplayedData], _combineActiveTooltipIndex.combineActiveTooltipIndex);
+var selectTooltipDataKey = (state, tooltipEventType, trigger) => {
+  if (tooltipEventType == null) {
+    return undefined;
+  }
+  var tooltipState = (0, _selectTooltipState.selectTooltipState)(state);
+  if (tooltipEventType === 'axis') {
+    if (trigger === 'hover') {
+      return tooltipState.axisInteraction.hover.dataKey;
+    }
+    return tooltipState.axisInteraction.click.dataKey;
+  }
+  if (trigger === 'hover') {
+    return tooltipState.itemInteraction.hover.dataKey;
+  }
+  return tooltipState.itemInteraction.click.dataKey;
+};
+exports.selectTooltipDataKey = selectTooltipDataKey;
+var selectTooltipPayloadConfigurations = exports.selectTooltipPayloadConfigurations = (0, _reselect.createSelector)([_selectTooltipState.selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex], _combineTooltipPayloadConfigurations.combineTooltipPayloadConfigurations);
+var selectCoordinateForDefaultIndex = exports.selectCoordinateForDefaultIndex = (0, _reselect.createSelector)([_containerSelectors.selectChartWidth, _containerSelectors.selectChartHeight, _chartLayoutContext.selectChartLayout, _selectChartOffsetInternal.selectChartOffsetInternal, _tooltipSelectors.selectTooltipAxisTicks, pickDefaultIndex, selectTooltipPayloadConfigurations, _selectTooltipPayloadSearcher.selectTooltipPayloadSearcher], _combineCoordinateForDefaultIndex.combineCoordinateForDefaultIndex);
+var selectActiveCoordinate = exports.selectActiveCoordinate = (0, _reselect.createSelector)([selectTooltipInteractionState, selectCoordinateForDefaultIndex], (tooltipInteractionState, defaultIndexCoordinate) => {
+  var _tooltipInteractionSt;
+  return (_tooltipInteractionSt = tooltipInteractionState.coordinate) !== null && _tooltipInteractionSt !== void 0 ? _tooltipInteractionSt : defaultIndexCoordinate;
+});
+var selectActiveLabel = exports.selectActiveLabel = (0, _reselect.createSelector)(_tooltipSelectors.selectTooltipAxisTicks, selectActiveIndex, _combineActiveLabel.combineActiveLabel);
+var selectTooltipPayload = exports.selectTooltipPayload = (0, _reselect.createSelector)([selectTooltipPayloadConfigurations, selectActiveIndex, _dataSelectors.selectChartDataWithIndexes, _selectTooltipAxis.selectTooltipAxis, selectActiveLabel, _selectTooltipPayloadSearcher.selectTooltipPayloadSearcher, pickTooltipEventType], _combineTooltipPayload.combineTooltipPayload);
+var selectIsTooltipActive = exports.selectIsTooltipActive = (0, _reselect.createSelector)([selectTooltipInteractionState], tooltipInteractionState => {
+  return {
+    isActive: tooltipInteractionState.active,
+    activeIndex: tooltipInteractionState.index
+  };
+});
+var combineActiveProps = (chartEvent, layout, polarViewBox, tooltipAxisType, tooltipAxisRange, tooltipTicks, orderedTooltipTicks, offset) => {
+  if (!chartEvent || !layout || !tooltipAxisType || !tooltipAxisRange || !tooltipTicks) {
+    return undefined;
+  }
+  var rangeObj = (0, _ChartUtils.inRange)(chartEvent.chartX, chartEvent.chartY, layout, polarViewBox, offset);
+  if (!rangeObj) {
+    return undefined;
+  }
+  var pos = (0, _ChartUtils.calculateTooltipPos)(rangeObj, layout);
+  var activeIndex = (0, _ChartUtils.calculateActiveTickIndex)(pos, orderedTooltipTicks, tooltipTicks, tooltipAxisType, tooltipAxisRange);
+  var activeCoordinate = (0, _ChartUtils.getActiveCoordinate)(layout, tooltipTicks, activeIndex, rangeObj);
+  return {
+    activeIndex: String(activeIndex),
+    activeCoordinate
+  };
+};
+exports.combineActiveProps = combineActiveProps;
Index: node_modules/recharts/lib/state/selectors/tooltipSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/tooltipSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/tooltipSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,137 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectTooltipGraphicalItemsData = exports.selectTooltipDisplayedData = exports.selectTooltipCategoricalDomain = exports.selectTooltipAxisTicks = exports.selectTooltipAxisScale = exports.selectTooltipAxisRealScaleType = exports.selectTooltipAxisRangeWithReverse = exports.selectTooltipAxisDomainIncludingNiceTicks = exports.selectTooltipAxisDomain = exports.selectIsTooltipActive = exports.selectAllUnfilteredGraphicalItems = exports.selectAllGraphicalItemsSettings = exports.selectActiveTooltipPayload = exports.selectActiveTooltipIndex = exports.selectActiveTooltipDataPoints = exports.selectActiveTooltipDataKey = exports.selectActiveTooltipCoordinate = exports.selectActiveLabel = void 0;
+var _reselect = require("reselect");
+var _axisSelectors = require("./axisSelectors");
+var _chartLayoutContext = require("../../context/chartLayoutContext");
+var _ChartUtils = require("../../util/ChartUtils");
+var _dataSelectors = require("./dataSelectors");
+var _rootPropsSelectors = require("./rootPropsSelectors");
+var _DataUtils = require("../../util/DataUtils");
+var _combineAxisRangeWithReverse = require("./combiners/combineAxisRangeWithReverse");
+var _selectTooltipEventType = require("./selectTooltipEventType");
+var _combineActiveLabel = require("./combiners/combineActiveLabel");
+var _selectTooltipSettings = require("./selectTooltipSettings");
+var _combineTooltipInteractionState = require("./combiners/combineTooltipInteractionState");
+var _combineActiveTooltipIndex = require("./combiners/combineActiveTooltipIndex");
+var _combineCoordinateForDefaultIndex = require("./combiners/combineCoordinateForDefaultIndex");
+var _containerSelectors = require("./containerSelectors");
+var _selectChartOffsetInternal = require("./selectChartOffsetInternal");
+var _combineTooltipPayloadConfigurations = require("./combiners/combineTooltipPayloadConfigurations");
+var _selectTooltipPayloadSearcher = require("./selectTooltipPayloadSearcher");
+var _selectTooltipState = require("./selectTooltipState");
+var _combineTooltipPayload = require("./combiners/combineTooltipPayload");
+var _selectTooltipAxisId = require("./selectTooltipAxisId");
+var _selectTooltipAxisType = require("./selectTooltipAxisType");
+var _selectTooltipAxis = require("./selectTooltipAxis");
+var _combineDisplayedStackedData = require("./combiners/combineDisplayedStackedData");
+var _StackedGraphicalItem = require("../types/StackedGraphicalItem");
+var selectTooltipAxisRealScaleType = exports.selectTooltipAxisRealScaleType = (0, _reselect.createSelector)([_selectTooltipAxis.selectTooltipAxis, _chartLayoutContext.selectChartLayout, _axisSelectors.selectHasBar, _rootPropsSelectors.selectChartName, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineRealScaleType);
+var selectAllUnfilteredGraphicalItems = exports.selectAllUnfilteredGraphicalItems = (0, _reselect.createSelector)([state => state.graphicalItems.cartesianItems, state => state.graphicalItems.polarItems], (cartesianItems, polarItems) => [...cartesianItems, ...polarItems]);
+var selectTooltipAxisPredicate = (0, _reselect.createSelector)([_selectTooltipAxisType.selectTooltipAxisType, _selectTooltipAxisId.selectTooltipAxisId], _axisSelectors.itemAxisPredicate);
+var selectAllGraphicalItemsSettings = exports.selectAllGraphicalItemsSettings = (0, _reselect.createSelector)([selectAllUnfilteredGraphicalItems, _selectTooltipAxis.selectTooltipAxis, selectTooltipAxisPredicate], _axisSelectors.combineGraphicalItemsSettings);
+var selectAllStackedGraphicalItemsSettings = (0, _reselect.createSelector)([selectAllGraphicalItemsSettings], graphicalItems => graphicalItems.filter(_StackedGraphicalItem.isStacked));
+var selectTooltipGraphicalItemsData = exports.selectTooltipGraphicalItemsData = (0, _reselect.createSelector)([selectAllGraphicalItemsSettings], _axisSelectors.combineGraphicalItemsData);
+
+/**
+ * Data for tooltip always use the data with indexes set by a Brush,
+ * and never accept the isPanorama flag:
+ * because Tooltip never displays inside the panorama anyway
+ * so we don't need to worry what would happen there.
+ */
+var selectTooltipDisplayedData = exports.selectTooltipDisplayedData = (0, _reselect.createSelector)([selectTooltipGraphicalItemsData, _dataSelectors.selectChartDataWithIndexes], _axisSelectors.combineDisplayedData);
+var selectTooltipStackedData = (0, _reselect.createSelector)([selectAllStackedGraphicalItemsSettings, _dataSelectors.selectChartDataWithIndexes, _selectTooltipAxis.selectTooltipAxis], _combineDisplayedStackedData.combineDisplayedStackedData);
+var selectAllTooltipAppliedValues = (0, _reselect.createSelector)([selectTooltipDisplayedData, _selectTooltipAxis.selectTooltipAxis, selectAllGraphicalItemsSettings], _axisSelectors.combineAppliedValues);
+var selectTooltipAxisDomainDefinition = (0, _reselect.createSelector)([_selectTooltipAxis.selectTooltipAxis], _axisSelectors.getDomainDefinition);
+var selectAllStackedGraphicalItems = (0, _reselect.createSelector)([selectAllGraphicalItemsSettings], graphicalItems => graphicalItems.filter(_StackedGraphicalItem.isStacked));
+var selectTooltipStackGroups = (0, _reselect.createSelector)([selectTooltipStackedData, selectAllStackedGraphicalItems, _rootPropsSelectors.selectStackOffsetType], _axisSelectors.combineStackGroups);
+var selectTooltipDomainOfStackGroups = (0, _reselect.createSelector)([selectTooltipStackGroups, _dataSelectors.selectChartDataWithIndexes, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineDomainOfStackGroups);
+var selectTooltipItemsSettingsExceptStacked = (0, _reselect.createSelector)([selectAllGraphicalItemsSettings], _axisSelectors.filterGraphicalNotStackedItems);
+var selectTooltipAllAppliedNumericalValuesIncludingErrorValues = (0, _reselect.createSelector)([selectTooltipDisplayedData, _selectTooltipAxis.selectTooltipAxis, selectTooltipItemsSettingsExceptStacked, _axisSelectors.selectAllErrorBarSettings, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineAppliedNumericalValuesIncludingErrorValues);
+var selectReferenceDotsByTooltipAxis = (0, _reselect.createSelector)([_axisSelectors.selectReferenceDots, _selectTooltipAxisType.selectTooltipAxisType, _selectTooltipAxisId.selectTooltipAxisId], _axisSelectors.filterReferenceElements);
+var selectTooltipReferenceDotsDomain = (0, _reselect.createSelector)([selectReferenceDotsByTooltipAxis, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineDotsDomain);
+var selectReferenceAreasByTooltipAxis = (0, _reselect.createSelector)([_axisSelectors.selectReferenceAreas, _selectTooltipAxisType.selectTooltipAxisType, _selectTooltipAxisId.selectTooltipAxisId], _axisSelectors.filterReferenceElements);
+var selectTooltipReferenceAreasDomain = (0, _reselect.createSelector)([selectReferenceAreasByTooltipAxis, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineAreasDomain);
+var selectReferenceLinesByTooltipAxis = (0, _reselect.createSelector)([_axisSelectors.selectReferenceLines, _selectTooltipAxisType.selectTooltipAxisType, _selectTooltipAxisId.selectTooltipAxisId], _axisSelectors.filterReferenceElements);
+var selectTooltipReferenceLinesDomain = (0, _reselect.createSelector)([selectReferenceLinesByTooltipAxis, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineLinesDomain);
+var selectTooltipReferenceElementsDomain = (0, _reselect.createSelector)([selectTooltipReferenceDotsDomain, selectTooltipReferenceLinesDomain, selectTooltipReferenceAreasDomain], _axisSelectors.mergeDomains);
+var selectTooltipNumericalDomain = (0, _reselect.createSelector)([_selectTooltipAxis.selectTooltipAxis, selectTooltipAxisDomainDefinition, selectTooltipDomainOfStackGroups, selectTooltipAllAppliedNumericalValuesIncludingErrorValues, selectTooltipReferenceElementsDomain, _chartLayoutContext.selectChartLayout, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineNumericalDomain);
+var selectTooltipAxisDomain = exports.selectTooltipAxisDomain = (0, _reselect.createSelector)([_selectTooltipAxis.selectTooltipAxis, _chartLayoutContext.selectChartLayout, selectTooltipDisplayedData, selectAllTooltipAppliedValues, _rootPropsSelectors.selectStackOffsetType, _selectTooltipAxisType.selectTooltipAxisType, selectTooltipNumericalDomain], _axisSelectors.combineAxisDomain);
+var selectTooltipNiceTicks = (0, _reselect.createSelector)([selectTooltipAxisDomain, _selectTooltipAxis.selectTooltipAxis, selectTooltipAxisRealScaleType], _axisSelectors.combineNiceTicks);
+var selectTooltipAxisDomainIncludingNiceTicks = exports.selectTooltipAxisDomainIncludingNiceTicks = (0, _reselect.createSelector)([_selectTooltipAxis.selectTooltipAxis, selectTooltipAxisDomain, selectTooltipNiceTicks, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineAxisDomainWithNiceTicks);
+var selectTooltipAxisRange = state => {
+  var axisType = (0, _selectTooltipAxisType.selectTooltipAxisType)(state);
+  var axisId = (0, _selectTooltipAxisId.selectTooltipAxisId)(state);
+  var isPanorama = false; // Tooltip never displays in panorama so this is safe to assume
+  return (0, _axisSelectors.selectAxisRange)(state, axisType, axisId, isPanorama);
+};
+var selectTooltipAxisRangeWithReverse = exports.selectTooltipAxisRangeWithReverse = (0, _reselect.createSelector)([_selectTooltipAxis.selectTooltipAxis, selectTooltipAxisRange], _combineAxisRangeWithReverse.combineAxisRangeWithReverse);
+var selectTooltipAxisScale = exports.selectTooltipAxisScale = (0, _reselect.createSelector)([_selectTooltipAxis.selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisDomainIncludingNiceTicks, selectTooltipAxisRangeWithReverse], _axisSelectors.combineScaleFunction);
+var selectTooltipDuplicateDomain = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectAllTooltipAppliedValues, _selectTooltipAxis.selectTooltipAxis, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineDuplicateDomain);
+var selectTooltipCategoricalDomain = exports.selectTooltipCategoricalDomain = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, selectAllTooltipAppliedValues, _selectTooltipAxis.selectTooltipAxis, _selectTooltipAxisType.selectTooltipAxisType], _axisSelectors.combineCategoricalDomain);
+var combineTicksOfTooltipAxis = (layout, axis, realScaleType, scale, range, duplicateDomain, categoricalDomain, axisType) => {
+  if (!axis) {
+    return undefined;
+  }
+  var {
+    type
+  } = axis;
+  var isCategorical = (0, _ChartUtils.isCategoricalAxis)(layout, axisType);
+  if (!scale) {
+    return undefined;
+  }
+  var offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;
+  var offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
+  offset = axisType === 'angleAxis' && range != null && (range === null || range === void 0 ? void 0 : range.length) >= 2 ? (0, _DataUtils.mathSign)(range[0] - range[1]) * 2 * offset : offset;
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      index,
+      offset
+    }));
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => ({
+    coordinate: scale(entry) + offset,
+    value: duplicateDomain ? duplicateDomain[entry] : entry,
+    index,
+    offset
+  }));
+};
+var selectTooltipAxisTicks = exports.selectTooltipAxisTicks = (0, _reselect.createSelector)([_chartLayoutContext.selectChartLayout, _selectTooltipAxis.selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisScale, selectTooltipAxisRange, selectTooltipDuplicateDomain, selectTooltipCategoricalDomain, _selectTooltipAxisType.selectTooltipAxisType], combineTicksOfTooltipAxis);
+var selectTooltipEventType = (0, _reselect.createSelector)([_selectTooltipEventType.selectDefaultTooltipEventType, _selectTooltipEventType.selectValidateTooltipEventTypes, _selectTooltipSettings.selectTooltipSettings], (defaultTooltipEventType, validateTooltipEventType, settings) => (0, _selectTooltipEventType.combineTooltipEventType)(settings.shared, defaultTooltipEventType, validateTooltipEventType));
+var selectTooltipTrigger = state => state.tooltip.settings.trigger;
+var selectDefaultIndex = state => state.tooltip.settings.defaultIndex;
+var selectTooltipInteractionState = (0, _reselect.createSelector)([_selectTooltipState.selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], _combineTooltipInteractionState.combineTooltipInteractionState);
+var selectActiveTooltipIndex = exports.selectActiveTooltipIndex = (0, _reselect.createSelector)([selectTooltipInteractionState, selectTooltipDisplayedData], _combineActiveTooltipIndex.combineActiveTooltipIndex);
+var selectActiveLabel = exports.selectActiveLabel = (0, _reselect.createSelector)([selectTooltipAxisTicks, selectActiveTooltipIndex], _combineActiveLabel.combineActiveLabel);
+var selectActiveTooltipDataKey = exports.selectActiveTooltipDataKey = (0, _reselect.createSelector)([selectTooltipInteractionState], tooltipInteraction => {
+  if (!tooltipInteraction) {
+    return undefined;
+  }
+  return tooltipInteraction.dataKey;
+});
+var selectTooltipPayloadConfigurations = (0, _reselect.createSelector)([_selectTooltipState.selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], _combineTooltipPayloadConfigurations.combineTooltipPayloadConfigurations);
+var selectTooltipCoordinateForDefaultIndex = (0, _reselect.createSelector)([_containerSelectors.selectChartWidth, _containerSelectors.selectChartHeight, _chartLayoutContext.selectChartLayout, _selectChartOffsetInternal.selectChartOffsetInternal, selectTooltipAxisTicks, selectDefaultIndex, selectTooltipPayloadConfigurations, _selectTooltipPayloadSearcher.selectTooltipPayloadSearcher], _combineCoordinateForDefaultIndex.combineCoordinateForDefaultIndex);
+var selectActiveTooltipCoordinate = exports.selectActiveTooltipCoordinate = (0, _reselect.createSelector)([selectTooltipInteractionState, selectTooltipCoordinateForDefaultIndex], (tooltipInteractionState, defaultIndexCoordinate) => {
+  if (tooltipInteractionState !== null && tooltipInteractionState !== void 0 && tooltipInteractionState.coordinate) {
+    return tooltipInteractionState.coordinate;
+  }
+  return defaultIndexCoordinate;
+});
+var selectIsTooltipActive = exports.selectIsTooltipActive = (0, _reselect.createSelector)([selectTooltipInteractionState], tooltipInteractionState => tooltipInteractionState.active);
+var selectActiveTooltipPayload = exports.selectActiveTooltipPayload = (0, _reselect.createSelector)([selectTooltipPayloadConfigurations, selectActiveTooltipIndex, _dataSelectors.selectChartDataWithIndexes, _selectTooltipAxis.selectTooltipAxis, selectActiveLabel, _selectTooltipPayloadSearcher.selectTooltipPayloadSearcher, selectTooltipEventType], _combineTooltipPayload.combineTooltipPayload);
+var selectActiveTooltipDataPoints = exports.selectActiveTooltipDataPoints = (0, _reselect.createSelector)([selectActiveTooltipPayload], payload => {
+  if (payload == null) {
+    return undefined;
+  }
+  var dataPoints = payload.map(p => p.payload).filter(p => p != null);
+  return Array.from(new Set(dataPoints));
+});
Index: node_modules/recharts/lib/state/selectors/touchSelectors.js
===================================================================
--- node_modules/recharts/lib/state/selectors/touchSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/selectors/touchSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectTooltipCoordinate = void 0;
+var _reselect = require("reselect");
+var _selectTooltipPayloadSearcher = require("./selectTooltipPayloadSearcher");
+var _selectTooltipState = require("./selectTooltipState");
+var selectAllTooltipPayloadConfiguration = (0, _reselect.createSelector)([_selectTooltipState.selectTooltipState], tooltipState => tooltipState.tooltipItemPayloads);
+var selectTooltipCoordinate = exports.selectTooltipCoordinate = (0, _reselect.createSelector)([selectAllTooltipPayloadConfiguration, _selectTooltipPayloadSearcher.selectTooltipPayloadSearcher, (_state, tooltipIndex, _dataKey) => tooltipIndex, (_state, _tooltipIndex, dataKey) => dataKey], (allTooltipConfigurations, tooltipPayloadSearcher, tooltipIndex, dataKey) => {
+  var mostRelevantTooltipConfiguration = allTooltipConfigurations.find(tooltipConfiguration => {
+    return tooltipConfiguration.settings.dataKey === dataKey;
+  });
+  if (mostRelevantTooltipConfiguration == null) {
+    return undefined;
+  }
+  var {
+    positions
+  } = mostRelevantTooltipConfiguration;
+  if (positions == null) {
+    return undefined;
+  }
+  // @ts-expect-error tooltipPayloadSearcher is not typed well
+  var maybePosition = tooltipPayloadSearcher(positions, tooltipIndex);
+  return maybePosition;
+});
Index: node_modules/recharts/lib/state/store.js
===================================================================
--- node_modules/recharts/lib/state/store.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/store.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.createRechartsStore = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _optionsSlice = require("./optionsSlice");
+var _tooltipSlice = require("./tooltipSlice");
+var _chartDataSlice = require("./chartDataSlice");
+var _layoutSlice = require("./layoutSlice");
+var _mouseEventsMiddleware = require("./mouseEventsMiddleware");
+var _reduxDevtoolsJsonStringifyReplacer = require("./reduxDevtoolsJsonStringifyReplacer");
+var _cartesianAxisSlice = require("./cartesianAxisSlice");
+var _graphicalItemsSlice = require("./graphicalItemsSlice");
+var _referenceElementsSlice = require("./referenceElementsSlice");
+var _brushSlice = require("./brushSlice");
+var _legendSlice = require("./legendSlice");
+var _rootPropsSlice = require("./rootPropsSlice");
+var _polarAxisSlice = require("./polarAxisSlice");
+var _polarOptionsSlice = require("./polarOptionsSlice");
+var _keyboardEventsMiddleware = require("./keyboardEventsMiddleware");
+var _externalEventsMiddleware = require("./externalEventsMiddleware");
+var _touchEventsMiddleware = require("./touchEventsMiddleware");
+var _errorBarSlice = require("./errorBarSlice");
+var rootReducer = (0, _toolkit.combineReducers)({
+  brush: _brushSlice.brushReducer,
+  cartesianAxis: _cartesianAxisSlice.cartesianAxisReducer,
+  chartData: _chartDataSlice.chartDataReducer,
+  errorBars: _errorBarSlice.errorBarReducer,
+  graphicalItems: _graphicalItemsSlice.graphicalItemsReducer,
+  layout: _layoutSlice.chartLayoutReducer,
+  legend: _legendSlice.legendReducer,
+  options: _optionsSlice.optionsReducer,
+  polarAxis: _polarAxisSlice.polarAxisReducer,
+  polarOptions: _polarOptionsSlice.polarOptionsReducer,
+  referenceElements: _referenceElementsSlice.referenceElementsReducer,
+  rootProps: _rootPropsSlice.rootPropsReducer,
+  tooltip: _tooltipSlice.tooltipReducer
+});
+var createRechartsStore = exports.createRechartsStore = function createRechartsStore(preloadedState) {
+  var chartName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Chart';
+  return (0, _toolkit.configureStore)({
+    reducer: rootReducer,
+    // redux-toolkit v1 types are unhappy with the preloadedState type. Remove the `as any` when bumping to v2
+    preloadedState: preloadedState,
+    // @ts-expect-error redux-toolkit v1 types are unhappy with the middleware array. Remove this comment when bumping to v2
+    middleware: getDefaultMiddleware => getDefaultMiddleware({
+      serializableCheck: false
+    }).concat([_mouseEventsMiddleware.mouseClickMiddleware.middleware, _mouseEventsMiddleware.mouseMoveMiddleware.middleware, _keyboardEventsMiddleware.keyboardEventsMiddleware.middleware, _externalEventsMiddleware.externalEventsMiddleware.middleware, _touchEventsMiddleware.touchEventMiddleware.middleware]),
+    devTools: {
+      serialize: {
+        replacer: _reduxDevtoolsJsonStringifyReplacer.reduxDevtoolsJsonStringifyReplacer
+      },
+      name: "recharts-".concat(chartName)
+    }
+  });
+};
Index: node_modules/recharts/lib/state/tooltipSlice.js
===================================================================
--- node_modules/recharts/lib/state/tooltipSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/tooltipSlice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,200 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.tooltipReducer = exports.setTooltipSettingsState = exports.setSyncInteraction = exports.setMouseOverAxisIndex = exports.setMouseClickAxisIndex = exports.setKeyboardInteraction = exports.setActiveMouseOverItemIndex = exports.setActiveClickItemIndex = exports.removeTooltipEntrySettings = exports.noInteraction = exports.mouseLeaveItem = exports.mouseLeaveChart = exports.initialState = exports.addTooltipEntrySettings = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _immer = require("immer");
+/**
+ * One Tooltip can display multiple TooltipPayloadEntries at a time.
+ */
+
+/**
+ * So what happens is that the tooltip payload is decided based on the available data, and the dataKey.
+ * The dataKey can either be defined on the graphical element (like Line, or Bar)
+ * or on the tooltip itself.
+ *
+ * The data can be defined in the chart element, or in the graphical item.
+ *
+ * So this type is all the settings, other than the data + dataKey complications.
+ */
+
+/**
+ * This is what Tooltip renders.
+ */
+
+/**
+ * null means no active index
+ * string means: whichever index from the chart data it is.
+ * Different charts have different requirements on data shapes,
+ * and are also responsible for providing a function that will accept this index
+ * and return data.
+ */
+
+/**
+ * Different items have different data shapes so the state has no opinion on what the data shape should be;
+ * the only requirement is that the chart also provides a searcher function
+ * that accepts the data, and a key, and returns whatever the payload in Tooltip should be.
+ */
+
+/**
+ * So this informs the "tooltip event type". Tooltip event type can be either "axis" or "item"
+ * and it is used for two things:
+ * 1. Sets the active area
+ * 2. Sets the background and cursor highlights
+ *
+ * Some charts only allow to have one type of tooltip event type, some allow both.
+ * Those charts that allow both will have one default, and the "shared" prop will be used to switch between them.
+ * Undefined means "use the chart default".
+ *
+ * Charts that only allow one tooltip event type, will ignore the shared prop.
+ */
+
+/**
+ * A generic state for user interaction with the chart.
+ * User interaction can come through multiple channels: mouse events, keyboard events, or hardcoded in props, or synchronised from other charts.
+ *
+ * Each of the interaction states is represented as TooltipInteractionState,
+ * and then the selectors and Tooltip will decide which of the interaction states to use.
+ */
+
+var noInteraction = exports.noInteraction = {
+  active: false,
+  index: null,
+  dataKey: undefined,
+  coordinate: undefined
+};
+
+/**
+ * The tooltip interaction state stores:
+ *
+ * - Which graphical item is user interacting with at the moment,
+ * - which axis (or, which part of chart background) is user interacting with at the moment
+ * - The data that individual graphical items wish to be displayed in case the tooltip gets activated
+ */
+
+var initialState = exports.initialState = {
+  itemInteraction: {
+    click: noInteraction,
+    hover: noInteraction
+  },
+  axisInteraction: {
+    click: noInteraction,
+    hover: noInteraction
+  },
+  keyboardInteraction: noInteraction,
+  syncInteraction: {
+    active: false,
+    index: null,
+    dataKey: undefined,
+    label: undefined,
+    coordinate: undefined
+  },
+  tooltipItemPayloads: [],
+  settings: {
+    shared: undefined,
+    trigger: 'hover',
+    axisId: 0,
+    active: false,
+    defaultIndex: undefined
+  }
+};
+var tooltipSlice = (0, _toolkit.createSlice)({
+  name: 'tooltip',
+  initialState,
+  reducers: {
+    addTooltipEntrySettings(state, action) {
+      state.tooltipItemPayloads.push((0, _immer.castDraft)(action.payload));
+    },
+    removeTooltipEntrySettings(state, action) {
+      var index = (0, _toolkit.current)(state).tooltipItemPayloads.indexOf((0, _immer.castDraft)(action.payload));
+      if (index > -1) {
+        state.tooltipItemPayloads.splice(index, 1);
+      }
+    },
+    setTooltipSettingsState(state, action) {
+      state.settings = action.payload;
+    },
+    setActiveMouseOverItemIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.keyboardInteraction.active = false;
+      state.itemInteraction.hover.active = true;
+      state.itemInteraction.hover.index = action.payload.activeIndex;
+      state.itemInteraction.hover.dataKey = action.payload.activeDataKey;
+      state.itemInteraction.hover.coordinate = action.payload.activeCoordinate;
+    },
+    mouseLeaveChart(state) {
+      /*
+       * Clear only the active flags. Why?
+       * 1. Keep Coordinate to preserve animation - next time the Tooltip appears, we want to render it from
+       * the last place where it was when it disappeared.
+       * 2. We want to keep all the properties anyway just in case the tooltip has `active=true` prop
+       * and continues being visible even after the mouse has left the chart.
+       */
+      state.itemInteraction.hover.active = false;
+      state.axisInteraction.hover.active = false;
+    },
+    mouseLeaveItem(state) {
+      state.itemInteraction.hover.active = false;
+    },
+    setActiveClickItemIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.itemInteraction.click.active = true;
+      state.keyboardInteraction.active = false;
+      state.itemInteraction.click.index = action.payload.activeIndex;
+      state.itemInteraction.click.dataKey = action.payload.activeDataKey;
+      state.itemInteraction.click.coordinate = action.payload.activeCoordinate;
+    },
+    setMouseOverAxisIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.axisInteraction.hover.active = true;
+      state.keyboardInteraction.active = false;
+      state.axisInteraction.hover.index = action.payload.activeIndex;
+      state.axisInteraction.hover.dataKey = action.payload.activeDataKey;
+      state.axisInteraction.hover.coordinate = action.payload.activeCoordinate;
+    },
+    setMouseClickAxisIndex(state, action) {
+      state.syncInteraction.active = false;
+      state.keyboardInteraction.active = false;
+      state.axisInteraction.click.active = true;
+      state.axisInteraction.click.index = action.payload.activeIndex;
+      state.axisInteraction.click.dataKey = action.payload.activeDataKey;
+      state.axisInteraction.click.coordinate = action.payload.activeCoordinate;
+    },
+    setSyncInteraction(state, action) {
+      state.syncInteraction = action.payload;
+    },
+    setKeyboardInteraction(state, action) {
+      state.keyboardInteraction.active = action.payload.active;
+      state.keyboardInteraction.index = action.payload.activeIndex;
+      state.keyboardInteraction.coordinate = action.payload.activeCoordinate;
+      state.keyboardInteraction.dataKey = action.payload.activeDataKey;
+    }
+  }
+});
+var {
+  addTooltipEntrySettings,
+  removeTooltipEntrySettings,
+  setTooltipSettingsState,
+  setActiveMouseOverItemIndex,
+  mouseLeaveItem,
+  mouseLeaveChart,
+  setActiveClickItemIndex,
+  setMouseOverAxisIndex,
+  setMouseClickAxisIndex,
+  setSyncInteraction,
+  setKeyboardInteraction
+} = tooltipSlice.actions;
+exports.setKeyboardInteraction = setKeyboardInteraction;
+exports.setSyncInteraction = setSyncInteraction;
+exports.setMouseClickAxisIndex = setMouseClickAxisIndex;
+exports.setMouseOverAxisIndex = setMouseOverAxisIndex;
+exports.setActiveClickItemIndex = setActiveClickItemIndex;
+exports.mouseLeaveChart = mouseLeaveChart;
+exports.mouseLeaveItem = mouseLeaveItem;
+exports.setActiveMouseOverItemIndex = setActiveMouseOverItemIndex;
+exports.setTooltipSettingsState = setTooltipSettingsState;
+exports.removeTooltipEntrySettings = removeTooltipEntrySettings;
+exports.addTooltipEntrySettings = addTooltipEntrySettings;
+var tooltipReducer = exports.tooltipReducer = tooltipSlice.reducer;
Index: node_modules/recharts/lib/state/touchEventsMiddleware.js
===================================================================
--- node_modules/recharts/lib/state/touchEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/touchEventsMiddleware.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.touchEventMiddleware = exports.touchEventAction = void 0;
+var _toolkit = require("@reduxjs/toolkit");
+var _tooltipSlice = require("./tooltipSlice");
+var _selectActivePropsFromChartPointer = require("./selectors/selectActivePropsFromChartPointer");
+var _getChartPointer = require("../util/getChartPointer");
+var _selectTooltipEventType = require("./selectors/selectTooltipEventType");
+var _Constants = require("../util/Constants");
+var _touchSelectors = require("./selectors/touchSelectors");
+var touchEventAction = exports.touchEventAction = (0, _toolkit.createAction)('touchMove');
+var touchEventMiddleware = exports.touchEventMiddleware = (0, _toolkit.createListenerMiddleware)();
+touchEventMiddleware.startListening({
+  actionCreator: touchEventAction,
+  effect: (action, listenerApi) => {
+    var touchEvent = action.payload;
+    var state = listenerApi.getState();
+    var tooltipEventType = (0, _selectTooltipEventType.selectTooltipEventType)(state, state.tooltip.settings.shared);
+    if (tooltipEventType === 'axis') {
+      var activeProps = (0, _selectActivePropsFromChartPointer.selectActivePropsFromChartPointer)(state, (0, _getChartPointer.getChartPointer)({
+        clientX: touchEvent.touches[0].clientX,
+        clientY: touchEvent.touches[0].clientY,
+        currentTarget: touchEvent.currentTarget
+      }));
+      if ((activeProps === null || activeProps === void 0 ? void 0 : activeProps.activeIndex) != null) {
+        listenerApi.dispatch((0, _tooltipSlice.setMouseOverAxisIndex)({
+          activeIndex: activeProps.activeIndex,
+          activeDataKey: undefined,
+          activeCoordinate: activeProps.activeCoordinate
+        }));
+      }
+    } else if (tooltipEventType === 'item') {
+      var _target$getAttribute;
+      var touch = touchEvent.touches[0];
+      var target = document.elementFromPoint(touch.clientX, touch.clientY);
+      if (!target || !target.getAttribute) {
+        return;
+      }
+      var itemIndex = target.getAttribute(_Constants.DATA_ITEM_INDEX_ATTRIBUTE_NAME);
+      var dataKey = (_target$getAttribute = target.getAttribute(_Constants.DATA_ITEM_DATAKEY_ATTRIBUTE_NAME)) !== null && _target$getAttribute !== void 0 ? _target$getAttribute : undefined;
+      var coordinate = (0, _touchSelectors.selectTooltipCoordinate)(listenerApi.getState(), itemIndex, dataKey);
+      listenerApi.dispatch((0, _tooltipSlice.setActiveMouseOverItemIndex)({
+        activeDataKey: dataKey,
+        activeIndex: itemIndex,
+        activeCoordinate: coordinate
+      }));
+    }
+  }
+});
Index: node_modules/recharts/lib/state/types/AreaSettings.js
===================================================================
--- node_modules/recharts/lib/state/types/AreaSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/types/AreaSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/state/types/BarSettings.js
===================================================================
--- node_modules/recharts/lib/state/types/BarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/types/BarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/state/types/LineSettings.js
===================================================================
--- node_modules/recharts/lib/state/types/LineSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/types/LineSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/state/types/PieSettings.js
===================================================================
--- node_modules/recharts/lib/state/types/PieSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/types/PieSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/state/types/RadarSettings.js
===================================================================
--- node_modules/recharts/lib/state/types/RadarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/types/RadarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/state/types/RadialBarSettings.js
===================================================================
--- node_modules/recharts/lib/state/types/RadialBarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/types/RadialBarSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/state/types/ScatterSettings.js
===================================================================
--- node_modules/recharts/lib/state/types/ScatterSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/types/ScatterSettings.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/state/types/StackedGraphicalItem.js
===================================================================
--- node_modules/recharts/lib/state/types/StackedGraphicalItem.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/state/types/StackedGraphicalItem.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.isStacked = isStacked;
+/**
+ * Some graphical items allow data stacking. The stacks are optional,
+ * so all props here are optional too.
+ */
+
+/**
+ * Some graphical items allow data stacking.
+ * This interface is used to represent the items that are stacked
+ * because the user has provided the stackId and dataKey properties.
+ */
+
+function isStacked(graphicalItem) {
+  return graphicalItem.stackId != null && graphicalItem.dataKey != null;
+}
Index: node_modules/recharts/lib/synchronisation/syncSelectors.js
===================================================================
--- node_modules/recharts/lib/synchronisation/syncSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/synchronisation/syncSelectors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.selectSynchronisedTooltipState = selectSynchronisedTooltipState;
+function selectSynchronisedTooltipState(state) {
+  return state.tooltip.syncInteraction;
+}
Index: node_modules/recharts/lib/synchronisation/types.js
===================================================================
--- node_modules/recharts/lib/synchronisation/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/synchronisation/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/synchronisation/useChartSynchronisation.js
===================================================================
--- node_modules/recharts/lib/synchronisation/useChartSynchronisation.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/synchronisation/useChartSynchronisation.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,222 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useBrushChartSynchronisation = useBrushChartSynchronisation;
+exports.useSynchronisedEventsFromOtherCharts = useSynchronisedEventsFromOtherCharts;
+exports.useTooltipChartSynchronisation = useTooltipChartSynchronisation;
+var _react = require("react");
+var _hooks = require("../state/hooks");
+var _rootPropsSelectors = require("../state/selectors/rootPropsSelectors");
+var _Events = require("../util/Events");
+var _optionsSlice = require("../state/optionsSlice");
+var _tooltipSlice = require("../state/tooltipSlice");
+var _selectors = require("../state/selectors/selectors");
+var _tooltipSelectors = require("../state/selectors/tooltipSelectors");
+var _syncSelectors = require("./syncSelectors");
+var _chartLayoutContext = require("../context/chartLayoutContext");
+var _chartDataSlice = require("../state/chartDataSlice");
+var noop = () => {};
+function useTooltipSyncEventsListener() {
+  var mySyncId = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectSyncId);
+  var myEventEmitter = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectEventEmitter);
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var syncMethod = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectSyncMethod);
+  var tooltipTicks = (0, _hooks.useAppSelector)(_tooltipSelectors.selectTooltipAxisTicks);
+  var layout = (0, _chartLayoutContext.useChartLayout)();
+  var viewBox = (0, _chartLayoutContext.useViewBox)();
+  var className = (0, _hooks.useAppSelector)(state => state.rootProps.className);
+  (0, _react.useEffect)(() => {
+    if (mySyncId == null) {
+      // This chart is not synchronised with any other chart so we don't need to listen for any events.
+      return noop;
+    }
+    var listener = (incomingSyncId, action, emitter) => {
+      if (myEventEmitter === emitter) {
+        // We don't want to dispatch actions that we sent ourselves.
+        return;
+      }
+      if (mySyncId !== incomingSyncId) {
+        // This event is not for this chart
+        return;
+      }
+      if (syncMethod === 'index') {
+        dispatch(action);
+        // This is the default behaviour, we don't need to do anything else.
+        return;
+      }
+      if (tooltipTicks == null) {
+        // for the other two sync methods, we need the ticks to be available
+        return;
+      }
+      var activeTick;
+      if (typeof syncMethod === 'function') {
+        /*
+         * This is what the data shape in 2.x CategoricalChartState used to look like.
+         * In 3.x we store things differently but let's try to keep the old shape for compatibility.
+         */
+        var syncMethodParam = {
+          activeTooltipIndex: action.payload.index == null ? undefined : Number(action.payload.index),
+          isTooltipActive: action.payload.active,
+          activeIndex: action.payload.index == null ? undefined : Number(action.payload.index),
+          activeLabel: action.payload.label,
+          activeDataKey: action.payload.dataKey,
+          activeCoordinate: action.payload.coordinate
+        };
+        // Call a callback function. If there is an application specific algorithm
+        var activeTooltipIndex = syncMethod(tooltipTicks, syncMethodParam);
+        activeTick = tooltipTicks[activeTooltipIndex];
+      } else if (syncMethod === 'value') {
+        // labels are always strings, tick.value might be a string or a number, depending on axis type
+        activeTick = tooltipTicks.find(tick => String(tick.value) === action.payload.label);
+      }
+      var {
+        coordinate
+      } = action.payload;
+      if (activeTick == null || action.payload.active === false || coordinate == null || viewBox == null) {
+        dispatch((0, _tooltipSlice.setSyncInteraction)({
+          active: false,
+          coordinate: undefined,
+          dataKey: undefined,
+          index: null,
+          label: undefined
+        }));
+        return;
+      }
+      var {
+        x,
+        y
+      } = coordinate;
+      var validateChartX = Math.min(x, viewBox.x + viewBox.width);
+      var validateChartY = Math.min(y, viewBox.y + viewBox.height);
+      var activeCoordinate = {
+        x: layout === 'horizontal' ? activeTick.coordinate : validateChartX,
+        y: layout === 'horizontal' ? validateChartY : activeTick.coordinate
+      };
+      var syncAction = (0, _tooltipSlice.setSyncInteraction)({
+        active: action.payload.active,
+        coordinate: activeCoordinate,
+        dataKey: action.payload.dataKey,
+        index: String(activeTick.index),
+        label: action.payload.label
+      });
+      dispatch(syncAction);
+    };
+    _Events.eventCenter.on(_Events.TOOLTIP_SYNC_EVENT, listener);
+    return () => {
+      _Events.eventCenter.off(_Events.TOOLTIP_SYNC_EVENT, listener);
+    };
+  }, [className, dispatch, myEventEmitter, mySyncId, syncMethod, tooltipTicks, layout, viewBox]);
+}
+function useBrushSyncEventsListener() {
+  var mySyncId = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectSyncId);
+  var myEventEmitter = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectEventEmitter);
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    if (mySyncId == null) {
+      // This chart is not synchronised with any other chart so we don't need to listen for any events.
+      return noop;
+    }
+    var listener = (incomingSyncId, action, emitter) => {
+      if (myEventEmitter === emitter) {
+        // We don't want to dispatch actions that we sent ourselves.
+        return;
+      }
+      if (mySyncId === incomingSyncId) {
+        dispatch((0, _chartDataSlice.setDataStartEndIndexes)(action));
+      }
+    };
+    _Events.eventCenter.on(_Events.BRUSH_SYNC_EVENT, listener);
+    return () => {
+      _Events.eventCenter.off(_Events.BRUSH_SYNC_EVENT, listener);
+    };
+  }, [dispatch, myEventEmitter, mySyncId]);
+}
+
+/**
+ * Will receive synchronisation events from other charts.
+ *
+ * Reads syncMethod from state and decides how to synchronise the tooltip based on that.
+ *
+ * @returns void
+ */
+function useSynchronisedEventsFromOtherCharts() {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  (0, _react.useEffect)(() => {
+    dispatch((0, _optionsSlice.createEventEmitter)());
+  }, [dispatch]);
+  useTooltipSyncEventsListener();
+  useBrushSyncEventsListener();
+}
+
+/**
+ * Will send events to other charts.
+ * If syncId is undefined, no events will be sent.
+ *
+ * This ignores the syncMethod, because that is set and computed on the receiving end.
+ *
+ * @param tooltipEventType from Tooltip
+ * @param trigger from Tooltip
+ * @param activeCoordinate from state
+ * @param activeLabel from state
+ * @param activeIndex from state
+ * @param isTooltipActive from state
+ * @returns void
+ */
+function useTooltipChartSynchronisation(tooltipEventType, trigger, activeCoordinate, activeLabel, activeIndex, isTooltipActive) {
+  var activeDataKey = (0, _hooks.useAppSelector)(state => (0, _selectors.selectTooltipDataKey)(state, tooltipEventType, trigger));
+  var eventEmitterSymbol = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectEventEmitter);
+  var syncId = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectSyncId);
+  var syncMethod = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectSyncMethod);
+  var tooltipState = (0, _hooks.useAppSelector)(_syncSelectors.selectSynchronisedTooltipState);
+  var isReceivingSynchronisation = tooltipState === null || tooltipState === void 0 ? void 0 : tooltipState.active;
+  (0, _react.useEffect)(() => {
+    if (isReceivingSynchronisation) {
+      /*
+       * This chart currently has active tooltip, synchronised from another chart.
+       * Let's not send any outgoing synchronisation events while that's happening
+       * to avoid infinite loops.
+       */
+      return;
+    }
+    if (syncId == null) {
+      /*
+       * syncId is not set, means that this chart is not synchronised with any other chart,
+       * means we don't need to send synchronisation events
+       */
+      return;
+    }
+    if (eventEmitterSymbol == null) {
+      /*
+       * When using Recharts internal hooks and selectors outside charts context,
+       * these properties will be undefined. Let's return silently instead of throwing an error.
+       */
+      return;
+    }
+    var syncAction = (0, _tooltipSlice.setSyncInteraction)({
+      active: isTooltipActive,
+      coordinate: activeCoordinate,
+      dataKey: activeDataKey,
+      index: activeIndex,
+      label: typeof activeLabel === 'number' ? String(activeLabel) : activeLabel
+    });
+    _Events.eventCenter.emit(_Events.TOOLTIP_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);
+  }, [isReceivingSynchronisation, activeCoordinate, activeDataKey, activeIndex, activeLabel, eventEmitterSymbol, syncId, syncMethod, isTooltipActive]);
+}
+function useBrushChartSynchronisation() {
+  var syncId = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectSyncId);
+  var eventEmitterSymbol = (0, _hooks.useAppSelector)(_rootPropsSelectors.selectEventEmitter);
+  var brushStartIndex = (0, _hooks.useAppSelector)(state => state.chartData.dataStartIndex);
+  var brushEndIndex = (0, _hooks.useAppSelector)(state => state.chartData.dataEndIndex);
+  (0, _react.useEffect)(() => {
+    if (syncId == null || brushStartIndex == null || brushEndIndex == null || eventEmitterSymbol == null) {
+      return;
+    }
+    var syncAction = {
+      startIndex: brushStartIndex,
+      endIndex: brushEndIndex
+    };
+    _Events.eventCenter.emit(_Events.BRUSH_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);
+  }, [brushEndIndex, brushStartIndex, eventEmitterSymbol, syncId]);
+}
Index: node_modules/recharts/lib/types.js
===================================================================
--- node_modules/recharts/lib/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/util/ActiveShapeUtils.js
===================================================================
--- node_modules/recharts/lib/util/ActiveShapeUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/ActiveShapeUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,106 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Shape = Shape;
+exports.getPropsFromShapeOption = getPropsFromShapeOption;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _isPlainObject = _interopRequireDefault(require("es-toolkit/compat/isPlainObject"));
+var _Rectangle = require("../shape/Rectangle");
+var _Trapezoid = require("../shape/Trapezoid");
+var _Sector = require("../shape/Sector");
+var _Layer = require("../container/Layer");
+var _Symbols = require("../shape/Symbols");
+var _excluded = ["option", "shapeType", "propTransformer", "activeClassName", "isActive"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * This is an abstraction for rendering a user defined prop for a customized shape in several forms.
+ *
+ * <Shape /> is the root and will handle taking in:
+ *  - an object of svg properties
+ *  - a boolean
+ *  - a render prop(inline function that returns jsx)
+ *  - a React element
+ *
+ * <ShapeSelector /> is a subcomponent of <Shape /> and used to match a component
+ * to the value of props.shapeType that is passed to the root.
+ *
+ */
+
+function defaultPropTransformer(option, props) {
+  return _objectSpread(_objectSpread({}, props), option);
+}
+function isSymbolsProps(shapeType, _elementProps) {
+  return shapeType === 'symbols';
+}
+function ShapeSelector(_ref) {
+  var {
+    shapeType,
+    elementProps
+  } = _ref;
+  switch (shapeType) {
+    case 'rectangle':
+      return /*#__PURE__*/React.createElement(_Rectangle.Rectangle, elementProps);
+    case 'trapezoid':
+      return /*#__PURE__*/React.createElement(_Trapezoid.Trapezoid, elementProps);
+    case 'sector':
+      return /*#__PURE__*/React.createElement(_Sector.Sector, elementProps);
+    case 'symbols':
+      if (isSymbolsProps(shapeType, elementProps)) {
+        return /*#__PURE__*/React.createElement(_Symbols.Symbols, elementProps);
+      }
+      break;
+    default:
+      return null;
+  }
+}
+function getPropsFromShapeOption(option) {
+  if (/*#__PURE__*/(0, _react.isValidElement)(option)) {
+    return option.props;
+  }
+  return option;
+}
+function Shape(_ref2) {
+  var {
+      option,
+      shapeType,
+      propTransformer = defaultPropTransformer,
+      activeClassName = 'recharts-active-shape',
+      isActive
+    } = _ref2,
+    props = _objectWithoutProperties(_ref2, _excluded);
+  var shape;
+  if (/*#__PURE__*/(0, _react.isValidElement)(option)) {
+    shape = /*#__PURE__*/(0, _react.cloneElement)(option, _objectSpread(_objectSpread({}, props), getPropsFromShapeOption(option)));
+  } else if (typeof option === 'function') {
+    shape = option(props);
+  } else if ((0, _isPlainObject.default)(option) && typeof option !== 'boolean') {
+    var nextProps = propTransformer(option, props);
+    shape = /*#__PURE__*/React.createElement(ShapeSelector, {
+      shapeType: shapeType,
+      elementProps: nextProps
+    });
+  } else {
+    var elementProps = props;
+    shape = /*#__PURE__*/React.createElement(ShapeSelector, {
+      shapeType: shapeType,
+      elementProps: elementProps
+    });
+  }
+  if (isActive) {
+    return /*#__PURE__*/React.createElement(_Layer.Layer, {
+      className: activeClassName
+    }, shape);
+  }
+  return shape;
+}
Index: node_modules/recharts/lib/util/BarUtils.js
===================================================================
--- node_modules/recharts/lib/util/BarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/BarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.BarRectangle = BarRectangle;
+exports.minPointSizeCallback = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _tinyInvariant = _interopRequireDefault(require("tiny-invariant"));
+var _ActiveShapeUtils = require("./ActiveShapeUtils");
+var _DataUtils = require("./DataUtils");
+var _excluded = ["x", "y"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+// Rectangle props is expecting x, y, height, width as numbers, name as a string, and radius as a custom type
+// When props are being spread in from a user defined component in Bar,
+// the prop types of an SVGElement have these typed as something else.
+// This function will return the passed in props
+// along with x, y, height as numbers, name as a string, and radius as number | [number, number, number, number]
+function typeguardBarRectangleProps(_ref, props) {
+  var {
+      x: xProp,
+      y: yProp
+    } = _ref,
+    option = _objectWithoutProperties(_ref, _excluded);
+  var xValue = "".concat(xProp);
+  var x = parseInt(xValue, 10);
+  var yValue = "".concat(yProp);
+  var y = parseInt(yValue, 10);
+  var heightValue = "".concat(props.height || option.height);
+  var height = parseInt(heightValue, 10);
+  var widthValue = "".concat(props.width || option.width);
+  var width = parseInt(widthValue, 10);
+  return _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, props), option), x ? {
+    x
+  } : {}), y ? {
+    y
+  } : {}), {}, {
+    height,
+    width,
+    name: props.name,
+    radius: props.radius
+  });
+}
+function BarRectangle(props) {
+  return /*#__PURE__*/React.createElement(_ActiveShapeUtils.Shape, _extends({
+    shapeType: "rectangle",
+    propTransformer: typeguardBarRectangleProps,
+    activeClassName: "recharts-active-bar"
+  }, props));
+}
+/**
+ * Safely gets minPointSize from the minPointSize prop if it is a function
+ * @param minPointSize minPointSize as passed to the Bar component
+ * @param defaultValue default minPointSize
+ * @returns minPointSize
+ */
+var minPointSizeCallback = exports.minPointSizeCallback = function minPointSizeCallback(minPointSize) {
+  var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+  return (value, index) => {
+    if ((0, _DataUtils.isNumber)(minPointSize)) return minPointSize;
+    var isValueNumberOrNil = (0, _DataUtils.isNumber)(value) || (0, _DataUtils.isNullish)(value);
+    if (isValueNumberOrNil) {
+      return minPointSize(value, index);
+    }
+    !isValueNumberOrNil ? process.env.NODE_ENV !== "production" ? (0, _tinyInvariant.default)(false, "minPointSize callback function received a value with type of ".concat(typeof value, ". Currently only numbers or null/undefined are supported.")) : (0, _tinyInvariant.default)(false) : void 0;
+    return defaultValue;
+  };
+};
Index: node_modules/recharts/lib/util/CartesianUtils.js
===================================================================
--- node_modules/recharts/lib/util/CartesianUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/CartesianUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,172 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getAngledRectangleWidth = exports.createLabeledScales = exports.ScaleHelper = void 0;
+exports.normalizeAngle = normalizeAngle;
+exports.rectWithPoints = exports.rectWithCoords = void 0;
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var rectWithPoints = (_ref, _ref2) => {
+  var {
+    x: x1,
+    y: y1
+  } = _ref;
+  var {
+    x: x2,
+    y: y2
+  } = _ref2;
+  return {
+    x: Math.min(x1, x2),
+    y: Math.min(y1, y2),
+    width: Math.abs(x2 - x1),
+    height: Math.abs(y2 - y1)
+  };
+};
+
+/**
+ * Compute the x, y, width, and height of a box from two reference points.
+ * @param  {Object} coords     x1, x2, y1, and y2
+ * @return {Object} object
+ */
+exports.rectWithPoints = rectWithPoints;
+var rectWithCoords = _ref3 => {
+  var {
+    x1,
+    y1,
+    x2,
+    y2
+  } = _ref3;
+  return rectWithPoints({
+    x: x1,
+    y: y1
+  }, {
+    x: x2,
+    y: y2
+  });
+};
+exports.rectWithCoords = rectWithCoords;
+class ScaleHelper {
+  static create(obj) {
+    return new ScaleHelper(obj);
+  }
+  constructor(scale) {
+    this.scale = scale;
+  }
+  get domain() {
+    return this.scale.domain;
+  }
+  get range() {
+    return this.scale.range;
+  }
+  get rangeMin() {
+    return this.range()[0];
+  }
+  get rangeMax() {
+    return this.range()[1];
+  }
+  get bandwidth() {
+    return this.scale.bandwidth;
+  }
+  apply(value) {
+    var {
+      bandAware,
+      position
+    } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+    if (value === undefined) {
+      return undefined;
+    }
+    if (position) {
+      switch (position) {
+        case 'start':
+          {
+            return this.scale(value);
+          }
+        case 'middle':
+          {
+            var offset = this.bandwidth ? this.bandwidth() / 2 : 0;
+            return this.scale(value) + offset;
+          }
+        case 'end':
+          {
+            var _offset = this.bandwidth ? this.bandwidth() : 0;
+            return this.scale(value) + _offset;
+          }
+        default:
+          {
+            return this.scale(value);
+          }
+      }
+    }
+    if (bandAware) {
+      var _offset2 = this.bandwidth ? this.bandwidth() / 2 : 0;
+      return this.scale(value) + _offset2;
+    }
+    return this.scale(value);
+  }
+  isInRange(value) {
+    var range = this.range();
+    var first = range[0];
+    var last = range[range.length - 1];
+    return first <= last ? value >= first && value <= last : value >= last && value <= first;
+  }
+}
+exports.ScaleHelper = ScaleHelper;
+_defineProperty(ScaleHelper, "EPS", 1e-4);
+var createLabeledScales = options => {
+  var scales = Object.keys(options).reduce((res, key) => _objectSpread(_objectSpread({}, res), {}, {
+    [key]: ScaleHelper.create(options[key])
+  }), {});
+  return _objectSpread(_objectSpread({}, scales), {}, {
+    apply(coord) {
+      var {
+        bandAware,
+        position
+      } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+      return Object.fromEntries(Object.entries(coord).map(_ref4 => {
+        var [label, value] = _ref4;
+        return [label, scales[label].apply(value, {
+          bandAware,
+          position
+        })];
+      }));
+    },
+    isInRange(coord) {
+      return Object.keys(coord).every(label => scales[label].isInRange(coord[label]));
+    }
+  });
+};
+
+/** Normalizes the angle so that 0 <= angle < 180.
+ * @param {number} angle Angle in degrees.
+ * @return {number} the normalized angle with a value of at least 0 and never greater or equal to 180. */
+exports.createLabeledScales = createLabeledScales;
+function normalizeAngle(angle) {
+  return (angle % 180 + 180) % 180;
+}
+
+/** Calculates the width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.
+ * @param {Object} size Width and height of the text in a horizontal position.
+ * @param {number} angle Angle in degrees in which the text is displayed.
+ * @return {number} The width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.
+ */
+var getAngledRectangleWidth = exports.getAngledRectangleWidth = function getAngledRectangleWidth(_ref5) {
+  var {
+    width,
+    height
+  } = _ref5;
+  var angle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+  // Ensure angle is >= 0 && < 180
+  var normalizedAngle = normalizeAngle(angle);
+  var angleRadians = normalizedAngle * Math.PI / 180;
+
+  /* Depending on the height and width of the rectangle, we may need to use different formulas to calculate the angled
+   * width. This threshold defines when each formula should kick in. */
+  var angleThreshold = Math.atan(height / width);
+  var angledWidth = angleRadians > angleThreshold && angleRadians < Math.PI - angleThreshold ? height / Math.sin(angleRadians) : width / Math.cos(angleRadians);
+  return Math.abs(angledWidth);
+};
Index: node_modules/recharts/lib/util/ChartUtils.js
===================================================================
--- node_modules/recharts/lib/util/ChartUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/ChartUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,607 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getCateCoordinateOfBar = exports.getBaseValueOfBar = exports.getBandSizeOfAxis = exports.getActiveCoordinate = exports.checkDomainOfScale = exports.calculateTooltipPos = exports.calculateActiveTickIndex = exports.appendOffsetOfLegend = exports.MIN_VALUE_REG = exports.MAX_VALUE_REG = void 0;
+exports.getCateCoordinateOfLine = getCateCoordinateOfLine;
+exports.getDomainOfStackGroups = exports.getCoordinatesOfGrid = void 0;
+exports.getNormalizedStackId = getNormalizedStackId;
+exports.getTicksOfAxis = exports.getStackedData = void 0;
+exports.getTooltipEntry = getTooltipEntry;
+exports.getTooltipNameProp = getTooltipNameProp;
+exports.getValueByDataKey = getValueByDataKey;
+exports.inRange = inRange;
+exports.truncateByDomain = exports.offsetSign = exports.offsetPositive = exports.isCategoricalAxis = void 0;
+var _sortBy = _interopRequireDefault(require("es-toolkit/compat/sortBy"));
+var _get = _interopRequireDefault(require("es-toolkit/compat/get"));
+var _d3Shape = require("victory-vendor/d3-shape");
+var _DataUtils = require("./DataUtils");
+var _PolarUtils = require("./PolarUtils");
+var _getSliced = require("./getSliced");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function getValueByDataKey(obj, dataKey, defaultValue) {
+  if ((0, _DataUtils.isNullish)(obj) || (0, _DataUtils.isNullish)(dataKey)) {
+    return defaultValue;
+  }
+  if ((0, _DataUtils.isNumOrStr)(dataKey)) {
+    return (0, _get.default)(obj, dataKey, defaultValue);
+  }
+  if (typeof dataKey === 'function') {
+    return dataKey(obj);
+  }
+  return defaultValue;
+}
+var calculateActiveTickIndex = (coordinate, ticks, unsortedTicks, axisType, range) => {
+  var _ticks$length;
+  var index = -1;
+  var len = (_ticks$length = ticks === null || ticks === void 0 ? void 0 : ticks.length) !== null && _ticks$length !== void 0 ? _ticks$length : 0;
+
+  // if there are 1 or fewer ticks or if there is no coordinate then the active tick is at index 0
+  if (len <= 1 || coordinate == null) {
+    return 0;
+  }
+  if (axisType === 'angleAxis' && range != null && Math.abs(Math.abs(range[1] - range[0]) - 360) <= 1e-6) {
+    // ticks are distributed in a circle
+    for (var i = 0; i < len; i++) {
+      var before = i > 0 ? unsortedTicks[i - 1].coordinate : unsortedTicks[len - 1].coordinate;
+      var cur = unsortedTicks[i].coordinate;
+      var after = i >= len - 1 ? unsortedTicks[0].coordinate : unsortedTicks[i + 1].coordinate;
+      var sameDirectionCoord = void 0;
+      if ((0, _DataUtils.mathSign)(cur - before) !== (0, _DataUtils.mathSign)(after - cur)) {
+        var diffInterval = [];
+        if ((0, _DataUtils.mathSign)(after - cur) === (0, _DataUtils.mathSign)(range[1] - range[0])) {
+          sameDirectionCoord = after;
+          var curInRange = cur + range[1] - range[0];
+          diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2);
+          diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2);
+        } else {
+          sameDirectionCoord = before;
+          var afterInRange = after + range[1] - range[0];
+          diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2);
+          diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2);
+        }
+        var sameInterval = [Math.min(cur, (sameDirectionCoord + cur) / 2), Math.max(cur, (sameDirectionCoord + cur) / 2)];
+        if (coordinate > sameInterval[0] && coordinate <= sameInterval[1] || coordinate >= diffInterval[0] && coordinate <= diffInterval[1]) {
+          ({
+            index
+          } = unsortedTicks[i]);
+          break;
+        }
+      } else {
+        var minValue = Math.min(before, after);
+        var maxValue = Math.max(before, after);
+        if (coordinate > (minValue + cur) / 2 && coordinate <= (maxValue + cur) / 2) {
+          ({
+            index
+          } = unsortedTicks[i]);
+          break;
+        }
+      }
+    }
+  } else if (ticks) {
+    // ticks are distributed in a single direction
+    for (var _i = 0; _i < len; _i++) {
+      if (_i === 0 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i > 0 && _i < len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i === len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2) {
+        ({
+          index
+        } = ticks[_i]);
+        break;
+      }
+    }
+  }
+  return index;
+};
+exports.calculateActiveTickIndex = calculateActiveTickIndex;
+var appendOffsetOfLegend = (offset, legendSettings, legendSize) => {
+  if (legendSettings && legendSize) {
+    var {
+      width: boxWidth,
+      height: boxHeight
+    } = legendSize;
+    var {
+      align,
+      verticalAlign,
+      layout
+    } = legendSettings;
+    if ((layout === 'vertical' || layout === 'horizontal' && verticalAlign === 'middle') && align !== 'center' && (0, _DataUtils.isNumber)(offset[align])) {
+      return _objectSpread(_objectSpread({}, offset), {}, {
+        [align]: offset[align] + (boxWidth || 0)
+      });
+    }
+    if ((layout === 'horizontal' || layout === 'vertical' && align === 'center') && verticalAlign !== 'middle' && (0, _DataUtils.isNumber)(offset[verticalAlign])) {
+      return _objectSpread(_objectSpread({}, offset), {}, {
+        [verticalAlign]: offset[verticalAlign] + (boxHeight || 0)
+      });
+    }
+  }
+  return offset;
+};
+exports.appendOffsetOfLegend = appendOffsetOfLegend;
+var isCategoricalAxis = (layout, axisType) => layout === 'horizontal' && axisType === 'xAxis' || layout === 'vertical' && axisType === 'yAxis' || layout === 'centric' && axisType === 'angleAxis' || layout === 'radial' && axisType === 'radiusAxis';
+
+/**
+ * Calculate the Coordinates of grid
+ * @param  {Array} ticks           The ticks in axis
+ * @param {Number} minValue        The minimum value of axis
+ * @param {Number} maxValue        The maximum value of axis
+ * @param {boolean} syncWithTicks  Synchronize grid lines with ticks or not
+ * @return {Array}                 Coordinates
+ */
+exports.isCategoricalAxis = isCategoricalAxis;
+var getCoordinatesOfGrid = (ticks, minValue, maxValue, syncWithTicks) => {
+  if (syncWithTicks) {
+    return ticks.map(entry => entry.coordinate);
+  }
+  var hasMin, hasMax;
+  var values = ticks.map(entry => {
+    if (entry.coordinate === minValue) {
+      hasMin = true;
+    }
+    if (entry.coordinate === maxValue) {
+      hasMax = true;
+    }
+    return entry.coordinate;
+  });
+  if (!hasMin) {
+    values.push(minValue);
+  }
+  if (!hasMax) {
+    values.push(maxValue);
+  }
+  return values;
+};
+
+/**
+ * A subset of d3-scale that Recharts is using
+ */
+exports.getCoordinatesOfGrid = getCoordinatesOfGrid;
+/**
+ * Get the ticks of an axis
+ * @param  {Object}  axis The configuration of an axis
+ * @param {Boolean} isGrid Whether or not are the ticks in grid
+ * @param {Boolean} isAll Return the ticks of all the points or not
+ * @return {Array}  Ticks
+ */
+var getTicksOfAxis = (axis, isGrid, isAll) => {
+  if (!axis) {
+    return null;
+  }
+  var {
+    duplicateDomain,
+    type,
+    range,
+    scale,
+    realScaleType,
+    isCategorical,
+    categoricalDomain,
+    tickCount,
+    ticks,
+    niceTicks,
+    axisType
+  } = axis;
+  if (!scale) {
+    return null;
+  }
+  var offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;
+  var offset = (isGrid || isAll) && type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
+  offset = axisType === 'angleAxis' && range && range.length >= 2 ? (0, _DataUtils.mathSign)(range[0] - range[1]) * 2 * offset : offset;
+
+  // The ticks set by user should only affect the ticks adjacent to axis line
+  if (isGrid && (ticks || niceTicks)) {
+    var result = (ticks || niceTicks || []).map((entry, index) => {
+      var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;
+      return {
+        // If the scaleContent is not a number, the coordinate will be NaN.
+        // That could be the case for example with a PointScale and a string as domain.
+        coordinate: scale(scaleContent) + offset,
+        value: entry,
+        offset,
+        index
+      };
+    });
+    return result.filter(row => !(0, _DataUtils.isNan)(row.coordinate));
+  }
+
+  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
+  if (isCategorical && categoricalDomain) {
+    return categoricalDomain.map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      index,
+      offset
+    }));
+  }
+  if (scale.ticks && !isAll && tickCount != null) {
+    return scale.ticks(tickCount).map((entry, index) => ({
+      coordinate: scale(entry) + offset,
+      value: entry,
+      offset,
+      index
+    }));
+  }
+
+  // When axis has duplicated text, serial numbers are used to generate scale
+  return scale.domain().map((entry, index) => ({
+    coordinate: scale(entry) + offset,
+    value: duplicateDomain ? duplicateDomain[entry] : entry,
+    index,
+    offset
+  }));
+};
+exports.getTicksOfAxis = getTicksOfAxis;
+var EPS = 1e-4;
+var checkDomainOfScale = scale => {
+  var domain = scale.domain();
+  if (!domain || domain.length <= 2) {
+    return;
+  }
+  var len = domain.length;
+  var range = scale.range();
+  var minValue = Math.min(range[0], range[1]) - EPS;
+  var maxValue = Math.max(range[0], range[1]) + EPS;
+  var first = scale(domain[0]);
+  var last = scale(domain[len - 1]);
+  if (first < minValue || first > maxValue || last < minValue || last > maxValue) {
+    scale.domain([domain[0], domain[len - 1]]);
+  }
+};
+
+/**
+ * Both value and domain are tuples of two numbers
+ * - but the type stays as array of numbers until we have better support in rest of the app
+ * @param value input that will be truncated
+ * @param domain boundaries
+ * @returns tuple of two numbers
+ */
+exports.checkDomainOfScale = checkDomainOfScale;
+var truncateByDomain = (value, domain) => {
+  if (!domain || domain.length !== 2 || !(0, _DataUtils.isNumber)(domain[0]) || !(0, _DataUtils.isNumber)(domain[1])) {
+    return value;
+  }
+  var minValue = Math.min(domain[0], domain[1]);
+  var maxValue = Math.max(domain[0], domain[1]);
+  var result = [value[0], value[1]];
+  if (!(0, _DataUtils.isNumber)(value[0]) || value[0] < minValue) {
+    result[0] = minValue;
+  }
+  if (!(0, _DataUtils.isNumber)(value[1]) || value[1] > maxValue) {
+    result[1] = maxValue;
+  }
+  if (result[0] > maxValue) {
+    result[0] = maxValue;
+  }
+  if (result[1] < minValue) {
+    result[1] = minValue;
+  }
+  return result;
+};
+
+/**
+ * Stacks all positive numbers above zero and all negative numbers below zero.
+ *
+ * If all values in the series are positive then this behaves the same as 'none' stacker.
+ *
+ * @param {Array} series from d3-shape Stack
+ * @return {Array} series with applied offset
+ */
+exports.truncateByDomain = truncateByDomain;
+var offsetSign = series => {
+  var n = series.length;
+  if (n <= 0) {
+    return;
+  }
+  for (var j = 0, m = series[0].length; j < m; ++j) {
+    var positive = 0;
+    var negative = 0;
+    for (var i = 0; i < n; ++i) {
+      var value = (0, _DataUtils.isNan)(series[i][j][1]) ? series[i][j][0] : series[i][j][1];
+
+      /* eslint-disable prefer-destructuring, no-param-reassign */
+      if (value >= 0) {
+        series[i][j][0] = positive;
+        series[i][j][1] = positive + value;
+        positive = series[i][j][1];
+      } else {
+        series[i][j][0] = negative;
+        series[i][j][1] = negative + value;
+        negative = series[i][j][1];
+      }
+      /* eslint-enable prefer-destructuring, no-param-reassign */
+    }
+  }
+};
+
+/**
+ * Replaces all negative values with zero when stacking data.
+ *
+ * If all values in the series are positive then this behaves the same as 'none' stacker.
+ *
+ * @param {Array} series from d3-shape Stack
+ * @return {Array} series with applied offset
+ */
+exports.offsetSign = offsetSign;
+var offsetPositive = series => {
+  var n = series.length;
+  if (n <= 0) {
+    return;
+  }
+  for (var j = 0, m = series[0].length; j < m; ++j) {
+    var positive = 0;
+    for (var i = 0; i < n; ++i) {
+      var value = (0, _DataUtils.isNan)(series[i][j][1]) ? series[i][j][0] : series[i][j][1];
+
+      /* eslint-disable prefer-destructuring, no-param-reassign */
+      if (value >= 0) {
+        series[i][j][0] = positive;
+        series[i][j][1] = positive + value;
+        positive = series[i][j][1];
+      } else {
+        series[i][j][0] = 0;
+        series[i][j][1] = 0;
+      }
+      /* eslint-enable prefer-destructuring, no-param-reassign */
+    }
+  }
+};
+
+/**
+ * Function type to compute offset for stacked data.
+ *
+ * d3-shape has something fishy going on with its types.
+ * In @definitelytyped/d3-shape, this function (the offset accessor) is typed as Series<> => void.
+ * However! When I actually open the storybook I can see that the offset accessor actually receives Array<Series<>>.
+ * The same I can see in the source code itself:
+ * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042
+ * That one unfortunately has no types but we can tell it passes three-dimensional array.
+ *
+ * Which leads me to believe that definitelytyped is wrong on this one.
+ * There's open discussion on this topic without much attention:
+ * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042
+ */
+exports.offsetPositive = offsetPositive;
+var STACK_OFFSET_MAP = {
+  sign: offsetSign,
+  // @ts-expect-error definitelytyped types are incorrect
+  expand: _d3Shape.stackOffsetExpand,
+  // @ts-expect-error definitelytyped types are incorrect
+  none: _d3Shape.stackOffsetNone,
+  // @ts-expect-error definitelytyped types are incorrect
+  silhouette: _d3Shape.stackOffsetSilhouette,
+  // @ts-expect-error definitelytyped types are incorrect
+  wiggle: _d3Shape.stackOffsetWiggle,
+  positive: offsetPositive
+};
+var getStackedData = (data, dataKeys, offsetType) => {
+  var offsetAccessor = STACK_OFFSET_MAP[offsetType];
+  var stack = (0, _d3Shape.stack)().keys(dataKeys).value((d, key) => +getValueByDataKey(d, key, 0)).order(_d3Shape.stackOrderNone)
+  // @ts-expect-error definitelytyped types are incorrect
+  .offset(offsetAccessor);
+  return stack(data);
+};
+
+/**
+ * Stack IDs in the external props allow numbers; but internally we use it as an object key
+ * and object keys are always strings. Also, it would be kinda confusing if stackId=8 and stackId='8' were different stacks
+ * so let's just force a string.
+ */
+exports.getStackedData = getStackedData;
+function getNormalizedStackId(publicStackId) {
+  return publicStackId == null ? undefined : String(publicStackId);
+}
+function getCateCoordinateOfLine(_ref) {
+  var {
+    axis,
+    ticks,
+    bandSize,
+    entry,
+    index,
+    dataKey
+  } = _ref;
+  if (axis.type === 'category') {
+    // find coordinate of category axis by the value of category
+    // @ts-expect-error why does this use direct object access instead of getValueByDataKey?
+    if (!axis.allowDuplicatedCategory && axis.dataKey && !(0, _DataUtils.isNullish)(entry[axis.dataKey])) {
+      // @ts-expect-error why does this use direct object access instead of getValueByDataKey?
+      var matchedTick = (0, _DataUtils.findEntryInArray)(ticks, 'value', entry[axis.dataKey]);
+      if (matchedTick) {
+        return matchedTick.coordinate + bandSize / 2;
+      }
+    }
+    return ticks[index] ? ticks[index].coordinate + bandSize / 2 : null;
+  }
+  var value = getValueByDataKey(entry, !(0, _DataUtils.isNullish)(dataKey) ? dataKey : axis.dataKey);
+
+  // @ts-expect-error getValueByDataKey does not validate the output type
+  return !(0, _DataUtils.isNullish)(value) ? axis.scale(value) : null;
+}
+var getCateCoordinateOfBar = _ref2 => {
+  var {
+    axis,
+    ticks,
+    offset,
+    bandSize,
+    entry,
+    index
+  } = _ref2;
+  if (axis.type === 'category') {
+    return ticks[index] ? ticks[index].coordinate + offset : null;
+  }
+  var value = getValueByDataKey(entry, axis.dataKey, axis.scale.domain()[index]);
+  return !(0, _DataUtils.isNullish)(value) ? axis.scale(value) - bandSize / 2 + offset : null;
+};
+exports.getCateCoordinateOfBar = getCateCoordinateOfBar;
+var getBaseValueOfBar = _ref3 => {
+  var {
+    numericAxis
+  } = _ref3;
+  var domain = numericAxis.scale.domain();
+  if (numericAxis.type === 'number') {
+    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript
+    var minValue = Math.min(domain[0], domain[1]);
+    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript
+    var maxValue = Math.max(domain[0], domain[1]);
+    if (minValue <= 0 && maxValue >= 0) {
+      return 0;
+    }
+    if (maxValue < 0) {
+      return maxValue;
+    }
+    return minValue;
+  }
+  return domain[0];
+};
+exports.getBaseValueOfBar = getBaseValueOfBar;
+var getDomainOfSingle = data => {
+  var flat = data.flat(2).filter(_DataUtils.isNumber);
+  return [Math.min(...flat), Math.max(...flat)];
+};
+var makeDomainFinite = domain => {
+  return [domain[0] === Infinity ? 0 : domain[0], domain[1] === -Infinity ? 0 : domain[1]];
+};
+var getDomainOfStackGroups = (stackGroups, startIndex, endIndex) => {
+  if (stackGroups == null) {
+    return undefined;
+  }
+  return makeDomainFinite(Object.keys(stackGroups).reduce((result, stackId) => {
+    var group = stackGroups[stackId];
+    var {
+      stackedData
+    } = group;
+    var domain = stackedData.reduce((res, entry) => {
+      var sliced = (0, _getSliced.getSliced)(entry, startIndex, endIndex);
+      var s = getDomainOfSingle(sliced);
+      return [Math.min(res[0], s[0]), Math.max(res[1], s[1])];
+    }, [Infinity, -Infinity]);
+    return [Math.min(domain[0], result[0]), Math.max(domain[1], result[1])];
+  }, [Infinity, -Infinity]));
+};
+exports.getDomainOfStackGroups = getDomainOfStackGroups;
+var MIN_VALUE_REG = exports.MIN_VALUE_REG = /^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;
+var MAX_VALUE_REG = exports.MAX_VALUE_REG = /^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;
+
+/**
+ * Calculate the size between two category
+ * @param  {Object} axis  The options of axis
+ * @param  {Array}  ticks The ticks of axis
+ * @param  {Boolean} isBar if items in axis are bars
+ * @return {Number} Size
+ */
+var getBandSizeOfAxis = (axis, ticks, isBar) => {
+  if (axis && axis.scale && axis.scale.bandwidth) {
+    var bandWidth = axis.scale.bandwidth();
+    if (!isBar || bandWidth > 0) {
+      return bandWidth;
+    }
+  }
+  if (axis && ticks && ticks.length >= 2) {
+    var orderedTicks = (0, _sortBy.default)(ticks, o => o.coordinate);
+    var bandSize = Infinity;
+    for (var i = 1, len = orderedTicks.length; i < len; i++) {
+      var cur = orderedTicks[i];
+      var prev = orderedTicks[i - 1];
+      bandSize = Math.min((cur.coordinate || 0) - (prev.coordinate || 0), bandSize);
+    }
+    return bandSize === Infinity ? 0 : bandSize;
+  }
+  return isBar ? undefined : 0;
+};
+exports.getBandSizeOfAxis = getBandSizeOfAxis;
+function getTooltipEntry(_ref4) {
+  var {
+    tooltipEntrySettings,
+    dataKey,
+    payload,
+    value,
+    name
+  } = _ref4;
+  return _objectSpread(_objectSpread({}, tooltipEntrySettings), {}, {
+    dataKey,
+    payload,
+    value,
+    name
+  });
+}
+function getTooltipNameProp(nameFromItem, dataKey) {
+  if (nameFromItem) {
+    return String(nameFromItem);
+  }
+  if (typeof dataKey === 'string') {
+    return dataKey;
+  }
+  return undefined;
+}
+function inRange(x, y, layout, polarViewBox, offset) {
+  if (layout === 'horizontal' || layout === 'vertical') {
+    var isInRange = x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height;
+    return isInRange ? {
+      x,
+      y
+    } : null;
+  }
+  if (polarViewBox) {
+    return (0, _PolarUtils.inRangeOfSector)({
+      x,
+      y
+    }, polarViewBox);
+  }
+  return null;
+}
+var getActiveCoordinate = (layout, tooltipTicks, activeIndex, rangeObj) => {
+  var entry = tooltipTicks.find(tick => tick && tick.index === activeIndex);
+  if (entry) {
+    if (layout === 'horizontal') {
+      return {
+        x: entry.coordinate,
+        y: rangeObj.y
+      };
+    }
+    if (layout === 'vertical') {
+      return {
+        x: rangeObj.x,
+        y: entry.coordinate
+      };
+    }
+    if (layout === 'centric') {
+      var _angle = entry.coordinate;
+      var {
+        radius: _radius
+      } = rangeObj;
+      return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), (0, _PolarUtils.polarToCartesian)(rangeObj.cx, rangeObj.cy, _radius, _angle)), {}, {
+        angle: _angle,
+        radius: _radius
+      });
+    }
+    var radius = entry.coordinate;
+    var {
+      angle
+    } = rangeObj;
+    return _objectSpread(_objectSpread(_objectSpread({}, rangeObj), (0, _PolarUtils.polarToCartesian)(rangeObj.cx, rangeObj.cy, radius, angle)), {}, {
+      angle,
+      radius
+    });
+  }
+  return {
+    x: 0,
+    y: 0
+  };
+};
+exports.getActiveCoordinate = getActiveCoordinate;
+var calculateTooltipPos = (rangeObj, layout) => {
+  if (layout === 'horizontal') {
+    return rangeObj.x;
+  }
+  if (layout === 'vertical') {
+    return rangeObj.y;
+  }
+  if (layout === 'centric') {
+    return rangeObj.angle;
+  }
+  return rangeObj.radius;
+};
+exports.calculateTooltipPos = calculateTooltipPos;
Index: node_modules/recharts/lib/util/Constants.js
===================================================================
--- node_modules/recharts/lib/util/Constants.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/Constants.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.DEFAULT_Y_AXIS_WIDTH = exports.DATA_ITEM_INDEX_ATTRIBUTE_NAME = exports.DATA_ITEM_DATAKEY_ATTRIBUTE_NAME = exports.COLOR_PANEL = void 0;
+var COLOR_PANEL = exports.COLOR_PANEL = ['#1890FF', '#66B5FF', '#41D9C7', '#2FC25B', '#6EDB8F', '#9AE65C', '#FACC14', '#E6965C', '#57AD71', '#223273', '#738AE6', '#7564CC', '#8543E0', '#A877ED', '#5C8EE6', '#13C2C2', '#70E0E0', '#5CA3E6', '#3436C7', '#8082FF', '#DD81E6', '#F04864', '#FA7D92', '#D598D9'];
+
+/**
+ * We use this attribute to identify which element is the one that the user is touching.
+ * The index is the position of the element in the data array.
+ * This can be either a number (for array-based charts) or a string (for the charts that have a matrix-shaped data).
+ */
+var DATA_ITEM_INDEX_ATTRIBUTE_NAME = exports.DATA_ITEM_INDEX_ATTRIBUTE_NAME = 'data-recharts-item-index';
+/**
+ * We use this attribute to identify which element is the one that the user is touching.
+ * DataKey works here as a kind of identifier for the element. It's not a perfect identifier for ~two~ three reasons:
+ *
+ * 1. There can be two different elements with the same dataKey; we won't know which is it
+ * 2. DataKey can be a function, and that serialized will be a `[Function: anonymous]` string
+ * which means we will be able to identify that it was a function but can't tell which one.
+ * This will lead to some weird bugs. A proper fix would be to either:
+ * a) use a unique identifier for each element (passed from props, or generated)
+ * b) figure out how to compare the dataKey or graphical item by object reference
+ *
+ * a) is a fuss because we don't have the unique identifier in props,
+ * and b) is possible most of the time except for touchMove events which work differently from mouseEnter/mouseLeave:
+ * - while mouseEnter is fired for the element that the mouse is over,
+ * touchMove is fired for the element where user has started touching. As the finger moves,
+ * we can identify the element that the user is touching by using the elementFromPoint method,
+ * but it keeps calling the handler on the element where touchStart was fired.
+ *
+ * Okay and now I discovered a third reason: the dataKey can be undefined and that's still fine
+ * because if dataKey is undefined then graphical elements assume the dataKey of the axes.
+ * Which makes it a convenient way of using recharts to render a chart but horrible identifier.
+ */
+var DATA_ITEM_DATAKEY_ATTRIBUTE_NAME = exports.DATA_ITEM_DATAKEY_ATTRIBUTE_NAME = 'data-recharts-item-data-key';
+var DEFAULT_Y_AXIS_WIDTH = exports.DEFAULT_Y_AXIS_WIDTH = 60;
Index: node_modules/recharts/lib/util/CssPrefixUtils.js
===================================================================
--- node_modules/recharts/lib/util/CssPrefixUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/CssPrefixUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.generatePrefixStyle = void 0;
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];
+var generatePrefixStyle = (name, value) => {
+  if (!name) {
+    return undefined;
+  }
+  var camelName = name.replace(/(\w)/, v => v.toUpperCase());
+  var result = PREFIX_LIST.reduce((res, entry) => _objectSpread(_objectSpread({}, res), {}, {
+    [entry + camelName]: value
+  }), {});
+  result[name] = value;
+  return result;
+};
+exports.generatePrefixStyle = generatePrefixStyle;
Index: node_modules/recharts/lib/util/DOMUtils.js
===================================================================
--- node_modules/recharts/lib/util/DOMUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/DOMUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,137 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getTextMeasurementConfig = exports.getStringSize = exports.getStringCacheStats = exports.configureTextMeasurement = exports.clearStringCache = void 0;
+var _Global = require("./Global");
+var _LRUCache = require("./LRUCache");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var defaultConfig = {
+  cacheSize: 2000,
+  enableCache: true
+};
+var currentConfig = _objectSpread({}, defaultConfig);
+var stringCache = new _LRUCache.LRUCache(currentConfig.cacheSize);
+var SPAN_STYLE = {
+  position: 'absolute',
+  top: '-20000px',
+  left: 0,
+  padding: 0,
+  margin: 0,
+  border: 'none',
+  whiteSpace: 'pre'
+};
+var MEASUREMENT_SPAN_ID = 'recharts_measurement_span';
+function createCacheKey(text, style) {
+  // Simple string concatenation for better performance than JSON.stringify
+  var fontSize = style.fontSize || '';
+  var fontFamily = style.fontFamily || '';
+  var fontWeight = style.fontWeight || '';
+  var fontStyle = style.fontStyle || '';
+  var letterSpacing = style.letterSpacing || '';
+  var textTransform = style.textTransform || '';
+  return "".concat(text, "|").concat(fontSize, "|").concat(fontFamily, "|").concat(fontWeight, "|").concat(fontStyle, "|").concat(letterSpacing, "|").concat(textTransform);
+}
+
+/**
+ * Measure text using DOM (accurate but slower)
+ * @param text - The text to measure
+ * @param style - CSS style properties to apply
+ * @returns The size of the text
+ */
+var measureTextWithDOM = (text, style) => {
+  try {
+    var measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);
+    if (!measurementSpan) {
+      measurementSpan = document.createElement('span');
+      measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);
+      measurementSpan.setAttribute('aria-hidden', 'true');
+      document.body.appendChild(measurementSpan);
+    }
+
+    // Apply styles directly without unnecessary object creation
+    Object.assign(measurementSpan.style, SPAN_STYLE, style);
+    measurementSpan.textContent = "".concat(text);
+    var rect = measurementSpan.getBoundingClientRect();
+    return {
+      width: rect.width,
+      height: rect.height
+    };
+  } catch (_unused) {
+    return {
+      width: 0,
+      height: 0
+    };
+  }
+};
+var getStringSize = exports.getStringSize = function getStringSize(text) {
+  var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+  if (text === undefined || text === null || _Global.Global.isSsr) {
+    return {
+      width: 0,
+      height: 0
+    };
+  }
+
+  // If caching is disabled, measure directly
+  if (!currentConfig.enableCache) {
+    return measureTextWithDOM(text, style);
+  }
+  var cacheKey = createCacheKey(text, style);
+  var cachedResult = stringCache.get(cacheKey);
+  if (cachedResult) {
+    return cachedResult;
+  }
+
+  // Measure using DOM
+  var result = measureTextWithDOM(text, style);
+
+  // Store in LRU cache
+  stringCache.set(cacheKey, result);
+  return result;
+};
+
+/**
+ * Configure text measurement behavior
+ * @param config - Partial configuration to apply
+ * @returns void
+ */
+var configureTextMeasurement = config => {
+  var newConfig = _objectSpread(_objectSpread({}, currentConfig), config);
+  if (newConfig.cacheSize !== currentConfig.cacheSize) {
+    stringCache = new _LRUCache.LRUCache(newConfig.cacheSize);
+  }
+  currentConfig = newConfig;
+};
+
+/**
+ * Get current text measurement configuration
+ * @returns Current configuration
+ */
+exports.configureTextMeasurement = configureTextMeasurement;
+var getTextMeasurementConfig = () => _objectSpread({}, currentConfig);
+
+/**
+ * Clear the string size cache. Useful for testing or memory management.
+ * @returns void
+ */
+exports.getTextMeasurementConfig = getTextMeasurementConfig;
+var clearStringCache = () => {
+  stringCache.clear();
+};
+
+/**
+ * Get cache statistics for debugging purposes.
+ * @returns Cache statistics including size and max size
+ */
+exports.clearStringCache = clearStringCache;
+var getStringCacheStats = () => ({
+  size: stringCache.size(),
+  maxSize: currentConfig.cacheSize
+});
+exports.getStringCacheStats = getStringCacheStats;
Index: node_modules/recharts/lib/util/DataUtils.js
===================================================================
--- node_modules/recharts/lib/util/DataUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/DataUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,175 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.findEntryInArray = findEntryInArray;
+exports.hasDuplicate = exports.getPercentValue = exports.getLinearRegression = void 0;
+exports.interpolate = interpolate;
+exports.upperFirst = exports.uniqueId = exports.mathSign = exports.isPercent = exports.isNumber = exports.isNumOrStr = exports.isNullish = exports.isNan = exports.interpolateNumber = void 0;
+var _get = _interopRequireDefault(require("es-toolkit/compat/get"));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var mathSign = value => {
+  if (value === 0) {
+    return 0;
+  }
+  if (value > 0) {
+    return 1;
+  }
+  return -1;
+};
+exports.mathSign = mathSign;
+var isNan = value => {
+  // eslint-disable-next-line eqeqeq
+  return typeof value == 'number' && value != +value;
+};
+exports.isNan = isNan;
+var isPercent = value => typeof value === 'string' && value.indexOf('%') === value.length - 1;
+exports.isPercent = isPercent;
+var isNumber = value => (typeof value === 'number' || value instanceof Number) && !isNan(value);
+exports.isNumber = isNumber;
+var isNumOrStr = value => isNumber(value) || typeof value === 'string';
+exports.isNumOrStr = isNumOrStr;
+var idCounter = 0;
+var uniqueId = prefix => {
+  var id = ++idCounter;
+  return "".concat(prefix || '').concat(id);
+};
+
+/**
+ * Get percent value of a total value
+ * @param {number|string} percent A percent
+ * @param {number} totalValue     Total value
+ * @param {number} defaultValue   The value returned when percent is undefined or invalid
+ * @param {boolean} validate      If set to be true, the result will be validated
+ * @return {number} value
+ */
+exports.uniqueId = uniqueId;
+var getPercentValue = exports.getPercentValue = function getPercentValue(percent, totalValue) {
+  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+  var validate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+  if (!isNumber(percent) && typeof percent !== 'string') {
+    return defaultValue;
+  }
+  var value;
+  if (isPercent(percent)) {
+    if (totalValue == null) {
+      return defaultValue;
+    }
+    var index = percent.indexOf('%');
+    value = totalValue * parseFloat(percent.slice(0, index)) / 100;
+  } else {
+    value = +percent;
+  }
+  if (isNan(value)) {
+    value = defaultValue;
+  }
+  if (validate && totalValue != null && value > totalValue) {
+    value = totalValue;
+  }
+  return value;
+};
+var hasDuplicate = ary => {
+  if (!Array.isArray(ary)) {
+    return false;
+  }
+  var len = ary.length;
+  var cache = {};
+  for (var i = 0; i < len; i++) {
+    if (!cache[ary[i]]) {
+      cache[ary[i]] = true;
+    } else {
+      return true;
+    }
+  }
+  return false;
+};
+
+/**
+ * @deprecated instead use {@link interpolate}
+ *  this function returns a function that is called immediately in all use-cases.
+ *  Instead, use interpolate which returns a number and skips the anonymous function step.
+ *  @param numberA The first number
+ *  @param numberB The second number
+ *  @return A function that returns the interpolated number
+ */
+exports.hasDuplicate = hasDuplicate;
+var interpolateNumber = (numberA, numberB) => {
+  if (isNumber(numberA) && isNumber(numberB)) {
+    return t => numberA + t * (numberB - numberA);
+  }
+  return () => numberB;
+};
+exports.interpolateNumber = interpolateNumber;
+function interpolate(start, end, t) {
+  if (isNumber(start) && isNumber(end)) {
+    return start + t * (end - start);
+  }
+  return end;
+}
+function findEntryInArray(ary, specifiedKey, specifiedValue) {
+  if (!ary || !ary.length) {
+    return undefined;
+  }
+  return ary.find(entry => entry && (typeof specifiedKey === 'function' ? specifiedKey(entry) : (0, _get.default)(entry, specifiedKey)) === specifiedValue);
+}
+
+/**
+ * The least square linear regression
+ * @param {Array} data The array of points
+ * @returns {Object} The domain of x, and the parameter of linear function
+ */
+var getLinearRegression = data => {
+  if (!data || !data.length) {
+    return null;
+  }
+  var len = data.length;
+  var xsum = 0;
+  var ysum = 0;
+  var xysum = 0;
+  var xxsum = 0;
+  var xmin = Infinity;
+  var xmax = -Infinity;
+  var xcurrent = 0;
+  var ycurrent = 0;
+  for (var i = 0; i < len; i++) {
+    xcurrent = data[i].cx || 0;
+    ycurrent = data[i].cy || 0;
+    xsum += xcurrent;
+    ysum += ycurrent;
+    xysum += xcurrent * ycurrent;
+    xxsum += xcurrent * xcurrent;
+    xmin = Math.min(xmin, xcurrent);
+    xmax = Math.max(xmax, xcurrent);
+  }
+  var a = len * xxsum !== xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0;
+  return {
+    xmin,
+    xmax,
+    a,
+    b: (ysum - a * xsum) / len
+  };
+};
+exports.getLinearRegression = getLinearRegression;
+/**
+ * Checks if the value is null or undefined
+ * @param value The value to check
+ * @returns true if the value is null or undefined
+ */
+var isNullish = value => {
+  return value === null || typeof value === 'undefined';
+};
+
+/**
+ *Uppercase the first letter of a string
+ * @param {string} value The string to uppercase
+ * @returns {string} The uppercased string
+ */
+exports.isNullish = isNullish;
+var upperFirst = value => {
+  if (isNullish(value)) {
+    return value;
+  }
+  return "".concat(value.charAt(0).toUpperCase()).concat(value.slice(1));
+};
+exports.upperFirst = upperFirst;
Index: node_modules/recharts/lib/util/Events.js
===================================================================
--- node_modules/recharts/lib/util/Events.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/Events.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.eventCenter = exports.TOOLTIP_SYNC_EVENT = exports.BRUSH_SYNC_EVENT = void 0;
+var _eventemitter = _interopRequireDefault(require("eventemitter3"));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var eventCenter = exports.eventCenter = new _eventemitter.default();
+var TOOLTIP_SYNC_EVENT = exports.TOOLTIP_SYNC_EVENT = 'recharts.syncEvent.tooltip';
+var BRUSH_SYNC_EVENT = exports.BRUSH_SYNC_EVENT = 'recharts.syncEvent.brush';
Index: node_modules/recharts/lib/util/FunnelUtils.js
===================================================================
--- node_modules/recharts/lib/util/FunnelUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/FunnelUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.FunnelTrapezoid = FunnelTrapezoid;
+exports.typeGuardTrapezoidProps = typeGuardTrapezoidProps;
+var React = _interopRequireWildcard(require("react"));
+var _ActiveShapeUtils = require("./ActiveShapeUtils");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+// Trapezoid props is expecting x, y, height as numbers.
+// When props are being spread in from a user defined component in Funnel,
+// the prop types of an SVGElement have these typed as string | number.
+// This function will return the passed in props along with x, y, height as numbers.
+function typeGuardTrapezoidProps(option, props) {
+  var xValue = "".concat(props.x || option.x);
+  var x = parseInt(xValue, 10);
+  var yValue = "".concat(props.y || option.y);
+  var y = parseInt(yValue, 10);
+  var heightValue = "".concat((props === null || props === void 0 ? void 0 : props.height) || (option === null || option === void 0 ? void 0 : option.height));
+  var height = parseInt(heightValue, 10);
+  return _objectSpread(_objectSpread(_objectSpread({}, props), (0, _ActiveShapeUtils.getPropsFromShapeOption)(option)), {}, {
+    height,
+    x,
+    y
+  });
+}
+function FunnelTrapezoid(props) {
+  return /*#__PURE__*/React.createElement(_ActiveShapeUtils.Shape, _extends({
+    shapeType: "trapezoid",
+    propTransformer: typeGuardTrapezoidProps
+  }, props));
+}
Index: node_modules/recharts/lib/util/Global.js
===================================================================
--- node_modules/recharts/lib/util/Global.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/Global.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Global = void 0;
+var parseIsSsrByDefault = () => !(typeof window !== 'undefined' && window.document && Boolean(window.document.createElement) && window.setTimeout);
+var Global = exports.Global = {
+  isSsr: parseIsSsrByDefault()
+};
Index: node_modules/recharts/lib/util/IfOverflow.js
===================================================================
--- node_modules/recharts/lib/util/IfOverflow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/IfOverflow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/util/LRUCache.js
===================================================================
--- node_modules/recharts/lib/util/LRUCache.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/LRUCache.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.LRUCache = void 0;
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * Simple LRU (Least Recently Used) cache implementation
+ */
+class LRUCache {
+  constructor(maxSize) {
+    _defineProperty(this, "cache", new Map());
+    this.maxSize = maxSize;
+  }
+  get(key) {
+    var value = this.cache.get(key);
+    if (value !== undefined) {
+      this.cache.delete(key);
+      this.cache.set(key, value);
+    }
+    return value;
+  }
+  set(key, value) {
+    if (this.cache.has(key)) {
+      this.cache.delete(key);
+    } else if (this.cache.size >= this.maxSize) {
+      var firstKey = this.cache.keys().next().value;
+      this.cache.delete(firstKey);
+    }
+    this.cache.set(key, value);
+  }
+  clear() {
+    this.cache.clear();
+  }
+  size() {
+    return this.cache.size;
+  }
+}
+exports.LRUCache = LRUCache;
Index: node_modules/recharts/lib/util/LogUtils.js
===================================================================
--- node_modules/recharts/lib/util/LogUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/LogUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.warn = void 0;
+/* eslint no-console: 0 */
+var isDev = process.env.NODE_ENV !== 'production';
+var warn = exports.warn = function warn(condition, format) {
+  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
+    args[_key - 2] = arguments[_key];
+  }
+  if (isDev && typeof console !== 'undefined' && console.warn) {
+    if (format === undefined) {
+      console.warn('LogUtils requires an error message argument');
+    }
+    if (!condition) {
+      if (format === undefined) {
+        console.warn('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
+      } else {
+        var argIndex = 0;
+        console.warn(format.replace(/%s/g, () => args[argIndex++]));
+      }
+    }
+  }
+};
Index: node_modules/recharts/lib/util/PolarUtils.js
===================================================================
--- node_modules/recharts/lib/util/PolarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/PolarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,160 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.radianToDegree = exports.polarToCartesian = exports.inRangeOfSector = exports.getTickClassName = exports.getMaxRadius = exports.getAngleOfPoint = exports.formatAngleOfSector = exports.distanceBetweenPoints = exports.degreeToRadian = exports.RADIAN = void 0;
+var _react = require("react");
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var RADIAN = exports.RADIAN = Math.PI / 180;
+var degreeToRadian = angle => angle * Math.PI / 180;
+exports.degreeToRadian = degreeToRadian;
+var radianToDegree = angleInRadian => angleInRadian * 180 / Math.PI;
+exports.radianToDegree = radianToDegree;
+var polarToCartesian = (cx, cy, radius, angle) => ({
+  x: cx + Math.cos(-RADIAN * angle) * radius,
+  y: cy + Math.sin(-RADIAN * angle) * radius
+});
+exports.polarToCartesian = polarToCartesian;
+var getMaxRadius = exports.getMaxRadius = function getMaxRadius(width, height) {
+  var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0,
+    width: 0,
+    height: 0,
+    brushBottom: 0
+  };
+  return Math.min(Math.abs(width - (offset.left || 0) - (offset.right || 0)), Math.abs(height - (offset.top || 0) - (offset.bottom || 0))) / 2;
+};
+var distanceBetweenPoints = (point, anotherPoint) => {
+  var {
+    x: x1,
+    y: y1
+  } = point;
+  var {
+    x: x2,
+    y: y2
+  } = anotherPoint;
+  return Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);
+};
+exports.distanceBetweenPoints = distanceBetweenPoints;
+var getAngleOfPoint = (_ref, _ref2) => {
+  var {
+    x,
+    y
+  } = _ref;
+  var {
+    cx,
+    cy
+  } = _ref2;
+  var radius = distanceBetweenPoints({
+    x,
+    y
+  }, {
+    x: cx,
+    y: cy
+  });
+  if (radius <= 0) {
+    return {
+      radius,
+      angle: 0
+    };
+  }
+  var cos = (x - cx) / radius;
+  var angleInRadian = Math.acos(cos);
+  if (y > cy) {
+    angleInRadian = 2 * Math.PI - angleInRadian;
+  }
+  return {
+    radius,
+    angle: radianToDegree(angleInRadian),
+    angleInRadian
+  };
+};
+exports.getAngleOfPoint = getAngleOfPoint;
+var formatAngleOfSector = _ref3 => {
+  var {
+    startAngle,
+    endAngle
+  } = _ref3;
+  var startCnt = Math.floor(startAngle / 360);
+  var endCnt = Math.floor(endAngle / 360);
+  var min = Math.min(startCnt, endCnt);
+  return {
+    startAngle: startAngle - min * 360,
+    endAngle: endAngle - min * 360
+  };
+};
+exports.formatAngleOfSector = formatAngleOfSector;
+var reverseFormatAngleOfSector = (angle, _ref4) => {
+  var {
+    startAngle,
+    endAngle
+  } = _ref4;
+  var startCnt = Math.floor(startAngle / 360);
+  var endCnt = Math.floor(endAngle / 360);
+  var min = Math.min(startCnt, endCnt);
+  return angle + min * 360;
+};
+var inRangeOfSector = (_ref5, viewBox) => {
+  var {
+    x,
+    y
+  } = _ref5;
+  var {
+    radius,
+    angle
+  } = getAngleOfPoint({
+    x,
+    y
+  }, viewBox);
+  var {
+    innerRadius,
+    outerRadius
+  } = viewBox;
+  if (radius < innerRadius || radius > outerRadius) {
+    return null;
+  }
+  if (radius === 0) {
+    return null;
+  }
+  var {
+    startAngle,
+    endAngle
+  } = formatAngleOfSector(viewBox);
+  var formatAngle = angle;
+  var inRange;
+  if (startAngle <= endAngle) {
+    while (formatAngle > endAngle) {
+      formatAngle -= 360;
+    }
+    while (formatAngle < startAngle) {
+      formatAngle += 360;
+    }
+    inRange = formatAngle >= startAngle && formatAngle <= endAngle;
+  } else {
+    while (formatAngle > startAngle) {
+      formatAngle -= 360;
+    }
+    while (formatAngle < endAngle) {
+      formatAngle += 360;
+    }
+    inRange = formatAngle >= endAngle && formatAngle <= startAngle;
+  }
+  if (inRange) {
+    return _objectSpread(_objectSpread({}, viewBox), {}, {
+      radius,
+      angle: reverseFormatAngleOfSector(formatAngle, viewBox)
+    });
+  }
+  return null;
+};
+exports.inRangeOfSector = inRangeOfSector;
+var getTickClassName = tick => ! /*#__PURE__*/(0, _react.isValidElement)(tick) && typeof tick !== 'function' && typeof tick !== 'boolean' && tick != null ? tick.className : '';
+exports.getTickClassName = getTickClassName;
Index: node_modules/recharts/lib/util/RadialBarUtils.js
===================================================================
--- node_modules/recharts/lib/util/RadialBarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/RadialBarUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RadialBarSector = RadialBarSector;
+exports.parseCornerRadius = parseCornerRadius;
+exports.typeGuardSectorProps = typeGuardSectorProps;
+var React = _interopRequireWildcard(require("react"));
+var _ActiveShapeUtils = require("./ActiveShapeUtils");
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function parseCornerRadius(cornerRadius) {
+  if (typeof cornerRadius === 'string') {
+    return parseInt(cornerRadius, 10);
+  }
+  return cornerRadius;
+}
+
+// Sector props is expecting cx, cy as numbers.
+// When props are being spread in from a user defined component in RadialBar,
+// the prop types of an SVGElement have these typed as string | number.
+// This function will return the passed in props along with cx, cy as numbers.
+function typeGuardSectorProps(option, props) {
+  var cxValue = "".concat(props.cx || option.cx);
+  var cx = Number(cxValue);
+  var cyValue = "".concat(props.cy || option.cy);
+  var cy = Number(cyValue);
+  return _objectSpread(_objectSpread(_objectSpread({}, props), option), {}, {
+    cx,
+    cy
+  });
+}
+function RadialBarSector(props) {
+  return /*#__PURE__*/React.createElement(_ActiveShapeUtils.Shape, _extends({
+    shapeType: "sector",
+    propTransformer: typeGuardSectorProps
+  }, props));
+}
Index: node_modules/recharts/lib/util/ReactUtils.js
===================================================================
--- node_modules/recharts/lib/util/ReactUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/ReactUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,168 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.filterProps = exports.SCALE_TYPES = void 0;
+exports.findAllByType = findAllByType;
+exports.toArray = exports.isValidSpreadableProp = exports.isClipDot = exports.getDisplayName = void 0;
+var _get = _interopRequireDefault(require("es-toolkit/compat/get"));
+var _react = require("react");
+var _reactIs = require("react-is");
+var _DataUtils = require("./DataUtils");
+var _types = require("./types");
+var _excludeEventProps = require("./excludeEventProps");
+var _svgPropertiesNoEvents = require("./svgPropertiesNoEvents");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+var SCALE_TYPES = exports.SCALE_TYPES = ['auto', 'linear', 'pow', 'sqrt', 'log', 'identity', 'time', 'band', 'point', 'ordinal', 'quantile', 'quantize', 'utc', 'sequential', 'threshold'];
+
+/**
+ * @deprecated instead find another approach that does not depend on displayName.
+ * Get the display name of a component
+ * @param  {Object} Comp Specified Component
+ * @return {String}      Display name of Component
+ */
+var getDisplayName = Comp => {
+  if (typeof Comp === 'string') {
+    return Comp;
+  }
+  if (!Comp) {
+    return '';
+  }
+  return Comp.displayName || Comp.name || 'Component';
+};
+
+// `toArray` gets called multiple times during the render
+// so we can memoize last invocation (since reference to `children` is the same)
+exports.getDisplayName = getDisplayName;
+var lastChildren = null;
+var lastResult = null;
+
+/**
+ * @deprecated instead find another approach that does not require reading React Elements from DOM.
+ *
+ * @param children do not use
+ * @return deprecated do not use
+ */
+var toArray = children => {
+  if (children === lastChildren && Array.isArray(lastResult)) {
+    return lastResult;
+  }
+  var result = [];
+  _react.Children.forEach(children, child => {
+    if ((0, _DataUtils.isNullish)(child)) return;
+    if ((0, _reactIs.isFragment)(child)) {
+      result = result.concat(toArray(child.props.children));
+    } else {
+      // @ts-expect-error this could still be Iterable<ReactNode> and TS does not like that
+      result.push(child);
+    }
+  });
+  lastResult = result;
+  lastChildren = children;
+  return result;
+};
+
+/**
+ * @deprecated instead find another approach that does not require reading React Elements from DOM.
+ *
+ * Find and return all matched children by type.
+ * `type` must be a React.ComponentType
+ *
+ * @param children do not use
+ * @param type do not use
+ * @return deprecated do not use
+ */
+exports.toArray = toArray;
+function findAllByType(children, type) {
+  var result = [];
+  var types = [];
+  if (Array.isArray(type)) {
+    types = type.map(t => getDisplayName(t));
+  } else {
+    types = [getDisplayName(type)];
+  }
+  toArray(children).forEach(child => {
+    var childType = (0, _get.default)(child, 'type.displayName') || (0, _get.default)(child, 'type.name');
+    // ts-expect-error toArray and lodash.get are not compatible. Let's get rid of the whole findAllByType function
+    if (types.indexOf(childType) !== -1) {
+      result.push(child);
+    }
+  });
+  return result;
+}
+var isClipDot = dot => {
+  if (dot && typeof dot === 'object' && 'clipDot' in dot) {
+    return Boolean(dot.clipDot);
+  }
+  return true;
+};
+
+/**
+ * Checks if the property is valid to spread onto an SVG element or onto a specific component
+ * @param {unknown} property property value currently being compared
+ * @param {string} key property key currently being compared
+ * @param {boolean} includeEvents if events are included in spreadable props
+ * @param {boolean} svgElementType checks against map of SVG element types to attributes
+ * @returns {boolean} is prop valid
+ */
+exports.isClipDot = isClipDot;
+var isValidSpreadableProp = (property, key, includeEvents, svgElementType) => {
+  var _ref;
+  if (typeof key === 'symbol' || typeof key === 'number') {
+    // Allow symbols and numbers as valid keys
+    return true;
+  }
+  /**
+   * If the svg element type is explicitly included, check against the filtered element key map
+   * to determine if there are attributes that should only exist on that element type.
+   * @todo Add an internal cjs version of https://github.com/wooorm/svg-element-attributes for full coverage.
+   */
+  var matchingElementTypeKeys = (_ref = svgElementType && (_types.FilteredElementKeyMap === null || _types.FilteredElementKeyMap === void 0 ? void 0 : _types.FilteredElementKeyMap[svgElementType])) !== null && _ref !== void 0 ? _ref : [];
+  var isDataAttribute = key.startsWith('data-');
+  var isSpecificSvgAttribute = typeof property !== 'function' && (Boolean(svgElementType) && matchingElementTypeKeys.includes(key) || (0, _svgPropertiesNoEvents.isSvgElementPropKey)(key));
+  var isEventAttribute = Boolean(includeEvents) && (0, _excludeEventProps.isEventKey)(key);
+  return isDataAttribute || isSpecificSvgAttribute || isEventAttribute;
+};
+
+/**
+ * Filters the props object to only include valid SVG attributes or event handlers.
+ * @deprecated do not use this function, as it is not type-safe and may lead to unexpected behavior. Returns `any`.
+ * Instead, use:
+ * - `excludeEventProps` to exclude event handlers
+ * - `svgOnlyNoEvents` to exclude non-SVG attributes, and exclude event handlers too
+ * @param props - The props object to filter, which can be a Record, Component, FunctionComponent, boolean, or unknown.
+ * @param includeEvents - A boolean indicating whether to include event handlers in the filtered props.
+ * @param svgElementType - An optional parameter specifying the type of SVG element to filter attributes for.
+ * @returns A new object containing only valid SVG attributes or event handlers, or null if the input is not valid.
+ */
+exports.isValidSpreadableProp = isValidSpreadableProp;
+var filterProps = (props, includeEvents, svgElementType) => {
+  if (!props || typeof props === 'function' || typeof props === 'boolean') {
+    return null;
+  }
+  var inputProps = props;
+  if (/*#__PURE__*/(0, _react.isValidElement)(props)) {
+    inputProps = props.props;
+  }
+  if (typeof inputProps !== 'object' && typeof inputProps !== 'function') {
+    return null;
+  }
+  var out = {};
+
+  /**
+   * Props are blindly spread onto SVG elements. This loop filters out properties that we don't want to spread.
+   * Items filtered out are as follows:
+   *   - functions in properties that are SVG attributes (functions are included when includeEvents is true)
+   *   - props that are SVG attributes but don't matched the passed svgElementType
+   *   - any prop that is not in SVGElementPropKeys (or in EventKeys if includeEvents is true)
+   */
+  Object.keys(inputProps).forEach(key => {
+    var _inputProps;
+    if (isValidSpreadableProp((_inputProps = inputProps) === null || _inputProps === void 0 ? void 0 : _inputProps[key], key, includeEvents, svgElementType)) {
+      out[key] = inputProps[key];
+    }
+  });
+  return out;
+};
+exports.filterProps = filterProps;
Index: node_modules/recharts/lib/util/ReduceCSSCalc.js
===================================================================
--- node_modules/recharts/lib/util/ReduceCSSCalc.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/ReduceCSSCalc.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,140 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.reduceCSSCalc = reduceCSSCalc;
+exports.safeEvaluateExpression = safeEvaluateExpression;
+var _DataUtils = require("./DataUtils");
+var MULTIPLY_OR_DIVIDE_REGEX = /(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/;
+var ADD_OR_SUBTRACT_REGEX = /(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/;
+var CSS_LENGTH_UNIT_REGEX = /^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/;
+var NUM_SPLIT_REGEX = /(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/;
+var CONVERSION_RATES = {
+  cm: 96 / 2.54,
+  mm: 96 / 25.4,
+  pt: 96 / 72,
+  pc: 96 / 6,
+  in: 96,
+  Q: 96 / (2.54 * 40),
+  px: 1
+};
+var FIXED_CSS_LENGTH_UNITS = Object.keys(CONVERSION_RATES);
+var STR_NAN = 'NaN';
+function convertToPx(value, unit) {
+  return value * CONVERSION_RATES[unit];
+}
+class DecimalCSS {
+  static parse(str) {
+    var _NUM_SPLIT_REGEX$exec;
+    var [, numStr, unit] = (_NUM_SPLIT_REGEX$exec = NUM_SPLIT_REGEX.exec(str)) !== null && _NUM_SPLIT_REGEX$exec !== void 0 ? _NUM_SPLIT_REGEX$exec : [];
+    return new DecimalCSS(parseFloat(numStr), unit !== null && unit !== void 0 ? unit : '');
+  }
+  constructor(num, unit) {
+    this.num = num;
+    this.unit = unit;
+    this.num = num;
+    this.unit = unit;
+    if ((0, _DataUtils.isNan)(num)) {
+      this.unit = '';
+    }
+    if (unit !== '' && !CSS_LENGTH_UNIT_REGEX.test(unit)) {
+      this.num = NaN;
+      this.unit = '';
+    }
+    if (FIXED_CSS_LENGTH_UNITS.includes(unit)) {
+      this.num = convertToPx(num, unit);
+      this.unit = 'px';
+    }
+  }
+  add(other) {
+    if (this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num + other.num, this.unit);
+  }
+  subtract(other) {
+    if (this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num - other.num, this.unit);
+  }
+  multiply(other) {
+    if (this.unit !== '' && other.unit !== '' && this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num * other.num, this.unit || other.unit);
+  }
+  divide(other) {
+    if (this.unit !== '' && other.unit !== '' && this.unit !== other.unit) {
+      return new DecimalCSS(NaN, '');
+    }
+    return new DecimalCSS(this.num / other.num, this.unit || other.unit);
+  }
+  toString() {
+    return "".concat(this.num).concat(this.unit);
+  }
+  isNaN() {
+    return (0, _DataUtils.isNan)(this.num);
+  }
+}
+function calculateArithmetic(expr) {
+  if (expr.includes(STR_NAN)) {
+    return STR_NAN;
+  }
+  var newExpr = expr;
+  while (newExpr.includes('*') || newExpr.includes('/')) {
+    var _MULTIPLY_OR_DIVIDE_R;
+    var [, leftOperand, operator, rightOperand] = (_MULTIPLY_OR_DIVIDE_R = MULTIPLY_OR_DIVIDE_REGEX.exec(newExpr)) !== null && _MULTIPLY_OR_DIVIDE_R !== void 0 ? _MULTIPLY_OR_DIVIDE_R : [];
+    var lTs = DecimalCSS.parse(leftOperand !== null && leftOperand !== void 0 ? leftOperand : '');
+    var rTs = DecimalCSS.parse(rightOperand !== null && rightOperand !== void 0 ? rightOperand : '');
+    var result = operator === '*' ? lTs.multiply(rTs) : lTs.divide(rTs);
+    if (result.isNaN()) {
+      return STR_NAN;
+    }
+    newExpr = newExpr.replace(MULTIPLY_OR_DIVIDE_REGEX, result.toString());
+  }
+  while (newExpr.includes('+') || /.-\d+(?:\.\d+)?/.test(newExpr)) {
+    var _ADD_OR_SUBTRACT_REGE;
+    var [, _leftOperand, _operator, _rightOperand] = (_ADD_OR_SUBTRACT_REGE = ADD_OR_SUBTRACT_REGEX.exec(newExpr)) !== null && _ADD_OR_SUBTRACT_REGE !== void 0 ? _ADD_OR_SUBTRACT_REGE : [];
+    var _lTs = DecimalCSS.parse(_leftOperand !== null && _leftOperand !== void 0 ? _leftOperand : '');
+    var _rTs = DecimalCSS.parse(_rightOperand !== null && _rightOperand !== void 0 ? _rightOperand : '');
+    var _result = _operator === '+' ? _lTs.add(_rTs) : _lTs.subtract(_rTs);
+    if (_result.isNaN()) {
+      return STR_NAN;
+    }
+    newExpr = newExpr.replace(ADD_OR_SUBTRACT_REGEX, _result.toString());
+  }
+  return newExpr;
+}
+var PARENTHESES_REGEX = /\(([^()]*)\)/;
+function calculateParentheses(expr) {
+  var newExpr = expr;
+  var match;
+  // eslint-disable-next-line no-cond-assign
+  while ((match = PARENTHESES_REGEX.exec(newExpr)) != null) {
+    var [, parentheticalExpression] = match;
+    newExpr = newExpr.replace(PARENTHESES_REGEX, calculateArithmetic(parentheticalExpression));
+  }
+  return newExpr;
+}
+function evaluateExpression(expression) {
+  var newExpr = expression.replace(/\s+/g, '');
+  newExpr = calculateParentheses(newExpr);
+  newExpr = calculateArithmetic(newExpr);
+  return newExpr;
+}
+function safeEvaluateExpression(expression) {
+  try {
+    return evaluateExpression(expression);
+  } catch (_unused) {
+    return STR_NAN;
+  }
+}
+function reduceCSSCalc(expression) {
+  var result = safeEvaluateExpression(expression.slice(5, -1));
+  if (result === STR_NAN) {
+    return '';
+  }
+  return result;
+}
Index: node_modules/recharts/lib/util/ScatterUtils.js
===================================================================
--- node_modules/recharts/lib/util/ScatterUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/ScatterUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ScatterSymbol = ScatterSymbol;
+var React = _interopRequireWildcard(require("react"));
+var _Symbols = require("../shape/Symbols");
+var _ActiveShapeUtils = require("./ActiveShapeUtils");
+var _excluded = ["option", "isActive"];
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
+function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
+function ScatterSymbol(_ref) {
+  var {
+      option,
+      isActive
+    } = _ref,
+    props = _objectWithoutProperties(_ref, _excluded);
+  if (typeof option === 'string') {
+    return /*#__PURE__*/React.createElement(_ActiveShapeUtils.Shape, _extends({
+      option: /*#__PURE__*/React.createElement(_Symbols.Symbols, _extends({
+        type: option
+      }, props)),
+      isActive: isActive,
+      shapeType: "symbols"
+    }, props));
+  }
+  return /*#__PURE__*/React.createElement(_ActiveShapeUtils.Shape, _extends({
+    option: option,
+    isActive: isActive,
+    shapeType: "symbols"
+  }, props));
+}
Index: node_modules/recharts/lib/util/ShallowEqual.js
===================================================================
--- node_modules/recharts/lib/util/ShallowEqual.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/ShallowEqual.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.shallowEqual = shallowEqual;
+function shallowEqual(a, b) {
+  /* eslint-disable no-restricted-syntax */
+  for (var key in a) {
+    if ({}.hasOwnProperty.call(a, key) && (!{}.hasOwnProperty.call(b, key) || a[key] !== b[key])) {
+      return false;
+    }
+  }
+  for (var _key in b) {
+    if ({}.hasOwnProperty.call(b, _key) && !{}.hasOwnProperty.call(a, _key)) {
+      return false;
+    }
+  }
+  return true;
+}
Index: node_modules/recharts/lib/util/TickUtils.js
===================================================================
--- node_modules/recharts/lib/util/TickUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/TickUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getAngledTickWidth = getAngledTickWidth;
+exports.getNumberIntervalTicks = getNumberIntervalTicks;
+exports.getTickBoundaries = getTickBoundaries;
+exports.isVisible = isVisible;
+var _CartesianUtils = require("./CartesianUtils");
+var _getEveryNthWithCondition = require("./getEveryNthWithCondition");
+function getAngledTickWidth(contentSize, unitSize, angle) {
+  var size = {
+    width: contentSize.width + unitSize.width,
+    height: contentSize.height + unitSize.height
+  };
+  return (0, _CartesianUtils.getAngledRectangleWidth)(size, angle);
+}
+function getTickBoundaries(viewBox, sign, sizeKey) {
+  var isWidth = sizeKey === 'width';
+  var {
+    x,
+    y,
+    width,
+    height
+  } = viewBox;
+  if (sign === 1) {
+    return {
+      start: isWidth ? x : y,
+      end: isWidth ? x + width : y + height
+    };
+  }
+  return {
+    start: isWidth ? x + width : y + height,
+    end: isWidth ? x : y
+  };
+}
+function isVisible(sign, tickPosition, getSize, start, end) {
+  /* Since getSize() is expensive (it reads the ticks' size from the DOM), we do this check first to avoid calculating
+   * the tick's size. */
+  if (sign * tickPosition < sign * start || sign * tickPosition > sign * end) {
+    return false;
+  }
+  var size = getSize();
+  return sign * (tickPosition - sign * size / 2 - start) >= 0 && sign * (tickPosition + sign * size / 2 - end) <= 0;
+}
+function getNumberIntervalTicks(ticks, interval) {
+  return (0, _getEveryNthWithCondition.getEveryNthWithCondition)(ticks, interval + 1);
+}
Index: node_modules/recharts/lib/util/YAxisUtils.js
===================================================================
--- node_modules/recharts/lib/util/YAxisUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/YAxisUtils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getCalculatedYAxisWidth = void 0;
+/**
+ * Calculates the width of the Y-axis based on the tick labels and the axis label.
+ * @param {Object} params - The parameters object.
+ * @param {React.RefObject<any>} params.cartesianAxisRef - The ref to the CartesianAxis component.
+ * @param {React.RefObject<Element>} params.labelRef - The ref to the label element.
+ * @param {number} [params.labelGapWithTick=5] - The gap between the label and the tick.
+ * @returns {number} The calculated width of the Y-axis.
+ */
+var getCalculatedYAxisWidth = _ref => {
+  var {
+    ticks,
+    label,
+    labelGapWithTick = 5,
+    // Default gap between label and tick
+    tickSize = 0,
+    tickMargin = 0
+  } = _ref;
+  // find the max width of the tick labels
+  var maxTickWidth = 0;
+  if (ticks) {
+    ticks.forEach(tickNode => {
+      if (tickNode) {
+        var bbox = tickNode.getBoundingClientRect();
+        if (bbox.width > maxTickWidth) {
+          maxTickWidth = bbox.width;
+        }
+      }
+    });
+
+    // calculate width of the axis label
+    var labelWidth = label ? label.getBoundingClientRect().width : 0;
+    var tickWidth = tickSize + tickMargin;
+
+    // calculate the updated width of the y-axis
+    var updatedYAxisWidth = maxTickWidth + tickWidth + labelWidth + (label ? labelGapWithTick : 0);
+    return Math.round(updatedYAxisWidth);
+  }
+  return 0;
+};
+exports.getCalculatedYAxisWidth = getCalculatedYAxisWidth;
Index: node_modules/recharts/lib/util/cursor/getCursorPoints.js
===================================================================
--- node_modules/recharts/lib/util/cursor/getCursorPoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/cursor/getCursorPoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getCursorPoints = getCursorPoints;
+var _PolarUtils = require("../PolarUtils");
+var _getRadialCursorPoints = require("./getRadialCursorPoints");
+function getCursorPoints(layout, activeCoordinate, offset) {
+  var x1, y1, x2, y2;
+  if (layout === 'horizontal') {
+    x1 = activeCoordinate.x;
+    x2 = x1;
+    y1 = offset.top;
+    y2 = offset.top + offset.height;
+  } else if (layout === 'vertical') {
+    y1 = activeCoordinate.y;
+    y2 = y1;
+    x1 = offset.left;
+    x2 = offset.left + offset.width;
+  } else if (activeCoordinate.cx != null && activeCoordinate.cy != null) {
+    if (layout === 'centric') {
+      var {
+        cx,
+        cy,
+        innerRadius,
+        outerRadius,
+        angle
+      } = activeCoordinate;
+      var innerPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, innerRadius, angle);
+      var outerPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, outerRadius, angle);
+      x1 = innerPoint.x;
+      y1 = innerPoint.y;
+      x2 = outerPoint.x;
+      y2 = outerPoint.y;
+    } else {
+      // @ts-expect-error TODO the state is marked as containing Coordinate but actually in polar charts it contains PolarCoordinate, we should keep the polar state separate
+      return (0, _getRadialCursorPoints.getRadialCursorPoints)(activeCoordinate);
+    }
+  }
+  return [{
+    x: x1,
+    y: y1
+  }, {
+    x: x2,
+    y: y2
+  }];
+}
Index: node_modules/recharts/lib/util/cursor/getCursorRectangle.js
===================================================================
--- node_modules/recharts/lib/util/cursor/getCursorRectangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/cursor/getCursorRectangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getCursorRectangle = getCursorRectangle;
+function getCursorRectangle(layout, activeCoordinate, offset, tooltipAxisBandSize) {
+  var halfSize = tooltipAxisBandSize / 2;
+  return {
+    stroke: 'none',
+    fill: '#ccc',
+    x: layout === 'horizontal' ? activeCoordinate.x - halfSize : offset.left + 0.5,
+    y: layout === 'horizontal' ? offset.top + 0.5 : activeCoordinate.y - halfSize,
+    width: layout === 'horizontal' ? tooltipAxisBandSize : offset.width - 1,
+    height: layout === 'horizontal' ? offset.height - 1 : tooltipAxisBandSize
+  };
+}
Index: node_modules/recharts/lib/util/cursor/getRadialCursorPoints.js
===================================================================
--- node_modules/recharts/lib/util/cursor/getRadialCursorPoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/cursor/getRadialCursorPoints.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getRadialCursorPoints = getRadialCursorPoints;
+var _PolarUtils = require("../PolarUtils");
+/**
+ * Only applicable for radial layouts
+ * @param {Object} activeCoordinate ChartCoordinate
+ * @returns {Object} RadialCursorPoints
+ */
+function getRadialCursorPoints(activeCoordinate) {
+  var {
+    cx,
+    cy,
+    radius,
+    startAngle,
+    endAngle
+  } = activeCoordinate;
+  var startPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, radius, startAngle);
+  var endPoint = (0, _PolarUtils.polarToCartesian)(cx, cy, radius, endAngle);
+  return {
+    points: [startPoint, endPoint],
+    cx,
+    cy,
+    radius,
+    startAngle,
+    endAngle
+  };
+}
Index: node_modules/recharts/lib/util/excludeEventProps.js
===================================================================
--- node_modules/recharts/lib/util/excludeEventProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/excludeEventProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.excludeEventProps = excludeEventProps;
+exports.isEventKey = isEventKey;
+var EventKeys = ['dangerouslySetInnerHTML', 'onCopy', 'onCopyCapture', 'onCut', 'onCutCapture', 'onPaste', 'onPasteCapture', 'onCompositionEnd', 'onCompositionEndCapture', 'onCompositionStart', 'onCompositionStartCapture', 'onCompositionUpdate', 'onCompositionUpdateCapture', 'onFocus', 'onFocusCapture', 'onBlur', 'onBlurCapture', 'onChange', 'onChangeCapture', 'onBeforeInput', 'onBeforeInputCapture', 'onInput', 'onInputCapture', 'onReset', 'onResetCapture', 'onSubmit', 'onSubmitCapture', 'onInvalid', 'onInvalidCapture', 'onLoad', 'onLoadCapture', 'onError', 'onErrorCapture', 'onKeyDown', 'onKeyDownCapture', 'onKeyPress', 'onKeyPressCapture', 'onKeyUp', 'onKeyUpCapture', 'onAbort', 'onAbortCapture', 'onCanPlay', 'onCanPlayCapture', 'onCanPlayThrough', 'onCanPlayThroughCapture', 'onDurationChange', 'onDurationChangeCapture', 'onEmptied', 'onEmptiedCapture', 'onEncrypted', 'onEncryptedCapture', 'onEnded', 'onEndedCapture', 'onLoadedData', 'onLoadedDataCapture', 'onLoadedMetadata', 'onLoadedMetadataCapture', 'onLoadStart', 'onLoadStartCapture', 'onPause', 'onPauseCapture', 'onPlay', 'onPlayCapture', 'onPlaying', 'onPlayingCapture', 'onProgress', 'onProgressCapture', 'onRateChange', 'onRateChangeCapture', 'onSeeked', 'onSeekedCapture', 'onSeeking', 'onSeekingCapture', 'onStalled', 'onStalledCapture', 'onSuspend', 'onSuspendCapture', 'onTimeUpdate', 'onTimeUpdateCapture', 'onVolumeChange', 'onVolumeChangeCapture', 'onWaiting', 'onWaitingCapture', 'onAuxClick', 'onAuxClickCapture', 'onClick', 'onClickCapture', 'onContextMenu', 'onContextMenuCapture', 'onDoubleClick', 'onDoubleClickCapture', 'onDrag', 'onDragCapture', 'onDragEnd', 'onDragEndCapture', 'onDragEnter', 'onDragEnterCapture', 'onDragExit', 'onDragExitCapture', 'onDragLeave', 'onDragLeaveCapture', 'onDragOver', 'onDragOverCapture', 'onDragStart', 'onDragStartCapture', 'onDrop', 'onDropCapture', 'onMouseDown', 'onMouseDownCapture', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseMoveCapture', 'onMouseOut', 'onMouseOutCapture', 'onMouseOver', 'onMouseOverCapture', 'onMouseUp', 'onMouseUpCapture', 'onSelect', 'onSelectCapture', 'onTouchCancel', 'onTouchCancelCapture', 'onTouchEnd', 'onTouchEndCapture', 'onTouchMove', 'onTouchMoveCapture', 'onTouchStart', 'onTouchStartCapture', 'onPointerDown', 'onPointerDownCapture', 'onPointerMove', 'onPointerMoveCapture', 'onPointerUp', 'onPointerUpCapture', 'onPointerCancel', 'onPointerCancelCapture', 'onPointerEnter', 'onPointerEnterCapture', 'onPointerLeave', 'onPointerLeaveCapture', 'onPointerOver', 'onPointerOverCapture', 'onPointerOut', 'onPointerOutCapture', 'onGotPointerCapture', 'onGotPointerCaptureCapture', 'onLostPointerCapture', 'onLostPointerCaptureCapture', 'onScroll', 'onScrollCapture', 'onWheel', 'onWheelCapture', 'onAnimationStart', 'onAnimationStartCapture', 'onAnimationEnd', 'onAnimationEndCapture', 'onAnimationIteration', 'onAnimationIterationCapture', 'onTransitionEnd', 'onTransitionEndCapture'];
+function isEventKey(key) {
+  if (typeof key !== 'string') {
+    return false;
+  }
+  var allowedEventKeys = EventKeys;
+  return allowedEventKeys.includes(key);
+}
+
+/**
+ * Filters out event properties from the given object.
+ * This function is useful for cleaning up props before passing them to a React component,
+ * @param obj - The object containing properties to filter.
+ * @returns A new object containing only the properties that are not event handlers.
+ */
+function excludeEventProps(obj) {
+  var filteredEntries = Object.entries(obj).filter(_ref => {
+    var [key] = _ref;
+    return !isEventKey(key);
+  });
+  return Object.fromEntries(filteredEntries);
+}
Index: node_modules/recharts/lib/util/getChartPointer.js
===================================================================
--- node_modules/recharts/lib/util/getChartPointer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/getChartPointer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getChartPointer = void 0;
+/**
+ * Computes the chart coordinates from the mouse event.
+ *
+ * The coordinates are relative to the top-left corner of the chart,
+ * where the top-left corner of the chart is (0, 0).
+ * Moving right, the x-coordinate increases, and moving down, the y-coordinate increases.
+ *
+ * The coordinates are rounded to the nearest integer and are including a CSS transform scale.
+ * So a chart that's scaled will return the same coordinates as a chart that's not scaled.
+ *
+ * @param event The mouse event from React event handlers
+ * @return chartPointer The chart coordinates relative to the top-left corner of the chart
+ */
+var getChartPointer = event => {
+  var rect = event.currentTarget.getBoundingClientRect();
+  var scaleX = rect.width / event.currentTarget.offsetWidth;
+  var scaleY = rect.height / event.currentTarget.offsetHeight;
+  return {
+    /*
+     * Here it's important to use:
+     * - event.clientX and event.clientY to get the mouse position relative to the viewport, including scroll.
+     * - pageX and pageY are not used because they are relative to the whole document, and ignore scroll.
+     * - rect.left and rect.top are used to get the position of the chart relative to the viewport.
+     * - offsetX and offsetY are not used because they are relative to the offset parent
+     *  which may or may not be the same as the clientX and clientY, depending on the position of the chart in the DOM
+     *  and surrounding element styles. CSS position: relative, absolute, fixed, will change the offset parent.
+     * - scaleX and scaleY are necessary for when the chart element is scaled using CSS `transform: scale(N)`.
+     */
+    chartX: Math.round((event.clientX - rect.left) / scaleX),
+    chartY: Math.round((event.clientY - rect.top) / scaleY)
+  };
+};
+exports.getChartPointer = getChartPointer;
Index: node_modules/recharts/lib/util/getEveryNthWithCondition.js
===================================================================
--- node_modules/recharts/lib/util/getEveryNthWithCondition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/getEveryNthWithCondition.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getEveryNthWithCondition = getEveryNthWithCondition;
+/**
+ * Given an array and a number N, return a new array which contains every nTh
+ * element of the input array. For n below 1, an empty array is returned.
+ * If isValid is provided, all candidates must suffice the condition, else undefined is returned.
+ * @param {T[]} array An input array.
+ * @param {integer} n A number
+ * @param {Function} isValid A function to evaluate a candidate form the array
+ * @returns {T[]} The result array of the same type as the input array.
+ */
+function getEveryNthWithCondition(array, n, isValid) {
+  if (n < 1) {
+    return [];
+  }
+  if (n === 1 && isValid === undefined) {
+    return array;
+  }
+  var result = [];
+  for (var i = 0; i < array.length; i += n) {
+    if (isValid === undefined || isValid(array[i]) === true) {
+      result.push(array[i]);
+    } else {
+      return undefined;
+    }
+  }
+  return result;
+}
Index: node_modules/recharts/lib/util/getSliced.js
===================================================================
--- node_modules/recharts/lib/util/getSliced.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/getSliced.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getSliced = getSliced;
+function getSliced(arr, startIndex, endIndex) {
+  if (!Array.isArray(arr)) {
+    return arr;
+  }
+  if (arr && startIndex + endIndex !== 0) {
+    return arr.slice(startIndex, endIndex + 1);
+  }
+  return arr;
+}
Index: node_modules/recharts/lib/util/isDomainSpecifiedByUser.js
===================================================================
--- node_modules/recharts/lib/util/isDomainSpecifiedByUser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/isDomainSpecifiedByUser.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,186 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.extendDomain = extendDomain;
+exports.isWellFormedNumberDomain = isWellFormedNumberDomain;
+exports.numericalDomainSpecifiedWithoutRequiringData = numericalDomainSpecifiedWithoutRequiringData;
+exports.parseNumericalUserDomain = parseNumericalUserDomain;
+var _ChartUtils = require("./ChartUtils");
+var _DataUtils = require("./DataUtils");
+var _isWellBehavedNumber = require("./isWellBehavedNumber");
+function isWellFormedNumberDomain(v) {
+  if (Array.isArray(v) && v.length === 2) {
+    var [min, max] = v;
+    if ((0, _isWellBehavedNumber.isWellBehavedNumber)(min) && (0, _isWellBehavedNumber.isWellBehavedNumber)(max)) {
+      return true;
+    }
+  }
+  return false;
+}
+function extendDomain(providedDomain, boundaryDomain, allowDataOverflow) {
+  if (allowDataOverflow) {
+    // If the data are allowed to overflow - we're fine with whatever user provided
+    return providedDomain;
+  }
+  /*
+   * If the data are not allowed to overflow - we need to extend the domain.
+   * Means that effectively the user is allowed to make the domain larger
+   * but not smaller.
+   */
+  return [Math.min(providedDomain[0], boundaryDomain[0]), Math.max(providedDomain[1], boundaryDomain[1])];
+}
+
+/**
+ * So Recharts allows users to provide their own domains,
+ * but it also places some expectations on what the domain is.
+ * We can improve on the typescript typing, but we also need a runtime test
+ to observe that the user-provided domain is well-formed,
+ * that is: an array with exactly two numbers.
+ *
+ * This function does not accept data as an argument.
+ * This is to enable a performance optimization - if the domain is there,
+ * and we know what it is without traversing all the data,
+ * then we don't have to traverse all the data!
+ *
+ * If the user-provided domain is not well-formed,
+ * this function will return undefined - in which case we should traverse the data to calculate the real domain.
+ *
+ * This function is for parsing the numerical domain only.
+ *
+ * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.
+ * @param allowDataOverflow boolean, provided by users. If true then the data domain wins
+ *
+ * @return [min, max] domain if it's well-formed; undefined if the domain is invalid
+ */
+function numericalDomainSpecifiedWithoutRequiringData(userDomain, allowDataOverflow) {
+  if (!allowDataOverflow) {
+    // Cannot compute data overflow if the data is not provided
+    return undefined;
+  }
+  if (typeof userDomain === 'function') {
+    // The user function expects the data to be provided as an argument
+    return undefined;
+  }
+  if (Array.isArray(userDomain) && userDomain.length === 2) {
+    var [providedMin, providedMax] = userDomain;
+    var finalMin, finalMax;
+    if ((0, _isWellBehavedNumber.isWellBehavedNumber)(providedMin)) {
+      finalMin = providedMin;
+    } else if (typeof providedMin === 'function') {
+      // The user function expects the data to be provided as an argument
+      return undefined;
+    }
+    if ((0, _isWellBehavedNumber.isWellBehavedNumber)(providedMax)) {
+      finalMax = providedMax;
+    } else if (typeof providedMax === 'function') {
+      // The user function expects the data to be provided as an argument
+      return undefined;
+    }
+    var candidate = [finalMin, finalMax];
+    if (isWellFormedNumberDomain(candidate)) {
+      return candidate;
+    }
+  }
+  return undefined;
+}
+
+/**
+ * So Recharts allows users to provide their own domains,
+ * but it also places some expectations on what the domain is.
+ * We can improve on the typescript typing, but we also need a runtime test
+ * to observe that the user-provided domain is well-formed,
+ * that is: an array with exactly two numbers.
+ * If the user-provided domain is not well-formed,
+ * this function will return undefined - in which case we should traverse the data to calculate the real domain.
+ *
+ * This function is for parsing the numerical domain only.
+ *
+ * You are probably thinking, why does domain need tick count?
+ * Well it adjusts the domain based on where the "nice ticks" land, and nice ticks depend on the tick count.
+ *
+ * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.
+ * @param dataDomain calculated from data. Can be undefined, as an option for performance optimization
+ * @param allowDataOverflow provided by users. If true then the data domain wins
+ *
+ * @return [min, max] domain if it's well-formed; undefined if the domain is invalid
+ */
+function parseNumericalUserDomain(userDomain, dataDomain, allowDataOverflow) {
+  if (!allowDataOverflow && dataDomain == null) {
+    // Cannot compute data overflow if the data is not provided
+    return undefined;
+  }
+  if (typeof userDomain === 'function' && dataDomain != null) {
+    try {
+      var result = userDomain(dataDomain, allowDataOverflow);
+      if (isWellFormedNumberDomain(result)) {
+        return extendDomain(result, dataDomain, allowDataOverflow);
+      }
+    } catch (_unused) {
+      /* ignore the exception and compute domain from data later */
+    }
+  }
+  if (Array.isArray(userDomain) && userDomain.length === 2) {
+    var [providedMin, providedMax] = userDomain;
+    var finalMin, finalMax;
+    if (providedMin === 'auto') {
+      if (dataDomain != null) {
+        finalMin = Math.min(...dataDomain);
+      }
+    } else if ((0, _DataUtils.isNumber)(providedMin)) {
+      finalMin = providedMin;
+    } else if (typeof providedMin === 'function') {
+      try {
+        if (dataDomain != null) {
+          finalMin = providedMin(dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[0]);
+        }
+      } catch (_unused2) {
+        /* ignore the exception and compute domain from data later */
+      }
+    } else if (typeof providedMin === 'string' && _ChartUtils.MIN_VALUE_REG.test(providedMin)) {
+      var match = _ChartUtils.MIN_VALUE_REG.exec(providedMin);
+      if (match == null || dataDomain == null) {
+        finalMin = undefined;
+      } else {
+        var value = +match[1];
+        finalMin = dataDomain[0] - value;
+      }
+    } else {
+      finalMin = dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[0];
+    }
+    if (providedMax === 'auto') {
+      if (dataDomain != null) {
+        finalMax = Math.max(...dataDomain);
+      }
+    } else if ((0, _DataUtils.isNumber)(providedMax)) {
+      finalMax = providedMax;
+    } else if (typeof providedMax === 'function') {
+      try {
+        if (dataDomain != null) {
+          finalMax = providedMax(dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[1]);
+        }
+      } catch (_unused3) {
+        /* ignore the exception and compute domain from data later */
+      }
+    } else if (typeof providedMax === 'string' && _ChartUtils.MAX_VALUE_REG.test(providedMax)) {
+      var _match = _ChartUtils.MAX_VALUE_REG.exec(providedMax);
+      if (_match == null || dataDomain == null) {
+        finalMax = undefined;
+      } else {
+        var _value = +_match[1];
+        finalMax = dataDomain[1] + _value;
+      }
+    } else {
+      finalMax = dataDomain === null || dataDomain === void 0 ? void 0 : dataDomain[1];
+    }
+    var candidate = [finalMin, finalMax];
+    if (isWellFormedNumberDomain(candidate)) {
+      if (dataDomain == null) {
+        return candidate;
+      }
+      return extendDomain(candidate, dataDomain, allowDataOverflow);
+    }
+  }
+  return undefined;
+}
Index: node_modules/recharts/lib/util/isWellBehavedNumber.js
===================================================================
--- node_modules/recharts/lib/util/isWellBehavedNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/isWellBehavedNumber.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.isPositiveNumber = isPositiveNumber;
+exports.isWellBehavedNumber = isWellBehavedNumber;
+function isWellBehavedNumber(n) {
+  return Number.isFinite(n);
+}
+function isPositiveNumber(n) {
+  return typeof n === 'number' && n > 0 && Number.isFinite(n);
+}
Index: node_modules/recharts/lib/util/payload/getUniqPayload.js
===================================================================
--- node_modules/recharts/lib/util/payload/getUniqPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/payload/getUniqPayload.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getUniqPayload = getUniqPayload;
+var _uniqBy = _interopRequireDefault(require("es-toolkit/compat/uniqBy"));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/**
+ * This is configuration option that decides how to filter for unique values only:
+ *
+ * - `false` means "no filter"
+ * - `true` means "use recharts default filter"
+ * - function means "use return of this function as the default key"
+ */
+
+function getUniqPayload(payload, option, defaultUniqBy) {
+  if (option === true) {
+    return (0, _uniqBy.default)(payload, defaultUniqBy);
+  }
+  if (typeof option === 'function') {
+    return (0, _uniqBy.default)(payload, option);
+  }
+  return payload;
+}
Index: node_modules/recharts/lib/util/resolveDefaultProps.js
===================================================================
--- node_modules/recharts/lib/util/resolveDefaultProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/resolveDefaultProps.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,91 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.resolveDefaultProps = resolveDefaultProps;
+function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
+function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
+function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+/**
+ * This function mimics the behavior of the `defaultProps` static property in React.
+ * Functional components do not have a defaultProps property, so this function is useful to resolve default props.
+ *
+ * The common recommendation is to use ES6 destructuring with default values in the function signature,
+ * but you need to be careful there and make sure you destructure all the individual properties
+ * and not the whole object. See the test file for example.
+ *
+ * And because destructuring all properties one by one is a faff, and it's easy to miss one property,
+ * this function exists.
+ *
+ * @param realProps - the props object passed to the component by the user
+ * @param defaultProps - the default props object defined in the component by Recharts
+ * @returns - the props object with all the default props resolved. All `undefined` values are replaced with the default value.
+ */
+function resolveDefaultProps(realProps, defaultProps) {
+  /*
+   * To avoid mutating the original `realProps` object passed to the function, create a shallow copy of it.
+   * `resolvedProps` will be modified directly with the defaults.
+   */
+  var resolvedProps = _objectSpread({}, realProps);
+  /*
+   * Since the function guarantees `D extends Partial<T>`, this assignment is safe.
+   * It allows TypeScript to work with the well-defined `Partial<T>` type inside the loop,
+   * making subsequent type inference (especially for `dp[key]`) much more straightforward for the compiler.
+   * This is a key step to improve type safety *without* value assertions later.
+   */
+  var dp = defaultProps;
+  /*
+   * `Object.keys` doesn't preserve strong key types - it always returns Array<string>.
+   * However, due to the `D extends Partial<T>` constraint,
+   * we know these keys *must* also be valid keys of `T`.
+   * This assertion informs TypeScript of this relationship, avoiding type errors when using `key` to index `acc` (type T).
+   *
+   * Type assertions are not sound but in this case it's necessary
+   * as `Object.keys` does not do what we want it to do.
+   */
+  var keys = Object.keys(defaultProps);
+  var withDefaults = keys.reduce((acc, key) => {
+    if (acc[key] === undefined && dp[key] !== undefined) {
+      acc[key] = dp[key];
+    }
+    return acc;
+  }, resolvedProps);
+  /*
+   * And again type assertions are not safe but here we have done the runtime work
+   * so let's bypass the lack of static type safety and tell the compiler what happened.
+   */
+  return withDefaults;
+}
+
+/**
+ * Helper type to extract the keys of T that are required.
+ * It iterates through each key K in T. If Pick<T, K> cannot be assigned an empty object {},
+ * it means K is required, so we keep K; otherwise, we discard it (never).
+ * [keyof T] at the end creates a union of the kept keys.
+ */
+
+/**
+ * Helper type to extract the keys of T that are optional.
+ * It iterates through each key K in T. If Pick<T, K> can be assigned an empty object {},
+ * it means K is optional (or potentially missing), so we keep K; otherwise, we discard it (never).
+ * [keyof T] at the end creates a union of the kept keys.
+ */
+
+/**
+ * Helper type to ensure keys of D exist in T.
+ * For each key K in D, if K is also a key of T, keep the type D[K].
+ * If K is NOT a key of T, map it to type `never`.
+ * An object cannot have a property of type `never`, effectively disallowing extra keys.
+ */
+
+/**
+ * This type will take a source type `Props` and a default type `Defaults` and will return a new type
+ * where all properties that are optional in `Props` but required in `Defaults` are made required in the result.
+ * Properties that are required in `Props` and optional in `Defaults` will remain required.
+ * Properties that are optional in both `Props` and `Defaults` will remain optional.
+ *
+ * This is useful for creating a type that represents the resolved props of a component with default props.
+ */
Index: node_modules/recharts/lib/util/scale/getNiceTickValues.js
===================================================================
--- node_modules/recharts/lib/util/scale/getNiceTickValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/scale/getNiceTickValues.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,218 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getValidInterval = exports.getTickValuesFixedDomain = exports.getTickOfSingleValue = exports.getNiceTickValues = exports.getFormatStep = exports.calculateStep = void 0;
+var _decimal = _interopRequireDefault(require("decimal.js-light"));
+var _utils = require("./util/utils");
+var _arithmetic = require("./util/arithmetic");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/**
+ * @fileOverview calculate tick values of scale
+ * @author xile611, arcthur
+ * @date 2015-09-17
+ */
+
+/**
+ * Calculate a interval of a minimum value and a maximum value
+ *
+ * @param  {Number} min       The minimum value
+ * @param  {Number} max       The maximum value
+ * @return {Array} An interval
+ */
+var getValidInterval = _ref => {
+  var [min, max] = _ref;
+  var [validMin, validMax] = [min, max];
+
+  // exchange
+  if (min > max) {
+    [validMin, validMax] = [max, min];
+  }
+  return [validMin, validMax];
+};
+
+/**
+ * Calculate the step which is easy to understand between ticks, like 10, 20, 25
+ *
+ * @param  roughStep        The rough step calculated by dividing the difference by the tickCount
+ * @param  allowDecimals    Allow the ticks to be decimals or not
+ * @param  correctionFactor A correction factor
+ * @return The step which is easy to understand between two ticks
+ */
+exports.getValidInterval = getValidInterval;
+var getFormatStep = (roughStep, allowDecimals, correctionFactor) => {
+  if (roughStep.lte(0)) {
+    return new _decimal.default(0);
+  }
+  var digitCount = (0, _arithmetic.getDigitCount)(roughStep.toNumber());
+  // The ratio between the rough step and the smallest number which has a bigger
+  // order of magnitudes than the rough step
+  var digitCountValue = new _decimal.default(10).pow(digitCount);
+  var stepRatio = roughStep.div(digitCountValue);
+  // When an integer and a float multiplied, the accuracy of result may be wrong
+  var stepRatioScale = digitCount !== 1 ? 0.05 : 0.1;
+  var amendStepRatio = new _decimal.default(Math.ceil(stepRatio.div(stepRatioScale).toNumber())).add(correctionFactor).mul(stepRatioScale);
+  var formatStep = amendStepRatio.mul(digitCountValue);
+  return allowDecimals ? new _decimal.default(formatStep.toNumber()) : new _decimal.default(Math.ceil(formatStep.toNumber()));
+};
+
+/**
+ * calculate the ticks when the minimum value equals to the maximum value
+ *
+ * @param  value         The minimum value which is also the maximum value
+ * @param  tickCount     The count of ticks
+ * @param  allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+exports.getFormatStep = getFormatStep;
+var getTickOfSingleValue = (value, tickCount, allowDecimals) => {
+  var step = new _decimal.default(1);
+  // calculate the middle value of ticks
+  var middle = new _decimal.default(value);
+  if (!middle.isint() && allowDecimals) {
+    var absVal = Math.abs(value);
+    if (absVal < 1) {
+      // The step should be a float number when the difference is smaller than 1
+      step = new _decimal.default(10).pow((0, _arithmetic.getDigitCount)(value) - 1);
+      middle = new _decimal.default(Math.floor(middle.div(step).toNumber())).mul(step);
+    } else if (absVal > 1) {
+      // Return the maximum integer which is smaller than 'value' when 'value' is greater than 1
+      middle = new _decimal.default(Math.floor(value));
+    }
+  } else if (value === 0) {
+    middle = new _decimal.default(Math.floor((tickCount - 1) / 2));
+  } else if (!allowDecimals) {
+    middle = new _decimal.default(Math.floor(value));
+  }
+  var middleIndex = Math.floor((tickCount - 1) / 2);
+  var fn = (0, _utils.compose)((0, _utils.map)(n => middle.add(new _decimal.default(n - middleIndex).mul(step)).toNumber()), _utils.range);
+  return fn(0, tickCount);
+};
+
+/**
+ * Calculate the step
+ *
+ * @param  min              The minimum value of an interval
+ * @param  max              The maximum value of an interval
+ * @param  tickCount        The count of ticks
+ * @param  allowDecimals    Allow the ticks to be decimals or not
+ * @param  correctionFactor A correction factor
+ * @return The step, minimum value of ticks, maximum value of ticks
+ */
+exports.getTickOfSingleValue = getTickOfSingleValue;
+var _calculateStep = exports.calculateStep = function calculateStep(min, max, tickCount, allowDecimals) {
+  var correctionFactor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
+  // dirty hack (for recharts' test)
+  if (!Number.isFinite((max - min) / (tickCount - 1))) {
+    return {
+      step: new _decimal.default(0),
+      tickMin: new _decimal.default(0),
+      tickMax: new _decimal.default(0)
+    };
+  }
+
+  // The step which is easy to understand between two ticks
+  var step = getFormatStep(new _decimal.default(max).sub(min).div(tickCount - 1), allowDecimals, correctionFactor);
+
+  // A medial value of ticks
+  var middle;
+
+  // When 0 is inside the interval, 0 should be a tick
+  if (min <= 0 && max >= 0) {
+    middle = new _decimal.default(0);
+  } else {
+    // calculate the middle value
+    middle = new _decimal.default(min).add(max).div(2);
+    // minus modulo value
+    middle = middle.sub(new _decimal.default(middle).mod(step));
+  }
+  var belowCount = Math.ceil(middle.sub(min).div(step).toNumber());
+  var upCount = Math.ceil(new _decimal.default(max).sub(middle).div(step).toNumber());
+  var scaleCount = belowCount + upCount + 1;
+  if (scaleCount > tickCount) {
+    // When more ticks need to cover the interval, step should be bigger.
+    return _calculateStep(min, max, tickCount, allowDecimals, correctionFactor + 1);
+  }
+  if (scaleCount < tickCount) {
+    // When less ticks can cover the interval, we should add some additional ticks
+    upCount = max > 0 ? upCount + (tickCount - scaleCount) : upCount;
+    belowCount = max > 0 ? belowCount : belowCount + (tickCount - scaleCount);
+  }
+  return {
+    step,
+    tickMin: middle.sub(new _decimal.default(belowCount).mul(step)),
+    tickMax: middle.add(new _decimal.default(upCount).mul(step))
+  };
+};
+
+/**
+ * Calculate the ticks of an interval. Ticks can appear outside the interval
+ * if it makes them more rounded and nice.
+ *
+ * @param tuple of [min,max] min: The minimum value, max: The maximum value
+ * @param tickCount     The count of ticks
+ * @param allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+function getNiceTickValuesFn(_ref2) {
+  var [min, max] = _ref2;
+  var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;
+  var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  // More than two ticks should be return
+  var count = Math.max(tickCount, 2);
+  var [cormin, cormax] = getValidInterval([min, max]);
+  if (cormin === -Infinity || cormax === Infinity) {
+    var _values = cormax === Infinity ? [cormin, ...(0, _utils.range)(0, tickCount - 1).map(() => Infinity)] : [...(0, _utils.range)(0, tickCount - 1).map(() => -Infinity), cormax];
+    return min > max ? (0, _utils.reverse)(_values) : _values;
+  }
+  if (cormin === cormax) {
+    return getTickOfSingleValue(cormin, tickCount, allowDecimals);
+  }
+
+  // Get the step between two ticks
+  var {
+    step,
+    tickMin,
+    tickMax
+  } = _calculateStep(cormin, cormax, count, allowDecimals, 0);
+  var values = (0, _arithmetic.rangeStep)(tickMin, tickMax.add(new _decimal.default(0.1).mul(step)), step);
+  return min > max ? (0, _utils.reverse)(values) : values;
+}
+
+/**
+ * Calculate the ticks of an interval.
+ * Ticks will be constrained to the interval [min, max] even if it makes them less rounded and nice.
+ *
+ * @param tuple of [min,max] min: The minimum value, max: The maximum value
+ * @param tickCount     The count of ticks. This function may return less than tickCount ticks if the interval is too small.
+ * @param allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+function getTickValuesFixedDomainFn(_ref3, tickCount) {
+  var [min, max] = _ref3;
+  var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+  // More than two ticks should be return
+  var [cormin, cormax] = getValidInterval([min, max]);
+  if (cormin === -Infinity || cormax === Infinity) {
+    return [min, max];
+  }
+  if (cormin === cormax) {
+    return [cormin];
+  }
+  var count = Math.max(tickCount, 2);
+  var step = getFormatStep(new _decimal.default(cormax).sub(cormin).div(count - 1), allowDecimals, 0);
+  var values = [...(0, _arithmetic.rangeStep)(new _decimal.default(cormin), new _decimal.default(cormax), step), cormax];
+  if (allowDecimals === false) {
+    /*
+     * allowDecimals is false means that we want to have integer ticks.
+     * The step is guaranteed to be an integer in the code above which is great start
+     * but when the first step is not an integer, it will start stepping from a decimal value anyway.
+     * So we need to round all the values to integers after the fact.
+     */
+    values = values.map(value => Math.round(value));
+  }
+  return min > max ? (0, _utils.reverse)(values) : values;
+}
+var getNiceTickValues = exports.getNiceTickValues = (0, _utils.memoize)(getNiceTickValuesFn);
+var getTickValuesFixedDomain = exports.getTickValuesFixedDomain = (0, _utils.memoize)(getTickValuesFixedDomainFn);
Index: node_modules/recharts/lib/util/scale/index.js
===================================================================
--- node_modules/recharts/lib/util/scale/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/scale/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "getNiceTickValues", {
+  enumerable: true,
+  get: function get() {
+    return _getNiceTickValues.getNiceTickValues;
+  }
+});
+Object.defineProperty(exports, "getTickValuesFixedDomain", {
+  enumerable: true,
+  get: function get() {
+    return _getNiceTickValues.getTickValuesFixedDomain;
+  }
+});
+var _getNiceTickValues = require("./getNiceTickValues");
Index: node_modules/recharts/lib/util/scale/util/arithmetic.js
===================================================================
--- node_modules/recharts/lib/util/scale/util/arithmetic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/scale/util/arithmetic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,102 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getDigitCount = getDigitCount;
+exports.interpolateNumber = void 0;
+exports.rangeStep = rangeStep;
+exports.uninterpolateTruncation = exports.uninterpolateNumber = void 0;
+var _decimal = _interopRequireDefault(require("decimal.js-light"));
+var _utils = require("./utils");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/**
+ * @fileOverview Some common arithmetic methods
+ * @author xile611
+ * @date 2015-09-17
+ */
+
+/**
+ * Get the digit count of a number.
+ * If the absolute value is in the interval [0.1, 1), the result is 0.
+ * If the absolute value is in the interval [0.01, 0.1), the digit count is -1.
+ * If the absolute value is in the interval [0.001, 0.01), the digit count is -2.
+ *
+ * @param  {Number} value The number
+ * @return {Integer}      Digit count
+ */
+function getDigitCount(value) {
+  var result;
+  if (value === 0) {
+    result = 1;
+  } else {
+    result = Math.floor(new _decimal.default(value).abs().log(10).toNumber()) + 1;
+  }
+  return result;
+}
+
+/**
+ * Get the data in the interval [start, end) with a fixed step.
+ * Also handles JS calculation precision issues.
+ *
+ * @param  {Decimal} start Start point
+ * @param  {Decimal} end   End point, not included
+ * @param  {Decimal} step  Step size
+ * @return {Array}         Array of numbers
+ */
+function rangeStep(start, end, step) {
+  var num = new _decimal.default(start);
+  var i = 0;
+  var result = [];
+
+  // magic number to prevent infinite loop
+  while (num.lt(end) && i < 100000) {
+    result.push(num.toNumber());
+    num = num.add(step);
+    i++;
+  }
+  return result;
+}
+
+/**
+ * Linear interpolation of numbers.
+ *
+ * @param  {Number} a  Endpoint of the domain
+ * @param  {Number} b  Endpoint of the domain
+ * @param  {Number} t  A value in [0, 1]
+ * @return {Number}    A value in the domain
+ */
+var interpolateNumber = exports.interpolateNumber = (0, _utils.curry)((a, b, t) => {
+  var newA = +a;
+  var newB = +b;
+  return newA + t * (newB - newA);
+});
+
+/**
+ * Inverse operation of linear interpolation.
+ *
+ * @param  {Number} a Endpoint of the domain
+ * @param  {Number} b Endpoint of the domain
+ * @param  {Number} x Can be considered as an output value after interpolation
+ * @return {Number}   When x is in the range a ~ b, the return value is in [0, 1]
+ */
+var uninterpolateNumber = exports.uninterpolateNumber = (0, _utils.curry)((a, b, x) => {
+  var diff = b - +a;
+  diff = diff || Infinity;
+  return (x - a) / diff;
+});
+
+/**
+ * Inverse operation of linear interpolation with truncation.
+ *
+ * @param  {Number} a Endpoint of the domain
+ * @param  {Number} b Endpoint of the domain
+ * @param  {Number} x Can be considered as an output value after interpolation
+ * @return {Number}   When x is in the interval a ~ b, the return value is in [0, 1].
+ *                    When x is not in the interval a ~ b, it will be truncated to the interval a ~ b.
+ */
+var uninterpolateTruncation = exports.uninterpolateTruncation = (0, _utils.curry)((a, b, x) => {
+  var diff = b - +a;
+  diff = diff || Infinity;
+  return Math.max(0, Math.min(1, (x - a) / diff));
+});
Index: node_modules/recharts/lib/util/scale/util/utils.js
===================================================================
--- node_modules/recharts/lib/util/scale/util/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/scale/util/utils.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,97 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.reverse = exports.range = exports.memoize = exports.map = exports.curry = exports.compose = exports.PLACE_HOLDER = void 0;
+var identity = i => i;
+var PLACE_HOLDER = exports.PLACE_HOLDER = {
+  '@@functional/placeholder': true
+};
+var isPlaceHolder = val => val === PLACE_HOLDER;
+var curry0 = fn => function _curried() {
+  if (arguments.length === 0 || arguments.length === 1 && isPlaceHolder(arguments.length <= 0 ? undefined : arguments[0])) {
+    return _curried;
+  }
+  return fn(...arguments);
+};
+var curryN = (n, fn) => {
+  if (n === 1) {
+    return fn;
+  }
+  return curry0(function () {
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+    var argsLength = args.filter(arg => arg !== PLACE_HOLDER).length;
+    if (argsLength >= n) {
+      return fn(...args);
+    }
+    return curryN(n - argsLength, curry0(function () {
+      for (var _len2 = arguments.length, restArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+        restArgs[_key2] = arguments[_key2];
+      }
+      var newArgs = args.map(arg => isPlaceHolder(arg) ? restArgs.shift() : arg);
+      return fn(...newArgs, ...restArgs);
+    }));
+  });
+};
+var curry = fn => curryN(fn.length, fn);
+exports.curry = curry;
+var range = (begin, end) => {
+  var arr = [];
+  for (var i = begin; i < end; ++i) {
+    arr[i - begin] = i;
+  }
+  return arr;
+};
+exports.range = range;
+var map = exports.map = curry((fn, arr) => {
+  if (Array.isArray(arr)) {
+    return arr.map(fn);
+  }
+  return Object.keys(arr).map(key => arr[key]).map(fn);
+});
+var compose = exports.compose = function compose() {
+  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+    args[_key3] = arguments[_key3];
+  }
+  if (!args.length) {
+    return identity;
+  }
+  var fns = args.reverse();
+  // first function can receive multiply arguments
+  var firstFn = fns[0];
+  var tailsFn = fns.slice(1);
+  return function () {
+    return tailsFn.reduce((res, fn) => fn(res), firstFn(...arguments));
+  };
+};
+var reverse = arr => {
+  if (Array.isArray(arr)) {
+    return arr.reverse();
+  }
+
+  // can be string
+  return arr.split('').reverse().join('');
+};
+exports.reverse = reverse;
+var memoize = fn => {
+  var lastArgs = null;
+  var lastResult = null;
+  return function () {
+    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+      args[_key4] = arguments[_key4];
+    }
+    if (lastArgs && args.every((val, i) => {
+      var _lastArgs;
+      return val === ((_lastArgs = lastArgs) === null || _lastArgs === void 0 ? void 0 : _lastArgs[i]);
+    })) {
+      return lastResult;
+    }
+    lastArgs = args;
+    lastResult = fn(...args);
+    return lastResult;
+  };
+};
+exports.memoize = memoize;
Index: node_modules/recharts/lib/util/stacks/getStackSeriesIdentifier.js
===================================================================
--- node_modules/recharts/lib/util/stacks/getStackSeriesIdentifier.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/stacks/getStackSeriesIdentifier.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getStackSeriesIdentifier = getStackSeriesIdentifier;
+/**
+ * Returns identifier for stack series which is one individual graphical item in the stack.
+ * @param graphicalItem - The graphical item representing the series in the stack.
+ * @return The identifier for the series in the stack
+ */
+function getStackSeriesIdentifier(graphicalItem) {
+  return graphicalItem === null || graphicalItem === void 0 ? void 0 : graphicalItem.id;
+}
Index: node_modules/recharts/lib/util/stacks/stackTypes.js
===================================================================
--- node_modules/recharts/lib/util/stacks/stackTypes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/stacks/stackTypes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+"use strict";
Index: node_modules/recharts/lib/util/svgPropertiesNoEvents.js
===================================================================
--- node_modules/recharts/lib/util/svgPropertiesNoEvents.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/svgPropertiesNoEvents.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.isSvgElementPropKey = isSvgElementPropKey;
+exports.svgPropertiesNoEvents = svgPropertiesNoEvents;
+var SVGElementPropKeys = ['aria-activedescendant', 'aria-atomic', 'aria-autocomplete', 'aria-busy', 'aria-checked', 'aria-colcount', 'aria-colindex', 'aria-colspan', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-errormessage', 'aria-expanded', 'aria-flowto', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-level', 'aria-live', 'aria-modal', 'aria-multiline', 'aria-multiselectable', 'aria-orientation', 'aria-owns', 'aria-placeholder', 'aria-posinset', 'aria-pressed', 'aria-readonly', 'aria-relevant', 'aria-required', 'aria-roledescription', 'aria-rowcount', 'aria-rowindex', 'aria-rowspan', 'aria-selected', 'aria-setsize', 'aria-sort', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext', 'className', 'color', 'height', 'id', 'lang', 'max', 'media', 'method', 'min', 'name', 'style',
+/*
+ * removed 'type' SVGElementPropKey because we do not currently use any SVG elements
+ * that can use it, and it conflicts with the recharts prop 'type'
+ * https://github.com/recharts/recharts/pull/3327
+ * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/type
+ */
+// 'type',
+'target', 'width', 'role', 'tabIndex', 'accentHeight', 'accumulate', 'additive', 'alignmentBaseline', 'allowReorder', 'alphabetic', 'amplitude', 'arabicForm', 'ascent', 'attributeName', 'attributeType', 'autoReverse', 'azimuth', 'baseFrequency', 'baselineShift', 'baseProfile', 'bbox', 'begin', 'bias', 'by', 'calcMode', 'capHeight', 'clip', 'clipPath', 'clipPathUnits', 'clipRule', 'colorInterpolation', 'colorInterpolationFilters', 'colorProfile', 'colorRendering', 'contentScriptType', 'contentStyleType', 'cursor', 'cx', 'cy', 'd', 'decelerate', 'descent', 'diffuseConstant', 'direction', 'display', 'divisor', 'dominantBaseline', 'dur', 'dx', 'dy', 'edgeMode', 'elevation', 'enableBackground', 'end', 'exponent', 'externalResourcesRequired', 'fill', 'fillOpacity', 'fillRule', 'filter', 'filterRes', 'filterUnits', 'floodColor', 'floodOpacity', 'focusable', 'fontFamily', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontWeight', 'format', 'from', 'fx', 'fy', 'g1', 'g2', 'glyphName', 'glyphOrientationHorizontal', 'glyphOrientationVertical', 'glyphRef', 'gradientTransform', 'gradientUnits', 'hanging', 'horizAdvX', 'horizOriginX', 'href', 'ideographic', 'imageRendering', 'in2', 'in', 'intercept', 'k1', 'k2', 'k3', 'k4', 'k', 'kernelMatrix', 'kernelUnitLength', 'kerning', 'keyPoints', 'keySplines', 'keyTimes', 'lengthAdjust', 'letterSpacing', 'lightingColor', 'limitingConeAngle', 'local', 'markerEnd', 'markerHeight', 'markerMid', 'markerStart', 'markerUnits', 'markerWidth', 'mask', 'maskContentUnits', 'maskUnits', 'mathematical', 'mode', 'numOctaves', 'offset', 'opacity', 'operator', 'order', 'orient', 'orientation', 'origin', 'overflow', 'overlinePosition', 'overlineThickness', 'paintOrder', 'panose1', 'pathLength', 'patternContentUnits', 'patternTransform', 'patternUnits', 'pointerEvents', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'preserveAlpha', 'preserveAspectRatio', 'primitiveUnits', 'r', 'radius', 'refX', 'refY', 'renderingIntent', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'result', 'rotate', 'rx', 'ry', 'seed', 'shapeRendering', 'slope', 'spacing', 'specularConstant', 'specularExponent', 'speed', 'spreadMethod', 'startOffset', 'stdDeviation', 'stemh', 'stemv', 'stitchTiles', 'stopColor', 'stopOpacity', 'strikethroughPosition', 'strikethroughThickness', 'string', 'stroke', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'surfaceScale', 'systemLanguage', 'tableValues', 'targetX', 'targetY', 'textAnchor', 'textDecoration', 'textLength', 'textRendering', 'to', 'transform', 'u1', 'u2', 'underlinePosition', 'underlineThickness', 'unicode', 'unicodeBidi', 'unicodeRange', 'unitsPerEm', 'vAlphabetic', 'values', 'vectorEffect', 'version', 'vertAdvY', 'vertOriginX', 'vertOriginY', 'vHanging', 'vIdeographic', 'viewTarget', 'visibility', 'vMathematical', 'widths', 'wordSpacing', 'writingMode', 'x1', 'x2', 'x', 'xChannelSelector', 'xHeight', 'xlinkActuate', 'xlinkArcrole', 'xlinkHref', 'xlinkRole', 'xlinkShow', 'xlinkTitle', 'xlinkType', 'xmlBase', 'xmlLang', 'xmlns', 'xmlnsXlink', 'xmlSpace', 'y1', 'y2', 'y', 'yChannelSelector', 'z', 'zoomAndPan', 'ref', 'key', 'angle'];
+function isSvgElementPropKey(key) {
+  if (typeof key !== 'string') {
+    return false;
+  }
+  var allowedSvgKeys = SVGElementPropKeys;
+  return allowedSvgKeys.includes(key);
+}
+
+/**
+ * Filters an object to only include SVG properties. Removes all event handlers too.
+ * @param obj - The object to filter
+ * @returns A new object containing only valid SVG properties, excluding event handlers.
+ */
+function svgPropertiesNoEvents(obj) {
+  var filteredEntries = Object.entries(obj).filter(_ref => {
+    var [key] = _ref;
+    return isSvgElementPropKey(key);
+  });
+  return Object.fromEntries(filteredEntries);
+}
Index: node_modules/recharts/lib/util/tooltip/translate.js
===================================================================
--- node_modules/recharts/lib/util/tooltip/translate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/tooltip/translate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,132 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getTooltipCSSClassName = getTooltipCSSClassName;
+exports.getTooltipTranslate = getTooltipTranslate;
+exports.getTooltipTranslateXY = getTooltipTranslateXY;
+exports.getTransformStyle = getTransformStyle;
+var _clsx = require("clsx");
+var _DataUtils = require("../DataUtils");
+var CSS_CLASS_PREFIX = 'recharts-tooltip-wrapper';
+var TOOLTIP_HIDDEN = {
+  visibility: 'hidden'
+};
+function getTooltipCSSClassName(_ref) {
+  var {
+    coordinate,
+    translateX,
+    translateY
+  } = _ref;
+  return (0, _clsx.clsx)(CSS_CLASS_PREFIX, {
+    ["".concat(CSS_CLASS_PREFIX, "-right")]: (0, _DataUtils.isNumber)(translateX) && coordinate && (0, _DataUtils.isNumber)(coordinate.x) && translateX >= coordinate.x,
+    ["".concat(CSS_CLASS_PREFIX, "-left")]: (0, _DataUtils.isNumber)(translateX) && coordinate && (0, _DataUtils.isNumber)(coordinate.x) && translateX < coordinate.x,
+    ["".concat(CSS_CLASS_PREFIX, "-bottom")]: (0, _DataUtils.isNumber)(translateY) && coordinate && (0, _DataUtils.isNumber)(coordinate.y) && translateY >= coordinate.y,
+    ["".concat(CSS_CLASS_PREFIX, "-top")]: (0, _DataUtils.isNumber)(translateY) && coordinate && (0, _DataUtils.isNumber)(coordinate.y) && translateY < coordinate.y
+  });
+}
+function getTooltipTranslateXY(_ref2) {
+  var {
+    allowEscapeViewBox,
+    coordinate,
+    key,
+    offsetTopLeft,
+    position,
+    reverseDirection,
+    tooltipDimension,
+    viewBox,
+    viewBoxDimension
+  } = _ref2;
+  if (position && (0, _DataUtils.isNumber)(position[key])) {
+    return position[key];
+  }
+  var negative = coordinate[key] - tooltipDimension - (offsetTopLeft > 0 ? offsetTopLeft : 0);
+  var positive = coordinate[key] + offsetTopLeft;
+  if (allowEscapeViewBox[key]) {
+    return reverseDirection[key] ? negative : positive;
+  }
+  var viewBoxKey = viewBox[key];
+  if (viewBoxKey == null) {
+    return 0;
+  }
+  if (reverseDirection[key]) {
+    var _tooltipBoundary = negative;
+    var _viewBoxBoundary = viewBoxKey;
+    if (_tooltipBoundary < _viewBoxBoundary) {
+      return Math.max(positive, viewBoxKey);
+    }
+    return Math.max(negative, viewBoxKey);
+  }
+  if (viewBoxDimension == null) {
+    return 0;
+  }
+  var tooltipBoundary = positive + tooltipDimension;
+  var viewBoxBoundary = viewBoxKey + viewBoxDimension;
+  if (tooltipBoundary > viewBoxBoundary) {
+    return Math.max(negative, viewBoxKey);
+  }
+  return Math.max(positive, viewBoxKey);
+}
+function getTransformStyle(_ref3) {
+  var {
+    translateX,
+    translateY,
+    useTranslate3d
+  } = _ref3;
+  return {
+    transform: useTranslate3d ? "translate3d(".concat(translateX, "px, ").concat(translateY, "px, 0)") : "translate(".concat(translateX, "px, ").concat(translateY, "px)")
+  };
+}
+function getTooltipTranslate(_ref4) {
+  var {
+    allowEscapeViewBox,
+    coordinate,
+    offsetTopLeft,
+    position,
+    reverseDirection,
+    tooltipBox,
+    useTranslate3d,
+    viewBox
+  } = _ref4;
+  var cssProperties, translateX, translateY;
+  if (tooltipBox.height > 0 && tooltipBox.width > 0 && coordinate) {
+    translateX = getTooltipTranslateXY({
+      allowEscapeViewBox,
+      coordinate,
+      key: 'x',
+      offsetTopLeft,
+      position,
+      reverseDirection,
+      tooltipDimension: tooltipBox.width,
+      viewBox,
+      viewBoxDimension: viewBox.width
+    });
+    translateY = getTooltipTranslateXY({
+      allowEscapeViewBox,
+      coordinate,
+      key: 'y',
+      offsetTopLeft,
+      position,
+      reverseDirection,
+      tooltipDimension: tooltipBox.height,
+      viewBox,
+      viewBoxDimension: viewBox.height
+    });
+    cssProperties = getTransformStyle({
+      translateX,
+      translateY,
+      useTranslate3d
+    });
+  } else {
+    cssProperties = TOOLTIP_HIDDEN;
+  }
+  return {
+    cssProperties,
+    cssClasses: getTooltipCSSClassName({
+      translateX,
+      translateY,
+      coordinate
+    })
+  };
+}
Index: node_modules/recharts/lib/util/types.js
===================================================================
--- node_modules/recharts/lib/util/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/types.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,178 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.adaptEventsOfChild = exports.adaptEventHandlers = exports.FilteredElementKeyMap = void 0;
+var _react = require("react");
+var _excludeEventProps = require("./excludeEventProps");
+/**
+ * Determines how values are stacked:
+ *
+ * - `none` is the default, it adds values on top of each other. No smarts. Negative values will overlap.
+ * - `expand` make it so that the values always add up to 1 - so the chart will look like a rectangle.
+ * - `wiggle` and `silhouette` tries to keep the chart centered.
+ * - `sign` stacks positive values above zero and negative values below zero. Similar to `none` but handles negatives.
+ * - `positive` ignores all negative values, and then behaves like \`none\`.
+ *
+ * Also see https://d3js.org/d3-shape/stack#stack-offsets
+ * (note that the `diverging` offset in d3 is named `sign` in recharts)
+ */
+
+/**
+ * @deprecated use either `CartesianLayout` or `PolarLayout` instead.
+ * Mixing both charts families leads to ambiguity in the type system.
+ * These two layouts share very few properties, so it is best to keep them separate.
+ */
+
+/**
+ * @deprecated do not use: too many properties, mixing too many concepts, cartesian and polar together, everything optional.
+ */
+
+//
+// Event Handler Types -- Copied from @types/react/index.d.ts and adapted for Props.
+//
+
+var SVGContainerPropKeys = ['viewBox', 'children'];
+var PolyElementKeys = ['points', 'pathLength'];
+
+/** svg element types that have specific attribute filtration requirements */
+
+/** map of svg element types to unique svg attributes that belong to that element */
+var FilteredElementKeyMap = exports.FilteredElementKeyMap = {
+  svg: SVGContainerPropKeys,
+  polygon: PolyElementKeys,
+  polyline: PolyElementKeys
+};
+
+/** The type of easing function to use for animations */
+
+/** Specifies the duration of animation, the unit of this option is ms. */
+
+/**
+ * This object defines the offset of the chart area and width and height and brush and ... it's a bit too much information all in one.
+ * We use it internally but let's not expose it to the outside world.
+ * If you are looking for this information, instead import `ChartOffset` or `PlotArea` from `recharts`.
+ */
+
+/**
+ * The domain of axis.
+ * This is the definition
+ *
+ * Numeric domain is always defined by an array of exactly two values, for the min and the max of the axis.
+ * Categorical domain is defined as array of all possible values.
+ *
+ * Can be specified in many ways:
+ * - array of numbers
+ * - with special strings like 'dataMin' and 'dataMax'
+ * - with special string math like 'dataMin - 100'
+ * - with keyword 'auto'
+ * - or a function
+ * - array of functions
+ * - or a combination of the above
+ */
+
+/**
+ * NumberDomain is an evaluated {@link AxisDomain}.
+ * Unlike {@link AxisDomain}, it has no variety - it's a tuple of two number.
+ * This is after all the keywords and functions were evaluated and what is left is [min, max].
+ *
+ * Know that the min, max values are not guaranteed to be nice numbers - values like -Infinity or NaN are possible.
+ *
+ * There are also `category` axes that have different things than numbers in their domain.
+ */
+
+/** The props definition of base axis */
+
+/** Defines how ticks are placed and whether / how tick collisions are handled.
+ * 'preserveStart' keeps the left tick on collision and ensures that the first tick is always shown.
+ * 'preserveEnd' keeps the right tick on collision and ensures that the last tick is always shown.
+ * 'preserveStartEnd' keeps the left tick on collision and ensures that the first and last ticks always show.
+ * 'equidistantPreserveStart' selects a number N such that every nTh tick will be shown without collision.
+ */
+
+/**
+ * Ticks can be any type when the axis is the type of category.
+ *
+ * Ticks must be numbers when the axis is the type of number.
+ */
+
+var adaptEventHandlers = (props, newHandler) => {
+  if (!props || typeof props === 'function' || typeof props === 'boolean') {
+    return null;
+  }
+  var inputProps = props;
+  if (/*#__PURE__*/(0, _react.isValidElement)(props)) {
+    inputProps = props.props;
+  }
+  if (typeof inputProps !== 'object' && typeof inputProps !== 'function') {
+    return null;
+  }
+  var out = {};
+  Object.keys(inputProps).forEach(key => {
+    if ((0, _excludeEventProps.isEventKey)(key)) {
+      out[key] = newHandler || (e => inputProps[key](inputProps, e));
+    }
+  });
+  return out;
+};
+exports.adaptEventHandlers = adaptEventHandlers;
+var getEventHandlerOfChild = (originalHandler, data, index) => e => {
+  originalHandler(data, index, e);
+  return null;
+};
+var adaptEventsOfChild = (props, data, index) => {
+  if (props === null || typeof props !== 'object' && typeof props !== 'function') {
+    return null;
+  }
+  var out = null;
+  Object.keys(props).forEach(key => {
+    var item = props[key];
+    if ((0, _excludeEventProps.isEventKey)(key) && typeof item === 'function') {
+      if (!out) out = {};
+      out[key] = getEventHandlerOfChild(item, data, index);
+    }
+  });
+  return out;
+};
+
+/**
+ * 'axis' means that all graphical items belonging to this axis tick will be highlighted,
+ * and all will be present in the tooltip.
+ * Tooltip with 'axis' will display when hovering on the chart background.
+ *
+ * 'item' means only the one graphical item being hovered will show in the tooltip.
+ * Tooltip with 'item' will display when hovering over individual graphical items.
+ *
+ * This is calculated internally;
+ * charts have a `defaultTooltipEventType` and `validateTooltipEventTypes` options.
+ *
+ * Users then use <Tooltip shared={true} /> or <Tooltip shared={false} /> to control their preference,
+ * and charts will then see what is allowed and what is not.
+ */
+
+/**
+ * These are the props we are going to pass to an `activeDot` if it is a function or a custom Component
+ */
+
+/**
+ * This is the type of `activeDot` prop on:
+ * - Area
+ * - Line
+ * - Radar
+ */
+
+// TODO we need two different range objects, one for polar and another for cartesian layouts
+
+/**
+ * Simplified version of the MouseEvent so that we don't have to mock the whole thing in tests.
+ *
+ * This is meant to represent the React.MouseEvent
+ * which is a wrapper on top of https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent
+ */
+
+/**
+ * Coordinates relative to the top-left corner of the chart.
+ * Also include scale which means that a chart that's scaled will return the same coordinates as a chart that's not scaled.
+ */
+exports.adaptEventsOfChild = adaptEventsOfChild;
Index: node_modules/recharts/lib/util/useAnimationId.js
===================================================================
--- node_modules/recharts/lib/util/useAnimationId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/useAnimationId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useAnimationId = useAnimationId;
+var _react = require("react");
+var _DataUtils = require("./DataUtils");
+/**
+ * This hook returns a unique animation id for the object input.
+ * If input changes (as in, reference equality is different), the animation id will change.
+ * If input does not change, the animation id will not change.
+ *
+ * This is useful for animations. The Animate component
+ * does have a `shouldReAnimate` prop but that doesn't seem to be doing what the name implies.
+ * Also, we don't always want to re-animate on every render;
+ * we only want to re-animate when the input changes. Not the internal state (e.g. `isAnimating`).
+ *
+ * @param input The object to check for changes. Uses reference equality (=== operator)
+ * @param prefix Optional prefix to use for the animation id
+ * @returns A unique animation id
+ */
+function useAnimationId(input) {
+  var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'animation-';
+  var animationId = (0, _react.useRef)((0, _DataUtils.uniqueId)(prefix));
+  var prevProps = (0, _react.useRef)(input);
+  if (prevProps.current !== input) {
+    animationId.current = (0, _DataUtils.uniqueId)(prefix);
+    prevProps.current = input;
+  }
+  return animationId.current;
+}
Index: node_modules/recharts/lib/util/useElementOffset.js
===================================================================
--- node_modules/recharts/lib/util/useElementOffset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/useElementOffset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useElementOffset = useElementOffset;
+var _react = require("react");
+var EPS = 1;
+
+/**
+ * TODO this documentation does not reflect what this hook is doing, update it.
+ * Stores the `offsetHeight`, `offsetLeft`, `offsetTop`, and `offsetWidth` of a DOM element.
+ */
+
+/**
+ * Use this to listen to element layout changes.
+ *
+ * Very useful for reading actual sizes of DOM elements relative to the viewport.
+ *
+ * @param extraDependencies use this to trigger new DOM dimensions read when any of these change. Good for things like payload and label, that will re-render something down in the children array, but you want to read the layout box of a parent.
+ * @returns [lastElementOffset, updateElementOffset] most recent value, and setter. Pass the setter to a DOM element ref like this: `<div ref={updateElementOffset}>`
+ */
+function useElementOffset() {
+  var extraDependencies = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+  var [lastBoundingBox, setLastBoundingBox] = (0, _react.useState)({
+    height: 0,
+    left: 0,
+    top: 0,
+    width: 0
+  });
+  var updateBoundingBox = (0, _react.useCallback)(node => {
+    if (node != null) {
+      var rect = node.getBoundingClientRect();
+      var box = {
+        height: rect.height,
+        left: rect.left,
+        top: rect.top,
+        width: rect.width
+      };
+      if (Math.abs(box.height - lastBoundingBox.height) > EPS || Math.abs(box.left - lastBoundingBox.left) > EPS || Math.abs(box.top - lastBoundingBox.top) > EPS || Math.abs(box.width - lastBoundingBox.width) > EPS) {
+        setLastBoundingBox({
+          height: box.height,
+          left: box.left,
+          top: box.top,
+          width: box.width
+        });
+      }
+    }
+  }, [lastBoundingBox.width, lastBoundingBox.height, lastBoundingBox.top, lastBoundingBox.left, ...extraDependencies]);
+  return [lastBoundingBox, updateBoundingBox];
+}
Index: node_modules/recharts/lib/util/useId.js
===================================================================
--- node_modules/recharts/lib/util/useId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/useId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useIdFallback = exports.useId = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _DataUtils = require("./DataUtils");
+var _ref;
+function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
+/**
+ * Fallback for React.useId() for versions prior to React 18.
+ * Generates a unique ID using a simple counter and a prefix.
+ *
+ * @returns A unique ID that remains consistent across renders.
+ */
+var useIdFallback = () => {
+  var [id] = React.useState(() => (0, _DataUtils.uniqueId)('uid-'));
+  return id;
+};
+
+/*
+ * This weird syntax is used to avoid a build-time error in React 17 and earlier when building with Webpack.
+ * See https://github.com/webpack/webpack/issues/14814
+ */
+exports.useIdFallback = useIdFallback;
+var useId = exports.useId = (_ref = React['useId'.toString()]) !== null && _ref !== void 0 ? _ref : useIdFallback;
Index: node_modules/recharts/lib/util/useReportScale.js
===================================================================
--- node_modules/recharts/lib/util/useReportScale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/useReportScale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useReportScale = useReportScale;
+var _react = require("react");
+var _hooks = require("../state/hooks");
+var _containerSelectors = require("../state/selectors/containerSelectors");
+var _layoutSlice = require("../state/layoutSlice");
+var _isWellBehavedNumber = require("./isWellBehavedNumber");
+function useReportScale() {
+  var dispatch = (0, _hooks.useAppDispatch)();
+  var [ref, setRef] = (0, _react.useState)(null);
+  var scale = (0, _hooks.useAppSelector)(_containerSelectors.selectContainerScale);
+  (0, _react.useEffect)(() => {
+    if (ref == null) {
+      return;
+    }
+    var rect = ref.getBoundingClientRect();
+    var newScale = rect.width / ref.offsetWidth;
+    if ((0, _isWellBehavedNumber.isWellBehavedNumber)(newScale) && newScale !== scale) {
+      dispatch((0, _layoutSlice.setScale)(newScale));
+    }
+  }, [ref, dispatch, scale]);
+  return setRef;
+}
Index: node_modules/recharts/lib/util/useUniqueId.js
===================================================================
--- node_modules/recharts/lib/util/useUniqueId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/lib/util/useUniqueId.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.useUniqueId = useUniqueId;
+var _useId = require("./useId");
+/**
+ * A hook that generates a unique ID. It uses React.useId() in React 18+ for SSR safety
+ * and falls back to a client-side-only unique ID generator for older versions.
+ *
+ * The ID will stay the same across renders, and you can optionally provide a prefix.
+ *
+ * @param [prefix] - An optional prefix for the generated ID.
+ * @param [customId] - An optional custom ID to override the generated one.
+ * @returns The unique ID.
+ */
+function useUniqueId(prefix, customId) {
+  /*
+   * We have to call this hook here even if we don't use the result because
+   * rules of hooks demand that hooks are never called conditionally.
+   */
+  var generatedId = (0, _useId.useId)();
+
+  // If a custom ID is provided, it always takes precedence.
+  if (customId) {
+    return customId;
+  }
+
+  // Apply the prefix if one was provided.
+  return prefix ? "".concat(prefix, "-").concat(generatedId) : generatedId;
+}
+
+/**
+ * The useUniqueId hook returns a unique ID that is either reused from external props or generated internally.
+ * Either way the ID is now guaranteed to be present so no more nulls or undefined.
+ */
Index: node_modules/recharts/package.json
===================================================================
--- node_modules/recharts/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,173 @@
+{
+  "name": "recharts",
+  "version": "3.1.2",
+  "description": "React charts",
+  "main": "lib/index.js",
+  "module": "es6/index.js",
+  "jsnext:main": "es6/index.js",
+  "types": "types/index.d.ts",
+  "sideEffects": false,
+  "files": [
+    "*.md",
+    "es6",
+    "lib",
+    "umd",
+    "types"
+  ],
+  "keywords": [
+    "react",
+    "reactjs",
+    "chart",
+    "react-component"
+  ],
+  "scripts": {
+    "prepare": "husky",
+    "build": "npm run build-types && npm run build-cjs && npm run build-es6 && npm run build-umd && npm run test-build-output",
+    "build-cjs": "rimraf lib && cross-env NODE_ENV=commonjs babel ./src -d lib --extensions '.js,.ts,.tsx'",
+    "build-es6": "rimraf es6 && cross-env NODE_ENV=es6 babel ./src -d es6 --extensions '.js,.ts,.tsx'",
+    "build-umd": "rimraf umd && cross-env NODE_ENV=production webpack -o umd",
+    "build-types": "rimraf types && npm run tsc",
+    "check-types": "tsc --noEmit && npm run check-types-test && npm run check-types-storybook",
+    "check-types-test": "tsc --project test/tsconfig.json",
+    "check-types-storybook": "tsc --project storybook/tsconfig.json",
+    "test": "vitest run --config vitest.config.mts --project unit",
+    "test-coverage": "vitest run --config vitest.config.mts --coverage --project unit",
+    "test-mutation": "stryker run",
+    "test-watch": "vitest --config vitest.config.mts --project unit",
+    "lint": "eslint \"./src/**/*.{ts,tsx}\"",
+    "lint-test": "eslint \"./test/**/*.{ts,tsx}\"",
+    "lint-storybook": "eslint \"./storybook/**/*.{ts,tsx}\"",
+    "autofix": "eslint \"./src/**/*.{ts,tsx}\" --fix",
+    "analyse": "cross-env NODE_ENV=analyse webpack -o umd/Recharts.js",
+    "tsc": "tsc",
+    "storybook-doctor": "npx storybook doctor --config-dir storybook",
+    "storybook": "npx storybook dev -p 6006 -c storybook",
+    "build-storybook": "npx storybook build -o storybook/public -c storybook",
+    "chromatic": "npx chromatic",
+    "test-build-output": "vitest run --config scripts/vitest-build.config.ts",
+    "test-storybook": "vitest --config vitest.config.mts --project storybook",
+    "test-vr:prepare": "docker compose up -d --build",
+    "test-vr": "docker compose run --rm test-vr playwright-test",
+    "test-vr:update": "docker compose run --rm test-vr playwright-test --update-snapshots",
+    "test-vr:ui": "docker compose run -p 8080:8080 --rm test-vr playwright-test --ui --ui-host=0.0.0.0 --ui-port=8080"
+  },
+  "lint-staged": {
+    "*.{ts,tsx,js,jsx}": [
+      "eslint --fix",
+      "prettier --write"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/recharts/recharts.git"
+  },
+  "author": {
+    "name": "recharts group"
+  },
+  "bugs": {
+    "url": "https://github.com/recharts/recharts/issues"
+  },
+  "homepage": "https://github.com/recharts/recharts",
+  "peerDependencies": {
+    "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+    "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+    "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+  },
+  "dependencies": {
+    "@reduxjs/toolkit": "1.x.x || 2.x.x",
+    "clsx": "^2.1.1",
+    "decimal.js-light": "^2.5.1",
+    "es-toolkit": "^1.39.3",
+    "eventemitter3": "^5.0.1",
+    "immer": "^10.1.1",
+    "react-redux": "8.x.x || 9.x.x",
+    "reselect": "5.1.1",
+    "tiny-invariant": "^1.3.3",
+    "use-sync-external-store": "^1.2.2",
+    "victory-vendor": "^37.0.2"
+  },
+  "devDependencies": {
+    "@babel/cli": "^7.24.8",
+    "@babel/core": "^7.24.9",
+    "@babel/preset-env": "^7.24.8",
+    "@babel/preset-react": "^7.24.7",
+    "@babel/preset-typescript": "^7.24.7",
+    "@babel/runtime": "^7.26.10",
+    "@chromatic-com/storybook": "^4.0.1",
+    "@codecov/bundle-analyzer": "^1.9.1",
+    "@playwright/experimental-ct-react": "^1.53.1",
+    "@reduxjs/toolkit": "^1.9.7",
+    "@stackblitz/sdk": "^1.11.0",
+    "@storybook/addon-a11y": "^9.0.17",
+    "@storybook/addon-docs": "^9.0.17",
+    "@storybook/addon-links": "^9.0.17",
+    "@storybook/addon-onboarding": "^9.0.17",
+    "@storybook/addon-vitest": "^9.0.17",
+    "@storybook/builder-vite": "^9.0.17",
+    "@storybook/icons": "^1.2.12",
+    "@storybook/react-vite": "^9.0.17",
+    "@stryker-mutator/typescript-checker": "^8.2.6",
+    "@stryker-mutator/vitest-runner": "^8.2.6",
+    "@testing-library/jest-dom": "^6.4.8",
+    "@testing-library/react": "^16.0.0",
+    "@testing-library/user-event": "^14.5.2",
+    "@types/d3-interpolate": "^3.0.4",
+    "@types/d3-shape": "^3.1.6",
+    "@types/d3-time-format": "^4.0.3",
+    "@types/node": "20.x.x",
+    "@types/react": "^18.3.3",
+    "@types/react-dom": "^18.3.0",
+    "@types/react-is": "^18.3.0",
+    "@types/react-router-dom": "^5.3.3",
+    "@typescript-eslint/eslint-plugin": "^8.0.1",
+    "@typescript-eslint/parser": "^8.0.1",
+    "@vitejs/plugin-react": "^4.3.1",
+    "@vitest/browser": "3.2.4",
+    "@vitest/coverage-v8": "^3.2.3",
+    "babel-loader": "^9.1.3",
+    "babel-plugin-dev-expression": "^0.2.3",
+    "browserslist": "^4.23.2",
+    "chromatic": "^11.5.6",
+    "cross-env": "^7.0.3",
+    "d3-scale-chromatic": "^3.1.0",
+    "d3-time": "^3.1.0",
+    "d3-time-format": "^4.1.0",
+    "eslint": "^8.57.0",
+    "eslint-config-airbnb": "^19.0.4",
+    "eslint-config-prettier": "^9.1.0",
+    "eslint-plugin-eslint-comments": "^3.2.0",
+    "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-jsx-a11y": "^6.9.0",
+    "eslint-plugin-prettier": "^5.2.1",
+    "eslint-plugin-react": "^7.35.0",
+    "eslint-plugin-react-hooks": "^4.6.2",
+    "eslint-plugin-storybook": "^9.0.17",
+    "glob": "^11.0.0",
+    "husky": "^9.1.1",
+    "jsdom": "^24.1.1",
+    "lint-staged": "^15.2.7",
+    "playwright": "^1.54.1",
+    "prettier": "^3.3.3",
+    "react": "^18.3.1",
+    "react-dom": "^18.3.1",
+    "react-is": "^18.3.1",
+    "react-redux": "^8.1.3",
+    "react-router-dom": "^6.25.1",
+    "rimraf": "^6.0.1",
+    "storybook": "^9.0.17",
+    "terser-webpack-plugin": "^5.3.10",
+    "ts-loader": "^9.5.1",
+    "typescript": "^5.7.2",
+    "update-browserslist-db": "^1.1.0",
+    "vitest": "^3.2.3",
+    "vitest-axe": "^0.1.0",
+    "webpack": "^5.93.0",
+    "webpack-bundle-analyzer": "^4.10.2",
+    "webpack-cli": "^5.1.4",
+    "webpack-dev-server": "^5.0.4"
+  },
+  "engines": {
+    "node": ">=18"
+  },
+  "license": "MIT"
+}
Index: node_modules/recharts/types/animation/Animate.d.ts
===================================================================
--- node_modules/recharts/types/animation/Animate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/Animate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import * as React from 'react';
+import { AnimationManager } from './AnimationManager';
+import { EasingInput } from './easing';
+export interface AnimateProps {
+    from?: Record<string, any>;
+    to?: Record<string, any>;
+    attributeName?: string;
+    duration?: number;
+    begin?: number;
+    easing?: EasingInput;
+    children?: React.ReactNode | ((style: Record<string, any> | string) => React.ReactNode);
+    isActive?: boolean;
+    canBegin?: boolean;
+    onAnimationEnd?: () => void;
+    shouldReAnimate?: boolean;
+    onAnimationStart?: () => void;
+    onAnimationReStart?: () => void;
+    /**
+     * Controls the timeout for the animation. Defaults to production-ready controller,
+     * useful to override for testing or custom timing needs.
+     */
+    animationManager?: AnimationManager;
+}
+export declare function Animate(props: AnimateProps): React.JSX.Element;
Index: node_modules/recharts/types/animation/AnimationManager.d.ts
===================================================================
--- node_modules/recharts/types/animation/AnimationManager.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/AnimationManager.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { TimeoutController } from './timeoutController';
+import { StartAnimationFunction } from './configUpdate';
+export type ReactSmoothStyle = string | object;
+/**
+ * Represents a single item in the ReactSmoothQueue.
+ * The item can be:
+ * - A number representing a delay in milliseconds.
+ * - An object representing a style change
+ * - A StartAnimationFunction that starts eased transition and calls different render
+ *      because of course in Recharts we have to have three ways to do everything
+ * - An arbitrary function to be executed
+ */
+export type ReactSmoothQueueItem = number | ReactSmoothStyle | StartAnimationFunction | (() => void);
+export type ReactSmoothQueue = ReadonlyArray<ReactSmoothQueueItem>;
+export type HandleChangeFn = (currentStyle: ReactSmoothStyle) => null | void;
+export type AnimationManager = {
+    stop: () => void;
+    start: (style: ReactSmoothQueue) => void;
+    subscribe: (handleChange: (style: ReactSmoothStyle) => void) => () => void;
+    getTimeoutController(): TimeoutController;
+};
+export declare function createAnimateManager(timeoutController: TimeoutController): AnimationManager;
Index: node_modules/recharts/types/animation/CSSTransitionAnimate.d.ts
===================================================================
--- node_modules/recharts/types/animation/CSSTransitionAnimate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/CSSTransitionAnimate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import { CSSProperties } from 'react';
+import { AnimationManager, ReactSmoothStyle } from './AnimationManager';
+type CSSTransitionAnimateProps<T extends ReactSmoothStyle> = {
+    animationManager?: AnimationManager;
+    duration?: number;
+    begin?: number;
+    easing?: string;
+    isActive?: boolean;
+    canBegin?: boolean;
+    from: T;
+    to: T;
+    attributeName: string;
+    onAnimationStart?: () => void;
+    onAnimationEnd?: () => void;
+    children: (style: CSSProperties) => React.ReactNode;
+};
+export declare function CSSTransitionAnimate<T extends ReactSmoothStyle>(outsideProps: CSSTransitionAnimateProps<T>): React.ReactNode;
+export {};
Index: node_modules/recharts/types/animation/JavascriptAnimate.d.ts
===================================================================
--- node_modules/recharts/types/animation/JavascriptAnimate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/JavascriptAnimate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { EasingInput } from './easing';
+import { AnimationManager } from './AnimationManager';
+type JavascriptAnimateProps = {
+    animationManager?: AnimationManager;
+    duration?: number;
+    begin?: number;
+    easing?: EasingInput;
+    isActive?: boolean;
+    canBegin?: boolean;
+    onAnimationStart?: () => void;
+    onAnimationEnd?: () => void;
+    children: (time: number) => React.ReactNode;
+};
+export declare function JavascriptAnimate(outsideProps: JavascriptAnimateProps): React.ReactNode;
+export {};
Index: node_modules/recharts/types/animation/configUpdate.d.ts
===================================================================
--- node_modules/recharts/types/animation/configUpdate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/configUpdate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { EasingFunction } from './easing';
+import { TimeoutController } from './timeoutController';
+export declare const alpha: (begin: number, end: number, k: number) => number;
+export type FrameId = number;
+export type RequestAnimationFrameCallback = (time: number) => void;
+export type RequestAnimationFrameDi = (callback: RequestAnimationFrameCallback) => FrameId;
+export type CancelAnimationFrameDi = (handle: FrameId) => void;
+export type CancelAnimationFunction = () => void;
+export type StartAnimationFunction = () => CancelAnimationFunction;
+declare const _default: <T extends Record<string, unknown>>(from: T, to: T, easing: EasingFunction, duration: number, render: (currentStyle: T) => void, timeoutController: TimeoutController) => StartAnimationFunction;
+export default _default;
Index: node_modules/recharts/types/animation/createDefaultAnimationManager.d.ts
===================================================================
--- node_modules/recharts/types/animation/createDefaultAnimationManager.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/createDefaultAnimationManager.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+import { AnimationManager } from './AnimationManager';
+export declare function createDefaultAnimationManager(): AnimationManager;
Index: node_modules/recharts/types/animation/easing.d.ts
===================================================================
--- node_modules/recharts/types/animation/easing.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/easing.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+export declare const ACCURACY = 0.0001;
+type CubicBezierTemplate = `cubic-bezier(${number},${number},${number},${number})`;
+type NamedBezier = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | CubicBezierTemplate;
+type BezierInput = [NamedBezier] | [number, number, number, number];
+export type BezierEasingFunction = {
+    isStepper: false;
+    (t: number): number;
+};
+export declare const configBezier: (...args: BezierInput) => BezierEasingFunction;
+type SpringInput = {
+    stiff?: number;
+    damping?: number;
+    dt?: number;
+};
+export type SpringEasingFunction = {
+    isStepper: true;
+    dt: number;
+    (currX: number, destX: number, currV: number): [number, number];
+};
+export declare const configSpring: (config?: SpringInput) => SpringEasingFunction;
+export type EasingFunction = BezierEasingFunction | SpringEasingFunction;
+export type EasingInput = NamedBezier | 'spring' | EasingFunction;
+export declare const configEasing: (easing: EasingInput) => EasingFunction;
+export {};
Index: node_modules/recharts/types/animation/timeoutController.d.ts
===================================================================
--- node_modules/recharts/types/animation/timeoutController.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/timeoutController.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * Callback type for the timeout function.
+ * Receives current time in milliseconds as an argument.
+ */
+export type CallbackType = (now: number) => void;
+/**
+ * A function that, when called, cancels the timeout.
+ */
+export type CancelableTimeout = () => void;
+export interface TimeoutController {
+    /**
+     * Sets a timeout that executes a callback after a specified delay.
+     * Allows setting multiple timeouts and provides a way to cancel them independently.
+     * @param callback - The function to execute after the delay. Receives the current time in milliseconds as an argument.
+     * @param delay (optional) - The time in milliseconds to wait before executing the callback. Defaults to 0.
+     */
+    setTimeout(callback: CallbackType, delay?: number): CancelableTimeout;
+}
+export declare class RequestAnimationFrameTimeoutController implements TimeoutController {
+    setTimeout(callback: CallbackType, delay?: number): CancelableTimeout;
+}
Index: node_modules/recharts/types/animation/useAnimationManager.d.ts
===================================================================
--- node_modules/recharts/types/animation/useAnimationManager.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/useAnimationManager.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import { AnimationManager } from './AnimationManager';
+export type AnimationManagerFactory = (animationId: string) => AnimationManager;
+export declare const AnimationManagerContext: import("react").Context<AnimationManagerFactory>;
+export declare function useAnimationManager(animationId: string, animationManagerFromProps: AnimationManager | undefined): AnimationManager;
Index: node_modules/recharts/types/animation/util.d.ts
===================================================================
--- node_modules/recharts/types/animation/util.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/animation/util.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+export declare const getDashCase: (name: string) => string;
+export declare const getTransitionVal: (props: ReadonlyArray<string>, duration: string | number, easing: string) => string;
+/**
+ * Finds the intersection of keys between two objects
+ * @param {object} preObj previous object
+ * @param {object} nextObj next object
+ * @returns an array of keys that exist in both objects
+ */
+export declare const getIntersectionKeys: (preObj: Record<string, unknown>, nextObj: Record<string, unknown>) => string[];
+/**
+ * Maps an object to another object
+ * @param {function} fn function to map
+ * @param {object} obj object to map
+ * @returns mapped object
+ */
+export declare const mapObject: <T extends Record<string, any>, R>(fn: (key: keyof T, value: T[keyof T]) => R, obj: T) => { [K in keyof T]: R; };
Index: node_modules/recharts/types/cartesian/Area.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/Area.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/Area.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+import * as React from 'react';
+import { CurveType, Props as CurveProps } from '../shape/Curve';
+import { ActiveDotType, AnimationDuration, AnimationTiming, DataKey, LegendType, TickItem, TooltipType } from '../util/types';
+import { BaseAxisWithScale } from '../state/selectors/axisSelectors';
+import { ChartData } from '../state/chartDataSlice';
+import { ComputedArea } from '../state/selectors/areaSelectors';
+import { AreaSettings } from '../state/types/AreaSettings';
+export type BaseValue = number | 'dataMin' | 'dataMax';
+/**
+ * External props, intended for end users to fill in
+ */
+interface AreaProps {
+    activeDot?: ActiveDotType;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+    baseValue?: BaseValue;
+    className?: string;
+    connectNulls?: boolean;
+    data?: ChartData;
+    dataKey: DataKey<any>;
+    dot?: ActiveDotType;
+    hide?: boolean;
+    id?: string;
+    isAnimationActive?: boolean;
+    isRange?: boolean;
+    label?: any;
+    layout?: 'horizontal' | 'vertical';
+    legendType?: LegendType;
+    name?: string | number;
+    onAnimationEnd?: () => void;
+    onAnimationStart?: () => void;
+    stackId?: string | number;
+    tooltipType?: TooltipType;
+    type?: CurveType;
+    unit?: string | number;
+    xAxisId?: string | number;
+    yAxisId?: string | number;
+}
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+type AreaSvgProps = Omit<CurveProps, 'type' | 'points' | 'ref'>;
+export type Props = AreaSvgProps & AreaProps;
+export declare const getBaseValue: (layout: "horizontal" | "vertical", chartBaseValue: BaseValue | undefined, itemBaseValue: BaseValue | undefined, xAxis: BaseAxisWithScale, yAxis: BaseAxisWithScale) => number;
+export declare function computeArea({ areaSettings: { connectNulls, baseValue: itemBaseValue, dataKey }, stackedData, layout, chartBaseValue, xAxis, yAxis, displayedData, dataStartIndex, xAxisTicks, yAxisTicks, bandSize, }: {
+    areaSettings: AreaSettings;
+    stackedData: number[][] | undefined;
+    layout: 'horizontal' | 'vertical';
+    chartBaseValue: BaseValue | undefined;
+    xAxis: BaseAxisWithScale;
+    yAxis: BaseAxisWithScale;
+    displayedData: ChartData;
+    dataStartIndex: number;
+    xAxisTicks: TickItem[];
+    yAxisTicks: TickItem[];
+    bandSize: number;
+}): ComputedArea;
+export declare function Area(outsideProps: Props): React.JSX.Element;
+export declare namespace Area {
+    var displayName: string;
+}
+export {};
Index: node_modules/recharts/types/cartesian/Bar.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/Bar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/Bar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,83 @@
+import * as React from 'react';
+import { Key, ReactElement } from 'react';
+import { Series } from 'victory-vendor/d3-shape';
+import { Props as RectangleProps } from '../shape/Rectangle';
+import { BarPositionPosition, StackId } from '../util/ChartUtils';
+import { ActiveShape, AnimationDuration, AnimationTiming, ChartOffsetInternal, Coordinate, DataKey, LegendType, PresentationAttributesAdaptChildEvent, TickItem, TooltipType } from '../util/types';
+import { ImplicitLabelType } from '../component/Label';
+import { MinPointSize } from '../util/BarUtils';
+import { BaseAxisWithScale } from '../state/selectors/axisSelectors';
+import { BarSettings } from '../state/types/BarSettings';
+type Rectangle = {
+    x: number | null;
+    y: number | null;
+    width: number;
+    height: number;
+};
+export interface BarRectangleItem extends RectangleProps {
+    value: number | [number, number];
+    /** the coordinate of background rectangle */
+    background?: Rectangle;
+    tooltipPosition: Coordinate;
+    readonly payload?: any;
+    x: number;
+    y: number;
+    width: number;
+    height: number;
+}
+export interface BarProps {
+    className?: string;
+    index?: Key;
+    xAxisId?: string | number;
+    yAxisId?: string | number;
+    stackId?: StackId;
+    barSize?: string | number;
+    unit?: string | number;
+    name?: string | number;
+    dataKey?: DataKey<any>;
+    tooltipType?: TooltipType;
+    legendType?: LegendType;
+    minPointSize?: MinPointSize;
+    maxBarSize?: number;
+    hide?: boolean;
+    shape?: ActiveShape<BarProps, SVGPathElement>;
+    activeBar?: ActiveShape<BarProps, SVGPathElement>;
+    background?: ActiveShape<BarProps, SVGPathElement>;
+    radius?: number | [number, number, number, number];
+    onAnimationStart?: () => void;
+    onAnimationEnd?: () => void;
+    isAnimationActive?: boolean;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+    id?: string;
+    label?: ImplicitLabelType;
+}
+type BarMouseEvent = (data: BarRectangleItem, index: number, event: React.MouseEvent<SVGPathElement, MouseEvent>) => void;
+interface BarEvents {
+    onClick: BarMouseEvent;
+    onMouseEnter: BarMouseEvent;
+    onMouseLeave: BarMouseEvent;
+    onMouseMove: BarMouseEvent;
+}
+type BarSvgProps = Omit<PresentationAttributesAdaptChildEvent<BarRectangleItem, SVGPathElement>, 'radius' | 'name' | 'ref'>;
+export type Props = Partial<BarEvents> & BarProps & Omit<BarSvgProps, keyof BarEvents>;
+export declare function computeBarRectangles({ layout, barSettings: { dataKey, minPointSize: minPointSizeProp }, pos, bandSize, xAxis, yAxis, xAxisTicks, yAxisTicks, stackedData, displayedData, offset, cells, }: {
+    layout: 'horizontal' | 'vertical';
+    barSettings: BarSettings;
+    pos: BarPositionPosition;
+    bandSize: number;
+    xAxis: BaseAxisWithScale;
+    yAxis: BaseAxisWithScale;
+    xAxisTicks: TickItem[];
+    yAxisTicks: TickItem[];
+    stackedData: Series<Record<number, number>, DataKey<any>> | undefined;
+    offset: ChartOffsetInternal;
+    displayedData: any[];
+    cells: ReadonlyArray<ReactElement> | undefined;
+}): ReadonlyArray<BarRectangleItem> | undefined;
+export declare function Bar(outsideProps: Props): React.JSX.Element;
+export declare namespace Bar {
+    var displayName: string;
+}
+export {};
Index: node_modules/recharts/types/cartesian/Brush.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/Brush.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/Brush.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+import * as React from 'react';
+import { ReactElement, SVGAttributes, SVGProps } from 'react';
+import { DataKey, Padding } from '../util/types';
+import { OnBrushUpdate } from '../context/brushUpdateContext';
+type BrushTravellerType = ReactElement<SVGElement> | ((props: TravellerProps) => ReactElement<SVGElement>);
+type BrushTickFormatter = (value: any, index: number) => number | string;
+interface BrushProps {
+    x?: number;
+    y?: number;
+    dy?: number;
+    width?: number;
+    className?: string;
+    ariaLabel?: string;
+    height?: number;
+    travellerWidth?: number;
+    traveller?: BrushTravellerType;
+    gap?: number;
+    padding?: Padding;
+    dataKey?: DataKey<any>;
+    startIndex?: number;
+    endIndex?: number;
+    tickFormatter?: BrushTickFormatter;
+    children?: ReactElement;
+    onChange?: OnBrushUpdate;
+    onDragEnd?: OnBrushUpdate;
+    leaveTimeOut?: number;
+    alwaysShowText?: boolean;
+}
+export type Props = Omit<SVGProps<SVGElement>, 'onChange' | 'onDragEnd' | 'ref'> & BrushProps;
+type TravellerProps = {
+    x: number;
+    y: number;
+    width: number;
+    height: number;
+    stroke?: SVGAttributes<SVGElement>['stroke'];
+};
+export declare function Brush(outsideProps: Props): React.JSX.Element;
+export declare namespace Brush {
+    var displayName: string;
+}
+export {};
Index: node_modules/recharts/types/cartesian/CartesianAxis.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/CartesianAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/CartesianAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,93 @@
+/**
+ * @fileOverview Cartesian Axis
+ */
+import * as React from 'react';
+import { ReactElement, ReactNode, Component, SVGProps } from 'react';
+import { CartesianViewBox, PresentationAttributesAdaptChildEvent, CartesianTickItem, AxisInterval } from '../util/types';
+import { RechartsScale } from '../util/ChartUtils';
+import { XAxisPadding, YAxisPadding } from '../state/cartesianAxisSlice';
+/** The orientation of the axis in correspondence to the chart */
+export type Orientation = 'top' | 'bottom' | 'left' | 'right';
+/** A unit to be appended to a value */
+export type Unit = string | number;
+/** The formatter function of tick */
+export type TickFormatter = (value: any, index: number) => string;
+export interface CartesianAxisProps {
+    className?: string;
+    x?: number;
+    y?: number;
+    width?: number;
+    height?: number;
+    unit?: Unit;
+    orientation?: Orientation;
+    viewBox?: CartesianViewBox;
+    tick?: SVGProps<SVGTextElement> | ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | boolean;
+    axisLine?: boolean | SVGProps<SVGLineElement>;
+    tickLine?: boolean | SVGProps<SVGLineElement>;
+    mirror?: boolean;
+    tickMargin?: number;
+    hide?: boolean;
+    label?: any;
+    /** Padding information passed to custom tick components */
+    padding?: XAxisPadding | YAxisPadding;
+    minTickGap?: number;
+    /**
+     * Careful - this is the same name as XAxis + YAxis `ticks` but completely different object!
+     */
+    ticks?: ReadonlyArray<CartesianTickItem>;
+    tickSize?: number;
+    tickFormatter?: TickFormatter;
+    interval?: AxisInterval;
+    /** Angle in which ticks will be rendered. */
+    angle?: number;
+    /**
+     * This is NOT SVG scale attribute;
+     * this is Recharts scale, based on d3-scale.
+     */
+    scale: RechartsScale;
+    labelRef?: React.RefObject<Element>;
+}
+interface IState {
+    fontSize: string;
+    letterSpacing: string;
+}
+export type Props = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'viewBox' | 'scale'> & CartesianAxisProps;
+export declare class CartesianAxis extends Component<Props, IState> {
+    static displayName: string;
+    tickRefs: React.MutableRefObject<Element[]>;
+    static defaultProps: Partial<Props>;
+    constructor(props: Props);
+    shouldComponentUpdate({ viewBox, ...restProps }: Props, nextState: IState): boolean;
+    /**
+     * Calculate the coordinates of endpoints in ticks
+     * @param  data The data of a simple tick
+     * @return (x1, y1): The coordinate of endpoint close to tick text
+     *  (x2, y2): The coordinate of endpoint close to axis
+     */
+    getTickLineCoord(data: CartesianTickItem): {
+        line: {
+            x1: number;
+            y1: number;
+            x2: number;
+            y2: number;
+        };
+        tick: {
+            x: number;
+            y: number;
+        };
+    };
+    getTickTextAnchor(): string;
+    getTickVerticalAnchor(): "end" | "middle" | "start";
+    renderAxisLine(): React.JSX.Element;
+    static renderTickItem(option: Props['tick'], props: any, value: ReactNode): React.JSX.Element;
+    /**
+     * render the ticks
+     * @param {string} fontSize Fontsize to consider for tick spacing
+     * @param {string} letterSpacing Letter spacing to consider for tick spacing
+     * @param {Array} ticks The ticks to actually render (overrides what was passed in props)
+     * @return {ReactElement | null} renderedTicks
+     */
+    renderTicks(fontSize: string, letterSpacing: string, ticks?: ReadonlyArray<CartesianTickItem>): React.ReactElement | null;
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/cartesian/CartesianGrid.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/CartesianGrid.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/CartesianGrid.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,122 @@
+/**
+ * @fileOverview Cartesian Grid
+ */
+import * as React from 'react';
+import { ReactElement, SVGProps } from 'react';
+import { ChartOffsetInternal } from '../util/types';
+import { AxisPropsNeededForTicksGenerator } from '../util/ChartUtils';
+import { GetTicksInput } from './getTicks';
+import { AxisId } from '../state/cartesianAxisSlice';
+/**
+ * The <CartesianGrid horizontal
+ */
+export type GridLineTypeFunctionProps = Omit<LineItemProps, 'key'> & {
+    key: LineItemProps['key'] | undefined;
+    offset: ChartOffsetInternal;
+};
+export type AxisPropsForCartesianGridTicksGeneration = AxisPropsNeededForTicksGenerator & Omit<GetTicksInput, 'ticks' | 'viewBox'>;
+type GridLineType = SVGProps<SVGLineElement> | ReactElement<SVGElement> | ((props: GridLineTypeFunctionProps) => ReactElement<SVGElement>) | boolean;
+export type HorizontalCoordinatesGenerator = (props: {
+    yAxis: AxisPropsForCartesianGridTicksGeneration;
+    width: number;
+    height: number;
+    offset: ChartOffsetInternal;
+}, syncWithTicks: boolean) => number[];
+export type VerticalCoordinatesGenerator = (props: {
+    xAxis: AxisPropsForCartesianGridTicksGeneration;
+    width: number;
+    height: number;
+    offset: ChartOffsetInternal;
+}, syncWithTicks: boolean) => number[];
+interface InternalCartesianGridProps {
+    width?: number;
+    height?: number;
+    horizontalCoordinatesGenerator?: HorizontalCoordinatesGenerator;
+    verticalCoordinatesGenerator?: VerticalCoordinatesGenerator;
+}
+interface CartesianGridProps extends InternalCartesianGridProps {
+    /**
+     * The x-coordinate of grid.
+     * If left undefined, it will be computed from the chart's offset and margins.
+     */
+    x?: number;
+    /**
+     * The y-coordinate of grid.
+     * If left undefined, it will be computed from the chart's offset and margins.
+     */
+    y?: number;
+    horizontal?: GridLineType;
+    vertical?: GridLineType;
+    /**
+     * Array of coordinates in pixels where to draw horizontal grid lines.
+     * Has priority over syncWithTicks and horizontalValues.
+     */
+    horizontalPoints?: number[];
+    /**
+     * Array of coordinates in pixels where to draw vertical grid lines.
+     * Has priority over syncWithTicks and horizontalValues.
+     */
+    verticalPoints?: number[];
+    /**
+     * Defines background color of stripes.
+     *
+     * The values from this array will be passed in as the `fill` property in a `rect` SVG element.
+     * For possible values see: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill#rect
+     *
+     * In case there are more stripes than colors, the colors will start from beginning.
+     * So for example: verticalFill['yellow', 'black'] produces a pattern of yellow|black|yellow|black
+     *
+     * If this is undefined, or an empty array, then there is no background fill.
+     * Note: Grid lines will be rendered above these background stripes.
+     */
+    verticalFill?: string[];
+    /**
+     * Defines background color of stripes.
+     *
+     * The values from this array will be passed in as the `fill` property in a `rect` SVG element.
+     * For possible values see: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill#rect
+     *
+     * In case there are more stripes than colors, the colors will start from beginning.
+     * So for example: horizontalFill['yellow', 'black'] produces a pattern of yellow|black|yellow|black
+     *
+     * If this is undefined, or an empty array, then there is no background fill.
+     * Note: Grid lines will be rendered above these background stripes.
+     */
+    horizontalFill?: string[];
+    /**
+     * If true, only the lines that correspond to the axes ticks values will be drawn.
+     * If false, extra lines could be added for each axis (at min and max coordinates), if there will not such ticks.
+     * horizontalPoints, verticalPoints, horizontalValues, verticalValues have priority over syncWithTicks.
+     */
+    syncWithTicks?: boolean;
+    /**
+     * Array of values, where horizontal lines will be drawn. Numbers or strings, in dependence on axis type.
+     * Has priority over syncWithTicks but not over horizontalValues.
+     */
+    horizontalValues?: number[] | string[];
+    /**
+     * Array of values, where vertical lines will be drawn. Numbers or strings, in dependence on axis type.
+     * Has priority over syncWithTicks but not over verticalValues.
+     */
+    verticalValues?: number[] | string[];
+    xAxisId?: AxisId;
+    yAxisId?: AxisId;
+}
+type AcceptedSvgProps = Omit<SVGProps<SVGLineElement>, 'offset'>;
+export type Props = AcceptedSvgProps & CartesianGridProps;
+type LineItemProps = Props & {
+    offset: ChartOffsetInternal;
+    xAxis: null | AxisPropsForCartesianGridTicksGeneration;
+    yAxis: null | AxisPropsForCartesianGridTicksGeneration;
+    x1: number;
+    y1: number;
+    x2: number;
+    y2: number;
+    key: string;
+    index: number;
+};
+export declare function CartesianGrid(props: Props): React.JSX.Element;
+export declare namespace CartesianGrid {
+    var displayName: string;
+}
+export {};
Index: node_modules/recharts/types/cartesian/ErrorBar.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/ErrorBar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/ErrorBar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+/**
+ * @fileOverview Render a group of error bar
+ */
+import * as React from 'react';
+import { Component, SVGProps } from 'react';
+import { AnimationTiming, DataKey } from '../util/types';
+import { BarRectangleItem } from './Bar';
+import { LinePointItem } from './Line';
+import { ScatterPointItem } from './Scatter';
+export interface ErrorBarDataItem {
+    x: number | null;
+    y: number | null;
+    value: number;
+    errorVal?: number[] | number;
+}
+/**
+ * So usually the direction is decided by the chart layout.
+ * Horizontal layout means error bars are vertical means direction=y
+ * Vertical layout means error bars are horizontal means direction=x
+ *
+ * Except! In Scatter chart, error bars can go both ways.
+ *
+ * So this property is only ever used in Scatter chart, and ignored elsewhere.
+ */
+export type ErrorBarDirection = 'x' | 'y';
+export type ErrorBarDataPointFormatter = (entry: BarRectangleItem | LinePointItem | ScatterPointItem, dataKey: DataKey<any>, direction: ErrorBarDirection) => ErrorBarDataItem;
+/**
+ * External ErrorBar props, visible for users of the library
+ */
+interface ErrorBarProps {
+    dataKey: DataKey<any>;
+    /** the width of the error bar ends */
+    width?: number;
+    /**
+     * Only used for ScatterChart with error bars in two directions.
+     * Only accepts a value of "x" or "y" and makes the error bars lie in that direction.
+     */
+    direction?: ErrorBarDirection;
+    isAnimationActive?: boolean;
+    animationBegin?: number;
+    animationDuration?: number;
+    animationEasing?: AnimationTiming;
+}
+export type Props = SVGProps<SVGLineElement> & ErrorBarProps;
+export declare class ErrorBar extends Component<Props> {
+    static defaultProps: {
+        readonly stroke: "black";
+        readonly strokeWidth: 1.5;
+        readonly width: 5;
+        readonly offset: 0;
+        readonly isAnimationActive: true;
+        readonly animationBegin: 0;
+        readonly animationDuration: 400;
+        readonly animationEasing: "ease-in-out";
+    };
+    static displayName: string;
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/cartesian/Funnel.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/Funnel.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/Funnel.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,97 @@
+import * as React from 'react';
+import { PureComponent } from 'react';
+import { Props as TrapezoidProps } from '../shape/Trapezoid';
+import { ImplicitLabelListType } from '../component/LabelList';
+import { ActiveShape, AnimationDuration, AnimationTiming, ChartOffsetInternal, Coordinate, DataKey, LegendType, PresentationAttributesAdaptChildEvent, TooltipType } from '../util/types';
+export interface FunnelTrapezoidItem extends TrapezoidProps {
+    value?: number | string;
+    payload?: any;
+    isActive: boolean;
+    tooltipPosition: Coordinate;
+}
+/**
+ * Internal props, combination of external props + defaultProps + private Recharts state
+ */
+interface InternalFunnelProps {
+    trapezoids?: ReadonlyArray<FunnelTrapezoidItem>;
+    className?: string;
+    dataKey: DataKey<any>;
+    nameKey?: DataKey<any>;
+    data?: any[];
+    hide?: boolean;
+    shape?: ActiveShape<FunnelTrapezoidItem, SVGPathElement>;
+    activeShape?: ActiveShape<FunnelTrapezoidItem, SVGPathElement>;
+    legendType?: LegendType;
+    tooltipType?: TooltipType;
+    lastShapeType?: 'triangle' | 'rectangle';
+    reversed?: boolean;
+    onAnimationStart?: () => void;
+    onAnimationEnd?: () => void;
+    isAnimationActive?: boolean;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+    id?: string;
+}
+/**
+ * External props, intended for end users to fill in
+ */
+interface FunnelProps {
+    activeShape?: ActiveShape<FunnelTrapezoidItem, SVGPathElement>;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+    className?: string;
+    data?: any[];
+    dataKey: DataKey<any>;
+    hide?: boolean;
+    id?: string;
+    isAnimationActive?: boolean;
+    label?: ImplicitLabelListType<any>;
+    lastShapeType?: 'triangle' | 'rectangle';
+    legendType?: LegendType;
+    nameKey?: DataKey<any>;
+    onAnimationEnd?: () => void;
+    onAnimationStart?: () => void;
+    reversed?: boolean;
+    shape?: ActiveShape<FunnelTrapezoidItem, SVGPathElement>;
+    tooltipType?: TooltipType;
+}
+type FunnelSvgProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement> & TrapezoidProps, 'ref'>;
+type InternalProps = FunnelSvgProps & InternalFunnelProps;
+export type Props = FunnelSvgProps & FunnelProps;
+type RealFunnelData = any;
+type FunnelComposedData = {
+    trapezoids: ReadonlyArray<FunnelTrapezoidItem>;
+    data: RealFunnelData[];
+};
+export declare class FunnelWithState extends PureComponent<InternalProps> {
+    render(): React.JSX.Element;
+}
+export declare function computeFunnelTrapezoids({ dataKey, nameKey, displayedData, tooltipType, lastShapeType, reversed, offset, customWidth, }: {
+    dataKey: Props['dataKey'];
+    nameKey: Props['nameKey'];
+    offset: ChartOffsetInternal;
+    displayedData: RealFunnelData[];
+    tooltipType?: TooltipType;
+    lastShapeType?: Props['lastShapeType'];
+    reversed?: boolean;
+    customWidth: number | string | undefined;
+}): FunnelComposedData;
+export declare class Funnel extends PureComponent<Props> {
+    static displayName: string;
+    static defaultProps: {
+        readonly stroke: "#fff";
+        readonly fill: "#808080";
+        readonly legendType: "rect";
+        readonly hide: false;
+        readonly isAnimationActive: boolean;
+        readonly animationBegin: 400;
+        readonly animationDuration: 1500;
+        readonly animationEasing: "ease";
+        readonly nameKey: "name";
+        readonly lastShapeType: "triangle";
+    };
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/cartesian/GraphicalItemClipPath.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/GraphicalItemClipPath.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/GraphicalItemClipPath.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { AxisId } from '../state/cartesianAxisSlice';
+type GraphicalItemClipPathProps = {
+    xAxisId: AxisId;
+    yAxisId: AxisId;
+    clipPathId: string;
+};
+export declare function useNeedsClip(xAxisId: AxisId, yAxisId: AxisId): {
+    needClip: boolean;
+    needClipX: boolean;
+    needClipY: boolean;
+};
+export declare function GraphicalItemClipPath({ xAxisId, yAxisId, clipPathId }: GraphicalItemClipPathProps): React.JSX.Element;
+export {};
Index: node_modules/recharts/types/cartesian/Line.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/Line.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/Line.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,64 @@
+import * as React from 'react';
+import { CurveType, Props as CurveProps } from '../shape/Curve';
+import { ImplicitLabelType } from '../component/Label';
+import { ActiveDotType, AnimationDuration, AnimationTiming, DataKey, LegendType, TickItem, TooltipType } from '../util/types';
+import { BaseAxisWithScale } from '../state/selectors/axisSelectors';
+import { AxisId } from '../state/cartesianAxisSlice';
+export interface LinePointItem {
+    readonly value: number;
+    readonly payload?: any;
+    /**
+     * Line coordinates can have gaps in them. We have `connectNulls` prop that allows to connect those gaps anyway.
+     * What it means is that some points can have `null` x or y coordinates.
+     */
+    x: number | null;
+    y: number | null;
+}
+/**
+ * External props, intended for end users to fill in
+ */
+interface LineProps {
+    activeDot?: ActiveDotType;
+    animateNewValues?: boolean;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+    className?: string;
+    connectNulls?: boolean;
+    data?: any;
+    dataKey?: DataKey<any>;
+    dot?: ActiveDotType;
+    hide?: boolean;
+    id?: string;
+    isAnimationActive?: boolean;
+    label?: ImplicitLabelType;
+    legendType?: LegendType;
+    name?: string | number;
+    onAnimationEnd?: () => void;
+    onAnimationStart?: () => void;
+    tooltipType?: TooltipType;
+    type?: CurveType;
+    unit?: string | number;
+    xAxisId?: AxisId;
+    yAxisId?: AxisId;
+}
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+type LineSvgProps = Omit<CurveProps, 'points' | 'pathRef' | 'ref'>;
+export type Props = LineSvgProps & LineProps;
+export declare function computeLinePoints({ layout, xAxis, yAxis, xAxisTicks, yAxisTicks, dataKey, bandSize, displayedData, }: {
+    layout: Props['layout'];
+    xAxis: BaseAxisWithScale;
+    yAxis: BaseAxisWithScale;
+    xAxisTicks: TickItem[];
+    yAxisTicks: TickItem[];
+    dataKey: Props['dataKey'];
+    bandSize: number;
+    displayedData: any[];
+}): ReadonlyArray<LinePointItem>;
+export declare function Line(outsideProps: Props): React.JSX.Element;
+export declare namespace Line {
+    var displayName: string;
+}
+export {};
Index: node_modules/recharts/types/cartesian/ReferenceArea.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/ReferenceArea.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/ReferenceArea.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import * as React from 'react';
+import { Component, ReactElement } from 'react';
+import { ImplicitLabelType } from '../component/Label';
+import { IfOverflow } from '../util/IfOverflow';
+import { Props as RectangleProps } from '../shape/Rectangle';
+interface ReferenceAreaProps {
+    ifOverflow?: IfOverflow;
+    x1?: number | string;
+    x2?: number | string;
+    y1?: number | string;
+    y2?: number | string;
+    className?: number | string;
+    yAxisId?: number | string;
+    xAxisId?: number | string;
+    shape?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>);
+    label?: ImplicitLabelType;
+}
+export type Props = RectangleProps & ReferenceAreaProps;
+export declare class ReferenceArea extends Component<Props> {
+    static displayName: string;
+    static defaultProps: {
+        ifOverflow: string;
+        xAxisId: number;
+        yAxisId: number;
+        r: number;
+        fill: string;
+        fillOpacity: number;
+        stroke: string;
+        strokeWidth: number;
+    };
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/cartesian/ReferenceDot.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/ReferenceDot.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/ReferenceDot.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import * as React from 'react';
+import { Component, ReactElement } from 'react';
+import { Props as DotProps } from '../shape/Dot';
+import { ImplicitLabelType } from '../component/Label';
+import { IfOverflow } from '../util/IfOverflow';
+interface ReferenceDotProps {
+    r?: number;
+    ifOverflow?: IfOverflow;
+    /**
+     * The x-coordinate of the center of the dot.
+     * It should match a value from the XAxis, so if the XAxis is a number axis, this should be a number.
+     * If the XAxis is a category axis, this should be a string.
+     */
+    x?: number | string;
+    y?: number | string;
+    className?: number | string;
+    yAxisId?: number | string;
+    xAxisId?: number | string;
+    shape?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>);
+    label?: ImplicitLabelType;
+}
+export type Props = DotProps & ReferenceDotProps;
+export declare class ReferenceDot extends Component<Props> {
+    static displayName: string;
+    static defaultProps: Partial<Props>;
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/cartesian/ReferenceLine.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/ReferenceLine.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/ReferenceLine.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+/**
+ * @fileOverview Reference Line
+ */
+import * as React from 'react';
+import { Component, ReactElement, SVGProps } from 'react';
+import { ImplicitLabelType } from '../component/Label';
+import { IfOverflow } from '../util/IfOverflow';
+import { CartesianViewBox } from '../util/types';
+import { Props as XAxisProps } from './XAxis';
+import { Props as YAxisProps } from './YAxis';
+import { BaseAxisWithScale } from '../state/selectors/axisSelectors';
+interface InternalReferenceLineProps {
+    viewBox?: CartesianViewBox;
+    xAxis?: BaseAxisWithScale;
+    yAxis?: BaseAxisWithScale;
+    clipPathId?: number | string;
+}
+export type Segment = {
+    x?: number | string;
+    y?: number | string;
+};
+export type ReferenceLinePosition = 'middle' | 'start' | 'end';
+interface ReferenceLineProps extends InternalReferenceLineProps {
+    ifOverflow?: IfOverflow;
+    x?: number | string;
+    y?: number | string;
+    segment?: ReadonlyArray<Segment>;
+    position?: ReferenceLinePosition;
+    className?: number | string;
+    yAxisId?: number | string;
+    xAxisId?: number | string;
+    shape?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>);
+    label?: ImplicitLabelType;
+}
+/**
+ * This excludes `viewBox` prop from svg for two reasons:
+ * 1. The components wants viewBox of object type, and svg wants string
+ *    - so there's a conflict, and the component will throw if it gets string
+ * 2. Internally the component calls `filterProps` which filters the viewBox away anyway
+ */
+export type Props = Omit<SVGProps<SVGLineElement>, 'viewBox'> & ReferenceLineProps;
+type EndPointsPropsSubset = {
+    ifOverflow?: IfOverflow;
+    segment?: ReadonlyArray<Segment>;
+    x?: number | string;
+    y?: number | string;
+};
+export declare const getEndPoints: (scales: any, isFixedX: boolean, isFixedY: boolean, isSegment: boolean, viewBox: CartesianViewBox, position: Props["position"], xAxisOrientation: XAxisProps["orientation"], yAxisOrientation: YAxisProps["orientation"], props: EndPointsPropsSubset) => any[];
+export declare class ReferenceLine extends Component<Props> {
+    static displayName: string;
+    static defaultProps: {
+        ifOverflow: string;
+        xAxisId: number;
+        yAxisId: number;
+        fill: string;
+        stroke: string;
+        fillOpacity: number;
+        strokeWidth: number;
+        position: string;
+    };
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/cartesian/Scatter.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/Scatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/Scatter.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+import * as React from 'react';
+import { ReactElement } from 'react';
+import { ImplicitLabelListType } from '../component/LabelList';
+import { CurveType, Props as CurveProps } from '../shape/Curve';
+import { ActiveShape, AnimationDuration, AnimationTiming, Coordinate, DataKey, LegendType, PresentationAttributesAdaptChildEvent, SymbolType, TickItem } from '../util/types';
+import { TooltipType } from '../component/DefaultTooltipContent';
+import { InnerSymbolsProp } from '../shape/Symbols';
+import { TooltipPayload } from '../state/tooltipSlice';
+import { AxisId } from '../state/cartesianAxisSlice';
+import { BaseAxisWithScale, ZAxisWithScale } from '../state/selectors/axisSelectors';
+import { ScatterSettings } from '../state/types/ScatterSettings';
+interface ScatterPointNode {
+    x?: number | string;
+    y?: number | string;
+    z?: number | string;
+}
+export interface ScatterPointItem {
+    cx?: number;
+    cy?: number;
+    size?: number;
+    node?: ScatterPointNode;
+    payload?: any;
+    tooltipPayload?: TooltipPayload;
+    tooltipPosition: Coordinate;
+}
+export type ScatterCustomizedShape = ActiveShape<ScatterPointItem, SVGPathElement & InnerSymbolsProp> | SymbolType;
+/**
+ * External props, intended for end users to fill in
+ */
+interface ScatterProps {
+    data?: any[];
+    xAxisId?: AxisId;
+    yAxisId?: string | number;
+    zAxisId?: string | number;
+    dataKey?: DataKey<any>;
+    line?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | CurveProps | boolean;
+    lineType?: 'fitting' | 'joint';
+    lineJointType?: CurveType;
+    legendType?: LegendType;
+    tooltipType?: TooltipType;
+    className?: string;
+    name?: string;
+    activeShape?: ScatterCustomizedShape;
+    shape?: ScatterCustomizedShape;
+    hide?: boolean;
+    label?: ImplicitLabelListType<any>;
+    isAnimationActive?: boolean;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+}
+/**
+ * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.
+ */
+type BaseScatterSvgProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'points' | 'ref'>;
+export type Props = BaseScatterSvgProps & ScatterProps;
+export declare function computeScatterPoints({ displayedData, xAxis, yAxis, zAxis, scatterSettings, xAxisTicks, yAxisTicks, cells, }: {
+    displayedData: ReadonlyArray<any>;
+    xAxis: BaseAxisWithScale;
+    yAxis: BaseAxisWithScale;
+    zAxis: ZAxisWithScale;
+    scatterSettings: ScatterSettings;
+    xAxisTicks: TickItem[];
+    yAxisTicks: TickItem[];
+    cells: ReadonlyArray<ReactElement> | undefined;
+}): ReadonlyArray<ScatterPointItem>;
+export declare function Scatter(outsideProps: Props): React.JSX.Element;
+export declare namespace Scatter {
+    var displayName: string;
+}
+export {};
Index: node_modules/recharts/types/cartesian/XAxis.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/XAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/XAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+/**
+ * @fileOverview X Axis
+ */
+import * as React from 'react';
+import { Component } from 'react';
+import { AxisInterval, AxisTick, BaseAxisProps, PresentationAttributesAdaptChildEvent } from '../util/types';
+import { XAxisOrientation, XAxisPadding } from '../state/cartesianAxisSlice';
+interface XAxisProps extends BaseAxisProps {
+    /** The unique id of x-axis */
+    xAxisId?: string | number;
+    /** The height of axis, which need to be set by user */
+    height?: number;
+    mirror?: boolean;
+    orientation?: XAxisOrientation;
+    /**
+     * Ticks can be any type when the axis is the type of category
+     * Ticks must be numbers when the axis is the type of number
+     */
+    ticks?: ReadonlyArray<AxisTick>;
+    padding?: XAxisPadding;
+    minTickGap?: number;
+    interval?: AxisInterval;
+    reversed?: boolean;
+    /** the rotate angle of tick */
+    angle?: number;
+    tickMargin?: number;
+}
+export type Props = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'scale' | 'ref'> & XAxisProps;
+export declare class XAxis extends Component<Props> {
+    static displayName: string;
+    static defaultProps: {
+        allowDataOverflow: boolean;
+        allowDecimals: boolean;
+        allowDuplicatedCategory: boolean;
+        height: number;
+        hide: boolean;
+        mirror: boolean;
+        orientation: XAxisOrientation;
+        padding: XAxisPadding;
+        reversed: boolean;
+        scale: import("../util/types").ScaleType | import("../util/ChartUtils").RechartsScale;
+        tickCount: number;
+        type: import("../util/types").AxisDomainType;
+        xAxisId: number;
+    };
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/cartesian/YAxis.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/YAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/YAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+import * as React from 'react';
+import { Component } from 'react';
+import { AxisInterval, AxisTick, BaseAxisProps, PresentationAttributesAdaptChildEvent } from '../util/types';
+import { YAxisOrientation, YAxisPadding, YAxisWidth } from '../state/cartesianAxisSlice';
+interface YAxisProps extends BaseAxisProps {
+    /** The unique id of y-axis */
+    yAxisId?: string | number;
+    /**
+     * Ticks can be any type when the axis is the type of category
+     * Ticks must be numbers when the axis is the type of number
+     */
+    ticks?: ReadonlyArray<AxisTick>;
+    /**
+     * The width of axis, which need to be set by user.
+     * When set to 'auto', the width will be calculated dynamically based on tick labels and axis labels.
+     */
+    width?: YAxisWidth;
+    mirror?: boolean;
+    orientation?: YAxisOrientation;
+    padding?: YAxisPadding;
+    minTickGap?: number;
+    interval?: AxisInterval;
+    reversed?: boolean;
+    tickMargin?: number;
+    /** the rotate angle of tick */
+    angle?: number;
+}
+export type Props = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'scale' | 'ref'> & YAxisProps;
+export declare const YAxisDefaultProps: Partial<Props>;
+export declare class YAxis extends Component<Props> {
+    static displayName: string;
+    static defaultProps: Partial<Props>;
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/cartesian/ZAxis.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/ZAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/ZAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+import * as React from 'react';
+import { Component } from 'react';
+import { ScaleType, DataKey, AxisDomain } from '../util/types';
+import { RechartsScale } from '../util/ChartUtils';
+import { AxisRange } from '../state/selectors/axisSelectors';
+export interface Props {
+    type?: 'number' | 'category';
+    /** The name of data displayed in the axis */
+    name?: string;
+    /** The unit of data displayed in the axis */
+    unit?: string;
+    /** The unique id of z-axis */
+    zAxisId?: string | number;
+    /** The key of data displayed in the axis */
+    dataKey?: DataKey<any>;
+    /** The range of axis */
+    range?: AxisRange;
+    scale?: ScaleType | RechartsScale | undefined;
+    /** The domain of scale in this axis */
+    domain?: AxisDomain;
+}
+export declare class ZAxis extends Component<Props> {
+    static displayName: string;
+    static defaultProps: {
+        zAxisId: number;
+        range: AxisRange;
+        scale: ScaleType | RechartsScale;
+        type: import("../util/types").AxisDomainType;
+    };
+    render(): React.JSX.Element;
+}
Index: node_modules/recharts/types/cartesian/getEquidistantTicks.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/getEquidistantTicks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/getEquidistantTicks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import { CartesianTickItem } from '../util/types';
+import { Sign } from './getTicks';
+export declare function getEquidistantTicks(sign: Sign, boundaries: {
+    start: number;
+    end: number;
+}, getTickSize: (tick: CartesianTickItem, index: number) => number, ticks: ReadonlyArray<CartesianTickItem>, minTickGap: number): ReadonlyArray<CartesianTickItem>;
Index: node_modules/recharts/types/cartesian/getTicks.d.ts
===================================================================
--- node_modules/recharts/types/cartesian/getTicks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/cartesian/getTicks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { CartesianTickItem, CartesianViewBoxRequired } from '../util/types';
+import { CartesianAxisSettings, XAxisOrientation, YAxisOrientation } from '../state/cartesianAxisSlice';
+export type Sign = 0 | 1 | -1;
+export type GetTicksInput = {
+    angle: number;
+    interval: CartesianAxisSettings['interval'];
+    minTickGap: number;
+    orientation: XAxisOrientation | YAxisOrientation;
+    tick: CartesianAxisSettings['tick'];
+    tickFormatter: CartesianAxisSettings['tickFormatter'];
+    ticks: ReadonlyArray<CartesianTickItem>;
+    unit: CartesianAxisSettings['unit'];
+    viewBox: CartesianViewBoxRequired;
+};
+export declare function getTicks(props: GetTicksInput, fontSize?: string, letterSpacing?: string): ReadonlyArray<CartesianTickItem>;
Index: node_modules/recharts/types/chart/AreaChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/AreaChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/AreaChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+import { CartesianChartProps } from '../util/types';
+export declare const AreaChart: React.ForwardRefExoticComponent<CartesianChartProps & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/BarChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/BarChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/BarChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+import { CartesianChartProps } from '../util/types';
+export declare const BarChart: React.ForwardRefExoticComponent<CartesianChartProps & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/CartesianChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/CartesianChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/CartesianChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { CartesianChartProps, TooltipEventType } from '../util/types';
+import { TooltipPayloadSearcher } from '../state/tooltipSlice';
+/**
+ * These are one-time, immutable options that decide the chart's behavior.
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
+ * but usually we would expect that they use one of the convenience components like BarChart, LineChart, etc.
+ */
+export type CartesianChartOptions = {
+    chartName: string;
+    defaultTooltipEventType: TooltipEventType;
+    validateTooltipEventTypes: ReadonlyArray<TooltipEventType>;
+    tooltipPayloadSearcher: TooltipPayloadSearcher;
+    categoricalChartProps: CartesianChartProps;
+};
+export declare const CartesianChart: React.ForwardRefExoticComponent<CartesianChartOptions & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/CategoricalChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/CategoricalChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/CategoricalChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import * as React from 'react';
+import { CartesianChartProps } from '../util/types';
+export declare const CategoricalChart: React.ForwardRefExoticComponent<CartesianChartProps & {
+    width: NonNullable<CartesianChartProps["width"]>;
+    height: NonNullable<CartesianChartProps["height"]>;
+} & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/ComposedChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/ComposedChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/ComposedChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+import { CartesianChartProps } from '../util/types';
+export declare const ComposedChart: React.ForwardRefExoticComponent<CartesianChartProps & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/FunnelChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/FunnelChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/FunnelChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+import { CartesianChartProps } from '../util/types';
+export declare const FunnelChart: React.ForwardRefExoticComponent<CartesianChartProps & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/LineChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/LineChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/LineChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+import { CartesianChartProps } from '../util/types';
+export declare const LineChart: React.ForwardRefExoticComponent<CartesianChartProps & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/PieChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/PieChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/PieChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+import { PolarChartProps } from '../util/types';
+export declare const PieChart: React.ForwardRefExoticComponent<PolarChartProps & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/PolarChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/PolarChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/PolarChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import * as React from 'react';
+import { PolarChartProps, TooltipEventType } from '../util/types';
+import { TooltipPayloadSearcher } from '../state/tooltipSlice';
+/**
+ * These props are required for the PolarChart to function correctly.
+ * Users usually would not need to specify these explicitly,
+ * because the convenience components like PieChart, RadarChart, etc.
+ * will provide these defaults.
+ * We can't have the defaults in this file because each of those convenience components
+ * have their own opinions about what they should be.
+ */
+type PolarChartPropsWithDefaults = PolarChartProps & {
+    cx: NonNullable<PolarChartProps['cx']>;
+    cy: NonNullable<PolarChartProps['cy']>;
+    startAngle: NonNullable<PolarChartProps['startAngle']>;
+    endAngle: NonNullable<PolarChartProps['endAngle']>;
+    innerRadius: NonNullable<PolarChartProps['innerRadius']>;
+    outerRadius: NonNullable<PolarChartProps['outerRadius']>;
+};
+/**
+ * These are one-time, immutable options that decide the chart's behavior.
+ * Users who wish to call CartesianChart may decide to pass these options explicitly,
+ * but usually we would expect that they use one of the convenience components like PieChart, RadarChart, etc.
+ */
+export type PolarChartOptions = {
+    chartName: string;
+    defaultTooltipEventType: TooltipEventType;
+    validateTooltipEventTypes: ReadonlyArray<TooltipEventType>;
+    tooltipPayloadSearcher: TooltipPayloadSearcher;
+    categoricalChartProps: PolarChartPropsWithDefaults;
+};
+export declare const PolarChart: React.ForwardRefExoticComponent<PolarChartOptions & React.RefAttributes<SVGSVGElement>>;
+export {};
Index: node_modules/recharts/types/chart/RadarChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/RadarChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/RadarChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+import { PolarChartProps } from '../util/types';
+export declare const RadarChart: React.ForwardRefExoticComponent<PolarChartProps & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/RadialBarChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/RadialBarChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/RadialBarChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+import { PolarChartProps } from '../util/types';
+export declare const RadialBarChart: React.ForwardRefExoticComponent<PolarChartProps & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/RechartsWrapper.d.ts
===================================================================
--- node_modules/recharts/types/chart/RechartsWrapper.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/RechartsWrapper.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { CSSProperties, ReactNode, Ref } from 'react';
+import { ExternalMouseEvents } from './types';
+type Nullable<T> = {
+    [P in keyof T]: T[P] | undefined;
+};
+export type RechartsWrapperProps = Nullable<ExternalMouseEvents> & {
+    children: ReactNode;
+    width: number;
+    height: number;
+    className?: string;
+    style?: CSSProperties;
+    ref?: Ref<HTMLDivElement>;
+};
+export declare const RechartsWrapper: React.ForwardRefExoticComponent<Omit<RechartsWrapperProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
+export {};
Index: node_modules/recharts/types/chart/Sankey.d.ts
===================================================================
--- node_modules/recharts/types/chart/Sankey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/Sankey.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,105 @@
+import * as React from 'react';
+import { MouseEvent, PureComponent, ReactElement, SVGProps } from 'react';
+import { Props as RectangleProps } from '../shape/Rectangle';
+import { Margin, DataKey, SankeyLink, SankeyNode } from '../util/types';
+import { TooltipPayloadSearcher } from '../state/tooltipSlice';
+export declare const sankeyPayloadSearcher: TooltipPayloadSearcher<any, any>;
+interface LinkDataItem {
+    source: number;
+    target: number;
+    value: number;
+}
+export interface NodeProps extends Omit<SVGProps<SVGRectElement>, 'height' | 'width'> {
+    height: number;
+    width: number;
+    payload: SankeyNode;
+    index: number;
+    x: number;
+    y: number;
+}
+export interface LinkProps extends SVGProps<SVGPathElement> {
+    sourceX: number;
+    targetX: number;
+    sourceY: number;
+    targetY: number;
+    sourceControlX: number;
+    targetControlX: number;
+    sourceRelativeY: number;
+    targetRelativeY: number;
+    linkWidth: number;
+    index: number;
+    payload: Omit<SankeyLink, 'source' | 'target'> & {
+        source: SankeyNode;
+        target: SankeyNode;
+    };
+}
+export interface SankeyData {
+    nodes: any[];
+    links: LinkDataItem[];
+}
+type SankeyNodeOptions = ReactElement<SVGProps<SVGRectElement>> | ((props: NodeProps) => ReactElement<SVGProps<SVGRectElement>>) | RectangleProps;
+type SankeyLinkOptions = ReactElement<SVGProps<SVGPathElement>> | ((props: LinkProps) => ReactElement<SVGProps<SVGPathElement>>) | SVGProps<SVGPathElement>;
+interface SankeyProps {
+    nameKey?: DataKey<any>;
+    dataKey?: DataKey<any>;
+    width?: number;
+    height?: number;
+    data: SankeyData;
+    nodePadding?: number;
+    nodeWidth?: number;
+    linkCurvature?: number;
+    iterations?: number;
+    node?: SankeyNodeOptions;
+    link?: SankeyLinkOptions;
+    style?: React.CSSProperties;
+    className?: string;
+    children?: any;
+    margin?: Margin;
+    onClick?: (item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent) => void;
+    onMouseEnter?: (item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent) => void;
+    onMouseLeave?: (item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent) => void;
+    sort?: boolean;
+}
+type Props = SVGProps<SVGSVGElement> & SankeyProps;
+type SankeyElementType = 'node' | 'link';
+interface State {
+    nodes: SankeyNode[];
+    links: SankeyLink[];
+    modifiedNodes: NodeProps[];
+    modifiedLinks: LinkProps[];
+    sort?: boolean;
+    prevData?: SankeyData;
+    prevWidth?: number;
+    prevHeight?: number;
+    prevMargin?: Margin;
+    prevIterations?: number;
+    prevNodeWidth?: number;
+    prevNodePadding?: number;
+    prevSort?: boolean;
+    tooltipPortal?: HTMLElement | null;
+}
+export declare class Sankey extends PureComponent<Props, State> {
+    static displayName: string;
+    static defaultProps: {
+        nameKey: string;
+        dataKey: string;
+        nodePadding: number;
+        nodeWidth: number;
+        linkCurvature: number;
+        iterations: number;
+        margin: {
+            top: number;
+            right: number;
+            bottom: number;
+            left: number;
+        };
+        sort: boolean;
+    };
+    state: State;
+    static getDerivedStateFromProps(nextProps: Props, prevState: State): State;
+    handleMouseEnter(item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent): void;
+    handleMouseLeave(item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent): void;
+    handleClick(item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent): void;
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/chart/ScatterChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/ScatterChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/ScatterChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+import { CartesianChartProps } from '../util/types';
+export declare const ScatterChart: React.ForwardRefExoticComponent<CartesianChartProps & React.RefAttributes<SVGSVGElement>>;
Index: node_modules/recharts/types/chart/SunburstChart.d.ts
===================================================================
--- node_modules/recharts/types/chart/SunburstChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/SunburstChart.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+import * as React from 'react';
+import { TooltipIndex, TooltipPayloadSearcher } from '../state/tooltipSlice';
+import { DataKey } from '../util/types';
+export interface SunburstData {
+    [key: string]: any;
+    name: string;
+    value?: number;
+    fill?: string;
+    tooltipIndex?: TooltipIndex | undefined;
+    children?: SunburstData[];
+}
+interface TextOptions {
+    fontFamily?: string;
+    fontWeight?: string;
+    paintOrder?: string;
+    stroke?: string;
+    fill?: string;
+    fontSize?: string;
+    pointerEvents?: string;
+}
+export interface SunburstChartProps {
+    className?: string;
+    data: SunburstData;
+    width?: number;
+    height?: number;
+    padding?: number;
+    dataKey?: string;
+    nameKey?: DataKey<any>;
+    ringPadding?: number;
+    innerRadius?: number;
+    outerRadius?: number;
+    /** The abscissa of pole in polar coordinate  */
+    cx?: number;
+    /** The ordinate of pole in polar coordinate  */
+    cy?: number;
+    /** Angle in degrees from which the chart should start.  */
+    startAngle?: number;
+    /** Angle, in degrees, at which the chart should end. Can be used to generate partial sunbursts.  */
+    endAngle?: number;
+    children?: React.ReactNode;
+    fill?: string;
+    stroke?: string;
+    textOptions?: TextOptions;
+    onMouseEnter?: (node: SunburstData, e: React.MouseEvent) => void;
+    onMouseLeave?: (node: SunburstData, e: React.MouseEvent) => void;
+    onClick?: (node: SunburstData) => void;
+}
+export declare const payloadSearcher: TooltipPayloadSearcher<SunburstData[], SunburstData>;
+export declare const addToSunburstNodeIndex: (indexInChildrenArr: number, activeTooltipIndexSoFar?: TooltipIndex | undefined) => TooltipIndex;
+export declare const SunburstChart: (props: SunburstChartProps) => React.JSX.Element;
+export {};
Index: node_modules/recharts/types/chart/Treemap.d.ts
===================================================================
--- node_modules/recharts/types/chart/Treemap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/Treemap.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+import * as React from 'react';
+import { AnimationDuration, AnimationTiming, DataKey } from '../util/types';
+import { TooltipIndex, TooltipPayloadSearcher } from '../state/tooltipSlice';
+/**
+ * This is what end users defines as `data` on Treemap.
+ */
+export interface TreemapDataType {
+    children?: ReadonlyArray<TreemapDataType>;
+    [key: string]: unknown;
+}
+/**
+ * This is what is returned from `squarify`, the final treemap data structure
+ * that gets rendered and is stored in
+ */
+export interface TreemapNode {
+    children: ReadonlyArray<TreemapNode>;
+    value: number;
+    depth: number;
+    index: number;
+    x: number;
+    y: number;
+    width: number;
+    height: number;
+    name: string;
+    tooltipIndex: TooltipIndex;
+    [k: string]: any;
+}
+export declare const treemapPayloadSearcher: TooltipPayloadSearcher<TreemapNode, TreemapNode>;
+export declare const addToTreemapNodeIndex: (indexInChildrenArr: number, activeTooltipIndexSoFar?: TooltipIndex | undefined) => TooltipIndex;
+export declare const computeNode: ({ depth, node, index, dataKey, nameKey, nestedActiveTooltipIndex, }: {
+    depth: number;
+    node: TreemapNode;
+    index: number;
+    dataKey: DataKey<any>;
+    nameKey: DataKey<any>;
+    nestedActiveTooltipIndex: TooltipIndex | undefined;
+}) => TreemapNode;
+export interface Props {
+    width?: number;
+    height?: number;
+    data?: ReadonlyArray<TreemapDataType>;
+    /**
+     * @deprecated unused prop, doesn't do anything, use `key` instead
+     */
+    animationId?: number;
+    style?: any;
+    aspectRatio?: number;
+    content?: React.ReactElement | ((props: TreemapNode) => React.ReactElement);
+    fill?: string;
+    stroke?: string;
+    className?: string;
+    nameKey?: DataKey<any>;
+    dataKey?: DataKey<any>;
+    children?: any;
+    type?: 'flat' | 'nest';
+    colorPanel?: [];
+    nestIndexContent?: React.ReactElement | ((item: any, i: number) => any);
+    onAnimationStart?: () => void;
+    onAnimationEnd?: () => void;
+    onMouseEnter?: (node: TreemapNode, e: any) => void;
+    onMouseLeave?: (node: TreemapNode, e: any) => void;
+    onClick?: (node: TreemapNode) => void;
+    isAnimationActive?: boolean;
+    isUpdateAnimationActive?: boolean;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+}
+export declare function Treemap(props: Props): React.JSX.Element;
Index: node_modules/recharts/types/chart/types.d.ts
===================================================================
--- node_modules/recharts/types/chart/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/chart/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { SyntheticEvent } from 'react';
+import { MouseHandlerDataParam } from '../synchronisation/types';
+export type TooltipTrigger = 'hover' | 'click';
+export type CategoricalChartFunc = (nextState: MouseHandlerDataParam, event: SyntheticEvent) => void;
+export interface ExternalMouseEvents {
+    onClick: CategoricalChartFunc;
+    onMouseLeave: CategoricalChartFunc;
+    onMouseEnter: CategoricalChartFunc;
+    onMouseMove: CategoricalChartFunc;
+    onMouseDown: CategoricalChartFunc;
+    onMouseUp: CategoricalChartFunc;
+    onContextMenu: CategoricalChartFunc;
+    onDoubleClick: CategoricalChartFunc;
+    onTouchStart: CategoricalChartFunc;
+    onTouchMove: CategoricalChartFunc;
+    onTouchEnd: CategoricalChartFunc;
+}
Index: node_modules/recharts/types/component/ActivePoints.d.ts
===================================================================
--- node_modules/recharts/types/component/ActivePoints.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/ActivePoints.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { ActiveDotType, DataKey } from '../util/types';
+export interface PointType {
+    readonly x: number | null;
+    readonly y: number | null;
+    readonly value?: any;
+    readonly payload?: any;
+}
+type ActivePointsProps = {
+    points: ReadonlyArray<PointType>;
+    /**
+     * Different graphical elements have different opinion on what is their main color.
+     * Sometimes stroke, sometimes fill, sometimes combination.
+     * `undefined` means that the color is not set, and the point will be transparent.
+     */
+    mainColor: string | undefined;
+    itemDataKey: DataKey<any> | undefined;
+    activeDot: ActiveDotType;
+};
+export declare function ActivePoints({ points, mainColor, activeDot, itemDataKey }: ActivePointsProps): React.JSX.Element;
+export {};
Index: node_modules/recharts/types/component/Cell.d.ts
===================================================================
--- node_modules/recharts/types/component/Cell.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/Cell.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+/**
+ * @fileOverview Cross
+ */
+import type { FunctionComponent, SVGProps } from 'react';
+export type Props = SVGProps<SVGElement>;
+export declare const Cell: FunctionComponent<Props>;
Index: node_modules/recharts/types/component/Cursor.d.ts
===================================================================
--- node_modules/recharts/types/component/Cursor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/Cursor.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import * as React from 'react';
+import { ReactElement, SVGProps } from 'react';
+import { ChartCoordinate, ChartOffsetInternal, LayoutType, TooltipEventType } from '../util/types';
+import { TooltipPayload } from '../state/tooltipSlice';
+/**
+ * If set false, no cursor will be drawn when tooltip is active.
+ * If set an object, the option is the configuration of cursor.
+ * If set a React element, the option is the custom react element of drawing cursor
+ */
+export type CursorDefinition = boolean | ReactElement | SVGProps<SVGElement>;
+export type CursorProps = {
+    cursor: CursorDefinition;
+    tooltipEventType: TooltipEventType;
+    coordinate: ChartCoordinate;
+    payload: TooltipPayload;
+    index: string;
+};
+export type CursorConnectedProps = CursorProps & {
+    tooltipAxisBandSize: number;
+    layout: LayoutType;
+    offset: ChartOffsetInternal;
+    coordinate: ChartCoordinate;
+    payload: TooltipPayload;
+    index: string;
+    chartName: string;
+};
+export declare function CursorInternal(props: CursorConnectedProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | React.FunctionComponentElement<any>;
+export declare function Cursor(props: CursorProps): React.JSX.Element;
Index: node_modules/recharts/types/component/Customized.d.ts
===================================================================
--- node_modules/recharts/types/component/Customized.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/Customized.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * @fileOverview Customized
+ */
+import * as React from 'react';
+import { Component, FunctionComponent, ReactElement } from 'react';
+type Comp<P> = FunctionComponent<P> | Component<P> | ReactElement<P>;
+export type Props<P, C extends Comp<P>> = P & {
+    component: C;
+};
+/**
+ * custom svg elements by rechart instance props and state.
+ * @returns {Object}   svg elements
+ */
+export declare function Customized<P, C extends Comp<P>>({ component, ...props }: Props<P, C>): React.JSX.Element;
+export declare namespace Customized {
+    var displayName: string;
+}
+export {};
Index: node_modules/recharts/types/component/DefaultLegendContent.d.ts
===================================================================
--- node_modules/recharts/types/component/DefaultLegendContent.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/DefaultLegendContent.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+/**
+ * @fileOverview Default Legend Content
+ */
+import * as React from 'react';
+import { PureComponent, ReactNode, MouseEvent, ReactElement } from 'react';
+import { DataKey, LegendType, LayoutType, PresentationAttributesAdaptChildEvent } from '../util/types';
+export type ContentType = ReactElement | ((props: Props) => ReactNode);
+export type IconType = Exclude<LegendType, 'none'>;
+export type HorizontalAlignmentType = 'center' | 'left' | 'right';
+export type VerticalAlignmentType = 'top' | 'bottom' | 'middle';
+export type Formatter = (value: any, entry: LegendPayload, index: number) => ReactNode;
+export interface LegendPayload {
+    /**
+     * This is the text that will be displayed in the legend in the DOM.
+     * If undefined, the text will not be displayed, so the icon will be rendered without text.
+     */
+    value: string | undefined;
+    type?: LegendType;
+    color?: string;
+    payload?: {
+        strokeDasharray?: number | string;
+        value?: any;
+    };
+    formatter?: Formatter;
+    inactive?: boolean;
+    legendIcon?: ReactElement<SVGElement>;
+    dataKey?: DataKey<any>;
+}
+interface InternalProps {
+    content?: ContentType;
+    iconSize?: number;
+    iconType?: IconType;
+    layout?: LayoutType;
+    align?: HorizontalAlignmentType;
+    verticalAlign?: VerticalAlignmentType;
+    inactiveColor?: string;
+    formatter?: Formatter;
+    onMouseEnter?: (data: LegendPayload, index: number, event: MouseEvent) => void;
+    onMouseLeave?: (data: LegendPayload, index: number, event: MouseEvent) => void;
+    onClick?: (data: LegendPayload, index: number, event: MouseEvent) => void;
+    /**
+     * DefaultLegendContent.payload is omitted from Legend props.
+     * A custom payload can be passed here if desired or it can be passed from the Legend "content" callback.
+     */
+    payload?: ReadonlyArray<LegendPayload>;
+}
+export type Props = InternalProps & Omit<PresentationAttributesAdaptChildEvent<any, ReactElement>, keyof InternalProps>;
+export declare class DefaultLegendContent extends PureComponent<Props> {
+    static displayName: string;
+    static defaultProps: Partial<Props>;
+    /**
+     * Render the path of icon
+     * @param data Data of each legend item
+     * @param iconType if defined, it will always render this icon. If undefined then it uses icon from data.type
+     * @return Path element
+     */
+    renderIcon(data: LegendPayload, iconType: IconType | undefined): React.JSX.Element;
+    /**
+     * Draw items of legend
+     * @return Items
+     */
+    renderItems(): React.JSX.Element[];
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/component/DefaultTooltipContent.d.ts
===================================================================
--- node_modules/recharts/types/component/DefaultTooltipContent.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/DefaultTooltipContent.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+/**
+ * @fileOverview Default Tooltip Content
+ */
+import * as React from 'react';
+import { CSSProperties, ReactNode, SVGProps } from 'react';
+import { DataKey } from '../util/types';
+export type TooltipType = 'none';
+export type ValueType = number | string | Array<number | string>;
+export type NameType = number | string;
+export type Formatter<TValue extends ValueType, TName extends NameType> = (value: TValue, name: TName, item: Payload<TValue, TName>, index: number, payload: ReadonlyArray<Payload<TValue, TName>>) => [React.ReactNode, TName] | React.ReactNode;
+export interface Payload<TValue extends ValueType, TName extends NameType> extends Omit<SVGProps<SVGElement>, 'name'> {
+    type?: TooltipType;
+    color?: string;
+    formatter?: Formatter<TValue, TName>;
+    name?: TName;
+    value?: TValue;
+    unit?: ReactNode;
+    fill?: string;
+    dataKey?: DataKey<any>;
+    nameKey?: DataKey<any>;
+    payload?: any;
+    chartType?: string;
+    stroke?: string;
+    strokeDasharray?: string | number;
+    strokeWidth?: number | string;
+    className?: string;
+    hide?: boolean;
+}
+export interface Props<TValue extends ValueType, TName extends NameType> {
+    separator?: string;
+    wrapperClassName?: string;
+    labelClassName?: string;
+    formatter?: Formatter<TValue, TName>;
+    contentStyle?: CSSProperties;
+    itemStyle?: CSSProperties;
+    labelStyle?: CSSProperties;
+    labelFormatter?: (label: any, payload: ReadonlyArray<Payload<TValue, TName>>) => ReactNode;
+    label?: any;
+    payload?: ReadonlyArray<Payload<TValue, TName>>;
+    itemSorter?: 'dataKey' | 'value' | 'name' | ((item: Payload<TValue, TName>) => number | string);
+    accessibilityLayer: boolean;
+}
+export declare const DefaultTooltipContent: <TValue extends ValueType, TName extends NameType>(props: Props<TValue, TName>) => React.JSX.Element;
Index: node_modules/recharts/types/component/Label.d.ts
===================================================================
--- node_modules/recharts/types/component/Label.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/Label.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+import * as React from 'react';
+import { ReactNode, ReactElement, SVGProps } from 'react';
+import { ViewBox, DataKey } from '../util/types';
+export type ContentType = ReactElement | ((props: Props) => ReactNode);
+export type LabelPosition = 'top' | 'left' | 'right' | 'bottom' | 'inside' | 'outside' | 'insideLeft' | 'insideRight' | 'insideTop' | 'insideBottom' | 'insideTopLeft' | 'insideBottomLeft' | 'insideTopRight' | 'insideBottomRight' | 'insideStart' | 'insideEnd' | 'end' | 'center' | 'centerTop' | 'centerBottom' | 'middle' | {
+    x?: number;
+    y?: number;
+};
+interface LabelProps {
+    viewBox?: ViewBox;
+    parentViewBox?: ViewBox;
+    formatter?: (label: React.ReactNode) => React.ReactNode;
+    value?: number | string;
+    offset?: number;
+    position?: LabelPosition;
+    children?: ReactNode;
+    className?: string;
+    content?: ContentType;
+    textBreakAll?: boolean;
+    angle?: number;
+    index?: number;
+    labelRef?: React.RefObject<Element>;
+}
+export type Props = Omit<SVGProps<SVGTextElement>, 'viewBox'> & LabelProps;
+export type ImplicitLabelType = boolean | string | number | ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | (Props & {
+    dataKey?: DataKey<any>;
+});
+export declare const isLabelContentAFunction: (content: unknown) => content is (props: Props) => React.ReactNode;
+export declare function Label({ offset, ...restProps }: Props): React.JSX.Element;
+export declare namespace Label {
+    var displayName: string;
+    var parseViewBox: (props: any) => ViewBox;
+    var renderCallByParent: (parentProps: {
+        children?: ReactNode;
+        label?: unknown;
+        labelRef?: React.RefObject<Element>;
+    }, viewBox?: ViewBox, checkPropsLabel?: boolean) => ReactElement[] | null;
+}
+export {};
Index: node_modules/recharts/types/component/LabelList.d.ts
===================================================================
--- node_modules/recharts/types/component/LabelList.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/LabelList.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import * as React from 'react';
+import { ReactElement, ReactNode, SVGProps } from 'react';
+import { ContentType, Props as LabelProps, LabelPosition } from './Label';
+import { DataKey, ViewBox } from '../util/types';
+interface Data {
+    value?: number | string | Array<number | string>;
+    payload?: any;
+    parentViewBox?: ViewBox;
+}
+interface LabelListProps<T extends Data> {
+    id?: string;
+    data?: ReadonlyArray<T>;
+    valueAccessor?: (entry: T, index: number) => string | number;
+    clockWise?: boolean;
+    dataKey?: DataKey<Record<string, any>>;
+    content?: ContentType;
+    textBreakAll?: boolean;
+    position?: LabelPosition;
+    offset?: LabelProps['offset'];
+    angle?: number;
+    formatter?: (label: React.ReactNode) => React.ReactNode;
+}
+export type Props<T extends Data> = SVGProps<SVGTextElement> & LabelListProps<T>;
+export type ImplicitLabelListType<T extends Data> = boolean | ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | Props<T>;
+export declare function LabelList<T extends Data>({ valueAccessor, ...restProps }: Props<T>): React.JSX.Element;
+export declare namespace LabelList {
+    var displayName: string;
+    var renderCallByParent: <T extends Data>(parentProps: {
+        children?: ReactNode;
+        label?: unknown;
+    }, data: ReadonlyArray<T>, checkPropsLabel?: boolean) => React.JSX.Element[];
+}
+export {};
Index: node_modules/recharts/types/component/Legend.d.ts
===================================================================
--- node_modules/recharts/types/component/Legend.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/Legend.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+import * as React from 'react';
+import { CSSProperties, PureComponent } from 'react';
+import { LegendPayload, Props as DefaultProps } from './DefaultLegendContent';
+import { LayoutType } from '../util/types';
+import { UniqueOption } from '../util/payload/getUniqPayload';
+import { ElementOffset } from '../util/useElementOffset';
+export type LegendItemSorter = 'value' | 'dataKey' | ((item: LegendPayload) => number | string);
+export type Props = Omit<DefaultProps, 'payload' | 'ref'> & {
+    wrapperStyle?: CSSProperties;
+    width?: number;
+    height?: number;
+    payloadUniqBy?: UniqueOption<LegendPayload>;
+    onBBoxUpdate?: (box: ElementOffset | null) => void;
+    /**
+     * If portal is defined, then Legend will use this element as a target
+     * for rendering using React Portal: https://react.dev/reference/react-dom/createPortal
+     *
+     * If this is undefined then Legend renders inside the recharts-wrapper element.
+     */
+    portal?: HTMLElement | null;
+    itemSorter?: LegendItemSorter;
+};
+interface State {
+    boxWidth: number;
+    boxHeight: number;
+}
+export declare class Legend extends PureComponent<Props, State> {
+    static displayName: string;
+    static defaultProps: {
+        align: string;
+        iconSize: number;
+        itemSorter: string;
+        layout: string;
+        verticalAlign: string;
+    };
+    static getWidthOrHeight(layout: LayoutType | undefined, height: number | undefined, width: number | undefined, maxWidth: number): null | {
+        height?: number;
+        width?: number;
+    };
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/component/ResponsiveContainer.d.ts
===================================================================
--- node_modules/recharts/types/component/ResponsiveContainer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/ResponsiveContainer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { ReactElement, CSSProperties } from 'react';
+export interface Props {
+    aspect?: number;
+    width?: string | number;
+    height?: string | number;
+    minWidth?: string | number;
+    minHeight?: string | number;
+    initialDimension?: {
+        width: number;
+        height: number;
+    };
+    maxHeight?: number;
+    children: ReactElement;
+    debounce?: number;
+    id?: string | number;
+    className?: string | number;
+    style?: Omit<CSSProperties, keyof Props>;
+    onResize?: (width: number, height: number) => void;
+}
+export declare const ResponsiveContainer: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
Index: node_modules/recharts/types/component/Text.d.ts
===================================================================
--- node_modules/recharts/types/component/Text.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/Text.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import * as React from 'react';
+import { CSSProperties, SVGProps } from 'react';
+export type TextAnchor = 'start' | 'middle' | 'end' | 'inherit';
+interface TextProps {
+    scaleToFit?: boolean;
+    angle?: number;
+    textAnchor?: TextAnchor;
+    verticalAnchor?: 'start' | 'middle' | 'end';
+    style?: CSSProperties;
+    lineHeight?: number | string;
+    breakAll?: boolean;
+    children?: string | number;
+    maxLines?: number;
+}
+export type Props = Omit<SVGProps<SVGTextElement>, 'textAnchor' | 'verticalAnchor'> & TextProps;
+interface Words {
+    words: Array<string>;
+    width?: number;
+}
+type GetWordsByLinesProps = Pick<Props, 'width' | 'scaleToFit' | 'children' | 'style' | 'breakAll' | 'maxLines'>;
+export declare const getWordsByLines: ({ width, scaleToFit, children, style, breakAll, maxLines }: GetWordsByLinesProps) => Words[];
+export declare const Text: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<SVGTextElement>>;
+export {};
Index: node_modules/recharts/types/component/Tooltip.d.ts
===================================================================
--- node_modules/recharts/types/component/Tooltip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/Tooltip.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,81 @@
+import * as React from 'react';
+import { CSSProperties, ReactElement, ReactNode } from 'react';
+import { NameType, Payload, Props as DefaultTooltipContentProps, ValueType } from './DefaultTooltipContent';
+import { UniqueOption } from '../util/payload/getUniqPayload';
+import { AllowInDimension, AnimationDuration, AnimationTiming, ChartCoordinate, Coordinate } from '../util/types';
+import { CursorDefinition } from './Cursor';
+import { TooltipTrigger } from '../chart/types';
+import { TooltipIndex } from '../state/tooltipSlice';
+import { AxisId } from '../state/cartesianAxisSlice';
+export type ContentType<TValue extends ValueType, TName extends NameType> = ReactElement | ((props: TooltipContentProps<TValue, TName>) => ReactNode);
+export type TooltipContentProps<TValue extends ValueType, TName extends NameType> = TooltipProps<TValue, TName> & {
+    label?: string | number;
+    payload: any[];
+    coordinate: ChartCoordinate;
+    active: boolean;
+    accessibilityLayer: boolean;
+};
+type PropertiesReadFromContext = 'viewBox' | 'active' | 'payload' | 'coordinate' | 'label' | 'accessibilityLayer';
+export type TooltipProps<TValue extends ValueType, TName extends NameType> = Omit<DefaultTooltipContentProps<TValue, TName>, PropertiesReadFromContext> & {
+    /**
+     * If true, then Tooltip is always displayed, once an activeIndex is set by mouse over, or programmatically.
+     * If false, then Tooltip is never displayed.
+     * If active is undefined, Recharts will control when the Tooltip displays. This includes mouse and keyboard controls.
+     */
+    active?: boolean;
+    /**
+     * If true, then Tooltip will information about hidden series (defaults to false).
+     * Interacting with the hide property of Area, Bar, Line, Scatter.
+     *
+     * default: false
+     */
+    includeHidden?: boolean | undefined;
+    allowEscapeViewBox?: AllowInDimension;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+    content?: ContentType<TValue, TName>;
+    cursor?: CursorDefinition;
+    filterNull?: boolean;
+    defaultIndex?: number | TooltipIndex;
+    isAnimationActive?: boolean;
+    offset?: number;
+    payloadUniqBy?: UniqueOption<Payload<TValue, TName>>;
+    /**
+     * If portal is defined, then Tooltip will use this element as a target
+     * for rendering using React Portal: https://react.dev/reference/react-dom/createPortal
+     *
+     * If this is undefined then Tooltip renders inside the recharts-wrapper element.
+     */
+    portal?: HTMLElement | null;
+    position?: Partial<Coordinate>;
+    reverseDirection?: AllowInDimension;
+    /**
+     * If true, tooltip will appear on top of all bars on an axis tick.
+     * If false, tooltip will appear on individual bars.
+     * Currently only supported in BarChart and RadialBarChart.
+     * If undefined then defaults to true.
+     */
+    shared?: boolean;
+    /**
+     * If `hover` then the Tooltip shows on mouse enter and hides on mouse leave.
+     *
+     * If `click` then the Tooltip shows after clicking and stays active.
+     *
+     * Default `hover`
+     */
+    trigger?: TooltipTrigger;
+    useTranslate3d?: boolean;
+    wrapperStyle?: CSSProperties;
+    /**
+     * Tooltip always attaches itself to the "Tooltip" axis. Which axis is it? Depends on the layout:
+     * - horizontal layout -> X axis
+     * - vertical layout -> Y axis
+     * - radial layout -> radial axis
+     * - centric layout -> angle axis
+     *
+     * Tooltip will use the default axis for the layout, unless you specify an axisId.
+     */
+    axisId?: AxisId;
+};
+export declare function Tooltip<TValue extends ValueType, TName extends NameType>(outsideProps: TooltipProps<TValue, TName>): React.JSX.Element;
+export {};
Index: node_modules/recharts/types/component/TooltipBoundingBox.d.ts
===================================================================
--- node_modules/recharts/types/component/TooltipBoundingBox.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/component/TooltipBoundingBox.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+import * as React from 'react';
+import { CSSProperties, PureComponent, ReactNode } from 'react';
+import { AllowInDimension, AnimationDuration, AnimationTiming, CartesianViewBox, Coordinate } from '../util/types';
+import { ElementOffset, SetElementOffset } from '../util/useElementOffset';
+export type TooltipBoundingBoxProps = {
+    active: boolean;
+    allowEscapeViewBox: AllowInDimension;
+    animationDuration: AnimationDuration;
+    animationEasing: AnimationTiming;
+    children: ReactNode;
+    coordinate: Coordinate;
+    hasPayload: boolean;
+    isAnimationActive: boolean;
+    offset: number;
+    position: Partial<Coordinate>;
+    reverseDirection: AllowInDimension;
+    useTranslate3d: boolean;
+    viewBox: CartesianViewBox;
+    wrapperStyle: CSSProperties;
+    lastBoundingBox: ElementOffset;
+    innerRef: SetElementOffset;
+    hasPortalFromProps: boolean;
+};
+type State = {
+    dismissed: boolean;
+    dismissedAtCoordinate: Coordinate;
+};
+export declare class TooltipBoundingBox extends PureComponent<TooltipBoundingBoxProps, State> {
+    state: {
+        dismissed: boolean;
+        dismissedAtCoordinate: {
+            x: number;
+            y: number;
+        };
+    };
+    componentDidMount(): void;
+    componentWillUnmount(): void;
+    componentDidUpdate(): void;
+    handleKeyDown: (event: KeyboardEvent) => void;
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/container/ClipPathProvider.d.ts
===================================================================
--- node_modules/recharts/types/container/ClipPathProvider.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/container/ClipPathProvider.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { ReactNode } from 'react';
+/**
+ * Generates a unique clip path ID for use in SVG elements,
+ * and puts it in a context provider.
+ *
+ * To read the clip path ID, use the `useClipPathId` hook,
+ * or render `<ClipPath>` component which will automatically use the ID from this context.
+ *
+ * @param props children - React children to be wrapped by the provider
+ * @returns React Context Provider
+ */
+export declare const ClipPathProvider: ({ children }: {
+    children: ReactNode;
+}) => React.JSX.Element;
+export declare const useClipPathId: () => string | undefined;
Index: node_modules/recharts/types/container/Layer.d.ts
===================================================================
--- node_modules/recharts/types/container/Layer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/container/Layer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { ReactNode, SVGAttributes } from 'react';
+interface LayerProps {
+    className?: string;
+    children?: ReactNode;
+}
+export type Props = SVGAttributes<SVGGElement> & LayerProps;
+export declare const Layer: React.ForwardRefExoticComponent<React.SVGAttributes<SVGGElement> & LayerProps & React.RefAttributes<SVGGElement>>;
+export {};
Index: node_modules/recharts/types/container/RootSurface.d.ts
===================================================================
--- node_modules/recharts/types/container/RootSurface.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/container/RootSurface.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import * as React from 'react';
+import { ReactNode } from 'react';
+type RootSurfaceProps = {
+    children: ReactNode;
+    title: string | undefined;
+    desc: string | undefined;
+    otherAttributes: Record<string, unknown>;
+};
+export declare const RootSurface: React.ForwardRefExoticComponent<RootSurfaceProps & React.RefAttributes<SVGSVGElement>>;
+export {};
Index: node_modules/recharts/types/container/Surface.d.ts
===================================================================
--- node_modules/recharts/types/container/Surface.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/container/Surface.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * @fileOverview Surface
+ */
+import * as React from 'react';
+import { ReactNode, CSSProperties, SVGProps } from 'react';
+interface SurfaceProps {
+    width: number;
+    height: number;
+    viewBox?: {
+        x?: number;
+        y?: number;
+        width?: number;
+        height?: number;
+    };
+    className?: string;
+    style?: CSSProperties;
+    children?: ReactNode;
+    title?: string;
+    desc?: string;
+}
+export type Props = Omit<SVGProps<SVGSVGElement>, 'viewBox'> & SurfaceProps;
+export declare const Surface: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<SVGSVGElement>>;
+export {};
Index: node_modules/recharts/types/context/ErrorBarContext.d.ts
===================================================================
--- node_modules/recharts/types/context/ErrorBarContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/ErrorBarContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import * as React from 'react';
+import { AxisId } from '../state/cartesianAxisSlice';
+import { ErrorBarDataPointFormatter } from '../cartesian/ErrorBar';
+import { ErrorBarsSettings } from '../state/errorBarSlice';
+type ErrorBarContextType<T> = {
+    data: ReadonlyArray<T> | undefined;
+    xAxisId: AxisId;
+    yAxisId: AxisId;
+    dataPointFormatter: ErrorBarDataPointFormatter;
+    errorBarOffset: number;
+};
+export declare function SetErrorBarContext<T>(props: ErrorBarContextType<T> & {
+    children: React.ReactNode;
+}): React.JSX.Element;
+export declare const useErrorBarContext: () => ErrorBarContextType<any>;
+export declare function ReportErrorBarSettings(props: ErrorBarsSettings): null;
+export {};
Index: node_modules/recharts/types/context/PanoramaContext.d.ts
===================================================================
--- node_modules/recharts/types/context/PanoramaContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/PanoramaContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import * as React from 'react';
+import { ReactNode } from 'react';
+export declare const useIsPanorama: () => boolean;
+export declare const PanoramaContextProvider: ({ children }: {
+    children: ReactNode;
+}) => React.JSX.Element;
Index: node_modules/recharts/types/context/RegisterGraphicalItemId.d.ts
===================================================================
--- node_modules/recharts/types/context/RegisterGraphicalItemId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/RegisterGraphicalItemId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { GraphicalItemId } from '../state/graphicalItemsSlice';
+export type IdSetter = {
+    id?: string;
+    type: string;
+    /**
+     * Children must be a function that receives the resolved ID of the graphical item.
+     * This ID will either be the one provided via props.id or generated automatically.
+     */
+    children: (id: GraphicalItemId) => React.ReactNode;
+};
+export declare const RegisterGraphicalItemId: ({ id, type, children }: IdSetter) => React.JSX.Element;
+export declare function useGraphicalItemId(): GraphicalItemId | undefined;
Index: node_modules/recharts/types/context/accessibilityContext.d.ts
===================================================================
--- node_modules/recharts/types/context/accessibilityContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/accessibilityContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare const useAccessibilityLayer: () => boolean;
Index: node_modules/recharts/types/context/brushUpdateContext.d.ts
===================================================================
--- node_modules/recharts/types/context/brushUpdateContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/brushUpdateContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+export interface BrushStartEndIndex {
+    startIndex: number;
+    endIndex: number;
+}
+export type OnBrushUpdate = (newState: BrushStartEndIndex) => void;
+export declare const BrushUpdateDispatchContext: import("react").Context<OnBrushUpdate>;
Index: node_modules/recharts/types/context/chartDataContext.d.ts
===================================================================
--- node_modules/recharts/types/context/chartDataContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/chartDataContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+import { ChartData } from '../state/chartDataSlice';
+import { BrushStartEndIndex } from './brushUpdateContext';
+export declare const ChartDataContextProvider: (props: {
+    chartData: ChartData | undefined;
+}) => null;
+export declare const SetComputedData: (props: {
+    computedData: any;
+}) => null;
+/**
+ * "data" is the data of the chart - it has no type because this part of recharts is very flexible.
+ * Basically it's an array of "something" and then there's the dataKey property in various places
+ * that's meant to pull other things away from the data.
+ *
+ * Some charts have `data` defined on the chart root, and they will return the array through this hook.
+ * For example: <ComposedChart data={data} />.
+ *
+ * Other charts, such as Pie, have data defined on individual graphical elements.
+ * These charts will return `undefined` through this hook, and you need to read the data from children.
+ * For example: <PieChart><Pie data={data} />
+ *
+ * Some charts also allow setting both - data on the parent, and data on the children at the same time!
+ * However, this particular selector will only return the ones defined on the parent.
+ *
+ * @deprecated use one of the other selectors instead - which one, depends on how do you identify the applicable graphical items.
+ *
+ * @return data array for some charts and undefined for other
+ */
+export declare const useChartData: () => ChartData | undefined;
+/**
+ * startIndex and endIndex are data boundaries, set through Brush.
+ *
+ * @return object with startIndex and endIndex
+ */
+export declare const useDataIndex: () => BrushStartEndIndex;
Index: node_modules/recharts/types/context/chartLayoutContext.d.ts
===================================================================
--- node_modules/recharts/types/context/chartLayoutContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/chartLayoutContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+import { CartesianViewBoxRequired, ChartOffsetInternal, LayoutType, Margin, Size } from '../util/types';
+import { RechartsRootState } from '../state/store';
+export declare const useViewBox: () => CartesianViewBoxRequired | undefined;
+/**
+ * For internal use only. If you want this information, `import { useOffset } from 'recharts'` instead.
+ *
+ * Returns the offset of the chart in pixels.
+ *
+ * @returns {ChartOffsetInternal} The offset of the chart in pixels, or a default value if not in a chart context.
+ */
+export declare const useOffsetInternal: () => ChartOffsetInternal;
+/**
+ * Returns the width of the chart in pixels.
+ *
+ * If you are using chart with hardcoded `width` prop, then the width returned will be the same
+ * as the `width` prop on the main chart element.
+ *
+ * If you are using a chart with a `ResponsiveContainer`, the width will be the size of the chart
+ * as the ResponsiveContainer has decided it would be.
+ *
+ * If the chart has any axes or legend, the `width` will be the size of the chart
+ * including the axes and legend. Meaning: adding axes and legend will not change the width.
+ *
+ * The dimensions do not scale, meaning as user zoom in and out, the width number will not change
+ * as the chart gets visually larger or smaller.
+ *
+ * Returns `undefined` if used outside a chart context.
+ *
+ * @returns {number | undefined} The width of the chart in pixels, or `undefined` if not in a chart context.
+ */
+export declare const useChartWidth: () => number | undefined;
+/**
+ * Returns the height of the chart in pixels.
+ *
+ * If you are using chart with hardcoded `height` props, then the height returned will be the same
+ * as the `height` prop on the main chart element.
+ *
+ * If you are using a chart with a `ResponsiveContainer`, the height will be the size of the chart
+ * as the ResponsiveContainer has decided it would be.
+ *
+ * If the chart has any axes or legend, the `height` will be the size of the chart
+ * including the axes and legend. Meaning: adding axes and legend will not change the height.
+ *
+ * The dimensions do not scale, meaning as user zoom in and out, the height number will not change
+ * as the chart gets visually larger or smaller.
+ *
+ * Returns `undefined` if used outside a chart context.
+ *
+ * @returns {number | undefined} The height of the chart in pixels, or `undefined` if not in a chart context.
+ */
+export declare const useChartHeight: () => number | undefined;
+export declare const useMargin: () => Margin;
+export declare const selectChartLayout: (state: RechartsRootState) => LayoutType;
+export declare const useChartLayout: () => LayoutType;
+export declare const ReportChartSize: (props: Size) => null;
+export declare const ReportChartMargin: ({ margin }: {
+    margin: Margin;
+}) => null;
Index: node_modules/recharts/types/context/legendPayloadContext.d.ts
===================================================================
--- node_modules/recharts/types/context/legendPayloadContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/legendPayloadContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import { LegendPayload } from '../component/DefaultLegendContent';
+/**
+ * Use this hook in Legend, or anywhere else where you want to read the current Legend items.
+ * @return all Legend items ready to be rendered
+ */
+export declare function useLegendPayload(): ReadonlyArray<LegendPayload>;
Index: node_modules/recharts/types/context/legendPortalContext.d.ts
===================================================================
--- node_modules/recharts/types/context/legendPortalContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/legendPortalContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export declare const LegendPortalContext: import("react").Context<HTMLElement>;
+export declare const useLegendPortal: () => HTMLElement | null;
Index: node_modules/recharts/types/context/tooltipContext.d.ts
===================================================================
--- node_modules/recharts/types/context/tooltipContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/tooltipContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+import * as React from 'react';
+import { Coordinate, DataKey } from '../util/types';
+export type TooltipPayloadType = any[];
+type TooltipTriggerInfo<T extends TooltipPayloadType> = {
+    tooltipPayload: T;
+    tooltipPosition: Coordinate;
+    cx: number;
+    cy: number;
+};
+export type ActivateTooltipAction<T extends TooltipPayloadType> = (tooltipInfo: TooltipTriggerInfo<T>, index: number, event: React.MouseEvent<SVGElement>) => void;
+export declare const useMouseEnterItemDispatch: <T extends TooltipPayloadType>(onMouseEnterFromProps: ActivateTooltipAction<T> | undefined, dataKey: DataKey<any>) => (data: TooltipTriggerInfo<T>, index: number) => (event: React.MouseEvent<SVGElement>) => void;
+export declare const useMouseLeaveItemDispatch: <T extends TooltipPayloadType>(onMouseLeaveFromProps: undefined | ActivateTooltipAction<T>) => (data: TooltipTriggerInfo<T>, index: number) => (event: React.MouseEvent<SVGElement>) => void;
+export declare const useMouseClickItemDispatch: <T extends TooltipPayloadType>(onMouseClickFromProps: ActivateTooltipAction<T> | undefined, dataKey: DataKey<any>) => (data: TooltipTriggerInfo<T>, index: number) => (event: React.MouseEvent<SVGElement>) => void;
+export {};
Index: node_modules/recharts/types/context/tooltipPortalContext.d.ts
===================================================================
--- node_modules/recharts/types/context/tooltipPortalContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/tooltipPortalContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export declare const TooltipPortalContext: import("react").Context<HTMLElement>;
+export declare const useTooltipPortal: () => HTMLElement | null;
Index: node_modules/recharts/types/context/useTooltipAxis.d.ts
===================================================================
--- node_modules/recharts/types/context/useTooltipAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/context/useTooltipAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { AxisWithTicksSettings } from '../state/selectors/axisSelectors';
+export declare const useTooltipAxis: () => AxisWithTicksSettings;
+export declare const useTooltipAxisBandSize: () => number | undefined;
Index: node_modules/recharts/types/hooks.d.ts
===================================================================
--- node_modules/recharts/types/hooks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/hooks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+import type { AxisId } from './state/cartesianAxisSlice';
+import { BaseAxisWithScale } from './state/selectors/axisSelectors';
+import { ChartOffset, PlotArea } from './types';
+export declare const useXAxis: (xAxisId: AxisId) => BaseAxisWithScale | undefined;
+export declare const useYAxis: (yAxisId: AxisId) => BaseAxisWithScale | undefined;
+/**
+ * Returns the active tooltip label. The label is one of the values from the chart data,
+ * and is used to display in the tooltip content.
+ *
+ * Returns undefined if there is no active user interaction or if used outside a chart context
+ *
+ * @returns string | undefined
+ */
+export declare const useActiveTooltipLabel: () => string | undefined;
+/**
+ * Offset defines the blank space between the chart and the plot area.
+ * This blank space is occupied by supporting elements like axes, legends, and brushes.
+ * This also includes any margins that might be applied to the chart.
+ *
+ * @returns Offset of the chart in pixels, or undefined if used outside a chart context.
+ */
+export declare const useOffset: () => ChartOffset | undefined;
+/**
+ * Plot area is the area where the actual chart data is rendered.
+ * This means: bars, lines, scatter points, etc.
+ *
+ * The plot area is calculated based on the chart dimensions and the offset.
+ *
+ * @returns Plot area of the chart in pixels, or undefined if used outside a chart context.
+ */
+export declare const usePlotArea: () => PlotArea | undefined;
+/**
+ * Returns the currently active data points being displayed in the Tooltip.
+ * Active means that it is currently visible; this hook will return `undefined` if there is no current interaction.
+ *
+ * This follows the `<Tooltip />` props, if the Tooltip element is present in the chart.
+ * If there is no `<Tooltip />` then this hook will follow the default Tooltip props.
+ *
+ * Data point is whatever you pass as an input to the chart using the `data={}` prop.
+ *
+ * This returns an array because a chart can have multiple graphical items in it (multiple Lines for example)
+ * and tooltip with `shared={true}` will display all items at the same time.
+ *
+ * Returns undefined when used outside a chart context.
+ *
+ * @returns Data points that are currently visible in a Tooltip
+ */
+export declare const useActiveTooltipDataPoints: <T = unknown>() => ReadonlyArray<T> | undefined;
Index: node_modules/recharts/types/index.d.ts
===================================================================
--- node_modules/recharts/types/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,102 @@
+export { Surface } from './container/Surface';
+export type { Props as SurfaceProps } from './container/Surface';
+export { Layer } from './container/Layer';
+export type { Props as LayerProps } from './container/Layer';
+export { Legend } from './component/Legend';
+export type { Props as LegendProps } from './component/Legend';
+export { DefaultLegendContent } from './component/DefaultLegendContent';
+export type { Props as DefaultLegendContentProps, LegendPayload } from './component/DefaultLegendContent';
+export { Tooltip } from './component/Tooltip';
+export type { TooltipProps, TooltipContentProps } from './component/Tooltip';
+export { DefaultTooltipContent } from './component/DefaultTooltipContent';
+export type { Props as DefaultTooltipContentProps } from './component/DefaultTooltipContent';
+export { ResponsiveContainer } from './component/ResponsiveContainer';
+export type { Props as ResponsiveContainerProps } from './component/ResponsiveContainer';
+export { Cell } from './component/Cell';
+export type { Props as CellProps } from './component/Cell';
+export { Text } from './component/Text';
+export type { Props as TextProps } from './component/Text';
+export { Label } from './component/Label';
+export type { Props as LabelProps } from './component/Label';
+export { LabelList } from './component/LabelList';
+export type { Props as LabelListProps } from './component/LabelList';
+export { Customized } from './component/Customized';
+export type { Props as CustomizedProps } from './component/Customized';
+export { Sector } from './shape/Sector';
+export type { Props as SectorProps } from './shape/Sector';
+export { Curve } from './shape/Curve';
+export type { Props as CurveProps } from './shape/Curve';
+export { Rectangle } from './shape/Rectangle';
+export type { Props as RectangleProps } from './shape/Rectangle';
+export { Polygon } from './shape/Polygon';
+export type { Props as PolygonProps } from './shape/Polygon';
+export { Dot } from './shape/Dot';
+export type { Props as DotProps } from './shape/Dot';
+export { Cross } from './shape/Cross';
+export type { Props as CrossProps } from './shape/Cross';
+export { Symbols } from './shape/Symbols';
+export type { SymbolsProps } from './shape/Symbols';
+export { PolarGrid } from './polar/PolarGrid';
+export type { Props as PolarGridProps } from './polar/PolarGrid';
+export { PolarRadiusAxis } from './polar/PolarRadiusAxis';
+export type { Props as PolarRadiusAxisProps } from './polar/PolarRadiusAxis';
+export { PolarAngleAxis } from './polar/PolarAngleAxis';
+export type { Props as PolarAngleAxisProps } from './polar/PolarAngleAxis';
+export { Pie } from './polar/Pie';
+export type { Props as PieProps, PieLabel, PieLabelRenderProps } from './polar/Pie';
+export { Radar } from './polar/Radar';
+export type { Props as RadarProps } from './polar/Radar';
+export { RadialBar } from './polar/RadialBar';
+export type { RadialBarProps } from './polar/RadialBar';
+export { Brush } from './cartesian/Brush';
+export type { Props as BrushProps } from './cartesian/Brush';
+export { ReferenceLine } from './cartesian/ReferenceLine';
+export type { Props as ReferenceLineProps } from './cartesian/ReferenceLine';
+export { ReferenceDot } from './cartesian/ReferenceDot';
+export type { Props as ReferenceDotProps } from './cartesian/ReferenceDot';
+export { ReferenceArea } from './cartesian/ReferenceArea';
+export type { Props as ReferenceAreaProps } from './cartesian/ReferenceArea';
+export { CartesianAxis } from './cartesian/CartesianAxis';
+export type { Props as CartesianAxisProps } from './cartesian/CartesianAxis';
+export { CartesianGrid } from './cartesian/CartesianGrid';
+export type { Props as CartesianGridProps } from './cartesian/CartesianGrid';
+export { Line } from './cartesian/Line';
+export type { Props as LineProps } from './cartesian/Line';
+export { Area } from './cartesian/Area';
+export type { Props as AreaProps } from './cartesian/Area';
+export { Bar } from './cartesian/Bar';
+export type { Props as BarProps } from './cartesian/Bar';
+export { Scatter } from './cartesian/Scatter';
+export type { Props as ScatterProps } from './cartesian/Scatter';
+export { XAxis } from './cartesian/XAxis';
+export type { Props as XAxisProps } from './cartesian/XAxis';
+export { YAxis } from './cartesian/YAxis';
+export type { Props as YAxisProps } from './cartesian/YAxis';
+export { ZAxis } from './cartesian/ZAxis';
+export type { Props as ZAxisProps } from './cartesian/ZAxis';
+export { ErrorBar } from './cartesian/ErrorBar';
+export type { Props as ErrorBarProps } from './cartesian/ErrorBar';
+export { LineChart } from './chart/LineChart';
+export { BarChart } from './chart/BarChart';
+export { PieChart } from './chart/PieChart';
+export { Treemap } from './chart/Treemap';
+export type { Props as TreemapProps } from './chart/Treemap';
+export { Sankey } from './chart/Sankey';
+export { RadarChart } from './chart/RadarChart';
+export { ScatterChart } from './chart/ScatterChart';
+export { AreaChart } from './chart/AreaChart';
+export { RadialBarChart } from './chart/RadialBarChart';
+export { ComposedChart } from './chart/ComposedChart';
+export { SunburstChart } from './chart/SunburstChart';
+export { Funnel } from './cartesian/Funnel';
+export type { Props as FunnelProps } from './cartesian/Funnel';
+export { FunnelChart } from './chart/FunnelChart';
+export { Trapezoid } from './shape/Trapezoid';
+export type { Props as TrapezoidProps } from './shape/Trapezoid';
+export { Global } from './util/Global';
+export type { LegendType } from './util/types';
+/** export getNiceTickValues so this can be used as a replacement for what is in recharts-scale */
+export { getNiceTickValues } from './util/scale/getNiceTickValues';
+export { useActiveTooltipLabel, useOffset, usePlotArea, useActiveTooltipDataPoints } from './hooks';
+export { useChartHeight, useChartWidth } from './context/chartLayoutContext';
+export type { ChartOffset, PlotArea } from './types';
Index: node_modules/recharts/types/polar/Pie.d.ts
===================================================================
--- node_modules/recharts/types/polar/Pie.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/polar/Pie.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,106 @@
+import * as React from 'react';
+import { ReactElement, ReactNode, SVGProps } from 'react';
+import { Props as SectorProps } from '../shape/Sector';
+import { ActiveShape, AnimationDuration, AnimationTiming, ChartOffsetInternal, Coordinate, DataKey, GeometrySector, LegendType, PresentationAttributesAdaptChildEvent, TooltipType } from '../util/types';
+import { TooltipPayload } from '../state/tooltipSlice';
+import { PieSettings } from '../state/types/PieSettings';
+interface PieDef {
+    /** The abscissa of pole in polar coordinate  */
+    cx?: number | string;
+    /** The ordinate of pole in polar coordinate  */
+    cy?: number | string;
+    /** The start angle of first sector */
+    startAngle?: number;
+    /** The end angle of last sector */
+    endAngle?: number;
+    paddingAngle?: number;
+    /** The inner radius of sectors */
+    innerRadius?: number | string;
+    /** The outer radius of sectors */
+    outerRadius?: number | string | ((dataPoint: any) => number);
+    cornerRadius?: number | string;
+}
+type PieLabelLine = ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | SVGProps<SVGPathElement> | boolean;
+export type PieLabelProps = PieSectorData & GeometrySector & {
+    tooltipPayload?: any;
+} & PieLabelRenderProps;
+export type PieLabel<P extends PieLabelProps = PieLabelProps> = ReactElement<SVGElement> | ((props: P) => ReactNode | ReactElement<SVGElement>) | (SVGProps<SVGTextElement> & {
+    offsetRadius?: number;
+}) | boolean;
+export type PieSectorData = {
+    percent?: number;
+    name?: string | number;
+    midAngle?: number;
+    middleRadius?: number;
+    tooltipPosition?: Coordinate;
+    value?: number;
+    paddingAngle?: number;
+    dataKey?: string;
+    payload?: any;
+    tooltipPayload?: ReadonlyArray<TooltipPayload>;
+};
+export type PieSectorDataItem = SectorProps & PieSectorData;
+interface PieProps extends PieDef {
+    id?: string;
+    className?: string;
+    /**
+     * Defaults to 'value' if not specified.
+     */
+    dataKey?: DataKey<any>;
+    nameKey?: DataKey<any>;
+    /** The minimum angle for no-zero element */
+    minAngle?: number;
+    legendType?: LegendType;
+    tooltipType?: TooltipType;
+    /** TODO: review this as an external prop - it seems to have no effect */
+    /** the max radius of pie */
+    maxRadius?: number;
+    hide?: boolean;
+    /** the input data */
+    data?: any[];
+    activeShape?: ActiveShape<PieSectorDataItem>;
+    inactiveShape?: ActiveShape<PieSectorDataItem>;
+    labelLine?: PieLabelLine;
+    label?: PieLabel;
+    animationEasing?: AnimationTiming;
+    isAnimationActive?: boolean;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    onAnimationStart?: () => void;
+    onAnimationEnd?: () => void;
+    onMouseEnter?: (data: any, index: number, e: React.MouseEvent) => void;
+    onMouseLeave?: (data: any, index: number, e: React.MouseEvent) => void;
+    onClick?: (data: any, index: number, e: React.MouseEvent) => void;
+    rootTabIndex?: number;
+}
+export interface PieLabelRenderProps extends PieDef {
+    name: string;
+    percent?: number;
+    stroke: string;
+    index?: number;
+    textAnchor: string;
+    x: number;
+    y: number;
+    [key: string]: any;
+}
+type PieSvgAttributes = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'ref'>;
+export type Props = PieSvgAttributes & PieProps;
+type RealPieData = any;
+export type PieCoordinate = {
+    cx: number;
+    cy: number;
+    innerRadius: number;
+    outerRadius: number;
+    maxRadius: number;
+};
+export declare function computePieSectors({ pieSettings, displayedData, cells, offset, }: {
+    displayedData: ReadonlyArray<RealPieData>;
+    cells: ReadonlyArray<ReactElement> | undefined;
+    pieSettings: PieSettings;
+    offset: ChartOffsetInternal;
+}): ReadonlyArray<PieSectorDataItem>;
+export declare function Pie(outsideProps: Props): React.JSX.Element;
+export declare namespace Pie {
+    var displayName: string;
+}
+export {};
Index: node_modules/recharts/types/polar/PolarAngleAxis.d.ts
===================================================================
--- node_modules/recharts/types/polar/PolarAngleAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/polar/PolarAngleAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+import * as React from 'react';
+import { FunctionComponent, PureComponent, ReactElement, SVGProps } from 'react';
+import { Props as TextProps } from '../component/Text';
+import { AxisDomain, DataKey, PresentationAttributesAdaptChildEvent, ScaleType, TickItem } from '../util/types';
+import { RechartsScale } from '../util/ChartUtils';
+/**
+ * These are injected from Redux, are required, but cannot be set by user.
+ */
+interface PropsInjectedFromRedux {
+    cx?: number;
+    cy?: number;
+    radius?: number;
+}
+export interface PolarAngleAxisProps extends PropsInjectedFromRedux {
+    allowDecimals?: boolean;
+    domain?: AxisDomain;
+    allowDuplicatedCategory?: boolean;
+    angleAxisId?: string | number;
+    axisLineType?: 'polygon' | 'circle';
+    ticks?: ReadonlyArray<TickItem>;
+    orientation?: 'inner' | 'outer';
+    axisLine?: boolean | SVGProps<SVGLineElement>;
+    tickSize?: number;
+    tickCount?: number;
+    tickLine?: boolean | SVGProps<SVGLineElement>;
+    tickFormatter?: (value: any, index: number) => string;
+    reversed: boolean;
+    dataKey?: DataKey<any>;
+    tick?: SVGProps<SVGTextElement> | ReactElement<SVGElement> | ((props: TickItemTextProps) => ReactElement<SVGElement>) | boolean;
+    scale: ScaleType | RechartsScale;
+    type?: 'category' | 'number';
+}
+type AxisSvgProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGTextElement>, 'scale' | 'type'>;
+export type Props = AxisSvgProps & PolarAngleAxisProps;
+export type TickItemTextProps = TextProps & {
+    index: number;
+    payload: any;
+};
+export declare const PolarAngleAxisWrapper: FunctionComponent<Props>;
+export declare class PolarAngleAxis extends PureComponent<Props> {
+    static displayName: string;
+    static axisType: string;
+    static defaultProps: {
+        readonly allowDuplicatedCategory: true;
+        readonly angleAxisId: 0;
+        readonly axisLine: true;
+        readonly cx: 0;
+        readonly cy: 0;
+        readonly orientation: "outer";
+        readonly reversed: false;
+        readonly scale: "auto";
+        readonly tick: true;
+        readonly tickLine: true;
+        readonly tickSize: 8;
+        readonly type: "category";
+    };
+    render(): React.ReactNode;
+}
+export {};
Index: node_modules/recharts/types/polar/PolarGrid.d.ts
===================================================================
--- node_modules/recharts/types/polar/PolarGrid.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/polar/PolarGrid.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { SVGProps } from 'react';
+import { AxisId } from '../state/cartesianAxisSlice';
+interface PolarGridProps {
+    cx?: number;
+    cy?: number;
+    innerRadius?: number;
+    outerRadius?: number;
+    polarAngles?: number[];
+    polarRadius?: number[];
+    gridType?: 'polygon' | 'circle';
+    radialLines?: boolean;
+    angleAxisId?: AxisId;
+    radiusAxisId?: AxisId;
+}
+export type Props = SVGProps<SVGLineElement> & PolarGridProps;
+export declare const PolarGrid: {
+    ({ gridType, radialLines, angleAxisId, radiusAxisId, cx: cxFromOutside, cy: cyFromOutside, innerRadius: innerRadiusFromOutside, outerRadius: outerRadiusFromOutside, ...inputs }: Props): React.JSX.Element;
+    displayName: string;
+};
+export {};
Index: node_modules/recharts/types/polar/PolarRadiusAxis.d.ts
===================================================================
--- node_modules/recharts/types/polar/PolarRadiusAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/polar/PolarRadiusAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import * as React from 'react';
+import { FunctionComponent, PureComponent } from 'react';
+import { BaseAxisProps, PresentationAttributesAdaptChildEvent, TickItem } from '../util/types';
+type TickOrientation = 'left' | 'right' | 'middle';
+export interface PolarRadiusAxisProps extends Omit<BaseAxisProps, 'unit'> {
+    cx?: number;
+    cy?: number;
+    radiusAxisId?: string | number;
+    angle?: number;
+    orientation?: TickOrientation;
+    ticks?: ReadonlyArray<TickItem>;
+    reversed?: boolean;
+}
+type AxisSvgProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGTextElement>, 'scale' | 'type'>;
+export type Props = AxisSvgProps & PolarRadiusAxisProps;
+export declare const PolarRadiusAxisWrapper: FunctionComponent<Props>;
+export declare class PolarRadiusAxis extends PureComponent<Props> {
+    static displayName: string;
+    static axisType: string;
+    static defaultProps: {
+        readonly allowDataOverflow: false;
+        readonly allowDuplicatedCategory: true;
+        readonly angle: 0;
+        readonly axisLine: true;
+        readonly cx: 0;
+        readonly cy: 0;
+        readonly orientation: "right";
+        readonly radiusAxisId: 0;
+        readonly scale: "auto";
+        readonly stroke: "#ccc";
+        readonly tick: true;
+        readonly tickCount: 5;
+        readonly type: "number";
+    };
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/polar/Radar.d.ts
===================================================================
--- node_modules/recharts/types/polar/Radar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/polar/Radar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+import * as React from 'react';
+import { PureComponent, ReactElement, MouseEvent, SVGProps } from 'react';
+import { RechartsScale } from '../util/ChartUtils';
+import { Props as DotProps } from '../shape/Dot';
+import { LegendType, TooltipType, AnimationTiming, DataKey, AnimationDuration, ActiveDotType } from '../util/types';
+interface RadarPoint {
+    x: number;
+    y: number;
+    cx?: number;
+    cy?: number;
+    angle?: number;
+    radius?: number;
+    value?: number;
+    payload?: any;
+    name?: string;
+}
+type RadarDot = ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | DotProps | boolean;
+interface RadarProps {
+    className?: string;
+    dataKey: DataKey<any>;
+    angleAxisId?: string | number;
+    radiusAxisId?: string | number;
+    points?: RadarPoint[];
+    baseLinePoints?: RadarPoint[];
+    isRange?: boolean;
+    shape?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>);
+    activeDot?: ActiveDotType;
+    dot?: RadarDot;
+    legendType?: LegendType;
+    tooltipType?: TooltipType;
+    hide?: boolean;
+    connectNulls?: boolean;
+    label?: any;
+    onAnimationStart?: () => void;
+    onAnimationEnd?: () => void;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    isAnimationActive?: boolean;
+    animationEasing?: AnimationTiming;
+    onMouseEnter?: (props: any, e: MouseEvent<SVGPolygonElement>) => void;
+    onMouseLeave?: (props: any, e: MouseEvent<SVGPolygonElement>) => void;
+}
+export type RadiusAxisForRadar = {
+    scale: RechartsScale;
+};
+export type AngleAxisForRadar = {
+    scale: RechartsScale;
+    type: 'number' | 'category';
+    dataKey: DataKey<any> | undefined;
+    cx: number;
+    cy: number;
+};
+export type Props = Omit<SVGProps<SVGElement>, 'onMouseEnter' | 'onMouseLeave' | 'points' | 'ref'> & RadarProps;
+export type RadarComposedData = {
+    points: RadarPoint[];
+    baseLinePoints: RadarPoint[];
+    isRange: boolean;
+};
+export declare function computeRadarPoints({ radiusAxis, angleAxis, displayedData, dataKey, bandSize, }: {
+    radiusAxis: RadiusAxisForRadar;
+    angleAxis: AngleAxisForRadar;
+    displayedData: any[];
+    dataKey: RadarProps['dataKey'];
+    bandSize: number;
+}): RadarComposedData;
+export declare class Radar extends PureComponent<Props> {
+    static displayName: string;
+    static defaultProps: Partial<Props>;
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/polar/RadialBar.d.ts
===================================================================
--- node_modules/recharts/types/polar/RadialBar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/polar/RadialBar.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,76 @@
+import * as React from 'react';
+import { PureComponent, ReactElement } from 'react';
+import { Series } from 'victory-vendor/d3-shape';
+import { Props as SectorProps } from '../shape/Sector';
+import { ImplicitLabelListType } from '../component/LabelList';
+import { BarPositionPosition } from '../util/ChartUtils';
+import { LegendType, TooltipType, AnimationTiming, TickItem, PresentationAttributesAdaptChildEvent, AnimationDuration, ActiveShape, LayoutType, DataKey } from '../util/types';
+import { BaseAxisWithScale } from '../state/selectors/axisSelectors';
+import { ChartData } from '../state/chartDataSlice';
+import { AxisId } from '../state/cartesianAxisSlice';
+export type RadialBarDataItem = SectorProps & {
+    value?: any;
+    payload?: any;
+    background?: SectorProps;
+};
+type RadialBarBackground = ActiveShape<SectorProps>;
+interface InternalRadialBarProps {
+    className?: string;
+    angleAxisId?: AxisId;
+    radiusAxisId?: AxisId;
+    startAngle?: number;
+    endAngle?: number;
+    shape?: ActiveShape<SectorProps, SVGPathElement>;
+    activeShape?: ActiveShape<SectorProps, SVGPathElement>;
+    dataKey: string | number | ((obj: any) => any);
+    cornerRadius?: string | number;
+    forceCornerRadius?: boolean;
+    cornerIsExternal?: boolean;
+    minPointSize?: number;
+    /**
+     * So in Bar, this can be a percent value - but that won't work in RadialBar. RadialBar: only numbers.
+     */
+    barSize?: number;
+    maxBarSize?: number;
+    data?: ReadonlyArray<RadialBarDataItem>;
+    legendType?: LegendType;
+    tooltipType?: TooltipType;
+    hide?: boolean;
+    label?: ImplicitLabelListType<any>;
+    stackId?: string | number;
+    background?: RadialBarBackground;
+    onAnimationStart?: () => void;
+    onAnimationEnd?: () => void;
+    isAnimationActive?: boolean;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+}
+export type RadialBarProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'ref'> & InternalRadialBarProps;
+export declare function computeRadialBarDataItems({ displayedData, stackedData, dataStartIndex, stackedDomain, dataKey, baseValue, layout, radiusAxis, radiusAxisTicks, bandSize, pos, angleAxis, minPointSize, cx, cy, angleAxisTicks, cells, startAngle: rootStartAngle, endAngle: rootEndAngle, }: {
+    displayedData: ChartData;
+    stackedData: Series<Record<number, number>, DataKey<any>> | undefined;
+    dataStartIndex: number;
+    stackedDomain: ReadonlyArray<unknown> | null;
+    dataKey: DataKey<any> | undefined;
+    baseValue: number | unknown;
+    layout: LayoutType;
+    radiusAxis: BaseAxisWithScale;
+    radiusAxisTicks: ReadonlyArray<TickItem> | undefined;
+    bandSize: number;
+    pos: BarPositionPosition;
+    angleAxis: BaseAxisWithScale;
+    minPointSize: number | undefined;
+    cx: number;
+    cy: number;
+    angleAxisTicks: ReadonlyArray<TickItem> | undefined;
+    cells: ReadonlyArray<ReactElement> | undefined;
+    startAngle: number;
+    endAngle: number;
+}): ReadonlyArray<RadialBarDataItem>;
+export declare class RadialBar extends PureComponent<RadialBarProps> {
+    static displayName: string;
+    static defaultProps: Partial<RadialBarProps>;
+    render(): React.JSX.Element;
+}
+export {};
Index: node_modules/recharts/types/polar/defaultPolarAngleAxisProps.d.ts
===================================================================
--- node_modules/recharts/types/polar/defaultPolarAngleAxisProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/polar/defaultPolarAngleAxisProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+export declare const defaultPolarAngleAxisProps: {
+    readonly allowDuplicatedCategory: true;
+    readonly angleAxisId: 0;
+    readonly axisLine: true;
+    readonly cx: 0;
+    readonly cy: 0;
+    readonly orientation: "outer";
+    readonly reversed: false;
+    readonly scale: "auto";
+    readonly tick: true;
+    readonly tickLine: true;
+    readonly tickSize: 8;
+    readonly type: "category";
+};
Index: node_modules/recharts/types/polar/defaultPolarRadiusAxisProps.d.ts
===================================================================
--- node_modules/recharts/types/polar/defaultPolarRadiusAxisProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/polar/defaultPolarRadiusAxisProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+export declare const defaultPolarRadiusAxisProps: {
+    readonly allowDataOverflow: false;
+    readonly allowDuplicatedCategory: true;
+    readonly angle: 0;
+    readonly axisLine: true;
+    readonly cx: 0;
+    readonly cy: 0;
+    readonly orientation: "right";
+    readonly radiusAxisId: 0;
+    readonly scale: "auto";
+    readonly stroke: "#ccc";
+    readonly tick: true;
+    readonly tickCount: 5;
+    readonly type: "number";
+};
Index: node_modules/recharts/types/shape/Cross.d.ts
===================================================================
--- node_modules/recharts/types/shape/Cross.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/shape/Cross.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * @fileOverview Cross
+ */
+import * as React from 'react';
+import { SVGProps } from 'react';
+interface CrossProps {
+    x?: number;
+    y?: number;
+    width?: number;
+    height?: number;
+    top?: number;
+    left?: number;
+    className?: number;
+}
+export type Props = SVGProps<SVGPathElement> & CrossProps;
+export declare const Cross: React.FC<Props>;
+export {};
Index: node_modules/recharts/types/shape/Curve.d.ts
===================================================================
--- node_modules/recharts/types/shape/Curve.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/shape/Curve.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+/**
+ * @fileOverview Curve
+ */
+import * as React from 'react';
+import { Ref } from 'react';
+import { CurveFactory } from 'victory-vendor/d3-shape';
+import { LayoutType, PresentationAttributesWithProps } from '../util/types';
+export type CurveType = 'basis' | 'basisClosed' | 'basisOpen' | 'bumpX' | 'bumpY' | 'bump' | 'linear' | 'linearClosed' | 'natural' | 'monotoneX' | 'monotoneY' | 'monotone' | 'step' | 'stepBefore' | 'stepAfter' | CurveFactory;
+/**
+ * @deprecated use {@link Coordinate} instead
+ * Duplicated with `Coordinate` in `util/types.ts`
+ */
+export interface Point {
+    readonly x: number;
+    readonly y: number;
+}
+/**
+ * @deprecated use {@link NullableCoordinate} instead
+ * Duplicated with `NullableCoordinate` in `util/types.ts`
+ */
+export interface NullablePoint {
+    readonly x: number | null;
+    readonly y: number | null;
+}
+interface CurveProps {
+    className?: string;
+    type?: CurveType;
+    layout?: LayoutType;
+    baseLine?: number | ReadonlyArray<NullablePoint>;
+    points?: ReadonlyArray<NullablePoint>;
+    connectNulls?: boolean;
+    path?: string;
+    pathRef?: Ref<SVGPathElement>;
+}
+export type Props = Omit<PresentationAttributesWithProps<CurveProps, SVGPathElement>, 'type' | 'points'> & CurveProps;
+type GetPathProps = Pick<Props, 'type' | 'points' | 'baseLine' | 'layout' | 'connectNulls'>;
+/**
+ * Calculate the path of curve. Returns null if points is an empty array.
+ * @return path or null
+ */
+export declare const getPath: ({ type, points, baseLine, layout, connectNulls, }: GetPathProps) => string | null;
+export declare const Curve: React.FC<Props>;
+export {};
Index: node_modules/recharts/types/shape/Dot.d.ts
===================================================================
--- node_modules/recharts/types/shape/Dot.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/shape/Dot.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * @fileOverview Dot
+ */
+import * as React from 'react';
+import { PresentationAttributesWithProps } from '../util/types';
+interface DotProps {
+    className?: string;
+    cx?: number;
+    cy?: number;
+    r?: number;
+    clipDot?: boolean;
+}
+export type Props = PresentationAttributesWithProps<DotProps, SVGCircleElement> & DotProps;
+export declare const Dot: React.FC<Props>;
+export {};
Index: node_modules/recharts/types/shape/Polygon.d.ts
===================================================================
--- node_modules/recharts/types/shape/Polygon.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/shape/Polygon.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * @fileOverview Polygon
+ */
+import * as React from 'react';
+import { SVGProps } from 'react';
+import { Coordinate } from '../util/types';
+interface PolygonProps {
+    className?: string;
+    points?: Coordinate[];
+    baseLinePoints?: Coordinate[];
+    connectNulls?: boolean;
+}
+export type Props = Omit<SVGProps<SVGPolygonElement>, 'points'> & PolygonProps;
+export declare const Polygon: React.FC<Props>;
+export {};
Index: node_modules/recharts/types/shape/Rectangle.d.ts
===================================================================
--- node_modules/recharts/types/shape/Rectangle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/shape/Rectangle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+/**
+ * @fileOverview Rectangle
+ */
+import * as React from 'react';
+import { SVGProps } from 'react';
+import { AnimationDuration, AnimationTiming } from '../util/types';
+export type RectRadius = [number, number, number, number];
+interface RectangleProps {
+    className?: string;
+    x?: number;
+    y?: number;
+    width?: number;
+    height?: number;
+    radius?: number | RectRadius;
+    isAnimationActive?: boolean;
+    isUpdateAnimationActive?: boolean;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+}
+export type Props = Omit<SVGProps<SVGPathElement>, 'radius'> & RectangleProps;
+export declare const Rectangle: React.FC<Props>;
+export {};
Index: node_modules/recharts/types/shape/Sector.d.ts
===================================================================
--- node_modules/recharts/types/shape/Sector.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/shape/Sector.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { SVGProps } from 'react';
+import { GeometrySectorWithCornerRadius } from '../util/types';
+interface SectorProps extends GeometrySectorWithCornerRadius {
+    className?: string;
+}
+/**
+ * SVG cx, cy are `string | number | undefined`, but internally we use `number` so let's
+ * override the types here.
+ */
+export type Props = Omit<SVGProps<SVGPathElement>, 'cx' | 'cy'> & Partial<SectorProps>;
+export declare const Sector: React.FC<Props>;
+export {};
Index: node_modules/recharts/types/shape/Symbols.d.ts
===================================================================
--- node_modules/recharts/types/shape/Symbols.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/shape/Symbols.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+/**
+ * @fileOverview Curve
+ */
+import * as React from 'react';
+import { SVGProps } from 'react';
+import { SymbolType as D3SymbolType } from 'victory-vendor/d3-shape';
+import { SymbolType } from '../util/types';
+type SizeType = 'area' | 'diameter';
+export interface InnerSymbolsProp {
+    className?: string;
+    type: SymbolType;
+    cx?: number;
+    cy?: number;
+    size?: number;
+    sizeType?: SizeType;
+}
+export type SymbolsProps = SVGProps<SVGPathElement> & InnerSymbolsProp;
+export declare const Symbols: {
+    ({ type, size, sizeType, ...rest }: SymbolsProps): React.JSX.Element;
+    registerSymbol: (key: string, factory: D3SymbolType) => void;
+};
+export {};
Index: node_modules/recharts/types/shape/Trapezoid.d.ts
===================================================================
--- node_modules/recharts/types/shape/Trapezoid.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/shape/Trapezoid.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * @fileOverview Rectangle
+ */
+import * as React from 'react';
+import { SVGProps } from 'react';
+import { AnimationDuration, AnimationTiming } from '../util/types';
+interface TrapezoidProps {
+    className?: string;
+    x?: number;
+    y?: number;
+    upperWidth?: number;
+    lowerWidth?: number;
+    height?: number;
+    isUpdateAnimationActive?: boolean;
+    animationBegin?: number;
+    animationDuration?: AnimationDuration;
+    animationEasing?: AnimationTiming;
+}
+export type Props = SVGProps<SVGPathElement> & TrapezoidProps;
+export declare const Trapezoid: React.FC<Props>;
+export {};
Index: node_modules/recharts/types/state/RechartsReduxContext.d.ts
===================================================================
--- node_modules/recharts/types/state/RechartsReduxContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/RechartsReduxContext.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import type { Action, Store } from '@reduxjs/toolkit';
+import type { Subscription } from 'react-redux';
+import type { CheckFrequency } from 'react-redux/es/hooks/useSelector';
+import type { RechartsRootState } from './store';
+export type RechartsReduxContextValue = {
+    store: Store<RechartsRootState, Action>;
+    subscription: Subscription;
+    stabilityCheck: CheckFrequency;
+    noopCheck: CheckFrequency;
+};
+/**
+ * We need to use our own independent Redux context because we need to avoid interfering with other people's Redux stores
+ * in case they decide to install and use Recharts in another Redux app which is likely to happen.
+ *
+ * https://react-redux.js.org/using-react-redux/accessing-store#providing-custom-context
+ */
+export declare const RechartsReduxContext: import("react").Context<RechartsReduxContextValue>;
Index: node_modules/recharts/types/state/RechartsStoreProvider.d.ts
===================================================================
--- node_modules/recharts/types/state/RechartsStoreProvider.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/RechartsStoreProvider.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import * as React from 'react';
+import { ReactNode } from 'react';
+import { RechartsRootState } from './store';
+type RechartsStoreProviderProps = {
+    children: ReactNode;
+    preloadedState?: Partial<RechartsRootState>;
+    reduxStoreName?: string;
+};
+export declare function RechartsStoreProvider({ preloadedState, children, reduxStoreName }: RechartsStoreProviderProps): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode>;
+export {};
Index: node_modules/recharts/types/state/ReportChartProps.d.ts
===================================================================
--- node_modules/recharts/types/state/ReportChartProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/ReportChartProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+import { UpdatableChartOptions } from './rootPropsSlice';
+export declare function ReportChartProps(props: UpdatableChartOptions): null;
Index: node_modules/recharts/types/state/ReportMainChartProps.d.ts
===================================================================
--- node_modules/recharts/types/state/ReportMainChartProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/ReportMainChartProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+import { LayoutType, Margin } from '../util/types';
+/**
+ * "Main" props are props that are only accepted on the main chart,
+ * as opposed to the small panorama chart inside a Brush.
+ */
+type MainChartProps = {
+    width: number;
+    height: number;
+    layout: LayoutType;
+    margin: Margin;
+};
+export declare function ReportMainChartProps({ layout, width, height, margin }: MainChartProps): null;
+export {};
Index: node_modules/recharts/types/state/ReportPolarOptions.d.ts
===================================================================
--- node_modules/recharts/types/state/ReportPolarOptions.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/ReportPolarOptions.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+import { PolarChartOptions } from './polarOptionsSlice';
+export declare function ReportPolarOptions(props: PolarChartOptions): null;
Index: node_modules/recharts/types/state/SetGraphicalItem.d.ts
===================================================================
--- node_modules/recharts/types/state/SetGraphicalItem.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/SetGraphicalItem.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { CartesianGraphicalItemSettings, PolarGraphicalItemSettings } from './graphicalItemsSlice';
+export declare function SetCartesianGraphicalItem<T extends CartesianGraphicalItemSettings>(props: T): null;
+export declare function SetPolarGraphicalItem(props: PolarGraphicalItemSettings): null;
Index: node_modules/recharts/types/state/SetLegendPayload.d.ts
===================================================================
--- node_modules/recharts/types/state/SetLegendPayload.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/SetLegendPayload.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import type { LegendPayload } from '../component/DefaultLegendContent';
+export declare function SetLegendPayload({ legendPayload }: {
+    legendPayload: ReadonlyArray<LegendPayload>;
+}): null;
+export declare function SetPolarLegendPayload({ legendPayload }: {
+    legendPayload: ReadonlyArray<LegendPayload>;
+}): null;
Index: node_modules/recharts/types/state/SetTooltipEntrySettings.d.ts
===================================================================
--- node_modules/recharts/types/state/SetTooltipEntrySettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/SetTooltipEntrySettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { TooltipPayloadConfiguration } from './tooltipSlice';
+type SetTooltipEntrySettingsProps<T> = {
+    args: T;
+    fn: (input: T) => TooltipPayloadConfiguration;
+};
+export declare function SetTooltipEntrySettings<T>({ fn, args }: SetTooltipEntrySettingsProps<T>): null;
+export {};
Index: node_modules/recharts/types/state/brushSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/brushSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/brushSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+import { PayloadAction } from '@reduxjs/toolkit';
+import { Padding } from '../util/types';
+/**
+ * From all Brush properties, only height has a default value and will always be defined.
+ * Other properties are nullable and will be computed from offsets and margins if they are not set.
+ */
+export type BrushSettings = {
+    x: number | undefined;
+    y: number | undefined;
+    width: number | undefined;
+    height: number;
+    padding: Padding;
+};
+export declare const brushSlice: import("@reduxjs/toolkit").Slice<BrushSettings, {
+    setBrushSettings(_state: BrushSettings, action: PayloadAction<BrushSettings | null>): BrushSettings;
+}, "brush">;
+export declare const setBrushSettings: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<BrushSettings, "brush/setBrushSettings">;
+export declare const brushReducer: import("redux").Reducer<BrushSettings>;
Index: node_modules/recharts/types/state/cartesianAxisSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/cartesianAxisSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/cartesianAxisSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,91 @@
+import { ReactElement, SVGProps } from 'react';
+import { AxisDomain, AxisDomainType, AxisInterval, AxisTick, DataKey, ScaleType } from '../util/types';
+import { RechartsScale } from '../util/ChartUtils';
+import { TickFormatter } from '../cartesian/CartesianAxis';
+import type { AxisRange } from './selectors/axisSelectors';
+export type AxisId = string | number;
+export type XAxisPadding = {
+    left?: number;
+    right?: number;
+} | 'gap' | 'no-gap';
+export type YAxisPadding = {
+    top?: number;
+    bottom?: number;
+} | 'gap' | 'no-gap';
+export type XAxisOrientation = 'top' | 'bottom';
+export type YAxisOrientation = 'left' | 'right';
+/**
+ * Properties shared in X, Y, and Z axes
+ */
+export type BaseCartesianAxis = {
+    id: AxisId;
+    scale: ScaleType | RechartsScale | undefined;
+    type: AxisDomainType;
+    /**
+     * The axis functionality is severely restricted without a dataKey
+     * - but there is still something left, and the prop is optional
+     * so this can also be undefined even in real charts.
+     * There are no defaults.
+     */
+    dataKey: DataKey<any> | undefined;
+    unit: string | undefined;
+    name: string | undefined;
+    allowDuplicatedCategory: boolean;
+    allowDataOverflow: boolean;
+    reversed: boolean;
+    includeHidden: boolean;
+    domain: AxisDomain | undefined;
+};
+export type TicksSettings = {
+    allowDecimals: boolean;
+    tickCount: number;
+    /**
+     * Ticks can be any type when the axis is the type of category
+     * Ticks must be numbers when the axis is the type of number
+     */
+    ticks: ReadonlyArray<AxisTick> | undefined;
+    tick: SVGProps<SVGTextElement> | ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | boolean;
+};
+/**
+ * These are the external props, visible for users as they set them using our public API.
+ * There is all sorts of internal computed things based on these, but they will come through selectors.
+ *
+ * Properties shared between X and Y axes
+ */
+export type CartesianAxisSettings = BaseCartesianAxis & TicksSettings & {
+    interval: AxisInterval;
+    mirror: boolean;
+    minTickGap: number;
+    angle: number;
+    hide: boolean;
+    tickFormatter: TickFormatter | undefined;
+};
+export type XAxisSettings = CartesianAxisSettings & {
+    padding: XAxisPadding;
+    height: number;
+    orientation: XAxisOrientation;
+};
+export type YAxisWidth = number | 'auto';
+export type YAxisSettings = CartesianAxisSettings & {
+    padding: YAxisPadding;
+    width: YAxisWidth;
+    orientation: YAxisOrientation;
+};
+/**
+ * Z axis is special because it's never displayed. It controls the size of Scatter dots,
+ * but it never displays ticks anywhere.
+ */
+export type ZAxisSettings = BaseCartesianAxis & {
+    range: AxisRange;
+};
+type AxisMapState = {
+    xAxis: Record<AxisId, XAxisSettings>;
+    yAxis: Record<AxisId, YAxisSettings>;
+    zAxis: Record<AxisId, ZAxisSettings>;
+};
+export declare const addXAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<XAxisSettings, "cartesianAxis/addXAxis">, removeXAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<XAxisSettings, "cartesianAxis/removeXAxis">, addYAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<YAxisSettings, "cartesianAxis/addYAxis">, removeYAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<YAxisSettings, "cartesianAxis/removeYAxis">, addZAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ZAxisSettings, "cartesianAxis/addZAxis">, removeZAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ZAxisSettings, "cartesianAxis/removeZAxis">, updateYAxisWidth: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<{
+    id: AxisId;
+    width: number;
+}, "cartesianAxis/updateYAxisWidth">;
+export declare const cartesianAxisReducer: import("redux").Reducer<AxisMapState>;
+export {};
Index: node_modules/recharts/types/state/chartDataSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/chartDataSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/chartDataSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+/**
+ * This is the data that's coming through main chart `data` prop
+ * Recharts is very flexible in what it accepts so the type is very flexible too.
+ * This will typically be an object, and various components will provide various `dataKey`
+ * that dictates how to pull data from that object.
+ *
+ * TL;DR: before dataKey
+ */
+export type ChartData = unknown[];
+/**
+ * So this is the same unknown type as ChartData but this is after the dataKey has been applied.
+ * We still don't know what the type is - that depends on what exactly it was before the dataKey application,
+ * and the dataKey can return whatever anyway - but let's keep it separate as a form of documentation.
+ *
+ * TL;DR: ChartData after dataKey.
+ */
+export type AppliedChartData = ReadonlyArray<{
+    value: unknown;
+}>;
+export type ChartDataState = {
+    chartData: ChartData | undefined;
+    /**
+     * store a copy of chart data after it has been processed by each chart's specific
+     * compute functions. TODO: add other charts besides Sankey
+     */
+    computedData: unknown | undefined;
+    /**
+     * Using Brush, users can choose where they want to zoom in.
+     * This is zero-based index of the starting data point.
+     */
+    dataStartIndex: number;
+    /**
+     * Using Brush, users can choose where they want to zoom in.
+     * This is zero-based index of the last data point.
+     */
+    dataEndIndex: number;
+};
+export declare const initialChartDataState: ChartDataState;
+export declare const setChartData: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ChartData, "chartData/setChartData">, setDataStartEndIndexes: import("@reduxjs/toolkit").ActionCreatorWithNonInferrablePayload<"chartData/setDataStartEndIndexes">, setComputedData: import("@reduxjs/toolkit").ActionCreatorWithNonInferrablePayload<"chartData/setComputedData">;
+export declare const chartDataReducer: import("redux").Reducer<ChartDataState>;
Index: node_modules/recharts/types/state/errorBarSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/errorBarSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/errorBarSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,29 @@
+import { ErrorBarDirection } from '../cartesian/ErrorBar';
+import { DataKey } from '../util/types';
+import { GraphicalItemId } from './graphicalItemsSlice';
+/**
+ * ErrorBars have lot more settings but all the others are scoped to the component itself.
+ * Only some of them required to be reported to the global store because XAxis and YAxis need to know
+ * if the error bar is contributing to extending the axis domain.
+ */
+export type ErrorBarsSettings = {
+    /**
+     * The direction is only used in Scatter chart, and decided based on ChartLayout in other charts.
+     */
+    direction: ErrorBarDirection;
+    /**
+     * The dataKey decides which property from the data will each individual ErrorBar use.
+     * If it so happens that the ErrorBar data are bigger than the axis domain,
+     * the error bar data will stretch the axis domain.
+     */
+    dataKey: DataKey<any>;
+};
+export type ErrorBarsState = Record<GraphicalItemId, ReadonlyArray<ErrorBarsSettings>>;
+export declare const addErrorBar: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<{
+    itemId: GraphicalItemId;
+    errorBar: ErrorBarsSettings;
+}, "errorBars/addErrorBar">, removeErrorBar: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<{
+    itemId: GraphicalItemId;
+    errorBar: ErrorBarsSettings;
+}, "errorBars/removeErrorBar">;
+export declare const errorBarReducer: import("redux").Reducer<ErrorBarsState>;
Index: node_modules/recharts/types/state/externalEventsMiddleware.d.ts
===================================================================
--- node_modules/recharts/types/state/externalEventsMiddleware.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/externalEventsMiddleware.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { SyntheticEvent } from 'react';
+import { CategoricalChartFunc } from '../chart/types';
+type ExternalEventActionPayload = {
+    reactEvent: SyntheticEvent;
+    handler: CategoricalChartFunc | undefined;
+};
+export declare const externalEventAction: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ExternalEventActionPayload, string>;
+export declare const externalEventsMiddleware: import("@reduxjs/toolkit").ListenerMiddlewareInstance<unknown, import("@reduxjs/toolkit").ThunkDispatch<unknown, unknown, import("redux").AnyAction>, unknown>;
+export {};
Index: node_modules/recharts/types/state/graphicalItemsSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/graphicalItemsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/graphicalItemsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,85 @@
+import { ChartData } from './chartDataSlice';
+import { AxisId } from './cartesianAxisSlice';
+import { DataKey } from '../util/types';
+import { LineSettings } from './types/LineSettings';
+import { ScatterSettings } from './types/ScatterSettings';
+import { AreaSettings } from './types/AreaSettings';
+import { BarSettings } from './types/BarSettings';
+import { RadialBarSettings } from './types/RadialBarSettings';
+import { PieSettings } from './types/PieSettings';
+import { RadarSettings } from './types/RadarSettings';
+/**
+ * Unique ID of the graphical item.
+ * This is used to identify the graphical item in the state and in the React tree.
+ * This is required for every graphical item - it's either provided by the user or generated automatically.
+ */
+export type GraphicalItemId = string;
+export type CartesianGraphicalItemType = 'area' | 'bar' | 'line' | 'scatter';
+export type PolarGraphicalItemType = 'pie' | 'radar' | 'radialBar';
+export interface GraphicalItemSettings {
+    /**
+     * Unique ID of the graphical item.
+     * This is used to identify the graphical item in the state and in the React tree.
+     * This is required for every graphical item - it's either provided by the user or generated automatically.
+     */
+    id: GraphicalItemId;
+    /**
+     * If the given graphical item has its own data array, it will appear here.
+     * If this is undefined, the data will be taken from the chart root prop.
+     */
+    data: ChartData | undefined;
+    dataKey: DataKey<any> | undefined;
+    /**
+     * Why not just stop pushing the graphical items to state when they are hidden?
+     * Well some components decide to continue showing them anyway.
+     * Legend for example will keep showing a record for hidden graphical items.
+     * Stacks for example will ignore them.
+     */
+    hide: boolean;
+}
+export interface BaseCartesianGraphicalItemSettings extends GraphicalItemSettings {
+    /**
+     * Each of the graphical items explicitly says which axis it uses;
+     * this property is optional for users but every graphical item must have a default,
+     * and it is required here.
+     */
+    xAxisId: AxisId;
+    yAxisId: AxisId;
+    zAxisId: AxisId;
+    /**
+     * Graphical items that are inside Brush panorama should not interact with the main area graphical items
+     * and vice versa.
+     */
+    isPanorama: boolean;
+}
+export type CartesianGraphicalItemSettings = AreaSettings | BarSettings | LineSettings | ScatterSettings;
+export interface BasePolarGraphicalItemSettings extends GraphicalItemSettings {
+    angleAxisId: AxisId;
+    radiusAxisId: AxisId;
+}
+export type PolarGraphicalItemSettings = PieSettings | RadarSettings | RadialBarSettings;
+export type GraphicalItemsState = {
+    /**
+     * This is an array of all cartesian graphical items and their settings.
+     * Graphical item is a visual representation of data on the chart.
+     * Some examples are: Line, Bar.
+     *
+     * The order is arbitrary; do not expect that indexes here will be the same as indexes elsewhere.
+     */
+    cartesianItems: ReadonlyArray<CartesianGraphicalItemSettings>;
+    /**
+     * This is an array of all polar graphical items and their settings.
+     * Graphical item is a visual representation of data on the chart.
+     * Some examples are: Pie, Radar, RadialBar
+     *
+     * The order is arbitrary; do not expect that indexes here will be the same as indexes elsewhere.
+     */
+    polarItems: ReadonlyArray<PolarGraphicalItemSettings>;
+};
+type ReplacePayload<T> = {
+    prev: T;
+    next: T;
+};
+export declare const addCartesianGraphicalItem: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<CartesianGraphicalItemSettings, "graphicalItems/addCartesianGraphicalItem">, replaceCartesianGraphicalItem: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ReplacePayload<CartesianGraphicalItemSettings>, "graphicalItems/replaceCartesianGraphicalItem">, removeCartesianGraphicalItem: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<CartesianGraphicalItemSettings, "graphicalItems/removeCartesianGraphicalItem">, addPolarGraphicalItem: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<PolarGraphicalItemSettings, "graphicalItems/addPolarGraphicalItem">, removePolarGraphicalItem: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<PolarGraphicalItemSettings, "graphicalItems/removePolarGraphicalItem">;
+export declare const graphicalItemsReducer: import("redux").Reducer<GraphicalItemsState>;
+export {};
Index: node_modules/recharts/types/state/hooks.d.ts
===================================================================
--- node_modules/recharts/types/state/hooks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/hooks.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+import { type AppDispatch, type RechartsRootState } from './store';
+export declare const useAppDispatch: () => AppDispatch;
+/**
+ * This is a recharts variant of `useSelector` from 'react-redux' package.
+ *
+ * The difference is that react-redux version will throw an Error when used outside of Redux context.
+ *
+ * This, recharts version, will return undefined instead.
+ *
+ * This is because we want to allow using our components outside the Chart wrapper,
+ * and have people provide all props explicitly.
+ *
+ * If however they use the component inside a chart wrapper then those props become optional,
+ * and we read them from Redux state instead.
+ *
+ * @param selector for pulling things out of Redux store; will not be called if the store is not accessible
+ * @return whatever the selector returned; or undefined when outside of Redux store
+ */
+export declare function useAppSelector<T>(selector: (state: RechartsRootState) => T): T | undefined;
Index: node_modules/recharts/types/state/keyboardEventsMiddleware.d.ts
===================================================================
--- node_modules/recharts/types/state/keyboardEventsMiddleware.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/keyboardEventsMiddleware.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export declare const keyDownAction: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<string, string>;
+export declare const focusAction: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"focus">;
+export declare const keyboardEventsMiddleware: import("@reduxjs/toolkit").ListenerMiddlewareInstance<unknown, import("@reduxjs/toolkit").ThunkDispatch<unknown, unknown, import("redux").AnyAction>, unknown>;
Index: node_modules/recharts/types/state/layoutSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/layoutSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/layoutSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { LayoutType, Margin, Size } from '../util/types';
+type ChartLayoutState = {
+    layoutType: LayoutType;
+    width: number;
+    height: number;
+    margin: Margin;
+    /**
+     * How much is the chart zoomed in.
+     * Used for scaling the mouse coordinates to the chart coordinates.
+     */
+    scale: number;
+};
+export declare const setMargin: import("@reduxjs/toolkit").ActionCreatorWithNonInferrablePayload<"chartLayout/setMargin">, setLayout: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<LayoutType, "chartLayout/setLayout">, setChartSize: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<Size, "chartLayout/setChartSize">, setScale: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<number, "chartLayout/setScale">;
+export declare const chartLayoutReducer: import("redux").Reducer<ChartLayoutState>;
+export {};
Index: node_modules/recharts/types/state/legendSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/legendSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/legendSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+import { LayoutType, Size } from '../util/types';
+import { HorizontalAlignmentType, LegendPayload, VerticalAlignmentType } from '../component/DefaultLegendContent';
+import type { LegendItemSorter } from '../component/Legend';
+export type LegendSettings = {
+    layout: LayoutType;
+    align: HorizontalAlignmentType;
+    verticalAlign: VerticalAlignmentType;
+    itemSorter: LegendItemSorter;
+};
+/**
+ * The properties inside this state update independently of each other and quite often.
+ * When selecting, never select the whole state because you are going to get
+ * unnecessary re-renders. Select only the properties you need.
+ *
+ * This is why this state type is not exported - don't use it directly.
+ */
+type LegendState = {
+    settings: LegendSettings;
+    size: Size;
+    /**
+     * This is a 2D array of LegendPayloads. The first dimension is for each graphical item.
+     * Some items may have multiple legend items, so the second dimension is for each legend item.
+     */
+    payload: ReadonlyArray<ReadonlyArray<LegendPayload>>;
+};
+export declare const setLegendSize: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<Size, "legend/setLegendSize">, setLegendSettings: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<LegendSettings, "legend/setLegendSettings">, addLegendPayload: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<readonly LegendPayload[], "legend/addLegendPayload">, removeLegendPayload: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<readonly LegendPayload[], "legend/removeLegendPayload">;
+export declare const legendReducer: import("redux").Reducer<LegendState>;
+export {};
Index: node_modules/recharts/types/state/mouseEventsMiddleware.d.ts
===================================================================
--- node_modules/recharts/types/state/mouseEventsMiddleware.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/mouseEventsMiddleware.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { MousePointer } from '../util/types';
+export declare const mouseClickAction: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<MousePointer, string>;
+export declare const mouseClickMiddleware: import("@reduxjs/toolkit").ListenerMiddlewareInstance<unknown, import("@reduxjs/toolkit").ThunkDispatch<unknown, unknown, import("redux").AnyAction>, unknown>;
+export declare const mouseMoveAction: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<MousePointer, string>;
+export declare const mouseMoveMiddleware: import("@reduxjs/toolkit").ListenerMiddlewareInstance<unknown, import("@reduxjs/toolkit").ThunkDispatch<unknown, unknown, import("redux").AnyAction>, unknown>;
Index: node_modules/recharts/types/state/optionsSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/optionsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/optionsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { TooltipEventType } from '../util/types';
+import { TooltipIndex, TooltipPayloadSearcher } from './tooltipSlice';
+/**
+ * These chart options are decided internally, by Recharts,
+ * and will not change during the lifetime of the chart.
+ *
+ * Changing these options can be done by swapping the root element
+ * which will make a brand-new Redux store.
+ *
+ * If you want to store options that can be changed by the user,
+ * use UpdatableChartOptions in rootPropsSlice.ts.
+ */
+export type ChartOptions = {
+    chartName: string;
+    defaultTooltipEventType: TooltipEventType;
+    validateTooltipEventTypes?: ReadonlyArray<TooltipEventType>;
+    tooltipPayloadSearcher: TooltipPayloadSearcher | undefined;
+    /**
+     * We use this to identify which chart is sending events when synchronising.
+     * Without it, we can't tell the difference between an action that arrived from another chart
+     * and an action that was dispatched by the chart itself.
+     */
+    eventEmitter: symbol | undefined;
+};
+export declare function arrayTooltipSearcher<T>(data: ReadonlyArray<T>, strIndex: TooltipIndex): T | undefined;
+export declare const optionsReducer: import("redux").Reducer<ChartOptions>;
+export declare const createEventEmitter: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"options/createEventEmitter">;
Index: node_modules/recharts/types/state/polarAxisSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/polarAxisSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/polarAxisSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { AxisId, BaseCartesianAxis, TicksSettings } from './cartesianAxisSlice';
+export type RadiusAxisSettings = BaseCartesianAxis & TicksSettings;
+export type AngleAxisSettings = BaseCartesianAxis & TicksSettings;
+type PolarAxisState = {
+    radiusAxis: Record<AxisId, RadiusAxisSettings>;
+    angleAxis: Record<AxisId, AngleAxisSettings>;
+};
+export declare const addRadiusAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<RadiusAxisSettings, "polarAxis/addRadiusAxis">, removeRadiusAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<RadiusAxisSettings, "polarAxis/removeRadiusAxis">, addAngleAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<AngleAxisSettings, "polarAxis/addAngleAxis">, removeAngleAxis: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<AngleAxisSettings, "polarAxis/removeAngleAxis">;
+export declare const polarAxisReducer: import("redux").Reducer<PolarAxisState>;
+export {};
Index: node_modules/recharts/types/state/polarOptionsSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/polarOptionsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/polarOptionsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+export type PolarChartOptions = {
+    cx: number | string;
+    cy: number | string;
+    startAngle: number;
+    endAngle: number;
+    innerRadius: number | string;
+    outerRadius: number | string;
+};
+export declare const updatePolarOptions: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<PolarChartOptions, "polarOptions/updatePolarOptions">;
+export declare const polarOptionsReducer: import("redux").Reducer<PolarChartOptions>;
Index: node_modules/recharts/types/state/reduxDevtoolsJsonStringifyReplacer.d.ts
===================================================================
--- node_modules/recharts/types/state/reduxDevtoolsJsonStringifyReplacer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/reduxDevtoolsJsonStringifyReplacer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare function reduxDevtoolsJsonStringifyReplacer(_key: string, value: unknown): unknown;
Index: node_modules/recharts/types/state/referenceElementsSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/referenceElementsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/referenceElementsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { PayloadAction } from '@reduxjs/toolkit';
+import { WritableDraft } from 'immer';
+import { AxisId } from './cartesianAxisSlice';
+import { IfOverflow } from '../util/IfOverflow';
+export type ReferenceElementSettings = {
+    yAxisId: AxisId;
+    xAxisId: AxisId;
+    ifOverflow: IfOverflow;
+};
+export type ReferenceDotSettings = ReferenceElementSettings & {
+    x: unknown;
+    y: unknown;
+    r: number;
+};
+export type ReferenceAreaSettings = ReferenceElementSettings & {
+    x1: unknown;
+    x2: unknown;
+    y1: unknown;
+    y2: unknown;
+};
+export type ReferenceLineSettings = ReferenceElementSettings & {
+    x: unknown;
+    y: unknown;
+};
+type ReferenceElementState = {
+    dots: ReadonlyArray<ReferenceDotSettings>;
+    areas: ReadonlyArray<ReferenceAreaSettings>;
+    lines: ReadonlyArray<ReferenceLineSettings>;
+};
+export declare const referenceElementsSlice: import("@reduxjs/toolkit").Slice<ReferenceElementState, {
+    addDot: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceDotSettings>) => void;
+    removeDot: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceDotSettings>) => void;
+    addArea: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceAreaSettings>) => void;
+    removeArea: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceAreaSettings>) => void;
+    addLine: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceLineSettings>) => void;
+    removeLine: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceLineSettings>) => void;
+}, "referenceElements">;
+export declare const addDot: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ReferenceDotSettings, "referenceElements/addDot">, removeDot: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ReferenceDotSettings, "referenceElements/removeDot">, addArea: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ReferenceAreaSettings, "referenceElements/addArea">, removeArea: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ReferenceAreaSettings, "referenceElements/removeArea">, addLine: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ReferenceLineSettings, "referenceElements/addLine">, removeLine: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<ReferenceLineSettings, "referenceElements/removeLine">;
+export declare const referenceElementsReducer: import("redux").Reducer<ReferenceElementState>;
+export {};
Index: node_modules/recharts/types/state/rootPropsSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/rootPropsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/rootPropsSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { StackOffsetType } from '../util/types';
+import { SyncMethod } from '../synchronisation/types';
+/**
+ * These are chart options that users can choose - which means they can also
+ * choose to change them which should trigger a re-render.
+ */
+export type UpdatableChartOptions = {
+    accessibilityLayer: boolean;
+    barCategoryGap: number | string;
+    barGap: number | string;
+    barSize: string | number | undefined;
+    /**
+     * Useful for debugging which chart is which when synchronising.
+     * The className is also passed to the root element of the chart but that's done in the JSX, not through Redux.
+     */
+    className: string | undefined;
+    maxBarSize: number | undefined;
+    stackOffset: StackOffsetType;
+    /**
+     * Charts that share the same syncId will have their Tooltip and Brush synchronised.
+     */
+    syncId: number | string | undefined;
+    syncMethod: SyncMethod;
+};
+export declare const initialState: UpdatableChartOptions;
+export declare const rootPropsReducer: import("redux").Reducer<UpdatableChartOptions>;
+export declare const updateOptions: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<UpdatableChartOptions, "rootProps/updateOptions">;
Index: node_modules/recharts/types/state/selectors/areaSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/areaSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/areaSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { Series } from 'victory-vendor/d3-shape';
+import { NullableCoordinate } from '../../util/types';
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+import { NullablePoint } from '../../shape/Curve';
+import { StackDataPoint } from '../../util/stacks/stackTypes';
+import { GraphicalItemId } from '../graphicalItemsSlice';
+export interface AreaPointItem extends NullablePoint {
+    x: number | null;
+    y: number | null;
+    value?: number | number[];
+    payload?: any;
+}
+export type ComputedArea = {
+    points: ReadonlyArray<AreaPointItem>;
+    baseLine: number | NullableCoordinate[];
+    isRange: boolean;
+};
+export declare const selectGraphicalItemStackedData: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean, id: GraphicalItemId) => Series<StackDataPoint, string>;
+export declare const selectArea: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean, id: GraphicalItemId) => ComputedArea | undefined;
Index: node_modules/recharts/types/state/selectors/axisSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/axisSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/axisSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,483 @@
+import { RechartsScale } from '../../util/ChartUtils';
+import { AxisDomain, CartesianTickItem, CategoricalDomain, Coordinate, LayoutType, NumberDomain, Size, StackOffsetType, TickItem } from '../../util/types';
+import { AxisId, BaseCartesianAxis, CartesianAxisSettings, XAxisOrientation, XAxisSettings, YAxisOrientation, YAxisSettings, ZAxisSettings } from '../cartesianAxisSlice';
+import { RechartsRootState } from '../store';
+import { AppliedChartData, ChartData, ChartDataState } from '../chartDataSlice';
+import { CartesianGraphicalItemSettings, GraphicalItemSettings, PolarGraphicalItemSettings } from '../graphicalItemsSlice';
+import { ReferenceAreaSettings, ReferenceDotSettings, ReferenceElementSettings, ReferenceLineSettings } from '../referenceElementsSlice';
+import { AxisPropsForCartesianGridTicksGeneration } from '../../cartesian/CartesianGrid';
+import { AngleAxisSettings, RadiusAxisSettings } from '../polarAxisSlice';
+import { AllStackGroups } from '../../util/stacks/stackTypes';
+import { DisplayedStackedData } from './combiners/combineDisplayedStackedData';
+import { DefinitelyStackedGraphicalItem } from '../types/StackedGraphicalItem';
+import { ErrorBarsSettings, ErrorBarsState } from '../errorBarSlice';
+/**
+ * angle, radius, X, Y, and Z axes all have domain and range and scale and associated settings
+ */
+type XorYorZType = 'xAxis' | 'yAxis' | 'zAxis' | 'radiusAxis' | 'angleAxis';
+/**
+ * X and Y axes have ticks. Z axis is never displayed and so it lacks ticks
+ * and tick settings.
+ */
+export type XorYType = 'xAxis' | 'yAxis' | 'angleAxis' | 'radiusAxis';
+export type AxisWithTicksSettings = XAxisSettings | YAxisSettings | AngleAxisSettings | RadiusAxisSettings;
+/**
+ * If an axis is not explicitly defined as an element,
+ * we still need to render something in the chart and we need
+ * some object to hold the domain and default settings.
+ */
+export declare const implicitXAxis: XAxisSettings;
+export declare const selectXAxisSettings: (state: RechartsRootState, axisId: AxisId) => XAxisSettings;
+/**
+ * If an axis is not explicitly defined as an element,
+ * we still need to render something in the chart and we need
+ * some object to hold the domain and default settings.
+ */
+export declare const implicitYAxis: YAxisSettings;
+export declare const selectYAxisSettings: (state: RechartsRootState, axisId: AxisId) => YAxisSettings;
+export declare const implicitZAxis: ZAxisSettings;
+export declare const selectZAxisSettings: (state: RechartsRootState, axisId: AxisId) => ZAxisSettings;
+export declare const selectBaseAxis: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => BaseCartesianAxis;
+/**
+ * Selects either an X or Y axis. Doesn't work with Z axis - for that, instead use selectBaseAxis.
+ * @param state Root state
+ * @param axisType xAxis | yAxis
+ * @param axisId xAxisId | yAxisId
+ * @returns axis settings object
+ */
+export declare const selectAxisSettings: (state: RechartsRootState, axisType: XorYType, axisId: AxisId) => AxisWithTicksSettings;
+/**
+ * @param state RechartsRootState
+ * @return boolean true if there is at least one Bar or RadialBar
+ */
+export declare const selectHasBar: (state: RechartsRootState) => boolean;
+/**
+ * Filters CartesianGraphicalItemSettings by the relevant axis ID
+ * @param axisType 'xAxis' | 'yAxis' | 'zAxis' | 'radiusAxis' | 'angleAxis'
+ * @param axisId from props, defaults to 0
+ *
+ * @returns Predicate function that return true for CartesianGraphicalItemSettings that are relevant to the specified axis
+ */
+export declare function itemAxisPredicate(axisType: XorYorZType, axisId: AxisId): (item: CartesianGraphicalItemSettings | PolarGraphicalItemSettings) => boolean;
+export declare const selectUnfilteredCartesianItems: (state: RechartsRootState) => ReadonlyArray<CartesianGraphicalItemSettings>;
+export declare const combineGraphicalItemsSettings: <T extends GraphicalItemSettings>(graphicalItems: ReadonlyArray<T>, axisSettings: BaseCartesianAxis, axisPredicate: (item: T) => boolean) => T[];
+export declare const selectCartesianItemsSettings: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => ReadonlyArray<CartesianGraphicalItemSettings>;
+export declare const selectStackedCartesianItemsSettings: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => ReadonlyArray<DefinitelyStackedGraphicalItem>;
+export declare const filterGraphicalNotStackedItems: (cartesianItems: ReadonlyArray<GraphicalItemSettings>) => ReadonlyArray<GraphicalItemSettings>;
+export declare const combineGraphicalItemsData: (cartesianItems: ReadonlyArray<GraphicalItemSettings>) => unknown[];
+/**
+ * This is a "cheap" selector - it returns the data but doesn't iterate them, so it is not sensitive on the array length.
+ * Also does not apply dataKey yet.
+ * @param state RechartsRootState
+ * @returns data defined on the chart graphical items, such as Line or Scatter or Pie, and filtered with appropriate dataKey
+ */
+export declare const selectCartesianGraphicalItemsData: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => ChartData;
+export declare const combineDisplayedData: (graphicalItemsData: ChartData, { chartData, dataStartIndex, dataEndIndex }: ChartDataState) => ChartData;
+/**
+ * This selector will return all data there is in the chart: graphical items, chart root, all together.
+ * Useful for figuring out an axis domain (because that needs to know of everything),
+ * not useful for rendering individual graphical elements (because they need to know which data is theirs and which is not).
+ *
+ * This function will discard the original indexes, so it is also not useful for anything that depends on ordering.
+ */
+export declare const selectDisplayedData: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => ChartData;
+export declare const combineAppliedValues: (data: ChartData, axisSettings: BaseCartesianAxis, items: ReadonlyArray<GraphicalItemSettings>) => AppliedChartData;
+/**
+ * This selector will return all values with the appropriate dataKey applied on them.
+ * Which dataKey is appropriate depends on where it is defined.
+ *
+ * This is an expensive selector - it will iterate all data and compute their value using the provided dataKey.
+ */
+export declare const selectAllAppliedValues: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => AppliedChartData;
+export declare function isErrorBarRelevantForAxisType(axisType: XorYorZType, errorBar: ErrorBarsSettings): boolean;
+export type AppliedChartDataWithErrorDomain = {
+    /**
+     * This is the value after the dataKey has been applied. Presumably a number? But no guarantees.
+     */
+    value: unknown;
+    /**
+     * This is the error domain, if any, for the current value.
+     * This may be either x or y direction, whatever is applicable.
+     * Assumption is that we're looking at this data from the point of view of a single axis,
+     * and that axis dictates the relevant direction.
+     */
+    errorDomain: ReadonlyArray<number> | undefined;
+};
+/**
+ * This is type of "error" in chart. It is set by using ErrorBar, and it can represent confidence interval,
+ * or gap in the data, or standard deviation, or quartiles in boxplot, or whiskers or whatever.
+ *
+ * We will internally represent it as a tuple of two numbers, where the first number is the lower bound and the second number is the upper bound.
+ *
+ * It is also true that the first number should be lower than or equal to the associated "main value",
+ * and the second number should be higher than or equal to the associated "main value".
+ */
+export type ErrorValue = [number, number];
+export declare function fromMainValueToError(value: unknown): ErrorValue | undefined;
+/**
+ * @param entry One item in the 'data' array. Could be anything really - this is defined externally. This is the raw, before dataKey application
+ * @param appliedValue This is the result of applying the 'main' dataKey on the `entry`.
+ * @param relevantErrorBars Error bars that are relevant for the current axis and layout and all that.
+ * @return either undefined or an array of ErrorValue
+ */
+export declare function getErrorDomainByDataKey(entry: unknown, appliedValue: unknown, relevantErrorBars: ReadonlyArray<ErrorBarsSettings> | undefined): ReadonlyArray<number>;
+export declare const selectDisplayedStackedData: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => DisplayedStackedData;
+export declare const combineStackGroups: (displayedData: DisplayedStackedData, items: ReadonlyArray<DefinitelyStackedGraphicalItem>, stackOffsetType: StackOffsetType) => AllStackGroups;
+/**
+ * Stack groups are groups of graphical items that stack on each other.
+ * Stack is a function of axis type (X, Y), axis ID, and stack ID.
+ * Graphical items that do not have a stack ID are not going to be present in stack groups.
+ */
+export declare const selectStackGroups: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => AllStackGroups | undefined;
+export declare const combineDomainOfStackGroups: (stackGroups: AllStackGroups | undefined, { dataStartIndex, dataEndIndex }: ChartDataState, axisType: XorYorZType) => NumberDomain | undefined;
+export declare const selectDomainOfStackGroups: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<AxisId, XAxisSettings>;
+        yAxis: Record<AxisId, YAxisSettings>;
+        zAxis: Record<AxisId, ZAxisSettings>;
+    };
+    chartData: ChartDataState;
+    errorBars: ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<AxisId, RadiusAxisSettings>;
+        angleAxis: Record<AxisId, AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<ReferenceDotSettings>;
+        areas: ReadonlyArray<ReferenceAreaSettings>;
+        lines: ReadonlyArray<ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => NumberDomain) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: AllStackGroups, resultFuncArgs_1: ChartDataState, resultFuncArgs_2: any) => NumberDomain;
+    memoizedResultFunc: ((resultFuncArgs_0: AllStackGroups, resultFuncArgs_1: ChartDataState, resultFuncArgs_2: any) => NumberDomain) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => NumberDomain;
+    dependencies: [(state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => AllStackGroups | undefined, (state: RechartsRootState) => ChartDataState, <T>(_state: RechartsRootState, axisType: T) => T];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+export declare const combineAppliedNumericalValuesIncludingErrorValues: (data: ChartData, axisSettings: BaseCartesianAxis, items: ReadonlyArray<CartesianGraphicalItemSettings>, errorBars: ErrorBarsState, axisType: XorYorZType) => ReadonlyArray<AppliedChartDataWithErrorDomain>;
+export declare const selectAllErrorBarSettings: (state: RechartsRootState) => ErrorBarsState;
+export declare const selectErrorBarsSettingsExceptStacked: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => ReadonlyArray<ErrorBarsSettings>;
+export declare const selectAllAppliedNumericalValuesIncludingErrorValues: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => ReadonlyArray<AppliedChartDataWithErrorDomain>;
+export declare const getDomainDefinition: (axisSettings: CartesianAxisSettings) => AxisDomain;
+export declare const mergeDomains: (...domains: ReadonlyArray<NumberDomain | undefined>) => NumberDomain | undefined;
+export declare const selectReferenceDots: (state: RechartsRootState) => ReadonlyArray<ReferenceDotSettings>;
+export declare const filterReferenceElements: <T extends ReferenceElementSettings>(elements: ReadonlyArray<T>, axisType: XorYorZType, axisId: AxisId) => ReadonlyArray<T>;
+export declare const selectReferenceDotsByAxis: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<AxisId, XAxisSettings>;
+        yAxis: Record<AxisId, YAxisSettings>;
+        zAxis: Record<AxisId, ZAxisSettings>;
+    };
+    chartData: ChartDataState;
+    errorBars: ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<AxisId, RadiusAxisSettings>;
+        angleAxis: Record<AxisId, AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<ReferenceDotSettings>;
+        areas: ReadonlyArray<ReferenceAreaSettings>;
+        lines: ReadonlyArray<ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}, _axisType: unknown, axisId: AxisId) => readonly ReferenceDotSettings[]) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: readonly ReferenceDotSettings[], resultFuncArgs_1: any, resultFuncArgs_2: AxisId) => readonly ReferenceDotSettings[];
+    memoizedResultFunc: ((resultFuncArgs_0: readonly ReferenceDotSettings[], resultFuncArgs_1: any, resultFuncArgs_2: AxisId) => readonly ReferenceDotSettings[]) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => readonly ReferenceDotSettings[];
+    dependencies: [(state: RechartsRootState) => ReadonlyArray<ReferenceDotSettings>, <T>(_state: RechartsRootState, axisType: T) => T, (_state: RechartsRootState, _axisType: unknown, axisId: AxisId) => AxisId];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+export declare const selectReferenceAreas: (state: RechartsRootState) => ReadonlyArray<ReferenceAreaSettings>;
+export declare const selectReferenceAreasByAxis: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => ReadonlyArray<ReferenceAreaSettings>;
+export declare const selectReferenceLines: (state: RechartsRootState) => ReadonlyArray<ReferenceLineSettings>;
+export declare const selectReferenceLinesByAxis: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => ReadonlyArray<ReferenceLineSettings>;
+export declare const combineDotsDomain: (dots: ReadonlyArray<ReferenceDotSettings>, axisType: XorYType) => NumberDomain | undefined;
+export declare const combineAreasDomain: (areas: ReadonlyArray<ReferenceAreaSettings>, axisType: XorYType) => NumberDomain | undefined;
+export declare const combineLinesDomain: (lines: ReadonlyArray<ReferenceLineSettings>, axisType: XorYType) => NumberDomain | undefined;
+export declare const selectDomainDefinition: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => AxisDomain | undefined;
+export declare const combineNumericalDomain: (axisSettings: BaseCartesianAxis, domainDefinition: AxisDomain | undefined, domainOfStackGroups: NumberDomain | undefined, allDataWithErrorDomains: ReadonlyArray<AppliedChartDataWithErrorDomain>, referenceElementsDomain: NumberDomain | undefined, layout: LayoutType, axisType: XorYorZType) => NumberDomain | undefined;
+export declare const selectNumericalDomain: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => NumberDomain | undefined;
+export declare const combineAxisDomain: (axisSettings: BaseCartesianAxis, layout: LayoutType, displayedData: ChartData | undefined, allAppliedValues: AppliedChartData, stackOffsetType: StackOffsetType, axisType: XorYorZType, numericalDomain: NumberDomain | undefined) => NumberDomain | CategoricalDomain | undefined;
+export declare const selectAxisDomain: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => NumberDomain | CategoricalDomain | undefined;
+export declare const combineRealScaleType: (axisConfig: BaseCartesianAxis | undefined, layout: LayoutType, hasBar: boolean, chartType: string, axisType: XorYorZType) => string | undefined;
+export declare const selectRealScaleType: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => string | undefined;
+export declare function combineScaleFunction(axis: BaseCartesianAxis, realScaleType: string | undefined, axisDomain: NumberDomain | CategoricalDomain, axisRange: [number, number]): RechartsScale | undefined;
+export declare const combineNiceTicks: (axisDomain: NumberDomain | CategoricalDomain | undefined, axisSettings: CartesianAxisSettings, realScaleType: string) => ReadonlyArray<number> | undefined;
+export declare const selectNiceTicks: (state: RechartsRootState, axisType: XorYType, axisId: AxisId, isPanorama: boolean) => ReadonlyArray<number> | undefined;
+export declare const combineAxisDomainWithNiceTicks: (axisSettings: BaseCartesianAxis, domain: NumberDomain | CategoricalDomain | undefined, niceTicks: ReadonlyArray<number> | undefined, axisType: XorYType) => NumberDomain | CategoricalDomain | undefined;
+export declare const selectAxisDomainIncludingNiceTicks: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => NumberDomain | CategoricalDomain | undefined;
+/**
+ * Returns the smallest gap, between two numbers in the data, as a ratio of the whole range (max - min).
+ * Ignores domain provided by user and only considers domain from data.
+ *
+ * The result is a number between 0 and 1.
+ */
+export declare const selectSmallestDistanceBetweenValues: (state: RechartsRootState, axisType: XorYType, axisId: AxisId, isPanorama: boolean) => number | undefined;
+export declare const selectCalculatedXAxisPadding: (state: RechartsRootState, axisId: AxisId) => number;
+export declare const selectCalculatedYAxisPadding: (state: RechartsRootState, axisId: AxisId) => number;
+export declare const combineXAxisRange: (state: RechartsRootState, axisId: AxisId, isPanorama: boolean) => AxisRange | undefined;
+export type AxisRange = readonly [number, number];
+export declare const combineYAxisRange: (state: RechartsRootState, axisId: AxisId, isPanorama: boolean) => AxisRange | undefined;
+export declare const selectAxisRange: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => AxisRange | undefined;
+export declare const selectAxisRangeWithReverse: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => AxisRange | undefined;
+export declare const selectAxisScale: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => RechartsScale | undefined;
+export declare const selectErrorBarsSettings: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<AxisId, XAxisSettings>;
+        yAxis: Record<AxisId, YAxisSettings>;
+        zAxis: Record<AxisId, ZAxisSettings>;
+    };
+    chartData: ChartDataState;
+    errorBars: ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<AxisId, RadiusAxisSettings>;
+        angleAxis: Record<AxisId, AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<ReferenceDotSettings>;
+        areas: ReadonlyArray<ReferenceAreaSettings>;
+        lines: ReadonlyArray<ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}, axisType: XorYorZType, axisId: AxisId) => readonly ErrorBarsSettings[]) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: readonly CartesianGraphicalItemSettings[], resultFuncArgs_1: ErrorBarsState, resultFuncArgs_2: any) => readonly ErrorBarsSettings[];
+    memoizedResultFunc: ((resultFuncArgs_0: readonly CartesianGraphicalItemSettings[], resultFuncArgs_1: ErrorBarsState, resultFuncArgs_2: any) => readonly ErrorBarsSettings[]) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => readonly ErrorBarsSettings[];
+    dependencies: [(state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => ReadonlyArray<CartesianGraphicalItemSettings>, (state: RechartsRootState) => ErrorBarsState, <T>(_state: RechartsRootState, axisType: T) => T];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+export declare const selectXAxisSize: (state: RechartsRootState, xAxisId: AxisId) => Size;
+type AxisOffsetSteps = Record<AxisId, number>;
+export declare const selectAllXAxesOffsetSteps: (state: RechartsRootState, orientation: XAxisOrientation, mirror: boolean) => AxisOffsetSteps;
+export declare const selectAllYAxesOffsetSteps: (state: RechartsRootState, orientation: YAxisOrientation, mirror: boolean) => AxisOffsetSteps;
+export declare const selectXAxisPosition: (state: RechartsRootState, axisId: AxisId) => Coordinate | undefined;
+export declare const selectYAxisPosition: (state: RechartsRootState, axisId: AxisId) => Coordinate | undefined;
+export declare const selectYAxisSize: (state: RechartsRootState, yAxisId: AxisId) => Size;
+export declare const selectCartesianAxisSize: (state: RechartsRootState, axisType: XorYType, axisId: AxisId) => number | undefined;
+export declare const combineDuplicateDomain: (chartLayout: LayoutType, appliedValues: AppliedChartData, axis: BaseCartesianAxis, axisType: XorYorZType) => ReadonlyArray<unknown> | undefined;
+export declare const selectDuplicateDomain: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => ReadonlyArray<unknown> | undefined;
+export declare const combineCategoricalDomain: (layout: LayoutType, appliedValues: AppliedChartData, axis: AxisWithTicksSettings, axisType: XorYType) => ReadonlyArray<unknown> | undefined;
+export declare const selectCategoricalDomain: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => ReadonlyArray<unknown> | undefined;
+export declare const selectAxisPropsNeededForCartesianGridTicksGenerator: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<AxisId, XAxisSettings>;
+        yAxis: Record<AxisId, YAxisSettings>;
+        zAxis: Record<AxisId, ZAxisSettings>;
+    };
+    chartData: ChartDataState;
+    errorBars: ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<AxisId, RadiusAxisSettings>;
+        angleAxis: Record<AxisId, AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<ReferenceDotSettings>;
+        areas: ReadonlyArray<ReferenceAreaSettings>;
+        lines: ReadonlyArray<ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}, axisType: "xAxis" | "yAxis", axisId: AxisId, isPanorama: boolean) => AxisPropsForCartesianGridTicksGeneration) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: LayoutType, resultFuncArgs_1: XAxisSettings | YAxisSettings, resultFuncArgs_2: string, resultFuncArgs_3: RechartsScale, resultFuncArgs_4: readonly unknown[], resultFuncArgs_5: readonly unknown[], resultFuncArgs_6: AxisRange, resultFuncArgs_7: readonly number[], resultFuncArgs_8: any) => AxisPropsForCartesianGridTicksGeneration;
+    memoizedResultFunc: ((resultFuncArgs_0: LayoutType, resultFuncArgs_1: XAxisSettings | YAxisSettings, resultFuncArgs_2: string, resultFuncArgs_3: RechartsScale, resultFuncArgs_4: readonly unknown[], resultFuncArgs_5: readonly unknown[], resultFuncArgs_6: AxisRange, resultFuncArgs_7: readonly number[], resultFuncArgs_8: any) => AxisPropsForCartesianGridTicksGeneration) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => AxisPropsForCartesianGridTicksGeneration;
+    dependencies: [(state: RechartsRootState) => LayoutType, (state: RechartsRootState, axisType: "xAxis" | "yAxis", axisId: AxisId) => XAxisSettings | YAxisSettings, (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId) => string | undefined, (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => RechartsScale | undefined, (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => ReadonlyArray<unknown> | undefined, (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => ReadonlyArray<unknown> | undefined, (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => AxisRange | undefined, (state: RechartsRootState, axisType: XorYType, axisId: AxisId, isPanorama: boolean) => ReadonlyArray<number> | undefined, <T>(_state: RechartsRootState, axisType: T) => T];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+export declare const combineAxisTicks: (layout: LayoutType, axis: AxisWithTicksSettings, realScaleType: string, scale: RechartsScale | undefined, niceTicks: ReadonlyArray<number> | undefined, axisRange: AxisRange | undefined, duplicateDomain: ReadonlyArray<unknown> | undefined, categoricalDomain: ReadonlyArray<unknown> | undefined, axisType: XorYType) => ReadonlyArray<TickItem> | undefined;
+export declare const selectTicksOfAxis: (state: RechartsRootState, axisType: XorYType, axisId: AxisId, isPanorama: boolean) => ReadonlyArray<CartesianTickItem> | undefined;
+export declare const combineGraphicalItemTicks: (layout: LayoutType, axis: AxisWithTicksSettings, scale: RechartsScale | undefined, axisRange: AxisRange | undefined, duplicateDomain: ReadonlyArray<unknown> | undefined, categoricalDomain: ReadonlyArray<unknown> | undefined, axisType: XorYType) => TickItem[] | undefined;
+export declare const selectTicksOfGraphicalItem: (state: RechartsRootState, axisType: XorYType, axisId: AxisId, isPanorama: boolean) => TickItem[] | undefined;
+export type BaseAxisWithScale = BaseCartesianAxis & {
+    scale: RechartsScale;
+};
+export declare const selectAxisWithScale: (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId, isPanorama: boolean) => BaseAxisWithScale | undefined;
+export type ZAxisWithScale = ZAxisSettings & {
+    scale: RechartsScale;
+};
+export declare const selectZAxisWithScale: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<AxisId, XAxisSettings>;
+        yAxis: Record<AxisId, YAxisSettings>;
+        zAxis: Record<AxisId, ZAxisSettings>;
+    };
+    chartData: ChartDataState;
+    errorBars: ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<AxisId, RadiusAxisSettings>;
+        angleAxis: Record<AxisId, AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<ReferenceDotSettings>;
+        areas: ReadonlyArray<ReferenceAreaSettings>;
+        lines: ReadonlyArray<ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}, axisType: "zAxis", axisId: AxisId, isPanorama: false) => ZAxisWithScale) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: ZAxisSettings, resultFuncArgs_1: RechartsScale) => ZAxisWithScale;
+    memoizedResultFunc: ((resultFuncArgs_0: ZAxisSettings, resultFuncArgs_1: RechartsScale) => ZAxisWithScale) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => ZAxisWithScale;
+    dependencies: [(state: RechartsRootState, _axisType: "zAxis", axisId: AxisId) => ZAxisSettings, (state: RechartsRootState, axisType: "zAxis", axisId: AxisId, isPanorama: false) => RechartsScale | undefined];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+/**
+ * We are also going to need to implement polar chart directions if we want to support keyboard controls for those.
+ */
+export type AxisDirection = 'left-to-right' | 'right-to-left' | 'top-to-bottom' | 'bottom-to-top';
+export declare const selectChartDirection: (state: RechartsRootState) => AxisDirection | undefined;
+export {};
Index: node_modules/recharts/types/state/selectors/barSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/barSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/barSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,56 @@
+import { ReactElement } from 'react';
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+import { BarPositionPosition, StackId } from '../../util/ChartUtils';
+import { DataKey } from '../../util/types';
+import { BarRectangleItem } from '../../cartesian/Bar';
+import { AllStackGroups, StackSeries } from '../../util/stacks/stackTypes';
+import { MaybeStackedGraphicalItem } from '../types/StackedGraphicalItem';
+import { BarSettings } from '../types/BarSettings';
+import { GraphicalItemId } from '../graphicalItemsSlice';
+export declare const selectMaxBarSize: (_state: RechartsRootState, _xAxisId: AxisId, _yAxisId: AxisId, _isPanorama: boolean, id: GraphicalItemId) => number | undefined;
+export declare const selectAllVisibleBars: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean) => ReadonlyArray<BarSettings>;
+type BarCategory = {
+    stackId: StackId | undefined;
+    /**
+     * List of dataKeys of items stacked at this position.
+     * All of these Bars are either sharing the same stackId,
+     * or this is an array with one Bar because it has no stackId defined.
+     *
+     * This structure limits us to having one dataKey only once per stack which I think is reasonable.
+     * People who want to have the same data twice can duplicate their data to have two distinct dataKeys.
+     */
+    dataKeys: ReadonlyArray<DataKey<any>>;
+    /**
+     * Width (in horizontal chart) or height (in vertical chart) of this stack of items
+     */
+    barSize: number | undefined;
+};
+export type SizeList = ReadonlyArray<BarCategory>;
+export declare const selectBarCartesianAxisSize: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId) => number;
+export declare const combineBarSizeList: (allBars: ReadonlyArray<MaybeStackedGraphicalItem>, globalSize: number | undefined, totalSize: number | undefined) => SizeList | undefined;
+export declare const selectBarSizeList: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean, id: GraphicalItemId) => SizeList | undefined;
+export declare const selectBarBandSize: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean, id: GraphicalItemId) => number | undefined;
+export declare const selectAxisBandSize: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean) => number | undefined;
+export type BarWithPosition = {
+    stackId: StackId | undefined;
+    /**
+     * List of dataKeys of items stacked at this position.
+     * All of these Bars are either sharing the same stackId,
+     * or this is an array with one Bar because it has no stackId defined.
+     *
+     * This structure limits us to having one dataKey only once per stack which I think is reasonable.
+     * People who want to have the same data twice can duplicate their data to have two distinct dataKeys.
+     */
+    dataKeys: ReadonlyArray<DataKey<any>>;
+    /**
+     * Position of this stack in absolute pixels measured from the start of the chart
+     */
+    position: BarPositionPosition;
+};
+export declare const combineAllBarPositions: (sizeList: SizeList, globalMaxBarSize: number, barGap: string | number, barCategoryGap: string | number, barBandSize: number, bandSize: number, childMaxBarSize: number | undefined) => ReadonlyArray<BarWithPosition> | undefined;
+export declare const selectAllBarPositions: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean, id: GraphicalItemId) => ReadonlyArray<BarWithPosition> | undefined;
+export declare const selectBarPosition: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean, _id: GraphicalItemId) => BarPositionPosition | undefined;
+export declare const combineStackedData: (stackGroups: AllStackGroups | undefined, barSettings: MaybeStackedGraphicalItem | undefined) => StackSeries | undefined;
+export declare const selectBarRectangles: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean, id: GraphicalItemId, cells: ReadonlyArray<ReactElement> | undefined) => ReadonlyArray<BarRectangleItem> | undefined;
+export {};
Index: node_modules/recharts/types/state/selectors/brushSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/brushSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/brushSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { RechartsRootState } from '../store';
+import { BrushSettings } from '../brushSlice';
+export declare const selectBrushSettings: (state: RechartsRootState) => BrushSettings;
+export type BrushDimensions = {
+    x: number;
+    y: number;
+    width: number;
+    height: number;
+};
+export declare const selectBrushDimensions: (state: RechartsRootState) => BrushDimensions;
Index: node_modules/recharts/types/state/selectors/combiners/combineActiveLabel.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/combiners/combineActiveLabel.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/combiners/combineActiveLabel.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { TickItem } from '../../../util/types';
+import { TooltipIndex } from '../../tooltipSlice';
+export declare const combineActiveLabel: (tooltipTicks: ReadonlyArray<TickItem>, activeIndex: TooltipIndex) => string | undefined;
Index: node_modules/recharts/types/state/selectors/combiners/combineActiveTooltipIndex.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/combiners/combineActiveTooltipIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/combiners/combineActiveTooltipIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { TooltipIndex, TooltipInteractionState } from '../../tooltipSlice';
+import { ChartData } from '../../chartDataSlice';
+export declare const combineActiveTooltipIndex: (tooltipInteraction: TooltipInteractionState, chartData: ChartData) => TooltipIndex | null;
Index: node_modules/recharts/types/state/selectors/combiners/combineAxisRangeWithReverse.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/combiners/combineAxisRangeWithReverse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/combiners/combineAxisRangeWithReverse.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { BaseCartesianAxis } from '../../cartesianAxisSlice';
+import { AxisRange } from '../axisSelectors';
+export declare const combineAxisRangeWithReverse: (axisSettings: BaseCartesianAxis | undefined, axisRange: AxisRange | undefined) => AxisRange | undefined;
Index: node_modules/recharts/types/state/selectors/combiners/combineCoordinateForDefaultIndex.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/combiners/combineCoordinateForDefaultIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/combiners/combineCoordinateForDefaultIndex.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { ChartOffsetInternal, Coordinate, LayoutType, TickItem } from '../../../util/types';
+import { TooltipIndex, TooltipPayloadConfiguration, TooltipPayloadSearcher } from '../../tooltipSlice';
+export declare const combineCoordinateForDefaultIndex: (width: number, height: number, layout: LayoutType, offset: ChartOffsetInternal, tooltipTicks: ReadonlyArray<TickItem>, defaultIndex: TooltipIndex | undefined, tooltipConfigurations: ReadonlyArray<TooltipPayloadConfiguration>, tooltipPayloadSearcher: TooltipPayloadSearcher | undefined) => Coordinate | undefined;
Index: node_modules/recharts/types/state/selectors/combiners/combineDisplayedStackedData.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/combiners/combineDisplayedStackedData.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/combiners/combineDisplayedStackedData.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+import { ChartDataState } from '../../chartDataSlice';
+import { BaseCartesianAxis } from '../../cartesianAxisSlice';
+import { StackSeriesIdentifier } from '../../../util/stacks/stackTypes';
+import { DefinitelyStackedGraphicalItem } from '../../types/StackedGraphicalItem';
+/**
+ * In a stacked chart, each graphical item has its own data. That data could be either:
+ * - defined on the chart root, in which case the item gets a unique dataKey
+ * - or defined on the item itself, in which case multiple items can share the same dataKey
+ *
+ * That means we cannot use the dataKey as a unique identifier for the item.
+ *
+ * This type represents a single data point in a stacked chart, where each key is a series identifier
+ * and the value is the numeric value for that series using the numerical axis dataKey.
+ */
+export type DisplayedStackedDataPoint = Record<StackSeriesIdentifier, number>;
+export type DisplayedStackedData = ReadonlyArray<DisplayedStackedDataPoint>;
+export declare function combineDisplayedStackedData(stackedGraphicalItems: ReadonlyArray<DefinitelyStackedGraphicalItem>, { chartData }: ChartDataState, tooltipAxisSettings: BaseCartesianAxis): DisplayedStackedData;
Index: node_modules/recharts/types/state/selectors/combiners/combineTooltipInteractionState.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/combiners/combineTooltipInteractionState.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/combiners/combineTooltipInteractionState.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import { TooltipIndex, TooltipInteractionState, TooltipState } from '../../tooltipSlice';
+import { TooltipEventType } from '../../../util/types';
+import { TooltipTrigger } from '../../../chart/types';
+export declare const combineTooltipInteractionState: (tooltipState: TooltipState, tooltipEventType: TooltipEventType | undefined, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => TooltipInteractionState;
Index: node_modules/recharts/types/state/selectors/combiners/combineTooltipPayload.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/combiners/combineTooltipPayload.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/combiners/combineTooltipPayload.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import { TooltipIndex, TooltipPayload, TooltipPayloadConfiguration, TooltipPayloadSearcher } from '../../tooltipSlice';
+import { ChartDataState } from '../../chartDataSlice';
+import { BaseAxisProps, TooltipEventType } from '../../../util/types';
+export declare const combineTooltipPayload: (tooltipPayloadConfigurations: ReadonlyArray<TooltipPayloadConfiguration>, activeIndex: TooltipIndex, chartDataState: ChartDataState, tooltipAxis: BaseAxisProps | undefined, activeLabel: string | undefined, tooltipPayloadSearcher: TooltipPayloadSearcher | undefined, tooltipEventType: TooltipEventType) => TooltipPayload | undefined;
Index: node_modules/recharts/types/state/selectors/combiners/combineTooltipPayloadConfigurations.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/combiners/combineTooltipPayloadConfigurations.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/combiners/combineTooltipPayloadConfigurations.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import { TooltipIndex, TooltipPayloadConfiguration, TooltipState } from '../../tooltipSlice';
+import { TooltipEventType } from '../../../util/types';
+import { TooltipTrigger } from '../../../chart/types';
+export declare const combineTooltipPayloadConfigurations: (tooltipState: TooltipState, tooltipEventType: TooltipEventType, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => ReadonlyArray<TooltipPayloadConfiguration>;
Index: node_modules/recharts/types/state/selectors/containerSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/containerSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/containerSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import { RechartsRootState } from '../store';
+import { Margin } from '../../util/types';
+export declare const selectChartWidth: (state: RechartsRootState) => number;
+export declare const selectChartHeight: (state: RechartsRootState) => number;
+export declare const selectContainerScale: (state: RechartsRootState) => number;
+export declare const selectMargin: (state: RechartsRootState) => Margin | undefined;
Index: node_modules/recharts/types/state/selectors/dataSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/dataSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/dataSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { RechartsRootState } from '../store';
+import { ChartDataState } from '../chartDataSlice';
+/**
+ * This selector always returns the data with the indexes set by a Brush.
+ * Trouble is, that might or might not be what you want.
+ *
+ * In charts with Brush, you will sometimes want to select the full range of data, and sometimes the one decided by the Brush
+ * - even if the Brush is active, the panorama inside the Brush should show the full range of data.
+ *
+ * So instead of this selector, consider using either selectChartDataAndAlwaysIgnoreIndexes or selectChartDataWithIndexesIfNotInPanorama
+ *
+ * @param state RechartsRootState
+ * @returns data defined on the chart root element, such as BarChart or ScatterChart
+ */
+export declare const selectChartDataWithIndexes: (state: RechartsRootState) => ChartDataState;
+/**
+ * This selector will always return the full range of data, ignoring the indexes set by a Brush.
+ * Useful for when you want to render the full range of data, even if a Brush is active.
+ * For example: in the Brush panorama, in Legend, in Tooltip.
+ */
+export declare const selectChartDataAndAlwaysIgnoreIndexes: (state: RechartsRootState) => ChartDataState;
+export declare const selectChartDataWithIndexesIfNotInPanorama: (state: RechartsRootState, _unused1: unknown, _unused2: unknown, isPanorama: boolean) => ChartDataState;
Index: node_modules/recharts/types/state/selectors/funnelSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/funnelSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/funnelSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { ReactElement } from 'react';
+import { FunnelTrapezoidItem } from '../../cartesian/Funnel';
+import { ChartData } from '../chartDataSlice';
+import { RechartsRootState } from '../store';
+import { DataKey, TooltipType } from '../../util/types';
+type FunnelComposedData = {
+    trapezoids: ReadonlyArray<FunnelTrapezoidItem>;
+    data: ChartData | undefined;
+};
+export type ResolvedFunnelSettings = {
+    dataKey: DataKey<any>;
+    data: ChartData | undefined;
+    nameKey: DataKey<any>;
+    tooltipType?: TooltipType;
+    lastShapeType?: 'triangle' | 'rectangle';
+    reversed?: boolean;
+    customWidth?: string | number;
+    cells: ReadonlyArray<ReactElement>;
+    presentationProps: Record<string, any> | null;
+};
+export declare const selectFunnelTrapezoids: (state: RechartsRootState, { dataKey, nameKey, tooltipType, lastShapeType, reversed, customWidth, cells, presentationProps, }: ResolvedFunnelSettings) => FunnelComposedData;
+export {};
Index: node_modules/recharts/types/state/selectors/legendSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/legendSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/legendSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { RechartsRootState } from '../store';
+import { LegendSettings } from '../legendSlice';
+import { LegendPayload } from '../../component/DefaultLegendContent';
+import { Size } from '../../util/types';
+export declare const selectLegendSettings: (state: RechartsRootState) => LegendSettings;
+export declare const selectLegendSize: (state: RechartsRootState) => Size;
+export declare const selectLegendPayload: (state: RechartsRootState) => ReadonlyArray<LegendPayload>;
Index: node_modules/recharts/types/state/selectors/lineSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/lineSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/lineSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+import { LinePointItem } from '../../cartesian/Line';
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+import { GraphicalItemId } from '../graphicalItemsSlice';
+export declare const selectLinePoints: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean, id: GraphicalItemId) => ReadonlyArray<LinePointItem> | undefined;
Index: node_modules/recharts/types/state/selectors/pickAxisId.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/pickAxisId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/pickAxisId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+export declare const pickAxisId: (_state: RechartsRootState, _axisType: unknown, axisId: AxisId) => AxisId;
Index: node_modules/recharts/types/state/selectors/pickAxisType.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/pickAxisType.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/pickAxisType.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+import { RechartsRootState } from '../store';
+export declare const pickAxisType: <T>(_state: RechartsRootState, axisType: T) => T;
Index: node_modules/recharts/types/state/selectors/pieSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/pieSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/pieSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { ReactElement } from 'react';
+import { PieSectorDataItem } from '../../polar/Pie';
+import { RechartsRootState } from '../store';
+import { ChartData } from '../chartDataSlice';
+import type { LegendPayload } from '../../component/DefaultLegendContent';
+import { GraphicalItemId } from '../graphicalItemsSlice';
+export declare const selectDisplayedData: (state: RechartsRootState, id: GraphicalItemId, cells: ReadonlyArray<ReactElement> | undefined) => ChartData | undefined;
+export declare const selectPieLegend: (state: RechartsRootState, id: GraphicalItemId, cells: ReadonlyArray<ReactElement> | undefined) => ReadonlyArray<LegendPayload> | undefined;
+export declare const selectPieSectors: (state: RechartsRootState, id: GraphicalItemId, cells: ReadonlyArray<ReactElement> | undefined) => Readonly<PieSectorDataItem[]> | undefined;
Index: node_modules/recharts/types/state/selectors/polarAxisSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/polarAxisSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/polarAxisSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+import { AngleAxisSettings, RadiusAxisSettings } from '../polarAxisSlice';
+import { PolarChartOptions } from '../polarOptionsSlice';
+import { PolarViewBoxRequired } from '../../util/types';
+import { AxisRange } from './axisSelectors';
+export declare const implicitAngleAxis: AngleAxisSettings;
+export declare const implicitRadiusAxis: RadiusAxisSettings;
+export declare const implicitRadialBarAngleAxis: AngleAxisSettings;
+export declare const implicitRadialBarRadiusAxis: RadiusAxisSettings;
+export declare const selectAngleAxis: (state: RechartsRootState, angleAxisId: AxisId) => AngleAxisSettings;
+export declare const selectRadiusAxis: (state: RechartsRootState, radiusAxisId: AxisId) => RadiusAxisSettings;
+export declare const selectPolarOptions: (state: RechartsRootState) => PolarChartOptions | null;
+export declare const selectMaxRadius: (state: RechartsRootState) => number;
+export declare const selectOuterRadius: (state: RechartsRootState) => number | undefined;
+export declare const selectAngleAxisRange: (state: RechartsRootState) => AxisRange;
+export declare const selectAngleAxisRangeWithReversed: (state: RechartsRootState, angleAxisId: AxisId) => AxisRange | undefined;
+export declare const selectRadiusAxisRange: (state: RechartsRootState, radiusAxisId: AxisId) => AxisRange | undefined;
+export declare const selectRadiusAxisRangeWithReversed: (state: RechartsRootState, radiusAxisId: AxisId) => AxisRange | undefined;
+export declare const selectPolarViewBox: (state: RechartsRootState) => PolarViewBoxRequired | undefined;
Index: node_modules/recharts/types/state/selectors/polarGridSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/polarGridSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/polarGridSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+export type PolarAngles = Array<number>;
+export type PolarRadius = Array<number>;
+export declare const selectPolarGridAngles: (state: RechartsRootState, angleAxisId: AxisId) => PolarAngles | undefined;
+export declare const selectPolarGridRadii: (state: RechartsRootState, radiusAxisId: AxisId) => PolarRadius | undefined;
Index: node_modules/recharts/types/state/selectors/polarScaleSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/polarScaleSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/polarScaleSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+import { RechartsScale } from '../../util/ChartUtils';
+import { CartesianTickItem } from '../../util/types';
+export declare const selectPolarAxis: (state: RechartsRootState, axisType: "angleAxis" | "radiusAxis", axisId: AxisId) => import("../polarAxisSlice").RadiusAxisSettings;
+export declare const selectPolarAxisScale: (state: RechartsRootState, axisType: 'angleAxis' | 'radiusAxis', polarAxisId: AxisId) => RechartsScale | undefined;
+export declare const selectPolarCategoricalDomain: (state: RechartsRootState, axisType: 'angleAxis' | 'radiusAxis', polarAxisId: AxisId) => ReadonlyArray<unknown> | undefined;
+export declare const selectPolarAxisTicks: (state: RechartsRootState, axisType: 'angleAxis' | 'radiusAxis', polarAxisId: AxisId, isPanorama: boolean) => ReadonlyArray<CartesianTickItem> | undefined;
+export declare const selectPolarGraphicalItemAxisTicks: (state: RechartsRootState, axisType: 'angleAxis' | 'radiusAxis', polarAxisId: AxisId, isPanorama: boolean) => ReadonlyArray<CartesianTickItem> | undefined;
Index: node_modules/recharts/types/state/selectors/polarSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/polarSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/polarSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+import { AppliedChartData, ChartData } from '../chartDataSlice';
+import { RechartsRootState } from '../store';
+import { AxisId, BaseCartesianAxis } from '../cartesianAxisSlice';
+import { AppliedChartDataWithErrorDomain } from './axisSelectors';
+import { PolarGraphicalItemSettings } from '../graphicalItemsSlice';
+import { CategoricalDomain, NumberDomain } from '../../util/types';
+export type PolarAxisType = 'angleAxis' | 'radiusAxis';
+export declare const selectUnfilteredPolarItems: (state: RechartsRootState) => readonly PolarGraphicalItemSettings[];
+export declare const selectPolarItemsSettings: (state: RechartsRootState, axisType: PolarAxisType, polarAxisId: AxisId) => ReadonlyArray<PolarGraphicalItemSettings>;
+export declare const selectPolarDisplayedData: (state: RechartsRootState, axisType: PolarAxisType, polarAxisId: AxisId) => ChartData | undefined;
+export declare const selectPolarAppliedValues: (state: RechartsRootState, axisType: PolarAxisType, axisId: AxisId) => AppliedChartData;
+export declare const selectAllPolarAppliedNumericalValues: (state: RechartsRootState, axisType: PolarAxisType, axisId: AxisId) => ReadonlyArray<AppliedChartDataWithErrorDomain>;
+export declare const selectPolarAxisDomain: (state: RechartsRootState, axisType: PolarAxisType, polarAxisId: AxisId) => NumberDomain | CategoricalDomain | undefined;
+export declare const selectPolarNiceTicks: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+        yAxis: Record<AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+        zAxis: Record<AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("../chartDataSlice").ChartDataState;
+    errorBars: import("../errorBarSlice").ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: import("../../util/types").LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: import("../../util/types").Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<import("../referenceElementsSlice").ReferenceDotSettings>;
+        areas: ReadonlyArray<import("../referenceElementsSlice").ReferenceAreaSettings>;
+        lines: ReadonlyArray<import("../referenceElementsSlice").ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}, axisType: "radiusAxis" | "angleAxis", polarAxisId: AxisId) => readonly number[]) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: NumberDomain | CategoricalDomain, resultFuncArgs_1: BaseCartesianAxis, resultFuncArgs_2: string) => readonly number[];
+    memoizedResultFunc: ((resultFuncArgs_0: NumberDomain | CategoricalDomain, resultFuncArgs_1: BaseCartesianAxis, resultFuncArgs_2: string) => readonly number[]) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => readonly number[];
+    dependencies: [(state: RechartsRootState, axisType: PolarAxisType, polarAxisId: AxisId) => NumberDomain | CategoricalDomain | undefined, (state: RechartsRootState, axisType: "xAxis" | "yAxis" | "zAxis" | "radiusAxis" | "angleAxis", axisId: AxisId) => BaseCartesianAxis, (state: RechartsRootState, axisType: "xAxis" | "yAxis" | "zAxis" | "radiusAxis" | "angleAxis", axisId: AxisId) => string | undefined];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+export declare const selectPolarAxisDomainIncludingNiceTicks: (state: RechartsRootState, axisType: PolarAxisType, polarAxisId: AxisId) => NumberDomain | CategoricalDomain | undefined;
Index: node_modules/recharts/types/state/selectors/radarSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/radarSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/radarSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import { RechartsRootState } from '../store';
+import { AngleAxisForRadar, RadarComposedData } from '../../polar/Radar';
+import { BaseAxisWithScale } from './axisSelectors';
+import { AxisId } from '../cartesianAxisSlice';
+import { DataKey } from '../../util/types';
+export declare const selectRadiusAxisForBandSize: (state: RechartsRootState, radiusAxisId: AxisId) => BaseAxisWithScale | undefined;
+export declare const selectAngleAxisForBandSize: (state: RechartsRootState, _radiusAxisId: AxisId, angleAxisId: AxisId) => BaseAxisWithScale | undefined;
+export declare const selectAngleAxisWithScaleAndViewport: (state: RechartsRootState, _radiusAxisId: AxisId, angleAxisId: AxisId) => AngleAxisForRadar | undefined;
+export declare const selectRadarPoints: (state: RechartsRootState, radiusAxisId: AxisId, angleAxisId: AxisId, isPanorama: boolean, radarDataKey: DataKey<any> | undefined) => RadarComposedData | undefined;
Index: node_modules/recharts/types/state/selectors/radialBarSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/radialBarSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/radialBarSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+import { ReactElement } from 'react';
+import { RadialBarDataItem } from '../../polar/RadialBar';
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+import { LegendType, TickItem } from '../../util/types';
+import { BaseAxisWithScale } from './axisSelectors';
+import { BarPositionPosition } from '../../util/ChartUtils';
+import { BarWithPosition, SizeList } from './barSelectors';
+import { LegendPayload } from '../../component/DefaultLegendContent';
+import { RadialBarSettings } from '../types/RadialBarSettings';
+export declare const selectRadiusAxisWithScale: (state: RechartsRootState, radiusAxisId: AxisId) => BaseAxisWithScale | undefined;
+export declare const selectRadiusAxisTicks: (state: RechartsRootState, radiusAxisId: AxisId, _angleAxisId: AxisId, isPanorama: boolean) => ReadonlyArray<TickItem> | undefined;
+export declare const selectAngleAxisWithScale: (state: RechartsRootState, _radiusAxisId: AxisId, angleAxisId: AxisId) => BaseAxisWithScale | undefined;
+export declare const selectBandSizeOfPolarAxis: (state: RechartsRootState, radiusAxisId: AxisId, angleAxisId: AxisId, isPanorama: boolean) => number | undefined;
+export declare const selectBaseValue: (state: RechartsRootState, radiusAxisId: AxisId, angleAxisId: AxisId) => number | unknown;
+export declare const pickMaxBarSize: (_state: RechartsRootState, _radiusAxisId: AxisId, _angleAxisId: AxisId, radialBarSettings: RadialBarSettings, _cells: ReadonlyArray<ReactElement> | undefined) => number | undefined;
+export declare const selectPolarBarSizeList: (state: RechartsRootState, radiusAxisId: AxisId, angleAxisId: AxisId, radialBarSettings: RadialBarSettings, cells: ReadonlyArray<ReactElement> | undefined) => SizeList | undefined;
+export declare const selectPolarBarBandSize: (state: RechartsRootState, radiusAxisId: AxisId, angleAxisId: AxisId, radialBarSettings: RadialBarSettings, cells: ReadonlyArray<ReactElement> | undefined) => number | undefined;
+export declare const selectAllPolarBarPositions: (state: RechartsRootState, radiusAxisId: AxisId, angleAxisId: AxisId, radialBarSettings: RadialBarSettings, cells: ReadonlyArray<ReactElement> | undefined) => ReadonlyArray<BarWithPosition> | undefined;
+export declare const selectPolarBarPosition: (state: RechartsRootState, radiusAxisId: AxisId, angleAxisId: AxisId, radialBarSettings: RadialBarSettings, cells: ReadonlyArray<ReactElement> | undefined) => BarPositionPosition | undefined;
+export declare const selectRadialBarSectors: (state: RechartsRootState, radiusAxisId: AxisId | undefined, angleAxisId: AxisId | undefined, radialBarSettings: RadialBarSettings, cells: ReadonlyArray<ReactElement> | undefined) => ReadonlyArray<RadialBarDataItem>;
+export declare const selectRadialBarLegendPayload: (state: RechartsRootState, legendType: LegendType | undefined) => ReadonlyArray<LegendPayload>;
Index: node_modules/recharts/types/state/selectors/rootPropsSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/rootPropsSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/rootPropsSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { RechartsRootState } from '../store';
+import { StackOffsetType } from '../../util/types';
+import { SyncMethod } from '../../synchronisation/types';
+export declare const selectRootMaxBarSize: (state: RechartsRootState) => number | undefined;
+export declare const selectBarGap: (state: RechartsRootState) => string | number | undefined;
+export declare const selectBarCategoryGap: (state: RechartsRootState) => string | number | undefined;
+export declare const selectRootBarSize: (state: RechartsRootState) => string | number | undefined;
+export declare const selectStackOffsetType: (state: RechartsRootState) => StackOffsetType;
+export declare const selectChartName: (state: RechartsRootState) => string;
+export declare const selectSyncId: (state: RechartsRootState) => string | number;
+export declare const selectSyncMethod: (state: RechartsRootState) => SyncMethod;
+export declare const selectEventEmitter: (state: RechartsRootState) => symbol;
Index: node_modules/recharts/types/state/selectors/scatterSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/scatterSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/scatterSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+import { ReactElement } from 'react';
+import { ScatterPointItem } from '../../cartesian/Scatter';
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+import { GraphicalItemId } from '../graphicalItemsSlice';
+export declare const selectScatterPoints: (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId, zAxisId: AxisId, id: GraphicalItemId, cells: ReadonlyArray<ReactElement> | undefined, isPanorama: boolean) => ReadonlyArray<ScatterPointItem> | undefined;
Index: node_modules/recharts/types/state/selectors/selectActivePropsFromChartPointer.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectActivePropsFromChartPointer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectActivePropsFromChartPointer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import { RechartsRootState } from '../store';
+import { ActiveTooltipProps } from '../tooltipSlice';
+import { ChartPointer } from '../../util/types';
+export declare const selectActivePropsFromChartPointer: (state: RechartsRootState, chartPointer: ChartPointer) => ActiveTooltipProps | undefined;
Index: node_modules/recharts/types/state/selectors/selectAllAxes.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectAllAxes.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectAllAxes.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import { RechartsRootState } from '../store';
+import { XAxisSettings, YAxisSettings } from '../cartesianAxisSlice';
+export declare const selectAllXAxes: (state: RechartsRootState) => ReadonlyArray<XAxisSettings>;
+export declare const selectAllYAxes: (state: RechartsRootState) => ReadonlyArray<YAxisSettings>;
Index: node_modules/recharts/types/state/selectors/selectChartOffset.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectChartOffset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectChartOffset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,58 @@
+import { ChartOffsetInternal } from '../../util/types';
+import { ChartOffset } from '../../types';
+export declare const selectChartOffset: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+        yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+        zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("../chartDataSlice").ChartDataState;
+    errorBars: import("../errorBarSlice").ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: import("../../util/types").LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: import("../../util/types").Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<import("../referenceElementsSlice").ReferenceDotSettings>;
+        areas: ReadonlyArray<import("../referenceElementsSlice").ReferenceAreaSettings>;
+        lines: ReadonlyArray<import("../referenceElementsSlice").ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}) => ChartOffset) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: ChartOffsetInternal) => ChartOffset;
+    memoizedResultFunc: ((resultFuncArgs_0: ChartOffsetInternal) => ChartOffset) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => ChartOffset;
+    dependencies: [(state: import("../store").RechartsRootState) => ChartOffsetInternal];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
Index: node_modules/recharts/types/state/selectors/selectChartOffsetInternal.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectChartOffsetInternal.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectChartOffsetInternal.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,124 @@
+import { ChartOffsetInternal, Margin, Size } from '../../util/types';
+import { XAxisSettings, YAxisSettings } from '../cartesianAxisSlice';
+import { LegendSettings } from '../legendSlice';
+import { RechartsRootState } from '../store';
+export declare const selectBrushHeight: (state: RechartsRootState) => number;
+/**
+ * For internal use only.
+ *
+ * @param root state
+ * @return ChartOffsetInternal
+ */
+export declare const selectChartOffsetInternal: (state: RechartsRootState) => ChartOffsetInternal;
+export declare const selectChartViewBox: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<import("../cartesianAxisSlice").AxisId, XAxisSettings>;
+        yAxis: Record<import("../cartesianAxisSlice").AxisId, YAxisSettings>;
+        zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("../chartDataSlice").ChartDataState;
+    errorBars: import("../errorBarSlice").ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: import("../../util/types").LayoutType;
+        width: number;
+        height: number;
+        margin: Margin;
+        scale: number;
+    };
+    legend: {
+        settings: LegendSettings;
+        size: Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<import("../referenceElementsSlice").ReferenceDotSettings>;
+        areas: ReadonlyArray<import("../referenceElementsSlice").ReferenceAreaSettings>;
+        lines: ReadonlyArray<import("../referenceElementsSlice").ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}) => Required<import("../../util/types").CartesianViewBox>) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: ChartOffsetInternal) => Required<import("../../util/types").CartesianViewBox>;
+    memoizedResultFunc: ((resultFuncArgs_0: ChartOffsetInternal) => Required<import("../../util/types").CartesianViewBox>) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => Required<import("../../util/types").CartesianViewBox>;
+    dependencies: [(state: RechartsRootState) => ChartOffsetInternal];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+export declare const selectAxisViewBox: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<import("../cartesianAxisSlice").AxisId, XAxisSettings>;
+        yAxis: Record<import("../cartesianAxisSlice").AxisId, YAxisSettings>;
+        zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("../chartDataSlice").ChartDataState;
+    errorBars: import("../errorBarSlice").ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: import("../../util/types").LayoutType;
+        width: number;
+        height: number;
+        margin: Margin;
+        scale: number;
+    };
+    legend: {
+        settings: LegendSettings;
+        size: Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<import("../referenceElementsSlice").ReferenceDotSettings>;
+        areas: ReadonlyArray<import("../referenceElementsSlice").ReferenceAreaSettings>;
+        lines: ReadonlyArray<import("../referenceElementsSlice").ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}) => Required<import("../../util/types").CartesianViewBox>) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: number, resultFuncArgs_1: number) => Required<import("../../util/types").CartesianViewBox>;
+    memoizedResultFunc: ((resultFuncArgs_0: number, resultFuncArgs_1: number) => Required<import("../../util/types").CartesianViewBox>) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => Required<import("../../util/types").CartesianViewBox>;
+    dependencies: [(state: RechartsRootState) => number, (state: RechartsRootState) => number];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
Index: node_modules/recharts/types/state/selectors/selectPlotArea.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectPlotArea.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectPlotArea.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,131 @@
+export declare const selectPlotArea: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+        yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+        zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("../chartDataSlice").ChartDataState;
+    errorBars: import("../errorBarSlice").ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: import("../../util/types").LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: import("../../util/types").Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<import("../referenceElementsSlice").ReferenceDotSettings>;
+        areas: ReadonlyArray<import("../referenceElementsSlice").ReferenceAreaSettings>;
+        lines: ReadonlyArray<import("../referenceElementsSlice").ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}) => {
+    x: number;
+    y: number;
+    width: number;
+    height: number;
+}) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: import("../..").ChartOffset, resultFuncArgs_1: number, resultFuncArgs_2: number) => {
+        x: number;
+        y: number;
+        width: number;
+        height: number;
+    };
+    memoizedResultFunc: ((resultFuncArgs_0: import("../..").ChartOffset, resultFuncArgs_1: number, resultFuncArgs_2: number) => {
+        x: number;
+        y: number;
+        width: number;
+        height: number;
+    }) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => {
+        x: number;
+        y: number;
+        width: number;
+        height: number;
+    };
+    dependencies: [((state: import("redux").EmptyObject & {
+        brush: import("../brushSlice").BrushSettings;
+        cartesianAxis: {
+            xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+            yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+            zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+        };
+        chartData: import("../chartDataSlice").ChartDataState;
+        errorBars: import("../errorBarSlice").ErrorBarsState;
+        graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+        layout: {
+            layoutType: import("../../util/types").LayoutType;
+            width: number;
+            height: number;
+            margin: import("../../util/types").Margin;
+            scale: number;
+        };
+        legend: {
+            settings: import("../legendSlice").LegendSettings;
+            size: import("../../util/types").Size;
+            payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+        };
+        options: import("../optionsSlice").ChartOptions;
+        polarAxis: {
+            radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+            angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+        };
+        polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+        referenceElements: {
+            dots: ReadonlyArray<import("../referenceElementsSlice").ReferenceDotSettings>;
+            areas: ReadonlyArray<import("../referenceElementsSlice").ReferenceAreaSettings>;
+            lines: ReadonlyArray<import("../referenceElementsSlice").ReferenceLineSettings>;
+        };
+        rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+        tooltip: import("../tooltipSlice").TooltipState;
+    }) => import("../..").ChartOffset) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    } & {
+        resultFunc: (resultFuncArgs_0: import("../../util/types").ChartOffsetInternal) => import("../..").ChartOffset;
+        memoizedResultFunc: ((resultFuncArgs_0: import("../../util/types").ChartOffsetInternal) => import("../..").ChartOffset) & {
+            clearCache: () => void;
+            resultsCount: () => number;
+            resetResultsCount: () => void;
+        };
+        lastResult: () => import("../..").ChartOffset;
+        dependencies: [(state: import("../store").RechartsRootState) => import("../../util/types").ChartOffsetInternal];
+        recomputations: () => number;
+        resetRecomputations: () => void;
+        dependencyRecomputations: () => number;
+        resetDependencyRecomputations: () => void;
+    } & {
+        argsMemoize: typeof import("reselect").weakMapMemoize;
+        memoize: typeof import("reselect").weakMapMemoize;
+    }, (state: import("../store").RechartsRootState) => number, (state: import("../store").RechartsRootState) => number];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
Index: node_modules/recharts/types/state/selectors/selectTooltipAxis.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectTooltipAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectTooltipAxis.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { RechartsRootState } from '../store';
+import { AxisWithTicksSettings } from './axisSelectors';
+export declare const selectTooltipAxis: (state: RechartsRootState) => AxisWithTicksSettings;
Index: node_modules/recharts/types/state/selectors/selectTooltipAxisId.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectTooltipAxisId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectTooltipAxisId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { RechartsRootState } from '../store';
+import { AxisId } from '../cartesianAxisSlice';
+export declare const selectTooltipAxisId: (state: RechartsRootState) => AxisId;
Index: node_modules/recharts/types/state/selectors/selectTooltipAxisType.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectTooltipAxisType.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectTooltipAxisType.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { RechartsRootState } from '../store';
+import { XorYType } from './axisSelectors';
+export declare const selectTooltipAxisType: (state: RechartsRootState) => XorYType;
Index: node_modules/recharts/types/state/selectors/selectTooltipEventType.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectTooltipEventType.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectTooltipEventType.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { RechartsRootState } from '../store';
+import { TooltipEventType } from '../../util/types';
+import { SharedTooltipSettings } from '../tooltipSlice';
+export declare const selectDefaultTooltipEventType: (state: RechartsRootState) => TooltipEventType;
+export declare const selectValidateTooltipEventTypes: (state: RechartsRootState) => ReadonlyArray<TooltipEventType> | undefined;
+export declare function combineTooltipEventType(shared: SharedTooltipSettings, defaultTooltipEventType: TooltipEventType, validateTooltipEventTypes: ReadonlyArray<TooltipEventType> | undefined): TooltipEventType;
+export declare function selectTooltipEventType(state: RechartsRootState, shared: SharedTooltipSettings): TooltipEventType;
+export declare function useTooltipEventType(shared: SharedTooltipSettings): TooltipEventType | undefined;
Index: node_modules/recharts/types/state/selectors/selectTooltipPayloadSearcher.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectTooltipPayloadSearcher.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectTooltipPayloadSearcher.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { RechartsRootState } from '../store';
+import { TooltipPayloadSearcher } from '../tooltipSlice';
+export declare const selectTooltipPayloadSearcher: (state: RechartsRootState) => TooltipPayloadSearcher | undefined;
Index: node_modules/recharts/types/state/selectors/selectTooltipSettings.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectTooltipSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectTooltipSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { RechartsRootState } from '../store';
+import { TooltipSettingsState } from '../tooltipSlice';
+export declare const selectTooltipSettings: (state: RechartsRootState) => TooltipSettingsState;
Index: node_modules/recharts/types/state/selectors/selectTooltipState.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectTooltipState.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectTooltipState.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { RechartsRootState } from '../store';
+import { TooltipState } from '../tooltipSlice';
+export declare const selectTooltipState: (state: RechartsRootState) => TooltipState;
Index: node_modules/recharts/types/state/selectors/selectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/selectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/selectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,75 @@
+import { RechartsRootState } from '../store';
+import { ActiveTooltipProps, TooltipIndex, TooltipInteractionState, TooltipPayload, TooltipPayloadConfiguration } from '../tooltipSlice';
+import { AxisType, ChartOffsetInternal, ChartPointer, Coordinate, DataKey, LayoutType, PolarViewBoxRequired, TickItem, TooltipEventType } from '../../util/types';
+import { TooltipTrigger } from '../../chart/types';
+import { AxisRange } from './axisSelectors';
+export declare const useChartName: () => string | undefined;
+export declare const selectOrderedTooltipTicks: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+        yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+        zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("../chartDataSlice").ChartDataState;
+    errorBars: import("../errorBarSlice").ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: import("../../util/types").Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<import("../referenceElementsSlice").ReferenceDotSettings>;
+        areas: ReadonlyArray<import("../referenceElementsSlice").ReferenceAreaSettings>;
+        lines: ReadonlyArray<import("../referenceElementsSlice").ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}) => TickItem[]) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: readonly TickItem[]) => TickItem[];
+    memoizedResultFunc: ((resultFuncArgs_0: readonly TickItem[]) => TickItem[]) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => TickItem[];
+    dependencies: [(state: RechartsRootState) => ReadonlyArray<TickItem> | undefined];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+export declare const selectTooltipInteractionState: (state: RechartsRootState, tooltipEventType: TooltipEventType, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => TooltipInteractionState | undefined;
+export declare const selectActiveIndex: (state: RechartsRootState, tooltipEventType: TooltipEventType, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => TooltipIndex | null;
+export declare const selectTooltipDataKey: (state: RechartsRootState, tooltipEventType: TooltipEventType | undefined, trigger: TooltipTrigger) => DataKey<any> | undefined;
+export declare const selectTooltipPayloadConfigurations: (state: RechartsRootState, tooltipEventType: TooltipEventType, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => ReadonlyArray<TooltipPayloadConfiguration>;
+export declare const selectCoordinateForDefaultIndex: (state: RechartsRootState, tooltipEventType: TooltipEventType, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => Coordinate | undefined;
+export declare const selectActiveCoordinate: (state: RechartsRootState, tooltipEventType: TooltipEventType, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => Coordinate | undefined;
+export declare const selectActiveLabel: (state: RechartsRootState, tooltipEventType: TooltipEventType, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => string | number | undefined;
+export declare const selectTooltipPayload: (state: RechartsRootState, tooltipEventType: TooltipEventType, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => TooltipPayload | undefined;
+export declare const selectIsTooltipActive: (state: RechartsRootState, tooltipEventType: TooltipEventType, trigger: TooltipTrigger, defaultIndex: TooltipIndex | undefined) => {
+    isActive: boolean;
+    activeIndex: TooltipIndex | undefined;
+};
+export declare const combineActiveProps: (chartEvent: ChartPointer | undefined, layout: LayoutType | undefined, polarViewBox: PolarViewBoxRequired | undefined, tooltipAxisType: AxisType | undefined, tooltipAxisRange: AxisRange | undefined, tooltipTicks: ReadonlyArray<TickItem> | undefined, orderedTooltipTicks: ReadonlyArray<TickItem> | undefined, offset: ChartOffsetInternal) => ActiveTooltipProps | undefined;
Index: node_modules/recharts/types/state/selectors/tooltipSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/tooltipSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/tooltipSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,362 @@
+import { RechartsRootState } from '../store';
+import { AxisRange, AxisWithTicksSettings, XorYType } from './axisSelectors';
+import { RechartsScale } from '../../util/ChartUtils';
+import { CategoricalDomain, Coordinate, DataKey, LayoutType, NumberDomain, TickItem } from '../../util/types';
+import { ChartData } from '../chartDataSlice';
+import { GraphicalItemSettings } from '../graphicalItemsSlice';
+import { ReferenceAreaSettings, ReferenceDotSettings, ReferenceLineSettings } from '../referenceElementsSlice';
+import { TooltipIndex, TooltipPayload } from '../tooltipSlice';
+export declare const selectTooltipAxisRealScaleType: (state: RechartsRootState) => string | undefined;
+export declare const selectAllUnfilteredGraphicalItems: (state: RechartsRootState) => ReadonlyArray<GraphicalItemSettings>;
+export declare const selectAllGraphicalItemsSettings: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+        yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+        zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("../chartDataSlice").ChartDataState;
+    errorBars: import("../errorBarSlice").ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: import("../../util/types").Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<ReferenceDotSettings>;
+        areas: ReadonlyArray<ReferenceAreaSettings>;
+        lines: ReadonlyArray<ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}) => GraphicalItemSettings[]) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: readonly GraphicalItemSettings[], resultFuncArgs_1: AxisWithTicksSettings, resultFuncArgs_2: (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean) => GraphicalItemSettings[];
+    memoizedResultFunc: ((resultFuncArgs_0: readonly GraphicalItemSettings[], resultFuncArgs_1: AxisWithTicksSettings, resultFuncArgs_2: (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean) => GraphicalItemSettings[]) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => GraphicalItemSettings[];
+    dependencies: [(state: RechartsRootState) => ReadonlyArray<GraphicalItemSettings>, (state: RechartsRootState) => AxisWithTicksSettings, ((state: import("redux").EmptyObject & {
+        brush: import("../brushSlice").BrushSettings;
+        cartesianAxis: {
+            xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+            yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+            zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+        };
+        chartData: import("../chartDataSlice").ChartDataState;
+        errorBars: import("../errorBarSlice").ErrorBarsState;
+        graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+        layout: {
+            layoutType: LayoutType;
+            width: number;
+            height: number;
+            margin: import("../../util/types").Margin;
+            scale: number;
+        };
+        legend: {
+            settings: import("../legendSlice").LegendSettings;
+            size: import("../../util/types").Size;
+            payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+        };
+        options: import("../optionsSlice").ChartOptions;
+        polarAxis: {
+            radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+            angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+        };
+        polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+        referenceElements: {
+            dots: ReadonlyArray<ReferenceDotSettings>;
+            areas: ReadonlyArray<ReferenceAreaSettings>;
+            lines: ReadonlyArray<ReferenceLineSettings>;
+        };
+        rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+        tooltip: import("../tooltipSlice").TooltipState;
+    }) => (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    } & {
+        resultFunc: (resultFuncArgs_0: XorYType, resultFuncArgs_1: import("../cartesianAxisSlice").AxisId) => (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean;
+        memoizedResultFunc: ((resultFuncArgs_0: XorYType, resultFuncArgs_1: import("../cartesianAxisSlice").AxisId) => (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean) & {
+            clearCache: () => void;
+            resultsCount: () => number;
+            resetResultsCount: () => void;
+        };
+        lastResult: () => (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean;
+        dependencies: [(state: RechartsRootState) => XorYType, (state: RechartsRootState) => import("../cartesianAxisSlice").AxisId];
+        recomputations: () => number;
+        resetRecomputations: () => void;
+        dependencyRecomputations: () => number;
+        resetDependencyRecomputations: () => void;
+    } & {
+        argsMemoize: typeof import("reselect").weakMapMemoize;
+        memoize: typeof import("reselect").weakMapMemoize;
+    }];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+export declare const selectTooltipGraphicalItemsData: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+        yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+        zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("../chartDataSlice").ChartDataState;
+    errorBars: import("../errorBarSlice").ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: import("../../util/types").Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<ReferenceDotSettings>;
+        areas: ReadonlyArray<ReferenceAreaSettings>;
+        lines: ReadonlyArray<ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}) => unknown[]) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: GraphicalItemSettings[]) => unknown[];
+    memoizedResultFunc: ((resultFuncArgs_0: GraphicalItemSettings[]) => unknown[]) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => unknown[];
+    dependencies: [((state: import("redux").EmptyObject & {
+        brush: import("../brushSlice").BrushSettings;
+        cartesianAxis: {
+            xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+            yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+            zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+        };
+        chartData: import("../chartDataSlice").ChartDataState;
+        errorBars: import("../errorBarSlice").ErrorBarsState;
+        graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+        layout: {
+            layoutType: LayoutType;
+            width: number;
+            height: number;
+            margin: import("../../util/types").Margin;
+            scale: number;
+        };
+        legend: {
+            settings: import("../legendSlice").LegendSettings;
+            size: import("../../util/types").Size;
+            payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+        };
+        options: import("../optionsSlice").ChartOptions;
+        polarAxis: {
+            radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+            angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+        };
+        polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+        referenceElements: {
+            dots: ReadonlyArray<ReferenceDotSettings>;
+            areas: ReadonlyArray<ReferenceAreaSettings>;
+            lines: ReadonlyArray<ReferenceLineSettings>;
+        };
+        rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+        tooltip: import("../tooltipSlice").TooltipState;
+    }) => GraphicalItemSettings[]) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    } & {
+        resultFunc: (resultFuncArgs_0: readonly GraphicalItemSettings[], resultFuncArgs_1: AxisWithTicksSettings, resultFuncArgs_2: (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean) => GraphicalItemSettings[];
+        memoizedResultFunc: ((resultFuncArgs_0: readonly GraphicalItemSettings[], resultFuncArgs_1: AxisWithTicksSettings, resultFuncArgs_2: (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean) => GraphicalItemSettings[]) & {
+            clearCache: () => void;
+            resultsCount: () => number;
+            resetResultsCount: () => void;
+        };
+        lastResult: () => GraphicalItemSettings[];
+        dependencies: [(state: RechartsRootState) => ReadonlyArray<GraphicalItemSettings>, (state: RechartsRootState) => AxisWithTicksSettings, ((state: import("redux").EmptyObject & {
+            brush: import("../brushSlice").BrushSettings;
+            cartesianAxis: {
+                xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+                yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+                zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+            };
+            chartData: import("../chartDataSlice").ChartDataState;
+            errorBars: import("../errorBarSlice").ErrorBarsState;
+            graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+            layout: {
+                layoutType: LayoutType;
+                width: number;
+                height: number;
+                margin: import("../../util/types").Margin;
+                scale: number;
+            };
+            legend: {
+                settings: import("../legendSlice").LegendSettings;
+                size: import("../../util/types").Size;
+                payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+            };
+            options: import("../optionsSlice").ChartOptions;
+            polarAxis: {
+                radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+                angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+            };
+            polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+            referenceElements: {
+                dots: ReadonlyArray<ReferenceDotSettings>;
+                areas: ReadonlyArray<ReferenceAreaSettings>;
+                lines: ReadonlyArray<ReferenceLineSettings>;
+            };
+            rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+            tooltip: import("../tooltipSlice").TooltipState;
+        }) => (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean) & {
+            clearCache: () => void;
+            resultsCount: () => number;
+            resetResultsCount: () => void;
+        } & {
+            resultFunc: (resultFuncArgs_0: XorYType, resultFuncArgs_1: import("../cartesianAxisSlice").AxisId) => (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean;
+            memoizedResultFunc: ((resultFuncArgs_0: XorYType, resultFuncArgs_1: import("../cartesianAxisSlice").AxisId) => (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean) & {
+                clearCache: () => void;
+                resultsCount: () => number;
+                resetResultsCount: () => void;
+            };
+            lastResult: () => (item: import("../graphicalItemsSlice").CartesianGraphicalItemSettings | import("../graphicalItemsSlice").PolarGraphicalItemSettings) => boolean;
+            dependencies: [(state: RechartsRootState) => XorYType, (state: RechartsRootState) => import("../cartesianAxisSlice").AxisId];
+            recomputations: () => number;
+            resetRecomputations: () => void;
+            dependencyRecomputations: () => number;
+            resetDependencyRecomputations: () => void;
+        } & {
+            argsMemoize: typeof import("reselect").weakMapMemoize;
+            memoize: typeof import("reselect").weakMapMemoize;
+        }];
+        recomputations: () => number;
+        resetRecomputations: () => void;
+        dependencyRecomputations: () => number;
+        resetDependencyRecomputations: () => void;
+    } & {
+        argsMemoize: typeof import("reselect").weakMapMemoize;
+        memoize: typeof import("reselect").weakMapMemoize;
+    }];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
+/**
+ * Data for tooltip always use the data with indexes set by a Brush,
+ * and never accept the isPanorama flag:
+ * because Tooltip never displays inside the panorama anyway
+ * so we don't need to worry what would happen there.
+ */
+export declare const selectTooltipDisplayedData: (state: RechartsRootState) => ChartData;
+export declare const selectTooltipAxisDomain: (state: RechartsRootState) => NumberDomain | CategoricalDomain | undefined;
+export declare const selectTooltipAxisDomainIncludingNiceTicks: (state: RechartsRootState) => NumberDomain | CategoricalDomain | undefined;
+export declare const selectTooltipAxisRangeWithReverse: (state: RechartsRootState) => AxisRange | undefined;
+export declare const selectTooltipAxisScale: (state: RechartsRootState) => RechartsScale | undefined;
+export declare const selectTooltipCategoricalDomain: (state: RechartsRootState) => ReadonlyArray<unknown> | undefined;
+export declare const selectTooltipAxisTicks: (state: RechartsRootState) => ReadonlyArray<TickItem> | undefined;
+export declare const selectActiveTooltipIndex: (state: RechartsRootState) => TooltipIndex | null;
+export declare const selectActiveLabel: (state: RechartsRootState) => string | undefined;
+export declare const selectActiveTooltipDataKey: (state: RechartsRootState) => DataKey<any> | undefined;
+export declare const selectActiveTooltipCoordinate: (state: RechartsRootState) => Coordinate | undefined;
+export declare const selectIsTooltipActive: (state: RechartsRootState) => boolean;
+export declare const selectActiveTooltipPayload: (state: RechartsRootState) => TooltipPayload | undefined;
+export declare const selectActiveTooltipDataPoints: ((state: import("redux").EmptyObject & {
+    brush: import("../brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").XAxisSettings>;
+        yAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").YAxisSettings>;
+        zAxis: Record<import("../cartesianAxisSlice").AxisId, import("../cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("../chartDataSlice").ChartDataState;
+    errorBars: import("../errorBarSlice").ErrorBarsState;
+    graphicalItems: import("../graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: LayoutType;
+        width: number;
+        height: number;
+        margin: import("../../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("../legendSlice").LegendSettings;
+        size: import("../../util/types").Size;
+        payload: ReadonlyArray<ReadonlyArray<import("../..").LegendPayload>>;
+    };
+    options: import("../optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<import("../cartesianAxisSlice").AxisId, import("../polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("../polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<ReferenceDotSettings>;
+        areas: ReadonlyArray<ReferenceAreaSettings>;
+        lines: ReadonlyArray<ReferenceLineSettings>;
+    };
+    rootProps: import("../rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("../tooltipSlice").TooltipState;
+}) => any[]) & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+} & {
+    resultFunc: (resultFuncArgs_0: TooltipPayload) => any[];
+    memoizedResultFunc: ((resultFuncArgs_0: TooltipPayload) => any[]) & {
+        clearCache: () => void;
+        resultsCount: () => number;
+        resetResultsCount: () => void;
+    };
+    lastResult: () => any[];
+    dependencies: [(state: RechartsRootState) => TooltipPayload | undefined];
+    recomputations: () => number;
+    resetRecomputations: () => void;
+    dependencyRecomputations: () => number;
+    resetDependencyRecomputations: () => void;
+} & {
+    argsMemoize: typeof import("reselect").weakMapMemoize;
+    memoize: typeof import("reselect").weakMapMemoize;
+};
Index: node_modules/recharts/types/state/selectors/touchSelectors.d.ts
===================================================================
--- node_modules/recharts/types/state/selectors/touchSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/selectors/touchSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import { RechartsRootState } from '../store';
+import { TooltipIndex } from '../tooltipSlice';
+import { Coordinate, DataKey } from '../../util/types';
+export declare const selectTooltipCoordinate: (state: RechartsRootState, tooltipIndex: TooltipIndex, dataKey: DataKey<any> | undefined) => Coordinate | undefined;
Index: node_modules/recharts/types/state/store.d.ts
===================================================================
--- node_modules/recharts/types/state/store.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/store.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,41 @@
+import { Action, Dispatch, Store } from '@reduxjs/toolkit';
+declare const rootReducer: import("redux").Reducer<import("redux").CombinedState<{
+    brush: import("./brushSlice").BrushSettings;
+    cartesianAxis: {
+        xAxis: Record<import("./cartesianAxisSlice").AxisId, import("./cartesianAxisSlice").XAxisSettings>;
+        yAxis: Record<import("./cartesianAxisSlice").AxisId, import("./cartesianAxisSlice").YAxisSettings>;
+        zAxis: Record<import("./cartesianAxisSlice").AxisId, import("./cartesianAxisSlice").ZAxisSettings>;
+    };
+    chartData: import("./chartDataSlice").ChartDataState;
+    errorBars: import("./errorBarSlice").ErrorBarsState;
+    graphicalItems: import("./graphicalItemsSlice").GraphicalItemsState;
+    layout: {
+        layoutType: import("../util/types").LayoutType;
+        width: number;
+        height: number;
+        margin: import("../util/types").Margin;
+        scale: number;
+    };
+    legend: {
+        settings: import("./legendSlice").LegendSettings;
+        size: import("../util/types").Size;
+        payload: ReadonlyArray<ReadonlyArray<import("..").LegendPayload>>;
+    };
+    options: import("./optionsSlice").ChartOptions;
+    polarAxis: {
+        radiusAxis: Record<import("./cartesianAxisSlice").AxisId, import("./polarAxisSlice").RadiusAxisSettings>;
+        angleAxis: Record<import("./cartesianAxisSlice").AxisId, import("./polarAxisSlice").AngleAxisSettings>;
+    };
+    polarOptions: import("./polarOptionsSlice").PolarChartOptions;
+    referenceElements: {
+        dots: ReadonlyArray<import("./referenceElementsSlice").ReferenceDotSettings>;
+        areas: ReadonlyArray<import("./referenceElementsSlice").ReferenceAreaSettings>;
+        lines: ReadonlyArray<import("./referenceElementsSlice").ReferenceLineSettings>;
+    };
+    rootProps: import("./rootPropsSlice").UpdatableChartOptions;
+    tooltip: import("./tooltipSlice").TooltipState;
+}>, import("redux").AnyAction>;
+export declare const createRechartsStore: (preloadedState?: Partial<RechartsRootState>, chartName?: string) => Store<RechartsRootState>;
+export type RechartsRootState = ReturnType<typeof rootReducer>;
+export type AppDispatch = Dispatch<Action>;
+export {};
Index: node_modules/recharts/types/state/tooltipSlice.d.ts
===================================================================
--- node_modules/recharts/types/state/tooltipSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/tooltipSlice.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,206 @@
+import { TooltipTrigger } from '../chart/types';
+import type { NameType, Payload, ValueType } from '../component/DefaultTooltipContent';
+import { ChartCoordinate, Coordinate, DataKey } from '../util/types';
+import { AxisId } from './cartesianAxisSlice';
+/**
+ * One Tooltip can display multiple TooltipPayloadEntries at a time.
+ */
+export type TooltipPayloadEntry = Payload<ValueType, NameType>;
+/**
+ * So what happens is that the tooltip payload is decided based on the available data, and the dataKey.
+ * The dataKey can either be defined on the graphical element (like Line, or Bar)
+ * or on the tooltip itself.
+ *
+ * The data can be defined in the chart element, or in the graphical item.
+ *
+ * So this type is all the settings, other than the data + dataKey complications.
+ */
+export type TooltipEntrySettings = Omit<TooltipPayloadEntry, 'payload' | 'value'> & {
+    nameKey: DataKey<any> | undefined;
+};
+/**
+ * This is what Tooltip renders.
+ */
+export type TooltipPayload = ReadonlyArray<TooltipPayloadEntry>;
+/**
+ * null means no active index
+ * string means: whichever index from the chart data it is.
+ * Different charts have different requirements on data shapes,
+ * and are also responsible for providing a function that will accept this index
+ * and return data.
+ */
+export type TooltipIndex = string | null;
+/**
+ * Different items have different data shapes so the state has no opinion on what the data shape should be;
+ * the only requirement is that the chart also provides a searcher function
+ * that accepts the data, and a key, and returns whatever the payload in Tooltip should be.
+ */
+export type TooltipPayloadSearcher<T = unknown, R = T> = (data: T, index: TooltipIndex, computedData?: unknown, nameKey?: DataKey<any>) => R | undefined;
+export type TooltipPayloadConfiguration = {
+    settings: TooltipEntrySettings;
+    /**
+     * This is the data that the item has provided, all of it mixed together.
+     * Later as user is interacting with the chart, a redux selector will use this
+     * data + activeIndex, pass it to the TooltipPayloadSearcher, and render the result in a Tooltip.
+     */
+    dataDefinedOnItem: unknown;
+    /**
+     * Opportunity for the graphical item to define its own Tooltip coordinates
+     * instead of relying on the axes.
+     *
+     * If undefined, then Recharts will use mouse interaction coordinates, or the axis coordinates,
+     * with some defaults (like, top/left of the chart).
+     */
+    positions: Record<NonNullable<TooltipIndex>, Coordinate> | ReadonlyArray<Coordinate> | undefined;
+};
+export type ActiveTooltipProps = {
+    activeIndex: TooltipIndex;
+    activeCoordinate: ChartCoordinate | undefined;
+};
+/**
+ * So this informs the "tooltip event type". Tooltip event type can be either "axis" or "item"
+ * and it is used for two things:
+ * 1. Sets the active area
+ * 2. Sets the background and cursor highlights
+ *
+ * Some charts only allow to have one type of tooltip event type, some allow both.
+ * Those charts that allow both will have one default, and the "shared" prop will be used to switch between them.
+ * Undefined means "use the chart default".
+ *
+ * Charts that only allow one tooltip event type, will ignore the shared prop.
+ */
+export type SharedTooltipSettings = boolean | undefined;
+export type TooltipSettingsState = {
+    shared: SharedTooltipSettings;
+    trigger: TooltipTrigger;
+    axisId: AxisId;
+    /**
+     * The `active` prop, despite its name, does not mean "always active".
+     * It means "active after user interaction has ended".
+     * By default, the tooltip is only active while the user is hovering over the chart.
+     * With `active=true`, the tooltip will remain visible after mouse leave event.
+     *
+     * If you want to see the "active before user interaction" settings, see `defaultIndex`.
+     *
+     * Undefined means "depends on user interactions".
+     */
+    active: boolean | undefined;
+    /**
+     * If you want to set the tooltip to be active before user interaction, you can set this property.
+     */
+    defaultIndex: TooltipIndex | undefined;
+};
+/**
+ * A generic state for user interaction with the chart.
+ * User interaction can come through multiple channels: mouse events, keyboard events, or hardcoded in props, or synchronised from other charts.
+ *
+ * Each of the interaction states is represented as TooltipInteractionState,
+ * and then the selectors and Tooltip will decide which of the interaction states to use.
+ */
+export type TooltipInteractionState = {
+    /**
+     * If user interaction is in progress or not.
+     * Why is this its own property? Why is this not computed from the index?
+     * Certainly if index !== -1 then the tooltip is active, right?
+     * Well not so fast. Recharts allows Tooltips can be set to `active=true`
+     * which means the tooltip remains displayed after the user stops interacting.
+     * - This implies that we cannot set index to <empty value> after interaction ends,
+     *   because the chart must remember the last position just in case the `active` prop on Tooltip is set to true.
+     */
+    active: boolean;
+    /**
+     * This is the current data index that is set for the chart.
+     * This can come from mouse events, keyboard events, or hardcoded in props
+     * in property `defaultIndex` on Tooltip.
+     */
+    index: TooltipIndex | undefined;
+    /**
+     * DataKey filter.
+     *
+     * In case of multiple graphical items, this is the dataKey that is set for the item.
+     * Very useful for `Tooltip.shared=false`, where activeIndex can display multiple values,
+     * but we only want to display one of them.
+     *
+     * If we want to interact with all the graphical items, then this is undefined.
+     * This is the case for eventTooltipType === 'axis' for example.
+     */
+    dataKey: DataKey<any> | undefined;
+    /**
+     * The Coordinate where user last interacted with the chart. This needs saved so we can continue to render the tooltip at that point.
+     * This is undefined on several occasions:
+     * - before the user started interacting with the chart,
+     * - when the chart is controlled programmatically through `defaultIndex` prop
+     * - when the chart is controlled using keyboard interactions
+     */
+    coordinate: Coordinate | undefined;
+};
+export type TooltipSyncState = TooltipInteractionState & {
+    /**
+     * Tooltip synchronization is a feature that allows multiple charts to share the same interaction state.
+     * This comes with one specialty - the syncMethod. `syncMethod=value` allows the user to synchronise charts
+     * based on the active label (which is rendered as the title of the Tooltip).
+     * To allow that, we need the label to be stored in the sync state.
+     */
+    label: string | undefined;
+};
+export declare const noInteraction: TooltipInteractionState;
+/**
+ * The tooltip interaction state stores:
+ *
+ * - Which graphical item is user interacting with at the moment,
+ * - which axis (or, which part of chart background) is user interacting with at the moment
+ * - The data that individual graphical items wish to be displayed in case the tooltip gets activated
+ */
+export type TooltipState = {
+    /**
+     * This is the state of interactions with individual graphical items.
+     */
+    itemInteraction: {
+        click: TooltipInteractionState;
+        /**
+         * Why is hover activation separate from click activation? Because they are independent:
+         * If a click is set, then mouseLeave should not clear it.
+         * - the opposite is technically true too - but it's difficult to click on things without also hovering.
+         */
+        hover: TooltipInteractionState;
+    };
+    /**
+     * This is the state of interaction with the bar background - which will get mapped
+     * to the axis index.
+     *
+     * Axis interaction is independent of item interaction so the state must also be independent.
+     */
+    axisInteraction: {
+        click: TooltipInteractionState;
+        hover: TooltipInteractionState;
+    };
+    keyboardInteraction: TooltipInteractionState;
+    /**
+     * This part of the state is the information coming from other charts.
+     * If there are two charts with the same syncId, events from one chart will be transferred
+     * to other charts. So this is what the other charts are reporting.
+     */
+    syncInteraction: TooltipSyncState;
+    /**
+     * One graphical item will have one configuration;
+     * hovering over multiple of them (for example with tooltipEventType===axis)
+     * may render multiple tooltip payloads.
+     */
+    tooltipItemPayloads: ReadonlyArray<TooltipPayloadConfiguration>;
+    /**
+     * Tooltip props or other settings that need redux access.
+     * This assumes that there is always only one Tooltip. In case we want to start supporting multiple Tooltips,
+     * we have to change this to an array - and update all the places reading this state too.
+     */
+    settings: TooltipSettingsState;
+};
+export declare const initialState: TooltipState;
+export type TooltipActionPayload = {
+    activeIndex: TooltipIndex | undefined;
+    activeDataKey: DataKey<any> | undefined;
+    activeCoordinate?: ChartCoordinate | undefined;
+};
+export declare const addTooltipEntrySettings: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<TooltipPayloadConfiguration, "tooltip/addTooltipEntrySettings">, removeTooltipEntrySettings: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<TooltipPayloadConfiguration, "tooltip/removeTooltipEntrySettings">, setTooltipSettingsState: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<TooltipSettingsState, "tooltip/setTooltipSettingsState">, setActiveMouseOverItemIndex: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<TooltipActionPayload, "tooltip/setActiveMouseOverItemIndex">, mouseLeaveItem: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"tooltip/mouseLeaveItem">, mouseLeaveChart: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"tooltip/mouseLeaveChart">, setActiveClickItemIndex: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<TooltipActionPayload, "tooltip/setActiveClickItemIndex">, setMouseOverAxisIndex: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<TooltipActionPayload, "tooltip/setMouseOverAxisIndex">, setMouseClickAxisIndex: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<TooltipActionPayload, "tooltip/setMouseClickAxisIndex">, setSyncInteraction: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<TooltipSyncState, "tooltip/setSyncInteraction">, setKeyboardInteraction: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<TooltipActionPayload & {
+    active: boolean;
+}, "tooltip/setKeyboardInteraction">;
+export declare const tooltipReducer: import("redux").Reducer<TooltipState>;
Index: node_modules/recharts/types/state/touchEventsMiddleware.d.ts
===================================================================
--- node_modules/recharts/types/state/touchEventsMiddleware.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/touchEventsMiddleware.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import * as React from 'react';
+export declare const touchEventAction: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<React.TouchEvent<HTMLDivElement>, string>;
+export declare const touchEventMiddleware: import("@reduxjs/toolkit").ListenerMiddlewareInstance<unknown, import("@reduxjs/toolkit").ThunkDispatch<unknown, unknown, import("redux").AnyAction>, unknown>;
Index: node_modules/recharts/types/state/types/AreaSettings.d.ts
===================================================================
--- node_modules/recharts/types/state/types/AreaSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/types/AreaSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import { BaseValue } from '../../cartesian/Area';
+import { DataKey } from '../../util/types';
+import { ChartData } from '../chartDataSlice';
+import { MaybeStackedGraphicalItem } from './StackedGraphicalItem';
+import { BaseCartesianGraphicalItemSettings } from '../graphicalItemsSlice';
+export type AreaSettings = BaseCartesianGraphicalItemSettings & MaybeStackedGraphicalItem & {
+    type: 'area';
+    connectNulls: boolean;
+    baseValue: BaseValue | undefined;
+    dataKey: DataKey<any>;
+    data: ChartData | undefined;
+};
Index: node_modules/recharts/types/state/types/BarSettings.d.ts
===================================================================
--- node_modules/recharts/types/state/types/BarSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/types/BarSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { MinPointSize } from '../../util/BarUtils';
+import { MaybeStackedGraphicalItem } from './StackedGraphicalItem';
+import { BaseCartesianGraphicalItemSettings } from '../graphicalItemsSlice';
+export type BarSettings = BaseCartesianGraphicalItemSettings & MaybeStackedGraphicalItem & {
+    type: 'bar';
+    maxBarSize: number | undefined;
+    minPointSize: MinPointSize;
+};
Index: node_modules/recharts/types/state/types/LineSettings.d.ts
===================================================================
--- node_modules/recharts/types/state/types/LineSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/types/LineSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { ChartData } from '../chartDataSlice';
+import { DataKey } from '../../util/types';
+import { BaseCartesianGraphicalItemSettings } from '../graphicalItemsSlice';
+export type LineSettings = BaseCartesianGraphicalItemSettings & {
+    type: 'line';
+    data: ChartData | undefined;
+    dataKey: DataKey<any> | undefined;
+};
Index: node_modules/recharts/types/state/types/PieSettings.d.ts
===================================================================
--- node_modules/recharts/types/state/types/PieSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/types/PieSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import { BasePolarGraphicalItemSettings } from '../graphicalItemsSlice';
+import { DataKey, LegendType } from '../../util/types';
+import { TooltipType } from '../../component/DefaultTooltipContent';
+export interface PieSettings extends BasePolarGraphicalItemSettings {
+    type: 'pie';
+    name: string | number | undefined;
+    nameKey: DataKey<any>;
+    tooltipType: TooltipType | undefined;
+    legendType: LegendType;
+    fill: string;
+    cx: number | string;
+    cy: number | string;
+    startAngle: number;
+    endAngle: number;
+    paddingAngle: number;
+    minAngle: number;
+    innerRadius: number | string;
+    outerRadius: number | string | ((element: any) => number);
+    cornerRadius: number | string | undefined;
+    presentationProps: Record<string, string | number>;
+}
Index: node_modules/recharts/types/state/types/RadarSettings.d.ts
===================================================================
--- node_modules/recharts/types/state/types/RadarSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/types/RadarSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,4 @@
+import { BasePolarGraphicalItemSettings } from '../graphicalItemsSlice';
+export interface RadarSettings extends BasePolarGraphicalItemSettings {
+    type: 'radar';
+}
Index: node_modules/recharts/types/state/types/RadialBarSettings.d.ts
===================================================================
--- node_modules/recharts/types/state/types/RadialBarSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/types/RadialBarSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import { MaybeStackedGraphicalItem } from './StackedGraphicalItem';
+import { BasePolarGraphicalItemSettings } from '../graphicalItemsSlice';
+export interface RadialBarSettings extends BasePolarGraphicalItemSettings, MaybeStackedGraphicalItem {
+    type: 'radialBar';
+    minPointSize: number | undefined;
+    maxBarSize: number | undefined;
+}
Index: node_modules/recharts/types/state/types/ScatterSettings.d.ts
===================================================================
--- node_modules/recharts/types/state/types/ScatterSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/types/ScatterSettings.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+import { ChartData } from '../chartDataSlice';
+import { DataKey } from '../../util/types';
+import { TooltipType } from '../../component/DefaultTooltipContent';
+import { BaseCartesianGraphicalItemSettings } from '../graphicalItemsSlice';
+export type ScatterSettings = BaseCartesianGraphicalItemSettings & {
+    type: 'scatter';
+    data: ChartData | undefined;
+    dataKey: DataKey<any> | undefined;
+    tooltipType: TooltipType | undefined;
+    name: string | number | undefined;
+};
Index: node_modules/recharts/types/state/types/StackedGraphicalItem.d.ts
===================================================================
--- node_modules/recharts/types/state/types/StackedGraphicalItem.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/state/types/StackedGraphicalItem.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+import { GraphicalItemSettings } from '../graphicalItemsSlice';
+import { NormalizedStackId } from '../../util/ChartUtils';
+import { DataKey } from '../../util/types';
+/**
+ * Some graphical items allow data stacking. The stacks are optional,
+ * so all props here are optional too.
+ */
+export interface MaybeStackedGraphicalItem extends GraphicalItemSettings {
+    stackId: NormalizedStackId | undefined;
+    /**
+     * Bars have a size but Area does not.
+     */
+    barSize: number | string | undefined;
+}
+/**
+ * Some graphical items allow data stacking.
+ * This interface is used to represent the items that are stacked
+ * because the user has provided the stackId and dataKey properties.
+ */
+export interface DefinitelyStackedGraphicalItem extends MaybeStackedGraphicalItem {
+    stackId: NormalizedStackId;
+    dataKey: DataKey<any>;
+}
+export declare function isStacked(graphicalItem: MaybeStackedGraphicalItem): graphicalItem is DefinitelyStackedGraphicalItem;
Index: node_modules/recharts/types/synchronisation/syncSelectors.d.ts
===================================================================
--- node_modules/recharts/types/synchronisation/syncSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/synchronisation/syncSelectors.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { RechartsRootState } from '../state/store';
+import { TooltipSyncState } from '../state/tooltipSlice';
+export declare function selectSynchronisedTooltipState(state: RechartsRootState): TooltipSyncState;
Index: node_modules/recharts/types/synchronisation/types.d.ts
===================================================================
--- node_modules/recharts/types/synchronisation/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/synchronisation/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { Coordinate, DataKey, TickItem } from '../util/types';
+import { TooltipIndex } from '../state/tooltipSlice';
+export type MouseHandlerDataParam = {
+    /**
+     * Index of the active tick in the current chart. Only works with number-indexed one-dimensional data charts,
+     * like Line, Area, Bar, Pie, etc.
+     *
+     * Doesn't work with two-dimensional data charts like Treemap, Sankey. But one day it will which is why the TooltipIndex type is here.
+     */
+    activeTooltipIndex: number | TooltipIndex | undefined;
+    isTooltipActive: boolean;
+    /**
+     * Exactly the same as activeTooltipIndex - this was also duplicated in recharts@2 so let's keep both properties for better backwards compatibility.
+     */
+    activeIndex: number | TooltipIndex | undefined;
+    activeLabel: string | undefined;
+    activeDataKey: DataKey<any> | undefined;
+    activeCoordinate: Coordinate | undefined;
+};
+/**
+ * Allows customisation of how the charts will synchronize tooltips and brushes.
+ * Default: index
+ *
+ * 'index': other charts will reuse current datum's index within the data array. In cases where data does not have the same length, this might yield unexpected results.
+ * 'value': will try to match other charts values
+ * custom function: will receive two arguments and should return an index of the active tick in the current chart:
+ * argument 1: ticks from the current chart
+ * argument 2: active tooltip state from the other chart
+ */
+export type SyncMethod = 'index' | 'value' | ((ticks: ReadonlyArray<TickItem>, data: MouseHandlerDataParam) => number);
Index: node_modules/recharts/types/synchronisation/useChartSynchronisation.d.ts
===================================================================
--- node_modules/recharts/types/synchronisation/useChartSynchronisation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/synchronisation/useChartSynchronisation.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+import { TooltipIndex } from '../state/tooltipSlice';
+import { ChartCoordinate, TooltipEventType } from '../util/types';
+import { TooltipTrigger } from '../chart/types';
+/**
+ * Will receive synchronisation events from other charts.
+ *
+ * Reads syncMethod from state and decides how to synchronise the tooltip based on that.
+ *
+ * @returns void
+ */
+export declare function useSynchronisedEventsFromOtherCharts(): void;
+/**
+ * Will send events to other charts.
+ * If syncId is undefined, no events will be sent.
+ *
+ * This ignores the syncMethod, because that is set and computed on the receiving end.
+ *
+ * @param tooltipEventType from Tooltip
+ * @param trigger from Tooltip
+ * @param activeCoordinate from state
+ * @param activeLabel from state
+ * @param activeIndex from state
+ * @param isTooltipActive from state
+ * @returns void
+ */
+export declare function useTooltipChartSynchronisation(tooltipEventType: TooltipEventType | undefined, trigger: TooltipTrigger, activeCoordinate: ChartCoordinate | undefined, activeLabel: string | number | undefined, activeIndex: TooltipIndex | undefined, isTooltipActive: boolean): void;
+export declare function useBrushChartSynchronisation(): void;
Index: node_modules/recharts/types/types.d.ts
===================================================================
--- node_modules/recharts/types/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+/**
+ * Defines the blank space between the chart and the plot area.
+ * This blank space is occupied by supporting elements like axes, legends, and brushes.
+ * This also includes any margins that might be applied to the chart.
+ */
+export type ChartOffset = {
+    /**
+     * Distance from the top edge of the chart to the top edge of the plot area.
+     */
+    readonly top: number;
+    /**
+     * Distance from the bottom edge of the chart to the bottom edge of the plot area.
+     * Note that this is not a coordinate, this is a distance.
+     * Meaning, `offset.bottom` could be 0 in a perfectly fine big chart.
+     */
+    readonly bottom: number;
+    /**
+     * Distance from the left edge of the chart to the left edge of the plot area.
+     */
+    readonly left: number;
+    /**
+     * Distance from the right edge of the chart to the right edge of the plot area.
+     * Note that this is not a coordinate, this is a distance.
+     * Meaning, `offset.right` could be 0 in a perfectly fine big chart.
+     */
+    readonly right: number;
+};
+/**
+ * Plot area is the area where the actual chart data is rendered.
+ * This means: bars, lines, scatter points, etc.
+ */
+export type PlotArea = {
+    /**
+     * The width of the plot area.
+     * This will be the same as `chartWidth - offset.left - offset.right`
+     */
+    readonly width: number;
+    /**
+     * The height of the plot area.
+     * This will be the same as `chartHeight - offset.top - offset.bottom`
+     */
+    readonly height: number;
+    /**
+     * The x coordinate of the top-left corner of the plot area.
+     * This will be the same as `offset.left`
+     */
+    readonly x: number;
+    /**
+     * The y coordinate of the top-left corner of the plot area.
+     * This will be the same as `offset.top`
+     */
+    readonly y: number;
+};
Index: node_modules/recharts/types/util/ActiveShapeUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/ActiveShapeUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/ActiveShapeUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+import * as React from 'react';
+import { SVGProps } from 'react';
+/**
+ * This is an abstraction for rendering a user defined prop for a customized shape in several forms.
+ *
+ * <Shape /> is the root and will handle taking in:
+ *  - an object of svg properties
+ *  - a boolean
+ *  - a render prop(inline function that returns jsx)
+ *  - a React element
+ *
+ * <ShapeSelector /> is a subcomponent of <Shape /> and used to match a component
+ * to the value of props.shapeType that is passed to the root.
+ *
+ */
+type ShapeType = 'trapezoid' | 'rectangle' | 'sector' | 'symbols';
+export type ShapeProps<OptionType, ExtraProps, ShapePropsType> = {
+    shapeType: ShapeType;
+    option: OptionType;
+    isActive?: boolean;
+    activeClassName?: string;
+    propTransformer?: (option: OptionType, props: unknown) => ShapePropsType;
+} & ExtraProps;
+export declare function getPropsFromShapeOption(option: unknown): SVGProps<SVGPathElement>;
+export declare function Shape<OptionType, ExtraProps, ShapePropsType extends React.JSX.IntrinsicAttributes>({ option, shapeType, propTransformer, activeClassName, isActive, ...props }: ShapeProps<OptionType, ExtraProps, ShapePropsType>): React.JSX.Element;
+export {};
Index: node_modules/recharts/types/util/BarUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/BarUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/BarUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+import * as React from 'react';
+import { ActiveShape } from './types';
+import { BarProps } from '../cartesian/Bar';
+export type BarRectangleProps = {
+    option: ActiveShape<BarProps, SVGPathElement> | undefined;
+    isActive: boolean;
+    onMouseEnter?: (e: React.MouseEvent<SVGPathElement, MouseEvent>) => void;
+    onMouseLeave?: (e: React.MouseEvent<SVGPathElement, MouseEvent>) => void;
+    onClick?: (e: React.MouseEvent<SVGPathElement, MouseEvent>) => void;
+    width?: number;
+    height?: number;
+} & Omit<BarProps, 'onAnimationStart' | 'onAnimationEnd'>;
+export declare function BarRectangle(props: BarRectangleProps): React.JSX.Element;
+export type MinPointSize = number | ((value: number | undefined | null, index: number) => number);
+/**
+ * Safely gets minPointSize from the minPointSize prop if it is a function
+ * @param minPointSize minPointSize as passed to the Bar component
+ * @param defaultValue default minPointSize
+ * @returns minPointSize
+ */
+export declare const minPointSizeCallback: (minPointSize: MinPointSize, defaultValue?: number) => (value: unknown, index: number) => number;
Index: node_modules/recharts/types/util/CartesianUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/CartesianUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/CartesianUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+import { Coordinate, Size } from './types';
+export declare const rectWithPoints: ({ x: x1, y: y1 }: Coordinate, { x: x2, y: y2 }: Coordinate) => {
+    x: number;
+    y: number;
+    width: number;
+    height: number;
+};
+/**
+ * Compute the x, y, width, and height of a box from two reference points.
+ * @param  {Object} coords     x1, x2, y1, and y2
+ * @return {Object} object
+ */
+export declare const rectWithCoords: ({ x1, y1, x2, y2 }: {
+    x1: number;
+    y1: number;
+    x2: number;
+    y2: number;
+}) => {
+    x: number;
+    y: number;
+    width: number;
+    height: number;
+};
+export declare class ScaleHelper {
+    static EPS: number;
+    private scale;
+    static create(obj: any): ScaleHelper;
+    constructor(scale: any);
+    get domain(): any;
+    get range(): any;
+    get rangeMin(): any;
+    get rangeMax(): any;
+    get bandwidth(): any;
+    apply(value: any, { bandAware, position }?: {
+        bandAware?: boolean;
+        position?: any;
+    }): any;
+    isInRange(value: number): boolean;
+}
+type ScaleResult<T> = {
+    [P in keyof T]: number;
+};
+type Scales<T> = {
+    [P in keyof T]: ScaleHelper;
+};
+type ScalesApply<T> = (coord: {
+    [P in keyof T]: any;
+}, options: any) => ScaleResult<T>;
+type ScalesIsInRange<T> = (coord: {
+    [P in keyof T]: any;
+}) => boolean;
+type LabeledScales<T> = Scales<T> & {
+    apply: ScalesApply<T>;
+} & {
+    isInRange: ScalesIsInRange<T>;
+};
+export declare const createLabeledScales: (options: Record<string, any>) => LabeledScales<Record<string, any>>;
+/** Normalizes the angle so that 0 <= angle < 180.
+ * @param {number} angle Angle in degrees.
+ * @return {number} the normalized angle with a value of at least 0 and never greater or equal to 180. */
+export declare function normalizeAngle(angle: number): number;
+/** Calculates the width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.
+ * @param {Object} size Width and height of the text in a horizontal position.
+ * @param {number} angle Angle in degrees in which the text is displayed.
+ * @return {number} The width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.
+ */
+export declare const getAngledRectangleWidth: ({ width, height }: Size, angle?: number | undefined) => number;
+export {};
Index: node_modules/recharts/types/util/ChartUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/ChartUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/ChartUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,177 @@
+import { Series, type SeriesPoint } from 'victory-vendor/d3-shape';
+import { TooltipEntrySettings, TooltipPayloadEntry } from '../state/tooltipSlice';
+import { AxisTick, AxisType, BaseAxisProps, ChartCoordinate, ChartOffsetInternal, DataKey, LayoutType, NumberDomain, OffsetHorizontal, OffsetVertical, PolarViewBoxRequired, RangeObj, Size, StackOffsetType, TickItem } from './types';
+import { ValueType } from '../component/DefaultTooltipContent';
+import { LegendSettings } from '../state/legendSlice';
+import { AxisRange, BaseAxisWithScale } from '../state/selectors/axisSelectors';
+import { StackGroup } from './stacks/stackTypes';
+export declare function getValueByDataKey<T>(obj: T, dataKey: DataKey<T> | undefined, defaultValue?: any): unknown;
+export declare const calculateActiveTickIndex: (
+/**
+ * For different layouts, `coordinate` is different:
+ * In horizontal layout, this is expected to be the `x` coordinate
+ * vertical -> y
+ * centric -> angle
+ * radial -> radius
+ */
+coordinate: number | undefined, ticks: ReadonlyArray<TickItem> | undefined, unsortedTicks: ReadonlyArray<TickItem>, axisType: AxisType | undefined, range: AxisRange | undefined) => number;
+export type BarPositionPosition = {
+    /**
+     * Offset is returned always from zero position.
+     * So in a way it's "absolute".
+     *
+     * NOT inbetween bars, but always from zero.
+     */
+    offset: number;
+    /**
+     * Size of the bar.
+     * If the input data is undefined, this will be 0.
+     * If the input data is NaN then this size too will be NaN.
+     */
+    size: number;
+};
+export declare const appendOffsetOfLegend: (offset: OffsetVertical & OffsetHorizontal, legendSettings: LegendSettings, legendSize: Size) => OffsetVertical & OffsetHorizontal;
+export declare const isCategoricalAxis: (layout: LayoutType, axisType: AxisType) => boolean;
+/**
+ * Calculate the Coordinates of grid
+ * @param  {Array} ticks           The ticks in axis
+ * @param {Number} minValue        The minimum value of axis
+ * @param {Number} maxValue        The maximum value of axis
+ * @param {boolean} syncWithTicks  Synchronize grid lines with ticks or not
+ * @return {Array}                 Coordinates
+ */
+export declare const getCoordinatesOfGrid: (ticks: ReadonlyArray<TickItem>, minValue: number, maxValue: number, syncWithTicks: boolean) => number[];
+/**
+ * A subset of d3-scale that Recharts is using
+ */
+export interface RechartsScale {
+    domain(): ReadonlyArray<unknown>;
+    domain(newDomain: ReadonlyArray<unknown>): this;
+    range(): ReadonlyArray<unknown>;
+    range(newRange: ReadonlyArray<unknown>): this;
+    bandwidth?: () => number;
+    ticks?: (count: number) => any;
+    (args: any): number;
+}
+export type AxisPropsNeededForTicksGenerator = {
+    axisType?: AxisType;
+    categoricalDomain?: ReadonlyArray<unknown>;
+    duplicateDomain?: ReadonlyArray<unknown>;
+    isCategorical?: boolean;
+    niceTicks?: ReadonlyArray<AxisTick>;
+    /**
+     * The range appears to be only used in Angle Axis - needs further investigation
+     */
+    range?: ReadonlyArray<number>;
+    realScaleType?: 'scaleBand' | string;
+    scale: RechartsScale | undefined;
+    tickCount?: number;
+    ticks?: ReadonlyArray<AxisTick>;
+    type?: 'number' | 'category';
+};
+/**
+ * Get the ticks of an axis
+ * @param  {Object}  axis The configuration of an axis
+ * @param {Boolean} isGrid Whether or not are the ticks in grid
+ * @param {Boolean} isAll Return the ticks of all the points or not
+ * @return {Array}  Ticks
+ */
+export declare const getTicksOfAxis: (axis: null | AxisPropsNeededForTicksGenerator, isGrid?: boolean, isAll?: boolean) => ReadonlyArray<TickItem> | null;
+export declare const checkDomainOfScale: (scale: any) => void;
+/**
+ * Both value and domain are tuples of two numbers
+ * - but the type stays as array of numbers until we have better support in rest of the app
+ * @param value input that will be truncated
+ * @param domain boundaries
+ * @returns tuple of two numbers
+ */
+export declare const truncateByDomain: (value: SeriesPoint<Record<number, number>>, domain: ReadonlyArray<number>) => [number, number] | SeriesPoint<Record<number, number>>;
+/**
+ * Stacks all positive numbers above zero and all negative numbers below zero.
+ *
+ * If all values in the series are positive then this behaves the same as 'none' stacker.
+ *
+ * @param {Array} series from d3-shape Stack
+ * @return {Array} series with applied offset
+ */
+export declare const offsetSign: OffsetAccessor;
+/**
+ * Replaces all negative values with zero when stacking data.
+ *
+ * If all values in the series are positive then this behaves the same as 'none' stacker.
+ *
+ * @param {Array} series from d3-shape Stack
+ * @return {Array} series with applied offset
+ */
+export declare const offsetPositive: OffsetAccessor;
+/**
+ * Function type to compute offset for stacked data.
+ *
+ * d3-shape has something fishy going on with its types.
+ * In @definitelytyped/d3-shape, this function (the offset accessor) is typed as Series<> => void.
+ * However! When I actually open the storybook I can see that the offset accessor actually receives Array<Series<>>.
+ * The same I can see in the source code itself:
+ * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042
+ * That one unfortunately has no types but we can tell it passes three-dimensional array.
+ *
+ * Which leads me to believe that definitelytyped is wrong on this one.
+ * There's open discussion on this topic without much attention:
+ * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042
+ */
+type OffsetAccessor = (series: Array<Series<Record<string, unknown>, string>>, order: number[]) => void;
+export declare const getStackedData: (data: ReadonlyArray<Record<string, unknown>>, dataKeys: ReadonlyArray<DataKey<any>>, offsetType: StackOffsetType) => ReadonlyArray<Series<Record<string, unknown>, DataKey<any>>>;
+export type StackId = string | number;
+/**
+ * Stack IDs in the external props allow numbers; but internally we use it as an object key
+ * and object keys are always strings. Also, it would be kinda confusing if stackId=8 and stackId='8' were different stacks
+ * so let's just force a string.
+ */
+export type NormalizedStackId = string;
+export declare function getNormalizedStackId(publicStackId: StackId | undefined): NormalizedStackId | undefined;
+export declare function getCateCoordinateOfLine<T extends Record<string, unknown>>({ axis, ticks, bandSize, entry, index, dataKey, }: {
+    axis: {
+        dataKey?: DataKey<T>;
+        allowDuplicatedCategory?: boolean;
+        type?: BaseAxisProps['type'];
+        scale: (v: number) => number;
+    };
+    ticks: Array<TickItem>;
+    bandSize: number;
+    entry: T;
+    index: number;
+    dataKey?: DataKey<T>;
+}): number | null;
+export declare const getCateCoordinateOfBar: ({ axis, ticks, offset, bandSize, entry, index, }: {
+    axis: BaseAxisWithScale;
+    ticks: ReadonlyArray<TickItem>;
+    offset: number;
+    bandSize: number;
+    entry: any;
+    index: number;
+}) => number | null;
+export declare const getBaseValueOfBar: ({ numericAxis }: {
+    numericAxis: BaseAxisWithScale;
+}) => number | unknown;
+export declare const getDomainOfStackGroups: (stackGroups: Record<StackId, StackGroup> | undefined, startIndex: number, endIndex: number) => NumberDomain | undefined;
+export declare const MIN_VALUE_REG: RegExp;
+export declare const MAX_VALUE_REG: RegExp;
+/**
+ * Calculate the size between two category
+ * @param  {Object} axis  The options of axis
+ * @param  {Array}  ticks The ticks of axis
+ * @param  {Boolean} isBar if items in axis are bars
+ * @return {Number} Size
+ */
+export declare const getBandSizeOfAxis: (axis?: BaseAxisWithScale, ticks?: ReadonlyArray<TickItem>, isBar?: boolean) => number | undefined;
+export declare function getTooltipEntry({ tooltipEntrySettings, dataKey, payload, value, name, }: {
+    tooltipEntrySettings: TooltipEntrySettings;
+    dataKey: DataKey<any> | undefined;
+    payload: any;
+    value: ValueType;
+    name: string | undefined;
+}): TooltipPayloadEntry;
+export declare function getTooltipNameProp(nameFromItem: string | number | undefined | unknown, dataKey: DataKey<any> | undefined): string | undefined;
+export declare function inRange(x: number, y: number, layout: LayoutType, polarViewBox: PolarViewBoxRequired | undefined, offset: ChartOffsetInternal): RangeObj | null;
+export declare const getActiveCoordinate: (layout: LayoutType, tooltipTicks: readonly TickItem[], activeIndex: number, rangeObj: RangeObj) => ChartCoordinate;
+export declare const calculateTooltipPos: (rangeObj: RangeObj, layout: LayoutType) => number | undefined;
+export {};
Index: node_modules/recharts/types/util/Constants.d.ts
===================================================================
--- node_modules/recharts/types/util/Constants.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/Constants.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+export declare const COLOR_PANEL: string[];
+/**
+ * We use this attribute to identify which element is the one that the user is touching.
+ * The index is the position of the element in the data array.
+ * This can be either a number (for array-based charts) or a string (for the charts that have a matrix-shaped data).
+ */
+export declare const DATA_ITEM_INDEX_ATTRIBUTE_NAME = "data-recharts-item-index";
+/**
+ * We use this attribute to identify which element is the one that the user is touching.
+ * DataKey works here as a kind of identifier for the element. It's not a perfect identifier for ~two~ three reasons:
+ *
+ * 1. There can be two different elements with the same dataKey; we won't know which is it
+ * 2. DataKey can be a function, and that serialized will be a `[Function: anonymous]` string
+ * which means we will be able to identify that it was a function but can't tell which one.
+ * This will lead to some weird bugs. A proper fix would be to either:
+ * a) use a unique identifier for each element (passed from props, or generated)
+ * b) figure out how to compare the dataKey or graphical item by object reference
+ *
+ * a) is a fuss because we don't have the unique identifier in props,
+ * and b) is possible most of the time except for touchMove events which work differently from mouseEnter/mouseLeave:
+ * - while mouseEnter is fired for the element that the mouse is over,
+ * touchMove is fired for the element where user has started touching. As the finger moves,
+ * we can identify the element that the user is touching by using the elementFromPoint method,
+ * but it keeps calling the handler on the element where touchStart was fired.
+ *
+ * Okay and now I discovered a third reason: the dataKey can be undefined and that's still fine
+ * because if dataKey is undefined then graphical elements assume the dataKey of the axes.
+ * Which makes it a convenient way of using recharts to render a chart but horrible identifier.
+ */
+export declare const DATA_ITEM_DATAKEY_ATTRIBUTE_NAME = "data-recharts-item-data-key";
+export declare const DEFAULT_Y_AXIS_WIDTH = 60;
Index: node_modules/recharts/types/util/CssPrefixUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/CssPrefixUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/CssPrefixUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare const generatePrefixStyle: (name: string, value: string) => Record<string, string>;
Index: node_modules/recharts/types/util/DOMUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/DOMUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/DOMUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+import { CSSProperties } from 'react';
+import { Size } from './types';
+export interface TextMeasurementConfig {
+    /** Maximum number of items to cache */
+    cacheSize: number;
+    /** Whether to enable caching */
+    enableCache: boolean;
+}
+export declare const getStringSize: (text: string | number, style?: CSSProperties) => Size;
+/**
+ * Configure text measurement behavior
+ * @param config - Partial configuration to apply
+ * @returns void
+ */
+export declare const configureTextMeasurement: (config: Partial<TextMeasurementConfig>) => void;
+/**
+ * Get current text measurement configuration
+ * @returns Current configuration
+ */
+export declare const getTextMeasurementConfig: () => TextMeasurementConfig;
+/**
+ * Clear the string size cache. Useful for testing or memory management.
+ * @returns void
+ */
+export declare const clearStringCache: () => void;
+/**
+ * Get cache statistics for debugging purposes.
+ * @returns Cache statistics including size and max size
+ */
+export declare const getStringCacheStats: () => {
+    size: number;
+    maxSize: number;
+};
Index: node_modules/recharts/types/util/DataUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/DataUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/DataUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+export declare const mathSign: (value: number) => 0 | 1 | -1;
+export declare const isNan: (value: unknown) => boolean;
+export declare const isPercent: (value: string | number) => value is `${number}%`;
+export declare const isNumber: (value: unknown) => value is number;
+export declare const isNumOrStr: (value: unknown) => value is number | string;
+export declare const uniqueId: (prefix?: string) => string;
+/**
+ * Get percent value of a total value
+ * @param {number|string} percent A percent
+ * @param {number} totalValue     Total value
+ * @param {number} defaultValue   The value returned when percent is undefined or invalid
+ * @param {boolean} validate      If set to be true, the result will be validated
+ * @return {number} value
+ */
+export declare const getPercentValue: (percent: number | string, totalValue: number | undefined, defaultValue?: number, validate?: boolean) => number;
+export declare const hasDuplicate: (ary: ReadonlyArray<unknown>) => boolean;
+/**
+ * @deprecated instead use {@link interpolate}
+ *  this function returns a function that is called immediately in all use-cases.
+ *  Instead, use interpolate which returns a number and skips the anonymous function step.
+ *  @param numberA The first number
+ *  @param numberB The second number
+ *  @return A function that returns the interpolated number
+ */
+export declare const interpolateNumber: (numberA: number | undefined, numberB: number | undefined) => (t: number) => number;
+export declare function interpolate(start: unknown, end: number, t: number): number;
+export declare function interpolate(start: unknown, end: null, t: number): null;
+export declare function interpolate(start: unknown, end: number | null, t: number): number | null;
+export declare function findEntryInArray<T>(ary: ReadonlyArray<T>, specifiedKey: number | string | ((entry: T) => unknown), specifiedValue: unknown): T | undefined;
+/**
+ * The least square linear regression
+ * @param {Array} data The array of points
+ * @returns {Object} The domain of x, and the parameter of linear function
+ */
+export declare const getLinearRegression: (data: ReadonlyArray<{
+    cx?: number;
+    cy?: number;
+}>) => {
+    xmin: number;
+    xmax: number;
+    a: number;
+    b: number;
+};
+type Nullish = null | undefined;
+/**
+ * Checks if the value is null or undefined
+ * @param value The value to check
+ * @returns true if the value is null or undefined
+ */
+export declare const isNullish: (value: unknown) => value is Nullish;
+/**
+ *Uppercase the first letter of a string
+ * @param {string} value The string to uppercase
+ * @returns {string} The uppercased string
+ */
+export declare const upperFirst: (value: string) => string;
+export {};
Index: node_modules/recharts/types/util/Events.d.ts
===================================================================
--- node_modules/recharts/types/util/Events.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/Events.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import EventEmitter from 'eventemitter3';
+import { PayloadAction } from '@reduxjs/toolkit';
+import { TooltipSyncState } from '../state/tooltipSlice';
+import { BrushStartEndIndex } from '../context/brushUpdateContext';
+declare const eventCenter: EventEmitter<EventTypes>;
+export { eventCenter };
+export declare const TOOLTIP_SYNC_EVENT = "recharts.syncEvent.tooltip";
+export declare const BRUSH_SYNC_EVENT = "recharts.syncEvent.brush";
+interface EventTypes {
+    [TOOLTIP_SYNC_EVENT](syncId: number | string, data: PayloadAction<TooltipSyncState>, emitter: symbol): void;
+    [BRUSH_SYNC_EVENT](syncId: number | string, data: BrushStartEndIndex, emitter: symbol): void;
+}
Index: node_modules/recharts/types/util/FunnelUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/FunnelUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/FunnelUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+import * as React from 'react';
+import { SVGProps } from 'react';
+import { Props as FunnelProps, FunnelTrapezoidItem } from '../cartesian/Funnel';
+import { Props as TrapezoidProps } from '../shape/Trapezoid';
+export declare function typeGuardTrapezoidProps(option: SVGProps<SVGPathElement>, props: FunnelTrapezoidItem): TrapezoidProps;
+export type FunnelTrapezoidProps = {
+    option: FunnelProps['activeShape'];
+} & FunnelTrapezoidItem;
+export declare function FunnelTrapezoid(props: FunnelTrapezoidProps): React.JSX.Element;
Index: node_modules/recharts/types/util/Global.d.ts
===================================================================
--- node_modules/recharts/types/util/Global.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/Global.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+export declare const Global: {
+    isSsr: boolean;
+};
Index: node_modules/recharts/types/util/IfOverflow.d.ts
===================================================================
--- node_modules/recharts/types/util/IfOverflow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/IfOverflow.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export type IfOverflow = 'hidden' | 'visible' | 'discard' | 'extendDomain';
Index: node_modules/recharts/types/util/LRUCache.d.ts
===================================================================
--- node_modules/recharts/types/util/LRUCache.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/LRUCache.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+/**
+ * Simple LRU (Least Recently Used) cache implementation
+ */
+export declare class LRUCache<K, V> {
+    private cache;
+    private maxSize;
+    constructor(maxSize: number);
+    get(key: K): V | undefined;
+    set(key: K, value: V): void;
+    clear(): void;
+    size(): number;
+}
Index: node_modules/recharts/types/util/LogUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/LogUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/LogUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare const warn: (condition: boolean, format: string, ...args: any[]) => void;
Index: node_modules/recharts/types/util/PolarUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/PolarUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/PolarUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+import { ReactElement, SVGProps } from 'react';
+import { Coordinate, RangeObj, PolarViewBoxRequired, ChartOffsetInternal } from './types';
+export declare const RADIAN: number;
+export declare const degreeToRadian: (angle: number) => number;
+export declare const radianToDegree: (angleInRadian: number) => number;
+export declare const polarToCartesian: (cx: number, cy: number, radius: number, angle: number) => Coordinate;
+export declare const getMaxRadius: (width: number, height: number, offset?: ChartOffsetInternal) => number;
+export declare const distanceBetweenPoints: (point: Coordinate, anotherPoint: Coordinate) => number;
+export declare const getAngleOfPoint: ({ x, y }: Coordinate, { cx, cy }: PolarViewBoxRequired) => {
+    radius: number;
+    angle: number;
+    angleInRadian?: undefined;
+} | {
+    radius: number;
+    angle: number;
+    angleInRadian: number;
+};
+export declare const formatAngleOfSector: ({ startAngle, endAngle }: PolarViewBoxRequired) => {
+    startAngle: number;
+    endAngle: number;
+};
+export declare const inRangeOfSector: ({ x, y }: Coordinate, viewBox: PolarViewBoxRequired) => RangeObj | null;
+export declare const getTickClassName: (tick?: SVGProps<SVGTextElement> | ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | boolean) => string;
Index: node_modules/recharts/types/util/RadialBarUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/RadialBarUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/RadialBarUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+import * as React from 'react';
+import { SVGProps } from 'react';
+import { RadialBarProps } from '../polar/RadialBar';
+import { Props as SectorProps } from '../shape/Sector';
+export declare function parseCornerRadius(cornerRadius: string | number | undefined): number | undefined;
+export declare function typeGuardSectorProps(option: SVGProps<SVGPathElement>, props: SectorProps): SectorProps;
+export interface RadialBarSectorProps extends SectorProps {
+    index?: number;
+    option: RadialBarProps['activeShape'];
+    isActive?: boolean;
+}
+export declare function RadialBarSector(props: RadialBarSectorProps): React.JSX.Element;
Index: node_modules/recharts/types/util/ReactUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/ReactUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/ReactUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+import * as React from 'react';
+import { Component, FunctionComponent, ReactNode } from 'react';
+import { ActiveDotType, FilteredSvgElementType } from './types';
+export declare const SCALE_TYPES: string[];
+/**
+ * @deprecated instead find another approach that does not depend on displayName.
+ * Get the display name of a component
+ * @param  {Object} Comp Specified Component
+ * @return {String}      Display name of Component
+ */
+export declare const getDisplayName: (Comp: React.ComponentType | string) => string;
+/**
+ * @deprecated instead find another approach that does not require reading React Elements from DOM.
+ *
+ * @param children do not use
+ * @return deprecated do not use
+ */
+export declare const toArray: <T extends ReactNode>(children: T | T[]) => T[];
+/**
+ * @deprecated instead find another approach that does not require reading React Elements from DOM.
+ *
+ * Find and return all matched children by type.
+ * `type` must be a React.ComponentType
+ *
+ * @param children do not use
+ * @param type do not use
+ * @return deprecated do not use
+ */
+export declare function findAllByType<ComponentType extends React.ComponentType, DetailedElement = React.DetailedReactHTMLElement<React.ComponentProps<ComponentType>, HTMLElement>>(children: ReactNode, type: ComponentType | ComponentType[]): DetailedElement[];
+export declare const isClipDot: (dot: ActiveDotType) => boolean;
+/**
+ * Checks if the property is valid to spread onto an SVG element or onto a specific component
+ * @param {unknown} property property value currently being compared
+ * @param {string} key property key currently being compared
+ * @param {boolean} includeEvents if events are included in spreadable props
+ * @param {boolean} svgElementType checks against map of SVG element types to attributes
+ * @returns {boolean} is prop valid
+ */
+export declare const isValidSpreadableProp: (property: unknown, key: PropertyKey, includeEvents?: boolean, svgElementType?: FilteredSvgElementType) => boolean;
+/**
+ * Filters the props object to only include valid SVG attributes or event handlers.
+ * @deprecated do not use this function, as it is not type-safe and may lead to unexpected behavior. Returns `any`.
+ * Instead, use:
+ * - `excludeEventProps` to exclude event handlers
+ * - `svgOnlyNoEvents` to exclude non-SVG attributes, and exclude event handlers too
+ * @param props - The props object to filter, which can be a Record, Component, FunctionComponent, boolean, or unknown.
+ * @param includeEvents - A boolean indicating whether to include event handlers in the filtered props.
+ * @param svgElementType - An optional parameter specifying the type of SVG element to filter attributes for.
+ * @returns A new object containing only valid SVG attributes or event handlers, or null if the input is not valid.
+ */
+export declare const filterProps: (props: Record<string, any> | Component | FunctionComponent | boolean | unknown, includeEvents: boolean, svgElementType?: FilteredSvgElementType) => Record<string, any>;
Index: node_modules/recharts/types/util/ReduceCSSCalc.d.ts
===================================================================
--- node_modules/recharts/types/util/ReduceCSSCalc.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/ReduceCSSCalc.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export declare function safeEvaluateExpression(expression: string): string;
+export declare function reduceCSSCalc(expression: string): string;
Index: node_modules/recharts/types/util/ScatterUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/ScatterUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/ScatterUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+import * as React from 'react';
+import { ActiveShape, SymbolType } from './types';
+import { ScatterPointItem } from '../cartesian/Scatter';
+export declare function ScatterSymbol({ option, isActive, ...props }: {
+    option: ActiveShape<ScatterPointItem> | SymbolType;
+    isActive: boolean;
+} & ScatterPointItem): React.JSX.Element;
Index: node_modules/recharts/types/util/ShallowEqual.d.ts
===================================================================
--- node_modules/recharts/types/util/ShallowEqual.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/ShallowEqual.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare function shallowEqual(a: any, b: any): boolean;
Index: node_modules/recharts/types/util/TickUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/TickUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/TickUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { Size, CartesianTickItem, CartesianViewBoxRequired } from './types';
+export declare function getAngledTickWidth(contentSize: Size, unitSize: Size, angle: number): number;
+export declare function getTickBoundaries(viewBox: CartesianViewBoxRequired, sign: number, sizeKey: string): {
+    start: number;
+    end: number;
+};
+export declare function isVisible(sign: number, tickPosition: number, getSize: () => number, start: number, end: number): boolean;
+export declare function getNumberIntervalTicks(ticks: ReadonlyArray<CartesianTickItem>, interval: number): ReadonlyArray<CartesianTickItem> | undefined;
Index: node_modules/recharts/types/util/YAxisUtils.d.ts
===================================================================
--- node_modules/recharts/types/util/YAxisUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/YAxisUtils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+type IGetBoundingClient = Pick<Element, 'getBoundingClientRect'>;
+/**
+ * Calculates the width of the Y-axis based on the tick labels and the axis label.
+ * @param {Object} params - The parameters object.
+ * @param {React.RefObject<any>} params.cartesianAxisRef - The ref to the CartesianAxis component.
+ * @param {React.RefObject<Element>} params.labelRef - The ref to the label element.
+ * @param {number} [params.labelGapWithTick=5] - The gap between the label and the tick.
+ * @returns {number} The calculated width of the Y-axis.
+ */
+export declare const getCalculatedYAxisWidth: ({ ticks, label, labelGapWithTick, tickSize, tickMargin, }: {
+    ticks: ReadonlyArray<IGetBoundingClient> | undefined;
+    label: IGetBoundingClient | undefined;
+    labelGapWithTick: number | undefined;
+    tickSize: number | undefined;
+    tickMargin: number | undefined;
+}) => number;
+export {};
Index: node_modules/recharts/types/util/cursor/getCursorPoints.d.ts
===================================================================
--- node_modules/recharts/types/util/cursor/getCursorPoints.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/cursor/getCursorPoints.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+import { ChartCoordinate, Coordinate, LayoutType, ChartOffsetInternal } from '../types';
+import { RadialCursorPoints } from './getRadialCursorPoints';
+export declare function getCursorPoints(layout: LayoutType, activeCoordinate: ChartCoordinate, offset: ChartOffsetInternal): [Coordinate, Coordinate] | RadialCursorPoints;
Index: node_modules/recharts/types/util/cursor/getCursorRectangle.d.ts
===================================================================
--- node_modules/recharts/types/util/cursor/getCursorRectangle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/cursor/getCursorRectangle.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { ChartCoordinate, ChartOffsetInternal, LayoutType } from '../types';
+export type CursorRectangle = {
+    stroke: string;
+    fill: string;
+    x: number;
+    y: number;
+    width: number;
+    height: number;
+};
+export declare function getCursorRectangle(layout: LayoutType, activeCoordinate: ChartCoordinate, offset: ChartOffsetInternal, tooltipAxisBandSize: number): CursorRectangle;
Index: node_modules/recharts/types/util/cursor/getRadialCursorPoints.d.ts
===================================================================
--- node_modules/recharts/types/util/cursor/getRadialCursorPoints.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/cursor/getRadialCursorPoints.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { Coordinate, PolarCoordinate } from '../types';
+export type RadialCursorPoints = {
+    points: [startPoint: Coordinate, endPoint: Coordinate];
+    cx?: number;
+    cy?: number;
+    radius?: number;
+    startAngle?: number;
+    endAngle?: number;
+};
+/**
+ * Only applicable for radial layouts
+ * @param {Object} activeCoordinate ChartCoordinate
+ * @returns {Object} RadialCursorPoints
+ */
+export declare function getRadialCursorPoints(activeCoordinate: PolarCoordinate): RadialCursorPoints;
Index: node_modules/recharts/types/util/excludeEventProps.d.ts
===================================================================
--- node_modules/recharts/types/util/excludeEventProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/excludeEventProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+declare const EventKeys: readonly ["dangerouslySetInnerHTML", "onCopy", "onCopyCapture", "onCut", "onCutCapture", "onPaste", "onPasteCapture", "onCompositionEnd", "onCompositionEndCapture", "onCompositionStart", "onCompositionStartCapture", "onCompositionUpdate", "onCompositionUpdateCapture", "onFocus", "onFocusCapture", "onBlur", "onBlurCapture", "onChange", "onChangeCapture", "onBeforeInput", "onBeforeInputCapture", "onInput", "onInputCapture", "onReset", "onResetCapture", "onSubmit", "onSubmitCapture", "onInvalid", "onInvalidCapture", "onLoad", "onLoadCapture", "onError", "onErrorCapture", "onKeyDown", "onKeyDownCapture", "onKeyPress", "onKeyPressCapture", "onKeyUp", "onKeyUpCapture", "onAbort", "onAbortCapture", "onCanPlay", "onCanPlayCapture", "onCanPlayThrough", "onCanPlayThroughCapture", "onDurationChange", "onDurationChangeCapture", "onEmptied", "onEmptiedCapture", "onEncrypted", "onEncryptedCapture", "onEnded", "onEndedCapture", "onLoadedData", "onLoadedDataCapture", "onLoadedMetadata", "onLoadedMetadataCapture", "onLoadStart", "onLoadStartCapture", "onPause", "onPauseCapture", "onPlay", "onPlayCapture", "onPlaying", "onPlayingCapture", "onProgress", "onProgressCapture", "onRateChange", "onRateChangeCapture", "onSeeked", "onSeekedCapture", "onSeeking", "onSeekingCapture", "onStalled", "onStalledCapture", "onSuspend", "onSuspendCapture", "onTimeUpdate", "onTimeUpdateCapture", "onVolumeChange", "onVolumeChangeCapture", "onWaiting", "onWaitingCapture", "onAuxClick", "onAuxClickCapture", "onClick", "onClickCapture", "onContextMenu", "onContextMenuCapture", "onDoubleClick", "onDoubleClickCapture", "onDrag", "onDragCapture", "onDragEnd", "onDragEndCapture", "onDragEnter", "onDragEnterCapture", "onDragExit", "onDragExitCapture", "onDragLeave", "onDragLeaveCapture", "onDragOver", "onDragOverCapture", "onDragStart", "onDragStartCapture", "onDrop", "onDropCapture", "onMouseDown", "onMouseDownCapture", "onMouseEnter", "onMouseLeave", "onMouseMove", "onMouseMoveCapture", "onMouseOut", "onMouseOutCapture", "onMouseOver", "onMouseOverCapture", "onMouseUp", "onMouseUpCapture", "onSelect", "onSelectCapture", "onTouchCancel", "onTouchCancelCapture", "onTouchEnd", "onTouchEndCapture", "onTouchMove", "onTouchMoveCapture", "onTouchStart", "onTouchStartCapture", "onPointerDown", "onPointerDownCapture", "onPointerMove", "onPointerMoveCapture", "onPointerUp", "onPointerUpCapture", "onPointerCancel", "onPointerCancelCapture", "onPointerEnter", "onPointerEnterCapture", "onPointerLeave", "onPointerLeaveCapture", "onPointerOver", "onPointerOverCapture", "onPointerOut", "onPointerOutCapture", "onGotPointerCapture", "onGotPointerCaptureCapture", "onLostPointerCapture", "onLostPointerCaptureCapture", "onScroll", "onScrollCapture", "onWheel", "onWheelCapture", "onAnimationStart", "onAnimationStartCapture", "onAnimationEnd", "onAnimationEndCapture", "onAnimationIteration", "onAnimationIterationCapture", "onTransitionEnd", "onTransitionEndCapture"];
+export type EventKeysType = (typeof EventKeys)[number];
+export declare function isEventKey(key: PropertyKey): key is EventKeysType;
+/**
+ * Filters out event properties from the given object.
+ * This function is useful for cleaning up props before passing them to a React component,
+ * @param obj - The object containing properties to filter.
+ * @returns A new object containing only the properties that are not event handlers.
+ */
+export declare function excludeEventProps<T extends Record<PropertyKey, any>>(obj: T): Omit<T, EventKeysType>;
+export {};
Index: node_modules/recharts/types/util/getChartPointer.d.ts
===================================================================
--- node_modules/recharts/types/util/getChartPointer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/getChartPointer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+import { ChartPointer, MousePointer } from './types';
+/**
+ * Computes the chart coordinates from the mouse event.
+ *
+ * The coordinates are relative to the top-left corner of the chart,
+ * where the top-left corner of the chart is (0, 0).
+ * Moving right, the x-coordinate increases, and moving down, the y-coordinate increases.
+ *
+ * The coordinates are rounded to the nearest integer and are including a CSS transform scale.
+ * So a chart that's scaled will return the same coordinates as a chart that's not scaled.
+ *
+ * @param event The mouse event from React event handlers
+ * @return chartPointer The chart coordinates relative to the top-left corner of the chart
+ */
+export declare const getChartPointer: (event: MousePointer) => ChartPointer;
Index: node_modules/recharts/types/util/getEveryNthWithCondition.d.ts
===================================================================
--- node_modules/recharts/types/util/getEveryNthWithCondition.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/getEveryNthWithCondition.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+/**
+ * Given an array and a number N, return a new array which contains every nTh
+ * element of the input array. For n below 1, an empty array is returned.
+ * If isValid is provided, all candidates must suffice the condition, else undefined is returned.
+ * @param {T[]} array An input array.
+ * @param {integer} n A number
+ * @param {Function} isValid A function to evaluate a candidate form the array
+ * @returns {T[]} The result array of the same type as the input array.
+ */
+export declare function getEveryNthWithCondition<Type>(array: ReadonlyArray<Type>, n: number, isValid?: (candidate: Type) => boolean): ReadonlyArray<Type> | undefined;
Index: node_modules/recharts/types/util/getSliced.d.ts
===================================================================
--- node_modules/recharts/types/util/getSliced.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/getSliced.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare function getSliced<T>(arr: ReadonlyArray<T>, startIndex: number, endIndex: number): ReadonlyArray<T>;
Index: node_modules/recharts/types/util/isDomainSpecifiedByUser.d.ts
===================================================================
--- node_modules/recharts/types/util/isDomainSpecifiedByUser.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/isDomainSpecifiedByUser.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+import { AxisDomain, NumberDomain } from './types';
+export declare function isWellFormedNumberDomain(v: unknown): v is NumberDomain;
+export declare function extendDomain(providedDomain: NumberDomain, boundaryDomain: NumberDomain, allowDataOverflow: boolean): NumberDomain;
+/**
+ * So Recharts allows users to provide their own domains,
+ * but it also places some expectations on what the domain is.
+ * We can improve on the typescript typing, but we also need a runtime test
+ to observe that the user-provided domain is well-formed,
+ * that is: an array with exactly two numbers.
+ *
+ * This function does not accept data as an argument.
+ * This is to enable a performance optimization - if the domain is there,
+ * and we know what it is without traversing all the data,
+ * then we don't have to traverse all the data!
+ *
+ * If the user-provided domain is not well-formed,
+ * this function will return undefined - in which case we should traverse the data to calculate the real domain.
+ *
+ * This function is for parsing the numerical domain only.
+ *
+ * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.
+ * @param allowDataOverflow boolean, provided by users. If true then the data domain wins
+ *
+ * @return [min, max] domain if it's well-formed; undefined if the domain is invalid
+ */
+export declare function numericalDomainSpecifiedWithoutRequiringData(userDomain: AxisDomain | undefined, allowDataOverflow: boolean): NumberDomain;
+/**
+ * So Recharts allows users to provide their own domains,
+ * but it also places some expectations on what the domain is.
+ * We can improve on the typescript typing, but we also need a runtime test
+ * to observe that the user-provided domain is well-formed,
+ * that is: an array with exactly two numbers.
+ * If the user-provided domain is not well-formed,
+ * this function will return undefined - in which case we should traverse the data to calculate the real domain.
+ *
+ * This function is for parsing the numerical domain only.
+ *
+ * You are probably thinking, why does domain need tick count?
+ * Well it adjusts the domain based on where the "nice ticks" land, and nice ticks depend on the tick count.
+ *
+ * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.
+ * @param dataDomain calculated from data. Can be undefined, as an option for performance optimization
+ * @param allowDataOverflow provided by users. If true then the data domain wins
+ *
+ * @return [min, max] domain if it's well-formed; undefined if the domain is invalid
+ */
+export declare function parseNumericalUserDomain(userDomain: AxisDomain | undefined, dataDomain: NumberDomain | undefined, allowDataOverflow: boolean): NumberDomain | undefined;
Index: node_modules/recharts/types/util/isWellBehavedNumber.d.ts
===================================================================
--- node_modules/recharts/types/util/isWellBehavedNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/isWellBehavedNumber.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+export declare function isWellBehavedNumber(n: unknown): n is number;
+export declare function isPositiveNumber(n: unknown): n is number;
Index: node_modules/recharts/types/util/payload/getUniqPayload.d.ts
===================================================================
--- node_modules/recharts/types/util/payload/getUniqPayload.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/payload/getUniqPayload.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+type UniqueFunc<T> = (entry: T) => unknown;
+/**
+ * This is configuration option that decides how to filter for unique values only:
+ *
+ * - `false` means "no filter"
+ * - `true` means "use recharts default filter"
+ * - function means "use return of this function as the default key"
+ */
+export type UniqueOption<T> = boolean | UniqueFunc<T>;
+export declare function getUniqPayload<T>(payload: ReadonlyArray<T>, option: UniqueOption<T>, defaultUniqBy: UniqueFunc<T>): ReadonlyArray<T>;
+export {};
Index: node_modules/recharts/types/util/resolveDefaultProps.d.ts
===================================================================
--- node_modules/recharts/types/util/resolveDefaultProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/resolveDefaultProps.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,52 @@
+/**
+ * This function mimics the behavior of the `defaultProps` static property in React.
+ * Functional components do not have a defaultProps property, so this function is useful to resolve default props.
+ *
+ * The common recommendation is to use ES6 destructuring with default values in the function signature,
+ * but you need to be careful there and make sure you destructure all the individual properties
+ * and not the whole object. See the test file for example.
+ *
+ * And because destructuring all properties one by one is a faff, and it's easy to miss one property,
+ * this function exists.
+ *
+ * @param realProps - the props object passed to the component by the user
+ * @param defaultProps - the default props object defined in the component by Recharts
+ * @returns - the props object with all the default props resolved. All `undefined` values are replaced with the default value.
+ */
+export declare function resolveDefaultProps<T, D extends Partial<T>>(realProps: T, defaultProps: D & DisallowExtraKeys<T, D>): RequiresDefaultProps<T, D>;
+/**
+ * Helper type to extract the keys of T that are required.
+ * It iterates through each key K in T. If Pick<T, K> cannot be assigned an empty object {},
+ * it means K is required, so we keep K; otherwise, we discard it (never).
+ * [keyof T] at the end creates a union of the kept keys.
+ */
+export type RequiredKeys<T> = {
+    [K in keyof T]-?: object extends Pick<T, K> ? never : K;
+}[keyof T];
+/**
+ * Helper type to extract the keys of T that are optional.
+ * It iterates through each key K in T. If Pick<T, K> can be assigned an empty object {},
+ * it means K is optional (or potentially missing), so we keep K; otherwise, we discard it (never).
+ * [keyof T] at the end creates a union of the kept keys.
+ */
+export type OptionalKeys<T> = {
+    [K in keyof T]-?: object extends Pick<T, K> ? K : never;
+}[keyof T];
+/**
+ * Helper type to ensure keys of D exist in T.
+ * For each key K in D, if K is also a key of T, keep the type D[K].
+ * If K is NOT a key of T, map it to type `never`.
+ * An object cannot have a property of type `never`, effectively disallowing extra keys.
+ */
+export type DisallowExtraKeys<T, D> = {
+    [K in keyof D]: K extends keyof T ? D[K] : never;
+};
+/**
+ * This type will take a source type `Props` and a default type `Defaults` and will return a new type
+ * where all properties that are optional in `Props` but required in `Defaults` are made required in the result.
+ * Properties that are required in `Props` and optional in `Defaults` will remain required.
+ * Properties that are optional in both `Props` and `Defaults` will remain optional.
+ *
+ * This is useful for creating a type that represents the resolved props of a component with default props.
+ */
+export type RequiresDefaultProps<Props, Defaults extends Partial<Props>> = Pick<Props, RequiredKeys<Props>> & Required<Pick<Props, Extract<OptionalKeys<Props>, RequiredKeys<Defaults>>>> & Pick<Props, Exclude<OptionalKeys<Props>, keyof Defaults>>;
Index: node_modules/recharts/types/util/scale/getNiceTickValues.d.ts
===================================================================
--- node_modules/recharts/types/util/scale/getNiceTickValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/scale/getNiceTickValues.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+/**
+ * @fileOverview calculate tick values of scale
+ * @author xile611, arcthur
+ * @date 2015-09-17
+ */
+import Decimal from 'decimal.js-light';
+/**
+ * Calculate a interval of a minimum value and a maximum value
+ *
+ * @param  {Number} min       The minimum value
+ * @param  {Number} max       The maximum value
+ * @return {Array} An interval
+ */
+export declare const getValidInterval: ([min, max]: [number, number]) => number[];
+/**
+ * Calculate the step which is easy to understand between ticks, like 10, 20, 25
+ *
+ * @param  roughStep        The rough step calculated by dividing the difference by the tickCount
+ * @param  allowDecimals    Allow the ticks to be decimals or not
+ * @param  correctionFactor A correction factor
+ * @return The step which is easy to understand between two ticks
+ */
+export declare const getFormatStep: (roughStep: Decimal, allowDecimals: boolean, correctionFactor: number) => Decimal;
+/**
+ * calculate the ticks when the minimum value equals to the maximum value
+ *
+ * @param  value         The minimum value which is also the maximum value
+ * @param  tickCount     The count of ticks
+ * @param  allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+export declare const getTickOfSingleValue: (value: number, tickCount: number, allowDecimals: boolean) => Array<number>;
+/**
+ * Calculate the step
+ *
+ * @param  min              The minimum value of an interval
+ * @param  max              The maximum value of an interval
+ * @param  tickCount        The count of ticks
+ * @param  allowDecimals    Allow the ticks to be decimals or not
+ * @param  correctionFactor A correction factor
+ * @return The step, minimum value of ticks, maximum value of ticks
+ */
+export declare const calculateStep: (min: number, max: number, tickCount: number, allowDecimals: boolean, correctionFactor?: number) => {
+    step: Decimal;
+    tickMin: Decimal;
+    tickMax: Decimal;
+};
+/**
+ * Calculate the ticks of an interval. Ticks can appear outside the interval
+ * if it makes them more rounded and nice.
+ *
+ * @param tuple of [min,max] min: The minimum value, max: The maximum value
+ * @param tickCount     The count of ticks
+ * @param allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+declare function getNiceTickValuesFn([min, max]: [number, number], tickCount?: number, allowDecimals?: boolean): number[];
+/**
+ * Calculate the ticks of an interval.
+ * Ticks will be constrained to the interval [min, max] even if it makes them less rounded and nice.
+ *
+ * @param tuple of [min,max] min: The minimum value, max: The maximum value
+ * @param tickCount     The count of ticks. This function may return less than tickCount ticks if the interval is too small.
+ * @param allowDecimals Allow the ticks to be decimals or not
+ * @return array of ticks
+ */
+declare function getTickValuesFixedDomainFn([min, max]: readonly [number, number], tickCount: number, allowDecimals?: boolean): number[];
+export declare const getNiceTickValues: typeof getNiceTickValuesFn;
+export declare const getTickValuesFixedDomain: typeof getTickValuesFixedDomainFn;
+export {};
Index: node_modules/recharts/types/util/scale/index.d.ts
===================================================================
--- node_modules/recharts/types/util/scale/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/scale/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export { getNiceTickValues, getTickValuesFixedDomain } from './getNiceTickValues';
Index: node_modules/recharts/types/util/scale/util/arithmetic.d.ts
===================================================================
--- node_modules/recharts/types/util/scale/util/arithmetic.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/scale/util/arithmetic.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+/**
+ * @fileOverview Some common arithmetic methods
+ * @author xile611
+ * @date 2015-09-17
+ */
+import Decimal from 'decimal.js-light';
+/**
+ * Get the digit count of a number.
+ * If the absolute value is in the interval [0.1, 1), the result is 0.
+ * If the absolute value is in the interval [0.01, 0.1), the digit count is -1.
+ * If the absolute value is in the interval [0.001, 0.01), the digit count is -2.
+ *
+ * @param  {Number} value The number
+ * @return {Integer}      Digit count
+ */
+declare function getDigitCount(value: number): number;
+/**
+ * Get the data in the interval [start, end) with a fixed step.
+ * Also handles JS calculation precision issues.
+ *
+ * @param  {Decimal} start Start point
+ * @param  {Decimal} end   End point, not included
+ * @param  {Decimal} step  Step size
+ * @return {Array}         Array of numbers
+ */
+declare function rangeStep(start: Decimal, end: Decimal, step: Decimal): Array<number>;
+/**
+ * Linear interpolation of numbers.
+ *
+ * @param  {Number} a  Endpoint of the domain
+ * @param  {Number} b  Endpoint of the domain
+ * @param  {Number} t  A value in [0, 1]
+ * @return {Number}    A value in the domain
+ */
+declare const interpolateNumber: (...args: any[]) => any;
+/**
+ * Inverse operation of linear interpolation.
+ *
+ * @param  {Number} a Endpoint of the domain
+ * @param  {Number} b Endpoint of the domain
+ * @param  {Number} x Can be considered as an output value after interpolation
+ * @return {Number}   When x is in the range a ~ b, the return value is in [0, 1]
+ */
+declare const uninterpolateNumber: (...args: any[]) => any;
+/**
+ * Inverse operation of linear interpolation with truncation.
+ *
+ * @param  {Number} a Endpoint of the domain
+ * @param  {Number} b Endpoint of the domain
+ * @param  {Number} x Can be considered as an output value after interpolation
+ * @return {Number}   When x is in the interval a ~ b, the return value is in [0, 1].
+ *                    When x is not in the interval a ~ b, it will be truncated to the interval a ~ b.
+ */
+declare const uninterpolateTruncation: (...args: any[]) => any;
+export { rangeStep, getDigitCount, interpolateNumber, uninterpolateNumber, uninterpolateTruncation };
Index: node_modules/recharts/types/util/scale/util/utils.d.ts
===================================================================
--- node_modules/recharts/types/util/scale/util/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/scale/util/utils.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export declare const PLACE_HOLDER: {
+    '@@functional/placeholder': boolean;
+};
+export declare const curry: (fn: (...args: any[]) => any) => (...args: any[]) => any;
+export declare const range: (begin: number, end: number) => number[];
+export declare const map: (...args: any[]) => any;
+export declare const compose: (...args: any[]) => (...composeArgs: any[]) => any;
+export declare const reverse: <T extends any[] | string>(arr: T) => T;
+export declare const memoize: <F extends (...args: unknown[]) => any>(fn: F) => F;
Index: node_modules/recharts/types/util/stacks/getStackSeriesIdentifier.d.ts
===================================================================
--- node_modules/recharts/types/util/stacks/getStackSeriesIdentifier.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/stacks/getStackSeriesIdentifier.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+import { StackSeriesIdentifier } from './stackTypes';
+import { MaybeStackedGraphicalItem } from '../../state/types/StackedGraphicalItem';
+/**
+ * Returns identifier for stack series which is one individual graphical item in the stack.
+ * @param graphicalItem - The graphical item representing the series in the stack.
+ * @return The identifier for the series in the stack
+ */
+export declare function getStackSeriesIdentifier(graphicalItem: MaybeStackedGraphicalItem | undefined): StackSeriesIdentifier | undefined;
Index: node_modules/recharts/types/util/stacks/stackTypes.d.ts
===================================================================
--- node_modules/recharts/types/util/stacks/stackTypes.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/stacks/stackTypes.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+import { Series } from 'victory-vendor/d3-shape';
+import { StackId } from '../ChartUtils';
+import { GraphicalItemId } from '../../state/graphicalItemsSlice';
+import { MaybeStackedGraphicalItem } from '../../state/types/StackedGraphicalItem';
+/**
+ * Collection of all stacks in the chart.
+ * A simple stacked chart will have a single stack. Recharts allows for multiple stacks.
+ * In a chart without stacks, this will be an empty object.
+ */
+export type AllStackGroups = Record<StackId, StackGroup>;
+/**
+ * One stack group is a collection of series that are stacked together.
+ * The stack series and graphical items are joined by the StackSeriesIdentifier.
+ */
+export type StackGroup = {
+    readonly stackedData: ReadonlyArray<StackSeries>;
+    readonly graphicalItems: ReadonlyArray<MaybeStackedGraphicalItem>;
+};
+/**
+ * Stack series is a collection of data points. This represents one individual graphical item in the stack.
+ * There are presumably other series in the stack, which are represented by other `StackSeries` objects
+ * that this object will not know about.
+ * The coordinates of the data points in the series already include the baseline of the previous series in the stack.
+ */
+export type StackSeries = Series<StackDataPoint, StackSeriesIdentifier>;
+/**
+ * Stack data point is a tuple of two numbers:
+ * first, where the previous stack series ended,
+ * and second, where the current stack series ends.
+ * This allows for setting the baseline of the next series in the stack.
+ */
+export type StackDataPoint = [number, number];
+/**
+ * Identifier for a series in the stack.
+ * Used to join the stack series with the graphical items in the stack.
+ */
+export type StackSeriesIdentifier = GraphicalItemId;
Index: node_modules/recharts/types/util/svgPropertiesNoEvents.d.ts
===================================================================
--- node_modules/recharts/types/util/svgPropertiesNoEvents.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/svgPropertiesNoEvents.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+declare const SVGElementPropKeys: readonly ["aria-activedescendant", "aria-atomic", "aria-autocomplete", "aria-busy", "aria-checked", "aria-colcount", "aria-colindex", "aria-colspan", "aria-controls", "aria-current", "aria-describedby", "aria-details", "aria-disabled", "aria-errormessage", "aria-expanded", "aria-flowto", "aria-haspopup", "aria-hidden", "aria-invalid", "aria-keyshortcuts", "aria-label", "aria-labelledby", "aria-level", "aria-live", "aria-modal", "aria-multiline", "aria-multiselectable", "aria-orientation", "aria-owns", "aria-placeholder", "aria-posinset", "aria-pressed", "aria-readonly", "aria-relevant", "aria-required", "aria-roledescription", "aria-rowcount", "aria-rowindex", "aria-rowspan", "aria-selected", "aria-setsize", "aria-sort", "aria-valuemax", "aria-valuemin", "aria-valuenow", "aria-valuetext", "className", "color", "height", "id", "lang", "max", "media", "method", "min", "name", "style", "target", "width", "role", "tabIndex", "accentHeight", "accumulate", "additive", "alignmentBaseline", "allowReorder", "alphabetic", "amplitude", "arabicForm", "ascent", "attributeName", "attributeType", "autoReverse", "azimuth", "baseFrequency", "baselineShift", "baseProfile", "bbox", "begin", "bias", "by", "calcMode", "capHeight", "clip", "clipPath", "clipPathUnits", "clipRule", "colorInterpolation", "colorInterpolationFilters", "colorProfile", "colorRendering", "contentScriptType", "contentStyleType", "cursor", "cx", "cy", "d", "decelerate", "descent", "diffuseConstant", "direction", "display", "divisor", "dominantBaseline", "dur", "dx", "dy", "edgeMode", "elevation", "enableBackground", "end", "exponent", "externalResourcesRequired", "fill", "fillOpacity", "fillRule", "filter", "filterRes", "filterUnits", "floodColor", "floodOpacity", "focusable", "fontFamily", "fontSize", "fontSizeAdjust", "fontStretch", "fontStyle", "fontVariant", "fontWeight", "format", "from", "fx", "fy", "g1", "g2", "glyphName", "glyphOrientationHorizontal", "glyphOrientationVertical", "glyphRef", "gradientTransform", "gradientUnits", "hanging", "horizAdvX", "horizOriginX", "href", "ideographic", "imageRendering", "in2", "in", "intercept", "k1", "k2", "k3", "k4", "k", "kernelMatrix", "kernelUnitLength", "kerning", "keyPoints", "keySplines", "keyTimes", "lengthAdjust", "letterSpacing", "lightingColor", "limitingConeAngle", "local", "markerEnd", "markerHeight", "markerMid", "markerStart", "markerUnits", "markerWidth", "mask", "maskContentUnits", "maskUnits", "mathematical", "mode", "numOctaves", "offset", "opacity", "operator", "order", "orient", "orientation", "origin", "overflow", "overlinePosition", "overlineThickness", "paintOrder", "panose1", "pathLength", "patternContentUnits", "patternTransform", "patternUnits", "pointerEvents", "pointsAtX", "pointsAtY", "pointsAtZ", "preserveAlpha", "preserveAspectRatio", "primitiveUnits", "r", "radius", "refX", "refY", "renderingIntent", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "result", "rotate", "rx", "ry", "seed", "shapeRendering", "slope", "spacing", "specularConstant", "specularExponent", "speed", "spreadMethod", "startOffset", "stdDeviation", "stemh", "stemv", "stitchTiles", "stopColor", "stopOpacity", "strikethroughPosition", "strikethroughThickness", "string", "stroke", "strokeDasharray", "strokeDashoffset", "strokeLinecap", "strokeLinejoin", "strokeMiterlimit", "strokeOpacity", "strokeWidth", "surfaceScale", "systemLanguage", "tableValues", "targetX", "targetY", "textAnchor", "textDecoration", "textLength", "textRendering", "to", "transform", "u1", "u2", "underlinePosition", "underlineThickness", "unicode", "unicodeBidi", "unicodeRange", "unitsPerEm", "vAlphabetic", "values", "vectorEffect", "version", "vertAdvY", "vertOriginX", "vertOriginY", "vHanging", "vIdeographic", "viewTarget", "visibility", "vMathematical", "widths", "wordSpacing", "writingMode", "x1", "x2", "x", "xChannelSelector", "xHeight", "xlinkActuate", "xlinkArcrole", "xlinkHref", "xlinkRole", "xlinkShow", "xlinkTitle", "xlinkType", "xmlBase", "xmlLang", "xmlns", "xmlnsXlink", "xmlSpace", "y1", "y2", "y", "yChannelSelector", "z", "zoomAndPan", "ref", "key", "angle"];
+export type SVGElementPropKeysType = (typeof SVGElementPropKeys)[number];
+export declare function isSvgElementPropKey(key: PropertyKey): boolean;
+/**
+ * Filters an object to only include SVG properties. Removes all event handlers too.
+ * @param obj - The object to filter
+ * @returns A new object containing only valid SVG properties, excluding event handlers.
+ */
+export declare function svgPropertiesNoEvents<T extends Record<string, any>>(obj: T): Pick<T, Extract<keyof T, SVGElementPropKeysType>>;
+export {};
Index: node_modules/recharts/types/util/tooltip/translate.d.ts
===================================================================
--- node_modules/recharts/types/util/tooltip/translate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/tooltip/translate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,40 @@
+import { CSSProperties } from 'react';
+import { Coordinate, CartesianViewBox, AllowInDimension } from '../types';
+export type Dimension2D = 'x' | 'y';
+export declare function getTooltipCSSClassName({ coordinate, translateX, translateY, }: {
+    translateX: number | undefined;
+    translateY: number | undefined;
+    coordinate: Partial<Coordinate> | undefined;
+}): string;
+export declare function getTooltipTranslateXY({ allowEscapeViewBox, coordinate, key, offsetTopLeft, position, reverseDirection, tooltipDimension, viewBox, viewBoxDimension, }: {
+    allowEscapeViewBox: AllowInDimension;
+    coordinate: Coordinate;
+    key: Dimension2D;
+    offsetTopLeft: number;
+    position: Partial<Coordinate>;
+    reverseDirection: AllowInDimension;
+    tooltipDimension: number;
+    viewBox: CartesianViewBox;
+    viewBoxDimension: number | undefined;
+}): number;
+export declare function getTransformStyle({ translateX, translateY, useTranslate3d, }: {
+    useTranslate3d: boolean;
+    translateX: number;
+    translateY: number;
+}): CSSProperties;
+export declare function getTooltipTranslate({ allowEscapeViewBox, coordinate, offsetTopLeft, position, reverseDirection, tooltipBox, useTranslate3d, viewBox, }: {
+    allowEscapeViewBox: AllowInDimension;
+    coordinate: Coordinate | undefined;
+    offsetTopLeft: number;
+    position: Partial<Coordinate>;
+    reverseDirection: AllowInDimension;
+    tooltipBox: {
+        width: number;
+        height: number;
+    };
+    useTranslate3d: boolean;
+    viewBox: CartesianViewBox;
+}): {
+    cssProperties: CSSProperties;
+    cssClasses: string;
+};
Index: node_modules/recharts/types/util/types.d.ts
===================================================================
--- node_modules/recharts/types/util/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/types.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,790 @@
+import { AnimationEvent, AriaAttributes, ClipboardEvent, Component, CompositionEvent, DragEvent, FocusEvent, FormEvent, FunctionComponent, JSX, KeyboardEvent, MouseEvent, PointerEvent, ReactElement, ReactNode, SVGProps, SyntheticEvent, TouchEvent, TransitionEvent, UIEvent, WheelEvent } from 'react';
+import type { Props as DotProps } from '../shape/Dot';
+import { RechartsScale } from './ChartUtils';
+import { AxisRange } from '../state/selectors/axisSelectors';
+import { ExternalMouseEvents } from '../chart/types';
+import { SyncMethod } from '../synchronisation/types';
+/**
+ * Determines how values are stacked:
+ *
+ * - `none` is the default, it adds values on top of each other. No smarts. Negative values will overlap.
+ * - `expand` make it so that the values always add up to 1 - so the chart will look like a rectangle.
+ * - `wiggle` and `silhouette` tries to keep the chart centered.
+ * - `sign` stacks positive values above zero and negative values below zero. Similar to `none` but handles negatives.
+ * - `positive` ignores all negative values, and then behaves like \`none\`.
+ *
+ * Also see https://d3js.org/d3-shape/stack#stack-offsets
+ * (note that the `diverging` offset in d3 is named `sign` in recharts)
+ */
+export type StackOffsetType = 'sign' | 'expand' | 'none' | 'wiggle' | 'silhouette' | 'positive';
+export type CartesianLayout = 'horizontal' | 'vertical';
+export type PolarLayout = 'centric' | 'radial';
+/**
+ * @deprecated use either `CartesianLayout` or `PolarLayout` instead.
+ * Mixing both charts families leads to ambiguity in the type system.
+ * These two layouts share very few properties, so it is best to keep them separate.
+ */
+export type LayoutType = CartesianLayout | PolarLayout;
+export type AxisType = 'xAxis' | 'yAxis' | 'zAxis' | 'angleAxis' | 'radiusAxis';
+export type AxisDomainType = 'number' | 'category';
+export type DataKey<T> = string | number | ((obj: T) => any);
+export type PresentationAttributesWithProps<P, T> = AriaAttributes & DOMAttributesWithProps<P, T> & Omit<SVGProps<T>, keyof DOMAttributesWithProps<P, T>>;
+export type PresentationAttributesAdaptChildEvent<P, T> = AriaAttributes & DOMAttributesAdaptChildEvent<P, T> & Omit<SVGProps<T>, keyof DOMAttributesAdaptChildEvent<P, T>>;
+export type SymbolType = 'circle' | 'cross' | 'diamond' | 'square' | 'star' | 'triangle' | 'wye';
+export type LegendType = 'circle' | 'cross' | 'diamond' | 'line' | 'plainline' | 'rect' | 'square' | 'star' | 'triangle' | 'wye' | 'none';
+export type TooltipType = 'none';
+export type AllowInDimension = {
+    x?: boolean;
+    y?: boolean;
+};
+export interface Coordinate {
+    x: number;
+    y: number;
+}
+export interface NullableCoordinate {
+    x: number | null;
+    y: number | null;
+}
+/**
+ * @deprecated do not use: too many properties, mixing too many concepts, cartesian and polar together, everything optional.
+ */
+export interface ChartCoordinate extends Coordinate {
+    xAxis?: any;
+    yAxis?: any;
+    width?: any;
+    height?: any;
+    offset?: ChartOffsetInternal;
+    angle?: number;
+    radius?: number;
+    cx?: number;
+    cy?: number;
+    startAngle?: number;
+    endAngle?: number;
+    innerRadius?: number;
+    outerRadius?: number;
+}
+export type PolarCoordinate = {
+    cx: number;
+    cy: number;
+    radius: number;
+    startAngle: number;
+    endAngle: number;
+};
+export type ScaleType = 'auto' | 'linear' | 'pow' | 'sqrt' | 'log' | 'symlog' | 'identity' | 'time' | 'band' | 'point' | 'ordinal' | 'quantile' | 'quantize' | 'utc' | 'sequential' | 'threshold';
+type EventHandler<P, E extends SyntheticEvent<any>> = {
+    bivarianceHack(props: P, event: E): void;
+}['bivarianceHack'];
+type ReactEventHandler<P, T = Element> = EventHandler<P, SyntheticEvent<T>>;
+type ClipboardEventHandler<P, T = Element> = EventHandler<P, ClipboardEvent<T>>;
+type CompositionEventHandler<P, T = Element> = EventHandler<P, CompositionEvent<T>>;
+type DragEventHandler<P, T = Element> = EventHandler<P, DragEvent<T>>;
+type FocusEventHandler<P, T = Element> = EventHandler<P, FocusEvent<T>>;
+type FormEventHandler<P, T = Element> = EventHandler<P, FormEvent<T>>;
+type KeyboardEventHandler<P, T = Element> = EventHandler<P, KeyboardEvent<T>>;
+type MouseEventHandler<P, T = Element> = EventHandler<P, MouseEvent<T>>;
+type TouchEventHandler<P, T = Element> = EventHandler<P, TouchEvent<T>>;
+type PointerEventHandler<P, T = Element> = EventHandler<P, PointerEvent<T>>;
+type UIEventHandler<P, T = Element> = EventHandler<P, UIEvent<T>>;
+type WheelEventHandler<P, T = Element> = EventHandler<P, WheelEvent<T>>;
+type AnimationEventHandler<P, T = Element> = EventHandler<P, AnimationEvent<T>>;
+type TransitionEventHandler<P, T = Element> = EventHandler<P, TransitionEvent<T>>;
+export interface DOMAttributesWithProps<P, T> {
+    children?: ReactNode;
+    dangerouslySetInnerHTML?: {
+        __html: string;
+    };
+    onCopy?: ClipboardEventHandler<P, T>;
+    onCopyCapture?: ClipboardEventHandler<P, T>;
+    onCut?: ClipboardEventHandler<P, T>;
+    onCutCapture?: ClipboardEventHandler<P, T>;
+    onPaste?: ClipboardEventHandler<P, T>;
+    onPasteCapture?: ClipboardEventHandler<P, T>;
+    onCompositionEnd?: CompositionEventHandler<P, T>;
+    onCompositionEndCapture?: CompositionEventHandler<P, T>;
+    onCompositionStart?: CompositionEventHandler<P, T>;
+    onCompositionStartCapture?: CompositionEventHandler<P, T>;
+    onCompositionUpdate?: CompositionEventHandler<P, T>;
+    onCompositionUpdateCapture?: CompositionEventHandler<P, T>;
+    onFocus?: FocusEventHandler<P, T>;
+    onFocusCapture?: FocusEventHandler<P, T>;
+    onBlur?: FocusEventHandler<P, T>;
+    onBlurCapture?: FocusEventHandler<P, T>;
+    onChange?: FormEventHandler<P, T>;
+    onChangeCapture?: FormEventHandler<P, T>;
+    onBeforeInput?: FormEventHandler<P, T>;
+    onBeforeInputCapture?: FormEventHandler<P, T>;
+    onInput?: FormEventHandler<P, T>;
+    onInputCapture?: FormEventHandler<P, T>;
+    onReset?: FormEventHandler<P, T>;
+    onResetCapture?: FormEventHandler<P, T>;
+    onSubmit?: FormEventHandler<P, T>;
+    onSubmitCapture?: FormEventHandler<P, T>;
+    onInvalid?: FormEventHandler<P, T>;
+    onInvalidCapture?: FormEventHandler<P, T>;
+    onLoad?: ReactEventHandler<P, T>;
+    onLoadCapture?: ReactEventHandler<P, T>;
+    onError?: ReactEventHandler<P, T>;
+    onErrorCapture?: ReactEventHandler<P, T>;
+    onKeyDown?: KeyboardEventHandler<P, T>;
+    onKeyDownCapture?: KeyboardEventHandler<P, T>;
+    onKeyPress?: KeyboardEventHandler<P, T>;
+    onKeyPressCapture?: KeyboardEventHandler<P, T>;
+    onKeyUp?: KeyboardEventHandler<P, T>;
+    onKeyUpCapture?: KeyboardEventHandler<P, T>;
+    onAbort?: ReactEventHandler<P, T>;
+    onAbortCapture?: ReactEventHandler<P, T>;
+    onCanPlay?: ReactEventHandler<P, T>;
+    onCanPlayCapture?: ReactEventHandler<P, T>;
+    onCanPlayThrough?: ReactEventHandler<P, T>;
+    onCanPlayThroughCapture?: ReactEventHandler<P, T>;
+    onDurationChange?: ReactEventHandler<P, T>;
+    onDurationChangeCapture?: ReactEventHandler<P, T>;
+    onEmptied?: ReactEventHandler<P, T>;
+    onEmptiedCapture?: ReactEventHandler<P, T>;
+    onEncrypted?: ReactEventHandler<P, T>;
+    onEncryptedCapture?: ReactEventHandler<P, T>;
+    onEnded?: ReactEventHandler<P, T>;
+    onEndedCapture?: ReactEventHandler<P, T>;
+    onLoadedData?: ReactEventHandler<P, T>;
+    onLoadedDataCapture?: ReactEventHandler<P, T>;
+    onLoadedMetadata?: ReactEventHandler<P, T>;
+    onLoadedMetadataCapture?: ReactEventHandler<P, T>;
+    onLoadStart?: ReactEventHandler<P, T>;
+    onLoadStartCapture?: ReactEventHandler<P, T>;
+    onPause?: ReactEventHandler<P, T>;
+    onPauseCapture?: ReactEventHandler<P, T>;
+    onPlay?: ReactEventHandler<P, T>;
+    onPlayCapture?: ReactEventHandler<P, T>;
+    onPlaying?: ReactEventHandler<P, T>;
+    onPlayingCapture?: ReactEventHandler<P, T>;
+    onProgress?: ReactEventHandler<P, T>;
+    onProgressCapture?: ReactEventHandler<P, T>;
+    onRateChange?: ReactEventHandler<P, T>;
+    onRateChangeCapture?: ReactEventHandler<P, T>;
+    onSeeked?: ReactEventHandler<P, T>;
+    onSeekedCapture?: ReactEventHandler<P, T>;
+    onSeeking?: ReactEventHandler<P, T>;
+    onSeekingCapture?: ReactEventHandler<P, T>;
+    onStalled?: ReactEventHandler<P, T>;
+    onStalledCapture?: ReactEventHandler<P, T>;
+    onSuspend?: ReactEventHandler<P, T>;
+    onSuspendCapture?: ReactEventHandler<P, T>;
+    onTimeUpdate?: ReactEventHandler<P, T>;
+    onTimeUpdateCapture?: ReactEventHandler<P, T>;
+    onVolumeChange?: ReactEventHandler<P, T>;
+    onVolumeChangeCapture?: ReactEventHandler<P, T>;
+    onWaiting?: ReactEventHandler<P, T>;
+    onWaitingCapture?: ReactEventHandler<P, T>;
+    onAuxClick?: MouseEventHandler<P, T>;
+    onAuxClickCapture?: MouseEventHandler<P, T>;
+    onClick?: MouseEventHandler<P, T>;
+    onClickCapture?: MouseEventHandler<P, T>;
+    onContextMenu?: MouseEventHandler<P, T>;
+    onContextMenuCapture?: MouseEventHandler<P, T>;
+    onDoubleClick?: MouseEventHandler<P, T>;
+    onDoubleClickCapture?: MouseEventHandler<P, T>;
+    onDrag?: DragEventHandler<P, T>;
+    onDragCapture?: DragEventHandler<P, T>;
+    onDragEnd?: DragEventHandler<P, T>;
+    onDragEndCapture?: DragEventHandler<P, T>;
+    onDragEnter?: DragEventHandler<P, T>;
+    onDragEnterCapture?: DragEventHandler<P, T>;
+    onDragExit?: DragEventHandler<P, T>;
+    onDragExitCapture?: DragEventHandler<P, T>;
+    onDragLeave?: DragEventHandler<P, T>;
+    onDragLeaveCapture?: DragEventHandler<P, T>;
+    onDragOver?: DragEventHandler<P, T>;
+    onDragOverCapture?: DragEventHandler<P, T>;
+    onDragStart?: DragEventHandler<P, T>;
+    onDragStartCapture?: DragEventHandler<P, T>;
+    onDrop?: DragEventHandler<P, T>;
+    onDropCapture?: DragEventHandler<P, T>;
+    onMouseDown?: MouseEventHandler<P, T>;
+    onMouseDownCapture?: MouseEventHandler<P, T>;
+    onMouseEnter?: MouseEventHandler<P, T>;
+    onMouseLeave?: MouseEventHandler<P, T>;
+    onMouseMove?: MouseEventHandler<P, T>;
+    onMouseMoveCapture?: MouseEventHandler<P, T>;
+    onMouseOut?: MouseEventHandler<P, T>;
+    onMouseOutCapture?: MouseEventHandler<P, T>;
+    onMouseOver?: MouseEventHandler<P, T>;
+    onMouseOverCapture?: MouseEventHandler<P, T>;
+    onMouseUp?: MouseEventHandler<P, T>;
+    onMouseUpCapture?: MouseEventHandler<P, T>;
+    onSelect?: ReactEventHandler<P, T>;
+    onSelectCapture?: ReactEventHandler<P, T>;
+    onTouchCancel?: TouchEventHandler<P, T>;
+    onTouchCancelCapture?: TouchEventHandler<P, T>;
+    onTouchEnd?: TouchEventHandler<P, T>;
+    onTouchEndCapture?: TouchEventHandler<P, T>;
+    onTouchMove?: TouchEventHandler<P, T>;
+    onTouchMoveCapture?: TouchEventHandler<P, T>;
+    onTouchStart?: TouchEventHandler<P, T>;
+    onTouchStartCapture?: TouchEventHandler<P, T>;
+    onPointerDown?: PointerEventHandler<P, T>;
+    onPointerDownCapture?: PointerEventHandler<P, T>;
+    onPointerMove?: PointerEventHandler<P, T>;
+    onPointerMoveCapture?: PointerEventHandler<P, T>;
+    onPointerUp?: PointerEventHandler<P, T>;
+    onPointerUpCapture?: PointerEventHandler<P, T>;
+    onPointerCancel?: PointerEventHandler<P, T>;
+    onPointerCancelCapture?: PointerEventHandler<P, T>;
+    onPointerEnter?: PointerEventHandler<P, T>;
+    onPointerEnterCapture?: PointerEventHandler<P, T>;
+    onPointerLeave?: PointerEventHandler<P, T>;
+    onPointerLeaveCapture?: PointerEventHandler<P, T>;
+    onPointerOver?: PointerEventHandler<P, T>;
+    onPointerOverCapture?: PointerEventHandler<P, T>;
+    onPointerOut?: PointerEventHandler<P, T>;
+    onPointerOutCapture?: PointerEventHandler<P, T>;
+    onGotPointerCapture?: PointerEventHandler<P, T>;
+    onGotPointerCaptureCapture?: PointerEventHandler<P, T>;
+    onLostPointerCapture?: PointerEventHandler<P, T>;
+    onLostPointerCaptureCapture?: PointerEventHandler<P, T>;
+    onScroll?: UIEventHandler<P, T>;
+    onScrollCapture?: UIEventHandler<P, T>;
+    onWheel?: WheelEventHandler<P, T>;
+    onWheelCapture?: WheelEventHandler<P, T>;
+    onAnimationStart?: AnimationEventHandler<P, T>;
+    onAnimationStartCapture?: AnimationEventHandler<P, T>;
+    onAnimationEnd?: AnimationEventHandler<P, T>;
+    onAnimationEndCapture?: AnimationEventHandler<P, T>;
+    onAnimationIteration?: AnimationEventHandler<P, T>;
+    onAnimationIterationCapture?: AnimationEventHandler<P, T>;
+    onTransitionEnd?: TransitionEventHandler<P, T>;
+    onTransitionEndCapture?: TransitionEventHandler<P, T>;
+}
+type AdaptChildEventHandler<P, E extends SyntheticEvent<any>> = {
+    bivarianceHack(data: P, index: number, event: E): void;
+}['bivarianceHack'];
+type AdaptChildReactEventHandler<P, T = Element> = AdaptChildEventHandler<P, SyntheticEvent<T>>;
+type AdaptChildClipboardEventHandler<P, T = Element> = AdaptChildEventHandler<P, ClipboardEvent<T>>;
+type AdaptChildCompositionEventHandler<P, T = Element> = AdaptChildEventHandler<P, CompositionEvent<T>>;
+type AdaptChildDragEventHandler<P, T = Element> = AdaptChildEventHandler<P, DragEvent<T>>;
+type AdaptChildFocusEventHandler<P, T = Element> = AdaptChildEventHandler<P, FocusEvent<T>>;
+type AdaptChildFormEventHandler<P, T = Element> = AdaptChildEventHandler<P, FormEvent<T>>;
+type AdaptChildKeyboardEventHandler<P, T = Element> = AdaptChildEventHandler<P, KeyboardEvent<T>>;
+type AdaptChildMouseEventHandler<P, T = Element> = AdaptChildEventHandler<P, MouseEvent<T>>;
+type AdaptChildTouchEventHandler<P, T = Element> = AdaptChildEventHandler<P, TouchEvent<T>>;
+type AdaptChildPointerEventHandler<P, T = Element> = AdaptChildEventHandler<P, PointerEvent<T>>;
+type AdaptChildUIEventHandler<P, T = Element> = AdaptChildEventHandler<P, UIEvent<T>>;
+type AdaptChildWheelEventHandler<P, T = Element> = AdaptChildEventHandler<P, WheelEvent<T>>;
+type AdaptChildAnimationEventHandler<P, T = Element> = AdaptChildEventHandler<P, AnimationEvent<T>>;
+type AdaptChildTransitionEventHandler<P, T = Element> = AdaptChildEventHandler<P, TransitionEvent<T>>;
+export type DOMAttributesAdaptChildEvent<P, T> = {
+    children?: ReactNode;
+    dangerouslySetInnerHTML?: {
+        __html: string;
+    };
+    onCopy?: AdaptChildClipboardEventHandler<P, T>;
+    onCopyCapture?: AdaptChildClipboardEventHandler<P, T>;
+    onCut?: AdaptChildClipboardEventHandler<P, T>;
+    onCutCapture?: AdaptChildClipboardEventHandler<P, T>;
+    onPaste?: AdaptChildClipboardEventHandler<P, T>;
+    onPasteCapture?: AdaptChildClipboardEventHandler<P, T>;
+    onCompositionEnd?: AdaptChildCompositionEventHandler<P, T>;
+    onCompositionEndCapture?: AdaptChildCompositionEventHandler<P, T>;
+    onCompositionStart?: AdaptChildCompositionEventHandler<P, T>;
+    onCompositionStartCapture?: AdaptChildCompositionEventHandler<P, T>;
+    onCompositionUpdate?: AdaptChildCompositionEventHandler<P, T>;
+    onCompositionUpdateCapture?: AdaptChildCompositionEventHandler<P, T>;
+    onFocus?: AdaptChildFocusEventHandler<P, T>;
+    onFocusCapture?: AdaptChildFocusEventHandler<P, T>;
+    onBlur?: AdaptChildFocusEventHandler<P, T>;
+    onBlurCapture?: AdaptChildFocusEventHandler<P, T>;
+    onChange?: AdaptChildFormEventHandler<P, T>;
+    onChangeCapture?: AdaptChildFormEventHandler<P, T>;
+    onBeforeInput?: AdaptChildFormEventHandler<P, T>;
+    onBeforeInputCapture?: AdaptChildFormEventHandler<P, T>;
+    onInput?: AdaptChildFormEventHandler<P, T>;
+    onInputCapture?: AdaptChildFormEventHandler<P, T>;
+    onReset?: AdaptChildFormEventHandler<P, T>;
+    onResetCapture?: AdaptChildFormEventHandler<P, T>;
+    onSubmit?: AdaptChildFormEventHandler<P, T>;
+    onSubmitCapture?: AdaptChildFormEventHandler<P, T>;
+    onInvalid?: AdaptChildFormEventHandler<P, T>;
+    onInvalidCapture?: AdaptChildFormEventHandler<P, T>;
+    onLoad?: AdaptChildReactEventHandler<P, T>;
+    onLoadCapture?: AdaptChildReactEventHandler<P, T>;
+    onError?: AdaptChildReactEventHandler<P, T>;
+    onErrorCapture?: AdaptChildReactEventHandler<P, T>;
+    onKeyDown?: AdaptChildKeyboardEventHandler<P, T>;
+    onKeyDownCapture?: AdaptChildKeyboardEventHandler<P, T>;
+    onKeyPress?: AdaptChildKeyboardEventHandler<P, T>;
+    onKeyPressCapture?: AdaptChildKeyboardEventHandler<P, T>;
+    onKeyUp?: AdaptChildKeyboardEventHandler<P, T>;
+    onKeyUpCapture?: AdaptChildKeyboardEventHandler<P, T>;
+    onAbort?: AdaptChildReactEventHandler<P, T>;
+    onAbortCapture?: AdaptChildReactEventHandler<P, T>;
+    onCanPlay?: AdaptChildReactEventHandler<P, T>;
+    onCanPlayCapture?: AdaptChildReactEventHandler<P, T>;
+    onCanPlayThrough?: AdaptChildReactEventHandler<P, T>;
+    onCanPlayThroughCapture?: AdaptChildReactEventHandler<P, T>;
+    onDurationChange?: AdaptChildReactEventHandler<P, T>;
+    onDurationChangeCapture?: AdaptChildReactEventHandler<P, T>;
+    onEmptied?: AdaptChildReactEventHandler<P, T>;
+    onEmptiedCapture?: AdaptChildReactEventHandler<P, T>;
+    onEncrypted?: AdaptChildReactEventHandler<P, T>;
+    onEncryptedCapture?: AdaptChildReactEventHandler<P, T>;
+    onEnded?: AdaptChildReactEventHandler<P, T>;
+    onEndedCapture?: AdaptChildReactEventHandler<P, T>;
+    onLoadedData?: AdaptChildReactEventHandler<P, T>;
+    onLoadedDataCapture?: AdaptChildReactEventHandler<P, T>;
+    onLoadedMetadata?: AdaptChildReactEventHandler<P, T>;
+    onLoadedMetadataCapture?: AdaptChildReactEventHandler<P, T>;
+    onLoadStart?: AdaptChildReactEventHandler<P, T>;
+    onLoadStartCapture?: AdaptChildReactEventHandler<P, T>;
+    onPause?: AdaptChildReactEventHandler<P, T>;
+    onPauseCapture?: AdaptChildReactEventHandler<P, T>;
+    onPlay?: AdaptChildReactEventHandler<P, T>;
+    onPlayCapture?: AdaptChildReactEventHandler<P, T>;
+    onPlaying?: AdaptChildReactEventHandler<P, T>;
+    onPlayingCapture?: AdaptChildReactEventHandler<P, T>;
+    onProgress?: AdaptChildReactEventHandler<P, T>;
+    onProgressCapture?: AdaptChildReactEventHandler<P, T>;
+    onRateChange?: AdaptChildReactEventHandler<P, T>;
+    onRateChangeCapture?: AdaptChildReactEventHandler<P, T>;
+    onSeeked?: AdaptChildReactEventHandler<P, T>;
+    onSeekedCapture?: AdaptChildReactEventHandler<P, T>;
+    onSeeking?: AdaptChildReactEventHandler<P, T>;
+    onSeekingCapture?: AdaptChildReactEventHandler<P, T>;
+    onStalled?: AdaptChildReactEventHandler<P, T>;
+    onStalledCapture?: AdaptChildReactEventHandler<P, T>;
+    onSuspend?: AdaptChildReactEventHandler<P, T>;
+    onSuspendCapture?: AdaptChildReactEventHandler<P, T>;
+    onTimeUpdate?: AdaptChildReactEventHandler<P, T>;
+    onTimeUpdateCapture?: AdaptChildReactEventHandler<P, T>;
+    onVolumeChange?: AdaptChildReactEventHandler<P, T>;
+    onVolumeChangeCapture?: AdaptChildReactEventHandler<P, T>;
+    onWaiting?: AdaptChildReactEventHandler<P, T>;
+    onWaitingCapture?: AdaptChildReactEventHandler<P, T>;
+    onAuxClick?: AdaptChildMouseEventHandler<P, T>;
+    onAuxClickCapture?: AdaptChildMouseEventHandler<P, T>;
+    onClick?: AdaptChildMouseEventHandler<P, T>;
+    onClickCapture?: AdaptChildMouseEventHandler<P, T>;
+    onContextMenu?: AdaptChildMouseEventHandler<P, T>;
+    onContextMenuCapture?: AdaptChildMouseEventHandler<P, T>;
+    onDoubleClick?: AdaptChildMouseEventHandler<P, T>;
+    onDoubleClickCapture?: AdaptChildMouseEventHandler<P, T>;
+    onDrag?: AdaptChildDragEventHandler<P, T>;
+    onDragCapture?: AdaptChildDragEventHandler<P, T>;
+    onDragEnd?: AdaptChildDragEventHandler<P, T>;
+    onDragEndCapture?: AdaptChildDragEventHandler<P, T>;
+    onDragEnter?: AdaptChildDragEventHandler<P, T>;
+    onDragEnterCapture?: AdaptChildDragEventHandler<P, T>;
+    onDragExit?: AdaptChildDragEventHandler<P, T>;
+    onDragExitCapture?: AdaptChildDragEventHandler<P, T>;
+    onDragLeave?: AdaptChildDragEventHandler<P, T>;
+    onDragLeaveCapture?: AdaptChildDragEventHandler<P, T>;
+    onDragOver?: AdaptChildDragEventHandler<P, T>;
+    onDragOverCapture?: AdaptChildDragEventHandler<P, T>;
+    onDragStart?: AdaptChildDragEventHandler<P, T>;
+    onDragStartCapture?: AdaptChildDragEventHandler<P, T>;
+    onDrop?: AdaptChildDragEventHandler<P, T>;
+    onDropCapture?: AdaptChildDragEventHandler<P, T>;
+    onMouseDown?: AdaptChildMouseEventHandler<P, T>;
+    onMouseDownCapture?: AdaptChildMouseEventHandler<P, T>;
+    onMouseEnter?: AdaptChildMouseEventHandler<P, T>;
+    onMouseLeave?: AdaptChildMouseEventHandler<P, T>;
+    onMouseMove?: AdaptChildMouseEventHandler<P, T>;
+    onMouseMoveCapture?: AdaptChildMouseEventHandler<P, T>;
+    onMouseOut?: AdaptChildMouseEventHandler<P, T>;
+    onMouseOutCapture?: AdaptChildMouseEventHandler<P, T>;
+    onMouseOver?: AdaptChildMouseEventHandler<P, T>;
+    onMouseOverCapture?: AdaptChildMouseEventHandler<P, T>;
+    onMouseUp?: AdaptChildMouseEventHandler<P, T>;
+    onMouseUpCapture?: AdaptChildMouseEventHandler<P, T>;
+    onSelect?: AdaptChildReactEventHandler<P, T>;
+    onSelectCapture?: AdaptChildReactEventHandler<P, T>;
+    onTouchCancel?: AdaptChildTouchEventHandler<P, T>;
+    onTouchCancelCapture?: AdaptChildTouchEventHandler<P, T>;
+    onTouchEnd?: AdaptChildTouchEventHandler<P, T>;
+    onTouchEndCapture?: AdaptChildTouchEventHandler<P, T>;
+    onTouchMove?: AdaptChildTouchEventHandler<P, T>;
+    onTouchMoveCapture?: AdaptChildTouchEventHandler<P, T>;
+    onTouchStart?: AdaptChildTouchEventHandler<P, T>;
+    onTouchStartCapture?: AdaptChildTouchEventHandler<P, T>;
+    onPointerDown?: AdaptChildPointerEventHandler<P, T>;
+    onPointerDownCapture?: AdaptChildPointerEventHandler<P, T>;
+    onPointerMove?: AdaptChildPointerEventHandler<P, T>;
+    onPointerMoveCapture?: AdaptChildPointerEventHandler<P, T>;
+    onPointerUp?: AdaptChildPointerEventHandler<P, T>;
+    onPointerUpCapture?: AdaptChildPointerEventHandler<P, T>;
+    onPointerCancel?: AdaptChildPointerEventHandler<P, T>;
+    onPointerCancelCapture?: AdaptChildPointerEventHandler<P, T>;
+    onPointerEnter?: AdaptChildPointerEventHandler<P, T>;
+    onPointerEnterCapture?: AdaptChildPointerEventHandler<P, T>;
+    onPointerLeave?: AdaptChildPointerEventHandler<P, T>;
+    onPointerLeaveCapture?: AdaptChildPointerEventHandler<P, T>;
+    onPointerOver?: AdaptChildPointerEventHandler<P, T>;
+    onPointerOverCapture?: AdaptChildPointerEventHandler<P, T>;
+    onPointerOut?: AdaptChildPointerEventHandler<P, T>;
+    onPointerOutCapture?: AdaptChildPointerEventHandler<P, T>;
+    onGotPointerCapture?: AdaptChildPointerEventHandler<P, T>;
+    onGotPointerCaptureCapture?: AdaptChildPointerEventHandler<P, T>;
+    onLostPointerCapture?: AdaptChildPointerEventHandler<P, T>;
+    onLostPointerCaptureCapture?: AdaptChildPointerEventHandler<P, T>;
+    onScroll?: AdaptChildUIEventHandler<P, T>;
+    onScrollCapture?: AdaptChildUIEventHandler<P, T>;
+    onWheel?: AdaptChildWheelEventHandler<P, T>;
+    onWheelCapture?: AdaptChildWheelEventHandler<P, T>;
+    onAnimationStart?: AdaptChildAnimationEventHandler<P, T>;
+    onAnimationStartCapture?: AdaptChildAnimationEventHandler<P, T>;
+    onAnimationEnd?: AdaptChildAnimationEventHandler<P, T>;
+    onAnimationEndCapture?: AdaptChildAnimationEventHandler<P, T>;
+    onAnimationIteration?: AdaptChildAnimationEventHandler<P, T>;
+    onAnimationIterationCapture?: AdaptChildAnimationEventHandler<P, T>;
+    onTransitionEnd?: AdaptChildTransitionEventHandler<P, T>;
+    onTransitionEndCapture?: AdaptChildTransitionEventHandler<P, T>;
+};
+/** svg element types that have specific attribute filtration requirements */
+export type FilteredSvgElementType = 'svg' | 'polyline' | 'polygon';
+/** map of svg element types to unique svg attributes that belong to that element */
+export declare const FilteredElementKeyMap: Record<FilteredSvgElementType, string[]>;
+/** The type of easing function to use for animations */
+export type AnimationTiming = 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'linear';
+/** Specifies the duration of animation, the unit of this option is ms. */
+export type AnimationDuration = number;
+export type OffsetVertical = {
+    top: number;
+    bottom: number;
+};
+export type OffsetHorizontal = {
+    left: number;
+    right: number;
+};
+/**
+ * This object defines the offset of the chart area and width and height and brush and ... it's a bit too much information all in one.
+ * We use it internally but let's not expose it to the outside world.
+ * If you are looking for this information, instead import `ChartOffset` or `PlotArea` from `recharts`.
+ */
+export type ChartOffsetInternal = {
+    top: number;
+    bottom: number;
+    left: number;
+    right: number;
+    width: number;
+    height: number;
+    brushBottom: number;
+};
+export interface Padding {
+    top: number;
+    bottom: number;
+    left: number;
+    right: number;
+}
+export interface GeometrySector {
+    cx: number;
+    cy: number;
+    innerRadius: number;
+    outerRadius: number;
+    startAngle: number;
+    endAngle: number;
+}
+export type GeometrySectorWithCornerRadius = GeometrySector & {
+    cornerRadius: number;
+    forceCornerRadius: boolean;
+    cornerIsExternal: boolean;
+};
+export type AxisDomainItem = string | number | ((d: number) => string | number) | 'auto' | 'dataMin' | 'dataMax';
+/**
+ * The domain of axis.
+ * This is the definition
+ *
+ * Numeric domain is always defined by an array of exactly two values, for the min and the max of the axis.
+ * Categorical domain is defined as array of all possible values.
+ *
+ * Can be specified in many ways:
+ * - array of numbers
+ * - with special strings like 'dataMin' and 'dataMax'
+ * - with special string math like 'dataMin - 100'
+ * - with keyword 'auto'
+ * - or a function
+ * - array of functions
+ * - or a combination of the above
+ */
+export type AxisDomain = ReadonlyArray<string> | ReadonlyArray<number> | Readonly<[AxisDomainItem, AxisDomainItem]> | (([dataMin, dataMax]: [number, number], allowDataOverflow: boolean) => [number, number]);
+/**
+ * NumberDomain is an evaluated {@link AxisDomain}.
+ * Unlike {@link AxisDomain}, it has no variety - it's a tuple of two number.
+ * This is after all the keywords and functions were evaluated and what is left is [min, max].
+ *
+ * Know that the min, max values are not guaranteed to be nice numbers - values like -Infinity or NaN are possible.
+ *
+ * There are also `category` axes that have different things than numbers in their domain.
+ */
+export type NumberDomain = [min: number, max: number];
+export type CategoricalDomain = ReadonlyArray<number | string | Date>;
+export type TickProp = SVGProps<SVGTextElement> | ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | boolean;
+/** The props definition of base axis */
+export interface BaseAxisProps {
+    /** The type of axis */
+    type?: AxisDomainType;
+    /** The key of data displayed in the axis */
+    dataKey?: DataKey<any>;
+    /** Whether display the axis */
+    hide?: boolean;
+    /** The scale type as a string, or scale function */
+    scale?: ScaleType | RechartsScale;
+    /** The option for tick */
+    tick?: TickProp;
+    /** The count of ticks */
+    tickCount?: number;
+    /** The option for axisLine */
+    axisLine?: boolean | SVGProps<SVGLineElement>;
+    /** The option for tickLine */
+    tickLine?: boolean | SVGProps<SVGLineElement>;
+    /** The size of tick line */
+    tickSize?: number;
+    /** The formatter function of tick */
+    tickFormatter?: (value: any, index: number) => string;
+    /**
+     * When domain of the axis is specified and the type of the axis is 'number',
+     * if allowDataOverflow is set to be false,
+     * the domain will be adjusted when the minimum value of data is smaller than domain[0] or
+     * the maximum value of data is greater than domain[1] so that the axis displays all data values.
+     * If set to true, graphic elements (line, area, bars) will be clipped to conform to the specified domain.
+     */
+    allowDataOverflow?: boolean;
+    /**
+     * Allow the axis has duplicated categories or not when the type of axis is "category".
+     */
+    allowDuplicatedCategory?: boolean;
+    /**
+     * Allow the ticks of axis to be decimals or not.
+     */
+    allowDecimals?: boolean;
+    /** The domain of scale in this axis */
+    domain?: AxisDomain;
+    /** Consider hidden elements when computing the domain (defaults to false) */
+    includeHidden?: boolean;
+    /** The name of data displayed in the axis */
+    name?: string;
+    /** The unit of data displayed in the axis */
+    unit?: string;
+    range?: AxisRange;
+    /** axis react component */
+    AxisComp?: any;
+    /** Needed to allow usage of the label prop on the X and Y axis */
+    label?: string | number | ReactElement | object;
+    /** The HTML element's class name */
+    className?: string;
+}
+/** Defines how ticks are placed and whether / how tick collisions are handled.
+ * 'preserveStart' keeps the left tick on collision and ensures that the first tick is always shown.
+ * 'preserveEnd' keeps the right tick on collision and ensures that the last tick is always shown.
+ * 'preserveStartEnd' keeps the left tick on collision and ensures that the first and last ticks always show.
+ * 'equidistantPreserveStart' selects a number N such that every nTh tick will be shown without collision.
+ */
+export type AxisInterval = number | 'preserveStart' | 'preserveEnd' | 'preserveStartEnd' | 'equidistantPreserveStart';
+/**
+ * Ticks can be any type when the axis is the type of category.
+ *
+ * Ticks must be numbers when the axis is the type of number.
+ */
+export type AxisTick = number | string;
+export interface TickItem {
+    value: any;
+    coordinate: number;
+    index: number;
+    offset?: number;
+}
+export interface CartesianTickItem extends TickItem {
+    tickCoord?: number;
+    tickSize?: number;
+    isShow?: boolean;
+}
+export interface Margin {
+    top?: number;
+    right?: number;
+    bottom?: number;
+    left?: number;
+}
+export interface CartesianViewBox {
+    x?: number;
+    y?: number;
+    width?: number;
+    height?: number;
+}
+export type CartesianViewBoxRequired = Required<CartesianViewBox>;
+export interface PolarViewBox {
+    cx?: number;
+    cy?: number;
+    innerRadius?: number;
+    outerRadius?: number;
+    startAngle?: number;
+    endAngle?: number;
+    clockWise?: boolean;
+}
+export type PolarViewBoxRequired = Required<PolarViewBox>;
+export type ViewBox = CartesianViewBox | PolarViewBox;
+type RecordString<T> = Record<string, T>;
+type AdaptEventHandlersReturn = RecordString<(e?: Event) => any> | RecordString<(e: Event) => void> | null;
+export declare const adaptEventHandlers: (props: RecordString<any> | Component | FunctionComponent | boolean, newHandler?: (e?: Event) => any) => AdaptEventHandlersReturn;
+export declare const adaptEventsOfChild: (props: RecordString<any>, data: any, index: number) => RecordString<(e?: Event) => any> | null;
+/**
+ * 'axis' means that all graphical items belonging to this axis tick will be highlighted,
+ * and all will be present in the tooltip.
+ * Tooltip with 'axis' will display when hovering on the chart background.
+ *
+ * 'item' means only the one graphical item being hovered will show in the tooltip.
+ * Tooltip with 'item' will display when hovering over individual graphical items.
+ *
+ * This is calculated internally;
+ * charts have a `defaultTooltipEventType` and `validateTooltipEventTypes` options.
+ *
+ * Users then use <Tooltip shared={true} /> or <Tooltip shared={false} /> to control their preference,
+ * and charts will then see what is allowed and what is not.
+ */
+export type TooltipEventType = 'axis' | 'item';
+export interface SankeyNode {
+    dx: number;
+    dy: number;
+    name: string;
+    value: any;
+    x: number;
+    y: number;
+    depth: number;
+    targetNodes: number[];
+    targetLinks: number[];
+    sourceNodes: number[];
+    sourceLinks: number[];
+}
+export interface SankeyLink {
+    target: number;
+    source: number;
+    value: number;
+    sy?: number;
+    dy?: number;
+    ty?: number;
+}
+export type Size = {
+    width: number;
+    height: number;
+};
+/**
+ * These are the props we are going to pass to an `activeDot` if it is a function or a custom Component
+ */
+export type ActiveDotProps = DotProps & {
+    payload: any;
+    index: number;
+    dataKey: DataKey<any>;
+    cx: number;
+    cy: number;
+    r: number;
+    fill: string;
+    strokeWidth: number;
+    stroke: string;
+    value: any;
+};
+/**
+ * This is the type of `activeDot` prop on:
+ * - Area
+ * - Line
+ * - Radar
+ */
+export type ActiveDotType = 
+/**
+ * true | false will turn the default activeDot on and off, respectively
+ */
+boolean
+/**
+ * activeDot can be a custom React Component
+ */
+ | ((props: ActiveDotProps) => ReactElement<SVGElement>)
+/**
+ * activeDot can be an object; props from here will be appended to the default active dot
+ */
+ | Partial<ActiveDotProps>
+/**
+ * activeDot can be an element; it will get cloned and will receive new extra props.
+ */
+ | ReactElement<SVGElement>;
+export type ActiveShape<PropsType = Record<string, any>, ElementType = SVGElement> = ReactElement<SVGProps<ElementType>> | ((props: PropsType) => ReactElement<SVGProps<ElementType>>) | ((props: unknown) => JSX.Element) | SVGProps<ElementType> | boolean;
+export type RangeObj = {
+    x?: number;
+    y?: number;
+    cx?: number;
+    cy?: number;
+    angle?: number;
+    radius?: number;
+};
+/**
+ * Simplified version of the MouseEvent so that we don't have to mock the whole thing in tests.
+ *
+ * This is meant to represent the React.MouseEvent
+ * which is a wrapper on top of https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent
+ */
+export interface MousePointer {
+    clientX: number;
+    clientY: number;
+    currentTarget: Pick<HTMLElement, 'getBoundingClientRect' | 'offsetWidth' | 'offsetHeight'>;
+}
+/**
+ * Coordinates relative to the top-left corner of the chart.
+ * Also include scale which means that a chart that's scaled will return the same coordinates as a chart that's not scaled.
+ */
+export interface ChartPointer {
+    chartX: number;
+    chartY: number;
+}
+export interface CartesianChartProps extends Partial<ExternalMouseEvents> {
+    accessibilityLayer?: boolean;
+    barCategoryGap?: number | string;
+    barGap?: number | string;
+    barSize?: number | string;
+    children?: any;
+    className?: string;
+    compact?: boolean;
+    data?: any[];
+    dataKey?: DataKey<any>;
+    desc?: string;
+    height?: number;
+    id?: string;
+    layout?: CartesianLayout;
+    margin?: Margin;
+    maxBarSize?: number;
+    reverseStackOrder?: boolean;
+    role?: string;
+    stackOffset?: StackOffsetType;
+    style?: any;
+    syncId?: number | string;
+    syncMethod?: SyncMethod;
+    tabIndex?: number;
+    throttleDelay?: number;
+    title?: string;
+    width?: number;
+}
+export interface PolarChartProps extends Partial<ExternalMouseEvents> {
+    accessibilityLayer?: boolean;
+    barCategoryGap?: number | string;
+    barGap?: number | string;
+    barSize?: number | string;
+    children?: any;
+    className?: string;
+    cx?: number | string;
+    cy?: number | string;
+    data?: any[];
+    dataKey?: DataKey<any>;
+    desc?: string;
+    endAngle?: number;
+    height?: number;
+    id?: string;
+    innerRadius?: number | string;
+    layout?: PolarLayout;
+    margin?: Margin;
+    maxBarSize?: number;
+    outerRadius?: number | string;
+    reverseStackOrder?: boolean;
+    role?: string;
+    stackOffset?: StackOffsetType;
+    startAngle?: number;
+    style?: any;
+    syncId?: number | string;
+    syncMethod?: SyncMethod;
+    tabIndex?: number;
+    throttleDelay?: number;
+    title?: string;
+    width?: number;
+}
+export {};
Index: node_modules/recharts/types/util/useAnimationId.d.ts
===================================================================
--- node_modules/recharts/types/util/useAnimationId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/useAnimationId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+/**
+ * This hook returns a unique animation id for the object input.
+ * If input changes (as in, reference equality is different), the animation id will change.
+ * If input does not change, the animation id will not change.
+ *
+ * This is useful for animations. The Animate component
+ * does have a `shouldReAnimate` prop but that doesn't seem to be doing what the name implies.
+ * Also, we don't always want to re-animate on every render;
+ * we only want to re-animate when the input changes. Not the internal state (e.g. `isAnimating`).
+ *
+ * @param input The object to check for changes. Uses reference equality (=== operator)
+ * @param prefix Optional prefix to use for the animation id
+ * @returns A unique animation id
+ */
+export declare function useAnimationId(input: unknown, prefix?: string): string;
Index: node_modules/recharts/types/util/useElementOffset.d.ts
===================================================================
--- node_modules/recharts/types/util/useElementOffset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/useElementOffset.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+/**
+ * TODO this documentation does not reflect what this hook is doing, update it.
+ * Stores the `offsetHeight`, `offsetLeft`, `offsetTop`, and `offsetWidth` of a DOM element.
+ */
+export type ElementOffset = {
+    /**
+     * Height of an element, including vertical padding and borders, as an integer.
+     *
+     * Typically, offsetHeight is a measurement in pixels of the element's CSS height, including any borders, padding, and horizontal scrollbars (if rendered). It does not include the height of pseudo-elements such as ::before or ::after
+     *
+     * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
+     */
+    height: number;
+    /**
+     * Number of pixels that the upper left corner of the current element is offset to the left within the HTMLElement.offsetParent node
+     *
+     * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetLeft
+     */
+    left: number;
+    /**
+     * Distance from the outer border of the current element (including its margin) to the top padding edge of the offsetParent, the closest positioned ancestor element.
+     *
+     * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop
+     */
+    top: number;
+    /**
+     * Layout width of an element as an integer.
+     *
+     * Typically, offsetWidth is a measurement in pixels of the element's CSS width, including any borders, padding, and vertical scrollbars (if rendered). It does not include the width of pseudo-elements such as ::before or ::after.
+     *
+     * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth
+     */
+    width: number;
+};
+export type SetElementOffset = (node: HTMLElement | null) => void;
+/**
+ * Use this to listen to element layout changes.
+ *
+ * Very useful for reading actual sizes of DOM elements relative to the viewport.
+ *
+ * @param extraDependencies use this to trigger new DOM dimensions read when any of these change. Good for things like payload and label, that will re-render something down in the children array, but you want to read the layout box of a parent.
+ * @returns [lastElementOffset, updateElementOffset] most recent value, and setter. Pass the setter to a DOM element ref like this: `<div ref={updateElementOffset}>`
+ */
+export declare function useElementOffset(extraDependencies?: ReadonlyArray<unknown>): [ElementOffset, SetElementOffset];
Index: node_modules/recharts/types/util/useId.d.ts
===================================================================
--- node_modules/recharts/types/util/useId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/useId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+/**
+ * Fallback for React.useId() for versions prior to React 18.
+ * Generates a unique ID using a simple counter and a prefix.
+ *
+ * @returns A unique ID that remains consistent across renders.
+ */
+export declare const useIdFallback: () => string;
+export declare const useId: () => string;
Index: node_modules/recharts/types/util/useReportScale.d.ts
===================================================================
--- node_modules/recharts/types/util/useReportScale.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/useReportScale.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export declare function useReportScale(): import("react").Dispatch<import("react").SetStateAction<HTMLElement>>;
Index: node_modules/recharts/types/util/useUniqueId.d.ts
===================================================================
--- node_modules/recharts/types/util/useUniqueId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/types/util/useUniqueId.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * A hook that generates a unique ID. It uses React.useId() in React 18+ for SSR safety
+ * and falls back to a client-side-only unique ID generator for older versions.
+ *
+ * The ID will stay the same across renders, and you can optionally provide a prefix.
+ *
+ * @param [prefix] - An optional prefix for the generated ID.
+ * @param [customId] - An optional custom ID to override the generated one.
+ * @returns The unique ID.
+ */
+export declare function useUniqueId(prefix?: string, customId?: string): string;
+/**
+ * The useUniqueId hook returns a unique ID that is either reused from external props or generated internally.
+ * Either way the ID is now guaranteed to be present so no more nulls or undefined.
+ */
+export type WithIdRequired<T> = T & {
+    id: string;
+};
+export type WithoutId<T> = Omit<T, 'id'>;
Index: node_modules/recharts/umd/Recharts.js
===================================================================
--- node_modules/recharts/umd/Recharts.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/umd/Recharts.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+/*! For license information please see Recharts.js.LICENSE.txt */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-is"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-is","react-dom"],t):"object"==typeof exports?exports.Recharts=t(require("react"),require("react-is"),require("react-dom")):e.Recharts=t(e.React,e.ReactIs,e.ReactDOM)}(this,((e,t,r)=>(()=>{var n={8:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(6773);t.debounce=function(e,t=0,r={}){"object"!=typeof r&&(r={});const{leading:i=!1,trailing:a=!0,maxWait:o}=r,l=Array(2);let c;i&&(l[0]="leading"),a&&(l[1]="trailing");let s=null;const u=n.debounce((function(...t){c=e.apply(this,t),s=null}),t,{edges:l}),f=function(...t){return null!=o&&(null===s&&(s=Date.now()),Date.now()-s>=o)?(c=e.apply(this,t),s=Date.now(),u.cancel(),u.schedule(),c):(u.apply(this,t),c)};return f.cancel=u.cancel,f.flush=()=>(u.flush(),c),f}},25:(e,t,r)=>{e.exports=r(1334).last},58:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(9181);t.isArrayLike=function(e){return null!=e&&"function"!=typeof e&&n.isLength(e.length)}},184:(e,t,r)=>{e.exports=r(4259).sortBy},228:e=>{"use strict";var t=Object.prototype.hasOwnProperty,r="~";function n(){}function i(e,t,r){this.fn=e,this.context=t,this.once=r||!1}function a(e,t,n,a,o){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new i(n,a||e,o),c=r?r+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],l]:e._events[c].push(l):(e._events[c]=l,e._eventsCount++),e}function o(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function l(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),l.prototype.eventNames=function(){var e,n,i=[];if(0===this._eventsCount)return i;for(n in e=this._events)t.call(e,n)&&i.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},l.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,a=n.length,o=new Array(a);i<a;i++)o[i]=n[i].fn;return o},l.prototype.listenerCount=function(e){var t=r?r+e:e,n=this._events[t];return n?n.fn?1:n.length:0},l.prototype.emit=function(e,t,n,i,a,o){var l=r?r+e:e;if(!this._events[l])return!1;var c,s,u=this._events[l],f=arguments.length;if(u.fn){switch(u.once&&this.removeListener(e,u.fn,void 0,!0),f){case 1:return u.fn.call(u.context),!0;case 2:return u.fn.call(u.context,t),!0;case 3:return u.fn.call(u.context,t,n),!0;case 4:return u.fn.call(u.context,t,n,i),!0;case 5:return u.fn.call(u.context,t,n,i,a),!0;case 6:return u.fn.call(u.context,t,n,i,a,o),!0}for(s=1,c=new Array(f-1);s<f;s++)c[s-1]=arguments[s];u.fn.apply(u.context,c)}else{var d,p=u.length;for(s=0;s<p;s++)switch(u[s].once&&this.removeListener(e,u[s].fn,void 0,!0),f){case 1:u[s].fn.call(u[s].context);break;case 2:u[s].fn.call(u[s].context,t);break;case 3:u[s].fn.call(u[s].context,t,n);break;case 4:u[s].fn.call(u[s].context,t,n,i);break;default:if(!c)for(d=1,c=new Array(f-1);d<f;d++)c[d-1]=arguments[d];u[s].fn.apply(u[s].context,c)}}return!0},l.prototype.on=function(e,t,r){return a(this,e,t,r,!1)},l.prototype.once=function(e,t,r){return a(this,e,t,r,!0)},l.prototype.removeListener=function(e,t,n,i){var a=r?r+e:e;if(!this._events[a])return this;if(!t)return o(this,a),this;var l=this._events[a];if(l.fn)l.fn!==t||i&&!l.once||n&&l.context!==n||o(this,a);else{for(var c=0,s=[],u=l.length;c<u;c++)(l[c].fn!==t||i&&!l[c].once||n&&l[c].context!==n)&&s.push(l[c]);s.length?this._events[a]=1===s.length?s[0]:s:o(this,a)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=r?r+e:e,this._events[t]&&o(this,t)):(this._events=new n,this._eventsCount=0),this},l.prototype.off=l.prototype.removeListener,l.prototype.addListener=l.prototype.on,l.prefixed=r,l.EventEmitter=l,e.exports=l},305:(e,t,r)=>{e.exports=r(4200).get},316:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(8509),i=r(58),a=r(4905),o=r(6761);t.isIterateeCall=function(e,t,r){return!!a.isObject(r)&&(!!("number"==typeof t&&i.isArrayLike(r)&&n.isIndex(t)&&t<r.length||"string"==typeof t&&t in r)&&o.eq(r[t],e))}},334:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.maxBy=function(e,t){if(0===e.length)return;let r=e[0],n=t(r);for(let i=1;i<e.length;i++){const a=e[i],o=t(a);o>n&&(n=o,r=a)}return r}},645:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.last=function(e){return e[e.length-1]}},717:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(8273);t.isMatch=function(e,t){return n.isMatchWith(e,t,(()=>{}))}},924:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(8240),i=r(6440),a=r(8202);t.minBy=function(e,t){if(null!=e)return n.minBy(Array.from(e),a.iteratee(t??i.identity))}},993:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(7074),i=r(6012),a=r(2049),o=r(9184),l=r(6761);function c(e,t,r,n,i,a,o){const l=o(e,t,r,n,i,a);if(void 0!==l)return l;if(typeof e==typeof t)switch(typeof e){case"bigint":case"string":case"boolean":case"symbol":case"undefined":case"function":return e===t;case"number":return e===t||Object.is(e,t);case"object":return s(e,t,a,o)}return s(e,t,a,o)}function s(e,t,r,u){if(Object.is(e,t))return!0;let f=a.getTag(e),d=a.getTag(t);if(f===o.argumentsTag&&(f=o.objectTag),d===o.argumentsTag&&(d=o.objectTag),f!==d)return!1;switch(f){case o.stringTag:return e.toString()===t.toString();case o.numberTag:{const r=e.valueOf(),n=t.valueOf();return l.eq(r,n)}case o.booleanTag:case o.dateTag:case o.symbolTag:return Object.is(e.valueOf(),t.valueOf());case o.regexpTag:return e.source===t.source&&e.flags===t.flags;case o.functionTag:return e===t}const p=(r=r??new Map).get(e),h=r.get(t);if(null!=p&&null!=h)return p===t;r.set(e,t),r.set(t,e);try{switch(f){case o.mapTag:if(e.size!==t.size)return!1;for(const[n,i]of e.entries())if(!t.has(n)||!c(i,t.get(n),n,e,t,r,u))return!1;return!0;case o.setTag:{if(e.size!==t.size)return!1;const n=Array.from(e.values()),i=Array.from(t.values());for(let a=0;a<n.length;a++){const o=n[a],l=i.findIndex((n=>c(o,n,void 0,e,t,r,u)));if(-1===l)return!1;i.splice(l,1)}return!0}case o.arrayTag:case o.uint8ArrayTag:case o.uint8ClampedArrayTag:case o.uint16ArrayTag:case o.uint32ArrayTag:case o.bigUint64ArrayTag:case o.int8ArrayTag:case o.int16ArrayTag:case o.int32ArrayTag:case o.bigInt64ArrayTag:case o.float32ArrayTag:case o.float64ArrayTag:if("undefined"!=typeof Buffer&&Buffer.isBuffer(e)!==Buffer.isBuffer(t))return!1;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!c(e[n],t[n],n,e,t,r,u))return!1;return!0;case o.arrayBufferTag:return e.byteLength===t.byteLength&&s(new Uint8Array(e),new Uint8Array(t),r,u);case o.dataViewTag:return e.byteLength===t.byteLength&&e.byteOffset===t.byteOffset&&s(new Uint8Array(e),new Uint8Array(t),r,u);case o.errorTag:return e.name===t.name&&e.message===t.message;case o.objectTag:{if(!(s(e.constructor,t.constructor,r,u)||n.isPlainObject(e)&&n.isPlainObject(t)))return!1;const a=[...Object.keys(e),...i.getSymbols(e)],o=[...Object.keys(t),...i.getSymbols(t)];if(a.length!==o.length)return!1;for(let n=0;n<a.length;n++){const i=a[n],o=e[i];if(!Object.hasOwn(t,i))return!1;if(!c(o,t[i],i,e,t,r,u))return!1}return!0}default:return!1}}finally{r.delete(e),r.delete(t)}}t.isEqualWith=function(e,t,r){return c(e,t,void 0,void 0,void 0,void 0,r)}},1081:(e,t,r)=>{e.exports=r(2810).uniqBy},1334:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(645),i=r(4483),a=r(58);t.last=function(e){if(a.isArrayLike(e))return n.last(i.toArray(e))}},1366:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isSymbol=function(e){return"symbol"==typeof e||e instanceof Symbol}},1465:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.toKey=function(e){return"string"==typeof e||"symbol"==typeof e?e:Object.is(e?.valueOf?.(),-0)?"-0":String(e)}},1576:(e,t,r)=>{e.exports=r(4167).omit},1846:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isObjectLike=function(e){return"object"==typeof e&&null!==e}},2049:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.getTag=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}},2067:(e,t,r)=>{e.exports=r(3667).sumBy},2162:(e,t,r)=>{"use strict";var n=r(5442),i=r(9888);var a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=i.useSyncExternalStore,l=n.useRef,c=n.useEffect,s=n.useMemo,u=n.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,r,n,i){var f=l(null);if(null===f.current){var d={hasValue:!1,value:null};f.current=d}else d=f.current;f=s((function(){function e(e){if(!c){if(c=!0,o=e,e=n(e),void 0!==i&&d.hasValue){var t=d.value;if(i(t,e))return l=t}return l=e}if(t=l,a(o,e))return t;var r=n(e);return void 0!==i&&i(t,r)?(o=e,t):(o=e,l=r)}var o,l,c=!1,s=void 0===r?null:r;return[function(){return e(t())},null===s?void 0:function(){return e(s())}]}),[t,r,n,i]);var p=o(e,f[0],f[1]);return c((function(){d.hasValue=!0,d.value=p}),[p]),u(p),p}},2520:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isPrimitive=function(e){return null==e||"object"!=typeof e&&"function"!=typeof e}},2751:e=>{"use strict";e.exports=t},2810:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(8805),i=r(6440),a=r(8161),o=r(8202);t.uniqBy=function(e,t=i.identity){return a.isArrayLikeObject(e)?n.uniqBy(Array.from(e),o.iteratee(t)):[]}},2938:(e,t,r)=>{e.exports=r(8695).isPlainObject},2972:(e,t,r)=>{e.exports=r(924).minBy},2984:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(2049);t.isArguments=function(e){return null!==e&&"object"==typeof e&&"[object Arguments]"===n.getTag(e)}},3025:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.toPath=function(e){const t=[],r=e.length;if(0===r)return t;let n=0,i="",a="",o=!1;for(46===e.charCodeAt(0)&&(t.push(""),n++);n<r;){const l=e[n];a?"\\"===l&&n+1<r?(n++,i+=e[n]):l===a?a="":i+=l:o?'"'===l||"'"===l?a=l:"]"===l?(o=!1,t.push(i),i=""):i+=l:"["===l?(o=!0,i&&(t.push(i),i="")):"."===l?i&&(t.push(i),i=""):i+=l,n++}return i&&t.push(i),t}},3036:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(717),i=r(1465),a=r(3923),o=r(4200),l=r(7324);t.matchesProperty=function(e,t){switch(typeof e){case"object":Object.is(e?.valueOf(),-0)&&(e="-0");break;case"number":e=i.toKey(e)}return t=a.cloneDeep(t),function(r){const i=o.get(r,e);return void 0===i?l.has(r,e):void 0===t?void 0===i:n.isMatch(i,t)}}},3097:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(3500),i=r(3998),a=r(3025);t.orderBy=function(e,t,r,o){if(null==e)return[];r=o?void 0:r,Array.isArray(e)||(e=Object.values(e)),Array.isArray(t)||(t=null==t?[null]:[t]),0===t.length&&(t=[null]),Array.isArray(r)||(r=null==r?[]:[r]),r=r.map((e=>String(e)));const l=(e,t)=>{let r=e;for(let e=0;e<t.length&&null!=r;++e)r=r[t[e]];return r},c=t.map((e=>(Array.isArray(e)&&1===e.length&&(e=e[0]),null==e||"function"==typeof e||Array.isArray(e)||i.isKey(e)?e:{key:e,path:a.toPath(e)})));return e.map((e=>({original:e,criteria:c.map((t=>((e,t)=>null==t||null==e?t:"object"==typeof e&&"key"in e?Object.hasOwn(t,e.key)?t[e.key]:l(t,e.path):"function"==typeof e?e(t):Array.isArray(e)?l(t,e):"object"==typeof t?t[e]:t)(t,e)))}))).slice().sort(((e,t)=>{for(let i=0;i<c.length;i++){const a=n.compareValues(e.criteria[i],t.criteria[i],r[i]);if(0!==a)return a}return 0})).map((e=>e.original))}},3403:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(4200);t.property=function(e){return function(t){return n.get(t,e)}}},3412:(e,t,r)=>{e.exports=r(5012).range},3500:(e,t)=>{"use strict";function r(e){return"symbol"==typeof e?1:null===e?2:void 0===e?3:e!=e?4:0}Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});t.compareValues=(e,t,n)=>{if(e!==t){const i=r(e),a=r(t);if(i===a&&0===i){if(e<t)return"desc"===n?1:-1;if(e>t)return"desc"===n?-1:1}return"desc"===n?a-i:i-a}return 0}},3667:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(8202);t.sumBy=function(e,t){if(!e||!e.length)return 0;let r;null!=t&&(t=n.iteratee(t));for(let n=0;n<e.length;n++){const i=t?t(e[n]):e[n];void 0!==i&&(void 0===r?r=i:r+=i)}return r}},3844:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(3964);t.cloneDeep=function(e){return n.cloneDeepWithImpl(e,void 0,e,new Map,void 0)}},3908:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isTypedArray=function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}},3923:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(9467);t.cloneDeep=function(e){return n.cloneDeepWith(e)}},3964:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(6012),i=r(2049),a=r(9184),o=r(2520),l=r(3908);function c(e,t,r,n=new Map,u=void 0){const f=u?.(e,t,r,n);if(null!=f)return f;if(o.isPrimitive(e))return e;if(n.has(e))return n.get(e);if(Array.isArray(e)){const t=new Array(e.length);n.set(e,t);for(let i=0;i<e.length;i++)t[i]=c(e[i],i,r,n,u);return Object.hasOwn(e,"index")&&(t.index=e.index),Object.hasOwn(e,"input")&&(t.input=e.input),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp){const t=new RegExp(e.source,e.flags);return t.lastIndex=e.lastIndex,t}if(e instanceof Map){const t=new Map;n.set(e,t);for(const[i,a]of e)t.set(i,c(a,i,r,n,u));return t}if(e instanceof Set){const t=new Set;n.set(e,t);for(const i of e)t.add(c(i,void 0,r,n,u));return t}if("undefined"!=typeof Buffer&&Buffer.isBuffer(e))return e.subarray();if(l.isTypedArray(e)){const t=new(Object.getPrototypeOf(e).constructor)(e.length);n.set(e,t);for(let i=0;i<e.length;i++)t[i]=c(e[i],i,r,n,u);return t}if(e instanceof ArrayBuffer||"undefined"!=typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer)return e.slice(0);if(e instanceof DataView){const t=new DataView(e.buffer.slice(0),e.byteOffset,e.byteLength);return n.set(e,t),s(t,e,r,n,u),t}if("undefined"!=typeof File&&e instanceof File){const t=new File([e],e.name,{type:e.type});return n.set(e,t),s(t,e,r,n,u),t}if(e instanceof Blob){const t=new Blob([e],{type:e.type});return n.set(e,t),s(t,e,r,n,u),t}if(e instanceof Error){const t=new e.constructor;return n.set(e,t),t.message=e.message,t.name=e.name,t.stack=e.stack,t.cause=e.cause,s(t,e,r,n,u),t}if("object"==typeof e&&function(e){switch(i.getTag(e)){case a.argumentsTag:case a.arrayTag:case a.arrayBufferTag:case a.dataViewTag:case a.booleanTag:case a.dateTag:case a.float32ArrayTag:case a.float64ArrayTag:case a.int8ArrayTag:case a.int16ArrayTag:case a.int32ArrayTag:case a.mapTag:case a.numberTag:case a.objectTag:case a.regexpTag:case a.setTag:case a.stringTag:case a.symbolTag:case a.uint8ArrayTag:case a.uint8ClampedArrayTag:case a.uint16ArrayTag:case a.uint32ArrayTag:return!0;default:return!1}}(e)){const t=Object.create(Object.getPrototypeOf(e));return n.set(e,t),s(t,e,r,n,u),t}return e}function s(e,t,r=e,i,a){const o=[...Object.keys(t),...n.getSymbols(t)];for(let n=0;n<o.length;n++){const l=o[n],s=Object.getOwnPropertyDescriptor(e,l);(null==s||s.writable)&&(e[l]=c(t[l],l,r,i,a))}}t.cloneDeepWith=function(e,t){return c(e,void 0,e,new Map,t)},t.cloneDeepWithImpl=c,t.copyProperties=s},3998:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(1366),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.isKey=function(e,t){return!Array.isArray(e)&&(!("number"!=typeof e&&"boolean"!=typeof e&&null!=e&&!n.isSymbol(e))||("string"==typeof e&&(a.test(e)||!i.test(e))||null!=t&&Object.hasOwn(t,e)))}},4146:(e,t,r)=>{"use strict";var n=r(2751),i={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},o={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function c(e){return n.isMemo(e)?o:l[e.$$typeof]||i}l[n.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[n.Memo]=o;var s=Object.defineProperty,u=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,r,n){if("string"!=typeof r){if(h){var i=p(r);i&&i!==h&&e(t,i,n)}var o=u(r);f&&(o=o.concat(f(r)));for(var l=c(t),y=c(r),v=0;v<o.length;++v){var m=o[v];if(!(a[m]||n&&n[m]||y&&y[m]||l&&l[m])){var g=d(r,m);try{s(t,m,g)}catch(e){}}}}return t}},4167:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(7841),i=r(3844);t.omit=function(e,...t){if(null==e)return{};const r=i.cloneDeep(e);for(let e=0;e<t.length;e++){let i=t[e];switch(typeof i){case"object":Array.isArray(i)||(i=Array.from(i));for(let e=0;e<i.length;e++){const t=i[e];n.unset(r,t)}break;case"string":case"symbol":case"number":n.unset(r,i)}}return r}},4200:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(8193),i=r(5112),a=r(1465),o=r(3025);t.get=function e(t,r,l){if(null==t)return l;switch(typeof r){case"string":{if(n.isUnsafeProperty(r))return l;const a=t[r];return void 0===a?i.isDeepKey(r)?e(t,o.toPath(r),l):l:a}case"number":case"symbol":{"number"==typeof r&&(r=a.toKey(r));const e=t[r];return void 0===e?l:e}default:{if(Array.isArray(r))return function(e,t,r){if(0===t.length)return r;let i=e;for(let e=0;e<t.length;e++){if(null==i)return r;if(n.isUnsafeProperty(t[e]))return r;i=i[t[e]]}if(void 0===i)return r;return i}(t,r,l);if(r=Object.is(r?.valueOf(),-0)?"-0":String(r),n.isUnsafeProperty(r))return l;const e=t[r];return void 0===e?l:e}}}},4259:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(3097),i=r(5711),a=r(316);t.sortBy=function(e,...t){const r=t.length;return r>1&&a.isIterateeCall(e,t[0],t[1])?t=[]:r>2&&a.isIterateeCall(t[0],t[1],t[2])&&(t=[t[0]]),n.orderBy(e,i.flatten(t),["asc"])}},4297:(e,t,r)=>{e.exports=r(5259).throttle},4338:(e,t,r)=>{e.exports=r(5938).maxBy},4483:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.toArray=function(e){return Array.isArray(e)?e:Array.from(e)}},4569:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(8919);t.toFinite=function(e){if(!e)return 0===e?e:0;if((e=n.toNumber(e))===1/0||e===-1/0){return(e<0?-1:1)*Number.MAX_VALUE}return e==e?e:0}},4905:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isObject=function(e){return null!==e&&("object"==typeof e||"function"==typeof e)}},5012:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(316),i=r(4569);t.range=function(e,t,r){r&&"number"!=typeof r&&n.isIterateeCall(e,t,r)&&(t=r=void 0),e=i.toFinite(e),void 0===t?(t=e,e=0):t=i.toFinite(t),r=void 0===r?e<t?1:-1:i.toFinite(r);const a=Math.max(Math.ceil((t-e)/(r||1)),0),o=new Array(a);for(let t=0;t<a;t++)o[t]=e,e+=r;return o}},5112:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isDeepKey=function(e){switch(typeof e){case"number":case"symbol":return!1;case"string":return e.includes(".")||e.includes("[")||e.includes("]")}}},5259:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(8);t.throttle=function(e,t=0,r={}){const{leading:i=!0,trailing:a=!0}=r;return n.debounce(e,t,{leading:i,maxWait:t,trailing:a})}},5442:t=>{"use strict";t.exports=e},5711:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.flatten=function(e,t=1){const r=[],n=Math.floor(t),i=(e,t)=>{for(let a=0;a<e.length;a++){const o=e[a];Array.isArray(o)&&t<n?i(o,t+1):r.push(o)}};return i(e,0),r}},5938:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(334),i=r(6440),a=r(8202);t.maxBy=function(e,t){if(null!=e)return n.maxBy(Array.from(e),a.iteratee(t??i.identity))}},6003:e=>{"use strict";e.exports=r},6012:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.getSymbols=function(e){return Object.getOwnPropertySymbols(e).filter((t=>Object.prototype.propertyIsEnumerable.call(e,t)))}},6440:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.identity=function(e){return e}},6502:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.noop=function(){}},6761:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.eq=function(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}},6773:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.debounce=function(e,t,{signal:r,edges:n}={}){let i,a=null;const o=null!=n&&n.includes("leading"),l=null==n||n.includes("trailing"),c=()=>{null!==a&&(e.apply(i,a),i=void 0,a=null)};let s=null;const u=()=>{null!=s&&clearTimeout(s),s=setTimeout((()=>{s=null,l&&c(),f()}),t)},f=()=>{null!==s&&(clearTimeout(s),s=null),i=void 0,a=null},d=function(...e){if(r?.aborted)return;i=this,a=e;const t=null==s;u(),o&&t&&c()};return d.schedule=u,d.cancel=f,d.flush=()=>{c()},r?.addEventListener("abort",f,{once:!0}),d}},7074:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isPlainObject=function(e){if(!e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t))&&"[object Object]"===Object.prototype.toString.call(e)}},7324:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(5112),i=r(8509),a=r(2984),o=r(3025);t.has=function(e,t){let r;if(r=Array.isArray(t)?t:"string"==typeof t&&n.isDeepKey(t)&&null==e?.[t]?o.toPath(t):[t],0===r.length)return!1;let l=e;for(let e=0;e<r.length;e++){const t=r[e];if(null==l||!Object.hasOwn(l,t)){if(!((Array.isArray(l)||a.isArguments(l))&&i.isIndex(t)&&t<l.length))return!1}l=l[t]}return!0}},7541:(e,t,r)=>{e.exports=r(9341).isEqual},7841:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(4200),i=r(8193),a=r(5112),o=r(1465),l=r(3025);function c(e,t){const r=n.get(e,t.slice(0,-1),e),a=t[t.length-1];if(void 0===r?.[a])return!0;if(i.isUnsafeProperty(a))return!1;try{return delete r[a],!0}catch{return!1}}t.unset=function(e,t){if(null==e)return!0;switch(typeof t){case"symbol":case"number":case"object":if(Array.isArray(t))return c(e,t);if("number"==typeof t?t=o.toKey(t):"object"==typeof t&&(t=Object.is(t?.valueOf(),-0)?"-0":String(t)),i.isUnsafeProperty(t))return!1;if(void 0===e?.[t])return!0;try{return delete e[t],!0}catch{return!1}case"string":if(void 0===e?.[t]&&a.isDeepKey(t))return c(e,l.toPath(t));if(i.isUnsafeProperty(t))return!1;try{return delete e[t],!0}catch{return!1}}}},7861:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(717),i=r(3844);t.matches=function(e){return e=i.cloneDeep(e),t=>n.isMatch(t,e)}},8161:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(58),i=r(1846);t.isArrayLikeObject=function(e){return i.isObjectLike(e)&&n.isArrayLike(e)}},8193:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isUnsafeProperty=function(e){return"__proto__"===e}},8202:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(6440),i=r(3403),a=r(7861),o=r(3036);t.iteratee=function(e){if(null==e)return n.identity;switch(typeof e){case"function":return e;case"object":return Array.isArray(e)&&2===e.length?o.matchesProperty(e[0],e[1]):a.matches(e);case"string":case"symbol":case"number":return i.property(e)}}},8240:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.minBy=function(e,t){if(0===e.length)return;let r=e[0],n=t(r);for(let i=1;i<e.length;i++){const a=e[i],o=t(a);o<n&&(n=o,r=a)}return r}},8273:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(717),i=r(4905),a=r(2520),o=r(6761);function l(e,t,r,n){if(t===e)return!0;switch(typeof t){case"object":return function(e,t,r,n){if(null==t)return!0;if(Array.isArray(t))return c(e,t,r,n);if(t instanceof Map)return function(e,t,r,n){if(0===t.size)return!0;if(!(e instanceof Map))return!1;for(const[i,a]of t.entries()){if(!1===r(e.get(i),a,i,e,t,n))return!1}return!0}(e,t,r,n);if(t instanceof Set)return s(e,t,r,n);const i=Object.keys(t);if(null==e)return 0===i.length;if(0===i.length)return!0;if(n&&n.has(t))return n.get(t)===e;n&&n.set(t,e);try{for(let o=0;o<i.length;o++){const l=i[o];if(!a.isPrimitive(e)&&!(l in e))return!1;if(void 0===t[l]&&void 0!==e[l])return!1;if(null===t[l]&&null!==e[l])return!1;if(!r(e[l],t[l],l,e,t,n))return!1}return!0}finally{n&&n.delete(t)}}(e,t,r,n);case"function":return Object.keys(t).length>0?l(e,{...t},r,n):o.eq(e,t);default:return i.isObject(e)?"string"!=typeof t||""===t:o.eq(e,t)}}function c(e,t,r,n){if(0===t.length)return!0;if(!Array.isArray(e))return!1;const i=new Set;for(let a=0;a<t.length;a++){const o=t[a];let l=!1;for(let c=0;c<e.length;c++){if(i.has(c))continue;let s=!1;if(r(e[c],o,a,e,t,n)&&(s=!0),s){i.add(c),l=!0;break}}if(!l)return!1}return!0}function s(e,t,r,n){return 0===t.size||e instanceof Set&&c([...e],[...t],r,n)}t.isMatchWith=function(e,t,r){return"function"!=typeof r?n.isMatch(e,t):l(e,t,(function e(t,n,i,a,o,c){const s=r(t,n,i,a,o,c);return void 0!==s?Boolean(s):l(t,n,e,c)}),new Map)},t.isSetMatch=s},8351:function(e,t,r){var n;!function(){"use strict";var i,a=1e9,o={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},l=!0,c="[DecimalError] ",s=c+"Invalid argument: ",u=c+"Exponent out of range: ",f=Math.floor,d=Math.pow,p=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,h=1e7,y=9007199254740991,v=f(1286742750677284.5),m={};function g(e,t){var r,n,i,a,o,c,s,u,f=e.constructor,d=f.precision;if(!e.s||!t.s)return t.s||(t=new f(e)),l?k(t,d):t;if(s=e.d,u=t.d,o=e.e,i=t.e,s=s.slice(),a=o-i){for(a<0?(n=s,a=-a,c=u.length):(n=u,i=o,c=s.length),a>(c=(o=Math.ceil(d/7))>c?o+1:c+1)&&(a=c,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for((c=s.length)-(a=u.length)<0&&(a=c,n=u,u=s,s=n),r=0;a;)r=(s[--a]=s[a]+u[a]+r)/h|0,s[a]%=h;for(r&&(s.unshift(r),++i),c=s.length;0==s[--c];)s.pop();return t.d=s,t.e=i,l?k(t,d):t}function b(e,t,r){if(e!==~~e||e<t||e>r)throw Error(s+e)}function x(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;t<i;t++)(r=7-(n=e[t]+"").length)&&(a+=A(r)),a+=n;(r=7-(n=(o=e[t])+"").length)&&(a+=A(r))}else if(0===o)return"0";for(;o%10==0;)o/=10;return a+o}m.absoluteValue=m.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e},m.comparedTo=m.cmp=function(e){var t,r,n,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(t=0,r=(n=a.d.length)<(i=e.d.length)?n:i;t<r;++t)if(a.d[t]!==e.d[t])return a.d[t]>e.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1},m.decimalPlaces=m.dp=function(){var e=this,t=e.d.length-1,r=7*(t-e.e);if(t=e.d[t])for(;t%10==0;t/=10)r--;return r<0?0:r},m.dividedBy=m.div=function(e){return w(this,new this.constructor(e))},m.dividedToIntegerBy=m.idiv=function(e){var t=this.constructor;return k(w(this,new t(e),0,1),t.precision)},m.equals=m.eq=function(e){return!this.cmp(e)},m.exponent=function(){return P(this)},m.greaterThan=m.gt=function(e){return this.cmp(e)>0},m.greaterThanOrEqualTo=m.gte=function(e){return this.cmp(e)>=0},m.isInteger=m.isint=function(){return this.e>this.d.length-2},m.isNegative=m.isneg=function(){return this.s<0},m.isPositive=m.ispos=function(){return this.s>0},m.isZero=function(){return 0===this.s},m.lessThan=m.lt=function(e){return this.cmp(e)<0},m.lessThanOrEqualTo=m.lte=function(e){return this.cmp(e)<1},m.logarithm=m.log=function(e){var t,r=this,n=r.constructor,a=n.precision,o=a+5;if(void 0===e)e=new n(10);else if((e=new n(e)).s<1||e.eq(i))throw Error(c+"NaN");if(r.s<1)throw Error(c+(r.s?"NaN":"-Infinity"));return r.eq(i)?new n(0):(l=!1,t=w(j(r,o),j(e,o),o),l=!0,k(t,a))},m.minus=m.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?M(t,e):g(t,(e.s=-e.s,e))},m.modulo=m.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(!(e=new n(e)).s)throw Error(c+"NaN");return r.s?(l=!1,t=w(r,e,0,1).times(e),l=!0,r.minus(t)):k(new n(r),i)},m.naturalExponential=m.exp=function(){return O(this)},m.naturalLogarithm=m.ln=function(){return j(this)},m.negated=m.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e},m.plus=m.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?g(t,e):M(t,(e.s=-e.s,e))},m.precision=m.sd=function(e){var t,r,n,i=this;if(void 0!==e&&e!==!!e&&1!==e&&0!==e)throw Error(s+e);if(t=P(i)+1,r=7*(n=i.d.length-1)+1,n=i.d[n]){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r},m.squareRoot=m.sqrt=function(){var e,t,r,n,i,a,o,s=this,u=s.constructor;if(s.s<1){if(!s.s)return new u(0);throw Error(c+"NaN")}for(e=P(s),l=!1,0==(i=Math.sqrt(+s))||i==1/0?(((t=x(s.d)).length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=f((e+1)/2)-(e<0||e%2),n=new u(t=i==1/0?"5e"+e:(t=i.toExponential()).slice(0,t.indexOf("e")+1)+e)):n=new u(i.toString()),i=o=(r=u.precision)+3;;)if(n=(a=n).plus(w(s,a,o+2)).times(.5),x(a.d).slice(0,o)===(t=x(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&"4999"==t){if(k(a,r+1,0),a.times(a).eq(s)){n=a;break}}else if("9999"!=t)break;o+=4}return l=!0,k(n,r)},m.times=m.mul=function(e){var t,r,n,i,a,o,c,s,u,f=this,d=f.constructor,p=f.d,y=(e=new d(e)).d;if(!f.s||!e.s)return new d(0);for(e.s*=f.s,r=f.e+e.e,(s=p.length)<(u=y.length)&&(a=p,p=y,y=a,o=s,s=u,u=o),a=[],n=o=s+u;n--;)a.push(0);for(n=u;--n>=0;){for(t=0,i=s+n;i>n;)c=a[i]+y[n]*p[i-n-1]+t,a[i--]=c%h|0,t=c/h|0;a[i]=(a[i]+t)%h|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,l?k(e,d.precision):e},m.toDecimalPlaces=m.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),void 0===e?r:(b(e,0,a),void 0===t?t=n.rounding:b(t,0,8),k(r,e+P(r)+1,t))},m.toExponential=function(e,t){var r,n=this,i=n.constructor;return void 0===e?r=T(n,!0):(b(e,0,a),void 0===t?t=i.rounding:b(t,0,8),r=T(n=k(new i(n),e+1,t),!0,e+1)),r},m.toFixed=function(e,t){var r,n,i=this,o=i.constructor;return void 0===e?T(i):(b(e,0,a),void 0===t?t=o.rounding:b(t,0,8),r=T((n=k(new o(i),e+P(i)+1,t)).abs(),!1,e+P(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)},m.toInteger=m.toint=function(){var e=this,t=e.constructor;return k(new t(e),P(e)+1,t.rounding)},m.toNumber=function(){return+this},m.toPower=m.pow=function(e){var t,r,n,a,o,s,u=this,d=u.constructor,p=+(e=new d(e));if(!e.s)return new d(i);if(!(u=new d(u)).s){if(e.s<1)throw Error(c+"Infinity");return u}if(u.eq(i))return u;if(n=d.precision,e.eq(i))return k(u,n);if(s=(t=e.e)>=(r=e.d.length-1),o=u.s,s){if((r=p<0?-p:p)<=y){for(a=new d(i),t=Math.ceil(n/7+4),l=!1;r%2&&D((a=a.times(u)).d,t),0!==(r=f(r/2));)D((u=u.times(u)).d,t);return l=!0,e.s<0?new d(i).div(a):k(a,n)}}else if(o<0)throw Error(c+"NaN");return o=o<0&&1&e.d[Math.max(t,r)]?-1:1,u.s=1,l=!1,a=e.times(j(u,n+12)),l=!0,(a=O(a)).s=o,a},m.toPrecision=function(e,t){var r,n,i=this,o=i.constructor;return void 0===e?n=T(i,(r=P(i))<=o.toExpNeg||r>=o.toExpPos):(b(e,1,a),void 0===t?t=o.rounding:b(t,0,8),n=T(i=k(new o(i),e,t),e<=(r=P(i))||r<=o.toExpNeg,e)),n},m.toSignificantDigits=m.tosd=function(e,t){var r=this.constructor;return void 0===e?(e=r.precision,t=r.rounding):(b(e,1,a),void 0===t?t=r.rounding:b(t,0,8)),k(new r(this),e,t)},m.toString=m.valueOf=m.val=m.toJSON=function(){var e=this,t=P(e),r=e.constructor;return T(e,t<=r.toExpNeg||t>=r.toExpPos)};var w=function(){function e(e,t){var r,n=0,i=e.length;for(e=e.slice();i--;)r=e[i]*t+n,e[i]=r%h|0,n=r/h|0;return n&&e.unshift(n),e}function t(e,t,r,n){var i,a;if(r!=n)a=r>n?1:-1;else for(i=a=0;i<r;i++)if(e[i]!=t[i]){a=e[i]>t[i]?1:-1;break}return a}function r(e,t,r){for(var n=0;r--;)e[r]-=n,n=e[r]<t[r]?1:0,e[r]=n*h+e[r]-t[r];for(;!e[0]&&e.length>1;)e.shift()}return function(n,i,a,o){var l,s,u,f,d,p,y,v,m,g,b,x,w,O,E,A,j,S,M=n.constructor,T=n.s==i.s?1:-1,D=n.d,C=i.d;if(!n.s)return new M(n);if(!i.s)throw Error(c+"Division by zero");for(s=n.e-i.e,j=C.length,E=D.length,v=(y=new M(T)).d=[],u=0;C[u]==(D[u]||0);)++u;if(C[u]>(D[u]||0)&&--s,(x=null==a?a=M.precision:o?a+(P(n)-P(i))+1:a)<0)return new M(0);if(x=x/7+2|0,u=0,1==j)for(f=0,C=C[0],x++;(u<E||f)&&x--;u++)w=f*h+(D[u]||0),v[u]=w/C|0,f=w%C|0;else{for((f=h/(C[0]+1)|0)>1&&(C=e(C,f),D=e(D,f),j=C.length,E=D.length),O=j,g=(m=D.slice(0,j)).length;g<j;)m[g++]=0;(S=C.slice()).unshift(0),A=C[0],C[1]>=h/2&&++A;do{f=0,(l=t(C,m,j,g))<0?(b=m[0],j!=g&&(b=b*h+(m[1]||0)),(f=b/A|0)>1?(f>=h&&(f=h-1),1==(l=t(d=e(C,f),m,p=d.length,g=m.length))&&(f--,r(d,j<p?S:C,p))):(0==f&&(l=f=1),d=C.slice()),(p=d.length)<g&&d.unshift(0),r(m,d,g),-1==l&&(l=t(C,m,j,g=m.length))<1&&(f++,r(m,j<g?S:C,g)),g=m.length):0===l&&(f++,m=[0]),v[u++]=f,l&&m[0]?m[g++]=D[O]||0:(m=[D[O]],g=1)}while((O++<E||void 0!==m[0])&&x--)}return v[0]||v.shift(),y.e=s,k(y,o?a+P(y)+1:a)}}();function O(e,t){var r,n,a,o,c,s=0,f=0,p=e.constructor,h=p.precision;if(P(e)>16)throw Error(u+P(e));if(!e.s)return new p(i);for(null==t?(l=!1,c=h):c=t,o=new p(.03125);e.abs().gte(.1);)e=e.times(o),f+=5;for(c+=Math.log(d(2,f))/Math.LN10*2+5|0,r=n=a=new p(i),p.precision=c;;){if(n=k(n.times(e),c),r=r.times(++s),x((o=a.plus(w(n,r,c))).d).slice(0,c)===x(a.d).slice(0,c)){for(;f--;)a=k(a.times(a),c);return p.precision=h,null==t?(l=!0,k(a,h)):a}a=o}}function P(e){for(var t=7*e.e,r=e.d[0];r>=10;r/=10)t++;return t}function E(e,t,r){if(t>e.LN10.sd())throw l=!0,r&&(e.precision=r),Error(c+"LN10 precision limit exceeded");return k(new e(e.LN10),t)}function A(e){for(var t="";e--;)t+="0";return t}function j(e,t){var r,n,a,o,s,u,f,d,p,h=1,y=e,v=y.d,m=y.constructor,g=m.precision;if(y.s<1)throw Error(c+(y.s?"NaN":"-Infinity"));if(y.eq(i))return new m(0);if(null==t?(l=!1,d=g):d=t,y.eq(10))return null==t&&(l=!0),E(m,d);if(d+=10,m.precision=d,n=(r=x(v)).charAt(0),o=P(y),!(Math.abs(o)<15e14))return f=E(m,d+2,g).times(o+""),y=j(new m(n+"."+r.slice(1)),d-10).plus(f),m.precision=g,null==t?(l=!0,k(y,g)):y;for(;n<7&&1!=n||1==n&&r.charAt(1)>3;)n=(r=x((y=y.times(e)).d)).charAt(0),h++;for(o=P(y),n>1?(y=new m("0."+r),o++):y=new m(n+"."+r.slice(1)),u=s=y=w(y.minus(i),y.plus(i),d),p=k(y.times(y),d),a=3;;){if(s=k(s.times(p),d),x((f=u.plus(w(s,new m(a),d))).d).slice(0,d)===x(u.d).slice(0,d))return u=u.times(2),0!==o&&(u=u.plus(E(m,d+2,g).times(o+""))),u=w(u,new m(h),d),m.precision=g,null==t?(l=!0,k(u,g)):u;u=f,a+=2}}function S(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;48===t.charCodeAt(n);)++n;for(i=t.length;48===t.charCodeAt(i-1);)--i;if(t=t.slice(n,i)){if(i-=n,r=r-n-1,e.e=f(r/7),e.d=[],n=(r+1)%7,r<0&&(n+=7),n<i){for(n&&e.d.push(+t.slice(0,n)),i-=7;n<i;)e.d.push(+t.slice(n,n+=7));n=7-(t=t.slice(n)).length}else n-=i;for(;n--;)t+="0";if(e.d.push(+t),l&&(e.e>v||e.e<-v))throw Error(u+r)}else e.s=0,e.e=0,e.d=[0];return e}function k(e,t,r){var n,i,a,o,c,s,p,y,m=e.d;for(o=1,a=m[0];a>=10;a/=10)o++;if((n=t-o)<0)n+=7,i=t,p=m[y=0];else{if((y=Math.ceil((n+1)/7))>=(a=m.length))return e;for(p=a=m[y],o=1;a>=10;a/=10)o++;i=(n%=7)-7+o}if(void 0!==r&&(c=p/(a=d(10,o-i-1))%10|0,s=t<0||void 0!==m[y+1]||p%a,s=r<4?(c||s)&&(0==r||r==(e.s<0?3:2)):c>5||5==c&&(4==r||s||6==r&&(n>0?i>0?p/d(10,o-i):0:m[y-1])%10&1||r==(e.s<0?8:7))),t<1||!m[0])return s?(a=P(e),m.length=1,t=t-a-1,m[0]=d(10,(7-t%7)%7),e.e=f(-t/7)||0):(m.length=1,m[0]=e.e=e.s=0),e;if(0==n?(m.length=y,a=1,y--):(m.length=y+1,a=d(10,7-n),m[y]=i>0?(p/d(10,o-i)%d(10,i)|0)*a:0),s)for(;;){if(0==y){(m[0]+=a)==h&&(m[0]=1,++e.e);break}if(m[y]+=a,m[y]!=h)break;m[y--]=0,a=1}for(n=m.length;0===m[--n];)m.pop();if(l&&(e.e>v||e.e<-v))throw Error(u+P(e));return e}function M(e,t){var r,n,i,a,o,c,s,u,f,d,p=e.constructor,y=p.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new p(e),l?k(t,y):t;if(s=e.d,d=t.d,n=t.e,u=e.e,s=s.slice(),o=u-n){for((f=o<0)?(r=s,o=-o,c=d.length):(r=d,n=u,c=s.length),o>(i=Math.max(Math.ceil(y/7),c)+2)&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for((f=(i=s.length)<(c=d.length))&&(c=i),i=0;i<c;i++)if(s[i]!=d[i]){f=s[i]<d[i];break}o=0}for(f&&(r=s,s=d,d=r,t.s=-t.s),c=s.length,i=d.length-c;i>0;--i)s[c++]=0;for(i=d.length;i>o;){if(s[--i]<d[i]){for(a=i;a&&0===s[--a];)s[a]=h-1;--s[a],s[i]+=h}s[i]-=d[i]}for(;0===s[--c];)s.pop();for(;0===s[0];s.shift())--n;return s[0]?(t.d=s,t.e=n,l?k(t,y):t):new p(0)}function T(e,t,r){var n,i=P(e),a=x(e.d),o=a.length;return t?(r&&(n=r-o)>0?a=a.charAt(0)+"."+a.slice(1)+A(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+A(-i-1)+a,r&&(n=r-o)>0&&(a+=A(n))):i>=o?(a+=A(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+A(n))):((n=i+1)<o&&(a=a.slice(0,n)+"."+a.slice(n)),r&&(n=r-o)>0&&(i+1===o&&(a+="."),a+=A(n))),e.s<0?"-"+a:a}function D(e,t){if(e.length>t)return e.length=t,!0}function C(e){if(!e||"object"!=typeof e)throw Error(c+"Object expected");var t,r,n,i=["precision",1,a,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t<i.length;t+=3)if(void 0!==(n=e[r=i[t]])){if(!(f(n)===n&&n>=i[t+1]&&n<=i[t+2]))throw Error(s+r+": "+n);this[r]=n}if(void 0!==(n=e[r="LN10"])){if(n!=Math.LN10)throw Error(s+r+": "+n);this[r]=new this(n)}return this}o=function e(t){var r,n,i;function a(e){var t=this;if(!(t instanceof a))return new a(e);if(t.constructor=a,e instanceof a)return t.s=e.s,t.e=e.e,void(t.d=(e=e.d)?e.slice():e);if("number"==typeof e){if(0*e!=0)throw Error(s+e);if(e>0)t.s=1;else{if(!(e<0))return t.s=0,t.e=0,void(t.d=[0]);e=-e,t.s=-1}return e===~~e&&e<1e7?(t.e=0,void(t.d=[e])):S(t,e.toString())}if("string"!=typeof e)throw Error(s+e);if(45===e.charCodeAt(0)?(e=e.slice(1),t.s=-1):t.s=1,!p.test(e))throw Error(s+e);S(t,e)}if(a.prototype=m,a.ROUND_UP=0,a.ROUND_DOWN=1,a.ROUND_CEIL=2,a.ROUND_FLOOR=3,a.ROUND_HALF_UP=4,a.ROUND_HALF_DOWN=5,a.ROUND_HALF_EVEN=6,a.ROUND_HALF_CEIL=7,a.ROUND_HALF_FLOOR=8,a.clone=e,a.config=a.set=C,void 0===t&&(t={}),t)for(i=["precision","rounding","toExpNeg","toExpPos","LN10"],r=0;r<i.length;)t.hasOwnProperty(n=i[r++])||(t[n]=this[n]);return a.config(t),a}(o),o.default=o.Decimal=o,i=new o(1),void 0===(n=function(){return o}.call(t,r,t,e))||(e.exports=n)}()},8493:(e,t,r)=>{"use strict";var n=r(5442);var i="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=n.useState,o=n.useEffect,l=n.useLayoutEffect,c=n.useDebugValue;function s(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!i(e,r)}catch(e){return!0}}var u="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var r=t(),n=a({inst:{value:r,getSnapshot:t}}),i=n[0].inst,u=n[1];return l((function(){i.value=r,i.getSnapshot=t,s(i)&&u({inst:i})}),[e,r,t]),o((function(){return s(i)&&u({inst:i}),e((function(){s(i)&&u({inst:i})}))}),[e]),c(r),r};t.useSyncExternalStore=void 0!==n.useSyncExternalStore?n.useSyncExternalStore:u},8509:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const r=/^(?:0|[1-9]\d*)$/;t.isIndex=function(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e<t;case"symbol":return!1;case"string":return r.test(e)}}},8695:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isPlainObject=function(e){if("object"!=typeof e)return!1;if(null==e)return!1;if(null===Object.getPrototypeOf(e))return!0;if("[object Object]"!==Object.prototype.toString.call(e)){const t=e[Symbol.toStringTag];if(null==t)return!1;return!!Object.getOwnPropertyDescriptor(e,Symbol.toStringTag)?.writable&&e.toString()===`[object ${t}]`}let t=e;for(;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}},8805:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.uniqBy=function(e,t){const r=new Map;for(let n=0;n<e.length;n++){const i=e[n],a=t(i);r.has(a)||r.set(a,i)}return Array.from(r.values())}},8919:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(1366);t.toNumber=function(e){return n.isSymbol(e)?NaN:Number(e)}},9181:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.isLength=function(e){return Number.isSafeInteger(e)&&e>=0}},9184:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});t.argumentsTag="[object Arguments]",t.arrayBufferTag="[object ArrayBuffer]",t.arrayTag="[object Array]",t.bigInt64ArrayTag="[object BigInt64Array]",t.bigUint64ArrayTag="[object BigUint64Array]",t.booleanTag="[object Boolean]",t.dataViewTag="[object DataView]",t.dateTag="[object Date]",t.errorTag="[object Error]",t.float32ArrayTag="[object Float32Array]",t.float64ArrayTag="[object Float64Array]",t.functionTag="[object Function]",t.int16ArrayTag="[object Int16Array]",t.int32ArrayTag="[object Int32Array]",t.int8ArrayTag="[object Int8Array]",t.mapTag="[object Map]",t.numberTag="[object Number]",t.objectTag="[object Object]",t.regexpTag="[object RegExp]",t.setTag="[object Set]",t.stringTag="[object String]",t.symbolTag="[object Symbol]",t.uint16ArrayTag="[object Uint16Array]",t.uint32ArrayTag="[object Uint32Array]",t.uint8ArrayTag="[object Uint8Array]",t.uint8ClampedArrayTag="[object Uint8ClampedArray]"},9242:(e,t,r)=>{"use strict";e.exports=r(2162)},9341:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(993),i=r(6502);t.isEqual=function(e,t){return n.isEqualWith(e,t,i.noop)}},9467:(e,t,r)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=r(3964),i=r(9184);t.cloneDeepWith=function(e,t){return n.cloneDeepWith(e,((r,a,o,l)=>{const c=t?.(r,a,o,l);if(null!=c)return c;if("object"==typeof e)switch(Object.prototype.toString.call(e)){case i.numberTag:case i.stringTag:case i.booleanTag:{const t=new e.constructor(e?.valueOf());return n.copyProperties(t,e),t}case i.argumentsTag:{const t={};return n.copyProperties(t,e),t.length=e.length,t[Symbol.iterator]=e[Symbol.iterator],t}default:return}}))}},9888:(e,t,r)=>{"use strict";e.exports=r(8493)}},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return n[e].call(r.exports,r,r.exports,a),r.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{"use strict";a.r(o),a.d(o,{Area:()=>mk,AreaChart:()=>GD,Bar:()=>cE,BarChart:()=>KT,Brush:()=>VA,CartesianAxis:()=>qj,CartesianGrid:()=>pS,Cell:()=>zg,ComposedChart:()=>tC,Cross:()=>ul,Curve:()=>il,Customized:()=>Vb,DefaultLegendContent:()=>Le,DefaultTooltipContent:()=>po,Dot:()=>Jb,ErrorBar:()=>TM,Funnel:()=>BC,FunnelChart:()=>WC,Global:()=>Oo,Label:()=>Db,LabelList:()=>Ub,Layer:()=>V,Legend:()=>oo,Line:()=>WS,LineChart:()=>LT,Pie:()=>MO,PieChart:()=>$T,PolarAngleAxis:()=>fw,PolarGrid:()=>Mx,PolarRadiusAxis:()=>Zx,Polygon:()=>Gb,Radar:()=>hP,RadarChart:()=>$D,RadialBar:()=>uA,RadialBarChart:()=>QD,Rectangle:()=>Yl,ReferenceArea:()=>Cj,ReferenceDot:()=>Ej,ReferenceLine:()=>vj,ResponsiveContainer:()=>Kg,Sankey:()=>UD,Scatter:()=>rM,ScatterChart:()=>qD,Sector:()=>tc,SunburstChart:()=>pC,Surface:()=>W,Symbols:()=>De,Text:()=>mb,Tooltip:()=>Dg,Trapezoid:()=>jw,Treemap:()=>hD,XAxis:()=>fM,YAxis:()=>bM,ZAxis:()=>Ck,getNiceTickValues:()=>Rp,useActiveTooltipDataPoints:()=>_O,useActiveTooltipLabel:()=>CO,useChartHeight:()=>Gi,useChartWidth:()=>Yi,useOffset:()=>IO,usePlotArea:()=>NO});var e={};a.r(e),a.d(e,{scaleBand:()=>hc,scaleDiverging:()=>sp,scaleDivergingLog:()=>up,scaleDivergingPow:()=>dp,scaleDivergingSqrt:()=>pp,scaleDivergingSymlog:()=>fp,scaleIdentity:()=>ru,scaleImplicit:()=>dc,scaleLinear:()=>tu,scaleLog:()=>fu,scaleOrdinal:()=>pc,scalePoint:()=>vc,scalePow:()=>xu,scaleQuantile:()=>Cu,scaleQuantize:()=>Iu,scaleRadial:()=>Pu,scaleSequential:()=>rp,scaleSequentialLog:()=>np,scaleSequentialPow:()=>ap,scaleSequentialQuantile:()=>lp,scaleSequentialSqrt:()=>op,scaleSequentialSymlog:()=>ip,scaleSqrt:()=>wu,scaleSymlog:()=>yu,scaleThreshold:()=>Nu,scaleTime:()=>Jd,scaleUtc:()=>Qd,tickFormat:()=>Qs});var t=a(5442);function r(e){var t,n,i="";if("string"==typeof e||"number"==typeof e)i+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(i&&(i+=" "),i+=n)}else for(n in e)e[n]&&(i&&(i+=" "),i+=n);return i}function n(){for(var e,t,n=0,i="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(i&&(i+=" "),i+=t);return i}var i=a(305),l=a.n(i),c=a(2751),s=e=>0===e?0:e>0?1:-1,u=e=>"number"==typeof e&&e!=+e,f=e=>"string"==typeof e&&e.indexOf("%")===e.length-1,d=e=>("number"==typeof e||e instanceof Number)&&!u(e),p=e=>d(e)||"string"==typeof e,h=0,y=e=>{var t=++h;return"".concat(e||"").concat(t)},v=function(e,t){var r,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!d(e)&&"string"!=typeof e)return n;if(f(e)){if(null==t)return n;var a=e.indexOf("%");r=t*parseFloat(e.slice(0,a))/100}else r=+e;return u(r)&&(r=n),i&&null!=t&&r>t&&(r=t),r},m=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;n<t;n++){if(r[e[n]])return!0;r[e[n]]=!0}return!1},g=(e,t)=>d(e)&&d(t)?r=>e+r*(t-e):()=>t;function b(e,t,r){return d(e)&&d(t)?e+r*(t-e):t}function x(e,t,r){if(e&&e.length)return e.find((e=>e&&("function"==typeof t?t(e):l()(e,t))===r))}var w=e=>{if(!e||!e.length)return null;for(var t=e.length,r=0,n=0,i=0,a=0,o=1/0,l=-1/0,c=0,s=0,u=0;u<t;u++)r+=c=e[u].cx||0,n+=s=e[u].cy||0,i+=c*s,a+=c*c,o=Math.min(o,c),l=Math.max(l,c);var f=t*a!=r*r?(t*i-r*n)/(t*a-r*r):0;return{xmin:o,xmax:l,a:f,b:(n-f*r)/t}},O=e=>null==e,P=e=>O(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1)),E=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"];function A(e){return"string"==typeof e&&E.includes(e)}var j=["points","pathLength"],S={svg:["viewBox","children"],polygon:j,polyline:j},k=(e,r)=>{if(!e||"function"==typeof e||"boolean"==typeof e)return null;var n=e;if((0,t.isValidElement)(e)&&(n=e.props),"object"!=typeof n&&"function"!=typeof n)return null;var i={};return Object.keys(n).forEach((e=>{A(e)&&(i[e]=r||(t=>n[e](n,t)))})),i},M=(e,t,r)=>{if(null===e||"object"!=typeof e&&"function"!=typeof e)return null;var n=null;return Object.keys(e).forEach((i=>{var a=e[i];A(i)&&"function"==typeof a&&(n||(n={}),n[i]=((e,t,r)=>n=>(e(t,r,n),null))(a,t,r))})),n},T=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"];function D(e){return"string"==typeof e&&T.includes(e)}function C(e){var t=Object.entries(e).filter((e=>{var[t]=e;return D(t)}));return Object.fromEntries(t)}var I=e=>"string"==typeof e?e:e?e.displayName||e.name||"Component":"",N=null,_=null,L=e=>{if(e===N&&Array.isArray(_))return _;var r=[];return t.Children.forEach(e,(e=>{O(e)||((0,c.isFragment)(e)?r=r.concat(L(e.props.children)):r.push(e))})),_=r,N=e,r};function R(e,t){var r=[],n=[];return n=Array.isArray(t)?t.map((e=>I(e))):[I(t)],L(e).forEach((e=>{var t=l()(e,"type.displayName")||l()(e,"type.name");-1!==n.indexOf(t)&&r.push(e)})),r}var K=e=>!e||"object"!=typeof e||!("clipDot"in e)||Boolean(e.clipDot),z=(e,r,n)=>{if(!e||"function"==typeof e||"boolean"==typeof e)return null;var i=e;if((0,t.isValidElement)(e)&&(i=e.props),"object"!=typeof i&&"function"!=typeof i)return null;var a={};return Object.keys(i).forEach((e=>{var t;((e,t,r,n)=>{var i;if("symbol"==typeof t||"number"==typeof t)return!0;var a=null!==(i=n&&(null==S?void 0:S[n]))&&void 0!==i?i:[],o=t.startsWith("data-"),l="function"!=typeof e&&(Boolean(n)&&a.includes(t)||D(t)),c=Boolean(r)&&A(t);return o||l||c})(null===(t=i)||void 0===t?void 0:t[e],e,r,n)&&(a[e]=i[e])})),a},B=["children","width","height","viewBox","className","style","title","desc"];function F(){return F=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},F.apply(null,arguments)}var W=(0,t.forwardRef)(((e,r)=>{var{children:i,width:a,height:o,viewBox:l,className:c,style:s,title:u,desc:f}=e,d=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,B),p=l||{width:a,height:o,x:0,y:0},h=n("recharts-surface",c);return t.createElement("svg",F({},z(d,!0,"svg"),{className:h,width:a,height:o,style:s,viewBox:"".concat(p.x," ").concat(p.y," ").concat(p.width," ").concat(p.height),ref:r}),t.createElement("title",null,u),t.createElement("desc",null,f),i)})),U=["children","className"];function X(){return X=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},X.apply(null,arguments)}var V=t.forwardRef(((e,r)=>{var{children:i,className:a}=e,o=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,U),l=n("recharts-layer",a);return t.createElement("g",X({className:l},z(o,!0),{ref:r}),i)})),$=a(6003),H=(0,t.createContext)(null);Math.abs,Math.atan2;const q=Math.cos,Y=(Math.max,Math.min,Math.sin),G=Math.sqrt,Z=Math.PI,J=2*Z;const Q={draw(e,t){const r=G(t/Z);e.moveTo(r,0),e.arc(0,0,r,0,J)}},ee={draw(e,t){const r=G(t/5)/2;e.moveTo(-3*r,-r),e.lineTo(-r,-r),e.lineTo(-r,-3*r),e.lineTo(r,-3*r),e.lineTo(r,-r),e.lineTo(3*r,-r),e.lineTo(3*r,r),e.lineTo(r,r),e.lineTo(r,3*r),e.lineTo(-r,3*r),e.lineTo(-r,r),e.lineTo(-3*r,r),e.closePath()}},te=G(1/3),re=2*te,ne={draw(e,t){const r=G(t/re),n=r*te;e.moveTo(0,-r),e.lineTo(n,0),e.lineTo(0,r),e.lineTo(-n,0),e.closePath()}},ie={draw(e,t){const r=G(t),n=-r/2;e.rect(n,n,r,r)}},ae=Y(Z/10)/Y(7*Z/10),oe=Y(J/10)*ae,le=-q(J/10)*ae,ce={draw(e,t){const r=G(.8908130915292852*t),n=oe*r,i=le*r;e.moveTo(0,-r),e.lineTo(n,i);for(let t=1;t<5;++t){const a=J*t/5,o=q(a),l=Y(a);e.lineTo(l*r,-o*r),e.lineTo(o*n-l*i,l*n+o*i)}e.closePath()}},se=G(3),ue={draw(e,t){const r=-G(t/(3*se));e.moveTo(0,2*r),e.lineTo(-se*r,-r),e.lineTo(se*r,-r),e.closePath()}},fe=-.5,de=G(3)/2,pe=1/G(12),he=3*(pe/2+1),ye={draw(e,t){const r=G(t/he),n=r/2,i=r*pe,a=n,o=r*pe+r,l=-a,c=o;e.moveTo(n,i),e.lineTo(a,o),e.lineTo(l,c),e.lineTo(fe*n-de*i,de*n+fe*i),e.lineTo(fe*a-de*o,de*a+fe*o),e.lineTo(fe*l-de*c,de*l+fe*c),e.lineTo(fe*n+de*i,fe*i-de*n),e.lineTo(fe*a+de*o,fe*o-de*a),e.lineTo(fe*l+de*c,fe*c-de*l),e.closePath()}};function ve(e){return function(){return e}}const me=Math.PI,ge=2*me,be=1e-6,xe=ge-be;function we(e){this._+=e[0];for(let t=1,r=e.length;t<r;++t)this._+=arguments[t]+e[t]}class Oe{constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==e?we:function(e){let t=Math.floor(e);if(!(t>=0))throw new Error(`invalid digits: ${e}`);if(t>15)return we;const r=10**t;return function(e){this._+=e[0];for(let t=1,n=e.length;t<n;++t)this._+=Math.round(arguments[t]*r)/r+e[t]}}(e)}moveTo(e,t){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+t}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,t){this._append`L${this._x1=+e},${this._y1=+t}`}quadraticCurveTo(e,t,r,n){this._append`Q${+e},${+t},${this._x1=+r},${this._y1=+n}`}bezierCurveTo(e,t,r,n,i,a){this._append`C${+e},${+t},${+r},${+n},${this._x1=+i},${this._y1=+a}`}arcTo(e,t,r,n,i){if(e=+e,t=+t,r=+r,n=+n,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=this._x1,o=this._y1,l=r-e,c=n-t,s=a-e,u=o-t,f=s*s+u*u;if(null===this._x1)this._append`M${this._x1=e},${this._y1=t}`;else if(f>be)if(Math.abs(u*l-c*s)>be&&i){let d=r-a,p=n-o,h=l*l+c*c,y=d*d+p*p,v=Math.sqrt(h),m=Math.sqrt(f),g=i*Math.tan((me-Math.acos((h+f-y)/(2*v*m)))/2),b=g/m,x=g/v;Math.abs(b-1)>be&&this._append`L${e+b*s},${t+b*u}`,this._append`A${i},${i},0,0,${+(u*d>s*p)},${this._x1=e+x*l},${this._y1=t+x*c}`}else this._append`L${this._x1=e},${this._y1=t}`;else;}arc(e,t,r,n,i,a){if(e=+e,t=+t,a=!!a,(r=+r)<0)throw new Error(`negative radius: ${r}`);let o=r*Math.cos(n),l=r*Math.sin(n),c=e+o,s=t+l,u=1^a,f=a?n-i:i-n;null===this._x1?this._append`M${c},${s}`:(Math.abs(this._x1-c)>be||Math.abs(this._y1-s)>be)&&this._append`L${c},${s}`,r&&(f<0&&(f=f%ge+ge),f>xe?this._append`A${r},${r},0,1,${u},${e-o},${t-l}A${r},${r},0,1,${u},${this._x1=c},${this._y1=s}`:f>be&&this._append`A${r},${r},0,${+(f>=me)},${u},${this._x1=e+r*Math.cos(i)},${this._y1=t+r*Math.sin(i)}`)}rect(e,t,r,n){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+t}h${r=+r}v${+n}h${-r}Z`}toString(){return this._}}function Pe(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(null==r)t=null;else{const e=Math.floor(r);if(!(e>=0))throw new RangeError(`invalid digits: ${r}`);t=e}return e},()=>new Oe(t)}G(3),G(3);var Ee=["type","size","sizeType"];function Ae(){return Ae=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Ae.apply(null,arguments)}function je(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Se(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?je(Object(r),!0).forEach((function(t){ke(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):je(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function ke(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Me={symbolCircle:Q,symbolCross:ee,symbolDiamond:ne,symbolSquare:ie,symbolStar:ce,symbolTriangle:ue,symbolWye:ye},Te=Math.PI/180,De=e=>{var r,i,{type:a="circle",size:o=64,sizeType:l="area"}=e,c=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,Ee),s=Se(Se({},c),{},{type:a,size:o,sizeType:l}),{className:u,cx:f,cy:d}=s,p=z(s,!0);return f===+f&&d===+d&&o===+o?t.createElement("path",Ae({},p,{className:n("recharts-symbols",u),transform:"translate(".concat(f,", ").concat(d,")"),d:(r=(e=>{var t="symbol".concat(P(e));return Me[t]||Q})(a),i=function(e,t){let r=null,n=Pe(i);function i(){let i;if(r||(r=i=n()),e.apply(this,arguments).draw(r,+t.apply(this,arguments)),i)return r=null,i+""||null}return e="function"==typeof e?e:ve(e||Q),t="function"==typeof t?t:ve(void 0===t?64:+t),i.type=function(t){return arguments.length?(e="function"==typeof t?t:ve(t),i):e},i.size=function(e){return arguments.length?(t="function"==typeof e?e:ve(+e),i):t},i.context=function(e){return arguments.length?(r=null==e?null:e,i):r},i}().type(r).size(((e,t,r)=>{if("area"===t)return e;switch(r){case"cross":return 5*e*e/9;case"diamond":return.5*e*e/Math.sqrt(3);case"square":return e*e;case"star":var n=18*Te;return 1.25*e*e*(Math.tan(n)-Math.tan(2*n)*Math.tan(n)**2);case"triangle":return Math.sqrt(3)*e*e/4;case"wye":return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}})(o,l,a)),i())})):null};function Ce(){return Ce=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Ce.apply(null,arguments)}function Ie(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ne(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}De.registerSymbol=(e,t)=>{Me["symbol".concat(P(e))]=t};var _e=32;class Le extends t.PureComponent{renderIcon(e,r){var{inactiveColor:n}=this.props,i=16,a=_e/6,o=_e/3,l=e.inactive?n:e.color,c=null!=r?r:e.type;if("none"===c)return null;if("plainline"===c)return t.createElement("line",{strokeWidth:4,fill:"none",stroke:l,strokeDasharray:e.payload.strokeDasharray,x1:0,y1:i,x2:_e,y2:i,className:"recharts-legend-icon"});if("line"===c)return t.createElement("path",{strokeWidth:4,fill:"none",stroke:l,d:"M0,".concat(i,"h").concat(o,"\n            A").concat(a,",").concat(a,",0,1,1,").concat(2*o,",").concat(i,"\n            H").concat(_e,"M").concat(2*o,",").concat(i,"\n            A").concat(a,",").concat(a,",0,1,1,").concat(o,",").concat(i),className:"recharts-legend-icon"});if("rect"===c)return t.createElement("path",{stroke:"none",fill:l,d:"M0,".concat(4,"h").concat(_e,"v").concat(24,"h").concat(-32,"z"),className:"recharts-legend-icon"});if(t.isValidElement(e.legendIcon)){var s=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ie(Object(r),!0).forEach((function(t){Ne(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ie(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},e);return delete s.legendIcon,t.cloneElement(e.legendIcon,s)}return t.createElement(De,{fill:l,cx:i,cy:i,size:_e,sizeType:"diameter",type:c})}renderItems(){var{payload:e,iconSize:r,layout:i,formatter:a,inactiveColor:o,iconType:l}=this.props,c={x:0,y:0,width:_e,height:_e},s={display:"horizontal"===i?"inline-block":"block",marginRight:10},u={display:"inline-block",verticalAlign:"middle",marginRight:4};return e.map(((e,i)=>{var f=e.formatter||a,d=n({"recharts-legend-item":!0,["legend-item-".concat(i)]:!0,inactive:e.inactive});if("none"===e.type)return null;var p=e.inactive?o:e.color,h=f?f(e.value,e,i):e.value;return t.createElement("li",Ce({className:d,style:s,key:"legend-item-".concat(i)},M(this.props,e,i)),t.createElement(W,{width:r,height:r,viewBox:c,style:u,"aria-label":"".concat(h," legend icon")},this.renderIcon(e,l)),t.createElement("span",{className:"recharts-legend-item-text",style:{color:p}},h))}))}render(){var{payload:e,layout:r,align:n}=this.props;if(!e||!e.length)return null;var i={padding:0,margin:0,textAlign:"horizontal"===r?n:"left"};return t.createElement("ul",{className:"recharts-default-legend",style:i},this.renderItems())}}Ne(Le,"displayName","Legend"),Ne(Le,"defaultProps",{align:"center",iconSize:14,inactiveColor:"#ccc",layout:"horizontal",verticalAlign:"middle"});var Re=a(1081),Ke=a.n(Re);function ze(e,t,r){return!0===t?Ke()(e,r):"function"==typeof t?Ke()(e,t):e}var Be=a(9242),Fe=(0,t.createContext)(null),We=e=>e,Ue=()=>{var e=(0,t.useContext)(Fe);return e?e.store.dispatch:We},Xe=()=>{},Ve=()=>Xe,$e=(e,t)=>e===t;function He(e){var r=(0,t.useContext)(Fe);return(0,Be.useSyncExternalStoreWithSelector)(r?r.subscription.addNestedSub:Ve,r?r.store.getState:Xe,r?r.store.getState:Xe,r?e:Xe,$e)}function qe(e,t="expected a function, instead received "+typeof e){if("function"!=typeof e)throw new TypeError(t)}var Ye=e=>Array.isArray(e)?e:[e];function Ge(e){const t=Array.isArray(e[0])?e[0]:e;return function(e,t="expected all items to be functions, instead received the following types: "){if(!e.every((e=>"function"==typeof e))){const r=e.map((e=>"function"==typeof e?`function ${e.name||"unnamed"}()`:typeof e)).join(", ");throw new TypeError(`${t}[${r}]`)}}(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}Symbol(),Object.getPrototypeOf({});var Ze="undefined"!=typeof WeakRef?WeakRef:class{constructor(e){this.value=e}deref(){return this.value}};function Je(e,t={}){let r={s:0,v:void 0,o:null,p:null};const{resultEqualityCheck:n}=t;let i,a=0;function o(){let t=r;const{length:o}=arguments;for(let e=0,r=o;e<r;e++){const r=arguments[e];if("function"==typeof r||"object"==typeof r&&null!==r){let e=t.o;null===e&&(t.o=e=new WeakMap);const n=e.get(r);void 0===n?(t={s:0,v:void 0,o:null,p:null},e.set(r,t)):t=n}else{let e=t.p;null===e&&(t.p=e=new Map);const n=e.get(r);void 0===n?(t={s:0,v:void 0,o:null,p:null},e.set(r,t)):t=n}}const l=t;let c;if(1===t.s)c=t.v;else if(c=e.apply(null,arguments),a++,n){const e=i?.deref?.()??i;null!=e&&n(e,c)&&(c=e,0!==a&&a--);i="object"==typeof c&&null!==c||"function"==typeof c?new Ze(c):c}return l.s=1,l.v=c,c}return o.clearCache=()=>{r={s:0,v:void 0,o:null,p:null},o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function Qe(e,...t){const r="function"==typeof e?{memoize:e,memoizeOptions:t}:e,n=(...e)=>{let t,n=0,i=0,a={},o=e.pop();"object"==typeof o&&(a=o,o=e.pop()),qe(o,`createSelector expects an output function after the inputs, but received: [${typeof o}]`);const l={...r,...a},{memoize:c,memoizeOptions:s=[],argsMemoize:u=Je,argsMemoizeOptions:f=[],devModeChecks:d={}}=l,p=Ye(s),h=Ye(f),y=Ge(e),v=c((function(){return n++,o.apply(null,arguments)}),...p);const m=u((function(){i++;const e=function(e,t){const r=[],{length:n}=e;for(let i=0;i<n;i++)r.push(e[i].apply(null,t));return r}(y,arguments);return t=v.apply(null,e),t}),...h);return Object.assign(m,{resultFunc:o,memoizedResultFunc:v,dependencies:y,dependencyRecomputations:()=>i,resetDependencyRecomputations:()=>{i=0},lastResult:()=>t,recomputations:()=>n,resetRecomputations:()=>{n=0},memoize:c,argsMemoize:u})};return Object.assign(n,{withTypes:()=>n}),n}var et=Qe(Je),tt=Object.assign(((e,t=et)=>{!function(e,t="expected an object, instead received "+typeof e){if("object"!=typeof e)throw new TypeError(t)}(e,"createStructuredSelector expects first argument to be an object where each property is a selector, instead received a "+typeof e);const r=Object.keys(e),n=t(r.map((t=>e[t])),((...e)=>e.reduce(((e,t,n)=>(e[r[n]]=t,e)),{})));return n}),{withTypes:()=>tt}),rt=a(184),nt=a.n(rt),it=e=>e.legend.settings,at=et([e=>e.legend.payload,it],((e,t)=>{var{itemSorter:r}=t,n=e.flat(1);return r?nt()(n,r):n}));var ot=1;function lt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],[r,n]=(0,t.useState)({height:0,left:0,top:0,width:0}),i=(0,t.useCallback)((e=>{if(null!=e){var t=e.getBoundingClientRect(),i={height:t.height,left:t.left,top:t.top,width:t.width};(Math.abs(i.height-r.height)>ot||Math.abs(i.left-r.left)>ot||Math.abs(i.top-r.top)>ot||Math.abs(i.width-r.width)>ot)&&n({height:i.height,left:i.left,top:i.top,width:i.width})}}),[r.width,r.height,r.top,r.left,...e]);return[r,i]}function ct(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];throw Error("[Immer] minified error nr: "+e+(r.length?" "+r.map((function(e){return"'"+e+"'"})).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function st(e){return!!e&&!!e[Jt]}function ut(e){var t;return!!e&&(function(e){if(!e||"object"!=typeof e)return!1;var t=Object.getPrototypeOf(e);if(null===t)return!0;var r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object||"function"==typeof r&&Function.toString.call(r)===Qt}(e)||Array.isArray(e)||!!e[Zt]||!!(null===(t=e.constructor)||void 0===t?void 0:t[Zt])||mt(e)||gt(e))}function ft(e,t,r){void 0===r&&(r=!1),0===dt(e)?(r?Object.keys:er)(e).forEach((function(n){r&&"symbol"==typeof n||t(n,e[n],e)})):e.forEach((function(r,n){return t(n,r,e)}))}function dt(e){var t=e[Jt];return t?t.i>3?t.i-4:t.i:Array.isArray(e)?1:mt(e)?2:gt(e)?3:0}function pt(e,t){return 2===dt(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function ht(e,t){return 2===dt(e)?e.get(t):e[t]}function yt(e,t,r){var n=dt(e);2===n?e.set(t,r):3===n?e.add(r):e[t]=r}function vt(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function mt(e){return Ht&&e instanceof Map}function gt(e){return qt&&e instanceof Set}function bt(e){return e.o||e.t}function xt(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=tr(e);delete t[Jt];for(var r=er(t),n=0;n<r.length;n++){var i=r[n],a=t[i];!1===a.writable&&(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(t[i]={configurable:!0,writable:!0,enumerable:a.enumerable,value:e[i]})}return Object.create(Object.getPrototypeOf(e),t)}function wt(e,t){return void 0===t&&(t=!1),Pt(e)||st(e)||!ut(e)||(dt(e)>1&&(e.set=e.add=e.clear=e.delete=Ot),Object.freeze(e),t&&ft(e,(function(e,t){return wt(t,!0)}),!0)),e}function Ot(){ct(2)}function Pt(e){return null==e||"object"!=typeof e||Object.isFrozen(e)}function Et(e){var t=rr[e];return t||ct(18,e),t}function At(e,t){rr[e]||(rr[e]=t)}function jt(){return Vt}function St(e,t){t&&(Et("Patches"),e.u=[],e.s=[],e.v=t)}function kt(e){Mt(e),e.p.forEach(Dt),e.p=null}function Mt(e){e===Vt&&(Vt=e.l)}function Tt(e){return Vt={p:[],l:Vt,h:e,m:!0,_:0}}function Dt(e){var t=e[Jt];0===t.i||1===t.i?t.j():t.g=!0}function Ct(e,t){t._=t.p.length;var r=t.p[0],n=void 0!==e&&e!==r;return t.h.O||Et("ES5").S(t,e,n),n?(r[Jt].P&&(kt(t),ct(4)),ut(e)&&(e=It(t,e),t.l||_t(t,e)),t.u&&Et("Patches").M(r[Jt].t,e,t.u,t.s)):e=It(t,r,[]),kt(t),t.u&&t.v(t.u,t.s),e!==Gt?e:void 0}function It(e,t,r){if(Pt(t))return t;var n=t[Jt];if(!n)return ft(t,(function(i,a){return Nt(e,n,t,i,a,r)}),!0),t;if(n.A!==e)return t;if(!n.P)return _t(e,n.t,!0),n.t;if(!n.I){n.I=!0,n.A._--;var i=4===n.i||5===n.i?n.o=xt(n.k):n.o,a=i,o=!1;3===n.i&&(a=new Set(i),i.clear(),o=!0),ft(a,(function(t,a){return Nt(e,n,i,t,a,r,o)})),_t(e,i,!1),r&&e.u&&Et("Patches").N(n,r,e.u,e.s)}return n.o}function Nt(e,t,r,n,i,a,o){if(st(i)){var l=It(e,i,a&&t&&3!==t.i&&!pt(t.R,n)?a.concat(n):void 0);if(yt(r,n,l),!st(l))return;e.m=!1}else o&&r.add(i);if(ut(i)&&!Pt(i)){if(!e.h.D&&e._<1)return;It(e,i),t&&t.A.l||_t(e,i)}}function _t(e,t,r){void 0===r&&(r=!1),!e.l&&e.h.D&&e.m&&wt(t,r)}function Lt(e,t){var r=e[Jt];return(r?bt(r):e)[t]}function Rt(e,t){if(t in e)for(var r=Object.getPrototypeOf(e);r;){var n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Object.getPrototypeOf(r)}}function Kt(e){e.P||(e.P=!0,e.l&&Kt(e.l))}function zt(e){e.o||(e.o=xt(e.t))}function Bt(e,t,r){var n=mt(t)?Et("MapSet").F(t,r):gt(t)?Et("MapSet").T(t,r):e.O?function(e,t){var r=Array.isArray(e),n={i:r?1:0,A:t?t.A:jt(),P:!1,I:!1,R:{},l:t,t:e,k:null,o:null,j:null,C:!1},i=n,a=nr;r&&(i=[n],a=ir);var o=Proxy.revocable(i,a),l=o.revoke,c=o.proxy;return n.k=c,n.j=l,c}(t,r):Et("ES5").J(t,r);return(r?r.A:jt()).p.push(n),n}function Ft(e){return st(e)||ct(22,e),function e(t){if(!ut(t))return t;var r,n=t[Jt],i=dt(t);if(n){if(!n.P&&(n.i<4||!Et("ES5").K(n)))return n.t;n.I=!0,r=Wt(t,i),n.I=!1}else r=Wt(t,i);return ft(r,(function(t,i){n&&ht(n.t,t)===i||yt(r,t,e(i))})),3===i?new Set(r):r}(e)}function Wt(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return xt(e)}function Ut(){function e(e,t){var r=i[e];return r?r.enumerable=t:i[e]=r={configurable:!0,enumerable:t,get:function(){var t=this[Jt];return nr.get(t,e)},set:function(t){var r=this[Jt];nr.set(r,e,t)}},r}function t(e){for(var t=e.length-1;t>=0;t--){var i=e[t][Jt];if(!i.P)switch(i.i){case 5:n(i)&&Kt(i);break;case 4:r(i)&&Kt(i)}}}function r(e){for(var t=e.t,r=e.k,n=er(r),i=n.length-1;i>=0;i--){var a=n[i];if(a!==Jt){var o=t[a];if(void 0===o&&!pt(t,a))return!0;var l=r[a],c=l&&l[Jt];if(c?c.t!==o:!vt(l,o))return!0}}var s=!!t[Jt];return n.length!==er(t).length+(s?0:1)}function n(e){var t=e.k;if(t.length!==e.t.length)return!0;var r=Object.getOwnPropertyDescriptor(t,t.length-1);if(r&&!r.get)return!0;for(var n=0;n<t.length;n++)if(!t.hasOwnProperty(n))return!0;return!1}var i={};At("ES5",{J:function(t,r){var n=Array.isArray(t),i=function(t,r){if(t){for(var n=Array(r.length),i=0;i<r.length;i++)Object.defineProperty(n,""+i,e(i,!0));return n}var a=tr(r);delete a[Jt];for(var o=er(a),l=0;l<o.length;l++){var c=o[l];a[c]=e(c,t||!!a[c].enumerable)}return Object.create(Object.getPrototypeOf(r),a)}(n,t),a={i:n?5:4,A:r?r.A:jt(),P:!1,I:!1,R:{},l:r,t,k:i,o:null,g:!1,C:!1};return Object.defineProperty(i,Jt,{value:a,writable:!0}),i},S:function(e,r,i){i?st(r)&&r[Jt].A===e&&t(e.p):(e.u&&function e(t){if(t&&"object"==typeof t){var r=t[Jt];if(r){var i=r.t,a=r.k,o=r.R,l=r.i;if(4===l)ft(a,(function(t){t!==Jt&&(void 0!==i[t]||pt(i,t)?o[t]||e(a[t]):(o[t]=!0,Kt(r)))})),ft(i,(function(e){void 0!==a[e]||pt(a,e)||(o[e]=!1,Kt(r))}));else if(5===l){if(n(r)&&(Kt(r),o.length=!0),a.length<i.length)for(var c=a.length;c<i.length;c++)o[c]=!1;else for(var s=i.length;s<a.length;s++)o[s]=!0;for(var u=Math.min(a.length,i.length),f=0;f<u;f++)a.hasOwnProperty(f)||(o[f]=!0),void 0===o[f]&&e(a[f])}}}}(e.p[0]),t(e.p))},K:function(e){return 4===e.i?r(e):n(e)}})}var Xt,Vt,$t="undefined"!=typeof Symbol&&"symbol"==typeof Symbol("x"),Ht="undefined"!=typeof Map,qt="undefined"!=typeof Set,Yt="undefined"!=typeof Proxy&&void 0!==Proxy.revocable&&"undefined"!=typeof Reflect,Gt=$t?Symbol.for("immer-nothing"):((Xt={})["immer-nothing"]=!0,Xt),Zt=$t?Symbol.for("immer-draftable"):"__$immer_draftable",Jt=$t?Symbol.for("immer-state"):"__$immer_state",Qt=("undefined"!=typeof Symbol&&Symbol.iterator,""+Object.prototype.constructor),er="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,tr=Object.getOwnPropertyDescriptors||function(e){var t={};return er(e).forEach((function(r){t[r]=Object.getOwnPropertyDescriptor(e,r)})),t},rr={},nr={get:function(e,t){if(t===Jt)return e;var r=bt(e);if(!pt(r,t))return function(e,t,r){var n,i=Rt(t,r);return i?"value"in i?i.value:null===(n=i.get)||void 0===n?void 0:n.call(e.k):void 0}(e,r,t);var n=r[t];return e.I||!ut(n)?n:n===Lt(e.t,t)?(zt(e),e.o[t]=Bt(e.A.h,n,e)):n},has:function(e,t){return t in bt(e)},ownKeys:function(e){return Reflect.ownKeys(bt(e))},set:function(e,t,r){var n=Rt(bt(e),t);if(null==n?void 0:n.set)return n.set.call(e.k,r),!0;if(!e.P){var i=Lt(bt(e),t),a=null==i?void 0:i[Jt];if(a&&a.t===r)return e.o[t]=r,e.R[t]=!1,!0;if(vt(r,i)&&(void 0!==r||pt(e.t,t)))return!0;zt(e),Kt(e)}return e.o[t]===r&&(void 0!==r||t in e.o)||Number.isNaN(r)&&Number.isNaN(e.o[t])||(e.o[t]=r,e.R[t]=!0),!0},deleteProperty:function(e,t){return void 0!==Lt(e.t,t)||t in e.t?(e.R[t]=!1,zt(e),Kt(e)):delete e.R[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var r=bt(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n?{writable:!0,configurable:1!==e.i||"length"!==t,enumerable:n.enumerable,value:r[t]}:n},defineProperty:function(){ct(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){ct(12)}},ir={};ft(nr,(function(e,t){ir[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),ir.deleteProperty=function(e,t){return ir.set.call(this,e,t,void 0)},ir.set=function(e,t,r){return nr.set.call(this,e[0],t,r,e[0])};var ar=function(){function e(e){var t=this;this.O=Yt,this.D=!0,this.produce=function(e,r,n){if("function"==typeof e&&"function"!=typeof r){var i=r;r=e;var a=t;return function(e){var t=this;void 0===e&&(e=i);for(var n=arguments.length,o=Array(n>1?n-1:0),l=1;l<n;l++)o[l-1]=arguments[l];return a.produce(e,(function(e){var n;return(n=r).call.apply(n,[t,e].concat(o))}))}}var o;if("function"!=typeof r&&ct(6),void 0!==n&&"function"!=typeof n&&ct(7),ut(e)){var l=Tt(t),c=Bt(t,e,void 0),s=!0;try{o=r(c),s=!1}finally{s?kt(l):Mt(l)}return"undefined"!=typeof Promise&&o instanceof Promise?o.then((function(e){return St(l,n),Ct(e,l)}),(function(e){throw kt(l),e})):(St(l,n),Ct(o,l))}if(!e||"object"!=typeof e){if(void 0===(o=r(e))&&(o=e),o===Gt&&(o=void 0),t.D&&wt(o,!0),n){var u=[],f=[];Et("Patches").M(e,o,u,f),n(u,f)}return o}ct(21,e)},this.produceWithPatches=function(e,r){if("function"==typeof e)return function(r){for(var n=arguments.length,i=Array(n>1?n-1:0),a=1;a<n;a++)i[a-1]=arguments[a];return t.produceWithPatches(r,(function(t){return e.apply(void 0,[t].concat(i))}))};var n,i,a=t.produce(e,r,(function(e,t){n=e,i=t}));return"undefined"!=typeof Promise&&a instanceof Promise?a.then((function(e){return[e,n,i]})):[a,n,i]},"boolean"==typeof(null==e?void 0:e.useProxies)&&this.setUseProxies(e.useProxies),"boolean"==typeof(null==e?void 0:e.autoFreeze)&&this.setAutoFreeze(e.autoFreeze)}var t=e.prototype;return t.createDraft=function(e){ut(e)||ct(8),st(e)&&(e=Ft(e));var t=Tt(this),r=Bt(this,e,void 0);return r[Jt].C=!0,Mt(t),r},t.finishDraft=function(e,t){var r=(e&&e[Jt]).A;return St(r,t),Ct(void 0,r)},t.setAutoFreeze=function(e){this.D=e},t.setUseProxies=function(e){e&&!Yt&&ct(20),this.O=e},t.applyPatches=function(e,t){var r;for(r=t.length-1;r>=0;r--){var n=t[r];if(0===n.path.length&&"replace"===n.op){e=n.value;break}}r>-1&&(t=t.slice(r+1));var i=Et("Patches").$;return st(e)?i(e,t):this.produce(e,(function(e){return i(e,t)}))},e}(),or=new ar,lr=or.produce;or.produceWithPatches.bind(or),or.setAutoFreeze.bind(or),or.setUseProxies.bind(or),or.applyPatches.bind(or),or.createDraft.bind(or),or.finishDraft.bind(or);const cr=lr;function sr(e){return sr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sr(e)}function ur(e){var t=function(e,t){if("object"!=sr(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=sr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==sr(t)?t:t+""}function fr(e,t,r){return(t=ur(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dr(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function pr(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?dr(Object(r),!0).forEach((function(t){fr(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):dr(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function hr(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}var yr="function"==typeof Symbol&&Symbol.observable||"@@observable",vr=function(){return Math.random().toString(36).substring(7).split("").join(".")},mr={INIT:"@@redux/INIT"+vr(),REPLACE:"@@redux/REPLACE"+vr(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+vr()}};function gr(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function br(e,t,r){var n;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(hr(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(hr(1));return r(br)(e,t)}if("function"!=typeof e)throw new Error(hr(2));var i=e,a=t,o=[],l=o,c=!1;function s(){l===o&&(l=o.slice())}function u(){if(c)throw new Error(hr(3));return a}function f(e){if("function"!=typeof e)throw new Error(hr(4));if(c)throw new Error(hr(5));var t=!0;return s(),l.push(e),function(){if(t){if(c)throw new Error(hr(6));t=!1,s();var r=l.indexOf(e);l.splice(r,1),o=null}}}function d(e){if(!gr(e))throw new Error(hr(7));if(void 0===e.type)throw new Error(hr(8));if(c)throw new Error(hr(9));try{c=!0,a=i(a,e)}finally{c=!1}for(var t=o=l,r=0;r<t.length;r++){(0,t[r])()}return e}return d({type:mr.INIT}),(n={dispatch:d,subscribe:f,getState:u,replaceReducer:function(e){if("function"!=typeof e)throw new Error(hr(10));i=e,d({type:mr.REPLACE})}})[yr]=function(){var e,t=f;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(hr(11));function r(){e.next&&e.next(u())}return r(),{unsubscribe:t(r)}}})[yr]=function(){return this},e},n}function xr(e){for(var t=Object.keys(e),r={},n=0;n<t.length;n++){var i=t[n];0,"function"==typeof e[i]&&(r[i]=e[i])}var a,o=Object.keys(r);try{!function(e){Object.keys(e).forEach((function(t){var r=e[t];if(void 0===r(void 0,{type:mr.INIT}))throw new Error(hr(12));if(void 0===r(void 0,{type:mr.PROBE_UNKNOWN_ACTION()}))throw new Error(hr(13))}))}(r)}catch(e){a=e}return function(e,t){if(void 0===e&&(e={}),a)throw a;for(var n=!1,i={},l=0;l<o.length;l++){var c=o[l],s=r[c],u=e[c],f=s(u,t);if(void 0===f){t&&t.type;throw new Error(hr(14))}i[c]=f,n=n||f!==u}return(n=n||o.length!==Object.keys(e).length)?i:e}}function wr(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function Or(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return function(e){return function(){var r=e.apply(void 0,arguments),n=function(){throw new Error(hr(15))},i={getState:r.getState,dispatch:function(){return n.apply(void 0,arguments)}},a=t.map((function(e){return e(i)}));return n=wr.apply(void 0,a)(r.dispatch),pr(pr({},r),{},{dispatch:n})}}}function Pr(e){return function(t){var r=t.dispatch,n=t.getState;return function(t){return function(i){return"function"==typeof i?i(r,n,e):t(i)}}}}var Er=Pr();Er.withExtraArgument=Pr;const Ar=Er;var jr,Sr=(jr=function(e,t){return jr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},jr(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}jr(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),kr=function(e,t){var r,n,i,a,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(a){return function(l){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,n=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],n=0}finally{r=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,l])}}},Mr=function(e,t){for(var r=0,n=t.length,i=e.length;r<n;r++,i++)e[i]=t[r];return e},Tr=Object.defineProperty,Dr=Object.defineProperties,Cr=Object.getOwnPropertyDescriptors,Ir=Object.getOwnPropertySymbols,Nr=Object.prototype.hasOwnProperty,_r=Object.prototype.propertyIsEnumerable,Lr=function(e,t,r){return t in e?Tr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r},Rr=function(e,t){for(var r in t||(t={}))Nr.call(t,r)&&Lr(e,r,t[r]);if(Ir)for(var n=0,i=Ir(t);n<i.length;n++){r=i[n];_r.call(t,r)&&Lr(e,r,t[r])}return e},Kr=function(e,t){return Dr(e,Cr(t))},zr=function(e,t,r){return new Promise((function(n,i){var a=function(e){try{l(r.next(e))}catch(e){i(e)}},o=function(e){try{l(r.throw(e))}catch(e){i(e)}},l=function(e){return e.done?n(e.value):Promise.resolve(e.value).then(a,o)};l((r=r.apply(e,t)).next())}))},Br="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?wr:wr.apply(null,arguments)};"undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__;function Fr(e){if("object"!=typeof e||null===e)return!1;var t=Object.getPrototypeOf(e);if(null===t)return!0;for(var r=t;null!==Object.getPrototypeOf(r);)r=Object.getPrototypeOf(r);return t===r}function Wr(e,t){function r(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];if(t){var i=t.apply(void 0,r);if(!i)throw new Error("prepareAction did not return an object");return Rr(Rr({type:e,payload:i.payload},"meta"in i&&{meta:i.meta}),"error"in i&&{error:i.error})}return{type:e,payload:r[0]}}return r.toString=function(){return""+e},r.type=e,r.match=function(t){return t.type===e},r}function Ur(e){return Fr(e)&&"type"in e}var Xr=function(e){function t(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i=e.apply(this,r)||this;return Object.setPrototypeOf(i,t.prototype),i}return Sr(t,e),Object.defineProperty(t,Symbol.species,{get:function(){return t},enumerable:!1,configurable:!0}),t.prototype.concat=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return e.prototype.concat.apply(this,t)},t.prototype.prepend=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return 1===e.length&&Array.isArray(e[0])?new(t.bind.apply(t,Mr([void 0],e[0].concat(this)))):new(t.bind.apply(t,Mr([void 0],e.concat(this))))},t}(Array),Vr=function(e){function t(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i=e.apply(this,r)||this;return Object.setPrototypeOf(i,t.prototype),i}return Sr(t,e),Object.defineProperty(t,Symbol.species,{get:function(){return t},enumerable:!1,configurable:!0}),t.prototype.concat=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return e.prototype.concat.apply(this,t)},t.prototype.prepend=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return 1===e.length&&Array.isArray(e[0])?new(t.bind.apply(t,Mr([void 0],e[0].concat(this)))):new(t.bind.apply(t,Mr([void 0],e.concat(this))))},t}(Array);function $r(e){return ut(e)?cr(e,(function(){})):e}function Hr(){return function(e){return function(e){void 0===e&&(e={});var t=e.thunk,r=void 0===t||t,n=(e.immutableCheck,e.serializableCheck,e.actionCreatorCheck,new Xr);r&&(!function(e){return"boolean"==typeof e}(r)?n.push(Ar.withExtraArgument(r.extraArgument)):n.push(Ar));0;return n}(e)}}function qr(e){var t,r=Hr(),n=e||{},i=n.reducer,a=void 0===i?void 0:i,o=n.middleware,l=void 0===o?r():o,c=n.devTools,s=void 0===c||c,u=n.preloadedState,f=void 0===u?void 0:u,d=n.enhancers,p=void 0===d?void 0:d;if("function"==typeof a)t=a;else{if(!Fr(a))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');t=xr(a)}var h=l;"function"==typeof h&&(h=h(r));var y=Or.apply(void 0,h),v=wr;s&&(v=Br(Rr({trace:!1},"object"==typeof s&&s)));var m=new Vr(y),g=m;return Array.isArray(p)?g=Mr([y],p):"function"==typeof p&&(g=p(m)),br(t,f,v.apply(void 0,g))}function Yr(e){var t,r={},n=[],i={addCase:function(e,t){var n="string"==typeof e?e:e.type;if(!n)throw new Error("`builder.addCase` cannot be called with an empty action type");if(n in r)throw new Error("`builder.addCase` cannot be called with two reducers for the same action type");return r[n]=t,i},addMatcher:function(e,t){return n.push({matcher:e,reducer:t}),i},addDefaultCase:function(e){return t=e,i}};return e(i),[r,n,t]}function Gr(e){var t=e.name;if(!t)throw new Error("`name` is a required option for createSlice");var r,n="function"==typeof e.initialState?e.initialState:$r(e.initialState),i=e.reducers||{},a=Object.keys(i),o={},l={},c={};function s(){var t="function"==typeof e.extraReducers?Yr(e.extraReducers):[e.extraReducers],r=t[0],i=void 0===r?{}:r,a=t[1],o=void 0===a?[]:a,c=t[2],s=void 0===c?void 0:c,u=Rr(Rr({},i),l);return function(e,t,r,n){void 0===r&&(r=[]);var i,a="function"==typeof t?Yr(t):[t,r,n],o=a[0],l=a[1],c=a[2];if(function(e){return"function"==typeof e}(e))i=function(){return $r(e())};else{var s=$r(e);i=function(){return s}}function u(e,t){void 0===e&&(e=i());var r=Mr([o[t.type]],l.filter((function(e){return(0,e.matcher)(t)})).map((function(e){return e.reducer})));return 0===r.filter((function(e){return!!e})).length&&(r=[c]),r.reduce((function(e,r){if(r){var n;if(st(e))return void 0===(n=r(e,t))?e:n;if(ut(e))return cr(e,(function(e){return r(e,t)}));if(void 0===(n=r(e,t))){if(null===e)return e;throw Error("A case reducer on a non-draftable value must not return undefined")}return n}return e}),e)}return u.getInitialState=i,u}(n,(function(e){for(var t in u)e.addCase(t,u[t]);for(var r=0,n=o;r<n.length;r++){var i=n[r];e.addMatcher(i.matcher,i.reducer)}s&&e.addDefaultCase(s)}))}return a.forEach((function(e){var r,n,a=i[e],s=function(e,t){return e+"/"+t}(t,e);"reducer"in a?(r=a.reducer,n=a.prepare):r=a,o[e]=r,l[s]=r,c[e]=n?Wr(s,n):Wr(s)})),{name:t,reducer:function(e,t){return r||(r=s()),r(e,t)},actions:c,caseReducers:o,getInitialState:function(){return r||(r=s()),r.getInitialState()}}}var Zr=function(e){void 0===e&&(e=21);for(var t="",r=e;r--;)t+="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW"[64*Math.random()|0];return t},Jr=["name","message","stack","code"],Qr=function(e,t){this.payload=e,this.meta=t},en=function(e,t){this.payload=e,this.meta=t},tn=function(e){if("object"==typeof e&&null!==e){for(var t={},r=0,n=Jr;r<n.length;r++){var i=n[r];"string"==typeof e[i]&&(t[i]=e[i])}return t}return{message:String(e)}};!function(){function e(e,t,r){var n=Wr(e+"/fulfilled",(function(e,t,r,n){return{payload:e,meta:Kr(Rr({},n||{}),{arg:r,requestId:t,requestStatus:"fulfilled"})}})),i=Wr(e+"/pending",(function(e,t,r){return{payload:void 0,meta:Kr(Rr({},r||{}),{arg:t,requestId:e,requestStatus:"pending"})}})),a=Wr(e+"/rejected",(function(e,t,n,i,a){return{payload:i,error:(r&&r.serializeError||tn)(e||"Rejected"),meta:Kr(Rr({},a||{}),{arg:n,requestId:t,rejectedWithValue:!!i,requestStatus:"rejected",aborted:"AbortError"===(null==e?void 0:e.name),condition:"ConditionError"===(null==e?void 0:e.name)})}})),o="undefined"!=typeof AbortController?AbortController:function(){function e(){this.signal={aborted:!1,addEventListener:function(){},dispatchEvent:function(){return!1},onabort:function(){},removeEventListener:function(){},reason:void 0,throwIfAborted:function(){}}}return e.prototype.abort=function(){0},e}();return Object.assign((function(e){return function(l,c,s){var u,f=(null==r?void 0:r.idGenerator)?r.idGenerator(e):Zr(),d=new o;function p(e){u=e,d.abort()}var h=function(){return zr(this,null,(function(){var o,h,y,v,m,g;return kr(this,(function(b){switch(b.label){case 0:return b.trys.push([0,4,,5]),function(e){return null!==e&&"object"==typeof e&&"function"==typeof e.then}(v=null==(o=null==r?void 0:r.condition)?void 0:o.call(r,e,{getState:c,extra:s}))?[4,v]:[3,2];case 1:v=b.sent(),b.label=2;case 2:if(!1===v||d.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};return m=new Promise((function(e,t){return d.signal.addEventListener("abort",(function(){return t({name:"AbortError",message:u||"Aborted"})}))})),l(i(f,e,null==(h=null==r?void 0:r.getPendingMeta)?void 0:h.call(r,{requestId:f,arg:e},{getState:c,extra:s}))),[4,Promise.race([m,Promise.resolve(t(e,{dispatch:l,getState:c,extra:s,requestId:f,signal:d.signal,abort:p,rejectWithValue:function(e,t){return new Qr(e,t)},fulfillWithValue:function(e,t){return new en(e,t)}})).then((function(t){if(t instanceof Qr)throw t;return t instanceof en?n(t.payload,f,e,t.meta):n(t,f,e)}))])];case 3:return y=b.sent(),[3,5];case 4:return g=b.sent(),y=g instanceof Qr?a(null,f,e,g.payload,g.meta):a(g,f,e),[3,5];case 5:return r&&!r.dispatchConditionRejection&&a.match(y)&&y.meta.condition||l(y),[2,y]}}))}))}();return Object.assign(h,{abort:p,requestId:f,arg:e,unwrap:function(){return h.then(rn)}})}}),{pending:i,rejected:a,fulfilled:n,typePrefix:e})}e.withTypes=function(){return e}}();function rn(e){if(e.meta&&e.meta.rejectedWithValue)throw e.payload;if(e.error)throw e.error;return e.payload}var nn=function(e,t){if("function"!=typeof e)throw new TypeError(t+" is not a function")},an=function(){},on=function(e,t){return void 0===t&&(t=an),e.catch(t),e},ln=function(e,t){return e.addEventListener("abort",t,{once:!0}),function(){return e.removeEventListener("abort",t)}},cn=function(e,t){var r=e.signal;r.aborted||("reason"in r||Object.defineProperty(r,"reason",{enumerable:!0,value:t,configurable:!0,writable:!0}),e.abort(t))},sn="listener",un="completed",fn="cancelled",dn="task-"+fn,pn="task-"+un,hn=sn+"-"+fn,yn=sn+"-"+un,vn=function(e){this.code=e,this.name="TaskAbortError",this.message="task "+fn+" (reason: "+e+")"},mn=function(e){if(e.aborted)throw new vn(e.reason)};function gn(e,t){var r=an;return new Promise((function(n,i){var a=function(){return i(new vn(e.reason))};e.aborted?a():(r=ln(e,a),t.finally((function(){return r()})).then(n,i))})).finally((function(){r=an}))}var bn=function(e){return function(t){return on(gn(e,t).then((function(t){return mn(e),t})))}},xn=function(e){var t=bn(e);return function(e){return t(new Promise((function(t){return setTimeout(t,e)})))}},wn=Object.assign,On={},Pn="listenerMiddleware",En=function(e,t){return function(r,n){nn(r,"taskExecutor");var i,a=new AbortController;i=a,ln(e,(function(){return cn(i,e.reason)}));var o,l,c=(o=function(){return zr(void 0,null,(function(){var t;return kr(this,(function(n){switch(n.label){case 0:return mn(e),mn(a.signal),[4,r({pause:bn(a.signal),delay:xn(a.signal),signal:a.signal})];case 1:return t=n.sent(),mn(a.signal),[2,t]}}))}))},l=function(){return cn(a,pn)},zr(void 0,null,(function(){var e;return kr(this,(function(t){switch(t.label){case 0:return t.trys.push([0,3,4,5]),[4,Promise.resolve()];case 1:return t.sent(),[4,o()];case 2:return[2,{status:"ok",value:t.sent()}];case 3:return[2,{status:(e=t.sent())instanceof vn?"cancelled":"rejected",error:e}];case 4:return null==l||l(),[7];case 5:return[2]}}))})));return(null==n?void 0:n.autoJoin)&&t.push(c),{result:bn(e)(c),cancel:function(){cn(a,dn)}}}},An=function(e,t){return function(r,n){return on(function(r,n){return zr(void 0,null,(function(){var i,a,o,l;return kr(this,(function(c){switch(c.label){case 0:mn(t),i=function(){},a=new Promise((function(t,n){var a=e({predicate:r,effect:function(e,r){r.unsubscribe(),t([e,r.getState(),r.getOriginalState()])}});i=function(){a(),n()}})),o=[a],null!=n&&o.push(new Promise((function(e){return setTimeout(e,n,null)}))),c.label=1;case 1:return c.trys.push([1,,3,4]),[4,gn(t,Promise.race(o))];case 2:return l=c.sent(),mn(t),[2,l];case 3:return i(),[7];case 4:return[2]}}))}))}(r,n))}},jn=function(e){var t=e.type,r=e.actionCreator,n=e.matcher,i=e.predicate,a=e.effect;if(t)i=Wr(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error("Creating or removing a listener requires one of the known fields for matching an action");return nn(a,"options.listener"),{predicate:i,type:t,effect:a}},Sn=function(e){e.pending.forEach((function(e){cn(e,hn)}))},kn=function(e,t,r){try{e(t,r)}catch(e){setTimeout((function(){throw e}),0)}},Mn=Wr(Pn+"/add"),Tn=Wr(Pn+"/removeAll"),Dn=Wr(Pn+"/remove"),Cn=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];console.error.apply(console,Mr([Pn+"/error"],e))};function In(e){var t=this;void 0===e&&(e={});var r=new Map,n=e.extra,i=e.onError,a=void 0===i?Cn:i;nn(a,"onError");var o=function(e){for(var t=0,n=Array.from(r.values());t<n.length;t++){var i=n[t];if(e(i))return i}},l=function(e){var t=o((function(t){return t.effect===e.effect}));return t||(t=function(e){var t=jn(e),r=t.type,n=t.predicate,i=t.effect;return{id:Zr(),effect:i,type:r,predicate:n,pending:new Set,unsubscribe:function(){throw new Error("Unsubscribe not initialized")}}}(e)),function(e){return e.unsubscribe=function(){return r.delete(e.id)},r.set(e.id,e),function(t){e.unsubscribe(),(null==t?void 0:t.cancelActive)&&Sn(e)}}(t)},c=function(e){var t=jn(e),r=t.type,n=t.effect,i=t.predicate,a=o((function(e){return("string"==typeof r?e.type===r:e.predicate===i)&&e.effect===n}));return a&&(a.unsubscribe(),e.cancelActive&&Sn(a)),!!a},s=function(e,i,o,c){return zr(t,null,(function(){var t,s,u,f;return kr(this,(function(d){switch(d.label){case 0:t=new AbortController,s=An(l,t.signal),u=[],d.label=1;case 1:return d.trys.push([1,3,4,6]),e.pending.add(t),[4,Promise.resolve(e.effect(i,wn({},o,{getOriginalState:c,condition:function(e,t){return s(e,t).then(Boolean)},take:s,delay:xn(t.signal),pause:bn(t.signal),extra:n,signal:t.signal,fork:En(t.signal,u),unsubscribe:e.unsubscribe,subscribe:function(){r.set(e.id,e)},cancelActiveListeners:function(){e.pending.forEach((function(e,r,n){e!==t&&(cn(e,hn),n.delete(e))}))}})))];case 2:return d.sent(),[3,6];case 3:return(f=d.sent())instanceof vn||kn(a,f,{raisedBy:"effect"}),[3,6];case 4:return[4,Promise.allSettled(u)];case 5:return d.sent(),cn(t,yn),e.pending.delete(t),[7];case 6:return[2]}}))}))},u=function(e){return function(){e.forEach(Sn),e.clear()}}(r);return{middleware:function(e){return function(t){return function(n){if(!Ur(n))return t(n);if(Mn.match(n))return l(n.payload);if(!Tn.match(n)){if(Dn.match(n))return c(n.payload);var i,o=e.getState(),f=function(){if(o===On)throw new Error(Pn+": getOriginalState can only be called synchronously");return o};try{if(i=t(n),r.size>0)for(var d=e.getState(),p=Array.from(r.values()),h=0,y=p;h<y.length;h++){var v=y[h],m=!1;try{m=v.predicate(n,d,o)}catch(e){m=!1,kn(a,e,{raisedBy:"predicate"})}m&&s(v,n,e,f)}}finally{o=On}return i}u()}}},startListening:l,stopListening:c,clearListeners:u}}"function"==typeof queueMicrotask&&queueMicrotask.bind("undefined"!=typeof window?window:void 0!==a.g?a.g:globalThis);var Nn,_n=function(e){return function(t){setTimeout(t,e)}};"undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame:_n(10);Ut();var Ln=Gr({name:"chartLayout",initialState:{layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top,e.margin.right=t.payload.right,e.margin.bottom=t.payload.bottom,e.margin.left=t.payload.left},setScale(e,t){e.scale=t.payload}}}),{setMargin:Rn,setLayout:Kn,setChartSize:zn,setScale:Bn}=Ln.actions,Fn=Ln.reducer;function Wn(e,t){if((i=e.length)>1)for(var r,n,i,a=1,o=e[t[0]],l=o.length;a<i;++a)for(n=o,o=e[t[a]],r=0;r<l;++r)o[r][1]+=o[r][0]=isNaN(n[r][1])?n[r][0]:n[r][1]}Array.prototype.slice;function Un(e){return"object"==typeof e&&"length"in e?e:Array.from(e)}function Xn(e){for(var t=e.length,r=new Array(t);--t>=0;)r[t]=t;return r}function Vn(e,t){return e[t]}function $n(e){const t=[];return t.key=e,t}function Hn(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function qn(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Hn(Object(r),!0).forEach((function(t){Yn(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Hn(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Yn(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Gn=Math.PI/180,Zn=e=>180*e/Math.PI,Jn=(e,t,r,n)=>({x:e+Math.cos(-Gn*n)*r,y:t+Math.sin(-Gn*n)*r}),Qn=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{top:0,right:0,bottom:0,left:0,width:0,height:0,brushBottom:0};return Math.min(Math.abs(e-(r.left||0)-(r.right||0)),Math.abs(t-(r.top||0)-(r.bottom||0)))/2},ei=(e,t)=>{var{x:r,y:n}=e,{cx:i,cy:a}=t,o=((e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return Math.sqrt((r-i)**2+(n-a)**2)})({x:r,y:n},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var l=(r-i)/o,c=Math.acos(l);return n>a&&(c=2*Math.PI-c),{radius:o,angle:Zn(c),angleInRadian:c}},ti=(e,t)=>{var{startAngle:r,endAngle:n}=t,i=Math.floor(r/360),a=Math.floor(n/360);return e+360*Math.min(i,a)},ri=(e,t)=>{var{x:r,y:n}=e,{radius:i,angle:a}=ei({x:r,y:n},t),{innerRadius:o,outerRadius:l}=t;if(i<o||i>l)return null;if(0===i)return null;var c,{startAngle:s,endAngle:u}=(e=>{var{startAngle:t,endAngle:r}=e,n=Math.floor(t/360),i=Math.floor(r/360),a=Math.min(n,i);return{startAngle:t-360*a,endAngle:r-360*a}})(t),f=a;if(s<=u){for(;f>u;)f-=360;for(;f<s;)f+=360;c=f>=s&&f<=u}else{for(;f>s;)f-=360;for(;f<u;)f+=360;c=f>=u&&f<=s}return c?qn(qn({},t),{},{radius:i,angle:ti(f,t)}):null},ni=e=>(0,t.isValidElement)(e)||"function"==typeof e||"boolean"==typeof e||null==e?"":e.className;function ii(e,t,r){return Array.isArray(e)&&e&&t+r!==0?e.slice(t,r+1):e}function ai(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function oi(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ai(Object(r),!0).forEach((function(t){li(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ai(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function li(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ci(e,t,r){return O(e)||O(t)?r:p(t)?l()(e,t,r):"function"==typeof t?t(e):r}var si=(e,t)=>"horizontal"===e&&"xAxis"===t||"vertical"===e&&"yAxis"===t||"centric"===e&&"angleAxis"===t||"radial"===e&&"radiusAxis"===t,ui=(e,t,r,n)=>{if(n)return e.map((e=>e.coordinate));var i,a,o=e.map((e=>(e.coordinate===t&&(i=!0),e.coordinate===r&&(a=!0),e.coordinate)));return i||o.push(t),a||o.push(r),o},fi=(e,t,r)=>{if(!e)return null;var{duplicateDomain:n,type:i,range:a,scale:o,realScaleType:l,isCategorical:c,categoricalDomain:f,tickCount:d,ticks:p,niceTicks:h,axisType:y}=e;if(!o)return null;var v="scaleBand"===l&&o.bandwidth?o.bandwidth()/2:2,m=(t||r)&&"category"===i&&o.bandwidth?o.bandwidth()/v:0;return m="angleAxis"===y&&a&&a.length>=2?2*s(a[0]-a[1])*m:m,t&&(p||h)?(p||h||[]).map(((e,t)=>{var r=n?n.indexOf(e):e;return{coordinate:o(r)+m,value:e,offset:m,index:t}})).filter((e=>!u(e.coordinate))):c&&f?f.map(((e,t)=>({coordinate:o(e)+m,value:e,index:t,offset:m}))):o.ticks&&!r&&null!=d?o.ticks(d).map(((e,t)=>({coordinate:o(e)+m,value:e,offset:m,index:t}))):o.domain().map(((e,t)=>({coordinate:o(e)+m,value:n?n[e]:e,index:t,offset:m})))},di=1e-4,pi=(e,t)=>{if(!t||2!==t.length||!d(t[0])||!d(t[1]))return e;var r=Math.min(t[0],t[1]),n=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!d(e[0])||e[0]<r)&&(i[0]=r),(!d(e[1])||e[1]>n)&&(i[1]=n),i[0]>n&&(i[0]=n),i[1]<r&&(i[1]=r),i},hi={sign:e=>{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r<n;++r)for(var i=0,a=0,o=0;o<t;++o){var l=u(e[o][r][1])?e[o][r][0]:e[o][r][1];l>=0?(e[o][r][0]=i,e[o][r][1]=i+l,i=e[o][r][1]):(e[o][r][0]=a,e[o][r][1]=a+l,a=e[o][r][1])}},expand:function(e,t){if((n=e.length)>0){for(var r,n,i,a=0,o=e[0].length;a<o;++a){for(i=r=0;r<n;++r)i+=e[r][a][1]||0;if(i)for(r=0;r<n;++r)e[r][a][1]/=i}Wn(e,t)}},none:Wn,silhouette:function(e,t){if((r=e.length)>0){for(var r,n=0,i=e[t[0]],a=i.length;n<a;++n){for(var o=0,l=0;o<r;++o)l+=e[o][n][1]||0;i[n][1]+=i[n][0]=-l/2}Wn(e,t)}},wiggle:function(e,t){if((i=e.length)>0&&(n=(r=e[t[0]]).length)>0){for(var r,n,i,a=0,o=1;o<n;++o){for(var l=0,c=0,s=0;l<i;++l){for(var u=e[t[l]],f=u[o][1]||0,d=(f-(u[o-1][1]||0))/2,p=0;p<l;++p){var h=e[t[p]];d+=(h[o][1]||0)-(h[o-1][1]||0)}c+=f,s+=d*f}r[o-1][1]+=r[o-1][0]=a,c&&(a-=s/c)}r[o-1][1]+=r[o-1][0]=a,Wn(e,t)}},positive:e=>{var t=e.length;if(!(t<=0))for(var r=0,n=e[0].length;r<n;++r)for(var i=0,a=0;a<t;++a){var o=u(e[a][r][1])?e[a][r][0]:e[a][r][1];o>=0?(e[a][r][0]=i,e[a][r][1]=i+o,i=e[a][r][1]):(e[a][r][0]=0,e[a][r][1]=0)}}},yi=(e,t,r)=>{var n=hi[r],i=function(){var e=ve([]),t=Xn,r=Wn,n=Vn;function i(i){var a,o,l=Array.from(e.apply(this,arguments),$n),c=l.length,s=-1;for(const e of i)for(a=0,++s;a<c;++a)(l[a][s]=[0,+n(e,l[a].key,s,i)]).data=e;for(a=0,o=Un(t(l));a<c;++a)l[o[a]].index=a;return r(l,o),l}return i.keys=function(t){return arguments.length?(e="function"==typeof t?t:ve(Array.from(t)),i):e},i.value=function(e){return arguments.length?(n="function"==typeof e?e:ve(+e),i):n},i.order=function(e){return arguments.length?(t=null==e?Xn:"function"==typeof e?e:ve(Array.from(e)),i):t},i.offset=function(e){return arguments.length?(r=null==e?Wn:e,i):r},i}().keys(t).value(((e,t)=>+ci(e,t,0))).order(Xn).offset(n);return i(e)};function vi(e){return null==e?void 0:String(e)}function mi(e){var{axis:t,ticks:r,bandSize:n,entry:i,index:a,dataKey:o}=e;if("category"===t.type){if(!t.allowDuplicatedCategory&&t.dataKey&&!O(i[t.dataKey])){var l=x(r,"value",i[t.dataKey]);if(l)return l.coordinate+n/2}return r[a]?r[a].coordinate+n/2:null}var c=ci(i,O(o)?t.dataKey:o);return O(c)?null:t.scale(c)}var gi=e=>{var{axis:t,ticks:r,offset:n,bandSize:i,entry:a,index:o}=e;if("category"===t.type)return r[o]?r[o].coordinate+n:null;var l=ci(a,t.dataKey,t.scale.domain()[o]);return O(l)?null:t.scale(l)-i/2+n},bi=e=>{var{numericAxis:t}=e,r=t.scale.domain();if("number"===t.type){var n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return n<=0&&i>=0?0:i<0?i:n}return r[0]},xi=(e,t,r)=>{var n;if(null!=e)return n=Object.keys(e).reduce(((n,i)=>{var a=e[i],{stackedData:o}=a,l=o.reduce(((e,n)=>{var i,a=ii(n,t,r),o=(i=a.flat(2).filter(d),[Math.min(...i),Math.max(...i)]);return[Math.min(e[0],o[0]),Math.max(e[1],o[1])]}),[1/0,-1/0]);return[Math.min(l[0],n[0]),Math.max(l[1],n[1])]}),[1/0,-1/0]),[n[0]===1/0?0:n[0],n[1]===-1/0?0:n[1]]},wi=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Oi=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Pi=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=nt()(t,(e=>e.coordinate)),a=1/0,o=1,l=i.length;o<l;o++){var c=i[o],s=i[o-1];a=Math.min((c.coordinate||0)-(s.coordinate||0),a)}return a===1/0?0:a}return r?void 0:0};function Ei(e){var{tooltipEntrySettings:t,dataKey:r,payload:n,value:i,name:a}=e;return oi(oi({},t),{},{dataKey:r,payload:n,value:i,name:a})}function Ai(e,t){return e?String(e):"string"==typeof t?t:void 0}var ji=e=>e.layout.width,Si=e=>e.layout.height,ki=e=>e.layout.scale,Mi=e=>e.layout.margin,Ti=et((e=>e.cartesianAxis.xAxis),(e=>Object.values(e))),Di=et((e=>e.cartesianAxis.yAxis),(e=>Object.values(e))),Ci=["#1890FF","#66B5FF","#41D9C7","#2FC25B","#6EDB8F","#9AE65C","#FACC14","#E6965C","#57AD71","#223273","#738AE6","#7564CC","#8543E0","#A877ED","#5C8EE6","#13C2C2","#70E0E0","#5CA3E6","#3436C7","#8082FF","#DD81E6","#F04864","#FA7D92","#D598D9"],Ii="data-recharts-item-index",Ni="data-recharts-item-data-key";function _i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Li(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?_i(Object(r),!0).forEach((function(t){Ri(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):_i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ri(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Ki=et([ji,Si,Mi,e=>e.brush.height,Ti,Di,it,e=>e.legend.size],((e,t,r,n,i,a,o,c)=>{var s=a.reduce(((e,t)=>{var{orientation:r}=t;if(!t.mirror&&!t.hide){var n="number"==typeof t.width?t.width:60;return Li(Li({},e),{},{[r]:e[r]+n})}return e}),{left:r.left||0,right:r.right||0}),u=i.reduce(((e,t)=>{var{orientation:r}=t;return t.mirror||t.hide?e:Li(Li({},e),{},{[r]:l()(e,"".concat(r))+t.height})}),{top:r.top||0,bottom:r.bottom||0}),f=Li(Li({},u),s),p=f.bottom;f.bottom+=n,f=((e,t,r)=>{if(t&&r){var{width:n,height:i}=r,{align:a,verticalAlign:o,layout:l}=t;if(("vertical"===l||"horizontal"===l&&"middle"===o)&&"center"!==a&&d(e[a]))return oi(oi({},e),{},{[a]:e[a]+(n||0)});if(("horizontal"===l||"vertical"===l&&"center"===a)&&"middle"!==o&&d(e[o]))return oi(oi({},e),{},{[o]:e[o]+(i||0)})}return e})(f,o,c);var h=e-f.left-f.right,y=t-f.top-f.bottom;return Li(Li({brushBottom:p},f),{},{width:Math.max(h,0),height:Math.max(y,0)})})),zi=et(Ki,(e=>({x:e.left,y:e.top,width:e.width,height:e.height}))),Bi=et(ji,Si,((e,t)=>({x:0,y:0,width:e,height:t}))),Fi=(0,t.createContext)(null),Wi=()=>null!=(0,t.useContext)(Fi),Ui=e=>{var{children:r}=e;return t.createElement(Fi.Provider,{value:!0},r)},Xi=e=>e.brush,Vi=et([Xi,Ki,Mi],((e,t,r)=>({height:e.height,x:d(e.x)?e.x:t.left,y:d(e.y)?e.y:t.top+t.height+t.brushBottom-((null==r?void 0:r.bottom)||0),width:d(e.width)?e.width:t.width}))),$i=()=>{var e,t=Wi(),r=He(zi),n=He(Vi),i=null===(e=He(Xi))||void 0===e?void 0:e.padding;return t&&n&&i?{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}:r},Hi={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},qi=()=>{var e;return null!==(e=He(Ki))&&void 0!==e?e:Hi},Yi=()=>He(ji),Gi=()=>He(Si),Zi={top:0,right:0,bottom:0,left:0},Ji=e=>e.layout.layoutType,Qi=()=>He(Ji),ea=e=>{var r=Ue();return(0,t.useEffect)((()=>{r(zn(e))}),[r,e]),null},ta=e=>{var{margin:r}=e,n=Ue();return(0,t.useEffect)((()=>{n(Rn(r))}),[n,r]),null},ra=Symbol.for("immer-nothing"),na=Symbol.for("immer-draftable"),ia=Symbol.for("immer-state");function aa(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var oa=Object.getPrototypeOf;function la(e){return!!e&&!!e[ia]}function ca(e){return!!e&&(ua(e)||Array.isArray(e)||!!e[na]||!!e.constructor?.[na]||ya(e)||va(e))}var sa=Object.prototype.constructor.toString();function ua(e){if(!e||"object"!=typeof e)return!1;const t=oa(e);if(null===t)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object||"function"==typeof r&&Function.toString.call(r)===sa}function fa(e,t){0===da(e)?Reflect.ownKeys(e).forEach((r=>{t(r,e[r],e)})):e.forEach(((r,n)=>t(n,r,e)))}function da(e){const t=e[ia];return t?t.type_:Array.isArray(e)?1:ya(e)?2:va(e)?3:0}function pa(e,t){return 2===da(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function ha(e,t,r){const n=da(e);2===n?e.set(t,r):3===n?e.add(r):e[t]=r}function ya(e){return e instanceof Map}function va(e){return e instanceof Set}function ma(e){return e.copy_||e.base_}function ga(e,t){if(ya(e))return new Map(e);if(va(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=ua(e);if(!0===t||"class_only"===t&&!r){const t=Object.getOwnPropertyDescriptors(e);delete t[ia];let r=Reflect.ownKeys(t);for(let n=0;n<r.length;n++){const i=r[n],a=t[i];!1===a.writable&&(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(t[i]={configurable:!0,writable:!0,enumerable:a.enumerable,value:e[i]})}return Object.create(oa(e),t)}{const t=oa(e);if(null!==t&&r)return{...e};const n=Object.create(t);return Object.assign(n,e)}}function ba(e,t=!1){return wa(e)||la(e)||!ca(e)||(da(e)>1&&(e.set=e.add=e.clear=e.delete=xa),Object.freeze(e),t&&Object.entries(e).forEach((([e,t])=>ba(t,!0)))),e}function xa(){aa(2)}function wa(e){return Object.isFrozen(e)}var Oa,Pa={};function Ea(e){const t=Pa[e];return t||aa(0),t}function Aa(){return Oa}function ja(e,t){t&&(Ea("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Sa(e){ka(e),e.drafts_.forEach(Ta),e.drafts_=null}function ka(e){e===Oa&&(Oa=e.parent_)}function Ma(e){return Oa={drafts_:[],parent_:Oa,immer_:e,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Ta(e){const t=e[ia];0===t.type_||1===t.type_?t.revoke_():t.revoked_=!0}function Da(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return void 0!==e&&e!==r?(r[ia].modified_&&(Sa(t),aa(4)),ca(e)&&(e=Ca(t,e),t.parent_||Na(t,e)),t.patches_&&Ea("Patches").generateReplacementPatches_(r[ia].base_,e,t.patches_,t.inversePatches_)):e=Ca(t,r,[]),Sa(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==ra?e:void 0}function Ca(e,t,r){if(wa(t))return t;const n=t[ia];if(!n)return fa(t,((i,a)=>Ia(e,n,t,i,a,r))),t;if(n.scope_!==e)return t;if(!n.modified_)return Na(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const t=n.copy_;let i=t,a=!1;3===n.type_&&(i=new Set(t),t.clear(),a=!0),fa(i,((i,o)=>Ia(e,n,t,i,o,r,a))),Na(e,t,!1),r&&e.patches_&&Ea("Patches").generatePatches_(n,r,e.patches_,e.inversePatches_)}return n.copy_}function Ia(e,t,r,n,i,a,o){if(la(i)){const o=Ca(e,i,a&&t&&3!==t.type_&&!pa(t.assigned_,n)?a.concat(n):void 0);if(ha(r,n,o),!la(o))return;e.canAutoFreeze_=!1}else o&&r.add(i);if(ca(i)&&!wa(i)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Ca(e,i),t&&t.scope_.parent_||"symbol"==typeof n||!Object.prototype.propertyIsEnumerable.call(r,n)||Na(e,i)}}function Na(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&ba(t,r)}var _a={get(e,t){if(t===ia)return e;const r=ma(e);if(!pa(r,t))return function(e,t,r){const n=Ka(t,r);return n?"value"in n?n.value:n.get?.call(e.draft_):void 0}(e,r,t);const n=r[t];return e.finalized_||!ca(n)?n:n===Ra(e.base_,t)?(Ba(e),e.copy_[t]=Fa(n,e)):n},has:(e,t)=>t in ma(e),ownKeys:e=>Reflect.ownKeys(ma(e)),set(e,t,r){const n=Ka(ma(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const n=Ra(ma(e),t),i=n?.[ia];if(i&&i.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}(r,n)&&(void 0!==r||pa(e.base_,t)))return!0;Ba(e),za(e)}return e.copy_[t]===r&&(void 0!==r||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty:(e,t)=>(void 0!==Ra(e.base_,t)||t in e.base_?(e.assigned_[t]=!1,Ba(e),za(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0),getOwnPropertyDescriptor(e,t){const r=ma(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n?{writable:!0,configurable:1!==e.type_||"length"!==t,enumerable:n.enumerable,value:r[t]}:n},defineProperty(){aa(11)},getPrototypeOf:e=>oa(e.base_),setPrototypeOf(){aa(12)}},La={};function Ra(e,t){const r=e[ia];return(r?ma(r):e)[t]}function Ka(e,t){if(!(t in e))return;let r=oa(e);for(;r;){const e=Object.getOwnPropertyDescriptor(r,t);if(e)return e;r=oa(r)}}function za(e){e.modified_||(e.modified_=!0,e.parent_&&za(e.parent_))}function Ba(e){e.copy_||(e.copy_=ga(e.base_,e.scope_.immer_.useStrictShallowCopy_))}fa(_a,((e,t)=>{La[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),La.deleteProperty=function(e,t){return La.set.call(this,e,t,void 0)},La.set=function(e,t,r){return _a.set.call(this,e[0],t,r,e[0])};function Fa(e,t){const r=ya(e)?Ea("MapSet").proxyMap_(e,t):va(e)?Ea("MapSet").proxySet_(e,t):function(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:Aa(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,a=_a;r&&(i=[n],a=La);const{revoke:o,proxy:l}=Proxy.revocable(i,a);return n.draft_=l,n.revoke_=o,l}(e,t);return(t?t.scope_:Aa()).drafts_.push(r),r}function Wa(e){if(!ca(e)||wa(e))return e;const t=e[ia];let r;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=ga(e,t.scope_.immer_.useStrictShallowCopy_)}else r=ga(e,!0);return fa(r,((e,t)=>{ha(r,e,Wa(t))})),t&&(t.finalized_=!1),r}var Ua=new class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(e,t,r)=>{if("function"==typeof e&&"function"!=typeof t){const r=t;t=e;const n=this;return function(e=r,...i){return n.produce(e,(e=>t.call(this,e,...i)))}}let n;if("function"!=typeof t&&aa(6),void 0!==r&&"function"!=typeof r&&aa(7),ca(e)){const i=Ma(this),a=Fa(e,void 0);let o=!0;try{n=t(a),o=!1}finally{o?Sa(i):ka(i)}return ja(i,r),Da(n,i)}if(!e||"object"!=typeof e){if(n=t(e),void 0===n&&(n=e),n===ra&&(n=void 0),this.autoFreeze_&&ba(n,!0),r){const t=[],i=[];Ea("Patches").generateReplacementPatches_(e,n,t,i),r(t,i)}return n}aa(1)},this.produceWithPatches=(e,t)=>{if("function"==typeof e)return(t,...r)=>this.produceWithPatches(t,(t=>e(t,...r)));let r,n;const i=this.produce(e,t,((e,t)=>{r=e,n=t}));return[i,r,n]},"boolean"==typeof e?.autoFreeze&&this.setAutoFreeze(e.autoFreeze),"boolean"==typeof e?.useStrictShallowCopy&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){ca(e)||aa(8),la(e)&&(e=function(e){la(e)||aa(10);return Wa(e)}(e));const t=Ma(this),r=Fa(e,void 0);return r[ia].isManual_=!0,ka(t),r}finishDraft(e,t){const r=e&&e[ia];r&&r.isManual_||aa(9);const{scope_:n}=r;return ja(n,t),Da(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const n=t[r];if(0===n.path.length&&"replace"===n.op){e=n.value;break}}r>-1&&(t=t.slice(r+1));const n=Ea("Patches").applyPatches_;return la(e)?n(e,t):this.produce(e,(e=>n(e,t)))}};Ua.produce,Ua.produceWithPatches.bind(Ua),Ua.setAutoFreeze.bind(Ua),Ua.setUseStrictShallowCopy.bind(Ua),Ua.applyPatches.bind(Ua),Ua.createDraft.bind(Ua),Ua.finishDraft.bind(Ua);var Xa=Gr({name:"legend",initialState:{settings:{layout:"horizontal",align:"center",verticalAlign:"middle",itemSorter:"value"},size:{width:0,height:0},payload:[]},reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload(e,t){e.payload.push(t.payload)},removeLegendPayload(e,t){var r=Ft(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)}}}),{setLegendSize:Va,setLegendSettings:$a,addLegendPayload:Ha,removeLegendPayload:qa}=Xa.actions,Ya=Xa.reducer,Ga=["contextPayload"];function Za(){return Za=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Za.apply(null,arguments)}function Ja(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Qa(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ja(Object(r),!0).forEach((function(t){eo(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ja(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function eo(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function to(e){return e.value}function ro(e){var{contextPayload:r}=e,n=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,Ga),i=ze(r,e.payloadUniqBy,to),a=Qa(Qa({},n),{},{payload:i});return t.isValidElement(e.content)?t.cloneElement(e.content,a):"function"==typeof e.content?t.createElement(e.content,a):t.createElement(Le,a)}function no(e){var r=Ue();return(0,t.useEffect)((()=>{r($a(e))}),[r,e]),null}function io(e){var r=Ue();return(0,t.useEffect)((()=>(r(Va(e)),()=>{r(Va({width:0,height:0}))})),[r,e]),null}function ao(e){var r,n=He(at),i=(0,t.useContext)(H),a=null!==(r=He((e=>e.layout.margin)))&&void 0!==r?r:Zi,{width:o,height:l,wrapperStyle:c,portal:s}=e,[u,f]=lt([n]),d=Yi(),p=Gi(),h=d-(a.left||0)-(a.right||0),y=oo.getWidthOrHeight(e.layout,l,o,h),v=s?c:Qa(Qa({position:"absolute",width:(null==y?void 0:y.width)||o||"auto",height:(null==y?void 0:y.height)||l||"auto"},function(e,t,r,n,i,a){var o,l,{layout:c,align:s,verticalAlign:u}=t;return e&&(void 0!==e.left&&null!==e.left||void 0!==e.right&&null!==e.right)||(o="center"===s&&"vertical"===c?{left:((n||0)-a.width)/2}:"right"===s?{right:r&&r.right||0}:{left:r&&r.left||0}),e&&(void 0!==e.top&&null!==e.top||void 0!==e.bottom&&null!==e.bottom)||(l="middle"===u?{top:((i||0)-a.height)/2}:"bottom"===u?{bottom:r&&r.bottom||0}:{top:r&&r.top||0}),Qa(Qa({},o),l)}(c,e,a,d,p,u)),c),m=null!=s?s:i;if(null==m)return null;var g=t.createElement("div",{className:"recharts-legend-wrapper",style:v,ref:f},t.createElement(no,{layout:e.layout,align:e.align,verticalAlign:e.verticalAlign,itemSorter:e.itemSorter}),t.createElement(io,{width:u.width,height:u.height}),t.createElement(ro,Za({},e,y,{margin:a,chartWidth:d,chartHeight:p,contextPayload:n})));return(0,$.createPortal)(g,m)}class oo extends t.PureComponent{static getWidthOrHeight(e,t,r,n){return"vertical"===e&&d(t)?{height:t}:"horizontal"===e?{width:r||n}:null}render(){return t.createElement(ao,this.props)}}function lo(){return lo=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},lo.apply(null,arguments)}function co(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function so(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?co(Object(r),!0).forEach((function(t){uo(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):co(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function uo(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function fo(e){return Array.isArray(e)&&p(e[0])&&p(e[1])?e.join(" ~ "):e}eo(oo,"displayName","Legend"),eo(oo,"defaultProps",{align:"center",iconSize:14,itemSorter:"value",layout:"horizontal",verticalAlign:"bottom"});var po=e=>{var{separator:r=" : ",contentStyle:i={},itemStyle:a={},labelStyle:o={},payload:l,formatter:c,itemSorter:s,wrapperClassName:u,labelClassName:f,label:d,labelFormatter:h,accessibilityLayer:y=!1}=e,v=so({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},i),m=so({margin:0},o),g=!O(d),b=g?d:"",x=n("recharts-default-tooltip",u),w=n("recharts-tooltip-label",f);g&&h&&null!=l&&(b=h(d,l));var P=y?{role:"status","aria-live":"assertive"}:{};return t.createElement("div",lo({className:x,style:v},P),t.createElement("p",{className:w,style:m},t.isValidElement(b)?b:"".concat(b)),(()=>{if(l&&l.length){var e=(s?nt()(l,s):l).map(((e,n)=>{if("none"===e.type)return null;var i=e.formatter||c||fo,{value:o,name:s}=e,u=o,f=s;if(i){var d=i(o,s,e,n,l);if(Array.isArray(d))[u,f]=d;else{if(null==d)return null;u=d}}var h=so({display:"block",paddingTop:4,paddingBottom:4,color:e.color||"#000"},a);return t.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(n),style:h},p(f)?t.createElement("span",{className:"recharts-tooltip-item-name"},f):null,p(f)?t.createElement("span",{className:"recharts-tooltip-item-separator"},r):null,t.createElement("span",{className:"recharts-tooltip-item-value"},u),t.createElement("span",{className:"recharts-tooltip-item-unit"},e.unit||""))}));return t.createElement("ul",{className:"recharts-tooltip-item-list",style:{padding:0,margin:0}},e)}return null})())},ho="recharts-tooltip-wrapper",yo={visibility:"hidden"};function vo(e){var{coordinate:t,translateX:r,translateY:i}=e;return n(ho,{["".concat(ho,"-right")]:d(r)&&t&&d(t.x)&&r>=t.x,["".concat(ho,"-left")]:d(r)&&t&&d(t.x)&&r<t.x,["".concat(ho,"-bottom")]:d(i)&&t&&d(t.y)&&i>=t.y,["".concat(ho,"-top")]:d(i)&&t&&d(t.y)&&i<t.y})}function mo(e){var{allowEscapeViewBox:t,coordinate:r,key:n,offsetTopLeft:i,position:a,reverseDirection:o,tooltipDimension:l,viewBox:c,viewBoxDimension:s}=e;if(a&&d(a[n]))return a[n];var u=r[n]-l-(i>0?i:0),f=r[n]+i;if(t[n])return o[n]?u:f;var p=c[n];return null==p?0:o[n]?u<p?Math.max(f,p):Math.max(u,p):null==s?0:f+l>p+s?Math.max(u,p):Math.max(f,p)}function go(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function bo(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?go(Object(r),!0).forEach((function(t){xo(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):go(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function xo(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class wo extends t.PureComponent{constructor(){super(...arguments),xo(this,"state",{dismissed:!1,dismissedAtCoordinate:{x:0,y:0}}),xo(this,"handleKeyDown",(e=>{var t,r,n,i;"Escape"===e.key&&this.setState({dismissed:!0,dismissedAtCoordinate:{x:null!==(t=null===(r=this.props.coordinate)||void 0===r?void 0:r.x)&&void 0!==t?t:0,y:null!==(n=null===(i=this.props.coordinate)||void 0===i?void 0:i.y)&&void 0!==n?n:0}})}))}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown)}componentDidUpdate(){var e,t;this.state.dismissed&&((null===(e=this.props.coordinate)||void 0===e?void 0:e.x)===this.state.dismissedAtCoordinate.x&&(null===(t=this.props.coordinate)||void 0===t?void 0:t.y)===this.state.dismissedAtCoordinate.y||(this.state.dismissed=!1))}render(){var{active:e,allowEscapeViewBox:r,animationDuration:n,animationEasing:i,children:a,coordinate:o,hasPayload:l,isAnimationActive:c,offset:s,position:u,reverseDirection:f,useTranslate3d:d,viewBox:p,wrapperStyle:h,lastBoundingBox:y,innerRef:v,hasPortalFromProps:m}=this.props,{cssClasses:g,cssProperties:b}=function(e){var t,r,n,{allowEscapeViewBox:i,coordinate:a,offsetTopLeft:o,position:l,reverseDirection:c,tooltipBox:s,useTranslate3d:u,viewBox:f}=e;return t=s.height>0&&s.width>0&&a?function(e){var{translateX:t,translateY:r,useTranslate3d:n}=e;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}({translateX:r=mo({allowEscapeViewBox:i,coordinate:a,key:"x",offsetTopLeft:o,position:l,reverseDirection:c,tooltipDimension:s.width,viewBox:f,viewBoxDimension:f.width}),translateY:n=mo({allowEscapeViewBox:i,coordinate:a,key:"y",offsetTopLeft:o,position:l,reverseDirection:c,tooltipDimension:s.height,viewBox:f,viewBoxDimension:f.height}),useTranslate3d:u}):yo,{cssProperties:t,cssClasses:vo({translateX:r,translateY:n,coordinate:a})}}({allowEscapeViewBox:r,coordinate:o,offsetTopLeft:s,position:u,reverseDirection:f,tooltipBox:{height:y.height,width:y.width},useTranslate3d:d,viewBox:p}),x=m?{}:bo(bo({transition:c&&e?"transform ".concat(n,"ms ").concat(i):void 0},b),{},{pointerEvents:"none",visibility:!this.state.dismissed&&e&&l?"visible":"hidden",position:"absolute",top:0,left:0}),w=bo(bo({},x),{},{visibility:!this.state.dismissed&&e&&l?"visible":"hidden"},h);return t.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:g,style:w,ref:v},a)}}var Oo={isSsr:!("undefined"!=typeof window&&window.document&&Boolean(window.document.createElement)&&window.setTimeout)},Po=()=>He((e=>e.rootProps.accessibilityLayer));function Eo(){}function Ao(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function jo(e){this._context=e}function So(e){this._context=e}function ko(e){this._context=e}jo.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ao(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ao(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},So.prototype={areaStart:Eo,areaEnd:Eo,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Ao(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},ko.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Ao(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};class Mo{constructor(e,t){this._context=e,this._x=t}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,t,e,t):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+t)/2,e,this._y0,e,t)}this._x0=e,this._y0=t}}function To(e){this._context=e}function Do(e){this._context=e}function Co(e){return new Do(e)}function Io(e){return e<0?-1:1}function No(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),l=(a*i+o*n)/(n+i);return(Io(a)+Io(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(l))||0}function _o(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function Lo(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,l=(a-n)/3;e._context.bezierCurveTo(n+l,i+l*t,a-l,o-l*r,a,o)}function Ro(e){this._context=e}function Ko(e){this._context=new zo(e)}function zo(e){this._context=e}function Bo(e){this._context=e}function Fo(e){var t,r,n=e.length-1,i=new Array(n),a=new Array(n),o=new Array(n);for(i[0]=0,a[0]=2,o[0]=e[0]+2*e[1],t=1;t<n-1;++t)i[t]=1,a[t]=4,o[t]=4*e[t]+2*e[t+1];for(i[n-1]=2,a[n-1]=7,o[n-1]=8*e[n-1]+e[n],t=1;t<n;++t)r=i[t]/a[t-1],a[t]-=r,o[t]-=r*o[t-1];for(i[n-1]=o[n-1]/a[n-1],t=n-2;t>=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[n-1]=(e[n]+i[n-1])/2,t=0;t<n-1;++t)a[t]=2*e[t+1]-i[t+1];return[i,a]}function Wo(e,t){this._context=e,this._t=t}function Uo(e){return e[0]}function Xo(e){return e[1]}function Vo(e,t){var r=ve(!0),n=null,i=Co,a=null,o=Pe(l);function l(l){var c,s,u,f=(l=Un(l)).length,d=!1;for(null==n&&(a=i(u=o())),c=0;c<=f;++c)!(c<f&&r(s=l[c],c,l))===d&&((d=!d)?a.lineStart():a.lineEnd()),d&&a.point(+e(s,c,l),+t(s,c,l));if(u)return a=null,u+""||null}return e="function"==typeof e?e:void 0===e?Uo:ve(e),t="function"==typeof t?t:void 0===t?Xo:ve(t),l.x=function(t){return arguments.length?(e="function"==typeof t?t:ve(+t),l):e},l.y=function(e){return arguments.length?(t="function"==typeof e?e:ve(+e),l):t},l.defined=function(e){return arguments.length?(r="function"==typeof e?e:ve(!!e),l):r},l.curve=function(e){return arguments.length?(i=e,null!=n&&(a=i(n)),l):i},l.context=function(e){return arguments.length?(null==e?n=a=null:a=i(n=e),l):n},l}function $o(e,t,r){var n=null,i=ve(!0),a=null,o=Co,l=null,c=Pe(s);function s(s){var u,f,d,p,h,y=(s=Un(s)).length,v=!1,m=new Array(y),g=new Array(y);for(null==a&&(l=o(h=c())),u=0;u<=y;++u){if(!(u<y&&i(p=s[u],u,s))===v)if(v=!v)f=u,l.areaStart(),l.lineStart();else{for(l.lineEnd(),l.lineStart(),d=u-1;d>=f;--d)l.point(m[d],g[d]);l.lineEnd(),l.areaEnd()}v&&(m[u]=+e(p,u,s),g[u]=+t(p,u,s),l.point(n?+n(p,u,s):m[u],r?+r(p,u,s):g[u]))}if(h)return l=null,h+""||null}function u(){return Vo().defined(i).curve(o).context(a)}return e="function"==typeof e?e:void 0===e?Uo:ve(+e),t="function"==typeof t?t:ve(void 0===t?0:+t),r="function"==typeof r?r:void 0===r?Xo:ve(+r),s.x=function(t){return arguments.length?(e="function"==typeof t?t:ve(+t),n=null,s):e},s.x0=function(t){return arguments.length?(e="function"==typeof t?t:ve(+t),s):e},s.x1=function(e){return arguments.length?(n=null==e?null:"function"==typeof e?e:ve(+e),s):n},s.y=function(e){return arguments.length?(t="function"==typeof e?e:ve(+e),r=null,s):t},s.y0=function(e){return arguments.length?(t="function"==typeof e?e:ve(+e),s):t},s.y1=function(e){return arguments.length?(r=null==e?null:"function"==typeof e?e:ve(+e),s):r},s.lineX0=s.lineY0=function(){return u().x(e).y(t)},s.lineY1=function(){return u().x(e).y(r)},s.lineX1=function(){return u().x(n).y(t)},s.defined=function(e){return arguments.length?(i="function"==typeof e?e:ve(!!e),s):i},s.curve=function(e){return arguments.length?(o=e,null!=a&&(l=o(a)),s):o},s.context=function(e){return arguments.length?(null==e?a=l=null:l=o(a=e),s):a},s}function Ho(e){return Number.isFinite(e)}function qo(e){return"number"==typeof e&&e>0&&Number.isFinite(e)}function Yo(){return Yo=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Yo.apply(null,arguments)}function Go(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Zo(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Go(Object(r),!0).forEach((function(t){Jo(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Go(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Jo(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}To.prototype={areaStart:Eo,areaEnd:Eo,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}},Do.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}},Ro.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Lo(this,this._t0,_o(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(t=+t,(e=+e)!==this._x1||t!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Lo(this,_o(this,r=No(this,e,t)),r);break;default:Lo(this,this._t0,r=No(this,e,t))}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}},(Ko.prototype=Object.create(Ro.prototype)).point=function(e,t){Ro.prototype.point.call(this,t,e)},zo.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}},Bo.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),2===r)this._context.lineTo(e[1],t[1]);else for(var n=Fo(e),i=Fo(t),a=0,o=1;o<r;++a,++o)this._context.bezierCurveTo(n[0][a],i[0][a],n[1][a],i[1][a],e[o],t[o]);(this._line||0!==this._line&&1===r)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(e,t){this._x.push(+e),this._y.push(+t)}},Wo.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}}this._x=e,this._y=t}};var Qo={curveBasisClosed:function(e){return new So(e)},curveBasisOpen:function(e){return new ko(e)},curveBasis:function(e){return new jo(e)},curveBumpX:function(e){return new Mo(e,!0)},curveBumpY:function(e){return new Mo(e,!1)},curveLinearClosed:function(e){return new To(e)},curveLinear:Co,curveMonotoneX:function(e){return new Ro(e)},curveMonotoneY:function(e){return new Ko(e)},curveNatural:function(e){return new Bo(e)},curveStep:function(e){return new Wo(e,.5)},curveStepAfter:function(e){return new Wo(e,1)},curveStepBefore:function(e){return new Wo(e,0)}},el=e=>Ho(e.x)&&Ho(e.y),tl=e=>e.x,rl=e=>e.y,nl=e=>{var t,{type:r="linear",points:n=[],baseLine:i,layout:a,connectNulls:o=!1}=e,l=((e,t)=>{if("function"==typeof e)return e;var r="curve".concat(P(e));return"curveMonotone"!==r&&"curveBump"!==r||!t?Qo[r]||Co:Qo["".concat(r).concat("vertical"===t?"Y":"X")]})(r,a),c=o?n.filter(el):n;if(Array.isArray(i)){var s=o?i.filter((e=>el(e))):i,u=c.map(((e,t)=>Zo(Zo({},e),{},{base:s[t]})));return t="vertical"===a?$o().y(rl).x1(tl).x0((e=>e.base.x)):$o().x(tl).y1(rl).y0((e=>e.base.y)),t.defined(el).curve(l),t(u)}return(t="vertical"===a&&d(i)?$o().y(rl).x1(tl).x0(i):d(i)?$o().x(tl).y1(rl).y0(i):Vo().x(tl).y(rl)).defined(el).curve(l),t(c)},il=e=>{var{className:r,points:i,path:a,pathRef:o}=e;if(!(i&&i.length||a))return null;var l=i&&i.length?nl(e):a;return t.createElement("path",Yo({},C(e),k(e),{className:n("recharts-curve",r),d:null===l?void 0:l,ref:o}))},al=["x","y","top","left","width","height","className"];function ol(){return ol=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ol.apply(null,arguments)}function ll(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function cl(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var sl=(e,t,r,n,i,a)=>"M".concat(e,",").concat(i,"v").concat(n,"M").concat(a,",").concat(t,"h").concat(r),ul=e=>{var{x:r=0,y:i=0,top:a=0,left:o=0,width:l=0,height:c=0,className:s}=e,u=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,al),f=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ll(Object(r),!0).forEach((function(t){cl(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ll(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({x:r,y:i,top:a,left:o,width:l,height:c},u);return d(r)&&d(i)&&d(l)&&d(c)&&d(a)&&d(o)?t.createElement("path",ol({},z(f,!0),{className:n("recharts-cross",s),d:sl(r,i,l,c,a,o)})):null};function fl(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function dl(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function pl(e,t){var r=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?fl(Object(r),!0).forEach((function(t){dl(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):fl(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},e),n=t;return Object.keys(t).reduce(((e,t)=>(void 0===e[t]&&void 0!==n[t]&&(e[t]=n[t]),e)),r)}var hl=a(7541),yl=a.n(hl),vl=1e-4,ml=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],gl=(e,t)=>e.map(((e,r)=>e*t**r)).reduce(((e,t)=>e+t)),bl=(e,t)=>r=>{var n=ml(e,t);return gl(n,r)},xl=function(){for(var e,t,r,n,i=arguments.length,a=new Array(i),o=0;o<i;o++)a[o]=arguments[o];if(1===a.length)switch(a[0]){case"linear":[e,r,t,n]=[0,0,1,1];break;case"ease":[e,r,t,n]=[.25,.1,.25,1];break;case"ease-in":[e,r,t,n]=[.42,0,1,1];break;case"ease-out":[e,r,t,n]=[.42,0,.58,1];break;case"ease-in-out":[e,r,t,n]=[0,0,.58,1];break;default:var l=a[0].split("(");"cubic-bezier"===l[0]&&4===l[1].split(")")[0].split(",").length&&([e,r,t,n]=l[1].split(")")[0].split(",").map((e=>parseFloat(e))))}else 4===a.length&&([e,r,t,n]=a);var c,s,u=bl(e,t),f=bl(r,n),d=(c=e,s=t,e=>{var t=[...ml(c,s).map(((e,t)=>e*t)).slice(1),0];return gl(t,e)}),p=e=>e>1?1:e<0?0:e,h=e=>{for(var t=e>1?1:e,r=t,n=0;n<8;++n){var i=u(r)-t,a=d(r);if(Math.abs(i-t)<vl||a<vl)return f(r);r=p(r-i/a)}return f(r)};return h.isStepper=!1,h},wl=e=>{if("string"==typeof e)switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return xl(e);case"spring":return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{stiff:t=100,damping:r=8,dt:n=17}=e,i=(e,i,a)=>{var o=a+(-(e-i)*t-a*r)*n/1e3,l=a*n/1e3+e;return Math.abs(l-i)<vl&&Math.abs(o)<vl?[i,0]:[l,o]};return i.isStepper=!0,i.dt=n,i}();default:if("cubic-bezier"===e.split("(")[0])return xl(e)}return"function"==typeof e?e:null};function Ol(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Pl(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ol(Object(r),!0).forEach((function(t){El(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ol(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function El(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Al=(e,t,r)=>e.map((e=>{return"".concat((n=e,n.replace(/([A-Z])/g,(e=>"-".concat(e.toLowerCase()))))," ").concat(t,"ms ").concat(r);var n})).join(","),jl=(e,t)=>Object.keys(t).reduce(((r,n)=>Pl(Pl({},r),{},{[n]:e(n,t[n])})),{});function Sl(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function kl(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Sl(Object(r),!0).forEach((function(t){Ml(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Sl(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ml(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Tl=(e,t,r)=>e+(t-e)*r,Dl=e=>{var{from:t,to:r}=e;return t!==r},Cl=(e,t,r)=>{var n=jl(((t,r)=>{if(Dl(r)){var[n,i]=e(r.from,r.to,r.velocity);return kl(kl({},r),{},{from:n,velocity:i})}return r}),t);return r<1?jl(((e,t)=>Dl(t)?kl(kl({},t),{},{velocity:Tl(t.velocity,n[e].velocity,r),from:Tl(t.from,n[e].from,r)}):t),t):Cl(e,n,r-1)};function Il(e,t,r,n,i,a){var o,l=n.reduce(((r,n)=>kl(kl({},r),{},{[n]:{from:e[n],velocity:0,to:t[n]}})),{}),c=null,s=n=>{o||(o=n);var u=(n-o)/r.dt;l=Cl(r,l,u),i(kl(kl(kl({},e),t),jl(((e,t)=>t.from),l))),o=n,Object.values(l).filter(Dl).length&&(c=a.setTimeout(s))};return()=>(c=a.setTimeout(s),()=>{c()})}const Nl=(e,t,r,n,i,a)=>{var o,l,c=(o=e,l=t,[Object.keys(o),Object.keys(l)].reduce(((e,t)=>e.filter((e=>t.includes(e))))));return!0===r.isStepper?Il(e,t,r,c,i,a):function(e,t,r,n,i,a,o){var l,c=null,s=i.reduce(((r,n)=>kl(kl({},r),{},{[n]:[e[n],t[n]]})),{}),u=i=>{l||(l=i);var f=(i-l)/n,d=jl(((e,t)=>Tl(...t,r(f))),s);if(a(kl(kl(kl({},e),t),d)),f<1)c=o.setTimeout(u);else{var p=jl(((e,t)=>Tl(...t,r(1))),s);a(kl(kl(kl({},e),t),p))}};return()=>(c=o.setTimeout(u),()=>{c()})}(e,t,r,n,c,i,a)};class _l{setTimeout(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=performance.now(),n=null,i=a=>{a-r>=t?e(a):"function"==typeof requestAnimationFrame&&(n=requestAnimationFrame(i))};return n=requestAnimationFrame(i),()=>{cancelAnimationFrame(n)}}}function Ll(){return e=new _l,t=()=>null,r=!1,n=null,i=a=>{if(!r){if(Array.isArray(a)){if(!a.length)return;var o=a,[l,...c]=o;return"number"==typeof l?void(n=e.setTimeout(i.bind(null,c),l)):(i(l),void(n=e.setTimeout(i.bind(null,c))))}"string"==typeof a&&t(a),"object"==typeof a&&t(a),"function"==typeof a&&a()}},{stop:()=>{r=!0},start:e=>{r=!1,n&&(n(),n=null),i(e)},subscribe:e=>(t=e,()=>{t=()=>null}),getTimeoutController:()=>e};var e,t,r,n,i}var Rl=(0,t.createContext)(Ll);function Kl(e,r){var n=(0,t.useContext)(Rl);return(0,t.useMemo)((()=>null!=r?r:n(e)),[e,r,n])}var zl=["children","begin","duration","attributeName","easing","isActive","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart","animationManager"];function Bl(){return Bl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Bl.apply(null,arguments)}function Fl(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Wl(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Fl(Object(r),!0).forEach((function(t){Ul(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Fl(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ul(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class Xl extends t.PureComponent{constructor(e,t){super(e,t),Ul(this,"mounted",!1),Ul(this,"manager",void 0),Ul(this,"stopJSAnimation",null),Ul(this,"unSubscribe",null);var{isActive:r,attributeName:n,from:i,to:a,children:o,duration:l,animationManager:c}=this.props;if(this.manager=c,this.handleStyleChange=this.handleStyleChange.bind(this),this.changeStyle=this.changeStyle.bind(this),!r||l<=0)return this.state={style:{}},void("function"==typeof o&&(this.state={style:a}));if(i){if("function"==typeof o)return void(this.state={style:i});this.state={style:n?{[n]:i}:i}}else this.state={style:{}}}componentDidMount(){var{isActive:e,canBegin:t}=this.props;this.mounted=!0,e&&t&&this.runAnimation(this.props)}componentDidUpdate(e){var{isActive:t,canBegin:r,attributeName:n,shouldReAnimate:i,to:a,from:o}=this.props,{style:l}=this.state;if(r)if(t){if(!(yl()(e.to,a)&&e.canBegin&&e.isActive)){var c=!e.canBegin||!e.isActive;this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var s=c||i?o:e.to;if(this.state&&l){var u={style:n?{[n]:s}:s};(n&&l[n]!==s||!n&&l!==s)&&this.setState(u)}this.runAnimation(Wl(Wl({},this.props),{},{from:s,begin:0}))}}else{var f={style:n?{[n]:a}:a};this.state&&l&&(n&&l[n]!==a||!n&&l!==a)&&this.setState(f)}}componentWillUnmount(){this.mounted=!1;var{onAnimationEnd:e}=this.props;this.unSubscribe&&this.unSubscribe(),this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation(),e&&e()}handleStyleChange(e){this.changeStyle(e)}changeStyle(e){this.mounted&&this.setState({style:e})}runJSAnimation(e){var{from:t,to:r,duration:n,easing:i,begin:a,onAnimationEnd:o,onAnimationStart:l}=e,c=Nl(t,r,wl(i),n,this.changeStyle,this.manager.getTimeoutController());this.manager.start([l,a,()=>{this.stopJSAnimation=c()},n,o])}runAnimation(e){var{begin:t,duration:r,attributeName:n,to:i,easing:a,onAnimationStart:o,onAnimationEnd:l,children:c}=e;if(this.unSubscribe=this.manager.subscribe(this.handleStyleChange),"function"!=typeof a&&"function"!=typeof c&&"spring"!==a){var s=n?{[n]:i}:i,u=Al(Object.keys(s),r,a);this.manager.start([o,t,Wl(Wl({},s),{},{transition:u}),r,l])}else this.runJSAnimation(e)}render(){var e=this.props,{children:r,begin:n,duration:i,attributeName:a,easing:o,isActive:l,from:c,to:s,canBegin:u,onAnimationEnd:f,shouldReAnimate:d,onAnimationReStart:p,animationManager:h}=e,y=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,zl),v=t.Children.count(r),m=this.state.style;if("function"==typeof r)return r(m);if(!l||0===v||i<=0)return r;var g=e=>{var{style:r={},className:n}=e.props;return(0,t.cloneElement)(e,Wl(Wl({},y),{},{style:Wl(Wl({},r),m),className:n}))};return 1===v?g(t.Children.only(r)):t.createElement("div",null,t.Children.map(r,(e=>g(e))))}}function Vl(e){var r,n=Kl(null!==(r=e.attributeName)&&void 0!==r?r:Object.keys(e.to).join(","),e.animationManager);return t.createElement(Xl,Bl({},e,{animationManager:n}))}function $l(){return $l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},$l.apply(null,arguments)}Ul(Xl,"displayName","Animate"),Ul(Xl,"defaultProps",{begin:0,duration:1e3,attributeName:"",easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}});var Hl=(e,t,r,n,i)=>{var a,o=Math.min(Math.abs(r)/2,Math.abs(n)/2),l=n>=0?1:-1,c=r>=0?1:-1,s=n>=0&&r>=0||n<0&&r<0?1:0;if(o>0&&i instanceof Array){for(var u=[0,0,0,0],f=0;f<4;f++)u[f]=i[f]>o?o:i[f];a="M".concat(e,",").concat(t+l*u[0]),u[0]>0&&(a+="A ".concat(u[0],",").concat(u[0],",0,0,").concat(s,",").concat(e+c*u[0],",").concat(t)),a+="L ".concat(e+r-c*u[1],",").concat(t),u[1]>0&&(a+="A ".concat(u[1],",").concat(u[1],",0,0,").concat(s,",\n        ").concat(e+r,",").concat(t+l*u[1])),a+="L ".concat(e+r,",").concat(t+n-l*u[2]),u[2]>0&&(a+="A ".concat(u[2],",").concat(u[2],",0,0,").concat(s,",\n        ").concat(e+r-c*u[2],",").concat(t+n)),a+="L ".concat(e+c*u[3],",").concat(t+n),u[3]>0&&(a+="A ".concat(u[3],",").concat(u[3],",0,0,").concat(s,",\n        ").concat(e,",").concat(t+n-l*u[3])),a+="Z"}else if(o>0&&i===+i&&i>0){var d=Math.min(o,i);a="M ".concat(e,",").concat(t+l*d,"\n            A ").concat(d,",").concat(d,",0,0,").concat(s,",").concat(e+c*d,",").concat(t,"\n            L ").concat(e+r-c*d,",").concat(t,"\n            A ").concat(d,",").concat(d,",0,0,").concat(s,",").concat(e+r,",").concat(t+l*d,"\n            L ").concat(e+r,",").concat(t+n-l*d,"\n            A ").concat(d,",").concat(d,",0,0,").concat(s,",").concat(e+r-c*d,",").concat(t+n,"\n            L ").concat(e+c*d,",").concat(t+n,"\n            A ").concat(d,",").concat(d,",0,0,").concat(s,",").concat(e,",").concat(t+n-l*d," Z")}else a="M ".concat(e,",").concat(t," h ").concat(r," v ").concat(n," h ").concat(-r," Z");return a},ql={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},Yl=e=>{var r=pl(e,ql),i=(0,t.useRef)(null),[a,o]=(0,t.useState)(-1);(0,t.useEffect)((()=>{if(i.current&&i.current.getTotalLength)try{var e=i.current.getTotalLength();e&&o(e)}catch(e){}}),[]);var{x:l,y:c,width:s,height:u,radius:f,className:d}=r,{animationEasing:p,animationDuration:h,animationBegin:y,isAnimationActive:v,isUpdateAnimationActive:m}=r;if(l!==+l||c!==+c||s!==+s||u!==+u||0===s||0===u)return null;var g=n("recharts-rectangle",d);return m?t.createElement(Vl,{canBegin:a>0,from:{width:s,height:u,x:l,y:c},to:{width:s,height:u,x:l,y:c},duration:h,animationEasing:p,isActive:m},(e=>{var{width:n,height:o,x:l,y:c}=e;return t.createElement(Vl,{canBegin:a>0,from:"0px ".concat(-1===a?1:a,"px"),to:"".concat(a,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:h,isActive:v,easing:p},t.createElement("path",$l({},z(r,!0),{className:g,d:Hl(l,c,n,o,f),ref:i})))})):t.createElement("path",$l({},z(r,!0),{className:g,d:Hl(l,c,s,u,f)}))};function Gl(e){var{cx:t,cy:r,radius:n,startAngle:i,endAngle:a}=e;return{points:[Jn(t,r,n,i),Jn(t,r,n,a)],cx:t,cy:r,radius:n,startAngle:i,endAngle:a}}function Zl(){return Zl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Zl.apply(null,arguments)}var Jl=e=>{var{cx:t,cy:r,radius:n,angle:i,sign:a,isExternal:o,cornerRadius:l,cornerIsExternal:c}=e,s=l*(o?1:-1)+n,u=Math.asin(l/s)/Gn,f=c?i:i+a*u,d=c?i-a*u:i;return{center:Jn(t,r,s,f),circleTangency:Jn(t,r,n,f),lineTangency:Jn(t,r,s*Math.cos(u*Gn),d),theta:u}},Ql=e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:a,endAngle:o}=e,l=((e,t)=>s(t-e)*Math.min(Math.abs(t-e),359.999))(a,o),c=a+l,u=Jn(t,r,i,a),f=Jn(t,r,i,c),d="M ".concat(u.x,",").concat(u.y,"\n    A ").concat(i,",").concat(i,",0,\n    ").concat(+(Math.abs(l)>180),",").concat(+(a>c),",\n    ").concat(f.x,",").concat(f.y,"\n  ");if(n>0){var p=Jn(t,r,n,a),h=Jn(t,r,n,c);d+="L ".concat(h.x,",").concat(h.y,"\n            A ").concat(n,",").concat(n,",0,\n            ").concat(+(Math.abs(l)>180),",").concat(+(a<=c),",\n            ").concat(p.x,",").concat(p.y," Z")}else d+="L ".concat(t,",").concat(r," Z");return d},ec={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},tc=e=>{var r=pl(e,ec),{cx:i,cy:a,innerRadius:o,outerRadius:l,cornerRadius:c,forceCornerRadius:u,cornerIsExternal:f,startAngle:d,endAngle:p,className:h}=r;if(l<o||d===p)return null;var y,m=n("recharts-sector",h),g=l-o,b=v(c,g,0,!0);return y=b>0&&Math.abs(d-p)<360?(e=>{var{cx:t,cy:r,innerRadius:n,outerRadius:i,cornerRadius:a,forceCornerRadius:o,cornerIsExternal:l,startAngle:c,endAngle:u}=e,f=s(u-c),{circleTangency:d,lineTangency:p,theta:h}=Jl({cx:t,cy:r,radius:i,angle:c,sign:f,cornerRadius:a,cornerIsExternal:l}),{circleTangency:y,lineTangency:v,theta:m}=Jl({cx:t,cy:r,radius:i,angle:u,sign:-f,cornerRadius:a,cornerIsExternal:l}),g=l?Math.abs(c-u):Math.abs(c-u)-h-m;if(g<0)return o?"M ".concat(p.x,",").concat(p.y,"\n        a").concat(a,",").concat(a,",0,0,1,").concat(2*a,",0\n        a").concat(a,",").concat(a,",0,0,1,").concat(2*-a,",0\n      "):Ql({cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:c,endAngle:u});var b="M ".concat(p.x,",").concat(p.y,"\n    A").concat(a,",").concat(a,",0,0,").concat(+(f<0),",").concat(d.x,",").concat(d.y,"\n    A").concat(i,",").concat(i,",0,").concat(+(g>180),",").concat(+(f<0),",").concat(y.x,",").concat(y.y,"\n    A").concat(a,",").concat(a,",0,0,").concat(+(f<0),",").concat(v.x,",").concat(v.y,"\n  ");if(n>0){var{circleTangency:x,lineTangency:w,theta:O}=Jl({cx:t,cy:r,radius:n,angle:c,sign:f,isExternal:!0,cornerRadius:a,cornerIsExternal:l}),{circleTangency:P,lineTangency:E,theta:A}=Jl({cx:t,cy:r,radius:n,angle:u,sign:-f,isExternal:!0,cornerRadius:a,cornerIsExternal:l}),j=l?Math.abs(c-u):Math.abs(c-u)-O-A;if(j<0&&0===a)return"".concat(b,"L").concat(t,",").concat(r,"Z");b+="L".concat(E.x,",").concat(E.y,"\n      A").concat(a,",").concat(a,",0,0,").concat(+(f<0),",").concat(P.x,",").concat(P.y,"\n      A").concat(n,",").concat(n,",0,").concat(+(j>180),",").concat(+(f>0),",").concat(x.x,",").concat(x.y,"\n      A").concat(a,",").concat(a,",0,0,").concat(+(f<0),",").concat(w.x,",").concat(w.y,"Z")}else b+="L".concat(t,",").concat(r,"Z");return b})({cx:i,cy:a,innerRadius:o,outerRadius:l,cornerRadius:Math.min(b,g/2),forceCornerRadius:u,cornerIsExternal:f,startAngle:d,endAngle:p}):Ql({cx:i,cy:a,innerRadius:o,outerRadius:l,startAngle:d,endAngle:p}),t.createElement("path",Zl({},z(r,!0),{className:m,d:y}))};function rc(e,t,r){var n,i,a,o;if("horizontal"===e)a=n=t.x,i=r.top,o=r.top+r.height;else if("vertical"===e)o=i=t.y,n=r.left,a=r.left+r.width;else if(null!=t.cx&&null!=t.cy){if("centric"!==e)return Gl(t);var{cx:l,cy:c,innerRadius:s,outerRadius:u,angle:f}=t,d=Jn(l,c,s,f),p=Jn(l,c,u,f);n=d.x,i=d.y,a=p.x,o=p.y}return[{x:n,y:i},{x:a,y:o}]}var nc=a(3412),ic=a.n(nc);function ac(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e)}return this}function oc(e,t){switch(arguments.length){case 0:break;case 1:"function"==typeof e?this.interpolator(e):this.range(e);break;default:this.domain(e),"function"==typeof t?this.interpolator(t):this.range(t)}return this}class lc extends Map{constructor(e,t=fc){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const[t,r]of e)this.set(t,r)}get(e){return super.get(cc(this,e))}has(e){return super.has(cc(this,e))}set(e,t){return super.set(sc(this,e),t)}delete(e){return super.delete(uc(this,e))}}Set;function cc({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function sc({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function uc({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function fc(e){return null!==e&&"object"==typeof e?e.valueOf():e}const dc=Symbol("implicit");function pc(){var e=new lc,t=[],r=[],n=dc;function i(i){let a=e.get(i);if(void 0===a){if(n!==dc)return n;e.set(i,a=t.push(i)-1)}return r[a%r.length]}return i.domain=function(r){if(!arguments.length)return t.slice();t=[],e=new lc;for(const n of r)e.has(n)||e.set(n,t.push(n)-1);return i},i.range=function(e){return arguments.length?(r=Array.from(e),i):r.slice()},i.unknown=function(e){return arguments.length?(n=e,i):n},i.copy=function(){return pc(t,r).unknown(n)},ac.apply(i,arguments),i}function hc(){var e,t,r=pc().unknown(void 0),n=r.domain,i=r.range,a=0,o=1,l=!1,c=0,s=0,u=.5;function f(){var r=n().length,f=o<a,d=f?o:a,p=f?a:o;e=(p-d)/Math.max(1,r-c+2*s),l&&(e=Math.floor(e)),d+=(p-d-e*(r-c))*u,t=e*(1-c),l&&(d=Math.round(d),t=Math.round(t));var h=function(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=0|Math.max(0,Math.ceil((t-e)/r)),a=new Array(i);++n<i;)a[n]=e+n*r;return a}(r).map((function(t){return d+e*t}));return i(f?h.reverse():h)}return delete r.unknown,r.domain=function(e){return arguments.length?(n(e),f()):n()},r.range=function(e){return arguments.length?([a,o]=e,a=+a,o=+o,f()):[a,o]},r.rangeRound=function(e){return[a,o]=e,a=+a,o=+o,l=!0,f()},r.bandwidth=function(){return t},r.step=function(){return e},r.round=function(e){return arguments.length?(l=!!e,f()):l},r.padding=function(e){return arguments.length?(c=Math.min(1,s=+e),f()):c},r.paddingInner=function(e){return arguments.length?(c=Math.min(1,e),f()):c},r.paddingOuter=function(e){return arguments.length?(s=+e,f()):s},r.align=function(e){return arguments.length?(u=Math.max(0,Math.min(1,e)),f()):u},r.copy=function(){return hc(n(),[a,o]).round(l).paddingInner(c).paddingOuter(s).align(u)},ac.apply(f(),arguments)}function yc(e){var t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return yc(t())},e}function vc(){return yc(hc.apply(null,arguments).paddingInner(1))}const mc=Math.sqrt(50),gc=Math.sqrt(10),bc=Math.sqrt(2);function xc(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=mc?10:a>=gc?5:a>=bc?2:1;let l,c,s;return i<0?(s=Math.pow(10,-i)/o,l=Math.round(e*s),c=Math.round(t*s),l/s<e&&++l,c/s>t&&--c,s=-s):(s=Math.pow(10,i)*o,l=Math.round(e/s),c=Math.round(t/s),l*s<e&&++l,c*s>t&&--c),c<l&&.5<=r&&r<2?xc(e,t,2*r):[l,c,s]}function wc(e,t,r){if(!((r=+r)>0))return[];if((e=+e)===(t=+t))return[e];const n=t<e,[i,a,o]=n?xc(t,e,r):xc(e,t,r);if(!(a>=i))return[];const l=a-i+1,c=new Array(l);if(n)if(o<0)for(let e=0;e<l;++e)c[e]=(a-e)/-o;else for(let e=0;e<l;++e)c[e]=(a-e)*o;else if(o<0)for(let e=0;e<l;++e)c[e]=(i+e)/-o;else for(let e=0;e<l;++e)c[e]=(i+e)*o;return c}function Oc(e,t,r){return xc(e=+e,t=+t,r=+r)[2]}function Pc(e,t,r){r=+r;const n=(t=+t)<(e=+e),i=n?Oc(t,e,r):Oc(e,t,r);return(n?-1:1)*(i<0?1/-i:i)}function Ec(e,t){return null==e||null==t?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Ac(e,t){return null==e||null==t?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function jc(e){let t,r,n;function i(e,n,i=0,a=e.length){if(i<a){if(0!==t(n,n))return a;do{const t=i+a>>>1;r(e[t],n)<0?i=t+1:a=t}while(i<a)}return i}return 2!==e.length?(t=Ec,r=(t,r)=>Ec(e(t),r),n=(t,r)=>e(t)-r):(t=e===Ec||e===Ac?e:Sc,r=e,n=e),{left:i,center:function(e,t,r=0,a=e.length){const o=i(e,t,r,a-1);return o>r&&n(e[o-1],t)>-n(e[o],t)?o-1:o},right:function(e,n,i=0,a=e.length){if(i<a){if(0!==t(n,n))return a;do{const t=i+a>>>1;r(e[t],n)<=0?i=t+1:a=t}while(i<a)}return i}}}function Sc(){return 0}function kc(e){return null===e?NaN:+e}const Mc=jc(Ec),Tc=Mc.right,Dc=(Mc.left,jc(kc).center,Tc);function Cc(e,t,r){e.prototype=t.prototype=r,r.constructor=e}function Ic(e,t){var r=Object.create(e.prototype);for(var n in t)r[n]=t[n];return r}function Nc(){}var _c=.7,Lc=1/_c,Rc="\\s*([+-]?\\d+)\\s*",Kc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",zc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Bc=/^#([0-9a-f]{3,8})$/,Fc=new RegExp(`^rgb\\(${Rc},${Rc},${Rc}\\)$`),Wc=new RegExp(`^rgb\\(${zc},${zc},${zc}\\)$`),Uc=new RegExp(`^rgba\\(${Rc},${Rc},${Rc},${Kc}\\)$`),Xc=new RegExp(`^rgba\\(${zc},${zc},${zc},${Kc}\\)$`),Vc=new RegExp(`^hsl\\(${Kc},${zc},${zc}\\)$`),$c=new RegExp(`^hsla\\(${Kc},${zc},${zc},${Kc}\\)$`),Hc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function qc(){return this.rgb().formatHex()}function Yc(){return this.rgb().formatRgb()}function Gc(e){var t,r;return e=(e+"").trim().toLowerCase(),(t=Bc.exec(e))?(r=t[1].length,t=parseInt(t[1],16),6===r?Zc(t):3===r?new es(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===r?Jc(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===r?Jc(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=Fc.exec(e))?new es(t[1],t[2],t[3],1):(t=Wc.exec(e))?new es(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=Uc.exec(e))?Jc(t[1],t[2],t[3],t[4]):(t=Xc.exec(e))?Jc(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Vc.exec(e))?os(t[1],t[2]/100,t[3]/100,1):(t=$c.exec(e))?os(t[1],t[2]/100,t[3]/100,t[4]):Hc.hasOwnProperty(e)?Zc(Hc[e]):"transparent"===e?new es(NaN,NaN,NaN,0):null}function Zc(e){return new es(e>>16&255,e>>8&255,255&e,1)}function Jc(e,t,r,n){return n<=0&&(e=t=r=NaN),new es(e,t,r,n)}function Qc(e,t,r,n){return 1===arguments.length?function(e){return e instanceof Nc||(e=Gc(e)),e?new es((e=e.rgb()).r,e.g,e.b,e.opacity):new es}(e):new es(e,t,r,null==n?1:n)}function es(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}function ts(){return`#${as(this.r)}${as(this.g)}${as(this.b)}`}function rs(){const e=ns(this.opacity);return`${1===e?"rgb(":"rgba("}${is(this.r)}, ${is(this.g)}, ${is(this.b)}${1===e?")":`, ${e})`}`}function ns(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function is(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function as(e){return((e=is(e))<16?"0":"")+e.toString(16)}function os(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new cs(e,t,r,n)}function ls(e){if(e instanceof cs)return new cs(e.h,e.s,e.l,e.opacity);if(e instanceof Nc||(e=Gc(e)),!e)return new cs;if(e instanceof cs)return e;var t=(e=e.rgb()).r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,l=a-i,c=(a+i)/2;return l?(o=t===a?(r-n)/l+6*(r<n):r===a?(n-t)/l+2:(t-r)/l+4,l/=c<.5?a+i:2-a-i,o*=60):l=c>0&&c<1?0:o,new cs(o,l,c,e.opacity)}function cs(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}function ss(e){return(e=(e||0)%360)<0?e+360:e}function us(e){return Math.max(0,Math.min(1,e||0))}function fs(e,t,r){return 255*(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)}function ds(e,t,r,n,i){var a=e*e,o=a*e;return((1-3*e+3*a-o)*t+(4-6*a+3*o)*r+(1+3*e+3*a-3*o)*n+o*i)/6}Cc(Nc,Gc,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:qc,formatHex:qc,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ls(this).formatHsl()},formatRgb:Yc,toString:Yc}),Cc(es,Qc,Ic(Nc,{brighter(e){return e=null==e?Lc:Math.pow(Lc,e),new es(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=null==e?_c:Math.pow(_c,e),new es(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new es(is(this.r),is(this.g),is(this.b),ns(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:ts,formatHex:ts,formatHex8:function(){return`#${as(this.r)}${as(this.g)}${as(this.b)}${as(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:rs,toString:rs})),Cc(cs,(function(e,t,r,n){return 1===arguments.length?ls(e):new cs(e,t,r,null==n?1:n)}),Ic(Nc,{brighter(e){return e=null==e?Lc:Math.pow(Lc,e),new cs(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=null==e?_c:Math.pow(_c,e),new cs(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new es(fs(e>=240?e-240:e+120,i,n),fs(e,i,n),fs(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new cs(ss(this.h),us(this.s),us(this.l),ns(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=ns(this.opacity);return`${1===e?"hsl(":"hsla("}${ss(this.h)}, ${100*us(this.s)}%, ${100*us(this.l)}%${1===e?")":`, ${e})`}`}}));const ps=e=>()=>e;function hs(e,t){return function(r){return e+r*t}}function ys(e){return 1==(e=+e)?vs:function(t,r){return r-t?function(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}(t,r,e):ps(isNaN(t)?r:t)}}function vs(e,t){var r=t-e;return r?hs(e,r):ps(isNaN(e)?t:e)}const ms=function e(t){var r=ys(t);function n(e,t){var n=r((e=Qc(e)).r,(t=Qc(t)).r),i=r(e.g,t.g),a=r(e.b,t.b),o=vs(e.opacity,t.opacity);return function(t){return e.r=n(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+""}}return n.gamma=e,n}(1);function gs(e){return function(t){var r,n,i=t.length,a=new Array(i),o=new Array(i),l=new Array(i);for(r=0;r<i;++r)n=Qc(t[r]),a[r]=n.r||0,o[r]=n.g||0,l[r]=n.b||0;return a=e(a),o=e(o),l=e(l),n.opacity=1,function(e){return n.r=a(e),n.g=o(e),n.b=l(e),n+""}}}gs((function(e){var t=e.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,t-1):Math.floor(r*t),i=e[n],a=e[n+1],o=n>0?e[n-1]:2*i-a,l=n<t-1?e[n+2]:2*a-i;return ds((r-n/t)*t,o,i,a,l)}})),gs((function(e){var t=e.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*t),i=e[(n+t-1)%t],a=e[n%t],o=e[(n+1)%t],l=e[(n+2)%t];return ds((r-n/t)*t,i,a,o,l)}}));function bs(e,t){var r,n=t?t.length:0,i=e?Math.min(n,e.length):0,a=new Array(i),o=new Array(n);for(r=0;r<i;++r)a[r]=Ss(e[r],t[r]);for(;r<n;++r)o[r]=t[r];return function(e){for(r=0;r<i;++r)o[r]=a[r](e);return o}}function xs(e,t){var r=new Date;return e=+e,t=+t,function(n){return r.setTime(e*(1-n)+t*n),r}}function ws(e,t){return e=+e,t=+t,function(r){return e*(1-r)+t*r}}function Os(e,t){var r,n={},i={};for(r in null!==e&&"object"==typeof e||(e={}),null!==t&&"object"==typeof t||(t={}),t)r in e?n[r]=Ss(e[r],t[r]):i[r]=t[r];return function(e){for(r in n)i[r]=n[r](e);return i}}var Ps=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Es=new RegExp(Ps.source,"g");function As(e,t){var r,n,i,a=Ps.lastIndex=Es.lastIndex=0,o=-1,l=[],c=[];for(e+="",t+="";(r=Ps.exec(e))&&(n=Es.exec(t));)(i=n.index)>a&&(i=t.slice(a,i),l[o]?l[o]+=i:l[++o]=i),(r=r[0])===(n=n[0])?l[o]?l[o]+=n:l[++o]=n:(l[++o]=null,c.push({i:o,x:ws(r,n)})),a=Es.lastIndex;return a<t.length&&(i=t.slice(a),l[o]?l[o]+=i:l[++o]=i),l.length<2?c[0]?function(e){return function(t){return e(t)+""}}(c[0].x):function(e){return function(){return e}}(t):(t=c.length,function(e){for(var r,n=0;n<t;++n)l[(r=c[n]).i]=r.x(e);return l.join("")})}function js(e,t){t||(t=[]);var r,n=e?Math.min(t.length,e.length):0,i=t.slice();return function(a){for(r=0;r<n;++r)i[r]=e[r]*(1-a)+t[r]*a;return i}}function Ss(e,t){var r,n=typeof t;return null==t||"boolean"===n?ps(t):("number"===n?ws:"string"===n?(r=Gc(t))?(t=r,ms):As:t instanceof Gc?ms:t instanceof Date?xs:function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}(t)?js:Array.isArray(t)?bs:"function"!=typeof t.valueOf&&"function"!=typeof t.toString||isNaN(t)?Os:ws)(e,t)}function ks(e,t){return e=+e,t=+t,function(r){return Math.round(e*(1-r)+t*r)}}function Ms(e){return+e}var Ts=[0,1];function Ds(e){return e}function Cs(e,t){return(t-=e=+e)?function(r){return(r-e)/t}:function(e){return function(){return e}}(isNaN(t)?NaN:.5)}function Is(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i<n?(n=Cs(i,n),a=r(o,a)):(n=Cs(n,i),a=r(a,o)),function(e){return a(n(e))}}function Ns(e,t,r){var n=Math.min(e.length,t.length)-1,i=new Array(n),a=new Array(n),o=-1;for(e[n]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++o<n;)i[o]=Cs(e[o],e[o+1]),a[o]=r(t[o],t[o+1]);return function(t){var r=Dc(e,t,1,n)-1;return a[r](i[r](t))}}function _s(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function Ls(){var e,t,r,n,i,a,o=Ts,l=Ts,c=Ss,s=Ds;function u(){var e=Math.min(o.length,l.length);return s!==Ds&&(s=function(e,t){var r;return e>t&&(r=e,e=t,t=r),function(r){return Math.max(e,Math.min(t,r))}}(o[0],o[e-1])),n=e>2?Ns:Is,i=a=null,f}function f(t){return null==t||isNaN(t=+t)?r:(i||(i=n(o.map(e),l,c)))(e(s(t)))}return f.invert=function(r){return s(t((a||(a=n(l,o.map(e),ws)))(r)))},f.domain=function(e){return arguments.length?(o=Array.from(e,Ms),u()):o.slice()},f.range=function(e){return arguments.length?(l=Array.from(e),u()):l.slice()},f.rangeRound=function(e){return l=Array.from(e),c=ks,u()},f.clamp=function(e){return arguments.length?(s=!!e||Ds,u()):s!==Ds},f.interpolate=function(e){return arguments.length?(c=e,u()):c},f.unknown=function(e){return arguments.length?(r=e,f):r},function(r,n){return e=r,t=n,u()}}function Rs(){return Ls()(Ds,Ds)}var Ks,zs=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Bs(e){if(!(t=zs.exec(e)))throw new Error("invalid format: "+e);var t;return new Fs({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function Fs(e){this.fill=void 0===e.fill?" ":e.fill+"",this.align=void 0===e.align?">":e.align+"",this.sign=void 0===e.sign?"-":e.sign+"",this.symbol=void 0===e.symbol?"":e.symbol+"",this.zero=!!e.zero,this.width=void 0===e.width?void 0:+e.width,this.comma=!!e.comma,this.precision=void 0===e.precision?void 0:+e.precision,this.trim=!!e.trim,this.type=void 0===e.type?"":e.type+""}function Ws(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Us(e){return(e=Ws(Math.abs(e)))?e[1]:NaN}function Xs(e,t){var r=Ws(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}Bs.prototype=Fs.prototype,Fs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const Vs={"%":(e,t)=>(100*e).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:function(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)},e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>Xs(100*e,t),r:Xs,s:function(e,t){var r=Ws(e,t);if(!r)return e+"";var n=r[0],i=r[1],a=i-(Ks=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+Ws(e,Math.max(0,t+a-1))[0]},X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function $s(e){return e}var Hs,qs,Ys,Gs=Array.prototype.map,Zs=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Js(e){var t,r,n=void 0===e.grouping||void 0===e.thousands?$s:(t=Gs.call(e.grouping,Number),r=e.thousands+"",function(e,n){for(var i=e.length,a=[],o=0,l=t[0],c=0;i>0&&l>0&&(c+l+1>n&&(l=Math.max(1,n-c)),a.push(e.substring(i-=l,i+l)),!((c+=l+1)>n));)l=t[o=(o+1)%t.length];return a.reverse().join(r)}),i=void 0===e.currency?"":e.currency[0]+"",a=void 0===e.currency?"":e.currency[1]+"",o=void 0===e.decimal?".":e.decimal+"",l=void 0===e.numerals?$s:function(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}(Gs.call(e.numerals,String)),c=void 0===e.percent?"%":e.percent+"",s=void 0===e.minus?"−":e.minus+"",u=void 0===e.nan?"NaN":e.nan+"";function f(e){var t=(e=Bs(e)).fill,r=e.align,f=e.sign,d=e.symbol,p=e.zero,h=e.width,y=e.comma,v=e.precision,m=e.trim,g=e.type;"n"===g?(y=!0,g="g"):Vs[g]||(void 0===v&&(v=12),m=!0,g="g"),(p||"0"===t&&"="===r)&&(p=!0,t="0",r="=");var b="$"===d?i:"#"===d&&/[boxX]/.test(g)?"0"+g.toLowerCase():"",x="$"===d?a:/[%p]/.test(g)?c:"",w=Vs[g],O=/[defgprs%]/.test(g);function P(e){var i,a,c,d=b,P=x;if("c"===g)P=w(e)+P,e="";else{var E=(e=+e)<0||1/e<0;if(e=isNaN(e)?u:w(Math.abs(e),v),m&&(e=function(e){e:for(var t,r=e.length,n=1,i=-1;n<r;++n)switch(e[n]){case".":i=t=n;break;case"0":0===i&&(i=n),t=n;break;default:if(!+e[n])break e;i>0&&(i=0)}return i>0?e.slice(0,i)+e.slice(t+1):e}(e)),E&&0==+e&&"+"!==f&&(E=!1),d=(E?"("===f?f:s:"-"===f||"("===f?"":f)+d,P=("s"===g?Zs[8+Ks/3]:"")+P+(E&&"("===f?")":""),O)for(i=-1,a=e.length;++i<a;)if(48>(c=e.charCodeAt(i))||c>57){P=(46===c?o+e.slice(i+1):e.slice(i))+P,e=e.slice(0,i);break}}y&&!p&&(e=n(e,1/0));var A=d.length+e.length+P.length,j=A<h?new Array(h-A+1).join(t):"";switch(y&&p&&(e=n(j+e,j.length?h-P.length:1/0),j=""),r){case"<":e=d+e+P+j;break;case"=":e=d+j+e+P;break;case"^":e=j.slice(0,A=j.length>>1)+d+e+P+j.slice(A);break;default:e=j+d+e+P}return l(e)}return v=void 0===v?6:/[gprs]/.test(g)?Math.max(1,Math.min(21,v)):Math.max(0,Math.min(20,v)),P.toString=function(){return e+""},P}return{format:f,formatPrefix:function(e,t){var r=f(((e=Bs(e)).type="f",e)),n=3*Math.max(-8,Math.min(8,Math.floor(Us(t)/3))),i=Math.pow(10,-n),a=Zs[8+n/3];return function(e){return r(i*e)+a}}}}function Qs(e,t,r,n){var i,a=Pc(e,t,r);switch((n=Bs(null==n?",f":n)).type){case"s":var o=Math.max(Math.abs(e),Math.abs(t));return null!=n.precision||isNaN(i=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Us(t)/3)))-Us(Math.abs(e)))}(a,o))||(n.precision=i),Ys(n,o);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(i=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Us(t)-Us(e))+1}(a,Math.max(Math.abs(e),Math.abs(t))))||(n.precision=i-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(i=function(e){return Math.max(0,-Us(Math.abs(e)))}(a))||(n.precision=i-2*("%"===n.type))}return qs(n)}function eu(e){var t=e.domain;return e.ticks=function(e){var r=t();return wc(r[0],r[r.length-1],null==e?10:e)},e.tickFormat=function(e,r){var n=t();return Qs(n[0],n[n.length-1],null==e?10:e,r)},e.nice=function(r){null==r&&(r=10);var n,i,a=t(),o=0,l=a.length-1,c=a[o],s=a[l],u=10;for(s<c&&(i=c,c=s,s=i,i=o,o=l,l=i);u-- >0;){if((i=Oc(c,s,r))===n)return a[o]=c,a[l]=s,t(a);if(i>0)c=Math.floor(c/i)*i,s=Math.ceil(s/i)*i;else{if(!(i<0))break;c=Math.ceil(c*i)/i,s=Math.floor(s*i)/i}n=i}return e},e}function tu(){var e=Rs();return e.copy=function(){return _s(e,tu())},ac.apply(e,arguments),eu(e)}function ru(e){var t;function r(e){return null==e||isNaN(e=+e)?t:e}return r.invert=r,r.domain=r.range=function(t){return arguments.length?(e=Array.from(t,Ms),r):e.slice()},r.unknown=function(e){return arguments.length?(t=e,r):t},r.copy=function(){return ru(e).unknown(t)},e=arguments.length?Array.from(e,Ms):[0,1],eu(r)}function nu(e,t){var r,n=0,i=(e=e.slice()).length-1,a=e[n],o=e[i];return o<a&&(r=n,n=i,i=r,r=a,a=o,o=r),e[n]=t.floor(a),e[i]=t.ceil(o),e}function iu(e){return Math.log(e)}function au(e){return Math.exp(e)}function ou(e){return-Math.log(-e)}function lu(e){return-Math.exp(-e)}function cu(e){return isFinite(e)?+("1e"+e):e<0?0:e}function su(e){return(t,r)=>-e(-t,r)}function uu(e){const t=e(iu,au),r=t.domain;let n,i,a=10;function o(){return n=function(e){return e===Math.E?Math.log:10===e&&Math.log10||2===e&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}(a),i=function(e){return 10===e?cu:e===Math.E?Math.exp:t=>Math.pow(e,t)}(a),r()[0]<0?(n=su(n),i=su(i),e(ou,lu)):e(iu,au),t}return t.base=function(e){return arguments.length?(a=+e,o()):a},t.domain=function(e){return arguments.length?(r(e),o()):r()},t.ticks=e=>{const t=r();let o=t[0],l=t[t.length-1];const c=l<o;c&&([o,l]=[l,o]);let s,u,f=n(o),d=n(l);const p=null==e?10:+e;let h=[];if(!(a%1)&&d-f<p){if(f=Math.floor(f),d=Math.ceil(d),o>0){for(;f<=d;++f)for(s=1;s<a;++s)if(u=f<0?s/i(-f):s*i(f),!(u<o)){if(u>l)break;h.push(u)}}else for(;f<=d;++f)for(s=a-1;s>=1;--s)if(u=f>0?s/i(-f):s*i(f),!(u<o)){if(u>l)break;h.push(u)}2*h.length<p&&(h=wc(o,l,p))}else h=wc(f,d,Math.min(d-f,p)).map(i);return c?h.reverse():h},t.tickFormat=(e,r)=>{if(null==e&&(e=10),null==r&&(r=10===a?"s":","),"function"!=typeof r&&(a%1||null!=(r=Bs(r)).precision||(r.trim=!0),r=qs(r)),e===1/0)return r;const o=Math.max(1,a*e/t.ticks().length);return e=>{let t=e/i(Math.round(n(e)));return t*a<a-.5&&(t*=a),t<=o?r(e):""}},t.nice=()=>r(nu(r(),{floor:e=>i(Math.floor(n(e))),ceil:e=>i(Math.ceil(n(e)))})),t}function fu(){const e=uu(Ls()).domain([1,10]);return e.copy=()=>_s(e,fu()).base(e.base()),ac.apply(e,arguments),e}function du(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function pu(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function hu(e){var t=1,r=e(du(t),pu(t));return r.constant=function(r){return arguments.length?e(du(t=+r),pu(t)):t},eu(r)}function yu(){var e=hu(Ls());return e.copy=function(){return _s(e,yu()).constant(e.constant())},ac.apply(e,arguments)}function vu(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function mu(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function gu(e){return e<0?-e*e:e*e}function bu(e){var t=e(Ds,Ds),r=1;return t.exponent=function(t){return arguments.length?1===(r=+t)?e(Ds,Ds):.5===r?e(mu,gu):e(vu(r),vu(1/r)):r},eu(t)}function xu(){var e=bu(Ls());return e.copy=function(){return _s(e,xu()).exponent(e.exponent())},ac.apply(e,arguments),e}function wu(){return xu.apply(null,arguments).exponent(.5)}function Ou(e){return Math.sign(e)*e*e}function Pu(){var e,t=Rs(),r=[0,1],n=!1;function i(r){var i=function(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}(t(r));return isNaN(i)?e:n?Math.round(i):i}return i.invert=function(e){return t.invert(Ou(e))},i.domain=function(e){return arguments.length?(t.domain(e),i):t.domain()},i.range=function(e){return arguments.length?(t.range((r=Array.from(e,Ms)).map(Ou)),i):r.slice()},i.rangeRound=function(e){return i.range(e).round(!0)},i.round=function(e){return arguments.length?(n=!!e,i):n},i.clamp=function(e){return arguments.length?(t.clamp(e),i):t.clamp()},i.unknown=function(t){return arguments.length?(e=t,i):e},i.copy=function(){return Pu(t.domain(),r).round(n).clamp(t.clamp()).unknown(e)},ac.apply(i,arguments),eu(i)}function Eu(e,t){let r;if(void 0===t)for(const t of e)null!=t&&(r<t||void 0===r&&t>=t)&&(r=t);else{let n=-1;for(let i of e)null!=(i=t(i,++n,e))&&(r<i||void 0===r&&i>=i)&&(r=i)}return r}function Au(e,t){let r;if(void 0===t)for(const t of e)null!=t&&(r>t||void 0===r&&t>=t)&&(r=t);else{let n=-1;for(let i of e)null!=(i=t(i,++n,e))&&(r>i||void 0===r&&i>=i)&&(r=i)}return r}function ju(e=Ec){if(e===Ec)return Su;if("function"!=typeof e)throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||0===n?n:(0===e(r,r))-(0===e(t,t))}}function Su(e,t){return(null==e||!(e>=e))-(null==t||!(t>=t))||(e<t?-1:e>t?1:0)}function ku(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=void 0===i?Su:ju(i);n>r;){if(n-r>600){const a=n-r+1,o=t-r+1,l=Math.log(a),c=.5*Math.exp(2*l/3),s=.5*Math.sqrt(l*c*(a-c)/a)*(o-a/2<0?-1:1);ku(e,t,Math.max(r,Math.floor(t-o*c/a+s)),Math.min(n,Math.floor(t+(a-o)*c/a+s)),i)}const a=e[t];let o=r,l=n;for(Mu(e,r,t),i(e[n],a)>0&&Mu(e,r,n);o<l;){for(Mu(e,o,l),++o,--l;i(e[o],a)<0;)++o;for(;i(e[l],a)>0;)--l}0===i(e[r],a)?Mu(e,r,l):(++l,Mu(e,l,n)),l<=t&&(r=l+1),t<=l&&(n=l-1)}return e}function Mu(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function Tu(e,t,r){if(e=Float64Array.from(function*(e,t){if(void 0===t)for(let t of e)null!=t&&(t=+t)>=t&&(yield t);else{let r=-1;for(let n of e)null!=(n=t(n,++r,e))&&(n=+n)>=n&&(yield n)}}(e,r)),(n=e.length)&&!isNaN(t=+t)){if(t<=0||n<2)return Au(e);if(t>=1)return Eu(e);var n,i=(n-1)*t,a=Math.floor(i),o=Eu(ku(e,a).subarray(0,a+1));return o+(Au(e.subarray(a+1))-o)*(i-a)}}function Du(e,t,r=kc){if((n=e.length)&&!isNaN(t=+t)){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e);return o+(+r(e[a+1],a+1,e)-o)*(i-a)}}function Cu(){var e,t=[],r=[],n=[];function i(){var e=0,i=Math.max(1,r.length);for(n=new Array(i-1);++e<i;)n[e-1]=Du(t,e/i);return a}function a(t){return null==t||isNaN(t=+t)?e:r[Dc(n,t)]}return a.invertExtent=function(e){var i=r.indexOf(e);return i<0?[NaN,NaN]:[i>0?n[i-1]:t[0],i<n.length?n[i]:t[t.length-1]]},a.domain=function(e){if(!arguments.length)return t.slice();t=[];for(let r of e)null==r||isNaN(r=+r)||t.push(r);return t.sort(Ec),i()},a.range=function(e){return arguments.length?(r=Array.from(e),i()):r.slice()},a.unknown=function(t){return arguments.length?(e=t,a):e},a.quantiles=function(){return n.slice()},a.copy=function(){return Cu().domain(t).range(r).unknown(e)},ac.apply(a,arguments)}function Iu(){var e,t=0,r=1,n=1,i=[.5],a=[0,1];function o(t){return null!=t&&t<=t?a[Dc(i,t,0,n)]:e}function l(){var e=-1;for(i=new Array(n);++e<n;)i[e]=((e+1)*r-(e-n)*t)/(n+1);return o}return o.domain=function(e){return arguments.length?([t,r]=e,t=+t,r=+r,l()):[t,r]},o.range=function(e){return arguments.length?(n=(a=Array.from(e)).length-1,l()):a.slice()},o.invertExtent=function(e){var o=a.indexOf(e);return o<0?[NaN,NaN]:o<1?[t,i[0]]:o>=n?[i[n-1],r]:[i[o-1],i[o]]},o.unknown=function(t){return arguments.length?(e=t,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return Iu().domain([t,r]).range(a).unknown(e)},ac.apply(eu(o),arguments)}function Nu(){var e,t=[.5],r=[0,1],n=1;function i(i){return null!=i&&i<=i?r[Dc(t,i,0,n)]:e}return i.domain=function(e){return arguments.length?(t=Array.from(e),n=Math.min(t.length,r.length-1),i):t.slice()},i.range=function(e){return arguments.length?(r=Array.from(e),n=Math.min(t.length,r.length-1),i):r.slice()},i.invertExtent=function(e){var n=r.indexOf(e);return[t[n-1],t[n]]},i.unknown=function(t){return arguments.length?(e=t,i):e},i.copy=function(){return Nu().domain(t).range(r).unknown(e)},ac.apply(i,arguments)}Hs=Js({thousands:",",grouping:[3],currency:["$",""]}),qs=Hs.format,Ys=Hs.formatPrefix;const _u=1e3,Lu=6e4,Ru=36e5,Ku=864e5,zu=6048e5,Bu=2592e6,Fu=31536e6,Wu=new Date,Uu=new Date;function Xu(e,t,r,n){function i(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return i.floor=t=>(e(t=new Date(+t)),t),i.ceil=r=>(e(r=new Date(r-1)),t(r,1),e(r),r),i.round=e=>{const t=i(e),r=i.ceil(e);return e-t<r-e?t:r},i.offset=(e,r)=>(t(e=new Date(+e),null==r?1:Math.floor(r)),e),i.range=(r,n,a)=>{const o=[];if(r=i.ceil(r),a=null==a?1:Math.floor(a),!(r<n&&a>0))return o;let l;do{o.push(l=new Date(+r)),t(r,a),e(r)}while(l<r&&r<n);return o},i.filter=r=>Xu((t=>{if(t>=t)for(;e(t),!r(t);)t.setTime(t-1)}),((e,n)=>{if(e>=e)if(n<0)for(;++n<=0;)for(;t(e,-1),!r(e););else for(;--n>=0;)for(;t(e,1),!r(e););})),r&&(i.count=(t,n)=>(Wu.setTime(+t),Uu.setTime(+n),e(Wu),e(Uu),Math.floor(r(Wu,Uu))),i.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?i.filter(n?t=>n(t)%e==0:t=>i.count(0,t)%e==0):i:null)),i}const Vu=Xu((()=>{}),((e,t)=>{e.setTime(+e+t)}),((e,t)=>t-e));Vu.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?Xu((t=>{t.setTime(Math.floor(t/e)*e)}),((t,r)=>{t.setTime(+t+r*e)}),((t,r)=>(r-t)/e)):Vu:null);Vu.range;const $u=Xu((e=>{e.setTime(e-e.getMilliseconds())}),((e,t)=>{e.setTime(+e+t*_u)}),((e,t)=>(t-e)/_u),(e=>e.getUTCSeconds())),Hu=($u.range,Xu((e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*_u)}),((e,t)=>{e.setTime(+e+t*Lu)}),((e,t)=>(t-e)/Lu),(e=>e.getMinutes()))),qu=(Hu.range,Xu((e=>{e.setUTCSeconds(0,0)}),((e,t)=>{e.setTime(+e+t*Lu)}),((e,t)=>(t-e)/Lu),(e=>e.getUTCMinutes()))),Yu=(qu.range,Xu((e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*_u-e.getMinutes()*Lu)}),((e,t)=>{e.setTime(+e+t*Ru)}),((e,t)=>(t-e)/Ru),(e=>e.getHours()))),Gu=(Yu.range,Xu((e=>{e.setUTCMinutes(0,0,0)}),((e,t)=>{e.setTime(+e+t*Ru)}),((e,t)=>(t-e)/Ru),(e=>e.getUTCHours()))),Zu=(Gu.range,Xu((e=>e.setHours(0,0,0,0)),((e,t)=>e.setDate(e.getDate()+t)),((e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Lu)/Ku),(e=>e.getDate()-1))),Ju=(Zu.range,Xu((e=>{e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+t)}),((e,t)=>(t-e)/Ku),(e=>e.getUTCDate()-1))),Qu=(Ju.range,Xu((e=>{e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+t)}),((e,t)=>(t-e)/Ku),(e=>Math.floor(e/Ku))));Qu.range;function ef(e){return Xu((t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)}),((e,t)=>{e.setDate(e.getDate()+7*t)}),((e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Lu)/zu))}const tf=ef(0),rf=ef(1),nf=ef(2),af=ef(3),of=ef(4),lf=ef(5),cf=ef(6);tf.range,rf.range,nf.range,af.range,of.range,lf.range,cf.range;function sf(e){return Xu((t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+7*t)}),((e,t)=>(t-e)/zu))}const uf=sf(0),ff=sf(1),df=sf(2),pf=sf(3),hf=sf(4),yf=sf(5),vf=sf(6),mf=(uf.range,ff.range,df.range,pf.range,hf.range,yf.range,vf.range,Xu((e=>{e.setDate(1),e.setHours(0,0,0,0)}),((e,t)=>{e.setMonth(e.getMonth()+t)}),((e,t)=>t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())),(e=>e.getMonth()))),gf=(mf.range,Xu((e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)}),((e,t)=>t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())),(e=>e.getUTCMonth()))),bf=(gf.range,Xu((e=>{e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,t)=>{e.setFullYear(e.getFullYear()+t)}),((e,t)=>t.getFullYear()-e.getFullYear()),(e=>e.getFullYear())));bf.every=e=>isFinite(e=Math.floor(e))&&e>0?Xu((t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,r)=>{t.setFullYear(t.getFullYear()+r*e)})):null;bf.range;const xf=Xu((e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)}),((e,t)=>t.getUTCFullYear()-e.getUTCFullYear()),(e=>e.getUTCFullYear()));xf.every=e=>isFinite(e=Math.floor(e))&&e>0?Xu((t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)})):null;xf.range;function wf(e,t,r,n,i,a){const o=[[$u,1,_u],[$u,5,5e3],[$u,15,15e3],[$u,30,3e4],[a,1,Lu],[a,5,3e5],[a,15,9e5],[a,30,18e5],[i,1,Ru],[i,3,108e5],[i,6,216e5],[i,12,432e5],[n,1,Ku],[n,2,1728e5],[r,1,zu],[t,1,Bu],[t,3,7776e6],[e,1,Fu]];function l(t,r,n){const i=Math.abs(r-t)/n,a=jc((([,,e])=>e)).right(o,i);if(a===o.length)return e.every(Pc(t/Fu,r/Fu,n));if(0===a)return Vu.every(Math.max(Pc(t,r,n),1));const[l,c]=o[i/o[a-1][2]<o[a][2]/i?a-1:a];return l.every(c)}return[function(e,t,r){const n=t<e;n&&([e,t]=[t,e]);const i=r&&"function"==typeof r.range?r:l(e,t,r),a=i?i.range(e,+t+1):[];return n?a.reverse():a},l]}const[Of,Pf]=wf(xf,gf,uf,Qu,Gu,qu),[Ef,Af]=wf(bf,mf,tf,Zu,Yu,Hu);function jf(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function Sf(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function kf(e,t,r){return{y:e,m:t,d:r,H:0,M:0,S:0,L:0}}var Mf,Tf,Df,Cf={"-":"",_:" ",0:"0"},If=/^\s*\d+/,Nf=/^%/,_f=/[\\^$*+?|[\]().{}]/g;function Lf(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a<r?new Array(r-a+1).join(t)+i:i)}function Rf(e){return e.replace(_f,"\\$&")}function Kf(e){return new RegExp("^(?:"+e.map(Rf).join("|")+")","i")}function zf(e){return new Map(e.map(((e,t)=>[e.toLowerCase(),t])))}function Bf(e,t,r){var n=If.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function Ff(e,t,r){var n=If.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function Wf(e,t,r){var n=If.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function Uf(e,t,r){var n=If.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function Xf(e,t,r){var n=If.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function Vf(e,t,r){var n=If.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function $f(e,t,r){var n=If.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function Hf(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function qf(e,t,r){var n=If.exec(t.slice(r,r+1));return n?(e.q=3*n[0]-3,r+n[0].length):-1}function Yf(e,t,r){var n=If.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function Gf(e,t,r){var n=If.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function Zf(e,t,r){var n=If.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function Jf(e,t,r){var n=If.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function Qf(e,t,r){var n=If.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function ed(e,t,r){var n=If.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function td(e,t,r){var n=If.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function rd(e,t,r){var n=If.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function nd(e,t,r){var n=Nf.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function id(e,t,r){var n=If.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function ad(e,t,r){var n=If.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function od(e,t){return Lf(e.getDate(),t,2)}function ld(e,t){return Lf(e.getHours(),t,2)}function cd(e,t){return Lf(e.getHours()%12||12,t,2)}function sd(e,t){return Lf(1+Zu.count(bf(e),e),t,3)}function ud(e,t){return Lf(e.getMilliseconds(),t,3)}function fd(e,t){return ud(e,t)+"000"}function dd(e,t){return Lf(e.getMonth()+1,t,2)}function pd(e,t){return Lf(e.getMinutes(),t,2)}function hd(e,t){return Lf(e.getSeconds(),t,2)}function yd(e){var t=e.getDay();return 0===t?7:t}function vd(e,t){return Lf(tf.count(bf(e)-1,e),t,2)}function md(e){var t=e.getDay();return t>=4||0===t?of(e):of.ceil(e)}function gd(e,t){return e=md(e),Lf(of.count(bf(e),e)+(4===bf(e).getDay()),t,2)}function bd(e){return e.getDay()}function xd(e,t){return Lf(rf.count(bf(e)-1,e),t,2)}function wd(e,t){return Lf(e.getFullYear()%100,t,2)}function Od(e,t){return Lf((e=md(e)).getFullYear()%100,t,2)}function Pd(e,t){return Lf(e.getFullYear()%1e4,t,4)}function Ed(e,t){var r=e.getDay();return Lf((e=r>=4||0===r?of(e):of.ceil(e)).getFullYear()%1e4,t,4)}function Ad(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+Lf(t/60|0,"0",2)+Lf(t%60,"0",2)}function jd(e,t){return Lf(e.getUTCDate(),t,2)}function Sd(e,t){return Lf(e.getUTCHours(),t,2)}function kd(e,t){return Lf(e.getUTCHours()%12||12,t,2)}function Md(e,t){return Lf(1+Ju.count(xf(e),e),t,3)}function Td(e,t){return Lf(e.getUTCMilliseconds(),t,3)}function Dd(e,t){return Td(e,t)+"000"}function Cd(e,t){return Lf(e.getUTCMonth()+1,t,2)}function Id(e,t){return Lf(e.getUTCMinutes(),t,2)}function Nd(e,t){return Lf(e.getUTCSeconds(),t,2)}function _d(e){var t=e.getUTCDay();return 0===t?7:t}function Ld(e,t){return Lf(uf.count(xf(e)-1,e),t,2)}function Rd(e){var t=e.getUTCDay();return t>=4||0===t?hf(e):hf.ceil(e)}function Kd(e,t){return e=Rd(e),Lf(hf.count(xf(e),e)+(4===xf(e).getUTCDay()),t,2)}function zd(e){return e.getUTCDay()}function Bd(e,t){return Lf(ff.count(xf(e)-1,e),t,2)}function Fd(e,t){return Lf(e.getUTCFullYear()%100,t,2)}function Wd(e,t){return Lf((e=Rd(e)).getUTCFullYear()%100,t,2)}function Ud(e,t){return Lf(e.getUTCFullYear()%1e4,t,4)}function Xd(e,t){var r=e.getUTCDay();return Lf((e=r>=4||0===r?hf(e):hf.ceil(e)).getUTCFullYear()%1e4,t,4)}function Vd(){return"+0000"}function $d(){return"%"}function Hd(e){return+e}function qd(e){return Math.floor(+e/1e3)}function Yd(e){return new Date(e)}function Gd(e){return e instanceof Date?+e:+new Date(+e)}function Zd(e,t,r,n,i,a,o,l,c,s){var u=Rs(),f=u.invert,d=u.domain,p=s(".%L"),h=s(":%S"),y=s("%I:%M"),v=s("%I %p"),m=s("%a %d"),g=s("%b %d"),b=s("%B"),x=s("%Y");function w(e){return(c(e)<e?p:l(e)<e?h:o(e)<e?y:a(e)<e?v:n(e)<e?i(e)<e?m:g:r(e)<e?b:x)(e)}return u.invert=function(e){return new Date(f(e))},u.domain=function(e){return arguments.length?d(Array.from(e,Gd)):d().map(Yd)},u.ticks=function(t){var r=d();return e(r[0],r[r.length-1],null==t?10:t)},u.tickFormat=function(e,t){return null==t?w:s(t)},u.nice=function(e){var r=d();return e&&"function"==typeof e.range||(e=t(r[0],r[r.length-1],null==e?10:e)),e?d(nu(r,e)):u},u.copy=function(){return _s(u,Zd(e,t,r,n,i,a,o,l,c,s))},u}function Jd(){return ac.apply(Zd(Ef,Af,bf,mf,tf,Zu,Yu,Hu,$u,Tf).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Qd(){return ac.apply(Zd(Of,Pf,xf,gf,uf,Ju,Gu,qu,$u,Df).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function ep(){var e,t,r,n,i,a=0,o=1,l=Ds,c=!1;function s(t){return null==t||isNaN(t=+t)?i:l(0===r?.5:(t=(n(t)-e)*r,c?Math.max(0,Math.min(1,t)):t))}function u(e){return function(t){var r,n;return arguments.length?([r,n]=t,l=e(r,n),s):[l(0),l(1)]}}return s.domain=function(i){return arguments.length?([a,o]=i,e=n(a=+a),t=n(o=+o),r=e===t?0:1/(t-e),s):[a,o]},s.clamp=function(e){return arguments.length?(c=!!e,s):c},s.interpolator=function(e){return arguments.length?(l=e,s):l},s.range=u(Ss),s.rangeRound=u(ks),s.unknown=function(e){return arguments.length?(i=e,s):i},function(i){return n=i,e=i(a),t=i(o),r=e===t?0:1/(t-e),s}}function tp(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function rp(){var e=eu(ep()(Ds));return e.copy=function(){return tp(e,rp())},oc.apply(e,arguments)}function np(){var e=uu(ep()).domain([1,10]);return e.copy=function(){return tp(e,np()).base(e.base())},oc.apply(e,arguments)}function ip(){var e=hu(ep());return e.copy=function(){return tp(e,ip()).constant(e.constant())},oc.apply(e,arguments)}function ap(){var e=bu(ep());return e.copy=function(){return tp(e,ap()).exponent(e.exponent())},oc.apply(e,arguments)}function op(){return ap.apply(null,arguments).exponent(.5)}function lp(){var e=[],t=Ds;function r(r){if(null!=r&&!isNaN(r=+r))return t((Dc(e,r,1)-1)/(e.length-1))}return r.domain=function(t){if(!arguments.length)return e.slice();e=[];for(let r of t)null==r||isNaN(r=+r)||e.push(r);return e.sort(Ec),r},r.interpolator=function(e){return arguments.length?(t=e,r):t},r.range=function(){return e.map(((r,n)=>t(n/(e.length-1))))},r.quantiles=function(t){return Array.from({length:t+1},((r,n)=>Tu(e,n/t)))},r.copy=function(){return lp(t).domain(e)},oc.apply(r,arguments)}function cp(){var e,t,r,n,i,a,o,l=0,c=.5,s=1,u=1,f=Ds,d=!1;function p(e){return isNaN(e=+e)?o:(e=.5+((e=+a(e))-t)*(u*e<u*t?n:i),f(d?Math.max(0,Math.min(1,e)):e))}function h(e){return function(t){var r,n,i;return arguments.length?([r,n,i]=t,f=function(e,t){void 0===t&&(t=e,e=Ss);for(var r=0,n=t.length-1,i=t[0],a=new Array(n<0?0:n);r<n;)a[r]=e(i,i=t[++r]);return function(e){var t=Math.max(0,Math.min(n-1,Math.floor(e*=n)));return a[t](e-t)}}(e,[r,n,i]),p):[f(0),f(.5),f(1)]}}return p.domain=function(o){return arguments.length?([l,c,s]=o,e=a(l=+l),t=a(c=+c),r=a(s=+s),n=e===t?0:.5/(t-e),i=t===r?0:.5/(r-t),u=t<e?-1:1,p):[l,c,s]},p.clamp=function(e){return arguments.length?(d=!!e,p):d},p.interpolator=function(e){return arguments.length?(f=e,p):f},p.range=h(Ss),p.rangeRound=h(ks),p.unknown=function(e){return arguments.length?(o=e,p):o},function(o){return a=o,e=o(l),t=o(c),r=o(s),n=e===t?0:.5/(t-e),i=t===r?0:.5/(r-t),u=t<e?-1:1,p}}function sp(){var e=eu(cp()(Ds));return e.copy=function(){return tp(e,sp())},oc.apply(e,arguments)}function up(){var e=uu(cp()).domain([.1,1,10]);return e.copy=function(){return tp(e,up()).base(e.base())},oc.apply(e,arguments)}function fp(){var e=hu(cp());return e.copy=function(){return tp(e,fp()).constant(e.constant())},oc.apply(e,arguments)}function dp(){var e=bu(cp());return e.copy=function(){return tp(e,dp()).exponent(e.exponent())},oc.apply(e,arguments)}function pp(){return dp.apply(null,arguments).exponent(.5)}!function(e){Mf=function(e){var t=e.dateTime,r=e.date,n=e.time,i=e.periods,a=e.days,o=e.shortDays,l=e.months,c=e.shortMonths,s=Kf(i),u=zf(i),f=Kf(a),d=zf(a),p=Kf(o),h=zf(o),y=Kf(l),v=zf(l),m=Kf(c),g=zf(c),b={a:function(e){return o[e.getDay()]},A:function(e){return a[e.getDay()]},b:function(e){return c[e.getMonth()]},B:function(e){return l[e.getMonth()]},c:null,d:od,e:od,f:fd,g:Od,G:Ed,H:ld,I:cd,j:sd,L:ud,m:dd,M:pd,p:function(e){return i[+(e.getHours()>=12)]},q:function(e){return 1+~~(e.getMonth()/3)},Q:Hd,s:qd,S:hd,u:yd,U:vd,V:gd,w:bd,W:xd,x:null,X:null,y:wd,Y:Pd,Z:Ad,"%":$d},x={a:function(e){return o[e.getUTCDay()]},A:function(e){return a[e.getUTCDay()]},b:function(e){return c[e.getUTCMonth()]},B:function(e){return l[e.getUTCMonth()]},c:null,d:jd,e:jd,f:Dd,g:Wd,G:Xd,H:Sd,I:kd,j:Md,L:Td,m:Cd,M:Id,p:function(e){return i[+(e.getUTCHours()>=12)]},q:function(e){return 1+~~(e.getUTCMonth()/3)},Q:Hd,s:qd,S:Nd,u:_d,U:Ld,V:Kd,w:zd,W:Bd,x:null,X:null,y:Fd,Y:Ud,Z:Vd,"%":$d},w={a:function(e,t,r){var n=p.exec(t.slice(r));return n?(e.w=h.get(n[0].toLowerCase()),r+n[0].length):-1},A:function(e,t,r){var n=f.exec(t.slice(r));return n?(e.w=d.get(n[0].toLowerCase()),r+n[0].length):-1},b:function(e,t,r){var n=m.exec(t.slice(r));return n?(e.m=g.get(n[0].toLowerCase()),r+n[0].length):-1},B:function(e,t,r){var n=y.exec(t.slice(r));return n?(e.m=v.get(n[0].toLowerCase()),r+n[0].length):-1},c:function(e,r,n){return E(e,t,r,n)},d:Gf,e:Gf,f:rd,g:$f,G:Vf,H:Jf,I:Jf,j:Zf,L:td,m:Yf,M:Qf,p:function(e,t,r){var n=s.exec(t.slice(r));return n?(e.p=u.get(n[0].toLowerCase()),r+n[0].length):-1},q:qf,Q:id,s:ad,S:ed,u:Ff,U:Wf,V:Uf,w:Bf,W:Xf,x:function(e,t,n){return E(e,r,t,n)},X:function(e,t,r){return E(e,n,t,r)},y:$f,Y:Vf,Z:Hf,"%":nd};function O(e,t){return function(r){var n,i,a,o=[],l=-1,c=0,s=e.length;for(r instanceof Date||(r=new Date(+r));++l<s;)37===e.charCodeAt(l)&&(o.push(e.slice(c,l)),null!=(i=Cf[n=e.charAt(++l)])?n=e.charAt(++l):i="e"===n?" ":"0",(a=t[n])&&(n=a(r,i)),o.push(n),c=l+1);return o.push(e.slice(c,l)),o.join("")}}function P(e,t){return function(r){var n,i,a=kf(1900,void 0,1);if(E(a,e,r+="",0)!=r.length)return null;if("Q"in a)return new Date(a.Q);if("s"in a)return new Date(1e3*a.s+("L"in a?a.L:0));if(t&&!("Z"in a)&&(a.Z=0),"p"in a&&(a.H=a.H%12+12*a.p),void 0===a.m&&(a.m="q"in a?a.q:0),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(i=(n=Sf(kf(a.y,0,1))).getUTCDay(),n=i>4||0===i?ff.ceil(n):ff(n),n=Ju.offset(n,7*(a.V-1)),a.y=n.getUTCFullYear(),a.m=n.getUTCMonth(),a.d=n.getUTCDate()+(a.w+6)%7):(i=(n=jf(kf(a.y,0,1))).getDay(),n=i>4||0===i?rf.ceil(n):rf(n),n=Zu.offset(n,7*(a.V-1)),a.y=n.getFullYear(),a.m=n.getMonth(),a.d=n.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Sf(kf(a.y,0,1)).getUTCDay():jf(kf(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Sf(a)):jf(a)}}function E(e,t,r,n){for(var i,a,o=0,l=t.length,c=r.length;o<l;){if(n>=c)return-1;if(37===(i=t.charCodeAt(o++))){if(i=t.charAt(o++),!(a=w[i in Cf?t.charAt(o++):i])||(n=a(e,r,n))<0)return-1}else if(i!=r.charCodeAt(n++))return-1}return n}return b.x=O(r,b),b.X=O(n,b),b.c=O(t,b),x.x=O(r,x),x.X=O(n,x),x.c=O(t,x),{format:function(e){var t=O(e+="",b);return t.toString=function(){return e},t},parse:function(e){var t=P(e+="",!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=O(e+="",x);return t.toString=function(){return e},t},utcParse:function(e){var t=P(e+="",!0);return t.toString=function(){return e},t}}}(e),Tf=Mf.format,Mf.parse,Df=Mf.utcFormat,Mf.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var hp=e=>e.chartData,yp=et([hp],(e=>{var t=null!=e.chartData?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}})),vp=(e,t,r,n)=>n?yp(e):hp(e);function mp(e){if(Array.isArray(e)&&2===e.length){var[t,r]=e;if(Ho(t)&&Ho(r))return!0}return!1}function gp(e,t,r){return r?e:[Math.min(e[0],t[0]),Math.max(e[1],t[1])]}var bp=a(8351),xp=a.n(bp),wp=e=>e,Op={"@@functional/placeholder":!0},Pp=e=>e===Op,Ep=e=>function t(){return 0===arguments.length||1===arguments.length&&Pp(arguments.length<=0?void 0:arguments[0])?t:e(...arguments)},Ap=(e,t)=>1===e?t:Ep((function(){for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];var a=n.filter((e=>e!==Op)).length;return a>=e?t(...n):Ap(e-a,Ep((function(){for(var e=arguments.length,r=new Array(e),i=0;i<e;i++)r[i]=arguments[i];var a=n.map((e=>Pp(e)?r.shift():e));return t(...a,...r)})))})),jp=e=>Ap(e.length,e),Sp=(e,t)=>{for(var r=[],n=e;n<t;++n)r[n-e]=n;return r},kp=jp(((e,t)=>Array.isArray(t)?t.map(e):Object.keys(t).map((e=>t[e])).map(e))),Mp=e=>Array.isArray(e)?e.reverse():e.split("").reverse().join(""),Tp=e=>{var t=null,r=null;return function(){for(var n=arguments.length,i=new Array(n),a=0;a<n;a++)i[a]=arguments[a];return t&&i.every(((e,r)=>{var n;return e===(null===(n=t)||void 0===n?void 0:n[r])}))?r:(t=i,r=e(...i))}};function Dp(e){return 0===e?1:Math.floor(new(xp())(e).abs().log(10).toNumber())+1}function Cp(e,t,r){for(var n=new(xp())(e),i=0,a=[];n.lt(t)&&i<1e5;)a.push(n.toNumber()),n=n.add(r),i++;return a}jp(((e,t,r)=>{var n=+e;return n+r*(+t-n)})),jp(((e,t,r)=>{var n=t-+e;return(r-e)/(n=n||1/0)})),jp(((e,t,r)=>{var n=t-+e;return n=n||1/0,Math.max(0,Math.min(1,(r-e)/n))}));var Ip=e=>{var[t,r]=e,[n,i]=[t,r];return t>r&&([n,i]=[r,t]),[n,i]},Np=(e,t,r)=>{if(e.lte(0))return new(xp())(0);var n=Dp(e.toNumber()),i=new(xp())(10).pow(n),a=e.div(i),o=1!==n?.05:.1,l=new(xp())(Math.ceil(a.div(o).toNumber())).add(r).mul(o).mul(i);return t?new(xp())(l.toNumber()):new(xp())(Math.ceil(l.toNumber()))},_p=(e,t,r)=>{var n=new(xp())(1),i=new(xp())(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new(xp())(10).pow(Dp(e)-1),i=new(xp())(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new(xp())(Math.floor(e)))}else 0===e?i=new(xp())(Math.floor((t-1)/2)):r||(i=new(xp())(Math.floor(e)));var o=Math.floor((t-1)/2),l=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];if(!t.length)return wp;var n=t.reverse(),i=n[0],a=n.slice(1);return function(){return a.reduce(((e,t)=>t(e)),i(...arguments))}}(kp((e=>i.add(new(xp())(e-o).mul(n)).toNumber())),Sp);return l(0,t)},Lp=function(e,t,r,n){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(!Number.isFinite((t-e)/(r-1)))return{step:new(xp())(0),tickMin:new(xp())(0),tickMax:new(xp())(0)};var a,o=Np(new(xp())(t).sub(e).div(r-1),n,i);a=e<=0&&t>=0?new(xp())(0):(a=new(xp())(e).add(t).div(2)).sub(new(xp())(a).mod(o));var l=Math.ceil(a.sub(e).div(o).toNumber()),c=Math.ceil(new(xp())(t).sub(a).div(o).toNumber()),s=l+c+1;return s>r?Lp(e,t,r,n,i+1):(s<r&&(c=t>0?c+(r-s):c,l=t>0?l:l+(r-s)),{step:o,tickMin:a.sub(new(xp())(l).mul(o)),tickMax:a.add(new(xp())(c).mul(o))})};var Rp=Tp((function(e){var[t,r]=e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=Math.max(n,2),[o,l]=Ip([t,r]);if(o===-1/0||l===1/0){var c=l===1/0?[o,...Sp(0,n-1).map((()=>1/0))]:[...Sp(0,n-1).map((()=>-1/0)),l];return t>r?Mp(c):c}if(o===l)return _p(o,n,i);var{step:s,tickMin:u,tickMax:f}=Lp(o,l,a,i,0),d=Cp(u,f.add(new(xp())(.1).mul(s)),s);return t>r?Mp(d):d})),Kp=Tp((function(e,t){var[r,n]=e,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],[a,o]=Ip([r,n]);if(a===-1/0||o===1/0)return[r,n];if(a===o)return[a];var l=Math.max(t,2),c=Np(new(xp())(o).sub(a).div(l-1),i,0),s=[...Cp(new(xp())(a),new(xp())(o),c),o];return!1===i&&(s=s.map((e=>Math.round(e)))),r>n?Mp(s):s})),zp=e=>e.rootProps.maxBarSize,Bp=e=>e.rootProps.barGap,Fp=e=>e.rootProps.barCategoryGap,Wp=e=>e.rootProps.barSize,Up=e=>e.rootProps.stackOffset,Xp=e=>e.options.chartName,Vp=e=>e.rootProps.syncId,$p=e=>e.rootProps.syncMethod,Hp=e=>e.options.eventEmitter,qp={allowDuplicatedCategory:!0,angleAxisId:0,axisLine:!0,cx:0,cy:0,orientation:"outer",reversed:!1,scale:"auto",tick:!0,tickLine:!0,tickSize:8,type:"category"},Yp={allowDataOverflow:!1,allowDuplicatedCategory:!0,angle:0,axisLine:!0,cx:0,cy:0,orientation:"right",radiusAxisId:0,scale:"auto",stroke:"#ccc",tick:!0,tickCount:5,type:"number"},Gp=(e,t)=>{if(e&&t)return null!=e&&e.reversed?[t[1],t[0]]:t},Zp={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!1,dataKey:void 0,domain:void 0,id:qp.angleAxisId,includeHidden:!1,name:void 0,reversed:qp.reversed,scale:qp.scale,tick:qp.tick,tickCount:void 0,ticks:void 0,type:qp.type,unit:void 0},Jp={allowDataOverflow:Yp.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Yp.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Yp.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Yp.scale,tick:Yp.tick,tickCount:Yp.tickCount,ticks:void 0,type:Yp.type,unit:void 0},Qp={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:qp.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:qp.angleAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:qp.scale,tick:qp.tick,tickCount:void 0,ticks:void 0,type:"number",unit:void 0},eh={allowDataOverflow:Yp.allowDataOverflow,allowDecimals:!1,allowDuplicatedCategory:Yp.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:Yp.radiusAxisId,includeHidden:!1,name:void 0,reversed:!1,scale:Yp.scale,tick:Yp.tick,tickCount:Yp.tickCount,ticks:void 0,type:"category",unit:void 0},th=(e,t)=>null!=e.polarAxis.angleAxis[t]?e.polarAxis.angleAxis[t]:"radial"===e.layout.layoutType?Qp:Zp,rh=(e,t)=>null!=e.polarAxis.radiusAxis[t]?e.polarAxis.radiusAxis[t]:"radial"===e.layout.layoutType?eh:Jp,nh=e=>e.polarOptions,ih=et([ji,Si,Ki],Qn),ah=et([nh,ih],((e,t)=>{if(null!=e)return v(e.innerRadius,t,0)})),oh=et([nh,ih],((e,t)=>{if(null!=e)return v(e.outerRadius,t,.8*t)})),lh=et([nh],(e=>{if(null==e)return[0,0];var{startAngle:t,endAngle:r}=e;return[t,r]})),ch=et([th,lh],Gp),sh=et([ih,ah,oh],((e,t,r)=>{if(null!=e&&null!=t&&null!=r)return[t,r]})),uh=et([rh,sh],Gp),fh=et([Ji,nh,ah,oh,ji,Si],((e,t,r,n,i,a)=>{if(("centric"===e||"radial"===e)&&null!=t&&null!=r&&null!=n){var{cx:o,cy:l,startAngle:c,endAngle:s}=t;return{cx:v(o,i,i/2),cy:v(l,a,a/2),innerRadius:r,outerRadius:n,startAngle:c,endAngle:s,clockWise:!1}}})),dh=(e,t)=>t,ph=(e,t,r)=>r;function hh(e){return null==e?void 0:e.id}var yh=e=>{var t=Ji(e);return"horizontal"===t?"xAxis":"vertical"===t?"yAxis":"centric"===t?"angleAxis":"radiusAxis"},vh=e=>e.tooltip.settings.axisId,mh=e=>{var t=yh(e),r=vh(e);return Dh(e,t,r)};function gh(e,t,r){var{chartData:n=[]}=t,i=null==r?void 0:r.dataKey,a=new Map;return e.forEach((e=>{var t,r=null!==(t=e.data)&&void 0!==t?t:n;if(null!=r&&0!==r.length){var o=hh(e);r.forEach(((t,r)=>{var n,l=null==i?r:String(ci(t,i,null)),c=ci(t,e.dataKey,0);n=a.has(l)?a.get(l):{},Object.assign(n,{[o]:c}),a.set(l,n)}))}})),Array.from(a.values())}function bh(e){return null!=e.stackId&&null!=e.dataKey}function xh(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function wh(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?xh(Object(r),!0).forEach((function(t){Oh(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):xh(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Oh(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Ph=[0,"auto"],Eh={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:void 0,height:30,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"bottom",padding:{left:0,right:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"category",unit:void 0},Ah=(e,t)=>{var r=e.cartesianAxis.xAxis[t];return null==r?Eh:r},jh={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:Ph,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,width:60},Sh=(e,t)=>{var r=e.cartesianAxis.yAxis[t];return null==r?jh:r},kh={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},Mh=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return null==r?kh:r},Th=(e,t,r)=>{switch(t){case"xAxis":return Ah(e,r);case"yAxis":return Sh(e,r);case"zAxis":return Mh(e,r);case"angleAxis":return th(e,r);case"radiusAxis":return rh(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},Dh=(e,t,r)=>{switch(t){case"xAxis":return Ah(e,r);case"yAxis":return Sh(e,r);case"angleAxis":return th(e,r);case"radiusAxis":return rh(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},Ch=e=>e.graphicalItems.cartesianItems.some((e=>"bar"===e.type))||e.graphicalItems.polarItems.some((e=>"radialBar"===e.type));function Ih(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var Nh=e=>e.graphicalItems.cartesianItems,_h=et([dh,ph],Ih),Lh=(e,t,r)=>e.filter(r).filter((e=>!0===(null==t?void 0:t.includeHidden)||!e.hide)),Rh=et([Nh,Th,_h],Lh),Kh=et([Rh],(e=>e.filter((e=>"area"===e.type||"bar"===e.type)).filter(bh))),zh=e=>e.filter((e=>!("stackId"in e)||void 0===e.stackId)),Bh=et([Rh],zh),Fh=e=>e.map((e=>e.data)).filter(Boolean).flat(1),Wh=et([Rh],Fh),Uh=(e,t)=>{var{chartData:r=[],dataStartIndex:n,dataEndIndex:i}=t;return e.length>0?e:r.slice(n,i+1)},Xh=et([Wh,vp],Uh),Vh=(e,t,r)=>null!=(null==t?void 0:t.dataKey)?e.map((e=>({value:ci(e,t.dataKey)}))):r.length>0?r.map((e=>e.dataKey)).flatMap((t=>e.map((e=>({value:ci(e,t)}))))):e.map((e=>({value:e}))),$h=et([Xh,Th,Rh],Vh);function Hh(e,t){switch(e){case"xAxis":return"x"===t.direction;case"yAxis":return"y"===t.direction;default:return!1}}function qh(e){return e.filter((e=>p(e)||e instanceof Date)).map(Number).filter((e=>!1===u(e)))}function Yh(e,t,r){return!r||"number"!=typeof t||u(t)?[]:r.length?qh(r.flatMap((r=>{var n,i,a=ci(e,r.dataKey);if(Array.isArray(a)?[n,i]=a:n=i=a,Ho(n)&&Ho(i))return[t-n,t+i]}))):[]}var Gh=et([Kh,vp,mh],gh),Zh=(e,t,r)=>{var n=t.reduce(((e,t)=>(null==t.stackId||(null==e[t.stackId]&&(e[t.stackId]=[]),e[t.stackId].push(t)),e)),{});return Object.fromEntries(Object.entries(n).map((t=>{var[n,i]=t,a=i.map(hh);return[n,{stackedData:yi(e,a,r),graphicalItems:i}]})))},Jh=et([Gh,Kh,Up],Zh),Qh=(e,t,r)=>{var{dataStartIndex:n,dataEndIndex:i}=t;if("zAxis"!==r){var a=xi(e,n,i);if(null==a||0!==a[0]||0!==a[1])return a}},ey=et([Jh,hp,dh],Qh),ty=(e,t,r,n,i)=>r.length>0?e.flatMap((e=>r.flatMap((r=>{var a,o,l=null===(a=n[r.id])||void 0===a?void 0:a.filter((e=>Hh(i,e))),c=ci(e,null!==(o=t.dataKey)&&void 0!==o?o:r.dataKey);return{value:c,errorDomain:Yh(e,c,l)}})))).filter(Boolean):null!=(null==t?void 0:t.dataKey)?e.map((e=>({value:ci(e,t.dataKey),errorDomain:[]}))):e.map((e=>({value:e,errorDomain:[]}))),ry=e=>e.errorBars,ny=(e,t,r)=>e.flatMap((e=>t[e.id])).filter(Boolean).filter((e=>Hh(r,e))),iy=(et([Bh,ry,dh],ny),et([Xh,Th,Bh,ry,dh],ty));function ay(e){var{value:t}=e;if(p(t)||t instanceof Date)return t}var oy=e=>{var t=e.flatMap((e=>[e.value,e.errorDomain])).flat(1),r=qh(t);if(0!==r.length)return[Math.min(...r),Math.max(...r)]},ly=e=>{var t;if(null==e||!("domain"in e))return Ph;if(null!=e.domain)return e.domain;if(null!=e.ticks){if("number"===e.type){var r=qh(e.ticks);return[Math.min(...r),Math.max(...r)]}if("category"===e.type)return e.ticks.map(String)}return null!==(t=null==e?void 0:e.domain)&&void 0!==t?t:Ph},cy=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=t.filter(Boolean);if(0!==n.length){var i=n.flat();return[Math.min(...i),Math.max(...i)]}},sy=e=>e.referenceElements.dots,uy=(e,t,r)=>e.filter((e=>"extendDomain"===e.ifOverflow)).filter((e=>"xAxis"===t?e.xAxisId===r:e.yAxisId===r)),fy=et([sy,dh,ph],uy),dy=e=>e.referenceElements.areas,py=et([dy,dh,ph],uy),hy=e=>e.referenceElements.lines,yy=et([hy,dh,ph],uy),vy=(e,t)=>{var r=qh(e.map((e=>"xAxis"===t?e.x:e.y)));if(0!==r.length)return[Math.min(...r),Math.max(...r)]},my=et(fy,dh,vy),gy=(e,t)=>{var r=qh(e.flatMap((e=>["xAxis"===t?e.x1:e.y1,"xAxis"===t?e.x2:e.y2])));if(0!==r.length)return[Math.min(...r),Math.max(...r)]},by=et([py,dh],gy),xy=(e,t)=>{var r=qh(e.map((e=>"xAxis"===t?e.x:e.y)));if(0!==r.length)return[Math.min(...r),Math.max(...r)]},wy=et(yy,dh,xy),Oy=et(my,wy,by,((e,t,r)=>cy(e,r,t))),Py=et([Th],ly),Ey=(e,t,r,n,i,a,o)=>{var l=function(e,t){if(t&&"function"!=typeof e&&Array.isArray(e)&&2===e.length){var r,n,[i,a]=e;if(Ho(i))r=i;else if("function"==typeof i)return;if(Ho(a))n=a;else if("function"==typeof a)return;var o=[r,n];if(mp(o))return o}}(t,e.allowDataOverflow);return null!=l?l:function(e,t,r){if(r||null!=t){if("function"==typeof e&&null!=t)try{var n=e(t,r);if(mp(n))return gp(n,t,r)}catch(e){}if(Array.isArray(e)&&2===e.length){var i,a,[o,l]=e;if("auto"===o)null!=t&&(i=Math.min(...t));else if(d(o))i=o;else if("function"==typeof o)try{null!=t&&(i=o(null==t?void 0:t[0]))}catch(e){}else if("string"==typeof o&&wi.test(o)){var c=wi.exec(o);if(null==c||null==t)i=void 0;else{var s=+c[1];i=t[0]-s}}else i=null==t?void 0:t[0];if("auto"===l)null!=t&&(a=Math.max(...t));else if(d(l))a=l;else if("function"==typeof l)try{null!=t&&(a=l(null==t?void 0:t[1]))}catch(e){}else if("string"==typeof l&&Oi.test(l)){var u=Oi.exec(l);if(null==u||null==t)a=void 0;else{var f=+u[1];a=t[1]+f}}else a=null==t?void 0:t[1];var p=[i,a];if(mp(p))return null==t?p:gp(p,t,r)}}}(t,"vertical"===a&&"xAxis"===o||"horizontal"===a&&"yAxis"===o?cy(r,i,oy(n)):cy(i,oy(n)),e.allowDataOverflow)},Ay=et([Th,Py,ey,iy,Oy,Ji,dh],Ey),jy=[0,1],Sy=(e,t,r,n,i,a,o)=>{if(null!=e&&null!=r&&0!==r.length||void 0!==o){var{dataKey:l,type:c}=e,s=si(t,a);return s&&null==l?ic()(0,r.length):"category"===c?((e,t,r)=>{var n=e.map(ay).filter((e=>null!=e));return r&&(null==t.dataKey||t.allowDuplicatedCategory&&m(n))?ic()(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))})(n,e,s):"expand"===i?jy:o}},ky=et([Th,Ji,Xh,$h,Up,dh,Ay],Sy),My=(t,r,n,i,a)=>{if(null!=t){var{scale:o,type:l}=t;if("auto"===o)return"radial"===r&&"radiusAxis"===a?"band":"radial"===r&&"angleAxis"===a?"linear":"category"===l&&i&&(i.indexOf("LineChart")>=0||i.indexOf("AreaChart")>=0||i.indexOf("ComposedChart")>=0&&!n)?"point":"category"===l?"band":"linear";if("string"==typeof o){var c="scale".concat(P(o));return c in e?c:"point"}}},Ty=et([Th,Ji,Ch,Xp,dh],My);function Dy(t,r,n,i){if(null!=n&&null!=i){if("function"==typeof t.scale)return t.scale.copy().domain(n).range(i);var a=function(t){if(null!=t){if(t in e)return e[t]();var r="scale".concat(P(t));return r in e?e[r]():void 0}}(r);if(null!=a){var o=a.domain(n).range(i);return(e=>{var t=e.domain();if(t&&!(t.length<=2)){var r=t.length,n=e.range(),i=Math.min(n[0],n[1])-di,a=Math.max(n[0],n[1])+di,o=e(t[0]),l=e(t[r-1]);(o<i||o>a||l<i||l>a)&&e.domain([t[0],t[r-1]])}})(o),o}}}var Cy=(e,t,r)=>{var n=ly(t);if("auto"===r||"linear"===r)return null!=t&&t.tickCount&&Array.isArray(n)&&("auto"===n[0]||"auto"===n[1])&&mp(e)?Rp(e,t.tickCount,t.allowDecimals):null!=t&&t.tickCount&&"number"===t.type&&mp(e)?Kp(e,t.tickCount,t.allowDecimals):void 0},Iy=et([ky,Dh,Ty],Cy),Ny=(e,t,r,n)=>{if("angleAxis"!==n&&"number"===(null==e?void 0:e.type)&&mp(t)&&Array.isArray(r)&&r.length>0){var i=t[0],a=r[0],o=t[1],l=r[r.length-1];return[Math.min(i,a),Math.max(o,l)]}return t},_y=et([Th,ky,Iy,dh],Ny),Ly=et($h,Th,((e,t)=>{if(t&&"number"===t.type){var r=1/0,n=Array.from(qh(e.map((e=>e.value)))).sort(((e,t)=>e-t));if(n.length<2)return 1/0;var i=n[n.length-1]-n[0];if(0===i)return 1/0;for(var a=0;a<n.length-1;a++){var o=n[a+1]-n[a];r=Math.min(r,o)}return r/i}})),Ry=et(Ly,Ji,Fp,Ki,((e,t,r,n)=>n),((e,t,r,n,i)=>{if(!Ho(e))return 0;var a="vertical"===t?n.height:n.width;if("gap"===i)return e*a/2;if("no-gap"===i){var o=v(r,e*a),l=e*a/2;return l-o-(l-o)/a*o}return 0})),Ky=et(Ah,((e,t)=>{var r=Ah(e,t);return null==r||"string"!=typeof r.padding?0:Ry(e,"xAxis",t,r.padding)}),((e,t)=>{var r,n;if(null==e)return{left:0,right:0};var{padding:i}=e;return"string"==typeof i?{left:t,right:t}:{left:(null!==(r=i.left)&&void 0!==r?r:0)+t,right:(null!==(n=i.right)&&void 0!==n?n:0)+t}})),zy=et(Sh,((e,t)=>{var r=Sh(e,t);return null==r||"string"!=typeof r.padding?0:Ry(e,"yAxis",t,r.padding)}),((e,t)=>{var r,n;if(null==e)return{top:0,bottom:0};var{padding:i}=e;return"string"==typeof i?{top:t,bottom:t}:{top:(null!==(r=i.top)&&void 0!==r?r:0)+t,bottom:(null!==(n=i.bottom)&&void 0!==n?n:0)+t}})),By=et([Ki,Ky,Vi,Xi,(e,t,r)=>r],((e,t,r,n,i)=>{var{padding:a}=n;return i?[a.left,r.width-a.right]:[e.left+t.left,e.left+e.width-t.right]})),Fy=et([Ki,Ji,zy,Vi,Xi,(e,t,r)=>r],((e,t,r,n,i,a)=>{var{padding:o}=i;return a?[n.height-o.bottom,o.top]:"horizontal"===t?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]})),Wy=(e,t,r,n)=>{var i;switch(t){case"xAxis":return By(e,r,n);case"yAxis":return Fy(e,r,n);case"zAxis":return null===(i=Mh(e,r))||void 0===i?void 0:i.range;case"angleAxis":return lh(e);case"radiusAxis":return sh(e,r);default:return}},Uy=et([Th,Wy],Gp),Xy=et([Th,Ty,_y,Uy],Dy);et([Rh,ry,dh],ny);function Vy(e,t){return e.id<t.id?-1:e.id>t.id?1:0}var $y=(e,t)=>t,Hy=(e,t,r)=>r,qy=et(Ti,$y,Hy,((e,t,r)=>e.filter((e=>e.orientation===t)).filter((e=>e.mirror===r)).sort(Vy))),Yy=et(Di,$y,Hy,((e,t,r)=>e.filter((e=>e.orientation===t)).filter((e=>e.mirror===r)).sort(Vy))),Gy=(e,t)=>({width:e.width,height:t.height}),Zy=et(Ki,Ah,Gy),Jy=et(Si,Ki,qy,$y,Hy,((e,t,r,n,i)=>{var a,o={};return r.forEach((r=>{var l=Gy(t,r);null==a&&(a=((e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}})(t,n,e));var c="top"===n&&!i||"bottom"===n&&i;o[r.id]=a-Number(c)*l.height,a+=(c?-1:1)*l.height})),o})),Qy=et(ji,Ki,Yy,$y,Hy,((e,t,r,n,i)=>{var a,o={};return r.forEach((r=>{var l=((e,t)=>({width:"number"==typeof t.width?t.width:60,height:e.height}))(t,r);null==a&&(a=((e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}})(t,n,e));var c="left"===n&&!i||"right"===n&&i;o[r.id]=a-Number(c)*l.width,a+=(c?-1:1)*l.width})),o})),ev=et(Ki,Sh,((e,t)=>({width:"number"==typeof t.width?t.width:60,height:e.height}))),tv=(e,t,r)=>{switch(t){case"xAxis":return Zy(e,r).width;case"yAxis":return ev(e,r).height;default:return}},rv=(e,t,r,n)=>{if(null!=r){var{allowDuplicatedCategory:i,type:a,dataKey:o}=r,l=si(e,n),c=t.map((e=>e.value));return o&&l&&"category"===a&&i&&m(c)?c:void 0}},nv=et([Ji,$h,Th,dh],rv),iv=(e,t,r,n)=>{if(null!=r&&null!=r.dataKey){var{type:i,scale:a}=r;return!si(e,n)||"number"!==i&&"auto"===a?void 0:t.map((e=>e.value))}},av=et([Ji,$h,Dh,dh],iv),ov=et([Ji,(e,t,r)=>{switch(t){case"xAxis":return Ah(e,r);case"yAxis":return Sh(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},Ty,Xy,nv,av,Wy,Iy,dh],((e,t,r,n,i,a,o,l,c)=>{if(null==t)return null;var s=si(e,c);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:c,categoricalDomain:a,duplicateDomain:i,isCategorical:s,niceTicks:l,range:o,realScaleType:r,scale:n}})),lv=(e,t,r,n,i,a,o,l,c)=>{if(null!=t&&null!=n){var f=si(e,c),{type:d,ticks:p,tickCount:h}=t,y="scaleBand"===r&&"function"==typeof n.bandwidth?n.bandwidth()/2:2,v="category"===d&&n.bandwidth?n.bandwidth()/y:0;v="angleAxis"===c&&null!=a&&a.length>=2?2*s(a[0]-a[1])*v:v;var m=p||i;return m?m.map(((e,t)=>{var r=o?o.indexOf(e):e;return{index:t,coordinate:n(r)+v,value:e,offset:v}})).filter((e=>!u(e.coordinate))):f&&l?l.map(((e,t)=>({coordinate:n(e)+v,value:e,index:t,offset:v}))):n.ticks?n.ticks(h).map((e=>({coordinate:n(e)+v,value:e,offset:v}))):n.domain().map(((e,t)=>({coordinate:n(e)+v,value:o?o[e]:e,index:t,offset:v})))}},cv=et([Ji,Dh,Ty,Xy,Iy,Wy,nv,av,dh],lv),sv=(e,t,r,n,i,a,o)=>{if(null!=t&&null!=r&&null!=n&&n[0]!==n[1]){var l=si(e,o),{tickCount:c}=t,u=0;return u="angleAxis"===o&&(null==n?void 0:n.length)>=2?2*s(n[0]-n[1])*u:u,l&&a?a.map(((e,t)=>({coordinate:r(e)+u,value:e,index:t,offset:u}))):r.ticks?r.ticks(c).map((e=>({coordinate:r(e)+u,value:e,offset:u}))):r.domain().map(((e,t)=>({coordinate:r(e)+u,value:i?i[e]:e,index:t,offset:u})))}},uv=et([Ji,Dh,Xy,Wy,nv,av,dh],sv),fv=et(Th,Xy,((e,t)=>{if(null!=e&&null!=t)return wh(wh({},e),{},{scale:t})})),dv=et([Th,Ty,ky,Uy],Dy),pv=et(((e,t,r)=>Mh(e,r)),dv,((e,t)=>{if(null!=e&&null!=t)return wh(wh({},e),{},{scale:t})})),hv=et([Ji,Ti,Di],((e,t,r)=>{switch(e){case"horizontal":return t.some((e=>e.reversed))?"right-to-left":"left-to-right";case"vertical":return r.some((e=>e.reversed))?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}})),yv=e=>e.options.defaultTooltipEventType,vv=e=>e.options.validateTooltipEventTypes;function mv(e,t,r){if(null==e)return t;var n=e?"axis":"item";return null==r?t:r.includes(n)?n:t}function gv(e,t){return mv(t,yv(e),vv(e))}var bv=(e,t)=>{var r,n=Number(t);if(!u(n)&&null!=t)return n>=0?null==e||null===(r=e[n])||void 0===r?void 0:r.value:void 0},xv={active:!1,index:null,dataKey:void 0,coordinate:void 0},wv=Gr({name:"tooltip",initialState:{itemInteraction:{click:xv,hover:xv},axisInteraction:{click:xv,hover:xv},keyboardInteraction:xv,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},reducers:{addTooltipEntrySettings(e,t){e.tooltipItemPayloads.push(t.payload)},removeTooltipEntrySettings(e,t){var r=Ft(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate,e.keyboardInteraction.dataKey=t.payload.activeDataKey}}}),{addTooltipEntrySettings:Ov,removeTooltipEntrySettings:Pv,setTooltipSettingsState:Ev,setActiveMouseOverItemIndex:Av,mouseLeaveItem:jv,mouseLeaveChart:Sv,setActiveClickItemIndex:kv,setMouseOverAxisIndex:Mv,setMouseClickAxisIndex:Tv,setSyncInteraction:Dv,setKeyboardInteraction:Cv}=wv.actions,Iv=wv.reducer;function Nv(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function _v(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Nv(Object(r),!0).forEach((function(t){Lv(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Nv(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Lv(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Rv=(e,t,r,n)=>{if(null==t)return xv;var i=function(e,t,r){return"axis"===t?"click"===r?e.axisInteraction.click:e.axisInteraction.hover:"click"===r?e.itemInteraction.click:e.itemInteraction.hover}(e,t,r);if(null==i)return xv;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&null!=e.syncInteraction.index)return e.syncInteraction;var a=!0===e.settings.active;if(null!=i.index){if(a)return _v(_v({},i),{},{active:!0})}else if(null!=n)return{active:!0,coordinate:void 0,dataKey:void 0,index:n};return _v(_v({},xv),{},{coordinate:i.coordinate})},Kv=(e,t)=>{var r=null==e?void 0:e.index;if(null==r)return null;var n=Number(r);if(!Ho(n))return r;var i=1/0;return t.length>0&&(i=t.length-1),String(Math.max(0,Math.min(n,i)))},zv=(e,t,r,n,i,a,o,l)=>{if(null!=a&&null!=l){var c=o[0],s=null==c?void 0:l(c.positions,a);if(null!=s)return s;var u=null==i?void 0:i[Number(a)];if(u)return"horizontal"===r?{x:u.coordinate,y:(n.top+t)/2}:{x:(n.left+e)/2,y:u.coordinate}}},Bv=(e,t,r,n)=>{return"axis"===t?e.tooltipItemPayloads:0===e.tooltipItemPayloads.length?[]:null==(i="hover"===r?e.itemInteraction.hover.dataKey:e.itemInteraction.click.dataKey)&&null!=n?[e.tooltipItemPayloads[0]]:e.tooltipItemPayloads.filter((e=>{var t;return(null===(t=e.settings)||void 0===t?void 0:t.dataKey)===i}));var i},Fv=e=>e.options.tooltipPayloadSearcher,Wv=e=>e.tooltip;function Uv(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Xv(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Uv(Object(r),!0).forEach((function(t){Vv(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Uv(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Vv(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var $v=(e,t,r,n,i,a,o)=>{if(null!=t&&null!=a){var{chartData:l,computedData:c,dataStartIndex:s,dataEndIndex:u}=r;return e.reduce(((e,r)=>{var f,d,p,{dataDefinedOnItem:h,settings:y}=r,v=function(e,t){return null!=e?e:t}(h,l),m=Array.isArray(v)?ii(v,s,u):v,g=null!==(f=null==y?void 0:y.dataKey)&&void 0!==f?f:null==n?void 0:n.dataKey,b=null==y?void 0:y.nameKey;(d=null!=n&&n.dataKey&&Array.isArray(m)&&!Array.isArray(m[0])&&"axis"===o?x(m,n.dataKey,i):a(m,t,c,b),Array.isArray(d))?d.forEach((t=>{var r=Xv(Xv({},y),{},{name:t.name,unit:t.unit,color:void 0,fill:void 0});e.push(Ei({tooltipEntrySettings:r,dataKey:t.dataKey,payload:t.payload,value:ci(t.payload,t.dataKey),name:t.name}))})):e.push(Ei({tooltipEntrySettings:y,dataKey:g,payload:d,value:ci(d,g),name:null!==(p=ci(d,b))&&void 0!==p?p:null==y?void 0:y.name}));return e}),[])}},Hv=et([mh,Ji,Ch,Xp,yh],My),qv=et([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],((e,t)=>[...e,...t])),Yv=et([yh,vh],Ih),Gv=et([qv,mh,Yv],Lh),Zv=et([Gv],(e=>e.filter(bh))),Jv=et([Gv],Fh),Qv=et([Jv,hp],Uh),em=et([Zv,hp,mh],gh),tm=et([Qv,mh,Gv],Vh),rm=et([mh],ly),nm=et([Gv],(e=>e.filter(bh))),im=et([em,nm,Up],Zh),am=et([im,hp,yh],Qh),om=et([Gv],zh),lm=et([Qv,mh,om,ry,yh],ty),cm=et([sy,yh,vh],uy),sm=et([cm,yh],vy),um=et([dy,yh,vh],uy),fm=et([um,yh],gy),dm=et([hy,yh,vh],uy),pm=et([dm,yh],xy),hm=et([sm,pm,fm],cy),ym=et([mh,rm,am,lm,hm,Ji,yh],Ey),vm=et([mh,Ji,Qv,tm,Up,yh,ym],Sy),mm=et([vm,mh,Hv],Cy),gm=et([mh,vm,mm,yh],Ny),bm=e=>{var t=yh(e),r=vh(e);return Wy(e,t,r,!1)},xm=et([mh,bm],Gp),wm=et([mh,Hv,gm,xm],Dy),Om=et([Ji,tm,mh,yh],rv),Pm=et([Ji,tm,mh,yh],iv),Em=et([Ji,mh,Hv,wm,bm,Om,Pm,yh],((e,t,r,n,i,a,o,l)=>{if(t){var{type:c}=t,u=si(e,l);if(n){var f="scaleBand"===r&&n.bandwidth?n.bandwidth()/2:2,d="category"===c&&n.bandwidth?n.bandwidth()/f:0;return d="angleAxis"===l&&null!=i&&(null==i?void 0:i.length)>=2?2*s(i[0]-i[1])*d:d,u&&o?o.map(((e,t)=>({coordinate:n(e)+d,value:e,index:t,offset:d}))):n.domain().map(((e,t)=>({coordinate:n(e)+d,value:a?a[e]:e,index:t,offset:d})))}}})),Am=et([yv,vv,e=>e.tooltip.settings],((e,t,r)=>mv(r.shared,e,t))),jm=e=>e.tooltip.settings.trigger,Sm=e=>e.tooltip.settings.defaultIndex,km=et([Wv,Am,jm,Sm],Rv),Mm=et([km,Qv],Kv),Tm=et([Em,Mm],bv),Dm=et([km],(e=>{if(e)return e.dataKey})),Cm=et([Wv,Am,jm,Sm],Bv),Im=et([ji,Si,Ji,Ki,Em,Sm,Cm,Fv],zv),Nm=et([km,Im],((e,t)=>null!=e&&e.coordinate?e.coordinate:t)),_m=et([km],(e=>e.active)),Lm=et([Cm,Mm,hp,mh,Tm,Fv,Am],$v),Rm=et([Lm],(e=>{if(null!=e){var t=e.map((e=>e.payload)).filter((e=>null!=e));return Array.from(new Set(t))}}));function Km(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function zm(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Km(Object(r),!0).forEach((function(t){Bm(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Km(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Bm(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Fm=()=>{var e=He(mh),t=He(Em),r=He(wm);return Pi(zm(zm({},e),{},{scale:r}),t)},Wm=()=>He(Xp),Um=(e,t)=>t,Xm=(e,t,r)=>r,Vm=(e,t,r,n)=>n,$m=et(Em,(e=>nt()(e,(e=>e.coordinate)))),Hm=et([Wv,Um,Xm,Vm],Rv),qm=et([Hm,Qv],Kv),Ym=(e,t,r)=>{if(null!=t){var n=Wv(e);return"axis"===t?"hover"===r?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:"hover"===r?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},Gm=et([Wv,Um,Xm,Vm],Bv),Zm=et([ji,Si,Ji,Ki,Em,Vm,Gm,Fv],zv),Jm=et([Hm,Zm],((e,t)=>{var r;return null!==(r=e.coordinate)&&void 0!==r?r:t})),Qm=et(Em,qm,bv),eg=et([Gm,qm,hp,mh,Qm,Fv,Um],$v),tg=et([Hm],(e=>({isActive:e.active,activeIndex:e.index})));function rg(){return rg=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},rg.apply(null,arguments)}function ng(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ig(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ng(Object(r),!0).forEach((function(t){ag(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ng(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function ag(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function og(e){var r,i,{coordinate:a,payload:o,index:l,offset:c,tooltipAxisBandSize:s,layout:u,cursor:f,tooltipEventType:d,chartName:p}=e,h=a,y=o,v=l;if(!f||!h||"ScatterChart"!==p&&"axis"!==d)return null;if("ScatterChart"===p)r=h,i=ul;else if("BarChart"===p)r=function(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:"horizontal"===e?t.x-i:r.left+.5,y:"horizontal"===e?r.top+.5:t.y-i,width:"horizontal"===e?n:r.width-1,height:"horizontal"===e?r.height-1:n}}(u,h,c,s),i=Yl;else if("radial"===u){var{cx:m,cy:g,radius:b,startAngle:x,endAngle:w}=Gl(h);r={cx:m,cy:g,startAngle:x,endAngle:w,innerRadius:b,outerRadius:b},i=tc}else r={points:rc(u,h,c)},i=il;var O="object"==typeof f&&"className"in f?f.className:void 0,P=ig(ig(ig(ig({stroke:"#ccc",pointerEvents:"none"},c),r),z(f,!1)),{},{payload:y,payloadIndex:v,className:n("recharts-tooltip-cursor",O)});return(0,t.isValidElement)(f)?(0,t.cloneElement)(f,P):(0,t.createElement)(i,P)}function lg(e){var r=Fm(),n=qi(),i=Qi(),a=Wm();return t.createElement(og,rg({},e,{coordinate:e.coordinate,index:e.index,payload:e.payload,offset:n,layout:i,tooltipAxisBandSize:r,chartName:a}))}var cg=(0,t.createContext)(null),sg=()=>(0,t.useContext)(cg);var ug=new(a(228)),fg="recharts.syncEvent.tooltip",dg="recharts.syncEvent.brush";function pg(e,t){if(t){var r=Number.parseInt(t,10);if(!u(r))return null==e?void 0:e[r]}}var hg=Gr({name:"options",initialState:{chartName:"",tooltipPayloadSearcher:void 0,eventEmitter:void 0,defaultTooltipEventType:"axis"},reducers:{createEventEmitter:e=>{null==e.eventEmitter&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),yg=hg.reducer,{createEventEmitter:vg}=hg.actions;function mg(e){return e.tooltip.syncInteraction}var gg=Gr({name:"chartData",initialState:{chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},reducers:{setChartData(e,t){if(e.chartData=t.payload,null==t.payload)return e.dataStartIndex=0,void(e.dataEndIndex=0);t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var{startIndex:r,endIndex:n}=t.payload;null!=r&&(e.dataStartIndex=r),null!=n&&(e.dataEndIndex=n)}}}),{setChartData:bg,setDataStartEndIndexes:xg,setComputedData:wg}=gg.actions,Og=gg.reducer,Pg=()=>{};function Eg(){var e=Ue();(0,t.useEffect)((()=>{e(vg())}),[e]),function(){var e=He(Vp),r=He(Hp),n=Ue(),i=He($p),a=He(Em),o=Qi(),l=$i(),c=He((e=>e.rootProps.className));(0,t.useEffect)((()=>{if(null==e)return Pg;var t=(t,c,s)=>{if(r!==s&&e===t)if("index"!==i){if(null!=a){var u;if("function"==typeof i){var f={activeTooltipIndex:null==c.payload.index?void 0:Number(c.payload.index),isTooltipActive:c.payload.active,activeIndex:null==c.payload.index?void 0:Number(c.payload.index),activeLabel:c.payload.label,activeDataKey:c.payload.dataKey,activeCoordinate:c.payload.coordinate},d=i(a,f);u=a[d]}else"value"===i&&(u=a.find((e=>String(e.value)===c.payload.label)));var{coordinate:p}=c.payload;if(null!=u&&!1!==c.payload.active&&null!=p&&null!=l){var{x:h,y}=p,v=Math.min(h,l.x+l.width),m=Math.min(y,l.y+l.height),g={x:"horizontal"===o?u.coordinate:v,y:"horizontal"===o?m:u.coordinate},b=Dv({active:c.payload.active,coordinate:g,dataKey:c.payload.dataKey,index:String(u.index),label:c.payload.label});n(b)}else n(Dv({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0}))}}else n(c)};return ug.on(fg,t),()=>{ug.off(fg,t)}}),[c,n,r,e,i,a,o,l])}(),function(){var e=He(Vp),r=He(Hp),n=Ue();(0,t.useEffect)((()=>{if(null==e)return Pg;var t=(t,i,a)=>{r!==a&&e===t&&n(xg(i))};return ug.on(dg,t),()=>{ug.off(dg,t)}}),[n,r,e])}()}function Ag(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function jg(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ag(Object(r),!0).forEach((function(t){Sg(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ag(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Sg(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function kg(e){return e.dataKey}var Mg=[],Tg={allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",axisId:0,contentStyle:{},cursor:!0,filterNull:!0,isAnimationActive:!Oo.isSsr,itemSorter:"name",itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,wrapperStyle:{}};function Dg(e){var r=pl(e,Tg),{active:n,allowEscapeViewBox:i,animationDuration:a,animationEasing:o,content:l,filterNull:c,isAnimationActive:s,offset:u,payloadUniqBy:f,position:d,reverseDirection:p,useTranslate3d:h,wrapperStyle:y,cursor:v,shared:m,trigger:g,defaultIndex:b,portal:x,axisId:w}=r,O=Ue(),P="number"==typeof b?String(b):b;(0,t.useEffect)((()=>{O(Ev({shared:m,trigger:g,axisId:w,active:n,defaultIndex:P}))}),[O,m,g,w,n,P]);var E=$i(),A=Po(),j=function(e){return He((t=>gv(t,e)))}(m),{activeIndex:S,isActive:k}=He((e=>tg(e,j,g,P))),M=He((e=>eg(e,j,g,P))),T=He((e=>Qm(e,j,g,P))),D=He((e=>Jm(e,j,g,P))),C=M,I=sg(),N=null!=n?n:k,[_,L]=lt([C,N]),R="axis"===j?T:void 0;!function(e,r,n,i,a,o){var l=He((t=>Ym(t,e,r))),c=He(Hp),s=He(Vp),u=He($p),f=He(mg),d=null==f?void 0:f.active;(0,t.useEffect)((()=>{if(!d&&null!=s&&null!=c){var e=Dv({active:o,coordinate:n,dataKey:l,index:a,label:"number"==typeof i?String(i):i});ug.emit(fg,s,e,c)}}),[d,n,l,a,i,c,s,u,o])}(j,g,D,R,S,N);var K=null!=x?x:I;if(null==K)return null;var z=null!=C?C:Mg;N||(z=Mg),c&&z.length&&(z=ze(C.filter((e=>null!=e.value&&(!0!==e.hide||r.includeHidden))),f,kg));var B=z.length>0,F=t.createElement(wo,{allowEscapeViewBox:i,animationDuration:a,animationEasing:o,isAnimationActive:s,active:N,coordinate:D,hasPayload:B,offset:u,position:d,reverseDirection:p,useTranslate3d:h,viewBox:E,wrapperStyle:y,lastBoundingBox:_,innerRef:L,hasPortalFromProps:Boolean(x)},function(e,r){return t.isValidElement(e)?t.cloneElement(e,r):"function"==typeof e?t.createElement(e,r):t.createElement(po,r)}(l,jg(jg({},r),{},{payload:z,label:R,active:N,coordinate:D,accessibilityLayer:A})));return t.createElement(t.Fragment,null,(0,$.createPortal)(F,K),N&&t.createElement(lg,{cursor:v,tooltipEventType:j,coordinate:D,payload:C,index:S}))}var Cg=a(4297),Ig=a.n(Cg),Ng=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),i=2;i<r;i++)n[i-2]=arguments[i]};function _g(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Lg(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?_g(Object(r),!0).forEach((function(t){Rg(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):_g(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Rg(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Kg=(0,t.forwardRef)(((e,r)=>{var{aspect:i,initialDimension:a={width:-1,height:-1},width:o="100%",height:l="100%",minWidth:c=0,minHeight:s,maxHeight:u,children:d,debounce:p=0,id:h,className:y,onResize:v,style:m={}}=e,g=(0,t.useRef)(null),b=(0,t.useRef)();b.current=v,(0,t.useImperativeHandle)(r,(()=>g.current));var[x,w]=(0,t.useState)({containerWidth:a.width,containerHeight:a.height}),O=(0,t.useCallback)(((e,t)=>{w((r=>{var n=Math.round(e),i=Math.round(t);return r.containerWidth===n&&r.containerHeight===i?r:{containerWidth:n,containerHeight:i}}))}),[]);(0,t.useEffect)((()=>{var e=e=>{var t,{width:r,height:n}=e[0].contentRect;O(r,n),null===(t=b.current)||void 0===t||t.call(b,r,n)};p>0&&(e=Ig()(e,p,{trailing:!0,leading:!1}));var t=new ResizeObserver(e),{width:r,height:n}=g.current.getBoundingClientRect();return O(r,n),t.observe(g.current),()=>{t.disconnect()}}),[O,p]);var P=(0,t.useMemo)((()=>{var{containerWidth:e,containerHeight:r}=x;if(e<0||r<0)return null;Ng(f(o)||f(l),"The width(%s) and height(%s) are both fixed numbers,\n       maybe you don't need to use a ResponsiveContainer.",o,l),Ng(!i||i>0,"The aspect(%s) must be greater than zero.",i);var n=f(o)?e:o,a=f(l)?r:l;return i&&i>0&&(n?a=n/i:a&&(n=a*i),u&&a>u&&(a=u)),Ng(n>0||a>0,"The width(%s) and height(%s) of chart should be greater than 0,\n       please check the style of container, or the props width(%s) and height(%s),\n       or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\n       height and width.",n,a,o,l,c,s,i),t.Children.map(d,(e=>(0,t.cloneElement)(e,{width:n,height:a,style:Lg({width:n,height:a},e.props.style)})))}),[i,d,l,u,s,c,x,o]);return t.createElement("div",{id:h?"".concat(h):void 0,className:n("recharts-responsive-container",y),style:Lg(Lg({},m),{},{width:o,height:l,minWidth:c,minHeight:s,maxHeight:u}),ref:g},t.createElement("div",{style:{width:0,height:0,overflow:"visible"}},P))})),zg=e=>null;function Bg(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}zg.displayName="Cell";function Fg(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Wg(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Fg(Object(r),!0).forEach((function(t){Ug(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Fg(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ug(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Xg=Wg({},{cacheSize:2e3,enableCache:!0}),Vg=new class{constructor(e){Bg(this,"cache",new Map),this.maxSize=e}get(e){var t=this.cache.get(e);return void 0!==t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.maxSize){var r=this.cache.keys().next().value;this.cache.delete(r)}this.cache.set(e,t)}clear(){this.cache.clear()}size(){return this.cache.size}}(Xg.cacheSize),$g={position:"absolute",top:"-20000px",left:0,padding:0,margin:0,border:"none",whiteSpace:"pre"},Hg="recharts_measurement_span";var qg=(e,t)=>{try{var r=document.getElementById(Hg);r||((r=document.createElement("span")).setAttribute("id",Hg),r.setAttribute("aria-hidden","true"),document.body.appendChild(r)),Object.assign(r.style,$g,t),r.textContent="".concat(e);var n=r.getBoundingClientRect();return{width:n.width,height:n.height}}catch(e){return{width:0,height:0}}},Yg=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(null==e||Oo.isSsr)return{width:0,height:0};if(!Xg.enableCache)return qg(e,t);var r=function(e,t){var r=t.fontSize||"",n=t.fontFamily||"",i=t.fontWeight||"",a=t.fontStyle||"",o=t.letterSpacing||"",l=t.textTransform||"";return"".concat(e,"|").concat(r,"|").concat(n,"|").concat(i,"|").concat(a,"|").concat(o,"|").concat(l)}(e,t),n=Vg.get(r);if(n)return n;var i=qg(e,t);return Vg.set(r,i),i},Gg=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,Zg=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,Jg=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,Qg=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,eb={cm:96/2.54,mm:96/25.4,pt:96/72,pc:16,in:96,Q:96/101.6,px:1},tb=Object.keys(eb),rb="NaN";class nb{static parse(e){var t,[,r,n]=null!==(t=Qg.exec(e))&&void 0!==t?t:[];return new nb(parseFloat(r),null!=n?n:"")}constructor(e,t){this.num=e,this.unit=t,this.num=e,this.unit=t,u(e)&&(this.unit=""),""===t||Jg.test(t)||(this.num=NaN,this.unit=""),tb.includes(t)&&(this.num=function(e,t){return e*eb[t]}(e,t),this.unit="px")}add(e){return this.unit!==e.unit?new nb(NaN,""):new nb(this.num+e.num,this.unit)}subtract(e){return this.unit!==e.unit?new nb(NaN,""):new nb(this.num-e.num,this.unit)}multiply(e){return""!==this.unit&&""!==e.unit&&this.unit!==e.unit?new nb(NaN,""):new nb(this.num*e.num,this.unit||e.unit)}divide(e){return""!==this.unit&&""!==e.unit&&this.unit!==e.unit?new nb(NaN,""):new nb(this.num/e.num,this.unit||e.unit)}toString(){return"".concat(this.num).concat(this.unit)}isNaN(){return u(this.num)}}function ib(e){if(e.includes(rb))return rb;for(var t=e;t.includes("*")||t.includes("/");){var r,[,n,i,a]=null!==(r=Gg.exec(t))&&void 0!==r?r:[],o=nb.parse(null!=n?n:""),l=nb.parse(null!=a?a:""),c="*"===i?o.multiply(l):o.divide(l);if(c.isNaN())return rb;t=t.replace(Gg,c.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var s,[,u,f,d]=null!==(s=Zg.exec(t))&&void 0!==s?s:[],p=nb.parse(null!=u?u:""),h=nb.parse(null!=d?d:""),y="+"===f?p.add(h):p.subtract(h);if(y.isNaN())return rb;t=t.replace(Zg,y.toString())}return t}var ab=/\(([^()]*)\)/;function ob(e){var t=e.replace(/\s+/g,"");return t=function(e){for(var t,r=e;null!=(t=ab.exec(r));){var[,n]=t;r=r.replace(ab,ib(n))}return r}(t),t=ib(t)}function lb(e){var t=function(e){try{return ob(e)}catch(e){return rb}}(e.slice(5,-1));return t===rb?"":t}var cb=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],sb=["dx","dy","angle","className","breakAll"];function ub(){return ub=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ub.apply(null,arguments)}function fb(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var db=/[ \f\n\r\t\v\u2028\u2029]+/,pb=e=>{var{children:t,breakAll:r,style:n}=e;try{var i=[];return O(t)||(i=r?t.toString().split(""):t.toString().split(db)),{wordsWithComputedWidth:i.map((e=>({word:e,width:Yg(e,n).width}))),spaceWidth:r?0:Yg(" ",n).width}}catch(e){return null}},hb=e=>[{words:O(e)?[]:e.toString().split(db)}],yb=e=>{var{width:t,scaleToFit:r,children:n,style:i,breakAll:a,maxLines:o}=e;if((t||r)&&!Oo.isSsr){var l=pb({breakAll:a,children:n,style:i});if(!l)return hb(n);var{wordsWithComputedWidth:c,spaceWidth:s}=l;return((e,t,r,n,i)=>{var{maxLines:a,children:o,style:l,breakAll:c}=e,s=d(a),u=o,f=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce(((e,t)=>{var{word:a,width:o}=t,l=e[e.length-1];if(l&&(null==n||i||l.width+o+r<Number(n)))l.words.push(a),l.width+=o+r;else{var c={words:[a],width:o};e.push(c)}return e}),[])},p=f(t),h=e=>e.reduce(((e,t)=>e.width>t.width?e:t));if(!s||i)return p;if(!(p.length>a||h(p).width>Number(n)))return p;for(var y,v=e=>{var t=u.slice(0,e),r=pb({breakAll:c,style:l,children:t+"…"}).wordsWithComputedWidth,i=f(r);return[i.length>a||h(i).width>Number(n),i]},m=0,g=u.length-1,b=0;m<=g&&b<=u.length-1;){var x=Math.floor((m+g)/2),w=x-1,[O,P]=v(w),[E]=v(x);if(O||E||(m=x+1),O&&E&&(g=x-1),!O&&E){y=P;break}b++}return y||p})({breakAll:a,children:n,maxLines:o,style:i},c,s,t,r)}return hb(n)},vb="#808080",mb=(0,t.forwardRef)(((e,r)=>{var{x:i=0,y:a=0,lineHeight:o="1em",capHeight:l="0.71em",scaleToFit:c=!1,textAnchor:s="start",verticalAnchor:u="end",fill:f=vb}=e,h=fb(e,cb),y=(0,t.useMemo)((()=>yb({breakAll:h.breakAll,children:h.children,maxLines:h.maxLines,scaleToFit:c,style:h.style,width:h.width})),[h.breakAll,h.children,h.maxLines,c,h.style,h.width]),{dx:v,dy:m,angle:g,className:b,breakAll:x}=h,w=fb(h,sb);if(!p(i)||!p(a))return null;var O,P=i+(d(v)?v:0),E=a+(d(m)?m:0);switch(u){case"start":O=lb("calc(".concat(l,")"));break;case"middle":O=lb("calc(".concat((y.length-1)/2," * -").concat(o," + (").concat(l," / 2))"));break;default:O=lb("calc(".concat(y.length-1," * -").concat(o,")"))}var A=[];if(c){var j=y[0].width,{width:S}=h;A.push("scale(".concat(d(S)?S/j:1,")"))}return g&&A.push("rotate(".concat(g,", ").concat(P,", ").concat(E,")")),A.length&&(w.transform=A.join(" ")),t.createElement("text",ub({},z(w,!0),{ref:r,x:P,y:E,className:n("recharts-text",b),textAnchor:s,fill:f.includes("url")?vb:f}),y.map(((e,r)=>{var n=e.words.join(x?"":" ");return t.createElement("tspan",{x:P,dy:0===r?O:o,key:"".concat(n,"-").concat(r)},n)})))}));mb.displayName="Text";var gb=["offset"],bb=["labelRef"];function xb(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function wb(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ob(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?wb(Object(r),!0).forEach((function(t){Pb(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):wb(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Pb(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Eb(){return Eb=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Eb.apply(null,arguments)}var Ab=e=>{var{value:t,formatter:r}=e,n=O(e.children)?t:e.children;return"function"==typeof r?r(n):n},jb=e=>null!=e&&"function"==typeof e,Sb=(e,r,i,a)=>{var o,l,{position:c,offset:u,className:f}=e,{cx:d,cy:p,innerRadius:h,outerRadius:v,startAngle:m,endAngle:g,clockWise:b}=a,x=(h+v)/2,w=((e,t)=>s(t-e)*Math.min(Math.abs(t-e),360))(m,g),P=w>=0?1:-1;"insideStart"===c?(o=m+P*u,l=b):"insideEnd"===c?(o=g-P*u,l=!b):"end"===c&&(o=g+P*u,l=b),l=w<=0?l:!l;var E=Jn(d,p,x,o),A=Jn(d,p,x,o+359*(l?1:-1)),j="M".concat(E.x,",").concat(E.y,"\n    A").concat(x,",").concat(x,",0,1,").concat(l?0:1,",\n    ").concat(A.x,",").concat(A.y),S=O(e.id)?y("recharts-radial-line-"):e.id;return t.createElement("text",Eb({},i,{dominantBaseline:"central",className:n("recharts-radial-bar-label",f)}),t.createElement("defs",null,t.createElement("path",{id:S,d:j})),t.createElement("textPath",{xlinkHref:"#".concat(S)},r))},kb=(e,t,r)=>{var{cx:n,cy:i,innerRadius:a,outerRadius:o,startAngle:l,endAngle:c}=e,s=(l+c)/2;if("outside"===r){var{x:u,y:f}=Jn(n,i,o+t,s);return{x:u,y:f,textAnchor:u>=n?"start":"end",verticalAnchor:"middle"}}if("center"===r)return{x:n,y:i,textAnchor:"middle",verticalAnchor:"middle"};if("centerTop"===r)return{x:n,y:i,textAnchor:"middle",verticalAnchor:"start"};if("centerBottom"===r)return{x:n,y:i,textAnchor:"middle",verticalAnchor:"end"};var d=(a+o)/2,{x:p,y:h}=Jn(n,i,d,s);return{x:p,y:h,textAnchor:"middle",verticalAnchor:"middle"}},Mb=(e,t)=>{var{parentViewBox:r,offset:n,position:i}=e,{x:a,y:o,width:l,height:c}=t,s=c>=0?1:-1,u=s*n,p=s>0?"end":"start",h=s>0?"start":"end",y=l>=0?1:-1,m=y*n,g=y>0?"end":"start",b=y>0?"start":"end";if("top"===i)return Ob(Ob({},{x:a+l/2,y:o-s*n,textAnchor:"middle",verticalAnchor:p}),r?{height:Math.max(o-r.y,0),width:l}:{});if("bottom"===i)return Ob(Ob({},{x:a+l/2,y:o+c+u,textAnchor:"middle",verticalAnchor:h}),r?{height:Math.max(r.y+r.height-(o+c),0),width:l}:{});if("left"===i){var x={x:a-m,y:o+c/2,textAnchor:g,verticalAnchor:"middle"};return Ob(Ob({},x),r?{width:Math.max(x.x-r.x,0),height:c}:{})}if("right"===i){var w={x:a+l+m,y:o+c/2,textAnchor:b,verticalAnchor:"middle"};return Ob(Ob({},w),r?{width:Math.max(r.x+r.width-w.x,0),height:c}:{})}var O=r?{width:l,height:c}:{};return"insideLeft"===i?Ob({x:a+m,y:o+c/2,textAnchor:b,verticalAnchor:"middle"},O):"insideRight"===i?Ob({x:a+l-m,y:o+c/2,textAnchor:g,verticalAnchor:"middle"},O):"insideTop"===i?Ob({x:a+l/2,y:o+u,textAnchor:"middle",verticalAnchor:h},O):"insideBottom"===i?Ob({x:a+l/2,y:o+c-u,textAnchor:"middle",verticalAnchor:p},O):"insideTopLeft"===i?Ob({x:a+m,y:o+u,textAnchor:b,verticalAnchor:h},O):"insideTopRight"===i?Ob({x:a+l-m,y:o+u,textAnchor:g,verticalAnchor:h},O):"insideBottomLeft"===i?Ob({x:a+m,y:o+c-u,textAnchor:b,verticalAnchor:p},O):"insideBottomRight"===i?Ob({x:a+l-m,y:o+c-u,textAnchor:g,verticalAnchor:p},O):i&&"object"==typeof i&&(d(i.x)||f(i.x))&&(d(i.y)||f(i.y))?Ob({x:a+v(i.x,l),y:o+v(i.y,c),textAnchor:"end",verticalAnchor:"end"},O):Ob({x:a+l/2,y:o+c/2,textAnchor:"middle",verticalAnchor:"middle"},O)},Tb=e=>"cx"in e&&d(e.cx);function Db(e){var{offset:r=5}=e,i=Ob({offset:r},xb(e,gb)),{viewBox:a,position:o,value:l,children:c,content:s,className:u="",textBreakAll:f,labelRef:d}=i,p=He(fh),h=$i(),y=a||("center"===o?h:null!=p?p:h);if(!y||O(l)&&O(c)&&!(0,t.isValidElement)(s)&&"function"!=typeof s)return null;var v,m=Ob(Ob({},i),{},{viewBox:y});if((0,t.isValidElement)(s)){var{labelRef:g}=m,b=xb(m,bb);return(0,t.cloneElement)(s,b)}if("function"==typeof s){if(v=(0,t.createElement)(s,m),(0,t.isValidElement)(v))return v}else v=Ab(i);var x=Tb(y),w=z(i,!0);if(x&&("insideStart"===o||"insideEnd"===o||"end"===o))return Sb(i,v,w,y);var P=x?kb(y,i.offset,i.position):Mb(i,y);return t.createElement(mb,Eb({ref:d,className:n("recharts-label",u)},w,P,{breakAll:f}),v)}Db.displayName="Label";var Cb=e=>{var{cx:t,cy:r,angle:n,startAngle:i,endAngle:a,r:o,radius:l,innerRadius:c,outerRadius:s,x:u,y:f,top:p,left:h,width:y,height:v,clockWise:m,labelViewBox:g}=e;if(g)return g;if(d(y)&&d(v)){if(d(u)&&d(f))return{x:u,y:f,width:y,height:v};if(d(p)&&d(h))return{x:p,y:h,width:y,height:v}}return d(u)&&d(f)?{x:u,y:f,width:0,height:0}:d(t)&&d(r)?{cx:t,cy:r,startAngle:i||n||0,endAngle:a||n||0,innerRadius:c||0,outerRadius:s||l||o||0,clockWise:m}:e.viewBox?e.viewBox:void 0};Db.parseViewBox=Cb,Db.renderCallByParent=function(e,r){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!e||!e.children&&n&&!e.label)return null;var{children:i,labelRef:a}=e,o=Cb(e),l=R(i,Db).map(((e,n)=>(0,t.cloneElement)(e,{viewBox:r||o,key:"label-".concat(n)})));if(!n)return l;var c=((e,r,n)=>{if(!e)return null;var i={viewBox:r,labelRef:n};return!0===e?t.createElement(Db,Eb({key:"label-implicit"},i)):p(e)?t.createElement(Db,Eb({key:"label-implicit",value:e},i)):(0,t.isValidElement)(e)?e.type===Db?(0,t.cloneElement)(e,Ob({key:"label-implicit"},i)):t.createElement(Db,Eb({key:"label-implicit",content:e},i)):jb(e)?t.createElement(Db,Eb({key:"label-implicit",content:e},i)):e&&"object"==typeof e?t.createElement(Db,Eb({},e,{key:"label-implicit"},i)):null})(e.label,r||o,a);return[c,...l]};var Ib=a(25),Nb=a.n(Ib),_b=["valueAccessor"],Lb=["data","dataKey","clockWise","id","textBreakAll"];function Rb(){return Rb=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Rb.apply(null,arguments)}function Kb(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function zb(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Kb(Object(r),!0).forEach((function(t){Bb(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Kb(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Bb(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Fb(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var Wb=e=>Array.isArray(e.value)?Nb()(e.value):e.value;function Ub(e){var{valueAccessor:r=Wb}=e,n=Fb(e,_b),{data:i,dataKey:a,clockWise:o,id:l,textBreakAll:c}=n,s=Fb(n,Lb);return i&&i.length?t.createElement(V,{className:"recharts-label-list"},i.map(((e,n)=>{var i=O(a)?r(e,n):ci(e&&e.payload,a),u=O(l)?{}:{id:"".concat(l,"-").concat(n)};return t.createElement(Db,Rb({},z(e,!0),s,u,{parentViewBox:e.parentViewBox,value:i,textBreakAll:c,viewBox:Db.parseViewBox(O(o)?e:zb(zb({},e),{},{clockWise:o})),key:"label-".concat(n),index:n}))}))):null}Ub.displayName="LabelList",Ub.renderCallByParent=function(e,r){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!e||!e.children&&n&&!e.label)return null;var{children:i}=e,a=R(i,Ub).map(((e,n)=>(0,t.cloneElement)(e,{data:r,key:"labelList-".concat(n)})));return n?[function(e,r){return e?!0===e?t.createElement(Ub,{key:"labelList-implicit",data:r}):t.isValidElement(e)||jb(e)?t.createElement(Ub,{key:"labelList-implicit",data:r,content:e}):"object"==typeof e?t.createElement(Ub,Rb({data:r},e,{key:"labelList-implicit"})):null:null}(e.label,r),...a]:a};var Xb=["component"];function Vb(e){var r,{component:n}=e,i=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,Xb);return(0,t.isValidElement)(n)?r=(0,t.cloneElement)(n,i):"function"==typeof n?r=(0,t.createElement)(n,i):Ng(!1,"Customized's props `component` must be React.element or Function, but got %s.",typeof n),t.createElement(V,{className:"recharts-customized-wrapper"},r)}Vb.displayName="Customized";var $b=["points","className","baseLinePoints","connectNulls"];function Hb(){return Hb=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Hb.apply(null,arguments)}var qb=e=>e&&e.x===+e.x&&e.y===+e.y,Yb=(e,t)=>{var r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=[[]];return e.forEach((e=>{qb(e)?t[t.length-1].push(e):t[t.length-1].length>0&&t.push([])})),qb(e[0])&&t[t.length-1].push(e[0]),t[t.length-1].length<=0&&(t=t.slice(0,-1)),t}(e);t&&(r=[r.reduce(((e,t)=>[...e,...t]),[])]);var n=r.map((e=>e.reduce(((e,t,r)=>"".concat(e).concat(0===r?"M":"L").concat(t.x,",").concat(t.y)),""))).join("");return 1===r.length?"".concat(n,"Z"):n},Gb=e=>{var{points:r,className:i,baseLinePoints:a,connectNulls:o}=e,l=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,$b);if(!r||!r.length)return null;var c=n("recharts-polygon",i);if(a&&a.length){var s=l.stroke&&"none"!==l.stroke,u=((e,t,r)=>{var n=Yb(e,r);return"".concat("Z"===n.slice(-1)?n.slice(0,-1):n,"L").concat(Yb(t.reverse(),r).slice(1))})(r,a,o);return t.createElement("g",{className:c},t.createElement("path",Hb({},z(l,!0),{fill:"Z"===u.slice(-1)?l.fill:"none",stroke:"none",d:u})),s?t.createElement("path",Hb({},z(l,!0),{fill:"none",d:Yb(r,o)})):null,s?t.createElement("path",Hb({},z(l,!0),{fill:"none",d:Yb(a,o)})):null)}var f=Yb(r,o);return t.createElement("path",Hb({},z(l,!0),{fill:"Z"===f.slice(-1)?l.fill:"none",className:c,d:f}))};function Zb(){return Zb=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Zb.apply(null,arguments)}var Jb=e=>{var{cx:r,cy:i,r:a,className:o}=e,l=n("recharts-dot",o);return r===+r&&i===+i&&a===+a?t.createElement("circle",Zb({},C(e),k(e),{className:l,cx:r,cy:i,r:a})):null},Qb=e=>e.graphicalItems.polarItems,ex=et([dh,ph],Ih),tx=et([Qb,Th,ex],Lh),rx=et([tx],Fh),nx=et([rx,yp],Uh),ix=et([nx,Th,tx],Vh),ax=et([nx,Th,tx],((e,t,r)=>r.length>0?e.flatMap((e=>r.flatMap((r=>{var n;return{value:ci(e,null!==(n=t.dataKey)&&void 0!==n?n:r.dataKey),errorDomain:[]}})))).filter(Boolean):null!=(null==t?void 0:t.dataKey)?e.map((e=>({value:ci(e,t.dataKey),errorDomain:[]}))):e.map((e=>({value:e,errorDomain:[]}))))),ox=()=>{},lx=et([Th,Py,ox,ax,ox,Ji,dh],Ey),cx=et([Th,Ji,nx,ix,Up,dh,lx],Sy),sx=et([cx,Th,Ty],Cy),ux=et([Th,cx,sx,dh],Ny),fx=(e,t,r)=>{switch(t){case"angleAxis":return th(e,r);case"radiusAxis":return rh(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},dx=(e,t,r)=>{switch(t){case"angleAxis":return ch(e,r);case"radiusAxis":return uh(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},px=et([fx,Ty,ux,dx],Dy),hx=et([Ji,ix,Dh,dh],iv),yx=et([Ji,fx,Ty,px,sx,dx,nv,hx,dh],lv),vx=et([Ji,fx,px,dx,nv,hx,dh],sv),mx=et([(e,t)=>yx(e,"angleAxis",t,!1)],(e=>{if(e)return e.map((e=>e.coordinate))})),gx=et([(e,t)=>yx(e,"radiusAxis",t,!1)],(e=>{if(e)return e.map((e=>e.coordinate))})),bx=["gridType","radialLines","angleAxisId","radiusAxisId","cx","cy","innerRadius","outerRadius"];function xx(){return xx=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},xx.apply(null,arguments)}function wx(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ox(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?wx(Object(r),!0).forEach((function(t){Px(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):wx(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Px(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Ex=(e,t,r,n)=>{var i="";return n.forEach(((n,a)=>{var o=Jn(t,r,e,n);i+=a?"L ".concat(o.x,",").concat(o.y):"M ".concat(o.x,",").concat(o.y)})),i+="Z"},Ax=e=>{var{cx:r,cy:n,innerRadius:i,outerRadius:a,polarAngles:o,radialLines:l}=e;if(!o||!o.length||!l)return null;var c=Ox({stroke:"#ccc"},C(e));return t.createElement("g",{className:"recharts-polar-grid-angle"},o.map((e=>{var o=Jn(r,n,i,e),l=Jn(r,n,a,e);return t.createElement("line",xx({},c,{key:"line-".concat(e),x1:o.x,y1:o.y,x2:l.x,y2:l.y}))})))},jx=e=>{var{cx:r,cy:i,radius:a,index:o}=e,l=Ox(Ox({stroke:"#ccc"},C(e)),{},{fill:"none"});return t.createElement("circle",xx({},l,{className:n("recharts-polar-grid-concentric-circle",e.className),key:"circle-".concat(o),cx:r,cy:i,r:a}))},Sx=e=>{var{radius:r,index:i}=e,a=Ox(Ox({stroke:"#ccc"},C(e)),{},{fill:"none"});return t.createElement("path",xx({},a,{className:n("recharts-polar-grid-concentric-polygon",e.className),key:"path-".concat(i),d:Ex(r,e.cx,e.cy,e.polarAngles)}))},kx=e=>{var{polarRadius:r,gridType:n}=e;return r&&r.length?t.createElement("g",{className:"recharts-polar-grid-concentric"},r.map(((r,i)=>{var a=i;return"circle"===n?t.createElement(jx,xx({key:a},e,{radius:r,index:i})):t.createElement(Sx,xx({key:a},e,{radius:r,index:i}))}))):null},Mx=e=>{var r,n,i,a,o,l,c,s,{gridType:u="polygon",radialLines:f=!0,angleAxisId:d=0,radiusAxisId:p=0,cx:h,cy:y,innerRadius:v,outerRadius:m}=e,g=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,bx),b=He(fh),x=Ox({cx:null!==(r=null!==(n=null==b?void 0:b.cx)&&void 0!==n?n:h)&&void 0!==r?r:0,cy:null!==(i=null!==(a=null==b?void 0:b.cy)&&void 0!==a?a:y)&&void 0!==i?i:0,innerRadius:null!==(o=null!==(l=null==b?void 0:b.innerRadius)&&void 0!==l?l:v)&&void 0!==o?o:0,outerRadius:null!==(c=null!==(s=null==b?void 0:b.outerRadius)&&void 0!==s?s:m)&&void 0!==c?c:0},g),{polarAngles:w,polarRadius:O,cx:P,cy:E,innerRadius:A,outerRadius:j}=x,S=He((e=>mx(e,d))),k=He((e=>gx(e,p))),M=Array.isArray(w)?w:S,T=Array.isArray(O)?O:k;return j<=0||null==M||null==T?null:t.createElement("g",{className:"recharts-polar-grid"},t.createElement(Ax,xx({cx:P,cy:E,innerRadius:A,outerRadius:j,gridType:u,radialLines:f},x,{polarAngles:M,polarRadius:T})),t.createElement(kx,xx({cx:P,cy:E,innerRadius:A,outerRadius:j,gridType:u,radialLines:f},x,{polarAngles:M,polarRadius:T})))};Mx.displayName="PolarGrid";var Tx=a(4338),Dx=a.n(Tx),Cx=a(2972),Ix=a.n(Cx),Nx=Gr({name:"polarAxis",initialState:{radiusAxis:{},angleAxis:{}},reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),{addRadiusAxis:_x,removeRadiusAxis:Lx,addAngleAxis:Rx,removeAngleAxis:Kx}=Nx.actions,zx=Nx.reducer,Bx=["cx","cy","angle","axisLine"],Fx=["angle","tickFormatter","stroke","tick"];function Wx(){return Wx=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Wx.apply(null,arguments)}function Ux(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Xx(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ux(Object(r),!0).forEach((function(t){Vx(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ux(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Vx(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function $x(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var Hx="radiusAxis";function qx(e){var r=Ue();return(0,t.useEffect)((()=>(r(_x(e)),()=>{r(Lx(e))}))),null}var Yx=(e,r)=>{var{angle:i,tickFormatter:a,stroke:o,tick:l}=e,c=$x(e,Fx),s=(e=>{var t;switch(e){case"left":t="end";break;case"right":t="start";break;default:t="middle"}return t})(e.orientation),u=C(c),f=z(l,!1),d=r.map(((r,c)=>{var d=((e,t,r,n)=>{var{coordinate:i}=e;return Jn(r,n,i,t)})(r,e.angle,e.cx,e.cy),p=Xx(Xx(Xx(Xx({textAnchor:s,transform:"rotate(".concat(90-i,", ").concat(d.x,", ").concat(d.y,")")},u),{},{stroke:"none",fill:o},f),{},{index:c},d),{},{payload:r});return t.createElement(V,Wx({className:n("recharts-polar-radius-axis-tick",ni(l)),key:"tick-".concat(r.coordinate)},M(e,r,c)),((e,r,n)=>t.isValidElement(e)?t.cloneElement(e,r):"function"==typeof e?e(r):t.createElement(mb,Wx({},r,{className:"recharts-polar-radius-axis-tick-value"}),n))(l,p,a?a(r.value,c):r.value))}));return t.createElement(V,{className:"recharts-polar-radius-axis-ticks"},d)},Gx=e=>{var{radiusAxisId:r}=e,i=He(fh),a=He((e=>px(e,"radiusAxis",r))),o=He((e=>yx(e,"radiusAxis",r,!1)));if(null==i||!o||!o.length)return null;var l=Xx(Xx(Xx({},e),{},{scale:a},i),{},{radius:i.outerRadius}),{tick:c,axisLine:s}=l;return t.createElement(V,{className:n("recharts-polar-radius-axis",Hx,l.className)},s&&((e,r)=>{var{cx:n,cy:i,angle:a,axisLine:o}=e,l=$x(e,Bx),c=r.reduce(((e,t)=>[Math.min(e[0],t.coordinate),Math.max(e[1],t.coordinate)]),[1/0,-1/0]),s=Jn(n,i,c[0],a),u=Jn(n,i,c[1],a),f=Xx(Xx(Xx({},C(l)),{},{fill:"none"},z(o,!1)),{},{x1:s.x,y1:s.y,x2:u.x,y2:u.y});return t.createElement("line",Wx({className:"recharts-polar-radius-axis-line"},f))})(l,o),c&&Yx(l,o),Db.renderCallByParent(l,((e,t,r,n)=>{var i=Dx()(n,(e=>e.coordinate||0));return{cx:t,cy:r,startAngle:e,endAngle:e,innerRadius:Ix()(n,(e=>e.coordinate||0)).coordinate||0,outerRadius:i.coordinate||0}})(l.angle,l.cx,l.cy,o)))};class Zx extends t.PureComponent{render(){return t.createElement(t.Fragment,null,t.createElement(qx,{domain:this.props.domain,id:this.props.radiusAxisId,scale:this.props.scale,type:this.props.type,dataKey:this.props.dataKey,unit:void 0,name:this.props.name,allowDuplicatedCategory:this.props.allowDuplicatedCategory,allowDataOverflow:this.props.allowDataOverflow,reversed:this.props.reversed,includeHidden:this.props.includeHidden,allowDecimals:this.props.allowDecimals,tickCount:this.props.tickCount,ticks:this.props.ticks,tick:this.props.tick}),t.createElement(Gx,this.props))}}Vx(Zx,"displayName","PolarRadiusAxis"),Vx(Zx,"axisType",Hx),Vx(Zx,"defaultProps",Yp);var Jx=["children"];function Qx(){return Qx=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Qx.apply(null,arguments)}function ew(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function tw(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ew(Object(r),!0).forEach((function(t){rw(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ew(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function rw(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var nw=Math.PI/180,iw=1e-5,aw="angleAxis";function ow(e){var r=Ue(),n=(0,t.useMemo)((()=>{var{children:t}=e,r=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,Jx);return r}),[e]),i=He((e=>th(e,n.id))),a=n===i;return(0,t.useEffect)((()=>(r(Rx(n)),()=>{r(Kx(n))})),[r,n]),a?e.children:null}var lw=e=>{var{cx:r,cy:n,radius:i,axisLineType:a,axisLine:o,ticks:l}=e;if(!o)return null;var c=tw(tw({},C(e)),{},{fill:"none"},z(o,!1));if("circle"===a)return t.createElement(Jb,Qx({className:"recharts-polar-angle-axis-line"},c,{cx:r,cy:n,r:i}));var s=l.map((e=>Jn(r,n,i,e.coordinate)));return t.createElement(Gb,Qx({className:"recharts-polar-angle-axis-line"},c,{points:s}))},cw=e=>{var{tick:r,tickProps:n,value:i}=e;return r?t.isValidElement(r)?t.cloneElement(r,n):"function"==typeof r?r(n):t.createElement(mb,Qx({},n,{className:"recharts-polar-angle-axis-tick-value"}),i):null},sw=e=>{var{tick:r,tickLine:i,tickFormatter:a,stroke:o,ticks:l}=e,c=C(e),s=z(r,!1),u=tw(tw({},c),{},{fill:"none"},z(i,!1)),f=l.map(((l,f)=>{var d=((e,t)=>{var{cx:r,cy:n,radius:i,orientation:a,tickSize:o}=t,l=o||8,c=Jn(r,n,i,e.coordinate),s=Jn(r,n,i+("inner"===a?-1:1)*l,e.coordinate);return{x1:c.x,y1:c.y,x2:s.x,y2:s.y}})(l,e),p=((e,t)=>{var r=Math.cos(-e.coordinate*nw);return r>iw?"outer"===t?"start":"end":r<-iw?"outer"===t?"end":"start":"middle"})(l,e.orientation),h=tw(tw(tw({},c),{},{textAnchor:p,stroke:"none",fill:o},s),{},{index:f,payload:l,x:d.x2,y:d.y2});return t.createElement(V,Qx({className:n("recharts-polar-angle-axis-tick",ni(r)),key:"tick-".concat(l.coordinate)},M(e,l,f)),i&&t.createElement("line",Qx({className:"recharts-polar-angle-axis-tick-line"},u,d)),t.createElement(cw,{tick:r,tickProps:h,value:a?a(l.value,f):l.value}))}));return t.createElement(V,{className:"recharts-polar-angle-axis-ticks"},f)},uw=e=>{var{angleAxisId:r}=e,i=He(fh),a=He((e=>px(e,"angleAxis",r))),o=Wi(),l=He((e=>yx(e,"angleAxis",r,o)));if(null==i||!l||!l.length)return null;var c=tw(tw(tw({},e),{},{scale:a},i),{},{radius:i.outerRadius});return t.createElement(V,{className:n("recharts-polar-angle-axis",aw,c.className)},t.createElement(lw,Qx({},c,{ticks:l})),t.createElement(sw,Qx({},c,{ticks:l})))};class fw extends t.PureComponent{render(){return this.props.radius<=0?null:t.createElement(ow,{id:this.props.angleAxisId,scale:this.props.scale,type:this.props.type,dataKey:this.props.dataKey,unit:void 0,name:this.props.name,allowDuplicatedCategory:!1,allowDataOverflow:!1,reversed:this.props.reversed,includeHidden:!1,allowDecimals:this.props.allowDecimals,tickCount:this.props.tickCount,ticks:this.props.ticks,tick:this.props.tick,domain:this.props.domain},t.createElement(uw,this.props))}}function dw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function pw(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?dw(Object(r),!0).forEach((function(t){hw(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):dw(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function hw(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}rw(fw,"displayName","PolarAngleAxis"),rw(fw,"axisType",aw),rw(fw,"defaultProps",qp);var yw=et([Qb,(e,t)=>t],((e,t)=>e.filter((e=>"pie"===e.type)).find((e=>e.id===t)))),vw=[],mw=(e,t,r)=>0===(null==r?void 0:r.length)?vw:r,gw=et([yp,yw,mw],((e,t,r)=>{var n,{chartData:i}=e;if(null!=t&&((n=null!=(null==t?void 0:t.data)&&t.data.length>0?t.data:i)&&n.length||null==r||(n=r.map((e=>pw(pw({},t.presentationProps),e.props)))),null!=n))return n})),bw=et([gw,yw,mw],((e,t,r)=>{if(null!=e&&null!=t)return e.map(((e,n)=>{var i,a,o=ci(e,t.nameKey,t.name);return a=null!=r&&null!==(i=r[n])&&void 0!==i&&null!==(i=i.props)&&void 0!==i&&i.fill?r[n].props.fill:"object"==typeof e&&null!=e&&"fill"in e?e.fill:t.fill,{value:Ai(o,t.dataKey),color:a,payload:e,type:t.legendType}}))})),xw=et([gw,yw,mw,Ki],((e,t,r,n)=>{if(null!=t&&null!=e)return function(e){var t,r,n,{pieSettings:i,displayedData:a,cells:o,offset:l}=e,{cornerRadius:c,startAngle:u,endAngle:f,dataKey:p,nameKey:h,tooltipType:y}=i,v=Math.abs(i.minAngle),m=bO(u,f),g=Math.abs(m),b=a.length<=1?0:null!==(t=i.paddingAngle)&&void 0!==t?t:0,x=a.filter((e=>0!==ci(e,p,0))).length,w=g-x*v-(g>=360?x:x-1)*b,O=a.reduce(((e,t)=>{var r=ci(t,p,0);return e+(d(r)?r:0)}),0);O>0&&(r=a.map(((e,t)=>{var r,a=ci(e,p,0),f=ci(e,h,t),g=gO(i,l,e),x=(d(a)?a:0)/O,P=dO(dO({},e),o&&o[t]&&o[t].props),E=(r=t?n.endAngle+s(m)*b*(0!==a?1:0):u)+s(m)*((0!==a?v:0)+x*w),A=(r+E)/2,j=(g.innerRadius+g.outerRadius)/2,S=[{name:f,value:a,payload:P,dataKey:p,type:y}],k=Jn(g.cx,g.cy,j,A);return n=dO(dO(dO(dO({},i.presentationProps),{},{percent:x,cornerRadius:c,name:f,tooltipPayload:S,midAngle:A,middleRadius:j,tooltipPosition:k},P),g),{},{value:ci(e,p),startAngle:r,endAngle:E,payload:P,paddingAngle:s(m)*b})})));return r}({offset:n,pieSettings:t,displayedData:e,cells:r})})),ww=a(2938),Ow=a.n(ww);function Pw(){return Pw=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Pw.apply(null,arguments)}var Ew=(e,t,r,n,i)=>{var a,o=r-n;return a="M ".concat(e,",").concat(t),a+="L ".concat(e+r,",").concat(t),a+="L ".concat(e+r-o/2,",").concat(t+i),a+="L ".concat(e+r-o/2-n,",").concat(t+i),a+="L ".concat(e,",").concat(t," Z")},Aw={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},jw=e=>{var r=pl(e,Aw),i=(0,t.useRef)(),[a,o]=(0,t.useState)(-1);(0,t.useEffect)((()=>{if(i.current&&i.current.getTotalLength)try{var e=i.current.getTotalLength();e&&o(e)}catch(e){}}),[]);var{x:l,y:c,upperWidth:s,lowerWidth:u,height:f,className:d}=r,{animationEasing:p,animationDuration:h,animationBegin:y,isUpdateAnimationActive:v}=r;if(l!==+l||c!==+c||s!==+s||u!==+u||f!==+f||0===s&&0===u||0===f)return null;var m=n("recharts-trapezoid",d);return v?t.createElement(Vl,{canBegin:a>0,from:{upperWidth:0,lowerWidth:0,height:f,x:l,y:c},to:{upperWidth:s,lowerWidth:u,height:f,x:l,y:c},duration:h,animationEasing:p,isActive:v},(e=>{var{upperWidth:n,lowerWidth:o,height:l,x:c,y:s}=e;return t.createElement(Vl,{canBegin:a>0,from:"0px ".concat(-1===a?1:a,"px"),to:"".concat(a,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:h,easing:p},t.createElement("path",Pw({},z(r,!0),{className:m,d:Ew(c,s,n,o,l),ref:i})))})):t.createElement("g",null,t.createElement("path",Pw({},z(r,!0),{className:m,d:Ew(l,c,s,u,f)})))},Sw=["option","shapeType","propTransformer","activeClassName","isActive"];function kw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Mw(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?kw(Object(r),!0).forEach((function(t){Tw(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):kw(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Tw(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Dw(e,t){return Mw(Mw({},t),e)}function Cw(e){var{shapeType:r,elementProps:n}=e;switch(r){case"rectangle":return t.createElement(Yl,n);case"trapezoid":return t.createElement(jw,n);case"sector":return t.createElement(tc,n);case"symbols":if(function(e){return"symbols"===e}(r))return t.createElement(De,n);break;default:return null}}function Iw(e){return(0,t.isValidElement)(e)?e.props:e}function Nw(e){var r,{option:n,shapeType:i,propTransformer:a=Dw,activeClassName:o="recharts-active-shape",isActive:l}=e,c=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,Sw);if((0,t.isValidElement)(n))r=(0,t.cloneElement)(n,Mw(Mw({},c),Iw(n)));else if("function"==typeof n)r=n(c);else if(Ow()(n)&&"boolean"!=typeof n){var s=a(n,c);r=t.createElement(Cw,{shapeType:i,elementProps:s})}else{var u=c;r=t.createElement(Cw,{shapeType:i,elementProps:u})}return l?t.createElement(V,{className:o},r):r}var _w=(e,t)=>{var r=Ue();return(n,i)=>a=>{null==e||e(n,i,a),r(Av({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}},Lw=e=>{var t=Ue();return(r,n)=>i=>{null==e||e(r,n,i),t(jv())}},Rw=(e,t)=>{var r=Ue();return(n,i)=>a=>{null==e||e(n,i,a),r(kv({activeIndex:String(i),activeDataKey:t,activeCoordinate:n.tooltipPosition}))}};function Kw(e){var{fn:r,args:n}=e,i=Ue(),a=Wi();return(0,t.useEffect)((()=>{if(!a){var e=r(n);return i(Ov(e)),()=>{i(Pv(e))}}}),[r,n,i,a]),null}var zw,Bw=()=>{};function Fw(e){var{legendPayload:r}=e,n=Ue(),i=Wi();return(0,t.useEffect)((()=>i?Bw:(n(Ha(r)),()=>{n(qa(r))})),[n,i,r]),null}function Ww(e){var{legendPayload:r}=e,n=Ue(),i=He(Ji);return(0,t.useEffect)((()=>"centric"!==i&&"radial"!==i?Bw:(n(Ha(r)),()=>{n(qa(r))})),[n,i,r]),null}function Uw(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"animation-",n=(0,t.useRef)(y(r)),i=(0,t.useRef)(e);return i.current!==e&&(n.current=y(r),i.current=e),n.current}var Xw=null!==(zw=t["useId".toString()])&&void 0!==zw?zw:()=>{var[e]=t.useState((()=>y("uid-")));return e};var Vw=(0,t.createContext)(void 0),$w=e=>{var{id:r,type:n,children:i}=e,a=function(e,t){var r=Xw();return t||(e?"".concat(e,"-").concat(r):r)}("recharts-".concat(n),r);return t.createElement(Vw.Provider,{value:a},i(a))};var Hw=Gr({name:"graphicalItems",initialState:{cartesianItems:[],polarItems:[]},reducers:{addCartesianGraphicalItem(e,t){e.cartesianItems.push(t.payload)},replaceCartesianGraphicalItem(e,t){var{prev:r,next:n}=t.payload,i=Ft(e).cartesianItems.indexOf(r);i>-1&&(e.cartesianItems[i]=n)},removeCartesianGraphicalItem(e,t){var r=Ft(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},addPolarGraphicalItem(e,t){e.polarItems.push(t.payload)},removePolarGraphicalItem(e,t){var r=Ft(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)}}}),{addCartesianGraphicalItem:qw,replaceCartesianGraphicalItem:Yw,removeCartesianGraphicalItem:Gw,addPolarGraphicalItem:Zw,removePolarGraphicalItem:Jw}=Hw.actions,Qw=Hw.reducer;function eO(e){var r=Ue(),n=(0,t.useRef)(null);return(0,t.useEffect)((()=>{null===n.current?r(qw(e)):n.current!==e&&r(Yw({prev:n.current,next:e})),n.current=e}),[r,e]),(0,t.useEffect)((()=>()=>{n.current&&(r(Gw(n.current)),n.current=null)}),[r]),null}function tO(e){var r=Ue();return(0,t.useEffect)((()=>(r(Zw(e)),()=>{r(Jw(e))})),[r,e]),null}function rO(){}var nO={begin:0,duration:1e3,easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}},iO={t:0},aO={t:1};function oO(e){var r=pl(e,nO),{isActive:n,canBegin:i,duration:a,easing:o,begin:l,onAnimationEnd:c,onAnimationStart:s,children:u}=r,f=Kl("JavascriptAnimate",r.animationManager),[d,p]=(0,t.useState)(n?iO:aO),h=(0,t.useRef)(null);return(0,t.useEffect)((()=>{n||p(aO)}),[n]),(0,t.useEffect)((()=>{if(!n||!i)return rO;var e=Nl(iO,aO,wl(o),a,p,f.getTimeoutController());return f.start([s,l,()=>{h.current=e()},a,c]),()=>{f.stop(),h.current&&h.current(),c()}}),[n,i,a,o,l,s,c,f]),u(d.t)}var lO=["onMouseEnter","onClick","onMouseLeave"],cO=["id"],sO=["id"];function uO(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function fO(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function dO(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?fO(Object(r),!0).forEach((function(t){pO(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):fO(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function pO(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function hO(){return hO=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},hO.apply(null,arguments)}function yO(e){var r=(0,t.useMemo)((()=>R(e.children,zg)),[e.children]),n=He((t=>bw(t,e.id,r)));return null==n?null:t.createElement(Ww,{legendPayload:n})}function vO(e){var{dataKey:t,nameKey:r,sectors:n,stroke:i,strokeWidth:a,fill:o,name:l,hide:c,tooltipType:s}=e;return{dataDefinedOnItem:null==n?void 0:n.map((e=>e.tooltipPayload)),positions:null==n?void 0:n.map((e=>e.tooltipPosition)),settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:r,name:Ai(l,t),hide:c,type:s,color:o,unit:""}}}var mO=(e,t)=>e>t?"start":e<t?"end":"middle",gO=(e,t,r)=>{var{top:n,left:i,width:a,height:o}=t,l=Qn(a,o),c=i+v(e.cx,a,a/2),s=n+v(e.cy,o,o/2),u=v(e.innerRadius,l,0),f=((e,t,r)=>"function"==typeof t?t(e):v(t,r,.8*r))(r,e.outerRadius,l);return{cx:c,cy:s,innerRadius:u,outerRadius:f,maxRadius:e.maxRadius||Math.sqrt(a*a+o*o)/2}},bO=(e,t)=>s(t-e)*Math.min(Math.abs(t-e),360),xO=(e,r)=>{if(t.isValidElement(e))return t.cloneElement(e,r);if("function"==typeof e)return e(r);var i=n("recharts-pie-label-line","boolean"!=typeof e?e.className:"");return t.createElement(il,hO({},r,{type:"linear",className:i}))},wO=(e,r,i)=>{if(t.isValidElement(e))return t.cloneElement(e,r);var a=i;if("function"==typeof e&&(a=e(r),t.isValidElement(a)))return a;var o=n("recharts-pie-label-text","boolean"!=typeof e&&"function"!=typeof e?e.className:"");return t.createElement(mb,hO({},r,{alignmentBaseline:"middle",className:o}),a)};function OO(e){var{sectors:r,props:n,showLabels:i}=e,{label:a,labelLine:o,dataKey:l}=n;if(!i||!a||!r)return null;var c=C(n),s=z(a,!1),u=z(o,!1),f="object"==typeof a&&"offsetRadius"in a&&a.offsetRadius||20,d=r.map(((e,r)=>{var n=(e.startAngle+e.endAngle)/2,i=Jn(e.cx,e.cy,e.outerRadius+f,n),d=dO(dO(dO(dO({},c),e),{},{stroke:"none"},s),{},{index:r,textAnchor:mO(i.x,e.cx)},i),p=dO(dO(dO(dO({},c),e),{},{fill:"none",stroke:e.fill},u),{},{index:r,points:[Jn(e.cx,e.cy,e.outerRadius,n),i],key:"line"});return t.createElement(V,{key:"label-".concat(e.startAngle,"-").concat(e.endAngle,"-").concat(e.midAngle,"-").concat(r)},o&&xO(o,p),wO(a,d,ci(e,l)))}));return t.createElement(V,{className:"recharts-pie-labels"},d)}function PO(e){var{sectors:r,activeShape:n,inactiveShape:i,allOtherPieProps:a,showLabels:o}=e,l=He(Mm),{onMouseEnter:c,onClick:s,onMouseLeave:u}=a,f=uO(a,lO),d=_w(c,a.dataKey),p=Lw(u),h=Rw(s,a.dataKey);return null==r?null:t.createElement(t.Fragment,null,r.map(((e,o)=>{if(0===(null==e?void 0:e.startAngle)&&0===(null==e?void 0:e.endAngle)&&1!==r.length)return null;var c=n&&String(o)===l,s=c?n:l?i:null,u=dO(dO({},e),{},{stroke:e.stroke,tabIndex:-1,[Ii]:o,[Ni]:a.dataKey});return t.createElement(V,hO({tabIndex:-1,className:"recharts-pie-sector"},M(f,e,o),{onMouseEnter:d(e,o),onMouseLeave:p(e,o),onClick:h(e,o),key:"sector-".concat(null==e?void 0:e.startAngle,"-").concat(null==e?void 0:e.endAngle,"-").concat(e.midAngle,"-").concat(o)}),t.createElement(Nw,hO({option:s,isActive:c,shapeType:"sector"},u)))})),t.createElement(OO,{sectors:r,props:a,showLabels:o}))}function EO(e){var{props:r,previousSectorsRef:n}=e,{sectors:i,isAnimationActive:a,animationBegin:o,animationDuration:c,animationEasing:s,activeShape:u,inactiveShape:f,onAnimationStart:d,onAnimationEnd:p}=r,h=Uw(r,"recharts-pie-"),y=n.current,[v,m]=(0,t.useState)(!0),b=(0,t.useCallback)((()=>{"function"==typeof p&&p(),m(!1)}),[p]),x=(0,t.useCallback)((()=>{"function"==typeof d&&d(),m(!0)}),[d]);return t.createElement(oO,{begin:o,duration:c,isActive:a,easing:s,onAnimationStart:x,onAnimationEnd:b,key:h},(e=>{var a=[],o=(i&&i[0]).startAngle;return i.forEach(((t,r)=>{var n=y&&y[r],i=r>0?l()(t,"paddingAngle",0):0;if(n){var c=g(n.endAngle-n.startAngle,t.endAngle-t.startAngle),s=dO(dO({},t),{},{startAngle:o+i,endAngle:o+c(e)+i});a.push(s),o=s.endAngle}else{var{endAngle:u,startAngle:f}=t,d=g(0,u-f)(e),p=dO(dO({},t),{},{startAngle:o+i,endAngle:o+d+i});a.push(p),o=p.endAngle}})),n.current=a,t.createElement(V,null,t.createElement(PO,{sectors:a,activeShape:u,inactiveShape:f,allOtherPieProps:r,showLabels:!v}))}))}function AO(e){var{sectors:r,isAnimationActive:n,activeShape:i,inactiveShape:a}=e,o=(0,t.useRef)(null),l=o.current;return n&&r&&r.length&&(!l||l!==r)?t.createElement(EO,{props:e,previousSectorsRef:o}):t.createElement(PO,{sectors:r,activeShape:i,inactiveShape:a,allOtherPieProps:e,showLabels:!0})}function jO(e){var{hide:r,className:i,rootTabIndex:a}=e,o=n("recharts-pie",i);return r?null:t.createElement(V,{tabIndex:a,className:o},t.createElement(AO,e))}var SO={animationBegin:400,animationDuration:1500,animationEasing:"ease",cx:"50%",cy:"50%",dataKey:"value",endAngle:360,fill:"#808080",hide:!1,innerRadius:0,isAnimationActive:!Oo.isSsr,labelLine:!0,legendType:"rect",minAngle:0,nameKey:"name",outerRadius:"80%",paddingAngle:0,rootTabIndex:0,startAngle:0,stroke:"#fff"};function kO(e){var{id:r}=e,n=uO(e,cO),i=(0,t.useMemo)((()=>R(e.children,zg)),[e.children]),a=He((e=>xw(e,r,i)));return t.createElement(t.Fragment,null,t.createElement(Kw,{fn:vO,args:dO(dO({},e),{},{sectors:a})}),t.createElement(jO,hO({},n,{sectors:a})))}function MO(e){var r=pl(e,SO),{id:n}=r,i=uO(r,sO),a=C(i);return t.createElement($w,{id:n,type:"pie"},(e=>t.createElement(t.Fragment,null,t.createElement(tO,{type:"pie",id:e,data:i.data,dataKey:i.dataKey,hide:i.hide,angleAxisId:0,radiusAxisId:0,name:i.name,nameKey:i.nameKey,tooltipType:i.tooltipType,legendType:i.legendType,fill:i.fill,cx:i.cx,cy:i.cy,startAngle:i.startAngle,endAngle:i.endAngle,paddingAngle:i.paddingAngle,minAngle:i.minAngle,innerRadius:i.innerRadius,outerRadius:i.outerRadius,cornerRadius:i.cornerRadius,presentationProps:a}),t.createElement(yO,hO({},i,{id:e})),t.createElement(kO,hO({},i,{id:e})),i.children)))}MO.displayName="Pie";var TO=et([Ki],(e=>{if(e)return{top:e.top,bottom:e.bottom,left:e.left,right:e.right}})),DO=et([TO,ji,Si],((e,t,r)=>{if(e&&null!=t&&null!=r)return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}})),CO=()=>He(Tm),IO=()=>He(TO),NO=()=>He(DO),_O=()=>He(Rm);function LO(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function RO(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?LO(Object(r),!0).forEach((function(t){KO(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):LO(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function KO(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function zO(e){var{points:r,mainColor:n,activeDot:i,itemDataKey:a}=e,o=He(Mm),l=_O();if(null==r||null==l)return null;var c=r.find((e=>l.includes(e.payload)));return O(c)?null:(e=>{var{point:r,childIndex:n,mainColor:i,activeDot:a,dataKey:o}=e;if(!1===a||null==r.x||null==r.y)return null;var l,c=RO(RO({index:n,dataKey:o,cx:r.x,cy:r.y,r:4,fill:null!=i?i:"none",strokeWidth:2,stroke:"#fff",payload:r.payload,value:r.value},z(a,!1)),k(a));return l=(0,t.isValidElement)(a)?(0,t.cloneElement)(a,c):"function"==typeof a?a(c):t.createElement(Jb,c),t.createElement(V,{className:"recharts-active-dot"},l)})({point:c,childIndex:Number(o),mainColor:n,dataKey:a,activeDot:i})}function BO(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function FO(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?BO(Object(r),!0).forEach((function(t){WO(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):BO(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function WO(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var UO=(e,t)=>px(e,"radiusAxis",t),XO=et([UO],(e=>{if(null!=e)return{scale:e}})),VO=et([rh,UO],((e,t)=>{if(null!=e&&null!=t)return FO(FO({},e),{},{scale:t})})),$O=(e,t,r)=>th(e,r),HO=(e,t,r)=>px(e,"angleAxis",r),qO=et([$O,HO],((e,t)=>{if(null!=e&&null!=t)return FO(FO({},e),{},{scale:t})})),YO=et([$O,HO,fh],((e,t,r)=>{if(null!=r&&null!=t)return{scale:t,type:e.type,dataKey:e.dataKey,cx:r.cx,cy:r.cy}})),GO=et([Ji,VO,(e,t,r,n)=>yx(e,"radiusAxis",t,n),qO,(e,t,r,n)=>yx(e,"angleAxis",r,n)],((e,t,r,n,i)=>si(e,"radiusAxis")?Pi(t,r,!1):Pi(n,i,!1))),ZO=et([Qb,(e,t,r,n,i)=>i],((e,t)=>{if(e.some((e=>"radar"===e.type&&t===e.dataKey)))return t})),JO=et([XO,YO,yp,ZO,GO],((e,t,r,n,i)=>{var{chartData:a,dataStartIndex:o,dataEndIndex:l}=r;if(null!=e&&null!=t&&null!=a&&null!=i&&null!=n)return function(e){var{radiusAxis:t,angleAxis:r,displayedData:n,dataKey:i,bandSize:a}=e,{cx:o,cy:l}=r,c=!1,s=[],u="number"!==r.type&&null!=a?a:0;n.forEach(((e,n)=>{var a=ci(e,r.dataKey,n),f=ci(e,i),d=r.scale(a)+u,p=Array.isArray(f)?Nb()(f):f,h=O(p)?void 0:t.scale(p);Array.isArray(f)&&f.length>=2&&(c=!0),s.push(tP(tP({},Jn(o,l,h,d)),{},{name:a,value:f,cx:o,cy:l,radius:h,angle:d,payload:e}))}));var f=[];c&&s.forEach((e=>{if(Array.isArray(e.value)){var r=e.value[0],n=O(r)?void 0:t.scale(r);f.push(tP(tP({},e),{},{radius:n},Jn(o,l,n,e.angle)))}else f.push(e)}));return{points:s,isRange:c,baseLinePoints:f}}({radiusAxis:e,angleAxis:t,displayedData:a.slice(o,l+1),dataKey:n,bandSize:i})})),QO=["id"];function eP(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function tP(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?eP(Object(r),!0).forEach((function(t){rP(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):eP(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function rP(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function nP(){return nP=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},nP.apply(null,arguments)}function iP(e,t){return e&&"none"!==e?e:t}var aP=e=>{var{dataKey:t,name:r,stroke:n,fill:i,legendType:a,hide:o}=e;return[{inactive:o,dataKey:t,type:a,color:iP(n,i),value:Ai(r,t),payload:e}]};function oP(e){var{dataKey:t,stroke:r,strokeWidth:n,fill:i,name:a,hide:o,tooltipType:l}=e;return{dataDefinedOnItem:void 0,positions:void 0,settings:{stroke:r,strokeWidth:n,fill:i,nameKey:void 0,dataKey:t,name:Ai(a,t),hide:o,type:l,color:iP(r,i),unit:""}}}function lP(e){var{points:r,props:i}=e,{dot:a,dataKey:o}=i;if(!a)return null;var{id:l}=i,c=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(i,QO),s=C(c),u=z(a,!0),f=r.map(((e,r)=>{var i=tP(tP(tP({key:"dot-".concat(r),r:3},s),u),{},{dataKey:o,cx:e.x,cy:e.y,index:r,payload:e});return function(e,r){return t.isValidElement(e)?t.cloneElement(e,r):"function"==typeof e?e(r):t.createElement(Jb,nP({},r,{className:n("recharts-radar-dot","boolean"!=typeof e?e.className:"")}))}(a,i)}));return t.createElement(V,{className:"recharts-radar-dots"},f)}function cP(e){var{points:r,props:n,showLabels:i}=e;if(null==r)return null;var a,{shape:o,isRange:l,baseLinePoints:c,connectNulls:s}=n;return a=t.isValidElement(o)?t.cloneElement(o,tP(tP({},n),{},{points:r})):"function"==typeof o?o(tP(tP({},n),{},{points:r})):t.createElement(Gb,nP({},z(n,!0),{onMouseEnter:e=>{var{onMouseEnter:t}=n;t&&t(n,e)},onMouseLeave:e=>{var{onMouseLeave:t}=n;t&&t(n,e)},points:r,baseLinePoints:l?c:null,connectNulls:s})),t.createElement(V,{className:"recharts-radar-polygon"},a,t.createElement(lP,{props:n,points:r}),i&&Ub.renderCallByParent(n,r))}function sP(e){var{props:r,previousPointsRef:n}=e,{points:i,isAnimationActive:a,animationBegin:o,animationDuration:l,animationEasing:c,onAnimationEnd:s,onAnimationStart:u}=r,f=n.current,d=Uw(r,"recharts-radar-"),[p,h]=(0,t.useState)(!0),y=(0,t.useCallback)((()=>{"function"==typeof s&&s(),h(!1)}),[s]),v=(0,t.useCallback)((()=>{"function"==typeof u&&u(),h(!0)}),[u]);return t.createElement(oO,{begin:o,duration:l,isActive:a,easing:c,key:"radar-".concat(d),onAnimationEnd:y,onAnimationStart:v},(e=>{var a=f&&f.length/i.length,o=1===e?i:i.map(((t,r)=>{var n=f&&f[Math.floor(r*a)];if(n){var i=g(n.x,t.x),o=g(n.y,t.y);return tP(tP({},t),{},{x:i(e),y:o(e)})}var l=g(t.cx,t.x),c=g(t.cy,t.y);return tP(tP({},t),{},{x:l(e),y:c(e)})}));return e>0&&(n.current=o),t.createElement(cP,{points:o,props:r,showLabels:!p})}))}function uP(e){var{points:r,isAnimationActive:n,isRange:i}=e,a=(0,t.useRef)(void 0),o=a.current;return!(n&&r&&r.length)||i||o&&o===r?t.createElement(cP,{points:r,props:e,showLabels:!0}):t.createElement(sP,{props:e,previousPointsRef:a})}var fP={angleAxisId:0,radiusAxisId:0,hide:!1,activeDot:!0,dot:!1,legendType:"rect",isAnimationActive:!Oo.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"};class dP extends t.PureComponent{render(){var{hide:e,className:r,points:i}=this.props;if(e)return null;var a=n("recharts-radar",r);return t.createElement(t.Fragment,null,t.createElement(V,{className:a},t.createElement(uP,this.props)),t.createElement(zO,{points:i,mainColor:iP(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot}))}}function pP(e){var r=Wi(),n=He((t=>JO(t,e.radiusAxisId,e.angleAxisId,r,e.dataKey)));return t.createElement(dP,nP({},e,{points:null==n?void 0:n.points,baseLinePoints:null==n?void 0:n.baseLinePoints,isRange:null==n?void 0:n.isRange}))}class hP extends t.PureComponent{render(){return t.createElement($w,{id:this.props.id,type:"radar"},(e=>t.createElement(t.Fragment,null,t.createElement(tO,{type:"radar",id:e,data:void 0,dataKey:this.props.dataKey,hide:this.props.hide,angleAxisId:this.props.angleAxisId,radiusAxisId:this.props.radiusAxisId}),t.createElement(Ww,{legendPayload:aP(this.props)}),t.createElement(Kw,{fn:oP,args:this.props}),t.createElement(pP,nP({},this.props,{id:e})))))}}function yP(){return yP=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},yP.apply(null,arguments)}function vP(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function mP(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?vP(Object(r),!0).forEach((function(t){gP(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):vP(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function gP(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function bP(e){return"string"==typeof e?parseInt(e,10):e}function xP(e,t){var r="".concat(t.cx||e.cx),n=Number(r),i="".concat(t.cy||e.cy),a=Number(i);return mP(mP(mP({},t),e),{},{cx:n,cy:a})}function wP(e){return t.createElement(Nw,yP({shapeType:"sector",propTransformer:xP},e))}rP(hP,"displayName","Radar"),rP(hP,"defaultProps",fP);var OP="Invariant failed";var PP=["x","y"];function EP(){return EP=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},EP.apply(null,arguments)}function AP(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function jP(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?AP(Object(r),!0).forEach((function(t){SP(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):AP(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function SP(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function kP(e,t){var{x:r,y:n}=e,i=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,PP),a="".concat(r),o=parseInt(a,10),l="".concat(n),c=parseInt(l,10),s="".concat(t.height||i.height),u=parseInt(s,10),f="".concat(t.width||i.width),d=parseInt(f,10);return jP(jP(jP(jP(jP({},t),i),o?{x:o}:{}),c?{y:c}:{}),{},{height:u,width:d,name:t.name,radius:t.radius})}function MP(e){return t.createElement(Nw,EP({shapeType:"rectangle",propTransformer:kP,activeClassName:"recharts-active-bar"},e))}var TP=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(r,n)=>{if(d(e))return e;var i=d(r)||O(r);return i?e(r,n):(i||function(e){if(!e)throw new Error(OP)}(!1),t)}},DP=Gr({name:"errorBars",initialState:{},reducers:{addErrorBar:(e,t)=>{var{itemId:r,errorBar:n}=t.payload;e[r]||(e[r]=[]),e[r].push(n)},removeErrorBar:(e,t)=>{var{itemId:r,errorBar:n}=t.payload;e[r]&&(e[r]=e[r].filter((e=>e.dataKey!==n.dataKey||e.direction!==n.direction)))}}}),{addErrorBar:CP,removeErrorBar:IP}=DP.actions,NP=DP.reducer,_P=["children"];var LP=()=>{},RP={data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0},KP=(0,t.createContext)(RP);function zP(e){var{children:r}=e,n=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,_P);return t.createElement(KP.Provider,{value:n},r)}function BP(e){var r=Ue(),n=(0,t.useContext)(Vw);return(0,t.useEffect)((()=>{if(null==n)return LP;var t={itemId:n,errorBar:e};return r(CP(t)),()=>{r(IP(t))}}),[r,n,e]),null}function FP(e,t){var r,n,i=He((t=>Ah(t,e))),a=He((e=>Sh(e,t))),o=null!==(r=null==i?void 0:i.allowDataOverflow)&&void 0!==r?r:Eh.allowDataOverflow,l=null!==(n=null==a?void 0:a.allowDataOverflow)&&void 0!==n?n:jh.allowDataOverflow;return{needClip:o||l,needClipX:o,needClipY:l}}function WP(e){var{xAxisId:r,yAxisId:n,clipPathId:i}=e,a=NO(),{needClipX:o,needClipY:l,needClip:c}=FP(r,n);if(!c)return null;var{x:s,y:u,width:f,height:d}=a;return t.createElement("clipPath",{id:"clipPath-".concat(i)},t.createElement("rect",{x:o?s:s-f/2,y:l?u:u-d/2,width:o?f:2*f,height:l?d:2*d}))}var UP=["onMouseEnter","onMouseLeave","onClick"],XP=["value","background","tooltipPosition"],VP=["id"],$P=["onMouseEnter","onClick","onMouseLeave"];function HP(){return HP=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},HP.apply(null,arguments)}function qP(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function YP(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?qP(Object(r),!0).forEach((function(t){GP(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):qP(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function GP(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ZP(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var JP=e=>{var{dataKey:t,name:r,fill:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Ai(r,t),payload:e}]};function QP(e){var{dataKey:t,stroke:r,strokeWidth:n,fill:i,name:a,hide:o,unit:l}=e;return{dataDefinedOnItem:void 0,positions:void 0,settings:{stroke:r,strokeWidth:n,fill:i,dataKey:t,nameKey:void 0,name:Ai(a,t),hide:o,type:e.tooltipType,color:e.fill,unit:l}}}function eE(e){var r=He(Mm),{data:n,dataKey:i,background:a,allOtherBarProps:o}=e,{onMouseEnter:l,onMouseLeave:c,onClick:s}=o,u=ZP(o,UP),f=_w(l,i),d=Lw(c),p=Rw(s,i);if(!a||null==n)return null;var h=z(a,!1);return t.createElement(t.Fragment,null,n.map(((e,n)=>{var{value:o,background:l,tooltipPosition:c}=e,s=ZP(e,XP);if(!l)return null;var y=f(e,n),v=d(e,n),m=p(e,n),g=YP(YP(YP(YP(YP({option:a,isActive:String(n)===r},s),{},{fill:"#eee"},l),h),M(u,e,n)),{},{onMouseEnter:y,onMouseLeave:v,onClick:m,dataKey:i,index:n,className:"recharts-bar-background-rectangle"});return t.createElement(MP,HP({key:"background-bar-".concat(n)},g))})))}function tE(e){var{data:r,props:n,showLabels:i}=e,a=C(n),{id:o}=a,l=ZP(a,VP),{shape:c,dataKey:s,activeBar:u}=n,f=He(Mm),d=He(Dm),{onMouseEnter:p,onClick:h,onMouseLeave:y}=n,v=ZP(n,$P),m=_w(p,s),g=Lw(y),b=Rw(h,s);return r?t.createElement(t.Fragment,null,r.map(((e,r)=>{var n=u&&String(r)===f&&(null==d||s===d),i=n?u:c,a=YP(YP(YP({},l),e),{},{isActive:n,option:i,index:r,dataKey:s});return t.createElement(V,HP({className:"recharts-bar-rectangle"},M(v,e,r),{onMouseEnter:m(e,r),onMouseLeave:g(e,r),onClick:b(e,r),key:"rectangle-".concat(null==e?void 0:e.x,"-").concat(null==e?void 0:e.y,"-").concat(null==e?void 0:e.value,"-").concat(r)}),t.createElement(MP,a))})),i&&Ub.renderCallByParent(n,r)):null}function rE(e){var{props:r,previousRectanglesRef:n}=e,{data:i,layout:a,isAnimationActive:o,animationBegin:l,animationDuration:c,animationEasing:s,onAnimationEnd:u,onAnimationStart:f}=r,d=n.current,p=Uw(r,"recharts-bar-"),[h,y]=(0,t.useState)(!1),v=(0,t.useCallback)((()=>{"function"==typeof u&&u(),y(!1)}),[u]),m=(0,t.useCallback)((()=>{"function"==typeof f&&f(),y(!0)}),[f]);return t.createElement(oO,{begin:l,duration:c,isActive:o,easing:s,onAnimationEnd:v,onAnimationStart:m,key:p},(e=>{var o=1===e?i:null==i?void 0:i.map(((t,r)=>{var n=d&&d[r];if(n)return YP(YP({},t),{},{x:b(n.x,t.x,e),y:b(n.y,t.y,e),width:b(n.width,t.width,e),height:b(n.height,t.height,e)});if("horizontal"===a){var i=b(0,t.height,e);return YP(YP({},t),{},{y:t.y+t.height-i,height:i})}var o=b(0,t.width,e);return YP(YP({},t),{},{width:o})}));return e>0&&(n.current=null!=o?o:null),null==o?null:t.createElement(V,null,t.createElement(tE,{props:r,data:o,showLabels:!h}))}))}function nE(e){var{data:r,isAnimationActive:n}=e,i=(0,t.useRef)(null);return n&&r&&r.length&&(null==i.current||i.current!==r)?t.createElement(rE,{previousRectanglesRef:i,props:e}):t.createElement(tE,{props:e,data:r,showLabels:!0})}var iE=(e,t)=>{var r=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:r,errorVal:ci(e,t)}};class aE extends t.PureComponent{render(){var{hide:e,data:r,dataKey:i,className:a,xAxisId:o,yAxisId:l,needClip:c,background:s,id:u}=this.props;if(e)return null;var f=n("recharts-bar",a),d=u;return t.createElement(V,{className:f,id:u},c&&t.createElement("defs",null,t.createElement(WP,{clipPathId:d,xAxisId:o,yAxisId:l})),t.createElement(V,{className:"recharts-bar-rectangles",clipPath:c?"url(#clipPath-".concat(d,")"):void 0},t.createElement(eE,{data:r,dataKey:i,background:s,allOtherBarProps:this.props}),t.createElement(nE,this.props)),this.props.children)}}var oE={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",hide:!1,isAnimationActive:!Oo.isSsr,legendType:"rect",minPointSize:0,xAxisId:0,yAxisId:0};function lE(e){var r,{xAxisId:n,yAxisId:i,hide:a,legendType:o,minPointSize:l,activeBar:c,animationBegin:s,animationDuration:u,animationEasing:f,isAnimationActive:d}=e,{needClip:p}=FP(n,i),h=Qi(),y=Wi(),v=R(e.children,zg),m=He((t=>EE(t,n,i,y,e.id,v)));if("vertical"!==h&&"horizontal"!==h)return null;var g=null==m?void 0:m[0];return r=null==g||null==g.height||null==g.width?0:"vertical"===h?g.height/2:g.width/2,t.createElement(zP,{xAxisId:n,yAxisId:i,data:m,dataPointFormatter:iE,errorBarOffset:r},t.createElement(aE,HP({},e,{layout:h,needClip:p,data:m,xAxisId:n,yAxisId:i,hide:a,legendType:o,minPointSize:l,activeBar:c,animationBegin:s,animationDuration:u,animationEasing:f,isAnimationActive:d})))}function cE(e){var r=pl(e,oE),n=Wi();return t.createElement($w,{id:r.id,type:"bar"},(e=>t.createElement(t.Fragment,null,t.createElement(Fw,{legendPayload:JP(r)}),t.createElement(Kw,{fn:QP,args:r}),t.createElement(eO,{type:"bar",id:e,data:void 0,xAxisId:r.xAxisId,yAxisId:r.yAxisId,zAxisId:0,dataKey:r.dataKey,stackId:vi(r.stackId),hide:r.hide,barSize:r.barSize,minPointSize:r.minPointSize,maxBarSize:r.maxBarSize,isPanorama:n}),t.createElement(lE,HP({},r,{id:e})))))}function sE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function uE(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?sE(Object(r),!0).forEach((function(t){fE(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):sE(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function fE(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}cE.displayName="Bar";var dE=et([Nh,(e,t,r,n,i)=>i],((e,t)=>e.filter((e=>"bar"===e.type)).find((e=>e.id===t)))),pE=et([dE],(e=>null==e?void 0:e.maxBarSize)),hE=(e,t,r)=>{var n=null!=r?r:e;if(!O(n))return v(n,t,0)},yE=et([Ji,Nh,(e,t)=>t,(e,t,r)=>r,(e,t,r,n)=>n],((e,t,r,n,i)=>t.filter((t=>"horizontal"===e?t.xAxisId===r:t.yAxisId===n)).filter((e=>e.isPanorama===i)).filter((e=>!1===e.hide)).filter((e=>"bar"===e.type)))),vE=(e,t,r)=>{var n=e.filter(bh),i=e.filter((e=>null==e.stackId)),a=n.reduce(((e,t)=>(e[t.stackId]||(e[t.stackId]=[]),e[t.stackId].push(t),e)),{}),o=Object.entries(a).map((e=>{var[n,i]=e,a=i.map((e=>e.dataKey));return{stackId:n,dataKeys:a,barSize:hE(t,r,i[0].barSize)}})),l=i.map((e=>({stackId:void 0,dataKeys:[e.dataKey].filter((e=>null!=e)),barSize:hE(t,r,e.barSize)})));return[...o,...l]},mE=et([yE,Wp,(e,t,r)=>"horizontal"===Ji(e)?tv(e,"xAxis",t):tv(e,"yAxis",r)],vE),gE=(e,t,r,n)=>{var i,a;return"horizontal"===Ji(e)?(i=fv(e,"xAxis",t,n),a=uv(e,"xAxis",t,n)):(i=fv(e,"yAxis",r,n),a=uv(e,"yAxis",r,n)),Pi(i,a)};var bE=(e,t,r,n,i,a,o)=>{var l=O(o)?t:o,c=function(e,t,r,n,i){var a=n.length;if(!(a<1)){var o,l=v(e,r,0,!0),c=[];if(Ho(n[0].barSize)){var s=!1,u=r/a,f=n.reduce(((e,t)=>e+(t.barSize||0)),0);(f+=(a-1)*l)>=r&&(f-=(a-1)*l,l=0),f>=r&&u>0&&(s=!0,f=a*(u*=.9));var d={offset:((r-f)/2|0)-l,size:0};o=n.reduce(((e,t)=>{var r,n=[...e,{stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:d.offset+d.size+l,size:s?u:null!==(r=t.barSize)&&void 0!==r?r:0}}];return d=n[n.length-1].position,n}),c)}else{var p=v(t,r,0,!0);r-2*p-(a-1)*l<=0&&(l=0);var h=(r-2*p-(a-1)*l)/a;h>1&&(h>>=0);var y=Ho(i)?Math.min(h,i):h;o=n.reduce(((e,t,r)=>[...e,{stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:p+(h+l)*r+(h-y)/2,size:y}}]),c)}return o}}(r,n,i!==a?i:a,e,l);return i!==a&&null!=c&&(c=c.map((e=>uE(uE({},e),{},{position:uE(uE({},e.position),{},{offset:e.position.offset-i/2})})))),c},xE=et([mE,zp,Bp,Fp,(e,t,r,n,i)=>{var a,o,l=dE(e,t,r,n,i);if(null!=l){var c,s,u=Ji(e),f=zp(e),{maxBarSize:d}=l,p=O(d)?f:d;return"horizontal"===u?(c=fv(e,"xAxis",t,n),s=uv(e,"xAxis",t,n)):(c=fv(e,"yAxis",r,n),s=uv(e,"yAxis",r,n)),null!==(a=null!==(o=Pi(c,s,!0))&&void 0!==o?o:p)&&void 0!==a?a:0}},gE,pE],bE),wE=et([xE,dE],((e,t)=>{if(null!=e&&null!=t){var r=e.find((e=>e.stackId===t.stackId&&null!=t.dataKey&&e.dataKeys.includes(t.dataKey)));if(null!=r)return r.position}})),OE=(e,t)=>{var r=hh(t);if(e&&null!=r&&null!=t){var{stackId:n}=t;if(null!=n){var i=e[n];if(i){var{stackedData:a}=i;if(a)return a.find((e=>e.key===r))}}}},PE=et([(e,t,r,n)=>"horizontal"===Ji(e)?Jh(e,"yAxis",r,n):Jh(e,"xAxis",t,n),dE],OE),EE=et([Ki,(e,t,r,n)=>fv(e,"xAxis",t,n),(e,t,r,n)=>fv(e,"yAxis",r,n),(e,t,r,n)=>uv(e,"xAxis",t,n),(e,t,r,n)=>uv(e,"yAxis",r,n),wE,Ji,vp,gE,PE,dE,(e,t,r,n,i,a)=>a],((e,t,r,n,i,a,o,l,c,f,d,p)=>{var{chartData:h,dataStartIndex:y,dataEndIndex:v}=l;if(null!=d&&null!=a&&("horizontal"===o||"vertical"===o)&&null!=t&&null!=r&&null!=n&&null!=i&&null!=c){var m,{data:g}=d;if(null!=(m=null!=g&&g.length>0?g:null==h?void 0:h.slice(y,v+1)))return function(e){var{layout:t,barSettings:{dataKey:r,minPointSize:n},pos:i,bandSize:a,xAxis:o,yAxis:l,xAxisTicks:c,yAxisTicks:f,stackedData:d,displayedData:p,offset:h,cells:y}=e,v="horizontal"===t?l:o,m=d?v.scale.domain():null,g=bi({numericAxis:v});return p.map(((e,p)=>{var v,b,x,w,O,P;d?v=pi(d[p],m):(v=ci(e,r),Array.isArray(v)||(v=[g,v]));var E=TP(n,0)(v[1],p);if("horizontal"===t){var A,[j,S]=[l.scale(v[0]),l.scale(v[1])];b=gi({axis:o,ticks:c,bandSize:a,offset:i.offset,entry:e,index:p}),x=null!==(A=null!=S?S:j)&&void 0!==A?A:void 0,w=i.size;var k=j-S;if(O=u(k)?0:k,P={x:b,y:h.top,width:w,height:h.height},Math.abs(E)>0&&Math.abs(O)<Math.abs(E)){var M=s(O||E)*(Math.abs(E)-Math.abs(O));x-=M,O+=M}}else{var[T,D]=[o.scale(v[0]),o.scale(v[1])];b=T,x=gi({axis:l,ticks:f,bandSize:a,offset:i.offset,entry:e,index:p}),w=D-T,O=i.size,P={x:h.left,y:x,width:h.width,height:O},Math.abs(E)>0&&Math.abs(w)<Math.abs(E)&&(w+=s(w||E)*(Math.abs(E)-Math.abs(w)))}return null==b||null==x||null==w||null==O?null:YP(YP({},e),{},{x:b,y:x,width:w,height:O,value:d?v:v[1],payload:e,background:P,tooltipPosition:{x:b+w/2,y:x+O/2}},y&&y[p]&&y[p].props)})).filter(Boolean)}({layout:o,barSettings:d,pos:a,bandSize:c,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,stackedData:f,displayedData:m,offset:e,cells:p})}}));function AE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function jE(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?AE(Object(r),!0).forEach((function(t){SE(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):AE(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function SE(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var kE=et([(e,t)=>rh(e,t),(e,t)=>px(e,"radiusAxis",t)],((e,t)=>{if(null!=e&&null!=t)return jE(jE({},e),{},{scale:t})})),ME=(e,t,r,n)=>vx(e,"radiusAxis",t,n),TE=et([(e,t,r)=>th(e,r),(e,t,r)=>px(e,"angleAxis",r)],((e,t)=>{if(null!=e&&null!=t)return jE(jE({},e),{},{scale:t})})),DE=(e,t,r,n)=>yx(e,"angleAxis",r,n),CE=et([Qb,(e,t,r,n)=>n],((e,t)=>{if(e.some((e=>"radialBar"===e.type&&t.dataKey===e.dataKey&&t.stackId===e.stackId)))return t})),IE=et([Ji,kE,ME,TE,DE],((e,t,r,n,i)=>si(e,"radiusAxis")?Pi(t,r,!1):Pi(n,i,!1))),NE=et([TE,kE,Ji],((e,t,r)=>{var n="radial"===r?e:t;if(null!=n&&null!=n.scale)return bi({numericAxis:n})})),_E=(e,t,r,n,i)=>n.maxBarSize,LE=et([Ji,Qb,(e,t,r,n,i)=>r,(e,t,r,n,i)=>t],((e,t,r,n)=>t.filter((t=>"centric"===e?t.angleAxisId===r:t.radiusAxisId===n)).filter((e=>!1===e.hide)).filter((e=>"radialBar"===e.type)))),RE=et([LE,Wp,()=>{}],vE),KE=et([Ji,zp,TE,DE,kE,ME,_E],((e,t,r,n,i,a,o)=>{var l,c,s,u,f=O(o)?t:o;return"centric"===e?null!==(s=null!==(u=Pi(r,n,!0))&&void 0!==u?u:f)&&void 0!==s?s:0:null!==(l=null!==(c=Pi(i,a,!0))&&void 0!==c?c:f)&&void 0!==l?l:0})),zE=et([RE,zp,Bp,Fp,KE,IE,_E],bE),BE=et([zE,CE],((e,t)=>{if(null!=e&&null!=t){var r=e.find((e=>e.stackId===t.stackId&&null!=t.dataKey&&e.dataKeys.includes(t.dataKey)));if(null!=r)return r.position}})),FE=et([tx],(e=>e.filter((e=>"radialBar"===e.type)).filter(bh))),WE=et([FE,yp,mh],gh),UE=et([WE,FE,Up],Zh),XE=et([(e,t,r)=>"centric"===Ji(e)?UE(e,"radiusAxis",t):UE(e,"angleAxis",r),CE],OE),VE=et([TE,DE,kE,ME,hp,CE,IE,Ji,NE,fh,(e,t,r,n,i)=>i,BE,XE],((e,t,r,n,i,a,o,l,c,u,f,d,p)=>{var{chartData:h,dataStartIndex:y,dataEndIndex:v}=i;if(null==a||null==r||null==e||null==h||null==o||null==d||"centric"!==l&&"radial"!==l||null==n)return[];var{dataKey:m,minPointSize:g}=a,{cx:b,cy:x,startAngle:w,endAngle:O}=u;return function(e){var{displayedData:t,stackedData:r,dataStartIndex:n,stackedDomain:i,dataKey:a,baseValue:o,layout:l,radiusAxis:c,radiusAxisTicks:u,bandSize:f,pos:d,angleAxis:p,minPointSize:h,cx:y,cy:v,angleAxisTicks:m,cells:g,startAngle:b,endAngle:x}=e;return(null!=t?t:[]).map(((e,t)=>{var w,O,P,E,A,j;if(r?w=pi(r[n+t],i):(w=ci(e,a),Array.isArray(w)||(w=[o,w])),"radial"===l){O=gi({axis:c,ticks:u,bandSize:f,offset:d.offset,entry:e,index:t}),A=p.scale(w[1]),E=p.scale(w[0]),P=(null!=O?O:0)+d.size;var S=A-E;if(Math.abs(h)>0&&Math.abs(S)<Math.abs(h))A+=s(S||h)*(Math.abs(h)-Math.abs(S));j={background:{cx:y,cy:v,innerRadius:O,outerRadius:P,startAngle:b,endAngle:x}}}else{O=c.scale(w[0]),P=c.scale(w[1]),A=(null!=(E=gi({axis:p,ticks:m,bandSize:f,offset:d.offset,entry:e,index:t}))?E:0)+d.size;var k=P-O;if(Math.abs(h)>0&&Math.abs(k)<Math.abs(h))P+=s(k||h)*(Math.abs(h)-Math.abs(k))}return JE(JE(JE({},e),j),{},{payload:e,value:r?w:w[1],cx:y,cy:v,innerRadius:O,outerRadius:P,startAngle:E,endAngle:A},g&&g[t]&&g[t].props)}))}({angleAxis:e,angleAxisTicks:t,bandSize:o,baseValue:c,cells:f,cx:b,cy:x,dataKey:m,dataStartIndex:y,displayedData:h.slice(y,v+1),endAngle:O,layout:l,minPointSize:g,pos:d,radiusAxis:r,radiusAxisTicks:n,stackedData:p,stackedDomain:p?("centric"===l?r:e).scale.domain():null,startAngle:w})})),$E=et([yp,(e,t)=>t],((e,t)=>{var{chartData:r,dataStartIndex:n,dataEndIndex:i}=e;if(null==r)return[];var a=r.slice(n,i+1);return 0===a.length?[]:a.map((e=>({type:t,value:e.name,color:e.fill,payload:e})))})),HE=["shape","activeShape","cornerRadius","id"],qE=["onMouseEnter","onClick","onMouseLeave"],YE=["value","background"];function GE(){return GE=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},GE.apply(null,arguments)}function ZE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function JE(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ZE(Object(r),!0).forEach((function(t){QE(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ZE(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function QE(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function eA(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var tA=[];function rA(e){var{sectors:r,allOtherRadialBarProps:n,showLabels:i}=e,{shape:a,activeShape:o,cornerRadius:l,id:c}=n,s=eA(n,HE),u=C(s),f=He(Mm),{onMouseEnter:d,onClick:p,onMouseLeave:h}=n,y=eA(n,qE),v=_w(d,n.dataKey),m=Lw(h),g=Rw(p,n.dataKey);return null==r?null:t.createElement(t.Fragment,null,r.map(((e,r)=>{var n=o&&f===String(r),i=v(e,r),c=m(e,r),d=g(e,r),p=JE(JE(JE(JE({},u),{},{cornerRadius:bP(l)},e),M(y,e,r)),{},{onMouseEnter:i,onMouseLeave:c,onClick:d,key:"sector-".concat(r),className:"recharts-radial-bar-sector ".concat(e.className),forceCornerRadius:s.forceCornerRadius,cornerIsExternal:s.cornerIsExternal,isActive:n,option:n?o:a});return t.createElement(wP,p)})),i&&Ub.renderCallByParent(n,r))}function nA(e){var{props:r,previousSectorsRef:n}=e,{data:i,isAnimationActive:a,animationBegin:o,animationDuration:l,animationEasing:c,onAnimationEnd:s,onAnimationStart:u}=r,f=Uw(r,"recharts-radialbar-"),d=n.current,[p,h]=(0,t.useState)(!0),y=(0,t.useCallback)((()=>{"function"==typeof s&&s(),h(!1)}),[s]),v=(0,t.useCallback)((()=>{"function"==typeof u&&u(),h(!0)}),[u]);return t.createElement(oO,{begin:o,duration:l,isActive:a,easing:c,onAnimationStart:v,onAnimationEnd:y,key:f},(e=>{var a=1===e?i:(null!=i?i:tA).map(((t,r)=>{var n=d&&d[r];if(n){var i=g(n.startAngle,t.startAngle),a=g(n.endAngle,t.endAngle);return JE(JE({},t),{},{startAngle:i(e),endAngle:a(e)})}var{endAngle:o,startAngle:l}=t,c=g(l,o);return JE(JE({},t),{},{endAngle:c(e)})}));return e>0&&(n.current=null!=a?a:null),t.createElement(V,null,t.createElement(rA,{sectors:null!=a?a:tA,allOtherRadialBarProps:r,showLabels:!p}))}))}function iA(e){var{data:r=[],isAnimationActive:n}=e,i=(0,t.useRef)(null),a=i.current;return n&&r&&r.length&&(!a||a!==r)?t.createElement(nA,{props:e,previousSectorsRef:i}):t.createElement(rA,{sectors:r,allOtherRadialBarProps:e,showLabels:!0})}function aA(e){var r=He((t=>$E(t,e.legendType)));return t.createElement(Ww,{legendPayload:null!=r?r:[]})}function oA(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,name:a,hide:o,fill:l,tooltipType:c}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:l,nameKey:void 0,dataKey:t,name:Ai(a,t),hide:o,type:c,color:l,unit:""}}}class lA extends t.PureComponent{renderBackground(e){if(null==e)return null;var{cornerRadius:r}=this.props,i=z(this.props.background,!1);return e.map(((e,a)=>{var{value:o,background:l}=e,c=eA(e,YE);if(!l)return null;var s=JE(JE(JE(JE(JE({cornerRadius:bP(r)},c),{},{fill:"#eee"},l),i),M(this.props,e,a)),{},{index:a,key:"sector-".concat(a),className:n("recharts-radial-bar-background-sector",null==i?void 0:i.className),option:l,isActive:!1});return t.createElement(wP,s)}))}render(){var{hide:e,data:r,className:i,background:a}=this.props;if(e)return null;var o=n("recharts-area",i);return t.createElement(V,{className:o},a&&t.createElement(V,{className:"recharts-radial-bar-background"},this.renderBackground(r)),t.createElement(V,{className:"recharts-radial-bar-sectors"},t.createElement(iA,this.props)))}}function cA(e){var r,n=R(e.children,zg),i={data:void 0,hide:!1,id:e.id,dataKey:e.dataKey,minPointSize:e.minPointSize,stackId:vi(e.stackId),maxBarSize:e.maxBarSize,barSize:e.barSize,type:"radialBar",angleAxisId:e.angleAxisId,radiusAxisId:e.radiusAxisId},a=null!==(r=He((t=>VE(t,e.radiusAxisId,e.angleAxisId,i,n))))&&void 0!==r?r:tA;return t.createElement(t.Fragment,null,t.createElement(Kw,{fn:oA,args:JE(JE({},e),{},{data:a})}),t.createElement(lA,GE({},e,{data:a})))}var sA={angleAxisId:0,radiusAxisId:0,minPointSize:0,hide:!1,legendType:"rect",data:[],isAnimationActive:!Oo.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease",forceCornerRadius:!1,cornerIsExternal:!1};class uA extends t.PureComponent{render(){return t.createElement($w,{id:this.props.id,type:"radialBar"},(e=>{var r,n,i;return t.createElement(t.Fragment,null,t.createElement(tO,{type:"radialBar",id:e,data:void 0,dataKey:this.props.dataKey,hide:null!==(r=this.props.hide)&&void 0!==r?r:sA.hide,angleAxisId:null!==(n=this.props.angleAxisId)&&void 0!==n?n:sA.angleAxisId,radiusAxisId:null!==(i=this.props.radiusAxisId)&&void 0!==i?i:sA.radiusAxisId,stackId:vi(this.props.stackId),barSize:this.props.barSize,minPointSize:this.props.minPointSize,maxBarSize:this.props.maxBarSize}),t.createElement(aA,this.props),t.createElement(cA,GE({},this.props,{id:e})))}))}}function fA(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function dA(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?fA(Object(r),!0).forEach((function(t){pA(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):fA(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function pA(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}QE(uA,"displayName","RadialBar"),QE(uA,"defaultProps",sA);var hA=["Webkit","Moz","O","ms"],yA=e=>{var{chartData:r}=e,n=Ue(),i=Wi();return(0,t.useEffect)((()=>i?()=>{}:(n(bg(r)),()=>{n(bg(void 0))})),[r,n,i]),null},vA=e=>{var{computedData:r}=e,n=Ue();return(0,t.useEffect)((()=>(n(wg(r)),()=>{n(bg(void 0))})),[r,n]),null},mA=e=>e.chartData.chartData,gA=()=>He(mA),bA=e=>{var{dataStartIndex:t,dataEndIndex:r}=e.chartData;return{startIndex:t,endIndex:r}},xA=()=>He(bA),wA=(0,t.createContext)((()=>{})),OA={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},PA=Gr({name:"brush",initialState:OA,reducers:{setBrushSettings:(e,t)=>null==t.payload?OA:t.payload}}),{setBrushSettings:EA}=PA.actions,AA=PA.reducer;function jA(){return jA=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},jA.apply(null,arguments)}function SA(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function kA(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?SA(Object(r),!0).forEach((function(t){MA(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):SA(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function MA(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function TA(e){var{x:r,y:n,width:i,height:a,stroke:o}=e,l=Math.floor(n+a/2)-1;return t.createElement(t.Fragment,null,t.createElement("rect",{x:r,y:n,width:i,height:a,fill:o,stroke:"none"}),t.createElement("line",{x1:r+1,y1:l,x2:r+i-1,y2:l,fill:"none",stroke:"#fff"}),t.createElement("line",{x1:r+1,y1:l+2,x2:r+i-1,y2:l+2,fill:"none",stroke:"#fff"}))}function DA(e){var{travellerProps:r,travellerType:n}=e;return t.isValidElement(n)?t.cloneElement(n,r):"function"==typeof n?n(r):t.createElement(TA,r)}function CA(e){var r,n,{otherProps:i,travellerX:a,id:o,onMouseEnter:l,onMouseLeave:c,onMouseDown:s,onTouchStart:u,onTravellerMoveKeyboard:f,onFocus:d,onBlur:p}=e,{y:h,x:y,travellerWidth:v,height:m,traveller:g,ariaLabel:b,data:x,startIndex:w,endIndex:O}=i,P=Math.max(a,y),E=kA(kA({},C(i)),{},{x:P,y:h,width:v,height:m}),A=b||"Min value: ".concat(null===(r=x[w])||void 0===r?void 0:r.name,", Max value: ").concat(null===(n=x[O])||void 0===n?void 0:n.name);return t.createElement(V,{tabIndex:0,role:"slider","aria-label":A,"aria-valuenow":a,className:"recharts-brush-traveller",onMouseEnter:l,onMouseLeave:c,onMouseDown:s,onTouchStart:u,onKeyDown:e=>{["ArrowLeft","ArrowRight"].includes(e.key)&&(e.preventDefault(),e.stopPropagation(),f("ArrowRight"===e.key?1:-1,o))},onFocus:d,onBlur:p,style:{cursor:"col-resize"}},t.createElement(DA,{travellerType:g,travellerProps:E}))}function IA(e){var{index:t,data:r,tickFormatter:n,dataKey:i}=e,a=ci(r[t],i,t);return"function"==typeof n?n(a,t):a}function NA(e,t){for(var r=0,n=e.length-1;n-r>1;){var i=Math.floor((r+n)/2);e[i]>t?n=i:r=i}return t>=e[n]?n:r}function _A(e){var{startX:t,endX:r,scaleValues:n,gap:i,data:a}=e,o=a.length-1,l=Math.min(t,r),c=Math.max(t,r),s=NA(n,l),u=NA(n,c);return{startIndex:s-s%i,endIndex:u===o?o:u-u%i}}function LA(e){var{x:r,y:n,width:i,height:a,fill:o,stroke:l}=e;return t.createElement("rect",{stroke:l,fill:o,x:r,y:n,width:i,height:a})}function RA(e){var{startIndex:r,endIndex:n,y:i,height:a,travellerWidth:o,stroke:l,tickFormatter:c,dataKey:s,data:u,startX:f,endX:d}=e,p={pointerEvents:"none",fill:l};return t.createElement(V,{className:"recharts-brush-texts"},t.createElement(mb,jA({textAnchor:"end",verticalAnchor:"middle",x:Math.min(f,d)-5,y:i+a/2},p),IA({index:r,tickFormatter:c,dataKey:s,data:u})),t.createElement(mb,jA({textAnchor:"start",verticalAnchor:"middle",x:Math.max(f,d)+o+5,y:i+a/2},p),IA({index:n,tickFormatter:c,dataKey:s,data:u})))}function KA(e){var{y:r,height:n,stroke:i,travellerWidth:a,startX:o,endX:l,onMouseEnter:c,onMouseLeave:s,onMouseDown:u,onTouchStart:f}=e,d=Math.min(o,l)+a,p=Math.max(Math.abs(l-o)-a,0);return t.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:c,onMouseLeave:s,onMouseDown:u,onTouchStart:f,style:{cursor:"move"},stroke:"none",fill:i,fillOpacity:.2,x:d,y:r,width:p,height:n})}function zA(e){var{x:r,y:n,width:i,height:a,data:o,children:l,padding:c}=e;if(!(1===t.Children.count(l)))return null;var s=t.Children.only(l);return s?t.cloneElement(s,{x:r,y:n,width:i,height:a,margin:c,compact:!0,data:o}):null}var BA=e=>e.changedTouches&&!!e.changedTouches.length;class FA extends t.PureComponent{constructor(e){super(e),MA(this,"handleDrag",(e=>{this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.state.isTravellerMoving?this.handleTravellerMove(e):this.state.isSlideMoving&&this.handleSlideDrag(e)})),MA(this,"handleTouchMove",(e=>{null!=e.changedTouches&&e.changedTouches.length>0&&this.handleDrag(e.changedTouches[0])})),MA(this,"handleDragEnd",(()=>{this.setState({isTravellerMoving:!1,isSlideMoving:!1},(()=>{var{endIndex:e,onDragEnd:t,startIndex:r}=this.props;null==t||t({endIndex:e,startIndex:r})})),this.detachDragEndListener()})),MA(this,"handleLeaveWrapper",(()=>{(this.state.isTravellerMoving||this.state.isSlideMoving)&&(this.leaveTimer=window.setTimeout(this.handleDragEnd,this.props.leaveTimeOut))})),MA(this,"handleEnterSlideOrTraveller",(()=>{this.setState({isTextActive:!0})})),MA(this,"handleLeaveSlideOrTraveller",(()=>{this.setState({isTextActive:!1})})),MA(this,"handleSlideDragStart",(e=>{var t=BA(e)?e.changedTouches[0]:e;this.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:t.pageX}),this.attachDragEndListener()})),MA(this,"handleTravellerMoveKeyboard",((e,t)=>{var{data:r,gap:n}=this.props,{scaleValues:i,startX:a,endX:o}=this.state;if(null!=i){var l=this.state[t],c=i.indexOf(l);if(-1!==c){var s=c+e;if(!(-1===s||s>=i.length)){var u=i[s];"startX"===t&&u>=o||"endX"===t&&u<=a||this.setState({[t]:u},(()=>{this.props.onChange(_A({startX:this.state.startX,endX:this.state.endX,data:r,gap:n,scaleValues:i}))}))}}}})),this.travellerDragStartHandlers={startX:this.handleTravellerDragStart.bind(this,"startX"),endX:this.handleTravellerDragStart.bind(this,"endX")},this.state={brushMoveStartX:0,movingTravellerId:void 0,endX:0,startX:0,slideMoveStartX:0}}static getDerivedStateFromProps(e,t){var{data:r,width:n,x:i,travellerWidth:a,startIndex:o,endIndex:l,startIndexControlledFromProps:c,endIndexControlledFromProps:s}=e;if(r!==t.prevData)return kA({prevData:r,prevTravellerWidth:a,prevX:i,prevWidth:n},r&&r.length?(e=>{var{data:t,startIndex:r,endIndex:n,x:i,width:a,travellerWidth:o}=e;if(!t||!t.length)return{};var l=t.length,c=vc().domain(ic()(0,l)).range([i,i+a-o]),s=c.domain().map((e=>c(e)));return{isTextActive:!1,isSlideMoving:!1,isTravellerMoving:!1,isTravellerFocused:!1,startX:c(r),endX:c(n),scale:c,scaleValues:s}})({data:r,width:n,x:i,travellerWidth:a,startIndex:o,endIndex:l}):{scale:void 0,scaleValues:void 0});var u=t.scale;if(u&&(n!==t.prevWidth||i!==t.prevX||a!==t.prevTravellerWidth)){u.range([i,i+n-a]);var f=u.domain().map((e=>u(e))).filter(Boolean);return{prevData:r,prevTravellerWidth:a,prevX:i,prevWidth:n,startX:u(e.startIndex),endX:u(e.endIndex),scaleValues:f}}if(t.scale&&!t.isSlideMoving&&!t.isTravellerMoving&&!t.isTravellerFocused&&!t.isTextActive){if(null!=c&&t.prevStartIndexControlledFromProps!==c)return{startX:t.scale(c),prevStartIndexControlledFromProps:c};if(null!=s&&t.prevEndIndexControlledFromProps!==s)return{endX:t.scale(s),prevEndIndexControlledFromProps:s}}return null}componentWillUnmount(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}attachDragEndListener(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}detachDragEndListener(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}handleSlideDrag(e){var{slideMoveStartX:t,startX:r,endX:n,scaleValues:i}=this.state;if(null!=i){var{x:a,width:o,travellerWidth:l,startIndex:c,endIndex:s,onChange:u,data:f,gap:d}=this.props,p=e.pageX-t;p>0?p=Math.min(p,a+o-l-n,a+o-l-r):p<0&&(p=Math.max(p,a-r,a-n));var h=_A({startX:r+p,endX:n+p,data:f,gap:d,scaleValues:i});h.startIndex===c&&h.endIndex===s||!u||u(h),this.setState({startX:r+p,endX:n+p,slideMoveStartX:e.pageX})}}handleTravellerDragStart(e,t){var r=BA(t)?t.changedTouches[0]:t;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:e,brushMoveStartX:r.pageX}),this.attachDragEndListener()}handleTravellerMove(e){var{brushMoveStartX:t,movingTravellerId:r,endX:n,startX:i,scaleValues:a}=this.state;if(null!=r){var o=this.state[r],{x:l,width:c,travellerWidth:s,onChange:u,gap:f,data:d}=this.props,p={startX:this.state.startX,endX:this.state.endX,data:d,gap:f,scaleValues:a},h=e.pageX-t;h>0?h=Math.min(h,l+c-s-o):h<0&&(h=Math.max(h,l-o)),p[r]=o+h;var y=_A(p),{startIndex:v,endIndex:m}=y;this.setState({[r]:o+h,brushMoveStartX:e.pageX},(()=>{var e;u&&(e=d.length-1,("startX"===r&&(n>i?v%f==0:m%f==0)||n<i&&m===e||"endX"===r&&(n>i?m%f==0:v%f==0)||n>i&&m===e)&&u(y))}))}}render(){var{data:e,className:r,children:i,x:a,y:o,dy:l,width:c,height:s,alwaysShowText:u,fill:f,stroke:p,startIndex:h,endIndex:y,travellerWidth:v,tickFormatter:m,dataKey:g,padding:b}=this.props,{startX:x,endX:w,isTextActive:O,isSlideMoving:P,isTravellerMoving:E,isTravellerFocused:A}=this.state;if(!e||!e.length||!d(a)||!d(o)||!d(c)||!d(s)||c<=0||s<=0)return null;var j=n("recharts-brush",r),S=((e,t)=>{if(e){var r=e.replace(/(\w)/,(e=>e.toUpperCase())),n=hA.reduce(((e,n)=>dA(dA({},e),{},{[n+r]:t})),{});return n[e]=t,n}})("userSelect","none"),k=o+(null!=l?l:0);return t.createElement(V,{className:j,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:S},t.createElement(LA,{x:a,y:k,width:c,height:s,fill:f,stroke:p}),t.createElement(Ui,null,t.createElement(zA,{x:a,y:k,width:c,height:s,data:e,padding:b},i)),t.createElement(KA,{y:k,height:s,stroke:p,travellerWidth:v,startX:x,endX:w,onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart}),t.createElement(CA,{travellerX:x,id:"startX",otherProps:kA(kA({},this.props),{},{y:k}),onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers.startX,onTouchStart:this.travellerDragStartHandlers.startX,onTravellerMoveKeyboard:this.handleTravellerMoveKeyboard,onFocus:()=>{this.setState({isTravellerFocused:!0})},onBlur:()=>{this.setState({isTravellerFocused:!1})}}),t.createElement(CA,{travellerX:w,id:"endX",otherProps:kA(kA({},this.props),{},{y:k}),onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers.endX,onTouchStart:this.travellerDragStartHandlers.endX,onTravellerMoveKeyboard:this.handleTravellerMoveKeyboard,onFocus:()=>{this.setState({isTravellerFocused:!0})},onBlur:()=>{this.setState({isTravellerFocused:!1})}}),(O||P||E||A||u)&&t.createElement(RA,{startIndex:h,endIndex:y,y:k,height:s,travellerWidth:v,stroke:p,tickFormatter:m,dataKey:g,data:e,startX:x,endX:w}))}}function WA(e){var r,n,i,a,o=Ue(),l=gA(),c=xA(),s=(0,t.useContext)(wA),u=e.onChange,{startIndex:f,endIndex:d}=e;(0,t.useEffect)((()=>{o(xg({startIndex:f,endIndex:d}))}),[o,d,f]),r=He(Vp),n=He(Hp),i=He((e=>e.chartData.dataStartIndex)),a=He((e=>e.chartData.dataEndIndex)),(0,t.useEffect)((()=>{if(null!=r&&null!=i&&null!=a&&null!=n){var e={startIndex:i,endIndex:a};ug.emit(dg,r,e,n)}}),[a,i,n,r]);var p=(0,t.useCallback)((e=>{if(null!=c){var{startIndex:t,endIndex:r}=c;e.startIndex===t&&e.endIndex===r||(null==s||s(e),null==u||u(e),o(xg(e)))}}),[u,s,o,c]),h=He(Vi);if(null==h||null==c||null==l||!l.length)return null;var{startIndex:y,endIndex:v}=c,{x:m,y:g,width:b}=h,x={data:l,x:m,y:g,width:b,startIndex:y,endIndex:v,onChange:p};return t.createElement(FA,jA({},e,x,{startIndexControlledFromProps:null!=f?f:void 0,endIndexControlledFromProps:null!=d?d:void 0}))}function UA(e){var r=Ue();return(0,t.useEffect)((()=>(r(EA(e)),()=>{r(EA(null))})),[r,e]),null}var XA={height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1};function VA(e){var r=pl(e,XA);return t.createElement(t.Fragment,null,t.createElement(UA,{height:r.height,x:r.x,y:r.y,width:r.width,padding:r.padding}),t.createElement(WA,r))}function $A(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function HA(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?$A(Object(r),!0).forEach((function(t){qA(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):$A(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function qA(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}VA.displayName="Brush";var YA=(e,t)=>{var{x:r,y:n}=e,{x:i,y:a}=t;return{x:Math.min(r,i),y:Math.min(n,a),width:Math.abs(i-r),height:Math.abs(a-n)}};class GA{static create(e){return new GA(e)}constructor(e){this.scale=e}get domain(){return this.scale.domain}get range(){return this.scale.range}get rangeMin(){return this.range()[0]}get rangeMax(){return this.range()[1]}get bandwidth(){return this.scale.bandwidth}apply(e){var{bandAware:t,position:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==e){if(r)switch(r){case"start":default:return this.scale(e);case"middle":var n=this.bandwidth?this.bandwidth()/2:0;return this.scale(e)+n;case"end":var i=this.bandwidth?this.bandwidth():0;return this.scale(e)+i}if(t){var a=this.bandwidth?this.bandwidth()/2:0;return this.scale(e)+a}return this.scale(e)}}isInRange(e){var t=this.range(),r=t[0],n=t[t.length-1];return r<=n?e>=r&&e<=n:e>=n&&e<=r}}qA(GA,"EPS",1e-4);var ZA=e=>{var t=Object.keys(e).reduce(((t,r)=>HA(HA({},t),{},{[r]:GA.create(e[r])})),{});return HA(HA({},t),{},{apply(e){var{bandAware:r,position:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.fromEntries(Object.entries(e).map((e=>{var[i,a]=e;return[i,t[i].apply(a,{bandAware:r,position:n})]})))},isInRange:e=>Object.keys(e).every((r=>t[r].isInRange(e[r])))})};var JA=Gr({name:"referenceElements",initialState:{dots:[],areas:[],lines:[]},reducers:{addDot:(e,t)=>{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=Ft(e).dots.findIndex((e=>e===t.payload));-1!==r&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=Ft(e).areas.findIndex((e=>e===t.payload));-1!==r&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=Ft(e).lines.findIndex((e=>e===t.payload));-1!==r&&e.lines.splice(r,1)}}}),{addDot:QA,removeDot:ej,addArea:tj,removeArea:rj,addLine:nj,removeLine:ij}=JA.actions,aj=JA.reducer,oj=(0,t.createContext)(void 0),lj=e=>{var{children:r}=e,[n]=(0,t.useState)("".concat(y("recharts"),"-clip")),i=NO();if(null==i)return null;var{x:a,y:o,width:l,height:c}=i;return t.createElement(oj.Provider,{value:n},t.createElement("defs",null,t.createElement("clipPath",{id:n},t.createElement("rect",{x:a,y:o,height:c,width:l}))),r)},cj=()=>(0,t.useContext)(oj);function sj(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function uj(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?sj(Object(r),!0).forEach((function(t){fj(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):sj(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function fj(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function dj(){return dj=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},dj.apply(null,arguments)}function pj(e){var r=Ue();return(0,t.useEffect)((()=>(r(nj(e)),()=>{r(ij(e))}))),null}function hj(e){var{x:r,y:i,segment:a,xAxisId:o,yAxisId:l,shape:c,className:s,ifOverflow:f}=e,d=Wi(),h=cj(),y=He((e=>Ah(e,o))),v=He((e=>Sh(e,l))),m=He((e=>Xy(e,"xAxis",o,d))),g=He((e=>Xy(e,"yAxis",l,d))),b=$i(),x=p(r),w=p(i);if(!h||!b||null==y||null==v||null==m||null==g)return null;var O=((e,t,r,n,i,a,o,l,c)=>{var{x:s,y:f,width:d,height:p}=i;if(r){var{y:h}=c,y=e.y.apply(h,{position:a});if(u(y))return null;if("discard"===c.ifOverflow&&!e.y.isInRange(y))return null;var v=[{x:s+d,y},{x:s,y}];return"left"===l?v.reverse():v}if(t){var{x:m}=c,g=e.x.apply(m,{position:a});if(u(g))return null;if("discard"===c.ifOverflow&&!e.x.isInRange(g))return null;var b=[{x:g,y:f+p},{x:g,y:f}];return"top"===o?b.reverse():b}if(n){var{segment:x}=c,w=x.map((t=>e.apply(t,{position:a})));return"discard"===c.ifOverflow&&w.some((t=>!e.isInRange(t)))?null:w}return null})(ZA({x:m,y:g}),x,w,a&&2===a.length,b,e.position,y.orientation,v.orientation,e);if(!O)return null;var[{x:P,y:E},{x:A,y:j}]=O,S=uj(uj({clipPath:"hidden"===f?"url(#".concat(h,")"):void 0},z(e,!0)),{},{x1:P,y1:E,x2:A,y2:j});return t.createElement(V,{className:n("recharts-reference-line",s)},((e,r)=>t.isValidElement(e)?t.cloneElement(e,r):"function"==typeof e?e(r):t.createElement("line",dj({},r,{className:"recharts-reference-line-line"})))(c,S),Db.renderCallByParent(e,(e=>{var{x1:t,y1:r,x2:n,y2:i}=e;return YA({x:t,y:r},{x:n,y:i})})({x1:P,y1:E,x2:A,y2:j})))}function yj(e){return t.createElement(t.Fragment,null,t.createElement(pj,{yAxisId:e.yAxisId,xAxisId:e.xAxisId,ifOverflow:e.ifOverflow,x:e.x,y:e.y}),t.createElement(hj,e))}class vj extends t.Component{render(){return t.createElement(yj,this.props)}}function mj(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function gj(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?mj(Object(r),!0).forEach((function(t){bj(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):mj(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function bj(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xj(){return xj=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},xj.apply(null,arguments)}fj(vj,"displayName","ReferenceLine"),fj(vj,"defaultProps",{ifOverflow:"discard",xAxisId:0,yAxisId:0,fill:"none",stroke:"#ccc",fillOpacity:1,strokeWidth:1,position:"middle"});function wj(e){var r=Ue();return(0,t.useEffect)((()=>(r(QA(e)),()=>{r(ej(e))}))),null}function Oj(e){var{x:r,y:i,r:a}=e,o=cj(),l=((e,t,r,n,i)=>{var a=p(e),o=p(t),l=Wi(),c=He((e=>Xy(e,"xAxis",r,l))),s=He((e=>Xy(e,"yAxis",n,l)));if(!a||!o||null==c||null==s)return null;var u=ZA({x:c,y:s}),f=u.apply({x:e,y:t},{bandAware:!0});return"discard"!==i||u.isInRange(f)?f:null})(r,i,e.xAxisId,e.yAxisId,e.ifOverflow);if(!l)return null;var{x:c,y:s}=l,{shape:u,className:f,ifOverflow:d}=e,h=gj(gj({clipPath:"hidden"===d?"url(#".concat(o,")"):void 0},z(e,!0)),{},{cx:c,cy:s});return t.createElement(V,{className:n("recharts-reference-dot",f)},((e,r)=>t.isValidElement(e)?t.cloneElement(e,r):"function"==typeof e?e(r):t.createElement(Jb,xj({},r,{cx:r.cx,cy:r.cy,className:"recharts-reference-dot-dot"})))(u,h),Db.renderCallByParent(e,{x:c-a,y:s-a,width:2*a,height:2*a}))}function Pj(e){var{x:r,y:n,r:i,ifOverflow:a,yAxisId:o,xAxisId:l}=e;return t.createElement(t.Fragment,null,t.createElement(wj,{y:n,x:r,r:i,yAxisId:o,xAxisId:l,ifOverflow:a}),t.createElement(Oj,e))}class Ej extends t.Component{render(){return t.createElement(Pj,this.props)}}function Aj(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function jj(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Aj(Object(r),!0).forEach((function(t){Sj(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Aj(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Sj(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function kj(){return kj=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},kj.apply(null,arguments)}bj(Ej,"displayName","ReferenceDot"),bj(Ej,"defaultProps",{ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#fff",stroke:"#ccc",fillOpacity:1,strokeWidth:1});function Mj(e){var r=Ue();return(0,t.useEffect)((()=>(r(tj(e)),()=>{r(rj(e))}))),null}function Tj(e){var{x1:r,x2:i,y1:a,y2:o,className:l,shape:c,xAxisId:s,yAxisId:u}=e,f=cj(),d=Wi(),h=He((e=>Xy(e,"xAxis",s,d))),y=He((e=>Xy(e,"yAxis",u,d)));if(null==h||null==!y)return null;var v=p(r),m=p(i),g=p(a),b=p(o);if(!(v||m||g||b||c))return null;var x=((e,t,r,n,i,a,o)=>{var{x1:l,x2:c,y1:s,y2:u}=o;if(null==i||null==a)return null;var f=ZA({x:i,y:a}),d={x:e?f.x.apply(l,{position:"start"}):f.x.rangeMin,y:r?f.y.apply(s,{position:"start"}):f.y.rangeMin},p={x:t?f.x.apply(c,{position:"end"}):f.x.rangeMax,y:n?f.y.apply(u,{position:"end"}):f.y.rangeMax};return"discard"!==o.ifOverflow||f.isInRange(d)&&f.isInRange(p)?YA(d,p):null})(v,m,g,b,h,y,e);if(!x&&!c)return null;var w="hidden"===e.ifOverflow?"url(#".concat(f,")"):void 0;return t.createElement(V,{className:n("recharts-reference-area",l)},((e,r)=>t.isValidElement(e)?t.cloneElement(e,r):"function"==typeof e?e(r):t.createElement(Yl,kj({},r,{className:"recharts-reference-area-rect"})))(c,jj(jj({clipPath:w},z(e,!0)),x)),Db.renderCallByParent(e,x))}function Dj(e){return t.createElement(t.Fragment,null,t.createElement(Mj,{yAxisId:e.yAxisId,xAxisId:e.xAxisId,ifOverflow:e.ifOverflow,x1:e.x1,x2:e.x2,y1:e.y1,y2:e.y2}),t.createElement(Tj,e))}class Cj extends t.Component{render(){return t.createElement(Dj,this.props)}}function Ij(e,t){for(var r in e)if({}.hasOwnProperty.call(e,r)&&(!{}.hasOwnProperty.call(t,r)||e[r]!==t[r]))return!1;for(var n in t)if({}.hasOwnProperty.call(t,n)&&!{}.hasOwnProperty.call(e,n))return!1;return!0}function Nj(e,t,r){if(t<1)return[];if(1===t&&void 0===r)return e;for(var n=[],i=0;i<e.length;i+=t){if(void 0!==r&&!0!==r(e[i]))return;n.push(e[i])}return n}function _j(e,t,r){return function(e){var{width:t,height:r}=e,n=function(e){return(e%180+180)%180}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0),i=n*Math.PI/180,a=Math.atan(r/t),o=i>a&&i<Math.PI-a?r/Math.sin(i):t/Math.cos(i);return Math.abs(o)}({width:e.width+t.width,height:e.height+t.height},r)}function Lj(e,t,r,n,i){if(e*t<e*n||e*t>e*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function Rj(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Kj(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Rj(Object(r),!0).forEach((function(t){zj(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Rj(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function zj(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Bj(e,t,r){var n,{tick:i,ticks:a,viewBox:o,minTickGap:l,orientation:c,interval:u,tickFormatter:f,unit:p,angle:h}=e;if(!a||!a.length||!i)return[];if(d(u)||Oo.isSsr)return null!==(n=function(e,t){return Nj(e,t+1)}(a,d(u)?u:0))&&void 0!==n?n:[];var y=[],v="top"===c||"bottom"===c?"width":"height",m=p&&"width"===v?Yg(p,{fontSize:t,letterSpacing:r}):{width:0,height:0},g=(e,n)=>{var i="function"==typeof f?f(e.value,n):e.value;return"width"===v?_j(Yg(i,{fontSize:t,letterSpacing:r}),m,h):Yg(i,{fontSize:t,letterSpacing:r})[v]},b=a.length>=2?s(a[1].coordinate-a[0].coordinate):1,x=function(e,t,r){var n="width"===r,{x:i,y:a,width:o,height:l}=e;return 1===t?{start:n?i:a,end:n?i+o:a+l}:{start:n?i+o:a+l,end:n?i:a}}(o,b,v);return"equidistantPreserveStart"===u?function(e,t,r,n,i){for(var a,o=(n||[]).slice(),{start:l,end:c}=t,s=0,u=1,f=l,d=function(){var t=null==n?void 0:n[s];if(void 0===t)return{v:Nj(n,u)};var a,o=s,d=()=>(void 0===a&&(a=r(t,o)),a),p=t.coordinate,h=0===s||Lj(e,p,d,f,c);h||(s=0,f=l,u+=1),h&&(f=p+e*(d()/2+i),s+=u)};u<=o.length;)if(a=d())return a.v;return[]}(b,x,g,a,l):(y="preserveStart"===u||"preserveStartEnd"===u?function(e,t,r,n,i,a){var o=(n||[]).slice(),l=o.length,{start:c,end:s}=t;if(a){var u=n[l-1],f=r(u,l-1),d=e*(u.coordinate+e*f/2-s);o[l-1]=u=Kj(Kj({},u),{},{tickCoord:d>0?u.coordinate-d*e:u.coordinate}),Lj(e,u.tickCoord,(()=>f),c,s)&&(s=u.tickCoord-e*(f/2+i),o[l-1]=Kj(Kj({},u),{},{isShow:!0}))}for(var p=a?l-1:l,h=function(t){var n,a=o[t],l=()=>(void 0===n&&(n=r(a,t)),n);if(0===t){var u=e*(a.coordinate-e*l()/2-c);o[t]=a=Kj(Kj({},a),{},{tickCoord:u<0?a.coordinate-u*e:a.coordinate})}else o[t]=a=Kj(Kj({},a),{},{tickCoord:a.coordinate});Lj(e,a.tickCoord,l,c,s)&&(c=a.tickCoord+e*(l()/2+i),o[t]=Kj(Kj({},a),{},{isShow:!0}))},y=0;y<p;y++)h(y);return o}(b,x,g,a,l,"preserveStartEnd"===u):function(e,t,r,n,i){for(var a=(n||[]).slice(),o=a.length,{start:l}=t,{end:c}=t,s=function(t){var n,s=a[t],u=()=>(void 0===n&&(n=r(s,t)),n);if(t===o-1){var f=e*(s.coordinate+e*u()/2-c);a[t]=s=Kj(Kj({},s),{},{tickCoord:f>0?s.coordinate-f*e:s.coordinate})}else a[t]=s=Kj(Kj({},s),{},{tickCoord:s.coordinate});Lj(e,s.tickCoord,u,l,c)&&(c=s.tickCoord-e*(u()/2+i),a[t]=Kj(Kj({},s),{},{isShow:!0}))},u=o-1;u>=0;u--)s(u);return a}(b,x,g,a,l),y.filter((e=>e.isShow)))}Sj(Cj,"displayName","ReferenceArea"),Sj(Cj,"defaultProps",{ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#ccc",fillOpacity:.5,stroke:"none",strokeWidth:1});var Fj=["viewBox"],Wj=["viewBox"];function Uj(){return Uj=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Uj.apply(null,arguments)}function Xj(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Vj(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Xj(Object(r),!0).forEach((function(t){Hj(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Xj(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function $j(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function Hj(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class qj extends t.Component{constructor(e){super(e),this.tickRefs=t.createRef(),this.tickRefs.current=[],this.state={fontSize:"",letterSpacing:""}}shouldComponentUpdate(e,t){var{viewBox:r}=e,n=$j(e,Fj),i=this.props,{viewBox:a}=i,o=$j(i,Wj);return!Ij(r,a)||!Ij(n,o)||!Ij(t,this.state)}getTickLineCoord(e){var t,r,n,i,a,o,{x:l,y:c,width:s,height:u,orientation:f,tickSize:p,mirror:h,tickMargin:y}=this.props,v=h?-1:1,m=e.tickSize||p,g=d(e.tickCoord)?e.tickCoord:e.coordinate;switch(f){case"top":t=r=e.coordinate,o=(n=(i=c+ +!h*u)-v*m)-v*y,a=g;break;case"left":n=i=e.coordinate,a=(t=(r=l+ +!h*s)-v*m)-v*y,o=g;break;case"right":n=i=e.coordinate,a=(t=(r=l+ +h*s)+v*m)+v*y,o=g;break;default:t=r=e.coordinate,o=(n=(i=c+ +h*u)+v*m)+v*y,a=g}return{line:{x1:t,y1:n,x2:r,y2:i},tick:{x:a,y:o}}}getTickTextAnchor(){var e,{orientation:t,mirror:r}=this.props;switch(t){case"left":e=r?"start":"end";break;case"right":e=r?"end":"start";break;default:e="middle"}return e}getTickVerticalAnchor(){var{orientation:e,mirror:t}=this.props;switch(e){case"left":case"right":return"middle";case"top":return t?"start":"end";default:return t?"end":"start"}}renderAxisLine(){var{x:e,y:r,width:i,height:a,orientation:o,mirror:c,axisLine:s}=this.props,u=Vj(Vj(Vj({},z(this.props,!1)),z(s,!1)),{},{fill:"none"});if("top"===o||"bottom"===o){var f=+("top"===o&&!c||"bottom"===o&&c);u=Vj(Vj({},u),{},{x1:e,y1:r+f*a,x2:e+i,y2:r+f*a})}else{var d=+("left"===o&&!c||"right"===o&&c);u=Vj(Vj({},u),{},{x1:e+d*i,y1:r,x2:e+d*i,y2:r+a})}return t.createElement("line",Uj({},u,{className:n("recharts-cartesian-axis-line",l()(s,"className"))}))}static renderTickItem(e,r,i){var a,o=n(r.className,"recharts-cartesian-axis-tick-value");if(t.isValidElement(e))a=t.cloneElement(e,Vj(Vj({},r),{},{className:o}));else if("function"==typeof e)a=e(Vj(Vj({},r),{},{className:o}));else{var l="recharts-cartesian-axis-tick-value";"boolean"!=typeof e&&(l=n(l,e.className)),a=t.createElement(mb,Uj({},r,{className:l}),i)}return a}renderTicks(e,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],{tickLine:a,stroke:o,tick:c,tickFormatter:s,unit:u,padding:f}=this.props,d=Bj(Vj(Vj({},this.props),{},{ticks:i}),e,r),p=this.getTickTextAnchor(),h=this.getTickVerticalAnchor(),y=C(this.props),v=z(c,!1),m=Vj(Vj({},y),{},{fill:"none"},z(a,!1)),g=d.map(((e,r)=>{var{line:i,tick:g}=this.getTickLineCoord(e),b=Vj(Vj(Vj(Vj({textAnchor:p,verticalAnchor:h},y),{},{stroke:"none",fill:o},v),g),{},{index:r,payload:e,visibleTicksCount:d.length,tickFormatter:s,padding:f});return t.createElement(V,Uj({className:"recharts-cartesian-axis-tick",key:"tick-".concat(e.value,"-").concat(e.coordinate,"-").concat(e.tickCoord)},M(this.props,e,r)),a&&t.createElement("line",Uj({},m,i,{className:n("recharts-cartesian-axis-tick-line",l()(a,"className"))})),c&&qj.renderTickItem(c,b,"".concat("function"==typeof s?s(e.value,r):e.value).concat(u||"")))}));return g.length>0?t.createElement("g",{className:"recharts-cartesian-axis-ticks"},g):null}render(){var{axisLine:e,width:r,height:i,className:a,hide:o}=this.props;if(o)return null;var{ticks:l}=this.props;return null!=r&&r<=0||null!=i&&i<=0?null:t.createElement(V,{className:n("recharts-cartesian-axis",a),ref:e=>{if(e){var t=e.getElementsByClassName("recharts-cartesian-axis-tick-value");this.tickRefs.current=Array.from(t);var r=t[0];if(r){var n=window.getComputedStyle(r).fontSize,i=window.getComputedStyle(r).letterSpacing;n===this.state.fontSize&&i===this.state.letterSpacing||this.setState({fontSize:window.getComputedStyle(r).fontSize,letterSpacing:window.getComputedStyle(r).letterSpacing})}}}},e&&this.renderAxisLine(),this.renderTicks(this.state.fontSize,this.state.letterSpacing,l),Db.renderCallByParent(this.props))}}Hj(qj,"displayName","CartesianAxis"),Hj(qj,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var Yj=["x1","y1","x2","y2","key"],Gj=["offset"],Zj=["xAxisId","yAxisId"],Jj=["xAxisId","yAxisId"];function Qj(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function eS(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Qj(Object(r),!0).forEach((function(t){tS(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Qj(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function tS(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function rS(){return rS=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},rS.apply(null,arguments)}function nS(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var iS=e=>{var{fill:r}=e;if(!r||"none"===r)return null;var{fillOpacity:n,x:i,y:a,width:o,height:l,ry:c}=e;return t.createElement("rect",{x:i,y:a,ry:c,width:o,height:l,stroke:"none",fill:r,fillOpacity:n,className:"recharts-cartesian-grid-bg"})};function aS(e,r){var n;if(t.isValidElement(e))n=t.cloneElement(e,r);else if("function"==typeof e)n=e(r);else{var{x1:i,y1:a,x2:o,y2:l,key:c}=r,s=C(nS(r,Yj)),{offset:u}=s,f=nS(s,Gj);n=t.createElement("line",rS({},f,{x1:i,y1:a,x2:o,y2:l,fill:"none",key:c}))}return n}function oS(e){var{x:r,width:n,horizontal:i=!0,horizontalPoints:a}=e;if(!i||!a||!a.length)return null;var{xAxisId:o,yAxisId:l}=e,c=nS(e,Zj),s=a.map(((e,t)=>{var a=eS(eS({},c),{},{x1:r,y1:e,x2:r+n,y2:e,key:"line-".concat(t),index:t});return aS(i,a)}));return t.createElement("g",{className:"recharts-cartesian-grid-horizontal"},s)}function lS(e){var{y:r,height:n,vertical:i=!0,verticalPoints:a}=e;if(!i||!a||!a.length)return null;var{xAxisId:o,yAxisId:l}=e,c=nS(e,Jj),s=a.map(((e,t)=>{var a=eS(eS({},c),{},{x1:e,y1:r,x2:e,y2:r+n,key:"line-".concat(t),index:t});return aS(i,a)}));return t.createElement("g",{className:"recharts-cartesian-grid-vertical"},s)}function cS(e){var{horizontalFill:r,fillOpacity:n,x:i,y:a,width:o,height:l,horizontalPoints:c,horizontal:s=!0}=e;if(!s||!r||!r.length)return null;var u=c.map((e=>Math.round(e+a-a))).sort(((e,t)=>e-t));a!==u[0]&&u.unshift(0);var f=u.map(((e,c)=>{var s=!u[c+1]?a+l-e:u[c+1]-e;if(s<=0)return null;var f=c%r.length;return t.createElement("rect",{key:"react-".concat(c),y:e,x:i,height:s,width:o,stroke:"none",fill:r[f],fillOpacity:n,className:"recharts-cartesian-grid-bg"})}));return t.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},f)}function sS(e){var{vertical:r=!0,verticalFill:n,fillOpacity:i,x:a,y:o,width:l,height:c,verticalPoints:s}=e;if(!r||!n||!n.length)return null;var u=s.map((e=>Math.round(e+a-a))).sort(((e,t)=>e-t));a!==u[0]&&u.unshift(0);var f=u.map(((e,r)=>{var s=!u[r+1]?a+l-e:u[r+1]-e;if(s<=0)return null;var f=r%n.length;return t.createElement("rect",{key:"react-".concat(r),x:e,y:o,width:s,height:c,stroke:"none",fill:n[f],fillOpacity:i,className:"recharts-cartesian-grid-bg"})}));return t.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},f)}var uS=(e,t)=>{var{xAxis:r,width:n,height:i,offset:a}=e;return ui(Bj(eS(eS(eS({},qj.defaultProps),r),{},{ticks:fi(r,!0),viewBox:{x:0,y:0,width:n,height:i}})),a.left,a.left+a.width,t)},fS=(e,t)=>{var{yAxis:r,width:n,height:i,offset:a}=e;return ui(Bj(eS(eS(eS({},qj.defaultProps),r),{},{ticks:fi(r,!0),viewBox:{x:0,y:0,width:n,height:i}})),a.top,a.top+a.height,t)},dS={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0};function pS(e){var r=Yi(),n=Gi(),i=qi(),a=eS(eS({},pl(e,dS)),{},{x:d(e.x)?e.x:i.left,y:d(e.y)?e.y:i.top,width:d(e.width)?e.width:i.width,height:d(e.height)?e.height:i.height}),{xAxisId:o,yAxisId:l,x:c,y:s,width:u,height:f,syncWithTicks:p,horizontalValues:h,verticalValues:y}=a,v=Wi(),m=He((e=>ov(e,"xAxis",o,v))),g=He((e=>ov(e,"yAxis",l,v)));if(!d(u)||u<=0||!d(f)||f<=0||!d(c)||c!==+c||!d(s)||s!==+s)return null;var b=a.verticalCoordinatesGenerator||uS,x=a.horizontalCoordinatesGenerator||fS,{horizontalPoints:w,verticalPoints:O}=a;if(!(w&&w.length||"function"!=typeof x)){var P=h&&h.length,E=x({yAxis:g?eS(eS({},g),{},{ticks:P?h:g.ticks}):void 0,width:r,height:n,offset:i},!!P||p);Ng(Array.isArray(E),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof E,"]")),Array.isArray(E)&&(w=E)}if(!(O&&O.length||"function"!=typeof b)){var A=y&&y.length,j=b({xAxis:m?eS(eS({},m),{},{ticks:A?y:m.ticks}):void 0,width:r,height:n,offset:i},!!A||p);Ng(Array.isArray(j),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(O=j)}return t.createElement("g",{className:"recharts-cartesian-grid"},t.createElement(iS,{fill:a.fill,fillOpacity:a.fillOpacity,x:a.x,y:a.y,width:a.width,height:a.height,ry:a.ry}),t.createElement(cS,rS({},a,{horizontalPoints:w})),t.createElement(sS,rS({},a,{verticalPoints:O})),t.createElement(oS,rS({},a,{offset:i,horizontalPoints:w,xAxis:m,yAxis:g})),t.createElement(lS,rS({},a,{offset:i,verticalPoints:O,xAxis:m,yAxis:g})))}pS.displayName="CartesianGrid";var hS=(e,t,r,n)=>fv(e,"xAxis",t,n),yS=(e,t,r,n)=>uv(e,"xAxis",t,n),vS=(e,t,r,n)=>fv(e,"yAxis",r,n),mS=(e,t,r,n)=>uv(e,"yAxis",r,n),gS=et([Ji,hS,vS,yS,mS],((e,t,r,n,i)=>si(e,"xAxis")?Pi(t,n,!1):Pi(r,i,!1)));function bS(e){return"line"===e.type}var xS=et([Nh,(e,t,r,n,i)=>i],((e,t)=>e.filter(bS).find((e=>e.id===t)))),wS=et([Ji,hS,vS,yS,mS,xS,gS,vp],((e,t,r,n,i,a,o,l)=>{var{chartData:c,dataStartIndex:s,dataEndIndex:u}=l;if(null!=a&&null!=t&&null!=r&&null!=n&&null!=i&&0!==n.length&&0!==i.length&&null!=o){var f,{dataKey:d,data:p}=a;if(null!=(f=null!=p&&p.length>0?p:null==c?void 0:c.slice(s,u+1)))return function(e){var{layout:t,xAxis:r,yAxis:n,xAxisTicks:i,yAxisTicks:a,dataKey:o,bandSize:l,displayedData:c}=e;return c.map(((e,c)=>{var s=ci(e,o);if("horizontal"===t)return{x:mi({axis:r,ticks:i,bandSize:l,entry:e,index:c}),y:O(s)?null:n.scale(s),value:s,payload:e};var u=O(s)?null:r.scale(s),f=mi({axis:n,ticks:a,bandSize:l,entry:e,index:c});return null==u||null==f?null:{x:u,y:f,value:s,payload:e}})).filter(Boolean)}({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataKey:d,bandSize:o,displayedData:f})}})),OS=["id"],PS=["type","layout","connectNulls","needClip"],ES=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId","id"];function AS(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function jS(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?AS(Object(r),!0).forEach((function(t){SS(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):AS(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function SS(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function kS(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function MS(){return MS=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},MS.apply(null,arguments)}var TS=e=>{var{dataKey:t,name:r,stroke:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Ai(r,t),payload:e}]};function DS(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:l,unit:c}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:Ai(o,t),hide:l,type:e.tooltipType,color:e.stroke,unit:c}}}var CS=(e,t)=>"".concat(t,"px ").concat(e-t,"px");function IS(e,t){for(var r=e.length%2!=0?[...e,0]:e,n=[],i=0;i<t;++i)n=[...n,...r];return n}function NS(e){var{clipPathId:r,points:i,props:a}=e,{dot:o,dataKey:l,needClip:c}=a;if(!function(e,t){return null!=e&&(!!t||1===e.length)}(i,o))return null;var{id:s}=a,u=kS(a,OS),f=K(o),d=C(u),p=z(o,!0),h=i.map(((e,r)=>{var a=jS(jS(jS({key:"dot-".concat(r),r:3},d),p),{},{index:r,cx:e.x,cy:e.y,dataKey:l,value:e.value,payload:e.payload,points:i});return function(e,r){var i;if(t.isValidElement(e))i=t.cloneElement(e,r);else if("function"==typeof e)i=e(r);else{var a=n("recharts-line-dot","boolean"!=typeof e?e.className:"");i=t.createElement(Jb,MS({},r,{className:a}))}return i}(o,a)})),y={clipPath:c?"url(#clipPath-".concat(f?"":"dots-").concat(r,")"):void 0};return t.createElement(V,MS({className:"recharts-line-dots",key:"dots"},y),h)}function _S(e){var{clipPathId:r,pathRef:n,points:i,strokeDasharray:a,props:o,showLabels:l}=e,{type:c,layout:s,connectNulls:u,needClip:f}=o,d=kS(o,PS),p=jS(jS({},z(d,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:f?"url(#clipPath-".concat(r,")"):void 0,points:i,type:c,layout:s,connectNulls:u,strokeDasharray:null!=a?a:o.strokeDasharray});return t.createElement(t.Fragment,null,(null==i?void 0:i.length)>1&&t.createElement(il,MS({},p,{pathRef:n})),t.createElement(NS,{points:i,clipPathId:r,props:o}),l&&Ub.renderCallByParent(o,i))}function LS(e){var{clipPathId:r,props:n,pathRef:i,previousPointsRef:a,longestAnimatedLengthRef:o}=e,{points:l,strokeDasharray:c,isAnimationActive:s,animationBegin:u,animationDuration:f,animationEasing:d,animateNewValues:p,width:h,height:y,onAnimationEnd:v,onAnimationStart:m}=n,g=a.current,x=Uw(n,"recharts-line-"),[w,O]=(0,t.useState)(!1),P=(0,t.useCallback)((()=>{"function"==typeof v&&v(),O(!1)}),[v]),E=(0,t.useCallback)((()=>{"function"==typeof m&&m(),O(!0)}),[m]),A=function(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch(e){return 0}}(i.current),j=o.current;return t.createElement(oO,{begin:u,duration:f,isActive:s,easing:d,onAnimationEnd:P,onAnimationStart:E,key:x},(e=>{var s,u=b(j,A+j,e),f=Math.min(u,A);if(c){var d="".concat(c).split(/[,\s]+/gim).map((e=>parseFloat(e)));s=((e,t,r)=>{var n=r.reduce(((e,t)=>e+t));if(!n)return CS(t,e);for(var i=Math.floor(e/n),a=e%n,o=t-e,l=[],c=0,s=0;c<r.length;s+=r[c],++c)if(s+r[c]>a){l=[...r.slice(0,c),a-s];break}var u=l.length%2==0?[0,o]:[o];return[...IS(r,i),...l,...u].map((e=>"".concat(e,"px"))).join(", ")})(f,A,d)}else s=CS(A,f);if(g){var v=g.length/l.length,m=1===e?l:l.map(((t,r)=>{var n=Math.floor(r*v);if(g[n]){var i=g[n];return jS(jS({},t),{},{x:b(i.x,t.x,e),y:b(i.y,t.y,e)})}return jS(jS({},t),{},p?{x:b(2*h,t.x,e),y:b(y/2,t.y,e)}:{x:t.x,y:t.y})}));return a.current=m,t.createElement(_S,{props:n,points:m,clipPathId:r,pathRef:i,showLabels:!w,strokeDasharray:s})}return e>0&&A>0&&(a.current=l,o.current=f),t.createElement(_S,{props:n,points:l,clipPathId:r,pathRef:i,showLabels:!w,strokeDasharray:s})}))}function RS(e){var{clipPathId:r,props:n}=e,{points:i,isAnimationActive:a}=n,o=(0,t.useRef)(null),l=(0,t.useRef)(0),c=(0,t.useRef)(null),s=o.current;return a&&i&&i.length&&s!==i?t.createElement(LS,{props:n,clipPathId:r,previousPointsRef:o,longestAnimatedLengthRef:l,pathRef:c}):t.createElement(_S,{props:n,points:i,clipPathId:r,pathRef:c,showLabels:!0})}var KS=(e,t)=>({x:e.x,y:e.y,value:e.value,errorVal:ci(e.payload,t)});class zS extends t.Component{render(){var e,{hide:r,dot:i,points:a,className:o,xAxisId:l,yAxisId:c,top:s,left:u,width:f,height:d,id:p,needClip:h}=this.props;if(r)return null;var y=n("recharts-line",o),v=p,{r:m=3,strokeWidth:g=2}=null!==(e=z(i,!1))&&void 0!==e?e:{r:3,strokeWidth:2},b=K(i),x=2*m+g;return t.createElement(t.Fragment,null,t.createElement(V,{className:y},h&&t.createElement("defs",null,t.createElement(WP,{clipPathId:v,xAxisId:l,yAxisId:c}),!b&&t.createElement("clipPath",{id:"clipPath-dots-".concat(v)},t.createElement("rect",{x:u-x/2,y:s-x/2,width:f+x,height:d+x}))),t.createElement(RS,{props:this.props,clipPathId:v}),t.createElement(zP,{xAxisId:l,yAxisId:c,data:a,dataPointFormatter:KS,errorBarOffset:0},this.props.children)),t.createElement(zO,{activeDot:this.props.activeDot,points:a,mainColor:this.props.stroke,itemDataKey:this.props.dataKey}))}}var BS={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:!Oo.isSsr,label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0};function FS(e){var r=pl(e,BS),{activeDot:n,animateNewValues:i,animationBegin:a,animationDuration:o,animationEasing:l,connectNulls:c,dot:s,hide:u,isAnimationActive:f,label:d,legendType:p,xAxisId:h,yAxisId:y,id:v}=r,m=kS(r,ES),{needClip:g}=FP(h,y),b=NO(),x=Qi(),w=Wi(),O=He((e=>wS(e,h,y,w,v)));if("horizontal"!==x&&"vertical"!==x||null==O||null==b)return null;var{height:P,width:E,x:A,y:j}=b;return t.createElement(zS,MS({},m,{id:v,connectNulls:c,dot:s,activeDot:n,animateNewValues:i,animationBegin:a,animationDuration:o,animationEasing:l,isAnimationActive:f,hide:u,label:d,legendType:p,xAxisId:h,yAxisId:y,points:O,layout:x,height:P,width:E,left:A,top:j,needClip:g}))}function WS(e){var r=pl(e,BS),n=Wi();return t.createElement($w,{id:r.id,type:"line"},(e=>t.createElement(t.Fragment,null,t.createElement(Fw,{legendPayload:TS(r)}),t.createElement(Kw,{fn:DS,args:r}),t.createElement(eO,{type:"line",id:e,data:r.data,xAxisId:r.xAxisId,yAxisId:r.yAxisId,zAxisId:0,dataKey:r.dataKey,hide:r.hide,isPanorama:n}),t.createElement(FS,MS({},r,{id:e})))))}WS.displayName="Line";var US=(e,t,r,n)=>fv(e,"xAxis",t,n),XS=(e,t,r,n)=>uv(e,"xAxis",t,n),VS=(e,t,r,n)=>fv(e,"yAxis",r,n),$S=(e,t,r,n)=>uv(e,"yAxis",r,n),HS=et([Ji,US,VS,XS,$S],((e,t,r,n,i)=>si(e,"xAxis")?Pi(t,n,!1):Pi(r,i,!1))),qS=et([Nh,(e,t,r,n,i)=>i],((e,t)=>e.filter((e=>"area"===e.type)).find((e=>e.id===t)))),YS=et([Ji,US,VS,XS,$S,(e,t,r,n,i)=>{var a,o=qS(e,t,r,n,i);if(null!=o){var l,c=Ji(e);if(null!=(l=si(c,"xAxis")?Jh(e,"yAxis",r,n):Jh(e,"xAxis",t,n))){var{stackId:s}=o,u=hh(o);if(null!=s&&null!=u){var f=null===(a=l[s])||void 0===a?void 0:a.stackedData;return null==f?void 0:f.find((e=>e.key===u))}}}},vp,HS,qS],((e,t,r,n,i,a,o,l,c)=>{var{chartData:s,dataStartIndex:u,dataEndIndex:f}=o;if(null!=c&&("horizontal"===e||"vertical"===e)&&null!=t&&null!=r&&null!=n&&null!=i&&0!==n.length&&0!==i.length&&null!=l){var d,{data:p}=c;if(null!=(d=p&&p.length>0?p:null==s?void 0:s.slice(u,f+1))){return function(e){var t,{areaSettings:{connectNulls:r,baseValue:n,dataKey:i},stackedData:a,layout:o,chartBaseValue:l,xAxis:c,yAxis:s,displayedData:u,dataStartIndex:f,xAxisTicks:d,yAxisTicks:p,bandSize:h}=e,y=a&&a.length,v=vk(o,l,n,c,s),m="horizontal"===o,g=!1,b=u.map(((e,t)=>{var n;y?n=a[f+t]:(n=ci(e,i),Array.isArray(n)?g=!0:n=[v,n]);var o=null==n[1]||y&&!r&&null==ci(e,i);return m?{x:mi({axis:c,ticks:d,bandSize:h,entry:e,index:t}),y:o?null:s.scale(n[1]),value:n,payload:e}:{x:o?null:c.scale(n[1]),y:mi({axis:s,ticks:p,bandSize:h,entry:e,index:t}),value:n,payload:e}}));t=y||g?b.map((e=>{var t=Array.isArray(e.value)?e.value[0]:null;return m?{x:e.x,y:null!=t&&null!=e.y?s.scale(t):null,payload:e.payload}:{x:null!=t?c.scale(t):null,y:e.y,payload:e.payload}})):m?s.scale(v):c.scale(v);return{points:b,baseLine:t,isRange:g}}({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataStartIndex:u,areaSettings:c,stackedData:a,displayedData:d,chartBaseValue:undefined,bandSize:l})}}})),GS=["id"],ZS=["activeDot","animationBegin","animationDuration","animationEasing","connectNulls","dot","fill","fillOpacity","hide","isAnimationActive","legendType","stroke","xAxisId","yAxisId"];function JS(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function QS(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ek(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?QS(Object(r),!0).forEach((function(t){tk(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):QS(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function tk(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function rk(){return rk=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},rk.apply(null,arguments)}function nk(e,t){return e&&"none"!==e?e:t}var ik=e=>{var{dataKey:t,name:r,stroke:n,fill:i,legendType:a,hide:o}=e;return[{inactive:o,dataKey:t,type:a,color:nk(n,i),value:Ai(r,t),payload:e}]};function ak(e){var{dataKey:t,data:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:l,unit:c}=e;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:Ai(o,t),hide:l,type:e.tooltipType,color:nk(n,a),unit:c}}}function ok(e){var{clipPathId:r,points:i,props:a}=e,{needClip:o,dot:l,dataKey:c}=a;if(!function(e,t){return null!=e&&(!!t||1===e.length)}(i,l))return null;var s=K(l),u=C(a),f=z(l,!0),d=i.map(((e,r)=>{var a=ek(ek(ek({key:"dot-".concat(r),r:3},u),f),{},{index:r,cx:e.x,cy:e.y,dataKey:c,value:e.value,payload:e.payload,points:i});return((e,r)=>{var i;if(t.isValidElement(e))i=t.cloneElement(e,r);else if("function"==typeof e)i=e(r);else{var a=n("recharts-area-dot","boolean"!=typeof e?e.className:"");i=t.createElement(Jb,rk({},r,{className:a}))}return i})(l,a)})),p={clipPath:o?"url(#clipPath-".concat(s?"":"dots-").concat(r,")"):void 0};return t.createElement(V,rk({className:"recharts-area-dots"},p),d)}function lk(e){var{points:r,baseLine:n,needClip:i,clipPathId:a,props:o,showLabels:l}=e,{layout:c,type:s,stroke:u,connectNulls:f,isRange:d}=o,{id:p}=o,h=JS(o,GS),y=C(h);return t.createElement(t.Fragment,null,(null==r?void 0:r.length)>1&&t.createElement(V,{clipPath:i?"url(#clipPath-".concat(a,")"):void 0},t.createElement(il,rk({},y,{id:p,points:r,connectNulls:f,type:s,baseLine:n,layout:c,stroke:"none",className:"recharts-area-area"})),"none"!==u&&t.createElement(il,rk({},y,{className:"recharts-area-curve",layout:c,type:s,connectNulls:f,fill:"none",points:r})),"none"!==u&&d&&t.createElement(il,rk({},y,{className:"recharts-area-curve",layout:c,type:s,connectNulls:f,fill:"none",points:n}))),t.createElement(ok,{points:r,props:h,clipPathId:a}),l&&Ub.renderCallByParent(h,r))}function ck(e){var{alpha:r,baseLine:n,points:i,strokeWidth:a}=e,o=i[0].y,l=i[i.length-1].y;if(!Ho(o)||!Ho(l))return null;var c=r*Math.abs(o-l),s=Math.max(...i.map((e=>e.x||0)));return d(n)?s=Math.max(n,s):n&&Array.isArray(n)&&n.length&&(s=Math.max(...n.map((e=>e.x||0)),s)),d(s)?t.createElement("rect",{x:0,y:o<l?o:o-c,width:s+(a?parseInt("".concat(a),10):1),height:Math.floor(c)}):null}function sk(e){var{alpha:r,baseLine:n,points:i,strokeWidth:a}=e,o=i[0].x,l=i[i.length-1].x;if(!Ho(o)||!Ho(l))return null;var c=r*Math.abs(o-l),s=Math.max(...i.map((e=>e.y||0)));return d(n)?s=Math.max(n,s):n&&Array.isArray(n)&&n.length&&(s=Math.max(...n.map((e=>e.y||0)),s)),d(s)?t.createElement("rect",{x:o<l?o:o-c,y:0,width:c,height:Math.floor(s+(a?parseInt("".concat(a),10):1))}):null}function uk(e){var{alpha:r,layout:n,points:i,baseLine:a,strokeWidth:o}=e;return"vertical"===n?t.createElement(ck,{alpha:r,points:i,baseLine:a,strokeWidth:o}):t.createElement(sk,{alpha:r,points:i,baseLine:a,strokeWidth:o})}function fk(e){var{needClip:r,clipPathId:n,props:i,previousPointsRef:a,previousBaselineRef:o}=e,{points:l,baseLine:c,isAnimationActive:s,animationBegin:f,animationDuration:p,animationEasing:h,onAnimationStart:y,onAnimationEnd:v}=i,m=Uw(i,"recharts-area-"),[g,x]=(0,t.useState)(!0),w=(0,t.useCallback)((()=>{"function"==typeof v&&v(),x(!1)}),[v]),P=(0,t.useCallback)((()=>{"function"==typeof y&&y(),x(!0)}),[y]),E=a.current,A=o.current;return t.createElement(oO,{begin:f,duration:p,isActive:s,easing:h,onAnimationEnd:w,onAnimationStart:P,key:m},(e=>{if(E){var s,f=E.length/l.length,p=1===e?l:l.map(((t,r)=>{var n=Math.floor(r*f);if(E[n]){var i=E[n];return ek(ek({},t),{},{x:b(i.x,t.x,e),y:b(i.y,t.y,e)})}return t}));return s=d(c)?b(A,c,e):O(c)||u(c)?b(A,0,e):c.map(((t,r)=>{var n=Math.floor(r*f);if(Array.isArray(A)&&A[n]){var i=A[n];return ek(ek({},t),{},{x:b(i.x,t.x,e),y:b(i.y,t.y,e)})}return t})),e>0&&(a.current=p,o.current=s),t.createElement(lk,{points:p,baseLine:s,needClip:r,clipPathId:n,props:i,showLabels:!g})}return e>0&&(a.current=l,o.current=c),t.createElement(V,null,t.createElement("defs",null,t.createElement("clipPath",{id:"animationClipPath-".concat(n)},t.createElement(uk,{alpha:e,points:l,baseLine:c,layout:i.layout,strokeWidth:i.strokeWidth}))),t.createElement(V,{clipPath:"url(#animationClipPath-".concat(n,")")},t.createElement(lk,{points:l,baseLine:c,needClip:r,clipPathId:n,props:i,showLabels:!0})))}))}function dk(e){var{needClip:r,clipPathId:n,props:i}=e,{points:a,baseLine:o,isAnimationActive:l}=i,c=(0,t.useRef)(null),s=(0,t.useRef)(),u=c.current,f=s.current;return l&&a&&a.length&&(u!==a||f!==o)?t.createElement(fk,{needClip:r,clipPathId:n,props:i,previousPointsRef:c,previousBaselineRef:s}):t.createElement(lk,{points:a,baseLine:o,needClip:r,clipPathId:n,props:i,showLabels:!0})}class pk extends t.PureComponent{render(){var e,{hide:r,dot:i,points:a,className:o,top:l,left:c,needClip:s,xAxisId:u,yAxisId:f,width:d,height:p,id:h,baseLine:y}=this.props;if(r)return null;var v=n("recharts-area",o),m=h,{r:g=3,strokeWidth:b=2}=null!==(e=z(i,!1))&&void 0!==e?e:{r:3,strokeWidth:2},x=K(i),w=2*g+b;return t.createElement(t.Fragment,null,t.createElement(V,{className:v},s&&t.createElement("defs",null,t.createElement(WP,{clipPathId:m,xAxisId:u,yAxisId:f}),!x&&t.createElement("clipPath",{id:"clipPath-dots-".concat(m)},t.createElement("rect",{x:c-w/2,y:l-w/2,width:d+w,height:p+w}))),t.createElement(dk,{needClip:s,clipPathId:m,props:this.props})),t.createElement(zO,{points:a,mainColor:nk(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot}),this.props.isRange&&Array.isArray(y)&&t.createElement(zO,{points:y,mainColor:nk(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot}))}}var hk={activeDot:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!1,fill:"#3182bd",fillOpacity:.6,hide:!1,isAnimationActive:!Oo.isSsr,legendType:"line",stroke:"#3182bd",xAxisId:0,yAxisId:0};function yk(e){var r,n=pl(e,hk),{activeDot:i,animationBegin:a,animationDuration:o,animationEasing:l,connectNulls:c,dot:s,fill:u,fillOpacity:f,hide:d,isAnimationActive:p,legendType:h,stroke:y,xAxisId:v,yAxisId:m}=n,g=JS(n,ZS),b=Qi(),x=Wm(),{needClip:w}=FP(v,m),O=Wi(),{points:P,isRange:E,baseLine:A}=null!==(r=He((t=>YS(t,v,m,O,e.id))))&&void 0!==r?r:{},j=NO();if("horizontal"!==b&&"vertical"!==b||null==j)return null;if("AreaChart"!==x&&"ComposedChart"!==x)return null;var{height:S,width:k,x:M,y:T}=j;return P&&P.length?t.createElement(pk,rk({},g,{activeDot:i,animationBegin:a,animationDuration:o,animationEasing:l,baseLine:A,connectNulls:c,dot:s,fill:u,fillOpacity:f,height:S,hide:d,layout:b,isAnimationActive:p,isRange:E,legendType:h,needClip:w,points:P,stroke:y,width:k,left:M,top:T,xAxisId:v,yAxisId:m})):null}var vk=(e,t,r,n,i)=>{var a=null!=r?r:t;if(d(a))return a;var o="horizontal"===e?i:n,l=o.scale.domain();if("number"===o.type){var c=Math.max(l[0],l[1]),s=Math.min(l[0],l[1]);return"dataMin"===a?s:"dataMax"===a||c<0?c:Math.max(Math.min(l[0],l[1]),0)}return"dataMin"===a?l[0]:"dataMax"===a?l[1]:l[0]};function mk(e){var r=pl(e,hk),n=Wi();return t.createElement($w,{id:r.id,type:"area"},(e=>t.createElement(t.Fragment,null,t.createElement(Fw,{legendPayload:ik(r)}),t.createElement(Kw,{fn:ak,args:r}),t.createElement(eO,{type:"area",id:e,data:r.data,dataKey:r.dataKey,xAxisId:r.xAxisId,yAxisId:r.yAxisId,zAxisId:0,stackId:vi(r.stackId),hide:r.hide,barSize:void 0,baseValue:r.baseValue,isPanorama:n,connectNulls:r.connectNulls}),t.createElement(yk,rk({},r,{id:e})))))}function gk(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function bk(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?gk(Object(r),!0).forEach((function(t){xk(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):gk(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function xk(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}mk.displayName="Area";var wk=Gr({name:"cartesianAxis",initialState:{xAxis:{},yAxis:{},zAxis:{}},reducers:{addXAxis(e,t){e.xAxis[t.payload.id]=t.payload},removeXAxis(e,t){delete e.xAxis[t.payload.id]},addYAxis(e,t){e.yAxis[t.payload.id]=t.payload},removeYAxis(e,t){delete e.yAxis[t.payload.id]},addZAxis(e,t){e.zAxis[t.payload.id]=t.payload},removeZAxis(e,t){delete e.zAxis[t.payload.id]},updateYAxisWidth(e,t){var{id:r,width:n}=t.payload;e.yAxis[r]&&(e.yAxis[r]=bk(bk({},e.yAxis[r]),{},{width:n}))}}}),{addXAxis:Ok,removeXAxis:Pk,addYAxis:Ek,removeYAxis:Ak,addZAxis:jk,removeZAxis:Sk,updateYAxisWidth:kk}=wk.actions,Mk=wk.reducer;function Tk(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Dk(e){var r=Ue();return(0,t.useEffect)((()=>(r(jk(e)),()=>{r(Sk(e))})),[e,r]),null}class Ck extends t.Component{render(){return t.createElement(Dk,{domain:this.props.domain,id:this.props.zAxisId,dataKey:this.props.dataKey,name:this.props.name,unit:this.props.unit,range:this.props.range,scale:this.props.scale,type:this.props.type,allowDuplicatedCategory:kh.allowDuplicatedCategory,allowDataOverflow:kh.allowDataOverflow,reversed:kh.reversed,includeHidden:kh.includeHidden})}}Tk(Ck,"displayName","ZAxis"),Tk(Ck,"defaultProps",{zAxisId:0,range:kh.range,scale:kh.scale,type:kh.type});var Ik=["option","isActive"];function Nk(){return Nk=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Nk.apply(null,arguments)}function _k(e){var{option:r,isActive:n}=e,i=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,Ik);return"string"==typeof r?t.createElement(Nw,Nk({option:t.createElement(De,Nk({type:r},i)),isActive:n,shapeType:"symbols"},i)):t.createElement(Nw,Nk({option:r,isActive:n,shapeType:"symbols"},i))}var Lk=et([Nh,(e,t,r,n,i)=>i],((e,t)=>e.filter((e=>"scatter"===e.type)).find((e=>e.id===t)))),Rk=et([(e,t,r,n,i,a,o)=>vp(e,0,0,o),(e,t,r,n,i,a,o)=>fv(e,"xAxis",t,o),(e,t,r,n,i,a,o)=>uv(e,"xAxis",t,o),(e,t,r,n,i,a,o)=>fv(e,"yAxis",r,o),(e,t,r,n,i,a,o)=>uv(e,"yAxis",r,o),(e,t,r,n)=>pv(e,"zAxis",n,!1),Lk,(e,t,r,n,i,a)=>a],((e,t,r,n,i,a,o,l)=>{var c,{chartData:s,dataStartIndex:u,dataEndIndex:f}=e;if(null!=o&&(null!=(c=null!=(null==o?void 0:o.data)&&o.data.length>0?o.data:null==s?void 0:s.slice(u,f+1))&&null!=t&&null!=n&&null!=r&&null!=i&&0!==(null==r?void 0:r.length)&&0!==(null==i?void 0:i.length)))return function(e){var{displayedData:t,xAxis:r,yAxis:n,zAxis:i,scatterSettings:a,xAxisTicks:o,yAxisTicks:l,cells:c}=e,s=O(r.dataKey)?a.dataKey:r.dataKey,u=O(n.dataKey)?a.dataKey:n.dataKey,f=i&&i.dataKey,d=i?i.range:Ck.defaultProps.range,p=d&&d[0],h=r.scale.bandwidth?r.scale.bandwidth():0,y=n.scale.bandwidth?n.scale.bandwidth():0;return t.map(((e,t)=>{var d=ci(e,s),v=ci(e,u),m=!O(f)&&ci(e,f)||"-",g=[{name:O(r.dataKey)?a.name:r.name||r.dataKey,unit:r.unit||"",value:d,payload:e,dataKey:s,type:a.tooltipType},{name:O(n.dataKey)?a.name:n.name||n.dataKey,unit:n.unit||"",value:v,payload:e,dataKey:u,type:a.tooltipType}];"-"!==m&&g.push({name:i.name||i.dataKey,unit:i.unit||"",value:m,payload:e,dataKey:f,type:a.tooltipType});var b=mi({axis:r,ticks:o,bandSize:h,entry:e,index:t,dataKey:s}),x=mi({axis:n,ticks:l,bandSize:y,entry:e,index:t,dataKey:u}),w="-"!==m?i.scale(m):p,P=Math.sqrt(Math.max(w,0)/Math.PI);return Xk(Xk({},e),{},{cx:b,cy:x,x:b-P,y:x-P,width:2*P,height:2*P,size:w,node:{x:d,y:v,z:m},tooltipPayload:g,tooltipPosition:{x:b,y:x},payload:e},c&&c[t]&&c[t].props)}))}({displayedData:c,xAxis:t,yAxis:n,zAxis:a,scatterSettings:o,xAxisTicks:r,yAxisTicks:i,cells:l})})),Kk=["onMouseEnter","onClick","onMouseLeave"],zk=["id"],Bk=["animationBegin","animationDuration","animationEasing","hide","isAnimationActive","legendType","lineJointType","lineType","shape","xAxisId","yAxisId","zAxisId"];function Fk(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function Wk(){return Wk=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Wk.apply(null,arguments)}function Uk(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Xk(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Uk(Object(r),!0).forEach((function(t){Vk(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Uk(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Vk(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var $k=e=>{var{dataKey:t,name:r,fill:n,legendType:i,hide:a}=e;return[{inactive:a,dataKey:t,type:i,color:n,value:Ai(r,t),payload:e}]};function Hk(e){var{points:r,props:n}=e,{line:i,lineType:a,lineJointType:o}=n;if(!i)return null;var l,c,s=C(n),u=z(i,!1);if("joint"===a)l=r.map((e=>({x:e.cx,y:e.cy})));else if("fitting"===a){var{xmin:f,xmax:d,a:p,b:h}=w(r),y=e=>p*e+h;l=[{x:f,y:y(f)},{x:d,y:y(d)}]}var v=Xk(Xk(Xk({},s),{},{fill:"none",stroke:s&&s.fill},u),{},{points:l});return c=t.isValidElement(i)?t.cloneElement(i,v):"function"==typeof i?i(v):t.createElement(il,Wk({},v,{type:o})),t.createElement(V,{className:"recharts-scatter-line",key:"recharts-scatter-line"},c)}function qk(e){var{points:r,showLabels:n,allOtherScatterProps:i}=e,{shape:a,activeShape:o,dataKey:l}=i,c=He(Mm),{onMouseEnter:s,onClick:u,onMouseLeave:f}=i,d=Fk(i,Kk),p=_w(s,i.dataKey),h=Lw(f),y=Rw(u,i.dataKey);if(null==r)return null;var{id:v}=i,m=Fk(i,zk),g=C(m);return t.createElement(t.Fragment,null,t.createElement(Hk,{points:r,props:m}),r.map(((e,r)=>{var n=o&&c===String(r),i=n?o:a,s=Xk(Xk(Xk({key:"symbol-".concat(r)},g),e),{},{[Ii]:r,[Ni]:String(l)});return t.createElement(V,Wk({className:"recharts-scatter-symbol"},M(d,e,r),{onMouseEnter:p(e,r),onMouseLeave:h(e,r),onClick:y(e,r),key:"symbol-".concat(null==e?void 0:e.cx,"-").concat(null==e?void 0:e.cy,"-").concat(null==e?void 0:e.size,"-").concat(r)}),t.createElement(_k,Wk({option:i,isActive:n},s)))})),n&&Ub.renderCallByParent(m,r))}function Yk(e){var{previousPointsRef:r,props:n}=e,{points:i,isAnimationActive:a,animationBegin:o,animationDuration:l,animationEasing:c}=n,s=r.current,u=Uw(n,"recharts-scatter-"),[f,d]=(0,t.useState)(!1),p=(0,t.useCallback)((()=>{d(!1)}),[]),h=(0,t.useCallback)((()=>{d(!0)}),[]);return t.createElement(oO,{begin:o,duration:l,isActive:a,easing:c,onAnimationEnd:p,onAnimationStart:h,key:u},(e=>{var a=1===e?i:i.map(((t,r)=>{var n=s&&s[r];if(n){var i=g(n.cx,t.cx),a=g(n.cy,t.cy),o=g(n.size,t.size);return Xk(Xk({},t),{},{cx:i(e),cy:a(e),size:o(e)})}var l=g(0,t.size);return Xk(Xk({},t),{},{size:l(e)})}));return e>0&&(r.current=a),t.createElement(V,null,t.createElement(qk,{points:a,allOtherScatterProps:n,showLabels:!f}))}))}function Gk(e){var{points:r,isAnimationActive:n}=e,i=(0,t.useRef)(null),a=i.current;return n&&r&&r.length&&(!a||a!==r)?t.createElement(Yk,{props:e,previousPointsRef:i}):t.createElement(qk,{points:r,allOtherScatterProps:e,showLabels:!0})}function Zk(e){var{dataKey:t,points:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:l,tooltipType:c}=e;return{dataDefinedOnItem:null==r?void 0:r.map((e=>e.tooltipPayload)),positions:null==r?void 0:r.map((e=>e.tooltipPosition)),settings:{stroke:n,strokeWidth:i,fill:a,nameKey:void 0,dataKey:t,name:Ai(o,t),hide:l,type:c,color:a,unit:""}}}var Jk=(e,t,r)=>({x:e.cx,y:e.cy,value:"x"===r?+e.node.x:+e.node.y,errorVal:ci(e,t)});function Qk(e){var{hide:r,points:i,className:a,needClip:o,xAxisId:l,yAxisId:c,id:s,children:u}=e;if(r)return null;var f=n("recharts-scatter",a),d=s;return t.createElement(V,{className:f,clipPath:o?"url(#clipPath-".concat(d,")"):null,id:s},o&&t.createElement("defs",null,t.createElement(WP,{clipPathId:d,xAxisId:l,yAxisId:c})),t.createElement(zP,{xAxisId:l,yAxisId:c,data:i,dataPointFormatter:Jk,errorBarOffset:0},u),t.createElement(V,{key:"recharts-scatter-symbols"},t.createElement(Gk,e)))}var eM={xAxisId:0,yAxisId:0,zAxisId:0,legendType:"circle",lineType:"joint",lineJointType:"linear",data:[],shape:"circle",hide:!1,isAnimationActive:!Oo.isSsr,animationBegin:0,animationDuration:400,animationEasing:"linear"};function tM(e){var r=pl(e,eM),{animationBegin:n,animationDuration:i,animationEasing:a,hide:o,isAnimationActive:l,legendType:c,lineJointType:s,lineType:u,shape:f,xAxisId:d,yAxisId:p,zAxisId:h}=r,y=Fk(r,Bk),{needClip:v}=FP(d,p),m=(0,t.useMemo)((()=>R(e.children,zg)),[e.children]),g=Wi(),b=He((t=>Rk(t,d,p,h,e.id,m,g)));return null==v?null:t.createElement(t.Fragment,null,t.createElement(Kw,{fn:Zk,args:Xk(Xk({},e),{},{points:b})}),t.createElement(Qk,Wk({},y,{xAxisId:d,yAxisId:p,zAxisId:h,lineType:u,lineJointType:s,legendType:c,shape:f,hide:o,isAnimationActive:l,animationBegin:n,animationDuration:i,animationEasing:a,points:b,needClip:v})))}function rM(e){var r=pl(e,eM),n=Wi();return t.createElement($w,{id:r.id,type:"scatter"},(e=>t.createElement(t.Fragment,null,t.createElement(Fw,{legendPayload:$k(r)}),t.createElement(eO,{type:"scatter",id:e,data:r.data,xAxisId:r.xAxisId,yAxisId:r.yAxisId,zAxisId:r.zAxisId,dataKey:r.dataKey,hide:r.hide,name:r.name,tooltipType:r.tooltipType,isPanorama:n}),t.createElement(tM,Wk({},r,{id:e})))))}rM.displayName="Scatter";var nM=["children"],iM=["dangerouslySetInnerHTML","ticks"];function aM(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function oM(){return oM=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},oM.apply(null,arguments)}function lM(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function cM(e){var r=Ue(),n=(0,t.useMemo)((()=>{var{children:t}=e;return lM(e,nM)}),[e]),i=He((e=>Ah(e,n.id))),a=n===i;return(0,t.useEffect)((()=>(r(Ok(n)),()=>{r(Pk(n))})),[n,r]),a?e.children:null}var sM=e=>{var{xAxisId:r,className:i}=e,a=He(Bi),o=Wi(),l="xAxis",c=He((e=>Xy(e,l,r,o))),s=He((e=>cv(e,l,r,o))),u=He((e=>Zy(e,r))),f=He((e=>((e,t)=>{var r=Ki(e),n=Ah(e,t);if(null!=n){var i=Jy(e,n.orientation,n.mirror)[t];return null==i?{x:r.left,y:0}:{x:r.left,y:i}}})(e,r)));if(null==u||null==f)return null;var{dangerouslySetInnerHTML:d,ticks:p}=e,h=lM(e,iM);return t.createElement(qj,oM({},h,{scale:c,x:f.x,y:f.y,width:u.width,height:u.height,className:n("recharts-".concat(l," ").concat(l),i),viewBox:a,ticks:s}))},uM=e=>{var r,n,i,a,o;return t.createElement(cM,{interval:null!==(r=e.interval)&&void 0!==r?r:"preserveEnd",id:e.xAxisId,scale:e.scale,type:e.type,padding:e.padding,allowDataOverflow:e.allowDataOverflow,domain:e.domain,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,includeHidden:null!==(n=e.includeHidden)&&void 0!==n&&n,reversed:e.reversed,ticks:e.ticks,height:e.height,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:null!==(i=e.angle)&&void 0!==i?i:0,minTickGap:null!==(a=e.minTickGap)&&void 0!==a?a:5,tick:null===(o=e.tick)||void 0===o||o,tickFormatter:e.tickFormatter},t.createElement(sM,e))};class fM extends t.Component{render(){return t.createElement(uM,this.props)}}aM(fM,"displayName","XAxis"),aM(fM,"defaultProps",{allowDataOverflow:Eh.allowDataOverflow,allowDecimals:Eh.allowDecimals,allowDuplicatedCategory:Eh.allowDuplicatedCategory,height:Eh.height,hide:!1,mirror:Eh.mirror,orientation:Eh.orientation,padding:Eh.padding,reversed:Eh.reversed,scale:Eh.scale,tickCount:Eh.tickCount,type:Eh.type,xAxisId:0});var dM=["dangerouslySetInnerHTML","ticks"];function pM(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function hM(){return hM=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},hM.apply(null,arguments)}function yM(e){var r=Ue();return(0,t.useEffect)((()=>(r(Ek(e)),()=>{r(Ak(e))})),[e,r]),null}var vM=e=>{var r,{yAxisId:i,className:a,width:o,label:l}=e,c=(0,t.useRef)(null),s=(0,t.useRef)(null),u=He(Bi),f=Wi(),d=Ue(),p="yAxis",h=He((e=>Xy(e,p,i,f))),y=He((e=>ev(e,i))),v=He((e=>((e,t)=>{var r=Ki(e),n=Sh(e,t);if(null!=n){var i=Qy(e,n.orientation,n.mirror)[t];return null==i?{x:0,y:r.top}:{x:i,y:r.top}}})(e,i))),m=He((e=>cv(e,p,i,f)));if((0,t.useLayoutEffect)((()=>{var e;if("auto"===o&&y&&!jb(l)&&!(0,t.isValidElement)(l)){var r=c.current,n=null==r||null===(e=r.tickRefs)||void 0===e?void 0:e.current,{tickSize:a,tickMargin:u}=r.props,f=(e=>{var{ticks:t,label:r,labelGapWithTick:n=5,tickSize:i=0,tickMargin:a=0}=e,o=0;if(t){t.forEach((e=>{if(e){var t=e.getBoundingClientRect();t.width>o&&(o=t.width)}}));var l=r?r.getBoundingClientRect().width:0,c=o+(i+a)+l+(r?n:0);return Math.round(c)}return 0})({ticks:n,label:s.current,labelGapWithTick:5,tickSize:a,tickMargin:u});Math.round(y.width)!==Math.round(f)&&d(kk({id:i,width:f}))}}),[c,null==c||null===(r=c.current)||void 0===r||null===(r=r.tickRefs)||void 0===r?void 0:r.current,null==y?void 0:y.width,y,d,l,i,o]),null==y||null==v)return null;var{dangerouslySetInnerHTML:g,ticks:b}=e,x=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,dM);return t.createElement(qj,hM({},x,{ref:c,labelRef:s,scale:h,x:v.x,y:v.y,width:y.width,height:y.height,className:n("recharts-".concat(p," ").concat(p),a),viewBox:u,ticks:m}))},mM=e=>{var r,n,i,a,o;return t.createElement(t.Fragment,null,t.createElement(yM,{interval:null!==(r=e.interval)&&void 0!==r?r:"preserveEnd",id:e.yAxisId,scale:e.scale,type:e.type,domain:e.domain,allowDataOverflow:e.allowDataOverflow,dataKey:e.dataKey,allowDuplicatedCategory:e.allowDuplicatedCategory,allowDecimals:e.allowDecimals,tickCount:e.tickCount,padding:e.padding,includeHidden:null!==(n=e.includeHidden)&&void 0!==n&&n,reversed:e.reversed,ticks:e.ticks,width:e.width,orientation:e.orientation,mirror:e.mirror,hide:e.hide,unit:e.unit,name:e.name,angle:null!==(i=e.angle)&&void 0!==i?i:0,minTickGap:null!==(a=e.minTickGap)&&void 0!==a?a:5,tick:null===(o=e.tick)||void 0===o||o,tickFormatter:e.tickFormatter}),t.createElement(vM,e))},gM={allowDataOverflow:jh.allowDataOverflow,allowDecimals:jh.allowDecimals,allowDuplicatedCategory:jh.allowDuplicatedCategory,hide:!1,mirror:jh.mirror,orientation:jh.orientation,padding:jh.padding,reversed:jh.reversed,scale:jh.scale,tickCount:jh.tickCount,type:jh.type,width:jh.width,yAxisId:0};class bM extends t.Component{render(){return t.createElement(mM,this.props)}}pM(bM,"displayName","YAxis"),pM(bM,"defaultProps",gM);var xM={begin:0,duration:1e3,easing:"ease",isActive:!0,canBegin:!0,onAnimationEnd:()=>{},onAnimationStart:()=>{}};function wM(e){var r=pl(e,xM),{from:n,to:i,attributeName:a,isActive:o,canBegin:l,duration:c,easing:s,begin:u,onAnimationEnd:f,onAnimationStart:d,children:p}=r,h=Kl(a,r.animationManager),[y,v]=(0,t.useState)(o?n:i);return(0,t.useEffect)((()=>{o||v(i)}),[o,i]),(0,t.useEffect)((()=>{if(!o||!l)return rO;var e=h.subscribe(v);return h.start([d,u,i,c,f]),()=>{h.stop(),e&&e(),f()}}),[o,l,c,s,u,d,f,h,i]),p(o&&l?{transition:Al([a],c,s),[a]:y}:{[a]:y})}var OM=["direction","width","dataKey","isAnimationActive","animationBegin","animationDuration","animationEasing"];function PM(){return PM=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},PM.apply(null,arguments)}function EM(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function AM(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?EM(Object(r),!0).forEach((function(t){jM(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):EM(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function jM(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function SM(e){var{direction:r,width:n,dataKey:i,isAnimationActive:a,animationBegin:o,animationDuration:l,animationEasing:c}=e,s=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,OM),u=C(s),{data:f,dataPointFormatter:d,xAxisId:p,yAxisId:h,errorBarOffset:y}=(0,t.useContext)(KP),v=(e=>{var t=Wi();return He((r=>fv(r,"xAxis",e,t)))})(p),m=(e=>{var t=Wi();return He((r=>fv(r,"yAxis",e,t)))})(h);if(null==(null==v?void 0:v.scale)||null==(null==m?void 0:m.scale)||null==f)return null;if("x"===r&&"number"!==v.type)return null;var g=f.map((e=>{var{x:s,y:f,value:p,errorVal:h}=d(e,i,r);if(!h||null==s||null==f)return null;var g,b,x=[];if(Array.isArray(h)?[g,b]=h:g=b=h,"x"===r){var{scale:w}=v,O=f+y,P=O+n,E=O-n,A=w(p-g),j=w(p+b);x.push({x1:j,y1:P,x2:j,y2:E}),x.push({x1:A,y1:O,x2:j,y2:O}),x.push({x1:A,y1:P,x2:A,y2:E})}else if("y"===r){var{scale:S}=m,k=s+y,M=k-n,T=k+n,D=S(p-g),C=S(p+b);x.push({x1:M,y1:C,x2:T,y2:C}),x.push({x1:k,y1:D,x2:k,y2:C}),x.push({x1:M,y1:D,x2:T,y2:D})}var I="x"===r?"scaleX":"scaleY",N="".concat(s+y,"px ").concat(f+y,"px");return t.createElement(V,PM({className:"recharts-errorBar",key:"bar-".concat(x.map((e=>"".concat(e.x1,"-").concat(e.x2,"-").concat(e.y1,"-").concat(e.y2))))},u),x.map((e=>{var r=a?{transformOrigin:N}:void 0;return t.createElement(wM,{from:"".concat(I,"(0)"),to:"".concat(I,"(1)"),attributeName:"transform",begin:o,easing:c,isActive:a,duration:l,key:"line-".concat(e.x1,"-").concat(e.x2,"-").concat(e.y1,"-").concat(e.y2)},(n=>t.createElement("line",PM({},e,{style:AM(AM({},r),n)}))))})))}));return t.createElement(V,{className:"recharts-errorBars"},g)}var kM={stroke:"black",strokeWidth:1.5,width:5,offset:0,isAnimationActive:!0,animationBegin:0,animationDuration:400,animationEasing:"ease-in-out"};function MM(e){var r,n,i=(r=e.direction,n=Qi(),null!=r?r:null!=n&&"horizontal"===n?"y":"x"),{width:a,isAnimationActive:o,animationBegin:l,animationDuration:c,animationEasing:s}=pl(e,kM);return t.createElement(t.Fragment,null,t.createElement(BP,{dataKey:e.dataKey,direction:i}),t.createElement(SM,PM({},e,{direction:i,width:a,isAnimationActive:o,animationBegin:l,animationDuration:c,animationEasing:s})))}class TM extends t.Component{render(){return t.createElement(MM,this.props)}}jM(TM,"defaultProps",kM),jM(TM,"displayName","ErrorBar");var DM=a(9888);let CM=function(e){e()};const IM=()=>CM,NM=Symbol.for("react-redux-context"),_M="undefined"!=typeof globalThis?globalThis:{};function LM(){var e;if(!t.createContext)return{};const r=null!=(e=_M[NM])?e:_M[NM]=new Map;let n=r.get(t.createContext);return n||(n=t.createContext(null),r.set(t.createContext,n)),n}const RM=LM();let KM=null;a(4146);const zM={notify(){},get:()=>[]};function BM(e,t){let r,n=zM,i=0,a=!1;function o(){s.onStateChange&&s.onStateChange()}function l(){i++,r||(r=t?t.addNestedSub(o):e.subscribe(o),n=function(){const e=IM();let t=null,r=null;return{clear(){t=null,r=null},notify(){e((()=>{let e=t;for(;e;)e.callback(),e=e.next}))},get(){let e=[],r=t;for(;r;)e.push(r),r=r.next;return e},subscribe(e){let n=!0,i=r={callback:e,next:null,prev:r};return i.prev?i.prev.next=i:t=i,function(){n&&null!==t&&(n=!1,i.next?i.next.prev=i.prev:r=i.prev,i.prev?i.prev.next=i.next:t=i.next)}}}}())}function c(){i--,r&&0===i&&(r(),r=void 0,n.clear(),n=zM)}const s={addNestedSub:function(e){l();const t=n.subscribe(e);let r=!1;return()=>{r||(r=!0,t(),c())}},notifyNestedSubs:function(){n.notify()},handleChangeWrapper:o,isSubscribed:function(){return a},trySubscribe:function(){a||(a=!0,l())},tryUnsubscribe:function(){a&&(a=!1,c())},getListeners:()=>n};return s}const FM=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement)?t.useLayoutEffect:t.useEffect;let WM=null;const UM=function({store:e,context:r,children:n,serverState:i,stabilityCheck:a="once",noopCheck:o="once"}){const l=t.useMemo((()=>{const t=BM(e);return{store:e,subscription:t,getServerState:i?()=>i:void 0,stabilityCheck:a,noopCheck:o}}),[e,i,a,o]),c=t.useMemo((()=>e.getState()),[e]);FM((()=>{const{subscription:t}=l;return t.onStateChange=t.notifyNestedSubs,t.trySubscribe(),c!==e.getState()&&t.notifyNestedSubs(),()=>{t.tryUnsubscribe(),t.onStateChange=void 0}}),[l,c]);const s=r||RM;return t.createElement(s.Provider,{value:l},n)};var XM;(e=>{KM=e})(Be.useSyncExternalStoreWithSelector),(e=>{WM=e})(DM.useSyncExternalStore),XM=$.unstable_batchedUpdates,CM=XM;var VM=et([(e,t)=>t,Ji,fh,yh,xm,Em,$m,Ki],((e,t,r,n,i,a,o,l)=>{if(e&&t&&n&&i&&a){var c=function(e,t,r,n,i){return"horizontal"===r||"vertical"===r?e>=i.left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height?{x:e,y:t}:null:n?ri({x:e,y:t},n):null}(e.chartX,e.chartY,t,r,l);if(c){var u=((e,t)=>"horizontal"===t?e.x:"vertical"===t?e.y:"centric"===t?e.angle:e.radius)(c,t),f=((e,t,r,n,i)=>{var a,o=-1,l=null!==(a=null==t?void 0:t.length)&&void 0!==a?a:0;if(l<=1||null==e)return 0;if("angleAxis"===n&&null!=i&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var c=0;c<l;c++){var u=c>0?r[c-1].coordinate:r[l-1].coordinate,f=r[c].coordinate,d=c>=l-1?r[0].coordinate:r[c+1].coordinate,p=void 0;if(s(f-u)!==s(d-f)){var h=[];if(s(d-f)===s(i[1]-i[0])){p=d;var y=f+i[1]-i[0];h[0]=Math.min(y,(y+u)/2),h[1]=Math.max(y,(y+u)/2)}else{p=u;var v=d+i[1]-i[0];h[0]=Math.min(f,(v+f)/2),h[1]=Math.max(f,(v+f)/2)}var m=[Math.min(f,(p+f)/2),Math.max(f,(p+f)/2)];if(e>m[0]&&e<=m[1]||e>=h[0]&&e<=h[1]){({index:o}=r[c]);break}}else{var g=Math.min(u,d),b=Math.max(u,d);if(e>(g+f)/2&&e<=(b+f)/2){({index:o}=r[c]);break}}}else if(t)for(var x=0;x<l;x++)if(0===x&&e<=(t[x].coordinate+t[x+1].coordinate)/2||x>0&&x<l-1&&e>(t[x].coordinate+t[x-1].coordinate)/2&&e<=(t[x].coordinate+t[x+1].coordinate)/2||x===l-1&&e>(t[x].coordinate+t[x-1].coordinate)/2){({index:o}=t[x]);break}return o})(u,o,a,n,i),d=((e,t,r,n)=>{var i=t.find((e=>e&&e.index===r));if(i){if("horizontal"===e)return{x:i.coordinate,y:n.y};if("vertical"===e)return{x:n.x,y:i.coordinate};if("centric"===e){var a=i.coordinate,{radius:o}=n;return oi(oi(oi({},n),Jn(n.cx,n.cy,o,a)),{},{angle:a,radius:o})}var l=i.coordinate,{angle:c}=n;return oi(oi(oi({},n),Jn(n.cx,n.cy,l,c)),{},{angle:c,radius:l})}return{x:0,y:0}})(t,a,f,c);return{activeIndex:String(f),activeCoordinate:d}}}})),$M=e=>{var t=e.currentTarget.getBoundingClientRect(),r=t.width/e.currentTarget.offsetWidth,n=t.height/e.currentTarget.offsetHeight;return{chartX:Math.round((e.clientX-t.left)/r),chartY:Math.round((e.clientY-t.top)/n)}},HM=Wr("mouseClick"),qM=In();qM.startListening({actionCreator:HM,effect:(e,t)=>{var r=e.payload,n=VM(t.getState(),$M(r));null!=(null==n?void 0:n.activeIndex)&&t.dispatch(Tv({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var YM=Wr("mouseMove"),GM=In();function ZM(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":t}GM.startListening({actionCreator:YM,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=gv(n,n.tooltip.settings.shared),a=VM(n,$M(r));"axis"===i&&(null!=(null==a?void 0:a.activeIndex)?t.dispatch(Mv({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate})):t.dispatch(Sv()))}});var JM={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index"},QM=Gr({name:"rootProps",initialState:JM,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=null!==(r=t.payload.barGap)&&void 0!==r?r:JM.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className}}}),eT=QM.reducer,{updateOptions:tT}=QM.actions,rT=Gr({name:"polarOptions",initialState:null,reducers:{updatePolarOptions:(e,t)=>t.payload}}),{updatePolarOptions:nT}=rT.actions,iT=rT.reducer,aT=Wr("keyDown"),oT=Wr("focus"),lT=In();lT.startListening({actionCreator:aT,effect:(e,t)=>{var r=t.getState();if(!1!==r.rootProps.accessibilityLayer){var{keyboardInteraction:n}=r.tooltip,i=e.payload;if("ArrowRight"===i||"ArrowLeft"===i||"Enter"===i){var a=Number(Kv(n,Qv(r))),o=Em(r);if("Enter"!==i){var l=a+("ArrowRight"===i?1:-1)*("left-to-right"===hv(r)?1:-1);if(!(null==o||l>=o.length||l<0)){var c=Zm(r,"axis","hover",String(l));t.dispatch(Cv({active:!0,activeIndex:l.toString(),activeDataKey:void 0,activeCoordinate:c}))}}else{var s=Zm(r,"axis","hover",String(n.index));t.dispatch(Cv({active:!n.active,activeIndex:n.index,activeDataKey:n.dataKey,activeCoordinate:s}))}}}}}),lT.startListening({actionCreator:oT,effect:(e,t)=>{var r=t.getState();if(!1!==r.rootProps.accessibilityLayer){var{keyboardInteraction:n}=r.tooltip;if(!n.active&&null==n.index){var i=Zm(r,"axis","hover",String("0"));t.dispatch(Cv({activeDataKey:void 0,active:!0,activeIndex:"0",activeCoordinate:i}))}}}});var cT=Wr("externalEvent"),sT=In();sT.startListening({actionCreator:cT,effect:(e,t)=>{if(null!=e.payload.handler){var r=t.getState(),n={activeCoordinate:Nm(r),activeDataKey:Dm(r),activeIndex:Mm(r),activeLabel:Tm(r),activeTooltipIndex:Mm(r),isTooltipActive:_m(r)};e.payload.handler(n,e.payload.reactEvent)}}});var uT=et([Wv],(e=>e.tooltipItemPayloads)),fT=et([uT,Fv,(e,t,r)=>t,(e,t,r)=>r],((e,t,r,n)=>{var i=e.find((e=>e.settings.dataKey===n));if(null!=i){var{positions:a}=i;if(null!=a)return t(a,r)}})),dT=Wr("touchMove"),pT=In();pT.startListening({actionCreator:dT,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=gv(n,n.tooltip.settings.shared);if("axis"===i){var a=VM(n,$M({clientX:r.touches[0].clientX,clientY:r.touches[0].clientY,currentTarget:r.currentTarget}));null!=(null==a?void 0:a.activeIndex)&&t.dispatch(Mv({activeIndex:a.activeIndex,activeDataKey:void 0,activeCoordinate:a.activeCoordinate}))}else if("item"===i){var o,l=r.touches[0],c=document.elementFromPoint(l.clientX,l.clientY);if(!c||!c.getAttribute)return;var s=c.getAttribute(Ii),u=null!==(o=c.getAttribute(Ni))&&void 0!==o?o:void 0,f=fT(t.getState(),s,u);t.dispatch(Av({activeDataKey:u,activeIndex:s,activeCoordinate:f}))}}});var hT=xr({brush:AA,cartesianAxis:Mk,chartData:Og,errorBars:NP,graphicalItems:Qw,layout:Fn,legend:Ya,options:yg,polarAxis:zx,polarOptions:iT,referenceElements:aj,rootProps:eT,tooltip:Iv}),yT=function(e){return qr({reducer:hT,preloadedState:e,middleware:e=>e({serializableCheck:!1}).concat([qM.middleware,GM.middleware,lT.middleware,sT.middleware,pT.middleware]),devTools:{serialize:{replacer:ZM},name:"recharts-".concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Chart")}})};function vT(e){var{preloadedState:r,children:n,reduxStoreName:i}=e,a=Wi(),o=(0,t.useRef)(null);if(a)return n;null==o.current&&(o.current=yT(r,i));var l=Fe;return t.createElement(UM,{context:l,store:o.current},n)}function mT(e){var{layout:r,width:n,height:i,margin:a}=e,o=Ue(),l=Wi();return(0,t.useEffect)((()=>{l||(o(Kn(r)),o(zn({width:n,height:i})),o(Rn(a)))}),[o,l,r,n,i,a]),null}function gT(e){var r=Ue();return(0,t.useEffect)((()=>{r(tT(e))}),[r,e]),null}var bT=["children"];function xT(){return xT=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},xT.apply(null,arguments)}var wT={width:"100%",height:"100%"},OT=(0,t.forwardRef)(((e,r)=>{var n=Yi(),i=Gi(),a=Po();if(!qo(n)||!qo(i))return null;var o,l,{children:c,otherAttributes:s,title:u,desc:f}=e;return o="number"==typeof s.tabIndex?s.tabIndex:a?0:void 0,l="string"==typeof s.role?s.role:a?"application":void 0,t.createElement(W,xT({},s,{title:u,desc:f,role:l,tabIndex:o,width:n,height:i,style:wT,ref:r}),c)})),PT=e=>{var{children:r}=e,n=He(Vi);if(!n)return null;var{width:i,height:a,y:o,x:l}=n;return t.createElement(W,{width:i,height:a,x:l,y:o},r)},ET=(0,t.forwardRef)(((e,r)=>{var{children:n}=e,i=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,bT);return Wi()?t.createElement(PT,null,n):t.createElement(OT,xT({ref:r},i),n)}));function AT(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function jT(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?AT(Object(r),!0).forEach((function(t){ST(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):AT(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function ST(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var kT=(0,t.forwardRef)(((e,r)=>{var{children:i,className:a,height:o,onClick:l,onContextMenu:c,onDoubleClick:s,onMouseDown:u,onMouseEnter:f,onMouseLeave:d,onMouseMove:p,onMouseUp:h,onTouchEnd:y,onTouchMove:v,onTouchStart:m,style:g,width:b}=e,x=Ue(),[w,O]=(0,t.useState)(null),[P,E]=(0,t.useState)(null);Eg();var A=function(){var e=Ue(),[r,n]=(0,t.useState)(null),i=He(ki);return(0,t.useEffect)((()=>{if(null!=r){var t=r.getBoundingClientRect().width/r.offsetWidth;Ho(t)&&t!==i&&e(Bn(t))}}),[r,e,i]),n}(),j=(0,t.useCallback)((e=>{A(e),"function"==typeof r&&r(e),O(e),E(e)}),[A,r,O,E]),S=(0,t.useCallback)((e=>{x(HM(e)),x(cT({handler:l,reactEvent:e}))}),[x,l]),k=(0,t.useCallback)((e=>{x(YM(e)),x(cT({handler:f,reactEvent:e}))}),[x,f]),M=(0,t.useCallback)((e=>{x(Sv()),x(cT({handler:d,reactEvent:e}))}),[x,d]),T=(0,t.useCallback)((e=>{x(YM(e)),x(cT({handler:p,reactEvent:e}))}),[x,p]),D=(0,t.useCallback)((()=>{x(oT())}),[x]),C=(0,t.useCallback)((e=>{x(aT(e.key))}),[x]),I=(0,t.useCallback)((e=>{x(cT({handler:c,reactEvent:e}))}),[x,c]),N=(0,t.useCallback)((e=>{x(cT({handler:s,reactEvent:e}))}),[x,s]),_=(0,t.useCallback)((e=>{x(cT({handler:u,reactEvent:e}))}),[x,u]),L=(0,t.useCallback)((e=>{x(cT({handler:h,reactEvent:e}))}),[x,h]),R=(0,t.useCallback)((e=>{x(cT({handler:m,reactEvent:e}))}),[x,m]),K=(0,t.useCallback)((e=>{x(dT(e)),x(cT({handler:v,reactEvent:e}))}),[x,v]),z=(0,t.useCallback)((e=>{x(cT({handler:y,reactEvent:e}))}),[x,y]);return t.createElement(cg.Provider,{value:w},t.createElement(H.Provider,{value:P},t.createElement("div",{className:n("recharts-wrapper",a),style:jT({position:"relative",cursor:"default",width:b,height:o},g),onClick:S,onContextMenu:I,onDoubleClick:N,onFocus:D,onKeyDown:C,onMouseDown:_,onMouseEnter:k,onMouseLeave:M,onMouseMove:T,onMouseUp:L,onTouchEnd:z,onTouchMove:K,onTouchStart:R,ref:j},i)))})),MT=["children","className","width","height","style","compact","title","desc"];var TT=(0,t.forwardRef)(((e,r)=>{var{children:n,className:i,width:a,height:o,style:l,compact:c,title:s,desc:u}=e,f=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,MT),d=C(f);return c?t.createElement(ET,{otherAttributes:d,title:s,desc:u},n):t.createElement(kT,{className:i,style:l,width:a,height:o,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},t.createElement(ET,{otherAttributes:d,title:s,desc:u,ref:r},t.createElement(lj,null,n)))})),DT=["width","height"];function CT(){return CT=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},CT.apply(null,arguments)}var IT={accessibilityLayer:!0,layout:"horizontal",stackOffset:"none",barCategoryGap:"10%",barGap:4,margin:{top:5,right:5,bottom:5,left:5},reverseStackOrder:!1,syncMethod:"index"},NT=(0,t.forwardRef)((function(e,r){var n,i=pl(e.categoricalChartProps,IT),{width:a,height:o}=i,l=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(i,DT);if(!qo(a)||!qo(o))return null;var{chartName:c,defaultTooltipEventType:s,validateTooltipEventTypes:u,tooltipPayloadSearcher:f,categoricalChartProps:d}=e,p={chartName:c,defaultTooltipEventType:s,validateTooltipEventTypes:u,tooltipPayloadSearcher:f,eventEmitter:void 0};return t.createElement(vT,{preloadedState:{options:p},reduxStoreName:null!==(n=d.id)&&void 0!==n?n:c},t.createElement(yA,{chartData:d.data}),t.createElement(mT,{width:a,height:o,layout:i.layout,margin:i.margin}),t.createElement(gT,{accessibilityLayer:i.accessibilityLayer,barCategoryGap:i.barCategoryGap,maxBarSize:i.maxBarSize,stackOffset:i.stackOffset,barGap:i.barGap,barSize:i.barSize,syncId:i.syncId,syncMethod:i.syncMethod,className:i.className}),t.createElement(TT,CT({},l,{width:a,height:o,ref:r})))})),_T=["axis"],LT=(0,t.forwardRef)(((e,r)=>t.createElement(NT,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:_T,tooltipPayloadSearcher:pg,categoricalChartProps:e,ref:r}))),RT=["axis","item"],KT=(0,t.forwardRef)(((e,r)=>t.createElement(NT,{chartName:"BarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:RT,tooltipPayloadSearcher:pg,categoricalChartProps:e,ref:r})));function zT(e){var r=Ue();return(0,t.useEffect)((()=>{r(nT(e))}),[r,e]),null}var BT=["width","height","layout"];function FT(){return FT=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},FT.apply(null,arguments)}var WT={accessibilityLayer:!0,stackOffset:"none",barCategoryGap:"10%",barGap:4,margin:{top:5,right:5,bottom:5,left:5},reverseStackOrder:!1,syncMethod:"index",layout:"radial"},UT=(0,t.forwardRef)((function(e,r){var n,i=pl(e.categoricalChartProps,WT),{width:a,height:o,layout:l}=i,c=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(i,BT);if(!qo(a)||!qo(o))return null;var{chartName:s,defaultTooltipEventType:u,validateTooltipEventTypes:f,tooltipPayloadSearcher:d}=e,p={chartName:s,defaultTooltipEventType:u,validateTooltipEventTypes:f,tooltipPayloadSearcher:d,eventEmitter:void 0};return t.createElement(vT,{preloadedState:{options:p},reduxStoreName:null!==(n=i.id)&&void 0!==n?n:s},t.createElement(yA,{chartData:i.data}),t.createElement(mT,{width:a,height:o,layout:l,margin:i.margin}),t.createElement(gT,{accessibilityLayer:i.accessibilityLayer,barCategoryGap:i.barCategoryGap,maxBarSize:i.maxBarSize,stackOffset:i.stackOffset,barGap:i.barGap,barSize:i.barSize,syncId:i.syncId,syncMethod:i.syncMethod,className:i.className}),t.createElement(zT,{cx:i.cx,cy:i.cy,startAngle:i.startAngle,endAngle:i.endAngle,innerRadius:i.innerRadius,outerRadius:i.outerRadius}),t.createElement(TT,FT({width:a,height:o},c,{ref:r})))})),XT=["item"],VT={layout:"centric",startAngle:0,endAngle:360,cx:"50%",cy:"50%",innerRadius:0,outerRadius:"80%"},$T=(0,t.forwardRef)(((e,r)=>{var n=pl(e,VT);return t.createElement(UT,{chartName:"PieChart",defaultTooltipEventType:"item",validateTooltipEventTypes:XT,tooltipPayloadSearcher:pg,categoricalChartProps:n,ref:r})})),HT=a(1576),qT=a.n(HT),YT=["width","height","className","style","children","type"];function GT(){return GT=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},GT.apply(null,arguments)}function ZT(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function JT(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ZT(Object(r),!0).forEach((function(t){QT(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ZT(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function QT(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var eD="value",tD=(e,t)=>l()(e,t),rD={chartName:"Treemap",defaultTooltipEventType:"item",validateTooltipEventTypes:["item"],tooltipPayloadSearcher:tD,eventEmitter:void 0},nD=e=>{var t,{depth:r,node:n,index:i,dataKey:a,nameKey:o,nestedActiveTooltipIndex:l}=e,c=0===r?"":function(e){return"".concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"","children[").concat(e,"]")}(i,l),{children:s}=n,f=r+1,d=s&&s.length?s.map(((e,t)=>nD({depth:f,node:e,index:t,dataKey:a,nameKey:o,nestedActiveTooltipIndex:c}))):null;return t=s&&s.length?d.reduce(((e,t)=>e+t[eD]),0):u(n[a])||n[a]<=0?0:n[a],JT(JT({},n),{},{children:d,name:ci(n,o,""),[eD]:t,depth:r,index:i,tooltipIndex:c})},iD=(e,t,r)=>{var n=t*t,i=e.area*e.area,{min:a,max:o}=e.reduce(((e,t)=>({min:Math.min(e.min,t.area),max:Math.max(e.max,t.area)})),{min:1/0,max:0});return i?Math.max(n*o*r/i,i/(n*a*r)):1/0},aD=(e,t,r,n)=>t===r.width?((e,t,r,n)=>{var i=t?Math.round(e.area/t):0;(n||i>r.height)&&(i=r.height);for(var a,o=r.x,l=0,c=e.length;l<c;l++)(a=e[l]).x=o,a.y=r.y,a.height=i,a.width=Math.min(i?Math.round(a.area/i):0,r.x+r.width-o),o+=a.width;return a.width+=r.x+r.width-o,JT(JT({},r),{},{y:r.y+i,height:r.height-i})})(e,t,r,n):((e,t,r,n)=>{var i=t?Math.round(e.area/t):0;(n||i>r.width)&&(i=r.width);for(var a,o=r.y,l=0,c=e.length;l<c;l++)(a=e[l]).x=r.x,a.y=o,a.width=i,a.height=Math.min(i?Math.round(a.area/i):0,r.y+r.height-o),o+=a.height;return a&&(a.height+=r.y+r.height-o),JT(JT({},r),{},{x:r.x+i,width:r.width-i})})(e,t,r,n),oD=(e,t)=>{var{children:r}=e;if(r&&r.length){var n,i,a=(e=>({x:e.x,y:e.y,width:e.width,height:e.height}))(e),o=[],l=1/0,c=Math.min(a.width,a.height),s=((e,t)=>{var r=t<0?0:t;return e.map((e=>{var t=e[eD]*r;return JT(JT({},e),{},{area:u(t)||t<=0?0:t})}))})(r,a.width*a.height/e[eD]),f=s.slice();for(o.area=0;f.length>0;)o.push(n=f[0]),o.area+=n.area,(i=iD(o,c,t))<=l?(f.shift(),l=i):(o.area-=o.pop().area,a=aD(o,c,a,!1),c=Math.min(a.width,a.height),o.length=o.area=0,l=1/0);return o.length&&(a=aD(o,c,a,!0),o.length=o.area=0),JT(JT({},e),{},{children:s.map((e=>oD(e,t)))})}return e},lD={isAnimationFinished:!1,formatRoot:null,currentRoot:null,nestIndex:[]};function cD(e){var{content:r,nodeProps:n,type:i,colorPanel:a,onMouseEnter:o,onMouseLeave:l,onClick:c}=e;if(t.isValidElement(r))return t.createElement(V,{onMouseEnter:o,onMouseLeave:l,onClick:c},t.cloneElement(r,n));if("function"==typeof r)return t.createElement(V,{onMouseEnter:o,onMouseLeave:l,onClick:c},r(n));var{x:s,y:u,width:f,height:d,index:p}=n,h=null;f>10&&d>10&&n.children&&"nest"===i&&(h=t.createElement(Gb,{points:[{x:s+2,y:u+d/2},{x:s+6,y:u+d/2+3},{x:s+2,y:u+d/2+6}]}));var y=null,v=Yg(n.name);f>20&&d>20&&v.width<f&&v.height<d&&(y=t.createElement("text",{x:s+8,y:u+d/2+7,fontSize:14},n.name));var m=a||Ci;return t.createElement("g",null,t.createElement(Yl,GT({fill:n.depth<2?m[p%m.length]:"rgba(255,255,255,0)",stroke:"#fff"},qT()(n,["children"]),{onMouseEnter:o,onMouseLeave:l,onClick:c,"data-recharts-item-index":n.tooltipIndex})),h,y)}function sD(e){var r=Ue(),n=e.nodeProps?{x:e.nodeProps.x+e.nodeProps.width/2,y:e.nodeProps.y+e.nodeProps.height/2}:null;return t.createElement(cD,GT({},e,{onMouseEnter:()=>{r(Av({activeIndex:e.nodeProps.tooltipIndex,activeDataKey:e.dataKey,activeCoordinate:n}))},onMouseLeave:()=>{},onClick:()=>{r(kv({activeIndex:e.nodeProps.tooltipIndex,activeDataKey:e.dataKey,activeCoordinate:n}))}}))}function uD(e){var{props:t,currentRoot:r}=e,{dataKey:n,nameKey:i,stroke:a,fill:o}=t;return{dataDefinedOnItem:r,positions:void 0,settings:{stroke:a,strokeWidth:void 0,fill:o,dataKey:n,nameKey:i,name:void 0,hide:!1,type:void 0,color:o,unit:""}}}var fD={top:0,right:0,bottom:0,left:0};class dD extends t.PureComponent{constructor(){super(...arguments),QT(this,"state",JT({},lD)),QT(this,"handleAnimationEnd",(()=>{var{onAnimationEnd:e}=this.props;this.setState({isAnimationFinished:!0}),"function"==typeof e&&e()})),QT(this,"handleAnimationStart",(()=>{var{onAnimationStart:e}=this.props;this.setState({isAnimationFinished:!1}),"function"==typeof e&&e()})),QT(this,"handleTouchMove",((e,t)=>{var r=t.touches[0],n=document.elementFromPoint(r.clientX,r.clientY);if(n&&n.getAttribute){var i=n.getAttribute("data-recharts-item-index"),a=tD(this.state.formatRoot,i);if(a){var{dataKey:o,dispatch:l}=this.props,c={x:a.x+a.width/2,y:a.y+a.height/2};l(Av({activeIndex:i,activeDataKey:o,activeCoordinate:c}))}}}))}static getDerivedStateFromProps(e,t){if(e.data!==t.prevData||e.type!==t.prevType||e.width!==t.prevWidth||e.height!==t.prevHeight||e.dataKey!==t.prevDataKey||e.aspectRatio!==t.prevAspectRatio){var r=nD({depth:0,node:{children:e.data,x:0,y:0,width:e.width,height:e.height},index:0,dataKey:e.dataKey,nameKey:e.nameKey}),n=oD(r,e.aspectRatio);return JT(JT({},t),{},{formatRoot:n,currentRoot:r,nestIndex:[r],prevAspectRatio:e.aspectRatio,prevData:e.data,prevWidth:e.width,prevHeight:e.height,prevDataKey:e.dataKey,prevType:e.type})}return null}handleMouseEnter(e,t){t.persist();var{onMouseEnter:r}=this.props;r&&r(e,t)}handleMouseLeave(e,t){t.persist();var{onMouseLeave:r}=this.props;r&&r(e,t)}handleClick(e){var{onClick:t,type:r}=this.props;if("nest"===r&&e.children){var{width:n,height:i,dataKey:a,nameKey:o,aspectRatio:l}=this.props,c=nD({depth:0,node:JT(JT({},e),{},{x:0,y:0,width:n,height:i}),index:0,dataKey:a,nameKey:o,nestedActiveTooltipIndex:e.tooltipIndex}),s=oD(c,l),{nestIndex:u}=this.state;u.push(e),this.setState({formatRoot:s,currentRoot:c,nestIndex:u})}t&&t(e)}handleNestIndex(e,t){var{nestIndex:r}=this.state,{width:n,height:i,dataKey:a,nameKey:o,aspectRatio:l}=this.props,c=nD({depth:0,node:JT(JT({},e),{},{x:0,y:0,width:n,height:i}),index:0,dataKey:a,nameKey:o,nestedActiveTooltipIndex:e.tooltipIndex}),s=oD(c,l);r=r.slice(0,t+1),this.setState({formatRoot:s,currentRoot:e,nestIndex:r})}renderItem(e,r,n){var{isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:l,isUpdateAnimationActive:c,type:s,colorPanel:u,dataKey:f}=this.props,{isAnimationFinished:d}=this.state,{width:p,height:h,x:y,y:v,depth:m}=r,g=parseInt("".concat((2*Math.random()-1)*p),10),b={};return(n||"nest"===s)&&(b={onMouseEnter:this.handleMouseEnter.bind(this,r),onMouseLeave:this.handleMouseLeave.bind(this,r),onClick:this.handleClick.bind(this,r)}),i?t.createElement(wM,{from:"translate(".concat(g,"px, ").concat(g,"px)"),to:"translate(0, 0)",attributeName:"transform",begin:a,easing:l,isActive:i,duration:o,onAnimationStart:this.handleAnimationStart,onAnimationEnd:this.handleAnimationEnd},(n=>t.createElement(V,GT({},b,{style:n}),m>2&&!d?null:t.createElement(sD,{content:e,dataKey:f,nodeProps:JT(JT({},r),{},{isAnimationActive:i,isUpdateAnimationActive:!c,width:p,height:h,x:y,y:v}),type:s,colorPanel:u})))):t.createElement(V,b,t.createElement(sD,{content:e,dataKey:f,nodeProps:JT(JT({},r),{},{isAnimationActive:!1,isUpdateAnimationActive:!1,width:p,height:h,x:y,y:v}),type:s,colorPanel:u}))}renderNode(e,r){var{content:n,type:i}=this.props,a=JT(JT(JT({},C(this.props)),r),{},{root:e}),o=!r.children||!r.children.length,{currentRoot:l}=this.state;return!(l.children||[]).filter((e=>e.depth===r.depth&&e.name===r.name)).length&&e.depth&&"nest"===i?null:t.createElement(V,{key:"recharts-treemap-node-".concat(a.x,"-").concat(a.y,"-").concat(a.name),className:"recharts-treemap-depth-".concat(r.depth)},this.renderItem(n,a,o),r.children&&r.children.length?r.children.map((e=>this.renderNode(r,e))):null)}renderAllNodes(){var{formatRoot:e}=this.state;return e?this.renderNode(e,e):null}renderNestIndex(){var{nameKey:e,nestIndexContent:r}=this.props,{nestIndex:n}=this.state;return t.createElement("div",{className:"recharts-treemap-nest-index-wrapper",style:{marginTop:"8px",textAlign:"center"}},n.map(((n,i)=>{var a=l()(n,e,"root"),o=null;return t.isValidElement(r)&&(o=t.cloneElement(r,n,i)),o="function"==typeof r?r(n,i):a,t.createElement("div",{onClick:this.handleNestIndex.bind(this,n,i),key:"nest-index-".concat(y()),className:"recharts-treemap-nest-index-box",style:{cursor:"pointer",display:"inline-block",padding:"0 7px",background:"#000",color:"#fff",marginRight:"3px"}},o)})))}render(){var e=this.props,{width:r,height:n,className:i,style:a,children:o,type:l}=e,c=function(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}(e,YT),s=C(c);return t.createElement(cg.Provider,{value:this.state.tooltipPortal},t.createElement(Kw,{fn:uD,args:{props:this.props,currentRoot:this.state.currentRoot}}),t.createElement(kT,{className:i,style:a,width:r,height:n,ref:e=>{null==this.state.tooltipPortal&&this.setState({tooltipPortal:e})},onMouseEnter:void 0,onMouseLeave:void 0,onClick:void 0,onMouseMove:void 0,onMouseDown:void 0,onMouseUp:void 0,onContextMenu:void 0,onDoubleClick:void 0,onTouchStart:void 0,onTouchMove:this.handleTouchMove,onTouchEnd:void 0},t.createElement(W,GT({},s,{width:r,height:"nest"===l?n-30:n}),this.renderAllNodes(),o),"nest"===l&&this.renderNestIndex()))}}function pD(e){var r=Ue();return t.createElement(dD,GT({},e,{dispatch:r}))}function hD(e){var r,{width:n,height:i}=e;return qo(n)&&qo(i)?t.createElement(vT,{preloadedState:{options:rD},reduxStoreName:null!==(r=e.className)&&void 0!==r?r:"Treemap"},t.createElement(ea,{width:n,height:i}),t.createElement(ta,{margin:fD}),t.createElement(pD,e)):null}QT(dD,"displayName","Treemap"),QT(dD,"defaultProps",{aspectRatio:.5*(1+Math.sqrt(5)),dataKey:"value",nameKey:"name",type:"flat",isAnimationActive:!Oo.isSsr,isUpdateAnimationActive:!Oo.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"linear"});var yD=a(2067),vD=a.n(yD),mD=["sourceX","sourceY","sourceControlX","targetX","targetY","targetControlX","linkWidth"],gD=["width","height","className","style","children"];function bD(){return bD=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},bD.apply(null,arguments)}function xD(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function wD(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function OD(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?wD(Object(r),!0).forEach((function(t){PD(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):wD(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function PD(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var ED=e=>e.y+e.dy/2,AD=e=>e&&e.value||0,jD=(e,t)=>t.reduce(((t,r)=>t+AD(e[r])),0),SD=(e,t,r)=>r.reduce(((r,n)=>{var i=t[n],a=e[i.source];return r+ED(a)*AD(t[n])}),0),kD=(e,t,r)=>r.reduce(((r,n)=>{var i=t[n],a=e[i.target];return r+ED(a)*AD(t[n])}),0),MD=(e,t)=>e.y-t.y,TD=(e,t)=>{for(var{targetNodes:r}=t,n=0,i=r.length;n<i;n++){var a=e[r[n]];a&&(a.depth=Math.max(t.depth+1,a.depth),TD(e,a))}},DD=function(e,t,r){for(var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],i=0,a=e.length;i<a;i++){var o=e[i],l=o.length;n&&o.sort(MD);for(var c=0,s=0;s<l;s++){var u=o[s],f=c-u.y;f>0&&(u.y+=f),c=u.y+u.dy+r}c=t+r;for(var d=l-1;d>=0;d--){var p=o[d],h=p.y+p.dy+r-c;if(!(h>0))break;p.y-=h,c=p.y}}},CD=(e,t,r,n)=>{for(var i=0,a=t.length;i<a;i++)for(var o=t[i],l=0,c=o.length;l<c;l++){var s=o[l];if(s.sourceLinks.length){var u=jD(r,s.sourceLinks),f=SD(e,r,s.sourceLinks)/u;s.y+=(f-ED(s))*n}}},ID=(e,t,r,n)=>{for(var i=t.length-1;i>=0;i--)for(var a=t[i],o=0,l=a.length;o<l;o++){var c=a[o];if(c.targetLinks.length){var s=jD(r,c.targetLinks),u=kD(e,r,c.targetLinks)/s;c.y+=(u-ED(c))*n}}},ND=e=>{var{data:t,width:r,height:n,iterations:i,nodeWidth:a,nodePadding:o,sort:l}=e,{links:c}=t,{tree:s}=((e,t,r)=>{for(var{nodes:n,links:i}=e,a=n.map(((e,t)=>{var r=((e,t)=>{for(var r=[],n=[],i=[],a=[],o=0,l=e.length;o<l;o++){var c=e[o];c.source===t&&(i.push(c.target),a.push(o)),c.target===t&&(r.push(c.source),n.push(o))}return{sourceNodes:r,sourceLinks:n,targetLinks:a,targetNodes:i}})(i,t);return OD(OD(OD({},e),r),{},{value:Math.max(jD(i,r.sourceLinks),jD(i,r.targetLinks)),depth:0})})),o=0,l=a.length;o<l;o++){var c=a[o];c.sourceNodes.length||TD(a,c)}var s=Dx()(a,(e=>e.depth)).depth;if(s>=1)for(var u=(t-r)/s,f=0,d=a.length;f<d;f++){var p=a[f];p.targetNodes.length||(p.depth=s),p.x=p.depth*u,p.dx=r}return{tree:a,maxDepth:s}})(t,r,a),u=(e=>{for(var t=[],r=0,n=e.length;r<n;r++){var i=e[r];t[i.depth]||(t[i.depth]=[]),t[i.depth].push(i)}return t})(s),f=((e,t,r,n)=>{for(var i=Math.min(...e.map((e=>(t-(e.length-1)*r)/vD()(e,AD)))),a=0,o=e.length;a<o;a++)for(var l=0,c=e[a].length;l<c;l++){var s=e[a][l];s.y=l,s.dy=s.value*i}return n.map((e=>OD(OD({},e),{},{dy:AD(e)*i})))})(u,n,o,c);DD(u,n,o,l);for(var d=1,p=1;p<=i;p++)ID(s,u,f,d*=.99),DD(u,n,o,l),CD(s,u,f,d),DD(u,n,o,l);return((e,t)=>{for(var r=0,n=e.length;r<n;r++){var i=e[r],a=0,o=0;i.targetLinks.sort(((r,n)=>e[t[r].target].y-e[t[n].target].y)),i.sourceLinks.sort(((r,n)=>e[t[r].source].y-e[t[n].source].y));for(var l=0,c=i.targetLinks.length;l<c;l++){var s=t[i.targetLinks[l]];s&&(s.sy=a,a+=s.dy)}for(var u=0,f=i.sourceLinks.length;u<f;u++){var d=t[i.sourceLinks[u]];d&&(d.ty=o,o+=d.dy)}}})(s,f),{nodes:s,links:f}},_D=(e,t)=>"node"===t?{x:+e.x+ +e.width/2,y:+e.y+ +e.height/2}:"sourceX"in e&&{x:(e.sourceX+e.targetX)/2,y:(e.sourceY+e.targetY)/2},LD={chartName:"Sankey",defaultTooltipEventType:"item",validateTooltipEventTypes:["item"],tooltipPayloadSearcher:(e,t,r,n)=>{if(null!=t&&"string"==typeof t){var i=t.split("-"),[a,o]=i,c=l()(r,"".concat(a,"s[").concat(o,"]"));if(c){var s=((e,t,r)=>{var{payload:n}=e;if("node"===t)return{payload:n,name:ci(n,r,""),value:ci(n,"value")};if("source"in n&&n.source&&n.target){var i=ci(n.source,r,""),a=ci(n.target,r,"");return{payload:n,name:"".concat(i," - ").concat(a),value:ci(n,"value")}}return null})(c,a,n);return s}}},eventEmitter:void 0};function RD(e){var{dataKey:t,nameKey:r,stroke:n,strokeWidth:i,fill:a,name:o,data:l}=e;return{dataDefinedOnItem:l,positions:void 0,settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,name:o,nameKey:r,color:a,unit:""}}}var KD={top:0,right:0,bottom:0,left:0};function zD(e){var{props:r,i:n,linkContent:i,onMouseEnter:a,onMouseLeave:o,onClick:l,dataKey:c}=e,s=_D(r,"link"),u="link-".concat(n),f=Ue(),d={onMouseEnter:e=>{f(Av({activeIndex:u,activeDataKey:c,activeCoordinate:s})),a(r,e)},onMouseLeave:e=>{f(jv()),o(r,e)},onClick:e=>{f(kv({activeIndex:u,activeDataKey:c,activeCoordinate:s})),l(r,e)}};return t.createElement(V,d,function(e,r){if(t.isValidElement(e))return t.cloneElement(e,r);if("function"==typeof e)return e(r);var{sourceX:n,sourceY:i,sourceControlX:a,targetX:o,targetY:l,targetControlX:c,linkWidth:s}=r,u=xD(r,mD);return t.createElement("path",bD({className:"recharts-sankey-link",d:"\n          M".concat(n,",").concat(i,"\n          C").concat(a,",").concat(i," ").concat(c,",").concat(l," ").concat(o,",").concat(l,"\n        "),fill:"none",stroke:"#333",strokeWidth:s,strokeOpacity:"0.2"},C(u)))}(i,r))}function BD(e){var{modifiedLinks:r,links:n,linkContent:i,onMouseEnter:a,onMouseLeave:o,onClick:l,dataKey:c}=e;return t.createElement(V,{className:"recharts-sankey-links",key:"recharts-sankey-links"},n.map(((e,n)=>{var s=r[n];return t.createElement(zD,{key:"link-".concat(e.source,"-").concat(e.target,"-").concat(e.value),props:s,linkContent:i,i:n,onMouseEnter:a,onMouseLeave:o,onClick:l,dataKey:c})})))}function FD(e){var{props:r,nodeContent:n,i,onMouseEnter:a,onMouseLeave:o,onClick:l,dataKey:c}=e,s=Ue(),u=_D(r,"node"),f="node-".concat(i),d={onMouseEnter:e=>{s(Av({activeIndex:f,activeDataKey:c,activeCoordinate:u})),a(r,e)},onMouseLeave:e=>{s(jv()),o(r,e)},onClick:e=>{s(kv({activeIndex:f,activeDataKey:c,activeCoordinate:u})),l(r,e)}};return t.createElement(V,d,function(e,r){return t.isValidElement(e)?t.cloneElement(e,r):"function"==typeof e?e(r):t.createElement(Yl,bD({className:"recharts-sankey-node",fill:"#0088fe",fillOpacity:"0.8"},C(r)))}(n,r))}function WD(e){var{modifiedNodes:r,nodeContent:n,onMouseEnter:i,onMouseLeave:a,onClick:o,dataKey:l}=e;return t.createElement(V,{className:"recharts-sankey-nodes",key:"recharts-sankey-nodes"},r.map(((e,r)=>t.createElement(FD,{props:e,nodeContent:n,i:r,onMouseEnter:i,onMouseLeave:a,onClick:o,dataKey:l}))))}class UD extends t.PureComponent{constructor(){super(...arguments),PD(this,"state",{nodes:[],links:[],modifiedLinks:[],modifiedNodes:[]})}static getDerivedStateFromProps(e,t){var{data:r,width:n,height:i,margin:a,iterations:o,nodeWidth:c,nodePadding:s,sort:u,linkCurvature:f}=e;if(r!==t.prevData||n!==t.prevWidth||i!==t.prevHeight||!Ij(a,t.prevMargin)||o!==t.prevIterations||c!==t.prevNodeWidth||s!==t.prevNodePadding||u!==t.sort){var d=n-(a&&a.left||0)-(a&&a.right||0),p=i-(a&&a.top||0)-(a&&a.bottom||0),{links:h,nodes:y}=ND({data:r,width:d,height:p,iterations:o,nodeWidth:c,nodePadding:s,sort:u}),v=l()(a,"top")||0,m=l()(a,"left")||0,g=h.map(((t,r)=>(e=>{var{link:t,nodes:r,left:n,top:i,i:a,linkContent:o,linkCurvature:l}=e,{sy:c,ty:s,dy:u}=t,f=r[t.source],d=r[t.target],p=f.x+f.dx+n,h=d.x+n,y=((e,t)=>{var r=+e,n=t-r;return e=>r+n*e})(p,h),v=y(l),m=y(1-l);return OD({sourceX:p,targetX:h,sourceY:f.y+c+u/2+i,targetY:d.y+s+u/2+i,sourceControlX:v,targetControlX:m,sourceRelativeY:c,targetRelativeY:s,linkWidth:u,index:a,payload:OD(OD({},t),{},{source:f,target:d})},z(o,!1))})({link:t,nodes:y,i:r,top:v,left:m,linkContent:e.link,linkCurvature:f}))),b=y.map(((t,r)=>(e=>{var{node:t,nodeContent:r,top:n,left:i,i:a}=e,{x:o,y:l,dx:c,dy:s}=t;return OD(OD({},z(r,!1)),{},{x:o+i,y:l+n,width:c,height:s,index:a,payload:t})})({node:t,nodeContent:e.node,i:r,top:v,left:m})));return OD(OD({},t),{},{nodes:y,links:h,modifiedLinks:g,modifiedNodes:b,prevData:r,prevWidth:o,prevHeight:i,prevMargin:a,prevNodePadding:s,prevNodeWidth:c,prevIterations:o,prevSort:u})}return null}handleMouseEnter(e,t,r){var{onMouseEnter:n}=this.props;n&&n(e,t,r)}handleMouseLeave(e,t,r){var{onMouseLeave:n}=this.props;n&&n(e,t,r)}handleClick(e,t,r){var{onClick:n}=this.props;n&&n(e,t,r)}render(){var e=this.props,{width:r,height:n,className:i,style:a,children:o}=e,l=xD(e,gD);if(!qo(r)||!qo(n))return null;var{links:c,modifiedNodes:s,modifiedLinks:u}=this.state,f=C(l);return t.createElement(vT,{preloadedState:{options:LD},reduxStoreName:null!=i?i:"Sankey"},t.createElement(Kw,{fn:RD,args:this.props}),t.createElement(vA,{computedData:{links:u,nodes:s}}),t.createElement(ea,{width:r,height:n}),t.createElement(ta,{margin:KD}),t.createElement(cg.Provider,{value:this.state.tooltipPortal},t.createElement(kT,{className:i,style:a,width:r,height:n,ref:e=>{null==this.state.tooltipPortal&&this.setState({tooltipPortal:e})},onMouseEnter:void 0,onMouseLeave:void 0,onClick:void 0,onMouseMove:void 0,onMouseDown:void 0,onMouseUp:void 0,onContextMenu:void 0,onDoubleClick:void 0,onTouchStart:void 0,onTouchMove:void 0,onTouchEnd:void 0},t.createElement(W,bD({},f,{width:r,height:n}),o,t.createElement(BD,{links:c,modifiedLinks:u,linkContent:this.props.link,dataKey:this.props.dataKey,onMouseEnter:(e,t)=>this.handleMouseEnter(e,"link",t),onMouseLeave:(e,t)=>this.handleMouseLeave(e,"link",t),onClick:(e,t)=>this.handleClick(e,"link",t)}),t.createElement(WD,{modifiedNodes:s,nodeContent:this.props.node,dataKey:this.props.dataKey,onMouseEnter:(e,t)=>this.handleMouseEnter(e,"node",t),onMouseLeave:(e,t)=>this.handleMouseLeave(e,"node",t),onClick:(e,t)=>this.handleClick(e,"node",t)})))))}}PD(UD,"displayName","Sankey"),PD(UD,"defaultProps",{nameKey:"name",dataKey:"value",nodePadding:10,nodeWidth:10,linkCurvature:.5,iterations:32,margin:{top:5,right:5,bottom:5,left:5},sort:!0});var XD=["axis"],VD={layout:"centric",startAngle:90,endAngle:-270,cx:"50%",cy:"50%",innerRadius:0,outerRadius:"80%"},$D=(0,t.forwardRef)(((e,r)=>{var n=pl(e,VD);return t.createElement(UT,{chartName:"RadarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:XD,tooltipPayloadSearcher:pg,categoricalChartProps:n,ref:r})})),HD=["item"],qD=(0,t.forwardRef)(((e,r)=>t.createElement(NT,{chartName:"ScatterChart",defaultTooltipEventType:"item",validateTooltipEventTypes:HD,tooltipPayloadSearcher:pg,categoricalChartProps:e,ref:r}))),YD=["axis"],GD=(0,t.forwardRef)(((e,r)=>t.createElement(NT,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:YD,tooltipPayloadSearcher:pg,categoricalChartProps:e,ref:r}))),ZD=["axis","item"],JD={layout:"radial",startAngle:0,endAngle:360,cx:"50%",cy:"50%",innerRadius:0,outerRadius:"80%"},QD=(0,t.forwardRef)(((e,r)=>{var n=pl(e,JD);return t.createElement(UT,{chartName:"RadialBarChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:ZD,tooltipPayloadSearcher:pg,categoricalChartProps:n,ref:r})})),eC=["axis"],tC=(0,t.forwardRef)(((e,r)=>t.createElement(NT,{chartName:"ComposedChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:eC,tooltipPayloadSearcher:pg,categoricalChartProps:e,ref:r})));function rC(){return rC=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},rC.apply(null,arguments)}function nC(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function iC(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?nC(Object(r),!0).forEach((function(t){aC(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):nC(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function aC(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var oC={fontWeight:"bold",paintOrder:"stroke fill",fontSize:".75rem",stroke:"#FFF",fill:"black",pointerEvents:"none"};function lC(e){if(!e.children||0===e.children.length)return 1;var t=e.children.map((e=>lC(e)));return 1+Math.max(...t)}function cC(e){var t={};return e.forEach(((e,r)=>{t[r]=e})),t}function sC(e){var{dataKey:t,nameKey:r,data:n,stroke:i,fill:a,positions:o}=e;return{dataDefinedOnItem:n.children,positions:cC(o),settings:{stroke:i,strokeWidth:void 0,fill:a,nameKey:r,dataKey:t,name:r?void 0:t,hide:!1,type:void 0,color:a,unit:""}}}var uC={top:0,right:0,bottom:0,left:0},fC={options:{validateTooltipEventTypes:["item"],defaultTooltipEventType:"item",chartName:"Sunburst",tooltipPayloadSearcher:(e,t)=>l()(e,t),eventEmitter:void 0}},dC=e=>{var{className:r,data:i,children:a,width:o,height:l,padding:c=2,dataKey:s="value",nameKey:u="name",ringPadding:f=2,innerRadius:d=50,fill:p="#333",stroke:h="#FFF",textOptions:y=oC,outerRadius:v=Math.min(o,l)/2,cx:m=o/2,cy:g=l/2,startAngle:b=0,endAngle:x=360,onClick:w,onMouseEnter:O,onMouseLeave:P}=e,E=Ue(),A=tu([0,i[s]],[0,x]),j=(v-d)/lC(i),S=[],k=new Map([]),[M,T]=(0,t.useState)(null);!function e(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,{radius:a,innerR:o,initialAngle:l,childColor:u,nestedActiveTooltipIndex:d}=n,v=l;r&&r.forEach(((r,n)=>{var l,b,x=1===i?"[".concat(n,"]"):function(e){return"".concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"","children[").concat(e,"]")}(n,d),j=iC(iC({},r),{},{tooltipIndex:x}),M=A(r[s]),T=v,D=null!==(l=null!==(b=null==r?void 0:r.fill)&&void 0!==b?b:u)&&void 0!==l?l:p,{x:C,y:I}=Jn(0,0,o+a/2,-(T+M-M/2));v+=M,S.push(t.createElement("g",{key:"sunburst-sector-".concat(r.name,"-").concat(n)},t.createElement(tc,{onClick:()=>{return e=j,w&&w(e),void E(kv({activeIndex:e.tooltipIndex,activeDataKey:s,activeCoordinate:k.get(e.name)}));var e},onMouseEnter:e=>function(e,t){O&&O(e,t),E(Av({activeIndex:e.tooltipIndex,activeDataKey:s,activeCoordinate:k.get(e.name)}))}(j,e),onMouseLeave:e=>function(e,t){P&&P(e,t),E(jv())}(j,e),fill:D,stroke:h,strokeWidth:c,startAngle:T,endAngle:T+M,innerRadius:o,outerRadius:o+a,cx:m,cy:g}),t.createElement(mb,rC({},y,{alignmentBaseline:"middle",textAnchor:"middle",x:C+m,y:g-I}),r[s])));var{x:N,y:_}=Jn(m,g,o+a/2,T);return k.set(r.name,{x:N,y:_}),e(r.children,{radius:a,innerR:o+a+f,initialAngle:T,childColor:D,nestedActiveTooltipIndex:x},i+1)}))}(i.children,{radius:j,innerR:d,initialAngle:b});var D=n("recharts-sunburst",r);return t.createElement(cg.Provider,{value:M},t.createElement(kT,{className:r,width:o,height:l,ref:e=>{null==M&&null!=e&&T(e)},onMouseEnter:void 0,onMouseLeave:void 0,onClick:void 0,onMouseMove:void 0,onMouseDown:void 0,onMouseUp:void 0,onContextMenu:void 0,onDoubleClick:void 0,onTouchStart:void 0,onTouchMove:void 0,onTouchEnd:void 0},t.createElement(W,{width:o,height:l},t.createElement(V,{className:D},S),t.createElement(Kw,{fn:sC,args:{dataKey:s,data:i,stroke:h,fill:p,nameKey:u,positions:k}}),a)))},pC=e=>{var r;return t.createElement(vT,{preloadedState:fC,reduxStoreName:null!==(r=e.className)&&void 0!==r?r:"SunburstChart"},t.createElement(ea,{width:e.width,height:e.height}),t.createElement(ta,{margin:uC}),t.createElement(dC,e))};function hC(){return hC=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},hC.apply(null,arguments)}function yC(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function vC(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?yC(Object(r),!0).forEach((function(t){mC(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):yC(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function mC(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function gC(e,t){var r="".concat(t.x||e.x),n=parseInt(r,10),i="".concat(t.y||e.y),a=parseInt(i,10),o="".concat((null==t?void 0:t.height)||(null==e?void 0:e.height)),l=parseInt(o,10);return vC(vC(vC({},t),Iw(e)),{},{height:l,x:n,y:a})}function bC(e){return t.createElement(Nw,hC({shapeType:"trapezoid",propTransformer:gC},e))}function xC(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function wC(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?xC(Object(r),!0).forEach((function(t){OC(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):xC(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function OC(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var PC=et([Ki,(e,t)=>t,yp],((e,t,r)=>{var n,{data:i,dataKey:a,nameKey:o,tooltipType:l,lastShapeType:c,reversed:s,customWidth:u,cells:f,presentationProps:d}=t,{chartData:p}=r;if(null!=i&&i.length>0?n=i:null!=p&&p.length>0&&(n=p),n&&n.length)n=n.map(((e,t)=>wC(wC(wC({payload:e},d),e),f&&f[t]&&f[t].props)));else{if(!f||!f.length)return{trapezoids:[],data:n};n=f.map((e=>wC(wC({},d),e.props)))}return function(e){var{dataKey:t,nameKey:r,displayedData:n,tooltipType:i,lastShapeType:a,reversed:o,offset:l,customWidth:c}=e,{left:s,top:u}=l,{realHeight:f,realWidth:d,offsetX:p,offsetY:h}=LC(c,l),y=Math.max.apply(null,n.map((e=>ci(e,t,0)))),v=n.length,m=f/v,g={x:l.left,y:l.top,width:l.width,height:l.height},b=n.map(((e,o)=>{var l,c=ci(e,t,0),f=ci(e,r,o),b=c;o!==v-1?(l=ci(n[o+1],t,0))instanceof Array&&([l]=l):c instanceof Array&&2===c.length?[b,l]=c:l="rectangle"===a?b:0;var x=(y-b)*d/(2*y)+u+25+p,w=m*o+s+h,O=b/y*d,P=l/y*d,E=[{name:f,value:b,payload:e,dataKey:t,type:i}],A={x:x+O/2,y:w+m/2};return kC(kC({x,y:w,width:Math.max(O,P),upperWidth:O,lowerWidth:P,height:m,name:f,val:b,tooltipPayload:E,tooltipPosition:A},qT()(e,["width"])),{},{payload:e,parentViewBox:g,labelViewBox:{x:x+(O-P)/4,y:w,width:Math.abs(O-P)/2+Math.min(O,P),height:m}})}));o&&(b=b.map(((e,t)=>{var r=e.y-t*m+(v-1-t)*m;return kC(kC({},e),{},{upperWidth:e.lowerWidth,lowerWidth:e.upperWidth,x:e.x-(e.lowerWidth-e.upperWidth)/2,y:e.y-t*m+(v-1-t)*m,tooltipPosition:kC(kC({},e.tooltipPosition),{},{y:r+m/2}),labelViewBox:kC(kC({},e.labelViewBox),{},{y:r})})})));return{trapezoids:b,data:n}}({dataKey:a,nameKey:o,displayedData:n,tooltipType:l,lastShapeType:c,reversed:s,offset:e,customWidth:u})})),EC=["onMouseEnter","onClick","onMouseLeave","shape","activeShape"],AC=["stroke","fill","legendType","hide","isAnimationActive","animationBegin","animationDuration","animationEasing","nameKey","lastShapeType"];function jC(){return jC=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},jC.apply(null,arguments)}function SC(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function kC(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?SC(Object(r),!0).forEach((function(t){MC(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):SC(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function MC(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function TC(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],-1===t.indexOf(r)&&{}.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function DC(e){var{dataKey:t,nameKey:r,stroke:n,strokeWidth:i,fill:a,name:o,hide:l,tooltipType:c,data:s}=e;return{dataDefinedOnItem:s,positions:e.trapezoids.map((e=>{var{tooltipPosition:t}=e;return t})),settings:{stroke:n,strokeWidth:i,fill:a,dataKey:t,name:o,nameKey:r,hide:l,type:c,color:a,unit:""}}}function CC(e){var{trapezoids:r,allOtherFunnelProps:n,showLabels:i}=e,a=He((e=>qm(e,"item",e.tooltip.settings.trigger,void 0))),{onMouseEnter:o,onClick:l,onMouseLeave:c,shape:s,activeShape:u}=n,f=TC(n,EC),d=_w(o,n.dataKey),p=Lw(c),h=Rw(l,n.dataKey);return t.createElement(t.Fragment,null,r.map(((e,r)=>{var n=u&&a===String(r),i=n?u:s,o=kC(kC({},e),{},{option:i,isActive:n,stroke:e.stroke});return t.createElement(V,jC({className:"recharts-funnel-trapezoid"},M(f,e,r),{onMouseEnter:d(e,r),onMouseLeave:p(e,r),onClick:h(e,r),key:"trapezoid-".concat(null==e?void 0:e.x,"-").concat(null==e?void 0:e.y,"-").concat(null==e?void 0:e.name,"-").concat(null==e?void 0:e.value)}),t.createElement(bC,o))})),i&&Ub.renderCallByParent(n,r))}var IC=0;function NC(e){var r,n,i,{previousTrapezoidsRef:a,props:o}=e,{trapezoids:l,isAnimationActive:c,animationBegin:s,animationDuration:u,animationEasing:f,onAnimationEnd:d,onAnimationStart:p}=o,h=a.current,[y,v]=(0,t.useState)(!0),m=(r=l,n=(0,t.useRef)(IC),(i=(0,t.useRef)(r)).current!==r&&(n.current+=1,IC=n.current,i.current=r),n.current),b=(0,t.useCallback)((()=>{"function"==typeof d&&d(),v(!1)}),[d]),x=(0,t.useCallback)((()=>{"function"==typeof p&&p(),v(!0)}),[p]);return t.createElement(oO,{begin:s,duration:u,isActive:c,easing:f,key:m,onAnimationStart:x,onAnimationEnd:b},(e=>{var r=1===e?l:l.map(((t,r)=>{var n=h&&h[r];if(n){var i=g(n.x,t.x),a=g(n.y,t.y),o=g(n.upperWidth,t.upperWidth),l=g(n.lowerWidth,t.lowerWidth),c=g(n.height,t.height);return kC(kC({},t),{},{x:i(e),y:a(e),upperWidth:o(e),lowerWidth:l(e),height:c(e)})}var s=g(t.x+t.upperWidth/2,t.x),u=g(t.y+t.height/2,t.y),f=g(0,t.upperWidth),d=g(0,t.lowerWidth),p=g(0,t.height);return kC(kC({},t),{},{x:s(e),y:u(e),upperWidth:f(e),lowerWidth:d(e),height:p(e)})}));return e>0&&(a.current=r),t.createElement(V,null,t.createElement(CC,{trapezoids:r,allOtherFunnelProps:o,showLabels:!y}))}))}function _C(e){var{trapezoids:r,isAnimationActive:n}=e,i=(0,t.useRef)(null),a=i.current;return n&&r&&r.length&&(!a||a!==r)?t.createElement(NC,{props:e,previousTrapezoidsRef:i}):t.createElement(CC,{trapezoids:r,allOtherFunnelProps:e,showLabels:!0})}var LC=(e,t)=>{var{width:r,height:n,left:i,right:a,top:o,bottom:l}=t,c=n,s=r;return d(e)?s=e:"string"==typeof e&&(s=s*parseFloat(e)/100),{realWidth:s-i-a-50,realHeight:c-l-o,offsetX:(r-s)/2,offsetY:(n-c)/2}};class RC extends t.PureComponent{render(){var{className:e}=this.props,r=n("recharts-trapezoids",e);return t.createElement(V,{className:r},t.createElement(_C,this.props))}}var KC={stroke:"#fff",fill:"#808080",legendType:"rect",hide:!1,isAnimationActive:!Oo.isSsr,animationBegin:400,animationDuration:1500,animationEasing:"ease",nameKey:"name",lastShapeType:"triangle"};function zC(e){var{height:r,width:n}=NO(),i=pl(e,KC),{stroke:a,fill:o,legendType:l,hide:c,isAnimationActive:s,animationBegin:u,animationDuration:f,animationEasing:d,nameKey:p,lastShapeType:h}=i,y=TC(i,AC),v=C(e),m=R(e.children,zg),g=(0,t.useMemo)((()=>({dataKey:e.dataKey,nameKey:p,data:e.data,tooltipType:e.tooltipType,lastShapeType:h,reversed:e.reversed,customWidth:e.width,cells:m,presentationProps:v})),[e.dataKey,p,e.data,e.tooltipType,h,e.reversed,e.width,m,v]),{trapezoids:b}=He((e=>PC(e,g)));return t.createElement(t.Fragment,null,t.createElement(Kw,{fn:DC,args:kC(kC({},e),{},{trapezoids:b})}),c?null:t.createElement(RC,jC({},y,{stroke:a,fill:o,nameKey:p,lastShapeType:h,animationBegin:u,animationDuration:f,animationEasing:d,isAnimationActive:s,hide:c,legendType:l,height:r,width:n,trapezoids:b})))}class BC extends t.PureComponent{render(){return t.createElement(zC,this.props)}}MC(BC,"displayName","Funnel"),MC(BC,"defaultProps",KC);var FC=["item"],WC=(0,t.forwardRef)(((e,r)=>t.createElement(NT,{chartName:"FunnelChart",defaultTooltipEventType:"item",validateTooltipEventTypes:FC,tooltipPayloadSearcher:pg,categoricalChartProps:e,ref:r})))})(),o})()));
+//# sourceMappingURL=Recharts.js.map
Index: node_modules/recharts/umd/Recharts.js.LICENSE.txt
===================================================================
--- node_modules/recharts/umd/Recharts.js.LICENSE.txt	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/umd/Recharts.js.LICENSE.txt	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/*! decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */
+
+/**
+ * @license React
+ * use-sync-external-store-shim.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * use-sync-external-store-shim/with-selector.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
Index: node_modules/recharts/umd/Recharts.js.map
===================================================================
--- node_modules/recharts/umd/Recharts.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/umd/Recharts.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"file":"Recharts.js","mappings":"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,EAAW,EAEN9iB,EAAI,EAAGA,EAAIU,EAAKV,IAIvBuiB,GAHAM,EAAWP,EAAKtiB,GAAG+iB,IAAM,EAIzBP,GAHAM,EAAWR,EAAKtiB,GAAGgjB,IAAM,EAIzBP,GAASI,EAAWC,EACpBJ,GAASG,EAAWA,EACpBF,EAAOtR,KAAKkC,IAAIoP,EAAME,GACtBD,EAAOvR,KAAKxP,IAAI+gB,EAAMC,GAGxB,IAAM7f,EAAItC,EAAMgiB,GAAUH,EAAOA,GAAQ7hB,EAAM+hB,EAAQF,EAAOC,IAAS9hB,EAAMgiB,EAAQH,EAAOA,GAAQ,EAEpG,MAAO,CACLI,OACAC,OACA5f,IACAC,GAAIuf,EAAOxf,EAAIuf,GAAQ7hB,EACxB,EAUUuiB,EAAa1mB,GACjBA,QAQI2mB,EAAc3mB,GACrB0mB,EAAU1mB,GACLA,EAGF,GAAPsD,OAAUtD,EAAMygB,OAAO,GAAGmG,eAAatjB,OAAGtD,EAAMoD,MAAM,ICrMlDyjB,EAAY,CAChB,0BACA,SACA,gBACA,QACA,eACA,UACA,iBACA,mBACA,0BACA,qBACA,4BACA,sBACA,6BACA,UACA,iBACA,SACA,gBACA,WACA,kBACA,gBACA,uBACA,UACA,iBACA,UACA,iBACA,WACA,kBACA,YACA,mBACA,SACA,gBACA,UACA,iBACA,YACA,mBACA,aACA,oBACA,UACA,iBACA,UACA,iBACA,YACA,mBACA,mBACA,0BACA,mBACA,0BACA,YACA,mBACA,cACA,qBACA,UACA,iBACA,eACA,sBACA,mBACA,0BACA,cACA,qBACA,UACA,iBACA,SACA,gBACA,YACA,mBACA,aACA,oBACA,eACA,sBACA,WACA,kBACA,YACA,mBACA,YACA,mBACA,YACA,mBACA,eACA,sBACA,iBACA,wBACA,YACA,mBACA,aACA,oBACA,UACA,iBACA,gBACA,uBACA,gBACA,uBACA,SACA,gBACA,YACA,mBACA,cACA,qBACA,aACA,oBACA,cACA,qBACA,aACA,oBACA,cACA,qBACA,SACA,gBACA,cACA,qBACA,eACA,eACA,cACA,qBACA,aACA,oBACA,cACA,qBACA,YACA,mBACA,WACA,kBACA,gBACA,uBACA,aACA,oBACA,cACA,qBACA,eACA,sBACA,gBACA,uBACA,gBACA,uBACA,cACA,qBACA,kBACA,yBACA,iBACA,wBACA,iBACA,wBACA,gBACA,uBACA,eACA,sBACA,sBACA,6BACA,uBACA,8BACA,WACA,kBACA,UACA,iBACA,mBACA,0BACA,iBACA,wBACA,uBACA,8BACA,kBACA,0BAKK,SAASC,EAAWre,GACzB,MAAmB,iBAARA,GAGqCoe,EACxB7R,SAASvM,EACnC,CCiZA,IAEMse,EAAkB,CAAC,SAAU,cAMtBC,EAAkE,CAC7EC,IAT2B,CAAC,UAAW,YAUvCC,QAASH,EACTI,SAAUJ,GAuNCK,EAAqBA,CAChCC,EACAC,KAEA,IAAKD,GAA0B,mBAAVA,GAAyC,kBAAVA,EAClD,OAAO,KAGT,IAAIE,EAAaF,EAMjB,IAJIG,EAAAA,EAAAA,gBAAeH,KACjBE,EAAaF,EAAMA,OAGK,iBAAfE,GAAiD,mBAAfA,EAC3C,OAAO,KAGT,IAAME,EAAwC,CAAC,EAQ/C,OANA7nB,OAAO8K,KAAK6c,GAAYG,SAAQjf,IAC1Bqe,EAAWre,KACbgf,EAAIhf,GAAO6e,GAAc,CAAE3T,GAAa4T,EAAW9e,GAAK8e,EAAY5T,IACtE,IAGK8T,CAAG,EAWCE,EAAqBA,CAChCN,EACAtB,EACA/gB,KAEA,GAAc,OAAVqiB,GAAoC,iBAAVA,GAAuC,mBAAVA,EACzD,OAAO,KAGT,IAAII,EAA+C,KAYnD,OAVA7nB,OAAO8K,KAAK2c,GAAOK,SAASjf,IAC1B,IAAMoG,EAAQwY,EAAc5e,GAExBqe,EAAWre,IAAwB,mBAAToG,IACvB4Y,IAAKA,EAAM,CAAC,GAEjBA,EAAIhf,GAxBRmf,EAACC,EAA+D9B,EAAW/gB,IAC1E2O,IACCkU,EAAgB9B,EAAM/gB,EAAO2O,GAEtB,MAoBMiU,CAAuB/Y,EAAMkX,EAAM/gB,GAChD,IAGKyiB,CAAG,ECz1BNK,EAAqB,CACzB,wBACA,cACA,oBACA,YACA,eACA,gBACA,gBACA,eACA,gBACA,eACA,mBACA,eACA,gBACA,oBACA,gBACA,cACA,gBACA,cACA,eACA,oBACA,aACA,kBACA,aACA,YACA,aACA,iBACA,uBACA,mBACA,YACA,mBACA,gBACA,eACA,gBACA,gBACA,gBACA,uBACA,gBACA,gBACA,eACA,gBACA,eACA,YACA,gBACA,gBACA,gBACA,iBACA,YACA,QACA,SACA,KACA,OACA,MACA,QACA,SACA,MACA,OACA,QAQA,SACA,QACA,OACA,WACA,eACA,aACA,WACA,oBACA,eACA,aACA,YACA,aACA,SACA,gBACA,gBACA,cACA,UACA,gBACA,gBACA,cACA,OACA,QACA,OACA,KACA,WACA,YACA,OACA,WACA,gBACA,WACA,qBACA,4BACA,eACA,iBACA,oBACA,mBACA,SACA,KACA,KACA,IACA,aACA,UACA,kBACA,YACA,UACA,UACA,mBACA,MACA,KACA,KACA,WACA,YACA,mBACA,MACA,WACA,4BACA,OACA,cACA,WACA,SACA,YACA,cACA,aACA,eACA,YACA,aACA,WACA,iBACA,cACA,YACA,cACA,aACA,SACA,OACA,KACA,KACA,KACA,KACA,YACA,6BACA,2BACA,WACA,oBACA,gBACA,UACA,YACA,eACA,OACA,cACA,iBACA,MACA,KACA,YACA,KACA,KACA,KACA,KACA,IACA,eACA,mBACA,UACA,YACA,aACA,WACA,eACA,gBACA,gBACA,oBACA,QACA,YACA,eACA,YACA,cACA,cACA,cACA,OACA,mBACA,YACA,eACA,OACA,aACA,SACA,UACA,WACA,QACA,SACA,cACA,SACA,WACA,mBACA,oBACA,aACA,UACA,aACA,sBACA,mBACA,eACA,gBACA,YACA,YACA,YACA,gBACA,sBACA,iBACA,IACA,SACA,OACA,OACA,kBACA,cACA,YACA,qBACA,mBACA,UACA,SACA,SACA,KACA,KACA,OACA,iBACA,QACA,UACA,mBACA,mBACA,QACA,eACA,cACA,eACA,QACA,QACA,cACA,YACA,cACA,wBACA,yBACA,SACA,SACA,kBACA,mBACA,gBACA,iBACA,mBACA,gBAC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","sources":["webpack://Recharts/webpack/universalModuleDefinition","webpack://Recharts/./node_modules/es-toolkit/dist/compat/function/debounce.js","webpack://Recharts/./node_modules/es-toolkit/compat/last.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js","webpack://Recharts/./node_modules/es-toolkit/compat/sortBy.js","webpack://Recharts/./node_modules/eventemitter3/index.js","webpack://Recharts/./node_modules/es-toolkit/compat/get.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.js","webpack://Recharts/./node_modules/es-toolkit/dist/array/maxBy.js","webpack://Recharts/./node_modules/es-toolkit/dist/array/last.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/isMatch.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/math/minBy.js","webpack://Recharts/./node_modules/es-toolkit/dist/predicate/isEqualWith.js","webpack://Recharts/./node_modules/es-toolkit/compat/uniqBy.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/array/last.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/isSymbol.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/toKey.js","webpack://Recharts/./node_modules/es-toolkit/compat/omit.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/getTag.js","webpack://Recharts/./node_modules/es-toolkit/compat/sumBy.js","webpack://Recharts/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","webpack://Recharts/./node_modules/es-toolkit/dist/predicate/isPrimitive.js","webpack://Recharts/external umd {\"root\":\"ReactIs\",\"commonjs2\":\"react-is\",\"commonjs\":\"react-is\",\"amd\":\"react-is\"}","webpack://Recharts/./node_modules/es-toolkit/dist/compat/array/uniqBy.js","webpack://Recharts/./node_modules/es-toolkit/compat/isPlainObject.js","webpack://Recharts/./node_modules/es-toolkit/compat/minBy.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/isArguments.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/util/toPath.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/array/orderBy.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/object/property.js","webpack://Recharts/./node_modules/es-toolkit/compat/range.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/compareValues.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/math/sumBy.js","webpack://Recharts/./node_modules/es-toolkit/dist/object/cloneDeep.js","webpack://Recharts/./node_modules/es-toolkit/dist/predicate/isTypedArray.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/object/cloneDeep.js","webpack://Recharts/./node_modules/es-toolkit/dist/object/cloneDeepWith.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/isKey.js","webpack://Recharts/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/object/omit.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/object/get.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/array/sortBy.js","webpack://Recharts/./node_modules/es-toolkit/compat/throttle.js","webpack://Recharts/./node_modules/es-toolkit/compat/maxBy.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/toArray.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/util/toFinite.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/isObject.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/math/range.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/function/throttle.js","webpack://Recharts/external umd {\"root\":\"React\",\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"}","webpack://Recharts/./node_modules/es-toolkit/dist/array/flatten.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/math/maxBy.js","webpack://Recharts/external umd {\"root\":\"ReactDOM\",\"commonjs2\":\"react-dom\",\"commonjs\":\"react-dom\",\"amd\":\"react-dom\"}","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/getSymbols.js","webpack://Recharts/./node_modules/es-toolkit/dist/function/identity.js","webpack://Recharts/./node_modules/es-toolkit/dist/function/noop.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/util/eq.js","webpack://Recharts/./node_modules/es-toolkit/dist/function/debounce.js","webpack://Recharts/./node_modules/es-toolkit/dist/predicate/isPlainObject.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/object/has.js","webpack://Recharts/./node_modules/es-toolkit/compat/isEqual.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/object/unset.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/matches.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js","webpack://Recharts/./node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/util/iteratee.js","webpack://Recharts/./node_modules/es-toolkit/dist/array/minBy.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js","webpack://Recharts/./node_modules/decimal.js-light/decimal.js","webpack://Recharts/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/isIndex.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js","webpack://Recharts/./node_modules/es-toolkit/dist/array/uniqBy.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/util/toNumber.js","webpack://Recharts/./node_modules/es-toolkit/dist/predicate/isLength.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/_internal/tags.js","webpack://Recharts/./node_modules/use-sync-external-store/shim/with-selector.js","webpack://Recharts/./node_modules/es-toolkit/dist/predicate/isEqual.js","webpack://Recharts/./node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js","webpack://Recharts/./node_modules/use-sync-external-store/shim/index.js","webpack://Recharts/webpack/bootstrap","webpack://Recharts/webpack/runtime/compat get default export","webpack://Recharts/webpack/runtime/define property getters","webpack://Recharts/webpack/runtime/global","webpack://Recharts/webpack/runtime/hasOwnProperty shorthand","webpack://Recharts/webpack/runtime/make namespace object","webpack://Recharts/./node_modules/clsx/dist/clsx.mjs","webpack://Recharts/./src/util/DataUtils.ts","webpack://Recharts/./src/util/excludeEventProps.ts","webpack://Recharts/./src/util/types.ts","webpack://Recharts/./src/util/svgPropertiesNoEvents.ts","webpack://Recharts/./src/util/ReactUtils.ts","webpack://Recharts/./src/container/Surface.tsx","webpack://Recharts/./src/container/Layer.tsx","webpack://Recharts/./src/context/legendPortalContext.tsx","webpack://Recharts/./node_modules/d3-shape/src/math.js","webpack://Recharts/./node_modules/d3-shape/src/symbol/circle.js","webpack://Recharts/./node_modules/d3-shape/src/symbol/cross.js","webpack://Recharts/./node_modules/d3-shape/src/symbol/diamond.js","webpack://Recharts/./node_modules/d3-shape/src/symbol/square.js","webpack://Recharts/./node_modules/d3-shape/src/symbol/star.js","webpack://Recharts/./node_modules/d3-shape/src/symbol/triangle.js","webpack://Recharts/./node_modules/d3-shape/src/symbol/wye.js","webpack://Recharts/./node_modules/d3-shape/src/constant.js","webpack://Recharts/./node_modules/d3-path/src/path.js","webpack://Recharts/./node_modules/d3-shape/src/path.js","webpack://Recharts/./node_modules/d3-shape/src/symbol/asterisk.js","webpack://Recharts/./node_modules/d3-shape/src/symbol/triangle2.js","webpack://Recharts/./src/shape/Symbols.tsx","webpack://Recharts/./node_modules/d3-shape/src/symbol.js","webpack://Recharts/./src/component/DefaultLegendContent.tsx","webpack://Recharts/./src/util/payload/getUniqPayload.ts","webpack://Recharts/./src/state/RechartsReduxContext.tsx","webpack://Recharts/./src/state/hooks.ts","webpack://Recharts/./node_modules/reselect/dist/reselect.mjs","webpack://Recharts/./src/state/selectors/legendSelectors.ts","webpack://Recharts/./src/util/useElementOffset.ts","webpack://Recharts/./node_modules/@reduxjs/toolkit/node_modules/immer/dist/immer.esm.mjs","webpack://Recharts/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://Recharts/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://Recharts/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://Recharts/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://Recharts/./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack://Recharts/./node_modules/redux/es/redux.js","webpack://Recharts/./node_modules/redux-thunk/es/index.js","webpack://Recharts/./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js","webpack://Recharts/./src/state/layoutSlice.ts","webpack://Recharts/./node_modules/d3-shape/src/offset/none.js","webpack://Recharts/./node_modules/d3-shape/src/array.js","webpack://Recharts/./node_modules/d3-shape/src/order/none.js","webpack://Recharts/./node_modules/d3-shape/src/stack.js","webpack://Recharts/./src/util/PolarUtils.ts","webpack://Recharts/./src/util/getSliced.ts","webpack://Recharts/./src/util/ChartUtils.ts","webpack://Recharts/./node_modules/d3-shape/src/offset/expand.js","webpack://Recharts/./node_modules/d3-shape/src/offset/silhouette.js","webpack://Recharts/./node_modules/d3-shape/src/offset/wiggle.js","webpack://Recharts/./src/state/selectors/containerSelectors.ts","webpack://Recharts/./src/state/selectors/selectAllAxes.ts","webpack://Recharts/./src/util/Constants.ts","webpack://Recharts/./src/state/selectors/selectChartOffsetInternal.ts","webpack://Recharts/./src/context/PanoramaContext.tsx","webpack://Recharts/./src/state/selectors/brushSelectors.ts","webpack://Recharts/./src/context/chartLayoutContext.tsx","webpack://Recharts/./node_modules/immer/dist/immer.mjs","webpack://Recharts/./src/state/legendSlice.ts","webpack://Recharts/./src/component/Legend.tsx","webpack://Recharts/./src/context/legendPayloadContext.tsx","webpack://Recharts/./src/component/DefaultTooltipContent.tsx","webpack://Recharts/./src/util/tooltip/translate.ts","webpack://Recharts/./src/component/TooltipBoundingBox.tsx","webpack://Recharts/./src/util/Global.ts","webpack://Recharts/./src/context/accessibilityContext.tsx","webpack://Recharts/./node_modules/d3-shape/src/noop.js","webpack://Recharts/./node_modules/d3-shape/src/curve/basis.js","webpack://Recharts/./node_modules/d3-shape/src/curve/basisClosed.js","webpack://Recharts/./node_modules/d3-shape/src/curve/basisOpen.js","webpack://Recharts/./node_modules/d3-shape/src/curve/bump.js","webpack://Recharts/./node_modules/d3-shape/src/curve/linearClosed.js","webpack://Recharts/./node_modules/d3-shape/src/curve/linear.js","webpack://Recharts/./node_modules/d3-shape/src/curve/monotone.js","webpack://Recharts/./node_modules/d3-shape/src/curve/natural.js","webpack://Recharts/./node_modules/d3-shape/src/curve/step.js","webpack://Recharts/./node_modules/d3-shape/src/point.js","webpack://Recharts/./node_modules/d3-shape/src/line.js","webpack://Recharts/./node_modules/d3-shape/src/area.js","webpack://Recharts/./src/util/isWellBehavedNumber.ts","webpack://Recharts/./src/shape/Curve.tsx","webpack://Recharts/./src/shape/Cross.tsx","webpack://Recharts/./src/util/resolveDefaultProps.tsx","webpack://Recharts/./src/animation/easing.ts","webpack://Recharts/./src/animation/util.ts","webpack://Recharts/./src/animation/configUpdate.ts","webpack://Recharts/./src/animation/timeoutController.ts","webpack://Recharts/./src/animation/createDefaultAnimationManager.tsx","webpack://Recharts/./src/animation/AnimationManager.ts","webpack://Recharts/./src/animation/useAnimationManager.tsx","webpack://Recharts/./src/animation/Animate.tsx","webpack://Recharts/./src/shape/Rectangle.tsx","webpack://Recharts/./src/util/cursor/getRadialCursorPoints.ts","webpack://Recharts/./src/shape/Sector.tsx","webpack://Recharts/./src/util/cursor/getCursorPoints.ts","webpack://Recharts/./node_modules/d3-scale/src/init.js","webpack://Recharts/./node_modules/internmap/src/index.js","webpack://Recharts/./node_modules/d3-scale/src/ordinal.js","webpack://Recharts/./node_modules/d3-scale/src/band.js","webpack://Recharts/./node_modules/d3-array/src/range.js","webpack://Recharts/./node_modules/d3-array/src/ticks.js","webpack://Recharts/./node_modules/d3-array/src/ascending.js","webpack://Recharts/./node_modules/d3-array/src/descending.js","webpack://Recharts/./node_modules/d3-array/src/bisector.js","webpack://Recharts/./node_modules/d3-array/src/number.js","webpack://Recharts/./node_modules/d3-array/src/bisect.js","webpack://Recharts/./node_modules/d3-color/src/define.js","webpack://Recharts/./node_modules/d3-color/src/color.js","webpack://Recharts/./node_modules/d3-interpolate/src/basis.js","webpack://Recharts/./node_modules/d3-interpolate/src/constant.js","webpack://Recharts/./node_modules/d3-interpolate/src/color.js","webpack://Recharts/./node_modules/d3-interpolate/src/rgb.js","webpack://Recharts/./node_modules/d3-interpolate/src/basisClosed.js","webpack://Recharts/./node_modules/d3-interpolate/src/array.js","webpack://Recharts/./node_modules/d3-interpolate/src/date.js","webpack://Recharts/./node_modules/d3-interpolate/src/number.js","webpack://Recharts/./node_modules/d3-interpolate/src/object.js","webpack://Recharts/./node_modules/d3-interpolate/src/string.js","webpack://Recharts/./node_modules/d3-interpolate/src/numberArray.js","webpack://Recharts/./node_modules/d3-interpolate/src/value.js","webpack://Recharts/./node_modules/d3-interpolate/src/round.js","webpack://Recharts/./node_modules/d3-scale/src/number.js","webpack://Recharts/./node_modules/d3-scale/src/continuous.js","webpack://Recharts/./node_modules/d3-scale/src/constant.js","webpack://Recharts/./node_modules/d3-format/src/formatSpecifier.js","webpack://Recharts/./node_modules/d3-format/src/formatPrefixAuto.js","webpack://Recharts/./node_modules/d3-format/src/formatDecimal.js","webpack://Recharts/./node_modules/d3-format/src/exponent.js","webpack://Recharts/./node_modules/d3-format/src/formatRounded.js","webpack://Recharts/./node_modules/d3-format/src/formatTypes.js","webpack://Recharts/./node_modules/d3-format/src/identity.js","webpack://Recharts/./node_modules/d3-format/src/locale.js","webpack://Recharts/./node_modules/d3-format/src/defaultLocale.js","webpack://Recharts/./node_modules/d3-format/src/formatGroup.js","webpack://Recharts/./node_modules/d3-format/src/formatNumerals.js","webpack://Recharts/./node_modules/d3-format/src/formatTrim.js","webpack://Recharts/./node_modules/d3-scale/src/tickFormat.js","webpack://Recharts/./node_modules/d3-format/src/precisionPrefix.js","webpack://Recharts/./node_modules/d3-format/src/precisionRound.js","webpack://Recharts/./node_modules/d3-format/src/precisionFixed.js","webpack://Recharts/./node_modules/d3-scale/src/linear.js","webpack://Recharts/./node_modules/d3-scale/src/identity.js","webpack://Recharts/./node_modules/d3-scale/src/nice.js","webpack://Recharts/./node_modules/d3-scale/src/log.js","webpack://Recharts/./node_modules/d3-scale/src/symlog.js","webpack://Recharts/./node_modules/d3-scale/src/pow.js","webpack://Recharts/./node_modules/d3-scale/src/radial.js","webpack://Recharts/./node_modules/d3-array/src/max.js","webpack://Recharts/./node_modules/d3-array/src/min.js","webpack://Recharts/./node_modules/d3-array/src/sort.js","webpack://Recharts/./node_modules/d3-array/src/quickselect.js","webpack://Recharts/./node_modules/d3-array/src/quantile.js","webpack://Recharts/./node_modules/d3-scale/src/quantile.js","webpack://Recharts/./node_modules/d3-scale/src/quantize.js","webpack://Recharts/./node_modules/d3-scale/src/threshold.js","webpack://Recharts/./node_modules/d3-time/src/duration.js","webpack://Recharts/./node_modules/d3-time/src/interval.js","webpack://Recharts/./node_modules/d3-time/src/millisecond.js","webpack://Recharts/./node_modules/d3-time/src/second.js","webpack://Recharts/./node_modules/d3-time/src/minute.js","webpack://Recharts/./node_modules/d3-time/src/hour.js","webpack://Recharts/./node_modules/d3-time/src/day.js","webpack://Recharts/./node_modules/d3-time/src/week.js","webpack://Recharts/./node_modules/d3-time/src/month.js","webpack://Recharts/./node_modules/d3-time/src/year.js","webpack://Recharts/./node_modules/d3-time/src/ticks.js","webpack://Recharts/./node_modules/d3-time-format/src/locale.js","webpack://Recharts/./node_modules/d3-time-format/src/defaultLocale.js","webpack://Recharts/./node_modules/d3-scale/src/time.js","webpack://Recharts/./node_modules/d3-scale/src/utcTime.js","webpack://Recharts/./node_modules/d3-scale/src/sequential.js","webpack://Recharts/./node_modules/d3-scale/src/sequentialQuantile.js","webpack://Recharts/./node_modules/d3-scale/src/diverging.js","webpack://Recharts/./node_modules/d3-interpolate/src/piecewise.js","webpack://Recharts/./src/state/selectors/dataSelectors.ts","webpack://Recharts/./src/util/isDomainSpecifiedByUser.ts","webpack://Recharts/./src/util/scale/util/utils.ts","webpack://Recharts/./src/util/scale/util/arithmetic.ts","webpack://Recharts/./src/util/scale/getNiceTickValues.ts","webpack://Recharts/./src/state/selectors/rootPropsSelectors.ts","webpack://Recharts/./src/polar/defaultPolarAngleAxisProps.tsx","webpack://Recharts/./src/polar/defaultPolarRadiusAxisProps.tsx","webpack://Recharts/./src/state/selectors/combiners/combineAxisRangeWithReverse.ts","webpack://Recharts/./src/state/selectors/polarAxisSelectors.ts","webpack://Recharts/./src/state/selectors/pickAxisType.ts","webpack://Recharts/./src/state/selectors/pickAxisId.ts","webpack://Recharts/./src/util/stacks/getStackSeriesIdentifier.ts","webpack://Recharts/./src/state/selectors/selectTooltipAxisType.ts","webpack://Recharts/./src/state/selectors/selectTooltipAxisId.ts","webpack://Recharts/./src/state/selectors/selectTooltipAxis.ts","webpack://Recharts/./src/state/selectors/combiners/combineDisplayedStackedData.ts","webpack://Recharts/./src/state/types/StackedGraphicalItem.ts","webpack://Recharts/./src/state/selectors/axisSelectors.ts","webpack://Recharts/./src/state/selectors/selectTooltipEventType.ts","webpack://Recharts/./src/state/selectors/combiners/combineActiveLabel.ts","webpack://Recharts/./src/state/tooltipSlice.ts","webpack://Recharts/./src/state/selectors/combiners/combineTooltipInteractionState.ts","webpack://Recharts/./src/state/selectors/combiners/combineActiveTooltipIndex.ts","webpack://Recharts/./src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts","webpack://Recharts/./src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts","webpack://Recharts/./src/state/selectors/selectTooltipPayloadSearcher.ts","webpack://Recharts/./src/state/selectors/selectTooltipState.ts","webpack://Recharts/./src/state/selectors/combiners/combineTooltipPayload.ts","webpack://Recharts/./src/state/selectors/tooltipSelectors.ts","webpack://Recharts/./src/state/selectors/selectTooltipSettings.ts","webpack://Recharts/./src/context/useTooltipAxis.ts","webpack://Recharts/./src/state/selectors/selectors.ts","webpack://Recharts/./src/component/Cursor.tsx","webpack://Recharts/./src/util/cursor/getCursorRectangle.ts","webpack://Recharts/./src/context/tooltipPortalContext.tsx","webpack://Recharts/./src/util/Events.ts","webpack://Recharts/./src/state/optionsSlice.ts","webpack://Recharts/./src/synchronisation/syncSelectors.ts","webpack://Recharts/./src/state/chartDataSlice.ts","webpack://Recharts/./src/synchronisation/useChartSynchronisation.tsx","webpack://Recharts/./src/component/Tooltip.tsx","webpack://Recharts/./src/util/LogUtils.ts","webpack://Recharts/./src/component/ResponsiveContainer.tsx","webpack://Recharts/./src/component/Cell.tsx","webpack://Recharts/./src/util/DOMUtils.ts","webpack://Recharts/./src/util/LRUCache.ts","webpack://Recharts/./src/util/ReduceCSSCalc.ts","webpack://Recharts/./src/component/Text.tsx","webpack://Recharts/./src/component/Label.tsx","webpack://Recharts/./src/component/LabelList.tsx","webpack://Recharts/./src/component/Customized.tsx","webpack://Recharts/./src/shape/Polygon.tsx","webpack://Recharts/./src/shape/Dot.tsx","webpack://Recharts/./src/state/selectors/polarSelectors.ts","webpack://Recharts/./src/state/selectors/polarScaleSelectors.ts","webpack://Recharts/./src/state/selectors/polarGridSelectors.ts","webpack://Recharts/./src/polar/PolarGrid.tsx","webpack://Recharts/./src/state/polarAxisSlice.ts","webpack://Recharts/./src/polar/PolarRadiusAxis.tsx","webpack://Recharts/./src/polar/PolarAngleAxis.tsx","webpack://Recharts/./src/state/selectors/pieSelectors.ts","webpack://Recharts/./src/polar/Pie.tsx","webpack://Recharts/./src/shape/Trapezoid.tsx","webpack://Recharts/./src/util/ActiveShapeUtils.tsx","webpack://Recharts/./src/context/tooltipContext.tsx","webpack://Recharts/./src/state/SetTooltipEntrySettings.tsx","webpack://Recharts/./src/state/SetLegendPayload.ts","webpack://Recharts/./src/util/useAnimationId.tsx","webpack://Recharts/./src/util/useId.ts","webpack://Recharts/./src/context/RegisterGraphicalItemId.tsx","webpack://Recharts/./src/util/useUniqueId.ts","webpack://Recharts/./src/state/graphicalItemsSlice.ts","webpack://Recharts/./src/state/SetGraphicalItem.ts","webpack://Recharts/./node_modules/es-toolkit/dist/function/noop.mjs","webpack://Recharts/./src/animation/JavascriptAnimate.tsx","webpack://Recharts/./src/state/selectors/selectChartOffset.ts","webpack://Recharts/./src/state/selectors/selectPlotArea.ts","webpack://Recharts/./src/hooks.ts","webpack://Recharts/./src/component/ActivePoints.tsx","webpack://Recharts/./src/state/selectors/radarSelectors.ts","webpack://Recharts/./src/polar/Radar.tsx","webpack://Recharts/./src/util/RadialBarUtils.tsx","webpack://Recharts/./node_modules/tiny-invariant/dist/esm/tiny-invariant.js","webpack://Recharts/./src/util/BarUtils.tsx","webpack://Recharts/./src/state/errorBarSlice.ts","webpack://Recharts/./src/context/ErrorBarContext.tsx","webpack://Recharts/./src/cartesian/GraphicalItemClipPath.tsx","webpack://Recharts/./src/cartesian/Bar.tsx","webpack://Recharts/./src/state/selectors/barSelectors.ts","webpack://Recharts/./src/state/selectors/radialBarSelectors.ts","webpack://Recharts/./src/polar/RadialBar.tsx","webpack://Recharts/./src/util/CssPrefixUtils.ts","webpack://Recharts/./src/context/chartDataContext.tsx","webpack://Recharts/./src/context/brushUpdateContext.tsx","webpack://Recharts/./src/state/brushSlice.ts","webpack://Recharts/./src/cartesian/Brush.tsx","webpack://Recharts/./src/util/CartesianUtils.ts","webpack://Recharts/./src/state/referenceElementsSlice.ts","webpack://Recharts/./src/container/ClipPathProvider.tsx","webpack://Recharts/./src/cartesian/ReferenceLine.tsx","webpack://Recharts/./src/cartesian/ReferenceDot.tsx","webpack://Recharts/./src/cartesian/ReferenceArea.tsx","webpack://Recharts/./src/util/ShallowEqual.ts","webpack://Recharts/./src/util/getEveryNthWithCondition.ts","webpack://Recharts/./src/util/TickUtils.ts","webpack://Recharts/./src/cartesian/getTicks.ts","webpack://Recharts/./src/cartesian/getEquidistantTicks.ts","webpack://Recharts/./src/cartesian/CartesianAxis.tsx","webpack://Recharts/./src/cartesian/CartesianGrid.tsx","webpack://Recharts/./src/state/selectors/lineSelectors.ts","webpack://Recharts/./src/cartesian/Line.tsx","webpack://Recharts/./src/state/selectors/areaSelectors.ts","webpack://Recharts/./src/cartesian/Area.tsx","webpack://Recharts/./src/state/cartesianAxisSlice.ts","webpack://Recharts/./src/cartesian/ZAxis.tsx","webpack://Recharts/./src/util/ScatterUtils.tsx","webpack://Recharts/./src/state/selectors/scatterSelectors.ts","webpack://Recharts/./src/cartesian/Scatter.tsx","webpack://Recharts/./src/cartesian/XAxis.tsx","webpack://Recharts/./src/util/YAxisUtils.tsx","webpack://Recharts/./src/cartesian/YAxis.tsx","webpack://Recharts/./src/animation/CSSTransitionAnimate.tsx","webpack://Recharts/./src/cartesian/ErrorBar.tsx","webpack://Recharts/./node_modules/react-redux/es/utils/batch.js","webpack://Recharts/./node_modules/react-redux/es/components/Context.js","webpack://Recharts/./node_modules/react-redux/es/hooks/useSelector.js","webpack://Recharts/./node_modules/react-redux/es/utils/Subscription.js","webpack://Recharts/./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","webpack://Recharts/./node_modules/react-redux/es/components/connect.js","webpack://Recharts/./node_modules/react-redux/es/components/Provider.js","webpack://Recharts/./node_modules/react-redux/es/index.js","webpack://Recharts/./src/state/selectors/selectActivePropsFromChartPointer.ts","webpack://Recharts/./src/util/getChartPointer.ts","webpack://Recharts/./src/state/mouseEventsMiddleware.ts","webpack://Recharts/./src/state/reduxDevtoolsJsonStringifyReplacer.ts","webpack://Recharts/./src/state/rootPropsSlice.ts","webpack://Recharts/./src/state/polarOptionsSlice.ts","webpack://Recharts/./src/state/keyboardEventsMiddleware.ts","webpack://Recharts/./src/state/externalEventsMiddleware.ts","webpack://Recharts/./src/state/selectors/touchSelectors.ts","webpack://Recharts/./src/state/touchEventsMiddleware.ts","webpack://Recharts/./src/state/store.ts","webpack://Recharts/./src/state/RechartsStoreProvider.tsx","webpack://Recharts/./src/state/ReportMainChartProps.ts","webpack://Recharts/./src/state/ReportChartProps.tsx","webpack://Recharts/./src/container/RootSurface.tsx","webpack://Recharts/./src/chart/RechartsWrapper.tsx","webpack://Recharts/./src/util/useReportScale.ts","webpack://Recharts/./src/chart/CategoricalChart.tsx","webpack://Recharts/./src/chart/CartesianChart.tsx","webpack://Recharts/./src/chart/LineChart.tsx","webpack://Recharts/./src/chart/BarChart.tsx","webpack://Recharts/./src/state/ReportPolarOptions.tsx","webpack://Recharts/./src/chart/PolarChart.tsx","webpack://Recharts/./src/chart/PieChart.tsx","webpack://Recharts/./src/chart/Treemap.tsx","webpack://Recharts/./src/chart/Sankey.tsx","webpack://Recharts/./src/chart/RadarChart.tsx","webpack://Recharts/./src/chart/ScatterChart.tsx","webpack://Recharts/./src/chart/AreaChart.tsx","webpack://Recharts/./src/chart/RadialBarChart.tsx","webpack://Recharts/./src/chart/ComposedChart.tsx","webpack://Recharts/./src/chart/SunburstChart.tsx","webpack://Recharts/./src/util/FunnelUtils.tsx","webpack://Recharts/./src/state/selectors/funnelSelectors.ts","webpack://Recharts/./src/cartesian/Funnel.tsx","webpack://Recharts/./src/chart/FunnelChart.tsx"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"), require(\"react-is\"), require(\"react-dom\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\", \"react-is\", \"react-dom\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Recharts\"] = factory(require(\"react\"), require(\"react-is\"), require(\"react-dom\"));\n\telse\n\t\troot[\"Recharts\"] = factory(root[\"React\"], root[\"ReactIs\"], root[\"ReactDOM\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__5442__, __WEBPACK_EXTERNAL_MODULE__2751__, __WEBPACK_EXTERNAL_MODULE__6003__) => {\nreturn ","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst debounce$1 = require('../../function/debounce.js');\n\nfunction debounce(func, debounceMs = 0, options = {}) {\n    if (typeof options !== 'object') {\n        options = {};\n    }\n    const { leading = false, trailing = true, maxWait } = options;\n    const edges = Array(2);\n    if (leading) {\n        edges[0] = 'leading';\n    }\n    if (trailing) {\n        edges[1] = 'trailing';\n    }\n    let result = undefined;\n    let pendingAt = null;\n    const _debounced = debounce$1.debounce(function (...args) {\n        result = func.apply(this, args);\n        pendingAt = null;\n    }, debounceMs, { edges });\n    const debounced = function (...args) {\n        if (maxWait != null) {\n            if (pendingAt === null) {\n                pendingAt = Date.now();\n            }\n            if (Date.now() - pendingAt >= maxWait) {\n                result = func.apply(this, args);\n                pendingAt = Date.now();\n                _debounced.cancel();\n                _debounced.schedule();\n                return result;\n            }\n        }\n        _debounced.apply(this, args);\n        return result;\n    };\n    const flush = () => {\n        _debounced.flush();\n        return result;\n    };\n    debounced.cancel = _debounced.cancel;\n    debounced.flush = flush;\n    return debounced;\n}\n\nexports.debounce = debounce;\n","module.exports = require('../dist/compat/array/last.js').last;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isLength = require('../../predicate/isLength.js');\n\nfunction isArrayLike(value) {\n    return value != null && typeof value !== 'function' && isLength.isLength(value.length);\n}\n\nexports.isArrayLike = isArrayLike;\n","module.exports = require('../dist/compat/array/sortBy.js').sortBy;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n","module.exports = require('../dist/compat/object/get.js').get;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isIndex = require('./isIndex.js');\nconst isArrayLike = require('../predicate/isArrayLike.js');\nconst isObject = require('../predicate/isObject.js');\nconst eq = require('../util/eq.js');\n\nfunction isIterateeCall(value, index, object) {\n    if (!isObject.isObject(object)) {\n        return false;\n    }\n    if ((typeof index === 'number' && isArrayLike.isArrayLike(object) && isIndex.isIndex(index) && index < object.length) ||\n        (typeof index === 'string' && index in object)) {\n        return eq.eq(object[index], value);\n    }\n    return false;\n}\n\nexports.isIterateeCall = isIterateeCall;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction maxBy(items, getValue) {\n    if (items.length === 0) {\n        return undefined;\n    }\n    let maxElement = items[0];\n    let max = getValue(maxElement);\n    for (let i = 1; i < items.length; i++) {\n        const element = items[i];\n        const value = getValue(element);\n        if (value > max) {\n            max = value;\n            maxElement = element;\n        }\n    }\n    return maxElement;\n}\n\nexports.maxBy = maxBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction last(arr) {\n    return arr[arr.length - 1];\n}\n\nexports.last = last;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isMatchWith = require('./isMatchWith.js');\n\nfunction isMatch(target, source) {\n    return isMatchWith.isMatchWith(target, source, () => undefined);\n}\n\nexports.isMatch = isMatch;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst minBy$1 = require('../../array/minBy.js');\nconst identity = require('../../function/identity.js');\nconst iteratee = require('../util/iteratee.js');\n\nfunction minBy(items, iteratee$1) {\n    if (items == null) {\n        return undefined;\n    }\n    return minBy$1.minBy(Array.from(items), iteratee.iteratee(iteratee$1 ?? identity.identity));\n}\n\nexports.minBy = minBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isPlainObject = require('./isPlainObject.js');\nconst getSymbols = require('../compat/_internal/getSymbols.js');\nconst getTag = require('../compat/_internal/getTag.js');\nconst tags = require('../compat/_internal/tags.js');\nconst eq = require('../compat/util/eq.js');\n\nfunction isEqualWith(a, b, areValuesEqual) {\n    return isEqualWithImpl(a, b, undefined, undefined, undefined, undefined, areValuesEqual);\n}\nfunction isEqualWithImpl(a, b, property, aParent, bParent, stack, areValuesEqual) {\n    const result = areValuesEqual(a, b, property, aParent, bParent, stack);\n    if (result !== undefined) {\n        return result;\n    }\n    if (typeof a === typeof b) {\n        switch (typeof a) {\n            case 'bigint':\n            case 'string':\n            case 'boolean':\n            case 'symbol':\n            case 'undefined': {\n                return a === b;\n            }\n            case 'number': {\n                return a === b || Object.is(a, b);\n            }\n            case 'function': {\n                return a === b;\n            }\n            case 'object': {\n                return areObjectsEqual(a, b, stack, areValuesEqual);\n            }\n        }\n    }\n    return areObjectsEqual(a, b, stack, areValuesEqual);\n}\nfunction areObjectsEqual(a, b, stack, areValuesEqual) {\n    if (Object.is(a, b)) {\n        return true;\n    }\n    let aTag = getTag.getTag(a);\n    let bTag = getTag.getTag(b);\n    if (aTag === tags.argumentsTag) {\n        aTag = tags.objectTag;\n    }\n    if (bTag === tags.argumentsTag) {\n        bTag = tags.objectTag;\n    }\n    if (aTag !== bTag) {\n        return false;\n    }\n    switch (aTag) {\n        case tags.stringTag:\n            return a.toString() === b.toString();\n        case tags.numberTag: {\n            const x = a.valueOf();\n            const y = b.valueOf();\n            return eq.eq(x, y);\n        }\n        case tags.booleanTag:\n        case tags.dateTag:\n        case tags.symbolTag:\n            return Object.is(a.valueOf(), b.valueOf());\n        case tags.regexpTag: {\n            return a.source === b.source && a.flags === b.flags;\n        }\n        case tags.functionTag: {\n            return a === b;\n        }\n    }\n    stack = stack ?? new Map();\n    const aStack = stack.get(a);\n    const bStack = stack.get(b);\n    if (aStack != null && bStack != null) {\n        return aStack === b;\n    }\n    stack.set(a, b);\n    stack.set(b, a);\n    try {\n        switch (aTag) {\n            case tags.mapTag: {\n                if (a.size !== b.size) {\n                    return false;\n                }\n                for (const [key, value] of a.entries()) {\n                    if (!b.has(key) || !isEqualWithImpl(value, b.get(key), key, a, b, stack, areValuesEqual)) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            case tags.setTag: {\n                if (a.size !== b.size) {\n                    return false;\n                }\n                const aValues = Array.from(a.values());\n                const bValues = Array.from(b.values());\n                for (let i = 0; i < aValues.length; i++) {\n                    const aValue = aValues[i];\n                    const index = bValues.findIndex(bValue => {\n                        return isEqualWithImpl(aValue, bValue, undefined, a, b, stack, areValuesEqual);\n                    });\n                    if (index === -1) {\n                        return false;\n                    }\n                    bValues.splice(index, 1);\n                }\n                return true;\n            }\n            case tags.arrayTag:\n            case tags.uint8ArrayTag:\n            case tags.uint8ClampedArrayTag:\n            case tags.uint16ArrayTag:\n            case tags.uint32ArrayTag:\n            case tags.bigUint64ArrayTag:\n            case tags.int8ArrayTag:\n            case tags.int16ArrayTag:\n            case tags.int32ArrayTag:\n            case tags.bigInt64ArrayTag:\n            case tags.float32ArrayTag:\n            case tags.float64ArrayTag: {\n                if (typeof Buffer !== 'undefined' && Buffer.isBuffer(a) !== Buffer.isBuffer(b)) {\n                    return false;\n                }\n                if (a.length !== b.length) {\n                    return false;\n                }\n                for (let i = 0; i < a.length; i++) {\n                    if (!isEqualWithImpl(a[i], b[i], i, a, b, stack, areValuesEqual)) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            case tags.arrayBufferTag: {\n                if (a.byteLength !== b.byteLength) {\n                    return false;\n                }\n                return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);\n            }\n            case tags.dataViewTag: {\n                if (a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset) {\n                    return false;\n                }\n                return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);\n            }\n            case tags.errorTag: {\n                return a.name === b.name && a.message === b.message;\n            }\n            case tags.objectTag: {\n                const areEqualInstances = areObjectsEqual(a.constructor, b.constructor, stack, areValuesEqual) ||\n                    (isPlainObject.isPlainObject(a) && isPlainObject.isPlainObject(b));\n                if (!areEqualInstances) {\n                    return false;\n                }\n                const aKeys = [...Object.keys(a), ...getSymbols.getSymbols(a)];\n                const bKeys = [...Object.keys(b), ...getSymbols.getSymbols(b)];\n                if (aKeys.length !== bKeys.length) {\n                    return false;\n                }\n                for (let i = 0; i < aKeys.length; i++) {\n                    const propKey = aKeys[i];\n                    const aProp = a[propKey];\n                    if (!Object.hasOwn(b, propKey)) {\n                        return false;\n                    }\n                    const bProp = b[propKey];\n                    if (!isEqualWithImpl(aProp, bProp, propKey, a, b, stack, areValuesEqual)) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n            default: {\n                return false;\n            }\n        }\n    }\n    finally {\n        stack.delete(a);\n        stack.delete(b);\n    }\n}\n\nexports.isEqualWith = isEqualWith;\n","module.exports = require('../dist/compat/array/uniqBy.js').uniqBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst last$1 = require('../../array/last.js');\nconst toArray = require('../_internal/toArray.js');\nconst isArrayLike = require('../predicate/isArrayLike.js');\n\nfunction last(array) {\n    if (!isArrayLike.isArrayLike(array)) {\n        return undefined;\n    }\n    return last$1.last(toArray.toArray(array));\n}\n\nexports.last = last;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isSymbol(value) {\n    return typeof value === 'symbol' || value instanceof Symbol;\n}\n\nexports.isSymbol = isSymbol;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction toKey(value) {\n    if (typeof value === 'string' || typeof value === 'symbol') {\n        return value;\n    }\n    if (Object.is(value?.valueOf?.(), -0)) {\n        return '-0';\n    }\n    return String(value);\n}\n\nexports.toKey = toKey;\n","module.exports = require('../dist/compat/object/omit.js').omit;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isObjectLike(value) {\n    return typeof value === 'object' && value !== null;\n}\n\nexports.isObjectLike = isObjectLike;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction getTag(value) {\n    if (value == null) {\n        return value === undefined ? '[object Undefined]' : '[object Null]';\n    }\n    return Object.prototype.toString.call(value);\n}\n\nexports.getTag = getTag;\n","module.exports = require('../dist/compat/math/sumBy.js').sumBy;\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n  shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useSyncExternalStore = shim.useSyncExternalStore,\n  useRef = React.useRef,\n  useEffect = React.useEffect,\n  useMemo = React.useMemo,\n  useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot,\n  selector,\n  isEqual\n) {\n  var instRef = useRef(null);\n  if (null === instRef.current) {\n    var inst = { hasValue: !1, value: null };\n    instRef.current = inst;\n  } else inst = instRef.current;\n  instRef = useMemo(\n    function () {\n      function memoizedSelector(nextSnapshot) {\n        if (!hasMemo) {\n          hasMemo = !0;\n          memoizedSnapshot = nextSnapshot;\n          nextSnapshot = selector(nextSnapshot);\n          if (void 0 !== isEqual && inst.hasValue) {\n            var currentSelection = inst.value;\n            if (isEqual(currentSelection, nextSnapshot))\n              return (memoizedSelection = currentSelection);\n          }\n          return (memoizedSelection = nextSnapshot);\n        }\n        currentSelection = memoizedSelection;\n        if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n        var nextSelection = selector(nextSnapshot);\n        if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n          return (memoizedSnapshot = nextSnapshot), currentSelection;\n        memoizedSnapshot = nextSnapshot;\n        return (memoizedSelection = nextSelection);\n      }\n      var hasMemo = !1,\n        memoizedSnapshot,\n        memoizedSelection,\n        maybeGetServerSnapshot =\n          void 0 === getServerSnapshot ? null : getServerSnapshot;\n      return [\n        function () {\n          return memoizedSelector(getSnapshot());\n        },\n        null === maybeGetServerSnapshot\n          ? void 0\n          : function () {\n              return memoizedSelector(maybeGetServerSnapshot());\n            }\n      ];\n    },\n    [getSnapshot, getServerSnapshot, selector, isEqual]\n  );\n  var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n  useEffect(\n    function () {\n      inst.hasValue = !0;\n      inst.value = value;\n    },\n    [value]\n  );\n  useDebugValue(value);\n  return value;\n};\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isPrimitive(value) {\n    return value == null || (typeof value !== 'object' && typeof value !== 'function');\n}\n\nexports.isPrimitive = isPrimitive;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__2751__;","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst uniqBy$1 = require('../../array/uniqBy.js');\nconst identity = require('../../function/identity.js');\nconst isArrayLikeObject = require('../predicate/isArrayLikeObject.js');\nconst iteratee = require('../util/iteratee.js');\n\nfunction uniqBy(array, iteratee$1 = identity.identity) {\n    if (!isArrayLikeObject.isArrayLikeObject(array)) {\n        return [];\n    }\n    return uniqBy$1.uniqBy(Array.from(array), iteratee.iteratee(iteratee$1));\n}\n\nexports.uniqBy = uniqBy;\n","module.exports = require('../dist/compat/predicate/isPlainObject.js').isPlainObject;\n","module.exports = require('../dist/compat/math/minBy.js').minBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst getTag = require('../_internal/getTag.js');\n\nfunction isArguments(value) {\n    return value !== null && typeof value === 'object' && getTag.getTag(value) === '[object Arguments]';\n}\n\nexports.isArguments = isArguments;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction toPath(deepKey) {\n    const result = [];\n    const length = deepKey.length;\n    if (length === 0) {\n        return result;\n    }\n    let index = 0;\n    let key = '';\n    let quoteChar = '';\n    let bracket = false;\n    if (deepKey.charCodeAt(0) === 46) {\n        result.push('');\n        index++;\n    }\n    while (index < length) {\n        const char = deepKey[index];\n        if (quoteChar) {\n            if (char === '\\\\' && index + 1 < length) {\n                index++;\n                key += deepKey[index];\n            }\n            else if (char === quoteChar) {\n                quoteChar = '';\n            }\n            else {\n                key += char;\n            }\n        }\n        else if (bracket) {\n            if (char === '\"' || char === \"'\") {\n                quoteChar = char;\n            }\n            else if (char === ']') {\n                bracket = false;\n                result.push(key);\n                key = '';\n            }\n            else {\n                key += char;\n            }\n        }\n        else {\n            if (char === '[') {\n                bracket = true;\n                if (key) {\n                    result.push(key);\n                    key = '';\n                }\n            }\n            else if (char === '.') {\n                if (key) {\n                    result.push(key);\n                    key = '';\n                }\n            }\n            else {\n                key += char;\n            }\n        }\n        index++;\n    }\n    if (key) {\n        result.push(key);\n    }\n    return result;\n}\n\nexports.toPath = toPath;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isMatch = require('./isMatch.js');\nconst toKey = require('../_internal/toKey.js');\nconst cloneDeep = require('../object/cloneDeep.js');\nconst get = require('../object/get.js');\nconst has = require('../object/has.js');\n\nfunction matchesProperty(property, source) {\n    switch (typeof property) {\n        case 'object': {\n            if (Object.is(property?.valueOf(), -0)) {\n                property = '-0';\n            }\n            break;\n        }\n        case 'number': {\n            property = toKey.toKey(property);\n            break;\n        }\n    }\n    source = cloneDeep.cloneDeep(source);\n    return function (target) {\n        const result = get.get(target, property);\n        if (result === undefined) {\n            return has.has(target, property);\n        }\n        if (source === undefined) {\n            return result === undefined;\n        }\n        return isMatch.isMatch(result, source);\n    };\n}\n\nexports.matchesProperty = matchesProperty;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst compareValues = require('../_internal/compareValues.js');\nconst isKey = require('../_internal/isKey.js');\nconst toPath = require('../util/toPath.js');\n\nfunction orderBy(collection, criteria, orders, guard) {\n    if (collection == null) {\n        return [];\n    }\n    orders = guard ? undefined : orders;\n    if (!Array.isArray(collection)) {\n        collection = Object.values(collection);\n    }\n    if (!Array.isArray(criteria)) {\n        criteria = criteria == null ? [null] : [criteria];\n    }\n    if (criteria.length === 0) {\n        criteria = [null];\n    }\n    if (!Array.isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n    }\n    orders = orders.map(order => String(order));\n    const getValueByNestedPath = (object, path) => {\n        let target = object;\n        for (let i = 0; i < path.length && target != null; ++i) {\n            target = target[path[i]];\n        }\n        return target;\n    };\n    const getValueByCriterion = (criterion, object) => {\n        if (object == null || criterion == null) {\n            return object;\n        }\n        if (typeof criterion === 'object' && 'key' in criterion) {\n            if (Object.hasOwn(object, criterion.key)) {\n                return object[criterion.key];\n            }\n            return getValueByNestedPath(object, criterion.path);\n        }\n        if (typeof criterion === 'function') {\n            return criterion(object);\n        }\n        if (Array.isArray(criterion)) {\n            return getValueByNestedPath(object, criterion);\n        }\n        if (typeof object === 'object') {\n            return object[criterion];\n        }\n        return object;\n    };\n    const preparedCriteria = criteria.map((criterion) => {\n        if (Array.isArray(criterion) && criterion.length === 1) {\n            criterion = criterion[0];\n        }\n        if (criterion == null || typeof criterion === 'function' || Array.isArray(criterion) || isKey.isKey(criterion)) {\n            return criterion;\n        }\n        return { key: criterion, path: toPath.toPath(criterion) };\n    });\n    const preparedCollection = collection.map(item => ({\n        original: item,\n        criteria: preparedCriteria.map((criterion) => getValueByCriterion(criterion, item)),\n    }));\n    return preparedCollection\n        .slice()\n        .sort((a, b) => {\n        for (let i = 0; i < preparedCriteria.length; i++) {\n            const comparedResult = compareValues.compareValues(a.criteria[i], b.criteria[i], orders[i]);\n            if (comparedResult !== 0) {\n                return comparedResult;\n            }\n        }\n        return 0;\n    })\n        .map(item => item.original);\n}\n\nexports.orderBy = orderBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst get = require('./get.js');\n\nfunction property(path) {\n    return function (object) {\n        return get.get(object, path);\n    };\n}\n\nexports.property = property;\n","module.exports = require('../dist/compat/math/range.js').range;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction getPriority(a) {\n    if (typeof a === 'symbol') {\n        return 1;\n    }\n    if (a === null) {\n        return 2;\n    }\n    if (a === undefined) {\n        return 3;\n    }\n    if (a !== a) {\n        return 4;\n    }\n    return 0;\n}\nconst compareValues = (a, b, order) => {\n    if (a !== b) {\n        const aPriority = getPriority(a);\n        const bPriority = getPriority(b);\n        if (aPriority === bPriority && aPriority === 0) {\n            if (a < b) {\n                return order === 'desc' ? 1 : -1;\n            }\n            if (a > b) {\n                return order === 'desc' ? -1 : 1;\n            }\n        }\n        return order === 'desc' ? bPriority - aPriority : aPriority - bPriority;\n    }\n    return 0;\n};\n\nexports.compareValues = compareValues;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst iteratee = require('../util/iteratee.js');\n\nfunction sumBy(array, iteratee$1) {\n    if (!array || !array.length) {\n        return 0;\n    }\n    if (iteratee$1 != null) {\n        iteratee$1 = iteratee.iteratee(iteratee$1);\n    }\n    let result = undefined;\n    for (let i = 0; i < array.length; i++) {\n        const current = iteratee$1 ? iteratee$1(array[i]) : array[i];\n        if (current !== undefined) {\n            if (result === undefined) {\n                result = current;\n            }\n            else {\n                result += current;\n            }\n        }\n    }\n    return result;\n}\n\nexports.sumBy = sumBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst cloneDeepWith = require('./cloneDeepWith.js');\n\nfunction cloneDeep(obj) {\n    return cloneDeepWith.cloneDeepWithImpl(obj, undefined, obj, new Map(), undefined);\n}\n\nexports.cloneDeep = cloneDeep;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isTypedArray(x) {\n    return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n\nexports.isTypedArray = isTypedArray;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst cloneDeepWith = require('./cloneDeepWith.js');\n\nfunction cloneDeep(obj) {\n    return cloneDeepWith.cloneDeepWith(obj);\n}\n\nexports.cloneDeep = cloneDeep;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst getSymbols = require('../compat/_internal/getSymbols.js');\nconst getTag = require('../compat/_internal/getTag.js');\nconst tags = require('../compat/_internal/tags.js');\nconst isPrimitive = require('../predicate/isPrimitive.js');\nconst isTypedArray = require('../predicate/isTypedArray.js');\n\nfunction cloneDeepWith(obj, cloneValue) {\n    return cloneDeepWithImpl(obj, undefined, obj, new Map(), cloneValue);\n}\nfunction cloneDeepWithImpl(valueToClone, keyToClone, objectToClone, stack = new Map(), cloneValue = undefined) {\n    const cloned = cloneValue?.(valueToClone, keyToClone, objectToClone, stack);\n    if (cloned != null) {\n        return cloned;\n    }\n    if (isPrimitive.isPrimitive(valueToClone)) {\n        return valueToClone;\n    }\n    if (stack.has(valueToClone)) {\n        return stack.get(valueToClone);\n    }\n    if (Array.isArray(valueToClone)) {\n        const result = new Array(valueToClone.length);\n        stack.set(valueToClone, result);\n        for (let i = 0; i < valueToClone.length; i++) {\n            result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);\n        }\n        if (Object.hasOwn(valueToClone, 'index')) {\n            result.index = valueToClone.index;\n        }\n        if (Object.hasOwn(valueToClone, 'input')) {\n            result.input = valueToClone.input;\n        }\n        return result;\n    }\n    if (valueToClone instanceof Date) {\n        return new Date(valueToClone.getTime());\n    }\n    if (valueToClone instanceof RegExp) {\n        const result = new RegExp(valueToClone.source, valueToClone.flags);\n        result.lastIndex = valueToClone.lastIndex;\n        return result;\n    }\n    if (valueToClone instanceof Map) {\n        const result = new Map();\n        stack.set(valueToClone, result);\n        for (const [key, value] of valueToClone) {\n            result.set(key, cloneDeepWithImpl(value, key, objectToClone, stack, cloneValue));\n        }\n        return result;\n    }\n    if (valueToClone instanceof Set) {\n        const result = new Set();\n        stack.set(valueToClone, result);\n        for (const value of valueToClone) {\n            result.add(cloneDeepWithImpl(value, undefined, objectToClone, stack, cloneValue));\n        }\n        return result;\n    }\n    if (typeof Buffer !== 'undefined' && Buffer.isBuffer(valueToClone)) {\n        return valueToClone.subarray();\n    }\n    if (isTypedArray.isTypedArray(valueToClone)) {\n        const result = new (Object.getPrototypeOf(valueToClone).constructor)(valueToClone.length);\n        stack.set(valueToClone, result);\n        for (let i = 0; i < valueToClone.length; i++) {\n            result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);\n        }\n        return result;\n    }\n    if (valueToClone instanceof ArrayBuffer ||\n        (typeof SharedArrayBuffer !== 'undefined' && valueToClone instanceof SharedArrayBuffer)) {\n        return valueToClone.slice(0);\n    }\n    if (valueToClone instanceof DataView) {\n        const result = new DataView(valueToClone.buffer.slice(0), valueToClone.byteOffset, valueToClone.byteLength);\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (typeof File !== 'undefined' && valueToClone instanceof File) {\n        const result = new File([valueToClone], valueToClone.name, {\n            type: valueToClone.type,\n        });\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (valueToClone instanceof Blob) {\n        const result = new Blob([valueToClone], { type: valueToClone.type });\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (valueToClone instanceof Error) {\n        const result = new valueToClone.constructor();\n        stack.set(valueToClone, result);\n        result.message = valueToClone.message;\n        result.name = valueToClone.name;\n        result.stack = valueToClone.stack;\n        result.cause = valueToClone.cause;\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    if (typeof valueToClone === 'object' && isCloneableObject(valueToClone)) {\n        const result = Object.create(Object.getPrototypeOf(valueToClone));\n        stack.set(valueToClone, result);\n        copyProperties(result, valueToClone, objectToClone, stack, cloneValue);\n        return result;\n    }\n    return valueToClone;\n}\nfunction copyProperties(target, source, objectToClone = target, stack, cloneValue) {\n    const keys = [...Object.keys(source), ...getSymbols.getSymbols(source)];\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const descriptor = Object.getOwnPropertyDescriptor(target, key);\n        if (descriptor == null || descriptor.writable) {\n            target[key] = cloneDeepWithImpl(source[key], key, objectToClone, stack, cloneValue);\n        }\n    }\n}\nfunction isCloneableObject(object) {\n    switch (getTag.getTag(object)) {\n        case tags.argumentsTag:\n        case tags.arrayTag:\n        case tags.arrayBufferTag:\n        case tags.dataViewTag:\n        case tags.booleanTag:\n        case tags.dateTag:\n        case tags.float32ArrayTag:\n        case tags.float64ArrayTag:\n        case tags.int8ArrayTag:\n        case tags.int16ArrayTag:\n        case tags.int32ArrayTag:\n        case tags.mapTag:\n        case tags.numberTag:\n        case tags.objectTag:\n        case tags.regexpTag:\n        case tags.setTag:\n        case tags.stringTag:\n        case tags.symbolTag:\n        case tags.uint8ArrayTag:\n        case tags.uint8ClampedArrayTag:\n        case tags.uint16ArrayTag:\n        case tags.uint32ArrayTag: {\n            return true;\n        }\n        default: {\n            return false;\n        }\n    }\n}\n\nexports.cloneDeepWith = cloneDeepWith;\nexports.cloneDeepWithImpl = cloneDeepWithImpl;\nexports.copyProperties = copyProperties;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isSymbol = require('../predicate/isSymbol.js');\n\nconst regexIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/;\nconst regexIsPlainProp = /^\\w*$/;\nfunction isKey(value, object) {\n    if (Array.isArray(value)) {\n        return false;\n    }\n    if (typeof value === 'number' || typeof value === 'boolean' || value == null || isSymbol.isSymbol(value)) {\n        return true;\n    }\n    return ((typeof value === 'string' && (regexIsPlainProp.test(value) || !regexIsDeepProp.test(value))) ||\n        (object != null && Object.hasOwn(object, value)));\n}\n\nexports.isKey = isKey;\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst unset = require('./unset.js');\nconst cloneDeep = require('../../object/cloneDeep.js');\n\nfunction omit(obj, ...keysArr) {\n    if (obj == null) {\n        return {};\n    }\n    const result = cloneDeep.cloneDeep(obj);\n    for (let i = 0; i < keysArr.length; i++) {\n        let keys = keysArr[i];\n        switch (typeof keys) {\n            case 'object': {\n                if (!Array.isArray(keys)) {\n                    keys = Array.from(keys);\n                }\n                for (let j = 0; j < keys.length; j++) {\n                    const key = keys[j];\n                    unset.unset(result, key);\n                }\n                break;\n            }\n            case 'string':\n            case 'symbol':\n            case 'number': {\n                unset.unset(result, keys);\n                break;\n            }\n        }\n    }\n    return result;\n}\n\nexports.omit = omit;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isUnsafeProperty = require('../../_internal/isUnsafeProperty.js');\nconst isDeepKey = require('../_internal/isDeepKey.js');\nconst toKey = require('../_internal/toKey.js');\nconst toPath = require('../util/toPath.js');\n\nfunction get(object, path, defaultValue) {\n    if (object == null) {\n        return defaultValue;\n    }\n    switch (typeof path) {\n        case 'string': {\n            if (isUnsafeProperty.isUnsafeProperty(path)) {\n                return defaultValue;\n            }\n            const result = object[path];\n            if (result === undefined) {\n                if (isDeepKey.isDeepKey(path)) {\n                    return get(object, toPath.toPath(path), defaultValue);\n                }\n                else {\n                    return defaultValue;\n                }\n            }\n            return result;\n        }\n        case 'number':\n        case 'symbol': {\n            if (typeof path === 'number') {\n                path = toKey.toKey(path);\n            }\n            const result = object[path];\n            if (result === undefined) {\n                return defaultValue;\n            }\n            return result;\n        }\n        default: {\n            if (Array.isArray(path)) {\n                return getWithPath(object, path, defaultValue);\n            }\n            if (Object.is(path?.valueOf(), -0)) {\n                path = '-0';\n            }\n            else {\n                path = String(path);\n            }\n            if (isUnsafeProperty.isUnsafeProperty(path)) {\n                return defaultValue;\n            }\n            const result = object[path];\n            if (result === undefined) {\n                return defaultValue;\n            }\n            return result;\n        }\n    }\n}\nfunction getWithPath(object, path, defaultValue) {\n    if (path.length === 0) {\n        return defaultValue;\n    }\n    let current = object;\n    for (let index = 0; index < path.length; index++) {\n        if (current == null) {\n            return defaultValue;\n        }\n        if (isUnsafeProperty.isUnsafeProperty(path[index])) {\n            return defaultValue;\n        }\n        current = current[path[index]];\n    }\n    if (current === undefined) {\n        return defaultValue;\n    }\n    return current;\n}\n\nexports.get = get;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst orderBy = require('./orderBy.js');\nconst flatten = require('../../array/flatten.js');\nconst isIterateeCall = require('../_internal/isIterateeCall.js');\n\nfunction sortBy(collection, ...criteria) {\n    const length = criteria.length;\n    if (length > 1 && isIterateeCall.isIterateeCall(collection, criteria[0], criteria[1])) {\n        criteria = [];\n    }\n    else if (length > 2 && isIterateeCall.isIterateeCall(criteria[0], criteria[1], criteria[2])) {\n        criteria = [criteria[0]];\n    }\n    return orderBy.orderBy(collection, flatten.flatten(criteria), ['asc']);\n}\n\nexports.sortBy = sortBy;\n","module.exports = require('../dist/compat/function/throttle.js').throttle;\n","module.exports = require('../dist/compat/math/maxBy.js').maxBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction toArray(value) {\n    return Array.isArray(value) ? value : Array.from(value);\n}\n\nexports.toArray = toArray;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst toNumber = require('./toNumber.js');\n\nfunction toFinite(value) {\n    if (!value) {\n        return value === 0 ? value : 0;\n    }\n    value = toNumber.toNumber(value);\n    if (value === Infinity || value === -Infinity) {\n        const sign = value < 0 ? -1 : 1;\n        return sign * Number.MAX_VALUE;\n    }\n    return value === value ? value : 0;\n}\n\nexports.toFinite = toFinite;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isObject(value) {\n    return value !== null && (typeof value === 'object' || typeof value === 'function');\n}\n\nexports.isObject = isObject;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isIterateeCall = require('../_internal/isIterateeCall.js');\nconst toFinite = require('../util/toFinite.js');\n\nfunction range(start, end, step) {\n    if (step && typeof step !== 'number' && isIterateeCall.isIterateeCall(start, end, step)) {\n        end = step = undefined;\n    }\n    start = toFinite.toFinite(start);\n    if (end === undefined) {\n        end = start;\n        start = 0;\n    }\n    else {\n        end = toFinite.toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite.toFinite(step);\n    const length = Math.max(Math.ceil((end - start) / (step || 1)), 0);\n    const result = new Array(length);\n    for (let index = 0; index < length; index++) {\n        result[index] = start;\n        start += step;\n    }\n    return result;\n}\n\nexports.range = range;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isDeepKey(key) {\n    switch (typeof key) {\n        case 'number':\n        case 'symbol': {\n            return false;\n        }\n        case 'string': {\n            return key.includes('.') || key.includes('[') || key.includes(']');\n        }\n    }\n}\n\nexports.isDeepKey = isDeepKey;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst debounce = require('./debounce.js');\n\nfunction throttle(func, throttleMs = 0, options = {}) {\n    const { leading = true, trailing = true } = options;\n    return debounce.debounce(func, throttleMs, {\n        leading,\n        maxWait: throttleMs,\n        trailing,\n    });\n}\n\nexports.throttle = throttle;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__5442__;","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction flatten(arr, depth = 1) {\n    const result = [];\n    const flooredDepth = Math.floor(depth);\n    const recursive = (arr, currentDepth) => {\n        for (let i = 0; i < arr.length; i++) {\n            const item = arr[i];\n            if (Array.isArray(item) && currentDepth < flooredDepth) {\n                recursive(item, currentDepth + 1);\n            }\n            else {\n                result.push(item);\n            }\n        }\n    };\n    recursive(arr, 0);\n    return result;\n}\n\nexports.flatten = flatten;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst maxBy$1 = require('../../array/maxBy.js');\nconst identity = require('../../function/identity.js');\nconst iteratee = require('../util/iteratee.js');\n\nfunction maxBy(items, iteratee$1) {\n    if (items == null) {\n        return undefined;\n    }\n    return maxBy$1.maxBy(Array.from(items), iteratee.iteratee(iteratee$1 ?? identity.identity));\n}\n\nexports.maxBy = maxBy;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__6003__;","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction getSymbols(object) {\n    return Object.getOwnPropertySymbols(object).filter(symbol => Object.prototype.propertyIsEnumerable.call(object, symbol));\n}\n\nexports.getSymbols = getSymbols;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction identity(x) {\n    return x;\n}\n\nexports.identity = identity;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction noop() { }\n\nexports.noop = noop;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction eq(value, other) {\n    return value === other || (Number.isNaN(value) && Number.isNaN(other));\n}\n\nexports.eq = eq;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction debounce(func, debounceMs, { signal, edges } = {}) {\n    let pendingThis = undefined;\n    let pendingArgs = null;\n    const leading = edges != null && edges.includes('leading');\n    const trailing = edges == null || edges.includes('trailing');\n    const invoke = () => {\n        if (pendingArgs !== null) {\n            func.apply(pendingThis, pendingArgs);\n            pendingThis = undefined;\n            pendingArgs = null;\n        }\n    };\n    const onTimerEnd = () => {\n        if (trailing) {\n            invoke();\n        }\n        cancel();\n    };\n    let timeoutId = null;\n    const schedule = () => {\n        if (timeoutId != null) {\n            clearTimeout(timeoutId);\n        }\n        timeoutId = setTimeout(() => {\n            timeoutId = null;\n            onTimerEnd();\n        }, debounceMs);\n    };\n    const cancelTimer = () => {\n        if (timeoutId !== null) {\n            clearTimeout(timeoutId);\n            timeoutId = null;\n        }\n    };\n    const cancel = () => {\n        cancelTimer();\n        pendingThis = undefined;\n        pendingArgs = null;\n    };\n    const flush = () => {\n        invoke();\n    };\n    const debounced = function (...args) {\n        if (signal?.aborted) {\n            return;\n        }\n        pendingThis = this;\n        pendingArgs = args;\n        const isFirstCall = timeoutId == null;\n        schedule();\n        if (leading && isFirstCall) {\n            invoke();\n        }\n    };\n    debounced.schedule = schedule;\n    debounced.cancel = cancel;\n    debounced.flush = flush;\n    signal?.addEventListener('abort', cancel, { once: true });\n    return debounced;\n}\n\nexports.debounce = debounce;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isPlainObject(value) {\n    if (!value || typeof value !== 'object') {\n        return false;\n    }\n    const proto = Object.getPrototypeOf(value);\n    const hasObjectPrototype = proto === null ||\n        proto === Object.prototype ||\n        Object.getPrototypeOf(proto) === null;\n    if (!hasObjectPrototype) {\n        return false;\n    }\n    return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nexports.isPlainObject = isPlainObject;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isDeepKey = require('../_internal/isDeepKey.js');\nconst isIndex = require('../_internal/isIndex.js');\nconst isArguments = require('../predicate/isArguments.js');\nconst toPath = require('../util/toPath.js');\n\nfunction has(object, path) {\n    let resolvedPath;\n    if (Array.isArray(path)) {\n        resolvedPath = path;\n    }\n    else if (typeof path === 'string' && isDeepKey.isDeepKey(path) && object?.[path] == null) {\n        resolvedPath = toPath.toPath(path);\n    }\n    else {\n        resolvedPath = [path];\n    }\n    if (resolvedPath.length === 0) {\n        return false;\n    }\n    let current = object;\n    for (let i = 0; i < resolvedPath.length; i++) {\n        const key = resolvedPath[i];\n        if (current == null || !Object.hasOwn(current, key)) {\n            const isSparseIndex = (Array.isArray(current) || isArguments.isArguments(current)) && isIndex.isIndex(key) && key < current.length;\n            if (!isSparseIndex) {\n                return false;\n            }\n        }\n        current = current[key];\n    }\n    return true;\n}\n\nexports.has = has;\n","module.exports = require('../dist/predicate/isEqual.js').isEqual;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst get = require('./get.js');\nconst isUnsafeProperty = require('../../_internal/isUnsafeProperty.js');\nconst isDeepKey = require('../_internal/isDeepKey.js');\nconst toKey = require('../_internal/toKey.js');\nconst toPath = require('../util/toPath.js');\n\nfunction unset(obj, path) {\n    if (obj == null) {\n        return true;\n    }\n    switch (typeof path) {\n        case 'symbol':\n        case 'number':\n        case 'object': {\n            if (Array.isArray(path)) {\n                return unsetWithPath(obj, path);\n            }\n            if (typeof path === 'number') {\n                path = toKey.toKey(path);\n            }\n            else if (typeof path === 'object') {\n                if (Object.is(path?.valueOf(), -0)) {\n                    path = '-0';\n                }\n                else {\n                    path = String(path);\n                }\n            }\n            if (isUnsafeProperty.isUnsafeProperty(path)) {\n                return false;\n            }\n            if (obj?.[path] === undefined) {\n                return true;\n            }\n            try {\n                delete obj[path];\n                return true;\n            }\n            catch {\n                return false;\n            }\n        }\n        case 'string': {\n            if (obj?.[path] === undefined && isDeepKey.isDeepKey(path)) {\n                return unsetWithPath(obj, toPath.toPath(path));\n            }\n            if (isUnsafeProperty.isUnsafeProperty(path)) {\n                return false;\n            }\n            try {\n                delete obj[path];\n                return true;\n            }\n            catch {\n                return false;\n            }\n        }\n    }\n}\nfunction unsetWithPath(obj, path) {\n    const parent = get.get(obj, path.slice(0, -1), obj);\n    const lastKey = path[path.length - 1];\n    if (parent?.[lastKey] === undefined) {\n        return true;\n    }\n    if (isUnsafeProperty.isUnsafeProperty(lastKey)) {\n        return false;\n    }\n    try {\n        delete parent[lastKey];\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\n\nexports.unset = unset;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isMatch = require('./isMatch.js');\nconst cloneDeep = require('../../object/cloneDeep.js');\n\nfunction matches(source) {\n    source = cloneDeep.cloneDeep(source);\n    return (target) => {\n        return isMatch.isMatch(target, source);\n    };\n}\n\nexports.matches = matches;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isArrayLike = require('./isArrayLike.js');\nconst isObjectLike = require('./isObjectLike.js');\n\nfunction isArrayLikeObject(value) {\n    return isObjectLike.isObjectLike(value) && isArrayLike.isArrayLike(value);\n}\n\nexports.isArrayLikeObject = isArrayLikeObject;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isUnsafeProperty(key) {\n    return key === '__proto__';\n}\n\nexports.isUnsafeProperty = isUnsafeProperty;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst identity = require('../../function/identity.js');\nconst property = require('../object/property.js');\nconst matches = require('../predicate/matches.js');\nconst matchesProperty = require('../predicate/matchesProperty.js');\n\nfunction iteratee(value) {\n    if (value == null) {\n        return identity.identity;\n    }\n    switch (typeof value) {\n        case 'function': {\n            return value;\n        }\n        case 'object': {\n            if (Array.isArray(value) && value.length === 2) {\n                return matchesProperty.matchesProperty(value[0], value[1]);\n            }\n            return matches.matches(value);\n        }\n        case 'string':\n        case 'symbol':\n        case 'number': {\n            return property.property(value);\n        }\n    }\n}\n\nexports.iteratee = iteratee;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction minBy(items, getValue) {\n    if (items.length === 0) {\n        return undefined;\n    }\n    let minElement = items[0];\n    let min = getValue(minElement);\n    for (let i = 1; i < items.length; i++) {\n        const element = items[i];\n        const value = getValue(element);\n        if (value < min) {\n            min = value;\n            minElement = element;\n        }\n    }\n    return minElement;\n}\n\nexports.minBy = minBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isMatch = require('./isMatch.js');\nconst isObject = require('./isObject.js');\nconst isPrimitive = require('../../predicate/isPrimitive.js');\nconst eq = require('../util/eq.js');\n\nfunction isMatchWith(target, source, compare) {\n    if (typeof compare !== 'function') {\n        return isMatch.isMatch(target, source);\n    }\n    return isMatchWithInternal(target, source, function doesMatch(objValue, srcValue, key, object, source, stack) {\n        const isEqual = compare(objValue, srcValue, key, object, source, stack);\n        if (isEqual !== undefined) {\n            return Boolean(isEqual);\n        }\n        return isMatchWithInternal(objValue, srcValue, doesMatch, stack);\n    }, new Map());\n}\nfunction isMatchWithInternal(target, source, compare, stack) {\n    if (source === target) {\n        return true;\n    }\n    switch (typeof source) {\n        case 'object': {\n            return isObjectMatch(target, source, compare, stack);\n        }\n        case 'function': {\n            const sourceKeys = Object.keys(source);\n            if (sourceKeys.length > 0) {\n                return isMatchWithInternal(target, { ...source }, compare, stack);\n            }\n            return eq.eq(target, source);\n        }\n        default: {\n            if (!isObject.isObject(target)) {\n                return eq.eq(target, source);\n            }\n            if (typeof source === 'string') {\n                return source === '';\n            }\n            return true;\n        }\n    }\n}\nfunction isObjectMatch(target, source, compare, stack) {\n    if (source == null) {\n        return true;\n    }\n    if (Array.isArray(source)) {\n        return isArrayMatch(target, source, compare, stack);\n    }\n    if (source instanceof Map) {\n        return isMapMatch(target, source, compare, stack);\n    }\n    if (source instanceof Set) {\n        return isSetMatch(target, source, compare, stack);\n    }\n    const keys = Object.keys(source);\n    if (target == null) {\n        return keys.length === 0;\n    }\n    if (keys.length === 0) {\n        return true;\n    }\n    if (stack && stack.has(source)) {\n        return stack.get(source) === target;\n    }\n    if (stack) {\n        stack.set(source, target);\n    }\n    try {\n        for (let i = 0; i < keys.length; i++) {\n            const key = keys[i];\n            if (!isPrimitive.isPrimitive(target) && !(key in target)) {\n                return false;\n            }\n            if (source[key] === undefined && target[key] !== undefined) {\n                return false;\n            }\n            if (source[key] === null && target[key] !== null) {\n                return false;\n            }\n            const isEqual = compare(target[key], source[key], key, target, source, stack);\n            if (!isEqual) {\n                return false;\n            }\n        }\n        return true;\n    }\n    finally {\n        if (stack) {\n            stack.delete(source);\n        }\n    }\n}\nfunction isMapMatch(target, source, compare, stack) {\n    if (source.size === 0) {\n        return true;\n    }\n    if (!(target instanceof Map)) {\n        return false;\n    }\n    for (const [key, sourceValue] of source.entries()) {\n        const targetValue = target.get(key);\n        const isEqual = compare(targetValue, sourceValue, key, target, source, stack);\n        if (isEqual === false) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isArrayMatch(target, source, compare, stack) {\n    if (source.length === 0) {\n        return true;\n    }\n    if (!Array.isArray(target)) {\n        return false;\n    }\n    const countedIndex = new Set();\n    for (let i = 0; i < source.length; i++) {\n        const sourceItem = source[i];\n        let found = false;\n        for (let j = 0; j < target.length; j++) {\n            if (countedIndex.has(j)) {\n                continue;\n            }\n            const targetItem = target[j];\n            let matches = false;\n            const isEqual = compare(targetItem, sourceItem, i, target, source, stack);\n            if (isEqual) {\n                matches = true;\n            }\n            if (matches) {\n                countedIndex.add(j);\n                found = true;\n                break;\n            }\n        }\n        if (!found) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isSetMatch(target, source, compare, stack) {\n    if (source.size === 0) {\n        return true;\n    }\n    if (!(target instanceof Set)) {\n        return false;\n    }\n    return isArrayMatch([...target], [...source], compare, stack);\n}\n\nexports.isMatchWith = isMatchWith;\nexports.isSetMatch = isSetMatch;\n","/*! decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */\r\n;(function (globalScope) {\r\n  'use strict';\r\n\r\n\r\n  /*\r\n   *  decimal.js-light v2.5.1\r\n   *  An arbitrary-precision Decimal type for JavaScript.\r\n   *  https://github.com/MikeMcl/decimal.js-light\r\n   *  Copyright (c) 2020 Michael Mclaughlin <M8ch88l@gmail.com>\r\n   *  MIT Expat Licence\r\n   */\r\n\r\n\r\n  // -----------------------------------  EDITABLE DEFAULTS  ------------------------------------ //\r\n\r\n\r\n    // The limit on the value of `precision`, and on the value of the first argument to\r\n    // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n  var MAX_DIGITS = 1e9,                        // 0 to 1e9\r\n\r\n\r\n    // The initial configuration properties of the Decimal constructor.\r\n    Decimal = {\r\n\r\n      // These values must be integers within the stated ranges (inclusive).\r\n      // Most of these values can be changed during run-time using `Decimal.config`.\r\n\r\n      // The maximum number of significant digits of the result of a calculation or base conversion.\r\n      // E.g. `Decimal.config({ precision: 20 });`\r\n      precision: 20,                         // 1 to MAX_DIGITS\r\n\r\n      // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,\r\n      // `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n      //\r\n      // ROUND_UP         0 Away from zero.\r\n      // ROUND_DOWN       1 Towards zero.\r\n      // ROUND_CEIL       2 Towards +Infinity.\r\n      // ROUND_FLOOR      3 Towards -Infinity.\r\n      // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n      // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n      // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n      // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n      // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n      //\r\n      // E.g.\r\n      // `Decimal.rounding = 4;`\r\n      // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n      rounding: 4,                           // 0 to 8\r\n\r\n      // The exponent value at and beneath which `toString` returns exponential notation.\r\n      // JavaScript numbers: -7\r\n      toExpNeg: -7,                          // 0 to -MAX_E\r\n\r\n      // The exponent value at and above which `toString` returns exponential notation.\r\n      // JavaScript numbers: 21\r\n      toExpPos:  21,                         // 0 to MAX_E\r\n\r\n      // The natural logarithm of 10.\r\n      // 115 digits\r\n      LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'\r\n    },\r\n\r\n\r\n  // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n    external = true,\r\n\r\n    decimalError = '[DecimalError] ',\r\n    invalidArgument = decimalError + 'Invalid argument: ',\r\n    exponentOutOfRange = decimalError + 'Exponent out of range: ',\r\n\r\n    mathfloor = Math.floor,\r\n    mathpow = Math.pow,\r\n\r\n    isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n    ONE,\r\n    BASE = 1e7,\r\n    LOG_BASE = 7,\r\n    MAX_SAFE_INTEGER = 9007199254740991,\r\n    MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE),    // 1286742750677284\r\n\r\n    // Decimal.prototype object\r\n    P = {};\r\n\r\n\r\n  // Decimal prototype methods\r\n\r\n\r\n  /*\r\n   *  absoluteValue                       abs\r\n   *  comparedTo                          cmp\r\n   *  decimalPlaces                       dp\r\n   *  dividedBy                           div\r\n   *  dividedToIntegerBy                  idiv\r\n   *  equals                              eq\r\n   *  exponent\r\n   *  greaterThan                         gt\r\n   *  greaterThanOrEqualTo                gte\r\n   *  isInteger                           isint\r\n   *  isNegative                          isneg\r\n   *  isPositive                          ispos\r\n   *  isZero\r\n   *  lessThan                            lt\r\n   *  lessThanOrEqualTo                   lte\r\n   *  logarithm                           log\r\n   *  minus                               sub\r\n   *  modulo                              mod\r\n   *  naturalExponential                  exp\r\n   *  naturalLogarithm                    ln\r\n   *  negated                             neg\r\n   *  plus                                add\r\n   *  precision                           sd\r\n   *  squareRoot                          sqrt\r\n   *  times                               mul\r\n   *  toDecimalPlaces                     todp\r\n   *  toExponential\r\n   *  toFixed\r\n   *  toInteger                           toint\r\n   *  toNumber\r\n   *  toPower                             pow\r\n   *  toPrecision\r\n   *  toSignificantDigits                 tosd\r\n   *  toString\r\n   *  valueOf                             val\r\n   */\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the absolute value of this Decimal.\r\n   *\r\n   */\r\n  P.absoluteValue = P.abs = function () {\r\n    var x = new this.constructor(this);\r\n    if (x.s) x.s = 1;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return\r\n   *   1    if the value of this Decimal is greater than the value of `y`,\r\n   *  -1    if the value of this Decimal is less than the value of `y`,\r\n   *   0    if they have the same value\r\n   *\r\n   */\r\n  P.comparedTo = P.cmp = function (y) {\r\n    var i, j, xdL, ydL,\r\n      x = this;\r\n\r\n    y = new x.constructor(y);\r\n\r\n    // Signs differ?\r\n    if (x.s !== y.s) return x.s || -y.s;\r\n\r\n    // Compare exponents.\r\n    if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;\r\n\r\n    xdL = x.d.length;\r\n    ydL = y.d.length;\r\n\r\n    // Compare digit by digit.\r\n    for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n      if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;\r\n    }\r\n\r\n    // Compare lengths.\r\n    return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the number of decimal places of the value of this Decimal.\r\n   *\r\n   */\r\n  P.decimalPlaces = P.dp = function () {\r\n    var x = this,\r\n      w = x.d.length - 1,\r\n      dp = (w - x.e) * LOG_BASE;\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    w = x.d[w];\r\n    if (w) for (; w % 10 == 0; w /= 10) dp--;\r\n\r\n    return dp < 0 ? 0 : dp;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.dividedBy = P.div = function (y) {\r\n    return divide(this, new this.constructor(y));\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n   * by the value of `y`, truncated to `precision` significant digits.\r\n   *\r\n   */\r\n  P.dividedToIntegerBy = P.idiv = function (y) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n    return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n   *\r\n   */\r\n  P.equals = P.eq = function (y) {\r\n    return !this.cmp(y);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).\r\n   *\r\n   */\r\n  P.exponent = function () {\r\n    return getBase10Exponent(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n   * false.\r\n   *\r\n   */\r\n  P.greaterThan = P.gt = function (y) {\r\n    return this.cmp(y) > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n   * otherwise return false.\r\n   *\r\n   */\r\n  P.greaterThanOrEqualTo = P.gte = function (y) {\r\n    return this.cmp(y) >= 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is an integer, otherwise return false.\r\n   *\r\n   */\r\n  P.isInteger = P.isint = function () {\r\n    return this.e > this.d.length - 2;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is negative, otherwise return false.\r\n   *\r\n   */\r\n  P.isNegative = P.isneg = function () {\r\n    return this.s < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is positive, otherwise return false.\r\n   *\r\n   */\r\n  P.isPositive = P.ispos = function () {\r\n    return this.s > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is 0, otherwise return false.\r\n   *\r\n   */\r\n  P.isZero = function () {\r\n    return this.s === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n   *\r\n   */\r\n  P.lessThan = P.lt = function (y) {\r\n    return this.cmp(y) < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n   *\r\n   */\r\n  P.lessThanOrEqualTo = P.lte = function (y) {\r\n    return this.cmp(y) < 1;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the logarithm of the value of this Decimal to the specified base, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   * If no base is specified, return log[10](x).\r\n   *\r\n   * log[base](x) = ln(x) / ln(base)\r\n   *\r\n   * The maximum error of the result is 1 ulp (unit in the last place).\r\n   *\r\n   * [base] {number|string|Decimal} The base of the logarithm.\r\n   *\r\n   */\r\n  P.logarithm = P.log = function (base) {\r\n    var r,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision,\r\n      wpr = pr + 5;\r\n\r\n    // Default base is 10.\r\n    if (base === void 0) {\r\n      base = new Ctor(10);\r\n    } else {\r\n      base = new Ctor(base);\r\n\r\n      // log[-b](x) = NaN\r\n      // log[0](x)  = NaN\r\n      // log[1](x)  = NaN\r\n      if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');\r\n    }\r\n\r\n    // log[b](-x) = NaN\r\n    // log[b](0) = -Infinity\r\n    if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n    // log[b](1) = 0\r\n    if (x.eq(ONE)) return new Ctor(0);\r\n\r\n    external = false;\r\n    r = divide(ln(x, wpr), ln(base, wpr), wpr);\r\n    external = true;\r\n\r\n    return round(r, pr);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.minus = P.sub = function (y) {\r\n    var x = this;\r\n    y = new x.constructor(y);\r\n    return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.modulo = P.mod = function (y) {\r\n    var q,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    y = new Ctor(y);\r\n\r\n    // x % 0 = NaN\r\n    if (!y.s) throw Error(decimalError + 'NaN');\r\n\r\n    // Return x if x is 0.\r\n    if (!x.s) return round(new Ctor(x), pr);\r\n\r\n    // Prevent rounding of intermediate calculations.\r\n    external = false;\r\n    q = divide(x, y, 0, 1).times(y);\r\n    external = true;\r\n\r\n    return x.minus(q);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n   * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`\r\n   * significant digits.\r\n   *\r\n   */\r\n  P.naturalExponential = P.exp = function () {\r\n    return exp(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n   * truncated to `precision` significant digits.\r\n   *\r\n   */\r\n  P.naturalLogarithm = P.ln = function () {\r\n    return ln(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n   * -1.\r\n   *\r\n   */\r\n  P.negated = P.neg = function () {\r\n    var x = new this.constructor(this);\r\n    x.s = -x.s || 0;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.plus = P.add = function (y) {\r\n    var x = this;\r\n    y = new x.constructor(y);\r\n    return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the number of significant digits of the value of this Decimal.\r\n   *\r\n   * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n   *\r\n   */\r\n  P.precision = P.sd = function (z) {\r\n    var e, sd, w,\r\n      x = this;\r\n\r\n    if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n    e = getBase10Exponent(x) + 1;\r\n    w = x.d.length - 1;\r\n    sd = w * LOG_BASE + 1;\r\n    w = x.d[w];\r\n\r\n    // If non-zero...\r\n    if (w) {\r\n\r\n      // Subtract the number of trailing zeros of the last word.\r\n      for (; w % 10 == 0; w /= 10) sd--;\r\n\r\n      // Add the number of digits of the first word.\r\n      for (w = x.d[0]; w >= 10; w /= 10) sd++;\r\n    }\r\n\r\n    return z && e > sd ? e : sd;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`\r\n   * significant digits.\r\n   *\r\n   */\r\n  P.squareRoot = P.sqrt = function () {\r\n    var e, n, pr, r, s, t, wpr,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    // Negative or zero?\r\n    if (x.s < 1) {\r\n      if (!x.s) return new Ctor(0);\r\n\r\n      // sqrt(-x) = NaN\r\n      throw Error(decimalError + 'NaN');\r\n    }\r\n\r\n    e = getBase10Exponent(x);\r\n    external = false;\r\n\r\n    // Initial estimate.\r\n    s = Math.sqrt(+x);\r\n\r\n    // Math.sqrt underflow/overflow?\r\n    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n    if (s == 0 || s == 1 / 0) {\r\n      n = digitsToString(x.d);\r\n      if ((n.length + e) % 2 == 0) n += '0';\r\n      s = Math.sqrt(n);\r\n      e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n      if (s == 1 / 0) {\r\n        n = '5e' + e;\r\n      } else {\r\n        n = s.toExponential();\r\n        n = n.slice(0, n.indexOf('e') + 1) + e;\r\n      }\r\n\r\n      r = new Ctor(n);\r\n    } else {\r\n      r = new Ctor(s.toString());\r\n    }\r\n\r\n    pr = Ctor.precision;\r\n    s = wpr = pr + 3;\r\n\r\n    // Newton-Raphson iteration.\r\n    for (;;) {\r\n      t = r;\r\n      r = t.plus(divide(x, t, wpr + 2)).times(0.5);\r\n\r\n      if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {\r\n        n = n.slice(wpr - 3, wpr + 1);\r\n\r\n        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n        // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n        if (s == wpr && n == '4999') {\r\n\r\n          // On the first iteration only, check to see if rounding up gives the exact result as the\r\n          // nines may infinitely repeat.\r\n          round(t, pr + 1, 0);\r\n\r\n          if (t.times(t).eq(x)) {\r\n            r = t;\r\n            break;\r\n          }\r\n        } else if (n != '9999') {\r\n          break;\r\n        }\r\n\r\n        wpr += 4;\r\n      }\r\n    }\r\n\r\n    external = true;\r\n\r\n    return round(r, pr);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.times = P.mul = function (y) {\r\n    var carry, e, i, k, r, rL, t, xdL, ydL,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      xd = x.d,\r\n      yd = (y = new Ctor(y)).d;\r\n\r\n    // Return 0 if either is 0.\r\n    if (!x.s || !y.s) return new Ctor(0);\r\n\r\n    y.s *= x.s;\r\n    e = x.e + y.e;\r\n    xdL = xd.length;\r\n    ydL = yd.length;\r\n\r\n    // Ensure xd points to the longer array.\r\n    if (xdL < ydL) {\r\n      r = xd;\r\n      xd = yd;\r\n      yd = r;\r\n      rL = xdL;\r\n      xdL = ydL;\r\n      ydL = rL;\r\n    }\r\n\r\n    // Initialise the result array with zeros.\r\n    r = [];\r\n    rL = xdL + ydL;\r\n    for (i = rL; i--;) r.push(0);\r\n\r\n    // Multiply!\r\n    for (i = ydL; --i >= 0;) {\r\n      carry = 0;\r\n      for (k = xdL + i; k > i;) {\r\n        t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n        r[k--] = t % BASE | 0;\r\n        carry = t / BASE | 0;\r\n      }\r\n\r\n      r[k] = (r[k] + carry) % BASE | 0;\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (; !r[--rL];) r.pop();\r\n\r\n    if (carry) ++e;\r\n    else r.shift();\r\n\r\n    y.d = r;\r\n    y.e = e;\r\n\r\n    return external ? round(y, Ctor.precision) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n   * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n   *\r\n   * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toDecimalPlaces = P.todp = function (dp, rm) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n\r\n    x = new Ctor(x);\r\n    if (dp === void 0) return x;\r\n\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    return round(x, dp + getBase10Exponent(x) + 1, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal in exponential notation rounded to\r\n   * `dp` fixed decimal places using rounding mode `rounding`.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toExponential = function (dp, rm) {\r\n    var str,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (dp === void 0) {\r\n      str = toString(x, true);\r\n    } else {\r\n      checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n\r\n      x = round(new Ctor(x), dp + 1, rm);\r\n      str = toString(x, true, dp + 1);\r\n    }\r\n\r\n    return str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n   * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n   * omitted.\r\n   *\r\n   * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n   * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n   * (-0).toFixed(3) is '0.000'.\r\n   * (-0.5).toFixed(0) is '-0'.\r\n   *\r\n   */\r\n  P.toFixed = function (dp, rm) {\r\n    var str, y,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (dp === void 0) return toString(x);\r\n\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);\r\n    str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);\r\n\r\n    // To determine whether to add the minus sign look at the value before it was rounded,\r\n    // i.e. look at `x` rather than `y`.\r\n    return x.isneg() && !x.isZero() ? '-' + str : str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n   * rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.toInteger = P.toint = function () {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n    return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the value of this Decimal converted to a number primitive.\r\n   *\r\n   */\r\n  P.toNumber = function () {\r\n    return +this;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,\r\n   * truncated to `precision` significant digits.\r\n   *\r\n   * For non-integer or very large exponents pow(x, y) is calculated using\r\n   *\r\n   *   x^y = exp(y*ln(x))\r\n   *\r\n   * The maximum error is 1 ulp (unit in last place).\r\n   *\r\n   * y {number|string|Decimal} The power to which to raise this Decimal.\r\n   *\r\n   */\r\n  P.toPower = P.pow = function (y) {\r\n    var e, k, pr, r, sign, yIsInt,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      guard = 12,\r\n      yn = +(y = new Ctor(y));\r\n\r\n    // pow(x, 0) = 1\r\n    if (!y.s) return new Ctor(ONE);\r\n\r\n    x = new Ctor(x);\r\n\r\n    // pow(0, y > 0) = 0\r\n    // pow(0, y < 0) = Infinity\r\n    if (!x.s) {\r\n      if (y.s < 1) throw Error(decimalError + 'Infinity');\r\n      return x;\r\n    }\r\n\r\n    // pow(1, y) = 1\r\n    if (x.eq(ONE)) return x;\r\n\r\n    pr = Ctor.precision;\r\n\r\n    // pow(x, 1) = x\r\n    if (y.eq(ONE)) return round(x, pr);\r\n\r\n    e = y.e;\r\n    k = y.d.length - 1;\r\n    yIsInt = e >= k;\r\n    sign = x.s;\r\n\r\n    if (!yIsInt) {\r\n\r\n      // pow(x < 0, y non-integer) = NaN\r\n      if (sign < 0) throw Error(decimalError + 'NaN');\r\n\r\n    // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n    } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n      r = new Ctor(ONE);\r\n\r\n      // Max k of 9007199254740991 takes 53 loop iterations.\r\n      // Maximum digits array length; leaves [28, 34] guard digits.\r\n      e = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n      external = false;\r\n\r\n      for (;;) {\r\n        if (k % 2) {\r\n          r = r.times(x);\r\n          truncate(r.d, e);\r\n        }\r\n\r\n        k = mathfloor(k / 2);\r\n        if (k === 0) break;\r\n\r\n        x = x.times(x);\r\n        truncate(x.d, e);\r\n      }\r\n\r\n      external = true;\r\n\r\n      return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);\r\n    }\r\n\r\n    // Result is negative if x is negative and the last digit of integer y is odd.\r\n    sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;\r\n\r\n    x.s = 1;\r\n    external = false;\r\n    r = y.times(ln(x, pr + guard));\r\n    external = true;\r\n    r = exp(r);\r\n    r.s = sign;\r\n\r\n    return r;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n   * using rounding mode `rounding`.\r\n   *\r\n   * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n   * the integer part of the value in normal notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toPrecision = function (sd, rm) {\r\n    var e, str,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (sd === void 0) {\r\n      e = getBase10Exponent(x);\r\n      str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n    } else {\r\n      checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n\r\n      x = round(new Ctor(x), sd, rm);\r\n      e = getBase10Exponent(x);\r\n      str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);\r\n    }\r\n\r\n    return str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n   * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n   * omitted.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toSignificantDigits = P.tosd = function (sd, rm) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (sd === void 0) {\r\n      sd = Ctor.precision;\r\n      rm = Ctor.rounding;\r\n    } else {\r\n      checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n    }\r\n\r\n    return round(new Ctor(x), sd, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal.\r\n   *\r\n   * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n   * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n   *\r\n   */\r\n  P.toString = P.valueOf = P.val = P.toJSON = function () {\r\n    var x = this,\r\n      e = getBase10Exponent(x),\r\n      Ctor = x.constructor;\r\n\r\n    return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n  };\r\n\r\n\r\n  // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n  /*\r\n   *  add                 P.minus, P.plus\r\n   *  checkInt32          P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd\r\n   *  digitsToString      P.log, P.sqrt, P.pow, toString, exp, ln\r\n   *  divide              P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln\r\n   *  exp                 P.exp, P.pow\r\n   *  getBase10Exponent   P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,\r\n   *                      P.toString, divide, round, toString, exp, ln\r\n   *  getLn10             P.log, ln\r\n   *  getZeroString       digitsToString, toString\r\n   *  ln                  P.log, P.ln, P.pow, exp\r\n   *  parseDecimal        Decimal\r\n   *  round               P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,\r\n   *                      P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,\r\n   *                      divide, getLn10, exp, ln\r\n   *  subtract            P.minus, P.plus\r\n   *  toString            P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf\r\n   *  truncate            P.pow\r\n   *\r\n   *  Throws:             P.log, P.mod, P.sd, P.sqrt, P.pow,  checkInt32, divide, round,\r\n   *                      getLn10, exp, ln, parseDecimal, Decimal, config\r\n   */\r\n\r\n\r\n  function add(x, y) {\r\n    var carry, d, e, i, k, len, xd, yd,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    // If either is zero...\r\n    if (!x.s || !y.s) {\r\n\r\n      // Return x if y is zero.\r\n      // Return y if y is non-zero.\r\n      if (!y.s) y = new Ctor(x);\r\n      return external ? round(y, pr) : y;\r\n    }\r\n\r\n    xd = x.d;\r\n    yd = y.d;\r\n\r\n    // x and y are finite, non-zero numbers with the same sign.\r\n\r\n    k = x.e;\r\n    e = y.e;\r\n    xd = xd.slice();\r\n    i = k - e;\r\n\r\n    // If base 1e7 exponents differ...\r\n    if (i) {\r\n      if (i < 0) {\r\n        d = xd;\r\n        i = -i;\r\n        len = yd.length;\r\n      } else {\r\n        d = yd;\r\n        e = k;\r\n        len = xd.length;\r\n      }\r\n\r\n      // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n      k = Math.ceil(pr / LOG_BASE);\r\n      len = k > len ? k + 1 : len + 1;\r\n\r\n      if (i > len) {\r\n        i = len;\r\n        d.length = 1;\r\n      }\r\n\r\n      // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n      d.reverse();\r\n      for (; i--;) d.push(0);\r\n      d.reverse();\r\n    }\r\n\r\n    len = xd.length;\r\n    i = yd.length;\r\n\r\n    // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n    if (len - i < 0) {\r\n      i = len;\r\n      d = yd;\r\n      yd = xd;\r\n      xd = d;\r\n    }\r\n\r\n    // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n    for (carry = 0; i;) {\r\n      carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n      xd[i] %= BASE;\r\n    }\r\n\r\n    if (carry) {\r\n      xd.unshift(carry);\r\n      ++e;\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n    for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n    y.d = xd;\r\n    y.e = e;\r\n\r\n    return external ? round(y, pr) : y;\r\n  }\r\n\r\n\r\n  function checkInt32(i, min, max) {\r\n    if (i !== ~~i || i < min || i > max) {\r\n      throw Error(invalidArgument + i);\r\n    }\r\n  }\r\n\r\n\r\n  function digitsToString(d) {\r\n    var i, k, ws,\r\n      indexOfLastWord = d.length - 1,\r\n      str = '',\r\n      w = d[0];\r\n\r\n    if (indexOfLastWord > 0) {\r\n      str += w;\r\n      for (i = 1; i < indexOfLastWord; i++) {\r\n        ws = d[i] + '';\r\n        k = LOG_BASE - ws.length;\r\n        if (k) str += getZeroString(k);\r\n        str += ws;\r\n      }\r\n\r\n      w = d[i];\r\n      ws = w + '';\r\n      k = LOG_BASE - ws.length;\r\n      if (k) str += getZeroString(k);\r\n    } else if (w === 0) {\r\n      return '0';\r\n    }\r\n\r\n    // Remove trailing zeros of last w.\r\n    for (; w % 10 === 0;) w /= 10;\r\n\r\n    return str + w;\r\n  }\r\n\r\n\r\n  var divide = (function () {\r\n\r\n    // Assumes non-zero x and k, and hence non-zero result.\r\n    function multiplyInteger(x, k) {\r\n      var temp,\r\n        carry = 0,\r\n        i = x.length;\r\n\r\n      for (x = x.slice(); i--;) {\r\n        temp = x[i] * k + carry;\r\n        x[i] = temp % BASE | 0;\r\n        carry = temp / BASE | 0;\r\n      }\r\n\r\n      if (carry) x.unshift(carry);\r\n\r\n      return x;\r\n    }\r\n\r\n    function compare(a, b, aL, bL) {\r\n      var i, r;\r\n\r\n      if (aL != bL) {\r\n        r = aL > bL ? 1 : -1;\r\n      } else {\r\n        for (i = r = 0; i < aL; i++) {\r\n          if (a[i] != b[i]) {\r\n            r = a[i] > b[i] ? 1 : -1;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      return r;\r\n    }\r\n\r\n    function subtract(a, b, aL) {\r\n      var i = 0;\r\n\r\n      // Subtract b from a.\r\n      for (; aL--;) {\r\n        a[aL] -= i;\r\n        i = a[aL] < b[aL] ? 1 : 0;\r\n        a[aL] = i * BASE + a[aL] - b[aL];\r\n      }\r\n\r\n      // Remove leading zeros.\r\n      for (; !a[0] && a.length > 1;) a.shift();\r\n    }\r\n\r\n    return function (x, y, pr, dp) {\r\n      var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,\r\n        Ctor = x.constructor,\r\n        sign = x.s == y.s ? 1 : -1,\r\n        xd = x.d,\r\n        yd = y.d;\r\n\r\n      // Either 0?\r\n      if (!x.s) return new Ctor(x);\r\n      if (!y.s) throw Error(decimalError + 'Division by zero');\r\n\r\n      e = x.e - y.e;\r\n      yL = yd.length;\r\n      xL = xd.length;\r\n      q = new Ctor(sign);\r\n      qd = q.d = [];\r\n\r\n      // Result exponent may be one less than e.\r\n      for (i = 0; yd[i] == (xd[i] || 0); ) ++i;\r\n      if (yd[i] > (xd[i] || 0)) --e;\r\n\r\n      if (pr == null) {\r\n        sd = pr = Ctor.precision;\r\n      } else if (dp) {\r\n        sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;\r\n      } else {\r\n        sd = pr;\r\n      }\r\n\r\n      if (sd < 0) return new Ctor(0);\r\n\r\n      // Convert precision in number of base 10 digits to base 1e7 digits.\r\n      sd = sd / LOG_BASE + 2 | 0;\r\n      i = 0;\r\n\r\n      // divisor < 1e7\r\n      if (yL == 1) {\r\n        k = 0;\r\n        yd = yd[0];\r\n        sd++;\r\n\r\n        // k is the carry.\r\n        for (; (i < xL || k) && sd--; i++) {\r\n          t = k * BASE + (xd[i] || 0);\r\n          qd[i] = t / yd | 0;\r\n          k = t % yd | 0;\r\n        }\r\n\r\n      // divisor >= 1e7\r\n      } else {\r\n\r\n        // Normalise xd and yd so highest order digit of yd is >= BASE/2\r\n        k = BASE / (yd[0] + 1) | 0;\r\n\r\n        if (k > 1) {\r\n          yd = multiplyInteger(yd, k);\r\n          xd = multiplyInteger(xd, k);\r\n          yL = yd.length;\r\n          xL = xd.length;\r\n        }\r\n\r\n        xi = yL;\r\n        rem = xd.slice(0, yL);\r\n        remL = rem.length;\r\n\r\n        // Add zeros to make remainder as long as divisor.\r\n        for (; remL < yL;) rem[remL++] = 0;\r\n\r\n        yz = yd.slice();\r\n        yz.unshift(0);\r\n        yd0 = yd[0];\r\n\r\n        if (yd[1] >= BASE / 2) ++yd0;\r\n\r\n        do {\r\n          k = 0;\r\n\r\n          // Compare divisor and remainder.\r\n          cmp = compare(yd, rem, yL, remL);\r\n\r\n          // If divisor < remainder.\r\n          if (cmp < 0) {\r\n\r\n            // Calculate trial digit, k.\r\n            rem0 = rem[0];\r\n            if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);\r\n\r\n            // k will be how many times the divisor goes into the current remainder.\r\n            k = rem0 / yd0 | 0;\r\n\r\n            //  Algorithm:\r\n            //  1. product = divisor * trial digit (k)\r\n            //  2. if product > remainder: product -= divisor, k--\r\n            //  3. remainder -= product\r\n            //  4. if product was < remainder at 2:\r\n            //    5. compare new remainder and divisor\r\n            //    6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n            if (k > 1) {\r\n              if (k >= BASE) k = BASE - 1;\r\n\r\n              // product = divisor * trial digit.\r\n              prod = multiplyInteger(yd, k);\r\n              prodL = prod.length;\r\n              remL = rem.length;\r\n\r\n              // Compare product and remainder.\r\n              cmp = compare(prod, rem, prodL, remL);\r\n\r\n              // product > remainder.\r\n              if (cmp == 1) {\r\n                k--;\r\n\r\n                // Subtract divisor from product.\r\n                subtract(prod, yL < prodL ? yz : yd, prodL);\r\n              }\r\n            } else {\r\n\r\n              // cmp is -1.\r\n              // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n              // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n              if (k == 0) cmp = k = 1;\r\n              prod = yd.slice();\r\n            }\r\n\r\n            prodL = prod.length;\r\n            if (prodL < remL) prod.unshift(0);\r\n\r\n            // Subtract product from remainder.\r\n            subtract(rem, prod, remL);\r\n\r\n            // If product was < previous remainder.\r\n            if (cmp == -1) {\r\n              remL = rem.length;\r\n\r\n              // Compare divisor and new remainder.\r\n              cmp = compare(yd, rem, yL, remL);\r\n\r\n              // If divisor < new remainder, subtract divisor from remainder.\r\n              if (cmp < 1) {\r\n                k++;\r\n\r\n                // Subtract divisor from remainder.\r\n                subtract(rem, yL < remL ? yz : yd, remL);\r\n              }\r\n            }\r\n\r\n            remL = rem.length;\r\n          } else if (cmp === 0) {\r\n            k++;\r\n            rem = [0];\r\n          }    // if cmp === 1, k will be 0\r\n\r\n          // Add the next digit, k, to the result array.\r\n          qd[i++] = k;\r\n\r\n          // Update the remainder.\r\n          if (cmp && rem[0]) {\r\n            rem[remL++] = xd[xi] || 0;\r\n          } else {\r\n            rem = [xd[xi]];\r\n            remL = 1;\r\n          }\r\n\r\n        } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n      }\r\n\r\n      // Leading zero?\r\n      if (!qd[0]) qd.shift();\r\n\r\n      q.e = e;\r\n\r\n      return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);\r\n    };\r\n  })();\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural exponential of `x` truncated to `sd`\r\n   * significant digits.\r\n   *\r\n   * Taylor/Maclaurin series.\r\n   *\r\n   * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n   *\r\n   * Argument reduction:\r\n   *   Repeat x = x / 32, k += 5, until |x| < 0.1\r\n   *   exp(x) = exp(x / 2^k)^(2^k)\r\n   *\r\n   * Previously, the argument was initially reduced by\r\n   * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)\r\n   * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n   * found to be slower than just dividing repeatedly by 32 as above.\r\n   *\r\n   * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n   *\r\n   *  exp(x) is non-terminating for any finite, non-zero x.\r\n   *\r\n   */\r\n  function exp(x, sd) {\r\n    var denominator, guard, pow, sum, t, wpr,\r\n      i = 0,\r\n      k = 0,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n\r\n    // exp(0) = 1\r\n    if (!x.s) return new Ctor(ONE);\r\n\r\n    if (sd == null) {\r\n      external = false;\r\n      wpr = pr;\r\n    } else {\r\n      wpr = sd;\r\n    }\r\n\r\n    t = new Ctor(0.03125);\r\n\r\n    while (x.abs().gte(0.1)) {\r\n      x = x.times(t);    // x = x / 2^5\r\n      k += 5;\r\n    }\r\n\r\n    // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.\r\n    guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n    wpr += guard;\r\n    denominator = pow = sum = new Ctor(ONE);\r\n    Ctor.precision = wpr;\r\n\r\n    for (;;) {\r\n      pow = round(pow.times(x), wpr);\r\n      denominator = denominator.times(++i);\r\n      t = sum.plus(divide(pow, denominator, wpr));\r\n\r\n      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n        while (k--) sum = round(sum.times(sum), wpr);\r\n        Ctor.precision = pr;\r\n        return sd == null ? (external = true, round(sum, pr)) : sum;\r\n      }\r\n\r\n      sum = t;\r\n    }\r\n  }\r\n\r\n\r\n  // Calculate the base 10 exponent from the base 1e7 exponent.\r\n  function getBase10Exponent(x) {\r\n    var e = x.e * LOG_BASE,\r\n      w = x.d[0];\r\n\r\n    // Add the number of digits of the first word of the digits array.\r\n    for (; w >= 10; w /= 10) e++;\r\n    return e;\r\n  }\r\n\r\n\r\n  function getLn10(Ctor, sd, pr) {\r\n\r\n    if (sd > Ctor.LN10.sd()) {\r\n\r\n\r\n      // Reset global state in case the exception is caught.\r\n      external = true;\r\n      if (pr) Ctor.precision = pr;\r\n      throw Error(decimalError + 'LN10 precision limit exceeded');\r\n    }\r\n\r\n    return round(new Ctor(Ctor.LN10), sd);\r\n  }\r\n\r\n\r\n  function getZeroString(k) {\r\n    var zs = '';\r\n    for (; k--;) zs += '0';\r\n    return zs;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural logarithm of `x` truncated to `sd` significant\r\n   * digits.\r\n   *\r\n   *  ln(n) is non-terminating (n != 1)\r\n   *\r\n   */\r\n  function ln(y, sd) {\r\n    var c, c0, denominator, e, numerator, sum, t, wpr, x2,\r\n      n = 1,\r\n      guard = 10,\r\n      x = y,\r\n      xd = x.d,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    // ln(-x) = NaN\r\n    // ln(0) = -Infinity\r\n    if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n    // ln(1) = 0\r\n    if (x.eq(ONE)) return new Ctor(0);\r\n\r\n    if (sd == null) {\r\n      external = false;\r\n      wpr = pr;\r\n    } else {\r\n      wpr = sd;\r\n    }\r\n\r\n    if (x.eq(10)) {\r\n      if (sd == null) external = true;\r\n      return getLn10(Ctor, wpr);\r\n    }\r\n\r\n    wpr += guard;\r\n    Ctor.precision = wpr;\r\n    c = digitsToString(xd);\r\n    c0 = c.charAt(0);\r\n    e = getBase10Exponent(x);\r\n\r\n    if (Math.abs(e) < 1.5e15) {\r\n\r\n      // Argument reduction.\r\n      // The series converges faster the closer the argument is to 1, so using\r\n      // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b\r\n      // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n      // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n      // later be divided by this number, then separate out the power of 10 using\r\n      // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n      // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n      //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n      // max n is 6 (gives 0.7 - 1.3)\r\n      while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n        x = x.times(y);\r\n        c = digitsToString(x.d);\r\n        c0 = c.charAt(0);\r\n        n++;\r\n      }\r\n\r\n      e = getBase10Exponent(x);\r\n\r\n      if (c0 > 1) {\r\n        x = new Ctor('0.' + c);\r\n        e++;\r\n      } else {\r\n        x = new Ctor(c0 + '.' + c.slice(1));\r\n      }\r\n    } else {\r\n\r\n      // The argument reduction method above may result in overflow if the argument y is a massive\r\n      // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n      // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n      t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n      x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n\r\n      Ctor.precision = pr;\r\n      return sd == null ? (external = true, round(x, pr)) : x;\r\n    }\r\n\r\n    // x is reduced to a value near 1.\r\n\r\n    // Taylor series.\r\n    // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n    // where x = (y - 1)/(y + 1)    (|x| < 1)\r\n    sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);\r\n    x2 = round(x.times(x), wpr);\r\n    denominator = 3;\r\n\r\n    for (;;) {\r\n      numerator = round(numerator.times(x2), wpr);\r\n      t = sum.plus(divide(numerator, new Ctor(denominator), wpr));\r\n\r\n      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n        sum = sum.times(2);\r\n\r\n        // Reverse the argument reduction.\r\n        if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n        sum = divide(sum, new Ctor(n), wpr);\r\n\r\n        Ctor.precision = pr;\r\n        return sd == null ? (external = true, round(sum, pr)) : sum;\r\n      }\r\n\r\n      sum = t;\r\n      denominator += 2;\r\n    }\r\n  }\r\n\r\n\r\n  /*\r\n   * Parse the value of a new Decimal `x` from string `str`.\r\n   */\r\n  function parseDecimal(x, str) {\r\n    var e, i, len;\r\n\r\n    // Decimal point?\r\n    if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n    // Exponential form?\r\n    if ((i = str.search(/e/i)) > 0) {\r\n\r\n      // Determine exponent.\r\n      if (e < 0) e = i;\r\n      e += +str.slice(i + 1);\r\n      str = str.substring(0, i);\r\n    } else if (e < 0) {\r\n\r\n      // Integer.\r\n      e = str.length;\r\n    }\r\n\r\n    // Determine leading zeros.\r\n    for (i = 0; str.charCodeAt(i) === 48;) ++i;\r\n\r\n    // Determine trailing zeros.\r\n    for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;\r\n    str = str.slice(i, len);\r\n\r\n    if (str) {\r\n      len -= i;\r\n      e = e - i - 1;\r\n      x.e = mathfloor(e / LOG_BASE);\r\n      x.d = [];\r\n\r\n      // Transform base\r\n\r\n      // e is the base 10 exponent.\r\n      // i is where to slice str to get the first word of the digits array.\r\n      i = (e + 1) % LOG_BASE;\r\n      if (e < 0) i += LOG_BASE;\r\n\r\n      if (i < len) {\r\n        if (i) x.d.push(+str.slice(0, i));\r\n        for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n        str = str.slice(i);\r\n        i = LOG_BASE - str.length;\r\n      } else {\r\n        i -= len;\r\n      }\r\n\r\n      for (; i--;) str += '0';\r\n      x.d.push(+str);\r\n\r\n      if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);\r\n    } else {\r\n\r\n      // Zero.\r\n      x.s = 0;\r\n      x.e = 0;\r\n      x.d = [0];\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Round `x` to `sd` significant digits, using rounding mode `rm` if present (truncate otherwise).\r\n   */\r\n   function round(x, sd, rm) {\r\n    var i, j, k, n, rd, doRound, w, xdi,\r\n      xd = x.d;\r\n\r\n    // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n    // w: the word of xd which contains the rounding digit, a base 1e7 number.\r\n    // xdi: the index of w within xd.\r\n    // n: the number of digits of w.\r\n    // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n    // they had leading zeros)\r\n    // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n    // Get the length of the first word of the digits array xd.\r\n    for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;\r\n    i = sd - n;\r\n\r\n    // Is the rounding digit in the first word of xd?\r\n    if (i < 0) {\r\n      i += LOG_BASE;\r\n      j = sd;\r\n      w = xd[xdi = 0];\r\n    } else {\r\n      xdi = Math.ceil((i + 1) / LOG_BASE);\r\n      k = xd.length;\r\n      if (xdi >= k) return x;\r\n      w = k = xd[xdi];\r\n\r\n      // Get the number of digits of w.\r\n      for (n = 1; k >= 10; k /= 10) n++;\r\n\r\n      // Get the index of rd within w.\r\n      i %= LOG_BASE;\r\n\r\n      // Get the index of rd within w, adjusted for leading zeros.\r\n      // The number of leading zeros of w is given by LOG_BASE - n.\r\n      j = i - LOG_BASE + n;\r\n    }\r\n\r\n    if (rm !== void 0) {\r\n      k = mathpow(10, n - j - 1);\r\n\r\n      // Get the rounding digit at index j of w.\r\n      rd = w / k % 10 | 0;\r\n\r\n      // Are there any non-zero digits after the rounding digit?\r\n      doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;\r\n\r\n      // The expression `w % mathpow(10, n - j - 1)` returns all the digits of w to the right of the\r\n      // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give\r\n      // 714.\r\n\r\n      doRound = rm < 4\r\n        ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n        : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&\r\n\r\n          // Check whether the digit to the left of the rounding digit is odd.\r\n          ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n            rm == (x.s < 0 ? 8 : 7));\r\n    }\r\n\r\n    if (sd < 1 || !xd[0]) {\r\n      if (doRound) {\r\n        k = getBase10Exponent(x);\r\n        xd.length = 1;\r\n\r\n        // Convert sd to decimal places.\r\n        sd = sd - k - 1;\r\n\r\n        // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n        xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n        x.e = mathfloor(-sd / LOG_BASE) || 0;\r\n      } else {\r\n        xd.length = 1;\r\n\r\n        // Zero.\r\n        xd[0] = x.e = x.s = 0;\r\n      }\r\n\r\n      return x;\r\n    }\r\n\r\n    // Remove excess digits.\r\n    if (i == 0) {\r\n      xd.length = xdi;\r\n      k = 1;\r\n      xdi--;\r\n    } else {\r\n      xd.length = xdi + 1;\r\n      k = mathpow(10, LOG_BASE - i);\r\n\r\n      // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n      // j > 0 means i > number of leading zeros of w.\r\n      xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;\r\n    }\r\n\r\n    if (doRound) {\r\n      for (;;) {\r\n\r\n        // Is the digit to be rounded up in the first word of xd?\r\n        if (xdi == 0) {\r\n          if ((xd[0] += k) == BASE) {\r\n            xd[0] = 1;\r\n            ++x.e;\r\n          }\r\n\r\n          break;\r\n        } else {\r\n          xd[xdi] += k;\r\n          if (xd[xdi] != BASE) break;\r\n          xd[xdi--] = 0;\r\n          k = 1;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n\r\n    if (external && (x.e > MAX_E || x.e < -MAX_E)) {\r\n      throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  function subtract(x, y) {\r\n    var d, e, i, j, k, len, xd, xe, xLTy, yd,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    // Return y negated if x is zero.\r\n    // Return x if y is zero and x is non-zero.\r\n    if (!x.s || !y.s) {\r\n      if (y.s) y.s = -y.s;\r\n      else y = new Ctor(x);\r\n      return external ? round(y, pr) : y;\r\n    }\r\n\r\n    xd = x.d;\r\n    yd = y.d;\r\n\r\n    // x and y are non-zero numbers with the same sign.\r\n\r\n    e = y.e;\r\n    xe = x.e;\r\n    xd = xd.slice();\r\n    k = xe - e;\r\n\r\n    // If exponents differ...\r\n    if (k) {\r\n      xLTy = k < 0;\r\n\r\n      if (xLTy) {\r\n        d = xd;\r\n        k = -k;\r\n        len = yd.length;\r\n      } else {\r\n        d = yd;\r\n        e = xe;\r\n        len = xd.length;\r\n      }\r\n\r\n      // Numbers with massively different exponents would result in a very high number of zeros\r\n      // needing to be prepended, but this can be avoided while still ensuring correct rounding by\r\n      // limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n      i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n      if (k > i) {\r\n        k = i;\r\n        d.length = 1;\r\n      }\r\n\r\n      // Prepend zeros to equalise exponents.\r\n      d.reverse();\r\n      for (i = k; i--;) d.push(0);\r\n      d.reverse();\r\n\r\n    // Base 1e7 exponents equal.\r\n    } else {\r\n\r\n      // Check digits to determine which is the bigger number.\r\n\r\n      i = xd.length;\r\n      len = yd.length;\r\n      xLTy = i < len;\r\n      if (xLTy) len = i;\r\n\r\n      for (i = 0; i < len; i++) {\r\n        if (xd[i] != yd[i]) {\r\n          xLTy = xd[i] < yd[i];\r\n          break;\r\n        }\r\n      }\r\n\r\n      k = 0;\r\n    }\r\n\r\n    if (xLTy) {\r\n      d = xd;\r\n      xd = yd;\r\n      yd = d;\r\n      y.s = -y.s;\r\n    }\r\n\r\n    len = xd.length;\r\n\r\n    // Append zeros to xd if shorter.\r\n    // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.\r\n    for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n    // Subtract yd from xd.\r\n    for (i = yd.length; i > k;) {\r\n      if (xd[--i] < yd[i]) {\r\n        for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n        --xd[j];\r\n        xd[i] += BASE;\r\n      }\r\n\r\n      xd[i] -= yd[i];\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (; xd[--len] === 0;) xd.pop();\r\n\r\n    // Remove leading zeros and adjust exponent accordingly.\r\n    for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n    // Zero?\r\n    if (!xd[0]) return new Ctor(0);\r\n\r\n    y.d = xd;\r\n    y.e = e;\r\n\r\n    //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;\r\n    return external ? round(y, pr) : y;\r\n  }\r\n\r\n\r\n  function toString(x, isExp, sd) {\r\n    var k,\r\n      e = getBase10Exponent(x),\r\n      str = digitsToString(x.d),\r\n      len = str.length;\r\n\r\n    if (isExp) {\r\n      if (sd && (k = sd - len) > 0) {\r\n        str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n      } else if (len > 1) {\r\n        str = str.charAt(0) + '.' + str.slice(1);\r\n      }\r\n\r\n      str = str + (e < 0 ? 'e' : 'e+') + e;\r\n    } else if (e < 0) {\r\n      str = '0.' + getZeroString(-e - 1) + str;\r\n      if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n    } else if (e >= len) {\r\n      str += getZeroString(e + 1 - len);\r\n      if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n    } else {\r\n      if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n      if (sd && (k = sd - len) > 0) {\r\n        if (e + 1 === len) str += '.';\r\n        str += getZeroString(k);\r\n      }\r\n    }\r\n\r\n    return x.s < 0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // Does not strip trailing zeros.\r\n  function truncate(arr, len) {\r\n    if (arr.length > len) {\r\n      arr.length = len;\r\n      return true;\r\n    }\r\n  }\r\n\r\n\r\n  // Decimal methods\r\n\r\n\r\n  /*\r\n   *  clone\r\n   *  config/set\r\n   */\r\n\r\n\r\n  /*\r\n   * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n   * constructor.\r\n   *\r\n   */\r\n  function clone(obj) {\r\n    var i, p, ps;\r\n\r\n    /*\r\n     * The Decimal constructor and exported function.\r\n     * Return a new Decimal instance.\r\n     *\r\n     * value {number|string|Decimal} A numeric value.\r\n     *\r\n     */\r\n    function Decimal(value) {\r\n      var x = this;\r\n\r\n      // Decimal called without new.\r\n      if (!(x instanceof Decimal)) return new Decimal(value);\r\n\r\n      // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n      // which points to Object.\r\n      x.constructor = Decimal;\r\n\r\n      // Duplicate.\r\n      if (value instanceof Decimal) {\r\n        x.s = value.s;\r\n        x.e = value.e;\r\n        x.d = (value = value.d) ? value.slice() : value;\r\n        return;\r\n      }\r\n\r\n      if (typeof value === 'number') {\r\n\r\n        // Reject Infinity/NaN.\r\n        if (value * 0 !== 0) {\r\n          throw Error(invalidArgument + value);\r\n        }\r\n\r\n        if (value > 0) {\r\n          x.s = 1;\r\n        } else if (value < 0) {\r\n          value = -value;\r\n          x.s = -1;\r\n        } else {\r\n          x.s = 0;\r\n          x.e = 0;\r\n          x.d = [0];\r\n          return;\r\n        }\r\n\r\n        // Fast path for small integers.\r\n        if (value === ~~value && value < 1e7) {\r\n          x.e = 0;\r\n          x.d = [value];\r\n          return;\r\n        }\r\n\r\n        return parseDecimal(x, value.toString());\r\n      } else if (typeof value !== 'string') {\r\n        throw Error(invalidArgument + value);\r\n      }\r\n\r\n      // Minus sign?\r\n      if (value.charCodeAt(0) === 45) {\r\n        value = value.slice(1);\r\n        x.s = -1;\r\n      } else {\r\n        x.s = 1;\r\n      }\r\n\r\n      if (isDecimal.test(value)) parseDecimal(x, value);\r\n      else throw Error(invalidArgument + value);\r\n    }\r\n\r\n    Decimal.prototype = P;\r\n\r\n    Decimal.ROUND_UP = 0;\r\n    Decimal.ROUND_DOWN = 1;\r\n    Decimal.ROUND_CEIL = 2;\r\n    Decimal.ROUND_FLOOR = 3;\r\n    Decimal.ROUND_HALF_UP = 4;\r\n    Decimal.ROUND_HALF_DOWN = 5;\r\n    Decimal.ROUND_HALF_EVEN = 6;\r\n    Decimal.ROUND_HALF_CEIL = 7;\r\n    Decimal.ROUND_HALF_FLOOR = 8;\r\n\r\n    Decimal.clone = clone;\r\n    Decimal.config = Decimal.set = config;\r\n\r\n    if (obj === void 0) obj = {};\r\n    if (obj) {\r\n      ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];\r\n      for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n    }\r\n\r\n    Decimal.config(obj);\r\n\r\n    return Decimal;\r\n  }\r\n\r\n\r\n  /*\r\n   * Configure global settings for a Decimal constructor.\r\n   *\r\n   * `obj` is an object with one or more of the following properties,\r\n   *\r\n   *   precision  {number}\r\n   *   rounding   {number}\r\n   *   toExpNeg   {number}\r\n   *   toExpPos   {number}\r\n   *\r\n   * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n   *\r\n   */\r\n  function config(obj) {\r\n    if (!obj || typeof obj !== 'object') {\r\n      throw Error(decimalError + 'Object expected');\r\n    }\r\n    var i, p, v,\r\n      ps = [\r\n        'precision', 1, MAX_DIGITS,\r\n        'rounding', 0, 8,\r\n        'toExpNeg', -1 / 0, 0,\r\n        'toExpPos', 0, 1 / 0\r\n      ];\r\n\r\n    for (i = 0; i < ps.length; i += 3) {\r\n      if ((v = obj[p = ps[i]]) !== void 0) {\r\n        if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n        else throw Error(invalidArgument + p + ': ' + v);\r\n      }\r\n    }\r\n\r\n    if ((v = obj[p = 'LN10']) !== void 0) {\r\n        if (v == Math.LN10) this[p] = new this(v);\r\n        else throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n\r\n    return this;\r\n  }\r\n\r\n\r\n  // Create and configure initial Decimal constructor.\r\n  Decimal = clone(Decimal);\r\n\r\n  Decimal['default'] = Decimal.Decimal = Decimal;\r\n\r\n  // Internal constant.\r\n  ONE = new Decimal(1);\r\n\r\n\r\n  // Export.\r\n\r\n\r\n  // AMD.\r\n  if (typeof define == 'function' && define.amd) {\r\n    define(function () {\r\n      return Decimal;\r\n    });\r\n\r\n  // Node and other environments that support module.exports.\r\n  } else if (typeof module != 'undefined' && module.exports) {\r\n    module.exports = Decimal;\r\n\r\n    // Browser.\r\n  } else {\r\n    if (!globalScope) {\r\n      globalScope = typeof self != 'undefined' && self && self.self == self\r\n        ? self : Function('return this')();\r\n    }\r\n\r\n    globalScope.Decimal = Decimal;\r\n  }\r\n})(this);\r\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n  useState = React.useState,\n  useEffect = React.useEffect,\n  useLayoutEffect = React.useLayoutEffect,\n  useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n  var value = getSnapshot(),\n    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n    inst = _useState[0].inst,\n    forceUpdate = _useState[1];\n  useLayoutEffect(\n    function () {\n      inst.value = value;\n      inst.getSnapshot = getSnapshot;\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n    },\n    [subscribe, value, getSnapshot]\n  );\n  useEffect(\n    function () {\n      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      return subscribe(function () {\n        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n      });\n    },\n    [subscribe]\n  );\n  useDebugValue(value);\n  return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n  return getSnapshot();\n}\nvar shim =\n  \"undefined\" === typeof window ||\n  \"undefined\" === typeof window.document ||\n  \"undefined\" === typeof window.document.createElement\n    ? useSyncExternalStore$1\n    : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst IS_UNSIGNED_INTEGER = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex(value, length = Number.MAX_SAFE_INTEGER) {\n    switch (typeof value) {\n        case 'number': {\n            return Number.isInteger(value) && value >= 0 && value < length;\n        }\n        case 'symbol': {\n            return false;\n        }\n        case 'string': {\n            return IS_UNSIGNED_INTEGER.test(value);\n        }\n    }\n}\n\nexports.isIndex = isIndex;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isPlainObject(object) {\n    if (typeof object !== 'object') {\n        return false;\n    }\n    if (object == null) {\n        return false;\n    }\n    if (Object.getPrototypeOf(object) === null) {\n        return true;\n    }\n    if (Object.prototype.toString.call(object) !== '[object Object]') {\n        const tag = object[Symbol.toStringTag];\n        if (tag == null) {\n            return false;\n        }\n        const isTagReadonly = !Object.getOwnPropertyDescriptor(object, Symbol.toStringTag)?.writable;\n        if (isTagReadonly) {\n            return false;\n        }\n        return object.toString() === `[object ${tag}]`;\n    }\n    let proto = object;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(object) === proto;\n}\n\nexports.isPlainObject = isPlainObject;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction uniqBy(arr, mapper) {\n    const map = new Map();\n    for (let i = 0; i < arr.length; i++) {\n        const item = arr[i];\n        const key = mapper(item);\n        if (!map.has(key)) {\n            map.set(key, item);\n        }\n    }\n    return Array.from(map.values());\n}\n\nexports.uniqBy = uniqBy;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isSymbol = require('../predicate/isSymbol.js');\n\nfunction toNumber(value) {\n    if (isSymbol.isSymbol(value)) {\n        return NaN;\n    }\n    return Number(value);\n}\n\nexports.toNumber = toNumber;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nfunction isLength(value) {\n    return Number.isSafeInteger(value) && value >= 0;\n}\n\nexports.isLength = isLength;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst regexpTag = '[object RegExp]';\nconst stringTag = '[object String]';\nconst numberTag = '[object Number]';\nconst booleanTag = '[object Boolean]';\nconst argumentsTag = '[object Arguments]';\nconst symbolTag = '[object Symbol]';\nconst dateTag = '[object Date]';\nconst mapTag = '[object Map]';\nconst setTag = '[object Set]';\nconst arrayTag = '[object Array]';\nconst functionTag = '[object Function]';\nconst arrayBufferTag = '[object ArrayBuffer]';\nconst objectTag = '[object Object]';\nconst errorTag = '[object Error]';\nconst dataViewTag = '[object DataView]';\nconst uint8ArrayTag = '[object Uint8Array]';\nconst uint8ClampedArrayTag = '[object Uint8ClampedArray]';\nconst uint16ArrayTag = '[object Uint16Array]';\nconst uint32ArrayTag = '[object Uint32Array]';\nconst bigUint64ArrayTag = '[object BigUint64Array]';\nconst int8ArrayTag = '[object Int8Array]';\nconst int16ArrayTag = '[object Int16Array]';\nconst int32ArrayTag = '[object Int32Array]';\nconst bigInt64ArrayTag = '[object BigInt64Array]';\nconst float32ArrayTag = '[object Float32Array]';\nconst float64ArrayTag = '[object Float64Array]';\n\nexports.argumentsTag = argumentsTag;\nexports.arrayBufferTag = arrayBufferTag;\nexports.arrayTag = arrayTag;\nexports.bigInt64ArrayTag = bigInt64ArrayTag;\nexports.bigUint64ArrayTag = bigUint64ArrayTag;\nexports.booleanTag = booleanTag;\nexports.dataViewTag = dataViewTag;\nexports.dateTag = dateTag;\nexports.errorTag = errorTag;\nexports.float32ArrayTag = float32ArrayTag;\nexports.float64ArrayTag = float64ArrayTag;\nexports.functionTag = functionTag;\nexports.int16ArrayTag = int16ArrayTag;\nexports.int32ArrayTag = int32ArrayTag;\nexports.int8ArrayTag = int8ArrayTag;\nexports.mapTag = mapTag;\nexports.numberTag = numberTag;\nexports.objectTag = objectTag;\nexports.regexpTag = regexpTag;\nexports.setTag = setTag;\nexports.stringTag = stringTag;\nexports.symbolTag = symbolTag;\nexports.uint16ArrayTag = uint16ArrayTag;\nexports.uint32ArrayTag = uint32ArrayTag;\nexports.uint8ArrayTag = uint8ArrayTag;\nexports.uint8ClampedArrayTag = uint8ClampedArrayTag;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst isEqualWith = require('./isEqualWith.js');\nconst noop = require('../function/noop.js');\n\nfunction isEqual(a, b) {\n    return isEqualWith.isEqualWith(a, b, noop.noop);\n}\n\nexports.isEqual = isEqual;\n","'use strict';\n\nObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\nconst cloneDeepWith$1 = require('../../object/cloneDeepWith.js');\nconst tags = require('../_internal/tags.js');\n\nfunction cloneDeepWith(obj, customizer) {\n    return cloneDeepWith$1.cloneDeepWith(obj, (value, key, object, stack) => {\n        const cloned = customizer?.(value, key, object, stack);\n        if (cloned != null) {\n            return cloned;\n        }\n        if (typeof obj !== 'object') {\n            return undefined;\n        }\n        switch (Object.prototype.toString.call(obj)) {\n            case tags.numberTag:\n            case tags.stringTag:\n            case tags.booleanTag: {\n                const result = new obj.constructor(obj?.valueOf());\n                cloneDeepWith$1.copyProperties(result, obj);\n                return result;\n            }\n            case tags.argumentsTag: {\n                const result = {};\n                cloneDeepWith$1.copyProperties(result, obj);\n                result.length = obj.length;\n                result[Symbol.iterator] = obj[Symbol.iterator];\n                return result;\n            }\n            default: {\n                return undefined;\n            }\n        }\n    });\n}\n\nexports.cloneDeepWith = cloneDeepWith;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import get from 'es-toolkit/compat/get';\n\nexport const mathSign = (value: number) => {\n  if (value === 0) {\n    return 0;\n  }\n  if (value > 0) {\n    return 1;\n  }\n\n  return -1;\n};\n\nexport const isNan = (value: unknown): boolean => {\n  // eslint-disable-next-line eqeqeq\n  return typeof value == 'number' && value != +value;\n};\n\nexport const isPercent = (value: string | number): value is `${number}%` =>\n  typeof value === 'string' && value.indexOf('%') === value.length - 1;\n\nexport const isNumber = (value: unknown): value is number =>\n  (typeof value === 'number' || value instanceof Number) && !isNan(value);\n\nexport const isNumOrStr = (value: unknown): value is number | string => isNumber(value) || typeof value === 'string';\n\nlet idCounter = 0;\nexport const uniqueId = (prefix?: string) => {\n  const id = ++idCounter;\n\n  return `${prefix || ''}${id}`;\n};\n\n/**\n * Get percent value of a total value\n * @param {number|string} percent A percent\n * @param {number} totalValue     Total value\n * @param {number} defaultValue   The value returned when percent is undefined or invalid\n * @param {boolean} validate      If set to be true, the result will be validated\n * @return {number} value\n */\nexport const getPercentValue = (\n  percent: number | string,\n  totalValue: number | undefined,\n  defaultValue = 0,\n  validate = false,\n) => {\n  if (!isNumber(percent) && typeof percent !== 'string') {\n    return defaultValue;\n  }\n\n  let value: number;\n\n  if (isPercent(percent)) {\n    if (totalValue == null) {\n      return defaultValue;\n    }\n    const index = percent.indexOf('%');\n    value = (totalValue * parseFloat((percent as string).slice(0, index))) / 100;\n  } else {\n    value = +percent;\n  }\n\n  if (isNan(value)) {\n    value = defaultValue;\n  }\n\n  if (validate && totalValue != null && value > totalValue) {\n    value = totalValue;\n  }\n\n  return value;\n};\n\nexport const hasDuplicate = (ary: ReadonlyArray<unknown>): boolean => {\n  if (!Array.isArray(ary)) {\n    return false;\n  }\n\n  const len = ary.length;\n  const cache: Record<string, boolean> = {};\n\n  for (let i = 0; i < len; i++) {\n    if (!cache[ary[i]]) {\n      cache[ary[i]] = true;\n    } else {\n      return true;\n    }\n  }\n\n  return false;\n};\n\n/**\n * @deprecated instead use {@link interpolate}\n *  this function returns a function that is called immediately in all use-cases.\n *  Instead, use interpolate which returns a number and skips the anonymous function step.\n *  @param numberA The first number\n *  @param numberB The second number\n *  @return A function that returns the interpolated number\n */\nexport const interpolateNumber = (numberA: number | undefined, numberB: number | undefined) => {\n  if (isNumber(numberA) && isNumber(numberB)) {\n    return (t: number) => numberA + t * (numberB - numberA);\n  }\n\n  return () => numberB;\n};\n\nexport function interpolate(start: unknown, end: number, t: number): number;\nexport function interpolate(start: unknown, end: null, t: number): null;\nexport function interpolate(start: unknown, end: number | null, t: number): number | null;\nexport function interpolate(start: unknown, end: number | null, t: number): number | null {\n  if (isNumber(start) && isNumber(end)) {\n    return start + t * (end - start);\n  }\n  return end;\n}\n\nexport function findEntryInArray<T>(\n  ary: ReadonlyArray<T>,\n  specifiedKey: number | string | ((entry: T) => unknown),\n  specifiedValue: unknown,\n): T | undefined {\n  if (!ary || !ary.length) {\n    return undefined;\n  }\n\n  return ary.find(\n    entry =>\n      entry && (typeof specifiedKey === 'function' ? specifiedKey(entry) : get(entry, specifiedKey)) === specifiedValue,\n  );\n}\n\n/**\n * The least square linear regression\n * @param {Array} data The array of points\n * @returns {Object} The domain of x, and the parameter of linear function\n */\nexport const getLinearRegression = (data: ReadonlyArray<{ cx?: number; cy?: number }>) => {\n  if (!data || !data.length) {\n    return null;\n  }\n\n  const len = data.length;\n  let xsum = 0;\n  let ysum = 0;\n  let xysum = 0;\n  let xxsum = 0;\n  let xmin = Infinity;\n  let xmax = -Infinity;\n  let xcurrent = 0;\n  let ycurrent = 0;\n\n  for (let i = 0; i < len; i++) {\n    xcurrent = data[i].cx || 0;\n    ycurrent = data[i].cy || 0;\n\n    xsum += xcurrent;\n    ysum += ycurrent;\n    xysum += xcurrent * ycurrent;\n    xxsum += xcurrent * xcurrent;\n    xmin = Math.min(xmin, xcurrent);\n    xmax = Math.max(xmax, xcurrent);\n  }\n\n  const a = len * xxsum !== xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0;\n\n  return {\n    xmin,\n    xmax,\n    a,\n    b: (ysum - a * xsum) / len,\n  };\n};\n\ntype Nullish = null | undefined;\n\n/**\n * Checks if the value is null or undefined\n * @param value The value to check\n * @returns true if the value is null or undefined\n */\nexport const isNullish = (value: unknown): value is Nullish => {\n  return value === null || typeof value === 'undefined';\n};\n\n/**\n *Uppercase the first letter of a string\n * @param {string} value The string to uppercase\n * @returns {string} The uppercased string\n */\nexport const upperFirst = (value: string): string => {\n  if (isNullish(value)) {\n    return value;\n  }\n\n  return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n};\n","const EventKeys = [\n  'dangerouslySetInnerHTML',\n  'onCopy',\n  'onCopyCapture',\n  'onCut',\n  'onCutCapture',\n  'onPaste',\n  'onPasteCapture',\n  'onCompositionEnd',\n  'onCompositionEndCapture',\n  'onCompositionStart',\n  'onCompositionStartCapture',\n  'onCompositionUpdate',\n  'onCompositionUpdateCapture',\n  'onFocus',\n  'onFocusCapture',\n  'onBlur',\n  'onBlurCapture',\n  'onChange',\n  'onChangeCapture',\n  'onBeforeInput',\n  'onBeforeInputCapture',\n  'onInput',\n  'onInputCapture',\n  'onReset',\n  'onResetCapture',\n  'onSubmit',\n  'onSubmitCapture',\n  'onInvalid',\n  'onInvalidCapture',\n  'onLoad',\n  'onLoadCapture',\n  'onError',\n  'onErrorCapture',\n  'onKeyDown',\n  'onKeyDownCapture',\n  'onKeyPress',\n  'onKeyPressCapture',\n  'onKeyUp',\n  'onKeyUpCapture',\n  'onAbort',\n  'onAbortCapture',\n  'onCanPlay',\n  'onCanPlayCapture',\n  'onCanPlayThrough',\n  'onCanPlayThroughCapture',\n  'onDurationChange',\n  'onDurationChangeCapture',\n  'onEmptied',\n  'onEmptiedCapture',\n  'onEncrypted',\n  'onEncryptedCapture',\n  'onEnded',\n  'onEndedCapture',\n  'onLoadedData',\n  'onLoadedDataCapture',\n  'onLoadedMetadata',\n  'onLoadedMetadataCapture',\n  'onLoadStart',\n  'onLoadStartCapture',\n  'onPause',\n  'onPauseCapture',\n  'onPlay',\n  'onPlayCapture',\n  'onPlaying',\n  'onPlayingCapture',\n  'onProgress',\n  'onProgressCapture',\n  'onRateChange',\n  'onRateChangeCapture',\n  'onSeeked',\n  'onSeekedCapture',\n  'onSeeking',\n  'onSeekingCapture',\n  'onStalled',\n  'onStalledCapture',\n  'onSuspend',\n  'onSuspendCapture',\n  'onTimeUpdate',\n  'onTimeUpdateCapture',\n  'onVolumeChange',\n  'onVolumeChangeCapture',\n  'onWaiting',\n  'onWaitingCapture',\n  'onAuxClick',\n  'onAuxClickCapture',\n  'onClick',\n  'onClickCapture',\n  'onContextMenu',\n  'onContextMenuCapture',\n  'onDoubleClick',\n  'onDoubleClickCapture',\n  'onDrag',\n  'onDragCapture',\n  'onDragEnd',\n  'onDragEndCapture',\n  'onDragEnter',\n  'onDragEnterCapture',\n  'onDragExit',\n  'onDragExitCapture',\n  'onDragLeave',\n  'onDragLeaveCapture',\n  'onDragOver',\n  'onDragOverCapture',\n  'onDragStart',\n  'onDragStartCapture',\n  'onDrop',\n  'onDropCapture',\n  'onMouseDown',\n  'onMouseDownCapture',\n  'onMouseEnter',\n  'onMouseLeave',\n  'onMouseMove',\n  'onMouseMoveCapture',\n  'onMouseOut',\n  'onMouseOutCapture',\n  'onMouseOver',\n  'onMouseOverCapture',\n  'onMouseUp',\n  'onMouseUpCapture',\n  'onSelect',\n  'onSelectCapture',\n  'onTouchCancel',\n  'onTouchCancelCapture',\n  'onTouchEnd',\n  'onTouchEndCapture',\n  'onTouchMove',\n  'onTouchMoveCapture',\n  'onTouchStart',\n  'onTouchStartCapture',\n  'onPointerDown',\n  'onPointerDownCapture',\n  'onPointerMove',\n  'onPointerMoveCapture',\n  'onPointerUp',\n  'onPointerUpCapture',\n  'onPointerCancel',\n  'onPointerCancelCapture',\n  'onPointerEnter',\n  'onPointerEnterCapture',\n  'onPointerLeave',\n  'onPointerLeaveCapture',\n  'onPointerOver',\n  'onPointerOverCapture',\n  'onPointerOut',\n  'onPointerOutCapture',\n  'onGotPointerCapture',\n  'onGotPointerCaptureCapture',\n  'onLostPointerCapture',\n  'onLostPointerCaptureCapture',\n  'onScroll',\n  'onScrollCapture',\n  'onWheel',\n  'onWheelCapture',\n  'onAnimationStart',\n  'onAnimationStartCapture',\n  'onAnimationEnd',\n  'onAnimationEndCapture',\n  'onAnimationIteration',\n  'onAnimationIterationCapture',\n  'onTransitionEnd',\n  'onTransitionEndCapture',\n] as const;\n\nexport type EventKeysType = (typeof EventKeys)[number];\n\nexport function isEventKey(key: PropertyKey): key is EventKeysType {\n  if (typeof key !== 'string') {\n    return false;\n  }\n  const allowedEventKeys: ReadonlyArray<string> = EventKeys;\n  return allowedEventKeys.includes(key);\n}\n\n/**\n * Filters out event properties from the given object.\n * This function is useful for cleaning up props before passing them to a React component,\n * @param obj - The object containing properties to filter.\n * @returns A new object containing only the properties that are not event handlers.\n */\nexport function excludeEventProps<T extends Record<PropertyKey, any>>(obj: T): Omit<T, EventKeysType> {\n  const filteredEntries = Object.entries(obj).filter(([key]) => !isEventKey(key));\n  return Object.fromEntries(filteredEntries) as Omit<T, EventKeysType>;\n}\n","import {\n  AnimationEvent,\n  AriaAttributes,\n  ClipboardEvent,\n  Component,\n  CompositionEvent,\n  DragEvent,\n  FocusEvent,\n  FormEvent,\n  FunctionComponent,\n  isValidElement,\n  JSX,\n  KeyboardEvent,\n  MouseEvent,\n  PointerEvent,\n  ReactElement,\n  ReactNode,\n  SVGProps,\n  SyntheticEvent,\n  TouchEvent,\n  TransitionEvent,\n  UIEvent,\n  WheelEvent,\n} from 'react';\nimport type { Props as DotProps } from '../shape/Dot';\nimport { RechartsScale } from './ChartUtils';\nimport { AxisRange } from '../state/selectors/axisSelectors';\nimport { ExternalMouseEvents } from '../chart/types';\nimport { SyncMethod } from '../synchronisation/types';\nimport { isEventKey } from './excludeEventProps';\n\n/**\n * Determines how values are stacked:\n *\n * - `none` is the default, it adds values on top of each other. No smarts. Negative values will overlap.\n * - `expand` make it so that the values always add up to 1 - so the chart will look like a rectangle.\n * - `wiggle` and `silhouette` tries to keep the chart centered.\n * - `sign` stacks positive values above zero and negative values below zero. Similar to `none` but handles negatives.\n * - `positive` ignores all negative values, and then behaves like \\`none\\`.\n *\n * Also see https://d3js.org/d3-shape/stack#stack-offsets\n * (note that the `diverging` offset in d3 is named `sign` in recharts)\n */\nexport type StackOffsetType = 'sign' | 'expand' | 'none' | 'wiggle' | 'silhouette' | 'positive';\nexport type CartesianLayout = 'horizontal' | 'vertical';\nexport type PolarLayout = 'centric' | 'radial';\n/**\n * @deprecated use either `CartesianLayout` or `PolarLayout` instead.\n * Mixing both charts families leads to ambiguity in the type system.\n * These two layouts share very few properties, so it is best to keep them separate.\n */\nexport type LayoutType = CartesianLayout | PolarLayout;\nexport type AxisType = 'xAxis' | 'yAxis' | 'zAxis' | 'angleAxis' | 'radiusAxis';\nexport type AxisDomainType = 'number' | 'category';\nexport type DataKey<T> = string | number | ((obj: T) => any);\nexport type PresentationAttributesWithProps<P, T> = AriaAttributes &\n  DOMAttributesWithProps<P, T> &\n  Omit<SVGProps<T>, keyof DOMAttributesWithProps<P, T>>;\nexport type PresentationAttributesAdaptChildEvent<P, T> = AriaAttributes &\n  DOMAttributesAdaptChildEvent<P, T> &\n  Omit<SVGProps<T>, keyof DOMAttributesAdaptChildEvent<P, T>>;\n\nexport type SymbolType = 'circle' | 'cross' | 'diamond' | 'square' | 'star' | 'triangle' | 'wye';\nexport type LegendType =\n  | 'circle'\n  | 'cross'\n  | 'diamond'\n  | 'line'\n  | 'plainline'\n  | 'rect'\n  | 'square'\n  | 'star'\n  | 'triangle'\n  | 'wye'\n  | 'none';\nexport type TooltipType = 'none';\n\nexport type AllowInDimension = {\n  x?: boolean;\n  y?: boolean;\n};\n\nexport interface Coordinate {\n  x: number;\n  y: number;\n}\n\nexport interface NullableCoordinate {\n  x: number | null;\n  y: number | null;\n}\n\n/**\n * @deprecated do not use: too many properties, mixing too many concepts, cartesian and polar together, everything optional.\n */\nexport interface ChartCoordinate extends Coordinate {\n  xAxis?: any;\n  yAxis?: any;\n  width?: any;\n  height?: any;\n  offset?: ChartOffsetInternal;\n  angle?: number;\n  radius?: number;\n  cx?: number;\n  cy?: number;\n  startAngle?: number;\n  endAngle?: number;\n  innerRadius?: number;\n  outerRadius?: number;\n}\n\nexport type PolarCoordinate = {\n  cx: number;\n  cy: number;\n  radius: number;\n  startAngle: number;\n  endAngle: number;\n};\n\nexport type ScaleType =\n  | 'auto'\n  | 'linear'\n  | 'pow'\n  | 'sqrt'\n  | 'log'\n  | 'symlog'\n  | 'identity'\n  | 'time'\n  | 'band'\n  | 'point'\n  | 'ordinal'\n  | 'quantile'\n  | 'quantize'\n  | 'utc'\n  | 'sequential'\n  | 'threshold';\n\n//\n// Event Handler Types -- Copied from @types/react/index.d.ts and adapted for Props.\n//\n\ntype EventHandler<P, E extends SyntheticEvent<any>> = {\n  bivarianceHack(props: P, event: E): void;\n}['bivarianceHack'];\n\ntype ReactEventHandler<P, T = Element> = EventHandler<P, SyntheticEvent<T>>;\ntype ClipboardEventHandler<P, T = Element> = EventHandler<P, ClipboardEvent<T>>;\ntype CompositionEventHandler<P, T = Element> = EventHandler<P, CompositionEvent<T>>;\ntype DragEventHandler<P, T = Element> = EventHandler<P, DragEvent<T>>;\ntype FocusEventHandler<P, T = Element> = EventHandler<P, FocusEvent<T>>;\ntype FormEventHandler<P, T = Element> = EventHandler<P, FormEvent<T>>;\ntype KeyboardEventHandler<P, T = Element> = EventHandler<P, KeyboardEvent<T>>;\ntype MouseEventHandler<P, T = Element> = EventHandler<P, MouseEvent<T>>;\ntype TouchEventHandler<P, T = Element> = EventHandler<P, TouchEvent<T>>;\ntype PointerEventHandler<P, T = Element> = EventHandler<P, PointerEvent<T>>;\ntype UIEventHandler<P, T = Element> = EventHandler<P, UIEvent<T>>;\ntype WheelEventHandler<P, T = Element> = EventHandler<P, WheelEvent<T>>;\ntype AnimationEventHandler<P, T = Element> = EventHandler<P, AnimationEvent<T>>;\ntype TransitionEventHandler<P, T = Element> = EventHandler<P, TransitionEvent<T>>;\n\nexport interface DOMAttributesWithProps<P, T> {\n  children?: ReactNode;\n  dangerouslySetInnerHTML?: {\n    __html: string;\n  };\n\n  // Clipboard Events\n  onCopy?: ClipboardEventHandler<P, T>;\n  onCopyCapture?: ClipboardEventHandler<P, T>;\n  onCut?: ClipboardEventHandler<P, T>;\n  onCutCapture?: ClipboardEventHandler<P, T>;\n  onPaste?: ClipboardEventHandler<P, T>;\n  onPasteCapture?: ClipboardEventHandler<P, T>;\n\n  // Composition Events\n  onCompositionEnd?: CompositionEventHandler<P, T>;\n  onCompositionEndCapture?: CompositionEventHandler<P, T>;\n  onCompositionStart?: CompositionEventHandler<P, T>;\n  onCompositionStartCapture?: CompositionEventHandler<P, T>;\n  onCompositionUpdate?: CompositionEventHandler<P, T>;\n  onCompositionUpdateCapture?: CompositionEventHandler<P, T>;\n\n  // Focus Events\n  onFocus?: FocusEventHandler<P, T>;\n  onFocusCapture?: FocusEventHandler<P, T>;\n  onBlur?: FocusEventHandler<P, T>;\n  onBlurCapture?: FocusEventHandler<P, T>;\n\n  // Form Events\n  onChange?: FormEventHandler<P, T>;\n  onChangeCapture?: FormEventHandler<P, T>;\n  onBeforeInput?: FormEventHandler<P, T>;\n  onBeforeInputCapture?: FormEventHandler<P, T>;\n  onInput?: FormEventHandler<P, T>;\n  onInputCapture?: FormEventHandler<P, T>;\n  onReset?: FormEventHandler<P, T>;\n  onResetCapture?: FormEventHandler<P, T>;\n  onSubmit?: FormEventHandler<P, T>;\n  onSubmitCapture?: FormEventHandler<P, T>;\n  onInvalid?: FormEventHandler<P, T>;\n  onInvalidCapture?: FormEventHandler<P, T>;\n\n  // Image Events\n  onLoad?: ReactEventHandler<P, T>;\n  onLoadCapture?: ReactEventHandler<P, T>;\n  onError?: ReactEventHandler<P, T>; // also a Media Event\n  onErrorCapture?: ReactEventHandler<P, T>; // also a Media Event\n\n  // Keyboard Events\n  onKeyDown?: KeyboardEventHandler<P, T>;\n  onKeyDownCapture?: KeyboardEventHandler<P, T>;\n  onKeyPress?: KeyboardEventHandler<P, T>;\n  onKeyPressCapture?: KeyboardEventHandler<P, T>;\n  onKeyUp?: KeyboardEventHandler<P, T>;\n  onKeyUpCapture?: KeyboardEventHandler<P, T>;\n\n  // Media Events\n  onAbort?: ReactEventHandler<P, T>;\n  onAbortCapture?: ReactEventHandler<P, T>;\n  onCanPlay?: ReactEventHandler<P, T>;\n  onCanPlayCapture?: ReactEventHandler<P, T>;\n  onCanPlayThrough?: ReactEventHandler<P, T>;\n  onCanPlayThroughCapture?: ReactEventHandler<P, T>;\n  onDurationChange?: ReactEventHandler<P, T>;\n  onDurationChangeCapture?: ReactEventHandler<P, T>;\n  onEmptied?: ReactEventHandler<P, T>;\n  onEmptiedCapture?: ReactEventHandler<P, T>;\n  onEncrypted?: ReactEventHandler<P, T>;\n  onEncryptedCapture?: ReactEventHandler<P, T>;\n  onEnded?: ReactEventHandler<P, T>;\n  onEndedCapture?: ReactEventHandler<P, T>;\n  onLoadedData?: ReactEventHandler<P, T>;\n  onLoadedDataCapture?: ReactEventHandler<P, T>;\n  onLoadedMetadata?: ReactEventHandler<P, T>;\n  onLoadedMetadataCapture?: ReactEventHandler<P, T>;\n  onLoadStart?: ReactEventHandler<P, T>;\n  onLoadStartCapture?: ReactEventHandler<P, T>;\n  onPause?: ReactEventHandler<P, T>;\n  onPauseCapture?: ReactEventHandler<P, T>;\n  onPlay?: ReactEventHandler<P, T>;\n  onPlayCapture?: ReactEventHandler<P, T>;\n  onPlaying?: ReactEventHandler<P, T>;\n  onPlayingCapture?: ReactEventHandler<P, T>;\n  onProgress?: ReactEventHandler<P, T>;\n  onProgressCapture?: ReactEventHandler<P, T>;\n  onRateChange?: ReactEventHandler<P, T>;\n  onRateChangeCapture?: ReactEventHandler<P, T>;\n  onSeeked?: ReactEventHandler<P, T>;\n  onSeekedCapture?: ReactEventHandler<P, T>;\n  onSeeking?: ReactEventHandler<P, T>;\n  onSeekingCapture?: ReactEventHandler<P, T>;\n  onStalled?: ReactEventHandler<P, T>;\n  onStalledCapture?: ReactEventHandler<P, T>;\n  onSuspend?: ReactEventHandler<P, T>;\n  onSuspendCapture?: ReactEventHandler<P, T>;\n  onTimeUpdate?: ReactEventHandler<P, T>;\n  onTimeUpdateCapture?: ReactEventHandler<P, T>;\n  onVolumeChange?: ReactEventHandler<P, T>;\n  onVolumeChangeCapture?: ReactEventHandler<P, T>;\n  onWaiting?: ReactEventHandler<P, T>;\n  onWaitingCapture?: ReactEventHandler<P, T>;\n\n  // MouseEvents\n  onAuxClick?: MouseEventHandler<P, T>;\n  onAuxClickCapture?: MouseEventHandler<P, T>;\n  onClick?: MouseEventHandler<P, T>;\n  onClickCapture?: MouseEventHandler<P, T>;\n  onContextMenu?: MouseEventHandler<P, T>;\n  onContextMenuCapture?: MouseEventHandler<P, T>;\n  onDoubleClick?: MouseEventHandler<P, T>;\n  onDoubleClickCapture?: MouseEventHandler<P, T>;\n  onDrag?: DragEventHandler<P, T>;\n  onDragCapture?: DragEventHandler<P, T>;\n  onDragEnd?: DragEventHandler<P, T>;\n  onDragEndCapture?: DragEventHandler<P, T>;\n  onDragEnter?: DragEventHandler<P, T>;\n  onDragEnterCapture?: DragEventHandler<P, T>;\n  onDragExit?: DragEventHandler<P, T>;\n  onDragExitCapture?: DragEventHandler<P, T>;\n  onDragLeave?: DragEventHandler<P, T>;\n  onDragLeaveCapture?: DragEventHandler<P, T>;\n  onDragOver?: DragEventHandler<P, T>;\n  onDragOverCapture?: DragEventHandler<P, T>;\n  onDragStart?: DragEventHandler<P, T>;\n  onDragStartCapture?: DragEventHandler<P, T>;\n  onDrop?: DragEventHandler<P, T>;\n  onDropCapture?: DragEventHandler<P, T>;\n  onMouseDown?: MouseEventHandler<P, T>;\n  onMouseDownCapture?: MouseEventHandler<P, T>;\n  onMouseEnter?: MouseEventHandler<P, T>;\n  onMouseLeave?: MouseEventHandler<P, T>;\n  onMouseMove?: MouseEventHandler<P, T>;\n  onMouseMoveCapture?: MouseEventHandler<P, T>;\n  onMouseOut?: MouseEventHandler<P, T>;\n  onMouseOutCapture?: MouseEventHandler<P, T>;\n  onMouseOver?: MouseEventHandler<P, T>;\n  onMouseOverCapture?: MouseEventHandler<P, T>;\n  onMouseUp?: MouseEventHandler<P, T>;\n  onMouseUpCapture?: MouseEventHandler<P, T>;\n\n  // Selection Events\n  onSelect?: ReactEventHandler<P, T>;\n  onSelectCapture?: ReactEventHandler<P, T>;\n\n  // Touch Events\n  onTouchCancel?: TouchEventHandler<P, T>;\n  onTouchCancelCapture?: TouchEventHandler<P, T>;\n  onTouchEnd?: TouchEventHandler<P, T>;\n  onTouchEndCapture?: TouchEventHandler<P, T>;\n  onTouchMove?: TouchEventHandler<P, T>;\n  onTouchMoveCapture?: TouchEventHandler<P, T>;\n  onTouchStart?: TouchEventHandler<P, T>;\n  onTouchStartCapture?: TouchEventHandler<P, T>;\n\n  // Pointer Events\n  onPointerDown?: PointerEventHandler<P, T>;\n  onPointerDownCapture?: PointerEventHandler<P, T>;\n  onPointerMove?: PointerEventHandler<P, T>;\n  onPointerMoveCapture?: PointerEventHandler<P, T>;\n  onPointerUp?: PointerEventHandler<P, T>;\n  onPointerUpCapture?: PointerEventHandler<P, T>;\n  onPointerCancel?: PointerEventHandler<P, T>;\n  onPointerCancelCapture?: PointerEventHandler<P, T>;\n  onPointerEnter?: PointerEventHandler<P, T>;\n  onPointerEnterCapture?: PointerEventHandler<P, T>;\n  onPointerLeave?: PointerEventHandler<P, T>;\n  onPointerLeaveCapture?: PointerEventHandler<P, T>;\n  onPointerOver?: PointerEventHandler<P, T>;\n  onPointerOverCapture?: PointerEventHandler<P, T>;\n  onPointerOut?: PointerEventHandler<P, T>;\n  onPointerOutCapture?: PointerEventHandler<P, T>;\n  onGotPointerCapture?: PointerEventHandler<P, T>;\n  onGotPointerCaptureCapture?: PointerEventHandler<P, T>;\n  onLostPointerCapture?: PointerEventHandler<P, T>;\n  onLostPointerCaptureCapture?: PointerEventHandler<P, T>;\n\n  // UI Events\n  onScroll?: UIEventHandler<P, T>;\n  onScrollCapture?: UIEventHandler<P, T>;\n\n  // Wheel Events\n  onWheel?: WheelEventHandler<P, T>;\n  onWheelCapture?: WheelEventHandler<P, T>;\n\n  // Animation Events\n  onAnimationStart?: AnimationEventHandler<P, T>;\n  onAnimationStartCapture?: AnimationEventHandler<P, T>;\n  onAnimationEnd?: AnimationEventHandler<P, T>;\n  onAnimationEndCapture?: AnimationEventHandler<P, T>;\n  onAnimationIteration?: AnimationEventHandler<P, T>;\n  onAnimationIterationCapture?: AnimationEventHandler<P, T>;\n\n  // Transition Events\n  onTransitionEnd?: TransitionEventHandler<P, T>;\n  onTransitionEndCapture?: TransitionEventHandler<P, T>;\n}\n\ntype AdaptChildEventHandler<P, E extends SyntheticEvent<any>> = {\n  bivarianceHack(data: P, index: number, event: E): void;\n}['bivarianceHack'];\n\ntype AdaptChildReactEventHandler<P, T = Element> = AdaptChildEventHandler<P, SyntheticEvent<T>>;\ntype AdaptChildClipboardEventHandler<P, T = Element> = AdaptChildEventHandler<P, ClipboardEvent<T>>;\ntype AdaptChildCompositionEventHandler<P, T = Element> = AdaptChildEventHandler<P, CompositionEvent<T>>;\ntype AdaptChildDragEventHandler<P, T = Element> = AdaptChildEventHandler<P, DragEvent<T>>;\ntype AdaptChildFocusEventHandler<P, T = Element> = AdaptChildEventHandler<P, FocusEvent<T>>;\ntype AdaptChildFormEventHandler<P, T = Element> = AdaptChildEventHandler<P, FormEvent<T>>;\ntype AdaptChildKeyboardEventHandler<P, T = Element> = AdaptChildEventHandler<P, KeyboardEvent<T>>;\ntype AdaptChildMouseEventHandler<P, T = Element> = AdaptChildEventHandler<P, MouseEvent<T>>;\ntype AdaptChildTouchEventHandler<P, T = Element> = AdaptChildEventHandler<P, TouchEvent<T>>;\ntype AdaptChildPointerEventHandler<P, T = Element> = AdaptChildEventHandler<P, PointerEvent<T>>;\ntype AdaptChildUIEventHandler<P, T = Element> = AdaptChildEventHandler<P, UIEvent<T>>;\ntype AdaptChildWheelEventHandler<P, T = Element> = AdaptChildEventHandler<P, WheelEvent<T>>;\ntype AdaptChildAnimationEventHandler<P, T = Element> = AdaptChildEventHandler<P, AnimationEvent<T>>;\ntype AdaptChildTransitionEventHandler<P, T = Element> = AdaptChildEventHandler<P, TransitionEvent<T>>;\n\nexport type DOMAttributesAdaptChildEvent<P, T> = {\n  children?: ReactNode;\n  dangerouslySetInnerHTML?: {\n    __html: string;\n  };\n\n  // Clipboard Events\n  onCopy?: AdaptChildClipboardEventHandler<P, T>;\n  onCopyCapture?: AdaptChildClipboardEventHandler<P, T>;\n  onCut?: AdaptChildClipboardEventHandler<P, T>;\n  onCutCapture?: AdaptChildClipboardEventHandler<P, T>;\n  onPaste?: AdaptChildClipboardEventHandler<P, T>;\n  onPasteCapture?: AdaptChildClipboardEventHandler<P, T>;\n\n  // Composition Events\n  onCompositionEnd?: AdaptChildCompositionEventHandler<P, T>;\n  onCompositionEndCapture?: AdaptChildCompositionEventHandler<P, T>;\n  onCompositionStart?: AdaptChildCompositionEventHandler<P, T>;\n  onCompositionStartCapture?: AdaptChildCompositionEventHandler<P, T>;\n  onCompositionUpdate?: AdaptChildCompositionEventHandler<P, T>;\n  onCompositionUpdateCapture?: AdaptChildCompositionEventHandler<P, T>;\n\n  // Focus Events\n  onFocus?: AdaptChildFocusEventHandler<P, T>;\n  onFocusCapture?: AdaptChildFocusEventHandler<P, T>;\n  onBlur?: AdaptChildFocusEventHandler<P, T>;\n  onBlurCapture?: AdaptChildFocusEventHandler<P, T>;\n\n  // Form Events\n  onChange?: AdaptChildFormEventHandler<P, T>;\n  onChangeCapture?: AdaptChildFormEventHandler<P, T>;\n  onBeforeInput?: AdaptChildFormEventHandler<P, T>;\n  onBeforeInputCapture?: AdaptChildFormEventHandler<P, T>;\n  onInput?: AdaptChildFormEventHandler<P, T>;\n  onInputCapture?: AdaptChildFormEventHandler<P, T>;\n  onReset?: AdaptChildFormEventHandler<P, T>;\n  onResetCapture?: AdaptChildFormEventHandler<P, T>;\n  onSubmit?: AdaptChildFormEventHandler<P, T>;\n  onSubmitCapture?: AdaptChildFormEventHandler<P, T>;\n  onInvalid?: AdaptChildFormEventHandler<P, T>;\n  onInvalidCapture?: AdaptChildFormEventHandler<P, T>;\n\n  // Image Events\n  onLoad?: AdaptChildReactEventHandler<P, T>;\n  onLoadCapture?: AdaptChildReactEventHandler<P, T>;\n  onError?: AdaptChildReactEventHandler<P, T>; // also a Media Event\n  onErrorCapture?: AdaptChildReactEventHandler<P, T>; // also a Media Event\n\n  // Keyboard Events\n  onKeyDown?: AdaptChildKeyboardEventHandler<P, T>;\n  onKeyDownCapture?: AdaptChildKeyboardEventHandler<P, T>;\n  onKeyPress?: AdaptChildKeyboardEventHandler<P, T>;\n  onKeyPressCapture?: AdaptChildKeyboardEventHandler<P, T>;\n  onKeyUp?: AdaptChildKeyboardEventHandler<P, T>;\n  onKeyUpCapture?: AdaptChildKeyboardEventHandler<P, T>;\n\n  // Media Events\n  onAbort?: AdaptChildReactEventHandler<P, T>;\n  onAbortCapture?: AdaptChildReactEventHandler<P, T>;\n  onCanPlay?: AdaptChildReactEventHandler<P, T>;\n  onCanPlayCapture?: AdaptChildReactEventHandler<P, T>;\n  onCanPlayThrough?: AdaptChildReactEventHandler<P, T>;\n  onCanPlayThroughCapture?: AdaptChildReactEventHandler<P, T>;\n  onDurationChange?: AdaptChildReactEventHandler<P, T>;\n  onDurationChangeCapture?: AdaptChildReactEventHandler<P, T>;\n  onEmptied?: AdaptChildReactEventHandler<P, T>;\n  onEmptiedCapture?: AdaptChildReactEventHandler<P, T>;\n  onEncrypted?: AdaptChildReactEventHandler<P, T>;\n  onEncryptedCapture?: AdaptChildReactEventHandler<P, T>;\n  onEnded?: AdaptChildReactEventHandler<P, T>;\n  onEndedCapture?: AdaptChildReactEventHandler<P, T>;\n  onLoadedData?: AdaptChildReactEventHandler<P, T>;\n  onLoadedDataCapture?: AdaptChildReactEventHandler<P, T>;\n  onLoadedMetadata?: AdaptChildReactEventHandler<P, T>;\n  onLoadedMetadataCapture?: AdaptChildReactEventHandler<P, T>;\n  onLoadStart?: AdaptChildReactEventHandler<P, T>;\n  onLoadStartCapture?: AdaptChildReactEventHandler<P, T>;\n  onPause?: AdaptChildReactEventHandler<P, T>;\n  onPauseCapture?: AdaptChildReactEventHandler<P, T>;\n  onPlay?: AdaptChildReactEventHandler<P, T>;\n  onPlayCapture?: AdaptChildReactEventHandler<P, T>;\n  onPlaying?: AdaptChildReactEventHandler<P, T>;\n  onPlayingCapture?: AdaptChildReactEventHandler<P, T>;\n  onProgress?: AdaptChildReactEventHandler<P, T>;\n  onProgressCapture?: AdaptChildReactEventHandler<P, T>;\n  onRateChange?: AdaptChildReactEventHandler<P, T>;\n  onRateChangeCapture?: AdaptChildReactEventHandler<P, T>;\n  onSeeked?: AdaptChildReactEventHandler<P, T>;\n  onSeekedCapture?: AdaptChildReactEventHandler<P, T>;\n  onSeeking?: AdaptChildReactEventHandler<P, T>;\n  onSeekingCapture?: AdaptChildReactEventHandler<P, T>;\n  onStalled?: AdaptChildReactEventHandler<P, T>;\n  onStalledCapture?: AdaptChildReactEventHandler<P, T>;\n  onSuspend?: AdaptChildReactEventHandler<P, T>;\n  onSuspendCapture?: AdaptChildReactEventHandler<P, T>;\n  onTimeUpdate?: AdaptChildReactEventHandler<P, T>;\n  onTimeUpdateCapture?: AdaptChildReactEventHandler<P, T>;\n  onVolumeChange?: AdaptChildReactEventHandler<P, T>;\n  onVolumeChangeCapture?: AdaptChildReactEventHandler<P, T>;\n  onWaiting?: AdaptChildReactEventHandler<P, T>;\n  onWaitingCapture?: AdaptChildReactEventHandler<P, T>;\n\n  // MouseEvents\n  onAuxClick?: AdaptChildMouseEventHandler<P, T>;\n  onAuxClickCapture?: AdaptChildMouseEventHandler<P, T>;\n  onClick?: AdaptChildMouseEventHandler<P, T>;\n  onClickCapture?: AdaptChildMouseEventHandler<P, T>;\n  onContextMenu?: AdaptChildMouseEventHandler<P, T>;\n  onContextMenuCapture?: AdaptChildMouseEventHandler<P, T>;\n  onDoubleClick?: AdaptChildMouseEventHandler<P, T>;\n  onDoubleClickCapture?: AdaptChildMouseEventHandler<P, T>;\n  onDrag?: AdaptChildDragEventHandler<P, T>;\n  onDragCapture?: AdaptChildDragEventHandler<P, T>;\n  onDragEnd?: AdaptChildDragEventHandler<P, T>;\n  onDragEndCapture?: AdaptChildDragEventHandler<P, T>;\n  onDragEnter?: AdaptChildDragEventHandler<P, T>;\n  onDragEnterCapture?: AdaptChildDragEventHandler<P, T>;\n  onDragExit?: AdaptChildDragEventHandler<P, T>;\n  onDragExitCapture?: AdaptChildDragEventHandler<P, T>;\n  onDragLeave?: AdaptChildDragEventHandler<P, T>;\n  onDragLeaveCapture?: AdaptChildDragEventHandler<P, T>;\n  onDragOver?: AdaptChildDragEventHandler<P, T>;\n  onDragOverCapture?: AdaptChildDragEventHandler<P, T>;\n  onDragStart?: AdaptChildDragEventHandler<P, T>;\n  onDragStartCapture?: AdaptChildDragEventHandler<P, T>;\n  onDrop?: AdaptChildDragEventHandler<P, T>;\n  onDropCapture?: AdaptChildDragEventHandler<P, T>;\n  onMouseDown?: AdaptChildMouseEventHandler<P, T>;\n  onMouseDownCapture?: AdaptChildMouseEventHandler<P, T>;\n  onMouseEnter?: AdaptChildMouseEventHandler<P, T>;\n  onMouseLeave?: AdaptChildMouseEventHandler<P, T>;\n  onMouseMove?: AdaptChildMouseEventHandler<P, T>;\n  onMouseMoveCapture?: AdaptChildMouseEventHandler<P, T>;\n  onMouseOut?: AdaptChildMouseEventHandler<P, T>;\n  onMouseOutCapture?: AdaptChildMouseEventHandler<P, T>;\n  onMouseOver?: AdaptChildMouseEventHandler<P, T>;\n  onMouseOverCapture?: AdaptChildMouseEventHandler<P, T>;\n  onMouseUp?: AdaptChildMouseEventHandler<P, T>;\n  onMouseUpCapture?: AdaptChildMouseEventHandler<P, T>;\n\n  // Selection Events\n  onSelect?: AdaptChildReactEventHandler<P, T>;\n  onSelectCapture?: AdaptChildReactEventHandler<P, T>;\n\n  // Touch Events\n  onTouchCancel?: AdaptChildTouchEventHandler<P, T>;\n  onTouchCancelCapture?: AdaptChildTouchEventHandler<P, T>;\n  onTouchEnd?: AdaptChildTouchEventHandler<P, T>;\n  onTouchEndCapture?: AdaptChildTouchEventHandler<P, T>;\n  onTouchMove?: AdaptChildTouchEventHandler<P, T>;\n  onTouchMoveCapture?: AdaptChildTouchEventHandler<P, T>;\n  onTouchStart?: AdaptChildTouchEventHandler<P, T>;\n  onTouchStartCapture?: AdaptChildTouchEventHandler<P, T>;\n\n  // Pointer Events\n  onPointerDown?: AdaptChildPointerEventHandler<P, T>;\n  onPointerDownCapture?: AdaptChildPointerEventHandler<P, T>;\n  onPointerMove?: AdaptChildPointerEventHandler<P, T>;\n  onPointerMoveCapture?: AdaptChildPointerEventHandler<P, T>;\n  onPointerUp?: AdaptChildPointerEventHandler<P, T>;\n  onPointerUpCapture?: AdaptChildPointerEventHandler<P, T>;\n  onPointerCancel?: AdaptChildPointerEventHandler<P, T>;\n  onPointerCancelCapture?: AdaptChildPointerEventHandler<P, T>;\n  onPointerEnter?: AdaptChildPointerEventHandler<P, T>;\n  onPointerEnterCapture?: AdaptChildPointerEventHandler<P, T>;\n  onPointerLeave?: AdaptChildPointerEventHandler<P, T>;\n  onPointerLeaveCapture?: AdaptChildPointerEventHandler<P, T>;\n  onPointerOver?: AdaptChildPointerEventHandler<P, T>;\n  onPointerOverCapture?: AdaptChildPointerEventHandler<P, T>;\n  onPointerOut?: AdaptChildPointerEventHandler<P, T>;\n  onPointerOutCapture?: AdaptChildPointerEventHandler<P, T>;\n  onGotPointerCapture?: AdaptChildPointerEventHandler<P, T>;\n  onGotPointerCaptureCapture?: AdaptChildPointerEventHandler<P, T>;\n  onLostPointerCapture?: AdaptChildPointerEventHandler<P, T>;\n  onLostPointerCaptureCapture?: AdaptChildPointerEventHandler<P, T>;\n\n  // UI Events\n  onScroll?: AdaptChildUIEventHandler<P, T>;\n  onScrollCapture?: AdaptChildUIEventHandler<P, T>;\n\n  // Wheel Events\n  onWheel?: AdaptChildWheelEventHandler<P, T>;\n  onWheelCapture?: AdaptChildWheelEventHandler<P, T>;\n\n  // Animation Events\n  onAnimationStart?: AdaptChildAnimationEventHandler<P, T>;\n  onAnimationStartCapture?: AdaptChildAnimationEventHandler<P, T>;\n  onAnimationEnd?: AdaptChildAnimationEventHandler<P, T>;\n  onAnimationEndCapture?: AdaptChildAnimationEventHandler<P, T>;\n  onAnimationIteration?: AdaptChildAnimationEventHandler<P, T>;\n  onAnimationIterationCapture?: AdaptChildAnimationEventHandler<P, T>;\n\n  // Transition Events\n  onTransitionEnd?: AdaptChildTransitionEventHandler<P, T>;\n  onTransitionEndCapture?: AdaptChildTransitionEventHandler<P, T>;\n};\n\nconst SVGContainerPropKeys = ['viewBox', 'children'];\n\nconst PolyElementKeys = ['points', 'pathLength'];\n\n/** svg element types that have specific attribute filtration requirements */\nexport type FilteredSvgElementType = 'svg' | 'polyline' | 'polygon';\n\n/** map of svg element types to unique svg attributes that belong to that element */\nexport const FilteredElementKeyMap: Record<FilteredSvgElementType, string[]> = {\n  svg: SVGContainerPropKeys,\n  polygon: PolyElementKeys,\n  polyline: PolyElementKeys,\n};\n\n/** The type of easing function to use for animations */\nexport type AnimationTiming = 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'linear';\n/** Specifies the duration of animation, the unit of this option is ms. */\nexport type AnimationDuration = number;\n\nexport type OffsetVertical = {\n  top: number;\n  bottom: number;\n};\n\nexport type OffsetHorizontal = {\n  left: number;\n  right: number;\n};\n\n/**\n * This object defines the offset of the chart area and width and height and brush and ... it's a bit too much information all in one.\n * We use it internally but let's not expose it to the outside world.\n * If you are looking for this information, instead import `ChartOffset` or `PlotArea` from `recharts`.\n */\nexport type ChartOffsetInternal = {\n  top: number;\n  bottom: number;\n  left: number;\n  right: number;\n  width: number;\n  height: number;\n  brushBottom: number;\n};\n\nexport interface Padding {\n  top: number;\n  bottom: number;\n  left: number;\n  right: number;\n}\n\nexport interface GeometrySector {\n  cx: number;\n  cy: number;\n  innerRadius: number;\n  outerRadius: number;\n  startAngle: number;\n  endAngle: number;\n}\n\nexport type GeometrySectorWithCornerRadius = GeometrySector & {\n  cornerRadius: number;\n  forceCornerRadius: boolean;\n  cornerIsExternal: boolean;\n};\n\nexport type AxisDomainItem = string | number | ((d: number) => string | number) | 'auto' | 'dataMin' | 'dataMax';\n\n/**\n * The domain of axis.\n * This is the definition\n *\n * Numeric domain is always defined by an array of exactly two values, for the min and the max of the axis.\n * Categorical domain is defined as array of all possible values.\n *\n * Can be specified in many ways:\n * - array of numbers\n * - with special strings like 'dataMin' and 'dataMax'\n * - with special string math like 'dataMin - 100'\n * - with keyword 'auto'\n * - or a function\n * - array of functions\n * - or a combination of the above\n */\nexport type AxisDomain =\n  | ReadonlyArray<string>\n  | ReadonlyArray<number>\n  | Readonly<[AxisDomainItem, AxisDomainItem]>\n  | (([dataMin, dataMax]: [number, number], allowDataOverflow: boolean) => [number, number]);\n\n/**\n * NumberDomain is an evaluated {@link AxisDomain}.\n * Unlike {@link AxisDomain}, it has no variety - it's a tuple of two number.\n * This is after all the keywords and functions were evaluated and what is left is [min, max].\n *\n * Know that the min, max values are not guaranteed to be nice numbers - values like -Infinity or NaN are possible.\n *\n * There are also `category` axes that have different things than numbers in their domain.\n */\nexport type NumberDomain = [min: number, max: number];\n\nexport type CategoricalDomain = ReadonlyArray<number | string | Date>;\n\nexport type TickProp =\n  | SVGProps<SVGTextElement>\n  | ReactElement<SVGElement>\n  | ((props: any) => ReactElement<SVGElement>)\n  | boolean;\n\n/** The props definition of base axis */\nexport interface BaseAxisProps {\n  /** The type of axis */\n  type?: AxisDomainType;\n  /** The key of data displayed in the axis */\n  dataKey?: DataKey<any>;\n  /** Whether display the axis */\n  hide?: boolean;\n  /** The scale type as a string, or scale function */\n  scale?: ScaleType | RechartsScale;\n  /** The option for tick */\n  tick?: TickProp;\n  /** The count of ticks */\n  tickCount?: number;\n  /** The option for axisLine */\n  axisLine?: boolean | SVGProps<SVGLineElement>;\n  /** The option for tickLine */\n  tickLine?: boolean | SVGProps<SVGLineElement>;\n  /** The size of tick line */\n  tickSize?: number;\n  /** The formatter function of tick */\n  tickFormatter?: (value: any, index: number) => string;\n  /**\n   * When domain of the axis is specified and the type of the axis is 'number',\n   * if allowDataOverflow is set to be false,\n   * the domain will be adjusted when the minimum value of data is smaller than domain[0] or\n   * the maximum value of data is greater than domain[1] so that the axis displays all data values.\n   * If set to true, graphic elements (line, area, bars) will be clipped to conform to the specified domain.\n   */\n  allowDataOverflow?: boolean;\n  /**\n   * Allow the axis has duplicated categories or not when the type of axis is \"category\".\n   */\n  allowDuplicatedCategory?: boolean;\n  /**\n   * Allow the ticks of axis to be decimals or not.\n   */\n  allowDecimals?: boolean;\n  /** The domain of scale in this axis */\n  domain?: AxisDomain;\n  /** Consider hidden elements when computing the domain (defaults to false) */\n  includeHidden?: boolean;\n  /** The name of data displayed in the axis */\n  name?: string;\n  /** The unit of data displayed in the axis */\n  unit?: string;\n  range?: AxisRange;\n  /** axis react component */\n  AxisComp?: any;\n  /** Needed to allow usage of the label prop on the X and Y axis */\n  label?: string | number | ReactElement | object;\n  /** The HTML element's class name */\n  className?: string;\n}\n\n/** Defines how ticks are placed and whether / how tick collisions are handled.\n * 'preserveStart' keeps the left tick on collision and ensures that the first tick is always shown.\n * 'preserveEnd' keeps the right tick on collision and ensures that the last tick is always shown.\n * 'preserveStartEnd' keeps the left tick on collision and ensures that the first and last ticks always show.\n * 'equidistantPreserveStart' selects a number N such that every nTh tick will be shown without collision.\n */\nexport type AxisInterval = number | 'preserveStart' | 'preserveEnd' | 'preserveStartEnd' | 'equidistantPreserveStart';\n\n/**\n * Ticks can be any type when the axis is the type of category.\n *\n * Ticks must be numbers when the axis is the type of number.\n */\nexport type AxisTick = number | string;\n\nexport interface TickItem {\n  value: any;\n  coordinate: number;\n  index: number;\n  offset?: number;\n}\n\nexport interface CartesianTickItem extends TickItem {\n  tickCoord?: number;\n  tickSize?: number;\n  isShow?: boolean;\n}\n\nexport interface Margin {\n  top?: number;\n  right?: number;\n  bottom?: number;\n  left?: number;\n}\n\nexport interface CartesianViewBox {\n  x?: number;\n  y?: number;\n  width?: number;\n  height?: number;\n}\n\nexport type CartesianViewBoxRequired = Required<CartesianViewBox>;\n\nexport interface PolarViewBox {\n  cx?: number;\n  cy?: number;\n  innerRadius?: number;\n  outerRadius?: number;\n  startAngle?: number;\n  endAngle?: number;\n  clockWise?: boolean;\n}\n\nexport type PolarViewBoxRequired = Required<PolarViewBox>;\n\nexport type ViewBox = CartesianViewBox | PolarViewBox;\n\ntype RecordString<T> = Record<string, T>;\n\ntype AdaptEventHandlersReturn = RecordString<(e?: Event) => any> | RecordString<(e: Event) => void> | null;\n\nexport const adaptEventHandlers = (\n  props: RecordString<any> | Component | FunctionComponent | boolean,\n  newHandler?: (e?: Event) => any,\n): AdaptEventHandlersReturn => {\n  if (!props || typeof props === 'function' || typeof props === 'boolean') {\n    return null;\n  }\n\n  let inputProps = props as RecordString<any>;\n\n  if (isValidElement(props)) {\n    inputProps = props.props as RecordString<any>;\n  }\n\n  if (typeof inputProps !== 'object' && typeof inputProps !== 'function') {\n    return null;\n  }\n\n  const out: RecordString<(e: Event) => void> = {};\n\n  Object.keys(inputProps).forEach(key => {\n    if (isEventKey(key)) {\n      out[key] = newHandler || ((e: Event) => inputProps[key](inputProps, e));\n    }\n  });\n\n  return out;\n};\n\nconst getEventHandlerOfChild =\n  (originalHandler: (data: any, index: number, e: Event) => void, data: any, index: number) =>\n  (e: Event): null => {\n    originalHandler(data, index, e);\n\n    return null;\n  };\n\nexport const adaptEventsOfChild = (\n  props: RecordString<any>,\n  data: any,\n  index: number,\n): RecordString<(e?: Event) => any> | null => {\n  if (props === null || (typeof props !== 'object' && typeof props !== 'function')) {\n    return null;\n  }\n\n  let out: RecordString<(e: Event) => void> | null = null;\n\n  Object.keys(props).forEach((key: string) => {\n    const item = (props as any)[key];\n\n    if (isEventKey(key) && typeof item === 'function') {\n      if (!out) out = {};\n\n      out[key] = getEventHandlerOfChild(item, data, index);\n    }\n  });\n\n  return out;\n};\n\n/**\n * 'axis' means that all graphical items belonging to this axis tick will be highlighted,\n * and all will be present in the tooltip.\n * Tooltip with 'axis' will display when hovering on the chart background.\n *\n * 'item' means only the one graphical item being hovered will show in the tooltip.\n * Tooltip with 'item' will display when hovering over individual graphical items.\n *\n * This is calculated internally;\n * charts have a `defaultTooltipEventType` and `validateTooltipEventTypes` options.\n *\n * Users then use <Tooltip shared={true} /> or <Tooltip shared={false} /> to control their preference,\n * and charts will then see what is allowed and what is not.\n */\nexport type TooltipEventType = 'axis' | 'item';\n\nexport interface SankeyNode {\n  // node attributes\n  dx: number;\n  dy: number;\n  name: string;\n  value: any;\n  x: number;\n  y: number;\n  // tree attributes\n  depth: number;\n  targetNodes: number[];\n  targetLinks: number[];\n  sourceNodes: number[];\n  sourceLinks: number[];\n}\n\nexport interface SankeyLink {\n  target: number;\n  source: number;\n  value: number;\n  sy?: number;\n  dy?: number;\n  ty?: number;\n}\n\nexport type Size = { width: number; height: number };\n\n/**\n * These are the props we are going to pass to an `activeDot` if it is a function or a custom Component\n */\nexport type ActiveDotProps = DotProps & {\n  payload: any;\n  index: number;\n  dataKey: DataKey<any>;\n  cx: number;\n  cy: number;\n  r: number;\n  fill: string;\n  strokeWidth: number;\n  stroke: string;\n  value: any;\n};\n\n/**\n * This is the type of `activeDot` prop on:\n * - Area\n * - Line\n * - Radar\n */\nexport type ActiveDotType =\n  /**\n   * true | false will turn the default activeDot on and off, respectively\n   */\n  | boolean\n  /**\n   * activeDot can be a custom React Component\n   */\n  | ((props: ActiveDotProps) => ReactElement<SVGElement>)\n  /**\n   * activeDot can be an object; props from here will be appended to the default active dot\n   */\n  | Partial<ActiveDotProps>\n  /**\n   * activeDot can be an element; it will get cloned and will receive new extra props.\n   */\n  | ReactElement<SVGElement>;\n\nexport type ActiveShape<PropsType = Record<string, any>, ElementType = SVGElement> =\n  | ReactElement<SVGProps<ElementType>>\n  | ((props: PropsType) => ReactElement<SVGProps<ElementType>>)\n  | ((props: unknown) => JSX.Element)\n  | SVGProps<ElementType>\n  | boolean;\n\n// TODO we need two different range objects, one for polar and another for cartesian layouts\nexport type RangeObj = {\n  x?: number;\n  y?: number;\n  cx?: number;\n  cy?: number;\n  angle?: number;\n  radius?: number;\n};\n\n/**\n * Simplified version of the MouseEvent so that we don't have to mock the whole thing in tests.\n *\n * This is meant to represent the React.MouseEvent\n * which is a wrapper on top of https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent\n */\nexport interface MousePointer {\n  clientX: number;\n  clientY: number;\n  currentTarget: Pick<HTMLElement, 'getBoundingClientRect' | 'offsetWidth' | 'offsetHeight'>;\n}\n\n/**\n * Coordinates relative to the top-left corner of the chart.\n * Also include scale which means that a chart that's scaled will return the same coordinates as a chart that's not scaled.\n */\nexport interface ChartPointer {\n  chartX: number;\n  chartY: number;\n}\n\nexport interface CartesianChartProps extends Partial<ExternalMouseEvents> {\n  accessibilityLayer?: boolean;\n  barCategoryGap?: number | string;\n  barGap?: number | string;\n  barSize?: number | string;\n  children?: any;\n  className?: string;\n  compact?: boolean;\n  data?: any[];\n  dataKey?: DataKey<any>;\n  desc?: string;\n  height?: number;\n  id?: string;\n  layout?: CartesianLayout;\n  margin?: Margin;\n  maxBarSize?: number;\n  reverseStackOrder?: boolean;\n  role?: string;\n  stackOffset?: StackOffsetType;\n  style?: any;\n  syncId?: number | string;\n  syncMethod?: SyncMethod;\n  tabIndex?: number;\n  throttleDelay?: number;\n  title?: string;\n  width?: number;\n}\n\nexport interface PolarChartProps extends Partial<ExternalMouseEvents> {\n  accessibilityLayer?: boolean;\n  barCategoryGap?: number | string;\n  barGap?: number | string;\n  barSize?: number | string;\n  children?: any;\n  className?: string;\n  cx?: number | string;\n  cy?: number | string;\n  data?: any[];\n  dataKey?: DataKey<any>;\n  desc?: string;\n  endAngle?: number;\n  height?: number;\n  id?: string;\n  innerRadius?: number | string;\n  layout?: PolarLayout;\n  margin?: Margin;\n  maxBarSize?: number;\n  outerRadius?: number | string;\n  reverseStackOrder?: boolean;\n  role?: string;\n  stackOffset?: StackOffsetType;\n  startAngle?: number;\n  style?: any;\n  syncId?: number | string;\n  syncMethod?: SyncMethod;\n  tabIndex?: number;\n  throttleDelay?: number;\n  title?: string;\n  width?: number;\n}\n","const SVGElementPropKeys = [\n  'aria-activedescendant',\n  'aria-atomic',\n  'aria-autocomplete',\n  'aria-busy',\n  'aria-checked',\n  'aria-colcount',\n  'aria-colindex',\n  'aria-colspan',\n  'aria-controls',\n  'aria-current',\n  'aria-describedby',\n  'aria-details',\n  'aria-disabled',\n  'aria-errormessage',\n  'aria-expanded',\n  'aria-flowto',\n  'aria-haspopup',\n  'aria-hidden',\n  'aria-invalid',\n  'aria-keyshortcuts',\n  'aria-label',\n  'aria-labelledby',\n  'aria-level',\n  'aria-live',\n  'aria-modal',\n  'aria-multiline',\n  'aria-multiselectable',\n  'aria-orientation',\n  'aria-owns',\n  'aria-placeholder',\n  'aria-posinset',\n  'aria-pressed',\n  'aria-readonly',\n  'aria-relevant',\n  'aria-required',\n  'aria-roledescription',\n  'aria-rowcount',\n  'aria-rowindex',\n  'aria-rowspan',\n  'aria-selected',\n  'aria-setsize',\n  'aria-sort',\n  'aria-valuemax',\n  'aria-valuemin',\n  'aria-valuenow',\n  'aria-valuetext',\n  'className',\n  'color',\n  'height',\n  'id',\n  'lang',\n  'max',\n  'media',\n  'method',\n  'min',\n  'name',\n  'style',\n  /*\n   * removed 'type' SVGElementPropKey because we do not currently use any SVG elements\n   * that can use it, and it conflicts with the recharts prop 'type'\n   * https://github.com/recharts/recharts/pull/3327\n   * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/type\n   */\n  // 'type',\n  'target',\n  'width',\n  'role',\n  'tabIndex',\n  'accentHeight',\n  'accumulate',\n  'additive',\n  'alignmentBaseline',\n  'allowReorder',\n  'alphabetic',\n  'amplitude',\n  'arabicForm',\n  'ascent',\n  'attributeName',\n  'attributeType',\n  'autoReverse',\n  'azimuth',\n  'baseFrequency',\n  'baselineShift',\n  'baseProfile',\n  'bbox',\n  'begin',\n  'bias',\n  'by',\n  'calcMode',\n  'capHeight',\n  'clip',\n  'clipPath',\n  'clipPathUnits',\n  'clipRule',\n  'colorInterpolation',\n  'colorInterpolationFilters',\n  'colorProfile',\n  'colorRendering',\n  'contentScriptType',\n  'contentStyleType',\n  'cursor',\n  'cx',\n  'cy',\n  'd',\n  'decelerate',\n  'descent',\n  'diffuseConstant',\n  'direction',\n  'display',\n  'divisor',\n  'dominantBaseline',\n  'dur',\n  'dx',\n  'dy',\n  'edgeMode',\n  'elevation',\n  'enableBackground',\n  'end',\n  'exponent',\n  'externalResourcesRequired',\n  'fill',\n  'fillOpacity',\n  'fillRule',\n  'filter',\n  'filterRes',\n  'filterUnits',\n  'floodColor',\n  'floodOpacity',\n  'focusable',\n  'fontFamily',\n  'fontSize',\n  'fontSizeAdjust',\n  'fontStretch',\n  'fontStyle',\n  'fontVariant',\n  'fontWeight',\n  'format',\n  'from',\n  'fx',\n  'fy',\n  'g1',\n  'g2',\n  'glyphName',\n  'glyphOrientationHorizontal',\n  'glyphOrientationVertical',\n  'glyphRef',\n  'gradientTransform',\n  'gradientUnits',\n  'hanging',\n  'horizAdvX',\n  'horizOriginX',\n  'href',\n  'ideographic',\n  'imageRendering',\n  'in2',\n  'in',\n  'intercept',\n  'k1',\n  'k2',\n  'k3',\n  'k4',\n  'k',\n  'kernelMatrix',\n  'kernelUnitLength',\n  'kerning',\n  'keyPoints',\n  'keySplines',\n  'keyTimes',\n  'lengthAdjust',\n  'letterSpacing',\n  'lightingColor',\n  'limitingConeAngle',\n  'local',\n  'markerEnd',\n  'markerHeight',\n  'markerMid',\n  'markerStart',\n  'markerUnits',\n  'markerWidth',\n  'mask',\n  'maskContentUnits',\n  'maskUnits',\n  'mathematical',\n  'mode',\n  'numOctaves',\n  'offset',\n  'opacity',\n  'operator',\n  'order',\n  'orient',\n  'orientation',\n  'origin',\n  'overflow',\n  'overlinePosition',\n  'overlineThickness',\n  'paintOrder',\n  'panose1',\n  'pathLength',\n  'patternContentUnits',\n  'patternTransform',\n  'patternUnits',\n  'pointerEvents',\n  'pointsAtX',\n  'pointsAtY',\n  'pointsAtZ',\n  'preserveAlpha',\n  'preserveAspectRatio',\n  'primitiveUnits',\n  'r',\n  'radius',\n  'refX',\n  'refY',\n  'renderingIntent',\n  'repeatCount',\n  'repeatDur',\n  'requiredExtensions',\n  'requiredFeatures',\n  'restart',\n  'result',\n  'rotate',\n  'rx',\n  'ry',\n  'seed',\n  'shapeRendering',\n  'slope',\n  'spacing',\n  'specularConstant',\n  'specularExponent',\n  'speed',\n  'spreadMethod',\n  'startOffset',\n  'stdDeviation',\n  'stemh',\n  'stemv',\n  'stitchTiles',\n  'stopColor',\n  'stopOpacity',\n  'strikethroughPosition',\n  'strikethroughThickness',\n  'string',\n  'stroke',\n  'strokeDasharray',\n  'strokeDashoffset',\n  'strokeLinecap',\n  'strokeLinejoin',\n  'strokeMiterlimit',\n  'strokeOpacity',\n  'strokeWidth',\n  'surfaceScale',\n  'systemLanguage',\n  'tableValues',\n  'targetX',\n  'targetY',\n  'textAnchor',\n  'textDecoration',\n  'textLength',\n  'textRendering',\n  'to',\n  'transform',\n  'u1',\n  'u2',\n  'underlinePosition',\n  'underlineThickness',\n  'unicode',\n  'unicodeBidi',\n  'unicodeRange',\n  'unitsPerEm',\n  'vAlphabetic',\n  'values',\n  'vectorEffect',\n  'version',\n  'vertAdvY',\n  'vertOriginX',\n  'vertOriginY',\n  'vHanging',\n  'vIdeographic',\n  'viewTarget',\n  'visibility',\n  'vMathematical',\n  'widths',\n  'wordSpacing',\n  'writingMode',\n  'x1',\n  'x2',\n  'x',\n  'xChannelSelector',\n  'xHeight',\n  'xlinkActuate',\n  'xlinkArcrole',\n  'xlinkHref',\n  'xlinkRole',\n  'xlinkShow',\n  'xlinkTitle',\n  'xlinkType',\n  'xmlBase',\n  'xmlLang',\n  'xmlns',\n  'xmlnsXlink',\n  'xmlSpace',\n  'y1',\n  'y2',\n  'y',\n  'yChannelSelector',\n  'z',\n  'zoomAndPan',\n  'ref',\n  'key',\n  'angle',\n] as const;\n\nexport type SVGElementPropKeysType = (typeof SVGElementPropKeys)[number];\n\nexport function isSvgElementPropKey(key: PropertyKey): boolean {\n  if (typeof key !== 'string') {\n    return false;\n  }\n  const allowedSvgKeys: ReadonlyArray<string> = SVGElementPropKeys;\n  return allowedSvgKeys.includes(key);\n}\n\n/**\n * Filters an object to only include SVG properties. Removes all event handlers too.\n * @param obj - The object to filter\n * @returns A new object containing only valid SVG properties, excluding event handlers.\n */\nexport function svgPropertiesNoEvents<T extends Record<string, any>>(\n  obj: T,\n): Pick<T, Extract<keyof T, SVGElementPropKeysType>> {\n  const filteredEntries = Object.entries(obj).filter(([key]) => isSvgElementPropKey(key));\n  return Object.fromEntries(filteredEntries) as Pick<T, Extract<keyof T, SVGElementPropKeysType>>;\n}\n","import get from 'es-toolkit/compat/get';\n\nimport * as React from 'react';\nimport { Children, Component, FunctionComponent, isValidElement, ReactNode } from 'react';\nimport { isFragment } from 'react-is';\nimport { isNullish } from './DataUtils';\nimport { ActiveDotType, FilteredElementKeyMap, FilteredSvgElementType } from './types';\nimport { isEventKey } from './excludeEventProps';\nimport { isSvgElementPropKey } from './svgPropertiesNoEvents';\n\nexport const SCALE_TYPES = [\n  'auto',\n  'linear',\n  'pow',\n  'sqrt',\n  'log',\n  'identity',\n  'time',\n  'band',\n  'point',\n  'ordinal',\n  'quantile',\n  'quantize',\n  'utc',\n  'sequential',\n  'threshold',\n];\n\n/**\n * @deprecated instead find another approach that does not depend on displayName.\n * Get the display name of a component\n * @param  {Object} Comp Specified Component\n * @return {String}      Display name of Component\n */\nexport const getDisplayName = (Comp: React.ComponentType | string) => {\n  if (typeof Comp === 'string') {\n    return Comp;\n  }\n  if (!Comp) {\n    return '';\n  }\n  return Comp.displayName || Comp.name || 'Component';\n};\n\n// `toArray` gets called multiple times during the render\n// so we can memoize last invocation (since reference to `children` is the same)\nlet lastChildren: ReactNode | null = null;\nlet lastResult: ReactNode[] | null = null;\n\n/**\n * @deprecated instead find another approach that does not require reading React Elements from DOM.\n *\n * @param children do not use\n * @return deprecated do not use\n */\nexport const toArray = <T extends ReactNode>(children: T | T[]): T[] => {\n  if (children === lastChildren && Array.isArray(lastResult)) {\n    return lastResult as T[];\n  }\n  let result: T[] = [];\n  Children.forEach(children, child => {\n    if (isNullish(child)) return;\n    if (isFragment(child)) {\n      result = result.concat(toArray(child.props.children));\n    } else {\n      // @ts-expect-error this could still be Iterable<ReactNode> and TS does not like that\n      result.push(child);\n    }\n  });\n  lastResult = result;\n  lastChildren = children;\n  return result;\n};\n\n/**\n * @deprecated instead find another approach that does not require reading React Elements from DOM.\n *\n * Find and return all matched children by type.\n * `type` must be a React.ComponentType\n *\n * @param children do not use\n * @param type do not use\n * @return deprecated do not use\n */\nexport function findAllByType<\n  ComponentType extends React.ComponentType,\n  DetailedElement = React.DetailedReactHTMLElement<React.ComponentProps<ComponentType>, HTMLElement>,\n>(children: ReactNode, type: ComponentType | ComponentType[]): DetailedElement[] {\n  const result: DetailedElement[] = [];\n  let types: string[] = [];\n\n  if (Array.isArray(type)) {\n    types = type.map(t => getDisplayName(t));\n  } else {\n    types = [getDisplayName(type)];\n  }\n\n  toArray(children).forEach(child => {\n    const childType = get(child, 'type.displayName') || get(child, 'type.name');\n    // ts-expect-error toArray and lodash.get are not compatible. Let's get rid of the whole findAllByType function\n    if (types.indexOf(childType) !== -1) {\n      result.push(child as DetailedElement);\n    }\n  });\n\n  return result;\n}\n\nexport const isClipDot = (dot: ActiveDotType): boolean => {\n  if (dot && typeof dot === 'object' && 'clipDot' in dot) {\n    return Boolean(dot.clipDot);\n  }\n  return true;\n};\n\n/**\n * Checks if the property is valid to spread onto an SVG element or onto a specific component\n * @param {unknown} property property value currently being compared\n * @param {string} key property key currently being compared\n * @param {boolean} includeEvents if events are included in spreadable props\n * @param {boolean} svgElementType checks against map of SVG element types to attributes\n * @returns {boolean} is prop valid\n */\nexport const isValidSpreadableProp = (\n  property: unknown,\n  key: PropertyKey,\n  includeEvents?: boolean,\n  svgElementType?: FilteredSvgElementType,\n): boolean => {\n  if (typeof key === 'symbol' || typeof key === 'number') {\n    // Allow symbols and numbers as valid keys\n    return true;\n  }\n  /**\n   * If the svg element type is explicitly included, check against the filtered element key map\n   * to determine if there are attributes that should only exist on that element type.\n   * @todo Add an internal cjs version of https://github.com/wooorm/svg-element-attributes for full coverage.\n   */\n  const matchingElementTypeKeys = (svgElementType && FilteredElementKeyMap?.[svgElementType]) ?? [];\n\n  const isDataAttribute = key.startsWith('data-');\n  const isSpecificSvgAttribute: boolean =\n    typeof property !== 'function' &&\n    ((Boolean(svgElementType) && matchingElementTypeKeys.includes(key)) || isSvgElementPropKey(key));\n  const isEventAttribute: boolean = Boolean(includeEvents) && isEventKey(key);\n  return isDataAttribute || isSpecificSvgAttribute || isEventAttribute;\n};\n\n/**\n * Filters the props object to only include valid SVG attributes or event handlers.\n * @deprecated do not use this function, as it is not type-safe and may lead to unexpected behavior. Returns `any`.\n * Instead, use:\n * - `excludeEventProps` to exclude event handlers\n * - `svgOnlyNoEvents` to exclude non-SVG attributes, and exclude event handlers too\n * @param props - The props object to filter, which can be a Record, Component, FunctionComponent, boolean, or unknown.\n * @param includeEvents - A boolean indicating whether to include event handlers in the filtered props.\n * @param svgElementType - An optional parameter specifying the type of SVG element to filter attributes for.\n * @returns A new object containing only valid SVG attributes or event handlers, or null if the input is not valid.\n */\nexport const filterProps = (\n  props: Record<string, any> | Component | FunctionComponent | boolean | unknown,\n  includeEvents: boolean,\n  svgElementType?: FilteredSvgElementType,\n) => {\n  if (!props || typeof props === 'function' || typeof props === 'boolean') {\n    return null;\n  }\n\n  let inputProps = props as Record<string, any>;\n\n  if (isValidElement(props)) {\n    inputProps = props.props as Record<string, any>;\n  }\n\n  if (typeof inputProps !== 'object' && typeof inputProps !== 'function') {\n    return null;\n  }\n\n  const out: Record<string, any> = {};\n\n  /**\n   * Props are blindly spread onto SVG elements. This loop filters out properties that we don't want to spread.\n   * Items filtered out are as follows:\n   *   - functions in properties that are SVG attributes (functions are included when includeEvents is true)\n   *   - props that are SVG attributes but don't matched the passed svgElementType\n   *   - any prop that is not in SVGElementPropKeys (or in EventKeys if includeEvents is true)\n   */\n  Object.keys(inputProps).forEach(key => {\n    if (isValidSpreadableProp(inputProps?.[key], key, includeEvents, svgElementType)) {\n      out[key] = inputProps[key];\n    }\n  });\n\n  return out;\n};\n","/**\n * @fileOverview Surface\n */\nimport * as React from 'react';\nimport { ReactNode, CSSProperties, SVGProps, forwardRef } from 'react';\nimport { clsx } from 'clsx';\nimport { filterProps } from '../util/ReactUtils';\n\ninterface SurfaceProps {\n  width: number;\n  height: number;\n  viewBox?: {\n    x?: number;\n    y?: number;\n    width?: number;\n    height?: number;\n  };\n  className?: string;\n  style?: CSSProperties;\n  children?: ReactNode;\n  title?: string;\n  desc?: string;\n}\n\nexport type Props = Omit<SVGProps<SVGSVGElement>, 'viewBox'> & SurfaceProps;\n\nexport const Surface = forwardRef<SVGSVGElement, Props>((props: Props, ref) => {\n  const { children, width, height, viewBox, className, style, title, desc, ...others } = props;\n  const svgView = viewBox || { width, height, x: 0, y: 0 };\n  const layerClass = clsx('recharts-surface', className);\n\n  return (\n    <svg\n      {...filterProps(others, true, 'svg')}\n      className={layerClass}\n      width={width}\n      height={height}\n      style={style}\n      viewBox={`${svgView.x} ${svgView.y} ${svgView.width} ${svgView.height}`}\n      ref={ref}\n    >\n      <title>{title}</title>\n      <desc>{desc}</desc>\n      {children}\n    </svg>\n  );\n});\n","import * as React from 'react';\nimport { ReactNode, SVGAttributes } from 'react';\nimport { clsx } from 'clsx';\nimport { filterProps } from '../util/ReactUtils';\n\ninterface LayerProps {\n  className?: string;\n  children?: ReactNode;\n}\n\nexport type Props = SVGAttributes<SVGGElement> & LayerProps;\n\nexport const Layer = React.forwardRef<SVGGElement, Props>((props: Props, ref) => {\n  const { children, className, ...others } = props;\n  const layerClass = clsx('recharts-layer', className);\n\n  return (\n    <g className={layerClass} {...filterProps(others, true)} ref={ref}>\n      {children}\n    </g>\n  );\n});\n","import { createContext, useContext } from 'react';\n\nexport const LegendPortalContext = createContext<HTMLElement | null>(null);\n\nexport const useLegendPortal = (): HTMLElement | null => useContext(LegendPortalContext);\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nexport default {\n  draw(context, size) {\n    const y = sqrt(size / tan30_2);\n    const x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const w = sqrt(size);\n    const x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n","import {sin, cos, sqrt, pi, tau} from \"../math.js\";\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size * ka);\n    const x = kx * r;\n    const y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (let i = 1; i < 5; ++i) {\n      const a = tau * i / 5;\n      const c = cos(a);\n      const s = sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const y = -sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / a);\n    const x0 = r / 2, y0 = r * k;\n    const x1 = x0, y1 = r * k + r;\n    const x2 = -x1, y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n    context.closePath();\n  }\n};\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n","import {min, sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\n    const t = r / 2;\n    const u = t * sqrt3;\n    context.moveTo(0, r);\n    context.lineTo(0, -r);\n    context.moveTo(-u, -t);\n    context.lineTo(u, t);\n    context.moveTo(-u, t);\n    context.lineTo(u, -t);\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const s = sqrt(size) * 0.6824;\n    const t = s  / 2;\n    const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n    context.moveTo(0, -s);\n    context.lineTo(u, t);\n    context.lineTo(-u, t);\n    context.closePath();\n  }\n};\n","/**\n * @fileOverview Curve\n */\nimport * as React from 'react';\nimport { SVGProps } from 'react';\n\nimport {\n  symbol as shapeSymbol,\n  symbolCircle,\n  symbolCross,\n  symbolDiamond,\n  symbolSquare,\n  symbolStar,\n  symbolTriangle,\n  symbolWye,\n  SymbolType as D3SymbolType,\n} from 'victory-vendor/d3-shape';\nimport { clsx } from 'clsx';\nimport { SymbolType } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { upperFirst } from '../util/DataUtils';\n\ntype SizeType = 'area' | 'diameter';\n\ninterface SymbolFactory {\n  [type: string]: D3SymbolType;\n}\n\nconst symbolFactories: SymbolFactory = {\n  symbolCircle,\n  symbolCross,\n  symbolDiamond,\n  symbolSquare,\n  symbolStar,\n  symbolTriangle,\n  symbolWye,\n};\nconst RADIAN = Math.PI / 180;\n\nconst getSymbolFactory = (type: SymbolType) => {\n  const name = `symbol${upperFirst(type)}`;\n\n  return symbolFactories[name] || symbolCircle;\n};\n\nconst calculateAreaSize = (size: number, sizeType: SizeType, type: SymbolType) => {\n  if (sizeType === 'area') {\n    return size;\n  }\n\n  switch (type) {\n    case 'cross':\n      return (5 * size * size) / 9;\n    case 'diamond':\n      return (0.5 * size * size) / Math.sqrt(3);\n    case 'square':\n      return size * size;\n    case 'star': {\n      const angle = 18 * RADIAN;\n\n      return 1.25 * size * size * (Math.tan(angle) - Math.tan(angle * 2) * Math.tan(angle) ** 2);\n    }\n    case 'triangle':\n      return (Math.sqrt(3) * size * size) / 4;\n    case 'wye':\n      return ((21 - 10 * Math.sqrt(3)) * size * size) / 8;\n    default:\n      return (Math.PI * size * size) / 4;\n  }\n};\n\nexport interface InnerSymbolsProp {\n  className?: string;\n  type: SymbolType;\n  cx?: number;\n  cy?: number;\n  size?: number;\n  sizeType?: SizeType;\n}\n\nexport type SymbolsProps = SVGProps<SVGPathElement> & InnerSymbolsProp;\n\nconst registerSymbol = (key: string, factory: D3SymbolType) => {\n  symbolFactories[`symbol${upperFirst(key)}`] = factory;\n};\n\nexport const Symbols = ({ type = 'circle', size = 64, sizeType = 'area', ...rest }: SymbolsProps) => {\n  const props = { ...rest, type, size, sizeType };\n\n  /**\n   * Calculate the path of curve\n   * @return {String} path\n   */\n  const getPath = () => {\n    const symbolFactory = getSymbolFactory(type);\n    const symbol = shapeSymbol()\n      .type(symbolFactory)\n      .size(calculateAreaSize(size, sizeType, type));\n\n    return symbol();\n  };\n\n  const { className, cx, cy } = props;\n  const filteredProps = filterProps(props, true);\n\n  if (cx === +cx && cy === +cy && size === +size) {\n    return (\n      <path\n        {...filteredProps}\n        className={clsx('recharts-symbols', className)}\n        transform={`translate(${cx}, ${cy})`}\n        d={getPath()}\n      />\n    );\n  }\n\n  return null;\n};\n\nSymbols.registerSymbol = registerSymbol;\n","import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n  circle,\n  plus,\n  times,\n  triangle2,\n  asterisk,\n  square2,\n  diamond2\n];\n\nexport default function Symbol(type, size) {\n  let context = null,\n      path = withPath(symbol);\n\n  type = typeof type === \"function\" ? type : constant(type || circle);\n  size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n  function symbol() {\n    let buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n","/**\n * @fileOverview Default Legend Content\n */\nimport * as React from 'react';\nimport { PureComponent, ReactNode, MouseEvent, ReactElement } from 'react';\n\nimport { clsx } from 'clsx';\nimport { Surface } from '../container/Surface';\nimport { Symbols } from '../shape/Symbols';\nimport {\n  DataKey,\n  LegendType,\n  LayoutType,\n  adaptEventsOfChild,\n  PresentationAttributesAdaptChildEvent,\n} from '../util/types';\n\nconst SIZE = 32;\nexport type ContentType = ReactElement | ((props: Props) => ReactNode);\nexport type IconType = Exclude<LegendType, 'none'>;\nexport type HorizontalAlignmentType = 'center' | 'left' | 'right';\nexport type VerticalAlignmentType = 'top' | 'bottom' | 'middle';\nexport type Formatter = (value: any, entry: LegendPayload, index: number) => ReactNode;\n\nexport interface LegendPayload {\n  /**\n   * This is the text that will be displayed in the legend in the DOM.\n   * If undefined, the text will not be displayed, so the icon will be rendered without text.\n   */\n  value: string | undefined;\n  type?: LegendType;\n  color?: string;\n  payload?: {\n    strokeDasharray?: number | string;\n    value?: any;\n  };\n  formatter?: Formatter;\n  inactive?: boolean;\n  legendIcon?: ReactElement<SVGElement>;\n  dataKey?: DataKey<any>;\n}\n\ninterface InternalProps {\n  content?: ContentType;\n  iconSize?: number;\n  iconType?: IconType;\n  layout?: LayoutType;\n  align?: HorizontalAlignmentType;\n  verticalAlign?: VerticalAlignmentType;\n  inactiveColor?: string;\n  formatter?: Formatter;\n  onMouseEnter?: (data: LegendPayload, index: number, event: MouseEvent) => void;\n  onMouseLeave?: (data: LegendPayload, index: number, event: MouseEvent) => void;\n  onClick?: (data: LegendPayload, index: number, event: MouseEvent) => void;\n  /**\n   * DefaultLegendContent.payload is omitted from Legend props.\n   * A custom payload can be passed here if desired or it can be passed from the Legend \"content\" callback.\n   */\n  payload?: ReadonlyArray<LegendPayload>;\n}\n\nexport type Props = InternalProps & Omit<PresentationAttributesAdaptChildEvent<any, ReactElement>, keyof InternalProps>;\n\nexport class DefaultLegendContent extends PureComponent<Props> {\n  static displayName = 'Legend';\n\n  static defaultProps: Partial<Props> = {\n    align: 'center',\n    iconSize: 14,\n    inactiveColor: '#ccc',\n    layout: 'horizontal',\n    verticalAlign: 'middle',\n  };\n\n  /**\n   * Render the path of icon\n   * @param data Data of each legend item\n   * @param iconType if defined, it will always render this icon. If undefined then it uses icon from data.type\n   * @return Path element\n   */\n  renderIcon(data: LegendPayload, iconType: IconType | undefined) {\n    const { inactiveColor } = this.props;\n    const halfSize = SIZE / 2;\n    const sixthSize = SIZE / 6;\n    const thirdSize = SIZE / 3;\n    const color = data.inactive ? inactiveColor : data.color;\n    const preferredIcon = iconType ?? data.type;\n\n    if (preferredIcon === 'none') {\n      return null;\n    }\n    if (preferredIcon === 'plainline') {\n      return (\n        <line\n          strokeWidth={4}\n          fill=\"none\"\n          stroke={color}\n          strokeDasharray={data.payload.strokeDasharray}\n          x1={0}\n          y1={halfSize}\n          x2={SIZE}\n          y2={halfSize}\n          className=\"recharts-legend-icon\"\n        />\n      );\n    }\n    if (preferredIcon === 'line') {\n      return (\n        <path\n          strokeWidth={4}\n          fill=\"none\"\n          stroke={color}\n          d={`M0,${halfSize}h${thirdSize}\n            A${sixthSize},${sixthSize},0,1,1,${2 * thirdSize},${halfSize}\n            H${SIZE}M${2 * thirdSize},${halfSize}\n            A${sixthSize},${sixthSize},0,1,1,${thirdSize},${halfSize}`}\n          className=\"recharts-legend-icon\"\n        />\n      );\n    }\n    if (preferredIcon === 'rect') {\n      return (\n        <path\n          stroke=\"none\"\n          fill={color}\n          d={`M0,${SIZE / 8}h${SIZE}v${(SIZE * 3) / 4}h${-SIZE}z`}\n          className=\"recharts-legend-icon\"\n        />\n      );\n    }\n    if (React.isValidElement(data.legendIcon)) {\n      const iconProps: any = { ...data };\n      delete iconProps.legendIcon;\n      return React.cloneElement(data.legendIcon, iconProps);\n    }\n\n    return <Symbols fill={color} cx={halfSize} cy={halfSize} size={SIZE} sizeType=\"diameter\" type={preferredIcon} />;\n  }\n\n  /**\n   * Draw items of legend\n   * @return Items\n   */\n  renderItems() {\n    const { payload, iconSize, layout, formatter, inactiveColor, iconType } = this.props;\n    const viewBox = { x: 0, y: 0, width: SIZE, height: SIZE };\n    const itemStyle = {\n      display: layout === 'horizontal' ? 'inline-block' : 'block',\n      marginRight: 10,\n    };\n    const svgStyle = { display: 'inline-block', verticalAlign: 'middle', marginRight: 4 };\n    return payload.map((entry: LegendPayload, i: number) => {\n      const finalFormatter = entry.formatter || formatter;\n      const className = clsx({\n        'recharts-legend-item': true,\n        [`legend-item-${i}`]: true,\n        inactive: entry.inactive,\n      });\n\n      if (entry.type === 'none') {\n        return null;\n      }\n\n      const color = entry.inactive ? inactiveColor : entry.color;\n      const finalValue = finalFormatter ? finalFormatter(entry.value, entry, i) : entry.value;\n\n      return (\n        <li\n          className={className}\n          style={itemStyle}\n          // eslint-disable-next-line react/no-array-index-key\n          key={`legend-item-${i}`}\n          {...adaptEventsOfChild(this.props, entry, i)}\n        >\n          <Surface\n            width={iconSize}\n            height={iconSize}\n            viewBox={viewBox}\n            style={svgStyle}\n            aria-label={`${finalValue} legend icon`}\n          >\n            {this.renderIcon(entry, iconType)}\n          </Surface>\n          <span className=\"recharts-legend-item-text\" style={{ color }}>\n            {finalValue}\n          </span>\n        </li>\n      );\n    });\n  }\n\n  render() {\n    const { payload, layout, align } = this.props;\n\n    if (!payload || !payload.length) {\n      return null;\n    }\n\n    const finalStyle = {\n      padding: 0,\n      margin: 0,\n      textAlign: layout === 'horizontal' ? align : 'left',\n    };\n\n    return (\n      <ul className=\"recharts-default-legend\" style={finalStyle}>\n        {this.renderItems()}\n      </ul>\n    );\n  }\n}\n","import uniqBy from 'es-toolkit/compat/uniqBy';\n\ntype UniqueFunc<T> = (entry: T) => unknown;\n\n/**\n * This is configuration option that decides how to filter for unique values only:\n *\n * - `false` means \"no filter\"\n * - `true` means \"use recharts default filter\"\n * - function means \"use return of this function as the default key\"\n */\nexport type UniqueOption<T> = boolean | UniqueFunc<T>;\n\nexport function getUniqPayload<T>(\n  payload: ReadonlyArray<T>,\n  option: UniqueOption<T>,\n  defaultUniqBy: UniqueFunc<T>,\n): ReadonlyArray<T> {\n  if (option === true) {\n    return uniqBy(payload, defaultUniqBy);\n  }\n\n  if (typeof option === 'function') {\n    return uniqBy(payload, option);\n  }\n\n  return payload;\n}\n","import { createContext } from 'react';\nimport type { Action, Store } from '@reduxjs/toolkit';\nimport type { Subscription } from 'react-redux';\nimport type { CheckFrequency } from 'react-redux/es/hooks/useSelector';\nimport type { RechartsRootState } from './store';\n\n/*\n * This is a copy of the React-Redux context type, but with our own store type.\n * We could import directly from react-redux like this:\n * import { ReactReduxContextValue } from 'react-redux/src/components/Context';\n * but that makes typescript angry with some errors I am not sure how to resolve\n * so copy it is.\n */\nexport type RechartsReduxContextValue = {\n  store: Store<RechartsRootState, Action>;\n  subscription: Subscription;\n  stabilityCheck: CheckFrequency;\n  noopCheck: CheckFrequency;\n};\n\n/**\n * We need to use our own independent Redux context because we need to avoid interfering with other people's Redux stores\n * in case they decide to install and use Recharts in another Redux app which is likely to happen.\n *\n * https://react-redux.js.org/using-react-redux/accessing-store#providing-custom-context\n */\nexport const RechartsReduxContext = createContext<RechartsReduxContextValue | null>(null);\n","import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { useContext } from 'react';\nimport { type AppDispatch, type RechartsRootState } from './store';\n\nimport { RechartsReduxContext } from './RechartsReduxContext';\n\nconst noopDispatch: AppDispatch = a => a;\n\nexport const useAppDispatch = (): AppDispatch => {\n  const context = useContext(RechartsReduxContext);\n  if (context) {\n    return context.store.dispatch;\n  }\n  return noopDispatch;\n};\n\nconst noop = (): undefined => {};\n\nconst addNestedSubNoop = () => noop;\n\ntype EqualityFn<T> = (a: T, b: T) => boolean;\nconst refEquality: EqualityFn<unknown> = (a, b) => a === b;\n\n/**\n * This is a recharts variant of `useSelector` from 'react-redux' package.\n *\n * The difference is that react-redux version will throw an Error when used outside of Redux context.\n *\n * This, recharts version, will return undefined instead.\n *\n * This is because we want to allow using our components outside the Chart wrapper,\n * and have people provide all props explicitly.\n *\n * If however they use the component inside a chart wrapper then those props become optional,\n * and we read them from Redux state instead.\n *\n * @param selector for pulling things out of Redux store; will not be called if the store is not accessible\n * @return whatever the selector returned; or undefined when outside of Redux store\n */\nexport function useAppSelector<T>(selector: (state: RechartsRootState) => T): T | undefined {\n  const context = useContext(RechartsReduxContext);\n\n  return useSyncExternalStoreWithSelector<RechartsRootState | undefined, T | undefined>(\n    context ? context.subscription.addNestedSub : addNestedSubNoop,\n    context ? context.store.getState : noop,\n    context ? context.store.getState : noop,\n    context ? selector : noop,\n    refEquality,\n  );\n}\n","// src/devModeChecks/identityFunctionCheck.ts\nvar runIdentityFunctionCheck = (resultFunc, inputSelectorsResults, outputSelectorResult) => {\n  if (inputSelectorsResults.length === 1 && inputSelectorsResults[0] === outputSelectorResult) {\n    let isInputSameAsOutput = false;\n    try {\n      const emptyObject = {};\n      if (resultFunc(emptyObject) === emptyObject)\n        isInputSameAsOutput = true;\n    } catch {\n    }\n    if (isInputSameAsOutput) {\n      let stack = void 0;\n      try {\n        throw new Error();\n      } catch (e) {\n        ;\n        ({ stack } = e);\n      }\n      console.warn(\n        \"The result function returned its own inputs without modification. e.g\\n`createSelector([state => state.todos], todos => todos)`\\nThis could lead to inefficient memoization and unnecessary re-renders.\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.\",\n        { stack }\n      );\n    }\n  }\n};\n\n// src/devModeChecks/inputStabilityCheck.ts\nvar runInputStabilityCheck = (inputSelectorResultsObject, options, inputSelectorArgs) => {\n  const { memoize, memoizeOptions } = options;\n  const { inputSelectorResults, inputSelectorResultsCopy } = inputSelectorResultsObject;\n  const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions);\n  const areInputSelectorResultsEqual = createAnEmptyObject.apply(null, inputSelectorResults) === createAnEmptyObject.apply(null, inputSelectorResultsCopy);\n  if (!areInputSelectorResultsEqual) {\n    let stack = void 0;\n    try {\n      throw new Error();\n    } catch (e) {\n      ;\n      ({ stack } = e);\n    }\n    console.warn(\n      \"An input selector returned a different result when passed same arguments.\\nThis means your output selector will likely run more frequently than intended.\\nAvoid returning a new reference inside your input selector, e.g.\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`\",\n      {\n        arguments: inputSelectorArgs,\n        firstInputs: inputSelectorResults,\n        secondInputs: inputSelectorResultsCopy,\n        stack\n      }\n    );\n  }\n};\n\n// src/devModeChecks/setGlobalDevModeChecks.ts\nvar globalDevModeChecks = {\n  inputStabilityCheck: \"once\",\n  identityFunctionCheck: \"once\"\n};\nvar setGlobalDevModeChecks = (devModeChecks) => {\n  Object.assign(globalDevModeChecks, devModeChecks);\n};\n\n// src/utils.ts\nvar NOT_FOUND = /* @__PURE__ */ Symbol(\"NOT_FOUND\");\nfunction assertIsFunction(func, errorMessage = `expected a function, instead received ${typeof func}`) {\n  if (typeof func !== \"function\") {\n    throw new TypeError(errorMessage);\n  }\n}\nfunction assertIsObject(object, errorMessage = `expected an object, instead received ${typeof object}`) {\n  if (typeof object !== \"object\") {\n    throw new TypeError(errorMessage);\n  }\n}\nfunction assertIsArrayOfFunctions(array, errorMessage = `expected all items to be functions, instead received the following types: `) {\n  if (!array.every((item) => typeof item === \"function\")) {\n    const itemTypes = array.map(\n      (item) => typeof item === \"function\" ? `function ${item.name || \"unnamed\"}()` : typeof item\n    ).join(\", \");\n    throw new TypeError(`${errorMessage}[${itemTypes}]`);\n  }\n}\nvar ensureIsArray = (item) => {\n  return Array.isArray(item) ? item : [item];\n};\nfunction getDependencies(createSelectorArgs) {\n  const dependencies = Array.isArray(createSelectorArgs[0]) ? createSelectorArgs[0] : createSelectorArgs;\n  assertIsArrayOfFunctions(\n    dependencies,\n    `createSelector expects all input-selectors to be functions, but received the following types: `\n  );\n  return dependencies;\n}\nfunction collectInputSelectorResults(dependencies, inputSelectorArgs) {\n  const inputSelectorResults = [];\n  const { length } = dependencies;\n  for (let i = 0; i < length; i++) {\n    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs));\n  }\n  return inputSelectorResults;\n}\nvar getDevModeChecksExecutionInfo = (firstRun, devModeChecks) => {\n  const { identityFunctionCheck, inputStabilityCheck } = {\n    ...globalDevModeChecks,\n    ...devModeChecks\n  };\n  return {\n    identityFunctionCheck: {\n      shouldRun: identityFunctionCheck === \"always\" || identityFunctionCheck === \"once\" && firstRun,\n      run: runIdentityFunctionCheck\n    },\n    inputStabilityCheck: {\n      shouldRun: inputStabilityCheck === \"always\" || inputStabilityCheck === \"once\" && firstRun,\n      run: runInputStabilityCheck\n    }\n  };\n};\n\n// src/autotrackMemoize/autotracking.ts\nvar $REVISION = 0;\nvar CURRENT_TRACKER = null;\nvar Cell = class {\n  revision = $REVISION;\n  _value;\n  _lastValue;\n  _isEqual = tripleEq;\n  constructor(initialValue, isEqual = tripleEq) {\n    this._value = this._lastValue = initialValue;\n    this._isEqual = isEqual;\n  }\n  // Whenever a storage value is read, it'll add itself to the current tracker if\n  // one exists, entangling its state with that cache.\n  get value() {\n    CURRENT_TRACKER?.add(this);\n    return this._value;\n  }\n  // Whenever a storage value is updated, we bump the global revision clock,\n  // assign the revision for this storage to the new value, _and_ we schedule a\n  // rerender. This is important, and it's what makes autotracking  _pull_\n  // based. We don't actively tell the caches which depend on the storage that\n  // anything has happened. Instead, we recompute the caches when needed.\n  set value(newValue) {\n    if (this.value === newValue)\n      return;\n    this._value = newValue;\n    this.revision = ++$REVISION;\n  }\n};\nfunction tripleEq(a, b) {\n  return a === b;\n}\nvar TrackingCache = class {\n  _cachedValue;\n  _cachedRevision = -1;\n  _deps = [];\n  hits = 0;\n  fn;\n  constructor(fn) {\n    this.fn = fn;\n  }\n  clear() {\n    this._cachedValue = void 0;\n    this._cachedRevision = -1;\n    this._deps = [];\n    this.hits = 0;\n  }\n  get value() {\n    if (this.revision > this._cachedRevision) {\n      const { fn } = this;\n      const currentTracker = /* @__PURE__ */ new Set();\n      const prevTracker = CURRENT_TRACKER;\n      CURRENT_TRACKER = currentTracker;\n      this._cachedValue = fn();\n      CURRENT_TRACKER = prevTracker;\n      this.hits++;\n      this._deps = Array.from(currentTracker);\n      this._cachedRevision = this.revision;\n    }\n    CURRENT_TRACKER?.add(this);\n    return this._cachedValue;\n  }\n  get revision() {\n    return Math.max(...this._deps.map((d) => d.revision), 0);\n  }\n};\nfunction getValue(cell) {\n  if (!(cell instanceof Cell)) {\n    console.warn(\"Not a valid cell! \", cell);\n  }\n  return cell.value;\n}\nfunction setValue(storage, value) {\n  if (!(storage instanceof Cell)) {\n    throw new TypeError(\n      \"setValue must be passed a tracked store created with `createStorage`.\"\n    );\n  }\n  storage.value = storage._lastValue = value;\n}\nfunction createCell(initialValue, isEqual = tripleEq) {\n  return new Cell(initialValue, isEqual);\n}\nfunction createCache(fn) {\n  assertIsFunction(\n    fn,\n    \"the first parameter to `createCache` must be a function\"\n  );\n  return new TrackingCache(fn);\n}\n\n// src/autotrackMemoize/tracking.ts\nvar neverEq = (a, b) => false;\nfunction createTag() {\n  return createCell(null, neverEq);\n}\nfunction dirtyTag(tag, value) {\n  setValue(tag, value);\n}\nvar consumeCollection = (node) => {\n  let tag = node.collectionTag;\n  if (tag === null) {\n    tag = node.collectionTag = createTag();\n  }\n  getValue(tag);\n};\nvar dirtyCollection = (node) => {\n  const tag = node.collectionTag;\n  if (tag !== null) {\n    dirtyTag(tag, null);\n  }\n};\n\n// src/autotrackMemoize/proxy.ts\nvar REDUX_PROXY_LABEL = Symbol();\nvar nextId = 0;\nvar proto = Object.getPrototypeOf({});\nvar ObjectTreeNode = class {\n  constructor(value) {\n    this.value = value;\n    this.value = value;\n    this.tag.value = value;\n  }\n  proxy = new Proxy(this, objectProxyHandler);\n  tag = createTag();\n  tags = {};\n  children = {};\n  collectionTag = null;\n  id = nextId++;\n};\nvar objectProxyHandler = {\n  get(node, key) {\n    function calculateResult() {\n      const { value } = node;\n      const childValue = Reflect.get(value, key);\n      if (typeof key === \"symbol\") {\n        return childValue;\n      }\n      if (key in proto) {\n        return childValue;\n      }\n      if (typeof childValue === \"object\" && childValue !== null) {\n        let childNode = node.children[key];\n        if (childNode === void 0) {\n          childNode = node.children[key] = createNode(childValue);\n        }\n        if (childNode.tag) {\n          getValue(childNode.tag);\n        }\n        return childNode.proxy;\n      } else {\n        let tag = node.tags[key];\n        if (tag === void 0) {\n          tag = node.tags[key] = createTag();\n          tag.value = childValue;\n        }\n        getValue(tag);\n        return childValue;\n      }\n    }\n    const res = calculateResult();\n    return res;\n  },\n  ownKeys(node) {\n    consumeCollection(node);\n    return Reflect.ownKeys(node.value);\n  },\n  getOwnPropertyDescriptor(node, prop) {\n    return Reflect.getOwnPropertyDescriptor(node.value, prop);\n  },\n  has(node, prop) {\n    return Reflect.has(node.value, prop);\n  }\n};\nvar ArrayTreeNode = class {\n  constructor(value) {\n    this.value = value;\n    this.value = value;\n    this.tag.value = value;\n  }\n  proxy = new Proxy([this], arrayProxyHandler);\n  tag = createTag();\n  tags = {};\n  children = {};\n  collectionTag = null;\n  id = nextId++;\n};\nvar arrayProxyHandler = {\n  get([node], key) {\n    if (key === \"length\") {\n      consumeCollection(node);\n    }\n    return objectProxyHandler.get(node, key);\n  },\n  ownKeys([node]) {\n    return objectProxyHandler.ownKeys(node);\n  },\n  getOwnPropertyDescriptor([node], prop) {\n    return objectProxyHandler.getOwnPropertyDescriptor(node, prop);\n  },\n  has([node], prop) {\n    return objectProxyHandler.has(node, prop);\n  }\n};\nfunction createNode(value) {\n  if (Array.isArray(value)) {\n    return new ArrayTreeNode(value);\n  }\n  return new ObjectTreeNode(value);\n}\nfunction updateNode(node, newValue) {\n  const { value, tags, children } = node;\n  node.value = newValue;\n  if (Array.isArray(value) && Array.isArray(newValue) && value.length !== newValue.length) {\n    dirtyCollection(node);\n  } else {\n    if (value !== newValue) {\n      let oldKeysSize = 0;\n      let newKeysSize = 0;\n      let anyKeysAdded = false;\n      for (const _key in value) {\n        oldKeysSize++;\n      }\n      for (const key in newValue) {\n        newKeysSize++;\n        if (!(key in value)) {\n          anyKeysAdded = true;\n          break;\n        }\n      }\n      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize;\n      if (isDifferent) {\n        dirtyCollection(node);\n      }\n    }\n  }\n  for (const key in tags) {\n    const childValue = value[key];\n    const newChildValue = newValue[key];\n    if (childValue !== newChildValue) {\n      dirtyCollection(node);\n      dirtyTag(tags[key], newChildValue);\n    }\n    if (typeof newChildValue === \"object\" && newChildValue !== null) {\n      delete tags[key];\n    }\n  }\n  for (const key in children) {\n    const childNode = children[key];\n    const newChildValue = newValue[key];\n    const childValue = childNode.value;\n    if (childValue === newChildValue) {\n      continue;\n    } else if (typeof newChildValue === \"object\" && newChildValue !== null) {\n      updateNode(childNode, newChildValue);\n    } else {\n      deleteNode(childNode);\n      delete children[key];\n    }\n  }\n}\nfunction deleteNode(node) {\n  if (node.tag) {\n    dirtyTag(node.tag, null);\n  }\n  dirtyCollection(node);\n  for (const key in node.tags) {\n    dirtyTag(node.tags[key], null);\n  }\n  for (const key in node.children) {\n    deleteNode(node.children[key]);\n  }\n}\n\n// src/lruMemoize.ts\nfunction createSingletonCache(equals) {\n  let entry;\n  return {\n    get(key) {\n      if (entry && equals(entry.key, key)) {\n        return entry.value;\n      }\n      return NOT_FOUND;\n    },\n    put(key, value) {\n      entry = { key, value };\n    },\n    getEntries() {\n      return entry ? [entry] : [];\n    },\n    clear() {\n      entry = void 0;\n    }\n  };\n}\nfunction createLruCache(maxSize, equals) {\n  let entries = [];\n  function get(key) {\n    const cacheIndex = entries.findIndex((entry) => equals(key, entry.key));\n    if (cacheIndex > -1) {\n      const entry = entries[cacheIndex];\n      if (cacheIndex > 0) {\n        entries.splice(cacheIndex, 1);\n        entries.unshift(entry);\n      }\n      return entry.value;\n    }\n    return NOT_FOUND;\n  }\n  function put(key, value) {\n    if (get(key) === NOT_FOUND) {\n      entries.unshift({ key, value });\n      if (entries.length > maxSize) {\n        entries.pop();\n      }\n    }\n  }\n  function getEntries() {\n    return entries;\n  }\n  function clear() {\n    entries = [];\n  }\n  return { get, put, getEntries, clear };\n}\nvar referenceEqualityCheck = (a, b) => a === b;\nfunction createCacheKeyComparator(equalityCheck) {\n  return function areArgumentsShallowlyEqual(prev, next) {\n    if (prev === null || next === null || prev.length !== next.length) {\n      return false;\n    }\n    const { length } = prev;\n    for (let i = 0; i < length; i++) {\n      if (!equalityCheck(prev[i], next[i])) {\n        return false;\n      }\n    }\n    return true;\n  };\n}\nfunction lruMemoize(func, equalityCheckOrOptions) {\n  const providedOptions = typeof equalityCheckOrOptions === \"object\" ? equalityCheckOrOptions : { equalityCheck: equalityCheckOrOptions };\n  const {\n    equalityCheck = referenceEqualityCheck,\n    maxSize = 1,\n    resultEqualityCheck\n  } = providedOptions;\n  const comparator = createCacheKeyComparator(equalityCheck);\n  let resultsCount = 0;\n  const cache = maxSize <= 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);\n  function memoized() {\n    let value = cache.get(arguments);\n    if (value === NOT_FOUND) {\n      value = func.apply(null, arguments);\n      resultsCount++;\n      if (resultEqualityCheck) {\n        const entries = cache.getEntries();\n        const matchingEntry = entries.find(\n          (entry) => resultEqualityCheck(entry.value, value)\n        );\n        if (matchingEntry) {\n          value = matchingEntry.value;\n          resultsCount !== 0 && resultsCount--;\n        }\n      }\n      cache.put(arguments, value);\n    }\n    return value;\n  }\n  memoized.clearCache = () => {\n    cache.clear();\n    memoized.resetResultsCount();\n  };\n  memoized.resultsCount = () => resultsCount;\n  memoized.resetResultsCount = () => {\n    resultsCount = 0;\n  };\n  return memoized;\n}\n\n// src/autotrackMemoize/autotrackMemoize.ts\nfunction autotrackMemoize(func) {\n  const node = createNode(\n    []\n  );\n  let lastArgs = null;\n  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck);\n  const cache = createCache(() => {\n    const res = func.apply(null, node.proxy);\n    return res;\n  });\n  function memoized() {\n    if (!shallowEqual(lastArgs, arguments)) {\n      updateNode(node, arguments);\n      lastArgs = arguments;\n    }\n    return cache.value;\n  }\n  memoized.clearCache = () => {\n    return cache.clear();\n  };\n  return memoized;\n}\n\n// src/weakMapMemoize.ts\nvar StrongRef = class {\n  constructor(value) {\n    this.value = value;\n  }\n  deref() {\n    return this.value;\n  }\n};\nvar Ref = typeof WeakRef !== \"undefined\" ? WeakRef : StrongRef;\nvar UNTERMINATED = 0;\nvar TERMINATED = 1;\nfunction createCacheNode() {\n  return {\n    s: UNTERMINATED,\n    v: void 0,\n    o: null,\n    p: null\n  };\n}\nfunction weakMapMemoize(func, options = {}) {\n  let fnNode = createCacheNode();\n  const { resultEqualityCheck } = options;\n  let lastResult;\n  let resultsCount = 0;\n  function memoized() {\n    let cacheNode = fnNode;\n    const { length } = arguments;\n    for (let i = 0, l = length; i < l; i++) {\n      const arg = arguments[i];\n      if (typeof arg === \"function\" || typeof arg === \"object\" && arg !== null) {\n        let objectCache = cacheNode.o;\n        if (objectCache === null) {\n          cacheNode.o = objectCache = /* @__PURE__ */ new WeakMap();\n        }\n        const objectNode = objectCache.get(arg);\n        if (objectNode === void 0) {\n          cacheNode = createCacheNode();\n          objectCache.set(arg, cacheNode);\n        } else {\n          cacheNode = objectNode;\n        }\n      } else {\n        let primitiveCache = cacheNode.p;\n        if (primitiveCache === null) {\n          cacheNode.p = primitiveCache = /* @__PURE__ */ new Map();\n        }\n        const primitiveNode = primitiveCache.get(arg);\n        if (primitiveNode === void 0) {\n          cacheNode = createCacheNode();\n          primitiveCache.set(arg, cacheNode);\n        } else {\n          cacheNode = primitiveNode;\n        }\n      }\n    }\n    const terminatedNode = cacheNode;\n    let result;\n    if (cacheNode.s === TERMINATED) {\n      result = cacheNode.v;\n    } else {\n      result = func.apply(null, arguments);\n      resultsCount++;\n      if (resultEqualityCheck) {\n        const lastResultValue = lastResult?.deref?.() ?? lastResult;\n        if (lastResultValue != null && resultEqualityCheck(lastResultValue, result)) {\n          result = lastResultValue;\n          resultsCount !== 0 && resultsCount--;\n        }\n        const needsWeakRef = typeof result === \"object\" && result !== null || typeof result === \"function\";\n        lastResult = needsWeakRef ? new Ref(result) : result;\n      }\n    }\n    terminatedNode.s = TERMINATED;\n    terminatedNode.v = result;\n    return result;\n  }\n  memoized.clearCache = () => {\n    fnNode = createCacheNode();\n    memoized.resetResultsCount();\n  };\n  memoized.resultsCount = () => resultsCount;\n  memoized.resetResultsCount = () => {\n    resultsCount = 0;\n  };\n  return memoized;\n}\n\n// src/createSelectorCreator.ts\nfunction createSelectorCreator(memoizeOrOptions, ...memoizeOptionsFromArgs) {\n  const createSelectorCreatorOptions = typeof memoizeOrOptions === \"function\" ? {\n    memoize: memoizeOrOptions,\n    memoizeOptions: memoizeOptionsFromArgs\n  } : memoizeOrOptions;\n  const createSelector2 = (...createSelectorArgs) => {\n    let recomputations = 0;\n    let dependencyRecomputations = 0;\n    let lastResult;\n    let directlyPassedOptions = {};\n    let resultFunc = createSelectorArgs.pop();\n    if (typeof resultFunc === \"object\") {\n      directlyPassedOptions = resultFunc;\n      resultFunc = createSelectorArgs.pop();\n    }\n    assertIsFunction(\n      resultFunc,\n      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\n    );\n    const combinedOptions = {\n      ...createSelectorCreatorOptions,\n      ...directlyPassedOptions\n    };\n    const {\n      memoize,\n      memoizeOptions = [],\n      argsMemoize = weakMapMemoize,\n      argsMemoizeOptions = [],\n      devModeChecks = {}\n    } = combinedOptions;\n    const finalMemoizeOptions = ensureIsArray(memoizeOptions);\n    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions);\n    const dependencies = getDependencies(createSelectorArgs);\n    const memoizedResultFunc = memoize(function recomputationWrapper() {\n      recomputations++;\n      return resultFunc.apply(\n        null,\n        arguments\n      );\n    }, ...finalMemoizeOptions);\n    let firstRun = true;\n    const selector = argsMemoize(function dependenciesChecker() {\n      dependencyRecomputations++;\n      const inputSelectorResults = collectInputSelectorResults(\n        dependencies,\n        arguments\n      );\n      lastResult = memoizedResultFunc.apply(null, inputSelectorResults);\n      if (process.env.NODE_ENV !== \"production\") {\n        const { identityFunctionCheck, inputStabilityCheck } = getDevModeChecksExecutionInfo(firstRun, devModeChecks);\n        if (identityFunctionCheck.shouldRun) {\n          identityFunctionCheck.run(\n            resultFunc,\n            inputSelectorResults,\n            lastResult\n          );\n        }\n        if (inputStabilityCheck.shouldRun) {\n          const inputSelectorResultsCopy = collectInputSelectorResults(\n            dependencies,\n            arguments\n          );\n          inputStabilityCheck.run(\n            { inputSelectorResults, inputSelectorResultsCopy },\n            { memoize, memoizeOptions: finalMemoizeOptions },\n            arguments\n          );\n        }\n        if (firstRun)\n          firstRun = false;\n      }\n      return lastResult;\n    }, ...finalArgsMemoizeOptions);\n    return Object.assign(selector, {\n      resultFunc,\n      memoizedResultFunc,\n      dependencies,\n      dependencyRecomputations: () => dependencyRecomputations,\n      resetDependencyRecomputations: () => {\n        dependencyRecomputations = 0;\n      },\n      lastResult: () => lastResult,\n      recomputations: () => recomputations,\n      resetRecomputations: () => {\n        recomputations = 0;\n      },\n      memoize,\n      argsMemoize\n    });\n  };\n  Object.assign(createSelector2, {\n    withTypes: () => createSelector2\n  });\n  return createSelector2;\n}\nvar createSelector = /* @__PURE__ */ createSelectorCreator(weakMapMemoize);\n\n// src/createStructuredSelector.ts\nvar createStructuredSelector = Object.assign(\n  (inputSelectorsObject, selectorCreator = createSelector) => {\n    assertIsObject(\n      inputSelectorsObject,\n      `createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof inputSelectorsObject}`\n    );\n    const inputSelectorKeys = Object.keys(inputSelectorsObject);\n    const dependencies = inputSelectorKeys.map(\n      (key) => inputSelectorsObject[key]\n    );\n    const structuredSelector = selectorCreator(\n      dependencies,\n      (...inputSelectorResults) => {\n        return inputSelectorResults.reduce((composition, value, index) => {\n          composition[inputSelectorKeys[index]] = value;\n          return composition;\n        }, {});\n      }\n    );\n    return structuredSelector;\n  },\n  { withTypes: () => createStructuredSelector }\n);\nexport {\n  createSelector,\n  createSelectorCreator,\n  createStructuredSelector,\n  lruMemoize,\n  referenceEqualityCheck,\n  setGlobalDevModeChecks,\n  autotrackMemoize as unstable_autotrackMemoize,\n  weakMapMemoize\n};\n//# sourceMappingURL=reselect.mjs.map","import { createSelector } from 'reselect';\nimport sortBy from 'es-toolkit/compat/sortBy';\nimport { RechartsRootState } from '../store';\nimport { LegendSettings } from '../legendSlice';\nimport { LegendPayload } from '../../component/DefaultLegendContent';\nimport { Size } from '../../util/types';\n\nexport const selectLegendSettings = (state: RechartsRootState): LegendSettings => state.legend.settings;\n\nexport const selectLegendSize = (state: RechartsRootState): Size => state.legend.size;\n\nconst selectAllLegendPayload2DArray = (state: RechartsRootState): ReadonlyArray<ReadonlyArray<LegendPayload>> =>\n  state.legend.payload;\n\nexport const selectLegendPayload: (state: RechartsRootState) => ReadonlyArray<LegendPayload> = createSelector(\n  [selectAllLegendPayload2DArray, selectLegendSettings],\n  (payloads, { itemSorter }) => {\n    const flat = payloads.flat(1);\n    return itemSorter ? sortBy(flat, itemSorter) : flat;\n  },\n);\n","import { useCallback, useState } from 'react';\n\nconst EPS = 1;\n\n/**\n * TODO this documentation does not reflect what this hook is doing, update it.\n * Stores the `offsetHeight`, `offsetLeft`, `offsetTop`, and `offsetWidth` of a DOM element.\n */\nexport type ElementOffset = {\n  /**\n   * Height of an element, including vertical padding and borders, as an integer.\n   *\n   * Typically, offsetHeight is a measurement in pixels of the element's CSS height, including any borders, padding, and horizontal scrollbars (if rendered). It does not include the height of pseudo-elements such as ::before or ::after\n   *\n   * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight\n   */\n  height: number;\n  /**\n   * Number of pixels that the upper left corner of the current element is offset to the left within the HTMLElement.offsetParent node\n   *\n   * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetLeft\n   */\n  left: number;\n  /**\n   * Distance from the outer border of the current element (including its margin) to the top padding edge of the offsetParent, the closest positioned ancestor element.\n   *\n   * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop\n   */\n  top: number;\n  /**\n   * Layout width of an element as an integer.\n   *\n   * Typically, offsetWidth is a measurement in pixels of the element's CSS width, including any borders, padding, and vertical scrollbars (if rendered). It does not include the width of pseudo-elements such as ::before or ::after.\n   *\n   * https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth\n   */\n  width: number;\n};\n\nexport type SetElementOffset = (node: HTMLElement | null) => void;\n\n/**\n * Use this to listen to element layout changes.\n *\n * Very useful for reading actual sizes of DOM elements relative to the viewport.\n *\n * @param extraDependencies use this to trigger new DOM dimensions read when any of these change. Good for things like payload and label, that will re-render something down in the children array, but you want to read the layout box of a parent.\n * @returns [lastElementOffset, updateElementOffset] most recent value, and setter. Pass the setter to a DOM element ref like this: `<div ref={updateElementOffset}>`\n */\nexport function useElementOffset(extraDependencies: ReadonlyArray<unknown> = []): [ElementOffset, SetElementOffset] {\n  const [lastBoundingBox, setLastBoundingBox] = useState<ElementOffset>({ height: 0, left: 0, top: 0, width: 0 });\n  const updateBoundingBox = useCallback(\n    (node: HTMLDivElement | null) => {\n      if (node != null) {\n        const rect = node.getBoundingClientRect();\n        const box: ElementOffset = {\n          height: rect.height,\n          left: rect.left,\n          top: rect.top,\n          width: rect.width,\n        };\n        if (\n          Math.abs(box.height - lastBoundingBox.height) > EPS ||\n          Math.abs(box.left - lastBoundingBox.left) > EPS ||\n          Math.abs(box.top - lastBoundingBox.top) > EPS ||\n          Math.abs(box.width - lastBoundingBox.width) > EPS\n        ) {\n          setLastBoundingBox({ height: box.height, left: box.left, top: box.top, width: box.width });\n        }\n      }\n    },\n    [lastBoundingBox.width, lastBoundingBox.height, lastBoundingBox.top, lastBoundingBox.left, ...extraDependencies],\n  );\n  return [lastBoundingBox, updateBoundingBox];\n}\n","function n(n){for(var r=arguments.length,t=Array(r>1?r-1:0),e=1;e<r;e++)t[e-1]=arguments[e];if(\"production\"!==process.env.NODE_ENV){var i=Y[n],o=i?\"function\"==typeof i?i.apply(null,t):i:\"unknown error nr: \"+n;throw Error(\"[Immer] \"+o)}throw Error(\"[Immer] minified error nr: \"+n+(t.length?\" \"+t.map((function(n){return\"'\"+n+\"'\"})).join(\",\"):\"\")+\". Find the full error at: https://bit.ly/3cXEKWf\")}function r(n){return!!n&&!!n[Q]}function t(n){var r;return!!n&&(function(n){if(!n||\"object\"!=typeof n)return!1;var r=Object.getPrototypeOf(n);if(null===r)return!0;var t=Object.hasOwnProperty.call(r,\"constructor\")&&r.constructor;return t===Object||\"function\"==typeof t&&Function.toString.call(t)===Z}(n)||Array.isArray(n)||!!n[L]||!!(null===(r=n.constructor)||void 0===r?void 0:r[L])||s(n)||v(n))}function e(t){return r(t)||n(23,t),t[Q].t}function i(n,r,t){void 0===t&&(t=!1),0===o(n)?(t?Object.keys:nn)(n).forEach((function(e){t&&\"symbol\"==typeof e||r(e,n[e],n)})):n.forEach((function(t,e){return r(e,t,n)}))}function o(n){var r=n[Q];return r?r.i>3?r.i-4:r.i:Array.isArray(n)?1:s(n)?2:v(n)?3:0}function u(n,r){return 2===o(n)?n.has(r):Object.prototype.hasOwnProperty.call(n,r)}function a(n,r){return 2===o(n)?n.get(r):n[r]}function f(n,r,t){var e=o(n);2===e?n.set(r,t):3===e?n.add(t):n[r]=t}function c(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r}function s(n){return X&&n instanceof Map}function v(n){return q&&n instanceof Set}function p(n){return n.o||n.t}function l(n){if(Array.isArray(n))return Array.prototype.slice.call(n);var r=rn(n);delete r[Q];for(var t=nn(r),e=0;e<t.length;e++){var i=t[e],o=r[i];!1===o.writable&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(r[i]={configurable:!0,writable:!0,enumerable:o.enumerable,value:n[i]})}return Object.create(Object.getPrototypeOf(n),r)}function d(n,e){return void 0===e&&(e=!1),y(n)||r(n)||!t(n)||(o(n)>1&&(n.set=n.add=n.clear=n.delete=h),Object.freeze(n),e&&i(n,(function(n,r){return d(r,!0)}),!0)),n}function h(){n(2)}function y(n){return null==n||\"object\"!=typeof n||Object.isFrozen(n)}function b(r){var t=tn[r];return t||n(18,r),t}function m(n,r){tn[n]||(tn[n]=r)}function _(){return\"production\"===process.env.NODE_ENV||U||n(0),U}function j(n,r){r&&(b(\"Patches\"),n.u=[],n.s=[],n.v=r)}function g(n){O(n),n.p.forEach(S),n.p=null}function O(n){n===U&&(U=n.l)}function w(n){return U={p:[],l:U,h:n,m:!0,_:0}}function S(n){var r=n[Q];0===r.i||1===r.i?r.j():r.g=!0}function P(r,e){e._=e.p.length;var i=e.p[0],o=void 0!==r&&r!==i;return e.h.O||b(\"ES5\").S(e,r,o),o?(i[Q].P&&(g(e),n(4)),t(r)&&(r=M(e,r),e.l||x(e,r)),e.u&&b(\"Patches\").M(i[Q].t,r,e.u,e.s)):r=M(e,i,[]),g(e),e.u&&e.v(e.u,e.s),r!==H?r:void 0}function M(n,r,t){if(y(r))return r;var e=r[Q];if(!e)return i(r,(function(i,o){return A(n,e,r,i,o,t)}),!0),r;if(e.A!==n)return r;if(!e.P)return x(n,e.t,!0),e.t;if(!e.I){e.I=!0,e.A._--;var o=4===e.i||5===e.i?e.o=l(e.k):e.o,u=o,a=!1;3===e.i&&(u=new Set(o),o.clear(),a=!0),i(u,(function(r,i){return A(n,e,o,r,i,t,a)})),x(n,o,!1),t&&n.u&&b(\"Patches\").N(e,t,n.u,n.s)}return e.o}function A(e,i,o,a,c,s,v){if(\"production\"!==process.env.NODE_ENV&&c===o&&n(5),r(c)){var p=M(e,c,s&&i&&3!==i.i&&!u(i.R,a)?s.concat(a):void 0);if(f(o,a,p),!r(p))return;e.m=!1}else v&&o.add(c);if(t(c)&&!y(c)){if(!e.h.D&&e._<1)return;M(e,c),i&&i.A.l||x(e,c)}}function x(n,r,t){void 0===t&&(t=!1),!n.l&&n.h.D&&n.m&&d(r,t)}function z(n,r){var t=n[Q];return(t?p(t):n)[r]}function I(n,r){if(r in n)for(var t=Object.getPrototypeOf(n);t;){var e=Object.getOwnPropertyDescriptor(t,r);if(e)return e;t=Object.getPrototypeOf(t)}}function k(n){n.P||(n.P=!0,n.l&&k(n.l))}function E(n){n.o||(n.o=l(n.t))}function N(n,r,t){var e=s(r)?b(\"MapSet\").F(r,t):v(r)?b(\"MapSet\").T(r,t):n.O?function(n,r){var t=Array.isArray(n),e={i:t?1:0,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:null,o:null,j:null,C:!1},i=e,o=en;t&&(i=[e],o=on);var u=Proxy.revocable(i,o),a=u.revoke,f=u.proxy;return e.k=f,e.j=a,f}(r,t):b(\"ES5\").J(r,t);return(t?t.A:_()).p.push(e),e}function R(e){return r(e)||n(22,e),function n(r){if(!t(r))return r;var e,u=r[Q],c=o(r);if(u){if(!u.P&&(u.i<4||!b(\"ES5\").K(u)))return u.t;u.I=!0,e=D(r,c),u.I=!1}else e=D(r,c);return i(e,(function(r,t){u&&a(u.t,r)===t||f(e,r,n(t))})),3===c?new Set(e):e}(e)}function D(n,r){switch(r){case 2:return new Map(n);case 3:return Array.from(n)}return l(n)}function F(){function t(n,r){var t=s[n];return t?t.enumerable=r:s[n]=t={configurable:!0,enumerable:r,get:function(){var r=this[Q];return\"production\"!==process.env.NODE_ENV&&f(r),en.get(r,n)},set:function(r){var t=this[Q];\"production\"!==process.env.NODE_ENV&&f(t),en.set(t,n,r)}},t}function e(n){for(var r=n.length-1;r>=0;r--){var t=n[r][Q];if(!t.P)switch(t.i){case 5:a(t)&&k(t);break;case 4:o(t)&&k(t)}}}function o(n){for(var r=n.t,t=n.k,e=nn(t),i=e.length-1;i>=0;i--){var o=e[i];if(o!==Q){var a=r[o];if(void 0===a&&!u(r,o))return!0;var f=t[o],s=f&&f[Q];if(s?s.t!==a:!c(f,a))return!0}}var v=!!r[Q];return e.length!==nn(r).length+(v?0:1)}function a(n){var r=n.k;if(r.length!==n.t.length)return!0;var t=Object.getOwnPropertyDescriptor(r,r.length-1);if(t&&!t.get)return!0;for(var e=0;e<r.length;e++)if(!r.hasOwnProperty(e))return!0;return!1}function f(r){r.g&&n(3,JSON.stringify(p(r)))}var s={};m(\"ES5\",{J:function(n,r){var e=Array.isArray(n),i=function(n,r){if(n){for(var e=Array(r.length),i=0;i<r.length;i++)Object.defineProperty(e,\"\"+i,t(i,!0));return e}var o=rn(r);delete o[Q];for(var u=nn(o),a=0;a<u.length;a++){var f=u[a];o[f]=t(f,n||!!o[f].enumerable)}return Object.create(Object.getPrototypeOf(r),o)}(e,n),o={i:e?5:4,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:i,o:null,g:!1,C:!1};return Object.defineProperty(i,Q,{value:o,writable:!0}),i},S:function(n,t,o){o?r(t)&&t[Q].A===n&&e(n.p):(n.u&&function n(r){if(r&&\"object\"==typeof r){var t=r[Q];if(t){var e=t.t,o=t.k,f=t.R,c=t.i;if(4===c)i(o,(function(r){r!==Q&&(void 0!==e[r]||u(e,r)?f[r]||n(o[r]):(f[r]=!0,k(t)))})),i(e,(function(n){void 0!==o[n]||u(o,n)||(f[n]=!1,k(t))}));else if(5===c){if(a(t)&&(k(t),f.length=!0),o.length<e.length)for(var s=o.length;s<e.length;s++)f[s]=!1;else for(var v=e.length;v<o.length;v++)f[v]=!0;for(var p=Math.min(o.length,e.length),l=0;l<p;l++)o.hasOwnProperty(l)||(f[l]=!0),void 0===f[l]&&n(o[l])}}}}(n.p[0]),e(n.p))},K:function(n){return 4===n.i?o(n):a(n)}})}function T(){function e(n){if(!t(n))return n;if(Array.isArray(n))return n.map(e);if(s(n))return new Map(Array.from(n.entries()).map((function(n){return[n[0],e(n[1])]})));if(v(n))return new Set(Array.from(n).map(e));var r=Object.create(Object.getPrototypeOf(n));for(var i in n)r[i]=e(n[i]);return u(n,L)&&(r[L]=n[L]),r}function f(n){return r(n)?e(n):n}var c=\"add\";m(\"Patches\",{$:function(r,t){return t.forEach((function(t){for(var i=t.path,u=t.op,f=r,s=0;s<i.length-1;s++){var v=o(f),p=i[s];\"string\"!=typeof p&&\"number\"!=typeof p&&(p=\"\"+p),0!==v&&1!==v||\"__proto__\"!==p&&\"constructor\"!==p||n(24),\"function\"==typeof f&&\"prototype\"===p&&n(24),\"object\"!=typeof(f=a(f,p))&&n(15,i.join(\"/\"))}var l=o(f),d=e(t.value),h=i[i.length-1];switch(u){case\"replace\":switch(l){case 2:return f.set(h,d);case 3:n(16);default:return f[h]=d}case c:switch(l){case 1:return\"-\"===h?f.push(d):f.splice(h,0,d);case 2:return f.set(h,d);case 3:return f.add(d);default:return f[h]=d}case\"remove\":switch(l){case 1:return f.splice(h,1);case 2:return f.delete(h);case 3:return f.delete(t.value);default:return delete f[h]}default:n(17,u)}})),r},N:function(n,r,t,e){switch(n.i){case 0:case 4:case 2:return function(n,r,t,e){var o=n.t,s=n.o;i(n.R,(function(n,i){var v=a(o,n),p=a(s,n),l=i?u(o,n)?\"replace\":c:\"remove\";if(v!==p||\"replace\"!==l){var d=r.concat(n);t.push(\"remove\"===l?{op:l,path:d}:{op:l,path:d,value:p}),e.push(l===c?{op:\"remove\",path:d}:\"remove\"===l?{op:c,path:d,value:f(v)}:{op:\"replace\",path:d,value:f(v)})}}))}(n,r,t,e);case 5:case 1:return function(n,r,t,e){var i=n.t,o=n.R,u=n.o;if(u.length<i.length){var a=[u,i];i=a[0],u=a[1];var s=[e,t];t=s[0],e=s[1]}for(var v=0;v<i.length;v++)if(o[v]&&u[v]!==i[v]){var p=r.concat([v]);t.push({op:\"replace\",path:p,value:f(u[v])}),e.push({op:\"replace\",path:p,value:f(i[v])})}for(var l=i.length;l<u.length;l++){var d=r.concat([l]);t.push({op:c,path:d,value:f(u[l])})}i.length<u.length&&e.push({op:\"replace\",path:r.concat([\"length\"]),value:i.length})}(n,r,t,e);case 3:return function(n,r,t,e){var i=n.t,o=n.o,u=0;i.forEach((function(n){if(!o.has(n)){var i=r.concat([u]);t.push({op:\"remove\",path:i,value:n}),e.unshift({op:c,path:i,value:n})}u++})),u=0,o.forEach((function(n){if(!i.has(n)){var o=r.concat([u]);t.push({op:c,path:o,value:n}),e.unshift({op:\"remove\",path:o,value:n})}u++}))}(n,r,t,e)}},M:function(n,r,t,e){t.push({op:\"replace\",path:[],value:r===H?void 0:r}),e.push({op:\"replace\",path:[],value:n})}})}function C(){function r(n,r){function t(){this.constructor=n}a(n,r),n.prototype=(t.prototype=r.prototype,new t)}function e(n){n.o||(n.R=new Map,n.o=new Map(n.t))}function o(n){n.o||(n.o=new Set,n.t.forEach((function(r){if(t(r)){var e=N(n.A.h,r,n);n.p.set(r,e),n.o.add(e)}else n.o.add(r)})))}function u(r){r.g&&n(3,JSON.stringify(p(r)))}var a=function(n,r){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var t in r)r.hasOwnProperty(t)&&(n[t]=r[t])})(n,r)},f=function(){function n(n,r){return this[Q]={i:2,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,R:void 0,t:n,k:this,C:!1,g:!1},this}r(n,Map);var o=n.prototype;return Object.defineProperty(o,\"size\",{get:function(){return p(this[Q]).size}}),o.has=function(n){return p(this[Q]).has(n)},o.set=function(n,r){var t=this[Q];return u(t),p(t).has(n)&&p(t).get(n)===r||(e(t),k(t),t.R.set(n,!0),t.o.set(n,r),t.R.set(n,!0)),this},o.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),e(r),k(r),r.t.has(n)?r.R.set(n,!1):r.R.delete(n),r.o.delete(n),!0},o.clear=function(){var n=this[Q];u(n),p(n).size&&(e(n),k(n),n.R=new Map,i(n.t,(function(r){n.R.set(r,!1)})),n.o.clear())},o.forEach=function(n,r){var t=this;p(this[Q]).forEach((function(e,i){n.call(r,t.get(i),i,t)}))},o.get=function(n){var r=this[Q];u(r);var i=p(r).get(n);if(r.I||!t(i))return i;if(i!==r.t.get(n))return i;var o=N(r.A.h,i,r);return e(r),r.o.set(n,o),o},o.keys=function(){return p(this[Q]).keys()},o.values=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.values()},n.next=function(){var n=t.next();return n.done?n:{done:!1,value:r.get(n.value)}},n},o.entries=function(){var n,r=this,t=this.keys();return(n={})[V]=function(){return r.entries()},n.next=function(){var n=t.next();if(n.done)return n;var e=r.get(n.value);return{done:!1,value:[n.value,e]}},n},o[V]=function(){return this.entries()},n}(),c=function(){function n(n,r){return this[Q]={i:3,l:r,A:r?r.A:_(),P:!1,I:!1,o:void 0,t:n,k:this,p:new Map,g:!1,C:!1},this}r(n,Set);var t=n.prototype;return Object.defineProperty(t,\"size\",{get:function(){return p(this[Q]).size}}),t.has=function(n){var r=this[Q];return u(r),r.o?!!r.o.has(n)||!(!r.p.has(n)||!r.o.has(r.p.get(n))):r.t.has(n)},t.add=function(n){var r=this[Q];return u(r),this.has(n)||(o(r),k(r),r.o.add(n)),this},t.delete=function(n){if(!this.has(n))return!1;var r=this[Q];return u(r),o(r),k(r),r.o.delete(n)||!!r.p.has(n)&&r.o.delete(r.p.get(n))},t.clear=function(){var n=this[Q];u(n),p(n).size&&(o(n),k(n),n.o.clear())},t.values=function(){var n=this[Q];return u(n),o(n),n.o.values()},t.entries=function(){var n=this[Q];return u(n),o(n),n.o.entries()},t.keys=function(){return this.values()},t[V]=function(){return this.values()},t.forEach=function(n,r){for(var t=this.values(),e=t.next();!e.done;)n.call(r,e.value,e.value,this),e=t.next()},n}();m(\"MapSet\",{F:function(n,r){return new f(n,r)},T:function(n,r){return new c(n,r)}})}function J(){F(),C(),T()}function K(n){return n}function $(n){return n}var G,U,W=\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol(\"x\"),X=\"undefined\"!=typeof Map,q=\"undefined\"!=typeof Set,B=\"undefined\"!=typeof Proxy&&void 0!==Proxy.revocable&&\"undefined\"!=typeof Reflect,H=W?Symbol.for(\"immer-nothing\"):((G={})[\"immer-nothing\"]=!0,G),L=W?Symbol.for(\"immer-draftable\"):\"__$immer_draftable\",Q=W?Symbol.for(\"immer-state\"):\"__$immer_state\",V=\"undefined\"!=typeof Symbol&&Symbol.iterator||\"@@iterator\",Y={0:\"Illegal state\",1:\"Immer drafts cannot have computed properties\",2:\"This object has been frozen and should not be mutated\",3:function(n){return\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \"+n},4:\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",5:\"Immer forbids circular references\",6:\"The first or second argument to `produce` must be a function\",7:\"The third argument to `produce` must be a function or undefined\",8:\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",9:\"First argument to `finishDraft` must be a draft returned by `createDraft`\",10:\"The given draft is already finalized\",11:\"Object.defineProperty() cannot be used on an Immer draft\",12:\"Object.setPrototypeOf() cannot be used on an Immer draft\",13:\"Immer only supports deleting array indices\",14:\"Immer only supports setting array indices and the 'length' property\",15:function(n){return\"Cannot apply patch, path doesn't resolve: \"+n},16:'Sets cannot have \"replace\" patches.',17:function(n){return\"Unsupported patch operation: \"+n},18:function(n){return\"The plugin for '\"+n+\"' has not been loaded into Immer. To enable the plugin, import and call `enable\"+n+\"()` when initializing your application.\"},20:\"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",21:function(n){return\"produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '\"+n+\"'\"},22:function(n){return\"'current' expects a draft, got: \"+n},23:function(n){return\"'original' expects a draft, got: \"+n},24:\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"},Z=\"\"+Object.prototype.constructor,nn=\"undefined\"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(n){return Object.getOwnPropertyNames(n).concat(Object.getOwnPropertySymbols(n))}:Object.getOwnPropertyNames,rn=Object.getOwnPropertyDescriptors||function(n){var r={};return nn(n).forEach((function(t){r[t]=Object.getOwnPropertyDescriptor(n,t)})),r},tn={},en={get:function(n,r){if(r===Q)return n;var e=p(n);if(!u(e,r))return function(n,r,t){var e,i=I(r,t);return i?\"value\"in i?i.value:null===(e=i.get)||void 0===e?void 0:e.call(n.k):void 0}(n,e,r);var i=e[r];return n.I||!t(i)?i:i===z(n.t,r)?(E(n),n.o[r]=N(n.A.h,i,n)):i},has:function(n,r){return r in p(n)},ownKeys:function(n){return Reflect.ownKeys(p(n))},set:function(n,r,t){var e=I(p(n),r);if(null==e?void 0:e.set)return e.set.call(n.k,t),!0;if(!n.P){var i=z(p(n),r),o=null==i?void 0:i[Q];if(o&&o.t===t)return n.o[r]=t,n.R[r]=!1,!0;if(c(t,i)&&(void 0!==t||u(n.t,r)))return!0;E(n),k(n)}return n.o[r]===t&&(void 0!==t||r in n.o)||Number.isNaN(t)&&Number.isNaN(n.o[r])||(n.o[r]=t,n.R[r]=!0),!0},deleteProperty:function(n,r){return void 0!==z(n.t,r)||r in n.t?(n.R[r]=!1,E(n),k(n)):delete n.R[r],n.o&&delete n.o[r],!0},getOwnPropertyDescriptor:function(n,r){var t=p(n),e=Reflect.getOwnPropertyDescriptor(t,r);return e?{writable:!0,configurable:1!==n.i||\"length\"!==r,enumerable:e.enumerable,value:t[r]}:e},defineProperty:function(){n(11)},getPrototypeOf:function(n){return Object.getPrototypeOf(n.t)},setPrototypeOf:function(){n(12)}},on={};i(en,(function(n,r){on[n]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}})),on.deleteProperty=function(r,t){return\"production\"!==process.env.NODE_ENV&&isNaN(parseInt(t))&&n(13),on.set.call(this,r,t,void 0)},on.set=function(r,t,e){return\"production\"!==process.env.NODE_ENV&&\"length\"!==t&&isNaN(parseInt(t))&&n(14),en.set.call(this,r[0],t,e,r[0])};var un=function(){function e(r){var e=this;this.O=B,this.D=!0,this.produce=function(r,i,o){if(\"function\"==typeof r&&\"function\"!=typeof i){var u=i;i=r;var a=e;return function(n){var r=this;void 0===n&&(n=u);for(var t=arguments.length,e=Array(t>1?t-1:0),o=1;o<t;o++)e[o-1]=arguments[o];return a.produce(n,(function(n){var t;return(t=i).call.apply(t,[r,n].concat(e))}))}}var f;if(\"function\"!=typeof i&&n(6),void 0!==o&&\"function\"!=typeof o&&n(7),t(r)){var c=w(e),s=N(e,r,void 0),v=!0;try{f=i(s),v=!1}finally{v?g(c):O(c)}return\"undefined\"!=typeof Promise&&f instanceof Promise?f.then((function(n){return j(c,o),P(n,c)}),(function(n){throw g(c),n})):(j(c,o),P(f,c))}if(!r||\"object\"!=typeof r){if(void 0===(f=i(r))&&(f=r),f===H&&(f=void 0),e.D&&d(f,!0),o){var p=[],l=[];b(\"Patches\").M(r,f,p,l),o(p,l)}return f}n(21,r)},this.produceWithPatches=function(n,r){if(\"function\"==typeof n)return function(r){for(var t=arguments.length,i=Array(t>1?t-1:0),o=1;o<t;o++)i[o-1]=arguments[o];return e.produceWithPatches(r,(function(r){return n.apply(void 0,[r].concat(i))}))};var t,i,o=e.produce(n,r,(function(n,r){t=n,i=r}));return\"undefined\"!=typeof Promise&&o instanceof Promise?o.then((function(n){return[n,t,i]})):[o,t,i]},\"boolean\"==typeof(null==r?void 0:r.useProxies)&&this.setUseProxies(r.useProxies),\"boolean\"==typeof(null==r?void 0:r.autoFreeze)&&this.setAutoFreeze(r.autoFreeze)}var i=e.prototype;return i.createDraft=function(e){t(e)||n(8),r(e)&&(e=R(e));var i=w(this),o=N(this,e,void 0);return o[Q].C=!0,O(i),o},i.finishDraft=function(r,t){var e=r&&r[Q];\"production\"!==process.env.NODE_ENV&&(e&&e.C||n(9),e.I&&n(10));var i=e.A;return j(i,t),P(void 0,i)},i.setAutoFreeze=function(n){this.D=n},i.setUseProxies=function(r){r&&!B&&n(20),this.O=r},i.applyPatches=function(n,t){var e;for(e=t.length-1;e>=0;e--){var i=t[e];if(0===i.path.length&&\"replace\"===i.op){n=i.value;break}}e>-1&&(t=t.slice(e+1));var o=b(\"Patches\").$;return r(n)?o(n,t):this.produce(n,(function(n){return o(n,t)}))},e}(),an=new un,fn=an.produce,cn=an.produceWithPatches.bind(an),sn=an.setAutoFreeze.bind(an),vn=an.setUseProxies.bind(an),pn=an.applyPatches.bind(an),ln=an.createDraft.bind(an),dn=an.finishDraft.bind(an);export default fn;export{un as Immer,pn as applyPatches,K as castDraft,$ as castImmutable,ln as createDraft,R as current,J as enableAllPlugins,F as enableES5,C as enableMapSet,T as enablePatches,dn as finishDraft,d as freeze,L as immerable,r as isDraft,t as isDraftable,H as nothing,e as original,fn as produce,cn as produceWithPatches,sn as setAutoFreeze,vn as setUseProxies};\n//# sourceMappingURL=immer.esm.js.map\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nexport { _objectSpread2 as default };","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n  return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n  return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n  if (val === void 0) return 'undefined';\n  if (val === null) return 'null';\n  var type = typeof val;\n\n  switch (type) {\n    case 'boolean':\n    case 'string':\n    case 'number':\n    case 'symbol':\n    case 'function':\n      {\n        return type;\n      }\n  }\n\n  if (Array.isArray(val)) return 'array';\n  if (isDate(val)) return 'date';\n  if (isError(val)) return 'error';\n  var constructorName = ctorName(val);\n\n  switch (constructorName) {\n    case 'Symbol':\n    case 'Promise':\n    case 'WeakMap':\n    case 'WeakSet':\n    case 'Map':\n    case 'Set':\n      return constructorName;\n  } // other\n\n\n  return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n  return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n  return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n  if (val instanceof Date) return true;\n  return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n  var typeOfVal = typeof val;\n\n  if (process.env.NODE_ENV !== 'production') {\n    typeOfVal = miniKindOf(val);\n  }\n\n  return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n    }\n\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n      currentListeners = null;\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n    }\n\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n    }\n\n    currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[$$observable] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n    }\n\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n    }\n  });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n  var reducerKeys = Object.keys(reducers);\n  var finalReducers = {};\n\n  for (var i = 0; i < reducerKeys.length; i++) {\n    var key = reducerKeys[i];\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n      }\n    }\n\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n\n  var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n  // keys multiple times.\n\n  var unexpectedKeyCache;\n\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n\n  var shapeAssertionError;\n\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n\n  return function combination(state, action) {\n    if (state === void 0) {\n      state = {};\n    }\n\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n\n    var hasChanged = false;\n    var nextState = {};\n\n    for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n      var _key = finalReducerKeys[_i];\n      var reducer = finalReducers[_key];\n      var previousStateForKey = state[_key];\n      var nextStateForKey = reducer(previousStateForKey, action);\n\n      if (typeof nextStateForKey === 'undefined') {\n        var actionType = action && action.type;\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function () {\n    return dispatch(actionCreator.apply(this, arguments));\n  };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n  }\n\n  var boundActionCreators = {};\n\n  for (var key in actionCreators) {\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n\n  return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n    middlewares[_key] = arguments[_key];\n  }\n\n  return function (createStore) {\n    return function () {\n      var store = createStore.apply(void 0, arguments);\n\n      var _dispatch = function dispatch() {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n      };\n\n      var middlewareAPI = {\n        getState: store.getState,\n        dispatch: function dispatch() {\n          return _dispatch.apply(void 0, arguments);\n        }\n      };\n      var chain = middlewares.map(function (middleware) {\n        return middleware(middlewareAPI);\n      });\n      _dispatch = compose.apply(void 0, chain)(store.dispatch);\n      return _objectSpread(_objectSpread({}, store), {}, {\n        dispatch: _dispatch\n      });\n    };\n  };\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n  // Standard Redux middleware definition pattern:\n  // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n  var middleware = function middleware(_ref) {\n    var dispatch = _ref.dispatch,\n        getState = _ref.getState;\n    return function (next) {\n      return function (action) {\n        // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n        // If this \"action\" is really a function, call it and return the result.\n        if (typeof action === 'function') {\n          // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n          return action(dispatch, getState, extraArgument);\n        } // Otherwise, pass the action down the middleware chain as usual\n\n\n        return next(action);\n      };\n    };\n  };\n\n  return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","var __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = function (d, b) {\r\n        extendStatics = Object.setPrototypeOf ||\r\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n        return extendStatics(d, b);\r\n    };\r\n    return function (d, b) {\r\n        if (typeof b !== \"function\" && b !== null)\r\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\r\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n        to[j] = from[i];\r\n    return to;\r\n};\r\nvar __defProp = Object.defineProperty;\r\nvar __defProps = Object.defineProperties;\r\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\r\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\r\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\r\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\r\nvar __defNormalProp = function (obj, key, value) { return key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value: value }) : obj[key] = value; };\r\nvar __spreadValues = function (a, b) {\r\n    for (var prop in b || (b = {}))\r\n        if (__hasOwnProp.call(b, prop))\r\n            __defNormalProp(a, prop, b[prop]);\r\n    if (__getOwnPropSymbols)\r\n        for (var _i = 0, _c = __getOwnPropSymbols(b); _i < _c.length; _i++) {\r\n            var prop = _c[_i];\r\n            if (__propIsEnum.call(b, prop))\r\n                __defNormalProp(a, prop, b[prop]);\r\n        }\r\n    return a;\r\n};\r\nvar __spreadProps = function (a, b) { return __defProps(a, __getOwnPropDescs(b)); };\r\nvar __async = function (__this, __arguments, generator) {\r\n    return new Promise(function (resolve, reject) {\r\n        var fulfilled = function (value) {\r\n            try {\r\n                step(generator.next(value));\r\n            }\r\n            catch (e) {\r\n                reject(e);\r\n            }\r\n        };\r\n        var rejected = function (value) {\r\n            try {\r\n                step(generator.throw(value));\r\n            }\r\n            catch (e) {\r\n                reject(e);\r\n            }\r\n        };\r\n        var step = function (x) { return x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); };\r\n        step((generator = generator.apply(__this, __arguments)).next());\r\n    });\r\n};\r\n// src/index.ts\r\nimport { enableES5 } from \"immer\";\r\nexport * from \"redux\";\r\nimport { default as default2, current as current2, freeze, original, isDraft as isDraft4 } from \"immer\";\r\nimport { createSelector as createSelector2 } from \"reselect\";\r\n// src/createDraftSafeSelector.ts\r\nimport { current, isDraft } from \"immer\";\r\nimport { createSelector } from \"reselect\";\r\nvar createDraftSafeSelector = function () {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var selector = createSelector.apply(void 0, args);\r\n    var wrappedSelector = function (value) {\r\n        var rest = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            rest[_i - 1] = arguments[_i];\r\n        }\r\n        return selector.apply(void 0, __spreadArray([isDraft(value) ? current(value) : value], rest));\r\n    };\r\n    return wrappedSelector;\r\n};\r\n// src/configureStore.ts\r\nimport { createStore, compose as compose2, applyMiddleware, combineReducers } from \"redux\";\r\n// src/devtoolsExtension.ts\r\nimport { compose } from \"redux\";\r\nvar composeWithDevTools = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\r\n    if (arguments.length === 0)\r\n        return void 0;\r\n    if (typeof arguments[0] === \"object\")\r\n        return compose;\r\n    return compose.apply(null, arguments);\r\n};\r\nvar devToolsEnhancer = typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () {\r\n    return function (noop2) {\r\n        return noop2;\r\n    };\r\n};\r\n// src/isPlainObject.ts\r\nfunction isPlainObject(value) {\r\n    if (typeof value !== \"object\" || value === null)\r\n        return false;\r\n    var proto = Object.getPrototypeOf(value);\r\n    if (proto === null)\r\n        return true;\r\n    var baseProto = proto;\r\n    while (Object.getPrototypeOf(baseProto) !== null) {\r\n        baseProto = Object.getPrototypeOf(baseProto);\r\n    }\r\n    return proto === baseProto;\r\n}\r\n// src/getDefaultMiddleware.ts\r\nimport thunkMiddleware from \"redux-thunk\";\r\n// src/tsHelpers.ts\r\nvar hasMatchFunction = function (v) {\r\n    return v && typeof v.match === \"function\";\r\n};\r\n// src/createAction.ts\r\nfunction createAction(type, prepareAction) {\r\n    function actionCreator() {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        if (prepareAction) {\r\n            var prepared = prepareAction.apply(void 0, args);\r\n            if (!prepared) {\r\n                throw new Error(\"prepareAction did not return an object\");\r\n            }\r\n            return __spreadValues(__spreadValues({\r\n                type: type,\r\n                payload: prepared.payload\r\n            }, \"meta\" in prepared && { meta: prepared.meta }), \"error\" in prepared && { error: prepared.error });\r\n        }\r\n        return { type: type, payload: args[0] };\r\n    }\r\n    actionCreator.toString = function () { return \"\" + type; };\r\n    actionCreator.type = type;\r\n    actionCreator.match = function (action) { return action.type === type; };\r\n    return actionCreator;\r\n}\r\nfunction isAction(action) {\r\n    return isPlainObject(action) && \"type\" in action;\r\n}\r\nfunction isActionCreator(action) {\r\n    return typeof action === \"function\" && \"type\" in action && hasMatchFunction(action);\r\n}\r\nfunction isFSA(action) {\r\n    return isAction(action) && typeof action.type === \"string\" && Object.keys(action).every(isValidKey);\r\n}\r\nfunction isValidKey(key) {\r\n    return [\"type\", \"payload\", \"error\", \"meta\"].indexOf(key) > -1;\r\n}\r\nfunction getType(actionCreator) {\r\n    return \"\" + actionCreator;\r\n}\r\n// src/actionCreatorInvariantMiddleware.ts\r\nfunction getMessage(type) {\r\n    var splitType = type ? (\"\" + type).split(\"/\") : [];\r\n    var actionName = splitType[splitType.length - 1] || \"actionCreator\";\r\n    return \"Detected an action creator with type \\\"\" + (type || \"unknown\") + \"\\\" being dispatched. \\nMake sure you're calling the action creator before dispatching, i.e. `dispatch(\" + actionName + \"())` instead of `dispatch(\" + actionName + \")`. This is necessary even if the action has no payload.\";\r\n}\r\nfunction createActionCreatorInvariantMiddleware(options) {\r\n    if (options === void 0) { options = {}; }\r\n    if (process.env.NODE_ENV === \"production\") {\r\n        return function () { return function (next) { return function (action) { return next(action); }; }; };\r\n    }\r\n    var _c = options.isActionCreator, isActionCreator2 = _c === void 0 ? isActionCreator : _c;\r\n    return function () { return function (next) { return function (action) {\r\n        if (isActionCreator2(action)) {\r\n            console.warn(getMessage(action.type));\r\n        }\r\n        return next(action);\r\n    }; }; };\r\n}\r\n// src/utils.ts\r\nimport createNextState, { isDraftable } from \"immer\";\r\nfunction getTimeMeasureUtils(maxDelay, fnName) {\r\n    var elapsed = 0;\r\n    return {\r\n        measureTime: function (fn) {\r\n            var started = Date.now();\r\n            try {\r\n                return fn();\r\n            }\r\n            finally {\r\n                var finished = Date.now();\r\n                elapsed += finished - started;\r\n            }\r\n        },\r\n        warnIfExceeded: function () {\r\n            if (elapsed > maxDelay) {\r\n                console.warn(fnName + \" took \" + elapsed + \"ms, which is more than the warning threshold of \" + maxDelay + \"ms. \\nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\\nIt is disabled in production builds, so you don't need to worry about that.\");\r\n            }\r\n        }\r\n    };\r\n}\r\nvar MiddlewareArray = /** @class */ (function (_super) {\r\n    __extends(MiddlewareArray, _super);\r\n    function MiddlewareArray() {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var _this = _super.apply(this, args) || this;\r\n        Object.setPrototypeOf(_this, MiddlewareArray.prototype);\r\n        return _this;\r\n    }\r\n    Object.defineProperty(MiddlewareArray, Symbol.species, {\r\n        get: function () {\r\n            return MiddlewareArray;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    MiddlewareArray.prototype.concat = function () {\r\n        var arr = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            arr[_i] = arguments[_i];\r\n        }\r\n        return _super.prototype.concat.apply(this, arr);\r\n    };\r\n    MiddlewareArray.prototype.prepend = function () {\r\n        var arr = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            arr[_i] = arguments[_i];\r\n        }\r\n        if (arr.length === 1 && Array.isArray(arr[0])) {\r\n            return new (MiddlewareArray.bind.apply(MiddlewareArray, __spreadArray([void 0], arr[0].concat(this))))();\r\n        }\r\n        return new (MiddlewareArray.bind.apply(MiddlewareArray, __spreadArray([void 0], arr.concat(this))))();\r\n    };\r\n    return MiddlewareArray;\r\n}(Array));\r\nvar EnhancerArray = /** @class */ (function (_super) {\r\n    __extends(EnhancerArray, _super);\r\n    function EnhancerArray() {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var _this = _super.apply(this, args) || this;\r\n        Object.setPrototypeOf(_this, EnhancerArray.prototype);\r\n        return _this;\r\n    }\r\n    Object.defineProperty(EnhancerArray, Symbol.species, {\r\n        get: function () {\r\n            return EnhancerArray;\r\n        },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    EnhancerArray.prototype.concat = function () {\r\n        var arr = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            arr[_i] = arguments[_i];\r\n        }\r\n        return _super.prototype.concat.apply(this, arr);\r\n    };\r\n    EnhancerArray.prototype.prepend = function () {\r\n        var arr = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            arr[_i] = arguments[_i];\r\n        }\r\n        if (arr.length === 1 && Array.isArray(arr[0])) {\r\n            return new (EnhancerArray.bind.apply(EnhancerArray, __spreadArray([void 0], arr[0].concat(this))))();\r\n        }\r\n        return new (EnhancerArray.bind.apply(EnhancerArray, __spreadArray([void 0], arr.concat(this))))();\r\n    };\r\n    return EnhancerArray;\r\n}(Array));\r\nfunction freezeDraftable(val) {\r\n    return isDraftable(val) ? createNextState(val, function () {\r\n    }) : val;\r\n}\r\n// src/immutableStateInvariantMiddleware.ts\r\nvar isProduction = process.env.NODE_ENV === \"production\";\r\nvar prefix = \"Invariant failed\";\r\nfunction invariant(condition, message) {\r\n    if (condition) {\r\n        return;\r\n    }\r\n    if (isProduction) {\r\n        throw new Error(prefix);\r\n    }\r\n    throw new Error(prefix + \": \" + (message || \"\"));\r\n}\r\nfunction stringify(obj, serializer, indent, decycler) {\r\n    return JSON.stringify(obj, getSerialize(serializer, decycler), indent);\r\n}\r\nfunction getSerialize(serializer, decycler) {\r\n    var stack = [], keys = [];\r\n    if (!decycler)\r\n        decycler = function (_, value) {\r\n            if (stack[0] === value)\r\n                return \"[Circular ~]\";\r\n            return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\";\r\n        };\r\n    return function (key, value) {\r\n        if (stack.length > 0) {\r\n            var thisPos = stack.indexOf(this);\r\n            ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\r\n            ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\r\n            if (~stack.indexOf(value))\r\n                value = decycler.call(this, key, value);\r\n        }\r\n        else\r\n            stack.push(value);\r\n        return serializer == null ? value : serializer.call(this, key, value);\r\n    };\r\n}\r\nfunction isImmutableDefault(value) {\r\n    return typeof value !== \"object\" || value == null || Object.isFrozen(value);\r\n}\r\nfunction trackForMutations(isImmutable, ignorePaths, obj) {\r\n    var trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\r\n    return {\r\n        detectMutations: function () {\r\n            return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\r\n        }\r\n    };\r\n}\r\nfunction trackProperties(isImmutable, ignorePaths, obj, path, checkedObjects) {\r\n    if (ignorePaths === void 0) { ignorePaths = []; }\r\n    if (path === void 0) { path = \"\"; }\r\n    if (checkedObjects === void 0) { checkedObjects = new Set(); }\r\n    var tracked = { value: obj };\r\n    if (!isImmutable(obj) && !checkedObjects.has(obj)) {\r\n        checkedObjects.add(obj);\r\n        tracked.children = {};\r\n        for (var key in obj) {\r\n            var childPath = path ? path + \".\" + key : key;\r\n            if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\r\n                continue;\r\n            }\r\n            tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\r\n        }\r\n    }\r\n    return tracked;\r\n}\r\nfunction detectMutations(isImmutable, ignoredPaths, trackedProperty, obj, sameParentRef, path) {\r\n    if (ignoredPaths === void 0) { ignoredPaths = []; }\r\n    if (sameParentRef === void 0) { sameParentRef = false; }\r\n    if (path === void 0) { path = \"\"; }\r\n    var prevObj = trackedProperty ? trackedProperty.value : void 0;\r\n    var sameRef = prevObj === obj;\r\n    if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\r\n        return { wasMutated: true, path: path };\r\n    }\r\n    if (isImmutable(prevObj) || isImmutable(obj)) {\r\n        return { wasMutated: false };\r\n    }\r\n    var keysToDetect = {};\r\n    for (var key in trackedProperty.children) {\r\n        keysToDetect[key] = true;\r\n    }\r\n    for (var key in obj) {\r\n        keysToDetect[key] = true;\r\n    }\r\n    var hasIgnoredPaths = ignoredPaths.length > 0;\r\n    var _loop_1 = function (key) {\r\n        var nestedPath = path ? path + \".\" + key : key;\r\n        if (hasIgnoredPaths) {\r\n            var hasMatches = ignoredPaths.some(function (ignored) {\r\n                if (ignored instanceof RegExp) {\r\n                    return ignored.test(nestedPath);\r\n                }\r\n                return nestedPath === ignored;\r\n            });\r\n            if (hasMatches) {\r\n                return \"continue\";\r\n            }\r\n        }\r\n        var result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\r\n        if (result.wasMutated) {\r\n            return { value: result };\r\n        }\r\n    };\r\n    for (var key in keysToDetect) {\r\n        var state_1 = _loop_1(key);\r\n        if (typeof state_1 === \"object\")\r\n            return state_1.value;\r\n    }\r\n    return { wasMutated: false };\r\n}\r\nfunction createImmutableStateInvariantMiddleware(options) {\r\n    if (options === void 0) { options = {}; }\r\n    if (process.env.NODE_ENV === \"production\") {\r\n        return function () { return function (next) { return function (action) { return next(action); }; }; };\r\n    }\r\n    var _c = options.isImmutable, isImmutable = _c === void 0 ? isImmutableDefault : _c, ignoredPaths = options.ignoredPaths, _d = options.warnAfter, warnAfter = _d === void 0 ? 32 : _d, ignore = options.ignore;\r\n    ignoredPaths = ignoredPaths || ignore;\r\n    var track = trackForMutations.bind(null, isImmutable, ignoredPaths);\r\n    return function (_c) {\r\n        var getState = _c.getState;\r\n        var state = getState();\r\n        var tracker = track(state);\r\n        var result;\r\n        return function (next) { return function (action) {\r\n            var measureUtils = getTimeMeasureUtils(warnAfter, \"ImmutableStateInvariantMiddleware\");\r\n            measureUtils.measureTime(function () {\r\n                state = getState();\r\n                result = tracker.detectMutations();\r\n                tracker = track(state);\r\n                invariant(!result.wasMutated, \"A state mutation was detected between dispatches, in the path '\" + (result.path || \"\") + \"'.  This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)\");\r\n            });\r\n            var dispatchedAction = next(action);\r\n            measureUtils.measureTime(function () {\r\n                state = getState();\r\n                result = tracker.detectMutations();\r\n                tracker = track(state);\r\n                result.wasMutated && invariant(!result.wasMutated, \"A state mutation was detected inside a dispatch, in the path: \" + (result.path || \"\") + \". Take a look at the reducer(s) handling the action \" + stringify(action) + \". (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)\");\r\n            });\r\n            measureUtils.warnIfExceeded();\r\n            return dispatchedAction;\r\n        }; };\r\n    };\r\n}\r\n// src/serializableStateInvariantMiddleware.ts\r\nfunction isPlain(val) {\r\n    var type = typeof val;\r\n    return val == null || type === \"string\" || type === \"boolean\" || type === \"number\" || Array.isArray(val) || isPlainObject(val);\r\n}\r\nfunction findNonSerializableValue(value, path, isSerializable, getEntries, ignoredPaths, cache) {\r\n    if (path === void 0) { path = \"\"; }\r\n    if (isSerializable === void 0) { isSerializable = isPlain; }\r\n    if (ignoredPaths === void 0) { ignoredPaths = []; }\r\n    var foundNestedSerializable;\r\n    if (!isSerializable(value)) {\r\n        return {\r\n            keyPath: path || \"<root>\",\r\n            value: value\r\n        };\r\n    }\r\n    if (typeof value !== \"object\" || value === null) {\r\n        return false;\r\n    }\r\n    if (cache == null ? void 0 : cache.has(value))\r\n        return false;\r\n    var entries = getEntries != null ? getEntries(value) : Object.entries(value);\r\n    var hasIgnoredPaths = ignoredPaths.length > 0;\r\n    var _loop_2 = function (key, nestedValue) {\r\n        var nestedPath = path ? path + \".\" + key : key;\r\n        if (hasIgnoredPaths) {\r\n            var hasMatches = ignoredPaths.some(function (ignored) {\r\n                if (ignored instanceof RegExp) {\r\n                    return ignored.test(nestedPath);\r\n                }\r\n                return nestedPath === ignored;\r\n            });\r\n            if (hasMatches) {\r\n                return \"continue\";\r\n            }\r\n        }\r\n        if (!isSerializable(nestedValue)) {\r\n            return { value: {\r\n                    keyPath: nestedPath,\r\n                    value: nestedValue\r\n                } };\r\n        }\r\n        if (typeof nestedValue === \"object\") {\r\n            foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\r\n            if (foundNestedSerializable) {\r\n                return { value: foundNestedSerializable };\r\n            }\r\n        }\r\n    };\r\n    for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\r\n        var _c = entries_1[_i], key = _c[0], nestedValue = _c[1];\r\n        var state_2 = _loop_2(key, nestedValue);\r\n        if (typeof state_2 === \"object\")\r\n            return state_2.value;\r\n    }\r\n    if (cache && isNestedFrozen(value))\r\n        cache.add(value);\r\n    return false;\r\n}\r\nfunction isNestedFrozen(value) {\r\n    if (!Object.isFrozen(value))\r\n        return false;\r\n    for (var _i = 0, _c = Object.values(value); _i < _c.length; _i++) {\r\n        var nestedValue = _c[_i];\r\n        if (typeof nestedValue !== \"object\" || nestedValue === null)\r\n            continue;\r\n        if (!isNestedFrozen(nestedValue))\r\n            return false;\r\n    }\r\n    return true;\r\n}\r\nfunction createSerializableStateInvariantMiddleware(options) {\r\n    if (options === void 0) { options = {}; }\r\n    if (process.env.NODE_ENV === \"production\") {\r\n        return function () { return function (next) { return function (action) { return next(action); }; }; };\r\n    }\r\n    var _c = options.isSerializable, isSerializable = _c === void 0 ? isPlain : _c, getEntries = options.getEntries, _d = options.ignoredActions, ignoredActions = _d === void 0 ? [] : _d, _e = options.ignoredActionPaths, ignoredActionPaths = _e === void 0 ? [\"meta.arg\", \"meta.baseQueryMeta\"] : _e, _f = options.ignoredPaths, ignoredPaths = _f === void 0 ? [] : _f, _g = options.warnAfter, warnAfter = _g === void 0 ? 32 : _g, _h = options.ignoreState, ignoreState = _h === void 0 ? false : _h, _j = options.ignoreActions, ignoreActions = _j === void 0 ? false : _j, _k = options.disableCache, disableCache = _k === void 0 ? false : _k;\r\n    var cache = !disableCache && WeakSet ? new WeakSet() : void 0;\r\n    return function (storeAPI) { return function (next) { return function (action) {\r\n        var result = next(action);\r\n        var measureUtils = getTimeMeasureUtils(warnAfter, \"SerializableStateInvariantMiddleware\");\r\n        if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {\r\n            measureUtils.measureTime(function () {\r\n                var foundActionNonSerializableValue = findNonSerializableValue(action, \"\", isSerializable, getEntries, ignoredActionPaths, cache);\r\n                if (foundActionNonSerializableValue) {\r\n                    var keyPath = foundActionNonSerializableValue.keyPath, value = foundActionNonSerializableValue.value;\r\n                    console.error(\"A non-serializable value was detected in an action, in the path: `\" + keyPath + \"`. Value:\", value, \"\\nTake a look at the logic that dispatched this action: \", action, \"\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)\", \"\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)\");\r\n                }\r\n            });\r\n        }\r\n        if (!ignoreState) {\r\n            measureUtils.measureTime(function () {\r\n                var state = storeAPI.getState();\r\n                var foundStateNonSerializableValue = findNonSerializableValue(state, \"\", isSerializable, getEntries, ignoredPaths, cache);\r\n                if (foundStateNonSerializableValue) {\r\n                    var keyPath = foundStateNonSerializableValue.keyPath, value = foundStateNonSerializableValue.value;\r\n                    console.error(\"A non-serializable value was detected in the state, in the path: `\" + keyPath + \"`. Value:\", value, \"\\nTake a look at the reducer(s) handling this action type: \" + action.type + \".\\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)\");\r\n                }\r\n            });\r\n            measureUtils.warnIfExceeded();\r\n        }\r\n        return result;\r\n    }; }; };\r\n}\r\n// src/getDefaultMiddleware.ts\r\nfunction isBoolean(x) {\r\n    return typeof x === \"boolean\";\r\n}\r\nfunction curryGetDefaultMiddleware() {\r\n    return function curriedGetDefaultMiddleware(options) {\r\n        return getDefaultMiddleware(options);\r\n    };\r\n}\r\nfunction getDefaultMiddleware(options) {\r\n    if (options === void 0) { options = {}; }\r\n    var _c = options.thunk, thunk = _c === void 0 ? true : _c, _d = options.immutableCheck, immutableCheck = _d === void 0 ? true : _d, _e = options.serializableCheck, serializableCheck = _e === void 0 ? true : _e, _f = options.actionCreatorCheck, actionCreatorCheck = _f === void 0 ? true : _f;\r\n    var middlewareArray = new MiddlewareArray();\r\n    if (thunk) {\r\n        if (isBoolean(thunk)) {\r\n            middlewareArray.push(thunkMiddleware);\r\n        }\r\n        else {\r\n            middlewareArray.push(thunkMiddleware.withExtraArgument(thunk.extraArgument));\r\n        }\r\n    }\r\n    if (process.env.NODE_ENV !== \"production\") {\r\n        if (immutableCheck) {\r\n            var immutableOptions = {};\r\n            if (!isBoolean(immutableCheck)) {\r\n                immutableOptions = immutableCheck;\r\n            }\r\n            middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\r\n        }\r\n        if (serializableCheck) {\r\n            var serializableOptions = {};\r\n            if (!isBoolean(serializableCheck)) {\r\n                serializableOptions = serializableCheck;\r\n            }\r\n            middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\r\n        }\r\n        if (actionCreatorCheck) {\r\n            var actionCreatorOptions = {};\r\n            if (!isBoolean(actionCreatorCheck)) {\r\n                actionCreatorOptions = actionCreatorCheck;\r\n            }\r\n            middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\r\n        }\r\n    }\r\n    return middlewareArray;\r\n}\r\n// src/configureStore.ts\r\nvar IS_PRODUCTION = process.env.NODE_ENV === \"production\";\r\nfunction configureStore(options) {\r\n    var curriedGetDefaultMiddleware = curryGetDefaultMiddleware();\r\n    var _c = options || {}, _d = _c.reducer, reducer = _d === void 0 ? void 0 : _d, _e = _c.middleware, middleware = _e === void 0 ? curriedGetDefaultMiddleware() : _e, _f = _c.devTools, devTools = _f === void 0 ? true : _f, _g = _c.preloadedState, preloadedState = _g === void 0 ? void 0 : _g, _h = _c.enhancers, enhancers = _h === void 0 ? void 0 : _h;\r\n    var rootReducer;\r\n    if (typeof reducer === \"function\") {\r\n        rootReducer = reducer;\r\n    }\r\n    else if (isPlainObject(reducer)) {\r\n        rootReducer = combineReducers(reducer);\r\n    }\r\n    else {\r\n        throw new Error('\"reducer\" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\r\n    }\r\n    var finalMiddleware = middleware;\r\n    if (typeof finalMiddleware === \"function\") {\r\n        finalMiddleware = finalMiddleware(curriedGetDefaultMiddleware);\r\n        if (!IS_PRODUCTION && !Array.isArray(finalMiddleware)) {\r\n            throw new Error(\"when using a middleware builder function, an array of middleware must be returned\");\r\n        }\r\n    }\r\n    if (!IS_PRODUCTION && finalMiddleware.some(function (item) { return typeof item !== \"function\"; })) {\r\n        throw new Error(\"each middleware provided to configureStore must be a function\");\r\n    }\r\n    var middlewareEnhancer = applyMiddleware.apply(void 0, finalMiddleware);\r\n    var finalCompose = compose2;\r\n    if (devTools) {\r\n        finalCompose = composeWithDevTools(__spreadValues({\r\n            trace: !IS_PRODUCTION\r\n        }, typeof devTools === \"object\" && devTools));\r\n    }\r\n    var defaultEnhancers = new EnhancerArray(middlewareEnhancer);\r\n    var storeEnhancers = defaultEnhancers;\r\n    if (Array.isArray(enhancers)) {\r\n        storeEnhancers = __spreadArray([middlewareEnhancer], enhancers);\r\n    }\r\n    else if (typeof enhancers === \"function\") {\r\n        storeEnhancers = enhancers(defaultEnhancers);\r\n    }\r\n    var composedEnhancer = finalCompose.apply(void 0, storeEnhancers);\r\n    return createStore(rootReducer, preloadedState, composedEnhancer);\r\n}\r\n// src/createReducer.ts\r\nimport createNextState2, { isDraft as isDraft2, isDraftable as isDraftable2 } from \"immer\";\r\n// src/mapBuilders.ts\r\nfunction executeReducerBuilderCallback(builderCallback) {\r\n    var actionsMap = {};\r\n    var actionMatchers = [];\r\n    var defaultCaseReducer;\r\n    var builder = {\r\n        addCase: function (typeOrActionCreator, reducer) {\r\n            if (process.env.NODE_ENV !== \"production\") {\r\n                if (actionMatchers.length > 0) {\r\n                    throw new Error(\"`builder.addCase` should only be called before calling `builder.addMatcher`\");\r\n                }\r\n                if (defaultCaseReducer) {\r\n                    throw new Error(\"`builder.addCase` should only be called before calling `builder.addDefaultCase`\");\r\n                }\r\n            }\r\n            var type = typeof typeOrActionCreator === \"string\" ? typeOrActionCreator : typeOrActionCreator.type;\r\n            if (!type) {\r\n                throw new Error(\"`builder.addCase` cannot be called with an empty action type\");\r\n            }\r\n            if (type in actionsMap) {\r\n                throw new Error(\"`builder.addCase` cannot be called with two reducers for the same action type\");\r\n            }\r\n            actionsMap[type] = reducer;\r\n            return builder;\r\n        },\r\n        addMatcher: function (matcher, reducer) {\r\n            if (process.env.NODE_ENV !== \"production\") {\r\n                if (defaultCaseReducer) {\r\n                    throw new Error(\"`builder.addMatcher` should only be called before calling `builder.addDefaultCase`\");\r\n                }\r\n            }\r\n            actionMatchers.push({ matcher: matcher, reducer: reducer });\r\n            return builder;\r\n        },\r\n        addDefaultCase: function (reducer) {\r\n            if (process.env.NODE_ENV !== \"production\") {\r\n                if (defaultCaseReducer) {\r\n                    throw new Error(\"`builder.addDefaultCase` can only be called once\");\r\n                }\r\n            }\r\n            defaultCaseReducer = reducer;\r\n            return builder;\r\n        }\r\n    };\r\n    builderCallback(builder);\r\n    return [actionsMap, actionMatchers, defaultCaseReducer];\r\n}\r\n// src/createReducer.ts\r\nfunction isStateFunction(x) {\r\n    return typeof x === \"function\";\r\n}\r\nvar hasWarnedAboutObjectNotation = false;\r\nfunction createReducer(initialState, mapOrBuilderCallback, actionMatchers, defaultCaseReducer) {\r\n    if (actionMatchers === void 0) { actionMatchers = []; }\r\n    if (process.env.NODE_ENV !== \"production\") {\r\n        if (typeof mapOrBuilderCallback === \"object\") {\r\n            if (!hasWarnedAboutObjectNotation) {\r\n                hasWarnedAboutObjectNotation = true;\r\n                console.warn(\"The object notation for `createReducer` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\r\n            }\r\n        }\r\n    }\r\n    var _c = typeof mapOrBuilderCallback === \"function\" ? executeReducerBuilderCallback(mapOrBuilderCallback) : [mapOrBuilderCallback, actionMatchers, defaultCaseReducer], actionsMap = _c[0], finalActionMatchers = _c[1], finalDefaultCaseReducer = _c[2];\r\n    var getInitialState;\r\n    if (isStateFunction(initialState)) {\r\n        getInitialState = function () { return freezeDraftable(initialState()); };\r\n    }\r\n    else {\r\n        var frozenInitialState_1 = freezeDraftable(initialState);\r\n        getInitialState = function () { return frozenInitialState_1; };\r\n    }\r\n    function reducer(state, action) {\r\n        if (state === void 0) { state = getInitialState(); }\r\n        var caseReducers = __spreadArray([\r\n            actionsMap[action.type]\r\n        ], finalActionMatchers.filter(function (_c) {\r\n            var matcher = _c.matcher;\r\n            return matcher(action);\r\n        }).map(function (_c) {\r\n            var reducer2 = _c.reducer;\r\n            return reducer2;\r\n        }));\r\n        if (caseReducers.filter(function (cr) { return !!cr; }).length === 0) {\r\n            caseReducers = [finalDefaultCaseReducer];\r\n        }\r\n        return caseReducers.reduce(function (previousState, caseReducer) {\r\n            if (caseReducer) {\r\n                if (isDraft2(previousState)) {\r\n                    var draft = previousState;\r\n                    var result = caseReducer(draft, action);\r\n                    if (result === void 0) {\r\n                        return previousState;\r\n                    }\r\n                    return result;\r\n                }\r\n                else if (!isDraftable2(previousState)) {\r\n                    var result = caseReducer(previousState, action);\r\n                    if (result === void 0) {\r\n                        if (previousState === null) {\r\n                            return previousState;\r\n                        }\r\n                        throw Error(\"A case reducer on a non-draftable value must not return undefined\");\r\n                    }\r\n                    return result;\r\n                }\r\n                else {\r\n                    return createNextState2(previousState, function (draft) {\r\n                        return caseReducer(draft, action);\r\n                    });\r\n                }\r\n            }\r\n            return previousState;\r\n        }, state);\r\n    }\r\n    reducer.getInitialState = getInitialState;\r\n    return reducer;\r\n}\r\n// src/createSlice.ts\r\nvar hasWarnedAboutObjectNotation2 = false;\r\nfunction getType2(slice, actionKey) {\r\n    return slice + \"/\" + actionKey;\r\n}\r\nfunction createSlice(options) {\r\n    var name = options.name;\r\n    if (!name) {\r\n        throw new Error(\"`name` is a required option for createSlice\");\r\n    }\r\n    if (typeof process !== \"undefined\" && process.env.NODE_ENV === \"development\") {\r\n        if (options.initialState === void 0) {\r\n            console.error(\"You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`\");\r\n        }\r\n    }\r\n    var initialState = typeof options.initialState == \"function\" ? options.initialState : freezeDraftable(options.initialState);\r\n    var reducers = options.reducers || {};\r\n    var reducerNames = Object.keys(reducers);\r\n    var sliceCaseReducersByName = {};\r\n    var sliceCaseReducersByType = {};\r\n    var actionCreators = {};\r\n    reducerNames.forEach(function (reducerName) {\r\n        var maybeReducerWithPrepare = reducers[reducerName];\r\n        var type = getType2(name, reducerName);\r\n        var caseReducer;\r\n        var prepareCallback;\r\n        if (\"reducer\" in maybeReducerWithPrepare) {\r\n            caseReducer = maybeReducerWithPrepare.reducer;\r\n            prepareCallback = maybeReducerWithPrepare.prepare;\r\n        }\r\n        else {\r\n            caseReducer = maybeReducerWithPrepare;\r\n        }\r\n        sliceCaseReducersByName[reducerName] = caseReducer;\r\n        sliceCaseReducersByType[type] = caseReducer;\r\n        actionCreators[reducerName] = prepareCallback ? createAction(type, prepareCallback) : createAction(type);\r\n    });\r\n    function buildReducer() {\r\n        if (process.env.NODE_ENV !== \"production\") {\r\n            if (typeof options.extraReducers === \"object\") {\r\n                if (!hasWarnedAboutObjectNotation2) {\r\n                    hasWarnedAboutObjectNotation2 = true;\r\n                    console.warn(\"The object notation for `createSlice.extraReducers` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\r\n                }\r\n            }\r\n        }\r\n        var _c = typeof options.extraReducers === \"function\" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers], _d = _c[0], extraReducers = _d === void 0 ? {} : _d, _e = _c[1], actionMatchers = _e === void 0 ? [] : _e, _f = _c[2], defaultCaseReducer = _f === void 0 ? void 0 : _f;\r\n        var finalCaseReducers = __spreadValues(__spreadValues({}, extraReducers), sliceCaseReducersByType);\r\n        return createReducer(initialState, function (builder) {\r\n            for (var key in finalCaseReducers) {\r\n                builder.addCase(key, finalCaseReducers[key]);\r\n            }\r\n            for (var _i = 0, actionMatchers_1 = actionMatchers; _i < actionMatchers_1.length; _i++) {\r\n                var m = actionMatchers_1[_i];\r\n                builder.addMatcher(m.matcher, m.reducer);\r\n            }\r\n            if (defaultCaseReducer) {\r\n                builder.addDefaultCase(defaultCaseReducer);\r\n            }\r\n        });\r\n    }\r\n    var _reducer;\r\n    return {\r\n        name: name,\r\n        reducer: function (state, action) {\r\n            if (!_reducer)\r\n                _reducer = buildReducer();\r\n            return _reducer(state, action);\r\n        },\r\n        actions: actionCreators,\r\n        caseReducers: sliceCaseReducersByName,\r\n        getInitialState: function () {\r\n            if (!_reducer)\r\n                _reducer = buildReducer();\r\n            return _reducer.getInitialState();\r\n        }\r\n    };\r\n}\r\n// src/entities/entity_state.ts\r\nfunction getInitialEntityState() {\r\n    return {\r\n        ids: [],\r\n        entities: {}\r\n    };\r\n}\r\nfunction createInitialStateFactory() {\r\n    function getInitialState(additionalState) {\r\n        if (additionalState === void 0) { additionalState = {}; }\r\n        return Object.assign(getInitialEntityState(), additionalState);\r\n    }\r\n    return { getInitialState: getInitialState };\r\n}\r\n// src/entities/state_selectors.ts\r\nfunction createSelectorsFactory() {\r\n    function getSelectors(selectState) {\r\n        var selectIds = function (state) { return state.ids; };\r\n        var selectEntities = function (state) { return state.entities; };\r\n        var selectAll = createDraftSafeSelector(selectIds, selectEntities, function (ids, entities) { return ids.map(function (id) { return entities[id]; }); });\r\n        var selectId = function (_, id) { return id; };\r\n        var selectById = function (entities, id) { return entities[id]; };\r\n        var selectTotal = createDraftSafeSelector(selectIds, function (ids) { return ids.length; });\r\n        if (!selectState) {\r\n            return {\r\n                selectIds: selectIds,\r\n                selectEntities: selectEntities,\r\n                selectAll: selectAll,\r\n                selectTotal: selectTotal,\r\n                selectById: createDraftSafeSelector(selectEntities, selectId, selectById)\r\n            };\r\n        }\r\n        var selectGlobalizedEntities = createDraftSafeSelector(selectState, selectEntities);\r\n        return {\r\n            selectIds: createDraftSafeSelector(selectState, selectIds),\r\n            selectEntities: selectGlobalizedEntities,\r\n            selectAll: createDraftSafeSelector(selectState, selectAll),\r\n            selectTotal: createDraftSafeSelector(selectState, selectTotal),\r\n            selectById: createDraftSafeSelector(selectGlobalizedEntities, selectId, selectById)\r\n        };\r\n    }\r\n    return { getSelectors: getSelectors };\r\n}\r\n// src/entities/state_adapter.ts\r\nimport createNextState3, { isDraft as isDraft3 } from \"immer\";\r\nfunction createSingleArgumentStateOperator(mutator) {\r\n    var operator = createStateOperator(function (_, state) { return mutator(state); });\r\n    return function operation(state) {\r\n        return operator(state, void 0);\r\n    };\r\n}\r\nfunction createStateOperator(mutator) {\r\n    return function operation(state, arg) {\r\n        function isPayloadActionArgument(arg2) {\r\n            return isFSA(arg2);\r\n        }\r\n        var runMutator = function (draft) {\r\n            if (isPayloadActionArgument(arg)) {\r\n                mutator(arg.payload, draft);\r\n            }\r\n            else {\r\n                mutator(arg, draft);\r\n            }\r\n        };\r\n        if (isDraft3(state)) {\r\n            runMutator(state);\r\n            return state;\r\n        }\r\n        else {\r\n            return createNextState3(state, runMutator);\r\n        }\r\n    };\r\n}\r\n// src/entities/utils.ts\r\nfunction selectIdValue(entity, selectId) {\r\n    var key = selectId(entity);\r\n    if (process.env.NODE_ENV !== \"production\" && key === void 0) {\r\n        console.warn(\"The entity passed to the `selectId` implementation returned undefined.\", \"You should probably provide your own `selectId` implementation.\", \"The entity that was passed:\", entity, \"The `selectId` implementation:\", selectId.toString());\r\n    }\r\n    return key;\r\n}\r\nfunction ensureEntitiesArray(entities) {\r\n    if (!Array.isArray(entities)) {\r\n        entities = Object.values(entities);\r\n    }\r\n    return entities;\r\n}\r\nfunction splitAddedUpdatedEntities(newEntities, selectId, state) {\r\n    newEntities = ensureEntitiesArray(newEntities);\r\n    var added = [];\r\n    var updated = [];\r\n    for (var _i = 0, newEntities_1 = newEntities; _i < newEntities_1.length; _i++) {\r\n        var entity = newEntities_1[_i];\r\n        var id = selectIdValue(entity, selectId);\r\n        if (id in state.entities) {\r\n            updated.push({ id: id, changes: entity });\r\n        }\r\n        else {\r\n            added.push(entity);\r\n        }\r\n    }\r\n    return [added, updated];\r\n}\r\n// src/entities/unsorted_state_adapter.ts\r\nfunction createUnsortedStateAdapter(selectId) {\r\n    function addOneMutably(entity, state) {\r\n        var key = selectIdValue(entity, selectId);\r\n        if (key in state.entities) {\r\n            return;\r\n        }\r\n        state.ids.push(key);\r\n        state.entities[key] = entity;\r\n    }\r\n    function addManyMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        for (var _i = 0, newEntities_2 = newEntities; _i < newEntities_2.length; _i++) {\r\n            var entity = newEntities_2[_i];\r\n            addOneMutably(entity, state);\r\n        }\r\n    }\r\n    function setOneMutably(entity, state) {\r\n        var key = selectIdValue(entity, selectId);\r\n        if (!(key in state.entities)) {\r\n            state.ids.push(key);\r\n        }\r\n        state.entities[key] = entity;\r\n    }\r\n    function setManyMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        for (var _i = 0, newEntities_3 = newEntities; _i < newEntities_3.length; _i++) {\r\n            var entity = newEntities_3[_i];\r\n            setOneMutably(entity, state);\r\n        }\r\n    }\r\n    function setAllMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        state.ids = [];\r\n        state.entities = {};\r\n        addManyMutably(newEntities, state);\r\n    }\r\n    function removeOneMutably(key, state) {\r\n        return removeManyMutably([key], state);\r\n    }\r\n    function removeManyMutably(keys, state) {\r\n        var didMutate = false;\r\n        keys.forEach(function (key) {\r\n            if (key in state.entities) {\r\n                delete state.entities[key];\r\n                didMutate = true;\r\n            }\r\n        });\r\n        if (didMutate) {\r\n            state.ids = state.ids.filter(function (id) { return id in state.entities; });\r\n        }\r\n    }\r\n    function removeAllMutably(state) {\r\n        Object.assign(state, {\r\n            ids: [],\r\n            entities: {}\r\n        });\r\n    }\r\n    function takeNewKey(keys, update, state) {\r\n        var original2 = state.entities[update.id];\r\n        var updated = Object.assign({}, original2, update.changes);\r\n        var newKey = selectIdValue(updated, selectId);\r\n        var hasNewKey = newKey !== update.id;\r\n        if (hasNewKey) {\r\n            keys[update.id] = newKey;\r\n            delete state.entities[update.id];\r\n        }\r\n        state.entities[newKey] = updated;\r\n        return hasNewKey;\r\n    }\r\n    function updateOneMutably(update, state) {\r\n        return updateManyMutably([update], state);\r\n    }\r\n    function updateManyMutably(updates, state) {\r\n        var newKeys = {};\r\n        var updatesPerEntity = {};\r\n        updates.forEach(function (update) {\r\n            if (update.id in state.entities) {\r\n                updatesPerEntity[update.id] = {\r\n                    id: update.id,\r\n                    changes: __spreadValues(__spreadValues({}, updatesPerEntity[update.id] ? updatesPerEntity[update.id].changes : null), update.changes)\r\n                };\r\n            }\r\n        });\r\n        updates = Object.values(updatesPerEntity);\r\n        var didMutateEntities = updates.length > 0;\r\n        if (didMutateEntities) {\r\n            var didMutateIds = updates.filter(function (update) { return takeNewKey(newKeys, update, state); }).length > 0;\r\n            if (didMutateIds) {\r\n                state.ids = Object.keys(state.entities);\r\n            }\r\n        }\r\n    }\r\n    function upsertOneMutably(entity, state) {\r\n        return upsertManyMutably([entity], state);\r\n    }\r\n    function upsertManyMutably(newEntities, state) {\r\n        var _c = splitAddedUpdatedEntities(newEntities, selectId, state), added = _c[0], updated = _c[1];\r\n        updateManyMutably(updated, state);\r\n        addManyMutably(added, state);\r\n    }\r\n    return {\r\n        removeAll: createSingleArgumentStateOperator(removeAllMutably),\r\n        addOne: createStateOperator(addOneMutably),\r\n        addMany: createStateOperator(addManyMutably),\r\n        setOne: createStateOperator(setOneMutably),\r\n        setMany: createStateOperator(setManyMutably),\r\n        setAll: createStateOperator(setAllMutably),\r\n        updateOne: createStateOperator(updateOneMutably),\r\n        updateMany: createStateOperator(updateManyMutably),\r\n        upsertOne: createStateOperator(upsertOneMutably),\r\n        upsertMany: createStateOperator(upsertManyMutably),\r\n        removeOne: createStateOperator(removeOneMutably),\r\n        removeMany: createStateOperator(removeManyMutably)\r\n    };\r\n}\r\n// src/entities/sorted_state_adapter.ts\r\nfunction createSortedStateAdapter(selectId, sort) {\r\n    var _c = createUnsortedStateAdapter(selectId), removeOne = _c.removeOne, removeMany = _c.removeMany, removeAll = _c.removeAll;\r\n    function addOneMutably(entity, state) {\r\n        return addManyMutably([entity], state);\r\n    }\r\n    function addManyMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        var models = newEntities.filter(function (model) { return !(selectIdValue(model, selectId) in state.entities); });\r\n        if (models.length !== 0) {\r\n            merge(models, state);\r\n        }\r\n    }\r\n    function setOneMutably(entity, state) {\r\n        return setManyMutably([entity], state);\r\n    }\r\n    function setManyMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        if (newEntities.length !== 0) {\r\n            merge(newEntities, state);\r\n        }\r\n    }\r\n    function setAllMutably(newEntities, state) {\r\n        newEntities = ensureEntitiesArray(newEntities);\r\n        state.entities = {};\r\n        state.ids = [];\r\n        addManyMutably(newEntities, state);\r\n    }\r\n    function updateOneMutably(update, state) {\r\n        return updateManyMutably([update], state);\r\n    }\r\n    function updateManyMutably(updates, state) {\r\n        var appliedUpdates = false;\r\n        for (var _i = 0, updates_1 = updates; _i < updates_1.length; _i++) {\r\n            var update = updates_1[_i];\r\n            var entity = state.entities[update.id];\r\n            if (!entity) {\r\n                continue;\r\n            }\r\n            appliedUpdates = true;\r\n            Object.assign(entity, update.changes);\r\n            var newId = selectId(entity);\r\n            if (update.id !== newId) {\r\n                delete state.entities[update.id];\r\n                state.entities[newId] = entity;\r\n            }\r\n        }\r\n        if (appliedUpdates) {\r\n            resortEntities(state);\r\n        }\r\n    }\r\n    function upsertOneMutably(entity, state) {\r\n        return upsertManyMutably([entity], state);\r\n    }\r\n    function upsertManyMutably(newEntities, state) {\r\n        var _c = splitAddedUpdatedEntities(newEntities, selectId, state), added = _c[0], updated = _c[1];\r\n        updateManyMutably(updated, state);\r\n        addManyMutably(added, state);\r\n    }\r\n    function areArraysEqual(a, b) {\r\n        if (a.length !== b.length) {\r\n            return false;\r\n        }\r\n        for (var i = 0; i < a.length && i < b.length; i++) {\r\n            if (a[i] === b[i]) {\r\n                continue;\r\n            }\r\n            return false;\r\n        }\r\n        return true;\r\n    }\r\n    function merge(models, state) {\r\n        models.forEach(function (model) {\r\n            state.entities[selectId(model)] = model;\r\n        });\r\n        resortEntities(state);\r\n    }\r\n    function resortEntities(state) {\r\n        var allEntities = Object.values(state.entities);\r\n        allEntities.sort(sort);\r\n        var newSortedIds = allEntities.map(selectId);\r\n        var ids = state.ids;\r\n        if (!areArraysEqual(ids, newSortedIds)) {\r\n            state.ids = newSortedIds;\r\n        }\r\n    }\r\n    return {\r\n        removeOne: removeOne,\r\n        removeMany: removeMany,\r\n        removeAll: removeAll,\r\n        addOne: createStateOperator(addOneMutably),\r\n        updateOne: createStateOperator(updateOneMutably),\r\n        upsertOne: createStateOperator(upsertOneMutably),\r\n        setOne: createStateOperator(setOneMutably),\r\n        setMany: createStateOperator(setManyMutably),\r\n        setAll: createStateOperator(setAllMutably),\r\n        addMany: createStateOperator(addManyMutably),\r\n        updateMany: createStateOperator(updateManyMutably),\r\n        upsertMany: createStateOperator(upsertManyMutably)\r\n    };\r\n}\r\n// src/entities/create_adapter.ts\r\nfunction createEntityAdapter(options) {\r\n    if (options === void 0) { options = {}; }\r\n    var _c = __spreadValues({\r\n        sortComparer: false,\r\n        selectId: function (instance) { return instance.id; }\r\n    }, options), selectId = _c.selectId, sortComparer = _c.sortComparer;\r\n    var stateFactory = createInitialStateFactory();\r\n    var selectorsFactory = createSelectorsFactory();\r\n    var stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\r\n    return __spreadValues(__spreadValues(__spreadValues({\r\n        selectId: selectId,\r\n        sortComparer: sortComparer\r\n    }, stateFactory), selectorsFactory), stateAdapter);\r\n}\r\n// src/nanoid.ts\r\nvar urlAlphabet = \"ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW\";\r\nvar nanoid = function (size) {\r\n    if (size === void 0) { size = 21; }\r\n    var id = \"\";\r\n    var i = size;\r\n    while (i--) {\r\n        id += urlAlphabet[Math.random() * 64 | 0];\r\n    }\r\n    return id;\r\n};\r\n// src/createAsyncThunk.ts\r\nvar commonProperties = [\r\n    \"name\",\r\n    \"message\",\r\n    \"stack\",\r\n    \"code\"\r\n];\r\nvar RejectWithValue = /** @class */ (function () {\r\n    function RejectWithValue(payload, meta) {\r\n        this.payload = payload;\r\n        this.meta = meta;\r\n    }\r\n    return RejectWithValue;\r\n}());\r\nvar FulfillWithMeta = /** @class */ (function () {\r\n    function FulfillWithMeta(payload, meta) {\r\n        this.payload = payload;\r\n        this.meta = meta;\r\n    }\r\n    return FulfillWithMeta;\r\n}());\r\nvar miniSerializeError = function (value) {\r\n    if (typeof value === \"object\" && value !== null) {\r\n        var simpleError = {};\r\n        for (var _i = 0, commonProperties_1 = commonProperties; _i < commonProperties_1.length; _i++) {\r\n            var property = commonProperties_1[_i];\r\n            if (typeof value[property] === \"string\") {\r\n                simpleError[property] = value[property];\r\n            }\r\n        }\r\n        return simpleError;\r\n    }\r\n    return { message: String(value) };\r\n};\r\nvar createAsyncThunk = (function () {\r\n    function createAsyncThunk2(typePrefix, payloadCreator, options) {\r\n        var fulfilled = createAction(typePrefix + \"/fulfilled\", function (payload, requestId, arg, meta) { return ({\r\n            payload: payload,\r\n            meta: __spreadProps(__spreadValues({}, meta || {}), {\r\n                arg: arg,\r\n                requestId: requestId,\r\n                requestStatus: \"fulfilled\"\r\n            })\r\n        }); });\r\n        var pending = createAction(typePrefix + \"/pending\", function (requestId, arg, meta) { return ({\r\n            payload: void 0,\r\n            meta: __spreadProps(__spreadValues({}, meta || {}), {\r\n                arg: arg,\r\n                requestId: requestId,\r\n                requestStatus: \"pending\"\r\n            })\r\n        }); });\r\n        var rejected = createAction(typePrefix + \"/rejected\", function (error, requestId, arg, payload, meta) { return ({\r\n            payload: payload,\r\n            error: (options && options.serializeError || miniSerializeError)(error || \"Rejected\"),\r\n            meta: __spreadProps(__spreadValues({}, meta || {}), {\r\n                arg: arg,\r\n                requestId: requestId,\r\n                rejectedWithValue: !!payload,\r\n                requestStatus: \"rejected\",\r\n                aborted: (error == null ? void 0 : error.name) === \"AbortError\",\r\n                condition: (error == null ? void 0 : error.name) === \"ConditionError\"\r\n            })\r\n        }); });\r\n        var displayedWarning = false;\r\n        var AC = typeof AbortController !== \"undefined\" ? AbortController : /** @class */ (function () {\r\n            function class_1() {\r\n                this.signal = {\r\n                    aborted: false,\r\n                    addEventListener: function () {\r\n                    },\r\n                    dispatchEvent: function () {\r\n                        return false;\r\n                    },\r\n                    onabort: function () {\r\n                    },\r\n                    removeEventListener: function () {\r\n                    },\r\n                    reason: void 0,\r\n                    throwIfAborted: function () {\r\n                    }\r\n                };\r\n            }\r\n            class_1.prototype.abort = function () {\r\n                if (process.env.NODE_ENV !== \"production\") {\r\n                    if (!displayedWarning) {\r\n                        displayedWarning = true;\r\n                        console.info(\"This platform does not implement AbortController. \\nIf you want to use the AbortController to react to `abort` events, please consider importing a polyfill like 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'.\");\r\n                    }\r\n                }\r\n            };\r\n            return class_1;\r\n        }());\r\n        function actionCreator(arg) {\r\n            return function (dispatch, getState, extra) {\r\n                var requestId = (options == null ? void 0 : options.idGenerator) ? options.idGenerator(arg) : nanoid();\r\n                var abortController = new AC();\r\n                var abortReason;\r\n                var started = false;\r\n                function abort(reason) {\r\n                    abortReason = reason;\r\n                    abortController.abort();\r\n                }\r\n                var promise2 = function () {\r\n                    return __async(this, null, function () {\r\n                        var _a, _b, finalAction, conditionResult, abortedPromise, err_1, skipDispatch;\r\n                        return __generator(this, function (_c) {\r\n                            switch (_c.label) {\r\n                                case 0:\r\n                                    _c.trys.push([0, 4, , 5]);\r\n                                    conditionResult = (_a = options == null ? void 0 : options.condition) == null ? void 0 : _a.call(options, arg, { getState: getState, extra: extra });\r\n                                    if (!isThenable(conditionResult)) return [3 /*break*/, 2];\r\n                                    return [4 /*yield*/, conditionResult];\r\n                                case 1:\r\n                                    conditionResult = _c.sent();\r\n                                    _c.label = 2;\r\n                                case 2:\r\n                                    if (conditionResult === false || abortController.signal.aborted) {\r\n                                        throw {\r\n                                            name: \"ConditionError\",\r\n                                            message: \"Aborted due to condition callback returning false.\"\r\n                                        };\r\n                                    }\r\n                                    started = true;\r\n                                    abortedPromise = new Promise(function (_, reject) { return abortController.signal.addEventListener(\"abort\", function () { return reject({\r\n                                        name: \"AbortError\",\r\n                                        message: abortReason || \"Aborted\"\r\n                                    }); }); });\r\n                                    dispatch(pending(requestId, arg, (_b = options == null ? void 0 : options.getPendingMeta) == null ? void 0 : _b.call(options, { requestId: requestId, arg: arg }, { getState: getState, extra: extra })));\r\n                                    return [4 /*yield*/, Promise.race([\r\n                                            abortedPromise,\r\n                                            Promise.resolve(payloadCreator(arg, {\r\n                                                dispatch: dispatch,\r\n                                                getState: getState,\r\n                                                extra: extra,\r\n                                                requestId: requestId,\r\n                                                signal: abortController.signal,\r\n                                                abort: abort,\r\n                                                rejectWithValue: function (value, meta) {\r\n                                                    return new RejectWithValue(value, meta);\r\n                                                },\r\n                                                fulfillWithValue: function (value, meta) {\r\n                                                    return new FulfillWithMeta(value, meta);\r\n                                                }\r\n                                            })).then(function (result) {\r\n                                                if (result instanceof RejectWithValue) {\r\n                                                    throw result;\r\n                                                }\r\n                                                if (result instanceof FulfillWithMeta) {\r\n                                                    return fulfilled(result.payload, requestId, arg, result.meta);\r\n                                                }\r\n                                                return fulfilled(result, requestId, arg);\r\n                                            })\r\n                                        ])];\r\n                                case 3:\r\n                                    finalAction = _c.sent();\r\n                                    return [3 /*break*/, 5];\r\n                                case 4:\r\n                                    err_1 = _c.sent();\r\n                                    finalAction = err_1 instanceof RejectWithValue ? rejected(null, requestId, arg, err_1.payload, err_1.meta) : rejected(err_1, requestId, arg);\r\n                                    return [3 /*break*/, 5];\r\n                                case 5:\r\n                                    skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;\r\n                                    if (!skipDispatch) {\r\n                                        dispatch(finalAction);\r\n                                    }\r\n                                    return [2 /*return*/, finalAction];\r\n                            }\r\n                        });\r\n                    });\r\n                }();\r\n                return Object.assign(promise2, {\r\n                    abort: abort,\r\n                    requestId: requestId,\r\n                    arg: arg,\r\n                    unwrap: function () {\r\n                        return promise2.then(unwrapResult);\r\n                    }\r\n                });\r\n            };\r\n        }\r\n        return Object.assign(actionCreator, {\r\n            pending: pending,\r\n            rejected: rejected,\r\n            fulfilled: fulfilled,\r\n            typePrefix: typePrefix\r\n        });\r\n    }\r\n    createAsyncThunk2.withTypes = function () { return createAsyncThunk2; };\r\n    return createAsyncThunk2;\r\n})();\r\nfunction unwrapResult(action) {\r\n    if (action.meta && action.meta.rejectedWithValue) {\r\n        throw action.payload;\r\n    }\r\n    if (action.error) {\r\n        throw action.error;\r\n    }\r\n    return action.payload;\r\n}\r\nfunction isThenable(value) {\r\n    return value !== null && typeof value === \"object\" && typeof value.then === \"function\";\r\n}\r\n// src/matchers.ts\r\nvar matches = function (matcher, action) {\r\n    if (hasMatchFunction(matcher)) {\r\n        return matcher.match(action);\r\n    }\r\n    else {\r\n        return matcher(action);\r\n    }\r\n};\r\nfunction isAnyOf() {\r\n    var matchers = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        matchers[_i] = arguments[_i];\r\n    }\r\n    return function (action) {\r\n        return matchers.some(function (matcher) { return matches(matcher, action); });\r\n    };\r\n}\r\nfunction isAllOf() {\r\n    var matchers = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        matchers[_i] = arguments[_i];\r\n    }\r\n    return function (action) {\r\n        return matchers.every(function (matcher) { return matches(matcher, action); });\r\n    };\r\n}\r\nfunction hasExpectedRequestMetadata(action, validStatus) {\r\n    if (!action || !action.meta)\r\n        return false;\r\n    var hasValidRequestId = typeof action.meta.requestId === \"string\";\r\n    var hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\r\n    return hasValidRequestId && hasValidRequestStatus;\r\n}\r\nfunction isAsyncThunkArray(a) {\r\n    return typeof a[0] === \"function\" && \"pending\" in a[0] && \"fulfilled\" in a[0] && \"rejected\" in a[0];\r\n}\r\nfunction isPending() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) { return hasExpectedRequestMetadata(action, [\"pending\"]); };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isPending()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var matchers = asyncThunks.map(function (asyncThunk) { return asyncThunk.pending; });\r\n        var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\nfunction isRejected() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) { return hasExpectedRequestMetadata(action, [\"rejected\"]); };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isRejected()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var matchers = asyncThunks.map(function (asyncThunk) { return asyncThunk.rejected; });\r\n        var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\nfunction isRejectedWithValue() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    var hasFlag = function (action) {\r\n        return action && action.meta && action.meta.rejectedWithValue;\r\n    };\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) {\r\n            var combinedMatcher = isAllOf(isRejected.apply(void 0, asyncThunks), hasFlag);\r\n            return combinedMatcher(action);\r\n        };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isRejectedWithValue()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var combinedMatcher = isAllOf(isRejected.apply(void 0, asyncThunks), hasFlag);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\nfunction isFulfilled() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) { return hasExpectedRequestMetadata(action, [\"fulfilled\"]); };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isFulfilled()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var matchers = asyncThunks.map(function (asyncThunk) { return asyncThunk.fulfilled; });\r\n        var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\nfunction isAsyncThunkAction() {\r\n    var asyncThunks = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        asyncThunks[_i] = arguments[_i];\r\n    }\r\n    if (asyncThunks.length === 0) {\r\n        return function (action) { return hasExpectedRequestMetadata(action, [\"pending\", \"fulfilled\", \"rejected\"]); };\r\n    }\r\n    if (!isAsyncThunkArray(asyncThunks)) {\r\n        return isAsyncThunkAction()(asyncThunks[0]);\r\n    }\r\n    return function (action) {\r\n        var matchers = [];\r\n        for (var _i = 0, asyncThunks_1 = asyncThunks; _i < asyncThunks_1.length; _i++) {\r\n            var asyncThunk = asyncThunks_1[_i];\r\n            matchers.push(asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled);\r\n        }\r\n        var combinedMatcher = isAnyOf.apply(void 0, matchers);\r\n        return combinedMatcher(action);\r\n    };\r\n}\r\n// src/listenerMiddleware/utils.ts\r\nvar assertFunction = function (func, expected) {\r\n    if (typeof func !== \"function\") {\r\n        throw new TypeError(expected + \" is not a function\");\r\n    }\r\n};\r\nvar noop = function () {\r\n};\r\nvar catchRejection = function (promise2, onError) {\r\n    if (onError === void 0) { onError = noop; }\r\n    promise2.catch(onError);\r\n    return promise2;\r\n};\r\nvar addAbortSignalListener = function (abortSignal, callback) {\r\n    abortSignal.addEventListener(\"abort\", callback, { once: true });\r\n    return function () { return abortSignal.removeEventListener(\"abort\", callback); };\r\n};\r\nvar abortControllerWithReason = function (abortController, reason) {\r\n    var signal = abortController.signal;\r\n    if (signal.aborted) {\r\n        return;\r\n    }\r\n    if (!(\"reason\" in signal)) {\r\n        Object.defineProperty(signal, \"reason\", {\r\n            enumerable: true,\r\n            value: reason,\r\n            configurable: true,\r\n            writable: true\r\n        });\r\n    }\r\n    ;\r\n    abortController.abort(reason);\r\n};\r\n// src/listenerMiddleware/exceptions.ts\r\nvar task = \"task\";\r\nvar listener = \"listener\";\r\nvar completed = \"completed\";\r\nvar cancelled = \"cancelled\";\r\nvar taskCancelled = \"task-\" + cancelled;\r\nvar taskCompleted = \"task-\" + completed;\r\nvar listenerCancelled = listener + \"-\" + cancelled;\r\nvar listenerCompleted = listener + \"-\" + completed;\r\nvar TaskAbortError = /** @class */ (function () {\r\n    function TaskAbortError(code) {\r\n        this.code = code;\r\n        this.name = \"TaskAbortError\";\r\n        this.message = task + \" \" + cancelled + \" (reason: \" + code + \")\";\r\n    }\r\n    return TaskAbortError;\r\n}());\r\n// src/listenerMiddleware/task.ts\r\nvar validateActive = function (signal) {\r\n    if (signal.aborted) {\r\n        throw new TaskAbortError(signal.reason);\r\n    }\r\n};\r\nfunction raceWithSignal(signal, promise2) {\r\n    var cleanup = noop;\r\n    return new Promise(function (resolve, reject) {\r\n        var notifyRejection = function () { return reject(new TaskAbortError(signal.reason)); };\r\n        if (signal.aborted) {\r\n            notifyRejection();\r\n            return;\r\n        }\r\n        cleanup = addAbortSignalListener(signal, notifyRejection);\r\n        promise2.finally(function () { return cleanup(); }).then(resolve, reject);\r\n    }).finally(function () {\r\n        cleanup = noop;\r\n    });\r\n}\r\nvar runTask = function (task2, cleanUp) { return __async(void 0, null, function () {\r\n    var value, error_1;\r\n    return __generator(this, function (_c) {\r\n        switch (_c.label) {\r\n            case 0:\r\n                _c.trys.push([0, 3, 4, 5]);\r\n                return [4 /*yield*/, Promise.resolve()];\r\n            case 1:\r\n                _c.sent();\r\n                return [4 /*yield*/, task2()];\r\n            case 2:\r\n                value = _c.sent();\r\n                return [2 /*return*/, {\r\n                        status: \"ok\",\r\n                        value: value\r\n                    }];\r\n            case 3:\r\n                error_1 = _c.sent();\r\n                return [2 /*return*/, {\r\n                        status: error_1 instanceof TaskAbortError ? \"cancelled\" : \"rejected\",\r\n                        error: error_1\r\n                    }];\r\n            case 4:\r\n                cleanUp == null ? void 0 : cleanUp();\r\n                return [7 /*endfinally*/];\r\n            case 5: return [2 /*return*/];\r\n        }\r\n    });\r\n}); };\r\nvar createPause = function (signal) {\r\n    return function (promise2) {\r\n        return catchRejection(raceWithSignal(signal, promise2).then(function (output) {\r\n            validateActive(signal);\r\n            return output;\r\n        }));\r\n    };\r\n};\r\nvar createDelay = function (signal) {\r\n    var pause = createPause(signal);\r\n    return function (timeoutMs) {\r\n        return pause(new Promise(function (resolve) { return setTimeout(resolve, timeoutMs); }));\r\n    };\r\n};\r\n// src/listenerMiddleware/index.ts\r\nvar assign = Object.assign;\r\nvar INTERNAL_NIL_TOKEN = {};\r\nvar alm = \"listenerMiddleware\";\r\nvar createFork = function (parentAbortSignal, parentBlockingPromises) {\r\n    var linkControllers = function (controller) { return addAbortSignalListener(parentAbortSignal, function () { return abortControllerWithReason(controller, parentAbortSignal.reason); }); };\r\n    return function (taskExecutor, opts) {\r\n        assertFunction(taskExecutor, \"taskExecutor\");\r\n        var childAbortController = new AbortController();\r\n        linkControllers(childAbortController);\r\n        var result = runTask(function () { return __async(void 0, null, function () {\r\n            var result2;\r\n            return __generator(this, function (_c) {\r\n                switch (_c.label) {\r\n                    case 0:\r\n                        validateActive(parentAbortSignal);\r\n                        validateActive(childAbortController.signal);\r\n                        return [4 /*yield*/, taskExecutor({\r\n                                pause: createPause(childAbortController.signal),\r\n                                delay: createDelay(childAbortController.signal),\r\n                                signal: childAbortController.signal\r\n                            })];\r\n                    case 1:\r\n                        result2 = _c.sent();\r\n                        validateActive(childAbortController.signal);\r\n                        return [2 /*return*/, result2];\r\n                }\r\n            });\r\n        }); }, function () { return abortControllerWithReason(childAbortController, taskCompleted); });\r\n        if (opts == null ? void 0 : opts.autoJoin) {\r\n            parentBlockingPromises.push(result);\r\n        }\r\n        return {\r\n            result: createPause(parentAbortSignal)(result),\r\n            cancel: function () {\r\n                abortControllerWithReason(childAbortController, taskCancelled);\r\n            }\r\n        };\r\n    };\r\n};\r\nvar createTakePattern = function (startListening, signal) {\r\n    var take = function (predicate, timeout) { return __async(void 0, null, function () {\r\n        var unsubscribe, tuplePromise, promises, output;\r\n        return __generator(this, function (_c) {\r\n            switch (_c.label) {\r\n                case 0:\r\n                    validateActive(signal);\r\n                    unsubscribe = function () {\r\n                    };\r\n                    tuplePromise = new Promise(function (resolve, reject) {\r\n                        var stopListening = startListening({\r\n                            predicate: predicate,\r\n                            effect: function (action, listenerApi) {\r\n                                listenerApi.unsubscribe();\r\n                                resolve([\r\n                                    action,\r\n                                    listenerApi.getState(),\r\n                                    listenerApi.getOriginalState()\r\n                                ]);\r\n                            }\r\n                        });\r\n                        unsubscribe = function () {\r\n                            stopListening();\r\n                            reject();\r\n                        };\r\n                    });\r\n                    promises = [\r\n                        tuplePromise\r\n                    ];\r\n                    if (timeout != null) {\r\n                        promises.push(new Promise(function (resolve) { return setTimeout(resolve, timeout, null); }));\r\n                    }\r\n                    _c.label = 1;\r\n                case 1:\r\n                    _c.trys.push([1, , 3, 4]);\r\n                    return [4 /*yield*/, raceWithSignal(signal, Promise.race(promises))];\r\n                case 2:\r\n                    output = _c.sent();\r\n                    validateActive(signal);\r\n                    return [2 /*return*/, output];\r\n                case 3:\r\n                    unsubscribe();\r\n                    return [7 /*endfinally*/];\r\n                case 4: return [2 /*return*/];\r\n            }\r\n        });\r\n    }); };\r\n    return function (predicate, timeout) { return catchRejection(take(predicate, timeout)); };\r\n};\r\nvar getListenerEntryPropsFrom = function (options) {\r\n    var type = options.type, actionCreator = options.actionCreator, matcher = options.matcher, predicate = options.predicate, effect = options.effect;\r\n    if (type) {\r\n        predicate = createAction(type).match;\r\n    }\r\n    else if (actionCreator) {\r\n        type = actionCreator.type;\r\n        predicate = actionCreator.match;\r\n    }\r\n    else if (matcher) {\r\n        predicate = matcher;\r\n    }\r\n    else if (predicate) {\r\n    }\r\n    else {\r\n        throw new Error(\"Creating or removing a listener requires one of the known fields for matching an action\");\r\n    }\r\n    assertFunction(effect, \"options.listener\");\r\n    return { predicate: predicate, type: type, effect: effect };\r\n};\r\nvar createListenerEntry = function (options) {\r\n    var _c = getListenerEntryPropsFrom(options), type = _c.type, predicate = _c.predicate, effect = _c.effect;\r\n    var id = nanoid();\r\n    var entry = {\r\n        id: id,\r\n        effect: effect,\r\n        type: type,\r\n        predicate: predicate,\r\n        pending: new Set(),\r\n        unsubscribe: function () {\r\n            throw new Error(\"Unsubscribe not initialized\");\r\n        }\r\n    };\r\n    return entry;\r\n};\r\nvar cancelActiveListeners = function (entry) {\r\n    entry.pending.forEach(function (controller) {\r\n        abortControllerWithReason(controller, listenerCancelled);\r\n    });\r\n};\r\nvar createClearListenerMiddleware = function (listenerMap) {\r\n    return function () {\r\n        listenerMap.forEach(cancelActiveListeners);\r\n        listenerMap.clear();\r\n    };\r\n};\r\nvar safelyNotifyError = function (errorHandler, errorToNotify, errorInfo) {\r\n    try {\r\n        errorHandler(errorToNotify, errorInfo);\r\n    }\r\n    catch (errorHandlerError) {\r\n        setTimeout(function () {\r\n            throw errorHandlerError;\r\n        }, 0);\r\n    }\r\n};\r\nvar addListener = createAction(alm + \"/add\");\r\nvar clearAllListeners = createAction(alm + \"/removeAll\");\r\nvar removeListener = createAction(alm + \"/remove\");\r\nvar defaultErrorHandler = function () {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    console.error.apply(console, __spreadArray([alm + \"/error\"], args));\r\n};\r\nfunction createListenerMiddleware(middlewareOptions) {\r\n    var _this = this;\r\n    if (middlewareOptions === void 0) { middlewareOptions = {}; }\r\n    var listenerMap = new Map();\r\n    var extra = middlewareOptions.extra, _c = middlewareOptions.onError, onError = _c === void 0 ? defaultErrorHandler : _c;\r\n    assertFunction(onError, \"onError\");\r\n    var insertEntry = function (entry) {\r\n        entry.unsubscribe = function () { return listenerMap.delete(entry.id); };\r\n        listenerMap.set(entry.id, entry);\r\n        return function (cancelOptions) {\r\n            entry.unsubscribe();\r\n            if (cancelOptions == null ? void 0 : cancelOptions.cancelActive) {\r\n                cancelActiveListeners(entry);\r\n            }\r\n        };\r\n    };\r\n    var findListenerEntry = function (comparator) {\r\n        for (var _i = 0, _c = Array.from(listenerMap.values()); _i < _c.length; _i++) {\r\n            var entry = _c[_i];\r\n            if (comparator(entry)) {\r\n                return entry;\r\n            }\r\n        }\r\n        return void 0;\r\n    };\r\n    var startListening = function (options) {\r\n        var entry = findListenerEntry(function (existingEntry) { return existingEntry.effect === options.effect; });\r\n        if (!entry) {\r\n            entry = createListenerEntry(options);\r\n        }\r\n        return insertEntry(entry);\r\n    };\r\n    var stopListening = function (options) {\r\n        var _c = getListenerEntryPropsFrom(options), type = _c.type, effect = _c.effect, predicate = _c.predicate;\r\n        var entry = findListenerEntry(function (entry2) {\r\n            var matchPredicateOrType = typeof type === \"string\" ? entry2.type === type : entry2.predicate === predicate;\r\n            return matchPredicateOrType && entry2.effect === effect;\r\n        });\r\n        if (entry) {\r\n            entry.unsubscribe();\r\n            if (options.cancelActive) {\r\n                cancelActiveListeners(entry);\r\n            }\r\n        }\r\n        return !!entry;\r\n    };\r\n    var notifyListener = function (entry, action, api, getOriginalState) { return __async(_this, null, function () {\r\n        var internalTaskController, take, autoJoinPromises, listenerError_1;\r\n        return __generator(this, function (_c) {\r\n            switch (_c.label) {\r\n                case 0:\r\n                    internalTaskController = new AbortController();\r\n                    take = createTakePattern(startListening, internalTaskController.signal);\r\n                    autoJoinPromises = [];\r\n                    _c.label = 1;\r\n                case 1:\r\n                    _c.trys.push([1, 3, 4, 6]);\r\n                    entry.pending.add(internalTaskController);\r\n                    return [4 /*yield*/, Promise.resolve(entry.effect(action, assign({}, api, {\r\n                            getOriginalState: getOriginalState,\r\n                            condition: function (predicate, timeout) { return take(predicate, timeout).then(Boolean); },\r\n                            take: take,\r\n                            delay: createDelay(internalTaskController.signal),\r\n                            pause: createPause(internalTaskController.signal),\r\n                            extra: extra,\r\n                            signal: internalTaskController.signal,\r\n                            fork: createFork(internalTaskController.signal, autoJoinPromises),\r\n                            unsubscribe: entry.unsubscribe,\r\n                            subscribe: function () {\r\n                                listenerMap.set(entry.id, entry);\r\n                            },\r\n                            cancelActiveListeners: function () {\r\n                                entry.pending.forEach(function (controller, _, set) {\r\n                                    if (controller !== internalTaskController) {\r\n                                        abortControllerWithReason(controller, listenerCancelled);\r\n                                        set.delete(controller);\r\n                                    }\r\n                                });\r\n                            }\r\n                        })))];\r\n                case 2:\r\n                    _c.sent();\r\n                    return [3 /*break*/, 6];\r\n                case 3:\r\n                    listenerError_1 = _c.sent();\r\n                    if (!(listenerError_1 instanceof TaskAbortError)) {\r\n                        safelyNotifyError(onError, listenerError_1, {\r\n                            raisedBy: \"effect\"\r\n                        });\r\n                    }\r\n                    return [3 /*break*/, 6];\r\n                case 4: return [4 /*yield*/, Promise.allSettled(autoJoinPromises)];\r\n                case 5:\r\n                    _c.sent();\r\n                    abortControllerWithReason(internalTaskController, listenerCompleted);\r\n                    entry.pending.delete(internalTaskController);\r\n                    return [7 /*endfinally*/];\r\n                case 6: return [2 /*return*/];\r\n            }\r\n        });\r\n    }); };\r\n    var clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\r\n    var middleware = function (api) { return function (next) { return function (action) {\r\n        if (!isAction(action)) {\r\n            return next(action);\r\n        }\r\n        if (addListener.match(action)) {\r\n            return startListening(action.payload);\r\n        }\r\n        if (clearAllListeners.match(action)) {\r\n            clearListenerMiddleware();\r\n            return;\r\n        }\r\n        if (removeListener.match(action)) {\r\n            return stopListening(action.payload);\r\n        }\r\n        var originalState = api.getState();\r\n        var getOriginalState = function () {\r\n            if (originalState === INTERNAL_NIL_TOKEN) {\r\n                throw new Error(alm + \": getOriginalState can only be called synchronously\");\r\n            }\r\n            return originalState;\r\n        };\r\n        var result;\r\n        try {\r\n            result = next(action);\r\n            if (listenerMap.size > 0) {\r\n                var currentState = api.getState();\r\n                var listenerEntries = Array.from(listenerMap.values());\r\n                for (var _i = 0, listenerEntries_1 = listenerEntries; _i < listenerEntries_1.length; _i++) {\r\n                    var entry = listenerEntries_1[_i];\r\n                    var runListener = false;\r\n                    try {\r\n                        runListener = entry.predicate(action, currentState, originalState);\r\n                    }\r\n                    catch (predicateError) {\r\n                        runListener = false;\r\n                        safelyNotifyError(onError, predicateError, {\r\n                            raisedBy: \"predicate\"\r\n                        });\r\n                    }\r\n                    if (!runListener) {\r\n                        continue;\r\n                    }\r\n                    notifyListener(entry, action, api, getOriginalState);\r\n                }\r\n            }\r\n        }\r\n        finally {\r\n            originalState = INTERNAL_NIL_TOKEN;\r\n        }\r\n        return result;\r\n    }; }; };\r\n    return {\r\n        middleware: middleware,\r\n        startListening: startListening,\r\n        stopListening: stopListening,\r\n        clearListeners: clearListenerMiddleware\r\n    };\r\n}\r\n// src/autoBatchEnhancer.ts\r\nvar SHOULD_AUTOBATCH = \"RTK_autoBatch\";\r\nvar prepareAutoBatched = function () { return function (payload) {\r\n    var _c;\r\n    return ({\r\n        payload: payload,\r\n        meta: (_c = {}, _c[SHOULD_AUTOBATCH] = true, _c)\r\n    });\r\n}; };\r\nvar promise;\r\nvar queueMicrotaskShim = typeof queueMicrotask === \"function\" ? queueMicrotask.bind(typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : globalThis) : function (cb) { return (promise || (promise = Promise.resolve())).then(cb).catch(function (err) { return setTimeout(function () {\r\n    throw err;\r\n}, 0); }); };\r\nvar createQueueWithTimer = function (timeout) {\r\n    return function (notify) {\r\n        setTimeout(notify, timeout);\r\n    };\r\n};\r\nvar rAF = typeof window !== \"undefined\" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10);\r\nvar autoBatchEnhancer = function (options) {\r\n    if (options === void 0) { options = { type: \"raf\" }; }\r\n    return function (next) { return function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var store = next.apply(void 0, args);\r\n        var notifying = true;\r\n        var shouldNotifyAtEndOfTick = false;\r\n        var notificationQueued = false;\r\n        var listeners = new Set();\r\n        var queueCallback = options.type === \"tick\" ? queueMicrotaskShim : options.type === \"raf\" ? rAF : options.type === \"callback\" ? options.queueNotification : createQueueWithTimer(options.timeout);\r\n        var notifyListeners = function () {\r\n            notificationQueued = false;\r\n            if (shouldNotifyAtEndOfTick) {\r\n                shouldNotifyAtEndOfTick = false;\r\n                listeners.forEach(function (l) { return l(); });\r\n            }\r\n        };\r\n        return Object.assign({}, store, {\r\n            subscribe: function (listener2) {\r\n                var wrappedListener = function () { return notifying && listener2(); };\r\n                var unsubscribe = store.subscribe(wrappedListener);\r\n                listeners.add(listener2);\r\n                return function () {\r\n                    unsubscribe();\r\n                    listeners.delete(listener2);\r\n                };\r\n            },\r\n            dispatch: function (action) {\r\n                var _a;\r\n                try {\r\n                    notifying = !((_a = action == null ? void 0 : action.meta) == null ? void 0 : _a[SHOULD_AUTOBATCH]);\r\n                    shouldNotifyAtEndOfTick = !notifying;\r\n                    if (shouldNotifyAtEndOfTick) {\r\n                        if (!notificationQueued) {\r\n                            notificationQueued = true;\r\n                            queueCallback(notifyListeners);\r\n                        }\r\n                    }\r\n                    return store.dispatch(action);\r\n                }\r\n                finally {\r\n                    notifying = true;\r\n                }\r\n            }\r\n        });\r\n    }; };\r\n};\r\n// src/index.ts\r\nenableES5();\r\nexport { EnhancerArray, MiddlewareArray, SHOULD_AUTOBATCH, TaskAbortError, addListener, autoBatchEnhancer, clearAllListeners, configureStore, createAction, createActionCreatorInvariantMiddleware, createAsyncThunk, createDraftSafeSelector, createEntityAdapter, createImmutableStateInvariantMiddleware, createListenerMiddleware, default2 as createNextState, createReducer, createSelector2 as createSelector, createSerializableStateInvariantMiddleware, createSlice, current2 as current, findNonSerializableValue, freeze, getDefaultMiddleware, getType, isAction, isActionCreator, isAllOf, isAnyOf, isAsyncThunkAction, isDraft4 as isDraft, isFSA as isFluxStandardAction, isFulfilled, isImmutableDefault, isPending, isPlain, isPlainObject, isRejected, isRejectedWithValue, miniSerializeError, nanoid, original, prepareAutoBatched, removeListener, unwrapResult };\r\n//# sourceMappingURL=redux-toolkit.esm.js.map","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { LayoutType, Margin, Size } from '../util/types';\n\ntype ChartLayoutState = {\n  layoutType: LayoutType;\n  width: number;\n  height: number;\n  margin: Margin;\n  /**\n   * How much is the chart zoomed in.\n   * Used for scaling the mouse coordinates to the chart coordinates.\n   */\n  scale: number;\n};\n\nconst initialState: ChartLayoutState = {\n  layoutType: 'horizontal',\n  width: 0,\n  height: 0,\n  margin: { top: 5, right: 5, bottom: 5, left: 5 },\n  scale: 1,\n};\n\nconst chartLayoutSlice = createSlice({\n  name: 'chartLayout',\n  initialState,\n  reducers: {\n    setLayout(state, action: PayloadAction<LayoutType>) {\n      state.layoutType = action.payload;\n    },\n    setChartSize(state, action: PayloadAction<Size>) {\n      state.width = action.payload.width;\n      state.height = action.payload.height;\n    },\n    setMargin(state, action: PayloadAction<Margin>) {\n      state.margin.top = action.payload.top;\n      state.margin.right = action.payload.right;\n      state.margin.bottom = action.payload.bottom;\n      state.margin.left = action.payload.left;\n    },\n    setScale(state, action: PayloadAction<number>) {\n      state.scale = action.payload;\n    },\n  },\n});\n\nexport const { setMargin, setLayout, setChartSize, setScale } = chartLayoutSlice.actions;\n\nexport const chartLayoutReducer = chartLayoutSlice.reducer;\n","export default function(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export default function(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nfunction stackSeries(key) {\n  const series = [];\n  series.key = key;\n  return series;\n}\n\nexport default function() {\n  var keys = constant([]),\n      order = orderNone,\n      offset = offsetNone,\n      value = stackValue;\n\n  function stack(data) {\n    var sz = Array.from(keys.apply(this, arguments), stackSeries),\n        i, n = sz.length, j = -1,\n        oz;\n\n    for (const d of data) {\n      for (i = 0, ++j; i < n; ++i) {\n        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n      }\n    }\n\n    for (i = 0, oz = array(order(sz)); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n  };\n\n  return stack;\n}\n","import { ReactElement, SVGProps, isValidElement } from 'react';\nimport { Coordinate, RangeObj, PolarViewBoxRequired, ChartOffsetInternal } from './types';\n\nexport const RADIAN = Math.PI / 180;\n\nexport const degreeToRadian = (angle: number) => (angle * Math.PI) / 180;\n\nexport const radianToDegree = (angleInRadian: number) => (angleInRadian * 180) / Math.PI;\n\nexport const polarToCartesian = (cx: number, cy: number, radius: number, angle: number): Coordinate => ({\n  x: cx + Math.cos(-RADIAN * angle) * radius,\n  y: cy + Math.sin(-RADIAN * angle) * radius,\n});\n\nexport const getMaxRadius = (\n  width: number,\n  height: number,\n  offset: ChartOffsetInternal = {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    width: 0,\n    height: 0,\n    brushBottom: 0,\n  },\n) =>\n  Math.min(\n    Math.abs(width - (offset.left || 0) - (offset.right || 0)),\n    Math.abs(height - (offset.top || 0) - (offset.bottom || 0)),\n  ) / 2;\n\nexport const distanceBetweenPoints = (point: Coordinate, anotherPoint: Coordinate) => {\n  const { x: x1, y: y1 } = point;\n  const { x: x2, y: y2 } = anotherPoint;\n\n  return Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);\n};\n\nexport const getAngleOfPoint = ({ x, y }: Coordinate, { cx, cy }: PolarViewBoxRequired) => {\n  const radius = distanceBetweenPoints({ x, y }, { x: cx, y: cy });\n\n  if (radius <= 0) {\n    return { radius, angle: 0 };\n  }\n\n  const cos = (x - cx) / radius;\n  let angleInRadian = Math.acos(cos);\n\n  if (y > cy) {\n    angleInRadian = 2 * Math.PI - angleInRadian;\n  }\n\n  return { radius, angle: radianToDegree(angleInRadian), angleInRadian };\n};\n\nexport const formatAngleOfSector = ({ startAngle, endAngle }: PolarViewBoxRequired) => {\n  const startCnt = Math.floor(startAngle / 360);\n  const endCnt = Math.floor(endAngle / 360);\n  const min = Math.min(startCnt, endCnt);\n\n  return {\n    startAngle: startAngle - min * 360,\n    endAngle: endAngle - min * 360,\n  };\n};\n\nconst reverseFormatAngleOfSector = (angle: number, { startAngle, endAngle }: PolarViewBoxRequired) => {\n  const startCnt = Math.floor(startAngle / 360);\n  const endCnt = Math.floor(endAngle / 360);\n  const min = Math.min(startCnt, endCnt);\n\n  return angle + min * 360;\n};\n\nexport const inRangeOfSector = ({ x, y }: Coordinate, viewBox: PolarViewBoxRequired): RangeObj | null => {\n  const { radius, angle } = getAngleOfPoint({ x, y }, viewBox);\n  const { innerRadius, outerRadius } = viewBox;\n\n  if (radius < innerRadius || radius > outerRadius) {\n    return null;\n  }\n\n  if (radius === 0) {\n    return null;\n  }\n\n  const { startAngle, endAngle } = formatAngleOfSector(viewBox);\n  let formatAngle = angle;\n  let inRange;\n\n  if (startAngle <= endAngle) {\n    while (formatAngle > endAngle) {\n      formatAngle -= 360;\n    }\n    while (formatAngle < startAngle) {\n      formatAngle += 360;\n    }\n    inRange = formatAngle >= startAngle && formatAngle <= endAngle;\n  } else {\n    while (formatAngle > startAngle) {\n      formatAngle -= 360;\n    }\n    while (formatAngle < endAngle) {\n      formatAngle += 360;\n    }\n    inRange = formatAngle >= endAngle && formatAngle <= startAngle;\n  }\n\n  if (inRange) {\n    return { ...viewBox, radius, angle: reverseFormatAngleOfSector(formatAngle, viewBox) };\n  }\n\n  return null;\n};\n\nexport const getTickClassName = (\n  tick?: SVGProps<SVGTextElement> | ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | boolean,\n) =>\n  !isValidElement(tick) && typeof tick !== 'function' && typeof tick !== 'boolean' && tick != null\n    ? tick.className\n    : '';\n","export function getSliced<T>(arr: ReadonlyArray<T>, startIndex: number, endIndex: number): ReadonlyArray<T> {\n  if (!Array.isArray(arr)) {\n    return arr;\n  }\n  if (arr && startIndex + endIndex !== 0) {\n    return arr.slice(startIndex, endIndex + 1);\n  }\n  return arr;\n}\n","import sortBy from 'es-toolkit/compat/sortBy';\nimport get from 'es-toolkit/compat/get';\n\nimport {\n  Series,\n  type SeriesPoint,\n  stack as shapeStack,\n  stackOffsetExpand,\n  stackOffsetNone,\n  stackOffsetSilhouette,\n  stackOffsetWiggle,\n  stackOrderNone,\n} from 'victory-vendor/d3-shape';\n\nimport { findEntryInArray, isNan, isNullish, isNumber, isNumOrStr, mathSign } from './DataUtils';\n\nimport { TooltipEntrySettings, TooltipPayloadEntry } from '../state/tooltipSlice';\nimport {\n  AxisTick,\n  AxisType,\n  BaseAxisProps,\n  ChartCoordinate,\n  ChartOffsetInternal,\n  DataKey,\n  LayoutType,\n  NumberDomain,\n  OffsetHorizontal,\n  OffsetVertical,\n  PolarViewBoxRequired,\n  RangeObj,\n  Size,\n  StackOffsetType,\n  TickItem,\n} from './types';\nimport { ValueType } from '../component/DefaultTooltipContent';\nimport { inRangeOfSector, polarToCartesian } from './PolarUtils';\nimport { LegendSettings } from '../state/legendSlice';\nimport { AxisRange, BaseAxisWithScale } from '../state/selectors/axisSelectors';\nimport { StackGroup } from './stacks/stackTypes';\nimport { getSliced } from './getSliced';\n\nexport function getValueByDataKey<T>(obj: T, dataKey: DataKey<T> | undefined, defaultValue?: any): unknown {\n  if (isNullish(obj) || isNullish(dataKey)) {\n    return defaultValue;\n  }\n\n  if (isNumOrStr(dataKey)) {\n    return get(obj, dataKey, defaultValue);\n  }\n\n  if (typeof dataKey === 'function') {\n    return dataKey(obj);\n  }\n\n  return defaultValue;\n}\n\nexport const calculateActiveTickIndex = (\n  /**\n   * For different layouts, `coordinate` is different:\n   * In horizontal layout, this is expected to be the `x` coordinate\n   * vertical -> y\n   * centric -> angle\n   * radial -> radius\n   */\n  coordinate: number | undefined,\n  ticks: ReadonlyArray<TickItem> | undefined,\n  unsortedTicks: ReadonlyArray<TickItem>,\n  axisType: AxisType | undefined,\n  range: AxisRange | undefined,\n): number => {\n  let index = -1;\n  const len = ticks?.length ?? 0;\n\n  // if there are 1 or fewer ticks or if there is no coordinate then the active tick is at index 0\n  if (len <= 1 || coordinate == null) {\n    return 0;\n  }\n\n  if (axisType === 'angleAxis' && range != null && Math.abs(Math.abs(range[1] - range[0]) - 360) <= 1e-6) {\n    // ticks are distributed in a circle\n    for (let i = 0; i < len; i++) {\n      const before = i > 0 ? unsortedTicks[i - 1].coordinate : unsortedTicks[len - 1].coordinate;\n      const cur = unsortedTicks[i].coordinate;\n      const after = i >= len - 1 ? unsortedTicks[0].coordinate : unsortedTicks[i + 1].coordinate;\n      let sameDirectionCoord;\n\n      if (mathSign(cur - before) !== mathSign(after - cur)) {\n        const diffInterval = [];\n        if (mathSign(after - cur) === mathSign(range[1] - range[0])) {\n          sameDirectionCoord = after;\n\n          const curInRange = cur + range[1] - range[0];\n          diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2);\n          diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2);\n        } else {\n          sameDirectionCoord = before;\n\n          const afterInRange = after + range[1] - range[0];\n          diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2);\n          diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2);\n        }\n        const sameInterval = [\n          Math.min(cur, (sameDirectionCoord + cur) / 2),\n          Math.max(cur, (sameDirectionCoord + cur) / 2),\n        ];\n\n        if (\n          (coordinate > sameInterval[0] && coordinate <= sameInterval[1]) ||\n          (coordinate >= diffInterval[0] && coordinate <= diffInterval[1])\n        ) {\n          ({ index } = unsortedTicks[i]);\n          break;\n        }\n      } else {\n        const minValue = Math.min(before, after);\n        const maxValue = Math.max(before, after);\n\n        if (coordinate > (minValue + cur) / 2 && coordinate <= (maxValue + cur) / 2) {\n          ({ index } = unsortedTicks[i]);\n          break;\n        }\n      }\n    }\n  } else if (ticks) {\n    // ticks are distributed in a single direction\n    for (let i = 0; i < len; i++) {\n      if (\n        (i === 0 && coordinate <= (ticks[i].coordinate + ticks[i + 1].coordinate) / 2) ||\n        (i > 0 &&\n          i < len - 1 &&\n          coordinate > (ticks[i].coordinate + ticks[i - 1].coordinate) / 2 &&\n          coordinate <= (ticks[i].coordinate + ticks[i + 1].coordinate) / 2) ||\n        (i === len - 1 && coordinate > (ticks[i].coordinate + ticks[i - 1].coordinate) / 2)\n      ) {\n        ({ index } = ticks[i]);\n        break;\n      }\n    }\n  }\n\n  return index;\n};\n\nexport type BarPositionPosition = {\n  /**\n   * Offset is returned always from zero position.\n   * So in a way it's \"absolute\".\n   *\n   * NOT inbetween bars, but always from zero.\n   */\n  offset: number;\n  /**\n   * Size of the bar.\n   * If the input data is undefined, this will be 0.\n   * If the input data is NaN then this size too will be NaN.\n   */\n  size: number;\n};\n\nexport const appendOffsetOfLegend = (\n  offset: OffsetVertical & OffsetHorizontal,\n  legendSettings: LegendSettings,\n  legendSize: Size,\n): OffsetVertical & OffsetHorizontal => {\n  if (legendSettings && legendSize) {\n    const { width: boxWidth, height: boxHeight } = legendSize;\n    const { align, verticalAlign, layout } = legendSettings;\n\n    if (\n      (layout === 'vertical' || (layout === 'horizontal' && verticalAlign === 'middle')) &&\n      align !== 'center' &&\n      isNumber(offset[align])\n    ) {\n      return { ...offset, [align]: offset[align] + (boxWidth || 0) };\n    }\n\n    if (\n      (layout === 'horizontal' || (layout === 'vertical' && align === 'center')) &&\n      verticalAlign !== 'middle' &&\n      isNumber(offset[verticalAlign])\n    ) {\n      return { ...offset, [verticalAlign]: offset[verticalAlign] + (boxHeight || 0) };\n    }\n  }\n\n  return offset;\n};\n\nexport const isCategoricalAxis = (layout: LayoutType, axisType: AxisType) =>\n  (layout === 'horizontal' && axisType === 'xAxis') ||\n  (layout === 'vertical' && axisType === 'yAxis') ||\n  (layout === 'centric' && axisType === 'angleAxis') ||\n  (layout === 'radial' && axisType === 'radiusAxis');\n\n/**\n * Calculate the Coordinates of grid\n * @param  {Array} ticks           The ticks in axis\n * @param {Number} minValue        The minimum value of axis\n * @param {Number} maxValue        The maximum value of axis\n * @param {boolean} syncWithTicks  Synchronize grid lines with ticks or not\n * @return {Array}                 Coordinates\n */\nexport const getCoordinatesOfGrid = (\n  ticks: ReadonlyArray<TickItem>,\n  minValue: number,\n  maxValue: number,\n  syncWithTicks: boolean,\n) => {\n  if (syncWithTicks) {\n    return ticks.map(entry => entry.coordinate);\n  }\n\n  let hasMin, hasMax;\n\n  const values = ticks.map(entry => {\n    if (entry.coordinate === minValue) {\n      hasMin = true;\n    }\n    if (entry.coordinate === maxValue) {\n      hasMax = true;\n    }\n\n    return entry.coordinate;\n  });\n\n  if (!hasMin) {\n    values.push(minValue);\n  }\n  if (!hasMax) {\n    values.push(maxValue);\n  }\n\n  return values;\n};\n\n/**\n * A subset of d3-scale that Recharts is using\n */\nexport interface RechartsScale {\n  domain(): ReadonlyArray<unknown>;\n  domain(newDomain: ReadonlyArray<unknown>): this;\n  range(): ReadonlyArray<unknown>;\n  range(newRange: ReadonlyArray<unknown>): this;\n  bandwidth?: () => number;\n  ticks?: (count: number) => any;\n  (args: any): number;\n}\n\nexport type AxisPropsNeededForTicksGenerator = {\n  axisType?: AxisType;\n  categoricalDomain?: ReadonlyArray<unknown>;\n  duplicateDomain?: ReadonlyArray<unknown>;\n  isCategorical?: boolean;\n  niceTicks?: ReadonlyArray<AxisTick>;\n  /**\n   * The range appears to be only used in Angle Axis - needs further investigation\n   */\n  range?: ReadonlyArray<number>;\n  realScaleType?: 'scaleBand' | string;\n  scale: RechartsScale | undefined;\n  tickCount?: number;\n  ticks?: ReadonlyArray<AxisTick>;\n  type?: 'number' | 'category';\n};\n\n/**\n * Get the ticks of an axis\n * @param  {Object}  axis The configuration of an axis\n * @param {Boolean} isGrid Whether or not are the ticks in grid\n * @param {Boolean} isAll Return the ticks of all the points or not\n * @return {Array}  Ticks\n */\nexport const getTicksOfAxis = (\n  axis: null | AxisPropsNeededForTicksGenerator,\n  isGrid?: boolean,\n  isAll?: boolean,\n): ReadonlyArray<TickItem> | null => {\n  if (!axis) {\n    return null;\n  }\n  const {\n    duplicateDomain,\n    type,\n    range,\n    scale,\n    realScaleType,\n    isCategorical,\n    categoricalDomain,\n    tickCount,\n    ticks,\n    niceTicks,\n    axisType,\n  } = axis;\n\n  if (!scale) {\n    return null;\n  }\n\n  const offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;\n  let offset = (isGrid || isAll) && type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;\n\n  offset = axisType === 'angleAxis' && range && range.length >= 2 ? mathSign(range[0] - range[1]) * 2 * offset : offset;\n\n  // The ticks set by user should only affect the ticks adjacent to axis line\n  if (isGrid && (ticks || niceTicks)) {\n    const result = (ticks || niceTicks || []).map((entry: AxisTick, index: number): TickItem => {\n      const scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;\n\n      return {\n        // If the scaleContent is not a number, the coordinate will be NaN.\n        // That could be the case for example with a PointScale and a string as domain.\n        coordinate: scale(scaleContent) + offset,\n        value: entry,\n        offset,\n        index,\n      };\n    });\n\n    return result.filter((row: TickItem) => !isNan(row.coordinate));\n  }\n\n  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not \"auto\"\n  if (isCategorical && categoricalDomain) {\n    return categoricalDomain.map(\n      (entry: any, index: number): TickItem => ({\n        coordinate: scale(entry) + offset,\n        value: entry,\n        index,\n        offset,\n      }),\n    );\n  }\n\n  if (scale.ticks && !isAll && tickCount != null) {\n    return scale\n      .ticks(tickCount)\n      .map(\n        (entry: any, index: number): TickItem => ({ coordinate: scale(entry) + offset, value: entry, offset, index }),\n      );\n  }\n\n  // When axis has duplicated text, serial numbers are used to generate scale\n  return scale.domain().map(\n    (entry: any, index: number): TickItem => ({\n      coordinate: scale(entry) + offset,\n      value: duplicateDomain ? duplicateDomain[entry] : entry,\n      index,\n      offset,\n    }),\n  );\n};\n\nconst EPS = 1e-4;\nexport const checkDomainOfScale = (scale: any) => {\n  const domain = scale.domain();\n\n  if (!domain || domain.length <= 2) {\n    return;\n  }\n\n  const len = domain.length;\n  const range = scale.range();\n  const minValue = Math.min(range[0], range[1]) - EPS;\n  const maxValue = Math.max(range[0], range[1]) + EPS;\n  const first = scale(domain[0]);\n  const last = scale(domain[len - 1]);\n\n  if (first < minValue || first > maxValue || last < minValue || last > maxValue) {\n    scale.domain([domain[0], domain[len - 1]]);\n  }\n};\n\n/**\n * Both value and domain are tuples of two numbers\n * - but the type stays as array of numbers until we have better support in rest of the app\n * @param value input that will be truncated\n * @param domain boundaries\n * @returns tuple of two numbers\n */\nexport const truncateByDomain = (\n  value: SeriesPoint<Record<number, number>>,\n  domain: ReadonlyArray<number>,\n): [number, number] | SeriesPoint<Record<number, number>> => {\n  if (!domain || domain.length !== 2 || !isNumber(domain[0]) || !isNumber(domain[1])) {\n    return value;\n  }\n\n  const minValue = Math.min(domain[0], domain[1]);\n  const maxValue = Math.max(domain[0], domain[1]);\n\n  const result: [number, number] = [value[0], value[1]];\n  if (!isNumber(value[0]) || value[0] < minValue) {\n    result[0] = minValue;\n  }\n\n  if (!isNumber(value[1]) || value[1] > maxValue) {\n    result[1] = maxValue;\n  }\n\n  if (result[0] > maxValue) {\n    result[0] = maxValue;\n  }\n\n  if (result[1] < minValue) {\n    result[1] = minValue;\n  }\n\n  return result;\n};\n\n/**\n * Stacks all positive numbers above zero and all negative numbers below zero.\n *\n * If all values in the series are positive then this behaves the same as 'none' stacker.\n *\n * @param {Array} series from d3-shape Stack\n * @return {Array} series with applied offset\n */\nexport const offsetSign: OffsetAccessor = series => {\n  const n = series.length;\n  if (n <= 0) {\n    return;\n  }\n\n  for (let j = 0, m = series[0].length; j < m; ++j) {\n    let positive = 0;\n    let negative = 0;\n\n    for (let i = 0; i < n; ++i) {\n      const value = isNan(series[i][j][1]) ? series[i][j][0] : series[i][j][1];\n\n      /* eslint-disable prefer-destructuring, no-param-reassign */\n      if (value >= 0) {\n        series[i][j][0] = positive;\n        series[i][j][1] = positive + value;\n        positive = series[i][j][1];\n      } else {\n        series[i][j][0] = negative;\n        series[i][j][1] = negative + value;\n        negative = series[i][j][1];\n      }\n      /* eslint-enable prefer-destructuring, no-param-reassign */\n    }\n  }\n};\n\n/**\n * Replaces all negative values with zero when stacking data.\n *\n * If all values in the series are positive then this behaves the same as 'none' stacker.\n *\n * @param {Array} series from d3-shape Stack\n * @return {Array} series with applied offset\n */\nexport const offsetPositive: OffsetAccessor = series => {\n  const n = series.length;\n  if (n <= 0) {\n    return;\n  }\n\n  for (let j = 0, m = series[0].length; j < m; ++j) {\n    let positive = 0;\n\n    for (let i = 0; i < n; ++i) {\n      const value = isNan(series[i][j][1]) ? series[i][j][0] : series[i][j][1];\n\n      /* eslint-disable prefer-destructuring, no-param-reassign */\n      if (value >= 0) {\n        series[i][j][0] = positive;\n        series[i][j][1] = positive + value;\n        positive = series[i][j][1];\n      } else {\n        series[i][j][0] = 0;\n        series[i][j][1] = 0;\n      }\n      /* eslint-enable prefer-destructuring, no-param-reassign */\n    }\n  }\n};\n\n/**\n * Function type to compute offset for stacked data.\n *\n * d3-shape has something fishy going on with its types.\n * In @definitelytyped/d3-shape, this function (the offset accessor) is typed as Series<> => void.\n * However! When I actually open the storybook I can see that the offset accessor actually receives Array<Series<>>.\n * The same I can see in the source code itself:\n * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042\n * That one unfortunately has no types but we can tell it passes three-dimensional array.\n *\n * Which leads me to believe that definitelytyped is wrong on this one.\n * There's open discussion on this topic without much attention:\n * https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66042\n */\ntype OffsetAccessor = (series: Array<Series<Record<string, unknown>, string>>, order: number[]) => void;\n\nconst STACK_OFFSET_MAP: Record<string, OffsetAccessor> = {\n  sign: offsetSign,\n  // @ts-expect-error definitelytyped types are incorrect\n  expand: stackOffsetExpand,\n  // @ts-expect-error definitelytyped types are incorrect\n  none: stackOffsetNone,\n  // @ts-expect-error definitelytyped types are incorrect\n  silhouette: stackOffsetSilhouette,\n  // @ts-expect-error definitelytyped types are incorrect\n  wiggle: stackOffsetWiggle,\n  positive: offsetPositive,\n};\n\nexport const getStackedData = (\n  data: ReadonlyArray<Record<string, unknown>>,\n  dataKeys: ReadonlyArray<DataKey<any>>,\n  offsetType: StackOffsetType,\n): ReadonlyArray<Series<Record<string, unknown>, DataKey<any>>> => {\n  const offsetAccessor: OffsetAccessor = STACK_OFFSET_MAP[offsetType];\n  const stack = shapeStack<Record<string, unknown>, DataKey<any>>()\n    .keys(dataKeys)\n    .value((d, key) => +getValueByDataKey(d, key, 0))\n    .order(stackOrderNone)\n    // @ts-expect-error definitelytyped types are incorrect\n    .offset(offsetAccessor);\n\n  return stack(data);\n};\n\nexport type StackId = string | number;\n/**\n * Stack IDs in the external props allow numbers; but internally we use it as an object key\n * and object keys are always strings. Also, it would be kinda confusing if stackId=8 and stackId='8' were different stacks\n * so let's just force a string.\n */\nexport type NormalizedStackId = string;\n\nexport function getNormalizedStackId(publicStackId: StackId | undefined): NormalizedStackId | undefined {\n  return publicStackId == null ? undefined : String(publicStackId);\n}\n\nexport function getCateCoordinateOfLine<T extends Record<string, unknown>>({\n  axis,\n  ticks,\n  bandSize,\n  entry,\n  index,\n  dataKey,\n}: {\n  axis: {\n    dataKey?: DataKey<T>;\n    allowDuplicatedCategory?: boolean;\n    type?: BaseAxisProps['type'];\n    scale: (v: number) => number;\n  };\n  ticks: Array<TickItem>;\n  bandSize: number;\n  entry: T;\n  index: number;\n  dataKey?: DataKey<T>;\n}): number | null {\n  if (axis.type === 'category') {\n    // find coordinate of category axis by the value of category\n    // @ts-expect-error why does this use direct object access instead of getValueByDataKey?\n    if (!axis.allowDuplicatedCategory && axis.dataKey && !isNullish(entry[axis.dataKey])) {\n      // @ts-expect-error why does this use direct object access instead of getValueByDataKey?\n      const matchedTick = findEntryInArray(ticks, 'value', entry[axis.dataKey]);\n\n      if (matchedTick) {\n        return matchedTick.coordinate + bandSize / 2;\n      }\n    }\n\n    return ticks[index] ? ticks[index].coordinate + bandSize / 2 : null;\n  }\n\n  const value = getValueByDataKey(entry, !isNullish(dataKey) ? dataKey : axis.dataKey);\n\n  // @ts-expect-error getValueByDataKey does not validate the output type\n  return !isNullish(value) ? axis.scale(value) : null;\n}\n\nexport const getCateCoordinateOfBar = ({\n  axis,\n  ticks,\n  offset,\n  bandSize,\n  entry,\n  index,\n}: {\n  axis: BaseAxisWithScale;\n  ticks: ReadonlyArray<TickItem>;\n  offset: number;\n  bandSize: number;\n  entry: any;\n  index: number;\n}): number | null => {\n  if (axis.type === 'category') {\n    return ticks[index] ? ticks[index].coordinate + offset : null;\n  }\n  const value = getValueByDataKey(entry, axis.dataKey, axis.scale.domain()[index]);\n\n  return !isNullish(value) ? axis.scale(value) - bandSize / 2 + offset : null;\n};\n\nexport const getBaseValueOfBar = ({ numericAxis }: { numericAxis: BaseAxisWithScale }): number | unknown => {\n  const domain = numericAxis.scale.domain();\n\n  if (numericAxis.type === 'number') {\n    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript\n    const minValue = Math.min(domain[0], domain[1]);\n    // @ts-expect-error type number means the domain has numbers in it but this relationship is not known to typescript\n    const maxValue = Math.max(domain[0], domain[1]);\n\n    if (minValue <= 0 && maxValue >= 0) {\n      return 0;\n    }\n    if (maxValue < 0) {\n      return maxValue;\n    }\n\n    return minValue;\n  }\n\n  return domain[0];\n};\n\nconst getDomainOfSingle = (data: ReadonlyArray<ReadonlyArray<unknown>>): number[] => {\n  const flat = data.flat(2).filter(isNumber);\n  return [Math.min(...flat), Math.max(...flat)];\n};\n\nconst makeDomainFinite = (domain: NumberDomain): NumberDomain => {\n  return [domain[0] === Infinity ? 0 : domain[0], domain[1] === -Infinity ? 0 : domain[1]];\n};\n\nexport const getDomainOfStackGroups = (\n  stackGroups: Record<StackId, StackGroup> | undefined,\n  startIndex: number,\n  endIndex: number,\n): NumberDomain | undefined => {\n  if (stackGroups == null) {\n    return undefined;\n  }\n  return makeDomainFinite(\n    Object.keys(stackGroups).reduce(\n      (result, stackId): NumberDomain => {\n        const group = stackGroups[stackId];\n        const { stackedData } = group;\n        const domain = stackedData.reduce(\n          (res: [number, number], entry) => {\n            const sliced = getSliced(entry, startIndex, endIndex);\n            const s = getDomainOfSingle(sliced);\n\n            return [Math.min(res[0], s[0]), Math.max(res[1], s[1])];\n          },\n          [Infinity, -Infinity],\n        );\n\n        return [Math.min(domain[0], result[0]), Math.max(domain[1], result[1])];\n      },\n      [Infinity, -Infinity],\n    ),\n  );\n};\n\nexport const MIN_VALUE_REG = /^dataMin[\\s]*-[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\nexport const MAX_VALUE_REG = /^dataMax[\\s]*\\+[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\n\n/**\n * Calculate the size between two category\n * @param  {Object} axis  The options of axis\n * @param  {Array}  ticks The ticks of axis\n * @param  {Boolean} isBar if items in axis are bars\n * @return {Number} Size\n */\nexport const getBandSizeOfAxis = (\n  axis?: BaseAxisWithScale,\n  ticks?: ReadonlyArray<TickItem>,\n  isBar?: boolean,\n): number | undefined => {\n  if (axis && axis.scale && axis.scale.bandwidth) {\n    const bandWidth = axis.scale.bandwidth();\n\n    if (!isBar || bandWidth > 0) {\n      return bandWidth;\n    }\n  }\n\n  if (axis && ticks && ticks.length >= 2) {\n    const orderedTicks = sortBy(ticks, (o: { coordinate: any }) => o.coordinate);\n    let bandSize = Infinity;\n\n    for (let i = 1, len = orderedTicks.length; i < len; i++) {\n      const cur = orderedTicks[i];\n      const prev = orderedTicks[i - 1];\n\n      bandSize = Math.min((cur.coordinate || 0) - (prev.coordinate || 0), bandSize);\n    }\n\n    return bandSize === Infinity ? 0 : bandSize;\n  }\n\n  return isBar ? undefined : 0;\n};\n\nexport function getTooltipEntry({\n  tooltipEntrySettings,\n  dataKey,\n  payload,\n  value,\n  name,\n}: {\n  tooltipEntrySettings: TooltipEntrySettings;\n  dataKey: DataKey<any> | undefined;\n  payload: any;\n  value: ValueType;\n  name: string | undefined;\n}): TooltipPayloadEntry {\n  return {\n    ...tooltipEntrySettings,\n    dataKey,\n    payload,\n    value,\n    name,\n  };\n}\n\nexport function getTooltipNameProp(\n  nameFromItem: string | number | undefined | unknown,\n  dataKey: DataKey<any> | undefined,\n): string | undefined {\n  if (nameFromItem) {\n    return String(nameFromItem);\n  }\n  if (typeof dataKey === 'string') {\n    return dataKey;\n  }\n  return undefined;\n}\n\nexport function inRange(\n  x: number,\n  y: number,\n  layout: LayoutType,\n  polarViewBox: PolarViewBoxRequired | undefined,\n  offset: ChartOffsetInternal,\n): RangeObj | null {\n  if (layout === 'horizontal' || layout === 'vertical') {\n    const isInRange =\n      x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height;\n\n    return isInRange ? { x, y } : null;\n  }\n\n  if (polarViewBox) {\n    return inRangeOfSector({ x, y }, polarViewBox);\n  }\n\n  return null;\n}\n\nexport const getActiveCoordinate = (\n  layout: LayoutType,\n  tooltipTicks: readonly TickItem[],\n  activeIndex: number,\n  rangeObj: RangeObj,\n): ChartCoordinate => {\n  const entry = tooltipTicks.find(tick => tick && tick.index === activeIndex);\n\n  if (entry) {\n    if (layout === 'horizontal') {\n      return { x: entry.coordinate, y: rangeObj.y };\n    }\n    if (layout === 'vertical') {\n      return { x: rangeObj.x, y: entry.coordinate };\n    }\n    if (layout === 'centric') {\n      const angle = entry.coordinate;\n      const { radius } = rangeObj;\n\n      return {\n        ...rangeObj,\n        ...polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle),\n        angle,\n        radius,\n      };\n    }\n\n    const radius = entry.coordinate;\n    const { angle } = rangeObj;\n\n    return {\n      ...rangeObj,\n      ...polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle),\n      angle,\n      radius,\n    };\n  }\n\n  return { x: 0, y: 0 };\n};\n\nexport const calculateTooltipPos = (rangeObj: RangeObj, layout: LayoutType): number | undefined => {\n  if (layout === 'horizontal') {\n    return rangeObj.x;\n  }\n  if (layout === 'vertical') {\n    return rangeObj.y;\n  }\n  if (layout === 'centric') {\n    return rangeObj.angle;\n  }\n\n  return rangeObj.radius;\n};\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none(series, order);\n}\n","import { RechartsRootState } from '../store';\nimport { Margin } from '../../util/types';\n\nexport const selectChartWidth = (state: RechartsRootState): number => state.layout.width;\n\nexport const selectChartHeight = (state: RechartsRootState): number => state.layout.height;\n\nexport const selectContainerScale: (state: RechartsRootState) => number = state => state.layout.scale;\n\nexport const selectMargin = (state: RechartsRootState): Margin | undefined => state.layout.margin;\n","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport { XAxisSettings, YAxisSettings } from '../cartesianAxisSlice';\n\nexport const selectAllXAxes: (state: RechartsRootState) => ReadonlyArray<XAxisSettings> = createSelector(\n  (state: RechartsRootState) => state.cartesianAxis.xAxis,\n  (xAxisMap): ReadonlyArray<XAxisSettings> => {\n    return Object.values(xAxisMap);\n  },\n);\n\nexport const selectAllYAxes: (state: RechartsRootState) => ReadonlyArray<YAxisSettings> = createSelector(\n  (state: RechartsRootState) => state.cartesianAxis.yAxis,\n  (yAxisMap): ReadonlyArray<YAxisSettings> => {\n    return Object.values(yAxisMap);\n  },\n);\n","export const COLOR_PANEL = [\n  '#1890FF',\n  '#66B5FF',\n  '#41D9C7',\n  '#2FC25B',\n  '#6EDB8F',\n  '#9AE65C',\n  '#FACC14',\n  '#E6965C',\n  '#57AD71',\n  '#223273',\n  '#738AE6',\n  '#7564CC',\n  '#8543E0',\n  '#A877ED',\n  '#5C8EE6',\n  '#13C2C2',\n  '#70E0E0',\n  '#5CA3E6',\n  '#3436C7',\n  '#8082FF',\n  '#DD81E6',\n  '#F04864',\n  '#FA7D92',\n  '#D598D9',\n];\n\n/**\n * We use this attribute to identify which element is the one that the user is touching.\n * The index is the position of the element in the data array.\n * This can be either a number (for array-based charts) or a string (for the charts that have a matrix-shaped data).\n */\nexport const DATA_ITEM_INDEX_ATTRIBUTE_NAME = 'data-recharts-item-index';\n/**\n * We use this attribute to identify which element is the one that the user is touching.\n * DataKey works here as a kind of identifier for the element. It's not a perfect identifier for ~two~ three reasons:\n *\n * 1. There can be two different elements with the same dataKey; we won't know which is it\n * 2. DataKey can be a function, and that serialized will be a `[Function: anonymous]` string\n * which means we will be able to identify that it was a function but can't tell which one.\n * This will lead to some weird bugs. A proper fix would be to either:\n * a) use a unique identifier for each element (passed from props, or generated)\n * b) figure out how to compare the dataKey or graphical item by object reference\n *\n * a) is a fuss because we don't have the unique identifier in props,\n * and b) is possible most of the time except for touchMove events which work differently from mouseEnter/mouseLeave:\n * - while mouseEnter is fired for the element that the mouse is over,\n * touchMove is fired for the element where user has started touching. As the finger moves,\n * we can identify the element that the user is touching by using the elementFromPoint method,\n * but it keeps calling the handler on the element where touchStart was fired.\n *\n * Okay and now I discovered a third reason: the dataKey can be undefined and that's still fine\n * because if dataKey is undefined then graphical elements assume the dataKey of the axes.\n * Which makes it a convenient way of using recharts to render a chart but horrible identifier.\n */\nexport const DATA_ITEM_DATAKEY_ATTRIBUTE_NAME = 'data-recharts-item-data-key';\n\nexport const DEFAULT_Y_AXIS_WIDTH = 60;\n","import { createSelector } from 'reselect';\n\nimport get from 'es-toolkit/compat/get';\nimport { selectLegendSettings, selectLegendSize } from './legendSelectors';\nimport {\n  CartesianViewBoxRequired,\n  ChartOffsetInternal,\n  Margin,\n  OffsetHorizontal,\n  OffsetVertical,\n  Size,\n} from '../../util/types';\nimport { XAxisSettings, YAxisSettings } from '../cartesianAxisSlice';\nimport { LegendSettings } from '../legendSlice';\nimport { appendOffsetOfLegend } from '../../util/ChartUtils';\nimport { selectChartHeight, selectChartWidth, selectMargin } from './containerSelectors';\nimport { selectAllXAxes, selectAllYAxes } from './selectAllAxes';\nimport { DEFAULT_Y_AXIS_WIDTH } from '../../util/Constants';\nimport { RechartsRootState } from '../store';\n\nexport const selectBrushHeight = (state: RechartsRootState) => state.brush.height;\n\n/**\n * For internal use only.\n *\n * @param root state\n * @return ChartOffsetInternal\n */\nexport const selectChartOffsetInternal: (state: RechartsRootState) => ChartOffsetInternal = createSelector(\n  [\n    selectChartWidth,\n    selectChartHeight,\n    selectMargin,\n    selectBrushHeight,\n    selectAllXAxes,\n    selectAllYAxes,\n    selectLegendSettings,\n    selectLegendSize,\n  ],\n  (\n    chartWidth: number,\n    chartHeight: number,\n    margin: Margin,\n    brushHeight: number,\n    xAxes: XAxisSettings[],\n    yAxes: YAxisSettings[],\n    legendSettings: LegendSettings,\n    legendSize: Size,\n  ): ChartOffsetInternal => {\n    const offsetH: OffsetHorizontal = yAxes.reduce(\n      (result: OffsetHorizontal, entry: YAxisSettings): OffsetHorizontal => {\n        const { orientation } = entry;\n\n        if (!entry.mirror && !entry.hide) {\n          const width = typeof entry.width === 'number' ? entry.width : DEFAULT_Y_AXIS_WIDTH;\n          return { ...result, [orientation]: result[orientation] + width };\n        }\n\n        return result;\n      },\n      { left: margin.left || 0, right: margin.right || 0 },\n    );\n\n    const offsetV: OffsetVertical = xAxes.reduce(\n      (result: OffsetVertical, entry: XAxisSettings): OffsetVertical => {\n        const { orientation } = entry;\n\n        if (!entry.mirror && !entry.hide) {\n          return { ...result, [orientation]: get(result, `${orientation}`) + entry.height };\n        }\n\n        return result;\n      },\n      { top: margin.top || 0, bottom: margin.bottom || 0 },\n    );\n\n    let offset = { ...offsetV, ...offsetH };\n\n    const brushBottom = offset.bottom;\n\n    offset.bottom += brushHeight;\n\n    offset = appendOffsetOfLegend(offset, legendSettings, legendSize);\n\n    const offsetWidth = chartWidth - offset.left - offset.right;\n    const offsetHeight = chartHeight - offset.top - offset.bottom;\n\n    return {\n      brushBottom,\n      ...offset,\n      // never return negative values for height and width\n      width: Math.max(offsetWidth, 0),\n      height: Math.max(offsetHeight, 0),\n    };\n  },\n);\n\nexport const selectChartViewBox = createSelector(\n  selectChartOffsetInternal,\n  (offset: ChartOffsetInternal): CartesianViewBoxRequired => ({\n    x: offset.left,\n    y: offset.top,\n    width: offset.width,\n    height: offset.height,\n  }),\n);\n\nexport const selectAxisViewBox = createSelector(\n  selectChartWidth,\n  selectChartHeight,\n  (width: number, height: number): CartesianViewBoxRequired => ({\n    x: 0,\n    y: 0,\n    width,\n    height,\n  }),\n);\n","import * as React from 'react';\nimport { createContext, ReactNode, useContext } from 'react';\n\nconst PanoramaContext = createContext<boolean | null>(null);\n\nexport const useIsPanorama = (): boolean => useContext(PanoramaContext) != null;\n\nexport const PanoramaContextProvider = ({ children }: { children: ReactNode }) => (\n  <PanoramaContext.Provider value>{children}</PanoramaContext.Provider>\n);\n","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport { selectMargin } from './containerSelectors';\nimport { isNumber } from '../../util/DataUtils';\nimport { BrushSettings } from '../brushSlice';\n\nexport const selectBrushSettings = (state: RechartsRootState): BrushSettings => state.brush;\n\nexport type BrushDimensions = {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n};\n\nexport const selectBrushDimensions: (state: RechartsRootState) => BrushDimensions = createSelector(\n  [selectBrushSettings, selectChartOffsetInternal, selectMargin],\n  (brushSettings, offset, margin): BrushDimensions => ({\n    height: brushSettings.height,\n    x: isNumber(brushSettings.x) ? brushSettings.x : offset.left,\n    y: isNumber(brushSettings.y)\n      ? brushSettings.y\n      : offset.top + offset.height + offset.brushBottom - (margin?.bottom || 0),\n    width: isNumber(brushSettings.width) ? brushSettings.width : offset.width,\n  }),\n);\n","import { useEffect } from 'react';\nimport { CartesianViewBoxRequired, ChartOffsetInternal, LayoutType, Margin, Size } from '../util/types';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { RechartsRootState } from '../state/store';\nimport { setChartSize, setMargin } from '../state/layoutSlice';\nimport { selectChartOffsetInternal, selectChartViewBox } from '../state/selectors/selectChartOffsetInternal';\nimport { selectChartHeight, selectChartWidth } from '../state/selectors/containerSelectors';\nimport { useIsPanorama } from './PanoramaContext';\nimport { selectBrushDimensions, selectBrushSettings } from '../state/selectors/brushSelectors';\n\nexport const useViewBox = (): CartesianViewBoxRequired | undefined => {\n  const panorama = useIsPanorama();\n  const rootViewBox = useAppSelector(selectChartViewBox);\n  const brushDimensions = useAppSelector(selectBrushDimensions);\n  const brushPadding = useAppSelector(selectBrushSettings)?.padding;\n  if (!panorama || !brushDimensions || !brushPadding) {\n    return rootViewBox;\n  }\n  return {\n    width: brushDimensions.width - brushPadding.left - brushPadding.right,\n    height: brushDimensions.height - brushPadding.top - brushPadding.bottom,\n    x: brushPadding.left,\n    y: brushPadding.top,\n  };\n};\n\nconst manyComponentsThrowErrorsIfOffsetIsUndefined: ChartOffsetInternal = {\n  top: 0,\n  bottom: 0,\n  left: 0,\n  right: 0,\n  width: 0,\n  height: 0,\n  brushBottom: 0,\n};\n/**\n * For internal use only. If you want this information, `import { useOffset } from 'recharts'` instead.\n *\n * Returns the offset of the chart in pixels.\n *\n * @returns {ChartOffsetInternal} The offset of the chart in pixels, or a default value if not in a chart context.\n */\nexport const useOffsetInternal = (): ChartOffsetInternal => {\n  return useAppSelector(selectChartOffsetInternal) ?? manyComponentsThrowErrorsIfOffsetIsUndefined;\n};\n\n/**\n * Returns the width of the chart in pixels.\n *\n * If you are using chart with hardcoded `width` prop, then the width returned will be the same\n * as the `width` prop on the main chart element.\n *\n * If you are using a chart with a `ResponsiveContainer`, the width will be the size of the chart\n * as the ResponsiveContainer has decided it would be.\n *\n * If the chart has any axes or legend, the `width` will be the size of the chart\n * including the axes and legend. Meaning: adding axes and legend will not change the width.\n *\n * The dimensions do not scale, meaning as user zoom in and out, the width number will not change\n * as the chart gets visually larger or smaller.\n *\n * Returns `undefined` if used outside a chart context.\n *\n * @returns {number | undefined} The width of the chart in pixels, or `undefined` if not in a chart context.\n */\nexport const useChartWidth = (): number | undefined => {\n  return useAppSelector(selectChartWidth);\n};\n\n/**\n * Returns the height of the chart in pixels.\n *\n * If you are using chart with hardcoded `height` props, then the height returned will be the same\n * as the `height` prop on the main chart element.\n *\n * If you are using a chart with a `ResponsiveContainer`, the height will be the size of the chart\n * as the ResponsiveContainer has decided it would be.\n *\n * If the chart has any axes or legend, the `height` will be the size of the chart\n * including the axes and legend. Meaning: adding axes and legend will not change the height.\n *\n * The dimensions do not scale, meaning as user zoom in and out, the height number will not change\n * as the chart gets visually larger or smaller.\n *\n * Returns `undefined` if used outside a chart context.\n *\n * @returns {number | undefined} The height of the chart in pixels, or `undefined` if not in a chart context.\n */\nexport const useChartHeight = (): number | undefined => {\n  return useAppSelector(selectChartHeight);\n};\n\nconst manyComponentsThrowErrorsIfMarginIsUndefined: Margin = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n};\nexport const useMargin = (): Margin => {\n  return useAppSelector(state => state.layout.margin) ?? manyComponentsThrowErrorsIfMarginIsUndefined;\n};\n\nexport const selectChartLayout = (state: RechartsRootState): LayoutType => state.layout.layoutType;\n\nexport const useChartLayout = () => useAppSelector(selectChartLayout);\n\nexport const ReportChartSize = (props: Size): null => {\n  const dispatch = useAppDispatch();\n\n  useEffect(() => {\n    dispatch(setChartSize(props));\n  }, [dispatch, props]);\n\n  return null;\n};\n\nexport const ReportChartMargin = ({ margin }: { margin: Margin }): null => {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(setMargin(margin));\n  }, [dispatch, margin]);\n  return null;\n};\n","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n  // All error codes, starting by 0:\n  function(plugin) {\n    return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n  },\n  function(thing) {\n    return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n  },\n  \"This object has been frozen and should not be mutated\",\n  function(data) {\n    return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n  },\n  \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n  \"Immer forbids circular references\",\n  \"The first or second argument to `produce` must be a function\",\n  \"The third argument to `produce` must be a function or undefined\",\n  \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n  \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n  function(thing) {\n    return `'current' expects a draft, got: ${thing}`;\n  },\n  \"Object.defineProperty() cannot be used on an Immer draft\",\n  \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n  \"Immer only supports deleting array indices\",\n  \"Immer only supports setting array indices and the 'length' property\",\n  function(thing) {\n    return `'original' expects a draft, got: ${thing}`;\n  }\n  // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n  // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n  if (process.env.NODE_ENV !== \"production\") {\n    const e = errors[error];\n    const msg = typeof e === \"function\" ? e.apply(null, args) : e;\n    throw new Error(`[Immer] ${msg}`);\n  }\n  throw new Error(\n    `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n  );\n}\n\n// src/utils/common.ts\nvar getPrototypeOf = Object.getPrototypeOf;\nfunction isDraft(value) {\n  return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n  if (!value)\n    return false;\n  return isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = Object.prototype.constructor.toString();\nfunction isPlainObject(value) {\n  if (!value || typeof value !== \"object\")\n    return false;\n  const proto = getPrototypeOf(value);\n  if (proto === null) {\n    return true;\n  }\n  const Ctor = Object.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n  if (Ctor === Object)\n    return true;\n  return typeof Ctor == \"function\" && Function.toString.call(Ctor) === objectCtorString;\n}\nfunction original(value) {\n  if (!isDraft(value))\n    die(15, value);\n  return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter) {\n  if (getArchtype(obj) === 0 /* Object */) {\n    Reflect.ownKeys(obj).forEach((key) => {\n      iter(key, obj[key], obj);\n    });\n  } else {\n    obj.forEach((entry, index) => iter(index, entry, obj));\n  }\n}\nfunction getArchtype(thing) {\n  const state = thing[DRAFT_STATE];\n  return state ? state.type_ : Array.isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nfunction has(thing, prop) {\n  return getArchtype(thing) === 2 /* Map */ ? thing.has(prop) : Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction get(thing, prop) {\n  return getArchtype(thing) === 2 /* Map */ ? thing.get(prop) : thing[prop];\n}\nfunction set(thing, propOrOldValue, value) {\n  const t = getArchtype(thing);\n  if (t === 2 /* Map */)\n    thing.set(propOrOldValue, value);\n  else if (t === 3 /* Set */) {\n    thing.add(value);\n  } else\n    thing[propOrOldValue] = value;\n}\nfunction is(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\nfunction isMap(target) {\n  return target instanceof Map;\n}\nfunction isSet(target) {\n  return target instanceof Set;\n}\nfunction latest(state) {\n  return state.copy_ || state.base_;\n}\nfunction shallowCopy(base, strict) {\n  if (isMap(base)) {\n    return new Map(base);\n  }\n  if (isSet(base)) {\n    return new Set(base);\n  }\n  if (Array.isArray(base))\n    return Array.prototype.slice.call(base);\n  const isPlain = isPlainObject(base);\n  if (strict === true || strict === \"class_only\" && !isPlain) {\n    const descriptors = Object.getOwnPropertyDescriptors(base);\n    delete descriptors[DRAFT_STATE];\n    let keys = Reflect.ownKeys(descriptors);\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      const desc = descriptors[key];\n      if (desc.writable === false) {\n        desc.writable = true;\n        desc.configurable = true;\n      }\n      if (desc.get || desc.set)\n        descriptors[key] = {\n          configurable: true,\n          writable: true,\n          // could live with !!desc.set as well here...\n          enumerable: desc.enumerable,\n          value: base[key]\n        };\n    }\n    return Object.create(getPrototypeOf(base), descriptors);\n  } else {\n    const proto = getPrototypeOf(base);\n    if (proto !== null && isPlain) {\n      return { ...base };\n    }\n    const obj = Object.create(proto);\n    return Object.assign(obj, base);\n  }\n}\nfunction freeze(obj, deep = false) {\n  if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n    return obj;\n  if (getArchtype(obj) > 1) {\n    obj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections;\n  }\n  Object.freeze(obj);\n  if (deep)\n    Object.entries(obj).forEach(([key, value]) => freeze(value, true));\n  return obj;\n}\nfunction dontMutateFrozenCollections() {\n  die(2);\n}\nfunction isFrozen(obj) {\n  return Object.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n  const plugin = plugins[pluginKey];\n  if (!plugin) {\n    die(0, pluginKey);\n  }\n  return plugin;\n}\nfunction loadPlugin(pluginKey, implementation) {\n  if (!plugins[pluginKey])\n    plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope() {\n  return currentScope;\n}\nfunction createScope(parent_, immer_) {\n  return {\n    drafts_: [],\n    parent_,\n    immer_,\n    // Whenever the modified draft contains a draft from another scope, we\n    // need to prevent auto-freezing so the unowned draft can be finalized.\n    canAutoFreeze_: true,\n    unfinalizedDrafts_: 0\n  };\n}\nfunction usePatchesInScope(scope, patchListener) {\n  if (patchListener) {\n    getPlugin(\"Patches\");\n    scope.patches_ = [];\n    scope.inversePatches_ = [];\n    scope.patchListener_ = patchListener;\n  }\n}\nfunction revokeScope(scope) {\n  leaveScope(scope);\n  scope.drafts_.forEach(revokeDraft);\n  scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n  if (scope === currentScope) {\n    currentScope = scope.parent_;\n  }\n}\nfunction enterScope(immer2) {\n  return currentScope = createScope(currentScope, immer2);\n}\nfunction revokeDraft(draft) {\n  const state = draft[DRAFT_STATE];\n  if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n    state.revoke_();\n  else\n    state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n  scope.unfinalizedDrafts_ = scope.drafts_.length;\n  const baseDraft = scope.drafts_[0];\n  const isReplaced = result !== void 0 && result !== baseDraft;\n  if (isReplaced) {\n    if (baseDraft[DRAFT_STATE].modified_) {\n      revokeScope(scope);\n      die(4);\n    }\n    if (isDraftable(result)) {\n      result = finalize(scope, result);\n      if (!scope.parent_)\n        maybeFreeze(scope, result);\n    }\n    if (scope.patches_) {\n      getPlugin(\"Patches\").generateReplacementPatches_(\n        baseDraft[DRAFT_STATE].base_,\n        result,\n        scope.patches_,\n        scope.inversePatches_\n      );\n    }\n  } else {\n    result = finalize(scope, baseDraft, []);\n  }\n  revokeScope(scope);\n  if (scope.patches_) {\n    scope.patchListener_(scope.patches_, scope.inversePatches_);\n  }\n  return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value, path) {\n  if (isFrozen(value))\n    return value;\n  const state = value[DRAFT_STATE];\n  if (!state) {\n    each(\n      value,\n      (key, childValue) => finalizeProperty(rootScope, state, value, key, childValue, path)\n    );\n    return value;\n  }\n  if (state.scope_ !== rootScope)\n    return value;\n  if (!state.modified_) {\n    maybeFreeze(rootScope, state.base_, true);\n    return state.base_;\n  }\n  if (!state.finalized_) {\n    state.finalized_ = true;\n    state.scope_.unfinalizedDrafts_--;\n    const result = state.copy_;\n    let resultEach = result;\n    let isSet2 = false;\n    if (state.type_ === 3 /* Set */) {\n      resultEach = new Set(result);\n      result.clear();\n      isSet2 = true;\n    }\n    each(\n      resultEach,\n      (key, childValue) => finalizeProperty(rootScope, state, result, key, childValue, path, isSet2)\n    );\n    maybeFreeze(rootScope, result, false);\n    if (path && rootScope.patches_) {\n      getPlugin(\"Patches\").generatePatches_(\n        state,\n        path,\n        rootScope.patches_,\n        rootScope.inversePatches_\n      );\n    }\n  }\n  return state.copy_;\n}\nfunction finalizeProperty(rootScope, parentState, targetObject, prop, childValue, rootPath, targetIsSet) {\n  if (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n    die(5);\n  if (isDraft(childValue)) {\n    const path = rootPath && parentState && parentState.type_ !== 3 /* Set */ && // Set objects are atomic since they have no keys.\n    !has(parentState.assigned_, prop) ? rootPath.concat(prop) : void 0;\n    const res = finalize(rootScope, childValue, path);\n    set(targetObject, prop, res);\n    if (isDraft(res)) {\n      rootScope.canAutoFreeze_ = false;\n    } else\n      return;\n  } else if (targetIsSet) {\n    targetObject.add(childValue);\n  }\n  if (isDraftable(childValue) && !isFrozen(childValue)) {\n    if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n      return;\n    }\n    finalize(rootScope, childValue);\n    if ((!parentState || !parentState.scope_.parent_) && typeof prop !== \"symbol\" && Object.prototype.propertyIsEnumerable.call(targetObject, prop))\n      maybeFreeze(rootScope, childValue);\n  }\n}\nfunction maybeFreeze(scope, value, deep = false) {\n  if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n    freeze(value, deep);\n  }\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n  const isArray = Array.isArray(base);\n  const state = {\n    type_: isArray ? 1 /* Array */ : 0 /* Object */,\n    // Track which produce call this is associated with.\n    scope_: parent ? parent.scope_ : getCurrentScope(),\n    // True for both shallow and deep changes.\n    modified_: false,\n    // Used during finalization.\n    finalized_: false,\n    // Track which properties have been assigned (true) or deleted (false).\n    assigned_: {},\n    // The parent draft state.\n    parent_: parent,\n    // The base state.\n    base_: base,\n    // The base proxy.\n    draft_: null,\n    // set below\n    // The base copy with any updated values.\n    copy_: null,\n    // Called by the `produce` function.\n    revoke_: null,\n    isManual_: false\n  };\n  let target = state;\n  let traps = objectTraps;\n  if (isArray) {\n    target = [state];\n    traps = arrayTraps;\n  }\n  const { revoke, proxy } = Proxy.revocable(target, traps);\n  state.draft_ = proxy;\n  state.revoke_ = revoke;\n  return proxy;\n}\nvar objectTraps = {\n  get(state, prop) {\n    if (prop === DRAFT_STATE)\n      return state;\n    const source = latest(state);\n    if (!has(source, prop)) {\n      return readPropFromProto(state, source, prop);\n    }\n    const value = source[prop];\n    if (state.finalized_ || !isDraftable(value)) {\n      return value;\n    }\n    if (value === peek(state.base_, prop)) {\n      prepareCopy(state);\n      return state.copy_[prop] = createProxy(value, state);\n    }\n    return value;\n  },\n  has(state, prop) {\n    return prop in latest(state);\n  },\n  ownKeys(state) {\n    return Reflect.ownKeys(latest(state));\n  },\n  set(state, prop, value) {\n    const desc = getDescriptorFromProto(latest(state), prop);\n    if (desc?.set) {\n      desc.set.call(state.draft_, value);\n      return true;\n    }\n    if (!state.modified_) {\n      const current2 = peek(latest(state), prop);\n      const currentState = current2?.[DRAFT_STATE];\n      if (currentState && currentState.base_ === value) {\n        state.copy_[prop] = value;\n        state.assigned_[prop] = false;\n        return true;\n      }\n      if (is(value, current2) && (value !== void 0 || has(state.base_, prop)))\n        return true;\n      prepareCopy(state);\n      markChanged(state);\n    }\n    if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n    (value !== void 0 || prop in state.copy_) || // special case: NaN\n    Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n      return true;\n    state.copy_[prop] = value;\n    state.assigned_[prop] = true;\n    return true;\n  },\n  deleteProperty(state, prop) {\n    if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n      state.assigned_[prop] = false;\n      prepareCopy(state);\n      markChanged(state);\n    } else {\n      delete state.assigned_[prop];\n    }\n    if (state.copy_) {\n      delete state.copy_[prop];\n    }\n    return true;\n  },\n  // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n  // the same guarantee in ES5 mode.\n  getOwnPropertyDescriptor(state, prop) {\n    const owner = latest(state);\n    const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n    if (!desc)\n      return desc;\n    return {\n      writable: true,\n      configurable: state.type_ !== 1 /* Array */ || prop !== \"length\",\n      enumerable: desc.enumerable,\n      value: owner[prop]\n    };\n  },\n  defineProperty() {\n    die(11);\n  },\n  getPrototypeOf(state) {\n    return getPrototypeOf(state.base_);\n  },\n  setPrototypeOf() {\n    die(12);\n  }\n};\nvar arrayTraps = {};\neach(objectTraps, (key, fn) => {\n  arrayTraps[key] = function() {\n    arguments[0] = arguments[0][0];\n    return fn.apply(this, arguments);\n  };\n});\narrayTraps.deleteProperty = function(state, prop) {\n  if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n    die(13);\n  return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n  if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n    die(14);\n  return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n  const state = draft[DRAFT_STATE];\n  const source = state ? latest(state) : draft;\n  return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n  const desc = getDescriptorFromProto(source, prop);\n  return desc ? `value` in desc ? desc.value : (\n    // This is a very special case, if the prop is a getter defined by the\n    // prototype, we should invoke it with the draft as context!\n    desc.get?.call(state.draft_)\n  ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n  if (!(prop in source))\n    return void 0;\n  let proto = getPrototypeOf(source);\n  while (proto) {\n    const desc = Object.getOwnPropertyDescriptor(proto, prop);\n    if (desc)\n      return desc;\n    proto = getPrototypeOf(proto);\n  }\n  return void 0;\n}\nfunction markChanged(state) {\n  if (!state.modified_) {\n    state.modified_ = true;\n    if (state.parent_) {\n      markChanged(state.parent_);\n    }\n  }\n}\nfunction prepareCopy(state) {\n  if (!state.copy_) {\n    state.copy_ = shallowCopy(\n      state.base_,\n      state.scope_.immer_.useStrictShallowCopy_\n    );\n  }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n  constructor(config) {\n    this.autoFreeze_ = true;\n    this.useStrictShallowCopy_ = false;\n    /**\n     * The `produce` function takes a value and a \"recipe function\" (whose\n     * return value often depends on the base state). The recipe function is\n     * free to mutate its first argument however it wants. All mutations are\n     * only ever applied to a __copy__ of the base state.\n     *\n     * Pass only a function to create a \"curried producer\" which relieves you\n     * from passing the recipe function every time.\n     *\n     * Only plain objects and arrays are made mutable. All other objects are\n     * considered uncopyable.\n     *\n     * Note: This function is __bound__ to its `Immer` instance.\n     *\n     * @param {any} base - the initial state\n     * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n     * @param {Function} patchListener - optional function that will be called with all the patches produced here\n     * @returns {any} a new state, or the initial state if nothing was modified\n     */\n    this.produce = (base, recipe, patchListener) => {\n      if (typeof base === \"function\" && typeof recipe !== \"function\") {\n        const defaultBase = recipe;\n        recipe = base;\n        const self = this;\n        return function curriedProduce(base2 = defaultBase, ...args) {\n          return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n        };\n      }\n      if (typeof recipe !== \"function\")\n        die(6);\n      if (patchListener !== void 0 && typeof patchListener !== \"function\")\n        die(7);\n      let result;\n      if (isDraftable(base)) {\n        const scope = enterScope(this);\n        const proxy = createProxy(base, void 0);\n        let hasError = true;\n        try {\n          result = recipe(proxy);\n          hasError = false;\n        } finally {\n          if (hasError)\n            revokeScope(scope);\n          else\n            leaveScope(scope);\n        }\n        usePatchesInScope(scope, patchListener);\n        return processResult(result, scope);\n      } else if (!base || typeof base !== \"object\") {\n        result = recipe(base);\n        if (result === void 0)\n          result = base;\n        if (result === NOTHING)\n          result = void 0;\n        if (this.autoFreeze_)\n          freeze(result, true);\n        if (patchListener) {\n          const p = [];\n          const ip = [];\n          getPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip);\n          patchListener(p, ip);\n        }\n        return result;\n      } else\n        die(1, base);\n    };\n    this.produceWithPatches = (base, recipe) => {\n      if (typeof base === \"function\") {\n        return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n      }\n      let patches, inversePatches;\n      const result = this.produce(base, recipe, (p, ip) => {\n        patches = p;\n        inversePatches = ip;\n      });\n      return [result, patches, inversePatches];\n    };\n    if (typeof config?.autoFreeze === \"boolean\")\n      this.setAutoFreeze(config.autoFreeze);\n    if (typeof config?.useStrictShallowCopy === \"boolean\")\n      this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n  }\n  createDraft(base) {\n    if (!isDraftable(base))\n      die(8);\n    if (isDraft(base))\n      base = current(base);\n    const scope = enterScope(this);\n    const proxy = createProxy(base, void 0);\n    proxy[DRAFT_STATE].isManual_ = true;\n    leaveScope(scope);\n    return proxy;\n  }\n  finishDraft(draft, patchListener) {\n    const state = draft && draft[DRAFT_STATE];\n    if (!state || !state.isManual_)\n      die(9);\n    const { scope_: scope } = state;\n    usePatchesInScope(scope, patchListener);\n    return processResult(void 0, scope);\n  }\n  /**\n   * Pass true to automatically freeze all copies created by Immer.\n   *\n   * By default, auto-freezing is enabled.\n   */\n  setAutoFreeze(value) {\n    this.autoFreeze_ = value;\n  }\n  /**\n   * Pass true to enable strict shallow copy.\n   *\n   * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n   */\n  setUseStrictShallowCopy(value) {\n    this.useStrictShallowCopy_ = value;\n  }\n  applyPatches(base, patches) {\n    let i;\n    for (i = patches.length - 1; i >= 0; i--) {\n      const patch = patches[i];\n      if (patch.path.length === 0 && patch.op === \"replace\") {\n        base = patch.value;\n        break;\n      }\n    }\n    if (i > -1) {\n      patches = patches.slice(i + 1);\n    }\n    const applyPatchesImpl = getPlugin(\"Patches\").applyPatches_;\n    if (isDraft(base)) {\n      return applyPatchesImpl(base, patches);\n    }\n    return this.produce(\n      base,\n      (draft) => applyPatchesImpl(draft, patches)\n    );\n  }\n};\nfunction createProxy(value, parent) {\n  const draft = isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value, parent) : isSet(value) ? getPlugin(\"MapSet\").proxySet_(value, parent) : createProxyProxy(value, parent);\n  const scope = parent ? parent.scope_ : getCurrentScope();\n  scope.drafts_.push(draft);\n  return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n  if (!isDraft(value))\n    die(10, value);\n  return currentImpl(value);\n}\nfunction currentImpl(value) {\n  if (!isDraftable(value) || isFrozen(value))\n    return value;\n  const state = value[DRAFT_STATE];\n  let copy;\n  if (state) {\n    if (!state.modified_)\n      return state.base_;\n    state.finalized_ = true;\n    copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n  } else {\n    copy = shallowCopy(value, true);\n  }\n  each(copy, (key, childValue) => {\n    set(copy, key, currentImpl(childValue));\n  });\n  if (state) {\n    state.finalized_ = false;\n  }\n  return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n  const errorOffset = 16;\n  if (process.env.NODE_ENV !== \"production\") {\n    errors.push(\n      'Sets cannot have \"replace\" patches.',\n      function(op) {\n        return \"Unsupported patch operation: \" + op;\n      },\n      function(path) {\n        return \"Cannot apply patch, path doesn't resolve: \" + path;\n      },\n      \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n    );\n  }\n  const REPLACE = \"replace\";\n  const ADD = \"add\";\n  const REMOVE = \"remove\";\n  function generatePatches_(state, basePath, patches, inversePatches) {\n    switch (state.type_) {\n      case 0 /* Object */:\n      case 2 /* Map */:\n        return generatePatchesFromAssigned(\n          state,\n          basePath,\n          patches,\n          inversePatches\n        );\n      case 1 /* Array */:\n        return generateArrayPatches(state, basePath, patches, inversePatches);\n      case 3 /* Set */:\n        return generateSetPatches(\n          state,\n          basePath,\n          patches,\n          inversePatches\n        );\n    }\n  }\n  function generateArrayPatches(state, basePath, patches, inversePatches) {\n    let { base_, assigned_ } = state;\n    let copy_ = state.copy_;\n    if (copy_.length < base_.length) {\n      ;\n      [base_, copy_] = [copy_, base_];\n      [patches, inversePatches] = [inversePatches, patches];\n    }\n    for (let i = 0; i < base_.length; i++) {\n      if (assigned_[i] && copy_[i] !== base_[i]) {\n        const path = basePath.concat([i]);\n        patches.push({\n          op: REPLACE,\n          path,\n          // Need to maybe clone it, as it can in fact be the original value\n          // due to the base/copy inversion at the start of this function\n          value: clonePatchValueIfNeeded(copy_[i])\n        });\n        inversePatches.push({\n          op: REPLACE,\n          path,\n          value: clonePatchValueIfNeeded(base_[i])\n        });\n      }\n    }\n    for (let i = base_.length; i < copy_.length; i++) {\n      const path = basePath.concat([i]);\n      patches.push({\n        op: ADD,\n        path,\n        // Need to maybe clone it, as it can in fact be the original value\n        // due to the base/copy inversion at the start of this function\n        value: clonePatchValueIfNeeded(copy_[i])\n      });\n    }\n    for (let i = copy_.length - 1; base_.length <= i; --i) {\n      const path = basePath.concat([i]);\n      inversePatches.push({\n        op: REMOVE,\n        path\n      });\n    }\n  }\n  function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n    const { base_, copy_ } = state;\n    each(state.assigned_, (key, assignedValue) => {\n      const origValue = get(base_, key);\n      const value = get(copy_, key);\n      const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n      if (origValue === value && op === REPLACE)\n        return;\n      const path = basePath.concat(key);\n      patches.push(op === REMOVE ? { op, path } : { op, path, value });\n      inversePatches.push(\n        op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n      );\n    });\n  }\n  function generateSetPatches(state, basePath, patches, inversePatches) {\n    let { base_, copy_ } = state;\n    let i = 0;\n    base_.forEach((value) => {\n      if (!copy_.has(value)) {\n        const path = basePath.concat([i]);\n        patches.push({\n          op: REMOVE,\n          path,\n          value\n        });\n        inversePatches.unshift({\n          op: ADD,\n          path,\n          value\n        });\n      }\n      i++;\n    });\n    i = 0;\n    copy_.forEach((value) => {\n      if (!base_.has(value)) {\n        const path = basePath.concat([i]);\n        patches.push({\n          op: ADD,\n          path,\n          value\n        });\n        inversePatches.unshift({\n          op: REMOVE,\n          path,\n          value\n        });\n      }\n      i++;\n    });\n  }\n  function generateReplacementPatches_(baseValue, replacement, patches, inversePatches) {\n    patches.push({\n      op: REPLACE,\n      path: [],\n      value: replacement === NOTHING ? void 0 : replacement\n    });\n    inversePatches.push({\n      op: REPLACE,\n      path: [],\n      value: baseValue\n    });\n  }\n  function applyPatches_(draft, patches) {\n    patches.forEach((patch) => {\n      const { path, op } = patch;\n      let base = draft;\n      for (let i = 0; i < path.length - 1; i++) {\n        const parentType = getArchtype(base);\n        let p = path[i];\n        if (typeof p !== \"string\" && typeof p !== \"number\") {\n          p = \"\" + p;\n        }\n        if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === \"constructor\"))\n          die(errorOffset + 3);\n        if (typeof base === \"function\" && p === \"prototype\")\n          die(errorOffset + 3);\n        base = get(base, p);\n        if (typeof base !== \"object\")\n          die(errorOffset + 2, path.join(\"/\"));\n      }\n      const type = getArchtype(base);\n      const value = deepClonePatchValue(patch.value);\n      const key = path[path.length - 1];\n      switch (op) {\n        case REPLACE:\n          switch (type) {\n            case 2 /* Map */:\n              return base.set(key, value);\n            case 3 /* Set */:\n              die(errorOffset);\n            default:\n              return base[key] = value;\n          }\n        case ADD:\n          switch (type) {\n            case 1 /* Array */:\n              return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n            case 2 /* Map */:\n              return base.set(key, value);\n            case 3 /* Set */:\n              return base.add(value);\n            default:\n              return base[key] = value;\n          }\n        case REMOVE:\n          switch (type) {\n            case 1 /* Array */:\n              return base.splice(key, 1);\n            case 2 /* Map */:\n              return base.delete(key);\n            case 3 /* Set */:\n              return base.delete(patch.value);\n            default:\n              return delete base[key];\n          }\n        default:\n          die(errorOffset + 1, op);\n      }\n    });\n    return draft;\n  }\n  function deepClonePatchValue(obj) {\n    if (!isDraftable(obj))\n      return obj;\n    if (Array.isArray(obj))\n      return obj.map(deepClonePatchValue);\n    if (isMap(obj))\n      return new Map(\n        Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n      );\n    if (isSet(obj))\n      return new Set(Array.from(obj).map(deepClonePatchValue));\n    const cloned = Object.create(getPrototypeOf(obj));\n    for (const key in obj)\n      cloned[key] = deepClonePatchValue(obj[key]);\n    if (has(obj, DRAFTABLE))\n      cloned[DRAFTABLE] = obj[DRAFTABLE];\n    return cloned;\n  }\n  function clonePatchValueIfNeeded(obj) {\n    if (isDraft(obj)) {\n      return deepClonePatchValue(obj);\n    } else\n      return obj;\n  }\n  loadPlugin(\"Patches\", {\n    applyPatches_,\n    generatePatches_,\n    generateReplacementPatches_\n  });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n  class DraftMap extends Map {\n    constructor(target, parent) {\n      super();\n      this[DRAFT_STATE] = {\n        type_: 2 /* Map */,\n        parent_: parent,\n        scope_: parent ? parent.scope_ : getCurrentScope(),\n        modified_: false,\n        finalized_: false,\n        copy_: void 0,\n        assigned_: void 0,\n        base_: target,\n        draft_: this,\n        isManual_: false,\n        revoked_: false\n      };\n    }\n    get size() {\n      return latest(this[DRAFT_STATE]).size;\n    }\n    has(key) {\n      return latest(this[DRAFT_STATE]).has(key);\n    }\n    set(key, value) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (!latest(state).has(key) || latest(state).get(key) !== value) {\n        prepareMapCopy(state);\n        markChanged(state);\n        state.assigned_.set(key, true);\n        state.copy_.set(key, value);\n        state.assigned_.set(key, true);\n      }\n      return this;\n    }\n    delete(key) {\n      if (!this.has(key)) {\n        return false;\n      }\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareMapCopy(state);\n      markChanged(state);\n      if (state.base_.has(key)) {\n        state.assigned_.set(key, false);\n      } else {\n        state.assigned_.delete(key);\n      }\n      state.copy_.delete(key);\n      return true;\n    }\n    clear() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (latest(state).size) {\n        prepareMapCopy(state);\n        markChanged(state);\n        state.assigned_ = /* @__PURE__ */ new Map();\n        each(state.base_, (key) => {\n          state.assigned_.set(key, false);\n        });\n        state.copy_.clear();\n      }\n    }\n    forEach(cb, thisArg) {\n      const state = this[DRAFT_STATE];\n      latest(state).forEach((_value, key, _map) => {\n        cb.call(thisArg, this.get(key), key, this);\n      });\n    }\n    get(key) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      const value = latest(state).get(key);\n      if (state.finalized_ || !isDraftable(value)) {\n        return value;\n      }\n      if (value !== state.base_.get(key)) {\n        return value;\n      }\n      const draft = createProxy(value, state);\n      prepareMapCopy(state);\n      state.copy_.set(key, draft);\n      return draft;\n    }\n    keys() {\n      return latest(this[DRAFT_STATE]).keys();\n    }\n    values() {\n      const iterator = this.keys();\n      return {\n        [Symbol.iterator]: () => this.values(),\n        next: () => {\n          const r = iterator.next();\n          if (r.done)\n            return r;\n          const value = this.get(r.value);\n          return {\n            done: false,\n            value\n          };\n        }\n      };\n    }\n    entries() {\n      const iterator = this.keys();\n      return {\n        [Symbol.iterator]: () => this.entries(),\n        next: () => {\n          const r = iterator.next();\n          if (r.done)\n            return r;\n          const value = this.get(r.value);\n          return {\n            done: false,\n            value: [r.value, value]\n          };\n        }\n      };\n    }\n    [(DRAFT_STATE, Symbol.iterator)]() {\n      return this.entries();\n    }\n  }\n  function proxyMap_(target, parent) {\n    return new DraftMap(target, parent);\n  }\n  function prepareMapCopy(state) {\n    if (!state.copy_) {\n      state.assigned_ = /* @__PURE__ */ new Map();\n      state.copy_ = new Map(state.base_);\n    }\n  }\n  class DraftSet extends Set {\n    constructor(target, parent) {\n      super();\n      this[DRAFT_STATE] = {\n        type_: 3 /* Set */,\n        parent_: parent,\n        scope_: parent ? parent.scope_ : getCurrentScope(),\n        modified_: false,\n        finalized_: false,\n        copy_: void 0,\n        base_: target,\n        draft_: this,\n        drafts_: /* @__PURE__ */ new Map(),\n        revoked_: false,\n        isManual_: false\n      };\n    }\n    get size() {\n      return latest(this[DRAFT_STATE]).size;\n    }\n    has(value) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (!state.copy_) {\n        return state.base_.has(value);\n      }\n      if (state.copy_.has(value))\n        return true;\n      if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n        return true;\n      return false;\n    }\n    add(value) {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (!this.has(value)) {\n        prepareSetCopy(state);\n        markChanged(state);\n        state.copy_.add(value);\n      }\n      return this;\n    }\n    delete(value) {\n      if (!this.has(value)) {\n        return false;\n      }\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareSetCopy(state);\n      markChanged(state);\n      return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n        /* istanbul ignore next */\n        false\n      ));\n    }\n    clear() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      if (latest(state).size) {\n        prepareSetCopy(state);\n        markChanged(state);\n        state.copy_.clear();\n      }\n    }\n    values() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareSetCopy(state);\n      return state.copy_.values();\n    }\n    entries() {\n      const state = this[DRAFT_STATE];\n      assertUnrevoked(state);\n      prepareSetCopy(state);\n      return state.copy_.entries();\n    }\n    keys() {\n      return this.values();\n    }\n    [(DRAFT_STATE, Symbol.iterator)]() {\n      return this.values();\n    }\n    forEach(cb, thisArg) {\n      const iterator = this.values();\n      let result = iterator.next();\n      while (!result.done) {\n        cb.call(thisArg, result.value, result.value, this);\n        result = iterator.next();\n      }\n    }\n  }\n  function proxySet_(target, parent) {\n    return new DraftSet(target, parent);\n  }\n  function prepareSetCopy(state) {\n    if (!state.copy_) {\n      state.copy_ = /* @__PURE__ */ new Set();\n      state.base_.forEach((value) => {\n        if (isDraftable(value)) {\n          const draft = createProxy(value, state);\n          state.drafts_.set(value, draft);\n          state.copy_.add(draft);\n        } else {\n          state.copy_.add(value);\n        }\n      });\n    }\n  }\n  function assertUnrevoked(state) {\n    if (state.revoked_)\n      die(3, JSON.stringify(latest(state)));\n  }\n  loadPlugin(\"MapSet\", { proxyMap_, proxySet_ });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = immer.produceWithPatches.bind(\n  immer\n);\nvar setAutoFreeze = immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer);\nvar applyPatches = immer.applyPatches.bind(immer);\nvar createDraft = immer.createDraft.bind(immer);\nvar finishDraft = immer.finishDraft.bind(immer);\nfunction castDraft(value) {\n  return value;\n}\nfunction castImmutable(value) {\n  return value;\n}\nexport {\n  Immer2 as Immer,\n  applyPatches,\n  castDraft,\n  castImmutable,\n  createDraft,\n  current,\n  enableMapSet,\n  enablePatches,\n  finishDraft,\n  freeze,\n  DRAFTABLE as immerable,\n  isDraft,\n  isDraftable,\n  NOTHING as nothing,\n  original,\n  produce,\n  produceWithPatches,\n  setAutoFreeze,\n  setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","import { createSlice, current, PayloadAction } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\nimport { LayoutType, Size } from '../util/types';\nimport { HorizontalAlignmentType, LegendPayload, VerticalAlignmentType } from '../component/DefaultLegendContent';\nimport type { LegendItemSorter } from '../component/Legend';\n\nexport type LegendSettings = {\n  layout: LayoutType;\n  align: HorizontalAlignmentType;\n  verticalAlign: VerticalAlignmentType;\n  itemSorter: LegendItemSorter;\n};\n\n/**\n * The properties inside this state update independently of each other and quite often.\n * When selecting, never select the whole state because you are going to get\n * unnecessary re-renders. Select only the properties you need.\n *\n * This is why this state type is not exported - don't use it directly.\n */\ntype LegendState = {\n  settings: LegendSettings;\n  size: Size;\n  /**\n   * This is a 2D array of LegendPayloads. The first dimension is for each graphical item.\n   * Some items may have multiple legend items, so the second dimension is for each legend item.\n   */\n  payload: ReadonlyArray<ReadonlyArray<LegendPayload>>;\n};\n\nconst initialState: LegendState = {\n  settings: {\n    layout: 'horizontal',\n    align: 'center',\n    verticalAlign: 'middle',\n    itemSorter: 'value',\n  },\n  size: {\n    width: 0,\n    height: 0,\n  },\n  payload: [],\n};\n\nconst legendSlice = createSlice({\n  name: 'legend',\n  initialState,\n  reducers: {\n    setLegendSize(state, action: PayloadAction<Size>) {\n      state.size.width = action.payload.width;\n      state.size.height = action.payload.height;\n    },\n    setLegendSettings(state, action: PayloadAction<LegendSettings>) {\n      state.settings.align = action.payload.align;\n      state.settings.layout = action.payload.layout;\n      state.settings.verticalAlign = action.payload.verticalAlign;\n      state.settings.itemSorter = action.payload.itemSorter;\n    },\n    addLegendPayload(state, action: PayloadAction<ReadonlyArray<LegendPayload>>) {\n      state.payload.push(castDraft(action.payload));\n    },\n    removeLegendPayload(state, action: PayloadAction<ReadonlyArray<LegendPayload>>) {\n      const index = current(state).payload.indexOf(castDraft(action.payload));\n      if (index > -1) {\n        state.payload.splice(index, 1);\n      }\n    },\n  },\n});\n\nexport const { setLegendSize, setLegendSettings, addLegendPayload, removeLegendPayload } = legendSlice.actions;\n\nexport const legendReducer = legendSlice.reducer;\n","import * as React from 'react';\nimport { CSSProperties, PureComponent, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useLegendPortal } from '../context/legendPortalContext';\nimport { DefaultLegendContent, LegendPayload, Props as DefaultProps } from './DefaultLegendContent';\n\nimport { isNumber } from '../util/DataUtils';\nimport { LayoutType, Margin, Size } from '../util/types';\nimport { getUniqPayload, UniqueOption } from '../util/payload/getUniqPayload';\nimport { useLegendPayload } from '../context/legendPayloadContext';\nimport { ElementOffset, useElementOffset } from '../util/useElementOffset';\nimport { useChartHeight, useChartWidth, useMargin } from '../context/chartLayoutContext';\nimport { LegendSettings, setLegendSettings, setLegendSize } from '../state/legendSlice';\nimport { useAppDispatch } from '../state/hooks';\n\nfunction defaultUniqBy(entry: LegendPayload) {\n  return entry.value;\n}\n\ntype ContentProps = Props & {\n  margin: Margin;\n  chartWidth: number;\n  chartHeight: number;\n  contextPayload: ReadonlyArray<LegendPayload>;\n};\n\nfunction LegendContent(props: ContentProps) {\n  const { contextPayload, ...otherProps } = props;\n  const finalPayload = getUniqPayload(contextPayload, props.payloadUniqBy, defaultUniqBy);\n  const contentProps = {\n    ...otherProps,\n    payload: finalPayload,\n  };\n\n  if (React.isValidElement(props.content)) {\n    return React.cloneElement(props.content, contentProps);\n  }\n  if (typeof props.content === 'function') {\n    return React.createElement(props.content as any, contentProps);\n  }\n\n  return <DefaultLegendContent {...contentProps} />;\n}\n\ntype PositionInput = {\n  layout?: Props['layout'];\n  align?: Props['align'];\n  verticalAlign?: Props['verticalAlign'];\n};\n\nfunction getDefaultPosition(\n  style: React.CSSProperties,\n  props: PositionInput,\n  margin: Margin,\n  chartWidth: number,\n  chartHeight: number,\n  box: ElementOffset,\n) {\n  const { layout, align, verticalAlign } = props;\n  let hPos, vPos;\n\n  if (\n    !style ||\n    ((style.left === undefined || style.left === null) && (style.right === undefined || style.right === null))\n  ) {\n    if (align === 'center' && layout === 'vertical') {\n      hPos = { left: ((chartWidth || 0) - box.width) / 2 };\n    } else {\n      hPos = align === 'right' ? { right: (margin && margin.right) || 0 } : { left: (margin && margin.left) || 0 };\n    }\n  }\n\n  if (\n    !style ||\n    ((style.top === undefined || style.top === null) && (style.bottom === undefined || style.bottom === null))\n  ) {\n    if (verticalAlign === 'middle') {\n      vPos = { top: ((chartHeight || 0) - box.height) / 2 };\n    } else {\n      vPos =\n        verticalAlign === 'bottom' ? { bottom: (margin && margin.bottom) || 0 } : { top: (margin && margin.top) || 0 };\n    }\n  }\n\n  return { ...hPos, ...vPos };\n}\n\nexport type LegendItemSorter = 'value' | 'dataKey' | ((item: LegendPayload) => number | string);\n\nexport type Props = Omit<DefaultProps, 'payload' | 'ref'> & {\n  wrapperStyle?: CSSProperties;\n  width?: number;\n  height?: number;\n  payloadUniqBy?: UniqueOption<LegendPayload>;\n  onBBoxUpdate?: (box: ElementOffset | null) => void;\n  /**\n   * If portal is defined, then Legend will use this element as a target\n   * for rendering using React Portal: https://react.dev/reference/react-dom/createPortal\n   *\n   * If this is undefined then Legend renders inside the recharts-wrapper element.\n   */\n  portal?: HTMLElement | null;\n  itemSorter?: LegendItemSorter;\n};\n\ninterface State {\n  boxWidth: number;\n  boxHeight: number;\n}\n\nfunction LegendSettingsDispatcher(props: LegendSettings): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(setLegendSettings(props));\n  }, [dispatch, props]);\n  return null;\n}\n\nfunction LegendSizeDispatcher(props: Size): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(setLegendSize(props));\n    return () => {\n      dispatch(setLegendSize({ width: 0, height: 0 }));\n    };\n  }, [dispatch, props]);\n  return null;\n}\n\nfunction LegendWrapper(props: Props) {\n  const contextPayload = useLegendPayload();\n  const legendPortalFromContext = useLegendPortal();\n  const margin = useMargin();\n  const { width: widthFromProps, height: heightFromProps, wrapperStyle, portal: portalFromProps } = props;\n  // The contextPayload is not used directly inside the hook, but we need the onBBoxUpdate call\n  // when the payload changes, therefore it's here as a dependency.\n  const [lastBoundingBox, updateBoundingBox] = useElementOffset([contextPayload]);\n  const chartWidth = useChartWidth();\n  const chartHeight = useChartHeight();\n  const maxWidth = chartWidth - (margin.left || 0) - (margin.right || 0);\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  const widthOrHeight = Legend.getWidthOrHeight(props.layout, heightFromProps, widthFromProps, maxWidth);\n  // if the user supplies their own portal, only use their defined wrapper styles\n  const outerStyle: CSSProperties = portalFromProps\n    ? wrapperStyle\n    : {\n        position: 'absolute',\n        width: widthOrHeight?.width || widthFromProps || 'auto',\n        height: widthOrHeight?.height || heightFromProps || 'auto',\n        ...getDefaultPosition(wrapperStyle, props, margin, chartWidth, chartHeight, lastBoundingBox),\n        ...wrapperStyle,\n      };\n\n  const legendPortal = portalFromProps ?? legendPortalFromContext;\n\n  if (legendPortal == null) {\n    return null;\n  }\n\n  const legendElement = (\n    <div className=\"recharts-legend-wrapper\" style={outerStyle} ref={updateBoundingBox}>\n      <LegendSettingsDispatcher\n        layout={props.layout}\n        align={props.align}\n        verticalAlign={props.verticalAlign}\n        itemSorter={props.itemSorter}\n      />\n      <LegendSizeDispatcher width={lastBoundingBox.width} height={lastBoundingBox.height} />\n      <LegendContent\n        {...props}\n        {...widthOrHeight}\n        margin={margin}\n        chartWidth={chartWidth}\n        chartHeight={chartHeight}\n        contextPayload={contextPayload}\n      />\n    </div>\n  );\n\n  return createPortal(legendElement, legendPortal);\n}\n\nexport class Legend extends PureComponent<Props, State> {\n  static displayName = 'Legend';\n\n  static defaultProps = {\n    align: 'center',\n    iconSize: 14,\n    itemSorter: 'value',\n    layout: 'horizontal',\n    verticalAlign: 'bottom',\n  };\n\n  static getWidthOrHeight(\n    layout: LayoutType | undefined,\n    height: number | undefined,\n    width: number | undefined,\n    maxWidth: number,\n  ): null | { height?: number; width?: number } {\n    if (layout === 'vertical' && isNumber(height)) {\n      return {\n        height,\n      };\n    }\n    if (layout === 'horizontal') {\n      return {\n        width: width || maxWidth,\n      };\n    }\n\n    return null;\n  }\n\n  public render() {\n    return <LegendWrapper {...this.props} />;\n  }\n}\n","import { LegendPayload } from '../component/DefaultLegendContent';\nimport { useAppSelector } from '../state/hooks';\nimport { selectLegendPayload } from '../state/selectors/legendSelectors';\n\n/**\n * Use this hook in Legend, or anywhere else where you want to read the current Legend items.\n * @return all Legend items ready to be rendered\n */\nexport function useLegendPayload(): ReadonlyArray<LegendPayload> {\n  return useAppSelector(selectLegendPayload);\n}\n","/**\n * @fileOverview Default Tooltip Content\n */\n\nimport * as React from 'react';\nimport { CSSProperties, HTMLAttributes, ReactNode, SVGProps } from 'react';\nimport sortBy from 'es-toolkit/compat/sortBy';\nimport { clsx } from 'clsx';\nimport { isNullish, isNumOrStr } from '../util/DataUtils';\nimport { DataKey } from '../util/types';\n\nfunction defaultFormatter<TValue extends ValueType>(value: TValue) {\n  return Array.isArray(value) && isNumOrStr(value[0]) && isNumOrStr(value[1]) ? (value.join(' ~ ') as TValue) : value;\n}\n\nexport type TooltipType = 'none';\nexport type ValueType = number | string | Array<number | string>;\nexport type NameType = number | string;\nexport type Formatter<TValue extends ValueType, TName extends NameType> = (\n  value: TValue,\n  name: TName,\n  item: Payload<TValue, TName>,\n  index: number,\n  payload: ReadonlyArray<Payload<TValue, TName>>,\n) => [React.ReactNode, TName] | React.ReactNode;\n\nexport interface Payload<TValue extends ValueType, TName extends NameType> extends Omit<SVGProps<SVGElement>, 'name'> {\n  type?: TooltipType;\n  color?: string;\n  formatter?: Formatter<TValue, TName>;\n  name?: TName;\n  value?: TValue;\n  unit?: ReactNode;\n  fill?: string;\n  dataKey?: DataKey<any>;\n  nameKey?: DataKey<any>;\n  payload?: any;\n  chartType?: string;\n  stroke?: string;\n  strokeDasharray?: string | number;\n  strokeWidth?: number | string;\n  className?: string;\n  hide?: boolean;\n}\n\nexport interface Props<TValue extends ValueType, TName extends NameType> {\n  separator?: string;\n  wrapperClassName?: string;\n  labelClassName?: string;\n  formatter?: Formatter<TValue, TName>;\n  contentStyle?: CSSProperties;\n  itemStyle?: CSSProperties;\n  labelStyle?: CSSProperties;\n  labelFormatter?: (label: any, payload: ReadonlyArray<Payload<TValue, TName>>) => ReactNode;\n  label?: any;\n  payload?: ReadonlyArray<Payload<TValue, TName>>;\n  itemSorter?: 'dataKey' | 'value' | 'name' | ((item: Payload<TValue, TName>) => number | string);\n  accessibilityLayer: boolean;\n}\n\nexport const DefaultTooltipContent = <TValue extends ValueType, TName extends NameType>(\n  props: Props<TValue, TName>,\n) => {\n  const {\n    separator = ' : ',\n    contentStyle = {},\n    itemStyle = {},\n    labelStyle = {},\n    payload,\n    formatter,\n    itemSorter,\n    wrapperClassName,\n    labelClassName,\n    label,\n    labelFormatter,\n    accessibilityLayer = false,\n  } = props;\n\n  const renderContent = () => {\n    if (payload && payload.length) {\n      const listStyle = { padding: 0, margin: 0 };\n\n      const items = (itemSorter ? sortBy(payload, itemSorter) : payload).map(\n        (entry: { type?: any; formatter?: any; color?: any; unit?: any; value?: any; name?: any }, i: any) => {\n          if (entry.type === 'none') {\n            return null;\n          }\n\n          const finalFormatter = entry.formatter || formatter || defaultFormatter;\n          const { value, name } = entry;\n          let finalValue: React.ReactNode = value;\n          let finalName: React.ReactNode = name;\n          if (finalFormatter) {\n            const formatted = finalFormatter(value, name, entry, i, payload);\n            if (Array.isArray(formatted)) {\n              [finalValue, finalName] = formatted;\n            } else if (formatted != null) {\n              finalValue = formatted;\n            } else {\n              return null;\n            }\n          }\n\n          const finalItemStyle = {\n            display: 'block',\n            paddingTop: 4,\n            paddingBottom: 4,\n            color: entry.color || '#000',\n            ...itemStyle,\n          };\n\n          return (\n            // eslint-disable-next-line react/no-array-index-key\n            <li className=\"recharts-tooltip-item\" key={`tooltip-item-${i}`} style={finalItemStyle}>\n              {isNumOrStr(finalName) ? <span className=\"recharts-tooltip-item-name\">{finalName}</span> : null}\n              {isNumOrStr(finalName) ? <span className=\"recharts-tooltip-item-separator\">{separator}</span> : null}\n              <span className=\"recharts-tooltip-item-value\">{finalValue}</span>\n              <span className=\"recharts-tooltip-item-unit\">{entry.unit || ''}</span>\n            </li>\n          );\n        },\n      );\n\n      return (\n        <ul className=\"recharts-tooltip-item-list\" style={listStyle}>\n          {items}\n        </ul>\n      );\n    }\n\n    return null;\n  };\n\n  const finalStyle: React.CSSProperties = {\n    margin: 0,\n    padding: 10,\n    backgroundColor: '#fff',\n    border: '1px solid #ccc',\n    whiteSpace: 'nowrap',\n    ...contentStyle,\n  };\n  const finalLabelStyle = {\n    margin: 0,\n    ...labelStyle,\n  };\n  const hasLabel = !isNullish(label);\n  let finalLabel = hasLabel ? label : '';\n  const wrapperCN = clsx('recharts-default-tooltip', wrapperClassName);\n  const labelCN = clsx('recharts-tooltip-label', labelClassName);\n\n  if (hasLabel && labelFormatter && payload !== undefined && payload !== null) {\n    finalLabel = labelFormatter(label, payload);\n  }\n\n  const accessibilityAttributes = accessibilityLayer\n    ? ({\n        role: 'status',\n        'aria-live': 'assertive',\n      } as HTMLAttributes<HTMLDivElement>)\n    : {};\n\n  return (\n    <div className={wrapperCN} style={finalStyle} {...accessibilityAttributes}>\n      <p className={labelCN} style={finalLabelStyle}>\n        {React.isValidElement(finalLabel) ? finalLabel : `${finalLabel}`}\n      </p>\n      {renderContent()}\n    </div>\n  );\n};\n","import { clsx } from 'clsx';\nimport { CSSProperties } from 'react';\nimport { isNumber } from '../DataUtils';\nimport { Coordinate, CartesianViewBox, AllowInDimension } from '../types';\n\nexport type Dimension2D = 'x' | 'y';\n\nconst CSS_CLASS_PREFIX = 'recharts-tooltip-wrapper';\n\nconst TOOLTIP_HIDDEN: CSSProperties = { visibility: 'hidden' };\n\nexport function getTooltipCSSClassName({\n  coordinate,\n  translateX,\n  translateY,\n}: {\n  translateX: number | undefined;\n  translateY: number | undefined;\n  coordinate: Partial<Coordinate> | undefined;\n}): string {\n  return clsx(CSS_CLASS_PREFIX, {\n    [`${CSS_CLASS_PREFIX}-right`]:\n      isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX >= coordinate.x,\n    [`${CSS_CLASS_PREFIX}-left`]:\n      isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX < coordinate.x,\n    [`${CSS_CLASS_PREFIX}-bottom`]:\n      isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY >= coordinate.y,\n    [`${CSS_CLASS_PREFIX}-top`]:\n      isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY < coordinate.y,\n  });\n}\n\nexport function getTooltipTranslateXY({\n  allowEscapeViewBox,\n  coordinate,\n  key,\n  offsetTopLeft,\n  position,\n  reverseDirection,\n  tooltipDimension,\n  viewBox,\n  viewBoxDimension,\n}: {\n  allowEscapeViewBox: AllowInDimension;\n  coordinate: Coordinate;\n  key: Dimension2D;\n  offsetTopLeft: number;\n  position: Partial<Coordinate>;\n  reverseDirection: AllowInDimension;\n  tooltipDimension: number;\n  viewBox: CartesianViewBox;\n  viewBoxDimension: number | undefined;\n}): number {\n  if (position && isNumber(position[key])) {\n    return position[key];\n  }\n\n  const negative = coordinate[key] - tooltipDimension - (offsetTopLeft > 0 ? offsetTopLeft : 0);\n  const positive = coordinate[key] + offsetTopLeft;\n\n  if (allowEscapeViewBox[key]) {\n    return reverseDirection[key] ? negative : positive;\n  }\n\n  const viewBoxKey = viewBox[key];\n  if (viewBoxKey == null) {\n    return 0;\n  }\n\n  if (reverseDirection[key]) {\n    const tooltipBoundary = negative;\n    const viewBoxBoundary = viewBoxKey;\n    if (tooltipBoundary < viewBoxBoundary) {\n      return Math.max(positive, viewBoxKey);\n    }\n    return Math.max(negative, viewBoxKey);\n  }\n\n  if (viewBoxDimension == null) {\n    return 0;\n  }\n  const tooltipBoundary = positive + tooltipDimension;\n  const viewBoxBoundary = viewBoxKey + viewBoxDimension;\n  if (tooltipBoundary > viewBoxBoundary) {\n    return Math.max(negative, viewBoxKey);\n  }\n  return Math.max(positive, viewBoxKey);\n}\n\nexport function getTransformStyle({\n  translateX,\n  translateY,\n  useTranslate3d,\n}: {\n  useTranslate3d: boolean;\n  translateX: number;\n  translateY: number;\n}): CSSProperties {\n  return {\n    transform: useTranslate3d\n      ? `translate3d(${translateX}px, ${translateY}px, 0)`\n      : `translate(${translateX}px, ${translateY}px)`,\n  };\n}\n\nexport function getTooltipTranslate({\n  allowEscapeViewBox,\n  coordinate,\n  offsetTopLeft,\n  position,\n  reverseDirection,\n  tooltipBox,\n  useTranslate3d,\n  viewBox,\n}: {\n  allowEscapeViewBox: AllowInDimension;\n  coordinate: Coordinate | undefined;\n  offsetTopLeft: number;\n  position: Partial<Coordinate>;\n  reverseDirection: AllowInDimension;\n  tooltipBox: { width: number; height: number };\n  useTranslate3d: boolean;\n  viewBox: CartesianViewBox;\n}): { cssProperties: CSSProperties; cssClasses: string } {\n  let cssProperties: CSSProperties, translateX: number | undefined, translateY: number | undefined;\n  if (tooltipBox.height > 0 && tooltipBox.width > 0 && coordinate) {\n    translateX = getTooltipTranslateXY({\n      allowEscapeViewBox,\n      coordinate,\n      key: 'x',\n      offsetTopLeft,\n      position,\n      reverseDirection,\n      tooltipDimension: tooltipBox.width,\n      viewBox,\n      viewBoxDimension: viewBox.width,\n    });\n\n    translateY = getTooltipTranslateXY({\n      allowEscapeViewBox,\n      coordinate,\n      key: 'y',\n      offsetTopLeft,\n      position,\n      reverseDirection,\n      tooltipDimension: tooltipBox.height,\n      viewBox,\n      viewBoxDimension: viewBox.height,\n    });\n    cssProperties = getTransformStyle({\n      translateX,\n      translateY,\n      useTranslate3d,\n    });\n  } else {\n    cssProperties = TOOLTIP_HIDDEN;\n  }\n  return {\n    cssProperties,\n    cssClasses: getTooltipCSSClassName({\n      translateX,\n      translateY,\n      coordinate,\n    }),\n  };\n}\n","import * as React from 'react';\nimport { CSSProperties, PureComponent, ReactNode } from 'react';\nimport { AllowInDimension, AnimationDuration, AnimationTiming, CartesianViewBox, Coordinate } from '../util/types';\nimport { getTooltipTranslate } from '../util/tooltip/translate';\nimport { ElementOffset, SetElementOffset } from '../util/useElementOffset';\n\nexport type TooltipBoundingBoxProps = {\n  active: boolean;\n  allowEscapeViewBox: AllowInDimension;\n  animationDuration: AnimationDuration;\n  animationEasing: AnimationTiming;\n  children: ReactNode;\n  coordinate: Coordinate;\n  hasPayload: boolean;\n  isAnimationActive: boolean;\n  offset: number;\n  position: Partial<Coordinate>;\n  reverseDirection: AllowInDimension;\n  useTranslate3d: boolean;\n  viewBox: CartesianViewBox;\n  wrapperStyle: CSSProperties;\n  lastBoundingBox: ElementOffset;\n  innerRef: SetElementOffset;\n  hasPortalFromProps: boolean;\n};\n\ntype State = {\n  dismissed: boolean;\n  dismissedAtCoordinate: Coordinate;\n};\n\nexport class TooltipBoundingBox extends PureComponent<TooltipBoundingBoxProps, State> {\n  state = {\n    dismissed: false,\n    dismissedAtCoordinate: { x: 0, y: 0 },\n  };\n\n  componentDidMount() {\n    document.addEventListener('keydown', this.handleKeyDown);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this.handleKeyDown);\n  }\n\n  componentDidUpdate() {\n    if (!this.state.dismissed) {\n      return;\n    }\n\n    if (\n      this.props.coordinate?.x !== this.state.dismissedAtCoordinate.x ||\n      this.props.coordinate?.y !== this.state.dismissedAtCoordinate.y\n    ) {\n      this.state.dismissed = false;\n    }\n  }\n\n  handleKeyDown = (event: KeyboardEvent) => {\n    if (event.key === 'Escape') {\n      this.setState({\n        dismissed: true,\n        dismissedAtCoordinate: {\n          x: this.props.coordinate?.x ?? 0,\n          y: this.props.coordinate?.y ?? 0,\n        },\n      });\n    }\n  };\n\n  render() {\n    const {\n      active,\n      allowEscapeViewBox,\n      animationDuration,\n      animationEasing,\n      children,\n      coordinate,\n      hasPayload,\n      isAnimationActive,\n      offset,\n      position,\n      reverseDirection,\n      useTranslate3d,\n      viewBox,\n      wrapperStyle,\n      lastBoundingBox,\n      innerRef,\n      hasPortalFromProps,\n    } = this.props;\n\n    const { cssClasses, cssProperties } = getTooltipTranslate({\n      allowEscapeViewBox,\n      coordinate,\n      offsetTopLeft: offset,\n      position,\n      reverseDirection,\n      tooltipBox: {\n        height: lastBoundingBox.height,\n        width: lastBoundingBox.width,\n      },\n      useTranslate3d,\n      viewBox,\n    });\n\n    // do not use absolute styles if the user has passed a custom portal prop\n    const positionStyles: CSSProperties = hasPortalFromProps\n      ? {}\n      : {\n          transition: isAnimationActive && active ? `transform ${animationDuration}ms ${animationEasing}` : undefined,\n          ...cssProperties,\n          pointerEvents: 'none',\n          visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden',\n          position: 'absolute',\n          top: 0,\n          left: 0,\n        };\n\n    const outerStyle: CSSProperties = {\n      ...positionStyles,\n      visibility: !this.state.dismissed && active && hasPayload ? 'visible' : 'hidden',\n      ...wrapperStyle,\n    };\n\n    return (\n      // This element allow listening to the `Escape` key. See https://github.com/recharts/recharts/pull/2925\n      <div\n        // @ts-expect-error typescript library does not recognize xmlns attribute, but it's required for an HTML chunk inside SVG.\n        xmlns=\"http://www.w3.org/1999/xhtml\"\n        tabIndex={-1}\n        className={cssClasses}\n        style={outerStyle}\n        ref={innerRef}\n      >\n        {children}\n      </div>\n    );\n  }\n}\n","const parseIsSsrByDefault = (): boolean =>\n  !(typeof window !== 'undefined' && window.document && Boolean(window.document.createElement) && window.setTimeout);\n\nexport const Global = {\n  isSsr: parseIsSsrByDefault(),\n};\n","import { useAppSelector } from '../state/hooks';\n\nexport const useAccessibilityLayer = () => useAppSelector(state => state.rootProps.accessibilityLayer);\n","export default function() {}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // falls through\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n      case 3: this._point = 4; // falls through\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisOpen(context);\n}\n","import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n  constructor(context, x) {\n    this._context = context;\n    this._x = x;\n  }\n  areaStart() {\n    this._line = 0;\n  }\n  areaEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  }\n  point(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: {\n        this._point = 1;\n        if (this._line) this._context.lineTo(x, y);\n        else this._context.moveTo(x, y);\n        break;\n      }\n      case 1: this._point = 2; // falls through\n      default: {\n        if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n        else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n        break;\n      }\n    }\n    this._x0 = x, this._y0 = y;\n  }\n}\n\nclass BumpRadial {\n  constructor(context) {\n    this._context = context;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {}\n  point(x, y) {\n    x = +x, y = +y;\n    if (this._point === 0) {\n      this._point = 1;\n    } else {\n      const p0 = pointRadial(this._x0, this._y0);\n      const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n      const p2 = pointRadial(x, this._y0);\n      const p3 = pointRadial(x, y);\n      this._context.moveTo(...p0);\n      this._context.bezierCurveTo(...p1, ...p2, ...p3);\n    }\n    this._x0 = x, this._y0 = y;\n  }\n}\n\nexport function bumpX(context) {\n  return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n  return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n  return new BumpRadial(context);\n}\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nexport default function(context) {\n  return new LinearClosed(context);\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","function Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nexport default function(context) {\n  return new Natural(context);\n}\n","function Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nexport default function(context) {\n  return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n  return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n  return new Step(context, 1);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n  var x1 = null,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(area);\n\n  x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n  y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n  y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n","export function isWellBehavedNumber(n: unknown): n is number {\n  return Number.isFinite(n);\n}\n\nexport function isPositiveNumber(n: unknown): n is number {\n  return typeof n === 'number' && n > 0 && Number.isFinite(n);\n}\n","/**\n * @fileOverview Curve\n */\nimport * as React from 'react';\nimport { Ref } from 'react';\nimport {\n  line as shapeLine,\n  area as shapeArea,\n  CurveFactory,\n  curveBasisClosed,\n  curveBasisOpen,\n  curveBasis,\n  curveBumpX,\n  curveBumpY,\n  curveLinearClosed,\n  curveLinear,\n  curveMonotoneX,\n  curveMonotoneY,\n  curveNatural,\n  curveStep,\n  curveStepAfter,\n  curveStepBefore,\n} from 'victory-vendor/d3-shape';\n\nimport { clsx } from 'clsx';\nimport { LayoutType, PresentationAttributesWithProps, adaptEventHandlers } from '../util/types';\nimport { isNumber, upperFirst } from '../util/DataUtils';\nimport { isWellBehavedNumber } from '../util/isWellBehavedNumber';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\n\ninterface CurveFactories {\n  [index: string]: CurveFactory;\n}\n\nconst CURVE_FACTORIES: CurveFactories = {\n  curveBasisClosed,\n  curveBasisOpen,\n  curveBasis,\n  curveBumpX,\n  curveBumpY,\n  curveLinearClosed,\n  curveLinear,\n  curveMonotoneX,\n  curveMonotoneY,\n  curveNatural,\n  curveStep,\n  curveStepAfter,\n  curveStepBefore,\n};\n\nexport type CurveType =\n  | 'basis'\n  | 'basisClosed'\n  | 'basisOpen'\n  | 'bumpX'\n  | 'bumpY'\n  | 'bump'\n  | 'linear'\n  | 'linearClosed'\n  | 'natural'\n  | 'monotoneX'\n  | 'monotoneY'\n  | 'monotone'\n  | 'step'\n  | 'stepBefore'\n  | 'stepAfter'\n  | CurveFactory;\n\n/**\n * @deprecated use {@link Coordinate} instead\n * Duplicated with `Coordinate` in `util/types.ts`\n */\nexport interface Point {\n  readonly x: number;\n  readonly y: number;\n}\n\n/**\n * @deprecated use {@link NullableCoordinate} instead\n * Duplicated with `NullableCoordinate` in `util/types.ts`\n */\nexport interface NullablePoint {\n  readonly x: number | null;\n  readonly y: number | null;\n}\n\nconst defined = (p: NullablePoint): p is Point => isWellBehavedNumber(p.x) && isWellBehavedNumber(p.y);\nconst getX = (p: Point) => p.x;\nconst getY = (p: Point) => p.y;\n\nconst getCurveFactory = (type: CurveType, layout: LayoutType | undefined) => {\n  if (typeof type === 'function') {\n    return type;\n  }\n\n  const name = `curve${upperFirst(type)}`;\n\n  if ((name === 'curveMonotone' || name === 'curveBump') && layout) {\n    return CURVE_FACTORIES[`${name}${layout === 'vertical' ? 'Y' : 'X'}`];\n  }\n  return CURVE_FACTORIES[name] || curveLinear;\n};\n\ninterface CurveProps {\n  className?: string;\n  type?: CurveType;\n  layout?: LayoutType;\n  baseLine?: number | ReadonlyArray<NullablePoint>;\n  points?: ReadonlyArray<NullablePoint>;\n  connectNulls?: boolean;\n  path?: string;\n  pathRef?: Ref<SVGPathElement>;\n}\n\nexport type Props = Omit<PresentationAttributesWithProps<CurveProps, SVGPathElement>, 'type' | 'points'> & CurveProps;\n\ntype GetPathProps = Pick<Props, 'type' | 'points' | 'baseLine' | 'layout' | 'connectNulls'>;\n\n/**\n * Calculate the path of curve. Returns null if points is an empty array.\n * @return path or null\n */\nexport const getPath = ({\n  type = 'linear',\n  points = [],\n  baseLine,\n  layout,\n  connectNulls = false,\n}: GetPathProps): string | null => {\n  const curveFactory = getCurveFactory(type, layout);\n  const formatPoints: ReadonlyArray<NullablePoint> = connectNulls ? points.filter(defined) : points;\n  let lineFunction;\n\n  if (Array.isArray(baseLine)) {\n    const formatBaseLine = connectNulls ? baseLine.filter(base => defined(base)) : baseLine;\n    const areaPoints = formatPoints.map((entry, index) => ({ ...entry, base: formatBaseLine[index] }));\n    if (layout === 'vertical') {\n      lineFunction = shapeArea<Point & { base: Point }>()\n        .y(getY)\n        .x1(getX)\n        .x0(d => d.base.x);\n    } else {\n      lineFunction = shapeArea<Point & { base: Point }>()\n        .x(getX)\n        .y1(getY)\n        .y0(d => d.base.y);\n    }\n    lineFunction.defined(defined).curve(curveFactory);\n\n    return lineFunction(areaPoints);\n  }\n  if (layout === 'vertical' && isNumber(baseLine)) {\n    lineFunction = shapeArea<Point>().y(getY).x1(getX).x0(baseLine);\n  } else if (isNumber(baseLine)) {\n    lineFunction = shapeArea<Point>().x(getX).y1(getY).y0(baseLine);\n  } else {\n    lineFunction = shapeLine<Point>().x(getX).y(getY);\n  }\n\n  lineFunction.defined(defined).curve(curveFactory);\n\n  return lineFunction(formatPoints);\n};\n\nexport const Curve: React.FC<Props> = props => {\n  const { className, points, path, pathRef } = props;\n\n  if ((!points || !points.length) && !path) {\n    return null;\n  }\n\n  const realPath: string | null | undefined = points && points.length ? getPath(props) : path;\n\n  return (\n    <path\n      {...svgPropertiesNoEvents(props)}\n      {...adaptEventHandlers(props)}\n      className={clsx('recharts-curve', className)}\n      d={realPath === null ? undefined : realPath}\n      ref={pathRef}\n    />\n  );\n};\n","/**\n * @fileOverview Cross\n */\nimport * as React from 'react';\nimport { SVGProps } from 'react';\nimport { clsx } from 'clsx';\nimport { isNumber } from '../util/DataUtils';\nimport { filterProps } from '../util/ReactUtils';\n\ninterface CrossProps {\n  x?: number;\n  y?: number;\n  width?: number;\n  height?: number;\n  top?: number;\n  left?: number;\n  className?: number;\n}\n\nexport type Props = SVGProps<SVGPathElement> & CrossProps;\n\nconst getPath = (x: number, y: number, width: number, height: number, top: number, left: number) => {\n  return `M${x},${top}v${height}M${left},${y}h${width}`;\n};\n\nexport const Cross: React.FC<Props> = ({\n  x = 0,\n  y = 0,\n  top = 0,\n  left = 0,\n  width = 0,\n  height = 0,\n  className,\n  ...rest\n}) => {\n  const props = { x, y, top, left, width, height, ...rest };\n\n  if (!isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || !isNumber(top) || !isNumber(left)) {\n    return null;\n  }\n\n  return (\n    <path\n      {...filterProps(props, true)}\n      className={clsx('recharts-cross', className)}\n      d={getPath(x, y, width, height, top, left)}\n    />\n  );\n};\n","/**\n * This function mimics the behavior of the `defaultProps` static property in React.\n * Functional components do not have a defaultProps property, so this function is useful to resolve default props.\n *\n * The common recommendation is to use ES6 destructuring with default values in the function signature,\n * but you need to be careful there and make sure you destructure all the individual properties\n * and not the whole object. See the test file for example.\n *\n * And because destructuring all properties one by one is a faff, and it's easy to miss one property,\n * this function exists.\n *\n * @param realProps - the props object passed to the component by the user\n * @param defaultProps - the default props object defined in the component by Recharts\n * @returns - the props object with all the default props resolved. All `undefined` values are replaced with the default value.\n */\nexport function resolveDefaultProps<T, D extends Partial<T>>(\n  realProps: T,\n  defaultProps: D & DisallowExtraKeys<T, D>,\n): RequiresDefaultProps<T, D> {\n  /*\n   * To avoid mutating the original `realProps` object passed to the function, create a shallow copy of it.\n   * `resolvedProps` will be modified directly with the defaults.\n   */\n  const resolvedProps: T = { ...realProps };\n  /*\n   * Since the function guarantees `D extends Partial<T>`, this assignment is safe.\n   * It allows TypeScript to work with the well-defined `Partial<T>` type inside the loop,\n   * making subsequent type inference (especially for `dp[key]`) much more straightforward for the compiler.\n   * This is a key step to improve type safety *without* value assertions later.\n   */\n  const dp: Partial<T> = defaultProps;\n  /*\n   * `Object.keys` doesn't preserve strong key types - it always returns Array<string>.\n   * However, due to the `D extends Partial<T>` constraint,\n   * we know these keys *must* also be valid keys of `T`.\n   * This assertion informs TypeScript of this relationship, avoiding type errors when using `key` to index `acc` (type T).\n   *\n   * Type assertions are not sound but in this case it's necessary\n   * as `Object.keys` does not do what we want it to do.\n   */\n  const keys = Object.keys(defaultProps) as Array<keyof T>;\n  const withDefaults: T = keys.reduce((acc: T, key: keyof T): T => {\n    if (acc[key] === undefined && dp[key] !== undefined) {\n      acc[key] = dp[key];\n    }\n    return acc;\n  }, resolvedProps);\n  /*\n   * And again type assertions are not safe but here we have done the runtime work\n   * so let's bypass the lack of static type safety and tell the compiler what happened.\n   */\n  return withDefaults as RequiresDefaultProps<T, D>;\n}\n\n/**\n * Helper type to extract the keys of T that are required.\n * It iterates through each key K in T. If Pick<T, K> cannot be assigned an empty object {},\n * it means K is required, so we keep K; otherwise, we discard it (never).\n * [keyof T] at the end creates a union of the kept keys.\n */\nexport type RequiredKeys<T> = {\n  [K in keyof T]-?: object extends Pick<T, K> ? never : K;\n}[keyof T];\n\n/**\n * Helper type to extract the keys of T that are optional.\n * It iterates through each key K in T. If Pick<T, K> can be assigned an empty object {},\n * it means K is optional (or potentially missing), so we keep K; otherwise, we discard it (never).\n * [keyof T] at the end creates a union of the kept keys.\n */\nexport type OptionalKeys<T> = {\n  [K in keyof T]-?: object extends Pick<T, K> ? K : never;\n}[keyof T];\n\n/**\n * Helper type to ensure keys of D exist in T.\n * For each key K in D, if K is also a key of T, keep the type D[K].\n * If K is NOT a key of T, map it to type `never`.\n * An object cannot have a property of type `never`, effectively disallowing extra keys.\n */\nexport type DisallowExtraKeys<T, D> = { [K in keyof D]: K extends keyof T ? D[K] : never };\n\n/**\n * This type will take a source type `Props` and a default type `Defaults` and will return a new type\n * where all properties that are optional in `Props` but required in `Defaults` are made required in the result.\n * Properties that are required in `Props` and optional in `Defaults` will remain required.\n * Properties that are optional in both `Props` and `Defaults` will remain optional.\n *\n * This is useful for creating a type that represents the resolved props of a component with default props.\n */\nexport type RequiresDefaultProps<Props, Defaults extends Partial<Props>> =\n  // Section 1: Properties that were already required in T.\n  // We use Pick<T, RequiredKeys<T>> to select only the keys that were originally\n  // required in T. Pick preserves their required status and original types.\n  Pick<Props, RequiredKeys<Props>> &\n    // Section 2: Properties that were optional in T BUT have a default specified in D.\n    // These properties should become required in the resulting type.\n    // - OptionalKeys<T>: Gets the union of keys that are optional in T.\n    // - RequiredKeys<D>: Gets the keys that are required in the default props D.\n    // - Extract<..., ...>: Finds the intersection of these two sets – the keys that are optional in T AND required in D.\n    // - Pick<T, Extract<...>>: Selects these specific properties from T. At this stage, they still retain their original optional ('?') status from T.\n    // - Required<...>: Wraps the picked properties, removing the '?' modifier and making them required. Their underlying type (e.g., `string | undefined`) remains unchanged.\n    Required<Pick<Props, Extract<OptionalKeys<Props>, RequiredKeys<Defaults>>>> &\n    // Section 3: Properties that were optional in T AND do NOT have a default in D.\n    // These properties should remain optional.\n    // - Exclude<OptionalKeys<T>, keyof D>: Finds the keys that are optional in T but are NOT present in D.\n    // - Pick<T, Exclude<...>>: Selects these properties from T. Pick preserves their original optional status and types.\n    Pick<Props, Exclude<OptionalKeys<Props>, keyof Defaults>>;\n","export const ACCURACY = 1e-4;\n\nconst cubicBezierFactor = (c1: number, c2: number) => [0, 3 * c1, 3 * c2 - 6 * c1, 3 * c1 - 3 * c2 + 1];\n\nconst evaluatePolynomial = (params: ReadonlyArray<number>, t: number) =>\n  params.map((param, i) => param * t ** i).reduce((pre, curr) => pre + curr);\n\nconst cubicBezier = (c1: number, c2: number) => (t: number) => {\n  const params = cubicBezierFactor(c1, c2);\n\n  return evaluatePolynomial(params, t);\n};\n\nconst derivativeCubicBezier = (c1: number, c2: number) => (t: number) => {\n  const params = cubicBezierFactor(c1, c2);\n  const newParams = [...params.map((param, i) => param * i).slice(1), 0];\n\n  return evaluatePolynomial(newParams, t);\n};\n\ntype CubicBezierTemplate = `cubic-bezier(${number},${number},${number},${number})`;\n\ntype NamedBezier = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | CubicBezierTemplate;\n\ntype BezierInput = [NamedBezier] | [number, number, number, number];\n\nexport type BezierEasingFunction = {\n  isStepper: false;\n  (t: number): number;\n};\n\n// calculate cubic-bezier using Newton's method\nexport const configBezier = (...args: BezierInput): BezierEasingFunction => {\n  let x1: number, x2: number, y1: number, y2: number;\n\n  if (args.length === 1) {\n    switch (args[0]) {\n      case 'linear':\n        [x1, y1, x2, y2] = [0.0, 0.0, 1.0, 1.0];\n        break;\n      case 'ease':\n        [x1, y1, x2, y2] = [0.25, 0.1, 0.25, 1.0];\n        break;\n      case 'ease-in':\n        [x1, y1, x2, y2] = [0.42, 0.0, 1.0, 1.0];\n        break;\n      case 'ease-out':\n        [x1, y1, x2, y2] = [0.42, 0.0, 0.58, 1.0];\n        break;\n      case 'ease-in-out':\n        [x1, y1, x2, y2] = [0.0, 0.0, 0.58, 1.0];\n        break;\n      default: {\n        const easing = args[0].split('(');\n        if (easing[0] === 'cubic-bezier' && easing[1].split(')')[0].split(',').length === 4) {\n          [x1, y1, x2, y2] = easing[1]\n            .split(')')[0]\n            .split(',')\n            .map((x: string) => parseFloat(x));\n        }\n      }\n    }\n  } else if (args.length === 4) {\n    [x1, y1, x2, y2] = args;\n  }\n\n  const curveX = cubicBezier(x1, x2);\n  const curveY = cubicBezier(y1, y2);\n  const derCurveX = derivativeCubicBezier(x1, x2);\n  const rangeValue = (value: number): number => {\n    if (value > 1) {\n      return 1;\n    }\n    if (value < 0) {\n      return 0;\n    }\n\n    return value;\n  };\n\n  const bezier = (_t: number) => {\n    const t = _t > 1 ? 1 : _t;\n    let x = t;\n\n    for (let i = 0; i < 8; ++i) {\n      const evalT = curveX(x) - t;\n      const derVal = derCurveX(x);\n\n      if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {\n        return curveY(x);\n      }\n\n      x = rangeValue(x - evalT / derVal);\n    }\n\n    return curveY(x);\n  };\n\n  bezier.isStepper = false as const;\n\n  return bezier;\n};\n\ntype SpringInput = {\n  stiff?: number;\n  damping?: number;\n  dt?: number;\n};\n\nexport type SpringEasingFunction = {\n  isStepper: true;\n  dt: number;\n  (currX: number, destX: number, currV: number): [number, number];\n};\n\nexport const configSpring = (config: SpringInput = {}): SpringEasingFunction => {\n  const { stiff = 100, damping = 8, dt = 17 } = config;\n  const stepper = (currX: number, destX: number, currV: number): ReturnType<SpringEasingFunction> => {\n    const FSpring = -(currX - destX) * stiff;\n    const FDamping = currV * damping;\n    const newV = currV + ((FSpring - FDamping) * dt) / 1000;\n    const newX = (currV * dt) / 1000 + currX;\n\n    if (Math.abs(newX - destX) < ACCURACY && Math.abs(newV) < ACCURACY) {\n      return [destX, 0];\n    }\n    return [newX, newV];\n  };\n\n  stepper.isStepper = true as const;\n  stepper.dt = dt;\n\n  return stepper;\n};\n\nexport type EasingFunction = BezierEasingFunction | SpringEasingFunction;\n\nexport type EasingInput = NamedBezier | 'spring' | EasingFunction;\n\nexport const configEasing = (easing: EasingInput): EasingFunction => {\n  if (typeof easing === 'string') {\n    switch (easing) {\n      case 'ease':\n      case 'ease-in-out':\n      case 'ease-out':\n      case 'ease-in':\n      case 'linear':\n        return configBezier(easing);\n      case 'spring':\n        return configSpring();\n      default:\n        if (easing.split('(')[0] === 'cubic-bezier') {\n          return configBezier(easing);\n        }\n    }\n  }\n\n  if (typeof easing === 'function') {\n    return easing;\n  }\n\n  return null;\n};\n","/*\n * @description: convert camel case to dash case\n * string => string\n */\nexport const getDashCase = (name: string) => name.replace(/([A-Z])/g, v => `-${v.toLowerCase()}`);\n\nexport const getTransitionVal = (props: ReadonlyArray<string>, duration: string | number, easing: string): string =>\n  props.map(prop => `${getDashCase(prop)} ${duration}ms ${easing}`).join(',');\n\n/**\n * Finds the intersection of keys between two objects\n * @param {object} preObj previous object\n * @param {object} nextObj next object\n * @returns an array of keys that exist in both objects\n */\nexport const getIntersectionKeys = (preObj: Record<string, unknown>, nextObj: Record<string, unknown>): string[] =>\n  [Object.keys(preObj), Object.keys(nextObj)].reduce((a, b) => a.filter(c => b.includes(c)));\n\n/**\n * Maps an object to another object\n * @param {function} fn function to map\n * @param {object} obj object to map\n * @returns mapped object\n */\nexport const mapObject = <T extends Record<string, any>, R>(\n  fn: (key: keyof T, value: T[keyof T]) => R,\n  obj: T,\n): { [K in keyof T]: R } =>\n  Object.keys(obj).reduce(\n    (res, key) => ({\n      ...res,\n      [key]: fn(key as keyof T, obj[key as keyof T]),\n    }),\n    {} as { [K in keyof T]: R },\n  );\n","import { getIntersectionKeys, mapObject } from './util';\nimport { BezierEasingFunction, EasingFunction, SpringEasingFunction } from './easing';\nimport { TimeoutController } from './timeoutController';\n\nexport const alpha = (begin: number, end: number, k: number) => begin + (end - begin) * k;\nconst needContinue = ({ from, to }: Val) => from !== to;\n\ntype Val = {\n  from: number;\n  to: number;\n  velocity: number;\n};\n\n/*\n * @description: cal new from value and velocity in each stepper\n * @return: { [styleProperty]: { from, to, velocity } }\n */\nconst calStepperVals = (easing: SpringEasingFunction, preVals: Record<string, Val>, steps: number) => {\n  const nextStepVals: Record<string, Val> = mapObject((key, val: Val): Val => {\n    if (needContinue(val)) {\n      const [newX, newV] = easing(val.from, val.to, val.velocity);\n      return {\n        ...val,\n        from: newX,\n        velocity: newV,\n      };\n    }\n\n    return val;\n  }, preVals);\n\n  if (steps < 1) {\n    return mapObject((key, val: Val): Val => {\n      if (needContinue(val)) {\n        return {\n          ...val,\n          velocity: alpha(val.velocity, nextStepVals[key].velocity, steps),\n          from: alpha(val.from, nextStepVals[key].from, steps),\n        };\n      }\n\n      return val;\n    }, preVals);\n  }\n\n  return calStepperVals(easing, nextStepVals, steps - 1);\n};\n\nexport type FrameId = number;\n\nexport type RequestAnimationFrameCallback = (time: number) => void;\n\nexport type RequestAnimationFrameDi = (callback: RequestAnimationFrameCallback) => FrameId;\n\nexport type CancelAnimationFrameDi = (handle: FrameId) => void;\n\nexport type CancelAnimationFunction = () => void;\n\nexport type StartAnimationFunction = () => CancelAnimationFunction;\n\nfunction createStepperUpdate<T extends Record<string, unknown>>(\n  from: T,\n  to: T,\n  easing: SpringEasingFunction,\n  interKeys: ReadonlyArray<string>,\n  render: (currentStyle: T) => void,\n  timeoutController: TimeoutController,\n) {\n  let preTime: number;\n  let stepperStyle = interKeys.reduce(\n    (res, key) => ({\n      ...res,\n      [key]: {\n        from: from[key],\n        velocity: 0,\n        to: to[key],\n      },\n    }),\n    {},\n  );\n  const getCurrStyle = () => mapObject((key, val: Val) => val.from, stepperStyle);\n  const shouldStopAnimation = () => !Object.values(stepperStyle).filter(needContinue).length;\n\n  let stopAnimation: CancelAnimationFunction | null = null;\n\n  const stepperUpdate = (now: number) => {\n    if (!preTime) {\n      preTime = now;\n    }\n    const deltaTime = now - preTime;\n    const steps = deltaTime / easing.dt;\n\n    stepperStyle = calStepperVals(easing, stepperStyle, steps);\n    // get union set and add compatible prefix\n    render({\n      ...from,\n      ...to,\n      ...getCurrStyle(),\n    });\n\n    preTime = now;\n\n    if (!shouldStopAnimation()) {\n      stopAnimation = timeoutController.setTimeout(stepperUpdate);\n    }\n  };\n\n  // return start animation method\n  return () => {\n    stopAnimation = timeoutController.setTimeout(stepperUpdate);\n\n    // return stop animation method\n    return () => {\n      stopAnimation();\n    };\n  };\n}\n\ntype TimingStyle = Record<string, [number, number]>;\n\nfunction createTimingUpdate<T extends Record<string, unknown>>(\n  from: T,\n  to: T,\n  easing: BezierEasingFunction,\n  duration: number,\n  interKeys: ReadonlyArray<string>,\n  render: (currentStyle: T) => void,\n  timeoutController: TimeoutController,\n) {\n  let stopAnimation: CancelAnimationFunction | null = null;\n\n  const timingStyle: TimingStyle = interKeys.reduce(\n    (res, key): TimingStyle => ({\n      ...res,\n      [key]: [from[key], to[key]],\n    }),\n    {},\n  );\n\n  let beginTime: number;\n\n  const timingUpdate = (now: number) => {\n    if (!beginTime) {\n      beginTime = now;\n    }\n\n    const t = (now - beginTime) / duration;\n    const currStyle = mapObject((key, val) => alpha(...val, easing(t)), timingStyle);\n\n    // get union set and add compatible prefix\n    render({\n      ...from,\n      ...to,\n      ...currStyle,\n    });\n\n    if (t < 1) {\n      stopAnimation = timeoutController.setTimeout(timingUpdate);\n    } else {\n      const finalStyle = mapObject((key, val) => alpha(...val, easing(1)), timingStyle);\n\n      render({\n        ...from,\n        ...to,\n        ...finalStyle,\n      });\n    }\n  };\n\n  // return start animation method\n  return () => {\n    stopAnimation = timeoutController.setTimeout(timingUpdate);\n\n    // return stop animation method\n    return () => {\n      stopAnimation();\n    };\n  };\n}\n\n// configure update function\n// eslint-disable-next-line import/no-default-export\nexport default <T extends Record<string, unknown>>(\n  from: T,\n  to: T,\n  easing: EasingFunction,\n  duration: number,\n  render: (currentStyle: T) => void,\n  timeoutController: TimeoutController,\n): StartAnimationFunction => {\n  const interKeys: ReadonlyArray<string> = getIntersectionKeys(from, to);\n\n  return easing.isStepper === true\n    ? createStepperUpdate(from, to, easing, interKeys, render, timeoutController)\n    : createTimingUpdate(from, to, easing, duration, interKeys, render, timeoutController);\n};\n","/**\n * Callback type for the timeout function.\n * Receives current time in milliseconds as an argument.\n */\nexport type CallbackType = (now: number) => void;\n\n/**\n * A function that, when called, cancels the timeout.\n */\nexport type CancelableTimeout = () => void;\n\nexport interface TimeoutController {\n  /**\n   * Sets a timeout that executes a callback after a specified delay.\n   * Allows setting multiple timeouts and provides a way to cancel them independently.\n   * @param callback - The function to execute after the delay. Receives the current time in milliseconds as an argument.\n   * @param delay (optional) - The time in milliseconds to wait before executing the callback. Defaults to 0.\n   */\n  setTimeout(callback: CallbackType, delay?: number): CancelableTimeout;\n}\n\nexport class RequestAnimationFrameTimeoutController implements TimeoutController {\n  setTimeout(callback: CallbackType, delay: number = 0): CancelableTimeout {\n    const startTime = performance.now();\n\n    let requestId: number | null = null;\n\n    const executeCallback = (now: number): void => {\n      if (now - startTime >= delay) {\n        callback(now);\n        // tests fail without the extra if, even when five lines below it's not needed\n        // TODO finish transition to the mocked timeout controller and then remove this condition\n      } else if (typeof requestAnimationFrame === 'function') {\n        requestId = requestAnimationFrame(executeCallback);\n      }\n    };\n\n    requestId = requestAnimationFrame(executeCallback);\n\n    return () => {\n      cancelAnimationFrame(requestId);\n    };\n  }\n}\n","import { AnimationManager, createAnimateManager } from './AnimationManager';\nimport { RequestAnimationFrameTimeoutController } from './timeoutController';\n\nexport function createDefaultAnimationManager(): AnimationManager {\n  return createAnimateManager(new RequestAnimationFrameTimeoutController());\n}\n","import { CancelableTimeout, TimeoutController } from './timeoutController';\nimport { StartAnimationFunction } from './configUpdate';\n\nexport type ReactSmoothStyle = string | object;\n\n/**\n * Represents a single item in the ReactSmoothQueue.\n * The item can be:\n * - A number representing a delay in milliseconds.\n * - An object representing a style change\n * - A StartAnimationFunction that starts eased transition and calls different render\n *      because of course in Recharts we have to have three ways to do everything\n * - An arbitrary function to be executed\n */\nexport type ReactSmoothQueueItem = number | ReactSmoothStyle | StartAnimationFunction | (() => void);\n\nexport type ReactSmoothQueue = ReadonlyArray<ReactSmoothQueueItem>;\n\nexport type HandleChangeFn = (currentStyle: ReactSmoothStyle) => null | void;\n\nexport type AnimationManager = {\n  stop: () => void;\n  start: (style: ReactSmoothQueue) => void;\n  subscribe: (handleChange: (style: ReactSmoothStyle) => void) => () => void;\n  getTimeoutController(): TimeoutController;\n};\n\nexport function createAnimateManager(timeoutController: TimeoutController): AnimationManager {\n  let currStyle: ReactSmoothQueueItem | ReactSmoothQueue | undefined;\n  let handleChange: HandleChangeFn = () => null;\n  let shouldStop = false;\n  let cancelTimeout: CancelableTimeout | null = null;\n\n  const setStyle = (_style: ReactSmoothQueueItem | ReactSmoothQueue) => {\n    if (shouldStop) {\n      return;\n    }\n\n    if (Array.isArray(_style)) {\n      if (!_style.length) {\n        return;\n      }\n\n      const styles: ReactSmoothQueue = _style;\n      const [curr, ...restStyles] = styles;\n\n      if (typeof curr === 'number') {\n        cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles), curr);\n\n        return;\n      }\n\n      setStyle(curr);\n      cancelTimeout = timeoutController.setTimeout(setStyle.bind(null, restStyles));\n      return;\n    }\n\n    if (typeof _style === 'string') {\n      currStyle = _style;\n      handleChange(currStyle);\n    }\n\n    if (typeof _style === 'object') {\n      currStyle = _style;\n      handleChange(currStyle);\n    }\n\n    if (typeof _style === 'function') {\n      _style();\n    }\n  };\n\n  return {\n    stop: () => {\n      shouldStop = true;\n    },\n    start: (style: ReactSmoothQueue) => {\n      shouldStop = false;\n      if (cancelTimeout) {\n        cancelTimeout();\n        cancelTimeout = null;\n      }\n      setStyle(style);\n    },\n    subscribe: (_handleChange: HandleChangeFn) => {\n      handleChange = _handleChange;\n\n      return () => {\n        handleChange = () => null;\n      };\n    },\n    getTimeoutController: () => timeoutController,\n  } satisfies AnimationManager;\n}\n","import { createContext, useContext, useMemo } from 'react';\nimport { AnimationManager } from './AnimationManager';\nimport { createDefaultAnimationManager } from './createDefaultAnimationManager';\n\nexport type AnimationManagerFactory = (animationId: string) => AnimationManager;\n\nexport const AnimationManagerContext = createContext<AnimationManagerFactory>(createDefaultAnimationManager);\n\nexport function useAnimationManager(\n  animationId: string,\n  animationManagerFromProps: AnimationManager | undefined,\n): AnimationManager {\n  const contextAnimationManager = useContext(AnimationManagerContext);\n  return useMemo(\n    () => animationManagerFromProps ?? contextAnimationManager(animationId),\n    [animationId, animationManagerFromProps, contextAnimationManager],\n  );\n}\n","import * as React from 'react';\nimport { Children, cloneElement, PureComponent } from 'react';\nimport isEqual from 'es-toolkit/compat/isEqual';\nimport { AnimationManager } from './AnimationManager';\nimport { configEasing, EasingInput } from './easing';\nimport configUpdate from './configUpdate';\nimport { getTransitionVal } from './util';\nimport { useAnimationManager } from './useAnimationManager';\n\nexport interface AnimateProps {\n  from?: Record<string, any>;\n  to?: Record<string, any>;\n  attributeName?: string;\n  duration?: number;\n  begin?: number;\n  easing?: EasingInput;\n  children?: React.ReactNode | ((style: Record<string, any> | string) => React.ReactNode);\n  isActive?: boolean;\n  canBegin?: boolean;\n  onAnimationEnd?: () => void;\n  shouldReAnimate?: boolean;\n  onAnimationStart?: () => void;\n  onAnimationReStart?: () => void;\n  /**\n   * Controls the timeout for the animation. Defaults to production-ready controller,\n   * useful to override for testing or custom timing needs.\n   */\n  animationManager?: AnimationManager;\n}\n\ntype AnimateState = {\n  style: Record<string, any>;\n};\n\nclass AnimateImpl extends PureComponent<AnimateProps, AnimateState> {\n  static displayName = 'Animate';\n\n  static defaultProps: Partial<AnimateProps> = {\n    begin: 0,\n    duration: 1000,\n    attributeName: '',\n    easing: 'ease',\n    isActive: true,\n    canBegin: true,\n    onAnimationEnd: () => {},\n    onAnimationStart: () => {},\n  };\n\n  private mounted: boolean = false;\n\n  private manager: AnimationManager | undefined = undefined;\n\n  private stopJSAnimation: (() => void) | null = null;\n\n  private unSubscribe: (() => void) | null = null;\n\n  constructor(props: AnimateProps, context: any) {\n    super(props, context);\n\n    const { isActive, attributeName, from, to, children, duration, animationManager } = this.props;\n\n    this.manager = animationManager;\n\n    this.handleStyleChange = this.handleStyleChange.bind(this);\n    this.changeStyle = this.changeStyle.bind(this);\n\n    if (!isActive || duration <= 0) {\n      this.state = { style: {} };\n\n      // if children is a function and animation is not active, set style to 'to'\n      if (typeof children === 'function') {\n        this.state = { style: to };\n      }\n\n      return;\n    }\n\n    if (from) {\n      if (typeof children === 'function') {\n        this.state = {\n          style: from,\n        };\n\n        return;\n      }\n      this.state = {\n        style: attributeName ? { [attributeName]: from } : from,\n      };\n    } else {\n      this.state = { style: {} };\n    }\n  }\n\n  componentDidMount() {\n    const { isActive, canBegin } = this.props;\n\n    this.mounted = true;\n\n    if (!isActive || !canBegin) {\n      return;\n    }\n\n    this.runAnimation(this.props);\n  }\n\n  componentDidUpdate(prevProps: AnimateProps) {\n    const { isActive, canBegin, attributeName, shouldReAnimate, to, from: currentFrom } = this.props;\n    const { style } = this.state;\n\n    if (!canBegin) {\n      return;\n    }\n\n    if (!isActive) {\n      const newState = {\n        style: attributeName ? { [attributeName]: to } : to,\n      };\n      if (this.state && style) {\n        if ((attributeName && style[attributeName] !== to) || (!attributeName && style !== to)) {\n          this.setState(newState);\n        }\n      }\n      return;\n    }\n\n    if (isEqual(prevProps.to, to) && prevProps.canBegin && prevProps.isActive) {\n      return;\n    }\n\n    const isTriggered = !prevProps.canBegin || !prevProps.isActive;\n\n    this.manager.stop();\n\n    if (this.stopJSAnimation) {\n      this.stopJSAnimation();\n    }\n\n    const from = isTriggered || shouldReAnimate ? currentFrom : prevProps.to;\n\n    if (this.state && style) {\n      const newState = {\n        style: attributeName ? { [attributeName]: from } : from,\n      };\n      if ((attributeName && style[attributeName] !== from) || (!attributeName && style !== from)) {\n        this.setState(newState);\n      }\n    }\n\n    this.runAnimation({\n      ...this.props,\n      from,\n      begin: 0,\n    });\n  }\n\n  componentWillUnmount() {\n    this.mounted = false;\n    const { onAnimationEnd } = this.props;\n\n    if (this.unSubscribe) {\n      this.unSubscribe();\n    }\n\n    this.manager.stop();\n\n    if (this.stopJSAnimation) {\n      this.stopJSAnimation();\n    }\n\n    if (onAnimationEnd) {\n      onAnimationEnd();\n    }\n  }\n\n  handleStyleChange(style: any) {\n    this.changeStyle(style);\n  }\n\n  changeStyle(style: Record<string, any>) {\n    if (this.mounted) {\n      this.setState({\n        style,\n      });\n    }\n  }\n\n  runJSAnimation(props: AnimateProps) {\n    const { from, to, duration, easing, begin, onAnimationEnd, onAnimationStart } = props;\n    const startAnimation = configUpdate(\n      from,\n      to,\n      configEasing(easing),\n      duration,\n      this.changeStyle,\n      this.manager.getTimeoutController(),\n    );\n\n    const finalStartAnimation = () => {\n      this.stopJSAnimation = startAnimation();\n    };\n\n    this.manager.start([onAnimationStart, begin, finalStartAnimation, duration, onAnimationEnd]);\n  }\n\n  runAnimation(props: AnimateProps) {\n    const { begin, duration, attributeName, to: propsTo, easing, onAnimationStart, onAnimationEnd, children } = props;\n\n    this.unSubscribe = this.manager.subscribe(this.handleStyleChange);\n\n    if (typeof easing === 'function' || typeof children === 'function' || easing === 'spring') {\n      this.runJSAnimation(props);\n      return;\n    }\n\n    const to = attributeName ? { [attributeName]: propsTo } : propsTo;\n    const transition = getTransitionVal(Object.keys(to), duration, easing);\n\n    this.manager.start([onAnimationStart, begin, { ...to, transition }, duration, onAnimationEnd]);\n  }\n\n  render() {\n    const {\n      children,\n      begin,\n      duration,\n      attributeName,\n      easing,\n      isActive,\n      from,\n      to,\n      canBegin,\n      onAnimationEnd,\n      shouldReAnimate,\n      onAnimationReStart,\n      animationManager,\n      ...others\n    } = this.props;\n    const count = Children.count(children);\n    const stateStyle = this.state.style;\n\n    if (typeof children === 'function') {\n      return children(stateStyle);\n    }\n\n    if (!isActive || count === 0 || duration <= 0) {\n      return children;\n    }\n\n    const cloneContainer = (container: React.ReactElement) => {\n      const { style = {}, className } = container.props;\n\n      const res = cloneElement(container, {\n        ...others,\n        style: {\n          ...style,\n          ...stateStyle,\n        },\n        className,\n      });\n      return res;\n    };\n\n    if (count === 1) {\n      // @ts-expect-error TODO - fix the type error\n      return cloneContainer(Children.only(children));\n    }\n\n    // @ts-expect-error TODO - fix the type error\n    return <div>{Children.map(children, child => cloneContainer(child))}</div>;\n  }\n}\n\nexport function Animate(props: AnimateProps) {\n  const animationManager = useAnimationManager(\n    props.attributeName ?? Object.keys(props.to).join(','),\n    props.animationManager,\n  );\n\n  return <AnimateImpl {...props} animationManager={animationManager} />;\n}\n","/**\n * @fileOverview Rectangle\n */\nimport * as React from 'react';\nimport { SVGProps, useEffect, useRef, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { AnimationDuration, AnimationTiming } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { Animate } from '../animation/Animate';\n\nexport type RectRadius = [number, number, number, number];\n\nconst getRectanglePath = (x: number, y: number, width: number, height: number, radius: number | RectRadius): string => {\n  const maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2);\n  const ySign = height >= 0 ? 1 : -1;\n  const xSign = width >= 0 ? 1 : -1;\n  const clockWise = (height >= 0 && width >= 0) || (height < 0 && width < 0) ? 1 : 0;\n  let path;\n\n  if (maxRadius > 0 && radius instanceof Array) {\n    const newRadius: RectRadius = [0, 0, 0, 0];\n    for (let i = 0, len = 4; i < len; i++) {\n      newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i];\n    }\n\n    path = `M${x},${y + ySign * newRadius[0]}`;\n\n    if (newRadius[0] > 0) {\n      path += `A ${newRadius[0]},${newRadius[0]},0,0,${clockWise},${x + xSign * newRadius[0]},${y}`;\n    }\n\n    path += `L ${x + width - xSign * newRadius[1]},${y}`;\n\n    if (newRadius[1] > 0) {\n      path += `A ${newRadius[1]},${newRadius[1]},0,0,${clockWise},\n        ${x + width},${y + ySign * newRadius[1]}`;\n    }\n    path += `L ${x + width},${y + height - ySign * newRadius[2]}`;\n\n    if (newRadius[2] > 0) {\n      path += `A ${newRadius[2]},${newRadius[2]},0,0,${clockWise},\n        ${x + width - xSign * newRadius[2]},${y + height}`;\n    }\n    path += `L ${x + xSign * newRadius[3]},${y + height}`;\n\n    if (newRadius[3] > 0) {\n      path += `A ${newRadius[3]},${newRadius[3]},0,0,${clockWise},\n        ${x},${y + height - ySign * newRadius[3]}`;\n    }\n    path += 'Z';\n  } else if (maxRadius > 0 && radius === +radius && radius > 0) {\n    const newRadius = Math.min(maxRadius, radius);\n\n    path = `M ${x},${y + ySign * newRadius}\n            A ${newRadius},${newRadius},0,0,${clockWise},${x + xSign * newRadius},${y}\n            L ${x + width - xSign * newRadius},${y}\n            A ${newRadius},${newRadius},0,0,${clockWise},${x + width},${y + ySign * newRadius}\n            L ${x + width},${y + height - ySign * newRadius}\n            A ${newRadius},${newRadius},0,0,${clockWise},${x + width - xSign * newRadius},${y + height}\n            L ${x + xSign * newRadius},${y + height}\n            A ${newRadius},${newRadius},0,0,${clockWise},${x},${y + height - ySign * newRadius} Z`;\n  } else {\n    path = `M ${x},${y} h ${width} v ${height} h ${-width} Z`;\n  }\n\n  return path;\n};\ninterface RectangleProps {\n  className?: string;\n  x?: number;\n  y?: number;\n  width?: number;\n  height?: number;\n  radius?: number | RectRadius;\n  isAnimationActive?: boolean;\n  isUpdateAnimationActive?: boolean;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n}\n\nexport type Props = Omit<SVGProps<SVGPathElement>, 'radius'> & RectangleProps;\n\nconst defaultProps = {\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0,\n  // The radius of border\n  // The radius of four corners when radius is a number\n  // The radius of left-top, right-top, right-bottom, left-bottom when radius is an array\n  radius: 0,\n  isAnimationActive: false,\n  isUpdateAnimationActive: false,\n  animationBegin: 0,\n  animationDuration: 1500,\n  animationEasing: 'ease',\n} as const satisfies Partial<Props>;\n\nexport const Rectangle: React.FC<Props> = rectangleProps => {\n  const props = resolveDefaultProps(rectangleProps, defaultProps);\n  const pathRef = useRef<SVGPathElement>(null);\n  const [totalLength, setTotalLength] = useState(-1);\n\n  useEffect(() => {\n    if (pathRef.current && pathRef.current.getTotalLength) {\n      try {\n        const pathTotalLength = pathRef.current.getTotalLength();\n\n        if (pathTotalLength) {\n          setTotalLength(pathTotalLength);\n        }\n      } catch {\n        // calculate total length error\n      }\n    }\n  }, []);\n\n  const { x, y, width, height, radius, className } = props;\n  const { animationEasing, animationDuration, animationBegin, isAnimationActive, isUpdateAnimationActive } = props;\n\n  if (x !== +x || y !== +y || width !== +width || height !== +height || width === 0 || height === 0) {\n    return null;\n  }\n\n  const layerClass = clsx('recharts-rectangle', className);\n  if (!isUpdateAnimationActive) {\n    return (\n      <path {...filterProps(props, true)} className={layerClass} d={getRectanglePath(x, y, width, height, radius)} />\n    );\n  }\n\n  return (\n    <Animate\n      canBegin={totalLength > 0}\n      from={{ width, height, x, y }}\n      to={{ width, height, x, y }}\n      duration={animationDuration}\n      // @ts-expect-error TODO - fix the type error\n      animationEasing={animationEasing}\n      isActive={isUpdateAnimationActive}\n    >\n      {({ width: currWidth, height: currHeight, x: currX, y: currY }: any) => (\n        <Animate\n          canBegin={totalLength > 0}\n          // @ts-expect-error TODO - fix the type error\n          from={`0px ${totalLength === -1 ? 1 : totalLength}px`}\n          // @ts-expect-error TODO - fix the type error\n          to={`${totalLength}px 0px`}\n          attributeName=\"strokeDasharray\"\n          begin={animationBegin}\n          duration={animationDuration}\n          isActive={isAnimationActive}\n          easing={animationEasing}\n        >\n          <path\n            {...filterProps(props, true)}\n            className={layerClass}\n            d={getRectanglePath(currX, currY, currWidth, currHeight, radius)}\n            ref={pathRef}\n          />\n        </Animate>\n      )}\n    </Animate>\n  );\n};\n","import { polarToCartesian } from '../PolarUtils';\nimport { Coordinate, PolarCoordinate } from '../types';\n\nexport type RadialCursorPoints = {\n  points: [startPoint: Coordinate, endPoint: Coordinate];\n  cx?: number;\n  cy?: number;\n  radius?: number;\n  startAngle?: number;\n  endAngle?: number;\n};\n\n/**\n * Only applicable for radial layouts\n * @param {Object} activeCoordinate ChartCoordinate\n * @returns {Object} RadialCursorPoints\n */\nexport function getRadialCursorPoints(activeCoordinate: PolarCoordinate): RadialCursorPoints {\n  const { cx, cy, radius, startAngle, endAngle } = activeCoordinate;\n  const startPoint = polarToCartesian(cx, cy, radius, startAngle);\n  const endPoint = polarToCartesian(cx, cy, radius, endAngle);\n\n  return {\n    points: [startPoint, endPoint],\n    cx,\n    cy,\n    radius,\n    startAngle,\n    endAngle,\n  };\n}\n","import * as React from 'react';\nimport { SVGProps } from 'react';\nimport { clsx } from 'clsx';\nimport { GeometrySector, GeometrySectorWithCornerRadius } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { polarToCartesian, RADIAN } from '../util/PolarUtils';\nimport { getPercentValue, mathSign } from '../util/DataUtils';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\n\nconst getDeltaAngle = (startAngle: number, endAngle: number) => {\n  const sign = mathSign(endAngle - startAngle);\n  const deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);\n\n  return sign * deltaAngle;\n};\n\ninterface TangentCircleDef {\n  cx: number;\n  cy: number;\n  radius: number;\n  angle: number;\n  sign: number;\n  isExternal?: boolean;\n  cornerRadius: number;\n  cornerIsExternal?: boolean;\n}\n\nconst getTangentCircle = ({\n  cx,\n  cy,\n  radius,\n  angle,\n  sign,\n  isExternal,\n  cornerRadius,\n  cornerIsExternal,\n}: TangentCircleDef) => {\n  const centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;\n  const theta = Math.asin(cornerRadius / centerRadius) / RADIAN;\n  const centerAngle = cornerIsExternal ? angle : angle + sign * theta;\n  const center = polarToCartesian(cx, cy, centerRadius, centerAngle);\n  // The coordinate of point which is tangent to the circle\n  const circleTangency = polarToCartesian(cx, cy, radius, centerAngle);\n  // The coordinate of point which is tangent to the radius line\n  const lineTangencyAngle = cornerIsExternal ? angle - sign * theta : angle;\n  const lineTangency = polarToCartesian(cx, cy, centerRadius * Math.cos(theta * RADIAN), lineTangencyAngle);\n  return { center, circleTangency, lineTangency, theta };\n};\n\nconst getSectorPath = ({ cx, cy, innerRadius, outerRadius, startAngle, endAngle }: GeometrySector) => {\n  const angle = getDeltaAngle(startAngle, endAngle);\n\n  // When the angle of sector equals to 360, star point and end point coincide\n  const tempEndAngle = startAngle + angle;\n  const outerStartPoint = polarToCartesian(cx, cy, outerRadius, startAngle);\n  const outerEndPoint = polarToCartesian(cx, cy, outerRadius, tempEndAngle);\n\n  let path = `M ${outerStartPoint.x},${outerStartPoint.y}\n    A ${outerRadius},${outerRadius},0,\n    ${+(Math.abs(angle) > 180)},${+(startAngle > tempEndAngle)},\n    ${outerEndPoint.x},${outerEndPoint.y}\n  `;\n\n  if (innerRadius > 0) {\n    const innerStartPoint = polarToCartesian(cx, cy, innerRadius, startAngle);\n    const innerEndPoint = polarToCartesian(cx, cy, innerRadius, tempEndAngle);\n    path += `L ${innerEndPoint.x},${innerEndPoint.y}\n            A ${innerRadius},${innerRadius},0,\n            ${+(Math.abs(angle) > 180)},${+(startAngle <= tempEndAngle)},\n            ${innerStartPoint.x},${innerStartPoint.y} Z`;\n  } else {\n    path += `L ${cx},${cy} Z`;\n  }\n\n  return path;\n};\n\nconst getSectorWithCorner = ({\n  cx,\n  cy,\n  innerRadius,\n  outerRadius,\n  cornerRadius,\n  forceCornerRadius,\n  cornerIsExternal,\n  startAngle,\n  endAngle,\n}: GeometrySectorWithCornerRadius) => {\n  const sign = mathSign(endAngle - startAngle);\n  const {\n    circleTangency: soct,\n    lineTangency: solt,\n    theta: sot,\n  } = getTangentCircle({\n    cx,\n    cy,\n    radius: outerRadius,\n    angle: startAngle,\n    sign,\n    cornerRadius,\n    cornerIsExternal,\n  });\n  const {\n    circleTangency: eoct,\n    lineTangency: eolt,\n    theta: eot,\n  } = getTangentCircle({\n    cx,\n    cy,\n    radius: outerRadius,\n    angle: endAngle,\n    sign: -sign,\n    cornerRadius,\n    cornerIsExternal,\n  });\n  const outerArcAngle = cornerIsExternal\n    ? Math.abs(startAngle - endAngle)\n    : Math.abs(startAngle - endAngle) - sot - eot;\n\n  if (outerArcAngle < 0) {\n    if (forceCornerRadius) {\n      return `M ${solt.x},${solt.y}\n        a${cornerRadius},${cornerRadius},0,0,1,${cornerRadius * 2},0\n        a${cornerRadius},${cornerRadius},0,0,1,${-cornerRadius * 2},0\n      `;\n    }\n    return getSectorPath({\n      cx,\n      cy,\n      innerRadius,\n      outerRadius,\n      startAngle,\n      endAngle,\n    });\n  }\n\n  let path = `M ${solt.x},${solt.y}\n    A${cornerRadius},${cornerRadius},0,0,${+(sign < 0)},${soct.x},${soct.y}\n    A${outerRadius},${outerRadius},0,${+(outerArcAngle > 180)},${+(sign < 0)},${eoct.x},${eoct.y}\n    A${cornerRadius},${cornerRadius},0,0,${+(sign < 0)},${eolt.x},${eolt.y}\n  `;\n\n  if (innerRadius > 0) {\n    const {\n      circleTangency: sict,\n      lineTangency: silt,\n      theta: sit,\n    } = getTangentCircle({\n      cx,\n      cy,\n      radius: innerRadius,\n      angle: startAngle,\n      sign,\n      isExternal: true,\n      cornerRadius,\n      cornerIsExternal,\n    });\n    const {\n      circleTangency: eict,\n      lineTangency: eilt,\n      theta: eit,\n    } = getTangentCircle({\n      cx,\n      cy,\n      radius: innerRadius,\n      angle: endAngle,\n      sign: -sign,\n      isExternal: true,\n      cornerRadius,\n      cornerIsExternal,\n    });\n    const innerArcAngle = cornerIsExternal\n      ? Math.abs(startAngle - endAngle)\n      : Math.abs(startAngle - endAngle) - sit - eit;\n\n    if (innerArcAngle < 0 && cornerRadius === 0) {\n      return `${path}L${cx},${cy}Z`;\n    }\n\n    path += `L${eilt.x},${eilt.y}\n      A${cornerRadius},${cornerRadius},0,0,${+(sign < 0)},${eict.x},${eict.y}\n      A${innerRadius},${innerRadius},0,${+(innerArcAngle > 180)},${+(sign > 0)},${sict.x},${sict.y}\n      A${cornerRadius},${cornerRadius},0,0,${+(sign < 0)},${silt.x},${silt.y}Z`;\n  } else {\n    path += `L${cx},${cy}Z`;\n  }\n\n  return path;\n};\n\ninterface SectorProps extends GeometrySectorWithCornerRadius {\n  className?: string;\n}\n\n/**\n * SVG cx, cy are `string | number | undefined`, but internally we use `number` so let's\n * override the types here.\n */\nexport type Props = Omit<SVGProps<SVGPathElement>, 'cx' | 'cy'> & Partial<SectorProps>;\n\nconst defaultProps = {\n  cx: 0,\n  cy: 0,\n  innerRadius: 0,\n  outerRadius: 0,\n  startAngle: 0,\n  endAngle: 0,\n  cornerRadius: 0,\n  forceCornerRadius: false,\n  cornerIsExternal: false,\n} as const satisfies Partial<Props>;\n\nexport const Sector: React.FC<Props> = sectorProps => {\n  const props = resolveDefaultProps(sectorProps, defaultProps);\n  const {\n    cx,\n    cy,\n    innerRadius,\n    outerRadius,\n    cornerRadius,\n    forceCornerRadius,\n    cornerIsExternal,\n    startAngle,\n    endAngle,\n    className,\n  } = props;\n\n  if (outerRadius < innerRadius || startAngle === endAngle) {\n    return null;\n  }\n\n  const layerClass = clsx('recharts-sector', className);\n  const deltaRadius = outerRadius - innerRadius;\n  const cr = getPercentValue(cornerRadius, deltaRadius, 0, true);\n  let path;\n\n  if (cr > 0 && Math.abs(startAngle - endAngle) < 360) {\n    path = getSectorWithCorner({\n      cx,\n      cy,\n      innerRadius,\n      outerRadius,\n      cornerRadius: Math.min(cr, deltaRadius / 2),\n      forceCornerRadius,\n      cornerIsExternal,\n      startAngle,\n      endAngle,\n    });\n  } else {\n    path = getSectorPath({ cx, cy, innerRadius, outerRadius, startAngle, endAngle });\n  }\n\n  return <path {...filterProps(props, true)} className={layerClass} d={path} />;\n};\n","import { polarToCartesian } from '../PolarUtils';\nimport { ChartCoordinate, Coordinate, LayoutType, ChartOffsetInternal } from '../types';\nimport { RadialCursorPoints, getRadialCursorPoints } from './getRadialCursorPoints';\n\nexport function getCursorPoints(\n  layout: LayoutType,\n  activeCoordinate: ChartCoordinate,\n  offset: ChartOffsetInternal,\n): [Coordinate, Coordinate] | RadialCursorPoints {\n  let x1, y1, x2, y2;\n\n  if (layout === 'horizontal') {\n    x1 = activeCoordinate.x;\n    x2 = x1;\n    y1 = offset.top;\n    y2 = offset.top + offset.height;\n  } else if (layout === 'vertical') {\n    y1 = activeCoordinate.y;\n    y2 = y1;\n    x1 = offset.left;\n    x2 = offset.left + offset.width;\n  } else if (activeCoordinate.cx != null && activeCoordinate.cy != null) {\n    if (layout === 'centric') {\n      const { cx, cy, innerRadius, outerRadius, angle } = activeCoordinate;\n      const innerPoint = polarToCartesian(cx, cy, innerRadius, angle);\n      const outerPoint = polarToCartesian(cx, cy, outerRadius, angle);\n      x1 = innerPoint.x;\n      y1 = innerPoint.y;\n      x2 = outerPoint.x;\n      y2 = outerPoint.y;\n    } else {\n      // @ts-expect-error TODO the state is marked as containing Coordinate but actually in polar charts it contains PolarCoordinate, we should keep the polar state separate\n      return getRadialCursorPoints(activeCoordinate);\n    }\n  }\n\n  return [\n    { x: x1, y: y1 },\n    { x: x2, y: y2 },\n  ];\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n  return linearish(scale);\n}\n","export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nexport function symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nexport default function symlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n  return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n  return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n  var squared = continuous(),\n      range = [0, 1],\n      round = false,\n      unknown;\n\n  function scale(x) {\n    var y = unsquare(squared(x));\n    return isNaN(y) ? unknown : round ? Math.round(y) : y;\n  }\n\n  scale.invert = function(y) {\n    return squared.invert(square(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (squared.domain(_), scale) : squared.domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return scale.range(_).round(true);\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, scale) : round;\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return radial(squared.domain(), range)\n        .round(round)\n        .clamp(squared.clamp())\n        .unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n","export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  values = Array.from(values);\n  let [f] = F;\n  if ((f && f.length !== 2) || F.length > 1) {\n    const index = Uint32Array.from(values, (d, i) => i);\n    if (F.length > 1) {\n      F = F.map(f => values.map(f));\n      index.sort((i, j) => {\n        for (const f of F) {\n          const c = ascendingDefined(f[i], f[j]);\n          if (c) return c;\n        }\n      });\n    } else {\n      f = values.map(f);\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\n    }\n    return permute(values, index);\n  }\n  return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n  if (compare === ascending) return ascendingDefined;\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n  return (a, b) => {\n    const x = compare(a, b);\n    if (x || x === 0) return x;\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\n  };\n}\n\nexport function ascendingDefined(a, b) {\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n  k = Math.floor(k);\n  left = Math.floor(Math.max(0, left));\n  right = Math.floor(Math.min(array.length - 1, right));\n\n  if (!(left <= k && k <= right)) return array;\n\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n  if (isNaN(p = +p)) return;\n  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n  if (p <= 0) return minIndex(numbers);\n  if (p >= 1) return maxIndex(numbers);\n  var numbers,\n      index = Uint32Array.from(values, (_, i) => i),\n      j = numbers.length - 1,\n      i = Math.floor(j * p);\n  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n  return i >= 0 ? i : -1;\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    let previous;\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (date, step) => {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = (start, end) => {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n  // noop\n}, (date, step) => {\n  date.setTime(+date + step);\n}, (start, end) => {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return timeInterval((date) => {\n    date.setTime(Math.floor(date / k) * k);\n  }, (date, step) => {\n    date.setTime(+date + step * k);\n  }, (start, end) => {\n    return (end - start) / k;\n  });\n};\n\nexport const milliseconds = millisecond.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1;\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport default function sequential() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n  var domain = [],\n      interpolator = identity;\n\n  function scale(x) {\n    if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return scale;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.range = function() {\n    return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n  };\n\n  scale.quantiles = function(n) {\n    return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      s = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1, r2;\n      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n    return scale;\n  };\n}\n\nexport default function diverging() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n  var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport { ChartDataState } from '../chartDataSlice';\n\n/**\n * This selector always returns the data with the indexes set by a Brush.\n * Trouble is, that might or might not be what you want.\n *\n * In charts with Brush, you will sometimes want to select the full range of data, and sometimes the one decided by the Brush\n * - even if the Brush is active, the panorama inside the Brush should show the full range of data.\n *\n * So instead of this selector, consider using either selectChartDataAndAlwaysIgnoreIndexes or selectChartDataWithIndexesIfNotInPanorama\n *\n * @param state RechartsRootState\n * @returns data defined on the chart root element, such as BarChart or ScatterChart\n */\nexport const selectChartDataWithIndexes = (state: RechartsRootState): ChartDataState => state.chartData;\n\n/**\n * This selector will always return the full range of data, ignoring the indexes set by a Brush.\n * Useful for when you want to render the full range of data, even if a Brush is active.\n * For example: in the Brush panorama, in Legend, in Tooltip.\n */\nexport const selectChartDataAndAlwaysIgnoreIndexes: (state: RechartsRootState) => ChartDataState = createSelector(\n  [selectChartDataWithIndexes],\n  (dataState: ChartDataState) => {\n    const dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0;\n    return {\n      chartData: dataState.chartData,\n      computedData: dataState.computedData,\n      dataEndIndex,\n      dataStartIndex: 0,\n    };\n  },\n);\n\nexport const selectChartDataWithIndexesIfNotInPanorama = (\n  state: RechartsRootState,\n  _unused1: unknown,\n  _unused2: unknown,\n  isPanorama: boolean,\n): ChartDataState => {\n  if (isPanorama) {\n    return selectChartDataAndAlwaysIgnoreIndexes(state);\n  }\n  return selectChartDataWithIndexes(state);\n};\n","import { MAX_VALUE_REG, MIN_VALUE_REG } from './ChartUtils';\nimport { isNumber } from './DataUtils';\nimport { AxisDomain, NumberDomain } from './types';\nimport { isWellBehavedNumber } from './isWellBehavedNumber';\n\nexport function isWellFormedNumberDomain(v: unknown): v is NumberDomain {\n  if (Array.isArray(v) && v.length === 2) {\n    const [min, max] = v;\n    if (isWellBehavedNumber(min) && isWellBehavedNumber(max)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function extendDomain(\n  providedDomain: NumberDomain,\n  boundaryDomain: NumberDomain,\n  allowDataOverflow: boolean,\n): NumberDomain {\n  if (allowDataOverflow) {\n    // If the data are allowed to overflow - we're fine with whatever user provided\n    return providedDomain;\n  }\n  /*\n   * If the data are not allowed to overflow - we need to extend the domain.\n   * Means that effectively the user is allowed to make the domain larger\n   * but not smaller.\n   */\n  return [Math.min(providedDomain[0], boundaryDomain[0]), Math.max(providedDomain[1], boundaryDomain[1])];\n}\n\n/**\n * So Recharts allows users to provide their own domains,\n * but it also places some expectations on what the domain is.\n * We can improve on the typescript typing, but we also need a runtime test\n to observe that the user-provided domain is well-formed,\n * that is: an array with exactly two numbers.\n *\n * This function does not accept data as an argument.\n * This is to enable a performance optimization - if the domain is there,\n * and we know what it is without traversing all the data,\n * then we don't have to traverse all the data!\n *\n * If the user-provided domain is not well-formed,\n * this function will return undefined - in which case we should traverse the data to calculate the real domain.\n *\n * This function is for parsing the numerical domain only.\n *\n * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.\n * @param allowDataOverflow boolean, provided by users. If true then the data domain wins\n *\n * @return [min, max] domain if it's well-formed; undefined if the domain is invalid\n */\nexport function numericalDomainSpecifiedWithoutRequiringData(\n  userDomain: AxisDomain | undefined,\n  allowDataOverflow: boolean,\n) {\n  if (!allowDataOverflow) {\n    // Cannot compute data overflow if the data is not provided\n    return undefined;\n  }\n  if (typeof userDomain === 'function') {\n    // The user function expects the data to be provided as an argument\n    return undefined;\n  }\n  if (Array.isArray(userDomain) && userDomain.length === 2) {\n    const [providedMin, providedMax] = userDomain;\n    let finalMin, finalMax: string | number | undefined;\n\n    if (isWellBehavedNumber(providedMin)) {\n      finalMin = providedMin;\n    } else if (typeof providedMin === 'function') {\n      // The user function expects the data to be provided as an argument\n      return undefined;\n    }\n\n    if (isWellBehavedNumber(providedMax)) {\n      finalMax = providedMax;\n    } else if (typeof providedMax === 'function') {\n      // The user function expects the data to be provided as an argument\n      return undefined;\n    }\n\n    const candidate = [finalMin, finalMax];\n    if (isWellFormedNumberDomain(candidate)) {\n      return candidate;\n    }\n  }\n  return undefined;\n}\n\n/**\n * So Recharts allows users to provide their own domains,\n * but it also places some expectations on what the domain is.\n * We can improve on the typescript typing, but we also need a runtime test\n * to observe that the user-provided domain is well-formed,\n * that is: an array with exactly two numbers.\n * If the user-provided domain is not well-formed,\n * this function will return undefined - in which case we should traverse the data to calculate the real domain.\n *\n * This function is for parsing the numerical domain only.\n *\n * You are probably thinking, why does domain need tick count?\n * Well it adjusts the domain based on where the \"nice ticks\" land, and nice ticks depend on the tick count.\n *\n * @param userDomain external prop, user provided, before validation. Can have various shapes: array, function, special magical strings inside too.\n * @param dataDomain calculated from data. Can be undefined, as an option for performance optimization\n * @param allowDataOverflow provided by users. If true then the data domain wins\n *\n * @return [min, max] domain if it's well-formed; undefined if the domain is invalid\n */\nexport function parseNumericalUserDomain(\n  userDomain: AxisDomain | undefined,\n  dataDomain: NumberDomain | undefined,\n  allowDataOverflow: boolean,\n): NumberDomain | undefined {\n  if (!allowDataOverflow && dataDomain == null) {\n    // Cannot compute data overflow if the data is not provided\n    return undefined;\n  }\n  if (typeof userDomain === 'function' && dataDomain != null) {\n    try {\n      const result = userDomain(dataDomain, allowDataOverflow);\n      if (isWellFormedNumberDomain(result)) {\n        return extendDomain(result, dataDomain, allowDataOverflow);\n      }\n    } catch {\n      /* ignore the exception and compute domain from data later */\n    }\n  }\n  if (Array.isArray(userDomain) && userDomain.length === 2) {\n    const [providedMin, providedMax] = userDomain;\n    let finalMin, finalMax: string | number | undefined;\n\n    if (providedMin === 'auto') {\n      if (dataDomain != null) {\n        finalMin = Math.min(...dataDomain);\n      }\n    } else if (isNumber(providedMin)) {\n      finalMin = providedMin;\n    } else if (typeof providedMin === 'function') {\n      try {\n        if (dataDomain != null) {\n          finalMin = providedMin(dataDomain?.[0]);\n        }\n      } catch {\n        /* ignore the exception and compute domain from data later */\n      }\n    } else if (typeof providedMin === 'string' && MIN_VALUE_REG.test(providedMin)) {\n      const match = MIN_VALUE_REG.exec(providedMin);\n      if (match == null || dataDomain == null) {\n        finalMin = undefined;\n      } else {\n        const value = +match[1];\n        finalMin = dataDomain[0] - value;\n      }\n    } else {\n      finalMin = dataDomain?.[0];\n    }\n\n    if (providedMax === 'auto') {\n      if (dataDomain != null) {\n        finalMax = Math.max(...dataDomain);\n      }\n    } else if (isNumber(providedMax)) {\n      finalMax = providedMax;\n    } else if (typeof providedMax === 'function') {\n      try {\n        if (dataDomain != null) {\n          finalMax = providedMax(dataDomain?.[1]);\n        }\n      } catch {\n        /* ignore the exception and compute domain from data later */\n      }\n    } else if (typeof providedMax === 'string' && MAX_VALUE_REG.test(providedMax)) {\n      const match = MAX_VALUE_REG.exec(providedMax);\n      if (match == null || dataDomain == null) {\n        finalMax = undefined;\n      } else {\n        const value = +match[1];\n        finalMax = dataDomain[1] + value;\n      }\n    } else {\n      finalMax = dataDomain?.[1];\n    }\n\n    const candidate = [finalMin, finalMax];\n    if (isWellFormedNumberDomain(candidate)) {\n      if (dataDomain == null) {\n        return candidate;\n      }\n      return extendDomain(candidate, dataDomain, allowDataOverflow);\n    }\n  }\n  return undefined;\n}\n","const identity = (i: any) => i;\n\nexport const PLACE_HOLDER = {\n  '@@functional/placeholder': true,\n};\n\nconst isPlaceHolder = (val: any) => val === PLACE_HOLDER;\n\nconst curry0 = (fn: (...args: any[]) => any) =>\n  function _curried(...args: any[]) {\n    if (args.length === 0 || (args.length === 1 && isPlaceHolder(args[0]))) {\n      return _curried;\n    }\n\n    return fn(...args);\n  };\n\nconst curryN = (n: number, fn: (...args: any[]) => any) => {\n  if (n === 1) {\n    return fn;\n  }\n\n  return curry0((...args: any[]) => {\n    const argsLength = args.filter(arg => arg !== PLACE_HOLDER).length;\n\n    if (argsLength >= n) {\n      return fn(...args);\n    }\n\n    return curryN(\n      n - argsLength,\n      curry0((...restArgs: any[]) => {\n        const newArgs = args.map(arg => (isPlaceHolder(arg) ? restArgs.shift() : arg));\n\n        return fn(...newArgs, ...restArgs);\n      }),\n    );\n  });\n};\n\nexport const curry = (fn: (...args: any[]) => any) => curryN(fn.length, fn);\n\nexport const range = (begin: number, end: number) => {\n  const arr = [];\n\n  for (let i = begin; i < end; ++i) {\n    arr[i - begin] = i;\n  }\n\n  return arr;\n};\n\nexport const map = curry((fn: (value: any, index: number, array: any[]) => unknown, arr: any[]) => {\n  if (Array.isArray(arr)) {\n    return arr.map(fn);\n  }\n\n  return Object.keys(arr)\n    .map(key => arr[key])\n    .map(fn);\n});\n\nexport const compose = (...args: any[]) => {\n  if (!args.length) {\n    return identity;\n  }\n\n  const fns = args.reverse();\n  // first function can receive multiply arguments\n  const firstFn = fns[0];\n  const tailsFn = fns.slice(1);\n\n  return (...composeArgs: any[]) => tailsFn.reduce((res, fn) => fn(res), firstFn(...composeArgs));\n};\n\nexport const reverse = <T extends any[] | string>(arr: T): T => {\n  if (Array.isArray(arr)) {\n    return arr.reverse() as T;\n  }\n\n  // can be string\n  return arr.split('').reverse().join('') as T;\n};\n\nexport const memoize = <F extends (...args: unknown[]) => any>(fn: F): F => {\n  let lastArgs: unknown[] | null = null;\n  let lastResult: unknown[] | null = null;\n\n  return ((...args: Parameters<F>) => {\n    if (lastArgs && args.every((val, i) => val === lastArgs?.[i])) {\n      return lastResult;\n    }\n\n    lastArgs = args;\n    lastResult = fn(...args);\n\n    return lastResult;\n  }) as F;\n};\n","/**\n * @fileOverview Some common arithmetic methods\n * @author xile611\n * @date 2015-09-17\n */\nimport Decimal from 'decimal.js-light';\nimport { curry } from './utils';\n\n/**\n * Get the digit count of a number.\n * If the absolute value is in the interval [0.1, 1), the result is 0.\n * If the absolute value is in the interval [0.01, 0.1), the digit count is -1.\n * If the absolute value is in the interval [0.001, 0.01), the digit count is -2.\n *\n * @param  {Number} value The number\n * @return {Integer}      Digit count\n */\nfunction getDigitCount(value: number) {\n  let result;\n\n  if (value === 0) {\n    result = 1;\n  } else {\n    result = Math.floor(new Decimal(value).abs().log(10).toNumber()) + 1;\n  }\n\n  return result;\n}\n\n/**\n * Get the data in the interval [start, end) with a fixed step.\n * Also handles JS calculation precision issues.\n *\n * @param  {Decimal} start Start point\n * @param  {Decimal} end   End point, not included\n * @param  {Decimal} step  Step size\n * @return {Array}         Array of numbers\n */\nfunction rangeStep(start: Decimal, end: Decimal, step: Decimal): Array<number> {\n  let num = new Decimal(start);\n  let i = 0;\n  const result: Array<number> = [];\n\n  // magic number to prevent infinite loop\n  while (num.lt(end) && i < 100000) {\n    result.push(num.toNumber());\n\n    num = num.add(step);\n    i++;\n  }\n\n  return result;\n}\n\n/**\n * Linear interpolation of numbers.\n *\n * @param  {Number} a  Endpoint of the domain\n * @param  {Number} b  Endpoint of the domain\n * @param  {Number} t  A value in [0, 1]\n * @return {Number}    A value in the domain\n */\nconst interpolateNumber = curry((a: number, b: number, t: number) => {\n  const newA = +a;\n  const newB = +b;\n\n  return newA + t * (newB - newA);\n});\n\n/**\n * Inverse operation of linear interpolation.\n *\n * @param  {Number} a Endpoint of the domain\n * @param  {Number} b Endpoint of the domain\n * @param  {Number} x Can be considered as an output value after interpolation\n * @return {Number}   When x is in the range a ~ b, the return value is in [0, 1]\n */\nconst uninterpolateNumber = curry((a: number, b: number, x: number) => {\n  let diff = b - +a;\n\n  diff = diff || Infinity;\n\n  return (x - a) / diff;\n});\n\n/**\n * Inverse operation of linear interpolation with truncation.\n *\n * @param  {Number} a Endpoint of the domain\n * @param  {Number} b Endpoint of the domain\n * @param  {Number} x Can be considered as an output value after interpolation\n * @return {Number}   When x is in the interval a ~ b, the return value is in [0, 1].\n *                    When x is not in the interval a ~ b, it will be truncated to the interval a ~ b.\n */\nconst uninterpolateTruncation = curry((a: number, b: number, x: number) => {\n  let diff = b - +a;\n\n  diff = diff || Infinity;\n\n  return Math.max(0, Math.min(1, (x - a) / diff));\n});\n\nexport { rangeStep, getDigitCount, interpolateNumber, uninterpolateNumber, uninterpolateTruncation };\n","/**\n * @fileOverview calculate tick values of scale\n * @author xile611, arcthur\n * @date 2015-09-17\n */\nimport Decimal from 'decimal.js-light';\nimport { compose, range, memoize, map, reverse } from './util/utils';\nimport { getDigitCount, rangeStep } from './util/arithmetic';\n\n/**\n * Calculate a interval of a minimum value and a maximum value\n *\n * @param  {Number} min       The minimum value\n * @param  {Number} max       The maximum value\n * @return {Array} An interval\n */\nexport const getValidInterval = ([min, max]: [number, number]) => {\n  let [validMin, validMax] = [min, max];\n\n  // exchange\n  if (min > max) {\n    [validMin, validMax] = [max, min];\n  }\n\n  return [validMin, validMax];\n};\n\n/**\n * Calculate the step which is easy to understand between ticks, like 10, 20, 25\n *\n * @param  roughStep        The rough step calculated by dividing the difference by the tickCount\n * @param  allowDecimals    Allow the ticks to be decimals or not\n * @param  correctionFactor A correction factor\n * @return The step which is easy to understand between two ticks\n */\nexport const getFormatStep = (roughStep: Decimal, allowDecimals: boolean, correctionFactor: number) => {\n  if (roughStep.lte(0)) {\n    return new Decimal(0);\n  }\n\n  const digitCount = getDigitCount(roughStep.toNumber());\n  // The ratio between the rough step and the smallest number which has a bigger\n  // order of magnitudes than the rough step\n  const digitCountValue = new Decimal(10).pow(digitCount);\n  const stepRatio = roughStep.div(digitCountValue);\n  // When an integer and a float multiplied, the accuracy of result may be wrong\n  const stepRatioScale = digitCount !== 1 ? 0.05 : 0.1;\n  const amendStepRatio = new Decimal(Math.ceil(stepRatio.div(stepRatioScale).toNumber()))\n    .add(correctionFactor)\n    .mul(stepRatioScale);\n\n  const formatStep = amendStepRatio.mul(digitCountValue);\n\n  return allowDecimals ? new Decimal(formatStep.toNumber()) : new Decimal(Math.ceil(formatStep.toNumber()));\n};\n\n/**\n * calculate the ticks when the minimum value equals to the maximum value\n *\n * @param  value         The minimum value which is also the maximum value\n * @param  tickCount     The count of ticks\n * @param  allowDecimals Allow the ticks to be decimals or not\n * @return array of ticks\n */\nexport const getTickOfSingleValue = (value: number, tickCount: number, allowDecimals: boolean): Array<number> => {\n  let step: Decimal = new Decimal(1);\n  // calculate the middle value of ticks\n  let middle = new Decimal(value);\n\n  if (!middle.isint() && allowDecimals) {\n    const absVal = Math.abs(value);\n\n    if (absVal < 1) {\n      // The step should be a float number when the difference is smaller than 1\n      step = new Decimal(10).pow(getDigitCount(value) - 1);\n\n      middle = new Decimal(Math.floor(middle.div(step).toNumber())).mul(step);\n    } else if (absVal > 1) {\n      // Return the maximum integer which is smaller than 'value' when 'value' is greater than 1\n      middle = new Decimal(Math.floor(value));\n    }\n  } else if (value === 0) {\n    middle = new Decimal(Math.floor((tickCount - 1) / 2));\n  } else if (!allowDecimals) {\n    middle = new Decimal(Math.floor(value));\n  }\n\n  const middleIndex = Math.floor((tickCount - 1) / 2);\n\n  const fn = compose(\n    map((n: number) => middle.add(new Decimal(n - middleIndex).mul(step)).toNumber()),\n    range,\n  );\n\n  return fn(0, tickCount);\n};\n\n/**\n * Calculate the step\n *\n * @param  min              The minimum value of an interval\n * @param  max              The maximum value of an interval\n * @param  tickCount        The count of ticks\n * @param  allowDecimals    Allow the ticks to be decimals or not\n * @param  correctionFactor A correction factor\n * @return The step, minimum value of ticks, maximum value of ticks\n */\nexport const calculateStep = (\n  min: number,\n  max: number,\n  tickCount: number,\n  allowDecimals: boolean,\n  correctionFactor: number = 0,\n): {\n  step: Decimal;\n  tickMin: Decimal;\n  tickMax: Decimal;\n} => {\n  // dirty hack (for recharts' test)\n  if (!Number.isFinite((max - min) / (tickCount - 1))) {\n    return {\n      step: new Decimal(0),\n      tickMin: new Decimal(0),\n      tickMax: new Decimal(0),\n    };\n  }\n\n  // The step which is easy to understand between two ticks\n  const step = getFormatStep(new Decimal(max).sub(min).div(tickCount - 1), allowDecimals, correctionFactor);\n\n  // A medial value of ticks\n  let middle;\n\n  // When 0 is inside the interval, 0 should be a tick\n  if (min <= 0 && max >= 0) {\n    middle = new Decimal(0);\n  } else {\n    // calculate the middle value\n    middle = new Decimal(min).add(max).div(2);\n    // minus modulo value\n    middle = middle.sub(new Decimal(middle).mod(step));\n  }\n\n  let belowCount = Math.ceil(middle.sub(min).div(step).toNumber());\n  let upCount = Math.ceil(new Decimal(max).sub(middle).div(step).toNumber());\n  const scaleCount = belowCount + upCount + 1;\n\n  if (scaleCount > tickCount) {\n    // When more ticks need to cover the interval, step should be bigger.\n    return calculateStep(min, max, tickCount, allowDecimals, correctionFactor + 1);\n  }\n  if (scaleCount < tickCount) {\n    // When less ticks can cover the interval, we should add some additional ticks\n    upCount = max > 0 ? upCount + (tickCount - scaleCount) : upCount;\n    belowCount = max > 0 ? belowCount : belowCount + (tickCount - scaleCount);\n  }\n\n  return {\n    step,\n    tickMin: middle.sub(new Decimal(belowCount).mul(step)),\n    tickMax: middle.add(new Decimal(upCount).mul(step)),\n  };\n};\n\n/**\n * Calculate the ticks of an interval. Ticks can appear outside the interval\n * if it makes them more rounded and nice.\n *\n * @param tuple of [min,max] min: The minimum value, max: The maximum value\n * @param tickCount     The count of ticks\n * @param allowDecimals Allow the ticks to be decimals or not\n * @return array of ticks\n */\nfunction getNiceTickValuesFn([min, max]: [number, number], tickCount = 6, allowDecimals = true): number[] {\n  // More than two ticks should be return\n  const count = Math.max(tickCount, 2);\n  const [cormin, cormax] = getValidInterval([min, max]);\n\n  if (cormin === -Infinity || cormax === Infinity) {\n    const values =\n      cormax === Infinity\n        ? [cormin, ...range(0, tickCount - 1).map(() => Infinity)]\n        : [...range(0, tickCount - 1).map(() => -Infinity), cormax];\n\n    return min > max ? reverse(values) : values;\n  }\n\n  if (cormin === cormax) {\n    return getTickOfSingleValue(cormin, tickCount, allowDecimals);\n  }\n\n  // Get the step between two ticks\n  const { step, tickMin, tickMax } = calculateStep(cormin, cormax, count, allowDecimals, 0);\n\n  const values = rangeStep(tickMin, tickMax.add(new Decimal(0.1).mul(step)), step);\n\n  return min > max ? reverse(values) : values;\n}\n\n/**\n * Calculate the ticks of an interval.\n * Ticks will be constrained to the interval [min, max] even if it makes them less rounded and nice.\n *\n * @param tuple of [min,max] min: The minimum value, max: The maximum value\n * @param tickCount     The count of ticks. This function may return less than tickCount ticks if the interval is too small.\n * @param allowDecimals Allow the ticks to be decimals or not\n * @return array of ticks\n */\nfunction getTickValuesFixedDomainFn([min, max]: readonly [number, number], tickCount: number, allowDecimals = true) {\n  // More than two ticks should be return\n  const [cormin, cormax] = getValidInterval([min, max]);\n\n  if (cormin === -Infinity || cormax === Infinity) {\n    return [min, max];\n  }\n\n  if (cormin === cormax) {\n    return [cormin];\n  }\n\n  const count = Math.max(tickCount, 2);\n  const step = getFormatStep(new Decimal(cormax).sub(cormin).div(count - 1), allowDecimals, 0);\n  let values = [...rangeStep(new Decimal(cormin), new Decimal(cormax), step), cormax];\n\n  if (allowDecimals === false) {\n    /*\n     * allowDecimals is false means that we want to have integer ticks.\n     * The step is guaranteed to be an integer in the code above which is great start\n     * but when the first step is not an integer, it will start stepping from a decimal value anyway.\n     * So we need to round all the values to integers after the fact.\n     */\n    values = values.map(value => Math.round(value));\n  }\n\n  return min > max ? reverse(values) : values;\n}\n\nexport const getNiceTickValues = memoize(getNiceTickValuesFn);\nexport const getTickValuesFixedDomain = memoize(getTickValuesFixedDomainFn);\n","import { RechartsRootState } from '../store';\nimport { StackOffsetType } from '../../util/types';\nimport { SyncMethod } from '../../synchronisation/types';\n\nexport const selectRootMaxBarSize = (state: RechartsRootState): number | undefined => state.rootProps.maxBarSize;\nexport const selectBarGap = (state: RechartsRootState): string | number | undefined => state.rootProps.barGap;\nexport const selectBarCategoryGap = (state: RechartsRootState): string | number | undefined =>\n  state.rootProps.barCategoryGap;\nexport const selectRootBarSize = (state: RechartsRootState): string | number | undefined => state.rootProps.barSize;\nexport const selectStackOffsetType = (state: RechartsRootState): StackOffsetType => state.rootProps.stackOffset;\nexport const selectChartName = (state: RechartsRootState) => state.options.chartName;\n\nexport const selectSyncId = (state: RechartsRootState) => state.rootProps.syncId;\nexport const selectSyncMethod = (state: RechartsRootState): SyncMethod => state.rootProps.syncMethod;\nexport const selectEventEmitter = (state: RechartsRootState) => state.options.eventEmitter;\n","import { Props } from './PolarAngleAxis';\n\nexport const defaultPolarAngleAxisProps = {\n  allowDuplicatedCategory: true, // if I set this to false then Tooltip synchronisation stops working in Radar, wtf\n  angleAxisId: 0,\n  axisLine: true,\n  cx: 0,\n  cy: 0,\n  orientation: 'outer',\n  reversed: false,\n  scale: 'auto',\n  tick: true,\n  tickLine: true,\n  tickSize: 8,\n  type: 'category',\n} as const satisfies Props;\n","import { Props } from './PolarRadiusAxis';\n\nexport const defaultPolarRadiusAxisProps = {\n  allowDataOverflow: false,\n  allowDuplicatedCategory: true,\n  angle: 0,\n  axisLine: true,\n  cx: 0,\n  cy: 0,\n  orientation: 'right',\n  radiusAxisId: 0,\n  scale: 'auto',\n  stroke: '#ccc',\n  tick: true,\n  tickCount: 5,\n  type: 'number',\n} as const satisfies Props;\n","import { BaseCartesianAxis } from '../../cartesianAxisSlice';\nimport { AxisRange } from '../axisSelectors';\n\nexport const combineAxisRangeWithReverse = (\n  axisSettings: BaseCartesianAxis | undefined,\n  axisRange: AxisRange | undefined,\n): AxisRange | undefined => {\n  if (!axisSettings || !axisRange) {\n    return undefined;\n  }\n  if (axisSettings?.reversed) {\n    return [axisRange[1], axisRange[0]];\n  }\n  return axisRange;\n};\n","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport { AxisId } from '../cartesianAxisSlice';\nimport { AngleAxisSettings, RadiusAxisSettings } from '../polarAxisSlice';\nimport { PolarChartOptions } from '../polarOptionsSlice';\nimport { selectChartHeight, selectChartWidth } from './containerSelectors';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport { getMaxRadius } from '../../util/PolarUtils';\nimport { getPercentValue } from '../../util/DataUtils';\nimport { LayoutType, PolarViewBoxRequired } from '../../util/types';\nimport { defaultPolarAngleAxisProps } from '../../polar/defaultPolarAngleAxisProps';\nimport { defaultPolarRadiusAxisProps } from '../../polar/defaultPolarRadiusAxisProps';\nimport { AxisRange } from './axisSelectors';\nimport { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\n\nexport const implicitAngleAxis: AngleAxisSettings = {\n  allowDataOverflow: false,\n  allowDecimals: false,\n  allowDuplicatedCategory: false, // defaultPolarAngleAxisProps.allowDuplicatedCategory has it set to true but the actual axis rendering ignores the prop because reasons,\n  dataKey: undefined,\n  domain: undefined,\n  id: defaultPolarAngleAxisProps.angleAxisId,\n  includeHidden: false,\n  name: undefined,\n  reversed: defaultPolarAngleAxisProps.reversed,\n  scale: defaultPolarAngleAxisProps.scale,\n  tick: defaultPolarAngleAxisProps.tick,\n  tickCount: undefined,\n  ticks: undefined,\n  type: defaultPolarAngleAxisProps.type,\n  unit: undefined,\n};\n\nexport const implicitRadiusAxis: RadiusAxisSettings = {\n  allowDataOverflow: defaultPolarRadiusAxisProps.allowDataOverflow,\n  allowDecimals: false,\n  allowDuplicatedCategory: defaultPolarRadiusAxisProps.allowDuplicatedCategory,\n  dataKey: undefined,\n  domain: undefined,\n  id: defaultPolarRadiusAxisProps.radiusAxisId,\n  includeHidden: false,\n  name: undefined,\n  reversed: false,\n  scale: defaultPolarRadiusAxisProps.scale,\n  tick: defaultPolarRadiusAxisProps.tick,\n  tickCount: defaultPolarRadiusAxisProps.tickCount,\n  ticks: undefined,\n  type: defaultPolarRadiusAxisProps.type,\n  unit: undefined,\n};\n\nexport const implicitRadialBarAngleAxis: AngleAxisSettings = {\n  allowDataOverflow: false,\n  allowDecimals: false,\n  allowDuplicatedCategory: defaultPolarAngleAxisProps.allowDuplicatedCategory,\n  dataKey: undefined,\n  domain: undefined,\n  id: defaultPolarAngleAxisProps.angleAxisId,\n  includeHidden: false,\n  name: undefined,\n  reversed: false,\n  scale: defaultPolarAngleAxisProps.scale,\n  tick: defaultPolarAngleAxisProps.tick,\n  tickCount: undefined,\n  ticks: undefined,\n  type: 'number',\n  unit: undefined,\n};\n\nexport const implicitRadialBarRadiusAxis: RadiusAxisSettings = {\n  allowDataOverflow: defaultPolarRadiusAxisProps.allowDataOverflow,\n  allowDecimals: false,\n  allowDuplicatedCategory: defaultPolarRadiusAxisProps.allowDuplicatedCategory,\n  dataKey: undefined,\n  domain: undefined,\n  id: defaultPolarRadiusAxisProps.radiusAxisId,\n  includeHidden: false,\n  name: undefined,\n  reversed: false,\n  scale: defaultPolarRadiusAxisProps.scale,\n  tick: defaultPolarRadiusAxisProps.tick,\n  tickCount: defaultPolarRadiusAxisProps.tickCount,\n  ticks: undefined,\n  type: 'category',\n  unit: undefined,\n};\n\nexport const selectAngleAxis = (state: RechartsRootState, angleAxisId: AxisId): AngleAxisSettings => {\n  if (state.polarAxis.angleAxis[angleAxisId] != null) {\n    return state.polarAxis.angleAxis[angleAxisId];\n  }\n  if (state.layout.layoutType === 'radial') {\n    return implicitRadialBarAngleAxis;\n  }\n  return implicitAngleAxis;\n};\n\nexport const selectRadiusAxis = (state: RechartsRootState, radiusAxisId: AxisId): RadiusAxisSettings => {\n  if (state.polarAxis.radiusAxis[radiusAxisId] != null) {\n    return state.polarAxis.radiusAxis[radiusAxisId];\n  }\n  if (state.layout.layoutType === 'radial') {\n    return implicitRadialBarRadiusAxis;\n  }\n  return implicitRadiusAxis;\n};\n\nexport const selectPolarOptions = (state: RechartsRootState): PolarChartOptions | null => state.polarOptions;\n\nexport const selectMaxRadius: (state: RechartsRootState) => number = createSelector(\n  [selectChartWidth, selectChartHeight, selectChartOffsetInternal],\n  getMaxRadius,\n);\n\nconst selectInnerRadius: (state: RechartsRootState) => number | undefined = createSelector(\n  [selectPolarOptions, selectMaxRadius],\n  (polarChartOptions: PolarChartOptions | null, maxRadius: number) => {\n    if (polarChartOptions == null) {\n      return undefined;\n    }\n    return getPercentValue(polarChartOptions.innerRadius, maxRadius, 0);\n  },\n);\n\nexport const selectOuterRadius: (state: RechartsRootState) => number | undefined = createSelector(\n  [selectPolarOptions, selectMaxRadius],\n  (polarChartOptions: PolarChartOptions | null, maxRadius: number) => {\n    if (polarChartOptions == null) {\n      return undefined;\n    }\n    return getPercentValue(polarChartOptions.outerRadius, maxRadius, maxRadius * 0.8);\n  },\n);\n\nconst combineAngleAxisRange = (polarOptions: PolarChartOptions | null): AxisRange => {\n  if (polarOptions == null) {\n    return [0, 0];\n  }\n  const { startAngle, endAngle } = polarOptions;\n  return [startAngle, endAngle];\n};\n\nexport const selectAngleAxisRange: (state: RechartsRootState) => AxisRange = createSelector(\n  [selectPolarOptions],\n  combineAngleAxisRange,\n);\n\nexport const selectAngleAxisRangeWithReversed: (\n  state: RechartsRootState,\n  angleAxisId: AxisId,\n) => AxisRange | undefined = createSelector([selectAngleAxis, selectAngleAxisRange], combineAxisRangeWithReverse);\n\nexport const selectRadiusAxisRange: (state: RechartsRootState, radiusAxisId: AxisId) => AxisRange | undefined =\n  createSelector([selectMaxRadius, selectInnerRadius, selectOuterRadius], (maxRadius, innerRadius, outerRadius) => {\n    if (maxRadius == null || innerRadius == null || outerRadius == null) {\n      return undefined;\n    }\n    return [innerRadius, outerRadius];\n  });\n\nexport const selectRadiusAxisRangeWithReversed: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n) => AxisRange | undefined = createSelector([selectRadiusAxis, selectRadiusAxisRange], combineAxisRangeWithReverse);\n\nexport const selectPolarViewBox: (state: RechartsRootState) => PolarViewBoxRequired | undefined = createSelector(\n  [selectChartLayout, selectPolarOptions, selectInnerRadius, selectOuterRadius, selectChartWidth, selectChartHeight],\n  (\n    layout: LayoutType,\n    polarOptions: PolarChartOptions | null,\n    innerRadius,\n    outerRadius,\n    width,\n    height,\n  ): PolarViewBoxRequired | undefined => {\n    if (\n      (layout !== 'centric' && layout !== 'radial') ||\n      polarOptions == null ||\n      innerRadius == null ||\n      outerRadius == null\n    ) {\n      return undefined;\n    }\n    const { cx, cy, startAngle, endAngle } = polarOptions;\n    return {\n      cx: getPercentValue(cx, width, width / 2),\n      cy: getPercentValue(cy, height, height / 2),\n      innerRadius,\n      outerRadius,\n      startAngle,\n      endAngle,\n      clockWise: false,\n    };\n  },\n);\n","import { RechartsRootState } from '../store';\n\nexport const pickAxisType = <T>(_state: RechartsRootState, axisType: T): T => axisType;\n","import { RechartsRootState } from '../store';\nimport { AxisId } from '../cartesianAxisSlice';\n\nexport const pickAxisId = (_state: RechartsRootState, _axisType: unknown, axisId: AxisId): AxisId => axisId;\n","import { StackSeriesIdentifier } from './stackTypes';\nimport { MaybeStackedGraphicalItem } from '../../state/types/StackedGraphicalItem';\n\n/**\n * Returns identifier for stack series which is one individual graphical item in the stack.\n * @param graphicalItem - The graphical item representing the series in the stack.\n * @return The identifier for the series in the stack\n */\nexport function getStackSeriesIdentifier(\n  graphicalItem: MaybeStackedGraphicalItem | undefined,\n): StackSeriesIdentifier | undefined {\n  return graphicalItem?.id;\n}\n","import { RechartsRootState } from '../store';\nimport { XorYType } from './axisSelectors';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\n\nexport const selectTooltipAxisType = (state: RechartsRootState): XorYType => {\n  const layout = selectChartLayout(state);\n\n  if (layout === 'horizontal') {\n    return 'xAxis';\n  }\n\n  if (layout === 'vertical') {\n    return 'yAxis';\n  }\n\n  if (layout === 'centric') {\n    return 'angleAxis';\n  }\n\n  return 'radiusAxis';\n};\n","import { RechartsRootState } from '../store';\nimport { AxisId } from '../cartesianAxisSlice';\n\nexport const selectTooltipAxisId = (state: RechartsRootState): AxisId => state.tooltip.settings.axisId;\n","import { RechartsRootState } from '../store';\nimport { AxisWithTicksSettings, selectAxisSettings } from './axisSelectors';\nimport { selectTooltipAxisType } from './selectTooltipAxisType';\nimport { selectTooltipAxisId } from './selectTooltipAxisId';\n\nexport const selectTooltipAxis = (state: RechartsRootState): AxisWithTicksSettings => {\n  const axisType = selectTooltipAxisType(state);\n  const axisId = selectTooltipAxisId(state);\n  return selectAxisSettings(state, axisType, axisId);\n};\n","import { ChartDataState } from '../../chartDataSlice';\nimport { BaseCartesianAxis } from '../../cartesianAxisSlice';\nimport { getStackSeriesIdentifier } from '../../../util/stacks/getStackSeriesIdentifier';\nimport { getValueByDataKey } from '../../../util/ChartUtils';\nimport { StackSeriesIdentifier } from '../../../util/stacks/stackTypes';\nimport { DefinitelyStackedGraphicalItem } from '../../types/StackedGraphicalItem';\n\n/**\n * In a stacked chart, each graphical item has its own data. That data could be either:\n * - defined on the chart root, in which case the item gets a unique dataKey\n * - or defined on the item itself, in which case multiple items can share the same dataKey\n *\n * That means we cannot use the dataKey as a unique identifier for the item.\n *\n * This type represents a single data point in a stacked chart, where each key is a series identifier\n * and the value is the numeric value for that series using the numerical axis dataKey.\n */\nexport type DisplayedStackedDataPoint = Record<StackSeriesIdentifier, number>;\n\nexport type DisplayedStackedData = ReadonlyArray<DisplayedStackedDataPoint>;\n\nexport function combineDisplayedStackedData(\n  stackedGraphicalItems: ReadonlyArray<DefinitelyStackedGraphicalItem>,\n  { chartData = [] }: ChartDataState,\n  tooltipAxisSettings: BaseCartesianAxis,\n): DisplayedStackedData {\n  const tooltipDataKey = tooltipAxisSettings?.dataKey;\n\n  // A map of tooltip data keys to the stacked data points\n  const knownItemsByDataKey = new Map<string | number, DisplayedStackedDataPoint>();\n\n  stackedGraphicalItems.forEach(item => {\n    // If there is no data on the individual item then we use the root chart data\n    const resolvedData = item.data ?? chartData;\n    if (resolvedData == null || resolvedData.length === 0) {\n      // if that didn't work then we skip this item\n      return;\n    }\n    const stackIdentifier = getStackSeriesIdentifier(item);\n    resolvedData.forEach((entry, index) => {\n      const tooltipValue = tooltipDataKey == null ? index : String(getValueByDataKey(entry, tooltipDataKey, null));\n      const numericValue = getValueByDataKey(entry, item.dataKey, 0);\n      let curr;\n      if (knownItemsByDataKey.has(tooltipValue)) {\n        curr = knownItemsByDataKey.get(tooltipValue);\n      } else {\n        curr = {};\n      }\n      Object.assign(curr, { [stackIdentifier]: numericValue });\n      knownItemsByDataKey.set(tooltipValue, curr);\n    });\n  });\n  return Array.from(knownItemsByDataKey.values());\n}\n","import { GraphicalItemSettings } from '../graphicalItemsSlice';\nimport { NormalizedStackId } from '../../util/ChartUtils';\nimport { DataKey } from '../../util/types';\n\n/**\n * Some graphical items allow data stacking. The stacks are optional,\n * so all props here are optional too.\n */\nexport interface MaybeStackedGraphicalItem extends GraphicalItemSettings {\n  stackId: NormalizedStackId | undefined;\n  /**\n   * Bars have a size but Area does not.\n   */\n  barSize: number | string | undefined;\n}\n\n/**\n * Some graphical items allow data stacking.\n * This interface is used to represent the items that are stacked\n * because the user has provided the stackId and dataKey properties.\n */\nexport interface DefinitelyStackedGraphicalItem extends MaybeStackedGraphicalItem {\n  stackId: NormalizedStackId;\n  dataKey: DataKey<any>;\n}\n\nexport function isStacked(graphicalItem: MaybeStackedGraphicalItem): graphicalItem is DefinitelyStackedGraphicalItem {\n  return graphicalItem.stackId != null && graphicalItem.dataKey != null;\n}\n","import { createSelector } from 'reselect';\nimport range from 'es-toolkit/compat/range';\nimport * as d3Scales from 'victory-vendor/d3-scale';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport {\n  checkDomainOfScale,\n  getDomainOfStackGroups,\n  getStackedData,\n  getValueByDataKey,\n  isCategoricalAxis,\n  RechartsScale,\n  StackId,\n} from '../../util/ChartUtils';\nimport {\n  AxisDomain,\n  AxisTick,\n  AxisType,\n  CartesianTickItem,\n  CategoricalDomain,\n  ChartOffsetInternal,\n  Coordinate,\n  LayoutType,\n  NumberDomain,\n  Size,\n  StackOffsetType,\n  TickItem,\n} from '../../util/types';\nimport {\n  AxisId,\n  BaseCartesianAxis,\n  CartesianAxisSettings,\n  XAxisOrientation,\n  XAxisSettings,\n  YAxisOrientation,\n  YAxisSettings,\n  ZAxisSettings,\n} from '../cartesianAxisSlice';\nimport { RechartsRootState } from '../store';\nimport { selectChartDataWithIndexes, selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';\nimport {\n  isWellFormedNumberDomain,\n  numericalDomainSpecifiedWithoutRequiringData,\n  parseNumericalUserDomain,\n} from '../../util/isDomainSpecifiedByUser';\nimport { AppliedChartData, ChartData, ChartDataState } from '../chartDataSlice';\nimport { getPercentValue, hasDuplicate, isNan, isNumber, isNumOrStr, mathSign, upperFirst } from '../../util/DataUtils';\nimport {\n  CartesianGraphicalItemSettings,\n  GraphicalItemSettings,\n  PolarGraphicalItemSettings,\n} from '../graphicalItemsSlice';\nimport { isWellBehavedNumber } from '../../util/isWellBehavedNumber';\nimport { getNiceTickValues, getTickValuesFixedDomain } from '../../util/scale';\nimport {\n  ReferenceAreaSettings,\n  ReferenceDotSettings,\n  ReferenceElementSettings,\n  ReferenceLineSettings,\n} from '../referenceElementsSlice';\nimport { selectChartHeight, selectChartWidth } from './containerSelectors';\nimport { selectAllXAxes, selectAllYAxes } from './selectAllAxes';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport { AxisPropsForCartesianGridTicksGeneration } from '../../cartesian/CartesianGrid';\nimport { BrushDimensions, selectBrushDimensions, selectBrushSettings } from './brushSelectors';\nimport { selectBarCategoryGap, selectChartName, selectStackOffsetType } from './rootPropsSelectors';\nimport { selectAngleAxis, selectAngleAxisRange, selectRadiusAxis, selectRadiusAxisRange } from './polarAxisSelectors';\nimport { AngleAxisSettings, RadiusAxisSettings } from '../polarAxisSlice';\nimport { pickAxisType } from './pickAxisType';\nimport { pickAxisId } from './pickAxisId';\nimport { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';\nimport { DEFAULT_Y_AXIS_WIDTH } from '../../util/Constants';\nimport { getStackSeriesIdentifier } from '../../util/stacks/getStackSeriesIdentifier';\nimport { AllStackGroups, StackGroup } from '../../util/stacks/stackTypes';\nimport { selectTooltipAxis } from './selectTooltipAxis';\nimport { combineDisplayedStackedData, DisplayedStackedData } from './combiners/combineDisplayedStackedData';\nimport { DefinitelyStackedGraphicalItem, isStacked } from '../types/StackedGraphicalItem';\nimport { ErrorBarsSettings, ErrorBarsState } from '../errorBarSlice';\n\nconst defaultNumericDomain: AxisDomain = [0, 'auto'];\n\n/**\n * angle, radius, X, Y, and Z axes all have domain and range and scale and associated settings\n */\ntype XorYorZType = 'xAxis' | 'yAxis' | 'zAxis' | 'radiusAxis' | 'angleAxis';\n\n/**\n * X and Y axes have ticks. Z axis is never displayed and so it lacks ticks\n * and tick settings.\n */\nexport type XorYType = 'xAxis' | 'yAxis' | 'angleAxis' | 'radiusAxis';\n\nexport type AxisWithTicksSettings = XAxisSettings | YAxisSettings | AngleAxisSettings | RadiusAxisSettings;\n\n/**\n * If an axis is not explicitly defined as an element,\n * we still need to render something in the chart and we need\n * some object to hold the domain and default settings.\n */\nexport const implicitXAxis: XAxisSettings = {\n  allowDataOverflow: false,\n  allowDecimals: true,\n  allowDuplicatedCategory: true,\n  angle: 0,\n  dataKey: undefined,\n  domain: undefined,\n  height: 30,\n  hide: true,\n  id: 0,\n  includeHidden: false,\n  interval: 'preserveEnd',\n  minTickGap: 5,\n  mirror: false,\n  name: undefined,\n  orientation: 'bottom',\n  padding: { left: 0, right: 0 },\n  reversed: false,\n  scale: 'auto',\n  tick: true,\n  tickCount: 5,\n  tickFormatter: undefined,\n  ticks: undefined,\n  type: 'category',\n  unit: undefined,\n};\n\nexport const selectXAxisSettings = (state: RechartsRootState, axisId: AxisId): XAxisSettings => {\n  const axis = state.cartesianAxis.xAxis[axisId];\n  if (axis == null) {\n    return implicitXAxis;\n  }\n  return axis;\n};\n\n/**\n * If an axis is not explicitly defined as an element,\n * we still need to render something in the chart and we need\n * some object to hold the domain and default settings.\n */\nexport const implicitYAxis: YAxisSettings = {\n  allowDataOverflow: false,\n  allowDecimals: true,\n  allowDuplicatedCategory: true,\n  angle: 0,\n  dataKey: undefined,\n  domain: defaultNumericDomain,\n  hide: true,\n  id: 0,\n  includeHidden: false,\n  interval: 'preserveEnd',\n  minTickGap: 5,\n  mirror: false,\n  name: undefined,\n  orientation: 'left',\n  padding: { top: 0, bottom: 0 },\n  reversed: false,\n  scale: 'auto',\n  tick: true,\n  tickCount: 5,\n  tickFormatter: undefined,\n  ticks: undefined,\n  type: 'number',\n  unit: undefined,\n  width: DEFAULT_Y_AXIS_WIDTH,\n};\n\nexport const selectYAxisSettings = (state: RechartsRootState, axisId: AxisId): YAxisSettings => {\n  const axis = state.cartesianAxis.yAxis[axisId];\n  if (axis == null) {\n    return implicitYAxis;\n  }\n  return axis;\n};\n\nexport const implicitZAxis: ZAxisSettings = {\n  domain: [0, 'auto'],\n  includeHidden: false,\n  reversed: false,\n  allowDataOverflow: false,\n  allowDuplicatedCategory: false,\n  dataKey: undefined,\n  id: 0,\n  name: '',\n  range: [64, 64],\n  scale: 'auto',\n  type: 'number',\n  unit: '',\n};\n\nexport const selectZAxisSettings = (state: RechartsRootState, axisId: AxisId): ZAxisSettings => {\n  const axis = state.cartesianAxis.zAxis[axisId];\n  if (axis == null) {\n    return implicitZAxis;\n  }\n  return axis;\n};\n\nexport const selectBaseAxis = (state: RechartsRootState, axisType: XorYorZType, axisId: AxisId): BaseCartesianAxis => {\n  switch (axisType) {\n    case 'xAxis': {\n      return selectXAxisSettings(state, axisId);\n    }\n    case 'yAxis': {\n      return selectYAxisSettings(state, axisId);\n    }\n    case 'zAxis': {\n      return selectZAxisSettings(state, axisId);\n    }\n    case 'angleAxis': {\n      return selectAngleAxis(state, axisId);\n    }\n    case 'radiusAxis': {\n      return selectRadiusAxis(state, axisId);\n    }\n    default:\n      throw new Error(`Unexpected axis type: ${axisType}`);\n  }\n};\n\nconst selectCartesianAxisSettings = (\n  state: RechartsRootState,\n  axisType: 'xAxis' | 'yAxis',\n  axisId: AxisId,\n): XAxisSettings | YAxisSettings => {\n  switch (axisType) {\n    case 'xAxis': {\n      return selectXAxisSettings(state, axisId);\n    }\n    case 'yAxis': {\n      return selectYAxisSettings(state, axisId);\n    }\n    default:\n      throw new Error(`Unexpected axis type: ${axisType}`);\n  }\n};\n\n/**\n * Selects either an X or Y axis. Doesn't work with Z axis - for that, instead use selectBaseAxis.\n * @param state Root state\n * @param axisType xAxis | yAxis\n * @param axisId xAxisId | yAxisId\n * @returns axis settings object\n */\nexport const selectAxisSettings = (\n  state: RechartsRootState,\n  axisType: XorYType,\n  axisId: AxisId,\n): AxisWithTicksSettings => {\n  switch (axisType) {\n    case 'xAxis': {\n      return selectXAxisSettings(state, axisId);\n    }\n    case 'yAxis': {\n      return selectYAxisSettings(state, axisId);\n    }\n    case 'angleAxis': {\n      return selectAngleAxis(state, axisId);\n    }\n    case 'radiusAxis': {\n      return selectRadiusAxis(state, axisId);\n    }\n    default:\n      throw new Error(`Unexpected axis type: ${axisType}`);\n  }\n};\n\n/**\n * @param state RechartsRootState\n * @return boolean true if there is at least one Bar or RadialBar\n */\nexport const selectHasBar = (state: RechartsRootState): boolean =>\n  state.graphicalItems.cartesianItems.some(item => item.type === 'bar') ||\n  state.graphicalItems.polarItems.some(item => item.type === 'radialBar');\n\n/**\n * Filters CartesianGraphicalItemSettings by the relevant axis ID\n * @param axisType 'xAxis' | 'yAxis' | 'zAxis' | 'radiusAxis' | 'angleAxis'\n * @param axisId from props, defaults to 0\n *\n * @returns Predicate function that return true for CartesianGraphicalItemSettings that are relevant to the specified axis\n */\nexport function itemAxisPredicate(axisType: XorYorZType, axisId: AxisId) {\n  return (item: CartesianGraphicalItemSettings | PolarGraphicalItemSettings) => {\n    switch (axisType) {\n      case 'xAxis':\n        // This is sensitive to the data type, as 0 !== '0'. I wonder if we should be more flexible. How does 2.x branch behave? TODO write test for that\n        return 'xAxisId' in item && item.xAxisId === axisId;\n      case 'yAxis':\n        return 'yAxisId' in item && item.yAxisId === axisId;\n      case 'zAxis':\n        return 'zAxisId' in item && item.zAxisId === axisId;\n      case 'angleAxis':\n        return 'angleAxisId' in item && item.angleAxisId === axisId;\n      case 'radiusAxis':\n        return 'radiusAxisId' in item && item.radiusAxisId === axisId;\n      default:\n        return false;\n    }\n  };\n}\n\nexport const selectUnfilteredCartesianItems = (\n  state: RechartsRootState,\n): ReadonlyArray<CartesianGraphicalItemSettings> => state.graphicalItems.cartesianItems;\n\nconst selectAxisPredicate: (\n  _state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => (item: CartesianGraphicalItemSettings) => boolean = createSelector([pickAxisType, pickAxisId], itemAxisPredicate);\n\nexport const combineGraphicalItemsSettings = <T extends GraphicalItemSettings>(\n  graphicalItems: ReadonlyArray<T>,\n  axisSettings: BaseCartesianAxis,\n  axisPredicate: (item: T) => boolean,\n) =>\n  graphicalItems.filter(axisPredicate).filter(item => {\n    if (axisSettings?.includeHidden === true) {\n      return true;\n    }\n    return !item.hide;\n  });\n\nexport const selectCartesianItemsSettings: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => ReadonlyArray<CartesianGraphicalItemSettings> = createSelector(\n  [selectUnfilteredCartesianItems, selectBaseAxis, selectAxisPredicate],\n  combineGraphicalItemsSettings,\n);\n\nexport const selectStackedCartesianItemsSettings: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => ReadonlyArray<DefinitelyStackedGraphicalItem> = createSelector(\n  [selectCartesianItemsSettings],\n  (cartesianItems: ReadonlyArray<CartesianGraphicalItemSettings>): ReadonlyArray<DefinitelyStackedGraphicalItem> => {\n    return cartesianItems.filter(item => item.type === 'area' || item.type === 'bar').filter(isStacked);\n  },\n);\n\nexport const filterGraphicalNotStackedItems = (\n  cartesianItems: ReadonlyArray<GraphicalItemSettings>,\n): ReadonlyArray<GraphicalItemSettings> =>\n  cartesianItems.filter(item => !('stackId' in item) || item.stackId === undefined);\n\nconst selectCartesianItemsSettingsExceptStacked: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => ReadonlyArray<GraphicalItemSettings> = createSelector(\n  [selectCartesianItemsSettings],\n  filterGraphicalNotStackedItems,\n);\n\nexport const combineGraphicalItemsData = (cartesianItems: ReadonlyArray<GraphicalItemSettings>) =>\n  cartesianItems\n    .map(item => item.data)\n    .filter(Boolean)\n    .flat(1);\n\n/**\n * This is a \"cheap\" selector - it returns the data but doesn't iterate them, so it is not sensitive on the array length.\n * Also does not apply dataKey yet.\n * @param state RechartsRootState\n * @returns data defined on the chart graphical items, such as Line or Scatter or Pie, and filtered with appropriate dataKey\n */\nexport const selectCartesianGraphicalItemsData: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => ChartData = createSelector([selectCartesianItemsSettings], combineGraphicalItemsData);\n\nexport const combineDisplayedData = (\n  graphicalItemsData: ChartData,\n  { chartData = [], dataStartIndex, dataEndIndex }: ChartDataState,\n): ChartData => {\n  if (graphicalItemsData.length > 0) {\n    /*\n     * There is no slicing when data is defined on graphical items. Why?\n     * Because Brush ignores data defined on graphical items,\n     * and does not render.\n     * So Brush will never show up in a Scatter chart for example.\n     * This is something we will need to fix.\n     *\n     * Now, when the root chart data is not defined, the dataEndIndex is 0,\n     * which means the itemsData will be sliced to an empty array anyway.\n     * But that's an implementation detail, and we can fix that too.\n     *\n     * Also, in absence of Axis dataKey, we use the dataKey from each item, respectively.\n     * This is the usual pattern for numerical axis, that is the one where bars go up:\n     * users don't specify any dataKey by default and expect the axis to \"just match the data\".\n     */\n    return graphicalItemsData;\n  }\n  return chartData.slice(dataStartIndex, dataEndIndex + 1);\n};\n\n/**\n * This selector will return all data there is in the chart: graphical items, chart root, all together.\n * Useful for figuring out an axis domain (because that needs to know of everything),\n * not useful for rendering individual graphical elements (because they need to know which data is theirs and which is not).\n *\n * This function will discard the original indexes, so it is also not useful for anything that depends on ordering.\n */\nexport const selectDisplayedData: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => ChartData = createSelector(\n  [selectCartesianGraphicalItemsData, selectChartDataWithIndexesIfNotInPanorama],\n  combineDisplayedData,\n);\n\nexport const combineAppliedValues = (\n  data: ChartData,\n  axisSettings: BaseCartesianAxis,\n  items: ReadonlyArray<GraphicalItemSettings>,\n): AppliedChartData => {\n  if (axisSettings?.dataKey != null) {\n    return data.map(item => ({ value: getValueByDataKey(item, axisSettings.dataKey) }));\n  }\n  if (items.length > 0) {\n    return items\n      .map(item => item.dataKey)\n      .flatMap(dataKey => data.map(entry => ({ value: getValueByDataKey(entry, dataKey) })));\n  }\n  return data.map(entry => ({ value: entry }));\n};\n\n/**\n * This selector will return all values with the appropriate dataKey applied on them.\n * Which dataKey is appropriate depends on where it is defined.\n *\n * This is an expensive selector - it will iterate all data and compute their value using the provided dataKey.\n */\nexport const selectAllAppliedValues: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => AppliedChartData = createSelector(\n  [selectDisplayedData, selectBaseAxis, selectCartesianItemsSettings],\n  combineAppliedValues,\n);\n\nexport function isErrorBarRelevantForAxisType(axisType: XorYorZType, errorBar: ErrorBarsSettings): boolean {\n  switch (axisType) {\n    case 'xAxis':\n      return errorBar.direction === 'x';\n    case 'yAxis':\n      return errorBar.direction === 'y';\n    default:\n      return false;\n  }\n}\n\nexport type AppliedChartDataWithErrorDomain = {\n  /**\n   * This is the value after the dataKey has been applied. Presumably a number? But no guarantees.\n   */\n  value: unknown;\n  /**\n   * This is the error domain, if any, for the current value.\n   * This may be either x or y direction, whatever is applicable.\n   * Assumption is that we're looking at this data from the point of view of a single axis,\n   * and that axis dictates the relevant direction.\n   */\n  errorDomain: ReadonlyArray<number> | undefined;\n};\n\n/**\n * This is type of \"error\" in chart. It is set by using ErrorBar, and it can represent confidence interval,\n * or gap in the data, or standard deviation, or quartiles in boxplot, or whiskers or whatever.\n *\n * We will internally represent it as a tuple of two numbers, where the first number is the lower bound and the second number is the upper bound.\n *\n * It is also true that the first number should be lower than or equal to the associated \"main value\",\n * and the second number should be higher than or equal to the associated \"main value\".\n */\nexport type ErrorValue = [number, number];\n\nexport function fromMainValueToError(value: unknown): ErrorValue | undefined {\n  if (isNumber(value) && Number.isFinite(value)) {\n    return [value, value];\n  }\n\n  if (Array.isArray(value)) {\n    const minError = Math.min(...value);\n    const maxError = Math.max(...value);\n    if (!isNan(minError) && !isNan(maxError) && Number.isFinite(minError) && Number.isFinite(maxError)) {\n      return [minError, maxError];\n    }\n  }\n\n  return undefined;\n}\n\nfunction onlyAllowNumbers(data: ReadonlyArray<unknown>): ReadonlyArray<number> {\n  return data\n    .filter(v => isNumOrStr(v) || v instanceof Date)\n    .map(Number)\n    .filter(n => isNan(n) === false);\n}\n\n/**\n * @param entry One item in the 'data' array. Could be anything really - this is defined externally. This is the raw, before dataKey application\n * @param appliedValue This is the result of applying the 'main' dataKey on the `entry`.\n * @param relevantErrorBars Error bars that are relevant for the current axis and layout and all that.\n * @return either undefined or an array of ErrorValue\n */\nexport function getErrorDomainByDataKey(\n  entry: unknown,\n  appliedValue: unknown,\n  relevantErrorBars: ReadonlyArray<ErrorBarsSettings> | undefined,\n): ReadonlyArray<number> {\n  if (!relevantErrorBars || typeof appliedValue !== 'number' || isNan(appliedValue)) {\n    return [];\n  }\n\n  if (!relevantErrorBars.length) {\n    return [];\n  }\n\n  return onlyAllowNumbers(\n    relevantErrorBars.flatMap(eb => {\n      const errorValue = getValueByDataKey(entry, eb.dataKey);\n      let lowBound, highBound: unknown;\n\n      if (Array.isArray(errorValue)) {\n        [lowBound, highBound] = errorValue;\n      } else {\n        lowBound = highBound = errorValue;\n      }\n      if (!isWellBehavedNumber(lowBound) || !isWellBehavedNumber(highBound)) {\n        return undefined;\n      }\n      return [appliedValue - lowBound, appliedValue + highBound];\n    }),\n  );\n}\n\nexport const selectDisplayedStackedData: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => DisplayedStackedData = createSelector(\n  [selectStackedCartesianItemsSettings, selectChartDataWithIndexesIfNotInPanorama, selectTooltipAxis],\n  combineDisplayedStackedData,\n);\n\nexport const combineStackGroups = (\n  displayedData: DisplayedStackedData,\n  items: ReadonlyArray<DefinitelyStackedGraphicalItem>,\n  stackOffsetType: StackOffsetType,\n): AllStackGroups => {\n  const initialItemsGroups: Record<StackId, Array<DefinitelyStackedGraphicalItem>> = {};\n  const itemsGroup: Record<StackId, ReadonlyArray<DefinitelyStackedGraphicalItem>> = items.reduce(\n    (acc: Record<StackId, Array<DefinitelyStackedGraphicalItem>>, item: DefinitelyStackedGraphicalItem) => {\n      if (item.stackId == null) {\n        return acc;\n      }\n      if (acc[item.stackId] == null) {\n        acc[item.stackId] = [];\n      }\n      acc[item.stackId].push(item);\n      return acc;\n    },\n    initialItemsGroups,\n  );\n\n  return Object.fromEntries(\n    Object.entries(itemsGroup).map(([stackId, graphicalItems]): [StackId, StackGroup] => {\n      const dataKeys = graphicalItems.map(getStackSeriesIdentifier);\n      return [\n        stackId,\n        {\n          // @ts-expect-error getStackedData requires that the input is array of objects, Recharts does not test for that\n          stackedData: getStackedData(displayedData, dataKeys, stackOffsetType),\n          graphicalItems,\n        },\n      ];\n    }),\n  );\n};\n\n/**\n * Stack groups are groups of graphical items that stack on each other.\n * Stack is a function of axis type (X, Y), axis ID, and stack ID.\n * Graphical items that do not have a stack ID are not going to be present in stack groups.\n */\nexport const selectStackGroups: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => AllStackGroups | undefined = createSelector(\n  [selectDisplayedStackedData, selectStackedCartesianItemsSettings, selectStackOffsetType],\n  combineStackGroups,\n);\n\nexport const combineDomainOfStackGroups = (\n  stackGroups: AllStackGroups | undefined,\n  { dataStartIndex, dataEndIndex }: ChartDataState,\n  axisType: XorYorZType,\n): NumberDomain | undefined => {\n  if (axisType === 'zAxis') {\n    // ZAxis ignores stacks\n    return undefined;\n  }\n  const domainOfStackGroups = getDomainOfStackGroups(stackGroups, dataStartIndex, dataEndIndex);\n  if (domainOfStackGroups != null && domainOfStackGroups[0] === 0 && domainOfStackGroups[1] === 0) {\n    return undefined;\n  }\n  return domainOfStackGroups;\n};\n\nexport const selectDomainOfStackGroups = createSelector(\n  [selectStackGroups, selectChartDataWithIndexes, pickAxisType],\n  combineDomainOfStackGroups,\n);\n\nexport const combineAppliedNumericalValuesIncludingErrorValues = (\n  data: ChartData,\n  axisSettings: BaseCartesianAxis,\n  items: ReadonlyArray<CartesianGraphicalItemSettings>,\n  errorBars: ErrorBarsState,\n  axisType: XorYorZType,\n): ReadonlyArray<AppliedChartDataWithErrorDomain> => {\n  if (items.length > 0) {\n    return data\n      .flatMap(entry => {\n        return items.flatMap((item): AppliedChartDataWithErrorDomain | undefined => {\n          const relevantErrorBars = errorBars[item.id]?.filter(errorBar =>\n            isErrorBarRelevantForAxisType(axisType, errorBar),\n          );\n          const valueByDataKey: unknown = getValueByDataKey(entry, axisSettings.dataKey ?? item.dataKey);\n          return {\n            value: valueByDataKey,\n            errorDomain: getErrorDomainByDataKey(entry, valueByDataKey, relevantErrorBars),\n          };\n        });\n      })\n      .filter(Boolean);\n  }\n  if (axisSettings?.dataKey != null) {\n    return data.map(\n      (item): AppliedChartDataWithErrorDomain => ({\n        value: getValueByDataKey(item, axisSettings.dataKey),\n        errorDomain: [],\n      }),\n    );\n  }\n  return data.map((entry): AppliedChartDataWithErrorDomain => ({ value: entry, errorDomain: [] }));\n};\n\nexport const selectAllErrorBarSettings = (state: RechartsRootState): ErrorBarsState => state.errorBars;\n\nconst combineRelevantErrorBarSettings = (\n  cartesianItemsSettings: ReadonlyArray<CartesianGraphicalItemSettings>,\n  allErrorBarSettings: ErrorBarsState,\n  axisType: XorYType,\n): ReadonlyArray<ErrorBarsSettings> => {\n  return cartesianItemsSettings\n    .flatMap(item => {\n      return allErrorBarSettings[item.id];\n    })\n    .filter(Boolean)\n    .filter(e => {\n      return isErrorBarRelevantForAxisType(axisType, e);\n    });\n};\n\nexport const selectErrorBarsSettingsExceptStacked: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => ReadonlyArray<ErrorBarsSettings> = createSelector(\n  [selectCartesianItemsSettingsExceptStacked, selectAllErrorBarSettings, pickAxisType],\n  combineRelevantErrorBarSettings,\n);\n\nexport const selectAllAppliedNumericalValuesIncludingErrorValues: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => ReadonlyArray<AppliedChartDataWithErrorDomain> = createSelector(\n  [\n    selectDisplayedData,\n    selectBaseAxis,\n    selectCartesianItemsSettingsExceptStacked,\n    selectAllErrorBarSettings,\n    pickAxisType,\n  ],\n  combineAppliedNumericalValuesIncludingErrorValues,\n);\n\nfunction onlyAllowNumbersAndStringsAndDates(item: { value: unknown }): string | number | Date | undefined {\n  const { value } = item;\n  if (isNumOrStr(value) || value instanceof Date) {\n    return value;\n  }\n  return undefined;\n}\n\nconst computeNumericalDomain = (\n  dataWithErrorDomains: ReadonlyArray<AppliedChartDataWithErrorDomain>,\n): NumberDomain | undefined => {\n  const allDataSquished = dataWithErrorDomains\n    // This flatMap has to be flat because we're creating a new array in the return value\n    .flatMap(d => [d.value, d.errorDomain])\n    // This flat is needed because a) errorDomain is an array, and b) value may be a number, or it may be a range (for Area, for example)\n    .flat(1);\n  const onlyNumbers = onlyAllowNumbers(allDataSquished);\n  if (onlyNumbers.length === 0) {\n    return undefined;\n  }\n  return [Math.min(...onlyNumbers), Math.max(...onlyNumbers)];\n};\n\nconst computeDomainOfTypeCategory = (\n  allDataSquished: AppliedChartData,\n  axisSettings: BaseCartesianAxis,\n  isCategorical: boolean,\n): CategoricalDomain => {\n  const categoricalDomain = allDataSquished.map(onlyAllowNumbersAndStringsAndDates).filter(v => v != null);\n  if (\n    isCategorical &&\n    (axisSettings.dataKey == null || (axisSettings.allowDuplicatedCategory && hasDuplicate(categoricalDomain)))\n  ) {\n    /*\n     * 1. In an absence of dataKey, Recharts will use array indexes as its categorical domain\n     * 2. When category axis has duplicated text, serial numbers are used to generate scale\n     */\n    return range(0, allDataSquished.length);\n  }\n  if (axisSettings.allowDuplicatedCategory) {\n    return categoricalDomain;\n  }\n  return Array.from(new Set(categoricalDomain));\n};\n\nexport const getDomainDefinition = (axisSettings: CartesianAxisSettings): AxisDomain => {\n  if (axisSettings == null || !('domain' in axisSettings)) {\n    return defaultNumericDomain;\n  }\n\n  if (axisSettings.domain != null) {\n    return axisSettings.domain;\n  }\n  if (axisSettings.ticks != null) {\n    if (axisSettings.type === 'number') {\n      const allValues = onlyAllowNumbers(axisSettings.ticks);\n      return [Math.min(...allValues), Math.max(...allValues)];\n    }\n    if (axisSettings.type === 'category') {\n      return axisSettings.ticks.map(String);\n    }\n  }\n  return axisSettings?.domain ?? defaultNumericDomain;\n};\n\nexport const mergeDomains = (...domains: ReadonlyArray<NumberDomain | undefined>): NumberDomain | undefined => {\n  const allDomains = domains.filter(Boolean);\n  if (allDomains.length === 0) {\n    return undefined;\n  }\n  const allValues = allDomains.flat();\n  const min = Math.min(...allValues);\n  const max = Math.max(...allValues);\n  return [min, max];\n};\n\nexport const selectReferenceDots = (state: RechartsRootState): ReadonlyArray<ReferenceDotSettings> =>\n  state.referenceElements.dots;\n\nexport const filterReferenceElements = <T extends ReferenceElementSettings>(\n  elements: ReadonlyArray<T>,\n  axisType: XorYorZType,\n  axisId: AxisId,\n): ReadonlyArray<T> => {\n  return elements\n    .filter(el => el.ifOverflow === 'extendDomain')\n    .filter(el => {\n      if (axisType === 'xAxis') {\n        return el.xAxisId === axisId;\n      }\n      return el.yAxisId === axisId;\n    });\n};\n\nexport const selectReferenceDotsByAxis = createSelector(\n  [selectReferenceDots, pickAxisType, pickAxisId],\n  filterReferenceElements,\n);\n\nexport const selectReferenceAreas = (state: RechartsRootState): ReadonlyArray<ReferenceAreaSettings> =>\n  state.referenceElements.areas;\n\nexport const selectReferenceAreasByAxis: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => ReadonlyArray<ReferenceAreaSettings> = createSelector(\n  [selectReferenceAreas, pickAxisType, pickAxisId],\n  filterReferenceElements,\n);\n\nexport const selectReferenceLines = (state: RechartsRootState): ReadonlyArray<ReferenceLineSettings> =>\n  state.referenceElements.lines;\n\nexport const selectReferenceLinesByAxis: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => ReadonlyArray<ReferenceLineSettings> = createSelector(\n  [selectReferenceLines, pickAxisType, pickAxisId],\n  filterReferenceElements,\n);\n\nexport const combineDotsDomain = (\n  dots: ReadonlyArray<ReferenceDotSettings>,\n  axisType: XorYType,\n): NumberDomain | undefined => {\n  const allCoords = onlyAllowNumbers(dots.map(dot => (axisType === 'xAxis' ? dot.x : dot.y)));\n  if (allCoords.length === 0) {\n    return undefined;\n  }\n  return [Math.min(...allCoords), Math.max(...allCoords)];\n};\n\nconst selectReferenceDotsDomain = createSelector(selectReferenceDotsByAxis, pickAxisType, combineDotsDomain);\n\nexport const combineAreasDomain = (\n  areas: ReadonlyArray<ReferenceAreaSettings>,\n  axisType: XorYType,\n): NumberDomain | undefined => {\n  const allCoords = onlyAllowNumbers(\n    areas.flatMap(area => [axisType === 'xAxis' ? area.x1 : area.y1, axisType === 'xAxis' ? area.x2 : area.y2]),\n  );\n  if (allCoords.length === 0) {\n    return undefined;\n  }\n  return [Math.min(...allCoords), Math.max(...allCoords)];\n};\n\nconst selectReferenceAreasDomain = createSelector([selectReferenceAreasByAxis, pickAxisType], combineAreasDomain);\n\nexport const combineLinesDomain = (\n  lines: ReadonlyArray<ReferenceLineSettings>,\n  axisType: XorYType,\n): NumberDomain | undefined => {\n  const allCoords = onlyAllowNumbers(lines.map(line => (axisType === 'xAxis' ? line.x : line.y)));\n  if (allCoords.length === 0) {\n    return undefined;\n  }\n  return [Math.min(...allCoords), Math.max(...allCoords)];\n};\n\nconst selectReferenceLinesDomain = createSelector(selectReferenceLinesByAxis, pickAxisType, combineLinesDomain);\n\nconst selectReferenceElementsDomain = createSelector(\n  selectReferenceDotsDomain,\n  selectReferenceLinesDomain,\n  selectReferenceAreasDomain,\n  (dotsDomain, linesDomain, areasDomain): NumberDomain | undefined => {\n    return mergeDomains(dotsDomain, areasDomain, linesDomain);\n  },\n);\n\nexport const selectDomainDefinition: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => AxisDomain | undefined = createSelector([selectBaseAxis], getDomainDefinition);\n\nexport const combineNumericalDomain = (\n  axisSettings: BaseCartesianAxis,\n  domainDefinition: AxisDomain | undefined,\n  domainOfStackGroups: NumberDomain | undefined,\n  allDataWithErrorDomains: ReadonlyArray<AppliedChartDataWithErrorDomain>,\n  referenceElementsDomain: NumberDomain | undefined,\n  layout: LayoutType,\n  axisType: XorYorZType,\n): NumberDomain | undefined => {\n  const domainFromUserPreference: NumberDomain | undefined = numericalDomainSpecifiedWithoutRequiringData(\n    domainDefinition,\n    axisSettings.allowDataOverflow,\n  );\n  if (domainFromUserPreference != null) {\n    // We're done! No need to compute anything else.\n    return domainFromUserPreference;\n  }\n\n  const shouldIncludeDomainOfStackGroups =\n    (layout === 'vertical' && axisType === 'xAxis') || (layout === 'horizontal' && axisType === 'yAxis');\n\n  const mergedDomains = shouldIncludeDomainOfStackGroups\n    ? mergeDomains(domainOfStackGroups, referenceElementsDomain, computeNumericalDomain(allDataWithErrorDomains))\n    : mergeDomains(referenceElementsDomain, computeNumericalDomain(allDataWithErrorDomains));\n\n  return parseNumericalUserDomain(domainDefinition, mergedDomains, axisSettings.allowDataOverflow);\n};\n\nexport const selectNumericalDomain: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => NumberDomain | undefined = createSelector(\n  [\n    selectBaseAxis,\n    selectDomainDefinition,\n    selectDomainOfStackGroups,\n    selectAllAppliedNumericalValuesIncludingErrorValues,\n    selectReferenceElementsDomain,\n    selectChartLayout,\n    pickAxisType,\n  ],\n  combineNumericalDomain,\n);\n\n/**\n * Expand by design maps everything between 0 and 1,\n * there is nothing to compute.\n * See https://d3js.org/d3-shape/stack#stack-offsets\n */\nconst expandDomain: NumberDomain = [0, 1];\n\nexport const combineAxisDomain = (\n  axisSettings: BaseCartesianAxis,\n  layout: LayoutType,\n  displayedData: ChartData | undefined,\n  allAppliedValues: AppliedChartData,\n  stackOffsetType: StackOffsetType,\n  axisType: XorYorZType,\n  numericalDomain: NumberDomain | undefined,\n): NumberDomain | CategoricalDomain | undefined => {\n  if ((axisSettings == null || displayedData == null || displayedData.length === 0) && numericalDomain === undefined) {\n    return undefined;\n  }\n  const { dataKey, type } = axisSettings;\n  const isCategorical = isCategoricalAxis(layout, axisType);\n\n  if (isCategorical && dataKey == null) {\n    return range(0, displayedData.length);\n  }\n\n  if (type === 'category') {\n    return computeDomainOfTypeCategory(allAppliedValues, axisSettings, isCategorical);\n  }\n\n  if (stackOffsetType === 'expand') {\n    return expandDomain;\n  }\n\n  return numericalDomain;\n};\n\nexport const selectAxisDomain: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => NumberDomain | CategoricalDomain | undefined = createSelector(\n  [\n    selectBaseAxis,\n    selectChartLayout,\n    selectDisplayedData,\n    selectAllAppliedValues,\n    selectStackOffsetType,\n    pickAxisType,\n    selectNumericalDomain,\n  ],\n  combineAxisDomain,\n);\n\nexport const combineRealScaleType = (\n  axisConfig: BaseCartesianAxis | undefined,\n  layout: LayoutType,\n  hasBar: boolean,\n  chartType: string,\n  axisType: XorYorZType,\n): string | undefined => {\n  if (axisConfig == null) {\n    return undefined;\n  }\n  const { scale, type } = axisConfig;\n  if (scale === 'auto') {\n    if (layout === 'radial' && axisType === 'radiusAxis') {\n      return 'band';\n    }\n    if (layout === 'radial' && axisType === 'angleAxis') {\n      return 'linear';\n    }\n\n    if (\n      type === 'category' &&\n      chartType &&\n      (chartType.indexOf('LineChart') >= 0 ||\n        chartType.indexOf('AreaChart') >= 0 ||\n        (chartType.indexOf('ComposedChart') >= 0 && !hasBar))\n    ) {\n      return 'point';\n    }\n    if (type === 'category') {\n      return 'band';\n    }\n\n    return 'linear';\n  }\n  if (typeof scale === 'string') {\n    const name = `scale${upperFirst(scale)}`;\n\n    return name in d3Scales ? name : 'point';\n  }\n  return undefined;\n};\n\nexport const selectRealScaleType: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n) => string | undefined = createSelector(\n  [selectBaseAxis, selectChartLayout, selectHasBar, selectChartName, pickAxisType],\n  combineRealScaleType,\n);\n\nfunction getD3ScaleFromType(realScaleType: string | undefined) {\n  if (realScaleType == null) {\n    return undefined;\n  }\n  if (realScaleType in d3Scales) {\n    // @ts-expect-error we should do better type verification here\n    return d3Scales[realScaleType]();\n  }\n  const name = `scale${upperFirst(realScaleType)}`;\n  if (name in d3Scales) {\n    // @ts-expect-error we should do better type verification here\n    return d3Scales[name]();\n  }\n  return undefined;\n}\n\nexport function combineScaleFunction(\n  axis: BaseCartesianAxis,\n  realScaleType: string | undefined,\n  axisDomain: NumberDomain | CategoricalDomain,\n  axisRange: [number, number],\n): RechartsScale | undefined {\n  if (axisDomain == null || axisRange == null) {\n    return undefined;\n  }\n  if (typeof axis.scale === 'function') {\n    // @ts-expect-error we're going to assume here that if axis.scale is a function then it is a d3Scale function\n    return axis.scale.copy().domain(axisDomain).range(axisRange);\n  }\n  const d3ScaleFunction = getD3ScaleFromType(realScaleType);\n  if (d3ScaleFunction == null) {\n    return undefined;\n  }\n  const scale = d3ScaleFunction.domain(axisDomain).range(axisRange);\n  // I don't like this function because it mutates the scale. We should come up with a way to compute the domain up front.\n  checkDomainOfScale(scale);\n  return scale;\n}\n\nexport const combineNiceTicks = (\n  axisDomain: NumberDomain | CategoricalDomain | undefined,\n  axisSettings: CartesianAxisSettings,\n  realScaleType: string,\n): ReadonlyArray<number> | undefined => {\n  const domainDefinition: AxisDomain = getDomainDefinition(axisSettings);\n\n  if (realScaleType !== 'auto' && realScaleType !== 'linear') {\n    return undefined;\n  }\n\n  if (\n    axisSettings != null &&\n    axisSettings.tickCount &&\n    Array.isArray(domainDefinition) &&\n    (domainDefinition[0] === 'auto' || domainDefinition[1] === 'auto') &&\n    isWellFormedNumberDomain(axisDomain)\n  ) {\n    return getNiceTickValues(axisDomain, axisSettings.tickCount, axisSettings.allowDecimals);\n  }\n\n  if (\n    axisSettings != null &&\n    axisSettings.tickCount &&\n    axisSettings.type === 'number' &&\n    isWellFormedNumberDomain(axisDomain)\n  ) {\n    return getTickValuesFixedDomain(axisDomain as NumberDomain, axisSettings.tickCount, axisSettings.allowDecimals);\n  }\n\n  return undefined;\n};\nexport const selectNiceTicks: (\n  state: RechartsRootState,\n  axisType: XorYType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => ReadonlyArray<number> | undefined = createSelector(\n  [selectAxisDomain, selectAxisSettings, selectRealScaleType],\n  combineNiceTicks,\n);\n\nexport const combineAxisDomainWithNiceTicks = (\n  axisSettings: BaseCartesianAxis,\n  domain: NumberDomain | CategoricalDomain | undefined,\n  niceTicks: ReadonlyArray<number> | undefined,\n  axisType: XorYType,\n): NumberDomain | CategoricalDomain | undefined => {\n  if (\n    /*\n     * Angle axis for some reason uses nice ticks when rendering axis tick labels,\n     * but doesn't use nice ticks for extending domain like all the other axes do.\n     * Not really sure why? Is there a good reason,\n     * or is it just because someone added support for nice ticks to the other axes and forgot this one?\n     */\n    axisType !== 'angleAxis' &&\n    axisSettings?.type === 'number' &&\n    isWellFormedNumberDomain(domain) &&\n    Array.isArray(niceTicks) &&\n    niceTicks.length > 0\n  ) {\n    const minFromDomain = domain[0];\n    const minFromTicks = niceTicks[0];\n    const maxFromDomain = domain[1];\n    const maxFromTicks = niceTicks[niceTicks.length - 1];\n    return [Math.min(minFromDomain, minFromTicks), Math.max(maxFromDomain, maxFromTicks)];\n  }\n  return domain;\n};\n\nexport const selectAxisDomainIncludingNiceTicks: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => NumberDomain | CategoricalDomain | undefined = createSelector(\n  [selectBaseAxis, selectAxisDomain, selectNiceTicks, pickAxisType],\n  combineAxisDomainWithNiceTicks,\n);\n\n/**\n * Returns the smallest gap, between two numbers in the data, as a ratio of the whole range (max - min).\n * Ignores domain provided by user and only considers domain from data.\n *\n * The result is a number between 0 and 1.\n */\nexport const selectSmallestDistanceBetweenValues: (\n  state: RechartsRootState,\n  axisType: XorYType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => number | undefined = createSelector(\n  selectAllAppliedValues,\n  selectBaseAxis,\n  (allDataSquished: AppliedChartData, axisSettings: BaseCartesianAxis): number | undefined => {\n    if (!axisSettings || axisSettings.type !== 'number') {\n      return undefined;\n    }\n    let smallestDistanceBetweenValues = Infinity;\n    const sortedValues = Array.from(onlyAllowNumbers(allDataSquished.map(d => d.value))).sort((a, b) => a - b);\n    if (sortedValues.length < 2) {\n      return Infinity;\n    }\n    const diff = sortedValues[sortedValues.length - 1] - sortedValues[0];\n    if (diff === 0) {\n      return Infinity;\n    }\n    // Only do n - 1 distance calculations because there's only n - 1 distances between n values.\n    for (let i = 0; i < sortedValues.length - 1; i++) {\n      const distance = sortedValues[i + 1] - sortedValues[i];\n      smallestDistanceBetweenValues = Math.min(smallestDistanceBetweenValues, distance);\n    }\n    return smallestDistanceBetweenValues / diff;\n  },\n);\n\nconst selectCalculatedPadding: (\n  state: RechartsRootState,\n  axisType: XorYType,\n  axisId: AxisId,\n  padding: string,\n) => number = createSelector(\n  selectSmallestDistanceBetweenValues,\n  selectChartLayout,\n  selectBarCategoryGap,\n  selectChartOffsetInternal,\n  (_1, _2, _3, padding) => padding,\n  (\n    smallestDistanceInPercent: number | undefined,\n    layout: LayoutType,\n    barCategoryGap: number | string,\n    offset: ChartOffsetInternal,\n    padding: string,\n  ) => {\n    if (!isWellBehavedNumber(smallestDistanceInPercent)) {\n      return 0;\n    }\n    const rangeWidth = layout === 'vertical' ? offset.height : offset.width;\n\n    if (padding === 'gap') {\n      return (smallestDistanceInPercent * rangeWidth) / 2;\n    }\n\n    if (padding === 'no-gap') {\n      const gap = getPercentValue(barCategoryGap, smallestDistanceInPercent * rangeWidth);\n      const halfBand = (smallestDistanceInPercent * rangeWidth) / 2;\n      return halfBand - gap - ((halfBand - gap) / rangeWidth) * gap;\n    }\n\n    return 0;\n  },\n);\n\nexport const selectCalculatedXAxisPadding: (state: RechartsRootState, axisId: AxisId) => number = (state, axisId) => {\n  const xAxisSettings = selectXAxisSettings(state, axisId);\n  if (xAxisSettings == null || typeof xAxisSettings.padding !== 'string') {\n    return 0;\n  }\n  return selectCalculatedPadding(state, 'xAxis', axisId, xAxisSettings.padding);\n};\n\nexport const selectCalculatedYAxisPadding: (state: RechartsRootState, axisId: AxisId) => number = (state, axisId) => {\n  const yAxisSettings = selectYAxisSettings(state, axisId);\n  if (yAxisSettings == null || typeof yAxisSettings.padding !== 'string') {\n    return 0;\n  }\n  return selectCalculatedPadding(state, 'yAxis', axisId, yAxisSettings.padding);\n};\n\nconst selectXAxisPadding: (state: RechartsRootState, axisId: AxisId) => { left: number; right: number } =\n  createSelector(\n    selectXAxisSettings,\n    selectCalculatedXAxisPadding,\n    (xAxisSettings: XAxisSettings, calculated: number) => {\n      if (xAxisSettings == null) {\n        return { left: 0, right: 0 };\n      }\n      const { padding } = xAxisSettings;\n      if (typeof padding === 'string') {\n        return { left: calculated, right: calculated };\n      }\n      return {\n        left: (padding.left ?? 0) + calculated,\n        right: (padding.right ?? 0) + calculated,\n      };\n    },\n  );\n\nconst selectYAxisPadding: (state: RechartsRootState, axisId: AxisId) => { top: number; bottom: number } =\n  createSelector(\n    selectYAxisSettings,\n    selectCalculatedYAxisPadding,\n    (yAxisSettings: YAxisSettings, calculated: number) => {\n      if (yAxisSettings == null) {\n        return { top: 0, bottom: 0 };\n      }\n      const { padding } = yAxisSettings;\n      if (typeof padding === 'string') {\n        return { top: calculated, bottom: calculated };\n      }\n      return {\n        top: (padding.top ?? 0) + calculated,\n        bottom: (padding.bottom ?? 0) + calculated,\n      };\n    },\n  );\n\nexport const combineXAxisRange: (\n  state: RechartsRootState,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => AxisRange | undefined = createSelector(\n  [\n    selectChartOffsetInternal,\n    selectXAxisPadding,\n    selectBrushDimensions,\n    selectBrushSettings,\n    (_state: RechartsRootState, _axisId: AxisId, isPanorama) => isPanorama,\n  ],\n  (\n    offset: ChartOffsetInternal,\n    padding,\n    brushDimensions: BrushDimensions,\n    { padding: brushPadding },\n    isPanorama: boolean,\n  ): AxisRange | undefined => {\n    if (isPanorama) {\n      return [brushPadding.left, brushDimensions.width - brushPadding.right];\n    }\n    return [offset.left + padding.left, offset.left + offset.width - padding.right];\n  },\n);\n\nexport type AxisRange = readonly [number, number];\n\nexport const combineYAxisRange: (\n  state: RechartsRootState,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => AxisRange | undefined = createSelector(\n  [\n    selectChartOffsetInternal,\n    selectChartLayout,\n    selectYAxisPadding,\n    selectBrushDimensions,\n    selectBrushSettings,\n    (_state: RechartsRootState, _axisId: AxisId, isPanorama) => isPanorama,\n  ],\n  (\n    offset: ChartOffsetInternal,\n    layout: LayoutType,\n    padding: { top: number; bottom: number },\n    brushDimensions: BrushDimensions,\n    { padding: brushPadding },\n    isPanorama: boolean,\n  ): AxisRange | undefined => {\n    if (isPanorama) {\n      return [brushDimensions.height - brushPadding.bottom, brushPadding.top];\n    }\n    if (layout === 'horizontal') {\n      return [offset.top + offset.height - padding.bottom, offset.top + padding.top];\n    }\n    return [offset.top + padding.top, offset.top + offset.height - padding.bottom];\n  },\n);\n\nexport const selectAxisRange = (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n): AxisRange | undefined => {\n  switch (axisType) {\n    case 'xAxis':\n      return combineXAxisRange(state, axisId, isPanorama);\n    case 'yAxis':\n      return combineYAxisRange(state, axisId, isPanorama);\n    case 'zAxis':\n      return selectZAxisSettings(state, axisId)?.range;\n    case 'angleAxis':\n      return selectAngleAxisRange(state);\n    case 'radiusAxis':\n      return selectRadiusAxisRange(state, axisId);\n    default:\n      return undefined;\n  }\n};\n\nexport const selectAxisRangeWithReverse: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => AxisRange | undefined = createSelector([selectBaseAxis, selectAxisRange], combineAxisRangeWithReverse);\n\nexport const selectAxisScale: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => RechartsScale | undefined = createSelector(\n  [selectBaseAxis, selectRealScaleType, selectAxisDomainIncludingNiceTicks, selectAxisRangeWithReverse],\n  combineScaleFunction,\n);\n\nexport const selectErrorBarsSettings = createSelector(\n  [selectCartesianItemsSettings, selectAllErrorBarSettings, pickAxisType],\n  combineRelevantErrorBarSettings,\n);\n\nfunction compareIds(a: CartesianAxisSettings, b: CartesianAxisSettings) {\n  if (a.id < b.id) {\n    return -1;\n  }\n  if (a.id > b.id) {\n    return 1;\n  }\n  return 0;\n}\n\nconst pickAxisOrientation = <T>(_state: RechartsRootState, orientation: T): T => orientation;\n\nconst pickMirror = (_state: RechartsRootState, _orientation: unknown, mirror: boolean): boolean => mirror;\n\nconst selectAllXAxesWithOffsetType: (\n  state: RechartsRootState,\n  orientation: XAxisOrientation,\n  mirror: boolean,\n) => ReadonlyArray<XAxisSettings> = createSelector(\n  selectAllXAxes,\n  pickAxisOrientation,\n  pickMirror,\n  (allAxes: ReadonlyArray<XAxisSettings>, orientation: XAxisOrientation, mirror: boolean) =>\n    allAxes\n      .filter(axis => axis.orientation === orientation)\n      .filter(axis => axis.mirror === mirror)\n      .sort(compareIds),\n);\n\nconst selectAllYAxesWithOffsetType: (\n  state: RechartsRootState,\n  orientation: YAxisOrientation,\n  mirror: boolean,\n) => ReadonlyArray<YAxisSettings> = createSelector(\n  selectAllYAxes,\n  pickAxisOrientation,\n  pickMirror,\n  (allAxes: ReadonlyArray<YAxisSettings>, orientation: YAxisOrientation, mirror: boolean) =>\n    allAxes\n      .filter(axis => axis.orientation === orientation)\n      .filter(axis => axis.mirror === mirror)\n      .sort(compareIds),\n);\n\nconst getXAxisSize = (offset: ChartOffsetInternal, axisSettings: XAxisSettings): Size => {\n  return {\n    width: offset.width,\n    height: axisSettings.height,\n  };\n};\n\nconst getYAxisSize = (offset: ChartOffsetInternal, axisSettings: YAxisSettings): Size => {\n  const width = typeof axisSettings.width === 'number' ? axisSettings.width : DEFAULT_Y_AXIS_WIDTH;\n  return {\n    width,\n    height: offset.height,\n  };\n};\n\nexport const selectXAxisSize: (state: RechartsRootState, xAxisId: AxisId) => Size = createSelector(\n  selectChartOffsetInternal,\n  selectXAxisSettings,\n  getXAxisSize,\n);\n\ntype AxisOffsetSteps = Record<AxisId, number>;\n\nconst combineXAxisPositionStartingPoint = (\n  offset: ChartOffsetInternal,\n  orientation: XAxisOrientation,\n  chartHeight: number,\n) => {\n  switch (orientation) {\n    case 'top':\n      return offset.top;\n    case 'bottom':\n      return chartHeight - offset.bottom;\n    default:\n      return 0;\n  }\n};\n\nconst combineYAxisPositionStartingPoint = (\n  offset: ChartOffsetInternal,\n  orientation: YAxisOrientation,\n  chartWidth: number,\n) => {\n  switch (orientation) {\n    case 'left':\n      return offset.left;\n    case 'right':\n      return chartWidth - offset.right;\n    default:\n      return 0;\n  }\n};\n\nexport const selectAllXAxesOffsetSteps: (\n  state: RechartsRootState,\n  orientation: XAxisOrientation,\n  mirror: boolean,\n) => AxisOffsetSteps = createSelector(\n  selectChartHeight,\n  selectChartOffsetInternal,\n  selectAllXAxesWithOffsetType,\n  pickAxisOrientation,\n  pickMirror,\n  (chartHeight, offset, allAxesWithSameOffsetType, orientation: XAxisOrientation, mirror) => {\n    const steps: AxisOffsetSteps = {};\n    let position: number;\n    allAxesWithSameOffsetType.forEach(axis => {\n      const axisSize = getXAxisSize(offset, axis);\n      if (position == null) {\n        position = combineXAxisPositionStartingPoint(offset, orientation, chartHeight);\n      }\n      const needSpace = (orientation === 'top' && !mirror) || (orientation === 'bottom' && mirror);\n      steps[axis.id] = position - Number(needSpace) * axisSize.height;\n      position += (needSpace ? -1 : 1) * axisSize.height;\n    });\n    return steps;\n  },\n);\n\nexport const selectAllYAxesOffsetSteps: (\n  state: RechartsRootState,\n  orientation: YAxisOrientation,\n  mirror: boolean,\n) => AxisOffsetSteps = createSelector(\n  selectChartWidth,\n  selectChartOffsetInternal,\n  selectAllYAxesWithOffsetType,\n  pickAxisOrientation,\n  pickMirror,\n  (chartWidth, offset: ChartOffsetInternal, allAxesWithSameOffsetType, orientation: YAxisOrientation, mirror) => {\n    const steps: AxisOffsetSteps = {};\n    let position: number;\n    allAxesWithSameOffsetType.forEach(axis => {\n      const axisSize = getYAxisSize(offset, axis);\n      if (position == null) {\n        position = combineYAxisPositionStartingPoint(offset, orientation, chartWidth);\n      }\n      const needSpace = (orientation === 'left' && !mirror) || (orientation === 'right' && mirror);\n      steps[axis.id] = position - Number(needSpace) * axisSize.width;\n      position += (needSpace ? -1 : 1) * axisSize.width;\n    });\n    return steps;\n  },\n);\n\nexport const selectXAxisPosition = (state: RechartsRootState, axisId: AxisId): Coordinate | undefined => {\n  const offset = selectChartOffsetInternal(state);\n  const axisSettings = selectXAxisSettings(state, axisId);\n  if (axisSettings == null) {\n    return undefined;\n  }\n  const allSteps = selectAllXAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);\n  const stepOfThisAxis = allSteps[axisId];\n  if (stepOfThisAxis == null) {\n    return { x: offset.left, y: 0 };\n  }\n  return { x: offset.left, y: stepOfThisAxis };\n};\n\nexport const selectYAxisPosition = (state: RechartsRootState, axisId: AxisId): Coordinate | undefined => {\n  const offset = selectChartOffsetInternal(state);\n  const axisSettings: YAxisSettings = selectYAxisSettings(state, axisId);\n  if (axisSettings == null) {\n    return undefined;\n  }\n  const allSteps = selectAllYAxesOffsetSteps(state, axisSettings.orientation, axisSettings.mirror);\n  const stepOfThisAxis = allSteps[axisId];\n  if (stepOfThisAxis == null) {\n    return { x: 0, y: offset.top };\n  }\n  return { x: stepOfThisAxis, y: offset.top };\n};\n\nexport const selectYAxisSize: (state: RechartsRootState, yAxisId: AxisId) => Size = createSelector(\n  selectChartOffsetInternal,\n  selectYAxisSettings,\n  (offset: ChartOffsetInternal, axisSettings: YAxisSettings): Size => {\n    const width = typeof axisSettings.width === 'number' ? axisSettings.width : DEFAULT_Y_AXIS_WIDTH;\n\n    return {\n      width,\n      height: offset.height,\n    };\n  },\n);\n\nexport const selectCartesianAxisSize = (\n  state: RechartsRootState,\n  axisType: XorYType,\n  axisId: AxisId,\n): number | undefined => {\n  switch (axisType) {\n    case 'xAxis': {\n      return selectXAxisSize(state, axisId).width;\n    }\n    case 'yAxis': {\n      return selectYAxisSize(state, axisId).height;\n    }\n    default: {\n      return undefined;\n    }\n  }\n};\n\nexport const combineDuplicateDomain = (\n  chartLayout: LayoutType,\n  appliedValues: AppliedChartData,\n  axis: BaseCartesianAxis,\n  axisType: XorYorZType,\n): ReadonlyArray<unknown> | undefined => {\n  if (axis == null) {\n    return undefined;\n  }\n  const { allowDuplicatedCategory, type, dataKey } = axis;\n  const isCategorical = isCategoricalAxis(chartLayout, axisType);\n  const allData = appliedValues.map(av => av.value);\n  if (dataKey && isCategorical && type === 'category' && allowDuplicatedCategory && hasDuplicate(allData)) {\n    return allData;\n  }\n  return undefined;\n};\n\nexport const selectDuplicateDomain: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => ReadonlyArray<unknown> | undefined = createSelector(\n  [selectChartLayout, selectAllAppliedValues, selectBaseAxis, pickAxisType],\n  combineDuplicateDomain,\n);\n\nexport const combineCategoricalDomain = (\n  layout: LayoutType,\n  appliedValues: AppliedChartData,\n  axis: AxisWithTicksSettings,\n  axisType: XorYType,\n): ReadonlyArray<unknown> | undefined => {\n  if (axis == null || axis.dataKey == null) {\n    return undefined;\n  }\n  const { type, scale } = axis;\n  const isCategorical = isCategoricalAxis(layout, axisType);\n  if (isCategorical && (type === 'number' || scale !== 'auto')) {\n    return appliedValues.map(d => d.value);\n  }\n  return undefined;\n};\n\nexport const selectCategoricalDomain: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => ReadonlyArray<unknown> | undefined = createSelector(\n  [selectChartLayout, selectAllAppliedValues, selectAxisSettings, pickAxisType],\n  combineCategoricalDomain,\n);\n\nexport const selectAxisPropsNeededForCartesianGridTicksGenerator = createSelector(\n  [\n    selectChartLayout,\n    selectCartesianAxisSettings,\n    selectRealScaleType,\n    selectAxisScale,\n    selectDuplicateDomain,\n    selectCategoricalDomain,\n    selectAxisRange,\n    selectNiceTicks,\n    pickAxisType,\n  ],\n  (\n    layout: LayoutType,\n    axis: XAxisSettings | YAxisSettings,\n    realScaleType: string,\n    scale: RechartsScale | undefined,\n    duplicateDomain,\n    categoricalDomain,\n    axisRange,\n    niceTicks,\n    axisType: AxisType,\n  ): AxisPropsForCartesianGridTicksGeneration | null => {\n    if (axis == null) {\n      return null;\n    }\n    const isCategorical = isCategoricalAxis(layout, axisType);\n    return {\n      angle: axis.angle,\n      interval: axis.interval,\n      minTickGap: axis.minTickGap,\n      orientation: axis.orientation,\n      tick: axis.tick,\n      tickCount: axis.tickCount,\n      tickFormatter: axis.tickFormatter,\n      ticks: axis.ticks,\n      type: axis.type,\n      unit: axis.unit,\n      axisType,\n      categoricalDomain,\n      duplicateDomain,\n      isCategorical,\n      niceTicks,\n      range: axisRange,\n      realScaleType,\n      scale,\n    };\n  },\n);\n\nexport const combineAxisTicks = (\n  layout: LayoutType,\n  axis: AxisWithTicksSettings,\n  realScaleType: string,\n  scale: RechartsScale | undefined,\n  niceTicks: ReadonlyArray<number> | undefined,\n  axisRange: AxisRange | undefined,\n  duplicateDomain: ReadonlyArray<unknown> | undefined,\n  categoricalDomain: ReadonlyArray<unknown> | undefined,\n  axisType: XorYType,\n): ReadonlyArray<TickItem> | undefined => {\n  if (axis == null || scale == null) {\n    return undefined;\n  }\n\n  const isCategorical = isCategoricalAxis(layout, axisType);\n\n  const { type, ticks, tickCount } = axis;\n\n  // This is testing for `scaleBand` but for band axis the type is reported as `band` so this looks like a dead code with a workaround elsewhere?\n  const offsetForBand =\n    realScaleType === 'scaleBand' && typeof scale.bandwidth === 'function' ? scale.bandwidth() / 2 : 2;\n\n  let offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;\n\n  offset =\n    axisType === 'angleAxis' && axisRange != null && axisRange.length >= 2\n      ? mathSign(axisRange[0] - axisRange[1]) * 2 * offset\n      : offset;\n\n  // The ticks set by user should only affect the ticks adjacent to axis line\n  const ticksOrNiceTicks = ticks || niceTicks;\n  if (ticksOrNiceTicks) {\n    const result = ticksOrNiceTicks.map((entry: AxisTick, index: number): TickItem => {\n      const scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;\n\n      return {\n        index,\n        // If the scaleContent is not a number, the coordinate will be NaN.\n        // That could be the case for example with a PointScale and a string as domain.\n        coordinate: scale(scaleContent) + offset,\n        value: entry,\n        offset,\n      };\n    });\n\n    return result.filter((row: TickItem) => !isNan(row.coordinate));\n  }\n\n  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not \"auto\"\n  if (isCategorical && categoricalDomain) {\n    return categoricalDomain.map(\n      (entry: any, index: number): TickItem => ({\n        coordinate: scale(entry) + offset,\n        value: entry,\n        index,\n        offset,\n      }),\n    );\n  }\n\n  if (scale.ticks) {\n    return (\n      scale\n        .ticks(tickCount)\n        // @ts-expect-error why does the offset go here? The type does not require it\n        .map((entry: any): TickItem => ({ coordinate: scale(entry) + offset, value: entry, offset }))\n    );\n  }\n\n  // When axis has duplicated text, serial numbers are used to generate scale\n  return scale.domain().map(\n    (entry: any, index: number): TickItem => ({\n      coordinate: scale(entry) + offset,\n      value: duplicateDomain ? duplicateDomain[entry] : entry,\n      index,\n      offset,\n    }),\n  );\n};\nexport const selectTicksOfAxis: (\n  state: RechartsRootState,\n  axisType: XorYType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => ReadonlyArray<CartesianTickItem> | undefined = createSelector(\n  [\n    selectChartLayout,\n    selectAxisSettings,\n    selectRealScaleType,\n    selectAxisScale,\n    selectNiceTicks,\n    selectAxisRange,\n    selectDuplicateDomain,\n    selectCategoricalDomain,\n    pickAxisType,\n  ],\n  combineAxisTicks,\n);\n\nexport const combineGraphicalItemTicks = (\n  layout: LayoutType,\n  axis: AxisWithTicksSettings,\n  scale: RechartsScale | undefined,\n  axisRange: AxisRange | undefined,\n  duplicateDomain: ReadonlyArray<unknown> | undefined,\n  categoricalDomain: ReadonlyArray<unknown> | undefined,\n  axisType: XorYType,\n): TickItem[] | undefined => {\n  if (axis == null || scale == null || axisRange == null || axisRange[0] === axisRange[1]) {\n    return undefined;\n  }\n  const isCategorical = isCategoricalAxis(layout, axisType);\n\n  const { tickCount } = axis;\n\n  let offset = 0;\n\n  offset =\n    axisType === 'angleAxis' && axisRange?.length >= 2 ? mathSign(axisRange[0] - axisRange[1]) * 2 * offset : offset;\n\n  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not \"auto\"\n  if (isCategorical && categoricalDomain) {\n    return categoricalDomain.map(\n      (entry: any, index: number): TickItem => ({\n        coordinate: scale(entry) + offset,\n        value: entry,\n        index,\n        offset,\n      }),\n    );\n  }\n\n  if (scale.ticks) {\n    return (\n      scale\n        .ticks(tickCount)\n        // @ts-expect-error why does the offset go here? The type does not require it\n        .map((entry: any): TickItem => ({ coordinate: scale(entry) + offset, value: entry, offset }))\n    );\n  }\n\n  // When axis has duplicated text, serial numbers are used to generate scale\n  return scale.domain().map(\n    (entry: any, index: number): TickItem => ({\n      coordinate: scale(entry) + offset,\n      value: duplicateDomain ? duplicateDomain[entry] : entry,\n      index,\n      offset,\n    }),\n  );\n};\n\nexport const selectTicksOfGraphicalItem: (\n  state: RechartsRootState,\n  axisType: XorYType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => TickItem[] | undefined = createSelector(\n  [\n    selectChartLayout,\n    selectAxisSettings,\n    selectAxisScale,\n    selectAxisRange,\n    selectDuplicateDomain,\n    selectCategoricalDomain,\n    pickAxisType,\n  ],\n  combineGraphicalItemTicks,\n);\n\nexport type BaseAxisWithScale = BaseCartesianAxis & { scale: RechartsScale };\n\nexport const selectAxisWithScale: (\n  state: RechartsRootState,\n  axisType: XorYorZType,\n  axisId: AxisId,\n  isPanorama: boolean,\n) => BaseAxisWithScale | undefined = createSelector(\n  selectBaseAxis,\n  selectAxisScale,\n  (axis, scale): BaseAxisWithScale | undefined => {\n    if (axis == null || scale == null) {\n      return undefined;\n    }\n    return {\n      ...axis,\n      scale,\n    };\n  },\n);\n\nconst selectZAxisScale: (\n  state: RechartsRootState,\n  axisType: 'zAxis',\n  axisId: AxisId,\n  isPanorama: false,\n) => RechartsScale | undefined = createSelector(\n  [selectBaseAxis, selectRealScaleType, selectAxisDomain, selectAxisRangeWithReverse],\n  combineScaleFunction,\n);\n\nexport type ZAxisWithScale = ZAxisSettings & { scale: RechartsScale };\n\nexport const selectZAxisWithScale = createSelector(\n  (state: RechartsRootState, _axisType: 'zAxis', axisId: AxisId) => selectZAxisSettings(state, axisId),\n  selectZAxisScale,\n  (axis: ZAxisSettings, scale: RechartsScale | undefined): ZAxisWithScale | undefined => {\n    if (axis == null || scale == null) {\n      return undefined;\n    }\n    return {\n      ...axis,\n      scale,\n    };\n  },\n);\n\n/**\n * We are also going to need to implement polar chart directions if we want to support keyboard controls for those.\n */\nexport type AxisDirection = 'left-to-right' | 'right-to-left' | 'top-to-bottom' | 'bottom-to-top';\n\nexport const selectChartDirection: (state: RechartsRootState) => AxisDirection | undefined = createSelector(\n  [selectChartLayout, selectAllXAxes, selectAllYAxes],\n  (\n    layout: LayoutType,\n    allXAxes: ReadonlyArray<XAxisSettings>,\n    allYAxes: ReadonlyArray<YAxisSettings>,\n  ): AxisDirection | undefined => {\n    switch (layout) {\n      case 'horizontal': {\n        return allXAxes.some(axis => axis.reversed) ? 'right-to-left' : 'left-to-right';\n      }\n      case 'vertical': {\n        return allYAxes.some(axis => axis.reversed) ? 'bottom-to-top' : 'top-to-bottom';\n      }\n      // TODO: make this better. For now, right arrow triggers \"forward\", left arrow \"back\"\n      // however, the tooltip moves an unintuitive direction because of how the indices are rendered\n      case 'centric':\n      case 'radial': {\n        return 'left-to-right';\n      }\n      default: {\n        return undefined;\n      }\n    }\n  },\n);\n","import { RechartsRootState } from '../store';\nimport { TooltipEventType } from '../../util/types';\nimport { useAppSelector } from '../hooks';\nimport { SharedTooltipSettings } from '../tooltipSlice';\n\nexport const selectDefaultTooltipEventType = (state: RechartsRootState): TooltipEventType =>\n  state.options.defaultTooltipEventType;\nexport const selectValidateTooltipEventTypes = (\n  state: RechartsRootState,\n): ReadonlyArray<TooltipEventType> | undefined => state.options.validateTooltipEventTypes;\n\nexport function combineTooltipEventType(\n  shared: SharedTooltipSettings,\n  defaultTooltipEventType: TooltipEventType,\n  validateTooltipEventTypes: ReadonlyArray<TooltipEventType> | undefined,\n): TooltipEventType {\n  if (shared == null) {\n    return defaultTooltipEventType;\n  }\n  const eventType = shared ? 'axis' : 'item';\n  if (validateTooltipEventTypes == null) {\n    return defaultTooltipEventType;\n  }\n  return validateTooltipEventTypes.includes(eventType) ? eventType : defaultTooltipEventType;\n}\n\nexport function selectTooltipEventType(state: RechartsRootState, shared: SharedTooltipSettings): TooltipEventType {\n  const defaultTooltipEventType = selectDefaultTooltipEventType(state);\n  const validateTooltipEventTypes = selectValidateTooltipEventTypes(state);\n  return combineTooltipEventType(shared, defaultTooltipEventType, validateTooltipEventTypes);\n}\n\nexport function useTooltipEventType(shared: SharedTooltipSettings): TooltipEventType | undefined {\n  return useAppSelector(state => selectTooltipEventType(state, shared));\n}\n","import { TickItem } from '../../../util/types';\nimport { TooltipIndex } from '../../tooltipSlice';\nimport { isNan } from '../../../util/DataUtils';\n\nexport const combineActiveLabel = (\n  tooltipTicks: ReadonlyArray<TickItem>,\n  activeIndex: TooltipIndex,\n): string | undefined => {\n  const n = Number(activeIndex);\n  if (isNan(n) || activeIndex == null) {\n    return undefined;\n  }\n  return n >= 0 ? tooltipTicks?.[n]?.value : undefined;\n};\n","import { createSlice, current, PayloadAction } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\nimport { TooltipTrigger } from '../chart/types';\nimport type { NameType, Payload, ValueType } from '../component/DefaultTooltipContent';\nimport { ChartCoordinate, Coordinate, DataKey } from '../util/types';\nimport { AxisId } from './cartesianAxisSlice';\n\n/**\n * One Tooltip can display multiple TooltipPayloadEntries at a time.\n */\nexport type TooltipPayloadEntry = Payload<ValueType, NameType>;\n\n/**\n * So what happens is that the tooltip payload is decided based on the available data, and the dataKey.\n * The dataKey can either be defined on the graphical element (like Line, or Bar)\n * or on the tooltip itself.\n *\n * The data can be defined in the chart element, or in the graphical item.\n *\n * So this type is all the settings, other than the data + dataKey complications.\n */\nexport type TooltipEntrySettings = Omit<TooltipPayloadEntry, 'payload' | 'value'> & {\n  nameKey: DataKey<any> | undefined;\n};\n\n/**\n * This is what Tooltip renders.\n */\nexport type TooltipPayload = ReadonlyArray<TooltipPayloadEntry>;\n\n/**\n * null means no active index\n * string means: whichever index from the chart data it is.\n * Different charts have different requirements on data shapes,\n * and are also responsible for providing a function that will accept this index\n * and return data.\n */\nexport type TooltipIndex = string | null;\n\n/**\n * Different items have different data shapes so the state has no opinion on what the data shape should be;\n * the only requirement is that the chart also provides a searcher function\n * that accepts the data, and a key, and returns whatever the payload in Tooltip should be.\n */\nexport type TooltipPayloadSearcher<T = unknown, R = T> = (\n  data: T,\n  index: TooltipIndex,\n  computedData?: unknown,\n  nameKey?: DataKey<any>,\n) => R | undefined;\n\nexport type TooltipPayloadConfiguration = {\n  // This is the data that is the same for all tooltip payloads, regardless of activeIndex\n  settings: TooltipEntrySettings;\n  /**\n   * This is the data that the item has provided, all of it mixed together.\n   * Later as user is interacting with the chart, a redux selector will use this\n   * data + activeIndex, pass it to the TooltipPayloadSearcher, and render the result in a Tooltip.\n   */\n  dataDefinedOnItem: unknown;\n  /**\n   * Opportunity for the graphical item to define its own Tooltip coordinates\n   * instead of relying on the axes.\n   *\n   * If undefined, then Recharts will use mouse interaction coordinates, or the axis coordinates,\n   * with some defaults (like, top/left of the chart).\n   */\n  positions: Record<NonNullable<TooltipIndex>, Coordinate> | ReadonlyArray<Coordinate> | undefined;\n};\n\nexport type ActiveTooltipProps = {\n  activeIndex: TooltipIndex;\n  activeCoordinate: ChartCoordinate | undefined;\n};\n\n/**\n * So this informs the \"tooltip event type\". Tooltip event type can be either \"axis\" or \"item\"\n * and it is used for two things:\n * 1. Sets the active area\n * 2. Sets the background and cursor highlights\n *\n * Some charts only allow to have one type of tooltip event type, some allow both.\n * Those charts that allow both will have one default, and the \"shared\" prop will be used to switch between them.\n * Undefined means \"use the chart default\".\n *\n * Charts that only allow one tooltip event type, will ignore the shared prop.\n */\nexport type SharedTooltipSettings = boolean | undefined;\n\nexport type TooltipSettingsState = {\n  shared: SharedTooltipSettings;\n  trigger: TooltipTrigger;\n  axisId: AxisId;\n  /**\n   * The `active` prop, despite its name, does not mean \"always active\".\n   * It means \"active after user interaction has ended\".\n   * By default, the tooltip is only active while the user is hovering over the chart.\n   * With `active=true`, the tooltip will remain visible after mouse leave event.\n   *\n   * If you want to see the \"active before user interaction\" settings, see `defaultIndex`.\n   *\n   * Undefined means \"depends on user interactions\".\n   */\n  active: boolean | undefined;\n  /**\n   * If you want to set the tooltip to be active before user interaction, you can set this property.\n   */\n  defaultIndex: TooltipIndex | undefined;\n};\n\n/**\n * A generic state for user interaction with the chart.\n * User interaction can come through multiple channels: mouse events, keyboard events, or hardcoded in props, or synchronised from other charts.\n *\n * Each of the interaction states is represented as TooltipInteractionState,\n * and then the selectors and Tooltip will decide which of the interaction states to use.\n */\nexport type TooltipInteractionState = {\n  /**\n   * If user interaction is in progress or not.\n   * Why is this its own property? Why is this not computed from the index?\n   * Certainly if index !== -1 then the tooltip is active, right?\n   * Well not so fast. Recharts allows Tooltips can be set to `active=true`\n   * which means the tooltip remains displayed after the user stops interacting.\n   * - This implies that we cannot set index to <empty value> after interaction ends,\n   *   because the chart must remember the last position just in case the `active` prop on Tooltip is set to true.\n   */\n  active: boolean;\n  /**\n   * This is the current data index that is set for the chart.\n   * This can come from mouse events, keyboard events, or hardcoded in props\n   * in property `defaultIndex` on Tooltip.\n   */\n  index: TooltipIndex | undefined;\n  /**\n   * DataKey filter.\n   *\n   * In case of multiple graphical items, this is the dataKey that is set for the item.\n   * Very useful for `Tooltip.shared=false`, where activeIndex can display multiple values,\n   * but we only want to display one of them.\n   *\n   * If we want to interact with all the graphical items, then this is undefined.\n   * This is the case for eventTooltipType === 'axis' for example.\n   */\n  dataKey: DataKey<any> | undefined;\n  /**\n   * The Coordinate where user last interacted with the chart. This needs saved so we can continue to render the tooltip at that point.\n   * This is undefined on several occasions:\n   * - before the user started interacting with the chart,\n   * - when the chart is controlled programmatically through `defaultIndex` prop\n   * - when the chart is controlled using keyboard interactions\n   */\n  coordinate: Coordinate | undefined;\n};\n\nexport type TooltipSyncState = TooltipInteractionState & {\n  /**\n   * Tooltip synchronization is a feature that allows multiple charts to share the same interaction state.\n   * This comes with one specialty - the syncMethod. `syncMethod=value` allows the user to synchronise charts\n   * based on the active label (which is rendered as the title of the Tooltip).\n   * To allow that, we need the label to be stored in the sync state.\n   */\n  label: string | undefined;\n};\n\nexport const noInteraction: TooltipInteractionState = {\n  active: false,\n  index: null,\n  dataKey: undefined,\n  coordinate: undefined,\n};\n\n/**\n * The tooltip interaction state stores:\n *\n * - Which graphical item is user interacting with at the moment,\n * - which axis (or, which part of chart background) is user interacting with at the moment\n * - The data that individual graphical items wish to be displayed in case the tooltip gets activated\n */\nexport type TooltipState = {\n  /**\n   * This is the state of interactions with individual graphical items.\n   */\n  itemInteraction: {\n    click: TooltipInteractionState;\n    /**\n     * Why is hover activation separate from click activation? Because they are independent:\n     * If a click is set, then mouseLeave should not clear it.\n     * - the opposite is technically true too - but it's difficult to click on things without also hovering.\n     */\n    hover: TooltipInteractionState;\n  };\n  /**\n   * This is the state of interaction with the bar background - which will get mapped\n   * to the axis index.\n   *\n   * Axis interaction is independent of item interaction so the state must also be independent.\n   */\n  axisInteraction: {\n    click: TooltipInteractionState;\n    hover: TooltipInteractionState;\n  };\n  keyboardInteraction: TooltipInteractionState;\n  /**\n   * This part of the state is the information coming from other charts.\n   * If there are two charts with the same syncId, events from one chart will be transferred\n   * to other charts. So this is what the other charts are reporting.\n   */\n  syncInteraction: TooltipSyncState;\n  /**\n   * One graphical item will have one configuration;\n   * hovering over multiple of them (for example with tooltipEventType===axis)\n   * may render multiple tooltip payloads.\n   */\n  tooltipItemPayloads: ReadonlyArray<TooltipPayloadConfiguration>;\n  /**\n   * Tooltip props or other settings that need redux access.\n   * This assumes that there is always only one Tooltip. In case we want to start supporting multiple Tooltips,\n   * we have to change this to an array - and update all the places reading this state too.\n   */\n  settings: TooltipSettingsState;\n};\n\nexport const initialState: TooltipState = {\n  itemInteraction: {\n    click: noInteraction,\n    hover: noInteraction,\n  },\n  axisInteraction: {\n    click: noInteraction,\n    hover: noInteraction,\n  },\n  keyboardInteraction: noInteraction,\n  syncInteraction: {\n    active: false,\n    index: null,\n    dataKey: undefined,\n    label: undefined,\n    coordinate: undefined,\n  },\n  tooltipItemPayloads: [],\n  settings: {\n    shared: undefined,\n    trigger: 'hover',\n    axisId: 0,\n    active: false,\n    defaultIndex: undefined,\n  },\n};\n\nexport type TooltipActionPayload = {\n  activeIndex: TooltipIndex | undefined;\n  activeDataKey: DataKey<any> | undefined;\n  activeCoordinate?: ChartCoordinate | undefined;\n};\n\nconst tooltipSlice = createSlice({\n  name: 'tooltip',\n  initialState,\n  reducers: {\n    addTooltipEntrySettings(state, action: PayloadAction<TooltipPayloadConfiguration>) {\n      state.tooltipItemPayloads.push(castDraft(action.payload));\n    },\n    removeTooltipEntrySettings(state, action: PayloadAction<TooltipPayloadConfiguration>) {\n      const index = current(state).tooltipItemPayloads.indexOf(castDraft(action.payload));\n      if (index > -1) {\n        state.tooltipItemPayloads.splice(index, 1);\n      }\n    },\n    setTooltipSettingsState(state, action: PayloadAction<TooltipSettingsState>) {\n      state.settings = action.payload;\n    },\n    setActiveMouseOverItemIndex(state, action: PayloadAction<TooltipActionPayload>) {\n      state.syncInteraction.active = false;\n      state.keyboardInteraction.active = false;\n      state.itemInteraction.hover.active = true;\n      state.itemInteraction.hover.index = action.payload.activeIndex;\n      state.itemInteraction.hover.dataKey = action.payload.activeDataKey;\n      state.itemInteraction.hover.coordinate = action.payload.activeCoordinate;\n    },\n    mouseLeaveChart(state) {\n      /*\n       * Clear only the active flags. Why?\n       * 1. Keep Coordinate to preserve animation - next time the Tooltip appears, we want to render it from\n       * the last place where it was when it disappeared.\n       * 2. We want to keep all the properties anyway just in case the tooltip has `active=true` prop\n       * and continues being visible even after the mouse has left the chart.\n       */\n      state.itemInteraction.hover.active = false;\n      state.axisInteraction.hover.active = false;\n    },\n    mouseLeaveItem(state) {\n      state.itemInteraction.hover.active = false;\n    },\n    setActiveClickItemIndex(state, action: PayloadAction<TooltipActionPayload>) {\n      state.syncInteraction.active = false;\n      state.itemInteraction.click.active = true;\n      state.keyboardInteraction.active = false;\n      state.itemInteraction.click.index = action.payload.activeIndex;\n      state.itemInteraction.click.dataKey = action.payload.activeDataKey;\n      state.itemInteraction.click.coordinate = action.payload.activeCoordinate;\n    },\n    setMouseOverAxisIndex(state, action: PayloadAction<TooltipActionPayload>) {\n      state.syncInteraction.active = false;\n      state.axisInteraction.hover.active = true;\n      state.keyboardInteraction.active = false;\n      state.axisInteraction.hover.index = action.payload.activeIndex;\n      state.axisInteraction.hover.dataKey = action.payload.activeDataKey;\n      state.axisInteraction.hover.coordinate = action.payload.activeCoordinate;\n    },\n    setMouseClickAxisIndex(state, action: PayloadAction<TooltipActionPayload>) {\n      state.syncInteraction.active = false;\n      state.keyboardInteraction.active = false;\n      state.axisInteraction.click.active = true;\n      state.axisInteraction.click.index = action.payload.activeIndex;\n      state.axisInteraction.click.dataKey = action.payload.activeDataKey;\n      state.axisInteraction.click.coordinate = action.payload.activeCoordinate;\n    },\n    setSyncInteraction(state, action: PayloadAction<TooltipSyncState>) {\n      state.syncInteraction = action.payload;\n    },\n    setKeyboardInteraction(state, action: PayloadAction<TooltipActionPayload & { active: boolean }>) {\n      state.keyboardInteraction.active = action.payload.active;\n      state.keyboardInteraction.index = action.payload.activeIndex;\n      state.keyboardInteraction.coordinate = action.payload.activeCoordinate;\n      state.keyboardInteraction.dataKey = action.payload.activeDataKey;\n    },\n  },\n});\n\nexport const {\n  addTooltipEntrySettings,\n  removeTooltipEntrySettings,\n  setTooltipSettingsState,\n  setActiveMouseOverItemIndex,\n  mouseLeaveItem,\n  mouseLeaveChart,\n  setActiveClickItemIndex,\n  setMouseOverAxisIndex,\n  setMouseClickAxisIndex,\n  setSyncInteraction,\n  setKeyboardInteraction,\n} = tooltipSlice.actions;\n\nexport const tooltipReducer = tooltipSlice.reducer;\n","import { noInteraction, TooltipIndex, TooltipInteractionState, TooltipState } from '../../tooltipSlice';\nimport { TooltipEventType } from '../../../util/types';\nimport { TooltipTrigger } from '../../../chart/types';\n\nfunction chooseAppropriateMouseInteraction(\n  tooltipState: TooltipState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n): TooltipInteractionState | undefined {\n  if (tooltipEventType === 'axis') {\n    if (trigger === 'click') {\n      return tooltipState.axisInteraction.click;\n    }\n    return tooltipState.axisInteraction.hover;\n  }\n  if (trigger === 'click') {\n    return tooltipState.itemInteraction.click;\n  }\n  return tooltipState.itemInteraction.hover;\n}\n\nfunction hasBeenActivePreviously(tooltipInteractionState: TooltipInteractionState): boolean {\n  return tooltipInteractionState.index != null;\n}\n\nexport const combineTooltipInteractionState = (\n  tooltipState: TooltipState,\n  tooltipEventType: TooltipEventType | undefined,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n): TooltipInteractionState => {\n  if (tooltipEventType == null) {\n    return noInteraction;\n  }\n  const appropriateMouseInteraction = chooseAppropriateMouseInteraction(tooltipState, tooltipEventType, trigger);\n\n  if (appropriateMouseInteraction == null) {\n    return noInteraction;\n  }\n\n  if (appropriateMouseInteraction.active) {\n    return appropriateMouseInteraction;\n  }\n\n  if (tooltipState.keyboardInteraction.active) {\n    return tooltipState.keyboardInteraction;\n  }\n\n  if (tooltipState.syncInteraction.active && tooltipState.syncInteraction.index != null) {\n    return tooltipState.syncInteraction;\n  }\n\n  const activeFromProps = tooltipState.settings.active === true;\n\n  if (hasBeenActivePreviously(appropriateMouseInteraction)) {\n    if (activeFromProps) {\n      return {\n        ...appropriateMouseInteraction,\n        active: true,\n      };\n    }\n  } else if (defaultIndex != null) {\n    return {\n      active: true,\n      coordinate: undefined,\n      dataKey: undefined,\n      index: defaultIndex,\n    };\n  }\n\n  return {\n    ...noInteraction,\n    coordinate: appropriateMouseInteraction.coordinate,\n  };\n};\n","import { TooltipIndex, TooltipInteractionState } from '../../tooltipSlice';\nimport { ChartData } from '../../chartDataSlice';\nimport { isWellBehavedNumber } from '../../../util/isWellBehavedNumber';\n\nexport const combineActiveTooltipIndex = (\n  tooltipInteraction: TooltipInteractionState,\n  chartData: ChartData,\n): TooltipIndex | null => {\n  const desiredIndex: TooltipIndex | undefined = tooltipInteraction?.index;\n  if (desiredIndex == null) {\n    return null;\n  }\n\n  const indexAsNumber = Number(desiredIndex);\n  if (!isWellBehavedNumber(indexAsNumber)) {\n    // this is for charts like Sankey and Treemap that do not support numerical indexes. We need a proper solution for this before we can start supporting keyboard events on these charts.\n    return desiredIndex;\n  }\n\n  /*\n   * Zero is a trivial limit for single-dimensional charts like Line and Area,\n   * but this also needs a support for multidimensional charts like Sankey and Treemap! TODO\n   */\n  const lowerLimit = 0;\n  let upperLimit: number = +Infinity;\n\n  if (chartData.length > 0) {\n    upperLimit = chartData.length - 1;\n  }\n\n  // now let's clamp the desiredIndex between the limits\n  return String(Math.max(lowerLimit, Math.min(indexAsNumber, upperLimit)));\n};\n","import { ChartOffsetInternal, Coordinate, LayoutType, TickItem } from '../../../util/types';\nimport { TooltipIndex, TooltipPayloadConfiguration, TooltipPayloadSearcher } from '../../tooltipSlice';\n\nexport const combineCoordinateForDefaultIndex = (\n  width: number,\n  height: number,\n  layout: LayoutType,\n  offset: ChartOffsetInternal,\n  tooltipTicks: ReadonlyArray<TickItem>,\n  defaultIndex: TooltipIndex | undefined,\n  tooltipConfigurations: ReadonlyArray<TooltipPayloadConfiguration>,\n  tooltipPayloadSearcher: TooltipPayloadSearcher | undefined,\n): Coordinate | undefined => {\n  if (defaultIndex == null || tooltipPayloadSearcher == null) {\n    return undefined;\n  }\n  // With defaultIndex alone, we don't have enough information to decide _which_ of the multiple tooltips to display. So we choose the first one.\n  const firstConfiguration = tooltipConfigurations[0];\n  // @ts-expect-error we need to rethink the tooltipPayloadSearcher type\n  const maybePosition: Coordinate | undefined =\n    firstConfiguration == null ? undefined : tooltipPayloadSearcher(firstConfiguration.positions, defaultIndex);\n  if (maybePosition != null) {\n    return maybePosition;\n  }\n  const tick = tooltipTicks?.[Number(defaultIndex)];\n  if (!tick) {\n    return undefined;\n  }\n  switch (layout) {\n    case 'horizontal': {\n      return {\n        x: tick.coordinate,\n        y: (offset.top + height) / 2,\n      };\n    }\n    default: {\n      // This logic is not super sound - it conflates vertical, radial, centric layouts into just one. TODO improve!\n      return {\n        x: (offset.left + width) / 2,\n        y: tick.coordinate,\n      };\n    }\n  }\n};\n","import { TooltipIndex, TooltipPayloadConfiguration, TooltipState } from '../../tooltipSlice';\nimport { DataKey, TooltipEventType } from '../../../util/types';\nimport { TooltipTrigger } from '../../../chart/types';\n\nexport const combineTooltipPayloadConfigurations = (\n  tooltipState: TooltipState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n): ReadonlyArray<TooltipPayloadConfiguration> => {\n  // if tooltip reacts to axis interaction, then we display all items at the same time.\n  if (tooltipEventType === 'axis') {\n    return tooltipState.tooltipItemPayloads;\n  }\n  /*\n   * By now we already know that tooltipEventType is 'item', so we can only search in itemInteractions.\n   * item means that only the hovered or clicked item will be present in the tooltip.\n   */\n  if (tooltipState.tooltipItemPayloads.length === 0) {\n    // No point filtering if the payload is empty\n    return [];\n  }\n  let filterByDataKey: DataKey<any> | undefined;\n  if (trigger === 'hover') {\n    filterByDataKey = tooltipState.itemInteraction.hover.dataKey;\n  } else {\n    filterByDataKey = tooltipState.itemInteraction.click.dataKey;\n  }\n  if (filterByDataKey == null && defaultIndex != null) {\n    /*\n     * So when we use `defaultIndex` - we don't have a dataKey to filter by because user did not hover over anything yet.\n     * In that case let's display the first item in the tooltip; after all, this is `item` interaction case,\n     * so we should display only one item at a time instead of all.\n     */\n    return [tooltipState.tooltipItemPayloads[0]];\n  }\n  return tooltipState.tooltipItemPayloads.filter(tpc => tpc.settings?.dataKey === filterByDataKey);\n};\n","import { RechartsRootState } from '../store';\nimport { TooltipPayloadSearcher } from '../tooltipSlice';\n\nexport const selectTooltipPayloadSearcher = (state: RechartsRootState): TooltipPayloadSearcher | undefined =>\n  state.options.tooltipPayloadSearcher;\n","import { RechartsRootState } from '../store';\nimport { TooltipState } from '../tooltipSlice';\n\nexport const selectTooltipState = (state: RechartsRootState): TooltipState => state.tooltip;\n","import {\n  TooltipEntrySettings,\n  TooltipIndex,\n  TooltipPayload,\n  TooltipPayloadConfiguration,\n  TooltipPayloadEntry,\n  TooltipPayloadSearcher,\n} from '../../tooltipSlice';\nimport { ChartData, ChartDataState } from '../../chartDataSlice';\nimport { BaseAxisProps, DataKey, TooltipEventType } from '../../../util/types';\nimport { findEntryInArray } from '../../../util/DataUtils';\nimport { getTooltipEntry, getValueByDataKey } from '../../../util/ChartUtils';\nimport { getSliced } from '../../../util/getSliced';\n\nfunction selectFinalData(dataDefinedOnItem: unknown, dataDefinedOnChart: ChartData | undefined): unknown {\n  /*\n   * If a payload has data specified directly from the graphical item, prefer that.\n   * Otherwise, fill in data from the chart level, using the same index.\n   */\n  if (dataDefinedOnItem != null) {\n    return dataDefinedOnItem;\n  }\n  return dataDefinedOnChart;\n}\n\nexport const combineTooltipPayload = (\n  tooltipPayloadConfigurations: ReadonlyArray<TooltipPayloadConfiguration>,\n  activeIndex: TooltipIndex,\n  chartDataState: ChartDataState,\n  tooltipAxis: BaseAxisProps | undefined,\n  activeLabel: string | undefined,\n  tooltipPayloadSearcher: TooltipPayloadSearcher | undefined,\n  tooltipEventType: TooltipEventType,\n): TooltipPayload | undefined => {\n  if (activeIndex == null || tooltipPayloadSearcher == null) {\n    return undefined;\n  }\n  const { chartData, computedData, dataStartIndex, dataEndIndex } = chartDataState;\n\n  const init: Array<TooltipPayloadEntry> = [];\n\n  return tooltipPayloadConfigurations.reduce((agg, { dataDefinedOnItem, settings }): Array<TooltipPayloadEntry> => {\n    const finalData = selectFinalData(dataDefinedOnItem, chartData);\n\n    const sliced = Array.isArray(finalData) ? getSliced(finalData, dataStartIndex, dataEndIndex) : finalData;\n\n    const finalDataKey: DataKey<any> | undefined = settings?.dataKey ?? tooltipAxis?.dataKey;\n    // BaseAxisProps does not support nameKey but it could!\n    const finalNameKey: DataKey<any> | undefined = settings?.nameKey; // ?? tooltipAxis?.nameKey;\n    let tooltipPayload: unknown;\n    if (\n      tooltipAxis?.dataKey &&\n      Array.isArray(sliced) &&\n      /*\n       * findEntryInArray won't work for Scatter because Scatter provides an array of arrays\n       * as tooltip payloads and findEntryInArray is not prepared to handle that.\n       * Sad but also ScatterChart only allows 'item' tooltipEventType\n       * and also this is only a problem if there are multiple Scatters and each has its own data array\n       * so let's fix that some other time.\n       */\n      !Array.isArray(sliced[0]) &&\n      /*\n       * If the tooltipEventType is 'axis', we should search for the dataKey in the sliced data\n       * because thanks to allowDuplicatedCategory=false, the order of elements in the array\n       * no longer matches the order of elements in the original data\n       * and so we need to search by the active dataKey + label rather than by index.\n       *\n       * The same happens if multiple graphical items are present in the chart\n       * and each of them has its own data array. Those arrays get concatenated\n       * and again the tooltip index no longer matches the original data.\n       *\n       * On the other hand the tooltipEventType 'item' should always search by index\n       * because we get the index from interacting over the individual elements\n       * which is always accurate, irrespective of the allowDuplicatedCategory setting.\n       */\n      tooltipEventType === 'axis'\n    ) {\n      tooltipPayload = findEntryInArray(sliced, tooltipAxis.dataKey, activeLabel);\n    } else {\n      /*\n       * This is a problem because it assumes that the index is pointing to the displayed data\n       * which it isn't because the index is pointing to the tooltip ticks array.\n       * The above approach (with findEntryInArray) is the correct one, but it only works\n       * if the axis dataKey is defined explicitly, and if the data is an array of objects.\n       */\n      tooltipPayload = tooltipPayloadSearcher(sliced, activeIndex, computedData, finalNameKey);\n    }\n\n    if (Array.isArray(tooltipPayload)) {\n      tooltipPayload.forEach(item => {\n        const newSettings: TooltipEntrySettings = {\n          ...settings,\n          name: item.name,\n          unit: item.unit,\n          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.\n          color: undefined,\n          // color and fill are erased to keep 100% the identical behaviour to recharts 2.x - but there's nothing stopping us from returning them here. It's technically a breaking change.\n          fill: undefined,\n        };\n        agg.push(\n          getTooltipEntry({\n            tooltipEntrySettings: newSettings,\n            dataKey: item.dataKey,\n            payload: item.payload,\n            // @ts-expect-error getValueByDataKey does not validate the output type\n            value: getValueByDataKey(item.payload, item.dataKey),\n            name: item.name,\n          }),\n        );\n      });\n    } else {\n      // I am not quite sure why these two branches (Array vs Array of Arrays) have to behave differently - I imagine we should unify these. 3.x breaking change?\n      agg.push(\n        getTooltipEntry({\n          tooltipEntrySettings: settings,\n          dataKey: finalDataKey,\n          payload: tooltipPayload,\n          // @ts-expect-error getValueByDataKey does not validate the output type\n          value: getValueByDataKey(tooltipPayload, finalDataKey),\n          // @ts-expect-error getValueByDataKey does not validate the output type\n          name: getValueByDataKey(tooltipPayload, finalNameKey) ?? settings?.name,\n        }),\n      );\n    }\n    return agg;\n  }, init);\n};\n","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport {\n  AppliedChartDataWithErrorDomain,\n  AxisRange,\n  AxisWithTicksSettings,\n  combineAppliedNumericalValuesIncludingErrorValues,\n  combineAppliedValues,\n  combineAreasDomain,\n  combineAxisDomain,\n  combineAxisDomainWithNiceTicks,\n  combineCategoricalDomain,\n  combineDisplayedData,\n  combineDomainOfStackGroups,\n  combineDotsDomain,\n  combineDuplicateDomain,\n  combineGraphicalItemsData,\n  combineGraphicalItemsSettings,\n  combineLinesDomain,\n  combineNiceTicks,\n  combineNumericalDomain,\n  combineRealScaleType,\n  combineScaleFunction,\n  combineStackGroups,\n  filterGraphicalNotStackedItems,\n  filterReferenceElements,\n  getDomainDefinition,\n  itemAxisPredicate,\n  mergeDomains,\n  selectAllErrorBarSettings,\n  selectAxisRange,\n  selectHasBar,\n  selectReferenceAreas,\n  selectReferenceDots,\n  selectReferenceLines,\n  XorYType,\n} from './axisSelectors';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { isCategoricalAxis, RechartsScale, StackId } from '../../util/ChartUtils';\nimport {\n  AxisDomain,\n  CategoricalDomain,\n  Coordinate,\n  DataKey,\n  LayoutType,\n  NumberDomain,\n  TickItem,\n  TooltipEventType,\n} from '../../util/types';\nimport { AppliedChartData, ChartData } from '../chartDataSlice';\nimport { selectChartDataWithIndexes } from './dataSelectors';\nimport { GraphicalItemSettings } from '../graphicalItemsSlice';\nimport { ReferenceAreaSettings, ReferenceDotSettings, ReferenceLineSettings } from '../referenceElementsSlice';\nimport { selectChartName, selectStackOffsetType } from './rootPropsSelectors';\nimport { mathSign } from '../../util/DataUtils';\nimport { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';\nimport { TooltipIndex, TooltipInteractionState, TooltipPayload, TooltipSettingsState } from '../tooltipSlice';\n\nimport {\n  combineTooltipEventType,\n  selectDefaultTooltipEventType,\n  selectValidateTooltipEventTypes,\n} from './selectTooltipEventType';\n\nimport { combineActiveLabel } from './combiners/combineActiveLabel';\n\nimport { selectTooltipSettings } from './selectTooltipSettings';\n\nimport { combineTooltipInteractionState } from './combiners/combineTooltipInteractionState';\nimport { combineActiveTooltipIndex } from './combiners/combineActiveTooltipIndex';\nimport { combineCoordinateForDefaultIndex } from './combiners/combineCoordinateForDefaultIndex';\nimport { selectChartHeight, selectChartWidth } from './containerSelectors';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport { combineTooltipPayloadConfigurations } from './combiners/combineTooltipPayloadConfigurations';\nimport { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';\nimport { selectTooltipState } from './selectTooltipState';\n\nimport { combineTooltipPayload } from './combiners/combineTooltipPayload';\nimport { StackGroup } from '../../util/stacks/stackTypes';\nimport { selectTooltipAxisId } from './selectTooltipAxisId';\nimport { selectTooltipAxisType } from './selectTooltipAxisType';\nimport { selectTooltipAxis } from './selectTooltipAxis';\nimport { combineDisplayedStackedData, DisplayedStackedData } from './combiners/combineDisplayedStackedData';\nimport { DefinitelyStackedGraphicalItem, isStacked } from '../types/StackedGraphicalItem';\n\nexport const selectTooltipAxisRealScaleType: (state: RechartsRootState) => string | undefined = createSelector(\n  [selectTooltipAxis, selectChartLayout, selectHasBar, selectChartName, selectTooltipAxisType],\n  combineRealScaleType,\n);\n\nexport const selectAllUnfilteredGraphicalItems: (state: RechartsRootState) => ReadonlyArray<GraphicalItemSettings> =\n  createSelector(\n    [\n      (state: RechartsRootState) => state.graphicalItems.cartesianItems,\n      (state: RechartsRootState) => state.graphicalItems.polarItems,\n    ],\n    (cartesianItems, polarItems) => [...cartesianItems, ...polarItems],\n  );\n\nconst selectTooltipAxisPredicate = createSelector([selectTooltipAxisType, selectTooltipAxisId], itemAxisPredicate);\n\nexport const selectAllGraphicalItemsSettings = createSelector(\n  [selectAllUnfilteredGraphicalItems, selectTooltipAxis, selectTooltipAxisPredicate],\n  combineGraphicalItemsSettings,\n);\n\nconst selectAllStackedGraphicalItemsSettings: (\n  state: RechartsRootState,\n) => ReadonlyArray<DefinitelyStackedGraphicalItem> = createSelector(\n  [selectAllGraphicalItemsSettings],\n  (graphicalItems: ReadonlyArray<GraphicalItemSettings>) => graphicalItems.filter(isStacked),\n);\n\nexport const selectTooltipGraphicalItemsData = createSelector(\n  [selectAllGraphicalItemsSettings],\n  combineGraphicalItemsData,\n);\n\n/**\n * Data for tooltip always use the data with indexes set by a Brush,\n * and never accept the isPanorama flag:\n * because Tooltip never displays inside the panorama anyway\n * so we don't need to worry what would happen there.\n */\nexport const selectTooltipDisplayedData: (state: RechartsRootState) => ChartData = createSelector(\n  [selectTooltipGraphicalItemsData, selectChartDataWithIndexes],\n  combineDisplayedData,\n);\n\nconst selectTooltipStackedData: (state: RechartsRootState) => DisplayedStackedData = createSelector(\n  [selectAllStackedGraphicalItemsSettings, selectChartDataWithIndexes, selectTooltipAxis],\n  combineDisplayedStackedData,\n);\n\nconst selectAllTooltipAppliedValues: (state: RechartsRootState) => AppliedChartData = createSelector(\n  [selectTooltipDisplayedData, selectTooltipAxis, selectAllGraphicalItemsSettings],\n  combineAppliedValues,\n);\n\nconst selectTooltipAxisDomainDefinition: (state: RechartsRootState) => AxisDomain | undefined = createSelector(\n  [selectTooltipAxis],\n  getDomainDefinition,\n);\n\nconst selectAllStackedGraphicalItems: (state: RechartsRootState) => ReadonlyArray<DefinitelyStackedGraphicalItem> =\n  createSelector([selectAllGraphicalItemsSettings], (graphicalItems: ReadonlyArray<GraphicalItemSettings>) =>\n    graphicalItems.filter(isStacked),\n  );\n\nconst selectTooltipStackGroups: (state: RechartsRootState) => Record<StackId, StackGroup> = createSelector(\n  [selectTooltipStackedData, selectAllStackedGraphicalItems, selectStackOffsetType],\n  combineStackGroups,\n);\n\nconst selectTooltipDomainOfStackGroups: (state: RechartsRootState) => NumberDomain | undefined = createSelector(\n  [selectTooltipStackGroups, selectChartDataWithIndexes, selectTooltipAxisType],\n  combineDomainOfStackGroups,\n);\n\nconst selectTooltipItemsSettingsExceptStacked: (state: RechartsRootState) => ReadonlyArray<GraphicalItemSettings> =\n  createSelector([selectAllGraphicalItemsSettings], filterGraphicalNotStackedItems);\n\nconst selectTooltipAllAppliedNumericalValuesIncludingErrorValues: (\n  state: RechartsRootState,\n) => ReadonlyArray<AppliedChartDataWithErrorDomain> = createSelector(\n  [\n    selectTooltipDisplayedData,\n    selectTooltipAxis,\n    selectTooltipItemsSettingsExceptStacked,\n    selectAllErrorBarSettings,\n    selectTooltipAxisType,\n  ],\n  combineAppliedNumericalValuesIncludingErrorValues,\n);\n\nconst selectReferenceDotsByTooltipAxis: (state: RechartsRootState) => ReadonlyArray<ReferenceDotSettings> | undefined =\n  createSelector([selectReferenceDots, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);\n\nconst selectTooltipReferenceDotsDomain: (state: RechartsRootState) => NumberDomain | undefined = createSelector(\n  [selectReferenceDotsByTooltipAxis, selectTooltipAxisType],\n  combineDotsDomain,\n);\n\nconst selectReferenceAreasByTooltipAxis: (\n  state: RechartsRootState,\n) => ReadonlyArray<ReferenceAreaSettings> | undefined = createSelector(\n  [selectReferenceAreas, selectTooltipAxisType, selectTooltipAxisId],\n  filterReferenceElements,\n);\n\nconst selectTooltipReferenceAreasDomain: (state: RechartsRootState) => NumberDomain | undefined = createSelector(\n  [selectReferenceAreasByTooltipAxis, selectTooltipAxisType],\n  combineAreasDomain,\n);\n\nconst selectReferenceLinesByTooltipAxis: (\n  state: RechartsRootState,\n) => ReadonlyArray<ReferenceLineSettings> | undefined = createSelector(\n  [selectReferenceLines, selectTooltipAxisType, selectTooltipAxisId],\n  filterReferenceElements,\n);\n\nconst selectTooltipReferenceLinesDomain: (state: RechartsRootState) => NumberDomain | undefined = createSelector(\n  [selectReferenceLinesByTooltipAxis, selectTooltipAxisType],\n  combineLinesDomain,\n);\n\nconst selectTooltipReferenceElementsDomain: (state: RechartsRootState) => NumberDomain | undefined = createSelector(\n  [selectTooltipReferenceDotsDomain, selectTooltipReferenceLinesDomain, selectTooltipReferenceAreasDomain],\n  mergeDomains,\n);\n\nconst selectTooltipNumericalDomain: (state: RechartsRootState) => NumberDomain | undefined = createSelector(\n  [\n    selectTooltipAxis,\n    selectTooltipAxisDomainDefinition,\n    selectTooltipDomainOfStackGroups,\n    selectTooltipAllAppliedNumericalValuesIncludingErrorValues,\n    selectTooltipReferenceElementsDomain,\n    selectChartLayout,\n    selectTooltipAxisType,\n  ],\n  combineNumericalDomain,\n);\n\nexport const selectTooltipAxisDomain: (state: RechartsRootState) => NumberDomain | CategoricalDomain | undefined =\n  createSelector(\n    [\n      selectTooltipAxis,\n      selectChartLayout,\n      selectTooltipDisplayedData,\n      selectAllTooltipAppliedValues,\n      selectStackOffsetType,\n      selectTooltipAxisType,\n      selectTooltipNumericalDomain,\n    ],\n    combineAxisDomain,\n  );\n\nconst selectTooltipNiceTicks: (state: RechartsRootState) => ReadonlyArray<number> | undefined = createSelector(\n  [selectTooltipAxisDomain, selectTooltipAxis, selectTooltipAxisRealScaleType],\n  combineNiceTicks,\n);\n\nexport const selectTooltipAxisDomainIncludingNiceTicks: (\n  state: RechartsRootState,\n) => NumberDomain | CategoricalDomain | undefined = createSelector(\n  [selectTooltipAxis, selectTooltipAxisDomain, selectTooltipNiceTicks, selectTooltipAxisType],\n  combineAxisDomainWithNiceTicks,\n);\n\nconst selectTooltipAxisRange = (state: RechartsRootState): AxisRange | undefined => {\n  const axisType = selectTooltipAxisType(state);\n  const axisId = selectTooltipAxisId(state);\n  const isPanorama = false; // Tooltip never displays in panorama so this is safe to assume\n  return selectAxisRange(state, axisType, axisId, isPanorama);\n};\n\nexport const selectTooltipAxisRangeWithReverse: (state: RechartsRootState) => AxisRange | undefined = createSelector(\n  [selectTooltipAxis, selectTooltipAxisRange],\n  combineAxisRangeWithReverse,\n);\n\nexport const selectTooltipAxisScale: (state: RechartsRootState) => RechartsScale | undefined = createSelector(\n  [\n    selectTooltipAxis,\n    selectTooltipAxisRealScaleType,\n    selectTooltipAxisDomainIncludingNiceTicks,\n    selectTooltipAxisRangeWithReverse,\n  ],\n  combineScaleFunction,\n);\n\nconst selectTooltipDuplicateDomain: (state: RechartsRootState) => ReadonlyArray<unknown> | undefined = createSelector(\n  [selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType],\n  combineDuplicateDomain,\n);\n\nexport const selectTooltipCategoricalDomain: (state: RechartsRootState) => ReadonlyArray<unknown> | undefined =\n  createSelector(\n    [selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType],\n    combineCategoricalDomain,\n  );\n\nconst combineTicksOfTooltipAxis = (\n  layout: LayoutType,\n  axis: AxisWithTicksSettings,\n  realScaleType: string,\n  scale: RechartsScale | undefined,\n  range: AxisRange | undefined,\n  duplicateDomain: ReadonlyArray<unknown> | undefined,\n  categoricalDomain: ReadonlyArray<unknown> | undefined,\n  axisType: XorYType,\n): ReadonlyArray<TickItem> | undefined => {\n  if (!axis) {\n    return undefined;\n  }\n  const { type } = axis;\n\n  const isCategorical = isCategoricalAxis(layout, axisType);\n\n  if (!scale) {\n    return undefined;\n  }\n\n  const offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;\n  let offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;\n\n  offset =\n    axisType === 'angleAxis' && range != null && range?.length >= 2\n      ? mathSign(range[0] - range[1]) * 2 * offset\n      : offset;\n\n  // When axis is a categorical axis, but the type of axis is number or the scale of axis is not \"auto\"\n  if (isCategorical && categoricalDomain) {\n    return categoricalDomain.map(\n      (entry: any, index: number): TickItem => ({\n        coordinate: scale(entry) + offset,\n        value: entry,\n        index,\n        offset,\n      }),\n    );\n  }\n\n  // When axis has duplicated text, serial numbers are used to generate scale\n  return scale.domain().map(\n    (entry: any, index: number): TickItem => ({\n      coordinate: scale(entry) + offset,\n      value: duplicateDomain ? duplicateDomain[entry] : entry,\n      index,\n      offset,\n    }),\n  );\n};\n\nexport const selectTooltipAxisTicks: (state: RechartsRootState) => ReadonlyArray<TickItem> | undefined = createSelector(\n  [\n    selectChartLayout,\n    selectTooltipAxis,\n    selectTooltipAxisRealScaleType,\n    selectTooltipAxisScale,\n    selectTooltipAxisRange,\n    selectTooltipDuplicateDomain,\n    selectTooltipCategoricalDomain,\n    selectTooltipAxisType,\n  ],\n  combineTicksOfTooltipAxis,\n);\n\nconst selectTooltipEventType: (state: RechartsRootState) => TooltipEventType | undefined = createSelector(\n  [selectDefaultTooltipEventType, selectValidateTooltipEventTypes, selectTooltipSettings],\n  (defaultTooltipEventType, validateTooltipEventType, settings: TooltipSettingsState) =>\n    combineTooltipEventType(settings.shared, defaultTooltipEventType, validateTooltipEventType),\n);\n\nconst selectTooltipTrigger = (state: RechartsRootState) => state.tooltip.settings.trigger;\n\nconst selectDefaultIndex: (state: RechartsRootState) => TooltipIndex | undefined = state =>\n  state.tooltip.settings.defaultIndex;\n\nconst selectTooltipInteractionState: (state: RechartsRootState) => TooltipInteractionState | undefined = createSelector(\n  [selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex],\n  combineTooltipInteractionState,\n);\n\nexport const selectActiveTooltipIndex: (state: RechartsRootState) => TooltipIndex | null = createSelector(\n  [selectTooltipInteractionState, selectTooltipDisplayedData],\n  combineActiveTooltipIndex,\n);\n\nexport const selectActiveLabel: (state: RechartsRootState) => string | undefined = createSelector(\n  [selectTooltipAxisTicks, selectActiveTooltipIndex],\n  combineActiveLabel,\n);\n\nexport const selectActiveTooltipDataKey: (state: RechartsRootState) => DataKey<any> | undefined = createSelector(\n  [selectTooltipInteractionState],\n  (tooltipInteraction: TooltipInteractionState): DataKey<any> | undefined => {\n    if (!tooltipInteraction) {\n      return undefined;\n    }\n\n    return tooltipInteraction.dataKey;\n  },\n);\n\nconst selectTooltipPayloadConfigurations = createSelector(\n  [selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex],\n  combineTooltipPayloadConfigurations,\n);\n\nconst selectTooltipCoordinateForDefaultIndex: (state: RechartsRootState) => Coordinate | undefined = createSelector(\n  [\n    selectChartWidth,\n    selectChartHeight,\n    selectChartLayout,\n    selectChartOffsetInternal,\n    selectTooltipAxisTicks,\n    selectDefaultIndex,\n    selectTooltipPayloadConfigurations,\n    selectTooltipPayloadSearcher,\n  ],\n  combineCoordinateForDefaultIndex,\n);\n\nexport const selectActiveTooltipCoordinate: (state: RechartsRootState) => Coordinate | undefined = createSelector(\n  [selectTooltipInteractionState, selectTooltipCoordinateForDefaultIndex],\n  (tooltipInteractionState: TooltipInteractionState, defaultIndexCoordinate: Coordinate) => {\n    if (tooltipInteractionState?.coordinate) {\n      return tooltipInteractionState.coordinate;\n    }\n\n    return defaultIndexCoordinate;\n  },\n);\n\nexport const selectIsTooltipActive: (state: RechartsRootState) => boolean = createSelector(\n  [selectTooltipInteractionState],\n  (tooltipInteractionState: TooltipInteractionState) => tooltipInteractionState.active,\n);\n\nexport const selectActiveTooltipPayload: (state: RechartsRootState) => TooltipPayload | undefined = createSelector(\n  [\n    selectTooltipPayloadConfigurations,\n    selectActiveTooltipIndex,\n    selectChartDataWithIndexes,\n    selectTooltipAxis,\n    selectActiveLabel,\n    selectTooltipPayloadSearcher,\n    selectTooltipEventType,\n  ],\n  combineTooltipPayload,\n);\n\nexport const selectActiveTooltipDataPoints = createSelector([selectActiveTooltipPayload], payload => {\n  if (payload == null) {\n    return undefined;\n  }\n  const dataPoints = payload.map(p => p.payload).filter(p => p != null);\n  return Array.from(new Set(dataPoints));\n});\n","import { RechartsRootState } from '../store';\nimport { TooltipSettingsState } from '../tooltipSlice';\n\nexport const selectTooltipSettings = (state: RechartsRootState): TooltipSettingsState => state.tooltip.settings;\n","import { useAppSelector } from '../state/hooks';\nimport { getBandSizeOfAxis } from '../util/ChartUtils';\nimport { AxisWithTicksSettings } from '../state/selectors/axisSelectors';\nimport { selectTooltipAxisScale, selectTooltipAxisTicks } from '../state/selectors/tooltipSelectors';\nimport { selectTooltipAxis } from '../state/selectors/selectTooltipAxis';\n\nexport const useTooltipAxis = (): AxisWithTicksSettings => useAppSelector(selectTooltipAxis);\n\nexport const useTooltipAxisBandSize = (): number | undefined => {\n  const tooltipAxis = useTooltipAxis();\n  const tooltipTicks = useAppSelector(selectTooltipAxisTicks);\n  const tooltipAxisScale = useAppSelector(selectTooltipAxisScale);\n  return getBandSizeOfAxis({ ...tooltipAxis, scale: tooltipAxisScale }, tooltipTicks);\n};\n","import { createSelector } from 'reselect';\nimport sortBy from 'es-toolkit/compat/sortBy';\nimport { useAppSelector } from '../hooks';\nimport { RechartsRootState } from '../store';\nimport {\n  ActiveTooltipProps,\n  TooltipIndex,\n  TooltipInteractionState,\n  TooltipPayload,\n  TooltipPayloadConfiguration,\n} from '../tooltipSlice';\nimport { calculateActiveTickIndex, calculateTooltipPos, getActiveCoordinate, inRange } from '../../util/ChartUtils';\nimport {\n  AxisType,\n  ChartOffsetInternal,\n  ChartPointer,\n  Coordinate,\n  DataKey,\n  LayoutType,\n  PolarViewBoxRequired,\n  TickItem,\n  TooltipEventType,\n} from '../../util/types';\nimport { TooltipTrigger } from '../../chart/types';\nimport { selectChartDataWithIndexes } from './dataSelectors';\nimport { selectTooltipAxisTicks, selectTooltipDisplayedData } from './tooltipSelectors';\nimport { AxisRange } from './axisSelectors';\nimport { selectChartName } from './rootPropsSelectors';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport { selectChartHeight, selectChartWidth } from './containerSelectors';\nimport { combineActiveLabel } from './combiners/combineActiveLabel';\nimport { combineTooltipInteractionState } from './combiners/combineTooltipInteractionState';\nimport { combineActiveTooltipIndex } from './combiners/combineActiveTooltipIndex';\nimport { combineCoordinateForDefaultIndex } from './combiners/combineCoordinateForDefaultIndex';\nimport { combineTooltipPayloadConfigurations } from './combiners/combineTooltipPayloadConfigurations';\nimport { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';\nimport { selectTooltipState } from './selectTooltipState';\nimport { combineTooltipPayload } from './combiners/combineTooltipPayload';\nimport { selectTooltipAxis } from './selectTooltipAxis';\n\nexport const useChartName = (): string | undefined => {\n  return useAppSelector(selectChartName);\n};\n\nconst pickTooltipEventType = (_state: RechartsRootState, tooltipEventType: TooltipEventType): TooltipEventType =>\n  tooltipEventType;\n\nconst pickTrigger = (\n  _state: RechartsRootState,\n  _tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n): TooltipTrigger => trigger;\n\nconst pickDefaultIndex = (\n  _state: RechartsRootState,\n  _tooltipEventType: TooltipEventType,\n  _trigger: TooltipTrigger,\n  defaultIndex?: TooltipIndex | undefined,\n): TooltipIndex | undefined => defaultIndex;\n\nexport const selectOrderedTooltipTicks = createSelector(selectTooltipAxisTicks, (ticks: ReadonlyArray<TickItem>) =>\n  sortBy(ticks, o => o.coordinate),\n);\n\nexport const selectTooltipInteractionState: (\n  state: RechartsRootState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n) => TooltipInteractionState | undefined = createSelector(\n  [selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex],\n  combineTooltipInteractionState,\n);\n\nexport const selectActiveIndex: (\n  state: RechartsRootState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n) => TooltipIndex | null = createSelector(\n  [selectTooltipInteractionState, selectTooltipDisplayedData],\n  combineActiveTooltipIndex,\n);\n\nexport const selectTooltipDataKey = (\n  state: RechartsRootState,\n  tooltipEventType: TooltipEventType | undefined,\n  trigger: TooltipTrigger,\n): DataKey<any> | undefined => {\n  if (tooltipEventType == null) {\n    return undefined;\n  }\n  const tooltipState = selectTooltipState(state);\n  if (tooltipEventType === 'axis') {\n    if (trigger === 'hover') {\n      return tooltipState.axisInteraction.hover.dataKey;\n    }\n    return tooltipState.axisInteraction.click.dataKey;\n  }\n  if (trigger === 'hover') {\n    return tooltipState.itemInteraction.hover.dataKey;\n  }\n  return tooltipState.itemInteraction.click.dataKey;\n};\n\nexport const selectTooltipPayloadConfigurations: (\n  state: RechartsRootState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n) => ReadonlyArray<TooltipPayloadConfiguration> = createSelector(\n  [selectTooltipState, pickTooltipEventType, pickTrigger, pickDefaultIndex],\n  combineTooltipPayloadConfigurations,\n);\n\nexport const selectCoordinateForDefaultIndex: (\n  state: RechartsRootState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n) => Coordinate | undefined = createSelector(\n  [\n    selectChartWidth,\n    selectChartHeight,\n    selectChartLayout,\n    selectChartOffsetInternal,\n    selectTooltipAxisTicks,\n    pickDefaultIndex,\n    selectTooltipPayloadConfigurations,\n    selectTooltipPayloadSearcher,\n  ],\n  combineCoordinateForDefaultIndex,\n);\n\nexport const selectActiveCoordinate: (\n  state: RechartsRootState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n  // TODO the state is marked as containing Coordinate but actually in polar charts it contains PolarCoordinate, we should keep the polar state separate\n) => Coordinate | undefined = createSelector(\n  [selectTooltipInteractionState, selectCoordinateForDefaultIndex],\n  (tooltipInteractionState: TooltipInteractionState, defaultIndexCoordinate: Coordinate): Coordinate | undefined => {\n    return tooltipInteractionState.coordinate ?? defaultIndexCoordinate;\n  },\n);\n\nexport const selectActiveLabel: (\n  state: RechartsRootState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n) => string | number | undefined = createSelector(selectTooltipAxisTicks, selectActiveIndex, combineActiveLabel);\n\nexport const selectTooltipPayload: (\n  state: RechartsRootState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n) => TooltipPayload | undefined = createSelector(\n  [\n    selectTooltipPayloadConfigurations,\n    selectActiveIndex,\n    selectChartDataWithIndexes,\n    selectTooltipAxis,\n    selectActiveLabel,\n    selectTooltipPayloadSearcher,\n    pickTooltipEventType,\n  ],\n  combineTooltipPayload,\n);\n\nexport const selectIsTooltipActive: (\n  state: RechartsRootState,\n  tooltipEventType: TooltipEventType,\n  trigger: TooltipTrigger,\n  defaultIndex: TooltipIndex | undefined,\n) => { isActive: boolean; activeIndex: TooltipIndex | undefined } = createSelector(\n  [selectTooltipInteractionState],\n  (tooltipInteractionState: TooltipInteractionState) => {\n    return { isActive: tooltipInteractionState.active, activeIndex: tooltipInteractionState.index };\n  },\n);\n\nexport const combineActiveProps = (\n  chartEvent: ChartPointer | undefined,\n  layout: LayoutType | undefined,\n  polarViewBox: PolarViewBoxRequired | undefined,\n  tooltipAxisType: AxisType | undefined,\n  tooltipAxisRange: AxisRange | undefined,\n  tooltipTicks: ReadonlyArray<TickItem> | undefined,\n  orderedTooltipTicks: ReadonlyArray<TickItem> | undefined,\n  offset: ChartOffsetInternal,\n): ActiveTooltipProps | undefined => {\n  if (!chartEvent || !layout || !tooltipAxisType || !tooltipAxisRange || !tooltipTicks) {\n    return undefined;\n  }\n  const rangeObj = inRange(chartEvent.chartX, chartEvent.chartY, layout, polarViewBox, offset);\n  if (!rangeObj) {\n    return undefined;\n  }\n  const pos: number | undefined = calculateTooltipPos(rangeObj, layout);\n\n  const activeIndex = calculateActiveTickIndex(\n    pos,\n    orderedTooltipTicks,\n    tooltipTicks,\n    tooltipAxisType,\n    tooltipAxisRange,\n  );\n\n  const activeCoordinate = getActiveCoordinate(layout, tooltipTicks, activeIndex, rangeObj);\n\n  return { activeIndex: String(activeIndex), activeCoordinate };\n};\n","import * as React from 'react';\nimport { ReactElement, cloneElement, createElement, isValidElement, SVGProps } from 'react';\nimport { clsx } from 'clsx';\nimport { ChartCoordinate, ChartOffsetInternal, LayoutType, TooltipEventType } from '../util/types';\nimport { Curve } from '../shape/Curve';\nimport { Cross } from '../shape/Cross';\nimport { getCursorRectangle } from '../util/cursor/getCursorRectangle';\nimport { Rectangle } from '../shape/Rectangle';\nimport { getRadialCursorPoints } from '../util/cursor/getRadialCursorPoints';\nimport { Sector } from '../shape/Sector';\nimport { getCursorPoints } from '../util/cursor/getCursorPoints';\nimport { filterProps } from '../util/ReactUtils';\nimport { useChartLayout, useOffsetInternal } from '../context/chartLayoutContext';\nimport { useTooltipAxisBandSize } from '../context/useTooltipAxis';\nimport { useChartName } from '../state/selectors/selectors';\nimport { TooltipPayload } from '../state/tooltipSlice';\n\n/**\n * If set false, no cursor will be drawn when tooltip is active.\n * If set an object, the option is the configuration of cursor.\n * If set a React element, the option is the custom react element of drawing cursor\n */\nexport type CursorDefinition = boolean | ReactElement | SVGProps<SVGElement>;\n\nexport type CursorProps = {\n  cursor: CursorDefinition;\n  tooltipEventType: TooltipEventType;\n  coordinate: ChartCoordinate;\n  payload: TooltipPayload;\n  index: string;\n};\n\nexport type CursorConnectedProps = CursorProps & {\n  tooltipAxisBandSize: number;\n  layout: LayoutType;\n  offset: ChartOffsetInternal;\n  coordinate: ChartCoordinate;\n  payload: TooltipPayload;\n  index: string;\n  chartName: string;\n};\n\nexport function CursorInternal(props: CursorConnectedProps) {\n  const { coordinate, payload, index, offset, tooltipAxisBandSize, layout, cursor, tooltipEventType, chartName } =\n    props;\n\n  // The cursor is a part of the Tooltip, and it should be shown (by default) when the Tooltip is active.\n  const activeCoordinate = coordinate;\n  const activePayload = payload;\n  const activeTooltipIndex = index;\n  if (!cursor || !activeCoordinate || (chartName !== 'ScatterChart' && tooltipEventType !== 'axis')) {\n    return null;\n  }\n  let restProps, cursorComp: React.ComponentType<any>;\n\n  if (chartName === 'ScatterChart') {\n    restProps = activeCoordinate;\n    cursorComp = Cross;\n  } else if (chartName === 'BarChart') {\n    restProps = getCursorRectangle(layout, activeCoordinate, offset, tooltipAxisBandSize);\n    cursorComp = Rectangle;\n  } else if (layout === 'radial') {\n    // @ts-expect-error TODO the state is marked as containing Coordinate but actually in polar charts it contains PolarCoordinate, we should keep the polar state separate\n    const { cx, cy, radius, startAngle, endAngle } = getRadialCursorPoints(activeCoordinate);\n    restProps = {\n      cx,\n      cy,\n      startAngle,\n      endAngle,\n      innerRadius: radius,\n      outerRadius: radius,\n    };\n    cursorComp = Sector;\n  } else {\n    restProps = { points: getCursorPoints(layout, activeCoordinate, offset) };\n    cursorComp = Curve;\n  }\n\n  const extraClassName: string | undefined =\n    typeof cursor === 'object' && 'className' in cursor ? cursor.className : undefined;\n\n  const cursorProps = {\n    stroke: '#ccc',\n    pointerEvents: 'none',\n    ...offset,\n    ...restProps,\n    ...filterProps(cursor, false),\n    payload: activePayload,\n    payloadIndex: activeTooltipIndex,\n    className: clsx('recharts-tooltip-cursor', extraClassName),\n  };\n\n  return isValidElement(cursor) ? cloneElement(cursor, cursorProps) : createElement(cursorComp, cursorProps);\n}\n\n/*\n * Cursor is the background, or a highlight,\n * that shows when user mouses over or activates\n * an area.\n *\n * It usually shows together with a tooltip\n * to emphasise which part of the chart does the tooltip refer to.\n */\nexport function Cursor(props: CursorProps) {\n  const tooltipAxisBandSize = useTooltipAxisBandSize();\n  const offset = useOffsetInternal();\n  const layout = useChartLayout();\n  const chartName = useChartName();\n  return (\n    <CursorInternal\n      {...props}\n      coordinate={props.coordinate}\n      index={props.index}\n      payload={props.payload}\n      offset={offset}\n      layout={layout}\n      tooltipAxisBandSize={tooltipAxisBandSize}\n      chartName={chartName}\n    />\n  );\n}\n","import { ChartCoordinate, ChartOffsetInternal, LayoutType } from '../types';\n\nexport type CursorRectangle = {\n  stroke: string;\n  fill: string;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n};\n\nexport function getCursorRectangle(\n  layout: LayoutType,\n  activeCoordinate: ChartCoordinate,\n  offset: ChartOffsetInternal,\n  tooltipAxisBandSize: number,\n): CursorRectangle {\n  const halfSize = tooltipAxisBandSize / 2;\n\n  return {\n    stroke: 'none',\n    fill: '#ccc',\n    x: layout === 'horizontal' ? activeCoordinate.x - halfSize : offset.left + 0.5,\n    y: layout === 'horizontal' ? offset.top + 0.5 : activeCoordinate.y - halfSize,\n    width: layout === 'horizontal' ? tooltipAxisBandSize : offset.width - 1,\n    height: layout === 'horizontal' ? offset.height - 1 : tooltipAxisBandSize,\n  };\n}\n","import { createContext, useContext } from 'react';\n\nexport const TooltipPortalContext = createContext<HTMLElement | null>(null);\n\nexport const useTooltipPortal = (): HTMLElement | null => useContext(TooltipPortalContext);\n","import EventEmitter from 'eventemitter3';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { TooltipSyncState } from '../state/tooltipSlice';\nimport { BrushStartEndIndex } from '../context/brushUpdateContext';\n\nconst eventCenter: EventEmitter<EventTypes> = new EventEmitter();\n\nexport { eventCenter };\n\nexport const TOOLTIP_SYNC_EVENT = 'recharts.syncEvent.tooltip';\n\nexport const BRUSH_SYNC_EVENT = 'recharts.syncEvent.brush';\n\ninterface EventTypes {\n  [TOOLTIP_SYNC_EVENT](syncId: number | string, data: PayloadAction<TooltipSyncState>, emitter: symbol): void;\n  [BRUSH_SYNC_EVENT](syncId: number | string, data: BrushStartEndIndex, emitter: symbol): void;\n}\n","import { createSlice } from '@reduxjs/toolkit';\nimport { TooltipEventType } from '../util/types';\nimport { TooltipIndex, TooltipPayloadSearcher } from './tooltipSlice';\nimport { isNan } from '../util/DataUtils';\n\n/**\n * These chart options are decided internally, by Recharts,\n * and will not change during the lifetime of the chart.\n *\n * Changing these options can be done by swapping the root element\n * which will make a brand-new Redux store.\n *\n * If you want to store options that can be changed by the user,\n * use UpdatableChartOptions in rootPropsSlice.ts.\n */\nexport type ChartOptions = {\n  chartName: string;\n  defaultTooltipEventType: TooltipEventType;\n  validateTooltipEventTypes?: ReadonlyArray<TooltipEventType>;\n  // Should this instead be a property of a graphical item? Do we want to mix items with different data types in one chart?\n  tooltipPayloadSearcher: TooltipPayloadSearcher | undefined;\n  /**\n   * We use this to identify which chart is sending events when synchronising.\n   * Without it, we can't tell the difference between an action that arrived from another chart\n   * and an action that was dispatched by the chart itself.\n   */\n  eventEmitter: symbol | undefined;\n};\n\nexport function arrayTooltipSearcher<T>(data: ReadonlyArray<T>, strIndex: TooltipIndex): T | undefined {\n  if (!strIndex) return undefined;\n  const numIndex = Number.parseInt(strIndex, 10);\n  if (isNan(numIndex)) {\n    return undefined;\n  }\n  return data?.[numIndex];\n}\n\nconst initialState: ChartOptions = {\n  chartName: '',\n  tooltipPayloadSearcher: undefined,\n  eventEmitter: undefined,\n  defaultTooltipEventType: 'axis',\n};\n\nconst optionsSlice = createSlice({\n  name: 'options',\n  initialState,\n  reducers: {\n    createEventEmitter: (state: ChartOptions) => {\n      if (state.eventEmitter == null) {\n        state.eventEmitter = Symbol('rechartsEventEmitter');\n      }\n    },\n  },\n});\n\nexport const optionsReducer = optionsSlice.reducer;\n\nexport const { createEventEmitter } = optionsSlice.actions;\n","import { RechartsRootState } from '../state/store';\nimport { TooltipSyncState } from '../state/tooltipSlice';\n\nexport function selectSynchronisedTooltipState(state: RechartsRootState): TooltipSyncState {\n  return state.tooltip.syncInteraction;\n}\n","import { PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport { BrushStartEndIndex } from '../context/brushUpdateContext';\n\n/**\n * This is the data that's coming through main chart `data` prop\n * Recharts is very flexible in what it accepts so the type is very flexible too.\n * This will typically be an object, and various components will provide various `dataKey`\n * that dictates how to pull data from that object.\n *\n * TL;DR: before dataKey\n */\nexport type ChartData = unknown[];\n\n/**\n * So this is the same unknown type as ChartData but this is after the dataKey has been applied.\n * We still don't know what the type is - that depends on what exactly it was before the dataKey application,\n * and the dataKey can return whatever anyway - but let's keep it separate as a form of documentation.\n *\n * TL;DR: ChartData after dataKey.\n */\nexport type AppliedChartData = ReadonlyArray<{ value: unknown }>;\n\nexport type ChartDataState = {\n  chartData: ChartData | undefined;\n  /**\n   * store a copy of chart data after it has been processed by each chart's specific\n   * compute functions. TODO: add other charts besides Sankey\n   */\n  computedData: unknown | undefined;\n  /**\n   * Using Brush, users can choose where they want to zoom in.\n   * This is zero-based index of the starting data point.\n   */\n  dataStartIndex: number;\n  /**\n   * Using Brush, users can choose where they want to zoom in.\n   * This is zero-based index of the last data point.\n   */\n  dataEndIndex: number;\n};\n\nexport const initialChartDataState: ChartDataState = {\n  chartData: undefined,\n  computedData: undefined,\n  dataStartIndex: 0,\n  dataEndIndex: 0,\n};\n\ntype BrushStartEndIndexActionPayload = Partial<BrushStartEndIndex>;\n\nconst chartDataSlice = createSlice({\n  name: 'chartData',\n  initialState: initialChartDataState,\n  reducers: {\n    setChartData(state, action: PayloadAction<ChartData | undefined>) {\n      state.chartData = action.payload;\n      if (action.payload == null) {\n        state.dataStartIndex = 0;\n        state.dataEndIndex = 0;\n        return;\n      }\n      if (action.payload.length > 0 && state.dataEndIndex !== action.payload.length - 1) {\n        state.dataEndIndex = action.payload.length - 1;\n      }\n    },\n    setComputedData(state, action: PayloadAction<unknown | undefined>) {\n      state.computedData = action.payload;\n    },\n    setDataStartEndIndexes(state, action: PayloadAction<BrushStartEndIndexActionPayload>) {\n      const { startIndex, endIndex } = action.payload;\n      if (startIndex != null) {\n        state.dataStartIndex = startIndex;\n      }\n      if (endIndex != null) {\n        state.dataEndIndex = endIndex;\n      }\n    },\n  },\n});\n\nexport const { setChartData, setDataStartEndIndexes, setComputedData } = chartDataSlice.actions;\n\nexport const chartDataReducer = chartDataSlice.reducer;\n","import { useEffect } from 'react';\nimport { PayloadAction } from '@reduxjs/toolkit';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { selectEventEmitter, selectSyncId, selectSyncMethod } from '../state/selectors/rootPropsSelectors';\nimport { BRUSH_SYNC_EVENT, eventCenter, TOOLTIP_SYNC_EVENT } from '../util/Events';\nimport { createEventEmitter } from '../state/optionsSlice';\nimport { setSyncInteraction, TooltipIndex, TooltipSyncState } from '../state/tooltipSlice';\nimport { selectTooltipDataKey } from '../state/selectors/selectors';\nimport { ChartCoordinate, Coordinate, TickItem, TooltipEventType } from '../util/types';\nimport { TooltipTrigger } from '../chart/types';\nimport { selectTooltipAxisTicks } from '../state/selectors/tooltipSelectors';\nimport { selectSynchronisedTooltipState } from './syncSelectors';\nimport { useChartLayout, useViewBox } from '../context/chartLayoutContext';\nimport { BrushStartEndIndex } from '../context/brushUpdateContext';\nimport { setDataStartEndIndexes } from '../state/chartDataSlice';\nimport { MouseHandlerDataParam } from './types';\n\nconst noop = () => {};\n\nfunction useTooltipSyncEventsListener() {\n  const mySyncId = useAppSelector(selectSyncId);\n  const myEventEmitter = useAppSelector(selectEventEmitter);\n  const dispatch = useAppDispatch();\n  const syncMethod = useAppSelector(selectSyncMethod);\n  const tooltipTicks = useAppSelector(selectTooltipAxisTicks);\n  const layout = useChartLayout();\n  const viewBox = useViewBox();\n\n  const className = useAppSelector(state => state.rootProps.className);\n  useEffect(() => {\n    if (mySyncId == null) {\n      // This chart is not synchronised with any other chart so we don't need to listen for any events.\n      return noop;\n    }\n\n    const listener = (incomingSyncId: number | string, action: PayloadAction<TooltipSyncState>, emitter: symbol) => {\n      if (myEventEmitter === emitter) {\n        // We don't want to dispatch actions that we sent ourselves.\n        return;\n      }\n      if (mySyncId !== incomingSyncId) {\n        // This event is not for this chart\n        return;\n      }\n      if (syncMethod === 'index') {\n        dispatch(action);\n        // This is the default behaviour, we don't need to do anything else.\n        return;\n      }\n\n      if (tooltipTicks == null) {\n        // for the other two sync methods, we need the ticks to be available\n        return;\n      }\n\n      let activeTick: TickItem | undefined;\n      if (typeof syncMethod === 'function') {\n        /*\n         * This is what the data shape in 2.x CategoricalChartState used to look like.\n         * In 3.x we store things differently but let's try to keep the old shape for compatibility.\n         */\n        const syncMethodParam: MouseHandlerDataParam = {\n          activeTooltipIndex: action.payload.index == null ? undefined : Number(action.payload.index),\n          isTooltipActive: action.payload.active,\n          activeIndex: action.payload.index == null ? undefined : Number(action.payload.index),\n          activeLabel: action.payload.label,\n          activeDataKey: action.payload.dataKey,\n          activeCoordinate: action.payload.coordinate,\n        };\n        // Call a callback function. If there is an application specific algorithm\n        const activeTooltipIndex = syncMethod(tooltipTicks, syncMethodParam);\n        activeTick = tooltipTicks[activeTooltipIndex];\n      } else if (syncMethod === 'value') {\n        // labels are always strings, tick.value might be a string or a number, depending on axis type\n        activeTick = tooltipTicks.find(tick => String(tick.value) === action.payload.label);\n      }\n\n      const { coordinate } = action.payload;\n\n      if (activeTick == null || action.payload.active === false || coordinate == null || viewBox == null) {\n        dispatch(\n          setSyncInteraction({\n            active: false,\n            coordinate: undefined,\n            dataKey: undefined,\n            index: null,\n            label: undefined,\n          }),\n        );\n        return;\n      }\n\n      const { x, y } = coordinate;\n      const validateChartX = Math.min(x, viewBox.x + viewBox.width);\n      const validateChartY = Math.min(y, viewBox.y + viewBox.height);\n      const activeCoordinate: Coordinate = {\n        x: layout === 'horizontal' ? activeTick.coordinate : validateChartX,\n        y: layout === 'horizontal' ? validateChartY : activeTick.coordinate,\n      };\n\n      const syncAction = setSyncInteraction({\n        active: action.payload.active,\n        coordinate: activeCoordinate,\n        dataKey: action.payload.dataKey,\n        index: String(activeTick.index),\n        label: action.payload.label,\n      });\n      dispatch(syncAction);\n    };\n    eventCenter.on(TOOLTIP_SYNC_EVENT, listener);\n\n    return () => {\n      eventCenter.off(TOOLTIP_SYNC_EVENT, listener);\n    };\n  }, [className, dispatch, myEventEmitter, mySyncId, syncMethod, tooltipTicks, layout, viewBox]);\n}\n\nfunction useBrushSyncEventsListener() {\n  const mySyncId = useAppSelector(selectSyncId);\n  const myEventEmitter = useAppSelector(selectEventEmitter);\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    if (mySyncId == null) {\n      // This chart is not synchronised with any other chart so we don't need to listen for any events.\n      return noop;\n    }\n\n    const listener = (incomingSyncId: number | string, action: BrushStartEndIndex, emitter: symbol) => {\n      if (myEventEmitter === emitter) {\n        // We don't want to dispatch actions that we sent ourselves.\n        return;\n      }\n      if (mySyncId === incomingSyncId) {\n        dispatch(setDataStartEndIndexes(action));\n      }\n    };\n    eventCenter.on(BRUSH_SYNC_EVENT, listener);\n\n    return () => {\n      eventCenter.off(BRUSH_SYNC_EVENT, listener);\n    };\n  }, [dispatch, myEventEmitter, mySyncId]);\n}\n\n/**\n * Will receive synchronisation events from other charts.\n *\n * Reads syncMethod from state and decides how to synchronise the tooltip based on that.\n *\n * @returns void\n */\nexport function useSynchronisedEventsFromOtherCharts() {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(createEventEmitter());\n  }, [dispatch]);\n\n  useTooltipSyncEventsListener();\n  useBrushSyncEventsListener();\n}\n\n/**\n * Will send events to other charts.\n * If syncId is undefined, no events will be sent.\n *\n * This ignores the syncMethod, because that is set and computed on the receiving end.\n *\n * @param tooltipEventType from Tooltip\n * @param trigger from Tooltip\n * @param activeCoordinate from state\n * @param activeLabel from state\n * @param activeIndex from state\n * @param isTooltipActive from state\n * @returns void\n */\nexport function useTooltipChartSynchronisation(\n  tooltipEventType: TooltipEventType | undefined,\n  trigger: TooltipTrigger,\n  activeCoordinate: ChartCoordinate | undefined,\n  activeLabel: string | number | undefined,\n  activeIndex: TooltipIndex | undefined,\n  isTooltipActive: boolean,\n) {\n  const activeDataKey = useAppSelector(state => selectTooltipDataKey(state, tooltipEventType, trigger));\n  const eventEmitterSymbol = useAppSelector(selectEventEmitter);\n  const syncId = useAppSelector(selectSyncId);\n  const syncMethod = useAppSelector(selectSyncMethod);\n  const tooltipState = useAppSelector(selectSynchronisedTooltipState);\n  const isReceivingSynchronisation = tooltipState?.active;\n  useEffect(() => {\n    if (isReceivingSynchronisation) {\n      /*\n       * This chart currently has active tooltip, synchronised from another chart.\n       * Let's not send any outgoing synchronisation events while that's happening\n       * to avoid infinite loops.\n       */\n      return;\n    }\n    if (syncId == null) {\n      /*\n       * syncId is not set, means that this chart is not synchronised with any other chart,\n       * means we don't need to send synchronisation events\n       */\n      return;\n    }\n    if (eventEmitterSymbol == null) {\n      /*\n       * When using Recharts internal hooks and selectors outside charts context,\n       * these properties will be undefined. Let's return silently instead of throwing an error.\n       */\n      return;\n    }\n    const syncAction = setSyncInteraction({\n      active: isTooltipActive,\n      coordinate: activeCoordinate,\n      dataKey: activeDataKey,\n      index: activeIndex,\n      label: typeof activeLabel === 'number' ? String(activeLabel) : activeLabel,\n    });\n    eventCenter.emit(TOOLTIP_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);\n  }, [\n    isReceivingSynchronisation,\n    activeCoordinate,\n    activeDataKey,\n    activeIndex,\n    activeLabel,\n    eventEmitterSymbol,\n    syncId,\n    syncMethod,\n    isTooltipActive,\n  ]);\n}\n\nexport function useBrushChartSynchronisation() {\n  const syncId = useAppSelector(selectSyncId);\n  const eventEmitterSymbol = useAppSelector(selectEventEmitter);\n  const brushStartIndex = useAppSelector(state => state.chartData.dataStartIndex);\n  const brushEndIndex = useAppSelector(state => state.chartData.dataEndIndex);\n\n  useEffect(() => {\n    if (syncId == null || brushStartIndex == null || brushEndIndex == null || eventEmitterSymbol == null) {\n      return;\n    }\n    const syncAction: BrushStartEndIndex = { startIndex: brushStartIndex, endIndex: brushEndIndex };\n    eventCenter.emit(BRUSH_SYNC_EVENT, syncId, syncAction, eventEmitterSymbol);\n  }, [brushEndIndex, brushStartIndex, eventEmitterSymbol, syncId]);\n}\n","import * as React from 'react';\nimport { CSSProperties, ReactElement, ReactNode, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n  DefaultTooltipContent,\n  NameType,\n  Payload,\n  Props as DefaultTooltipContentProps,\n  ValueType,\n} from './DefaultTooltipContent';\nimport { TooltipBoundingBox } from './TooltipBoundingBox';\n\nimport { Global } from '../util/Global';\nimport { getUniqPayload, UniqueOption } from '../util/payload/getUniqPayload';\nimport { AllowInDimension, AnimationDuration, AnimationTiming, ChartCoordinate, Coordinate } from '../util/types';\nimport { useViewBox } from '../context/chartLayoutContext';\nimport { useAccessibilityLayer } from '../context/accessibilityContext';\nimport { useElementOffset } from '../util/useElementOffset';\nimport { Cursor, CursorDefinition } from './Cursor';\nimport {\n  selectActiveCoordinate,\n  selectActiveLabel,\n  selectIsTooltipActive,\n  selectTooltipPayload,\n} from '../state/selectors/selectors';\nimport { useTooltipPortal } from '../context/tooltipPortalContext';\nimport { TooltipTrigger } from '../chart/types';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { setTooltipSettingsState, TooltipIndex, TooltipPayload } from '../state/tooltipSlice';\nimport { AxisId } from '../state/cartesianAxisSlice';\nimport { useTooltipChartSynchronisation } from '../synchronisation/useChartSynchronisation';\nimport { useTooltipEventType } from '../state/selectors/selectTooltipEventType';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\n\nexport type ContentType<TValue extends ValueType, TName extends NameType> =\n  | ReactElement\n  | ((props: TooltipContentProps<TValue, TName>) => ReactNode);\n\nfunction defaultUniqBy<TValue extends ValueType, TName extends NameType>(entry: Payload<TValue, TName>) {\n  return entry.dataKey;\n}\n\nexport type TooltipContentProps<TValue extends ValueType, TName extends NameType> = TooltipProps<TValue, TName> & {\n  label?: string | number;\n  payload: any[];\n  coordinate: ChartCoordinate;\n  active: boolean;\n  accessibilityLayer: boolean;\n};\n\nfunction renderContent<TValue extends ValueType, TName extends NameType>(\n  content: ContentType<TValue, TName>,\n  props: TooltipContentProps<TValue, TName>,\n): ReactNode {\n  if (React.isValidElement(content)) {\n    return React.cloneElement(content, props);\n  }\n  if (typeof content === 'function') {\n    return React.createElement(content as any, props);\n  }\n\n  return <DefaultTooltipContent {...props} />;\n}\n\ntype PropertiesReadFromContext = 'viewBox' | 'active' | 'payload' | 'coordinate' | 'label' | 'accessibilityLayer';\n\nexport type TooltipProps<TValue extends ValueType, TName extends NameType> = Omit<\n  DefaultTooltipContentProps<TValue, TName>,\n  PropertiesReadFromContext\n> & {\n  /**\n   * If true, then Tooltip is always displayed, once an activeIndex is set by mouse over, or programmatically.\n   * If false, then Tooltip is never displayed.\n   * If active is undefined, Recharts will control when the Tooltip displays. This includes mouse and keyboard controls.\n   */\n  active?: boolean;\n  /**\n   * If true, then Tooltip will information about hidden series (defaults to false).\n   * Interacting with the hide property of Area, Bar, Line, Scatter.\n   *\n   * default: false\n   */\n  includeHidden?: boolean | undefined;\n  allowEscapeViewBox?: AllowInDimension;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n  content?: ContentType<TValue, TName>;\n  cursor?: CursorDefinition;\n  filterNull?: boolean;\n  defaultIndex?: number | TooltipIndex;\n  isAnimationActive?: boolean;\n  offset?: number;\n  payloadUniqBy?: UniqueOption<Payload<TValue, TName>>;\n  /**\n   * If portal is defined, then Tooltip will use this element as a target\n   * for rendering using React Portal: https://react.dev/reference/react-dom/createPortal\n   *\n   * If this is undefined then Tooltip renders inside the recharts-wrapper element.\n   */\n  portal?: HTMLElement | null;\n  position?: Partial<Coordinate>;\n  reverseDirection?: AllowInDimension;\n  /**\n   * If true, tooltip will appear on top of all bars on an axis tick.\n   * If false, tooltip will appear on individual bars.\n   * Currently only supported in BarChart and RadialBarChart.\n   * If undefined then defaults to true.\n   */\n  shared?: boolean;\n  /**\n   * If `hover` then the Tooltip shows on mouse enter and hides on mouse leave.\n   *\n   * If `click` then the Tooltip shows after clicking and stays active.\n   *\n   * Default `hover`\n   */\n  trigger?: TooltipTrigger;\n  useTranslate3d?: boolean;\n  wrapperStyle?: CSSProperties;\n  /**\n   * Tooltip always attaches itself to the \"Tooltip\" axis. Which axis is it? Depends on the layout:\n   * - horizontal layout -> X axis\n   * - vertical layout -> Y axis\n   * - radial layout -> radial axis\n   * - centric layout -> angle axis\n   *\n   * Tooltip will use the default axis for the layout, unless you specify an axisId.\n   */\n  axisId?: AxisId;\n};\n\nconst emptyPayload: TooltipPayload = [];\n\nconst defaultTooltipProps = {\n  allowEscapeViewBox: { x: false, y: false },\n  animationDuration: 400,\n  animationEasing: 'ease',\n  axisId: 0,\n  contentStyle: {},\n  cursor: true,\n  filterNull: true,\n  isAnimationActive: !Global.isSsr,\n  itemSorter: 'name',\n  itemStyle: {},\n  labelStyle: {},\n  offset: 10,\n  reverseDirection: { x: false, y: false },\n  separator: ' : ',\n  trigger: 'hover',\n  useTranslate3d: false,\n  wrapperStyle: {},\n} as const satisfies Partial<TooltipProps<any, any>>;\n\nexport function Tooltip<TValue extends ValueType, TName extends NameType>(outsideProps: TooltipProps<TValue, TName>) {\n  const props = resolveDefaultProps(outsideProps, defaultTooltipProps);\n  const {\n    active: activeFromProps,\n    allowEscapeViewBox,\n    animationDuration,\n    animationEasing,\n    content,\n    filterNull,\n    isAnimationActive,\n    offset,\n    payloadUniqBy,\n    position,\n    reverseDirection,\n    useTranslate3d,\n    wrapperStyle,\n    cursor,\n    shared,\n    trigger,\n    defaultIndex,\n    portal: portalFromProps,\n    axisId,\n  } = props;\n  const dispatch = useAppDispatch();\n  const defaultIndexAsString: string | null | undefined =\n    typeof defaultIndex === 'number' ? String(defaultIndex) : defaultIndex;\n\n  useEffect(() => {\n    dispatch(\n      setTooltipSettingsState({\n        shared,\n        trigger,\n        axisId,\n        active: activeFromProps,\n        defaultIndex: defaultIndexAsString,\n      }),\n    );\n  }, [dispatch, shared, trigger, axisId, activeFromProps, defaultIndexAsString]);\n\n  const viewBox = useViewBox();\n  const accessibilityLayer = useAccessibilityLayer();\n  const tooltipEventType = useTooltipEventType(shared);\n\n  const { activeIndex, isActive } = useAppSelector(state =>\n    selectIsTooltipActive(state, tooltipEventType, trigger, defaultIndexAsString),\n  );\n\n  const payloadFromRedux = useAppSelector(state =>\n    selectTooltipPayload(state, tooltipEventType, trigger, defaultIndexAsString),\n  );\n\n  const labelFromRedux = useAppSelector(state =>\n    selectActiveLabel(state, tooltipEventType, trigger, defaultIndexAsString),\n  );\n\n  const coordinate = useAppSelector(state =>\n    selectActiveCoordinate(state, tooltipEventType, trigger, defaultIndexAsString),\n  );\n  const payload: TooltipPayload = payloadFromRedux;\n  const tooltipPortalFromContext = useTooltipPortal();\n  /*\n   * The user can set `active=true` on the Tooltip in which case the Tooltip will stay always active,\n   * or `active=false` in which case the Tooltip never shows.\n   *\n   * If the `active` prop is not defined then it will show and hide based on mouse or keyboard activity.\n   */\n  const finalIsActive = activeFromProps ?? isActive;\n  const [lastBoundingBox, updateBoundingBox] = useElementOffset([payload, finalIsActive]);\n  const finalLabel = tooltipEventType === 'axis' ? labelFromRedux : undefined;\n\n  useTooltipChartSynchronisation(tooltipEventType, trigger, coordinate, finalLabel, activeIndex, finalIsActive);\n\n  const tooltipPortal = portalFromProps ?? tooltipPortalFromContext;\n  if (tooltipPortal == null) {\n    return null;\n  }\n\n  let finalPayload: TooltipPayload = payload ?? emptyPayload;\n  if (!finalIsActive) {\n    finalPayload = emptyPayload;\n  }\n\n  if (filterNull && finalPayload.length) {\n    finalPayload = getUniqPayload(\n      payload.filter(entry => entry.value != null && (entry.hide !== true || props.includeHidden)),\n      payloadUniqBy,\n      defaultUniqBy,\n    );\n  }\n  const hasPayload = finalPayload.length > 0;\n\n  const tooltipElement = (\n    <TooltipBoundingBox\n      allowEscapeViewBox={allowEscapeViewBox}\n      animationDuration={animationDuration}\n      animationEasing={animationEasing}\n      isAnimationActive={isAnimationActive}\n      active={finalIsActive}\n      coordinate={coordinate}\n      hasPayload={hasPayload}\n      offset={offset}\n      position={position}\n      reverseDirection={reverseDirection}\n      useTranslate3d={useTranslate3d}\n      viewBox={viewBox}\n      wrapperStyle={wrapperStyle}\n      lastBoundingBox={lastBoundingBox}\n      innerRef={updateBoundingBox}\n      hasPortalFromProps={Boolean(portalFromProps)}\n    >\n      {renderContent(content, {\n        ...props,\n        // @ts-expect-error renderContent method expects the payload to be mutable, TODO make it immutable\n        payload: finalPayload,\n        label: finalLabel,\n        active: finalIsActive,\n        coordinate,\n        accessibilityLayer,\n      })}\n    </TooltipBoundingBox>\n  );\n\n  return (\n    <>\n      {/* Tooltip the HTML element renders through a React portal so that it escapes clipping, and it renders on top of everything else */}\n      {createPortal(tooltipElement, tooltipPortal)}\n      {finalIsActive && (\n        <Cursor\n          cursor={cursor}\n          tooltipEventType={tooltipEventType}\n          coordinate={coordinate}\n          payload={payload}\n          index={activeIndex}\n        />\n      )}\n    </>\n  );\n}\n","/* eslint no-console: 0 */\nconst isDev = process.env.NODE_ENV !== 'production';\n\nexport const warn = (condition: boolean, format: string, ...args: any[]) => {\n  if (isDev && typeof console !== 'undefined' && console.warn) {\n    if (format === undefined) {\n      console.warn('LogUtils requires an error message argument');\n    }\n\n    if (!condition) {\n      if (format === undefined) {\n        console.warn(\n          'Minified exception occurred; use the non-minified dev environment ' +\n            'for the full error message and additional helpful warnings.',\n        );\n      } else {\n        let argIndex = 0;\n\n        console.warn(format.replace(/%s/g, () => args[argIndex++]));\n      }\n    }\n  }\n};\n","import { clsx } from 'clsx';\nimport * as React from 'react';\nimport {\n  ReactElement,\n  forwardRef,\n  cloneElement,\n  useState,\n  useImperativeHandle,\n  useRef,\n  useEffect,\n  useMemo,\n  CSSProperties,\n  useCallback,\n} from 'react';\nimport throttle from 'es-toolkit/compat/throttle';\nimport { isPercent } from '../util/DataUtils';\nimport { warn } from '../util/LogUtils';\n\nexport interface Props {\n  aspect?: number;\n  width?: string | number;\n  height?: string | number;\n  minWidth?: string | number;\n  minHeight?: string | number;\n  initialDimension?: {\n    width: number;\n    height: number;\n  };\n  maxHeight?: number;\n  children: ReactElement;\n  debounce?: number;\n  id?: string | number;\n  className?: string | number;\n  style?: Omit<CSSProperties, keyof Props>;\n  onResize?: (width: number, height: number) => void;\n}\n\nexport const ResponsiveContainer = forwardRef<HTMLDivElement, Props>(\n  (\n    {\n      aspect,\n      initialDimension = {\n        width: -1,\n        height: -1,\n      },\n      width = '100%',\n      height = '100%',\n      /*\n       * default min-width to 0 if not specified - 'auto' causes issues with flexbox\n       * https://github.com/recharts/recharts/issues/172\n       */\n      minWidth = 0,\n      minHeight,\n      maxHeight,\n      children,\n      debounce = 0,\n      id,\n      className,\n      onResize,\n      style = {},\n    },\n    ref,\n  ) => {\n    const containerRef = useRef<HTMLDivElement>(null);\n    const onResizeRef = useRef<Props['onResize']>();\n    onResizeRef.current = onResize;\n    useImperativeHandle(ref, () => containerRef.current);\n\n    const [sizes, setSizes] = useState<{\n      containerWidth: number;\n      containerHeight: number;\n    }>({\n      containerWidth: initialDimension.width,\n      containerHeight: initialDimension.height,\n    });\n\n    const setContainerSize = useCallback((newWidth: number, newHeight: number) => {\n      setSizes(prevState => {\n        const roundedWidth = Math.round(newWidth);\n        const roundedHeight = Math.round(newHeight);\n        if (prevState.containerWidth === roundedWidth && prevState.containerHeight === roundedHeight) {\n          return prevState;\n        }\n\n        return { containerWidth: roundedWidth, containerHeight: roundedHeight };\n      });\n    }, []);\n\n    useEffect(() => {\n      let callback = (entries: ResizeObserverEntry[]) => {\n        const { width: containerWidth, height: containerHeight } = entries[0].contentRect;\n        setContainerSize(containerWidth, containerHeight);\n        onResizeRef.current?.(containerWidth, containerHeight);\n      };\n      if (debounce > 0) {\n        callback = throttle(callback, debounce, {\n          trailing: true,\n          leading: false,\n        });\n      }\n      const observer = new ResizeObserver(callback);\n\n      const { width: containerWidth, height: containerHeight } = containerRef.current.getBoundingClientRect();\n      setContainerSize(containerWidth, containerHeight);\n\n      observer.observe(containerRef.current);\n\n      return () => {\n        observer.disconnect();\n      };\n    }, [setContainerSize, debounce]);\n\n    const chartContent = useMemo(() => {\n      const { containerWidth, containerHeight } = sizes;\n\n      if (containerWidth < 0 || containerHeight < 0) {\n        return null;\n      }\n\n      warn(\n        isPercent(width) || isPercent(height),\n        `The width(%s) and height(%s) are both fixed numbers,\n       maybe you don't need to use a ResponsiveContainer.`,\n        width,\n        height,\n      );\n\n      warn(!aspect || aspect > 0, 'The aspect(%s) must be greater than zero.', aspect);\n\n      let calculatedWidth: number = isPercent(width) ? containerWidth : (width as number);\n      let calculatedHeight: number = isPercent(height) ? containerHeight : (height as number);\n\n      if (aspect && aspect > 0) {\n        // Preserve the desired aspect ratio\n        if (calculatedWidth) {\n          // Will default to using width for aspect ratio\n          calculatedHeight = calculatedWidth / aspect;\n        } else if (calculatedHeight) {\n          // But we should also take height into consideration\n          calculatedWidth = calculatedHeight * aspect;\n        }\n\n        // if maxHeight is set, overwrite if calculatedHeight is greater than maxHeight\n        if (maxHeight && calculatedHeight > maxHeight) {\n          calculatedHeight = maxHeight;\n        }\n      }\n\n      warn(\n        calculatedWidth > 0 || calculatedHeight > 0,\n        `The width(%s) and height(%s) of chart should be greater than 0,\n       please check the style of container, or the props width(%s) and height(%s),\n       or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\n       height and width.`,\n        calculatedWidth,\n        calculatedHeight,\n        width,\n        height,\n        minWidth,\n        minHeight,\n        aspect,\n      );\n\n      return React.Children.map(children, child => {\n        return cloneElement(child, {\n          width: calculatedWidth,\n          height: calculatedHeight,\n          // calculate the actual size and override it.\n          style: {\n            width: calculatedWidth,\n            height: calculatedHeight,\n            // keep components style\n            ...child.props.style,\n          },\n        });\n      });\n    }, [aspect, children, height, maxHeight, minHeight, minWidth, sizes, width]);\n\n    return (\n      <div\n        id={id ? `${id}` : undefined}\n        className={clsx('recharts-responsive-container', className)}\n        style={{ ...style, width, height, minWidth, minHeight, maxHeight }}\n        ref={containerRef}\n      >\n        {/*\n         * This zero-size, overflow-visible is required to allow the chart to shrink.\n         * Without it, the chart itself will fill the ResponsiveContainer, and while it allows the chart to grow,\n         * it would always keep the container at the size of the chart,\n         * and ResizeObserver would never fire.\n         * With this zero-size element, the chart itself never actually fills the container,\n         * it just so happens that it is visible because it overflows.\n         * I learned this trick from the `react-virtualized` library: https://github.com/bvaughn/react-virtualized-auto-sizer/blob/master/src/AutoSizer.ts\n         * See https://github.com/recharts/recharts/issues/172 and also https://github.com/bvaughn/react-virtualized/issues/68\n         */}\n        <div style={{ width: 0, height: 0, overflow: 'visible' }}>{chartContent}</div>\n      </div>\n    );\n  },\n);\n","/**\n * @fileOverview Cross\n */\nimport type { FunctionComponent, SVGProps } from 'react';\n\nexport type Props = SVGProps<SVGElement>;\n\nexport const Cell: FunctionComponent<Props> = (_props: Props) => null;\n\nCell.displayName = 'Cell';\n","import { CSSProperties } from 'react';\nimport { Global } from './Global';\nimport { Size } from './types';\nimport { LRUCache } from './LRUCache';\n\nexport interface TextMeasurementConfig {\n  /** Maximum number of items to cache */\n  cacheSize: number;\n  /** Whether to enable caching */\n  enableCache: boolean;\n}\n\nconst defaultConfig: TextMeasurementConfig = {\n  cacheSize: 2000,\n  enableCache: true,\n};\n\nlet currentConfig = { ...defaultConfig };\n\nlet stringCache = new LRUCache<string, Size>(currentConfig.cacheSize);\nconst SPAN_STYLE = {\n  position: 'absolute',\n  top: '-20000px',\n  left: 0,\n  padding: 0,\n  margin: 0,\n  border: 'none',\n  whiteSpace: 'pre',\n};\nconst MEASUREMENT_SPAN_ID = 'recharts_measurement_span';\n\nfunction createCacheKey(text: string | number, style: CSSProperties): string {\n  // Simple string concatenation for better performance than JSON.stringify\n  const fontSize = style.fontSize || '';\n  const fontFamily = style.fontFamily || '';\n  const fontWeight = style.fontWeight || '';\n  const fontStyle = style.fontStyle || '';\n  const letterSpacing = style.letterSpacing || '';\n  const textTransform = style.textTransform || '';\n\n  return `${text}|${fontSize}|${fontFamily}|${fontWeight}|${fontStyle}|${letterSpacing}|${textTransform}`;\n}\n\n/**\n * Measure text using DOM (accurate but slower)\n * @param text - The text to measure\n * @param style - CSS style properties to apply\n * @returns The size of the text\n */\nconst measureTextWithDOM = (text: string | number, style: CSSProperties): Size => {\n  try {\n    let measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);\n    if (!measurementSpan) {\n      measurementSpan = document.createElement('span');\n      measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);\n      measurementSpan.setAttribute('aria-hidden', 'true');\n      document.body.appendChild(measurementSpan);\n    }\n\n    // Apply styles directly without unnecessary object creation\n    Object.assign(measurementSpan.style, SPAN_STYLE, style);\n    measurementSpan.textContent = `${text}`;\n\n    const rect = measurementSpan.getBoundingClientRect();\n    return { width: rect.width, height: rect.height };\n  } catch {\n    return { width: 0, height: 0 };\n  }\n};\n\nexport const getStringSize = (text: string | number, style: CSSProperties = {}): Size => {\n  if (text === undefined || text === null || Global.isSsr) {\n    return { width: 0, height: 0 };\n  }\n\n  // If caching is disabled, measure directly\n  if (!currentConfig.enableCache) {\n    return measureTextWithDOM(text, style);\n  }\n\n  const cacheKey = createCacheKey(text, style);\n  const cachedResult = stringCache.get(cacheKey);\n\n  if (cachedResult) {\n    return cachedResult;\n  }\n\n  // Measure using DOM\n  const result = measureTextWithDOM(text, style);\n\n  // Store in LRU cache\n  stringCache.set(cacheKey, result);\n\n  return result;\n};\n\n/**\n * Configure text measurement behavior\n * @param config - Partial configuration to apply\n * @returns void\n */\nexport const configureTextMeasurement = (config: Partial<TextMeasurementConfig>): void => {\n  const newConfig = { ...currentConfig, ...config };\n\n  if (newConfig.cacheSize !== currentConfig.cacheSize) {\n    stringCache = new LRUCache<string, Size>(newConfig.cacheSize);\n  }\n\n  currentConfig = newConfig;\n};\n\n/**\n * Get current text measurement configuration\n * @returns Current configuration\n */\nexport const getTextMeasurementConfig = (): TextMeasurementConfig => ({ ...currentConfig });\n\n/**\n * Clear the string size cache. Useful for testing or memory management.\n * @returns void\n */\nexport const clearStringCache = (): void => {\n  stringCache.clear();\n};\n\n/**\n * Get cache statistics for debugging purposes.\n * @returns Cache statistics including size and max size\n */\nexport const getStringCacheStats = () => ({\n  size: stringCache.size(),\n  maxSize: currentConfig.cacheSize,\n});\n","/**\n * Simple LRU (Least Recently Used) cache implementation\n */\nexport class LRUCache<K, V> {\n  private cache = new Map<K, V>();\n\n  private maxSize: number;\n\n  constructor(maxSize: number) {\n    this.maxSize = maxSize;\n  }\n\n  get(key: K): V | undefined {\n    const value = this.cache.get(key);\n    if (value !== undefined) {\n      this.cache.delete(key);\n      this.cache.set(key, value);\n    }\n    return value;\n  }\n\n  set(key: K, value: V): void {\n    if (this.cache.has(key)) {\n      this.cache.delete(key);\n    } else if (this.cache.size >= this.maxSize) {\n      const firstKey = this.cache.keys().next().value;\n      this.cache.delete(firstKey);\n    }\n    this.cache.set(key, value);\n  }\n\n  clear(): void {\n    this.cache.clear();\n  }\n\n  size(): number {\n    return this.cache.size;\n  }\n}\n","import { isNan } from './DataUtils';\n\nconst MULTIPLY_OR_DIVIDE_REGEX = /(-?\\d+(?:\\.\\d+)?[a-zA-Z%]*)([*/])(-?\\d+(?:\\.\\d+)?[a-zA-Z%]*)/;\nconst ADD_OR_SUBTRACT_REGEX = /(-?\\d+(?:\\.\\d+)?[a-zA-Z%]*)([+-])(-?\\d+(?:\\.\\d+)?[a-zA-Z%]*)/;\nconst CSS_LENGTH_UNIT_REGEX = /^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/;\nconst NUM_SPLIT_REGEX = /(-?\\d+(?:\\.\\d+)?)([a-zA-Z%]+)?/;\n\nconst CONVERSION_RATES: Record<string, number> = {\n  cm: 96 / 2.54,\n  mm: 96 / 25.4,\n  pt: 96 / 72,\n  pc: 96 / 6,\n  in: 96,\n  Q: 96 / (2.54 * 40),\n  px: 1,\n};\n\nconst FIXED_CSS_LENGTH_UNITS: Array<keyof typeof CONVERSION_RATES> = Object.keys(CONVERSION_RATES);\nconst STR_NAN = 'NaN';\n\nfunction convertToPx(value: number, unit: string): number {\n  return value * CONVERSION_RATES[unit];\n}\n\nclass DecimalCSS {\n  static parse(str: string) {\n    const [, numStr, unit] = NUM_SPLIT_REGEX.exec(str) ?? [];\n\n    return new DecimalCSS(parseFloat(numStr), unit ?? '');\n  }\n\n  constructor(\n    public num: number,\n    public unit: string,\n  ) {\n    this.num = num;\n    this.unit = unit;\n\n    if (isNan(num)) {\n      this.unit = '';\n    }\n\n    if (unit !== '' && !CSS_LENGTH_UNIT_REGEX.test(unit)) {\n      this.num = NaN;\n      this.unit = '';\n    }\n\n    if (FIXED_CSS_LENGTH_UNITS.includes(unit)) {\n      this.num = convertToPx(num, unit);\n      this.unit = 'px';\n    }\n  }\n\n  add(other: DecimalCSS) {\n    if (this.unit !== other.unit) {\n      return new DecimalCSS(NaN, '');\n    }\n\n    return new DecimalCSS(this.num + other.num, this.unit);\n  }\n\n  subtract(other: DecimalCSS) {\n    if (this.unit !== other.unit) {\n      return new DecimalCSS(NaN, '');\n    }\n\n    return new DecimalCSS(this.num - other.num, this.unit);\n  }\n\n  multiply(other: DecimalCSS) {\n    if (this.unit !== '' && other.unit !== '' && this.unit !== other.unit) {\n      return new DecimalCSS(NaN, '');\n    }\n\n    return new DecimalCSS(this.num * other.num, this.unit || other.unit);\n  }\n\n  divide(other: DecimalCSS) {\n    if (this.unit !== '' && other.unit !== '' && this.unit !== other.unit) {\n      return new DecimalCSS(NaN, '');\n    }\n\n    return new DecimalCSS(this.num / other.num, this.unit || other.unit);\n  }\n\n  toString() {\n    return `${this.num}${this.unit}`;\n  }\n\n  isNaN() {\n    return isNan(this.num);\n  }\n}\n\nfunction calculateArithmetic(expr: string): string {\n  if (expr.includes(STR_NAN)) {\n    return STR_NAN;\n  }\n\n  let newExpr = expr;\n  while (newExpr.includes('*') || newExpr.includes('/')) {\n    const [, leftOperand, operator, rightOperand] = MULTIPLY_OR_DIVIDE_REGEX.exec(newExpr) ?? [];\n    const lTs = DecimalCSS.parse(leftOperand ?? '');\n    const rTs = DecimalCSS.parse(rightOperand ?? '');\n    const result = operator === '*' ? lTs.multiply(rTs) : lTs.divide(rTs);\n    if (result.isNaN()) {\n      return STR_NAN;\n    }\n    newExpr = newExpr.replace(MULTIPLY_OR_DIVIDE_REGEX, result.toString());\n  }\n\n  while (newExpr.includes('+') || /.-\\d+(?:\\.\\d+)?/.test(newExpr)) {\n    const [, leftOperand, operator, rightOperand] = ADD_OR_SUBTRACT_REGEX.exec(newExpr) ?? [];\n    const lTs = DecimalCSS.parse(leftOperand ?? '');\n    const rTs = DecimalCSS.parse(rightOperand ?? '');\n    const result = operator === '+' ? lTs.add(rTs) : lTs.subtract(rTs);\n    if (result.isNaN()) {\n      return STR_NAN;\n    }\n    newExpr = newExpr.replace(ADD_OR_SUBTRACT_REGEX, result.toString());\n  }\n\n  return newExpr;\n}\n\nconst PARENTHESES_REGEX = /\\(([^()]*)\\)/;\n\nfunction calculateParentheses(expr: string): string {\n  let newExpr = expr;\n  let match: ReturnType<typeof RegExp.prototype.exec> | null;\n  // eslint-disable-next-line no-cond-assign\n  while ((match = PARENTHESES_REGEX.exec(newExpr)) != null) {\n    const [, parentheticalExpression] = match;\n    newExpr = newExpr.replace(PARENTHESES_REGEX, calculateArithmetic(parentheticalExpression));\n  }\n\n  return newExpr;\n}\n\nfunction evaluateExpression(expression: string): string {\n  let newExpr = expression.replace(/\\s+/g, '');\n  newExpr = calculateParentheses(newExpr);\n  newExpr = calculateArithmetic(newExpr);\n\n  return newExpr;\n}\n\nexport function safeEvaluateExpression(expression: string): string {\n  try {\n    return evaluateExpression(expression);\n  } catch {\n    return STR_NAN;\n  }\n}\n\nexport function reduceCSSCalc(expression: string): string {\n  const result = safeEvaluateExpression(expression.slice(5, -1));\n\n  if (result === STR_NAN) {\n    return '';\n  }\n\n  return result;\n}\n","import * as React from 'react';\nimport { CSSProperties, SVGProps, useMemo, forwardRef } from 'react';\n\nimport { clsx } from 'clsx';\nimport { isNullish, isNumber, isNumOrStr } from '../util/DataUtils';\nimport { Global } from '../util/Global';\nimport { filterProps } from '../util/ReactUtils';\nimport { getStringSize } from '../util/DOMUtils';\nimport { reduceCSSCalc } from '../util/ReduceCSSCalc';\n\nconst BREAKING_SPACES = /[ \\f\\n\\r\\t\\v\\u2028\\u2029]+/;\n\ninterface WordWithComputedWidth {\n  word: string;\n  width: number;\n}\n\ninterface CalculatedWordWidths {\n  wordsWithComputedWidth: Array<WordWithComputedWidth>;\n  spaceWidth: number;\n}\n\ntype CalculateWordWidthsParam = Pick<Props, 'children' | 'breakAll' | 'style'>;\n\nconst calculateWordWidths = ({ children, breakAll, style }: CalculateWordWidthsParam): CalculatedWordWidths => {\n  try {\n    let words: string[] = [];\n    if (!isNullish(children)) {\n      if (breakAll) {\n        words = children.toString().split('');\n      } else {\n        words = children.toString().split(BREAKING_SPACES);\n      }\n    }\n\n    const wordsWithComputedWidth = words.map(word => ({ word, width: getStringSize(word, style).width }));\n\n    const spaceWidth = breakAll ? 0 : getStringSize('\\u00A0', style).width;\n\n    return { wordsWithComputedWidth, spaceWidth };\n  } catch {\n    return null;\n  }\n};\n\nexport type TextAnchor = 'start' | 'middle' | 'end' | 'inherit';\n\ninterface TextProps {\n  scaleToFit?: boolean;\n  angle?: number;\n  textAnchor?: TextAnchor;\n  verticalAnchor?: 'start' | 'middle' | 'end';\n  style?: CSSProperties;\n  lineHeight?: number | string;\n  breakAll?: boolean;\n  children?: string | number;\n  maxLines?: number;\n}\n\nexport type Props = Omit<SVGProps<SVGTextElement>, 'textAnchor' | 'verticalAnchor'> & TextProps;\n\ninterface Words {\n  words: Array<string>;\n  width?: number;\n}\n\ntype CalculateWordsByLinesProps = Pick<Props, 'maxLines' | 'children' | 'style' | 'breakAll'>;\n\nconst calculateWordsByLines = (\n  { maxLines, children, style, breakAll }: CalculateWordsByLinesProps,\n  initialWordsWithComputedWith: Array<WordWithComputedWidth>,\n  spaceWidth: number,\n  lineWidth: number | string,\n  scaleToFit?: boolean,\n): Array<Words> => {\n  const shouldLimitLines = isNumber(maxLines);\n  const text = children as string;\n\n  const calculate = (words: Array<WordWithComputedWidth> = []) =>\n    words.reduce((result, { word, width }) => {\n      const currentLine = result[result.length - 1];\n\n      if (\n        currentLine &&\n        (lineWidth == null || scaleToFit || currentLine.width + width + spaceWidth < Number(lineWidth))\n      ) {\n        // Word can be added to an existing line\n        currentLine.words.push(word);\n        currentLine.width += width + spaceWidth;\n      } else {\n        // Add first word to line or word is too long to scaleToFit on existing line\n        const newLine = { words: [word], width };\n        result.push(newLine);\n      }\n\n      return result;\n    }, []);\n\n  const originalResult = calculate(initialWordsWithComputedWith);\n\n  const findLongestLine = (words: Array<Words>): Words =>\n    words.reduce((a: Words, b: Words) => (a.width > b.width ? a : b));\n\n  if (!shouldLimitLines || scaleToFit) {\n    return originalResult;\n  }\n\n  const overflows = originalResult.length > maxLines || findLongestLine(originalResult).width > Number(lineWidth);\n  if (!overflows) {\n    return originalResult;\n  }\n\n  const suffix = '…';\n\n  const checkOverflow = (index: number): [boolean, Words[]] => {\n    const tempText = text.slice(0, index);\n\n    const words = calculateWordWidths({\n      breakAll,\n      style,\n      children: tempText + suffix,\n    }).wordsWithComputedWidth;\n\n    const result = calculate(words);\n\n    const doesOverflow = result.length > maxLines || findLongestLine(result).width > Number(lineWidth);\n\n    return [doesOverflow, result];\n  };\n\n  let start = 0;\n  let end = text.length - 1;\n\n  let iterations = 0;\n  let trimmedResult;\n\n  while (start <= end && iterations <= text.length - 1) {\n    const middle = Math.floor((start + end) / 2);\n    const prev = middle - 1;\n\n    const [doesPrevOverflow, result] = checkOverflow(prev);\n    const [doesMiddleOverflow] = checkOverflow(middle);\n\n    if (!doesPrevOverflow && !doesMiddleOverflow) {\n      start = middle + 1;\n    }\n\n    if (doesPrevOverflow && doesMiddleOverflow) {\n      end = middle - 1;\n    }\n\n    if (!doesPrevOverflow && doesMiddleOverflow) {\n      trimmedResult = result;\n      break;\n    }\n\n    iterations++;\n  }\n\n  // Fallback to originalResult (result without trimming) if we cannot find the\n  // where to trim.  This should not happen :tm:\n  return trimmedResult || originalResult;\n};\n\nconst getWordsWithoutCalculate = (children: React.ReactNode): Array<Words> => {\n  const words = !isNullish(children) ? children.toString().split(BREAKING_SPACES) : [];\n  return [{ words }];\n};\n\ntype GetWordsByLinesProps = Pick<Props, 'width' | 'scaleToFit' | 'children' | 'style' | 'breakAll' | 'maxLines'>;\n\nexport const getWordsByLines = ({ width, scaleToFit, children, style, breakAll, maxLines }: GetWordsByLinesProps) => {\n  // Only perform calculations if using features that require them (multiline, scaleToFit)\n  if ((width || scaleToFit) && !Global.isSsr) {\n    let wordsWithComputedWidth: Array<WordWithComputedWidth>, spaceWidth: number;\n\n    const wordWidths = calculateWordWidths({ breakAll, children, style });\n\n    if (wordWidths) {\n      const { wordsWithComputedWidth: wcw, spaceWidth: sw } = wordWidths;\n\n      wordsWithComputedWidth = wcw;\n      spaceWidth = sw;\n    } else {\n      return getWordsWithoutCalculate(children);\n    }\n\n    return calculateWordsByLines(\n      { breakAll, children, maxLines, style },\n      wordsWithComputedWidth,\n      spaceWidth,\n      width,\n      scaleToFit,\n    );\n  }\n  return getWordsWithoutCalculate(children);\n};\n\nconst DEFAULT_FILL = '#808080';\n\nexport const Text = forwardRef<SVGTextElement, Props>(\n  (\n    {\n      x: propsX = 0,\n      y: propsY = 0,\n      lineHeight = '1em',\n      // Magic number from d3\n      capHeight = '0.71em',\n      scaleToFit = false,\n      textAnchor = 'start',\n      // Maintain compat with existing charts / default SVG behavior\n      verticalAnchor = 'end',\n      fill = DEFAULT_FILL,\n      ...props\n    },\n    ref,\n  ) => {\n    const wordsByLines: Array<Words> = useMemo(() => {\n      return getWordsByLines({\n        breakAll: props.breakAll,\n        children: props.children,\n        maxLines: props.maxLines,\n        scaleToFit,\n        style: props.style,\n        width: props.width,\n      });\n    }, [props.breakAll, props.children, props.maxLines, scaleToFit, props.style, props.width]);\n\n    const { dx, dy, angle, className, breakAll, ...textProps } = props;\n\n    if (!isNumOrStr(propsX) || !isNumOrStr(propsY)) {\n      return null;\n    }\n    const x = (propsX as number) + (isNumber(dx as number) ? (dx as number) : 0);\n    const y = (propsY as number) + (isNumber(dy as number) ? (dy as number) : 0);\n\n    let startDy: string;\n    switch (verticalAnchor) {\n      case 'start':\n        startDy = reduceCSSCalc(`calc(${capHeight})`);\n        break;\n      case 'middle':\n        startDy = reduceCSSCalc(`calc(${(wordsByLines.length - 1) / 2} * -${lineHeight} + (${capHeight} / 2))`);\n        break;\n      default:\n        startDy = reduceCSSCalc(`calc(${wordsByLines.length - 1} * -${lineHeight})`);\n        break;\n    }\n\n    const transforms = [];\n    if (scaleToFit) {\n      const lineWidth = wordsByLines[0].width;\n      const { width } = props;\n      transforms.push(`scale(${isNumber(width as number) ? (width as number) / lineWidth : 1})`);\n    }\n    if (angle) {\n      transforms.push(`rotate(${angle}, ${x}, ${y})`);\n    }\n    if (transforms.length) {\n      textProps.transform = transforms.join(' ');\n    }\n\n    return (\n      <text\n        {...filterProps(textProps, true)}\n        ref={ref}\n        x={x}\n        y={y}\n        className={clsx('recharts-text', className)}\n        textAnchor={textAnchor}\n        fill={fill.includes('url') ? DEFAULT_FILL : fill}\n      >\n        {wordsByLines.map((line, index) => {\n          const words = line.words.join(breakAll ? '' : ' ');\n          return (\n            // duplicate words will cause duplicate keys\n            // eslint-disable-next-line react/no-array-index-key\n            <tspan x={x} dy={index === 0 ? startDy : lineHeight} key={`${words}-${index}`}>\n              {words}\n            </tspan>\n          );\n        })}\n      </text>\n    );\n  },\n);\n\nText.displayName = 'Text';\n","import * as React from 'react';\nimport { cloneElement, isValidElement, ReactNode, ReactElement, createElement, SVGProps } from 'react';\nimport { clsx } from 'clsx';\nimport { Text } from './Text';\nimport { findAllByType, filterProps } from '../util/ReactUtils';\nimport { isNumOrStr, isNumber, isPercent, getPercentValue, uniqueId, mathSign, isNullish } from '../util/DataUtils';\nimport { polarToCartesian } from '../util/PolarUtils';\nimport { ViewBox, PolarViewBox, CartesianViewBox, DataKey } from '../util/types';\nimport { useViewBox } from '../context/chartLayoutContext';\nimport { useAppSelector } from '../state/hooks';\nimport { selectPolarViewBox } from '../state/selectors/polarAxisSelectors';\n\nexport type ContentType = ReactElement | ((props: Props) => ReactNode);\n\nexport type LabelPosition =\n  | 'top'\n  | 'left'\n  | 'right'\n  | 'bottom'\n  | 'inside'\n  | 'outside'\n  | 'insideLeft'\n  | 'insideRight'\n  | 'insideTop'\n  | 'insideBottom'\n  | 'insideTopLeft'\n  | 'insideBottomLeft'\n  | 'insideTopRight'\n  | 'insideBottomRight'\n  | 'insideStart'\n  | 'insideEnd'\n  | 'end'\n  | 'center'\n  | 'centerTop'\n  | 'centerBottom'\n  | 'middle'\n  | {\n      x?: number;\n      y?: number;\n    };\n\ninterface LabelProps {\n  viewBox?: ViewBox;\n  parentViewBox?: ViewBox;\n  formatter?: (label: React.ReactNode) => React.ReactNode;\n  value?: number | string;\n  offset?: number;\n  position?: LabelPosition;\n  children?: ReactNode;\n  className?: string;\n  content?: ContentType;\n  textBreakAll?: boolean;\n  angle?: number;\n  index?: number;\n  labelRef?: React.RefObject<Element>;\n}\n\nexport type Props = Omit<SVGProps<SVGTextElement>, 'viewBox'> & LabelProps;\n\nexport type ImplicitLabelType =\n  | boolean\n  | string\n  | number\n  | ReactElement<SVGElement>\n  | ((props: any) => ReactElement<SVGElement>)\n  // dataKey is only applicable when label is used implicitly from graphical element props\n  | (Props & { dataKey?: DataKey<any> });\n\nconst getLabel = (props: Props) => {\n  const { value, formatter } = props;\n  const label = isNullish(props.children) ? value : props.children;\n\n  if (typeof formatter === 'function') {\n    return formatter(label);\n  }\n\n  return label;\n};\n\nexport const isLabelContentAFunction = (content: unknown): content is (props: Props) => React.ReactNode => {\n  return content != null && typeof content === 'function';\n};\n\nconst getDeltaAngle = (startAngle: number, endAngle: number) => {\n  const sign = mathSign(endAngle - startAngle);\n  const deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);\n\n  return sign * deltaAngle;\n};\n\nconst renderRadialLabel = (\n  labelProps: Props,\n  label: ReactNode,\n  attrs: SVGProps<SVGTextElement>,\n  viewBox: PolarViewBox,\n) => {\n  const { position, offset, className } = labelProps;\n  const { cx, cy, innerRadius, outerRadius, startAngle, endAngle, clockWise } = viewBox;\n  const radius = (innerRadius + outerRadius) / 2;\n  const deltaAngle = getDeltaAngle(startAngle, endAngle);\n  const sign = deltaAngle >= 0 ? 1 : -1;\n  let labelAngle, direction;\n\n  if (position === 'insideStart') {\n    labelAngle = startAngle + sign * offset;\n    direction = clockWise;\n  } else if (position === 'insideEnd') {\n    labelAngle = endAngle - sign * offset;\n    direction = !clockWise;\n  } else if (position === 'end') {\n    labelAngle = endAngle + sign * offset;\n    direction = clockWise;\n  }\n\n  direction = deltaAngle <= 0 ? direction : !direction;\n\n  const startPoint = polarToCartesian(cx, cy, radius, labelAngle);\n  const endPoint = polarToCartesian(cx, cy, radius, labelAngle + (direction ? 1 : -1) * 359);\n  const path = `M${startPoint.x},${startPoint.y}\n    A${radius},${radius},0,1,${direction ? 0 : 1},\n    ${endPoint.x},${endPoint.y}`;\n  const id = isNullish(labelProps.id) ? uniqueId('recharts-radial-line-') : labelProps.id;\n\n  return (\n    <text {...attrs} dominantBaseline=\"central\" className={clsx('recharts-radial-bar-label', className)}>\n      <defs>\n        <path id={id} d={path} />\n      </defs>\n      <textPath xlinkHref={`#${id}`}>{label}</textPath>\n    </text>\n  );\n};\n\nconst getAttrsOfPolarLabel = (viewBox: PolarViewBox, offset: Props['offset'], position: Props['position']) => {\n  const { cx, cy, innerRadius, outerRadius, startAngle, endAngle } = viewBox as PolarViewBox;\n  const midAngle = (startAngle + endAngle) / 2;\n\n  if (position === 'outside') {\n    const { x, y } = polarToCartesian(cx, cy, outerRadius + offset, midAngle);\n\n    return {\n      x,\n      y,\n      textAnchor: x >= cx ? 'start' : 'end',\n      verticalAnchor: 'middle',\n    };\n  }\n\n  if (position === 'center') {\n    return {\n      x: cx,\n      y: cy,\n      textAnchor: 'middle',\n      verticalAnchor: 'middle',\n    };\n  }\n\n  if (position === 'centerTop') {\n    return {\n      x: cx,\n      y: cy,\n      textAnchor: 'middle',\n      verticalAnchor: 'start',\n    };\n  }\n\n  if (position === 'centerBottom') {\n    return {\n      x: cx,\n      y: cy,\n      textAnchor: 'middle',\n      verticalAnchor: 'end',\n    };\n  }\n\n  const r = (innerRadius + outerRadius) / 2;\n  const { x, y } = polarToCartesian(cx, cy, r, midAngle);\n\n  return {\n    x,\n    y,\n    textAnchor: 'middle',\n    verticalAnchor: 'middle',\n  };\n};\n\nconst getAttrsOfCartesianLabel = (props: Props, viewBox: CartesianViewBox) => {\n  const { parentViewBox, offset, position } = props;\n  const { x, y, width, height } = viewBox;\n\n  // Define vertical offsets and position inverts based on the value being positive or negative\n  const verticalSign = height >= 0 ? 1 : -1;\n  const verticalOffset = verticalSign * offset;\n  const verticalEnd = verticalSign > 0 ? 'end' : 'start';\n  const verticalStart = verticalSign > 0 ? 'start' : 'end';\n\n  // Define horizontal offsets and position inverts based on the value being positive or negative\n  const horizontalSign = width >= 0 ? 1 : -1;\n  const horizontalOffset = horizontalSign * offset;\n  const horizontalEnd = horizontalSign > 0 ? 'end' : 'start';\n  const horizontalStart = horizontalSign > 0 ? 'start' : 'end';\n\n  if (position === 'top') {\n    const attrs = {\n      x: x + width / 2,\n      y: y - verticalSign * offset,\n      textAnchor: 'middle',\n      verticalAnchor: verticalEnd,\n    };\n\n    return {\n      ...attrs,\n      ...(parentViewBox\n        ? {\n            height: Math.max(y - (parentViewBox as CartesianViewBox).y, 0),\n            width,\n          }\n        : {}),\n    };\n  }\n\n  if (position === 'bottom') {\n    const attrs = {\n      x: x + width / 2,\n      y: y + height + verticalOffset,\n      textAnchor: 'middle',\n      verticalAnchor: verticalStart,\n    };\n\n    return {\n      ...attrs,\n      ...(parentViewBox\n        ? {\n            height: Math.max(\n              (parentViewBox as CartesianViewBox).y + (parentViewBox as CartesianViewBox).height - (y + height),\n              0,\n            ),\n            width,\n          }\n        : {}),\n    };\n  }\n\n  if (position === 'left') {\n    const attrs = {\n      x: x - horizontalOffset,\n      y: y + height / 2,\n      textAnchor: horizontalEnd,\n      verticalAnchor: 'middle',\n    };\n\n    return {\n      ...attrs,\n      ...(parentViewBox\n        ? {\n            width: Math.max(attrs.x - (parentViewBox as CartesianViewBox).x, 0),\n            height,\n          }\n        : {}),\n    };\n  }\n\n  if (position === 'right') {\n    const attrs = {\n      x: x + width + horizontalOffset,\n      y: y + height / 2,\n      textAnchor: horizontalStart,\n      verticalAnchor: 'middle',\n    };\n    return {\n      ...attrs,\n      ...(parentViewBox\n        ? {\n            width: Math.max(\n              (parentViewBox as CartesianViewBox).x + (parentViewBox as CartesianViewBox).width - attrs.x,\n              0,\n            ),\n            height,\n          }\n        : {}),\n    };\n  }\n\n  const sizeAttrs = parentViewBox ? { width, height } : {};\n\n  if (position === 'insideLeft') {\n    return {\n      x: x + horizontalOffset,\n      y: y + height / 2,\n      textAnchor: horizontalStart,\n      verticalAnchor: 'middle',\n      ...sizeAttrs,\n    };\n  }\n\n  if (position === 'insideRight') {\n    return {\n      x: x + width - horizontalOffset,\n      y: y + height / 2,\n      textAnchor: horizontalEnd,\n      verticalAnchor: 'middle',\n      ...sizeAttrs,\n    };\n  }\n\n  if (position === 'insideTop') {\n    return {\n      x: x + width / 2,\n      y: y + verticalOffset,\n      textAnchor: 'middle',\n      verticalAnchor: verticalStart,\n      ...sizeAttrs,\n    };\n  }\n\n  if (position === 'insideBottom') {\n    return {\n      x: x + width / 2,\n      y: y + height - verticalOffset,\n      textAnchor: 'middle',\n      verticalAnchor: verticalEnd,\n      ...sizeAttrs,\n    };\n  }\n\n  if (position === 'insideTopLeft') {\n    return {\n      x: x + horizontalOffset,\n      y: y + verticalOffset,\n      textAnchor: horizontalStart,\n      verticalAnchor: verticalStart,\n      ...sizeAttrs,\n    };\n  }\n\n  if (position === 'insideTopRight') {\n    return {\n      x: x + width - horizontalOffset,\n      y: y + verticalOffset,\n      textAnchor: horizontalEnd,\n      verticalAnchor: verticalStart,\n      ...sizeAttrs,\n    };\n  }\n\n  if (position === 'insideBottomLeft') {\n    return {\n      x: x + horizontalOffset,\n      y: y + height - verticalOffset,\n      textAnchor: horizontalStart,\n      verticalAnchor: verticalEnd,\n      ...sizeAttrs,\n    };\n  }\n\n  if (position === 'insideBottomRight') {\n    return {\n      x: x + width - horizontalOffset,\n      y: y + height - verticalOffset,\n      textAnchor: horizontalEnd,\n      verticalAnchor: verticalEnd,\n      ...sizeAttrs,\n    };\n  }\n\n  if (\n    !!position &&\n    typeof position === 'object' &&\n    (isNumber(position.x) || isPercent(position.x)) &&\n    (isNumber(position.y) || isPercent(position.y))\n  ) {\n    return {\n      x: x + getPercentValue(position.x, width),\n      y: y + getPercentValue(position.y, height),\n      textAnchor: 'end',\n      verticalAnchor: 'end',\n      ...sizeAttrs,\n    };\n  }\n\n  return {\n    x: x + width / 2,\n    y: y + height / 2,\n    textAnchor: 'middle',\n    verticalAnchor: 'middle',\n    ...sizeAttrs,\n  };\n};\n\nconst isPolar = (viewBox: CartesianViewBox | PolarViewBox): viewBox is PolarViewBox =>\n  'cx' in viewBox && isNumber(viewBox.cx);\n\nexport function Label({ offset = 5, ...restProps }: Props) {\n  const props = { offset, ...restProps };\n  const {\n    viewBox: viewBoxFromProps,\n    position,\n    value,\n    children,\n    content,\n    className = '',\n    textBreakAll,\n    labelRef,\n  } = props;\n\n  const polarViewBox = useAppSelector(selectPolarViewBox);\n  const cartesianViewBox = useViewBox();\n\n  /*\n   * I am not proud about this solution but it's a quick fix for https://github.com/recharts/recharts/issues/6030#issuecomment-3155352460.\n   * What we should really do is split Label into two components: CartesianLabel and PolarLabel and then handle their respective viewBoxes separately.\n   * Also other components should set its own viewBox in a context so that we can fix https://github.com/recharts/recharts/issues/6156\n   */\n  const resolvedViewBox = position === 'center' ? cartesianViewBox : (polarViewBox ?? cartesianViewBox);\n\n  const viewBox = viewBoxFromProps || resolvedViewBox;\n\n  if (\n    !viewBox ||\n    (isNullish(value) && isNullish(children) && !isValidElement(content) && typeof content !== 'function')\n  ) {\n    return null;\n  }\n\n  const propsWithViewBox = {\n    ...props,\n    viewBox,\n  };\n\n  if (isValidElement(content)) {\n    const { labelRef: _, ...propsWithoutLabelRef } = propsWithViewBox;\n    return cloneElement(content, propsWithoutLabelRef);\n  }\n\n  let label: ReactNode;\n  if (typeof content === 'function') {\n    label = createElement(content as any, propsWithViewBox);\n\n    if (isValidElement(label)) {\n      return label;\n    }\n  } else {\n    label = getLabel(props);\n  }\n\n  const isPolarLabel = isPolar(viewBox);\n  const attrs = filterProps(props, true);\n\n  if (isPolarLabel && (position === 'insideStart' || position === 'insideEnd' || position === 'end')) {\n    return renderRadialLabel(props, label, attrs, viewBox);\n  }\n\n  const positionAttrs = isPolarLabel\n    ? getAttrsOfPolarLabel(viewBox, props.offset, props.position)\n    : getAttrsOfCartesianLabel(props, viewBox);\n\n  return (\n    <Text\n      ref={labelRef}\n      className={clsx('recharts-label', className)}\n      {...attrs}\n      {...(positionAttrs as any)}\n      breakAll={textBreakAll}\n    >\n      {label}\n    </Text>\n  );\n}\n\nLabel.displayName = 'Label';\n\nconst parseViewBox = (props: any): ViewBox => {\n  const {\n    cx,\n    cy,\n    angle,\n    startAngle,\n    endAngle,\n    r,\n    radius,\n    innerRadius,\n    outerRadius,\n    x,\n    y,\n    top,\n    left,\n    width,\n    height,\n    clockWise,\n    labelViewBox,\n  } = props;\n\n  if (labelViewBox) {\n    return labelViewBox;\n  }\n\n  if (isNumber(width) && isNumber(height)) {\n    if (isNumber(x) && isNumber(y)) {\n      return { x, y, width, height };\n    }\n    if (isNumber(top) && isNumber(left)) {\n      return { x: top, y: left, width, height };\n    }\n  }\n\n  if (isNumber(x) && isNumber(y)) {\n    return { x, y, width: 0, height: 0 };\n  }\n\n  if (isNumber(cx) && isNumber(cy)) {\n    return {\n      cx,\n      cy,\n      startAngle: startAngle || angle || 0,\n      endAngle: endAngle || angle || 0,\n      innerRadius: innerRadius || 0,\n      outerRadius: outerRadius || radius || r || 0,\n      clockWise,\n    };\n  }\n\n  if (props.viewBox) {\n    return props.viewBox;\n  }\n\n  return undefined;\n};\n\nconst parseLabel = (label: unknown, viewBox: ViewBox, labelRef?: React.RefObject<Element>) => {\n  if (!label) {\n    return null;\n  }\n\n  const commonProps = { viewBox, labelRef };\n\n  if (label === true) {\n    return <Label key=\"label-implicit\" {...commonProps} />;\n  }\n\n  if (isNumOrStr(label)) {\n    return <Label key=\"label-implicit\" value={label} {...commonProps} />;\n  }\n\n  if (isValidElement(label)) {\n    if (label.type === Label) {\n      return cloneElement<LabelProps>(label, { key: 'label-implicit', ...commonProps });\n    }\n\n    return <Label key=\"label-implicit\" content={label} {...commonProps} />;\n  }\n\n  if (isLabelContentAFunction(label)) {\n    return <Label key=\"label-implicit\" content={label} {...commonProps} />;\n  }\n\n  if (label && typeof label === 'object') {\n    return <Label {...label} key=\"label-implicit\" {...commonProps} />;\n  }\n\n  return null;\n};\n\nconst renderCallByParent = (\n  parentProps: {\n    children?: ReactNode;\n    label?: unknown;\n    labelRef?: React.RefObject<Element>;\n  },\n  viewBox?: ViewBox,\n  checkPropsLabel = true,\n): ReactElement[] | null => {\n  if (!parentProps || (!parentProps.children && checkPropsLabel && !parentProps.label)) {\n    return null;\n  }\n  const { children, labelRef } = parentProps;\n  const parentViewBox = parseViewBox(parentProps);\n\n  const explicitChildren = findAllByType(children, Label).map((child, index) => {\n    return cloneElement(child, {\n      viewBox: viewBox || parentViewBox,\n      // eslint-disable-next-line react/no-array-index-key\n      key: `label-${index}`,\n    });\n  });\n\n  if (!checkPropsLabel) {\n    return explicitChildren;\n  }\n  const implicitLabel = parseLabel(parentProps.label, viewBox || parentViewBox, labelRef);\n\n  return [implicitLabel, ...explicitChildren];\n};\n\nLabel.parseViewBox = parseViewBox;\nLabel.renderCallByParent = renderCallByParent;\n","import * as React from 'react';\nimport { cloneElement, ReactElement, ReactNode, SVGProps } from 'react';\nimport last from 'es-toolkit/compat/last';\n\nimport { Label, ContentType, Props as LabelProps, LabelPosition, isLabelContentAFunction } from './Label';\nimport { Layer } from '../container/Layer';\nimport { findAllByType, filterProps } from '../util/ReactUtils';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport { DataKey, ViewBox } from '../util/types';\nimport { isNullish } from '../util/DataUtils';\n\ninterface Data {\n  value?: number | string | Array<number | string>;\n  payload?: any;\n  parentViewBox?: ViewBox;\n}\n\ninterface LabelListProps<T extends Data> {\n  id?: string;\n  // why is data a prop here, shouldn't this only come from chart data?\n  data?: ReadonlyArray<T>;\n  valueAccessor?: (entry: T, index: number) => string | number;\n  clockWise?: boolean;\n  dataKey?: DataKey<Record<string, any>>;\n  content?: ContentType;\n  textBreakAll?: boolean;\n  position?: LabelPosition;\n  offset?: LabelProps['offset'];\n  angle?: number;\n  formatter?: (label: React.ReactNode) => React.ReactNode;\n}\n\nexport type Props<T extends Data> = SVGProps<SVGTextElement> & LabelListProps<T>;\n\nexport type ImplicitLabelListType<T extends Data> =\n  | boolean\n  | ReactElement<SVGElement>\n  | ((props: any) => ReactElement<SVGElement>)\n  | Props<T>;\n\nconst defaultAccessor = (entry: Data) => (Array.isArray(entry.value) ? last(entry.value) : entry.value);\n\nexport function LabelList<T extends Data>({ valueAccessor = defaultAccessor, ...restProps }: Props<T>) {\n  const { data, dataKey, clockWise, id, textBreakAll, ...others } = restProps;\n\n  if (!data || !data.length) {\n    return null;\n  }\n\n  return (\n    <Layer className=\"recharts-label-list\">\n      {data.map((entry, index) => {\n        const value = isNullish(dataKey)\n          ? valueAccessor(entry, index)\n          : (getValueByDataKey(entry && entry.payload, dataKey) as string | number);\n\n        const idProps = isNullish(id) ? {} : { id: `${id}-${index}` };\n\n        return (\n          <Label\n            {...filterProps(entry, true)}\n            {...others}\n            {...idProps}\n            parentViewBox={entry.parentViewBox}\n            value={value}\n            textBreakAll={textBreakAll}\n            viewBox={Label.parseViewBox(isNullish(clockWise) ? entry : { ...entry, clockWise })}\n            key={`label-${index}`} // eslint-disable-line react/no-array-index-key\n            index={index}\n          />\n        );\n      })}\n    </Layer>\n  );\n}\n\nLabelList.displayName = 'LabelList';\n\nfunction parseLabelList<T extends Data>(label: unknown, data: ReadonlyArray<T>) {\n  if (!label) {\n    return null;\n  }\n\n  if (label === true) {\n    return <LabelList key=\"labelList-implicit\" data={data} />;\n  }\n\n  if (React.isValidElement(label) || isLabelContentAFunction(label)) {\n    return <LabelList key=\"labelList-implicit\" data={data} content={label} />;\n  }\n\n  if (typeof label === 'object') {\n    return <LabelList data={data} {...label} key=\"labelList-implicit\" />;\n  }\n\n  return null;\n}\n\nfunction renderCallByParent<T extends Data>(\n  parentProps: { children?: ReactNode; label?: unknown },\n  data: ReadonlyArray<T>,\n  checkPropsLabel = true,\n) {\n  if (!parentProps || (!parentProps.children && checkPropsLabel && !parentProps.label)) {\n    return null;\n  }\n  const { children } = parentProps;\n\n  const explicitChildren = findAllByType(children, LabelList).map((child, index) =>\n    cloneElement(child, {\n      data,\n      // eslint-disable-next-line react/no-array-index-key\n      key: `labelList-${index}`,\n    }),\n  );\n  if (!checkPropsLabel) {\n    return explicitChildren;\n  }\n\n  const implicitLabelList = parseLabelList(parentProps.label, data);\n\n  return [implicitLabelList, ...explicitChildren];\n}\n\nLabelList.renderCallByParent = renderCallByParent;\n","/**\n * @fileOverview Customized\n */\nimport * as React from 'react';\nimport { isValidElement, cloneElement, createElement, Component, FunctionComponent, ReactElement } from 'react';\n\nimport { Layer } from '../container/Layer';\nimport { warn } from '../util/LogUtils';\n\ntype Comp<P> = FunctionComponent<P> | Component<P> | ReactElement<P>;\nexport type Props<P, C extends Comp<P>> = P & {\n  component: C;\n};\n\n/**\n * custom svg elements by rechart instance props and state.\n * @returns {Object}   svg elements\n */\nexport function Customized<P, C extends Comp<P>>({ component, ...props }: Props<P, C>) {\n  let child;\n  if (isValidElement(component)) {\n    child = cloneElement(component, props);\n  } else if (typeof component === 'function') {\n    child = createElement(component, props as any);\n  } else {\n    warn(false, \"Customized's props `component` must be React.element or Function, but got %s.\", typeof component);\n  }\n  return <Layer className=\"recharts-customized-wrapper\">{child}</Layer>;\n}\n\nCustomized.displayName = 'Customized';\n","/**\n * @fileOverview Polygon\n */\nimport * as React from 'react';\nimport { SVGProps } from 'react';\nimport { clsx } from 'clsx';\nimport { Coordinate } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\n\nconst isValidatePoint = (point: Coordinate) => {\n  return point && point.x === +point.x && point.y === +point.y;\n};\n\nconst getParsedPoints = (points: Coordinate[] = []) => {\n  let segmentPoints: Coordinate[][] = [[]];\n\n  points.forEach(entry => {\n    if (isValidatePoint(entry)) {\n      segmentPoints[segmentPoints.length - 1].push(entry);\n    } else if (segmentPoints[segmentPoints.length - 1].length > 0) {\n      // add another path\n      segmentPoints.push([]);\n    }\n  });\n\n  if (isValidatePoint(points[0])) {\n    segmentPoints[segmentPoints.length - 1].push(points[0]);\n  }\n\n  if (segmentPoints[segmentPoints.length - 1].length <= 0) {\n    segmentPoints = segmentPoints.slice(0, -1);\n  }\n\n  return segmentPoints;\n};\n\nconst getSinglePolygonPath = (points: Coordinate[], connectNulls?: boolean) => {\n  let segmentPoints = getParsedPoints(points);\n\n  if (connectNulls) {\n    segmentPoints = [\n      segmentPoints.reduce((res: Coordinate[], segPoints: Coordinate[]) => {\n        return [...res, ...segPoints];\n      }, []),\n    ];\n  }\n\n  const polygonPath = segmentPoints\n    .map(segPoints => {\n      return segPoints.reduce((path: string, point: Coordinate, index: number) => {\n        return `${path}${index === 0 ? 'M' : 'L'}${point.x},${point.y}`;\n      }, '');\n    })\n    .join('');\n\n  return segmentPoints.length === 1 ? `${polygonPath}Z` : polygonPath;\n};\n\nconst getRanglePath = (points: Coordinate[], baseLinePoints: Coordinate[], connectNulls?: boolean) => {\n  const outerPath = getSinglePolygonPath(points, connectNulls);\n\n  return `${outerPath.slice(-1) === 'Z' ? outerPath.slice(0, -1) : outerPath}L${getSinglePolygonPath(\n    baseLinePoints.reverse(),\n    connectNulls,\n  ).slice(1)}`;\n};\n\ninterface PolygonProps {\n  className?: string;\n  points?: Coordinate[];\n  baseLinePoints?: Coordinate[];\n  connectNulls?: boolean;\n}\n\nexport type Props = Omit<SVGProps<SVGPolygonElement>, 'points'> & PolygonProps;\n\nexport const Polygon: React.FC<Props> = props => {\n  const { points, className, baseLinePoints, connectNulls, ...others } = props;\n\n  if (!points || !points.length) {\n    return null;\n  }\n\n  const layerClass = clsx('recharts-polygon', className);\n\n  if (baseLinePoints && baseLinePoints.length) {\n    const hasStroke = others.stroke && others.stroke !== 'none';\n    const rangePath = getRanglePath(points, baseLinePoints, connectNulls);\n\n    return (\n      <g className={layerClass}>\n        <path\n          {...filterProps(others, true)}\n          fill={rangePath.slice(-1) === 'Z' ? others.fill : 'none'}\n          stroke=\"none\"\n          d={rangePath}\n        />\n        {hasStroke ? (\n          <path {...filterProps(others, true)} fill=\"none\" d={getSinglePolygonPath(points, connectNulls)} />\n        ) : null}\n        {hasStroke ? (\n          <path {...filterProps(others, true)} fill=\"none\" d={getSinglePolygonPath(baseLinePoints, connectNulls)} />\n        ) : null}\n      </g>\n    );\n  }\n\n  const singlePath = getSinglePolygonPath(points, connectNulls);\n\n  return (\n    <path\n      {...filterProps(others, true)}\n      fill={singlePath.slice(-1) === 'Z' ? others.fill : 'none'}\n      className={layerClass}\n      d={singlePath}\n    />\n  );\n};\n","/**\n * @fileOverview Dot\n */\nimport * as React from 'react';\nimport { clsx } from 'clsx';\nimport { PresentationAttributesWithProps, adaptEventHandlers } from '../util/types';\n\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\n\ninterface DotProps {\n  className?: string;\n  cx?: number;\n  cy?: number;\n  r?: number;\n  clipDot?: boolean;\n}\n\nexport type Props = PresentationAttributesWithProps<DotProps, SVGCircleElement> & DotProps;\n\nexport const Dot: React.FC<Props> = props => {\n  const { cx, cy, r, className } = props;\n  const layerClass = clsx('recharts-dot', className);\n\n  if (cx === +cx && cy === +cy && r === +r) {\n    return (\n      <circle\n        {...svgPropertiesNoEvents(props)}\n        {...adaptEventHandlers(props)}\n        className={layerClass}\n        cx={cx}\n        cy={cy}\n        r={r}\n      />\n    );\n  }\n\n  return null;\n};\n","import { createSelector } from 'reselect';\nimport { AppliedChartData, ChartData } from '../chartDataSlice';\nimport { RechartsRootState } from '../store';\nimport { AxisId, BaseCartesianAxis } from '../cartesianAxisSlice';\nimport { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';\nimport {\n  AppliedChartDataWithErrorDomain,\n  combineAppliedValues,\n  combineAxisDomain,\n  combineAxisDomainWithNiceTicks,\n  combineDisplayedData,\n  combineGraphicalItemsData,\n  combineGraphicalItemsSettings,\n  combineNiceTicks,\n  combineNumericalDomain,\n  itemAxisPredicate,\n  selectBaseAxis,\n  selectDomainDefinition,\n  selectRealScaleType,\n} from './axisSelectors';\nimport { PolarGraphicalItemSettings } from '../graphicalItemsSlice';\nimport { CategoricalDomain, NumberDomain } from '../../util/types';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { getValueByDataKey } from '../../util/ChartUtils';\nimport { pickAxisType } from './pickAxisType';\nimport { pickAxisId } from './pickAxisId';\nimport { selectStackOffsetType } from './rootPropsSelectors';\n\nexport type PolarAxisType = 'angleAxis' | 'radiusAxis';\n\nexport const selectUnfilteredPolarItems = (state: RechartsRootState) => state.graphicalItems.polarItems;\n\nconst selectAxisPredicate: (\n  _state: RechartsRootState,\n  axisType: PolarAxisType,\n  axisId: AxisId,\n) => (item: PolarGraphicalItemSettings) => boolean = createSelector([pickAxisType, pickAxisId], itemAxisPredicate);\n\nexport const selectPolarItemsSettings: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  polarAxisId: AxisId,\n) => ReadonlyArray<PolarGraphicalItemSettings> = createSelector(\n  [selectUnfilteredPolarItems, selectBaseAxis, selectAxisPredicate],\n  combineGraphicalItemsSettings,\n);\n\nconst selectPolarGraphicalItemsData: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  polarAxisId: AxisId,\n) => ChartData = createSelector([selectPolarItemsSettings], combineGraphicalItemsData);\n\nexport const selectPolarDisplayedData: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  polarAxisId: AxisId,\n) => ChartData | undefined = createSelector(\n  [selectPolarGraphicalItemsData, selectChartDataAndAlwaysIgnoreIndexes],\n  combineDisplayedData,\n);\n\nexport const selectPolarAppliedValues: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  axisId: AxisId,\n) => AppliedChartData = createSelector(\n  [selectPolarDisplayedData, selectBaseAxis, selectPolarItemsSettings],\n  combineAppliedValues,\n);\n\nexport const selectAllPolarAppliedNumericalValues: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  axisId: AxisId,\n) => ReadonlyArray<AppliedChartDataWithErrorDomain> = createSelector(\n  [selectPolarDisplayedData, selectBaseAxis, selectPolarItemsSettings],\n  (\n    data: ChartData,\n    axisSettings: BaseCartesianAxis,\n    items: ReadonlyArray<PolarGraphicalItemSettings>,\n  ): ReadonlyArray<AppliedChartDataWithErrorDomain> => {\n    if (items.length > 0) {\n      return data\n        .flatMap(entry => {\n          return items.flatMap((item): AppliedChartDataWithErrorDomain | undefined => {\n            const valueByDataKey: unknown = getValueByDataKey(entry, axisSettings.dataKey ?? item.dataKey);\n            return {\n              value: valueByDataKey,\n              errorDomain: [], // polar charts do not have error bars\n            };\n          });\n        })\n        .filter(Boolean);\n    }\n    if (axisSettings?.dataKey != null) {\n      return data.map(\n        (item): AppliedChartDataWithErrorDomain => ({\n          value: getValueByDataKey(item, axisSettings.dataKey),\n          errorDomain: [],\n        }),\n      );\n    }\n    return data.map((entry): AppliedChartDataWithErrorDomain => ({ value: entry, errorDomain: [] }));\n  },\n);\n\nconst unsupportedInPolarChart = (): undefined => undefined;\n\nconst selectPolarNumericalDomain: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  axisId: AxisId,\n) => NumberDomain | undefined = createSelector(\n  [\n    selectBaseAxis,\n    selectDomainDefinition,\n    unsupportedInPolarChart,\n    selectAllPolarAppliedNumericalValues,\n    unsupportedInPolarChart,\n    selectChartLayout,\n    pickAxisType,\n  ],\n  combineNumericalDomain,\n);\n\nexport const selectPolarAxisDomain: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  polarAxisId: AxisId,\n) => NumberDomain | CategoricalDomain | undefined = createSelector(\n  [\n    selectBaseAxis,\n    selectChartLayout,\n    selectPolarDisplayedData,\n    selectPolarAppliedValues,\n    selectStackOffsetType,\n    pickAxisType,\n    selectPolarNumericalDomain,\n  ],\n  combineAxisDomain,\n);\n\nexport const selectPolarNiceTicks = createSelector(\n  [selectPolarAxisDomain, selectBaseAxis, selectRealScaleType],\n  combineNiceTicks,\n);\n\nexport const selectPolarAxisDomainIncludingNiceTicks: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  polarAxisId: AxisId,\n) => NumberDomain | CategoricalDomain | undefined = createSelector(\n  [selectBaseAxis, selectPolarAxisDomain, selectPolarNiceTicks, pickAxisType],\n  combineAxisDomainWithNiceTicks,\n);\n","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport { AxisId } from '../cartesianAxisSlice';\nimport { RechartsScale } from '../../util/ChartUtils';\nimport {\n  combineAxisTicks,\n  combineCategoricalDomain,\n  combineGraphicalItemTicks,\n  combineScaleFunction,\n  selectAxisSettings,\n  selectDuplicateDomain,\n  selectRealScaleType,\n} from './axisSelectors';\nimport {\n  selectAngleAxis,\n  selectAngleAxisRangeWithReversed,\n  selectRadiusAxis,\n  selectRadiusAxisRangeWithReversed,\n} from './polarAxisSelectors';\nimport { CartesianTickItem } from '../../util/types';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport {\n  selectPolarAppliedValues,\n  selectPolarAxisDomainIncludingNiceTicks,\n  selectPolarNiceTicks,\n} from './polarSelectors';\nimport { pickAxisType } from './pickAxisType';\n\nexport const selectPolarAxis = (state: RechartsRootState, axisType: 'angleAxis' | 'radiusAxis', axisId: AxisId) => {\n  switch (axisType) {\n    case 'angleAxis': {\n      return selectAngleAxis(state, axisId);\n    }\n    case 'radiusAxis': {\n      return selectRadiusAxis(state, axisId);\n    }\n    default: {\n      throw new Error(`Unexpected axis type: ${axisType}`);\n    }\n  }\n};\n\nconst selectPolarAxisRangeWithReversed = (\n  state: RechartsRootState,\n  axisType: 'angleAxis' | 'radiusAxis',\n  axisId: AxisId,\n) => {\n  switch (axisType) {\n    case 'angleAxis': {\n      return selectAngleAxisRangeWithReversed(state, axisId);\n    }\n    case 'radiusAxis': {\n      return selectRadiusAxisRangeWithReversed(state, axisId);\n    }\n    default: {\n      throw new Error(`Unexpected axis type: ${axisType}`);\n    }\n  }\n};\n\nexport const selectPolarAxisScale: (\n  state: RechartsRootState,\n  axisType: 'angleAxis' | 'radiusAxis',\n  polarAxisId: AxisId,\n) => RechartsScale | undefined = createSelector(\n  [selectPolarAxis, selectRealScaleType, selectPolarAxisDomainIncludingNiceTicks, selectPolarAxisRangeWithReversed],\n  combineScaleFunction,\n);\n\nexport const selectPolarCategoricalDomain: (\n  state: RechartsRootState,\n  axisType: 'angleAxis' | 'radiusAxis',\n  polarAxisId: AxisId,\n) => ReadonlyArray<unknown> | undefined = createSelector(\n  [selectChartLayout, selectPolarAppliedValues, selectAxisSettings, pickAxisType],\n  combineCategoricalDomain,\n);\n\nexport const selectPolarAxisTicks: (\n  state: RechartsRootState,\n  axisType: 'angleAxis' | 'radiusAxis',\n  polarAxisId: AxisId,\n  isPanorama: boolean,\n) => ReadonlyArray<CartesianTickItem> | undefined = createSelector(\n  [\n    selectChartLayout,\n    selectPolarAxis,\n    selectRealScaleType,\n    selectPolarAxisScale,\n    selectPolarNiceTicks,\n    selectPolarAxisRangeWithReversed,\n    selectDuplicateDomain,\n    selectPolarCategoricalDomain,\n    pickAxisType,\n  ],\n  combineAxisTicks,\n);\n\nexport const selectPolarGraphicalItemAxisTicks: (\n  state: RechartsRootState,\n  axisType: 'angleAxis' | 'radiusAxis',\n  polarAxisId: AxisId,\n  isPanorama: boolean,\n) => ReadonlyArray<CartesianTickItem> | undefined = createSelector(\n  [\n    selectChartLayout,\n    selectPolarAxis,\n    selectPolarAxisScale,\n    selectPolarAxisRangeWithReversed,\n    selectDuplicateDomain,\n    selectPolarCategoricalDomain,\n    pickAxisType,\n  ],\n  combineGraphicalItemTicks,\n);\n","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport { AxisId } from '../cartesianAxisSlice';\nimport { selectPolarAxisTicks } from './polarScaleSelectors';\nimport { CartesianTickItem } from '../../util/types';\n\nexport type PolarAngles = Array<number>;\n\nexport type PolarRadius = Array<number>;\n\nconst selectAngleAxisTicks = (state: RechartsRootState, anglexisId: AxisId) =>\n  selectPolarAxisTicks(state, 'angleAxis', anglexisId, false);\n\nexport const selectPolarGridAngles: (state: RechartsRootState, angleAxisId: AxisId) => PolarAngles | undefined =\n  createSelector(\n    [selectAngleAxisTicks],\n    (ticks: ReadonlyArray<CartesianTickItem> | undefined): PolarAngles | undefined => {\n      if (!ticks) {\n        return undefined;\n      }\n\n      return ticks.map(tick => tick.coordinate);\n    },\n  );\n\nconst selectRadiusAxisTicks = (state: RechartsRootState, radiusAxisId: AxisId) =>\n  selectPolarAxisTicks(state, 'radiusAxis', radiusAxisId, false);\n\nexport const selectPolarGridRadii: (state: RechartsRootState, radiusAxisId: AxisId) => PolarRadius | undefined =\n  createSelector(\n    [selectRadiusAxisTicks],\n    (ticks: ReadonlyArray<CartesianTickItem> | undefined): PolarRadius | undefined => {\n      if (!ticks) {\n        return undefined;\n      }\n\n      return ticks.map(tick => tick.coordinate);\n    },\n  );\n","import { clsx } from 'clsx';\nimport * as React from 'react';\nimport { SVGProps } from 'react';\nimport { polarToCartesian } from '../util/PolarUtils';\nimport { AxisId } from '../state/cartesianAxisSlice';\nimport { useAppSelector } from '../state/hooks';\nimport { selectPolarGridAngles, selectPolarGridRadii } from '../state/selectors/polarGridSelectors';\nimport { selectPolarViewBox } from '../state/selectors/polarAxisSelectors';\nimport { PolarViewBox } from '../util/types';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\n\ninterface PolarGridProps {\n  cx?: number;\n  cy?: number;\n  innerRadius?: number;\n  outerRadius?: number;\n  polarAngles?: number[];\n  polarRadius?: number[];\n  gridType?: 'polygon' | 'circle';\n  radialLines?: boolean;\n  angleAxisId?: AxisId;\n  radiusAxisId?: AxisId;\n}\n\nexport type Props = SVGProps<SVGLineElement> & PolarGridProps;\n\ntype ConcentricProps = Props & {\n  // The radius of circle\n  radius: number;\n  // The index of circle\n  index: number;\n};\n\nconst getPolygonPath = (radius: number, cx: number, cy: number, polarAngles: number[]) => {\n  let path = '';\n\n  polarAngles.forEach((angle: number, i: number) => {\n    const point = polarToCartesian(cx, cy, radius, angle);\n\n    if (i) {\n      path += `L ${point.x},${point.y}`;\n    } else {\n      path += `M ${point.x},${point.y}`;\n    }\n  });\n  path += 'Z';\n\n  return path;\n};\n\n// Draw axis of radial line\nconst PolarAngles: React.FC<Props> = props => {\n  const { cx, cy, innerRadius, outerRadius, polarAngles, radialLines } = props;\n\n  if (!polarAngles || !polarAngles.length || !radialLines) {\n    return null;\n  }\n  const polarAnglesProps = {\n    stroke: '#ccc',\n    ...svgPropertiesNoEvents(props),\n  };\n\n  return (\n    <g className=\"recharts-polar-grid-angle\">\n      {polarAngles.map(entry => {\n        const start = polarToCartesian(cx, cy, innerRadius, entry);\n        const end = polarToCartesian(cx, cy, outerRadius, entry);\n\n        return <line {...polarAnglesProps} key={`line-${entry}`} x1={start.x} y1={start.y} x2={end.x} y2={end.y} />;\n      })}\n    </g>\n  );\n};\n\n// Draw concentric circles\nconst ConcentricCircle: React.FC<ConcentricProps> = props => {\n  const { cx, cy, radius, index } = props;\n  const concentricCircleProps = {\n    stroke: '#ccc',\n    ...svgPropertiesNoEvents(props),\n    fill: 'none',\n  };\n\n  return (\n    // @ts-expect-error wrong SVG element type\n    <circle\n      {...concentricCircleProps}\n      className={clsx('recharts-polar-grid-concentric-circle', props.className)}\n      key={`circle-${index}`}\n      cx={cx}\n      cy={cy}\n      r={radius}\n    />\n  );\n};\n\n// Draw concentric polygons\nconst ConcentricPolygon: React.FC<ConcentricProps> = props => {\n  const { radius, index } = props;\n  const concentricPolygonProps = {\n    stroke: '#ccc',\n    ...svgPropertiesNoEvents(props),\n    fill: 'none',\n  };\n\n  return (\n    <path\n      {...concentricPolygonProps}\n      className={clsx('recharts-polar-grid-concentric-polygon', props.className)}\n      key={`path-${index}`}\n      d={getPolygonPath(radius, props.cx, props.cy, props.polarAngles)}\n    />\n  );\n};\n\n// Draw concentric axis\nconst ConcentricGridPath: React.FC<Props> = props => {\n  const { polarRadius, gridType } = props;\n\n  if (!polarRadius || !polarRadius.length) {\n    return null;\n  }\n\n  return (\n    <g className=\"recharts-polar-grid-concentric\">\n      {polarRadius.map((entry: number, i: number) => {\n        const key = i;\n        if (gridType === 'circle') return <ConcentricCircle key={key} {...props} radius={entry} index={i} />;\n        return <ConcentricPolygon key={key} {...props} radius={entry} index={i} />;\n      })}\n    </g>\n  );\n};\n\nexport const PolarGrid = ({\n  gridType = 'polygon',\n  radialLines = true,\n  angleAxisId = 0,\n  radiusAxisId = 0,\n  cx: cxFromOutside,\n  cy: cyFromOutside,\n  innerRadius: innerRadiusFromOutside,\n  outerRadius: outerRadiusFromOutside,\n  ...inputs\n}: Props) => {\n  const polarViewBox: PolarViewBox | undefined = useAppSelector(selectPolarViewBox);\n\n  const props = {\n    cx: polarViewBox?.cx ?? cxFromOutside ?? 0,\n    cy: polarViewBox?.cy ?? cyFromOutside ?? 0,\n    innerRadius: polarViewBox?.innerRadius ?? innerRadiusFromOutside ?? 0,\n    outerRadius: polarViewBox?.outerRadius ?? outerRadiusFromOutside ?? 0,\n    ...inputs,\n  };\n\n  const { polarAngles: polarAnglesInput, polarRadius: polarRadiusInput, cx, cy, innerRadius, outerRadius } = props;\n\n  const polarAnglesFromRedux = useAppSelector(state => selectPolarGridAngles(state, angleAxisId));\n  const polarRadiiFromRedux = useAppSelector(state => selectPolarGridRadii(state, radiusAxisId));\n\n  const polarAngles = Array.isArray(polarAnglesInput) ? polarAnglesInput : polarAnglesFromRedux;\n  const polarRadius = Array.isArray(polarRadiusInput) ? polarRadiusInput : polarRadiiFromRedux;\n\n  if (outerRadius <= 0 || polarAngles == null || polarRadius == null) {\n    return null;\n  }\n\n  return (\n    <g className=\"recharts-polar-grid\">\n      <PolarAngles\n        cx={cx}\n        cy={cy}\n        innerRadius={innerRadius}\n        outerRadius={outerRadius}\n        gridType={gridType}\n        radialLines={radialLines}\n        {...props}\n        polarAngles={polarAngles}\n        polarRadius={polarRadius}\n      />\n      <ConcentricGridPath\n        cx={cx}\n        cy={cy}\n        innerRadius={innerRadius}\n        outerRadius={outerRadius}\n        gridType={gridType}\n        radialLines={radialLines}\n        {...props}\n        polarAngles={polarAngles}\n        polarRadius={polarRadius}\n      />\n    </g>\n  );\n};\n\nPolarGrid.displayName = 'PolarGrid';\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\nimport { AxisId, BaseCartesianAxis, TicksSettings } from './cartesianAxisSlice';\n\nexport type RadiusAxisSettings = BaseCartesianAxis & TicksSettings;\n\nexport type AngleAxisSettings = BaseCartesianAxis & TicksSettings;\n\ntype PolarAxisState = {\n  radiusAxis: Record<AxisId, RadiusAxisSettings>;\n  angleAxis: Record<AxisId, AngleAxisSettings>;\n};\n\nconst initialState: PolarAxisState = {\n  radiusAxis: {},\n  angleAxis: {},\n};\n\nconst polarAxisSlice = createSlice({\n  name: 'polarAxis',\n  initialState,\n  reducers: {\n    addRadiusAxis(state, action: PayloadAction<RadiusAxisSettings>) {\n      state.radiusAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeRadiusAxis(state, action: PayloadAction<RadiusAxisSettings>) {\n      delete state.radiusAxis[action.payload.id];\n    },\n    addAngleAxis(state, action: PayloadAction<AngleAxisSettings>) {\n      state.angleAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeAngleAxis(state, action: PayloadAction<AngleAxisSettings>) {\n      delete state.angleAxis[action.payload.id];\n    },\n  },\n});\n\nexport const { addRadiusAxis, removeRadiusAxis, addAngleAxis, removeAngleAxis } = polarAxisSlice.actions;\n\nexport const polarAxisReducer = polarAxisSlice.reducer;\n","import * as React from 'react';\nimport { FunctionComponent, PureComponent, ReactElement, useEffect } from 'react';\nimport maxBy from 'es-toolkit/compat/maxBy';\nimport minBy from 'es-toolkit/compat/minBy';\n\nimport { clsx } from 'clsx';\nimport { Text } from '../component/Text';\nimport { Label } from '../component/Label';\nimport { Layer } from '../container/Layer';\nimport { getTickClassName, polarToCartesian } from '../util/PolarUtils';\nimport {\n  adaptEventsOfChild,\n  BaseAxisProps,\n  Coordinate,\n  PresentationAttributesAdaptChildEvent,\n  TickItem,\n} from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { addRadiusAxis, RadiusAxisSettings, removeRadiusAxis } from '../state/polarAxisSlice';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { selectPolarAxisScale, selectPolarAxisTicks } from '../state/selectors/polarScaleSelectors';\nimport { selectPolarViewBox } from '../state/selectors/polarAxisSelectors';\nimport { defaultPolarRadiusAxisProps } from './defaultPolarRadiusAxisProps';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\n\ntype PolarRadiusViewBox = {\n  cx: number;\n  cy: number;\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n};\n\ntype TickOrientation = 'left' | 'right' | 'middle';\n\nexport interface PolarRadiusAxisProps extends Omit<BaseAxisProps, 'unit'> {\n  cx?: number;\n  cy?: number;\n  radiusAxisId?: string | number;\n  angle?: number;\n  orientation?: TickOrientation;\n  ticks?: ReadonlyArray<TickItem>;\n  reversed?: boolean;\n}\n\ntype AxisSvgProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGTextElement>, 'scale' | 'type'>;\n\nexport type Props = AxisSvgProps & PolarRadiusAxisProps;\n\nconst AXIS_TYPE = 'radiusAxis';\n\nfunction SetRadiusAxisSettings(settings: RadiusAxisSettings): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(addRadiusAxis(settings));\n    return () => {\n      dispatch(removeRadiusAxis(settings));\n    };\n  });\n  return null;\n}\n\n/**\n * Calculate the coordinate of tick\n * @param coordinate The radius of tick\n * @param angle from props\n * @param cx from chart\n * @param cy from chart\n * @return (x, y)\n */\nconst getTickValueCoord = ({ coordinate }: TickItem, angle: number, cx: number, cy: number): Coordinate => {\n  return polarToCartesian(cx, cy, coordinate, angle);\n};\n\nconst getTickTextAnchor = (orientation: TickOrientation): string => {\n  let textAnchor;\n\n  switch (orientation) {\n    case 'left':\n      textAnchor = 'end';\n      break;\n    case 'right':\n      textAnchor = 'start';\n      break;\n    default:\n      textAnchor = 'middle';\n      break;\n  }\n\n  return textAnchor;\n};\n\nconst getViewBox = (angle: number, cx: number, cy: number, ticks: ReadonlyArray<TickItem>): PolarRadiusViewBox => {\n  const maxRadiusTick = maxBy(ticks, (entry: TickItem) => entry.coordinate || 0);\n  const minRadiusTick = minBy(ticks, (entry: TickItem) => entry.coordinate || 0);\n\n  return {\n    cx,\n    cy,\n    startAngle: angle,\n    endAngle: angle,\n    innerRadius: minRadiusTick.coordinate || 0,\n    outerRadius: maxRadiusTick.coordinate || 0,\n  };\n};\n\nconst renderAxisLine = (props: Props, ticks: ReadonlyArray<TickItem>): ReactElement => {\n  const { cx, cy, angle, axisLine, ...others } = props;\n  const extent = ticks.reduce(\n    (result, entry) => [Math.min(result[0], entry.coordinate), Math.max(result[1], entry.coordinate)],\n    [Infinity, -Infinity],\n  );\n  const point0 = polarToCartesian(cx, cy, extent[0], angle);\n  const point1 = polarToCartesian(cx, cy, extent[1], angle);\n\n  const axisLineProps = {\n    ...svgPropertiesNoEvents(others),\n    fill: 'none',\n    ...filterProps(axisLine, false),\n    x1: point0.x,\n    y1: point0.y,\n    x2: point1.x,\n    y2: point1.y,\n  };\n\n  // @ts-expect-error wrong SVG element type\n  return <line className=\"recharts-polar-radius-axis-line\" {...axisLineProps} />;\n};\n\nconst renderTickItem = (option: Props['tick'], tickProps: any, value: string | number): ReactElement => {\n  let tickItem;\n\n  if (React.isValidElement(option)) {\n    tickItem = React.cloneElement(option, tickProps);\n  } else if (typeof option === 'function') {\n    tickItem = option(tickProps);\n  } else {\n    tickItem = (\n      <Text {...tickProps} className=\"recharts-polar-radius-axis-tick-value\">\n        {value}\n      </Text>\n    );\n  }\n\n  return tickItem;\n};\n\nconst renderTicks = (props: Props, ticks: ReadonlyArray<TickItem>): ReactElement => {\n  const { angle, tickFormatter, stroke, tick, ...others } = props;\n  const textAnchor = getTickTextAnchor(props.orientation);\n  const axisProps = svgPropertiesNoEvents(others);\n  const customTickProps = filterProps(tick, false);\n\n  const items = ticks.map((entry, i) => {\n    const coord = getTickValueCoord(entry, props.angle, props.cx, props.cy);\n    const tickProps = {\n      textAnchor,\n      transform: `rotate(${90 - angle}, ${coord.x}, ${coord.y})`,\n      ...axisProps,\n      stroke: 'none',\n      fill: stroke,\n      ...customTickProps,\n      index: i,\n      ...coord,\n      payload: entry,\n    };\n\n    return (\n      <Layer\n        className={clsx('recharts-polar-radius-axis-tick', getTickClassName(tick))}\n        key={`tick-${entry.coordinate}`}\n        {...adaptEventsOfChild(props, entry, i)}\n      >\n        {renderTickItem(tick, tickProps, tickFormatter ? tickFormatter(entry.value, i) : entry.value)}\n      </Layer>\n    );\n  });\n\n  return <Layer className=\"recharts-polar-radius-axis-ticks\">{items}</Layer>;\n};\n\nexport const PolarRadiusAxisWrapper: FunctionComponent<Props> = (defaultsAndInputs: Props) => {\n  const { radiusAxisId } = defaultsAndInputs;\n\n  const viewBox = useAppSelector(selectPolarViewBox);\n  const scale = useAppSelector(state => selectPolarAxisScale(state, 'radiusAxis', radiusAxisId));\n  const ticks = useAppSelector(state => selectPolarAxisTicks(state, 'radiusAxis', radiusAxisId, false));\n\n  if (viewBox == null || !ticks || !ticks.length) {\n    return null;\n  }\n\n  const props: Props = {\n    ...defaultsAndInputs,\n    scale,\n    ...viewBox,\n    radius: viewBox.outerRadius,\n  };\n\n  const { tick, axisLine } = props;\n\n  return (\n    <Layer className={clsx('recharts-polar-radius-axis', AXIS_TYPE, props.className)}>\n      {axisLine && renderAxisLine(props, ticks)}\n      {tick && renderTicks(props, ticks)}\n      {Label.renderCallByParent(props, getViewBox(props.angle, props.cx, props.cy, ticks))}\n    </Layer>\n  );\n};\n\nexport class PolarRadiusAxis extends PureComponent<Props> {\n  static displayName = 'PolarRadiusAxis';\n\n  static axisType = AXIS_TYPE;\n\n  static defaultProps = defaultPolarRadiusAxisProps;\n\n  render() {\n    return (\n      <>\n        <SetRadiusAxisSettings\n          domain={this.props.domain}\n          id={this.props.radiusAxisId}\n          scale={this.props.scale}\n          type={this.props.type}\n          dataKey={this.props.dataKey}\n          unit={undefined}\n          name={this.props.name}\n          allowDuplicatedCategory={this.props.allowDuplicatedCategory}\n          allowDataOverflow={this.props.allowDataOverflow}\n          reversed={this.props.reversed}\n          includeHidden={this.props.includeHidden}\n          allowDecimals={this.props.allowDecimals}\n          tickCount={this.props.tickCount}\n          // @ts-expect-error the type does not match. Is RadiusAxis really expecting what it says?\n          ticks={this.props.ticks}\n          tick={this.props.tick}\n        />\n        <PolarRadiusAxisWrapper {...this.props} />\n      </>\n    );\n  }\n}\n","import * as React from 'react';\nimport { FunctionComponent, PureComponent, ReactElement, ReactNode, SVGProps, useEffect, useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { Layer } from '../container/Layer';\nimport { Dot } from '../shape/Dot';\nimport { Polygon } from '../shape/Polygon';\nimport { Text, Props as TextProps, TextAnchor } from '../component/Text';\nimport {\n  adaptEventsOfChild,\n  AxisDomain,\n  DataKey,\n  PresentationAttributesAdaptChildEvent,\n  ScaleType,\n  TickItem,\n} from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { getTickClassName, polarToCartesian } from '../util/PolarUtils';\nimport { RechartsScale } from '../util/ChartUtils';\nimport { addAngleAxis, AngleAxisSettings, removeAngleAxis } from '../state/polarAxisSlice';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { selectPolarAxisScale, selectPolarAxisTicks } from '../state/selectors/polarScaleSelectors';\nimport { selectAngleAxis, selectPolarViewBox } from '../state/selectors/polarAxisSelectors';\nimport { defaultPolarAngleAxisProps } from './defaultPolarAngleAxisProps';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\n\nconst RADIAN = Math.PI / 180;\nconst eps = 1e-5;\n\n/**\n * These are injected from Redux, are required, but cannot be set by user.\n */\ninterface PropsInjectedFromRedux {\n  cx?: number;\n  cy?: number;\n  radius?: number;\n}\n\nexport interface PolarAngleAxisProps extends PropsInjectedFromRedux {\n  allowDecimals?: boolean;\n  domain?: AxisDomain;\n  allowDuplicatedCategory?: boolean;\n  angleAxisId?: string | number;\n  axisLineType?: 'polygon' | 'circle';\n  ticks?: ReadonlyArray<TickItem>;\n  orientation?: 'inner' | 'outer';\n  axisLine?: boolean | SVGProps<SVGLineElement>;\n  tickSize?: number;\n  tickCount?: number;\n  tickLine?: boolean | SVGProps<SVGLineElement>;\n  tickFormatter?: (value: any, index: number) => string;\n  reversed: boolean;\n  dataKey?: DataKey<any>;\n  tick?:\n    | SVGProps<SVGTextElement>\n    | ReactElement<SVGElement>\n    | ((props: TickItemTextProps) => ReactElement<SVGElement>)\n    | boolean;\n  scale: ScaleType | RechartsScale;\n  type?: 'category' | 'number'; // so there is code that checks if angleAxis.type is number, but it actually never behaves as a number\n}\n\ntype AxisSvgProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGTextElement>, 'scale' | 'type'>;\n\nexport type Props = AxisSvgProps & PolarAngleAxisProps;\n\nconst AXIS_TYPE = 'angleAxis';\n\ntype AngleAxisSettingsReporter = AngleAxisSettings & { children: ReactNode };\n\nfunction SetAngleAxisSettings(props: AngleAxisSettingsReporter): ReactNode {\n  const dispatch = useAppDispatch();\n  const settings = useMemo(() => {\n    const { children, ...rest } = props;\n    return rest;\n  }, [props]);\n  const synchronizedSettings = useAppSelector(state => selectAngleAxis(state, settings.id));\n  const settingsAreSynchronized = settings === synchronizedSettings;\n  useEffect(() => {\n    dispatch(addAngleAxis(settings));\n    return () => {\n      dispatch(removeAngleAxis(settings));\n    };\n  }, [dispatch, settings]);\n\n  if (settingsAreSynchronized) {\n    return props.children;\n  }\n  return null;\n}\n\n/**\n * Calculate the coordinate of line endpoint\n * @param data The data if there are ticks\n * @param props axis settings\n * @return (x1, y1): The point close to text,\n *         (x2, y2): The point close to axis\n */\nconst getTickLineCoord = (\n  data: TickItem,\n  props: Props,\n): {\n  x1: number;\n  y1: number;\n  x2: number;\n  y2: number;\n} => {\n  const { cx, cy, radius, orientation, tickSize } = props;\n  const tickLineSize = tickSize || 8;\n  const p1 = polarToCartesian(cx, cy, radius, data.coordinate);\n  const p2 = polarToCartesian(cx, cy, radius + (orientation === 'inner' ? -1 : 1) * tickLineSize, data.coordinate);\n\n  return { x1: p1.x, y1: p1.y, x2: p2.x, y2: p2.y };\n};\n\n/**\n * Get the text-anchor of each tick\n * @param data Data of ticks\n * @param orientation of the axis ticks\n * @return text-anchor\n */\nconst getTickTextAnchor = (data: TickItem, orientation: Props['orientation']): TextAnchor => {\n  const cos = Math.cos(-data.coordinate * RADIAN);\n\n  if (cos > eps) {\n    return orientation === 'outer' ? 'start' : 'end';\n  }\n  if (cos < -eps) {\n    return orientation === 'outer' ? 'end' : 'start';\n  }\n  return 'middle';\n};\n\ntype PropsWithTicks = Props & { ticks: ReadonlyArray<TickItem> };\n\nconst AxisLine = (props: PropsWithTicks) => {\n  const { cx, cy, radius, axisLineType, axisLine, ticks } = props;\n  if (!axisLine) {\n    return null;\n  }\n  const axisLineProps = {\n    ...svgPropertiesNoEvents(props),\n    fill: 'none',\n    ...filterProps(axisLine, false),\n  };\n\n  if (axisLineType === 'circle') {\n    // @ts-expect-error wrong SVG element type\n    return <Dot className=\"recharts-polar-angle-axis-line\" {...axisLineProps} cx={cx} cy={cy} r={radius} />;\n  }\n  const points = ticks.map(entry => polarToCartesian(cx, cy, radius, entry.coordinate));\n\n  // @ts-expect-error wrong SVG element type\n  return <Polygon className=\"recharts-polar-angle-axis-line\" {...axisLineProps} points={points} />;\n};\n\ntype TickItemProps = {\n  tick: PolarAngleAxisProps['tick'];\n  tickProps: TickItemTextProps;\n  value: string | number;\n};\n\nexport type TickItemTextProps = TextProps & {\n  index: number;\n  payload: any;\n};\n\nconst TickItemText = ({ tick, tickProps, value }: TickItemProps): ReactElement => {\n  if (!tick) {\n    return null;\n  }\n  if (React.isValidElement(tick)) {\n    // @ts-expect-error element cloning makes typescript unhappy and me too\n    return React.cloneElement(tick, tickProps);\n  }\n  if (typeof tick === 'function') {\n    return tick(tickProps);\n  }\n  return (\n    <Text {...tickProps} className=\"recharts-polar-angle-axis-tick-value\">\n      {value}\n    </Text>\n  );\n};\n\nconst Ticks = (props: PropsWithTicks) => {\n  const { tick, tickLine, tickFormatter, stroke, ticks } = props;\n  const axisProps = svgPropertiesNoEvents(props);\n  const customTickProps = filterProps(tick, false);\n  const tickLineProps = {\n    ...axisProps,\n    fill: 'none',\n    ...filterProps(tickLine, false),\n  };\n\n  const items = ticks.map((entry, i) => {\n    const lineCoord = getTickLineCoord(entry, props);\n    const textAnchor: TextAnchor = getTickTextAnchor(entry, props.orientation);\n    const tickProps: TickItemTextProps = {\n      ...axisProps,\n      textAnchor,\n      stroke: 'none',\n      fill: stroke,\n      ...customTickProps,\n      index: i,\n      payload: entry,\n      x: lineCoord.x2,\n      y: lineCoord.y2,\n    };\n\n    return (\n      <Layer\n        className={clsx('recharts-polar-angle-axis-tick', getTickClassName(tick))}\n        key={`tick-${entry.coordinate}`}\n        {...adaptEventsOfChild(props, entry, i)}\n      >\n        {/* @ts-expect-error we're passing recharts internal `scale` prop in place of SVG scale prop */}\n        {tickLine && <line className=\"recharts-polar-angle-axis-tick-line\" {...tickLineProps} {...lineCoord} />}\n        <TickItemText\n          tick={tick}\n          tickProps={tickProps}\n          value={tickFormatter ? tickFormatter(entry.value, i) : entry.value}\n        />\n      </Layer>\n    );\n  });\n\n  return <Layer className=\"recharts-polar-angle-axis-ticks\">{items}</Layer>;\n};\n\nexport const PolarAngleAxisWrapper: FunctionComponent<Props> = defaultsAndInputs => {\n  const { angleAxisId } = defaultsAndInputs;\n\n  const viewBox = useAppSelector(selectPolarViewBox);\n  const scale = useAppSelector(state => selectPolarAxisScale(state, 'angleAxis', angleAxisId));\n  const isPanorama = useIsPanorama();\n  const ticks = useAppSelector(state => selectPolarAxisTicks(state, 'angleAxis', angleAxisId, isPanorama));\n\n  if (viewBox == null || !ticks || !ticks.length) {\n    return null;\n  }\n\n  const props: Props = {\n    ...defaultsAndInputs,\n    scale,\n    ...viewBox,\n    radius: viewBox.outerRadius,\n  };\n\n  return (\n    <Layer className={clsx('recharts-polar-angle-axis', AXIS_TYPE, props.className)}>\n      <AxisLine {...props} ticks={ticks} />\n      <Ticks {...props} ticks={ticks} />\n    </Layer>\n  );\n};\n\nexport class PolarAngleAxis extends PureComponent<Props> {\n  static displayName = 'PolarAngleAxis';\n\n  static axisType = AXIS_TYPE;\n\n  static defaultProps = defaultPolarAngleAxisProps;\n\n  render(): React.ReactNode {\n    if (this.props.radius <= 0) return null;\n\n    return (\n      <SetAngleAxisSettings\n        id={this.props.angleAxisId}\n        scale={this.props.scale}\n        type={this.props.type}\n        dataKey={this.props.dataKey}\n        unit={undefined}\n        name={this.props.name}\n        allowDuplicatedCategory={false} // Ignoring the prop on purpose because axis calculation behaves as if it was false and Tooltip requires it to be true.\n        allowDataOverflow={false}\n        reversed={this.props.reversed}\n        includeHidden={false}\n        allowDecimals={this.props.allowDecimals}\n        tickCount={this.props.tickCount}\n        // @ts-expect-error the type does not match. Is RadiusAxis really expecting what it says?\n        ticks={this.props.ticks}\n        tick={this.props.tick}\n        domain={this.props.domain}\n      >\n        <PolarAngleAxisWrapper {...this.props} />\n      </SetAngleAxisSettings>\n    );\n  }\n}\n","import { createSelector } from 'reselect';\nimport { ReactElement } from 'react';\nimport { CellProps } from '../..';\nimport { computePieSectors, PieSectorDataItem } from '../../polar/Pie';\nimport { RechartsRootState } from '../store';\nimport { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';\nimport { ChartData, ChartDataState } from '../chartDataSlice';\nimport { ChartOffsetInternal } from '../../util/types';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport type { LegendPayload } from '../../component/DefaultLegendContent';\nimport { getTooltipNameProp, getValueByDataKey } from '../../util/ChartUtils';\nimport { selectUnfilteredPolarItems } from './polarSelectors';\nimport { PieSettings } from '../types/PieSettings';\nimport { GraphicalItemId } from '../graphicalItemsSlice';\n\nconst pickId = (_state: RechartsRootState, id: GraphicalItemId): GraphicalItemId => id;\n\nconst selectSynchronisedPieSettings: (state: RechartsRootState, id: GraphicalItemId) => PieSettings | undefined =\n  createSelector([selectUnfilteredPolarItems, pickId], (graphicalItems, id) =>\n    graphicalItems.filter(item => item.type === 'pie').find(item => item.id === id),\n  );\n\n// Keep stable reference to an empty array to prevent re-renders\nconst emptyArray: ReadonlyArray<ReactElement> = [];\nconst pickCells = (\n  _state: RechartsRootState,\n  _id: GraphicalItemId,\n  cells: ReadonlyArray<ReactElement> | undefined,\n): ReadonlyArray<ReactElement> | undefined => {\n  if (cells?.length === 0) {\n    return emptyArray;\n  }\n  return cells;\n};\n\nexport const selectDisplayedData: (\n  state: RechartsRootState,\n  id: GraphicalItemId,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => ChartData | undefined = createSelector(\n  [selectChartDataAndAlwaysIgnoreIndexes, selectSynchronisedPieSettings, pickCells],\n  ({ chartData }: ChartDataState, pieSettings: PieSettings | undefined, cells): ChartData | undefined => {\n    if (pieSettings == null) {\n      return undefined;\n    }\n    let displayedData: ChartData | undefined;\n    if (pieSettings?.data != null && pieSettings.data.length > 0) {\n      displayedData = pieSettings.data;\n    } else {\n      displayedData = chartData;\n    }\n\n    if ((!displayedData || !displayedData.length) && cells != null) {\n      displayedData = cells.map((cell: ReactElement<CellProps>) => ({\n        ...pieSettings.presentationProps,\n        ...cell.props,\n      }));\n    }\n\n    if (displayedData == null) {\n      return undefined;\n    }\n\n    return displayedData;\n  },\n);\n\nexport const selectPieLegend: (\n  state: RechartsRootState,\n  id: GraphicalItemId,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => ReadonlyArray<LegendPayload> | undefined = createSelector(\n  [selectDisplayedData, selectSynchronisedPieSettings, pickCells],\n  (\n    displayedData: ChartData | undefined,\n    pieSettings: PieSettings | undefined,\n    cells: ReadonlyArray<ReactElement>,\n  ): ReadonlyArray<LegendPayload> | undefined => {\n    if (displayedData == null || pieSettings == null) {\n      return undefined;\n    }\n    return displayedData.map((entry, i): LegendPayload => {\n      const name = getValueByDataKey(entry, pieSettings.nameKey, pieSettings.name);\n      let color;\n      if (cells?.[i]?.props?.fill) {\n        color = cells[i].props.fill;\n      } else if (typeof entry === 'object' && entry != null && 'fill' in entry) {\n        color = entry.fill;\n      } else {\n        color = pieSettings.fill;\n      }\n      return {\n        value: getTooltipNameProp(name, pieSettings.dataKey),\n        color,\n        payload: entry,\n        type: pieSettings.legendType,\n      };\n    });\n  },\n);\n\nexport const selectPieSectors: (\n  state: RechartsRootState,\n  id: GraphicalItemId,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => Readonly<PieSectorDataItem[]> | undefined = createSelector(\n  [selectDisplayedData, selectSynchronisedPieSettings, pickCells, selectChartOffsetInternal],\n  (\n    displayedData: ChartData | undefined,\n    pieSettings: PieSettings,\n    cells,\n    offset: ChartOffsetInternal,\n  ): Readonly<PieSectorDataItem[]> | undefined => {\n    if (pieSettings == null || displayedData == null) {\n      return undefined;\n    }\n    return computePieSectors({\n      offset,\n      pieSettings,\n      displayedData,\n      cells,\n    });\n  },\n);\n","import * as React from 'react';\nimport { MutableRefObject, ReactElement, ReactNode, SVGProps, useCallback, useMemo, useRef, useState } from 'react';\nimport get from 'es-toolkit/compat/get';\n\nimport { clsx } from 'clsx';\nimport { selectPieLegend, selectPieSectors } from '../state/selectors/pieSelectors';\nimport { useAppSelector } from '../state/hooks';\nimport { Layer } from '../container/Layer';\nimport { Props as SectorProps } from '../shape/Sector';\nimport { Curve } from '../shape/Curve';\nimport { Text } from '../component/Text';\nimport { Cell } from '../component/Cell';\nimport { filterProps, findAllByType } from '../util/ReactUtils';\nimport { Global } from '../util/Global';\nimport { getMaxRadius, polarToCartesian } from '../util/PolarUtils';\nimport { getPercentValue, interpolateNumber, isNumber, mathSign } from '../util/DataUtils';\nimport { getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';\nimport {\n  ActiveShape,\n  adaptEventsOfChild,\n  AnimationDuration,\n  AnimationTiming,\n  ChartOffsetInternal,\n  Coordinate,\n  DataKey,\n  GeometrySector,\n  LegendType,\n  PresentationAttributesAdaptChildEvent,\n  TooltipType,\n} from '../util/types';\nimport { Shape } from '../util/ActiveShapeUtils';\nimport {\n  useMouseClickItemDispatch,\n  useMouseEnterItemDispatch,\n  useMouseLeaveItemDispatch,\n} from '../context/tooltipContext';\nimport { TooltipPayload, TooltipPayloadConfiguration } from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';\nimport { SetPolarLegendPayload } from '../state/SetLegendPayload';\nimport { DATA_ITEM_DATAKEY_ATTRIBUTE_NAME, DATA_ITEM_INDEX_ATTRIBUTE_NAME } from '../util/Constants';\nimport { useAnimationId } from '../util/useAnimationId';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';\nimport { SetPolarGraphicalItem } from '../state/SetGraphicalItem';\nimport { PieSettings } from '../state/types/PieSettings';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { JavascriptAnimate } from '../animation/JavascriptAnimate';\n\ninterface PieDef {\n  /** The abscissa of pole in polar coordinate  */\n  cx?: number | string;\n  /** The ordinate of pole in polar coordinate  */\n  cy?: number | string;\n  /** The start angle of first sector */\n  startAngle?: number;\n  /** The end angle of last sector */\n  endAngle?: number;\n  paddingAngle?: number;\n  /** The inner radius of sectors */\n  innerRadius?: number | string;\n  /** The outer radius of sectors */\n  outerRadius?: number | string | ((dataPoint: any) => number);\n  cornerRadius?: number | string;\n}\n\ntype PieLabelLine =\n  | ReactElement<SVGElement>\n  | ((props: any) => ReactElement<SVGElement>)\n  | SVGProps<SVGPathElement>\n  | boolean;\n\nexport type PieLabelProps = PieSectorData &\n  GeometrySector & {\n    tooltipPayload?: any;\n  } & PieLabelRenderProps;\n\nexport type PieLabel<P extends PieLabelProps = PieLabelProps> =\n  | ReactElement<SVGElement>\n  | ((props: P) => ReactNode | ReactElement<SVGElement>)\n  | (SVGProps<SVGTextElement> & { offsetRadius?: number })\n  | boolean;\n\nexport type PieSectorData = {\n  percent?: number;\n  name?: string | number;\n  midAngle?: number;\n  middleRadius?: number;\n  tooltipPosition?: Coordinate;\n  value?: number;\n  paddingAngle?: number;\n  dataKey?: string;\n  payload?: any;\n  tooltipPayload?: ReadonlyArray<TooltipPayload>;\n};\n\nexport type PieSectorDataItem = SectorProps & PieSectorData;\n\n/**\n * Internal props, combination of external props + defaultProps + private Recharts state\n */\ninterface InternalPieProps extends PieDef {\n  id?: string;\n  className?: string;\n  dataKey: DataKey<any>;\n  nameKey?: DataKey<any>;\n  /** The minimum angle for no-zero element */\n  minAngle?: number;\n  legendType?: LegendType;\n  tooltipType?: TooltipType;\n  /** the max radius of pie */\n  maxRadius?: number;\n  hide?: boolean;\n  /** the input data */\n  data?: any[];\n  sectors?: ReadonlyArray<PieSectorDataItem>;\n  activeShape?: ActiveShape<PieSectorDataItem>;\n  inactiveShape?: ActiveShape<PieSectorDataItem>;\n  labelLine?: PieLabelLine;\n  label?: PieLabel;\n  animationEasing?: AnimationTiming;\n  isAnimationActive?: boolean;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  onAnimationStart?: () => void;\n  onAnimationEnd?: () => void;\n  onMouseEnter?: (data: any, index: number, e: React.MouseEvent) => void;\n  onMouseLeave?: (data: any, index: number, e: React.MouseEvent) => void;\n  onClick?: (data: any, index: number, e: React.MouseEvent) => void;\n  rootTabIndex?: number;\n}\n\ninterface PieProps extends PieDef {\n  id?: string;\n  className?: string;\n  /**\n   * Defaults to 'value' if not specified.\n   */\n  dataKey?: DataKey<any>;\n  nameKey?: DataKey<any>;\n  /** The minimum angle for no-zero element */\n  minAngle?: number;\n  legendType?: LegendType;\n  tooltipType?: TooltipType;\n  /** TODO: review this as an external prop - it seems to have no effect */\n  /** the max radius of pie */\n  maxRadius?: number;\n  hide?: boolean;\n  /** the input data */\n  data?: any[];\n  activeShape?: ActiveShape<PieSectorDataItem>;\n  inactiveShape?: ActiveShape<PieSectorDataItem>;\n  labelLine?: PieLabelLine;\n  label?: PieLabel;\n  animationEasing?: AnimationTiming;\n  isAnimationActive?: boolean;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  onAnimationStart?: () => void;\n  onAnimationEnd?: () => void;\n  onMouseEnter?: (data: any, index: number, e: React.MouseEvent) => void;\n  onMouseLeave?: (data: any, index: number, e: React.MouseEvent) => void;\n  onClick?: (data: any, index: number, e: React.MouseEvent) => void;\n  rootTabIndex?: number;\n}\n\nexport interface PieLabelRenderProps extends PieDef {\n  name: string;\n  percent?: number;\n  stroke: string;\n  index?: number;\n  textAnchor: string;\n  x: number;\n  y: number;\n  [key: string]: any;\n}\n\ntype PieSvgAttributes = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'ref'>;\n\ntype InternalProps = PieSvgAttributes & InternalPieProps;\n\nexport type Props = PieSvgAttributes & PieProps;\n\ntype RealPieData = any;\n\nexport type PieCoordinate = {\n  cx: number;\n  cy: number;\n  innerRadius: number;\n  outerRadius: number;\n  maxRadius: number;\n};\n\nfunction SetPiePayloadLegend(props: Props) {\n  const cells = useMemo(() => findAllByType(props.children, Cell), [props.children]);\n\n  const legendPayload = useAppSelector(state => selectPieLegend(state, props.id, cells));\n  if (legendPayload == null) {\n    return null;\n  }\n  return <SetPolarLegendPayload legendPayload={legendPayload} />;\n}\n\ntype PieSectorsProps = {\n  sectors: Readonly<PieSectorDataItem[]>;\n  activeShape: ActiveShape<Readonly<PieSectorDataItem>>;\n  inactiveShape: ActiveShape<Readonly<PieSectorDataItem>>;\n  allOtherPieProps: InternalProps;\n  showLabels: boolean;\n};\n\nfunction getTooltipEntrySettings(props: InternalProps): TooltipPayloadConfiguration {\n  const { dataKey, nameKey, sectors, stroke, strokeWidth, fill, name, hide, tooltipType } = props;\n  return {\n    dataDefinedOnItem: sectors?.map((p: PieSectorDataItem) => p.tooltipPayload),\n    positions: sectors?.map((p: PieSectorDataItem) => p.tooltipPosition),\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      dataKey,\n      nameKey,\n      name: getTooltipNameProp(name, dataKey),\n      hide,\n      type: tooltipType,\n      color: fill,\n      unit: '', // why doesn't Pie support unit?\n    },\n  };\n}\n\nconst getTextAnchor = (x: number, cx: number) => {\n  if (x > cx) {\n    return 'start';\n  }\n  if (x < cx) {\n    return 'end';\n  }\n\n  return 'middle';\n};\n\nconst getOuterRadius = (\n  dataPoint: any,\n  outerRadius?: number | string | ((element: any) => number),\n  maxPieRadius?: number,\n) => {\n  if (typeof outerRadius === 'function') {\n    return outerRadius(dataPoint);\n  }\n  return getPercentValue(outerRadius, maxPieRadius, maxPieRadius * 0.8);\n};\n\nconst parseCoordinateOfPie = (\n  item: {\n    cx?: number | string;\n    cy?: number | string;\n    innerRadius?: number | string;\n    outerRadius?: number | string | ((dataPoint: any) => number);\n    maxRadius?: number;\n  },\n  offset: ChartOffsetInternal,\n  dataPoint: any,\n): PieCoordinate => {\n  const { top, left, width, height } = offset;\n  const maxPieRadius = getMaxRadius(width, height);\n  const cx = left + getPercentValue(item.cx, width, width / 2);\n  const cy = top + getPercentValue(item.cy, height, height / 2);\n  const innerRadius = getPercentValue(item.innerRadius, maxPieRadius, 0);\n\n  const outerRadius = getOuterRadius(dataPoint, item.outerRadius, maxPieRadius);\n\n  const maxRadius = item.maxRadius || Math.sqrt(width * width + height * height) / 2;\n\n  return { cx, cy, innerRadius, outerRadius, maxRadius };\n};\n\nconst parseDeltaAngle = (startAngle: number, endAngle: number) => {\n  const sign = mathSign(endAngle - startAngle);\n  const deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);\n\n  return sign * deltaAngle;\n};\n\nconst renderLabelLineItem = (option: PieLabelLine, props: any) => {\n  if (React.isValidElement(option)) {\n    return React.cloneElement(option, props);\n  }\n  if (typeof option === 'function') {\n    return option(props);\n  }\n\n  const className = clsx('recharts-pie-label-line', typeof option !== 'boolean' ? option.className : '');\n  return <Curve {...props} type=\"linear\" className={className} />;\n};\n\nconst renderLabelItem = (option: PieLabel, props: any, value: any) => {\n  if (React.isValidElement(option)) {\n    return React.cloneElement(option, props);\n  }\n  let label = value;\n  if (typeof option === 'function') {\n    label = option(props);\n    if (React.isValidElement(label)) {\n      return label;\n    }\n  }\n\n  const className = clsx(\n    'recharts-pie-label-text',\n    typeof option !== 'boolean' && typeof option !== 'function' ? option.className : '',\n  );\n  return (\n    <Text {...props} alignmentBaseline=\"middle\" className={className}>\n      {label}\n    </Text>\n  );\n};\n\nfunction PieLabels({\n  sectors,\n  props,\n  showLabels,\n}: {\n  sectors: ReadonlyArray<PieSectorDataItem>;\n  props: InternalProps;\n  showLabels: boolean;\n}) {\n  const { label, labelLine, dataKey } = props;\n  if (!showLabels || !label || !sectors) {\n    return null;\n  }\n  const pieProps = svgPropertiesNoEvents(props);\n  const customLabelProps = filterProps(label, false);\n  const customLabelLineProps = filterProps(labelLine, false);\n  const offsetRadius = (typeof label === 'object' && 'offsetRadius' in label && label.offsetRadius) || 20;\n\n  const labels = sectors.map((entry, i) => {\n    const midAngle = (entry.startAngle + entry.endAngle) / 2;\n    const endPoint = polarToCartesian(entry.cx, entry.cy, entry.outerRadius + offsetRadius, midAngle);\n    const labelProps = {\n      ...pieProps,\n      ...entry,\n      stroke: 'none',\n      ...customLabelProps,\n      index: i,\n      textAnchor: getTextAnchor(endPoint.x, entry.cx),\n      ...endPoint,\n    };\n    const lineProps = {\n      ...pieProps,\n      ...entry,\n      fill: 'none',\n      stroke: entry.fill,\n      ...customLabelLineProps,\n      index: i,\n      points: [polarToCartesian(entry.cx, entry.cy, entry.outerRadius, midAngle), endPoint],\n      key: 'line',\n    };\n\n    return (\n      // eslint-disable-next-line react/no-array-index-key\n      <Layer key={`label-${entry.startAngle}-${entry.endAngle}-${entry.midAngle}-${i}`}>\n        {labelLine && renderLabelLineItem(labelLine, lineProps)}\n        {renderLabelItem(label, labelProps, getValueByDataKey(entry, dataKey))}\n      </Layer>\n    );\n  });\n\n  return <Layer className=\"recharts-pie-labels\">{labels}</Layer>;\n}\n\nfunction PieSectors(props: PieSectorsProps) {\n  const { sectors, activeShape, inactiveShape: inactiveShapeProp, allOtherPieProps, showLabels } = props;\n\n  const activeIndex = useAppSelector(selectActiveTooltipIndex);\n  const {\n    onMouseEnter: onMouseEnterFromProps,\n    onClick: onItemClickFromProps,\n    onMouseLeave: onMouseLeaveFromProps,\n    ...restOfAllOtherProps\n  } = allOtherPieProps;\n\n  const onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherPieProps.dataKey);\n  const onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);\n  const onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherPieProps.dataKey);\n\n  if (sectors == null) {\n    return null;\n  }\n\n  return (\n    <>\n      {sectors.map((entry, i) => {\n        if (entry?.startAngle === 0 && entry?.endAngle === 0 && sectors.length !== 1) return null;\n        const isSectorActive = activeShape && String(i) === activeIndex;\n        const inactiveShape = activeIndex ? inactiveShapeProp : null;\n        const sectorOptions = isSectorActive ? activeShape : inactiveShape;\n        const sectorProps = {\n          ...entry,\n          stroke: entry.stroke,\n          tabIndex: -1,\n          [DATA_ITEM_INDEX_ATTRIBUTE_NAME]: i,\n          [DATA_ITEM_DATAKEY_ATTRIBUTE_NAME]: allOtherPieProps.dataKey,\n        };\n\n        return (\n          <Layer\n            tabIndex={-1}\n            className=\"recharts-pie-sector\"\n            {...adaptEventsOfChild(restOfAllOtherProps, entry, i)}\n            // @ts-expect-error the types need a bit of attention\n            onMouseEnter={onMouseEnterFromContext(entry, i)}\n            // @ts-expect-error the types need a bit of attention\n            onMouseLeave={onMouseLeaveFromContext(entry, i)}\n            // @ts-expect-error the types need a bit of attention\n            onClick={onClickFromContext(entry, i)}\n            // eslint-disable-next-line react/no-array-index-key\n            key={`sector-${entry?.startAngle}-${entry?.endAngle}-${entry.midAngle}-${i}`}\n          >\n            <Shape option={sectorOptions} isActive={isSectorActive} shapeType=\"sector\" {...sectorProps} />\n          </Layer>\n        );\n      })}\n      <PieLabels sectors={sectors} props={allOtherPieProps} showLabels={showLabels} />\n    </>\n  );\n}\n\nexport function computePieSectors({\n  pieSettings,\n  displayedData,\n  cells,\n  offset,\n}: {\n  displayedData: ReadonlyArray<RealPieData>;\n  cells: ReadonlyArray<ReactElement> | undefined;\n  pieSettings: PieSettings;\n  offset: ChartOffsetInternal;\n}): ReadonlyArray<PieSectorDataItem> {\n  const { cornerRadius, startAngle, endAngle, dataKey, nameKey, tooltipType } = pieSettings;\n  const minAngle = Math.abs(pieSettings.minAngle);\n  const deltaAngle = parseDeltaAngle(startAngle, endAngle);\n  const absDeltaAngle = Math.abs(deltaAngle);\n  const paddingAngle = displayedData.length <= 1 ? 0 : (pieSettings.paddingAngle ?? 0);\n\n  const notZeroItemCount = displayedData.filter(entry => getValueByDataKey(entry, dataKey, 0) !== 0).length;\n  const totalPaddingAngle = (absDeltaAngle >= 360 ? notZeroItemCount : notZeroItemCount - 1) * paddingAngle;\n  const realTotalAngle = absDeltaAngle - notZeroItemCount * minAngle - totalPaddingAngle;\n\n  const sum = displayedData.reduce((result: number, entry: any) => {\n    const val = getValueByDataKey(entry, dataKey, 0);\n    return result + (isNumber(val) ? val : 0);\n  }, 0);\n  let sectors;\n\n  if (sum > 0) {\n    let prev: PieSectorDataItem;\n    sectors = displayedData.map((entry: any, i: number) => {\n      const val = getValueByDataKey(entry, dataKey, 0);\n      const name = getValueByDataKey(entry, nameKey, i);\n      const coordinate = parseCoordinateOfPie(pieSettings, offset, entry);\n      const percent = (isNumber(val) ? val : 0) / sum;\n      let tempStartAngle;\n\n      const entryWithCellInfo = { ...entry, ...(cells && cells[i] && cells[i].props) };\n\n      if (i) {\n        tempStartAngle = prev.endAngle + mathSign(deltaAngle) * paddingAngle * (val !== 0 ? 1 : 0);\n      } else {\n        tempStartAngle = startAngle;\n      }\n\n      const tempEndAngle =\n        tempStartAngle + mathSign(deltaAngle) * ((val !== 0 ? minAngle : 0) + percent * realTotalAngle);\n      const midAngle = (tempStartAngle + tempEndAngle) / 2;\n      const middleRadius = (coordinate.innerRadius + coordinate.outerRadius) / 2;\n\n      const tooltipPayload: TooltipPayload = [\n        {\n          // @ts-expect-error getValueByDataKey does not validate the output type\n          name,\n          // @ts-expect-error getValueByDataKey does not validate the output type\n          value: val,\n          payload: entryWithCellInfo,\n          dataKey,\n          type: tooltipType,\n        },\n      ];\n      const tooltipPosition = polarToCartesian(coordinate.cx, coordinate.cy, middleRadius, midAngle);\n\n      prev = {\n        ...pieSettings.presentationProps,\n        percent,\n        cornerRadius,\n        name,\n        tooltipPayload,\n        midAngle,\n        middleRadius,\n        tooltipPosition,\n        ...entryWithCellInfo,\n        ...coordinate,\n        value: getValueByDataKey(entry, dataKey),\n        startAngle: tempStartAngle,\n        endAngle: tempEndAngle,\n        payload: entryWithCellInfo,\n        paddingAngle: mathSign(deltaAngle) * paddingAngle,\n      };\n      return prev;\n    });\n  }\n  return sectors;\n}\n\nfunction SectorsWithAnimation({\n  props,\n  previousSectorsRef,\n}: {\n  props: InternalProps;\n  previousSectorsRef: MutableRefObject<ReadonlyArray<PieSectorDataItem> | null>;\n}) {\n  const {\n    sectors,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    activeShape,\n    inactiveShape,\n    onAnimationStart,\n    onAnimationEnd,\n  } = props;\n  const animationId = useAnimationId(props, 'recharts-pie-');\n\n  const prevSectors = previousSectorsRef.current;\n\n  const [isAnimating, setIsAnimating] = useState(true);\n\n  const handleAnimationEnd = useCallback(() => {\n    if (typeof onAnimationEnd === 'function') {\n      onAnimationEnd();\n    }\n    setIsAnimating(false);\n  }, [onAnimationEnd]);\n\n  const handleAnimationStart = useCallback(() => {\n    if (typeof onAnimationStart === 'function') {\n      onAnimationStart();\n    }\n    setIsAnimating(true);\n  }, [onAnimationStart]);\n  return (\n    <JavascriptAnimate\n      begin={animationBegin}\n      duration={animationDuration}\n      isActive={isAnimationActive}\n      easing={animationEasing}\n      onAnimationStart={handleAnimationStart}\n      onAnimationEnd={handleAnimationEnd}\n      key={animationId}\n    >\n      {(t: number) => {\n        const stepData: PieSectorDataItem[] = [];\n        const first = sectors && sectors[0];\n        let curAngle = first.startAngle;\n\n        sectors.forEach((entry, index) => {\n          const prev = prevSectors && prevSectors[index];\n          const paddingAngle = index > 0 ? get(entry, 'paddingAngle', 0) : 0;\n\n          if (prev) {\n            const angleIp = interpolateNumber(prev.endAngle - prev.startAngle, entry.endAngle - entry.startAngle);\n            const latest = {\n              ...entry,\n              startAngle: curAngle + paddingAngle,\n              endAngle: curAngle + angleIp(t) + paddingAngle,\n            };\n\n            stepData.push(latest);\n            curAngle = latest.endAngle;\n          } else {\n            const { endAngle, startAngle } = entry;\n            const interpolatorAngle = interpolateNumber(0, endAngle - startAngle);\n            const deltaAngle = interpolatorAngle(t);\n            const latest = {\n              ...entry,\n              startAngle: curAngle + paddingAngle,\n              endAngle: curAngle + deltaAngle + paddingAngle,\n            };\n\n            stepData.push(latest);\n            curAngle = latest.endAngle;\n          }\n        });\n\n        // eslint-disable-next-line no-param-reassign\n        previousSectorsRef.current = stepData;\n        return (\n          <Layer>\n            <PieSectors\n              sectors={stepData}\n              activeShape={activeShape}\n              inactiveShape={inactiveShape}\n              allOtherPieProps={props}\n              showLabels={!isAnimating}\n            />\n          </Layer>\n        );\n      }}\n    </JavascriptAnimate>\n  );\n}\n\nfunction RenderSectors(props: InternalProps) {\n  const { sectors, isAnimationActive, activeShape, inactiveShape } = props;\n\n  const previousSectorsRef = useRef<ReadonlyArray<PieSectorDataItem> | null>(null);\n  const prevSectors = previousSectorsRef.current;\n\n  if (isAnimationActive && sectors && sectors.length && (!prevSectors || prevSectors !== sectors)) {\n    return <SectorsWithAnimation props={props} previousSectorsRef={previousSectorsRef} />;\n  }\n\n  return (\n    <PieSectors\n      sectors={sectors}\n      activeShape={activeShape}\n      inactiveShape={inactiveShape}\n      allOtherPieProps={props}\n      showLabels\n    />\n  );\n}\n\nfunction PieWithTouchMove(props: InternalProps) {\n  const { hide, className, rootTabIndex } = props;\n\n  const layerClass = clsx('recharts-pie', className);\n\n  if (hide) {\n    return null;\n  }\n\n  return (\n    <Layer tabIndex={rootTabIndex} className={layerClass}>\n      <RenderSectors {...props} />\n    </Layer>\n  );\n}\n\nconst defaultPieProps = {\n  animationBegin: 400,\n  animationDuration: 1500,\n  animationEasing: 'ease',\n  cx: '50%',\n  cy: '50%',\n  dataKey: 'value',\n  endAngle: 360,\n  fill: '#808080',\n  hide: false,\n  innerRadius: 0,\n  isAnimationActive: !Global.isSsr,\n  labelLine: true,\n  legendType: 'rect',\n  minAngle: 0,\n  nameKey: 'name',\n  outerRadius: '80%',\n  paddingAngle: 0,\n  rootTabIndex: 0,\n  startAngle: 0,\n  stroke: '#fff',\n} as const satisfies Partial<Props>;\n\nfunction PieImpl(props: InternalProps) {\n  const { id, ...propsWithoutId } = props;\n\n  const cells = useMemo(() => findAllByType(props.children, Cell), [props.children]);\n\n  const sectors = useAppSelector(state => selectPieSectors(state, id, cells));\n\n  return (\n    <>\n      <SetTooltipEntrySettings fn={getTooltipEntrySettings} args={{ ...props, sectors }} />\n      <PieWithTouchMove {...propsWithoutId} sectors={sectors} />\n    </>\n  );\n}\n\nexport function Pie(outsideProps: Props) {\n  const { id: externalId, ...propsWithoutId } = resolveDefaultProps(outsideProps, defaultPieProps);\n  const presentationProps = svgPropertiesNoEvents(propsWithoutId);\n\n  return (\n    <RegisterGraphicalItemId id={externalId} type=\"pie\">\n      {id => (\n        <>\n          <SetPolarGraphicalItem\n            type=\"pie\"\n            id={id}\n            data={propsWithoutId.data}\n            dataKey={propsWithoutId.dataKey}\n            hide={propsWithoutId.hide}\n            angleAxisId={0}\n            radiusAxisId={0}\n            name={propsWithoutId.name}\n            nameKey={propsWithoutId.nameKey}\n            tooltipType={propsWithoutId.tooltipType}\n            legendType={propsWithoutId.legendType}\n            fill={propsWithoutId.fill}\n            cx={propsWithoutId.cx}\n            cy={propsWithoutId.cy}\n            startAngle={propsWithoutId.startAngle}\n            endAngle={propsWithoutId.endAngle}\n            paddingAngle={propsWithoutId.paddingAngle}\n            minAngle={propsWithoutId.minAngle}\n            innerRadius={propsWithoutId.innerRadius}\n            outerRadius={propsWithoutId.outerRadius}\n            cornerRadius={propsWithoutId.cornerRadius}\n            // @ts-expect-error we're passing DataKey and other internals as presentationProps\n            presentationProps={presentationProps}\n          />\n          <SetPiePayloadLegend {...propsWithoutId} id={id} />\n          <PieImpl {...propsWithoutId} id={id} />\n          {propsWithoutId.children}\n        </>\n      )}\n    </RegisterGraphicalItemId>\n  );\n}\nPie.displayName = 'Pie';\n","/**\n * @fileOverview Rectangle\n */\nimport * as React from 'react';\nimport { SVGProps, useEffect, useRef, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { AnimationDuration, AnimationTiming } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { Animate } from '../animation/Animate';\n\nconst getTrapezoidPath = (x: number, y: number, upperWidth: number, lowerWidth: number, height: number): string => {\n  const widthGap = upperWidth - lowerWidth;\n  let path;\n  path = `M ${x},${y}`;\n  path += `L ${x + upperWidth},${y}`;\n  path += `L ${x + upperWidth - widthGap / 2},${y + height}`;\n  path += `L ${x + upperWidth - widthGap / 2 - lowerWidth},${y + height}`;\n  path += `L ${x},${y} Z`;\n  return path;\n};\n\ninterface TrapezoidProps {\n  className?: string;\n  x?: number;\n  y?: number;\n  upperWidth?: number;\n  lowerWidth?: number;\n  height?: number;\n\n  isUpdateAnimationActive?: boolean;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n}\n\nexport type Props = SVGProps<SVGPathElement> & TrapezoidProps;\n\nconst defaultProps = {\n  x: 0,\n  y: 0,\n  upperWidth: 0,\n  lowerWidth: 0,\n  height: 0,\n  isUpdateAnimationActive: false,\n  animationBegin: 0,\n  animationDuration: 1500,\n  animationEasing: 'ease',\n} as const satisfies Partial<Props>;\n\nexport const Trapezoid: React.FC<Props> = props => {\n  const trapezoidProps = resolveDefaultProps(props, defaultProps);\n\n  const pathRef = useRef<SVGPathElement>();\n  const [totalLength, setTotalLength] = useState(-1);\n\n  useEffect(() => {\n    if (pathRef.current && pathRef.current.getTotalLength) {\n      try {\n        const pathTotalLength = pathRef.current.getTotalLength();\n\n        if (pathTotalLength) {\n          setTotalLength(pathTotalLength);\n        }\n      } catch {\n        // calculate total length error\n      }\n    }\n  }, []);\n\n  const { x, y, upperWidth, lowerWidth, height, className } = trapezoidProps;\n  const { animationEasing, animationDuration, animationBegin, isUpdateAnimationActive } = trapezoidProps;\n\n  if (\n    x !== +x ||\n    y !== +y ||\n    upperWidth !== +upperWidth ||\n    lowerWidth !== +lowerWidth ||\n    height !== +height ||\n    (upperWidth === 0 && lowerWidth === 0) ||\n    height === 0\n  ) {\n    return null;\n  }\n\n  const layerClass = clsx('recharts-trapezoid', className);\n\n  if (!isUpdateAnimationActive) {\n    return (\n      <g>\n        <path\n          {...filterProps(trapezoidProps, true)}\n          className={layerClass}\n          d={getTrapezoidPath(x, y, upperWidth, lowerWidth, height)}\n        />\n      </g>\n    );\n  }\n  return (\n    <Animate\n      canBegin={totalLength > 0}\n      from={{ upperWidth: 0, lowerWidth: 0, height, x, y }}\n      to={{ upperWidth, lowerWidth, height, x, y }}\n      duration={animationDuration}\n      // @ts-expect-error TODO - fix the type error\n      animationEasing={animationEasing}\n      isActive={isUpdateAnimationActive}\n    >\n      {({\n        upperWidth: currUpperWidth,\n        lowerWidth: currLowerWidth,\n        height: currHeight,\n        x: currX,\n        y: currY,\n      }: {\n        upperWidth: number;\n        lowerWidth: number;\n        height: number;\n        x: number;\n        y: number;\n      }) => (\n        <Animate\n          canBegin={totalLength > 0}\n          // @ts-expect-error TODO - fix the type error\n          from={`0px ${totalLength === -1 ? 1 : totalLength}px`}\n          // @ts-expect-error TODO - fix the type error\n          to={`${totalLength}px 0px`}\n          attributeName=\"strokeDasharray\"\n          begin={animationBegin}\n          duration={animationDuration}\n          easing={animationEasing}\n        >\n          <path\n            {...filterProps(trapezoidProps, true)}\n            className={layerClass}\n            d={getTrapezoidPath(currX, currY, currUpperWidth, currLowerWidth, currHeight)}\n            ref={pathRef}\n          />\n        </Animate>\n      )}\n    </Animate>\n  );\n};\n","import * as React from 'react';\nimport { cloneElement, isValidElement, SVGProps } from 'react';\nimport isPlainObject from 'es-toolkit/compat/isPlainObject';\n\nimport { Rectangle } from '../shape/Rectangle';\nimport { Trapezoid } from '../shape/Trapezoid';\nimport { Sector } from '../shape/Sector';\nimport { Layer } from '../container/Layer';\nimport { Symbols, SymbolsProps } from '../shape/Symbols';\n\n/**\n * This is an abstraction for rendering a user defined prop for a customized shape in several forms.\n *\n * <Shape /> is the root and will handle taking in:\n *  - an object of svg properties\n *  - a boolean\n *  - a render prop(inline function that returns jsx)\n *  - a React element\n *\n * <ShapeSelector /> is a subcomponent of <Shape /> and used to match a component\n * to the value of props.shapeType that is passed to the root.\n *\n */\ntype ShapeType = 'trapezoid' | 'rectangle' | 'sector' | 'symbols';\n\nexport type ShapeProps<OptionType, ExtraProps, ShapePropsType> = {\n  shapeType: ShapeType;\n  option: OptionType;\n  isActive?: boolean;\n  activeClassName?: string;\n  propTransformer?: (option: OptionType, props: unknown) => ShapePropsType;\n} & ExtraProps;\n\nfunction defaultPropTransformer<OptionType, ExtraProps, ShapePropsType>(option: OptionType, props: ExtraProps) {\n  return {\n    ...props,\n    ...option,\n  } as unknown as ShapePropsType;\n}\n\nfunction isSymbolsProps(shapeType: ShapeType, _elementProps: unknown): _elementProps is SymbolsProps {\n  return shapeType === 'symbols';\n}\n\nfunction ShapeSelector<ShapePropsType extends React.JSX.IntrinsicAttributes>({\n  shapeType,\n  elementProps,\n}: {\n  shapeType: ShapeType;\n  elementProps: ShapePropsType;\n}): React.ReactNode {\n  switch (shapeType) {\n    case 'rectangle':\n      return <Rectangle {...elementProps} />;\n    case 'trapezoid':\n      return <Trapezoid {...elementProps} />;\n    case 'sector':\n      return <Sector {...elementProps} />;\n    case 'symbols':\n      if (isSymbolsProps(shapeType, elementProps)) {\n        return <Symbols {...elementProps} />;\n      }\n      break;\n    default:\n      return null;\n  }\n}\n\nexport function getPropsFromShapeOption(option: unknown): SVGProps<SVGPathElement> {\n  if (isValidElement(option)) {\n    return option.props;\n  }\n\n  return option;\n}\n\nexport function Shape<OptionType, ExtraProps, ShapePropsType extends React.JSX.IntrinsicAttributes>({\n  option,\n  shapeType,\n  propTransformer = defaultPropTransformer,\n  activeClassName = 'recharts-active-shape',\n  isActive,\n  ...props\n}: ShapeProps<OptionType, ExtraProps, ShapePropsType>) {\n  let shape: React.JSX.Element;\n\n  if (isValidElement(option)) {\n    shape = cloneElement(option, { ...props, ...getPropsFromShapeOption(option) });\n  } else if (typeof option === 'function') {\n    shape = option(props);\n  } else if (isPlainObject(option) && typeof option !== 'boolean') {\n    const nextProps = propTransformer(option, props);\n    shape = <ShapeSelector<ShapePropsType> shapeType={shapeType} elementProps={nextProps} />;\n  } else {\n    const elementProps = props as unknown as ShapePropsType;\n    shape = <ShapeSelector<ShapePropsType> shapeType={shapeType} elementProps={elementProps} />;\n  }\n\n  if (isActive) {\n    return <Layer className={activeClassName}>{shape}</Layer>;\n  }\n\n  return shape;\n}\n","import * as React from 'react';\nimport { Coordinate, DataKey } from '../util/types';\nimport { useAppDispatch } from '../state/hooks';\nimport { mouseLeaveItem, setActiveClickItemIndex, setActiveMouseOverItemIndex } from '../state/tooltipSlice';\n\nexport type TooltipPayloadType = any[];\n\ntype TooltipTriggerInfo<T extends TooltipPayloadType> = {\n  tooltipPayload: T;\n  tooltipPosition: Coordinate;\n  cx: number;\n  cy: number;\n};\n\nexport type ActivateTooltipAction<T extends TooltipPayloadType> = (\n  tooltipInfo: TooltipTriggerInfo<T>,\n  index: number,\n  event: React.MouseEvent<SVGElement>,\n) => void;\n\nexport const useMouseEnterItemDispatch = <T extends TooltipPayloadType>(\n  onMouseEnterFromProps: ActivateTooltipAction<T> | undefined,\n  dataKey: DataKey<any>,\n) => {\n  const dispatch = useAppDispatch();\n  return (data: TooltipTriggerInfo<T>, index: number) => (event: React.MouseEvent<SVGElement>) => {\n    onMouseEnterFromProps?.(data, index, event);\n    dispatch(\n      setActiveMouseOverItemIndex({\n        activeIndex: String(index),\n        activeDataKey: dataKey,\n        activeCoordinate: data.tooltipPosition,\n      }),\n    );\n  };\n};\n\nexport const useMouseLeaveItemDispatch = <T extends TooltipPayloadType>(\n  onMouseLeaveFromProps: undefined | ActivateTooltipAction<T>,\n) => {\n  const dispatch = useAppDispatch();\n  return (data: TooltipTriggerInfo<T>, index: number) => (event: React.MouseEvent<SVGElement>) => {\n    onMouseLeaveFromProps?.(data, index, event);\n    dispatch(mouseLeaveItem());\n  };\n};\n\nexport const useMouseClickItemDispatch = <T extends TooltipPayloadType>(\n  onMouseClickFromProps: ActivateTooltipAction<T> | undefined,\n  dataKey: DataKey<any>,\n) => {\n  const dispatch = useAppDispatch();\n  return (data: TooltipTriggerInfo<T>, index: number) => (event: React.MouseEvent<SVGElement>) => {\n    onMouseClickFromProps?.(data, index, event);\n    dispatch(\n      setActiveClickItemIndex({\n        activeIndex: String(index),\n        activeDataKey: dataKey,\n        activeCoordinate: data.tooltipPosition,\n      }),\n    );\n  };\n};\n","import { useEffect } from 'react';\nimport { useAppDispatch } from './hooks';\nimport { addTooltipEntrySettings, removeTooltipEntrySettings, TooltipPayloadConfiguration } from './tooltipSlice';\nimport { useIsPanorama } from '../context/PanoramaContext';\n\ntype SetTooltipEntrySettingsProps<T> = {\n  args: T;\n  fn: (input: T) => TooltipPayloadConfiguration;\n};\n\nexport function SetTooltipEntrySettings<T>({ fn, args }: SetTooltipEntrySettingsProps<T>): null {\n  const dispatch = useAppDispatch();\n  const isPanorama = useIsPanorama();\n  useEffect(() => {\n    if (isPanorama) {\n      // Panorama graphical items should never contribute to Tooltip payload.\n      return undefined;\n    }\n    const tooltipEntrySettings: TooltipPayloadConfiguration = fn(args);\n    dispatch(addTooltipEntrySettings(tooltipEntrySettings));\n    return () => {\n      dispatch(removeTooltipEntrySettings(tooltipEntrySettings));\n    };\n  }, [fn, args, dispatch, isPanorama]);\n  return null;\n}\n","import { useEffect } from 'react';\nimport type { LegendPayload } from '../component/DefaultLegendContent';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { selectChartLayout } from '../context/chartLayoutContext';\nimport { useAppDispatch, useAppSelector } from './hooks';\nimport { addLegendPayload, removeLegendPayload } from './legendSlice';\n\nconst noop = () => {};\n\nexport function SetLegendPayload({ legendPayload }: { legendPayload: ReadonlyArray<LegendPayload> }): null {\n  const dispatch = useAppDispatch();\n  const isPanorama = useIsPanorama();\n  useEffect(() => {\n    if (isPanorama) {\n      return noop;\n    }\n    dispatch(addLegendPayload(legendPayload));\n    return () => {\n      dispatch(removeLegendPayload(legendPayload));\n    };\n  }, [dispatch, isPanorama, legendPayload]);\n  return null;\n}\n\nexport function SetPolarLegendPayload({ legendPayload }: { legendPayload: ReadonlyArray<LegendPayload> }): null {\n  const dispatch = useAppDispatch();\n  const layout = useAppSelector(selectChartLayout);\n  useEffect(() => {\n    if (layout !== 'centric' && layout !== 'radial') {\n      return noop;\n    }\n    dispatch(addLegendPayload(legendPayload));\n    return () => {\n      dispatch(removeLegendPayload(legendPayload));\n    };\n  }, [dispatch, layout, legendPayload]);\n  return null;\n}\n","import { useRef } from 'react';\nimport { uniqueId } from './DataUtils';\n\n/**\n * This hook returns a unique animation id for the object input.\n * If input changes (as in, reference equality is different), the animation id will change.\n * If input does not change, the animation id will not change.\n *\n * This is useful for animations. The Animate component\n * does have a `shouldReAnimate` prop but that doesn't seem to be doing what the name implies.\n * Also, we don't always want to re-animate on every render;\n * we only want to re-animate when the input changes. Not the internal state (e.g. `isAnimating`).\n *\n * @param input The object to check for changes. Uses reference equality (=== operator)\n * @param prefix Optional prefix to use for the animation id\n * @returns A unique animation id\n */\nexport function useAnimationId(input: unknown, prefix: string = 'animation-'): string {\n  const animationId = useRef<string>(uniqueId(prefix));\n  const prevProps = useRef<unknown>(input);\n\n  if (prevProps.current !== input) {\n    animationId.current = uniqueId(prefix);\n    prevProps.current = input;\n  }\n\n  return animationId.current;\n}\n","import * as React from 'react';\nimport { uniqueId } from './DataUtils';\n\n/**\n * Fallback for React.useId() for versions prior to React 18.\n * Generates a unique ID using a simple counter and a prefix.\n *\n * @returns A unique ID that remains consistent across renders.\n */\nexport const useIdFallback = (): string => {\n  const [id] = React.useState(() => uniqueId('uid-'));\n  return id;\n};\n\n/*\n * This weird syntax is used to avoid a build-time error in React 17 and earlier when building with Webpack.\n * See https://github.com/webpack/webpack/issues/14814\n */\nexport const useId: () => string = ((React as any)['useId'.toString()] as () => string) ?? useIdFallback;\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { useUniqueId } from '../util/useUniqueId';\nimport { GraphicalItemId } from '../state/graphicalItemsSlice';\n\nexport type IdSetter = {\n  id?: string;\n  type: string;\n  /**\n   * Children must be a function that receives the resolved ID of the graphical item.\n   * This ID will either be the one provided via props.id or generated automatically.\n   */\n  children: (id: GraphicalItemId) => React.ReactNode;\n};\n\nconst GraphicalItemIdContext = createContext<GraphicalItemId | undefined>(undefined);\n\nexport const RegisterGraphicalItemId = ({ id, type, children }: IdSetter) => {\n  const resolvedId = useUniqueId(`recharts-${type}`, id);\n  return <GraphicalItemIdContext.Provider value={resolvedId}>{children(resolvedId)}</GraphicalItemIdContext.Provider>;\n};\n\nexport function useGraphicalItemId(): GraphicalItemId | undefined {\n  return useContext(GraphicalItemIdContext);\n}\n","import { useId } from './useId';\n\n/**\n * A hook that generates a unique ID. It uses React.useId() in React 18+ for SSR safety\n * and falls back to a client-side-only unique ID generator for older versions.\n *\n * The ID will stay the same across renders, and you can optionally provide a prefix.\n *\n * @param [prefix] - An optional prefix for the generated ID.\n * @param [customId] - An optional custom ID to override the generated one.\n * @returns The unique ID.\n */\nexport function useUniqueId(prefix?: string, customId?: string): string {\n  /*\n   * We have to call this hook here even if we don't use the result because\n   * rules of hooks demand that hooks are never called conditionally.\n   */\n  const generatedId = useId();\n\n  // If a custom ID is provided, it always takes precedence.\n  if (customId) {\n    return customId;\n  }\n\n  // Apply the prefix if one was provided.\n  return prefix ? `${prefix}-${generatedId}` : generatedId;\n}\n\n/**\n * The useUniqueId hook returns a unique ID that is either reused from external props or generated internally.\n * Either way the ID is now guaranteed to be present so no more nulls or undefined.\n */\nexport type WithIdRequired<T> = T & {\n  id: string;\n};\n\nexport type WithoutId<T> = Omit<T, 'id'>;\n","import { createSlice, current, PayloadAction } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\nimport { ChartData } from './chartDataSlice';\nimport { AxisId } from './cartesianAxisSlice';\nimport { DataKey } from '../util/types';\nimport { LineSettings } from './types/LineSettings';\nimport { ScatterSettings } from './types/ScatterSettings';\nimport { AreaSettings } from './types/AreaSettings';\nimport { BarSettings } from './types/BarSettings';\nimport { RadialBarSettings } from './types/RadialBarSettings';\nimport { PieSettings } from './types/PieSettings';\nimport { RadarSettings } from './types/RadarSettings';\n\n/**\n * Unique ID of the graphical item.\n * This is used to identify the graphical item in the state and in the React tree.\n * This is required for every graphical item - it's either provided by the user or generated automatically.\n */\nexport type GraphicalItemId = string;\n\nexport type CartesianGraphicalItemType = 'area' | 'bar' | 'line' | 'scatter';\nexport type PolarGraphicalItemType = 'pie' | 'radar' | 'radialBar';\n\nexport interface GraphicalItemSettings {\n  /**\n   * Unique ID of the graphical item.\n   * This is used to identify the graphical item in the state and in the React tree.\n   * This is required for every graphical item - it's either provided by the user or generated automatically.\n   */\n  id: GraphicalItemId;\n  /**\n   * If the given graphical item has its own data array, it will appear here.\n   * If this is undefined, the data will be taken from the chart root prop.\n   */\n  data: ChartData | undefined;\n  dataKey: DataKey<any> | undefined;\n  /**\n   * Why not just stop pushing the graphical items to state when they are hidden?\n   * Well some components decide to continue showing them anyway.\n   * Legend for example will keep showing a record for hidden graphical items.\n   * Stacks for example will ignore them.\n   */\n  hide: boolean;\n}\n\nexport interface BaseCartesianGraphicalItemSettings extends GraphicalItemSettings {\n  /**\n   * Each of the graphical items explicitly says which axis it uses;\n   * this property is optional for users but every graphical item must have a default,\n   * and it is required here.\n   */\n  xAxisId: AxisId;\n  yAxisId: AxisId;\n  zAxisId: AxisId;\n  /**\n   * Graphical items that are inside Brush panorama should not interact with the main area graphical items\n   * and vice versa.\n   */\n  isPanorama: boolean;\n}\n\nexport type CartesianGraphicalItemSettings = AreaSettings | BarSettings | LineSettings | ScatterSettings;\n\nexport interface BasePolarGraphicalItemSettings extends GraphicalItemSettings {\n  angleAxisId: AxisId;\n  radiusAxisId: AxisId;\n}\n\nexport type PolarGraphicalItemSettings = PieSettings | RadarSettings | RadialBarSettings;\n\nexport type GraphicalItemsState = {\n  /**\n   * This is an array of all cartesian graphical items and their settings.\n   * Graphical item is a visual representation of data on the chart.\n   * Some examples are: Line, Bar.\n   *\n   * The order is arbitrary; do not expect that indexes here will be the same as indexes elsewhere.\n   */\n  cartesianItems: ReadonlyArray<CartesianGraphicalItemSettings>;\n  /**\n   * This is an array of all polar graphical items and their settings.\n   * Graphical item is a visual representation of data on the chart.\n   * Some examples are: Pie, Radar, RadialBar\n   *\n   * The order is arbitrary; do not expect that indexes here will be the same as indexes elsewhere.\n   */\n  polarItems: ReadonlyArray<PolarGraphicalItemSettings>;\n};\n\nconst initialState: GraphicalItemsState = {\n  cartesianItems: [],\n  polarItems: [],\n};\n\ntype ReplacePayload<T> = {\n  prev: T;\n  next: T;\n};\n\nconst graphicalItemsSlice = createSlice({\n  name: 'graphicalItems',\n  initialState,\n  reducers: {\n    addCartesianGraphicalItem(state, action: PayloadAction<CartesianGraphicalItemSettings>) {\n      state.cartesianItems.push(castDraft(action.payload));\n    },\n    replaceCartesianGraphicalItem(state, action: PayloadAction<ReplacePayload<CartesianGraphicalItemSettings>>) {\n      const { prev, next } = action.payload;\n      const index = current(state).cartesianItems.indexOf(castDraft(prev));\n      if (index > -1) {\n        state.cartesianItems[index] = castDraft(next);\n      }\n    },\n    removeCartesianGraphicalItem(state, action: PayloadAction<CartesianGraphicalItemSettings>) {\n      const index = current(state).cartesianItems.indexOf(castDraft(action.payload));\n      if (index > -1) {\n        state.cartesianItems.splice(index, 1);\n      }\n    },\n    addPolarGraphicalItem(state, action: PayloadAction<PolarGraphicalItemSettings>) {\n      state.polarItems.push(castDraft(action.payload));\n    },\n    removePolarGraphicalItem(state, action: PayloadAction<PolarGraphicalItemSettings>) {\n      const index = current(state).polarItems.indexOf(castDraft(action.payload));\n      if (index > -1) {\n        state.polarItems.splice(index, 1);\n      }\n    },\n  },\n});\n\nexport const {\n  addCartesianGraphicalItem,\n  replaceCartesianGraphicalItem,\n  removeCartesianGraphicalItem,\n  addPolarGraphicalItem,\n  removePolarGraphicalItem,\n} = graphicalItemsSlice.actions;\n\nexport const graphicalItemsReducer = graphicalItemsSlice.reducer;\n","import { useEffect, useRef } from 'react';\nimport { useAppDispatch } from './hooks';\nimport {\n  addCartesianGraphicalItem,\n  addPolarGraphicalItem,\n  CartesianGraphicalItemSettings,\n  PolarGraphicalItemSettings,\n  removeCartesianGraphicalItem,\n  removePolarGraphicalItem,\n  replaceCartesianGraphicalItem,\n} from './graphicalItemsSlice';\n\nexport function SetCartesianGraphicalItem<T extends CartesianGraphicalItemSettings>(props: T): null {\n  const dispatch = useAppDispatch();\n  const prevPropsRef = useRef<T | null>(null);\n\n  useEffect(() => {\n    if (prevPropsRef.current === null) {\n      dispatch(addCartesianGraphicalItem(props));\n    } else if (prevPropsRef.current !== props) {\n      dispatch(replaceCartesianGraphicalItem({ prev: prevPropsRef.current, next: props }));\n    }\n    prevPropsRef.current = props;\n  }, [dispatch, props]);\n\n  useEffect(() => {\n    return () => {\n      if (prevPropsRef.current) {\n        dispatch(removeCartesianGraphicalItem(prevPropsRef.current));\n        /*\n         * Here we have to reset the ref to null because in StrictMode, the effect will run twice,\n         * but it will keep the same ref value from the first render.\n         *\n         * In browser, React will clear the ref after the first effect cleanup,\n         * so that wouldn't be an issue.\n         *\n         * In StrictMode, however, the ref is kept,\n         * and in the hook above the code checks for `prevPropsRef.current === null`\n         * which would be false so it would not dispatch the `addCartesianGraphicalItem` action again.\n         *\n         * https://github.com/recharts/recharts/issues/6022\n         */\n        prevPropsRef.current = null;\n      }\n    };\n  }, [dispatch]);\n\n  return null;\n}\n\nexport function SetPolarGraphicalItem(props: PolarGraphicalItemSettings): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(addPolarGraphicalItem(props));\n    return () => {\n      dispatch(removePolarGraphicalItem(props));\n    };\n  }, [dispatch, props]);\n  return null;\n}\n","function noop() { }\n\nexport { noop };\n","import * as React from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { noop } from 'es-toolkit';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport configUpdate from './configUpdate';\nimport { configEasing, EasingInput } from './easing';\nimport { AnimationManager } from './AnimationManager';\nimport { useAnimationManager } from './useAnimationManager';\n\ntype JavascriptAnimateProps = {\n  animationManager?: AnimationManager;\n  duration?: number;\n  begin?: number;\n  easing?: EasingInput;\n  isActive?: boolean;\n  canBegin?: boolean;\n  onAnimationStart?: () => void;\n  onAnimationEnd?: () => void;\n  children: (time: number) => React.ReactNode;\n};\n\nconst defaultJavascriptAnimateProps = {\n  begin: 0,\n  duration: 1000,\n  easing: 'ease',\n  isActive: true,\n  canBegin: true,\n  onAnimationEnd: () => {},\n  onAnimationStart: () => {},\n} as const satisfies Partial<JavascriptAnimateProps>;\n\ntype TimeAsObject = {\n  t: number;\n};\n\nconst from: TimeAsObject = { t: 0 };\nconst to: TimeAsObject = { t: 1 };\n\nexport function JavascriptAnimate(outsideProps: JavascriptAnimateProps) {\n  const props = resolveDefaultProps(outsideProps, defaultJavascriptAnimateProps);\n  const { isActive, canBegin, duration, easing, begin, onAnimationEnd, onAnimationStart, children } = props;\n\n  const animationManager = useAnimationManager('JavascriptAnimate', props.animationManager);\n\n  const [style, setStyle] = useState<TimeAsObject>(isActive ? from : to);\n  const stopJSAnimation = useRef<(() => void) | null>(null);\n\n  useEffect(() => {\n    if (!isActive) {\n      setStyle(to);\n    }\n  }, [isActive]);\n\n  useEffect(() => {\n    if (!isActive || !canBegin) {\n      return noop;\n    }\n\n    const startAnimation = configUpdate<TimeAsObject>(\n      from,\n      to,\n      configEasing(easing),\n      duration,\n      setStyle,\n      animationManager.getTimeoutController(),\n    );\n\n    const onAnimationActive = () => {\n      stopJSAnimation.current = startAnimation();\n    };\n\n    animationManager.start([onAnimationStart, begin, onAnimationActive, duration, onAnimationEnd]);\n\n    return () => {\n      animationManager.stop();\n      if (stopJSAnimation.current) {\n        stopJSAnimation.current();\n      }\n      onAnimationEnd();\n    };\n  }, [isActive, canBegin, duration, easing, begin, onAnimationStart, onAnimationEnd, animationManager]);\n\n  return children(style.t);\n}\n","import { createSelector } from 'reselect';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport { ChartOffsetInternal } from '../../util/types';\nimport { ChartOffset } from '../../types';\n\nexport const selectChartOffset = createSelector(\n  [selectChartOffsetInternal],\n  (offsetInternal: ChartOffsetInternal): ChartOffset => {\n    if (!offsetInternal) {\n      return undefined;\n    }\n    return {\n      top: offsetInternal.top,\n      bottom: offsetInternal.bottom,\n      left: offsetInternal.left,\n      right: offsetInternal.right,\n    };\n  },\n);\n","import { createSelector } from 'reselect';\nimport { selectChartOffset } from './selectChartOffset';\nimport { selectChartHeight, selectChartWidth } from './containerSelectors';\n\nexport const selectPlotArea = createSelector(\n  [selectChartOffset, selectChartWidth, selectChartHeight],\n  (offset, chartWidth, chartHeight) => {\n    if (!offset || chartWidth == null || chartHeight == null) {\n      return undefined;\n    }\n\n    return {\n      x: offset.left,\n      y: offset.top,\n      width: Math.max(0, chartWidth - offset.left - offset.right),\n      height: Math.max(0, chartHeight - offset.top - offset.bottom),\n    };\n  },\n);\n","import type { AxisId } from './state/cartesianAxisSlice';\nimport { BaseAxisWithScale, selectAxisWithScale } from './state/selectors/axisSelectors';\nimport { useAppSelector } from './state/hooks';\nimport { useIsPanorama } from './context/PanoramaContext';\nimport { selectActiveLabel, selectActiveTooltipDataPoints } from './state/selectors/tooltipSelectors';\nimport { ChartOffset, PlotArea } from './types';\nimport { selectChartOffset } from './state/selectors/selectChartOffset';\nimport { selectPlotArea } from './state/selectors/selectPlotArea';\n\nexport const useXAxis = (xAxisId: AxisId): BaseAxisWithScale | undefined => {\n  const isPanorama = useIsPanorama();\n  return useAppSelector(state => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama));\n};\n\nexport const useYAxis = (yAxisId: AxisId): BaseAxisWithScale | undefined => {\n  const isPanorama = useIsPanorama();\n  return useAppSelector(state => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama));\n};\n\n/**\n * Returns the active tooltip label. The label is one of the values from the chart data,\n * and is used to display in the tooltip content.\n *\n * Returns undefined if there is no active user interaction or if used outside a chart context\n *\n * @returns string | undefined\n */\nexport const useActiveTooltipLabel = (): string | undefined => {\n  return useAppSelector(selectActiveLabel);\n};\n\n/**\n * Offset defines the blank space between the chart and the plot area.\n * This blank space is occupied by supporting elements like axes, legends, and brushes.\n * This also includes any margins that might be applied to the chart.\n *\n * @returns Offset of the chart in pixels, or undefined if used outside a chart context.\n */\nexport const useOffset = (): ChartOffset | undefined => {\n  return useAppSelector(selectChartOffset);\n};\n\n/**\n * Plot area is the area where the actual chart data is rendered.\n * This means: bars, lines, scatter points, etc.\n *\n * The plot area is calculated based on the chart dimensions and the offset.\n *\n * @returns Plot area of the chart in pixels, or undefined if used outside a chart context.\n */\nexport const usePlotArea = (): PlotArea | undefined => {\n  return useAppSelector(selectPlotArea);\n};\n\n/**\n * Returns the currently active data points being displayed in the Tooltip.\n * Active means that it is currently visible; this hook will return `undefined` if there is no current interaction.\n *\n * This follows the `<Tooltip />` props, if the Tooltip element is present in the chart.\n * If there is no `<Tooltip />` then this hook will follow the default Tooltip props.\n *\n * Data point is whatever you pass as an input to the chart using the `data={}` prop.\n *\n * This returns an array because a chart can have multiple graphical items in it (multiple Lines for example)\n * and tooltip with `shared={true}` will display all items at the same time.\n *\n * Returns undefined when used outside a chart context.\n *\n * @returns Data points that are currently visible in a Tooltip\n */\nexport const useActiveTooltipDataPoints = <T = unknown>(): ReadonlyArray<T> | undefined => {\n  return useAppSelector(selectActiveTooltipDataPoints);\n};\n","import * as React from 'react';\nimport { cloneElement, isValidElement } from 'react';\nimport { ActiveDotProps, ActiveDotType, adaptEventHandlers, DataKey } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { Dot } from '../shape/Dot';\nimport { Layer } from '../container/Layer';\nimport { useAppSelector } from '../state/hooks';\nimport { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';\nimport { useActiveTooltipDataPoints } from '../hooks';\nimport { isNullish } from '../util/DataUtils';\n\nexport interface PointType {\n  readonly x: number | null;\n  readonly y: number | null;\n  readonly value?: any;\n  readonly payload?: any;\n}\n\nconst renderActivePoint = ({\n  point,\n  childIndex,\n  mainColor,\n  activeDot,\n  dataKey,\n}: {\n  point: PointType;\n  activeDot: ActiveDotType;\n  childIndex: number;\n  dataKey: DataKey<any>;\n  /**\n   * Different graphical elements have different opinion on what is their main color.\n   * Sometimes stroke, sometimes fill, sometimes combination.\n   */\n  mainColor: string | undefined;\n}) => {\n  if (activeDot === false || point.x == null || point.y == null) {\n    return null;\n  }\n  const dotProps: ActiveDotProps = {\n    index: childIndex,\n    dataKey,\n    cx: point.x,\n    cy: point.y,\n    r: 4,\n    fill: mainColor ?? 'none',\n    strokeWidth: 2,\n    stroke: '#fff',\n    payload: point.payload,\n    value: point.value,\n    ...filterProps(activeDot, false),\n    ...adaptEventHandlers(activeDot),\n  };\n\n  let dot;\n\n  if (isValidElement(activeDot)) {\n    // @ts-expect-error element cloning does not have types\n    dot = cloneElement(activeDot, dotProps);\n  } else if (typeof activeDot === 'function') {\n    dot = activeDot(dotProps);\n  } else {\n    dot = <Dot {...dotProps} />;\n  }\n\n  return <Layer className=\"recharts-active-dot\">{dot}</Layer>;\n};\n\ntype ActivePointsProps = {\n  points: ReadonlyArray<PointType>;\n  /**\n   * Different graphical elements have different opinion on what is their main color.\n   * Sometimes stroke, sometimes fill, sometimes combination.\n   * `undefined` means that the color is not set, and the point will be transparent.\n   */\n  mainColor: string | undefined;\n  itemDataKey: DataKey<any> | undefined;\n  activeDot: ActiveDotType;\n};\n\nexport function ActivePoints({ points, mainColor, activeDot, itemDataKey }: ActivePointsProps) {\n  const activeTooltipIndex = useAppSelector(selectActiveTooltipIndex);\n  const activeDataPoints = useActiveTooltipDataPoints();\n  if (points == null || activeDataPoints == null) {\n    return null;\n  }\n\n  const activePoint: PointType | undefined = points.find(p => activeDataPoints.includes(p.payload));\n\n  if (isNullish(activePoint)) {\n    return null;\n  }\n\n  return renderActivePoint({\n    point: activePoint,\n    childIndex: Number(activeTooltipIndex),\n    mainColor,\n    dataKey: itemDataKey,\n    activeDot,\n  });\n}\n","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport { AngleAxisForRadar, computeRadarPoints, RadarComposedData, RadiusAxisForRadar } from '../../polar/Radar';\nimport { BaseAxisWithScale } from './axisSelectors';\nimport { selectPolarAxisScale, selectPolarAxisTicks } from './polarScaleSelectors';\nimport { selectAngleAxis, selectPolarViewBox, selectRadiusAxis } from './polarAxisSelectors';\nimport { AxisId } from '../cartesianAxisSlice';\nimport { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';\nimport { ChartDataState } from '../chartDataSlice';\nimport { DataKey, LayoutType, PolarViewBoxRequired, TickItem } from '../../util/types';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { getBandSizeOfAxis, isCategoricalAxis, RechartsScale } from '../../util/ChartUtils';\nimport { AngleAxisSettings, RadiusAxisSettings } from '../polarAxisSlice';\nimport { selectUnfilteredPolarItems } from './polarSelectors';\n\nconst selectRadiusAxisScale = (state: RechartsRootState, radiusAxisId: AxisId): RechartsScale | undefined =>\n  selectPolarAxisScale(state, 'radiusAxis', radiusAxisId);\n\nconst selectRadiusAxisForRadar: (state: RechartsRootState, radiusAxisId: AxisId) => RadiusAxisForRadar | undefined =\n  createSelector([selectRadiusAxisScale], (scale: RechartsScale | undefined): RadiusAxisForRadar | undefined => {\n    if (scale == null) {\n      return undefined;\n    }\n    return { scale };\n  });\n\nexport const selectRadiusAxisForBandSize: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n) => BaseAxisWithScale | undefined = createSelector(\n  [selectRadiusAxis, selectRadiusAxisScale],\n  (axisSettings: RadiusAxisSettings | undefined, scale: RechartsScale | undefined): BaseAxisWithScale | undefined => {\n    if (axisSettings == null || scale == null) {\n      return undefined;\n    }\n    return {\n      ...axisSettings,\n      scale,\n    };\n  },\n);\n\nconst selectRadiusAxisTicks = (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  _angleAxisId: AxisId,\n  isPanorama: boolean,\n): ReadonlyArray<TickItem> | undefined => {\n  return selectPolarAxisTicks(state, 'radiusAxis', radiusAxisId, isPanorama);\n};\n\nconst selectAngleAxisForRadar = (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n): AngleAxisSettings => selectAngleAxis(state, angleAxisId);\n\nconst selectPolarAxisScaleForRadar = (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n): RechartsScale | undefined => selectPolarAxisScale(state, 'angleAxis', angleAxisId);\n\nexport const selectAngleAxisForBandSize: (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n) => BaseAxisWithScale | undefined = createSelector(\n  [selectAngleAxisForRadar, selectPolarAxisScaleForRadar],\n  (axisSettings: AngleAxisSettings, scale: RechartsScale | undefined): BaseAxisWithScale | undefined => {\n    if (axisSettings == null || scale == null) {\n      return undefined;\n    }\n    return {\n      ...axisSettings,\n      scale,\n    };\n  },\n);\n\nconst selectAngleAxisTicks = (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  isPanorama: boolean,\n): ReadonlyArray<TickItem> | undefined => {\n  return selectPolarAxisTicks(state, 'angleAxis', angleAxisId, isPanorama);\n};\n\nexport const selectAngleAxisWithScaleAndViewport: (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n) => AngleAxisForRadar | undefined = createSelector(\n  [selectAngleAxisForRadar, selectPolarAxisScaleForRadar, selectPolarViewBox],\n  (\n    axisOptions: AngleAxisSettings,\n    scale: RechartsScale | undefined,\n    polarViewBox: PolarViewBoxRequired | undefined,\n  ): AngleAxisForRadar | undefined => {\n    if (polarViewBox == null || scale == null) {\n      return undefined;\n    }\n    return {\n      scale,\n      type: axisOptions.type,\n      dataKey: axisOptions.dataKey,\n      cx: polarViewBox.cx,\n      cy: polarViewBox.cy,\n    };\n  },\n);\n\nconst pickDataKey = (\n  _state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  _angleAxisId: AxisId,\n  _isPanorama: boolean,\n  radarDataKey: DataKey<any> | undefined,\n): DataKey<any> | undefined => radarDataKey;\n\nconst selectBandSizeOfAxis: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  isPanorama: boolean,\n  radarDataKey: DataKey<any> | undefined,\n) => number | undefined = createSelector(\n  [\n    selectChartLayout,\n    selectRadiusAxisForBandSize,\n    selectRadiusAxisTicks,\n    selectAngleAxisForBandSize,\n    selectAngleAxisTicks,\n  ],\n  (\n    layout: LayoutType,\n    radiusAxis: BaseAxisWithScale | undefined,\n    radiusAxisTicks: ReadonlyArray<TickItem> | undefined,\n    angleAxis: BaseAxisWithScale | undefined,\n    angleAxisTicks: ReadonlyArray<TickItem> | undefined,\n  ) => {\n    if (isCategoricalAxis(layout, 'radiusAxis')) {\n      return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, false);\n    }\n    return getBandSizeOfAxis(angleAxis, angleAxisTicks, false);\n  },\n);\n\nconst selectSynchronisedRadarDataKey: (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  _angleAxisId: AxisId,\n  _isPanorama: boolean,\n  radarDataKey: DataKey<any> | undefined,\n) => DataKey<any> | undefined = createSelector(\n  [selectUnfilteredPolarItems, pickDataKey],\n  (graphicalItems, radarDataKey) => {\n    if (graphicalItems.some(pgis => pgis.type === 'radar' && radarDataKey === pgis.dataKey)) {\n      return radarDataKey;\n    }\n    return undefined;\n  },\n);\n\nexport const selectRadarPoints: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  isPanorama: boolean,\n  radarDataKey: DataKey<any> | undefined,\n) => RadarComposedData | undefined = createSelector(\n  [\n    selectRadiusAxisForRadar,\n    selectAngleAxisWithScaleAndViewport,\n    selectChartDataAndAlwaysIgnoreIndexes,\n    selectSynchronisedRadarDataKey,\n    selectBandSizeOfAxis,\n  ],\n  (\n    radiusAxis: RadiusAxisForRadar,\n    angleAxis: AngleAxisForRadar,\n    { chartData, dataStartIndex, dataEndIndex }: ChartDataState,\n    dataKey: DataKey<any> | undefined,\n    bandSize: number | undefined,\n  ): RadarComposedData | undefined => {\n    if (radiusAxis == null || angleAxis == null || chartData == null || bandSize == null || dataKey == null) {\n      return undefined;\n    }\n    const displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);\n    return computeRadarPoints({\n      radiusAxis,\n      angleAxis,\n      displayedData,\n      dataKey,\n      bandSize,\n    });\n  },\n);\n","// eslint-disable-next-line max-classes-per-file\nimport * as React from 'react';\nimport {\n  PureComponent,\n  ReactElement,\n  MouseEvent,\n  SVGProps,\n  useCallback,\n  useRef,\n  MutableRefObject,\n  useState,\n} from 'react';\nimport last from 'es-toolkit/compat/last';\n\nimport { clsx } from 'clsx';\nimport { interpolateNumber, isNullish } from '../util/DataUtils';\nimport { Global } from '../util/Global';\nimport { polarToCartesian } from '../util/PolarUtils';\nimport { getTooltipNameProp, getValueByDataKey, RechartsScale } from '../util/ChartUtils';\nimport { Polygon } from '../shape/Polygon';\nimport { Dot, Props as DotProps } from '../shape/Dot';\nimport { Layer } from '../container/Layer';\nimport { LabelList } from '../component/LabelList';\nimport { LegendType, TooltipType, AnimationTiming, DataKey, AnimationDuration, ActiveDotType } from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport type { LegendPayload } from '../component/DefaultLegendContent';\nimport { ActivePoints } from '../component/ActivePoints';\nimport { TooltipPayloadConfiguration } from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { selectRadarPoints } from '../state/selectors/radarSelectors';\nimport { useAppSelector } from '../state/hooks';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { SetPolarLegendPayload } from '../state/SetLegendPayload';\nimport { useAnimationId } from '../util/useAnimationId';\nimport { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';\nimport { SetPolarGraphicalItem } from '../state/SetGraphicalItem';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { JavascriptAnimate } from '../animation/JavascriptAnimate';\n\ninterface RadarPoint {\n  x: number;\n  y: number;\n  cx?: number;\n  cy?: number;\n  angle?: number;\n  radius?: number;\n  value?: number;\n  payload?: any;\n  name?: string;\n}\n\ntype RadarDot = ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | DotProps | boolean;\n\ninterface RadarProps {\n  className?: string;\n  dataKey: DataKey<any>;\n  angleAxisId?: string | number;\n  radiusAxisId?: string | number;\n  points?: RadarPoint[];\n  baseLinePoints?: RadarPoint[];\n  isRange?: boolean;\n  shape?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>);\n  activeDot?: ActiveDotType;\n  dot?: RadarDot;\n  legendType?: LegendType;\n  tooltipType?: TooltipType;\n  hide?: boolean;\n  connectNulls?: boolean;\n\n  label?: any;\n  onAnimationStart?: () => void;\n  onAnimationEnd?: () => void;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  isAnimationActive?: boolean;\n  animationEasing?: AnimationTiming;\n\n  onMouseEnter?: (props: any, e: MouseEvent<SVGPolygonElement>) => void;\n  onMouseLeave?: (props: any, e: MouseEvent<SVGPolygonElement>) => void;\n}\n\nexport type RadiusAxisForRadar = { scale: RechartsScale };\nexport type AngleAxisForRadar = {\n  scale: RechartsScale;\n  type: 'number' | 'category';\n  dataKey: DataKey<any> | undefined;\n  cx: number;\n  cy: number;\n};\n\nexport type Props = Omit<SVGProps<SVGElement>, 'onMouseEnter' | 'onMouseLeave' | 'points' | 'ref'> & RadarProps;\n\nexport type RadarComposedData = {\n  points: RadarPoint[];\n  baseLinePoints: RadarPoint[];\n  isRange: boolean;\n};\n\nfunction getLegendItemColor(stroke: string | undefined, fill: string): string {\n  return stroke && stroke !== 'none' ? stroke : fill;\n}\n\nconst computeLegendPayloadFromRadarSectors = (props: Props): ReadonlyArray<LegendPayload> => {\n  const { dataKey, name, stroke, fill, legendType, hide } = props;\n  return [\n    {\n      inactive: hide,\n      dataKey,\n      type: legendType,\n      color: getLegendItemColor(stroke, fill),\n      value: getTooltipNameProp(name, dataKey),\n      payload: props,\n    },\n  ];\n};\n\nfunction getTooltipEntrySettings(props: Props): TooltipPayloadConfiguration {\n  const { dataKey, stroke, strokeWidth, fill, name, hide, tooltipType } = props;\n  return {\n    /*\n     * I suppose this here _could_ return props.points\n     * because while Radar does not support item tooltip mode, it _could_ support it.\n     * But when I actually do return the points here, a defaultIndex test starts failing.\n     * So, undefined it is.\n     */\n    dataDefinedOnItem: undefined,\n    positions: undefined,\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      nameKey: undefined, // RadarChart does not have nameKey unfortunately\n      dataKey,\n      name: getTooltipNameProp(name, dataKey),\n      hide,\n      type: tooltipType,\n      color: getLegendItemColor(stroke, fill),\n      unit: '', // why doesn't Radar support unit?\n    },\n  };\n}\n\nfunction renderDotItem(option: RadarDot, props: DotProps) {\n  let dotItem;\n\n  if (React.isValidElement(option)) {\n    // @ts-expect-error typescript is unhappy with cloned props type\n    dotItem = React.cloneElement(option, props);\n  } else if (typeof option === 'function') {\n    dotItem = option(props);\n  } else {\n    dotItem = (\n      <Dot {...props} className={clsx('recharts-radar-dot', typeof option !== 'boolean' ? option.className : '')} />\n    );\n  }\n\n  return dotItem;\n}\n\nexport function computeRadarPoints({\n  radiusAxis,\n  angleAxis,\n  displayedData,\n  dataKey,\n  bandSize,\n}: {\n  radiusAxis: RadiusAxisForRadar;\n  angleAxis: AngleAxisForRadar;\n  displayedData: any[];\n  dataKey: RadarProps['dataKey'];\n  bandSize: number;\n}): RadarComposedData {\n  const { cx, cy } = angleAxis;\n  let isRange = false;\n  const points: RadarPoint[] = [];\n  const angleBandSize = angleAxis.type !== 'number' ? (bandSize ?? 0) : 0;\n\n  displayedData.forEach((entry, i) => {\n    const name = getValueByDataKey(entry, angleAxis.dataKey, i);\n    const value = getValueByDataKey(entry, dataKey);\n    const angle = angleAxis.scale(name) + angleBandSize;\n    const pointValue = Array.isArray(value) ? last(value) : value;\n    const radius = isNullish(pointValue) ? undefined : radiusAxis.scale(pointValue);\n\n    if (Array.isArray(value) && value.length >= 2) {\n      isRange = true;\n    }\n\n    points.push({\n      ...polarToCartesian(cx, cy, radius, angle),\n      // @ts-expect-error getValueByDataKey does not validate the output type\n      name,\n      // @ts-expect-error getValueByDataKey does not validate the output type\n      value,\n      cx,\n      cy,\n      radius,\n      angle,\n      payload: entry,\n    });\n  });\n  const baseLinePoints: RadarPoint[] = [];\n\n  if (isRange) {\n    points.forEach(point => {\n      if (Array.isArray(point.value)) {\n        const baseValue = point.value[0];\n        const radius = isNullish(baseValue) ? undefined : radiusAxis.scale(baseValue);\n\n        baseLinePoints.push({\n          ...point,\n          radius,\n          ...polarToCartesian(cx, cy, radius, point.angle),\n        });\n      } else {\n        baseLinePoints.push(point);\n      }\n    });\n  }\n\n  return { points, isRange, baseLinePoints };\n}\n\nfunction Dots({ points, props }: { points: RadarPoint[]; props: Props }) {\n  const { dot, dataKey } = props;\n  if (!dot) {\n    return null;\n  }\n  const { id, ...propsWithoutId } = props;\n\n  const baseProps = svgPropertiesNoEvents(propsWithoutId);\n  const customDotProps = filterProps(dot, true);\n\n  const dots = points.map((entry, i) => {\n    const dotProps = {\n      key: `dot-${i}`,\n      r: 3,\n      ...baseProps,\n      ...customDotProps,\n      dataKey,\n      cx: entry.x,\n      cy: entry.y,\n      index: i,\n      payload: entry,\n    };\n\n    // @ts-expect-error r type is not compatible\n    return renderDotItem(dot, dotProps);\n  });\n\n  return <Layer className=\"recharts-radar-dots\">{dots}</Layer>;\n}\n\nfunction StaticPolygon({ points, props, showLabels }: { points: RadarPoint[]; props: Props; showLabels: boolean }) {\n  if (points == null) {\n    return null;\n  }\n\n  const { shape, isRange, baseLinePoints, connectNulls } = props;\n\n  const handleMouseEnter = (e: MouseEvent<SVGPolygonElement>) => {\n    const { onMouseEnter } = props;\n\n    if (onMouseEnter) {\n      onMouseEnter(props, e);\n    }\n  };\n\n  const handleMouseLeave = (e: MouseEvent<SVGPolygonElement>) => {\n    const { onMouseLeave } = props;\n\n    if (onMouseLeave) {\n      onMouseLeave(props, e);\n    }\n  };\n\n  let radar;\n  if (React.isValidElement(shape)) {\n    radar = React.cloneElement(shape, { ...props, points } as any);\n  } else if (typeof shape === 'function') {\n    radar = shape({ ...props, points });\n  } else {\n    radar = (\n      <Polygon\n        {...filterProps(props, true)}\n        onMouseEnter={handleMouseEnter}\n        onMouseLeave={handleMouseLeave}\n        points={points}\n        baseLinePoints={isRange ? baseLinePoints : null}\n        connectNulls={connectNulls}\n      />\n    );\n  }\n\n  return (\n    <Layer className=\"recharts-radar-polygon\">\n      {radar}\n      <Dots props={props} points={points} />\n      {showLabels && LabelList.renderCallByParent(props, points)}\n    </Layer>\n  );\n}\n\nfunction PolygonWithAnimation({\n  props,\n  previousPointsRef,\n}: {\n  props: Props;\n  previousPointsRef: MutableRefObject<ReadonlyArray<RadarPoint>>;\n}) {\n  const {\n    points,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    onAnimationEnd,\n    onAnimationStart,\n  } = props;\n  const prevPoints = previousPointsRef.current;\n  const animationId = useAnimationId(props, 'recharts-radar-');\n  const [isAnimating, setIsAnimating] = useState(true);\n\n  const handleAnimationEnd = useCallback(() => {\n    if (typeof onAnimationEnd === 'function') {\n      onAnimationEnd();\n    }\n    setIsAnimating(false);\n  }, [onAnimationEnd]);\n\n  const handleAnimationStart = useCallback(() => {\n    if (typeof onAnimationStart === 'function') {\n      onAnimationStart();\n    }\n    setIsAnimating(true);\n  }, [onAnimationStart]);\n\n  return (\n    <JavascriptAnimate\n      begin={animationBegin}\n      duration={animationDuration}\n      isActive={isAnimationActive}\n      easing={animationEasing}\n      key={`radar-${animationId}`}\n      onAnimationEnd={handleAnimationEnd}\n      onAnimationStart={handleAnimationStart}\n    >\n      {(t: number) => {\n        const prevPointsDiffFactor = prevPoints && prevPoints.length / points.length;\n        const stepData =\n          t === 1\n            ? points\n            : points.map((entry, index) => {\n                const prev = prevPoints && prevPoints[Math.floor(index * prevPointsDiffFactor)];\n\n                if (prev) {\n                  const interpolatorX = interpolateNumber(prev.x, entry.x);\n                  const interpolatorY = interpolateNumber(prev.y, entry.y);\n\n                  return {\n                    ...entry,\n                    x: interpolatorX(t),\n                    y: interpolatorY(t),\n                  };\n                }\n\n                const interpolatorX = interpolateNumber(entry.cx, entry.x);\n                const interpolatorY = interpolateNumber(entry.cy, entry.y);\n\n                return {\n                  ...entry,\n                  x: interpolatorX(t),\n                  y: interpolatorY(t),\n                };\n              });\n\n        if (t > 0) {\n          // eslint-disable-next-line no-param-reassign\n          previousPointsRef.current = stepData;\n        }\n        return <StaticPolygon points={stepData} props={props} showLabels={!isAnimating} />;\n      }}\n    </JavascriptAnimate>\n  );\n}\n\nfunction RenderPolygon(props: Props) {\n  const { points, isAnimationActive, isRange } = props;\n  const previousPointsRef = useRef<ReadonlyArray<RadarPoint> | undefined>(undefined);\n  const prevPoints = previousPointsRef.current;\n\n  if (isAnimationActive && points && points.length && !isRange && (!prevPoints || prevPoints !== points)) {\n    return <PolygonWithAnimation props={props} previousPointsRef={previousPointsRef} />;\n  }\n\n  return <StaticPolygon points={points} props={props} showLabels />;\n}\n\nconst defaultRadarProps: Partial<Props> = {\n  angleAxisId: 0,\n  radiusAxisId: 0,\n  hide: false,\n  activeDot: true,\n  dot: false,\n  legendType: 'rect',\n  isAnimationActive: !Global.isSsr,\n  animationBegin: 0,\n  animationDuration: 1500,\n  animationEasing: 'ease',\n};\n\nclass RadarWithState extends PureComponent<Props> {\n  render() {\n    const { hide, className, points } = this.props;\n\n    if (hide) {\n      return null;\n    }\n\n    const layerClass = clsx('recharts-radar', className);\n\n    return (\n      <>\n        <Layer className={layerClass}>\n          <RenderPolygon {...this.props} />\n        </Layer>\n        <ActivePoints\n          points={points}\n          mainColor={getLegendItemColor(this.props.stroke, this.props.fill)}\n          itemDataKey={this.props.dataKey}\n          activeDot={this.props.activeDot}\n        />\n      </>\n    );\n  }\n}\n\nfunction RadarImpl(props: Props) {\n  const isPanorama = useIsPanorama();\n  const radarPoints = useAppSelector(state =>\n    selectRadarPoints(state, props.radiusAxisId, props.angleAxisId, isPanorama, props.dataKey),\n  );\n\n  return (\n    <RadarWithState\n      {...props}\n      points={radarPoints?.points}\n      baseLinePoints={radarPoints?.baseLinePoints}\n      isRange={radarPoints?.isRange}\n    />\n  );\n}\n\nexport class Radar extends PureComponent<Props> {\n  static displayName = 'Radar';\n\n  static defaultProps = defaultRadarProps;\n\n  render() {\n    return (\n      <RegisterGraphicalItemId id={this.props.id} type=\"radar\">\n        {id => (\n          <>\n            <SetPolarGraphicalItem\n              type=\"radar\"\n              id={id}\n              data={undefined} // Radar does not have data prop, why?\n              dataKey={this.props.dataKey}\n              hide={this.props.hide}\n              angleAxisId={this.props.angleAxisId}\n              radiusAxisId={this.props.radiusAxisId}\n            />\n            <SetPolarLegendPayload legendPayload={computeLegendPayloadFromRadarSectors(this.props)} />\n            <SetTooltipEntrySettings fn={getTooltipEntrySettings} args={this.props} />\n            <RadarImpl {...this.props} id={id} />\n          </>\n        )}\n      </RegisterGraphicalItemId>\n    );\n  }\n}\n","import * as React from 'react';\nimport { SVGProps } from 'react';\nimport { RadialBarProps } from '../polar/RadialBar';\nimport { Props as SectorProps } from '../shape/Sector';\nimport { Shape } from './ActiveShapeUtils';\n\nexport function parseCornerRadius(cornerRadius: string | number | undefined): number | undefined {\n  if (typeof cornerRadius === 'string') {\n    return parseInt(cornerRadius, 10);\n  }\n\n  return cornerRadius;\n}\n\n// Sector props is expecting cx, cy as numbers.\n// When props are being spread in from a user defined component in RadialBar,\n// the prop types of an SVGElement have these typed as string | number.\n// This function will return the passed in props along with cx, cy as numbers.\nexport function typeGuardSectorProps(option: SVGProps<SVGPathElement>, props: SectorProps): SectorProps {\n  const cxValue = `${props.cx || option.cx}`;\n  const cx = Number(cxValue);\n  const cyValue = `${props.cy || option.cy}`;\n  const cy = Number(cyValue);\n  return {\n    ...props,\n    ...option,\n    cx,\n    cy,\n  };\n}\n\nexport interface RadialBarSectorProps extends SectorProps {\n  index?: number;\n  option: RadialBarProps['activeShape'];\n  isActive?: boolean;\n}\n\nexport function RadialBarSector(props: RadialBarSectorProps) {\n  return <Shape shapeType=\"sector\" propTransformer={typeGuardSectorProps} {...props} />;\n}\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n    if (condition) {\n        return;\n    }\n    if (isProduction) {\n        throw new Error(prefix);\n    }\n    var provided = typeof message === 'function' ? message() : message;\n    var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n    throw new Error(value);\n}\n\nexport { invariant as default };\n","import * as React from 'react';\nimport { SVGProps } from 'react';\nimport invariant from 'tiny-invariant';\nimport { ActiveShape } from './types';\nimport { Props as RectangleProps } from '../shape/Rectangle';\nimport { BarProps } from '../cartesian/Bar';\nimport { Shape } from './ActiveShapeUtils';\nimport { isNullish, isNumber } from './DataUtils';\n\n// Rectangle props is expecting x, y, height, width as numbers, name as a string, and radius as a custom type\n// When props are being spread in from a user defined component in Bar,\n// the prop types of an SVGElement have these typed as something else.\n// This function will return the passed in props\n// along with x, y, height as numbers, name as a string, and radius as number | [number, number, number, number]\nfunction typeguardBarRectangleProps(\n  { x: xProp, y: yProp, ...option }: SVGProps<SVGPathElement>,\n  props: BarRectangleProps,\n): RectangleProps {\n  const xValue = `${xProp}`;\n  const x = parseInt(xValue, 10);\n  const yValue = `${yProp}`;\n  const y = parseInt(yValue, 10);\n  const heightValue = `${props.height || option.height}`;\n  const height = parseInt(heightValue, 10);\n  const widthValue = `${props.width || option.width}`;\n  const width = parseInt(widthValue, 10);\n  return {\n    ...props,\n    ...option,\n    ...(x ? { x } : {}),\n    ...(y ? { y } : {}),\n    height,\n    width,\n    name: props.name as string,\n    radius: props.radius,\n  };\n}\n\nexport type BarRectangleProps = {\n  option: ActiveShape<BarProps, SVGPathElement> | undefined;\n  isActive: boolean;\n  onMouseEnter?: (e: React.MouseEvent<SVGPathElement, MouseEvent>) => void;\n  onMouseLeave?: (e: React.MouseEvent<SVGPathElement, MouseEvent>) => void;\n  onClick?: (e: React.MouseEvent<SVGPathElement, MouseEvent>) => void;\n  width?: number;\n  height?: number;\n} & Omit<BarProps, 'onAnimationStart' | 'onAnimationEnd'>;\n\nexport function BarRectangle(props: BarRectangleProps) {\n  return (\n    <Shape\n      shapeType=\"rectangle\"\n      propTransformer={typeguardBarRectangleProps}\n      activeClassName=\"recharts-active-bar\"\n      {...props}\n    />\n  );\n}\n\nexport type MinPointSize = number | ((value: number | undefined | null, index: number) => number);\n\n/**\n * Safely gets minPointSize from the minPointSize prop if it is a function\n * @param minPointSize minPointSize as passed to the Bar component\n * @param defaultValue default minPointSize\n * @returns minPointSize\n */\nexport const minPointSizeCallback =\n  (minPointSize: MinPointSize, defaultValue = 0) =>\n  (value: unknown, index: number): number => {\n    if (isNumber(minPointSize)) return minPointSize;\n    const isValueNumberOrNil = isNumber(value) || isNullish(value);\n    if (isValueNumberOrNil) {\n      return minPointSize(value, index);\n    }\n\n    invariant(\n      isValueNumberOrNil,\n      `minPointSize callback function received a value with type of ${typeof value}. Currently only numbers or null/undefined are supported.`,\n    );\n    return defaultValue;\n  };\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { ErrorBarDirection } from '../cartesian/ErrorBar';\nimport { DataKey } from '../util/types';\nimport { GraphicalItemId } from './graphicalItemsSlice';\n\n/**\n * ErrorBars have lot more settings but all the others are scoped to the component itself.\n * Only some of them required to be reported to the global store because XAxis and YAxis need to know\n * if the error bar is contributing to extending the axis domain.\n */\nexport type ErrorBarsSettings = {\n  /**\n   * The direction is only used in Scatter chart, and decided based on ChartLayout in other charts.\n   */\n  direction: ErrorBarDirection;\n  /**\n   * The dataKey decides which property from the data will each individual ErrorBar use.\n   * If it so happens that the ErrorBar data are bigger than the axis domain,\n   * the error bar data will stretch the axis domain.\n   */\n  dataKey: DataKey<any>;\n  /*\n   * ErrorBar props say that it has explicit xAxis and yAxis props,\n   * but actually it always inherits the xAxis and yAxis defined on the parent graphical item.\n   */\n};\n\nexport type ErrorBarsState = Record<GraphicalItemId, ReadonlyArray<ErrorBarsSettings>>;\n\nconst initialState: ErrorBarsState = {};\n\nconst errorBarSlice = createSlice({\n  name: 'errorBars',\n  initialState,\n  reducers: {\n    addErrorBar: (state, action: PayloadAction<{ itemId: GraphicalItemId; errorBar: ErrorBarsSettings }>) => {\n      const { itemId, errorBar } = action.payload;\n      if (!state[itemId]) {\n        state[itemId] = [];\n      }\n      state[itemId].push(errorBar);\n    },\n    removeErrorBar: (state, action: PayloadAction<{ itemId: GraphicalItemId; errorBar: ErrorBarsSettings }>) => {\n      const { itemId, errorBar } = action.payload;\n      if (state[itemId]) {\n        state[itemId] = state[itemId].filter(e => e.dataKey !== errorBar.dataKey || e.direction !== errorBar.direction);\n      }\n    },\n  },\n});\n\nexport const { addErrorBar, removeErrorBar } = errorBarSlice.actions;\n\nexport const errorBarReducer = errorBarSlice.reducer;\n","import * as React from 'react';\nimport { createContext, useContext, useEffect } from 'react';\nimport { AxisId } from '../state/cartesianAxisSlice';\nimport { ErrorBarDataPointFormatter } from '../cartesian/ErrorBar';\nimport { addErrorBar, ErrorBarsSettings, removeErrorBar } from '../state/errorBarSlice';\nimport { useAppDispatch } from '../state/hooks';\nimport { useGraphicalItemId } from './RegisterGraphicalItemId';\n\nconst noop = () => {};\n\ntype ErrorBarContextType<T> = {\n  data: ReadonlyArray<T> | undefined;\n  xAxisId: AxisId;\n  yAxisId: AxisId;\n  dataPointFormatter: ErrorBarDataPointFormatter;\n  errorBarOffset: number;\n};\n\nconst initialContextState: ErrorBarContextType<any> = {\n  data: [],\n  xAxisId: 'xAxis-0',\n  yAxisId: 'yAxis-0',\n  dataPointFormatter: () => ({ x: 0, y: 0, value: 0 }),\n  errorBarOffset: 0,\n};\n\nconst ErrorBarContext = createContext(initialContextState);\n\nexport function SetErrorBarContext<T>(props: ErrorBarContextType<T> & { children: React.ReactNode }) {\n  const { children, ...rest } = props;\n  return <ErrorBarContext.Provider value={rest}>{children}</ErrorBarContext.Provider>;\n}\n\nexport const useErrorBarContext = () => useContext(ErrorBarContext);\n\nexport function ReportErrorBarSettings(props: ErrorBarsSettings): null {\n  const dispatch = useAppDispatch();\n  const graphicalItemId = useGraphicalItemId();\n\n  useEffect(() => {\n    if (graphicalItemId == null) {\n      // ErrorBar outside a graphical item context does not do anything.\n      return noop;\n    }\n    const payload = { itemId: graphicalItemId, errorBar: props };\n    dispatch(addErrorBar(payload));\n    return () => {\n      dispatch(removeErrorBar(payload));\n    };\n  }, [dispatch, graphicalItemId, props]);\n  return null;\n}\n","import * as React from 'react';\nimport { AxisId } from '../state/cartesianAxisSlice';\nimport { useAppSelector } from '../state/hooks';\nimport {\n  implicitXAxis,\n  implicitYAxis,\n  selectXAxisSettings,\n  selectYAxisSettings,\n} from '../state/selectors/axisSelectors';\nimport { usePlotArea } from '../hooks';\n\ntype GraphicalItemClipPathProps = {\n  xAxisId: AxisId;\n  yAxisId: AxisId;\n  clipPathId: string;\n};\n\nexport function useNeedsClip(xAxisId: AxisId, yAxisId: AxisId) {\n  const xAxis = useAppSelector(state => selectXAxisSettings(state, xAxisId));\n  const yAxis = useAppSelector(state => selectYAxisSettings(state, yAxisId));\n\n  const needClipX: boolean = xAxis?.allowDataOverflow ?? implicitXAxis.allowDataOverflow;\n  const needClipY: boolean = yAxis?.allowDataOverflow ?? implicitYAxis.allowDataOverflow;\n  const needClip = needClipX || needClipY;\n\n  return { needClip, needClipX, needClipY };\n}\n\nexport function GraphicalItemClipPath({ xAxisId, yAxisId, clipPathId }: GraphicalItemClipPathProps) {\n  const plotArea = usePlotArea();\n\n  const { needClipX, needClipY, needClip } = useNeedsClip(xAxisId, yAxisId);\n\n  if (!needClip) {\n    return null;\n  }\n\n  const { x, y, width, height } = plotArea;\n\n  return (\n    <clipPath id={`clipPath-${clipPathId}`}>\n      <rect\n        x={needClipX ? x : x - width / 2}\n        y={needClipY ? y : y - height / 2}\n        width={needClipX ? width : width * 2}\n        height={needClipY ? height : height * 2}\n      />\n    </clipPath>\n  );\n}\n","import * as React from 'react';\nimport { Key, MutableRefObject, PureComponent, ReactElement, ReactNode, useCallback, useRef, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { Series } from 'victory-vendor/d3-shape';\nimport { Props as RectangleProps } from '../shape/Rectangle';\nimport { Layer } from '../container/Layer';\nimport { ErrorBarDataItem, ErrorBarDataPointFormatter } from './ErrorBar';\nimport { Cell } from '../component/Cell';\nimport { LabelList } from '../component/LabelList';\nimport { interpolate, isNan, mathSign } from '../util/DataUtils';\nimport { filterProps, findAllByType } from '../util/ReactUtils';\nimport { Global } from '../util/Global';\nimport {\n  BarPositionPosition,\n  getBaseValueOfBar,\n  getCateCoordinateOfBar,\n  getNormalizedStackId,\n  getTooltipNameProp,\n  getValueByDataKey,\n  StackId,\n  truncateByDomain,\n} from '../util/ChartUtils';\nimport {\n  ActiveShape,\n  adaptEventsOfChild,\n  AnimationDuration,\n  AnimationTiming,\n  ChartOffsetInternal,\n  Coordinate,\n  DataKey,\n  LegendType,\n  PresentationAttributesAdaptChildEvent,\n  TickItem,\n  TooltipType,\n} from '../util/types';\nimport { ImplicitLabelType } from '../component/Label';\nimport { BarRectangle, BarRectangleProps, MinPointSize, minPointSizeCallback } from '../util/BarUtils';\nimport type { LegendPayload } from '../component/DefaultLegendContent';\nimport {\n  useMouseClickItemDispatch,\n  useMouseEnterItemDispatch,\n  useMouseLeaveItemDispatch,\n} from '../context/tooltipContext';\nimport { TooltipPayloadConfiguration } from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { SetErrorBarContext } from '../context/ErrorBarContext';\nimport { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';\nimport { useChartLayout } from '../context/chartLayoutContext';\nimport { selectBarRectangles } from '../state/selectors/barSelectors';\nimport { BaseAxisWithScale } from '../state/selectors/axisSelectors';\nimport { useAppSelector } from '../state/hooks';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { selectActiveTooltipDataKey, selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';\nimport { SetLegendPayload } from '../state/SetLegendPayload';\nimport { useAnimationId } from '../util/useAnimationId';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';\nimport { BarSettings } from '../state/types/BarSettings';\nimport { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { JavascriptAnimate } from '../animation/JavascriptAnimate';\n\ntype Rectangle = {\n  x: number | null;\n  y: number | null;\n  width: number;\n  height: number;\n};\n\nexport interface BarRectangleItem extends RectangleProps {\n  value: number | [number, number];\n  /** the coordinate of background rectangle */\n  background?: Rectangle;\n  tooltipPosition: Coordinate;\n  readonly payload?: any;\n  // These are inherited from RectangleProps, but we need to redefine them here and make non-nullable\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n}\n\nexport interface BarProps {\n  className?: string;\n  index?: Key;\n  xAxisId?: string | number;\n  yAxisId?: string | number;\n  stackId?: StackId;\n  barSize?: string | number;\n  unit?: string | number;\n  name?: string | number;\n  dataKey?: DataKey<any>;\n  tooltipType?: TooltipType;\n  legendType?: LegendType;\n  minPointSize?: MinPointSize;\n  maxBarSize?: number;\n  hide?: boolean;\n  shape?: ActiveShape<BarProps, SVGPathElement>;\n  activeBar?: ActiveShape<BarProps, SVGPathElement>;\n  background?: ActiveShape<BarProps, SVGPathElement>;\n  radius?: number | [number, number, number, number];\n\n  onAnimationStart?: () => void;\n  onAnimationEnd?: () => void;\n\n  isAnimationActive?: boolean;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n  id?: string;\n  label?: ImplicitLabelType;\n}\n\ntype BarMouseEvent = (\n  data: BarRectangleItem,\n  index: number,\n  event: React.MouseEvent<SVGPathElement, MouseEvent>,\n) => void;\n\ninterface BarEvents {\n  onClick: BarMouseEvent;\n  onMouseEnter: BarMouseEvent;\n  onMouseLeave: BarMouseEvent;\n  onMouseMove: BarMouseEvent;\n}\n\ntype InternalBarProps = {\n  /*\n   * Injected from Redux store\n   */\n  layout: 'horizontal' | 'vertical';\n  data: ReadonlyArray<BarRectangleItem> | undefined;\n\n  /*\n   * Provided by user, has defaults\n   */\n  xAxisId: string | number;\n  yAxisId: string | number;\n  hide: boolean;\n  legendType: LegendType;\n  minPointSize: MinPointSize;\n  activeBar: ActiveShape<BarProps, SVGPathElement>;\n  isAnimationActive: boolean;\n  animationBegin: number;\n  animationDuration: AnimationDuration;\n  animationEasing: AnimationTiming;\n\n  /*\n   * Provided by user\n   */\n  needClip?: boolean;\n  className?: string;\n  index?: Key;\n  stackId?: string | number;\n  barSize?: string | number;\n  unit?: string | number;\n  name?: string | number;\n  dataKey?: DataKey<any>;\n  tooltipType?: TooltipType;\n  maxBarSize?: number;\n  shape?: ActiveShape<BarProps, SVGPathElement>;\n  background?: ActiveShape<BarProps, SVGPathElement>;\n  radius?: number | [number, number, number, number];\n\n  onAnimationStart?: () => void;\n  onAnimationEnd?: () => void;\n\n  /**\n   * Internally, ID is required, either from outside or autogenerated.\n   */\n  id: string;\n  label?: ImplicitLabelType;\n};\n\ntype BarSvgProps = Omit<\n  PresentationAttributesAdaptChildEvent<BarRectangleItem, SVGPathElement>,\n  'radius' | 'name' | 'ref'\n>;\n\nexport type Props = Partial<BarEvents> & BarProps & Omit<BarSvgProps, keyof BarEvents>;\n\ntype InternalProps = BarSvgProps & InternalBarProps;\n\nconst computeLegendPayloadFromBarData = (props: Props): ReadonlyArray<LegendPayload> => {\n  const { dataKey, name, fill, legendType, hide } = props;\n  return [\n    {\n      inactive: hide,\n      dataKey,\n      type: legendType,\n      color: fill,\n      value: getTooltipNameProp(name, dataKey),\n      payload: props,\n    },\n  ];\n};\n\nfunction getTooltipEntrySettings(props: Props): TooltipPayloadConfiguration {\n  const { dataKey, stroke, strokeWidth, fill, name, hide, unit } = props;\n  return {\n    dataDefinedOnItem: undefined,\n    positions: undefined,\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      dataKey,\n      nameKey: undefined,\n      name: getTooltipNameProp(name, dataKey),\n      hide,\n      type: props.tooltipType,\n      color: props.fill,\n      unit,\n    },\n  };\n}\n\ntype BarBackgroundProps = {\n  background?: ActiveShape<BarProps, SVGPathElement>;\n  data: ReadonlyArray<BarRectangleItem> | undefined;\n  dataKey: DataKey<any> | undefined;\n  allOtherBarProps: Props;\n};\n\nfunction BarBackground(props: BarBackgroundProps) {\n  const activeIndex = useAppSelector(selectActiveTooltipIndex);\n\n  const { data, dataKey, background: backgroundFromProps, allOtherBarProps } = props;\n\n  const {\n    onMouseEnter: onMouseEnterFromProps,\n    onMouseLeave: onMouseLeaveFromProps,\n    onClick: onItemClickFromProps,\n    ...restOfAllOtherProps\n  } = allOtherBarProps;\n\n  // @ts-expect-error bar mouse events are not compatible with recharts mouse events\n  const onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, dataKey);\n  // @ts-expect-error bar mouse events are not compatible with recharts mouse events\n  const onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);\n  // @ts-expect-error bar mouse events are not compatible with recharts mouse events\n  const onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, dataKey);\n  if (!backgroundFromProps || data == null) {\n    return null;\n  }\n\n  const backgroundProps = filterProps(backgroundFromProps, false);\n\n  return (\n    <>\n      {data.map((entry: BarRectangleItem, i: number) => {\n        const { value, background: backgroundFromDataEntry, tooltipPosition, ...rest } = entry;\n\n        if (!backgroundFromDataEntry) {\n          return null;\n        }\n\n        // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!\n        const onMouseEnter = onMouseEnterFromContext(entry, i);\n        // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!\n        const onMouseLeave = onMouseLeaveFromContext(entry, i);\n        // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!\n        const onClick = onClickFromContext(entry, i);\n\n        const barRectangleProps: BarRectangleProps = {\n          option: backgroundFromProps,\n          isActive: String(i) === activeIndex,\n          ...rest,\n          // @ts-expect-error BarRectangle props do not accept `fill` property.\n          fill: '#eee',\n          ...backgroundFromDataEntry,\n          ...backgroundProps,\n          ...adaptEventsOfChild(restOfAllOtherProps, entry, i),\n          onMouseEnter,\n          onMouseLeave,\n          onClick,\n          dataKey,\n          index: i,\n          className: 'recharts-bar-background-rectangle',\n        };\n\n        return <BarRectangle key={`background-bar-${i}`} {...barRectangleProps} />;\n      })}\n    </>\n  );\n}\n\ntype BarRectanglesProps = InternalProps & {\n  data: ReadonlyArray<BarRectangleItem> | undefined;\n};\n\nfunction BarRectangles({\n  data,\n  props,\n  showLabels,\n}: {\n  data: ReadonlyArray<BarRectangleItem> | undefined;\n  props: BarRectanglesProps;\n  showLabels: boolean;\n}) {\n  const { id, ...baseProps } = svgPropertiesNoEvents(props);\n  const { shape, dataKey, activeBar } = props;\n\n  const activeIndex = useAppSelector(selectActiveTooltipIndex);\n  const activeDataKey = useAppSelector(selectActiveTooltipDataKey);\n\n  const {\n    onMouseEnter: onMouseEnterFromProps,\n    onClick: onItemClickFromProps,\n    onMouseLeave: onMouseLeaveFromProps,\n    ...restOfAllOtherProps\n  } = props;\n\n  // @ts-expect-error bar mouse events are not compatible with recharts mouse events\n  const onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, dataKey);\n  // @ts-expect-error bar mouse events are not compatible with recharts mouse events\n  const onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);\n  // @ts-expect-error bar mouse events are not compatible with recharts mouse events\n  const onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, dataKey);\n\n  if (!data) {\n    return null;\n  }\n\n  return (\n    <>\n      {data.map((entry: BarRectangleItem, i: number) => {\n        /*\n         * Bars support stacking, meaning that there can be multiple bars at the same x value.\n         * With Tooltip shared=false we only want to highlight the currently active Bar, not all.\n         *\n         * Also, if the tooltip is shared, we want to highlight all bars at the same x value\n         * regardless of the dataKey.\n         *\n         * With shared Tooltip, the activeDataKey is undefined.\n         */\n        const isActive: boolean =\n          activeBar && String(i) === activeIndex && (activeDataKey == null || dataKey === activeDataKey);\n        const option = isActive ? activeBar : shape;\n        // ts-expect-error event types are not compatible - this only fires with strictNullChecks on\n        const barRectangleProps: BarRectangleProps = {\n          ...baseProps,\n          ...entry,\n          isActive,\n          option,\n          index: i,\n          dataKey,\n        };\n\n        return (\n          <Layer\n            className=\"recharts-bar-rectangle\"\n            {...adaptEventsOfChild(restOfAllOtherProps, entry, i)}\n            // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!\n            onMouseEnter={onMouseEnterFromContext(entry, i)}\n            // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!\n            onMouseLeave={onMouseLeaveFromContext(entry, i)}\n            // @ts-expect-error BarRectangleItem type definition says it's missing properties, but I can see them present in debugger!\n            onClick={onClickFromContext(entry, i)}\n            // https://github.com/recharts/recharts/issues/5415\n            // eslint-disable-next-line react/no-array-index-key\n            key={`rectangle-${entry?.x}-${entry?.y}-${entry?.value}-${i}`}\n          >\n            <BarRectangle {...barRectangleProps} />\n          </Layer>\n        );\n      })}\n      {showLabels && LabelList.renderCallByParent(props, data)}\n    </>\n  );\n}\n\nfunction RectanglesWithAnimation({\n  props,\n  previousRectanglesRef,\n}: {\n  props: InternalProps;\n  previousRectanglesRef: MutableRefObject<null | ReadonlyArray<BarRectangleItem>>;\n}) {\n  const {\n    data,\n    layout,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    onAnimationEnd,\n    onAnimationStart,\n  } = props;\n  const prevData = previousRectanglesRef.current;\n  const animationId = useAnimationId(props, 'recharts-bar-');\n\n  const [isAnimating, setIsAnimating] = useState(false);\n\n  const handleAnimationEnd = useCallback(() => {\n    if (typeof onAnimationEnd === 'function') {\n      onAnimationEnd();\n    }\n    setIsAnimating(false);\n  }, [onAnimationEnd]);\n\n  const handleAnimationStart = useCallback(() => {\n    if (typeof onAnimationStart === 'function') {\n      onAnimationStart();\n    }\n    setIsAnimating(true);\n  }, [onAnimationStart]);\n  return (\n    <JavascriptAnimate\n      begin={animationBegin}\n      duration={animationDuration}\n      isActive={isAnimationActive}\n      easing={animationEasing}\n      onAnimationEnd={handleAnimationEnd}\n      onAnimationStart={handleAnimationStart}\n      key={animationId}\n    >\n      {(t: number) => {\n        const stepData =\n          t === 1\n            ? data\n            : data?.map((entry: BarRectangleItem, index: number): BarRectangleItem => {\n                const prev = prevData && prevData[index];\n\n                if (prev) {\n                  return {\n                    ...entry,\n                    x: interpolate(prev.x, entry.x, t),\n                    y: interpolate(prev.y, entry.y, t),\n                    width: interpolate(prev.width, entry.width, t),\n                    height: interpolate(prev.height, entry.height, t),\n                  };\n                }\n\n                if (layout === 'horizontal') {\n                  const h = interpolate(0, entry.height, t);\n\n                  return {\n                    ...entry,\n                    y: entry.y + entry.height - h,\n                    height: h,\n                  };\n                }\n\n                const w = interpolate(0, entry.width, t);\n\n                return { ...entry, width: w };\n              });\n\n        if (t > 0) {\n          // eslint-disable-next-line no-param-reassign\n          previousRectanglesRef.current = stepData ?? null;\n        }\n        if (stepData == null) {\n          return null;\n        }\n        return (\n          <Layer>\n            <BarRectangles props={props} data={stepData} showLabels={!isAnimating} />\n          </Layer>\n        );\n      }}\n    </JavascriptAnimate>\n  );\n}\n\nfunction RenderRectangles(props: InternalProps) {\n  const { data, isAnimationActive } = props;\n  const previousRectanglesRef = useRef<ReadonlyArray<BarRectangleItem> | null>(null);\n\n  if (\n    isAnimationActive &&\n    data &&\n    data.length &&\n    (previousRectanglesRef.current == null || previousRectanglesRef.current !== data)\n  ) {\n    return <RectanglesWithAnimation previousRectanglesRef={previousRectanglesRef} props={props} />;\n  }\n\n  return <BarRectangles props={props} data={data} showLabels />;\n}\n\nconst defaultMinPointSize: number = 0;\n\nconst errorBarDataPointFormatter: ErrorBarDataPointFormatter = (\n  dataPoint: BarRectangleItem,\n  dataKey,\n): ErrorBarDataItem => {\n  /**\n   * if the value coming from `selectBarRectangles` is an array then this is a stacked bar chart.\n   * arr[1] represents end value of the bar since the data is in the form of [startValue, endValue].\n   * */\n  const value = Array.isArray(dataPoint.value) ? dataPoint.value[1] : dataPoint.value;\n  return {\n    x: dataPoint.x,\n    y: dataPoint.y,\n    value,\n    // @ts-expect-error getValueByDataKey does not validate the output type\n    errorVal: getValueByDataKey(dataPoint, dataKey),\n  };\n};\n\nclass BarWithState extends PureComponent<InternalProps> {\n  render() {\n    const { hide, data, dataKey, className, xAxisId, yAxisId, needClip, background, id } = this.props;\n    if (hide) {\n      return null;\n    }\n\n    const layerClass = clsx('recharts-bar', className);\n    const clipPathId = id;\n\n    return (\n      <Layer className={layerClass} id={id}>\n        {needClip && (\n          <defs>\n            <GraphicalItemClipPath clipPathId={clipPathId} xAxisId={xAxisId} yAxisId={yAxisId} />\n          </defs>\n        )}\n        <Layer className=\"recharts-bar-rectangles\" clipPath={needClip ? `url(#clipPath-${clipPathId})` : undefined}>\n          <BarBackground data={data} dataKey={dataKey} background={background} allOtherBarProps={this.props} />\n          <RenderRectangles {...this.props} />\n        </Layer>\n        {this.props.children}\n      </Layer>\n    );\n  }\n}\n\nconst defaultBarProps = {\n  activeBar: false,\n  animationBegin: 0,\n  animationDuration: 400,\n  animationEasing: 'ease',\n  hide: false,\n  isAnimationActive: !Global.isSsr,\n  legendType: 'rect',\n  minPointSize: defaultMinPointSize,\n  xAxisId: 0,\n  yAxisId: 0,\n} as const satisfies Partial<Props>;\n\ntype BarImplProps = Omit<InternalBarProps, 'layout' | 'data'> & { children?: ReactNode };\n\nfunction BarImpl(props: BarImplProps) {\n  const {\n    xAxisId,\n    yAxisId,\n    hide,\n    legendType,\n    minPointSize,\n    activeBar,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    isAnimationActive,\n  } = props;\n\n  const { needClip } = useNeedsClip(xAxisId, yAxisId);\n  const layout = useChartLayout();\n\n  const isPanorama = useIsPanorama();\n\n  const cells = findAllByType(props.children, Cell);\n\n  const rects = useAppSelector(state => selectBarRectangles(state, xAxisId, yAxisId, isPanorama, props.id, cells));\n\n  if (layout !== 'vertical' && layout !== 'horizontal') {\n    return null;\n  }\n\n  let errorBarOffset: number;\n  const firstDataPoint = rects?.[0];\n  if (firstDataPoint == null || firstDataPoint.height == null || firstDataPoint.width == null) {\n    errorBarOffset = 0;\n  } else {\n    errorBarOffset = layout === 'vertical' ? firstDataPoint.height / 2 : firstDataPoint.width / 2;\n  }\n\n  return (\n    <SetErrorBarContext\n      xAxisId={xAxisId}\n      yAxisId={yAxisId}\n      data={rects}\n      dataPointFormatter={errorBarDataPointFormatter}\n      errorBarOffset={errorBarOffset}\n    >\n      <BarWithState\n        {...props}\n        layout={layout}\n        needClip={needClip}\n        data={rects}\n        xAxisId={xAxisId}\n        yAxisId={yAxisId}\n        hide={hide}\n        legendType={legendType}\n        minPointSize={minPointSize}\n        activeBar={activeBar}\n        animationBegin={animationBegin}\n        animationDuration={animationDuration}\n        animationEasing={animationEasing}\n        isAnimationActive={isAnimationActive}\n      />\n    </SetErrorBarContext>\n  );\n}\n\nexport function computeBarRectangles({\n  layout,\n  barSettings: { dataKey, minPointSize: minPointSizeProp },\n  pos,\n  bandSize,\n  xAxis,\n  yAxis,\n  xAxisTicks,\n  yAxisTicks,\n  stackedData,\n  displayedData,\n  offset,\n  cells,\n}: {\n  layout: 'horizontal' | 'vertical';\n  barSettings: BarSettings;\n  pos: BarPositionPosition;\n  bandSize: number;\n  xAxis: BaseAxisWithScale;\n  yAxis: BaseAxisWithScale;\n  xAxisTicks: TickItem[];\n  yAxisTicks: TickItem[];\n  stackedData: Series<Record<number, number>, DataKey<any>> | undefined;\n  offset: ChartOffsetInternal;\n  displayedData: any[];\n  cells: ReadonlyArray<ReactElement> | undefined;\n}): ReadonlyArray<BarRectangleItem> | undefined {\n  const numericAxis = layout === 'horizontal' ? yAxis : xAxis;\n  // @ts-expect-error this assumes that the domain is always numeric, but doesn't check for it\n  const stackedDomain: ReadonlyArray<number> = stackedData ? numericAxis.scale.domain() : null;\n  const baseValue = getBaseValueOfBar({ numericAxis });\n\n  return displayedData\n    .map((entry, index): BarRectangleItem | null => {\n      let value, x: number | null, y, width, height, background: Rectangle;\n\n      if (stackedData) {\n        // we don't need to use dataStartIndex here, because stackedData is already sliced from the selector\n        value = truncateByDomain(stackedData[index], stackedDomain);\n      } else {\n        value = getValueByDataKey(entry, dataKey);\n\n        if (!Array.isArray(value)) {\n          value = [baseValue, value];\n        }\n      }\n\n      const minPointSize = minPointSizeCallback(minPointSizeProp, defaultMinPointSize)(value[1], index);\n\n      if (layout === 'horizontal') {\n        const [baseValueScale, currentValueScale] = [yAxis.scale(value[0]), yAxis.scale(value[1])];\n        x = getCateCoordinateOfBar({\n          axis: xAxis,\n          ticks: xAxisTicks,\n          bandSize,\n          offset: pos.offset,\n          entry,\n          index,\n        });\n        y = currentValueScale ?? baseValueScale ?? undefined;\n        width = pos.size;\n        const computedHeight = baseValueScale - currentValueScale;\n        height = isNan(computedHeight) ? 0 : computedHeight;\n        background = { x, y: offset.top, width, height: offset.height };\n\n        if (Math.abs(minPointSize) > 0 && Math.abs(height) < Math.abs(minPointSize)) {\n          const delta = mathSign(height || minPointSize) * (Math.abs(minPointSize) - Math.abs(height));\n\n          y -= delta;\n          height += delta;\n        }\n      } else {\n        const [baseValueScale, currentValueScale] = [xAxis.scale(value[0]), xAxis.scale(value[1])];\n        x = baseValueScale;\n        y = getCateCoordinateOfBar({\n          axis: yAxis,\n          ticks: yAxisTicks,\n          bandSize,\n          offset: pos.offset,\n          entry,\n          index,\n        });\n        width = currentValueScale - baseValueScale;\n        height = pos.size;\n        background = { x: offset.left, y, width: offset.width, height };\n\n        if (Math.abs(minPointSize) > 0 && Math.abs(width) < Math.abs(minPointSize)) {\n          const delta = mathSign(width || minPointSize) * (Math.abs(minPointSize) - Math.abs(width));\n          width += delta;\n        }\n      }\n\n      if (x == null || y == null || width == null || height == null) {\n        return null;\n      }\n\n      const barRectangleItem: BarRectangleItem = {\n        ...entry,\n        x,\n        y,\n        width,\n        height,\n        value: stackedData ? value : value[1],\n        payload: entry,\n        background,\n        tooltipPosition: { x: x + width / 2, y: y + height / 2 },\n        ...(cells && cells[index] && cells[index].props),\n      } satisfies BarRectangleItem;\n\n      return barRectangleItem;\n    })\n    .filter(Boolean);\n}\n\nexport function Bar(outsideProps: Props) {\n  const props = resolveDefaultProps(outsideProps, defaultBarProps);\n  const isPanorama = useIsPanorama();\n  // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.\n  return (\n    <RegisterGraphicalItemId id={props.id} type=\"bar\">\n      {id => (\n        <>\n          <SetLegendPayload legendPayload={computeLegendPayloadFromBarData(props)} />\n          <SetTooltipEntrySettings fn={getTooltipEntrySettings} args={props} />\n          <SetCartesianGraphicalItem\n            type=\"bar\"\n            id={id}\n            // Bar does not allow setting data directly on the graphical item (why?)\n            data={undefined}\n            xAxisId={props.xAxisId}\n            yAxisId={props.yAxisId}\n            zAxisId={0}\n            dataKey={props.dataKey}\n            stackId={getNormalizedStackId(props.stackId)}\n            hide={props.hide}\n            barSize={props.barSize}\n            minPointSize={props.minPointSize}\n            maxBarSize={props.maxBarSize}\n            isPanorama={isPanorama}\n          />\n          <BarImpl {...props} id={id} />\n        </>\n      )}\n    </RegisterGraphicalItemId>\n  );\n}\nBar.displayName = 'Bar';\n","import { createSelector } from 'reselect';\nimport { ReactElement } from 'react';\nimport { Series } from 'victory-vendor/d3-shape';\nimport { RechartsRootState } from '../store';\nimport {\n  BaseAxisWithScale,\n  selectAxisWithScale,\n  selectCartesianAxisSize,\n  selectStackGroups,\n  selectTicksOfGraphicalItem,\n  selectUnfilteredCartesianItems,\n} from './axisSelectors';\nimport { AxisId } from '../cartesianAxisSlice';\nimport { getPercentValue, isNullish } from '../../util/DataUtils';\nimport { BarPositionPosition, getBandSizeOfAxis, StackId } from '../../util/ChartUtils';\nimport { ChartOffsetInternal, DataKey, LayoutType, TickItem } from '../../util/types';\nimport { BarRectangleItem, computeBarRectangles } from '../../cartesian/Bar';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { ChartData } from '../chartDataSlice';\nimport { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport { selectBarCategoryGap, selectBarGap, selectRootBarSize, selectRootMaxBarSize } from './rootPropsSelectors';\nimport { isWellBehavedNumber } from '../../util/isWellBehavedNumber';\nimport { getStackSeriesIdentifier } from '../../util/stacks/getStackSeriesIdentifier';\nimport {\n  AllStackGroups,\n  StackDataPoint,\n  StackGroup,\n  StackSeries,\n  StackSeriesIdentifier,\n} from '../../util/stacks/stackTypes';\nimport { DefinitelyStackedGraphicalItem, isStacked, MaybeStackedGraphicalItem } from '../types/StackedGraphicalItem';\nimport { BarSettings } from '../types/BarSettings';\nimport { GraphicalItemId } from '../graphicalItemsSlice';\n\nconst pickXAxisId = (_state: RechartsRootState, xAxisId: AxisId): AxisId => xAxisId;\n\nconst pickYAxisId = (_state: RechartsRootState, _xAxisId: AxisId, yAxisId: AxisId): AxisId => yAxisId;\n\nconst pickIsPanorama = (_state: RechartsRootState, _xAxisId: AxisId, _yAxisId: AxisId, isPanorama: boolean): boolean =>\n  isPanorama;\n\nconst pickBarId = (\n  _state: RechartsRootState,\n  _xAxisId: AxisId,\n  _yAxisId: AxisId,\n  _isPanorama: boolean,\n  id: GraphicalItemId,\n): GraphicalItemId => id;\n\nconst selectSynchronisedBarSettings: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => BarSettings | undefined = createSelector(\n  [selectUnfilteredCartesianItems, pickBarId],\n  (graphicalItems, id: GraphicalItemId) =>\n    graphicalItems.filter(item => item.type === 'bar').find(item => item.id === id),\n);\n\nexport const selectMaxBarSize: (\n  _state: RechartsRootState,\n  _xAxisId: AxisId,\n  _yAxisId: AxisId,\n  _isPanorama: boolean,\n  id: GraphicalItemId,\n) => number | undefined = createSelector(\n  [selectSynchronisedBarSettings],\n  (barSettings: BarSettings | undefined) => barSettings?.maxBarSize,\n);\n\nconst pickCells = (\n  _state: RechartsRootState,\n  _xAxisId: AxisId,\n  _yAxisId: AxisId,\n  _isPanorama: boolean,\n  _id: GraphicalItemId,\n  cells: ReadonlyArray<ReactElement> | undefined,\n): ReadonlyArray<ReactElement> | undefined => cells;\n\nconst getBarSize = (\n  globalSize: number | undefined,\n  totalSize: number | undefined,\n  selfSize: number | string | undefined,\n): number | undefined => {\n  const barSize: string | number | undefined = selfSize ?? globalSize;\n\n  if (isNullish(barSize)) {\n    return undefined;\n  }\n  return getPercentValue(barSize, totalSize, 0);\n};\n\nexport const selectAllVisibleBars: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n) => ReadonlyArray<BarSettings> = createSelector(\n  [selectChartLayout, selectUnfilteredCartesianItems, pickXAxisId, pickYAxisId, pickIsPanorama],\n  (layout: LayoutType, allItems, xAxisId, yAxisId, isPanorama) =>\n    allItems\n      .filter(i => {\n        if (layout === 'horizontal') {\n          return i.xAxisId === xAxisId;\n        }\n        return i.yAxisId === yAxisId;\n      })\n      .filter(i => i.isPanorama === isPanorama)\n      .filter(i => i.hide === false)\n      .filter(i => i.type === 'bar'),\n);\n\ntype BarCategory = {\n  stackId: StackId | undefined;\n  /**\n   * List of dataKeys of items stacked at this position.\n   * All of these Bars are either sharing the same stackId,\n   * or this is an array with one Bar because it has no stackId defined.\n   *\n   * This structure limits us to having one dataKey only once per stack which I think is reasonable.\n   * People who want to have the same data twice can duplicate their data to have two distinct dataKeys.\n   */\n  dataKeys: ReadonlyArray<DataKey<any>>;\n  /**\n   * Width (in horizontal chart) or height (in vertical chart) of this stack of items\n   */\n  barSize: number | undefined;\n};\n\nexport type SizeList = ReadonlyArray<BarCategory>;\n\nconst selectBarStackGroups = (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n): AllStackGroups | undefined => {\n  const layout = selectChartLayout(state);\n  if (layout === 'horizontal') {\n    return selectStackGroups(state, 'yAxis', yAxisId, isPanorama);\n  }\n  return selectStackGroups(state, 'xAxis', xAxisId, isPanorama);\n};\n\nexport const selectBarCartesianAxisSize = (state: RechartsRootState, xAxisId: AxisId, yAxisId: AxisId) => {\n  const layout = selectChartLayout(state);\n  if (layout === 'horizontal') {\n    return selectCartesianAxisSize(state, 'xAxis', xAxisId);\n  }\n  return selectCartesianAxisSize(state, 'yAxis', yAxisId);\n};\n\nexport const combineBarSizeList = (\n  allBars: ReadonlyArray<MaybeStackedGraphicalItem>,\n  globalSize: number | undefined,\n  totalSize: number | undefined,\n): SizeList | undefined => {\n  const initialValue: Record<StackId, Array<DefinitelyStackedGraphicalItem>> = {};\n\n  const stackedBars: ReadonlyArray<DefinitelyStackedGraphicalItem> = allBars.filter(isStacked);\n  const unstackedBars = allBars.filter(b => b.stackId == null);\n\n  const groupByStack: Record<StackId, Array<DefinitelyStackedGraphicalItem>> = stackedBars.reduce((acc, bar) => {\n    if (!acc[bar.stackId]) {\n      acc[bar.stackId] = [];\n    }\n    acc[bar.stackId].push(bar);\n    return acc;\n  }, initialValue);\n\n  const stackedSizeList: SizeList = Object.entries(groupByStack).map(([stackId, bars]): BarCategory => {\n    const dataKeys = bars.map(b => b.dataKey);\n    const barSize: number | undefined = getBarSize(globalSize, totalSize, bars[0].barSize);\n    return { stackId, dataKeys, barSize };\n  });\n\n  const unstackedSizeList: SizeList = unstackedBars.map((b): BarCategory => {\n    const dataKeys = [b.dataKey].filter(dk => dk != null);\n    const barSize: number | undefined = getBarSize(globalSize, totalSize, b.barSize);\n    return { stackId: undefined, dataKeys, barSize };\n  });\n\n  return [...stackedSizeList, ...unstackedSizeList];\n};\nexport const selectBarSizeList: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => SizeList | undefined = createSelector(\n  [selectAllVisibleBars, selectRootBarSize, selectBarCartesianAxisSize],\n  combineBarSizeList,\n);\n\nexport const selectBarBandSize: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => number | undefined = (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n): number | undefined => {\n  const barSettings: BarSettings | undefined = selectSynchronisedBarSettings(state, xAxisId, yAxisId, isPanorama, id);\n  if (barSettings == null) {\n    return undefined;\n  }\n  const layout = selectChartLayout(state);\n  const globalMaxBarSize: number | undefined = selectRootMaxBarSize(state);\n  const { maxBarSize: childMaxBarSize } = barSettings;\n  const maxBarSize: number | undefined = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;\n  let axis: BaseAxisWithScale | undefined, ticks: ReadonlyArray<TickItem> | undefined;\n  if (layout === 'horizontal') {\n    axis = selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);\n    ticks = selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);\n  } else {\n    axis = selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);\n    ticks = selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);\n  }\n  return getBandSizeOfAxis(axis, ticks, true) ?? maxBarSize ?? 0;\n};\n\nexport const selectAxisBandSize = (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n): number | undefined => {\n  const layout = selectChartLayout(state);\n  let axis: BaseAxisWithScale | undefined, ticks: ReadonlyArray<TickItem> | undefined;\n  if (layout === 'horizontal') {\n    axis = selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);\n    ticks = selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);\n  } else {\n    axis = selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);\n    ticks = selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);\n  }\n  return getBandSizeOfAxis(axis, ticks);\n};\n\nfunction getBarPositions(\n  barGap: string | number,\n  barCategoryGap: string | number,\n  bandSize: number,\n  sizeList: SizeList,\n  maxBarSize: number | undefined,\n): ReadonlyArray<BarWithPosition> | undefined {\n  const len = sizeList.length;\n  if (len < 1) {\n    return undefined;\n  }\n\n  let realBarGap = getPercentValue(barGap, bandSize, 0, true);\n\n  let result: ReadonlyArray<BarWithPosition>;\n  const initialValue: ReadonlyArray<BarWithPosition> = [];\n\n  // whether is barSize set by user\n  // Okay but why does it check only for the first element? What if the first element is set but others are not?\n  if (isWellBehavedNumber(sizeList[0].barSize)) {\n    let useFull = false;\n    let fullBarSize: number = bandSize / len;\n    let sum = sizeList.reduce((res, entry) => res + (entry.barSize || 0), 0);\n    sum += (len - 1) * realBarGap;\n\n    if (sum >= bandSize) {\n      sum -= (len - 1) * realBarGap;\n      realBarGap = 0;\n    }\n    if (sum >= bandSize && fullBarSize > 0) {\n      useFull = true;\n      fullBarSize *= 0.9;\n      sum = len * fullBarSize;\n    }\n\n    const offset = ((bandSize - sum) / 2) >> 0;\n    let prev: BarPositionPosition = { offset: offset - realBarGap, size: 0 };\n\n    result = sizeList.reduce(\n      (res: ReadonlyArray<BarWithPosition>, entry: BarCategory): ReadonlyArray<BarWithPosition> => {\n        const newPosition: BarWithPosition = {\n          stackId: entry.stackId,\n          dataKeys: entry.dataKeys,\n          position: {\n            offset: prev.offset + prev.size + realBarGap,\n            size: useFull ? fullBarSize : (entry.barSize ?? 0),\n          },\n        };\n        const newRes: Array<BarWithPosition> = [...res, newPosition];\n\n        prev = newRes[newRes.length - 1].position;\n\n        return newRes;\n      },\n      initialValue,\n    );\n  } else {\n    const offset = getPercentValue(barCategoryGap, bandSize, 0, true);\n\n    if (bandSize - 2 * offset - (len - 1) * realBarGap <= 0) {\n      realBarGap = 0;\n    }\n\n    let originalSize = (bandSize - 2 * offset - (len - 1) * realBarGap) / len;\n    if (originalSize > 1) {\n      originalSize >>= 0;\n    }\n    const size = isWellBehavedNumber(maxBarSize) ? Math.min(originalSize, maxBarSize) : originalSize;\n    result = sizeList.reduce(\n      (res: ReadonlyArray<BarWithPosition>, entry: BarCategory, i): ReadonlyArray<BarWithPosition> => [\n        ...res,\n        {\n          stackId: entry.stackId,\n          dataKeys: entry.dataKeys,\n          position: {\n            offset: offset + (originalSize + realBarGap) * i + (originalSize - size) / 2,\n            size,\n          },\n        },\n      ],\n      initialValue,\n    );\n  }\n\n  return result;\n}\n\nexport type BarWithPosition = {\n  stackId: StackId | undefined;\n  /**\n   * List of dataKeys of items stacked at this position.\n   * All of these Bars are either sharing the same stackId,\n   * or this is an array with one Bar because it has no stackId defined.\n   *\n   * This structure limits us to having one dataKey only once per stack which I think is reasonable.\n   * People who want to have the same data twice can duplicate their data to have two distinct dataKeys.\n   */\n  dataKeys: ReadonlyArray<DataKey<any>>;\n  /**\n   * Position of this stack in absolute pixels measured from the start of the chart\n   */\n  position: BarPositionPosition;\n};\n\nexport const combineAllBarPositions = (\n  sizeList: SizeList,\n  globalMaxBarSize: number,\n  barGap: string | number,\n  barCategoryGap: string | number,\n  barBandSize: number,\n  bandSize: number,\n  childMaxBarSize: number | undefined,\n): ReadonlyArray<BarWithPosition> | undefined => {\n  const maxBarSize: number | undefined = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;\n\n  let allBarPositions: ReadonlyArray<BarWithPosition> | undefined = getBarPositions(\n    barGap,\n    barCategoryGap,\n    barBandSize !== bandSize ? barBandSize : bandSize,\n    sizeList,\n    maxBarSize,\n  );\n\n  if (barBandSize !== bandSize && allBarPositions != null) {\n    allBarPositions = allBarPositions.map(pos => ({\n      ...pos,\n      position: { ...pos.position, offset: pos.position.offset - barBandSize / 2 },\n    }));\n  }\n\n  return allBarPositions;\n};\n\nexport const selectAllBarPositions: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => ReadonlyArray<BarWithPosition> | undefined = createSelector(\n  [\n    selectBarSizeList,\n    selectRootMaxBarSize,\n    selectBarGap,\n    selectBarCategoryGap,\n    selectBarBandSize,\n    selectAxisBandSize,\n    selectMaxBarSize,\n  ],\n  combineAllBarPositions,\n);\n\nconst selectXAxisWithScale = (state: RechartsRootState, xAxisId: AxisId, _yAxisId: AxisId, isPanorama: boolean) =>\n  selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);\n\nconst selectYAxisWithScale = (state: RechartsRootState, _xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean) =>\n  selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);\n\nconst selectXAxisTicks = (state: RechartsRootState, xAxisId: AxisId, _yAxisId: AxisId, isPanorama: boolean) =>\n  selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);\n\nconst selectYAxisTicks = (state: RechartsRootState, _xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean) =>\n  selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);\n\nexport const selectBarPosition: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  _id: GraphicalItemId,\n) => BarPositionPosition | undefined = createSelector(\n  [selectAllBarPositions, selectSynchronisedBarSettings],\n  (allBarPositions: ReadonlyArray<BarWithPosition>, barSettings) => {\n    if (allBarPositions == null || barSettings == null) {\n      return undefined;\n    }\n    const position = allBarPositions.find(\n      (p: BarWithPosition) =>\n        p.stackId === barSettings.stackId && barSettings.dataKey != null && p.dataKeys.includes(barSettings.dataKey),\n    );\n    if (position == null) {\n      return undefined;\n    }\n    return position.position;\n  },\n);\n\nexport const combineStackedData = (\n  stackGroups: AllStackGroups | undefined,\n  barSettings: MaybeStackedGraphicalItem | undefined,\n): StackSeries | undefined => {\n  const stackSeriesIdentifier = getStackSeriesIdentifier(barSettings);\n  if (!stackGroups || stackSeriesIdentifier == null || barSettings == null) {\n    return undefined;\n  }\n  const { stackId } = barSettings;\n  if (stackId == null) {\n    return undefined;\n  }\n  const stackGroup: StackGroup = stackGroups[stackId];\n  if (!stackGroup) {\n    return undefined;\n  }\n  const { stackedData }: StackGroup = stackGroup;\n  if (!stackedData) {\n    return undefined;\n  }\n  return stackedData.find(sd => sd.key === stackSeriesIdentifier);\n};\n\nconst selectStackedDataOfItem: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => Series<StackDataPoint, StackSeriesIdentifier> | undefined = createSelector(\n  [selectBarStackGroups, selectSynchronisedBarSettings],\n  combineStackedData,\n);\n\nexport const selectBarRectangles: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => ReadonlyArray<BarRectangleItem> | undefined = createSelector(\n  [\n    selectChartOffsetInternal,\n    selectXAxisWithScale,\n    selectYAxisWithScale,\n    selectXAxisTicks,\n    selectYAxisTicks,\n    selectBarPosition,\n    selectChartLayout,\n    selectChartDataWithIndexesIfNotInPanorama,\n    selectAxisBandSize,\n    selectStackedDataOfItem,\n    selectSynchronisedBarSettings,\n    pickCells,\n  ],\n  (\n    offset: ChartOffsetInternal,\n    xAxis: BaseAxisWithScale,\n    yAxis: BaseAxisWithScale,\n    xAxisTicks,\n    yAxisTicks,\n    pos: BarPositionPosition | undefined,\n    layout: LayoutType,\n    { chartData, dataStartIndex, dataEndIndex },\n    bandSize,\n    stackedData,\n    barSettings: BarSettings,\n    cells,\n  ): ReadonlyArray<BarRectangleItem> | undefined => {\n    if (\n      barSettings == null ||\n      pos == null ||\n      (layout !== 'horizontal' && layout !== 'vertical') ||\n      xAxis == null ||\n      yAxis == null ||\n      xAxisTicks == null ||\n      yAxisTicks == null ||\n      bandSize == null\n    ) {\n      return undefined;\n    }\n    const { data } = barSettings;\n\n    let displayedData: ChartData | undefined;\n    if (data != null && data.length > 0) {\n      displayedData = data;\n    } else {\n      displayedData = chartData?.slice(dataStartIndex, dataEndIndex + 1);\n    }\n\n    if (displayedData == null) {\n      return undefined;\n    }\n\n    return computeBarRectangles({\n      layout,\n      barSettings,\n      pos,\n      bandSize,\n      xAxis,\n      yAxis,\n      xAxisTicks,\n      yAxisTicks,\n      stackedData,\n      displayedData,\n      offset,\n      cells,\n    });\n  },\n);\n","import { createSelector } from 'reselect';\nimport { ReactElement } from 'react';\nimport { Series } from 'victory-vendor/d3-shape';\nimport { computeRadialBarDataItems, RadialBarDataItem } from '../../polar/RadialBar';\nimport { selectChartDataAndAlwaysIgnoreIndexes, selectChartDataWithIndexes } from './dataSelectors';\nimport { RechartsRootState } from '../store';\nimport { ChartDataState } from '../chartDataSlice';\nimport { AxisId } from '../cartesianAxisSlice';\nimport { LayoutType, LegendType, PolarViewBoxRequired, TickItem } from '../../util/types';\nimport { selectPolarAxisScale, selectPolarAxisTicks, selectPolarGraphicalItemAxisTicks } from './polarScaleSelectors';\nimport { BaseAxisWithScale, combineStackGroups } from './axisSelectors';\nimport { selectAngleAxis, selectPolarViewBox, selectRadiusAxis } from './polarAxisSelectors';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport {\n  BarPositionPosition,\n  getBandSizeOfAxis,\n  getBaseValueOfBar,\n  isCategoricalAxis,\n  RechartsScale,\n} from '../../util/ChartUtils';\nimport {\n  BarWithPosition,\n  combineAllBarPositions,\n  combineBarSizeList,\n  combineStackedData,\n  SizeList,\n} from './barSelectors';\nimport {\n  selectBarCategoryGap,\n  selectBarGap,\n  selectRootBarSize,\n  selectRootMaxBarSize,\n  selectStackOffsetType,\n} from './rootPropsSelectors';\nimport { PolarGraphicalItemSettings } from '../graphicalItemsSlice';\nimport { PolarAxisType, selectPolarItemsSettings, selectUnfilteredPolarItems } from './polarSelectors';\nimport { AngleAxisSettings, RadiusAxisSettings } from '../polarAxisSlice';\nimport { LegendPayload } from '../../component/DefaultLegendContent';\nimport { isNullish } from '../../util/DataUtils';\n\nimport { AllStackGroups, StackDataPoint, StackSeries, StackSeriesIdentifier } from '../../util/stacks/stackTypes';\nimport { combineDisplayedStackedData, DisplayedStackedData } from './combiners/combineDisplayedStackedData';\nimport { selectTooltipAxis } from './selectTooltipAxis';\nimport { RadialBarSettings } from '../types/RadialBarSettings';\nimport { DefinitelyStackedGraphicalItem, isStacked } from '../types/StackedGraphicalItem';\n\nconst selectRadiusAxisForRadialBar = (state: RechartsRootState, radiusAxisId: AxisId): RadiusAxisSettings =>\n  selectRadiusAxis(state, radiusAxisId);\n\nconst selectRadiusAxisScaleForRadar = (state: RechartsRootState, radiusAxisId: AxisId): RechartsScale | undefined =>\n  selectPolarAxisScale(state, 'radiusAxis', radiusAxisId);\n\nexport const selectRadiusAxisWithScale: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n) => BaseAxisWithScale | undefined = createSelector(\n  [selectRadiusAxisForRadialBar, selectRadiusAxisScaleForRadar],\n  (axis: RadiusAxisSettings, scale: RechartsScale | undefined): BaseAxisWithScale | undefined => {\n    if (axis == null || scale == null) {\n      return undefined;\n    }\n    return { ...axis, scale };\n  },\n);\n\nexport const selectRadiusAxisTicks = (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  _angleAxisId: AxisId,\n  isPanorama: boolean,\n): ReadonlyArray<TickItem> | undefined => {\n  return selectPolarGraphicalItemAxisTicks(state, 'radiusAxis', radiusAxisId, isPanorama);\n};\n\nconst selectAngleAxisForRadialBar = (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n): AngleAxisSettings => selectAngleAxis(state, angleAxisId);\n\nconst selectAngleAxisScaleForRadialBar = (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n): RechartsScale | undefined => selectPolarAxisScale(state, 'angleAxis', angleAxisId);\n\nexport const selectAngleAxisWithScale: (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n) => BaseAxisWithScale | undefined = createSelector(\n  [selectAngleAxisForRadialBar, selectAngleAxisScaleForRadialBar],\n  (axis: AngleAxisSettings, scale: RechartsScale | undefined): BaseAxisWithScale | undefined => {\n    if (axis == null || scale == null) {\n      return undefined;\n    }\n    return { ...axis, scale };\n  },\n);\n\nconst selectAngleAxisTicks = (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  isPanorama: boolean,\n): ReadonlyArray<TickItem> | undefined => {\n  return selectPolarAxisTicks(state, 'angleAxis', angleAxisId, isPanorama);\n};\n\nconst pickRadialBarSettings = (\n  _state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  _angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n): RadialBarSettings => radialBarSettings;\n\nconst selectSynchronisedRadialBarSettings: (\n  state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  _angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n) => RadialBarSettings | undefined = createSelector(\n  [selectUnfilteredPolarItems, pickRadialBarSettings],\n  (graphicalItems, radialBarSettingsFromProps) => {\n    if (\n      graphicalItems.some(\n        pgis =>\n          pgis.type === 'radialBar' &&\n          radialBarSettingsFromProps.dataKey === pgis.dataKey &&\n          radialBarSettingsFromProps.stackId === pgis.stackId,\n      )\n    ) {\n      return radialBarSettingsFromProps;\n    }\n    return undefined;\n  },\n);\n\nexport const selectBandSizeOfPolarAxis: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  isPanorama: boolean,\n) => number | undefined = createSelector(\n  [selectChartLayout, selectRadiusAxisWithScale, selectRadiusAxisTicks, selectAngleAxisWithScale, selectAngleAxisTicks],\n  (\n    layout: LayoutType,\n    radiusAxis: BaseAxisWithScale | undefined,\n    radiusAxisTicks: ReadonlyArray<TickItem> | undefined,\n    angleAxis: BaseAxisWithScale | undefined,\n    angleAxisTicks: ReadonlyArray<TickItem> | undefined,\n  ) => {\n    if (isCategoricalAxis(layout, 'radiusAxis')) {\n      return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, false);\n    }\n    return getBandSizeOfAxis(angleAxis, angleAxisTicks, false);\n  },\n);\n\nexport const selectBaseValue: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n) => number | unknown = createSelector(\n  [selectAngleAxisWithScale, selectRadiusAxisWithScale, selectChartLayout],\n  (angleAxis, radiusAxis, layout) => {\n    const numericAxis = layout === 'radial' ? angleAxis : radiusAxis;\n    if (numericAxis == null || numericAxis.scale == null) {\n      return undefined;\n    }\n    return getBaseValueOfBar({ numericAxis });\n  },\n);\n\nconst pickCells = (\n  _state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  _angleAxisId: AxisId,\n  _radialBarSettings: RadialBarSettings,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => cells;\n\nconst pickAngleAxisId = (\n  _state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  _radialBarSettings: RadialBarSettings,\n  _cells: ReadonlyArray<ReactElement> | undefined,\n): AxisId => angleAxisId;\n\nconst pickRadiusAxisId = (\n  _state: RechartsRootState,\n  radiusAxisId: AxisId,\n  _angleAxisId: AxisId,\n  _radialBarSettings: RadialBarSettings,\n  _cells: ReadonlyArray<ReactElement> | undefined,\n): AxisId => radiusAxisId;\n\nexport const pickMaxBarSize = (\n  _state: RechartsRootState,\n  _radiusAxisId: AxisId,\n  _angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n  _cells: ReadonlyArray<ReactElement> | undefined,\n): number | undefined => radialBarSettings.maxBarSize;\n\nconst selectAllVisibleRadialBars: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => ReadonlyArray<RadialBarSettings> = createSelector(\n  [selectChartLayout, selectUnfilteredPolarItems, pickAngleAxisId, pickRadiusAxisId],\n  (\n    layout: LayoutType,\n    allItems: ReadonlyArray<PolarGraphicalItemSettings>,\n    angleAxisId: AxisId,\n    radiusAxisId: AxisId,\n  ): ReadonlyArray<RadialBarSettings> => {\n    return allItems\n      .filter(i => {\n        if (layout === 'centric') {\n          return i.angleAxisId === angleAxisId;\n        }\n        return i.radiusAxisId === radiusAxisId;\n      })\n      .filter(i => i.hide === false)\n      .filter(i => i.type === 'radialBar');\n  },\n);\n\n/**\n * The generator never returned the totalSize which means that barSize in polar chart can not support percent values.\n * We can add that if we want to I suppose.\n * @returns undefined - but it should be a total size of numerical axis in polar chart\n */\nconst selectPolarBarAxisSize = (): undefined => undefined;\n\nexport const selectPolarBarSizeList: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => SizeList | undefined = createSelector(\n  [selectAllVisibleRadialBars, selectRootBarSize, selectPolarBarAxisSize],\n  combineBarSizeList,\n);\n\nexport const selectPolarBarBandSize: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => number | undefined = createSelector(\n  [\n    selectChartLayout,\n    selectRootMaxBarSize,\n    selectAngleAxisWithScale,\n    selectAngleAxisTicks,\n    selectRadiusAxisWithScale,\n    selectRadiusAxisTicks,\n    pickMaxBarSize,\n  ],\n  (\n    layout: LayoutType,\n    globalMaxBarSize: number | undefined,\n    angleAxis,\n    angleAxisTicks,\n    radiusAxis,\n    radiusAxisTicks,\n    childMaxBarSize: number | undefined,\n  ): number | undefined => {\n    const maxBarSize: number | undefined = isNullish(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;\n    if (layout === 'centric') {\n      return getBandSizeOfAxis(angleAxis, angleAxisTicks, true) ?? maxBarSize ?? 0;\n    }\n    return getBandSizeOfAxis(radiusAxis, radiusAxisTicks, true) ?? maxBarSize ?? 0;\n  },\n);\n\nexport const selectAllPolarBarPositions: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => ReadonlyArray<BarWithPosition> | undefined = createSelector(\n  [\n    selectPolarBarSizeList,\n    selectRootMaxBarSize,\n    selectBarGap,\n    selectBarCategoryGap,\n    selectPolarBarBandSize,\n    selectBandSizeOfPolarAxis,\n    pickMaxBarSize,\n  ],\n  combineAllBarPositions,\n);\n\nexport const selectPolarBarPosition: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => BarPositionPosition | undefined = createSelector(\n  [selectAllPolarBarPositions, selectSynchronisedRadialBarSettings],\n  (allBarPositions: ReadonlyArray<BarWithPosition>, barSettings: RadialBarSettings) => {\n    if (allBarPositions == null || barSettings == null) {\n      return undefined;\n    }\n    const position = allBarPositions.find(\n      (p: BarWithPosition) =>\n        p.stackId === barSettings.stackId && barSettings.dataKey != null && p.dataKeys.includes(barSettings.dataKey),\n    );\n    if (position == null) {\n      return undefined;\n    }\n    return position.position;\n  },\n);\n\nconst selectStackedRadialBars: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  polarAxisId: AxisId,\n) => ReadonlyArray<DefinitelyStackedGraphicalItem> = createSelector([selectPolarItemsSettings], allPolarItems =>\n  allPolarItems.filter(item => item.type === 'radialBar').filter(isStacked),\n);\n\nconst selectPolarCombinedStackedData: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  polarAxisId: AxisId,\n) => DisplayedStackedData = createSelector(\n  [selectStackedRadialBars, selectChartDataAndAlwaysIgnoreIndexes, selectTooltipAxis],\n  combineDisplayedStackedData,\n);\n\nconst selectStackGroups: (\n  state: RechartsRootState,\n  axisType: PolarAxisType,\n  polarAxisId: AxisId,\n) => AllStackGroups | undefined = createSelector(\n  [selectPolarCombinedStackedData, selectStackedRadialBars, selectStackOffsetType],\n  combineStackGroups,\n);\n\nconst selectRadialBarStackGroups: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => AllStackGroups | undefined = (state, radiusAxisId, angleAxisId) => {\n  const layout = selectChartLayout(state);\n  if (layout === 'centric') {\n    return selectStackGroups(state, 'radiusAxis', radiusAxisId);\n  }\n  return selectStackGroups(state, 'angleAxis', angleAxisId);\n};\n\nconst selectPolarStackedData: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId,\n  angleAxisId: AxisId,\n  radialBarSettings: RadialBarSettings,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => StackSeries | undefined = createSelector(\n  [selectRadialBarStackGroups, selectSynchronisedRadialBarSettings],\n  combineStackedData,\n);\n\nexport const selectRadialBarSectors: (\n  state: RechartsRootState,\n  radiusAxisId: AxisId | undefined,\n  angleAxisId: AxisId | undefined,\n  radialBarSettings: RadialBarSettings,\n  cells: ReadonlyArray<ReactElement> | undefined,\n) => ReadonlyArray<RadialBarDataItem> = createSelector(\n  [\n    selectAngleAxisWithScale,\n    selectAngleAxisTicks,\n    selectRadiusAxisWithScale,\n    selectRadiusAxisTicks,\n    selectChartDataWithIndexes,\n    selectSynchronisedRadialBarSettings,\n    selectBandSizeOfPolarAxis,\n    selectChartLayout,\n    selectBaseValue,\n    selectPolarViewBox,\n    pickCells,\n    selectPolarBarPosition,\n    selectPolarStackedData,\n  ],\n  (\n    angleAxis: BaseAxisWithScale,\n    angleAxisTicks: ReadonlyArray<TickItem> | undefined,\n    radiusAxis: BaseAxisWithScale,\n    radiusAxisTicks: ReadonlyArray<TickItem> | undefined,\n    { chartData, dataStartIndex, dataEndIndex }: ChartDataState,\n    radialBarSettings: RadialBarSettings,\n    bandSize: number | undefined,\n    layout: LayoutType,\n    baseValue: number | unknown,\n    polarViewBox: PolarViewBoxRequired,\n    cells: ReadonlyArray<ReactElement> | undefined,\n    pos: BarPositionPosition | undefined,\n    stackedData: Series<StackDataPoint, StackSeriesIdentifier> | undefined,\n  ): ReadonlyArray<RadialBarDataItem> => {\n    if (\n      radialBarSettings == null ||\n      radiusAxis == null ||\n      angleAxis == null ||\n      chartData == null ||\n      bandSize == null ||\n      pos == null ||\n      (layout !== 'centric' && layout !== 'radial') ||\n      radiusAxisTicks == null\n    ) {\n      return [];\n    }\n    const { dataKey, minPointSize } = radialBarSettings;\n    const { cx, cy, startAngle, endAngle } = polarViewBox;\n    const displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);\n    const numericAxis = layout === 'centric' ? radiusAxis : angleAxis;\n    const stackedDomain: ReadonlyArray<unknown> | null = stackedData ? numericAxis.scale.domain() : null;\n    return computeRadialBarDataItems({\n      angleAxis,\n      angleAxisTicks,\n      bandSize,\n      baseValue,\n      cells,\n      cx,\n      cy,\n      dataKey,\n      dataStartIndex,\n      displayedData,\n      endAngle,\n      layout,\n      minPointSize,\n      pos,\n      radiusAxis,\n      radiusAxisTicks,\n      stackedData,\n      stackedDomain,\n      startAngle,\n    });\n  },\n);\n\nexport const selectRadialBarLegendPayload: (\n  state: RechartsRootState,\n  legendType: LegendType | undefined,\n) => ReadonlyArray<LegendPayload> = createSelector(\n  [selectChartDataAndAlwaysIgnoreIndexes, (_s: RechartsRootState, l: LegendType) => l],\n  (\n    { chartData, dataStartIndex, dataEndIndex }: ChartDataState,\n    legendType: LegendType,\n  ): ReadonlyArray<LegendPayload> => {\n    if (chartData == null) {\n      return [];\n    }\n    const displayedData = chartData.slice(dataStartIndex, dataEndIndex + 1);\n\n    if (displayedData.length === 0) {\n      return [];\n    }\n\n    return displayedData.map((entry): LegendPayload => {\n      return {\n        type: legendType,\n        // @ts-expect-error we need a better typing for our data inputs\n        value: entry.name,\n        // @ts-expect-error we need a better typing for our data inputs\n        color: entry.fill,\n        payload: entry,\n      };\n    });\n  },\n);\n","// eslint-disable-next-line max-classes-per-file\nimport * as React from 'react';\nimport { MutableRefObject, PureComponent, ReactElement, useCallback, useRef, useState } from 'react';\nimport { clsx } from 'clsx';\n\nimport { Series } from 'victory-vendor/d3-shape';\nimport { parseCornerRadius, RadialBarSector, RadialBarSectorProps } from '../util/RadialBarUtils';\nimport { Props as SectorProps } from '../shape/Sector';\nimport { Layer } from '../container/Layer';\nimport { findAllByType, filterProps } from '../util/ReactUtils';\nimport { Global } from '../util/Global';\nimport { ImplicitLabelListType, LabelList } from '../component/LabelList';\nimport { Cell } from '../component/Cell';\nimport { mathSign, interpolateNumber } from '../util/DataUtils';\nimport {\n  getCateCoordinateOfBar,\n  getValueByDataKey,\n  truncateByDomain,\n  getTooltipNameProp,\n  BarPositionPosition,\n  getNormalizedStackId,\n} from '../util/ChartUtils';\nimport {\n  LegendType,\n  TooltipType,\n  AnimationTiming,\n  TickItem,\n  adaptEventsOfChild,\n  PresentationAttributesAdaptChildEvent,\n  AnimationDuration,\n  ActiveShape,\n  LayoutType,\n  DataKey,\n} from '../util/types';\nimport {\n  useMouseClickItemDispatch,\n  useMouseEnterItemDispatch,\n  useMouseLeaveItemDispatch,\n} from '../context/tooltipContext';\nimport { TooltipPayloadConfiguration } from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { BaseAxisWithScale } from '../state/selectors/axisSelectors';\nimport { ChartData } from '../state/chartDataSlice';\nimport { selectRadialBarLegendPayload, selectRadialBarSectors } from '../state/selectors/radialBarSelectors';\nimport { useAppSelector } from '../state/hooks';\nimport { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';\nimport { SetPolarLegendPayload } from '../state/SetLegendPayload';\nimport { useAnimationId } from '../util/useAnimationId';\nimport { AxisId } from '../state/cartesianAxisSlice';\nimport { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';\nimport { RadialBarSettings } from '../state/types/RadialBarSettings';\nimport { SetPolarGraphicalItem } from '../state/SetGraphicalItem';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { JavascriptAnimate } from '../animation/JavascriptAnimate';\n\nconst STABLE_EMPTY_ARRAY: readonly RadialBarDataItem[] = [];\n\nexport type RadialBarDataItem = SectorProps & {\n  value?: any;\n  payload?: any;\n  background?: SectorProps;\n};\n\ntype RadialBarBackground = ActiveShape<SectorProps>;\n\ntype RadialBarSectorsProps = {\n  sectors: ReadonlyArray<RadialBarDataItem>;\n  allOtherRadialBarProps: RadialBarProps;\n  showLabels: boolean;\n};\n\nfunction RadialBarSectors({ sectors, allOtherRadialBarProps, showLabels }: RadialBarSectorsProps) {\n  const { shape, activeShape, cornerRadius, id, ...others } = allOtherRadialBarProps;\n  const baseProps = svgPropertiesNoEvents(others);\n\n  const activeIndex = useAppSelector(selectActiveTooltipIndex);\n  const {\n    onMouseEnter: onMouseEnterFromProps,\n    onClick: onItemClickFromProps,\n    onMouseLeave: onMouseLeaveFromProps,\n    ...restOfAllOtherProps\n  } = allOtherRadialBarProps;\n\n  const onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherRadialBarProps.dataKey);\n  const onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);\n  const onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherRadialBarProps.dataKey);\n\n  if (sectors == null) {\n    return null;\n  }\n\n  return (\n    <>\n      {sectors.map((entry, i) => {\n        const isActive = activeShape && activeIndex === String(i);\n        // @ts-expect-error the types need a bit of attention\n        const onMouseEnter = onMouseEnterFromContext(entry, i);\n        // @ts-expect-error the types need a bit of attention\n        const onMouseLeave = onMouseLeaveFromContext(entry, i);\n        // @ts-expect-error the types need a bit of attention\n        const onClick = onClickFromContext(entry, i);\n\n        // @ts-expect-error cx types are incompatible\n        const radialBarSectorProps: RadialBarSectorProps = {\n          ...baseProps,\n          cornerRadius: parseCornerRadius(cornerRadius),\n          ...entry,\n          ...adaptEventsOfChild(restOfAllOtherProps, entry, i),\n          onMouseEnter,\n          onMouseLeave,\n          onClick,\n          key: `sector-${i}`,\n          className: `recharts-radial-bar-sector ${entry.className}`,\n          forceCornerRadius: others.forceCornerRadius,\n          cornerIsExternal: others.cornerIsExternal,\n          isActive,\n          option: isActive ? activeShape : shape,\n        };\n\n        return <RadialBarSector {...radialBarSectorProps} />;\n      })}\n      {showLabels && LabelList.renderCallByParent(allOtherRadialBarProps, sectors)}\n    </>\n  );\n}\n\nfunction SectorsWithAnimation({\n  props,\n  previousSectorsRef,\n}: {\n  props: RadialBarProps;\n  previousSectorsRef: MutableRefObject<ReadonlyArray<RadialBarDataItem> | null>;\n}) {\n  const {\n    data,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    onAnimationEnd,\n    onAnimationStart,\n  } = props;\n  const animationId = useAnimationId(props, 'recharts-radialbar-');\n\n  const prevData = previousSectorsRef.current;\n\n  const [isAnimating, setIsAnimating] = useState(true);\n\n  const handleAnimationEnd = useCallback(() => {\n    if (typeof onAnimationEnd === 'function') {\n      onAnimationEnd();\n    }\n    setIsAnimating(false);\n  }, [onAnimationEnd]);\n\n  const handleAnimationStart = useCallback(() => {\n    if (typeof onAnimationStart === 'function') {\n      onAnimationStart();\n    }\n    setIsAnimating(true);\n  }, [onAnimationStart]);\n  return (\n    <JavascriptAnimate\n      begin={animationBegin}\n      duration={animationDuration}\n      isActive={isAnimationActive}\n      easing={animationEasing}\n      onAnimationStart={handleAnimationStart}\n      onAnimationEnd={handleAnimationEnd}\n      key={animationId}\n    >\n      {(t: number) => {\n        const stepData =\n          t === 1\n            ? data\n            : (data ?? STABLE_EMPTY_ARRAY).map((entry, index) => {\n                const prev = prevData && prevData[index];\n\n                if (prev) {\n                  const interpolatorStartAngle = interpolateNumber(prev.startAngle, entry.startAngle);\n                  const interpolatorEndAngle = interpolateNumber(prev.endAngle, entry.endAngle);\n\n                  return {\n                    ...entry,\n                    startAngle: interpolatorStartAngle(t),\n                    endAngle: interpolatorEndAngle(t),\n                  };\n                }\n                const { endAngle, startAngle } = entry;\n                const interpolator = interpolateNumber(startAngle, endAngle);\n\n                return { ...entry, endAngle: interpolator(t) };\n              });\n\n        if (t > 0) {\n          // eslint-disable-next-line no-param-reassign\n          previousSectorsRef.current = stepData ?? null;\n        }\n\n        return (\n          <Layer>\n            <RadialBarSectors\n              sectors={stepData ?? STABLE_EMPTY_ARRAY}\n              allOtherRadialBarProps={props}\n              showLabels={!isAnimating}\n            />\n          </Layer>\n        );\n      }}\n    </JavascriptAnimate>\n  );\n}\n\nfunction RenderSectors(props: RadialBarProps) {\n  const { data = [], isAnimationActive } = props;\n\n  const previousSectorsRef = useRef<ReadonlyArray<RadialBarDataItem> | null>(null);\n  const prevData = previousSectorsRef.current;\n\n  if (isAnimationActive && data && data.length && (!prevData || prevData !== data)) {\n    return <SectorsWithAnimation props={props} previousSectorsRef={previousSectorsRef} />;\n  }\n\n  return <RadialBarSectors sectors={data} allOtherRadialBarProps={props} showLabels />;\n}\n\ninterface InternalRadialBarProps {\n  className?: string;\n  angleAxisId?: AxisId;\n  radiusAxisId?: AxisId;\n  startAngle?: number;\n  endAngle?: number;\n  shape?: ActiveShape<SectorProps, SVGPathElement>;\n  activeShape?: ActiveShape<SectorProps, SVGPathElement>;\n  dataKey: string | number | ((obj: any) => any);\n  cornerRadius?: string | number;\n  forceCornerRadius?: boolean;\n  cornerIsExternal?: boolean;\n  minPointSize?: number;\n  /**\n   * So in Bar, this can be a percent value - but that won't work in RadialBar. RadialBar: only numbers.\n   */\n  barSize?: number;\n  maxBarSize?: number;\n  data?: ReadonlyArray<RadialBarDataItem>;\n  legendType?: LegendType;\n  tooltipType?: TooltipType;\n  hide?: boolean;\n  label?: ImplicitLabelListType<any>;\n  stackId?: string | number;\n  background?: RadialBarBackground;\n  onAnimationStart?: () => void;\n  onAnimationEnd?: () => void;\n  isAnimationActive?: boolean;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n}\n\nexport type RadialBarProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'ref'> &\n  InternalRadialBarProps;\n\nfunction SetRadialBarPayloadLegend(props: RadialBarProps) {\n  const legendPayload = useAppSelector(state => selectRadialBarLegendPayload(state, props.legendType));\n  return <SetPolarLegendPayload legendPayload={legendPayload ?? []} />;\n}\n\nfunction getTooltipEntrySettings(props: RadialBarProps): TooltipPayloadConfiguration {\n  const { dataKey, data, stroke, strokeWidth, name, hide, fill, tooltipType } = props;\n  return {\n    dataDefinedOnItem: data,\n    positions: undefined,\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      nameKey: undefined, // RadialBar does not have nameKey, why?\n      dataKey,\n      name: getTooltipNameProp(name, dataKey),\n      hide,\n      type: tooltipType,\n      color: fill,\n      unit: '', // Why does RadialBar not support unit?\n    },\n  };\n}\n\nclass RadialBarWithState extends PureComponent<RadialBarProps> {\n  renderBackground(sectors?: ReadonlyArray<RadialBarDataItem>) {\n    if (sectors == null) {\n      return null;\n    }\n    const { cornerRadius } = this.props;\n    const backgroundProps = filterProps(this.props.background, false);\n    return sectors.map((entry, i) => {\n      const { value, background, ...rest } = entry;\n\n      if (!background) {\n        return null;\n      }\n\n      const props: RadialBarSectorProps = {\n        cornerRadius: parseCornerRadius(cornerRadius),\n        ...rest,\n        fill: '#eee',\n        ...background,\n        ...backgroundProps,\n        ...adaptEventsOfChild(this.props, entry, i),\n        index: i,\n        key: `sector-${i}`,\n        className: clsx('recharts-radial-bar-background-sector', backgroundProps?.className),\n        option: background,\n        isActive: false,\n      };\n\n      return <RadialBarSector {...props} />;\n    });\n  }\n\n  render() {\n    const { hide, data, className, background } = this.props;\n\n    if (hide) {\n      return null;\n    }\n\n    const layerClass = clsx('recharts-area', className);\n\n    return (\n      <Layer className={layerClass}>\n        {background && <Layer className=\"recharts-radial-bar-background\">{this.renderBackground(data)}</Layer>}\n\n        <Layer className=\"recharts-radial-bar-sectors\">\n          <RenderSectors {...this.props} />\n        </Layer>\n      </Layer>\n    );\n  }\n}\n\nfunction RadialBarImpl(props: RadialBarProps) {\n  const cells = findAllByType(props.children, Cell);\n  const radialBarSettings: RadialBarSettings = {\n    data: undefined,\n    hide: false,\n    id: props.id,\n    dataKey: props.dataKey,\n    minPointSize: props.minPointSize,\n    stackId: getNormalizedStackId(props.stackId),\n    maxBarSize: props.maxBarSize,\n    barSize: props.barSize,\n    type: 'radialBar',\n    angleAxisId: props.angleAxisId,\n    radiusAxisId: props.radiusAxisId,\n  };\n  const data: ReadonlyArray<RadialBarDataItem> =\n    useAppSelector(state =>\n      selectRadialBarSectors(state, props.radiusAxisId, props.angleAxisId, radialBarSettings, cells),\n    ) ?? STABLE_EMPTY_ARRAY;\n  return (\n    <>\n      <SetTooltipEntrySettings fn={getTooltipEntrySettings} args={{ ...props, data }} />\n      <RadialBarWithState {...props} data={data} />\n    </>\n  );\n}\n\nconst defaultRadialBarProps: Partial<RadialBarProps> = {\n  angleAxisId: 0,\n  radiusAxisId: 0,\n  minPointSize: 0,\n  hide: false,\n  legendType: 'rect',\n  data: [] as ReadonlyArray<RadialBarDataItem>,\n  isAnimationActive: !Global.isSsr,\n  animationBegin: 0,\n  animationDuration: 1500,\n  animationEasing: 'ease',\n  forceCornerRadius: false,\n  cornerIsExternal: false,\n};\n\nexport function computeRadialBarDataItems({\n  displayedData,\n  stackedData,\n  dataStartIndex,\n  stackedDomain,\n  dataKey,\n  baseValue,\n  layout,\n  radiusAxis,\n  radiusAxisTicks,\n  bandSize,\n  pos,\n  angleAxis,\n  minPointSize,\n  cx,\n  cy,\n  angleAxisTicks,\n  cells,\n  startAngle: rootStartAngle,\n  endAngle: rootEndAngle,\n}: {\n  displayedData: ChartData;\n  stackedData: Series<Record<number, number>, DataKey<any>> | undefined;\n  dataStartIndex: number;\n  stackedDomain: ReadonlyArray<unknown> | null;\n  dataKey: DataKey<any> | undefined;\n  baseValue: number | unknown;\n  layout: LayoutType;\n  radiusAxis: BaseAxisWithScale;\n  radiusAxisTicks: ReadonlyArray<TickItem> | undefined;\n  bandSize: number;\n  pos: BarPositionPosition;\n  angleAxis: BaseAxisWithScale;\n  minPointSize: number | undefined;\n  cx: number;\n  cy: number;\n  angleAxisTicks: ReadonlyArray<TickItem> | undefined;\n  cells: ReadonlyArray<ReactElement> | undefined;\n  startAngle: number;\n  endAngle: number;\n}): ReadonlyArray<RadialBarDataItem> {\n  return (displayedData ?? []).map((entry: unknown, index: number) => {\n    let value, innerRadius, outerRadius, startAngle, endAngle, backgroundSector;\n\n    if (stackedData) {\n      // @ts-expect-error truncateByDomain expects only numerical domain, but it can received categorical domain too\n      value = truncateByDomain(stackedData[dataStartIndex + index], stackedDomain);\n    } else {\n      value = getValueByDataKey(entry, dataKey);\n      if (!Array.isArray(value)) {\n        value = [baseValue, value];\n      }\n    }\n\n    if (layout === 'radial') {\n      innerRadius = getCateCoordinateOfBar({\n        axis: radiusAxis,\n        ticks: radiusAxisTicks,\n        bandSize,\n        offset: pos.offset,\n        entry,\n        index,\n      });\n      endAngle = angleAxis.scale(value[1]);\n      startAngle = angleAxis.scale(value[0]);\n      outerRadius = (innerRadius ?? 0) + pos.size;\n      const deltaAngle = endAngle - startAngle;\n\n      if (Math.abs(minPointSize) > 0 && Math.abs(deltaAngle) < Math.abs(minPointSize)) {\n        const delta = mathSign(deltaAngle || minPointSize) * (Math.abs(minPointSize) - Math.abs(deltaAngle));\n\n        endAngle += delta;\n      }\n      backgroundSector = {\n        background: {\n          cx,\n          cy,\n          innerRadius,\n          outerRadius,\n          startAngle: rootStartAngle,\n          endAngle: rootEndAngle,\n        },\n      };\n    } else {\n      innerRadius = radiusAxis.scale(value[0]);\n      outerRadius = radiusAxis.scale(value[1]);\n      startAngle = getCateCoordinateOfBar({\n        axis: angleAxis,\n        ticks: angleAxisTicks,\n        bandSize,\n        offset: pos.offset,\n        entry,\n        index,\n      });\n      endAngle = (startAngle ?? 0) + pos.size;\n      const deltaRadius = outerRadius - innerRadius;\n\n      if (Math.abs(minPointSize) > 0 && Math.abs(deltaRadius) < Math.abs(minPointSize)) {\n        const delta = mathSign(deltaRadius || minPointSize) * (Math.abs(minPointSize) - Math.abs(deltaRadius));\n        outerRadius += delta;\n      }\n    }\n\n    return {\n      // @ts-expect-error can't spread unknown\n      ...entry,\n      ...backgroundSector,\n      payload: entry,\n      value: stackedData ? value : value[1],\n      cx,\n      cy,\n      innerRadius,\n      outerRadius,\n      startAngle,\n      endAngle,\n      ...(cells && cells[index] && cells[index].props),\n    } satisfies RadialBarDataItem;\n  });\n}\n\nexport class RadialBar extends PureComponent<RadialBarProps> {\n  static displayName = 'RadialBar';\n\n  static defaultProps = defaultRadialBarProps;\n\n  render() {\n    return (\n      <RegisterGraphicalItemId id={this.props.id} type=\"radialBar\">\n        {id => (\n          <>\n            <SetPolarGraphicalItem\n              type=\"radialBar\"\n              id={id}\n              // TODO: do we need this anymore and is the below comment true? Strict nulls complains about it\n              data={undefined} // data prop is injected through generator and overwrites what user passes in\n              dataKey={this.props.dataKey}\n              // TS is not smart enough to know defaultProps has values due to the explicit Partial type\n              hide={this.props.hide ?? defaultRadialBarProps.hide!}\n              angleAxisId={this.props.angleAxisId ?? defaultRadialBarProps.angleAxisId!}\n              radiusAxisId={this.props.radiusAxisId ?? defaultRadialBarProps.radiusAxisId!}\n              stackId={getNormalizedStackId(this.props.stackId)}\n              barSize={this.props.barSize}\n              minPointSize={this.props.minPointSize}\n              maxBarSize={this.props.maxBarSize}\n            />\n            <SetRadialBarPayloadLegend {...this.props} />\n            <RadialBarImpl {...this.props} id={id} />\n          </>\n        )}\n      </RegisterGraphicalItemId>\n    );\n  }\n}\n","const PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];\n\nexport const generatePrefixStyle = (name: string, value: string) => {\n  if (!name) {\n    return undefined;\n  }\n\n  const camelName = name.replace(/(\\w)/, v => v.toUpperCase());\n  const result: Record<string, string> = PREFIX_LIST.reduce(\n    (res, entry) => ({\n      ...res,\n      [entry + camelName]: value,\n    }),\n    {},\n  );\n\n  result[name] = value;\n\n  return result;\n};\n","import { useEffect } from 'react';\nimport { ChartData, setChartData, setComputedData } from '../state/chartDataSlice';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { RechartsRootState } from '../state/store';\nimport { BrushStartEndIndex } from './brushUpdateContext';\nimport { useIsPanorama } from './PanoramaContext';\n\nexport const ChartDataContextProvider = (props: { chartData: ChartData | undefined }): null => {\n  const { chartData } = props;\n  const dispatch = useAppDispatch();\n  const isPanorama = useIsPanorama();\n  useEffect(() => {\n    if (isPanorama) {\n      // Panorama mode reuses data from the main chart, so we must not overwrite it here.\n      return () => {\n        // there is nothing to clean up\n      };\n    }\n    dispatch(setChartData(chartData));\n    return () => {\n      dispatch(setChartData(undefined));\n    };\n  }, [chartData, dispatch, isPanorama]);\n  return null;\n};\n\nexport const SetComputedData = (props: { computedData: any }): null => {\n  const { computedData } = props;\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(setComputedData(computedData));\n    return () => {\n      dispatch(setChartData(undefined));\n    };\n  }, [computedData, dispatch]);\n  return null;\n};\n\nconst selectChartData = (state: RechartsRootState): ChartData | undefined => state.chartData.chartData;\n\n/**\n * \"data\" is the data of the chart - it has no type because this part of recharts is very flexible.\n * Basically it's an array of \"something\" and then there's the dataKey property in various places\n * that's meant to pull other things away from the data.\n *\n * Some charts have `data` defined on the chart root, and they will return the array through this hook.\n * For example: <ComposedChart data={data} />.\n *\n * Other charts, such as Pie, have data defined on individual graphical elements.\n * These charts will return `undefined` through this hook, and you need to read the data from children.\n * For example: <PieChart><Pie data={data} />\n *\n * Some charts also allow setting both - data on the parent, and data on the children at the same time!\n * However, this particular selector will only return the ones defined on the parent.\n *\n * @deprecated use one of the other selectors instead - which one, depends on how do you identify the applicable graphical items.\n *\n * @return data array for some charts and undefined for other\n */\nexport const useChartData = (): ChartData | undefined => useAppSelector(selectChartData);\n\nconst selectDataIndex = (state: RechartsRootState): BrushStartEndIndex => {\n  const { dataStartIndex, dataEndIndex } = state.chartData;\n  return { startIndex: dataStartIndex, endIndex: dataEndIndex };\n};\n\n/**\n * startIndex and endIndex are data boundaries, set through Brush.\n *\n * @return object with startIndex and endIndex\n */\nexport const useDataIndex = () => {\n  return useAppSelector(selectDataIndex);\n};\n","import { createContext } from 'react';\n\nexport interface BrushStartEndIndex {\n  startIndex: number;\n  endIndex: number;\n}\n\nexport type OnBrushUpdate = (newState: BrushStartEndIndex) => void;\n\nexport const BrushUpdateDispatchContext = createContext<OnBrushUpdate>(() => {});\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { Padding } from '../util/types';\n\n/**\n * From all Brush properties, only height has a default value and will always be defined.\n * Other properties are nullable and will be computed from offsets and margins if they are not set.\n */\nexport type BrushSettings = {\n  x: number | undefined;\n  y: number | undefined;\n  width: number | undefined;\n  height: number;\n  padding: Padding;\n};\n\nconst initialState: BrushSettings = {\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0,\n  padding: { top: 0, right: 0, bottom: 0, left: 0 },\n};\n\nexport const brushSlice = createSlice({\n  name: 'brush',\n  initialState,\n  reducers: {\n    setBrushSettings(_state: BrushSettings, action: PayloadAction<BrushSettings | null>) {\n      if (action.payload == null) {\n        return initialState;\n      }\n      return action.payload;\n    },\n  },\n});\n\nexport const { setBrushSettings } = brushSlice.actions;\n\nexport const brushReducer = brushSlice.reducer;\n","import * as React from 'react';\nimport {\n  Children,\n  PureComponent,\n  ReactElement,\n  SVGAttributes,\n  SVGProps,\n  TouchEvent,\n  useCallback,\n  useContext,\n  useEffect,\n} from 'react';\nimport { clsx } from 'clsx';\nimport { scalePoint, ScalePoint } from 'victory-vendor/d3-scale';\nimport range from 'es-toolkit/compat/range';\nimport { Layer } from '../container/Layer';\nimport { Text } from '../component/Text';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport { isNumber } from '../util/DataUtils';\nimport { generatePrefixStyle } from '../util/CssPrefixUtils';\nimport { DataKey, Padding } from '../util/types';\nimport { useChartData, useDataIndex } from '../context/chartDataContext';\nimport { BrushStartEndIndex, BrushUpdateDispatchContext, OnBrushUpdate } from '../context/brushUpdateContext';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { ChartData, setDataStartEndIndexes } from '../state/chartDataSlice';\nimport { BrushSettings, setBrushSettings } from '../state/brushSlice';\nimport { PanoramaContextProvider } from '../context/PanoramaContext';\nimport { selectBrushDimensions } from '../state/selectors/brushSelectors';\nimport { useBrushChartSynchronisation } from '../synchronisation/useChartSynchronisation';\nimport { RequiresDefaultProps, resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\n\ntype BrushTravellerType = ReactElement<SVGElement> | ((props: TravellerProps) => ReactElement<SVGElement>);\n\n// Why is this tickFormatter different from the other TickFormatters? This one allows to return numbers too for some reason.\ntype BrushTickFormatter = (value: any, index: number) => number | string;\n\ninterface BrushProps {\n  x?: number;\n  y?: number;\n  dy?: number;\n  width?: number;\n  className?: string;\n\n  ariaLabel?: string;\n\n  height?: number;\n  travellerWidth?: number;\n  traveller?: BrushTravellerType;\n  gap?: number;\n  padding?: Padding;\n\n  dataKey?: DataKey<any>;\n  startIndex?: number;\n  endIndex?: number;\n  tickFormatter?: BrushTickFormatter;\n\n  children?: ReactElement;\n\n  onChange?: OnBrushUpdate;\n  onDragEnd?: OnBrushUpdate;\n  leaveTimeOut?: number;\n  alwaysShowText?: boolean;\n}\n\nexport type Props = Omit<SVGProps<SVGElement>, 'onChange' | 'onDragEnd' | 'ref'> & BrushProps;\n\ntype InternalProps = Omit<SVGProps<SVGElement>, 'onChange' | 'onDragEnd' | 'ref'> &\n  RequiresDefaultProps<BrushProps, typeof defaultBrushProps>;\n\ntype PropertiesFromContext = {\n  x: number;\n  y: number;\n  width: number;\n  data: any[];\n  startIndex: number;\n  endIndex: number;\n  onChange: OnBrushUpdate;\n};\n\ntype BrushTravellerId = 'startX' | 'endX';\n\nfunction DefaultTraveller(props: TravellerProps) {\n  const { x, y, width, height, stroke } = props;\n  const lineY = Math.floor(y + height / 2) - 1;\n\n  return (\n    <>\n      <rect x={x} y={y} width={width} height={height} fill={stroke} stroke=\"none\" />\n      <line x1={x + 1} y1={lineY} x2={x + width - 1} y2={lineY} fill=\"none\" stroke=\"#fff\" />\n      <line x1={x + 1} y1={lineY + 2} x2={x + width - 1} y2={lineY + 2} fill=\"none\" stroke=\"#fff\" />\n    </>\n  );\n}\n\nfunction Traveller(props: { travellerType: BrushTravellerType; travellerProps: TravellerProps }) {\n  const { travellerProps, travellerType } = props;\n\n  if (React.isValidElement(travellerType)) {\n    // @ts-expect-error element cloning disagrees with the types (and it should)\n    return React.cloneElement(travellerType, travellerProps);\n  }\n  if (typeof travellerType === 'function') {\n    return travellerType(travellerProps);\n  }\n  return <DefaultTraveller {...travellerProps} />;\n}\n\nfunction TravellerLayer({\n  otherProps,\n  travellerX,\n  id,\n  onMouseEnter,\n  onMouseLeave,\n  onMouseDown,\n  onTouchStart,\n  onTravellerMoveKeyboard,\n  onFocus,\n  onBlur,\n}: {\n  id: BrushTravellerId;\n  travellerX: number;\n  otherProps: BrushWithStateProps;\n  onMouseEnter: (e: MouseOrTouchEvent) => void;\n  onMouseLeave: (e: MouseOrTouchEvent) => void;\n  onMouseDown: (e: MouseOrTouchEvent) => void;\n  onTouchStart: (e: MouseOrTouchEvent) => void;\n  onTravellerMoveKeyboard: (direction: -1 | 1, travellerId: BrushTravellerId) => void;\n  onFocus: () => void;\n  onBlur: () => void;\n}) {\n  const { y, x: xFromProps, travellerWidth, height, traveller, ariaLabel, data, startIndex, endIndex } = otherProps;\n  const x = Math.max(travellerX, xFromProps);\n  const travellerProps: TravellerProps = {\n    ...svgPropertiesNoEvents(otherProps),\n    x,\n    y,\n    width: travellerWidth,\n    height,\n  };\n\n  const ariaLabelBrush = ariaLabel || `Min value: ${data[startIndex]?.name}, Max value: ${data[endIndex]?.name}`;\n\n  return (\n    <Layer\n      tabIndex={0}\n      role=\"slider\"\n      aria-label={ariaLabelBrush}\n      aria-valuenow={travellerX}\n      className=\"recharts-brush-traveller\"\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      onMouseDown={onMouseDown}\n      onTouchStart={onTouchStart}\n      onKeyDown={e => {\n        if (!['ArrowLeft', 'ArrowRight'].includes(e.key)) {\n          return;\n        }\n        e.preventDefault();\n        e.stopPropagation();\n        onTravellerMoveKeyboard(e.key === 'ArrowRight' ? 1 : -1, id);\n      }}\n      onFocus={onFocus}\n      onBlur={onBlur}\n      style={{ cursor: 'col-resize' }}\n    >\n      <Traveller travellerType={traveller} travellerProps={travellerProps} />\n    </Layer>\n  );\n}\n\ntype TextOfTickProps = {\n  index: number;\n  data: any[];\n  dataKey: DataKey<any> | undefined;\n  tickFormatter: BrushTickFormatter | undefined;\n};\n\n/*\n * This one cannot be a React Component because React is not happy with it returning only string | number.\n * React wants a full React.JSX.Element but that is not compatible with Text component.\n */\nfunction getTextOfTick(props: TextOfTickProps): number | string {\n  const { index, data, tickFormatter, dataKey } = props;\n  // @ts-expect-error getValueByDataKey does not validate the output type\n  const text: string = getValueByDataKey(data[index], dataKey, index);\n\n  return typeof tickFormatter === 'function' ? tickFormatter(text, index) : text;\n}\n\nfunction getIndexInRange(valueRange: number[], x: number) {\n  const len = valueRange.length;\n  let start = 0;\n  let end = len - 1;\n\n  while (end - start > 1) {\n    const middle = Math.floor((start + end) / 2);\n\n    if (valueRange[middle] > x) {\n      end = middle;\n    } else {\n      start = middle;\n    }\n  }\n\n  return x >= valueRange[end] ? end : start;\n}\n\nfunction getIndex({\n  startX,\n  endX,\n  scaleValues,\n  gap,\n  data,\n}: {\n  startX: number;\n  endX: number;\n  scaleValues: number[];\n  gap: number;\n  data: any[];\n}): BrushStartEndIndex {\n  const lastIndex = data.length - 1;\n  const min = Math.min(startX, endX);\n  const max = Math.max(startX, endX);\n  const minIndex = getIndexInRange(scaleValues, min);\n  const maxIndex = getIndexInRange(scaleValues, max);\n  return {\n    startIndex: minIndex - (minIndex % gap),\n    endIndex: maxIndex === lastIndex ? lastIndex : maxIndex - (maxIndex % gap),\n  };\n}\n\nfunction Background({\n  x,\n  y,\n  width,\n  height,\n  fill,\n  stroke,\n}: {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  fill: string | undefined;\n  stroke: string | undefined;\n}) {\n  return <rect stroke={stroke} fill={fill} x={x} y={y} width={width} height={height} />;\n}\n\nfunction BrushText({\n  startIndex,\n  endIndex,\n  y,\n  height,\n  travellerWidth,\n  stroke,\n  tickFormatter,\n  dataKey,\n  data,\n  startX,\n  endX,\n}: {\n  startIndex: number;\n  endIndex: number;\n  y: number;\n  height: number;\n  travellerWidth: number;\n  stroke: string | undefined;\n  tickFormatter: BrushTickFormatter | undefined;\n  dataKey: DataKey<any> | undefined;\n  data: any[];\n  startX: number;\n  endX: number;\n}) {\n  const offset = 5;\n  const attrs = {\n    pointerEvents: 'none',\n    fill: stroke,\n  };\n\n  return (\n    <Layer className=\"recharts-brush-texts\">\n      <Text textAnchor=\"end\" verticalAnchor=\"middle\" x={Math.min(startX, endX) - offset} y={y + height / 2} {...attrs}>\n        {getTextOfTick({ index: startIndex, tickFormatter, dataKey, data })}\n      </Text>\n      <Text\n        textAnchor=\"start\"\n        verticalAnchor=\"middle\"\n        x={Math.max(startX, endX) + travellerWidth + offset}\n        y={y + height / 2}\n        {...attrs}\n      >\n        {getTextOfTick({ index: endIndex, tickFormatter, dataKey, data })}\n      </Text>\n    </Layer>\n  );\n}\n\nfunction Slide({\n  y,\n  height,\n  stroke,\n  travellerWidth,\n  startX,\n  endX,\n  onMouseEnter,\n  onMouseLeave,\n  onMouseDown,\n  onTouchStart,\n}: {\n  y: number;\n  height: number;\n  stroke: string | undefined;\n  travellerWidth: number;\n  startX: number;\n  endX: number;\n  onMouseEnter: (e: MouseOrTouchEvent) => void;\n  onMouseLeave: (e: MouseOrTouchEvent) => void;\n  onMouseDown: (e: MouseOrTouchEvent) => void;\n  onTouchStart: (e: MouseOrTouchEvent) => void;\n}) {\n  const x = Math.min(startX, endX) + travellerWidth;\n  const width = Math.max(Math.abs(endX - startX) - travellerWidth, 0);\n\n  return (\n    <rect\n      className=\"recharts-brush-slide\"\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      onMouseDown={onMouseDown}\n      onTouchStart={onTouchStart}\n      style={{ cursor: 'move' }}\n      stroke=\"none\"\n      fill={stroke}\n      fillOpacity={0.2}\n      x={x}\n      y={y}\n      width={width}\n      height={height}\n    />\n  );\n}\n\nfunction Panorama({\n  x,\n  y,\n  width,\n  height,\n  data,\n  children,\n  padding,\n}: {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  data: any[];\n  children: ReactElement;\n  padding: Padding;\n}) {\n  const isPanoramic = React.Children.count(children) === 1;\n  if (!isPanoramic) {\n    return null;\n  }\n  const chartElement = Children.only(children);\n\n  if (!chartElement) {\n    return null;\n  }\n\n  return React.cloneElement(chartElement, {\n    x,\n    y,\n    width,\n    height,\n    margin: padding,\n    compact: true,\n    data,\n  });\n}\n\ninterface State {\n  isTravellerMoving?: boolean;\n  isTravellerFocused?: boolean;\n  isSlideMoving?: boolean;\n  startX: number;\n  endX: number;\n  slideMoveStartX: number;\n  movingTravellerId: BrushTravellerId | undefined;\n  isTextActive?: boolean;\n  brushMoveStartX: number;\n\n  scale?: ScalePoint<number>;\n  scaleValues?: number[];\n\n  prevData?: any[];\n  prevWidth?: number;\n  prevX?: number;\n  prevTravellerWidth?: number;\n\n  /**\n   * Used to prevent re-setting of traveller position unless controlled via props.\n   * This is not perfect as mouseout events will still cause the traveller to move position\n   * but only when start/endIndex are controlled via props.\n   * */\n  prevStartIndexControlledFromProps?: number;\n  prevEndIndexControlledFromProps?: number;\n}\n\ntype TravellerProps = {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  stroke?: SVGAttributes<SVGElement>['stroke'];\n};\n\nconst createScale = ({\n  data,\n  startIndex,\n  endIndex,\n  x,\n  width,\n  travellerWidth,\n}: {\n  data: ChartData | undefined;\n  startIndex: number;\n  endIndex: number;\n  x: number;\n  width: number;\n  travellerWidth: number;\n}) => {\n  if (!data || !data.length) {\n    return {};\n  }\n\n  const len = data.length;\n  const scale = scalePoint<number>()\n    .domain(range(0, len))\n    .range([x, x + width - travellerWidth]);\n  const scaleValues = scale.domain().map(entry => scale(entry));\n\n  return {\n    isTextActive: false,\n    isSlideMoving: false,\n    isTravellerMoving: false,\n    isTravellerFocused: false,\n    startX: scale(startIndex),\n    endX: scale(endIndex),\n    scale,\n    scaleValues,\n  };\n};\n\nconst isTouch = (e: TouchEvent<SVGElement> | React.MouseEvent<SVGElement>): e is TouchEvent<SVGElement> =>\n  (e as TouchEvent<SVGElement>).changedTouches && !!(e as TouchEvent<SVGElement>).changedTouches.length;\n\ntype MouseOrTouchEvent = React.MouseEvent<SVGGElement> | TouchEvent<SVGGElement>;\n\ntype BrushWithStateProps = InternalProps &\n  PropertiesFromContext & { startIndexControlledFromProps?: number; endIndexControlledFromProps?: number };\n\nclass BrushWithState extends PureComponent<BrushWithStateProps, State> {\n  constructor(props: BrushWithStateProps) {\n    super(props);\n\n    this.travellerDragStartHandlers = {\n      startX: this.handleTravellerDragStart.bind(this, 'startX'),\n      endX: this.handleTravellerDragStart.bind(this, 'endX'),\n    };\n\n    this.state = { brushMoveStartX: 0, movingTravellerId: undefined, endX: 0, startX: 0, slideMoveStartX: 0 };\n  }\n\n  leaveTimer: number | null | undefined;\n\n  travellerDragStartHandlers: Record<BrushTravellerId, (event: MouseOrTouchEvent) => void>;\n\n  static getDerivedStateFromProps(nextProps: BrushWithStateProps, prevState: State): Partial<State> | null {\n    const {\n      data,\n      width,\n      x,\n      travellerWidth,\n      startIndex,\n      endIndex,\n      startIndexControlledFromProps,\n      endIndexControlledFromProps,\n    } = nextProps;\n\n    if (data !== prevState.prevData) {\n      return {\n        prevData: data,\n        prevTravellerWidth: travellerWidth,\n        prevX: x,\n        prevWidth: width,\n        ...(data && data.length\n          ? createScale({ data, width, x, travellerWidth, startIndex, endIndex })\n          : { scale: undefined, scaleValues: undefined }),\n      };\n    }\n    const prevScale = prevState.scale;\n    if (\n      prevScale &&\n      (width !== prevState.prevWidth || x !== prevState.prevX || travellerWidth !== prevState.prevTravellerWidth)\n    ) {\n      prevScale.range([x, x + width - travellerWidth]);\n\n      const scaleValues = prevScale\n        .domain()\n        .map(entry => prevScale(entry))\n        .filter(Boolean);\n\n      return {\n        prevData: data,\n        prevTravellerWidth: travellerWidth,\n        prevX: x,\n        prevWidth: width,\n        startX: prevScale(nextProps.startIndex),\n        endX: prevScale(nextProps.endIndex),\n        scaleValues,\n      };\n    }\n\n    if (\n      prevState.scale &&\n      !prevState.isSlideMoving &&\n      !prevState.isTravellerMoving &&\n      !prevState.isTravellerFocused &&\n      !prevState.isTextActive\n    ) {\n      /*\n       * If the startIndex or endIndex are controlled from the outside,\n       * we need to keep the startX and end up to date.\n       * Also we do not want to do that while user is interacting in the brush,\n       * because this will trigger re-render and interrupt the drag&drop.\n       */\n      if (\n        startIndexControlledFromProps != null &&\n        prevState.prevStartIndexControlledFromProps !== startIndexControlledFromProps\n      ) {\n        return {\n          startX: prevState.scale(startIndexControlledFromProps),\n          prevStartIndexControlledFromProps: startIndexControlledFromProps,\n        };\n      }\n\n      if (\n        endIndexControlledFromProps != null &&\n        prevState.prevEndIndexControlledFromProps !== endIndexControlledFromProps\n      ) {\n        return {\n          endX: prevState.scale(endIndexControlledFromProps),\n          prevEndIndexControlledFromProps: endIndexControlledFromProps,\n        };\n      }\n    }\n\n    return null;\n  }\n\n  componentWillUnmount() {\n    if (this.leaveTimer) {\n      clearTimeout(this.leaveTimer);\n      this.leaveTimer = null;\n    }\n\n    this.detachDragEndListener();\n  }\n\n  handleDrag = (e: React.Touch | React.MouseEvent<SVGGElement> | MouseEvent) => {\n    if (this.leaveTimer) {\n      clearTimeout(this.leaveTimer);\n      this.leaveTimer = null;\n    }\n\n    if (this.state.isTravellerMoving) {\n      this.handleTravellerMove(e);\n    } else if (this.state.isSlideMoving) {\n      this.handleSlideDrag(e);\n    }\n  };\n\n  handleTouchMove = (e: TouchEvent<SVGGElement>) => {\n    if (e.changedTouches != null && e.changedTouches.length > 0) {\n      this.handleDrag(e.changedTouches[0]);\n    }\n  };\n\n  attachDragEndListener() {\n    window.addEventListener('mouseup', this.handleDragEnd, true);\n    window.addEventListener('touchend', this.handleDragEnd, true);\n    window.addEventListener('mousemove', this.handleDrag, true);\n  }\n\n  detachDragEndListener() {\n    window.removeEventListener('mouseup', this.handleDragEnd, true);\n    window.removeEventListener('touchend', this.handleDragEnd, true);\n    window.removeEventListener('mousemove', this.handleDrag, true);\n  }\n\n  handleDragEnd = () => {\n    this.setState(\n      {\n        isTravellerMoving: false,\n        isSlideMoving: false,\n      },\n      () => {\n        const { endIndex, onDragEnd, startIndex } = this.props;\n        onDragEnd?.({\n          endIndex,\n          startIndex,\n        });\n      },\n    );\n    this.detachDragEndListener();\n  };\n\n  handleLeaveWrapper = () => {\n    if (this.state.isTravellerMoving || this.state.isSlideMoving) {\n      this.leaveTimer = window.setTimeout(this.handleDragEnd, this.props.leaveTimeOut);\n    }\n  };\n\n  handleEnterSlideOrTraveller = () => {\n    this.setState({\n      isTextActive: true,\n    });\n  };\n\n  handleLeaveSlideOrTraveller = () => {\n    this.setState({\n      isTextActive: false,\n    });\n  };\n\n  handleSlideDragStart = (e: MouseOrTouchEvent) => {\n    const event = isTouch(e) ? e.changedTouches[0] : e;\n\n    this.setState({\n      isTravellerMoving: false,\n      isSlideMoving: true,\n      slideMoveStartX: event.pageX,\n    });\n\n    this.attachDragEndListener();\n  };\n\n  handleSlideDrag(e: React.Touch | React.MouseEvent<SVGGElement> | MouseEvent) {\n    const { slideMoveStartX, startX, endX, scaleValues } = this.state;\n    if (scaleValues == null) {\n      return;\n    }\n    const { x, width, travellerWidth, startIndex, endIndex, onChange, data, gap } = this.props;\n    let delta = e.pageX - slideMoveStartX;\n\n    if (delta > 0) {\n      delta = Math.min(delta, x + width - travellerWidth - endX, x + width - travellerWidth - startX);\n    } else if (delta < 0) {\n      delta = Math.max(delta, x - startX, x - endX);\n    }\n    const newIndex = getIndex({\n      startX: startX + delta,\n      endX: endX + delta,\n      data,\n      gap,\n      scaleValues,\n    });\n\n    if ((newIndex.startIndex !== startIndex || newIndex.endIndex !== endIndex) && onChange) {\n      onChange(newIndex);\n    }\n\n    this.setState({\n      startX: startX + delta,\n      endX: endX + delta,\n      slideMoveStartX: e.pageX,\n    });\n  }\n\n  handleTravellerDragStart(id: BrushTravellerId, e: MouseOrTouchEvent) {\n    const event = isTouch(e) ? e.changedTouches[0] : e;\n\n    this.setState({\n      isSlideMoving: false,\n      isTravellerMoving: true,\n      movingTravellerId: id,\n      brushMoveStartX: event.pageX,\n    });\n\n    this.attachDragEndListener();\n  }\n\n  handleTravellerMove(e: React.Touch | React.MouseEvent<SVGGElement> | MouseEvent) {\n    const { brushMoveStartX, movingTravellerId, endX, startX, scaleValues } = this.state;\n    if (movingTravellerId == null) {\n      return;\n    }\n    const prevValue = this.state[movingTravellerId];\n\n    const { x, width, travellerWidth, onChange, gap, data } = this.props;\n    const params = { startX: this.state.startX, endX: this.state.endX, data, gap, scaleValues };\n\n    let delta = e.pageX - brushMoveStartX;\n    if (delta > 0) {\n      delta = Math.min(delta, x + width - travellerWidth - prevValue);\n    } else if (delta < 0) {\n      delta = Math.max(delta, x - prevValue);\n    }\n\n    params[movingTravellerId] = prevValue + delta;\n\n    const newIndex = getIndex(params);\n    const { startIndex, endIndex } = newIndex;\n    const isFullGap = () => {\n      const lastIndex = data.length - 1;\n      if (\n        (movingTravellerId === 'startX' && (endX > startX ? startIndex % gap === 0 : endIndex % gap === 0)) ||\n        (endX < startX && endIndex === lastIndex) ||\n        (movingTravellerId === 'endX' && (endX > startX ? endIndex % gap === 0 : startIndex % gap === 0)) ||\n        (endX > startX && endIndex === lastIndex)\n      ) {\n        return true;\n      }\n      return false;\n    };\n\n    this.setState(\n      // @ts-expect-error not sure why typescript is not happy with this, partial update is fine in React\n      {\n        [movingTravellerId]: prevValue + delta,\n        brushMoveStartX: e.pageX,\n      },\n      () => {\n        if (onChange) {\n          if (isFullGap()) {\n            onChange(newIndex);\n          }\n        }\n      },\n    );\n  }\n\n  handleTravellerMoveKeyboard = (direction: 1 | -1, id: BrushTravellerId) => {\n    const { data, gap } = this.props;\n    // scaleValues are a list of coordinates. For example: [65, 250, 435, 620, 805, 990].\n    const { scaleValues, startX, endX } = this.state;\n    if (scaleValues == null) {\n      return;\n    }\n    // currentScaleValue refers to which coordinate the current traveller should be placed at.\n    const currentScaleValue = this.state[id];\n\n    const currentIndex = scaleValues.indexOf(currentScaleValue);\n    if (currentIndex === -1) {\n      return;\n    }\n\n    const newIndex = currentIndex + direction;\n    if (newIndex === -1 || newIndex >= scaleValues.length) {\n      return;\n    }\n\n    const newScaleValue = scaleValues[newIndex];\n\n    // Prevent travellers from being on top of each other or overlapping\n    if ((id === 'startX' && newScaleValue >= endX) || (id === 'endX' && newScaleValue <= startX)) {\n      return;\n    }\n\n    this.setState(\n      // @ts-expect-error not sure why typescript is not happy with this, partial update is fine in React\n      {\n        [id]: newScaleValue,\n      },\n      () => {\n        this.props.onChange(\n          getIndex({\n            startX: this.state.startX,\n            endX: this.state.endX,\n            data,\n            gap,\n            scaleValues,\n          }),\n        );\n      },\n    );\n  };\n\n  render() {\n    const {\n      data,\n      className,\n      children,\n      x,\n      y,\n      dy,\n      width,\n      height,\n      alwaysShowText,\n      fill,\n      stroke,\n      startIndex,\n      endIndex,\n      travellerWidth,\n      tickFormatter,\n      dataKey,\n      padding,\n    } = this.props;\n    const { startX, endX, isTextActive, isSlideMoving, isTravellerMoving, isTravellerFocused } = this.state;\n\n    if (\n      !data ||\n      !data.length ||\n      !isNumber(x) ||\n      !isNumber(y) ||\n      !isNumber(width) ||\n      !isNumber(height) ||\n      width <= 0 ||\n      height <= 0\n    ) {\n      return null;\n    }\n\n    const layerClass = clsx('recharts-brush', className);\n    const style = generatePrefixStyle('userSelect', 'none');\n    const calculatedY = y + (dy ?? 0);\n\n    return (\n      <Layer\n        className={layerClass}\n        onMouseLeave={this.handleLeaveWrapper}\n        onTouchMove={this.handleTouchMove}\n        style={style}\n      >\n        <Background x={x} y={calculatedY} width={width} height={height} fill={fill} stroke={stroke} />\n        <PanoramaContextProvider>\n          <Panorama x={x} y={calculatedY} width={width} height={height} data={data} padding={padding}>\n            {children}\n          </Panorama>\n        </PanoramaContextProvider>\n        <Slide\n          y={calculatedY}\n          height={height}\n          stroke={stroke}\n          travellerWidth={travellerWidth}\n          startX={startX}\n          endX={endX}\n          onMouseEnter={this.handleEnterSlideOrTraveller}\n          onMouseLeave={this.handleLeaveSlideOrTraveller}\n          onMouseDown={this.handleSlideDragStart}\n          onTouchStart={this.handleSlideDragStart}\n        />\n        <TravellerLayer\n          travellerX={startX}\n          id=\"startX\"\n          otherProps={{ ...this.props, y: calculatedY }}\n          onMouseEnter={this.handleEnterSlideOrTraveller}\n          onMouseLeave={this.handleLeaveSlideOrTraveller}\n          onMouseDown={this.travellerDragStartHandlers.startX}\n          onTouchStart={this.travellerDragStartHandlers.startX}\n          onTravellerMoveKeyboard={this.handleTravellerMoveKeyboard}\n          onFocus={() => {\n            this.setState({ isTravellerFocused: true });\n          }}\n          onBlur={() => {\n            this.setState({ isTravellerFocused: false });\n          }}\n        />\n        <TravellerLayer\n          travellerX={endX}\n          id=\"endX\"\n          otherProps={{ ...this.props, y: calculatedY }}\n          onMouseEnter={this.handleEnterSlideOrTraveller}\n          onMouseLeave={this.handleLeaveSlideOrTraveller}\n          onMouseDown={this.travellerDragStartHandlers.endX}\n          onTouchStart={this.travellerDragStartHandlers.endX}\n          onTravellerMoveKeyboard={this.handleTravellerMoveKeyboard}\n          onFocus={() => {\n            this.setState({ isTravellerFocused: true });\n          }}\n          onBlur={() => {\n            this.setState({ isTravellerFocused: false });\n          }}\n        />\n        {(isTextActive || isSlideMoving || isTravellerMoving || isTravellerFocused || alwaysShowText) && (\n          <BrushText\n            startIndex={startIndex}\n            endIndex={endIndex}\n            y={calculatedY}\n            height={height}\n            travellerWidth={travellerWidth}\n            stroke={stroke}\n            tickFormatter={tickFormatter}\n            dataKey={dataKey}\n            data={data}\n            startX={startX}\n            endX={endX}\n          />\n        )}\n      </Layer>\n    );\n  }\n}\n\nfunction BrushInternal(props: InternalProps) {\n  const dispatch = useAppDispatch();\n  const chartData = useChartData();\n  const dataIndexes = useDataIndex();\n  const onChangeFromContext = useContext(BrushUpdateDispatchContext);\n  const onChangeFromProps = props.onChange;\n  const { startIndex: startIndexFromProps, endIndex: endIndexFromProps } = props;\n\n  useEffect(() => {\n    // start and end index can be controlled from props, and we need them to stay up-to-date in the Redux state too\n    dispatch(setDataStartEndIndexes({ startIndex: startIndexFromProps, endIndex: endIndexFromProps }));\n  }, [dispatch, endIndexFromProps, startIndexFromProps]);\n\n  useBrushChartSynchronisation();\n\n  const onChange = useCallback(\n    (nextState: BrushStartEndIndex) => {\n      if (dataIndexes == null) {\n        return;\n      }\n      const { startIndex, endIndex } = dataIndexes;\n      if (nextState.startIndex !== startIndex || nextState.endIndex !== endIndex) {\n        onChangeFromContext?.(nextState);\n        onChangeFromProps?.(nextState);\n        dispatch(setDataStartEndIndexes(nextState));\n      }\n    },\n    [onChangeFromProps, onChangeFromContext, dispatch, dataIndexes],\n  );\n\n  const brushDimensions = useAppSelector(selectBrushDimensions);\n  if (brushDimensions == null || dataIndexes == null || chartData == null || !chartData.length) {\n    return null;\n  }\n\n  const { startIndex, endIndex } = dataIndexes;\n  const { x, y, width } = brushDimensions;\n\n  const contextProperties: PropertiesFromContext = {\n    data: chartData,\n    x,\n    y,\n    width,\n    startIndex,\n    endIndex,\n    onChange,\n  };\n  return (\n    <BrushWithState\n      {...props}\n      {...contextProperties}\n      startIndexControlledFromProps={startIndexFromProps ?? undefined}\n      endIndexControlledFromProps={endIndexFromProps ?? undefined}\n    />\n  );\n}\n\nfunction BrushSettingsDispatcher(props: BrushSettings): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(setBrushSettings(props));\n    return () => {\n      dispatch(setBrushSettings(null));\n    };\n  }, [dispatch, props]);\n  return null;\n}\n\nconst defaultBrushProps = {\n  height: 40,\n  travellerWidth: 5,\n  gap: 1,\n  fill: '#fff',\n  stroke: '#666',\n  padding: { top: 1, right: 1, bottom: 1, left: 1 },\n  leaveTimeOut: 1000,\n  alwaysShowText: false,\n} as const satisfies Partial<Props>;\n\nexport function Brush(outsideProps: Props) {\n  const props = resolveDefaultProps(outsideProps, defaultBrushProps);\n  return (\n    <>\n      <BrushSettingsDispatcher\n        height={props.height}\n        x={props.x}\n        y={props.y}\n        width={props.width}\n        padding={props.padding}\n      />\n      <BrushInternal {...props} />\n    </>\n  );\n}\nBrush.displayName = 'Brush';\n","import { Coordinate, Size } from './types';\n\nexport const rectWithPoints = ({ x: x1, y: y1 }: Coordinate, { x: x2, y: y2 }: Coordinate) => ({\n  x: Math.min(x1, x2),\n  y: Math.min(y1, y2),\n  width: Math.abs(x2 - x1),\n  height: Math.abs(y2 - y1),\n});\n\n/**\n * Compute the x, y, width, and height of a box from two reference points.\n * @param  {Object} coords     x1, x2, y1, and y2\n * @return {Object} object\n */\nexport const rectWithCoords = ({ x1, y1, x2, y2 }: { x1: number; y1: number; x2: number; y2: number }) =>\n  rectWithPoints({ x: x1, y: y1 }, { x: x2, y: y2 });\n\nexport class ScaleHelper {\n  static EPS = 1e-4;\n\n  private scale: any;\n\n  static create(obj: any) {\n    return new ScaleHelper(obj);\n  }\n\n  constructor(scale: any) {\n    this.scale = scale;\n  }\n\n  get domain() {\n    return this.scale.domain;\n  }\n\n  get range() {\n    return this.scale.range;\n  }\n\n  get rangeMin() {\n    return this.range()[0];\n  }\n\n  get rangeMax() {\n    return this.range()[1];\n  }\n\n  get bandwidth() {\n    return this.scale.bandwidth;\n  }\n\n  apply(value: any, { bandAware, position }: { bandAware?: boolean; position?: any } = {}) {\n    if (value === undefined) {\n      return undefined;\n    }\n    if (position) {\n      switch (position) {\n        case 'start': {\n          return this.scale(value);\n        }\n        case 'middle': {\n          const offset = this.bandwidth ? this.bandwidth() / 2 : 0;\n          return this.scale(value) + offset;\n        }\n        case 'end': {\n          const offset = this.bandwidth ? this.bandwidth() : 0;\n          return this.scale(value) + offset;\n        }\n        default: {\n          return this.scale(value);\n        }\n      }\n    }\n    if (bandAware) {\n      const offset = this.bandwidth ? this.bandwidth() / 2 : 0;\n      return this.scale(value) + offset;\n    }\n    return this.scale(value);\n  }\n\n  isInRange(value: number) {\n    const range = this.range();\n\n    const first = range[0];\n    const last = range[range.length - 1];\n\n    return first <= last ? value >= first && value <= last : value >= last && value <= first;\n  }\n}\n\ntype ScaleResult<T> = {\n  [P in keyof T]: number;\n};\ntype Scales<T> = {\n  [P in keyof T]: ScaleHelper;\n};\ntype ScalesApply<T> = (coord: { [P in keyof T]: any }, options: any) => ScaleResult<T>;\ntype ScalesIsInRange<T> = (coord: { [P in keyof T]: any }) => boolean;\ntype LabeledScales<T> = Scales<T> & { apply: ScalesApply<T> } & { isInRange: ScalesIsInRange<T> };\n\nexport const createLabeledScales = (options: Record<string, any>): LabeledScales<Record<string, any>> => {\n  const scales: Scales<Record<string, any>> = Object.keys(options).reduce(\n    (res, key: string) => ({\n      ...res,\n      [key]: ScaleHelper.create(options[key]),\n    }),\n    {},\n  );\n\n  return {\n    ...scales,\n    apply(coord: any, { bandAware, position }: any = {}) {\n      return Object.fromEntries(\n        Object.entries(coord).map(([label, value]) => [label, scales[label].apply(value, { bandAware, position })]),\n      );\n    },\n\n    isInRange(coord) {\n      return Object.keys(coord).every(label => scales[label].isInRange(coord[label]));\n    },\n  } as LabeledScales<Record<string, any>>;\n};\n\n/** Normalizes the angle so that 0 <= angle < 180.\n * @param {number} angle Angle in degrees.\n * @return {number} the normalized angle with a value of at least 0 and never greater or equal to 180. */\nexport function normalizeAngle(angle: number) {\n  return ((angle % 180) + 180) % 180;\n}\n\n/** Calculates the width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.\n * @param {Object} size Width and height of the text in a horizontal position.\n * @param {number} angle Angle in degrees in which the text is displayed.\n * @return {number} The width of the largest horizontal line that fits inside a rectangle that is displayed at an angle.\n */\nexport const getAngledRectangleWidth = ({ width, height }: Size, angle: number | undefined = 0) => {\n  // Ensure angle is >= 0 && < 180\n  const normalizedAngle = normalizeAngle(angle);\n  const angleRadians = (normalizedAngle * Math.PI) / 180;\n\n  /* Depending on the height and width of the rectangle, we may need to use different formulas to calculate the angled\n   * width. This threshold defines when each formula should kick in. */\n  const angleThreshold = Math.atan(height / width);\n\n  const angledWidth =\n    angleRadians > angleThreshold && angleRadians < Math.PI - angleThreshold\n      ? height / Math.sin(angleRadians)\n      : width / Math.cos(angleRadians);\n\n  return Math.abs(angledWidth);\n};\n","import { createSlice, current, PayloadAction } from '@reduxjs/toolkit';\nimport { WritableDraft } from 'immer';\nimport { AxisId } from './cartesianAxisSlice';\nimport { IfOverflow } from '../util/IfOverflow';\n\nexport type ReferenceElementSettings = {\n  yAxisId: AxisId;\n  xAxisId: AxisId;\n  ifOverflow: IfOverflow;\n};\n\nexport type ReferenceDotSettings = ReferenceElementSettings & {\n  x: unknown;\n  y: unknown;\n  r: number;\n};\n\nexport type ReferenceAreaSettings = ReferenceElementSettings & {\n  x1: unknown;\n  x2: unknown;\n  y1: unknown;\n  y2: unknown;\n};\n\nexport type ReferenceLineSettings = ReferenceElementSettings & {\n  x: unknown;\n  y: unknown;\n};\n\ntype ReferenceElementState = {\n  dots: ReadonlyArray<ReferenceDotSettings>;\n  areas: ReadonlyArray<ReferenceAreaSettings>;\n  lines: ReadonlyArray<ReferenceLineSettings>;\n};\n\nconst initialState: ReferenceElementState = {\n  dots: [],\n  areas: [],\n  lines: [],\n};\n\nexport const referenceElementsSlice = createSlice({\n  name: 'referenceElements',\n  initialState,\n  reducers: {\n    addDot: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceDotSettings>) => {\n      state.dots.push(action.payload);\n    },\n    removeDot: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceDotSettings>) => {\n      const index = current(state).dots.findIndex(dot => dot === action.payload);\n      if (index !== -1) {\n        state.dots.splice(index, 1);\n      }\n    },\n    addArea: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceAreaSettings>) => {\n      state.areas.push(action.payload);\n    },\n    removeArea: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceAreaSettings>) => {\n      const index = current(state).areas.findIndex(area => area === action.payload);\n      if (index !== -1) {\n        state.areas.splice(index, 1);\n      }\n    },\n    addLine: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceLineSettings>) => {\n      state.lines.push(action.payload);\n    },\n    removeLine: (state: WritableDraft<ReferenceElementState>, action: PayloadAction<ReferenceLineSettings>) => {\n      const index = current(state).lines.findIndex(line => line === action.payload);\n      if (index !== -1) {\n        state.lines.splice(index, 1);\n      }\n    },\n  },\n});\n\nexport const { addDot, removeDot, addArea, removeArea, addLine, removeLine } = referenceElementsSlice.actions;\n\nexport const referenceElementsReducer = referenceElementsSlice.reducer;\n","import * as React from 'react';\nimport { createContext, ReactNode, useContext, useState } from 'react';\nimport { uniqueId } from '../util/DataUtils';\nimport { usePlotArea } from '../hooks';\n\nconst ClipPathIdContext = createContext<string | undefined>(undefined);\n\n/**\n * Generates a unique clip path ID for use in SVG elements,\n * and puts it in a context provider.\n *\n * To read the clip path ID, use the `useClipPathId` hook,\n * or render `<ClipPath>` component which will automatically use the ID from this context.\n *\n * @param props children - React children to be wrapped by the provider\n * @returns React Context Provider\n */\nexport const ClipPathProvider = ({ children }: { children: ReactNode }) => {\n  const [clipPathId] = useState<string>(`${uniqueId('recharts')}-clip`);\n\n  const plotArea = usePlotArea();\n\n  if (plotArea == null) {\n    return null;\n  }\n  const { x, y, width, height } = plotArea;\n\n  return (\n    <ClipPathIdContext.Provider value={clipPathId}>\n      <defs>\n        <clipPath id={clipPathId}>\n          <rect x={x} y={y} height={height} width={width} />\n        </clipPath>\n      </defs>\n      {children}\n    </ClipPathIdContext.Provider>\n  );\n};\n\nexport const useClipPathId = (): string | undefined => {\n  return useContext(ClipPathIdContext);\n};\n","/**\n * @fileOverview Reference Line\n */\nimport * as React from 'react';\nimport { Component, ReactElement, SVGProps, useEffect } from 'react';\nimport { clsx } from 'clsx';\nimport { Layer } from '../container/Layer';\nimport { ImplicitLabelType, Label } from '../component/Label';\nimport { IfOverflow } from '../util/IfOverflow';\nimport { isNan, isNumOrStr } from '../util/DataUtils';\nimport { createLabeledScales, rectWithCoords } from '../util/CartesianUtils';\nimport { CartesianViewBox } from '../util/types';\nimport { Props as XAxisProps } from './XAxis';\nimport { Props as YAxisProps } from './YAxis';\nimport { filterProps } from '../util/ReactUtils';\nimport { useViewBox } from '../context/chartLayoutContext';\nimport { addLine, ReferenceLineSettings, removeLine } from '../state/referenceElementsSlice';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport {\n  BaseAxisWithScale,\n  selectAxisScale,\n  selectXAxisSettings,\n  selectYAxisSettings,\n} from '../state/selectors/axisSelectors';\nimport { useIsPanorama } from '../context/PanoramaContext';\n\nimport { useClipPathId } from '../container/ClipPathProvider';\n\ninterface InternalReferenceLineProps {\n  viewBox?: CartesianViewBox;\n  xAxis?: BaseAxisWithScale;\n  yAxis?: BaseAxisWithScale;\n  clipPathId?: number | string;\n}\n\nexport type Segment = {\n  x?: number | string;\n  y?: number | string;\n};\n\nexport type ReferenceLinePosition = 'middle' | 'start' | 'end';\n\ninterface ReferenceLineProps extends InternalReferenceLineProps {\n  ifOverflow?: IfOverflow;\n\n  x?: number | string;\n  y?: number | string;\n\n  segment?: ReadonlyArray<Segment>;\n\n  position?: ReferenceLinePosition;\n\n  className?: number | string;\n  yAxisId?: number | string;\n  xAxisId?: number | string;\n  shape?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>);\n  label?: ImplicitLabelType;\n}\n\n/**\n * This excludes `viewBox` prop from svg for two reasons:\n * 1. The components wants viewBox of object type, and svg wants string\n *    - so there's a conflict, and the component will throw if it gets string\n * 2. Internally the component calls `filterProps` which filters the viewBox away anyway\n */\nexport type Props = Omit<SVGProps<SVGLineElement>, 'viewBox'> & ReferenceLineProps;\n\nconst renderLine = (option: ReferenceLineProps['shape'], props: any) => {\n  let line;\n\n  if (React.isValidElement(option)) {\n    line = React.cloneElement(option, props);\n  } else if (typeof option === 'function') {\n    line = option(props);\n  } else {\n    line = <line {...props} className=\"recharts-reference-line-line\" />;\n  }\n\n  return line;\n};\n\ntype EndPointsPropsSubset = {\n  ifOverflow?: IfOverflow;\n  segment?: ReadonlyArray<Segment>;\n  x?: number | string;\n  y?: number | string;\n};\n// TODO: ScaleHelper\nexport const getEndPoints = (\n  scales: any,\n  isFixedX: boolean,\n  isFixedY: boolean,\n  isSegment: boolean,\n  viewBox: CartesianViewBox,\n  position: Props['position'],\n  xAxisOrientation: XAxisProps['orientation'],\n  yAxisOrientation: YAxisProps['orientation'],\n  props: EndPointsPropsSubset,\n) => {\n  const { x, y, width, height } = viewBox;\n\n  if (isFixedY) {\n    const { y: yCoord } = props;\n    const coord = scales.y.apply(yCoord, { position });\n    // don't render the line if the scale can't compute a result that makes sense\n    if (isNan(coord)) return null;\n\n    if (props.ifOverflow === 'discard' && !scales.y.isInRange(coord)) {\n      return null;\n    }\n\n    const points = [\n      { x: x + width, y: coord },\n      { x, y: coord },\n    ];\n    return yAxisOrientation === 'left' ? points.reverse() : points;\n  }\n  if (isFixedX) {\n    const { x: xCoord } = props;\n    const coord = scales.x.apply(xCoord, { position });\n    // don't render the line if the scale can't compute a result that makes sense\n    if (isNan(coord)) return null;\n\n    if (props.ifOverflow === 'discard' && !scales.x.isInRange(coord)) {\n      return null;\n    }\n\n    const points = [\n      { x: coord, y: y + height },\n      { x: coord, y },\n    ];\n    return xAxisOrientation === 'top' ? points.reverse() : points;\n  }\n  if (isSegment) {\n    const { segment } = props;\n\n    const points = segment.map(p => scales.apply(p, { position }));\n\n    if (props.ifOverflow === 'discard' && points.some(p => !scales.isInRange(p))) {\n      return null;\n    }\n\n    return points;\n  }\n\n  return null;\n};\n\nfunction ReportReferenceLine(props: ReferenceLineSettings): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(addLine(props));\n    return () => {\n      dispatch(removeLine(props));\n    };\n  });\n  return null;\n}\n\nfunction ReferenceLineImpl(props: Props) {\n  const { x: fixedX, y: fixedY, segment, xAxisId, yAxisId, shape, className, ifOverflow } = props;\n\n  const isPanorama = useIsPanorama();\n  const clipPathId = useClipPathId();\n  const xAxis = useAppSelector(state => selectXAxisSettings(state, xAxisId));\n  const yAxis = useAppSelector(state => selectYAxisSettings(state, yAxisId));\n  const xAxisScale = useAppSelector(state => selectAxisScale(state, 'xAxis', xAxisId, isPanorama));\n  const yAxisScale = useAppSelector(state => selectAxisScale(state, 'yAxis', yAxisId, isPanorama));\n\n  const viewBox = useViewBox();\n  const isFixedX = isNumOrStr(fixedX);\n  const isFixedY = isNumOrStr(fixedY);\n\n  if (!clipPathId || !viewBox || xAxis == null || yAxis == null || xAxisScale == null || yAxisScale == null) {\n    return null;\n  }\n\n  const scales = createLabeledScales({ x: xAxisScale, y: yAxisScale });\n\n  const isSegment = segment && segment.length === 2;\n\n  const endPoints = getEndPoints(\n    scales,\n    isFixedX,\n    isFixedY,\n    isSegment,\n    viewBox,\n    props.position,\n    xAxis.orientation,\n    yAxis.orientation,\n    props,\n  );\n  if (!endPoints) {\n    return null;\n  }\n\n  const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = endPoints;\n\n  const clipPath = ifOverflow === 'hidden' ? `url(#${clipPathId})` : undefined;\n\n  const lineProps = {\n    clipPath,\n    ...filterProps(props, true),\n    x1,\n    y1,\n    x2,\n    y2,\n  };\n\n  return (\n    <Layer className={clsx('recharts-reference-line', className)}>\n      {renderLine(shape, lineProps)}\n      {Label.renderCallByParent(props, rectWithCoords({ x1, y1, x2, y2 }))}\n    </Layer>\n  );\n}\n\nfunction ReferenceLineSettingsDispatcher(props: Props) {\n  return (\n    <>\n      <ReportReferenceLine\n        yAxisId={props.yAxisId}\n        xAxisId={props.xAxisId}\n        ifOverflow={props.ifOverflow}\n        x={props.x}\n        y={props.y}\n      />\n      <ReferenceLineImpl {...props} />\n    </>\n  );\n}\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport class ReferenceLine extends Component<Props> {\n  static displayName = 'ReferenceLine';\n\n  static defaultProps = {\n    ifOverflow: 'discard',\n    xAxisId: 0,\n    yAxisId: 0,\n    fill: 'none',\n    stroke: '#ccc',\n    fillOpacity: 1,\n    strokeWidth: 1,\n    position: 'middle',\n  };\n\n  render() {\n    return <ReferenceLineSettingsDispatcher {...this.props} />;\n  }\n}\n","import * as React from 'react';\nimport { Component, ReactElement, useEffect } from 'react';\nimport { clsx } from 'clsx';\nimport { Layer } from '../container/Layer';\nimport { Dot, Props as DotProps } from '../shape/Dot';\nimport { ImplicitLabelType, Label } from '../component/Label';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { IfOverflow } from '../util/IfOverflow';\nimport { createLabeledScales } from '../util/CartesianUtils';\nimport { filterProps } from '../util/ReactUtils';\nimport { addDot, ReferenceDotSettings, removeDot } from '../state/referenceElementsSlice';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { selectAxisScale } from '../state/selectors/axisSelectors';\nimport { useIsPanorama } from '../context/PanoramaContext';\n\nimport { useClipPathId } from '../container/ClipPathProvider';\n\ninterface ReferenceDotProps {\n  r?: number;\n\n  ifOverflow?: IfOverflow;\n  /**\n   * The x-coordinate of the center of the dot.\n   * It should match a value from the XAxis, so if the XAxis is a number axis, this should be a number.\n   * If the XAxis is a category axis, this should be a string.\n   */\n  x?: number | string;\n  y?: number | string;\n\n  className?: number | string;\n  yAxisId?: number | string;\n  xAxisId?: number | string;\n  shape?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>);\n  label?: ImplicitLabelType;\n}\n\nexport type Props = DotProps & ReferenceDotProps;\n\nconst useCoordinate = (\n  x: number | string | undefined,\n  y: number | string | undefined,\n  xAxisId: Props['xAxisId'],\n  yAxisId: Props['yAxisId'],\n  ifOverflow: IfOverflow,\n) => {\n  const isX = isNumOrStr(x);\n  const isY = isNumOrStr(y);\n  const isPanorama = useIsPanorama();\n  const xAxisScale = useAppSelector(state => selectAxisScale(state, 'xAxis', xAxisId, isPanorama));\n  const yAxisScale = useAppSelector(state => selectAxisScale(state, 'yAxis', yAxisId, isPanorama));\n\n  if (!isX || !isY || xAxisScale == null || yAxisScale == null) {\n    return null;\n  }\n\n  const scales = createLabeledScales({ x: xAxisScale, y: yAxisScale });\n\n  const result = scales.apply({ x, y }, { bandAware: true });\n\n  if (ifOverflow === 'discard' && !scales.isInRange(result)) {\n    return null;\n  }\n\n  return result;\n};\n\nfunction ReportReferenceDot(props: ReferenceDotSettings): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(addDot(props));\n    return () => {\n      dispatch(removeDot(props));\n    };\n  });\n  return null;\n}\n\nconst renderDot = (option: Props['shape'], props: any) => {\n  let dot;\n\n  if (React.isValidElement(option)) {\n    dot = React.cloneElement(option, props);\n  } else if (typeof option === 'function') {\n    dot = option(props);\n  } else {\n    dot = <Dot {...props} cx={props.cx} cy={props.cy} className=\"recharts-reference-dot-dot\" />;\n  }\n\n  return dot;\n};\n\nfunction ReferenceDotImpl(props: Props) {\n  const { x, y, r } = props;\n  const clipPathId = useClipPathId();\n\n  const coordinate = useCoordinate(x, y, props.xAxisId, props.yAxisId, props.ifOverflow);\n\n  if (!coordinate) {\n    return null;\n  }\n\n  const { x: cx, y: cy } = coordinate;\n\n  const { shape, className, ifOverflow } = props;\n\n  const clipPath = ifOverflow === 'hidden' ? `url(#${clipPathId})` : undefined;\n\n  const dotProps = {\n    clipPath,\n    ...filterProps(props, true),\n    cx,\n    cy,\n  };\n\n  return (\n    <Layer className={clsx('recharts-reference-dot', className)}>\n      {renderDot(shape, dotProps)}\n      {Label.renderCallByParent(props, {\n        x: cx - r,\n        y: cy - r,\n        width: 2 * r,\n        height: 2 * r,\n      })}\n    </Layer>\n  );\n}\n\nfunction ReferenceDotSettingsDispatcher(props: Props) {\n  const { x, y, r, ifOverflow, yAxisId, xAxisId } = props;\n  return (\n    <>\n      <ReportReferenceDot y={y} x={x} r={r} yAxisId={yAxisId} xAxisId={xAxisId} ifOverflow={ifOverflow} />\n      <ReferenceDotImpl {...props} />\n    </>\n  );\n}\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport class ReferenceDot extends Component<Props> {\n  static displayName = 'ReferenceDot';\n\n  static defaultProps: Partial<Props> = {\n    ifOverflow: 'discard',\n    xAxisId: 0,\n    yAxisId: 0,\n    r: 10,\n    fill: '#fff',\n    stroke: '#ccc',\n    fillOpacity: 1,\n    strokeWidth: 1,\n  };\n\n  render() {\n    return <ReferenceDotSettingsDispatcher {...this.props} />;\n  }\n}\n","import * as React from 'react';\nimport { Component, ReactElement, useEffect } from 'react';\nimport { clsx } from 'clsx';\nimport { Layer } from '../container/Layer';\nimport { ImplicitLabelType, Label } from '../component/Label';\nimport { createLabeledScales, rectWithPoints } from '../util/CartesianUtils';\nimport { IfOverflow } from '../util/IfOverflow';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { Props as RectangleProps, Rectangle } from '../shape/Rectangle';\nimport { filterProps } from '../util/ReactUtils';\n\nimport { addArea, ReferenceAreaSettings, removeArea } from '../state/referenceElementsSlice';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { selectAxisScale } from '../state/selectors/axisSelectors';\nimport { RechartsScale } from '../util/ChartUtils';\nimport { useIsPanorama } from '../context/PanoramaContext';\n\nimport { useClipPathId } from '../container/ClipPathProvider';\n\ninterface ReferenceAreaProps {\n  ifOverflow?: IfOverflow;\n  x1?: number | string;\n  x2?: number | string;\n  y1?: number | string;\n  y2?: number | string;\n\n  className?: number | string;\n  yAxisId?: number | string;\n  xAxisId?: number | string;\n  shape?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>);\n  label?: ImplicitLabelType;\n}\n\nexport type Props = RectangleProps & ReferenceAreaProps;\n\nconst getRect = (\n  hasX1: boolean,\n  hasX2: boolean,\n  hasY1: boolean,\n  hasY2: boolean,\n  xAxisScale: RechartsScale | undefined,\n  yAxisScale: RechartsScale | undefined,\n  props: Props,\n) => {\n  const { x1: xValue1, x2: xValue2, y1: yValue1, y2: yValue2 } = props;\n\n  if (xAxisScale == null || yAxisScale == null) {\n    return null;\n  }\n\n  const scales = createLabeledScales({ x: xAxisScale, y: yAxisScale });\n\n  const p1 = {\n    x: hasX1 ? scales.x.apply(xValue1, { position: 'start' }) : scales.x.rangeMin,\n    y: hasY1 ? scales.y.apply(yValue1, { position: 'start' }) : scales.y.rangeMin,\n  };\n\n  const p2 = {\n    x: hasX2 ? scales.x.apply(xValue2, { position: 'end' }) : scales.x.rangeMax,\n    y: hasY2 ? scales.y.apply(yValue2, { position: 'end' }) : scales.y.rangeMax,\n  };\n\n  if (props.ifOverflow === 'discard' && (!scales.isInRange(p1) || !scales.isInRange(p2))) {\n    return null;\n  }\n\n  return rectWithPoints(p1, p2);\n};\n\nconst renderRect = (option: ReferenceAreaProps['shape'], props: any) => {\n  let rect;\n\n  if (React.isValidElement(option)) {\n    rect = React.cloneElement(option, props);\n  } else if (typeof option === 'function') {\n    rect = option(props);\n  } else {\n    rect = <Rectangle {...props} className=\"recharts-reference-area-rect\" />;\n  }\n\n  return rect;\n};\n\nfunction ReportReferenceArea(props: ReferenceAreaSettings): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(addArea(props));\n    return () => {\n      dispatch(removeArea(props));\n    };\n  });\n  return null;\n}\n\nfunction ReferenceAreaImpl(props: Props) {\n  const { x1, x2, y1, y2, className, shape, xAxisId, yAxisId } = props;\n  const clipPathId = useClipPathId();\n  const isPanorama = useIsPanorama();\n  const xAxisScale = useAppSelector(state => selectAxisScale(state, 'xAxis', xAxisId, isPanorama));\n  const yAxisScale = useAppSelector(state => selectAxisScale(state, 'yAxis', yAxisId, isPanorama));\n\n  if (xAxisScale == null || !yAxisScale == null) {\n    return null;\n  }\n\n  const hasX1 = isNumOrStr(x1);\n  const hasX2 = isNumOrStr(x2);\n  const hasY1 = isNumOrStr(y1);\n  const hasY2 = isNumOrStr(y2);\n\n  if (!hasX1 && !hasX2 && !hasY1 && !hasY2 && !shape) {\n    return null;\n  }\n\n  const rect = getRect(hasX1, hasX2, hasY1, hasY2, xAxisScale, yAxisScale, props);\n\n  if (!rect && !shape) {\n    return null;\n  }\n\n  const isOverflowHidden = props.ifOverflow === 'hidden';\n  const clipPath = isOverflowHidden ? `url(#${clipPathId})` : undefined;\n\n  return (\n    <Layer className={clsx('recharts-reference-area', className)}>\n      {renderRect(shape, { clipPath, ...filterProps(props, true), ...rect })}\n      {Label.renderCallByParent(props, rect)}\n    </Layer>\n  );\n}\n\nfunction ReferenceAreaSettingsDispatcher(props: Props) {\n  return (\n    <>\n      <ReportReferenceArea\n        yAxisId={props.yAxisId}\n        xAxisId={props.xAxisId}\n        ifOverflow={props.ifOverflow}\n        x1={props.x1}\n        x2={props.x2}\n        y1={props.y1}\n        y2={props.y2}\n      />\n      <ReferenceAreaImpl {...props} />\n    </>\n  );\n}\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport class ReferenceArea extends Component<Props> {\n  static displayName = 'ReferenceArea';\n\n  static defaultProps = {\n    ifOverflow: 'discard',\n    xAxisId: 0,\n    yAxisId: 0,\n    r: 10,\n    fill: '#ccc',\n    fillOpacity: 0.5,\n    stroke: 'none',\n    strokeWidth: 1,\n  };\n\n  render() {\n    return <ReferenceAreaSettingsDispatcher {...this.props} />;\n  }\n}\n","export function shallowEqual(a: any, b: any) {\n  /* eslint-disable no-restricted-syntax */\n  for (const key in a) {\n    if ({}.hasOwnProperty.call(a, key) && (!{}.hasOwnProperty.call(b, key) || a[key] !== b[key])) {\n      return false;\n    }\n  }\n  for (const key in b) {\n    if ({}.hasOwnProperty.call(b, key) && !{}.hasOwnProperty.call(a, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n","/**\n * Given an array and a number N, return a new array which contains every nTh\n * element of the input array. For n below 1, an empty array is returned.\n * If isValid is provided, all candidates must suffice the condition, else undefined is returned.\n * @param {T[]} array An input array.\n * @param {integer} n A number\n * @param {Function} isValid A function to evaluate a candidate form the array\n * @returns {T[]} The result array of the same type as the input array.\n */\nexport function getEveryNthWithCondition<Type>(\n  array: ReadonlyArray<Type>,\n  n: number,\n  isValid?: (candidate: Type) => boolean,\n): ReadonlyArray<Type> | undefined {\n  if (n < 1) {\n    return [];\n  }\n  if (n === 1 && isValid === undefined) {\n    return array;\n  }\n  const result: Type[] = [];\n  for (let i = 0; i < array.length; i += n) {\n    if (isValid === undefined || isValid(array[i]) === true) {\n      result.push(array[i]);\n    } else {\n      return undefined;\n    }\n  }\n  return result;\n}\n","import { getAngledRectangleWidth } from './CartesianUtils';\nimport { getEveryNthWithCondition } from './getEveryNthWithCondition';\nimport { Size, CartesianTickItem, CartesianViewBoxRequired } from './types';\n\nexport function getAngledTickWidth(contentSize: Size, unitSize: Size, angle: number) {\n  const size = { width: contentSize.width + unitSize.width, height: contentSize.height + unitSize.height };\n\n  return getAngledRectangleWidth(size, angle);\n}\n\nexport function getTickBoundaries(viewBox: CartesianViewBoxRequired, sign: number, sizeKey: string) {\n  const isWidth = sizeKey === 'width';\n  const { x, y, width, height } = viewBox;\n  if (sign === 1) {\n    return {\n      start: isWidth ? x : y,\n      end: isWidth ? x + width : y + height,\n    };\n  }\n  return {\n    start: isWidth ? x + width : y + height,\n    end: isWidth ? x : y,\n  };\n}\n\nexport function isVisible(\n  sign: number,\n  tickPosition: number,\n  getSize: () => number,\n  start: number,\n  end: number,\n): boolean {\n  /* Since getSize() is expensive (it reads the ticks' size from the DOM), we do this check first to avoid calculating\n   * the tick's size. */\n  if (sign * tickPosition < sign * start || sign * tickPosition > sign * end) {\n    return false;\n  }\n\n  const size = getSize();\n\n  return sign * (tickPosition - (sign * size) / 2 - start) >= 0 && sign * (tickPosition + (sign * size) / 2 - end) <= 0;\n}\n\nexport function getNumberIntervalTicks(\n  ticks: ReadonlyArray<CartesianTickItem>,\n  interval: number,\n): ReadonlyArray<CartesianTickItem> | undefined {\n  return getEveryNthWithCondition(ticks, interval + 1);\n}\n","import { CartesianTickItem, CartesianViewBoxRequired, Size } from '../util/types';\nimport { mathSign, isNumber } from '../util/DataUtils';\nimport { getStringSize } from '../util/DOMUtils';\nimport { Global } from '../util/Global';\nimport { isVisible, getTickBoundaries, getNumberIntervalTicks, getAngledTickWidth } from '../util/TickUtils';\nimport { getEquidistantTicks } from './getEquidistantTicks';\nimport { CartesianAxisSettings, XAxisOrientation, YAxisOrientation } from '../state/cartesianAxisSlice';\n\nexport type Sign = 0 | 1 | -1;\n\nfunction getTicksEnd(\n  sign: Sign,\n  boundaries: { start: number; end: number },\n  getTickSize: (tick: CartesianTickItem, index: number) => number,\n  ticks: ReadonlyArray<CartesianTickItem>,\n  minTickGap: number,\n): ReadonlyArray<CartesianTickItem> {\n  const result = (ticks || []).slice();\n  const len = result.length;\n\n  const { start } = boundaries;\n  let { end } = boundaries;\n\n  for (let i = len - 1; i >= 0; i--) {\n    let entry = result[i];\n    let size: number | undefined;\n    const getSize = () => {\n      if (size === undefined) {\n        size = getTickSize(entry, i);\n      }\n\n      return size;\n    };\n\n    if (i === len - 1) {\n      const gap = sign * (entry.coordinate + (sign * getSize()) / 2 - end);\n      result[i] = entry = {\n        ...entry,\n        tickCoord: gap > 0 ? entry.coordinate - gap * sign : entry.coordinate,\n      };\n    } else {\n      result[i] = entry = { ...entry, tickCoord: entry.coordinate };\n    }\n\n    const isShow = isVisible(sign, entry.tickCoord, getSize, start, end);\n\n    if (isShow) {\n      end = entry.tickCoord - sign * (getSize() / 2 + minTickGap);\n      result[i] = { ...entry, isShow: true };\n    }\n  }\n\n  return result;\n}\n\nfunction getTicksStart(\n  sign: Sign,\n  boundaries: { start: number; end: number },\n  getTickSize: (tick: CartesianTickItem, index: number) => number,\n  ticks: ReadonlyArray<CartesianTickItem>,\n  minTickGap: number,\n  preserveEnd?: boolean,\n): ReadonlyArray<CartesianTickItem> {\n  // This method is mutating the array so clone is indeed necessary here\n  const result: Array<CartesianTickItem> = (ticks || []).slice();\n  const len = result.length;\n\n  let { start, end } = boundaries;\n\n  if (preserveEnd) {\n    // Try to guarantee the tail to be displayed\n    let tail = ticks[len - 1];\n    const tailSize = getTickSize(tail, len - 1);\n    const tailGap = sign * (tail.coordinate + (sign * tailSize) / 2 - end);\n    result[len - 1] = tail = {\n      ...tail,\n      tickCoord: tailGap > 0 ? tail.coordinate - tailGap * sign : tail.coordinate,\n    };\n\n    const isTailShow = isVisible(sign, tail.tickCoord, () => tailSize, start, end);\n\n    if (isTailShow) {\n      end = tail.tickCoord - sign * (tailSize / 2 + minTickGap);\n      result[len - 1] = { ...tail, isShow: true };\n    }\n  }\n\n  const count = preserveEnd ? len - 1 : len;\n  for (let i = 0; i < count; i++) {\n    let entry = result[i];\n    let size: number | undefined;\n    const getSize = () => {\n      if (size === undefined) {\n        size = getTickSize(entry, i);\n      }\n\n      return size;\n    };\n\n    if (i === 0) {\n      const gap = sign * (entry.coordinate - (sign * getSize()) / 2 - start);\n      result[i] = entry = {\n        ...entry,\n        tickCoord: gap < 0 ? entry.coordinate - gap * sign : entry.coordinate,\n      };\n    } else {\n      result[i] = entry = { ...entry, tickCoord: entry.coordinate };\n    }\n\n    const isShow = isVisible(sign, entry.tickCoord, getSize, start, end);\n\n    if (isShow) {\n      start = entry.tickCoord + sign * (getSize() / 2 + minTickGap);\n      result[i] = { ...entry, isShow: true };\n    }\n  }\n\n  return result;\n}\n\nexport type GetTicksInput = {\n  angle: number;\n  interval: CartesianAxisSettings['interval'];\n  minTickGap: number;\n  orientation: XAxisOrientation | YAxisOrientation;\n  tick: CartesianAxisSettings['tick'];\n  tickFormatter: CartesianAxisSettings['tickFormatter'];\n  ticks: ReadonlyArray<CartesianTickItem>;\n  unit: CartesianAxisSettings['unit'];\n  viewBox: CartesianViewBoxRequired;\n};\n\nexport function getTicks(\n  props: GetTicksInput,\n  fontSize?: string,\n  letterSpacing?: string,\n): ReadonlyArray<CartesianTickItem> {\n  const { tick, ticks, viewBox, minTickGap, orientation, interval, tickFormatter, unit, angle } = props;\n\n  if (!ticks || !ticks.length || !tick) {\n    return [];\n  }\n\n  if (isNumber(interval) || Global.isSsr) {\n    return getNumberIntervalTicks(ticks, isNumber(interval) ? interval : 0) ?? [];\n  }\n\n  let candidates: ReadonlyArray<CartesianTickItem> = [];\n\n  const sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height';\n  const unitSize: Size =\n    unit && sizeKey === 'width' ? getStringSize(unit, { fontSize, letterSpacing }) : { width: 0, height: 0 };\n\n  const getTickSize = (content: CartesianTickItem, index: number) => {\n    const value = typeof tickFormatter === 'function' ? tickFormatter(content.value, index) : content.value;\n    // Recharts only supports angles when sizeKey === 'width'\n    return sizeKey === 'width'\n      ? getAngledTickWidth(getStringSize(value, { fontSize, letterSpacing }), unitSize, angle)\n      : getStringSize(value, { fontSize, letterSpacing })[sizeKey];\n  };\n\n  const sign = ticks.length >= 2 ? mathSign(ticks[1].coordinate - ticks[0].coordinate) : 1;\n  const boundaries = getTickBoundaries(viewBox, sign, sizeKey);\n\n  if (interval === 'equidistantPreserveStart') {\n    return getEquidistantTicks(sign, boundaries, getTickSize, ticks, minTickGap);\n  }\n\n  if (interval === 'preserveStart' || interval === 'preserveStartEnd') {\n    candidates = getTicksStart(sign, boundaries, getTickSize, ticks, minTickGap, interval === 'preserveStartEnd');\n  } else {\n    candidates = getTicksEnd(sign, boundaries, getTickSize, ticks, minTickGap);\n  }\n\n  return candidates.filter(entry => entry.isShow);\n}\n","import { isVisible } from '../util/TickUtils';\nimport { CartesianTickItem } from '../util/types';\nimport { getEveryNthWithCondition } from '../util/getEveryNthWithCondition';\nimport { Sign } from './getTicks';\n\nexport function getEquidistantTicks(\n  sign: Sign,\n  boundaries: { start: number; end: number },\n  getTickSize: (tick: CartesianTickItem, index: number) => number,\n  ticks: ReadonlyArray<CartesianTickItem>,\n  minTickGap: number,\n): ReadonlyArray<CartesianTickItem> {\n  // If the ticks are readonly, then the slice might not be necessary\n  const result = (ticks || []).slice();\n\n  const { start: initialStart, end } = boundaries;\n  let index = 0;\n  // Premature optimisation idea 1: Estimate a lower bound, and start from there.\n  // For now, start from every tick\n  let stepsize = 1;\n  let start = initialStart;\n\n  while (stepsize <= result.length) {\n    // Given stepsize, evaluate whether every stepsize-th tick can be shown.\n    // If it can not, then increase the stepsize by 1, and try again.\n\n    const entry = ticks?.[index];\n\n    // Break condition - If we have evaluated all the ticks, then we are done.\n    if (entry === undefined) {\n      return getEveryNthWithCondition(ticks, stepsize);\n    }\n\n    // Check if the element collides with the next element\n    const i = index;\n    let size: number | undefined;\n    const getSize = () => {\n      if (size === undefined) {\n        size = getTickSize(entry, i);\n      }\n\n      return size;\n    };\n\n    const tickCoord = entry.coordinate;\n    // We will always show the first tick.\n    const isShow = index === 0 || isVisible(sign, tickCoord, getSize, start, end);\n\n    if (!isShow) {\n      // Start all over with a larger stepsize\n      index = 0;\n      start = initialStart;\n      stepsize += 1;\n    }\n\n    if (isShow) {\n      // If it can be shown, update the start\n      start = tickCoord + sign * (getSize() / 2 + minTickGap);\n      index += stepsize;\n    }\n  }\n\n  return [];\n}\n","/**\n * @fileOverview Cartesian Axis\n */\nimport * as React from 'react';\nimport { ReactElement, ReactNode, Component, SVGProps } from 'react';\n\nimport get from 'es-toolkit/compat/get';\nimport { clsx } from 'clsx';\nimport { shallowEqual } from '../util/ShallowEqual';\nimport { Layer } from '../container/Layer';\nimport { Text } from '../component/Text';\nimport { Label } from '../component/Label';\nimport { isNumber } from '../util/DataUtils';\nimport {\n  CartesianViewBox,\n  adaptEventsOfChild,\n  PresentationAttributesAdaptChildEvent,\n  CartesianTickItem,\n  AxisInterval,\n} from '../util/types';\nimport { filterProps } from '../util/ReactUtils';\nimport { getTicks } from './getTicks';\nimport { RechartsScale } from '../util/ChartUtils';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { XAxisPadding, YAxisPadding } from '../state/cartesianAxisSlice';\n\n/** The orientation of the axis in correspondence to the chart */\nexport type Orientation = 'top' | 'bottom' | 'left' | 'right';\n/** A unit to be appended to a value */\nexport type Unit = string | number;\n/** The formatter function of tick */\nexport type TickFormatter = (value: any, index: number) => string;\n\nexport interface CartesianAxisProps {\n  className?: string;\n  x?: number;\n  y?: number;\n  width?: number;\n  height?: number;\n  unit?: Unit;\n  orientation?: Orientation;\n  // The viewBox of svg\n  viewBox?: CartesianViewBox;\n  tick?: SVGProps<SVGTextElement> | ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | boolean;\n  axisLine?: boolean | SVGProps<SVGLineElement>;\n  tickLine?: boolean | SVGProps<SVGLineElement>;\n  mirror?: boolean;\n  tickMargin?: number;\n  hide?: boolean;\n  label?: any;\n  /** Padding information passed to custom tick components */\n  padding?: XAxisPadding | YAxisPadding;\n\n  minTickGap?: number;\n  /**\n   * Careful - this is the same name as XAxis + YAxis `ticks` but completely different object!\n   */\n  ticks?: ReadonlyArray<CartesianTickItem>;\n  tickSize?: number;\n  tickFormatter?: TickFormatter;\n  interval?: AxisInterval;\n  /** Angle in which ticks will be rendered. */\n  angle?: number;\n  /**\n   * This is NOT SVG scale attribute;\n   * this is Recharts scale, based on d3-scale.\n   */\n  scale: RechartsScale;\n  labelRef?: React.RefObject<Element>;\n}\n\ninterface IState {\n  fontSize: string;\n  letterSpacing: string;\n}\n\n/*\n * `viewBox` and `scale` are SVG attributes.\n * Recharts however - unfortunately - has its own attributes named `viewBox` and `scale`\n * that are completely different data shape and different purpose.\n */\nexport type Props = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'viewBox' | 'scale'> &\n  CartesianAxisProps;\n\nexport class CartesianAxis extends Component<Props, IState> {\n  static displayName = 'CartesianAxis';\n\n  tickRefs: React.MutableRefObject<Element[]>;\n\n  static defaultProps: Partial<Props> = {\n    x: 0,\n    y: 0,\n    width: 0,\n    height: 0,\n    viewBox: { x: 0, y: 0, width: 0, height: 0 },\n    // The orientation of axis\n    orientation: 'bottom',\n    // The ticks\n    ticks: [] as CartesianAxisProps['ticks'],\n\n    stroke: '#666',\n    tickLine: true,\n    axisLine: true,\n    tick: true,\n    mirror: false,\n\n    minTickGap: 5,\n    // The width or height of tick\n    tickSize: 6,\n    tickMargin: 2,\n    interval: 'preserveEnd',\n  };\n\n  constructor(props: Props) {\n    super(props);\n    this.tickRefs = React.createRef<Element[]>();\n    this.tickRefs.current = [];\n    this.state = { fontSize: '', letterSpacing: '' };\n  }\n\n  shouldComponentUpdate({ viewBox, ...restProps }: Props, nextState: IState) {\n    // props.viewBox is sometimes generated every time -\n    // check that specially as object equality is likely to fail\n    const { viewBox: viewBoxOld, ...restPropsOld } = this.props;\n    return (\n      !shallowEqual(viewBox, viewBoxOld) ||\n      !shallowEqual(restProps, restPropsOld) ||\n      !shallowEqual(nextState, this.state)\n    );\n  }\n\n  /**\n   * Calculate the coordinates of endpoints in ticks\n   * @param  data The data of a simple tick\n   * @return (x1, y1): The coordinate of endpoint close to tick text\n   *  (x2, y2): The coordinate of endpoint close to axis\n   */\n  getTickLineCoord(data: CartesianTickItem) {\n    const { x, y, width, height, orientation, tickSize, mirror, tickMargin } = this.props;\n    let x1, x2, y1, y2, tx, ty;\n\n    const sign = mirror ? -1 : 1;\n    const finalTickSize = data.tickSize || tickSize;\n    const tickCoord = isNumber(data.tickCoord) ? data.tickCoord : data.coordinate;\n\n    switch (orientation) {\n      case 'top':\n        x1 = x2 = data.coordinate;\n        y2 = y + +!mirror * height;\n        y1 = y2 - sign * finalTickSize;\n        ty = y1 - sign * tickMargin;\n        tx = tickCoord;\n        break;\n      case 'left':\n        y1 = y2 = data.coordinate;\n        x2 = x + +!mirror * width;\n        x1 = x2 - sign * finalTickSize;\n        tx = x1 - sign * tickMargin;\n        ty = tickCoord;\n        break;\n      case 'right':\n        y1 = y2 = data.coordinate;\n        x2 = x + +mirror * width;\n        x1 = x2 + sign * finalTickSize;\n        tx = x1 + sign * tickMargin;\n        ty = tickCoord;\n        break;\n      default:\n        x1 = x2 = data.coordinate;\n        y2 = y + +mirror * height;\n        y1 = y2 + sign * finalTickSize;\n        ty = y1 + sign * tickMargin;\n        tx = tickCoord;\n        break;\n    }\n\n    return { line: { x1, y1, x2, y2 }, tick: { x: tx, y: ty } };\n  }\n\n  getTickTextAnchor() {\n    const { orientation, mirror } = this.props;\n    let textAnchor;\n\n    switch (orientation) {\n      case 'left':\n        textAnchor = mirror ? 'start' : 'end';\n        break;\n      case 'right':\n        textAnchor = mirror ? 'end' : 'start';\n        break;\n      default:\n        textAnchor = 'middle';\n        break;\n    }\n\n    return textAnchor;\n  }\n\n  getTickVerticalAnchor() {\n    const { orientation, mirror } = this.props;\n\n    switch (orientation) {\n      case 'left':\n      case 'right':\n        return 'middle';\n      case 'top':\n        return mirror ? 'start' : 'end';\n      default:\n        return mirror ? 'end' : 'start';\n    }\n  }\n\n  renderAxisLine() {\n    const { x, y, width, height, orientation, mirror, axisLine } = this.props;\n    let props: SVGProps<SVGLineElement> = {\n      ...filterProps(this.props, false),\n      ...filterProps(axisLine, false),\n      fill: 'none',\n    };\n\n    if (orientation === 'top' || orientation === 'bottom') {\n      const needHeight = +((orientation === 'top' && !mirror) || (orientation === 'bottom' && mirror));\n      props = {\n        ...props,\n        x1: x,\n        y1: y + needHeight * height,\n        x2: x + width,\n        y2: y + needHeight * height,\n      };\n    } else {\n      const needWidth = +((orientation === 'left' && !mirror) || (orientation === 'right' && mirror));\n      props = {\n        ...props,\n        x1: x + needWidth * width,\n        y1: y,\n        x2: x + needWidth * width,\n        y2: y + height,\n      };\n    }\n\n    return <line {...props} className={clsx('recharts-cartesian-axis-line', get(axisLine, 'className'))} />;\n  }\n\n  static renderTickItem(option: Props['tick'], props: any, value: ReactNode) {\n    let tickItem;\n    const combinedClassName = clsx(props.className, 'recharts-cartesian-axis-tick-value');\n\n    if (React.isValidElement(option)) {\n      tickItem = React.cloneElement(option, { ...props, className: combinedClassName });\n    } else if (typeof option === 'function') {\n      tickItem = option({ ...props, className: combinedClassName });\n    } else {\n      let className = 'recharts-cartesian-axis-tick-value';\n\n      if (typeof option !== 'boolean') {\n        className = clsx(className, option.className);\n      }\n\n      tickItem = (\n        <Text {...props} className={className}>\n          {value}\n        </Text>\n      );\n    }\n\n    return tickItem;\n  }\n\n  /**\n   * render the ticks\n   * @param {string} fontSize Fontsize to consider for tick spacing\n   * @param {string} letterSpacing Letter spacing to consider for tick spacing\n   * @param {Array} ticks The ticks to actually render (overrides what was passed in props)\n   * @return {ReactElement | null} renderedTicks\n   */\n  renderTicks(\n    fontSize: string,\n    letterSpacing: string,\n    ticks: ReadonlyArray<CartesianTickItem> = [],\n  ): React.ReactElement | null {\n    const { tickLine, stroke, tick, tickFormatter, unit, padding } = this.props;\n    // @ts-expect-error some properties are optional in props but required in getTicks\n    const finalTicks = getTicks({ ...this.props, ticks }, fontSize, letterSpacing);\n    const textAnchor = this.getTickTextAnchor();\n    const verticalAnchor = this.getTickVerticalAnchor();\n    const axisProps = svgPropertiesNoEvents(this.props);\n    const customTickProps = filterProps(tick, false);\n    const tickLineProps = {\n      ...axisProps,\n      fill: 'none',\n      ...filterProps(tickLine, false),\n    };\n    const items = finalTicks.map((entry: CartesianTickItem, i) => {\n      const { line: lineCoord, tick: tickCoord } = this.getTickLineCoord(entry);\n      const tickProps = {\n        textAnchor,\n        verticalAnchor,\n        ...axisProps,\n        stroke: 'none',\n        fill: stroke,\n        ...customTickProps,\n        ...tickCoord,\n        index: i,\n        payload: entry,\n        visibleTicksCount: finalTicks.length,\n        tickFormatter,\n        padding,\n      };\n\n      return (\n        <Layer\n          className=\"recharts-cartesian-axis-tick\"\n          key={`tick-${entry.value}-${entry.coordinate}-${entry.tickCoord}`}\n          {...adaptEventsOfChild(this.props, entry, i)}\n        >\n          {tickLine && (\n            // @ts-expect-error recharts scale is not compatible with SVG scale\n            <line\n              {...tickLineProps}\n              {...lineCoord}\n              className={clsx('recharts-cartesian-axis-tick-line', get(tickLine, 'className'))}\n            />\n          )}\n          {tick &&\n            CartesianAxis.renderTickItem(\n              tick,\n              tickProps,\n              `${typeof tickFormatter === 'function' ? tickFormatter(entry.value, i) : entry.value}${unit || ''}`,\n            )}\n        </Layer>\n      );\n    });\n\n    return items.length > 0 ? <g className=\"recharts-cartesian-axis-ticks\">{items}</g> : null;\n  }\n\n  render() {\n    const { axisLine, width, height, className, hide } = this.props;\n\n    if (hide) {\n      return null;\n    }\n\n    const { ticks } = this.props;\n\n    /*\n     * This is different condition from what validateWidthHeight is doing;\n     * the CartesianAxis does allow width or height to be undefined.\n     */\n    if ((width != null && width <= 0) || (height != null && height <= 0)) {\n      return null;\n    }\n\n    return (\n      <Layer\n        className={clsx('recharts-cartesian-axis', className)}\n        ref={ref => {\n          if (ref) {\n            const tickNodes = ref.getElementsByClassName('recharts-cartesian-axis-tick-value');\n            this.tickRefs.current = Array.from(tickNodes);\n            const tick: Element | undefined = tickNodes[0];\n\n            if (tick) {\n              const calculatedFontSize = window.getComputedStyle(tick).fontSize;\n              const calculatedLetterSpacing = window.getComputedStyle(tick).letterSpacing;\n              if (calculatedFontSize !== this.state.fontSize || calculatedLetterSpacing !== this.state.letterSpacing) {\n                this.setState({\n                  fontSize: window.getComputedStyle(tick).fontSize,\n                  letterSpacing: window.getComputedStyle(tick).letterSpacing,\n                });\n              }\n            }\n          }\n        }}\n      >\n        {axisLine && this.renderAxisLine()}\n        {this.renderTicks(this.state.fontSize, this.state.letterSpacing, ticks)}\n        {Label.renderCallByParent(this.props)}\n      </Layer>\n    );\n  }\n}\n","/**\n * @fileOverview Cartesian Grid\n */\nimport * as React from 'react';\nimport { ReactElement, SVGProps } from 'react';\n\nimport { warn } from '../util/LogUtils';\nimport { isNumber } from '../util/DataUtils';\nimport { ChartOffsetInternal } from '../util/types';\n\nimport { AxisPropsNeededForTicksGenerator, getCoordinatesOfGrid, getTicksOfAxis } from '../util/ChartUtils';\nimport { getTicks, GetTicksInput } from './getTicks';\nimport { CartesianAxis } from './CartesianAxis';\nimport { useChartHeight, useChartWidth, useOffsetInternal } from '../context/chartLayoutContext';\nimport { AxisId } from '../state/cartesianAxisSlice';\nimport { selectAxisPropsNeededForCartesianGridTicksGenerator } from '../state/selectors/axisSelectors';\nimport { useAppSelector } from '../state/hooks';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\n\n/**\n * The <CartesianGrid horizontal\n */\nexport type GridLineTypeFunctionProps = Omit<LineItemProps, 'key'> & {\n  // React does not pass the key through when calling cloneElement - so it might be undefined when cloning\n  key: LineItemProps['key'] | undefined;\n  // offset is not present in LineItemProps, but it is read from context and then passed to the GridLineType function and element\n  offset: ChartOffsetInternal;\n};\n\nexport type AxisPropsForCartesianGridTicksGeneration = AxisPropsNeededForTicksGenerator &\n  Omit<GetTicksInput, 'ticks' | 'viewBox'>;\n\ntype GridLineType =\n  | SVGProps<SVGLineElement>\n  | ReactElement<SVGElement>\n  | ((props: GridLineTypeFunctionProps) => ReactElement<SVGElement>)\n  | boolean;\n\nexport type HorizontalCoordinatesGenerator = (\n  props: {\n    yAxis: AxisPropsForCartesianGridTicksGeneration;\n    width: number;\n    height: number;\n    offset: ChartOffsetInternal;\n  },\n  syncWithTicks: boolean,\n) => number[];\n\nexport type VerticalCoordinatesGenerator = (\n  props: {\n    xAxis: AxisPropsForCartesianGridTicksGeneration;\n    width: number;\n    height: number;\n    offset: ChartOffsetInternal;\n  },\n  syncWithTicks: boolean,\n) => number[];\n\ninterface InternalCartesianGridProps {\n  width?: number;\n  height?: number;\n  horizontalCoordinatesGenerator?: HorizontalCoordinatesGenerator;\n  verticalCoordinatesGenerator?: VerticalCoordinatesGenerator;\n}\n\ninterface CartesianGridProps extends InternalCartesianGridProps {\n  /**\n   * The x-coordinate of grid.\n   * If left undefined, it will be computed from the chart's offset and margins.\n   */\n  x?: number;\n  /**\n   * The y-coordinate of grid.\n   * If left undefined, it will be computed from the chart's offset and margins.\n   */\n  y?: number;\n  horizontal?: GridLineType;\n  vertical?: GridLineType;\n  /**\n   * Array of coordinates in pixels where to draw horizontal grid lines.\n   * Has priority over syncWithTicks and horizontalValues.\n   */\n  horizontalPoints?: number[];\n  /**\n   * Array of coordinates in pixels where to draw vertical grid lines.\n   * Has priority over syncWithTicks and horizontalValues.\n   */\n  verticalPoints?: number[];\n  /**\n   * Defines background color of stripes.\n   *\n   * The values from this array will be passed in as the `fill` property in a `rect` SVG element.\n   * For possible values see: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill#rect\n   *\n   * In case there are more stripes than colors, the colors will start from beginning.\n   * So for example: verticalFill['yellow', 'black'] produces a pattern of yellow|black|yellow|black\n   *\n   * If this is undefined, or an empty array, then there is no background fill.\n   * Note: Grid lines will be rendered above these background stripes.\n   */\n  verticalFill?: string[];\n  /**\n   * Defines background color of stripes.\n   *\n   * The values from this array will be passed in as the `fill` property in a `rect` SVG element.\n   * For possible values see: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill#rect\n   *\n   * In case there are more stripes than colors, the colors will start from beginning.\n   * So for example: horizontalFill['yellow', 'black'] produces a pattern of yellow|black|yellow|black\n   *\n   * If this is undefined, or an empty array, then there is no background fill.\n   * Note: Grid lines will be rendered above these background stripes.\n   */\n  horizontalFill?: string[];\n  /**\n   * If true, only the lines that correspond to the axes ticks values will be drawn.\n   * If false, extra lines could be added for each axis (at min and max coordinates), if there will not such ticks.\n   * horizontalPoints, verticalPoints, horizontalValues, verticalValues have priority over syncWithTicks.\n   */\n  syncWithTicks?: boolean;\n  /**\n   * Array of values, where horizontal lines will be drawn. Numbers or strings, in dependence on axis type.\n   * Has priority over syncWithTicks but not over horizontalValues.\n   */\n  horizontalValues?: number[] | string[];\n  /**\n   * Array of values, where vertical lines will be drawn. Numbers or strings, in dependence on axis type.\n   * Has priority over syncWithTicks but not over verticalValues.\n   */\n  verticalValues?: number[] | string[];\n  xAxisId?: AxisId;\n  yAxisId?: AxisId;\n}\n\ntype AcceptedSvgProps = Omit<SVGProps<SVGLineElement>, 'offset'>;\n\nexport type Props = AcceptedSvgProps & CartesianGridProps;\n\nconst Background = (props: Pick<AcceptedSvgProps, 'fill' | 'fillOpacity' | 'x' | 'y' | 'width' | 'height' | 'ry'>) => {\n  const { fill } = props;\n\n  if (!fill || fill === 'none') {\n    return null;\n  }\n\n  const { fillOpacity, x, y, width, height, ry } = props;\n\n  return (\n    <rect\n      x={x}\n      y={y}\n      ry={ry}\n      width={width}\n      height={height}\n      stroke=\"none\"\n      fill={fill}\n      fillOpacity={fillOpacity}\n      className=\"recharts-cartesian-grid-bg\"\n    />\n  );\n};\n\ntype LineItemProps = Props & {\n  offset: ChartOffsetInternal;\n  xAxis: null | AxisPropsForCartesianGridTicksGeneration;\n  yAxis: null | AxisPropsForCartesianGridTicksGeneration;\n  x1: number;\n  y1: number;\n  x2: number;\n  y2: number;\n  key: string;\n  index: number;\n};\n\nfunction renderLineItem(option: GridLineType, props: LineItemProps) {\n  let lineItem;\n\n  if (React.isValidElement(option)) {\n    // @ts-expect-error typescript does not see the props type when cloning an element\n    lineItem = React.cloneElement(option, props);\n  } else if (typeof option === 'function') {\n    lineItem = option(props);\n  } else {\n    const { x1, y1, x2, y2, key, ...others } = props;\n    const { offset: __, ...restOfFilteredProps } = svgPropertiesNoEvents(others);\n    lineItem = <line {...restOfFilteredProps} x1={x1} y1={y1} x2={x2} y2={y2} fill=\"none\" key={key} />;\n  }\n\n  return lineItem;\n}\n\ntype GridLinesProps = Props & {\n  offset: GridLineTypeFunctionProps['offset'];\n  xAxis: GridLineTypeFunctionProps['xAxis'];\n  yAxis: GridLineTypeFunctionProps['yAxis'];\n};\n\nfunction HorizontalGridLines(props: GridLinesProps) {\n  const { x, width, horizontal = true, horizontalPoints } = props;\n\n  if (!horizontal || !horizontalPoints || !horizontalPoints.length) {\n    return null;\n  }\n\n  const { xAxisId, yAxisId, ...otherLineItemProps } = props;\n\n  const items = horizontalPoints.map((entry, i) => {\n    const lineItemProps: LineItemProps = {\n      ...otherLineItemProps,\n      x1: x,\n      y1: entry,\n      x2: x + width,\n      y2: entry,\n      key: `line-${i}`,\n      index: i,\n    };\n\n    return renderLineItem(horizontal, lineItemProps);\n  });\n\n  return <g className=\"recharts-cartesian-grid-horizontal\">{items}</g>;\n}\n\nfunction VerticalGridLines(props: GridLinesProps) {\n  const { y, height, vertical = true, verticalPoints } = props;\n\n  if (!vertical || !verticalPoints || !verticalPoints.length) {\n    return null;\n  }\n\n  const { xAxisId, yAxisId, ...otherLineItemProps } = props;\n\n  const items = verticalPoints.map((entry, i) => {\n    const lineItemProps: LineItemProps = {\n      ...otherLineItemProps,\n      x1: entry,\n      y1: y,\n      x2: entry,\n      y2: y + height,\n      key: `line-${i}`,\n      index: i,\n    };\n\n    return renderLineItem(vertical, lineItemProps);\n  });\n\n  return <g className=\"recharts-cartesian-grid-vertical\">{items}</g>;\n}\n\nfunction HorizontalStripes(props: Props) {\n  const { horizontalFill, fillOpacity, x, y, width, height, horizontalPoints, horizontal = true } = props;\n  if (!horizontal || !horizontalFill || !horizontalFill.length) {\n    return null;\n  }\n\n  // Why =y -y? I was trying to find any difference that this makes, with floating point numbers and edge cases but ... nothing.\n  const roundedSortedHorizontalPoints = horizontalPoints.map(e => Math.round(e + y - y)).sort((a, b) => a - b);\n  // Why is this condition `!==` instead of `<=` ?\n  if (y !== roundedSortedHorizontalPoints[0]) {\n    roundedSortedHorizontalPoints.unshift(0);\n  }\n\n  const items = roundedSortedHorizontalPoints.map((entry, i) => {\n    // Why do we strip only the last stripe if it is invisible, and not all invisible stripes?\n    const lastStripe = !roundedSortedHorizontalPoints[i + 1];\n    const lineHeight = lastStripe ? y + height - entry : roundedSortedHorizontalPoints[i + 1] - entry;\n    if (lineHeight <= 0) {\n      return null;\n    }\n    const colorIndex = i % horizontalFill.length;\n    return (\n      <rect\n        key={`react-${i}`} // eslint-disable-line react/no-array-index-key\n        y={entry}\n        x={x}\n        height={lineHeight}\n        width={width}\n        stroke=\"none\"\n        fill={horizontalFill[colorIndex]}\n        fillOpacity={fillOpacity}\n        className=\"recharts-cartesian-grid-bg\"\n      />\n    );\n  });\n\n  return <g className=\"recharts-cartesian-gridstripes-horizontal\">{items}</g>;\n}\n\nfunction VerticalStripes(props: Props) {\n  const { vertical = true, verticalFill, fillOpacity, x, y, width, height, verticalPoints } = props;\n  if (!vertical || !verticalFill || !verticalFill.length) {\n    return null;\n  }\n\n  const roundedSortedVerticalPoints = verticalPoints.map(e => Math.round(e + x - x)).sort((a, b) => a - b);\n\n  if (x !== roundedSortedVerticalPoints[0]) {\n    roundedSortedVerticalPoints.unshift(0);\n  }\n\n  const items = roundedSortedVerticalPoints.map((entry, i) => {\n    const lastStripe = !roundedSortedVerticalPoints[i + 1];\n    const lineWidth = lastStripe ? x + width - entry : roundedSortedVerticalPoints[i + 1] - entry;\n\n    if (lineWidth <= 0) {\n      return null;\n    }\n    const colorIndex = i % verticalFill.length;\n    return (\n      <rect\n        key={`react-${i}`} // eslint-disable-line react/no-array-index-key\n        x={entry}\n        y={y}\n        width={lineWidth}\n        height={height}\n        stroke=\"none\"\n        fill={verticalFill[colorIndex]}\n        fillOpacity={fillOpacity}\n        className=\"recharts-cartesian-grid-bg\"\n      />\n    );\n  });\n\n  return <g className=\"recharts-cartesian-gridstripes-vertical\">{items}</g>;\n}\n\nconst defaultVerticalCoordinatesGenerator: VerticalCoordinatesGenerator = (\n  { xAxis, width, height, offset },\n  syncWithTicks,\n) =>\n  getCoordinatesOfGrid(\n    getTicks({\n      ...CartesianAxis.defaultProps,\n      ...xAxis,\n      ticks: getTicksOfAxis(xAxis, true),\n      viewBox: { x: 0, y: 0, width, height },\n    }),\n    offset.left,\n    offset.left + offset.width,\n    syncWithTicks,\n  );\n\nconst defaultHorizontalCoordinatesGenerator: HorizontalCoordinatesGenerator = (\n  { yAxis, width, height, offset },\n  syncWithTicks,\n) =>\n  getCoordinatesOfGrid(\n    getTicks({\n      ...CartesianAxis.defaultProps,\n      ...yAxis,\n      ticks: getTicksOfAxis(yAxis, true),\n      viewBox: { x: 0, y: 0, width, height },\n    }),\n    offset.top,\n    offset.top + offset.height,\n    syncWithTicks,\n  );\n\nconst defaultProps = {\n  horizontal: true,\n  vertical: true,\n  // The ordinates of horizontal grid lines\n  horizontalPoints: [],\n  // The abscissas of vertical grid lines\n  verticalPoints: [],\n\n  stroke: '#ccc',\n  fill: 'none',\n  // The fill of colors of grid lines\n  verticalFill: [],\n  horizontalFill: [],\n  xAxisId: 0,\n  yAxisId: 0,\n} as const satisfies Partial<Props>;\n\nexport function CartesianGrid(props: Props) {\n  const chartWidth = useChartWidth();\n  const chartHeight = useChartHeight();\n  const offset = useOffsetInternal();\n  const propsIncludingDefaults = {\n    ...resolveDefaultProps(props, defaultProps),\n    x: isNumber(props.x) ? props.x : offset.left,\n    y: isNumber(props.y) ? props.y : offset.top,\n    width: isNumber(props.width) ? props.width : offset.width,\n    height: isNumber(props.height) ? props.height : offset.height,\n  };\n\n  const { xAxisId, yAxisId, x, y, width, height, syncWithTicks, horizontalValues, verticalValues } =\n    propsIncludingDefaults;\n\n  const isPanorama = useIsPanorama();\n  const xAxis: AxisPropsForCartesianGridTicksGeneration = useAppSelector(state =>\n    selectAxisPropsNeededForCartesianGridTicksGenerator(state, 'xAxis', xAxisId, isPanorama),\n  );\n  const yAxis: AxisPropsForCartesianGridTicksGeneration = useAppSelector(state =>\n    selectAxisPropsNeededForCartesianGridTicksGenerator(state, 'yAxis', yAxisId, isPanorama),\n  );\n\n  if (\n    !isNumber(width) ||\n    width <= 0 ||\n    !isNumber(height) ||\n    height <= 0 ||\n    !isNumber(x) ||\n    x !== +x ||\n    !isNumber(y) ||\n    y !== +y\n  ) {\n    return null;\n  }\n\n  /*\n   * verticalCoordinatesGenerator and horizontalCoordinatesGenerator are defined\n   * outside the propsIncludingDefaults because they were never part of the original props\n   * and they were never passed as a prop down to horizontal/vertical custom elements.\n   * If we add these two to propsIncludingDefaults then we are changing public API.\n   * Not a bad thing per se but also not necessary.\n   */\n  const verticalCoordinatesGenerator =\n    propsIncludingDefaults.verticalCoordinatesGenerator || defaultVerticalCoordinatesGenerator;\n  const horizontalCoordinatesGenerator =\n    propsIncludingDefaults.horizontalCoordinatesGenerator || defaultHorizontalCoordinatesGenerator;\n\n  let { horizontalPoints, verticalPoints } = propsIncludingDefaults;\n\n  // No horizontal points are specified\n  if ((!horizontalPoints || !horizontalPoints.length) && typeof horizontalCoordinatesGenerator === 'function') {\n    const isHorizontalValues = horizontalValues && horizontalValues.length;\n\n    const generatorResult = horizontalCoordinatesGenerator(\n      {\n        yAxis: yAxis\n          ? {\n              ...yAxis,\n              ticks: isHorizontalValues ? horizontalValues : yAxis.ticks,\n            }\n          : undefined,\n        width: chartWidth,\n        height: chartHeight,\n        offset,\n      },\n      isHorizontalValues ? true : syncWithTicks,\n    );\n\n    warn(\n      Array.isArray(generatorResult),\n      `horizontalCoordinatesGenerator should return Array but instead it returned [${typeof generatorResult}]`,\n    );\n    if (Array.isArray(generatorResult)) {\n      horizontalPoints = generatorResult;\n    }\n  }\n\n  // No vertical points are specified\n  if ((!verticalPoints || !verticalPoints.length) && typeof verticalCoordinatesGenerator === 'function') {\n    const isVerticalValues = verticalValues && verticalValues.length;\n    const generatorResult = verticalCoordinatesGenerator(\n      {\n        xAxis: xAxis\n          ? {\n              ...xAxis,\n              ticks: isVerticalValues ? verticalValues : xAxis.ticks,\n            }\n          : undefined,\n        width: chartWidth,\n        height: chartHeight,\n        offset,\n      },\n      isVerticalValues ? true : syncWithTicks,\n    );\n    warn(\n      Array.isArray(generatorResult),\n      `verticalCoordinatesGenerator should return Array but instead it returned [${typeof generatorResult}]`,\n    );\n    if (Array.isArray(generatorResult)) {\n      verticalPoints = generatorResult;\n    }\n  }\n\n  return (\n    <g className=\"recharts-cartesian-grid\">\n      <Background\n        fill={propsIncludingDefaults.fill}\n        fillOpacity={propsIncludingDefaults.fillOpacity}\n        x={propsIncludingDefaults.x}\n        y={propsIncludingDefaults.y}\n        width={propsIncludingDefaults.width}\n        height={propsIncludingDefaults.height}\n        ry={propsIncludingDefaults.ry}\n      />\n\n      <HorizontalStripes {...propsIncludingDefaults} horizontalPoints={horizontalPoints} />\n      <VerticalStripes {...propsIncludingDefaults} verticalPoints={verticalPoints} />\n\n      <HorizontalGridLines\n        {...propsIncludingDefaults}\n        offset={offset}\n        horizontalPoints={horizontalPoints}\n        xAxis={xAxis}\n        yAxis={yAxis}\n      />\n\n      <VerticalGridLines\n        {...propsIncludingDefaults}\n        offset={offset}\n        verticalPoints={verticalPoints}\n        xAxis={xAxis}\n        yAxis={yAxis}\n      />\n    </g>\n  );\n}\n\nCartesianGrid.displayName = 'CartesianGrid';\n","import { createSelector } from 'reselect';\nimport { computeLinePoints, LinePointItem } from '../../cartesian/Line';\nimport { RechartsRootState } from '../store';\nimport { AxisId } from '../cartesianAxisSlice';\nimport { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { selectAxisWithScale, selectTicksOfGraphicalItem, selectUnfilteredCartesianItems } from './axisSelectors';\nimport { getBandSizeOfAxis, isCategoricalAxis } from '../../util/ChartUtils';\nimport { ChartData } from '../chartDataSlice';\nimport { CartesianGraphicalItemSettings, GraphicalItemId } from '../graphicalItemsSlice';\nimport { LineSettings } from '../types/LineSettings';\n\nconst selectXAxisWithScale = (state: RechartsRootState, xAxisId: AxisId, _yAxisId: AxisId, isPanorama: boolean) =>\n  selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);\n\nconst selectXAxisTicks = (state: RechartsRootState, xAxisId: AxisId, _yAxisId: AxisId, isPanorama: boolean) =>\n  selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);\n\nconst selectYAxisWithScale = (state: RechartsRootState, _xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean) =>\n  selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);\n\nconst selectYAxisTicks = (state: RechartsRootState, _xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean) =>\n  selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);\n\nconst selectBandSize = createSelector(\n  [selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks],\n  (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {\n    if (isCategoricalAxis(layout, 'xAxis')) {\n      return getBandSizeOfAxis(xAxis, xAxisTicks, false);\n    }\n    return getBandSizeOfAxis(yAxis, yAxisTicks, false);\n  },\n);\n\nconst pickLineId = (\n  _state: RechartsRootState,\n  _xAxisId: AxisId,\n  _yAxisId: AxisId,\n  _isPanorama: boolean,\n  id: GraphicalItemId,\n) => id;\n\nfunction isLineSettings(item: CartesianGraphicalItemSettings): item is LineSettings {\n  return item.type === 'line';\n}\n\n/*\n * There is a race condition problem because we read some data from props and some from the state.\n * The state is updated through a dispatch and is one render behind,\n * and so we have this weird one tick render where the displayedData in one selector have the old dataKey\n * but the new dataKey in another selector.\n *\n * So here instead of reading the dataKey from the props, we always read it from the state.\n */\nconst selectSynchronisedLineSettings: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => LineSettings | undefined = createSelector(\n  [selectUnfilteredCartesianItems, pickLineId],\n  (graphicalItems, id: GraphicalItemId): LineSettings | undefined =>\n    graphicalItems.filter(isLineSettings).find(x => x.id === id),\n);\n\nexport const selectLinePoints: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => ReadonlyArray<LinePointItem> | undefined = createSelector(\n  [\n    selectChartLayout,\n    selectXAxisWithScale,\n    selectYAxisWithScale,\n    selectXAxisTicks,\n    selectYAxisTicks,\n    selectSynchronisedLineSettings,\n    selectBandSize,\n    selectChartDataWithIndexesIfNotInPanorama,\n  ],\n  (\n    layout,\n    xAxis,\n    yAxis,\n    xAxisTicks,\n    yAxisTicks,\n    lineSettings,\n    bandSize,\n    { chartData, dataStartIndex, dataEndIndex },\n  ): ReadonlyArray<LinePointItem> | undefined => {\n    if (\n      lineSettings == null ||\n      xAxis == null ||\n      yAxis == null ||\n      xAxisTicks == null ||\n      yAxisTicks == null ||\n      xAxisTicks.length === 0 ||\n      yAxisTicks.length === 0 ||\n      bandSize == null\n    ) {\n      return undefined;\n    }\n\n    const { dataKey, data } = lineSettings;\n    let displayedData: ChartData | undefined;\n\n    if (data != null && data.length > 0) {\n      displayedData = data;\n    } else {\n      displayedData = chartData?.slice(dataStartIndex, dataEndIndex + 1);\n    }\n\n    if (displayedData == null) {\n      return undefined;\n    }\n\n    return computeLinePoints({ layout, xAxis, yAxis, xAxisTicks, yAxisTicks, dataKey, bandSize, displayedData });\n  },\n);\n","import * as React from 'react';\nimport { Component, MutableRefObject, Ref, useCallback, useRef, useState } from 'react';\n\nimport { clsx } from 'clsx';\nimport { Curve, CurveType, Props as CurveProps } from '../shape/Curve';\nimport { Dot } from '../shape/Dot';\nimport { Layer } from '../container/Layer';\nimport { ImplicitLabelType } from '../component/Label';\nimport { LabelList } from '../component/LabelList';\nimport { ErrorBarDataItem, ErrorBarDataPointFormatter } from './ErrorBar';\nimport { interpolate, isNullish } from '../util/DataUtils';\nimport { filterProps, isClipDot } from '../util/ReactUtils';\nimport { Global } from '../util/Global';\nimport { getCateCoordinateOfLine, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';\nimport {\n  ActiveDotType,\n  AnimationDuration,\n  AnimationTiming,\n  DataKey,\n  LegendType,\n  TickItem,\n  TooltipType,\n} from '../util/types';\nimport type { LegendPayload } from '../component/DefaultLegendContent';\nimport { ActivePoints } from '../component/ActivePoints';\nimport { TooltipPayloadConfiguration } from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { SetErrorBarContext } from '../context/ErrorBarContext';\nimport { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';\nimport { useChartLayout } from '../context/chartLayoutContext';\nimport { BaseAxisWithScale } from '../state/selectors/axisSelectors';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { selectLinePoints } from '../state/selectors/lineSelectors';\nimport { useAppSelector } from '../state/hooks';\nimport { AxisId } from '../state/cartesianAxisSlice';\nimport { SetLegendPayload } from '../state/SetLegendPayload';\nimport { AreaPointItem } from '../state/selectors/areaSelectors';\nimport { useAnimationId } from '../util/useAnimationId';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { usePlotArea } from '../hooks';\nimport { WithIdRequired } from '../util/useUniqueId';\nimport { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';\nimport { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { JavascriptAnimate } from '../animation/JavascriptAnimate';\n\nexport interface LinePointItem {\n  readonly value: number;\n  readonly payload?: any;\n  /**\n   * Line coordinates can have gaps in them. We have `connectNulls` prop that allows to connect those gaps anyway.\n   * What it means is that some points can have `null` x or y coordinates.\n   */\n  x: number | null;\n  y: number | null;\n}\n\n/**\n * Internal props, combination of external props + defaultProps + private Recharts state\n */\ninterface InternalLineProps {\n  activeDot: ActiveDotType;\n  animateNewValues: boolean;\n  animationBegin: number;\n  animationDuration: AnimationDuration;\n  animationEasing: AnimationTiming;\n\n  className?: string;\n  connectNulls: boolean;\n  data?: any;\n  dataKey?: DataKey<any>;\n  dot: ActiveDotType;\n  height: number;\n  hide: boolean;\n  id: string;\n  isAnimationActive: boolean;\n  label: ImplicitLabelType;\n  layout: 'horizontal' | 'vertical';\n  left: number;\n  legendType: LegendType;\n\n  name?: string | number;\n  needClip?: boolean;\n\n  onAnimationEnd?: () => void;\n  onAnimationStart?: () => void;\n\n  points: ReadonlyArray<LinePointItem>;\n  tooltipType?: TooltipType;\n  top: number;\n  type?: CurveType;\n  unit?: string | number;\n  width: number;\n  xAxisId: AxisId;\n  yAxisId: AxisId;\n}\n\n/**\n * External props, intended for end users to fill in\n */\ninterface LineProps {\n  activeDot?: ActiveDotType;\n  animateNewValues?: boolean;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n  className?: string;\n  connectNulls?: boolean;\n  data?: any;\n  dataKey?: DataKey<any>;\n  dot?: ActiveDotType;\n  hide?: boolean;\n\n  id?: string;\n  isAnimationActive?: boolean;\n\n  label?: ImplicitLabelType;\n  legendType?: LegendType;\n\n  name?: string | number;\n  onAnimationEnd?: () => void;\n  onAnimationStart?: () => void;\n  tooltipType?: TooltipType;\n  type?: CurveType;\n  unit?: string | number;\n  xAxisId?: AxisId;\n  yAxisId?: AxisId;\n}\n\n/**\n * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.\n */\ntype LineSvgProps = Omit<CurveProps, 'points' | 'pathRef' | 'ref'>;\n\ntype InternalProps = LineSvgProps & InternalLineProps;\n\nexport type Props = LineSvgProps & LineProps;\n\nconst computeLegendPayloadFromAreaData = (props: Props): ReadonlyArray<LegendPayload> => {\n  const { dataKey, name, stroke, legendType, hide } = props;\n  return [\n    {\n      inactive: hide,\n      dataKey,\n      type: legendType,\n      color: stroke,\n      value: getTooltipNameProp(name, dataKey),\n      payload: props,\n    },\n  ];\n};\n\nfunction getTooltipEntrySettings(props: Props): TooltipPayloadConfiguration {\n  const { dataKey, data, stroke, strokeWidth, fill, name, hide, unit } = props;\n  return {\n    dataDefinedOnItem: data,\n    positions: undefined,\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      dataKey,\n      nameKey: undefined,\n      name: getTooltipNameProp(name, dataKey),\n      hide,\n      type: props.tooltipType,\n      color: props.stroke,\n      unit,\n    },\n  };\n}\n\nconst generateSimpleStrokeDasharray = (totalLength: number, length: number): string => {\n  return `${length}px ${totalLength - length}px`;\n};\n\nfunction repeat(lines: number[], count: number) {\n  const linesUnit = lines.length % 2 !== 0 ? [...lines, 0] : lines;\n  let result: number[] = [];\n\n  for (let i = 0; i < count; ++i) {\n    result = [...result, ...linesUnit];\n  }\n\n  return result;\n}\n\nconst getStrokeDasharray = (length: number, totalLength: number, lines: number[]) => {\n  const lineLength = lines.reduce((pre, next) => pre + next);\n\n  // if lineLength is 0 return the default when no strokeDasharray is provided\n  if (!lineLength) {\n    return generateSimpleStrokeDasharray(totalLength, length);\n  }\n\n  const count = Math.floor(length / lineLength);\n  const remainLength = length % lineLength;\n  const restLength = totalLength - length;\n\n  let remainLines: number[] = [];\n  for (let i = 0, sum = 0; i < lines.length; sum += lines[i], ++i) {\n    if (sum + lines[i] > remainLength) {\n      remainLines = [...lines.slice(0, i), remainLength - sum];\n      break;\n    }\n  }\n\n  const emptyLines = remainLines.length % 2 === 0 ? [0, restLength] : [restLength];\n\n  return [...repeat(lines, count), ...remainLines, ...emptyLines].map(line => `${line}px`).join(', ');\n};\n\nfunction renderDotItem(option: ActiveDotType, props: any) {\n  let dotItem;\n\n  if (React.isValidElement(option)) {\n    dotItem = React.cloneElement(option, props);\n  } else if (typeof option === 'function') {\n    dotItem = option(props);\n  } else {\n    const className = clsx('recharts-line-dot', typeof option !== 'boolean' ? option.className : '');\n    dotItem = <Dot {...props} className={className} />;\n  }\n\n  return dotItem;\n}\n\nfunction shouldRenderDots(points: ReadonlyArray<AreaPointItem>, dot: InternalProps['dot']): boolean {\n  if (points == null) {\n    return false;\n  }\n  if (dot) {\n    return true;\n  }\n  return points.length === 1;\n}\n\nfunction Dots({\n  clipPathId,\n  points,\n  props,\n}: {\n  points: ReadonlyArray<LinePointItem>;\n  clipPathId: string;\n  props: InternalProps;\n}) {\n  const { dot, dataKey, needClip } = props;\n\n  if (!shouldRenderDots(points, dot)) {\n    return null;\n  }\n\n  /*\n   * Exclude ID from the props passed to the Dots component\n   * because then the ID would be applied to multiple dots and it would no longer be unique.\n   */\n  const { id, ...propsWithoutId } = props;\n\n  const clipDot = isClipDot(dot);\n  const lineProps = svgPropertiesNoEvents(propsWithoutId);\n  const customDotProps = filterProps(dot, true);\n\n  const dots = points.map((entry, i) => {\n    const dotProps = {\n      key: `dot-${i}`,\n      r: 3,\n      ...lineProps,\n      ...customDotProps,\n      index: i,\n      cx: entry.x,\n      cy: entry.y,\n      dataKey,\n      value: entry.value,\n      payload: entry.payload,\n      points,\n    };\n\n    return renderDotItem(dot, dotProps);\n  });\n  const dotsProps = {\n    clipPath: needClip ? `url(#clipPath-${clipDot ? '' : 'dots-'}${clipPathId})` : undefined,\n  };\n\n  return (\n    <Layer className=\"recharts-line-dots\" key=\"dots\" {...dotsProps}>\n      {dots}\n    </Layer>\n  );\n}\n\nfunction StaticCurve({\n  clipPathId,\n  pathRef,\n  points,\n  strokeDasharray,\n  props,\n  showLabels,\n}: {\n  clipPathId: string;\n  pathRef: Ref<SVGPathElement>;\n  points: ReadonlyArray<LinePointItem>;\n  props: InternalProps;\n  strokeDasharray?: string;\n  showLabels: boolean;\n}) {\n  const { type, layout, connectNulls, needClip, ...others } = props;\n  const curveProps = {\n    ...filterProps(others, true),\n    fill: 'none',\n    className: 'recharts-line-curve',\n    clipPath: needClip ? `url(#clipPath-${clipPathId})` : undefined,\n    points,\n    type,\n    layout,\n    connectNulls,\n    strokeDasharray: strokeDasharray ?? props.strokeDasharray,\n  };\n\n  return (\n    <>\n      {points?.length > 1 && <Curve {...curveProps} pathRef={pathRef} />}\n      <Dots points={points} clipPathId={clipPathId} props={props} />\n      {showLabels && LabelList.renderCallByParent(props, points)}\n    </>\n  );\n}\n\nfunction getTotalLength(mainCurve: SVGPathElement | null): number {\n  try {\n    return (mainCurve && mainCurve.getTotalLength && mainCurve.getTotalLength()) || 0;\n  } catch {\n    return 0;\n  }\n}\n\nfunction CurveWithAnimation({\n  clipPathId,\n  props,\n  pathRef,\n  previousPointsRef,\n  longestAnimatedLengthRef,\n}: {\n  clipPathId: string;\n  props: InternalProps;\n  pathRef: MutableRefObject<SVGPathElement | null>;\n  longestAnimatedLengthRef: MutableRefObject<number>;\n  previousPointsRef: MutableRefObject<ReadonlyArray<LinePointItem> | null>;\n}) {\n  const {\n    points,\n    strokeDasharray,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    animateNewValues,\n    width,\n    height,\n    onAnimationEnd,\n    onAnimationStart,\n  } = props;\n\n  const prevPoints = previousPointsRef.current;\n  const animationId = useAnimationId(props, 'recharts-line-');\n\n  const [isAnimating, setIsAnimating] = useState(false);\n\n  const handleAnimationEnd = useCallback(() => {\n    if (typeof onAnimationEnd === 'function') {\n      onAnimationEnd();\n    }\n    setIsAnimating(false);\n  }, [onAnimationEnd]);\n\n  const handleAnimationStart = useCallback(() => {\n    if (typeof onAnimationStart === 'function') {\n      onAnimationStart();\n    }\n    setIsAnimating(true);\n  }, [onAnimationStart]);\n  const totalLength = getTotalLength(pathRef.current);\n  /*\n   * Here we want to detect if the length animation has been interrupted.\n   * For that we keep a reference to the furthest length that has been animated.\n   *\n   * And then, to keep things smooth, we add to it the current length that is being animated right now.\n   *\n   * If we did Math.max then it makes the length animation \"pause\" but we want to keep it smooth\n   * so in case we have some \"leftover\" length from the previous animation we add it to the current length.\n   *\n   * This is not perfect because the animation changes speed due to easing. The default easing is 'ease' which is not linear\n   * and makes it stand out. But it's good enough I suppose.\n   * If we want to fix it then we need to keep track of multiple animations and their easing and timings.\n   *\n   * If you want to see this in action, try to change the dataKey of the line chart while the initial animation is running.\n   * The Line begins with zero length and slowly grows to the full length. While this growth is in progress,\n   * change the dataKey and the Line will continue growing from where it has grown so far.\n   */\n  const startingPoint = longestAnimatedLengthRef.current;\n\n  return (\n    <JavascriptAnimate\n      begin={animationBegin}\n      duration={animationDuration}\n      isActive={isAnimationActive}\n      easing={animationEasing}\n      onAnimationEnd={handleAnimationEnd}\n      onAnimationStart={handleAnimationStart}\n      key={animationId}\n    >\n      {(t: number) => {\n        const lengthInterpolated = interpolate(startingPoint, totalLength + startingPoint, t);\n        const curLength = Math.min(lengthInterpolated, totalLength);\n        let currentStrokeDasharray;\n\n        if (strokeDasharray) {\n          const lines = `${strokeDasharray}`.split(/[,\\s]+/gim).map(num => parseFloat(num));\n          currentStrokeDasharray = getStrokeDasharray(curLength, totalLength, lines);\n        } else {\n          currentStrokeDasharray = generateSimpleStrokeDasharray(totalLength, curLength);\n        }\n\n        if (prevPoints) {\n          const prevPointsDiffFactor = prevPoints.length / points.length;\n          const stepData =\n            t === 1\n              ? points\n              : points.map((entry, index): LinePointItem => {\n                  const prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n                  if (prevPoints[prevPointIndex]) {\n                    const prev = prevPoints[prevPointIndex];\n                    return {\n                      ...entry,\n                      x: interpolate(prev.x, entry.x, t),\n                      y: interpolate(prev.y, entry.y, t),\n                    };\n                  }\n\n                  // magic number of faking previous x and y location\n                  if (animateNewValues) {\n                    return {\n                      ...entry,\n                      x: interpolate(width * 2, entry.x, t),\n                      y: interpolate(height / 2, entry.y, t),\n                    };\n                  }\n                  return {\n                    ...entry,\n                    x: entry.x,\n                    y: entry.y,\n                  };\n                });\n          // eslint-disable-next-line no-param-reassign\n          previousPointsRef.current = stepData;\n          return (\n            <StaticCurve\n              props={props}\n              points={stepData}\n              clipPathId={clipPathId}\n              pathRef={pathRef}\n              showLabels={!isAnimating}\n              strokeDasharray={currentStrokeDasharray}\n            />\n          );\n        }\n\n        /*\n         * Here it is important to wait a little bit with updating the previousPointsRef\n         * before the animation has a time to initialize.\n         * If we set the previous pointsRef immediately, we set it before the Legend height it calculated\n         * and before pathRef is set.\n         * If that happens, the Line will re-render again after Legend had reported its height\n         * which will start a new animation with the previous points as the starting point\n         * which gives the effect of the Line animating slightly upwards (where the animation distance equals the Legend height).\n         * Waiting for t > 0 is indirect but good enough to ensure that the Legend height is calculated and animation works properly.\n         *\n         * Total length similarly is calculated from the pathRef. We should not update the previousPointsRef\n         * before the pathRef is set, otherwise we will have a wrong total length.\n         */\n        if (t > 0 && totalLength > 0) {\n          // eslint-disable-next-line no-param-reassign\n          previousPointsRef.current = points;\n          /*\n           * totalLength is set from a ref and is not updated in the first tick of the animation.\n           * It defaults to zero which is exactly what we want here because we want to grow from zero,\n           * however the same happens when the data change.\n           *\n           * In that case we want to remember the previous length and continue from there, and only animate the shape.\n           *\n           * Therefore the totalLength > 0 check.\n           *\n           * The Animate is about to fire handleAnimationStart which will update the state\n           * and cause a re-render and read a new proper totalLength which will be used in the next tick\n           * and update the longestAnimatedLengthRef.\n           */\n          // eslint-disable-next-line no-param-reassign\n          longestAnimatedLengthRef.current = curLength;\n        }\n        return (\n          <StaticCurve\n            props={props}\n            points={points}\n            clipPathId={clipPathId}\n            pathRef={pathRef}\n            showLabels={!isAnimating}\n            strokeDasharray={currentStrokeDasharray}\n          />\n        );\n      }}\n    </JavascriptAnimate>\n  );\n}\n\nfunction RenderCurve({ clipPathId, props }: { clipPathId: string; props: InternalProps }) {\n  const { points, isAnimationActive } = props;\n  const previousPointsRef = useRef<ReadonlyArray<LinePointItem> | null>(null);\n  const longestAnimatedLengthRef = useRef<number>(0);\n  const pathRef = useRef<SVGPathElement | null>(null);\n\n  const prevPoints = previousPointsRef.current;\n\n  if (isAnimationActive && points && points.length && prevPoints !== points) {\n    return (\n      <CurveWithAnimation\n        props={props}\n        clipPathId={clipPathId}\n        previousPointsRef={previousPointsRef}\n        longestAnimatedLengthRef={longestAnimatedLengthRef}\n        pathRef={pathRef}\n      />\n    );\n  }\n\n  return <StaticCurve props={props} points={points} clipPathId={clipPathId} pathRef={pathRef} showLabels />;\n}\n\nconst errorBarDataPointFormatter: ErrorBarDataPointFormatter = (\n  dataPoint: LinePointItem,\n  dataKey,\n): ErrorBarDataItem => {\n  return {\n    x: dataPoint.x,\n    y: dataPoint.y,\n    value: dataPoint.value,\n    // @ts-expect-error getValueByDataKey does not validate the output type\n    errorVal: getValueByDataKey(dataPoint.payload, dataKey),\n  };\n};\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass LineWithState extends Component<InternalProps> {\n  render() {\n    const { hide, dot, points, className, xAxisId, yAxisId, top, left, width, height, id, needClip } = this.props;\n\n    if (hide) {\n      return null;\n    }\n\n    const layerClass = clsx('recharts-line', className);\n    const clipPathId = id;\n    const { r = 3, strokeWidth = 2 } = filterProps(dot, false) ?? { r: 3, strokeWidth: 2 };\n    const clipDot = isClipDot(dot);\n    const dotSize = r * 2 + strokeWidth;\n\n    return (\n      <>\n        <Layer className={layerClass}>\n          {needClip && (\n            <defs>\n              <GraphicalItemClipPath clipPathId={clipPathId} xAxisId={xAxisId} yAxisId={yAxisId} />\n              {!clipDot && (\n                <clipPath id={`clipPath-dots-${clipPathId}`}>\n                  <rect\n                    x={left - dotSize / 2}\n                    y={top - dotSize / 2}\n                    width={width + dotSize}\n                    height={height + dotSize}\n                  />\n                </clipPath>\n              )}\n            </defs>\n          )}\n          <RenderCurve props={this.props} clipPathId={clipPathId} />\n          <SetErrorBarContext\n            xAxisId={xAxisId}\n            yAxisId={yAxisId}\n            data={points}\n            dataPointFormatter={errorBarDataPointFormatter}\n            errorBarOffset={0}\n          >\n            {this.props.children}\n          </SetErrorBarContext>\n        </Layer>\n        <ActivePoints\n          activeDot={this.props.activeDot}\n          points={points}\n          mainColor={this.props.stroke}\n          itemDataKey={this.props.dataKey}\n        />\n      </>\n    );\n  }\n}\n\nconst defaultLineProps = {\n  activeDot: true,\n  animateNewValues: true,\n  animationBegin: 0,\n  animationDuration: 1500,\n  animationEasing: 'ease',\n  connectNulls: false,\n  dot: true,\n  fill: '#fff',\n  hide: false,\n  isAnimationActive: !Global.isSsr,\n  label: false,\n  legendType: 'line',\n  stroke: '#3182bd',\n  strokeWidth: 1,\n  xAxisId: 0,\n  yAxisId: 0,\n} as const satisfies Partial<Props>;\n\nfunction LineImpl(props: WithIdRequired<Props>) {\n  const {\n    activeDot,\n    animateNewValues,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    connectNulls,\n    dot,\n    hide,\n    isAnimationActive,\n    label,\n    legendType,\n    xAxisId,\n    yAxisId,\n    id,\n    ...everythingElse\n  } = resolveDefaultProps(props, defaultLineProps);\n\n  const { needClip } = useNeedsClip(xAxisId, yAxisId);\n  const plotArea = usePlotArea();\n  const layout = useChartLayout();\n  const isPanorama = useIsPanorama();\n  const points: ReadonlyArray<LinePointItem> | undefined = useAppSelector(state =>\n    selectLinePoints(state, xAxisId, yAxisId, isPanorama, id),\n  );\n  if ((layout !== 'horizontal' && layout !== 'vertical') || points == null || plotArea == null) {\n    // Cannot render Line in an unsupported layout\n    return null;\n  }\n\n  const { height, width, x: left, y: top } = plotArea;\n\n  return (\n    <LineWithState\n      {...everythingElse}\n      id={id}\n      connectNulls={connectNulls}\n      dot={dot}\n      activeDot={activeDot}\n      animateNewValues={animateNewValues}\n      animationBegin={animationBegin}\n      animationDuration={animationDuration}\n      animationEasing={animationEasing}\n      isAnimationActive={isAnimationActive}\n      hide={hide}\n      label={label}\n      legendType={legendType}\n      xAxisId={xAxisId}\n      yAxisId={yAxisId}\n      points={points}\n      layout={layout}\n      height={height}\n      width={width}\n      left={left}\n      top={top}\n      needClip={needClip}\n    />\n  );\n}\n\nexport function computeLinePoints({\n  layout,\n  xAxis,\n  yAxis,\n  xAxisTicks,\n  yAxisTicks,\n  dataKey,\n  bandSize,\n  displayedData,\n}: {\n  layout: Props['layout'];\n  xAxis: BaseAxisWithScale;\n  yAxis: BaseAxisWithScale;\n  xAxisTicks: TickItem[];\n  yAxisTicks: TickItem[];\n  dataKey: Props['dataKey'];\n  bandSize: number;\n  displayedData: any[];\n}): ReadonlyArray<LinePointItem> {\n  return displayedData\n    .map((entry, index): LinePointItem | null => {\n      // @ts-expect-error getValueByDataKey does not validate the output type\n      const value: number = getValueByDataKey(entry, dataKey);\n\n      if (layout === 'horizontal') {\n        const x = getCateCoordinateOfLine({ axis: xAxis, ticks: xAxisTicks, bandSize, entry, index });\n        const y = isNullish(value) ? null : yAxis.scale(value);\n        return {\n          x,\n          y,\n          value,\n          payload: entry,\n        };\n      }\n\n      const x = isNullish(value) ? null : xAxis.scale(value);\n      const y = getCateCoordinateOfLine({ axis: yAxis, ticks: yAxisTicks, bandSize, entry, index });\n      if (x == null || y == null) {\n        return null;\n      }\n      return {\n        x,\n        y,\n        value,\n        payload: entry,\n      };\n    })\n    .filter(Boolean);\n}\n\nexport function Line(outsideProps: Props) {\n  const props = resolveDefaultProps(outsideProps, defaultLineProps);\n  const isPanorama = useIsPanorama();\n  return (\n    <RegisterGraphicalItemId id={props.id} type=\"line\">\n      {id => (\n        <>\n          <SetLegendPayload legendPayload={computeLegendPayloadFromAreaData(props)} />\n          <SetTooltipEntrySettings fn={getTooltipEntrySettings} args={props} />\n          <SetCartesianGraphicalItem\n            type=\"line\"\n            id={id}\n            data={props.data}\n            xAxisId={props.xAxisId}\n            yAxisId={props.yAxisId}\n            zAxisId={0}\n            dataKey={props.dataKey}\n            hide={props.hide}\n            isPanorama={isPanorama}\n          />\n          <LineImpl {...props} id={id} />\n        </>\n      )}\n    </RegisterGraphicalItemId>\n  );\n}\nLine.displayName = 'Line';\n","import { createSelector } from 'reselect';\nimport { Series } from 'victory-vendor/d3-shape';\nimport { NullableCoordinate } from '../../util/types';\nimport { computeArea } from '../../cartesian/Area';\nimport {\n  selectAxisWithScale,\n  selectStackGroups,\n  selectTicksOfGraphicalItem,\n  selectUnfilteredCartesianItems,\n} from './axisSelectors';\nimport { RechartsRootState } from '../store';\nimport { AxisId } from '../cartesianAxisSlice';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';\nimport { getBandSizeOfAxis, isCategoricalAxis, StackId } from '../../util/ChartUtils';\nimport { ChartData } from '../chartDataSlice';\nimport { NullablePoint } from '../../shape/Curve';\nimport { getStackSeriesIdentifier } from '../../util/stacks/getStackSeriesIdentifier';\nimport { StackDataPoint, StackGroup, StackSeriesIdentifier } from '../../util/stacks/stackTypes';\nimport { AreaSettings } from '../types/AreaSettings';\nimport { GraphicalItemId } from '../graphicalItemsSlice';\n\nexport interface AreaPointItem extends NullablePoint {\n  x: number | null;\n  y: number | null;\n  value?: number | number[];\n  payload?: any;\n}\n\nexport type ComputedArea = {\n  points: ReadonlyArray<AreaPointItem>;\n  baseLine: number | NullableCoordinate[];\n  isRange: boolean;\n};\n\nconst selectXAxisWithScale = (state: RechartsRootState, xAxisId: AxisId, _yAxisId: AxisId, isPanorama: boolean) =>\n  selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);\n\nconst selectXAxisTicks = (state: RechartsRootState, xAxisId: AxisId, _yAxisId: AxisId, isPanorama: boolean) =>\n  selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);\n\nconst selectYAxisWithScale = (state: RechartsRootState, _xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean) =>\n  selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);\n\nconst selectYAxisTicks = (state: RechartsRootState, _xAxisId: AxisId, yAxisId: AxisId, isPanorama: boolean) =>\n  selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);\n\nconst selectBandSize = createSelector(\n  [selectChartLayout, selectXAxisWithScale, selectYAxisWithScale, selectXAxisTicks, selectYAxisTicks],\n  (layout, xAxis, yAxis, xAxisTicks, yAxisTicks) => {\n    if (isCategoricalAxis(layout, 'xAxis')) {\n      return getBandSizeOfAxis(xAxis, xAxisTicks, false);\n    }\n    return getBandSizeOfAxis(yAxis, yAxisTicks, false);\n  },\n);\n\nconst pickAreaId = (\n  _state: RechartsRootState,\n  _xAxisId: AxisId,\n  _yAxisId: AxisId,\n  _isPanorama: boolean,\n  id: GraphicalItemId,\n): GraphicalItemId => id;\n\n/*\n * There is a race condition problem because we read some data from props and some from the state.\n * The state is updated through a dispatch and is one render behind,\n * and so we have this weird one tick render where the displayedData in one selector have the old dataKey\n * but the new dataKey in another selector.\n *\n * A proper fix is to either move everything into the state, or read the dataKey always from props\n * - but this is a smaller change.\n */\nconst selectSynchronisedAreaSettings: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => AreaSettings | undefined = createSelector(\n  [selectUnfilteredCartesianItems, pickAreaId],\n  (graphicalItems, id: GraphicalItemId) =>\n    graphicalItems.filter(item => item.type === 'area').find(item => item.id === id),\n);\n\nexport const selectGraphicalItemStackedData = (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => {\n  const areaSettings = selectSynchronisedAreaSettings(state, xAxisId, yAxisId, isPanorama, id);\n  if (areaSettings == null) {\n    return undefined;\n  }\n  const layout = selectChartLayout(state);\n  const isXAxisCategorical = isCategoricalAxis(layout, 'xAxis');\n  let stackGroups: Record<StackId, StackGroup> | undefined;\n  if (isXAxisCategorical) {\n    stackGroups = selectStackGroups(state, 'yAxis', yAxisId, isPanorama);\n  } else {\n    stackGroups = selectStackGroups(state, 'xAxis', xAxisId, isPanorama);\n  }\n  if (stackGroups == null) {\n    return undefined;\n  }\n  const { stackId } = areaSettings;\n  const stackSeriesIdentifier: StackSeriesIdentifier | undefined = getStackSeriesIdentifier(areaSettings);\n  if (stackId == null || stackSeriesIdentifier == null) {\n    return undefined;\n  }\n  const groups: ReadonlyArray<Series<StackDataPoint, StackSeriesIdentifier>> = stackGroups[stackId]?.stackedData;\n  return groups?.find(v => v.key === stackSeriesIdentifier);\n};\n\nexport const selectArea: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  isPanorama: boolean,\n  id: GraphicalItemId,\n) => ComputedArea | undefined = createSelector(\n  [\n    selectChartLayout,\n    selectXAxisWithScale,\n    selectYAxisWithScale,\n    selectXAxisTicks,\n    selectYAxisTicks,\n    selectGraphicalItemStackedData,\n    selectChartDataWithIndexesIfNotInPanorama,\n    selectBandSize,\n    selectSynchronisedAreaSettings,\n  ],\n  (\n    layout,\n    xAxis,\n    yAxis,\n    xAxisTicks,\n    yAxisTicks,\n    stackedData,\n    { chartData, dataStartIndex, dataEndIndex },\n    bandSize,\n    areaSettings,\n  ) => {\n    if (\n      areaSettings == null ||\n      (layout !== 'horizontal' && layout !== 'vertical') ||\n      xAxis == null ||\n      yAxis == null ||\n      xAxisTicks == null ||\n      yAxisTicks == null ||\n      xAxisTicks.length === 0 ||\n      yAxisTicks.length === 0 ||\n      bandSize == null\n    ) {\n      return undefined;\n    }\n    const { data } = areaSettings;\n\n    let displayedData: ChartData | undefined;\n    if (data && data.length > 0) {\n      displayedData = data;\n    } else {\n      displayedData = chartData?.slice(dataStartIndex, dataEndIndex + 1);\n    }\n\n    if (displayedData == null) {\n      return undefined;\n    }\n\n    // Where is this supposed to come from? No charts have that as a prop.\n    const chartBaseValue: undefined = undefined;\n\n    return computeArea({\n      layout,\n      xAxis,\n      yAxis,\n      xAxisTicks,\n      yAxisTicks,\n      dataStartIndex,\n      areaSettings,\n      stackedData,\n      displayedData,\n      chartBaseValue,\n      bandSize,\n    });\n  },\n);\n","import * as React from 'react';\nimport { MutableRefObject, PureComponent, useCallback, useRef, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { Curve, CurveType, NullablePoint, Point as CurvePoint, Props as CurveProps } from '../shape/Curve';\nimport { Dot } from '../shape/Dot';\nimport { Layer } from '../container/Layer';\nimport { LabelList } from '../component/LabelList';\nimport { Global } from '../util/Global';\nimport { interpolate, isNan, isNullish, isNumber } from '../util/DataUtils';\nimport {\n  getCateCoordinateOfLine,\n  getNormalizedStackId,\n  getTooltipNameProp,\n  getValueByDataKey,\n  StackId,\n} from '../util/ChartUtils';\nimport {\n  ActiveDotType,\n  AnimationDuration,\n  AnimationTiming,\n  DataKey,\n  LegendType,\n  NullableCoordinate,\n  TickItem,\n  TooltipType,\n} from '../util/types';\nimport { filterProps, isClipDot } from '../util/ReactUtils';\nimport type { LegendPayload } from '../component/DefaultLegendContent';\nimport { ActivePoints } from '../component/ActivePoints';\nimport { TooltipPayloadConfiguration } from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';\nimport { BaseAxisWithScale } from '../state/selectors/axisSelectors';\nimport { ChartData } from '../state/chartDataSlice';\nimport { AreaPointItem, ComputedArea, selectArea } from '../state/selectors/areaSelectors';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { useChartLayout } from '../context/chartLayoutContext';\nimport { useChartName } from '../state/selectors/selectors';\nimport { SetLegendPayload } from '../state/SetLegendPayload';\nimport { useAppSelector } from '../state/hooks';\nimport { useAnimationId } from '../util/useAnimationId';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { isWellBehavedNumber } from '../util/isWellBehavedNumber';\nimport { usePlotArea } from '../hooks';\nimport { WithIdRequired, WithoutId } from '../util/useUniqueId';\nimport { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';\nimport { AreaSettings } from '../state/types/AreaSettings';\nimport { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { JavascriptAnimate } from '../animation/JavascriptAnimate';\n\nexport type BaseValue = number | 'dataMin' | 'dataMax';\n\n/**\n * Internal props, combination of external props + defaultProps + private Recharts state\n */\ninterface InternalAreaProps {\n  activeDot: ActiveDotType;\n  animationBegin: number;\n  animationDuration: AnimationDuration;\n  animationEasing: AnimationTiming;\n  baseLine: number | ReadonlyArray<NullableCoordinate> | undefined;\n\n  baseValue?: BaseValue;\n  className?: string;\n  connectNulls: boolean;\n  data?: any[];\n  dataKey: DataKey<any>;\n  dot: ActiveDotType;\n  height?: number;\n  hide: boolean;\n\n  /**\n   * ID is mandatory internally, but optional externally.\n   */\n  id: string;\n  isAnimationActive: boolean;\n  isRange?: boolean;\n  label?: any;\n  layout: 'horizontal' | 'vertical';\n  left: number;\n\n  legendType: LegendType;\n  name?: string | number;\n  needClip: boolean;\n  onAnimationEnd?: () => void;\n  onAnimationStart?: () => void;\n\n  points: ReadonlyArray<AreaPointItem>;\n  stackId?: StackId;\n\n  tooltipType?: TooltipType;\n  top: number;\n  type?: CurveType;\n  unit?: string | number;\n  width?: number;\n  xAxisId: string | number;\n  yAxisId: string | number;\n}\n\n/**\n * External props, intended for end users to fill in\n */\ninterface AreaProps {\n  activeDot?: ActiveDotType;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n  baseValue?: BaseValue;\n  className?: string;\n\n  connectNulls?: boolean;\n  data?: ChartData;\n  dataKey: DataKey<any>;\n  dot?: ActiveDotType;\n  hide?: boolean;\n  id?: string;\n\n  isAnimationActive?: boolean;\n  isRange?: boolean;\n  label?: any;\n  layout?: 'horizontal' | 'vertical';\n  legendType?: LegendType;\n\n  name?: string | number;\n  onAnimationEnd?: () => void;\n\n  onAnimationStart?: () => void;\n  stackId?: string | number;\n  tooltipType?: TooltipType;\n  type?: CurveType;\n  unit?: string | number;\n  xAxisId?: string | number;\n  yAxisId?: string | number;\n}\n\n/**\n * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.\n */\ntype AreaSvgProps = Omit<CurveProps, 'type' | 'points' | 'ref'>;\n\ntype InternalProps = AreaSvgProps & InternalAreaProps;\n\nexport type Props = AreaSvgProps & AreaProps;\n\nfunction getLegendItemColor(stroke: string | undefined, fill: string | undefined): string | undefined {\n  return stroke && stroke !== 'none' ? stroke : fill;\n}\n\nconst computeLegendPayloadFromAreaData = (props: Props): ReadonlyArray<LegendPayload> => {\n  const { dataKey, name, stroke, fill, legendType, hide } = props;\n  return [\n    {\n      inactive: hide,\n      dataKey,\n      type: legendType,\n      color: getLegendItemColor(stroke, fill),\n      value: getTooltipNameProp(name, dataKey),\n      payload: props,\n    },\n  ];\n};\n\nfunction getTooltipEntrySettings(props: Props): TooltipPayloadConfiguration {\n  const { dataKey, data, stroke, strokeWidth, fill, name, hide, unit } = props;\n  return {\n    dataDefinedOnItem: data,\n    positions: undefined,\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      dataKey,\n      nameKey: undefined,\n      name: getTooltipNameProp(name, dataKey),\n      hide,\n      type: props.tooltipType,\n      color: getLegendItemColor(stroke, fill),\n      unit,\n    },\n  };\n}\n\nconst renderDotItem = (option: ActiveDotType, props: any) => {\n  let dotItem;\n\n  if (React.isValidElement(option)) {\n    dotItem = React.cloneElement(option, props);\n  } else if (typeof option === 'function') {\n    dotItem = option(props);\n  } else {\n    const className = clsx('recharts-area-dot', typeof option !== 'boolean' ? option.className : '');\n    dotItem = <Dot {...props} className={className} />;\n  }\n\n  return dotItem;\n};\n\nfunction shouldRenderDots(points: ReadonlyArray<AreaPointItem>, dot: InternalProps['dot']): boolean {\n  if (points == null) {\n    return false;\n  }\n  if (dot) {\n    return true;\n  }\n  return points.length === 1;\n}\n\nfunction Dots({\n  clipPathId,\n  points,\n  props,\n}: {\n  clipPathId: string;\n  points: ReadonlyArray<AreaPointItem>;\n  props: WithoutId<InternalProps>;\n}) {\n  const { needClip, dot, dataKey } = props;\n\n  if (!shouldRenderDots(points, dot)) {\n    return null;\n  }\n\n  const clipDot = isClipDot(dot);\n  const areaProps = svgPropertiesNoEvents(props);\n  const customDotProps = filterProps(dot, true);\n\n  const dots = points.map((entry: AreaPointItem, i: number) => {\n    const dotProps = {\n      key: `dot-${i}`,\n      r: 3,\n      ...areaProps,\n      ...customDotProps,\n      index: i,\n      cx: entry.x,\n      cy: entry.y,\n      dataKey,\n      value: entry.value,\n      payload: entry.payload,\n      points,\n    };\n\n    return renderDotItem(dot, dotProps);\n  });\n  const dotsProps = {\n    clipPath: needClip ? `url(#clipPath-${clipDot ? '' : 'dots-'}${clipPathId})` : undefined,\n  };\n  return (\n    <Layer className=\"recharts-area-dots\" {...dotsProps}>\n      {dots}\n    </Layer>\n  );\n}\n\nfunction StaticArea({\n  points,\n  baseLine,\n  needClip,\n  clipPathId,\n  props,\n  showLabels,\n}: {\n  points: ReadonlyArray<AreaPointItem>;\n  baseLine: Props['baseLine'];\n  needClip: boolean;\n  clipPathId: string;\n  props: InternalProps;\n  showLabels: boolean;\n}) {\n  const { layout, type, stroke, connectNulls, isRange } = props;\n\n  const { id, ...propsWithoutId } = props;\n  const allOtherProps = svgPropertiesNoEvents(propsWithoutId);\n\n  return (\n    <>\n      {points?.length > 1 && (\n        <Layer clipPath={needClip ? `url(#clipPath-${clipPathId})` : undefined}>\n          <Curve\n            {...allOtherProps}\n            id={id}\n            points={points}\n            connectNulls={connectNulls}\n            type={type}\n            baseLine={baseLine}\n            layout={layout}\n            stroke=\"none\"\n            className=\"recharts-area-area\"\n          />\n          {stroke !== 'none' && (\n            <Curve\n              {...allOtherProps}\n              className=\"recharts-area-curve\"\n              layout={layout}\n              type={type}\n              connectNulls={connectNulls}\n              fill=\"none\"\n              points={points}\n            />\n          )}\n          {stroke !== 'none' && isRange && (\n            <Curve\n              {...allOtherProps}\n              className=\"recharts-area-curve\"\n              layout={layout}\n              type={type}\n              connectNulls={connectNulls}\n              fill=\"none\"\n              points={baseLine as CurvePoint[]}\n            />\n          )}\n        </Layer>\n      )}\n      <Dots points={points} props={propsWithoutId} clipPathId={clipPathId} />\n      {showLabels && LabelList.renderCallByParent(propsWithoutId, points)}\n    </>\n  );\n}\n\nfunction VerticalRect({\n  alpha,\n  baseLine,\n  points,\n  strokeWidth,\n}: {\n  alpha: number;\n  points: ReadonlyArray<AreaPointItem>;\n  baseLine: Props['baseLine'];\n  strokeWidth: Props['strokeWidth'];\n}) {\n  const startY = points[0].y;\n  const endY = points[points.length - 1].y;\n  if (!isWellBehavedNumber(startY) || !isWellBehavedNumber(endY)) {\n    return null;\n  }\n  const height = alpha * Math.abs(startY - endY);\n  let maxX = Math.max(...points.map(entry => entry.x || 0));\n\n  if (isNumber(baseLine)) {\n    maxX = Math.max(baseLine, maxX);\n  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {\n    maxX = Math.max(...baseLine.map(entry => entry.x || 0), maxX);\n  }\n\n  if (isNumber(maxX)) {\n    return (\n      <rect\n        x={0}\n        y={startY < endY ? startY : startY - height}\n        width={maxX + (strokeWidth ? parseInt(`${strokeWidth}`, 10) : 1)}\n        height={Math.floor(height)}\n      />\n    );\n  }\n\n  return null;\n}\n\nfunction HorizontalRect({\n  alpha,\n  baseLine,\n  points,\n  strokeWidth,\n}: {\n  alpha: number;\n  points: ReadonlyArray<AreaPointItem>;\n  baseLine: Props['baseLine'];\n  strokeWidth: Props['strokeWidth'];\n}) {\n  const startX = points[0].x;\n  const endX = points[points.length - 1].x;\n  if (!isWellBehavedNumber(startX) || !isWellBehavedNumber(endX)) {\n    return null;\n  }\n  const width = alpha * Math.abs(startX - endX);\n  let maxY = Math.max(...points.map(entry => entry.y || 0));\n\n  if (isNumber(baseLine)) {\n    maxY = Math.max(baseLine, maxY);\n  } else if (baseLine && Array.isArray(baseLine) && baseLine.length) {\n    maxY = Math.max(...baseLine.map(entry => entry.y || 0), maxY);\n  }\n\n  if (isNumber(maxY)) {\n    return (\n      <rect\n        x={startX < endX ? startX : startX - width}\n        y={0}\n        width={width}\n        height={Math.floor(maxY + (strokeWidth ? parseInt(`${strokeWidth}`, 10) : 1))}\n      />\n    );\n  }\n\n  return null;\n}\n\nfunction ClipRect({\n  alpha,\n  layout,\n  points,\n  baseLine,\n  strokeWidth,\n}: {\n  alpha: number;\n  layout: 'horizontal' | 'vertical';\n  points: ReadonlyArray<AreaPointItem>;\n  baseLine: Props['baseLine'];\n  strokeWidth: Props['strokeWidth'];\n}) {\n  if (layout === 'vertical') {\n    return <VerticalRect alpha={alpha} points={points} baseLine={baseLine} strokeWidth={strokeWidth} />;\n  }\n\n  return <HorizontalRect alpha={alpha} points={points} baseLine={baseLine} strokeWidth={strokeWidth} />;\n}\n\nfunction AreaWithAnimation({\n  needClip,\n  clipPathId,\n  props,\n  previousPointsRef,\n  previousBaselineRef,\n}: {\n  needClip: boolean;\n  clipPathId: string;\n  props: InternalProps;\n  previousPointsRef: MutableRefObject<ReadonlyArray<AreaPointItem> | null>;\n  previousBaselineRef: MutableRefObject<InternalProps['baseLine'] | null>;\n}) {\n  const {\n    points,\n    baseLine,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    onAnimationStart,\n    onAnimationEnd,\n  } = props;\n  const animationId = useAnimationId(props, 'recharts-area-');\n\n  const [isAnimating, setIsAnimating] = useState(true);\n\n  const handleAnimationEnd = useCallback(() => {\n    if (typeof onAnimationEnd === 'function') {\n      onAnimationEnd();\n    }\n    setIsAnimating(false);\n  }, [onAnimationEnd]);\n\n  const handleAnimationStart = useCallback(() => {\n    if (typeof onAnimationStart === 'function') {\n      onAnimationStart();\n    }\n    setIsAnimating(true);\n  }, [onAnimationStart]);\n\n  const prevPoints = previousPointsRef.current;\n  const prevBaseLine = previousBaselineRef.current;\n  return (\n    <JavascriptAnimate\n      begin={animationBegin}\n      duration={animationDuration}\n      isActive={isAnimationActive}\n      easing={animationEasing}\n      onAnimationEnd={handleAnimationEnd}\n      onAnimationStart={handleAnimationStart}\n      key={animationId}\n    >\n      {(t: number) => {\n        if (prevPoints) {\n          const prevPointsDiffFactor = prevPoints.length / points.length;\n          const stepPoints: ReadonlyArray<AreaPointItem> =\n            /*\n             * Here it is important that at the very end of the animation, on the last frame,\n             * we render the original points without any interpolation.\n             * This is needed because the code above is checking for reference equality to decide if the animation should run\n             * and if we create a new array instance (even if the numbers were the same)\n             * then we would break animations.\n             */\n            t === 1\n              ? points\n              : points.map((entry, index): AreaPointItem => {\n                  const prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n                  if (prevPoints[prevPointIndex]) {\n                    const prev: AreaPointItem = prevPoints[prevPointIndex];\n\n                    return { ...entry, x: interpolate(prev.x, entry.x, t), y: interpolate(prev.y, entry.y, t) };\n                  }\n\n                  return entry;\n                });\n          let stepBaseLine: number | ReadonlyArray<NullablePoint>;\n\n          if (isNumber(baseLine)) {\n            stepBaseLine = interpolate(prevBaseLine, baseLine, t);\n          } else if (isNullish(baseLine) || isNan(baseLine)) {\n            stepBaseLine = interpolate(prevBaseLine, 0, t);\n          } else {\n            stepBaseLine = baseLine.map((entry, index) => {\n              const prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n              if (Array.isArray(prevBaseLine) && prevBaseLine[prevPointIndex]) {\n                const prev = prevBaseLine[prevPointIndex];\n\n                return { ...entry, x: interpolate(prev.x, entry.x, t), y: interpolate(prev.y, entry.y, t) };\n              }\n\n              return entry;\n            });\n          }\n\n          if (t > 0) {\n            /*\n             * We need to keep the refs in the parent component because we need to remember the last shape of the animation\n             * even if AreaWithAnimation is unmounted as that happens when changing props.\n             *\n             * And we need to update the refs here because here is where the interpolation is computed.\n             * Eslint doesn't like changing function arguments, but we need it so here is an eslint-disable.\n             */\n            // eslint-disable-next-line no-param-reassign\n            previousPointsRef.current = stepPoints;\n            // eslint-disable-next-line no-param-reassign\n            previousBaselineRef.current = stepBaseLine;\n          }\n          return (\n            <StaticArea\n              points={stepPoints}\n              baseLine={stepBaseLine}\n              needClip={needClip}\n              clipPathId={clipPathId}\n              props={props}\n              showLabels={!isAnimating}\n            />\n          );\n        }\n\n        if (t > 0) {\n          // eslint-disable-next-line no-param-reassign\n          previousPointsRef.current = points;\n          // eslint-disable-next-line no-param-reassign\n          previousBaselineRef.current = baseLine;\n        }\n        return (\n          <Layer>\n            <defs>\n              <clipPath id={`animationClipPath-${clipPathId}`}>\n                <ClipRect\n                  alpha={t}\n                  points={points}\n                  baseLine={baseLine}\n                  layout={props.layout}\n                  strokeWidth={props.strokeWidth}\n                />\n              </clipPath>\n            </defs>\n            <Layer clipPath={`url(#animationClipPath-${clipPathId})`}>\n              <StaticArea\n                points={points}\n                baseLine={baseLine}\n                needClip={needClip}\n                clipPathId={clipPathId}\n                props={props}\n                showLabels\n              />\n            </Layer>\n          </Layer>\n        );\n      }}\n    </JavascriptAnimate>\n  );\n}\n\n/*\n * This components decides if the area should be animated or not.\n * It also holds the state of the animation.\n */\nfunction RenderArea({ needClip, clipPathId, props }: { needClip: boolean; clipPathId: string; props: InternalProps }) {\n  const { points, baseLine, isAnimationActive } = props;\n\n  /*\n   * These two must be refs, not state!\n   * Because we want to store the most recent shape of the animation in case we have to interrupt the animation;\n   * that happens when user initiates another animation before the current one finishes.\n   *\n   * If this was a useState, then every step in the animation would trigger a re-render.\n   * So, useRef it is.\n   */\n  const previousPointsRef = useRef<ReadonlyArray<AreaPointItem> | null>(null);\n  const previousBaselineRef = useRef<InternalProps['baseLine'] | null>();\n\n  const prevPoints = previousPointsRef.current;\n  const prevBaseLine = previousBaselineRef.current;\n\n  if (\n    isAnimationActive &&\n    /*\n     * Here it's important that we unmount of AreaWithAnimation in case points are undefined\n     * - this will make sure to interrupt the animation if it's running.\n     * We still get to keep the last shape of the animation in the refs above.\n     */\n    points &&\n    points.length &&\n    (prevPoints !== points || prevBaseLine !== baseLine)\n  ) {\n    return (\n      <AreaWithAnimation\n        needClip={needClip}\n        clipPathId={clipPathId}\n        props={props}\n        previousPointsRef={previousPointsRef}\n        previousBaselineRef={previousBaselineRef}\n      />\n    );\n  }\n\n  return (\n    <StaticArea\n      points={points}\n      baseLine={baseLine}\n      needClip={needClip}\n      clipPathId={clipPathId}\n      props={props}\n      showLabels\n    />\n  );\n}\n\nclass AreaWithState extends PureComponent<InternalProps> {\n  render() {\n    const { hide, dot, points, className, top, left, needClip, xAxisId, yAxisId, width, height, id, baseLine } =\n      this.props;\n\n    if (hide) {\n      return null;\n    }\n\n    const layerClass = clsx('recharts-area', className);\n    const clipPathId = id;\n    const { r = 3, strokeWidth = 2 } = filterProps(dot, false) ?? { r: 3, strokeWidth: 2 };\n    const clipDot = isClipDot(dot);\n    const dotSize = r * 2 + strokeWidth;\n\n    return (\n      <>\n        <Layer className={layerClass}>\n          {needClip && (\n            <defs>\n              <GraphicalItemClipPath clipPathId={clipPathId} xAxisId={xAxisId} yAxisId={yAxisId} />\n              {!clipDot && (\n                <clipPath id={`clipPath-dots-${clipPathId}`}>\n                  <rect\n                    x={left - dotSize / 2}\n                    y={top - dotSize / 2}\n                    width={width + dotSize}\n                    height={height + dotSize}\n                  />\n                </clipPath>\n              )}\n            </defs>\n          )}\n          <RenderArea needClip={needClip} clipPathId={clipPathId} props={this.props} />\n        </Layer>\n        <ActivePoints\n          points={points}\n          mainColor={getLegendItemColor(this.props.stroke, this.props.fill)}\n          itemDataKey={this.props.dataKey}\n          activeDot={this.props.activeDot}\n        />\n        {this.props.isRange && Array.isArray(baseLine) && (\n          <ActivePoints\n            points={baseLine}\n            mainColor={getLegendItemColor(this.props.stroke, this.props.fill)}\n            itemDataKey={this.props.dataKey}\n            activeDot={this.props.activeDot}\n          />\n        )}\n      </>\n    );\n  }\n}\n\nconst defaultAreaProps = {\n  activeDot: true,\n  animationBegin: 0,\n  animationDuration: 1500,\n  animationEasing: 'ease',\n  connectNulls: false,\n  dot: false,\n  fill: '#3182bd',\n  fillOpacity: 0.6,\n  hide: false,\n  isAnimationActive: !Global.isSsr,\n  legendType: 'line',\n  stroke: '#3182bd',\n  xAxisId: 0,\n  yAxisId: 0,\n} as const satisfies Partial<Props>;\n\nfunction AreaImpl(props: WithIdRequired<Props>) {\n  const {\n    activeDot,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    connectNulls,\n    dot,\n    fill,\n    fillOpacity,\n    hide,\n    isAnimationActive,\n    legendType,\n    stroke,\n    xAxisId,\n    yAxisId,\n    ...everythingElse\n  } = resolveDefaultProps(props, defaultAreaProps);\n  const layout = useChartLayout();\n  const chartName = useChartName();\n  const { needClip } = useNeedsClip(xAxisId, yAxisId);\n  const isPanorama = useIsPanorama();\n\n  const { points, isRange, baseLine } =\n    useAppSelector(state => selectArea(state, xAxisId, yAxisId, isPanorama, props.id)) ?? {};\n  const plotArea = usePlotArea();\n\n  if ((layout !== 'horizontal' && layout !== 'vertical') || plotArea == null) {\n    // Can't render Area in an unsupported layout\n    return null;\n  }\n\n  if (chartName !== 'AreaChart' && chartName !== 'ComposedChart') {\n    // There is nothing stopping us from rendering Area in other charts, except for historical reasons. Do we want to allow that?\n    return null;\n  }\n\n  const { height, width, x: left, y: top } = plotArea;\n\n  if (!points || !points.length) {\n    return null;\n  }\n\n  return (\n    <AreaWithState\n      {...everythingElse}\n      activeDot={activeDot}\n      animationBegin={animationBegin}\n      animationDuration={animationDuration}\n      animationEasing={animationEasing}\n      baseLine={baseLine}\n      connectNulls={connectNulls}\n      dot={dot}\n      fill={fill}\n      fillOpacity={fillOpacity}\n      height={height}\n      hide={hide}\n      layout={layout}\n      isAnimationActive={isAnimationActive}\n      isRange={isRange}\n      legendType={legendType}\n      needClip={needClip}\n      points={points}\n      stroke={stroke}\n      width={width}\n      left={left}\n      top={top}\n      xAxisId={xAxisId}\n      yAxisId={yAxisId}\n    />\n  );\n}\n\nexport const getBaseValue = (\n  layout: 'horizontal' | 'vertical',\n  chartBaseValue: BaseValue | undefined,\n  itemBaseValue: BaseValue | undefined,\n  xAxis: BaseAxisWithScale,\n  yAxis: BaseAxisWithScale,\n): number => {\n  // The baseValue can be defined both on the AreaChart, and on the Area.\n  // The value for the item takes precedence.\n  const baseValue: BaseValue | undefined = itemBaseValue ?? chartBaseValue;\n\n  if (isNumber(baseValue)) {\n    return baseValue;\n  }\n\n  const numericAxis = layout === 'horizontal' ? yAxis : xAxis;\n  // @ts-expect-error d3scale .domain() returns unknown, Math.max expects number\n  const domain: [number, number] = numericAxis.scale.domain();\n\n  if (numericAxis.type === 'number') {\n    const domainMax = Math.max(domain[0], domain[1]);\n    const domainMin = Math.min(domain[0], domain[1]);\n\n    if (baseValue === 'dataMin') {\n      return domainMin;\n    }\n    if (baseValue === 'dataMax') {\n      return domainMax;\n    }\n\n    return domainMax < 0 ? domainMax : Math.max(Math.min(domain[0], domain[1]), 0);\n  }\n\n  if (baseValue === 'dataMin') {\n    return domain[0];\n  }\n  if (baseValue === 'dataMax') {\n    return domain[1];\n  }\n\n  return domain[0];\n};\n\nexport function computeArea({\n  areaSettings: { connectNulls, baseValue: itemBaseValue, dataKey },\n  stackedData,\n  layout,\n  chartBaseValue,\n  xAxis,\n  yAxis,\n  displayedData,\n  dataStartIndex,\n  xAxisTicks,\n  yAxisTicks,\n  bandSize,\n}: {\n  areaSettings: AreaSettings;\n  stackedData: number[][] | undefined;\n  layout: 'horizontal' | 'vertical';\n  chartBaseValue: BaseValue | undefined;\n  xAxis: BaseAxisWithScale;\n  yAxis: BaseAxisWithScale;\n  displayedData: ChartData;\n  dataStartIndex: number;\n  xAxisTicks: TickItem[];\n  yAxisTicks: TickItem[];\n  bandSize: number;\n}): ComputedArea {\n  const hasStack = stackedData && stackedData.length;\n  const baseValue = getBaseValue(layout, chartBaseValue, itemBaseValue, xAxis, yAxis);\n  const isHorizontalLayout = layout === 'horizontal';\n  let isRange = false;\n\n  const points: ReadonlyArray<AreaPointItem> = displayedData.map((entry, index): AreaPointItem => {\n    let value;\n\n    if (hasStack) {\n      value = stackedData[dataStartIndex + index];\n    } else {\n      value = getValueByDataKey(entry, dataKey);\n\n      if (!Array.isArray(value)) {\n        value = [baseValue, value];\n      } else {\n        isRange = true;\n      }\n    }\n\n    const isBreakPoint = value[1] == null || (hasStack && !connectNulls && getValueByDataKey(entry, dataKey) == null);\n\n    if (isHorizontalLayout) {\n      return {\n        // @ts-expect-error getCateCoordinateOfLine expects chart data to be an object, we allow unknown\n        x: getCateCoordinateOfLine({ axis: xAxis, ticks: xAxisTicks, bandSize, entry, index }),\n        y: isBreakPoint ? null : yAxis.scale(value[1]),\n        value,\n        payload: entry,\n      };\n    }\n\n    return {\n      x: isBreakPoint ? null : xAxis.scale(value[1]),\n      // @ts-expect-error getCateCoordinateOfLine expects chart data to be an object, we allow unknown\n      y: getCateCoordinateOfLine({ axis: yAxis, ticks: yAxisTicks, bandSize, entry, index }),\n      value,\n      payload: entry,\n    };\n  });\n\n  let baseLine;\n  if (hasStack || isRange) {\n    baseLine = points.map((entry: AreaPointItem) => {\n      const x = Array.isArray(entry.value) ? entry.value[0] : null;\n      if (isHorizontalLayout) {\n        return {\n          x: entry.x,\n          y: x != null && entry.y != null ? yAxis.scale(x) : null,\n          payload: entry.payload,\n        };\n      }\n      return {\n        x: x != null ? xAxis.scale(x) : null,\n        y: entry.y,\n        payload: entry.payload,\n      };\n    });\n  } else {\n    baseLine = isHorizontalLayout ? yAxis.scale(baseValue) : xAxis.scale(baseValue);\n  }\n\n  return {\n    points,\n    baseLine,\n    isRange,\n  };\n}\n\nexport function Area(outsideProps: Props) {\n  const props = resolveDefaultProps(outsideProps, defaultAreaProps);\n  const isPanorama = useIsPanorama();\n  // Report all props to Redux store first, before calling any hooks, to avoid circular dependencies.\n  return (\n    <RegisterGraphicalItemId id={props.id} type=\"area\">\n      {id => (\n        <>\n          <SetLegendPayload legendPayload={computeLegendPayloadFromAreaData(props)} />\n          <SetTooltipEntrySettings fn={getTooltipEntrySettings} args={props} />\n          <SetCartesianGraphicalItem\n            type=\"area\"\n            id={id}\n            data={props.data}\n            dataKey={props.dataKey}\n            xAxisId={props.xAxisId}\n            yAxisId={props.yAxisId}\n            zAxisId={0}\n            stackId={getNormalizedStackId(props.stackId)}\n            hide={props.hide}\n            barSize={undefined}\n            baseValue={props.baseValue}\n            isPanorama={isPanorama}\n            connectNulls={props.connectNulls}\n          />\n          <AreaImpl {...props} id={id} />\n        </>\n      )}\n    </RegisterGraphicalItemId>\n  );\n}\nArea.displayName = 'Area';\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { castDraft } from 'immer';\nimport { ReactElement, SVGProps } from 'react';\nimport { AxisDomain, AxisDomainType, AxisInterval, AxisTick, DataKey, ScaleType } from '../util/types';\nimport { RechartsScale } from '../util/ChartUtils';\nimport { TickFormatter } from '../cartesian/CartesianAxis';\nimport type { AxisRange } from './selectors/axisSelectors';\n\nexport type AxisId = string | number;\nexport type XAxisPadding = { left?: number; right?: number } | 'gap' | 'no-gap';\nexport type YAxisPadding = { top?: number; bottom?: number } | 'gap' | 'no-gap';\n\nexport type XAxisOrientation = 'top' | 'bottom';\nexport type YAxisOrientation = 'left' | 'right';\n\n/**\n * Properties shared in X, Y, and Z axes\n */\nexport type BaseCartesianAxis = {\n  id: AxisId;\n  scale: ScaleType | RechartsScale | undefined;\n  type: AxisDomainType;\n  /**\n   * The axis functionality is severely restricted without a dataKey\n   * - but there is still something left, and the prop is optional\n   * so this can also be undefined even in real charts.\n   * There are no defaults.\n   */\n  dataKey: DataKey<any> | undefined;\n  unit: string | undefined;\n  name: string | undefined;\n  allowDuplicatedCategory: boolean;\n  allowDataOverflow: boolean;\n  reversed: boolean;\n  includeHidden: boolean;\n  domain: AxisDomain | undefined;\n};\n\nexport type TicksSettings = {\n  allowDecimals: boolean;\n  tickCount: number;\n  /**\n   * Ticks can be any type when the axis is the type of category\n   * Ticks must be numbers when the axis is the type of number\n   */\n  ticks: ReadonlyArray<AxisTick> | undefined;\n  tick: SVGProps<SVGTextElement> | ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | boolean;\n};\n\n/**\n * These are the external props, visible for users as they set them using our public API.\n * There is all sorts of internal computed things based on these, but they will come through selectors.\n *\n * Properties shared between X and Y axes\n */\nexport type CartesianAxisSettings = BaseCartesianAxis &\n  TicksSettings & {\n    interval: AxisInterval;\n    mirror: boolean;\n    minTickGap: number;\n    angle: number;\n    hide: boolean;\n    tickFormatter: TickFormatter | undefined;\n  };\n\nexport type XAxisSettings = CartesianAxisSettings & {\n  padding: XAxisPadding;\n  height: number;\n  orientation: XAxisOrientation;\n};\n\nexport type YAxisWidth = number | 'auto';\n\nexport type YAxisSettings = CartesianAxisSettings & {\n  padding: YAxisPadding;\n  width: YAxisWidth;\n  orientation: YAxisOrientation;\n};\n\n/**\n * Z axis is special because it's never displayed. It controls the size of Scatter dots,\n * but it never displays ticks anywhere.\n */\nexport type ZAxisSettings = BaseCartesianAxis & {\n  range: AxisRange;\n};\n\ntype AxisMapState = {\n  xAxis: Record<AxisId, XAxisSettings>;\n  yAxis: Record<AxisId, YAxisSettings>;\n  zAxis: Record<AxisId, ZAxisSettings>;\n};\n\nconst initialState: AxisMapState = {\n  xAxis: {},\n  yAxis: {},\n  zAxis: {},\n};\n\n/**\n * This is the slice where each individual Axis element pushes its own configuration.\n * Prefer to use this one instead of axisSlice.\n */\nconst cartesianAxisSlice = createSlice({\n  name: 'cartesianAxis',\n  initialState,\n  reducers: {\n    addXAxis(state, action: PayloadAction<XAxisSettings>) {\n      state.xAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeXAxis(state, action: PayloadAction<XAxisSettings>) {\n      delete state.xAxis[action.payload.id];\n    },\n    addYAxis(state, action: PayloadAction<YAxisSettings>) {\n      state.yAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeYAxis(state, action: PayloadAction<YAxisSettings>) {\n      delete state.yAxis[action.payload.id];\n    },\n    addZAxis(state, action: PayloadAction<ZAxisSettings>) {\n      state.zAxis[action.payload.id] = castDraft(action.payload);\n    },\n    removeZAxis(state, action: PayloadAction<ZAxisSettings>) {\n      delete state.zAxis[action.payload.id];\n    },\n    updateYAxisWidth(state, action: PayloadAction<{ id: AxisId; width: number }>) {\n      const { id, width } = action.payload;\n      if (state.yAxis[id]) {\n        state.yAxis[id] = {\n          ...state.yAxis[id],\n          width,\n        };\n      }\n    },\n  },\n});\n\nexport const { addXAxis, removeXAxis, addYAxis, removeYAxis, addZAxis, removeZAxis, updateYAxisWidth } =\n  cartesianAxisSlice.actions;\n\nexport const cartesianAxisReducer = cartesianAxisSlice.reducer;\n","import * as React from 'react';\nimport { Component, useEffect } from 'react';\nimport { ScaleType, DataKey, AxisDomain } from '../util/types';\nimport { addZAxis, removeZAxis, ZAxisSettings } from '../state/cartesianAxisSlice';\nimport { useAppDispatch } from '../state/hooks';\nimport { RechartsScale } from '../util/ChartUtils';\nimport { AxisRange, implicitZAxis } from '../state/selectors/axisSelectors';\n\nfunction SetZAxisSettings(settings: ZAxisSettings): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(addZAxis(settings));\n    return () => {\n      dispatch(removeZAxis(settings));\n    };\n  }, [settings, dispatch]);\n  return null;\n}\n\nexport interface Props {\n  type?: 'number' | 'category';\n  /** The name of data displayed in the axis */\n  name?: string;\n  /** The unit of data displayed in the axis */\n  unit?: string;\n  /** The unique id of z-axis */\n  zAxisId?: string | number;\n  /** The key of data displayed in the axis */\n  dataKey?: DataKey<any>;\n  /** The range of axis */\n  range?: AxisRange;\n  scale?: ScaleType | RechartsScale | undefined;\n  /** The domain of scale in this axis */\n  domain?: AxisDomain;\n}\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport class ZAxis extends Component<Props> {\n  static displayName = 'ZAxis';\n\n  static defaultProps = {\n    zAxisId: 0,\n    range: implicitZAxis.range,\n    scale: implicitZAxis.scale,\n    type: implicitZAxis.type,\n  };\n\n  render() {\n    return (\n      <SetZAxisSettings\n        domain={this.props.domain}\n        id={this.props.zAxisId}\n        dataKey={this.props.dataKey}\n        name={this.props.name}\n        unit={this.props.unit}\n        range={this.props.range}\n        scale={this.props.scale}\n        type={this.props.type}\n        allowDuplicatedCategory={implicitZAxis.allowDuplicatedCategory}\n        allowDataOverflow={implicitZAxis.allowDataOverflow}\n        reversed={implicitZAxis.reversed}\n        includeHidden={implicitZAxis.includeHidden}\n      />\n    );\n  }\n}\n","import * as React from 'react';\nimport { ActiveShape, SymbolType } from './types';\nimport { ScatterPointItem } from '../cartesian/Scatter';\nimport { Symbols } from '../shape/Symbols';\nimport { Shape } from './ActiveShapeUtils';\n\nexport function ScatterSymbol({\n  option,\n  isActive,\n  ...props\n}: {\n  option: ActiveShape<ScatterPointItem> | SymbolType;\n  isActive: boolean;\n} & ScatterPointItem) {\n  if (typeof option === 'string') {\n    return <Shape option={<Symbols type={option} {...props} />} isActive={isActive} shapeType=\"symbols\" {...props} />;\n  }\n\n  return <Shape option={option} isActive={isActive} shapeType=\"symbols\" {...props} />;\n}\n","import { createSelector } from 'reselect';\nimport { ReactElement } from 'react';\nimport { computeScatterPoints, ScatterPointItem } from '../../cartesian/Scatter';\nimport { RechartsRootState } from '../store';\nimport { AxisId } from '../cartesianAxisSlice';\nimport { selectChartDataWithIndexesIfNotInPanorama } from './dataSelectors';\nimport { ChartData, ChartDataState } from '../chartDataSlice';\nimport {\n  selectAxisWithScale,\n  selectTicksOfGraphicalItem,\n  selectUnfilteredCartesianItems,\n  selectZAxisWithScale,\n  ZAxisWithScale,\n} from './axisSelectors';\nimport { ScatterSettings } from '../types/ScatterSettings';\nimport { GraphicalItemId } from '../graphicalItemsSlice';\n\nconst selectXAxisWithScale = (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  _yAxisId: AxisId,\n  _zAxisId: AxisId,\n  _id: GraphicalItemId,\n  _cells: ReadonlyArray<ReactElement> | undefined,\n  isPanorama: boolean,\n) => selectAxisWithScale(state, 'xAxis', xAxisId, isPanorama);\n\nconst selectXAxisTicks = (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  _yAxisId: AxisId,\n  _zAxisId: AxisId,\n  _id: GraphicalItemId,\n  _cells: ReadonlyArray<ReactElement> | undefined,\n  isPanorama: boolean,\n) => selectTicksOfGraphicalItem(state, 'xAxis', xAxisId, isPanorama);\n\nconst selectYAxisWithScale = (\n  state: RechartsRootState,\n  _xAxisId: AxisId,\n  yAxisId: AxisId,\n  _zAxisId: AxisId,\n  _id: GraphicalItemId,\n  _cells: ReadonlyArray<ReactElement> | undefined,\n  isPanorama: boolean,\n) => selectAxisWithScale(state, 'yAxis', yAxisId, isPanorama);\n\nconst selectYAxisTicks = (\n  state: RechartsRootState,\n  _xAxisId: AxisId,\n  yAxisId: AxisId,\n  _zAxisId: AxisId,\n  _id: GraphicalItemId,\n  _cells: ReadonlyArray<ReactElement> | undefined,\n  isPanorama: boolean,\n) => selectTicksOfGraphicalItem(state, 'yAxis', yAxisId, isPanorama);\n\nconst selectZAxis = (state: RechartsRootState, _xAxisId: AxisId, _yAxisId: AxisId, zAxisId: AxisId) =>\n  selectZAxisWithScale(state, 'zAxis', zAxisId, false);\n\nconst pickScatterId = (\n  _state: RechartsRootState,\n  _xAxisId: AxisId,\n  _yAxisId: AxisId,\n  _zAxisId: AxisId,\n  id: GraphicalItemId,\n) => id;\n\nconst pickCells = (\n  _state: RechartsRootState,\n  _xAxisId: AxisId,\n  _yAxisId: AxisId,\n  _zAxisId: AxisId,\n  _id: GraphicalItemId,\n  cells: ReadonlyArray<ReactElement> | undefined,\n): ReadonlyArray<ReactElement> | undefined => cells;\n\nconst scatterChartDataSelector = (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  _zAxisId: AxisId,\n  _id: GraphicalItemId,\n  _cells: ReadonlyArray<ReactElement> | undefined,\n  isPanorama: boolean,\n): ChartDataState => selectChartDataWithIndexesIfNotInPanorama(state, xAxisId, yAxisId, isPanorama);\n\nconst selectSynchronisedScatterSettings: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  _zAxisId: AxisId,\n  id: GraphicalItemId,\n) => ScatterSettings | undefined = createSelector(\n  [selectUnfilteredCartesianItems, pickScatterId],\n  (graphicalItems, id) => {\n    return graphicalItems.filter(item => item.type === 'scatter').find(item => item.id === id);\n  },\n);\n\nexport const selectScatterPoints: (\n  state: RechartsRootState,\n  xAxisId: AxisId,\n  yAxisId: AxisId,\n  zAxisId: AxisId,\n  id: GraphicalItemId,\n  cells: ReadonlyArray<ReactElement> | undefined,\n  isPanorama: boolean,\n) => ReadonlyArray<ScatterPointItem> | undefined = createSelector(\n  [\n    scatterChartDataSelector,\n    selectXAxisWithScale,\n    selectXAxisTicks,\n    selectYAxisWithScale,\n    selectYAxisTicks,\n    selectZAxis,\n    selectSynchronisedScatterSettings,\n    pickCells,\n  ],\n  (\n    { chartData, dataStartIndex, dataEndIndex }: ChartDataState,\n    xAxis,\n    xAxisTicks,\n    yAxis,\n    yAxisTicks,\n    zAxis: ZAxisWithScale,\n    scatterSettings: ScatterSettings,\n    cells,\n  ): ReadonlyArray<ScatterPointItem> | undefined => {\n    if (scatterSettings == null) {\n      return undefined;\n    }\n    let displayedData: ChartData | undefined;\n    if (scatterSettings?.data != null && scatterSettings.data.length > 0) {\n      displayedData = scatterSettings.data;\n    } else {\n      displayedData = chartData?.slice(dataStartIndex, dataEndIndex + 1);\n    }\n    if (\n      displayedData == null ||\n      xAxis == null ||\n      yAxis == null ||\n      xAxisTicks == null ||\n      yAxisTicks == null ||\n      xAxisTicks?.length === 0 ||\n      yAxisTicks?.length === 0\n    ) {\n      return undefined;\n    }\n    return computeScatterPoints({\n      displayedData,\n      xAxis,\n      yAxis,\n      zAxis,\n      scatterSettings,\n      xAxisTicks,\n      yAxisTicks,\n      cells,\n    });\n  },\n);\n","import * as React from 'react';\nimport { MutableRefObject, ReactElement, useCallback, useMemo, useRef, useState } from 'react';\n\nimport { clsx } from 'clsx';\nimport { Layer } from '../container/Layer';\nimport { ImplicitLabelListType, LabelList } from '../component/LabelList';\nimport { filterProps, findAllByType } from '../util/ReactUtils';\nimport { Global } from '../util/Global';\nimport { ZAxis } from './ZAxis';\nimport { Curve, CurveType, Props as CurveProps } from '../shape/Curve';\nimport type { ErrorBarDataItem, ErrorBarDirection } from './ErrorBar';\nimport { Cell } from '../component/Cell';\nimport { getLinearRegression, interpolateNumber, isNullish } from '../util/DataUtils';\nimport { getCateCoordinateOfLine, getTooltipNameProp, getValueByDataKey } from '../util/ChartUtils';\nimport {\n  ActiveShape,\n  adaptEventsOfChild,\n  AnimationDuration,\n  AnimationTiming,\n  Coordinate,\n  DataKey,\n  LegendType,\n  PresentationAttributesAdaptChildEvent,\n  SymbolType,\n  TickItem,\n} from '../util/types';\nimport { TooltipType } from '../component/DefaultTooltipContent';\nimport { ScatterSymbol } from '../util/ScatterUtils';\nimport { InnerSymbolsProp } from '../shape/Symbols';\nimport type { LegendPayload } from '../component/DefaultLegendContent';\nimport {\n  useMouseClickItemDispatch,\n  useMouseEnterItemDispatch,\n  useMouseLeaveItemDispatch,\n} from '../context/tooltipContext';\nimport { TooltipPayload, TooltipPayloadConfiguration, TooltipPayloadEntry } from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { SetErrorBarContext } from '../context/ErrorBarContext';\nimport { AxisId } from '../state/cartesianAxisSlice';\nimport { GraphicalItemClipPath, useNeedsClip } from './GraphicalItemClipPath';\nimport { selectScatterPoints } from '../state/selectors/scatterSelectors';\nimport { useAppSelector } from '../state/hooks';\nimport { BaseAxisWithScale, ZAxisWithScale } from '../state/selectors/axisSelectors';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { selectActiveTooltipIndex } from '../state/selectors/tooltipSelectors';\nimport { SetLegendPayload } from '../state/SetLegendPayload';\nimport { DATA_ITEM_DATAKEY_ATTRIBUTE_NAME, DATA_ITEM_INDEX_ATTRIBUTE_NAME } from '../util/Constants';\nimport { useAnimationId } from '../util/useAnimationId';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { RegisterGraphicalItemId } from '../context/RegisterGraphicalItemId';\nimport { ScatterSettings } from '../state/types/ScatterSettings';\nimport { SetCartesianGraphicalItem } from '../state/SetGraphicalItem';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { JavascriptAnimate } from '../animation/JavascriptAnimate';\n\ninterface ScatterPointNode {\n  x?: number | string;\n  y?: number | string;\n  z?: number | string;\n}\n\nexport interface ScatterPointItem {\n  cx?: number;\n  cy?: number;\n  size?: number;\n  node?: ScatterPointNode;\n  payload?: any;\n  tooltipPayload?: TooltipPayload;\n  tooltipPosition: Coordinate;\n}\n\nexport type ScatterCustomizedShape = ActiveShape<ScatterPointItem, SVGPathElement & InnerSymbolsProp> | SymbolType;\n\n/**\n * Internal props, combination of external props + defaultProps + private Recharts state\n */\ninterface ScatterInternalProps {\n  data?: any[];\n  xAxisId: string | number;\n  yAxisId: string | number;\n  zAxisId: string | number;\n\n  dataKey?: DataKey<any>;\n\n  line?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | CurveProps | boolean;\n  lineType: 'fitting' | 'joint';\n  lineJointType: CurveType;\n  legendType: LegendType;\n  tooltipType?: TooltipType;\n  className?: string;\n  name?: string;\n\n  activeShape?: ScatterCustomizedShape;\n  shape: ScatterCustomizedShape;\n  points: ReadonlyArray<ScatterPointItem>;\n  hide: boolean;\n  label?: ImplicitLabelListType<any>;\n\n  isAnimationActive: boolean;\n  animationBegin: number;\n  animationDuration: AnimationDuration;\n  animationEasing: AnimationTiming;\n\n  needClip: boolean;\n}\n\n/**\n * External props, intended for end users to fill in\n */\ninterface ScatterProps {\n  data?: any[];\n  xAxisId?: AxisId;\n  yAxisId?: string | number;\n  zAxisId?: string | number;\n\n  dataKey?: DataKey<any>;\n\n  line?: ReactElement<SVGElement> | ((props: any) => ReactElement<SVGElement>) | CurveProps | boolean;\n  lineType?: 'fitting' | 'joint';\n  lineJointType?: CurveType;\n  legendType?: LegendType;\n  tooltipType?: TooltipType;\n  className?: string;\n  name?: string;\n\n  activeShape?: ScatterCustomizedShape;\n  shape?: ScatterCustomizedShape;\n  hide?: boolean;\n  label?: ImplicitLabelListType<any>;\n\n  isAnimationActive?: boolean;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n}\n\n/**\n * Because of naming conflict, we are forced to ignore certain (valid) SVG attributes.\n */\ntype BaseScatterSvgProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'points' | 'ref'>;\n\ntype InternalProps = BaseScatterSvgProps & ScatterInternalProps;\n\nexport type Props = BaseScatterSvgProps & ScatterProps;\n\nconst computeLegendPayloadFromScatterProps = (props: Props): ReadonlyArray<LegendPayload> => {\n  const { dataKey, name, fill, legendType, hide } = props;\n  return [\n    {\n      inactive: hide,\n      dataKey,\n      type: legendType,\n      color: fill,\n      value: getTooltipNameProp(name, dataKey),\n      payload: props,\n    },\n  ];\n};\n\ntype ScatterSymbolsProps = {\n  points: ReadonlyArray<ScatterPointItem>;\n  showLabels: boolean;\n  allOtherScatterProps: InternalProps;\n};\n\nfunction ScatterLine({ points, props }: { points: ReadonlyArray<ScatterPointItem>; props: InternalProps }) {\n  const { line, lineType, lineJointType } = props;\n\n  if (!line) {\n    return null;\n  }\n\n  const scatterProps = svgPropertiesNoEvents(props);\n  const customLineProps = filterProps(line, false);\n  let linePoints, lineItem;\n\n  if (lineType === 'joint') {\n    linePoints = points.map(entry => ({ x: entry.cx, y: entry.cy }));\n  } else if (lineType === 'fitting') {\n    const { xmin, xmax, a, b } = getLinearRegression(points);\n    const linearExp = (x: number) => a * x + b;\n    linePoints = [\n      { x: xmin, y: linearExp(xmin) },\n      { x: xmax, y: linearExp(xmax) },\n    ];\n  }\n  const lineProps = {\n    ...scatterProps,\n    fill: 'none',\n    stroke: scatterProps && scatterProps.fill,\n    ...customLineProps,\n    points: linePoints,\n  };\n\n  if (React.isValidElement(line)) {\n    lineItem = React.cloneElement(line as any, lineProps);\n  } else if (typeof line === 'function') {\n    lineItem = line(lineProps);\n  } else {\n    lineItem = <Curve {...lineProps} type={lineJointType} />;\n  }\n\n  return (\n    <Layer className=\"recharts-scatter-line\" key=\"recharts-scatter-line\">\n      {lineItem}\n    </Layer>\n  );\n}\n\nfunction ScatterSymbols(props: ScatterSymbolsProps) {\n  const { points, showLabels, allOtherScatterProps } = props;\n  const { shape, activeShape, dataKey } = allOtherScatterProps;\n\n  const activeIndex = useAppSelector(selectActiveTooltipIndex);\n  const {\n    onMouseEnter: onMouseEnterFromProps,\n    onClick: onItemClickFromProps,\n    onMouseLeave: onMouseLeaveFromProps,\n    ...restOfAllOtherProps\n  } = allOtherScatterProps;\n\n  const onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherScatterProps.dataKey);\n  const onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);\n  const onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherScatterProps.dataKey);\n  if (points == null) {\n    return null;\n  }\n\n  const { id, ...allOtherPropsWithoutId } = allOtherScatterProps;\n  const baseProps = svgPropertiesNoEvents(allOtherPropsWithoutId);\n\n  return (\n    <>\n      <ScatterLine points={points} props={allOtherPropsWithoutId} />\n      {points.map((entry, i) => {\n        const isActive = activeShape && activeIndex === String(i);\n        const option = isActive ? activeShape : shape;\n        const symbolProps = {\n          key: `symbol-${i}`,\n          ...baseProps,\n          ...entry,\n          [DATA_ITEM_INDEX_ATTRIBUTE_NAME]: i,\n          [DATA_ITEM_DATAKEY_ATTRIBUTE_NAME]: String(dataKey),\n        };\n\n        return (\n          <Layer\n            className=\"recharts-scatter-symbol\"\n            {...adaptEventsOfChild(restOfAllOtherProps, entry, i)}\n            // @ts-expect-error the types need a bit of attention\n            onMouseEnter={onMouseEnterFromContext(entry, i)}\n            // @ts-expect-error the types need a bit of attention\n            onMouseLeave={onMouseLeaveFromContext(entry, i)}\n            // @ts-expect-error the types need a bit of attention\n            onClick={onClickFromContext(entry, i)}\n            // eslint-disable-next-line react/no-array-index-key\n            key={`symbol-${entry?.cx}-${entry?.cy}-${entry?.size}-${i}`}\n          >\n            {/* @ts-expect-error recharts cx, cy is not compatible with SVG cx, cy */}\n            <ScatterSymbol option={option} isActive={isActive} {...symbolProps} />\n          </Layer>\n        );\n      })}\n      {showLabels && LabelList.renderCallByParent(allOtherPropsWithoutId, points)}\n    </>\n  );\n}\n\nfunction SymbolsWithAnimation({\n  previousPointsRef,\n  props,\n}: {\n  previousPointsRef: MutableRefObject<ReadonlyArray<ScatterPointItem>>;\n  props: InternalProps;\n}) {\n  const { points, isAnimationActive, animationBegin, animationDuration, animationEasing } = props;\n  const prevPoints = previousPointsRef.current;\n  const animationId = useAnimationId(props, 'recharts-scatter-');\n\n  const [isAnimating, setIsAnimating] = useState(false);\n\n  const handleAnimationEnd = useCallback(() => {\n    // Scatter doesn't have onAnimationEnd prop, and if we want to add it we do it here\n    // if (typeof onAnimationEnd === 'function') {\n    //   onAnimationEnd();\n    // }\n    setIsAnimating(false);\n  }, []);\n\n  const handleAnimationStart = useCallback(() => {\n    // Scatter doesn't have onAnimationStart prop, and if we want to add it we do it here\n    // if (typeof onAnimationStart === 'function') {\n    //   onAnimationStart();\n    // }\n    setIsAnimating(true);\n  }, []);\n  return (\n    <JavascriptAnimate\n      begin={animationBegin}\n      duration={animationDuration}\n      isActive={isAnimationActive}\n      easing={animationEasing}\n      onAnimationEnd={handleAnimationEnd}\n      onAnimationStart={handleAnimationStart}\n      key={animationId}\n    >\n      {(t: number) => {\n        const stepData =\n          t === 1\n            ? points\n            : points.map((entry, index) => {\n                const prev = prevPoints && prevPoints[index];\n\n                if (prev) {\n                  const interpolatorCx = interpolateNumber(prev.cx, entry.cx);\n                  const interpolatorCy = interpolateNumber(prev.cy, entry.cy);\n                  const interpolatorSize = interpolateNumber(prev.size, entry.size);\n\n                  return {\n                    ...entry,\n                    cx: interpolatorCx(t),\n                    cy: interpolatorCy(t),\n                    size: interpolatorSize(t),\n                  };\n                }\n\n                const interpolator = interpolateNumber(0, entry.size);\n\n                return { ...entry, size: interpolator(t) };\n              });\n\n        if (t > 0) {\n          // eslint-disable-next-line no-param-reassign\n          previousPointsRef.current = stepData;\n        }\n        return (\n          <Layer>\n            <ScatterSymbols points={stepData} allOtherScatterProps={props} showLabels={!isAnimating} />\n          </Layer>\n        );\n      }}\n    </JavascriptAnimate>\n  );\n}\n\nfunction RenderSymbols(props: InternalProps) {\n  const { points, isAnimationActive } = props;\n  const previousPointsRef = useRef<ReadonlyArray<ScatterPointItem> | null>(null);\n\n  const prevPoints = previousPointsRef.current;\n\n  if (isAnimationActive && points && points.length && (!prevPoints || prevPoints !== points)) {\n    return <SymbolsWithAnimation props={props} previousPointsRef={previousPointsRef} />;\n  }\n\n  return <ScatterSymbols points={points} allOtherScatterProps={props} showLabels />;\n}\n\ntype InputRequiredToComputeTooltipEntrySettings = {\n  dataKey?: DataKey<any> | undefined;\n  points?: ReadonlyArray<ScatterPointItem>;\n  stroke?: string;\n  strokeWidth?: number | string;\n  fill?: string;\n  name?: string;\n  hide?: boolean;\n  tooltipType?: TooltipType;\n};\n\nfunction getTooltipEntrySettings(props: InputRequiredToComputeTooltipEntrySettings): TooltipPayloadConfiguration {\n  const { dataKey, points, stroke, strokeWidth, fill, name, hide, tooltipType } = props;\n  return {\n    dataDefinedOnItem: points?.map((p: ScatterPointItem) => p.tooltipPayload),\n    positions: points?.map((p: ScatterPointItem) => p.tooltipPosition),\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      nameKey: undefined,\n      dataKey,\n      name: getTooltipNameProp(name, dataKey),\n      hide,\n      type: tooltipType,\n      color: fill,\n      unit: '', // why doesn't Scatter support unit?\n    },\n  };\n}\n\nexport function computeScatterPoints({\n  displayedData,\n  xAxis,\n  yAxis,\n  zAxis,\n  scatterSettings,\n  xAxisTicks,\n  yAxisTicks,\n  cells,\n}: {\n  displayedData: ReadonlyArray<any>;\n  xAxis: BaseAxisWithScale;\n  yAxis: BaseAxisWithScale;\n  zAxis: ZAxisWithScale;\n  scatterSettings: ScatterSettings;\n  xAxisTicks: TickItem[];\n  yAxisTicks: TickItem[];\n  cells: ReadonlyArray<ReactElement> | undefined;\n}): ReadonlyArray<ScatterPointItem> {\n  const xAxisDataKey = isNullish(xAxis.dataKey) ? scatterSettings.dataKey : xAxis.dataKey;\n  const yAxisDataKey = isNullish(yAxis.dataKey) ? scatterSettings.dataKey : yAxis.dataKey;\n  const zAxisDataKey = zAxis && zAxis.dataKey;\n  const defaultRangeZ = zAxis ? zAxis.range : ZAxis.defaultProps.range;\n  const defaultZ = defaultRangeZ && defaultRangeZ[0];\n  const xBandSize = xAxis.scale.bandwidth ? xAxis.scale.bandwidth() : 0;\n  const yBandSize = yAxis.scale.bandwidth ? yAxis.scale.bandwidth() : 0;\n  return displayedData.map((entry, index): ScatterPointItem => {\n    const x = getValueByDataKey(entry, xAxisDataKey);\n    const y = getValueByDataKey(entry, yAxisDataKey);\n    const z = (!isNullish(zAxisDataKey) && getValueByDataKey(entry, zAxisDataKey)) || '-';\n\n    const tooltipPayload: Array<TooltipPayloadEntry> = [\n      {\n        // @ts-expect-error name prop should not have dataKey in it\n        name: isNullish(xAxis.dataKey) ? scatterSettings.name : xAxis.name || xAxis.dataKey,\n        unit: xAxis.unit || '',\n        // @ts-expect-error getValueByDataKey does not validate the output type\n        value: x,\n        payload: entry,\n        dataKey: xAxisDataKey,\n        type: scatterSettings.tooltipType,\n      },\n      {\n        // @ts-expect-error name prop should not have dataKey in it\n        name: isNullish(yAxis.dataKey) ? scatterSettings.name : yAxis.name || yAxis.dataKey,\n        unit: yAxis.unit || '',\n        // @ts-expect-error getValueByDataKey does not validate the output type\n        value: y,\n        payload: entry,\n        dataKey: yAxisDataKey,\n        type: scatterSettings.tooltipType,\n      },\n    ];\n\n    if (z !== '-') {\n      tooltipPayload.push({\n        // @ts-expect-error name prop should not have dataKey in it\n        name: zAxis.name || zAxis.dataKey,\n        unit: zAxis.unit || '',\n        // @ts-expect-error getValueByDataKey does not validate the output type\n        value: z,\n        payload: entry,\n        dataKey: zAxisDataKey,\n        type: scatterSettings.tooltipType,\n      });\n    }\n\n    const cx = getCateCoordinateOfLine({\n      axis: xAxis,\n      ticks: xAxisTicks,\n      bandSize: xBandSize,\n      entry,\n      index,\n      dataKey: xAxisDataKey,\n    });\n    const cy = getCateCoordinateOfLine({\n      axis: yAxis,\n      ticks: yAxisTicks,\n      bandSize: yBandSize,\n      entry,\n      index,\n      dataKey: yAxisDataKey,\n    });\n    const size = z !== '-' ? zAxis.scale(z) : defaultZ;\n    const radius = Math.sqrt(Math.max(size, 0) / Math.PI);\n\n    return {\n      ...entry,\n      cx,\n      cy,\n      x: cx - radius,\n      y: cy - radius,\n      width: 2 * radius,\n      height: 2 * radius,\n      size,\n      node: { x, y, z },\n      tooltipPayload,\n      tooltipPosition: { x: cx, y: cy },\n      payload: entry,\n      ...(cells && cells[index] && cells[index].props),\n    };\n  });\n}\n\nconst errorBarDataPointFormatter = (\n  dataPoint: ScatterPointItem,\n  dataKey: Props['dataKey'],\n  direction: ErrorBarDirection,\n): ErrorBarDataItem => {\n  return {\n    x: dataPoint.cx,\n    y: dataPoint.cy,\n    value: direction === 'x' ? +dataPoint.node.x : +dataPoint.node.y,\n    // @ts-expect-error getValueByDataKey does not validate the output type\n    errorVal: getValueByDataKey(dataPoint, dataKey),\n  };\n};\n\nfunction ScatterWithId(props: InternalProps) {\n  const { hide, points, className, needClip, xAxisId, yAxisId, id, children } = props;\n  if (hide) {\n    return null;\n  }\n  const layerClass = clsx('recharts-scatter', className);\n  const clipPathId = id;\n\n  return (\n    <Layer className={layerClass} clipPath={needClip ? `url(#clipPath-${clipPathId})` : null} id={id}>\n      {needClip && (\n        <defs>\n          <GraphicalItemClipPath clipPathId={clipPathId} xAxisId={xAxisId} yAxisId={yAxisId} />\n        </defs>\n      )}\n      <SetErrorBarContext\n        xAxisId={xAxisId}\n        yAxisId={yAxisId}\n        data={points}\n        dataPointFormatter={errorBarDataPointFormatter}\n        errorBarOffset={0}\n      >\n        {children}\n      </SetErrorBarContext>\n      <Layer key=\"recharts-scatter-symbols\">\n        <RenderSymbols {...props} />\n      </Layer>\n    </Layer>\n  );\n}\n\nconst defaultScatterProps = {\n  xAxisId: 0,\n  yAxisId: 0,\n  zAxisId: 0,\n  legendType: 'circle',\n  lineType: 'joint',\n  lineJointType: 'linear',\n  data: [] as any[],\n  shape: 'circle',\n  hide: false,\n\n  isAnimationActive: !Global.isSsr,\n  animationBegin: 0,\n  animationDuration: 400,\n  animationEasing: 'linear',\n} as const satisfies Partial<Props>;\n\nfunction ScatterImpl(props: Props) {\n  const {\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    hide,\n    isAnimationActive,\n    legendType,\n    lineJointType,\n    lineType,\n    shape,\n    xAxisId,\n    yAxisId,\n    zAxisId,\n    ...everythingElse\n  } = resolveDefaultProps(props, defaultScatterProps);\n\n  const { needClip } = useNeedsClip(xAxisId, yAxisId);\n  const cells = useMemo(() => findAllByType(props.children, Cell), [props.children]);\n  const isPanorama = useIsPanorama();\n\n  const points = useAppSelector(state => {\n    return selectScatterPoints(state, xAxisId, yAxisId, zAxisId, props.id, cells, isPanorama);\n  });\n  if (needClip == null) {\n    return null;\n  }\n  /*\n   * Do not check if points is null here!\n   * It is important that the animation component receives `null` as points\n   * so that it can reset its internal state and start animating to new positions.\n   */\n  // if (points == null)\n  return (\n    <>\n      <SetTooltipEntrySettings fn={getTooltipEntrySettings} args={{ ...props, points }} />\n      <ScatterWithId\n        {...everythingElse}\n        xAxisId={xAxisId}\n        yAxisId={yAxisId}\n        zAxisId={zAxisId}\n        lineType={lineType}\n        lineJointType={lineJointType}\n        legendType={legendType}\n        shape={shape}\n        hide={hide}\n        isAnimationActive={isAnimationActive}\n        animationBegin={animationBegin}\n        animationDuration={animationDuration}\n        animationEasing={animationEasing}\n        points={points}\n        needClip={needClip}\n      />\n    </>\n  );\n}\n\nexport function Scatter(outsideProps: Props) {\n  const props = resolveDefaultProps(outsideProps, defaultScatterProps);\n  const isPanorama = useIsPanorama();\n  return (\n    <RegisterGraphicalItemId id={props.id} type=\"scatter\">\n      {id => (\n        <>\n          <SetLegendPayload legendPayload={computeLegendPayloadFromScatterProps(props)} />\n          <SetCartesianGraphicalItem\n            type=\"scatter\"\n            id={id}\n            data={props.data}\n            xAxisId={props.xAxisId}\n            yAxisId={props.yAxisId}\n            zAxisId={props.zAxisId}\n            dataKey={props.dataKey}\n            hide={props.hide}\n            name={props.name}\n            tooltipType={props.tooltipType}\n            isPanorama={isPanorama}\n          />\n          <ScatterImpl {...props} id={id} />\n        </>\n      )}\n    </RegisterGraphicalItemId>\n  );\n}\nScatter.displayName = 'Scatter';\n","/**\n * @fileOverview X Axis\n */\nimport * as React from 'react';\nimport { Component, ReactNode, useEffect, useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { CartesianAxis } from './CartesianAxis';\nimport { AxisInterval, AxisTick, BaseAxisProps, PresentationAttributesAdaptChildEvent } from '../util/types';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { addXAxis, removeXAxis, XAxisOrientation, XAxisPadding, XAxisSettings } from '../state/cartesianAxisSlice';\nimport {\n  implicitXAxis,\n  selectAxisScale,\n  selectTicksOfAxis,\n  selectXAxisPosition,\n  selectXAxisSettings,\n  selectXAxisSize,\n} from '../state/selectors/axisSelectors';\nimport { selectAxisViewBox } from '../state/selectors/selectChartOffsetInternal';\nimport { useIsPanorama } from '../context/PanoramaContext';\n\ninterface XAxisProps extends BaseAxisProps {\n  /** The unique id of x-axis */\n  xAxisId?: string | number;\n  /** The height of axis, which need to be set by user */\n  height?: number;\n  mirror?: boolean;\n  orientation?: XAxisOrientation;\n  /**\n   * Ticks can be any type when the axis is the type of category\n   * Ticks must be numbers when the axis is the type of number\n   */\n  ticks?: ReadonlyArray<AxisTick>;\n  padding?: XAxisPadding;\n  minTickGap?: number;\n  interval?: AxisInterval;\n  reversed?: boolean;\n  /** the rotate angle of tick */\n  angle?: number;\n  tickMargin?: number;\n}\n\nexport type Props = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'scale' | 'ref'> & XAxisProps;\n\ntype SetXAxisSettingsProps = XAxisSettings & { children: ReactNode };\n\nfunction SetXAxisSettings(props: SetXAxisSettingsProps): ReactNode {\n  const dispatch = useAppDispatch();\n  const settings = useMemo(() => {\n    const { children, ...rest } = props;\n    return rest;\n  }, [props]);\n  const synchronizedSettings = useAppSelector(state => selectXAxisSettings(state, settings.id));\n  const settingsAreSynchronized = settings === synchronizedSettings;\n\n  useEffect(() => {\n    dispatch(addXAxis(settings));\n    return () => {\n      dispatch(removeXAxis(settings));\n    };\n  }, [settings, dispatch]);\n\n  if (settingsAreSynchronized) {\n    return props.children;\n  }\n  return null;\n}\n\nconst XAxisImpl = (props: Props) => {\n  const { xAxisId, className } = props;\n  const viewBox = useAppSelector(selectAxisViewBox);\n  const isPanorama = useIsPanorama();\n  const axisType = 'xAxis';\n  const scale = useAppSelector(state => selectAxisScale(state, axisType, xAxisId, isPanorama));\n  const cartesianTickItems = useAppSelector(state => selectTicksOfAxis(state, axisType, xAxisId, isPanorama));\n  const axisSize = useAppSelector(state => selectXAxisSize(state, xAxisId));\n  const position = useAppSelector(state => selectXAxisPosition(state, xAxisId));\n\n  if (axisSize == null || position == null) {\n    return null;\n  }\n\n  const { dangerouslySetInnerHTML, ticks, ...allOtherProps } = props;\n\n  return (\n    <CartesianAxis\n      {...allOtherProps}\n      scale={scale}\n      x={position.x}\n      y={position.y}\n      width={axisSize.width}\n      height={axisSize.height}\n      className={clsx(`recharts-${axisType} ${axisType}`, className)}\n      viewBox={viewBox}\n      ticks={cartesianTickItems}\n    />\n  );\n};\n\nconst XAxisSettingsDispatcher = (props: Props) => {\n  return (\n    <SetXAxisSettings\n      interval={props.interval ?? 'preserveEnd'}\n      id={props.xAxisId}\n      scale={props.scale}\n      type={props.type}\n      padding={props.padding}\n      allowDataOverflow={props.allowDataOverflow}\n      domain={props.domain}\n      dataKey={props.dataKey}\n      allowDuplicatedCategory={props.allowDuplicatedCategory}\n      allowDecimals={props.allowDecimals}\n      tickCount={props.tickCount}\n      includeHidden={props.includeHidden ?? false}\n      reversed={props.reversed}\n      ticks={props.ticks}\n      height={props.height}\n      orientation={props.orientation}\n      mirror={props.mirror}\n      hide={props.hide}\n      unit={props.unit}\n      name={props.name}\n      angle={props.angle ?? 0}\n      minTickGap={props.minTickGap ?? 5}\n      tick={props.tick ?? true}\n      tickFormatter={props.tickFormatter}\n    >\n      <XAxisImpl {...props} />\n    </SetXAxisSettings>\n  );\n};\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport class XAxis extends Component<Props> {\n  static displayName = 'XAxis';\n\n  static defaultProps = {\n    allowDataOverflow: implicitXAxis.allowDataOverflow,\n    allowDecimals: implicitXAxis.allowDecimals,\n    allowDuplicatedCategory: implicitXAxis.allowDuplicatedCategory,\n    height: implicitXAxis.height,\n    hide: false,\n    mirror: implicitXAxis.mirror,\n    orientation: implicitXAxis.orientation,\n    padding: implicitXAxis.padding,\n    reversed: implicitXAxis.reversed,\n    scale: implicitXAxis.scale,\n    tickCount: implicitXAxis.tickCount,\n    type: implicitXAxis.type,\n    xAxisId: 0,\n  };\n\n  render() {\n    return <XAxisSettingsDispatcher {...this.props} />;\n  }\n}\n","type IGetBoundingClient = Pick<Element, 'getBoundingClientRect'>;\n\n/**\n * Calculates the width of the Y-axis based on the tick labels and the axis label.\n * @param {Object} params - The parameters object.\n * @param {React.RefObject<any>} params.cartesianAxisRef - The ref to the CartesianAxis component.\n * @param {React.RefObject<Element>} params.labelRef - The ref to the label element.\n * @param {number} [params.labelGapWithTick=5] - The gap between the label and the tick.\n * @returns {number} The calculated width of the Y-axis.\n */\nexport const getCalculatedYAxisWidth = ({\n  ticks,\n  label,\n  labelGapWithTick = 5, // Default gap between label and tick\n  tickSize = 0,\n  tickMargin = 0,\n}: {\n  ticks: ReadonlyArray<IGetBoundingClient> | undefined;\n  label: IGetBoundingClient | undefined;\n  labelGapWithTick: number | undefined;\n  tickSize: number | undefined;\n  tickMargin: number | undefined;\n}): number => {\n  // find the max width of the tick labels\n  let maxTickWidth = 0;\n  if (ticks) {\n    ticks.forEach((tickNode: Element) => {\n      if (tickNode) {\n        const bbox = tickNode.getBoundingClientRect();\n\n        if (bbox.width > maxTickWidth) {\n          maxTickWidth = bbox.width;\n        }\n      }\n    });\n\n    // calculate width of the axis label\n    const labelWidth = label ? label.getBoundingClientRect().width : 0;\n\n    const tickWidth = tickSize + tickMargin;\n\n    // calculate the updated width of the y-axis\n    const updatedYAxisWidth = maxTickWidth + tickWidth + labelWidth + (label ? labelGapWithTick : 0);\n\n    return Math.round(updatedYAxisWidth);\n  }\n\n  return 0;\n};\n","import * as React from 'react';\nimport { Component, FunctionComponent, useEffect, useRef, useLayoutEffect, isValidElement } from 'react';\nimport { clsx } from 'clsx';\nimport { AxisInterval, AxisTick, BaseAxisProps, PresentationAttributesAdaptChildEvent } from '../util/types';\nimport { CartesianAxis } from './CartesianAxis';\nimport {\n  addYAxis,\n  removeYAxis,\n  YAxisOrientation,\n  YAxisPadding,\n  YAxisSettings,\n  updateYAxisWidth,\n  YAxisWidth,\n} from '../state/cartesianAxisSlice';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport {\n  implicitYAxis,\n  selectAxisScale,\n  selectTicksOfAxis,\n  selectYAxisPosition,\n  selectYAxisSize,\n} from '../state/selectors/axisSelectors';\nimport { selectAxisViewBox } from '../state/selectors/selectChartOffsetInternal';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { getCalculatedYAxisWidth } from '../util/YAxisUtils';\nimport { isLabelContentAFunction } from '../component/Label';\n\ninterface YAxisProps extends BaseAxisProps {\n  /** The unique id of y-axis */\n  yAxisId?: string | number;\n  /**\n   * Ticks can be any type when the axis is the type of category\n   * Ticks must be numbers when the axis is the type of number\n   */\n  ticks?: ReadonlyArray<AxisTick>;\n  /**\n   * The width of axis, which need to be set by user.\n   * When set to 'auto', the width will be calculated dynamically based on tick labels and axis labels.\n   */\n  width?: YAxisWidth;\n  mirror?: boolean;\n  orientation?: YAxisOrientation;\n  padding?: YAxisPadding;\n  minTickGap?: number;\n  interval?: AxisInterval;\n  reversed?: boolean;\n  tickMargin?: number;\n  /** the rotate angle of tick */\n  angle?: number;\n}\n\nexport type Props = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement>, 'scale' | 'ref'> & YAxisProps;\n\nfunction SetYAxisSettings(settings: YAxisSettings): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(addYAxis(settings));\n    return () => {\n      dispatch(removeYAxis(settings));\n    };\n  }, [settings, dispatch]);\n  return null;\n}\n\nconst YAxisImpl: FunctionComponent<Props> = (props: Props) => {\n  const { yAxisId, className, width, label } = props;\n\n  const cartesianAxisRef = useRef(null);\n  const labelRef = useRef(null);\n\n  const viewBox = useAppSelector(selectAxisViewBox);\n  const isPanorama = useIsPanorama();\n  const dispatch = useAppDispatch();\n  const axisType = 'yAxis';\n  const scale = useAppSelector(state => selectAxisScale(state, axisType, yAxisId, isPanorama));\n  const axisSize = useAppSelector(state => selectYAxisSize(state, yAxisId));\n  const position = useAppSelector(state => selectYAxisPosition(state, yAxisId));\n  const cartesianTickItems = useAppSelector(state => selectTicksOfAxis(state, axisType, yAxisId, isPanorama));\n\n  useLayoutEffect(() => {\n    // No dynamic width calculation is done when width !== 'auto'\n    // or when a function/react element is used for label\n    if (width !== 'auto' || !axisSize || isLabelContentAFunction(label) || isValidElement(label)) return;\n\n    const axisComponent = cartesianAxisRef.current;\n    const tickNodes = axisComponent?.tickRefs?.current;\n\n    const { tickSize, tickMargin } = axisComponent.props;\n\n    // get calculated width based on the label width, ticks etc\n    const updatedYAxisWidth = getCalculatedYAxisWidth({\n      ticks: tickNodes,\n      label: labelRef.current,\n      labelGapWithTick: 5,\n      tickSize,\n      tickMargin,\n    });\n\n    // if the width has changed, dispatch an action to update the width\n    if (Math.round(axisSize.width) !== Math.round(updatedYAxisWidth))\n      dispatch(updateYAxisWidth({ id: yAxisId, width: updatedYAxisWidth }));\n  }, [\n    cartesianAxisRef,\n    cartesianAxisRef?.current?.tickRefs?.current, // required to do re-calculation when using brush\n    axisSize?.width,\n    axisSize,\n    dispatch,\n    label,\n    yAxisId,\n    width,\n  ]);\n\n  if (axisSize == null || position == null) {\n    return null;\n  }\n\n  const { dangerouslySetInnerHTML, ticks, ...allOtherProps } = props;\n\n  return (\n    <CartesianAxis\n      {...allOtherProps}\n      ref={cartesianAxisRef}\n      labelRef={labelRef}\n      scale={scale}\n      x={position.x}\n      y={position.y}\n      width={axisSize.width}\n      height={axisSize.height}\n      className={clsx(`recharts-${axisType} ${axisType}`, className)}\n      viewBox={viewBox}\n      ticks={cartesianTickItems}\n    />\n  );\n};\n\nconst YAxisSettingsDispatcher = (props: Props) => {\n  return (\n    <>\n      <SetYAxisSettings\n        interval={props.interval ?? 'preserveEnd'}\n        id={props.yAxisId}\n        scale={props.scale}\n        type={props.type}\n        domain={props.domain}\n        allowDataOverflow={props.allowDataOverflow}\n        dataKey={props.dataKey}\n        allowDuplicatedCategory={props.allowDuplicatedCategory}\n        allowDecimals={props.allowDecimals}\n        tickCount={props.tickCount}\n        padding={props.padding}\n        includeHidden={props.includeHidden ?? false}\n        reversed={props.reversed}\n        ticks={props.ticks}\n        width={props.width}\n        orientation={props.orientation}\n        mirror={props.mirror}\n        hide={props.hide}\n        unit={props.unit}\n        name={props.name}\n        angle={props.angle ?? 0}\n        minTickGap={props.minTickGap ?? 5}\n        tick={props.tick ?? true}\n        tickFormatter={props.tickFormatter}\n      />\n      <YAxisImpl {...props} />\n    </>\n  );\n};\n\nexport const YAxisDefaultProps: Partial<Props> = {\n  allowDataOverflow: implicitYAxis.allowDataOverflow,\n  allowDecimals: implicitYAxis.allowDecimals,\n  allowDuplicatedCategory: implicitYAxis.allowDuplicatedCategory,\n  hide: false,\n  mirror: implicitYAxis.mirror,\n  orientation: implicitYAxis.orientation,\n  padding: implicitYAxis.padding,\n  reversed: implicitYAxis.reversed,\n  scale: implicitYAxis.scale,\n  tickCount: implicitYAxis.tickCount,\n  type: implicitYAxis.type,\n  width: implicitYAxis.width,\n  yAxisId: 0,\n};\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport class YAxis extends Component<Props> {\n  static displayName = 'YAxis';\n\n  static defaultProps = YAxisDefaultProps;\n\n  render() {\n    return <YAxisSettingsDispatcher {...this.props} />;\n  }\n}\n","import * as React from 'react';\nimport { CSSProperties, useEffect, useState } from 'react';\nimport { noop } from 'es-toolkit';\nimport { AnimationManager, ReactSmoothStyle } from './AnimationManager';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { useAnimationManager } from './useAnimationManager';\nimport { getTransitionVal } from './util';\n\ntype CSSTransitionAnimateProps<T extends ReactSmoothStyle> = {\n  animationManager?: AnimationManager;\n  duration?: number;\n  begin?: number;\n  easing?: string;\n  isActive?: boolean;\n  canBegin?: boolean;\n  from: T;\n  to: T;\n  attributeName: string;\n  onAnimationStart?: () => void;\n  onAnimationEnd?: () => void;\n  children: (style: CSSProperties) => React.ReactNode;\n};\n\nconst defaultProps = {\n  begin: 0,\n  duration: 1000,\n  easing: 'ease',\n  isActive: true,\n  canBegin: true,\n  onAnimationEnd: () => {},\n  onAnimationStart: () => {},\n} as const satisfies Partial<CSSTransitionAnimateProps<string>>;\n\nexport function CSSTransitionAnimate<T extends ReactSmoothStyle>(outsideProps: CSSTransitionAnimateProps<T>) {\n  const props = resolveDefaultProps(outsideProps, defaultProps);\n  const {\n    from,\n    to,\n    attributeName,\n    isActive,\n    canBegin,\n    duration,\n    easing,\n    begin,\n    onAnimationEnd,\n    onAnimationStart,\n    children,\n  } = props;\n\n  const animationManager = useAnimationManager(attributeName, props.animationManager);\n\n  const [style, setStyle] = useState<T>(isActive ? from : to);\n\n  useEffect(() => {\n    if (!isActive) {\n      setStyle(to);\n    }\n  }, [isActive, to]);\n\n  useEffect(() => {\n    if (!isActive || !canBegin) {\n      return noop;\n    }\n\n    const unsubscribe = animationManager.subscribe(setStyle);\n\n    animationManager.start([onAnimationStart, begin, to, duration, onAnimationEnd]);\n\n    return () => {\n      animationManager.stop();\n      if (unsubscribe) {\n        unsubscribe();\n      }\n      onAnimationEnd();\n    };\n  }, [isActive, canBegin, duration, easing, begin, onAnimationStart, onAnimationEnd, animationManager, to]);\n\n  if (isActive && canBegin) {\n    const transition = getTransitionVal([attributeName], duration, easing);\n    return children({\n      transition,\n      [attributeName]: style,\n    });\n  }\n  return children({\n    [attributeName]: style,\n  });\n}\n","/**\n * @fileOverview Render a group of error bar\n */\nimport * as React from 'react';\nimport { Component, SVGProps } from 'react';\nimport { Layer } from '../container/Layer';\nimport { AnimationTiming, DataKey } from '../util/types';\nimport { BarRectangleItem } from './Bar';\nimport { LinePointItem } from './Line';\nimport { ScatterPointItem } from './Scatter';\nimport { ReportErrorBarSettings, useErrorBarContext } from '../context/ErrorBarContext';\nimport { useXAxis, useYAxis } from '../hooks';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { useChartLayout } from '../context/chartLayoutContext';\nimport { CSSTransitionAnimate } from '../animation/CSSTransitionAnimate';\n\nexport interface ErrorBarDataItem {\n  x: number | null;\n  y: number | null;\n  value: number;\n  errorVal?: number[] | number;\n}\n\n/**\n * So usually the direction is decided by the chart layout.\n * Horizontal layout means error bars are vertical means direction=y\n * Vertical layout means error bars are horizontal means direction=x\n *\n * Except! In Scatter chart, error bars can go both ways.\n *\n * So this property is only ever used in Scatter chart, and ignored elsewhere.\n */\nexport type ErrorBarDirection = 'x' | 'y';\n\nexport type ErrorBarDataPointFormatter = (\n  entry: BarRectangleItem | LinePointItem | ScatterPointItem,\n  dataKey: DataKey<any>,\n  direction: ErrorBarDirection,\n) => ErrorBarDataItem;\n\n/**\n * External ErrorBar props, visible for users of the library\n */\ninterface ErrorBarProps {\n  dataKey: DataKey<any>;\n  /** the width of the error bar ends */\n  width?: number;\n  /**\n   * Only used for ScatterChart with error bars in two directions.\n   * Only accepts a value of \"x\" or \"y\" and makes the error bars lie in that direction.\n   */\n  direction?: ErrorBarDirection;\n  isAnimationActive?: boolean;\n  animationBegin?: number;\n  animationDuration?: number;\n  animationEasing?: AnimationTiming;\n}\n\nexport type Props = SVGProps<SVGLineElement> & ErrorBarProps;\n\n/**\n * Props after defaults, and required props have been applied.\n */\ntype ErrorBarInternalProps = SVGProps<SVGLineElement> & {\n  dataKey: DataKey<any>;\n  /** the width of the error bar ends */\n  width: number;\n  /**\n   * Only used for ScatterChart with error bars in two directions.\n   * Only accepts a value of \"x\" or \"y\" and makes the error bars lie in that direction.\n   */\n  direction: ErrorBarDirection;\n  isAnimationActive: boolean;\n  animationBegin: number;\n  animationDuration: number;\n  animationEasing: AnimationTiming;\n};\n\nfunction ErrorBarImpl(props: ErrorBarInternalProps) {\n  const {\n    direction,\n    width,\n    dataKey,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    ...others\n  } = props;\n  const svgProps = svgPropertiesNoEvents(others);\n\n  const { data, dataPointFormatter, xAxisId, yAxisId, errorBarOffset: offset } = useErrorBarContext();\n\n  const xAxis = useXAxis(xAxisId);\n  const yAxis = useYAxis(yAxisId);\n\n  if (xAxis?.scale == null || yAxis?.scale == null || data == null) {\n    return null;\n  }\n\n  // ErrorBar requires type number XAxis, why?\n  if (direction === 'x' && xAxis.type !== 'number') {\n    return null;\n  }\n\n  const errorBars = data.map((entry: any) => {\n    const { x, y, value, errorVal } = dataPointFormatter(entry, dataKey, direction);\n\n    if (!errorVal || x == null || y == null) {\n      return null;\n    }\n\n    const lineCoordinates = [];\n    let lowBound, highBound;\n\n    if (Array.isArray(errorVal)) {\n      [lowBound, highBound] = errorVal;\n    } else {\n      lowBound = highBound = errorVal;\n    }\n\n    if (direction === 'x') {\n      // error bar for horizontal charts, the y is fixed, x is a range value\n      const { scale } = xAxis;\n\n      const yMid = y + offset;\n      const yMin = yMid + width;\n      const yMax = yMid - width;\n\n      const xMin = scale(value - lowBound);\n      const xMax = scale(value + highBound);\n\n      // the right line of |--|\n      lineCoordinates.push({ x1: xMax, y1: yMin, x2: xMax, y2: yMax });\n      // the middle line of |--|\n      lineCoordinates.push({ x1: xMin, y1: yMid, x2: xMax, y2: yMid });\n      // the left line of |--|\n      lineCoordinates.push({ x1: xMin, y1: yMin, x2: xMin, y2: yMax });\n    } else if (direction === 'y') {\n      // error bar for horizontal charts, the x is fixed, y is a range value\n      const { scale } = yAxis;\n\n      const xMid = x + offset;\n      const xMin = xMid - width;\n      const xMax = xMid + width;\n\n      const yMin = scale(value - lowBound);\n      const yMax = scale(value + highBound);\n\n      // the top line\n      lineCoordinates.push({ x1: xMin, y1: yMax, x2: xMax, y2: yMax });\n      // the middle line\n      lineCoordinates.push({ x1: xMid, y1: yMin, x2: xMid, y2: yMax });\n      // the bottom line\n      lineCoordinates.push({ x1: xMin, y1: yMin, x2: xMax, y2: yMin });\n    }\n\n    const scaleDirection: string = direction === 'x' ? 'scaleX' : 'scaleY';\n\n    const transformOrigin = `${x + offset}px ${y + offset}px`;\n\n    return (\n      <Layer\n        className=\"recharts-errorBar\"\n        key={`bar-${lineCoordinates.map(c => `${c.x1}-${c.x2}-${c.y1}-${c.y2}`)}`}\n        {...svgProps}\n      >\n        {lineCoordinates.map(coordinates => {\n          const lineStyle = isAnimationActive ? { transformOrigin } : undefined;\n          return (\n            <CSSTransitionAnimate\n              from={`${scaleDirection}(0)`}\n              to={`${scaleDirection}(1)`}\n              attributeName=\"transform\"\n              begin={animationBegin}\n              easing={animationEasing}\n              isActive={isAnimationActive}\n              duration={animationDuration}\n              key={`line-${coordinates.x1}-${coordinates.x2}-${coordinates.y1}-${coordinates.y2}`}\n            >\n              {style => <line {...coordinates} style={{ ...lineStyle, ...style }} />}\n            </CSSTransitionAnimate>\n          );\n        })}\n      </Layer>\n    );\n  });\n\n  return <Layer className=\"recharts-errorBars\">{errorBars}</Layer>;\n}\n\nfunction useErrorBarDirection(directionFromProps: ErrorBarDirection | undefined): ErrorBarDirection {\n  const layout = useChartLayout();\n  if (directionFromProps != null) {\n    return directionFromProps;\n  }\n  if (layout != null) {\n    return layout === 'horizontal' ? 'y' : 'x';\n  }\n  return 'x';\n}\n\nconst errorBarDefaultProps = {\n  stroke: 'black',\n  strokeWidth: 1.5,\n  width: 5,\n  offset: 0,\n  isAnimationActive: true,\n  animationBegin: 0,\n  animationDuration: 400,\n  animationEasing: 'ease-in-out',\n} as const satisfies Partial<Props>;\n\nfunction ErrorBarInternal(props: Props) {\n  const realDirection: ErrorBarDirection = useErrorBarDirection(props.direction);\n\n  const { width, isAnimationActive, animationBegin, animationDuration, animationEasing } = resolveDefaultProps(\n    props,\n    errorBarDefaultProps,\n  );\n\n  return (\n    <>\n      <ReportErrorBarSettings dataKey={props.dataKey} direction={realDirection} />\n      <ErrorBarImpl\n        {...props}\n        direction={realDirection}\n        width={width}\n        isAnimationActive={isAnimationActive}\n        animationBegin={animationBegin}\n        animationDuration={animationDuration}\n        animationEasing={animationEasing}\n      />\n    </>\n  );\n}\n\n// eslint-disable-next-line react/prefer-stateless-function\nexport class ErrorBar extends Component<Props> {\n  static defaultProps = errorBarDefaultProps;\n\n  static displayName = 'ErrorBar';\n\n  render() {\n    return <ErrorBarInternal {...this.props} />;\n  }\n}\n","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nlet batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip dealing with ESM bindings\n\nexport const getBatch = () => batch;","import * as React from 'react';\nconst ContextKey = Symbol.for(`react-redux-context`);\nconst gT = typeof globalThis !== \"undefined\" ? globalThis :\n/* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */\n{};\n\nfunction getContext() {\n  var _gT$ContextKey;\n\n  if (!React.createContext) return {};\n  const contextMap = (_gT$ContextKey = gT[ContextKey]) != null ? _gT$ContextKey : gT[ContextKey] = new Map();\n  let realContext = contextMap.get(React.createContext);\n\n  if (!realContext) {\n    realContext = React.createContext(null);\n\n    if (process.env.NODE_ENV !== 'production') {\n      realContext.displayName = 'ReactRedux';\n    }\n\n    contextMap.set(React.createContext, realContext);\n  }\n\n  return realContext;\n}\n\nexport const ReactReduxContext = /*#__PURE__*/getContext();\nexport default ReactReduxContext;","import { useCallback, useDebugValue, useRef } from 'react';\nimport { createReduxContextHook, useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { ReactReduxContext } from '../components/Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStoreWithSelector = notInitialized;\nexport const initializeUseSelector = fn => {\n  useSyncExternalStoreWithSelector = fn;\n};\n\nconst refEquality = (a, b) => a === b;\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context = ReactReduxContext) {\n  const useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : createReduxContextHook(context);\n  return function useSelector(selector, equalityFnOrOptions = {}) {\n    const {\n      equalityFn = refEquality,\n      stabilityCheck = undefined,\n      noopCheck = undefined\n    } = typeof equalityFnOrOptions === 'function' ? {\n      equalityFn: equalityFnOrOptions\n    } : equalityFnOrOptions;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`);\n      }\n\n      if (typeof selector !== 'function') {\n        throw new Error(`You must pass a function as a selector to useSelector`);\n      }\n\n      if (typeof equalityFn !== 'function') {\n        throw new Error(`You must pass a function as an equality function to useSelector`);\n      }\n    }\n\n    const {\n      store,\n      subscription,\n      getServerState,\n      stabilityCheck: globalStabilityCheck,\n      noopCheck: globalNoopCheck\n    } = useReduxContext();\n    const firstRun = useRef(true);\n    const wrappedSelector = useCallback({\n      [selector.name](state) {\n        const selected = selector(state);\n\n        if (process.env.NODE_ENV !== 'production') {\n          const finalStabilityCheck = typeof stabilityCheck === 'undefined' ? globalStabilityCheck : stabilityCheck;\n\n          if (finalStabilityCheck === 'always' || finalStabilityCheck === 'once' && firstRun.current) {\n            const toCompare = selector(state);\n\n            if (!equalityFn(selected, toCompare)) {\n              let stack = undefined;\n\n              try {\n                throw new Error();\n              } catch (e) {\n                ;\n                ({\n                  stack\n                } = e);\n              }\n\n              console.warn('Selector ' + (selector.name || 'unknown') + ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' + '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization', {\n                state,\n                selected,\n                selected2: toCompare,\n                stack\n              });\n            }\n          }\n\n          const finalNoopCheck = typeof noopCheck === 'undefined' ? globalNoopCheck : noopCheck;\n\n          if (finalNoopCheck === 'always' || finalNoopCheck === 'once' && firstRun.current) {\n            // @ts-ignore\n            if (selected === state) {\n              let stack = undefined;\n\n              try {\n                throw new Error();\n              } catch (e) {\n                ;\n                ({\n                  stack\n                } = e);\n              }\n\n              console.warn('Selector ' + (selector.name || 'unknown') + ' returned the root state when called. This can lead to unnecessary rerenders.' + '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.', {\n                stack\n              });\n            }\n          }\n\n          if (firstRun.current) firstRun.current = false;\n        }\n\n        return selected;\n      }\n\n    }[selector.name], [selector, globalStabilityCheck, stabilityCheck]);\n    const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, wrappedSelector, equalityFn);\n    useDebugValue(selectedState);\n    return selectedState;\n  };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n *   const counter = useSelector(state => state.counter)\r\n *   return <div>{counter}</div>\r\n * }\r\n */\n\nexport const useSelector = /*#__PURE__*/createSelectorHook();","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n  const batch = getBatch();\n  let first = null;\n  let last = null;\n  return {\n    clear() {\n      first = null;\n      last = null;\n    },\n\n    notify() {\n      batch(() => {\n        let listener = first;\n\n        while (listener) {\n          listener.callback();\n          listener = listener.next;\n        }\n      });\n    },\n\n    get() {\n      let listeners = [];\n      let listener = first;\n\n      while (listener) {\n        listeners.push(listener);\n        listener = listener.next;\n      }\n\n      return listeners;\n    },\n\n    subscribe(callback) {\n      let isSubscribed = true;\n      let listener = last = {\n        callback,\n        next: null,\n        prev: last\n      };\n\n      if (listener.prev) {\n        listener.prev.next = listener;\n      } else {\n        first = listener;\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return;\n        isSubscribed = false;\n\n        if (listener.next) {\n          listener.next.prev = listener.prev;\n        } else {\n          last = listener.prev;\n        }\n\n        if (listener.prev) {\n          listener.prev.next = listener.next;\n        } else {\n          first = listener.next;\n        }\n      };\n    }\n\n  };\n}\n\nconst nullListeners = {\n  notify() {},\n\n  get: () => []\n};\nexport function createSubscription(store, parentSub) {\n  let unsubscribe;\n  let listeners = nullListeners; // Reasons to keep the subscription active\n\n  let subscriptionsAmount = 0; // Is this specific subscription subscribed (or only nested ones?)\n\n  let selfSubscribed = false;\n\n  function addNestedSub(listener) {\n    trySubscribe();\n    const cleanupListener = listeners.subscribe(listener); // cleanup nested sub\n\n    let removed = false;\n    return () => {\n      if (!removed) {\n        removed = true;\n        cleanupListener();\n        tryUnsubscribe();\n      }\n    };\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify();\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange();\n    }\n  }\n\n  function isSubscribed() {\n    return selfSubscribed;\n  }\n\n  function trySubscribe() {\n    subscriptionsAmount++;\n\n    if (!unsubscribe) {\n      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n      listeners = createListenerCollection();\n    }\n  }\n\n  function tryUnsubscribe() {\n    subscriptionsAmount--;\n\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe();\n      unsubscribe = undefined;\n      listeners.clear();\n      listeners = nullListeners;\n    }\n  }\n\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true;\n      trySubscribe();\n    }\n  }\n\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false;\n      tryUnsubscribe();\n    }\n  }\n\n  const subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners\n  };\n  return subscription;\n}","import * as React from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n// Matches logic in React's `shared/ExecutionEnvironment` file\n\nexport const canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nexport const useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"reactReduxForwardedRef\"];\n\n/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\nimport hoistStatics from 'hoist-non-react-statics';\nimport * as React from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport defaultSelectorFactory from '../connect/selectorFactory';\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps';\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps';\nimport { mergePropsFactory } from '../connect/mergeProps';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport shallowEqual from '../utils/shallowEqual';\nimport warning from '../utils/warning';\nimport { ReactReduxContext } from './Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStore = notInitialized;\nexport const initializeConnect = fn => {\n  useSyncExternalStore = fn;\n}; // Define some constant arrays just to avoid re-creating these\n\nconst EMPTY_ARRAY = [null, 0];\nconst NO_SUBSCRIPTION_ARRAY = [null, null]; // Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\n\nconst stringifyComponent = Comp => {\n  try {\n    return JSON.stringify(Comp);\n  } catch (err) {\n    return String(Comp);\n  }\n};\n\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n//   and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n  useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);\n} // Effect callback, extracted: assign the latest props values to refs for later usage\n\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, // actualChildProps: unknown,\nchildPropsFromStoreUpdate, notifyNestedSubs) {\n  // We want to capture the wrapper props and child props we used for later comparisons\n  lastWrapperProps.current = wrapperProps;\n  renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null;\n    notifyNestedSubs();\n  }\n} // Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions, and trigger re-renders.\n\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, // forceComponentUpdateDispatch: React.Dispatch<any>,\nadditionalSubscribeListener) {\n  // If we're not subscribed to the store, nothing to do here\n  if (!shouldHandleStateChanges) return () => {}; // Capture values for checking if and when this component unmounts\n\n  let didUnsubscribe = false;\n  let lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n  const checkForUpdates = () => {\n    if (didUnsubscribe || !isMounted.current) {\n      // Don't run stale listeners.\n      // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n      return;\n    } // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\n\n\n    const latestStoreState = store.getState();\n    let newChildProps, error;\n\n    try {\n      // Actually run the selector with the most recent store state and wrapper props\n      // to determine what the child props should be\n      newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n    } catch (e) {\n      error = e;\n      lastThrownError = e;\n    }\n\n    if (!error) {\n      lastThrownError = null;\n    } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs();\n      }\n    } else {\n      // Save references to the new child props.  Note that we track the \"child props from store update\"\n      // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n      // forcing another re-render, which we don't want.\n      lastChildProps.current = newChildProps;\n      childPropsFromStoreUpdate.current = newChildProps;\n      renderIsScheduled.current = true; // TODO This is hacky and not how `uSES` is meant to be used\n      // Trigger the React `useSyncExternalStore` subscriber\n\n      additionalSubscribeListener();\n    }\n  }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n  subscription.onStateChange = checkForUpdates;\n  subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n  // changed since we began.\n\n  checkForUpdates();\n\n  const unsubscribeWrapper = () => {\n    didUnsubscribe = true;\n    subscription.tryUnsubscribe();\n    subscription.onStateChange = null;\n\n    if (lastThrownError) {\n      // It's possible that we caught an error due to a bad mapState function, but the\n      // parent re-rendered without this component and we're about to unmount.\n      // This shouldn't happen as long as we do top-down subscriptions correctly, but\n      // if we ever do those wrong, this throw will surface the error in our tests.\n      // In that case, throw the error from here so it doesn't get lost.\n      throw lastThrownError;\n    }\n  };\n\n  return unsubscribeWrapper;\n} // Reducer initial state creation for our update reducer\n\n\nconst initStateUpdates = () => EMPTY_ARRAY;\n\nfunction strictEqual(a, b) {\n  return a === b;\n}\n/**\r\n * Infers the type of props that a connector will inject into a component.\r\n */\n\n\nlet hasWarnedAboutDeprecatedPureOption = false;\n/**\r\n * Connects a React component to a Redux store.\r\n *\r\n * - Without arguments, just wraps the component, without changing the behavior / props\r\n *\r\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\r\n * is to override ownProps (as stated in the docs), so what remains is everything that's\r\n * not a state or dispatch prop\r\n *\r\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\r\n * should be valid component props, because it depends on mergeProps implementation.\r\n * As such, it is the user's responsibility to extend ownProps interface from state or\r\n * dispatch props or both when applicable\r\n *\r\n * @param mapStateToProps A function that extracts values from state\r\n * @param mapDispatchToProps Setup for dispatching actions\r\n * @param mergeProps Optional callback to merge state and dispatch props together\r\n * @param options Options for configuring the connection\r\n *\r\n */\n\nfunction connect(mapStateToProps, mapDispatchToProps, mergeProps, {\n  // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\n  // @ts-ignore\n  pure,\n  areStatesEqual = strictEqual,\n  areOwnPropsEqual = shallowEqual,\n  areStatePropsEqual = shallowEqual,\n  areMergedPropsEqual = shallowEqual,\n  // use React's forwardRef to expose a ref of the wrapped component\n  forwardRef = false,\n  // the context consumer to use\n  context = ReactReduxContext\n} = {}) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\n      hasWarnedAboutDeprecatedPureOption = true;\n      warning('The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component');\n    }\n  }\n\n  const Context = context;\n  const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);\n  const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);\n  const initMergeProps = mergePropsFactory(mergeProps);\n  const shouldHandleStateChanges = Boolean(mapStateToProps);\n\n  const wrapWithConnect = WrappedComponent => {\n    if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n      throw new Error(`You must pass a component to the function returned by connect. Instead received ${stringifyComponent(WrappedComponent)}`);\n    }\n\n    const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n    const displayName = `Connect(${wrappedComponentName})`;\n    const selectorFactoryOptions = {\n      shouldHandleStateChanges,\n      displayName,\n      wrappedComponentName,\n      WrappedComponent,\n      // @ts-ignore\n      initMapStateToProps,\n      // @ts-ignore\n      initMapDispatchToProps,\n      initMergeProps,\n      areStatesEqual,\n      areStatePropsEqual,\n      areOwnPropsEqual,\n      areMergedPropsEqual\n    };\n\n    function ConnectFunction(props) {\n      const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {\n        // Distinguish between actual \"data\" props that were passed to the wrapper component,\n        // and values needed to control behavior (forwarded refs, alternate context instances).\n        // To maintain the wrapperProps object reference, memoize this destructuring.\n        const {\n          reactReduxForwardedRef\n        } = props,\n              wrapperProps = _objectWithoutPropertiesLoose(props, _excluded);\n\n        return [props.context, reactReduxForwardedRef, wrapperProps];\n      }, [props]);\n      const ContextToUse = React.useMemo(() => {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        return propsContext && propsContext.Consumer && // @ts-ignore\n        isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n      }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n      const contextValue = React.useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n\n      const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n      const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n      if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n        throw new Error(`Could not find \"store\" in the context of ` + `\"${displayName}\". Either wrap the root component in a <Provider>, ` + `or pass a custom React context provider to <Provider> and the corresponding ` + `React context consumer to ${displayName} in connect options.`);\n      } // Based on the previous check, one of these must be true\n\n\n      const store = didStoreComeFromProps ? props.store : contextValue.store;\n      const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;\n      const childPropsSelector = React.useMemo(() => {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return defaultSelectorFactory(store.dispatch, selectorFactoryOptions);\n      }, [store]);\n      const [subscription, notifyNestedSubs] = React.useMemo(() => {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n        const subscription = createSubscription(store, didStoreComeFromProps ? undefined : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n\n        const notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n        return [subscription, notifyNestedSubs];\n      }, [store, didStoreComeFromProps, contextValue]); // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n\n      const overriddenContextValue = React.useMemo(() => {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue;\n        } // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n\n\n        return _extends({}, contextValue, {\n          subscription\n        });\n      }, [didStoreComeFromProps, contextValue, subscription]); // Set up refs to coordinate values between the subscription effect and the render logic\n\n      const lastChildProps = React.useRef();\n      const lastWrapperProps = React.useRef(wrapperProps);\n      const childPropsFromStoreUpdate = React.useRef();\n      const renderIsScheduled = React.useRef(false);\n      const isProcessingDispatch = React.useRef(false);\n      const isMounted = React.useRef(false);\n      const latestSubscriptionCallbackError = React.useRef();\n      useIsomorphicLayoutEffect(() => {\n        isMounted.current = true;\n        return () => {\n          isMounted.current = false;\n        };\n      }, []);\n      const actualChildPropsSelector = React.useMemo(() => {\n        const selector = () => {\n          // Tricky logic here:\n          // - This render may have been triggered by a Redux store update that produced new child props\n          // - However, we may have gotten new wrapper props after that\n          // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n          // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n          // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n          if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n            return childPropsFromStoreUpdate.current;\n          } // TODO We're reading the store directly in render() here. Bad idea?\n          // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n          // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n          // to determine what the child props should be.\n\n\n          return childPropsSelector(store.getState(), wrapperProps);\n        };\n\n        return selector;\n      }, [store, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      const subscribeForReact = React.useMemo(() => {\n        const subscribe = reactListener => {\n          if (!subscription) {\n            return () => {};\n          }\n\n          return subscribeUpdates(shouldHandleStateChanges, store, subscription, // @ts-ignore\n          childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, reactListener);\n        };\n\n        return subscribe;\n      }, [subscription]);\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs]);\n      let actualChildProps;\n\n      try {\n        actualChildProps = useSyncExternalStore( // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n        subscribeForReact, // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n        // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n        actualChildPropsSelector, getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector);\n      } catch (err) {\n        if (latestSubscriptionCallbackError.current) {\n          ;\n          err.message += `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`;\n        }\n\n        throw err;\n      }\n\n      useIsomorphicLayoutEffect(() => {\n        latestSubscriptionCallbackError.current = undefined;\n        childPropsFromStoreUpdate.current = undefined;\n        lastChildProps.current = actualChildProps;\n      }); // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n\n      const renderedWrappedComponent = React.useMemo(() => {\n        return (\n          /*#__PURE__*/\n          // @ts-ignore\n          React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n            ref: reactReduxForwardedRef\n          }))\n        );\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n      const renderedChild = React.useMemo(() => {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n            value: overriddenContextValue\n          }, renderedWrappedComponent);\n        }\n\n        return renderedWrappedComponent;\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n      return renderedChild;\n    }\n\n    const _Connect = React.memo(ConnectFunction);\n\n    // Add a hacky cast to get the right output type\n    const Connect = _Connect;\n    Connect.WrappedComponent = WrappedComponent;\n    Connect.displayName = ConnectFunction.displayName = displayName;\n\n    if (forwardRef) {\n      const _forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n        // @ts-ignore\n        return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n          reactReduxForwardedRef: ref\n        }));\n      });\n\n      const forwarded = _forwarded;\n      forwarded.displayName = displayName;\n      forwarded.WrappedComponent = WrappedComponent;\n      return hoistStatics(forwarded, WrappedComponent);\n    }\n\n    return hoistStatics(Connect, WrappedComponent);\n  };\n\n  return wrapWithConnect;\n}\n\nexport default connect;","import * as React from 'react';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider({\n  store,\n  context,\n  children,\n  serverState,\n  stabilityCheck = 'once',\n  noopCheck = 'once'\n}) {\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store);\n    return {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : undefined,\n      stabilityCheck,\n      noopCheck\n    };\n  }, [store, serverState, stabilityCheck, noopCheck]);\n  const previousState = React.useMemo(() => store.getState(), [store]);\n  useIsomorphicLayoutEffect(() => {\n    const {\n      subscription\n    } = contextValue;\n    subscription.onStateChange = subscription.notifyNestedSubs;\n    subscription.trySubscribe();\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs();\n    }\n\n    return () => {\n      subscription.tryUnsubscribe();\n      subscription.onStateChange = undefined;\n    };\n  }, [contextValue, previousState]);\n  const Context = context || ReactReduxContext; // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype\n\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: contextValue\n  }, children);\n}\n\nexport default Provider;","// The primary entry point assumes we're working with standard ReactDOM/RN, but\n// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x).\n// Because of that, the useSyncExternalStore compat shim is needed.\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch';\nimport { initializeUseSelector } from './hooks/useSelector';\nimport { initializeConnect } from './components/connect';\ninitializeUseSelector(useSyncExternalStoreWithSelector);\ninitializeConnect(useSyncExternalStore); // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };\nexport * from './exports';","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport { ActiveTooltipProps } from '../tooltipSlice';\nimport { selectChartLayout } from '../../context/chartLayoutContext';\nimport { selectTooltipAxisRangeWithReverse, selectTooltipAxisTicks } from './tooltipSelectors';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport { combineActiveProps, selectOrderedTooltipTicks } from './selectors';\nimport { selectPolarViewBox } from './polarAxisSelectors';\nimport { ChartPointer } from '../../util/types';\nimport { selectTooltipAxisType } from './selectTooltipAxisType';\n\nconst pickChartPointer = (_state: RechartsRootState, chartPointer: ChartPointer) => chartPointer;\n\nexport const selectActivePropsFromChartPointer: (\n  state: RechartsRootState,\n  chartPointer: ChartPointer,\n) => ActiveTooltipProps | undefined = createSelector(\n  [\n    pickChartPointer,\n    selectChartLayout,\n    selectPolarViewBox,\n    selectTooltipAxisType,\n    selectTooltipAxisRangeWithReverse,\n    selectTooltipAxisTicks,\n    selectOrderedTooltipTicks,\n    selectChartOffsetInternal,\n  ],\n  combineActiveProps,\n);\n","import { ChartPointer, MousePointer } from './types';\n\n/**\n * Computes the chart coordinates from the mouse event.\n *\n * The coordinates are relative to the top-left corner of the chart,\n * where the top-left corner of the chart is (0, 0).\n * Moving right, the x-coordinate increases, and moving down, the y-coordinate increases.\n *\n * The coordinates are rounded to the nearest integer and are including a CSS transform scale.\n * So a chart that's scaled will return the same coordinates as a chart that's not scaled.\n *\n * @param event The mouse event from React event handlers\n * @return chartPointer The chart coordinates relative to the top-left corner of the chart\n */\nexport const getChartPointer = (event: MousePointer): ChartPointer => {\n  const rect = event.currentTarget.getBoundingClientRect();\n  const scaleX = rect.width / event.currentTarget.offsetWidth;\n  const scaleY = rect.height / event.currentTarget.offsetHeight;\n  return {\n    /*\n     * Here it's important to use:\n     * - event.clientX and event.clientY to get the mouse position relative to the viewport, including scroll.\n     * - pageX and pageY are not used because they are relative to the whole document, and ignore scroll.\n     * - rect.left and rect.top are used to get the position of the chart relative to the viewport.\n     * - offsetX and offsetY are not used because they are relative to the offset parent\n     *  which may or may not be the same as the clientX and clientY, depending on the position of the chart in the DOM\n     *  and surrounding element styles. CSS position: relative, absolute, fixed, will change the offset parent.\n     * - scaleX and scaleY are necessary for when the chart element is scaled using CSS `transform: scale(N)`.\n     */\n    chartX: Math.round((event.clientX - rect.left) / scaleX),\n    chartY: Math.round((event.clientY - rect.top) / scaleY),\n  };\n};\n","import { createAction, createListenerMiddleware, ListenerEffectAPI, PayloadAction } from '@reduxjs/toolkit';\nimport { AppDispatch, RechartsRootState } from './store';\nimport { mouseLeaveChart, setMouseClickAxisIndex, setMouseOverAxisIndex } from './tooltipSlice';\nimport { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';\nimport { selectTooltipEventType } from './selectors/selectTooltipEventType';\n\nimport { getChartPointer } from '../util/getChartPointer';\nimport { MousePointer } from '../util/types';\n\nexport const mouseClickAction = createAction<MousePointer>('mouseClick');\n\nexport const mouseClickMiddleware = createListenerMiddleware();\n\n// TODO: there's a bug here when you click the chart the activeIndex resets to zero\nmouseClickMiddleware.startListening({\n  actionCreator: mouseClickAction,\n  effect: (action: PayloadAction<MousePointer>, listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>) => {\n    const mousePointer = action.payload;\n    const activeProps = selectActivePropsFromChartPointer(listenerApi.getState(), getChartPointer(mousePointer));\n    if (activeProps?.activeIndex != null) {\n      listenerApi.dispatch(\n        setMouseClickAxisIndex({\n          activeIndex: activeProps.activeIndex,\n          activeDataKey: undefined,\n          activeCoordinate: activeProps.activeCoordinate,\n        }),\n      );\n    }\n  },\n});\n\nexport const mouseMoveAction = createAction<MousePointer>('mouseMove');\n\nexport const mouseMoveMiddleware = createListenerMiddleware();\n\nmouseMoveMiddleware.startListening({\n  actionCreator: mouseMoveAction,\n  effect: (action: PayloadAction<MousePointer>, listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>) => {\n    const mousePointer = action.payload;\n    const state = listenerApi.getState();\n    const tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);\n    const activeProps = selectActivePropsFromChartPointer(state, getChartPointer(mousePointer));\n\n    // this functionality only applies to charts that have axes\n    if (tooltipEventType === 'axis') {\n      if (activeProps?.activeIndex != null) {\n        listenerApi.dispatch(\n          setMouseOverAxisIndex({\n            activeIndex: activeProps.activeIndex,\n            activeDataKey: undefined,\n            activeCoordinate: activeProps.activeCoordinate,\n          }),\n        );\n      } else {\n        // this is needed to clear tooltip state when the mouse moves out of the inRange (svg - offset) function, but not yet out of the svg\n        listenerApi.dispatch(mouseLeaveChart());\n      }\n    }\n  },\n});\n","export function reduxDevtoolsJsonStringifyReplacer(_key: string, value: unknown) {\n  if (value instanceof HTMLElement) {\n    return `HTMLElement <${value.tagName} class=\"${value.className}\">`;\n  }\n  if (value === window) {\n    return 'global.window';\n  }\n  return value;\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { StackOffsetType } from '../util/types';\nimport { SyncMethod } from '../synchronisation/types';\n\n/**\n * These are chart options that users can choose - which means they can also\n * choose to change them which should trigger a re-render.\n */\nexport type UpdatableChartOptions = {\n  accessibilityLayer: boolean;\n  barCategoryGap: number | string;\n  barGap: number | string;\n  barSize: string | number | undefined;\n  /**\n   * Useful for debugging which chart is which when synchronising.\n   * The className is also passed to the root element of the chart but that's done in the JSX, not through Redux.\n   */\n  className: string | undefined;\n  maxBarSize: number | undefined;\n  stackOffset: StackOffsetType;\n  /**\n   * Charts that share the same syncId will have their Tooltip and Brush synchronised.\n   */\n  syncId: number | string | undefined;\n  syncMethod: SyncMethod;\n};\n\nexport const initialState: UpdatableChartOptions = {\n  accessibilityLayer: true,\n  barCategoryGap: '10%',\n  barGap: 4,\n  barSize: undefined,\n  className: undefined,\n  maxBarSize: undefined,\n  stackOffset: 'none',\n  syncId: undefined,\n  syncMethod: 'index',\n};\n\nconst rootPropsSlice = createSlice({\n  name: 'rootProps',\n  initialState,\n  reducers: {\n    updateOptions: (state: UpdatableChartOptions, action: PayloadAction<UpdatableChartOptions>) => {\n      state.accessibilityLayer = action.payload.accessibilityLayer;\n      state.barCategoryGap = action.payload.barCategoryGap;\n      state.barGap = action.payload.barGap ?? initialState.barGap;\n      state.barSize = action.payload.barSize;\n      state.maxBarSize = action.payload.maxBarSize;\n      state.stackOffset = action.payload.stackOffset;\n      state.syncId = action.payload.syncId;\n      state.syncMethod = action.payload.syncMethod;\n      state.className = action.payload.className;\n    },\n  },\n});\n\nexport const rootPropsReducer = rootPropsSlice.reducer;\n\nexport const { updateOptions } = rootPropsSlice.actions;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nexport type PolarChartOptions = {\n  cx: number | string;\n  cy: number | string;\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number | string;\n  outerRadius: number | string;\n};\n\nconst polarOptionsSlice = createSlice({\n  name: 'polarOptions',\n  initialState: null as PolarChartOptions | null,\n  reducers: {\n    updatePolarOptions: (_state: PolarChartOptions, action: PayloadAction<PolarChartOptions>): PolarChartOptions => {\n      return action.payload;\n    },\n  },\n});\n\nexport const { updatePolarOptions } = polarOptionsSlice.actions;\n\nexport const polarOptionsReducer = polarOptionsSlice.reducer;\n","import { createAction, createListenerMiddleware, ListenerEffectAPI } from '@reduxjs/toolkit';\nimport { setKeyboardInteraction } from './tooltipSlice';\nimport { AppDispatch, RechartsRootState } from './store';\nimport { selectTooltipAxisTicks, selectTooltipDisplayedData } from './selectors/tooltipSelectors';\nimport { selectCoordinateForDefaultIndex } from './selectors/selectors';\nimport { selectChartDirection } from './selectors/axisSelectors';\nimport { combineActiveTooltipIndex } from './selectors/combiners/combineActiveTooltipIndex';\n\nexport const keyDownAction = createAction<KeyboardEvent['key']>('keyDown');\nexport const focusAction = createAction('focus');\n\nexport const keyboardEventsMiddleware = createListenerMiddleware();\n\nkeyboardEventsMiddleware.startListening({\n  actionCreator: keyDownAction,\n  effect: (\n    action: ReturnType<typeof keyDownAction>,\n    listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>,\n  ) => {\n    const state: RechartsRootState = listenerApi.getState();\n    const accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;\n    if (!accessibilityLayerIsActive) {\n      return;\n    }\n    const { keyboardInteraction } = state.tooltip;\n    const key = action.payload;\n    if (key !== 'ArrowRight' && key !== 'ArrowLeft' && key !== 'Enter') {\n      return;\n    }\n\n    // TODO this is lacking index for charts that do not support numeric indexes\n    const currentIndex: number = Number(\n      combineActiveTooltipIndex(keyboardInteraction, selectTooltipDisplayedData(state)),\n    );\n    const tooltipTicks = selectTooltipAxisTicks(state);\n    if (key === 'Enter') {\n      const coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(keyboardInteraction.index));\n      listenerApi.dispatch(\n        setKeyboardInteraction({\n          active: !keyboardInteraction.active,\n          activeIndex: keyboardInteraction.index,\n          activeDataKey: keyboardInteraction.dataKey,\n          activeCoordinate: coordinate,\n        }),\n      );\n      return;\n    }\n\n    const direction = selectChartDirection(state);\n    const directionMultiplier = direction === 'left-to-right' ? 1 : -1;\n    const movement = key === 'ArrowRight' ? 1 : -1;\n    const nextIndex = currentIndex + movement * directionMultiplier;\n    if (tooltipTicks == null || nextIndex >= tooltipTicks.length || nextIndex < 0) {\n      return;\n    }\n    const coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(nextIndex));\n\n    listenerApi.dispatch(\n      setKeyboardInteraction({\n        active: true,\n        activeIndex: nextIndex.toString(),\n        activeDataKey: undefined,\n        activeCoordinate: coordinate,\n      }),\n    );\n  },\n});\n\nkeyboardEventsMiddleware.startListening({\n  actionCreator: focusAction,\n  effect: (_action, listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>) => {\n    const state: RechartsRootState = listenerApi.getState();\n    const accessibilityLayerIsActive = state.rootProps.accessibilityLayer !== false;\n    if (!accessibilityLayerIsActive) {\n      return;\n    }\n    const { keyboardInteraction } = state.tooltip;\n    if (keyboardInteraction.active) {\n      return;\n    }\n    if (keyboardInteraction.index == null) {\n      const nextIndex = '0';\n      const coordinate = selectCoordinateForDefaultIndex(state, 'axis', 'hover', String(nextIndex));\n      listenerApi.dispatch(\n        setKeyboardInteraction({\n          activeDataKey: undefined,\n          active: true,\n          activeIndex: nextIndex,\n          activeCoordinate: coordinate,\n        }),\n      );\n    }\n  },\n});\n","import { createAction, createListenerMiddleware, ListenerEffectAPI, PayloadAction } from '@reduxjs/toolkit';\nimport { SyntheticEvent } from 'react';\nimport { CategoricalChartFunc } from '../chart/types';\nimport { MouseHandlerDataParam } from '../synchronisation/types';\nimport {\n  selectActiveLabel,\n  selectActiveTooltipCoordinate,\n  selectActiveTooltipDataKey,\n  selectActiveTooltipIndex,\n  selectIsTooltipActive,\n} from './selectors/tooltipSelectors';\nimport { AppDispatch, RechartsRootState } from './store';\n\ntype ExternalEventActionPayload = {\n  reactEvent: SyntheticEvent;\n  handler: CategoricalChartFunc | undefined;\n};\n\nexport const externalEventAction = createAction<ExternalEventActionPayload>('externalEvent');\n\nexport const externalEventsMiddleware = createListenerMiddleware();\n\nexternalEventsMiddleware.startListening({\n  actionCreator: externalEventAction,\n  effect: (\n    action: PayloadAction<ExternalEventActionPayload>,\n    listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>,\n  ) => {\n    if (action.payload.handler == null) {\n      return;\n    }\n\n    const state: RechartsRootState = listenerApi.getState();\n    const nextState: MouseHandlerDataParam = {\n      activeCoordinate: selectActiveTooltipCoordinate(state),\n      activeDataKey: selectActiveTooltipDataKey(state),\n      activeIndex: selectActiveTooltipIndex(state),\n      activeLabel: selectActiveLabel(state),\n      activeTooltipIndex: selectActiveTooltipIndex(state),\n      isTooltipActive: selectIsTooltipActive(state),\n    };\n\n    action.payload.handler(nextState, action.payload.reactEvent);\n  },\n});\n","import { createSelector } from 'reselect';\nimport { RechartsRootState } from '../store';\nimport { TooltipIndex, TooltipPayloadConfiguration, TooltipPayloadSearcher } from '../tooltipSlice';\nimport { Coordinate, DataKey } from '../../util/types';\nimport { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';\nimport { selectTooltipState } from './selectTooltipState';\n\nconst selectAllTooltipPayloadConfiguration: (state: RechartsRootState) => ReadonlyArray<TooltipPayloadConfiguration> =\n  createSelector([selectTooltipState], tooltipState => tooltipState.tooltipItemPayloads);\n\nexport const selectTooltipCoordinate: (\n  state: RechartsRootState,\n  tooltipIndex: TooltipIndex,\n  dataKey: DataKey<any> | undefined,\n) => Coordinate | undefined = createSelector(\n  [\n    selectAllTooltipPayloadConfiguration,\n    selectTooltipPayloadSearcher,\n    (_state: RechartsRootState, tooltipIndex: TooltipIndex, _dataKey: DataKey<any> | undefined): TooltipIndex =>\n      tooltipIndex,\n    (\n      _state: RechartsRootState,\n      _tooltipIndex: TooltipIndex,\n      dataKey: DataKey<any> | undefined,\n    ): DataKey<any> | undefined => dataKey,\n  ],\n  (\n    allTooltipConfigurations: ReadonlyArray<TooltipPayloadConfiguration>,\n    tooltipPayloadSearcher: TooltipPayloadSearcher | undefined,\n    tooltipIndex: TooltipIndex,\n    dataKey,\n  ): Coordinate | undefined => {\n    const mostRelevantTooltipConfiguration = allTooltipConfigurations.find(tooltipConfiguration => {\n      return tooltipConfiguration.settings.dataKey === dataKey;\n    });\n    if (mostRelevantTooltipConfiguration == null) {\n      return undefined;\n    }\n    const { positions } = mostRelevantTooltipConfiguration;\n    if (positions == null) {\n      return undefined;\n    }\n    // @ts-expect-error tooltipPayloadSearcher is not typed well\n    const maybePosition: Coordinate | undefined = tooltipPayloadSearcher(positions, tooltipIndex);\n    return maybePosition;\n  },\n);\n","import { createAction, createListenerMiddleware, ListenerEffectAPI, PayloadAction } from '@reduxjs/toolkit';\nimport * as React from 'react';\nimport { AppDispatch, RechartsRootState } from './store';\nimport { setActiveMouseOverItemIndex, setMouseOverAxisIndex } from './tooltipSlice';\nimport { selectActivePropsFromChartPointer } from './selectors/selectActivePropsFromChartPointer';\n\nimport { getChartPointer } from '../util/getChartPointer';\nimport { selectTooltipEventType } from './selectors/selectTooltipEventType';\nimport { DATA_ITEM_DATAKEY_ATTRIBUTE_NAME, DATA_ITEM_INDEX_ATTRIBUTE_NAME } from '../util/Constants';\nimport { selectTooltipCoordinate } from './selectors/touchSelectors';\n\nexport const touchEventAction = createAction<React.TouchEvent<HTMLDivElement>>('touchMove');\n\nexport const touchEventMiddleware = createListenerMiddleware();\n\ntouchEventMiddleware.startListening({\n  actionCreator: touchEventAction,\n  effect: (\n    action: PayloadAction<React.TouchEvent<HTMLDivElement>>,\n    listenerApi: ListenerEffectAPI<RechartsRootState, AppDispatch>,\n  ) => {\n    const touchEvent = action.payload;\n    const state = listenerApi.getState();\n    const tooltipEventType = selectTooltipEventType(state, state.tooltip.settings.shared);\n    if (tooltipEventType === 'axis') {\n      const activeProps = selectActivePropsFromChartPointer(\n        state,\n        getChartPointer({\n          clientX: touchEvent.touches[0].clientX,\n          clientY: touchEvent.touches[0].clientY,\n          currentTarget: touchEvent.currentTarget,\n        }),\n      );\n      if (activeProps?.activeIndex != null) {\n        listenerApi.dispatch(\n          setMouseOverAxisIndex({\n            activeIndex: activeProps.activeIndex,\n            activeDataKey: undefined,\n            activeCoordinate: activeProps.activeCoordinate,\n          }),\n        );\n      }\n    } else if (tooltipEventType === 'item') {\n      const touch = touchEvent.touches[0];\n      const target = document.elementFromPoint(touch.clientX, touch.clientY);\n      if (!target || !target.getAttribute) {\n        return;\n      }\n      const itemIndex = target.getAttribute(DATA_ITEM_INDEX_ATTRIBUTE_NAME);\n      const dataKey = target.getAttribute(DATA_ITEM_DATAKEY_ATTRIBUTE_NAME) ?? undefined;\n      const coordinate = selectTooltipCoordinate(listenerApi.getState(), itemIndex, dataKey);\n\n      listenerApi.dispatch(\n        setActiveMouseOverItemIndex({\n          activeDataKey: dataKey,\n          activeIndex: itemIndex,\n          activeCoordinate: coordinate,\n        }),\n      );\n    }\n  },\n});\n","import { Action, combineReducers, configureStore, Dispatch, Store } from '@reduxjs/toolkit';\nimport { optionsReducer } from './optionsSlice';\nimport { tooltipReducer } from './tooltipSlice';\nimport { chartDataReducer } from './chartDataSlice';\nimport { chartLayoutReducer } from './layoutSlice';\nimport { mouseClickMiddleware, mouseMoveMiddleware } from './mouseEventsMiddleware';\nimport { reduxDevtoolsJsonStringifyReplacer } from './reduxDevtoolsJsonStringifyReplacer';\nimport { cartesianAxisReducer } from './cartesianAxisSlice';\nimport { graphicalItemsReducer } from './graphicalItemsSlice';\nimport { referenceElementsReducer } from './referenceElementsSlice';\nimport { brushReducer } from './brushSlice';\nimport { legendReducer } from './legendSlice';\nimport { rootPropsReducer } from './rootPropsSlice';\nimport { polarAxisReducer } from './polarAxisSlice';\nimport { polarOptionsReducer } from './polarOptionsSlice';\nimport { keyboardEventsMiddleware } from './keyboardEventsMiddleware';\nimport { externalEventsMiddleware } from './externalEventsMiddleware';\nimport { touchEventMiddleware } from './touchEventsMiddleware';\nimport { errorBarReducer } from './errorBarSlice';\n\nconst rootReducer = combineReducers({\n  brush: brushReducer,\n  cartesianAxis: cartesianAxisReducer,\n  chartData: chartDataReducer,\n  errorBars: errorBarReducer,\n  graphicalItems: graphicalItemsReducer,\n  layout: chartLayoutReducer,\n  legend: legendReducer,\n  options: optionsReducer,\n  polarAxis: polarAxisReducer,\n  polarOptions: polarOptionsReducer,\n  referenceElements: referenceElementsReducer,\n  rootProps: rootPropsReducer,\n  tooltip: tooltipReducer,\n});\n\nexport const createRechartsStore = (\n  preloadedState?: Partial<RechartsRootState>,\n  chartName: string = 'Chart',\n): Store<RechartsRootState> => {\n  return configureStore<RechartsRootState>({\n    reducer: rootReducer,\n    // redux-toolkit v1 types are unhappy with the preloadedState type. Remove the `as any` when bumping to v2\n    preloadedState: preloadedState as any,\n    // @ts-expect-error redux-toolkit v1 types are unhappy with the middleware array. Remove this comment when bumping to v2\n    middleware: getDefaultMiddleware =>\n      getDefaultMiddleware({\n        serializableCheck: false,\n      }).concat([\n        mouseClickMiddleware.middleware,\n        mouseMoveMiddleware.middleware,\n        keyboardEventsMiddleware.middleware,\n        externalEventsMiddleware.middleware,\n        touchEventMiddleware.middleware,\n      ]),\n    devTools: {\n      serialize: {\n        replacer: reduxDevtoolsJsonStringifyReplacer,\n      },\n      name: `recharts-${chartName}`,\n    },\n  });\n};\n\nexport type RechartsRootState = ReturnType<typeof rootReducer>;\nexport type AppDispatch = Dispatch<Action>;\n","import * as React from 'react';\nimport { Context, MutableRefObject, ReactNode, useRef } from 'react';\nimport { Provider } from 'react-redux';\nimport { Action, Store } from '@reduxjs/toolkit';\nimport { createRechartsStore, RechartsRootState } from './store';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { RechartsReduxContext, RechartsReduxContextValue } from './RechartsReduxContext';\n\ntype RechartsStoreProviderProps = {\n  children: ReactNode;\n  preloadedState?: Partial<RechartsRootState>;\n  reduxStoreName?: string;\n};\n\nexport function RechartsStoreProvider({ preloadedState, children, reduxStoreName }: RechartsStoreProviderProps) {\n  const isPanorama = useIsPanorama();\n  /*\n   * Why the ref? Redux official documentation recommends to use store as a singleton,\n   * and reuse that everywhere: https://redux-toolkit.js.org/api/configureStore#basic-example\n   *\n   * Which is correct! Except that is considering deploying Redux in an app.\n   * Recharts as a library supports multiple charts on the same page.\n   * And each of these charts needs its own store independent of others!\n   *\n   * The alternative is to have everything in the store keyed by the chart id.\n   * Which would make working with everything a little bit more painful because we need the chart id everywhere.\n   */\n  const storeRef: MutableRefObject<Store<RechartsRootState, Action> | null> = useRef(null);\n\n  /*\n   * Panorama means that this chart is not its own chart, it's only a \"preview\"\n   * being rendered as a child of Brush.\n   * In such case, it should not have a store on its own - it should implicitly inherit\n   * whatever data is in the \"parent\" or \"root\" chart.\n   * Which here is represented by not having a Provider at all. All selectors will use the root store by default.\n   */\n  if (isPanorama) {\n    return children;\n  }\n\n  if (storeRef.current == null) {\n    storeRef.current = createRechartsStore(preloadedState, reduxStoreName);\n  }\n\n  // ts-expect-error React-Redux types demand that the context internal value is not null, but we have that as default.\n  const nonNullContext: Context<RechartsReduxContextValue> = RechartsReduxContext;\n\n  return (\n    <Provider context={nonNullContext} store={storeRef.current}>\n      {children}\n    </Provider>\n  );\n}\n","import { useEffect } from 'react';\nimport { LayoutType, Margin } from '../util/types';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { setChartSize, setLayout, setMargin } from './layoutSlice';\nimport { useAppDispatch } from './hooks';\n\n/**\n * \"Main\" props are props that are only accepted on the main chart,\n * as opposed to the small panorama chart inside a Brush.\n */\ntype MainChartProps = {\n  width: number;\n  height: number;\n  layout: LayoutType;\n  margin: Margin;\n};\n\nexport function ReportMainChartProps({ layout, width, height, margin }: MainChartProps): null {\n  const dispatch = useAppDispatch();\n\n  /*\n   * Skip dispatching properties in panorama chart for two reasons:\n   * 1. The root chart should be deciding on these properties, and\n   * 2. Brush reads these properties from redux store, and so they must remain stable\n   *      to avoid circular dependency and infinite re-rendering.\n   */\n  const isPanorama = useIsPanorama();\n  /*\n   * useEffect here is required to avoid the \"Cannot update a component while rendering a different component\" error.\n   * https://github.com/facebook/react/issues/18178\n   *\n   * Reported in https://github.com/recharts/recharts/issues/5514\n   */\n  useEffect(() => {\n    if (!isPanorama) {\n      dispatch(setLayout(layout));\n      dispatch(setChartSize({ width, height }));\n      dispatch(setMargin(margin));\n    }\n  }, [dispatch, isPanorama, layout, width, height, margin]);\n  return null;\n}\n","import { useEffect } from 'react';\nimport { updateOptions, UpdatableChartOptions } from './rootPropsSlice';\nimport { useAppDispatch } from './hooks';\n\nexport function ReportChartProps(props: UpdatableChartOptions): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(updateOptions(props));\n  }, [dispatch, props]);\n  return null;\n}\n","import * as React from 'react';\nimport { forwardRef, ReactNode } from 'react';\nimport { useChartHeight, useChartWidth } from '../context/chartLayoutContext';\nimport { useAccessibilityLayer } from '../context/accessibilityContext';\nimport { useIsPanorama } from '../context/PanoramaContext';\nimport { Surface } from './Surface';\nimport { useAppSelector } from '../state/hooks';\nimport { selectBrushDimensions } from '../state/selectors/brushSelectors';\nimport { isPositiveNumber } from '../util/isWellBehavedNumber';\n\ntype RootSurfaceProps = {\n  children: ReactNode;\n  title: string | undefined;\n  desc: string | undefined;\n  otherAttributes: Record<string, unknown>;\n};\n\nconst FULL_WIDTH_AND_HEIGHT = { width: '100%', height: '100%' };\n\nconst MainChartSurface = forwardRef<SVGSVGElement, RootSurfaceProps>((props: RootSurfaceProps, ref) => {\n  const width = useChartWidth();\n  const height = useChartHeight();\n  const hasAccessibilityLayer = useAccessibilityLayer();\n\n  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {\n    return null;\n  }\n\n  const { children, otherAttributes, title, desc } = props;\n\n  let tabIndex: number | undefined, role: string | undefined;\n\n  if (typeof otherAttributes.tabIndex === 'number') {\n    tabIndex = otherAttributes.tabIndex;\n  } else {\n    tabIndex = hasAccessibilityLayer ? 0 : undefined;\n  }\n\n  if (typeof otherAttributes.role === 'string') {\n    role = otherAttributes.role;\n  } else {\n    role = hasAccessibilityLayer ? 'application' : undefined;\n  }\n\n  return (\n    <Surface\n      {...otherAttributes}\n      title={title}\n      desc={desc}\n      role={role}\n      tabIndex={tabIndex}\n      width={width}\n      height={height}\n      style={FULL_WIDTH_AND_HEIGHT}\n      ref={ref}\n    >\n      {children}\n    </Surface>\n  );\n});\n\nconst BrushPanoramaSurface = ({ children }: { children: ReactNode }) => {\n  const brushDimensions = useAppSelector(selectBrushDimensions);\n\n  if (!brushDimensions) {\n    return null;\n  }\n\n  const { width, height, y, x } = brushDimensions;\n\n  return (\n    <Surface width={width} height={height} x={x} y={y}>\n      {children}\n    </Surface>\n  );\n};\n\nexport const RootSurface = forwardRef<SVGSVGElement, RootSurfaceProps>(\n  ({ children, ...rest }: RootSurfaceProps, ref) => {\n    const isPanorama = useIsPanorama();\n\n    if (isPanorama) {\n      return <BrushPanoramaSurface>{children}</BrushPanoramaSurface>;\n    }\n    return (\n      <MainChartSurface ref={ref} {...rest}>\n        {children}\n      </MainChartSurface>\n    );\n  },\n);\n","import * as React from 'react';\nimport { CSSProperties, forwardRef, ReactNode, Ref, useState, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport { mouseLeaveChart } from '../state/tooltipSlice';\nimport { useAppDispatch } from '../state/hooks';\nimport { mouseClickAction, mouseMoveAction } from '../state/mouseEventsMiddleware';\nimport { useSynchronisedEventsFromOtherCharts } from '../synchronisation/useChartSynchronisation';\nimport { focusAction, keyDownAction } from '../state/keyboardEventsMiddleware';\nimport { useReportScale } from '../util/useReportScale';\nimport { ExternalMouseEvents } from './types';\nimport { externalEventAction } from '../state/externalEventsMiddleware';\nimport { touchEventAction } from '../state/touchEventsMiddleware';\nimport { TooltipPortalContext } from '../context/tooltipPortalContext';\nimport { LegendPortalContext } from '../context/legendPortalContext';\n\ntype Nullable<T> = {\n  [P in keyof T]: T[P] | undefined;\n};\n\nexport type RechartsWrapperProps = Nullable<ExternalMouseEvents> & {\n  children: ReactNode;\n  width: number;\n  height: number;\n  className?: string;\n  style?: CSSProperties;\n  ref?: Ref<HTMLDivElement>;\n};\n\nexport const RechartsWrapper = forwardRef(\n  (\n    {\n      children,\n      className,\n      height,\n      onClick,\n      onContextMenu,\n      onDoubleClick,\n      onMouseDown,\n      onMouseEnter,\n      onMouseLeave,\n      onMouseMove,\n      onMouseUp,\n      onTouchEnd,\n      onTouchMove,\n      onTouchStart,\n      style,\n      width,\n    }: RechartsWrapperProps,\n    ref: Ref<HTMLDivElement>,\n  ) => {\n    const dispatch = useAppDispatch();\n    const [tooltipPortal, setTooltipPortal] = useState<HTMLElement | null>(null);\n    const [legendPortal, setLegendPortal] = useState<HTMLElement | null>(null);\n\n    useSynchronisedEventsFromOtherCharts();\n\n    const setScaleRef = useReportScale();\n\n    const innerRef = useCallback(\n      (node: HTMLDivElement | null) => {\n        setScaleRef(node);\n        if (typeof ref === 'function') {\n          ref(node);\n        }\n        setTooltipPortal(node);\n        setLegendPortal(node);\n      },\n      [setScaleRef, ref, setTooltipPortal, setLegendPortal],\n    );\n\n    const myOnClick = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        dispatch(mouseClickAction(e));\n        dispatch(externalEventAction({ handler: onClick, reactEvent: e }));\n      },\n      [dispatch, onClick],\n    );\n\n    const myOnMouseEnter = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        dispatch(mouseMoveAction(e));\n        dispatch(externalEventAction({ handler: onMouseEnter, reactEvent: e }));\n      },\n      [dispatch, onMouseEnter],\n    );\n\n    const myOnMouseLeave = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        dispatch(mouseLeaveChart());\n        dispatch(externalEventAction({ handler: onMouseLeave, reactEvent: e }));\n      },\n      [dispatch, onMouseLeave],\n    );\n\n    const myOnMouseMove = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        dispatch(mouseMoveAction(e));\n        dispatch(externalEventAction({ handler: onMouseMove, reactEvent: e }));\n      },\n      [dispatch, onMouseMove],\n    );\n\n    const onFocus = useCallback(() => {\n      dispatch(focusAction());\n    }, [dispatch]);\n\n    const onKeyDown = useCallback(\n      (e: React.KeyboardEvent<HTMLDivElement>) => {\n        dispatch(keyDownAction(e.key));\n      },\n      [dispatch],\n    );\n\n    const myOnContextMenu = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        dispatch(externalEventAction({ handler: onContextMenu, reactEvent: e }));\n      },\n      [dispatch, onContextMenu],\n    );\n\n    const myOnDoubleClick = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        dispatch(externalEventAction({ handler: onDoubleClick, reactEvent: e }));\n      },\n      [dispatch, onDoubleClick],\n    );\n\n    const myOnMouseDown = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        dispatch(externalEventAction({ handler: onMouseDown, reactEvent: e }));\n      },\n      [dispatch, onMouseDown],\n    );\n\n    const myOnMouseUp = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        dispatch(externalEventAction({ handler: onMouseUp, reactEvent: e }));\n      },\n      [dispatch, onMouseUp],\n    );\n\n    const myOnTouchStart = useCallback(\n      (e: React.TouchEvent<HTMLDivElement>) => {\n        dispatch(externalEventAction({ handler: onTouchStart, reactEvent: e }));\n      },\n      [dispatch, onTouchStart],\n    );\n\n    /*\n     * onTouchMove is special because it behaves different from mouse events.\n     * Mouse events have enter + leave combo that notify us when the mouse is over\n     * a certain element. Touch events don't have that; touch only gives us\n     * start (finger down), end (finger up) and move (finger moving).\n     * So we need to figure out which element the user is touching\n     * ourselves. Fortunately, there's a convenient method for that:\n     * https://developer.mozilla.org/en-US/docs/Web/API/Document/elementFromPoint\n     */\n    const myOnTouchMove = useCallback(\n      (e: React.TouchEvent<HTMLDivElement>) => {\n        dispatch(touchEventAction(e));\n        dispatch(externalEventAction({ handler: onTouchMove, reactEvent: e }));\n      },\n      [dispatch, onTouchMove],\n    );\n\n    const myOnTouchEnd = useCallback(\n      (e: React.TouchEvent<HTMLDivElement>) => {\n        dispatch(externalEventAction({ handler: onTouchEnd, reactEvent: e }));\n      },\n      [dispatch, onTouchEnd],\n    );\n\n    return (\n      <TooltipPortalContext.Provider value={tooltipPortal}>\n        <LegendPortalContext.Provider value={legendPortal}>\n          {/* TODO fix this a11y violation - we should probably add AccessibilityManager in here ? */}\n          {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n          <div\n            className={clsx('recharts-wrapper', className)}\n            style={{ position: 'relative', cursor: 'default', width, height, ...style }}\n            onClick={myOnClick}\n            onContextMenu={myOnContextMenu}\n            onDoubleClick={myOnDoubleClick}\n            onFocus={onFocus}\n            onKeyDown={onKeyDown}\n            onMouseDown={myOnMouseDown}\n            onMouseEnter={myOnMouseEnter}\n            onMouseLeave={myOnMouseLeave}\n            onMouseMove={myOnMouseMove}\n            onMouseUp={myOnMouseUp}\n            onTouchEnd={myOnTouchEnd}\n            onTouchMove={myOnTouchMove}\n            onTouchStart={myOnTouchStart}\n            ref={innerRef}\n          >\n            {children}\n          </div>\n        </LegendPortalContext.Provider>\n      </TooltipPortalContext.Provider>\n    );\n  },\n);\n","import { useEffect, useState } from 'react';\nimport { useAppDispatch, useAppSelector } from '../state/hooks';\nimport { selectContainerScale } from '../state/selectors/containerSelectors';\nimport { setScale } from '../state/layoutSlice';\nimport { isWellBehavedNumber } from './isWellBehavedNumber';\n\nexport function useReportScale() {\n  const dispatch = useAppDispatch();\n  const [ref, setRef] = useState<HTMLElement | null>(null);\n  const scale = useAppSelector(selectContainerScale);\n  useEffect(() => {\n    if (ref == null) {\n      return;\n    }\n    const rect = ref.getBoundingClientRect();\n    const newScale = rect.width / ref.offsetWidth;\n    if (isWellBehavedNumber(newScale) && newScale !== scale) {\n      dispatch(setScale(newScale));\n    }\n  }, [ref, dispatch, scale]);\n  return setRef;\n}\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { RootSurface } from '../container/RootSurface';\nimport { RechartsWrapper } from './RechartsWrapper';\nimport { ClipPathProvider } from '../container/ClipPathProvider';\nimport { CartesianChartProps } from '../util/types';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\n\ntype CategoricalChartRequiredProps = CartesianChartProps & {\n  width: NonNullable<CartesianChartProps['width']>;\n  height: NonNullable<CartesianChartProps['height']>;\n};\n\nexport const CategoricalChart = forwardRef<SVGSVGElement, CategoricalChartRequiredProps>(\n  (props: CategoricalChartRequiredProps, ref) => {\n    const { children, className, width, height, style, compact, title, desc, ...others } = props;\n    const attrs = svgPropertiesNoEvents(others);\n\n    // The \"compact\" mode is used as the panorama within Brush\n    if (compact) {\n      return (\n        <RootSurface otherAttributes={attrs} title={title} desc={desc}>\n          {children}\n        </RootSurface>\n      );\n    }\n\n    return (\n      <RechartsWrapper\n        className={className}\n        style={style}\n        width={width}\n        height={height}\n        onClick={props.onClick}\n        onMouseLeave={props.onMouseLeave}\n        onMouseEnter={props.onMouseEnter}\n        onMouseMove={props.onMouseMove}\n        onMouseDown={props.onMouseDown}\n        onMouseUp={props.onMouseUp}\n        onContextMenu={props.onContextMenu}\n        onDoubleClick={props.onDoubleClick}\n        onTouchStart={props.onTouchStart}\n        onTouchMove={props.onTouchMove}\n        onTouchEnd={props.onTouchEnd}\n      >\n        <RootSurface otherAttributes={attrs} title={title} desc={desc} ref={ref}>\n          <ClipPathProvider>{children}</ClipPathProvider>\n        </RootSurface>\n      </RechartsWrapper>\n    );\n  },\n);\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { ChartOptions } from '../state/optionsSlice';\nimport { RechartsStoreProvider } from '../state/RechartsStoreProvider';\nimport { ChartDataContextProvider } from '../context/chartDataContext';\nimport { ReportMainChartProps } from '../state/ReportMainChartProps';\nimport { ReportChartProps } from '../state/ReportChartProps';\nimport { CartesianChartProps, Margin, TooltipEventType } from '../util/types';\nimport { TooltipPayloadSearcher } from '../state/tooltipSlice';\nimport { CategoricalChart } from './CategoricalChart';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { isPositiveNumber } from '../util/isWellBehavedNumber';\n\nconst defaultMargin: Margin = { top: 5, right: 5, bottom: 5, left: 5 };\n\nconst defaultProps = {\n  accessibilityLayer: true,\n  layout: 'horizontal',\n  stackOffset: 'none',\n  barCategoryGap: '10%',\n  barGap: 4,\n  margin: defaultMargin,\n  reverseStackOrder: false,\n  syncMethod: 'index',\n} as const satisfies Partial<CartesianChartProps>;\n\n/**\n * These are one-time, immutable options that decide the chart's behavior.\n * Users who wish to call CartesianChart may decide to pass these options explicitly,\n * but usually we would expect that they use one of the convenience components like BarChart, LineChart, etc.\n */\nexport type CartesianChartOptions = {\n  chartName: string;\n  defaultTooltipEventType: TooltipEventType;\n  validateTooltipEventTypes: ReadonlyArray<TooltipEventType>;\n  tooltipPayloadSearcher: TooltipPayloadSearcher;\n  categoricalChartProps: CartesianChartProps;\n};\n\nexport const CartesianChart = forwardRef<SVGSVGElement, CartesianChartOptions>(function CartesianChart(\n  props: CartesianChartOptions,\n  ref,\n) {\n  const rootChartProps = resolveDefaultProps(props.categoricalChartProps, defaultProps);\n\n  const { width, height, ...otherCategoricalProps } = rootChartProps;\n\n  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {\n    return null;\n  }\n\n  const {\n    chartName,\n    defaultTooltipEventType,\n    validateTooltipEventTypes,\n    tooltipPayloadSearcher,\n    categoricalChartProps,\n  } = props;\n\n  const options: ChartOptions = {\n    chartName,\n    defaultTooltipEventType,\n    validateTooltipEventTypes,\n    tooltipPayloadSearcher,\n    eventEmitter: undefined,\n  };\n\n  return (\n    <RechartsStoreProvider preloadedState={{ options }} reduxStoreName={categoricalChartProps.id ?? chartName}>\n      <ChartDataContextProvider chartData={categoricalChartProps.data} />\n      <ReportMainChartProps\n        width={width}\n        height={height}\n        layout={rootChartProps.layout}\n        margin={rootChartProps.margin}\n      />\n      <ReportChartProps\n        accessibilityLayer={rootChartProps.accessibilityLayer}\n        barCategoryGap={rootChartProps.barCategoryGap}\n        maxBarSize={rootChartProps.maxBarSize}\n        stackOffset={rootChartProps.stackOffset}\n        barGap={rootChartProps.barGap}\n        barSize={rootChartProps.barSize}\n        syncId={rootChartProps.syncId}\n        syncMethod={rootChartProps.syncMethod}\n        className={rootChartProps.className}\n      />\n      <CategoricalChart {...otherCategoricalProps} width={width} height={height} ref={ref} />\n    </RechartsStoreProvider>\n  );\n});\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { CartesianChart } from './CartesianChart';\nimport { CartesianChartProps, TooltipEventType } from '../util/types';\n\nconst allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ['axis'];\n\nexport const LineChart = forwardRef<SVGSVGElement, CartesianChartProps>((props: CartesianChartProps, ref) => {\n  return (\n    <CartesianChart\n      chartName=\"LineChart\"\n      defaultTooltipEventType=\"axis\"\n      validateTooltipEventTypes={allowedTooltipTypes}\n      tooltipPayloadSearcher={arrayTooltipSearcher}\n      categoricalChartProps={props}\n      ref={ref}\n    />\n  );\n});\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { CartesianChartProps, TooltipEventType } from '../util/types';\nimport { CartesianChart } from './CartesianChart';\n\nconst allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ['axis', 'item'];\n\nexport const BarChart = forwardRef<SVGSVGElement, CartesianChartProps>((props: CartesianChartProps, ref) => {\n  return (\n    <CartesianChart\n      chartName=\"BarChart\"\n      defaultTooltipEventType=\"axis\"\n      validateTooltipEventTypes={allowedTooltipTypes}\n      tooltipPayloadSearcher={arrayTooltipSearcher}\n      categoricalChartProps={props}\n      ref={ref}\n    />\n  );\n});\n","import { useEffect } from 'react';\nimport { useAppDispatch } from './hooks';\nimport { PolarChartOptions, updatePolarOptions } from './polarOptionsSlice';\n\nexport function ReportPolarOptions(props: PolarChartOptions): null {\n  const dispatch = useAppDispatch();\n  useEffect(() => {\n    dispatch(updatePolarOptions(props));\n  }, [dispatch, props]);\n  return null;\n}\n","import { forwardRef } from 'react';\nimport * as React from 'react';\nimport { ChartOptions } from '../state/optionsSlice';\nimport { RechartsStoreProvider } from '../state/RechartsStoreProvider';\nimport { ChartDataContextProvider } from '../context/chartDataContext';\nimport { ReportMainChartProps } from '../state/ReportMainChartProps';\nimport { ReportChartProps } from '../state/ReportChartProps';\nimport { ReportPolarOptions } from '../state/ReportPolarOptions';\nimport { Margin, PolarChartProps, TooltipEventType } from '../util/types';\nimport { TooltipPayloadSearcher } from '../state/tooltipSlice';\nimport { CategoricalChart } from './CategoricalChart';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { isPositiveNumber } from '../util/isWellBehavedNumber';\n\nconst defaultMargin: Margin = { top: 5, right: 5, bottom: 5, left: 5 };\n\n/**\n * These default props are the same for all PolarChart components.\n */\nconst defaultProps = {\n  accessibilityLayer: true,\n  stackOffset: 'none',\n  barCategoryGap: '10%',\n  barGap: 4,\n  margin: defaultMargin,\n  reverseStackOrder: false,\n  syncMethod: 'index',\n  layout: 'radial',\n} as const satisfies Partial<PolarChartProps>;\n\n/**\n * These props are required for the PolarChart to function correctly.\n * Users usually would not need to specify these explicitly,\n * because the convenience components like PieChart, RadarChart, etc.\n * will provide these defaults.\n * We can't have the defaults in this file because each of those convenience components\n * have their own opinions about what they should be.\n */\ntype PolarChartPropsWithDefaults = PolarChartProps & {\n  cx: NonNullable<PolarChartProps['cx']>;\n  cy: NonNullable<PolarChartProps['cy']>;\n  startAngle: NonNullable<PolarChartProps['startAngle']>;\n  endAngle: NonNullable<PolarChartProps['endAngle']>;\n  innerRadius: NonNullable<PolarChartProps['innerRadius']>;\n  outerRadius: NonNullable<PolarChartProps['outerRadius']>;\n};\n\n/**\n * These are one-time, immutable options that decide the chart's behavior.\n * Users who wish to call CartesianChart may decide to pass these options explicitly,\n * but usually we would expect that they use one of the convenience components like PieChart, RadarChart, etc.\n */\nexport type PolarChartOptions = {\n  chartName: string;\n  defaultTooltipEventType: TooltipEventType;\n  validateTooltipEventTypes: ReadonlyArray<TooltipEventType>;\n  tooltipPayloadSearcher: TooltipPayloadSearcher;\n  categoricalChartProps: PolarChartPropsWithDefaults;\n};\n\nexport const PolarChart = forwardRef<SVGSVGElement, PolarChartOptions>(function PolarChart(\n  props: PolarChartOptions,\n  ref,\n) {\n  const polarChartProps = resolveDefaultProps(props.categoricalChartProps, defaultProps);\n\n  const { width, height, layout, ...otherCategoricalProps } = polarChartProps;\n\n  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {\n    return null;\n  }\n\n  const { chartName, defaultTooltipEventType, validateTooltipEventTypes, tooltipPayloadSearcher } = props;\n\n  const options: ChartOptions = {\n    chartName,\n    defaultTooltipEventType,\n    validateTooltipEventTypes,\n    tooltipPayloadSearcher,\n    eventEmitter: undefined,\n  };\n\n  return (\n    <RechartsStoreProvider preloadedState={{ options }} reduxStoreName={polarChartProps.id ?? chartName}>\n      <ChartDataContextProvider chartData={polarChartProps.data} />\n      <ReportMainChartProps width={width} height={height} layout={layout} margin={polarChartProps.margin} />\n      <ReportChartProps\n        accessibilityLayer={polarChartProps.accessibilityLayer}\n        barCategoryGap={polarChartProps.barCategoryGap}\n        maxBarSize={polarChartProps.maxBarSize}\n        stackOffset={polarChartProps.stackOffset}\n        barGap={polarChartProps.barGap}\n        barSize={polarChartProps.barSize}\n        syncId={polarChartProps.syncId}\n        syncMethod={polarChartProps.syncMethod}\n        className={polarChartProps.className}\n      />\n      <ReportPolarOptions\n        cx={polarChartProps.cx}\n        cy={polarChartProps.cy}\n        startAngle={polarChartProps.startAngle}\n        endAngle={polarChartProps.endAngle}\n        innerRadius={polarChartProps.innerRadius}\n        outerRadius={polarChartProps.outerRadius}\n      />\n      <CategoricalChart width={width} height={height} {...otherCategoricalProps} ref={ref} />\n    </RechartsStoreProvider>\n  );\n});\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { PolarChart } from './PolarChart';\nimport { PolarChartProps, TooltipEventType } from '../util/types';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\n\nconst allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ['item'];\n\nconst defaultProps = {\n  layout: 'centric',\n  startAngle: 0,\n  endAngle: 360,\n  cx: '50%',\n  cy: '50%',\n  innerRadius: 0,\n  outerRadius: '80%',\n} as const satisfies Partial<PolarChartProps>;\n\nexport const PieChart = forwardRef<SVGSVGElement, PolarChartProps>((props: PolarChartProps, ref) => {\n  const propsWithDefaults = resolveDefaultProps(props, defaultProps);\n  return (\n    <PolarChart\n      chartName=\"PieChart\"\n      defaultTooltipEventType=\"item\"\n      validateTooltipEventTypes={allowedTooltipTypes}\n      tooltipPayloadSearcher={arrayTooltipSearcher}\n      categoricalChartProps={propsWithDefaults}\n      ref={ref}\n    />\n  );\n});\n","import * as React from 'react';\nimport { PureComponent } from 'react';\nimport omit from 'es-toolkit/compat/omit';\nimport get from 'es-toolkit/compat/get';\n\nimport { Layer } from '../container/Layer';\nimport { Surface } from '../container/Surface';\nimport { Polygon } from '../shape/Polygon';\nimport { Rectangle } from '../shape/Rectangle';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport { COLOR_PANEL } from '../util/Constants';\nimport { isNan, uniqueId } from '../util/DataUtils';\nimport { getStringSize } from '../util/DOMUtils';\nimport { Global } from '../util/Global';\nimport { AnimationDuration, AnimationTiming, DataKey, Margin } from '../util/types';\nimport { ReportChartMargin, ReportChartSize } from '../context/chartLayoutContext';\nimport { TooltipPortalContext } from '../context/tooltipPortalContext';\nimport { RechartsWrapper } from './RechartsWrapper';\nimport {\n  setActiveClickItemIndex,\n  setActiveMouseOverItemIndex,\n  TooltipIndex,\n  TooltipPayloadConfiguration,\n  TooltipPayloadSearcher,\n} from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { ChartOptions } from '../state/optionsSlice';\nimport { RechartsStoreProvider } from '../state/RechartsStoreProvider';\nimport { useAppDispatch } from '../state/hooks';\nimport { AppDispatch } from '../state/store';\nimport { isPositiveNumber } from '../util/isWellBehavedNumber';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { CSSTransitionAnimate } from '../animation/CSSTransitionAnimate';\n\nconst NODE_VALUE_KEY = 'value';\n\n/**\n * This is what end users defines as `data` on Treemap.\n */\nexport interface TreemapDataType {\n  children?: ReadonlyArray<TreemapDataType>;\n\n  [key: string]: unknown;\n}\n\n/**\n * This is what is returned from `squarify`, the final treemap data structure\n * that gets rendered and is stored in\n */\nexport interface TreemapNode {\n  children: ReadonlyArray<TreemapNode>;\n  value: number;\n  depth: number;\n  index: number;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  name: string;\n  tooltipIndex: TooltipIndex;\n\n  [k: string]: any;\n}\n\nexport const treemapPayloadSearcher: TooltipPayloadSearcher<TreemapNode, TreemapNode> = (\n  data: TreemapNode,\n  activeIndex: TooltipIndex,\n): TreemapNode | undefined => {\n  return get(data, activeIndex);\n};\n\nexport const addToTreemapNodeIndex = (\n  indexInChildrenArr: number,\n  activeTooltipIndexSoFar: TooltipIndex | undefined = '',\n): TooltipIndex => {\n  return `${activeTooltipIndexSoFar}children[${indexInChildrenArr}]`;\n};\n\nconst options: ChartOptions = {\n  chartName: 'Treemap',\n  defaultTooltipEventType: 'item',\n  validateTooltipEventTypes: ['item'],\n  tooltipPayloadSearcher: treemapPayloadSearcher,\n  eventEmitter: undefined,\n};\n\nexport const computeNode = ({\n  depth,\n  node,\n  index,\n  dataKey,\n  nameKey,\n  nestedActiveTooltipIndex,\n}: {\n  depth: number;\n  node: TreemapNode;\n  index: number;\n  dataKey: DataKey<any>;\n  nameKey: DataKey<any>;\n  nestedActiveTooltipIndex: TooltipIndex | undefined;\n}): TreemapNode => {\n  const currentTooltipIndex = depth === 0 ? '' : addToTreemapNodeIndex(index, nestedActiveTooltipIndex);\n  const { children } = node;\n  const childDepth = depth + 1;\n  const computedChildren =\n    children && children.length\n      ? children.map((child: TreemapNode, i: number) =>\n          computeNode({\n            depth: childDepth,\n            node: child,\n            index: i,\n            dataKey,\n            nameKey,\n            nestedActiveTooltipIndex: currentTooltipIndex,\n          }),\n        )\n      : null;\n  let nodeValue: number;\n\n  if (children && children.length) {\n    nodeValue = computedChildren.reduce((result: any, child: TreemapNode) => result + child[NODE_VALUE_KEY], 0);\n  } else {\n    // TODO need to verify dataKey\n    nodeValue = isNan(node[dataKey as string]) || node[dataKey as string] <= 0 ? 0 : node[dataKey as string];\n  }\n\n  return {\n    ...node,\n    children: computedChildren,\n    // @ts-expect-error getValueByDataKey does not validate the output type\n    name: getValueByDataKey(node, nameKey, ''),\n    [NODE_VALUE_KEY]: nodeValue,\n    depth,\n    index,\n    tooltipIndex: currentTooltipIndex,\n  };\n};\n\nconst filterRect = (node: TreemapNode) => ({ x: node.x, y: node.y, width: node.width, height: node.height });\n\n// Compute the area for each child based on value & scale.\nconst getAreaOfChildren = (children: ReadonlyArray<TreemapNode>, areaValueRatio: number) => {\n  const ratio = areaValueRatio < 0 ? 0 : areaValueRatio;\n\n  return children.map((child: TreemapNode) => {\n    const area = child[NODE_VALUE_KEY] * ratio;\n\n    return {\n      ...child,\n      area: isNan(area) || area <= 0 ? 0 : area,\n    };\n  });\n};\n\n// Computes the score for the specified row, as the worst aspect ratio.\nconst getWorstScore = (row: any, parentSize: number, aspectRatio: number) => {\n  const parentArea = parentSize * parentSize;\n  const rowArea = row.area * row.area;\n  const { min, max } = row.reduce(\n    (result: any, child: any) => ({\n      min: Math.min(result.min, child.area),\n      max: Math.max(result.max, child.area),\n    }),\n    { min: Infinity, max: 0 },\n  );\n\n  return rowArea\n    ? Math.max((parentArea * max * aspectRatio) / rowArea, rowArea / (parentArea * min * aspectRatio))\n    : Infinity;\n};\n\nconst horizontalPosition = (row: any, parentSize: number, parentRect: TreemapNode, isFlush: boolean) => {\n  let rowHeight = parentSize ? Math.round(row.area / parentSize) : 0;\n\n  if (isFlush || rowHeight > parentRect.height) {\n    rowHeight = parentRect.height;\n  }\n\n  let curX = parentRect.x;\n  let child;\n  for (let i = 0, len = row.length; i < len; i++) {\n    child = row[i];\n    child.x = curX;\n    child.y = parentRect.y;\n    child.height = rowHeight;\n    child.width = Math.min(rowHeight ? Math.round(child.area / rowHeight) : 0, parentRect.x + parentRect.width - curX);\n    curX += child.width;\n  }\n  // add the remain x to the last one of row\n  child.width += parentRect.x + parentRect.width - curX;\n\n  return {\n    ...parentRect,\n    y: parentRect.y + rowHeight,\n    height: parentRect.height - rowHeight,\n  };\n};\n\nconst verticalPosition = (row: any, parentSize: number, parentRect: TreemapNode, isFlush: boolean): TreemapNode => {\n  let rowWidth = parentSize ? Math.round(row.area / parentSize) : 0;\n\n  if (isFlush || rowWidth > parentRect.width) {\n    rowWidth = parentRect.width;\n  }\n\n  let curY = parentRect.y;\n  let child;\n  for (let i = 0, len = row.length; i < len; i++) {\n    child = row[i];\n    child.x = parentRect.x;\n    child.y = curY;\n    child.width = rowWidth;\n    child.height = Math.min(rowWidth ? Math.round(child.area / rowWidth) : 0, parentRect.y + parentRect.height - curY);\n    curY += child.height;\n  }\n  if (child) {\n    child.height += parentRect.y + parentRect.height - curY;\n  }\n\n  return {\n    ...parentRect,\n    x: parentRect.x + rowWidth,\n    width: parentRect.width - rowWidth,\n  };\n};\n\nconst position = (row: any, parentSize: number, parentRect: TreemapNode, isFlush: boolean): TreemapNode => {\n  if (parentSize === parentRect.width) {\n    return horizontalPosition(row, parentSize, parentRect, isFlush);\n  }\n\n  return verticalPosition(row, parentSize, parentRect, isFlush);\n};\n\n// Recursively arranges the specified node's children into squarified rows.\nconst squarify = (node: TreemapNode, aspectRatio: number): TreemapNode => {\n  const { children } = node;\n\n  if (children && children.length) {\n    let rect = filterRect(node) as any;\n    // maybe a bug\n    const row = [] as any;\n    let best = Infinity; // the best row score so far\n    let child, score; // the current row score\n    let size = Math.min(rect.width, rect.height); // initial orientation\n    const scaleChildren = getAreaOfChildren(children, (rect.width * rect.height) / node[NODE_VALUE_KEY]);\n    const tempChildren = scaleChildren.slice();\n\n    row.area = 0;\n\n    while (tempChildren.length > 0) {\n      // row first\n      // eslint-disable-next-line prefer-destructuring\n      row.push((child = tempChildren[0]));\n      row.area += child.area;\n\n      score = getWorstScore(row, size, aspectRatio);\n      if (score <= best) {\n        // continue with this orientation\n        tempChildren.shift();\n        best = score;\n      } else {\n        // abort, and try a different orientation\n        row.area -= row.pop().area;\n        rect = position(row, size, rect, false);\n        size = Math.min(rect.width, rect.height);\n        row.length = row.area = 0;\n        best = Infinity;\n      }\n    }\n\n    if (row.length) {\n      rect = position(row, size, rect, true);\n      row.length = row.area = 0;\n    }\n\n    return {\n      ...node,\n      children: scaleChildren.map(c => squarify(c, aspectRatio)),\n    };\n  }\n\n  return node;\n};\n\nexport interface Props {\n  width?: number;\n\n  height?: number;\n\n  data?: ReadonlyArray<TreemapDataType>;\n\n  /**\n   * @deprecated unused prop, doesn't do anything, use `key` instead\n   */\n  animationId?: number;\n\n  style?: any;\n\n  aspectRatio?: number;\n\n  content?: React.ReactElement | ((props: TreemapNode) => React.ReactElement);\n\n  fill?: string;\n\n  stroke?: string;\n\n  className?: string;\n\n  nameKey?: DataKey<any>;\n\n  dataKey?: DataKey<any>;\n\n  children?: any;\n\n  // optional values flat/nest, flat show whole treemap, nest only show depth=1 node\n  type?: 'flat' | 'nest';\n\n  colorPanel?: [];\n\n  // customize nest index content\n  nestIndexContent?: React.ReactElement | ((item: any, i: number) => any);\n\n  onAnimationStart?: () => void;\n\n  onAnimationEnd?: () => void;\n\n  onMouseEnter?: (node: TreemapNode, e: any) => void;\n\n  onMouseLeave?: (node: TreemapNode, e: any) => void;\n\n  onClick?: (node: TreemapNode) => void;\n\n  isAnimationActive?: boolean;\n\n  isUpdateAnimationActive?: boolean;\n\n  animationBegin?: number;\n\n  animationDuration?: AnimationDuration;\n\n  animationEasing?: AnimationTiming;\n}\n\ninterface State {\n  isAnimationFinished: boolean;\n\n  formatRoot?: TreemapNode;\n\n  currentRoot?: TreemapNode;\n\n  nestIndex?: TreemapNode[];\n\n  prevData?: ReadonlyArray<TreemapDataType>;\n\n  prevType?: 'flat' | 'nest';\n\n  prevWidth?: number;\n\n  prevHeight?: number;\n\n  prevDataKey?: DataKey<any>;\n\n  prevAspectRatio?: number;\n\n  tooltipPortal?: HTMLElement | null;\n}\n\nconst defaultState: State = {\n  isAnimationFinished: false,\n\n  formatRoot: null as TreemapNode,\n\n  currentRoot: null as TreemapNode,\n\n  nestIndex: [] as TreemapNode[],\n};\n\ntype ContentItemProps = {\n  content: any;\n  nodeProps: TreemapNode;\n  type: string;\n  colorPanel: string[];\n  dataKey: DataKey<any>;\n  onClick?: (e: React.MouseEvent<SVGPathElement, MouseEvent>) => void;\n  onMouseEnter?: (e: React.MouseEvent<SVGPathElement, MouseEvent>) => void;\n  onMouseLeave?: (e: React.MouseEvent<SVGPathElement, MouseEvent>) => void;\n};\n\nfunction ContentItem({\n  content,\n  nodeProps,\n  type,\n  colorPanel,\n  onMouseEnter,\n  onMouseLeave,\n  onClick,\n}: ContentItemProps): React.ReactElement {\n  if (React.isValidElement(content)) {\n    return (\n      <Layer onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} onClick={onClick}>\n        {React.cloneElement(content, nodeProps)}\n      </Layer>\n    );\n  }\n  if (typeof content === 'function') {\n    return (\n      <Layer onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} onClick={onClick}>\n        {content(nodeProps)}\n      </Layer>\n    );\n  }\n  // optimize default shape\n  const { x, y, width, height, index } = nodeProps;\n  let arrow = null;\n  if (width > 10 && height > 10 && nodeProps.children && type === 'nest') {\n    arrow = (\n      <Polygon\n        points={[\n          { x: x + 2, y: y + height / 2 },\n          { x: x + 6, y: y + height / 2 + 3 },\n          { x: x + 2, y: y + height / 2 + 6 },\n        ]}\n      />\n    );\n  }\n  let text = null;\n  const nameSize = getStringSize(nodeProps.name);\n  if (width > 20 && height > 20 && nameSize.width < width && nameSize.height < height) {\n    text = (\n      <text x={x + 8} y={y + height / 2 + 7} fontSize={14}>\n        {nodeProps.name}\n      </text>\n    );\n  }\n\n  const colors = colorPanel || COLOR_PANEL;\n  return (\n    <g>\n      <Rectangle\n        fill={nodeProps.depth < 2 ? colors[index % colors.length] : 'rgba(255,255,255,0)'}\n        stroke=\"#fff\"\n        {...omit(nodeProps, ['children'])}\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n        onClick={onClick}\n        data-recharts-item-index={nodeProps.tooltipIndex}\n      />\n      {arrow}\n      {text}\n    </g>\n  );\n}\n\nfunction ContentItemWithEvents(props: ContentItemProps) {\n  const dispatch = useAppDispatch();\n  const activeCoordinate = props.nodeProps\n    ? {\n        x: props.nodeProps.x + props.nodeProps.width / 2,\n        y: props.nodeProps.y + props.nodeProps.height / 2,\n      }\n    : null;\n\n  const onMouseEnter = () => {\n    dispatch(\n      setActiveMouseOverItemIndex({\n        activeIndex: props.nodeProps.tooltipIndex,\n        activeDataKey: props.dataKey,\n        activeCoordinate,\n      }),\n    );\n  };\n  const onMouseLeave = () => {\n    // clearing state on mouseLeaveItem causes re-rendering issues\n    // we don't actually want to do this for TreeMap - we clear state when we leave the entire chart instead\n  };\n  const onClick = () => {\n    dispatch(\n      setActiveClickItemIndex({\n        activeIndex: props.nodeProps.tooltipIndex,\n        activeDataKey: props.dataKey,\n        activeCoordinate,\n      }),\n    );\n  };\n  return <ContentItem {...props} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} onClick={onClick} />;\n}\n\nfunction getTooltipEntrySettings({\n  props,\n  currentRoot,\n}: {\n  props: Props;\n  currentRoot: TreemapNode | null;\n}): TooltipPayloadConfiguration {\n  const { dataKey, nameKey, stroke, fill } = props;\n  return {\n    dataDefinedOnItem: currentRoot,\n    positions: undefined, // TODO I think Treemap has the capability of computing positions and supporting defaultIndex? Except it doesn't yet\n    settings: {\n      stroke,\n      strokeWidth: undefined,\n      fill,\n      dataKey,\n      nameKey,\n      name: undefined, // Each TreemapNode has its own name\n      hide: false,\n      type: undefined,\n      color: fill,\n      unit: '',\n    },\n  };\n}\n\n// Why is margin not a treemap prop? No clue. Probably it should be\nconst defaultTreemapMargin: Margin = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n};\n\ntype InternalTreemapProps = Props & {\n  dispatch: AppDispatch;\n};\n\nclass TreemapWithState extends PureComponent<InternalTreemapProps, State> {\n  static displayName = 'Treemap';\n\n  static defaultProps = {\n    aspectRatio: 0.5 * (1 + Math.sqrt(5)),\n    dataKey: 'value',\n    nameKey: 'name',\n    type: 'flat',\n    isAnimationActive: !Global.isSsr,\n    isUpdateAnimationActive: !Global.isSsr,\n    animationBegin: 0,\n    animationDuration: 1500,\n    animationEasing: 'linear',\n  };\n\n  state = {\n    ...defaultState,\n  };\n\n  static getDerivedStateFromProps(nextProps: Props, prevState: State): State {\n    if (\n      nextProps.data !== prevState.prevData ||\n      nextProps.type !== prevState.prevType ||\n      nextProps.width !== prevState.prevWidth ||\n      nextProps.height !== prevState.prevHeight ||\n      nextProps.dataKey !== prevState.prevDataKey ||\n      nextProps.aspectRatio !== prevState.prevAspectRatio\n    ) {\n      const root: TreemapNode = computeNode({\n        depth: 0,\n        // @ts-expect-error missing properties\n        node: { children: nextProps.data, x: 0, y: 0, width: nextProps.width, height: nextProps.height },\n        index: 0,\n        dataKey: nextProps.dataKey,\n        nameKey: nextProps.nameKey,\n      });\n      const formatRoot: TreemapNode = squarify(root, nextProps.aspectRatio);\n\n      return {\n        ...prevState,\n        formatRoot,\n        currentRoot: root,\n        nestIndex: [root],\n        prevAspectRatio: nextProps.aspectRatio,\n        prevData: nextProps.data,\n        prevWidth: nextProps.width,\n        prevHeight: nextProps.height,\n        prevDataKey: nextProps.dataKey,\n        prevType: nextProps.type,\n      };\n    }\n\n    return null;\n  }\n\n  handleMouseEnter(node: TreemapNode, e: any) {\n    e.persist();\n    const { onMouseEnter } = this.props;\n\n    if (onMouseEnter) {\n      onMouseEnter(node, e);\n    }\n  }\n\n  handleMouseLeave(node: TreemapNode, e: any) {\n    e.persist();\n    const { onMouseLeave } = this.props;\n\n    if (onMouseLeave) {\n      onMouseLeave(node, e);\n    }\n  }\n\n  handleAnimationEnd = () => {\n    const { onAnimationEnd } = this.props;\n    this.setState({ isAnimationFinished: true });\n\n    if (typeof onAnimationEnd === 'function') {\n      onAnimationEnd();\n    }\n  };\n\n  handleAnimationStart = () => {\n    const { onAnimationStart } = this.props;\n    this.setState({ isAnimationFinished: false });\n\n    if (typeof onAnimationStart === 'function') {\n      onAnimationStart();\n    }\n  };\n\n  handleClick(node: TreemapNode) {\n    const { onClick, type } = this.props;\n    if (type === 'nest' && node.children) {\n      const { width, height, dataKey, nameKey, aspectRatio } = this.props;\n      const root = computeNode({\n        depth: 0,\n        node: { ...node, x: 0, y: 0, width, height },\n        index: 0,\n        dataKey,\n        nameKey,\n        // with Treemap nesting, should this continue nesting the index or start from empty string?\n        nestedActiveTooltipIndex: node.tooltipIndex,\n      });\n\n      const formatRoot = squarify(root, aspectRatio);\n\n      const { nestIndex } = this.state;\n      nestIndex.push(node);\n\n      this.setState({\n        formatRoot,\n        currentRoot: root,\n        nestIndex,\n      });\n    }\n    if (onClick) {\n      onClick(node);\n    }\n  }\n\n  handleNestIndex(node: TreemapNode, i: number) {\n    let { nestIndex } = this.state;\n    const { width, height, dataKey, nameKey, aspectRatio } = this.props;\n    const root = computeNode({\n      depth: 0,\n      node: { ...node, x: 0, y: 0, width, height },\n      index: 0,\n      dataKey,\n      nameKey,\n      // with Treemap nesting, should this continue nesting the index or start from empty string?\n      nestedActiveTooltipIndex: node.tooltipIndex,\n    });\n\n    const formatRoot = squarify(root, aspectRatio);\n\n    nestIndex = nestIndex.slice(0, i + 1);\n    this.setState({\n      formatRoot,\n      currentRoot: node,\n      nestIndex,\n    });\n  }\n\n  renderItem(content: any, nodeProps: TreemapNode, isLeaf: boolean): React.ReactElement {\n    const {\n      isAnimationActive,\n      animationBegin,\n      animationDuration,\n      animationEasing,\n      isUpdateAnimationActive,\n      type,\n      colorPanel,\n      dataKey,\n    } = this.props;\n    const { isAnimationFinished } = this.state;\n    const { width, height, x, y, depth } = nodeProps;\n    const translateX = parseInt(`${(Math.random() * 2 - 1) * width}`, 10);\n    let event = {} as any;\n    if (isLeaf || type === 'nest') {\n      event = {\n        onMouseEnter: this.handleMouseEnter.bind(this, nodeProps),\n        onMouseLeave: this.handleMouseLeave.bind(this, nodeProps),\n        onClick: this.handleClick.bind(this, nodeProps),\n      };\n    }\n\n    if (!isAnimationActive) {\n      return (\n        <Layer {...event}>\n          <ContentItemWithEvents\n            content={content}\n            dataKey={dataKey}\n            nodeProps={{\n              ...nodeProps,\n              isAnimationActive: false,\n              isUpdateAnimationActive: false,\n              width,\n              height,\n              x,\n              y,\n            }}\n            type={type}\n            colorPanel={colorPanel}\n          />\n        </Layer>\n      );\n    }\n\n    return (\n      <CSSTransitionAnimate\n        from={`translate(${translateX}px, ${translateX}px)`}\n        to=\"translate(0, 0)\"\n        attributeName=\"transform\"\n        begin={animationBegin}\n        easing={animationEasing}\n        isActive={isAnimationActive}\n        duration={animationDuration}\n        onAnimationStart={this.handleAnimationStart}\n        onAnimationEnd={this.handleAnimationEnd}\n      >\n        {style => (\n          <Layer {...event} style={style}>\n            {/* when animation is in progress , only render depth=1 nodes */}\n            {/* Why is his condition here, after Smooth and Smooth render? Why not return earlier, before Smooth is rendered? */}\n            {depth > 2 && !isAnimationFinished ? null : (\n              <ContentItemWithEvents\n                content={content}\n                dataKey={dataKey}\n                nodeProps={{\n                  ...nodeProps,\n                  isAnimationActive,\n                  isUpdateAnimationActive: !isUpdateAnimationActive,\n                  width,\n                  height,\n                  x,\n                  y,\n                }}\n                type={type}\n                colorPanel={colorPanel}\n              />\n            )}\n          </Layer>\n        )}\n      </CSSTransitionAnimate>\n    );\n  }\n\n  renderNode(root: TreemapNode, node: TreemapNode): React.ReactElement {\n    const { content, type } = this.props;\n    const nodeProps = { ...svgPropertiesNoEvents(this.props), ...node, root };\n    const isLeaf = !node.children || !node.children.length;\n\n    const { currentRoot } = this.state;\n    const isCurrentRootChild = (currentRoot.children || []).filter(\n      (item: TreemapNode) => item.depth === node.depth && item.name === node.name,\n    );\n\n    if (!isCurrentRootChild.length && root.depth && type === 'nest') {\n      return null;\n    }\n\n    return (\n      <Layer\n        key={`recharts-treemap-node-${nodeProps.x}-${nodeProps.y}-${nodeProps.name}`}\n        className={`recharts-treemap-depth-${node.depth}`}\n      >\n        {this.renderItem(content, nodeProps, isLeaf)}\n        {node.children && node.children.length\n          ? node.children.map((child: TreemapNode) => this.renderNode(node, child))\n          : null}\n      </Layer>\n    );\n  }\n\n  renderAllNodes(): React.ReactElement {\n    const { formatRoot } = this.state;\n\n    if (!formatRoot) {\n      return null;\n    }\n\n    return this.renderNode(formatRoot, formatRoot);\n  }\n\n  // render nest treemap\n  renderNestIndex(): React.ReactElement {\n    const { nameKey, nestIndexContent } = this.props;\n    const { nestIndex } = this.state;\n\n    return (\n      <div className=\"recharts-treemap-nest-index-wrapper\" style={{ marginTop: '8px', textAlign: 'center' }}>\n        {nestIndex.map((item: TreemapNode, i: number) => {\n          // TODO need to verify nameKey type\n          const name = get(item, nameKey as string, 'root');\n          let content = null;\n          if (React.isValidElement(nestIndexContent)) {\n            content = React.cloneElement(nestIndexContent, item, i);\n          }\n          if (typeof nestIndexContent === 'function') {\n            content = nestIndexContent(item, i);\n          } else {\n            content = name;\n          }\n\n          return (\n            // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n            <div\n              onClick={this.handleNestIndex.bind(this, item, i)}\n              key={`nest-index-${uniqueId()}`}\n              className=\"recharts-treemap-nest-index-box\"\n              style={{\n                cursor: 'pointer',\n                display: 'inline-block',\n                padding: '0 7px',\n                background: '#000',\n                color: '#fff',\n                marginRight: '3px',\n              }}\n            >\n              {content}\n            </div>\n          );\n        })}\n      </div>\n    );\n  }\n\n  handleTouchMove = (_state: never, e: React.TouchEvent<SVGElement>) => {\n    const touchEvent = e.touches[0];\n    const target = document.elementFromPoint(touchEvent.clientX, touchEvent.clientY);\n    if (!target || !target.getAttribute) {\n      return;\n    }\n    const itemIndex = target.getAttribute('data-recharts-item-index');\n    const activeNode = treemapPayloadSearcher(this.state.formatRoot, itemIndex);\n    if (!activeNode) {\n      return;\n    }\n\n    const { dataKey, dispatch } = this.props;\n\n    const activeCoordinate = {\n      x: activeNode.x + activeNode.width / 2,\n      y: activeNode.y + activeNode.height / 2,\n    };\n\n    // Treemap does not support onTouchMove prop, but it could\n    // onTouchMove?.(activeNode, Number(itemIndex), e);\n    dispatch(\n      setActiveMouseOverItemIndex({\n        activeIndex: itemIndex,\n        activeDataKey: dataKey,\n        activeCoordinate,\n      }),\n    );\n  };\n\n  render() {\n    const { width, height, className, style, children, type, ...others } = this.props;\n    const attrs = svgPropertiesNoEvents(others);\n\n    return (\n      <TooltipPortalContext.Provider value={this.state.tooltipPortal}>\n        <SetTooltipEntrySettings\n          fn={getTooltipEntrySettings}\n          args={{ props: this.props, currentRoot: this.state.currentRoot }}\n        />\n        <RechartsWrapper\n          className={className}\n          style={style}\n          width={width}\n          height={height}\n          ref={(node: HTMLDivElement) => {\n            if (this.state.tooltipPortal == null) {\n              this.setState({ tooltipPortal: node });\n            }\n          }}\n          onMouseEnter={undefined}\n          onMouseLeave={undefined}\n          onClick={undefined}\n          onMouseMove={undefined}\n          onMouseDown={undefined}\n          onMouseUp={undefined}\n          onContextMenu={undefined}\n          onDoubleClick={undefined}\n          onTouchStart={undefined}\n          onTouchMove={this.handleTouchMove}\n          onTouchEnd={undefined}\n        >\n          <Surface {...attrs} width={width} height={type === 'nest' ? height - 30 : height}>\n            {this.renderAllNodes()}\n            {children}\n          </Surface>\n          {type === 'nest' && this.renderNestIndex()}\n        </RechartsWrapper>\n      </TooltipPortalContext.Provider>\n    );\n  }\n}\n\nfunction TreemapDispatchInject(props: Props) {\n  const dispatch = useAppDispatch();\n  return <TreemapWithState {...props} dispatch={dispatch} />;\n}\n\nexport function Treemap(props: Props) {\n  const { width, height } = props;\n\n  if (!isPositiveNumber(width) || !isPositiveNumber(height)) {\n    return null;\n  }\n\n  return (\n    <RechartsStoreProvider preloadedState={{ options }} reduxStoreName={props.className ?? 'Treemap'}>\n      <ReportChartSize width={width} height={height} />\n      <ReportChartMargin margin={defaultTreemapMargin} />\n      <TreemapDispatchInject {...props} />\n    </RechartsStoreProvider>\n  );\n}\n","import * as React from 'react';\nimport { MouseEvent, PureComponent, ReactElement, SVGProps } from 'react';\nimport maxBy from 'es-toolkit/compat/maxBy';\nimport sumBy from 'es-toolkit/compat/sumBy';\nimport get from 'es-toolkit/compat/get';\nimport { Surface } from '../container/Surface';\nimport { Layer } from '../container/Layer';\nimport { Rectangle, Props as RectangleProps } from '../shape/Rectangle';\nimport { shallowEqual } from '../util/ShallowEqual';\nimport { filterProps } from '../util/ReactUtils';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport { Margin, DataKey, SankeyLink, SankeyNode } from '../util/types';\nimport { ReportChartMargin, ReportChartSize } from '../context/chartLayoutContext';\nimport { TooltipPortalContext } from '../context/tooltipPortalContext';\nimport { RechartsWrapper } from './RechartsWrapper';\nimport { RechartsStoreProvider } from '../state/RechartsStoreProvider';\nimport { useAppDispatch } from '../state/hooks';\nimport {\n  mouseLeaveItem,\n  setActiveClickItemIndex,\n  setActiveMouseOverItemIndex,\n  TooltipIndex,\n  TooltipPayloadConfiguration,\n  TooltipPayloadSearcher,\n} from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { ChartOptions } from '../state/optionsSlice';\nimport { SetComputedData } from '../context/chartDataContext';\nimport { isPositiveNumber } from '../util/isWellBehavedNumber';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\n\nconst interpolationGenerator = (a: number, b: number) => {\n  const ka = +a;\n  const kb = b - ka;\n  return (t: number) => ka + kb * t;\n};\n\nconst centerY = (node: SankeyNode) => node.y + node.dy / 2;\n\nconst getValue = (entry: LinkDataItem | SankeyNode): number => (entry && entry.value) || 0;\n\nconst getSumOfIds = (links: LinkDataItem[], ids: number[]): number =>\n  ids.reduce((result, id) => result + getValue(links[id]), 0);\n\nconst getSumWithWeightedSource = (tree: SankeyNode[], links: SankeyLink[], ids: number[]) =>\n  ids.reduce((result, id) => {\n    const link = links[id];\n    const sourceNode = tree[link.source];\n\n    return result + centerY(sourceNode) * getValue(links[id]);\n  }, 0);\n\nconst getSumWithWeightedTarget = (tree: SankeyNode[], links: SankeyLink[], ids: number[]) =>\n  ids.reduce((result: number, id: number) => {\n    const link = links[id];\n    const targetNode = tree[link.target];\n\n    return result + centerY(targetNode) * getValue(links[id]);\n  }, 0);\n\nconst ascendingY = (a: { y: number }, b: { y: number }) => a.y - b.y;\n\nconst searchTargetsAndSources = (links: LinkDataItem[], id: number) => {\n  const sourceNodes: number[] = [];\n  const sourceLinks: number[] = [];\n  const targetNodes: number[] = [];\n  const targetLinks: number[] = [];\n\n  for (let i = 0, len = links.length; i < len; i++) {\n    const link = links[i];\n\n    if (link.source === id) {\n      targetNodes.push(link.target);\n      targetLinks.push(i);\n    }\n\n    if (link.target === id) {\n      sourceNodes.push(link.source);\n      sourceLinks.push(i);\n    }\n  }\n\n  return { sourceNodes, sourceLinks, targetLinks, targetNodes };\n};\n\nconst updateDepthOfTargets = (tree: SankeyNode[], curNode: SankeyNode) => {\n  const { targetNodes } = curNode;\n\n  for (let i = 0, len = targetNodes.length; i < len; i++) {\n    const target = tree[targetNodes[i]];\n\n    if (target) {\n      target.depth = Math.max(curNode.depth + 1, target.depth);\n\n      updateDepthOfTargets(tree, target);\n    }\n  }\n};\n\nconst getNodesTree = (\n  { nodes, links }: SankeyData,\n  width: number,\n  nodeWidth: number,\n): { tree: SankeyNode[]; maxDepth: number } => {\n  const tree = nodes.map((entry: SankeyNode, index: number) => {\n    const result = searchTargetsAndSources(links, index);\n\n    return {\n      ...entry,\n      ...result,\n      value: Math.max(getSumOfIds(links, result.sourceLinks), getSumOfIds(links, result.targetLinks)),\n      depth: 0,\n    };\n  });\n\n  for (let i = 0, len = tree.length; i < len; i++) {\n    const node = tree[i];\n\n    if (!node.sourceNodes.length) {\n      updateDepthOfTargets(tree, node);\n    }\n  }\n  const maxDepth = maxBy(tree, (entry: SankeyNode) => entry.depth).depth;\n\n  if (maxDepth >= 1) {\n    const childWidth = (width - nodeWidth) / maxDepth;\n    for (let i = 0, len = tree.length; i < len; i++) {\n      const node = tree[i];\n\n      if (!node.targetNodes.length) {\n        node.depth = maxDepth;\n      }\n      node.x = node.depth * childWidth;\n      node.dx = nodeWidth;\n    }\n  }\n\n  return { tree, maxDepth };\n};\n\nconst getDepthTree = (tree: SankeyNode[]): SankeyNode[][] => {\n  const result: SankeyNode[][] = [];\n\n  for (let i = 0, len = tree.length; i < len; i++) {\n    const node = tree[i];\n\n    if (!result[node.depth]) {\n      result[node.depth] = [];\n    }\n\n    result[node.depth].push(node);\n  }\n\n  return result;\n};\n\nconst updateYOfTree = (\n  depthTree: SankeyNode[][],\n  height: number,\n  nodePadding: number,\n  links: LinkDataItem[],\n): SankeyLink[] => {\n  const yRatio: number = Math.min(\n    ...depthTree.map(nodes => (height - (nodes.length - 1) * nodePadding) / sumBy(nodes, getValue)),\n  );\n\n  for (let d = 0, maxDepth = depthTree.length; d < maxDepth; d++) {\n    for (let i = 0, len = depthTree[d].length; i < len; i++) {\n      const node = depthTree[d][i];\n\n      node.y = i;\n      node.dy = node.value * yRatio;\n    }\n  }\n\n  return links.map(link => ({ ...link, dy: getValue(link) * yRatio }));\n};\n\nconst resolveCollisions = (depthTree: SankeyNode[][], height: number, nodePadding: number, sort = true) => {\n  for (let i = 0, len = depthTree.length; i < len; i++) {\n    const nodes = depthTree[i];\n    const n = nodes.length;\n\n    // Sort by the value of y\n    if (sort) {\n      nodes.sort(ascendingY);\n    }\n\n    let y0 = 0;\n    for (let j = 0; j < n; j++) {\n      const node = nodes[j];\n      const dy = y0 - node.y;\n\n      if (dy > 0) {\n        node.y += dy;\n      }\n\n      y0 = node.y + node.dy + nodePadding;\n    }\n\n    y0 = height + nodePadding;\n    for (let j = n - 1; j >= 0; j--) {\n      const node = nodes[j];\n      const dy = node.y + node.dy + nodePadding - y0;\n\n      if (dy > 0) {\n        node.y -= dy;\n        y0 = node.y;\n      } else {\n        break;\n      }\n    }\n  }\n};\n\nconst relaxLeftToRight = (tree: SankeyNode[], depthTree: SankeyNode[][], links: SankeyLink[], alpha: number) => {\n  for (let i = 0, maxDepth = depthTree.length; i < maxDepth; i++) {\n    const nodes = depthTree[i];\n\n    for (let j = 0, len = nodes.length; j < len; j++) {\n      const node = nodes[j];\n\n      if (node.sourceLinks.length) {\n        const sourceSum = getSumOfIds(links, node.sourceLinks);\n        const weightedSum = getSumWithWeightedSource(tree, links, node.sourceLinks);\n        const y = weightedSum / sourceSum;\n\n        node.y += (y - centerY(node)) * alpha;\n      }\n    }\n  }\n};\nconst relaxRightToLeft = (tree: SankeyNode[], depthTree: SankeyNode[][], links: SankeyLink[], alpha: number) => {\n  for (let i = depthTree.length - 1; i >= 0; i--) {\n    const nodes = depthTree[i];\n\n    for (let j = 0, len = nodes.length; j < len; j++) {\n      const node = nodes[j];\n\n      if (node.targetLinks.length) {\n        const targetSum = getSumOfIds(links, node.targetLinks);\n        const weightedSum = getSumWithWeightedTarget(tree, links, node.targetLinks);\n        const y = weightedSum / targetSum;\n\n        node.y += (y - centerY(node)) * alpha;\n      }\n    }\n  }\n};\n\nconst updateYOfLinks = (tree: SankeyNode[], links: SankeyLink[]): void => {\n  for (let i = 0, len = tree.length; i < len; i++) {\n    const node = tree[i];\n    let sy = 0;\n    let ty = 0;\n\n    node.targetLinks.sort((a, b) => tree[links[a].target].y - tree[links[b].target].y);\n    node.sourceLinks.sort((a, b) => tree[links[a].source].y - tree[links[b].source].y);\n\n    for (let j = 0, tLen = node.targetLinks.length; j < tLen; j++) {\n      const link = links[node.targetLinks[j]];\n\n      if (link) {\n        link.sy = sy;\n        sy += link.dy;\n      }\n    }\n\n    for (let j = 0, sLen = node.sourceLinks.length; j < sLen; j++) {\n      const link = links[node.sourceLinks[j]];\n\n      if (link) {\n        link.ty = ty;\n        ty += link.dy;\n      }\n    }\n  }\n};\n\nconst computeData = ({\n  data,\n  width,\n  height,\n  iterations,\n  nodeWidth,\n  nodePadding,\n  sort,\n}: {\n  data: SankeyData;\n  width: number;\n  height: number;\n  iterations: number;\n  nodeWidth: number;\n  nodePadding: number;\n  sort: boolean;\n}): {\n  nodes: SankeyNode[];\n  links: SankeyLink[];\n} => {\n  const { links } = data;\n  const { tree } = getNodesTree(data, width, nodeWidth);\n  const depthTree = getDepthTree(tree);\n  const newLinks = updateYOfTree(depthTree, height, nodePadding, links);\n\n  resolveCollisions(depthTree, height, nodePadding, sort);\n\n  let alpha = 1;\n  for (let i = 1; i <= iterations; i++) {\n    relaxRightToLeft(tree, depthTree, newLinks, (alpha *= 0.99));\n\n    resolveCollisions(depthTree, height, nodePadding, sort);\n\n    relaxLeftToRight(tree, depthTree, newLinks, alpha);\n\n    resolveCollisions(depthTree, height, nodePadding, sort);\n  }\n\n  updateYOfLinks(tree, newLinks);\n\n  return { nodes: tree, links: newLinks };\n};\n\nconst getCoordinateOfTooltip = (item: NodeProps | LinkProps, type: SankeyElementType) => {\n  if (type === 'node') {\n    return { x: +item.x + +item.width / 2, y: +item.y + +item.height / 2 };\n  }\n\n  return (\n    'sourceX' in item && {\n      x: (item.sourceX + item.targetX) / 2,\n      y: (item.sourceY + item.targetY) / 2,\n    }\n  );\n};\n\ntype SankeyTooltipPayload = { payload: SankeyNode | SankeyLink; name: unknown; value: unknown };\nconst getPayloadOfTooltip = (\n  item: { payload: SankeyNode | SankeyLink },\n  type: SankeyElementType,\n  nameKey: DataKey<any>,\n): SankeyTooltipPayload => {\n  const { payload } = item;\n  if (type === 'node') {\n    return {\n      payload,\n      name: getValueByDataKey(payload, nameKey, ''),\n      value: getValueByDataKey(payload, 'value'),\n    };\n  }\n  if ('source' in payload && payload.source && payload.target) {\n    const sourceName = getValueByDataKey(payload.source, nameKey, '');\n    const targetName = getValueByDataKey(payload.target, nameKey, '');\n\n    return {\n      payload,\n      name: `${sourceName} - ${targetName}`,\n      value: getValueByDataKey(payload, 'value'),\n    };\n  }\n\n  return null;\n};\n\nexport const sankeyPayloadSearcher: TooltipPayloadSearcher<any, any> = (\n  _: SankeyData,\n  activeIndex: TooltipIndex,\n  computedData: { links: SankeyLink[]; nodes: SankeyNode[] },\n  nameKey,\n): SankeyTooltipPayload | undefined => {\n  if (activeIndex == null || typeof activeIndex !== 'string') {\n    return undefined;\n  }\n  const splitIndex = activeIndex.split('-');\n  const [targetType, index] = splitIndex;\n  const item = get(computedData, `${targetType}s[${index}]`);\n  if (item) {\n    const payload = getPayloadOfTooltip(item, targetType as SankeyElementType, nameKey);\n    return payload;\n  }\n  return undefined;\n};\n\nconst options: ChartOptions = {\n  chartName: 'Sankey',\n  defaultTooltipEventType: 'item',\n  validateTooltipEventTypes: ['item'],\n  tooltipPayloadSearcher: sankeyPayloadSearcher,\n  eventEmitter: undefined,\n};\n\nfunction getTooltipEntrySettings(props: Props): TooltipPayloadConfiguration {\n  const { dataKey, nameKey, stroke, strokeWidth, fill, name, data } = props;\n  return {\n    dataDefinedOnItem: data,\n    positions: undefined,\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      dataKey,\n      name,\n      nameKey,\n      color: fill,\n      unit: '', // Sankey does not have unit, why?\n    },\n  };\n}\n\ninterface LinkDataItem {\n  source: number;\n  target: number;\n  value: number;\n}\n\nexport interface NodeProps extends Omit<SVGProps<SVGRectElement>, 'height' | 'width'> {\n  height: number;\n  width: number;\n  payload: SankeyNode;\n  index: number;\n  x: number;\n  y: number;\n}\n\nexport interface LinkProps extends SVGProps<SVGPathElement> {\n  sourceX: number;\n  targetX: number;\n  sourceY: number;\n  targetY: number;\n  sourceControlX: number;\n  targetControlX: number;\n  sourceRelativeY: number;\n  targetRelativeY: number;\n  linkWidth: number;\n  index: number;\n  // payload is SankeyLink except source and target are now Node objects instead of numbers\n  payload: Omit<SankeyLink, 'source' | 'target'> & { source: SankeyNode; target: SankeyNode };\n}\n\nexport interface SankeyData {\n  nodes: any[];\n  links: LinkDataItem[];\n}\n\n// TODO: improve types - NodeOptions uses SankeyNode, LinkOptions uses LinkProps. Standardize.\ntype SankeyNodeOptions =\n  | ReactElement<SVGProps<SVGRectElement>>\n  | ((props: NodeProps) => ReactElement<SVGProps<SVGRectElement>>)\n  | RectangleProps;\n\ntype SankeyLinkOptions =\n  | ReactElement<SVGProps<SVGPathElement>>\n  | ((props: LinkProps) => ReactElement<SVGProps<SVGPathElement>>)\n  | SVGProps<SVGPathElement>;\n\ninterface SankeyProps {\n  nameKey?: DataKey<any>;\n  dataKey?: DataKey<any>;\n  width?: number;\n  height?: number;\n  data: SankeyData;\n  nodePadding?: number;\n  nodeWidth?: number;\n  linkCurvature?: number;\n  iterations?: number;\n  // TODO object func\n  node?: SankeyNodeOptions;\n  link?: SankeyLinkOptions;\n  style?: React.CSSProperties;\n  className?: string;\n  children?: any;\n  margin?: Margin;\n  onClick?: (item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent) => void;\n  onMouseEnter?: (item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent) => void;\n  onMouseLeave?: (item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent) => void;\n  sort?: boolean;\n}\n\ntype Props = SVGProps<SVGSVGElement> & SankeyProps;\n\ntype SankeyElementType = 'node' | 'link';\n\ninterface State {\n  nodes: SankeyNode[];\n  links: SankeyLink[];\n  modifiedNodes: NodeProps[];\n  modifiedLinks: LinkProps[];\n  sort?: boolean;\n\n  prevData?: SankeyData;\n  prevWidth?: number;\n  prevHeight?: number;\n  prevMargin?: Margin;\n  prevIterations?: number;\n  prevNodeWidth?: number;\n  prevNodePadding?: number;\n  prevSort?: boolean;\n\n  tooltipPortal?: HTMLElement | null;\n}\n\n// Why is margin not a Sankey prop? No clue. Probably it should be\nconst defaultSankeyMargin: Margin = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n};\n\nfunction renderLinkItem(option: SankeyLinkOptions, props: LinkProps) {\n  if (React.isValidElement(option)) {\n    return React.cloneElement(option, props);\n  }\n  if (typeof option === 'function') {\n    return option(props);\n  }\n\n  const { sourceX, sourceY, sourceControlX, targetX, targetY, targetControlX, linkWidth, ...others } = props;\n\n  return (\n    <path\n      className=\"recharts-sankey-link\"\n      d={`\n          M${sourceX},${sourceY}\n          C${sourceControlX},${sourceY} ${targetControlX},${targetY} ${targetX},${targetY}\n        `}\n      fill=\"none\"\n      stroke=\"#333\"\n      strokeWidth={linkWidth}\n      strokeOpacity=\"0.2\"\n      {...svgPropertiesNoEvents(others)}\n    />\n  );\n}\n\nconst buildLinkProps = ({\n  link,\n  nodes,\n  left,\n  top,\n  i,\n  linkContent,\n  linkCurvature,\n}: {\n  link: SankeyLink;\n  nodes: SankeyNode[];\n  top: number;\n  left: number;\n  linkContent: SankeyLinkOptions;\n  i: number;\n  linkCurvature: number;\n}): LinkProps => {\n  const { sy: sourceRelativeY, ty: targetRelativeY, dy: linkWidth } = link;\n  const sourceNode = nodes[link.source];\n  const targetNode = nodes[link.target];\n  const sourceX = sourceNode.x + sourceNode.dx + left;\n  const targetX = targetNode.x + left;\n  const interpolationFunc = interpolationGenerator(sourceX, targetX);\n  const sourceControlX = interpolationFunc(linkCurvature);\n  const targetControlX = interpolationFunc(1 - linkCurvature);\n  const sourceY = sourceNode.y + sourceRelativeY + linkWidth / 2 + top;\n  const targetY = targetNode.y + targetRelativeY + linkWidth / 2 + top;\n\n  const linkProps: LinkProps = {\n    sourceX,\n    targetX,\n    sourceY,\n    targetY,\n    sourceControlX,\n    targetControlX,\n    sourceRelativeY,\n    targetRelativeY,\n    linkWidth,\n    index: i,\n    payload: { ...link, source: sourceNode, target: targetNode },\n    ...filterProps(linkContent, false),\n  };\n\n  return linkProps;\n};\n\nfunction SankeyLinkElement({\n  props,\n  i,\n  linkContent,\n  onMouseEnter,\n  onMouseLeave,\n  onClick,\n  dataKey,\n}: {\n  props: LinkProps;\n  i: number;\n  linkContent: SankeyLinkOptions;\n  onMouseEnter: (linkProps: LinkProps, e: MouseEvent) => void;\n  onMouseLeave: (linkProps: LinkProps, e: MouseEvent) => void;\n  onClick: (linkProps: LinkProps, e: MouseEvent) => void;\n  dataKey: DataKey<any>;\n}) {\n  const activeCoordinate = getCoordinateOfTooltip(props, 'link');\n  const activeIndex = `link-${i}`;\n\n  const dispatch = useAppDispatch();\n\n  const events = {\n    onMouseEnter: (e: MouseEvent) => {\n      dispatch(\n        setActiveMouseOverItemIndex({\n          activeIndex,\n          activeDataKey: dataKey,\n          activeCoordinate,\n        }),\n      );\n      onMouseEnter(props, e);\n    },\n    onMouseLeave: (e: MouseEvent) => {\n      dispatch(mouseLeaveItem());\n      onMouseLeave(props, e);\n    },\n    onClick: (e: MouseEvent) => {\n      dispatch(\n        setActiveClickItemIndex({\n          activeIndex,\n          activeDataKey: dataKey,\n          activeCoordinate,\n        }),\n      );\n      onClick(props, e);\n    },\n  };\n\n  return <Layer {...events}>{renderLinkItem(linkContent, props)}</Layer>;\n}\n\nfunction AllSankeyLinkElements({\n  modifiedLinks,\n  links,\n  linkContent,\n  onMouseEnter,\n  onMouseLeave,\n  onClick,\n  dataKey,\n}: {\n  modifiedLinks: LinkProps[];\n  links: SankeyLink[];\n  linkContent: SankeyLinkOptions;\n  onMouseEnter: (linkProps: LinkProps, e: MouseEvent) => void;\n  onMouseLeave: (linkProps: LinkProps, e: MouseEvent) => void;\n  onClick: (linkProps: LinkProps, e: MouseEvent) => void;\n  dataKey: DataKey<any>;\n}) {\n  return (\n    <Layer className=\"recharts-sankey-links\" key=\"recharts-sankey-links\">\n      {links.map((link: SankeyLink, i: number) => {\n        const linkProps = modifiedLinks[i];\n        return (\n          <SankeyLinkElement\n            key={`link-${link.source}-${link.target}-${link.value}`}\n            props={linkProps}\n            linkContent={linkContent}\n            i={i}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n            onClick={onClick}\n            dataKey={dataKey}\n          />\n        );\n      })}\n    </Layer>\n  );\n}\n\nfunction renderNodeItem(option: SankeyNodeOptions, props: NodeProps) {\n  if (React.isValidElement(option)) {\n    return React.cloneElement(option, props);\n  }\n  if (typeof option === 'function') {\n    return option(props);\n  }\n\n  return (\n    // @ts-expect-error recharts radius is not compatible with SVG radius\n    <Rectangle className=\"recharts-sankey-node\" fill=\"#0088fe\" fillOpacity=\"0.8\" {...svgPropertiesNoEvents(props)} />\n  );\n}\n\nconst buildNodeProps = ({\n  node,\n  nodeContent,\n  top,\n  left,\n  i,\n}: {\n  node: SankeyNode;\n  nodeContent: SankeyNodeOptions;\n  top: number;\n  left: number;\n  i: number;\n}) => {\n  const { x, y, dx, dy } = node;\n  const nodeProps: NodeProps = {\n    ...filterProps(nodeContent, false),\n    x: x + left,\n    y: y + top,\n    width: dx,\n    height: dy,\n    index: i,\n    payload: node,\n  };\n  return nodeProps;\n};\n\nfunction NodeElement({\n  props,\n  nodeContent,\n  i,\n  onMouseEnter,\n  onMouseLeave,\n  onClick,\n  dataKey,\n}: {\n  props: NodeProps;\n  nodeContent: SankeyNodeOptions;\n  i: number;\n  onMouseEnter: (nodeProps: NodeProps, e: MouseEvent) => void;\n  onMouseLeave: (nodeProps: NodeProps, e: MouseEvent) => void;\n  onClick: (nodeProps: NodeProps, e: MouseEvent) => void;\n  dataKey: DataKey<any>;\n}) {\n  const dispatch = useAppDispatch();\n\n  const activeCoordinate = getCoordinateOfTooltip(props, 'node');\n  const activeIndex = `node-${i}`;\n\n  const events = {\n    onMouseEnter: (e: MouseEvent) => {\n      dispatch(\n        setActiveMouseOverItemIndex({\n          activeIndex,\n          activeDataKey: dataKey,\n          activeCoordinate,\n        }),\n      );\n      onMouseEnter(props, e);\n    },\n    onMouseLeave: (e: MouseEvent) => {\n      dispatch(mouseLeaveItem());\n      onMouseLeave(props, e);\n    },\n    onClick: (e: MouseEvent) => {\n      dispatch(\n        setActiveClickItemIndex({\n          activeIndex,\n          activeDataKey: dataKey,\n          activeCoordinate,\n        }),\n      );\n      onClick(props, e);\n    },\n  };\n\n  return <Layer {...events}>{renderNodeItem(nodeContent, props)}</Layer>;\n}\n\nfunction AllNodeElements({\n  modifiedNodes,\n  nodeContent,\n  onMouseEnter,\n  onMouseLeave,\n  onClick,\n  dataKey,\n}: {\n  modifiedNodes: NodeProps[];\n  nodeContent: SankeyNodeOptions;\n  onMouseEnter: (nodeProps: NodeProps, e: MouseEvent) => void;\n  onMouseLeave: (nodeProps: NodeProps, e: MouseEvent) => void;\n  onClick: (nodeProps: NodeProps, e: MouseEvent) => void;\n  dataKey: DataKey<any>;\n}) {\n  return (\n    <Layer className=\"recharts-sankey-nodes\" key=\"recharts-sankey-nodes\">\n      {modifiedNodes.map((modifiedNode, i) => {\n        return (\n          <NodeElement\n            props={modifiedNode}\n            nodeContent={nodeContent}\n            i={i}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n            onClick={onClick}\n            dataKey={dataKey}\n          />\n        );\n      })}\n    </Layer>\n  );\n}\n\nexport class Sankey extends PureComponent<Props, State> {\n  static displayName = 'Sankey';\n\n  static defaultProps = {\n    nameKey: 'name',\n    dataKey: 'value',\n    nodePadding: 10,\n    nodeWidth: 10,\n    linkCurvature: 0.5,\n    iterations: 32,\n    margin: { top: 5, right: 5, bottom: 5, left: 5 },\n    sort: true,\n  };\n\n  state: State = {\n    nodes: [],\n    links: [],\n    modifiedLinks: [],\n    modifiedNodes: [],\n  };\n\n  static getDerivedStateFromProps(nextProps: Props, prevState: State): State {\n    const { data, width, height, margin, iterations, nodeWidth, nodePadding, sort, linkCurvature } = nextProps;\n\n    if (\n      data !== prevState.prevData ||\n      width !== prevState.prevWidth ||\n      height !== prevState.prevHeight ||\n      !shallowEqual(margin, prevState.prevMargin) ||\n      iterations !== prevState.prevIterations ||\n      nodeWidth !== prevState.prevNodeWidth ||\n      nodePadding !== prevState.prevNodePadding ||\n      sort !== prevState.sort\n    ) {\n      const contentWidth = width - ((margin && margin.left) || 0) - ((margin && margin.right) || 0);\n      const contentHeight = height - ((margin && margin.top) || 0) - ((margin && margin.bottom) || 0);\n      const { links, nodes } = computeData({\n        data,\n        width: contentWidth,\n        height: contentHeight,\n        iterations,\n        nodeWidth,\n        nodePadding,\n        sort,\n      });\n\n      const top = get(margin, 'top') || 0;\n      const left = get(margin, 'left') || 0;\n      const modifiedLinks = links.map((link: SankeyLink, i) => {\n        return buildLinkProps({ link, nodes, i, top, left, linkContent: nextProps.link, linkCurvature });\n      });\n\n      const modifiedNodes = nodes.map((node: SankeyNode, i) => {\n        return buildNodeProps({\n          node,\n          nodeContent: nextProps.node,\n          i,\n          top,\n          left,\n        });\n      });\n\n      return {\n        ...prevState,\n        nodes,\n        links,\n        modifiedLinks,\n        modifiedNodes,\n        prevData: data,\n        prevWidth: iterations,\n        prevHeight: height,\n        prevMargin: margin,\n        prevNodePadding: nodePadding,\n        prevNodeWidth: nodeWidth,\n        prevIterations: iterations,\n        prevSort: sort,\n      };\n    }\n\n    return null;\n  }\n\n  handleMouseEnter(item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent) {\n    const { onMouseEnter } = this.props;\n    if (onMouseEnter) {\n      onMouseEnter(item, type, e);\n    }\n  }\n\n  handleMouseLeave(item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent) {\n    const { onMouseLeave } = this.props;\n\n    if (onMouseLeave) {\n      onMouseLeave(item, type, e);\n    }\n  }\n\n  handleClick(item: NodeProps | LinkProps, type: SankeyElementType, e: MouseEvent) {\n    const { onClick } = this.props;\n\n    if (onClick) onClick(item, type, e);\n  }\n\n  render() {\n    const { width, height, className, style, children, ...others } = this.props;\n\n    if (!isPositiveNumber(width) || !isPositiveNumber(height)) {\n      return null;\n    }\n\n    const { links, modifiedNodes, modifiedLinks } = this.state;\n    const attrs = svgPropertiesNoEvents(others);\n\n    return (\n      <RechartsStoreProvider preloadedState={{ options }} reduxStoreName={className ?? 'Sankey'}>\n        <SetTooltipEntrySettings fn={getTooltipEntrySettings} args={this.props} />\n        <SetComputedData computedData={{ links: modifiedLinks, nodes: modifiedNodes }} />\n        <ReportChartSize width={width} height={height} />\n        <ReportChartMargin margin={defaultSankeyMargin} />\n        <TooltipPortalContext.Provider value={this.state.tooltipPortal}>\n          <RechartsWrapper\n            className={className}\n            style={style}\n            width={width}\n            height={height}\n            ref={(node: HTMLDivElement) => {\n              if (this.state.tooltipPortal == null) {\n                this.setState({ tooltipPortal: node });\n              }\n            }}\n            onMouseEnter={undefined}\n            onMouseLeave={undefined}\n            onClick={undefined}\n            onMouseMove={undefined}\n            onMouseDown={undefined}\n            onMouseUp={undefined}\n            onContextMenu={undefined}\n            onDoubleClick={undefined}\n            onTouchStart={undefined}\n            onTouchMove={undefined}\n            onTouchEnd={undefined}\n          >\n            <Surface {...attrs} width={width} height={height}>\n              {children}\n              <AllSankeyLinkElements\n                links={links}\n                modifiedLinks={modifiedLinks}\n                linkContent={this.props.link}\n                dataKey={this.props.dataKey}\n                onMouseEnter={(linkProps: LinkProps, e: MouseEvent) => this.handleMouseEnter(linkProps, 'link', e)}\n                onMouseLeave={(linkProps: LinkProps, e: MouseEvent) => this.handleMouseLeave(linkProps, 'link', e)}\n                onClick={(linkProps: LinkProps, e: MouseEvent) => this.handleClick(linkProps, 'link', e)}\n              />\n              <AllNodeElements\n                modifiedNodes={modifiedNodes}\n                nodeContent={this.props.node}\n                dataKey={this.props.dataKey}\n                onMouseEnter={(nodeProps: NodeProps, e: MouseEvent) => this.handleMouseEnter(nodeProps, 'node', e)}\n                onMouseLeave={(nodeProps: NodeProps, e: MouseEvent) => this.handleMouseLeave(nodeProps, 'node', e)}\n                onClick={(nodeProps: NodeProps, e: MouseEvent) => this.handleClick(nodeProps, 'node', e)}\n              />\n            </Surface>\n          </RechartsWrapper>\n        </TooltipPortalContext.Provider>\n      </RechartsStoreProvider>\n    );\n  }\n}\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { PolarChartProps, TooltipEventType } from '../util/types';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { PolarChart } from './PolarChart';\n\nconst allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ['axis'];\n\nconst defaultProps = {\n  layout: 'centric',\n  startAngle: 90,\n  endAngle: -270,\n  cx: '50%',\n  cy: '50%',\n  innerRadius: 0,\n  outerRadius: '80%',\n} as const satisfies Partial<PolarChartProps>;\n\nexport const RadarChart = forwardRef<SVGSVGElement, PolarChartProps>((props: PolarChartProps, ref) => {\n  const propsWithDefaults = resolveDefaultProps(props, defaultProps);\n  return (\n    <PolarChart\n      chartName=\"RadarChart\"\n      defaultTooltipEventType=\"axis\"\n      validateTooltipEventTypes={allowedTooltipTypes}\n      tooltipPayloadSearcher={arrayTooltipSearcher}\n      categoricalChartProps={propsWithDefaults}\n      ref={ref}\n    />\n  );\n});\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { CartesianChart } from './CartesianChart';\nimport { CartesianChartProps, TooltipEventType } from '../util/types';\n\nconst allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ['item'];\n\nexport const ScatterChart = forwardRef<SVGSVGElement, CartesianChartProps>((props: CartesianChartProps, ref) => {\n  return (\n    <CartesianChart\n      chartName=\"ScatterChart\"\n      defaultTooltipEventType=\"item\"\n      validateTooltipEventTypes={allowedTooltipTypes}\n      tooltipPayloadSearcher={arrayTooltipSearcher}\n      categoricalChartProps={props}\n      ref={ref}\n    />\n  );\n});\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { CartesianChart } from './CartesianChart';\nimport { CartesianChartProps, TooltipEventType } from '../util/types';\n\nconst allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ['axis'];\n\nexport const AreaChart = forwardRef<SVGSVGElement, CartesianChartProps>((props: CartesianChartProps, ref) => {\n  return (\n    <CartesianChart\n      chartName=\"AreaChart\"\n      defaultTooltipEventType=\"axis\"\n      validateTooltipEventTypes={allowedTooltipTypes}\n      tooltipPayloadSearcher={arrayTooltipSearcher}\n      categoricalChartProps={props}\n      ref={ref}\n    />\n  );\n});\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { PolarChartProps, TooltipEventType } from '../util/types';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { PolarChart } from './PolarChart';\n\nconst allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ['axis', 'item'];\n\nconst defaultProps = {\n  layout: 'radial',\n  startAngle: 0,\n  endAngle: 360,\n  cx: '50%',\n  cy: '50%',\n  innerRadius: 0,\n  outerRadius: '80%',\n} as const satisfies Partial<PolarChartProps>;\n\nexport const RadialBarChart = forwardRef<SVGSVGElement, PolarChartProps>((props: PolarChartProps, ref) => {\n  const propsWithDefaults = resolveDefaultProps(props, defaultProps);\n  return (\n    <PolarChart\n      chartName=\"RadialBarChart\"\n      defaultTooltipEventType=\"axis\"\n      validateTooltipEventTypes={allowedTooltipTypes}\n      tooltipPayloadSearcher={arrayTooltipSearcher}\n      categoricalChartProps={propsWithDefaults}\n      ref={ref}\n    />\n  );\n});\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { CartesianChart } from './CartesianChart';\nimport { CartesianChartProps, TooltipEventType } from '../util/types';\n\nconst allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ['axis'];\n\nexport const ComposedChart = forwardRef<SVGSVGElement, CartesianChartProps>((props: CartesianChartProps, ref) => {\n  return (\n    <CartesianChart\n      chartName=\"ComposedChart\"\n      defaultTooltipEventType=\"axis\"\n      validateTooltipEventTypes={allowedTooltipTypes}\n      tooltipPayloadSearcher={arrayTooltipSearcher}\n      categoricalChartProps={props}\n      ref={ref}\n    />\n  );\n});\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { scaleLinear } from 'victory-vendor/d3-scale';\nimport { clsx } from 'clsx';\nimport get from 'es-toolkit/compat/get';\nimport { Surface } from '../container/Surface';\nimport { Layer } from '../container/Layer';\nimport { Sector } from '../shape/Sector';\nimport { Text } from '../component/Text';\nimport { polarToCartesian } from '../util/PolarUtils';\nimport { ReportChartMargin, ReportChartSize } from '../context/chartLayoutContext';\nimport { TooltipPortalContext } from '../context/tooltipPortalContext';\nimport { RechartsWrapper } from './RechartsWrapper';\nimport {\n  mouseLeaveItem,\n  setActiveClickItemIndex,\n  setActiveMouseOverItemIndex,\n  TooltipIndex,\n  TooltipPayloadConfiguration,\n  TooltipPayloadSearcher,\n} from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { RechartsStoreProvider } from '../state/RechartsStoreProvider';\nimport { ChartCoordinate, DataKey, Margin } from '../util/types';\nimport { useAppDispatch } from '../state/hooks';\nimport { RechartsRootState } from '../state/store';\n\nexport interface SunburstData {\n  [key: string]: any;\n  name: string;\n  value?: number;\n  fill?: string;\n  tooltipIndex?: TooltipIndex | undefined;\n  children?: SunburstData[];\n}\n\ninterface TextOptions {\n  fontFamily?: string;\n  fontWeight?: string;\n  paintOrder?: string;\n  stroke?: string;\n  fill?: string;\n  fontSize?: string;\n  pointerEvents?: string;\n}\n\nexport interface SunburstChartProps {\n  className?: string;\n  data: SunburstData;\n  width?: number;\n  height?: number;\n  padding?: number;\n  dataKey?: string;\n  nameKey?: DataKey<any>;\n  /* Padding between each hierarchical level. */\n  ringPadding?: number;\n  /* The radius of the inner circle at the center of the chart. */\n  innerRadius?: number;\n  /* Outermost edge of the chart. Defaults to the max possible radius for a circle inscribed in the chart container */\n  outerRadius?: number;\n  /** The abscissa of pole in polar coordinate  */\n  cx?: number;\n  /** The ordinate of pole in polar coordinate  */\n  cy?: number;\n  /** Angle in degrees from which the chart should start.  */\n  startAngle?: number;\n  /** Angle, in degrees, at which the chart should end. Can be used to generate partial sunbursts.  */\n  endAngle?: number;\n  children?: React.ReactNode;\n  fill?: string;\n  stroke?: string;\n  /* an object with svg text options to control the appearance of the chart labels. */\n  textOptions?: TextOptions;\n\n  onMouseEnter?: (node: SunburstData, e: React.MouseEvent) => void;\n\n  onMouseLeave?: (node: SunburstData, e: React.MouseEvent) => void;\n\n  onClick?: (node: SunburstData) => void;\n}\n\ninterface DrawArcOptions {\n  radius: number;\n  innerR: number;\n  initialAngle: number;\n  childColor?: string;\n  nestedActiveTooltipIndex?: TooltipIndex | undefined;\n}\n\nconst defaultTextProps = {\n  fontWeight: 'bold',\n  paintOrder: 'stroke fill',\n  fontSize: '.75rem',\n  stroke: '#FFF',\n  fill: 'black',\n  pointerEvents: 'none',\n};\n\nfunction getMaxDepthOf(node: SunburstData): number {\n  if (!node.children || node.children.length === 0) return 1;\n\n  // Calculate depth for each child and find the maximum\n  const childDepths = node.children.map(d => getMaxDepthOf(d));\n  return 1 + Math.max(...childDepths);\n}\n\nfunction convertMapToRecord<K extends keyof any, V>(map: Map<K, V>): Record<K, V> {\n  const record: Record<K, V> = {} as Record<K, V>;\n  map.forEach((value, key) => {\n    record[key] = value;\n  });\n  return record;\n}\n\nfunction getTooltipEntrySettings({\n  dataKey,\n  nameKey,\n  data,\n  stroke,\n  fill,\n  positions,\n}: Pick<SunburstChartProps, 'dataKey' | 'data' | 'stroke' | 'fill' | 'nameKey'> & {\n  positions: SunburstPositionMap;\n}): TooltipPayloadConfiguration {\n  return {\n    dataDefinedOnItem: data.children,\n    // Redux store will not accept a Map because it's not serializable\n    positions: convertMapToRecord(positions),\n    // Sunburst does not support many of the properties as other charts do so there's plenty of defaults here\n    settings: {\n      stroke,\n      strokeWidth: undefined,\n      fill,\n      nameKey,\n      dataKey,\n      // if there is a nameKey use it, otherwise make the name of the tooltip the dataKey itself\n      name: nameKey ? undefined : dataKey,\n      hide: false,\n      type: undefined,\n      color: fill,\n      unit: '',\n    },\n  };\n}\n\n// Why is margin not a sunburst prop? No clue. Probably it should be\nconst defaultSunburstMargin: Margin = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n};\n\nexport const payloadSearcher: TooltipPayloadSearcher<SunburstData[], SunburstData> = (\n  data: SunburstData[],\n  activeIndex: TooltipIndex,\n): SunburstData | undefined => {\n  return get(data, activeIndex);\n};\n\nexport const addToSunburstNodeIndex = (\n  indexInChildrenArr: number,\n  activeTooltipIndexSoFar: TooltipIndex | undefined = '',\n): TooltipIndex => {\n  return `${activeTooltipIndexSoFar}children[${indexInChildrenArr}]`;\n};\n\nconst preloadedState: Partial<RechartsRootState> = {\n  options: {\n    validateTooltipEventTypes: ['item'],\n    defaultTooltipEventType: 'item',\n    chartName: 'Sunburst',\n    tooltipPayloadSearcher: payloadSearcher,\n    eventEmitter: undefined,\n  },\n};\n\ntype SunburstPositionMap = Map<string, ChartCoordinate>;\n\nconst SunburstChartImpl = ({\n  className,\n  data,\n  children,\n  width,\n  height,\n  padding = 2,\n  dataKey = 'value',\n  nameKey = 'name',\n  ringPadding = 2,\n  innerRadius = 50,\n  fill = '#333',\n  stroke = '#FFF',\n  textOptions = defaultTextProps,\n  outerRadius = Math.min(width, height) / 2,\n  cx = width / 2,\n  cy = height / 2,\n  startAngle = 0,\n  endAngle = 360,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n}: SunburstChartProps) => {\n  const dispatch = useAppDispatch();\n\n  const rScale = scaleLinear([0, data[dataKey]], [0, endAngle]);\n  const treeDepth = getMaxDepthOf(data);\n  const thickness = (outerRadius - innerRadius) / treeDepth;\n\n  const sectors: React.ReactNode[] = [];\n  const positions: SunburstPositionMap = new Map<string, ChartCoordinate>([]);\n\n  const [tooltipPortal, setTooltipPortal] = useState<HTMLElement | null>(null);\n  // event handlers\n  function handleMouseEnter(node: SunburstData, e: React.MouseEvent) {\n    if (onMouseEnter) onMouseEnter(node, e);\n\n    dispatch(\n      setActiveMouseOverItemIndex({\n        activeIndex: node.tooltipIndex,\n        activeDataKey: dataKey,\n        activeCoordinate: positions.get(node.name),\n      }),\n    );\n  }\n\n  function handleMouseLeave(node: SunburstData, e: React.MouseEvent) {\n    if (onMouseLeave) onMouseLeave(node, e);\n\n    dispatch(mouseLeaveItem());\n  }\n\n  function handleClick(node: SunburstData) {\n    if (onClick) onClick(node);\n\n    dispatch(\n      setActiveClickItemIndex({\n        activeIndex: node.tooltipIndex,\n        activeDataKey: dataKey,\n        activeCoordinate: positions.get(node.name),\n      }),\n    );\n  }\n\n  // recursively add nodes for each data point and its children\n  function drawArcs(childNodes: SunburstData[] | undefined, options: DrawArcOptions, depth: number = 1): any {\n    const { radius, innerR, initialAngle, childColor, nestedActiveTooltipIndex } = options;\n\n    let currentAngle = initialAngle;\n\n    if (!childNodes) return; // base case: no children of this node\n\n    childNodes.forEach((d, i) => {\n      const currentTooltipIndex = depth === 1 ? `[${i}]` : addToSunburstNodeIndex(i, nestedActiveTooltipIndex);\n      const nodeWithIndex = { ...d, tooltipIndex: currentTooltipIndex };\n\n      const arcLength = rScale(d[dataKey]);\n      const start = currentAngle;\n      // color priority - if there's a color on the individual point use that, otherwise use parent color or default\n      const fillColor = d?.fill ?? childColor ?? fill;\n      const { x: textX, y: textY } = polarToCartesian(0, 0, innerR + radius / 2, -(start + arcLength - arcLength / 2));\n      currentAngle += arcLength;\n      sectors.push(\n        // eslint-disable-next-line react/no-array-index-key\n        <g key={`sunburst-sector-${d.name}-${i}`}>\n          <Sector\n            onClick={() => handleClick(nodeWithIndex)}\n            onMouseEnter={e => handleMouseEnter(nodeWithIndex, e)}\n            onMouseLeave={e => handleMouseLeave(nodeWithIndex, e)}\n            fill={fillColor}\n            stroke={stroke}\n            strokeWidth={padding}\n            startAngle={start}\n            endAngle={start + arcLength}\n            innerRadius={innerR}\n            outerRadius={innerR + radius}\n            cx={cx}\n            cy={cy}\n          />\n          <Text {...textOptions} alignmentBaseline=\"middle\" textAnchor=\"middle\" x={textX + cx} y={cy - textY}>\n            {d[dataKey]}\n          </Text>\n        </g>,\n      );\n\n      const { x: tooltipX, y: tooltipY } = polarToCartesian(cx, cy, innerR + radius / 2, start);\n      positions.set(d.name, { x: tooltipX, y: tooltipY });\n\n      return drawArcs(\n        d.children,\n        {\n          radius,\n          innerR: innerR + radius + ringPadding,\n          initialAngle: start,\n          childColor: fillColor,\n          nestedActiveTooltipIndex: currentTooltipIndex,\n        },\n        depth + 1,\n      );\n    });\n  }\n\n  drawArcs(data.children, { radius: thickness, innerR: innerRadius, initialAngle: startAngle });\n\n  const layerClass = clsx('recharts-sunburst', className);\n  return (\n    <TooltipPortalContext.Provider value={tooltipPortal}>\n      <RechartsWrapper\n        className={className}\n        width={width}\n        // Sunburst doesn't support `style` property, why?\n        height={height}\n        ref={(node: HTMLDivElement) => {\n          if (tooltipPortal == null && node != null) {\n            setTooltipPortal(node);\n          }\n        }}\n        onMouseEnter={undefined}\n        onMouseLeave={undefined}\n        onClick={undefined}\n        onMouseMove={undefined}\n        onMouseDown={undefined}\n        onMouseUp={undefined}\n        onContextMenu={undefined}\n        onDoubleClick={undefined}\n        onTouchStart={undefined}\n        onTouchMove={undefined}\n        onTouchEnd={undefined}\n      >\n        <Surface width={width} height={height}>\n          <Layer className={layerClass}>{sectors}</Layer>\n          <SetTooltipEntrySettings\n            fn={getTooltipEntrySettings}\n            args={{ dataKey, data, stroke, fill, nameKey, positions }}\n          />\n          {children}\n        </Surface>\n      </RechartsWrapper>\n    </TooltipPortalContext.Provider>\n  );\n};\n\nexport const SunburstChart = (props: SunburstChartProps) => {\n  return (\n    <RechartsStoreProvider preloadedState={preloadedState} reduxStoreName={props.className ?? 'SunburstChart'}>\n      <ReportChartSize width={props.width} height={props.height} />\n      <ReportChartMargin margin={defaultSunburstMargin} />\n      <SunburstChartImpl {...props} />\n    </RechartsStoreProvider>\n  );\n};\n","import * as React from 'react';\nimport { SVGProps } from 'react';\nimport { Props as FunnelProps, FunnelTrapezoidItem } from '../cartesian/Funnel';\nimport { Props as TrapezoidProps } from '../shape/Trapezoid';\nimport { Shape, getPropsFromShapeOption } from './ActiveShapeUtils';\n\n// Trapezoid props is expecting x, y, height as numbers.\n// When props are being spread in from a user defined component in Funnel,\n// the prop types of an SVGElement have these typed as string | number.\n// This function will return the passed in props along with x, y, height as numbers.\nexport function typeGuardTrapezoidProps(option: SVGProps<SVGPathElement>, props: FunnelTrapezoidItem): TrapezoidProps {\n  const xValue = `${props.x || option.x}`;\n  const x = parseInt(xValue, 10);\n  const yValue = `${props.y || option.y}`;\n  const y = parseInt(yValue, 10);\n  const heightValue = `${props?.height || option?.height}`;\n  const height = parseInt(heightValue, 10);\n  return {\n    ...props,\n    ...getPropsFromShapeOption(option),\n    height,\n    x,\n    y,\n  };\n}\n\nexport type FunnelTrapezoidProps = { option: FunnelProps['activeShape'] } & FunnelTrapezoidItem;\n\nexport function FunnelTrapezoid(props: FunnelTrapezoidProps) {\n  return <Shape shapeType=\"trapezoid\" propTransformer={typeGuardTrapezoidProps} {...props} />;\n}\n","import { createSelector } from 'reselect';\nimport { ReactElement } from 'react';\nimport { computeFunnelTrapezoids, FunnelTrapezoidItem } from '../../cartesian/Funnel';\nimport { ChartData } from '../chartDataSlice';\nimport { RechartsRootState } from '../store';\nimport { selectChartOffsetInternal } from './selectChartOffsetInternal';\nimport { selectChartDataAndAlwaysIgnoreIndexes } from './dataSelectors';\nimport { ChartOffsetInternal, DataKey, TooltipType } from '../../util/types';\nimport { CellProps } from '../..';\n\ntype FunnelComposedData = {\n  trapezoids: ReadonlyArray<FunnelTrapezoidItem>;\n  data: ChartData | undefined;\n};\n\nexport type ResolvedFunnelSettings = {\n  dataKey: DataKey<any>;\n  data: ChartData | undefined;\n  nameKey: DataKey<any>;\n  tooltipType?: TooltipType;\n  lastShapeType?: 'triangle' | 'rectangle';\n  reversed?: boolean;\n  customWidth?: string | number;\n  cells: ReadonlyArray<ReactElement>;\n  presentationProps: Record<string, any> | null;\n};\n\nconst pickFunnelSettings = (\n  _state: RechartsRootState,\n  funnelSettings: ResolvedFunnelSettings,\n): ResolvedFunnelSettings => funnelSettings;\n\nexport const selectFunnelTrapezoids: (\n  state: RechartsRootState,\n  {\n    dataKey,\n    nameKey,\n    tooltipType,\n    lastShapeType,\n    reversed,\n    customWidth,\n    cells,\n    presentationProps,\n  }: ResolvedFunnelSettings,\n) => FunnelComposedData = createSelector(\n  [selectChartOffsetInternal, pickFunnelSettings, selectChartDataAndAlwaysIgnoreIndexes],\n  (\n    offset: ChartOffsetInternal,\n    { data, dataKey, nameKey, tooltipType, lastShapeType, reversed, customWidth, cells, presentationProps },\n    { chartData },\n  ): FunnelComposedData => {\n    let displayedData: ChartData | undefined;\n    if (data != null && data.length > 0) {\n      displayedData = data;\n    } else if (chartData != null && chartData.length > 0) {\n      displayedData = chartData;\n    }\n\n    if (displayedData && displayedData.length) {\n      displayedData = displayedData.map((entry: any, index: number) => ({\n        payload: entry,\n        ...presentationProps,\n        ...entry,\n        ...(cells && cells[index] && cells[index].props),\n      }));\n    } else if (cells && cells.length) {\n      displayedData = cells.map((cell: ReactElement<CellProps>) => ({ ...presentationProps, ...cell.props }));\n    } else {\n      return { trapezoids: [], data: displayedData };\n    }\n\n    return computeFunnelTrapezoids({\n      dataKey,\n      nameKey,\n      displayedData,\n      tooltipType,\n      lastShapeType,\n      reversed,\n      offset,\n      customWidth,\n    });\n  },\n);\n","/* eslint-disable max-classes-per-file */\nimport * as React from 'react';\nimport { MutableRefObject, PureComponent, useCallback, useMemo, useRef, useState } from 'react';\nimport omit from 'es-toolkit/compat/omit';\n\nimport { clsx } from 'clsx';\nimport { selectActiveIndex } from '../state/selectors/selectors';\nimport { useAppSelector } from '../state/hooks';\nimport { Layer } from '../container/Layer';\nimport { Props as TrapezoidProps } from '../shape/Trapezoid';\nimport { ImplicitLabelListType, LabelList } from '../component/LabelList';\nimport { Global } from '../util/Global';\nimport { interpolateNumber, isNumber } from '../util/DataUtils';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport {\n  ActiveShape,\n  adaptEventsOfChild,\n  AnimationDuration,\n  AnimationTiming,\n  ChartOffsetInternal,\n  Coordinate,\n  DataKey,\n  LegendType,\n  PresentationAttributesAdaptChildEvent,\n  TooltipType,\n} from '../util/types';\nimport { FunnelTrapezoid, FunnelTrapezoidProps } from '../util/FunnelUtils';\nimport {\n  useMouseClickItemDispatch,\n  useMouseEnterItemDispatch,\n  useMouseLeaveItemDispatch,\n} from '../context/tooltipContext';\nimport { TooltipPayloadConfiguration } from '../state/tooltipSlice';\nimport { SetTooltipEntrySettings } from '../state/SetTooltipEntrySettings';\nimport { ResolvedFunnelSettings, selectFunnelTrapezoids } from '../state/selectors/funnelSelectors';\nimport { findAllByType } from '../util/ReactUtils';\nimport { Cell } from '../component/Cell';\nimport { resolveDefaultProps } from '../util/resolveDefaultProps';\nimport { usePlotArea } from '../hooks';\nimport { svgPropertiesNoEvents } from '../util/svgPropertiesNoEvents';\nimport { JavascriptAnimate } from '../animation/JavascriptAnimate';\n\nexport interface FunnelTrapezoidItem extends TrapezoidProps {\n  value?: number | string;\n  payload?: any;\n  isActive: boolean;\n  tooltipPosition: Coordinate;\n}\n\n/**\n * Internal props, combination of external props + defaultProps + private Recharts state\n */\ninterface InternalFunnelProps {\n  trapezoids?: ReadonlyArray<FunnelTrapezoidItem>;\n  className?: string;\n  dataKey: DataKey<any>;\n  nameKey?: DataKey<any>;\n  data?: any[];\n  hide?: boolean;\n  shape?: ActiveShape<FunnelTrapezoidItem, SVGPathElement>;\n  activeShape?: ActiveShape<FunnelTrapezoidItem, SVGPathElement>;\n  legendType?: LegendType;\n  tooltipType?: TooltipType;\n  lastShapeType?: 'triangle' | 'rectangle';\n  reversed?: boolean;\n  onAnimationStart?: () => void;\n  onAnimationEnd?: () => void;\n  isAnimationActive?: boolean;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n  id?: string;\n}\n\n/**\n * External props, intended for end users to fill in\n */\ninterface FunnelProps {\n  activeShape?: ActiveShape<FunnelTrapezoidItem, SVGPathElement>;\n  animationBegin?: number;\n  animationDuration?: AnimationDuration;\n  animationEasing?: AnimationTiming;\n  className?: string;\n  data?: any[];\n  dataKey: DataKey<any>;\n  hide?: boolean;\n  id?: string;\n  isAnimationActive?: boolean;\n  label?: ImplicitLabelListType<any>;\n  lastShapeType?: 'triangle' | 'rectangle';\n  legendType?: LegendType;\n  nameKey?: DataKey<any>;\n  onAnimationEnd?: () => void;\n  onAnimationStart?: () => void;\n  reversed?: boolean;\n  shape?: ActiveShape<FunnelTrapezoidItem, SVGPathElement>;\n  tooltipType?: TooltipType;\n}\n\ntype FunnelSvgProps = Omit<PresentationAttributesAdaptChildEvent<any, SVGElement> & TrapezoidProps, 'ref'>;\n\ntype InternalProps = FunnelSvgProps & InternalFunnelProps;\n\nexport type Props = FunnelSvgProps & FunnelProps;\n\ntype RealFunnelData = any;\n\ntype FunnelComposedData = {\n  trapezoids: ReadonlyArray<FunnelTrapezoidItem>;\n  data: RealFunnelData[];\n};\n\ntype FunnelTrapezoidsProps = {\n  trapezoids: ReadonlyArray<FunnelTrapezoidItem>;\n  allOtherFunnelProps: Props;\n  showLabels: boolean;\n};\n\nfunction getTooltipEntrySettings(\n  props: Props & { trapezoids: ReadonlyArray<FunnelTrapezoidItem> },\n): TooltipPayloadConfiguration {\n  const { dataKey, nameKey, stroke, strokeWidth, fill, name, hide, tooltipType, data } = props;\n  return {\n    dataDefinedOnItem: data,\n    positions: props.trapezoids.map(({ tooltipPosition }) => tooltipPosition),\n    settings: {\n      stroke,\n      strokeWidth,\n      fill,\n      dataKey,\n      name,\n      nameKey,\n      hide,\n      type: tooltipType,\n      color: fill,\n      unit: '', // Funnel does not have unit, why?\n    },\n  };\n}\n\nfunction FunnelTrapezoids(props: FunnelTrapezoidsProps) {\n  const { trapezoids, allOtherFunnelProps, showLabels } = props;\n  const activeItemIndex = useAppSelector(state =>\n    selectActiveIndex(state, 'item', state.tooltip.settings.trigger, undefined),\n  );\n  const {\n    onMouseEnter: onMouseEnterFromProps,\n    onClick: onItemClickFromProps,\n    onMouseLeave: onMouseLeaveFromProps,\n    shape,\n    activeShape,\n    ...restOfAllOtherProps\n  } = allOtherFunnelProps;\n\n  const onMouseEnterFromContext = useMouseEnterItemDispatch(onMouseEnterFromProps, allOtherFunnelProps.dataKey);\n  const onMouseLeaveFromContext = useMouseLeaveItemDispatch(onMouseLeaveFromProps);\n  const onClickFromContext = useMouseClickItemDispatch(onItemClickFromProps, allOtherFunnelProps.dataKey);\n\n  return (\n    <>\n      {trapezoids.map((entry, i) => {\n        const isActiveIndex = activeShape && activeItemIndex === String(i);\n        const trapezoidOptions = isActiveIndex ? activeShape : shape;\n        const trapezoidProps: FunnelTrapezoidProps = {\n          ...entry,\n          option: trapezoidOptions,\n          isActive: isActiveIndex,\n          stroke: entry.stroke,\n        };\n\n        return (\n          <Layer\n            className=\"recharts-funnel-trapezoid\"\n            {...adaptEventsOfChild(restOfAllOtherProps, entry, i)}\n            // @ts-expect-error the types need a bit of attention\n            onMouseEnter={onMouseEnterFromContext(entry, i)}\n            // @ts-expect-error the types need a bit of attention\n            onMouseLeave={onMouseLeaveFromContext(entry, i)}\n            // @ts-expect-error the types need a bit of attention\n            onClick={onClickFromContext(entry, i)}\n            key={`trapezoid-${entry?.x}-${entry?.y}-${entry?.name}-${entry?.value}`}\n          >\n            <FunnelTrapezoid {...trapezoidProps} />\n          </Layer>\n        );\n      })}\n      {showLabels && LabelList.renderCallByParent(allOtherFunnelProps, trapezoids)}\n    </>\n  );\n}\n\nlet latestId = 0;\n\n/**\n * This hook will return a unique animation id for the given reference.\n * The ID increments every time the reference changes.\n * @param reference The reference to track\n * @returns The unique animation ID\n */\nfunction useAnimationId(reference: unknown) {\n  const idRef = useRef<number>(latestId);\n  const ref = useRef(reference);\n\n  if (ref.current !== reference) {\n    idRef.current += 1;\n    latestId = idRef.current;\n    ref.current = reference;\n  }\n\n  return idRef.current;\n}\n\nfunction TrapezoidsWithAnimation({\n  previousTrapezoidsRef,\n  props,\n}: {\n  props: InternalProps;\n  previousTrapezoidsRef: MutableRefObject<ReadonlyArray<FunnelTrapezoidItem>>;\n}) {\n  const {\n    trapezoids,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    onAnimationEnd,\n    onAnimationStart,\n  } = props;\n  const prevTrapezoids = previousTrapezoidsRef.current;\n\n  const [isAnimating, setIsAnimating] = useState(true);\n\n  const animationId = useAnimationId(trapezoids);\n\n  const handleAnimationEnd = useCallback(() => {\n    if (typeof onAnimationEnd === 'function') {\n      onAnimationEnd();\n    }\n    setIsAnimating(false);\n  }, [onAnimationEnd]);\n\n  const handleAnimationStart = useCallback(() => {\n    if (typeof onAnimationStart === 'function') {\n      onAnimationStart();\n    }\n    setIsAnimating(true);\n  }, [onAnimationStart]);\n\n  return (\n    <JavascriptAnimate\n      begin={animationBegin}\n      duration={animationDuration}\n      isActive={isAnimationActive}\n      easing={animationEasing}\n      key={animationId}\n      onAnimationStart={handleAnimationStart}\n      onAnimationEnd={handleAnimationEnd}\n    >\n      {(t: number) => {\n        const stepData =\n          t === 1\n            ? trapezoids\n            : trapezoids.map((entry: FunnelTrapezoidItem, index: number) => {\n                const prev = prevTrapezoids && prevTrapezoids[index];\n\n                if (prev) {\n                  const interpolatorX = interpolateNumber(prev.x, entry.x);\n                  const interpolatorY = interpolateNumber(prev.y, entry.y);\n                  const interpolatorUpperWidth = interpolateNumber(prev.upperWidth, entry.upperWidth);\n                  const interpolatorLowerWidth = interpolateNumber(prev.lowerWidth, entry.lowerWidth);\n                  const interpolatorHeight = interpolateNumber(prev.height, entry.height);\n\n                  return {\n                    ...entry,\n                    x: interpolatorX(t),\n                    y: interpolatorY(t),\n                    upperWidth: interpolatorUpperWidth(t),\n                    lowerWidth: interpolatorLowerWidth(t),\n                    height: interpolatorHeight(t),\n                  };\n                }\n\n                const interpolatorX = interpolateNumber(entry.x + entry.upperWidth / 2, entry.x);\n                const interpolatorY = interpolateNumber(entry.y + entry.height / 2, entry.y);\n                const interpolatorUpperWidth = interpolateNumber(0, entry.upperWidth);\n                const interpolatorLowerWidth = interpolateNumber(0, entry.lowerWidth);\n                const interpolatorHeight = interpolateNumber(0, entry.height);\n\n                return {\n                  ...entry,\n                  x: interpolatorX(t),\n                  y: interpolatorY(t),\n                  upperWidth: interpolatorUpperWidth(t),\n                  lowerWidth: interpolatorLowerWidth(t),\n                  height: interpolatorHeight(t),\n                };\n              });\n\n        if (t > 0) {\n          // eslint-disable-next-line no-param-reassign\n          previousTrapezoidsRef.current = stepData;\n        }\n        return (\n          <Layer>\n            <FunnelTrapezoids trapezoids={stepData} allOtherFunnelProps={props} showLabels={!isAnimating} />\n          </Layer>\n        );\n      }}\n    </JavascriptAnimate>\n  );\n}\n\nfunction RenderTrapezoids(props: InternalProps) {\n  const { trapezoids, isAnimationActive } = props;\n\n  const previousTrapezoidsRef = useRef<ReadonlyArray<FunnelTrapezoidItem> | null>(null);\n  const prevTrapezoids = previousTrapezoidsRef.current;\n\n  if (isAnimationActive && trapezoids && trapezoids.length && (!prevTrapezoids || prevTrapezoids !== trapezoids)) {\n    return <TrapezoidsWithAnimation props={props} previousTrapezoidsRef={previousTrapezoidsRef} />;\n  }\n  return <FunnelTrapezoids trapezoids={trapezoids} allOtherFunnelProps={props} showLabels />;\n}\n\nconst getRealWidthHeight = (customWidth: number | string | undefined, offset: ChartOffsetInternal) => {\n  const { width, height, left, right, top, bottom } = offset;\n  const realHeight = height;\n  let realWidth = width;\n\n  if (isNumber(customWidth)) {\n    realWidth = customWidth;\n  } else if (typeof customWidth === 'string') {\n    realWidth = (realWidth * parseFloat(customWidth)) / 100;\n  }\n\n  return {\n    realWidth: realWidth - left - right - 50,\n    realHeight: realHeight - bottom - top,\n    offsetX: (width - realWidth) / 2,\n    offsetY: (height - realHeight) / 2,\n  };\n};\n\nexport class FunnelWithState extends PureComponent<InternalProps> {\n  render() {\n    const { className } = this.props;\n\n    const layerClass = clsx('recharts-trapezoids', className);\n\n    return (\n      <Layer className={layerClass}>\n        <RenderTrapezoids {...this.props} />\n      </Layer>\n    );\n  }\n}\n\nconst defaultFunnelProps = {\n  stroke: '#fff',\n  fill: '#808080',\n  legendType: 'rect',\n  hide: false,\n  isAnimationActive: !Global.isSsr,\n  animationBegin: 400,\n  animationDuration: 1500,\n  animationEasing: 'ease',\n  nameKey: 'name',\n  lastShapeType: 'triangle',\n} as const satisfies Partial<Props>;\n\nfunction FunnelImpl(props: Props) {\n  const { height, width } = usePlotArea();\n\n  const {\n    stroke,\n    fill,\n    legendType,\n    hide,\n    isAnimationActive,\n    animationBegin,\n    animationDuration,\n    animationEasing,\n    nameKey,\n    lastShapeType,\n    ...everythingElse\n  } = resolveDefaultProps(props, defaultFunnelProps);\n\n  const presentationProps = svgPropertiesNoEvents(props);\n  const cells = findAllByType(props.children, Cell);\n\n  const funnelSettings: ResolvedFunnelSettings = useMemo(\n    () => ({\n      dataKey: props.dataKey,\n      nameKey,\n      data: props.data,\n      tooltipType: props.tooltipType,\n      lastShapeType,\n      reversed: props.reversed,\n      customWidth: props.width,\n      cells,\n      presentationProps,\n    }),\n    [\n      props.dataKey,\n      nameKey,\n      props.data,\n      props.tooltipType,\n      lastShapeType,\n      props.reversed,\n      props.width,\n      cells,\n      presentationProps,\n    ],\n  );\n\n  const { trapezoids } = useAppSelector(state => selectFunnelTrapezoids(state, funnelSettings));\n\n  return (\n    <>\n      <SetTooltipEntrySettings fn={getTooltipEntrySettings} args={{ ...props, trapezoids }} />\n      {hide ? null : (\n        <FunnelWithState\n          {...everythingElse}\n          stroke={stroke}\n          fill={fill}\n          nameKey={nameKey}\n          lastShapeType={lastShapeType}\n          animationBegin={animationBegin}\n          animationDuration={animationDuration}\n          animationEasing={animationEasing}\n          isAnimationActive={isAnimationActive}\n          hide={hide}\n          legendType={legendType}\n          height={height}\n          width={width}\n          trapezoids={trapezoids}\n        />\n      )}\n    </>\n  );\n}\n\nexport function computeFunnelTrapezoids({\n  dataKey,\n  nameKey,\n  displayedData,\n  tooltipType,\n  lastShapeType,\n  reversed,\n  offset,\n  customWidth,\n}: {\n  dataKey: Props['dataKey'];\n  nameKey: Props['nameKey'];\n  offset: ChartOffsetInternal;\n  displayedData: RealFunnelData[];\n  tooltipType?: TooltipType;\n  lastShapeType?: Props['lastShapeType'];\n  reversed?: boolean;\n  customWidth: number | string | undefined;\n}): FunnelComposedData {\n  const { left, top } = offset;\n  const { realHeight, realWidth, offsetX, offsetY } = getRealWidthHeight(customWidth, offset);\n  const maxValue = Math.max.apply(\n    null,\n    displayedData.map((entry: any) => getValueByDataKey(entry, dataKey, 0)),\n  );\n  const len = displayedData.length;\n  const rowHeight = realHeight / len;\n  const parentViewBox = { x: offset.left, y: offset.top, width: offset.width, height: offset.height };\n\n  let trapezoids: ReadonlyArray<FunnelTrapezoidItem> = displayedData.map(\n    (entry: any, i: number): FunnelTrapezoidItem => {\n      const rawVal = getValueByDataKey(entry, dataKey, 0);\n      const name = getValueByDataKey(entry, nameKey, i);\n      let val = rawVal;\n      let nextVal;\n\n      if (i !== len - 1) {\n        nextVal = getValueByDataKey(displayedData[i + 1], dataKey, 0);\n\n        if (nextVal instanceof Array) {\n          [nextVal] = nextVal;\n        }\n      } else if (rawVal instanceof Array && rawVal.length === 2) {\n        [val, nextVal] = rawVal;\n      } else if (lastShapeType === 'rectangle') {\n        nextVal = val;\n      } else {\n        nextVal = 0;\n      }\n\n      // @ts-expect-error getValueByDataKey does not validate the output type\n      const x = ((maxValue - val) * realWidth) / (2 * maxValue) + top + 25 + offsetX;\n      const y = rowHeight * i + left + offsetY;\n      // @ts-expect-error getValueByDataKey does not validate the output type\n      const upperWidth = (val / maxValue) * realWidth;\n      const lowerWidth = (nextVal / maxValue) * realWidth;\n\n      const tooltipPayload = [{ name, value: val, payload: entry, dataKey, type: tooltipType }];\n      const tooltipPosition: Coordinate = {\n        x: x + upperWidth / 2,\n        y: y + rowHeight / 2,\n      };\n\n      return {\n        x,\n        y,\n        width: Math.max(upperWidth, lowerWidth),\n        upperWidth,\n        lowerWidth,\n        height: rowHeight,\n        // @ts-expect-error getValueByDataKey does not validate the output type\n        name,\n        val,\n        tooltipPayload,\n        tooltipPosition,\n        ...omit(entry, ['width']),\n        payload: entry,\n        parentViewBox,\n        labelViewBox: {\n          x: x + (upperWidth - lowerWidth) / 4,\n          y,\n          width: Math.abs(upperWidth - lowerWidth) / 2 + Math.min(upperWidth, lowerWidth),\n          height: rowHeight,\n        },\n      };\n    },\n  );\n\n  if (reversed) {\n    trapezoids = trapezoids.map((entry: any, index: number) => {\n      const newY = entry.y - index * rowHeight + (len - 1 - index) * rowHeight;\n      return {\n        ...entry,\n        upperWidth: entry.lowerWidth,\n        lowerWidth: entry.upperWidth,\n        x: entry.x - (entry.lowerWidth - entry.upperWidth) / 2,\n        y: entry.y - index * rowHeight + (len - 1 - index) * rowHeight,\n        tooltipPosition: { ...entry.tooltipPosition, y: newY + rowHeight / 2 },\n        labelViewBox: {\n          ...entry.labelViewBox,\n          y: newY,\n        },\n      };\n    });\n  }\n\n  return {\n    trapezoids,\n    data: displayedData,\n  };\n}\n\nexport class Funnel extends PureComponent<Props> {\n  static displayName = 'Funnel';\n\n  static defaultProps = defaultFunnelProps;\n\n  render() {\n    return <FunnelImpl {...this.props} />;\n  }\n}\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { arrayTooltipSearcher } from '../state/optionsSlice';\nimport { CartesianChart } from './CartesianChart';\nimport { CartesianChartProps, TooltipEventType } from '../util/types';\n\nconst allowedTooltipTypes: ReadonlyArray<TooltipEventType> = ['item'];\n\nexport const FunnelChart = forwardRef<SVGSVGElement, CartesianChartProps>((props: CartesianChartProps, ref) => {\n  return (\n    <CartesianChart\n      chartName=\"FunnelChart\"\n      defaultTooltipEventType=\"item\"\n      validateTooltipEventTypes={allowedTooltipTypes}\n      tooltipPayloadSearcher={arrayTooltipSearcher}\n      categoricalChartProps={props}\n      ref={ref}\n    />\n  );\n});\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__5442__","__WEBPACK_EXTERNAL_MODULE__2751__","__WEBPACK_EXTERNAL_MODULE__6003__","Object","defineProperty","Symbol","toStringTag","value","debounce$1","debounce","func","debounceMs","options","leading","trailing","maxWait","edges","Array","result","pendingAt","_debounced","args","apply","debounced","Date","now","cancel","schedule","flush","isLength","isArrayLike","length","has","prototype","hasOwnProperty","prefix","Events","EE","fn","context","once","addListener","emitter","event","TypeError","listener","evt","_events","push","_eventsCount","clearEvent","EventEmitter","create","__proto__","eventNames","events","name","names","call","slice","getOwnPropertySymbols","concat","listeners","handlers","i","l","ee","listenerCount","emit","a1","a2","a3","a4","a5","len","arguments","removeListener","undefined","j","on","removeAllListeners","off","prefixed","isIndex","isObject","eq","isIterateeCall","index","object","maxBy","items","getValue","maxElement","max","element","last","arr","isMatchWith","isMatch","target","source","minBy$1","identity","iteratee","minBy","iteratee$1","from","isPlainObject","getSymbols","getTag","tags","isEqualWithImpl","a","b","property","aParent","bParent","stack","areValuesEqual","is","areObjectsEqual","aTag","bTag","argumentsTag","objectTag","stringTag","toString","numberTag","x","valueOf","y","booleanTag","dateTag","symbolTag","regexpTag","flags","functionTag","aStack","Map","get","bStack","set","mapTag","size","key","entries","setTag","aValues","values","bValues","aValue","findIndex","bValue","splice","arrayTag","uint8ArrayTag","uint8ClampedArrayTag","uint16ArrayTag","uint32ArrayTag","bigUint64ArrayTag","int8ArrayTag","int16ArrayTag","int32ArrayTag","bigInt64ArrayTag","float32ArrayTag","float64ArrayTag","Buffer","isBuffer","arrayBufferTag","byteLength","Uint8Array","dataViewTag","byteOffset","errorTag","message","constructor","aKeys","keys","bKeys","propKey","aProp","hasOwn","delete","isEqualWith","last$1","toArray","array","isSymbol","toKey","String","isObjectLike","React","shim","objectIs","useSyncExternalStore","useRef","useEffect","useMemo","useDebugValue","useSyncExternalStoreWithSelector","subscribe","getSnapshot","getServerSnapshot","selector","isEqual","instRef","current","inst","hasValue","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","isPrimitive","uniqBy$1","isArrayLikeObject","uniqBy","isArguments","toPath","deepKey","quoteChar","bracket","charCodeAt","char","cloneDeep","matchesProperty","compareValues","isKey","orderBy","collection","criteria","orders","guard","isArray","map","order","getValueByNestedPath","path","preparedCriteria","criterion","item","original","getValueByCriterion","sort","comparedResult","getPriority","aPriority","bPriority","sumBy","cloneDeepWith","obj","cloneDeepWithImpl","isTypedArray","ArrayBuffer","isView","DataView","valueToClone","keyToClone","objectToClone","cloneValue","cloned","input","getTime","RegExp","lastIndex","Set","add","subarray","getPrototypeOf","SharedArrayBuffer","buffer","copyProperties","File","type","Blob","Error","cause","isCloneableObject","descriptor","getOwnPropertyDescriptor","writable","regexIsDeepProp","regexIsPlainProp","test","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","getOwnPropertyNames","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","e","unset","omit","keysArr","isUnsafeProperty","isDeepKey","defaultValue","getWithPath","flatten","sortBy","toNumber","toFinite","Infinity","Number","MAX_VALUE","range","start","end","step","Math","ceil","includes","throttle","throttleMs","depth","flooredDepth","floor","recursive","currentDepth","maxBy$1","filter","symbol","propertyIsEnumerable","noop","other","isNaN","signal","pendingThis","pendingArgs","invoke","timeoutId","clearTimeout","setTimeout","aborted","isFirstCall","addEventListener","proto","resolvedPath","unsetWithPath","parent","lastKey","matches","minElement","min","isMatchWithInternal","isArrayMatch","sourceValue","isMapMatch","isSetMatch","isObjectMatch","countedIndex","sourceItem","found","doesMatch","objValue","srcValue","Boolean","ONE","MAX_DIGITS","Decimal","precision","rounding","toExpNeg","toExpPos","LN10","external","decimalError","invalidArgument","exponentOutOfRange","mathfloor","mathpow","pow","isDecimal","BASE","MAX_SAFE_INTEGER","MAX_E","P","carry","d","k","xd","yd","Ctor","pr","s","round","reverse","unshift","pop","checkInt32","digitsToString","ws","indexOfLastWord","str","w","getZeroString","absoluteValue","abs","comparedTo","cmp","xdL","ydL","decimalPlaces","dp","dividedBy","div","divide","dividedToIntegerBy","idiv","equals","exponent","getBase10Exponent","greaterThan","gt","greaterThanOrEqualTo","gte","isInteger","isint","isNegative","isneg","isPositive","ispos","isZero","lessThan","lt","lessThanOrEqualTo","lte","logarithm","log","base","r","wpr","ln","minus","sub","subtract","modulo","mod","q","times","naturalExponential","exp","naturalLogarithm","negated","neg","plus","sd","z","squareRoot","sqrt","n","t","toExponential","indexOf","mul","rL","shift","toDecimalPlaces","todp","rm","toFixed","toInteger","toint","toPower","sign","yIsInt","yn","truncate","toPrecision","toSignificantDigits","tosd","val","toJSON","multiplyInteger","temp","aL","bL","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","denominator","sum","getLn10","zs","c","c0","numerator","x2","charAt","parseDecimal","replace","search","substring","rd","doRound","xdi","xe","xLTy","isExp","config","p","v","ps","clone","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","useState","useLayoutEffect","checkIfSnapshotChanged","latestGetSnapshot","nextValue","error","window","document","createElement","_useState","forceUpdate","IS_UNSIGNED_INTEGER","tag","mapper","NaN","isSafeInteger","cloneDeepWith$1","customizer","iterator","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","enumerable","g","globalThis","Function","prop","f","clsx","mathSign","isNan","isPercent","isNumber","isNumOrStr","idCounter","uniqueId","id","getPercentValue","percent","totalValue","validate","parseFloat","hasDuplicate","ary","cache","interpolateNumber","numberA","numberB","interpolate","findEntryInArray","specifiedKey","specifiedValue","find","entry","getLinearRegression","data","xsum","ysum","xysum","xxsum","xmin","xmax","xcurrent","ycurrent","cx","cy","isNullish","upperFirst","toUpperCase","EventKeys","isEventKey","PolyElementKeys","FilteredElementKeyMap","svg","polygon","polyline","adaptEventHandlers","props","newHandler","inputProps","isValidElement","out","forEach","adaptEventsOfChild","getEventHandlerOfChild","originalHandler","SVGElementPropKeys","isSvgElementPropKey","svgPropertiesNoEvents","filteredEntries","_ref","fromEntries","getDisplayName","Comp","lastChildren","lastResult","children","Children","child","isFragment","findAllByType","types","childType","isClipDot","dot","clipDot","filterProps","includeEvents","svgElementType","_inputProps","isValidSpreadableProp","matchingElementTypeKeys","isDataAttribute","startsWith","isSpecificSvgAttribute","isEventAttribute","Surface","forwardRef","ref","width","height","viewBox","className","style","title","desc","others","_objectWithoutProperties","_excluded","svgView","layerClass","_extends","Layer","LegendPortalContext","createContext","atan2","cos","sin","pi","PI","tau","draw","moveTo","arc","lineTo","closePath","tan30","tan30_2","rect","kr","kx","ky","sqrt3","x0","y0","x1","y1","y2","tauEpsilon","append","strings","_","Path","digits","_x0","_y0","_x1","_y1","_append","appendRound","quadraticCurveTo","bezierCurveTo","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","a0","ccw","dx","dy","cw","da","h","withPath","shape","RangeError","symbolFactories","symbolCircle","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolTriangle","symbolWye","RADIAN","Symbols","symbolFactory","sizeType","rest","_objectSpread","filteredProps","transform","getSymbolFactory","circle","shapeSymbol","calculateAreaSize","angle","registerSymbol","SIZE","DefaultLegendContent","PureComponent","renderIcon","iconType","inactiveColor","halfSize","sixthSize","thirdSize","color","inactive","preferredIcon","strokeWidth","fill","stroke","strokeDasharray","payload","legendIcon","iconProps","renderItems","iconSize","layout","formatter","itemStyle","display","marginRight","svgStyle","verticalAlign","finalFormatter","finalValue","align","finalStyle","padding","margin","textAlign","_defineProperty","getUniqPayload","option","defaultUniqBy","RechartsReduxContext","noopDispatch","useAppDispatch","useContext","store","dispatch","addNestedSubNoop","refEquality","useAppSelector","subscription","addNestedSub","getState","assertIsFunction","errorMessage","ensureIsArray","getDependencies","createSelectorArgs","dependencies","every","itemTypes","join","assertIsArrayOfFunctions","Ref","WeakRef","deref","weakMapMemoize","fnNode","resultEqualityCheck","resultsCount","memoized","cacheNode","arg","objectCache","WeakMap","objectNode","primitiveCache","primitiveNode","terminatedNode","lastResultValue","clearCache","resetResultsCount","createSelectorCreator","memoizeOrOptions","memoizeOptionsFromArgs","createSelectorCreatorOptions","memoize","memoizeOptions","createSelector2","recomputations","dependencyRecomputations","directlyPassedOptions","resultFunc","combinedOptions","argsMemoize","argsMemoizeOptions","devModeChecks","finalMemoizeOptions","finalArgsMemoizeOptions","memoizedResultFunc","inputSelectorResults","inputSelectorArgs","collectInputSelectorResults","assign","resetDependencyRecomputations","resetRecomputations","withTypes","createStructuredSelector","inputSelectorsObject","selectorCreator","assertIsObject","inputSelectorKeys","structuredSelector","reduce","composition","selectLegendSettings","state","legend","settings","selectLegendPayload","createSelector","payloads","itemSorter","flat","EPS","useElementOffset","extraDependencies","lastBoundingBox","setLastBoundingBox","left","top","updateBoundingBox","useCallback","node","getBoundingClientRect","box","Q","Z","L","nn","u","X","rn","configurable","clear","freeze","isFrozen","tn","m","U","O","S","M","H","A","I","N","R","D","E","F","T","C","en","Proxy","revocable","revoke","proxy","J","K","G","W","B","Reflect","for","ownKeys","getOwnPropertyDescriptors","deleteProperty","setPrototypeOf","un","produce","Promise","then","produceWithPatches","useProxies","setUseProxies","autoFreeze","setAutoFreeze","createDraft","finishDraft","applyPatches","op","$","an","bind","_typeof","toPropertyKey","toPrimitive","_objectSpread2","defineProperties","formatProdErrorMessage","code","$$observable","observable","randomString","random","split","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","createStore","reducer","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","isSubscribed","action","replaceReducer","nextReducer","outerSubscribe","observer","observeState","next","unsubscribe","combineReducers","reducers","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","hasChanged","nextState","_i","_key","previousStateForKey","nextStateForKey","compose","_len","funcs","applyMiddleware","middlewares","_dispatch","middlewareAPI","chain","middleware","createThunkMiddleware","extraArgument","thunk","withExtraArgument","extendStatics","__extends","__","__generator","thisArg","body","label","sent","trys","ops","verb","done","__spreadArray","to","il","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","_c","__spreadProps","__async","__this","__arguments","generator","resolve","reject","fulfilled","rejected","throw","composeWithDevTools","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","__REDUX_DEVTOOLS_EXTENSION__","baseProto","createAction","prepareAction","actionCreator","prepared","meta","match","isAction","MiddlewareArray","_super","_this","species","prepend","EnhancerArray","freezeDraftable","curryGetDefaultMiddleware","middlewareArray","immutableCheck","serializableCheck","actionCreatorCheck","isBoolean","getDefaultMiddleware","configureStore","rootReducer","curriedGetDefaultMiddleware","_d","_e","_f","devTools","_g","_h","enhancers","finalMiddleware","middlewareEnhancer","finalCompose","trace","defaultEnhancers","storeEnhancers","executeReducerBuilderCallback","builderCallback","defaultCaseReducer","actionsMap","actionMatchers","builder","addCase","typeOrActionCreator","addMatcher","matcher","addDefaultCase","createSlice","_reducer","initialState","reducerNames","sliceCaseReducersByName","sliceCaseReducersByType","actionCreators","buildReducer","extraReducers","finalCaseReducers","mapOrBuilderCallback","getInitialState","finalActionMatchers","finalDefaultCaseReducer","isStateFunction","frozenInitialState_1","caseReducers","cr","previousState","caseReducer","draft","createReducer","actionMatchers_1","reducerName","prepareCallback","maybeReducerWithPrepare","actionKey","getType2","prepare","actions","nanoid","commonProperties","RejectWithValue","FulfillWithMeta","miniSerializeError","simpleError","commonProperties_1","createAsyncThunk2","typePrefix","payloadCreator","requestId","requestStatus","pending","serializeError","rejectedWithValue","condition","AC","AbortController","class_1","dispatchEvent","onabort","removeEventListener","reason","throwIfAborted","abort","extra","abortReason","idGenerator","abortController","promise2","_a","_b","finalAction","conditionResult","abortedPromise","err_1","isThenable","getPendingMeta","race","rejectWithValue","fulfillWithValue","dispatchConditionRejection","unwrap","unwrapResult","assertFunction","expected","catchRejection","onError","catch","addAbortSignalListener","abortSignal","callback","abortControllerWithReason","completed","cancelled","taskCancelled","taskCompleted","listenerCancelled","listenerCompleted","TaskAbortError","task","validateActive","raceWithSignal","cleanup","notifyRejection","finally","createPause","output","createDelay","pause","timeoutMs","INTERNAL_NIL_TOKEN","alm","createFork","parentAbortSignal","parentBlockingPromises","taskExecutor","opts","controller","childAbortController","task2","cleanUp","result2","delay","error_1","status","autoJoin","createTakePattern","startListening","predicate","timeout","tuplePromise","promises","stopListening","effect","listenerApi","getOriginalState","take","getListenerEntryPropsFrom","cancelActiveListeners","safelyNotifyError","errorHandler","errorToNotify","errorInfo","errorHandlerError","clearAllListeners","defaultErrorHandler","console","createListenerMiddleware","middlewareOptions","listenerMap","findListenerEntry","comparator","existingEntry","createListenerEntry","cancelOptions","cancelActive","insertEntry","entry2","notifyListener","api","internalTaskController","autoJoinPromises","listenerError_1","fork","raisedBy","allSettled","clearListenerMiddleware","createClearListenerMiddleware","originalState","listenerEntries","listenerEntries_1","runListener","predicateError","clearListeners","queueMicrotask","promise","createQueueWithTimer","notify","requestAnimationFrame","chartLayoutSlice","layoutType","right","bottom","scale","setLayout","setChartSize","setMargin","setScale","chartLayoutReducer","series","s0","s1","stackValue","stackSeries","radianToDegree","angleInRadian","polarToCartesian","radius","getMaxRadius","offset","brushBottom","getAngleOfPoint","distanceBetweenPoints","point","anotherPoint","reverseFormatAngleOfSector","_ref4","startAngle","endAngle","startCnt","endCnt","inRangeOfSector","_ref5","innerRadius","outerRadius","inRange","_ref3","formatAngleOfSector","formatAngle","getTickClassName","tick","getSliced","startIndex","endIndex","getValueByDataKey","dataKey","isCategoricalAxis","axisType","getCoordinatesOfGrid","ticks","minValue","maxValue","syncWithTicks","coordinate","hasMin","hasMax","getTicksOfAxis","axis","isGrid","isAll","duplicateDomain","realScaleType","isCategorical","categoricalDomain","tickCount","niceTicks","offsetForBand","bandwidth","scaleContent","row","domain","truncateByDomain","STACK_OFFSET_MAP","positive","negative","expand","none","stackOffsetNone","silhouette","wiggle","s2","si","sij0","s3","sk","getStackedData","dataKeys","offsetType","offsetAccessor","oz","sz","shapeStack","stackOrderNone","getNormalizedStackId","publicStackId","getCateCoordinateOfLine","bandSize","allowDuplicatedCategory","matchedTick","getCateCoordinateOfBar","getBaseValueOfBar","numericAxis","getDomainOfStackGroups","stackGroups","stackId","group","stackedData","res","sliced","MIN_VALUE_REG","MAX_VALUE_REG","getBandSizeOfAxis","isBar","bandWidth","orderedTicks","cur","prev","getTooltipEntry","tooltipEntrySettings","getTooltipNameProp","nameFromItem","selectChartWidth","selectChartHeight","selectContainerScale","selectMargin","selectAllXAxes","cartesianAxis","xAxis","xAxisMap","selectAllYAxes","yAxis","yAxisMap","COLOR_PANEL","DATA_ITEM_INDEX_ATTRIBUTE_NAME","DATA_ITEM_DATAKEY_ATTRIBUTE_NAME","selectChartOffsetInternal","brush","chartWidth","chartHeight","brushHeight","xAxes","yAxes","legendSettings","legendSize","offsetH","orientation","mirror","hide","offsetV","appendOffsetOfLegend","boxWidth","boxHeight","offsetWidth","offsetHeight","selectChartViewBox","selectAxisViewBox","PanoramaContext","useIsPanorama","PanoramaContextProvider","Provider","selectBrushSettings","selectBrushDimensions","brushSettings","useViewBox","_useAppSelector","panorama","rootViewBox","brushDimensions","brushPadding","manyComponentsThrowErrorsIfOffsetIsUndefined","useOffsetInternal","_useAppSelector2","useChartWidth","useChartHeight","manyComponentsThrowErrorsIfMarginIsUndefined","selectChartLayout","useChartLayout","ReportChartSize","ReportChartMargin","NOTHING","DRAFTABLE","DRAFT_STATE","die","isDraftable","isMap","isSet","objectCtorString","each","iter","getArchtype","thing","type_","propOrOldValue","latest","copy_","base_","shallowCopy","strict","isPlain","descriptors","deep","dontMutateFrozenCollections","currentScope","plugins","getPlugin","pluginKey","plugin","getCurrentScope","usePatchesInScope","scope","patchListener","patches_","inversePatches_","patchListener_","revokeScope","leaveScope","drafts_","revokeDraft","parent_","enterScope","immer2","immer_","canAutoFreeze_","unfinalizedDrafts_","revoke_","revoked_","processResult","baseDraft","modified_","finalize","maybeFreeze","generateReplacementPatches_","rootScope","childValue","finalizeProperty","scope_","finalized_","resultEach","isSet2","generatePatches_","parentState","targetObject","rootPath","targetIsSet","assigned_","autoFreeze_","objectTraps","getDescriptorFromProto","draft_","readPropFromProto","peek","prepareCopy","createProxy","current2","markChanged","owner","arrayTraps","useStrictShallowCopy_","proxyMap_","proxySet_","isManual_","traps","createProxyProxy","currentImpl","copy","immer","recipe","defaultBase","self","base2","hasError","ip","patches","inversePatches","useStrictShallowCopy","setUseStrictShallowCopy","patch","applyPatchesImpl","applyPatches_","legendSlice","setLegendSize","setLegendSettings","addLegendPayload","removeLegendPayload","legendReducer","LegendContent","contextPayload","otherProps","finalPayload","payloadUniqBy","contentProps","content","LegendSettingsDispatcher","LegendSizeDispatcher","LegendWrapper","_useAppSelector3","legendPortalFromContext","widthFromProps","heightFromProps","wrapperStyle","portal","portalFromProps","maxWidth","widthOrHeight","Legend","getWidthOrHeight","outerStyle","position","hPos","vPos","getDefaultPosition","legendPortal","legendElement","createPortal","defaultFormatter","DefaultTooltipContent","separator","contentStyle","labelStyle","wrapperClassName","labelClassName","labelFormatter","accessibilityLayer","backgroundColor","border","whiteSpace","finalLabelStyle","hasLabel","finalLabel","wrapperCN","labelCN","accessibilityAttributes","role","renderContent","finalName","formatted","finalItemStyle","paddingTop","paddingBottom","unit","CSS_CLASS_PREFIX","TOOLTIP_HIDDEN","visibility","getTooltipCSSClassName","translateX","translateY","getTooltipTranslateXY","allowEscapeViewBox","offsetTopLeft","reverseDirection","tooltipDimension","viewBoxDimension","viewBoxKey","TooltipBoundingBox","dismissed","dismissedAtCoordinate","_this$props$coordinat","_this$props$coordinat2","_this$props$coordinat3","_this$props$coordinat4","setState","componentDidMount","handleKeyDown","componentWillUnmount","componentDidUpdate","_this$props$coordinat5","_this$props$coordinat6","active","animationDuration","animationEasing","hasPayload","isAnimationActive","useTranslate3d","innerRef","hasPortalFromProps","cssClasses","cssProperties","tooltipBox","getTransformStyle","getTooltipTranslate","positionStyles","transition","pointerEvents","xmlns","tabIndex","Global","isSsr","useAccessibilityLayer","rootProps","that","_context","Basis","BasisClosed","BasisOpen","areaStart","_line","areaEnd","lineStart","_point","lineEnd","_x2","_x3","_x4","_y2","_y3","_y4","Bump","_x","LinearClosed","Linear","slope3","h0","h1","slope2","t0","t1","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","Step","_t","defined","curve","line","defined0","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","isWellBehavedNumber","isFinite","isPositiveNumber","_t0","_y","px","py","i0","i1","CURVE_FACTORIES","curveBasisClosed","curveBasisOpen","curveBasis","curveBumpX","curveBumpY","curveLinearClosed","curveLinear","curveMonotoneX","curveMonotoneY","curveNatural","curveStep","curveStepAfter","curveStepBefore","getX","getY","getPath","lineFunction","points","baseLine","connectNulls","curveFactory","getCurveFactory","formatPoints","formatBaseLine","areaPoints","shapeArea","shapeLine","Curve","pathRef","realPath","Cross","resolveDefaultProps","realProps","resolvedProps","acc","ACCURACY","cubicBezierFactor","c1","c2","evaluatePolynomial","params","param","pre","curr","cubicBezier","configBezier","easing","curveX","curveY","derCurveX","newParams","rangeValue","bezier","evalT","derVal","isStepper","configEasing","stiff","damping","dt","stepper","currX","destX","currV","newV","newX","configSpring","getTransitionVal","duration","toLowerCase","mapObject","alpha","begin","needContinue","calStepperVals","preVals","steps","nextStepVals","velocity","createStepperUpdate","interKeys","timeoutController","preTime","stepperStyle","stopAnimation","stepperUpdate","preObj","nextObj","beginTime","timingStyle","timingUpdate","currStyle","createTimingUpdate","RequestAnimationFrameTimeoutController","startTime","performance","executeCallback","cancelAnimationFrame","createDefaultAnimationManager","handleChange","shouldStop","cancelTimeout","setStyle","_style","styles","restStyles","stop","_handleChange","getTimeoutController","AnimationManagerContext","useAnimationManager","animationId","animationManagerFromProps","contextAnimationManager","AnimateImpl","super","isActive","attributeName","animationManager","manager","handleStyleChange","changeStyle","canBegin","mounted","runAnimation","prevProps","shouldReAnimate","currentFrom","isTriggered","stopJSAnimation","newState","onAnimationEnd","unSubscribe","runJSAnimation","onAnimationStart","startAnimation","configUpdate","finalStartAnimation","propsTo","_this$props","onAnimationReStart","count","stateStyle","cloneContainer","container","cloneElement","only","Animate","_props$attributeName","getRectanglePath","maxRadius","ySign","xSign","clockWise","newRadius","isUpdateAnimationActive","animationBegin","Rectangle","rectangleProps","totalLength","setTotalLength","getTotalLength","pathTotalLength","_unused","currWidth","currHeight","currY","getRadialCursorPoints","activeCoordinate","getTangentCircle","isExternal","cornerRadius","cornerIsExternal","centerRadius","theta","asin","centerAngle","lineTangencyAngle","center","circleTangency","lineTangency","getSectorPath","getDeltaAngle","tempEndAngle","outerStartPoint","outerEndPoint","innerStartPoint","innerEndPoint","forceCornerRadius","Sector","sectorProps","deltaRadius","soct","solt","sot","eoct","eolt","eot","outerArcAngle","sict","silt","sit","eict","eilt","eit","innerArcAngle","getSectorWithCorner","getCursorPoints","innerPoint","outerPoint","initRange","initInterpolator","interpolator","InternMap","keyof","_intern","intern_get","intern_set","intern_delete","implicit","ordinal","unknown","band","ordinalRange","r0","r1","paddingInner","paddingOuter","rescale","rangeRound","pointish","e10","e5","e2","tickSpec","power","log10","factor","i2","inc","tickIncrement","tickStep","ascending","descending","bisector","compare1","compare2","delta","lo","hi","mid","zero","ascendingBisect","bisectRight","extend","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","format","trim","exec","parseInt","rgbn","Rgb","rgba","hsla","opacity","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","clamph","clampt","hsl2rgb","m1","m2","v0","v1","v2","v3","t2","t3","channels","displayable","formatHex8","formatHsl","clamp","gamma","nogamma","exponential","rgbGamma","rgbSpline","spline","colors","genericArray","nb","na","setTime","reA","reB","am","bm","bs","bi","one","string","date","normalize","bimap","d0","d1","polymap","bisect","transformer","untransform","piecewise","clamper","invert","continuous","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","comma","formatDecimalParts","coefficient","toLocaleString","formatRounded","formatPrefix","prefixes","locale","grouping","thousands","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","nan","newFormat","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","nice","prestep","maxIter","interval","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","log2","logp","powp","transformSymlog","log1p","transformSymexp","expm1","symlogish","constant","symlog","transformPow","transformSqrt","transformSquare","powish","radial","squared","unsquare","valueof","compareDefined","swap","quantile","Float64Array","numbers","value0","quantileSorted","thresholds","invertExtent","quantiles","quantize","threshold","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","timeInterval","floori","offseti","field","previous","millisecond","second","getMilliseconds","getUTCSeconds","timeMinute","getSeconds","getMinutes","utcMinute","setUTCSeconds","getUTCMinutes","timeHour","getHours","utcHour","setUTCMinutes","getUTCHours","timeDay","setHours","setDate","getDate","getTimezoneOffset","utcDay","setUTCHours","setUTCDate","getUTCDate","unixDay","timeWeekday","getDay","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeMonth","setMonth","getMonth","getFullYear","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","timeYear","setFullYear","utcYear","setUTCFullYear","ticker","year","month","week","day","hour","minute","tickIntervals","tickInterval","utcTicks","utcTickInterval","timeTicks","timeTickInterval","localDate","utcDate","UTC","newDate","timeFormat","utcFormat","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","V","parseWeekNumberMonday","parseFullYear","parseYear","parseZone","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","dISO","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","time","utcTime","k10","sequential","sequentialLog","sequentialSymlog","sequentialPow","sequentialSqrt","sequentialQuantile","k21","r2","diverging","divergingLog","divergingSymlog","divergingPow","divergingSqrt","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","newParse","parse","utcParse","formatLocale","selectChartDataWithIndexes","chartData","selectChartDataAndAlwaysIgnoreIndexes","dataState","dataEndIndex","computedData","dataStartIndex","selectChartDataWithIndexesIfNotInPanorama","_unused1","_unused2","isPanorama","isWellFormedNumberDomain","extendDomain","providedDomain","boundaryDomain","allowDataOverflow","PLACE_HOLDER","isPlaceHolder","curry0","_curried","curryN","argsLength","_len2","restArgs","_key2","newArgs","curry","lastArgs","_len4","_key4","_lastArgs","getDigitCount","rangeStep","num","newA","diff","getValidInterval","validMin","validMax","getFormatStep","roughStep","allowDecimals","correctionFactor","digitCount","digitCountValue","stepRatio","stepRatioScale","formatStep","getTickOfSingleValue","middle","absVal","middleIndex","_len3","_key3","fns","firstFn","tailsFn","calculateStep","tickMin","tickMax","belowCount","upCount","scaleCount","getNiceTickValues","cormin","cormax","getTickValuesFixedDomain","selectRootMaxBarSize","maxBarSize","selectBarGap","barGap","selectBarCategoryGap","barCategoryGap","selectRootBarSize","barSize","selectStackOffsetType","stackOffset","selectChartName","chartName","selectSyncId","syncId","selectSyncMethod","syncMethod","selectEventEmitter","eventEmitter","defaultPolarAngleAxisProps","angleAxisId","axisLine","reversed","tickLine","tickSize","defaultPolarRadiusAxisProps","radiusAxisId","combineAxisRangeWithReverse","axisSettings","axisRange","implicitAngleAxis","includeHidden","implicitRadiusAxis","implicitRadialBarAngleAxis","implicitRadialBarRadiusAxis","selectAngleAxis","polarAxis","angleAxis","selectRadiusAxis","radiusAxis","selectPolarOptions","polarOptions","selectMaxRadius","selectInnerRadius","polarChartOptions","selectOuterRadius","selectAngleAxisRange","selectAngleAxisRangeWithReversed","selectRadiusAxisRange","selectRadiusAxisRangeWithReversed","selectPolarViewBox","pickAxisType","_state","pickAxisId","_axisType","axisId","getStackSeriesIdentifier","graphicalItem","selectTooltipAxisType","selectTooltipAxisId","tooltip","selectTooltipAxis","selectAxisSettings","combineDisplayedStackedData","stackedGraphicalItems","tooltipAxisSettings","tooltipDataKey","knownItemsByDataKey","_item$data","resolvedData","stackIdentifier","tooltipValue","numericValue","isStacked","defaultNumericDomain","implicitXAxis","minTickGap","tickFormatter","selectXAxisSettings","implicitYAxis","selectYAxisSettings","implicitZAxis","selectZAxisSettings","zAxis","selectBaseAxis","selectHasBar","graphicalItems","cartesianItems","some","polarItems","itemAxisPredicate","xAxisId","yAxisId","zAxisId","selectUnfilteredCartesianItems","selectAxisPredicate","combineGraphicalItemsSettings","axisPredicate","selectCartesianItemsSettings","selectStackedCartesianItemsSettings","filterGraphicalNotStackedItems","selectCartesianItemsSettingsExceptStacked","combineGraphicalItemsData","selectCartesianGraphicalItemsData","combineDisplayedData","graphicalItemsData","selectDisplayedData","combineAppliedValues","flatMap","selectAllAppliedValues","isErrorBarRelevantForAxisType","errorBar","direction","onlyAllowNumbers","getErrorDomainByDataKey","appliedValue","relevantErrorBars","eb","lowBound","highBound","errorValue","selectDisplayedStackedData","combineStackGroups","displayedData","stackOffsetType","itemsGroup","selectStackGroups","combineDomainOfStackGroups","domainOfStackGroups","selectDomainOfStackGroups","combineAppliedNumericalValuesIncludingErrorValues","errorBars","_errorBars$item$id","_axisSettings$dataKey","valueByDataKey","errorDomain","selectAllErrorBarSettings","combineRelevantErrorBarSettings","cartesianItemsSettings","allErrorBarSettings","selectAllAppliedNumericalValuesIncludingErrorValues","onlyAllowNumbersAndStringsAndDates","computeNumericalDomain","dataWithErrorDomains","allDataSquished","onlyNumbers","getDomainDefinition","_axisSettings$domain","allValues","mergeDomains","domains","allDomains","selectReferenceDots","referenceElements","dots","filterReferenceElements","elements","el","ifOverflow","selectReferenceDotsByAxis","selectReferenceAreas","areas","selectReferenceAreasByAxis","selectReferenceLines","lines","selectReferenceLinesByAxis","combineDotsDomain","allCoords","selectReferenceDotsDomain","combineAreasDomain","selectReferenceAreasDomain","combineLinesDomain","selectReferenceLinesDomain","selectReferenceElementsDomain","dotsDomain","linesDomain","areasDomain","selectDomainDefinition","combineNumericalDomain","domainDefinition","allDataWithErrorDomains","referenceElementsDomain","domainFromUserPreference","userDomain","finalMin","finalMax","providedMin","providedMax","candidate","numericalDomainSpecifiedWithoutRequiringData","dataDomain","_unused3","parseNumericalUserDomain","selectNumericalDomain","expandDomain","combineAxisDomain","allAppliedValues","numericalDomain","computeDomainOfTypeCategory","selectAxisDomain","combineRealScaleType","axisConfig","hasBar","chartType","d3Scales","selectRealScaleType","combineScaleFunction","axisDomain","d3ScaleFunction","getD3ScaleFromType","first","checkDomainOfScale","combineNiceTicks","selectNiceTicks","combineAxisDomainWithNiceTicks","minFromDomain","minFromTicks","maxFromDomain","maxFromTicks","selectAxisDomainIncludingNiceTicks","selectSmallestDistanceBetweenValues","smallestDistanceBetweenValues","sortedValues","distance","selectCalculatedPadding","_1","_2","_3","smallestDistanceInPercent","rangeWidth","gap","halfBand","selectXAxisPadding","selectCalculatedXAxisPadding","xAxisSettings","calculated","_padding$left","_padding$right","selectYAxisPadding","selectCalculatedYAxisPadding","yAxisSettings","_padding$top","_padding$bottom","combineXAxisRange","_axisId","combineYAxisRange","selectAxisRange","_selectZAxisSettings","selectAxisRangeWithReverse","selectAxisScale","compareIds","pickAxisOrientation","pickMirror","_orientation","selectAllXAxesWithOffsetType","allAxes","selectAllYAxesWithOffsetType","getXAxisSize","selectXAxisSize","selectAllXAxesOffsetSteps","allAxesWithSameOffsetType","axisSize","combineXAxisPositionStartingPoint","needSpace","selectAllYAxesOffsetSteps","getYAxisSize","combineYAxisPositionStartingPoint","selectYAxisSize","selectCartesianAxisSize","combineDuplicateDomain","chartLayout","appliedValues","allData","av","selectDuplicateDomain","combineCategoricalDomain","selectCategoricalDomain","selectAxisPropsNeededForCartesianGridTicksGenerator","selectCartesianAxisSettings","combineAxisTicks","ticksOrNiceTicks","selectTicksOfAxis","combineGraphicalItemTicks","selectTicksOfGraphicalItem","selectAxisWithScale","selectZAxisScale","selectZAxisWithScale","selectChartDirection","allXAxes","allYAxes","selectDefaultTooltipEventType","defaultTooltipEventType","selectValidateTooltipEventTypes","validateTooltipEventTypes","combineTooltipEventType","shared","eventType","selectTooltipEventType","combineActiveLabel","tooltipTicks","activeIndex","_tooltipTicks$n","noInteraction","tooltipSlice","itemInteraction","click","hover","axisInteraction","keyboardInteraction","syncInteraction","tooltipItemPayloads","trigger","defaultIndex","addTooltipEntrySettings","removeTooltipEntrySettings","setTooltipSettingsState","setActiveMouseOverItemIndex","activeDataKey","mouseLeaveChart","mouseLeaveItem","setActiveClickItemIndex","setMouseOverAxisIndex","setMouseClickAxisIndex","setSyncInteraction","setKeyboardInteraction","tooltipReducer","combineTooltipInteractionState","tooltipState","tooltipEventType","appropriateMouseInteraction","chooseAppropriateMouseInteraction","activeFromProps","combineActiveTooltipIndex","tooltipInteraction","desiredIndex","indexAsNumber","upperLimit","combineCoordinateForDefaultIndex","tooltipConfigurations","tooltipPayloadSearcher","firstConfiguration","maybePosition","positions","combineTooltipPayloadConfigurations","filterByDataKey","tpc","_tpc$settings","selectTooltipPayloadSearcher","selectTooltipState","combineTooltipPayload","tooltipPayloadConfigurations","chartDataState","tooltipAxis","activeLabel","agg","_settings$dataKey","tooltipPayload","_getValueByDataKey","dataDefinedOnItem","finalData","dataDefinedOnChart","selectFinalData","finalDataKey","finalNameKey","nameKey","newSettings","selectTooltipAxisRealScaleType","selectAllUnfilteredGraphicalItems","selectTooltipAxisPredicate","selectAllGraphicalItemsSettings","selectAllStackedGraphicalItemsSettings","selectTooltipGraphicalItemsData","selectTooltipDisplayedData","selectTooltipStackedData","selectAllTooltipAppliedValues","selectTooltipAxisDomainDefinition","selectAllStackedGraphicalItems","selectTooltipStackGroups","selectTooltipDomainOfStackGroups","selectTooltipItemsSettingsExceptStacked","selectTooltipAllAppliedNumericalValuesIncludingErrorValues","selectReferenceDotsByTooltipAxis","selectTooltipReferenceDotsDomain","selectReferenceAreasByTooltipAxis","selectTooltipReferenceAreasDomain","selectReferenceLinesByTooltipAxis","selectTooltipReferenceLinesDomain","selectTooltipReferenceElementsDomain","selectTooltipNumericalDomain","selectTooltipAxisDomain","selectTooltipNiceTicks","selectTooltipAxisDomainIncludingNiceTicks","selectTooltipAxisRange","selectTooltipAxisRangeWithReverse","selectTooltipAxisScale","selectTooltipDuplicateDomain","selectTooltipCategoricalDomain","selectTooltipAxisTicks","combineTicksOfTooltipAxis","validateTooltipEventType","selectTooltipTrigger","selectDefaultIndex","selectTooltipInteractionState","selectActiveTooltipIndex","selectActiveLabel","selectActiveTooltipDataKey","selectTooltipPayloadConfigurations","selectTooltipCoordinateForDefaultIndex","selectActiveTooltipCoordinate","tooltipInteractionState","defaultIndexCoordinate","selectIsTooltipActive","selectActiveTooltipPayload","selectActiveTooltipDataPoints","dataPoints","useTooltipAxisBandSize","tooltipAxisScale","useChartName","pickTooltipEventType","pickTrigger","_tooltipEventType","pickDefaultIndex","_trigger","selectOrderedTooltipTicks","selectActiveIndex","selectTooltipDataKey","selectCoordinateForDefaultIndex","selectActiveCoordinate","_tooltipInteractionSt","selectTooltipPayload","CursorInternal","restProps","cursorComp","tooltipAxisBandSize","cursor","activePayload","activeTooltipIndex","getCursorRectangle","extraClassName","cursorProps","payloadIndex","Cursor","TooltipPortalContext","useTooltipPortal","eventCenter","TOOLTIP_SYNC_EVENT","BRUSH_SYNC_EVENT","arrayTooltipSearcher","strIndex","numIndex","optionsSlice","createEventEmitter","optionsReducer","selectSynchronisedTooltipState","chartDataSlice","setChartData","setComputedData","setDataStartEndIndexes","chartDataReducer","useSynchronisedEventsFromOtherCharts","mySyncId","myEventEmitter","incomingSyncId","activeTick","syncMethodParam","isTooltipActive","validateChartX","validateChartY","syncAction","useTooltipSyncEventsListener","useBrushSyncEventsListener","emptyPayload","defaultTooltipProps","filterNull","Tooltip","outsideProps","defaultIndexAsString","useTooltipEventType","payloadFromRedux","labelFromRedux","tooltipPortalFromContext","finalIsActive","eventEmitterSymbol","isReceivingSynchronisation","useTooltipChartSynchronisation","tooltipPortal","tooltipElement","warn","ResponsiveContainer","aspect","initialDimension","minWidth","minHeight","maxHeight","onResize","containerRef","onResizeRef","useImperativeHandle","sizes","setSizes","containerWidth","containerHeight","setContainerSize","newWidth","newHeight","prevState","roundedWidth","roundedHeight","_onResizeRef$current","contentRect","ResizeObserver","observe","disconnect","chartContent","calculatedWidth","calculatedHeight","overflow","Cell","_props","currentConfig","cacheSize","enableCache","stringCache","maxSize","firstKey","SPAN_STYLE","MEASUREMENT_SPAN_ID","measureTextWithDOM","text","measurementSpan","getElementById","setAttribute","appendChild","textContent","getStringSize","cacheKey","fontSize","fontFamily","fontWeight","fontStyle","letterSpacing","textTransform","createCacheKey","cachedResult","MULTIPLY_OR_DIVIDE_REGEX","ADD_OR_SUBTRACT_REGEX","CSS_LENGTH_UNIT_REGEX","NUM_SPLIT_REGEX","CONVERSION_RATES","cm","mm","pt","pc","in","FIXED_CSS_LENGTH_UNITS","STR_NAN","DecimalCSS","_NUM_SPLIT_REGEX$exec","numStr","convertToPx","multiply","calculateArithmetic","expr","newExpr","_MULTIPLY_OR_DIVIDE_R","leftOperand","operator","rightOperand","lTs","rTs","_ADD_OR_SUBTRACT_REGE","PARENTHESES_REGEX","evaluateExpression","expression","parentheticalExpression","calculateParentheses","reduceCSSCalc","safeEvaluateExpression","BREAKING_SPACES","calculateWordWidths","breakAll","words","wordsWithComputedWidth","word","spaceWidth","getWordsWithoutCalculate","getWordsByLines","scaleToFit","maxLines","wordWidths","wcw","sw","calculateWordsByLines","initialWordsWithComputedWith","lineWidth","shouldLimitLines","calculate","currentLine","newLine","originalResult","findLongestLine","trimmedResult","checkOverflow","tempText","iterations","doesPrevOverflow","doesMiddleOverflow","DEFAULT_FILL","Text","propsX","propsY","lineHeight","capHeight","textAnchor","verticalAnchor","wordsByLines","textProps","_excluded2","startDy","transforms","getLabel","isLabelContentAFunction","renderRadialLabel","labelProps","attrs","labelAngle","deltaAngle","startPoint","endPoint","dominantBaseline","xlinkHref","getAttrsOfPolarLabel","midAngle","getAttrsOfCartesianLabel","parentViewBox","verticalSign","verticalOffset","verticalEnd","verticalStart","horizontalSign","horizontalOffset","horizontalEnd","horizontalStart","sizeAttrs","isPolar","Label","viewBoxFromProps","textBreakAll","labelRef","polarViewBox","cartesianViewBox","propsWithViewBox","propsWithoutLabelRef","isPolarLabel","positionAttrs","parseViewBox","labelViewBox","renderCallByParent","parentProps","checkPropsLabel","explicitChildren","implicitLabel","parseLabel","commonProps","defaultAccessor","LabelList","valueAccessor","idProps","parseLabelList","Customized","isValidatePoint","getSinglePolygonPath","segmentPoints","getParsedPoints","segPoints","polygonPath","Polygon","baseLinePoints","hasStroke","rangePath","getRanglePath","outerPath","singlePath","Dot","selectUnfilteredPolarItems","selectPolarItemsSettings","selectPolarGraphicalItemsData","selectPolarDisplayedData","selectPolarAppliedValues","selectAllPolarAppliedNumericalValues","unsupportedInPolarChart","selectPolarNumericalDomain","selectPolarAxisDomain","selectPolarNiceTicks","selectPolarAxisDomainIncludingNiceTicks","selectPolarAxis","selectPolarAxisRangeWithReversed","selectPolarAxisScale","selectPolarCategoricalDomain","selectPolarAxisTicks","selectPolarGraphicalItemAxisTicks","selectPolarGridAngles","selectAngleAxisTicks","anglexisId","selectPolarGridRadii","selectRadiusAxisTicks","getPolygonPath","polarAngles","PolarAngles","radialLines","polarAnglesProps","ConcentricCircle","concentricCircleProps","ConcentricPolygon","concentricPolygonProps","ConcentricGridPath","polarRadius","gridType","PolarGrid","_polarViewBox$cx","_polarViewBox$cy","_polarViewBox$innerRa","_polarViewBox$outerRa","cxFromOutside","cyFromOutside","innerRadiusFromOutside","outerRadiusFromOutside","inputs","polarAnglesInput","polarRadiusInput","polarAnglesFromRedux","polarRadiiFromRedux","polarAxisSlice","addRadiusAxis","removeRadiusAxis","addAngleAxis","removeAngleAxis","polarAxisReducer","AXIS_TYPE","SetRadiusAxisSettings","renderTicks","getTickTextAnchor","axisProps","customTickProps","coord","getTickValueCoord","tickProps","renderTickItem","PolarRadiusAxisWrapper","defaultsAndInputs","renderAxisLine","extent","point0","point1","axisLineProps","getViewBox","maxRadiusTick","PolarRadiusAxis","eps","SetAngleAxisSettings","synchronizedSettings","settingsAreSynchronized","AxisLine","axisLineType","TickItemText","Ticks","tickLineProps","lineCoord","getTickLineCoord","tickLineSize","p1","p2","PolarAngleAxisWrapper","PolarAngleAxis","selectSynchronisedPieSettings","pickId","emptyArray","pickCells","_id","cells","pieSettings","cell","presentationProps","selectPieLegend","_cells$i","legendType","selectPieSectors","_pieSettings$paddingA","sectors","tooltipType","minAngle","parseDeltaAngle","absDeltaAngle","paddingAngle","notZeroItemCount","realTotalAngle","tempStartAngle","parseCoordinateOfPie","entryWithCellInfo","middleRadius","tooltipPosition","computePieSectors","getTrapezoidPath","upperWidth","lowerWidth","widthGap","Trapezoid","trapezoidProps","currUpperWidth","currLowerWidth","defaultPropTransformer","ShapeSelector","shapeType","elementProps","isSymbolsProps","getPropsFromShapeOption","Shape","propTransformer","activeClassName","nextProps","useMouseEnterItemDispatch","onMouseEnterFromProps","useMouseLeaveItemDispatch","onMouseLeaveFromProps","useMouseClickItemDispatch","onMouseClickFromProps","SetTooltipEntrySettings","SetLegendPayload","legendPayload","SetPolarLegendPayload","useAnimationId","useId","useIdFallback","GraphicalItemIdContext","RegisterGraphicalItemId","resolvedId","customId","generatedId","useUniqueId","graphicalItemsSlice","addCartesianGraphicalItem","replaceCartesianGraphicalItem","removeCartesianGraphicalItem","addPolarGraphicalItem","removePolarGraphicalItem","graphicalItemsReducer","SetCartesianGraphicalItem","prevPropsRef","SetPolarGraphicalItem","defaultJavascriptAnimateProps","JavascriptAnimate","onAnimationActive","SetPiePayloadLegend","getTooltipEntrySettings","getTextAnchor","dataPoint","maxPieRadius","getOuterRadius","renderLabelLineItem","renderLabelItem","alignmentBaseline","PieLabels","showLabels","labelLine","pieProps","customLabelProps","customLabelLineProps","offsetRadius","labels","lineProps","PieSectors","activeShape","inactiveShape","inactiveShapeProp","allOtherPieProps","onMouseEnter","onClick","onItemClickFromProps","onMouseLeave","restOfAllOtherProps","onMouseEnterFromContext","onMouseLeaveFromContext","onClickFromContext","isSectorActive","sectorOptions","SectorsWithAnimation","previousSectorsRef","prevSectors","isAnimating","setIsAnimating","handleAnimationEnd","handleAnimationStart","stepData","curAngle","angleIp","interpolatorAngle","RenderSectors","PieWithTouchMove","rootTabIndex","defaultPieProps","PieImpl","propsWithoutId","Pie","_resolveDefaultProps","externalId","_excluded3","selectChartOffset","offsetInternal","selectPlotArea","useActiveTooltipLabel","useOffset","usePlotArea","useActiveTooltipDataPoints","ActivePoints","mainColor","activeDot","itemDataKey","activeDataPoints","activePoint","childIndex","dotProps","renderActivePoint","selectRadiusAxisScale","selectRadiusAxisForRadar","selectRadiusAxisForBandSize","selectAngleAxisForRadar","_radiusAxisId","selectPolarAxisScaleForRadar","selectAngleAxisForBandSize","selectAngleAxisWithScaleAndViewport","axisOptions","selectBandSizeOfAxis","_angleAxisId","radiusAxisTicks","angleAxisTicks","selectSynchronisedRadarDataKey","pickDataKey","_isPanorama","radarDataKey","pgis","selectRadarPoints","isRange","angleBandSize","pointValue","baseValue","computeRadarPoints","getLegendItemColor","computeLegendPayloadFromRadarSectors","Dots","baseProps","customDotProps","renderDotItem","StaticPolygon","radar","PolygonWithAnimation","previousPointsRef","prevPoints","prevPointsDiffFactor","interpolatorX","interpolatorY","RenderPolygon","defaultRadarProps","RadarWithState","RadarImpl","radarPoints","Radar","parseCornerRadius","typeGuardSectorProps","cxValue","cyValue","RadialBarSector","typeguardBarRectangleProps","xProp","yProp","xValue","yValue","heightValue","widthValue","BarRectangle","minPointSizeCallback","minPointSize","isValueNumberOrNil","invariant","errorBarSlice","addErrorBar","itemId","removeErrorBar","errorBarReducer","initialContextState","dataPointFormatter","errorBarOffset","ErrorBarContext","SetErrorBarContext","ReportErrorBarSettings","graphicalItemId","useNeedsClip","_xAxis$allowDataOverf","_yAxis$allowDataOverf","needClipX","needClipY","needClip","GraphicalItemClipPath","clipPathId","plotArea","computeLegendPayloadFromBarData","BarBackground","background","backgroundFromProps","allOtherBarProps","backgroundProps","backgroundFromDataEntry","barRectangleProps","BarRectangles","_svgPropertiesNoEvent","activeBar","_excluded4","RectanglesWithAnimation","previousRectanglesRef","prevData","RenderRectangles","errorBarDataPointFormatter","errorVal","BarWithState","clipPath","defaultBarProps","BarImpl","rects","selectBarRectangles","firstDataPoint","Bar","selectSynchronisedBarSettings","pickBarId","_xAxisId","_yAxisId","selectMaxBarSize","barSettings","getBarSize","globalSize","totalSize","selfSize","selectAllVisibleBars","pickXAxisId","pickYAxisId","pickIsPanorama","allItems","combineBarSizeList","allBars","stackedBars","unstackedBars","groupByStack","bar","stackedSizeList","bars","unstackedSizeList","dk","selectBarSizeList","selectBarCartesianAxisSize","selectAxisBandSize","combineAllBarPositions","sizeList","globalMaxBarSize","barBandSize","childMaxBarSize","allBarPositions","realBarGap","initialValue","useFull","fullBarSize","_entry$barSize","newRes","originalSize","getBarPositions","pos","selectAllBarPositions","selectBarBandSize","_getBandSizeOfAxis","selectBarPosition","combineStackedData","stackSeriesIdentifier","stackGroup","selectStackedDataOfItem","selectBarStackGroups","selectXAxisWithScale","selectYAxisWithScale","selectXAxisTicks","selectYAxisTicks","xAxisTicks","yAxisTicks","minPointSizeProp","stackedDomain","baseValueScale","currentValueScale","computedHeight","computeBarRectangles","selectRadiusAxisWithScale","selectRadiusAxisForRadialBar","selectRadiusAxisScaleForRadar","selectAngleAxisWithScale","selectAngleAxisForRadialBar","selectAngleAxisScaleForRadialBar","selectSynchronisedRadialBarSettings","pickRadialBarSettings","radialBarSettings","radialBarSettingsFromProps","selectBandSizeOfPolarAxis","selectBaseValue","pickMaxBarSize","_cells","selectAllVisibleRadialBars","pickAngleAxisId","_radialBarSettings","pickRadiusAxisId","selectPolarBarSizeList","selectPolarBarAxisSize","selectPolarBarBandSize","_getBandSizeOfAxis2","selectAllPolarBarPositions","selectPolarBarPosition","selectStackedRadialBars","allPolarItems","selectPolarCombinedStackedData","selectPolarStackedData","selectRadialBarStackGroups","selectRadialBarSectors","rootStartAngle","rootEndAngle","backgroundSector","computeRadialBarDataItems","selectRadialBarLegendPayload","_s","STABLE_EMPTY_ARRAY","RadialBarSectors","allOtherRadialBarProps","radialBarSectorProps","interpolatorStartAngle","interpolatorEndAngle","SetRadialBarPayloadLegend","RadialBarWithState","renderBackground","RadialBarImpl","defaultRadialBarProps","RadialBar","_this$props$hide","_this$props$angleAxis","_this$props$radiusAxi","PREFIX_LIST","ChartDataContextProvider","SetComputedData","selectChartData","useChartData","selectDataIndex","useDataIndex","BrushUpdateDispatchContext","brushSlice","setBrushSettings","brushReducer","DefaultTraveller","lineY","Traveller","travellerProps","travellerType","TravellerLayer","_data$startIndex","_data$endIndex","travellerX","onMouseDown","onTouchStart","onTravellerMoveKeyboard","onFocus","onBlur","xFromProps","travellerWidth","traveller","ariaLabel","ariaLabelBrush","onKeyDown","preventDefault","stopPropagation","getTextOfTick","getIndexInRange","valueRange","getIndex","startX","endX","scaleValues","minIndex","maxIndex","Background","BrushText","Slide","fillOpacity","Panorama","_ref6","chartElement","compact","isTouch","changedTouches","BrushWithState","leaveTimer","isTravellerMoving","handleTravellerMove","isSlideMoving","handleSlideDrag","handleDrag","onDragEnd","detachDragEndListener","handleDragEnd","leaveTimeOut","isTextActive","slideMoveStartX","pageX","attachDragEndListener","currentScaleValue","currentIndex","newIndex","newScaleValue","onChange","travellerDragStartHandlers","handleTravellerDragStart","brushMoveStartX","movingTravellerId","startIndexControlledFromProps","endIndexControlledFromProps","prevTravellerWidth","prevX","prevWidth","_ref7","scalePoint","isTravellerFocused","createScale","prevScale","prevStartIndexControlledFromProps","prevEndIndexControlledFromProps","prevValue","isFullGap","alwaysShowText","generatePrefixStyle","camelName","calculatedY","handleLeaveWrapper","onTouchMove","handleTouchMove","handleEnterSlideOrTraveller","handleLeaveSlideOrTraveller","handleSlideDragStart","handleTravellerMoveKeyboard","BrushInternal","brushStartIndex","brushEndIndex","dataIndexes","onChangeFromContext","onChangeFromProps","startIndexFromProps","endIndexFromProps","contextProperties","BrushSettingsDispatcher","defaultBrushProps","Brush","rectWithPoints","ScaleHelper","rangeMin","rangeMax","bandAware","isInRange","createLabeledScales","scales","referenceElementsSlice","addDot","removeDot","addArea","removeArea","addLine","removeLine","referenceElementsReducer","ClipPathIdContext","ClipPathProvider","useClipPathId","ReportReferenceLine","ReferenceLineImpl","fixedX","fixedY","segment","xAxisScale","yAxisScale","isFixedX","isFixedY","endPoints","getEndPoints","isSegment","xAxisOrientation","yAxisOrientation","yCoord","xCoord","renderLine","rectWithCoords","ReferenceLineSettingsDispatcher","ReferenceLine","Component","ReportReferenceDot","ReferenceDotImpl","useCoordinate","isX","isY","renderDot","ReferenceDotSettingsDispatcher","ReferenceDot","ReportReferenceArea","ReferenceAreaImpl","hasX1","hasX2","hasY1","hasY2","getRect","xValue1","xValue2","yValue1","yValue2","renderRect","ReferenceAreaSettingsDispatcher","ReferenceArea","shallowEqual","getEveryNthWithCondition","isValid","getAngledTickWidth","contentSize","unitSize","normalizedAngle","normalizeAngle","angleRadians","angleThreshold","atan","angledWidth","getAngledRectangleWidth","isVisible","tickPosition","getSize","getTicks","_getNumberIntervalTic","getNumberIntervalTicks","candidates","sizeKey","getTickSize","boundaries","isWidth","getTickBoundaries","_ret","initialStart","stepsize","_loop","tickCoord","isShow","getEquidistantTicks","preserveEnd","tail","tailSize","tailGap","_loop2","getTicksStart","getTicksEnd","CartesianAxis","tickRefs","shouldComponentUpdate","viewBoxOld","restPropsOld","tx","ty","tickMargin","finalTickSize","getTickVerticalAnchor","needHeight","needWidth","tickItem","combinedClassName","finalTicks","visibleTicksCount","tickNodes","getElementsByClassName","calculatedFontSize","getComputedStyle","calculatedLetterSpacing","ry","renderLineItem","lineItem","restOfFilteredProps","HorizontalGridLines","horizontal","horizontalPoints","otherLineItemProps","lineItemProps","VerticalGridLines","vertical","verticalPoints","HorizontalStripes","horizontalFill","roundedSortedHorizontalPoints","colorIndex","VerticalStripes","verticalFill","roundedSortedVerticalPoints","defaultVerticalCoordinatesGenerator","defaultHorizontalCoordinatesGenerator","CartesianGrid","propsIncludingDefaults","horizontalValues","verticalValues","verticalCoordinatesGenerator","horizontalCoordinatesGenerator","isHorizontalValues","generatorResult","isVerticalValues","selectBandSize","isLineSettings","selectSynchronisedLineSettings","pickLineId","selectLinePoints","lineSettings","computeLinePoints","computeLegendPayloadFromAreaData","generateSimpleStrokeDasharray","repeat","linesUnit","shouldRenderDots","dotItem","dotsProps","StaticCurve","curveProps","CurveWithAnimation","longestAnimatedLengthRef","animateNewValues","mainCurve","startingPoint","currentStrokeDasharray","lengthInterpolated","curLength","getStrokeDasharray","lineLength","remainLength","restLength","remainLines","emptyLines","prevPointIndex","RenderCurve","LineWithState","_filterProps","dotSize","defaultLineProps","LineImpl","everythingElse","Line","selectSynchronisedAreaSettings","pickAreaId","selectArea","selectGraphicalItemStackedData","_stackGroups$stackId","areaSettings","groups","_ref8","itemBaseValue","chartBaseValue","hasStack","getBaseValue","isHorizontalLayout","isBreakPoint","computeArea","areaProps","StaticArea","allOtherProps","VerticalRect","startY","endY","maxX","HorizontalRect","maxY","ClipRect","AreaWithAnimation","previousBaselineRef","prevBaseLine","stepBaseLine","stepPoints","RenderArea","AreaWithState","defaultAreaProps","AreaImpl","domainMax","domainMin","Area","cartesianAxisSlice","addXAxis","removeXAxis","addYAxis","removeYAxis","addZAxis","removeZAxis","updateYAxisWidth","cartesianAxisReducer","SetZAxisSettings","ZAxis","ScatterSymbol","selectSynchronisedScatterSettings","pickScatterId","_zAxisId","selectScatterPoints","scatterChartDataSelector","selectZAxis","scatterSettings","xAxisDataKey","yAxisDataKey","zAxisDataKey","defaultRangeZ","defaultZ","xBandSize","yBandSize","computeScatterPoints","computeLegendPayloadFromScatterProps","ScatterLine","lineType","lineJointType","linePoints","scatterProps","customLineProps","linearExp","ScatterSymbols","allOtherScatterProps","allOtherPropsWithoutId","symbolProps","SymbolsWithAnimation","interpolatorCx","interpolatorCy","interpolatorSize","RenderSymbols","ScatterWithId","defaultScatterProps","ScatterImpl","Scatter","SetXAxisSettings","XAxisImpl","cartesianTickItems","selectXAxisPosition","stepOfThisAxis","dangerouslySetInnerHTML","XAxisSettingsDispatcher","_props$interval","_props$includeHidden","_props$angle","_props$minTickGap","_props$tick","XAxis","SetYAxisSettings","YAxisImpl","_cartesianAxisRef$cur","cartesianAxisRef","selectYAxisPosition","_axisComponent$tickRe","axisComponent","updatedYAxisWidth","labelGapWithTick","maxTickWidth","tickNode","bbox","labelWidth","getCalculatedYAxisWidth","YAxisSettingsDispatcher","YAxisDefaultProps","YAxis","CSSTransitionAnimate","ErrorBarImpl","svgProps","useXAxis","useYAxis","lineCoordinates","yMid","yMin","yMax","xMin","xMax","xMid","scaleDirection","transformOrigin","coordinates","lineStyle","errorBarDefaultProps","ErrorBarInternal","directionFromProps","realDirection","ErrorBar","batch","getBatch","ContextKey","gT","getContext","_gT$ContextKey","contextMap","realContext","nullListeners","parentSub","subscriptionsAmount","selfSubscribed","handleChangeWrapper","onStateChange","trySubscribe","createListenerCollection","tryUnsubscribe","cleanupListener","removed","notifyNestedSubs","getListeners","serverState","stabilityCheck","noopCheck","contextValue","getServerState","Context","newBatch","initializeUseSelector","initializeConnect","selectActivePropsFromChartPointer","pickChartPointer","chartPointer","combineActiveProps","chartEvent","tooltipAxisType","tooltipAxisRange","orderedTooltipTicks","rangeObj","chartX","chartY","calculateTooltipPos","calculateActiveTickIndex","unsortedTicks","_ticks$length","before","after","sameDirectionCoord","diffInterval","curInRange","afterInRange","sameInterval","getActiveCoordinate","getChartPointer","currentTarget","scaleX","scaleY","clientX","clientY","mouseClickAction","mouseClickMiddleware","mousePointer","activeProps","mouseMoveAction","mouseMoveMiddleware","reduxDevtoolsJsonStringifyReplacer","HTMLElement","tagName","rootPropsSlice","updateOptions","_action$payload$barGa","rootPropsReducer","polarOptionsSlice","updatePolarOptions","polarOptionsReducer","keyDownAction","focusAction","keyboardEventsMiddleware","nextIndex","_action","externalEventAction","externalEventsMiddleware","handler","reactEvent","selectAllTooltipPayloadConfiguration","selectTooltipCoordinate","tooltipIndex","_dataKey","_tooltipIndex","allTooltipConfigurations","mostRelevantTooltipConfiguration","tooltipConfiguration","touchEventAction","touchEventMiddleware","touchEvent","touches","_target$getAttribute","touch","elementFromPoint","getAttribute","itemIndex","createRechartsStore","serialize","replacer","RechartsStoreProvider","reduxStoreName","storeRef","nonNullContext","ReportMainChartProps","ReportChartProps","FULL_WIDTH_AND_HEIGHT","MainChartSurface","hasAccessibilityLayer","otherAttributes","BrushPanoramaSurface","RootSurface","RechartsWrapper","onContextMenu","onDoubleClick","onMouseMove","onMouseUp","onTouchEnd","setTooltipPortal","setLegendPortal","setScaleRef","setRef","newScale","useReportScale","myOnClick","myOnMouseEnter","myOnMouseLeave","myOnMouseMove","myOnContextMenu","myOnDoubleClick","myOnMouseDown","myOnMouseUp","myOnTouchStart","myOnTouchMove","myOnTouchEnd","CategoricalChart","reverseStackOrder","CartesianChart","_categoricalChartProp","rootChartProps","categoricalChartProps","otherCategoricalProps","allowedTooltipTypes","LineChart","BarChart","ReportPolarOptions","PolarChart","_polarChartProps$id","polarChartProps","PieChart","propsWithDefaults","NODE_VALUE_KEY","treemapPayloadSearcher","computeNode","nodeValue","nestedActiveTooltipIndex","currentTooltipIndex","indexInChildrenArr","addToTreemapNodeIndex","childDepth","computedChildren","getWorstScore","parentSize","aspectRatio","parentArea","rowArea","parentRect","isFlush","horizontalPosition","rowHeight","curX","verticalPosition","rowWidth","curY","squarify","score","filterRect","best","scaleChildren","getAreaOfChildren","areaValueRatio","ratio","tempChildren","defaultState","isAnimationFinished","formatRoot","currentRoot","nestIndex","ContentItem","nodeProps","colorPanel","arrow","nameSize","ContentItemWithEvents","defaultTreemapMargin","TreemapWithState","activeNode","prevType","prevHeight","prevDataKey","prevAspectRatio","handleMouseEnter","persist","handleMouseLeave","handleClick","handleNestIndex","renderItem","isLeaf","renderNode","renderAllNodes","renderNestIndex","nestIndexContent","marginTop","TreemapDispatchInject","Treemap","_props$className","centerY","getSumOfIds","links","ids","getSumWithWeightedSource","tree","link","sourceNode","getSumWithWeightedTarget","targetNode","ascendingY","updateDepthOfTargets","curNode","targetNodes","resolveCollisions","depthTree","nodePadding","nodes","relaxLeftToRight","maxDepth","sourceLinks","sourceSum","relaxRightToLeft","targetLinks","targetSum","computeData","nodeWidth","getNodesTree","searchTargetsAndSources","sourceNodes","childWidth","getDepthTree","newLinks","updateYOfTree","yRatio","updateYOfLinks","sy","tLen","sLen","getCoordinateOfTooltip","sourceX","targetX","sourceY","targetY","sankeyPayloadSearcher","splitIndex","targetType","getPayloadOfTooltip","sourceName","targetName","defaultSankeyMargin","SankeyLinkElement","linkContent","sourceControlX","targetControlX","linkWidth","strokeOpacity","renderLinkItem","AllSankeyLinkElements","modifiedLinks","linkProps","NodeElement","nodeContent","renderNodeItem","AllNodeElements","modifiedNodes","modifiedNode","Sankey","linkCurvature","prevMargin","prevIterations","prevNodeWidth","prevNodePadding","contentWidth","contentHeight","sourceRelativeY","targetRelativeY","interpolationFunc","interpolationGenerator","ka","kb","buildLinkProps","buildNodeProps","prevSort","RadarChart","ScatterChart","AreaChart","RadialBarChart","ComposedChart","defaultTextProps","paintOrder","getMaxDepthOf","childDepths","convertMapToRecord","record","defaultSunburstMargin","payloadSearcher","SunburstChartImpl","ringPadding","textOptions","rScale","scaleLinear","thickness","drawArcs","childNodes","innerR","initialAngle","childColor","currentAngle","_d$fill","addToSunburstNodeIndex","nodeWithIndex","arcLength","fillColor","textX","textY","tooltipX","tooltipY","SunburstChart","typeGuardTrapezoidProps","FunnelTrapezoid","selectFunnelTrapezoids","pickFunnelSettings","funnelSettings","lastShapeType","customWidth","trapezoids","realHeight","realWidth","offsetX","offsetY","getRealWidthHeight","nextVal","rawVal","newY","computeFunnelTrapezoids","FunnelTrapezoids","allOtherFunnelProps","activeItemIndex","isActiveIndex","trapezoidOptions","latestId","TrapezoidsWithAnimation","reference","idRef","previousTrapezoidsRef","prevTrapezoids","interpolatorUpperWidth","interpolatorLowerWidth","interpolatorHeight","RenderTrapezoids","FunnelWithState","defaultFunnelProps","FunnelImpl","Funnel","FunnelChart"],"sourceRoot":""}
Index: node_modules/recharts/umd/report.html
===================================================================
--- node_modules/recharts/umd/report.html	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/recharts/umd/report.html	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
+    <title>recharts [5 Aug 2025 at 16:12]</title>
+    <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
+
+    <script>
+      window.enableWebSocket = false;
+    </script>
+    <!-- viewer.js -->
+<script>/*! For license information please see viewer.js.LICENSE.txt */
+(()=>{var e={184:(e,t)=>{var n;
+/*!
+  Copyright (c) 2018 Jed Watson.
+  Licensed under the MIT License (MIT), see
+  http://jedwatson.github.io/classnames
+*/!function(){"use strict";var i={}.hasOwnProperty;function r(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var o=typeof n;if("string"===o||"number"===o)e.push(n);else if(Array.isArray(n)){if(n.length){var a=r.apply(null,n);a&&e.push(a)}}else if("object"===o)if(n.toString===Object.prototype.toString)for(var s in n)i.call(n,s)&&n[s]&&e.push(s);else e.push(n.toString())}}return e.join(" ")}e.exports?(r.default=r,e.exports=r):void 0===(n=function(){return r}.apply(t,[]))||(e.exports=n)}()},908:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".Button__button{background:#fff;border:1px solid #aaa;border-radius:4px;cursor:pointer;display:inline-block;font:var(--main-font);outline:none;padding:5px 7px;transition:background .3s ease;white-space:nowrap}.Button__button:focus,.Button__button:hover{background:#ffefd7}.Button__button.Button__active{background:orange;color:#000}.Button__button[disabled]{cursor:default}","",{version:3,sources:["webpack://./client/components/Button.css"],names:[],mappings:"AAAA,gBACE,eAAgB,CAChB,qBAAsB,CACtB,iBAAkB,CAClB,cAAe,CACf,oBAAqB,CACrB,qBAAsB,CACtB,YAAa,CACb,eAAgB,CAChB,8BAA+B,CAC/B,kBACF,CAEA,4CAEE,kBACF,CAEA,+BACE,iBAAmB,CACnB,UACF,CAEA,0BACE,cACF",sourcesContent:[".button {\n  background: #fff;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: pointer;\n  display: inline-block;\n  font: var(--main-font);\n  outline: none;\n  padding: 5px 7px;\n  transition: background .3s ease;\n  white-space: nowrap;\n}\n\n.button:focus,\n.button:hover {\n  background: #ffefd7;\n}\n\n.button.active {\n  background: #ffa500;\n  color: #000;\n}\n\n.button[disabled] {\n  cursor: default;\n}\n"],sourceRoot:""}]),a.locals={button:"Button__button",active:"Button__active"};const s=a},396:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".Checkbox__label{display:inline-block}.Checkbox__checkbox,.Checkbox__label{cursor:pointer}.Checkbox__itemText{margin-left:3px;position:relative;top:-2px;vertical-align:middle}","",{version:3,sources:["webpack://./client/components/Checkbox.css"],names:[],mappings:"AAAA,iBAEE,oBACF,CAEA,qCAJE,cAMF,CAEA,oBACE,eAAgB,CAChB,iBAAkB,CAClB,QAAS,CACT,qBACF",sourcesContent:[".label {\n  cursor: pointer;\n  display: inline-block;\n}\n\n.checkbox {\n  cursor: pointer;\n}\n\n.itemText {\n  margin-left: 3px;\n  position: relative;\n  top: -2px;\n  vertical-align: middle;\n}\n"],sourceRoot:""}]),a.locals={label:"Checkbox__label",checkbox:"Checkbox__checkbox",itemText:"Checkbox__itemText"};const s=a},213:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".CheckboxList__container{font:var(--main-font);white-space:nowrap}.CheckboxList__label{font-size:11px;font-weight:700;margin-bottom:7px}.CheckboxList__item+.CheckboxList__item{margin-top:1px}","",{version:3,sources:["webpack://./client/components/CheckboxList.css"],names:[],mappings:"AAAA,yBACE,qBAAsB,CACtB,kBACF,CAEA,qBACE,cAAe,CACf,eAAiB,CACjB,iBACF,CAEA,wCACE,cACF",sourcesContent:[".container {\n  font: var(--main-font);\n  white-space: nowrap;\n}\n\n.label {\n  font-size: 11px;\n  font-weight: bold;\n  margin-bottom: 7px;\n}\n\n.item + .item {\n  margin-top: 1px;\n}\n"],sourceRoot:""}]),a.locals={container:"CheckboxList__container",label:"CheckboxList__label",item:"CheckboxList__item"};const s=a},580:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".ContextMenu__container{background:#fff;border:1px solid #aaa;border-radius:4px;font:var(--main-font);list-style:none;opacity:1;padding:0;position:absolute;transition:opacity .2s ease,visibility .2s ease;visibility:visible;white-space:nowrap}.ContextMenu__hidden{opacity:0;visibility:hidden}","",{version:3,sources:["webpack://./client/components/ContextMenu.css"],names:[],mappings:"AAAA,wBAKE,eAAgB,CAChB,qBAAsB,CAFtB,iBAAkB,CAHlB,qBAAsB,CAMtB,eAAgB,CAChB,SAAU,CALV,SAAU,CADV,iBAAkB,CASlB,+CAAiD,CADjD,kBAAmB,CADnB,kBAGF,CAEA,qBACE,SAAU,CACV,iBACF",sourcesContent:[".container {\n  font: var(--main-font);\n  position: absolute;\n  padding: 0;\n  border-radius: 4px;\n  background: #fff;\n  border: 1px solid #aaa;\n  list-style: none;\n  opacity: 1;\n  white-space: nowrap;\n  visibility: visible;\n  transition: opacity .2s ease, visibility .2s ease;\n}\n\n.hidden {\n  opacity: 0;\n  visibility: hidden;\n}\n"],sourceRoot:""}]),a.locals={container:"ContextMenu__container",hidden:"ContextMenu__hidden"};const s=a},270:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".ContextMenuItem__item{cursor:pointer;margin:0;padding:8px 14px;-webkit-user-select:none;user-select:none}.ContextMenuItem__item:hover{background:#ffefd7}.ContextMenuItem__disabled{color:grey;cursor:default}.ContextMenuItem__item.ContextMenuItem__disabled:hover{background:transparent}","",{version:3,sources:["webpack://./client/components/ContextMenuItem.css"],names:[],mappings:"AAAA,uBACE,cAAe,CACf,QAAS,CACT,gBAAiB,CACjB,wBAAiB,CAAjB,gBACF,CAEA,6BACE,kBACF,CAEA,2BAEE,UAAW,CADX,cAEF,CAEA,uDACE,sBACF",sourcesContent:[".item {\n  cursor: pointer;\n  margin: 0;\n  padding: 8px 14px;\n  user-select: none;\n}\n\n.item:hover {\n  background: #ffefd7;\n}\n\n.disabled {\n  cursor: default;\n  color: gray;\n}\n\n.item.disabled:hover {\n  background: transparent;\n}\n"],sourceRoot:""}]),a.locals={item:"ContextMenuItem__item",disabled:"ContextMenuItem__disabled"};const s=a},172:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".Dropdown__container{font:var(--main-font);white-space:nowrap}.Dropdown__label{font-size:11px;font-weight:700;margin-bottom:7px}.Dropdown__input{border:1px solid #aaa;border-radius:4px;color:#7f7f7f;display:block;height:27px;width:100%}.Dropdown__option{cursor:pointer;padding:4px 0}","",{version:3,sources:["webpack://./client/components/Dropdown.css"],names:[],mappings:"AAAA,qBACE,qBAAsB,CACtB,kBACF,CAEA,iBACE,cAAe,CACf,eAAiB,CACjB,iBACF,CAEA,iBACE,qBAAsB,CACtB,iBAAkB,CAGlB,aAAc,CAFd,aAAc,CAGd,WAAY,CAFZ,UAGF,CAEA,kBAEE,cAAe,CADf,aAEF",sourcesContent:[".container {\n  font: var(--main-font);\n  white-space: nowrap;\n}\n\n.label {\n  font-size: 11px;\n  font-weight: bold;\n  margin-bottom: 7px;\n}\n\n.input {\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  display: block;\n  width: 100%;\n  color: #7f7f7f;\n  height: 27px;\n}\n\n.option {\n  padding: 4px 0;\n  cursor: pointer;\n}\n"],sourceRoot:""}]),a.locals={container:"Dropdown__container",label:"Dropdown__label",input:"Dropdown__input",option:"Dropdown__option"};const s=a},746:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".Icon__icon{background:no-repeat 50%/contain;display:inline-block}","",{version:3,sources:["webpack://./client/components/Icon.css"],names:[],mappings:"AAAA,YACE,gCAAoC,CACpC,oBACF",sourcesContent:[".icon {\n  background: no-repeat center/contain;\n  display: inline-block;\n}\n"],sourceRoot:""}]),a.locals={icon:"Icon__icon"};const s=a},697:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var i=n(15),r=n.n(i),o=n(645),a=n.n(o),s=n(667),u=n.n(s),l=n(911),c=n(752),h=n(570),f=n(868),d=a()(r()),p=u()(l.Z),g=u()(c.Z),b=u()(h.Z),v=u()(f.Z);d.push([e.id,".ModuleItem__container{background:no-repeat 0;cursor:pointer;margin-bottom:4px;padding-left:18px;position:relative;white-space:nowrap}.ModuleItem__container.ModuleItem__module{background-image:url("+p+");background-position-x:1px}.ModuleItem__container.ModuleItem__folder{background-image:url("+g+")}.ModuleItem__container.ModuleItem__chunk{background-image:url("+b+")}.ModuleItem__container.ModuleItem__invisible:hover:before{background:url("+v+') no-repeat 0;content:"";height:100%;left:0;position:absolute;top:1px;width:13px}',"",{version:3,sources:["webpack://./client/components/ModuleItem.css"],names:[],mappings:"AAAA,uBACE,sBAAiC,CACjC,cAAe,CACf,iBAAkB,CAClB,iBAAkB,CAClB,iBAAkB,CAClB,kBACF,CAEA,0CACE,wDAAkD,CAClD,yBACF,CAEA,0CACE,wDACF,CAEA,yCACE,wDACF,CAEA,0DACE,8DAAqE,CACrE,UAAW,CACX,WAAY,CACZ,MAAO,CAEP,iBAAkB,CADlB,OAAQ,CAER,UACF",sourcesContent:[".container {\n  background: no-repeat left center;\n  cursor: pointer;\n  margin-bottom: 4px;\n  padding-left: 18px;\n  position: relative;\n  white-space: nowrap;\n}\n\n.container.module {\n  background-image: url('../assets/icon-module.svg');\n  background-position-x: 1px;\n}\n\n.container.folder {\n  background-image: url('../assets/icon-folder.svg');\n}\n\n.container.chunk {\n  background-image: url('../assets/icon-chunk.svg');\n}\n\n.container.invisible:hover::before {\n  background: url('../assets/icon-invisible.svg') no-repeat left center;\n  content: \"\";\n  height: 100%;\n  left: 0;\n  top: 1px;\n  position: absolute;\n  width: 13px;\n}\n"],sourceRoot:""}]),d.locals={container:"ModuleItem__container",module:"ModuleItem__module",folder:"ModuleItem__folder",chunk:"ModuleItem__chunk",invisible:"ModuleItem__invisible"};const m=d},784:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".ModulesList__container{font:var(--main-font)}","",{version:3,sources:["webpack://./client/components/ModulesList.css"],names:[],mappings:"AAAA,wBACE,qBACF",sourcesContent:[".container {\n  font: var(--main-font);\n}\n"],sourceRoot:""}]),a.locals={container:"ModulesList__container"};const s=a},393:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".ModulesTreemap__container{align-items:stretch;display:flex;height:100%;position:relative;width:100%}.ModulesTreemap__map{flex:1}.ModulesTreemap__sidebarGroup{font:var(--main-font);margin-bottom:20px}.ModulesTreemap__showOption{margin-top:5px}.ModulesTreemap__activeSize{font-weight:700}.ModulesTreemap__foundModulesInfo{display:flex;font:var(--main-font);margin:8px 0 0}.ModulesTreemap__foundModulesInfoItem+.ModulesTreemap__foundModulesInfoItem{margin-left:15px}.ModulesTreemap__foundModulesContainer{margin-top:15px;max-height:600px;overflow:auto}.ModulesTreemap__foundModulesChunk+.ModulesTreemap__foundModulesChunk{margin-top:15px}.ModulesTreemap__foundModulesChunkName{cursor:pointer;font:var(--main-font);font-weight:700;margin-bottom:7px}.ModulesTreemap__foundModulesList{margin-left:7px}","",{version:3,sources:["webpack://./client/components/ModulesTreemap.css"],names:[],mappings:"AAAA,2BACE,mBAAoB,CACpB,YAAa,CACb,WAAY,CACZ,iBAAkB,CAClB,UACF,CAEA,qBACE,MACF,CAEA,8BACE,qBAAsB,CACtB,kBACF,CAEA,4BACE,cACF,CAEA,4BACE,eACF,CAEA,kCACE,YAAa,CACb,qBAAsB,CACtB,cACF,CAEA,4EACE,gBACF,CAEA,uCACE,eAAgB,CAChB,gBAAiB,CACjB,aACF,CAEA,sEACE,eACF,CAEA,uCACE,cAAe,CACf,qBAAsB,CACtB,eAAiB,CACjB,iBACF,CAEA,kCACE,eACF",sourcesContent:[".container {\n  align-items: stretch;\n  display: flex;\n  height: 100%;\n  position: relative;\n  width: 100%;\n}\n\n.map {\n  flex: 1;\n}\n\n.sidebarGroup {\n  font: var(--main-font);\n  margin-bottom: 20px;\n}\n\n.showOption {\n  margin-top: 5px;\n}\n\n.activeSize {\n  font-weight: bold;\n}\n\n.foundModulesInfo {\n  display: flex;\n  font: var(--main-font);\n  margin: 8px 0 0;\n}\n\n.foundModulesInfoItem + .foundModulesInfoItem {\n  margin-left: 15px;\n}\n\n.foundModulesContainer {\n  margin-top: 15px;\n  max-height: 600px;\n  overflow: auto;\n}\n\n.foundModulesChunk + .foundModulesChunk {\n  margin-top: 15px;\n}\n\n.foundModulesChunkName {\n  cursor: pointer;\n  font: var(--main-font);\n  font-weight: bold;\n  margin-bottom: 7px;\n}\n\n.foundModulesList {\n  margin-left: 7px;\n}\n"],sourceRoot:""}]),a.locals={container:"ModulesTreemap__container",map:"ModulesTreemap__map",sidebarGroup:"ModulesTreemap__sidebarGroup",showOption:"ModulesTreemap__showOption",activeSize:"ModulesTreemap__activeSize",foundModulesInfo:"ModulesTreemap__foundModulesInfo",foundModulesInfoItem:"ModulesTreemap__foundModulesInfoItem",foundModulesContainer:"ModulesTreemap__foundModulesContainer",foundModulesChunk:"ModulesTreemap__foundModulesChunk",foundModulesChunkName:"ModulesTreemap__foundModulesChunkName",foundModulesList:"ModulesTreemap__foundModulesList"};const s=a},976:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".Search__container{font:var(--main-font);white-space:nowrap}.Search__label{font-weight:700;margin-bottom:7px}.Search__row{display:flex}.Search__input{border:1px solid #aaa;border-radius:4px;display:block;flex:1;padding:5px}.Search__clear{flex:0 0 auto;line-height:1;margin-left:3px;padding:5px 8px 7px}","",{version:3,sources:["webpack://./client/components/Search.css"],names:[],mappings:"AAAA,mBACE,qBAAsB,CACtB,kBACF,CAEA,eACE,eAAiB,CACjB,iBACF,CAEA,aACE,YACF,CAEA,eACE,qBAAsB,CACtB,iBAAkB,CAClB,aAAc,CACd,MAAO,CACP,WACF,CAEA,eACE,aAAc,CACd,aAAc,CACd,eAAgB,CAChB,mBACF",sourcesContent:[".container {\n  font: var(--main-font);\n  white-space: nowrap;\n}\n\n.label {\n  font-weight: bold;\n  margin-bottom: 7px;\n}\n\n.row {\n  display: flex;\n}\n\n.input {\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  display: block;\n  flex: 1;\n  padding: 5px;\n}\n\n.clear {\n  flex: 0 0 auto;\n  line-height: 1;\n  margin-left: 3px;\n  padding: 5px 8px 7px;\n}\n"],sourceRoot:""}]),a.locals={container:"Search__container",label:"Search__label",row:"Search__row",input:"Search__input",clear:"Search__clear"};const s=a},826:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".Sidebar__container{background:#fff;border:none;border-right:1px solid #aaa;box-sizing:border-box;max-width:calc(50% - 10px);opacity:.95;z-index:1}.Sidebar__container:not(.Sidebar__hidden){min-width:200px}.Sidebar__container:not(.Sidebar__pinned){bottom:0;position:absolute;top:0;transition:transform .2s ease}.Sidebar__container.Sidebar__pinned{position:relative}.Sidebar__container.Sidebar__left{left:0}.Sidebar__container.Sidebar__left.Sidebar__hidden{transform:translateX(calc(-100% + 7px))}.Sidebar__content{box-sizing:border-box;height:100%;overflow-y:auto;padding:25px 20px 20px;width:100%}.Sidebar__empty.Sidebar__pinned .Sidebar__content{padding:0}.Sidebar__pinButton,.Sidebar__toggleButton{cursor:pointer;height:26px;line-height:0;position:absolute;top:10px;width:27px}.Sidebar__pinButton{right:47px}.Sidebar__toggleButton{padding-left:6px;right:15px}.Sidebar__hidden .Sidebar__toggleButton{right:-35px;transition:transform .2s ease}.Sidebar__hidden .Sidebar__toggleButton:hover{transform:translateX(4px)}.Sidebar__resizer{bottom:0;cursor:col-resize;position:absolute;right:0;top:0;width:7px}","",{version:3,sources:["webpack://./client/components/Sidebar.css"],names:[],mappings:"AAEA,oBACE,eAAgB,CAEhB,WAA4B,CAA5B,2BAA4B,CAC5B,qBAAsB,CACtB,0BAA2B,CAC3B,WAAa,CACb,SACF,CAEA,0CACE,eACF,CAEA,0CACE,QAAS,CACT,iBAAkB,CAClB,KAAM,CACN,6BACF,CAEA,oCACE,iBACF,CAEA,kCACE,MACF,CAEA,kDACE,uCACF,CAEA,kBACE,qBAAsB,CACtB,WAAY,CACZ,eAAgB,CAChB,sBAAuB,CACvB,UACF,CAEA,kDACE,SACF,CAEA,2CAEE,cAAe,CACf,WAAY,CACZ,aAAc,CACd,iBAAkB,CAClB,QAAS,CACT,UACF,CAEA,oBACE,UACF,CAEA,uBACE,gBAAiB,CACjB,UACF,CAEA,wCACE,WAAY,CACZ,6BACF,CAEA,8CACE,yBACF,CAEA,kBACE,QAAS,CACT,iBAAkB,CAClB,iBAAkB,CAClB,OAAQ,CACR,KAAM,CACN,SACF",sourcesContent:["@value toggleTime: 200ms;\n\n.container {\n  background: #fff;\n  border: none;\n  border-right: 1px solid #aaa;\n  box-sizing: border-box;\n  max-width: calc(50% - 10px);\n  opacity: 0.95;\n  z-index: 1;\n}\n\n.container:not(.hidden) {\n  min-width: 200px;\n}\n\n.container:not(.pinned) {\n  bottom: 0;\n  position: absolute;\n  top: 0;\n  transition: transform toggleTime ease;\n}\n\n.container.pinned {\n  position: relative;\n}\n\n.container.left {\n  left: 0;\n}\n\n.container.left.hidden {\n  transform: translateX(calc(-100% + 7px));\n}\n\n.content {\n  box-sizing: border-box;\n  height: 100%;\n  overflow-y: auto;\n  padding: 25px 20px 20px;\n  width: 100%;\n}\n\n.empty.pinned .content {\n  padding: 0;\n}\n\n.pinButton,\n.toggleButton {\n  cursor: pointer;\n  height: 26px;\n  line-height: 0;\n  position: absolute;\n  top: 10px;\n  width: 27px;\n}\n\n.pinButton {\n  right: 47px;\n}\n\n.toggleButton {\n  padding-left: 6px;\n  right: 15px;\n}\n\n.hidden .toggleButton {\n  right: -35px;\n  transition: transform .2s ease;\n}\n\n.hidden .toggleButton:hover {\n  transform: translateX(4px);\n}\n\n.resizer {\n  bottom: 0;\n  cursor: col-resize;\n  position: absolute;\n  right: 0;\n  top: 0;\n  width: 7px;\n}\n"],sourceRoot:""}]),a.locals={toggleTime:".2s",container:"Sidebar__container",hidden:"Sidebar__hidden",pinned:"Sidebar__pinned",left:"Sidebar__left",content:"Sidebar__content",empty:"Sidebar__empty",pinButton:"Sidebar__pinButton",toggleButton:"Sidebar__toggleButton",resizer:"Sidebar__resizer"};const s=a},897:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".Switcher__container{font:var(--main-font);white-space:nowrap}.Switcher__label{font-size:11px;font-weight:700;margin-bottom:7px}.Switcher__item+.Switcher__item{margin-left:5px}","",{version:3,sources:["webpack://./client/components/Switcher.css"],names:[],mappings:"AAAA,qBACE,qBAAsB,CACtB,kBACF,CAEA,iBAEE,cAAe,CADf,eAAiB,CAEjB,iBACF,CAEA,gCACE,eACF",sourcesContent:[".container {\n  font: var(--main-font);\n  white-space: nowrap;\n}\n\n.label {\n  font-weight: bold;\n  font-size: 11px;\n  margin-bottom: 7px;\n}\n\n.item + .item {\n  margin-left: 5px;\n}\n"],sourceRoot:""}]),a.locals={container:"Switcher__container",label:"Switcher__label",item:"Switcher__item"};const s=a},527:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,".Tooltip__container{background:#fff;border:1px solid #aaa;border-radius:4px;font:var(--main-font);opacity:.9;padding:5px 10px;position:absolute;transition:opacity .2s ease,visibility .2s ease;visibility:visible;white-space:nowrap}.Tooltip__hidden{opacity:0;visibility:hidden}","",{version:3,sources:["webpack://./client/components/Tooltip.css"],names:[],mappings:"AAAA,oBAKE,eAAgB,CAChB,qBAAsB,CAFtB,iBAAkB,CAHlB,qBAAsB,CAMtB,UAAY,CAJZ,gBAAiB,CADjB,iBAAkB,CAQlB,+CAAiD,CADjD,kBAAmB,CADnB,kBAGF,CAEA,iBACE,SAAU,CACV,iBACF",sourcesContent:[".container {\n  font: var(--main-font);\n  position: absolute;\n  padding: 5px 10px;\n  border-radius: 4px;\n  background: #fff;\n  border: 1px solid #aaa;\n  opacity: 0.9;\n  white-space: nowrap;\n  visibility: visible;\n  transition: opacity .2s ease, visibility .2s ease;\n}\n\n.hidden {\n  opacity: 0;\n  visibility: hidden;\n}\n"],sourceRoot:""}]),a.locals={container:"Tooltip__container",hidden:"Tooltip__hidden"};const s=a},194:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var i=n(15),r=n.n(i),o=n(645),a=n.n(o)()(r());a.push([e.id,":root{--main-font:normal 11px Verdana,sans-serif}#app,body,html{height:100%;margin:0;overflow:hidden;padding:0;width:100%}body.resizing{-webkit-user-select:none!important;user-select:none!important}body.resizing *{pointer-events:none}body.resizing.col{cursor:col-resize!important}","",{version:3,sources:["webpack://./client/viewer.css"],names:[],mappings:"AAAA,MACE,0CACF,CAEA,eAGE,WAAY,CACZ,QAAS,CACT,eAAgB,CAChB,SAAU,CACV,UACF,CAEA,cACE,kCAA4B,CAA5B,0BACF,CAEA,gBACE,mBACF,CAEA,kBACE,2BACF",sourcesContent:[":root {\n  --main-font: normal 11px Verdana, sans-serif;\n}\n\n:global html,\n:global body,\n:global #app {\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  padding: 0;\n  width: 100%;\n}\n\n:global body.resizing {\n  user-select: none !important;\n}\n\n:global body.resizing * {\n  pointer-events: none;\n}\n\n:global body.resizing.col {\n  cursor: col-resize !important;\n}\n"],sourceRoot:""}]);const s=a},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,i){"string"==typeof e&&(e=[[null,e,""]]);var r={};if(i)for(var o=0;o<this.length;o++){var a=this[o][0];null!=a&&(r[a]=!0)}for(var s=0;s<e.length;s++){var u=[].concat(e[s]);i&&r[u[0]]||(n&&(u[2]?u[2]="".concat(n," and ").concat(u[2]):u[2]=n),t.push(u))}},t}},15:e=>{"use strict";function t(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null==n)return;var i,r,o=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(i=n.next()).done)&&(o.push(i.value),!t||o.length!==t);a=!0);}catch(u){s=!0,r=u}finally{try{a||null==n.return||n.return()}finally{if(s)throw r}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);"Object"===i&&e.constructor&&(i=e.constructor.name);if("Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return n(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}e.exports=function(e){var n=t(e,4),i=n[1],r=n[3];if("function"==typeof btoa){var o=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),a="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(o),s="/*# ".concat(a," */"),u=r.sources.map((function(e){return"/*# sourceURL=".concat(r.sourceRoot||"").concat(e," */")}));return[i].concat(u).concat([s]).join("\n")}return[i].join("\n")}},667:e=>{"use strict";e.exports=function(e,t){return t||(t={}),"string"!=typeof(e=e&&e.__esModule?e.default:e)?e:(/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e)}},296:e=>{function t(e,t,n){var i,r,o,a,s;function u(){var l=Date.now()-a;l<t&&l>=0?i=setTimeout(u,t-l):(i=null,n||(s=e.apply(o,r),o=r=null))}null==t&&(t=100);var l=function(){o=this,r=arguments,a=Date.now();var l=n&&!i;return i||(i=setTimeout(u,t)),l&&(s=e.apply(o,r),o=r=null),s};return l.clear=function(){i&&(clearTimeout(i),i=null)},l.flush=function(){i&&(s=e.apply(o,r),o=r=null,clearTimeout(i),i=null)},l}t.debounce=t,e.exports=t},150:e=>{"use strict";e.exports=e=>{if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}},755:function(e){e.exports=function(){"use strict";var e=/^(b|B)$/,t={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},n={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]},i={floor:Math.floor,ceil:Math.ceil};function r(r){var o,a,s,u,l,c,h,f,d,p,g,b,v,m,y,C,w,_,x,A,S=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},M=[],T=0;if(isNaN(r))throw new TypeError("Invalid number");if(s=!0===S.bits,y=!0===S.unix,b=!0===S.pad,a=S.base||2,v=void 0!==S.round?S.round:y?1:2,h=void 0!==S.locale?S.locale:"",f=S.localeOptions||{},C=void 0!==S.separator?S.separator:"",w=void 0!==S.spacer?S.spacer:y?"":" ",x=S.symbols||{},_=2===a&&S.standard||"jedec",g=S.output||"string",l=!0===S.fullform,c=S.fullforms instanceof Array?S.fullforms:[],o=void 0!==S.exponent?S.exponent:-1,A=i[S.roundingMethod]||Math.round,u=a>2?1e3:1024,(d=(p=Number(r))<0)&&(p=-p),(-1===o||isNaN(o))&&(o=Math.floor(Math.log(p)/Math.log(u)))<0&&(o=0),o>8&&(o=8),"exponent"===g)return o;if(0===p)M[0]=0,m=M[1]=y?"":t[_][s?"bits":"bytes"][o];else{T=p/(2===a?Math.pow(2,10*o):Math.pow(1e3,o)),s&&(T*=8)>=u&&o<8&&(T/=u,o++);var k=Math.pow(10,o>0?v:0);M[0]=A(T*k)/k,M[0]===u&&o<8&&void 0===S.exponent&&(M[0]=1,o++),m=M[1]=10===a&&1===o?s?"kb":"kB":t[_][s?"bits":"bytes"][o],y&&(M[1]="jedec"===_?M[1].charAt(0):o>0?M[1].replace(/B$/,""):M[1],e.test(M[1])&&(M[0]=Math.floor(M[0]),M[1]=""))}if(d&&(M[0]=-M[0]),M[1]=x[M[1]]||M[1],!0===h?M[0]=M[0].toLocaleString():h.length>0?M[0]=M[0].toLocaleString(h,f):C.length>0&&(M[0]=M[0].toString().replace(".",C)),b&&!1===Number.isInteger(M[0])&&v>0){var z=C||".",D=M[0].toString().split(z),B=D[1]||"",L=B.length,E=v-L;M[0]="".concat(D[0]).concat(z).concat(B.padEnd(L+E,"0"))}return l&&(M[1]=c[o]?c[o]:n[_][o]+(s?"bit":"byte")+(1===M[0]?"":"s")),"array"===g?M:"object"===g?{value:M[0],symbol:M[1],exponent:o,unit:m}:M.join(w)}return r.partial=function(e){return function(t){return r(t,e)}},r}()},379:(e,t,n)=>{"use strict";var i,r=function(){return void 0===i&&(i=Boolean(window&&document&&document.all&&!window.atob)),i},o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(i){n=null}e[t]=n}return e[t]}}(),a=[];function s(e){for(var t=-1,n=0;n<a.length;n++)if(a[n].identifier===e){t=n;break}return t}function u(e,t){for(var n={},i=[],r=0;r<e.length;r++){var o=e[r],u=t.base?o[0]+t.base:o[0],l=n[u]||0,c="".concat(u," ").concat(l);n[u]=l+1;var h=s(c),f={css:o[1],media:o[2],sourceMap:o[3]};-1!==h?(a[h].references++,a[h].updater(f)):a.push({identifier:c,updater:b(f,t),references:1}),i.push(c)}return i}function l(e){var t=document.createElement("style"),i=e.attributes||{};if(void 0===i.nonce){var r=n.nc;r&&(i.nonce=r)}if(Object.keys(i).forEach((function(e){t.setAttribute(e,i[e])})),"function"==typeof e.insert)e.insert(t);else{var a=o(e.insert||"head");if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(t)}return t}var c,h=(c=[],function(e,t){return c[e]=t,c.filter(Boolean).join("\n")});function f(e,t,n,i){var r=n?"":i.media?"@media ".concat(i.media," {").concat(i.css,"}"):i.css;if(e.styleSheet)e.styleSheet.cssText=h(t,r);else{var o=document.createTextNode(r),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(o,a[t]):e.appendChild(o)}}function d(e,t,n){var i=n.css,r=n.media,o=n.sourceMap;if(r?e.setAttribute("media",r):e.removeAttribute("media"),o&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleSheet)e.styleSheet.cssText=i;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(i))}}var p=null,g=0;function b(e,t){var n,i,r;if(t.singleton){var o=g++;n=p||(p=l(t)),i=f.bind(null,n,o,!1),r=f.bind(null,n,o,!0)}else n=l(t),i=d.bind(null,n,t),r=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return i(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;i(e=t)}else r()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=r());var n=u(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var i=0;i<n.length;i++){var r=s(n[i]);a[r].references--}for(var o=u(e,t),l=0;l<n.length;l++){var c=s(n[l]);0===a[c].references&&(a[c].updater(),a.splice(c,1))}n=o}}}},570:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});const i="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMCAwdjExLjI1YzAgLjQxNC4zMzYuNzUuNzUuNzVoMTAuNWEuNzUuNzUgMCAwIDAgLjc1LS43NVYwSDB6IiBmaWxsPSIjRkM2IiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48cGF0aCBkPSJNMCAwcy4xNTYgMyAxLjEyNSAzaDkuNzVDMTEuODQ1IDMgMTIgMCAxMiAwSDB6IiBmaWxsPSIjQ0NBMzUyIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48cGF0aCBkPSJNNi43NSAxLjVoLS4zNzVMNiAyLjVsLS4zNzUtMUg1LjI1TDUuODEzIDMgNS4yNSA0LjVoLjM3NUw2IDMuNWwuMzc1IDFoLjM3NUw2LjE4NyAzeiIgZmlsbD0iIzk5N0EzRCIvPjxjaXJjbGUgY3g9Ii43NSIgY3k9Ii43NSIgcj0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4yNSAzLjc1KSIgZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIi8+PGNpcmNsZSBjeD0iLjc1IiBjeT0iLjc1IiByPSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1LjI1IC43NSkiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvZz48L3N2Zz4="},752:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});const i="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMiIGhlaWdodD0iMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSI+PHBhdGggZD0iTTExLjcgMS4zMzNINS44NUw0LjU1IDBIMS4zQy41ODUgMCAwIC42IDAgMS4zMzNWNGgxM1YyLjY2N2MwLS43MzMtLjU4NS0xLjMzNC0xLjMtMS4zMzR6IiBmaWxsPSIjRkZBMDAwIi8+PHBhdGggZD0iTTExLjcgMUgxLjNDLjU4NSAxIDAgMS41NzkgMCAyLjI4NnY2LjQyOEMwIDkuNDIxLjU4NSAxMCAxLjMgMTBoMTAuNGMuNzE1IDAgMS4zLS41NzkgMS4zLTEuMjg2VjIuMjg2QzEzIDEuNTc5IDEyLjQxNSAxIDExLjcgMXoiIGZpbGw9IiNGRkNBMjgiLz48L2c+PC9zdmc+"},868:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});const i="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMiIGhlaWdodD0iMTEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEwLjMyNy4wNjRMOC40MzMgMS45NTdhNi4wMjUgNi4wMjUgMCAwIDAtMS45NTItLjM0MkMyLjkxMiAxLjYxNS4wMTkgNS4xOTYuMDE5IDUuMTk2czEuMDk4IDEuMzU4IDIuNzc0IDIuNDAxTC45NiA5LjQzMWwuOTM2LjkzNkwxMS4yNjMgMWwtLjkzNi0uOTM2ek00LjA1IDYuMzRhMi42ODYgMi42ODYgMCAwIDEgMy41NzQtMy41NzRMNC4wNSA2LjM0em02LjQ0OC0zLjMzYTEyLjM0NCAxMi4zNDQgMCAwIDEgMi40NDQgMi4xODZzLTIuODkzIDMuNTgtNi40NjEgMy41OGMtLjUzIDAtMS4wNDQtLjA3OC0xLjUzNy0uMjEzbC43ODgtLjc4OEEyLjY4NCAyLjY4NCAwIDAgMCA5LjA2IDQuNDQ4bDEuNDM4LTEuNDM5eiIgZmlsbD0iIzIzMUYyMCIgZmlsbC1vcGFjaXR5PSIuNTk3Ii8+PC9zdmc+"},911:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});const i="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTEiIGhlaWdodD0iMTMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEuNjI1IDBBMS42MyAxLjYzIDAgMCAwIDAgMS42MjV2OS43NUExLjYzIDEuNjMgMCAwIDAgMS42MjUgMTNoNy41ODNhMS42MyAxLjYzIDAgMCAwIDEuNjI1LTEuNjI1VjMuNTY3TDcuMjY2IDBIMS42MjV6bTAgMS4wODNINi41djMuMjVoMy4yNXY3LjA0MmEuNTM1LjUzNSAwIDAgMS0uNTQyLjU0MkgxLjYyNWEuNTM1LjUzNSAwIDAgMS0uNTQyLS41NDJ2LTkuNzVjMC0uMzA1LjIzNy0uNTQyLjU0Mi0uNTQyem01Ljk1OC43NjZMOC45ODQgMy4yNWgtMS40di0xLjR6TTMuMjUgNi41djEuMDgzaDQuMzMzVjYuNUgzLjI1em0wIDIuMTY3VjkuNzVINi41VjguNjY3SDMuMjV6IiBmaWxsLW9wYWNpdHk9Ii40MDMiLz48L3N2Zz4="}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var o=t[i]={id:i,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.nc=void 0,(()=>{"use strict";var e,t,i,r,o,a={},s=[],u=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function l(e,t){for(var n in t)e[n]=t[n];return e}function c(e){var t=e.parentNode;t&&t.removeChild(e)}function h(e,t,n){var i,r,o,a=arguments,s={};for(o in t)"key"==o?i=t[o]:"ref"==o?r=t[o]:s[o]=t[o];if(arguments.length>3)for(n=[n],o=3;o<arguments.length;o++)n.push(a[o]);if(null!=n&&(s.children=n),"function"==typeof e&&null!=e.defaultProps)for(o in e.defaultProps)void 0===s[o]&&(s[o]=e.defaultProps[o]);return f(e,s,i,r,null)}function f(t,n,i,r,o){var a={type:t,props:n,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++e.__v:o};return null!=e.vnode&&e.vnode(a),a}function d(){return{current:null}}function p(e){return e.children}function g(e,t){this.props=e,this.context=t}function b(e,t){if(null==t)return e.__?b(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?b(e):null}function v(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return v(e)}}function m(n){(!n.__d&&(n.__d=!0)&&t.push(n)&&!y.__r++||r!==e.debounceRendering)&&((r=e.debounceRendering)||i)(y)}function y(){for(var e;y.__r=t.length;)e=t.sort((function(e,t){return e.__v.__b-t.__v.__b})),t=[],e.some((function(e){var t,n,i,r,o,a;e.__d&&(o=(r=(t=e).__v).__e,(a=t.__P)&&(n=[],(i=l({},r)).__v=r.__v+1,k(a,r,i,t.__n,void 0!==a.ownerSVGElement,null!=r.__h?[o]:null,n,null==o?b(r):o,r.__h),z(n,r),r.__e!=o&&v(r)))}))}function C(e,t,n,i,r,o,u,l,c,h){var d,g,v,m,y,C,_,A=i&&i.__k||s,S=A.length;for(n.__k=[],d=0;d<t.length;d++)if(null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?f(null,m,null,null,m):Array.isArray(m)?f(p,{children:m},null,null,null):m.__b>0?f(m.type,m.props,m.key,null,m.__v):m)){if(m.__=n,m.__b=n.__b+1,null===(v=A[d])||v&&m.key==v.key&&m.type===v.type)A[d]=void 0;else for(g=0;g<S;g++){if((v=A[g])&&m.key==v.key&&m.type===v.type){A[g]=void 0;break}v=null}k(e,m,v=v||a,r,o,u,l,c,h),y=m.__e,(g=m.ref)&&v.ref!=g&&(_||(_=[]),v.ref&&_.push(v.ref,null,m),_.push(g,m.__c||y,m)),null!=y?(null==C&&(C=y),"function"==typeof m.type&&null!=m.__k&&m.__k===v.__k?m.__d=c=w(m,c,e):c=x(e,m,v,A,y,c),h||"option"!==n.type?"function"==typeof n.type&&(n.__d=c):e.value=""):c&&v.__e==c&&c.parentNode!=e&&(c=b(v))}for(n.__e=C,d=S;d--;)null!=A[d]&&("function"==typeof n.type&&null!=A[d].__e&&A[d].__e==n.__d&&(n.__d=b(i,d+1)),L(A[d],A[d]));if(_)for(d=0;d<_.length;d++)B(_[d],_[++d],_[++d])}function w(e,t,n){var i,r;for(i=0;i<e.__k.length;i++)(r=e.__k[i])&&(r.__=e,t="function"==typeof r.type?w(r,t,n):x(n,r,r,e.__k,r.__e,t));return t}function _(e,t){return t=t||[],null==e||"boolean"==typeof e||(Array.isArray(e)?e.some((function(e){_(e,t)})):t.push(e)),t}function x(e,t,n,i,r,o){var a,s,u;if(void 0!==t.__d)a=t.__d,t.__d=void 0;else if(null==n||r!=o||null==r.parentNode)e:if(null==o||o.parentNode!==e)e.appendChild(r),a=null;else{for(s=o,u=0;(s=s.nextSibling)&&u<i.length;u+=2)if(s==r)break e;e.insertBefore(r,o),a=o}return void 0!==a?a:r.nextSibling}function A(e,t,n){"-"===t[0]?e.setProperty(t,n):e[t]=null==n?"":"number"!=typeof n||u.test(t)?n:n+"px"}function S(e,t,n,i,r){var o;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof i&&(e.style.cssText=i=""),i)for(t in i)n&&t in n||A(e.style,t,"");if(n)for(t in n)i&&n[t]===i[t]||A(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])o=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?i||e.addEventListener(t,o?T:M,o):e.removeEventListener(t,o?T:M,o);else if("dangerouslySetInnerHTML"!==t){if(r)t=t.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if("href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null!=n&&(!1!==n||"a"===t[0]&&"r"===t[1])?e.setAttribute(t,n):e.removeAttribute(t))}}function M(t){this.l[t.type+!1](e.event?e.event(t):t)}function T(t){this.l[t.type+!0](e.event?e.event(t):t)}function k(t,n,i,r,o,a,s,u,c){var h,f,d,b,v,m,y,w,_,x,A,S=n.type;if(void 0!==n.constructor)return null;null!=i.__h&&(c=i.__h,u=n.__e=i.__e,n.__h=null,a=[u]),(h=e.__b)&&h(n);try{e:if("function"==typeof S){if(w=n.props,_=(h=S.contextType)&&r[h.__c],x=h?_?_.props.value:h.__:r,i.__c?y=(f=n.__c=i.__c).__=f.__E:("prototype"in S&&S.prototype.render?n.__c=f=new S(w,x):(n.__c=f=new g(w,x),f.constructor=S,f.render=E),_&&_.sub(f),f.props=w,f.state||(f.state={}),f.context=x,f.__n=r,d=f.__d=!0,f.__h=[]),null==f.__s&&(f.__s=f.state),null!=S.getDerivedStateFromProps&&(f.__s==f.state&&(f.__s=l({},f.__s)),l(f.__s,S.getDerivedStateFromProps(w,f.__s))),b=f.props,v=f.state,d)null==S.getDerivedStateFromProps&&null!=f.componentWillMount&&f.componentWillMount(),null!=f.componentDidMount&&f.__h.push(f.componentDidMount);else{if(null==S.getDerivedStateFromProps&&w!==b&&null!=f.componentWillReceiveProps&&f.componentWillReceiveProps(w,x),!f.__e&&null!=f.shouldComponentUpdate&&!1===f.shouldComponentUpdate(w,f.__s,x)||n.__v===i.__v){f.props=w,f.state=f.__s,n.__v!==i.__v&&(f.__d=!1),f.__v=n,n.__e=i.__e,n.__k=i.__k,n.__k.forEach((function(e){e&&(e.__=n)})),f.__h.length&&s.push(f);break e}null!=f.componentWillUpdate&&f.componentWillUpdate(w,f.__s,x),null!=f.componentDidUpdate&&f.__h.push((function(){f.componentDidUpdate(b,v,m)}))}f.context=x,f.props=w,f.state=f.__s,(h=e.__r)&&h(n),f.__d=!1,f.__v=n,f.__P=t,h=f.render(f.props,f.state,f.context),f.state=f.__s,null!=f.getChildContext&&(r=l(l({},r),f.getChildContext())),d||null==f.getSnapshotBeforeUpdate||(m=f.getSnapshotBeforeUpdate(b,v)),A=null!=h&&h.type===p&&null==h.key?h.props.children:h,C(t,Array.isArray(A)?A:[A],n,i,r,o,a,s,u,c),f.base=n.__e,n.__h=null,f.__h.length&&s.push(f),y&&(f.__E=f.__=null),f.__e=!1}else null==a&&n.__v===i.__v?(n.__k=i.__k,n.__e=i.__e):n.__e=D(i.__e,n,i,r,o,a,s,c);(h=e.diffed)&&h(n)}catch(t){n.__v=null,(c||null!=a)&&(n.__e=u,n.__h=!!c,a[a.indexOf(u)]=null),e.__e(t,n,i)}}function z(t,n){e.__c&&e.__c(n,t),t.some((function(n){try{t=n.__h,n.__h=[],t.some((function(e){e.call(n)}))}catch(t){e.__e(t,n.__v)}}))}function D(e,t,n,i,r,o,u,l){var h,f,d,p,g=n.props,b=t.props,v=t.type,m=0;if("svg"===v&&(r=!0),null!=o)for(;m<o.length;m++)if((h=o[m])&&(h===e||(v?h.localName==v:3==h.nodeType))){e=h,o[m]=null;break}if(null==e){if(null===v)return document.createTextNode(b);e=r?document.createElementNS("http://www.w3.org/2000/svg",v):document.createElement(v,b.is&&b),o=null,l=!1}if(null===v)g===b||l&&e.data===b||(e.data=b);else{if(o=o&&s.slice.call(e.childNodes),f=(g=n.props||a).dangerouslySetInnerHTML,d=b.dangerouslySetInnerHTML,!l){if(null!=o)for(g={},p=0;p<e.attributes.length;p++)g[e.attributes[p].name]=e.attributes[p].value;(d||f)&&(d&&(f&&d.__html==f.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,i,r){var o;for(o in n)"children"===o||"key"===o||o in t||S(e,o,null,n[o],i);for(o in t)r&&"function"!=typeof t[o]||"children"===o||"key"===o||"value"===o||"checked"===o||n[o]===t[o]||S(e,o,t[o],n[o],i)}(e,b,g,r,l),d)t.__k=[];else if(m=t.props.children,C(e,Array.isArray(m)?m:[m],t,n,i,r&&"foreignObject"!==v,o,u,e.firstChild,l),null!=o)for(m=o.length;m--;)null!=o[m]&&c(o[m]);l||("value"in b&&void 0!==(m=b.value)&&(m!==e.value||"progress"===v&&!m)&&S(e,"value",m,g.value,!1),"checked"in b&&void 0!==(m=b.checked)&&m!==e.checked&&S(e,"checked",m,g.checked,!1))}return e}function B(t,n,i){try{"function"==typeof t?t(n):t.current=n}catch(t){e.__e(t,i)}}function L(t,n,i){var r,o,a;if(e.unmount&&e.unmount(t),(r=t.ref)&&(r.current&&r.current!==t.__e||B(r,null,n)),i||"function"==typeof t.type||(i=null!=(o=t.__e)),t.__e=t.__d=void 0,null!=(r=t.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(t){e.__e(t,n)}r.base=r.__P=null}if(r=t.__k)for(a=0;a<r.length;a++)r[a]&&L(r[a],n,i);null!=o&&c(o)}function E(e,t,n){return this.constructor(e,n)}function j(t,n,i){var r,o,u;e.__&&e.__(t,n),o=(r="function"==typeof i)?null:i&&i.__k||n.__k,u=[],k(n,t=(!r&&i||n).__k=h(p,null,[t]),o||a,a,void 0!==n.ownerSVGElement,!r&&i?[i]:o?null:n.firstChild?s.slice.call(n.childNodes):null,u,!r&&i?i:o?o.__e:n.firstChild,r),z(u,t)}function O(e,t){j(e,t,O)}function I(e,t,n){var i,r,o,a=arguments,s=l({},e.props);for(o in t)"key"==o?i=t[o]:"ref"==o?r=t[o]:s[o]=t[o];if(arguments.length>3)for(n=[n],o=3;o<arguments.length;o++)n.push(a[o]);return null!=n&&(s.children=n),f(e.type,s,i||e.key,r||e.ref,null)}function N(e,t,n,i){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(i):void 0})}function P(e,t,n,i,r){var o={};return Object.keys(i).forEach((function(e){o[e]=i[e]})),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=n.slice().reverse().reduce((function(n,i){return i(e,t,n)||n}),o),r&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(r):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}e={__e:function(e,t){for(var n,i,r;t=t.__;)if((n=t.__c)&&!n.__)try{if((i=n.constructor)&&null!=i.getDerivedStateFromError&&(n.setState(i.getDerivedStateFromError(e)),r=n.__d),null!=n.componentDidCatch&&(n.componentDidCatch(e),r=n.__d),r)return n.__E=n}catch(t){e=t}throw e},__v:0},g.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=l({},this.state),"function"==typeof e&&(e=e(l({},n),this.props)),e&&l(n,e),null!=e&&this.__v&&(t&&this.__h.push(t),m(this))},g.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),m(this))},g.prototype.render=p,t=[],i="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,y.__r=0,o=0;const F=[];Object.freeze(F);const R={};function G(){return++at.mobxGuid}function H(e){throw U(!1,e),"X"}function U(e,t){if(!e)throw new Error("[mobx] "+(t||"An invariant failed, however the error is obfuscated because this is a production build."))}Object.freeze(R);function q(e){let t=!1;return function(){if(!t)return t=!0,e.apply(this,arguments)}}const V=()=>{};function W(e){return null!==e&&"object"==typeof e}function Z(e){if(null===e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}function $(e,t,n){Object.defineProperty(e,t,{enumerable:!1,writable:!0,configurable:!0,value:n})}function K(e,t){const n="isMobX"+e;return t.prototype[n]=!0,function(e){return W(e)&&!0===e[n]}}function Y(e){return e instanceof Map}function J(e){return e instanceof Set}function X(e){const t=new Set;for(let n in e)t.add(n);return Object.getOwnPropertySymbols(e).forEach((n=>{Object.getOwnPropertyDescriptor(e,n).enumerable&&t.add(n)})),Array.from(t)}function Q(e){return e&&e.toString?e.toString():new String(e).toString()}function ee(e){return null===e?null:"object"==typeof e?""+e:e}const te="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols?e=>Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e)):Object.getOwnPropertyNames,ne=Symbol("mobx administration");class ie{constructor(e="Atom@"+G()){this.name=e,this.isPendingUnobservation=!1,this.isBeingObserved=!1,this.observers=new Set,this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=Be.NOT_TRACKING}onBecomeObserved(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach((e=>e()))}onBecomeUnobserved(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach((e=>e()))}reportObserved(){return ft(this)}reportChanged(){ct(),function(e){if(e.lowestObserverState===Be.STALE)return;e.lowestObserverState=Be.STALE,e.observers.forEach((t=>{t.dependenciesState===Be.UP_TO_DATE&&(t.isTracing!==Le.NONE&&dt(t,e),t.onBecomeStale()),t.dependenciesState=Be.STALE}))}(this),ht()}toString(){return this.name}}const re=K("Atom",ie);function oe(e,t=V,n=V){const i=new ie(e);var r;return t!==V&&Bt("onBecomeObserved",i,t,r),n!==V&&Dt(i,n),i}const ae={identity:function(e,t){return e===t},structural:function(e,t){return _n(e,t)},default:function(e,t){return Object.is(e,t)},shallow:function(e,t){return _n(e,t,1)}},se=Symbol("mobx did run lazy initializers"),ue=Symbol("mobx pending decorators"),le={},ce={};function he(e,t){const n=t?le:ce;return n[e]||(n[e]={configurable:!0,enumerable:t,get(){return fe(this),this[e]},set(t){fe(this),this[e]=t}})}function fe(e){if(!0===e[se])return;const t=e[ue];if(t){$(e,se,!0);const n=[...Object.getOwnPropertySymbols(t),...Object.keys(t)];for(const i of n){const n=t[i];n.propertyCreator(e,n.prop,n.descriptor,n.decoratorTarget,n.decoratorArguments)}}}function de(e,t){return function(){let n;const i=function(i,r,o,a){if(!0===a)return t(i,r,o,i,n),null;if(!Object.prototype.hasOwnProperty.call(i,ue)){const e=i[ue];$(i,ue,Object.assign({},e))}return i[ue][r]={prop:r,propertyCreator:t,descriptor:o,decoratorTarget:i,decoratorArguments:n},he(r,e)};return pe(arguments)?(n=F,i.apply(null,arguments)):(n=Array.prototype.slice.call(arguments),i)}}function pe(e){return(2===e.length||3===e.length)&&("string"==typeof e[1]||"symbol"==typeof e[1])||4===e.length&&!0===e[3]}function ge(e,t,n){return Rt(e)?e:Array.isArray(e)?Me.array(e,{name:n}):Z(e)?Me.object(e,void 0,{name:n}):Y(e)?Me.map(e,{name:n}):J(e)?Me.set(e,{name:n}):e}function be(e){return e}function ve(e){U(e);const t=de(!0,((t,n,i,r,o)=>{const a=i?i.initializer?i.initializer.call(t):i.value:void 0;dn(t).addObservableProp(n,a,e)}));return t.enhancer=e,t}const me={deep:!0,name:void 0,defaultDecorator:void 0,proxy:!0};function ye(e){return null==e?me:"string"==typeof e?{name:e,deep:!0,proxy:!0}:e}Object.freeze(me);const Ce=ve(ge),we=ve((function(e,t,n){return null==e||mn(e)||nn(e)||sn(e)||hn(e)?e:Array.isArray(e)?Me.array(e,{name:n,deep:!1}):Z(e)?Me.object(e,void 0,{name:n,deep:!1}):Y(e)?Me.map(e,{name:n,deep:!1}):J(e)?Me.set(e,{name:n,deep:!1}):H(!1)})),_e=ve(be),xe=ve((function(e,t,n){return _n(e,t)?t:e}));function Ae(e){return e.defaultDecorator?e.defaultDecorator.enhancer:!1===e.deep?be:ge}const Se={box(e,t){arguments.length>2&&Te("box");const n=ye(t);return new Xe(e,Ae(n),n.name,!0,n.equals)},array(e,t){arguments.length>2&&Te("array");const n=ye(t);return function(e,t,n="ObservableArray@"+G(),i=!1){const r=new Qt(n,t,i);o=r.values,a=ne,s=r,Object.defineProperty(o,a,{enumerable:!1,writable:!1,configurable:!0,value:s});var o,a,s;const u=new Proxy(r.values,Xt);if(r.proxy=u,e&&e.length){const t=Ye(!0);r.spliceWithArray(0,0,e),Je(t)}return u}(e,Ae(n),n.name)},map(e,t){arguments.length>2&&Te("map");const n=ye(t);return new an(e,Ae(n),n.name)},set(e,t){arguments.length>2&&Te("set");const n=ye(t);return new cn(e,Ae(n),n.name)},object(e,t,n){"string"==typeof arguments[1]&&Te("object");const i=ye(n);if(!1===i.proxy)return Et({},e,t,i);{const n=jt(i),r=function(e){const t=new Proxy(e,Vt);return e[ne].proxy=t,t}(Et({},void 0,void 0,i));return Ot(r,e,t,n),r}},ref:_e,shallow:we,deep:Ce,struct:xe},Me=function(e,t,n){if("string"==typeof arguments[1]||"symbol"==typeof arguments[1])return Ce.apply(null,arguments);if(Rt(e))return e;const i=Z(e)?Me.object(e,t,n):Array.isArray(e)?Me.array(e,t):Y(e)?Me.map(e,t):J(e)?Me.set(e,t):e;if(i!==e)return i;H(!1)};function Te(e){H(`Expected one or two arguments to observable.${e}. Did you accidentally try to use observable.${e} as decorator?`)}Object.keys(Se).forEach((e=>Me[e]=Se[e]));const ke=de(!1,((e,t,n,i,r)=>{const{get:o,set:a}=n,s=r[0]||{};dn(e).addComputedProp(e,t,Object.assign({get:o,set:a,context:e},s))})),ze=ke({equals:ae.structural}),De=function(e,t,n){if("string"==typeof t)return ke.apply(null,arguments);if(null!==e&&"object"==typeof e&&1===arguments.length)return ke.apply(null,arguments);const i="object"==typeof t?t:{};return i.get=e,i.set="function"==typeof t?t:i.set,i.name=i.name||e.name||"",new Qe(i)};var Be,Le;De.struct=ze,function(e){e[e.NOT_TRACKING=-1]="NOT_TRACKING",e[e.UP_TO_DATE=0]="UP_TO_DATE",e[e.POSSIBLY_STALE=1]="POSSIBLY_STALE",e[e.STALE=2]="STALE"}(Be||(Be={})),function(e){e[e.NONE=0]="NONE",e[e.LOG=1]="LOG",e[e.BREAK=2]="BREAK"}(Le||(Le={}));class Ee{constructor(e){this.cause=e}}function je(e){return e instanceof Ee}function Oe(e){switch(e.dependenciesState){case Be.UP_TO_DATE:return!1;case Be.NOT_TRACKING:case Be.STALE:return!0;case Be.POSSIBLY_STALE:{const t=He(!0),n=Re(),i=e.observing,r=i.length;for(let o=0;o<r;o++){const r=i[o];if(et(r)){if(at.disableErrorBoundaries)r.get();else try{r.get()}catch(u){return Ge(n),Ue(t),!0}if(e.dependenciesState===Be.STALE)return Ge(n),Ue(t),!0}}return qe(e),Ge(n),Ue(t),!1}}}function Ie(e){const t=e.observers.size>0;at.computationDepth>0&&t&&H(!1),at.allowStateChanges||!t&&"strict"!==at.enforceActions||H(!1)}function Ne(e,t,n){const i=He(!0);qe(e),e.newObserving=new Array(e.observing.length+100),e.unboundDepsCount=0,e.runId=++at.runId;const r=at.trackingDerivation;let o;if(at.trackingDerivation=e,!0===at.disableErrorBoundaries)o=t.call(n);else try{o=t.call(n)}catch(u){o=new Ee(u)}return at.trackingDerivation=r,function(e){const t=e.observing,n=e.observing=e.newObserving;let i=Be.UP_TO_DATE,r=0,o=e.unboundDepsCount;for(let a=0;a<o;a++){const e=n[a];0===e.diffValue&&(e.diffValue=1,r!==a&&(n[r]=e),r++),e.dependenciesState>i&&(i=e.dependenciesState)}n.length=r,e.newObserving=null,o=t.length;for(;o--;){const n=t[o];0===n.diffValue&&ut(n,e),n.diffValue=0}for(;r--;){const t=n[r];1===t.diffValue&&(t.diffValue=0,st(t,e))}i!==Be.UP_TO_DATE&&(e.dependenciesState=i,e.onBecomeStale())}(e),Ue(i),o}function Pe(e){const t=e.observing;e.observing=[];let n=t.length;for(;n--;)ut(t[n],e);e.dependenciesState=Be.NOT_TRACKING}function Fe(e){const t=Re();try{return e()}finally{Ge(t)}}function Re(){const e=at.trackingDerivation;return at.trackingDerivation=null,e}function Ge(e){at.trackingDerivation=e}function He(e){const t=at.allowStateReads;return at.allowStateReads=e,t}function Ue(e){at.allowStateReads=e}function qe(e){if(e.dependenciesState===Be.UP_TO_DATE)return;e.dependenciesState=Be.UP_TO_DATE;const t=e.observing;let n=t.length;for(;n--;)t[n].lowestObserverState=Be.UP_TO_DATE}let Ve=0,We=1;const Ze=Object.getOwnPropertyDescriptor((()=>{}),"name");Ze&&Ze.configurable;function $e(e,t,n){const i=function(){return Ke(e,t,n||this,arguments)};return i.isMobxAction=!0,i}function Ke(e,t,n,i){const r=function(e,t,n){const i=!1;let r=0;0;const o=Re();ct();const a=Ye(!0),s=He(!0),u={prevDerivation:o,prevAllowStateChanges:a,prevAllowStateReads:s,notifySpy:i,startTime:r,actionId:We++,parentActionId:Ve};return Ve=u.actionId,u}();try{return t.apply(n,i)}catch(o){throw r.error=o,o}finally{!function(e){Ve!==e.actionId&&H("invalid action stack. did you forget to finish an action?");Ve=e.parentActionId,void 0!==e.error&&(at.suppressReactionErrors=!0);Je(e.prevAllowStateChanges),Ue(e.prevAllowStateReads),ht(),Ge(e.prevDerivation),e.notifySpy;at.suppressReactionErrors=!1}(r)}}function Ye(e){const t=at.allowStateChanges;return at.allowStateChanges=e,t}function Je(e){at.allowStateChanges=e}class Xe extends ie{constructor(e,t,n="ObservableValue@"+G(),i=!0,r=ae.default){super(n),this.enhancer=t,this.name=n,this.equals=r,this.hasUnreportedChange=!1,this.value=t(e,void 0,n)}dehanceValue(e){return void 0!==this.dehancer?this.dehancer(e):e}set(e){this.value;if((e=this.prepareNewValue(e))!==at.UNCHANGED){0,this.setNewValue(e)}}prepareNewValue(e){if(Ie(this),Wt(this)){const t=$t(this,{object:this,type:"update",newValue:e});if(!t)return at.UNCHANGED;e=t.newValue}return e=this.enhancer(e,this.value,this.name),this.equals(this.value,e)?at.UNCHANGED:e}setNewValue(e){const t=this.value;this.value=e,this.reportChanged(),Kt(this)&&Jt(this,{type:"update",object:this,newValue:e,oldValue:t})}get(){return this.reportObserved(),this.dehanceValue(this.value)}intercept(e){return Zt(this,e)}observe(e,t){return t&&e({object:this,type:"update",newValue:this.value,oldValue:void 0}),Yt(this,e)}toJSON(){return this.get()}toString(){return`${this.name}[${this.value}]`}valueOf(){return ee(this.get())}[Symbol.toPrimitive](){return this.valueOf()}}K("ObservableValue",Xe);class Qe{constructor(e){this.dependenciesState=Be.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=new Set,this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=Be.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+G(),this.value=new Ee(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=Le.NONE,U(e.get,"missing option for computed: get"),this.derivation=e.get,this.name=e.name||"ComputedValue@"+G(),e.set&&(this.setter=$e(this.name+"-setter",e.set)),this.equals=e.equals||(e.compareStructural||e.struct?ae.structural:ae.default),this.scope=e.context,this.requiresReaction=!!e.requiresReaction,this.keepAlive=!!e.keepAlive}onBecomeStale(){!function(e){if(e.lowestObserverState!==Be.UP_TO_DATE)return;e.lowestObserverState=Be.POSSIBLY_STALE,e.observers.forEach((t=>{t.dependenciesState===Be.UP_TO_DATE&&(t.dependenciesState=Be.POSSIBLY_STALE,t.isTracing!==Le.NONE&&dt(t,e),t.onBecomeStale())}))}(this)}onBecomeObserved(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach((e=>e()))}onBecomeUnobserved(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach((e=>e()))}get(){this.isComputing&&H(`Cycle detected in computation ${this.name}: ${this.derivation}`),0!==at.inBatch||0!==this.observers.size||this.keepAlive?(ft(this),Oe(this)&&this.trackAndCompute()&&function(e){if(e.lowestObserverState===Be.STALE)return;e.lowestObserverState=Be.STALE,e.observers.forEach((t=>{t.dependenciesState===Be.POSSIBLY_STALE?t.dependenciesState=Be.STALE:t.dependenciesState===Be.UP_TO_DATE&&(e.lowestObserverState=Be.UP_TO_DATE)}))}(this)):Oe(this)&&(this.warnAboutUntrackedRead(),ct(),this.value=this.computeValue(!1),ht());const e=this.value;if(je(e))throw e.cause;return e}peek(){const e=this.computeValue(!1);if(je(e))throw e.cause;return e}set(e){if(this.setter){U(!this.isRunningSetter,`The setter of computed value '${this.name}' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?`),this.isRunningSetter=!0;try{this.setter.call(this.scope,e)}finally{this.isRunningSetter=!1}}else U(!1,!1)}trackAndCompute(){const e=this.value,t=this.dependenciesState===Be.NOT_TRACKING,n=this.computeValue(!0),i=t||je(e)||je(n)||!this.equals(e,n);return i&&(this.value=n),i}computeValue(e){let t;if(this.isComputing=!0,at.computationDepth++,e)t=Ne(this,this.derivation,this.scope);else if(!0===at.disableErrorBoundaries)t=this.derivation.call(this.scope);else try{t=this.derivation.call(this.scope)}catch(u){t=new Ee(u)}return at.computationDepth--,this.isComputing=!1,t}suspend(){this.keepAlive||(Pe(this),this.value=void 0)}observe(e,t){let n,i=!0;return Tt((()=>{let r=this.get();if(!i||t){const t=Re();e({type:"update",object:this,newValue:r,oldValue:n}),Ge(t)}i=!1,n=r}))}warnAboutUntrackedRead(){}toJSON(){return this.get()}toString(){return`${this.name}[${this.derivation.toString()}]`}valueOf(){return ee(this.get())}[Symbol.toPrimitive](){return this.valueOf()}}const et=K("ComputedValue",Qe);class tt{constructor(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1}}const nt={};function it(){return"undefined"!=typeof window?window:"undefined"!=typeof self?self:nt}let rt=!0,ot=!1,at=function(){const e=it();return e.__mobxInstanceCount>0&&!e.__mobxGlobals&&(rt=!1),e.__mobxGlobals&&e.__mobxGlobals.version!==(new tt).version&&(rt=!1),rt?e.__mobxGlobals?(e.__mobxInstanceCount+=1,e.__mobxGlobals.UNCHANGED||(e.__mobxGlobals.UNCHANGED={}),e.__mobxGlobals):(e.__mobxInstanceCount=1,e.__mobxGlobals=new tt):(setTimeout((()=>{ot||H("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")}),1),new tt)}();function st(e,t){e.observers.add(t),e.lowestObserverState>t.dependenciesState&&(e.lowestObserverState=t.dependenciesState)}function ut(e,t){e.observers.delete(t),0===e.observers.size&&lt(e)}function lt(e){!1===e.isPendingUnobservation&&(e.isPendingUnobservation=!0,at.pendingUnobservations.push(e))}function ct(){at.inBatch++}function ht(){if(0==--at.inBatch){vt();const e=at.pendingUnobservations;for(let t=0;t<e.length;t++){const n=e[t];n.isPendingUnobservation=!1,0===n.observers.size&&(n.isBeingObserved&&(n.isBeingObserved=!1,n.onBecomeUnobserved()),n instanceof Qe&&n.suspend())}at.pendingUnobservations=[]}}function ft(e){const t=at.trackingDerivation;return null!==t?(t.runId!==e.lastAccessedBy&&(e.lastAccessedBy=t.runId,t.newObserving[t.unboundDepsCount++]=e,e.isBeingObserved||(e.isBeingObserved=!0,e.onBecomeObserved())),!0):(0===e.observers.size&&at.inBatch>0&&lt(e),!1)}function dt(e,t){if(console.log(`[mobx.trace] '${e.name}' is invalidated due to a change in: '${t.name}'`),e.isTracing===Le.BREAK){const n=[];pt(It(e),n,1),new Function(`debugger;\n/*\nTracing '${e.name}'\n\nYou are entering this break point because derivation '${e.name}' is being traced and '${t.name}' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n${e instanceof Qe?e.derivation.toString().replace(/[*]\//g,"/"):""}\n\nThe dependencies for this derivation are:\n\n${n.join("\n")}\n*/\n    `)()}}function pt(e,t,n){t.length>=1e3?t.push("(and many more)"):(t.push(`${new Array(n).join("\t")}${e.name}`),e.dependencies&&e.dependencies.forEach((e=>pt(e,t,n+1))))}class gt{constructor(e="Reaction@"+G(),t,n,i=!1){this.name=e,this.onInvalidate=t,this.errorHandler=n,this.requiresObservable=i,this.observing=[],this.newObserving=[],this.dependenciesState=Be.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+G(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=Le.NONE}onBecomeStale(){this.schedule()}schedule(){this._isScheduled||(this._isScheduled=!0,at.pendingReactions.push(this),vt())}isScheduled(){return this._isScheduled}runReaction(){if(!this.isDisposed){if(ct(),this._isScheduled=!1,Oe(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending}catch(u){this.reportExceptionInDerivation(u)}}ht()}}track(e){if(this.isDisposed)return;ct();this._isRunning=!0;const t=Ne(this,e,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&Pe(this),je(t)&&this.reportExceptionInDerivation(t.cause),ht()}reportExceptionInDerivation(e){if(this.errorHandler)return void this.errorHandler(e,this);if(at.disableErrorBoundaries)throw e;const t=`[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '${this}'`;at.suppressReactionErrors?console.warn(`[mobx] (error in reaction '${this.name}' suppressed, fix error of causing action below)`):console.error(t,e),at.globalReactionErrorHandlers.forEach((t=>t(e,this)))}dispose(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(ct(),Pe(this),ht()))}getDisposer(){const e=this.dispose.bind(this);return e[ne]=this,e}toString(){return`Reaction[${this.name}]`}trace(e=!1){!function(...e){let t=!1;"boolean"==typeof e[e.length-1]&&(t=e.pop());const n=function(e){switch(e.length){case 0:return at.trackingDerivation;case 1:return yn(e[0]);case 2:return yn(e[0],e[1])}}(e);if(!n)return H(!1);n.isTracing===Le.NONE&&console.log(`[mobx.trace] '${n.name}' tracing enabled`);n.isTracing=t?Le.BREAK:Le.LOG}(this,e)}}let bt=e=>e();function vt(){at.inBatch>0||at.isRunningReactions||bt(mt)}function mt(){at.isRunningReactions=!0;const e=at.pendingReactions;let t=0;for(;e.length>0;){100==++t&&(console.error(`Reaction doesn't converge to a stable state after 100 iterations. Probably there is a cycle in the reactive function: ${e[0]}`),e.splice(0));let n=e.splice(0);for(let e=0,t=n.length;e<t;e++)n[e].runReaction()}at.isRunningReactions=!1}const yt=K("Reaction",gt);function Ct(e){const t=bt;bt=n=>e((()=>t(n)))}function wt(e){return console.warn("[mobx.spy] Is a no-op in production builds"),function(){}}function _t(){H(!1)}function xt(e){return function(t,n,i){if(i){if(i.value)return{value:$e(e,i.value),enumerable:!1,configurable:!0,writable:!0};const{initializer:t}=i;return{enumerable:!1,configurable:!0,writable:!0,initializer(){return $e(e,t.call(this))}}}return At(e).apply(this,arguments)}}function At(e){return function(t,n,i){Object.defineProperty(t,n,{configurable:!0,enumerable:!1,get(){},set(t){$(this,n,St(e,t))}})}}const St=function(e,t,n,i){return 1===arguments.length&&"function"==typeof e?$e(e.name||"<unnamed action>",e):2===arguments.length&&"function"==typeof t?$e(e,t):1===arguments.length&&"string"==typeof e?xt(e):!0!==i?xt(t).apply(null,arguments):void $(e,t,$e(e.name||t,n.value,this))};function Mt(e,t,n){$(e,t,$e(t,n.bind(e)))}function Tt(e,t=R){const n=t&&t.name||e.name||"Autorun@"+G();let i;if(!t.scheduler&&!t.delay)i=new gt(n,(function(){this.track(r)}),t.onError,t.requiresObservable);else{const e=zt(t);let o=!1;i=new gt(n,(()=>{o||(o=!0,e((()=>{o=!1,i.isDisposed||i.track(r)})))}),t.onError,t.requiresObservable)}function r(){e(i)}return i.schedule(),i.getDisposer()}St.bound=function(e,t,n,i){return!0===i?(Mt(e,t,n.value),null):n?{configurable:!0,enumerable:!1,get(){return Mt(this,t,n.value||n.initializer.call(this)),this[t]},set:_t}:{enumerable:!1,configurable:!0,set(e){Mt(this,t,e)},get(){}}};const kt=e=>e();function zt(e){return e.scheduler?e.scheduler:e.delay?t=>setTimeout(t,e.delay):kt}function Dt(e,t,n){return Bt("onBecomeUnobserved",e,t,n)}function Bt(e,t,n,i){const r="function"==typeof i?yn(t,n):yn(t),o="function"==typeof i?i:n,a=`${e}Listeners`;r[a]?r[a].add(o):r[a]=new Set([o]);return"function"!=typeof r[e]?H(!1):function(){const e=r[a];e&&(e.delete(o),0===e.size&&delete r[a])}}function Lt(e){const{enforceActions:t,computedRequiresReaction:n,computedConfigurable:i,disableErrorBoundaries:r,reactionScheduler:o,reactionRequiresObservable:a,observableRequiresReaction:s}=e;if(!0===e.isolateGlobalState&&((at.pendingReactions.length||at.inBatch||at.isRunningReactions)&&H("isolateGlobalState should be called before MobX is running any reactions"),ot=!0,rt&&(0==--it().__mobxInstanceCount&&(it().__mobxGlobals=void 0),at=new tt)),void 0!==t){let e;switch(t){case!0:case"observed":e=!0;break;case!1:case"never":e=!1;break;case"strict":case"always":e="strict";break;default:H(`Invalid value for 'enforceActions': '${t}', expected 'never', 'always' or 'observed'`)}at.enforceActions=e,at.allowStateChanges=!0!==e&&"strict"!==e}void 0!==n&&(at.computedRequiresReaction=!!n),void 0!==a&&(at.reactionRequiresObservable=!!a),void 0!==s&&(at.observableRequiresReaction=!!s,at.allowStateReads=!at.observableRequiresReaction),void 0!==i&&(at.computedConfigurable=!!i),void 0!==r&&(!0===r&&console.warn("WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled."),at.disableErrorBoundaries=!!r),o&&Ct(o)}function Et(e,t,n,i){const r=jt(i=ye(i));return fe(e),dn(e,i.name,r.enhancer),t&&Ot(e,t,n,r),e}function jt(e){return e.defaultDecorator||(!1===e.deep?_e:Ce)}function Ot(e,t,n,i){ct();try{const r=te(t);for(const o of r){const r=Object.getOwnPropertyDescriptor(t,o);0;0;const a=(n&&o in n?n[o]:r.get?ke:i)(e,o,r,!0);a&&Object.defineProperty(e,o,a)}}finally{ht()}}function It(e,t){return Nt(yn(e,t))}function Nt(e){const t={name:e.name};return e.observing&&e.observing.length>0&&(t.dependencies=function(e){const t=[];return e.forEach((e=>{-1===t.indexOf(e)&&t.push(e)})),t}(e.observing).map(Nt)),t}function Pt(){this.message="FLOW_CANCELLED"}function Ft(e,t){return null!=e&&(void 0!==t?!!mn(e)&&e[ne].values.has(t):mn(e)||!!e[ne]||re(e)||yt(e)||et(e))}function Rt(e){return 1!==arguments.length&&H(!1),Ft(e)}function Gt(e,t,n){if(2!==arguments.length||hn(e))if(mn(e)){const i=e[ne];i.values.get(t)?i.write(t,n):i.addObservableProp(t,n,i.defaultEnhancer)}else if(sn(e))e.set(t,n);else if(hn(e))e.add(t);else{if(!nn(e))return H(!1);"number"!=typeof t&&(t=parseInt(t,10)),U(t>=0,`Not a valid index: '${t}'`),ct(),t>=e.length&&(e.length=t+1),e[t]=n,ht()}else{ct();const n=t;try{for(let t in n)Gt(e,t,n[t])}finally{ht()}}}Pt.prototype=Object.create(Error.prototype);function Ht(e,t){ct();try{return e.apply(t)}finally{ht()}}function Ut(e){return e[ne]}function qt(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e}const Vt={has(e,t){if(t===ne||"constructor"===t||t===se)return!0;const n=Ut(e);return qt(t)?n.has(t):t in e},get(e,t){if(t===ne||"constructor"===t||t===se)return e[t];const n=Ut(e),i=n.values.get(t);if(i instanceof ie){const e=i.get();return void 0===e&&n.has(t),e}return qt(t)&&n.has(t),e[t]},set:(e,t,n)=>!!qt(t)&&(Gt(e,t,n),!0),deleteProperty(e,t){if(!qt(t))return!1;return Ut(e).remove(t),!0},ownKeys:e=>(Ut(e).keysAtom.reportObserved(),Reflect.ownKeys(e)),preventExtensions:e=>(H("Dynamic observable objects cannot be frozen"),!1)};function Wt(e){return void 0!==e.interceptors&&e.interceptors.length>0}function Zt(e,t){const n=e.interceptors||(e.interceptors=[]);return n.push(t),q((()=>{const e=n.indexOf(t);-1!==e&&n.splice(e,1)}))}function $t(e,t){const n=Re();try{const i=[...e.interceptors||[]];for(let e=0,n=i.length;e<n&&(t=i[e](t),U(!t||t.type,"Intercept handlers should return nothing or a change object"),t);e++);return t}finally{Ge(n)}}function Kt(e){return void 0!==e.changeListeners&&e.changeListeners.length>0}function Yt(e,t){const n=e.changeListeners||(e.changeListeners=[]);return n.push(t),q((()=>{const e=n.indexOf(t);-1!==e&&n.splice(e,1)}))}function Jt(e,t){const n=Re();let i=e.changeListeners;if(i){i=i.slice();for(let e=0,n=i.length;e<n;e++)i[e](t);Ge(n)}}const Xt={get:(e,t)=>t===ne?e[ne]:"length"===t?e[ne].getArrayLength():"number"==typeof t?en.get.call(e,t):"string"!=typeof t||isNaN(t)?en.hasOwnProperty(t)?en[t]:e[t]:en.get.call(e,parseInt(t)),set:(e,t,n)=>("length"===t&&e[ne].setArrayLength(n),"number"==typeof t&&en.set.call(e,t,n),"symbol"==typeof t||isNaN(t)?e[t]=n:en.set.call(e,parseInt(t),n),!0),preventExtensions:e=>(H("Observable arrays cannot be frozen"),!1)};class Qt{constructor(e,t,n){this.owned=n,this.values=[],this.proxy=void 0,this.lastKnownLength=0,this.atom=new ie(e||"ObservableArray@"+G()),this.enhancer=(n,i)=>t(n,i,e+"[..]")}dehanceValue(e){return void 0!==this.dehancer?this.dehancer(e):e}dehanceValues(e){return void 0!==this.dehancer&&e.length>0?e.map(this.dehancer):e}intercept(e){return Zt(this,e)}observe(e,t=!1){return t&&e({object:this.proxy,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),Yt(this,e)}getArrayLength(){return this.atom.reportObserved(),this.values.length}setArrayLength(e){if("number"!=typeof e||e<0)throw new Error("[mobx.array] Out of range: "+e);let t=this.values.length;if(e!==t)if(e>t){const n=new Array(e-t);for(let i=0;i<e-t;i++)n[i]=void 0;this.spliceWithArray(t,0,n)}else this.spliceWithArray(e,t-e)}updateArrayLength(e,t){if(e!==this.lastKnownLength)throw new Error("[mobx] Modification exception: the internal structure of an observable array was changed.");this.lastKnownLength+=t}spliceWithArray(e,t,n){Ie(this.atom);const i=this.values.length;if(void 0===e?e=0:e>i?e=i:e<0&&(e=Math.max(0,i+e)),t=1===arguments.length?i-e:null==t?0:Math.max(0,Math.min(t,i-e)),void 0===n&&(n=F),Wt(this)){const i=$t(this,{object:this.proxy,type:"splice",index:e,removedCount:t,added:n});if(!i)return F;t=i.removedCount,n=i.added}n=0===n.length?n:n.map((e=>this.enhancer(e,void 0)));const r=this.spliceItemsIntoValues(e,t,n);return 0===t&&0===n.length||this.notifyArraySplice(e,n,r),this.dehanceValues(r)}spliceItemsIntoValues(e,t,n){if(n.length<1e4)return this.values.splice(e,t,...n);{const i=this.values.slice(e,e+t);return this.values=this.values.slice(0,e).concat(n,this.values.slice(e+t)),i}}notifyArrayChildUpdate(e,t,n){const i=!this.owned&&!1,r=Kt(this),o=r||i?{object:this.proxy,type:"update",index:e,newValue:t,oldValue:n}:null;this.atom.reportChanged(),r&&Jt(this,o)}notifyArraySplice(e,t,n){const i=!this.owned&&!1,r=Kt(this),o=r||i?{object:this.proxy,type:"splice",index:e,removed:n,added:t,removedCount:n.length,addedCount:t.length}:null;this.atom.reportChanged(),r&&Jt(this,o)}}const en={intercept(e){return this[ne].intercept(e)},observe(e,t=!1){return this[ne].observe(e,t)},clear(){return this.splice(0)},replace(e){const t=this[ne];return t.spliceWithArray(0,t.values.length,e)},toJS(){return this.slice()},toJSON(){return this.toJS()},splice(e,t,...n){const i=this[ne];switch(arguments.length){case 0:return[];case 1:return i.spliceWithArray(e);case 2:return i.spliceWithArray(e,t)}return i.spliceWithArray(e,t,n)},spliceWithArray(e,t,n){return this[ne].spliceWithArray(e,t,n)},push(...e){const t=this[ne];return t.spliceWithArray(t.values.length,0,e),t.values.length},pop(){return this.splice(Math.max(this[ne].values.length-1,0),1)[0]},shift(){return this.splice(0,1)[0]},unshift(...e){const t=this[ne];return t.spliceWithArray(0,0,e),t.values.length},reverse(){const e=this.slice();return e.reverse.apply(e,arguments)},sort(e){const t=this.slice();return t.sort.apply(t,arguments)},remove(e){const t=this[ne],n=t.dehanceValues(t.values).indexOf(e);return n>-1&&(this.splice(n,1),!0)},get(e){const t=this[ne];if(t){if(e<t.values.length)return t.atom.reportObserved(),t.dehanceValue(t.values[e]);console.warn(`[mobx.array] Attempt to read an array index (${e}) that is out of bounds (${t.values.length}). Please check length first. Out of bound indices will not be tracked by MobX`)}},set(e,t){const n=this[ne],i=n.values;if(e<i.length){Ie(n.atom);const r=i[e];if(Wt(n)){const i=$t(n,{type:"update",object:n.proxy,index:e,newValue:t});if(!i)return;t=i.newValue}(t=n.enhancer(t,r))!==r&&(i[e]=t,n.notifyArrayChildUpdate(e,t,r))}else{if(e!==i.length)throw new Error(`[mobx.array] Index out of bounds, ${e} is larger than ${i.length}`);n.spliceWithArray(e,0,[t])}}};["concat","flat","includes","indexOf","join","lastIndexOf","slice","toString","toLocaleString"].forEach((e=>{"function"==typeof Array.prototype[e]&&(en[e]=function(){const t=this[ne];t.atom.reportObserved();const n=t.dehanceValues(t.values);return n[e].apply(n,arguments)})})),["every","filter","find","findIndex","flatMap","forEach","map","some"].forEach((e=>{"function"==typeof Array.prototype[e]&&(en[e]=function(t,n){const i=this[ne];i.atom.reportObserved();return i.dehanceValues(i.values)[e](((e,i)=>t.call(n,e,i,this)),n)})})),["reduce","reduceRight"].forEach((e=>{en[e]=function(){const t=this[ne];t.atom.reportObserved();const n=arguments[0];return arguments[0]=(e,i,r)=>(i=t.dehanceValue(i),n(e,i,r,this)),t.values[e].apply(t.values,arguments)}}));const tn=K("ObservableArrayAdministration",Qt);function nn(e){return W(e)&&tn(e[ne])}var rn;const on={};class an{constructor(e,t=ge,n="ObservableMap@"+G()){if(this.enhancer=t,this.name=n,this[rn]=on,this._keysAtom=oe(`${this.name}.keys()`),this[Symbol.toStringTag]="Map","function"!=typeof Map)throw new Error("mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js");this._data=new Map,this._hasMap=new Map,this.merge(e)}_has(e){return this._data.has(e)}has(e){if(!at.trackingDerivation)return this._has(e);let t=this._hasMap.get(e);if(!t){const n=t=new Xe(this._has(e),be,`${this.name}.${Q(e)}?`,!1);this._hasMap.set(e,n),Dt(n,(()=>this._hasMap.delete(e)))}return t.get()}set(e,t){const n=this._has(e);if(Wt(this)){const i=$t(this,{type:n?"update":"add",object:this,newValue:t,name:e});if(!i)return this;t=i.newValue}return n?this._updateValue(e,t):this._addValue(e,t),this}delete(e){if(Ie(this._keysAtom),Wt(this)){if(!$t(this,{type:"delete",object:this,name:e}))return!1}if(this._has(e)){const t=!1,n=Kt(this),i=n||t?{type:"delete",object:this,oldValue:this._data.get(e).value,name:e}:null;return Ht((()=>{this._keysAtom.reportChanged(),this._updateHasMapEntry(e,!1);this._data.get(e).setNewValue(void 0),this._data.delete(e)})),n&&Jt(this,i),!0}return!1}_updateHasMapEntry(e,t){let n=this._hasMap.get(e);n&&n.setNewValue(t)}_updateValue(e,t){const n=this._data.get(e);if((t=n.prepareNewValue(t))!==at.UNCHANGED){const i=!1,r=Kt(this),o=r||i?{type:"update",object:this,oldValue:n.value,name:e,newValue:t}:null;0,n.setNewValue(t),r&&Jt(this,o)}}_addValue(e,t){Ie(this._keysAtom),Ht((()=>{const n=new Xe(t,this.enhancer,`${this.name}.${Q(e)}`,!1);this._data.set(e,n),t=n.value,this._updateHasMapEntry(e,!0),this._keysAtom.reportChanged()}));const n=!1,i=Kt(this);i&&Jt(this,i?{type:"add",object:this,name:e,newValue:t}:null)}get(e){return this.has(e)?this.dehanceValue(this._data.get(e).get()):this.dehanceValue(void 0)}dehanceValue(e){return void 0!==this.dehancer?this.dehancer(e):e}keys(){return this._keysAtom.reportObserved(),this._data.keys()}values(){const e=this,t=this.keys();return Mn({next(){const{done:n,value:i}=t.next();return{done:n,value:n?void 0:e.get(i)}}})}entries(){const e=this,t=this.keys();return Mn({next(){const{done:n,value:i}=t.next();return{done:n,value:n?void 0:[i,e.get(i)]}}})}[(rn=ne,Symbol.iterator)](){return this.entries()}forEach(e,t){for(const[n,i]of this)e.call(t,i,n,this)}merge(e){return sn(e)&&(e=e.toJS()),Ht((()=>{const t=Ye(!0);try{Z(e)?X(e).forEach((t=>this.set(t,e[t]))):Array.isArray(e)?e.forEach((([e,t])=>this.set(e,t))):Y(e)?(e.constructor!==Map&&H("Cannot initialize from classes that inherit from Map: "+e.constructor.name),e.forEach(((e,t)=>this.set(t,e)))):null!=e&&H("Cannot initialize map from "+e)}finally{Je(t)}})),this}clear(){Ht((()=>{Fe((()=>{for(const e of this.keys())this.delete(e)}))}))}replace(e){return Ht((()=>{const t=function(e){if(Y(e)||sn(e))return e;if(Array.isArray(e))return new Map(e);if(Z(e)){const t=new Map;for(const n in e)t.set(n,e[n]);return t}return H(`Cannot convert to map from '${e}'`)}(e),n=new Map;let i=!1;for(const e of this._data.keys())if(!t.has(e)){if(this.delete(e))i=!0;else{const t=this._data.get(e);n.set(e,t)}}for(const[e,r]of t.entries()){const t=this._data.has(e);if(this.set(e,r),this._data.has(e)){const r=this._data.get(e);n.set(e,r),t||(i=!0)}}if(!i)if(this._data.size!==n.size)this._keysAtom.reportChanged();else{const e=this._data.keys(),t=n.keys();let i=e.next(),r=t.next();for(;!i.done;){if(i.value!==r.value){this._keysAtom.reportChanged();break}i=e.next(),r=t.next()}}this._data=n})),this}get size(){return this._keysAtom.reportObserved(),this._data.size}toPOJO(){const e={};for(const[t,n]of this)e["symbol"==typeof t?t:Q(t)]=n;return e}toJS(){return new Map(this)}toJSON(){return this.toPOJO()}toString(){return this.name+"[{ "+Array.from(this.keys()).map((e=>`${Q(e)}: ${""+this.get(e)}`)).join(", ")+" }]"}observe(e,t){return Yt(this,e)}intercept(e){return Zt(this,e)}}const sn=K("ObservableMap",an);var un;const ln={};class cn{constructor(e,t=ge,n="ObservableSet@"+G()){if(this.name=n,this[un]=ln,this._data=new Set,this._atom=oe(this.name),this[Symbol.toStringTag]="Set","function"!=typeof Set)throw new Error("mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js");this.enhancer=(e,i)=>t(e,i,n),e&&this.replace(e)}dehanceValue(e){return void 0!==this.dehancer?this.dehancer(e):e}clear(){Ht((()=>{Fe((()=>{for(const e of this._data.values())this.delete(e)}))}))}forEach(e,t){for(const n of this)e.call(t,n,n,this)}get size(){return this._atom.reportObserved(),this._data.size}add(e){if(Ie(this._atom),Wt(this)){if(!$t(this,{type:"add",object:this,newValue:e}))return this}if(!this.has(e)){Ht((()=>{this._data.add(this.enhancer(e,void 0)),this._atom.reportChanged()}));const t=!1,n=Kt(this),i=n||t?{type:"add",object:this,newValue:e}:null;0,n&&Jt(this,i)}return this}delete(e){if(Wt(this)){if(!$t(this,{type:"delete",object:this,oldValue:e}))return!1}if(this.has(e)){const t=!1,n=Kt(this),i=n||t?{type:"delete",object:this,oldValue:e}:null;return Ht((()=>{this._atom.reportChanged(),this._data.delete(e)})),n&&Jt(this,i),!0}return!1}has(e){return this._atom.reportObserved(),this._data.has(this.dehanceValue(e))}entries(){let e=0;const t=Array.from(this.keys()),n=Array.from(this.values());return Mn({next(){const i=e;return e+=1,i<n.length?{value:[t[i],n[i]],done:!1}:{done:!0}}})}keys(){return this.values()}values(){this._atom.reportObserved();const e=this;let t=0;const n=Array.from(this._data.values());return Mn({next:()=>t<n.length?{value:e.dehanceValue(n[t++]),done:!1}:{done:!0}})}replace(e){return hn(e)&&(e=e.toJS()),Ht((()=>{const t=Ye(!0);try{Array.isArray(e)||J(e)?(this.clear(),e.forEach((e=>this.add(e)))):null!=e&&H("Cannot initialize set from "+e)}finally{Je(t)}})),this}observe(e,t){return Yt(this,e)}intercept(e){return Zt(this,e)}toJS(){return new Set(this)}toString(){return this.name+"[ "+Array.from(this).join(", ")+" ]"}[(un=ne,Symbol.iterator)](){return this.values()}}const hn=K("ObservableSet",cn);class fn{constructor(e,t=new Map,n,i){this.target=e,this.values=t,this.name=n,this.defaultEnhancer=i,this.keysAtom=new ie(n+".keys")}read(e){return this.values.get(e).get()}write(e,t){const n=this.target,i=this.values.get(e);if(i instanceof Qe)i.set(t);else{if(Wt(this)){const i=$t(this,{type:"update",object:this.proxy||n,name:e,newValue:t});if(!i)return;t=i.newValue}if((t=i.prepareNewValue(t))!==at.UNCHANGED){const r=Kt(this),o=!1,a=r||o?{type:"update",object:this.proxy||n,oldValue:i.value,name:e,newValue:t}:null;0,i.setNewValue(t),r&&Jt(this,a)}}}has(e){const t=this.pendingKeys||(this.pendingKeys=new Map);let n=t.get(e);if(n)return n.get();{const i=!!this.values.get(e);return n=new Xe(i,be,`${this.name}.${Q(e)}?`,!1),t.set(e,n),n.get()}}addObservableProp(e,t,n=this.defaultEnhancer){const{target:i}=this;if(Wt(this)){const n=$t(this,{object:this.proxy||i,name:e,type:"add",newValue:t});if(!n)return;t=n.newValue}const r=new Xe(t,n,`${this.name}.${Q(e)}`,!1);this.values.set(e,r),t=r.value,Object.defineProperty(i,e,function(e){return pn[e]||(pn[e]={configurable:!0,enumerable:!0,get(){return this[ne].read(e)},set(t){this[ne].write(e,t)}})}(e)),this.notifyPropertyAddition(e,t)}addComputedProp(e,t,n){const{target:i}=this;n.name=n.name||`${this.name}.${Q(t)}`,this.values.set(t,new Qe(n)),(e===i||function(e,t){const n=Object.getOwnPropertyDescriptor(e,t);return!n||!1!==n.configurable&&!1!==n.writable}(e,t))&&Object.defineProperty(e,t,function(e){return gn[e]||(gn[e]={configurable:at.computedConfigurable,enumerable:!1,get(){return bn(this).read(e)},set(t){bn(this).write(e,t)}})}(t))}remove(e){if(!this.values.has(e))return;const{target:t}=this;if(Wt(this)){if(!$t(this,{object:this.proxy||t,name:e,type:"remove"}))return}try{ct();const n=Kt(this),i=!1,r=this.values.get(e),o=r&&r.get();if(r&&r.set(void 0),this.keysAtom.reportChanged(),this.values.delete(e),this.pendingKeys){const t=this.pendingKeys.get(e);t&&t.set(!1)}delete this.target[e];const a=n||i?{type:"remove",object:this.proxy||t,oldValue:o,name:e}:null;0,n&&Jt(this,a)}finally{ht()}}illegalAccess(e,t){console.warn(`Property '${t}' of '${e}' was accessed through the prototype chain. Use 'decorate' instead to declare the prop or access it statically through it's owner`)}observe(e,t){return Yt(this,e)}intercept(e){return Zt(this,e)}notifyPropertyAddition(e,t){const n=Kt(this),i=n?{type:"add",object:this.proxy||this.target,name:e,newValue:t}:null;if(n&&Jt(this,i),this.pendingKeys){const t=this.pendingKeys.get(e);t&&t.set(!0)}this.keysAtom.reportChanged()}getKeys(){this.keysAtom.reportObserved();const e=[];for(const[t,n]of this.values)n instanceof Xe&&e.push(t);return e}}function dn(e,t="",n=ge){if(Object.prototype.hasOwnProperty.call(e,ne))return e[ne];Z(e)||(t=(e.constructor.name||"ObservableObject")+"@"+G()),t||(t="ObservableObject@"+G());const i=new fn(e,new Map,Q(t),n);return $(e,ne,i),i}const pn=Object.create(null),gn=Object.create(null);function bn(e){const t=e[ne];return t||(fe(e),e[ne])}const vn=K("ObservableObjectAdministration",fn);function mn(e){return!!W(e)&&(fe(e),vn(e[ne]))}function yn(e,t){if("object"==typeof e&&null!==e){if(nn(e))return void 0!==t&&H(!1),e[ne].atom;if(hn(e))return e[ne];if(sn(e)){const n=e;if(void 0===t)return n._keysAtom;const i=n._data.get(t)||n._hasMap.get(t);return i||H(!1),i}if(fe(e),t&&!e[ne]&&e[t],mn(e)){if(!t)return H(!1);const n=e[ne].values.get(t);return n||H(!1),n}if(re(e)||et(e)||yt(e))return e}else if("function"==typeof e&&yt(e[ne]))return e[ne];return H(!1)}function Cn(e,t){return e||H("Expecting some object"),void 0!==t?Cn(yn(e,t)):re(e)||et(e)||yt(e)||sn(e)||hn(e)?e:(fe(e),e[ne]?e[ne]:void H(!1))}const wn=Object.prototype.toString;function _n(e,t,n=-1){return xn(e,t,n)}function xn(e,t,n,i,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return!1;if(e!=e)return t!=t;const o=typeof e;if("function"!==o&&"object"!==o&&"object"!=typeof t)return!1;const a=wn.call(e);if(a!==wn.call(t))return!1;switch(a){case"[object RegExp]":case"[object String]":return""+e==""+t;case"[object Number]":return+e!=+e?+t!=+t:0==+e?1/+e==1/t:+e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object Symbol]":return"undefined"!=typeof Symbol&&Symbol.valueOf.call(e)===Symbol.valueOf.call(t);case"[object Map]":case"[object Set]":n>=0&&n++}e=An(e),t=An(t);const s="[object Array]"===a;if(!s){if("object"!=typeof e||"object"!=typeof t)return!1;const n=e.constructor,i=t.constructor;if(n!==i&&!("function"==typeof n&&n instanceof n&&"function"==typeof i&&i instanceof i)&&"constructor"in e&&"constructor"in t)return!1}if(0===n)return!1;n<0&&(n=-1),r=r||[];let u=(i=i||[]).length;for(;u--;)if(i[u]===e)return r[u]===t;if(i.push(e),r.push(t),s){if(u=e.length,u!==t.length)return!1;for(;u--;)if(!xn(e[u],t[u],n-1,i,r))return!1}else{const o=Object.keys(e);let a;if(u=o.length,Object.keys(t).length!==u)return!1;for(;u--;)if(a=o[u],!Sn(t,a)||!xn(e[a],t[a],n-1,i,r))return!1}return i.pop(),r.pop(),!0}function An(e){return nn(e)?e.slice():Y(e)||sn(e)||J(e)||hn(e)?Array.from(e.entries()):e}function Sn(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Mn(e){return e[Symbol.iterator]=Tn,e}function Tn(){return this}if("undefined"==typeof Proxy||"undefined"==typeof Symbol)throw new Error("[mobx] MobX 5+ requires Proxy and Symbol objects. If your environment doesn't support Symbol or Proxy objects, please downgrade to MobX 4. For React Native Android, consider upgrading JSCore.");function kn(e){return"number"==typeof e.parsedSize}function zn(e,t){for(const n of e){if(!1===t(n))return!1;if(n.groups&&!1===zn(n.groups,t))return!1}}"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:wt,extras:{getDebugName:function(e,t){let n;return n=void 0!==t?yn(e,t):mn(e)||sn(e)||hn(e)?Cn(e):yn(e),n.name}},$mobx:ne});const Dn={getItem(e){try{return JSON.parse(window.localStorage.getItem(`wba.${e}`))}catch(t){return null}},setItem(e,t){try{window.localStorage.setItem(`wba.${e}`,JSON.stringify(t))}catch(n){}},removeItem(e){try{window.localStorage.removeItem(`wba.${e}`)}catch(t){}}};var Bn,Ln,En,jn,On,In,Nn,Pn,Fn;const Rn=new(Bn=Me.ref,Ln=Me.shallow,jn=P((En=class{constructor(){this.cid=0,this.sizes=new Set(["statSize","parsedSize","gzipSize"]),N(this,"allChunks",jn,this),N(this,"selectedChunks",On,this),N(this,"searchQuery",In,this),N(this,"defaultSize",Nn,this),N(this,"selectedSize",Pn,this),N(this,"showConcatenatedModulesContent",Fn,this)}setModules(e){zn(e,(e=>{e.cid=this.cid++})),this.allChunks=e,this.selectedChunks=this.allChunks}setEntrypoints(e){this.entrypoints=e}get hasParsedSizes(){return this.allChunks.some(kn)}get activeSize(){const e=this.selectedSize||this.defaultSize;return this.hasParsedSizes&&this.sizes.has(e)?e:"statSize"}get visibleChunks(){const e=this.allChunks.filter((e=>this.selectedChunks.includes(e)));return this.filterModulesForSize(e,this.activeSize)}get allChunksSelected(){return this.visibleChunks.length===this.allChunks.length}get totalChunksSize(){return this.allChunks.reduce(((e,t)=>e+(t[this.activeSize]||0)),0)}get searchQueryRegexp(){const e=this.searchQuery.trim();if(!e)return null;try{return new RegExp(e,"iu")}catch(t){return null}}get isSearching(){return!!this.searchQueryRegexp}get foundModulesByChunk(){if(!this.isSearching)return[];const e=this.searchQueryRegexp;return this.visibleChunks.map((t=>{let n=[];zn(t.groups,(t=>{let i=0;if(e.test(t.label)?i+=3:t.path&&e.test(t.path)&&i++,!i)return;t.groups||(i+=1);(n[i-1]=n[i-1]||[]).push(t)}));const{activeSize:i}=this;return n=n.filter(Boolean).reverse(),n.forEach((e=>e.sort(((e,t)=>t[i]-e[i])))),{chunk:t,modules:[].concat(...n)}})).filter((e=>e.modules.length>0)).sort(((e,t)=>e.modules.length-t.modules.length))}get foundModules(){return this.foundModulesByChunk.reduce(((e,t)=>e.concat(t.modules)),[])}get hasFoundModules(){return this.foundModules.length>0}get hasConcatenatedModules(){let e=!1;return zn(this.visibleChunks,(t=>{if(t.concatenated)return e=!0,!1})),e}get foundModulesSize(){return this.foundModules.reduce(((e,t)=>e+t[this.activeSize]),0)}filterModulesForSize(e,t){return e.reduce(((e,n)=>{if(n[t]){if(n.groups){const e=!n.concatenated||this.showConcatenatedModulesContent;n={...n,groups:e?this.filterModulesForSize(n.groups,t):null}}n.weight=n[t],e.push(n)}return e}),[])}}).prototype,"allChunks",[Bn],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),On=P(En.prototype,"selectedChunks",[Ln],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),In=P(En.prototype,"searchQuery",[Me],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),Nn=P(En.prototype,"defaultSize",[Me],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Pn=P(En.prototype,"selectedSize",[Me],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Fn=P(En.prototype,"showConcatenatedModulesContent",[Me],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!0===Dn.getItem("showConcatenatedModulesContent")}}),P(En.prototype,"hasParsedSizes",[De],Object.getOwnPropertyDescriptor(En.prototype,"hasParsedSizes"),En.prototype),P(En.prototype,"activeSize",[De],Object.getOwnPropertyDescriptor(En.prototype,"activeSize"),En.prototype),P(En.prototype,"visibleChunks",[De],Object.getOwnPropertyDescriptor(En.prototype,"visibleChunks"),En.prototype),P(En.prototype,"allChunksSelected",[De],Object.getOwnPropertyDescriptor(En.prototype,"allChunksSelected"),En.prototype),P(En.prototype,"totalChunksSize",[De],Object.getOwnPropertyDescriptor(En.prototype,"totalChunksSize"),En.prototype),P(En.prototype,"searchQueryRegexp",[De],Object.getOwnPropertyDescriptor(En.prototype,"searchQueryRegexp"),En.prototype),P(En.prototype,"isSearching",[De],Object.getOwnPropertyDescriptor(En.prototype,"isSearching"),En.prototype),P(En.prototype,"foundModulesByChunk",[De],Object.getOwnPropertyDescriptor(En.prototype,"foundModulesByChunk"),En.prototype),P(En.prototype,"foundModules",[De],Object.getOwnPropertyDescriptor(En.prototype,"foundModules"),En.prototype),P(En.prototype,"hasFoundModules",[De],Object.getOwnPropertyDescriptor(En.prototype,"hasFoundModules"),En.prototype),P(En.prototype,"hasConcatenatedModules",[De],Object.getOwnPropertyDescriptor(En.prototype,"hasConcatenatedModules"),En.prototype),P(En.prototype,"foundModulesSize",[De],Object.getOwnPropertyDescriptor(En.prototype,"foundModulesSize"),En.prototype),En);var Gn,Hn,Un,qn=n(755),Vn=n.n(qn),Wn=0,Zn=[],$n=e.__b,Kn=e.__r,Yn=e.diffed,Jn=e.__c,Xn=e.unmount;function Qn(t,n){e.__h&&e.__h(Hn,t,Wn||n),Wn=0;var i=Hn.__H||(Hn.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({}),i.__[t]}function ei(e){return Wn=1,ti(ci,e)}function ti(e,t,n){var i=Qn(Gn++,2);return i.t=e,i.__c||(i.__=[n?n(t):ci(void 0,t),function(e){var t=i.t(i.__[0],e);i.__[0]!==t&&(i.__=[t,i.__[1]],i.__c.setState({}))}],i.__c=Hn),i.__}function ni(t,n){var i=Qn(Gn++,4);!e.__s&&li(i.__H,n)&&(i.__=t,i.__H=n,Hn.__h.push(i))}function ii(e,t){var n=Qn(Gn++,7);return li(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function ri(e,t){return Wn=8,ii((function(){return e}),t)}function oi(){Zn.forEach((function(n){if(n.__P)try{n.__H.__h.forEach(si),n.__H.__h.forEach(ui),n.__H.__h=[]}catch(t){n.__H.__h=[],e.__e(t,n.__v)}})),Zn=[]}e.__b=function(e){Hn=null,$n&&$n(e)},e.__r=function(e){Kn&&Kn(e),Gn=0;var t=(Hn=e.__c).__H;t&&(t.__h.forEach(si),t.__h.forEach(ui),t.__h=[])},e.diffed=function(t){Yn&&Yn(t);var n=t.__c;n&&n.__H&&n.__H.__h.length&&(1!==Zn.push(n)&&Un===e.requestAnimationFrame||((Un=e.requestAnimationFrame)||function(e){var t,n=function(){clearTimeout(i),ai&&cancelAnimationFrame(t),setTimeout(e)},i=setTimeout(n,100);ai&&(t=requestAnimationFrame(n))})(oi)),Hn=void 0},e.__c=function(t,n){n.some((function(t){try{t.__h.forEach(si),t.__h=t.__h.filter((function(e){return!e.__||ui(e)}))}catch(a){n.some((function(e){e.__h&&(e.__h=[])})),n=[],e.__e(a,t.__v)}})),Jn&&Jn(t,n)},e.unmount=function(t){Xn&&Xn(t);var n=t.__c;if(n&&n.__H)try{n.__H.__.forEach(si)}catch(t){e.__e(t,n.__v)}};var ai="function"==typeof requestAnimationFrame;function si(e){var t=Hn;"function"==typeof e.__c&&e.__c(),Hn=t}function ui(e){var t=Hn;e.__c=e.__(),Hn=t}function li(e,t){return!e||e.length!==t.length||t.some((function(t,n){return t!==e[n]}))}function ci(e,t){return"function"==typeof t?t(e):t}function hi(e,t){for(var n in t)e[n]=t[n];return e}function fi(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var i in t)if("__source"!==i&&e[i]!==t[i])return!0;return!1}function di(e){this.props=e}function pi(e,t){function n(e){var n=this.props.ref,i=n==e.ref;return!i&&n&&(n.call?n(null):n.current=null),t?!t(this.props,e)||!i:fi(this.props,e)}function i(t){return this.shouldComponentUpdate=n,h(e,t)}return i.displayName="Memo("+(e.displayName||e.name)+")",i.prototype.isReactComponent=!0,i.__f=!0,i}(di.prototype=new g).isPureReactComponent=!0,di.prototype.shouldComponentUpdate=function(e,t){return fi(this.props,e)||fi(this.state,t)};var gi=e.__b;e.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),gi&&gi(e)};var bi="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function vi(e){function t(t,n){var i=hi({},t);return delete i.ref,e(i,(n=t.ref||n)&&("object"!=typeof n||"current"in n)?n:null)}return t.$$typeof=bi,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t}var mi=function(e,t){return null==e?null:_(_(e).map(t))},yi={map:mi,forEach:mi,count:function(e){return e?_(e).length:0},only:function(e){var t=_(e);if(1!==t.length)throw"Children.only";return t[0]},toArray:_},Ci=e.__e;e.__e=function(e,t,n){if(e.then)for(var i,r=t;r=r.__;)if((i=r.__c)&&i.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),i.__c(e,t);Ci(e,t,n)};var wi=e.unmount;function _i(){this.__u=0,this.t=null,this.__b=null}function xi(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function Ai(){this.u=null,this.o=null}e.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&!0===e.__h&&(e.type=null),wi&&wi(e)},(_i.prototype=new g).__c=function(e,t){var n=t.__c,i=this;null==i.t&&(i.t=[]),i.t.push(n);var r=xi(i.__v),o=!1,a=function(){o||(o=!0,n.__R=null,r?r(s):s())};n.__R=a;var s=function(){if(!--i.__u){if(i.state.__e){var e=i.state.__e;i.__v.__k[0]=function e(t,n,i){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map((function(t){return e(t,n,i)})),t.__c&&t.__c.__P===n&&(t.__e&&i.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=i)),t}(e,e.__c.__P,e.__c.__O)}var t;for(i.setState({__e:i.__b=null});t=i.t.pop();)t.forceUpdate()}},u=!0===t.__h;i.__u++||u||i.setState({__e:i.__b=i.__v.__k[0]}),e.then(a,a)},_i.prototype.componentWillUnmount=function(){this.t=[]},_i.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),i=this.__v.__k[0].__c;this.__v.__k[0]=function e(t,n,i){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach((function(e){"function"==typeof e.__c&&e.__c()})),t.__c.__H=null),null!=(t=hi({},t)).__c&&(t.__c.__P===i&&(t.__c.__P=n),t.__c=null),t.__k=t.__k&&t.__k.map((function(t){return e(t,n,i)}))),t}(this.__b,n,i.__O=i.__P)}this.__b=null}var r=t.__e&&h(p,null,e.fallback);return r&&(r.__h=null),[h(p,null,t.__e?null:e.children),r]};var Si=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]<n[0])break;e.u=n=n[2]}};function Mi(e){return this.getChildContext=function(){return e.context},e.children}function Ti(e){var t=this,n=e.i;t.componentWillUnmount=function(){j(null,t.l),t.l=null,t.i=null},t.i&&t.i!==n&&t.componentWillUnmount(),e.__v?(t.l||(t.i=n,t.l={nodeType:1,parentNode:n,childNodes:[],appendChild:function(e){this.childNodes.push(e),t.i.appendChild(e)},insertBefore:function(e,n){this.childNodes.push(e),t.i.appendChild(e)},removeChild:function(e){this.childNodes.splice(this.childNodes.indexOf(e)>>>1,1),t.i.removeChild(e)}}),j(h(Mi,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}(Ai.prototype=new g).__e=function(e){var t=this,n=xi(t.__v),i=t.o.get(e);return i[0]++,function(r){var o=function(){t.props.revealOrder?(i.push(r),Si(t,e,i)):r()};n?n(o):o()}},Ai.prototype.render=function(e){this.u=null,this.o=new Map;var t=_(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Ai.prototype.componentDidUpdate=Ai.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){Si(e,n,t)}))};var ki="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,zi=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Di=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(e)};g.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(g.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var Bi=e.event;function Li(){}function Ei(){return this.cancelBubble}function ji(){return this.defaultPrevented}e.event=function(e){return Bi&&(e=Bi(e)),e.persist=Li,e.isPropagationStopped=Ei,e.isDefaultPrevented=ji,e.nativeEvent=e};var Oi,Ii={configurable:!0,get:function(){return this.class}},Ni=e.vnode;e.vnode=function(e){var t=e.type,n=e.props,i=n;if("string"==typeof t){for(var r in i={},n){var o=n[r];"value"===r&&"defaultValue"in n&&null==o||("defaultValue"===r&&"value"in n&&null==n.value?r="value":"download"===r&&!0===o?o="":/ondoubleclick/i.test(r)?r="ondblclick":/^onchange(textarea|input)/i.test(r+t)&&!Di(n.type)?r="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(r)?r=r.toLowerCase():zi.test(r)?r=r.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===o&&(o=void 0),i[r]=o)}"select"==t&&i.multiple&&Array.isArray(i.value)&&(i.value=_(n.children).forEach((function(e){e.props.selected=-1!=i.value.indexOf(e.props.value)}))),"select"==t&&null!=i.defaultValue&&(i.value=_(n.children).forEach((function(e){e.props.selected=i.multiple?-1!=i.defaultValue.indexOf(e.props.value):i.defaultValue==e.props.value}))),e.props=i}t&&n.class!=n.className&&(Ii.enumerable="className"in n,null!=n.className&&(i.class=n.className),Object.defineProperty(i,"className",Ii)),e.$$typeof=ki,Ni&&Ni(e)};var Pi=e.__r;e.__r=function(e){Pi&&Pi(e),Oi=e.__c};var Fi={ReactCurrentDispatcher:{current:{readContext:function(e){return Oi.__n[e.__c].props.value}}}};"object"==typeof performance&&"function"==typeof performance.now&&performance.now.bind(performance);function Ri(e){return!!e&&e.$$typeof===ki}var Gi=function(e,t){return e(t)};const Hi={useState:ei,useReducer:ti,useEffect:function(t,n){var i=Qn(Gn++,3);!e.__s&&li(i.__H,n)&&(i.__=t,i.__H=n,Hn.__H.__h.push(i))},useLayoutEffect:ni,useRef:function(e){return Wn=5,ii((function(){return{current:e}}),[])},useImperativeHandle:function(e,t,n){Wn=6,ni((function(){"function"==typeof e?e(t()):e&&(e.current=t())}),null==n?n:n.concat(e))},useMemo:ii,useCallback:ri,useContext:function(e){var t=Hn.context[e.__c],n=Qn(Gn++,9);return n.__c=e,t?(null==n.__&&(n.__=!0,t.sub(Hn)),t.props.value):e.__},useDebugValue:function(t,n){e.useDebugValue&&e.useDebugValue(n?n(t):t)},version:"16.8.0",Children:yi,render:function(e,t,n){return null==t.__k&&(t.textContent=""),j(e,t),"function"==typeof n&&n(),e?e.__c:null},hydrate:function(e,t,n){return O(e,t),"function"==typeof n&&n(),e?e.__c:null},unmountComponentAtNode:function(e){return!!e.__k&&(j(null,e),!0)},createPortal:function(e,t){return h(Ti,{__v:e,i:t})},createElement:h,createContext:function(e,t){var n={__c:t="__cC"+o++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,i;return this.getChildContext||(n=[],(i={})[t]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some(m)},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Provider.__=n.Consumer.contextType=n},createFactory:function(e){return h.bind(null,e)},cloneElement:function(e){return Ri(e)?I.apply(null,arguments):e},createRef:d,Fragment:p,isValidElement:Ri,findDOMNode:function(e){return e&&(e.base||1===e.nodeType&&e)||null},Component:g,PureComponent:di,memo:pi,forwardRef:vi,unstable_batchedUpdates:Gi,StrictMode:p,Suspense:_i,SuspenseList:Ai,lazy:function(e){var t,n,i;function r(r){if(t||(t=e()).then((function(e){n=e.default||e}),(function(e){i=e})),i)throw i;if(!n)throw t;return h(n,r)}return r.displayName="Lazy",r.__f=!0,r},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:Fi};if(!ei)throw new Error("mobx-react-lite requires React with Hooks support");if(!wt)throw new Error("mobx-react-lite requires mobx at least version 4 to be available");var Ui=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(i=o.next()).done;)a.push(i.value)}catch(s){r={error:s}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return a};function qi(){var e=Ui(ei(0),2)[1];return ri((function(){e((function(e){return e+1}))}),[])}var Vi={};var Wi,Zi=(Wi="observerBatching","function"==typeof Symbol?Symbol.for(Wi):"__$mobx-react "+Wi+"__");function $i(e){e()}var Ki=!1;function Yi(){return Ki}function Ji(e){return It(e)}var Xi,Qi=1e4,er=new Set;function tr(){void 0===Xi&&(Xi=setTimeout(nr,1e4))}function nr(){Xi=void 0;var e=Date.now();er.forEach((function(t){var n=t.current;n&&e>=n.cleanAt&&(n.reaction.dispose(),t.current=null,er.delete(t))})),er.size>0&&tr()}var ir=!1,rr=[];var or={};function ar(e){return"observer"+e}function sr(e,t,n){if(void 0===t&&(t="observed"),void 0===n&&(n=or),Yi())return e();var i,r=function(e){return function(){ir?rr.push(e):e()}}((n.useForceUpdate||qi)()),o=Hi.useRef(null);if(!o.current){var a=new gt(ar(t),(function(){s.mounted?r():(a.dispose(),o.current=null)})),s=function(e){return{cleanAt:Date.now()+Qi,reaction:e}}(a);o.current=s,i=o,er.add(i),tr()}var l=o.current.reaction;return Hi.useDebugValue(l,Ji),Hi.useEffect((function(){var e;return e=o,er.delete(e),o.current?o.current.mounted=!0:(o.current={reaction:new gt(ar(t),(function(){r()})),cleanAt:1/0},r()),function(){o.current.reaction.dispose(),o.current=null}}),[]),function(e){ir=!0,rr=[];try{var t=e();ir=!1;var n=rr.length>0?rr:void 0;return Hi.useLayoutEffect((function(){n&&n.forEach((function(e){return e()}))}),[n]),t}finally{ir=!1}}((function(){var t,n;if(l.track((function(){try{t=e()}catch(u){n=u}})),n)throw n;return t}))}var ur=function(){return ur=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},ur.apply(this,arguments)};function lr(e,t){if(Yi())return e;var n,i,r,o=ur({forwardRef:!1},t),a=e.displayName||e.name,s=function(t,n){return sr((function(){return e(t,n)}),a)};return s.displayName=a,n=o.forwardRef?pi(vi(s)):pi(s),i=e,r=n,Object.keys(i).forEach((function(e){cr[e]||Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))})),n.displayName=a,n}var cr={$$typeof:!0,render:!0,compare:!0,type:!0};function hr(e){var t=e.children,n=e.render,i=t||n;return"function"!=typeof i?null:sr(i)}function fr(e,t,n,i,r){var o="children"===t?"render":"children",a="function"==typeof e[t],s="function"==typeof e[o];return a&&s?new Error("MobX Observer: Do not use children and render in the same time in`"+n):a||s?null:new Error("Invalid prop `"+r+"` of type `"+typeof e[t]+"` supplied to `"+n+"`, expected `function`.")}hr.propTypes={children:fr,render:fr},hr.displayName="Observer";!function(e){e||(e=$i),Lt({reactionScheduler:e}),("undefined"!=typeof window?window:"undefined"!=typeof self?self:Vi)[Zi]=!0}(Gi);var dr=0;var pr={};function gr(e){return pr[e]||(pr[e]=function(e){if("function"==typeof Symbol)return Symbol(e);var t="__$mobx-react "+e+" ("+dr+")";return dr++,t}(e)),pr[e]}function br(e,t){if(vr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;for(var r=0;r<n.length;r++)if(!Object.hasOwnProperty.call(t,n[r])||!vr(e[n[r]],t[n[r]]))return!1;return!0}function vr(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function mr(e,t,n){Object.hasOwnProperty.call(e,t)?e[t]=n:Object.defineProperty(e,t,{enumerable:!1,configurable:!0,writable:!0,value:n})}var yr=gr("patchMixins"),Cr=gr("patchedDefinition");function wr(e,t){for(var n=this,i=arguments.length,r=new Array(i>2?i-2:0),o=2;o<i;o++)r[o-2]=arguments[o];t.locks++;try{var a;return null!=e&&(a=e.apply(this,r)),a}finally{t.locks--,0===t.locks&&t.methods.forEach((function(e){e.apply(n,r)}))}}function _r(e,t){return function(){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];wr.call.apply(wr,[this,e,t].concat(i))}}function xr(e,t,n){var i=function(e,t){var n=e[yr]=e[yr]||{},i=n[t]=n[t]||{};return i.locks=i.locks||0,i.methods=i.methods||[],i}(e,t);i.methods.indexOf(n)<0&&i.methods.push(n);var r=Object.getOwnPropertyDescriptor(e,t);if(!r||!r[Cr]){var o=e[t],a=Ar(e,t,r?r.enumerable:void 0,i,o);Object.defineProperty(e,t,a)}}function Ar(e,t,n,i,r){var o,a=_r(r,i);return(o={})[Cr]=!0,o.get=function(){return a},o.set=function(r){if(this===e)a=_r(r,i);else{var o=Ar(this,t,n,i,r);Object.defineProperty(this,t,o)}},o.configurable=!0,o.enumerable=n,o}var Sr=ne||"$mobx",Mr=gr("isMobXReactObserver"),Tr=gr("isUnmounted"),kr=gr("skipRender"),zr=gr("isForcingUpdate");function Dr(e){var t=e.prototype;if(e[Mr]){var n=Br(t);console.warn("The provided component class ("+n+") \n                has already been declared as an observer component.")}else e[Mr]=!0;if(t.componentWillReact)throw new Error("The componentWillReact life-cycle event is no longer supported");if(e.__proto__!==di)if(t.shouldComponentUpdate){if(t.shouldComponentUpdate!==Er)throw new Error("It is not allowed to use shouldComponentUpdate in observer based components.")}else t.shouldComponentUpdate=Er;jr(t,"props"),jr(t,"state");var i=t.render;return t.render=function(){return Lr.call(this,i)},xr(t,"componentWillUnmount",(function(){var e;if(!0!==Yi()&&(null===(e=this.render[Sr])||void 0===e||e.dispose(),this[Tr]=!0,!this.render[Sr])){var t=Br(this);console.warn("The reactive render of an observer class component ("+t+") \n                was overriden after MobX attached. This may result in a memory leak if the \n                overriden reactive render was not properly disposed.")}})),e}function Br(e){return e.displayName||e.name||e.constructor&&(e.constructor.displayName||e.constructor.name)||"<component>"}function Lr(e){var t=this;if(!0===Yi())return e.call(this);mr(this,kr,!1),mr(this,zr,!1);var n=Br(this),i=e.bind(this),r=!1,o=new gt(n+".render()",(function(){if(!r&&(r=!0,!0!==t[Tr])){var e=!0;try{mr(t,zr,!0),t[kr]||g.prototype.forceUpdate.call(t),e=!1}finally{mr(t,zr,!1),e&&o.dispose()}}}));function a(){r=!1;var e=void 0,t=void 0;if(o.track((function(){try{t=function(e,t){const n=Ye(e);let i;try{i=t()}finally{Je(n)}return i}(!1,i)}catch(u){e=u}})),e)throw e;return t}return o.reactComponent=this,a[Sr]=o,this.render=a,a.call(this)}function Er(e,t){return Yi()&&console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."),this.state!==t||!br(this.props,e)}function jr(e,t){var n=gr("reactProp_"+t+"_valueHolder"),i=gr("reactProp_"+t+"_atomHolder");function r(){return this[i]||mr(this,i,oe("reactive "+t)),this[i]}Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){var e=!1;return He&&Ue&&(e=He(!0)),r.call(this).reportObserved(),He&&Ue&&Ue(e),this[n]},set:function(e){this[zr]||br(this[n],e)?mr(this,n,e):(mr(this,n,e),mr(this,kr,!0),r.call(this).reportChanged(),mr(this,kr,!1))}})}var Or="function"==typeof Symbol&&Symbol.for,Ir=Or?Symbol.for("react.forward_ref"):vi((function(e){return null})).$$typeof,Nr=Or?Symbol.for("react.memo"):pi((function(e){return null})).$$typeof;function Pr(e){if(!0===e.isMobxInjector&&console.warn("Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'"),Nr&&e.$$typeof===Nr)throw new Error("Mobx observer: You are trying to use 'observer' on a function component wrapped in either another observer or 'React.memo'. The observer already applies 'React.memo' for you.");if(Ir&&e.$$typeof===Ir){var t=e.render;if("function"!=typeof t)throw new Error("render property of ForwardRef was not a function");return vi((function(){var e=arguments;return h(hr,null,(function(){return t.apply(void 0,e)}))}))}return"function"!=typeof e||e.prototype&&e.prototype.render||e.isReactClass||Object.prototype.isPrototypeOf.call(g,e)?Dr(e):lr(e)}if(!g)throw new Error("mobx-react requires React to be available");if(!Me)throw new Error("mobx-react requires mobx to be available");
+/**
+ * Carrot Search FoamTree HTML5 (demo variant)
+ * v3.5.0, bugfix/3.5.x/e3b91c8e, build FOAMTREE-SOFTWARE5-DIST-3, Jan 18, 2021
+ * 
+ * Carrot Search confidential.
+ * Copyright 2002-2021, Carrot Search s.c, All Rights Reserved.
+ */
+!function(){var e,t=function(){var e=window.navigator.userAgent;try{window.localStorage.setItem("ftap5caavc","ftap5caavc"),window.localStorage.removeItem("ftap5caavc");var n=!0}catch(i){n=!1}return{Se:function(){return/webkit/i.test(e)},Lh:function(){return/Mac/.test(e)},Qe:function(){return/iPad|iPod|iPhone/.test(e)},Kh:function(){return/Android/.test(e)},Gh:function(){return"ontouchstart"in window||!!window.DocumentTouch&&document instanceof window.DocumentTouch},Fh:function(){return n},Eh:function(){var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))},md:function(e,n){return[].forEach&&t.Eh()?e&&e():n&&n()}}}(),n=function(){function e(){return window.performance&&(window.performance.now||window.performance.mozNow||window.performance.msNow||window.performance.oNow||window.performance.webkitNow)||Date.now}var t=e();return{create:function(){return{now:function(){var t=e();return function(){return t.call(window.performance)}}()}},now:function(){return t.call(window.performance)}}}();function i(){function i(){if(!u)throw"AF0";var e=n.now();0!==l&&(o.sd=e-l),l=e,s=s.filter((function(e){return null!==e})),o.frames++;for(var t=0;t<s.length;t++){var i=s[t];null!==i&&(!0===i.ee.call(i.context)?s[t]=null:y.zc(i.repeat)&&(i.repeat=i.repeat-1,0>=i.repeat&&(s[t]=null)))}s=s.filter((function(e){return null!==e})),u=!1,r(),0!==(e=n.now()-e)&&(o.rd=e),o.totalTime+=e,o.ue=1e3*o.frames/o.totalTime,l=0===s.length?0:n.now()}function r(){0<s.length&&!u&&(u=!0,a(i))}var o=this.Wf={frames:0,totalTime:0,rd:0,sd:0,ue:0};e=o;var a=t.Qe()?function(e){window.setTimeout(e,0)}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(){var e=n.create();return function(t){var n=0;window.setTimeout((function(){var i=e.now();t(),n=e.now()-i}),16>n?16-n:0)}}(),s=[],u=!1,l=0;this.repeat=function(e,t,n){this.cancel(e),s.push({ee:e,context:n,repeat:t}),r()},this.once=function(e,t){this.repeat(e,1,t)},this.cancel=function(e){for(var t=0;t<s.length;t++){var n=s[t];null!==n&&n.ee===e&&(s[t]=null)}},this.i=function(){s=[]}}var r=t.md((function(){function e(){this.buffer=[],this.ma=0,this.current=y.extend({},s)}function t(e){return function(){var t,n=this.buffer,i=this.ma;for(n[i++]="call",n[i++]=e,n[i++]=arguments.length,t=0;t<arguments.length;t++)n[i++]=arguments[t];this.ma=i}}function n(e){return function(){return o[e].apply(o,arguments)}}var i=document.createElement("canvas");i.width=1,i.height=1;var o=i.getContext("2d");i=["font"];var a="fillStyle globalAlpha globalCompositeOperation lineCap lineDashOffset lineJoin lineWidth miterLimit shadowBlur shadowColor shadowOffsetX shadowOffsetY strokeStyle textAlign textBaseline".split(" "),s={};return a.concat(i).forEach((function(e){s[e]=o[e]})),e.prototype.clear=function(){this.ma=0},e.prototype.Ga=function(){return 0===this.ma},e.prototype.Na=function(e){e instanceof r?function(e,t,n){for(var i=0,r=e.ma,o=e.buffer;i<n;)o[r++]=t[i++];e.ma=r}(e,this.buffer,this.ma):function(e,t,n,i){for(var r=0;r<n;)switch(t[r++]){case"set":e[t[r++]]=t[r++];break;case"setGlobalAlpha":e[t[r++]]=t[r++]*i;break;case"call":var o=t[r++];switch(t[r++]){case 0:e[o]();break;case 1:e[o](t[r++]);break;case 2:e[o](t[r++],t[r++]);break;case 3:e[o](t[r++],t[r++],t[r++]);break;case 4:e[o](t[r++],t[r++],t[r++],t[r++]);break;case 5:e[o](t[r++],t[r++],t[r++],t[r++],t[r++]);break;case 6:e[o](t[r++],t[r++],t[r++],t[r++],t[r++],t[r++]);break;case 7:e[o](t[r++],t[r++],t[r++],t[r++],t[r++],t[r++],t[r++]);break;case 8:e[o](t[r++],t[r++],t[r++],t[r++],t[r++],t[r++],t[r++],t[r++]);break;case 9:e[o](t[r++],t[r++],t[r++],t[r++],t[r++],t[r++],t[r++],t[r++],t[r++]);break;default:throw"CB0"}}}(e,this.buffer,this.ma,y.I(e.globalAlpha,1))},e.prototype.replay=e.prototype.Na,e.prototype.i=function(){return new e},e.prototype.scratch=e.prototype.i,"arc arcTo beginPath bezierCurveTo clearRect clip closePath drawImage fill fillRect fillText lineTo moveTo putImageData quadraticCurveTo rect rotate scale setLineDash setTransform stroke strokeRect strokeText transform translate".split(" ").forEach((function(n){e.prototype[n]=t(n)})),["measureText","createLinearGradient","createRadialGradient","createPattern","getLineDash"].forEach((function(t){e.prototype[t]=n(t)})),["save","restore"].forEach((function(i){var r=n(i),o=t(i);e.prototype[i]=function(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}(o,r)})),i.forEach((function(t){Object.defineProperty(e.prototype,t,{set:function(e){o[t]=e,this.current[t]=e;var n=this.buffer;n[this.ma++]="set",n[this.ma++]=t,n[this.ma++]=e},get:function(){return this.current[t]}})})),a.forEach((function(t){Object.defineProperty(e.prototype,t,{set:function(e){this.current[t]=e;var n=this.buffer;n[this.ma++]="globalAlpha"===t?"setGlobalAlpha":"set",n[this.ma++]=t,n[this.ma++]=e},get:function(){return this.current[t]}})})),e.prototype.roundRect=function(e,t,n,i,r){this.beginPath(),this.moveTo(e+r,t),this.lineTo(e+n-r,t),this.quadraticCurveTo(e+n,t,e+n,t+r),this.lineTo(e+n,t+i-r),this.quadraticCurveTo(e+n,t+i,e+n-r,t+i),this.lineTo(e+r,t+i),this.quadraticCurveTo(e,t+i,e,t+i-r),this.lineTo(e,t+r),this.quadraticCurveTo(e,t,e+r,t),this.closePath()},e.prototype.fillPolygonWithText=function(e,t,n,i,o){o||(o={});var a={hb:y.I(o.maxFontSize,B.ya.hb),Gc:y.I(o.minFontSize,B.ya.Gc),lineHeight:y.I(o.lineHeight,B.ya.lineHeight),cb:y.I(o.horizontalPadding,B.ya.cb),Ua:y.I(o.verticalPadding,B.ya.Ua),ib:y.I(o.maxTotalTextHeight,B.ya.ib),fontFamily:y.I(o.fontFamily,B.ya.fontFamily),fontStyle:y.I(o.fontStyle,B.ya.fontStyle),fontVariant:y.I(o.fontVariant,B.ya.fontVariant),fontWeight:y.I(o.fontWeight,B.ya.fontWeight),verticalAlign:y.I(o.verticalAlign,B.ya.verticalAlign)},s=o.cache;if(s&&y.has(o,"area")){s.Qc||(s.Qc=new r);var u=o.area,l=y.I(o.cacheInvalidationThreshold,.05);e=B.de(a,this,i,e,M.F(e,{}),{x:t,y:n},o.allowForcedSplit||!1,o.allowEllipsis||!1,s,u,l,o.invalidateCache)}else e=B.re(a,this,i,e,M.F(e,{}),{x:t,y:n},o.allowForcedSplit||!1,o.allowEllipsis||!1);return e.ka?{fit:!0,lineCount:e.bc,fontSize:e.fontSize,box:{x:e.box.x,y:e.box.y,w:e.box.w,h:e.box.o},ellipsis:e.Ub}:{fit:!1}},e})),o=t.md((function(){function e(e){this.S=e,this.canvas=e.canvas,this.i=[],this.zb=[void 0],this.vc=["#SIZE#px sans-serif"],this.td=[0],this.ud=[1],this.Rd=[0],this.Sd=[0],this.Td=[0],this.yd=[10],this.Xb=[10],this.Hb=[this.zb,this.vc,this.Xb,this.td,this.ud,this.Rd,this.yd,this.Sd,this.Td],this.da=[1,0,0,1,0,0]}function t(e){var t=e.S,n=e.Hb[0].length-1;e.zb[n]&&(t.setLineDash(e.zb[n]),t.lineDashOffset=e.td[n]),t.miterLimit=e.yd[n],t.lineWidth=e.ud[n],t.shadowBlur=e.Rd[n],t.shadowOffsetX=e.Sd[n],t.shadowOffsetY=e.Td[n],t.font=e.vc[n].replace("#SIZE#",e.Xb[n].toString())}function n(e,t,n){return e*n[0]+t*n[2]+n[4]}function i(e,t,n){return e*n[1]+t*n[3]+n[5]}function r(e,t){for(var n=0;n<e.length;n++)e[n]*=t[0];return e}e.prototype.save=function(){this.i.push(this.da.slice(0));for(var e=0;e<this.Hb.length;e++){var t=this.Hb[e];t.push(t[t.length-1])}this.S.save()},e.prototype.restore=function(){this.da=this.i.pop();for(var e=0;e<this.Hb.length;e++)this.Hb[e].pop();this.S.restore(),t(this)},e.prototype.scale=function(e,n){var i=this.da;i[0]*=e,i[1]*=e,i[2]*=n,i[3]*=n,e=this.da,i=(n=this.Hb)[0].length-1;var o=this.zb[i];for(o&&r(o,e),o=2;o<n.length;o++){n[o][i]*=e[0]}t(this)},e.prototype.translate=function(e,t){var n=this.da;n[4]+=n[0]*e+n[2]*t,n[5]+=n[1]*e+n[3]*t},["moveTo","lineTo"].forEach((function(t){e.prototype[t]=function(e){return function(t,r){var o=this.da;return this.S[e].call(this.S,n(t,r,o),i(t,r,o))}}(t)})),["clearRect","fillRect","strokeRect","rect"].forEach((function(t){e.prototype[t]=function(e){return function(t,r,o,a){var s=this.da;return this.S[e].call(this.S,n(t,r,s),i(t,r,s),o*s[0],a*s[3])}}(t)})),"fill stroke beginPath closePath clip createImageData createPattern getImageData putImageData getLineDash setLineDash".split(" ").forEach((function(t){e.prototype[t]=function(e){return function(){return this.S[e].apply(this.S,arguments)}}(t)})),[{p:"lineDashOffset",a:function(e){return e.td}},{p:"lineWidth",a:function(e){return e.ud}},{p:"miterLimit",a:function(e){return e.yd}},{p:"shadowBlur",a:function(e){return e.Rd}},{p:"shadowOffsetX",a:function(e){return e.Sd}},{p:"shadowOffsetY",a:function(e){return e.Td}}].forEach((function(t){Object.defineProperty(e.prototype,t.p,{set:function(e){var n=t.a(this);e*=this.da[0],n[n.length-1]=e,this.S[t.p]=e}})}));var o=/(\d+(?:\.\d+)?)px/;return Object.defineProperty(e.prototype,"font",{set:function(e){var t=o.exec(e);if(1<t.length){var n=this.Xb.length-1;this.Xb[n]=parseFloat(t[1]),this.vc[n]=e.replace(o,"#SIZE#px"),e=this.S,n=this.vc[n].replace("#SIZE#",(this.Xb[n]*this.da[0]).toString()),e.font=n}}}),"fillStyle globalAlpha globalCompositeOperation lineCap lineJoin shadowColor strokeStyle textAlign textBaseline".split(" ").forEach((function(t){Object.defineProperty(e.prototype,t,{set:function(e){this.S[t]=e}})})),e.prototype.arc=function(e,t,r,o,a,s){var u=this.da;this.S.arc(n(e,t,u),i(e,t,u),r*u[0],o,a,s)},e.prototype.arcTo=function(e,t,r,o,a){var s=this.da;this.S.arc(n(e,t,s),i(e,t,s),n(r,o,s),i(r,o,s),a*s[0])},e.prototype.bezierCurveTo=function(e,t,r,o,a,s){var u=this.da;this.S.bezierCurveTo(n(e,t,u),i(e,t,u),n(r,o,u),i(r,o,u),n(a,s,u),i(a,s,u))},e.prototype.drawImage=function(e,t,r,o,a,s,u,l,c){function h(t,r,o,a){d.push(n(t,r,f)),d.push(i(t,r,f)),o=y.V(o)?e.width:o,a=y.V(a)?e.height:a,d.push(o*f[0]),d.push(a*f[3])}var f=this.da,d=[e];y.V(s)?h(t,r,o,a):h(s,u,l,c),this.S.drawImage.apply(this.S,d)},e.prototype.quadraticCurveTo=function(e,t,r,o){var a=this.da;this.S.quadraticCurveTo(n(e,t,a),i(e,t,a),n(r,o,a),i(r,o,a))},e.prototype.fillText=function(e,t,r,o){var a=this.da;this.S.fillText(e,n(t,r,a),i(t,r,a),y.zc(o)?o*a[0]:1e20)},e.prototype.setLineDash=function(e){e=r(e.slice(0),this.da),this.zb[this.zb.length-1]=e,this.S.setLineDash(e)},e})),a=function(){var e=!t.Se()||t.Qe()||t.Kh()?1:7;return{estimate:function(){function t(e){e.beginPath(),s.Ud(e,l)}var i=document.createElement("canvas");i.width=800,i.height=600;var r=i.getContext("2d"),o=i.width;i=i.height;var a,u=0,l=[{x:0,y:100}];for(a=1;6>=a;a++)u=2*a*Math.PI/6,l.push({x:100*Math.sin(u),y:100*Math.cos(u)});a={polygonPlainFill:[t,function(e){e.fillStyle="rgb(255, 0, 0)",e.fill()}],polygonPlainStroke:[t,function(e){e.strokeStyle="rgb(128, 0, 0)",e.lineWidth=2,e.closePath(),e.stroke()}],polygonGradientFill:[t,function(e){var t=e.createRadialGradient(0,0,10,0,0,60);t.addColorStop(0,"rgb(255, 0, 0)"),t.addColorStop(1,"rgb(255, 255, 0)"),e.fillStyle=t,e.fill()}],polygonGradientStroke:[t,function(e){var t=e.createLinearGradient(-100,-100,100,100);t.addColorStop(0,"rgb(224, 0, 0)"),t.addColorStop(1,"rgb(32, 0, 0)"),e.strokeStyle=t,e.lineWidth=2,e.closePath(),e.stroke()}],polygonExposureShadow:[t,function(e){e.shadowBlur=50,e.shadowColor="rgba(0, 0, 0, 1)",e.fillStyle="rgba(0, 0, 0, 1)",e.globalCompositeOperation="source-over",e.fill(),e.shadowBlur=0,e.shadowColor="transparent",e.globalCompositeOperation="destination-out",e.fill()}],labelPlainFill:[function(e){e.fillStyle="#000",e.font="24px sans-serif",e.textAlign="center"},function(e){e.fillText("Some text",0,-16),e.fillText("for testing purposes",0,16)}]},u=100/Object.keys(a).length;var c,h=n.now(),f={};for(c in a){var d=a[c],p=n.now(),g=0;do{r.save(),r.translate(Math.random()*o,Math.random()*i);var b=3*Math.random()+.5;for(r.scale(b,b),b=0;b<d.length;b++)d[b](r);r.restore(),g++,b=n.now()}while(b-p<u);f[c]=e*(b-p)/g}return f.total=n.now()-h,f}}}(),s={Ud:function(e,t){var n=t[0];e.moveTo(n.x,n.y);for(var i=t.length-1;0<i;i--)n=t[i],e.lineTo(n.x,n.y)},Ti:function(e,t,n,i){var r,o=[],a=0,s=t.length;for(r=0;r<s;r++){var u=t[r],l=t[(r+1)%s];u=M.i(u,l),u=Math.sqrt(u),o.push(u),a+=u}n=i*(n+.5*i*a/s),a={};var c={},h={};for(r=0;r<s;r++){u=t[r],l=t[(r+1)%s],i=t[(r+2)%s];var f=o[(r+1)%s];f=Math.min(.5,n/f),M.ga(1-f,l,i,c),M.ga(f,l,i,h),0==r&&(M.ga(Math.min(.5,n/o[0]),u,l,a),e.moveTo(a.x,a.y)),e.quadraticCurveTo(l.x,l.y,c.x,c.y),e.lineTo(h.x,h.y)}return!0}};function u(e){function t(){return"embedded"===r.getAttribute("data-foamtree")}function n(e){h[e]&&(h[e].style.opacity=d*f[e])}function i(e){e.width=Math.round(a*e.B),e.height=Math.round(s*e.B)}var r,o,a,s,u,l,c=[],h={},f={},d=0;this.M=function(n){0!==(r=n).clientWidth&&0!==r.clientHeight||j.i("element has zero dimensions: "+r.clientWidth+" x "+r.clientHeight+"."),r.innerHTML="",a=r.clientWidth,s=r.clientHeight,u=0!==a?a:void 0,l=0!==s?s:void 0,t()&&j.i("visualization already embedded in the element."),r.setAttribute("data-foamtree","embedded"),(o=document.createElement("div")).style.width="100%",o.style.height="100%",o.style.position="relative",r.appendChild(o),e.j.D("stage:initialized",this,o,a,s)},this.Za=function(){t()&&(r.removeAttribute("data-foamtree"),c=[],h={},r.removeChild(o),e.j.D("stage:disposed",this,o))},this.u=function(){if(a=r.clientWidth,s=r.clientHeight,0!==a&&0!==s&&(a!==u||s!==l)){for(var t=c.length-1;0<=t;t--)i(c[t]);e.j.D("stage:resized",u,l,a,s),u=a,l=s}},this.Hi=function(e,t){e.B=t,i(e)},this.dc=function(t,r,a){var s=document.createElement("canvas");return s.setAttribute("style","position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 100%; height: 100%; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;"),s.B=r,i(s),c.push(s),h[t]=s,f[t]=1,n(t),a||o.appendChild(s),e.j.D("stage:newLayer",t,s),s},this.$b=function(e,t){return y.V(t)||(f[e]=t,n(e)),f[e]},this.i=function(e){return y.V(e)||(d=e,y.Aa(h,(function(e,t){n(t)}))),d}}function l(e){function t(e,t,n){return m=!0,p.x=0,p.y=0,g.x=0,g.y=0,a=f,s.x=d.x,s.y=d.y,t(),u*=e,l=n?u/a:e,l=Math.max(.25/a,l),!0}function n(e,t){return t.x=e.x/f+d.x,t.y=e.y/f+d.y,t}function i(e,t,n,i,r,o,a,s,u){var l=(e-n)*(o-s)-(t-i)*(r-a);return!(1e-5>Math.abs(l))&&(u.x=((e*i-t*n)*(r-a)-(e-n)*(r*s-o*a))/l,u.y=((e*i-t*n)*(o-s)-(t-i)*(r*s-o*a))/l,!0)}var r,o,a=1,s={x:0,y:0},u=1,l=1,c=1,h={x:0,y:0},f=1,d={x:0,y:0},p={x:0,y:0},g={x:0,y:0},b={x:0,y:0,w:0,o:0},v={x:0,y:0,w:0,o:0,scale:1},m=!0;e.j.subscribe("stage:initialized",(function(e,t,n,i){r=n,o=i,b.x=0,b.y=0,b.w=n,b.o=i,v.x=0,v.y=0,v.w=n,v.o=i,v.scale=1})),e.j.subscribe("stage:resized",(function(e,t,n,i){function a(e){e.x*=l,e.y*=c}function u(e){a(e),e.w*=l,e.o*=c}r=n,o=i;var l=n/e,c=i/t;a(s),a(d),a(h),a(p),a(g),u(b),u(v)})),this.Nb=function(e,i){return t(i,(function(){n(e,h)}),!0)},this.ga=function(e,n){if(1==Math.round(1e4*n)/1e4){n=b.x-d.x;var r=b.y-d.y;return t(1,(function(){}),!0),this.i(-n,-r)}return t(n,(function(){for(var t=!1;!t;){t=Math.random();var n=Math.random(),r=Math.random(),o=Math.random();t=i(e.x+t*e.w,e.y+n*e.o,b.x+t*b.w,b.y+n*b.o,e.x+r*e.w,e.y+o*e.o,b.x+r*b.w,b.y+o*b.o,h)}}),!0)},this.ic=function(e,n){var a=e.w/e.o,s=r/o;if(a<s){var u=e.o*s,l=e.o;a=e.x-.5*(u-e.w),s=e.y}else a>s?(u=e.w,l=e.w*o/r,a=e.x,s=e.y-.5*(l-e.o)):(a=e.x,s=e.y,u=e.w,l=e.o);return a-=u*n,u*=1+2*n,i(a,s-=l*n,d.x,d.y,a+u,s,d.x+r/f,d.y,h)?t(r/f/u,y.qa,!1):(m=!1,this.i(f*(d.x-a),f*(d.y-s)))},this.i=function(e,t){return e=Math.round(1e4*e)/1e4,t=Math.round(1e4*t)/1e4,g.x+=e/f,g.y+=t/f,0!==e||0!==t},this.reset=function(e){return e&&this.content(0,0,r,o),this.ga({x:b.x+d.x,y:b.y+d.y,w:b.w/f,o:b.o/f},c/u)},this.Fb=function(e){c=Math.min(1,Math.round(1e4*(e||u))/1e4)},this.u=function(){return d.x<b.x?(b.x-d.x)*f:d.x+r/f>b.x+b.w?-(d.x+r/f-b.x-b.w)*f:0},this.H=function(){return d.y<b.y?(b.y-d.y)*f:d.y+o/f>b.y+b.o?-(d.y+o/f-b.y-b.o)*f:0},this.update=function(e){var t=Math.abs(Math.log(l));6>t?t=2:(t/=4,t+=3*t*(1<l?e:1-e)),t=1<l?Math.pow(e,t):1-Math.pow(1-e,t),f=a*(t=(m?t:1)*(l-1)+1),d.x=h.x-(h.x-s.x)/t,d.y=h.y-(h.y-s.y)/t,d.x-=p.x*(1-e)+g.x*e,d.y-=p.y*(1-e)+g.y*e,1===e&&(p.x=g.x,p.y=g.y),v.x=d.x,v.y=d.y,v.w=r/f,v.o=o/f,v.scale=f},this.T=function(e){return e.x=v.x,e.y=v.y,e.scale=v.scale,e},this.absolute=function(e,t){return n(e,t||{})},this.Uc=function(e,t){return(t=t||{}).x=(e.x-d.x)*f,t.y=(e.y-d.y)*f,t},this.pc=function(e){return this.scale()<c/e},this.zd=function(){return y.od(f,1)},this.scale=function(){return Math.round(1e4*f)/1e4},this.content=function(e,t,n,i){b.x=e,b.y=t,b.w=n,b.o=i},this.rc=function(e,t){var n;for(n=e.length-1;0<=n;n--){var i=e[n];i.save(),i.scale(f,f),i.translate(-d.x,-d.y)}for(t(v),n=e.length-1;0<=n;n--)(i=e[n]).restore()}}var c=new function(){function e(e){if("hsl"==e.model||"hsla"==e.model)return e;var t=e.r/=255,n=e.g/=255,i=e.b/=255,r=Math.max(t,n,i),o=Math.min(t,n,i),a=(r+o)/2;if(r==o)var s=o=0;else{var u=r-o;switch(o=.5<a?u/(2-r-o):u/(r+o),r){case t:s=(n-i)/u+(n<i?6:0);break;case n:s=(i-t)/u+2;break;case i:s=(t-n)/u+4}s/=6}return e.h=360*s,e.s=100*o,e.l=100*a,e.model="hsl",e}var t={h:0,s:0,l:0,a:1,model:"hsla"};this.u=function(n){return y.Ac(n)?e(c.ga(n)):y.wb(n)?e(n):t},this.ga=function(e){var n;return(n=/rgba\(\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*\)/.exec(e))&&5==n.length?{r:parseFloat(n[1]),g:parseFloat(n[2]),b:parseFloat(n[3]),a:parseFloat(n[4]),model:"rgba"}:(n=/hsla\(\s*([^,\s]+)\s*,\s*([^,%\s]+)%\s*,\s*([^,\s%]+)%\s*,\s*([^,\s]+)\s*\)/.exec(e))&&5==n.length?{h:parseFloat(n[1]),s:parseFloat(n[2]),l:parseFloat(n[3]),a:parseFloat(n[4]),model:"hsla"}:(n=/rgb\(\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*\)/.exec(e))&&4==n.length?{r:parseFloat(n[1]),g:parseFloat(n[2]),b:parseFloat(n[3]),a:1,model:"rgb"}:(n=/hsl\(\s*([^,\s]+)\s*,\s*([^,\s%]+)%\s*,\s*([^,\s%]+)%\s*\)/.exec(e))&&4==n.length?{h:parseFloat(n[1]),s:parseFloat(n[2]),l:parseFloat(n[3]),a:1,model:"hsl"}:(n=/#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/.exec(e))&&4==n.length?{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16),a:1,model:"rgb"}:(n=/#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/.exec(e))&&4==n.length?{r:17*parseInt(n[1],16),g:17*parseInt(n[2],16),b:17*parseInt(n[3],16),a:1,model:"rgb"}:t},this.T=function(e){function t(e,t,n){return 0>n&&(n+=1),1<n&&--n,n<1/6?e+6*(t-e)*n:.5>n?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function n(e,t,n){return Math.sqrt(e*e*.241+t*t*.691+n*n*.068)/255}if("rgb"==e.model||"rgba"==e.model)return n(e.r,e.g,e.b);var i=e.l/100,r=e.s/100,o=e.h/360;if(0==e.zj)i=e=o=i;else{var a=2*i-(r=.5>i?i*(1+r):i+r-i*r);i=t(a,r,o+1/3),e=t(a,r,o),o=t(a,r,o-1/3)}return n(255*i,255*e,255*o)},this.wa=function(e){if(y.Ac(e))return e;if(!y.wb(e))return"#000";switch(e.model){case"hsla":return c.sa(e);case"hsl":return c.H(e);case"rgba":return c.ua(e);case"rgb":return c.ta(e);default:return"#000"}},this.ua=function(e){return"rgba("+(.5+e.r|0)+","+(.5+e.g|0)+","+(.5+e.b|0)+","+e.a+")"},this.ta=function(e){return"rgba("+(.5+e.r|0)+","+(.5+e.g|0)+","+(.5+e.b|0)+")"},this.sa=function(e){return"hsla("+(.5+e.h|0)+","+(.5+e.s|0)+"%,"+(.5+e.l|0)+"%,"+e.a+")"},this.H=function(e){return"hsl("+(.5+e.h|0)+","+(.5+e.s|0)+"%,"+(.5+e.l|0)+"%)"},this.i=function(e,t,n){return"hsl("+(.5+e|0)+","+(.5+t|0)+"%,"+(.5+n|0)+"%)"}};function h(){var e,t=!1,n=[],i=this,r=new function(){this.then=function(r){return r&&(t?r.apply(i,e):n.push(r)),this},this.Fg=function(e){return i=e,{then:this.then}}};this.resolve=function(){e=arguments;for(var r=0;r<n.length;r++)n[r].apply(i,e);return t=!0,this},this.promise=function(){return r}}function f(e){var t=new h,n=e.length;if(0<e.length)for(var i=e.length-1;0<=i;i--)e[i].then((function(){0==--n&&t.resolve()}));else t.resolve();return t.promise()}function d(e){var t=0;this.i=function(){t++},this.u=function(){0===--t&&e()},this.clear=function(){t=0},this.initial=function(){return 0===t}}var p={oe:function(e,t,n,i){i=i||{};try{var r=e.getBoundingClientRect()}catch(g){if(!p.Ih){p.Ih=!0,window.console.log("getBoundingClientRect() failed."),window.console.log("Element",e);for(var o=(r=window.console).log;null!==e.parentElement;)e=e.parentElement;o.call(r,"Attached to DOM",e===document.body.parentElement)}r={left:0,top:0}}return i.x=t-r.left,i.y=n-r.top,i}};function b(){var e=document,t={};this.addEventListener=function(n,i,r){var o=t[n];o||(o=[],t[n]=o),o.push(i),e.addEventListener(n,i,r)},this.i=function(){y.Aa(t,(function(t,n){for(var i=t.length-1;0<=i;i--)e.removeEventListener(n,t[i])}))}}function v(e){function t(e){return function(t){n(t)&&e.apply(this,arguments)}}function n(t){for(t=t.target;t;){if(t===e)return!0;t=t.parentElement}return!1}function i(e,t,n){r(e,n=n||{});for(var i=0;i<t.length;i++)t[i].call(e.target,n);return r(e,n),(void 0===n.Db&&n.$h||"prevent"===n.Db)&&e.preventDefault(),n}function r(t,n){return p.oe(e,t.clientX,t.clientY,n),n.altKey=t.altKey,n.metaKey=t.metaKey,n.ctrlKey=t.ctrlKey,n.shiftKey=t.shiftKey,n.lb=3===t.which,n}var o=new b,a=[],s=[],u=[],l=[],c=[],h=[],f=[],d=[],g=[],v=[],m=[];this.i=function(e){a.push(e)},this.u=function(e){c.push(e)},this.sa=function(e){s.push(e)},this.wa=function(e){u.push(e)},this.Ka=function(e){l.push(e)},this.ua=function(e){m.push(e)},this.ta=function(e){h.push(e)},this.Ja=function(e){f.push(e)},this.ga=function(e){d.push(e)},this.H=function(e){g.push(e)},this.T=function(e){v.push(e)},this.Za=function(){o.i()};var y,C,w,_,x={x:0,y:0},A={x:0,y:0},S=!1,T=!1;o.addEventListener("mousedown",t((function(t){if(t.target!==e){var n=i(t,u);A.x=n.x,A.y=n.y,x.x=n.x,x.y=n.y,S=!0,i(t,d),C=!1,y=window.setTimeout((function(){100>M.i(x,n)&&(window.clearTimeout(_),i(t,s),C=!0)}),400)}}))),o.addEventListener("mouseup",(function(e){var t=i(e,l);S&&(T&&i(e,v),window.clearTimeout(y),C||T||!n(e)||(t={x:t.x,y:t.y},w&&100>M.i(t,w)?i(e,c):i(e,a),w=t,_=window.setTimeout((function(){w=null}),350)),T=S=!1)})),o.addEventListener("mousemove",(function(e){var t=r(e,{});n(e)&&i(e,h,{type:"move"}),x.x=t.x,x.y=t.y,S&&!T&&100<M.i(A,x)&&(T=!0),T&&i(e,g,t)})),o.addEventListener("mouseout",t((function(e){i(e,f,{type:"out"})}))),o.addEventListener("wheel",t((function(e){if("deltaY"in e)var t=e.deltaY;else t=0,"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=0),t*=10;t&&e.deltaMode&&(t=1===e.deltaMode?67*t:800*t),i(e,m,{ed:-t/200,$h:!0})})),{passive:!1}),o.addEventListener("contextmenu",t((function(e){e.preventDefault()})))}var m=function(){function e(e){return function(t){return Math.pow(t,e)}}function t(e){return function(t){return 1-Math.pow(1-t,e)}}function n(e){return function(t){return 1>(t*=2)?.5*Math.pow(t,e):1-.5*Math.abs(Math.pow(2-t,e))}}function i(e){return function(t){for(var n=0;n<e.length;n++)t=(0,e[n])(t);return t}}return{ia:function(e){switch(e){case"linear":default:return m.Ab;case"bounce":return m.tg;case"squareIn":return m.Tf;case"squareOut":return m.Gb;case"squareInOut":return m.Uf;case"cubicIn":return m.wg;case"cubicOut":return m.fe;case"cubicInOut":return m.xg;case"quadIn":return m.si;case"quadOut":return m.ui;case"quadInOut":return m.ti}},Ab:function(e){return e},tg:i([n(2),function(e){return 0===e?0:1===e?1:e*(e*(e*(e*(25.9425*e-85.88)+105.78)-58.69)+13.8475)}]),Tf:e(2),Gb:t(2),Uf:n(2),wg:e(3),fe:t(3),xg:n(3),si:e(2),ui:t(2),ti:n(2),oj:i}}(),y={V:function(e){return void 0===e},Re:function(e){return null===e},zc:function(e){return"[object Number]"===Object.prototype.toString.call(e)},Ac:function(e){return"[object String]"===Object.prototype.toString.call(e)},Pe:function(e){return"function"==typeof e},wb:function(e){return e===Object(e)},od:function(e,t){return 1e-6>e-t&&-1e-6<e-t},Ne:function(e){return y.V(e)||y.Re(e)||y.Ac(e)&&!/\S/.test(e)},has:function(e,t){return e&&e.hasOwnProperty(t)},bb:function(e,t){if(e)for(var n=t.length-1;0<=n;n--)if(e.hasOwnProperty(t[n]))return!0;return!1},extend:function(e){return y.Bg(Array.prototype.slice.call(arguments,1),(function(t){if(t)for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})),e},xj:function(e,t){return e.map((function(e){return e[t]}),[])},Bg:function(e,t,n){null!=e&&(e.forEach?e.forEach(t,n):y.Aa(e,t,n))},Aa:function(e,t,n){for(var i in e)if(e.hasOwnProperty(i)&&!1===t.call(n,e[i],i,e))break},I:function(){for(var e=0;e<arguments.length;e++){var t=arguments[e];if(!(y.V(t)||y.zc(t)&&isNaN(t)||y.Ac(t)&&y.Ne(t)))return t}},If:function(e,t){0<=(t=e.indexOf(t))&&e.splice(t,1)},yg:function(e,t,n){var i;return function(){var r=this,o=arguments,a=n&&!i;clearTimeout(i),i=setTimeout((function(){i=null,n||e.apply(r,o)}),t),a&&e.apply(r,o)}},defer:function(e){setTimeout(e,1)},vj:function(e){return e},qa:function(){}},C=function(e,n,i){return t.Fh()?function(){var t=n+":"+JSON.stringify(arguments),r=window.localStorage.getItem(t);return r&&(r=JSON.parse(r)),r&&Date.now()-r.t<i?r.v:(r=e.apply(this,arguments),window.localStorage.setItem(t,JSON.stringify({v:r,t:Date.now()})),r)}:e},w=function(e,t){function n(){var n=[];if(Array.isArray(e))for(var i=0;i<e.length;i++){var r=e[i];r&&n.push(r.apply(t,arguments))}else e&&n.push(e.apply(t,arguments));return n}return n.empty=function(){return 0===e.length&&!y.Pe(e)},n};function _(){var e={};this.subscribe=function(t,n){var i=e[t];i||(i=[],e[t]=i),i.push(n)},this.D=function(t,n){var i=e[t];if(i)for(var r=Array.prototype.slice.call(arguments,1),o=0;o<i.length;o++)i[o].apply(this,r)}}var x=function(e){for(var t="",n=0;n<e.length;n++)t+=String.fromCharCode(1^e.charCodeAt(n));return t};function A(e){function t(t,n,u){var l,c=this,h=0;this.id=o++,this.name=u||"{unnamed on "+t+"}",this.target=function(){return t},this.xb=function(){return-1!=s.indexOf(c)},this.start=function(){if(!c.xb()){if(-1==s.indexOf(c)){var t=a.now();!0===c.af(t)&&(s=s.slice()).push(c)}0<s.length&&e.repeat(i)}return this},this.stop=function(){for(r(c);l<n.length;l++){var e=n[l];e.Xa&&e.gb.call()}return this},this.af=function(e){if(h++,0!==n.length){if(y.V(l)){var t=n[l=0];t.before&&t.before.call(t,e,h,c)}else t=n[l];for(;l<n.length;){if(t.gb&&t.gb.call(t,e,h,c))return!0;t.after&&t.after.call(t,e,h,c),y.V(l)&&(l=-1),++l<n.length&&((t=n[l]).before&&t.before.call(t,e,h,c))}}return!1}}function i(){!function(){var e=a.now();s.forEach((function(t){!0!==t.af(e)&&r(t)}))}(),0==s.length&&e.cancel(i)}function r(e){s=s.filter((function(t){return t!==e}))}var o=0,a=n.create(),s=[];this.i=function(){for(var e=s.length-1;0<=e;e--)s[e].stop();s=[]},this.K=function(){function e(){}function n(e){function t(e){return y.Pe(e)?e.call(void 0):e}var n,i,r=e.target,o=e.duration,s=e.ba;this.before=function(){for(var o in n={},e.P)r.hasOwnProperty(o)&&(n[o]={start:y.V(e.P[o].start)?r[o]:t(e.P[o].start),end:y.V(e.P[o].end)?r[o]:t(e.P[o].end),easing:y.V(e.P[o].easing)?m.Ab:e.P[o].easing});i=a.now()},this.gb=function(){var e=a.now()-i;for(var t in e=0===o?1:Math.min(o,e)/o,n){var u=n[t];r[t]=u.start+(u.end-u.start)*u.easing(e)}return s&&s.call(r,e),1>e}}function i(e,t,n){this.Xa=n,this.gb=function(){return e.call(t),!1}}function r(e){var t;this.before=function(n,i){t=i+e},this.gb=function(e,n){return n<t}}function o(e){var t;this.before=function(n){t=n+e},this.gb=function(e){return e<t}}function u(e){this.before=function(){e.forEach((function(e){e.start()}))},this.gb=function(){for(var t=0;t<e.length;t++)if(e[t].xb())return!0;return!1}}return e.A=function(e,a){return new function(){function s(t,n,r,o){return n?(y.V(r)&&(r=e),t.Mb(new i(n,r,o))):t}var l=[];this.Mb=function(e){return l.push(e),this},this.wait=function(e){return this.Mb(new o(e))},this.Xd=function(e){return this.Mb(new r(e||1))},this.call=function(e,t){return s(this,e,t,!1)},this.Xa=function(e,t){return s(this,e,t,!0)},this.fa=function(t){return y.V(t.target)&&(t.target=e),this.Mb(new n(t))},this.Qa=function(e){return this.Mb(new u(e))},this.done=function(){return new t(e,l,a)},this.start=function(){return this.done().start()},this.i=function(){var e=new h;return this.Xd().call(e.resolve).done(),e.promise()},this.Ta=function(){var e=this.i();return this.start(),e}}},e.jc=function(t){return function(e){return y.V(e)?s.slice():s.filter((function(t){return t.target()===e}))}(t).forEach((function(e){e.stop()})),e.A(t,void 0)},e}()}var S=function(){var e={ne:function(e,t){if(e.m){e=e.m;for(var n=0;n<e.length;n++)t(e[n],n)}},sc:function(t,n){if(t.m){t=t.m;for(var i=0;i<t.length;i++)if(!1===e.sc(t[i],n)||!1===n(t[i],i))return!1}}};return e.L=e.sc,e.tc=function(t,n){if(t.m){t=t.m;for(var i=0;i<t.length;i++)if(!1===n(t[i],i)||!1===e.tc(t[i],n))return!1}},e.za=function(t,n){if(t.m)for(var i=t.m,r=0;r<i.length;r++)if(!1===e.za(i[r],n))return!1;return n(t)},e.pj=e.za,e.fd=function(t,n){!1!==n(t)&&e.tc(t,n)},e.uc=function(t,n){var i=[];return e.tc(t,(function(e){i.push(e)})),n?i.filter(n):i},e.me=function(e,t){for(e=e.parent;e&&!1!==t(e);)e=e.parent},e.Jh=function(e,t){for(e=e.parent;e&&e!==t;)e=e.parent;return!!e},e}(),M=new function(){function e(e,t){var n=e.x-t.x;return n*n+(e=e.y-t.y)*e}function t(e,t,n){for(var i=0;i<e.length;i++){var r=M.T(e[i],e[i+1]||e[0],t,n,!0);if(r)return r}}return this.T=function(e,t,n,i,r){var o=e.x;e=e.y;var a=t.x-o;t=t.y-e;var s=n.x,u=n.y;n=i.x-s;var l=i.y-u;if(!(1e-12>=(i=a*l-n*t)&&-1e-12<=i)&&(n=((s-=o)*l-n*(u-=e))/i,0<=(i=(s*t-a*u)/i)&&(r||1>=i)&&0<=n&&1>=n))return{x:o+a*n,y:e+t*n}},this.Lb=function(e,t,n,i){var r=e.x;e=e.y;var o=t.x-r;t=t.y-e;var a=n.x;n=n.y;var s=i.x-a,u=o*(i=i.y-n)-s*t;if(!(1e-12>=u&&-1e-12<=u)&&(0<=(i=((a-r)*i-s*(n-e))/u)&&1>=i))return{x:r+o*i,y:e+t*i}},this.wa=function(e,n,i){var r=M.u(n,{}),o=M.u(i,{}),a=o.x-r.x,s=o.y-r.y,u=[];for(o=0;o<i.length;o++){var l=i[o];u.push({x:l.x-a,y:l.y-s})}for(i=[],l=[],o=0;o<e.length;o++){var c=e[o],h=t(n,r,c);h?(i.push(h),l.push(t(u,r,c))):(i.push(null),l.push(null))}for(o=0;o<e.length;o++)if(h=i[o],c=l[o],h&&c){n=e[o],u=r;var f=h.x-r.x;if(h=h.y-r.y,1e-12<(h=Math.sqrt(f*f+h*h))){f=n.x-r.x;var d=n.y-r.y;h=Math.sqrt(f*f+d*d)/h,n.x=u.x+h*(c.x-u.x),n.y=u.y+h*(c.y-u.y)}else n.x=u.x,n.y=u.y}for(o=0;o<e.length;o++)(l=e[o]).x+=a,l.y+=s},this.F=function(e,t){if(0!==e.length){for(var n,i,r=n=e[0].x,o=i=e[0].y,a=e.length;0<--a;)r=Math.min(r,e[a].x),n=Math.max(n,e[a].x),o=Math.min(o,e[a].y),i=Math.max(i,e[a].y);return t.x=r,t.y=o,t.w=n-r,t.o=i-o,t}},this.H=function(e){return[{x:e.x,y:e.y},{x:e.x+e.w,y:e.y},{x:e.x+e.w,y:e.y+e.o},{x:e.x,y:e.y+e.o}]},this.u=function(e,t){for(var n=0,i=0,r=e.length,o=e[0],a=0,s=1;s<r-1;s++){var u=e[s],l=e[s+1],c=o.y+u.y+l.y,h=(u.x-o.x)*(l.y-o.y)-(l.x-o.x)*(u.y-o.y);n+=h*(o.x+u.x+l.x),i+=h*c,a+=h}return t.x=n/(3*a),t.y=i/(3*a),t.ha=a/2,t},this.Ja=function(e,t){this.u(e,t),t.r=Math.sqrt(t.ha/Math.PI)},this.sa=function(e,t){for(var n=0;n<e.length;n++){var i=e[n],r=e[n+1]||e[0];if(0>(t.y-i.y)*(r.x-i.x)-(t.x-i.x)*(r.y-i.y))return!1}return!0},this.Vc=function(e,t,n){var i=e.x,r=t.x;if(e.x>t.x&&(i=t.x,r=e.x),r>n.x+n.w&&(r=n.x+n.w),i<n.x&&(i=n.x),i>r)return!1;var o=e.y,a=t.y,s=t.x-e.x;return 1e-7<Math.abs(s)&&(o=(a=(t.y-e.y)/s)*i+(e=e.y-a*e.x),a=a*r+e),o>a&&(i=a,a=o,o=i),a>n.y+n.o&&(a=n.y+n.o),o<n.y&&(o=n.y),o<=a},this.Ka=function(n,i,r,o,a){var s;function u(r,o,a){if(i.x===h.x&&i.y===h.y)return a;var u=t(n,i,h),f=Math.sqrt(e(u,i)/(r*r+o*o));return f<l?(l=f,s=u.x,c=u.y,0!==o?Math.abs(c-i.y)/Math.abs(o):Math.abs(s-i.x)/Math.abs(r)):a}o=y.I(o,.5),a=y.I(a,.5),r=y.I(r,1);var l=Number.MAX_VALUE,c=s=0,h={x:0,y:0},f=o*r;r*=1-o,o=1-a,h.x=i.x-f,h.y=i.y-a;var d=u(f,a,d);return h.x=i.x+r,h.y=i.y-a,d=u(r,a,d),h.x=i.x-f,h.y=i.y+o,d=u(f,o,d),h.x=i.x+r,h.y=i.y+o,u(r,o,d)},this.pb=function(e,t){function n(e,t,n){var i=t.x,r=n.x;t=t.y;var o=r-i,a=(n=n.y)-t;return Math.abs(a*e.x-o*e.y-i*n+r*t)/Math.sqrt(o*o+a*a)}for(var i=e.length,r=n(t,e[i-1],e[0]),o=0;o<i-1;o++){var a=n(t,e[o],e[o+1]);a<r&&(r=a)}return r},this.ua=function(e,t,n){var i;n={x:t.x+Math.cos(n),y:t.y-Math.sin(n)};var r=[],o=[],a=e.length;for(i=0;i<a;i++){var s=M.Lb(e[i],e[(i+1)%a],t,n);if(s&&(r.push(s),2==o.push(i)))break}if(2==r.length){s=r[0],r=r[1];var u=o[0];o=o[1];var l=[r,s];for(i=u+1;i<=o;i++)l.push(e[i]);for(i=[s,r];o!=u;)o=(o+1)%a,i.push(e[o]);return e=[l,i],a=n.x-t.x,i=r.x-s.x,0===a&&(a=n.y-t.y,i=r.y-s.y),(0>a?-1:0<a?1:0)!=(0>i?-1:0<i?1:0)&&e.reverse(),e}},this.ga=function(e,t,n,i){return i.x=e*(t.x-n.x)+n.x,i.y=e*(t.y-n.y)+n.y,i},this.i=e,this.ta=function(e,n,i){if(y.zc(n))var r=2*Math.PI*n/360;else switch(r=M.F(e,{}),n){case"random":r=Math.random()*Math.PI*2;break;case"top":r=Math.atan2(-r.o,0);break;case"bottom":r=Math.atan2(r.o,0);break;case"left":r=Math.atan2(0,-r.w);break;case"right":r=Math.atan2(0,r.w);break;case"topleft":r=Math.atan2(-r.o,-r.w);break;case"topright":r=Math.atan2(-r.o,r.w);break;case"bottomleft":r=Math.atan2(r.o,-r.w);break;default:r=Math.atan2(r.o,r.w)}return e=t(e,n=M.u(e,{}),{x:n.x+Math.cos(r),y:n.y+Math.sin(r)}),M.ga(i,e,n,{})},this},T=new function(){function e(e,t){this.face=e,this.Rc=t,this.ec=this.Lc=null}function t(e,t,n){this.la=[e,t,n],this.J=Array(3);var i=t.y-e.y,r=n.z-e.z,o=t.x-e.x;t=t.z-e.z;var a=n.x-e.x;e=n.y-e.y,this.Ha={x:i*r-t*e,y:t*a-o*r,z:o*e-i*a},this.Ya=[],this.ad=this.visible=!1}this.i=function(i){function o(t,n,i){var r=t.la[0],o=t.Ha,a=o.x,l=o.y;o=o.z;var c=Array(u),h=(n=n.Ya).length;for(s=0;s<h;s++){var f=n[s].Rc;c[f.index]=!0,0>a*(f.x-r.x)+l*(f.y-r.y)+o*(f.z-r.z)&&e.add(t,f)}for(h=(n=i.Ya).length,s=0;s<h;s++)!0!==c[(f=n[s].Rc).index]&&0>a*(f.x-r.x)+l*(f.y-r.y)+o*(f.z-r.z)&&e.add(t,f)}var a,s,u=i.length;for(a=0;a<u;a++)i[a].index=a,i[a].Pb=null;var l,c=[];if(0<(l=function(){function n(e,n,i,r){var o={x:n.x-e.x,y:n.y-e.y,z:n.z-e.z},a=i.x-e.x,s=i.y-e.y,u=i.z-e.z,l=o.y*u-o.z*s,c=o.z*a-o.x*u;return o=o.x*s-o.y*a,l*r.x+c*r.y+o*r.z>l*e.x+c*e.y+o*e.z?new t(e,n,i):new t(i,n,e)}function r(e,t,n,i){function r(e,t,n){return(e=e.la)[((t=e[0]==t?0:e[1]==t?1:2)+1)%3]!=n?(t+2)%3:t}t.J[r(t,n,i)]=e,e.J[r(e,i,n)]=t}if(4>u)return 0;var o=i[0],a=i[1],s=i[2],l=i[3],h=n(o,a,s,l),f=n(o,s,l,a),d=n(o,a,l,s),p=n(a,s,l,o);for(r(h,f,s,o),r(h,d,o,a),r(h,p,a,s),r(f,d,l,o),r(f,p,s,l),r(d,p,l,a),c.push(h,f,d,p),o=4;o<u;o++)for(a=i[o],s=0;4>s;s++)h=(l=c[s]).la[0],0>(f=l.Ha).x*(a.x-h.x)+f.y*(a.y-h.y)+f.z*(a.z-h.z)&&e.add(l,a);return 4}())){for(;l<u;){var h=i[l];if(h.Pb){for(a=h.Pb;null!==a;)a.face.visible=!0,a=a.ec;a=0;e:for(;a<c.length;a++){var f=c[a];if(!1===f.visible){var d=f.J;for(s=0;3>s;s++)if(!0===d[s].visible){var p=f,g=s;break e}}}f=[],d=[];var b=p,v=g;do{if(f.push(b),d.push(v),v=(v+1)%3,!1===b.J[v].visible)do{for(a=b.la[v],b=b.J[v],s=0;3>s;s++)b.la[s]==a&&(v=s)}while(!1===b.J[v].visible&&(b!==p||v!==g))}while(b!==p||v!==g);var m=null,y=null;for(a=0;a<f.length;a++){b=f[a],v=d[a];var C=b.J[v],w=b.la[(v+1)%3],_=b.la[v],x=w.y-h.y,A=_.z-h.z,S=w.x-h.x,M=w.z-h.z,T=_.x-h.x,k=_.y-h.y;if(0<r.length){var z=r.pop();z.la[0]=h,z.la[1]=w,z.la[2]=_,z.Ha.x=x*A-M*k,z.Ha.y=M*T-S*A,z.Ha.z=S*k-x*T,z.Ya.length=0,z.visible=!1,z.ad=!0}else z={la:[h,w,_],J:Array(3),Ha:{x:x*A-M*k,y:M*T-S*A,z:S*k-x*T},Ya:[],visible:!1};c.push(z),b.J[v]=z,z.J[1]=b,null!==y&&(y.J[0]=z,z.J[2]=y),y=z,null===m&&(m=z),o(z,b,C)}for(y.J[0]=m,m.J[2]=y,a=[],s=0;s<c.length;s++)if(!0===(f=c[s]).visible){for(b=(d=f.Ya).length,h=0;h<b;h++)m=(v=d[h]).Lc,y=v.ec,null!==m&&(m.ec=y),null!==y&&(y.Lc=m),null===m&&(v.Rc.Pb=y),n.push(v);f.ad&&r.push(f)}else a.push(f);c=a}l++}for(a=0;a<c.length;a++)(f=c[a]).ad&&r.push(f)}return{pe:c}},e.add=function(t,i){if(0<n.length){var r=n.pop();r.face=t,r.Rc=i,r.ec=null,r.Lc=null}else r=new e(t,i);t.Ya.push(r),null!==(t=i.Pb)&&(t.Lc=r),r.ec=t,i.Pb=r};for(var n=Array(2e3),i=0;i<n.length;i++)n[i]=new e(null,null);var r=Array(1e3);for(i=0;i<r.length;i++)r[i]={la:Array(3),J:Array(3),Ha:{x:0,y:0,z:0},Ya:[],visible:!1}},k=new function(){function e(e,t,n,i,r,o,a,s){var u=(e-n)*(o-s)-(t-i)*(r-a);if(!(1e-12>Math.abs(u)))return{x:((e*i-t*n)*(r-a)-(e-n)*(r*s-o*a))/u,y:((e*i-t*n)*(o-s)-(t-i)*(r*s-o*a))/u}}return this.i=function(t,n){for(var i=t[0],r=i.x,o=i.y,a=i.x,s=i.y,u=t.length-1;0<u;u--)i=t[u],r=Math.min(r,i.x),o=Math.min(o,i.y),a=Math.max(a,i.x),s=Math.max(s,i.y);if(!(a-r<3*n||s-o<3*n)){e:{for(null==(i=!0)&&(i=!1),r=[],o=t.length,a=0;a<=o;a++){s=t[a%o],u=t[(a+1)%o];var l=t[(a+2)%o],c=u.x-s.x,h=u.y-s.y,f=Math.sqrt(c*c+h*h),d=n*c/f,p=n*h/f;if(c=l.x-u.x,h=l.y-u.y,c=n*c/(f=Math.sqrt(c*c+h*h)),h=n*h/f,(s=e(s.x-p,s.y+d,u.x-p,u.y+d,u.x-h,u.y+c,l.x-h,l.y+c))&&(r.push(s),l=r.length,i&&3<=l&&(s=r[l-3],u=r[l-2],l=r[l-1],0>(u.x-s.x)*(l.y-s.y)-(l.x-s.x)*(u.y-s.y)))){i=void 0;break e}}r.shift(),i=3>r.length?void 0:r}if(!i)e:{for(r=t.slice(0),i=0;i<t.length;i++){if(a=t[i%t.length],l=(u=t[(i+1)%t.length]).x-a.x,o=u.y-a.y,l=n*l/(s=Math.sqrt(l*l+o*o)),s=n*o/s,o=a.x-s,a=a.y+l,s=u.x-s,l=u.y+l,0!=r.length){for(p=o-s,h=a-l,d=[],c=f=!0,u=0;u<r.length;u++){var g=p*(a-r[u].y)-(o-r[u].x)*h;1e-12>=g&&-1e-12<=g&&(g=0),d.push(g),0<g&&(f=!1),0>g&&(c=!1)}if(f)r=[];else if(!c){for(p=[],u=0;u<r.length;u++)h=(u+1)%r.length,f=d[u],c=d[h],0<=f&&p.push(r[u]),(0<f&&0>c||0>f&&0<c)&&p.push(e(r[u].x,r[u].y,r[h].x,r[h].y,o,a,s,l));r=p}}if(3>r.length){i=void 0;break e}}i=r}return i}},this},z=new function(){function e(e){for(var t=e[0].x,n=e[0].y,i=t,r=n,o=1;o<e.length;o++){var a=e[o];t=Math.min(t,a.x),n=Math.min(n,a.y),i=Math.max(i,a.x),r=Math.max(r,a.y)}return[{x:t+2*(e=i-t),y:n+2*(r-=n),w:0},{x:t+2*e,y:n-2*r,w:0},{x:t-2*e,y:n+2*r,w:0}]}this.i=function(t,n){function i(e){var t=[e[0]],n=e[0][0],i=e[0][1],r=e.length,o=1;e:for(;o<r;o++)for(var a=1;a<r;a++){var s=e[a];if(null!==s){if(s[1]===n){if(t.unshift(s),n=s[0],e[a]=null,t.length===r)break e;continue}if(s[0]===i&&(t.push(s),i=s[1],e[a]=null,t.length===r))break e}}return t[0][0]!=t[r-1][1]&&t.push([t[r-1][1],t[0][0]]),t}function r(e,t,n,i){var r,o,a=[],s=[],u=n.length,l=t.length,c=0,h=-1,f=-1,d=i;for(i=0;i<u;i++){var p=(d+1)%u,g=n[d][0],b=n[p][0];if(1e-12<M.i(g.ea,b.ea))if(g.jb&&b.jb){var v=[],m=[];for(r=0;r<l;r++){var y=(c+1)%l;if((o=M.T(t[c],t[y],g.ea,b.ea,!1))&&(m.push(c),2===v.push(o)))break;c=y}if(2===v.length){if(r=v[1],g=(o=M.i(g.ea,v[0]))<(r=M.i(g.ea,r))?0:1,o=o<r?1:0,r=m[g],-1===h&&(h=r),-1!==f)for(;r!=f;)f=(f+1)%l,a.push(t[f]),s.push(null);a.push(v[g],v[o]),s.push(n[d][2],null),f=m[o]}}else if(g.jb&&!b.jb)for(r=0;r<l;r++){if(y=(c+1)%l,o=M.T(t[c],t[y],g.ea,b.ea,!1)){if(-1!==f)for(v=f;c!=v;)v=(v+1)%l,a.push(t[v]),s.push(null);a.push(o),s.push(n[d][2]),-1===h&&(h=c);break}c=y}else if(!g.jb&&b.jb)for(r=0;r<l;r++){if(y=(c+1)%l,o=M.T(t[c],t[y],g.ea,b.ea,!1)){a.push(g.ea,o),s.push(n[d][2],null),f=c;break}c=y}else a.push(g.ea),s.push(n[d][2]);d=p}if(0==a.length)s=a=null;else if(-1!==f)for(;h!=f;)f=(f+1)%l,a.push(t[f]),s.push(null);e.C=a,e.J=s}if(1===t.length)t[0].C=n.slice(0),t[0].J=[];else{var o,a=e(n),s=[];for(o=0;o<a.length;o++){var u=a[o];s.push({x:u.x,y:u.y,z:u.x*u.x+u.y*u.y-u.w})}for(o=0;o<t.length;o++)(u=t[o]).C=null,s.push({x:u.x,y:u.y,z:u.x*u.x+u.y*u.y-u.w});var l=T.i(s).pe;for(function(){for(o=0;o<l.length;o++){var e=l[o],t=e.la,n=t[0],i=t[1],r=t[2];t=n.x;var a=n.y;n=n.z;var s=i.x,u=i.y;i=i.z;var c=r.x,h=r.y;r=r.z;var f=t*(u-h)+s*(h-a)+c*(a-u);e.ea={x:-(a*(i-r)+u*(r-n)+h*(n-i))/f/2,y:-(n*(s-c)+i*(c-t)+r*(t-s))/f/2}}}(),function(e){for(o=0;o<l.length;o++){var t=l[o];t.jb=!M.sa(e,t.ea)}}(n),s=function(e,t){var n,i=Array(t.length);for(n=0;n<i.length;n++)i[n]=[];for(n=0;n<e.length;n++){var r=e[n];if(!(0>r.Ha.z))for(var o=r.J,a=0;a<o.length;a++){var s=o[a];if(!(0>s.Ha.z)){var u=r.la,l=u[(a+1)%3].index;u=u[a].index,2<l&&i[l-3].push([r,s,2<u?t[u-3]:null])}}}return i}(l,t),o=0;o<t.length;o++)if(0!==(u=s[o]).length){var c=t[o],h=(u=i(u)).length,f=-1;for(a=0;a<h;a++)u[a][0].jb&&(f=a);if(0<=f)r(c,n,u,f);else{f=[];var d=[];for(a=0;a<h;a++)1e-12<M.i(u[a][0].ea,u[(a+1)%h][0].ea)&&(f.push(u[a][0].ea),d.push(u[a][2]));c.C=f,c.J=d}c.C&&3>c.C.length&&(c.C=null,c.J=null)}}},this.u=function(t,n){var i,r=!1,o=t.length;for(i=0;i<o;i++){var a=t[i];null===a.C&&(r=!0),a.Yd=a.w}if(r){r=e(n);var s=[];for(i=t.length,a=0;a<r.length;a++){var u=r[a];s.push({x:u.x,y:u.y,z:u.x*u.x+u.y*u.y})}for(a=0;a<i;a++)u=t[a],s.push({x:u.x,y:u.y,z:u.x*u.x+u.y*u.y});for(u=T.i(s).pe,r=Array(i),a=0;a<i;a++)r[a]={};for(s=u.length,a=0;a<s;a++){var l=u[a];if(0<l.Ha.z){var c=l.la,h=c.length;for(l=0;l<h-1;l++){var f=c[l].index-3,d=c[l+1].index-3;0<=f&&0<=d&&(r[f][d]=!0,r[d][f]=!0)}l=c[0].index-3,0<=d&&0<=l&&(r[d][l]=!0,r[l][d]=!0)}}for(a=0;a<i;a++){for(var p in l=r[a],u=t[a],d=Number.MAX_VALUE,s=null,l)l=t[p],d>(c=M.i(u,l))&&(d=c,s=l);u.wj=s,u.Ze=Math.sqrt(d)}for(i=0;i<o;i++)a=t[i],p=Math.min(Math.sqrt(a.w),.95*a.Ze),a.w=p*p;for(this.i(t,n),i=0;i<o;i++)(a=t[i]).Yd!==a.w&&0<a.kc&&(n=Math.min(a.kc,a.Yd-a.w),a.w+=n,a.kc-=n)}}},D=new function(){this.H=function(e){for(var t=0,n=(e=e.m).length,i=0;i<n;i++){var r=e[i];if(r.C){var o=r.x,a=r.y;M.u(r.C,r),t<(r=(0<(o-=r.x)?o:-o)+(0<(r=a-r.y)?r:-r))&&(t=r)}}return t},this.i=function(e,t){var n=e.m;switch(t){case"random":return e.m[Math.floor(n.length*Math.random())];case"topleft":var i=(e=n[0]).x+e.y;for(t=1;t<n.length;t++){var r=n[t],o=r.x+r.y;o<i&&(i=o,e=r)}return e;case"bottomright":for(i=(e=n[0]).x+e.y,t=1;t<n.length;t++)(o=(r=n[t]).x+r.y)>i&&(i=o,e=r);return e;default:for(r=n[0],i=o=M.i(e,r),t=n.length-1;1<=t;t--){var a=n[t];(o=M.i(e,a))<i&&(i=o,r=a)}return r}},this.u=function(e,t,n){var i=e.m;if(i[0].J){var r,o=i.length;for(e=0;e<o;e++)i[e].Sc=!1,i[e].Zb=0;var a=r=0;for((o=[])[r++]=t||i[0],t=t.Zb=0;a<r;)if(!(i=o[a++]).Sc&&i.J){n(i,t++,i.Zb),i.Sc=!0;var s=i.J,u=s.length;for(e=0;e<u;e++){var l=s[e];l&&!0!==l.Sc&&(0===l.Zb&&(l.Zb=i.Zb+1),o[r++]=l)}}}else for(e=0;e<i.length;e++)n(i[e],e,1)}},B=function(){function e(e,r,u,l,c,d,p,g){var b=y.extend({},a,e);1>e.lineHeight&&(e.lineHeight=1),e=b.fontFamily;var v=b.fontStyle+" "+b.fontVariant+" "+b.fontWeight,m=b.hb,C=b.Gc,w=v+" "+e;b.te=w;var _={ka:!1,bc:0,fontSize:0};if(r.save(),r.font=v+" 100px "+e,r.textBaseline="middle",r.textAlign="center",function(e,t){t=t.te;var n=s[t];void 0===n&&(n={},s[t]=n),n[" "]=e.measureText(" ").width,n["…"]=e.measureText("…").width}(r,b),u=u.trim(),h.text=u,function(e,t,n,i){for(var r,o,a=0;a<e.length;a++)e[a].y===t.y&&(void 0===r?r=a:o=a);void 0===o&&(o=r),r!==o&&e[o].x<e[r].x&&(a=r,r=o,o=a),i.C=e,i.F=t,i.cd=n,i.Xe=r,i.Ye=o}(l,c,d,f),/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/.test(u)?(n(h),t(r,h,w),i(b,h,f,C,m,!0,_)):(t(r,h,w),i(b,h,f,C,m,!1,_),!_.ka&&(p&&(n(h),t(r,h,w)),g||p)&&(g&&(_.Ub=!0),i(b,h,f,C,C,!0,_))),_.ka){var x="",A=0,S=Number.MAX_VALUE,M=Number.MIN_VALUE;o(b,h,_.bc,_.fontSize,f,_.Ub,(function(e,t){0<x.length&&" "===t&&(x+=" "),x+=e}),(function(e,t,n,i,o){"­"===i&&(x+="‐"),r.save(),r.translate(d.x,t),e=_.fontSize/100,r.scale(e,e),r.fillText(x,0,0),r.restore(),x=n,A<o&&(A=o),S>t&&(S=t),M<t&&(M=t)})),_.box={x:d.x-A/2,y:S-_.fontSize/2,w:A,o:M-S+_.fontSize},r.restore()}else r.clear&&r.clear();return _}function t(e,t,n){var i,r=t.text.split(/(\n|[ \f\r\t\v\u2028\u2029]+|\u00ad+|\u200b+)/),o=[],a=[],u=r.length>>>1;for(i=0;i<u;i++)o.push(r[2*i]),a.push(r[2*i+1]);for(2*i<r.length&&(o.push(r[2*i]),a.push(void 0)),n=s[n],i=0;i<o.length;i++)void 0===(u=n[r=o[i]])&&(u=e.measureText(r).width,n[r]=u);t.Tc=o,t.Qf=a}function n(e){for(var t=e.text.split(/\s+/),n=[],i={".":!0,",":!0,";":!0,"?":!0,"!":!0,":":!0,"。":!0},r=0;r<t.length;r++){var o=t[r];if(3<o.length){var a="";a+=o.charAt(0),a+=o.charAt(1);for(var s=2;s<o.length-2;s++){var u=o.charAt(s);i[u]||(a+="​"),a+=u}a+="​",a+=o.charAt(o.length-2),a+=o.charAt(o.length-1),n.push(a)}else n.push(o)}e.text=n.join(" ")}function i(e,t,n,i,r,a,s){var u=e.lineHeight,l=Math.max(e.Ua,.001),c=e.ib,h=t.Tc,f=n.cd,d=n.F,p=void 0,g=void 0;switch(e.verticalAlign){case"top":f=d.y+d.o-f.y;break;case"bottom":f=f.y-d.y;break;default:f=2*Math.min(f.y-d.y,d.y+d.o-f.y)}if(!(0>=(c=Math.min(f,c*n.F.o)))){f=i,r=Math.min(r,c),d=Math.min(1,c/Math.max(20,t.Tc.length));do{var b=(f+r)/2,v=Math.min(h.length,Math.floor((c+b*(u-1-2*l))/(b*u))),m=void 0;if(0<v)for(var y=1,C=v;;){var w=Math.floor((y+C)/2);if(o(e,t,w,b,n,a&&b===i&&w===v,null,null)){if(y===(C=p=m=w))break}else if((y=w+1)>C)break}void 0!==m?f=g=b:r=b}while(r-f>d);return void 0===g?(s.ka=!1,s.fontSize=0):(s.ka=!0,s.fontSize=g,s.bc=p,s.Ub=a&&b===f),s}s.ka=!1}function o(e,t,n,i,r,o,a,h){var f=e.cb,d=i*(e.lineHeight-1),p=Math.max(e.Ua,.001),g=s[e.te],b=t.Tc;t=t.Qf;var v=r.C,m=r.cd,y=r.Xe,C=r.Ye;switch(e.verticalAlign){case"top":r=m.y+i/2+i*p;var w=1;break;case"bottom":r=m.y-(i*n+d*(n-1))+i/2-i*p,w=-1;break;default:r=m.y-(i*(n-1)/2+d*(n-1)/2),w=1}for(e=r,p=0;p<n;p++)u[2*p]=r-i/2,u[2*p+1]=r+i/2,r+=w*i,r+=w*d;for(;l.length<u.length;)l.push(Array(2));p=u,r=2*n,w=l;var _=v.length,x=y;y=(y-1+_)%_;var A=C;C=(C+1)%_;for(var S=0;S<r;){for(var M=p[S],T=v[y];T.y<M;)x=y,T=v[y=(y-1+_)%_];for(var k=v[C];k.y<M;)A=C,k=v[C=(C+1)%_];var z=v[x],D=v[A];k=D.x+(k.x-D.x)*(M-D.y)/(k.y-D.y),w[S][0]=z.x+(T.x-z.x)*(M-z.y)/(T.y-z.y),w[S][1]=k,S++}for(p=0;p<n;p++)v=2*p,w=(w=(r=m.x)-l[v][0])<(_=l[v][1]-r)?w:_,v=(_=r-l[v+1][0])<(v=l[v+1][1]-r)?_:v,c[p]=2*(w<v?w:v)-f*i;for(x=g[" "]*i/100,w=g["…"]*i/100,y=c[f=0],m=0,v=void 0,p=0;p<b.length;p++){if(r=b[p],A=t[p],m+(_=g[r]*i/100)<y&&b.length-p>=n-f&&"\n"!=v)m+=_," "===A&&(m+=x),a&&a(r,v);else{if(_>y&&(f!==n-1||!o))return!1;if(f+1>=n)return!!o&&(((n=y-m-w)>w||_>w)&&(0<(n=Math.floor(r.length*n/_))&&a&&a(r.substring(0,n),v)),a&&a("…",void 0),h&&h(f,e,r,v,m),!0);if(f++,h&&h(f,e,r,v,m),e+=i,e+=d,m=_," "===A&&(m+=x),_>(y=c[f])&&(f!==n||!o))return!1}v=A}return h&&h(f,e,void 0,void 0,m),!0}var a={hb:72,Gc:0,lineHeight:1.05,cb:1,Ua:.5,ib:.9,fontFamily:"sans-serif",fontStyle:"normal",fontWeight:"normal",fontVariant:"normal",verticalAlign:"center"},s={},u=[],l=[],c=[],h={text:"",Tc:void 0,Qf:void 0},f={C:void 0,F:void 0,cd:void 0,Xe:0,Ye:0};return{re:e,de:function(t,n,i,r,o,a,s,u,l,c,h,f){var d=0,p=0;if(i=i.toString().trim(),!f&&l.result&&i===l.Xf&&Math.abs(c-l.Zd)/c<=h){var g=l.result;g.ka&&(d=a.x-l.eg,p=a.y-l.fg,h=l.Qc,n.save(),n.translate(d,p),h.Na(n),n.restore())}return g||((h=l.Qc).clear(),(g=e(t,h,i,r,o,a,s,u)).ka&&h.Na(n),l.Zd=c,l.eg=a.x,l.fg=a.y,l.result=g,l.Xf=i),g.ka?{ka:!0,bc:g.bc,fontSize:g.fontSize,box:{x:g.box.x+d,y:g.box.y+p,w:g.box.w,o:g.box.o},Ub:g.Ub}:{ka:!1}},Zh:function(){return{Zd:0,eg:0,fg:0,result:void 0,Qc:new r,Xf:void 0}},ya:a}}(),L=new function(){function e(e,t){return function(i,r,o,a){function s(e,t,n,i,r){e.C=[{x:t,y:n},{x:t+i,y:n},{x:t+i,y:n+r},{x:t,y:n+r}]}var u=r.x,l=r.y,c=r.w;if(r=r.o,0!=i.length)if(1==i.length)i[0].x=u+c/2,i[0].y=l+r/2,i[0].nd=0,o&&s(i[0],u,l,c,r);else{i=i.slice(0);for(var h=0,f=0;f<i.length;f++)h+=i[f].weight;for(h=c*r/h,f=0;f<i.length;f++)i[f].lc=i[f].weight*h;(function e(i,r,a,u,l){if(0!=i.length){var c=i.shift(),h=n(c);if(t(u,l)){var f=r,d=h/u;do{var p=(h=c.shift()).lc,g=p/d,b=a,v=d;(p=h).x=f+g/2,p.y=b+v/2,o&&s(h,f,a,g,d),f+=g}while(0<c.length);return e(i,r,a+d,u,l-d)}f=a,g=h/l;do{b=f,v=d=(p=(h=c.shift()).lc)/g,(p=h).x=r+g/2,p.y=b+v/2,o&&s(h,r,f,g,d),f+=d}while(0<c.length);return e(i,r+g,a,u-g,l)}})(a=e(i,c,r,[[i.shift()]],a),u,l,c,r)}}}function t(e,t,i,r){function o(e){return Math.max(Math.pow(u*e/s,i),Math.pow(s/(u*e),r))}var a=n(e),s=a*a,u=t*t;for(t=o(e[0].lc),a=1;a<e.length;a++)t=Math.max(t,o(e[a].lc));return t}function n(e){for(var t=0,n=0;n<e.length;n++)t+=e[n].lc;return t}this.u=e((function(e,i,r,o,a){for(var s=1/(a=Math.pow(2,a)),u=i<r;0<e.length;){var l=o[o.length-1],c=e.shift(),h=u?i:r,f=u?a:s,d=u?s:a,p=t(l,h,f,d);l.push(c),p<(h=t(l,h,f,d))&&(l.pop(),o.push([c]),u?r-=n(l)/i:i-=n(l)/r,u=i<r)}return o}),(function(e,t){return e<t})),this.i=e((function(e,n,i,r,o){function a(e){if(1<r.length){for(var i=r[r.length-1],o=r[r.length-2].slice(0),a=0;a<i.length;a++)o.push(i[a]);t(o,n,s,u)<e&&r.splice(-2,2,o)}}for(var s=Math.pow(2,o),u=1/s;0<e.length;){if(o=t(i=r[r.length-1],n,s,u),0==e.length)return;var l=e.shift();i.push(l),o<t(i,n,s,u)&&(i.pop(),a(o),r.push([l]))}return a(t(r[r.length-1],n,s,u)),r}),(function(){return!0}))};function E(e){var t,n={},i=e.Cd;e.j.subscribe("model:loaded",(function(e){t=e})),this.M=function(){e.j.D("api:initialized",this)},this.nc=function(e,t,r,o){this.Xc(n,t),this.Yc(n,t),this.Wc(n,t,!1),o&&o(n),e(i,n,r)},this.bd=function(e,n,i,r,o,a,s){if(e){for(e=n.length-1;0<=e;e--){var u=n[e],l=y.extend({group:u.group},o);l[i]=r(u),a(l)}0<n.length&&s(y.extend({groups:S.uc(t,r).map((function(e){return e.group}))},o))}},this.Yc=function(e,t){return e.selected=t.selected,e.hovered=t.ub,e.open=t.open,e.openness=t.Cb,e.exposed=t.U,e.exposure=t.ja,e.transitionProgress=t.ra,e.revealed=!t.aa.Ga(),e.browseable=t.Ia?t.R:void 0,e.visible=t.Y,e.labelDrawn=t.oa&&t.oa.ka,e},this.Xc=function(e,t){var n=t.parent;return e.group=t.group,e.parent=n&&n.group,e.weightNormalized=t.cg,e.level=t.level-1,e.siblingCount=n&&n.m.length,e.hasChildren=!t.empty(),e.index=t.index,e.indexByWeight=t.nd,e.description=t.description,e.attribution=t.attribution,e},this.Wc=function(e,t,n){if(e.polygonCenterX=t.O.x,e.polygonCenterY=t.O.y,e.polygonArea=t.O.ha,e.boxLeft=t.F.x,e.boxTop=t.F.y,e.boxWidth=t.F.w,e.boxHeight=t.F.o,t.oa&&t.oa.ka){var i=t.oa.box;e.labelBoxLeft=i.x,e.labelBoxTop=i.y,e.labelBoxWidth=i.w,e.labelBoxHeight=i.o,e.labelFontSize=t.oa.fontSize}return n&&t.$&&(e.polygon=t.$.map((function(e){return{x:e.x,y:e.y}})),e.neighbors=t.J&&t.J.map((function(e){return e&&e.group}))),e}}var j=new function(){var e=window.console;this.i=function(e){throw"FoamTree: "+e},this.info=function(t){e.info("FoamTree: "+t)},this.warn=function(t){e.warn("FoamTree: "+t)}};function O(e){function t(t,i){t.m=[],t.Ea=!0;var o=r(i),a=0;if(("flattened"===e.mb||"always"===e.zg&&t.group&&t.group.description)&&0<i.length&&0<t.level){var s=i.reduce((function(e,t){return e+y.I(t.weight,1)}),0),u=n(t.group,!1);u.description=!0,u.weight=s*e.Sb,u.index=a++,u.parent=t,u.level=t.level+1,u.id=u.id+"_d",t.m.push(u)}for(s=0;s<i.length;s++){var l=i[s];if(0>=(u=y.I(l.weight,1))){if(!e.Wi)continue;u=.9*o}(l=n(l,!0)).weight=u,l.index=a,l.parent=t,l.level=t.level+1,t.m.push(l),a++}}function n(e,t){var n=new ee;return i(e),n.id=e.__id,n.group=e,t&&(l[e.__id]=n),n}function i(e){y.has(e,"__id")||(Object.defineProperty(e,"__id",{enumerable:!1,configurable:!1,writable:!1,value:u}),u++)}function r(e){for(var t=Number.MAX_VALUE,n=0;n<e.length;n++){var i=e[n].weight;0<i&&t>i&&(t=i)}return t===Number.MAX_VALUE&&(t=1),t}function o(e){if(!e.empty()){var t,n=0;for(t=(e=e.m).length-1;0<=t;t--){var i=e[t].weight;n<i&&(n=i)}for(t=e.length-1;0<=t;t--)(i=e[t]).cg=i.weight/n}}function a(e){if(!e.empty()){e=e.m.slice(0).sort((function(e,t){return e.weight<t.weight?1:e.weight>t.weight?-1:e.index-t.index}));for(var t=0;t<e.length;t++)e[t].nd=t}}function s(){for(var t=p.m.reduce((function(e,t){return e+t.weight}),0),n=0;n<p.m.length;n++){var i=p.m[n];i.attribution&&(i.weight=Math.max(.025,e.sg)*t)}}var u,l,c,h,f,d=this,p=new ee;this.M=function(){return p},this.T=function(n){var i=n.group.groups,r=e.Rh;return!!(!n.m&&!n.description&&i&&0<i.length&&f+i.length<=r)&&(f+=i.length,t(n,i),o(n),a(n),!0)},this.load=function(e){p.group=e,p.xa=!1,p.R=!1,p.Ia=!1,p.open=!0,p.Cb=1,u=function e(t,n){if(!t)return n;if(n=Math.max(n,t.__id||0),(t=t.groups)&&0<t.length)for(var i=t.length-1;0<=i;i--)n=e(t[i],n);return n}(e,0)+1,l={},c={},h={},f=0,e&&(i(e),l[e.__id]=p,y.V(e.id)||(c[e.id]=e),function e(t){var n=t.groups;if(n)for(var r=0;r<n.length;r++){var o=n[r];i(o);var a=o.__id;l[a]=null,h[a]=t,a=o.id,y.V(a)||(c[a]=o),e(o)}}(e)),t(p,e&&e.groups||[]),function(e){if(!e.empty()){var t=n({attribution:!0});t.index=e.m.length,t.parent=e,t.level=e.level+1,t.attribution=!0,e.m.push(t)}}(p),o(p),s(),a(p)},this.update=function(e){e.forEach((function(e){S.za(e,(function(e){if(!e.empty())for(var t=r((e=e.m).map((function(e){return e.group}))),n=0;n<e.length;n++){var i=e[n];i.weight=0<i.group.weight?i.group.weight:.9*t}})),o(e),e===p&&s(),a(e)}))},this.u=function(e){return function(){if(y.V(e)||y.Re(e))return[];if(Array.isArray(e))return e.map(d.i,d);if(y.wb(e)){if(y.has(e,"__id"))return[d.i(e)];if(y.has(e,"all")){var t=[];return S.L(p,(function(e){t.push(e)})),t}if(y.has(e,"groups"))return d.u(e.groups)}return[d.i(e)]}().filter((function(e){return void 0!==e}))},this.i=function(e){if(y.wb(e)&&y.has(e,"__id")){if(e=e.__id,y.has(l,e)){if(null===l[e]){for(var t=h[e],n=[];t&&(t=t.__id,n.push(t),!l[t]);)t=h[t];for(t=n.length-1;0<=t;t--)this.T(l[n[t]])}return l[e]}}else if(y.has(c,e))return this.i(c[e])},this.H=function(e,t,n){return{m:d.u(e),Ca:y.I(e&&e[t],!0),Ba:y.I(e&&e.keepPrevious,n)}}}function I(e,t,n){var i={};t.Ba&&S.L(e,(function(e){n(e)&&(i[e.id]=e)})),e=t.m,t=t.Ca;for(var r=e.length-1;0<=r;r--){var o=e[r];i[o.id]=t?o:void 0}var a=[];return y.Aa(i,(function(e){void 0!==e&&a.push(e)})),a}function N(e){function t(e,t){e=e.ja,t.opacity=1,t.Da=1,t.va=0>e?1-A.Ch/100*e:1,t.saturation=0>e?1-A.Dh/100*e:1,t.ca=0>e?1+.5*e:1}function n(e){return e=e.ja,Math.max(.001,0===e?1:1+e*(A.Pa-1))}function i(t,n,i,u){var l=o();if(0===t.length&&!l)return(new h).resolve().promise();var v=t.reduce((function(e,t){return e[t.id]=!0,e}),{}),y=[];if(t=[],C.reduce((function(e,t){return e||v[t.id]&&(!t.U||1!==t.ja)||!v[t.id]&&!t.parent.U&&(t.U||-1!==t.ja)}),!1)){var M=[],T={};C.forEach((function(e){v[e.id]&&(e.U||y.push(e),e.U=!0,S.za(e,(function(e){M.push(a(e,1)),T[e.id]=!0})))})),0<M.length?(S.L(c,(function(e){v[e.id]||(e.U&&y.push(e),e.U=!1),T[e.id]||M.push(a(e,-1))})),t.push(b.K.A({}).Qa(M).call(s).Ta()),r(v),t.push(function(t){return t||!g.zd()?b.K.A(d).fa({duration:.7*A.Oa,P:{x:{end:w.x+w.w/2,easing:m.ia(A.Wb)},y:{end:w.y+w.o/2,easing:m.ia(A.Wb)}},ba:function(){e.j.D("foamtree:dirty",!0)}}).Ta():(d.x=w.x+w.w/2,d.y=w.y+w.o/2,(new h).resolve().promise())}(l)),i&&(g.ic(w,A.Yb,A.Oa,m.ia(A.Wb)),g.Fb())):(t.push(function(e){var t=[],n=[];return S.L(c,(function(e){0!==e.ja&&n.push(a(e,0,(function(){this.U=!1})))})),t.push(b.K.A({}).Qa(n).Ta()),g.content(0,0,_,x),e&&(t.push(g.reset(A.Oa,m.ia(A.Wb))),g.Fb()),f(t)}(i)),n&&S.L(c,(function(e){e.U&&y.push(e)})))}return f(t).then((function(){p.bd(n,y,"exposed",(function(e){return e.U}),{indirect:u},e.options.hf,e.options.gf)}))}function r(e){C.reduce(u(!0,void 0,(function(t){return t.U||e[t.id]})),l(w)),w.x-=w.w*(A.Pa-1)/2,w.y-=w.o*(A.Pa-1)/2,w.w*=A.Pa,w.o*=A.Pa}function o(){return!!C&&C.reduce((function(e,t){return e||0!==t.ja}),!1)}function a(n,i,r){var o=b.K.A(n);return 0===n.ja&&0!==i&&o.call((function(){this.mc(M),this.qb(t)})),o.fa({duration:A.Oa,P:{ja:{end:i,easing:m.ia(A.Wb)}},ba:function(){c.N=!0,c.Fa=!0,e.j.D("foamtree:dirty",!0)}}),0===i&&o.call((function(){this.vd(),this.cc(),this.Nc(M),this.Mc(t)})),o.call(r).done()}function s(){var e=c.m.reduce(u(!1,M.transformPoint,void 0),l({})).box,t=A.Yb,n=Math.min(e.x,w.x-w.w*t),i=Math.min(e.y,w.y-w.o*t);g.content(n,i,Math.max(e.x+e.w,w.x+w.w*(1+t))-n,Math.max(e.y+e.o,w.y+w.o*(1+t))-i)}function u(e,t,n){var i={};return function(r,o){if(!n||n(o)){for(var a,s=e&&o.$||o.C,u=s.length-1;0<=u;u--)a=void 0!==t?t(o,s[u],i):s[u],r.Hc=Math.min(r.Hc,a.x),r.wd=Math.max(r.wd,a.x),r.Ic=Math.min(r.Ic,a.y),r.xd=Math.max(r.xd,a.y);r.box.x=r.Hc,r.box.y=r.Ic,r.box.w=r.wd-r.Hc,r.box.o=r.xd-r.Ic}return r}}function l(e){return{Hc:Number.MAX_VALUE,wd:Number.MIN_VALUE,Ic:Number.MAX_VALUE,xd:Number.MIN_VALUE,box:e}}var c,d,p,g,b,v,C,w,_,x,A=e.options,M={Ve:function(e,t){return t.scale=n(e),!1},Ib:function(e,t){e=n(e);var i=d.x,r=d.y;t.translate(i,r),t.scale(e,e),t.translate(-i,-r)},Jb:function(e,t,i){e=n(e);var r=d.x,o=d.y;i.x=(t.x-r)/e+r,i.y=(t.y-o)/e+o},transformPoint:function(e,t,i){e=n(e);var r=d.x,o=d.y;return i.x=(t.x-r)*e+r,i.y=(t.y-o)*e+o,i}};e.j.subscribe("stage:initialized",(function(e,t,n,i){d={x:n/2,y:i/2},w={x:0,y:0,w:_=n,o:x=i}})),e.j.subscribe("stage:resized",(function(e,t,n,i){d.x*=n/e,d.y*=i/t,_=n,x=i})),e.j.subscribe("api:initialized",(function(e){p=e})),e.j.subscribe("zoom:initialized",(function(e){g=e})),e.j.subscribe("model:loaded",(function(e,t){c=e,C=t})),e.j.subscribe("model:childrenAttached",(function(e){C=e})),e.j.subscribe("timeline:initialized",(function(e){b=e})),e.j.subscribe("openclose:initialized",(function(e){v=e}));var T=["groupExposureScale","groupUnexposureScale","groupExposureZoomMargin"];e.j.subscribe("options:changed",(function(e){y.bb(e,T)&&o()&&(r({}),g.cj(w,A.Yb),g.Fb())})),this.M=function(){e.j.D("expose:initialized",this)},this.Vb=function(e,t,n,r){var o=e.m.reduce((function(e,t){for(;t=t.parent;)e[t.id]=!0;return e}),{}),a=I(c,e,(function(e){return e.U&&!e.open&&!o[e.id]})),s=new h;return function(e,t){for(var n=e.reduce((function(e,t){return e[t.id]=t,e}),{}),i=e.length-1;0<=i;i--)S.L(e[i],(function(e){n[e.id]=void 0}));var r=[];y.Aa(n,(function(e){e&&S.me(e,(function(e){e.open||r.push(e)}))}));var o=[];return y.Aa(n,(function(e){e&&e.open&&o.push(e)})),e=[],0!==r.length&&e.push(v.Bb({m:r,Ca:!0,Ba:!0},t,!0)),f(e)}(a,t).then((function(){i(a.filter((function(e){return e.C&&e.$})),t,n,r).then(s.resolve)})),s.promise()}}function P(e){var t,n,i=[],r=new d(y.qa);e.j.subscribe("stage:initialized",(function(){})),e.j.subscribe("stage:resized",(function(){})),e.j.subscribe("stage:newLayer",(function(e,t){i.push(t)})),e.j.subscribe("model:loaded",(function(e){t=e,r.clear()})),e.j.subscribe("zoom:initialized",(function(){})),e.j.subscribe("timeline:initialized",(function(e){n=e}));var o=!1;e.j.subscribe("render:renderers:resolved",(function(e){o=e.labelPlainFill||!1}));var a=new function(){var e=0,t=0,n=0,i=0,r=0,o=0;this.i=function(a,s,u,l,c){t=1-(e=1+s),n=u,i=l,r=c,o=a},this.Ve=function(o,a){return a.scale=e+t*o.ra,0!==r||0!==n||0!==i},this.Ib=function(a,s){var u=e+t*a.ra,l=a.parent,c=o*a.x+(1-o)*l.x,h=o*a.y+(1-o)*l.y;s.translate(c,h),s.scale(u,u),a=1-a.ra,s.rotate(r*Math.PI*a),s.translate(-c,-h),s.translate(l.F.w*n*a,l.F.o*i*a)},this.Jb=function(r,a,s){var u=e+t*r.ra,l=o*r.x+(1-o)*r.parent.x,c=o*r.y+(1-o)*r.parent.y,h=1-r.ra;r=r.parent,s.x=(a.x-l)/u+l-r.F.w*n*h,s.y=(a.y-c)/u+c-r.F.o*i*h},this.transformPoint=function(r,a,s){var u=e+t*r.ra,l=o*r.x+(1-o)*r.parent.x,c=o*r.y+(1-o)*r.parent.y,h=1-r.ra;r=r.parent,s.x=(a.x-l)*u+l-r.F.w*n*h,s.y=(a.y-c)*u+c-r.F.o*i*h}};this.M=function(){},this.u=function(){function i(e,t){var n=Math.min(1,Math.max(0,e.ra));t.opacity=n,t.va=1,t.saturation=n,t.Da=n,t.ca=e.yb}function s(e,t){var n=Math.min(1,Math.max(0,e.Hd));t.opacity=n,t.Da=n,t.va=1,t.saturation=1,t.ca=e.yb}var u=e.options,l=u.Gd,c=u.ii,h=u.ji,f=u.ki,d=u.ei,p=u.fi,g=u.gi,b=u.ai,v=u.bi,y=u.ci,C=d+p+g+b+v+y+c+h+f,w=0<C?l/C:0,_=[];return r.initial()?a.i(u.oi,u.mi,u.pi,u.ri,u.li):a.i(u.Mf,u.Lf,u.Nf,u.Of,u.Kf),D.u(t,D.i(t,e.options.ni),(function(t,r,l){var C="groups"===e.options.hi?l:r;_.push(n.K.A(t).call((function(){this.qb(i)})).wait(o?w*(d+C*p):0).fa({duration:o?w*g:0,P:{yb:{end:0,easing:m.Ab}},ba:function(){this.N=!0,e.j.D("foamtree:dirty",!0)}}).done()),S.L(t,(function(t){_.push(n.K.A(t).call((function(){this.mc(a),this.qb(s)})).wait(w*(b+v*C)).fa({duration:w*y,P:{Hd:{end:0,easing:m.Ab}},ba:function(){this.N=!0,e.j.D("foamtree:dirty",!0)}}).Xa((function(){this.selected=!1,this.Nc(a)})).done())})),_.push(n.K.A(t).call((function(){this.mc(a)})).wait(w*(c+h*C)).fa({duration:w*f,P:{ra:{end:0,easing:m.ia(u.di)}},ba:function(){this.N=!0,e.j.D("foamtree:dirty",!0)}}).Xa((function(){this.selected=!1,this.Nc(a)})).done())})),n.K.A({}).Qa(_).Ta()},this.i=function(t){return function(t){function i(e,t){var n=Math.min(1,Math.max(0,e.ra));t.opacity=n,t.va=1,t.saturation=n,t.Da=n,t.ca=e.yb}var s=e.options,u=s.Ri,l=s.Si,c=s.Oi,f=s.Pi,d=s.Qi,p=s.Od,g=u+l+c+f+d,b=0<g?p/g:0,v=[];if(a.i(s.Mf,s.Lf,s.Nf,s.Of,s.Kf),0===b&&t.m&&t.R){for(p=t.m,g=0;g<p.length;g++){var y=p[g];y.ra=1,y.yb=1,y.qb(i),y.cc(),y.Mc(i)}return t.N=!0,e.j.D("foamtree:dirty",0<b),(new h).resolve().promise()}if(t.m&&t.R){D.u(t,D.i(t,e.options.Qd),(function(t,r,h){t.mc(a),t.qb(i),h="groups"===e.options.Pd?h:r,r=n.K.A(t).wait(h*b*u).fa({duration:b*l,P:{ra:{end:1,easing:m.ia(s.Ni)}},ba:function(){this.N=!0,e.j.D("foamtree:dirty",0<b)}}).done(),h=n.K.A(t).wait(o?b*(c+h*f):0).fa({duration:o?b*d:0,P:{yb:{end:1,easing:m.Ab}},ba:function(){this.N=!0,e.j.D("foamtree:dirty",0<b)}}).done(),t=n.K.A(t).Qa([r,h]).Xd().Xa((function(){this.vd(),this.cc(),this.Nc(a),this.Mc(i)})).done(),v.push(t)})),r.i();var C=new h;return n.K.A({}).Qa(v).call((function(){r.u(),C.resolve()})).start(),C.promise()}return(new h).resolve().promise()}(t)}}function F(e){function t(t,r,s){function u(e,t){t.opacity=1-e.Cb,t.va=1,t.saturation=1,t.ca=1,t.Da=1}var l=[],c=[];return S.L(o,(function(r){if(r.R&&r.X){var o=y.has(t,r.id),a=n[r.id];if(a&&a.xb())a.stop();else if(r.open===o)return;r.Va=o,o||(r.open=o,r.Bd=!1),c.push(r),l.push(function(t,r){t.qb(u);var o=i.K.A(t).fa({duration:e.options.Kc,P:{Cb:{end:r?1:0,easing:m.fe}},ba:function(){this.N=!0,e.j.D("foamtree:dirty",!0)}}).call((function(){this.open=r,t.Va=!1})).Xa((function(){this.cc(),this.Mc(u),delete n[this.id]})).done();return n[t.id]=o}(r,o))}})),0<l.length?(e.j.D("openclose:changing"),i.K.A({}).Qa(l).Ta().then((function(){a.bd(r,c,"open",(function(e){return e.open}),{indirect:s},e.options.rf,e.options.qf)}))):(new h).resolve().promise()}var n,i,r,o,a;e.j.subscribe("api:initialized",(function(e){a=e})),e.j.subscribe("model:loaded",(function(e){o=e,n={}})),e.j.subscribe("timeline:initialized",(function(e){i=e})),e.j.subscribe("expose:initialized",(function(e){r=e})),this.M=function(){e.j.D("openclose:initialized",this)},this.Bb=function(n,i,a){if("flattened"==e.options.mb)return(new h).resolve().promise();n=I(o,n,(function(e){return e.open||e.Va}));for(var s=new h,u=0;u<n.length;u++)n[u].Va=!0;0<n.length&&e.j.D("foamtree:attachChildren",n);var l=n.reduce((function(e,t){return e[t.id]=!0,e}),{});return function(e,t){var n,i=[];if(S.L(o,(function(t){if(t.m){var n=y.has(e,t.id);t.open!==n&&(n||t.U||S.L(t,(function(e){if(e.U)return i.push(t),!1})))}})),0===i.length)return(new h).resolve().promise();for(n=i.length-1;0<=n;n--)i[n].open=!1;for(t=r.Vb({m:i,Ca:!0,Ba:!0},t,!0,!0),n=i.length-1;0<=n;n--)i[n].open=!0;return t}(l,i).then((function(){t(l,i,a).then(s.resolve)})),s.promise()}}function R(e){var t,n;e.j.subscribe("api:initialized",(function(e){n=e})),e.j.subscribe("model:loaded",(function(e){t=e})),this.M=function(){e.j.D("select:initialized",this)},this.select=function(i,r){return function(i,r){var o;for(i=I(t,i,(function(e){return e.selected})),S.L(t,(function(e){!0===e.selected&&(e.selected=!e.selected,e.N=!e.N,e.Sa=!e.Sa)})),o=i.length-1;0<=o;o--){var a=i[o];a.selected=!a.selected,a.N=!a.N,a.Sa=!a.Sa}var s=[];S.L(t,(function(e){e.N&&s.push(e)})),0<s.length&&e.j.D("foamtree:dirty",!1),n.bd(r,s,"selected",(function(e){return e.selected}),{},e.options.tf,e.options.sf)}(i,r)}}function G(e){function n(e){return function(t){e.call(this,{x:t.x,y:t.y,scale:t.scale,ed:t.delta,ctrlKey:t.ctrlKey,metaKey:t.metaKey,altKey:t.altKey,shiftKey:t.shiftKey,lb:t.secondary,touches:t.touches})}}function i(){u.pc(2)?e.j.D("interaction:reset"):u.normalize(N.ob,m.ia(N.Kb))}function r(e){return function(){g.empty()||e.apply(this,arguments)}}function o(e,t,n){var i={},r={};return function(o){switch(e){case"click":var s=N.bf;break;case"doubleclick":s=N.cf;break;case"hold":s=N.jf;break;case"hover":s=N.kf;break;case"mousemove":s=N.mf;break;case"mousewheel":s=N.pf;break;case"mousedown":s=N.lf;break;case"mouseup":s=N.nf;break;case"dragstart":s=N.ff;break;case"drag":s=N.df;break;case"dragend":s=N.ef;break;case"transformstart":s=N.wf;break;case"transform":s=N.uf;break;case"transformend":s=N.vf}var l=!1,c=!s.empty(),h=u.absolute(o,i),f=(t||c)&&a(h),d=(t||c)&&function(e){var t=void 0,n=0;return S.sc(g,(function(i){!0===i.open&&i.Y&&i.scale>n&&H(i,e)&&(t=i,n=i.scale)})),t}(h);c&&(c=f?f.group:null,h=f?f.Jb(h,r):h,o.Db=void 0,s=s({type:e,group:c,topmostClosedGroup:c,bottommostOpenGroup:d?d.group:null,x:o.x,y:o.y,xAbsolute:h.x,yAbsolute:h.y,scale:y.I(o.scale,1),secondary:o.lb,touches:y.I(o.touches,1),delta:y.I(o.ed,0),ctrlKey:o.ctrlKey,metaKey:o.metaKey,altKey:o.altKey,shiftKey:o.shiftKey,preventDefault:function(){l=!0},preventOriginalEventDefault:function(){o.Db="prevent"},allowOriginalEventDefault:function(){o.Db="allow"}}),l=l||0<=s.indexOf(!1),f&&f.attribution&&"click"===e&&(l=!1)),l||n&&n({dd:f,ug:d},o)}}function a(e,t){if("flattened"===N.mb)e=function(e){function t(e,n){var i=n.m;if(i){for(var r,o=-Number.MAX_VALUE,a=0;a<i.length;a++){var s=i[a];!s.description&&s.Y&&H(s,e)&&s.scale>o&&(r=s,o=s.scale)}var u;return r&&(u=t(e,r)),u||r||n}return n}for(var n=j.length,i=j[0].scale,r=j[0].scale,o=0;o<n;o++){var a=j[o];(a=a.scale)<i&&(i=a),a>r&&(r=a)}if(i!==r)for(o=0;o<n;o++)if((a=j[o]).scale===r&&a.Y&&H(a,e))return t(e,a);return t(e,g)}(e);else{t=t||0;for(var n=j.length,i=void 0,r=0;r<n;r++){var o=j[r];o.scale>t&&!1===o.open&&o.Y&&H(o,e)&&(i=o,t=o.scale)}e=i}return e&&e.description&&(e=e.parent),e}var s,u,l,c,h,f,d,g,C,w,_,A,T,k,z,D,B,L,E,j,O=t.Lh(),I=this,N=e.options,P=!1;e.j.subscribe("stage:initialized",(function(t,n,i,r){s=n,L=i,E=r,function(){function t(e){return function(t){return t.x*=L/s.clientWidth,t.y*=E/s.clientHeight,e(t)}}"external"!==N.Me&&("hammerjs"===N.Me&&y.has(window,"Hammer")&&(G.M(s),G.A("tap",t(I.i),!0),G.A("doubletap",t(I.u),!0),G.A("hold",t(I.sa),!0),G.A("touch",t(I.ua),!0),G.A("release",t(I.wa),!1),G.A("dragstart",t(I.ga),!0),G.A("drag",t(I.H),!0),G.A("dragend",t(I.T),!0),G.A("transformstart",t(I.pb),!0),G.A("transform",t(I.transform),!0),G.A("transformend",t(I.Ka),!0)),D=new v(s),B=new b,D.i(t(I.i)),D.u(t(I.u)),D.sa(t(I.sa)),D.wa(t(I.ua)),D.Ka(t(I.wa)),D.ga(t(I.ga)),D.H(t(I.H)),D.T(t(I.T)),D.ta(t(I.ta)),D.Ja(t(I.ta)),D.ua(t(I.Ja)),B.addEventListener("keyup",(function(t){var n=!1,i=void 0,r=N.xf({keyCode:t.keyCode,preventDefault:function(){n=!0},preventOriginalEventDefault:function(){i="prevent"},allowOriginalEventDefault:function(){i="allow"}});"prevent"===i&&t.preventDefault(),(n=n||0<=r.indexOf(!1))||27===t.keyCode&&e.j.D("interaction:reset")})))}()})),e.j.subscribe("stage:resized",(function(e,t,n,i){L=n,E=i})),e.j.subscribe("stage:disposed",(function(){D.Za(),G.Za(),B.i()})),e.j.subscribe("expose:initialized",(function(e){c=e})),e.j.subscribe("zoom:initialized",(function(e){u=e})),e.j.subscribe("openclose:initialized",(function(e){h=e})),e.j.subscribe("select:initialized",(function(e){f=e})),e.j.subscribe("titlebar:initialized",(function(e){d=e})),e.j.subscribe("timeline:initialized",(function(e){l=e})),e.j.subscribe("model:loaded",(function(e,t){g=e,j=t})),e.j.subscribe("model:childrenAttached",(function(e){j=e})),this.M=function(){},this.ua=r(o("mousedown",!1,(function(){u.Wh()}))),this.wa=r(o("mouseup",!1,void 0)),this.i=r(o("click",!0,(function(e,t){t.lb||t.shiftKey||!(e=e.dd)||(e.attribution?t.ctrlKey?document.location.href=x("iuuqr;..b`ssnurd`sbi/bnl.gn`lusdd"):(t=m.ia(N.Kb),e.be?(u.reset(N.ob,t),e.be=!1):(u.bg(e,N.Yb,N.ob,t),e.be=!0)):f.select({m:[e],Ca:!e.selected,Ba:t.metaKey||t.ctrlKey},!0))}))),this.u=r(o("doubleclick",!0,(function(t,n){var i=t.dd;i&&i.attribution||(n.lb||n.shiftKey?i&&(i.parent.U&&(i=i.parent),t={m:i.parent!==g?[i.parent]:[],Ca:!0,Ba:!1},f.select(t,!0),c.Vb(t,!0,!0,!1)):i&&(t={m:[i],Ca:!0,Ba:!1},i.Va=!0,e.j.D("foamtree:attachChildren",[i]),c.Vb(t,!0,!0,!1)),i&&l.K.A({}).wait(N.Oa/2).call((function(){h.Bb({m:S.uc(g,(function(e){return e.Bd&&!S.Jh(i,e)})),Ca:!1,Ba:!0},!0,!0),i.Bd=!0,h.Bb({m:[i],Ca:!(n.lb||n.shiftKey),Ba:!0},!0,!0)})).start())}))),this.sa=r(o("hold",!0,(function(e,t){(e=(t=!(t.metaKey||t.ctrlKey||t.shiftKey||t.lb))?e.dd:e.ug)&&e!==g&&h.Bb({m:[e],Ca:t,Ba:!0},!0,!1)}))),this.ga=r(o("dragstart",!1,(function(e,t){C=t.x,w=t.y,_=Date.now(),P=!0}))),this.H=r(o("drag",!1,(function(e,t){if(P){e=Date.now(),k=Math.min(1,e-_),_=e,e=t.x-C;var n=t.y-w;u.Uh(e,n),A=e,T=n,C=t.x,w=t.y}}))),this.T=r(o("dragend",!1,(function(){if(P){P=!1;var e=Math.sqrt(A*A+T*T)/k;4<=e?u.Vh(e,A,T):u.$e()}}))),this.pb=r(o("transformstart",!1,(function(e,t){z=1,C=t.x,w=t.y})));var F=1,R=!1;this.transform=r(o("transform",!1,(function(e,t){e=t.scale-.01,u.pg(t,e/z,t.x-C,t.y-w),z=e,C=t.x,w=t.y,F=z,R=R||2<t.touches}))),this.Ka=r(o("transformend",!1,(function(){R&&.8>F?e.j.D("interaction:reset"):i(),R=!1}))),this.Ja=r(o("mousewheel",!1,function(){var e=y.yg((function(){i()}),300);return function(t,n){1!==(t=N.ij)&&(t=Math.pow(t,n.ed),O?(u.qg(n,t),e()):u.Nb(n,t,N.ob,m.ia(N.Kb)).then(i))}}())),this.ta=r(function(){var t,n=void 0,i={},r=!1,s=o("hover",!1,(function(){n&&(n.ub=!1,0<n.level&&(n.N=!0)),t&&(t.ub=!0,0<t.level&&(t.N=!0)),d.update(t),e.j.D("foamtree:dirty",!1)})),l=o("mousemove",!1,void 0);return function(e){if("out"===e.type)r=(t=void 0)!==n;else if(u.absolute(e,i),n&&!n.open&&H(n,i)){var o=a(i,n.scale);o&&o!==n?(r=!0,t=o):r=!1}else t=a(i),r=t!==n;r&&(s(e),n=t,r=!1),n&&l(e)}}()),this.Lb={click:n(this.i),doubleclick:n(this.u),hold:n(this.sa),mouseup:n(this.wa),mousedown:n(this.ua),dragstart:n(this.ga),drag:n(this.H),dragend:n(this.T),transformstart:n(this.pb),transform:n(this.transform),transformend:n(this.Ka),hover:n(this.ta),mousewheel:n(this.Ja)};var G=function(){var e,t={};return{M:function(t){e=window.Hammer(t,{doubletap_interval:350,hold_timeout:400,doubletap_distance:10})},A:function(n,i,r){t[n]=i,e.on(n,function(e,t){return function(n){var i=(n=n.gesture).center;(i=p.oe(s,i.pageX,i.pageY,{})).scale=n.scale,i.lb=1<n.touches.length,i.touches=n.touches.length,e.call(s,i),(void 0===i.Db&&t||"prevent"===i.Db)&&n.preventDefault()}}(i,r))},Za:function(){e&&y.Aa(t,(function(t,n){e.off(n,t)}))}}}(),H=function(){var e={};return function(t,n){return t.Jb(n,e),t.$&&M.sa(t.$,e)}}()}function H(e){function t(e,t,n,i){var r,o=0,a=[];for(r=0;r<t.length;r++){var s=Math.sqrt(M.i(t[r],t[(r+1)%t.length]));a.push(s),o+=s}for(r=0;r<a.length;r++)a[r]/=o;e[0].x=n.x,e[0].y=n.y;var u=s=o=0;for(r=1;r<e.length;r++){var l=e[r],c=.95*Math.pow(r/e.length,i);for(o+=.3819;s<o;)s+=a[u],u=(u+1)%a.length;var h=(u-1+a.length)%a.length,f=1-(s-o)/a[h],d=t[h].x;h=t[h].y;var p=t[u].x,g=t[u].y;d=(d-n.x)*c+n.x,h=(h-n.y)*c+n.y,p=(p-n.x)*c+n.x,g=(g-n.y)*c+n.y,l.x=d*(1-f)+p*f,l.y=h*(1-f)+g*f}}var n={random:{vb:function(e,t){for(var n=0;n<e.length;n++){var i=e[n];i.x=t.x+Math.random()*t.w,i.y=t.y+Math.random()*t.o}},Ob:"box"},ordered:{vb:function(e,t){e=e.slice(0),i.ac&&e.sort(te),L.i(e,t,!1,i.Ld)},Ob:"box"},squarified:{vb:function(e,t){e=e.slice(0),i.ac&&e.sort(te),L.u(e,t,!1,i.Ld)},Ob:"box"},fisheye:{vb:function(e,n,r){e=e.slice(0),i.ac&&e.sort(te),t(e,n,r,.25)},Ob:"polygon"},blackhole:{vb:function(e,n,r){e=e.slice(0),i.ac&&e.sort(te).reverse(),t(e,n,r,1)},Ob:"polygon"}};n.order=n.ordered,n.treemap=n.squarified;var i=e.options;this.i=function(e,t,r){if(0<e.length){if("box"===(r=n[r.relaxationInitializer||r.initializer||i.Ii||"random"]).Ob){var o=M.F(t,{});r.vb(e,o),M.wa(e,M.H(o),t)}else r.vb(e,t,M.u(t,{}));for(r=e.length-1;0<=r;r--){if((o=e[r]).description){var a=M.ta(t,i.qc,i.Ag);o.x=a.x,o.y=a.y}o.attribution&&(a=M.ta(t,i.$d,i.rg),o.x=a.x,o.y=a.y),y.wb(o.group.initialPosition)&&(a=o.group.initialPosition,a=M.ta(t,a.position||"bottomright",a.distanceFromCenter||1),o.x=a.x,o.y=a.y)}}}}function U(e){var t,n=e.options,i=new q(e,this),r=new V(e,this),o={relaxed:i,ordered:r,squarified:r},a=o[e.options.Dc]||i;this.jg=5e-5,e.j.subscribe("model:loaded",(function(e){t=e})),e.j.subscribe("options:changed",(function(e){e.layout&&y.has(o,n.Dc)&&(a=o[n.Dc])})),this.step=function(e,t,n,i){return a.step(e,t,n,i)},this.complete=function(e){a.complete(e)},this.Oe=function(e){return e===t||2*Math.sqrt(e.O.ha/(Math.PI*e.m.length))>=Math.max(n.Be,5e-5)},this.gd=function(e,t){var i=Math.pow(n.La,e.level),r=n.$a*i;i*=n.jd;for(var o=(e=e.m).length-1;0<=o;o--){var s=e[o];a.ce(s,i);var u=s;u.$=0<r?k.i(u.C,r):u.C,u.$&&(M.F(u.$,u.F),M.Ja(u.$,u.O)),s.m&&t.push(s)}},this.fc=function(e){a.fc(e)},this.Eb=function(e){a.Eb(e)}}function q(e,t){function n(e){if(e.m){e=e.m;for(var t=0;t<e.length;t++){var n=e[t];n.kc=n.hc*c.oh}}}function i(e,i){t.Oe(e)&&(e.G||(e.G=k.i(e.C,c.jd*Math.pow(c.La,e.level-1)),e.G&&e.m[0]&&e.m[0].description&&"stab"==c.Tb&&s(e)),e.G&&(l.Eb(e),h.i(r(e),e.G,e.group),e.R=!0,i(e)),n(e))}function r(e){return"stab"===c.Tb&&0<e.m.length&&e.m[0].description?e.m.slice(1):e.m}function o(e){var t=r(e);return z.i(t,e.G),z.u(t,e.G),D.H(e)*Math.sqrt(u.O.ha/e.O.ha)}function a(e){return e<c.Hf||1e-4>e}function s(e){var t=c.Sb/(1+c.Sb),n=M.F(e.G,{}),i={x:n.x,y:0},r=n.y,o=n.o,a=c.ie*Math.pow(c.La,e.level-1),s=o*c.he,u=c.qc;"bottom"==u||0<=u&&180>u?(u=Math.PI,r+=o,o=-1):(u=0,o=1);var l=e.G,h=u,f=0,d=1,p=M.u(l,{}),g=p.ha;t*=g;for(var b=0;f<d&&20>b++;){var v=(f+d)/2;i.y=n.y+n.o*v;var m=M.ua(l,i,h);M.u(m[0],p);var y=p.ha-t;if(.01>=Math.abs(y)/g)break;0<(0==h?1:-1)*y?d=v:f=v}M.F(m[0],n),(n.o<a||n.o>s)&&(i.y=n.o<a?r+o*Math.min(a,s):r+o*s,m=M.ua(e.G,i,u)),e.m[0].C=m[0],e.G=m[1]}var u,l=this,c=e.options,h=new H(e),f=0;e.j.subscribe("model:loaded",(function(e){u=e,f=0})),this.step=function(e,n,s,l){function h(n){if(n.R&&n.xa?function(e){e!==u&&2*Math.sqrt(e.O.ha/(Math.PI*e.m.length))<Math.max(.85*c.Be,t.jg)&&(e.R=!1,e.xa=!1,e.Ia=!0,e.G=null)}(n):n.Ia&&n.C&&i(n,(function(){var t=r(n);z.i(t,n.G),z.u(t,n.G),e(n)})),!n.G||!n.R)return 0;if(n.parent&&n.parent.Z||n.Ea){var h=o(n);l&&l(n),n.Ea=!a(h)&&!s,n.Z=!0}else h=0;return t.gd(n,p),h}for(var d=0,p=[u];0<p.length;)d=Math.max(d,h(p.shift()));var g=a(d);return n&&function(e,t,n){f<e&&(f=e);var i=c.Hf;c.Ad(t?1:1-(e-i)/(f-i||1),t,n),t&&(f=0)}(d,g,s),g},this.complete=function(e){for(var n=[u];0<n.length;){var r=n.shift();if(!r.R&&r.Ia&&r.C&&i(r,e),r.G){if(r.parent&&r.parent.Z||r.Ea){for(var s=1e-4>r.O.ha,l=0;!(a(o(r))||s&&32<l++););r.Z=!0,r.Ea=!1}t.gd(r,n)}}},this.fc=function(e){S.L(e,n)},this.ce=function(e,t){if(e.R){var n=e.G;n&&(e.Fd=n),e.G=k.i(e.C,t),e.G&&e.m[0]&&e.m[0].description&&"stab"==c.Tb&&s(e),n&&!e.G&&(e.Z=!0),e.G&&e.Fd&&M.wa(r(e),e.Fd,e.G)}},this.Eb=function(e){for(var t,n=r(e),i=e.ha,o=t=0;o<n.length;o++)t+=n[o].weight;for(e.Dj=t,e=0;e<n.length;e++)(o=n[e]).Vf=o.w,o.hc=i/Math.PI*(0<t?o.weight/t:1/n.length)}}function V(e,t){function n(e,n){if(t.Oe(e)){if(!e.G||e.parent&&e.parent.Z){var i=a.jd*Math.pow(a.La,e.level-1);e.G=M.H(function(e,t){var n=2*t;return e.x+=t,e.y+=t,e.w-=n,e.o-=n,e}(M.F(e.C,{}),i))}e.G&&(e.R=!0,n(e))}else e.R=!1,S.za(e,(function(e){e.G=null}))}function i(e){if("stab"==a.Tb&&0<e.m.length&&e.m[0].description){var t=e.m.slice(1);!function(e){function t(){i.C=M.H(r),i.x=r.x+r.w/2,i.y=r.y+r.o/2}var n=a.Sb/(1+a.Sb),i=e.m[0],r=M.F(e.G,{}),o=r.o;n=Math.min(Math.max(o*n,a.ie*Math.pow(a.La,e.level-1)),o*a.he);var s=a.qc;"bottom"==s||0<=s&&180>s?(r.o=o-n,e.G=M.H(r),r.y+=o-n,r.o=n,t()):(r.o=n,t(),r.y+=n,r.o=o-n,e.G=M.H(r))}(e)}else t=e.m;a.ac&&t.sort(te),"floating"==a.Tb&&r(t,a.qc,(function(e){return e.description})),r(t,a.$d,(function(e){return e.attribution}));var n=M.F(e.G,{});(s[a.Dc]||L.i)(t,n,!0,a.Ld),e.Ea=!1,e.Z=!0,e.N=!0,e.Fa=!0}function r(e,t,n){for(var i=0;i<e.length;i++){var r=e[i];if(n(r)){e.splice(i,1),"topleft"==t||135<=t&&315>t?e.unshift(r):e.push(r);break}}}var o,a=e.options,s={squarified:L.u,ordered:L.i};e.j.subscribe("model:loaded",(function(e){o=e})),this.step=function(e,t,n){return this.complete(e),t&&a.Ad(1,!0,n),!0},this.complete=function(e){for(var r=[o];0<r.length;){var a=r.shift();(!a.R||a.parent&&a.parent.Z)&&a.Ia&&a.C&&n(a,e),a.G&&((a.parent&&a.parent.Z||a.Ea)&&i(a),t.gd(a,r))}},this.Eb=this.fc=this.ce=y.qa}var W,Z,$,K,Y=new function(){this.u=function(e,t){var n=e.globalAlpha;e.fillStyle="dark"===t?"white":"#1d3557",e.globalAlpha=1*n,e.save(),e.transform(.94115,0,0,.94247,-78.54,-58),e.beginPath(),e.moveTo(86.47,533.3),e.bezierCurveTo(83.52,531.5,83.45,530.6,83.45,488.3),e.bezierCurveTo(83.45,444.6,83.35,445.7,87.34,443.7),e.bezierCurveTo(88.39,443.1,90.5,442.5,92.02,442.4),e.bezierCurveTo(93.54,442.2,113,441.7,135.3,441.4),e.bezierCurveTo(177.9,440.7,179.3,440.7,182.7,443.4),e.bezierCurveTo(185.9,445.9,185.6,445,206.2,510.7),e.bezierCurveTo(207.8,515.8,209.5,521.3,210.1,522.9),e.bezierCurveTo(211.7,528,211.9,531.3,210.6,532.7),e.bezierCurveTo(209.5,534,208.4,534,148.5,534),e.bezierCurveTo(106.4,533.9,87.3,533.7,86.47,533.2),e.closePath(),e.fill(),e.globalAlpha=.8*n,e.beginPath(),e.moveTo(237.3,533.3),e.bezierCurveTo(234.8,532.5,233.1,530.9,231.7,528.1),e.bezierCurveTo(231,526.8,224.6,507,217.4,484.1),e.bezierCurveTo(203.1,438.8,202.6,436.7,205,431.4),e.bezierCurveTo(206.3,428.5,239.2,383.2,242.9,379.3),e.bezierCurveTo(245,377,246.9,376.7,249.7,378.2),e.bezierCurveTo(250.6,378.7,263.1,390.8,277.3,405.2),e.bezierCurveTo(301.1,429.2,303.4,431.6,305.1,435.5),e.bezierCurveTo(306.7,439,306.9,440.4,306.9,445.2),e.bezierCurveTo(306.8,455.3,302.2,526.4,301.5,528.9),e.bezierCurveTo(300.2,533.7,301,533.6,268.3,533.7),e.bezierCurveTo(252.2,533.8,238.3,533.6,237.3,533.3),e.closePath(),e.fill(),e.beginPath(),e.globalAlpha=.05*n,e.moveTo(329,533.3),e.bezierCurveTo(326.2,532.5,323.1,528.8,322.6,525.8),e.bezierCurveTo(322,521.6,327.2,446.1,328.4,442.2),e.bezierCurveTo(330.6,434.9,332.8,432.8,368.5,402.4),e.bezierCurveTo(387,386.7,403.9,372.8,406,371.4),e.bezierCurveTo(413.1,366.7,416,366.2,436.5,365.7),e.bezierCurveTo(456.8,365.2,463.6,365.6,470.2,367.6),e.bezierCurveTo(476.2,369.5,546.1,402.8,549.1,405.3),e.bezierCurveTo(550.4,406.3,552.2,408.7,553.2,410.5),e.lineTo(555,413.9),e.lineTo(555.2,459.5),e.bezierCurveTo(555.3,484.6,555.2,505.8,555,506.5),e.bezierCurveTo(554.4,509.1,548.1,517.9,543.8,522.2),e.bezierCurveTo(537.7,528.3,534.2,530.5,527.8,532.4),e.lineTo(522.3,534),e.lineTo(426.6,533.9),e.bezierCurveTo(371.1,533.9,330.1,533.6,328.9,533.3),e.closePath(),e.fill(),e.globalAlpha=.8*n,e.beginPath(),e.moveTo(87.66,423),e.bezierCurveTo(86.23,422.4,85.02,422,84.97,422),e.bezierCurveTo(84.91,422,84.55,421.1,84.16,419.9),e.bezierCurveTo(83.67,418.6,83.45,404.7,83.45,375.9),e.bezierCurveTo(83.45,328.4,83.27,330.3,88.12,328.1),e.bezierCurveTo(90.22,327.2,101.7,325.6,135.4,321.7),e.bezierCurveTo(159.9,318.8,181.1,316.5,182.5,316.5),e.bezierCurveTo(183.9,316.5,187,317.3,189.4,318.2),e.bezierCurveTo(193.5,319.8,194.7,320.8,210.1,336.2),e.bezierCurveTo(226.6,352.7,229.1,355.7,229.1,360),e.bezierCurveTo(229.1,363,226.8,366.5,212.9,385.4),e.bezierCurveTo(187.3,420.2,189.3,417.7,183.4,420.5),e.lineTo(179.5,422.3),e.lineTo(155.3,422.7),e.bezierCurveTo(89.91,424,90.39,423.9,87.65,423),e.closePath(),e.fill(),e.globalAlpha=.6*n,e.beginPath(),e.moveTo(314.6,415),e.bezierCurveTo(311.4,413.4,213.2,314.6,210.9,310.7),e.bezierCurveTo(208.9,307.2,208.5,303.4,209.9,300),e.bezierCurveTo(211.2,297,241.3,257,244.2,254.4),e.bezierCurveTo(247.3,251.7,252.9,249.7,257.4,249.7),e.bezierCurveTo(261.1,249.7,344.7,255.2,350.8,255.8),e.bezierCurveTo(358.5,256.6,363.1,259.5,366,265.1),e.bezierCurveTo(368.7,270.5,394.3,343.7,394.7,347.2),e.bezierCurveTo(395.1,351.6,393.6,356.1,390.5,359.5),e.bezierCurveTo(389.1,361,375.7,372.6,360.5,385.4),e.bezierCurveTo(326.7,414,327,413.7,324.5,415),e.bezierCurveTo(321.8,416.4,317.4,416.3,314.6,414.9),e.closePath(),e.fill(),e.globalAlpha=.4*n,e.beginPath(),e.moveTo(547.9,383.4),e.bezierCurveTo(547.1,383.2,533,376.6,516.5,368.7),e.bezierCurveTo(497.2,359.5,485.7,353.7,484.3,352.4),e.bezierCurveTo(481.6,349.8,480.2,346.5,480.2,342.5),e.bezierCurveTo(480.2,339.2,499.2,237,500.4,233.9),e.bezierCurveTo(502.2,229.1,506.2,225.8,511.3,224.9),e.bezierCurveTo(516.2,224,545.8,222.2,548.2,222.6),e.bezierCurveTo(551.5,223.2,553.7,224.7,555.1,227.3),e.bezierCurveTo(556.2,229.3,556.3,234,556.5,301.9),e.bezierCurveTo(556.6,341.8,556.5,375.7,556.3,377.2),e.bezierCurveTo(555.6,381.8,552,384.4,547.8,383.4),e.closePath(),e.fill(),e.globalAlpha=.4*n,e.beginPath(),e.moveTo(418.7,347),e.bezierCurveTo(416,346.1,413.6,344.3,412.3,342.1),e.bezierCurveTo(411.6,341,404.4,321.3,396.3,298.3),e.bezierCurveTo(382,258.1,381.5,256.4,381.5,251.7),e.bezierCurveTo(381.5,248.2,381.8,246.2,382.7,244.7),e.bezierCurveTo(383.4,243.4,389.5,233.9,396.5,223.4),e.bezierCurveTo(412.6,199,411.3,199.9,430.6,198.6),e.bezierCurveTo(445,197.6,449.5,197.9,454.2,200.4),e.bezierCurveTo(460.5,203.7,479.6,217.5,481.3,220.1),e.bezierCurveTo(484.3,224.6,484.3,224.6,473.1,284),e.bezierCurveTo(465.3,325.9,462.4,339.9,461.3,341.8),e.bezierCurveTo(458.7,346.4,457.1,346.7,437.5,347.1),e.bezierCurveTo(428.1,347.3,419.6,347.3,418.7,347),e.closePath(),e.fill(),e.globalAlpha=.05*n,e.beginPath(),e.moveTo(89.33,308.2),e.bezierCurveTo(88.1,307.5,86.5,306.2,85.77,305.2),e.bezierCurveTo(84.42,303.4,84.42,303.4,84.24,202.6),e.bezierCurveTo(84.11,131.7,84.27,100.2,84.77,96.34),e.bezierCurveTo(85.65,89.58,87.91,84.64,92.77,78.81),e.bezierCurveTo(96.86,73.9,103.2,68.42,107.1,66.53),e.bezierCurveTo(108.6,65.81,112.8,64.64,116.5,63.92),e.bezierCurveTo(122.7,62.73,125.4,62.64,148.5,62.81),e.lineTo(173.7,63),e.lineTo(177.4,64.82),e.bezierCurveTo(179.5,65.82,182.1,67.75,183.3,69.12),e.bezierCurveTo(185.6,71.9,228.8,145.1,231.3,150.7),e.bezierCurveTo(234.5,157.7,234.9,160.8,234.9,176.9),e.bezierCurveTo(234.8,201.7,233.8,229.6,232.8,233.2),e.bezierCurveTo(232.3,235,231.1,238.1,230.2,240),e.bezierCurveTo(228.3,243.9,196.9,286.6,192.7,290.9),e.bezierCurveTo(189.8,293.9,184.3,297.1,180.2,298.2),e.bezierCurveTo(177.6,298.9,95.84,309.3,93.04,309.3),e.bezierCurveTo(92.22,309.3,90.55,308.8,89.33,308.1),e.closePath(),e.fill(),e.globalAlpha=.4*n,e.beginPath(),e.moveTo(305.7,235.6),e.bezierCurveTo(254.5,232,256.5,232.3,253.9,227.1),e.lineTo(252.4,224.2),e.lineTo(253.1,196.7),e.bezierCurveTo(253.8,170.5,253.8,169.1,255.2,166.3),e.bezierCurveTo(257.7,161.2,256.9,161.4,309.3,151.9),e.bezierCurveTo(354.1,143.8,356.8,143.4,359.7,144.2),e.bezierCurveTo(361.4,144.6,363.8,145.8,365,146.8),e.bezierCurveTo(367.3,148.6,389,179.6,391.9,185.2),e.bezierCurveTo(393.8,188.7,394.1,193.5,392.6,196.9),e.bezierCurveTo(391.5,199.6,370.6,231.4,368.4,233.8),e.bezierCurveTo(365.4,237,362,238.3,356.3,238.5),e.bezierCurveTo(353.5,238.6,330.7,237.3,305.7,235.5),e.closePath(),e.fill(),e.globalAlpha=.2*n,e.beginPath(),e.moveTo(497.1,207.1),e.bezierCurveTo(496.2,206.8,494.4,206,493.2,205.4),e.bezierCurveTo(490,203.8,472.7,191.6,469.7,189),e.bezierCurveTo(467,186.6,465.7,183.2,466.2,180.2),e.bezierCurveTo(466.5,178.1,482.4,138.6,484.9,133.5),e.bezierCurveTo(486.5,130.3,488.4,128.2,490.9,126.8),e.bezierCurveTo(492.6,125.9,496.3,125.7,522.2,125.6),e.lineTo(551.5,125.4),e.lineTo(553.7,127.6),e.bezierCurveTo(555.2,129.1,556,130.5,556.3,132.6),e.bezierCurveTo(556.5,134.2,556.6,149.6,556.5,166.9),e.bezierCurveTo(556.3,195.4,556.2,198.5,555.1,200.4),e.bezierCurveTo(553.1,204.1,551.7,204.4,529.8,206.1),e.bezierCurveTo(509.2,207.7,499.9,207.9,497,207.1),e.closePath(),e.fill(),e.globalAlpha=.2*n,e.beginPath(),e.moveTo(412.5,180.5),e.bezierCurveTo(410.9,179.7,408.7,177.9,407.5,176.4),e.bezierCurveTo(403.5,171.3,380.5,137.2,379.2,134.3),e.bezierCurveTo(377.2,129.6,377.1,126.1,378.9,116.8),e.bezierCurveTo(386.5,77.56,388.4,68.28,389.5,66.46),e.bezierCurveTo(390.1,65.34,391.7,63.83,392.9,63.1),e.bezierCurveTo(395.1,61.84,396.2,61.78,419.4,61.78),e.bezierCurveTo(443.4,61.78,443.7,61.8,446.5,63.25),e.bezierCurveTo(448,64.06,449.9,65.81,450.7,67.14),e.bezierCurveTo(452.3,69.73,468,105.5,470,111.1),e.bezierCurveTo(471.4,114.9,471.6,119.1,470.5,122.3),e.bezierCurveTo(470.1,123.5,465.2,135.8,459.7,149.5),e.bezierCurveTo(446.7,181.4,448.1,179.8,431.5,181.2),e.bezierCurveTo(419,182.2,415.7,182,412.5,180.5),e.closePath(),e.fill(),e.globalAlpha=.4*n,e.beginPath(),e.moveTo(253.6,142.8),e.bezierCurveTo(250.2,141.8,246.6,139.4,244.7,136.7),e.bezierCurveTo(242.1,132.9,207.4,73.28,206.2,70.42),e.bezierCurveTo(205.1,67.89,205,67.1,205.7,65.54),e.bezierCurveTo(207.3,61.54,202.3,61.8,284.4,61.59),e.bezierCurveTo(325.7,61.48,360.8,61.58,362.4,61.81),e.bezierCurveTo(366,62.32,369.3,65.36,369.9,68.75),e.bezierCurveTo(370.4,71.55,362.4,113.9,360.5,118.1),e.bezierCurveTo(359.1,121.3,355,125,351.4,126.4),e.bezierCurveTo(348.9,127.3,267.1,142.3,259.5,143.2),e.bezierCurveTo(257.9,143.4,255.2,143.2,253.6,142.7),e.closePath(),e.fill(),e.globalAlpha=.1*n,e.beginPath(),e.moveTo(493.4,106.8),e.bezierCurveTo(490.3,106,488.2,104.5,486.5,101.7),e.bezierCurveTo(483.8,97.43,471.8,68.81,471.8,66.76),e.bezierCurveTo(471.8,62.64,470.7,62.76,512.1,62.76),e.bezierCurveTo(553.3,62.76,552.3,62.67,554.4,66.68),e.bezierCurveTo(555.2,68.34,555.3,71.23,555.2,85.75),e.lineTo(555,102.8),e.lineTo(551.4,106.4),e.lineTo(534.1,106.8),e.bezierCurveTo(510.7,107.4,495.9,107.4,493.3,106.8),e.closePath(),e.fill(),e.restore(),e.transform(.15905,0,0,.15905,-88.65,443.2),e.globalAlpha=1*n,e.save(),e.beginPath(),e.moveTo(557.4,564.9),e.lineTo(557.4,98),e.lineTo(885.8,98),e.lineTo(885.8,185.1),e.lineTo(650.8,185.1),e.lineTo(650.8,284.7),e.lineTo(824.1,284.7),e.lineTo(824.1,371.6),e.lineTo(650.8,371.6),e.lineTo(650.8,564.9),e.lineTo(557.4,564.9),e.closePath(),e.fill(),e.beginPath(),e.moveTo(1029,568),e.quadraticCurveTo(961.1,568,915.7,522.5),e.quadraticCurveTo(870.2,476.7,870.2,409.2),e.quadraticCurveTo(870.2,341.3,915.7,295.9),e.quadraticCurveTo(961.1,250.4,1029,250.4),e.quadraticCurveTo(1096.8,250.4,1142.3,295.9),e.quadraticCurveTo(1187.7,341.3,1187.7,409.2),e.quadraticCurveTo(1187.7,477.1,1142.3,522.5),e.quadraticCurveTo(1097.3,568.1,1029.3,568.1),e.closePath(),e.moveTo(1028.6,492.6),e.quadraticCurveTo(1064.1,492.6,1086.2,469),e.quadraticCurveTo(1108.3,445,1108.3,409.5),e.quadraticCurveTo(1108.3,374,1086.2,350),e.quadraticCurveTo(1064.1,326.1,1028.3,326.1),e.quadraticCurveTo(993.1,326.1,971,350),e.quadraticCurveTo(948.9,374,948.9,409.5),e.quadraticCurveTo(948.9,445,971,469),e.quadraticCurveTo(993.1,492.6,1028.6,492.6),e.closePath(),e.fill(),e.beginPath(),e.moveTo(1253,291),e.quadraticCurveTo(1312.1,253.6,1390,253.6),e.quadraticCurveTo(1446,253.6,1478.7,284.7),e.quadraticCurveTo(1511.4,315.9,1511.4,378.1),e.lineTo(1511.4,564.9),e.lineTo(1424.2,564.9),e.lineTo(1424.2,540),e.quadraticCurveTo(1386.2,564.9,1355.7,564.9),e.quadraticCurveTo(1293.5,564.9,1262.3,538.5),e.quadraticCurveTo(1231.2,512,1231.2,465.3),e.quadraticCurveTo(1231.2,421.7,1260.4,387.5),e.quadraticCurveTo(1290,353.3,1355.7,353.3),e.quadraticCurveTo(1385.9,353.3,1424.2,371.9),e.lineTo(1424.2,362.6),e.quadraticCurveTo(1423.6,328.4,1374.4,325.2),e.quadraticCurveTo(1318.3,325.2,1287.2,343.9),e.lineTo(1253,291),e.closePath(),e.moveTo(1424.2,471.5),e.lineTo(1424.2,436.3),e.quadraticCurveTo(1411.7,412.3,1365,412.3),e.quadraticCurveTo(1309,418.5,1305.9,455.9),e.quadraticCurveTo(1309,492.9,1365,496),e.quadraticCurveTo(1411.7,496,1424.2,471.5),e.closePath(),e.fill(),e.beginPath(),e.moveTo(1675,365.7),e.lineTo(1675,564.9),e.lineTo(1587.8,564.9),e.lineTo(1587.8,262.5),e.lineTo(1675,253.2),e.lineTo(1675,280.9),e.quadraticCurveTo(1704.2,253.5,1749.7,253.5),e.quadraticCurveTo(1808.8,253.5,1839.9,289.3),e.quadraticCurveTo(1874.2,253.5,1942.6,253.5),e.quadraticCurveTo(2001.8,253.5,2032.9,289.3),e.quadraticCurveTo(2064,325.1,2064,371.8),e.lineTo(2064,564.8),e.lineTo(1976.9,564.8),e.lineTo(1976.9,393.6),e.quadraticCurveTo(1976.9,362.5,1962.9,345.4),e.quadraticCurveTo(1948.8,328.2,1917.4,327.3),e.quadraticCurveTo(1891.6,329.2,1872.6,361.6),e.quadraticCurveTo(1871,371.2,1871,381.2),e.lineTo(1871,564.9),e.lineTo(1783.9,564.9),e.lineTo(1783.9,393.7),e.quadraticCurveTo(1783.9,362.5,1769.9,345.4),e.quadraticCurveTo(1755.9,328.3,1724.4,327.4),e.quadraticCurveTo(1695.8,329.2,1674.9,365.7),e.closePath(),e.fill(),e.beginPath(),e.moveTo(2058,97.96),e.lineTo(2058,185.1),e.lineTo(2213.6,185.1),e.lineTo(2213.6,564.9),e.lineTo(2306.9,564.9),e.lineTo(2306.9,185.1),e.lineTo(2462.5,185.1),e.lineTo(2462.5,97.96),e.lineTo(2057.8,97.96),e.closePath(),e.fill(),e.beginPath(),e.moveTo(2549,287.8),e.quadraticCurveTo(2582.3,253.5,2630.2,253.5),e.quadraticCurveTo(2645.5,253.5,2659.2,256),e.lineTo(2645.5,341.9),e.quadraticCurveTo(2630.2,328.2,2601.9,327.3),e.quadraticCurveTo(2570.1,329.5,2549,373.4),e.lineTo(2549,564.8),e.lineTo(2461.8,564.8),e.lineTo(2461.8,262.5),e.lineTo(2549,253.1),e.lineTo(2549,287.7),e.closePath(),e.fill(),e.beginPath(),e.moveTo(2694,409.2),e.quadraticCurveTo(2694,340.7,2737.5,297.1),e.quadraticCurveTo(2781.1,253.5,2849.6,253.5),e.quadraticCurveTo(2918.1,253.5,2958.5,297.1),e.quadraticCurveTo(2999,340.6,2999,409.2),e.lineTo(2999,440.3),e.lineTo(2784.2,440.3),e.quadraticCurveTo(2787.3,465.2,2806,479.2),e.quadraticCurveTo(2824.7,493.2,2849.6,493.2),e.quadraticCurveTo(2893.1,493.2,2927.4,468.3),e.lineTo(2977.2,518.1),e.quadraticCurveTo(2943,564.8,2849.6,564.8),e.quadraticCurveTo(2781.1,564.8,2737.5,521.2),e.quadraticCurveTo(2693.9,477.6,2693.9,409.1),e.closePath(),e.moveTo(2911.9,378),e.quadraticCurveTo(2911.9,353.1,2893.2,339.1),e.quadraticCurveTo(2874.5,325.1,2849.6,325.1),e.quadraticCurveTo(2824.7,325.1,2806,339.1),e.quadraticCurveTo(2787.3,353.1,2787.3,378),e.lineTo(2911.8,378),e.closePath(),e.fill(),e.beginPath(),e.moveTo(3052,409.2),e.quadraticCurveTo(3052,340.7,3095.5,297.1),e.quadraticCurveTo(3139.1,253.5,3207.6,253.5),e.quadraticCurveTo(3276.1,253.5,3316.5,297.1),e.quadraticCurveTo(3357,340.6,3357,409.2),e.lineTo(3357,440.3),e.lineTo(3142.2,440.3),e.quadraticCurveTo(3145.3,465.2,3164,479.2),e.quadraticCurveTo(3182.7,493.2,3207.6,493.2),e.quadraticCurveTo(3251.1,493.2,3285.4,468.3),e.lineTo(3335.2,518.1),e.quadraticCurveTo(3301,564.8,3207.6,564.8),e.quadraticCurveTo(3139.1,564.8,3095.5,521.2),e.quadraticCurveTo(3051.9,477.6,3051.9,409.1),e.closePath(),e.moveTo(3269.9,378),e.quadraticCurveTo(3269.9,353.1,3251.2,339.1),e.quadraticCurveTo(3232.5,325.1,3207.6,325.1),e.quadraticCurveTo(3182.7,325.1,3164,339.1),e.quadraticCurveTo(3145.3,353.1,3145.3,378),e.lineTo(3269.8,378),e.closePath(),e.fill(),e.restore()}};function J(e,n){function i(e,t){var n=e.O.r,i=n/15,r=.5*n/15;n/=5;var o=e.O.x;e=e.O.y,t.fillRect(o-r,e-r,i,i),t.fillRect(o-r-n,e-r,i,i),t.fillRect(o-r+n,e-r,i,i)}function r(e,t,n,i){null===e&&n.clearRect(0,0,D,B);var r,o=Array(te.length);for(r=te.length-1;0<=r;r--)o[r]=te[r].na(n,i);for(r=te.length-1;0<=r;r--)o[r]&&te[r].before(n,i);for(E.rc([n,z],(function(i){var r;if(null!==e){for(n.save(),n.globalCompositeOperation="destination-out",n.fillStyle=n.strokeStyle="rgba(255, 255, 255, 1)",r=e.length-1;0<=r;r--){var a=e[r],u=a.C;u&&(n.save(),n.beginPath(),a.Ib(n),s.Ud(n,u),n.fill(),0<(a=q.$a*Math.pow(q.La,a.level-1))&&(n.lineWidth=a/2,n.stroke()),n.restore())}n.restore()}if(i=i.scale,0!==t.length){for(r={},u=te.length-1;0<=u;u--)te[u].ng(r);for(a=ee.length-1;0<=a;a--)if(r[(u=ee[a]).id]){var l=u.Kd;for(u=0;u<t.length;u++){var c=t[u];!c.parent||c.parent.xa&&c.parent.R?l(c,i):c.aa.clear()}}}for(r=te.length-1;0<=r;r--)a=te[r],o[r]&&a.Nd(t,n,i)})),r=te.length-1;0<=r;r--)o[r]&&te[r].after(n);q.Zc&&(n.canvas.style.opacity=.99,setTimeout((function(){n.canvas.style.opacity=1}),1))}function u(){function e(t,n,i){t.sb=Math.floor(1e3*t.scale)-i*n,0<t.opacity&&!t.open&&n++;var r=t.m;if(r)for(var o=r.length-1;0<=o;o--)t.W&&e(r[o],n,i)}var t=null,n=null,i=null;return E.rc([],(function(r){!function(e){b===w?e<.9*G&&(b=v,x=A,h()):e>=G&&(b=w,x=T,h())}(r.scale);var o=!1;S.L(I,(function(e){e.W&&(o=e.vd()||o,e.cc(),e.Ma=H.i(e)||e.Ma)})),o&&(I.N=!0);var a="onSurfaceDirty"===q.Lg;S.fd(I,(function(e){e.parent&&e.parent.Z&&(e.aa.clear(),e.Ma=!0,a||(e.oc=!0,e.Qb.clear())),a&&(e.oc=!0,e.Qb.clear())}));var s=r.scale*r.scale;if(S.fd(I,(function(e){if(e.R){for(var t=e.m,n=0;n<t.length;n++)if(5<t[n].O.ha*s)return void(e.X=!0);e.X=!1}})),function(e){I.Y=!0,S.fd(I,(function(t){if(t.W&&t.X&&t.xa&&t.R&&(I.N||t.Z||t.Vd)){t.Vd=!1;var n=t.m,i={x:0,y:0,w:0,o:0},r=!!t.G;if(1<D/e.w){var o;for(o=n.length-1;0<=o;o--)n[o].Y=!1;if(t.Y&&r)for(o=n.length-1;0<=o;o--)if(1!==(t=n[o]).scale&&(t.Jb(e,i),i.w=e.w/t.scale,i.o=e.o/t.scale),!1===t.Y&&t.C){var a=(r=t.C).length;if(M.sa(t.C,1===t.scale?e:i))t.Y=!0;else for(var s=0;s<a;s++)if(M.Vc(r[s],r[(s+1)%a],1===t.scale?e:i)){t.Y=!0,t.J&&(t=t.J[s])&&(n[t.index].Y=!0);break}}}else for(o=0;o<n.length;o++)n[o].Y=r}}))}(r),i=[],S.tc(I,(function(e){if(e.parent.X&&e.Y&&e.W){i.push(e);for(var t=e.parent;t!==I&&(t.open||0===t.opacity);)t=t.parent;t!==I&&.02>Math.abs(t.scale-e.scale)&&(e.scale=Math.min(e.scale,t.scale))}})),e(I,0,"flattened"===q.mb?-1:1),i.sort((function(e,t){return e.sb-t.sb})),l())t=i,n=null;else{var u={},c={},f="none"!=q.ld&&q.$a<q.ab/2,d=q.$a<q.yc/2+q.kd*q.De.a;S.L(I,(function(e){if(e.W&&!e.description&&(e.Z||e.N||e.Fc&&e.parent.X&&e.Ma)){var t,n,i,r=[e],o=e.J||e.parent.m;if(f)for(t=0;t<o.length;t++)(n=o[t])&&r.push(n);else if(d)if(!e.selected&&e.Sa){for(n=!0,t=0;t<o.length;t++)o[t]?r.push(o[t]):n=!1;!n&&1<e.level&&r.push(e.parent)}else for(t=0;t<o.length;t++)(n=o[t])&&n.selected&&r.push(n);for(t=e.parent;t!=I;)t.selected&&(i=t),t=t.parent;for(i&&r.push(i),t=0;t<r.length;t++){for(e=(i=r[t]).parent;e&&e!==I;)0<e.opacity&&(i=e),e=e.parent;c[i.id]=!0,S.za(i,(function(e){u[e.id]=!0}))}}})),t=i.filter((function(e){return u[e.id]})),n=t.filter((function(e){return c[e.id]}))}})),function(){var e=!1;q.Gf&&S.L(I,(function(t){if(t.W&&0!==t.pa.a&&1!==t.pa.a)return e=!0,!1})),e?(S.sc(I,(function(e){if(e.W&&(e.opacity!==e.Jc||e.Fa)){var t=e.m;if(t){for(var n=0,i=t.length-1;0<=i;i--)n=Math.max(n,t[i].Ec);e.Ec=n+e.opacity*e.pa.a}else e.Ec=e.opacity*e.pa.a}})),S.L(I,(function(e){if(e.W&&(e.opacity!==e.Jc||e.Fa)){for(var t=e.Ec,n=e;(n=n.parent)&&n!==I;)t+=n.opacity*n.pa.a*q.Ef;e.$c=0<t?1-Math.pow(1-e.pa.a,1/t):0,e.Jc=e.opacity}}))):S.L(I,(function(e){e.W&&(e.$c=1,e.Jc=-1)}))}(),{ag:t,$f:n,Y:i}}function l(){var e=I.Z||I.N||"none"==q.Ke;if(!e&&!I.empty()){var t=I.m[0].scale;S.L(I,(function(n){if(n.W&&n.Y&&n.scale!==t)return e=!0,!1}))}return!e&&0<q.xe&&1!=q.Pa&&S.L(I,(function(t){if(t.W&&0<t.ja)return e=!0,!1})),"accurate"==q.Ke&&(!(e=(e=e||0===q.$a)||"none"!=q.ld&&q.$a<q.ab/2)&&q.$a<q.yc/2+q.kd*q.De.a&&S.L(I,(function(t){if(t.W&&(t.selected&&!t.Sa||!t.selected&&t.Sa))return e=!0,!1}))),e}function h(){function e(e,n,i,r,o){function a(e,t,n,i,r){return e[i]&&(t-=n*p[i],e[i]=!1,r&&(t+=n*p[r],e[r]=!0)),t}switch(e=y.extend({},e),i){case"never":e.labelPlainFill=!1;break;case"always":case"auto":e.labelPlainFill=!0}if(q.xc)switch(r){case"never":e.contentDecoration=!1;break;case"always":case"auto":e.contentDecoration=!0}else e.contentDecoration=!1;var s=0;return y.Aa(e,(function(e,t){e&&(s+=n*p["contentDecoration"===t?"labelPlainFill":t])})),e.polygonExposureShadow=t,(s+=2*p.polygonExposureShadow)<=o||(s=a(e,s,2,"polygonExposureShadow"))<=o||(s=a(e,s,n,"polygonGradientFill","polygonPlainFill"))<=o||(s=a(e,s,n,"polygonGradientStroke"))<=o||(s=a(e,s,n,"polygonPlainStroke"))<=o||"auto"===r&&(s=a(e,s,n,"contentDecoration"))<=o||"auto"===i&&(s=a(e,s,n,"labelPlainFill")),e}var t=b===v,n=0,i=0;S.ne(I,(function(e){var t=1;S.L(e,(function(){t++})),n+=t,i=Math.max(i,t)}));var r={};switch(q.Ug){case"plain":r.polygonPlainFill=!0;break;case"gradient":r.polygonPlainFill=!t,r.polygonGradientFill=t}switch(q.ld){case"plain":r.polygonPlainStroke=!0;break;case"gradient":r.polygonPlainStroke=!t,r.polygonGradientStroke=t}P=e(r,n,q.gj,q.ej,q.fj),R=e(r,2*i,"always","always",q.Eg),F=e(r,n,"always","always",q.Dg)}function f(e){return function(t,n){return t===b?!0===P[e]:!0===(n?R:F)[e]}}function d(e,t){return function(n,i){return e(n,i)&&t(n,i)}}var p,g,b,v,w,_,x,A,T,k,z,D,B,L,E,j,O,I,N,P,F,R,G=t.Se()?50:1e4,H=new X(e),U=new Q(e),q=e.options;e.j.subscribe("stage:initialized",(function(e,t,n,i){D=n,B=i,g=(L=e).dc("wireframe",q.nb,!1),v=g.getContext("2d"),w=new o(v),_=L.dc("hifi",q.B,!1),A=_.getContext("2d"),T=new o(A),b=v,x=A,v.B=q.nb,w.B=q.nb,A.B=q.B,T.B=q.B,k=L.dc("tmp",Math.max(q.B,q.nb),!0),(z=k.getContext("2d")).B=1,[v,A,z].forEach((function(e){e.scale(e.B,e.B)}))})),e.j.subscribe("stage:resized",(function(e,t,n,i){D=n,B=i,[v,A,z].forEach((function(e){e.scale(e.B,e.B)}))})),e.j.subscribe("model:loaded",(function(t){N=!0,function e(t){var n=0;if(!t.empty()){for(var i=t.m,r=i.length-1;0<=r;r--)n=Math.max(n,e(i[r]));n+=1}return t.Sf=n}(I=t),h(),e.j.D("render:renderers:resolved",P,R,F)}));var V="groupFillType groupStrokeType wireframeDrawMaxDuration wireframeLabelDrawing wireframeContentDecorationDrawing finalCompleteDrawMaxDuration finalIncrementalDrawMaxDuration groupContentDecorator".split(" "),J=["groupLabelLightColor","groupLabelDarkColor","groupLabelColorThreshold","groupUnexposureLabelColorThreshold"];e.j.subscribe("options:changed",(function(e){function t(e,t,n,i){L.Hi(e,n),t.B=n,i&&t.scale(n,n)}e.dataObject||(y.bb(e,V)&&h(),y.bb(e,J)&&S.L(I,(function(e){e.hd=-1})));var n=y.has(e,"pixelRatio");e=y.has(e,"wireframePixelRatio"),(n||e)&&(n&&t(_,x,q.B,!0),e&&t(g,b,q.nb,!0),t(k,z,Math.max(q.B,q.nb),!1))})),e.j.subscribe("zoom:initialized",(function(e){E=e})),e.j.subscribe("timeline:initialized",(function(e){j=e})),e.j.subscribe("api:initialized",(function(e){O=e}));var ee=[{id:"offsetPolygon",Kd:function(e){if((e.selected||0<e.opacity&&!1===e.open||!e.X)&&e.aa.Ga()){var t=e.aa;if(t.clear(),e.$){var n=e.$,i=q.Gg;0<i?s.Ti(t,n,e.parent.O.r/32,Math.min(1,i*Math.pow(1-q.Hg*i,e.Sf))):s.Ud(t,n)}e.Dd=!0}}},{id:"label",Kd:function(e){e.Ma&&e.Fc&&H.u(e)}},{id:"custom",Kd:function(t,n){if(t.$&&(0<t.opacity&&(!1===t.open||!0===t.selected)||!t.X)&&t.oc&&e.options.xc&&!t.attribution){var i={};O.Xc(i,t),O.Yc(i,t),O.Wc(i,t,!0),i.context=t.Qb,i.polygonContext=t.aa,i.labelContext=t.Bc,i.shapeDirty=t.Dd,i.viewportScale=n,n={groupLabelDrawn:!0,groupPolygonDrawn:!0},e.options.Kg(e.Cd,i,n),t.Te=n.groupLabelDrawn,t.Ed=n.groupPolygonDrawn,t.Dd=!1,t.oc=!1}}}].reverse(),te=[new function(e){var t=Array(e.length);this.Nd=function(n,i,r){if(0!==n.length){var o,a=[],s=n[0].sb;for(o=0;o<n.length;o++){var u=n[o];u.sb!==s&&(a.push(o),s=u.sb)}a.push(o);for(var l=s=0;l<a.length;l++){for(var c=a[l],h=e.length-1;0<=h;h--)if(t[h]){var f=e[h];for(i.save(),o=s;o<c;o++)u=n[o],i.save(),u.Ib(i),f.kb.call(f,u,i,r),i.restore();f.Wa.call(f,i,r),i.restore()}s=c}}},this.na=function(n,i){for(var r=!1,o=e.length-1;0<=o;o--)t[o]=e[o].na(n,i),r|=t[o];return r},this.before=function(n,i){for(var r=e.length-1;0<=r;r--)if(t[r]){var o=e[r];o.before.call(o,n,i)}},this.after=function(n){for(var i=e.length-1;0<=i;i--)if(t[i]){var r=e[i];r.after.call(r,n)}},this.ng=function(n){for(var i=e.length-1;0<=i;i--){var r=e[i];if(t[i])for(var o=r.Ra.length-1;0<=o;o--)n[r.Ra[o]]=!0}}}([{Ra:["offsetPolygon"],na:f("polygonExposureShadow"),before:function(e){z.save(),z.scale(e.B,e.B)},after:function(){z.restore()},rb:function(){},Wa:function(e){this.Rf&&(this.Rf=!1,e.save(),e.setTransform(1,0,0,1,0,0),e.drawImage(k,0,0,e.canvas.width,e.canvas.height,0,0,e.canvas.width,e.canvas.height),e.restore(),z.save(),z.setTransform(1,0,0,1,0,0),z.clearRect(0,0,k.width,k.height),z.restore())},kb:function(e,t,n){if(!(e.open&&e.X||e.aa.Ga())){var i=q.xe*e.opacity*e.ja*("flattened"===q.mb?1-e.parent.ja:(1-e.Cb)*e.parent.Cb)*(1.1<=q.Pa?1:(q.Pa-1)/.1);0<i&&(z.save(),z.beginPath(),e.Ib(z),e.aa.Na(z),z.shadowBlur=n*t.B*i,z.shadowColor=q.Mg,z.fillStyle="rgba(0, 0, 0, 1)",z.globalCompositeOperation="source-over",z.globalAlpha=e.opacity,z.fill(),z.shadowBlur=0,z.shadowColor="transparent",z.globalCompositeOperation="destination-out",z.fill(),z.restore(),this.Rf=!0)}}},{Ra:["offsetPolygon"],na:function(){return!0},before:function(){function e(e){var n=e.pa,i=e.ub,r=e.selected,o=(n.h+(i?q.Yg:0)+(r?q.ph:0))%360,a=t(n.l*e.va+(i?q.Zg:0)+(r?q.qh:0));return n=t(n.s*e.saturation+(i?q.$g:0)+(r?q.rh:0)),(e=e.we).h=o,e.s=n,e.l=a,e}function t(e){return 100<e?100:0>e?0:e}var n=[{type:"fill",na:f("polygonPlainFill"),Pc:function(t,n){n.fillStyle=c.H(e(t))}},{type:"fill",na:f("polygonGradientFill"),Pc:function(n,i){var r=n.O.r,o=e(n);r=i.createRadialGradient(n.x,n.y,0,n.x,n.y,r*q.Qg);var a=o.l,s=q.Og;r.addColorStop(0,c.i((o.h+q.Ng)%360,t(o.s+q.Pg),t(a+s))),a=o.l,s=q.Sg,r.addColorStop(1,c.i((o.h+q.Rg)%360,t(o.s+q.Tg),t(a+s))),n.aa.Na(i),i.fillStyle=r}},{type:"stroke",na:d(f("polygonPlainStroke"),(function(){return 0<q.ab})),Pc:function(e,n){var i=e.pa,r=e.ub,o=e.selected,a=(i.h+q.He+(r?q.ye:0)+(o?q.Ee:0))%360,s=t(i.s*e.saturation+q.Je+(r?q.Ae:0)+(o?q.Ge:0));i=t(i.l*e.va+q.Ie+(r?q.ze:0)+(o?q.Fe:0)),n.strokeStyle=c.i(a,s,i),n.lineWidth=q.ab*Math.pow(q.La,e.level-1)}},{type:"stroke",na:d(f("polygonGradientStroke"),(function(){return 0<q.ab})),Pc:function(e,n){var i=e.O.r*q.xh,r=e.pa,o=Math.PI*q.th/180;i=n.createLinearGradient(e.x+i*Math.cos(o),e.y+i*Math.sin(o),e.x+i*Math.cos(o+Math.PI),e.y+i*Math.sin(o+Math.PI));var a=e.ub,s=e.selected;o=(r.h+q.He+(a?q.ye:0)+(s?q.Ee:0))%360;var u=t(r.s*e.saturation+q.Je+(a?q.Ae:0)+(s?q.Ge:0));r=t(r.l*e.va+q.Ie+(a?q.ze:0)+(s?q.Fe:0)),a=q.vh,i.addColorStop(0,c.i((o+q.uh)%360,t(u+q.wh),t(r+a))),a=q.zh,i.addColorStop(1,c.i((o+q.yh)%360,t(u+q.Ah),t(r+a))),n.strokeStyle=i,n.lineWidth=q.ab*Math.pow(q.La,e.level-1)}}],i=Array(n.length);return function(e,t){for(var r=n.length-1;0<=r;r--)i[r]=n[r].na(e,t);this.Xi=n,this.vg=i}}(),after:function(){},rb:function(){},Wa:function(){},kb:function(e,t){if(!(!e.Ed||(0===e.opacity||e.open)&&e.X||e.aa.Ga()||!q.je&&e.description)){var n=this.Xi,i=this.vg;t.beginPath(),e.aa.Na(t);for(var r=!1,o=!1,a=n.length-1;0<=a;a--){var s=n[a];if(i[a])switch(s.Pc(e,t),s.type){case"fill":r=!0;break;case"stroke":o=!0}}n=(e.X?e.opacity:1)*e.pa.a,i=!e.empty(),a=q.Gf?e.$c:1,r&&(e=i&&e.X&&e.R&&e.m[0].W?1-e.m.reduce((function(e,t){return e+t.ra*t.Hd}),0)/e.m.length*(1-q.Ef):1,t.globalAlpha=n*e*a,W(t)),o&&(t.globalAlpha=n*(i?q.Xh:1)*a,t.closePath(),Z(t),t.stroke())}}},{Ra:["offsetPolygon"],na:function(){return 0<q.yc},before:function(){},after:function(){},rb:function(){},Wa:function(){},kb:function(e,t,n){if(e.Ed&&e.selected&&!e.aa.Ga()){t.globalAlpha=e.Da,t.beginPath();var i=Math.pow(q.La,e.level-1);t.lineWidth=q.yc*i,t.strokeStyle=q.sh;var r=q.kd;0<r&&(t.shadowBlur=r*i*n*t.B,t.shadowColor=q.Ce),e.aa.Na(t),t.closePath(),t.stroke()}}},{Ra:[],na:function(){return!0},before:function(){},after:function(){},rb:function(){},Wa:function(){},kb:function(e,t){e.attribution&&!e.aa.Ga()&&function(n,i,r){var o=M.Ka(e.$,e.O,n/i);o=Math.min(Math.min(.9*o,.5*e.F.o)/i,.5*e.F.w/n),t.save(),t.translate(e.x,e.y),t.globalAlpha=e.opacity*e.ca,t.scale(o,o),t.translate(-n/2,-i/2),r(t),t.restore()}(Y.i.width,Y.i.height,(function(e){Y.u(e,q.ae)}))}},{Ra:[],na:function(e,t){return function(n,i){return e(n,i)||t(n,i)}}(f("labelPlainFill"),d(f("contentDecoration"),(function(){return q.xc}))),before:function(){},after:function(){},rb:function(){},Wa:function(){},kb:function(e,t,n){(0<e.opacity&&0<e.ca&&!e.open||!e.X)&&!e.aa.Ga()&&(e.Cc=e.oa&&e.oa.ka&&q.B*e.oa.fontSize*e.scale*n>=q.mh,"auto"===e.pd?!q.je&&e.description?e.fb=e.parent.fb:(t=(n=e.we).h+(n.s<<9)+(n.l<<16),e.hd!==t&&(n=c.T(n),e.fb=n>(0>e.ja?q.Bh:q.ah)?q.bh:q.lh,e.hd=t)):e.fb=e.pd)}},{Ra:["custom"],na:d(f("contentDecoration"),(function(){return q.xc})),before:function(){},after:function(){},rb:function(){},Wa:function(){},kb:function(e,t){!(0<e.opacity&&0<e.ca&&!e.open||!e.X)||e.Qb.Ga()||e.aa.Ga()||(e.Cc||void 0===e.oa?(t.globalAlpha=e.ca*(e.X?e.opacity:1)*(e.empty()?1:q.Ff),t.fillStyle=e.fb,t.strokeStyle=e.fb,e.Qb.Na(t)):i(e,t))}},{Ra:["label"],na:f("labelPlainFill"),before:function(){},after:function(){},rb:function(){},Wa:function(){},kb:function(e,t,n){e.Te&&e.Fc&&(0<e.opacity&&0<e.ca&&!e.open||!e.X)&&!e.aa.Ga()&&e.oa&&(t.fillStyle=e.fb,t.globalAlpha=e.ca*(e.X?e.opacity:1)*(e.empty()?1:q.Ff),e.Cc?K(e,t,n):i(e,t))}}].reverse())];this.M=function(){p=C((function(){return a.estimate()}),"CarrotSearchFoamTree",12096e5)({version:"3.5.0",build:"bugfix/3.5.x/e3b91c8e",brandingAllowed:!1}),U.M()},this.clear=function(){b.clearRect(0,0,D,B),x.clearRect(0,0,D,B)};var ne=!1,ie=void 0;this.u=function(e){ne?ie=e:e()},this.Nd=function(){function e(){window.clearTimeout(t),ne=!0,t=setTimeout((function(){if(ne=!1,function(){if(q.B!==q.nb)return!0;var e="polygonPlainFill polygonPlainStroke polygonGradientFill polygonGradientStroke labelPlainFill contentDecoration".split(" ");S.L(I,(function(t){if(t.W&&t.U)return e.push("polygonExposureShadow"),!1}));for(var t=e.length-1;0<=t;t--){var n=e[t];if(!!P[n]!=!!R[n])return!0}return!1}()){var e=!l();r(null,i.Y,x,e),y.defer((function(){re.Ui(),ie&&(ie(),ie=void 0)}))}else ie&&(ie(),ie=void 0)}),Math.max(q.hj,3*n.Wf.sd,3*n.Wf.rd))}var t,i;return function(t){$(U);var n=null!==(i=u()).$f,o=0<L.$b("hifi"),a=o&&(n||!t);t=n||N||!t,N=!1,o&&!a&&re.Vi(),r(i.$f,i.ag,a?x:b,t),S.za(I,(function(e){e.Z=!1,e.N=!1,e.Sa=!1})),a||e(),q.Af(n)}}(),this.i=function(e){e=e||{},$(U),I.N=!0;var t=u(),n=q.B;try{var i=y.I(e.pixelRatio,q.B);q.B=i;var a=L.dc("export",i,!0),s=a.getContext("2d");b===w&&(s=new o(s)),s.scale(i,i);var l=y.has(e,"backgroundColor");l&&(s.save(),s.fillStyle=e.backgroundColor,s.fillRect(0,0,D,B),s.restore()),r(l?[]:null,t.ag,s,!0)}finally{q.B=n}return a.toDataURL(y.I(e.format,"image/png"),y.I(e.quality,.8))};var re=function(){function e(e,t,i,r,o,a){function s(e,t,n,i){return j.K.A({opacity:L.$b(e)}).fa({duration:n,P:{opacity:{end:t,easing:i}},ba:function(){L.$b(e,this.opacity)}}).done()}var u=y.od(L.$b(e),t),l=y.od(L.$b(r),o);if(!u||!l){for(var c=n.length-1;0<=c;c--)n[c].stop();return n=[],u||n.push(s(e,t,i,m.Gb)),l||n.push(s(r,o,a,m.Tf)),j.K.A({}).Qa(n).start()}}var t,n=[];return{Vi:function(){q.Zc?1!==g.style.opacity&&(g.style.visibility="visible",_.style.visibility="hidden",g.style.opacity=1,_.style.opacity=0):t&&t.xb()||(t=e("wireframe",1,q.se,"hifi",0,q.se))},Ui:function(){q.Zc?(_.style.visibility="visible",g.style.visibility="hidden",g.style.opacity=0,_.style.opacity=1):e("hifi",1,q.dg,"wireframe",0,q.dg)}}}();return $=function(e){e.apply()},W=function(e){e.fill()},Z=function(e){e.stroke()},this}function X(e){function t(e){void 0!==e.groupLabelFontFamily&&(r.fontFamily=e.groupLabelFontFamily),void 0!==e.groupLabelFontStyle&&(r.fontStyle=e.groupLabelFontStyle),void 0!==e.groupLabelFontVariant&&(r.fontVariant=e.groupLabelFontVariant),void 0!==e.groupLabelFontWeight&&(r.fontWeight=e.groupLabelFontWeight),void 0!==e.groupLabelLineHeight&&(r.lineHeight=e.groupLabelLineHeight),void 0!==e.groupLabelHorizontalPadding&&(r.cb=e.groupLabelHorizontalPadding),void 0!==e.groupLabelVerticalPadding&&(r.Ua=e.groupLabelVerticalPadding),void 0!==e.groupLabelMaxTotalHeight&&(r.ib=e.groupLabelMaxTotalHeight),void 0!==e.groupLabelMaxFontSize&&(r.hb=e.groupLabelMaxFontSize)}var n,i=e.options,r={},o={},a={groupLabel:""},s={};e.j.subscribe("api:initialized",(function(e){n=e})),e.j.subscribe("options:changed",t),t(e.Cd),this.i=function(e){if(!e.$)return!1;var t=e.group.label;return i.eh&&!e.attribution&&(a.labelText=t,n.nc(i.dh,e,a),t=a.labelText),e.Ue=t,e.qd!==t},this.u=function(e){var t=e.Ue;if(e.qd=t,e.Bc.clear(),e.oa=void 0,e.$&&!y.Ne(t)&&("flattened"!==i.mb||e.empty()||!e.R||!e.m[0].W)){var a=B,u=a.de;if(i.kh){s.fontFamily=r.fontFamily,s.fontStyle=r.fontStyle,s.fontVariant=r.fontVariant,s.fontWeight=r.fontWeight,s.lineHeight=r.lineHeight,s.horizontalPadding=r.cb,s.verticalPadding=r.Ua,s.maxTotalTextHeight=r.ib,s.maxFontSize=r.hb,n.nc(i.jh,e,s),o.fontFamily=s.fontFamily,o.fontStyle=s.fontStyle,o.fontVariant=s.fontVariant,o.fontWeight=s.fontWeight,o.lineHeight=s.lineHeight,o.cb=s.horizontalPadding,o.Ua=s.verticalPadding,o.ib=s.maxTotalTextHeight,o.hb=s.maxFontSize;var l=o}else l=r;e.oa=u.call(a,l,e.Bc,t,e.$,e.F,e.O,!1,!1,e.Mh,e.O.ha,i.nh,e.Ma)}e.Ma=!1},K=this.H=function(e,t){e.Bc.Na(t)}}function Q(e){function t(e,t){var n,i=e.m,r=i.length,a=o.O.r;for(n=0;n<r;n++){var s=i[n];s.tb=(180*(Math.atan2(s.x-e.x,s.y-e.y)+t)/Math.PI+180)/360,s.wc=Math.min(1,Math.sqrt(M.i(s,e))/a)}}function n(e,t){var n=(e=e.m).length;if(1===n||2===n&&e[0].description)e[0].tb=.5;else{var i=0,r=Number.MAX_VALUE,o=Math.sin(t),a=Math.cos(t);for(t=0;t<n;t++){var s=e[t],u=s.x*o+s.y*a;i<u&&(i=u),r>u&&(r=u),s.tb=u,s.wc=1}for(t=0;t<n;t++)(s=e[t]).tb=(s.tb-r)/(i-r)}}function i(e,t,n,i){return(t=t[i])+(n[i]-t)*e}var r,o,a={radial:t,linear:n},s=e.options,u={groupColor:null,labelColor:null};return e.j.subscribe("model:loaded",(function(e){o=e})),e.j.subscribe("api:initialized",(function(e){r=e})),this.M=function(){},this.apply=function(){function e(e,t,n,i){var r=l(e+n*i);return r+t*((e=l(e-n*(1-i)))-r)}function l(e){return 0>e?0:100<e?100:e}var h=a[s.vi]||t,f=n,d=s.Fi,p=s.yi,g=s.Ig,b=s.Jg,v=s.zi,m=s.Di;!function t(n){if(n.R&&n.xa){var o,a=n.m;if(n.Z||n.Fa||b){for(0===n.level?h(n,s.wi*Math.PI/180):f(n,s.Ai*Math.PI/180),o=a.length-1;0<=o;o--){var l=a[o];l.Fa=!0;var C=l.tb,w=l.ve;if(0===n.level)var _=i(C,d,p,"h"),x=(m+(1-m)*l.wc)*i(C,d,p,"s"),A=(1+(0>l.ja?v*(l.ja+1):v)*(1-l.wc))*i(C,d,p,"l"),S=i(C,d,p,"a");else _=(A=n.pa).h,x=A.s,A=e(A.l,C,s.Bi,s.Ci),S=n.ve.a;w.h=_,w.s=x,w.l=A,w.a=S,_=l.pa,l.attribution?(_.h=0,_.s=0,_.l="light"==s.ae?90:10,_.a=1):(_.h=w.h,_.s=w.s,_.l=w.l,_.a=w.a),b&&!l.attribution&&(u.groupColor=_,u.labelColor="auto",r.nc(g,l,u,(function(e){e.ratio=C})),l.pa=c.u(u.groupColor),l.pa.a=y.has(u.groupColor,"a")?u.groupColor.a:1,"auto"!==u.labelColor&&(l.pd=c.wa(u.labelColor)))}n.Fa=!1}for(o=a.length-1;0<=o;o--)t(a[o])}}(o)},this}function ee(){this.kc=this.Yd=this.hc=this.Vf=this.w=this.cg=this.weight=this.y=this.x=this.id=0,this.C=this.parent=this.m=null,this.F={x:0,y:0,w:0,o:0},this.J=null,this.qd=this.Ue=void 0,this.Sc=!1,this.wc=this.tb=0,this.ve={h:0,s:0,l:0,a:0,model:"hsla"},this.pa={h:0,s:0,l:0,a:0,model:"hsla"},this.we={h:0,s:0,l:0,model:"hsl"},this.hd=-1,this.pd="auto",this.fb="#000",this.Sf=this.level=this.nd=this.index=0,this.attribution=!1,this.ha=this.Ze=0,this.Y=!1,this.$=null,this.O={x:0,y:0,ha:0,r:0},this.Fd=this.G=null,this.Fc=this.W=this.Sa=this.oc=this.Vd=this.Dd=this.Ma=this.Fa=this.N=this.Z=this.Ea=this.xa=this.R=this.Ia=!1,this.saturation=this.va=this.Da=this.ca=this.opacity=this.scale=1,this.ra=0,this.Hd=1,this.Cb=this.ja=this.yb=0,this.description=this.selected=this.ub=this.Bd=this.open=this.U=!1,this.sb=0,this.Te=this.Ed=this.X=!0,this.oa=void 0,this.Cc=!1,this.Bc=new r,this.aa=new r,this.Qb=new r,this.Mh=B.Zh(),this.Ec=0,this.$c=1,this.Jc=-1,this.empty=function(){return!this.m||0===this.m.length};var e=[];this.mc=function(t){e.push(t)},this.Nc=function(t){y.If(e,t)};var t={scale:1};this.vd=function(){var n=!1;this.scale=1;for(var i=0;i<e.length;i++)n=e[i].Ve(this,t)||n,this.scale*=t.scale;return n},this.Ib=function(t){for(var n=0;n<e.length;n++)e[n].Ib(this,t)},this.transformPoint=function(t,n){for(n.x=t.x,n.y=t.y,t=0;t<e.length;t++)e[t].transformPoint(this,n,n);return n},this.Jb=function(t,n){for(n.x=t.x,n.y=t.y,t=0;t<e.length;t++)e[t].Jb(this,n,n);return n};var n=[];this.qb=function(e){n.push(e)},this.Mc=function(e){y.If(n,e)};var i={opacity:1,saturation:1,va:1,ca:1,Da:1};this.cc=function(){if(0!==n.length){this.Da=this.ca=this.va=this.saturation=this.opacity=1;for(var e=n.length-1;0<=e;e--)(0,n[e])(this,i),this.opacity*=i.opacity,this.va*=i.va,this.saturation*=i.saturation,this.ca*=i.ca,this.Da*=i.Da}}}function te(e,t){return t.weight>e.weight?1:t.weight<e.weight?-1:e.index-t.index}function ne(e){var t,n,i,r,o,a,s=this,u=e.options;e.j.subscribe("stage:initialized",(function(o,a,l,c){i=l,r=c,t=o.dc("titlebar",u.B,!1),(n=t.getContext("2d")).B=u.B,n.scale(n.B,n.B),e.j.D("titlebar:initialized",s)})),e.j.subscribe("stage:resized",(function(e,t,o,a){i=o,r=a,n.scale(n.B,n.B)})),e.j.subscribe("zoom:initialized",(function(e){a=e})),e.j.subscribe("api:initialized",(function(e){o=e})),e.j.subscribe("model:loaded",(function(){n.clearRect(0,0,i,r)})),this.update=function(e){if(n.clearRect(0,0,i,r),e){!e.empty()&&e.m[0].description&&(e=e.m[0]);var t=u.bj,s=u.aj,l=Math.min(r/2,u.Wd+2*t),c=l-2*t,h=i-2*s;if(!(0>=c||0>=h)){var f=e.Cc?e.oa.fontSize*e.scale*a.scale():0,d={titleBarText:e.qd,titleBarTextColor:u.Zf,titleBarBackgroundColor:u.Yf,titleBarMaxFontSize:u.Wd,titleBarShown:f<u.Sh};if(e.attribution)var p=x("B`ssnu!Rd`sbi!Gn`lUsdd!whrt`mh{`uhno/!Busm,bmhbj!uid!mnfn!un!fn!un!iuuqr;..b`ssnurd`sbi/bnl.gn`lusdd!gns!lnsd!edu`hmr/");else o.nc(u.Yi,e,d,(function(e){e.titleBarWidth=h,e.titleBarHeight=c,e.labelFontSize=f,e.viewportScale=a.scale()})),p=d.titleBarText;p&&0!==p.length&&d.titleBarShown&&(t={x:s,y:(e=a.Uc(e.transformPoint(e,{}),{}).y>r/2)?t:r-l+t,w:h,o:c},s=M.H(t),n.fillStyle=u.Yf,n.fillRect(0,e?0:r-l,i,l),n.fillStyle=u.Zf,B.re({fontFamily:u.Zi||u.fh,fontStyle:u.Aj||u.gh,fontWeight:u.Cj||u.ih,fontVariant:u.Bj||u.hh,hb:u.Wd,Gc:u.$i,cb:0,Ua:0,ib:1},n,p,s,t,{x:t.x+t.w/2,y:t.y+t.o/2},!0,!0).ka||n.clearRect(0,0,i,r))}}}}function ie(e){function t(e,t,n){return C=!0,u&&u.stop(),c&&c.stop(),a(p.reset(e),t,n).then((function(){C=!1}))}function n(t){p.update(t),f.N=!0,e.j.D("foamtree:dirty",!0)}function i(e,t){return p.i((0!==p.u()?.35:1)*e,(0!==p.H()?.35:1)*t)}function r(){if(1===g.ratio){var e=Math.round(1e4*p.u())/1e4;0!==e&&(b.Id=e,u=d.K.jc(b).fa({duration:500,P:{x:{start:e,end:0,easing:m.Gb}},ba:function(){p.i(b.x-b.Id,0),n(1),b.Id=b.x}}).start())}}function o(){if(1===g.ratio){var e=Math.round(1e4*p.H())/1e4;0!==e&&(v.Jd=e,c=d.K.jc(v).fa({duration:500,P:{y:{start:e,end:0,easing:m.Gb}},ba:function(){p.i(0,v.y-v.Jd),n(1),v.Jd=v.y}}).start())}}function a(e,t,i){return e?d.K.jc(g).fa({duration:void 0===t?700:t,P:{ratio:{start:0,end:1,easing:i||m.Uf}},ba:function(){n(g.ratio)}}).Ta():(new h).resolve().promise()}function s(e){return function(){return C?(new h).resolve().promise():e.apply(this,arguments)}}var u,c,f,d,p=new l(e),g={ratio:1},b={ke:0,x:0,Id:0},v={le:0,y:0,Jd:0},y=this,C=!1;e.j.subscribe("model:loaded",(function(e){f=e,p.reset(!1),p.update(1)})),e.j.subscribe("timeline:initialized",(function(e){d=e})),this.M=function(){e.j.D("zoom:initialized",this)},this.reset=function(e,n){return p.Fb(1),t(!0,e,n)},this.normalize=s((function(e,n){p.pc(1)?t(!1,e,n):y.$e()})),this.$e=function(){r(),o()},this.bg=s((function(e,t,n,i){return y.ic(e.F,t,n,i)})),this.Nb=s((function(e,t,n,i){return a(p.Nb(e,t),n,i)})),this.ic=s((function(e,t,n,i){return a(p.ic(e,t),n,i)})),this.cj=s((function(e,t){p.ic(e,t)&&n(1)})),this.Uh=s((function(e,t){1===g.ratio&&i(e,t)&&n(1)})),this.qg=s((function(e,t){p.Nb(e,t)&&n(1)})),this.pg=s((function(e,t,r,o){e=0|p.Nb(e,t),(e|=i(r,o))&&n(1)})),this.Vh=s((function(e,t,a){1===g.ratio&&(u=d.K.jc(b).fa({duration:e/.03,P:{ke:{start:t,end:0,easing:m.Gb}},ba:function(){p.i(b.ke,0)&&n(1),r()}}).start(),c=d.K.jc(v).fa({duration:e/.03,P:{le:{start:a,end:0,easing:m.Gb}},ba:function(){i(0,v.le)&&n(1),o()}}).start())})),this.Wh=function(){u&&0===p.u()&&u.stop(),c&&0===p.H()&&c.stop()},this.rc=function(e,t){p.rc(e,t)},this.Fb=function(e){return p.Fb(e)},this.pc=function(e){return p.pc(e)},this.zd=function(){return p.zd()},this.absolute=function(e,t){return p.absolute(e,t)},this.Uc=function(e,t){return p.Uc(e,t)},this.scale=function(){return p.scale()},this.i=function(e){return p.T(e)},this.content=function(e,t,n,i){p.content(e,t,n,i)}}function re(t,r,o){function a(e){var t=[];return S.L(v,(function(n){e(n)&&t.push(n.group)})),{groups:t}}function s(e,t){var n=w.options,i=n.Mi,r=n.Li;n=n.Od;var o=0<i+r?n:0,a=[];return D.u(e,D.i(e,w.options.Qd),(function(e,n,s){n="groups"===w.options.Pd?s:n,e.m&&(e=T.K.A(e).wait(o*(r+i*n)).call(t).done(),a.push(e))})),T.K.A({}).Qa(a).Ta()}function l(e){ce||(ce=!0,x.once((function(){ce=!1,w.j.D("repaint:before"),H.Nd(this.og)}),{og:e}))}function c(e){function t(e,r){var o=e.W;if(e.W=r<=n,e.Fc=r<=i,e.W!==o&&S.me(e,(function(e){e.Vd=!0})),e.open||e.Va||r++,e=e.m)for(o=0;o<e.length;o++)t(e[o],r)}var n=w.options.We,i=Math.min(w.options.We,w.options.Ph);if(e)for(var r=0;r<e.length;r++){var o=e[r];t(o,b(o))}else t(v,0)}function p(e,t){var n=[];for((e=g(e,t)).Th&&w.j.D("model:childrenAttached",S.uc(v)),e.Gi&&I.complete((function(e){ue.eb(e),n.push(e)})),t=e=0;t<n.length;t++){var i=n[t];i.m&&(e+=i.m.length),i.xa=!0,W.i(i)}return e}function g(e,t){function n(e,t){var n=!e.attribution&&t-(e.Va?1:0)<o;s=s||n,e.Ia=e.Ia||n,e.open||e.Va||t++;var r=e.m;if(!r&&n&&(a=j.T(e)||a,r=e.m,u&&(e.Ma=!0)),r)for(e=0;e<r.length;e++)i.push(r[e],t)}var i,o=t||w.options.Qh,a=!1,s=!1,u="flattened"===r.mb;for(i=e?e.reduce((function(e,t){return e.push(t,1),e}),[]):[v,1];0<i.length;)n(i.shift(),i.shift());return{Th:a,Gi:s}}function b(e){for(var t=0;e.parent;)e.open||e.Va||t++,e=e.parent;return t}var v,C=this,w={j:new _,options:r,Cd:o},x=new i,T=new A(x),k=n.create(),z=new u(w),B=new ie(w),L=new E(w),j=new O(w.options),I=new U(w),H=new J(w,x),q=new G(w);new ne(w);var V=new N(w),W=new P(w),Z=new F(w),$=new R(w);w.j.subscribe("stage:initialized",(function(e,t,n,i){re.Le(n,i)})),w.j.subscribe("stage:resized",(function(e,t,n,i){re.Ki(e,t,n,i)})),w.j.subscribe("foamtree:attachChildren",p),w.j.subscribe("openclose:changing",c),w.j.subscribe("interaction:reset",(function(){le(!0)})),w.j.subscribe("foamtree:dirty",l),this.M=function(){w.j.D("timeline:initialized",T),v=j.M(),z.M(t),L.M(),H.M(),q.M(),V.M(),W.M(),B.M(),Z.M(),$.M()},this.Za=function(){T.i(),se.stop(),x.i(),z.Za()};var K="groupLabelFontFamily groupLabelFontStyle groupLabelFontVariant groupLabelFontWeight groupLabelLineHeight groupLabelHorizontalPadding groupLabelVerticalPadding groupLabelDottingThreshold groupLabelMaxTotalHeight groupLabelMinFontSize groupLabelMaxFontSize groupLabelDecorator".split(" "),Y="rainbowColorDistribution rainbowLightnessDistribution rainbowColorDistributionAngle rainbowLightnessDistributionAngle rainbowColorModelStartPoint rainbowLightnessCorrection rainbowSaturationCorrection rainbowStartColor rainbowEndColor rainbowHueShift rainbowHueShiftCenter rainbowSaturationShift rainbowSaturationShiftCenter rainbowLightnessShift rainbowLightnessShiftCenter attributionTheme".split(" "),X=!1,Q=["groupBorderRadius","groupBorderRadiusCorrection","groupBorderWidth","groupInsetWidth","groupBorderWidthScaling"],ee=["maxGroupLevelsDrawn","maxGroupLabelLevelsDrawn"];this.hg=function(e){w.j.D("options:changed",e),y.bb(e,K)&&S.L(v,(function(e){e.Ma=!0})),y.bb(e,Y)&&(v.Fa=!0),y.bb(e,Q)&&(X=!0),y.bb(e,ee)&&(c(),p())},this.reload=function(){oe.reload()},this.ig=function(e,t){y.defer((function(){if(X)re.Nh(e),X=!1;else{if(t)for(var n=j.u(t),i=n.length-1;0<=i;i--)n[i].N=!0;else v.N=!0;l(e)}}))},this.ga=function(){z.u()},this.update=function(e){var t=(e=e?j.u(e):[v]).reduce((function(e,t){return e[t.id]=t,e}),{});e=e.filter((function(e){for(e=e.parent;e;){if(y.has(t,e.id))return!1;e=e.parent}return!0})),j.update(e),re.dj(e)},this.reset=function(){return le(!1)},this.T=H.i,this.Ja=function(){var e={};return function(t,n){return(t=j.i(t))?L.Wc(e,t,n):null}}(),this.wa=function(){var e={x:0,y:0},t={x:0,y:0};return function(n,i){return(n=j.i(n))?(e.x=i.x,e.y=i.y,n.transformPoint(e,e),B.Uc(e,e),t.x=e.x,t.y=e.y,t):null}}(),this.sa=function(){var e={};return function(t){return(t=j.i(t))?L.Yc(e,t):null}}(),this.gg=function(){var e={};return function(t){return(t=j.i(t))?L.Xc(e,t):null}}(),this.ta=function(){var e={};return function(){return B.i(e)}}(),this.kg=function(){this.H({groups:a((function(e){return e.group.selected})),newState:!0,keepPrevious:!1}),this.u({groups:a((function(e){return e.group.open})),newState:!0,keepPrevious:!1}),this.i({groups:a((function(e){return e.group.exposed})),newState:!0,keepPrevious:!1})},this.Ka=function(){return a((function(e){return e.U}))},this.i=function(e){return oe.submit((function(){return V.Vb(j.H(e,"exposed",!1),!1,!0,!1)}))},this.pb=function(){return a((function(e){return e.open}))},this.u=function(e){return oe.submit((function(){return Z.Bb(j.H(e,"open",!0),!1,!1)}))},this.Lb=function(){return a((function(e){return e.selected}))},this.H=function(e){return oe.submit((function(){return $.select(j.H(e,"selected",!0),!1),(new h).resolve().promise()}))},this.mg=function(e){return(e=j.i(e))?e===v?B.reset(r.ob,m.ia(r.Kb)):B.bg(e,r.Yb,r.ob,m.ia(r.Kb)):(new h).resolve().promise()},this.ua=function(e,t){return(e=j.u(e))?(t=p(e,t),c(e),t):0},this.Vc=function(e){return q.Lb[e]},this.lg=function(){var t=e;return{frames:t.frames,totalTime:t.totalTime,lastFrameTime:t.rd,lastInterFrameTime:t.sd,fps:t.ue}};var te,re=function(){function e(e,o){var a=e||n,s=o||i;n=a,i=s,(e=r.Rb&&r.Rb.boundary)&&2<e.length?v.C=e.map((function(e){return{x:a*e.x,y:s*e.y}})):v.C=[{x:0,y:0},{x:a,y:0},{x:a,y:s},{x:0,y:s}],t()}function t(){v.Z=!0,v.G=v.C,v.F=M.F(v.C,v.F),v.O=v,M.Ja(v.C,v.O)}var n,i;return{Le:e,Ki:function(t,n,i,r){ue.stop();var o=i/t,a=r/n;S.ne(v,(function(e){e.x=e.x*o+(Math.random()-.5)*i/1e3,e.y=e.y*a+(Math.random()-.5)*r/1e3})),e(i,r),v.Ea=!0,I.step(ue.eb,!0,!1,(function(e){var t=e.m;if(t){I.Eb(e);for(var n=t.length-1;0<=n;n--){var i=t[n];i.w=i.hc}e.Ea=!0}}))?l(!1):(I.fc(v),w.options.Md?(l(!1),se.Jf(),se.Oc()):(I.complete(ue.eb),v.Fa=!0,l(!1)))},Nh:function(e){var n=!1;return v.empty()||(t(),se.xb()||(n=I.step(ue.eb,!1,!1),l(e))),n},dj:function(e){e.forEach((function(e){S.za(e,(function(e){e.empty()||I.Eb(e)})),I.fc(e),w.options.Md?(se.Jf(),S.za(e,(function(e){e.empty()||ue.grow(e)}))):(S.za(e,(function(e){e.empty()||ue.eb(e)})),I.complete(ue.eb),e.Fa=!0,l(!1))}))}}}(),oe=function(){function e(){if(0===r.Gd&&B.reset(0),w.options.zf(r.Rb),re.Le(),j.load(r.Rb),g(),c(),w.j.D("model:loaded",v,S.uc(v)),!v.empty()){if(v.open=!0,v.Ia=!0,r.Md)var e=se.Oc();else se.Yh(),e=function(){S.za(v,(function(e){e.xa=!1}));var e=new h,t=new d(e.resolve);return t.i(),v.xa=!0,W.i(v).then(t.u),s(v,(function e(){this.R&&this.C&&(this.Z=this.xa=!0,t.i(),W.i(this).then(t.u),t.i(),s(this,e).then(t.u))})),e.promise()}();!function(){var e=r.Oa,t=r.Kc;r.Oa=0,r.Kc=0,C.kg(),r.Oa=e,r.Kc=t}(),0<r.Od?(H.clear(),z.i(1)):e=f([e,t(1)])}w.options.yf(r.Rb),e&&(w.options.Cf(),e.then((function(){H.u((function(){x.once(w.options.Bf)}))})))}function t(e,t){return 0===r.qe||t?(z.i(e),(new h).resolve().promise()):T.K.A({opacity:z.i()}).Xd(2).fa({duration:r.qe,P:{opacity:{end:e,easing:m.ia(r.Cg)}},ba:function(){z.i(this.opacity)}}).Ta()}function n(){for(var e=0;e<o.length;e++){var t=o[e],n=t.action();y.has(n,"then")?n.then(t.ge.resolve):t.ge.resolve()}o=[]}var i=!1,o=[];return{reload:function(){i||(v.empty()?e():(ue.stop(),T.i(),se.stop(),i=!0,f(0<r.Gd?[W.u(),le(!1)]:[t(0)]).then((function(){t(0,!0),i=!1,e(),y.defer(n)}))))},submit:function(e){if(i){var t=new h;return o.push({action:e,ge:t}),t.promise()}return e()}}}(),ae=new d((function(){te.resolve()})),se=function(){function e(){return o||(ae.initial()&&(te=new h),ae.i(),t(),o=!0,x.repeat(n)),te.promise()}function t(){i=k.now()}function n(){var t=k.now()-i>r.Ji;return t=I.step((function(t){t.xa=!0,ue.grow(t),ae.i(),W.i(t).then(ae.u),ae.i(),s(t,(function(){this.Ia=!0,e()})).then(ae.u)}),!0,t)||t,l(!0),t&&(o=!1,ae.u()),t}var i,o=!1;return{Yh:function(){I.complete(ue.eb)},Oc:e,Jf:t,xb:function(){return!ae.initial()},stop:function(){x.cancel(n),o=!1,ae.clear()}}}(),ue=function(){function e(e){var t=!e.empty();if(e.xa=!0,t){for(var n=e.m,i=n.length-1;0<=i;i--){var r=n[i];r.w=r.hc}e.Ea=!0}return t}var t=[];return{grow:function(n){var i=w.options,r=i.Wg;0<r?D.u(n,D.i(n,w.options.Qd),(function(e,n,o){n="groups"===w.options.Pd?o:n,ae.i(),t.push(T.K.A(e).wait(n*i.Vg*r).fa({duration:r,P:{w:{start:e.Vf,end:e.hc,easing:m.ia(i.Xg)}},ba:function(){this.w=Math.max(0,this.w),this.parent.Ea=!0,se.Oc()}}).Xa(ae.u).start())})):e(n)&&se.Oc()},eb:e,stop:function(){for(var e=t.length-1;0<=e;e--)t[e].stop();t=[]}}}(),le=function(){var e=!1;return function(t){if(e)return(new h).resolve().promise();e=!0;var n=[];n.push(B.reset(r.ob,m.ia(r.Kb)));var i=new h;return V.Vb({m:[],Ca:!1,Ba:!1},t,!1,!0).then((function(){Z.Bb({m:[],Ca:!1,Ba:!1},t,!1).then(i.resolve)})),n.push(i.promise()),f(n).then((function(){e=!1,t&&r.Df()}))}}(),ce=!1}function oe(){return{version:"3.5.0",build:"bugfix/3.5.x/e3b91c8e",brandingAllowed:!1}}Y.i={width:445.2,height:533.5},t.md((function(){window.CarrotSearchFoamTree=function(e){function t(e,t){if(!s||s.exists(e))switch(e){case"selection":return h.Lb();case"open":return h.pb();case"exposure":return h.Ka();case"state":return h.sa.apply(this,t);case"geometry":return h.Ja.apply(this,t);case"hierarchy":return h.gg.apply(this,t);case"containerCoordinates":return h.wa.apply(this,t);case"imageData":return h.T.apply(this,t);case"viewport":return h.ta();case"times":return h.lg();case"onModelChanged":case"onRedraw":case"onRolloutStart":case"onRolloutComplete":case"onRelaxationStep":case"onGroupHover":case"onGroupOpenOrCloseChanging":case"onGroupExposureChanging":case"onGroupSelectionChanging":case"onGroupSelectionChanged":case"onGroupClick":case"onGroupDoubleClick":case"onGroupHold":return e=u[e],Array.isArray(e)?e:[e];default:return u[e]}}function n(e){function t(e,t){return y.has(n,e)?(t(n[e]),delete n[e],1):0}if(0===arguments.length)return 0;if(1===arguments.length)var n=y.extend({},arguments[0]);else 2===arguments.length&&((n={})[arguments[0]]=arguments[1]);s&&s.validate(n,l.Oh);var i=0;h&&(i+=t("selection",h.H),i+=t("open",h.u),i+=t("exposure",h.i));var o={};return y.Aa(n,(function(e,t){(u[t]!==e||y.wb(e))&&(o[t]=e,i++),u[t]=e})),0<i&&r(o),i}function i(e,t){e="on"+e.charAt(0).toUpperCase()+e.slice(1);var n=u[e];u[e]=t(Array.isArray(n)?n:[n]),(t={})[e]=u[e],r(t)}function r(e){!function(){function t(t,n){return y.has(e,t)||void 0===n?w(u[t],a):n}l.Oh=u.logging,l.Rb=u.dataObject,l.B=u.pixelRatio,l.nb=u.wireframePixelRatio,l.mb=u.stacking,l.zg=u.descriptionGroup,l.Tb=u.descriptionGroupType,l.qc=u.descriptionGroupPosition,l.Ag=u.descriptionGroupDistanceFromCenter,l.Sb=u.descriptionGroupSize,l.ie=u.descriptionGroupMinHeight,l.he=u.descriptionGroupMaxHeight,l.je=u.descriptionGroupPolygonDrawn,l.Dc=u.layout,l.ac=u.layoutByWeightOrder,l.Wi=u.showZeroWeightGroups,l.Be=u.groupMinDiameter,l.Ld=u.rectangleAspectRatioPreference,l.Ii=u.initializer||u.relaxationInitializer,l.Ji=u.relaxationMaxDuration,l.Md=u.relaxationVisible,l.Hf=u.relaxationQualityThreshold,l.oh=u.groupResizingBudget,l.Wg=u.groupGrowingDuration,l.Vg=u.groupGrowingDrag,l.Xg=u.groupGrowingEasing,l.Gg=u.groupBorderRadius,l.$a=u.groupBorderWidth,l.La=u.groupBorderWidthScaling,l.jd=u.groupInsetWidth,l.Hg=u.groupBorderRadiusCorrection,l.ab=u.groupStrokeWidth,l.yc=u.groupSelectionOutlineWidth,l.sh=u.groupSelectionOutlineColor,l.kd=u.groupSelectionOutlineShadowSize,l.Ce=u.groupSelectionOutlineShadowColor,l.ph=u.groupSelectionFillHueShift,l.rh=u.groupSelectionFillSaturationShift,l.qh=u.groupSelectionFillLightnessShift,l.Ee=u.groupSelectionStrokeHueShift,l.Ge=u.groupSelectionStrokeSaturationShift,l.Fe=u.groupSelectionStrokeLightnessShift,l.Ug=u.groupFillType,l.Qg=u.groupFillGradientRadius,l.Ng=u.groupFillGradientCenterHueShift,l.Pg=u.groupFillGradientCenterSaturationShift,l.Og=u.groupFillGradientCenterLightnessShift,l.Rg=u.groupFillGradientRimHueShift,l.Tg=u.groupFillGradientRimSaturationShift,l.Sg=u.groupFillGradientRimLightnessShift,l.ld=u.groupStrokeType,l.ab=u.groupStrokeWidth,l.He=u.groupStrokePlainHueShift,l.Je=u.groupStrokePlainSaturationShift,l.Ie=u.groupStrokePlainLightnessShift,l.xh=u.groupStrokeGradientRadius,l.th=u.groupStrokeGradientAngle,l.yh=u.groupStrokeGradientUpperHueShift,l.Ah=u.groupStrokeGradientUpperSaturationShift,l.zh=u.groupStrokeGradientUpperLightnessShift,l.uh=u.groupStrokeGradientLowerHueShift,l.wh=u.groupStrokeGradientLowerSaturationShift,l.vh=u.groupStrokeGradientLowerLightnessShift,l.Yg=u.groupHoverFillHueShift,l.$g=u.groupHoverFillSaturationShift,l.Zg=u.groupHoverFillLightnessShift,l.ye=u.groupHoverStrokeHueShift,l.Ae=u.groupHoverStrokeSaturationShift,l.ze=u.groupHoverStrokeLightnessShift,l.Pa=u.groupExposureScale,l.Mg=u.groupExposureShadowColor,l.xe=u.groupExposureShadowSize,l.Yb=u.groupExposureZoomMargin,l.Ch=u.groupUnexposureLightnessShift,l.Dh=u.groupUnexposureSaturationShift,l.Bh=u.groupUnexposureLabelColorThreshold,l.Oa=u.exposeDuration,l.Wb=u.exposeEasing,l.Kc=u.openCloseDuration,l.Ig=w(u.groupColorDecorator,a),l.Jg=u.groupColorDecorator!==y.qa,l.dh=w(u.groupLabelDecorator,a),l.eh=u.groupLabelDecorator!==y.qa,l.jh=w(u.groupLabelLayoutDecorator,a),l.kh=u.groupLabelLayoutDecorator!==y.qa,l.Kg=w(u.groupContentDecorator,a),l.xc=u.groupContentDecorator!==y.qa,l.Lg=u.groupContentDecoratorTriggering,l.Ei=u.rainbowStartColor,l.xi=u.rainbowEndColor,l.vi=u.rainbowColorDistribution,l.wi=u.rainbowColorDistributionAngle,l.Ai=u.rainbowLightnessDistributionAngle,l.Bi=u.rainbowLightnessShift,l.Ci=u.rainbowLightnessShiftCenter,l.Di=u.rainbowSaturationCorrection,l.zi=u.rainbowLightnessCorrection,l.Ef=u.parentFillOpacity,l.Xh=u.parentStrokeOpacity,l.Ff=u.parentLabelOpacity,l.Gf=u.parentOpacityBalancing,l.nh=u.groupLabelUpdateThreshold,l.fh=u.groupLabelFontFamily,l.gh=u.groupLabelFontStyle,l.hh=u.groupLabelFontVariant,l.ih=u.groupLabelFontWeight,l.mh=u.groupLabelMinFontSize,l.sj=u.groupLabelMaxFontSize,l.rj=u.groupLabelLineHeight,l.qj=u.groupLabelHorizontalPadding,l.uj=u.groupLabelVerticalPadding,l.tj=u.groupLabelMaxTotalHeight,l.bh=u.groupLabelDarkColor,l.lh=u.groupLabelLightColor,l.ah=u.groupLabelColorThreshold,l.fj=u.wireframeDrawMaxDuration,l.gj=u.wireframeLabelDrawing,l.ej=u.wireframeContentDecorationDrawing,l.dg=u.wireframeToFinalFadeDuration,l.hj=u.wireframeToFinalFadeDelay,l.Dg=u.finalCompleteDrawMaxDuration,l.Eg=u.finalIncrementalDrawMaxDuration,l.se=u.finalToWireframeFadeDuration,l.Zc=u.androidStockBrowserWorkaround,l.Ke=u.incrementalDraw,l.Rh=u.maxGroups,l.Qh=u.maxGroupLevelsAttached,l.We=u.maxGroupLevelsDrawn,l.Ph=u.maxGroupLabelLevelsDrawn,l.Qd=u.rolloutStartPoint,l.Pd=u.rolloutMethod,l.Ni=u.rolloutEasing,l.Od=u.rolloutDuration,l.Lf=u.rolloutScalingStrength,l.Nf=u.rolloutTranslationXStrength,l.Of=u.rolloutTranslationYStrength,l.Kf=u.rolloutRotationStrength,l.Mf=u.rolloutTransformationCenter,l.Ri=u.rolloutPolygonDrag,l.Si=u.rolloutPolygonDuration,l.Oi=u.rolloutLabelDelay,l.Pi=u.rolloutLabelDrag,l.Qi=u.rolloutLabelDuration,l.Mi=u.rolloutChildGroupsDrag,l.Li=u.rolloutChildGroupsDelay,l.ni=u.pullbackStartPoint,l.hi=u.pullbackMethod,l.di=u.pullbackEasing,l.yj=u.pullbackType,l.Gd=u.pullbackDuration,l.mi=u.pullbackScalingStrength,l.pi=u.pullbackTranslationXStrength,l.ri=u.pullbackTranslationYStrength,l.li=u.pullbackRotationStrength,l.oi=u.pullbackTransformationCenter,l.ii=u.pullbackPolygonDelay,l.ji=u.pullbackPolygonDrag,l.ki=u.pullbackPolygonDuration,l.ei=u.pullbackLabelDelay,l.fi=u.pullbackLabelDrag,l.gi=u.pullbackLabelDuration,l.ai=u.pullbackChildGroupsDelay,l.bi=u.pullbackChildGroupsDrag,l.ci=u.pullbackChildGroupsDuration,l.qe=u.fadeDuration,l.Cg=u.fadeEasing,l.ij=u.zoomMouseWheelFactor,l.ob=u.zoomMouseWheelDuration,l.Kb=u.zoomMouseWheelEasing,l.Sh=u.maxLabelSizeForTitleBar,l.Zi=u.titleBarFontFamily,l.Yf=u.titleBarBackgroundColor,l.Zf=u.titleBarTextColor,l.$i=u.titleBarMinFontSize,l.Wd=u.titleBarMaxFontSize,l.aj=u.titleBarTextPaddingLeftRight,l.bj=u.titleBarTextPaddingTopBottom,l.Yi=u.titleBarDecorator,l.mj=u.attributionText,l.jj=u.attributionLogo,l.lj=u.attributionLogoScale,l.nj=u.attributionUrl,l.$d=u.attributionPosition,l.rg=u.attributionDistanceFromCenter,l.sg=u.attributionWeight,l.ae=u.attributionTheme,l.Me=u.interactionHandler,l.zf=t("onModelChanging",l.zf),l.yf=t("onModelChanged",l.yf),l.Af=t("onRedraw",l.Af),l.Cf=t("onRolloutStart",l.Cf),l.Bf=t("onRolloutComplete",l.Bf),l.Ad=t("onRelaxationStep",l.Ad),l.Df=t("onViewReset",l.Df),l.rf=t("onGroupOpenOrCloseChanging",l.rf),l.qf=t("onGroupOpenOrCloseChanged",l.qf),l.hf=t("onGroupExposureChanging",l.hf),l.gf=t("onGroupExposureChanged",l.gf),l.tf=t("onGroupSelectionChanging",l.tf),l.sf=t("onGroupSelectionChanged",l.sf),l.kf=t("onGroupHover",l.kf),l.mf=t("onGroupMouseMove",l.mf),l.bf=t("onGroupClick",l.bf),l.cf=t("onGroupDoubleClick",l.cf),l.jf=t("onGroupHold",l.jf),l.pf=t("onGroupMouseWheel",l.pf),l.nf=t("onGroupMouseUp",l.nf),l.lf=t("onGroupMouseDown",l.lf),l.ff=t("onGroupDragStart",l.ff),l.df=t("onGroupDrag",l.df),l.ef=t("onGroupDragEnd",l.ef),l.wf=t("onGroupTransformStart",l.wf),l.uf=t("onGroupTransform",l.uf),l.vf=t("onGroupTransformEnd",l.vf),l.xf=t("onKeyUp",l.xf)}(),l.Fi=c.u(l.Ei),l.yi=c.u(l.xi),l.De=c.u(l.Ce),l.kj=null,h&&(h.hg(e),y.has(e,"dataObject")&&h.reload())}function o(e){return function(){return e.apply(this,arguments).Fg(a)}}var a=this,s=window.CarrotSearchFoamTree.asserts,u=y.extend({},window.CarrotSearchFoamTree.defaults),l={};n(e),(e=u.element||document.getElementById(u.id))||j.i("Element to embed FoamTree in not found."),u.element=e;var h=new re(e,l,u);h.M();var f={get:function(e){return 0===arguments.length?y.extend({},u):t(arguments[0],Array.prototype.slice.call(arguments,1))},set:n,on:function(e,t){i(e,(function(e){return e.push(t),e}))},off:function(e,t){i(e,(function(e){return e.filter((function(e){return e!==t}))}))},resize:h.ga,redraw:h.ig,update:h.update,attach:h.ua,select:o(h.H),expose:o(h.i),open:o(h.u),reset:o(h.reset),zoom:o(h.mg),trigger:function(e,t){(e=h.Vc(e))&&e(t)},dispose:function(){function e(){throw"FoamTree instance disposed"}h.Za(),y.Aa(f,(function(t,n){"dispose"!==n&&(a[n]=e)}))}};y.Aa(f,(function(e,t){a[t]=e})),h.reload()},window["CarrotSearchFoamTree.asserts"]&&(window.CarrotSearchFoamTree.asserts=window["CarrotSearchFoamTree.asserts"],delete window["CarrotSearchFoamTree.asserts"]),window.CarrotSearchFoamTree.supported=!0,window.CarrotSearchFoamTree.version=oe,window.CarrotSearchFoamTree.defaults=Object.freeze({id:void 0,element:void 0,logging:!1,dataObject:void 0,pixelRatio:1,wireframePixelRatio:1,layout:"relaxed",layoutByWeightOrder:!0,showZeroWeightGroups:!0,groupMinDiameter:10,rectangleAspectRatioPreference:-1,relaxationInitializer:"fisheye",relaxationMaxDuration:3e3,relaxationVisible:!1,relaxationQualityThreshold:1,stacking:"hierarchical",descriptionGroup:"auto",descriptionGroupType:"stab",descriptionGroupPosition:225,descriptionGroupDistanceFromCenter:1,descriptionGroupSize:.125,descriptionGroupMinHeight:35,descriptionGroupMaxHeight:.5,descriptionGroupPolygonDrawn:!1,maxGroups:5e4,maxGroupLevelsAttached:4,maxGroupLevelsDrawn:4,maxGroupLabelLevelsDrawn:3,groupGrowingDuration:0,groupGrowingEasing:"bounce",groupGrowingDrag:0,groupResizingBudget:2,groupBorderRadius:.15,groupBorderWidth:4,groupBorderWidthScaling:.6,groupInsetWidth:6,groupBorderRadiusCorrection:1,groupSelectionOutlineWidth:5,groupSelectionOutlineColor:"#222",groupSelectionOutlineShadowSize:0,groupSelectionOutlineShadowColor:"#fff",groupSelectionFillHueShift:0,groupSelectionFillSaturationShift:0,groupSelectionFillLightnessShift:0,groupSelectionStrokeHueShift:0,groupSelectionStrokeSaturationShift:0,groupSelectionStrokeLightnessShift:-10,groupFillType:"gradient",groupFillGradientRadius:1,groupFillGradientCenterHueShift:0,groupFillGradientCenterSaturationShift:0,groupFillGradientCenterLightnessShift:20,groupFillGradientRimHueShift:0,groupFillGradientRimSaturationShift:0,groupFillGradientRimLightnessShift:-5,groupStrokeType:"plain",groupStrokeWidth:1.5,groupStrokePlainHueShift:0,groupStrokePlainSaturationShift:0,groupStrokePlainLightnessShift:-10,groupStrokeGradientRadius:1,groupStrokeGradientAngle:45,groupStrokeGradientUpperHueShift:0,groupStrokeGradientUpperSaturationShift:0,groupStrokeGradientUpperLightnessShift:20,groupStrokeGradientLowerHueShift:0,groupStrokeGradientLowerSaturationShift:0,groupStrokeGradientLowerLightnessShift:-20,groupHoverFillHueShift:0,groupHoverFillSaturationShift:0,groupHoverFillLightnessShift:20,groupHoverStrokeHueShift:0,groupHoverStrokeSaturationShift:0,groupHoverStrokeLightnessShift:-10,groupExposureScale:1.15,groupExposureShadowColor:"rgba(0, 0, 0, 0.5)",groupExposureShadowSize:50,groupExposureZoomMargin:.1,groupUnexposureLightnessShift:65,groupUnexposureSaturationShift:-65,groupUnexposureLabelColorThreshold:.35,exposeDuration:700,exposeEasing:"squareInOut",groupColorDecorator:y.qa,groupLabelDecorator:y.qa,groupLabelLayoutDecorator:y.qa,groupContentDecorator:y.qa,groupContentDecoratorTriggering:"onLayoutDirty",openCloseDuration:500,rainbowColorDistribution:"radial",rainbowColorDistributionAngle:-45,rainbowLightnessDistributionAngle:45,rainbowSaturationCorrection:.1,rainbowLightnessCorrection:.4,rainbowStartColor:"hsla(0, 100%, 55%, 1)",rainbowEndColor:"hsla(359, 100%, 55%, 1)",rainbowLightnessShift:30,rainbowLightnessShiftCenter:.4,parentFillOpacity:.7,parentStrokeOpacity:1,parentLabelOpacity:1,parentOpacityBalancing:!0,wireframeDrawMaxDuration:15,wireframeLabelDrawing:"auto",wireframeContentDecorationDrawing:"auto",wireframeToFinalFadeDuration:500,wireframeToFinalFadeDelay:300,finalCompleteDrawMaxDuration:80,finalIncrementalDrawMaxDuration:100,finalToWireframeFadeDuration:200,androidStockBrowserWorkaround:!1,incrementalDraw:"fast",groupLabelFontFamily:"sans-serif",groupLabelFontStyle:"normal",groupLabelFontWeight:"normal",groupLabelFontVariant:"normal",groupLabelLineHeight:1.05,groupLabelHorizontalPadding:1,groupLabelVerticalPadding:1,groupLabelMinFontSize:6,groupLabelMaxFontSize:160,groupLabelMaxTotalHeight:.9,groupLabelUpdateThreshold:.05,groupLabelDarkColor:"#000",groupLabelLightColor:"#fff",groupLabelColorThreshold:.35,rolloutStartPoint:"center",rolloutEasing:"squareOut",rolloutMethod:"groups",rolloutDuration:2e3,rolloutScalingStrength:-.7,rolloutTranslationXStrength:0,rolloutTranslationYStrength:0,rolloutRotationStrength:-.7,rolloutTransformationCenter:.7,rolloutPolygonDrag:.1,rolloutPolygonDuration:.5,rolloutLabelDelay:.8,rolloutLabelDrag:.1,rolloutLabelDuration:.5,rolloutChildGroupsDrag:.1,rolloutChildGroupsDelay:.2,pullbackStartPoint:"center",pullbackEasing:"squareIn",pullbackMethod:"groups",pullbackDuration:1500,pullbackScalingStrength:-.7,pullbackTranslationXStrength:0,pullbackTranslationYStrength:0,pullbackRotationStrength:-.7,pullbackTransformationCenter:.7,pullbackPolygonDelay:.3,pullbackPolygonDrag:.1,pullbackPolygonDuration:.8,pullbackLabelDelay:0,pullbackLabelDrag:.1,pullbackLabelDuration:.3,pullbackChildGroupsDelay:.1,pullbackChildGroupsDrag:.1,pullbackChildGroupsDuration:.3,fadeDuration:700,fadeEasing:"cubicInOut",zoomMouseWheelFactor:1.5,zoomMouseWheelDuration:500,zoomMouseWheelEasing:"squareOut",maxLabelSizeForTitleBar:8,titleBarFontFamily:null,titleBarFontStyle:"normal",titleBarFontWeight:"normal",titleBarFontVariant:"normal",titleBarBackgroundColor:"rgba(0, 0, 0, 0.5)",titleBarTextColor:"rgba(255, 255, 255, 1)",titleBarMinFontSize:10,titleBarMaxFontSize:40,titleBarTextPaddingLeftRight:20,titleBarTextPaddingTopBottom:15,titleBarDecorator:y.qa,attributionText:null,attributionLogo:null,attributionLogoScale:.5,attributionUrl:"http://carrotsearch.com/foamtree",attributionPosition:"bottomright",attributionDistanceFromCenter:1,attributionWeight:.025,attributionTheme:"light",interactionHandler:t.Gh()?"hammerjs":"builtin",onModelChanging:[],onModelChanged:[],onRedraw:[],onRolloutStart:[],onRolloutComplete:[],onRelaxationStep:[],onViewReset:[],onGroupOpenOrCloseChanging:[],onGroupOpenOrCloseChanged:[],onGroupExposureChanging:[],onGroupExposureChanged:[],onGroupSelectionChanging:[],onGroupSelectionChanged:[],onGroupHover:[],onGroupMouseMove:[],onGroupClick:[],onGroupDoubleClick:[],onGroupHold:[],onGroupMouseWheel:[],onGroupMouseUp:[],onGroupMouseDown:[],onGroupDragStart:[],onGroupDrag:[],onGroupDragEnd:[],onGroupTransformStart:[],onGroupTransform:[],onGroupTransformEnd:[],onKeyUp:[],selection:null,open:null,exposure:null,imageData:null,hierarchy:null,geometry:null,containerCoordinates:null,state:null,viewport:null,times:null}),window.CarrotSearchFoamTree.geometry=Object.freeze({rectangleInPolygon:function(e,t,n,i,r,o,a){return r=y.I(r,1),o=y.I(o,.5),a=y.I(a,.5),{x:t-(e=M.Ka(e,{x:t,y:n},i,o,a)*r)*i*o,y:n-e*a,w:e*i,h:e}},circleInPolygon:function(e,t,n){return M.pb(e,{x:t,y:n})},stabPolygon:function(e,t,n,i){return M.ua(e,{x:t,y:n},i)},polygonCentroid:function(e){return{x:(e=M.u(e,{})).x,y:e.y,area:e.ha}},boundingBox:function(e){for(var t=e[0].x,n=e[0].y,i=e[0].x,r=e[0].y,o=1;o<e.length;o++){var a=e[o];a.x<t&&(t=a.x),a.y<n&&(n=a.y),a.x>i&&(i=a.x),a.y>r&&(r=a.y)}return{x:t,y:n,w:i-t,h:r-n}}})}),(function(){window.CarrotSearchFoamTree=function(){window.console.error("FoamTree is not supported on this browser.")},window.CarrotSearchFoamTree.supported=!1}))}();const Fr=window.CarrotSearchFoamTree;function Rr(t,n,i,r,o){var a={};for(var s in n)"ref"!=s&&(a[s]=n[s]);var u,l,c={type:t,props:a,key:i,ref:n&&n.ref,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:++e.__v,__source:r,__self:o};if("function"==typeof t&&(u=t.defaultProps))for(l in u)void 0===a[l]&&(a[l]=u[l]);return e.vnode&&e.vnode(c),c}class Gr extends g{constructor(e){super(e),this.saveNodeRef=e=>this.node=e,this.resize=()=>{const{props:e}=this;this.treemap.resize(),e.onResize&&e.onResize()},this.treemap=null,this.zoomOutDisabled=!1,this.findChunkNamePartIndex()}componentDidMount(){this.treemap=this.createTreemap(),window.addEventListener("resize",this.resize)}componentWillReceiveProps(e){e.data!==this.props.data?(this.findChunkNamePartIndex(),this.treemap.set({dataObject:this.getTreemapDataObject(e.data)})):e.highlightGroups!==this.props.highlightGroups&&setTimeout((()=>this.treemap.redraw()))}shouldComponentUpdate(){return!1}componentWillUnmount(){window.removeEventListener("resize",this.resize),this.treemap.dispose()}render(){return Rr("div",{...this.props,ref:this.saveNodeRef})}getTreemapDataObject(e=this.props.data){return{groups:e}}createTreemap(){const e=this,{props:t}=this;return new Fr({element:this.node,layout:"squarified",stacking:"flattened",pixelRatio:window.devicePixelRatio||1,maxGroups:1/0,maxGroupLevelsDrawn:1/0,maxGroupLabelLevelsDrawn:1/0,maxGroupLevelsAttached:1/0,wireframeLabelDrawing:"always",groupMinDiameter:0,groupLabelVerticalPadding:.2,rolloutDuration:0,pullbackDuration:0,fadeDuration:0,groupExposureZoomMargin:.2,zoomMouseWheelDuration:300,openCloseDuration:200,dataObject:this.getTreemapDataObject(),titleBarDecorator(e,t,n){n.titleBarShown=!1},groupColorDecorator(t,n,i){const r=e.getGroupRoot(n.group),o=e.getChunkNamePart(r.label),a=/[^0-9]/u.test(o)?function(e){let t=0;for(let n=0;n<e.length;n++){t=(t<<5)-t+e.charCodeAt(n),t&=t}return t}(o):parseInt(o)/1e3*360;i.groupColor={model:"hsla",h:Math.round(Math.abs(a)%360),s:60,l:50,a:.9};const{highlightGroups:s}=e.props,u=n.group;s&&s.has(u)?i.groupColor={model:"rgba",r:255,g:0,b:0,a:.8}:s&&s.size>0&&(i.groupColor.s=10)},onGroupClick(n){Hr(n),(n.ctrlKey||n.secondary)&&t.onGroupSecondaryClick?t.onGroupSecondaryClick.call(e,n):(e.zoomOutDisabled=!1,this.zoom(n.group))},onGroupDoubleClick:Hr,onGroupHover(n){if(n.group&&(n.group.attribution||n.group===this.get("dataObject")))return n.preventDefault(),void(t.onMouseLeave&&t.onMouseLeave.call(e,n));t.onGroupHover&&t.onGroupHover.call(e,n)},onGroupMouseWheel(t){const{scale:n}=this.get("viewport");if(t.delta<0){if(e.zoomOutDisabled)return Hr(t);n<1&&(e.zoomOutDisabled=!0,Hr(t))}else e.zoomOutDisabled=!1}})}getGroupRoot(e){let t;for(;!e.isAsset&&(t=this.treemap.get("hierarchy",e).parent);)e=t;return e}zoomToGroup(e){for(this.zoomOutDisabled=!1;e&&!this.treemap.get("state",e).revealed;)e=this.treemap.get("hierarchy",e).parent;e&&this.treemap.zoom(e)}isGroupRendered(e){const t=this.treemap.get("state",e);return!!t&&t.revealed}update(){this.treemap.update()}findChunkNamePartIndex(){const e=this.props.data.map((e=>e.label.split(/[^a-z0-9]/iu))),t={index:0,votes:0};for(let n=Math.max(...e.map((e=>e.length)))-1;n>=0;n--){const i={name:0,hash:0,ext:0};let r="";for(const t of e){const e=t[n];void 0!==e&&""!==e&&(e===r?i.ext++:/[a-z]/u.test(e)&&/[0-9]/u.test(e)&&e.length===r.length?i.hash++:(/^[a-z]+$/iu.test(e)||/^[0-9]+$/u.test(e))&&i.name++,r=e)}i.name>=t.votes&&(t.index=n,t.votes=i.name)}this.chunkNamePartIndex=t.index}getChunkNamePart(e){return e.split(/[^a-z0-9]/iu)[this.chunkNamePartIndex]||e}}function Hr(e){e.preventDefault()}var Ur=n(184),qr=n.n(Ur),Vr=n(379),Wr=n.n(Vr),Zr=n(527),$r={insert:"head",singleton:!1};Wr()(Zr.Z,$r);const Kr=Zr.Z.locals||{};class Yr extends g{constructor(...e){super(...e),this.mouseCoords={x:0,y:0},this.state={left:0,top:0},this.handleMouseMove=e=>{Object.assign(this.mouseCoords,{x:e.pageX,y:e.pageY}),this.props.visible&&this.updatePosition()},this.saveNode=e=>this.node=e}componentDidMount(){document.addEventListener("mousemove",this.handleMouseMove,!0)}shouldComponentUpdate(e){return this.props.visible||e.visible}componentWillUnmount(){document.removeEventListener("mousemove",this.handleMouseMove,!0)}render(){const{children:e,visible:t}=this.props,n=qr()({[Kr.container]:!0,[Kr.hidden]:!t});return Rr("div",{ref:this.saveNode,className:n,style:this.getStyle(),children:e})}getStyle(){return{left:this.state.left,top:this.state.top}}updatePosition(){if(!this.props.visible)return;const e={left:this.mouseCoords.x+Yr.marginX,top:this.mouseCoords.y+Yr.marginY},t=this.node.getBoundingClientRect();e.left+t.width>window.innerWidth&&(e.left=window.innerWidth-t.width),e.top+t.height>window.innerHeight&&(e.top=this.mouseCoords.y-Yr.marginY-t.height),this.setState(e)}}Yr.marginX=10,Yr.marginY=30;var Jr=n(908),Xr={insert:"head",singleton:!1};Wr()(Jr.Z,Xr);const Qr=Jr.Z.locals||{};class eo extends g{shouldComponentUpdate(e,t){return!to(e,this.props)||!to(this.state,t)}}function to(e,t){if(e===t)return!0;const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let i=0;i<n.length;i++){const r=n[i];if(e[r]!==t[r])return!1}return!0}class no extends eo{constructor(...e){super(...e),this.handleClick=e=>{this.elem.blur(),this.props.onClick(e)},this.saveRef=e=>this.elem=e}render({active:e,toggle:t,className:n,children:i,...r}){const o=qr()(n,{[Qr.button]:!0,[Qr.active]:e,[Qr.toggle]:t});return Rr("button",{...r,ref:this.saveRef,type:"button",className:o,disabled:this.disabled,onClick:this.handleClick,children:i})}get disabled(){const{props:e}=this;return e.disabled||e.active&&!e.toggle}}class io extends eo{constructor(...e){super(...e),this.handleClick=()=>{this.props.onClick(this.props.item)}}render({item:e,...t}){return Rr(no,{...t,onClick:this.handleClick,children:e.label})}}var ro=n(897),oo={insert:"head",singleton:!1};Wr()(ro.Z,oo);const ao=ro.Z.locals||{};class so extends eo{render(){const{label:e,items:t,activeItem:n,onSwitch:i}=this.props;return Rr("div",{className:ao.container,children:[Rr("div",{className:ao.label,children:[e,":"]}),Rr("div",{children:t.map((e=>Rr(io,{className:ao.item,item:e,active:e===n,onClick:i},e.label)))})]})}}var uo=n(826),lo={insert:"head",singleton:!1};Wr()(uo.Z,lo);const co=uo.Z.locals||{};var ho=n(746),fo={insert:"head",singleton:!1};Wr()(ho.Z,fo);const po=ho.Z.locals||{},go={"arrow-right":{src:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNLjgyMiAxMi44MTFhLjQ0NS40NDUgMCAwIDEtLjMyMi4xMzMuNDU2LjQ1NiAwIDAgMS0uMzIyLS43NzhMNS44NDQgNi41LjE3OC44MzNBLjQ1Ni40NTYgMCAwIDEgLjgyMi4xOWw1Ljk5IDUuOTg5YS40NTYuNDU2IDAgMCAxIDAgLjY0NGwtNS45OSA1Ljk5eiIvPjwvc3ZnPg==",size:[7,13]},pin:{src:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTYuMDEyIDE3Ljk0OWwtMS40OTMtNi4zNzZhMTAuOTM1IDEwLjkzNSAwIDAgMCAyLjk4NS4wMDJMNi4wMTIgMTcuOTV6TTkuMjQ2IDEuODU3YzAgLjUyLS40MTUuOTg1LTEuMDcgMS4zMDhsLS4wMDEgMi42MTZjMS43MjUuNDEgMi45MjIgMS4yOTQgMi45MjIgMi4zMiAwIC40MTYtLjE5NS44MDktLjU0MiAxLjE1Ni0uNjQuNjM5LTEuNzk0IDEuMTI0LTMuMTg3IDEuMzE4LS4wMy4wMDUtLjA2Mi4wMDgtLjA5My4wMTJhOC45MTcgOC45MTcgMCAwIDEtLjcyNS4wNjVsLS4xMi4wMDdhMTAuMTU0IDEwLjE1NCAwIDAgMS0uODk1LS4wMDNjLS4wOTgtLjAwNS0uMTkzLS4wMTMtLjI4OC0uMDItLjA1My0uMDA0LS4xMDYtLjAwNy0uMTU4LS4wMTJhOS4yNDcgOS4yNDcgMCAwIDEtLjM3Mi0uMDQzbC0uMDQ1LS4wMDZDMi41MTQgMTAuMjc4LjkyNiA5LjI4NS45MjYgOC4xMDFjMC0uNDE1LjE5Ni0uODA3LjU0My0xLjE1NC41MTEtLjUxMiAxLjM1Mi0uOTI0IDIuMzgtMS4xNjhWMy4xNjVjLS42NTYtLjMyMy0xLjA3LS43ODktMS4wNy0xLjMwOUMyLjc3OC44ODIgNC4yMjUuMDkyIDYuMDExLjA5MnMzLjIzNC43OSAzLjIzNCAxLjc2NXoiLz48L3N2Zz4=",size:[12,18]}};class bo extends eo{render({className:e}){return Rr("i",{className:qr()(po.icon,e),style:this.style})}get style(){const{name:e,size:t,rotate:n}=this.props,i=go[e];if(!i)throw new TypeError(`Can't find "${e}" icon.`);let[r,o]=i.size;if(t){const e=t/Math.max(r,o);r=Math.min(Math.ceil(r*e),t),o=Math.min(Math.ceil(o*e),t)}return{backgroundImage:`url(${i.src})`,width:`${r}px`,height:`${o}px`,transform:n?`rotate(${n}deg)`:""}}}const vo=parseInt(co.toggleTime);class mo extends g{constructor(...e){super(...e),this.allowHide=!0,this.toggling=!1,this.hideContentTimeout=null,this.width=null,this.state={visible:!0,renderContent:!0},this.handleClick=()=>{this.allowHide=!1},this.handleMouseEnter=()=>{this.toggling||this.props.pinned||(clearTimeout(this.hideTimeoutId),this.toggleVisibility(!0))},this.handleMouseMove=()=>{this.allowHide=!0},this.handleMouseLeave=()=>{!this.allowHide||this.toggling||this.props.pinned||this.toggleVisibility(!1)},this.handleToggleButtonClick=()=>{this.toggleVisibility()},this.handlePinButtonClick=()=>{const e=!this.props.pinned;this.width=e?this.node.getBoundingClientRect().width:null,this.updateNodeWidth(),this.props.onPinStateChange(e)},this.handleResizeStart=e=>{this.resizeInfo={startPageX:e.pageX,initialWidth:this.width},document.body.classList.add("resizing","col"),document.addEventListener("mousemove",this.handleResize,!0),document.addEventListener("mouseup",this.handleResizeEnd,!0)},this.handleResize=e=>{this.width=this.resizeInfo.initialWidth+(e.pageX-this.resizeInfo.startPageX),this.updateNodeWidth()},this.handleResizeEnd=()=>{document.body.classList.remove("resizing","col"),document.removeEventListener("mousemove",this.handleResize,!0),document.removeEventListener("mouseup",this.handleResizeEnd,!0),this.props.onResize()},this.saveNode=e=>this.node=e}componentDidMount(){this.hideTimeoutId=setTimeout((()=>this.toggleVisibility(!1)),3e3)}componentWillUnmount(){clearTimeout(this.hideTimeoutId),clearTimeout(this.hideContentTimeout)}render(){const{position:e,pinned:t,children:n}=this.props,{visible:i,renderContent:r}=this.state,o=qr()({[co.container]:!0,[co.pinned]:t,[co.left]:"left"===e,[co.hidden]:!i,[co.empty]:!r});return Rr("div",{ref:this.saveNode,className:o,onClick:this.handleClick,onMouseLeave:this.handleMouseLeave,children:[i&&Rr(no,{type:"button",title:"Pin",className:co.pinButton,active:t,toggle:!0,onClick:this.handlePinButtonClick,children:Rr(bo,{name:"pin",size:13})}),Rr(no,{type:"button",title:i?"Hide":"Show sidebar",className:co.toggleButton,onClick:this.handleToggleButtonClick,children:Rr(bo,{name:"arrow-right",size:10,rotate:i?180:0})}),t&&i&&Rr("div",{className:co.resizer,onMouseDown:this.handleResizeStart}),Rr("div",{className:co.content,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,children:r?n:null})]})}toggleVisibility(e){clearTimeout(this.hideContentTimeout);const{visible:t}=this.state,{onToggle:n,pinned:i}=this.props;if(void 0===e)e=!t;else if(e===t)return;this.setState({visible:e}),this.toggling=!0,setTimeout((()=>{this.toggling=!1}),vo),i&&this.updateNodeWidth(e?this.width:null),e||i?(this.setState({renderContent:e}),n(e)):e||(this.hideContentTimeout=setTimeout((()=>{this.hideContentTimeout=null,this.setState({renderContent:!1}),n(!1)}),vo))}updateNodeWidth(e=this.width){this.node.style.width=e?`${e}px`:""}}mo.defaultProps={pinned:!1,position:"left"};var yo=n(396),Co={insert:"head",singleton:!1};Wr()(yo.Z,Co);const wo=yo.Z.locals||{};class _o extends g{constructor(...e){super(...e),this.handleChange=()=>{this.props.onChange(!this.props.checked)}}render(){const{checked:e,className:t,children:n}=this.props;return Rr("label",{className:qr()(wo.label,t),children:[Rr("input",{className:wo.checkbox,type:"checkbox",checked:e,onChange:this.handleChange}),Rr("span",{className:wo.itemText,children:n})]})}}var xo=n(213),Ao={insert:"head",singleton:!1};Wr()(xo.Z,Ao);const So=xo.Z.locals||{};class Mo extends g{constructor(...e){super(...e),this.handleChange=()=>{this.props.onChange(this.props.item)}}render(){return Rr("div",{className:So.item,children:Rr(_o,{...this.props,onChange:this.handleChange,children:this.renderLabel()})})}renderLabel(){const{children:e,item:t}=this.props;return e?e(t):t===ko.ALL_ITEM?"All":t.label}}const To=Symbol("ALL_ITEM");class ko extends eo{constructor(e){super(e),this.handleToggleAllCheck=()=>{const e=this.isAllChecked()?[]:this.props.items;this.setState({checkedItems:e}),this.informAboutChange(e)},this.handleItemCheck=e=>{let t;t=this.isItemChecked(e)?this.state.checkedItems.filter((t=>t!==e)):[...this.state.checkedItems,e],this.setState({checkedItems:t}),this.informAboutChange(t)},this.state={checkedItems:e.checkedItems||e.items}}componentWillReceiveProps(e){if(e.items!==this.props.items){if(this.isAllChecked())this.setState({checkedItems:e.items}),this.informAboutChange(e.items);else if(this.state.checkedItems.length){const t=e.items.filter((e=>this.state.checkedItems.find((t=>t.label===e.label))));this.setState({checkedItems:t}),this.informAboutChange(t)}}else e.checkedItems!==this.props.checkedItems&&this.setState({checkedItems:e.checkedItems})}render(){const{label:e,items:t,renderLabel:n}=this.props;return Rr("div",{className:So.container,children:[Rr("div",{className:So.label,children:[e,":"]}),Rr("div",{children:[Rr(Mo,{item:To,checked:this.isAllChecked(),onChange:this.handleToggleAllCheck,children:n}),t.map((e=>Rr(Mo,{item:e,checked:this.isItemChecked(e),onChange:this.handleItemCheck,children:n},e.label)))]})]})}isItemChecked(e){return this.state.checkedItems.includes(e)}isAllChecked(){return this.props.items.length===this.state.checkedItems.length}informAboutChange(e){setTimeout((()=>this.props.onChange(e)))}}ko.ALL_ITEM=To;var zo=n(270),Do={insert:"head",singleton:!1};Wr()(zo.Z,Do);const Bo=zo.Z.locals||{};function Lo(){return!1}function Eo({children:e,disabled:t,onClick:n}){return Rr("li",{className:qr()({[Bo.item]:!0,[Bo.disabled]:t}),onClick:t?Lo:n,children:e})}var jo=n(580),Oo={insert:"head",singleton:!1};Wr()(jo.Z,Oo);const Io=jo.Z.locals||{};class No extends eo{constructor(...e){super(...e),this.handleClickHideChunk=()=>{const{chunk:e}=this.props;if(e&&e.label){const t=Rn.selectedChunks.filter((t=>t.label!==e.label));Rn.selectedChunks=t}this.hide()},this.handleClickFilterToChunk=()=>{const{chunk:e}=this.props;if(e&&e.label){const t=Rn.allChunks.filter((t=>t.label===e.label));Rn.selectedChunks=t}this.hide()},this.handleClickShowAllChunks=()=>{Rn.selectedChunks=Rn.allChunks,this.hide()},this.handleDocumentMousedown=e=>{var t,n;e.ctrlKey||2===e.button||(t=e.target,n=this.node,t===n||n.contains(t))||(e.preventDefault(),e.stopPropagation(),this.hide())},this.saveNode=e=>this.node=e}componentDidMount(){this.boundingRect=this.node.getBoundingClientRect()}componentDidUpdate(e){this.props.visible&&!e.visible?document.addEventListener("mousedown",this.handleDocumentMousedown,!0):e.visible&&!this.props.visible&&document.removeEventListener("mousedown",this.handleDocumentMousedown,!0)}render(){const{visible:e}=this.props,t=qr()({[Io.container]:!0,[Io.hidden]:!e}),n=Rn.selectedChunks.length>1;return Rr("ul",{ref:this.saveNode,className:t,style:this.getStyle(),children:[Rr(Eo,{disabled:!n,onClick:this.handleClickHideChunk,children:"Hide chunk"}),Rr(Eo,{disabled:!n,onClick:this.handleClickFilterToChunk,children:"Hide all other chunks"}),Rr("hr",{}),Rr(Eo,{disabled:Rn.allChunksSelected,onClick:this.handleClickShowAllChunks,children:"Show all chunks"})]})}hide(){this.props.onHide&&this.props.onHide()}getStyle(){const{boundingRect:e}=this;if(!e)return;const{coords:t}=this.props,n={left:t.x,top:t.y};return n.left+e.width>window.innerWidth&&(n.left=window.innerWidth-e.width),n.top+e.height>window.innerHeight&&(n.top=t.y-e.height),n}}var Po=n(393),Fo={insert:"head",singleton:!1};Wr()(Po.Z,Fo);const Ro=Po.Z.locals||{};var Go=n(296),Ho=n.n(Go),Uo=n(976),qo={insert:"head",singleton:!1};Wr()(Uo.Z,qo);const Vo=Uo.Z.locals||{};class Wo extends eo{constructor(...e){super(...e),this.handleValueChange=Ho()((e=>{this.informChange(e.target.value)}),400),this.handleInputBlur=()=>{this.handleValueChange.flush()},this.handleClearClick=()=>{this.clear(),this.focus()},this.handleKeyDown=e=>{let t=!0;switch(e.key){case"Escape":this.clear();break;case"Enter":this.handleValueChange.flush();break;default:t=!1}t&&e.stopPropagation()},this.saveInputNode=e=>this.input=e}componentDidMount(){this.props.autofocus&&this.focus()}componentWillUnmount(){this.handleValueChange.clear()}render(){const{label:e,query:t}=this.props;return Rr("div",{className:Vo.container,children:[Rr("div",{className:Vo.label,children:[e,":"]}),Rr("div",{className:Vo.row,children:[Rr("input",{ref:this.saveInputNode,className:Vo.input,type:"text",value:t,placeholder:"Enter regexp",onInput:this.handleValueChange,onBlur:this.handleInputBlur,onKeyDown:this.handleKeyDown}),Rr(no,{className:Vo.clear,onClick:this.handleClearClick,children:"x"})]})]})}focus(){this.input&&this.input.focus()}clear(){this.handleValueChange.clear(),this.informChange(""),this.input.value=""}informChange(e){this.props.onQueryChange(e)}}var Zo=n(784),$o={insert:"head",singleton:!1};Wr()(Zo.Z,$o);const Ko=Zo.Z.locals||{};var Yo=n(150),Jo=n.n(Yo),Xo="".replace,Qo=/[&<>'"]/g,ea={"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"};function ta(e){return Xo.call(e,Qo,na)}function na(e){return ea[e]}var ia=n(697),ra={insert:"head",singleton:!1};Wr()(ia.Z,ra);const oa=ia.Z.locals||{};class aa extends eo{constructor(...e){super(...e),this.state={visible:!0},this.handleClick=()=>this.props.onClick(this.props.module),this.handleMouseEnter=()=>{this.props.isVisible&&this.setState({visible:this.isVisible})}}render({module:e,showSize:t}){const n=!this.state.visible;return Rr("div",{className:qr()(oa.container,oa[this.itemType],{[oa.invisible]:n}),title:n?this.invisibleHint:null,onClick:this.handleClick,onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[Rr("span",{dangerouslySetInnerHTML:{__html:this.titleHtml}}),t&&[" (",Rr("strong",{children:Vn()(e[t])}),")"]]})}get itemType(){const{module:e}=this.props;return e.path?e.groups?"folder":"module":"chunk"}get titleHtml(){let e;const{module:t}=this.props,n=t.path||t.label,i=this.props.highlightedText;if(i){const t=i instanceof RegExp?new RegExp(i.source,"igu"):new RegExp(`(?:${Jo()(i)})+`,"iu");let r,o;do{o=r,r=t.exec(n)}while(r);o&&(e=ta(n.slice(0,o.index))+`<strong>${ta(o[0])}</strong>`+ta(n.slice(o.index+o[0].length)))}return e||(e=ta(n)),e}get invisibleHint(){return`${this.itemType.charAt(0).toUpperCase()+this.itemType.slice(1)} is not rendered in the treemap because it's too small.`}get isVisible(){const{isVisible:e}=this.props;return!e||e(this.props.module)}}class sa extends eo{constructor(...e){super(...e),this.handleModuleClick=e=>this.props.onModuleClick(e)}render({modules:e,showSize:t,highlightedText:n,isModuleVisible:i,className:r}){return Rr("div",{className:qr()(Ko.container,r),children:e.map((e=>Rr(aa,{module:e,showSize:t,highlightedText:n,isVisible:i,onClick:this.handleModuleClick},e.cid)))})}}var ua=n(172),la={insert:"head",singleton:!1};Wr()(ua.Z,la);const ca=ua.Z.locals||{};class ha extends eo{constructor(...e){super(...e),this.input={current:null},this.state={query:"",showOptions:!1},this.handleClickOutside=e=>{const t=this.input.current;t&&e&&!t.contains(e.target)&&(this.setState({showOptions:!1}),this.state.query&&!this.props.options.some((e=>e===this.state.query))&&(this.setState({query:""}),this.props.onSelectionChange(void 0)))},this.handleInput=e=>{const{value:t}=e.target;this.setState({query:t}),t||this.props.onSelectionChange(void 0)},this.handleFocus=()=>{this.input.current.value=this.state.query,this.setState({showOptions:!0})},this.getOptionClickHandler=e=>()=>{this.props.onSelectionChange(e),this.setState({query:e,showOptions:!1})}}componentDidMount(){document.addEventListener("click",this.handleClickOutside,!0)}componentWillUnmount(){document.removeEventListener("click",this.handleClickOutside,!0)}render(){const{label:e,options:t}=this.props,n=this.state.query?t.filter((e=>e.toLowerCase().includes(this.state.query.toLowerCase()))):t;return Rr("div",{className:ca.container,children:[Rr("div",{className:ca.label,children:[e,":"]}),Rr("div",{children:[Rr("input",{ref:this.input,className:ca.input,type:"text",value:this.state.query,onInput:this.handleInput,onFocus:this.handleFocus}),this.state.showOptions?Rr("div",{className:ca.options,children:n.map((e=>Rr("div",{className:ca.option,onClick:this.getOptionClickHandler(e),children:e},e)))}):null]})]})}}var fa,da;const pa=[{label:"Stat",prop:"statSize"},{label:"Parsed",prop:"parsedSize"},{label:"Gzipped",prop:"gzipSize"}];let ga=Pr((P((da=class extends g{constructor(...e){super(...e),this.mouseCoords={x:0,y:0},this.state={selectedChunk:null,selectedMouseCoords:{x:0,y:0},sidebarPinned:!1,showChunkContextMenu:!1,showTooltip:!1,tooltipContent:null},this.renderChunkItemLabel=e=>{const t=e===ko.ALL_ITEM,n=t?"All":e.label,i=t?Rn.totalChunksSize:e[Rn.activeSize];return[`${n} (`,Rr("strong",{children:Vn()(i)}),")"]},this.handleSelectionChange=e=>{Rn.selectedChunks=e?Rn.allChunks.filter((t=>t.isInitialByEntrypoint[e]??!1)):Rn.allChunks},this.handleConcatenatedModulesContentToggle=e=>{Rn.showConcatenatedModulesContent=e,e?Dn.setItem("showConcatenatedModulesContent",!0):Dn.removeItem("showConcatenatedModulesContent")},this.handleChunkContextMenuHide=()=>{this.setState({showChunkContextMenu:!1})},this.handleResize=()=>{this.state.showChunkContextMenu&&this.setState({showChunkContextMenu:!1})},this.handleSidebarToggle=()=>{this.state.sidebarPinned&&setTimeout((()=>this.treemap.resize()))},this.handleSidebarPinStateChange=e=>{this.setState({sidebarPinned:e}),setTimeout((()=>this.treemap.resize()))},this.handleSidebarResize=()=>{this.treemap.resize()},this.handleSizeSwitch=e=>{Rn.selectedSize=e.prop},this.handleQueryChange=e=>{Rn.searchQuery=e},this.handleSelectedChunksChange=e=>{Rn.selectedChunks=e},this.handleMouseLeaveTreemap=()=>{this.setState({showTooltip:!1})},this.handleTreemapGroupSecondaryClick=e=>{const{group:t}=e;t&&t.isAsset?this.setState({selectedChunk:t,selectedMouseCoords:{...this.mouseCoords},showChunkContextMenu:!0}):this.setState({selectedChunk:null,showChunkContextMenu:!1})},this.handleTreemapGroupHover=e=>{const{group:t}=e;t?this.setState({showTooltip:!0,tooltipContent:this.getTooltipContent(t)}):this.setState({showTooltip:!1})},this.handleFoundModuleClick=e=>this.treemap.zoomToGroup(e),this.handleMouseMove=e=>{Object.assign(this.mouseCoords,{x:e.pageX,y:e.pageY})},this.isModuleVisible=e=>this.treemap.isGroupRendered(e),this.saveTreemapRef=e=>this.treemap=e}componentDidMount(){document.addEventListener("mousemove",this.handleMouseMove,!0)}componentWillUnmount(){document.removeEventListener("mousemove",this.handleMouseMove,!0)}render(){const{selectedChunk:e,selectedMouseCoords:t,sidebarPinned:n,showChunkContextMenu:i,showTooltip:r,tooltipContent:o}=this.state;return Rr("div",{className:Ro.container,children:[Rr(mo,{pinned:n,onToggle:this.handleSidebarToggle,onPinStateChange:this.handleSidebarPinStateChange,onResize:this.handleSidebarResize,children:[Rr("div",{className:Ro.sidebarGroup,children:[Rr(so,{label:"Treemap sizes",items:this.sizeSwitchItems,activeItem:this.activeSizeItem,onSwitch:this.handleSizeSwitch}),Rn.hasConcatenatedModules&&Rr("div",{className:Ro.showOption,children:Rr(_o,{checked:Rn.showConcatenatedModulesContent,onChange:this.handleConcatenatedModulesContentToggle,children:"Show content of concatenated modules"+("statSize"===Rn.activeSize?"":" (inaccurate)")})})]}),Rr("div",{className:Ro.sidebarGroup,children:Rr(ha,{label:"Filter to initial chunks",options:Rn.entrypoints,onSelectionChange:this.handleSelectionChange})}),Rr("div",{className:Ro.sidebarGroup,children:[Rr(Wo,{label:"Search modules",query:Rn.searchQuery,autofocus:!0,onQueryChange:this.handleQueryChange}),Rr("div",{className:Ro.foundModulesInfo,children:this.foundModulesInfo}),Rn.isSearching&&Rn.hasFoundModules&&Rr("div",{className:Ro.foundModulesContainer,children:Rn.foundModulesByChunk.map((({chunk:e,modules:t})=>Rr("div",{className:Ro.foundModulesChunk,children:[Rr("div",{className:Ro.foundModulesChunkName,onClick:()=>this.treemap.zoomToGroup(e),children:e.label}),Rr(sa,{className:Ro.foundModulesList,modules:t,showSize:Rn.activeSize,highlightedText:Rn.searchQueryRegexp,isModuleVisible:this.isModuleVisible,onModuleClick:this.handleFoundModuleClick})]},e.cid)))})]}),this.chunkItems.length>1&&Rr("div",{className:Ro.sidebarGroup,children:Rr(ko,{label:"Show chunks",items:this.chunkItems,checkedItems:Rn.selectedChunks,renderLabel:this.renderChunkItemLabel,onChange:this.handleSelectedChunksChange})})]}),Rr(Gr,{ref:this.saveTreemapRef,className:Ro.map,data:Rn.visibleChunks,highlightGroups:this.highlightedModules,weightProp:Rn.activeSize,onMouseLeave:this.handleMouseLeaveTreemap,onGroupHover:this.handleTreemapGroupHover,onGroupSecondaryClick:this.handleTreemapGroupSecondaryClick,onResize:this.handleResize}),Rr(Yr,{visible:r,children:o}),Rr(No,{visible:i,chunk:e,coords:t,onHide:this.handleChunkContextMenuHide})]})}renderModuleSize(e,t){const n=`${t}Size`,i=e[n],r=pa.find((e=>e.prop===n)).label,o=Rn.activeSize===n;return"number"==typeof i?Rr("div",{className:o?Ro.activeSize:"",children:[r," size: ",Rr("strong",{children:Vn()(i)})]}):null}get sizeSwitchItems(){return Rn.hasParsedSizes?pa:pa.slice(0,1)}get activeSizeItem(){return this.sizeSwitchItems.find((e=>e.prop===Rn.activeSize))}get chunkItems(){const{allChunks:e,activeSize:t}=Rn;let n=[...e];return"statSize"!==t&&(n=n.filter(kn)),n.sort(((e,n)=>n[t]-e[t])),n}get highlightedModules(){return new Set(Rn.foundModules)}get foundModulesInfo(){return Rn.isSearching?Rn.hasFoundModules?[Rr("div",{className:Ro.foundModulesInfoItem,children:["Count: ",Rr("strong",{children:Rn.foundModules.length})]}),Rr("div",{className:Ro.foundModulesInfoItem,children:["Total size: ",Rr("strong",{children:Vn()(Rn.foundModulesSize)})]})]:"Nothing found"+(Rn.allChunksSelected?"":" in selected chunks"):" "}getTooltipContent(e){return e?Rr("div",{children:[Rr("div",{children:Rr("strong",{children:e.label})}),Rr("br",{}),this.renderModuleSize(e,"stat"),!e.inaccurateSizes&&this.renderModuleSize(e,"parsed"),!e.inaccurateSizes&&this.renderModuleSize(e,"gzip"),e.path&&Rr("div",{children:["Path: ",Rr("strong",{children:e.path})]}),e.isAsset&&Rr("div",{children:[Rr("br",{}),Rr("strong",{children:Rr("em",{children:"Right-click to view options related to this chunk"})})]})]}):null}}).prototype,"sizeSwitchItems",[De],Object.getOwnPropertyDescriptor(da.prototype,"sizeSwitchItems"),da.prototype),P(da.prototype,"activeSizeItem",[De],Object.getOwnPropertyDescriptor(da.prototype,"activeSizeItem"),da.prototype),P(da.prototype,"chunkItems",[De],Object.getOwnPropertyDescriptor(da.prototype,"chunkItems"),da.prototype),P(da.prototype,"highlightedModules",[De],Object.getOwnPropertyDescriptor(da.prototype,"highlightedModules"),da.prototype),P(da.prototype,"foundModulesInfo",[De],Object.getOwnPropertyDescriptor(da.prototype,"foundModulesInfo"),da.prototype),fa=da))||fa;var ba=n(194),va={insert:"head",singleton:!1};Wr()(ba.Z,va);ba.Z.locals;let ma;try{window.enableWebSocket&&(ma=new WebSocket(`ws://${location.host}`))}catch(ya){console.warn("Couldn't connect to analyzer websocket server so you'll have to reload page manually to see updates in the treemap")}window.addEventListener("load",(()=>{Rn.defaultSize=`${window.defaultSizes}Size`,Rn.setModules(window.chartData),Rn.setEntrypoints(window.entrypoints),j(Rr(ga,{}),document.getElementById("app")),ma&&ma.addEventListener("message",(e=>{const t=JSON.parse(e.data);"chartDataUpdated"===t.event&&Rn.setModules(t.data)}))}),!1)})()})();
+//# sourceMappingURL=viewer.js.map</script>
+  </head>
+
+  <body>
+    <div id="app"></div>
+    <script>
+      window.chartData = [{"label":"Recharts.js","isAsset":true,"statSize":1390141,"parsedSize":489095,"gzipSize":130121,"groups":[{"label":"node_modules","path":"./node_modules","statSize":126474,"groups":[{"label":"decimal.js-light","path":"./node_modules/decimal.js-light","statSize":53368,"groups":[{"id":8351,"label":"decimal.js","path":"./node_modules/decimal.js-light/decimal.js","statSize":53368}],"parsedSize":0,"gzipSize":0},{"label":"es-toolkit","path":"./node_modules/es-toolkit","statSize":56074,"groups":[{"label":"compat","path":"./node_modules/es-toolkit/compat","statSize":804,"groups":[{"id":305,"label":"get.js","path":"./node_modules/es-toolkit/compat/get.js","statSize":62},{"id":7541,"label":"isEqual.js","path":"./node_modules/es-toolkit/compat/isEqual.js","statSize":66},{"id":2938,"label":"isPlainObject.js","path":"./node_modules/es-toolkit/compat/isPlainObject.js","statSize":85},{"id":25,"label":"last.js","path":"./node_modules/es-toolkit/compat/last.js","statSize":63},{"id":4338,"label":"maxBy.js","path":"./node_modules/es-toolkit/compat/maxBy.js","statSize":64},{"id":2972,"label":"minBy.js","path":"./node_modules/es-toolkit/compat/minBy.js","statSize":64},{"id":1576,"label":"omit.js","path":"./node_modules/es-toolkit/compat/omit.js","statSize":64},{"id":3412,"label":"range.js","path":"./node_modules/es-toolkit/compat/range.js","statSize":64},{"id":184,"label":"sortBy.js","path":"./node_modules/es-toolkit/compat/sortBy.js","statSize":67},{"id":2067,"label":"sumBy.js","path":"./node_modules/es-toolkit/compat/sumBy.js","statSize":64},{"id":4297,"label":"throttle.js","path":"./node_modules/es-toolkit/compat/throttle.js","statSize":74},{"id":1081,"label":"uniqBy.js","path":"./node_modules/es-toolkit/compat/uniqBy.js","statSize":67}],"parsedSize":0,"gzipSize":0},{"label":"dist","path":"./node_modules/es-toolkit/dist","statSize":55270,"groups":[{"label":"_internal","path":"./node_modules/es-toolkit/dist/_internal","statSize":202,"groups":[{"id":8193,"label":"isUnsafeProperty.js","path":"./node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js","statSize":202}],"parsedSize":0,"gzipSize":0},{"label":"array","path":"./node_modules/es-toolkit/dist/array","statSize":2217,"groups":[{"id":5711,"label":"flatten.js","path":"./node_modules/es-toolkit/dist/array/flatten.js","statSize":610},{"id":645,"label":"last.js","path":"./node_modules/es-toolkit/dist/array/last.js","statSize":166},{"id":334,"label":"maxBy.js","path":"./node_modules/es-toolkit/dist/array/maxBy.js","statSize":523},{"id":8240,"label":"minBy.js","path":"./node_modules/es-toolkit/dist/array/minBy.js","statSize":523},{"id":8805,"label":"uniqBy.js","path":"./node_modules/es-toolkit/dist/array/uniqBy.js","statSize":395}],"parsedSize":0,"gzipSize":0},{"label":"compat","path":"./node_modules/es-toolkit/dist/compat","statSize":36200,"groups":[{"label":"_internal","path":"./node_modules/es-toolkit/dist/compat/_internal","statSize":6372,"groups":[{"id":3500,"label":"compareValues.js","path":"./node_modules/es-toolkit/dist/compat/_internal/compareValues.js","statSize":862},{"id":6012,"label":"getSymbols.js","path":"./node_modules/es-toolkit/dist/compat/_internal/getSymbols.js","statSize":281},{"id":2049,"label":"getTag.js","path":"./node_modules/es-toolkit/dist/compat/_internal/getTag.js","statSize":300},{"id":5112,"label":"isDeepKey.js","path":"./node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js","statSize":380},{"id":8509,"label":"isIndex.js","path":"./node_modules/es-toolkit/dist/compat/_internal/isIndex.js","statSize":520},{"id":316,"label":"isIterateeCall.js","path":"./node_modules/es-toolkit/dist/compat/_internal/isIterateeCall.js","statSize":691},{"id":3998,"label":"isKey.js","path":"./node_modules/es-toolkit/dist/compat/_internal/isKey.js","statSize":679},{"id":9184,"label":"tags.js","path":"./node_modules/es-toolkit/dist/compat/_internal/tags.js","statSize":2122},{"id":4483,"label":"toArray.js","path":"./node_modules/es-toolkit/dist/compat/_internal/toArray.js","statSize":206},{"id":1465,"label":"toKey.js","path":"./node_modules/es-toolkit/dist/compat/_internal/toKey.js","statSize":331}],"parsedSize":0,"gzipSize":0},{"label":"array","path":"./node_modules/es-toolkit/dist/compat/array","statSize":4448,"groups":[{"id":1334,"label":"last.js","path":"./node_modules/es-toolkit/dist/compat/array/last.js","statSize":419},{"id":3097,"label":"orderBy.js","path":"./node_modules/es-toolkit/dist/compat/array/orderBy.js","statSize":2776},{"id":4259,"label":"sortBy.js","path":"./node_modules/es-toolkit/dist/compat/array/sortBy.js","statSize":692},{"id":2810,"label":"uniqBy.js","path":"./node_modules/es-toolkit/dist/compat/array/uniqBy.js","statSize":561}],"parsedSize":0,"gzipSize":0},{"label":"function","path":"./node_modules/es-toolkit/dist/compat/function","statSize":1809,"groups":[{"id":8,"label":"debounce.js","path":"./node_modules/es-toolkit/dist/compat/function/debounce.js","statSize":1410},{"id":5259,"label":"throttle.js","path":"./node_modules/es-toolkit/dist/compat/function/throttle.js","statSize":399}],"parsedSize":0,"gzipSize":0},{"label":"math","path":"./node_modules/es-toolkit/dist/compat/math","statSize":2528,"groups":[{"id":5938,"label":"maxBy.js","path":"./node_modules/es-toolkit/dist/compat/math/maxBy.js","statSize":460},{"id":924,"label":"minBy.js","path":"./node_modules/es-toolkit/dist/compat/math/minBy.js","statSize":460},{"id":5012,"label":"range.js","path":"./node_modules/es-toolkit/dist/compat/math/range.js","statSize":889},{"id":3667,"label":"sumBy.js","path":"./node_modules/es-toolkit/dist/compat/math/sumBy.js","statSize":719}],"parsedSize":0,"gzipSize":0},{"label":"object","path":"./node_modules/es-toolkit/dist/compat/object","statSize":8509,"groups":[{"id":3923,"label":"cloneDeep.js","path":"./node_modules/es-toolkit/dist/compat/object/cloneDeep.js","statSize":248},{"id":9467,"label":"cloneDeepWith.js","path":"./node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js","statSize":1282},{"id":4200,"label":"get.js","path":"./node_modules/es-toolkit/dist/compat/object/get.js","statSize":2369},{"id":7324,"label":"has.js","path":"./node_modules/es-toolkit/dist/compat/object/has.js","statSize":1166},{"id":4167,"label":"omit.js","path":"./node_modules/es-toolkit/dist/compat/object/omit.js","statSize":974},{"id":3403,"label":"property.js","path":"./node_modules/es-toolkit/dist/compat/object/property.js","statSize":257},{"id":7841,"label":"unset.js","path":"./node_modules/es-toolkit/dist/compat/object/unset.js","statSize":2213}],"parsedSize":0,"gzipSize":0},{"label":"predicate","path":"./node_modules/es-toolkit/dist/compat/predicate","statSize":8977,"groups":[{"id":2984,"label":"isArguments.js","path":"./node_modules/es-toolkit/dist/compat/predicate/isArguments.js","statSize":313},{"id":58,"label":"isArrayLike.js","path":"./node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js","statSize":307},{"id":8161,"label":"isArrayLikeObject.js","path":"./node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js","statSize":355},{"id":717,"label":"isMatch.js","path":"./node_modules/es-toolkit/dist/compat/predicate/isMatch.js","statSize":273},{"id":8273,"label":"isMatchWith.js","path":"./node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js","statSize":4690},{"id":4905,"label":"isObject.js","path":"./node_modules/es-toolkit/dist/compat/predicate/isObject.js","statSize":237},{"id":1846,"label":"isObjectLike.js","path":"./node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js","statSize":216},{"id":8695,"label":"isPlainObject.js","path":"./node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js","statSize":953},{"id":1366,"label":"isSymbol.js","path":"./node_modules/es-toolkit/dist/compat/predicate/isSymbol.js","statSize":213},{"id":7861,"label":"matches.js","path":"./node_modules/es-toolkit/dist/compat/predicate/matches.js","statSize":366},{"id":3036,"label":"matchesProperty.js","path":"./node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js","statSize":1054}],"parsedSize":0,"gzipSize":0},{"label":"util","path":"./node_modules/es-toolkit/dist/compat/util","statSize":3557,"groups":[{"id":6761,"label":"eq.js","path":"./node_modules/es-toolkit/dist/compat/util/eq.js","statSize":213},{"id":8202,"label":"iteratee.js","path":"./node_modules/es-toolkit/dist/compat/util/iteratee.js","statSize":894},{"id":4569,"label":"toFinite.js","path":"./node_modules/es-toolkit/dist/compat/util/toFinite.js","statSize":474},{"id":8919,"label":"toNumber.js","path":"./node_modules/es-toolkit/dist/compat/util/toNumber.js","statSize":291},{"id":3025,"label":"toPath.js","path":"./node_modules/es-toolkit/dist/compat/util/toPath.js","statSize":1685}],"parsedSize":0,"gzipSize":0}],"parsedSize":0,"gzipSize":0},{"label":"function","path":"./node_modules/es-toolkit/dist/function","statSize":2038,"groups":[{"id":6773,"label":"debounce.js","path":"./node_modules/es-toolkit/dist/function/debounce.js","statSize":1749},{"id":6440,"label":"identity.js","path":"./node_modules/es-toolkit/dist/function/identity.js","statSize":158},{"id":6502,"label":"noop.js","path":"./node_modules/es-toolkit/dist/function/noop.js","statSize":131}],"parsedSize":0,"gzipSize":0},{"label":"object","path":"./node_modules/es-toolkit/dist/object","statSize":6469,"groups":[{"id":3844,"label":"cloneDeep.js","path":"./node_modules/es-toolkit/dist/object/cloneDeep.js","statSize":290},{"id":3964,"label":"cloneDeepWith.js","path":"./node_modules/es-toolkit/dist/object/cloneDeepWith.js","statSize":6179}],"parsedSize":0,"gzipSize":0},{"label":"predicate","path":"./node_modules/es-toolkit/dist/predicate","statSize":8144,"groups":[{"id":9341,"label":"isEqual.js","path":"./node_modules/es-toolkit/dist/predicate/isEqual.js","statSize":292},{"id":993,"label":"isEqualWith.js","path":"./node_modules/es-toolkit/dist/predicate/isEqualWith.js","statSize":6636},{"id":9181,"label":"isLength.js","path":"./node_modules/es-toolkit/dist/predicate/isLength.js","statSize":202},{"id":7074,"label":"isPlainObject.js","path":"./node_modules/es-toolkit/dist/predicate/isPlainObject.js","statSize":551},{"id":2520,"label":"isPrimitive.js","path":"./node_modules/es-toolkit/dist/predicate/isPrimitive.js","statSize":245},{"id":3908,"label":"isTypedArray.js","path":"./node_modules/es-toolkit/dist/predicate/isTypedArray.js","statSize":218}],"parsedSize":0,"gzipSize":0}],"parsedSize":0,"gzipSize":0}],"parsedSize":0,"gzipSize":0},{"label":"eventemitter3","path":"./node_modules/eventemitter3","statSize":9141,"groups":[{"id":228,"label":"index.js","path":"./node_modules/eventemitter3/index.js","statSize":9141}],"parsedSize":0,"gzipSize":0},{"label":"hoist-non-react-statics/dist","path":"./node_modules/hoist-non-react-statics/dist","statSize":2743,"groups":[{"id":4146,"label":"hoist-non-react-statics.cjs.js","path":"./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","statSize":2743}],"parsedSize":0,"gzipSize":0},{"label":"use-sync-external-store","path":"./node_modules/use-sync-external-store","statSize":5148,"groups":[{"label":"cjs","path":"./node_modules/use-sync-external-store/cjs","statSize":4652,"groups":[{"id":8493,"label":"use-sync-external-store-shim.production.js","path":"./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","statSize":1967},{"label":"use-sync-external-store-shim","path":"./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim","statSize":2685,"groups":[{"id":2162,"label":"with-selector.production.js","path":"./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","statSize":2685}],"parsedSize":0,"gzipSize":0}],"parsedSize":0,"gzipSize":0},{"label":"shim","path":"./node_modules/use-sync-external-store/shim","statSize":496,"groups":[{"id":9888,"label":"index.js","path":"./node_modules/use-sync-external-store/shim/index.js","statSize":234},{"id":9242,"label":"with-selector.js","path":"./node_modules/use-sync-external-store/shim/with-selector.js","statSize":262}],"parsedSize":0,"gzipSize":0}],"parsedSize":0,"gzipSize":0}],"parsedSize":0,"gzipSize":0},{"label":"src","path":"./src","statSize":1263667,"groups":[{"id":2158,"label":"index.ts + 355 modules (concatenated)","path":"./src/index.ts + 355 modules (concatenated)","statSize":1263667,"parsedSize":489089,"gzipSize":130121,"concatenated":true,"groups":[{"label":"src","path":"./src/index.ts + 355 modules (concatenated)/src","statSize":886010,"groups":[{"id":null,"label":"index.ts","path":"./src/index.ts + 355 modules (concatenated)/src/index.ts","statSize":3129,"parsedSize":1211,"gzipSize":322,"inaccurateSizes":true},{"label":"container","path":"./src/index.ts + 355 modules (concatenated)/src/container","statSize":7710,"groups":[{"id":null,"label":"Surface.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/container/Surface.tsx","statSize":1907,"parsedSize":738,"gzipSize":196,"inaccurateSizes":true},{"id":null,"label":"Layer.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/container/Layer.tsx","statSize":1342,"parsedSize":519,"gzipSize":138,"inaccurateSizes":true},{"id":null,"label":"ClipPathProvider.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/container/ClipPathProvider.tsx","statSize":1313,"parsedSize":508,"gzipSize":135,"inaccurateSizes":true},{"id":null,"label":"RootSurface.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/container/RootSurface.tsx","statSize":3148,"parsedSize":1218,"gzipSize":324,"inaccurateSizes":true}],"parsedSize":2984,"gzipSize":793,"inaccurateSizes":true},{"label":"component","path":"./src/index.ts + 355 modules (concatenated)/src/component","statSize":78732,"groups":[{"id":null,"label":"Legend.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/Legend.tsx","statSize":8006,"parsedSize":3098,"gzipSize":824,"inaccurateSizes":true},{"id":null,"label":"DefaultLegendContent.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/DefaultLegendContent.tsx","statSize":6548,"parsedSize":2534,"gzipSize":674,"inaccurateSizes":true},{"id":null,"label":"Tooltip.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/Tooltip.tsx","statSize":7426,"parsedSize":2874,"gzipSize":764,"inaccurateSizes":true},{"id":null,"label":"DefaultTooltipContent.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/DefaultTooltipContent.tsx","statSize":5344,"parsedSize":2068,"gzipSize":550,"inaccurateSizes":true},{"id":null,"label":"ResponsiveContainer.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/ResponsiveContainer.tsx","statSize":6236,"parsedSize":2413,"gzipSize":642,"inaccurateSizes":true},{"id":null,"label":"Cell.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/Cell.tsx","statSize":92,"parsedSize":35,"gzipSize":9,"inaccurateSizes":true},{"id":null,"label":"Text.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/Text.tsx","statSize":8336,"parsedSize":3226,"gzipSize":858,"inaccurateSizes":true},{"id":null,"label":"Label.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/Label.tsx","statSize":16140,"parsedSize":6246,"gzipSize":1661,"inaccurateSizes":true},{"id":null,"label":"LabelList.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/LabelList.tsx","statSize":5284,"parsedSize":2045,"gzipSize":544,"inaccurateSizes":true},{"id":null,"label":"Customized.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/Customized.tsx","statSize":1516,"parsedSize":586,"gzipSize":156,"inaccurateSizes":true},{"id":null,"label":"TooltipBoundingBox.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/TooltipBoundingBox.tsx","statSize":5111,"parsedSize":1978,"gzipSize":526,"inaccurateSizes":true},{"id":null,"label":"Cursor.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/Cursor.tsx","statSize":5289,"parsedSize":2047,"gzipSize":544,"inaccurateSizes":true},{"id":null,"label":"ActivePoints.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/component/ActivePoints.tsx","statSize":3404,"parsedSize":1317,"gzipSize":350,"inaccurateSizes":true}],"parsedSize":30472,"gzipSize":8107,"inaccurateSizes":true},{"label":"shape","path":"./src/index.ts + 355 modules (concatenated)/src/shape","statSize":34974,"groups":[{"id":null,"label":"Symbols.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/shape/Symbols.tsx","statSize":4528,"parsedSize":1752,"gzipSize":466,"inaccurateSizes":true},{"id":null,"label":"Curve.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/shape/Curve.tsx","statSize":4922,"parsedSize":1905,"gzipSize":506,"inaccurateSizes":true},{"id":null,"label":"Cross.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/shape/Cross.tsx","statSize":3177,"parsedSize":1229,"gzipSize":327,"inaccurateSizes":true},{"id":null,"label":"Rectangle.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/shape/Rectangle.tsx","statSize":6090,"parsedSize":2357,"gzipSize":627,"inaccurateSizes":true},{"id":null,"label":"Sector.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/shape/Sector.tsx","statSize":7506,"parsedSize":2905,"gzipSize":772,"inaccurateSizes":true},{"id":null,"label":"Polygon.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/shape/Polygon.tsx","statSize":4060,"parsedSize":1571,"gzipSize":418,"inaccurateSizes":true},{"id":null,"label":"Dot.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/shape/Dot.tsx","statSize":898,"parsedSize":347,"gzipSize":92,"inaccurateSizes":true},{"id":null,"label":"Trapezoid.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/shape/Trapezoid.tsx","statSize":3793,"parsedSize":1468,"gzipSize":390,"inaccurateSizes":true}],"parsedSize":13536,"gzipSize":3601,"inaccurateSizes":true},{"label":"context","path":"./src/index.ts + 355 modules (concatenated)/src/context","statSize":14392,"groups":[{"id":null,"label":"chartLayoutContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/chartLayoutContext.tsx","statSize":4588,"parsedSize":1775,"gzipSize":472,"inaccurateSizes":true},{"id":null,"label":"legendPortalContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/legendPortalContext.tsx","statSize":185,"parsedSize":71,"gzipSize":19,"inaccurateSizes":true},{"id":null,"label":"legendPayloadContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/legendPayloadContext.tsx","statSize":359,"parsedSize":138,"gzipSize":36,"inaccurateSizes":true},{"id":null,"label":"PanoramaContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/PanoramaContext.tsx","statSize":393,"parsedSize":152,"gzipSize":40,"inaccurateSizes":true},{"id":null,"label":"accessibilityContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/accessibilityContext.tsx","statSize":150,"parsedSize":58,"gzipSize":15,"inaccurateSizes":true},{"id":null,"label":"tooltipPortalContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/tooltipPortalContext.tsx","statSize":188,"parsedSize":72,"gzipSize":19,"inaccurateSizes":true},{"id":null,"label":"tooltipContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/tooltipContext.tsx","statSize":1319,"parsedSize":510,"gzipSize":135,"inaccurateSizes":true},{"id":null,"label":"RegisterGraphicalItemId.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/RegisterGraphicalItemId.tsx","statSize":577,"parsedSize":223,"gzipSize":59,"inaccurateSizes":true},{"id":null,"label":"ErrorBarContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/ErrorBarContext.tsx","statSize":1934,"parsedSize":748,"gzipSize":199,"inaccurateSizes":true},{"id":null,"label":"chartDataContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/chartDataContext.tsx","statSize":2597,"parsedSize":1005,"gzipSize":267,"inaccurateSizes":true},{"id":null,"label":"brushUpdateContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/context/brushUpdateContext.tsx","statSize":116,"parsedSize":44,"gzipSize":11,"inaccurateSizes":true},{"id":null,"label":"useTooltipAxis.ts","path":"./src/index.ts + 355 modules (concatenated)/src/context/useTooltipAxis.ts","statSize":1986,"parsedSize":768,"gzipSize":204,"inaccurateSizes":true}],"parsedSize":5570,"gzipSize":1481,"inaccurateSizes":true},{"label":"util","path":"./src/index.ts + 355 modules (concatenated)/src/util","statSize":132970,"groups":[{"id":null,"label":"Global.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/Global.ts","statSize":203,"parsedSize":78,"gzipSize":20,"inaccurateSizes":true},{"label":"scale","path":"./src/index.ts + 355 modules (concatenated)/src/util/scale","statSize":13723,"groups":[{"id":null,"label":"getNiceTickValues.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/scale/getNiceTickValues.ts","statSize":8407,"parsedSize":3253,"gzipSize":865,"inaccurateSizes":true},{"label":"util","path":"./src/index.ts + 355 modules (concatenated)/src/util/scale/util","statSize":5316,"groups":[{"id":null,"label":"utils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/scale/util/utils.ts","statSize":2566,"parsedSize":993,"gzipSize":264,"inaccurateSizes":true},{"id":null,"label":"arithmetic.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/scale/util/arithmetic.ts","statSize":2750,"parsedSize":1064,"gzipSize":283,"inaccurateSizes":true}],"parsedSize":2057,"gzipSize":547,"inaccurateSizes":true}],"parsedSize":5311,"gzipSize":1413,"inaccurateSizes":true},{"id":null,"label":"ReactUtils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/ReactUtils.ts","statSize":6259,"parsedSize":2422,"gzipSize":644,"inaccurateSizes":true},{"id":null,"label":"DataUtils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/DataUtils.ts","statSize":4470,"parsedSize":1730,"gzipSize":460,"inaccurateSizes":true},{"id":null,"label":"types.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/types.ts","statSize":6171,"parsedSize":2388,"gzipSize":635,"inaccurateSizes":true},{"id":null,"label":"svgPropertiesNoEvents.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/svgPropertiesNoEvents.ts","statSize":5073,"parsedSize":1963,"gzipSize":522,"inaccurateSizes":true},{"label":"payload","path":"./src/index.ts + 355 modules (concatenated)/src/util/payload","statSize":525,"groups":[{"id":null,"label":"getUniqPayload.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/payload/getUniqPayload.ts","statSize":525,"parsedSize":203,"gzipSize":54,"inaccurateSizes":true}],"parsedSize":203,"gzipSize":54,"inaccurateSizes":true},{"id":null,"label":"useElementOffset.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/useElementOffset.ts","statSize":1847,"parsedSize":714,"gzipSize":190,"inaccurateSizes":true},{"id":null,"label":"ChartUtils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/ChartUtils.ts","statSize":20536,"parsedSize":7948,"gzipSize":2114,"inaccurateSizes":true},{"id":null,"label":"PolarUtils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/PolarUtils.ts","statSize":4637,"parsedSize":1794,"gzipSize":477,"inaccurateSizes":true},{"id":null,"label":"Constants.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/Constants.ts","statSize":2298,"parsedSize":889,"gzipSize":236,"inaccurateSizes":true},{"id":null,"label":"isWellBehavedNumber.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/isWellBehavedNumber.ts","statSize":174,"parsedSize":67,"gzipSize":17,"inaccurateSizes":true},{"id":null,"label":"resolveDefaultProps.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/util/resolveDefaultProps.tsx","statSize":5174,"parsedSize":2002,"gzipSize":532,"inaccurateSizes":true},{"id":null,"label":"LogUtils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/LogUtils.ts","statSize":797,"parsedSize":308,"gzipSize":82,"inaccurateSizes":true},{"id":null,"label":"DOMUtils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/DOMUtils.ts","statSize":4873,"parsedSize":1886,"gzipSize":501,"inaccurateSizes":true},{"id":null,"label":"ReduceCSSCalc.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/ReduceCSSCalc.ts","statSize":4684,"parsedSize":1812,"gzipSize":482,"inaccurateSizes":true},{"id":null,"label":"ActiveShapeUtils.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/util/ActiveShapeUtils.tsx","statSize":4727,"parsedSize":1829,"gzipSize":486,"inaccurateSizes":true},{"id":null,"label":"useAnimationId.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/util/useAnimationId.tsx","statSize":1164,"parsedSize":450,"gzipSize":119,"inaccurateSizes":true},{"id":null,"label":"RadialBarUtils.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/util/RadialBarUtils.tsx","statSize":2583,"parsedSize":999,"gzipSize":265,"inaccurateSizes":true},{"id":null,"label":"BarUtils.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/util/BarUtils.tsx","statSize":4577,"parsedSize":1771,"gzipSize":471,"inaccurateSizes":true},{"id":null,"label":"CssPrefixUtils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/CssPrefixUtils.ts","statSize":1680,"parsedSize":650,"gzipSize":172,"inaccurateSizes":true},{"id":null,"label":"CartesianUtils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/CartesianUtils.ts","statSize":5674,"parsedSize":2196,"gzipSize":584,"inaccurateSizes":true},{"id":null,"label":"ShallowEqual.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/ShallowEqual.ts","statSize":383,"parsedSize":148,"gzipSize":39,"inaccurateSizes":true},{"id":null,"label":"ScatterUtils.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/util/ScatterUtils.tsx","statSize":1529,"parsedSize":591,"gzipSize":157,"inaccurateSizes":true},{"id":null,"label":"YAxisUtils.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/util/YAxisUtils.tsx","statSize":1324,"parsedSize":512,"gzipSize":136,"inaccurateSizes":true},{"id":null,"label":"FunnelUtils.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/util/FunnelUtils.tsx","statSize":2708,"parsedSize":1048,"gzipSize":278,"inaccurateSizes":true},{"id":null,"label":"excludeEventProps.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/excludeEventProps.ts","statSize":3636,"parsedSize":1407,"gzipSize":374,"inaccurateSizes":true},{"id":null,"label":"getSliced.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/getSliced.ts","statSize":215,"parsedSize":83,"gzipSize":22,"inaccurateSizes":true},{"label":"tooltip","path":"./src/index.ts + 355 modules (concatenated)/src/util/tooltip","statSize":3486,"groups":[{"id":null,"label":"translate.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/tooltip/translate.ts","statSize":3486,"parsedSize":1349,"gzipSize":358,"inaccurateSizes":true}],"parsedSize":1349,"gzipSize":358,"inaccurateSizes":true},{"label":"cursor","path":"./src/index.ts + 355 modules (concatenated)/src/util/cursor","statSize":2343,"groups":[{"id":null,"label":"getCursorRectangle.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/cursor/getCursorRectangle.ts","statSize":511,"parsedSize":197,"gzipSize":52,"inaccurateSizes":true},{"id":null,"label":"getRadialCursorPoints.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/cursor/getRadialCursorPoints.ts","statSize":571,"parsedSize":220,"gzipSize":58,"inaccurateSizes":true},{"id":null,"label":"getCursorPoints.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/cursor/getCursorPoints.ts","statSize":1261,"parsedSize":488,"gzipSize":129,"inaccurateSizes":true}],"parsedSize":906,"gzipSize":241,"inaccurateSizes":true},{"id":null,"label":"isDomainSpecifiedByUser.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/isDomainSpecifiedByUser.ts","statSize":7077,"parsedSize":2739,"gzipSize":728,"inaccurateSizes":true},{"label":"stacks","path":"./src/index.ts + 355 modules (concatenated)/src/util/stacks","statSize":385,"groups":[{"id":null,"label":"getStackSeriesIdentifier.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/stacks/getStackSeriesIdentifier.ts","statSize":385,"parsedSize":149,"gzipSize":39,"inaccurateSizes":true}],"parsedSize":149,"gzipSize":39,"inaccurateSizes":true},{"id":null,"label":"Events.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/Events.ts","statSize":223,"parsedSize":86,"gzipSize":22,"inaccurateSizes":true},{"id":null,"label":"LRUCache.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/LRUCache.ts","statSize":1313,"parsedSize":508,"gzipSize":135,"inaccurateSizes":true},{"id":null,"label":"useUniqueId.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/useUniqueId.ts","statSize":1131,"parsedSize":437,"gzipSize":116,"inaccurateSizes":true},{"id":null,"label":"TickUtils.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/TickUtils.ts","statSize":1298,"parsedSize":502,"gzipSize":133,"inaccurateSizes":true},{"id":null,"label":"useReportScale.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/useReportScale.ts","statSize":767,"parsedSize":296,"gzipSize":78,"inaccurateSizes":true},{"id":null,"label":"useId.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/useId.ts","statSize":663,"parsedSize":256,"gzipSize":68,"inaccurateSizes":true},{"id":null,"label":"getEveryNthWithCondition.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/getEveryNthWithCondition.ts","statSize":860,"parsedSize":332,"gzipSize":88,"inaccurateSizes":true},{"id":null,"label":"getChartPointer.ts","path":"./src/index.ts + 355 modules (concatenated)/src/util/getChartPointer.ts","statSize":1780,"parsedSize":688,"gzipSize":183,"inaccurateSizes":true}],"parsedSize":51464,"gzipSize":13692,"inaccurateSizes":true},{"label":"polar","path":"./src/index.ts + 355 modules (concatenated)/src/polar","statSize":81011,"groups":[{"id":null,"label":"PolarGrid.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/polar/PolarGrid.tsx","statSize":8444,"parsedSize":3268,"gzipSize":869,"inaccurateSizes":true},{"id":null,"label":"PolarRadiusAxis.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/polar/PolarRadiusAxis.tsx","statSize":9052,"parsedSize":3503,"gzipSize":932,"inaccurateSizes":true},{"id":null,"label":"PolarAngleAxis.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/polar/PolarAngleAxis.tsx","statSize":9909,"parsedSize":3835,"gzipSize":1020,"inaccurateSizes":true},{"id":null,"label":"Pie.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/polar/Pie.tsx","statSize":20978,"parsedSize":8119,"gzipSize":2160,"inaccurateSizes":true},{"id":null,"label":"Radar.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/polar/Radar.tsx","statSize":14429,"parsedSize":5584,"gzipSize":1485,"inaccurateSizes":true},{"id":null,"label":"RadialBar.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/polar/RadialBar.tsx","statSize":17578,"parsedSize":6803,"gzipSize":1810,"inaccurateSizes":true},{"id":null,"label":"defaultPolarAngleAxisProps.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/polar/defaultPolarAngleAxisProps.tsx","statSize":342,"parsedSize":132,"gzipSize":35,"inaccurateSizes":true},{"id":null,"label":"defaultPolarRadiusAxisProps.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/polar/defaultPolarRadiusAxisProps.tsx","statSize":279,"parsedSize":107,"gzipSize":28,"inaccurateSizes":true}],"parsedSize":31354,"gzipSize":8341,"inaccurateSizes":true},{"id":null,"label":"hooks.ts","path":"./src/index.ts + 355 modules (concatenated)/src/hooks.ts","statSize":2797,"parsedSize":1082,"gzipSize":288,"inaccurateSizes":true},{"label":"cartesian","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian","statSize":212664,"groups":[{"id":null,"label":"Bar.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/Bar.tsx","statSize":21877,"parsedSize":8467,"gzipSize":2252,"inaccurateSizes":true},{"id":null,"label":"Brush.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/Brush.tsx","statSize":25886,"parsedSize":10018,"gzipSize":2665,"inaccurateSizes":true},{"id":null,"label":"ReferenceLine.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/ReferenceLine.tsx","statSize":7359,"parsedSize":2848,"gzipSize":757,"inaccurateSizes":true},{"id":null,"label":"ReferenceDot.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/ReferenceDot.tsx","statSize":5301,"parsedSize":2051,"gzipSize":545,"inaccurateSizes":true},{"id":null,"label":"ReferenceArea.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/ReferenceArea.tsx","statSize":5859,"parsedSize":2267,"gzipSize":603,"inaccurateSizes":true},{"id":null,"label":"CartesianAxis.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/CartesianAxis.tsx","statSize":12710,"parsedSize":4919,"gzipSize":1308,"inaccurateSizes":true},{"id":null,"label":"CartesianGrid.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/CartesianGrid.tsx","statSize":14545,"parsedSize":5629,"gzipSize":1497,"inaccurateSizes":true},{"id":null,"label":"Line.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/Line.tsx","statSize":22469,"parsedSize":8696,"gzipSize":2313,"inaccurateSizes":true},{"id":null,"label":"Area.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/Area.tsx","statSize":25857,"parsedSize":10007,"gzipSize":2662,"inaccurateSizes":true},{"id":null,"label":"Scatter.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/Scatter.tsx","statSize":19507,"parsedSize":7549,"gzipSize":2008,"inaccurateSizes":true},{"id":null,"label":"ZAxis.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/ZAxis.tsx","statSize":1948,"parsedSize":753,"gzipSize":200,"inaccurateSizes":true},{"id":null,"label":"XAxis.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/XAxis.tsx","statSize":6003,"parsedSize":2323,"gzipSize":618,"inaccurateSizes":true},{"id":null,"label":"YAxis.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/YAxis.tsx","statSize":7610,"parsedSize":2945,"gzipSize":783,"inaccurateSizes":true},{"id":null,"label":"ErrorBar.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/ErrorBar.tsx","statSize":8784,"parsedSize":3399,"gzipSize":904,"inaccurateSizes":true},{"id":null,"label":"Funnel.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/Funnel.tsx","statSize":16894,"parsedSize":6538,"gzipSize":1739,"inaccurateSizes":true},{"id":null,"label":"GraphicalItemClipPath.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/GraphicalItemClipPath.tsx","statSize":1677,"parsedSize":649,"gzipSize":172,"inaccurateSizes":true},{"id":null,"label":"getTicks.ts","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/getTicks.ts","statSize":6498,"parsedSize":2514,"gzipSize":669,"inaccurateSizes":true},{"id":null,"label":"getEquidistantTicks.ts","path":"./src/index.ts + 355 modules (concatenated)/src/cartesian/getEquidistantTicks.ts","statSize":1880,"parsedSize":727,"gzipSize":193,"inaccurateSizes":true}],"parsedSize":82309,"gzipSize":21898,"inaccurateSizes":true},{"label":"chart","path":"./src/index.ts + 355 modules (concatenated)/src/chart","statSize":83274,"groups":[{"id":null,"label":"LineChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/LineChart.tsx","statSize":565,"parsedSize":218,"gzipSize":58,"inaccurateSizes":true},{"id":null,"label":"BarChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/BarChart.tsx","statSize":571,"parsedSize":220,"gzipSize":58,"inaccurateSizes":true},{"id":null,"label":"PieChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/PieChart.tsx","statSize":842,"parsedSize":325,"gzipSize":86,"inaccurateSizes":true},{"id":null,"label":"Treemap.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/Treemap.tsx","statSize":25667,"parsedSize":9934,"gzipSize":2642,"inaccurateSizes":true},{"id":null,"label":"Sankey.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/Sankey.tsx","statSize":24169,"parsedSize":9354,"gzipSize":2488,"inaccurateSizes":true},{"id":null,"label":"RadarChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/RadarChart.tsx","statSize":848,"parsedSize":328,"gzipSize":87,"inaccurateSizes":true},{"id":null,"label":"ScatterChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/ScatterChart.tsx","statSize":571,"parsedSize":220,"gzipSize":58,"inaccurateSizes":true},{"id":null,"label":"AreaChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/AreaChart.tsx","statSize":565,"parsedSize":218,"gzipSize":58,"inaccurateSizes":true},{"id":null,"label":"RadialBarChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/RadialBarChart.tsx","statSize":861,"parsedSize":333,"gzipSize":88,"inaccurateSizes":true},{"id":null,"label":"ComposedChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/ComposedChart.tsx","statSize":573,"parsedSize":221,"gzipSize":59,"inaccurateSizes":true},{"id":null,"label":"SunburstChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/SunburstChart.tsx","statSize":10390,"parsedSize":4021,"gzipSize":1069,"inaccurateSizes":true},{"id":null,"label":"FunnelChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/FunnelChart.tsx","statSize":569,"parsedSize":220,"gzipSize":58,"inaccurateSizes":true},{"id":null,"label":"CartesianChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/CartesianChart.tsx","statSize":3811,"parsedSize":1475,"gzipSize":392,"inaccurateSizes":true},{"id":null,"label":"RechartsWrapper.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/RechartsWrapper.tsx","statSize":6457,"parsedSize":2499,"gzipSize":664,"inaccurateSizes":true},{"id":null,"label":"PolarChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/PolarChart.tsx","statSize":4595,"parsedSize":1778,"gzipSize":473,"inaccurateSizes":true},{"id":null,"label":"CategoricalChart.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/chart/CategoricalChart.tsx","statSize":2220,"parsedSize":859,"gzipSize":228,"inaccurateSizes":true}],"parsedSize":32230,"gzipSize":8574,"inaccurateSizes":true},{"label":"state","path":"./src/index.ts + 355 modules (concatenated)/src/state","statSize":198794,"groups":[{"id":null,"label":"hooks.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/hooks.ts","statSize":1529,"parsedSize":591,"gzipSize":157,"inaccurateSizes":true},{"id":null,"label":"layoutSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/layoutSlice.ts","statSize":965,"parsedSize":373,"gzipSize":99,"inaccurateSizes":true},{"label":"selectors","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors","statSize":154165,"groups":[{"id":null,"label":"selectChartOffsetInternal.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectChartOffsetInternal.ts","statSize":3849,"parsedSize":1489,"gzipSize":396,"inaccurateSizes":true},{"id":null,"label":"containerSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/containerSelectors.ts","statSize":238,"parsedSize":92,"gzipSize":24,"inaccurateSizes":true},{"id":null,"label":"brushSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/brushSelectors.ts","statSize":774,"parsedSize":299,"gzipSize":79,"inaccurateSizes":true},{"id":null,"label":"tooltipSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/tooltipSelectors.ts","statSize":12124,"parsedSize":4692,"gzipSize":1248,"inaccurateSizes":true},{"id":null,"label":"axisSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/axisSelectors.ts","statSize":49319,"parsedSize":19088,"gzipSize":5078,"inaccurateSizes":true},{"id":null,"label":"polarAxisSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/polarAxisSelectors.ts","statSize":5683,"parsedSize":2199,"gzipSize":585,"inaccurateSizes":true},{"id":null,"label":"selectTooltipEventType.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectTooltipEventType.ts","statSize":1034,"parsedSize":400,"gzipSize":106,"inaccurateSizes":true},{"id":null,"label":"selectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectors.ts","statSize":4805,"parsedSize":1859,"gzipSize":494,"inaccurateSizes":true},{"id":null,"label":"polarGridSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/polarGridSelectors.ts","statSize":684,"parsedSize":264,"gzipSize":70,"inaccurateSizes":true},{"id":null,"label":"polarScaleSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/polarScaleSelectors.ts","statSize":2252,"parsedSize":871,"gzipSize":231,"inaccurateSizes":true},{"id":null,"label":"pieSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/pieSelectors.ts","statSize":4199,"parsedSize":1625,"gzipSize":432,"inaccurateSizes":true},{"id":null,"label":"selectChartOffset.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectChartOffset.ts","statSize":408,"parsedSize":157,"gzipSize":42,"inaccurateSizes":true},{"id":null,"label":"selectPlotArea.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectPlotArea.ts","statSize":593,"parsedSize":229,"gzipSize":61,"inaccurateSizes":true},{"id":null,"label":"radarSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/radarSelectors.ts","statSize":5107,"parsedSize":1976,"gzipSize":525,"inaccurateSizes":true},{"id":null,"label":"radialBarSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/radialBarSelectors.ts","statSize":11156,"parsedSize":4317,"gzipSize":1148,"inaccurateSizes":true},{"id":null,"label":"barSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/barSelectors.ts","statSize":12901,"parsedSize":4993,"gzipSize":1328,"inaccurateSizes":true},{"id":null,"label":"lineSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/lineSelectors.ts","statSize":3130,"parsedSize":1211,"gzipSize":322,"inaccurateSizes":true},{"id":null,"label":"areaSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/areaSelectors.ts","statSize":4554,"parsedSize":1762,"gzipSize":468,"inaccurateSizes":true},{"id":null,"label":"scatterSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/scatterSelectors.ts","statSize":2821,"parsedSize":1091,"gzipSize":290,"inaccurateSizes":true},{"id":null,"label":"funnelSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/funnelSelectors.ts","statSize":2802,"parsedSize":1084,"gzipSize":288,"inaccurateSizes":true},{"id":null,"label":"legendSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/legendSelectors.ts","statSize":530,"parsedSize":205,"gzipSize":54,"inaccurateSizes":true},{"id":null,"label":"selectAllAxes.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectAllAxes.ts","statSize":304,"parsedSize":117,"gzipSize":31,"inaccurateSizes":true},{"id":null,"label":"dataSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/dataSelectors.ts","statSize":1559,"parsedSize":603,"gzipSize":160,"inaccurateSizes":true},{"id":null,"label":"rootPropsSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/rootPropsSelectors.ts","statSize":600,"parsedSize":232,"gzipSize":61,"inaccurateSizes":true},{"label":"combiners","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/combiners","statSize":16469,"groups":[{"id":null,"label":"combineAxisRangeWithReverse.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/combiners/combineAxisRangeWithReverse.ts","statSize":285,"parsedSize":110,"gzipSize":29,"inaccurateSizes":true},{"id":null,"label":"combineDisplayedStackedData.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/combiners/combineDisplayedStackedData.ts","statSize":2080,"parsedSize":805,"gzipSize":214,"inaccurateSizes":true},{"id":null,"label":"combineActiveLabel.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/combiners/combineActiveLabel.ts","statSize":428,"parsedSize":165,"gzipSize":44,"inaccurateSizes":true},{"id":null,"label":"combineTooltipInteractionState.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/combiners/combineTooltipInteractionState.ts","statSize":3083,"parsedSize":1193,"gzipSize":317,"inaccurateSizes":true},{"id":null,"label":"combineActiveTooltipIndex.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/combiners/combineActiveTooltipIndex.ts","statSize":1070,"parsedSize":414,"gzipSize":110,"inaccurateSizes":true},{"id":null,"label":"combineCoordinateForDefaultIndex.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts","statSize":1269,"parsedSize":491,"gzipSize":130,"inaccurateSizes":true},{"id":null,"label":"combineTooltipPayloadConfigurations.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts","statSize":1457,"parsedSize":563,"gzipSize":150,"inaccurateSizes":true},{"id":null,"label":"combineTooltipPayload.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/combiners/combineTooltipPayload.ts","statSize":6797,"parsedSize":2630,"gzipSize":699,"inaccurateSizes":true}],"parsedSize":6374,"gzipSize":1695,"inaccurateSizes":true},{"id":null,"label":"pickAxisType.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/pickAxisType.ts","statSize":57,"parsedSize":22,"gzipSize":5,"inaccurateSizes":true},{"id":null,"label":"pickAxisId.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/pickAxisId.ts","statSize":62,"parsedSize":23,"gzipSize":6,"inaccurateSizes":true},{"id":null,"label":"selectTooltipAxis.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectTooltipAxis.ts","statSize":368,"parsedSize":142,"gzipSize":37,"inaccurateSizes":true},{"id":null,"label":"selectTooltipAxisType.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectTooltipAxisType.ts","statSize":352,"parsedSize":136,"gzipSize":36,"inaccurateSizes":true},{"id":null,"label":"selectTooltipAxisId.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectTooltipAxisId.ts","statSize":72,"parsedSize":27,"gzipSize":7,"inaccurateSizes":true},{"id":null,"label":"selectTooltipSettings.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectTooltipSettings.ts","statSize":67,"parsedSize":25,"gzipSize":6,"inaccurateSizes":true},{"id":null,"label":"selectTooltipPayloadSearcher.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectTooltipPayloadSearcher.ts","statSize":88,"parsedSize":34,"gzipSize":9,"inaccurateSizes":true},{"id":null,"label":"selectTooltipState.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectTooltipState.ts","statSize":55,"parsedSize":21,"gzipSize":5,"inaccurateSizes":true},{"id":null,"label":"polarSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/polarSelectors.ts","statSize":3201,"parsedSize":1238,"gzipSize":329,"inaccurateSizes":true},{"id":null,"label":"selectActivePropsFromChartPointer.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/selectActivePropsFromChartPointer.ts","statSize":823,"parsedSize":318,"gzipSize":84,"inaccurateSizes":true},{"id":null,"label":"touchSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/selectors/touchSelectors.ts","statSize":1125,"parsedSize":435,"gzipSize":115,"inaccurateSizes":true}],"parsedSize":59667,"gzipSize":15874,"inaccurateSizes":true},{"id":null,"label":"legendSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/legendSlice.ts","statSize":1569,"parsedSize":607,"gzipSize":161,"inaccurateSizes":true},{"id":null,"label":"tooltipSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/tooltipSlice.ts","statSize":6616,"parsedSize":2560,"gzipSize":681,"inaccurateSizes":true},{"id":null,"label":"optionsSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/optionsSlice.ts","statSize":1199,"parsedSize":464,"gzipSize":123,"inaccurateSizes":true},{"id":null,"label":"chartDataSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/chartDataSlice.ts","statSize":1868,"parsedSize":722,"gzipSize":192,"inaccurateSizes":true},{"id":null,"label":"polarAxisSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/polarAxisSlice.ts","statSize":811,"parsedSize":313,"gzipSize":83,"inaccurateSizes":true},{"id":null,"label":"SetTooltipEntrySettings.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/state/SetTooltipEntrySettings.tsx","statSize":779,"parsedSize":301,"gzipSize":80,"inaccurateSizes":true},{"id":null,"label":"SetLegendPayload.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/SetLegendPayload.ts","statSize":1169,"parsedSize":452,"gzipSize":120,"inaccurateSizes":true},{"id":null,"label":"SetGraphicalItem.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/SetGraphicalItem.ts","statSize":1860,"parsedSize":719,"gzipSize":191,"inaccurateSizes":true},{"id":null,"label":"brushSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/brushSlice.ts","statSize":724,"parsedSize":280,"gzipSize":74,"inaccurateSizes":true},{"id":null,"label":"referenceElementsSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/referenceElementsSlice.ts","statSize":1257,"parsedSize":486,"gzipSize":129,"inaccurateSizes":true},{"id":null,"label":"cartesianAxisSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/cartesianAxisSlice.ts","statSize":3151,"parsedSize":1219,"gzipSize":324,"inaccurateSizes":true},{"id":null,"label":"RechartsStoreProvider.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/state/RechartsStoreProvider.tsx","statSize":1917,"parsedSize":741,"gzipSize":197,"inaccurateSizes":true},{"id":null,"label":"RechartsReduxContext.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/state/RechartsReduxContext.tsx","statSize":751,"parsedSize":290,"gzipSize":77,"inaccurateSizes":true},{"label":"types","path":"./src/index.ts + 355 modules (concatenated)/src/state/types","statSize":424,"groups":[{"id":null,"label":"StackedGraphicalItem.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/types/StackedGraphicalItem.ts","statSize":424,"parsedSize":164,"gzipSize":43,"inaccurateSizes":true}],"parsedSize":164,"gzipSize":43,"inaccurateSizes":true},{"id":null,"label":"graphicalItemsSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/graphicalItemsSlice.ts","statSize":1682,"parsedSize":651,"gzipSize":173,"inaccurateSizes":true},{"id":null,"label":"errorBarSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/errorBarSlice.ts","statSize":1046,"parsedSize":404,"gzipSize":107,"inaccurateSizes":true},{"id":null,"label":"store.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/store.ts","statSize":2547,"parsedSize":985,"gzipSize":262,"inaccurateSizes":true},{"id":null,"label":"mouseEventsMiddleware.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/mouseEventsMiddleware.ts","statSize":2318,"parsedSize":897,"gzipSize":238,"inaccurateSizes":true},{"id":null,"label":"keyboardEventsMiddleware.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/keyboardEventsMiddleware.ts","statSize":3178,"parsedSize":1230,"gzipSize":327,"inaccurateSizes":true},{"id":null,"label":"externalEventsMiddleware.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/externalEventsMiddleware.ts","statSize":1026,"parsedSize":397,"gzipSize":105,"inaccurateSizes":true},{"id":null,"label":"touchEventsMiddleware.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/touchEventsMiddleware.ts","statSize":2351,"parsedSize":909,"gzipSize":242,"inaccurateSizes":true},{"id":null,"label":"ReportMainChartProps.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/ReportMainChartProps.ts","statSize":1341,"parsedSize":519,"gzipSize":138,"inaccurateSizes":true},{"id":null,"label":"ReportChartProps.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/state/ReportChartProps.tsx","statSize":301,"parsedSize":116,"gzipSize":30,"inaccurateSizes":true},{"id":null,"label":"ReportPolarOptions.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/state/ReportPolarOptions.tsx","statSize":316,"parsedSize":122,"gzipSize":32,"inaccurateSizes":true},{"id":null,"label":"reduxDevtoolsJsonStringifyReplacer.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/reduxDevtoolsJsonStringifyReplacer.ts","statSize":277,"parsedSize":107,"gzipSize":28,"inaccurateSizes":true},{"id":null,"label":"rootPropsSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/rootPropsSlice.ts","statSize":1298,"parsedSize":502,"gzipSize":133,"inaccurateSizes":true},{"id":null,"label":"polarOptionsSlice.ts","path":"./src/index.ts + 355 modules (concatenated)/src/state/polarOptionsSlice.ts","statSize":359,"parsedSize":138,"gzipSize":36,"inaccurateSizes":true}],"parsedSize":76941,"gzipSize":20470,"inaccurateSizes":true},{"label":"animation","path":"./src/index.ts + 355 modules (concatenated)/src/animation","statSize":26808,"groups":[{"id":null,"label":"Animate.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/animation/Animate.tsx","statSize":9018,"parsedSize":3490,"gzipSize":928,"inaccurateSizes":true},{"id":null,"label":"JavascriptAnimate.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/animation/JavascriptAnimate.tsx","statSize":1768,"parsedSize":684,"gzipSize":182,"inaccurateSizes":true},{"id":null,"label":"CSSTransitionAnimate.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/animation/CSSTransitionAnimate.tsx","statSize":1651,"parsedSize":639,"gzipSize":170,"inaccurateSizes":true},{"id":null,"label":"easing.ts","path":"./src/index.ts + 355 modules (concatenated)/src/animation/easing.ts","statSize":3435,"parsedSize":1329,"gzipSize":353,"inaccurateSizes":true},{"id":null,"label":"configUpdate.ts","path":"./src/index.ts + 355 modules (concatenated)/src/animation/configUpdate.ts","statSize":5075,"parsedSize":1964,"gzipSize":522,"inaccurateSizes":true},{"id":null,"label":"util.ts","path":"./src/index.ts + 355 modules (concatenated)/src/animation/util.ts","statSize":2276,"parsedSize":880,"gzipSize":234,"inaccurateSizes":true},{"id":null,"label":"useAnimationManager.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/animation/useAnimationManager.tsx","statSize":619,"parsedSize":239,"gzipSize":63,"inaccurateSizes":true},{"id":null,"label":"createDefaultAnimationManager.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/animation/createDefaultAnimationManager.tsx","statSize":265,"parsedSize":102,"gzipSize":27,"inaccurateSizes":true},{"id":null,"label":"AnimationManager.ts","path":"./src/index.ts + 355 modules (concatenated)/src/animation/AnimationManager.ts","statSize":1752,"parsedSize":678,"gzipSize":180,"inaccurateSizes":true},{"id":null,"label":"timeoutController.ts","path":"./src/index.ts + 355 modules (concatenated)/src/animation/timeoutController.ts","statSize":949,"parsedSize":367,"gzipSize":97,"inaccurateSizes":true}],"parsedSize":10375,"gzipSize":2760,"inaccurateSizes":true},{"label":"synchronisation","path":"./src/index.ts + 355 modules (concatenated)/src/synchronisation","statSize":8755,"groups":[{"id":null,"label":"useChartSynchronisation.tsx","path":"./src/index.ts + 355 modules (concatenated)/src/synchronisation/useChartSynchronisation.tsx","statSize":8658,"parsedSize":3350,"gzipSize":891,"inaccurateSizes":true},{"id":null,"label":"syncSelectors.ts","path":"./src/index.ts + 355 modules (concatenated)/src/synchronisation/syncSelectors.ts","statSize":97,"parsedSize":37,"gzipSize":9,"inaccurateSizes":true}],"parsedSize":3388,"gzipSize":901,"inaccurateSizes":true}],"parsedSize":342920,"gzipSize":91233,"inaccurateSizes":true},{"label":"node_modules","path":"./src/index.ts + 355 modules (concatenated)/node_modules","statSize":377657,"groups":[{"label":"clsx/dist","path":"./src/index.ts + 355 modules (concatenated)/node_modules/clsx/dist","statSize":388,"groups":[{"id":null,"label":"clsx.mjs","path":"./src/index.ts + 355 modules (concatenated)/node_modules/clsx/dist/clsx.mjs","statSize":388,"parsedSize":150,"gzipSize":39,"inaccurateSizes":true}],"parsedSize":150,"gzipSize":39,"inaccurateSizes":true},{"label":"d3-shape/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src","statSize":29228,"groups":[{"id":null,"label":"symbol.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol.js","statSize":1839,"parsedSize":711,"gzipSize":189,"inaccurateSizes":true},{"label":"symbol","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol","statSize":4472,"groups":[{"id":null,"label":"circle.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/circle.js","statSize":182,"parsedSize":70,"gzipSize":18,"inaccurateSizes":true},{"id":null,"label":"cross.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/cross.js","statSize":497,"parsedSize":192,"gzipSize":51,"inaccurateSizes":true},{"id":null,"label":"diamond.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/diamond.js","statSize":329,"parsedSize":127,"gzipSize":33,"inaccurateSizes":true},{"id":null,"label":"square.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/square.js","statSize":160,"parsedSize":61,"gzipSize":16,"inaccurateSizes":true},{"id":null,"label":"star.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/star.js","statSize":603,"parsedSize":233,"gzipSize":62,"inaccurateSizes":true},{"id":null,"label":"triangle.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/triangle.js","statSize":273,"parsedSize":105,"gzipSize":28,"inaccurateSizes":true},{"id":null,"label":"wye.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/wye.js","statSize":734,"parsedSize":284,"gzipSize":75,"inaccurateSizes":true},{"id":null,"label":"asterisk.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/asterisk.js","statSize":377,"parsedSize":145,"gzipSize":38,"inaccurateSizes":true},{"id":null,"label":"diamond2.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/diamond2.js","statSize":249,"parsedSize":96,"gzipSize":25,"inaccurateSizes":true},{"id":null,"label":"plus.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/plus.js","statSize":248,"parsedSize":95,"gzipSize":25,"inaccurateSizes":true},{"id":null,"label":"square2.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/square2.js","statSize":250,"parsedSize":96,"gzipSize":25,"inaccurateSizes":true},{"id":null,"label":"triangle2.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/triangle2.js","statSize":319,"parsedSize":123,"gzipSize":32,"inaccurateSizes":true},{"id":null,"label":"times.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/symbol/times.js","statSize":251,"parsedSize":97,"gzipSize":25,"inaccurateSizes":true}],"parsedSize":1730,"gzipSize":460,"inaccurateSizes":true},{"id":null,"label":"area.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/area.js","statSize":3218,"parsedSize":1245,"gzipSize":331,"inaccurateSizes":true},{"label":"curve","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve","statSize":13409,"groups":[{"id":null,"label":"linear.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve/linear.js","statSize":744,"parsedSize":287,"gzipSize":76,"inaccurateSizes":true},{"id":null,"label":"basisClosed.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve/basisClosed.js","statSize":1536,"parsedSize":594,"gzipSize":158,"inaccurateSizes":true},{"id":null,"label":"basis.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve/basis.js","statSize":1448,"parsedSize":560,"gzipSize":149,"inaccurateSizes":true},{"id":null,"label":"basisOpen.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve/basisOpen.js","statSize":1078,"parsedSize":417,"gzipSize":111,"inaccurateSizes":true},{"id":null,"label":"bump.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve/bump.js","statSize":1749,"parsedSize":676,"gzipSize":180,"inaccurateSizes":true},{"id":null,"label":"linearClosed.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve/linearClosed.js","statSize":517,"parsedSize":200,"gzipSize":53,"inaccurateSizes":true},{"id":null,"label":"monotone.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve/monotone.js","statSize":3203,"parsedSize":1239,"gzipSize":329,"inaccurateSizes":true},{"id":null,"label":"natural.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve/natural.js","statSize":1761,"parsedSize":681,"gzipSize":181,"inaccurateSizes":true},{"id":null,"label":"step.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/curve/step.js","statSize":1373,"parsedSize":531,"gzipSize":141,"inaccurateSizes":true}],"parsedSize":5189,"gzipSize":1380,"inaccurateSizes":true},{"id":null,"label":"line.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/line.js","statSize":1733,"parsedSize":670,"gzipSize":178,"inaccurateSizes":true},{"id":null,"label":"constant.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/constant.js","statSize":81,"parsedSize":31,"gzipSize":8,"inaccurateSizes":true},{"id":null,"label":"path.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/path.js","statSize":393,"parsedSize":152,"gzipSize":40,"inaccurateSizes":true},{"id":null,"label":"math.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/math.js","statSize":492,"parsedSize":190,"gzipSize":50,"inaccurateSizes":true},{"id":null,"label":"stack.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/stack.js","statSize":1428,"parsedSize":552,"gzipSize":147,"inaccurateSizes":true},{"id":null,"label":"array.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/array.js","statSize":242,"parsedSize":93,"gzipSize":24,"inaccurateSizes":true},{"label":"offset","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/offset","statSize":1691,"groups":[{"id":null,"label":"none.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/offset/none.js","statSize":309,"parsedSize":119,"gzipSize":31,"inaccurateSizes":true},{"id":null,"label":"expand.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/offset/expand.js","statSize":322,"parsedSize":124,"gzipSize":33,"inaccurateSizes":true},{"id":null,"label":"silhouette.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/offset/silhouette.js","statSize":317,"parsedSize":122,"gzipSize":32,"inaccurateSizes":true},{"id":null,"label":"wiggle.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/offset/wiggle.js","statSize":743,"parsedSize":287,"gzipSize":76,"inaccurateSizes":true}],"parsedSize":654,"gzipSize":174,"inaccurateSizes":true},{"label":"order","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/order","statSize":120,"groups":[{"id":null,"label":"none.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/order/none.js","statSize":120,"parsedSize":46,"gzipSize":12,"inaccurateSizes":true}],"parsedSize":46,"gzipSize":12,"inaccurateSizes":true},{"id":null,"label":"point.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/point.js","statSize":81,"parsedSize":31,"gzipSize":8,"inaccurateSizes":true},{"id":null,"label":"noop.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-shape/src/noop.js","statSize":29,"parsedSize":11,"gzipSize":2,"inaccurateSizes":true}],"parsedSize":11312,"gzipSize":3009,"inaccurateSizes":true},{"label":"victory-vendor/es","path":"./src/index.ts + 355 modules (concatenated)/node_modules/victory-vendor/es","statSize":228,"groups":[{"id":null,"label":"d3-scale.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/victory-vendor/es/d3-scale.js","statSize":228,"parsedSize":88,"gzipSize":23,"inaccurateSizes":true}],"parsedSize":88,"gzipSize":23,"inaccurateSizes":true},{"label":"d3-scale/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src","statSize":33500,"groups":[{"id":null,"label":"band.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/band.js","statSize":2653,"parsedSize":1026,"gzipSize":273,"inaccurateSizes":true},{"id":null,"label":"linear.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/linear.js","statSize":1620,"parsedSize":627,"gzipSize":166,"inaccurateSizes":true},{"id":null,"label":"index.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/index.js","statSize":1400,"parsedSize":541,"gzipSize":144,"inaccurateSizes":true},{"id":null,"label":"init.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/init.js","statSize":642,"parsedSize":248,"gzipSize":66,"inaccurateSizes":true},{"id":null,"label":"ordinal.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/ordinal.js","statSize":1088,"parsedSize":421,"gzipSize":112,"inaccurateSizes":true},{"id":null,"label":"continuous.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/continuous.js","statSize":3469,"parsedSize":1342,"gzipSize":357,"inaccurateSizes":true},{"id":null,"label":"tickFormat.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/tickFormat.js","statSize":1133,"parsedSize":438,"gzipSize":116,"inaccurateSizes":true},{"id":null,"label":"identity.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/identity.js","statSize":654,"parsedSize":253,"gzipSize":67,"inaccurateSizes":true},{"id":null,"label":"constant.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/constant.js","statSize":82,"parsedSize":31,"gzipSize":8,"inaccurateSizes":true},{"id":null,"label":"number.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/number.js","statSize":51,"parsedSize":19,"gzipSize":5,"inaccurateSizes":true},{"id":null,"label":"log.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/log.js","statSize":3460,"parsedSize":1339,"gzipSize":356,"inaccurateSizes":true},{"id":null,"label":"symlog.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/symlog.js","statSize":848,"parsedSize":328,"gzipSize":87,"inaccurateSizes":true},{"id":null,"label":"pow.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/pow.js","statSize":1183,"parsedSize":457,"gzipSize":121,"inaccurateSizes":true},{"id":null,"label":"radial.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/radial.js","statSize":1478,"parsedSize":572,"gzipSize":152,"inaccurateSizes":true},{"id":null,"label":"quantile.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/quantile.js","statSize":1442,"parsedSize":558,"gzipSize":148,"inaccurateSizes":true},{"id":null,"label":"quantize.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/quantize.js","statSize":1339,"parsedSize":518,"gzipSize":137,"inaccurateSizes":true},{"id":null,"label":"threshold.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/threshold.js","statSize":997,"parsedSize":385,"gzipSize":102,"inaccurateSizes":true},{"id":null,"label":"time.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/time.js","statSize":2367,"parsedSize":916,"gzipSize":243,"inaccurateSizes":true},{"id":null,"label":"utcTime.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/utcTime.js","statSize":477,"parsedSize":184,"gzipSize":49,"inaccurateSizes":true},{"id":null,"label":"sequential.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/sequential.js","statSize":2786,"parsedSize":1078,"gzipSize":286,"inaccurateSizes":true},{"id":null,"label":"sequentialQuantile.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/sequentialQuantile.js","statSize":1078,"parsedSize":417,"gzipSize":111,"inaccurateSizes":true},{"id":null,"label":"diverging.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/diverging.js","statSize":2908,"parsedSize":1125,"gzipSize":299,"inaccurateSizes":true},{"id":null,"label":"nice.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-scale/src/nice.js","statSize":345,"parsedSize":133,"gzipSize":35,"inaccurateSizes":true}],"parsedSize":12965,"gzipSize":3449,"inaccurateSizes":true},{"label":"reselect/dist","path":"./src/index.ts + 355 modules (concatenated)/node_modules/reselect/dist","statSize":21982,"groups":[{"id":null,"label":"reselect.mjs","path":"./src/index.ts + 355 modules (concatenated)/node_modules/reselect/dist/reselect.mjs","statSize":21982,"parsedSize":8507,"gzipSize":2263,"inaccurateSizes":true}],"parsedSize":8507,"gzipSize":2263,"inaccurateSizes":true},{"label":"@reduxjs/toolkit","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@reduxjs/toolkit","statSize":107139,"groups":[{"label":"dist","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@reduxjs/toolkit/dist","statSize":88715,"groups":[{"id":null,"label":"redux-toolkit.esm.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js","statSize":88715,"parsedSize":34336,"gzipSize":9135,"inaccurateSizes":true}],"parsedSize":34336,"gzipSize":9135,"inaccurateSizes":true},{"label":"node_modules/immer/dist","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@reduxjs/toolkit/node_modules/immer/dist","statSize":18424,"groups":[{"id":null,"label":"immer.esm.mjs","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@reduxjs/toolkit/node_modules/immer/dist/immer.esm.mjs","statSize":18424,"parsedSize":7130,"gzipSize":1897,"inaccurateSizes":true}],"parsedSize":7130,"gzipSize":1897,"inaccurateSizes":true}],"parsedSize":41467,"gzipSize":11032,"inaccurateSizes":true},{"label":"immer/dist","path":"./src/index.ts + 355 modules (concatenated)/node_modules/immer/dist","statSize":36195,"groups":[{"id":null,"label":"immer.mjs","path":"./src/index.ts + 355 modules (concatenated)/node_modules/immer/dist/immer.mjs","statSize":36195,"parsedSize":14008,"gzipSize":3727,"inaccurateSizes":true}],"parsedSize":14008,"gzipSize":3727,"inaccurateSizes":true},{"label":"d3-array/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src","statSize":10542,"groups":[{"id":null,"label":"range.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/range.js","statSize":350,"parsedSize":135,"gzipSize":36,"inaccurateSizes":true},{"id":null,"label":"ticks.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/ticks.js","statSize":1958,"parsedSize":757,"gzipSize":201,"inaccurateSizes":true},{"id":null,"label":"bisect.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/bisect.js","statSize":337,"parsedSize":130,"gzipSize":34,"inaccurateSizes":true},{"id":null,"label":"ascending.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/ascending.js","statSize":127,"parsedSize":49,"gzipSize":13,"inaccurateSizes":true},{"id":null,"label":"bisector.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/bisector.js","statSize":1569,"parsedSize":607,"gzipSize":161,"inaccurateSizes":true},{"id":null,"label":"descending.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/descending.js","statSize":144,"parsedSize":55,"gzipSize":14,"inaccurateSizes":true},{"id":null,"label":"quantile.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/quantile.js","statSize":1774,"parsedSize":686,"gzipSize":182,"inaccurateSizes":true},{"id":null,"label":"max.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/max.js","statSize":502,"parsedSize":194,"gzipSize":51,"inaccurateSizes":true},{"id":null,"label":"min.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/min.js","statSize":502,"parsedSize":194,"gzipSize":51,"inaccurateSizes":true},{"id":null,"label":"quickselect.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/quickselect.js","statSize":1561,"parsedSize":604,"gzipSize":160,"inaccurateSizes":true},{"id":null,"label":"sort.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/sort.js","statSize":1253,"parsedSize":484,"gzipSize":129,"inaccurateSizes":true},{"id":null,"label":"number.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-array/src/number.js","statSize":465,"parsedSize":179,"gzipSize":47,"inaccurateSizes":true}],"parsedSize":4080,"gzipSize":1085,"inaccurateSizes":true},{"label":"es-toolkit/dist/function","path":"./src/index.ts + 355 modules (concatenated)/node_modules/es-toolkit/dist/function","statSize":38,"groups":[{"id":null,"label":"noop.mjs","path":"./src/index.ts + 355 modules (concatenated)/node_modules/es-toolkit/dist/function/noop.mjs","statSize":38,"parsedSize":14,"gzipSize":3,"inaccurateSizes":true}],"parsedSize":14,"gzipSize":3,"inaccurateSizes":true},{"label":"tiny-invariant/dist/esm","path":"./src/index.ts + 355 modules (concatenated)/node_modules/tiny-invariant/dist/esm","statSize":452,"groups":[{"id":null,"label":"tiny-invariant.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/tiny-invariant/dist/esm/tiny-invariant.js","statSize":452,"parsedSize":174,"gzipSize":46,"inaccurateSizes":true}],"parsedSize":174,"gzipSize":46,"inaccurateSizes":true},{"label":"react-redux/es","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es","statSize":37186,"groups":[{"id":null,"label":"index.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/index.js","statSize":908,"parsedSize":351,"gzipSize":93,"inaccurateSizes":true},{"label":"utils","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/utils","statSize":4749,"groups":[{"id":null,"label":"reactBatchedUpdates.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/utils/reactBatchedUpdates.js","statSize":52,"parsedSize":20,"gzipSize":5,"inaccurateSizes":true},{"id":null,"label":"batch.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/utils/batch.js","statSize":359,"parsedSize":138,"gzipSize":36,"inaccurateSizes":true},{"id":null,"label":"Subscription.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/utils/Subscription.js","statSize":3374,"parsedSize":1305,"gzipSize":347,"inaccurateSizes":true},{"id":null,"label":"useIsomorphicLayoutEffect.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","statSize":964,"parsedSize":373,"gzipSize":99,"inaccurateSizes":true}],"parsedSize":1838,"gzipSize":489,"inaccurateSizes":true},{"label":"hooks","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/hooks","statSize":9013,"groups":[{"id":null,"label":"useSelector.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/hooks/useSelector.js","statSize":5218,"parsedSize":2019,"gzipSize":537,"inaccurateSizes":true},{"id":null,"label":"useReduxContext.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/hooks/useReduxContext.js","statSize":1346,"parsedSize":520,"gzipSize":138,"inaccurateSizes":true},{"id":null,"label":"useDispatch.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/hooks/useDispatch.js","statSize":1334,"parsedSize":516,"gzipSize":137,"inaccurateSizes":true},{"id":null,"label":"useStore.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/hooks/useStore.js","statSize":1115,"parsedSize":431,"gzipSize":114,"inaccurateSizes":true}],"parsedSize":3488,"gzipSize":928,"inaccurateSizes":true},{"label":"components","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/components","statSize":21935,"groups":[{"id":null,"label":"connect.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/components/connect.js","statSize":19641,"parsedSize":7601,"gzipSize":2022,"inaccurateSizes":true},{"id":null,"label":"Context.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/components/Context.js","statSize":843,"parsedSize":326,"gzipSize":86,"inaccurateSizes":true},{"id":null,"label":"Provider.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/components/Provider.js","statSize":1451,"parsedSize":561,"gzipSize":149,"inaccurateSizes":true}],"parsedSize":8489,"gzipSize":2258,"inaccurateSizes":true},{"id":null,"label":"exports.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/react-redux/es/exports.js","statSize":581,"parsedSize":224,"gzipSize":59,"inaccurateSizes":true}],"parsedSize":14392,"gzipSize":3829,"inaccurateSizes":true},{"label":"d3-path/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-path/src","statSize":4537,"groups":[{"id":null,"label":"path.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-path/src/path.js","statSize":4537,"parsedSize":1755,"gzipSize":467,"inaccurateSizes":true}],"parsedSize":1755,"gzipSize":467,"inaccurateSizes":true},{"label":"redux/es","path":"./src/index.ts + 355 modules (concatenated)/node_modules/redux/es","statSize":27277,"groups":[{"id":null,"label":"redux.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/redux/es/redux.js","statSize":27277,"parsedSize":10557,"gzipSize":2808,"inaccurateSizes":true}],"parsedSize":10557,"gzipSize":2808,"inaccurateSizes":true},{"label":"redux-thunk/es","path":"./src/index.ts + 355 modules (concatenated)/node_modules/redux-thunk/es","statSize":1304,"groups":[{"id":null,"label":"index.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/redux-thunk/es/index.js","statSize":1304,"parsedSize":504,"gzipSize":134,"inaccurateSizes":true}],"parsedSize":504,"gzipSize":134,"inaccurateSizes":true},{"label":"internmap/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/internmap/src","statSize":1575,"groups":[{"id":null,"label":"index.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/internmap/src/index.js","statSize":1575,"parsedSize":609,"gzipSize":162,"inaccurateSizes":true}],"parsedSize":609,"gzipSize":162,"inaccurateSizes":true},{"label":"d3-interpolate/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src","statSize":7624,"groups":[{"id":null,"label":"value.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/value.js","statSize":806,"parsedSize":311,"gzipSize":82,"inaccurateSizes":true},{"id":null,"label":"number.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/number.js","statSize":110,"parsedSize":42,"gzipSize":11,"inaccurateSizes":true},{"id":null,"label":"round.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/round.js","statSize":122,"parsedSize":47,"gzipSize":12,"inaccurateSizes":true},{"id":null,"label":"rgb.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/rgb.js","statSize":1297,"parsedSize":501,"gzipSize":133,"inaccurateSizes":true},{"id":null,"label":"basis.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/basis.js","statSize":600,"parsedSize":232,"gzipSize":61,"inaccurateSizes":true},{"id":null,"label":"basisClosed.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/basisClosed.js","statSize":363,"parsedSize":140,"gzipSize":37,"inaccurateSizes":true},{"id":null,"label":"constant.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/constant.js","statSize":29,"parsedSize":11,"gzipSize":2,"inaccurateSizes":true},{"id":null,"label":"array.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/array.js","statSize":540,"parsedSize":209,"gzipSize":55,"inaccurateSizes":true},{"id":null,"label":"date.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/date.js","statSize":144,"parsedSize":55,"gzipSize":14,"inaccurateSizes":true},{"id":null,"label":"object.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/object.js","statSize":393,"parsedSize":152,"gzipSize":40,"inaccurateSizes":true},{"id":null,"label":"string.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/string.js","statSize":1761,"parsedSize":681,"gzipSize":181,"inaccurateSizes":true},{"id":null,"label":"numberArray.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/numberArray.js","statSize":332,"parsedSize":128,"gzipSize":34,"inaccurateSizes":true},{"id":null,"label":"piecewise.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/piecewise.js","statSize":427,"parsedSize":165,"gzipSize":43,"inaccurateSizes":true},{"id":null,"label":"color.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-interpolate/src/color.js","statSize":700,"parsedSize":270,"gzipSize":72,"inaccurateSizes":true}],"parsedSize":2950,"gzipSize":785,"inaccurateSizes":true},{"label":"d3-format/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src","statSize":12518,"groups":[{"id":null,"label":"defaultLocale.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/defaultLocale.js","statSize":348,"parsedSize":134,"gzipSize":35,"inaccurateSizes":true},{"id":null,"label":"formatSpecifier.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/formatSpecifier.js","statSize":1719,"parsedSize":665,"gzipSize":177,"inaccurateSizes":true},{"id":null,"label":"precisionFixed.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/precisionFixed.js","statSize":122,"parsedSize":47,"gzipSize":12,"inaccurateSizes":true},{"id":null,"label":"precisionPrefix.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/precisionPrefix.js","statSize":193,"parsedSize":74,"gzipSize":19,"inaccurateSizes":true},{"id":null,"label":"precisionRound.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/precisionRound.js","statSize":189,"parsedSize":73,"gzipSize":19,"inaccurateSizes":true},{"id":null,"label":"locale.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/locale.js","statSize":6174,"parsedSize":2389,"gzipSize":635,"inaccurateSizes":true},{"id":null,"label":"exponent.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/exponent.js","statSize":149,"parsedSize":57,"gzipSize":15,"inaccurateSizes":true},{"id":null,"label":"formatDecimal.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/formatDecimal.js","statSize":822,"parsedSize":318,"gzipSize":84,"inaccurateSizes":true},{"id":null,"label":"formatGroup.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/formatGroup.js","statSize":475,"parsedSize":183,"gzipSize":48,"inaccurateSizes":true},{"id":null,"label":"formatNumerals.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/formatNumerals.js","statSize":154,"parsedSize":59,"gzipSize":15,"inaccurateSizes":true},{"id":null,"label":"formatTrim.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/formatTrim.js","statSize":399,"parsedSize":154,"gzipSize":41,"inaccurateSizes":true},{"id":null,"label":"formatTypes.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/formatTypes.js","statSize":627,"parsedSize":242,"gzipSize":64,"inaccurateSizes":true},{"id":null,"label":"formatPrefixAuto.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/formatPrefixAuto.js","statSize":631,"parsedSize":244,"gzipSize":64,"inaccurateSizes":true},{"id":null,"label":"identity.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/identity.js","statSize":43,"parsedSize":16,"gzipSize":4,"inaccurateSizes":true},{"id":null,"label":"formatRounded.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-format/src/formatRounded.js","statSize":473,"parsedSize":183,"gzipSize":48,"inaccurateSizes":true}],"parsedSize":4844,"gzipSize":1288,"inaccurateSizes":true},{"label":"eventemitter3","path":"./src/index.ts + 355 modules (concatenated)/node_modules/eventemitter3","statSize":91,"groups":[{"id":null,"label":"index.mjs","path":"./src/index.ts + 355 modules (concatenated)/node_modules/eventemitter3/index.mjs","statSize":91,"parsedSize":35,"gzipSize":9,"inaccurateSizes":true}],"parsedSize":35,"gzipSize":9,"inaccurateSizes":true},{"label":"@babel/runtime/helpers/esm","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@babel/runtime/helpers/esm","statSize":2129,"groups":[{"id":null,"label":"objectSpread2.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","statSize":843,"parsedSize":326,"gzipSize":86,"inaccurateSizes":true},{"id":null,"label":"defineProperty.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@babel/runtime/helpers/esm/defineProperty.js","statSize":286,"parsedSize":110,"gzipSize":29,"inaccurateSizes":true},{"id":null,"label":"toPropertyKey.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","statSize":227,"parsedSize":87,"gzipSize":23,"inaccurateSizes":true},{"id":null,"label":"typeof.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@babel/runtime/helpers/esm/typeof.js","statSize":366,"parsedSize":141,"gzipSize":37,"inaccurateSizes":true},{"id":null,"label":"toPrimitive.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","statSize":407,"parsedSize":157,"gzipSize":41,"inaccurateSizes":true}],"parsedSize":824,"gzipSize":219,"inaccurateSizes":true},{"label":"d3-color/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-color/src","statSize":11426,"groups":[{"id":null,"label":"color.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-color/src/color.js","statSize":11086,"parsedSize":4290,"gzipSize":1141,"inaccurateSizes":true},{"id":null,"label":"define.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-color/src/define.js","statSize":340,"parsedSize":131,"gzipSize":35,"inaccurateSizes":true}],"parsedSize":4422,"gzipSize":1176,"inaccurateSizes":true},{"label":"d3-time/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src","statSize":12851,"groups":[{"id":null,"label":"second.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/second.js","statSize":403,"parsedSize":155,"gzipSize":41,"inaccurateSizes":true},{"id":null,"label":"minute.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/minute.js","statSize":768,"parsedSize":297,"gzipSize":79,"inaccurateSizes":true},{"id":null,"label":"hour.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/hour.js","statSize":798,"parsedSize":308,"gzipSize":82,"inaccurateSizes":true},{"id":null,"label":"day.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/day.js","statSize":1025,"parsedSize":396,"gzipSize":105,"inaccurateSizes":true},{"id":null,"label":"week.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/week.js","statSize":2028,"parsedSize":784,"gzipSize":208,"inaccurateSizes":true},{"id":null,"label":"month.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/month.js","statSize":796,"parsedSize":308,"gzipSize":81,"inaccurateSizes":true},{"id":null,"label":"year.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/year.js","statSize":1475,"parsedSize":570,"gzipSize":151,"inaccurateSizes":true},{"id":null,"label":"ticks.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/ticks.js","statSize":2528,"parsedSize":978,"gzipSize":260,"inaccurateSizes":true},{"id":null,"label":"interval.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/interval.js","statSize":2076,"parsedSize":803,"gzipSize":213,"inaccurateSizes":true},{"id":null,"label":"duration.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/duration.js","statSize":321,"parsedSize":124,"gzipSize":33,"inaccurateSizes":true},{"id":null,"label":"millisecond.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time/src/millisecond.js","statSize":633,"parsedSize":244,"gzipSize":65,"inaccurateSizes":true}],"parsedSize":4973,"gzipSize":1323,"inaccurateSizes":true},{"label":"d3-time-format/src","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time-format/src","statSize":19447,"groups":[{"id":null,"label":"defaultLocale.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time-format/src/defaultLocale.js","statSize":870,"parsedSize":336,"gzipSize":89,"inaccurateSizes":true},{"id":null,"label":"locale.js","path":"./src/index.ts + 355 modules (concatenated)/node_modules/d3-time-format/src/locale.js","statSize":18577,"parsedSize":7190,"gzipSize":1912,"inaccurateSizes":true}],"parsedSize":7526,"gzipSize":2002,"inaccurateSizes":true}],"parsedSize":146168,"gzipSize":38887,"inaccurateSizes":true}]}],"parsedSize":489089,"gzipSize":130121}],"isInitialByEntrypoint":{"main":true}}];
+      window.entrypoints = ["main"];
+      window.defaultSizes = "parsed";
+    </script>
+  </body>
+</html>
Index: node_modules/redux-thunk/LICENSE.md
===================================================================
--- node_modules/redux-thunk/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux-thunk/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Dan Abramov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/redux-thunk/README.md
===================================================================
--- node_modules/redux-thunk/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux-thunk/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,403 @@
+# Redux Thunk
+
+Thunk [middleware](https://redux.js.org/tutorials/fundamentals/part-4-store#middleware) for Redux. It allows writing functions with logic inside that can interact with a Redux store's `dispatch` and `getState` methods.
+
+For complete usage instructions and useful patterns, see the [Redux docs **Writing Logic with Thunks** page](https://redux.js.org/usage/writing-logic-thunks).
+
+![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/reduxjs/redux-thunk/test.yml?branch=master)
+[![npm version](https://img.shields.io/npm/v/redux-thunk.svg?style=flat-square)](https://www.npmjs.com/package/redux-thunk)
+[![npm downloads](https://img.shields.io/npm/dm/redux-thunk.svg?style=flat-square)](https://www.npmjs.com/package/redux-thunk)
+
+## Installation and Setup
+
+### Redux Toolkit
+
+If you're using [our official Redux Toolkit package](https://redux-toolkit.js.org) as recommended, there's nothing to install - RTK's `configureStore` API already adds the thunk middleware by default:
+
+```js
+import { configureStore } from '@reduxjs/toolkit'
+
+import todosReducer from './features/todos/todosSlice'
+import filtersReducer from './features/filters/filtersSlice'
+
+const store = configureStore({
+  reducer: {
+    todos: todosReducer,
+    filters: filtersReducer
+  }
+})
+
+// The thunk middleware was automatically added
+```
+
+### Manual Setup
+
+If you're using the basic Redux `createStore` API and need to set this up manually, first add the `redux-thunk` package:
+
+```sh
+npm install redux-thunk
+
+yarn add redux-thunk
+```
+
+The thunk middleware is the default export.
+
+<details>
+<summary><b>More Details: Importing the thunk middleware</b></summary>
+
+If you're using ES modules:
+
+```js
+import thunk from 'redux-thunk' // no changes here 😀
+```
+
+If you use Redux Thunk 2.x in a CommonJS environment,
+[don’t forget to add `.default` to your import](https://github.com/reduxjs/redux-thunk/releases/tag/v2.0.0):
+
+```diff
+- const thunk = require('redux-thunk')
++ const thunk = require('redux-thunk').default
+```
+
+Additionally, since 2.x, we also support a
+[UMD build](https://unpkg.com/redux-thunk/dist/redux-thunk.min.js) for use as a global script tag:
+
+```js
+const ReduxThunk = window.ReduxThunk
+```
+
+</details>
+
+Then, to enable Redux Thunk, use
+[`applyMiddleware()`](https://redux.js.org/api/applymiddleware):
+
+```js
+import { createStore, applyMiddleware } from 'redux'
+import thunk from 'redux-thunk'
+import rootReducer from './reducers/index'
+
+const store = createStore(rootReducer, applyMiddleware(thunk))
+```
+
+### Injecting a Custom Argument
+
+Since 2.1.0, Redux Thunk supports injecting a custom argument into the thunk middleware. This is typically useful for cases like using an API service layer that could be swapped out for a mock service in tests.
+
+For Redux Toolkit, the `getDefaultMiddleware` callback inside of `configureStore` lets you pass in a custom `extraArgument`:
+
+```js
+import { configureStore } from '@reduxjs/toolkit'
+import rootReducer from './reducer'
+import { myCustomApiService } from './api'
+
+const store = configureStore({
+  reducer: rootReducer,
+  middleware: getDefaultMiddleware =>
+    getDefaultMiddleware({
+      thunk: {
+        extraArgument: myCustomApiService
+      }
+    })
+})
+
+// later
+function fetchUser(id) {
+  // The `extraArgument` is the third arg for thunk functions
+  return (dispatch, getState, api) => {
+    // you can use api here
+  }
+}
+```
+
+If you need to pass in multiple values, combine them into a single object:
+
+```js
+const store = configureStore({
+  reducer: rootReducer,
+  middleware: getDefaultMiddleware =>
+    getDefaultMiddleware({
+      thunk: {
+        extraArgument: {
+          api: myCustomApiService,
+          otherValue: 42
+        }
+      }
+    })
+})
+
+// later
+function fetchUser(id) {
+  return (dispatch, getState, { api, otherValue }) => {
+    // you can use api and something else here
+  }
+}
+```
+
+If you're setting up the store by hand, the named export `withExtraArgument()` function should be used to generate the correct thunk middleware:
+
+```js
+const store = createStore(reducer, applyMiddleware(withExtraArgument(api)))
+```
+
+## Why Do I Need This?
+
+With a plain basic Redux store, you can only do simple synchronous updates by
+dispatching an action. Middleware extends the store's abilities, and lets you
+write async logic that interacts with the store.
+
+Thunks are the recommended middleware for basic Redux side effects logic,
+including complex synchronous logic that needs access to the store, and simple
+async logic like AJAX requests.
+
+For more details on why thunks are useful, see:
+
+- **Redux docs: Writing Logic with Thunks**  
+  https://redux.js.org/usage/writing-logic-thunks  
+  The official usage guide page on thunks. Covers why they exist, how the thunk middleware works, and useful patterns for using thunks.
+
+- **Stack Overflow: Dispatching Redux Actions with a Timeout**  
+  http://stackoverflow.com/questions/35411423/how-to-dispatch-a-redux-action-with-a-timeout/35415559#35415559  
+  Dan Abramov explains the basics of managing async behavior in Redux, walking
+  through a progressive series of approaches (inline async calls, async action
+  creators, thunk middleware).
+
+- **Stack Overflow: Why do we need middleware for async flow in Redux?**  
+  http://stackoverflow.com/questions/34570758/why-do-we-need-middleware-for-async-flow-in-redux/34599594#34599594  
+  Dan Abramov gives reasons for using thunks and async middleware, and some
+  useful patterns for using thunks.
+
+- **What the heck is a "thunk"?**  
+  https://daveceddia.com/what-is-a-thunk/  
+  A quick explanation for what the word "thunk" means in general, and for Redux
+  specifically.
+
+- **Thunks in Redux: The Basics**  
+  https://medium.com/fullstack-academy/thunks-in-redux-the-basics-85e538a3fe60  
+  A detailed look at what thunks are, what they solve, and how to use them.
+
+You may also want to read the
+**[Redux FAQ entry on choosing which async middleware to use](https://redux.js.org/faq/actions#what-async-middleware-should-i-use-how-do-you-decide-between-thunks-sagas-observables-or-something-else)**.
+
+While the thunk middleware is not directly included with the Redux core library,
+it is used by default in our
+**[`@reduxjs/toolkit` package](https://github.com/reduxjs/redux-toolkit)**.
+
+## Motivation
+
+Redux Thunk [middleware](https://redux.js.org/tutorials/fundamentals/part-4-store#middleware)
+allows you to write action creators that return a function instead of an action.
+The thunk can be used to delay the dispatch of an action, or to dispatch only if
+a certain condition is met. The inner function receives the store methods
+`dispatch` and `getState` as parameters.
+
+An action creator that returns a function to perform asynchronous dispatch:
+
+```js
+const INCREMENT_COUNTER = 'INCREMENT_COUNTER'
+
+function increment() {
+  return {
+    type: INCREMENT_COUNTER
+  }
+}
+
+function incrementAsync() {
+  return dispatch => {
+    setTimeout(() => {
+      // Yay! Can invoke sync or async actions with `dispatch`
+      dispatch(increment())
+    }, 1000)
+  }
+}
+```
+
+An action creator that returns a function to perform conditional dispatch:
+
+```js
+function incrementIfOdd() {
+  return (dispatch, getState) => {
+    const { counter } = getState()
+
+    if (counter % 2 === 0) {
+      return
+    }
+
+    dispatch(increment())
+  }
+}
+```
+
+## What’s a thunk?!
+
+A [thunk](https://en.wikipedia.org/wiki/Thunk) is a function that wraps an
+expression to delay its evaluation.
+
+```js
+// calculation of 1 + 2 is immediate
+// x === 3
+let x = 1 + 2
+
+// calculation of 1 + 2 is delayed
+// foo can be called later to perform the calculation
+// foo is a thunk!
+let foo = () => 1 + 2
+```
+
+The term [originated](https://en.wikipedia.org/wiki/Thunk#cite_note-1) as a
+humorous past-tense version of "think".
+
+## Composition
+
+Any return value from the inner function will be available as the return value
+of `dispatch` itself. This is convenient for orchestrating an asynchronous
+control flow with thunk action creators dispatching each other and returning
+Promises to wait for each other’s completion:
+
+```js
+import { createStore, applyMiddleware } from 'redux'
+import thunk from 'redux-thunk'
+import rootReducer from './reducers'
+
+// Note: this API requires redux@>=3.1.0
+const store = createStore(rootReducer, applyMiddleware(thunk))
+
+function fetchSecretSauce() {
+  return fetch('https://www.google.com/search?q=secret+sauce')
+}
+
+// These are the normal action creators you have seen so far.
+// The actions they return can be dispatched without any middleware.
+// However, they only express “facts” and not the “async flow”.
+
+function makeASandwich(forPerson, secretSauce) {
+  return {
+    type: 'MAKE_SANDWICH',
+    forPerson,
+    secretSauce
+  }
+}
+
+function apologize(fromPerson, toPerson, error) {
+  return {
+    type: 'APOLOGIZE',
+    fromPerson,
+    toPerson,
+    error
+  }
+}
+
+function withdrawMoney(amount) {
+  return {
+    type: 'WITHDRAW',
+    amount
+  }
+}
+
+// Even without middleware, you can dispatch an action:
+store.dispatch(withdrawMoney(100))
+
+// But what do you do when you need to start an asynchronous action,
+// such as an API call, or a router transition?
+
+// Meet thunks.
+// A thunk in this context is a function that can be dispatched to perform async
+// activity and can dispatch actions and read state.
+// This is an action creator that returns a thunk:
+function makeASandwichWithSecretSauce(forPerson) {
+  // We can invert control here by returning a function - the "thunk".
+  // When this function is passed to `dispatch`, the thunk middleware will intercept it,
+  // and call it with `dispatch` and `getState` as arguments.
+  // This gives the thunk function the ability to run some logic, and still interact with the store.
+  return function (dispatch) {
+    return fetchSecretSauce().then(
+      sauce => dispatch(makeASandwich(forPerson, sauce)),
+      error => dispatch(apologize('The Sandwich Shop', forPerson, error))
+    )
+  }
+}
+
+// Thunk middleware lets me dispatch thunk async actions
+// as if they were actions!
+
+store.dispatch(makeASandwichWithSecretSauce('Me'))
+
+// It even takes care to return the thunk’s return value
+// from the dispatch, so I can chain Promises as long as I return them.
+
+store.dispatch(makeASandwichWithSecretSauce('My partner')).then(() => {
+  console.log('Done!')
+})
+
+// In fact I can write action creators that dispatch
+// actions and async actions from other action creators,
+// and I can build my control flow with Promises.
+
+function makeSandwichesForEverybody() {
+  return function (dispatch, getState) {
+    if (!getState().sandwiches.isShopOpen) {
+      // You don’t have to return Promises, but it’s a handy convention
+      // so the caller can always call .then() on async dispatch result.
+
+      return Promise.resolve()
+    }
+
+    // We can dispatch both plain object actions and other thunks,
+    // which lets us compose the asynchronous actions in a single flow.
+
+    return dispatch(makeASandwichWithSecretSauce('My Grandma'))
+      .then(() =>
+        Promise.all([
+          dispatch(makeASandwichWithSecretSauce('Me')),
+          dispatch(makeASandwichWithSecretSauce('My wife'))
+        ])
+      )
+      .then(() => dispatch(makeASandwichWithSecretSauce('Our kids')))
+      .then(() =>
+        dispatch(
+          getState().myMoney > 42
+            ? withdrawMoney(42)
+            : apologize('Me', 'The Sandwich Shop')
+        )
+      )
+  }
+}
+
+// This is very useful for server side rendering, because I can wait
+// until data is available, then synchronously render the app.
+
+store
+  .dispatch(makeSandwichesForEverybody())
+  .then(() =>
+    response.send(ReactDOMServer.renderToString(<MyApp store={store} />))
+  )
+
+// I can also dispatch a thunk async action from a component
+// any time its props change to load the missing data.
+
+import { connect } from 'react-redux'
+import { Component } from 'react'
+
+class SandwichShop extends Component {
+  componentDidMount() {
+    this.props.dispatch(makeASandwichWithSecretSauce(this.props.forPerson))
+  }
+
+  componentDidUpdate(prevProps) {
+    if (prevProps.forPerson !== this.props.forPerson) {
+      this.props.dispatch(makeASandwichWithSecretSauce(this.props.forPerson))
+    }
+  }
+
+  render() {
+    return <p>{this.props.sandwiches.join('mustard')}</p>
+  }
+}
+
+export default connect(state => ({
+  sandwiches: state.sandwiches
+}))(SandwichShop)
+```
+
+## License
+
+MIT
Index: node_modules/redux-thunk/dist/cjs/redux-thunk.cjs
===================================================================
--- node_modules/redux-thunk/dist/cjs/redux-thunk.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux-thunk/dist/cjs/redux-thunk.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var src_exports = {};
+__export(src_exports, {
+  thunk: () => thunk,
+  withExtraArgument: () => withExtraArgument
+});
+module.exports = __toCommonJS(src_exports);
+function createThunkMiddleware(extraArgument) {
+  const middleware = ({ dispatch, getState }) => (next) => (action) => {
+    if (typeof action === "function") {
+      return action(dispatch, getState, extraArgument);
+    }
+    return next(action);
+  };
+  return middleware;
+}
+var thunk = createThunkMiddleware();
+var withExtraArgument = createThunkMiddleware;
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  thunk,
+  withExtraArgument
+});
Index: node_modules/redux-thunk/dist/redux-thunk.d.ts
===================================================================
--- node_modules/redux-thunk/dist/redux-thunk.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux-thunk/dist/redux-thunk.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+import { Action, AnyAction, Middleware } from 'redux';
+
+/**
+ * The dispatch method as modified by React-Thunk; overloaded so that you can
+ * dispatch:
+ *   - standard (object) actions: `dispatch()` returns the action itself
+ *   - thunk actions: `dispatch()` returns the thunk's return value
+ *
+ * @template State The redux state
+ * @template ExtraThunkArg The extra argument passed to the inner function of
+ * thunks (if specified when setting up the Thunk middleware)
+ * @template BasicAction The (non-thunk) actions that can be dispatched.
+ */
+interface ThunkDispatch<State, ExtraThunkArg, BasicAction extends Action> {
+    /** Accepts a thunk function, runs it, and returns whatever the thunk itself returns */
+    <ReturnType>(thunkAction: ThunkAction<ReturnType, State, ExtraThunkArg, BasicAction>): ReturnType;
+    /** Accepts a standard action object, and returns that action object */
+    <Action extends BasicAction>(action: Action): Action;
+    /** A union of the other two overloads for TS inference purposes */
+    <ReturnType, Action extends BasicAction>(action: Action | ThunkAction<ReturnType, State, ExtraThunkArg, BasicAction>): Action | ReturnType;
+}
+/**
+ * A "thunk" action (a callback function that can be dispatched to the Redux
+ * store.)
+ *
+ * Also known as the "thunk inner function", when used with the typical pattern
+ * of an action creator function that returns a thunk action.
+ *
+ * @template ReturnType The return type of the thunk's inner function
+ * @template State The redux state
+ * @template ExtraThunkArg Optional extra argument passed to the inner function
+ * (if specified when setting up the Thunk middleware)
+ * @template BasicAction The (non-thunk) actions that can be dispatched.
+ */
+type ThunkAction<ReturnType, State, ExtraThunkArg, BasicAction extends Action> = (dispatch: ThunkDispatch<State, ExtraThunkArg, BasicAction>, getState: () => State, extraArgument: ExtraThunkArg) => ReturnType;
+/**
+ * A generic type that takes a thunk action creator and returns a function
+ * signature which matches how it would appear after being processed using
+ * bindActionCreators(): a function that takes the arguments of the outer
+ * function, and returns the return type of the inner "thunk" function.
+ *
+ * @template ActionCreator Thunk action creator to be wrapped
+ */
+type ThunkActionDispatch<ActionCreator extends (...args: any[]) => ThunkAction<any, any, any, any>> = (...args: Parameters<ActionCreator>) => ReturnType<ReturnType<ActionCreator>>;
+/**
+ * @template State The redux state
+ * @template BasicAction The (non-thunk) actions that can be dispatched
+ * @template ExtraThunkArg An optional extra argument to pass to a thunk's
+ * inner function. (Only used if you call `withExtraArgument()`)
+ */
+type ThunkMiddleware<State = any, BasicAction extends Action = AnyAction, ExtraThunkArg = undefined> = Middleware<ThunkDispatch<State, ExtraThunkArg, BasicAction>, State, ThunkDispatch<State, ExtraThunkArg, BasicAction>>;
+
+/** A function that accepts a potential "extra argument" value to be injected later,
+ * and returns an instance of the thunk middleware that uses that value
+ */
+declare function createThunkMiddleware<State = any, BasicAction extends Action = AnyAction, ExtraThunkArg = undefined>(extraArgument?: ExtraThunkArg): ThunkMiddleware<State, BasicAction, ExtraThunkArg>;
+declare const thunk: ThunkMiddleware<any, AnyAction, undefined>;
+declare const withExtraArgument: typeof createThunkMiddleware;
+
+export { ThunkAction, ThunkActionDispatch, ThunkDispatch, ThunkMiddleware, thunk, withExtraArgument };
Index: node_modules/redux-thunk/dist/redux-thunk.legacy-esm.js
===================================================================
--- node_modules/redux-thunk/dist/redux-thunk.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux-thunk/dist/redux-thunk.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+// src/index.ts
+function createThunkMiddleware(extraArgument) {
+  const middleware = ({ dispatch, getState }) => (next) => (action) => {
+    if (typeof action === "function") {
+      return action(dispatch, getState, extraArgument);
+    }
+    return next(action);
+  };
+  return middleware;
+}
+var thunk = createThunkMiddleware();
+var withExtraArgument = createThunkMiddleware;
+export {
+  thunk,
+  withExtraArgument
+};
Index: node_modules/redux-thunk/dist/redux-thunk.mjs
===================================================================
--- node_modules/redux-thunk/dist/redux-thunk.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux-thunk/dist/redux-thunk.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+// src/index.ts
+function createThunkMiddleware(extraArgument) {
+  const middleware = ({ dispatch, getState }) => (next) => (action) => {
+    if (typeof action === "function") {
+      return action(dispatch, getState, extraArgument);
+    }
+    return next(action);
+  };
+  return middleware;
+}
+var thunk = createThunkMiddleware();
+var withExtraArgument = createThunkMiddleware;
+export {
+  thunk,
+  withExtraArgument
+};
Index: node_modules/redux-thunk/package.json
===================================================================
--- node_modules/redux-thunk/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux-thunk/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+{
+  "name": "redux-thunk",
+  "version": "3.1.0",
+  "license": "MIT",
+  "description": "Thunk middleware for Redux.",
+  "repository": "github:reduxjs/redux-thunk",
+  "bugs": "https://github.com/reduxjs/redux-thunk/issues",
+  "homepage": "https://github.com/reduxjs/redux-thunk",
+  "keywords": [
+    "redux",
+    "thunk",
+    "middleware",
+    "redux-middleware",
+    "flux"
+  ],
+  "author": "Dan Abramov <dan.abramov@me.com>",
+  "main": "dist/cjs/redux-thunk.cjs",
+  "module": "dist/redux-thunk.legacy-esm.js",
+  "types": "dist/redux-thunk.d.ts",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "types": "./dist/redux-thunk.d.ts",
+      "import": "./dist/redux-thunk.mjs",
+      "default": "./dist/cjs/redux-thunk.cjs"
+    }
+  },
+  "sideEffects": false,
+  "files": [
+    "dist",
+    "src",
+    "extend-redux.d.ts"
+  ],
+  "scripts": {
+    "clean": "rimraf lib dist es",
+    "prepublishOnly": "yarn clean && yarn lint && yarn test && yarn build",
+    "format": "prettier --write \"{src,test,typescript_test}/**/*.{js,ts}\"",
+    "format:check": "prettier --check \"{src,test,typescript_test}/**/*.{js,ts}\"",
+    "lint": "eslint \"{src,test,typescript_test}/**/*.{js,ts}\"",
+    "test": "vitest run",
+    "test:cov": "vitest run --coverage",
+    "test:typescript": "tsc --noEmit -p typescript_test/tsconfig.json",
+    "build": "tsup",
+    "prepack": "yarn build"
+  },
+  "peerDependencies": {
+    "redux": "^5.0.0"
+  },
+  "devDependencies": {
+    "@typescript-eslint/eslint-plugin": "^5.1.0",
+    "@typescript-eslint/parser": "^5.1.0",
+    "cross-env": "^7.0.3",
+    "eslint": "^7.32.0",
+    "eslint-config-prettier": "^8.3.0",
+    "prettier": "^2.4.1",
+    "redux": "^5",
+    "rimraf": "^3.0.2",
+    "tsup": "7.0.0",
+    "typescript": "^5.0",
+    "vitest": "^0.32.0"
+  }
+}
Index: node_modules/redux-thunk/src/index.ts
===================================================================
--- node_modules/redux-thunk/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux-thunk/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+import type { Action, AnyAction } from 'redux'
+
+import type { ThunkMiddleware } from './types'
+
+export type {
+  ThunkAction,
+  ThunkDispatch,
+  ThunkActionDispatch,
+  ThunkMiddleware
+} from './types'
+
+/** A function that accepts a potential "extra argument" value to be injected later,
+ * and returns an instance of the thunk middleware that uses that value
+ */
+function createThunkMiddleware<
+  State = any,
+  BasicAction extends Action = AnyAction,
+  ExtraThunkArg = undefined
+>(extraArgument?: ExtraThunkArg) {
+  // Standard Redux middleware definition pattern:
+  // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware
+  const middleware: ThunkMiddleware<State, BasicAction, ExtraThunkArg> =
+    ({ dispatch, getState }) =>
+    next =>
+    action => {
+      // The thunk middleware looks for any functions that were passed to `store.dispatch`.
+      // If this "action" is really a function, call it and return the result.
+      if (typeof action === 'function') {
+        // Inject the store's `dispatch` and `getState` methods, as well as any "extra arg"
+        return action(dispatch, getState, extraArgument)
+      }
+
+      // Otherwise, pass the action down the middleware chain as usual
+      return next(action)
+    }
+  return middleware
+}
+
+export const thunk = createThunkMiddleware()
+
+// Export the factory function so users can create a customized version
+// with whatever "extra arg" they want to inject into their thunks
+export const withExtraArgument = createThunkMiddleware
Index: node_modules/redux-thunk/src/types.ts
===================================================================
--- node_modules/redux-thunk/src/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux-thunk/src/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,91 @@
+import type { Action, AnyAction, Middleware } from 'redux'
+
+/**
+ * The dispatch method as modified by React-Thunk; overloaded so that you can
+ * dispatch:
+ *   - standard (object) actions: `dispatch()` returns the action itself
+ *   - thunk actions: `dispatch()` returns the thunk's return value
+ *
+ * @template State The redux state
+ * @template ExtraThunkArg The extra argument passed to the inner function of
+ * thunks (if specified when setting up the Thunk middleware)
+ * @template BasicAction The (non-thunk) actions that can be dispatched.
+ */
+export interface ThunkDispatch<
+  State,
+  ExtraThunkArg,
+  BasicAction extends Action
+> {
+  // When the thunk middleware is added, `store.dispatch` now has three overloads (NOTE: the order here matters for correct behavior and is very fragile - do not reorder these!):
+
+  // 1) The specific thunk function overload
+  /** Accepts a thunk function, runs it, and returns whatever the thunk itself returns */
+  <ReturnType>(
+    thunkAction: ThunkAction<ReturnType, State, ExtraThunkArg, BasicAction>
+  ): ReturnType
+
+  // 2) The base overload.
+  /** Accepts a standard action object, and returns that action object */
+  <Action extends BasicAction>(action: Action): Action
+
+  // 3) A union of the other two overloads. This overload exists to work around a problem
+  //   with TS inference ( see https://github.com/microsoft/TypeScript/issues/14107 )
+  /** A union of the other two overloads for TS inference purposes */
+  <ReturnType, Action extends BasicAction>(
+    action: Action | ThunkAction<ReturnType, State, ExtraThunkArg, BasicAction>
+  ): Action | ReturnType
+}
+
+/**
+ * A "thunk" action (a callback function that can be dispatched to the Redux
+ * store.)
+ *
+ * Also known as the "thunk inner function", when used with the typical pattern
+ * of an action creator function that returns a thunk action.
+ *
+ * @template ReturnType The return type of the thunk's inner function
+ * @template State The redux state
+ * @template ExtraThunkArg Optional extra argument passed to the inner function
+ * (if specified when setting up the Thunk middleware)
+ * @template BasicAction The (non-thunk) actions that can be dispatched.
+ */
+export type ThunkAction<
+  ReturnType,
+  State,
+  ExtraThunkArg,
+  BasicAction extends Action
+> = (
+  dispatch: ThunkDispatch<State, ExtraThunkArg, BasicAction>,
+  getState: () => State,
+  extraArgument: ExtraThunkArg
+) => ReturnType
+
+/**
+ * A generic type that takes a thunk action creator and returns a function
+ * signature which matches how it would appear after being processed using
+ * bindActionCreators(): a function that takes the arguments of the outer
+ * function, and returns the return type of the inner "thunk" function.
+ *
+ * @template ActionCreator Thunk action creator to be wrapped
+ */
+export type ThunkActionDispatch<
+  ActionCreator extends (...args: any[]) => ThunkAction<any, any, any, any>
+> = (
+  ...args: Parameters<ActionCreator>
+) => ReturnType<ReturnType<ActionCreator>>
+
+/**
+ * @template State The redux state
+ * @template BasicAction The (non-thunk) actions that can be dispatched
+ * @template ExtraThunkArg An optional extra argument to pass to a thunk's
+ * inner function. (Only used if you call `withExtraArgument()`)
+ */
+export type ThunkMiddleware<
+  State = any,
+  BasicAction extends Action = AnyAction,
+  ExtraThunkArg = undefined
+> = Middleware<
+  ThunkDispatch<State, ExtraThunkArg, BasicAction>,
+  State,
+  ThunkDispatch<State, ExtraThunkArg, BasicAction>
+>
Index: node_modules/redux/LICENSE.md
===================================================================
--- node_modules/redux/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-present Dan Abramov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/redux/README.md
===================================================================
--- node_modules/redux/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,157 @@
+# <a href='https://redux.js.org'><img src='https://camo.githubusercontent.com/f28b5bc7822f1b7bb28a96d8d09e7d79169248fc/687474703a2f2f692e696d6775722e636f6d2f4a65567164514d2e706e67' height='60' alt='Redux Logo' aria-label='redux.js.org' /></a>
+
+Redux is a predictable state container for JavaScript apps.
+
+It helps you write applications that behave consistently, run in different environments (client, server, and native), and are easy to test. On top of that, it provides a great developer experience, such as [live code editing combined with a time traveling debugger](https://github.com/reduxjs/redux-devtools).
+
+You can use Redux together with [React](https://react.dev), or with any other view library. The Redux core is tiny (2kB, including dependencies), and has a rich ecosystem of addons.
+
+[**Redux Toolkit**](https://redux-toolkit.js.org) is our official recommended approach for writing Redux logic. It wraps around the Redux core, and contains packages and functions that we think are essential for building a Redux app. Redux Toolkit builds in our suggested best practices, simplifies most Redux tasks, prevents common mistakes, and makes it easier to write Redux applications.
+
+![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/reduxjs/redux/test.yaml?branch=master&event=push&style=flat-square)
+[![npm version](https://img.shields.io/npm/v/redux.svg?style=flat-square)](https://www.npmjs.com/package/redux)
+[![npm downloads](https://img.shields.io/npm/dm/redux.svg?style=flat-square)](https://www.npmjs.com/package/redux)
+[![redux channel on discord](https://img.shields.io/badge/discord-%23redux%20%40%20reactiflux-61dafb.svg?style=flat-square)](https://discord.gg/0ZcbPKXt5bZ6au5t)
+
+## Installation
+
+### Create a React Redux App
+
+The recommended way to start new apps with React and Redux Toolkit is by using [our official Redux Toolkit + TS template for Vite](https://github.com/reduxjs/redux-templates), or by creating a new Next.js project using [Next's `with-redux` template](https://github.com/vercel/next.js/tree/canary/examples/with-redux).
+
+Both of these already have Redux Toolkit and React-Redux configured appropriately for that build tool, and come with a small example app that demonstrates how to use several of Redux Toolkit's features.
+
+```bash
+# Vite with our Redux+TS template
+# (using the `degit` tool to clone and extract the template)
+npx degit reduxjs/redux-templates/packages/vite-template-redux my-app
+
+# Next.js using the `with-redux` template
+npx create-next-app --example with-redux my-app
+```
+
+We do not currently have official React Native templates, but recommend these templates for standard React Native and for Expo:
+
+- https://github.com/rahsheen/react-native-template-redux-typescript
+- https://github.com/rahsheen/expo-template-redux-typescript
+
+```
+npm install @reduxjs/toolkit react-redux
+```
+
+For the Redux core library by itself:
+
+```
+npm install redux
+```
+
+For more details, see [the Installation docs page](https://redux.js.org/introduction/installation).
+
+## Documentation
+
+The Redux core docs are located at **https://redux.js.org**, and include the full Redux tutorials, as well usage guides on general Redux patterns:
+
+- [Introduction](https://redux.js.org/introduction/getting-started)
+- [Tutorials](https://redux.js.org/tutorials/index)
+- [Usage Guides](https://redux.js.org/usage/index)
+- [FAQ](https://redux.js.org/faq)
+- [API Reference](https://redux.js.org/api/api-reference)
+
+The Redux Toolkit docs are available at **https://redux-toolkit.js.org**, including API references and usage guides for all of the APIs included in Redux Toolkit.
+
+## Learn Redux
+
+### Redux Essentials Tutorial
+
+The [**Redux Essentials tutorial**](https://redux.js.org/tutorials/essentials/part-1-overview-concepts) is a "top-down" tutorial that teaches "how to use Redux the right way", using our latest recommended APIs and best practices. We recommend starting there.
+
+### Redux Fundamentals Tutorial
+
+The [**Redux Fundamentals tutorial**](https://redux.js.org/tutorials/fundamentals/part-1-overview) is a "bottom-up" tutorial that teaches "how Redux works" from first principles and without any abstractions, and why standard Redux usage patterns exist.
+
+### Help and Discussion
+
+The **[#redux channel](https://discord.gg/0ZcbPKXt5bZ6au5t)** of the **[Reactiflux Discord community](https://www.reactiflux.com)** is our official resource for all questions related to learning and using Redux. Reactiflux is a great place to hang out, ask questions, and learn - please come and join us there!
+
+## Before Proceeding Further
+
+Redux is a valuable tool for organizing your state, but you should also consider whether it's appropriate for your situation. Please don't use Redux just because someone said you should - instead, please take some time to understand the potential benefits and tradeoffs of using it.
+
+Here are some suggestions on when it makes sense to use Redux:
+
+- You have reasonable amounts of data changing over time
+- You need a single source of truth for your state
+- You find that keeping all your state in a top-level component is no longer sufficient
+
+Yes, these guidelines are subjective and vague, but this is for a good reason. The point at which you should integrate Redux into your application is different for every user and different for every application.
+
+> **For more thoughts on how Redux is meant to be used, please see:**<br>
+>
+> - **[When (and when not) to reach for Redux](https://changelog.com/posts/when-and-when-not-to-reach-for-redux)**
+> - **[You Might Not Need Redux](https://medium.com/@dan_abramov/you-might-not-need-redux-be46360cf367)**<br>
+> - **[The Tao of Redux, Part 1 - Implementation and Intent](https://blog.isquaredsoftware.com/2017/05/idiomatic-redux-tao-of-redux-part-1/)**<br>
+> - **[The Tao of Redux, Part 2 - Practice and Philosophy](https://blog.isquaredsoftware.com/2017/05/idiomatic-redux-tao-of-redux-part-2/)**
+> - **[Redux FAQ](https://redux.js.org/faq)**
+
+## Basic Example
+
+The whole global state of your app is stored in an object tree inside a single _store_.
+The only way to change the state tree is to create an _action_, an object describing what happened, and _dispatch_ it to the store.
+To specify how state gets updated in response to an action, you write pure _reducer_ functions that calculate a new state based on the old state and the action.
+
+Redux Toolkit simplifies the process of writing Redux logic and setting up the store. With Redux Toolkit, the basic app logic looks like:
+
+```js
+import { createSlice, configureStore } from '@reduxjs/toolkit'
+
+const counterSlice = createSlice({
+  name: 'counter',
+  initialState: {
+    value: 0
+  },
+  reducers: {
+    incremented: state => {
+      // Redux Toolkit allows us to write "mutating" logic in reducers. It
+      // doesn't actually mutate the state because it uses the Immer library,
+      // which detects changes to a "draft state" and produces a brand new
+      // immutable state based off those changes
+      state.value += 1
+    },
+    decremented: state => {
+      state.value -= 1
+    }
+  }
+})
+
+export const { incremented, decremented } = counterSlice.actions
+
+const store = configureStore({
+  reducer: counterSlice.reducer
+})
+
+// Can still subscribe to the store
+store.subscribe(() => console.log(store.getState()))
+
+// Still pass action objects to `dispatch`, but they're created for us
+store.dispatch(incremented())
+// {value: 1}
+store.dispatch(incremented())
+// {value: 2}
+store.dispatch(decremented())
+// {value: 1}
+```
+
+Redux Toolkit allows us to write shorter logic that's easier to read, while still following the original core Redux behavior and data flow.
+
+## Logo
+
+You can find the official logo [on GitHub](https://github.com/reduxjs/redux/tree/master/logo).
+
+## Change Log
+
+This project adheres to [Semantic Versioning](https://semver.org/).
+Every release, along with the migration instructions, is documented on the GitHub [Releases](https://github.com/reduxjs/redux/releases) page.
+
+## License
+
+[MIT](LICENSE.md)
Index: node_modules/redux/dist/cjs/redux.cjs
===================================================================
--- node_modules/redux/dist/cjs/redux.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/dist/cjs/redux.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,432 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var src_exports = {};
+__export(src_exports, {
+  __DO_NOT_USE__ActionTypes: () => actionTypes_default,
+  applyMiddleware: () => applyMiddleware,
+  bindActionCreators: () => bindActionCreators,
+  combineReducers: () => combineReducers,
+  compose: () => compose,
+  createStore: () => createStore,
+  isAction: () => isAction,
+  isPlainObject: () => isPlainObject,
+  legacy_createStore: () => legacy_createStore
+});
+module.exports = __toCommonJS(src_exports);
+
+// src/utils/formatProdErrorMessage.ts
+function formatProdErrorMessage(code) {
+  return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;
+}
+
+// src/utils/symbol-observable.ts
+var $$observable = /* @__PURE__ */ (() => typeof Symbol === "function" && Symbol.observable || "@@observable")();
+var symbol_observable_default = $$observable;
+
+// src/utils/actionTypes.ts
+var randomString = () => Math.random().toString(36).substring(7).split("").join(".");
+var ActionTypes = {
+  INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,
+  REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,
+  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
+};
+var actionTypes_default = ActionTypes;
+
+// src/utils/isPlainObject.ts
+function isPlainObject(obj) {
+  if (typeof obj !== "object" || obj === null)
+    return false;
+  let proto = obj;
+  while (Object.getPrototypeOf(proto) !== null) {
+    proto = Object.getPrototypeOf(proto);
+  }
+  return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;
+}
+
+// src/utils/kindOf.ts
+function miniKindOf(val) {
+  if (val === void 0)
+    return "undefined";
+  if (val === null)
+    return "null";
+  const type = typeof val;
+  switch (type) {
+    case "boolean":
+    case "string":
+    case "number":
+    case "symbol":
+    case "function": {
+      return type;
+    }
+  }
+  if (Array.isArray(val))
+    return "array";
+  if (isDate(val))
+    return "date";
+  if (isError(val))
+    return "error";
+  const constructorName = ctorName(val);
+  switch (constructorName) {
+    case "Symbol":
+    case "Promise":
+    case "WeakMap":
+    case "WeakSet":
+    case "Map":
+    case "Set":
+      return constructorName;
+  }
+  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\s/g, "");
+}
+function ctorName(val) {
+  return typeof val.constructor === "function" ? val.constructor.name : null;
+}
+function isError(val) {
+  return val instanceof Error || typeof val.message === "string" && val.constructor && typeof val.constructor.stackTraceLimit === "number";
+}
+function isDate(val) {
+  if (val instanceof Date)
+    return true;
+  return typeof val.toDateString === "function" && typeof val.getDate === "function" && typeof val.setDate === "function";
+}
+function kindOf(val) {
+  let typeOfVal = typeof val;
+  if (process.env.NODE_ENV !== "production") {
+    typeOfVal = miniKindOf(val);
+  }
+  return typeOfVal;
+}
+
+// src/createStore.ts
+function createStore(reducer, preloadedState, enhancer) {
+  if (typeof reducer !== "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);
+  }
+  if (typeof preloadedState === "function" && typeof enhancer === "function" || typeof enhancer === "function" && typeof arguments[3] === "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(0) : "It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.");
+  }
+  if (typeof preloadedState === "function" && typeof enhancer === "undefined") {
+    enhancer = preloadedState;
+    preloadedState = void 0;
+  }
+  if (typeof enhancer !== "undefined") {
+    if (typeof enhancer !== "function") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);
+    }
+    return enhancer(createStore)(reducer, preloadedState);
+  }
+  let currentReducer = reducer;
+  let currentState = preloadedState;
+  let currentListeners = /* @__PURE__ */ new Map();
+  let nextListeners = currentListeners;
+  let listenerIdCounter = 0;
+  let isDispatching = false;
+  function ensureCanMutateNextListeners() {
+    if (nextListeners === currentListeners) {
+      nextListeners = /* @__PURE__ */ new Map();
+      currentListeners.forEach((listener, key) => {
+        nextListeners.set(key, listener);
+      });
+    }
+  }
+  function getState() {
+    if (isDispatching) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(3) : "You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");
+    }
+    return currentState;
+  }
+  function subscribe(listener) {
+    if (typeof listener !== "function") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);
+    }
+    if (isDispatching) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(5) : "You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.");
+    }
+    let isSubscribed = true;
+    ensureCanMutateNextListeners();
+    const listenerId = listenerIdCounter++;
+    nextListeners.set(listenerId, listener);
+    return function unsubscribe() {
+      if (!isSubscribed) {
+        return;
+      }
+      if (isDispatching) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(6) : "You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.");
+      }
+      isSubscribed = false;
+      ensureCanMutateNextListeners();
+      nextListeners.delete(listenerId);
+      currentListeners = null;
+    };
+  }
+  function dispatch(action) {
+    if (!isPlainObject(action)) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);
+    }
+    if (typeof action.type === "undefined") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(8) : 'Actions may not have an undefined "type" property. You may have misspelled an action type string constant.');
+    }
+    if (typeof action.type !== "string") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(17) : `Action "type" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);
+    }
+    if (isDispatching) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(9) : "Reducers may not dispatch actions.");
+    }
+    try {
+      isDispatching = true;
+      currentState = currentReducer(currentState, action);
+    } finally {
+      isDispatching = false;
+    }
+    const listeners = currentListeners = nextListeners;
+    listeners.forEach((listener) => {
+      listener();
+    });
+    return action;
+  }
+  function replaceReducer(nextReducer) {
+    if (typeof nextReducer !== "function") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);
+    }
+    currentReducer = nextReducer;
+    dispatch({
+      type: actionTypes_default.REPLACE
+    });
+  }
+  function observable() {
+    const outerSubscribe = subscribe;
+    return {
+      /**
+       * The minimal observable subscription method.
+       * @param observer Any object that can be used as an observer.
+       * The observer object should have a `next` method.
+       * @returns An object with an `unsubscribe` method that can
+       * be used to unsubscribe the observable from the store, and prevent further
+       * emission of values from the observable.
+       */
+      subscribe(observer) {
+        if (typeof observer !== "object" || observer === null) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);
+        }
+        function observeState() {
+          const observerAsObserver = observer;
+          if (observerAsObserver.next) {
+            observerAsObserver.next(getState());
+          }
+        }
+        observeState();
+        const unsubscribe = outerSubscribe(observeState);
+        return {
+          unsubscribe
+        };
+      },
+      [symbol_observable_default]() {
+        return this;
+      }
+    };
+  }
+  dispatch({
+    type: actionTypes_default.INIT
+  });
+  const store = {
+    dispatch,
+    subscribe,
+    getState,
+    replaceReducer,
+    [symbol_observable_default]: observable
+  };
+  return store;
+}
+function legacy_createStore(reducer, preloadedState, enhancer) {
+  return createStore(reducer, preloadedState, enhancer);
+}
+
+// src/utils/warning.ts
+function warning(message) {
+  if (typeof console !== "undefined" && typeof console.error === "function") {
+    console.error(message);
+  }
+  try {
+    throw new Error(message);
+  } catch (e) {
+  }
+}
+
+// src/combineReducers.ts
+function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {
+  const reducerKeys = Object.keys(reducers);
+  const argumentName = action && action.type === actionTypes_default.INIT ? "preloadedState argument passed to createStore" : "previous state received by the reducer";
+  if (reducerKeys.length === 0) {
+    return "Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.";
+  }
+  if (!isPlainObject(inputState)) {
+    return `The ${argumentName} has unexpected type of "${kindOf(inputState)}". Expected argument to be an object with the following keys: "${reducerKeys.join('", "')}"`;
+  }
+  const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);
+  unexpectedKeys.forEach((key) => {
+    unexpectedKeyCache[key] = true;
+  });
+  if (action && action.type === actionTypes_default.REPLACE)
+    return;
+  if (unexpectedKeys.length > 0) {
+    return `Unexpected ${unexpectedKeys.length > 1 ? "keys" : "key"} "${unexpectedKeys.join('", "')}" found in ${argumentName}. Expected to find one of the known reducer keys instead: "${reducerKeys.join('", "')}". Unexpected keys will be ignored.`;
+  }
+}
+function assertReducerShape(reducers) {
+  Object.keys(reducers).forEach((key) => {
+    const reducer = reducers[key];
+    const initialState = reducer(void 0, {
+      type: actionTypes_default.INIT
+    });
+    if (typeof initialState === "undefined") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(12) : `The slice reducer for key "${key}" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);
+    }
+    if (typeof reducer(void 0, {
+      type: actionTypes_default.PROBE_UNKNOWN_ACTION()
+    }) === "undefined") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(13) : `The slice reducer for key "${key}" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);
+    }
+  });
+}
+function combineReducers(reducers) {
+  const reducerKeys = Object.keys(reducers);
+  const finalReducers = {};
+  for (let i = 0; i < reducerKeys.length; i++) {
+    const key = reducerKeys[i];
+    if (process.env.NODE_ENV !== "production") {
+      if (typeof reducers[key] === "undefined") {
+        warning(`No reducer provided for key "${key}"`);
+      }
+    }
+    if (typeof reducers[key] === "function") {
+      finalReducers[key] = reducers[key];
+    }
+  }
+  const finalReducerKeys = Object.keys(finalReducers);
+  let unexpectedKeyCache;
+  if (process.env.NODE_ENV !== "production") {
+    unexpectedKeyCache = {};
+  }
+  let shapeAssertionError;
+  try {
+    assertReducerShape(finalReducers);
+  } catch (e) {
+    shapeAssertionError = e;
+  }
+  return function combination(state = {}, action) {
+    if (shapeAssertionError) {
+      throw shapeAssertionError;
+    }
+    if (process.env.NODE_ENV !== "production") {
+      const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);
+      if (warningMessage) {
+        warning(warningMessage);
+      }
+    }
+    let hasChanged = false;
+    const nextState = {};
+    for (let i = 0; i < finalReducerKeys.length; i++) {
+      const key = finalReducerKeys[i];
+      const reducer = finalReducers[key];
+      const previousStateForKey = state[key];
+      const nextStateForKey = reducer(previousStateForKey, action);
+      if (typeof nextStateForKey === "undefined") {
+        const actionType = action && action.type;
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `"${String(actionType)}"` : "(unknown type)"}, the slice reducer for key "${key}" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);
+      }
+      nextState[key] = nextStateForKey;
+      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
+    }
+    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;
+    return hasChanged ? nextState : state;
+  };
+}
+
+// src/bindActionCreators.ts
+function bindActionCreator(actionCreator, dispatch) {
+  return function(...args) {
+    return dispatch(actionCreator.apply(this, args));
+  };
+}
+function bindActionCreators(actionCreators, dispatch) {
+  if (typeof actionCreators === "function") {
+    return bindActionCreator(actionCreators, dispatch);
+  }
+  if (typeof actionCreators !== "object" || actionCreators === null) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?`);
+  }
+  const boundActionCreators = {};
+  for (const key in actionCreators) {
+    const actionCreator = actionCreators[key];
+    if (typeof actionCreator === "function") {
+      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);
+    }
+  }
+  return boundActionCreators;
+}
+
+// src/compose.ts
+function compose(...funcs) {
+  if (funcs.length === 0) {
+    return (arg) => arg;
+  }
+  if (funcs.length === 1) {
+    return funcs[0];
+  }
+  return funcs.reduce((a, b) => (...args) => a(b(...args)));
+}
+
+// src/applyMiddleware.ts
+function applyMiddleware(...middlewares) {
+  return (createStore2) => (reducer, preloadedState) => {
+    const store = createStore2(reducer, preloadedState);
+    let dispatch = () => {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(15) : "Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.");
+    };
+    const middlewareAPI = {
+      getState: store.getState,
+      dispatch: (action, ...args) => dispatch(action, ...args)
+    };
+    const chain = middlewares.map((middleware) => middleware(middlewareAPI));
+    dispatch = compose(...chain)(store.dispatch);
+    return {
+      ...store,
+      dispatch
+    };
+  };
+}
+
+// src/utils/isAction.ts
+function isAction(action) {
+  return isPlainObject(action) && "type" in action && typeof action.type === "string";
+}
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  __DO_NOT_USE__ActionTypes,
+  applyMiddleware,
+  bindActionCreators,
+  combineReducers,
+  compose,
+  createStore,
+  isAction,
+  isPlainObject,
+  legacy_createStore
+});
+//# sourceMappingURL=redux.cjs.map
Index: node_modules/redux/dist/cjs/redux.cjs.map
===================================================================
--- node_modules/redux/dist/cjs/redux.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/dist/cjs/redux.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/index.ts","../../src/utils/formatProdErrorMessage.ts","../../src/utils/symbol-observable.ts","../../src/utils/actionTypes.ts","../../src/utils/isPlainObject.ts","../../src/utils/kindOf.ts","../../src/createStore.ts","../../src/utils/warning.ts","../../src/combineReducers.ts","../../src/bindActionCreators.ts","../../src/compose.ts","../../src/applyMiddleware.ts","../../src/utils/isAction.ts"],"sourcesContent":["// functions\nimport { createStore, legacy_createStore } from './createStore';\nimport combineReducers from './combineReducers';\nimport bindActionCreators from './bindActionCreators';\nimport applyMiddleware from './applyMiddleware';\nimport compose from './compose';\nimport isAction from './utils/isAction';\nimport isPlainObject from './utils/isPlainObject';\nimport __DO_NOT_USE__ActionTypes from './utils/actionTypes';\n\n// types\n// store\nexport { Dispatch, Unsubscribe, Observable, Observer, Store, StoreCreator, StoreEnhancer, StoreEnhancerStoreCreator } from './types/store';\n// reducers\nexport { Reducer, ReducersMapObject, StateFromReducersMapObject, ReducerFromReducersMapObject, ActionFromReducer, ActionFromReducersMapObject, PreloadedStateShapeFromReducersMapObject } from './types/reducers';\n// action creators\nexport { ActionCreator, ActionCreatorsMapObject } from './types/actions';\n// middleware\nexport { MiddlewareAPI, Middleware } from './types/middleware';\n// actions\nexport { Action, UnknownAction, AnyAction } from './types/actions';\nexport { createStore, legacy_createStore, combineReducers, bindActionCreators, applyMiddleware, compose, isAction, isPlainObject, __DO_NOT_USE__ActionTypes };","/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n  return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}","declare global {\n  interface SymbolConstructor {\n    readonly observable: symbol;\n  }\n}\nconst $$observable = /* #__PURE__ */(() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\nexport default $$observable;","/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nconst randomString = () => Math.random().toString(36).substring(7).split('').join('.');\nconst ActionTypes = {\n  INIT: `@@redux/INIT${/* #__PURE__ */randomString()}`,\n  REPLACE: `@@redux/REPLACE${/* #__PURE__ */randomString()}`,\n  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nexport default ActionTypes;","/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: any): obj is object {\n  if (typeof obj !== 'object' || obj === null) return false;\n  let proto = obj;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n  return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}","// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nexport function miniKindOf(val: any): string {\n  if (val === void 0) return 'undefined';\n  if (val === null) return 'null';\n  const type = typeof val;\n  switch (type) {\n    case 'boolean':\n    case 'string':\n    case 'number':\n    case 'symbol':\n    case 'function':\n      {\n        return type;\n      }\n  }\n  if (Array.isArray(val)) return 'array';\n  if (isDate(val)) return 'date';\n  if (isError(val)) return 'error';\n  const constructorName = ctorName(val);\n  switch (constructorName) {\n    case 'Symbol':\n    case 'Promise':\n    case 'WeakMap':\n    case 'WeakSet':\n    case 'Map':\n    case 'Set':\n      return constructorName;\n  }\n\n  // other\n  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\nfunction ctorName(val: any): string | null {\n  return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\nfunction isError(val: any) {\n  return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\nfunction isDate(val: any) {\n  if (val instanceof Date) return true;\n  return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\nexport function kindOf(val: any) {\n  let typeOfVal: string = typeof val;\n  if (process.env.NODE_ENV !== 'production') {\n    typeOfVal = miniKindOf(val);\n  }\n  return typeOfVal;\n}","import { formatProdErrorMessage as _formatProdErrorMessage13 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage12 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage11 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage10 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage9 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage8 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport $$observable from './utils/symbol-observable';\nimport { Store, StoreEnhancer, Dispatch, Observer, ListenerCallback, UnknownIfNonSpecific } from './types/store';\nimport { Action } from './types/actions';\nimport { Reducer } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport { kindOf } from './utils/kindOf';\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n  if (typeof reducer !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n  }\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n  }\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = (preloadedState as StoreEnhancer<Ext, StateExt>);\n    preloadedState = undefined;\n  }\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n    }\n    return enhancer(createStore)(reducer, (preloadedState as PreloadedState | undefined));\n  }\n  let currentReducer = reducer;\n  let currentState: S | PreloadedState | undefined = (preloadedState as PreloadedState | undefined);\n  let currentListeners: Map<number, ListenerCallback> | null = new Map();\n  let nextListeners = currentListeners;\n  let listenerIdCounter = 0;\n  let isDispatching = false;\n\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = new Map();\n      currentListeners.forEach((listener, key) => {\n        nextListeners.set(key, listener);\n      });\n    }\n  }\n\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns The current state tree of your application.\n   */\n  function getState(): S {\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n    return (currentState as S);\n  }\n\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param listener A callback to be invoked on every dispatch.\n   * @returns A function to remove this change listener.\n   */\n  function subscribe(listener: () => void) {\n    if (typeof listener !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n    }\n    let isSubscribed = true;\n    ensureCanMutateNextListeners();\n    const listenerId = listenerIdCounter++;\n    nextListeners.set(listenerId, listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n      if (isDispatching) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n      }\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      nextListeners.delete(listenerId);\n      currentListeners = null;\n    };\n  }\n\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n  function dispatch(action: A) {\n    if (!isPlainObject(action)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n    }\n    if (typeof action.type === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage9(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n    }\n    if (typeof action.type !== 'string') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage10(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage11(9) : 'Reducers may not dispatch actions.');\n    }\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n    const listeners = currentListeners = nextListeners;\n    listeners.forEach(listener => {\n      listener();\n    });\n    return action;\n  }\n\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param nextReducer The reducer for the store to use instead.\n   */\n  function replaceReducer(nextReducer: Reducer<S, A>): void {\n    if (typeof nextReducer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage12(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n    }\n    currentReducer = ((nextReducer as unknown) as Reducer<S, A, PreloadedState>);\n\n    // This action has a similar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n    dispatch(({\n      type: ActionTypes.REPLACE\n    } as A));\n  }\n\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n  function observable() {\n    const outerSubscribe = subscribe;\n    return {\n      /**\n       * The minimal observable subscription method.\n       * @param observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe(observer: unknown) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage13(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n        }\n        function observeState() {\n          const observerAsObserver = (observer as Observer<S>);\n          if (observerAsObserver.next) {\n            observerAsObserver.next(getState());\n          }\n        }\n        observeState();\n        const unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe\n        };\n      },\n      [$$observable]() {\n        return this;\n      }\n    };\n  }\n\n  // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n  dispatch(({\n    type: ActionTypes.INIT\n  } as A));\n  const store = (({\n    dispatch: (dispatch as Dispatch<A>),\n    subscribe,\n    getState,\n    replaceReducer,\n    [$$observable]: observable\n  } as unknown) as Store<S, A, StateExt> & Ext);\n  return store;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n  return createStore(reducer, (preloadedState as any), enhancer);\n}","/**\n * Prints a warning in the console if it exists.\n *\n * @param message The warning message.\n */\nexport default function warning(message: string): void {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n}","import { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Action } from './types/actions';\nimport { ActionFromReducersMapObject, PreloadedStateShapeFromReducersMapObject, Reducer, StateFromReducersMapObject } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport warning from './utils/warning';\nimport { kindOf } from './utils/kindOf';\nfunction getUnexpectedStateShapeWarningMessage(inputState: object, reducers: {\n  [key: string]: Reducer<any, any, any>;\n}, action: Action, unexpectedKeyCache: {\n  [key: string]: true;\n}) {\n  const reducerKeys = Object.keys(reducers);\n  const argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n  if (!isPlainObject(inputState)) {\n    return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following ` + `keys: \"${reducerKeys.join('\", \"')}\"`;\n  }\n  const unexpectedKeys = Object.keys(inputState).filter(key => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n  unexpectedKeys.forEach(key => {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n  if (unexpectedKeys.length > 0) {\n    return `Unexpected ${unexpectedKeys.length > 1 ? 'keys' : 'key'} ` + `\"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. ` + `Expected to find one of the known reducer keys instead: ` + `\"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n  }\n}\nfunction assertReducerShape(reducers: {\n  [key: string]: Reducer<any, any, any>;\n}) {\n  Object.keys(reducers).forEach(key => {\n    const reducer = reducers[key];\n    const initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n    if (typeof initialState === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n    }\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. ` + `Don't try to handle '${ActionTypes.INIT}' or other actions in \"redux/*\" ` + `namespace. They are considered private. Instead, you must return the ` + `current state for any unknown actions, unless it is undefined, ` + `in which case you must return the initial state, regardless of the ` + `action type. The initial state may not be undefined, but can be null.`);\n    }\n  });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @template S Combined state object type.\n *\n * @param reducers An object whose values correspond to different reducer\n *   functions that need to be combined into one. One handy way to obtain it\n *   is to use `import * as reducers` syntax. The reducers may never\n *   return undefined for any action. Instead, they should return their\n *   initial state if the state passed to them was undefined, and the current\n *   state for any unrecognized action.\n *\n * @returns A reducer function that invokes every reducer inside the passed\n *   object, and builds a state object with the same shape.\n */\nexport default function combineReducers<M>(reducers: M): M[keyof M] extends Reducer<any, any, any> | undefined ? Reducer<StateFromReducersMapObject<M>, ActionFromReducersMapObject<M>, Partial<PreloadedStateShapeFromReducersMapObject<M>>> : never;\nexport default function combineReducers(reducers: {\n  [key: string]: Reducer<any, any, any>;\n}) {\n  const reducerKeys = Object.keys(reducers);\n  const finalReducers: {\n    [key: string]: Reducer<any, any, any>;\n  } = {};\n  for (let i = 0; i < reducerKeys.length; i++) {\n    const key = reducerKeys[i];\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(`No reducer provided for key \"${key}\"`);\n      }\n    }\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n  const finalReducerKeys = Object.keys(finalReducers);\n\n  // This is used to make sure we don't warn about the same\n  // keys multiple times.\n  let unexpectedKeyCache: {\n    [key: string]: true;\n  };\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n  let shapeAssertionError: unknown;\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n  return function combination(state: StateFromReducersMapObject<typeof reducers> = {}, action: Action) {\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n    let hasChanged = false;\n    const nextState: StateFromReducersMapObject<typeof reducers> = {};\n    for (let i = 0; i < finalReducerKeys.length; i++) {\n      const key = finalReducerKeys[i];\n      const reducer = finalReducers[key];\n      const previousStateForKey = state[key];\n      const nextStateForKey = reducer(previousStateForKey, action);\n      if (typeof nextStateForKey === 'undefined') {\n        const actionType = action && action.type;\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : '(unknown type)'}, the slice reducer for key \"${key}\" returned undefined. ` + `To ignore an action, you must explicitly return the previous state. ` + `If you want this reducer to hold no value, you can return null instead of undefined.`);\n      }\n      nextState[key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Dispatch } from './types/store';\nimport { ActionCreator, ActionCreatorsMapObject, Action } from './types/actions';\nimport { kindOf } from './utils/kindOf';\nfunction bindActionCreator<A extends Action>(actionCreator: ActionCreator<A>, dispatch: Dispatch<A>) {\n  return function (this: any, ...args: any[]) {\n    return dispatch(actionCreator.apply(this, args));\n  };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use `import * as`\n * syntax. You may also pass a single function.\n *\n * @param dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nexport default function bindActionCreators<A, C extends ActionCreator<A>>(actionCreator: C, dispatch: Dispatch): C;\nexport default function bindActionCreators<A extends ActionCreator<any>, B extends ActionCreator<any>>(actionCreator: A, dispatch: Dispatch): B;\nexport default function bindActionCreators<A, M extends ActionCreatorsMapObject<A>>(actionCreators: M, dispatch: Dispatch): M;\nexport default function bindActionCreators<M extends ActionCreatorsMapObject, N extends ActionCreatorsMapObject>(actionCreators: M, dispatch: Dispatch): N;\nexport default function bindActionCreators(actionCreators: ActionCreator<any> | ActionCreatorsMapObject, dispatch: Dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. ` + `Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n  }\n  const boundActionCreators: ActionCreatorsMapObject = {};\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key];\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n  return boundActionCreators;\n}","type Func<T extends any[], R> = (...a: T) => R;\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for the\n * resulting composite function.\n *\n * @param funcs The functions to compose.\n * @returns A function obtained by composing the argument functions from right\n *   to left. For example, `compose(f, g, h)` is identical to doing\n *   `(...args) => f(g(h(...args)))`.\n */\nexport default function compose(): <R>(a: R) => R;\nexport default function compose<F extends Function>(f: F): F;\n\n/* two functions */\nexport default function compose<A, T extends any[], R>(f1: (a: A) => R, f2: Func<T, A>): Func<T, R>;\n\n/* three functions */\nexport default function compose<A, B, T extends any[], R>(f1: (b: B) => R, f2: (a: A) => B, f3: Func<T, A>): Func<T, R>;\n\n/* four functions */\nexport default function compose<A, B, C, T extends any[], R>(f1: (c: C) => R, f2: (b: B) => C, f3: (a: A) => B, f4: Func<T, A>): Func<T, R>;\n\n/* rest */\nexport default function compose<R>(f1: (a: any) => R, ...funcs: Function[]): (...args: any[]) => R;\nexport default function compose<R>(...funcs: Function[]): (...args: any[]) => R;\nexport default function compose(...funcs: Function[]) {\n  if (funcs.length === 0) {\n    // infer the argument type so it is usable in inference down the line\n    return <T,>(arg: T) => arg;\n  }\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n  return funcs.reduce((a, b) => (...args: any) => a(b(...args)));\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport compose from './compose';\nimport { Middleware, MiddlewareAPI } from './types/middleware';\nimport { StoreEnhancer, Dispatch } from './types/store';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param middlewares The middleware chain to be applied.\n * @returns A store enhancer applying the middleware.\n *\n * @template Ext Dispatch signature added by a middleware.\n * @template S The type of the state supported by a middleware.\n */\nexport default function applyMiddleware(): StoreEnhancer;\nexport default function applyMiddleware<Ext1, S>(middleware1: Middleware<Ext1, S, any>): StoreEnhancer<{\n  dispatch: Ext1;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2 & Ext3;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2 & Ext3 & Ext4;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, Ext5, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>, middleware5: Middleware<Ext5, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5;\n}>;\nexport default function applyMiddleware<Ext, S = any>(...middlewares: Middleware<any, S, any>[]): StoreEnhancer<{\n  dispatch: Ext;\n}>;\nexport default function applyMiddleware(...middlewares: Middleware[]): StoreEnhancer<any> {\n  return createStore => (reducer, preloadedState) => {\n    const store = createStore(reducer, preloadedState);\n    let dispatch: Dispatch = () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n    };\n    const middlewareAPI: MiddlewareAPI = {\n      getState: store.getState,\n      dispatch: (action, ...args) => dispatch(action, ...args)\n    };\n    const chain = middlewares.map(middleware => middleware(middlewareAPI));\n    dispatch = compose<typeof dispatch>(...chain)(store.dispatch);\n    return {\n      ...store,\n      dispatch\n    };\n  };\n}","import { Action } from '../types/actions';\nimport isPlainObject from './isPlainObject';\nexport default function isAction(action: unknown): action is Action<string> {\n  return isPlainObject(action) && 'type' in action && typeof (action as Record<'type', unknown>).type === 'string';\n}"],"mappings":"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","names":["createStore"]}
Index: node_modules/redux/dist/redux.browser.mjs
===================================================================
--- node_modules/redux/dist/redux.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/dist/redux.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+function t(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var C=typeof Symbol=="function"&&Symbol.observable||"@@observable",A=C;var M=()=>Math.random().toString(36).substring(7).split("").join("."),I={INIT:`@@redux/INIT${M()}`,REPLACE:`@@redux/REPLACE${M()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${M()}`},y=I;function x(e){if(typeof e!="object"||e===null)return!1;let r=e;for(;Object.getPrototypeOf(r)!==null;)r=Object.getPrototypeOf(r);return Object.getPrototypeOf(e)===r||Object.getPrototypeOf(e)===null}function O(e,r,o){if(typeof e!="function")throw new Error(t(2));if(typeof r=="function"&&typeof o=="function"||typeof o=="function"&&typeof arguments[3]=="function")throw new Error(t(0));if(typeof r=="function"&&typeof o>"u"&&(o=r,r=void 0),typeof o<"u"){if(typeof o!="function")throw new Error(t(1));return o(O)(e,r)}let i=e,c=r,d=new Map,a=d,u=0,s=!1;function f(){a===d&&(a=new Map,d.forEach((n,p)=>{a.set(p,n)}))}function h(){if(s)throw new Error(t(3));return c}function l(n){if(typeof n!="function")throw new Error(t(4));if(s)throw new Error(t(5));let p=!0;f();let E=u++;return a.set(E,n),function(){if(p){if(s)throw new Error(t(6));p=!1,f(),a.delete(E),d=null}}}function m(n){if(!x(n))throw new Error(t(7));if(typeof n.type>"u")throw new Error(t(8));if(typeof n.type!="string")throw new Error(t(17));if(s)throw new Error(t(9));try{s=!0,c=i(c,n)}finally{s=!1}return(d=a).forEach(E=>{E()}),n}function g(n){if(typeof n!="function")throw new Error(t(10));i=n,m({type:y.REPLACE})}function S(){let n=l;return{subscribe(p){if(typeof p!="object"||p===null)throw new Error(t(11));function E(){let P=p;P.next&&P.next(h())}return E(),{unsubscribe:n(E)}},[A](){return this}}}return m({type:y.INIT}),{dispatch:m,subscribe:l,getState:h,replaceReducer:g,[A]:S}}function T(e,r,o){return O(e,r,o)}function D(e){Object.keys(e).forEach(r=>{let o=e[r];if(typeof o(void 0,{type:y.INIT})>"u")throw new Error(t(12));if(typeof o(void 0,{type:y.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(t(13))})}function N(e){let r=Object.keys(e),o={};for(let a=0;a<r.length;a++){let u=r[a];typeof e[u]=="function"&&(o[u]=e[u])}let i=Object.keys(o),c,d;try{D(o)}catch(a){d=a}return function(u={},s){if(d)throw d;let f=!1,h={};for(let l=0;l<i.length;l++){let m=i[l],g=o[m],S=u[m],w=g(S,s);if(typeof w>"u"){let n=s&&s.type;throw new Error(t(14))}h[m]=w,f=f||w!==S}return f=f||i.length!==Object.keys(u).length,f?h:u}}function R(e,r){return function(...o){return r(e.apply(this,o))}}function k(e,r){if(typeof e=="function")return R(e,r);if(typeof e!="object"||e===null)throw new Error(t(16));let o={};for(let i in e){let c=e[i];typeof c=="function"&&(o[i]=R(c,r))}return o}function b(...e){return e.length===0?r=>r:e.length===1?e[0]:e.reduce((r,o)=>(...i)=>r(o(...i)))}function v(...e){return r=>(o,i)=>{let c=r(o,i),d=()=>{throw new Error(t(15))},a={getState:c.getState,dispatch:(s,...f)=>d(s,...f)},u=e.map(s=>s(a));return d=b(...u)(c.dispatch),{...c,dispatch:d}}}function _(e){return x(e)&&"type"in e&&typeof e.type=="string"}export{y as __DO_NOT_USE__ActionTypes,v as applyMiddleware,k as bindActionCreators,N as combineReducers,b as compose,O as createStore,_ as isAction,x as isPlainObject,T as legacy_createStore};
+//# sourceMappingURL=redux.browser.mjs.map
Index: node_modules/redux/dist/redux.browser.mjs.map
===================================================================
--- node_modules/redux/dist/redux.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/dist/redux.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/utils/formatProdErrorMessage.ts","../src/utils/symbol-observable.ts","../src/utils/actionTypes.ts","../src/utils/isPlainObject.ts","../src/createStore.ts","../src/combineReducers.ts","../src/bindActionCreators.ts","../src/compose.ts","../src/applyMiddleware.ts","../src/utils/isAction.ts"],"sourcesContent":["/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n  return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}","declare global {\n  interface SymbolConstructor {\n    readonly observable: symbol;\n  }\n}\nconst $$observable = /* #__PURE__ */(() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\nexport default $$observable;","/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nconst randomString = () => Math.random().toString(36).substring(7).split('').join('.');\nconst ActionTypes = {\n  INIT: `@@redux/INIT${/* #__PURE__ */randomString()}`,\n  REPLACE: `@@redux/REPLACE${/* #__PURE__ */randomString()}`,\n  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nexport default ActionTypes;","/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: any): obj is object {\n  if (typeof obj !== 'object' || obj === null) return false;\n  let proto = obj;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n  return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}","import { formatProdErrorMessage as _formatProdErrorMessage13 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage12 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage11 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage10 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage9 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage8 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport $$observable from './utils/symbol-observable';\nimport { Store, StoreEnhancer, Dispatch, Observer, ListenerCallback, UnknownIfNonSpecific } from './types/store';\nimport { Action } from './types/actions';\nimport { Reducer } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport { kindOf } from './utils/kindOf';\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n  if (typeof reducer !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n  }\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n  }\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = (preloadedState as StoreEnhancer<Ext, StateExt>);\n    preloadedState = undefined;\n  }\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n    }\n    return enhancer(createStore)(reducer, (preloadedState as PreloadedState | undefined));\n  }\n  let currentReducer = reducer;\n  let currentState: S | PreloadedState | undefined = (preloadedState as PreloadedState | undefined);\n  let currentListeners: Map<number, ListenerCallback> | null = new Map();\n  let nextListeners = currentListeners;\n  let listenerIdCounter = 0;\n  let isDispatching = false;\n\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = new Map();\n      currentListeners.forEach((listener, key) => {\n        nextListeners.set(key, listener);\n      });\n    }\n  }\n\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns The current state tree of your application.\n   */\n  function getState(): S {\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n    return (currentState as S);\n  }\n\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param listener A callback to be invoked on every dispatch.\n   * @returns A function to remove this change listener.\n   */\n  function subscribe(listener: () => void) {\n    if (typeof listener !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n    }\n    let isSubscribed = true;\n    ensureCanMutateNextListeners();\n    const listenerId = listenerIdCounter++;\n    nextListeners.set(listenerId, listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n      if (isDispatching) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n      }\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      nextListeners.delete(listenerId);\n      currentListeners = null;\n    };\n  }\n\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n  function dispatch(action: A) {\n    if (!isPlainObject(action)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n    }\n    if (typeof action.type === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage9(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n    }\n    if (typeof action.type !== 'string') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage10(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage11(9) : 'Reducers may not dispatch actions.');\n    }\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n    const listeners = currentListeners = nextListeners;\n    listeners.forEach(listener => {\n      listener();\n    });\n    return action;\n  }\n\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param nextReducer The reducer for the store to use instead.\n   */\n  function replaceReducer(nextReducer: Reducer<S, A>): void {\n    if (typeof nextReducer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage12(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n    }\n    currentReducer = ((nextReducer as unknown) as Reducer<S, A, PreloadedState>);\n\n    // This action has a similar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n    dispatch(({\n      type: ActionTypes.REPLACE\n    } as A));\n  }\n\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n  function observable() {\n    const outerSubscribe = subscribe;\n    return {\n      /**\n       * The minimal observable subscription method.\n       * @param observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe(observer: unknown) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage13(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n        }\n        function observeState() {\n          const observerAsObserver = (observer as Observer<S>);\n          if (observerAsObserver.next) {\n            observerAsObserver.next(getState());\n          }\n        }\n        observeState();\n        const unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe\n        };\n      },\n      [$$observable]() {\n        return this;\n      }\n    };\n  }\n\n  // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n  dispatch(({\n    type: ActionTypes.INIT\n  } as A));\n  const store = (({\n    dispatch: (dispatch as Dispatch<A>),\n    subscribe,\n    getState,\n    replaceReducer,\n    [$$observable]: observable\n  } as unknown) as Store<S, A, StateExt> & Ext);\n  return store;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n  return createStore(reducer, (preloadedState as any), enhancer);\n}","import { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Action } from './types/actions';\nimport { ActionFromReducersMapObject, PreloadedStateShapeFromReducersMapObject, Reducer, StateFromReducersMapObject } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport warning from './utils/warning';\nimport { kindOf } from './utils/kindOf';\nfunction getUnexpectedStateShapeWarningMessage(inputState: object, reducers: {\n  [key: string]: Reducer<any, any, any>;\n}, action: Action, unexpectedKeyCache: {\n  [key: string]: true;\n}) {\n  const reducerKeys = Object.keys(reducers);\n  const argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n  if (!isPlainObject(inputState)) {\n    return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following ` + `keys: \"${reducerKeys.join('\", \"')}\"`;\n  }\n  const unexpectedKeys = Object.keys(inputState).filter(key => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n  unexpectedKeys.forEach(key => {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n  if (unexpectedKeys.length > 0) {\n    return `Unexpected ${unexpectedKeys.length > 1 ? 'keys' : 'key'} ` + `\"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. ` + `Expected to find one of the known reducer keys instead: ` + `\"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n  }\n}\nfunction assertReducerShape(reducers: {\n  [key: string]: Reducer<any, any, any>;\n}) {\n  Object.keys(reducers).forEach(key => {\n    const reducer = reducers[key];\n    const initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n    if (typeof initialState === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n    }\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. ` + `Don't try to handle '${ActionTypes.INIT}' or other actions in \"redux/*\" ` + `namespace. They are considered private. Instead, you must return the ` + `current state for any unknown actions, unless it is undefined, ` + `in which case you must return the initial state, regardless of the ` + `action type. The initial state may not be undefined, but can be null.`);\n    }\n  });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @template S Combined state object type.\n *\n * @param reducers An object whose values correspond to different reducer\n *   functions that need to be combined into one. One handy way to obtain it\n *   is to use `import * as reducers` syntax. The reducers may never\n *   return undefined for any action. Instead, they should return their\n *   initial state if the state passed to them was undefined, and the current\n *   state for any unrecognized action.\n *\n * @returns A reducer function that invokes every reducer inside the passed\n *   object, and builds a state object with the same shape.\n */\nexport default function combineReducers<M>(reducers: M): M[keyof M] extends Reducer<any, any, any> | undefined ? Reducer<StateFromReducersMapObject<M>, ActionFromReducersMapObject<M>, Partial<PreloadedStateShapeFromReducersMapObject<M>>> : never;\nexport default function combineReducers(reducers: {\n  [key: string]: Reducer<any, any, any>;\n}) {\n  const reducerKeys = Object.keys(reducers);\n  const finalReducers: {\n    [key: string]: Reducer<any, any, any>;\n  } = {};\n  for (let i = 0; i < reducerKeys.length; i++) {\n    const key = reducerKeys[i];\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(`No reducer provided for key \"${key}\"`);\n      }\n    }\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n  const finalReducerKeys = Object.keys(finalReducers);\n\n  // This is used to make sure we don't warn about the same\n  // keys multiple times.\n  let unexpectedKeyCache: {\n    [key: string]: true;\n  };\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n  let shapeAssertionError: unknown;\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n  return function combination(state: StateFromReducersMapObject<typeof reducers> = {}, action: Action) {\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n    let hasChanged = false;\n    const nextState: StateFromReducersMapObject<typeof reducers> = {};\n    for (let i = 0; i < finalReducerKeys.length; i++) {\n      const key = finalReducerKeys[i];\n      const reducer = finalReducers[key];\n      const previousStateForKey = state[key];\n      const nextStateForKey = reducer(previousStateForKey, action);\n      if (typeof nextStateForKey === 'undefined') {\n        const actionType = action && action.type;\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : '(unknown type)'}, the slice reducer for key \"${key}\" returned undefined. ` + `To ignore an action, you must explicitly return the previous state. ` + `If you want this reducer to hold no value, you can return null instead of undefined.`);\n      }\n      nextState[key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Dispatch } from './types/store';\nimport { ActionCreator, ActionCreatorsMapObject, Action } from './types/actions';\nimport { kindOf } from './utils/kindOf';\nfunction bindActionCreator<A extends Action>(actionCreator: ActionCreator<A>, dispatch: Dispatch<A>) {\n  return function (this: any, ...args: any[]) {\n    return dispatch(actionCreator.apply(this, args));\n  };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use `import * as`\n * syntax. You may also pass a single function.\n *\n * @param dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nexport default function bindActionCreators<A, C extends ActionCreator<A>>(actionCreator: C, dispatch: Dispatch): C;\nexport default function bindActionCreators<A extends ActionCreator<any>, B extends ActionCreator<any>>(actionCreator: A, dispatch: Dispatch): B;\nexport default function bindActionCreators<A, M extends ActionCreatorsMapObject<A>>(actionCreators: M, dispatch: Dispatch): M;\nexport default function bindActionCreators<M extends ActionCreatorsMapObject, N extends ActionCreatorsMapObject>(actionCreators: M, dispatch: Dispatch): N;\nexport default function bindActionCreators(actionCreators: ActionCreator<any> | ActionCreatorsMapObject, dispatch: Dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. ` + `Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n  }\n  const boundActionCreators: ActionCreatorsMapObject = {};\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key];\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n  return boundActionCreators;\n}","type Func<T extends any[], R> = (...a: T) => R;\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for the\n * resulting composite function.\n *\n * @param funcs The functions to compose.\n * @returns A function obtained by composing the argument functions from right\n *   to left. For example, `compose(f, g, h)` is identical to doing\n *   `(...args) => f(g(h(...args)))`.\n */\nexport default function compose(): <R>(a: R) => R;\nexport default function compose<F extends Function>(f: F): F;\n\n/* two functions */\nexport default function compose<A, T extends any[], R>(f1: (a: A) => R, f2: Func<T, A>): Func<T, R>;\n\n/* three functions */\nexport default function compose<A, B, T extends any[], R>(f1: (b: B) => R, f2: (a: A) => B, f3: Func<T, A>): Func<T, R>;\n\n/* four functions */\nexport default function compose<A, B, C, T extends any[], R>(f1: (c: C) => R, f2: (b: B) => C, f3: (a: A) => B, f4: Func<T, A>): Func<T, R>;\n\n/* rest */\nexport default function compose<R>(f1: (a: any) => R, ...funcs: Function[]): (...args: any[]) => R;\nexport default function compose<R>(...funcs: Function[]): (...args: any[]) => R;\nexport default function compose(...funcs: Function[]) {\n  if (funcs.length === 0) {\n    // infer the argument type so it is usable in inference down the line\n    return <T,>(arg: T) => arg;\n  }\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n  return funcs.reduce((a, b) => (...args: any) => a(b(...args)));\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport compose from './compose';\nimport { Middleware, MiddlewareAPI } from './types/middleware';\nimport { StoreEnhancer, Dispatch } from './types/store';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param middlewares The middleware chain to be applied.\n * @returns A store enhancer applying the middleware.\n *\n * @template Ext Dispatch signature added by a middleware.\n * @template S The type of the state supported by a middleware.\n */\nexport default function applyMiddleware(): StoreEnhancer;\nexport default function applyMiddleware<Ext1, S>(middleware1: Middleware<Ext1, S, any>): StoreEnhancer<{\n  dispatch: Ext1;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2 & Ext3;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2 & Ext3 & Ext4;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, Ext5, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>, middleware5: Middleware<Ext5, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5;\n}>;\nexport default function applyMiddleware<Ext, S = any>(...middlewares: Middleware<any, S, any>[]): StoreEnhancer<{\n  dispatch: Ext;\n}>;\nexport default function applyMiddleware(...middlewares: Middleware[]): StoreEnhancer<any> {\n  return createStore => (reducer, preloadedState) => {\n    const store = createStore(reducer, preloadedState);\n    let dispatch: Dispatch = () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n    };\n    const middlewareAPI: MiddlewareAPI = {\n      getState: store.getState,\n      dispatch: (action, ...args) => dispatch(action, ...args)\n    };\n    const chain = middlewares.map(middleware => middleware(middlewareAPI));\n    dispatch = compose<typeof dispatch>(...chain)(store.dispatch);\n    return {\n      ...store,\n      dispatch\n    };\n  };\n}","import { Action } from '../types/actions';\nimport isPlainObject from './isPlainObject';\nexport default function isAction(action: unknown): action is Action<string> {\n  return isPlainObject(action) && 'type' in action && typeof (action as Record<'type', unknown>).type === 'string';\n}"],"mappings":"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","names":["formatProdErrorMessage","code","$$observable","symbol_observable_default","randomString","ActionTypes","actionTypes_default","isPlainObject","obj","proto","createStore","reducer","preloadedState","enhancer","formatProdErrorMessage","currentReducer","currentState","currentListeners","nextListeners","listenerIdCounter","isDispatching","ensureCanMutateNextListeners","listener","key","getState","subscribe","isSubscribed","listenerId","dispatch","action","isPlainObject","replaceReducer","nextReducer","actionTypes_default","observable","outerSubscribe","observer","observeState","observerAsObserver","symbol_observable_default","legacy_createStore","assertReducerShape","reducers","key","reducer","actionTypes_default","formatProdErrorMessage","combineReducers","reducerKeys","finalReducers","i","finalReducerKeys","unexpectedKeyCache","shapeAssertionError","e","state","action","hasChanged","nextState","previousStateForKey","nextStateForKey","actionType","bindActionCreator","actionCreator","dispatch","args","bindActionCreators","actionCreators","formatProdErrorMessage","boundActionCreators","key","compose","funcs","arg","a","b","args","applyMiddleware","middlewares","createStore","reducer","preloadedState","store","dispatch","formatProdErrorMessage","middlewareAPI","action","args","chain","middleware","compose","isAction","action","isPlainObject"]}
Index: node_modules/redux/dist/redux.d.ts
===================================================================
--- node_modules/redux/dist/redux.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/dist/redux.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,588 @@
+/**
+ * An *action* is a plain object that represents an intention to change the
+ * state. Actions are the only way to get data into the store. Any data,
+ * whether from UI events, network callbacks, or other sources such as
+ * WebSockets needs to eventually be dispatched as actions.
+ *
+ * Actions must have a `type` field that indicates the type of action being
+ * performed. Types can be defined as constants and imported from another
+ * module. These must be strings, as strings are serializable.
+ *
+ * Other than `type`, the structure of an action object is really up to you.
+ * If you're interested, check out Flux Standard Action for recommendations on
+ * how actions should be constructed.
+ *
+ * @template T the type of the action's `type` tag.
+ */
+type Action<T extends string = string> = {
+    type: T;
+};
+/**
+ * An Action type which accepts any other properties.
+ * This is mainly for the use of the `Reducer` type.
+ * This is not part of `Action` itself to prevent types that extend `Action` from
+ * having an index signature.
+ */
+interface UnknownAction extends Action {
+    [extraProps: string]: unknown;
+}
+/**
+ * An Action type which accepts any other properties.
+ * This is mainly for the use of the `Reducer` type.
+ * This is not part of `Action` itself to prevent types that extend `Action` from
+ * having an index signature.
+ * @deprecated use Action or UnknownAction instead
+ */
+interface AnyAction extends Action {
+    [extraProps: string]: any;
+}
+/**
+ * An *action creator* is, quite simply, a function that creates an action. Do
+ * not confuse the two terms—again, an action is a payload of information, and
+ * an action creator is a factory that creates an action.
+ *
+ * Calling an action creator only produces an action, but does not dispatch
+ * it. You need to call the store's `dispatch` function to actually cause the
+ * mutation. Sometimes we say *bound action creators* to mean functions that
+ * call an action creator and immediately dispatch its result to a specific
+ * store instance.
+ *
+ * If an action creator needs to read the current state, perform an API call,
+ * or cause a side effect, like a routing transition, it should return an
+ * async action instead of an action.
+ *
+ * @template A Returned action type.
+ */
+interface ActionCreator<A, P extends any[] = any[]> {
+    (...args: P): A;
+}
+/**
+ * Object whose values are action creator functions.
+ */
+interface ActionCreatorsMapObject<A = any, P extends any[] = any[]> {
+    [key: string]: ActionCreator<A, P>;
+}
+
+/**
+ * A *reducer* is a function that accepts
+ * an accumulation and a value and returns a new accumulation. They are used
+ * to reduce a collection of values down to a single value
+ *
+ * Reducers are not unique to Redux—they are a fundamental concept in
+ * functional programming.  Even most non-functional languages, like
+ * JavaScript, have a built-in API for reducing. In JavaScript, it's
+ * `Array.prototype.reduce()`.
+ *
+ * In Redux, the accumulated value is the state object, and the values being
+ * accumulated are actions. Reducers calculate a new state given the previous
+ * state and an action. They must be *pure functions*—functions that return
+ * the exact same output for given inputs. They should also be free of
+ * side-effects. This is what enables exciting features like hot reloading and
+ * time travel.
+ *
+ * Reducers are the most important concept in Redux.
+ *
+ * *Do not put API calls into reducers.*
+ *
+ * @template S The type of state consumed and produced by this reducer.
+ * @template A The type of actions the reducer can potentially respond to.
+ * @template PreloadedState The type of state consumed by this reducer the first time it's called.
+ */
+type Reducer<S = any, A extends Action = UnknownAction, PreloadedState = S> = (state: S | PreloadedState | undefined, action: A) => S;
+/**
+ * Object whose values correspond to different reducer functions.
+ *
+ * @template S The combined state of the reducers.
+ * @template A The type of actions the reducers can potentially respond to.
+ * @template PreloadedState The combined preloaded state of the reducers.
+ */
+type ReducersMapObject<S = any, A extends Action = UnknownAction, PreloadedState = S> = keyof PreloadedState extends keyof S ? {
+    [K in keyof S]: Reducer<S[K], A, K extends keyof PreloadedState ? PreloadedState[K] : never>;
+} : never;
+/**
+ * Infer a combined state shape from a `ReducersMapObject`.
+ *
+ * @template M Object map of reducers as provided to `combineReducers(map: M)`.
+ */
+type StateFromReducersMapObject<M> = M[keyof M] extends Reducer<any, any, any> | undefined ? {
+    [P in keyof M]: M[P] extends Reducer<infer S, any, any> ? S : never;
+} : never;
+/**
+ * Infer reducer union type from a `ReducersMapObject`.
+ *
+ * @template M Object map of reducers as provided to `combineReducers(map: M)`.
+ */
+type ReducerFromReducersMapObject<M> = M[keyof M] extends Reducer<any, any, any> | undefined ? M[keyof M] : never;
+/**
+ * Infer action type from a reducer function.
+ *
+ * @template R Type of reducer.
+ */
+type ActionFromReducer<R> = R extends Reducer<any, infer A, any> ? A : never;
+/**
+ * Infer action union type from a `ReducersMapObject`.
+ *
+ * @template M Object map of reducers as provided to `combineReducers(map: M)`.
+ */
+type ActionFromReducersMapObject<M> = ActionFromReducer<ReducerFromReducersMapObject<M>>;
+/**
+ * Infer a combined preloaded state shape from a `ReducersMapObject`.
+ *
+ * @template M Object map of reducers as provided to `combineReducers(map: M)`.
+ */
+type PreloadedStateShapeFromReducersMapObject<M> = M[keyof M] extends Reducer<any, any, any> | undefined ? {
+    [P in keyof M]: M[P] extends (inputState: infer InputState, action: UnknownAction) => any ? InputState : never;
+} : never;
+
+/**
+ * A *dispatching function* (or simply *dispatch function*) is a function that
+ * accepts an action or an async action; it then may or may not dispatch one
+ * or more actions to the store.
+ *
+ * We must distinguish between dispatching functions in general and the base
+ * `dispatch` function provided by the store instance without any middleware.
+ *
+ * The base dispatch function *always* synchronously sends an action to the
+ * store's reducer, along with the previous state returned by the store, to
+ * calculate a new state. It expects actions to be plain objects ready to be
+ * consumed by the reducer.
+ *
+ * Middleware wraps the base dispatch function. It allows the dispatch
+ * function to handle async actions in addition to actions. Middleware may
+ * transform, delay, ignore, or otherwise interpret actions or async actions
+ * before passing them to the next middleware.
+ *
+ * @template A The type of things (actions or otherwise) which may be
+ *   dispatched.
+ */
+interface Dispatch<A extends Action = UnknownAction> {
+    <T extends A>(action: T, ...extraArgs: any[]): T;
+}
+/**
+ * Function to remove listener added by `Store.subscribe()`.
+ */
+interface Unsubscribe {
+    (): void;
+}
+type ListenerCallback = () => void;
+declare global {
+    interface SymbolConstructor {
+        readonly observable: symbol;
+    }
+}
+/**
+ * A minimal observable of state changes.
+ * For more information, see the observable proposal:
+ * https://github.com/tc39/proposal-observable
+ */
+type Observable<T> = {
+    /**
+     * The minimal observable subscription method.
+     * @param {Object} observer Any object that can be used as an observer.
+     * The observer object should have a `next` method.
+     * @returns {subscription} An object with an `unsubscribe` method that can
+     * be used to unsubscribe the observable from the store, and prevent further
+     * emission of values from the observable.
+     */
+    subscribe: (observer: Observer<T>) => {
+        unsubscribe: Unsubscribe;
+    };
+    [Symbol.observable](): Observable<T>;
+};
+/**
+ * An Observer is used to receive data from an Observable, and is supplied as
+ * an argument to subscribe.
+ */
+type Observer<T> = {
+    next?(value: T): void;
+};
+/**
+ * A store is an object that holds the application's state tree.
+ * There should only be a single store in a Redux app, as the composition
+ * happens on the reducer level.
+ *
+ * @template S The type of state held by this store.
+ * @template A the type of actions which may be dispatched by this store.
+ * @template StateExt any extension to state from store enhancers
+ */
+interface Store<S = any, A extends Action = UnknownAction, StateExt extends unknown = unknown> {
+    /**
+     * Dispatches an action. It is the only way to trigger a state change.
+     *
+     * The `reducer` function, used to create the store, will be called with the
+     * current state tree and the given `action`. Its return value will be
+     * considered the **next** state of the tree, and the change listeners will
+     * be notified.
+     *
+     * The base implementation only supports plain object actions. If you want
+     * to dispatch a Promise, an Observable, a thunk, or something else, you
+     * need to wrap your store creating function into the corresponding
+     * middleware. For example, see the documentation for the `redux-thunk`
+     * package. Even the middleware will eventually dispatch plain object
+     * actions using this method.
+     *
+     * @param action A plain object representing “what changed”. It is a good
+     *   idea to keep actions serializable so you can record and replay user
+     *   sessions, or use the time travelling `redux-devtools`. An action must
+     *   have a `type` property which may not be `undefined`. It is a good idea
+     *   to use string constants for action types.
+     *
+     * @returns For convenience, the same action object you dispatched.
+     *
+     * Note that, if you use a custom middleware, it may wrap `dispatch()` to
+     * return something else (for example, a Promise you can await).
+     */
+    dispatch: Dispatch<A>;
+    /**
+     * Reads the state tree managed by the store.
+     *
+     * @returns The current state tree of your application.
+     */
+    getState(): S & StateExt;
+    /**
+     * Adds a change listener. It will be called any time an action is
+     * dispatched, and some part of the state tree may potentially have changed.
+     * You may then call `getState()` to read the current state tree inside the
+     * callback.
+     *
+     * You may call `dispatch()` from a change listener, with the following
+     * caveats:
+     *
+     * 1. The subscriptions are snapshotted just before every `dispatch()` call.
+     * If you subscribe or unsubscribe while the listeners are being invoked,
+     * this will not have any effect on the `dispatch()` that is currently in
+     * progress. However, the next `dispatch()` call, whether nested or not,
+     * will use a more recent snapshot of the subscription list.
+     *
+     * 2. The listener should not expect to see all states changes, as the state
+     * might have been updated multiple times during a nested `dispatch()` before
+     * the listener is called. It is, however, guaranteed that all subscribers
+     * registered before the `dispatch()` started will be called with the latest
+     * state by the time it exits.
+     *
+     * @param listener A callback to be invoked on every dispatch.
+     * @returns A function to remove this change listener.
+     */
+    subscribe(listener: ListenerCallback): Unsubscribe;
+    /**
+     * Replaces the reducer currently used by the store to calculate the state.
+     *
+     * You might need this if your app implements code splitting and you want to
+     * load some of the reducers dynamically. You might also need this if you
+     * implement a hot reloading mechanism for Redux.
+     *
+     * @param nextReducer The reducer for the store to use instead.
+     */
+    replaceReducer(nextReducer: Reducer<S, A>): void;
+    /**
+     * Interoperability point for observable/reactive libraries.
+     * @returns {observable} A minimal observable of state changes.
+     * For more information, see the observable proposal:
+     * https://github.com/tc39/proposal-observable
+     */
+    [Symbol.observable](): Observable<S & StateExt>;
+}
+type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;
+/**
+ * A store creator is a function that creates a Redux store. Like with
+ * dispatching function, we must distinguish the base store creator,
+ * `createStore(reducer, preloadedState)` exported from the Redux package, from
+ * store creators that are returned from the store enhancers.
+ *
+ * @template S The type of state to be held by the store.
+ * @template A The type of actions which may be dispatched.
+ * @template PreloadedState The initial state that is passed into the reducer.
+ * @template Ext Store extension that is mixed in to the Store type.
+ * @template StateExt State extension that is mixed into the state type.
+ */
+interface StoreCreator {
+    <S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;
+    <S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;
+}
+/**
+ * A store enhancer is a higher-order function that composes a store creator
+ * to return a new, enhanced store creator. This is similar to middleware in
+ * that it allows you to alter the store interface in a composable way.
+ *
+ * Store enhancers are much the same concept as higher-order components in
+ * React, which are also occasionally called “component enhancers”.
+ *
+ * Because a store is not an instance, but rather a plain-object collection of
+ * functions, copies can be easily created and modified without mutating the
+ * original store. There is an example in `compose` documentation
+ * demonstrating that.
+ *
+ * Most likely you'll never write a store enhancer, but you may use the one
+ * provided by the developer tools. It is what makes time travel possible
+ * without the app being aware it is happening. Amusingly, the Redux
+ * middleware implementation is itself a store enhancer.
+ *
+ * @template Ext Store extension that is mixed into the Store type.
+ * @template StateExt State extension that is mixed into the state type.
+ */
+type StoreEnhancer<Ext extends {} = {}, StateExt extends {} = {}> = <NextExt extends {}, NextStateExt extends {}>(next: StoreEnhancerStoreCreator<NextExt, NextStateExt>) => StoreEnhancerStoreCreator<NextExt & Ext, NextStateExt & StateExt>;
+type StoreEnhancerStoreCreator<Ext extends {} = {}, StateExt extends {} = {}> = <S, A extends Action, PreloadedState>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined) => Store<S, A, StateExt> & Ext;
+
+/**
+ * @deprecated
+ *
+ * **We recommend using the `configureStore` method
+ * of the `@reduxjs/toolkit` package**, which replaces `createStore`.
+ *
+ * Redux Toolkit is our recommended approach for writing Redux logic today,
+ * including store setup, reducers, data fetching, and more.
+ *
+ * **For more details, please read this Redux docs page:**
+ * **https://redux.js.org/introduction/why-rtk-is-redux-today**
+ *
+ * `configureStore` from Redux Toolkit is an improved version of `createStore` that
+ * simplifies setup and helps avoid common bugs.
+ *
+ * You should not be using the `redux` core package by itself today, except for learning purposes.
+ * The `createStore` method from the core `redux` package will not be removed, but we encourage
+ * all users to migrate to using Redux Toolkit for all Redux code.
+ *
+ * If you want to use `createStore` without this visual deprecation warning, use
+ * the `legacy_createStore` import instead:
+ *
+ * `import { legacy_createStore as createStore} from 'redux'`
+ *
+ */
+declare function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;
+/**
+ * @deprecated
+ *
+ * **We recommend using the `configureStore` method
+ * of the `@reduxjs/toolkit` package**, which replaces `createStore`.
+ *
+ * Redux Toolkit is our recommended approach for writing Redux logic today,
+ * including store setup, reducers, data fetching, and more.
+ *
+ * **For more details, please read this Redux docs page:**
+ * **https://redux.js.org/introduction/why-rtk-is-redux-today**
+ *
+ * `configureStore` from Redux Toolkit is an improved version of `createStore` that
+ * simplifies setup and helps avoid common bugs.
+ *
+ * You should not be using the `redux` core package by itself today, except for learning purposes.
+ * The `createStore` method from the core `redux` package will not be removed, but we encourage
+ * all users to migrate to using Redux Toolkit for all Redux code.
+ *
+ * If you want to use `createStore` without this visual deprecation warning, use
+ * the `legacy_createStore` import instead:
+ *
+ * `import { legacy_createStore as createStore} from 'redux'`
+ *
+ */
+declare function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;
+/**
+ * Creates a Redux store that holds the state tree.
+ *
+ * **We recommend using `configureStore` from the
+ * `@reduxjs/toolkit` package**, which replaces `createStore`:
+ * **https://redux.js.org/introduction/why-rtk-is-redux-today**
+ *
+ * The only way to change the data in the store is to call `dispatch()` on it.
+ *
+ * There should only be a single store in your app. To specify how different
+ * parts of the state tree respond to actions, you may combine several reducers
+ * into a single reducer function by using `combineReducers`.
+ *
+ * @param {Function} reducer A function that returns the next state tree, given
+ * the current state tree and the action to handle.
+ *
+ * @param {any} [preloadedState] The initial state. You may optionally specify it
+ * to hydrate the state from the server in universal apps, or to restore a
+ * previously serialized user session.
+ * If you use `combineReducers` to produce the root reducer function, this must be
+ * an object with the same shape as `combineReducers` keys.
+ *
+ * @param {Function} [enhancer] The store enhancer. You may optionally specify it
+ * to enhance the store with third-party capabilities such as middleware,
+ * time travel, persistence, etc. The only store enhancer that ships with Redux
+ * is `applyMiddleware()`.
+ *
+ * @returns {Store} A Redux store that lets you read the state, dispatch actions
+ * and subscribe to changes.
+ */
+declare function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;
+/**
+ * Creates a Redux store that holds the state tree.
+ *
+ * **We recommend using `configureStore` from the
+ * `@reduxjs/toolkit` package**, which replaces `createStore`:
+ * **https://redux.js.org/introduction/why-rtk-is-redux-today**
+ *
+ * The only way to change the data in the store is to call `dispatch()` on it.
+ *
+ * There should only be a single store in your app. To specify how different
+ * parts of the state tree respond to actions, you may combine several reducers
+ * into a single reducer function by using `combineReducers`.
+ *
+ * @param {Function} reducer A function that returns the next state tree, given
+ * the current state tree and the action to handle.
+ *
+ * @param {any} [preloadedState] The initial state. You may optionally specify it
+ * to hydrate the state from the server in universal apps, or to restore a
+ * previously serialized user session.
+ * If you use `combineReducers` to produce the root reducer function, this must be
+ * an object with the same shape as `combineReducers` keys.
+ *
+ * @param {Function} [enhancer] The store enhancer. You may optionally specify it
+ * to enhance the store with third-party capabilities such as middleware,
+ * time travel, persistence, etc. The only store enhancer that ships with Redux
+ * is `applyMiddleware()`.
+ *
+ * @returns {Store} A Redux store that lets you read the state, dispatch actions
+ * and subscribe to changes.
+ */
+declare function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;
+
+/**
+ * Turns an object whose values are different reducer functions, into a single
+ * reducer function. It will call every child reducer, and gather their results
+ * into a single state object, whose keys correspond to the keys of the passed
+ * reducer functions.
+ *
+ * @template S Combined state object type.
+ *
+ * @param reducers An object whose values correspond to different reducer
+ *   functions that need to be combined into one. One handy way to obtain it
+ *   is to use `import * as reducers` syntax. The reducers may never
+ *   return undefined for any action. Instead, they should return their
+ *   initial state if the state passed to them was undefined, and the current
+ *   state for any unrecognized action.
+ *
+ * @returns A reducer function that invokes every reducer inside the passed
+ *   object, and builds a state object with the same shape.
+ */
+declare function combineReducers<M>(reducers: M): M[keyof M] extends Reducer<any, any, any> | undefined ? Reducer<StateFromReducersMapObject<M>, ActionFromReducersMapObject<M>, Partial<PreloadedStateShapeFromReducersMapObject<M>>> : never;
+
+/**
+ * Turns an object whose values are action creators, into an object with the
+ * same keys, but with every function wrapped into a `dispatch` call so they
+ * may be invoked directly. This is just a convenience method, as you can call
+ * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.
+ *
+ * For convenience, you can also pass an action creator as the first argument,
+ * and get a dispatch wrapped function in return.
+ *
+ * @param actionCreators An object whose values are action
+ * creator functions. One handy way to obtain it is to use `import * as`
+ * syntax. You may also pass a single function.
+ *
+ * @param dispatch The `dispatch` function available on your Redux
+ * store.
+ *
+ * @returns The object mimicking the original object, but with
+ * every action creator wrapped into the `dispatch` call. If you passed a
+ * function as `actionCreators`, the return value will also be a single
+ * function.
+ */
+declare function bindActionCreators<A, C extends ActionCreator<A>>(actionCreator: C, dispatch: Dispatch): C;
+declare function bindActionCreators<A extends ActionCreator<any>, B extends ActionCreator<any>>(actionCreator: A, dispatch: Dispatch): B;
+declare function bindActionCreators<A, M extends ActionCreatorsMapObject<A>>(actionCreators: M, dispatch: Dispatch): M;
+declare function bindActionCreators<M extends ActionCreatorsMapObject, N extends ActionCreatorsMapObject>(actionCreators: M, dispatch: Dispatch): N;
+
+interface MiddlewareAPI<D extends Dispatch = Dispatch, S = any> {
+    dispatch: D;
+    getState(): S;
+}
+/**
+ * A middleware is a higher-order function that composes a dispatch function
+ * to return a new dispatch function. It often turns async actions into
+ * actions.
+ *
+ * Middleware is composable using function composition. It is useful for
+ * logging actions, performing side effects like routing, or turning an
+ * asynchronous API call into a series of synchronous actions.
+ *
+ * @template DispatchExt Extra Dispatch signature added by this middleware.
+ * @template S The type of the state supported by this middleware.
+ * @template D The type of Dispatch of the store where this middleware is
+ *   installed.
+ */
+interface Middleware<_DispatchExt = {}, // TODO: see if this can be used in type definition somehow (can't be removed, as is used to get final dispatch type)
+S = any, D extends Dispatch = Dispatch> {
+    (api: MiddlewareAPI<D, S>): (next: (action: unknown) => unknown) => (action: unknown) => unknown;
+}
+
+/**
+ * Creates a store enhancer that applies middleware to the dispatch method
+ * of the Redux store. This is handy for a variety of tasks, such as expressing
+ * asynchronous actions in a concise manner, or logging every action payload.
+ *
+ * See `redux-thunk` package as an example of the Redux middleware.
+ *
+ * Because middleware is potentially asynchronous, this should be the first
+ * store enhancer in the composition chain.
+ *
+ * Note that each middleware will be given the `dispatch` and `getState` functions
+ * as named arguments.
+ *
+ * @param middlewares The middleware chain to be applied.
+ * @returns A store enhancer applying the middleware.
+ *
+ * @template Ext Dispatch signature added by a middleware.
+ * @template S The type of the state supported by a middleware.
+ */
+declare function applyMiddleware(): StoreEnhancer;
+declare function applyMiddleware<Ext1, S>(middleware1: Middleware<Ext1, S, any>): StoreEnhancer<{
+    dispatch: Ext1;
+}>;
+declare function applyMiddleware<Ext1, Ext2, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>): StoreEnhancer<{
+    dispatch: Ext1 & Ext2;
+}>;
+declare function applyMiddleware<Ext1, Ext2, Ext3, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>): StoreEnhancer<{
+    dispatch: Ext1 & Ext2 & Ext3;
+}>;
+declare function applyMiddleware<Ext1, Ext2, Ext3, Ext4, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>): StoreEnhancer<{
+    dispatch: Ext1 & Ext2 & Ext3 & Ext4;
+}>;
+declare function applyMiddleware<Ext1, Ext2, Ext3, Ext4, Ext5, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>, middleware5: Middleware<Ext5, S, any>): StoreEnhancer<{
+    dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5;
+}>;
+declare function applyMiddleware<Ext, S = any>(...middlewares: Middleware<any, S, any>[]): StoreEnhancer<{
+    dispatch: Ext;
+}>;
+
+type Func<T extends any[], R> = (...a: T) => R;
+/**
+ * Composes single-argument functions from right to left. The rightmost
+ * function can take multiple arguments as it provides the signature for the
+ * resulting composite function.
+ *
+ * @param funcs The functions to compose.
+ * @returns A function obtained by composing the argument functions from right
+ *   to left. For example, `compose(f, g, h)` is identical to doing
+ *   `(...args) => f(g(h(...args)))`.
+ */
+declare function compose(): <R>(a: R) => R;
+declare function compose<F extends Function>(f: F): F;
+declare function compose<A, T extends any[], R>(f1: (a: A) => R, f2: Func<T, A>): Func<T, R>;
+declare function compose<A, B, T extends any[], R>(f1: (b: B) => R, f2: (a: A) => B, f3: Func<T, A>): Func<T, R>;
+declare function compose<A, B, C, T extends any[], R>(f1: (c: C) => R, f2: (b: B) => C, f3: (a: A) => B, f4: Func<T, A>): Func<T, R>;
+declare function compose<R>(f1: (a: any) => R, ...funcs: Function[]): (...args: any[]) => R;
+declare function compose<R>(...funcs: Function[]): (...args: any[]) => R;
+
+declare function isAction(action: unknown): action is Action<string>;
+
+/**
+ * @param obj The object to inspect.
+ * @returns True if the argument appears to be a plain object.
+ */
+declare function isPlainObject(obj: any): obj is object;
+
+/**
+ * These are private action types reserved by Redux.
+ * For any unknown actions, you must return the current state.
+ * If the current state is undefined, you must return the initial state.
+ * Do not reference these action types directly in your code.
+ */
+declare const ActionTypes: {
+    INIT: string;
+    REPLACE: string;
+    PROBE_UNKNOWN_ACTION: () => string;
+};
+
+export { Action, ActionCreator, ActionCreatorsMapObject, ActionFromReducer, ActionFromReducersMapObject, AnyAction, Dispatch, Middleware, MiddlewareAPI, Observable, Observer, PreloadedStateShapeFromReducersMapObject, Reducer, ReducerFromReducersMapObject, ReducersMapObject, StateFromReducersMapObject, Store, StoreCreator, StoreEnhancer, StoreEnhancerStoreCreator, UnknownAction, Unsubscribe, ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, isAction, isPlainObject, legacy_createStore };
Index: node_modules/redux/dist/redux.legacy-esm.js
===================================================================
--- node_modules/redux/dist/redux.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/dist/redux.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,397 @@
+// src/utils/formatProdErrorMessage.ts
+function formatProdErrorMessage(code) {
+  return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;
+}
+
+// src/utils/symbol-observable.ts
+var $$observable = /* @__PURE__ */ (() => typeof Symbol === "function" && Symbol.observable || "@@observable")();
+var symbol_observable_default = $$observable;
+
+// src/utils/actionTypes.ts
+var randomString = () => Math.random().toString(36).substring(7).split("").join(".");
+var ActionTypes = {
+  INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,
+  REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,
+  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
+};
+var actionTypes_default = ActionTypes;
+
+// src/utils/isPlainObject.ts
+function isPlainObject(obj) {
+  if (typeof obj !== "object" || obj === null)
+    return false;
+  let proto = obj;
+  while (Object.getPrototypeOf(proto) !== null) {
+    proto = Object.getPrototypeOf(proto);
+  }
+  return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;
+}
+
+// src/utils/kindOf.ts
+function miniKindOf(val) {
+  if (val === void 0)
+    return "undefined";
+  if (val === null)
+    return "null";
+  const type = typeof val;
+  switch (type) {
+    case "boolean":
+    case "string":
+    case "number":
+    case "symbol":
+    case "function": {
+      return type;
+    }
+  }
+  if (Array.isArray(val))
+    return "array";
+  if (isDate(val))
+    return "date";
+  if (isError(val))
+    return "error";
+  const constructorName = ctorName(val);
+  switch (constructorName) {
+    case "Symbol":
+    case "Promise":
+    case "WeakMap":
+    case "WeakSet":
+    case "Map":
+    case "Set":
+      return constructorName;
+  }
+  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\s/g, "");
+}
+function ctorName(val) {
+  return typeof val.constructor === "function" ? val.constructor.name : null;
+}
+function isError(val) {
+  return val instanceof Error || typeof val.message === "string" && val.constructor && typeof val.constructor.stackTraceLimit === "number";
+}
+function isDate(val) {
+  if (val instanceof Date)
+    return true;
+  return typeof val.toDateString === "function" && typeof val.getDate === "function" && typeof val.setDate === "function";
+}
+function kindOf(val) {
+  let typeOfVal = typeof val;
+  if (process.env.NODE_ENV !== "production") {
+    typeOfVal = miniKindOf(val);
+  }
+  return typeOfVal;
+}
+
+// src/createStore.ts
+function createStore(reducer, preloadedState, enhancer) {
+  if (typeof reducer !== "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);
+  }
+  if (typeof preloadedState === "function" && typeof enhancer === "function" || typeof enhancer === "function" && typeof arguments[3] === "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(0) : "It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.");
+  }
+  if (typeof preloadedState === "function" && typeof enhancer === "undefined") {
+    enhancer = preloadedState;
+    preloadedState = void 0;
+  }
+  if (typeof enhancer !== "undefined") {
+    if (typeof enhancer !== "function") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);
+    }
+    return enhancer(createStore)(reducer, preloadedState);
+  }
+  let currentReducer = reducer;
+  let currentState = preloadedState;
+  let currentListeners = /* @__PURE__ */ new Map();
+  let nextListeners = currentListeners;
+  let listenerIdCounter = 0;
+  let isDispatching = false;
+  function ensureCanMutateNextListeners() {
+    if (nextListeners === currentListeners) {
+      nextListeners = /* @__PURE__ */ new Map();
+      currentListeners.forEach((listener, key) => {
+        nextListeners.set(key, listener);
+      });
+    }
+  }
+  function getState() {
+    if (isDispatching) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(3) : "You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");
+    }
+    return currentState;
+  }
+  function subscribe(listener) {
+    if (typeof listener !== "function") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);
+    }
+    if (isDispatching) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(5) : "You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.");
+    }
+    let isSubscribed = true;
+    ensureCanMutateNextListeners();
+    const listenerId = listenerIdCounter++;
+    nextListeners.set(listenerId, listener);
+    return function unsubscribe() {
+      if (!isSubscribed) {
+        return;
+      }
+      if (isDispatching) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(6) : "You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.");
+      }
+      isSubscribed = false;
+      ensureCanMutateNextListeners();
+      nextListeners.delete(listenerId);
+      currentListeners = null;
+    };
+  }
+  function dispatch(action) {
+    if (!isPlainObject(action)) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);
+    }
+    if (typeof action.type === "undefined") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(8) : 'Actions may not have an undefined "type" property. You may have misspelled an action type string constant.');
+    }
+    if (typeof action.type !== "string") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(17) : `Action "type" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);
+    }
+    if (isDispatching) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(9) : "Reducers may not dispatch actions.");
+    }
+    try {
+      isDispatching = true;
+      currentState = currentReducer(currentState, action);
+    } finally {
+      isDispatching = false;
+    }
+    const listeners = currentListeners = nextListeners;
+    listeners.forEach((listener) => {
+      listener();
+    });
+    return action;
+  }
+  function replaceReducer(nextReducer) {
+    if (typeof nextReducer !== "function") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);
+    }
+    currentReducer = nextReducer;
+    dispatch({
+      type: actionTypes_default.REPLACE
+    });
+  }
+  function observable() {
+    const outerSubscribe = subscribe;
+    return {
+      /**
+       * The minimal observable subscription method.
+       * @param observer Any object that can be used as an observer.
+       * The observer object should have a `next` method.
+       * @returns An object with an `unsubscribe` method that can
+       * be used to unsubscribe the observable from the store, and prevent further
+       * emission of values from the observable.
+       */
+      subscribe(observer) {
+        if (typeof observer !== "object" || observer === null) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);
+        }
+        function observeState() {
+          const observerAsObserver = observer;
+          if (observerAsObserver.next) {
+            observerAsObserver.next(getState());
+          }
+        }
+        observeState();
+        const unsubscribe = outerSubscribe(observeState);
+        return {
+          unsubscribe
+        };
+      },
+      [symbol_observable_default]() {
+        return this;
+      }
+    };
+  }
+  dispatch({
+    type: actionTypes_default.INIT
+  });
+  const store = {
+    dispatch,
+    subscribe,
+    getState,
+    replaceReducer,
+    [symbol_observable_default]: observable
+  };
+  return store;
+}
+function legacy_createStore(reducer, preloadedState, enhancer) {
+  return createStore(reducer, preloadedState, enhancer);
+}
+
+// src/utils/warning.ts
+function warning(message) {
+  if (typeof console !== "undefined" && typeof console.error === "function") {
+    console.error(message);
+  }
+  try {
+    throw new Error(message);
+  } catch (e) {
+  }
+}
+
+// src/combineReducers.ts
+function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {
+  const reducerKeys = Object.keys(reducers);
+  const argumentName = action && action.type === actionTypes_default.INIT ? "preloadedState argument passed to createStore" : "previous state received by the reducer";
+  if (reducerKeys.length === 0) {
+    return "Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.";
+  }
+  if (!isPlainObject(inputState)) {
+    return `The ${argumentName} has unexpected type of "${kindOf(inputState)}". Expected argument to be an object with the following keys: "${reducerKeys.join('", "')}"`;
+  }
+  const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);
+  unexpectedKeys.forEach((key) => {
+    unexpectedKeyCache[key] = true;
+  });
+  if (action && action.type === actionTypes_default.REPLACE)
+    return;
+  if (unexpectedKeys.length > 0) {
+    return `Unexpected ${unexpectedKeys.length > 1 ? "keys" : "key"} "${unexpectedKeys.join('", "')}" found in ${argumentName}. Expected to find one of the known reducer keys instead: "${reducerKeys.join('", "')}". Unexpected keys will be ignored.`;
+  }
+}
+function assertReducerShape(reducers) {
+  Object.keys(reducers).forEach((key) => {
+    const reducer = reducers[key];
+    const initialState = reducer(void 0, {
+      type: actionTypes_default.INIT
+    });
+    if (typeof initialState === "undefined") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(12) : `The slice reducer for key "${key}" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);
+    }
+    if (typeof reducer(void 0, {
+      type: actionTypes_default.PROBE_UNKNOWN_ACTION()
+    }) === "undefined") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(13) : `The slice reducer for key "${key}" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);
+    }
+  });
+}
+function combineReducers(reducers) {
+  const reducerKeys = Object.keys(reducers);
+  const finalReducers = {};
+  for (let i = 0; i < reducerKeys.length; i++) {
+    const key = reducerKeys[i];
+    if (process.env.NODE_ENV !== "production") {
+      if (typeof reducers[key] === "undefined") {
+        warning(`No reducer provided for key "${key}"`);
+      }
+    }
+    if (typeof reducers[key] === "function") {
+      finalReducers[key] = reducers[key];
+    }
+  }
+  const finalReducerKeys = Object.keys(finalReducers);
+  let unexpectedKeyCache;
+  if (process.env.NODE_ENV !== "production") {
+    unexpectedKeyCache = {};
+  }
+  let shapeAssertionError;
+  try {
+    assertReducerShape(finalReducers);
+  } catch (e) {
+    shapeAssertionError = e;
+  }
+  return function combination(state = {}, action) {
+    if (shapeAssertionError) {
+      throw shapeAssertionError;
+    }
+    if (process.env.NODE_ENV !== "production") {
+      const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);
+      if (warningMessage) {
+        warning(warningMessage);
+      }
+    }
+    let hasChanged = false;
+    const nextState = {};
+    for (let i = 0; i < finalReducerKeys.length; i++) {
+      const key = finalReducerKeys[i];
+      const reducer = finalReducers[key];
+      const previousStateForKey = state[key];
+      const nextStateForKey = reducer(previousStateForKey, action);
+      if (typeof nextStateForKey === "undefined") {
+        const actionType = action && action.type;
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `"${String(actionType)}"` : "(unknown type)"}, the slice reducer for key "${key}" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);
+      }
+      nextState[key] = nextStateForKey;
+      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
+    }
+    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;
+    return hasChanged ? nextState : state;
+  };
+}
+
+// src/bindActionCreators.ts
+function bindActionCreator(actionCreator, dispatch) {
+  return function(...args) {
+    return dispatch(actionCreator.apply(this, args));
+  };
+}
+function bindActionCreators(actionCreators, dispatch) {
+  if (typeof actionCreators === "function") {
+    return bindActionCreator(actionCreators, dispatch);
+  }
+  if (typeof actionCreators !== "object" || actionCreators === null) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?`);
+  }
+  const boundActionCreators = {};
+  for (const key in actionCreators) {
+    const actionCreator = actionCreators[key];
+    if (typeof actionCreator === "function") {
+      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);
+    }
+  }
+  return boundActionCreators;
+}
+
+// src/compose.ts
+function compose(...funcs) {
+  if (funcs.length === 0) {
+    return (arg) => arg;
+  }
+  if (funcs.length === 1) {
+    return funcs[0];
+  }
+  return funcs.reduce((a, b) => (...args) => a(b(...args)));
+}
+
+// src/applyMiddleware.ts
+function applyMiddleware(...middlewares) {
+  return (createStore2) => (reducer, preloadedState) => {
+    const store = createStore2(reducer, preloadedState);
+    let dispatch = () => {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(15) : "Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.");
+    };
+    const middlewareAPI = {
+      getState: store.getState,
+      dispatch: (action, ...args) => dispatch(action, ...args)
+    };
+    const chain = middlewares.map((middleware) => middleware(middlewareAPI));
+    dispatch = compose(...chain)(store.dispatch);
+    return {
+      ...store,
+      dispatch
+    };
+  };
+}
+
+// src/utils/isAction.ts
+function isAction(action) {
+  return isPlainObject(action) && "type" in action && typeof action.type === "string";
+}
+export {
+  actionTypes_default as __DO_NOT_USE__ActionTypes,
+  applyMiddleware,
+  bindActionCreators,
+  combineReducers,
+  compose,
+  createStore,
+  isAction,
+  isPlainObject,
+  legacy_createStore
+};
+//# sourceMappingURL=redux.mjs.map
Index: node_modules/redux/dist/redux.mjs
===================================================================
--- node_modules/redux/dist/redux.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/dist/redux.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,397 @@
+// src/utils/formatProdErrorMessage.ts
+function formatProdErrorMessage(code) {
+  return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;
+}
+
+// src/utils/symbol-observable.ts
+var $$observable = /* @__PURE__ */ (() => typeof Symbol === "function" && Symbol.observable || "@@observable")();
+var symbol_observable_default = $$observable;
+
+// src/utils/actionTypes.ts
+var randomString = () => Math.random().toString(36).substring(7).split("").join(".");
+var ActionTypes = {
+  INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,
+  REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,
+  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
+};
+var actionTypes_default = ActionTypes;
+
+// src/utils/isPlainObject.ts
+function isPlainObject(obj) {
+  if (typeof obj !== "object" || obj === null)
+    return false;
+  let proto = obj;
+  while (Object.getPrototypeOf(proto) !== null) {
+    proto = Object.getPrototypeOf(proto);
+  }
+  return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;
+}
+
+// src/utils/kindOf.ts
+function miniKindOf(val) {
+  if (val === void 0)
+    return "undefined";
+  if (val === null)
+    return "null";
+  const type = typeof val;
+  switch (type) {
+    case "boolean":
+    case "string":
+    case "number":
+    case "symbol":
+    case "function": {
+      return type;
+    }
+  }
+  if (Array.isArray(val))
+    return "array";
+  if (isDate(val))
+    return "date";
+  if (isError(val))
+    return "error";
+  const constructorName = ctorName(val);
+  switch (constructorName) {
+    case "Symbol":
+    case "Promise":
+    case "WeakMap":
+    case "WeakSet":
+    case "Map":
+    case "Set":
+      return constructorName;
+  }
+  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\s/g, "");
+}
+function ctorName(val) {
+  return typeof val.constructor === "function" ? val.constructor.name : null;
+}
+function isError(val) {
+  return val instanceof Error || typeof val.message === "string" && val.constructor && typeof val.constructor.stackTraceLimit === "number";
+}
+function isDate(val) {
+  if (val instanceof Date)
+    return true;
+  return typeof val.toDateString === "function" && typeof val.getDate === "function" && typeof val.setDate === "function";
+}
+function kindOf(val) {
+  let typeOfVal = typeof val;
+  if (process.env.NODE_ENV !== "production") {
+    typeOfVal = miniKindOf(val);
+  }
+  return typeOfVal;
+}
+
+// src/createStore.ts
+function createStore(reducer, preloadedState, enhancer) {
+  if (typeof reducer !== "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);
+  }
+  if (typeof preloadedState === "function" && typeof enhancer === "function" || typeof enhancer === "function" && typeof arguments[3] === "function") {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(0) : "It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.");
+  }
+  if (typeof preloadedState === "function" && typeof enhancer === "undefined") {
+    enhancer = preloadedState;
+    preloadedState = void 0;
+  }
+  if (typeof enhancer !== "undefined") {
+    if (typeof enhancer !== "function") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);
+    }
+    return enhancer(createStore)(reducer, preloadedState);
+  }
+  let currentReducer = reducer;
+  let currentState = preloadedState;
+  let currentListeners = /* @__PURE__ */ new Map();
+  let nextListeners = currentListeners;
+  let listenerIdCounter = 0;
+  let isDispatching = false;
+  function ensureCanMutateNextListeners() {
+    if (nextListeners === currentListeners) {
+      nextListeners = /* @__PURE__ */ new Map();
+      currentListeners.forEach((listener, key) => {
+        nextListeners.set(key, listener);
+      });
+    }
+  }
+  function getState() {
+    if (isDispatching) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(3) : "You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");
+    }
+    return currentState;
+  }
+  function subscribe(listener) {
+    if (typeof listener !== "function") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);
+    }
+    if (isDispatching) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(5) : "You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.");
+    }
+    let isSubscribed = true;
+    ensureCanMutateNextListeners();
+    const listenerId = listenerIdCounter++;
+    nextListeners.set(listenerId, listener);
+    return function unsubscribe() {
+      if (!isSubscribed) {
+        return;
+      }
+      if (isDispatching) {
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(6) : "You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.");
+      }
+      isSubscribed = false;
+      ensureCanMutateNextListeners();
+      nextListeners.delete(listenerId);
+      currentListeners = null;
+    };
+  }
+  function dispatch(action) {
+    if (!isPlainObject(action)) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);
+    }
+    if (typeof action.type === "undefined") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(8) : 'Actions may not have an undefined "type" property. You may have misspelled an action type string constant.');
+    }
+    if (typeof action.type !== "string") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(17) : `Action "type" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);
+    }
+    if (isDispatching) {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(9) : "Reducers may not dispatch actions.");
+    }
+    try {
+      isDispatching = true;
+      currentState = currentReducer(currentState, action);
+    } finally {
+      isDispatching = false;
+    }
+    const listeners = currentListeners = nextListeners;
+    listeners.forEach((listener) => {
+      listener();
+    });
+    return action;
+  }
+  function replaceReducer(nextReducer) {
+    if (typeof nextReducer !== "function") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);
+    }
+    currentReducer = nextReducer;
+    dispatch({
+      type: actionTypes_default.REPLACE
+    });
+  }
+  function observable() {
+    const outerSubscribe = subscribe;
+    return {
+      /**
+       * The minimal observable subscription method.
+       * @param observer Any object that can be used as an observer.
+       * The observer object should have a `next` method.
+       * @returns An object with an `unsubscribe` method that can
+       * be used to unsubscribe the observable from the store, and prevent further
+       * emission of values from the observable.
+       */
+      subscribe(observer) {
+        if (typeof observer !== "object" || observer === null) {
+          throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);
+        }
+        function observeState() {
+          const observerAsObserver = observer;
+          if (observerAsObserver.next) {
+            observerAsObserver.next(getState());
+          }
+        }
+        observeState();
+        const unsubscribe = outerSubscribe(observeState);
+        return {
+          unsubscribe
+        };
+      },
+      [symbol_observable_default]() {
+        return this;
+      }
+    };
+  }
+  dispatch({
+    type: actionTypes_default.INIT
+  });
+  const store = {
+    dispatch,
+    subscribe,
+    getState,
+    replaceReducer,
+    [symbol_observable_default]: observable
+  };
+  return store;
+}
+function legacy_createStore(reducer, preloadedState, enhancer) {
+  return createStore(reducer, preloadedState, enhancer);
+}
+
+// src/utils/warning.ts
+function warning(message) {
+  if (typeof console !== "undefined" && typeof console.error === "function") {
+    console.error(message);
+  }
+  try {
+    throw new Error(message);
+  } catch (e) {
+  }
+}
+
+// src/combineReducers.ts
+function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {
+  const reducerKeys = Object.keys(reducers);
+  const argumentName = action && action.type === actionTypes_default.INIT ? "preloadedState argument passed to createStore" : "previous state received by the reducer";
+  if (reducerKeys.length === 0) {
+    return "Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.";
+  }
+  if (!isPlainObject(inputState)) {
+    return `The ${argumentName} has unexpected type of "${kindOf(inputState)}". Expected argument to be an object with the following keys: "${reducerKeys.join('", "')}"`;
+  }
+  const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);
+  unexpectedKeys.forEach((key) => {
+    unexpectedKeyCache[key] = true;
+  });
+  if (action && action.type === actionTypes_default.REPLACE)
+    return;
+  if (unexpectedKeys.length > 0) {
+    return `Unexpected ${unexpectedKeys.length > 1 ? "keys" : "key"} "${unexpectedKeys.join('", "')}" found in ${argumentName}. Expected to find one of the known reducer keys instead: "${reducerKeys.join('", "')}". Unexpected keys will be ignored.`;
+  }
+}
+function assertReducerShape(reducers) {
+  Object.keys(reducers).forEach((key) => {
+    const reducer = reducers[key];
+    const initialState = reducer(void 0, {
+      type: actionTypes_default.INIT
+    });
+    if (typeof initialState === "undefined") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(12) : `The slice reducer for key "${key}" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);
+    }
+    if (typeof reducer(void 0, {
+      type: actionTypes_default.PROBE_UNKNOWN_ACTION()
+    }) === "undefined") {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(13) : `The slice reducer for key "${key}" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);
+    }
+  });
+}
+function combineReducers(reducers) {
+  const reducerKeys = Object.keys(reducers);
+  const finalReducers = {};
+  for (let i = 0; i < reducerKeys.length; i++) {
+    const key = reducerKeys[i];
+    if (process.env.NODE_ENV !== "production") {
+      if (typeof reducers[key] === "undefined") {
+        warning(`No reducer provided for key "${key}"`);
+      }
+    }
+    if (typeof reducers[key] === "function") {
+      finalReducers[key] = reducers[key];
+    }
+  }
+  const finalReducerKeys = Object.keys(finalReducers);
+  let unexpectedKeyCache;
+  if (process.env.NODE_ENV !== "production") {
+    unexpectedKeyCache = {};
+  }
+  let shapeAssertionError;
+  try {
+    assertReducerShape(finalReducers);
+  } catch (e) {
+    shapeAssertionError = e;
+  }
+  return function combination(state = {}, action) {
+    if (shapeAssertionError) {
+      throw shapeAssertionError;
+    }
+    if (process.env.NODE_ENV !== "production") {
+      const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);
+      if (warningMessage) {
+        warning(warningMessage);
+      }
+    }
+    let hasChanged = false;
+    const nextState = {};
+    for (let i = 0; i < finalReducerKeys.length; i++) {
+      const key = finalReducerKeys[i];
+      const reducer = finalReducers[key];
+      const previousStateForKey = state[key];
+      const nextStateForKey = reducer(previousStateForKey, action);
+      if (typeof nextStateForKey === "undefined") {
+        const actionType = action && action.type;
+        throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `"${String(actionType)}"` : "(unknown type)"}, the slice reducer for key "${key}" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);
+      }
+      nextState[key] = nextStateForKey;
+      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
+    }
+    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;
+    return hasChanged ? nextState : state;
+  };
+}
+
+// src/bindActionCreators.ts
+function bindActionCreator(actionCreator, dispatch) {
+  return function(...args) {
+    return dispatch(actionCreator.apply(this, args));
+  };
+}
+function bindActionCreators(actionCreators, dispatch) {
+  if (typeof actionCreators === "function") {
+    return bindActionCreator(actionCreators, dispatch);
+  }
+  if (typeof actionCreators !== "object" || actionCreators === null) {
+    throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?`);
+  }
+  const boundActionCreators = {};
+  for (const key in actionCreators) {
+    const actionCreator = actionCreators[key];
+    if (typeof actionCreator === "function") {
+      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);
+    }
+  }
+  return boundActionCreators;
+}
+
+// src/compose.ts
+function compose(...funcs) {
+  if (funcs.length === 0) {
+    return (arg) => arg;
+  }
+  if (funcs.length === 1) {
+    return funcs[0];
+  }
+  return funcs.reduce((a, b) => (...args) => a(b(...args)));
+}
+
+// src/applyMiddleware.ts
+function applyMiddleware(...middlewares) {
+  return (createStore2) => (reducer, preloadedState) => {
+    const store = createStore2(reducer, preloadedState);
+    let dispatch = () => {
+      throw new Error(process.env.NODE_ENV === "production" ? formatProdErrorMessage(15) : "Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.");
+    };
+    const middlewareAPI = {
+      getState: store.getState,
+      dispatch: (action, ...args) => dispatch(action, ...args)
+    };
+    const chain = middlewares.map((middleware) => middleware(middlewareAPI));
+    dispatch = compose(...chain)(store.dispatch);
+    return {
+      ...store,
+      dispatch
+    };
+  };
+}
+
+// src/utils/isAction.ts
+function isAction(action) {
+  return isPlainObject(action) && "type" in action && typeof action.type === "string";
+}
+export {
+  actionTypes_default as __DO_NOT_USE__ActionTypes,
+  applyMiddleware,
+  bindActionCreators,
+  combineReducers,
+  compose,
+  createStore,
+  isAction,
+  isPlainObject,
+  legacy_createStore
+};
+//# sourceMappingURL=redux.mjs.map
Index: node_modules/redux/dist/redux.mjs.map
===================================================================
--- node_modules/redux/dist/redux.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/dist/redux.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/utils/formatProdErrorMessage.ts","../src/utils/symbol-observable.ts","../src/utils/actionTypes.ts","../src/utils/isPlainObject.ts","../src/utils/kindOf.ts","../src/createStore.ts","../src/utils/warning.ts","../src/combineReducers.ts","../src/bindActionCreators.ts","../src/compose.ts","../src/applyMiddleware.ts","../src/utils/isAction.ts"],"sourcesContent":["/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n  return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}","declare global {\n  interface SymbolConstructor {\n    readonly observable: symbol;\n  }\n}\nconst $$observable = /* #__PURE__ */(() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\nexport default $$observable;","/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nconst randomString = () => Math.random().toString(36).substring(7).split('').join('.');\nconst ActionTypes = {\n  INIT: `@@redux/INIT${/* #__PURE__ */randomString()}`,\n  REPLACE: `@@redux/REPLACE${/* #__PURE__ */randomString()}`,\n  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nexport default ActionTypes;","/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: any): obj is object {\n  if (typeof obj !== 'object' || obj === null) return false;\n  let proto = obj;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n  return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}","// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nexport function miniKindOf(val: any): string {\n  if (val === void 0) return 'undefined';\n  if (val === null) return 'null';\n  const type = typeof val;\n  switch (type) {\n    case 'boolean':\n    case 'string':\n    case 'number':\n    case 'symbol':\n    case 'function':\n      {\n        return type;\n      }\n  }\n  if (Array.isArray(val)) return 'array';\n  if (isDate(val)) return 'date';\n  if (isError(val)) return 'error';\n  const constructorName = ctorName(val);\n  switch (constructorName) {\n    case 'Symbol':\n    case 'Promise':\n    case 'WeakMap':\n    case 'WeakSet':\n    case 'Map':\n    case 'Set':\n      return constructorName;\n  }\n\n  // other\n  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\nfunction ctorName(val: any): string | null {\n  return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\nfunction isError(val: any) {\n  return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\nfunction isDate(val: any) {\n  if (val instanceof Date) return true;\n  return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\nexport function kindOf(val: any) {\n  let typeOfVal: string = typeof val;\n  if (process.env.NODE_ENV !== 'production') {\n    typeOfVal = miniKindOf(val);\n  }\n  return typeOfVal;\n}","import { formatProdErrorMessage as _formatProdErrorMessage13 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage12 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage11 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage10 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage9 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage8 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport $$observable from './utils/symbol-observable';\nimport { Store, StoreEnhancer, Dispatch, Observer, ListenerCallback, UnknownIfNonSpecific } from './types/store';\nimport { Action } from './types/actions';\nimport { Reducer } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport { kindOf } from './utils/kindOf';\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n  if (typeof reducer !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n  }\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n  }\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = (preloadedState as StoreEnhancer<Ext, StateExt>);\n    preloadedState = undefined;\n  }\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n    }\n    return enhancer(createStore)(reducer, (preloadedState as PreloadedState | undefined));\n  }\n  let currentReducer = reducer;\n  let currentState: S | PreloadedState | undefined = (preloadedState as PreloadedState | undefined);\n  let currentListeners: Map<number, ListenerCallback> | null = new Map();\n  let nextListeners = currentListeners;\n  let listenerIdCounter = 0;\n  let isDispatching = false;\n\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = new Map();\n      currentListeners.forEach((listener, key) => {\n        nextListeners.set(key, listener);\n      });\n    }\n  }\n\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns The current state tree of your application.\n   */\n  function getState(): S {\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n    return (currentState as S);\n  }\n\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param listener A callback to be invoked on every dispatch.\n   * @returns A function to remove this change listener.\n   */\n  function subscribe(listener: () => void) {\n    if (typeof listener !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n    }\n    let isSubscribed = true;\n    ensureCanMutateNextListeners();\n    const listenerId = listenerIdCounter++;\n    nextListeners.set(listenerId, listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n      if (isDispatching) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n      }\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      nextListeners.delete(listenerId);\n      currentListeners = null;\n    };\n  }\n\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n  function dispatch(action: A) {\n    if (!isPlainObject(action)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n    }\n    if (typeof action.type === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage9(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n    }\n    if (typeof action.type !== 'string') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage10(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage11(9) : 'Reducers may not dispatch actions.');\n    }\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n    const listeners = currentListeners = nextListeners;\n    listeners.forEach(listener => {\n      listener();\n    });\n    return action;\n  }\n\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param nextReducer The reducer for the store to use instead.\n   */\n  function replaceReducer(nextReducer: Reducer<S, A>): void {\n    if (typeof nextReducer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage12(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n    }\n    currentReducer = ((nextReducer as unknown) as Reducer<S, A, PreloadedState>);\n\n    // This action has a similar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n    dispatch(({\n      type: ActionTypes.REPLACE\n    } as A));\n  }\n\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n  function observable() {\n    const outerSubscribe = subscribe;\n    return {\n      /**\n       * The minimal observable subscription method.\n       * @param observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe(observer: unknown) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage13(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n        }\n        function observeState() {\n          const observerAsObserver = (observer as Observer<S>);\n          if (observerAsObserver.next) {\n            observerAsObserver.next(getState());\n          }\n        }\n        observeState();\n        const unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe\n        };\n      },\n      [$$observable]() {\n        return this;\n      }\n    };\n  }\n\n  // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n  dispatch(({\n    type: ActionTypes.INIT\n  } as A));\n  const store = (({\n    dispatch: (dispatch as Dispatch<A>),\n    subscribe,\n    getState,\n    replaceReducer,\n    [$$observable]: observable\n  } as unknown) as Store<S, A, StateExt> & Ext);\n  return store;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n  return createStore(reducer, (preloadedState as any), enhancer);\n}","/**\n * Prints a warning in the console if it exists.\n *\n * @param message The warning message.\n */\nexport default function warning(message: string): void {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n}","import { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Action } from './types/actions';\nimport { ActionFromReducersMapObject, PreloadedStateShapeFromReducersMapObject, Reducer, StateFromReducersMapObject } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport warning from './utils/warning';\nimport { kindOf } from './utils/kindOf';\nfunction getUnexpectedStateShapeWarningMessage(inputState: object, reducers: {\n  [key: string]: Reducer<any, any, any>;\n}, action: Action, unexpectedKeyCache: {\n  [key: string]: true;\n}) {\n  const reducerKeys = Object.keys(reducers);\n  const argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n  if (!isPlainObject(inputState)) {\n    return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following ` + `keys: \"${reducerKeys.join('\", \"')}\"`;\n  }\n  const unexpectedKeys = Object.keys(inputState).filter(key => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n  unexpectedKeys.forEach(key => {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n  if (unexpectedKeys.length > 0) {\n    return `Unexpected ${unexpectedKeys.length > 1 ? 'keys' : 'key'} ` + `\"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. ` + `Expected to find one of the known reducer keys instead: ` + `\"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n  }\n}\nfunction assertReducerShape(reducers: {\n  [key: string]: Reducer<any, any, any>;\n}) {\n  Object.keys(reducers).forEach(key => {\n    const reducer = reducers[key];\n    const initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n    if (typeof initialState === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n    }\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. ` + `Don't try to handle '${ActionTypes.INIT}' or other actions in \"redux/*\" ` + `namespace. They are considered private. Instead, you must return the ` + `current state for any unknown actions, unless it is undefined, ` + `in which case you must return the initial state, regardless of the ` + `action type. The initial state may not be undefined, but can be null.`);\n    }\n  });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @template S Combined state object type.\n *\n * @param reducers An object whose values correspond to different reducer\n *   functions that need to be combined into one. One handy way to obtain it\n *   is to use `import * as reducers` syntax. The reducers may never\n *   return undefined for any action. Instead, they should return their\n *   initial state if the state passed to them was undefined, and the current\n *   state for any unrecognized action.\n *\n * @returns A reducer function that invokes every reducer inside the passed\n *   object, and builds a state object with the same shape.\n */\nexport default function combineReducers<M>(reducers: M): M[keyof M] extends Reducer<any, any, any> | undefined ? Reducer<StateFromReducersMapObject<M>, ActionFromReducersMapObject<M>, Partial<PreloadedStateShapeFromReducersMapObject<M>>> : never;\nexport default function combineReducers(reducers: {\n  [key: string]: Reducer<any, any, any>;\n}) {\n  const reducerKeys = Object.keys(reducers);\n  const finalReducers: {\n    [key: string]: Reducer<any, any, any>;\n  } = {};\n  for (let i = 0; i < reducerKeys.length; i++) {\n    const key = reducerKeys[i];\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(`No reducer provided for key \"${key}\"`);\n      }\n    }\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n  const finalReducerKeys = Object.keys(finalReducers);\n\n  // This is used to make sure we don't warn about the same\n  // keys multiple times.\n  let unexpectedKeyCache: {\n    [key: string]: true;\n  };\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n  let shapeAssertionError: unknown;\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n  return function combination(state: StateFromReducersMapObject<typeof reducers> = {}, action: Action) {\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n    let hasChanged = false;\n    const nextState: StateFromReducersMapObject<typeof reducers> = {};\n    for (let i = 0; i < finalReducerKeys.length; i++) {\n      const key = finalReducerKeys[i];\n      const reducer = finalReducers[key];\n      const previousStateForKey = state[key];\n      const nextStateForKey = reducer(previousStateForKey, action);\n      if (typeof nextStateForKey === 'undefined') {\n        const actionType = action && action.type;\n        throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : '(unknown type)'}, the slice reducer for key \"${key}\" returned undefined. ` + `To ignore an action, you must explicitly return the previous state. ` + `If you want this reducer to hold no value, you can return null instead of undefined.`);\n      }\n      nextState[key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Dispatch } from './types/store';\nimport { ActionCreator, ActionCreatorsMapObject, Action } from './types/actions';\nimport { kindOf } from './utils/kindOf';\nfunction bindActionCreator<A extends Action>(actionCreator: ActionCreator<A>, dispatch: Dispatch<A>) {\n  return function (this: any, ...args: any[]) {\n    return dispatch(actionCreator.apply(this, args));\n  };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use `import * as`\n * syntax. You may also pass a single function.\n *\n * @param dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nexport default function bindActionCreators<A, C extends ActionCreator<A>>(actionCreator: C, dispatch: Dispatch): C;\nexport default function bindActionCreators<A extends ActionCreator<any>, B extends ActionCreator<any>>(actionCreator: A, dispatch: Dispatch): B;\nexport default function bindActionCreators<A, M extends ActionCreatorsMapObject<A>>(actionCreators: M, dispatch: Dispatch): M;\nexport default function bindActionCreators<M extends ActionCreatorsMapObject, N extends ActionCreatorsMapObject>(actionCreators: M, dispatch: Dispatch): N;\nexport default function bindActionCreators(actionCreators: ActionCreator<any> | ActionCreatorsMapObject, dispatch: Dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. ` + `Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n  }\n  const boundActionCreators: ActionCreatorsMapObject = {};\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key];\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n  return boundActionCreators;\n}","type Func<T extends any[], R> = (...a: T) => R;\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for the\n * resulting composite function.\n *\n * @param funcs The functions to compose.\n * @returns A function obtained by composing the argument functions from right\n *   to left. For example, `compose(f, g, h)` is identical to doing\n *   `(...args) => f(g(h(...args)))`.\n */\nexport default function compose(): <R>(a: R) => R;\nexport default function compose<F extends Function>(f: F): F;\n\n/* two functions */\nexport default function compose<A, T extends any[], R>(f1: (a: A) => R, f2: Func<T, A>): Func<T, R>;\n\n/* three functions */\nexport default function compose<A, B, T extends any[], R>(f1: (b: B) => R, f2: (a: A) => B, f3: Func<T, A>): Func<T, R>;\n\n/* four functions */\nexport default function compose<A, B, C, T extends any[], R>(f1: (c: C) => R, f2: (b: B) => C, f3: (a: A) => B, f4: Func<T, A>): Func<T, R>;\n\n/* rest */\nexport default function compose<R>(f1: (a: any) => R, ...funcs: Function[]): (...args: any[]) => R;\nexport default function compose<R>(...funcs: Function[]): (...args: any[]) => R;\nexport default function compose(...funcs: Function[]) {\n  if (funcs.length === 0) {\n    // infer the argument type so it is usable in inference down the line\n    return <T,>(arg: T) => arg;\n  }\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n  return funcs.reduce((a, b) => (...args: any) => a(b(...args)));\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport compose from './compose';\nimport { Middleware, MiddlewareAPI } from './types/middleware';\nimport { StoreEnhancer, Dispatch } from './types/store';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param middlewares The middleware chain to be applied.\n * @returns A store enhancer applying the middleware.\n *\n * @template Ext Dispatch signature added by a middleware.\n * @template S The type of the state supported by a middleware.\n */\nexport default function applyMiddleware(): StoreEnhancer;\nexport default function applyMiddleware<Ext1, S>(middleware1: Middleware<Ext1, S, any>): StoreEnhancer<{\n  dispatch: Ext1;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2 & Ext3;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2 & Ext3 & Ext4;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, Ext5, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>, middleware5: Middleware<Ext5, S, any>): StoreEnhancer<{\n  dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5;\n}>;\nexport default function applyMiddleware<Ext, S = any>(...middlewares: Middleware<any, S, any>[]): StoreEnhancer<{\n  dispatch: Ext;\n}>;\nexport default function applyMiddleware(...middlewares: Middleware[]): StoreEnhancer<any> {\n  return createStore => (reducer, preloadedState) => {\n    const store = createStore(reducer, preloadedState);\n    let dispatch: Dispatch = () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n    };\n    const middlewareAPI: MiddlewareAPI = {\n      getState: store.getState,\n      dispatch: (action, ...args) => dispatch(action, ...args)\n    };\n    const chain = middlewares.map(middleware => middleware(middlewareAPI));\n    dispatch = compose<typeof dispatch>(...chain)(store.dispatch);\n    return {\n      ...store,\n      dispatch\n    };\n  };\n}","import { Action } from '../types/actions';\nimport isPlainObject from './isPlainObject';\nexport default function isAction(action: unknown): action is Action<string> {\n  return isPlainObject(action) && 'type' in action && typeof (action as Record<'type', unknown>).type === 'string';\n}"],"mappings":"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","names":["createStore"]}
Index: node_modules/redux/package.json
===================================================================
--- node_modules/redux/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,87 @@
+{
+  "name": "redux",
+  "version": "5.0.1",
+  "description": "Predictable state container for JavaScript apps",
+  "license": "MIT",
+  "homepage": "http://redux.js.org",
+  "repository": "github:reduxjs/redux",
+  "bugs": "https://github.com/reduxjs/redux/issues",
+  "keywords": [
+    "redux",
+    "reducer",
+    "state",
+    "predictable",
+    "functional",
+    "immutable",
+    "hot",
+    "live",
+    "replay",
+    "flux",
+    "elm"
+  ],
+  "authors": [
+    "Dan Abramov <dan.abramov@me.com> (https://github.com/gaearon)",
+    "Andrew Clark <acdlite@me.com> (https://github.com/acdlite)"
+  ],
+  "main": "dist/cjs/redux.cjs",
+  "module": "dist/redux.legacy-esm.js",
+  "types": "dist/redux.d.ts",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "types": "./dist/redux.d.ts",
+      "import": "./dist/redux.mjs",
+      "default": "./dist/cjs/redux.cjs"
+    }
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "scripts": {
+    "clean": "rimraf dist",
+    "format": "prettier --write \"{src,test}/**/*.{js,ts}\" \"**/*.md\"",
+    "format:check": "prettier --list-different \"{src,test}/**/*.{js,ts}\" \"**/*.md\"",
+    "lint": "eslint --ext js,ts src test",
+    "check-types": "tsc --noEmit && echo \"Types compiled\"",
+    "test": "vitest --run",
+    "test:types": "tsc -p test/typescript && echo \"Typetests passed\"",
+    "test:watch": "vitest",
+    "test:cov": "vitest --coverage",
+    "test:typecheck": "tsc -p test && echo \"Types passed\"",
+    "build": "tsup",
+    "prepublishOnly": "yarn clean && yarn check-types && yarn format:check && yarn lint && yarn test",
+    "prepack": "yarn build",
+    "examples:lint": "eslint --ext js,ts examples",
+    "examples:test": "cross-env CI=true babel-node examples/testAll.js",
+    "tsc": "tsc"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.19.0",
+    "@types/node": "^18.7.16",
+    "@typescript-eslint/eslint-plugin": "^6",
+    "@typescript-eslint/parser": "^6",
+    "cross-env": "^7.0.3",
+    "esbuild-extra": "^0.1.3",
+    "eslint": "^8.23.0",
+    "eslint-config-react-app": "^7.0.1",
+    "eslint-import-resolver-typescript": "^3.5.1",
+    "eslint-plugin-import": "^2.26.0",
+    "eslint-plugin-react": "^7.31.8",
+    "eslint-plugin-react-hooks": "^4.6.0",
+    "glob": "^8.0.3",
+    "netlify-plugin-cache": "^1.0.3",
+    "prettier": "^2.7.1",
+    "rimraf": "^3.0.2",
+    "rxjs": "^7.5.6",
+    "tsup": "7.0.0",
+    "typescript": "5.2",
+    "vitest": "^0.34.0"
+  },
+  "resolutions": {
+    "esbuild": "0.19.7",
+    "@typescript-eslint/eslint-plugin": "6.12.0",
+    "@typescript-eslint/parser": "6.12.0"
+  },
+  "sideEffects": false
+}
Index: node_modules/redux/src/applyMiddleware.ts
===================================================================
--- node_modules/redux/src/applyMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/applyMiddleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+import compose from './compose'
+import { Middleware, MiddlewareAPI } from './types/middleware'
+import { StoreEnhancer, Dispatch } from './types/store'
+
+/**
+ * Creates a store enhancer that applies middleware to the dispatch method
+ * of the Redux store. This is handy for a variety of tasks, such as expressing
+ * asynchronous actions in a concise manner, or logging every action payload.
+ *
+ * See `redux-thunk` package as an example of the Redux middleware.
+ *
+ * Because middleware is potentially asynchronous, this should be the first
+ * store enhancer in the composition chain.
+ *
+ * Note that each middleware will be given the `dispatch` and `getState` functions
+ * as named arguments.
+ *
+ * @param middlewares The middleware chain to be applied.
+ * @returns A store enhancer applying the middleware.
+ *
+ * @template Ext Dispatch signature added by a middleware.
+ * @template S The type of the state supported by a middleware.
+ */
+export default function applyMiddleware(): StoreEnhancer
+export default function applyMiddleware<Ext1, S>(
+  middleware1: Middleware<Ext1, S, any>
+): StoreEnhancer<{ dispatch: Ext1 }>
+export default function applyMiddleware<Ext1, Ext2, S>(
+  middleware1: Middleware<Ext1, S, any>,
+  middleware2: Middleware<Ext2, S, any>
+): StoreEnhancer<{ dispatch: Ext1 & Ext2 }>
+export default function applyMiddleware<Ext1, Ext2, Ext3, S>(
+  middleware1: Middleware<Ext1, S, any>,
+  middleware2: Middleware<Ext2, S, any>,
+  middleware3: Middleware<Ext3, S, any>
+): StoreEnhancer<{ dispatch: Ext1 & Ext2 & Ext3 }>
+export default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, S>(
+  middleware1: Middleware<Ext1, S, any>,
+  middleware2: Middleware<Ext2, S, any>,
+  middleware3: Middleware<Ext3, S, any>,
+  middleware4: Middleware<Ext4, S, any>
+): StoreEnhancer<{ dispatch: Ext1 & Ext2 & Ext3 & Ext4 }>
+export default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, Ext5, S>(
+  middleware1: Middleware<Ext1, S, any>,
+  middleware2: Middleware<Ext2, S, any>,
+  middleware3: Middleware<Ext3, S, any>,
+  middleware4: Middleware<Ext4, S, any>,
+  middleware5: Middleware<Ext5, S, any>
+): StoreEnhancer<{ dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5 }>
+export default function applyMiddleware<Ext, S = any>(
+  ...middlewares: Middleware<any, S, any>[]
+): StoreEnhancer<{ dispatch: Ext }>
+export default function applyMiddleware(
+  ...middlewares: Middleware[]
+): StoreEnhancer<any> {
+  return createStore => (reducer, preloadedState) => {
+    const store = createStore(reducer, preloadedState)
+    let dispatch: Dispatch = () => {
+      throw new Error(
+        'Dispatching while constructing your middleware is not allowed. ' +
+          'Other middleware would not be applied to this dispatch.'
+      )
+    }
+
+    const middlewareAPI: MiddlewareAPI = {
+      getState: store.getState,
+      dispatch: (action, ...args) => dispatch(action, ...args)
+    }
+    const chain = middlewares.map(middleware => middleware(middlewareAPI))
+    dispatch = compose<typeof dispatch>(...chain)(store.dispatch)
+
+    return {
+      ...store,
+      dispatch
+    }
+  }
+}
Index: node_modules/redux/src/bindActionCreators.ts
===================================================================
--- node_modules/redux/src/bindActionCreators.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/bindActionCreators.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,79 @@
+import { Dispatch } from './types/store'
+import { ActionCreator, ActionCreatorsMapObject, Action } from './types/actions'
+import { kindOf } from './utils/kindOf'
+
+function bindActionCreator<A extends Action>(
+  actionCreator: ActionCreator<A>,
+  dispatch: Dispatch<A>
+) {
+  return function (this: any, ...args: any[]) {
+    return dispatch(actionCreator.apply(this, args))
+  }
+}
+
+/**
+ * Turns an object whose values are action creators, into an object with the
+ * same keys, but with every function wrapped into a `dispatch` call so they
+ * may be invoked directly. This is just a convenience method, as you can call
+ * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.
+ *
+ * For convenience, you can also pass an action creator as the first argument,
+ * and get a dispatch wrapped function in return.
+ *
+ * @param actionCreators An object whose values are action
+ * creator functions. One handy way to obtain it is to use `import * as`
+ * syntax. You may also pass a single function.
+ *
+ * @param dispatch The `dispatch` function available on your Redux
+ * store.
+ *
+ * @returns The object mimicking the original object, but with
+ * every action creator wrapped into the `dispatch` call. If you passed a
+ * function as `actionCreators`, the return value will also be a single
+ * function.
+ */
+export default function bindActionCreators<A, C extends ActionCreator<A>>(
+  actionCreator: C,
+  dispatch: Dispatch
+): C
+
+export default function bindActionCreators<
+  A extends ActionCreator<any>,
+  B extends ActionCreator<any>
+>(actionCreator: A, dispatch: Dispatch): B
+
+export default function bindActionCreators<
+  A,
+  M extends ActionCreatorsMapObject<A>
+>(actionCreators: M, dispatch: Dispatch): M
+export default function bindActionCreators<
+  M extends ActionCreatorsMapObject,
+  N extends ActionCreatorsMapObject
+>(actionCreators: M, dispatch: Dispatch): N
+
+export default function bindActionCreators(
+  actionCreators: ActionCreator<any> | ActionCreatorsMapObject,
+  dispatch: Dispatch
+) {
+  if (typeof actionCreators === 'function') {
+    return bindActionCreator(actionCreators, dispatch)
+  }
+
+  if (typeof actionCreators !== 'object' || actionCreators === null) {
+    throw new Error(
+      `bindActionCreators expected an object or a function, but instead received: '${kindOf(
+        actionCreators
+      )}'. ` +
+        `Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?`
+    )
+  }
+
+  const boundActionCreators: ActionCreatorsMapObject = {}
+  for (const key in actionCreators) {
+    const actionCreator = actionCreators[key]
+    if (typeof actionCreator === 'function') {
+      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch)
+    }
+  }
+  return boundActionCreators
+}
Index: node_modules/redux/src/combineReducers.ts
===================================================================
--- node_modules/redux/src/combineReducers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/combineReducers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,201 @@
+import { Action } from './types/actions'
+import {
+  ActionFromReducersMapObject,
+  PreloadedStateShapeFromReducersMapObject,
+  Reducer,
+  StateFromReducersMapObject
+} from './types/reducers'
+
+import ActionTypes from './utils/actionTypes'
+import isPlainObject from './utils/isPlainObject'
+import warning from './utils/warning'
+import { kindOf } from './utils/kindOf'
+
+function getUnexpectedStateShapeWarningMessage(
+  inputState: object,
+  reducers: { [key: string]: Reducer<any, any, any> },
+  action: Action,
+  unexpectedKeyCache: { [key: string]: true }
+) {
+  const reducerKeys = Object.keys(reducers)
+  const argumentName =
+    action && action.type === ActionTypes.INIT
+      ? 'preloadedState argument passed to createStore'
+      : 'previous state received by the reducer'
+
+  if (reducerKeys.length === 0) {
+    return (
+      'Store does not have a valid reducer. Make sure the argument passed ' +
+      'to combineReducers is an object whose values are reducers.'
+    )
+  }
+
+  if (!isPlainObject(inputState)) {
+    return (
+      `The ${argumentName} has unexpected type of "${kindOf(
+        inputState
+      )}". Expected argument to be an object with the following ` +
+      `keys: "${reducerKeys.join('", "')}"`
+    )
+  }
+
+  const unexpectedKeys = Object.keys(inputState).filter(
+    key => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]
+  )
+
+  unexpectedKeys.forEach(key => {
+    unexpectedKeyCache[key] = true
+  })
+
+  if (action && action.type === ActionTypes.REPLACE) return
+
+  if (unexpectedKeys.length > 0) {
+    return (
+      `Unexpected ${unexpectedKeys.length > 1 ? 'keys' : 'key'} ` +
+      `"${unexpectedKeys.join('", "')}" found in ${argumentName}. ` +
+      `Expected to find one of the known reducer keys instead: ` +
+      `"${reducerKeys.join('", "')}". Unexpected keys will be ignored.`
+    )
+  }
+}
+
+function assertReducerShape(reducers: {
+  [key: string]: Reducer<any, any, any>
+}) {
+  Object.keys(reducers).forEach(key => {
+    const reducer = reducers[key]
+    const initialState = reducer(undefined, { type: ActionTypes.INIT })
+
+    if (typeof initialState === 'undefined') {
+      throw new Error(
+        `The slice reducer for key "${key}" returned undefined during initialization. ` +
+          `If the state passed to the reducer is undefined, you must ` +
+          `explicitly return the initial state. The initial state may ` +
+          `not be undefined. If you don't want to set a value for this reducer, ` +
+          `you can use null instead of undefined.`
+      )
+    }
+
+    if (
+      typeof reducer(undefined, {
+        type: ActionTypes.PROBE_UNKNOWN_ACTION()
+      }) === 'undefined'
+    ) {
+      throw new Error(
+        `The slice reducer for key "${key}" returned undefined when probed with a random type. ` +
+          `Don't try to handle '${ActionTypes.INIT}' or other actions in "redux/*" ` +
+          `namespace. They are considered private. Instead, you must return the ` +
+          `current state for any unknown actions, unless it is undefined, ` +
+          `in which case you must return the initial state, regardless of the ` +
+          `action type. The initial state may not be undefined, but can be null.`
+      )
+    }
+  })
+}
+
+/**
+ * Turns an object whose values are different reducer functions, into a single
+ * reducer function. It will call every child reducer, and gather their results
+ * into a single state object, whose keys correspond to the keys of the passed
+ * reducer functions.
+ *
+ * @template S Combined state object type.
+ *
+ * @param reducers An object whose values correspond to different reducer
+ *   functions that need to be combined into one. One handy way to obtain it
+ *   is to use `import * as reducers` syntax. The reducers may never
+ *   return undefined for any action. Instead, they should return their
+ *   initial state if the state passed to them was undefined, and the current
+ *   state for any unrecognized action.
+ *
+ * @returns A reducer function that invokes every reducer inside the passed
+ *   object, and builds a state object with the same shape.
+ */
+export default function combineReducers<M>(
+  reducers: M
+): M[keyof M] extends Reducer<any, any, any> | undefined
+  ? Reducer<
+      StateFromReducersMapObject<M>,
+      ActionFromReducersMapObject<M>,
+      Partial<PreloadedStateShapeFromReducersMapObject<M>>
+    >
+  : never
+export default function combineReducers(reducers: {
+  [key: string]: Reducer<any, any, any>
+}) {
+  const reducerKeys = Object.keys(reducers)
+  const finalReducers: { [key: string]: Reducer<any, any, any> } = {}
+  for (let i = 0; i < reducerKeys.length; i++) {
+    const key = reducerKeys[i]
+
+    if (process.env.NODE_ENV !== 'production') {
+      if (typeof reducers[key] === 'undefined') {
+        warning(`No reducer provided for key "${key}"`)
+      }
+    }
+
+    if (typeof reducers[key] === 'function') {
+      finalReducers[key] = reducers[key]
+    }
+  }
+  const finalReducerKeys = Object.keys(finalReducers)
+
+  // This is used to make sure we don't warn about the same
+  // keys multiple times.
+  let unexpectedKeyCache: { [key: string]: true }
+  if (process.env.NODE_ENV !== 'production') {
+    unexpectedKeyCache = {}
+  }
+
+  let shapeAssertionError: unknown
+  try {
+    assertReducerShape(finalReducers)
+  } catch (e) {
+    shapeAssertionError = e
+  }
+
+  return function combination(
+    state: StateFromReducersMapObject<typeof reducers> = {},
+    action: Action
+  ) {
+    if (shapeAssertionError) {
+      throw shapeAssertionError
+    }
+
+    if (process.env.NODE_ENV !== 'production') {
+      const warningMessage = getUnexpectedStateShapeWarningMessage(
+        state,
+        finalReducers,
+        action,
+        unexpectedKeyCache
+      )
+      if (warningMessage) {
+        warning(warningMessage)
+      }
+    }
+
+    let hasChanged = false
+    const nextState: StateFromReducersMapObject<typeof reducers> = {}
+    for (let i = 0; i < finalReducerKeys.length; i++) {
+      const key = finalReducerKeys[i]
+      const reducer = finalReducers[key]
+      const previousStateForKey = state[key]
+      const nextStateForKey = reducer(previousStateForKey, action)
+      if (typeof nextStateForKey === 'undefined') {
+        const actionType = action && action.type
+        throw new Error(
+          `When called with an action of type ${
+            actionType ? `"${String(actionType)}"` : '(unknown type)'
+          }, the slice reducer for key "${key}" returned undefined. ` +
+            `To ignore an action, you must explicitly return the previous state. ` +
+            `If you want this reducer to hold no value, you can return null instead of undefined.`
+        )
+      }
+      nextState[key] = nextStateForKey
+      hasChanged = hasChanged || nextStateForKey !== previousStateForKey
+    }
+    hasChanged =
+      hasChanged || finalReducerKeys.length !== Object.keys(state).length
+    return hasChanged ? nextState : state
+  }
+}
Index: node_modules/redux/src/compose.ts
===================================================================
--- node_modules/redux/src/compose.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/compose.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+type Func<T extends any[], R> = (...a: T) => R
+
+/**
+ * Composes single-argument functions from right to left. The rightmost
+ * function can take multiple arguments as it provides the signature for the
+ * resulting composite function.
+ *
+ * @param funcs The functions to compose.
+ * @returns A function obtained by composing the argument functions from right
+ *   to left. For example, `compose(f, g, h)` is identical to doing
+ *   `(...args) => f(g(h(...args)))`.
+ */
+export default function compose(): <R>(a: R) => R
+
+export default function compose<F extends Function>(f: F): F
+
+/* two functions */
+export default function compose<A, T extends any[], R>(
+  f1: (a: A) => R,
+  f2: Func<T, A>
+): Func<T, R>
+
+/* three functions */
+export default function compose<A, B, T extends any[], R>(
+  f1: (b: B) => R,
+  f2: (a: A) => B,
+  f3: Func<T, A>
+): Func<T, R>
+
+/* four functions */
+export default function compose<A, B, C, T extends any[], R>(
+  f1: (c: C) => R,
+  f2: (b: B) => C,
+  f3: (a: A) => B,
+  f4: Func<T, A>
+): Func<T, R>
+
+/* rest */
+export default function compose<R>(
+  f1: (a: any) => R,
+  ...funcs: Function[]
+): (...args: any[]) => R
+
+export default function compose<R>(...funcs: Function[]): (...args: any[]) => R
+
+export default function compose(...funcs: Function[]) {
+  if (funcs.length === 0) {
+    // infer the argument type so it is usable in inference down the line
+    return <T>(arg: T) => arg
+  }
+
+  if (funcs.length === 1) {
+    return funcs[0]
+  }
+
+  return funcs.reduce(
+    (a, b) =>
+      (...args: any) =>
+        a(b(...args))
+  )
+}
Index: node_modules/redux/src/createStore.ts
===================================================================
--- node_modules/redux/src/createStore.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/createStore.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,490 @@
+import $$observable from './utils/symbol-observable'
+
+import {
+  Store,
+  StoreEnhancer,
+  Dispatch,
+  Observer,
+  ListenerCallback,
+  UnknownIfNonSpecific
+} from './types/store'
+import { Action } from './types/actions'
+import { Reducer } from './types/reducers'
+import ActionTypes from './utils/actionTypes'
+import isPlainObject from './utils/isPlainObject'
+import { kindOf } from './utils/kindOf'
+
+/**
+ * @deprecated
+ *
+ * **We recommend using the `configureStore` method
+ * of the `@reduxjs/toolkit` package**, which replaces `createStore`.
+ *
+ * Redux Toolkit is our recommended approach for writing Redux logic today,
+ * including store setup, reducers, data fetching, and more.
+ *
+ * **For more details, please read this Redux docs page:**
+ * **https://redux.js.org/introduction/why-rtk-is-redux-today**
+ *
+ * `configureStore` from Redux Toolkit is an improved version of `createStore` that
+ * simplifies setup and helps avoid common bugs.
+ *
+ * You should not be using the `redux` core package by itself today, except for learning purposes.
+ * The `createStore` method from the core `redux` package will not be removed, but we encourage
+ * all users to migrate to using Redux Toolkit for all Redux code.
+ *
+ * If you want to use `createStore` without this visual deprecation warning, use
+ * the `legacy_createStore` import instead:
+ *
+ * `import { legacy_createStore as createStore} from 'redux'`
+ *
+ */
+export function createStore<
+  S,
+  A extends Action,
+  Ext extends {} = {},
+  StateExt extends {} = {}
+>(
+  reducer: Reducer<S, A>,
+  enhancer?: StoreEnhancer<Ext, StateExt>
+): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext
+/**
+ * @deprecated
+ *
+ * **We recommend using the `configureStore` method
+ * of the `@reduxjs/toolkit` package**, which replaces `createStore`.
+ *
+ * Redux Toolkit is our recommended approach for writing Redux logic today,
+ * including store setup, reducers, data fetching, and more.
+ *
+ * **For more details, please read this Redux docs page:**
+ * **https://redux.js.org/introduction/why-rtk-is-redux-today**
+ *
+ * `configureStore` from Redux Toolkit is an improved version of `createStore` that
+ * simplifies setup and helps avoid common bugs.
+ *
+ * You should not be using the `redux` core package by itself today, except for learning purposes.
+ * The `createStore` method from the core `redux` package will not be removed, but we encourage
+ * all users to migrate to using Redux Toolkit for all Redux code.
+ *
+ * If you want to use `createStore` without this visual deprecation warning, use
+ * the `legacy_createStore` import instead:
+ *
+ * `import { legacy_createStore as createStore} from 'redux'`
+ *
+ */
+export function createStore<
+  S,
+  A extends Action,
+  Ext extends {} = {},
+  StateExt extends {} = {},
+  PreloadedState = S
+>(
+  reducer: Reducer<S, A, PreloadedState>,
+  preloadedState?: PreloadedState | undefined,
+  enhancer?: StoreEnhancer<Ext, StateExt>
+): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext
+export function createStore<
+  S,
+  A extends Action,
+  Ext extends {} = {},
+  StateExt extends {} = {},
+  PreloadedState = S
+>(
+  reducer: Reducer<S, A, PreloadedState>,
+  preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined,
+  enhancer?: StoreEnhancer<Ext, StateExt>
+): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {
+  if (typeof reducer !== 'function') {
+    throw new Error(
+      `Expected the root reducer to be a function. Instead, received: '${kindOf(
+        reducer
+      )}'`
+    )
+  }
+
+  if (
+    (typeof preloadedState === 'function' && typeof enhancer === 'function') ||
+    (typeof enhancer === 'function' && typeof arguments[3] === 'function')
+  ) {
+    throw new Error(
+      'It looks like you are passing several store enhancers to ' +
+        'createStore(). This is not supported. Instead, compose them ' +
+        'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.'
+    )
+  }
+
+  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
+    enhancer = preloadedState as StoreEnhancer<Ext, StateExt>
+    preloadedState = undefined
+  }
+
+  if (typeof enhancer !== 'undefined') {
+    if (typeof enhancer !== 'function') {
+      throw new Error(
+        `Expected the enhancer to be a function. Instead, received: '${kindOf(
+          enhancer
+        )}'`
+      )
+    }
+
+    return enhancer(createStore)(
+      reducer,
+      preloadedState as PreloadedState | undefined
+    )
+  }
+
+  let currentReducer = reducer
+  let currentState: S | PreloadedState | undefined = preloadedState as
+    | PreloadedState
+    | undefined
+  let currentListeners: Map<number, ListenerCallback> | null = new Map()
+  let nextListeners = currentListeners
+  let listenerIdCounter = 0
+  let isDispatching = false
+
+  /**
+   * This makes a shallow copy of currentListeners so we can use
+   * nextListeners as a temporary list while dispatching.
+   *
+   * This prevents any bugs around consumers calling
+   * subscribe/unsubscribe in the middle of a dispatch.
+   */
+  function ensureCanMutateNextListeners() {
+    if (nextListeners === currentListeners) {
+      nextListeners = new Map()
+      currentListeners.forEach((listener, key) => {
+        nextListeners.set(key, listener)
+      })
+    }
+  }
+
+  /**
+   * Reads the state tree managed by the store.
+   *
+   * @returns The current state tree of your application.
+   */
+  function getState(): S {
+    if (isDispatching) {
+      throw new Error(
+        'You may not call store.getState() while the reducer is executing. ' +
+          'The reducer has already received the state as an argument. ' +
+          'Pass it down from the top reducer instead of reading it from the store.'
+      )
+    }
+
+    return currentState as S
+  }
+
+  /**
+   * Adds a change listener. It will be called any time an action is dispatched,
+   * and some part of the state tree may potentially have changed. You may then
+   * call `getState()` to read the current state tree inside the callback.
+   *
+   * You may call `dispatch()` from a change listener, with the following
+   * caveats:
+   *
+   * 1. The subscriptions are snapshotted just before every `dispatch()` call.
+   * If you subscribe or unsubscribe while the listeners are being invoked, this
+   * will not have any effect on the `dispatch()` that is currently in progress.
+   * However, the next `dispatch()` call, whether nested or not, will use a more
+   * recent snapshot of the subscription list.
+   *
+   * 2. The listener should not expect to see all state changes, as the state
+   * might have been updated multiple times during a nested `dispatch()` before
+   * the listener is called. It is, however, guaranteed that all subscribers
+   * registered before the `dispatch()` started will be called with the latest
+   * state by the time it exits.
+   *
+   * @param listener A callback to be invoked on every dispatch.
+   * @returns A function to remove this change listener.
+   */
+  function subscribe(listener: () => void) {
+    if (typeof listener !== 'function') {
+      throw new Error(
+        `Expected the listener to be a function. Instead, received: '${kindOf(
+          listener
+        )}'`
+      )
+    }
+
+    if (isDispatching) {
+      throw new Error(
+        'You may not call store.subscribe() while the reducer is executing. ' +
+          'If you would like to be notified after the store has been updated, subscribe from a ' +
+          'component and invoke store.getState() in the callback to access the latest state. ' +
+          'See https://redux.js.org/api/store#subscribelistener for more details.'
+      )
+    }
+
+    let isSubscribed = true
+
+    ensureCanMutateNextListeners()
+    const listenerId = listenerIdCounter++
+    nextListeners.set(listenerId, listener)
+
+    return function unsubscribe() {
+      if (!isSubscribed) {
+        return
+      }
+
+      if (isDispatching) {
+        throw new Error(
+          'You may not unsubscribe from a store listener while the reducer is executing. ' +
+            'See https://redux.js.org/api/store#subscribelistener for more details.'
+        )
+      }
+
+      isSubscribed = false
+
+      ensureCanMutateNextListeners()
+      nextListeners.delete(listenerId)
+      currentListeners = null
+    }
+  }
+
+  /**
+   * Dispatches an action. It is the only way to trigger a state change.
+   *
+   * The `reducer` function, used to create the store, will be called with the
+   * current state tree and the given `action`. Its return value will
+   * be considered the **next** state of the tree, and the change listeners
+   * will be notified.
+   *
+   * The base implementation only supports plain object actions. If you want to
+   * dispatch a Promise, an Observable, a thunk, or something else, you need to
+   * wrap your store creating function into the corresponding middleware. For
+   * example, see the documentation for the `redux-thunk` package. Even the
+   * middleware will eventually dispatch plain object actions using this method.
+   *
+   * @param action A plain object representing “what changed”. It is
+   * a good idea to keep actions serializable so you can record and replay user
+   * sessions, or use the time travelling `redux-devtools`. An action must have
+   * a `type` property which may not be `undefined`. It is a good idea to use
+   * string constants for action types.
+   *
+   * @returns For convenience, the same action object you dispatched.
+   *
+   * Note that, if you use a custom middleware, it may wrap `dispatch()` to
+   * return something else (for example, a Promise you can await).
+   */
+  function dispatch(action: A) {
+    if (!isPlainObject(action)) {
+      throw new Error(
+        `Actions must be plain objects. Instead, the actual type was: '${kindOf(
+          action
+        )}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`
+      )
+    }
+
+    if (typeof action.type === 'undefined') {
+      throw new Error(
+        'Actions may not have an undefined "type" property. You may have misspelled an action type string constant.'
+      )
+    }
+
+    if (typeof action.type !== 'string') {
+      throw new Error(
+        `Action "type" property must be a string. Instead, the actual type was: '${kindOf(
+          action.type
+        )}'. Value was: '${action.type}' (stringified)`
+      )
+    }
+
+    if (isDispatching) {
+      throw new Error('Reducers may not dispatch actions.')
+    }
+
+    try {
+      isDispatching = true
+      currentState = currentReducer(currentState, action)
+    } finally {
+      isDispatching = false
+    }
+
+    const listeners = (currentListeners = nextListeners)
+    listeners.forEach(listener => {
+      listener()
+    })
+    return action
+  }
+
+  /**
+   * Replaces the reducer currently used by the store to calculate the state.
+   *
+   * You might need this if your app implements code splitting and you want to
+   * load some of the reducers dynamically. You might also need this if you
+   * implement a hot reloading mechanism for Redux.
+   *
+   * @param nextReducer The reducer for the store to use instead.
+   */
+  function replaceReducer(nextReducer: Reducer<S, A>): void {
+    if (typeof nextReducer !== 'function') {
+      throw new Error(
+        `Expected the nextReducer to be a function. Instead, received: '${kindOf(
+          nextReducer
+        )}`
+      )
+    }
+
+    currentReducer = nextReducer as unknown as Reducer<S, A, PreloadedState>
+
+    // This action has a similar effect to ActionTypes.INIT.
+    // Any reducers that existed in both the new and old rootReducer
+    // will receive the previous state. This effectively populates
+    // the new state tree with any relevant data from the old one.
+    dispatch({ type: ActionTypes.REPLACE } as A)
+  }
+
+  /**
+   * Interoperability point for observable/reactive libraries.
+   * @returns A minimal observable of state changes.
+   * For more information, see the observable proposal:
+   * https://github.com/tc39/proposal-observable
+   */
+  function observable() {
+    const outerSubscribe = subscribe
+    return {
+      /**
+       * The minimal observable subscription method.
+       * @param observer Any object that can be used as an observer.
+       * The observer object should have a `next` method.
+       * @returns An object with an `unsubscribe` method that can
+       * be used to unsubscribe the observable from the store, and prevent further
+       * emission of values from the observable.
+       */
+      subscribe(observer: unknown) {
+        if (typeof observer !== 'object' || observer === null) {
+          throw new TypeError(
+            `Expected the observer to be an object. Instead, received: '${kindOf(
+              observer
+            )}'`
+          )
+        }
+
+        function observeState() {
+          const observerAsObserver = observer as Observer<S>
+          if (observerAsObserver.next) {
+            observerAsObserver.next(getState())
+          }
+        }
+
+        observeState()
+        const unsubscribe = outerSubscribe(observeState)
+        return { unsubscribe }
+      },
+
+      [$$observable]() {
+        return this
+      }
+    }
+  }
+
+  // When a store is created, an "INIT" action is dispatched so that every
+  // reducer returns their initial state. This effectively populates
+  // the initial state tree.
+  dispatch({ type: ActionTypes.INIT } as A)
+
+  const store = {
+    dispatch: dispatch as Dispatch<A>,
+    subscribe,
+    getState,
+    replaceReducer,
+    [$$observable]: observable
+  } as unknown as Store<S, A, StateExt> & Ext
+  return store
+}
+
+/**
+ * Creates a Redux store that holds the state tree.
+ *
+ * **We recommend using `configureStore` from the
+ * `@reduxjs/toolkit` package**, which replaces `createStore`:
+ * **https://redux.js.org/introduction/why-rtk-is-redux-today**
+ *
+ * The only way to change the data in the store is to call `dispatch()` on it.
+ *
+ * There should only be a single store in your app. To specify how different
+ * parts of the state tree respond to actions, you may combine several reducers
+ * into a single reducer function by using `combineReducers`.
+ *
+ * @param {Function} reducer A function that returns the next state tree, given
+ * the current state tree and the action to handle.
+ *
+ * @param {any} [preloadedState] The initial state. You may optionally specify it
+ * to hydrate the state from the server in universal apps, or to restore a
+ * previously serialized user session.
+ * If you use `combineReducers` to produce the root reducer function, this must be
+ * an object with the same shape as `combineReducers` keys.
+ *
+ * @param {Function} [enhancer] The store enhancer. You may optionally specify it
+ * to enhance the store with third-party capabilities such as middleware,
+ * time travel, persistence, etc. The only store enhancer that ships with Redux
+ * is `applyMiddleware()`.
+ *
+ * @returns {Store} A Redux store that lets you read the state, dispatch actions
+ * and subscribe to changes.
+ */
+export function legacy_createStore<
+  S,
+  A extends Action,
+  Ext extends {} = {},
+  StateExt extends {} = {}
+>(
+  reducer: Reducer<S, A>,
+  enhancer?: StoreEnhancer<Ext, StateExt>
+): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext
+/**
+ * Creates a Redux store that holds the state tree.
+ *
+ * **We recommend using `configureStore` from the
+ * `@reduxjs/toolkit` package**, which replaces `createStore`:
+ * **https://redux.js.org/introduction/why-rtk-is-redux-today**
+ *
+ * The only way to change the data in the store is to call `dispatch()` on it.
+ *
+ * There should only be a single store in your app. To specify how different
+ * parts of the state tree respond to actions, you may combine several reducers
+ * into a single reducer function by using `combineReducers`.
+ *
+ * @param {Function} reducer A function that returns the next state tree, given
+ * the current state tree and the action to handle.
+ *
+ * @param {any} [preloadedState] The initial state. You may optionally specify it
+ * to hydrate the state from the server in universal apps, or to restore a
+ * previously serialized user session.
+ * If you use `combineReducers` to produce the root reducer function, this must be
+ * an object with the same shape as `combineReducers` keys.
+ *
+ * @param {Function} [enhancer] The store enhancer. You may optionally specify it
+ * to enhance the store with third-party capabilities such as middleware,
+ * time travel, persistence, etc. The only store enhancer that ships with Redux
+ * is `applyMiddleware()`.
+ *
+ * @returns {Store} A Redux store that lets you read the state, dispatch actions
+ * and subscribe to changes.
+ */
+export function legacy_createStore<
+  S,
+  A extends Action,
+  Ext extends {} = {},
+  StateExt extends {} = {},
+  PreloadedState = S
+>(
+  reducer: Reducer<S, A, PreloadedState>,
+  preloadedState?: PreloadedState | undefined,
+  enhancer?: StoreEnhancer<Ext, StateExt>
+): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext
+export function legacy_createStore<
+  S,
+  A extends Action,
+  Ext extends {} = {},
+  StateExt extends {} = {},
+  PreloadedState = S
+>(
+  reducer: Reducer<S, A>,
+  preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined,
+  enhancer?: StoreEnhancer<Ext, StateExt>
+): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {
+  return createStore(reducer, preloadedState as any, enhancer)
+}
Index: node_modules/redux/src/index.ts
===================================================================
--- node_modules/redux/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+// functions
+import { createStore, legacy_createStore } from './createStore'
+import combineReducers from './combineReducers'
+import bindActionCreators from './bindActionCreators'
+import applyMiddleware from './applyMiddleware'
+import compose from './compose'
+import isAction from './utils/isAction'
+import isPlainObject from './utils/isPlainObject'
+import __DO_NOT_USE__ActionTypes from './utils/actionTypes'
+
+// types
+// store
+export {
+  Dispatch,
+  Unsubscribe,
+  Observable,
+  Observer,
+  Store,
+  StoreCreator,
+  StoreEnhancer,
+  StoreEnhancerStoreCreator
+} from './types/store'
+// reducers
+export {
+  Reducer,
+  ReducersMapObject,
+  StateFromReducersMapObject,
+  ReducerFromReducersMapObject,
+  ActionFromReducer,
+  ActionFromReducersMapObject,
+  PreloadedStateShapeFromReducersMapObject
+} from './types/reducers'
+// action creators
+export { ActionCreator, ActionCreatorsMapObject } from './types/actions'
+// middleware
+export { MiddlewareAPI, Middleware } from './types/middleware'
+// actions
+export { Action, UnknownAction, AnyAction } from './types/actions'
+
+export {
+  createStore,
+  legacy_createStore,
+  combineReducers,
+  bindActionCreators,
+  applyMiddleware,
+  compose,
+  isAction,
+  isPlainObject,
+  __DO_NOT_USE__ActionTypes
+}
Index: node_modules/redux/src/types/actions.ts
===================================================================
--- node_modules/redux/src/types/actions.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/types/actions.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,74 @@
+/**
+ * An *action* is a plain object that represents an intention to change the
+ * state. Actions are the only way to get data into the store. Any data,
+ * whether from UI events, network callbacks, or other sources such as
+ * WebSockets needs to eventually be dispatched as actions.
+ *
+ * Actions must have a `type` field that indicates the type of action being
+ * performed. Types can be defined as constants and imported from another
+ * module. These must be strings, as strings are serializable.
+ *
+ * Other than `type`, the structure of an action object is really up to you.
+ * If you're interested, check out Flux Standard Action for recommendations on
+ * how actions should be constructed.
+ *
+ * @template T the type of the action's `type` tag.
+ */
+// this needs to be a type, not an interface
+// https://github.com/microsoft/TypeScript/issues/15300
+export type Action<T extends string = string> = {
+  type: T
+}
+
+/**
+ * An Action type which accepts any other properties.
+ * This is mainly for the use of the `Reducer` type.
+ * This is not part of `Action` itself to prevent types that extend `Action` from
+ * having an index signature.
+ */
+export interface UnknownAction extends Action {
+  // Allows any extra properties to be defined in an action.
+  [extraProps: string]: unknown
+}
+
+/**
+ * An Action type which accepts any other properties.
+ * This is mainly for the use of the `Reducer` type.
+ * This is not part of `Action` itself to prevent types that extend `Action` from
+ * having an index signature.
+ * @deprecated use Action or UnknownAction instead
+ */
+export interface AnyAction extends Action {
+  // Allows any extra properties to be defined in an action.
+  [extraProps: string]: any
+}
+
+/* action creators */
+
+/**
+ * An *action creator* is, quite simply, a function that creates an action. Do
+ * not confuse the two terms—again, an action is a payload of information, and
+ * an action creator is a factory that creates an action.
+ *
+ * Calling an action creator only produces an action, but does not dispatch
+ * it. You need to call the store's `dispatch` function to actually cause the
+ * mutation. Sometimes we say *bound action creators* to mean functions that
+ * call an action creator and immediately dispatch its result to a specific
+ * store instance.
+ *
+ * If an action creator needs to read the current state, perform an API call,
+ * or cause a side effect, like a routing transition, it should return an
+ * async action instead of an action.
+ *
+ * @template A Returned action type.
+ */
+export interface ActionCreator<A, P extends any[] = any[]> {
+  (...args: P): A
+}
+
+/**
+ * Object whose values are action creator functions.
+ */
+export interface ActionCreatorsMapObject<A = any, P extends any[] = any[]> {
+  [key: string]: ActionCreator<A, P>
+}
Index: node_modules/redux/src/types/middleware.ts
===================================================================
--- node_modules/redux/src/types/middleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/types/middleware.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+import { Dispatch } from './store'
+
+export interface MiddlewareAPI<D extends Dispatch = Dispatch, S = any> {
+  dispatch: D
+  getState(): S
+}
+
+/**
+ * A middleware is a higher-order function that composes a dispatch function
+ * to return a new dispatch function. It often turns async actions into
+ * actions.
+ *
+ * Middleware is composable using function composition. It is useful for
+ * logging actions, performing side effects like routing, or turning an
+ * asynchronous API call into a series of synchronous actions.
+ *
+ * @template DispatchExt Extra Dispatch signature added by this middleware.
+ * @template S The type of the state supported by this middleware.
+ * @template D The type of Dispatch of the store where this middleware is
+ *   installed.
+ */
+export interface Middleware<
+  _DispatchExt = {}, // TODO: see if this can be used in type definition somehow (can't be removed, as is used to get final dispatch type)
+  S = any,
+  D extends Dispatch = Dispatch
+> {
+  (api: MiddlewareAPI<D, S>): (
+    next: (action: unknown) => unknown
+  ) => (action: unknown) => unknown
+}
Index: node_modules/redux/src/types/reducers.ts
===================================================================
--- node_modules/redux/src/types/reducers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/types/reducers.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,115 @@
+import { Action, UnknownAction } from './actions'
+
+/* reducers */
+
+/**
+ * A *reducer* is a function that accepts
+ * an accumulation and a value and returns a new accumulation. They are used
+ * to reduce a collection of values down to a single value
+ *
+ * Reducers are not unique to Redux—they are a fundamental concept in
+ * functional programming.  Even most non-functional languages, like
+ * JavaScript, have a built-in API for reducing. In JavaScript, it's
+ * `Array.prototype.reduce()`.
+ *
+ * In Redux, the accumulated value is the state object, and the values being
+ * accumulated are actions. Reducers calculate a new state given the previous
+ * state and an action. They must be *pure functions*—functions that return
+ * the exact same output for given inputs. They should also be free of
+ * side-effects. This is what enables exciting features like hot reloading and
+ * time travel.
+ *
+ * Reducers are the most important concept in Redux.
+ *
+ * *Do not put API calls into reducers.*
+ *
+ * @template S The type of state consumed and produced by this reducer.
+ * @template A The type of actions the reducer can potentially respond to.
+ * @template PreloadedState The type of state consumed by this reducer the first time it's called.
+ */
+export type Reducer<
+  S = any,
+  A extends Action = UnknownAction,
+  PreloadedState = S
+> = (state: S | PreloadedState | undefined, action: A) => S
+
+/**
+ * Object whose values correspond to different reducer functions.
+ *
+ * @template S The combined state of the reducers.
+ * @template A The type of actions the reducers can potentially respond to.
+ * @template PreloadedState The combined preloaded state of the reducers.
+ */
+export type ReducersMapObject<
+  S = any,
+  A extends Action = UnknownAction,
+  PreloadedState = S
+> = keyof PreloadedState extends keyof S
+  ? {
+      [K in keyof S]: Reducer<
+        S[K],
+        A,
+        K extends keyof PreloadedState ? PreloadedState[K] : never
+      >
+    }
+  : never
+
+/**
+ * Infer a combined state shape from a `ReducersMapObject`.
+ *
+ * @template M Object map of reducers as provided to `combineReducers(map: M)`.
+ */
+export type StateFromReducersMapObject<M> = M[keyof M] extends
+  | Reducer<any, any, any>
+  | undefined
+  ? {
+      [P in keyof M]: M[P] extends Reducer<infer S, any, any> ? S : never
+    }
+  : never
+
+/**
+ * Infer reducer union type from a `ReducersMapObject`.
+ *
+ * @template M Object map of reducers as provided to `combineReducers(map: M)`.
+ */
+export type ReducerFromReducersMapObject<M> = M[keyof M] extends
+  | Reducer<any, any, any>
+  | undefined
+  ? M[keyof M]
+  : never
+
+/**
+ * Infer action type from a reducer function.
+ *
+ * @template R Type of reducer.
+ */
+export type ActionFromReducer<R> = R extends Reducer<any, infer A, any>
+  ? A
+  : never
+
+/**
+ * Infer action union type from a `ReducersMapObject`.
+ *
+ * @template M Object map of reducers as provided to `combineReducers(map: M)`.
+ */
+export type ActionFromReducersMapObject<M> = ActionFromReducer<
+  ReducerFromReducersMapObject<M>
+>
+
+/**
+ * Infer a combined preloaded state shape from a `ReducersMapObject`.
+ *
+ * @template M Object map of reducers as provided to `combineReducers(map: M)`.
+ */
+export type PreloadedStateShapeFromReducersMapObject<M> = M[keyof M] extends
+  | Reducer<any, any, any>
+  | undefined
+  ? {
+      [P in keyof M]: M[P] extends (
+        inputState: infer InputState,
+        action: UnknownAction
+      ) => any
+        ? InputState
+        : never
+    }
+  : never
Index: node_modules/redux/src/types/store.ts
===================================================================
--- node_modules/redux/src/types/store.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/types/store.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,232 @@
+import { Action, UnknownAction } from './actions'
+import { Reducer } from './reducers'
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+import _$$observable from '../utils/symbol-observable'
+
+/**
+ * A *dispatching function* (or simply *dispatch function*) is a function that
+ * accepts an action or an async action; it then may or may not dispatch one
+ * or more actions to the store.
+ *
+ * We must distinguish between dispatching functions in general and the base
+ * `dispatch` function provided by the store instance without any middleware.
+ *
+ * The base dispatch function *always* synchronously sends an action to the
+ * store's reducer, along with the previous state returned by the store, to
+ * calculate a new state. It expects actions to be plain objects ready to be
+ * consumed by the reducer.
+ *
+ * Middleware wraps the base dispatch function. It allows the dispatch
+ * function to handle async actions in addition to actions. Middleware may
+ * transform, delay, ignore, or otherwise interpret actions or async actions
+ * before passing them to the next middleware.
+ *
+ * @template A The type of things (actions or otherwise) which may be
+ *   dispatched.
+ */
+export interface Dispatch<A extends Action = UnknownAction> {
+  <T extends A>(action: T, ...extraArgs: any[]): T
+}
+
+/**
+ * Function to remove listener added by `Store.subscribe()`.
+ */
+export interface Unsubscribe {
+  (): void
+}
+
+export type ListenerCallback = () => void
+
+declare global {
+  interface SymbolConstructor {
+    readonly observable: symbol
+  }
+}
+
+/**
+ * A minimal observable of state changes.
+ * For more information, see the observable proposal:
+ * https://github.com/tc39/proposal-observable
+ */
+export type Observable<T> = {
+  /**
+   * The minimal observable subscription method.
+   * @param {Object} observer Any object that can be used as an observer.
+   * The observer object should have a `next` method.
+   * @returns {subscription} An object with an `unsubscribe` method that can
+   * be used to unsubscribe the observable from the store, and prevent further
+   * emission of values from the observable.
+   */
+  subscribe: (observer: Observer<T>) => { unsubscribe: Unsubscribe }
+  [Symbol.observable](): Observable<T>
+}
+
+/**
+ * An Observer is used to receive data from an Observable, and is supplied as
+ * an argument to subscribe.
+ */
+export type Observer<T> = {
+  next?(value: T): void
+}
+
+/**
+ * A store is an object that holds the application's state tree.
+ * There should only be a single store in a Redux app, as the composition
+ * happens on the reducer level.
+ *
+ * @template S The type of state held by this store.
+ * @template A the type of actions which may be dispatched by this store.
+ * @template StateExt any extension to state from store enhancers
+ */
+export interface Store<
+  S = any,
+  A extends Action = UnknownAction,
+  StateExt extends unknown = unknown
+> {
+  /**
+   * Dispatches an action. It is the only way to trigger a state change.
+   *
+   * The `reducer` function, used to create the store, will be called with the
+   * current state tree and the given `action`. Its return value will be
+   * considered the **next** state of the tree, and the change listeners will
+   * be notified.
+   *
+   * The base implementation only supports plain object actions. If you want
+   * to dispatch a Promise, an Observable, a thunk, or something else, you
+   * need to wrap your store creating function into the corresponding
+   * middleware. For example, see the documentation for the `redux-thunk`
+   * package. Even the middleware will eventually dispatch plain object
+   * actions using this method.
+   *
+   * @param action A plain object representing “what changed”. It is a good
+   *   idea to keep actions serializable so you can record and replay user
+   *   sessions, or use the time travelling `redux-devtools`. An action must
+   *   have a `type` property which may not be `undefined`. It is a good idea
+   *   to use string constants for action types.
+   *
+   * @returns For convenience, the same action object you dispatched.
+   *
+   * Note that, if you use a custom middleware, it may wrap `dispatch()` to
+   * return something else (for example, a Promise you can await).
+   */
+  dispatch: Dispatch<A>
+
+  /**
+   * Reads the state tree managed by the store.
+   *
+   * @returns The current state tree of your application.
+   */
+  getState(): S & StateExt
+
+  /**
+   * Adds a change listener. It will be called any time an action is
+   * dispatched, and some part of the state tree may potentially have changed.
+   * You may then call `getState()` to read the current state tree inside the
+   * callback.
+   *
+   * You may call `dispatch()` from a change listener, with the following
+   * caveats:
+   *
+   * 1. The subscriptions are snapshotted just before every `dispatch()` call.
+   * If you subscribe or unsubscribe while the listeners are being invoked,
+   * this will not have any effect on the `dispatch()` that is currently in
+   * progress. However, the next `dispatch()` call, whether nested or not,
+   * will use a more recent snapshot of the subscription list.
+   *
+   * 2. The listener should not expect to see all states changes, as the state
+   * might have been updated multiple times during a nested `dispatch()` before
+   * the listener is called. It is, however, guaranteed that all subscribers
+   * registered before the `dispatch()` started will be called with the latest
+   * state by the time it exits.
+   *
+   * @param listener A callback to be invoked on every dispatch.
+   * @returns A function to remove this change listener.
+   */
+  subscribe(listener: ListenerCallback): Unsubscribe
+
+  /**
+   * Replaces the reducer currently used by the store to calculate the state.
+   *
+   * You might need this if your app implements code splitting and you want to
+   * load some of the reducers dynamically. You might also need this if you
+   * implement a hot reloading mechanism for Redux.
+   *
+   * @param nextReducer The reducer for the store to use instead.
+   */
+  replaceReducer(nextReducer: Reducer<S, A>): void
+
+  /**
+   * Interoperability point for observable/reactive libraries.
+   * @returns {observable} A minimal observable of state changes.
+   * For more information, see the observable proposal:
+   * https://github.com/tc39/proposal-observable
+   */
+  [Symbol.observable](): Observable<S & StateExt>
+}
+
+export type UnknownIfNonSpecific<T> = {} extends T ? unknown : T
+
+/**
+ * A store creator is a function that creates a Redux store. Like with
+ * dispatching function, we must distinguish the base store creator,
+ * `createStore(reducer, preloadedState)` exported from the Redux package, from
+ * store creators that are returned from the store enhancers.
+ *
+ * @template S The type of state to be held by the store.
+ * @template A The type of actions which may be dispatched.
+ * @template PreloadedState The initial state that is passed into the reducer.
+ * @template Ext Store extension that is mixed in to the Store type.
+ * @template StateExt State extension that is mixed into the state type.
+ */
+export interface StoreCreator {
+  <S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(
+    reducer: Reducer<S, A>,
+    enhancer?: StoreEnhancer<Ext, StateExt>
+  ): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext
+  <
+    S,
+    A extends Action,
+    Ext extends {} = {},
+    StateExt extends {} = {},
+    PreloadedState = S
+  >(
+    reducer: Reducer<S, A, PreloadedState>,
+    preloadedState?: PreloadedState | undefined,
+    enhancer?: StoreEnhancer<Ext>
+  ): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext
+}
+
+/**
+ * A store enhancer is a higher-order function that composes a store creator
+ * to return a new, enhanced store creator. This is similar to middleware in
+ * that it allows you to alter the store interface in a composable way.
+ *
+ * Store enhancers are much the same concept as higher-order components in
+ * React, which are also occasionally called “component enhancers”.
+ *
+ * Because a store is not an instance, but rather a plain-object collection of
+ * functions, copies can be easily created and modified without mutating the
+ * original store. There is an example in `compose` documentation
+ * demonstrating that.
+ *
+ * Most likely you'll never write a store enhancer, but you may use the one
+ * provided by the developer tools. It is what makes time travel possible
+ * without the app being aware it is happening. Amusingly, the Redux
+ * middleware implementation is itself a store enhancer.
+ *
+ * @template Ext Store extension that is mixed into the Store type.
+ * @template StateExt State extension that is mixed into the state type.
+ */
+export type StoreEnhancer<Ext extends {} = {}, StateExt extends {} = {}> = <
+  NextExt extends {},
+  NextStateExt extends {}
+>(
+  next: StoreEnhancerStoreCreator<NextExt, NextStateExt>
+) => StoreEnhancerStoreCreator<NextExt & Ext, NextStateExt & StateExt>
+export type StoreEnhancerStoreCreator<
+  Ext extends {} = {},
+  StateExt extends {} = {}
+> = <S, A extends Action, PreloadedState>(
+  reducer: Reducer<S, A, PreloadedState>,
+  preloadedState?: PreloadedState | undefined
+) => Store<S, A, StateExt> & Ext
Index: node_modules/redux/src/utils/actionTypes.ts
===================================================================
--- node_modules/redux/src/utils/actionTypes.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/utils/actionTypes.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+/**
+ * These are private action types reserved by Redux.
+ * For any unknown actions, you must return the current state.
+ * If the current state is undefined, you must return the initial state.
+ * Do not reference these action types directly in your code.
+ */
+
+const randomString = () =>
+  Math.random().toString(36).substring(7).split('').join('.')
+
+const ActionTypes = {
+  INIT: `@@redux/INIT${/* #__PURE__ */ randomString()}`,
+  REPLACE: `@@redux/REPLACE${/* #__PURE__ */ randomString()}`,
+  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
+}
+
+export default ActionTypes
Index: node_modules/redux/src/utils/formatProdErrorMessage.ts
===================================================================
--- node_modules/redux/src/utils/formatProdErrorMessage.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/utils/formatProdErrorMessage.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+/**
+ * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js
+ *
+ * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes
+ * during build.
+ * @param {number} code
+ */
+export function formatProdErrorMessage(code: number) {
+  return (
+    `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` +
+    'use the non-minified dev environment for full errors. '
+  )
+}
Index: node_modules/redux/src/utils/isAction.ts
===================================================================
--- node_modules/redux/src/utils/isAction.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/utils/isAction.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+import { Action } from '../types/actions'
+import isPlainObject from './isPlainObject'
+
+export default function isAction(action: unknown): action is Action<string> {
+  return (
+    isPlainObject(action) &&
+    'type' in action &&
+    typeof (action as Record<'type', unknown>).type === 'string'
+  )
+}
Index: node_modules/redux/src/utils/isPlainObject.ts
===================================================================
--- node_modules/redux/src/utils/isPlainObject.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/utils/isPlainObject.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+/**
+ * @param obj The object to inspect.
+ * @returns True if the argument appears to be a plain object.
+ */
+export default function isPlainObject(obj: any): obj is object {
+  if (typeof obj !== 'object' || obj === null) return false
+
+  let proto = obj
+  while (Object.getPrototypeOf(proto) !== null) {
+    proto = Object.getPrototypeOf(proto)
+  }
+
+  return (
+    Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null
+  )
+}
Index: node_modules/redux/src/utils/kindOf.ts
===================================================================
--- node_modules/redux/src/utils/kindOf.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/utils/kindOf.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of
+export function miniKindOf(val: any): string {
+  if (val === void 0) return 'undefined'
+  if (val === null) return 'null'
+
+  const type = typeof val
+  switch (type) {
+    case 'boolean':
+    case 'string':
+    case 'number':
+    case 'symbol':
+    case 'function': {
+      return type
+    }
+  }
+
+  if (Array.isArray(val)) return 'array'
+  if (isDate(val)) return 'date'
+  if (isError(val)) return 'error'
+
+  const constructorName = ctorName(val)
+  switch (constructorName) {
+    case 'Symbol':
+    case 'Promise':
+    case 'WeakMap':
+    case 'WeakSet':
+    case 'Map':
+    case 'Set':
+      return constructorName
+  }
+
+  // other
+  return Object.prototype.toString
+    .call(val)
+    .slice(8, -1)
+    .toLowerCase()
+    .replace(/\s/g, '')
+}
+
+function ctorName(val: any): string | null {
+  return typeof val.constructor === 'function' ? val.constructor.name : null
+}
+
+function isError(val: any) {
+  return (
+    val instanceof Error ||
+    (typeof val.message === 'string' &&
+      val.constructor &&
+      typeof val.constructor.stackTraceLimit === 'number')
+  )
+}
+
+function isDate(val: any) {
+  if (val instanceof Date) return true
+  return (
+    typeof val.toDateString === 'function' &&
+    typeof val.getDate === 'function' &&
+    typeof val.setDate === 'function'
+  )
+}
+
+export function kindOf(val: any) {
+  let typeOfVal: string = typeof val
+
+  if (process.env.NODE_ENV !== 'production') {
+    typeOfVal = miniKindOf(val)
+  }
+
+  return typeOfVal
+}
Index: node_modules/redux/src/utils/symbol-observable.ts
===================================================================
--- node_modules/redux/src/utils/symbol-observable.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/utils/symbol-observable.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+declare global {
+  interface SymbolConstructor {
+    readonly observable: symbol
+  }
+}
+
+const $$observable = /* #__PURE__ */ (() =>
+  (typeof Symbol === 'function' && Symbol.observable) || '@@observable')()
+
+export default $$observable
Index: node_modules/redux/src/utils/warning.ts
===================================================================
--- node_modules/redux/src/utils/warning.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/redux/src/utils/warning.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+/**
+ * Prints a warning in the console if it exists.
+ *
+ * @param message The warning message.
+ */
+export default function warning(message: string): void {
+  /* eslint-disable no-console */
+  if (typeof console !== 'undefined' && typeof console.error === 'function') {
+    console.error(message)
+  }
+  /* eslint-enable no-console */
+  try {
+    // This error was thrown as a convenience so that if you enable
+    // "break on all exceptions" in your console,
+    // it would pause the execution at this line.
+    throw new Error(message)
+  } catch (e) {} // eslint-disable-line no-empty
+}
Index: node_modules/reselect/LICENSE
===================================================================
--- node_modules/reselect/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2018 Reselect Contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/reselect/README.md
===================================================================
--- node_modules/reselect/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,206 @@
+# Reselect
+
+[![npm package][npm-badge]][npm][![Coveralls][coveralls-badge]][coveralls][![GitHub Workflow Status][build-badge]][build]![TypeScript][typescript-badge]
+
+A library for creating memoized "selector" functions. Commonly used with Redux, but usable with any plain JS immutable data as well.
+
+- Selectors can compute derived data, allowing [Redux] to store the minimal possible state.
+- Selectors are efficient. A selector is not recomputed unless one of its arguments changes.
+- Selectors are composable. They can be used as input to other selectors.
+
+The **Redux docs usage page on [Deriving Data with Selectors](https://redux.js.org/usage/deriving-data-selectors)** covers the purpose and motivation for selectors, why memoized selectors are useful, typical Reselect usage patterns, and using selectors with [React-Redux].
+
+## Installation
+
+### Redux Toolkit
+
+While Reselect is not exclusive to [Redux], it is already included by default in [the official Redux Toolkit package](https://redux-toolkit.js.org) - no further installation needed.
+
+```ts
+import { createSelector } from '@reduxjs/toolkit'
+```
+
+### Standalone
+
+For standalone usage, install the `reselect` package:
+
+```bash
+# NPM
+npm install reselect
+
+# Yarn
+yarn add reselect
+```
+
+---
+
+## Documentation
+
+The Reselect docs are available at **https://reselect.js.org**, and include usage guides and API references:
+
+- [**Introduction**](#https://reselect.js.org/introduction/getting-started)
+- [**How Does Reselect Work?**](#https://reselect.js.org/introduction/how-does-reselect-work)
+- **API Reference**:
+  - **[`createSelector`]**
+  - **[`createSelectorCreator`]**
+  - **[`createStructuredSelector`]**
+  - [**Development-Only Stability Checks**](#https://reselect.js.org/api/development-only-stability-checks)
+  - **[`lruMemoize`]**
+  - **[`weakMapMemoize`]**
+- [**FAQ**](#https://reselect.js.org/FAQ)
+
+## Basic Usage
+
+Reselect exports a [`createSelector`] API, which generates memoized selector functions. [`createSelector`] accepts one or more [input selectors], which extract values from arguments, and a [result function] function that receives the extracted values and should return a derived value. If the generated [output selector] is called multiple times, the output will only be recalculated when the extracted values have changed.
+
+You can play around with the following **example** in [this CodeSandbox](https://codesandbox.io/s/reselect-example-g3k9gf?file=/src/index.js):
+
+```ts
+import { createSelector } from 'reselect'
+
+interface RootState {
+  todos: { id: number; completed: boolean }[]
+  alerts: { id: number; read: boolean }[]
+}
+
+const state: RootState = {
+  todos: [
+    { id: 0, completed: false },
+    { id: 1, completed: true }
+  ],
+  alerts: [
+    { id: 0, read: false },
+    { id: 1, read: true }
+  ]
+}
+
+const selectCompletedTodos = (state: RootState) => {
+  console.log('selector ran')
+  return state.todos.filter(todo => todo.completed === true)
+}
+
+selectCompletedTodos(state) // selector ran
+selectCompletedTodos(state) // selector ran
+selectCompletedTodos(state) // selector ran
+
+const memoizedSelectCompletedTodos = createSelector(
+  [(state: RootState) => state.todos],
+  todos => {
+    console.log('memoized selector ran')
+    return todos.filter(todo => todo.completed === true)
+  }
+)
+
+memoizedSelectCompletedTodos(state) // memoized selector ran
+memoizedSelectCompletedTodos(state)
+memoizedSelectCompletedTodos(state)
+
+console.log(selectCompletedTodos(state) === selectCompletedTodos(state)) //=> false
+
+console.log(
+  memoizedSelectCompletedTodos(state) === memoizedSelectCompletedTodos(state)
+) //=> true
+```
+
+As you can see from the example above, `memoizedSelectCompletedTodos` does not run the second or third time, but we still get the same return value as last time.
+
+In addition to skipping unnecessary recalculations, `memoizedSelectCompletedTodos` returns the existing result reference if there is no recalculation. This is important for libraries like [React-Redux] or [React] that often rely on reference equality checks to optimize UI updates.
+
+---
+
+## Terminology
+
+- <a name="selector-function"></a>[**Selector Function**](#selector-function): A function that accepts one or more JavaScript values as arguments, and derives a result. When used with [Redux], the first argument is typically the entire Redux store state.
+- <a name="input-selectors"></a>[**input selectors**](#input-selectors): Basic selector functions used as building blocks for creating a memoized selector. They are passed as the first argument(s) to [`createSelector`], and are called with all selector arguments. They are responsible for extracting and providing necessary values to the [result function].
+- <a name="output-selector"></a>[**Output Selector**](#output-selector): The actual memoized selectors created by [`createSelector`].
+- <a name="result-function"></a>[**Result Function**](#result-function): The function that comes after the [input selectors]. It takes the [input selectors]' return values as arguments and returns a result.
+- <a name="dependencies"></a>[**`Dependencies`**](#dependencies): Same as [input selectors]. They are what the [output selector] "depends" on.
+
+The below example serves as a visual aid:
+
+```ts
+const outputSelector = createSelector(
+  [inputSelector1, inputSelector2, inputSelector3], // synonymous with `dependencies`.
+  resultFunc // Result function
+)
+```
+
+---
+
+## What's New in 5.0.0?
+
+Version 5.0.0 introduces several new features and improvements:
+
+- **Customization Enhancements**:
+
+  - Added the ability to pass an options object to [`createSelectorCreator`], allowing for customized `memoize` and `argsMemoize` functions, alongside their respective options (`memoizeOptions` and `argsMemoizeOptions`).
+  - The [`createSelector`] function now supports direct customization of `memoize` and `argsMemoize` within its options object.
+
+- **Memoization Functions**:
+
+  - Introduced new experimental memoization functions: `weakMapMemoize` and `unstable_autotrackMemoize`.
+  - Incorporated `memoize` and `argsMemoize` into the [output selector fields] for debugging purposes.
+
+- **TypeScript Support and Performance**:
+
+  - Discontinued support for TypeScript versions below 4.7, aligning with modern TypeScript features.
+  - Significantly improved TypeScript performance for nesting [output selectors][output selector]. The nesting limit has increased from approximately 8 to around 30 [output selectors][output selector], greatly reducing the occurrence of the infamous `Type instantiation is excessively deep and possibly infinite` error.
+
+- **Selector API Enhancements**:
+
+  - Removed the second overload of `createStructuredSelector` due to its susceptibility to runtime errors.
+
+- **Additional Functionalities**:
+
+  - Added `dependencyRecomputations` and `resetDependencyRecomputations` to the [output selector fields]. These additions provide greater control and insight over [input selectors], complementing the new `argsMemoize` API.
+  - Introduced `inputStabilityCheck`, a development tool that runs the [input selectors] twice using the same arguments and triggers a warning If they return differing results for the same call.
+  - Introduced `identityFunctionCheck`, a development tool that checks to see if the [result function] returns its own input.
+
+These updates aim to enhance flexibility, performance, and developer experience. For detailed usage and examples, refer to the updated documentation sections for each feature.
+
+- **Breaking Changes**:
+
+  - Removed `ParametricSelector` and `OutputParametricSelector` types. Their functionalities are now integrated into `Selector` and `OutputSelector` respectively, which inherently support additional parameters.
+
+<div align="right">[ <a href="installation">↑ Back to top ↑</a> ]</div>
+
+---
+
+## License
+
+MIT
+
+## References
+
+<details><summary><b>Click to Expand</b></summary>
+
+Originally inspired by getters in [NuclearJS](https://github.com/optimizely/nuclear-js.git), [subscriptions](https://github.com/Day8/re-frame#just-a-read-only-cursor) in [re-frame](https://github.com/Day8/re-frame) and this [proposal](https://github.com/reduxjs/redux/pull/169) from [speedskater](https://github.com/speedskater).
+
+[typescript-badge]: https://img.shields.io/badge/TypeScript-v4%2E7%2B-007ACC?style=for-the-badge&logo=TypeScript&logoColor=black&labelColor=blue&color=gray
+[build-badge]: https://img.shields.io/github/actions/workflow/status/reduxjs/reselect/build-and-test-types.yml?branch=master&style=for-the-badge
+[build]: https://github.com/reduxjs/reselect/actions/workflows/build-and-test-types.yml
+[npm-badge]: https://img.shields.io/npm/v/reselect.svg?style=for-the-badge
+[npm]: https://www.npmjs.org/package/reselect
+[coveralls-badge]: https://img.shields.io/coveralls/reduxjs/reselect/master.svg?style=for-the-badge
+[coveralls]: https://coveralls.io/github/reduxjs/reselect
+
+<!-- External Links -->
+
+[Redux]: https://redux.js.org 'Redux'
+[React]: https://react.dev 'React'
+[React-Redux]: https://react-redux.js.org 'React-Redux'
+
+<!-- Internal Links -->
+
+[selector]: #selector-function 'Selector Function'
+[input selectors]: #input-selectors 'Input Selectors'
+[output selector]: #output-selector 'Output Selector'
+[result function]: #result-function 'Result Function'
+[output selector fields]: https://reselect.js.org/api/createSelector#output-selector-fields 'Output Selector Fields'
+[`createSelector`]: https://reselect.js.org/api/createSelector 'createSelector'
+[`createSelectorCreator`]: https://reselect.js.org/api/createSelectorCreator 'createSelectorCreator'
+[`lruMemoize`]: https://reselect.js.org/api/lruMemoize 'lruMemoize'
+[`weakMapMemoize`]: https://reselect.js.org/api/weakMapMemoize 'weakMapMemoize'
+[`createStructuredSelector`]: https://reselect.js.org/api/createStructuredSelector 'createStructuredSelector'
+
+</details>
Index: node_modules/reselect/dist/cjs/reselect.cjs
===================================================================
--- node_modules/reselect/dist/cjs/reselect.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/dist/cjs/reselect.cjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,777 @@
+"use strict";
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// src/index.ts
+var src_exports = {};
+__export(src_exports, {
+  createSelector: () => createSelector,
+  createSelectorCreator: () => createSelectorCreator,
+  createStructuredSelector: () => createStructuredSelector,
+  lruMemoize: () => lruMemoize,
+  referenceEqualityCheck: () => referenceEqualityCheck,
+  setGlobalDevModeChecks: () => setGlobalDevModeChecks,
+  unstable_autotrackMemoize: () => autotrackMemoize,
+  weakMapMemoize: () => weakMapMemoize
+});
+module.exports = __toCommonJS(src_exports);
+
+// src/devModeChecks/identityFunctionCheck.ts
+var runIdentityFunctionCheck = (resultFunc, inputSelectorsResults, outputSelectorResult) => {
+  if (inputSelectorsResults.length === 1 && inputSelectorsResults[0] === outputSelectorResult) {
+    let isInputSameAsOutput = false;
+    try {
+      const emptyObject = {};
+      if (resultFunc(emptyObject) === emptyObject)
+        isInputSameAsOutput = true;
+    } catch {
+    }
+    if (isInputSameAsOutput) {
+      let stack = void 0;
+      try {
+        throw new Error();
+      } catch (e) {
+        ;
+        ({ stack } = e);
+      }
+      console.warn(
+        "The result function returned its own inputs without modification. e.g\n`createSelector([state => state.todos], todos => todos)`\nThis could lead to inefficient memoization and unnecessary re-renders.\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.",
+        { stack }
+      );
+    }
+  }
+};
+
+// src/devModeChecks/inputStabilityCheck.ts
+var runInputStabilityCheck = (inputSelectorResultsObject, options, inputSelectorArgs) => {
+  const { memoize, memoizeOptions } = options;
+  const { inputSelectorResults, inputSelectorResultsCopy } = inputSelectorResultsObject;
+  const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions);
+  const areInputSelectorResultsEqual = createAnEmptyObject.apply(null, inputSelectorResults) === createAnEmptyObject.apply(null, inputSelectorResultsCopy);
+  if (!areInputSelectorResultsEqual) {
+    let stack = void 0;
+    try {
+      throw new Error();
+    } catch (e) {
+      ;
+      ({ stack } = e);
+    }
+    console.warn(
+      "An input selector returned a different result when passed same arguments.\nThis means your output selector will likely run more frequently than intended.\nAvoid returning a new reference inside your input selector, e.g.\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`",
+      {
+        arguments: inputSelectorArgs,
+        firstInputs: inputSelectorResults,
+        secondInputs: inputSelectorResultsCopy,
+        stack
+      }
+    );
+  }
+};
+
+// src/devModeChecks/setGlobalDevModeChecks.ts
+var globalDevModeChecks = {
+  inputStabilityCheck: "once",
+  identityFunctionCheck: "once"
+};
+var setGlobalDevModeChecks = (devModeChecks) => {
+  Object.assign(globalDevModeChecks, devModeChecks);
+};
+
+// src/utils.ts
+var NOT_FOUND = /* @__PURE__ */ Symbol("NOT_FOUND");
+function assertIsFunction(func, errorMessage = `expected a function, instead received ${typeof func}`) {
+  if (typeof func !== "function") {
+    throw new TypeError(errorMessage);
+  }
+}
+function assertIsObject(object, errorMessage = `expected an object, instead received ${typeof object}`) {
+  if (typeof object !== "object") {
+    throw new TypeError(errorMessage);
+  }
+}
+function assertIsArrayOfFunctions(array, errorMessage = `expected all items to be functions, instead received the following types: `) {
+  if (!array.every((item) => typeof item === "function")) {
+    const itemTypes = array.map(
+      (item) => typeof item === "function" ? `function ${item.name || "unnamed"}()` : typeof item
+    ).join(", ");
+    throw new TypeError(`${errorMessage}[${itemTypes}]`);
+  }
+}
+var ensureIsArray = (item) => {
+  return Array.isArray(item) ? item : [item];
+};
+function getDependencies(createSelectorArgs) {
+  const dependencies = Array.isArray(createSelectorArgs[0]) ? createSelectorArgs[0] : createSelectorArgs;
+  assertIsArrayOfFunctions(
+    dependencies,
+    `createSelector expects all input-selectors to be functions, but received the following types: `
+  );
+  return dependencies;
+}
+function collectInputSelectorResults(dependencies, inputSelectorArgs) {
+  const inputSelectorResults = [];
+  const { length } = dependencies;
+  for (let i = 0; i < length; i++) {
+    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs));
+  }
+  return inputSelectorResults;
+}
+var getDevModeChecksExecutionInfo = (firstRun, devModeChecks) => {
+  const { identityFunctionCheck, inputStabilityCheck } = {
+    ...globalDevModeChecks,
+    ...devModeChecks
+  };
+  return {
+    identityFunctionCheck: {
+      shouldRun: identityFunctionCheck === "always" || identityFunctionCheck === "once" && firstRun,
+      run: runIdentityFunctionCheck
+    },
+    inputStabilityCheck: {
+      shouldRun: inputStabilityCheck === "always" || inputStabilityCheck === "once" && firstRun,
+      run: runInputStabilityCheck
+    }
+  };
+};
+
+// src/autotrackMemoize/autotracking.ts
+var $REVISION = 0;
+var CURRENT_TRACKER = null;
+var Cell = class {
+  revision = $REVISION;
+  _value;
+  _lastValue;
+  _isEqual = tripleEq;
+  constructor(initialValue, isEqual = tripleEq) {
+    this._value = this._lastValue = initialValue;
+    this._isEqual = isEqual;
+  }
+  // Whenever a storage value is read, it'll add itself to the current tracker if
+  // one exists, entangling its state with that cache.
+  get value() {
+    CURRENT_TRACKER?.add(this);
+    return this._value;
+  }
+  // Whenever a storage value is updated, we bump the global revision clock,
+  // assign the revision for this storage to the new value, _and_ we schedule a
+  // rerender. This is important, and it's what makes autotracking  _pull_
+  // based. We don't actively tell the caches which depend on the storage that
+  // anything has happened. Instead, we recompute the caches when needed.
+  set value(newValue) {
+    if (this.value === newValue)
+      return;
+    this._value = newValue;
+    this.revision = ++$REVISION;
+  }
+};
+function tripleEq(a, b) {
+  return a === b;
+}
+var TrackingCache = class {
+  _cachedValue;
+  _cachedRevision = -1;
+  _deps = [];
+  hits = 0;
+  fn;
+  constructor(fn) {
+    this.fn = fn;
+  }
+  clear() {
+    this._cachedValue = void 0;
+    this._cachedRevision = -1;
+    this._deps = [];
+    this.hits = 0;
+  }
+  get value() {
+    if (this.revision > this._cachedRevision) {
+      const { fn } = this;
+      const currentTracker = /* @__PURE__ */ new Set();
+      const prevTracker = CURRENT_TRACKER;
+      CURRENT_TRACKER = currentTracker;
+      this._cachedValue = fn();
+      CURRENT_TRACKER = prevTracker;
+      this.hits++;
+      this._deps = Array.from(currentTracker);
+      this._cachedRevision = this.revision;
+    }
+    CURRENT_TRACKER?.add(this);
+    return this._cachedValue;
+  }
+  get revision() {
+    return Math.max(...this._deps.map((d) => d.revision), 0);
+  }
+};
+function getValue(cell) {
+  if (!(cell instanceof Cell)) {
+    console.warn("Not a valid cell! ", cell);
+  }
+  return cell.value;
+}
+function setValue(storage, value) {
+  if (!(storage instanceof Cell)) {
+    throw new TypeError(
+      "setValue must be passed a tracked store created with `createStorage`."
+    );
+  }
+  storage.value = storage._lastValue = value;
+}
+function createCell(initialValue, isEqual = tripleEq) {
+  return new Cell(initialValue, isEqual);
+}
+function createCache(fn) {
+  assertIsFunction(
+    fn,
+    "the first parameter to `createCache` must be a function"
+  );
+  return new TrackingCache(fn);
+}
+
+// src/autotrackMemoize/tracking.ts
+var neverEq = (a, b) => false;
+function createTag() {
+  return createCell(null, neverEq);
+}
+function dirtyTag(tag, value) {
+  setValue(tag, value);
+}
+var consumeCollection = (node) => {
+  let tag = node.collectionTag;
+  if (tag === null) {
+    tag = node.collectionTag = createTag();
+  }
+  getValue(tag);
+};
+var dirtyCollection = (node) => {
+  const tag = node.collectionTag;
+  if (tag !== null) {
+    dirtyTag(tag, null);
+  }
+};
+
+// src/autotrackMemoize/proxy.ts
+var REDUX_PROXY_LABEL = Symbol();
+var nextId = 0;
+var proto = Object.getPrototypeOf({});
+var ObjectTreeNode = class {
+  constructor(value) {
+    this.value = value;
+    this.value = value;
+    this.tag.value = value;
+  }
+  proxy = new Proxy(this, objectProxyHandler);
+  tag = createTag();
+  tags = {};
+  children = {};
+  collectionTag = null;
+  id = nextId++;
+};
+var objectProxyHandler = {
+  get(node, key) {
+    function calculateResult() {
+      const { value } = node;
+      const childValue = Reflect.get(value, key);
+      if (typeof key === "symbol") {
+        return childValue;
+      }
+      if (key in proto) {
+        return childValue;
+      }
+      if (typeof childValue === "object" && childValue !== null) {
+        let childNode = node.children[key];
+        if (childNode === void 0) {
+          childNode = node.children[key] = createNode(childValue);
+        }
+        if (childNode.tag) {
+          getValue(childNode.tag);
+        }
+        return childNode.proxy;
+      } else {
+        let tag = node.tags[key];
+        if (tag === void 0) {
+          tag = node.tags[key] = createTag();
+          tag.value = childValue;
+        }
+        getValue(tag);
+        return childValue;
+      }
+    }
+    const res = calculateResult();
+    return res;
+  },
+  ownKeys(node) {
+    consumeCollection(node);
+    return Reflect.ownKeys(node.value);
+  },
+  getOwnPropertyDescriptor(node, prop) {
+    return Reflect.getOwnPropertyDescriptor(node.value, prop);
+  },
+  has(node, prop) {
+    return Reflect.has(node.value, prop);
+  }
+};
+var ArrayTreeNode = class {
+  constructor(value) {
+    this.value = value;
+    this.value = value;
+    this.tag.value = value;
+  }
+  proxy = new Proxy([this], arrayProxyHandler);
+  tag = createTag();
+  tags = {};
+  children = {};
+  collectionTag = null;
+  id = nextId++;
+};
+var arrayProxyHandler = {
+  get([node], key) {
+    if (key === "length") {
+      consumeCollection(node);
+    }
+    return objectProxyHandler.get(node, key);
+  },
+  ownKeys([node]) {
+    return objectProxyHandler.ownKeys(node);
+  },
+  getOwnPropertyDescriptor([node], prop) {
+    return objectProxyHandler.getOwnPropertyDescriptor(node, prop);
+  },
+  has([node], prop) {
+    return objectProxyHandler.has(node, prop);
+  }
+};
+function createNode(value) {
+  if (Array.isArray(value)) {
+    return new ArrayTreeNode(value);
+  }
+  return new ObjectTreeNode(value);
+}
+function updateNode(node, newValue) {
+  const { value, tags, children } = node;
+  node.value = newValue;
+  if (Array.isArray(value) && Array.isArray(newValue) && value.length !== newValue.length) {
+    dirtyCollection(node);
+  } else {
+    if (value !== newValue) {
+      let oldKeysSize = 0;
+      let newKeysSize = 0;
+      let anyKeysAdded = false;
+      for (const _key in value) {
+        oldKeysSize++;
+      }
+      for (const key in newValue) {
+        newKeysSize++;
+        if (!(key in value)) {
+          anyKeysAdded = true;
+          break;
+        }
+      }
+      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize;
+      if (isDifferent) {
+        dirtyCollection(node);
+      }
+    }
+  }
+  for (const key in tags) {
+    const childValue = value[key];
+    const newChildValue = newValue[key];
+    if (childValue !== newChildValue) {
+      dirtyCollection(node);
+      dirtyTag(tags[key], newChildValue);
+    }
+    if (typeof newChildValue === "object" && newChildValue !== null) {
+      delete tags[key];
+    }
+  }
+  for (const key in children) {
+    const childNode = children[key];
+    const newChildValue = newValue[key];
+    const childValue = childNode.value;
+    if (childValue === newChildValue) {
+      continue;
+    } else if (typeof newChildValue === "object" && newChildValue !== null) {
+      updateNode(childNode, newChildValue);
+    } else {
+      deleteNode(childNode);
+      delete children[key];
+    }
+  }
+}
+function deleteNode(node) {
+  if (node.tag) {
+    dirtyTag(node.tag, null);
+  }
+  dirtyCollection(node);
+  for (const key in node.tags) {
+    dirtyTag(node.tags[key], null);
+  }
+  for (const key in node.children) {
+    deleteNode(node.children[key]);
+  }
+}
+
+// src/lruMemoize.ts
+function createSingletonCache(equals) {
+  let entry;
+  return {
+    get(key) {
+      if (entry && equals(entry.key, key)) {
+        return entry.value;
+      }
+      return NOT_FOUND;
+    },
+    put(key, value) {
+      entry = { key, value };
+    },
+    getEntries() {
+      return entry ? [entry] : [];
+    },
+    clear() {
+      entry = void 0;
+    }
+  };
+}
+function createLruCache(maxSize, equals) {
+  let entries = [];
+  function get(key) {
+    const cacheIndex = entries.findIndex((entry) => equals(key, entry.key));
+    if (cacheIndex > -1) {
+      const entry = entries[cacheIndex];
+      if (cacheIndex > 0) {
+        entries.splice(cacheIndex, 1);
+        entries.unshift(entry);
+      }
+      return entry.value;
+    }
+    return NOT_FOUND;
+  }
+  function put(key, value) {
+    if (get(key) === NOT_FOUND) {
+      entries.unshift({ key, value });
+      if (entries.length > maxSize) {
+        entries.pop();
+      }
+    }
+  }
+  function getEntries() {
+    return entries;
+  }
+  function clear() {
+    entries = [];
+  }
+  return { get, put, getEntries, clear };
+}
+var referenceEqualityCheck = (a, b) => a === b;
+function createCacheKeyComparator(equalityCheck) {
+  return function areArgumentsShallowlyEqual(prev, next) {
+    if (prev === null || next === null || prev.length !== next.length) {
+      return false;
+    }
+    const { length } = prev;
+    for (let i = 0; i < length; i++) {
+      if (!equalityCheck(prev[i], next[i])) {
+        return false;
+      }
+    }
+    return true;
+  };
+}
+function lruMemoize(func, equalityCheckOrOptions) {
+  const providedOptions = typeof equalityCheckOrOptions === "object" ? equalityCheckOrOptions : { equalityCheck: equalityCheckOrOptions };
+  const {
+    equalityCheck = referenceEqualityCheck,
+    maxSize = 1,
+    resultEqualityCheck
+  } = providedOptions;
+  const comparator = createCacheKeyComparator(equalityCheck);
+  let resultsCount = 0;
+  const cache = maxSize <= 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);
+  function memoized() {
+    let value = cache.get(arguments);
+    if (value === NOT_FOUND) {
+      value = func.apply(null, arguments);
+      resultsCount++;
+      if (resultEqualityCheck) {
+        const entries = cache.getEntries();
+        const matchingEntry = entries.find(
+          (entry) => resultEqualityCheck(entry.value, value)
+        );
+        if (matchingEntry) {
+          value = matchingEntry.value;
+          resultsCount !== 0 && resultsCount--;
+        }
+      }
+      cache.put(arguments, value);
+    }
+    return value;
+  }
+  memoized.clearCache = () => {
+    cache.clear();
+    memoized.resetResultsCount();
+  };
+  memoized.resultsCount = () => resultsCount;
+  memoized.resetResultsCount = () => {
+    resultsCount = 0;
+  };
+  return memoized;
+}
+
+// src/autotrackMemoize/autotrackMemoize.ts
+function autotrackMemoize(func) {
+  const node = createNode(
+    []
+  );
+  let lastArgs = null;
+  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck);
+  const cache = createCache(() => {
+    const res = func.apply(null, node.proxy);
+    return res;
+  });
+  function memoized() {
+    if (!shallowEqual(lastArgs, arguments)) {
+      updateNode(node, arguments);
+      lastArgs = arguments;
+    }
+    return cache.value;
+  }
+  memoized.clearCache = () => {
+    return cache.clear();
+  };
+  return memoized;
+}
+
+// src/weakMapMemoize.ts
+var StrongRef = class {
+  constructor(value) {
+    this.value = value;
+  }
+  deref() {
+    return this.value;
+  }
+};
+var Ref = typeof WeakRef !== "undefined" ? WeakRef : StrongRef;
+var UNTERMINATED = 0;
+var TERMINATED = 1;
+function createCacheNode() {
+  return {
+    s: UNTERMINATED,
+    v: void 0,
+    o: null,
+    p: null
+  };
+}
+function weakMapMemoize(func, options = {}) {
+  let fnNode = createCacheNode();
+  const { resultEqualityCheck } = options;
+  let lastResult;
+  let resultsCount = 0;
+  function memoized() {
+    let cacheNode = fnNode;
+    const { length } = arguments;
+    for (let i = 0, l = length; i < l; i++) {
+      const arg = arguments[i];
+      if (typeof arg === "function" || typeof arg === "object" && arg !== null) {
+        let objectCache = cacheNode.o;
+        if (objectCache === null) {
+          cacheNode.o = objectCache = /* @__PURE__ */ new WeakMap();
+        }
+        const objectNode = objectCache.get(arg);
+        if (objectNode === void 0) {
+          cacheNode = createCacheNode();
+          objectCache.set(arg, cacheNode);
+        } else {
+          cacheNode = objectNode;
+        }
+      } else {
+        let primitiveCache = cacheNode.p;
+        if (primitiveCache === null) {
+          cacheNode.p = primitiveCache = /* @__PURE__ */ new Map();
+        }
+        const primitiveNode = primitiveCache.get(arg);
+        if (primitiveNode === void 0) {
+          cacheNode = createCacheNode();
+          primitiveCache.set(arg, cacheNode);
+        } else {
+          cacheNode = primitiveNode;
+        }
+      }
+    }
+    const terminatedNode = cacheNode;
+    let result;
+    if (cacheNode.s === TERMINATED) {
+      result = cacheNode.v;
+    } else {
+      result = func.apply(null, arguments);
+      resultsCount++;
+      if (resultEqualityCheck) {
+        const lastResultValue = lastResult?.deref?.() ?? lastResult;
+        if (lastResultValue != null && resultEqualityCheck(lastResultValue, result)) {
+          result = lastResultValue;
+          resultsCount !== 0 && resultsCount--;
+        }
+        const needsWeakRef = typeof result === "object" && result !== null || typeof result === "function";
+        lastResult = needsWeakRef ? new Ref(result) : result;
+      }
+    }
+    terminatedNode.s = TERMINATED;
+    terminatedNode.v = result;
+    return result;
+  }
+  memoized.clearCache = () => {
+    fnNode = createCacheNode();
+    memoized.resetResultsCount();
+  };
+  memoized.resultsCount = () => resultsCount;
+  memoized.resetResultsCount = () => {
+    resultsCount = 0;
+  };
+  return memoized;
+}
+
+// src/createSelectorCreator.ts
+function createSelectorCreator(memoizeOrOptions, ...memoizeOptionsFromArgs) {
+  const createSelectorCreatorOptions = typeof memoizeOrOptions === "function" ? {
+    memoize: memoizeOrOptions,
+    memoizeOptions: memoizeOptionsFromArgs
+  } : memoizeOrOptions;
+  const createSelector2 = (...createSelectorArgs) => {
+    let recomputations = 0;
+    let dependencyRecomputations = 0;
+    let lastResult;
+    let directlyPassedOptions = {};
+    let resultFunc = createSelectorArgs.pop();
+    if (typeof resultFunc === "object") {
+      directlyPassedOptions = resultFunc;
+      resultFunc = createSelectorArgs.pop();
+    }
+    assertIsFunction(
+      resultFunc,
+      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`
+    );
+    const combinedOptions = {
+      ...createSelectorCreatorOptions,
+      ...directlyPassedOptions
+    };
+    const {
+      memoize,
+      memoizeOptions = [],
+      argsMemoize = weakMapMemoize,
+      argsMemoizeOptions = [],
+      devModeChecks = {}
+    } = combinedOptions;
+    const finalMemoizeOptions = ensureIsArray(memoizeOptions);
+    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions);
+    const dependencies = getDependencies(createSelectorArgs);
+    const memoizedResultFunc = memoize(function recomputationWrapper() {
+      recomputations++;
+      return resultFunc.apply(
+        null,
+        arguments
+      );
+    }, ...finalMemoizeOptions);
+    let firstRun = true;
+    const selector = argsMemoize(function dependenciesChecker() {
+      dependencyRecomputations++;
+      const inputSelectorResults = collectInputSelectorResults(
+        dependencies,
+        arguments
+      );
+      lastResult = memoizedResultFunc.apply(null, inputSelectorResults);
+      if (process.env.NODE_ENV !== "production") {
+        const { identityFunctionCheck, inputStabilityCheck } = getDevModeChecksExecutionInfo(firstRun, devModeChecks);
+        if (identityFunctionCheck.shouldRun) {
+          identityFunctionCheck.run(
+            resultFunc,
+            inputSelectorResults,
+            lastResult
+          );
+        }
+        if (inputStabilityCheck.shouldRun) {
+          const inputSelectorResultsCopy = collectInputSelectorResults(
+            dependencies,
+            arguments
+          );
+          inputStabilityCheck.run(
+            { inputSelectorResults, inputSelectorResultsCopy },
+            { memoize, memoizeOptions: finalMemoizeOptions },
+            arguments
+          );
+        }
+        if (firstRun)
+          firstRun = false;
+      }
+      return lastResult;
+    }, ...finalArgsMemoizeOptions);
+    return Object.assign(selector, {
+      resultFunc,
+      memoizedResultFunc,
+      dependencies,
+      dependencyRecomputations: () => dependencyRecomputations,
+      resetDependencyRecomputations: () => {
+        dependencyRecomputations = 0;
+      },
+      lastResult: () => lastResult,
+      recomputations: () => recomputations,
+      resetRecomputations: () => {
+        recomputations = 0;
+      },
+      memoize,
+      argsMemoize
+    });
+  };
+  Object.assign(createSelector2, {
+    withTypes: () => createSelector2
+  });
+  return createSelector2;
+}
+var createSelector = /* @__PURE__ */ createSelectorCreator(weakMapMemoize);
+
+// src/createStructuredSelector.ts
+var createStructuredSelector = Object.assign(
+  (inputSelectorsObject, selectorCreator = createSelector) => {
+    assertIsObject(
+      inputSelectorsObject,
+      `createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof inputSelectorsObject}`
+    );
+    const inputSelectorKeys = Object.keys(inputSelectorsObject);
+    const dependencies = inputSelectorKeys.map(
+      (key) => inputSelectorsObject[key]
+    );
+    const structuredSelector = selectorCreator(
+      dependencies,
+      (...inputSelectorResults) => {
+        return inputSelectorResults.reduce((composition, value, index) => {
+          composition[inputSelectorKeys[index]] = value;
+          return composition;
+        }, {});
+      }
+    );
+    return structuredSelector;
+  },
+  { withTypes: () => createStructuredSelector }
+);
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  createSelector,
+  createSelectorCreator,
+  createStructuredSelector,
+  lruMemoize,
+  referenceEqualityCheck,
+  setGlobalDevModeChecks,
+  unstable_autotrackMemoize,
+  weakMapMemoize
+});
+//# sourceMappingURL=reselect.cjs.map
Index: node_modules/reselect/dist/cjs/reselect.cjs.map
===================================================================
--- node_modules/reselect/dist/cjs/reselect.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/dist/cjs/reselect.cjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../../src/index.ts","../../src/devModeChecks/identityFunctionCheck.ts","../../src/devModeChecks/inputStabilityCheck.ts","../../src/devModeChecks/setGlobalDevModeChecks.ts","../../src/utils.ts","../../src/autotrackMemoize/autotracking.ts","../../src/autotrackMemoize/tracking.ts","../../src/autotrackMemoize/proxy.ts","../../src/lruMemoize.ts","../../src/autotrackMemoize/autotrackMemoize.ts","../../src/weakMapMemoize.ts","../../src/createSelectorCreator.ts","../../src/createStructuredSelector.ts"],"sourcesContent":["export { autotrackMemoize as unstable_autotrackMemoize } from './autotrackMemoize/autotrackMemoize'\r\nexport { createSelector, createSelectorCreator } from './createSelectorCreator'\r\nexport type { CreateSelectorFunction } from './createSelectorCreator'\r\nexport { createStructuredSelector } from './createStructuredSelector'\r\nexport type {\r\n  RootStateSelectors,\r\n  SelectorResultsMap,\r\n  SelectorsObject,\r\n  StructuredSelectorCreator,\r\n  TypedStructuredSelectorCreator\r\n} from './createStructuredSelector'\r\nexport { setGlobalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'\r\nexport { lruMemoize, referenceEqualityCheck } from './lruMemoize'\r\nexport type { LruMemoizeOptions } from './lruMemoize'\r\nexport type {\r\n  Combiner,\r\n  CreateSelectorOptions,\r\n  DefaultMemoizeFields,\r\n  DevModeCheckFrequency,\r\n  DevModeChecks,\r\n  DevModeChecksExecutionInfo,\r\n  EqualityFn,\r\n  ExtractMemoizerFields,\r\n  GetParamsFromSelectors,\r\n  GetStateFromSelectors,\r\n  MemoizeOptionsFromParameters,\r\n  OutputSelector,\r\n  OutputSelectorFields,\r\n  OverrideMemoizeOptions,\r\n  Selector,\r\n  SelectorArray,\r\n  SelectorResultArray,\r\n  UnknownMemoizer\r\n} from './types'\r\nexport { weakMapMemoize } from './weakMapMemoize'\r\nexport type { WeakMapMemoizeOptions } from './weakMapMemoize'\r\n","import type { AnyFunction } from '../types'\r\n\r\n/**\r\n * Runs a check to determine if the given result function behaves as an\r\n * identity function. An identity function is one that returns its\r\n * input unchanged, for example, `x => x`. This check helps ensure\r\n * efficient memoization and prevent unnecessary re-renders by encouraging\r\n * proper use of transformation logic in result functions and\r\n * extraction logic in input selectors.\r\n *\r\n * @param resultFunc - The result function to be checked.\r\n * @param inputSelectorsResults - The results of the input selectors.\r\n * @param outputSelectorResult - The result of the output selector.\r\n *\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#identityfunctioncheck `identityFunctionCheck`}\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const runIdentityFunctionCheck = (\r\n  resultFunc: AnyFunction,\r\n  inputSelectorsResults: unknown[],\r\n  outputSelectorResult: unknown\r\n) => {\r\n  if (\r\n    inputSelectorsResults.length === 1 &&\r\n    inputSelectorsResults[0] === outputSelectorResult\r\n  ) {\r\n    let isInputSameAsOutput = false\r\n    try {\r\n      const emptyObject = {}\r\n      if (resultFunc(emptyObject) === emptyObject) isInputSameAsOutput = true\r\n    } catch {\r\n      // Do nothing\r\n    }\r\n    if (isInputSameAsOutput) {\r\n      let stack: string | undefined = undefined\r\n      try {\r\n        throw new Error()\r\n      } catch (e) {\r\n        // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi\r\n        ;({ stack } = e as Error)\r\n      }\r\n      console.warn(\r\n        'The result function returned its own inputs without modification. e.g' +\r\n          '\\n`createSelector([state => state.todos], todos => todos)`' +\r\n          '\\nThis could lead to inefficient memoization and unnecessary re-renders.' +\r\n          '\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.',\r\n        { stack }\r\n      )\r\n    }\r\n  }\r\n}\r\n","import type { CreateSelectorOptions, UnknownMemoizer } from '../types'\r\n\r\n/**\r\n * Runs a stability check to ensure the input selector results remain stable\r\n * when provided with the same arguments. This function is designed to detect\r\n * changes in the output of input selectors, which can impact the performance of memoized selectors.\r\n *\r\n * @param inputSelectorResultsObject - An object containing two arrays: `inputSelectorResults` and `inputSelectorResultsCopy`, representing the results of input selectors.\r\n * @param options - Options object consisting of a `memoize` function and a `memoizeOptions` object.\r\n * @param inputSelectorArgs - List of arguments being passed to the input selectors.\r\n *\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks/#inputstabilitycheck `inputStabilityCheck`}\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const runInputStabilityCheck = (\r\n  inputSelectorResultsObject: {\r\n    inputSelectorResults: unknown[]\r\n    inputSelectorResultsCopy: unknown[]\r\n  },\r\n  options: Required<\r\n    Pick<\r\n      CreateSelectorOptions<UnknownMemoizer, UnknownMemoizer>,\r\n      'memoize' | 'memoizeOptions'\r\n    >\r\n  >,\r\n  inputSelectorArgs: unknown[] | IArguments\r\n) => {\r\n  const { memoize, memoizeOptions } = options\r\n  const { inputSelectorResults, inputSelectorResultsCopy } =\r\n    inputSelectorResultsObject\r\n  const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions)\r\n  // if the memoize method thinks the parameters are equal, these *should* be the same reference\r\n  const areInputSelectorResultsEqual =\r\n    createAnEmptyObject.apply(null, inputSelectorResults) ===\r\n    createAnEmptyObject.apply(null, inputSelectorResultsCopy)\r\n  if (!areInputSelectorResultsEqual) {\r\n    let stack: string | undefined = undefined\r\n    try {\r\n      throw new Error()\r\n    } catch (e) {\r\n      // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi\r\n      ;({ stack } = e as Error)\r\n    }\r\n    console.warn(\r\n      'An input selector returned a different result when passed same arguments.' +\r\n        '\\nThis means your output selector will likely run more frequently than intended.' +\r\n        '\\nAvoid returning a new reference inside your input selector, e.g.' +\r\n        '\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`',\r\n      {\r\n        arguments: inputSelectorArgs,\r\n        firstInputs: inputSelectorResults,\r\n        secondInputs: inputSelectorResultsCopy,\r\n        stack\r\n      }\r\n    )\r\n  }\r\n}\r\n","import type { DevModeChecks } from '../types'\r\n\r\n/**\r\n * Global configuration for development mode checks. This specifies the default\r\n * frequency at which each development mode check should be performed.\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const globalDevModeChecks: DevModeChecks = {\r\n  inputStabilityCheck: 'once',\r\n  identityFunctionCheck: 'once'\r\n}\r\n\r\n/**\r\n * Overrides the development mode checks settings for all selectors.\r\n *\r\n * Reselect performs additional checks in development mode to help identify and\r\n * warn about potential issues in selector behavior. This function allows you to\r\n * customize the behavior of these checks across all selectors in your application.\r\n *\r\n * **Note**: This setting can still be overridden per selector inside `createSelector`'s `options` object.\r\n * See {@link https://github.com/reduxjs/reselect#2-per-selector-by-passing-an-identityfunctioncheck-option-directly-to-createselector per-selector-configuration}\r\n * and {@linkcode CreateSelectorOptions.identityFunctionCheck identityFunctionCheck} for more details.\r\n *\r\n * _The development mode checks do not run in production builds._\r\n *\r\n * @param devModeChecks - An object specifying the desired settings for development mode checks. You can provide partial overrides. Unspecified settings will retain their current values.\r\n *\r\n * @example\r\n * ```ts\r\n * import { setGlobalDevModeChecks } from 'reselect'\r\n * import { DevModeChecks } from '../types'\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'always' })\r\n *\r\n * // Never run the input stability check.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'never' })\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'always' })\r\n *\r\n * // Never run the identity function check.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'never' })\r\n * ```\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#1-globally-through-setglobaldevmodechecks global-configuration}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport const setGlobalDevModeChecks = (\r\n  devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n  Object.assign(globalDevModeChecks, devModeChecks)\r\n}\r\n","import { runIdentityFunctionCheck } from './devModeChecks/identityFunctionCheck'\r\nimport { runInputStabilityCheck } from './devModeChecks/inputStabilityCheck'\r\nimport { globalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'\r\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\r\nimport type {\r\n  DevModeChecks,\r\n  Selector,\r\n  SelectorArray,\r\n  DevModeChecksExecutionInfo\r\n} from './types'\r\n\r\nexport const NOT_FOUND = /* @__PURE__ */ Symbol('NOT_FOUND')\r\nexport type NOT_FOUND_TYPE = typeof NOT_FOUND\r\n\r\n/**\r\n * Assert that the provided value is a function. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param func - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsFunction<FunctionType extends Function>(\r\n  func: unknown,\r\n  errorMessage = `expected a function, instead received ${typeof func}`\r\n): asserts func is FunctionType {\r\n  if (typeof func !== 'function') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided value is an object. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param object - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsObject<ObjectType extends Record<string, unknown>>(\r\n  object: unknown,\r\n  errorMessage = `expected an object, instead received ${typeof object}`\r\n): asserts object is ObjectType {\r\n  if (typeof object !== 'object') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided array is an array of functions. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param array - The array to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsArrayOfFunctions<FunctionType extends Function>(\r\n  array: unknown[],\r\n  errorMessage = `expected all items to be functions, instead received the following types: `\r\n): asserts array is FunctionType[] {\r\n  if (\r\n    !array.every((item): item is FunctionType => typeof item === 'function')\r\n  ) {\r\n    const itemTypes = array\r\n      .map(item =>\r\n        typeof item === 'function'\r\n          ? `function ${item.name || 'unnamed'}()`\r\n          : typeof item\r\n      )\r\n      .join(', ')\r\n    throw new TypeError(`${errorMessage}[${itemTypes}]`)\r\n  }\r\n}\r\n\r\n/**\r\n * Ensure that the input is an array. If it's already an array, it's returned as is.\r\n * If it's not an array, it will be wrapped in a new array.\r\n *\r\n * @param item - The item to be checked.\r\n * @returns An array containing the input item. If the input is already an array, it's returned without modification.\r\n */\r\nexport const ensureIsArray = (item: unknown) => {\r\n  return Array.isArray(item) ? item : [item]\r\n}\r\n\r\n/**\r\n * Extracts the \"dependencies\" / \"input selectors\" from the arguments of `createSelector`.\r\n *\r\n * @param createSelectorArgs - Arguments passed to `createSelector` as an array.\r\n * @returns An array of \"input selectors\" / \"dependencies\".\r\n * @throws A `TypeError` if any of the input selectors is not function.\r\n */\r\nexport function getDependencies(createSelectorArgs: unknown[]) {\r\n  const dependencies = Array.isArray(createSelectorArgs[0])\r\n    ? createSelectorArgs[0]\r\n    : createSelectorArgs\r\n\r\n  assertIsArrayOfFunctions<Selector>(\r\n    dependencies,\r\n    `createSelector expects all input-selectors to be functions, but received the following types: `\r\n  )\r\n\r\n  return dependencies as SelectorArray\r\n}\r\n\r\n/**\r\n * Runs each input selector and returns their collective results as an array.\r\n *\r\n * @param dependencies - An array of \"dependencies\" or \"input selectors\".\r\n * @param inputSelectorArgs - An array of arguments being passed to the input selectors.\r\n * @returns An array of input selector results.\r\n */\r\nexport function collectInputSelectorResults(\r\n  dependencies: SelectorArray,\r\n  inputSelectorArgs: unknown[] | IArguments\r\n) {\r\n  const inputSelectorResults = []\r\n  const { length } = dependencies\r\n  for (let i = 0; i < length; i++) {\r\n    // @ts-ignore\r\n    // apply arguments instead of spreading and mutate a local list of params for performance.\r\n    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs))\r\n  }\r\n  return inputSelectorResults\r\n}\r\n\r\n/**\r\n * Retrieves execution information for development mode checks.\r\n *\r\n * @param devModeChecks - Custom Settings for development mode checks. These settings will override the global defaults.\r\n * @param firstRun - Indicates whether it is the first time the selector has run.\r\n * @returns  An object containing the execution information for each development mode check.\r\n */\r\nexport const getDevModeChecksExecutionInfo = (\r\n  firstRun: boolean,\r\n  devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n  const { identityFunctionCheck, inputStabilityCheck } = {\r\n    ...globalDevModeChecks,\r\n    ...devModeChecks\r\n  }\r\n  return {\r\n    identityFunctionCheck: {\r\n      shouldRun:\r\n        identityFunctionCheck === 'always' ||\r\n        (identityFunctionCheck === 'once' && firstRun),\r\n      run: runIdentityFunctionCheck\r\n    },\r\n    inputStabilityCheck: {\r\n      shouldRun:\r\n        inputStabilityCheck === 'always' ||\r\n        (inputStabilityCheck === 'once' && firstRun),\r\n      run: runInputStabilityCheck\r\n    }\r\n  } satisfies DevModeChecksExecutionInfo\r\n}\r\n","// Original autotracking implementation source:\r\n// - https://gist.github.com/pzuraq/79bf862e0f8cd9521b79c4b6eccdc4f9\r\n// Additional references:\r\n// - https://www.pzuraq.com/blog/how-autotracking-works\r\n// - https://v5.chriskrycho.com/journal/autotracking-elegant-dx-via-cutting-edge-cs/\r\nimport type { EqualityFn } from '../types'\r\nimport { assertIsFunction } from '../utils'\r\n\r\n// The global revision clock. Every time state changes, the clock increments.\r\nexport let $REVISION = 0\r\n\r\n// The current dependency tracker. Whenever we compute a cache, we create a Set\r\n// to track any dependencies that are used while computing. If no cache is\r\n// computing, then the tracker is null.\r\nlet CURRENT_TRACKER: Set<Cell<any> | TrackingCache> | null = null\r\n\r\n// Storage represents a root value in the system - the actual state of our app.\r\nexport class Cell<T> {\r\n  revision = $REVISION\r\n\r\n  _value: T\r\n  _lastValue: T\r\n  _isEqual: EqualityFn = tripleEq\r\n\r\n  constructor(initialValue: T, isEqual: EqualityFn = tripleEq) {\r\n    this._value = this._lastValue = initialValue\r\n    this._isEqual = isEqual\r\n  }\r\n\r\n  // Whenever a storage value is read, it'll add itself to the current tracker if\r\n  // one exists, entangling its state with that cache.\r\n  get value() {\r\n    CURRENT_TRACKER?.add(this)\r\n\r\n    return this._value\r\n  }\r\n\r\n  // Whenever a storage value is updated, we bump the global revision clock,\r\n  // assign the revision for this storage to the new value, _and_ we schedule a\r\n  // rerender. This is important, and it's what makes autotracking  _pull_\r\n  // based. We don't actively tell the caches which depend on the storage that\r\n  // anything has happened. Instead, we recompute the caches when needed.\r\n  set value(newValue) {\r\n    if (this.value === newValue) return\r\n\r\n    this._value = newValue\r\n    this.revision = ++$REVISION\r\n  }\r\n}\r\n\r\nfunction tripleEq(a: unknown, b: unknown) {\r\n  return a === b\r\n}\r\n\r\n// Caches represent derived state in the system. They are ultimately functions\r\n// that are memoized based on what state they use to produce their output,\r\n// meaning they will only rerun IFF a storage value that could affect the output\r\n// has changed. Otherwise, they'll return the cached value.\r\nexport class TrackingCache {\r\n  _cachedValue: any\r\n  _cachedRevision = -1\r\n  _deps: any[] = []\r\n  hits = 0\r\n\r\n  fn: () => any\r\n\r\n  constructor(fn: () => any) {\r\n    this.fn = fn\r\n  }\r\n\r\n  clear() {\r\n    this._cachedValue = undefined\r\n    this._cachedRevision = -1\r\n    this._deps = []\r\n    this.hits = 0\r\n  }\r\n\r\n  get value() {\r\n    // When getting the value for a Cache, first we check all the dependencies of\r\n    // the cache to see what their current revision is. If the current revision is\r\n    // greater than the cached revision, then something has changed.\r\n    if (this.revision > this._cachedRevision) {\r\n      const { fn } = this\r\n\r\n      // We create a new dependency tracker for this cache. As the cache runs\r\n      // its function, any Storage or Cache instances which are used while\r\n      // computing will be added to this tracker. In the end, it will be the\r\n      // full list of dependencies that this Cache depends on.\r\n      const currentTracker = new Set<Cell<any>>()\r\n      const prevTracker = CURRENT_TRACKER\r\n\r\n      CURRENT_TRACKER = currentTracker\r\n\r\n      // try {\r\n      this._cachedValue = fn()\r\n      // } finally {\r\n      CURRENT_TRACKER = prevTracker\r\n      this.hits++\r\n      this._deps = Array.from(currentTracker)\r\n\r\n      // Set the cached revision. This is the current clock count of all the\r\n      // dependencies. If any dependency changes, this number will be less\r\n      // than the new revision.\r\n      this._cachedRevision = this.revision\r\n      // }\r\n    }\r\n\r\n    // If there is a current tracker, it means another Cache is computing and\r\n    // using this one, so we add this one to the tracker.\r\n    CURRENT_TRACKER?.add(this)\r\n\r\n    // Always return the cached value.\r\n    return this._cachedValue\r\n  }\r\n\r\n  get revision() {\r\n    // The current revision is the max of all the dependencies' revisions.\r\n    return Math.max(...this._deps.map(d => d.revision), 0)\r\n  }\r\n}\r\n\r\nexport function getValue<T>(cell: Cell<T>): T {\r\n  if (!(cell instanceof Cell)) {\r\n    console.warn('Not a valid cell! ', cell)\r\n  }\r\n\r\n  return cell.value\r\n}\r\n\r\ntype CellValue<T extends Cell<unknown>> = T extends Cell<infer U> ? U : never\r\n\r\nexport function setValue<T extends Cell<unknown>>(\r\n  storage: T,\r\n  value: CellValue<T>\r\n): void {\r\n  if (!(storage instanceof Cell)) {\r\n    throw new TypeError(\r\n      'setValue must be passed a tracked store created with `createStorage`.'\r\n    )\r\n  }\r\n\r\n  storage.value = storage._lastValue = value\r\n}\r\n\r\nexport function createCell<T = unknown>(\r\n  initialValue: T,\r\n  isEqual: EqualityFn = tripleEq\r\n): Cell<T> {\r\n  return new Cell(initialValue, isEqual)\r\n}\r\n\r\nexport function createCache<T = unknown>(fn: () => T): TrackingCache {\r\n  assertIsFunction(\r\n    fn,\r\n    'the first parameter to `createCache` must be a function'\r\n  )\r\n\r\n  return new TrackingCache(fn)\r\n}\r\n","import type { Cell } from './autotracking'\r\nimport {\r\n  getValue as consumeTag,\r\n  createCell as createStorage,\r\n  setValue\r\n} from './autotracking'\r\n\r\nexport type Tag = Cell<unknown>\r\n\r\nconst neverEq = (a: any, b: any): boolean => false\r\n\r\nexport function createTag(): Tag {\r\n  return createStorage(null, neverEq)\r\n}\r\nexport { consumeTag }\r\nexport function dirtyTag(tag: Tag, value: any): void {\r\n  setValue(tag, value)\r\n}\r\n\r\nexport interface Node<\r\n  T extends Array<unknown> | Record<string, unknown> =\r\n    | Array<unknown>\r\n    | Record<string, unknown>\r\n> {\r\n  collectionTag: Tag | null\r\n  tag: Tag | null\r\n  tags: Record<string, Tag>\r\n  children: Record<string, Node>\r\n  proxy: T\r\n  value: T\r\n  id: number\r\n}\r\n\r\nexport const consumeCollection = (node: Node): void => {\r\n  let tag = node.collectionTag\r\n\r\n  if (tag === null) {\r\n    tag = node.collectionTag = createTag()\r\n  }\r\n\r\n  consumeTag(tag)\r\n}\r\n\r\nexport const dirtyCollection = (node: Node): void => {\r\n  const tag = node.collectionTag\r\n\r\n  if (tag !== null) {\r\n    dirtyTag(tag, null)\r\n  }\r\n}\r\n","// Original source:\r\n// - https://github.com/simonihmig/tracked-redux/blob/master/packages/tracked-redux/src/-private/proxy.ts\r\n\r\nimport type { Node, Tag } from './tracking'\r\nimport {\r\n  consumeCollection,\r\n  consumeTag,\r\n  createTag,\r\n  dirtyCollection,\r\n  dirtyTag\r\n} from './tracking'\r\n\r\nexport const REDUX_PROXY_LABEL = Symbol()\r\n\r\nlet nextId = 0\r\n\r\nconst proto = Object.getPrototypeOf({})\r\n\r\nclass ObjectTreeNode<T extends Record<string, unknown>> implements Node<T> {\r\n  proxy: T = new Proxy(this, objectProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {} as Record<string, Tag>\r\n  children = {} as Record<string, Node>\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst objectProxyHandler = {\r\n  get(node: Node, key: string | symbol): unknown {\r\n    function calculateResult() {\r\n      const { value } = node\r\n\r\n      const childValue = Reflect.get(value, key)\r\n\r\n      if (typeof key === 'symbol') {\r\n        return childValue\r\n      }\r\n\r\n      if (key in proto) {\r\n        return childValue\r\n      }\r\n\r\n      if (typeof childValue === 'object' && childValue !== null) {\r\n        let childNode = node.children[key]\r\n\r\n        if (childNode === undefined) {\r\n          childNode = node.children[key] = createNode(childValue)\r\n        }\r\n\r\n        if (childNode.tag) {\r\n          consumeTag(childNode.tag)\r\n        }\r\n\r\n        return childNode.proxy\r\n      } else {\r\n        let tag = node.tags[key]\r\n\r\n        if (tag === undefined) {\r\n          tag = node.tags[key] = createTag()\r\n          tag.value = childValue\r\n        }\r\n\r\n        consumeTag(tag)\r\n\r\n        return childValue\r\n      }\r\n    }\r\n    const res = calculateResult()\r\n    return res\r\n  },\r\n\r\n  ownKeys(node: Node): ArrayLike<string | symbol> {\r\n    consumeCollection(node)\r\n    return Reflect.ownKeys(node.value)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    node: Node,\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return Reflect.getOwnPropertyDescriptor(node.value, prop)\r\n  },\r\n\r\n  has(node: Node, prop: string | symbol): boolean {\r\n    return Reflect.has(node.value, prop)\r\n  }\r\n}\r\n\r\nclass ArrayTreeNode<T extends Array<unknown>> implements Node<T> {\r\n  proxy: T = new Proxy([this], arrayProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {}\r\n  children = {}\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst arrayProxyHandler = {\r\n  get([node]: [Node], key: string | symbol): unknown {\r\n    if (key === 'length') {\r\n      consumeCollection(node)\r\n    }\r\n\r\n    return objectProxyHandler.get(node, key)\r\n  },\r\n\r\n  ownKeys([node]: [Node]): ArrayLike<string | symbol> {\r\n    return objectProxyHandler.ownKeys(node)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    [node]: [Node],\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return objectProxyHandler.getOwnPropertyDescriptor(node, prop)\r\n  },\r\n\r\n  has([node]: [Node], prop: string | symbol): boolean {\r\n    return objectProxyHandler.has(node, prop)\r\n  }\r\n}\r\n\r\nexport function createNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  value: T\r\n): Node<T> {\r\n  if (Array.isArray(value)) {\r\n    return new ArrayTreeNode(value)\r\n  }\r\n\r\n  return new ObjectTreeNode(value) as Node<T>\r\n}\r\n\r\nconst keysMap = new WeakMap<\r\n  Array<unknown> | Record<string, unknown>,\r\n  Set<string>\r\n>()\r\n\r\nexport function updateNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  node: Node<T>,\r\n  newValue: T\r\n): void {\r\n  const { value, tags, children } = node\r\n\r\n  node.value = newValue\r\n\r\n  if (\r\n    Array.isArray(value) &&\r\n    Array.isArray(newValue) &&\r\n    value.length !== newValue.length\r\n  ) {\r\n    dirtyCollection(node)\r\n  } else {\r\n    if (value !== newValue) {\r\n      let oldKeysSize = 0\r\n      let newKeysSize = 0\r\n      let anyKeysAdded = false\r\n\r\n      for (const _key in value) {\r\n        oldKeysSize++\r\n      }\r\n\r\n      for (const key in newValue) {\r\n        newKeysSize++\r\n        if (!(key in value)) {\r\n          anyKeysAdded = true\r\n          break\r\n        }\r\n      }\r\n\r\n      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize\r\n\r\n      if (isDifferent) {\r\n        dirtyCollection(node)\r\n      }\r\n    }\r\n  }\r\n\r\n  for (const key in tags) {\r\n    const childValue = (value as Record<string, unknown>)[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    if (childValue !== newChildValue) {\r\n      dirtyCollection(node)\r\n      dirtyTag(tags[key], newChildValue)\r\n    }\r\n\r\n    if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      delete tags[key]\r\n    }\r\n  }\r\n\r\n  for (const key in children) {\r\n    const childNode = children[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    const childValue = childNode.value\r\n\r\n    if (childValue === newChildValue) {\r\n      continue\r\n    } else if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      updateNode(childNode, newChildValue as Record<string, unknown>)\r\n    } else {\r\n      deleteNode(childNode)\r\n      delete children[key]\r\n    }\r\n  }\r\n}\r\n\r\nfunction deleteNode(node: Node): void {\r\n  if (node.tag) {\r\n    dirtyTag(node.tag, null)\r\n  }\r\n  dirtyCollection(node)\r\n  for (const key in node.tags) {\r\n    dirtyTag(node.tags[key], null)\r\n  }\r\n  for (const key in node.children) {\r\n    deleteNode(node.children[key])\r\n  }\r\n}\r\n","import type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nimport type { NOT_FOUND_TYPE } from './utils'\r\nimport { NOT_FOUND } from './utils'\r\n\r\n// Cache implementation based on Erik Rasmussen's `lru-memoize`:\r\n// https://github.com/erikras/lru-memoize\r\n\r\ninterface Entry {\r\n  key: unknown\r\n  value: unknown\r\n}\r\n\r\ninterface Cache {\r\n  get(key: unknown): unknown | NOT_FOUND_TYPE\r\n  put(key: unknown, value: unknown): void\r\n  getEntries(): Entry[]\r\n  clear(): void\r\n}\r\n\r\nfunction createSingletonCache(equals: EqualityFn): Cache {\r\n  let entry: Entry | undefined\r\n  return {\r\n    get(key: unknown) {\r\n      if (entry && equals(entry.key, key)) {\r\n        return entry.value\r\n      }\r\n\r\n      return NOT_FOUND\r\n    },\r\n\r\n    put(key: unknown, value: unknown) {\r\n      entry = { key, value }\r\n    },\r\n\r\n    getEntries() {\r\n      return entry ? [entry] : []\r\n    },\r\n\r\n    clear() {\r\n      entry = undefined\r\n    }\r\n  }\r\n}\r\n\r\nfunction createLruCache(maxSize: number, equals: EqualityFn): Cache {\r\n  let entries: Entry[] = []\r\n\r\n  function get(key: unknown) {\r\n    const cacheIndex = entries.findIndex(entry => equals(key, entry.key))\r\n\r\n    // We found a cached entry\r\n    if (cacheIndex > -1) {\r\n      const entry = entries[cacheIndex]\r\n\r\n      // Cached entry not at top of cache, move it to the top\r\n      if (cacheIndex > 0) {\r\n        entries.splice(cacheIndex, 1)\r\n        entries.unshift(entry)\r\n      }\r\n\r\n      return entry.value\r\n    }\r\n\r\n    // No entry found in cache, return sentinel\r\n    return NOT_FOUND\r\n  }\r\n\r\n  function put(key: unknown, value: unknown) {\r\n    if (get(key) === NOT_FOUND) {\r\n      // TODO Is unshift slow?\r\n      entries.unshift({ key, value })\r\n      if (entries.length > maxSize) {\r\n        entries.pop()\r\n      }\r\n    }\r\n  }\r\n\r\n  function getEntries() {\r\n    return entries\r\n  }\r\n\r\n  function clear() {\r\n    entries = []\r\n  }\r\n\r\n  return { get, put, getEntries, clear }\r\n}\r\n\r\n/**\r\n * Runs a simple reference equality check.\r\n * What {@linkcode lruMemoize lruMemoize} uses by default.\r\n *\r\n * **Note**: This function was previously known as `defaultEqualityCheck`.\r\n *\r\n * @public\r\n */\r\nexport const referenceEqualityCheck: EqualityFn = (a, b) => a === b\r\n\r\nexport function createCacheKeyComparator(equalityCheck: EqualityFn) {\r\n  return function areArgumentsShallowlyEqual(\r\n    prev: unknown[] | IArguments | null,\r\n    next: unknown[] | IArguments | null\r\n  ): boolean {\r\n    if (prev === null || next === null || prev.length !== next.length) {\r\n      return false\r\n    }\r\n\r\n    // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\r\n    const { length } = prev\r\n    for (let i = 0; i < length; i++) {\r\n      if (!equalityCheck(prev[i], next[i])) {\r\n        return false\r\n      }\r\n    }\r\n\r\n    return true\r\n  }\r\n}\r\n\r\n/**\r\n * Options for configuring the behavior of a function memoized with\r\n * LRU (Least Recently Used) caching.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @public\r\n */\r\nexport interface LruMemoizeOptions<Result = any> {\r\n  /**\r\n   * Function used to compare the individual arguments of the\r\n   * provided calculation function.\r\n   *\r\n   * @default referenceEqualityCheck\r\n   */\r\n  equalityCheck?: EqualityFn\r\n\r\n  /**\r\n   * If provided, used to compare a newly generated output value against\r\n   * previous values in the cache. If a match is found,\r\n   * the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes\r\n   * a recalculation due to changed references, but the output is still\r\n   * effectively the same.\r\n   *\r\n   * @since 4.1.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n\r\n  /**\r\n   * The maximum size of the cache used by the selector.\r\n   * A size greater than 1 means the selector will use an\r\n   * LRU (Least Recently Used) cache, allowing for the caching of multiple\r\n   * results based on different sets of arguments.\r\n   *\r\n   * @default 1\r\n   */\r\n  maxSize?: number\r\n}\r\n\r\n/**\r\n * Creates a memoized version of a function with an optional\r\n * LRU (Least Recently Used) cache. The memoized function uses a cache to\r\n * store computed values. Depending on the `maxSize` option, it will use\r\n * either a singleton cache (for a single entry) or an\r\n * LRU cache (for multiple entries).\r\n *\r\n * **Note**: This function was previously known as `defaultMemoize`.\r\n *\r\n * @param func - The function to be memoized.\r\n * @param equalityCheckOrOptions - Either an equality check function or an options object.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/lruMemoize `lruMemoize`}\r\n *\r\n * @public\r\n */\r\nexport function lruMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  equalityCheckOrOptions?: EqualityFn | LruMemoizeOptions<ReturnType<Func>>\r\n) {\r\n  const providedOptions =\r\n    typeof equalityCheckOrOptions === 'object'\r\n      ? equalityCheckOrOptions\r\n      : { equalityCheck: equalityCheckOrOptions }\r\n\r\n  const {\r\n    equalityCheck = referenceEqualityCheck,\r\n    maxSize = 1,\r\n    resultEqualityCheck\r\n  } = providedOptions\r\n\r\n  const comparator = createCacheKeyComparator(equalityCheck)\r\n\r\n  let resultsCount = 0\r\n\r\n  const cache =\r\n    maxSize <= 1\r\n      ? createSingletonCache(comparator)\r\n      : createLruCache(maxSize, comparator)\r\n\r\n  function memoized() {\r\n    let value = cache.get(arguments) as ReturnType<Func>\r\n    if (value === NOT_FOUND) {\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      value = func.apply(null, arguments) as ReturnType<Func>\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const entries = cache.getEntries()\r\n        const matchingEntry = entries.find(entry =>\r\n          resultEqualityCheck(entry.value as ReturnType<Func>, value)\r\n        )\r\n\r\n        if (matchingEntry) {\r\n          value = matchingEntry.value as ReturnType<Func>\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n      }\r\n\r\n      cache.put(arguments, value)\r\n    }\r\n    return value\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    cache.clear()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","import { createNode, updateNode } from './proxy'\r\nimport type { Node } from './tracking'\r\n\r\nimport { createCacheKeyComparator, referenceEqualityCheck } from '../lruMemoize'\r\nimport type { AnyFunction, DefaultMemoizeFields, Simplify } from '../types'\r\nimport { createCache } from './autotracking'\r\n\r\n/**\r\n * Uses an \"auto-tracking\" approach inspired by the work of the Ember Glimmer team.\r\n * It uses a Proxy to wrap arguments and track accesses to nested fields\r\n * in your selector on first read. Later, when the selector is called with\r\n * new arguments, it identifies which accessed fields have changed and\r\n * only recalculates the result if one or more of those accessed fields have changed.\r\n * This allows it to be more precise than the shallow equality checks in `lruMemoize`.\r\n *\r\n * __Design Tradeoffs for `autotrackMemoize`:__\r\n * - Pros:\r\n *    - It is likely to avoid excess calculations and recalculate fewer times than `lruMemoize` will,\r\n *    which may also result in fewer component re-renders.\r\n * - Cons:\r\n *    - It only has a cache size of 1.\r\n *    - It is slower than `lruMemoize`, because it has to do more work. (How much slower is dependent on the number of accessed fields in a selector, number of calls, frequency of input changes, etc)\r\n *    - It can have some unexpected behavior. Because it tracks nested field accesses,\r\n *    cases where you don't access a field will not recalculate properly.\r\n *    For example, a badly-written selector like:\r\n *      ```ts\r\n *      createSelector([state => state.todos], todos => todos)\r\n *      ```\r\n *      that just immediately returns the extracted value will never update, because it doesn't see any field accesses to check.\r\n *\r\n * __Use Cases for `autotrackMemoize`:__\r\n * - It is likely best used for cases where you need to access specific nested fields\r\n * in data, and avoid recalculating if other fields in the same data objects are immutably updated.\r\n *\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelector } from 'reselect'\r\n *\r\n * const selectTodoIds = createSelector(\r\n *   [(state: RootState) => state.todos],\r\n *   (todos) => todos.map(todo => todo.id),\r\n *   { memoize: autotrackMemoize }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelectorCreator } from 'reselect'\r\n *\r\n * const createSelectorAutotrack = createSelectorCreator({ memoize: autotrackMemoize })\r\n *\r\n * const selectTodoIds = createSelectorAutotrack(\r\n *   [(state: RootState) => state.todos],\r\n *   (todos) => todos.map(todo => todo.id)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/unstable_autotrackMemoize autotrackMemoize}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function autotrackMemoize<Func extends AnyFunction>(func: Func) {\r\n  // we reference arguments instead of spreading them for performance reasons\r\n\r\n  const node: Node<Record<string, unknown>> = createNode(\r\n    [] as unknown as Record<string, unknown>\r\n  )\r\n\r\n  let lastArgs: IArguments | null = null\r\n\r\n  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck)\r\n\r\n  const cache = createCache(() => {\r\n    const res = func.apply(null, node.proxy as unknown as any[])\r\n    return res\r\n  })\r\n\r\n  function memoized() {\r\n    if (!shallowEqual(lastArgs, arguments)) {\r\n      updateNode(node, arguments as unknown as Record<string, unknown>)\r\n      lastArgs = arguments\r\n    }\r\n    return cache.value\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    return cache.clear()\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","// Original source:\r\n// - https://github.com/facebook/react/blob/0b974418c9a56f6c560298560265dcf4b65784bc/packages/react/src/ReactCache.js\r\n\r\nimport type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nclass StrongRef<T> {\r\n  constructor(private value: T) {}\r\n  deref() {\r\n    return this.value\r\n  }\r\n}\r\n\r\nconst Ref =\r\n  typeof WeakRef !== 'undefined'\r\n    ? WeakRef\r\n    : (StrongRef as unknown as typeof WeakRef)\r\n\r\nconst UNTERMINATED = 0\r\nconst TERMINATED = 1\r\n\r\ninterface UnterminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 0\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: void\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular Map where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ninterface TerminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 1\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: T\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular `Map` where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ntype CacheNode<T> = TerminatedCacheNode<T> | UnterminatedCacheNode<T>\r\n\r\nfunction createCacheNode<T>(): CacheNode<T> {\r\n  return {\r\n    s: UNTERMINATED,\r\n    v: undefined,\r\n    o: null,\r\n    p: null\r\n  }\r\n}\r\n\r\n/**\r\n * Configuration options for a memoization function utilizing `WeakMap` for\r\n * its caching mechanism.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport interface WeakMapMemoizeOptions<Result = any> {\r\n  /**\r\n   * If provided, used to compare a newly generated output value against previous values in the cache.\r\n   * If a match is found, the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes a recalculation\r\n   * due to changed references, but the output is still effectively the same.\r\n   *\r\n   * @since 5.0.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n}\r\n\r\n/**\r\n * Creates a tree of `WeakMap`-based cache nodes based on the identity of the\r\n * arguments it's been called with (in this case, the extracted values from your input selectors).\r\n * This allows `weakMapMemoize` to have an effectively infinite cache size.\r\n * Cache results will be kept in memory as long as references to the arguments still exist,\r\n * and then cleared out as the arguments are garbage-collected.\r\n *\r\n * __Design Tradeoffs for `weakMapMemoize`:__\r\n * - Pros:\r\n *   - It has an effectively infinite cache size, but you have no control over\r\n *   how long values are kept in cache as it's based on garbage collection and `WeakMap`s.\r\n * - Cons:\r\n *   - There's currently no way to alter the argument comparisons.\r\n *   They're based on strict reference equality.\r\n *   - It's roughly the same speed as `lruMemoize`, although likely a fraction slower.\r\n *\r\n * __Use Cases for `weakMapMemoize`:__\r\n * - This memoizer is likely best used for cases where you need to call the\r\n * same selector instance with many different arguments, such as a single\r\n * selector instance that is used in a list item component and called with\r\n * item IDs like:\r\n *   ```ts\r\n *   useSelector(state => selectSomeData(state, props.category))\r\n *   ```\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { createSelector, weakMapMemoize } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   items: { id: number; category: string; name: string }[]\r\n * }\r\n *\r\n * const selectItemsByCategory = createSelector(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category),\r\n *   {\r\n *     memoize: weakMapMemoize,\r\n *     argsMemoize: weakMapMemoize\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { createSelectorCreator, weakMapMemoize } from 'reselect'\r\n *\r\n * const createSelectorWeakMap = createSelectorCreator({ memoize: weakMapMemoize, argsMemoize: weakMapMemoize })\r\n *\r\n * const selectItemsByCategory = createSelectorWeakMap(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/weakMapMemoize `weakMapMemoize`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function weakMapMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  options: WeakMapMemoizeOptions<ReturnType<Func>> = {}\r\n) {\r\n  let fnNode = createCacheNode()\r\n  const { resultEqualityCheck } = options\r\n\r\n  let lastResult: WeakRef<object> | undefined\r\n\r\n  let resultsCount = 0\r\n\r\n  function memoized() {\r\n    let cacheNode = fnNode\r\n    const { length } = arguments\r\n    for (let i = 0, l = length; i < l; i++) {\r\n      const arg = arguments[i]\r\n      if (\r\n        typeof arg === 'function' ||\r\n        (typeof arg === 'object' && arg !== null)\r\n      ) {\r\n        // Objects go into a WeakMap\r\n        let objectCache = cacheNode.o\r\n        if (objectCache === null) {\r\n          cacheNode.o = objectCache = new WeakMap()\r\n        }\r\n        const objectNode = objectCache.get(arg)\r\n        if (objectNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          objectCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = objectNode\r\n        }\r\n      } else {\r\n        // Primitives go into a regular Map\r\n        let primitiveCache = cacheNode.p\r\n        if (primitiveCache === null) {\r\n          cacheNode.p = primitiveCache = new Map()\r\n        }\r\n        const primitiveNode = primitiveCache.get(arg)\r\n        if (primitiveNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          primitiveCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = primitiveNode\r\n        }\r\n      }\r\n    }\r\n\r\n    const terminatedNode = cacheNode as unknown as TerminatedCacheNode<any>\r\n\r\n    let result\r\n\r\n    if (cacheNode.s === TERMINATED) {\r\n      result = cacheNode.v\r\n    } else {\r\n      // Allow errors to propagate\r\n      result = func.apply(null, arguments as unknown as any[])\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const lastResultValue = lastResult?.deref?.() ?? lastResult\r\n\r\n        if (\r\n          lastResultValue != null &&\r\n          resultEqualityCheck(lastResultValue as ReturnType<Func>, result)\r\n        ) {\r\n          result = lastResultValue\r\n\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n\r\n        const needsWeakRef =\r\n          (typeof result === 'object' && result !== null) ||\r\n          typeof result === 'function'\r\n\r\n        lastResult = needsWeakRef ? new Ref(result) : result\r\n      }\r\n    }\r\n\r\n    terminatedNode.s = TERMINATED\r\n\r\n    terminatedNode.v = result\r\n    return result\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    fnNode = createCacheNode()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","import { weakMapMemoize } from './weakMapMemoize'\r\n\r\nimport type {\r\n  Combiner,\r\n  CreateSelectorOptions,\r\n  DropFirstParameter,\r\n  ExtractMemoizerFields,\r\n  GetParamsFromSelectors,\r\n  GetStateFromSelectors,\r\n  InterruptRecursion,\r\n  OutputSelector,\r\n  Selector,\r\n  SelectorArray,\r\n  SetRequired,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\n\r\nimport {\r\n  assertIsFunction,\r\n  collectInputSelectorResults,\r\n  ensureIsArray,\r\n  getDependencies,\r\n  getDevModeChecksExecutionInfo\r\n} from './utils'\r\n\r\n/**\r\n * An instance of `createSelector`, customized with a given memoize implementation.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template StateType - The type of state that the selectors created with this selector creator will operate on.\r\n *\r\n * @public\r\n */\r\nexport interface CreateSelectorFunction<\r\n  MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  StateType = any\r\n> {\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments and a `combiner` function.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <InputSelectors extends SelectorArray<StateType>, Result>(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments, a `combiner` function and an `options` object.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions: Simplify<\r\n        CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n      >\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param inputSelectors - An array of input selectors.\r\n   * @param combiner - A function that Combines the input selectors and returns an output selector. Otherwise known as the result function.\r\n   * @param createSelectorOptions - An optional options object that allows for further customization per selector.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    inputSelectors: [...InputSelectors],\r\n    combiner: Combiner<InputSelectors, Result>,\r\n    createSelectorOptions?: Simplify<\r\n      CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    >\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of {@linkcode createSelector createSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every {@linkcode createSelector createSelector} call.\r\n   *\r\n   * @returns A pre-typed `createSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createAppSelector = createSelector.withTypes<RootState>()\r\n   *\r\n   * const selectTodoIds = createAppSelector(\r\n   *   [\r\n   *     // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *     state => state.todos\r\n   *   ],\r\n   *   todos => todos.map(({ id }) => id)\r\n   * )\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all selectors created with this selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector#defining-a-pre-typed-createselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <OverrideStateType extends StateType>() => CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction,\r\n    OverrideStateType\r\n  >\r\n}\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param options - An options object containing the `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). It also provides additional options for customizing memoization. While the `memoize` property is mandatory, the rest are optional.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator({\r\n *   memoize: customMemoize, // Function to be used to memoize `resultFunc`\r\n *   memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards\r\n *   argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments\r\n *   argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2] // Options passed to `customArgsMemoize` as the second argument onwards\r\n * })\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n *\r\n * customSelector(\r\n *   ...selectorArgs // Will be memoized by `customArgsMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-options-since-500 `createSelectorCreator`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n>(\r\n  options: Simplify<\r\n    SetRequired<\r\n      CreateSelectorOptions<\r\n        typeof weakMapMemoize,\r\n        typeof weakMapMemoize,\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >,\r\n      'memoize'\r\n    >\r\n  >\r\n): CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param memoize - The `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator(customMemoize, // Function to be used to memoize `resultFunc`\r\n *   option1, // Will be passed as second argument to `customMemoize`\r\n *   option2, // Will be passed as third argument to `customMemoize`\r\n *   option3 // Will be passed as fourth argument to `customMemoize`\r\n * )\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-memoize-and-memoizeoptions `createSelectorCreator`}\r\n *\r\n * @public\r\n */\r\nexport function createSelectorCreator<MemoizeFunction extends UnknownMemoizer>(\r\n  memoize: MemoizeFunction,\r\n  ...memoizeOptionsFromArgs: DropFirstParameter<MemoizeFunction>\r\n): CreateSelectorFunction<MemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization\r\n * function and options for customizing memoization behavior.\r\n *\r\n * @param memoizeOrOptions - Either A `memoize` function or an `options` object containing the `memoize` function.\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template MemoizeOrOptions - The type of the first argument. It can either be a `memoize` function or an `options` object containing the `memoize` function.\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer,\r\n  MemoizeOrOptions extends\r\n    | MemoizeFunction\r\n    | SetRequired<\r\n        CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n        'memoize'\r\n      >\r\n>(\r\n  memoizeOrOptions: MemoizeOrOptions,\r\n  ...memoizeOptionsFromArgs: MemoizeOrOptions extends SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  >\r\n    ? never\r\n    : DropFirstParameter<MemoizeFunction>\r\n) {\r\n  /** options initially passed into `createSelectorCreator`. */\r\n  const createSelectorCreatorOptions: SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  > = typeof memoizeOrOptions === 'function'\r\n    ? {\r\n        memoize: memoizeOrOptions as MemoizeFunction,\r\n        memoizeOptions: memoizeOptionsFromArgs\r\n      }\r\n    : memoizeOrOptions\r\n\r\n  const createSelector = <\r\n    InputSelectors extends SelectorArray,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: [...InputSelectors],\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions?: CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    ]\r\n  ) => {\r\n    let recomputations = 0\r\n    let dependencyRecomputations = 0\r\n    let lastResult: Result\r\n\r\n    // Due to the intricacies of rest params, we can't do an optional arg after `...createSelectorArgs`.\r\n    // So, start by declaring the default value here.\r\n    // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\r\n    let directlyPassedOptions: CreateSelectorOptions<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    > = {}\r\n\r\n    // Normally, the result func or \"combiner\" is the last arg\r\n    let resultFunc = createSelectorArgs.pop() as\r\n      | Combiner<InputSelectors, Result>\r\n      | CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n\r\n    // If the result func is actually an _object_, assume it's our options object\r\n    if (typeof resultFunc === 'object') {\r\n      directlyPassedOptions = resultFunc\r\n      // and pop the real result func off\r\n      resultFunc = createSelectorArgs.pop() as Combiner<InputSelectors, Result>\r\n    }\r\n\r\n    assertIsFunction(\r\n      resultFunc,\r\n      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\r\n    )\r\n\r\n    // Determine which set of options we're using. Prefer options passed directly,\r\n    // but fall back to options given to `createSelectorCreator`.\r\n    const combinedOptions = {\r\n      ...createSelectorCreatorOptions,\r\n      ...directlyPassedOptions\r\n    }\r\n\r\n    const {\r\n      memoize,\r\n      memoizeOptions = [],\r\n      argsMemoize = weakMapMemoize,\r\n      argsMemoizeOptions = [],\r\n      devModeChecks = {}\r\n    } = combinedOptions\r\n\r\n    // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\r\n    // is an array. In most libs I've looked at, it's an equality function or options object.\r\n    // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\r\n    // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\r\n    // we wrap it in an array so we can apply it.\r\n    const finalMemoizeOptions = ensureIsArray(memoizeOptions)\r\n    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions)\r\n    const dependencies = getDependencies(createSelectorArgs) as InputSelectors\r\n\r\n    const memoizedResultFunc = memoize(function recomputationWrapper() {\r\n      recomputations++\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      return (resultFunc as Combiner<InputSelectors, Result>).apply(\r\n        null,\r\n        arguments as unknown as Parameters<Combiner<InputSelectors, Result>>\r\n      )\r\n    }, ...finalMemoizeOptions) as Combiner<InputSelectors, Result> &\r\n      ExtractMemoizerFields<OverrideMemoizeFunction>\r\n\r\n    let firstRun = true\r\n\r\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\r\n    const selector = argsMemoize(function dependenciesChecker() {\r\n      dependencyRecomputations++\r\n      /** Return values of input selectors which the `resultFunc` takes as arguments. */\r\n      const inputSelectorResults = collectInputSelectorResults(\r\n        dependencies,\r\n        arguments\r\n      )\r\n\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      lastResult = memoizedResultFunc.apply(null, inputSelectorResults)\r\n\r\n      if (process.env.NODE_ENV !== 'production') {\r\n        const { identityFunctionCheck, inputStabilityCheck } =\r\n          getDevModeChecksExecutionInfo(firstRun, devModeChecks)\r\n        if (identityFunctionCheck.shouldRun) {\r\n          identityFunctionCheck.run(\r\n            resultFunc as Combiner<InputSelectors, Result>,\r\n            inputSelectorResults,\r\n            lastResult\r\n          )\r\n        }\r\n\r\n        if (inputStabilityCheck.shouldRun) {\r\n          // make a second copy of the params, to check if we got the same results\r\n          const inputSelectorResultsCopy = collectInputSelectorResults(\r\n            dependencies,\r\n            arguments\r\n          )\r\n\r\n          inputStabilityCheck.run(\r\n            { inputSelectorResults, inputSelectorResultsCopy },\r\n            { memoize, memoizeOptions: finalMemoizeOptions },\r\n            arguments\r\n          )\r\n        }\r\n\r\n        if (firstRun) firstRun = false\r\n      }\r\n\r\n      return lastResult\r\n    }, ...finalArgsMemoizeOptions) as unknown as Selector<\r\n      GetStateFromSelectors<InputSelectors>,\r\n      Result,\r\n      GetParamsFromSelectors<InputSelectors>\r\n    > &\r\n      ExtractMemoizerFields<OverrideArgsMemoizeFunction>\r\n\r\n    return Object.assign(selector, {\r\n      resultFunc,\r\n      memoizedResultFunc,\r\n      dependencies,\r\n      dependencyRecomputations: () => dependencyRecomputations,\r\n      resetDependencyRecomputations: () => {\r\n        dependencyRecomputations = 0\r\n      },\r\n      lastResult: () => lastResult,\r\n      recomputations: () => recomputations,\r\n      resetRecomputations: () => {\r\n        recomputations = 0\r\n      },\r\n      memoize,\r\n      argsMemoize\r\n    }) as OutputSelector<\r\n      InputSelectors,\r\n      Result,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    >\r\n  }\r\n\r\n  Object.assign(createSelector, {\r\n    withTypes: () => createSelector\r\n  })\r\n\r\n  return createSelector as CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  >\r\n}\r\n\r\n/**\r\n * Accepts one or more \"input selectors\" (either as separate arguments or a single array),\r\n * a single \"result function\" / \"combiner\", and an optional options object, and\r\n * generates a memoized selector function.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelector `createSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createSelector =\r\n  /* #__PURE__ */ createSelectorCreator(weakMapMemoize)\r\n","import { createSelector } from './createSelectorCreator'\r\n\r\nimport type { CreateSelectorFunction } from './createSelectorCreator'\r\nimport type {\r\n  InterruptRecursion,\r\n  ObjectValuesToTuple,\r\n  OutputSelector,\r\n  Selector,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\nimport { assertIsObject } from './utils'\r\nimport type { weakMapMemoize } from './weakMapMemoize'\r\n\r\n/**\r\n * Represents a mapping of selectors to their return types.\r\n *\r\n * @template TObject - An object type where each property is a selector function.\r\n *\r\n * @public\r\n */\r\nexport type SelectorResultsMap<TObject extends SelectorsObject> = {\r\n  [Key in keyof TObject]: ReturnType<TObject[Key]>\r\n}\r\n\r\n/**\r\n * Represents a mapping of selectors for each key in a given root state.\r\n *\r\n * This type is a utility that takes a root state object type and\r\n * generates a corresponding set of selectors. Each selector is associated\r\n * with a key in the root state, allowing for the selection\r\n * of specific parts of the state.\r\n *\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type RootStateSelectors<RootState = any> = {\r\n  [Key in keyof RootState]: Selector<RootState, RootState[Key], []>\r\n}\r\n\r\n/**\r\n * @deprecated Please use {@linkcode StructuredSelectorCreator.withTypes createStructuredSelector.withTypes<RootState>()} instead. This type will be removed in the future.\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type TypedStructuredSelectorCreator<RootState = any> =\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends RootStateSelectors<RootState> = RootStateSelectors<RootState>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ) => OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n/**\r\n * Represents an object where each property is a selector function.\r\n *\r\n * @template StateType - The type of state that all the selectors operate on.\r\n *\r\n * @public\r\n */\r\nexport type SelectorsObject<StateType = any> = Record<\r\n  string,\r\n  Selector<StateType>\r\n>\r\n\r\n/**\r\n * It provides a way to create structured selectors.\r\n * The structured selector can take multiple input selectors\r\n * and map their output to an object with specific keys.\r\n *\r\n * @template StateType - The type of state that the structured selectors created with this structured selector creator will operate on.\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport interface StructuredSelectorCreator<StateType = any> {\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends SelectorsObject<StateType>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ): OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of\r\n   * {@linkcode createStructuredSelector createStructuredSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every\r\n   * {@linkcode createStructuredSelector createStructuredSelector} call.\r\n   *\r\n   * @returns A pre-typed `createStructuredSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createStructuredSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createStructuredAppSelector =\r\n   *   createStructuredSelector.withTypes<RootState>()\r\n   *\r\n   * const structuredAppSelector = createStructuredAppSelector({\r\n   *   // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *   todos: state => state.todos,\r\n   *   alerts: state => state.alerts,\r\n   *   todoById: (state, id: number) => state.todos[id]\r\n   * })\r\n   *\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all structured selectors created with this structured selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createstructuredselector#defining-a-pre-typed-createstructuredselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <\r\n    OverrideStateType extends StateType\r\n  >() => StructuredSelectorCreator<OverrideStateType>\r\n}\r\n\r\n/**\r\n * A convenience function that simplifies returning an object\r\n * made up of selector results.\r\n *\r\n * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n * @returns A memoized structured selector.\r\n *\r\n * @example\r\n * <caption>Modern Use Case</caption>\r\n * ```ts\r\n * import { createSelector, createStructuredSelector } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   todos: {\r\n *     id: number\r\n *     completed: boolean\r\n *     title: string\r\n *     description: string\r\n *   }[]\r\n *   alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * // This:\r\n * const structuredSelector = createStructuredSelector(\r\n *   {\r\n *     todos: (state: RootState) => state.todos,\r\n *     alerts: (state: RootState) => state.alerts,\r\n *     todoById: (state: RootState, id: number) => state.todos[id]\r\n *   },\r\n *   createSelector\r\n * )\r\n *\r\n * // Is essentially the same as this:\r\n * const selector = createSelector(\r\n *   [\r\n *     (state: RootState) => state.todos,\r\n *     (state: RootState) => state.alerts,\r\n *     (state: RootState, id: number) => state.todos[id]\r\n *   ],\r\n *   (todos, alerts, todoById) => {\r\n *     return {\r\n *       todos,\r\n *       alerts,\r\n *       todoById\r\n *     }\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createStructuredSelector: StructuredSelectorCreator =\r\n  Object.assign(\r\n    <\r\n      InputSelectorsObject extends SelectorsObject,\r\n      MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n      ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n    >(\r\n      inputSelectorsObject: InputSelectorsObject,\r\n      selectorCreator: CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      > = createSelector as CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >\r\n    ) => {\r\n      assertIsObject(\r\n        inputSelectorsObject,\r\n        'createStructuredSelector expects first argument to be an object ' +\r\n          `where each property is a selector, instead received a ${typeof inputSelectorsObject}`\r\n      )\r\n      const inputSelectorKeys = Object.keys(inputSelectorsObject)\r\n      const dependencies = inputSelectorKeys.map(\r\n        key => inputSelectorsObject[key]\r\n      )\r\n      const structuredSelector = selectorCreator(\r\n        dependencies,\r\n        (...inputSelectorResults: any[]) => {\r\n          return inputSelectorResults.reduce((composition, value, index) => {\r\n            composition[inputSelectorKeys[index]] = value\r\n            return composition\r\n          }, {})\r\n        }\r\n      )\r\n      return structuredSelector\r\n    },\r\n    { withTypes: () => createStructuredSelector }\r\n  ) as StructuredSelectorCreator\r\n"],"mappings":"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","names":["createSelector"]}
Index: node_modules/reselect/dist/reselect.browser.mjs
===================================================================
--- node_modules/reselect/dist/reselect.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/dist/reselect.browser.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,2 @@
+var re={inputStabilityCheck:"once",identityFunctionCheck:"once"},ie=e=>{Object.assign(re,e)};var S=Symbol("NOT_FOUND");function T(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function V(e,t=`expected an object, instead received ${typeof e}`){if(typeof e!="object")throw new TypeError(t)}function ce(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(n=>typeof n=="function")){let n=e.map(c=>typeof c=="function"?`function ${c.name||"unnamed"}()`:typeof c).join(", ");throw new TypeError(`${t}[${n}]`)}}var O=e=>Array.isArray(e)?e:[e];function K(e){let t=Array.isArray(e[0])?e[0]:e;return ce(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function W(e,t){let n=[],{length:c}=e;for(let s=0;s<c;s++)n.push(e[s].apply(null,t));return n}var G=0,M=null,F=class{revision=G;_value;_lastValue;_isEqual=v;constructor(t,n=v){this._value=this._lastValue=t,this._isEqual=n}get value(){return M?.add(this),this._value}set value(t){this.value!==t&&(this._value=t,this.revision=++G)}};function v(e,t){return e===t}var b=class{_cachedValue;_cachedRevision=-1;_deps=[];hits=0;fn;constructor(t){this.fn=t}clear(){this._cachedValue=void 0,this._cachedRevision=-1,this._deps=[],this.hits=0}get value(){if(this.revision>this._cachedRevision){let{fn:t}=this,n=new Set,c=M;M=n,this._cachedValue=t(),M=c,this.hits++,this._deps=Array.from(n),this._cachedRevision=this.revision}return M?.add(this),this._cachedValue}get revision(){return Math.max(...this._deps.map(t=>t.revision),0)}};function g(e){return e instanceof F||console.warn("Not a valid cell! ",e),e.value}function L(e,t){if(!(e instanceof F))throw new TypeError("setValue must be passed a tracked store created with `createStorage`.");e.value=e._lastValue=t}function $(e,t=v){return new F(e,t)}function Y(e){return T(e,"the first parameter to `createCache` must be a function"),new b(e)}var se=(e,t)=>!1;function z(){return $(null,se)}function k(e,t){L(e,t)}var A=e=>{let t=e.collectionTag;t===null&&(t=e.collectionTag=z()),g(t)},h=e=>{let t=e.collectionTag;t!==null&&k(t,null)};var xe=Symbol(),H=0,ue=Object.getPrototypeOf({}),I=class{constructor(t){this.value=t;this.value=t,this.tag.value=t}proxy=new Proxy(this,C);tag=z();tags={};children={};collectionTag=null;id=H++},C={get(e,t){function n(){let{value:s}=e,o=Reflect.get(s,t);if(typeof t=="symbol"||t in ue)return o;if(typeof o=="object"&&o!==null){let i=e.children[t];return i===void 0&&(i=e.children[t]=E(o)),i.tag&&g(i.tag),i.proxy}else{let i=e.tags[t];return i===void 0&&(i=e.tags[t]=z(),i.value=o),g(i),o}}return n()},ownKeys(e){return A(e),Reflect.ownKeys(e.value)},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e.value,t)},has(e,t){return Reflect.has(e.value,t)}},N=class{constructor(t){this.value=t;this.value=t,this.tag.value=t}proxy=new Proxy([this],ae);tag=z();tags={};children={};collectionTag=null;id=H++},ae={get([e],t){return t==="length"&&A(e),C.get(e,t)},ownKeys([e]){return C.ownKeys(e)},getOwnPropertyDescriptor([e],t){return C.getOwnPropertyDescriptor(e,t)},has([e],t){return C.has(e,t)}};function E(e){return Array.isArray(e)?new N(e):new I(e)}function D(e,t){let{value:n,tags:c,children:s}=e;if(e.value=t,Array.isArray(n)&&Array.isArray(t)&&n.length!==t.length)h(e);else if(n!==t){let o=0,i=0,r=!1;for(let u in n)o++;for(let u in t)if(i++,!(u in n)){r=!0;break}(r||o!==i)&&h(e)}for(let o in c){let i=n[o],r=t[o];i!==r&&(h(e),k(c[o],r)),typeof r=="object"&&r!==null&&delete c[o]}for(let o in s){let i=s[o],r=t[o];i.value!==r&&(typeof r=="object"&&r!==null?D(i,r):(X(i),delete s[o]))}}function X(e){e.tag&&k(e.tag,null),h(e);for(let t in e.tags)k(e.tags[t],null);for(let t in e.children)X(e.children[t])}function le(e){let t;return{get(n){return t&&e(t.key,n)?t.value:S},put(n,c){t={key:n,value:c}},getEntries(){return t?[t]:[]},clear(){t=void 0}}}function pe(e,t){let n=[];function c(r){let a=n.findIndex(u=>t(r,u.key));if(a>-1){let u=n[a];return a>0&&(n.splice(a,1),n.unshift(u)),u.value}return S}function s(r,a){c(r)===S&&(n.unshift({key:r,value:a}),n.length>e&&n.pop())}function o(){return n}function i(){n=[]}return{get:c,put:s,getEntries:o,clear:i}}var w=(e,t)=>e===t;function j(e){return function(n,c){if(n===null||c===null||n.length!==c.length)return!1;let{length:s}=n;for(let o=0;o<s;o++)if(!e(n[o],c[o]))return!1;return!0}}function me(e,t){let n=typeof t=="object"?t:{equalityCheck:t},{equalityCheck:c=w,maxSize:s=1,resultEqualityCheck:o}=n,i=j(c),r=0,a=s<=1?le(i):pe(s,i);function u(){let l=a.get(arguments);if(l===S){if(l=e.apply(null,arguments),r++,o){let y=a.getEntries().find(p=>o(p.value,l));y&&(l=y.value,r!==0&&r--)}a.put(arguments,l)}return l}return u.clearCache=()=>{a.clear(),u.resetResultsCount()},u.resultsCount=()=>r,u.resetResultsCount=()=>{r=0},u}function de(e){let t=E([]),n=null,c=j(w),s=Y(()=>e.apply(null,t.proxy));function o(){return c(n,arguments)||(D(t,arguments),n=arguments),s.value}return o.clearCache=()=>s.clear(),o}var _=class{constructor(t){this.value=t}deref(){return this.value}},ye=typeof WeakRef<"u"?WeakRef:_,fe=0,B=1;function R(){return{s:fe,v:void 0,o:null,p:null}}function x(e,t={}){let n=R(),{resultEqualityCheck:c}=t,s,o=0;function i(){let r=n,{length:a}=arguments;for(let m=0,y=a;m<y;m++){let p=arguments[m];if(typeof p=="function"||typeof p=="object"&&p!==null){let d=r.o;d===null&&(r.o=d=new WeakMap);let f=d.get(p);f===void 0?(r=R(),d.set(p,r)):r=f}else{let d=r.p;d===null&&(r.p=d=new Map);let f=d.get(p);f===void 0?(r=R(),d.set(p,r)):r=f}}let u=r,l;if(r.s===B)l=r.v;else if(l=e.apply(null,arguments),o++,c){let m=s?.deref?.()??s;m!=null&&c(m,l)&&(l=m,o!==0&&o--),s=typeof l=="object"&&l!==null||typeof l=="function"?new ye(l):l}return u.s=B,u.v=l,l}return i.clearCache=()=>{n=R(),i.resetResultsCount()},i.resultsCount=()=>o,i.resetResultsCount=()=>{o=0},i}function J(e,...t){let n=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,c=(...s)=>{let o=0,i=0,r,a={},u=s.pop();typeof u=="object"&&(a=u,u=s.pop()),T(u,`createSelector expects an output function after the inputs, but received: [${typeof u}]`);let l={...n,...a},{memoize:m,memoizeOptions:y=[],argsMemoize:p=x,argsMemoizeOptions:d=[],devModeChecks:f={}}=l,Z=O(y),ee=O(d),q=K(s),P=m(function(){return o++,u.apply(null,arguments)},...Z),Se=!0,te=p(function(){i++;let oe=W(q,arguments);return r=P.apply(null,oe),r},...ee);return Object.assign(te,{resultFunc:u,memoizedResultFunc:P,dependencies:q,dependencyRecomputations:()=>i,resetDependencyRecomputations:()=>{i=0},lastResult:()=>r,recomputations:()=>o,resetRecomputations:()=>{o=0},memoize:m,argsMemoize:p})};return Object.assign(c,{withTypes:()=>c}),c}var U=J(x);var Q=Object.assign((e,t=U)=>{V(e,`createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof e}`);let n=Object.keys(e),c=n.map(o=>e[o]);return t(c,(...o)=>o.reduce((i,r,a)=>(i[n[a]]=r,i),{}))},{withTypes:()=>Q});export{U as createSelector,J as createSelectorCreator,Q as createStructuredSelector,me as lruMemoize,w as referenceEqualityCheck,ie as setGlobalDevModeChecks,de as unstable_autotrackMemoize,x as weakMapMemoize};
+//# sourceMappingURL=reselect.browser.mjs.map
Index: node_modules/reselect/dist/reselect.browser.mjs.map
===================================================================
--- node_modules/reselect/dist/reselect.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/dist/reselect.browser.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/devModeChecks/setGlobalDevModeChecks.ts","../src/utils.ts","../src/autotrackMemoize/autotracking.ts","../src/autotrackMemoize/tracking.ts","../src/autotrackMemoize/proxy.ts","../src/lruMemoize.ts","../src/autotrackMemoize/autotrackMemoize.ts","../src/weakMapMemoize.ts","../src/createSelectorCreator.ts","../src/createStructuredSelector.ts"],"sourcesContent":["import type { DevModeChecks } from '../types'\r\n\r\n/**\r\n * Global configuration for development mode checks. This specifies the default\r\n * frequency at which each development mode check should be performed.\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const globalDevModeChecks: DevModeChecks = {\r\n  inputStabilityCheck: 'once',\r\n  identityFunctionCheck: 'once'\r\n}\r\n\r\n/**\r\n * Overrides the development mode checks settings for all selectors.\r\n *\r\n * Reselect performs additional checks in development mode to help identify and\r\n * warn about potential issues in selector behavior. This function allows you to\r\n * customize the behavior of these checks across all selectors in your application.\r\n *\r\n * **Note**: This setting can still be overridden per selector inside `createSelector`'s `options` object.\r\n * See {@link https://github.com/reduxjs/reselect#2-per-selector-by-passing-an-identityfunctioncheck-option-directly-to-createselector per-selector-configuration}\r\n * and {@linkcode CreateSelectorOptions.identityFunctionCheck identityFunctionCheck} for more details.\r\n *\r\n * _The development mode checks do not run in production builds._\r\n *\r\n * @param devModeChecks - An object specifying the desired settings for development mode checks. You can provide partial overrides. Unspecified settings will retain their current values.\r\n *\r\n * @example\r\n * ```ts\r\n * import { setGlobalDevModeChecks } from 'reselect'\r\n * import { DevModeChecks } from '../types'\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'always' })\r\n *\r\n * // Never run the input stability check.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'never' })\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'always' })\r\n *\r\n * // Never run the identity function check.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'never' })\r\n * ```\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#1-globally-through-setglobaldevmodechecks global-configuration}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport const setGlobalDevModeChecks = (\r\n  devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n  Object.assign(globalDevModeChecks, devModeChecks)\r\n}\r\n","import { runIdentityFunctionCheck } from './devModeChecks/identityFunctionCheck'\r\nimport { runInputStabilityCheck } from './devModeChecks/inputStabilityCheck'\r\nimport { globalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'\r\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\r\nimport type {\r\n  DevModeChecks,\r\n  Selector,\r\n  SelectorArray,\r\n  DevModeChecksExecutionInfo\r\n} from './types'\r\n\r\nexport const NOT_FOUND = /* @__PURE__ */ Symbol('NOT_FOUND')\r\nexport type NOT_FOUND_TYPE = typeof NOT_FOUND\r\n\r\n/**\r\n * Assert that the provided value is a function. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param func - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsFunction<FunctionType extends Function>(\r\n  func: unknown,\r\n  errorMessage = `expected a function, instead received ${typeof func}`\r\n): asserts func is FunctionType {\r\n  if (typeof func !== 'function') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided value is an object. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param object - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsObject<ObjectType extends Record<string, unknown>>(\r\n  object: unknown,\r\n  errorMessage = `expected an object, instead received ${typeof object}`\r\n): asserts object is ObjectType {\r\n  if (typeof object !== 'object') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided array is an array of functions. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param array - The array to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsArrayOfFunctions<FunctionType extends Function>(\r\n  array: unknown[],\r\n  errorMessage = `expected all items to be functions, instead received the following types: `\r\n): asserts array is FunctionType[] {\r\n  if (\r\n    !array.every((item): item is FunctionType => typeof item === 'function')\r\n  ) {\r\n    const itemTypes = array\r\n      .map(item =>\r\n        typeof item === 'function'\r\n          ? `function ${item.name || 'unnamed'}()`\r\n          : typeof item\r\n      )\r\n      .join(', ')\r\n    throw new TypeError(`${errorMessage}[${itemTypes}]`)\r\n  }\r\n}\r\n\r\n/**\r\n * Ensure that the input is an array. If it's already an array, it's returned as is.\r\n * If it's not an array, it will be wrapped in a new array.\r\n *\r\n * @param item - The item to be checked.\r\n * @returns An array containing the input item. If the input is already an array, it's returned without modification.\r\n */\r\nexport const ensureIsArray = (item: unknown) => {\r\n  return Array.isArray(item) ? item : [item]\r\n}\r\n\r\n/**\r\n * Extracts the \"dependencies\" / \"input selectors\" from the arguments of `createSelector`.\r\n *\r\n * @param createSelectorArgs - Arguments passed to `createSelector` as an array.\r\n * @returns An array of \"input selectors\" / \"dependencies\".\r\n * @throws A `TypeError` if any of the input selectors is not function.\r\n */\r\nexport function getDependencies(createSelectorArgs: unknown[]) {\r\n  const dependencies = Array.isArray(createSelectorArgs[0])\r\n    ? createSelectorArgs[0]\r\n    : createSelectorArgs\r\n\r\n  assertIsArrayOfFunctions<Selector>(\r\n    dependencies,\r\n    `createSelector expects all input-selectors to be functions, but received the following types: `\r\n  )\r\n\r\n  return dependencies as SelectorArray\r\n}\r\n\r\n/**\r\n * Runs each input selector and returns their collective results as an array.\r\n *\r\n * @param dependencies - An array of \"dependencies\" or \"input selectors\".\r\n * @param inputSelectorArgs - An array of arguments being passed to the input selectors.\r\n * @returns An array of input selector results.\r\n */\r\nexport function collectInputSelectorResults(\r\n  dependencies: SelectorArray,\r\n  inputSelectorArgs: unknown[] | IArguments\r\n) {\r\n  const inputSelectorResults = []\r\n  const { length } = dependencies\r\n  for (let i = 0; i < length; i++) {\r\n    // @ts-ignore\r\n    // apply arguments instead of spreading and mutate a local list of params for performance.\r\n    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs))\r\n  }\r\n  return inputSelectorResults\r\n}\r\n\r\n/**\r\n * Retrieves execution information for development mode checks.\r\n *\r\n * @param devModeChecks - Custom Settings for development mode checks. These settings will override the global defaults.\r\n * @param firstRun - Indicates whether it is the first time the selector has run.\r\n * @returns  An object containing the execution information for each development mode check.\r\n */\r\nexport const getDevModeChecksExecutionInfo = (\r\n  firstRun: boolean,\r\n  devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n  const { identityFunctionCheck, inputStabilityCheck } = {\r\n    ...globalDevModeChecks,\r\n    ...devModeChecks\r\n  }\r\n  return {\r\n    identityFunctionCheck: {\r\n      shouldRun:\r\n        identityFunctionCheck === 'always' ||\r\n        (identityFunctionCheck === 'once' && firstRun),\r\n      run: runIdentityFunctionCheck\r\n    },\r\n    inputStabilityCheck: {\r\n      shouldRun:\r\n        inputStabilityCheck === 'always' ||\r\n        (inputStabilityCheck === 'once' && firstRun),\r\n      run: runInputStabilityCheck\r\n    }\r\n  } satisfies DevModeChecksExecutionInfo\r\n}\r\n","// Original autotracking implementation source:\r\n// - https://gist.github.com/pzuraq/79bf862e0f8cd9521b79c4b6eccdc4f9\r\n// Additional references:\r\n// - https://www.pzuraq.com/blog/how-autotracking-works\r\n// - https://v5.chriskrycho.com/journal/autotracking-elegant-dx-via-cutting-edge-cs/\r\nimport type { EqualityFn } from '../types'\r\nimport { assertIsFunction } from '../utils'\r\n\r\n// The global revision clock. Every time state changes, the clock increments.\r\nexport let $REVISION = 0\r\n\r\n// The current dependency tracker. Whenever we compute a cache, we create a Set\r\n// to track any dependencies that are used while computing. If no cache is\r\n// computing, then the tracker is null.\r\nlet CURRENT_TRACKER: Set<Cell<any> | TrackingCache> | null = null\r\n\r\n// Storage represents a root value in the system - the actual state of our app.\r\nexport class Cell<T> {\r\n  revision = $REVISION\r\n\r\n  _value: T\r\n  _lastValue: T\r\n  _isEqual: EqualityFn = tripleEq\r\n\r\n  constructor(initialValue: T, isEqual: EqualityFn = tripleEq) {\r\n    this._value = this._lastValue = initialValue\r\n    this._isEqual = isEqual\r\n  }\r\n\r\n  // Whenever a storage value is read, it'll add itself to the current tracker if\r\n  // one exists, entangling its state with that cache.\r\n  get value() {\r\n    CURRENT_TRACKER?.add(this)\r\n\r\n    return this._value\r\n  }\r\n\r\n  // Whenever a storage value is updated, we bump the global revision clock,\r\n  // assign the revision for this storage to the new value, _and_ we schedule a\r\n  // rerender. This is important, and it's what makes autotracking  _pull_\r\n  // based. We don't actively tell the caches which depend on the storage that\r\n  // anything has happened. Instead, we recompute the caches when needed.\r\n  set value(newValue) {\r\n    if (this.value === newValue) return\r\n\r\n    this._value = newValue\r\n    this.revision = ++$REVISION\r\n  }\r\n}\r\n\r\nfunction tripleEq(a: unknown, b: unknown) {\r\n  return a === b\r\n}\r\n\r\n// Caches represent derived state in the system. They are ultimately functions\r\n// that are memoized based on what state they use to produce their output,\r\n// meaning they will only rerun IFF a storage value that could affect the output\r\n// has changed. Otherwise, they'll return the cached value.\r\nexport class TrackingCache {\r\n  _cachedValue: any\r\n  _cachedRevision = -1\r\n  _deps: any[] = []\r\n  hits = 0\r\n\r\n  fn: () => any\r\n\r\n  constructor(fn: () => any) {\r\n    this.fn = fn\r\n  }\r\n\r\n  clear() {\r\n    this._cachedValue = undefined\r\n    this._cachedRevision = -1\r\n    this._deps = []\r\n    this.hits = 0\r\n  }\r\n\r\n  get value() {\r\n    // When getting the value for a Cache, first we check all the dependencies of\r\n    // the cache to see what their current revision is. If the current revision is\r\n    // greater than the cached revision, then something has changed.\r\n    if (this.revision > this._cachedRevision) {\r\n      const { fn } = this\r\n\r\n      // We create a new dependency tracker for this cache. As the cache runs\r\n      // its function, any Storage or Cache instances which are used while\r\n      // computing will be added to this tracker. In the end, it will be the\r\n      // full list of dependencies that this Cache depends on.\r\n      const currentTracker = new Set<Cell<any>>()\r\n      const prevTracker = CURRENT_TRACKER\r\n\r\n      CURRENT_TRACKER = currentTracker\r\n\r\n      // try {\r\n      this._cachedValue = fn()\r\n      // } finally {\r\n      CURRENT_TRACKER = prevTracker\r\n      this.hits++\r\n      this._deps = Array.from(currentTracker)\r\n\r\n      // Set the cached revision. This is the current clock count of all the\r\n      // dependencies. If any dependency changes, this number will be less\r\n      // than the new revision.\r\n      this._cachedRevision = this.revision\r\n      // }\r\n    }\r\n\r\n    // If there is a current tracker, it means another Cache is computing and\r\n    // using this one, so we add this one to the tracker.\r\n    CURRENT_TRACKER?.add(this)\r\n\r\n    // Always return the cached value.\r\n    return this._cachedValue\r\n  }\r\n\r\n  get revision() {\r\n    // The current revision is the max of all the dependencies' revisions.\r\n    return Math.max(...this._deps.map(d => d.revision), 0)\r\n  }\r\n}\r\n\r\nexport function getValue<T>(cell: Cell<T>): T {\r\n  if (!(cell instanceof Cell)) {\r\n    console.warn('Not a valid cell! ', cell)\r\n  }\r\n\r\n  return cell.value\r\n}\r\n\r\ntype CellValue<T extends Cell<unknown>> = T extends Cell<infer U> ? U : never\r\n\r\nexport function setValue<T extends Cell<unknown>>(\r\n  storage: T,\r\n  value: CellValue<T>\r\n): void {\r\n  if (!(storage instanceof Cell)) {\r\n    throw new TypeError(\r\n      'setValue must be passed a tracked store created with `createStorage`.'\r\n    )\r\n  }\r\n\r\n  storage.value = storage._lastValue = value\r\n}\r\n\r\nexport function createCell<T = unknown>(\r\n  initialValue: T,\r\n  isEqual: EqualityFn = tripleEq\r\n): Cell<T> {\r\n  return new Cell(initialValue, isEqual)\r\n}\r\n\r\nexport function createCache<T = unknown>(fn: () => T): TrackingCache {\r\n  assertIsFunction(\r\n    fn,\r\n    'the first parameter to `createCache` must be a function'\r\n  )\r\n\r\n  return new TrackingCache(fn)\r\n}\r\n","import type { Cell } from './autotracking'\r\nimport {\r\n  getValue as consumeTag,\r\n  createCell as createStorage,\r\n  setValue\r\n} from './autotracking'\r\n\r\nexport type Tag = Cell<unknown>\r\n\r\nconst neverEq = (a: any, b: any): boolean => false\r\n\r\nexport function createTag(): Tag {\r\n  return createStorage(null, neverEq)\r\n}\r\nexport { consumeTag }\r\nexport function dirtyTag(tag: Tag, value: any): void {\r\n  setValue(tag, value)\r\n}\r\n\r\nexport interface Node<\r\n  T extends Array<unknown> | Record<string, unknown> =\r\n    | Array<unknown>\r\n    | Record<string, unknown>\r\n> {\r\n  collectionTag: Tag | null\r\n  tag: Tag | null\r\n  tags: Record<string, Tag>\r\n  children: Record<string, Node>\r\n  proxy: T\r\n  value: T\r\n  id: number\r\n}\r\n\r\nexport const consumeCollection = (node: Node): void => {\r\n  let tag = node.collectionTag\r\n\r\n  if (tag === null) {\r\n    tag = node.collectionTag = createTag()\r\n  }\r\n\r\n  consumeTag(tag)\r\n}\r\n\r\nexport const dirtyCollection = (node: Node): void => {\r\n  const tag = node.collectionTag\r\n\r\n  if (tag !== null) {\r\n    dirtyTag(tag, null)\r\n  }\r\n}\r\n","// Original source:\r\n// - https://github.com/simonihmig/tracked-redux/blob/master/packages/tracked-redux/src/-private/proxy.ts\r\n\r\nimport type { Node, Tag } from './tracking'\r\nimport {\r\n  consumeCollection,\r\n  consumeTag,\r\n  createTag,\r\n  dirtyCollection,\r\n  dirtyTag\r\n} from './tracking'\r\n\r\nexport const REDUX_PROXY_LABEL = Symbol()\r\n\r\nlet nextId = 0\r\n\r\nconst proto = Object.getPrototypeOf({})\r\n\r\nclass ObjectTreeNode<T extends Record<string, unknown>> implements Node<T> {\r\n  proxy: T = new Proxy(this, objectProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {} as Record<string, Tag>\r\n  children = {} as Record<string, Node>\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst objectProxyHandler = {\r\n  get(node: Node, key: string | symbol): unknown {\r\n    function calculateResult() {\r\n      const { value } = node\r\n\r\n      const childValue = Reflect.get(value, key)\r\n\r\n      if (typeof key === 'symbol') {\r\n        return childValue\r\n      }\r\n\r\n      if (key in proto) {\r\n        return childValue\r\n      }\r\n\r\n      if (typeof childValue === 'object' && childValue !== null) {\r\n        let childNode = node.children[key]\r\n\r\n        if (childNode === undefined) {\r\n          childNode = node.children[key] = createNode(childValue)\r\n        }\r\n\r\n        if (childNode.tag) {\r\n          consumeTag(childNode.tag)\r\n        }\r\n\r\n        return childNode.proxy\r\n      } else {\r\n        let tag = node.tags[key]\r\n\r\n        if (tag === undefined) {\r\n          tag = node.tags[key] = createTag()\r\n          tag.value = childValue\r\n        }\r\n\r\n        consumeTag(tag)\r\n\r\n        return childValue\r\n      }\r\n    }\r\n    const res = calculateResult()\r\n    return res\r\n  },\r\n\r\n  ownKeys(node: Node): ArrayLike<string | symbol> {\r\n    consumeCollection(node)\r\n    return Reflect.ownKeys(node.value)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    node: Node,\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return Reflect.getOwnPropertyDescriptor(node.value, prop)\r\n  },\r\n\r\n  has(node: Node, prop: string | symbol): boolean {\r\n    return Reflect.has(node.value, prop)\r\n  }\r\n}\r\n\r\nclass ArrayTreeNode<T extends Array<unknown>> implements Node<T> {\r\n  proxy: T = new Proxy([this], arrayProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {}\r\n  children = {}\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst arrayProxyHandler = {\r\n  get([node]: [Node], key: string | symbol): unknown {\r\n    if (key === 'length') {\r\n      consumeCollection(node)\r\n    }\r\n\r\n    return objectProxyHandler.get(node, key)\r\n  },\r\n\r\n  ownKeys([node]: [Node]): ArrayLike<string | symbol> {\r\n    return objectProxyHandler.ownKeys(node)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    [node]: [Node],\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return objectProxyHandler.getOwnPropertyDescriptor(node, prop)\r\n  },\r\n\r\n  has([node]: [Node], prop: string | symbol): boolean {\r\n    return objectProxyHandler.has(node, prop)\r\n  }\r\n}\r\n\r\nexport function createNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  value: T\r\n): Node<T> {\r\n  if (Array.isArray(value)) {\r\n    return new ArrayTreeNode(value)\r\n  }\r\n\r\n  return new ObjectTreeNode(value) as Node<T>\r\n}\r\n\r\nconst keysMap = new WeakMap<\r\n  Array<unknown> | Record<string, unknown>,\r\n  Set<string>\r\n>()\r\n\r\nexport function updateNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  node: Node<T>,\r\n  newValue: T\r\n): void {\r\n  const { value, tags, children } = node\r\n\r\n  node.value = newValue\r\n\r\n  if (\r\n    Array.isArray(value) &&\r\n    Array.isArray(newValue) &&\r\n    value.length !== newValue.length\r\n  ) {\r\n    dirtyCollection(node)\r\n  } else {\r\n    if (value !== newValue) {\r\n      let oldKeysSize = 0\r\n      let newKeysSize = 0\r\n      let anyKeysAdded = false\r\n\r\n      for (const _key in value) {\r\n        oldKeysSize++\r\n      }\r\n\r\n      for (const key in newValue) {\r\n        newKeysSize++\r\n        if (!(key in value)) {\r\n          anyKeysAdded = true\r\n          break\r\n        }\r\n      }\r\n\r\n      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize\r\n\r\n      if (isDifferent) {\r\n        dirtyCollection(node)\r\n      }\r\n    }\r\n  }\r\n\r\n  for (const key in tags) {\r\n    const childValue = (value as Record<string, unknown>)[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    if (childValue !== newChildValue) {\r\n      dirtyCollection(node)\r\n      dirtyTag(tags[key], newChildValue)\r\n    }\r\n\r\n    if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      delete tags[key]\r\n    }\r\n  }\r\n\r\n  for (const key in children) {\r\n    const childNode = children[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    const childValue = childNode.value\r\n\r\n    if (childValue === newChildValue) {\r\n      continue\r\n    } else if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      updateNode(childNode, newChildValue as Record<string, unknown>)\r\n    } else {\r\n      deleteNode(childNode)\r\n      delete children[key]\r\n    }\r\n  }\r\n}\r\n\r\nfunction deleteNode(node: Node): void {\r\n  if (node.tag) {\r\n    dirtyTag(node.tag, null)\r\n  }\r\n  dirtyCollection(node)\r\n  for (const key in node.tags) {\r\n    dirtyTag(node.tags[key], null)\r\n  }\r\n  for (const key in node.children) {\r\n    deleteNode(node.children[key])\r\n  }\r\n}\r\n","import type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nimport type { NOT_FOUND_TYPE } from './utils'\r\nimport { NOT_FOUND } from './utils'\r\n\r\n// Cache implementation based on Erik Rasmussen's `lru-memoize`:\r\n// https://github.com/erikras/lru-memoize\r\n\r\ninterface Entry {\r\n  key: unknown\r\n  value: unknown\r\n}\r\n\r\ninterface Cache {\r\n  get(key: unknown): unknown | NOT_FOUND_TYPE\r\n  put(key: unknown, value: unknown): void\r\n  getEntries(): Entry[]\r\n  clear(): void\r\n}\r\n\r\nfunction createSingletonCache(equals: EqualityFn): Cache {\r\n  let entry: Entry | undefined\r\n  return {\r\n    get(key: unknown) {\r\n      if (entry && equals(entry.key, key)) {\r\n        return entry.value\r\n      }\r\n\r\n      return NOT_FOUND\r\n    },\r\n\r\n    put(key: unknown, value: unknown) {\r\n      entry = { key, value }\r\n    },\r\n\r\n    getEntries() {\r\n      return entry ? [entry] : []\r\n    },\r\n\r\n    clear() {\r\n      entry = undefined\r\n    }\r\n  }\r\n}\r\n\r\nfunction createLruCache(maxSize: number, equals: EqualityFn): Cache {\r\n  let entries: Entry[] = []\r\n\r\n  function get(key: unknown) {\r\n    const cacheIndex = entries.findIndex(entry => equals(key, entry.key))\r\n\r\n    // We found a cached entry\r\n    if (cacheIndex > -1) {\r\n      const entry = entries[cacheIndex]\r\n\r\n      // Cached entry not at top of cache, move it to the top\r\n      if (cacheIndex > 0) {\r\n        entries.splice(cacheIndex, 1)\r\n        entries.unshift(entry)\r\n      }\r\n\r\n      return entry.value\r\n    }\r\n\r\n    // No entry found in cache, return sentinel\r\n    return NOT_FOUND\r\n  }\r\n\r\n  function put(key: unknown, value: unknown) {\r\n    if (get(key) === NOT_FOUND) {\r\n      // TODO Is unshift slow?\r\n      entries.unshift({ key, value })\r\n      if (entries.length > maxSize) {\r\n        entries.pop()\r\n      }\r\n    }\r\n  }\r\n\r\n  function getEntries() {\r\n    return entries\r\n  }\r\n\r\n  function clear() {\r\n    entries = []\r\n  }\r\n\r\n  return { get, put, getEntries, clear }\r\n}\r\n\r\n/**\r\n * Runs a simple reference equality check.\r\n * What {@linkcode lruMemoize lruMemoize} uses by default.\r\n *\r\n * **Note**: This function was previously known as `defaultEqualityCheck`.\r\n *\r\n * @public\r\n */\r\nexport const referenceEqualityCheck: EqualityFn = (a, b) => a === b\r\n\r\nexport function createCacheKeyComparator(equalityCheck: EqualityFn) {\r\n  return function areArgumentsShallowlyEqual(\r\n    prev: unknown[] | IArguments | null,\r\n    next: unknown[] | IArguments | null\r\n  ): boolean {\r\n    if (prev === null || next === null || prev.length !== next.length) {\r\n      return false\r\n    }\r\n\r\n    // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\r\n    const { length } = prev\r\n    for (let i = 0; i < length; i++) {\r\n      if (!equalityCheck(prev[i], next[i])) {\r\n        return false\r\n      }\r\n    }\r\n\r\n    return true\r\n  }\r\n}\r\n\r\n/**\r\n * Options for configuring the behavior of a function memoized with\r\n * LRU (Least Recently Used) caching.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @public\r\n */\r\nexport interface LruMemoizeOptions<Result = any> {\r\n  /**\r\n   * Function used to compare the individual arguments of the\r\n   * provided calculation function.\r\n   *\r\n   * @default referenceEqualityCheck\r\n   */\r\n  equalityCheck?: EqualityFn\r\n\r\n  /**\r\n   * If provided, used to compare a newly generated output value against\r\n   * previous values in the cache. If a match is found,\r\n   * the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes\r\n   * a recalculation due to changed references, but the output is still\r\n   * effectively the same.\r\n   *\r\n   * @since 4.1.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n\r\n  /**\r\n   * The maximum size of the cache used by the selector.\r\n   * A size greater than 1 means the selector will use an\r\n   * LRU (Least Recently Used) cache, allowing for the caching of multiple\r\n   * results based on different sets of arguments.\r\n   *\r\n   * @default 1\r\n   */\r\n  maxSize?: number\r\n}\r\n\r\n/**\r\n * Creates a memoized version of a function with an optional\r\n * LRU (Least Recently Used) cache. The memoized function uses a cache to\r\n * store computed values. Depending on the `maxSize` option, it will use\r\n * either a singleton cache (for a single entry) or an\r\n * LRU cache (for multiple entries).\r\n *\r\n * **Note**: This function was previously known as `defaultMemoize`.\r\n *\r\n * @param func - The function to be memoized.\r\n * @param equalityCheckOrOptions - Either an equality check function or an options object.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/lruMemoize `lruMemoize`}\r\n *\r\n * @public\r\n */\r\nexport function lruMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  equalityCheckOrOptions?: EqualityFn | LruMemoizeOptions<ReturnType<Func>>\r\n) {\r\n  const providedOptions =\r\n    typeof equalityCheckOrOptions === 'object'\r\n      ? equalityCheckOrOptions\r\n      : { equalityCheck: equalityCheckOrOptions }\r\n\r\n  const {\r\n    equalityCheck = referenceEqualityCheck,\r\n    maxSize = 1,\r\n    resultEqualityCheck\r\n  } = providedOptions\r\n\r\n  const comparator = createCacheKeyComparator(equalityCheck)\r\n\r\n  let resultsCount = 0\r\n\r\n  const cache =\r\n    maxSize <= 1\r\n      ? createSingletonCache(comparator)\r\n      : createLruCache(maxSize, comparator)\r\n\r\n  function memoized() {\r\n    let value = cache.get(arguments) as ReturnType<Func>\r\n    if (value === NOT_FOUND) {\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      value = func.apply(null, arguments) as ReturnType<Func>\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const entries = cache.getEntries()\r\n        const matchingEntry = entries.find(entry =>\r\n          resultEqualityCheck(entry.value as ReturnType<Func>, value)\r\n        )\r\n\r\n        if (matchingEntry) {\r\n          value = matchingEntry.value as ReturnType<Func>\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n      }\r\n\r\n      cache.put(arguments, value)\r\n    }\r\n    return value\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    cache.clear()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","import { createNode, updateNode } from './proxy'\r\nimport type { Node } from './tracking'\r\n\r\nimport { createCacheKeyComparator, referenceEqualityCheck } from '../lruMemoize'\r\nimport type { AnyFunction, DefaultMemoizeFields, Simplify } from '../types'\r\nimport { createCache } from './autotracking'\r\n\r\n/**\r\n * Uses an \"auto-tracking\" approach inspired by the work of the Ember Glimmer team.\r\n * It uses a Proxy to wrap arguments and track accesses to nested fields\r\n * in your selector on first read. Later, when the selector is called with\r\n * new arguments, it identifies which accessed fields have changed and\r\n * only recalculates the result if one or more of those accessed fields have changed.\r\n * This allows it to be more precise than the shallow equality checks in `lruMemoize`.\r\n *\r\n * __Design Tradeoffs for `autotrackMemoize`:__\r\n * - Pros:\r\n *    - It is likely to avoid excess calculations and recalculate fewer times than `lruMemoize` will,\r\n *    which may also result in fewer component re-renders.\r\n * - Cons:\r\n *    - It only has a cache size of 1.\r\n *    - It is slower than `lruMemoize`, because it has to do more work. (How much slower is dependent on the number of accessed fields in a selector, number of calls, frequency of input changes, etc)\r\n *    - It can have some unexpected behavior. Because it tracks nested field accesses,\r\n *    cases where you don't access a field will not recalculate properly.\r\n *    For example, a badly-written selector like:\r\n *      ```ts\r\n *      createSelector([state => state.todos], todos => todos)\r\n *      ```\r\n *      that just immediately returns the extracted value will never update, because it doesn't see any field accesses to check.\r\n *\r\n * __Use Cases for `autotrackMemoize`:__\r\n * - It is likely best used for cases where you need to access specific nested fields\r\n * in data, and avoid recalculating if other fields in the same data objects are immutably updated.\r\n *\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelector } from 'reselect'\r\n *\r\n * const selectTodoIds = createSelector(\r\n *   [(state: RootState) => state.todos],\r\n *   (todos) => todos.map(todo => todo.id),\r\n *   { memoize: autotrackMemoize }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelectorCreator } from 'reselect'\r\n *\r\n * const createSelectorAutotrack = createSelectorCreator({ memoize: autotrackMemoize })\r\n *\r\n * const selectTodoIds = createSelectorAutotrack(\r\n *   [(state: RootState) => state.todos],\r\n *   (todos) => todos.map(todo => todo.id)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/unstable_autotrackMemoize autotrackMemoize}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function autotrackMemoize<Func extends AnyFunction>(func: Func) {\r\n  // we reference arguments instead of spreading them for performance reasons\r\n\r\n  const node: Node<Record<string, unknown>> = createNode(\r\n    [] as unknown as Record<string, unknown>\r\n  )\r\n\r\n  let lastArgs: IArguments | null = null\r\n\r\n  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck)\r\n\r\n  const cache = createCache(() => {\r\n    const res = func.apply(null, node.proxy as unknown as any[])\r\n    return res\r\n  })\r\n\r\n  function memoized() {\r\n    if (!shallowEqual(lastArgs, arguments)) {\r\n      updateNode(node, arguments as unknown as Record<string, unknown>)\r\n      lastArgs = arguments\r\n    }\r\n    return cache.value\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    return cache.clear()\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","// Original source:\r\n// - https://github.com/facebook/react/blob/0b974418c9a56f6c560298560265dcf4b65784bc/packages/react/src/ReactCache.js\r\n\r\nimport type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nclass StrongRef<T> {\r\n  constructor(private value: T) {}\r\n  deref() {\r\n    return this.value\r\n  }\r\n}\r\n\r\nconst Ref =\r\n  typeof WeakRef !== 'undefined'\r\n    ? WeakRef\r\n    : (StrongRef as unknown as typeof WeakRef)\r\n\r\nconst UNTERMINATED = 0\r\nconst TERMINATED = 1\r\n\r\ninterface UnterminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 0\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: void\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular Map where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ninterface TerminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 1\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: T\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular `Map` where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ntype CacheNode<T> = TerminatedCacheNode<T> | UnterminatedCacheNode<T>\r\n\r\nfunction createCacheNode<T>(): CacheNode<T> {\r\n  return {\r\n    s: UNTERMINATED,\r\n    v: undefined,\r\n    o: null,\r\n    p: null\r\n  }\r\n}\r\n\r\n/**\r\n * Configuration options for a memoization function utilizing `WeakMap` for\r\n * its caching mechanism.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport interface WeakMapMemoizeOptions<Result = any> {\r\n  /**\r\n   * If provided, used to compare a newly generated output value against previous values in the cache.\r\n   * If a match is found, the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes a recalculation\r\n   * due to changed references, but the output is still effectively the same.\r\n   *\r\n   * @since 5.0.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n}\r\n\r\n/**\r\n * Creates a tree of `WeakMap`-based cache nodes based on the identity of the\r\n * arguments it's been called with (in this case, the extracted values from your input selectors).\r\n * This allows `weakMapMemoize` to have an effectively infinite cache size.\r\n * Cache results will be kept in memory as long as references to the arguments still exist,\r\n * and then cleared out as the arguments are garbage-collected.\r\n *\r\n * __Design Tradeoffs for `weakMapMemoize`:__\r\n * - Pros:\r\n *   - It has an effectively infinite cache size, but you have no control over\r\n *   how long values are kept in cache as it's based on garbage collection and `WeakMap`s.\r\n * - Cons:\r\n *   - There's currently no way to alter the argument comparisons.\r\n *   They're based on strict reference equality.\r\n *   - It's roughly the same speed as `lruMemoize`, although likely a fraction slower.\r\n *\r\n * __Use Cases for `weakMapMemoize`:__\r\n * - This memoizer is likely best used for cases where you need to call the\r\n * same selector instance with many different arguments, such as a single\r\n * selector instance that is used in a list item component and called with\r\n * item IDs like:\r\n *   ```ts\r\n *   useSelector(state => selectSomeData(state, props.category))\r\n *   ```\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { createSelector, weakMapMemoize } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   items: { id: number; category: string; name: string }[]\r\n * }\r\n *\r\n * const selectItemsByCategory = createSelector(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category),\r\n *   {\r\n *     memoize: weakMapMemoize,\r\n *     argsMemoize: weakMapMemoize\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { createSelectorCreator, weakMapMemoize } from 'reselect'\r\n *\r\n * const createSelectorWeakMap = createSelectorCreator({ memoize: weakMapMemoize, argsMemoize: weakMapMemoize })\r\n *\r\n * const selectItemsByCategory = createSelectorWeakMap(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/weakMapMemoize `weakMapMemoize`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function weakMapMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  options: WeakMapMemoizeOptions<ReturnType<Func>> = {}\r\n) {\r\n  let fnNode = createCacheNode()\r\n  const { resultEqualityCheck } = options\r\n\r\n  let lastResult: WeakRef<object> | undefined\r\n\r\n  let resultsCount = 0\r\n\r\n  function memoized() {\r\n    let cacheNode = fnNode\r\n    const { length } = arguments\r\n    for (let i = 0, l = length; i < l; i++) {\r\n      const arg = arguments[i]\r\n      if (\r\n        typeof arg === 'function' ||\r\n        (typeof arg === 'object' && arg !== null)\r\n      ) {\r\n        // Objects go into a WeakMap\r\n        let objectCache = cacheNode.o\r\n        if (objectCache === null) {\r\n          cacheNode.o = objectCache = new WeakMap()\r\n        }\r\n        const objectNode = objectCache.get(arg)\r\n        if (objectNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          objectCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = objectNode\r\n        }\r\n      } else {\r\n        // Primitives go into a regular Map\r\n        let primitiveCache = cacheNode.p\r\n        if (primitiveCache === null) {\r\n          cacheNode.p = primitiveCache = new Map()\r\n        }\r\n        const primitiveNode = primitiveCache.get(arg)\r\n        if (primitiveNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          primitiveCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = primitiveNode\r\n        }\r\n      }\r\n    }\r\n\r\n    const terminatedNode = cacheNode as unknown as TerminatedCacheNode<any>\r\n\r\n    let result\r\n\r\n    if (cacheNode.s === TERMINATED) {\r\n      result = cacheNode.v\r\n    } else {\r\n      // Allow errors to propagate\r\n      result = func.apply(null, arguments as unknown as any[])\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const lastResultValue = lastResult?.deref?.() ?? lastResult\r\n\r\n        if (\r\n          lastResultValue != null &&\r\n          resultEqualityCheck(lastResultValue as ReturnType<Func>, result)\r\n        ) {\r\n          result = lastResultValue\r\n\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n\r\n        const needsWeakRef =\r\n          (typeof result === 'object' && result !== null) ||\r\n          typeof result === 'function'\r\n\r\n        lastResult = needsWeakRef ? new Ref(result) : result\r\n      }\r\n    }\r\n\r\n    terminatedNode.s = TERMINATED\r\n\r\n    terminatedNode.v = result\r\n    return result\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    fnNode = createCacheNode()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","import { weakMapMemoize } from './weakMapMemoize'\r\n\r\nimport type {\r\n  Combiner,\r\n  CreateSelectorOptions,\r\n  DropFirstParameter,\r\n  ExtractMemoizerFields,\r\n  GetParamsFromSelectors,\r\n  GetStateFromSelectors,\r\n  InterruptRecursion,\r\n  OutputSelector,\r\n  Selector,\r\n  SelectorArray,\r\n  SetRequired,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\n\r\nimport {\r\n  assertIsFunction,\r\n  collectInputSelectorResults,\r\n  ensureIsArray,\r\n  getDependencies,\r\n  getDevModeChecksExecutionInfo\r\n} from './utils'\r\n\r\n/**\r\n * An instance of `createSelector`, customized with a given memoize implementation.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template StateType - The type of state that the selectors created with this selector creator will operate on.\r\n *\r\n * @public\r\n */\r\nexport interface CreateSelectorFunction<\r\n  MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  StateType = any\r\n> {\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments and a `combiner` function.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <InputSelectors extends SelectorArray<StateType>, Result>(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments, a `combiner` function and an `options` object.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions: Simplify<\r\n        CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n      >\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param inputSelectors - An array of input selectors.\r\n   * @param combiner - A function that Combines the input selectors and returns an output selector. Otherwise known as the result function.\r\n   * @param createSelectorOptions - An optional options object that allows for further customization per selector.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    inputSelectors: [...InputSelectors],\r\n    combiner: Combiner<InputSelectors, Result>,\r\n    createSelectorOptions?: Simplify<\r\n      CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    >\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of {@linkcode createSelector createSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every {@linkcode createSelector createSelector} call.\r\n   *\r\n   * @returns A pre-typed `createSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createAppSelector = createSelector.withTypes<RootState>()\r\n   *\r\n   * const selectTodoIds = createAppSelector(\r\n   *   [\r\n   *     // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *     state => state.todos\r\n   *   ],\r\n   *   todos => todos.map(({ id }) => id)\r\n   * )\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all selectors created with this selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector#defining-a-pre-typed-createselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <OverrideStateType extends StateType>() => CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction,\r\n    OverrideStateType\r\n  >\r\n}\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param options - An options object containing the `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). It also provides additional options for customizing memoization. While the `memoize` property is mandatory, the rest are optional.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator({\r\n *   memoize: customMemoize, // Function to be used to memoize `resultFunc`\r\n *   memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards\r\n *   argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments\r\n *   argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2] // Options passed to `customArgsMemoize` as the second argument onwards\r\n * })\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n *\r\n * customSelector(\r\n *   ...selectorArgs // Will be memoized by `customArgsMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-options-since-500 `createSelectorCreator`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n>(\r\n  options: Simplify<\r\n    SetRequired<\r\n      CreateSelectorOptions<\r\n        typeof weakMapMemoize,\r\n        typeof weakMapMemoize,\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >,\r\n      'memoize'\r\n    >\r\n  >\r\n): CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param memoize - The `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator(customMemoize, // Function to be used to memoize `resultFunc`\r\n *   option1, // Will be passed as second argument to `customMemoize`\r\n *   option2, // Will be passed as third argument to `customMemoize`\r\n *   option3 // Will be passed as fourth argument to `customMemoize`\r\n * )\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-memoize-and-memoizeoptions `createSelectorCreator`}\r\n *\r\n * @public\r\n */\r\nexport function createSelectorCreator<MemoizeFunction extends UnknownMemoizer>(\r\n  memoize: MemoizeFunction,\r\n  ...memoizeOptionsFromArgs: DropFirstParameter<MemoizeFunction>\r\n): CreateSelectorFunction<MemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization\r\n * function and options for customizing memoization behavior.\r\n *\r\n * @param memoizeOrOptions - Either A `memoize` function or an `options` object containing the `memoize` function.\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template MemoizeOrOptions - The type of the first argument. It can either be a `memoize` function or an `options` object containing the `memoize` function.\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer,\r\n  MemoizeOrOptions extends\r\n    | MemoizeFunction\r\n    | SetRequired<\r\n        CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n        'memoize'\r\n      >\r\n>(\r\n  memoizeOrOptions: MemoizeOrOptions,\r\n  ...memoizeOptionsFromArgs: MemoizeOrOptions extends SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  >\r\n    ? never\r\n    : DropFirstParameter<MemoizeFunction>\r\n) {\r\n  /** options initially passed into `createSelectorCreator`. */\r\n  const createSelectorCreatorOptions: SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  > = typeof memoizeOrOptions === 'function'\r\n    ? {\r\n        memoize: memoizeOrOptions as MemoizeFunction,\r\n        memoizeOptions: memoizeOptionsFromArgs\r\n      }\r\n    : memoizeOrOptions\r\n\r\n  const createSelector = <\r\n    InputSelectors extends SelectorArray,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: [...InputSelectors],\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions?: CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    ]\r\n  ) => {\r\n    let recomputations = 0\r\n    let dependencyRecomputations = 0\r\n    let lastResult: Result\r\n\r\n    // Due to the intricacies of rest params, we can't do an optional arg after `...createSelectorArgs`.\r\n    // So, start by declaring the default value here.\r\n    // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\r\n    let directlyPassedOptions: CreateSelectorOptions<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    > = {}\r\n\r\n    // Normally, the result func or \"combiner\" is the last arg\r\n    let resultFunc = createSelectorArgs.pop() as\r\n      | Combiner<InputSelectors, Result>\r\n      | CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n\r\n    // If the result func is actually an _object_, assume it's our options object\r\n    if (typeof resultFunc === 'object') {\r\n      directlyPassedOptions = resultFunc\r\n      // and pop the real result func off\r\n      resultFunc = createSelectorArgs.pop() as Combiner<InputSelectors, Result>\r\n    }\r\n\r\n    assertIsFunction(\r\n      resultFunc,\r\n      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\r\n    )\r\n\r\n    // Determine which set of options we're using. Prefer options passed directly,\r\n    // but fall back to options given to `createSelectorCreator`.\r\n    const combinedOptions = {\r\n      ...createSelectorCreatorOptions,\r\n      ...directlyPassedOptions\r\n    }\r\n\r\n    const {\r\n      memoize,\r\n      memoizeOptions = [],\r\n      argsMemoize = weakMapMemoize,\r\n      argsMemoizeOptions = [],\r\n      devModeChecks = {}\r\n    } = combinedOptions\r\n\r\n    // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\r\n    // is an array. In most libs I've looked at, it's an equality function or options object.\r\n    // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\r\n    // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\r\n    // we wrap it in an array so we can apply it.\r\n    const finalMemoizeOptions = ensureIsArray(memoizeOptions)\r\n    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions)\r\n    const dependencies = getDependencies(createSelectorArgs) as InputSelectors\r\n\r\n    const memoizedResultFunc = memoize(function recomputationWrapper() {\r\n      recomputations++\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      return (resultFunc as Combiner<InputSelectors, Result>).apply(\r\n        null,\r\n        arguments as unknown as Parameters<Combiner<InputSelectors, Result>>\r\n      )\r\n    }, ...finalMemoizeOptions) as Combiner<InputSelectors, Result> &\r\n      ExtractMemoizerFields<OverrideMemoizeFunction>\r\n\r\n    let firstRun = true\r\n\r\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\r\n    const selector = argsMemoize(function dependenciesChecker() {\r\n      dependencyRecomputations++\r\n      /** Return values of input selectors which the `resultFunc` takes as arguments. */\r\n      const inputSelectorResults = collectInputSelectorResults(\r\n        dependencies,\r\n        arguments\r\n      )\r\n\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      lastResult = memoizedResultFunc.apply(null, inputSelectorResults)\r\n\r\n      if (process.env.NODE_ENV !== 'production') {\r\n        const { identityFunctionCheck, inputStabilityCheck } =\r\n          getDevModeChecksExecutionInfo(firstRun, devModeChecks)\r\n        if (identityFunctionCheck.shouldRun) {\r\n          identityFunctionCheck.run(\r\n            resultFunc as Combiner<InputSelectors, Result>,\r\n            inputSelectorResults,\r\n            lastResult\r\n          )\r\n        }\r\n\r\n        if (inputStabilityCheck.shouldRun) {\r\n          // make a second copy of the params, to check if we got the same results\r\n          const inputSelectorResultsCopy = collectInputSelectorResults(\r\n            dependencies,\r\n            arguments\r\n          )\r\n\r\n          inputStabilityCheck.run(\r\n            { inputSelectorResults, inputSelectorResultsCopy },\r\n            { memoize, memoizeOptions: finalMemoizeOptions },\r\n            arguments\r\n          )\r\n        }\r\n\r\n        if (firstRun) firstRun = false\r\n      }\r\n\r\n      return lastResult\r\n    }, ...finalArgsMemoizeOptions) as unknown as Selector<\r\n      GetStateFromSelectors<InputSelectors>,\r\n      Result,\r\n      GetParamsFromSelectors<InputSelectors>\r\n    > &\r\n      ExtractMemoizerFields<OverrideArgsMemoizeFunction>\r\n\r\n    return Object.assign(selector, {\r\n      resultFunc,\r\n      memoizedResultFunc,\r\n      dependencies,\r\n      dependencyRecomputations: () => dependencyRecomputations,\r\n      resetDependencyRecomputations: () => {\r\n        dependencyRecomputations = 0\r\n      },\r\n      lastResult: () => lastResult,\r\n      recomputations: () => recomputations,\r\n      resetRecomputations: () => {\r\n        recomputations = 0\r\n      },\r\n      memoize,\r\n      argsMemoize\r\n    }) as OutputSelector<\r\n      InputSelectors,\r\n      Result,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    >\r\n  }\r\n\r\n  Object.assign(createSelector, {\r\n    withTypes: () => createSelector\r\n  })\r\n\r\n  return createSelector as CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  >\r\n}\r\n\r\n/**\r\n * Accepts one or more \"input selectors\" (either as separate arguments or a single array),\r\n * a single \"result function\" / \"combiner\", and an optional options object, and\r\n * generates a memoized selector function.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelector `createSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createSelector =\r\n  /* #__PURE__ */ createSelectorCreator(weakMapMemoize)\r\n","import { createSelector } from './createSelectorCreator'\r\n\r\nimport type { CreateSelectorFunction } from './createSelectorCreator'\r\nimport type {\r\n  InterruptRecursion,\r\n  ObjectValuesToTuple,\r\n  OutputSelector,\r\n  Selector,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\nimport { assertIsObject } from './utils'\r\nimport type { weakMapMemoize } from './weakMapMemoize'\r\n\r\n/**\r\n * Represents a mapping of selectors to their return types.\r\n *\r\n * @template TObject - An object type where each property is a selector function.\r\n *\r\n * @public\r\n */\r\nexport type SelectorResultsMap<TObject extends SelectorsObject> = {\r\n  [Key in keyof TObject]: ReturnType<TObject[Key]>\r\n}\r\n\r\n/**\r\n * Represents a mapping of selectors for each key in a given root state.\r\n *\r\n * This type is a utility that takes a root state object type and\r\n * generates a corresponding set of selectors. Each selector is associated\r\n * with a key in the root state, allowing for the selection\r\n * of specific parts of the state.\r\n *\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type RootStateSelectors<RootState = any> = {\r\n  [Key in keyof RootState]: Selector<RootState, RootState[Key], []>\r\n}\r\n\r\n/**\r\n * @deprecated Please use {@linkcode StructuredSelectorCreator.withTypes createStructuredSelector.withTypes<RootState>()} instead. This type will be removed in the future.\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type TypedStructuredSelectorCreator<RootState = any> =\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends RootStateSelectors<RootState> = RootStateSelectors<RootState>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ) => OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n/**\r\n * Represents an object where each property is a selector function.\r\n *\r\n * @template StateType - The type of state that all the selectors operate on.\r\n *\r\n * @public\r\n */\r\nexport type SelectorsObject<StateType = any> = Record<\r\n  string,\r\n  Selector<StateType>\r\n>\r\n\r\n/**\r\n * It provides a way to create structured selectors.\r\n * The structured selector can take multiple input selectors\r\n * and map their output to an object with specific keys.\r\n *\r\n * @template StateType - The type of state that the structured selectors created with this structured selector creator will operate on.\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport interface StructuredSelectorCreator<StateType = any> {\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends SelectorsObject<StateType>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ): OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of\r\n   * {@linkcode createStructuredSelector createStructuredSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every\r\n   * {@linkcode createStructuredSelector createStructuredSelector} call.\r\n   *\r\n   * @returns A pre-typed `createStructuredSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createStructuredSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createStructuredAppSelector =\r\n   *   createStructuredSelector.withTypes<RootState>()\r\n   *\r\n   * const structuredAppSelector = createStructuredAppSelector({\r\n   *   // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *   todos: state => state.todos,\r\n   *   alerts: state => state.alerts,\r\n   *   todoById: (state, id: number) => state.todos[id]\r\n   * })\r\n   *\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all structured selectors created with this structured selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createstructuredselector#defining-a-pre-typed-createstructuredselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <\r\n    OverrideStateType extends StateType\r\n  >() => StructuredSelectorCreator<OverrideStateType>\r\n}\r\n\r\n/**\r\n * A convenience function that simplifies returning an object\r\n * made up of selector results.\r\n *\r\n * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n * @returns A memoized structured selector.\r\n *\r\n * @example\r\n * <caption>Modern Use Case</caption>\r\n * ```ts\r\n * import { createSelector, createStructuredSelector } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   todos: {\r\n *     id: number\r\n *     completed: boolean\r\n *     title: string\r\n *     description: string\r\n *   }[]\r\n *   alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * // This:\r\n * const structuredSelector = createStructuredSelector(\r\n *   {\r\n *     todos: (state: RootState) => state.todos,\r\n *     alerts: (state: RootState) => state.alerts,\r\n *     todoById: (state: RootState, id: number) => state.todos[id]\r\n *   },\r\n *   createSelector\r\n * )\r\n *\r\n * // Is essentially the same as this:\r\n * const selector = createSelector(\r\n *   [\r\n *     (state: RootState) => state.todos,\r\n *     (state: RootState) => state.alerts,\r\n *     (state: RootState, id: number) => state.todos[id]\r\n *   ],\r\n *   (todos, alerts, todoById) => {\r\n *     return {\r\n *       todos,\r\n *       alerts,\r\n *       todoById\r\n *     }\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createStructuredSelector: StructuredSelectorCreator =\r\n  Object.assign(\r\n    <\r\n      InputSelectorsObject extends SelectorsObject,\r\n      MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n      ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n    >(\r\n      inputSelectorsObject: InputSelectorsObject,\r\n      selectorCreator: CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      > = createSelector as CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >\r\n    ) => {\r\n      assertIsObject(\r\n        inputSelectorsObject,\r\n        'createStructuredSelector expects first argument to be an object ' +\r\n          `where each property is a selector, instead received a ${typeof inputSelectorsObject}`\r\n      )\r\n      const inputSelectorKeys = Object.keys(inputSelectorsObject)\r\n      const dependencies = inputSelectorKeys.map(\r\n        key => inputSelectorsObject[key]\r\n      )\r\n      const structuredSelector = selectorCreator(\r\n        dependencies,\r\n        (...inputSelectorResults: any[]) => {\r\n          return inputSelectorResults.reduce((composition, value, index) => {\r\n            composition[inputSelectorKeys[index]] = value\r\n            return composition\r\n          }, {})\r\n        }\r\n      )\r\n      return structuredSelector\r\n    },\r\n    { withTypes: () => createStructuredSelector }\r\n  ) as StructuredSelectorCreator\r\n"],"mappings":"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","names":["globalDevModeChecks","setGlobalDevModeChecks","devModeChecks","NOT_FOUND","assertIsFunction","func","errorMessage","assertIsObject","object","assertIsArrayOfFunctions","array","item","itemTypes","ensureIsArray","getDependencies","createSelectorArgs","dependencies","collectInputSelectorResults","inputSelectorArgs","inputSelectorResults","length","i","$REVISION","CURRENT_TRACKER","Cell","tripleEq","initialValue","isEqual","newValue","a","b","TrackingCache","fn","currentTracker","prevTracker","d","getValue","cell","setValue","storage","value","createCell","createCache","assertIsFunction","neverEq","a","b","createTag","createCell","dirtyTag","tag","value","setValue","consumeCollection","node","createTag","getValue","dirtyCollection","REDUX_PROXY_LABEL","nextId","proto","ObjectTreeNode","value","objectProxyHandler","createTag","node","key","calculateResult","childValue","childNode","createNode","getValue","tag","consumeCollection","prop","ArrayTreeNode","arrayProxyHandler","updateNode","node","newValue","value","tags","children","dirtyCollection","oldKeysSize","newKeysSize","anyKeysAdded","_key","key","childValue","newChildValue","dirtyTag","childNode","deleteNode","createSingletonCache","equals","entry","key","NOT_FOUND","value","createLruCache","maxSize","entries","get","cacheIndex","put","getEntries","clear","referenceEqualityCheck","a","b","createCacheKeyComparator","equalityCheck","prev","next","length","i","lruMemoize","func","equalityCheckOrOptions","providedOptions","resultEqualityCheck","comparator","resultsCount","cache","memoized","matchingEntry","autotrackMemoize","func","node","createNode","lastArgs","shallowEqual","createCacheKeyComparator","referenceEqualityCheck","cache","createCache","memoized","updateNode","StrongRef","value","Ref","UNTERMINATED","TERMINATED","createCacheNode","weakMapMemoize","func","options","fnNode","resultEqualityCheck","lastResult","resultsCount","memoized","cacheNode","length","i","l","arg","objectCache","objectNode","primitiveCache","primitiveNode","terminatedNode","result","lastResultValue","createSelectorCreator","memoizeOrOptions","memoizeOptionsFromArgs","createSelectorCreatorOptions","createSelector","createSelectorArgs","recomputations","dependencyRecomputations","lastResult","directlyPassedOptions","resultFunc","assertIsFunction","combinedOptions","memoize","memoizeOptions","argsMemoize","weakMapMemoize","argsMemoizeOptions","devModeChecks","finalMemoizeOptions","ensureIsArray","finalArgsMemoizeOptions","dependencies","getDependencies","memoizedResultFunc","firstRun","selector","inputSelectorResults","collectInputSelectorResults","createStructuredSelector","inputSelectorsObject","selectorCreator","createSelector","assertIsObject","inputSelectorKeys","dependencies","key","inputSelectorResults","composition","value","index"]}
Index: node_modules/reselect/dist/reselect.d.ts
===================================================================
--- node_modules/reselect/dist/reselect.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/dist/reselect.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1429 @@
+/**
+ * Represents the longest array within an array of arrays.
+ *
+ * @template ArrayOfTuples An array of arrays.
+ *
+ * @internal
+ */
+type LongestTuple<ArrayOfTuples extends readonly unknown[][]> = ArrayOfTuples extends [infer FirstArray extends unknown[]] ? FirstArray : ArrayOfTuples extends [
+    infer FirstArray,
+    ...infer RestArrays extends unknown[][]
+] ? LongerOfTwo<FirstArray, LongestTuple<RestArrays>> : never;
+/**
+ * Determines the longer of two array types.
+ *
+ * @template ArrayOne First array type.
+ * @template ArrayTwo Second array type.
+ *
+ * @internal
+ */
+type LongerOfTwo<ArrayOne, ArrayTwo> = keyof ArrayTwo extends keyof ArrayOne ? ArrayOne : ArrayTwo;
+/**
+ * Extracts the element at a specific index in an array.
+ *
+ * @template ArrayType The array type.
+ * @template Index The index type.
+ *
+ * @internal
+ */
+type ElementAt<ArrayType extends unknown[], Index extends PropertyKey> = Index extends keyof ArrayType ? ArrayType[Index] : unknown;
+/**
+ * Maps each array in an array of arrays to its element at a given index.
+ *
+ * @template ArrayOfTuples An array of arrays.
+ * @template Index The index to extract from each array.
+ *
+ * @internal
+ */
+type ElementsAtGivenIndex<ArrayOfTuples extends readonly unknown[][], Index extends PropertyKey> = {
+    [ArrayIndex in keyof ArrayOfTuples]: ElementAt<ArrayOfTuples[ArrayIndex], Index>;
+};
+/**
+ * Computes the intersection of all types in a tuple.
+ *
+ * @template Tuple A tuple of types.
+ *
+ * @internal
+ */
+type Intersect<Tuple extends readonly unknown[]> = Tuple extends [] ? unknown : Tuple extends [infer Head, ...infer Tail] ? Head & Intersect<Tail> : Tuple[number];
+/**
+ * Merges a tuple of arrays into a single tuple, intersecting types at each index.
+ *
+ * @template ArrayOfTuples An array of tuples.
+ * @template LongestArray The longest array in ArrayOfTuples.
+ *
+ * @internal
+ */
+type MergeTuples<ArrayOfTuples extends readonly unknown[][], LongestArray extends unknown[] = LongestTuple<ArrayOfTuples>> = {
+    [Index in keyof LongestArray]: Intersect<ElementsAtGivenIndex<ArrayOfTuples, Index>>;
+};
+/**
+ * Extracts the parameter types from a tuple of functions.
+ *
+ * @template FunctionsArray An array of function types.
+ *
+ * @internal
+ */
+type ExtractParameters<FunctionsArray extends readonly AnyFunction[]> = {
+    [Index in keyof FunctionsArray]: Parameters<FunctionsArray[Index]>;
+};
+/**
+ * Merges the parameters of a tuple of functions into a single tuple.
+ *
+ * @template FunctionsArray An array of function types.
+ *
+ * @internal
+ */
+type MergeParameters<FunctionsArray extends readonly AnyFunction[]> = '0' extends keyof FunctionsArray ? MergeTuples<ExtractParameters<FunctionsArray>> : Parameters<FunctionsArray[number]>;
+
+/**
+ * Configuration options for a memoization function utilizing `WeakMap` for
+ * its caching mechanism.
+ *
+ * @template Result - The type of the return value of the memoized function.
+ *
+ * @since 5.0.0
+ * @public
+ */
+interface WeakMapMemoizeOptions<Result = any> {
+    /**
+     * If provided, used to compare a newly generated output value against previous values in the cache.
+     * If a match is found, the old value is returned. This addresses the common
+     * ```ts
+     * todos.map(todo => todo.id)
+     * ```
+     * use case, where an update to another field in the original data causes a recalculation
+     * due to changed references, but the output is still effectively the same.
+     *
+     * @since 5.0.0
+     */
+    resultEqualityCheck?: EqualityFn<Result>;
+}
+/**
+ * Creates a tree of `WeakMap`-based cache nodes based on the identity of the
+ * arguments it's been called with (in this case, the extracted values from your input selectors).
+ * This allows `weakMapMemoize` to have an effectively infinite cache size.
+ * Cache results will be kept in memory as long as references to the arguments still exist,
+ * and then cleared out as the arguments are garbage-collected.
+ *
+ * __Design Tradeoffs for `weakMapMemoize`:__
+ * - Pros:
+ *   - It has an effectively infinite cache size, but you have no control over
+ *   how long values are kept in cache as it's based on garbage collection and `WeakMap`s.
+ * - Cons:
+ *   - There's currently no way to alter the argument comparisons.
+ *   They're based on strict reference equality.
+ *   - It's roughly the same speed as `lruMemoize`, although likely a fraction slower.
+ *
+ * __Use Cases for `weakMapMemoize`:__
+ * - This memoizer is likely best used for cases where you need to call the
+ * same selector instance with many different arguments, such as a single
+ * selector instance that is used in a list item component and called with
+ * item IDs like:
+ *   ```ts
+ *   useSelector(state => selectSomeData(state, props.category))
+ *   ```
+ * @param func - The function to be memoized.
+ * @returns A memoized function with a `.clearCache()` method attached.
+ *
+ * @example
+ * <caption>Using `createSelector`</caption>
+ * ```ts
+ * import { createSelector, weakMapMemoize } from 'reselect'
+ *
+ * interface RootState {
+ *   items: { id: number; category: string; name: string }[]
+ * }
+ *
+ * const selectItemsByCategory = createSelector(
+ *   [
+ *     (state: RootState) => state.items,
+ *     (state: RootState, category: string) => category
+ *   ],
+ *   (items, category) => items.filter(item => item.category === category),
+ *   {
+ *     memoize: weakMapMemoize,
+ *     argsMemoize: weakMapMemoize
+ *   }
+ * )
+ * ```
+ *
+ * @example
+ * <caption>Using `createSelectorCreator`</caption>
+ * ```ts
+ * import { createSelectorCreator, weakMapMemoize } from 'reselect'
+ *
+ * const createSelectorWeakMap = createSelectorCreator({ memoize: weakMapMemoize, argsMemoize: weakMapMemoize })
+ *
+ * const selectItemsByCategory = createSelectorWeakMap(
+ *   [
+ *     (state: RootState) => state.items,
+ *     (state: RootState, category: string) => category
+ *   ],
+ *   (items, category) => items.filter(item => item.category === category)
+ * )
+ * ```
+ *
+ * @template Func - The type of the function that is memoized.
+ *
+ * @see {@link https://reselect.js.org/api/weakMapMemoize `weakMapMemoize`}
+ *
+ * @since 5.0.0
+ * @public
+ * @experimental
+ */
+declare function weakMapMemoize<Func extends AnyFunction>(func: Func, options?: WeakMapMemoizeOptions<ReturnType<Func>>): Func & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+};
+
+/**
+ * A standard selector function.
+ * @template State - The first value, often a Redux root state object.
+ * @template Result - The final result returned by the selector.
+ * @template Params - All additional arguments passed into the selector.
+ *
+ * @public
+ */
+type Selector<State = any, Result = unknown, Params extends readonly any[] = any[]> = Distribute<
+/**
+ * A function that takes a state and returns data that is based on that state.
+ *
+ * @param state - The first argument, often a Redux root state object.
+ * @param params - All additional arguments passed into the selector.
+ * @returns A derived value from the state.
+ */
+(state: State, ...params: FallbackIfNever<Params, []>) => Result>;
+/**
+ * An array of input selectors.
+ *
+ * @public
+ */
+type SelectorArray<State = any> = readonly Selector<State>[];
+/**
+ * Extracts an array of all return types from all input selectors.
+ *
+ * @public
+ */
+type SelectorResultArray<Selectors extends SelectorArray> = ExtractReturnType<Selectors>;
+/**
+ * The options object used inside `createSelector` and `createSelectorCreator`.
+ *
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object inside `createSelector` to override the original `memoize` function that was initially passed into `createSelectorCreator`.
+ * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object inside `createSelector` to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`. If none was initially provided, `weakMapMemoize` will be used.
+ *
+ * @public
+ */
+interface CreateSelectorOptions<MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize, ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize, OverrideMemoizeFunction extends UnknownMemoizer = never, OverrideArgsMemoizeFunction extends UnknownMemoizer = never> {
+    /**
+     * Reselect performs additional checks in development mode to help identify
+     * and warn about potential issues in selector behavior. This option
+     * allows you to customize the behavior of these checks per selector.
+     *
+     * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}
+     *
+     * @since 5.0.0
+     */
+    devModeChecks?: Partial<DevModeChecks>;
+    /**
+     * The memoize function that is used to memoize the {@linkcode OutputSelectorFields.resultFunc resultFunc}
+     * inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+     *
+     * When passed directly into `createSelector`, it overrides the `memoize` function initially passed into `createSelectorCreator`.
+     *
+     * @example
+     * ```ts
+     * import { createSelector, weakMapMemoize } from 'reselect'
+     *
+     * const selectItemsByCategory = createSelector(
+     *   [
+     *     (state: RootState) => state.items,
+     *     (state: RootState, category: string) => category
+     *   ],
+     *   (items, category) => items.filter(item => item.category === category),
+     *   { memoize: weakMapMemoize }
+     * )
+     * ```
+     *
+     * @since 5.0.0
+     */
+    memoize?: FallbackIfNever<OverrideMemoizeFunction, MemoizeFunction>;
+    /**
+     * The optional memoize function that is used to memoize the arguments
+     * passed into the output selector generated by `createSelector`
+     * (e.g., `lruMemoize` or `weakMapMemoize`).
+     *
+     * When passed directly into `createSelector`, it overrides the
+     * `argsMemoize` function initially passed into `createSelectorCreator`.
+     * If none was initially provided, `weakMapMemoize` will be used.
+     *
+     * @example
+     * ```ts
+     * import { createSelector, weakMapMemoize } from 'reselect'
+     *
+     * const selectItemsByCategory = createSelector(
+     *   [
+     *     (state: RootState) => state.items,
+     *     (state: RootState, category: string) => category
+     *   ],
+     *   (items, category) => items.filter(item => item.category === category),
+     *   { argsMemoize: weakMapMemoize }
+     * )
+     * ```
+     *
+     * @default weakMapMemoize
+     *
+     * @since 5.0.0
+     */
+    argsMemoize?: FallbackIfNever<OverrideArgsMemoizeFunction, ArgsMemoizeFunction>;
+    /**
+     * Optional configuration options for the {@linkcode CreateSelectorOptions.memoize memoize} function.
+     * These options are passed to the {@linkcode CreateSelectorOptions.memoize memoize} function as the second argument.
+     *
+     * @since 5.0.0
+     */
+    memoizeOptions?: OverrideMemoizeOptions<MemoizeFunction, OverrideMemoizeFunction>;
+    /**
+     * Optional configuration options for the {@linkcode CreateSelectorOptions.argsMemoize argsMemoize} function.
+     * These options are passed to the {@linkcode CreateSelectorOptions.argsMemoize argsMemoize} function as the second argument.
+     *
+     * @since 5.0.0
+     */
+    argsMemoizeOptions?: OverrideMemoizeOptions<ArgsMemoizeFunction, OverrideArgsMemoizeFunction>;
+}
+/**
+ * The additional fields attached to the output selector generated by `createSelector`.
+ *
+ * **Note**: Although {@linkcode CreateSelectorOptions.memoize memoize}
+ * and {@linkcode CreateSelectorOptions.argsMemoize argsMemoize} are included in the attached fields,
+ * the fields themselves are independent of the type of
+ * {@linkcode CreateSelectorOptions.memoize memoize} and {@linkcode CreateSelectorOptions.argsMemoize argsMemoize} functions.
+ * Meaning this type is not going to generate additional fields based on what functions we use to memoize our selectors.
+ *
+ * _This type is not to be confused with {@linkcode ExtractMemoizerFields ExtractMemoizerFields}._
+ *
+ * @template InputSelectors - The type of the input selectors.
+ * @template Result - The type of the result returned by the `resultFunc`.
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ *
+ * @public
+ */
+type OutputSelectorFields<InputSelectors extends SelectorArray = SelectorArray, Result = unknown, MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize, ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize> = {
+    /**
+     * The final function passed to `createSelector`. Otherwise known as the `combiner`.
+     */
+    resultFunc: Combiner<InputSelectors, Result>;
+    /**
+     * The memoized version of {@linkcode OutputSelectorFields.resultFunc resultFunc}.
+     */
+    memoizedResultFunc: Combiner<InputSelectors, Result> & ExtractMemoizerFields<MemoizeFunction>;
+    /**
+     * @Returns The last result calculated by {@linkcode OutputSelectorFields.memoizedResultFunc memoizedResultFunc}.
+     */
+    lastResult: () => Result;
+    /**
+     * The array of the input selectors used by `createSelector` to compose the
+     * combiner ({@linkcode OutputSelectorFields.memoizedResultFunc memoizedResultFunc}).
+     */
+    dependencies: InputSelectors;
+    /**
+     * Counts the number of times {@linkcode OutputSelectorFields.memoizedResultFunc memoizedResultFunc} has been recalculated.
+     */
+    recomputations: () => number;
+    /**
+     * Resets the count of {@linkcode OutputSelectorFields.recomputations recomputations} count to 0.
+     */
+    resetRecomputations: () => void;
+    /**
+     * Counts the number of times the input selectors ({@linkcode OutputSelectorFields.dependencies dependencies})
+     * have been recalculated. This is distinct from {@linkcode OutputSelectorFields.recomputations recomputations},
+     * which tracks the recalculations of the result function.
+     *
+     * @since 5.0.0
+     */
+    dependencyRecomputations: () => number;
+    /**
+     * Resets the count {@linkcode OutputSelectorFields.dependencyRecomputations dependencyRecomputations}
+     * for the input selectors ({@linkcode OutputSelectorFields.dependencies dependencies})
+     * of a memoized selector.
+     *
+     * @since 5.0.0
+     */
+    resetDependencyRecomputations: () => void;
+} & Simplify<Required<Pick<CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>, 'argsMemoize' | 'memoize'>>>;
+/**
+ * Represents the actual selectors generated by `createSelector`.
+ *
+ * @template InputSelectors - The type of the input selectors.
+ * @template Result - The type of the result returned by the `resultFunc`.
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ *
+ * @public
+ */
+type OutputSelector<InputSelectors extends SelectorArray = SelectorArray, Result = unknown, MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize, ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize> = Selector<GetStateFromSelectors<InputSelectors>, Result, GetParamsFromSelectors<InputSelectors>> & ExtractMemoizerFields<ArgsMemoizeFunction> & OutputSelectorFields<InputSelectors, Result, MemoizeFunction, ArgsMemoizeFunction>;
+/**
+ * A function that takes input selectors' return values as arguments and returns a result. Otherwise known as `resultFunc`.
+ *
+ * @template InputSelectors - An array of input selectors.
+ * @template Result - Result returned by `resultFunc`.
+ *
+ * @public
+ */
+type Combiner<InputSelectors extends SelectorArray, Result> = Distribute<
+/**
+ * A function that takes input selectors' return values as arguments and returns a result. Otherwise known as `resultFunc`.
+ *
+ * @param resultFuncArgs - Return values of input selectors.
+ * @returns The return value of {@linkcode OutputSelectorFields.resultFunc resultFunc}.
+ */
+(...resultFuncArgs: SelectorResultArray<InputSelectors>) => Result>;
+/**
+ * A standard function returning true if two values are considered equal.
+ *
+ * @public
+ */
+type EqualityFn<T = any> = (a: T, b: T) => boolean;
+/**
+ * The frequency of development mode checks.
+ *
+ * @since 5.0.0
+ * @public
+ */
+type DevModeCheckFrequency = 'always' | 'once' | 'never';
+/**
+ * Represents the configuration for development mode checks.
+ *
+ * @since 5.0.0
+ * @public
+ */
+interface DevModeChecks {
+    /**
+     * Overrides the global input stability check for the selector.
+     * - `once` - Run only the first time the selector is called.
+     * - `always` - Run every time the selector is called.
+     * - `never` - Never run the input stability check.
+     *
+     * @default 'once'
+     *
+     * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}
+     * @see {@link https://reselect.js.org/api/development-only-stability-checks#inputstabilitycheck `inputStabilityCheck`}
+     * @see {@link https://reselect.js.org/api/development-only-stability-checks#2-per-selector-by-passing-an-inputstabilitycheck-option-directly-to- per-selector-configuration}
+     *
+     * @since 5.0.0
+     */
+    inputStabilityCheck: DevModeCheckFrequency;
+    /**
+     * Overrides the global identity function check for the selector.
+     * - `once` - Run only the first time the selector is called.
+     * - `always` - Run every time the selector is called.
+     * - `never` - Never run the identity function check.
+     *
+     * @default 'once'
+     *
+     * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}
+     * @see {@link https://reselect.js.org/api/development-only-stability-checks#identityfunctioncheck `identityFunctionCheck`}
+     * @see {@link https://reselect.js.org/api/development-only-stability-checks#2-per-selector-by-passing-an-identityfunctioncheck-option-directly-to- per-selector-configuration}
+     *
+     * @since 5.0.0
+     */
+    identityFunctionCheck: DevModeCheckFrequency;
+}
+/**
+ * Represents execution information for development mode checks.
+ *
+ * @public
+ * @since 5.0.0
+ */
+type DevModeChecksExecutionInfo = {
+    [K in keyof DevModeChecks]: {
+        /**
+         * A boolean indicating whether the check should be executed.
+         */
+        shouldRun: boolean;
+        /**
+         * The function to execute for the check.
+         */
+        run: AnyFunction;
+    };
+};
+/**
+ * Determines the combined single "State" type (first arg) from all input selectors.
+ *
+ * @public
+ */
+type GetStateFromSelectors<Selectors extends SelectorArray> = MergeParameters<Selectors>[0];
+/**
+ * Determines the combined  "Params" type (all remaining args) from all input selectors.
+ *
+ * @public
+ */
+type GetParamsFromSelectors<Selectors extends SelectorArray> = ArrayTail<MergeParameters<Selectors>>;
+/**
+ * Any Memoizer function. A memoizer is a function that accepts another function and returns it.
+ *
+ * @template FunctionType - The type of the function that is memoized.
+ *
+ * @public
+ */
+type UnknownMemoizer<FunctionType extends UnknownFunction = UnknownFunction> = (func: FunctionType, ...options: any[]) => FunctionType;
+/**
+ * Extracts the options type for a memoization function based on its parameters.
+ * The first parameter of the function is expected to be the function to be memoized,
+ * followed by options for the memoization process.
+ *
+ * @template MemoizeFunction - The type of the memoize function to be checked.
+ *
+ * @public
+ */
+type MemoizeOptionsFromParameters<MemoizeFunction extends UnknownMemoizer> = (NonFunctionType<DropFirstParameter<MemoizeFunction>[0]> | FunctionType<DropFirstParameter<MemoizeFunction>[0]>) | (NonFunctionType<DropFirstParameter<MemoizeFunction>[number]> | FunctionType<DropFirstParameter<MemoizeFunction>[number]>)[];
+/**
+ * Derive the type of memoize options object based on whether the memoize function itself was overridden.
+ *
+ * _This type can be used for both `memoizeOptions` and `argsMemoizeOptions`._
+ *
+ * @template MemoizeFunction - The type of the `memoize` or `argsMemoize` function initially passed into `createSelectorCreator`.
+ * @template OverrideMemoizeFunction - The type of the optional `memoize` or `argsMemoize` function passed directly into `createSelector` which then overrides the original `memoize` or `argsMemoize` function passed into `createSelectorCreator`.
+ *
+ * @public
+ */
+type OverrideMemoizeOptions<MemoizeFunction extends UnknownMemoizer, OverrideMemoizeFunction extends UnknownMemoizer = never> = IfNever<OverrideMemoizeFunction, Simplify<MemoizeOptionsFromParameters<MemoizeFunction>>, Simplify<MemoizeOptionsFromParameters<OverrideMemoizeFunction>>>;
+/**
+ * Extracts the additional properties or methods that a memoize function attaches to
+ * the function it memoizes (e.g., `clearCache`).
+ *
+ * @template MemoizeFunction - The type of the memoize function to be checked.
+ *
+ * @public
+ */
+type ExtractMemoizerFields<MemoizeFunction extends UnknownMemoizer> = Simplify<OmitIndexSignature<ReturnType<MemoizeFunction>>>;
+/**
+ * Represents the additional properties attached to a function memoized by `reselect`.
+ *
+ * `lruMemoize`, `weakMapMemoize` and `autotrackMemoize` all return these properties.
+ *
+ * @see {@linkcode ExtractMemoizerFields ExtractMemoizerFields}
+ *
+ * @public
+ */
+type DefaultMemoizeFields = {
+    /**
+     * Clears the memoization cache associated with a memoized function.
+     * This method is typically used to reset the state of the cache, allowing
+     * for the garbage collection of previously memoized results and ensuring
+     * that future calls to the function recompute the results.
+     */
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+};
+/**
+ * Any function with any arguments.
+ *
+ * @internal
+ */
+type AnyFunction = (...args: any[]) => any;
+/**
+ * Any function with unknown arguments.
+ *
+ * @internal
+ */
+type UnknownFunction = (...args: unknown[]) => unknown;
+/**
+ * When a generic type parameter is using its default value of `never`, fallback to a different type.
+ *
+ * @template T - Type to be checked.
+ * @template FallbackTo - Type to fallback to if `T` resolves to `never`.
+ *
+ * @internal
+ */
+type FallbackIfNever<T, FallbackTo> = IfNever<T, FallbackTo, T>;
+/**
+ * Extracts the non-function part of a type.
+ *
+ * @template T - The input type to be refined by excluding function types and index signatures.
+ *
+ * @internal
+ */
+type NonFunctionType<T> = Simplify<OmitIndexSignature<Exclude<T, AnyFunction>>>;
+/**
+ * Extracts the function part of a type.
+ *
+ * @template T - The input type to be refined by extracting function types.
+ *
+ * @internal
+ */
+type FunctionType<T> = Extract<T, AnyFunction>;
+/**
+ * Extracts the return type from all functions as a tuple.
+ *
+ * @internal
+ */
+type ExtractReturnType<FunctionsArray extends readonly AnyFunction[]> = {
+    [Index in keyof FunctionsArray]: FunctionsArray[Index] extends FunctionsArray[number] ? FallbackIfUnknown<ReturnType<FunctionsArray[Index]>, any> : never;
+};
+/**
+ * Utility type to infer the type of "all params of a function except the first",
+ * so we can determine what arguments a memoize function accepts.
+ *
+ * @internal
+ */
+type DropFirstParameter<Func extends AnyFunction> = Func extends (firstArg: any, ...restArgs: infer Rest) => any ? Rest : never;
+/**
+ * Distributes over a type. It is used mostly to expand a function type
+ * in hover previews while preserving their original JSDoc information.
+ *
+ * If preserving JSDoc information is not a concern, you can use {@linkcode ExpandFunction ExpandFunction}.
+ *
+ * @template T The type to be distributed.
+ *
+ * @internal
+ */
+type Distribute<T> = T extends T ? T : never;
+/**
+ * Extracts the type of an array or tuple minus the first element.
+ *
+ * @internal
+ */
+type ArrayTail<ArrayType> = ArrayType extends readonly [
+    unknown,
+    ...infer Tail
+] ? Tail : [];
+/**
+ * An alias for type `{}`. Represents any value that is not `null` or `undefined`.
+ * It is mostly used for semantic purposes to help distinguish between an
+ * empty object type and `{}` as they are not the same.
+ *
+ * @internal
+ */
+type AnyNonNullishValue = NonNullable<unknown>;
+/**
+ * Same as {@linkcode AnyNonNullishValue AnyNonNullishValue} but aliased
+ * for semantic purposes. It is intended to be used in scenarios where
+ * a recursive type definition needs to be interrupted to ensure type safety
+ * and to avoid excessively deep recursion that could lead to performance issues.
+ *
+ * @internal
+ */
+type InterruptRecursion = AnyNonNullishValue;
+/**
+ * An if-else-like type that resolves depending on whether the given type is `never`.
+ * This is mainly used to conditionally resolve the type of a `memoizeOptions` object based on whether `memoize` is provided or not.
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/if-never.d.ts Source}
+ *
+ * @internal
+ */
+type IfNever<T, TypeIfNever, TypeIfNotNever> = [T] extends [never] ? TypeIfNever : TypeIfNotNever;
+/**
+ * Omit any index signatures from the given object type, leaving only explicitly defined properties.
+ * This is mainly used to remove explicit `any`s from the return type of some memoizers (e.g, `microMemoize`).
+ *
+ * __Disclaimer:__ When used on an intersection of a function and an object,
+ * the function is erased.
+ *
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/omit-index-signature.d.ts Source}
+ *
+ * @internal
+ */
+type OmitIndexSignature<ObjectType> = {
+    [KeyType in keyof ObjectType as {} extends Record<KeyType, unknown> ? never : KeyType]: ObjectType[KeyType];
+};
+/**
+ * The infamous "convert a union type to an intersection type" hack
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/union-to-intersection.d.ts Source}
+ * @see {@link https://github.com/microsoft/TypeScript/issues/29594 Reference}
+ *
+ * @internal
+ */
+type UnionToIntersection<Union> = (Union extends unknown ? (distributedUnion: Union) => void : never) extends (mergedIntersection: infer Intersection) => void ? // The `& Union` is to allow indexing by the resulting type
+Intersection & Union : never;
+/**
+ * Code to convert a union of values into a tuple.
+ * @see {@link https://stackoverflow.com/a/55128956/62937 Source}
+ *
+ * @internal
+ */
+type Push<T extends any[], V> = [...T, V];
+/**
+ * @see {@link https://stackoverflow.com/a/55128956/62937 Source}
+ *
+ * @internal
+ */
+type LastOf<T> = UnionToIntersection<T extends any ? () => T : never> extends () => infer R ? R : never;
+/**
+ * TS4.1+
+ * @see {@link https://stackoverflow.com/a/55128956/62937 Source}
+ *
+ * @internal
+ */
+type TuplifyUnion<T, L = LastOf<T>, N = [T] extends [never] ? true : false> = true extends N ? [] : Push<TuplifyUnion<Exclude<T, L>>, L>;
+/**
+ * Converts "the values of an object" into a tuple, like a type-level `Object.values()`
+ * @see {@link https://stackoverflow.com/a/68695508/62937 Source}
+ *
+ * @internal
+ */
+type ObjectValuesToTuple<T, KS extends any[] = TuplifyUnion<keyof T>, R extends any[] = []> = KS extends [infer K, ...infer KT] ? ObjectValuesToTuple<T, KT, [...R, T[K & keyof T]]> : R;
+/**
+ * Create a type that makes the given keys required.
+ * The remaining keys are kept as is.
+ *
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/set-required.d.ts Source}
+ *
+ * @internal
+ */
+type SetRequired<BaseType, Keys extends keyof BaseType> = Omit<BaseType, Keys> & Required<Pick<BaseType, Keys>>;
+/**
+ * An if-else-like type that resolves depending on whether the given type is `unknown`.
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/if-unknown.d.ts Source}
+ *
+ * @internal
+ */
+type IfUnknown<T, TypeIfUnknown, TypeIfNotUnknown> = unknown extends T ? [T] extends [null] ? TypeIfNotUnknown : TypeIfUnknown : TypeIfNotUnknown;
+/**
+ * When a type is resolves to `unknown`, fallback to a different type.
+ *
+ * @template T - Type to be checked.
+ * @template FallbackTo - Type to fallback to if `T` resolves to `unknown`.
+ *
+ * @internal
+ */
+type FallbackIfUnknown<T, FallbackTo> = IfUnknown<T, FallbackTo, T>;
+/**
+ * Useful to flatten the type output to improve type hints shown in editors.
+ * And also to transform an interface into a type to aide with assignability.
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts Source}
+ *
+ * @internal
+ */
+type Simplify<T> = T extends AnyFunction ? T : {
+    [KeyType in keyof T]: T[KeyType];
+} & AnyNonNullishValue;
+
+/**
+ * Uses an "auto-tracking" approach inspired by the work of the Ember Glimmer team.
+ * It uses a Proxy to wrap arguments and track accesses to nested fields
+ * in your selector on first read. Later, when the selector is called with
+ * new arguments, it identifies which accessed fields have changed and
+ * only recalculates the result if one or more of those accessed fields have changed.
+ * This allows it to be more precise than the shallow equality checks in `lruMemoize`.
+ *
+ * __Design Tradeoffs for `autotrackMemoize`:__
+ * - Pros:
+ *    - It is likely to avoid excess calculations and recalculate fewer times than `lruMemoize` will,
+ *    which may also result in fewer component re-renders.
+ * - Cons:
+ *    - It only has a cache size of 1.
+ *    - It is slower than `lruMemoize`, because it has to do more work. (How much slower is dependent on the number of accessed fields in a selector, number of calls, frequency of input changes, etc)
+ *    - It can have some unexpected behavior. Because it tracks nested field accesses,
+ *    cases where you don't access a field will not recalculate properly.
+ *    For example, a badly-written selector like:
+ *      ```ts
+ *      createSelector([state => state.todos], todos => todos)
+ *      ```
+ *      that just immediately returns the extracted value will never update, because it doesn't see any field accesses to check.
+ *
+ * __Use Cases for `autotrackMemoize`:__
+ * - It is likely best used for cases where you need to access specific nested fields
+ * in data, and avoid recalculating if other fields in the same data objects are immutably updated.
+ *
+ * @param func - The function to be memoized.
+ * @returns A memoized function with a `.clearCache()` method attached.
+ *
+ * @example
+ * <caption>Using `createSelector`</caption>
+ * ```ts
+ * import { unstable_autotrackMemoize as autotrackMemoize, createSelector } from 'reselect'
+ *
+ * const selectTodoIds = createSelector(
+ *   [(state: RootState) => state.todos],
+ *   (todos) => todos.map(todo => todo.id),
+ *   { memoize: autotrackMemoize }
+ * )
+ * ```
+ *
+ * @example
+ * <caption>Using `createSelectorCreator`</caption>
+ * ```ts
+ * import { unstable_autotrackMemoize as autotrackMemoize, createSelectorCreator } from 'reselect'
+ *
+ * const createSelectorAutotrack = createSelectorCreator({ memoize: autotrackMemoize })
+ *
+ * const selectTodoIds = createSelectorAutotrack(
+ *   [(state: RootState) => state.todos],
+ *   (todos) => todos.map(todo => todo.id)
+ * )
+ * ```
+ *
+ * @template Func - The type of the function that is memoized.
+ *
+ * @see {@link https://reselect.js.org/api/unstable_autotrackMemoize autotrackMemoize}
+ *
+ * @since 5.0.0
+ * @public
+ * @experimental
+ */
+declare function autotrackMemoize<Func extends AnyFunction>(func: Func): Func & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+};
+
+/**
+ * An instance of `createSelector`, customized with a given memoize implementation.
+ *
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ * @template StateType - The type of state that the selectors created with this selector creator will operate on.
+ *
+ * @public
+ */
+interface CreateSelectorFunction<MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize, ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize, StateType = any> {
+    /**
+     * Creates a memoized selector function.
+     *
+     * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments and a `combiner` function.
+     * @returns A memoized output selector.
+     *
+     * @template InputSelectors - The type of the input selectors as an array.
+     * @template Result - The return type of the `combiner` as well as the output selector.
+     * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.
+     * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.
+     *
+     * @see {@link https://reselect.js.org/api/createselector `createSelector`}
+     */
+    <InputSelectors extends SelectorArray<StateType>, Result>(...createSelectorArgs: [
+        ...inputSelectors: InputSelectors,
+        combiner: Combiner<InputSelectors, Result>
+    ]): OutputSelector<InputSelectors, Result, MemoizeFunction, ArgsMemoizeFunction> & InterruptRecursion;
+    /**
+     * Creates a memoized selector function.
+     *
+     * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments, a `combiner` function and an `options` object.
+     * @returns A memoized output selector.
+     *
+     * @template InputSelectors - The type of the input selectors as an array.
+     * @template Result - The return type of the `combiner` as well as the output selector.
+     * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.
+     * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.
+     *
+     * @see {@link https://reselect.js.org/api/createselector `createSelector`}
+     */
+    <InputSelectors extends SelectorArray<StateType>, Result, OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction, OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction>(...createSelectorArgs: [
+        ...inputSelectors: InputSelectors,
+        combiner: Combiner<InputSelectors, Result>,
+        createSelectorOptions: Simplify<CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction, OverrideMemoizeFunction, OverrideArgsMemoizeFunction>>
+    ]): OutputSelector<InputSelectors, Result, OverrideMemoizeFunction, OverrideArgsMemoizeFunction> & InterruptRecursion;
+    /**
+     * Creates a memoized selector function.
+     *
+     * @param inputSelectors - An array of input selectors.
+     * @param combiner - A function that Combines the input selectors and returns an output selector. Otherwise known as the result function.
+     * @param createSelectorOptions - An optional options object that allows for further customization per selector.
+     * @returns A memoized output selector.
+     *
+     * @template InputSelectors - The type of the input selectors array.
+     * @template Result - The return type of the `combiner` as well as the output selector.
+     * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.
+     * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.
+     *
+     * @see {@link https://reselect.js.org/api/createselector `createSelector`}
+     */
+    <InputSelectors extends SelectorArray<StateType>, Result, OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction, OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction>(inputSelectors: [...InputSelectors], combiner: Combiner<InputSelectors, Result>, createSelectorOptions?: Simplify<CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction, OverrideMemoizeFunction, OverrideArgsMemoizeFunction>>): OutputSelector<InputSelectors, Result, OverrideMemoizeFunction, OverrideArgsMemoizeFunction> & InterruptRecursion;
+    /**
+     * Creates a "pre-typed" version of {@linkcode createSelector createSelector}
+     * where the `state` type is predefined.
+     *
+     * This allows you to set the `state` type once, eliminating the need to
+     * specify it with every {@linkcode createSelector createSelector} call.
+     *
+     * @returns A pre-typed `createSelector` with the state type already defined.
+     *
+     * @example
+     * ```ts
+     * import { createSelector } from 'reselect'
+     *
+     * export interface RootState {
+     *   todos: { id: number; completed: boolean }[]
+     *   alerts: { id: number; read: boolean }[]
+     * }
+     *
+     * export const createAppSelector = createSelector.withTypes<RootState>()
+     *
+     * const selectTodoIds = createAppSelector(
+     *   [
+     *     // Type of `state` is set to `RootState`, no need to manually set the type
+     *     state => state.todos
+     *   ],
+     *   todos => todos.map(({ id }) => id)
+     * )
+     * ```
+     * @template OverrideStateType - The specific type of state used by all selectors created with this selector creator.
+     *
+     * @see {@link https://reselect.js.org/api/createselector#defining-a-pre-typed-createselector `createSelector.withTypes`}
+     *
+     * @since 5.1.0
+     */
+    withTypes: <OverrideStateType extends StateType>() => CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction, OverrideStateType>;
+}
+/**
+ * Creates a selector creator function with the specified memoization function
+ * and options for customizing memoization behavior.
+ *
+ * @param options - An options object containing the `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). It also provides additional options for customizing memoization. While the `memoize` property is mandatory, the rest are optional.
+ * @returns A customized `createSelector` function.
+ *
+ * @example
+ * ```ts
+ * const customCreateSelector = createSelectorCreator({
+ *   memoize: customMemoize, // Function to be used to memoize `resultFunc`
+ *   memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards
+ *   argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments
+ *   argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2] // Options passed to `customArgsMemoize` as the second argument onwards
+ * })
+ *
+ * const customSelector = customCreateSelector(
+ *   [inputSelector1, inputSelector2],
+ *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`
+ * )
+ *
+ * customSelector(
+ *   ...selectorArgs // Will be memoized by `customArgsMemoize`
+ * )
+ * ```
+ *
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ *
+ * @see {@link https://reselect.js.org/api/createSelectorCreator#using-options-since-500 `createSelectorCreator`}
+ *
+ * @since 5.0.0
+ * @public
+ */
+declare function createSelectorCreator<MemoizeFunction extends UnknownMemoizer, ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize>(options: Simplify<SetRequired<CreateSelectorOptions<typeof weakMapMemoize, typeof weakMapMemoize, MemoizeFunction, ArgsMemoizeFunction>, 'memoize'>>): CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>;
+/**
+ * Creates a selector creator function with the specified memoization function
+ * and options for customizing memoization behavior.
+ *
+ * @param memoize - The `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.
+ * @returns A customized `createSelector` function.
+ *
+ * @example
+ * ```ts
+ * const customCreateSelector = createSelectorCreator(customMemoize, // Function to be used to memoize `resultFunc`
+ *   option1, // Will be passed as second argument to `customMemoize`
+ *   option2, // Will be passed as third argument to `customMemoize`
+ *   option3 // Will be passed as fourth argument to `customMemoize`
+ * )
+ *
+ * const customSelector = customCreateSelector(
+ *   [inputSelector1, inputSelector2],
+ *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`
+ * )
+ * ```
+ *
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ *
+ * @see {@link https://reselect.js.org/api/createSelectorCreator#using-memoize-and-memoizeoptions `createSelectorCreator`}
+ *
+ * @public
+ */
+declare function createSelectorCreator<MemoizeFunction extends UnknownMemoizer>(memoize: MemoizeFunction, ...memoizeOptionsFromArgs: DropFirstParameter<MemoizeFunction>): CreateSelectorFunction<MemoizeFunction>;
+/**
+ * Accepts one or more "input selectors" (either as separate arguments or a single array),
+ * a single "result function" / "combiner", and an optional options object, and
+ * generates a memoized selector function.
+ *
+ * @see {@link https://reselect.js.org/api/createSelector `createSelector`}
+ *
+ * @public
+ */
+declare const createSelector: CreateSelectorFunction<typeof weakMapMemoize, typeof weakMapMemoize, any>;
+
+/**
+ * Represents a mapping of selectors to their return types.
+ *
+ * @template TObject - An object type where each property is a selector function.
+ *
+ * @public
+ */
+type SelectorResultsMap<TObject extends SelectorsObject> = {
+    [Key in keyof TObject]: ReturnType<TObject[Key]>;
+};
+/**
+ * Represents a mapping of selectors for each key in a given root state.
+ *
+ * This type is a utility that takes a root state object type and
+ * generates a corresponding set of selectors. Each selector is associated
+ * with a key in the root state, allowing for the selection
+ * of specific parts of the state.
+ *
+ * @template RootState - The type of the root state object.
+ *
+ * @since 5.0.0
+ * @public
+ */
+type RootStateSelectors<RootState = any> = {
+    [Key in keyof RootState]: Selector<RootState, RootState[Key], []>;
+};
+/**
+ * @deprecated Please use {@linkcode StructuredSelectorCreator.withTypes createStructuredSelector.withTypes<RootState>()} instead. This type will be removed in the future.
+ * @template RootState - The type of the root state object.
+ *
+ * @since 5.0.0
+ * @public
+ */
+type TypedStructuredSelectorCreator<RootState = any> = 
+/**
+ * A convenience function that simplifies returning an object
+ * made up of selector results.
+ *
+ * @param inputSelectorsObject - A key value pair consisting of input selectors.
+ * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.
+ * @returns A memoized structured selector.
+ *
+ * @example
+ * <caption>Modern Use Case</caption>
+ * ```ts
+ * import { createSelector, createStructuredSelector } from 'reselect'
+ *
+ * interface RootState {
+ *   todos: {
+ *     id: number
+ *     completed: boolean
+ *     title: string
+ *     description: string
+ *   }[]
+ *   alerts: { id: number; read: boolean }[]
+ * }
+ *
+ * // This:
+ * const structuredSelector = createStructuredSelector(
+ *   {
+ *     todos: (state: RootState) => state.todos,
+ *     alerts: (state: RootState) => state.alerts,
+ *     todoById: (state: RootState, id: number) => state.todos[id]
+ *   },
+ *   createSelector
+ * )
+ *
+ * // Is essentially the same as this:
+ * const selector = createSelector(
+ *   [
+ *     (state: RootState) => state.todos,
+ *     (state: RootState) => state.alerts,
+ *     (state: RootState, id: number) => state.todos[id]
+ *   ],
+ *   (todos, alerts, todoById) => {
+ *     return {
+ *       todos,
+ *       alerts,
+ *       todoById
+ *     }
+ *   }
+ * )
+ * ```
+ *
+ * @example
+ * <caption>In your component:</caption>
+ * ```tsx
+ * import type { RootState } from 'createStructuredSelector/modernUseCase'
+ * import { structuredSelector } from 'createStructuredSelector/modernUseCase'
+ * import type { FC } from 'react'
+ * import { useSelector } from 'react-redux'
+ *
+ * interface Props {
+ *   id: number
+ * }
+ *
+ * const MyComponent: FC<Props> = ({ id }) => {
+ *   const { todos, alerts, todoById } = useSelector((state: RootState) =>
+ *     structuredSelector(state, id)
+ *   )
+ *
+ *   return (
+ *     <div>
+ *       Next to do is:
+ *       <h2>{todoById.title}</h2>
+ *       <p>Description: {todoById.description}</p>
+ *       <ul>
+ *         <h3>All other to dos:</h3>
+ *         {todos.map(todo => (
+ *           <li key={todo.id}>{todo.title}</li>
+ *         ))}
+ *       </ul>
+ *     </div>
+ *   )
+ * }
+ * ```
+ *
+ * @example
+ * <caption>Simple Use Case</caption>
+ * ```ts
+ * const selectA = state => state.a
+ * const selectB = state => state.b
+ *
+ * // The result function in the following selector
+ * // is simply building an object from the input selectors
+ * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({
+ *   a,
+ *   b
+ * }))
+ *
+ * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }
+ * ```
+ *
+ * @template InputSelectorsObject - The shape of the input selectors object.
+ * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.
+ * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.
+ *
+ * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}
+ */
+<InputSelectorsObject extends RootStateSelectors<RootState> = RootStateSelectors<RootState>, MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize, ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize>(inputSelectorsObject: InputSelectorsObject, selectorCreator?: CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>) => OutputSelector<ObjectValuesToTuple<InputSelectorsObject>, Simplify<SelectorResultsMap<InputSelectorsObject>>, MemoizeFunction, ArgsMemoizeFunction> & InterruptRecursion;
+/**
+ * Represents an object where each property is a selector function.
+ *
+ * @template StateType - The type of state that all the selectors operate on.
+ *
+ * @public
+ */
+type SelectorsObject<StateType = any> = Record<string, Selector<StateType>>;
+/**
+ * It provides a way to create structured selectors.
+ * The structured selector can take multiple input selectors
+ * and map their output to an object with specific keys.
+ *
+ * @template StateType - The type of state that the structured selectors created with this structured selector creator will operate on.
+ *
+ * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}
+ *
+ * @public
+ */
+interface StructuredSelectorCreator<StateType = any> {
+    /**
+     * A convenience function that simplifies returning an object
+     * made up of selector results.
+     *
+     * @param inputSelectorsObject - A key value pair consisting of input selectors.
+     * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.
+     * @returns A memoized structured selector.
+     *
+     * @example
+     * <caption>Modern Use Case</caption>
+     * ```ts
+     * import { createSelector, createStructuredSelector } from 'reselect'
+     *
+     * interface RootState {
+     *   todos: {
+     *     id: number
+     *     completed: boolean
+     *     title: string
+     *     description: string
+     *   }[]
+     *   alerts: { id: number; read: boolean }[]
+     * }
+     *
+     * // This:
+     * const structuredSelector = createStructuredSelector(
+     *   {
+     *     todos: (state: RootState) => state.todos,
+     *     alerts: (state: RootState) => state.alerts,
+     *     todoById: (state: RootState, id: number) => state.todos[id]
+     *   },
+     *   createSelector
+     * )
+     *
+     * // Is essentially the same as this:
+     * const selector = createSelector(
+     *   [
+     *     (state: RootState) => state.todos,
+     *     (state: RootState) => state.alerts,
+     *     (state: RootState, id: number) => state.todos[id]
+     *   ],
+     *   (todos, alerts, todoById) => {
+     *     return {
+     *       todos,
+     *       alerts,
+     *       todoById
+     *     }
+     *   }
+     * )
+     * ```
+     *
+     * @example
+     * <caption>In your component:</caption>
+     * ```tsx
+     * import type { RootState } from 'createStructuredSelector/modernUseCase'
+     * import { structuredSelector } from 'createStructuredSelector/modernUseCase'
+     * import type { FC } from 'react'
+     * import { useSelector } from 'react-redux'
+     *
+     * interface Props {
+     *   id: number
+     * }
+     *
+     * const MyComponent: FC<Props> = ({ id }) => {
+     *   const { todos, alerts, todoById } = useSelector((state: RootState) =>
+     *     structuredSelector(state, id)
+     *   )
+     *
+     *   return (
+     *     <div>
+     *       Next to do is:
+     *       <h2>{todoById.title}</h2>
+     *       <p>Description: {todoById.description}</p>
+     *       <ul>
+     *         <h3>All other to dos:</h3>
+     *         {todos.map(todo => (
+     *           <li key={todo.id}>{todo.title}</li>
+     *         ))}
+     *       </ul>
+     *     </div>
+     *   )
+     * }
+     * ```
+     *
+     * @example
+     * <caption>Simple Use Case</caption>
+     * ```ts
+     * const selectA = state => state.a
+     * const selectB = state => state.b
+     *
+     * // The result function in the following selector
+     * // is simply building an object from the input selectors
+     * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({
+     *   a,
+     *   b
+     * }))
+     *
+     * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }
+     * ```
+     *
+     * @template InputSelectorsObject - The shape of the input selectors object.
+     * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.
+     * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.
+     *
+     * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}
+     */
+    <InputSelectorsObject extends SelectorsObject<StateType>, MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize, ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize>(inputSelectorsObject: InputSelectorsObject, selectorCreator?: CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>): OutputSelector<ObjectValuesToTuple<InputSelectorsObject>, Simplify<SelectorResultsMap<InputSelectorsObject>>, MemoizeFunction, ArgsMemoizeFunction> & InterruptRecursion;
+    /**
+     * Creates a "pre-typed" version of
+     * {@linkcode createStructuredSelector createStructuredSelector}
+     * where the `state` type is predefined.
+     *
+     * This allows you to set the `state` type once, eliminating the need to
+     * specify it with every
+     * {@linkcode createStructuredSelector createStructuredSelector} call.
+     *
+     * @returns A pre-typed `createStructuredSelector` with the state type already defined.
+     *
+     * @example
+     * ```ts
+     * import { createStructuredSelector } from 'reselect'
+     *
+     * export interface RootState {
+     *   todos: { id: number; completed: boolean }[]
+     *   alerts: { id: number; read: boolean }[]
+     * }
+     *
+     * export const createStructuredAppSelector =
+     *   createStructuredSelector.withTypes<RootState>()
+     *
+     * const structuredAppSelector = createStructuredAppSelector({
+     *   // Type of `state` is set to `RootState`, no need to manually set the type
+     *   todos: state => state.todos,
+     *   alerts: state => state.alerts,
+     *   todoById: (state, id: number) => state.todos[id]
+     * })
+     *
+     * ```
+     * @template OverrideStateType - The specific type of state used by all structured selectors created with this structured selector creator.
+     *
+     * @see {@link https://reselect.js.org/api/createstructuredselector#defining-a-pre-typed-createstructuredselector `createSelector.withTypes`}
+     *
+     * @since 5.1.0
+     */
+    withTypes: <OverrideStateType extends StateType>() => StructuredSelectorCreator<OverrideStateType>;
+}
+/**
+ * A convenience function that simplifies returning an object
+ * made up of selector results.
+ *
+ * @param inputSelectorsObject - A key value pair consisting of input selectors.
+ * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.
+ * @returns A memoized structured selector.
+ *
+ * @example
+ * <caption>Modern Use Case</caption>
+ * ```ts
+ * import { createSelector, createStructuredSelector } from 'reselect'
+ *
+ * interface RootState {
+ *   todos: {
+ *     id: number
+ *     completed: boolean
+ *     title: string
+ *     description: string
+ *   }[]
+ *   alerts: { id: number; read: boolean }[]
+ * }
+ *
+ * // This:
+ * const structuredSelector = createStructuredSelector(
+ *   {
+ *     todos: (state: RootState) => state.todos,
+ *     alerts: (state: RootState) => state.alerts,
+ *     todoById: (state: RootState, id: number) => state.todos[id]
+ *   },
+ *   createSelector
+ * )
+ *
+ * // Is essentially the same as this:
+ * const selector = createSelector(
+ *   [
+ *     (state: RootState) => state.todos,
+ *     (state: RootState) => state.alerts,
+ *     (state: RootState, id: number) => state.todos[id]
+ *   ],
+ *   (todos, alerts, todoById) => {
+ *     return {
+ *       todos,
+ *       alerts,
+ *       todoById
+ *     }
+ *   }
+ * )
+ * ```
+ *
+ * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}
+ *
+ * @public
+ */
+declare const createStructuredSelector: StructuredSelectorCreator;
+
+/**
+ * Overrides the development mode checks settings for all selectors.
+ *
+ * Reselect performs additional checks in development mode to help identify and
+ * warn about potential issues in selector behavior. This function allows you to
+ * customize the behavior of these checks across all selectors in your application.
+ *
+ * **Note**: This setting can still be overridden per selector inside `createSelector`'s `options` object.
+ * See {@link https://github.com/reduxjs/reselect#2-per-selector-by-passing-an-identityfunctioncheck-option-directly-to-createselector per-selector-configuration}
+ * and {@linkcode CreateSelectorOptions.identityFunctionCheck identityFunctionCheck} for more details.
+ *
+ * _The development mode checks do not run in production builds._
+ *
+ * @param devModeChecks - An object specifying the desired settings for development mode checks. You can provide partial overrides. Unspecified settings will retain their current values.
+ *
+ * @example
+ * ```ts
+ * import { setGlobalDevModeChecks } from 'reselect'
+ * import { DevModeChecks } from '../types'
+ *
+ * // Run only the first time the selector is called. (default)
+ * setGlobalDevModeChecks({ inputStabilityCheck: 'once' })
+ *
+ * // Run every time the selector is called.
+ * setGlobalDevModeChecks({ inputStabilityCheck: 'always' })
+ *
+ * // Never run the input stability check.
+ * setGlobalDevModeChecks({ inputStabilityCheck: 'never' })
+ *
+ * // Run only the first time the selector is called. (default)
+ * setGlobalDevModeChecks({ identityFunctionCheck: 'once' })
+ *
+ * // Run every time the selector is called.
+ * setGlobalDevModeChecks({ identityFunctionCheck: 'always' })
+ *
+ * // Never run the identity function check.
+ * setGlobalDevModeChecks({ identityFunctionCheck: 'never' })
+ * ```
+ * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}
+ * @see {@link https://reselect.js.org/api/development-only-stability-checks#1-globally-through-setglobaldevmodechecks global-configuration}
+ *
+ * @since 5.0.0
+ * @public
+ */
+declare const setGlobalDevModeChecks: (devModeChecks: Partial<DevModeChecks>) => void;
+
+/**
+ * Runs a simple reference equality check.
+ * What {@linkcode lruMemoize lruMemoize} uses by default.
+ *
+ * **Note**: This function was previously known as `defaultEqualityCheck`.
+ *
+ * @public
+ */
+declare const referenceEqualityCheck: EqualityFn;
+/**
+ * Options for configuring the behavior of a function memoized with
+ * LRU (Least Recently Used) caching.
+ *
+ * @template Result - The type of the return value of the memoized function.
+ *
+ * @public
+ */
+interface LruMemoizeOptions<Result = any> {
+    /**
+     * Function used to compare the individual arguments of the
+     * provided calculation function.
+     *
+     * @default referenceEqualityCheck
+     */
+    equalityCheck?: EqualityFn;
+    /**
+     * If provided, used to compare a newly generated output value against
+     * previous values in the cache. If a match is found,
+     * the old value is returned. This addresses the common
+     * ```ts
+     * todos.map(todo => todo.id)
+     * ```
+     * use case, where an update to another field in the original data causes
+     * a recalculation due to changed references, but the output is still
+     * effectively the same.
+     *
+     * @since 4.1.0
+     */
+    resultEqualityCheck?: EqualityFn<Result>;
+    /**
+     * The maximum size of the cache used by the selector.
+     * A size greater than 1 means the selector will use an
+     * LRU (Least Recently Used) cache, allowing for the caching of multiple
+     * results based on different sets of arguments.
+     *
+     * @default 1
+     */
+    maxSize?: number;
+}
+/**
+ * Creates a memoized version of a function with an optional
+ * LRU (Least Recently Used) cache. The memoized function uses a cache to
+ * store computed values. Depending on the `maxSize` option, it will use
+ * either a singleton cache (for a single entry) or an
+ * LRU cache (for multiple entries).
+ *
+ * **Note**: This function was previously known as `defaultMemoize`.
+ *
+ * @param func - The function to be memoized.
+ * @param equalityCheckOrOptions - Either an equality check function or an options object.
+ * @returns A memoized function with a `.clearCache()` method attached.
+ *
+ * @template Func - The type of the function that is memoized.
+ *
+ * @see {@link https://reselect.js.org/api/lruMemoize `lruMemoize`}
+ *
+ * @public
+ */
+declare function lruMemoize<Func extends AnyFunction>(func: Func, equalityCheckOrOptions?: EqualityFn | LruMemoizeOptions<ReturnType<Func>>): Func & {
+    clearCache: () => void;
+    resultsCount: () => number;
+    resetResultsCount: () => void;
+};
+
+export { Combiner, CreateSelectorFunction, CreateSelectorOptions, DefaultMemoizeFields, DevModeCheckFrequency, DevModeChecks, DevModeChecksExecutionInfo, EqualityFn, ExtractMemoizerFields, GetParamsFromSelectors, GetStateFromSelectors, LruMemoizeOptions, MemoizeOptionsFromParameters, OutputSelector, OutputSelectorFields, OverrideMemoizeOptions, RootStateSelectors, Selector, SelectorArray, SelectorResultArray, SelectorResultsMap, SelectorsObject, StructuredSelectorCreator, TypedStructuredSelectorCreator, UnknownMemoizer, WeakMapMemoizeOptions, createSelector, createSelectorCreator, createStructuredSelector, lruMemoize, referenceEqualityCheck, setGlobalDevModeChecks, autotrackMemoize as unstable_autotrackMemoize, weakMapMemoize };
Index: node_modules/reselect/dist/reselect.legacy-esm.js
===================================================================
--- node_modules/reselect/dist/reselect.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/dist/reselect.legacy-esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,759 @@
+var __defProp = Object.defineProperty;
+var __getOwnPropSymbols = Object.getOwnPropertySymbols;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __propIsEnum = Object.prototype.propertyIsEnumerable;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __spreadValues = (a, b) => {
+  for (var prop in b || (b = {}))
+    if (__hasOwnProp.call(b, prop))
+      __defNormalProp(a, prop, b[prop]);
+  if (__getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(b)) {
+      if (__propIsEnum.call(b, prop))
+        __defNormalProp(a, prop, b[prop]);
+    }
+  return a;
+};
+var __publicField = (obj, key, value) => {
+  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
+  return value;
+};
+
+// src/devModeChecks/identityFunctionCheck.ts
+var runIdentityFunctionCheck = (resultFunc, inputSelectorsResults, outputSelectorResult) => {
+  if (inputSelectorsResults.length === 1 && inputSelectorsResults[0] === outputSelectorResult) {
+    let isInputSameAsOutput = false;
+    try {
+      const emptyObject = {};
+      if (resultFunc(emptyObject) === emptyObject)
+        isInputSameAsOutput = true;
+    } catch (e) {
+    }
+    if (isInputSameAsOutput) {
+      let stack = void 0;
+      try {
+        throw new Error();
+      } catch (e) {
+        ;
+        ({ stack } = e);
+      }
+      console.warn(
+        "The result function returned its own inputs without modification. e.g\n`createSelector([state => state.todos], todos => todos)`\nThis could lead to inefficient memoization and unnecessary re-renders.\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.",
+        { stack }
+      );
+    }
+  }
+};
+
+// src/devModeChecks/inputStabilityCheck.ts
+var runInputStabilityCheck = (inputSelectorResultsObject, options, inputSelectorArgs) => {
+  const { memoize, memoizeOptions } = options;
+  const { inputSelectorResults, inputSelectorResultsCopy } = inputSelectorResultsObject;
+  const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions);
+  const areInputSelectorResultsEqual = createAnEmptyObject.apply(null, inputSelectorResults) === createAnEmptyObject.apply(null, inputSelectorResultsCopy);
+  if (!areInputSelectorResultsEqual) {
+    let stack = void 0;
+    try {
+      throw new Error();
+    } catch (e) {
+      ;
+      ({ stack } = e);
+    }
+    console.warn(
+      "An input selector returned a different result when passed same arguments.\nThis means your output selector will likely run more frequently than intended.\nAvoid returning a new reference inside your input selector, e.g.\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`",
+      {
+        arguments: inputSelectorArgs,
+        firstInputs: inputSelectorResults,
+        secondInputs: inputSelectorResultsCopy,
+        stack
+      }
+    );
+  }
+};
+
+// src/devModeChecks/setGlobalDevModeChecks.ts
+var globalDevModeChecks = {
+  inputStabilityCheck: "once",
+  identityFunctionCheck: "once"
+};
+var setGlobalDevModeChecks = (devModeChecks) => {
+  Object.assign(globalDevModeChecks, devModeChecks);
+};
+
+// src/utils.ts
+var NOT_FOUND = /* @__PURE__ */ Symbol("NOT_FOUND");
+function assertIsFunction(func, errorMessage = `expected a function, instead received ${typeof func}`) {
+  if (typeof func !== "function") {
+    throw new TypeError(errorMessage);
+  }
+}
+function assertIsObject(object, errorMessage = `expected an object, instead received ${typeof object}`) {
+  if (typeof object !== "object") {
+    throw new TypeError(errorMessage);
+  }
+}
+function assertIsArrayOfFunctions(array, errorMessage = `expected all items to be functions, instead received the following types: `) {
+  if (!array.every((item) => typeof item === "function")) {
+    const itemTypes = array.map(
+      (item) => typeof item === "function" ? `function ${item.name || "unnamed"}()` : typeof item
+    ).join(", ");
+    throw new TypeError(`${errorMessage}[${itemTypes}]`);
+  }
+}
+var ensureIsArray = (item) => {
+  return Array.isArray(item) ? item : [item];
+};
+function getDependencies(createSelectorArgs) {
+  const dependencies = Array.isArray(createSelectorArgs[0]) ? createSelectorArgs[0] : createSelectorArgs;
+  assertIsArrayOfFunctions(
+    dependencies,
+    `createSelector expects all input-selectors to be functions, but received the following types: `
+  );
+  return dependencies;
+}
+function collectInputSelectorResults(dependencies, inputSelectorArgs) {
+  const inputSelectorResults = [];
+  const { length } = dependencies;
+  for (let i = 0; i < length; i++) {
+    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs));
+  }
+  return inputSelectorResults;
+}
+var getDevModeChecksExecutionInfo = (firstRun, devModeChecks) => {
+  const { identityFunctionCheck, inputStabilityCheck } = __spreadValues(__spreadValues({}, globalDevModeChecks), devModeChecks);
+  return {
+    identityFunctionCheck: {
+      shouldRun: identityFunctionCheck === "always" || identityFunctionCheck === "once" && firstRun,
+      run: runIdentityFunctionCheck
+    },
+    inputStabilityCheck: {
+      shouldRun: inputStabilityCheck === "always" || inputStabilityCheck === "once" && firstRun,
+      run: runInputStabilityCheck
+    }
+  };
+};
+
+// src/autotrackMemoize/autotracking.ts
+var $REVISION = 0;
+var CURRENT_TRACKER = null;
+var Cell = class {
+  constructor(initialValue, isEqual = tripleEq) {
+    __publicField(this, "revision", $REVISION);
+    __publicField(this, "_value");
+    __publicField(this, "_lastValue");
+    __publicField(this, "_isEqual", tripleEq);
+    this._value = this._lastValue = initialValue;
+    this._isEqual = isEqual;
+  }
+  // Whenever a storage value is read, it'll add itself to the current tracker if
+  // one exists, entangling its state with that cache.
+  get value() {
+    CURRENT_TRACKER == null ? void 0 : CURRENT_TRACKER.add(this);
+    return this._value;
+  }
+  // Whenever a storage value is updated, we bump the global revision clock,
+  // assign the revision for this storage to the new value, _and_ we schedule a
+  // rerender. This is important, and it's what makes autotracking  _pull_
+  // based. We don't actively tell the caches which depend on the storage that
+  // anything has happened. Instead, we recompute the caches when needed.
+  set value(newValue) {
+    if (this.value === newValue)
+      return;
+    this._value = newValue;
+    this.revision = ++$REVISION;
+  }
+};
+function tripleEq(a, b) {
+  return a === b;
+}
+var TrackingCache = class {
+  constructor(fn) {
+    __publicField(this, "_cachedValue");
+    __publicField(this, "_cachedRevision", -1);
+    __publicField(this, "_deps", []);
+    __publicField(this, "hits", 0);
+    __publicField(this, "fn");
+    this.fn = fn;
+  }
+  clear() {
+    this._cachedValue = void 0;
+    this._cachedRevision = -1;
+    this._deps = [];
+    this.hits = 0;
+  }
+  get value() {
+    if (this.revision > this._cachedRevision) {
+      const { fn } = this;
+      const currentTracker = /* @__PURE__ */ new Set();
+      const prevTracker = CURRENT_TRACKER;
+      CURRENT_TRACKER = currentTracker;
+      this._cachedValue = fn();
+      CURRENT_TRACKER = prevTracker;
+      this.hits++;
+      this._deps = Array.from(currentTracker);
+      this._cachedRevision = this.revision;
+    }
+    CURRENT_TRACKER == null ? void 0 : CURRENT_TRACKER.add(this);
+    return this._cachedValue;
+  }
+  get revision() {
+    return Math.max(...this._deps.map((d) => d.revision), 0);
+  }
+};
+function getValue(cell) {
+  if (!(cell instanceof Cell)) {
+    console.warn("Not a valid cell! ", cell);
+  }
+  return cell.value;
+}
+function setValue(storage, value) {
+  if (!(storage instanceof Cell)) {
+    throw new TypeError(
+      "setValue must be passed a tracked store created with `createStorage`."
+    );
+  }
+  storage.value = storage._lastValue = value;
+}
+function createCell(initialValue, isEqual = tripleEq) {
+  return new Cell(initialValue, isEqual);
+}
+function createCache(fn) {
+  assertIsFunction(
+    fn,
+    "the first parameter to `createCache` must be a function"
+  );
+  return new TrackingCache(fn);
+}
+
+// src/autotrackMemoize/tracking.ts
+var neverEq = (a, b) => false;
+function createTag() {
+  return createCell(null, neverEq);
+}
+function dirtyTag(tag, value) {
+  setValue(tag, value);
+}
+var consumeCollection = (node) => {
+  let tag = node.collectionTag;
+  if (tag === null) {
+    tag = node.collectionTag = createTag();
+  }
+  getValue(tag);
+};
+var dirtyCollection = (node) => {
+  const tag = node.collectionTag;
+  if (tag !== null) {
+    dirtyTag(tag, null);
+  }
+};
+
+// src/autotrackMemoize/proxy.ts
+var REDUX_PROXY_LABEL = Symbol();
+var nextId = 0;
+var proto = Object.getPrototypeOf({});
+var ObjectTreeNode = class {
+  constructor(value) {
+    this.value = value;
+    __publicField(this, "proxy", new Proxy(this, objectProxyHandler));
+    __publicField(this, "tag", createTag());
+    __publicField(this, "tags", {});
+    __publicField(this, "children", {});
+    __publicField(this, "collectionTag", null);
+    __publicField(this, "id", nextId++);
+    this.value = value;
+    this.tag.value = value;
+  }
+};
+var objectProxyHandler = {
+  get(node, key) {
+    function calculateResult() {
+      const { value } = node;
+      const childValue = Reflect.get(value, key);
+      if (typeof key === "symbol") {
+        return childValue;
+      }
+      if (key in proto) {
+        return childValue;
+      }
+      if (typeof childValue === "object" && childValue !== null) {
+        let childNode = node.children[key];
+        if (childNode === void 0) {
+          childNode = node.children[key] = createNode(childValue);
+        }
+        if (childNode.tag) {
+          getValue(childNode.tag);
+        }
+        return childNode.proxy;
+      } else {
+        let tag = node.tags[key];
+        if (tag === void 0) {
+          tag = node.tags[key] = createTag();
+          tag.value = childValue;
+        }
+        getValue(tag);
+        return childValue;
+      }
+    }
+    const res = calculateResult();
+    return res;
+  },
+  ownKeys(node) {
+    consumeCollection(node);
+    return Reflect.ownKeys(node.value);
+  },
+  getOwnPropertyDescriptor(node, prop) {
+    return Reflect.getOwnPropertyDescriptor(node.value, prop);
+  },
+  has(node, prop) {
+    return Reflect.has(node.value, prop);
+  }
+};
+var ArrayTreeNode = class {
+  constructor(value) {
+    this.value = value;
+    __publicField(this, "proxy", new Proxy([this], arrayProxyHandler));
+    __publicField(this, "tag", createTag());
+    __publicField(this, "tags", {});
+    __publicField(this, "children", {});
+    __publicField(this, "collectionTag", null);
+    __publicField(this, "id", nextId++);
+    this.value = value;
+    this.tag.value = value;
+  }
+};
+var arrayProxyHandler = {
+  get([node], key) {
+    if (key === "length") {
+      consumeCollection(node);
+    }
+    return objectProxyHandler.get(node, key);
+  },
+  ownKeys([node]) {
+    return objectProxyHandler.ownKeys(node);
+  },
+  getOwnPropertyDescriptor([node], prop) {
+    return objectProxyHandler.getOwnPropertyDescriptor(node, prop);
+  },
+  has([node], prop) {
+    return objectProxyHandler.has(node, prop);
+  }
+};
+function createNode(value) {
+  if (Array.isArray(value)) {
+    return new ArrayTreeNode(value);
+  }
+  return new ObjectTreeNode(value);
+}
+function updateNode(node, newValue) {
+  const { value, tags, children } = node;
+  node.value = newValue;
+  if (Array.isArray(value) && Array.isArray(newValue) && value.length !== newValue.length) {
+    dirtyCollection(node);
+  } else {
+    if (value !== newValue) {
+      let oldKeysSize = 0;
+      let newKeysSize = 0;
+      let anyKeysAdded = false;
+      for (const _key in value) {
+        oldKeysSize++;
+      }
+      for (const key in newValue) {
+        newKeysSize++;
+        if (!(key in value)) {
+          anyKeysAdded = true;
+          break;
+        }
+      }
+      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize;
+      if (isDifferent) {
+        dirtyCollection(node);
+      }
+    }
+  }
+  for (const key in tags) {
+    const childValue = value[key];
+    const newChildValue = newValue[key];
+    if (childValue !== newChildValue) {
+      dirtyCollection(node);
+      dirtyTag(tags[key], newChildValue);
+    }
+    if (typeof newChildValue === "object" && newChildValue !== null) {
+      delete tags[key];
+    }
+  }
+  for (const key in children) {
+    const childNode = children[key];
+    const newChildValue = newValue[key];
+    const childValue = childNode.value;
+    if (childValue === newChildValue) {
+      continue;
+    } else if (typeof newChildValue === "object" && newChildValue !== null) {
+      updateNode(childNode, newChildValue);
+    } else {
+      deleteNode(childNode);
+      delete children[key];
+    }
+  }
+}
+function deleteNode(node) {
+  if (node.tag) {
+    dirtyTag(node.tag, null);
+  }
+  dirtyCollection(node);
+  for (const key in node.tags) {
+    dirtyTag(node.tags[key], null);
+  }
+  for (const key in node.children) {
+    deleteNode(node.children[key]);
+  }
+}
+
+// src/lruMemoize.ts
+function createSingletonCache(equals) {
+  let entry;
+  return {
+    get(key) {
+      if (entry && equals(entry.key, key)) {
+        return entry.value;
+      }
+      return NOT_FOUND;
+    },
+    put(key, value) {
+      entry = { key, value };
+    },
+    getEntries() {
+      return entry ? [entry] : [];
+    },
+    clear() {
+      entry = void 0;
+    }
+  };
+}
+function createLruCache(maxSize, equals) {
+  let entries = [];
+  function get(key) {
+    const cacheIndex = entries.findIndex((entry) => equals(key, entry.key));
+    if (cacheIndex > -1) {
+      const entry = entries[cacheIndex];
+      if (cacheIndex > 0) {
+        entries.splice(cacheIndex, 1);
+        entries.unshift(entry);
+      }
+      return entry.value;
+    }
+    return NOT_FOUND;
+  }
+  function put(key, value) {
+    if (get(key) === NOT_FOUND) {
+      entries.unshift({ key, value });
+      if (entries.length > maxSize) {
+        entries.pop();
+      }
+    }
+  }
+  function getEntries() {
+    return entries;
+  }
+  function clear() {
+    entries = [];
+  }
+  return { get, put, getEntries, clear };
+}
+var referenceEqualityCheck = (a, b) => a === b;
+function createCacheKeyComparator(equalityCheck) {
+  return function areArgumentsShallowlyEqual(prev, next) {
+    if (prev === null || next === null || prev.length !== next.length) {
+      return false;
+    }
+    const { length } = prev;
+    for (let i = 0; i < length; i++) {
+      if (!equalityCheck(prev[i], next[i])) {
+        return false;
+      }
+    }
+    return true;
+  };
+}
+function lruMemoize(func, equalityCheckOrOptions) {
+  const providedOptions = typeof equalityCheckOrOptions === "object" ? equalityCheckOrOptions : { equalityCheck: equalityCheckOrOptions };
+  const {
+    equalityCheck = referenceEqualityCheck,
+    maxSize = 1,
+    resultEqualityCheck
+  } = providedOptions;
+  const comparator = createCacheKeyComparator(equalityCheck);
+  let resultsCount = 0;
+  const cache = maxSize <= 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);
+  function memoized() {
+    let value = cache.get(arguments);
+    if (value === NOT_FOUND) {
+      value = func.apply(null, arguments);
+      resultsCount++;
+      if (resultEqualityCheck) {
+        const entries = cache.getEntries();
+        const matchingEntry = entries.find(
+          (entry) => resultEqualityCheck(entry.value, value)
+        );
+        if (matchingEntry) {
+          value = matchingEntry.value;
+          resultsCount !== 0 && resultsCount--;
+        }
+      }
+      cache.put(arguments, value);
+    }
+    return value;
+  }
+  memoized.clearCache = () => {
+    cache.clear();
+    memoized.resetResultsCount();
+  };
+  memoized.resultsCount = () => resultsCount;
+  memoized.resetResultsCount = () => {
+    resultsCount = 0;
+  };
+  return memoized;
+}
+
+// src/autotrackMemoize/autotrackMemoize.ts
+function autotrackMemoize(func) {
+  const node = createNode(
+    []
+  );
+  let lastArgs = null;
+  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck);
+  const cache = createCache(() => {
+    const res = func.apply(null, node.proxy);
+    return res;
+  });
+  function memoized() {
+    if (!shallowEqual(lastArgs, arguments)) {
+      updateNode(node, arguments);
+      lastArgs = arguments;
+    }
+    return cache.value;
+  }
+  memoized.clearCache = () => {
+    return cache.clear();
+  };
+  return memoized;
+}
+
+// src/weakMapMemoize.ts
+var StrongRef = class {
+  constructor(value) {
+    this.value = value;
+  }
+  deref() {
+    return this.value;
+  }
+};
+var Ref = typeof WeakRef !== "undefined" ? WeakRef : StrongRef;
+var UNTERMINATED = 0;
+var TERMINATED = 1;
+function createCacheNode() {
+  return {
+    s: UNTERMINATED,
+    v: void 0,
+    o: null,
+    p: null
+  };
+}
+function weakMapMemoize(func, options = {}) {
+  let fnNode = createCacheNode();
+  const { resultEqualityCheck } = options;
+  let lastResult;
+  let resultsCount = 0;
+  function memoized() {
+    var _a, _b;
+    let cacheNode = fnNode;
+    const { length } = arguments;
+    for (let i = 0, l = length; i < l; i++) {
+      const arg = arguments[i];
+      if (typeof arg === "function" || typeof arg === "object" && arg !== null) {
+        let objectCache = cacheNode.o;
+        if (objectCache === null) {
+          cacheNode.o = objectCache = /* @__PURE__ */ new WeakMap();
+        }
+        const objectNode = objectCache.get(arg);
+        if (objectNode === void 0) {
+          cacheNode = createCacheNode();
+          objectCache.set(arg, cacheNode);
+        } else {
+          cacheNode = objectNode;
+        }
+      } else {
+        let primitiveCache = cacheNode.p;
+        if (primitiveCache === null) {
+          cacheNode.p = primitiveCache = /* @__PURE__ */ new Map();
+        }
+        const primitiveNode = primitiveCache.get(arg);
+        if (primitiveNode === void 0) {
+          cacheNode = createCacheNode();
+          primitiveCache.set(arg, cacheNode);
+        } else {
+          cacheNode = primitiveNode;
+        }
+      }
+    }
+    const terminatedNode = cacheNode;
+    let result;
+    if (cacheNode.s === TERMINATED) {
+      result = cacheNode.v;
+    } else {
+      result = func.apply(null, arguments);
+      resultsCount++;
+      if (resultEqualityCheck) {
+        const lastResultValue = (_b = (_a = lastResult == null ? void 0 : lastResult.deref) == null ? void 0 : _a.call(lastResult)) != null ? _b : lastResult;
+        if (lastResultValue != null && resultEqualityCheck(lastResultValue, result)) {
+          result = lastResultValue;
+          resultsCount !== 0 && resultsCount--;
+        }
+        const needsWeakRef = typeof result === "object" && result !== null || typeof result === "function";
+        lastResult = needsWeakRef ? new Ref(result) : result;
+      }
+    }
+    terminatedNode.s = TERMINATED;
+    terminatedNode.v = result;
+    return result;
+  }
+  memoized.clearCache = () => {
+    fnNode = createCacheNode();
+    memoized.resetResultsCount();
+  };
+  memoized.resultsCount = () => resultsCount;
+  memoized.resetResultsCount = () => {
+    resultsCount = 0;
+  };
+  return memoized;
+}
+
+// src/createSelectorCreator.ts
+function createSelectorCreator(memoizeOrOptions, ...memoizeOptionsFromArgs) {
+  const createSelectorCreatorOptions = typeof memoizeOrOptions === "function" ? {
+    memoize: memoizeOrOptions,
+    memoizeOptions: memoizeOptionsFromArgs
+  } : memoizeOrOptions;
+  const createSelector2 = (...createSelectorArgs) => {
+    let recomputations = 0;
+    let dependencyRecomputations = 0;
+    let lastResult;
+    let directlyPassedOptions = {};
+    let resultFunc = createSelectorArgs.pop();
+    if (typeof resultFunc === "object") {
+      directlyPassedOptions = resultFunc;
+      resultFunc = createSelectorArgs.pop();
+    }
+    assertIsFunction(
+      resultFunc,
+      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`
+    );
+    const combinedOptions = __spreadValues(__spreadValues({}, createSelectorCreatorOptions), directlyPassedOptions);
+    const {
+      memoize,
+      memoizeOptions = [],
+      argsMemoize = weakMapMemoize,
+      argsMemoizeOptions = [],
+      devModeChecks = {}
+    } = combinedOptions;
+    const finalMemoizeOptions = ensureIsArray(memoizeOptions);
+    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions);
+    const dependencies = getDependencies(createSelectorArgs);
+    const memoizedResultFunc = memoize(function recomputationWrapper() {
+      recomputations++;
+      return resultFunc.apply(
+        null,
+        arguments
+      );
+    }, ...finalMemoizeOptions);
+    let firstRun = true;
+    const selector = argsMemoize(function dependenciesChecker() {
+      dependencyRecomputations++;
+      const inputSelectorResults = collectInputSelectorResults(
+        dependencies,
+        arguments
+      );
+      lastResult = memoizedResultFunc.apply(null, inputSelectorResults);
+      if (process.env.NODE_ENV !== "production") {
+        const { identityFunctionCheck, inputStabilityCheck } = getDevModeChecksExecutionInfo(firstRun, devModeChecks);
+        if (identityFunctionCheck.shouldRun) {
+          identityFunctionCheck.run(
+            resultFunc,
+            inputSelectorResults,
+            lastResult
+          );
+        }
+        if (inputStabilityCheck.shouldRun) {
+          const inputSelectorResultsCopy = collectInputSelectorResults(
+            dependencies,
+            arguments
+          );
+          inputStabilityCheck.run(
+            { inputSelectorResults, inputSelectorResultsCopy },
+            { memoize, memoizeOptions: finalMemoizeOptions },
+            arguments
+          );
+        }
+        if (firstRun)
+          firstRun = false;
+      }
+      return lastResult;
+    }, ...finalArgsMemoizeOptions);
+    return Object.assign(selector, {
+      resultFunc,
+      memoizedResultFunc,
+      dependencies,
+      dependencyRecomputations: () => dependencyRecomputations,
+      resetDependencyRecomputations: () => {
+        dependencyRecomputations = 0;
+      },
+      lastResult: () => lastResult,
+      recomputations: () => recomputations,
+      resetRecomputations: () => {
+        recomputations = 0;
+      },
+      memoize,
+      argsMemoize
+    });
+  };
+  Object.assign(createSelector2, {
+    withTypes: () => createSelector2
+  });
+  return createSelector2;
+}
+var createSelector = /* @__PURE__ */ createSelectorCreator(weakMapMemoize);
+
+// src/createStructuredSelector.ts
+var createStructuredSelector = Object.assign(
+  (inputSelectorsObject, selectorCreator = createSelector) => {
+    assertIsObject(
+      inputSelectorsObject,
+      `createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof inputSelectorsObject}`
+    );
+    const inputSelectorKeys = Object.keys(inputSelectorsObject);
+    const dependencies = inputSelectorKeys.map(
+      (key) => inputSelectorsObject[key]
+    );
+    const structuredSelector = selectorCreator(
+      dependencies,
+      (...inputSelectorResults) => {
+        return inputSelectorResults.reduce((composition, value, index) => {
+          composition[inputSelectorKeys[index]] = value;
+          return composition;
+        }, {});
+      }
+    );
+    return structuredSelector;
+  },
+  { withTypes: () => createStructuredSelector }
+);
+export {
+  createSelector,
+  createSelectorCreator,
+  createStructuredSelector,
+  lruMemoize,
+  referenceEqualityCheck,
+  setGlobalDevModeChecks,
+  autotrackMemoize as unstable_autotrackMemoize,
+  weakMapMemoize
+};
+//# sourceMappingURL=reselect.legacy-esm.js.map
Index: node_modules/reselect/dist/reselect.legacy-esm.js.map
===================================================================
--- node_modules/reselect/dist/reselect.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/dist/reselect.legacy-esm.js.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/devModeChecks/identityFunctionCheck.ts","../src/devModeChecks/inputStabilityCheck.ts","../src/devModeChecks/setGlobalDevModeChecks.ts","../src/utils.ts","../src/autotrackMemoize/autotracking.ts","../src/autotrackMemoize/tracking.ts","../src/autotrackMemoize/proxy.ts","../src/lruMemoize.ts","../src/autotrackMemoize/autotrackMemoize.ts","../src/weakMapMemoize.ts","../src/createSelectorCreator.ts","../src/createStructuredSelector.ts"],"sourcesContent":["import type { AnyFunction } from '../types'\r\n\r\n/**\r\n * Runs a check to determine if the given result function behaves as an\r\n * identity function. An identity function is one that returns its\r\n * input unchanged, for example, `x => x`. This check helps ensure\r\n * efficient memoization and prevent unnecessary re-renders by encouraging\r\n * proper use of transformation logic in result functions and\r\n * extraction logic in input selectors.\r\n *\r\n * @param resultFunc - The result function to be checked.\r\n * @param inputSelectorsResults - The results of the input selectors.\r\n * @param outputSelectorResult - The result of the output selector.\r\n *\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#identityfunctioncheck `identityFunctionCheck`}\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const runIdentityFunctionCheck = (\r\n  resultFunc: AnyFunction,\r\n  inputSelectorsResults: unknown[],\r\n  outputSelectorResult: unknown\r\n) => {\r\n  if (\r\n    inputSelectorsResults.length === 1 &&\r\n    inputSelectorsResults[0] === outputSelectorResult\r\n  ) {\r\n    let isInputSameAsOutput = false\r\n    try {\r\n      const emptyObject = {}\r\n      if (resultFunc(emptyObject) === emptyObject) isInputSameAsOutput = true\r\n    } catch {\r\n      // Do nothing\r\n    }\r\n    if (isInputSameAsOutput) {\r\n      let stack: string | undefined = undefined\r\n      try {\r\n        throw new Error()\r\n      } catch (e) {\r\n        // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi\r\n        ;({ stack } = e as Error)\r\n      }\r\n      console.warn(\r\n        'The result function returned its own inputs without modification. e.g' +\r\n          '\\n`createSelector([state => state.todos], todos => todos)`' +\r\n          '\\nThis could lead to inefficient memoization and unnecessary re-renders.' +\r\n          '\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.',\r\n        { stack }\r\n      )\r\n    }\r\n  }\r\n}\r\n","import type { CreateSelectorOptions, UnknownMemoizer } from '../types'\r\n\r\n/**\r\n * Runs a stability check to ensure the input selector results remain stable\r\n * when provided with the same arguments. This function is designed to detect\r\n * changes in the output of input selectors, which can impact the performance of memoized selectors.\r\n *\r\n * @param inputSelectorResultsObject - An object containing two arrays: `inputSelectorResults` and `inputSelectorResultsCopy`, representing the results of input selectors.\r\n * @param options - Options object consisting of a `memoize` function and a `memoizeOptions` object.\r\n * @param inputSelectorArgs - List of arguments being passed to the input selectors.\r\n *\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks/#inputstabilitycheck `inputStabilityCheck`}\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const runInputStabilityCheck = (\r\n  inputSelectorResultsObject: {\r\n    inputSelectorResults: unknown[]\r\n    inputSelectorResultsCopy: unknown[]\r\n  },\r\n  options: Required<\r\n    Pick<\r\n      CreateSelectorOptions<UnknownMemoizer, UnknownMemoizer>,\r\n      'memoize' | 'memoizeOptions'\r\n    >\r\n  >,\r\n  inputSelectorArgs: unknown[] | IArguments\r\n) => {\r\n  const { memoize, memoizeOptions } = options\r\n  const { inputSelectorResults, inputSelectorResultsCopy } =\r\n    inputSelectorResultsObject\r\n  const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions)\r\n  // if the memoize method thinks the parameters are equal, these *should* be the same reference\r\n  const areInputSelectorResultsEqual =\r\n    createAnEmptyObject.apply(null, inputSelectorResults) ===\r\n    createAnEmptyObject.apply(null, inputSelectorResultsCopy)\r\n  if (!areInputSelectorResultsEqual) {\r\n    let stack: string | undefined = undefined\r\n    try {\r\n      throw new Error()\r\n    } catch (e) {\r\n      // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi\r\n      ;({ stack } = e as Error)\r\n    }\r\n    console.warn(\r\n      'An input selector returned a different result when passed same arguments.' +\r\n        '\\nThis means your output selector will likely run more frequently than intended.' +\r\n        '\\nAvoid returning a new reference inside your input selector, e.g.' +\r\n        '\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`',\r\n      {\r\n        arguments: inputSelectorArgs,\r\n        firstInputs: inputSelectorResults,\r\n        secondInputs: inputSelectorResultsCopy,\r\n        stack\r\n      }\r\n    )\r\n  }\r\n}\r\n","import type { DevModeChecks } from '../types'\r\n\r\n/**\r\n * Global configuration for development mode checks. This specifies the default\r\n * frequency at which each development mode check should be performed.\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const globalDevModeChecks: DevModeChecks = {\r\n  inputStabilityCheck: 'once',\r\n  identityFunctionCheck: 'once'\r\n}\r\n\r\n/**\r\n * Overrides the development mode checks settings for all selectors.\r\n *\r\n * Reselect performs additional checks in development mode to help identify and\r\n * warn about potential issues in selector behavior. This function allows you to\r\n * customize the behavior of these checks across all selectors in your application.\r\n *\r\n * **Note**: This setting can still be overridden per selector inside `createSelector`'s `options` object.\r\n * See {@link https://github.com/reduxjs/reselect#2-per-selector-by-passing-an-identityfunctioncheck-option-directly-to-createselector per-selector-configuration}\r\n * and {@linkcode CreateSelectorOptions.identityFunctionCheck identityFunctionCheck} for more details.\r\n *\r\n * _The development mode checks do not run in production builds._\r\n *\r\n * @param devModeChecks - An object specifying the desired settings for development mode checks. You can provide partial overrides. Unspecified settings will retain their current values.\r\n *\r\n * @example\r\n * ```ts\r\n * import { setGlobalDevModeChecks } from 'reselect'\r\n * import { DevModeChecks } from '../types'\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'always' })\r\n *\r\n * // Never run the input stability check.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'never' })\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'always' })\r\n *\r\n * // Never run the identity function check.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'never' })\r\n * ```\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#1-globally-through-setglobaldevmodechecks global-configuration}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport const setGlobalDevModeChecks = (\r\n  devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n  Object.assign(globalDevModeChecks, devModeChecks)\r\n}\r\n","import { runIdentityFunctionCheck } from './devModeChecks/identityFunctionCheck'\r\nimport { runInputStabilityCheck } from './devModeChecks/inputStabilityCheck'\r\nimport { globalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'\r\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\r\nimport type {\r\n  DevModeChecks,\r\n  Selector,\r\n  SelectorArray,\r\n  DevModeChecksExecutionInfo\r\n} from './types'\r\n\r\nexport const NOT_FOUND = /* @__PURE__ */ Symbol('NOT_FOUND')\r\nexport type NOT_FOUND_TYPE = typeof NOT_FOUND\r\n\r\n/**\r\n * Assert that the provided value is a function. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param func - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsFunction<FunctionType extends Function>(\r\n  func: unknown,\r\n  errorMessage = `expected a function, instead received ${typeof func}`\r\n): asserts func is FunctionType {\r\n  if (typeof func !== 'function') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided value is an object. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param object - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsObject<ObjectType extends Record<string, unknown>>(\r\n  object: unknown,\r\n  errorMessage = `expected an object, instead received ${typeof object}`\r\n): asserts object is ObjectType {\r\n  if (typeof object !== 'object') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided array is an array of functions. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param array - The array to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsArrayOfFunctions<FunctionType extends Function>(\r\n  array: unknown[],\r\n  errorMessage = `expected all items to be functions, instead received the following types: `\r\n): asserts array is FunctionType[] {\r\n  if (\r\n    !array.every((item): item is FunctionType => typeof item === 'function')\r\n  ) {\r\n    const itemTypes = array\r\n      .map(item =>\r\n        typeof item === 'function'\r\n          ? `function ${item.name || 'unnamed'}()`\r\n          : typeof item\r\n      )\r\n      .join(', ')\r\n    throw new TypeError(`${errorMessage}[${itemTypes}]`)\r\n  }\r\n}\r\n\r\n/**\r\n * Ensure that the input is an array. If it's already an array, it's returned as is.\r\n * If it's not an array, it will be wrapped in a new array.\r\n *\r\n * @param item - The item to be checked.\r\n * @returns An array containing the input item. If the input is already an array, it's returned without modification.\r\n */\r\nexport const ensureIsArray = (item: unknown) => {\r\n  return Array.isArray(item) ? item : [item]\r\n}\r\n\r\n/**\r\n * Extracts the \"dependencies\" / \"input selectors\" from the arguments of `createSelector`.\r\n *\r\n * @param createSelectorArgs - Arguments passed to `createSelector` as an array.\r\n * @returns An array of \"input selectors\" / \"dependencies\".\r\n * @throws A `TypeError` if any of the input selectors is not function.\r\n */\r\nexport function getDependencies(createSelectorArgs: unknown[]) {\r\n  const dependencies = Array.isArray(createSelectorArgs[0])\r\n    ? createSelectorArgs[0]\r\n    : createSelectorArgs\r\n\r\n  assertIsArrayOfFunctions<Selector>(\r\n    dependencies,\r\n    `createSelector expects all input-selectors to be functions, but received the following types: `\r\n  )\r\n\r\n  return dependencies as SelectorArray\r\n}\r\n\r\n/**\r\n * Runs each input selector and returns their collective results as an array.\r\n *\r\n * @param dependencies - An array of \"dependencies\" or \"input selectors\".\r\n * @param inputSelectorArgs - An array of arguments being passed to the input selectors.\r\n * @returns An array of input selector results.\r\n */\r\nexport function collectInputSelectorResults(\r\n  dependencies: SelectorArray,\r\n  inputSelectorArgs: unknown[] | IArguments\r\n) {\r\n  const inputSelectorResults = []\r\n  const { length } = dependencies\r\n  for (let i = 0; i < length; i++) {\r\n    // @ts-ignore\r\n    // apply arguments instead of spreading and mutate a local list of params for performance.\r\n    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs))\r\n  }\r\n  return inputSelectorResults\r\n}\r\n\r\n/**\r\n * Retrieves execution information for development mode checks.\r\n *\r\n * @param devModeChecks - Custom Settings for development mode checks. These settings will override the global defaults.\r\n * @param firstRun - Indicates whether it is the first time the selector has run.\r\n * @returns  An object containing the execution information for each development mode check.\r\n */\r\nexport const getDevModeChecksExecutionInfo = (\r\n  firstRun: boolean,\r\n  devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n  const { identityFunctionCheck, inputStabilityCheck } = {\r\n    ...globalDevModeChecks,\r\n    ...devModeChecks\r\n  }\r\n  return {\r\n    identityFunctionCheck: {\r\n      shouldRun:\r\n        identityFunctionCheck === 'always' ||\r\n        (identityFunctionCheck === 'once' && firstRun),\r\n      run: runIdentityFunctionCheck\r\n    },\r\n    inputStabilityCheck: {\r\n      shouldRun:\r\n        inputStabilityCheck === 'always' ||\r\n        (inputStabilityCheck === 'once' && firstRun),\r\n      run: runInputStabilityCheck\r\n    }\r\n  } satisfies DevModeChecksExecutionInfo\r\n}\r\n","// Original autotracking implementation source:\r\n// - https://gist.github.com/pzuraq/79bf862e0f8cd9521b79c4b6eccdc4f9\r\n// Additional references:\r\n// - https://www.pzuraq.com/blog/how-autotracking-works\r\n// - https://v5.chriskrycho.com/journal/autotracking-elegant-dx-via-cutting-edge-cs/\r\nimport type { EqualityFn } from '../types'\r\nimport { assertIsFunction } from '../utils'\r\n\r\n// The global revision clock. Every time state changes, the clock increments.\r\nexport let $REVISION = 0\r\n\r\n// The current dependency tracker. Whenever we compute a cache, we create a Set\r\n// to track any dependencies that are used while computing. If no cache is\r\n// computing, then the tracker is null.\r\nlet CURRENT_TRACKER: Set<Cell<any> | TrackingCache> | null = null\r\n\r\n// Storage represents a root value in the system - the actual state of our app.\r\nexport class Cell<T> {\r\n  revision = $REVISION\r\n\r\n  _value: T\r\n  _lastValue: T\r\n  _isEqual: EqualityFn = tripleEq\r\n\r\n  constructor(initialValue: T, isEqual: EqualityFn = tripleEq) {\r\n    this._value = this._lastValue = initialValue\r\n    this._isEqual = isEqual\r\n  }\r\n\r\n  // Whenever a storage value is read, it'll add itself to the current tracker if\r\n  // one exists, entangling its state with that cache.\r\n  get value() {\r\n    CURRENT_TRACKER?.add(this)\r\n\r\n    return this._value\r\n  }\r\n\r\n  // Whenever a storage value is updated, we bump the global revision clock,\r\n  // assign the revision for this storage to the new value, _and_ we schedule a\r\n  // rerender. This is important, and it's what makes autotracking  _pull_\r\n  // based. We don't actively tell the caches which depend on the storage that\r\n  // anything has happened. Instead, we recompute the caches when needed.\r\n  set value(newValue) {\r\n    if (this.value === newValue) return\r\n\r\n    this._value = newValue\r\n    this.revision = ++$REVISION\r\n  }\r\n}\r\n\r\nfunction tripleEq(a: unknown, b: unknown) {\r\n  return a === b\r\n}\r\n\r\n// Caches represent derived state in the system. They are ultimately functions\r\n// that are memoized based on what state they use to produce their output,\r\n// meaning they will only rerun IFF a storage value that could affect the output\r\n// has changed. Otherwise, they'll return the cached value.\r\nexport class TrackingCache {\r\n  _cachedValue: any\r\n  _cachedRevision = -1\r\n  _deps: any[] = []\r\n  hits = 0\r\n\r\n  fn: () => any\r\n\r\n  constructor(fn: () => any) {\r\n    this.fn = fn\r\n  }\r\n\r\n  clear() {\r\n    this._cachedValue = undefined\r\n    this._cachedRevision = -1\r\n    this._deps = []\r\n    this.hits = 0\r\n  }\r\n\r\n  get value() {\r\n    // When getting the value for a Cache, first we check all the dependencies of\r\n    // the cache to see what their current revision is. If the current revision is\r\n    // greater than the cached revision, then something has changed.\r\n    if (this.revision > this._cachedRevision) {\r\n      const { fn } = this\r\n\r\n      // We create a new dependency tracker for this cache. As the cache runs\r\n      // its function, any Storage or Cache instances which are used while\r\n      // computing will be added to this tracker. In the end, it will be the\r\n      // full list of dependencies that this Cache depends on.\r\n      const currentTracker = new Set<Cell<any>>()\r\n      const prevTracker = CURRENT_TRACKER\r\n\r\n      CURRENT_TRACKER = currentTracker\r\n\r\n      // try {\r\n      this._cachedValue = fn()\r\n      // } finally {\r\n      CURRENT_TRACKER = prevTracker\r\n      this.hits++\r\n      this._deps = Array.from(currentTracker)\r\n\r\n      // Set the cached revision. This is the current clock count of all the\r\n      // dependencies. If any dependency changes, this number will be less\r\n      // than the new revision.\r\n      this._cachedRevision = this.revision\r\n      // }\r\n    }\r\n\r\n    // If there is a current tracker, it means another Cache is computing and\r\n    // using this one, so we add this one to the tracker.\r\n    CURRENT_TRACKER?.add(this)\r\n\r\n    // Always return the cached value.\r\n    return this._cachedValue\r\n  }\r\n\r\n  get revision() {\r\n    // The current revision is the max of all the dependencies' revisions.\r\n    return Math.max(...this._deps.map(d => d.revision), 0)\r\n  }\r\n}\r\n\r\nexport function getValue<T>(cell: Cell<T>): T {\r\n  if (!(cell instanceof Cell)) {\r\n    console.warn('Not a valid cell! ', cell)\r\n  }\r\n\r\n  return cell.value\r\n}\r\n\r\ntype CellValue<T extends Cell<unknown>> = T extends Cell<infer U> ? U : never\r\n\r\nexport function setValue<T extends Cell<unknown>>(\r\n  storage: T,\r\n  value: CellValue<T>\r\n): void {\r\n  if (!(storage instanceof Cell)) {\r\n    throw new TypeError(\r\n      'setValue must be passed a tracked store created with `createStorage`.'\r\n    )\r\n  }\r\n\r\n  storage.value = storage._lastValue = value\r\n}\r\n\r\nexport function createCell<T = unknown>(\r\n  initialValue: T,\r\n  isEqual: EqualityFn = tripleEq\r\n): Cell<T> {\r\n  return new Cell(initialValue, isEqual)\r\n}\r\n\r\nexport function createCache<T = unknown>(fn: () => T): TrackingCache {\r\n  assertIsFunction(\r\n    fn,\r\n    'the first parameter to `createCache` must be a function'\r\n  )\r\n\r\n  return new TrackingCache(fn)\r\n}\r\n","import type { Cell } from './autotracking'\r\nimport {\r\n  getValue as consumeTag,\r\n  createCell as createStorage,\r\n  setValue\r\n} from './autotracking'\r\n\r\nexport type Tag = Cell<unknown>\r\n\r\nconst neverEq = (a: any, b: any): boolean => false\r\n\r\nexport function createTag(): Tag {\r\n  return createStorage(null, neverEq)\r\n}\r\nexport { consumeTag }\r\nexport function dirtyTag(tag: Tag, value: any): void {\r\n  setValue(tag, value)\r\n}\r\n\r\nexport interface Node<\r\n  T extends Array<unknown> | Record<string, unknown> =\r\n    | Array<unknown>\r\n    | Record<string, unknown>\r\n> {\r\n  collectionTag: Tag | null\r\n  tag: Tag | null\r\n  tags: Record<string, Tag>\r\n  children: Record<string, Node>\r\n  proxy: T\r\n  value: T\r\n  id: number\r\n}\r\n\r\nexport const consumeCollection = (node: Node): void => {\r\n  let tag = node.collectionTag\r\n\r\n  if (tag === null) {\r\n    tag = node.collectionTag = createTag()\r\n  }\r\n\r\n  consumeTag(tag)\r\n}\r\n\r\nexport const dirtyCollection = (node: Node): void => {\r\n  const tag = node.collectionTag\r\n\r\n  if (tag !== null) {\r\n    dirtyTag(tag, null)\r\n  }\r\n}\r\n","// Original source:\r\n// - https://github.com/simonihmig/tracked-redux/blob/master/packages/tracked-redux/src/-private/proxy.ts\r\n\r\nimport type { Node, Tag } from './tracking'\r\nimport {\r\n  consumeCollection,\r\n  consumeTag,\r\n  createTag,\r\n  dirtyCollection,\r\n  dirtyTag\r\n} from './tracking'\r\n\r\nexport const REDUX_PROXY_LABEL = Symbol()\r\n\r\nlet nextId = 0\r\n\r\nconst proto = Object.getPrototypeOf({})\r\n\r\nclass ObjectTreeNode<T extends Record<string, unknown>> implements Node<T> {\r\n  proxy: T = new Proxy(this, objectProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {} as Record<string, Tag>\r\n  children = {} as Record<string, Node>\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst objectProxyHandler = {\r\n  get(node: Node, key: string | symbol): unknown {\r\n    function calculateResult() {\r\n      const { value } = node\r\n\r\n      const childValue = Reflect.get(value, key)\r\n\r\n      if (typeof key === 'symbol') {\r\n        return childValue\r\n      }\r\n\r\n      if (key in proto) {\r\n        return childValue\r\n      }\r\n\r\n      if (typeof childValue === 'object' && childValue !== null) {\r\n        let childNode = node.children[key]\r\n\r\n        if (childNode === undefined) {\r\n          childNode = node.children[key] = createNode(childValue)\r\n        }\r\n\r\n        if (childNode.tag) {\r\n          consumeTag(childNode.tag)\r\n        }\r\n\r\n        return childNode.proxy\r\n      } else {\r\n        let tag = node.tags[key]\r\n\r\n        if (tag === undefined) {\r\n          tag = node.tags[key] = createTag()\r\n          tag.value = childValue\r\n        }\r\n\r\n        consumeTag(tag)\r\n\r\n        return childValue\r\n      }\r\n    }\r\n    const res = calculateResult()\r\n    return res\r\n  },\r\n\r\n  ownKeys(node: Node): ArrayLike<string | symbol> {\r\n    consumeCollection(node)\r\n    return Reflect.ownKeys(node.value)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    node: Node,\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return Reflect.getOwnPropertyDescriptor(node.value, prop)\r\n  },\r\n\r\n  has(node: Node, prop: string | symbol): boolean {\r\n    return Reflect.has(node.value, prop)\r\n  }\r\n}\r\n\r\nclass ArrayTreeNode<T extends Array<unknown>> implements Node<T> {\r\n  proxy: T = new Proxy([this], arrayProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {}\r\n  children = {}\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst arrayProxyHandler = {\r\n  get([node]: [Node], key: string | symbol): unknown {\r\n    if (key === 'length') {\r\n      consumeCollection(node)\r\n    }\r\n\r\n    return objectProxyHandler.get(node, key)\r\n  },\r\n\r\n  ownKeys([node]: [Node]): ArrayLike<string | symbol> {\r\n    return objectProxyHandler.ownKeys(node)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    [node]: [Node],\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return objectProxyHandler.getOwnPropertyDescriptor(node, prop)\r\n  },\r\n\r\n  has([node]: [Node], prop: string | symbol): boolean {\r\n    return objectProxyHandler.has(node, prop)\r\n  }\r\n}\r\n\r\nexport function createNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  value: T\r\n): Node<T> {\r\n  if (Array.isArray(value)) {\r\n    return new ArrayTreeNode(value)\r\n  }\r\n\r\n  return new ObjectTreeNode(value) as Node<T>\r\n}\r\n\r\nconst keysMap = new WeakMap<\r\n  Array<unknown> | Record<string, unknown>,\r\n  Set<string>\r\n>()\r\n\r\nexport function updateNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  node: Node<T>,\r\n  newValue: T\r\n): void {\r\n  const { value, tags, children } = node\r\n\r\n  node.value = newValue\r\n\r\n  if (\r\n    Array.isArray(value) &&\r\n    Array.isArray(newValue) &&\r\n    value.length !== newValue.length\r\n  ) {\r\n    dirtyCollection(node)\r\n  } else {\r\n    if (value !== newValue) {\r\n      let oldKeysSize = 0\r\n      let newKeysSize = 0\r\n      let anyKeysAdded = false\r\n\r\n      for (const _key in value) {\r\n        oldKeysSize++\r\n      }\r\n\r\n      for (const key in newValue) {\r\n        newKeysSize++\r\n        if (!(key in value)) {\r\n          anyKeysAdded = true\r\n          break\r\n        }\r\n      }\r\n\r\n      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize\r\n\r\n      if (isDifferent) {\r\n        dirtyCollection(node)\r\n      }\r\n    }\r\n  }\r\n\r\n  for (const key in tags) {\r\n    const childValue = (value as Record<string, unknown>)[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    if (childValue !== newChildValue) {\r\n      dirtyCollection(node)\r\n      dirtyTag(tags[key], newChildValue)\r\n    }\r\n\r\n    if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      delete tags[key]\r\n    }\r\n  }\r\n\r\n  for (const key in children) {\r\n    const childNode = children[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    const childValue = childNode.value\r\n\r\n    if (childValue === newChildValue) {\r\n      continue\r\n    } else if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      updateNode(childNode, newChildValue as Record<string, unknown>)\r\n    } else {\r\n      deleteNode(childNode)\r\n      delete children[key]\r\n    }\r\n  }\r\n}\r\n\r\nfunction deleteNode(node: Node): void {\r\n  if (node.tag) {\r\n    dirtyTag(node.tag, null)\r\n  }\r\n  dirtyCollection(node)\r\n  for (const key in node.tags) {\r\n    dirtyTag(node.tags[key], null)\r\n  }\r\n  for (const key in node.children) {\r\n    deleteNode(node.children[key])\r\n  }\r\n}\r\n","import type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nimport type { NOT_FOUND_TYPE } from './utils'\r\nimport { NOT_FOUND } from './utils'\r\n\r\n// Cache implementation based on Erik Rasmussen's `lru-memoize`:\r\n// https://github.com/erikras/lru-memoize\r\n\r\ninterface Entry {\r\n  key: unknown\r\n  value: unknown\r\n}\r\n\r\ninterface Cache {\r\n  get(key: unknown): unknown | NOT_FOUND_TYPE\r\n  put(key: unknown, value: unknown): void\r\n  getEntries(): Entry[]\r\n  clear(): void\r\n}\r\n\r\nfunction createSingletonCache(equals: EqualityFn): Cache {\r\n  let entry: Entry | undefined\r\n  return {\r\n    get(key: unknown) {\r\n      if (entry && equals(entry.key, key)) {\r\n        return entry.value\r\n      }\r\n\r\n      return NOT_FOUND\r\n    },\r\n\r\n    put(key: unknown, value: unknown) {\r\n      entry = { key, value }\r\n    },\r\n\r\n    getEntries() {\r\n      return entry ? [entry] : []\r\n    },\r\n\r\n    clear() {\r\n      entry = undefined\r\n    }\r\n  }\r\n}\r\n\r\nfunction createLruCache(maxSize: number, equals: EqualityFn): Cache {\r\n  let entries: Entry[] = []\r\n\r\n  function get(key: unknown) {\r\n    const cacheIndex = entries.findIndex(entry => equals(key, entry.key))\r\n\r\n    // We found a cached entry\r\n    if (cacheIndex > -1) {\r\n      const entry = entries[cacheIndex]\r\n\r\n      // Cached entry not at top of cache, move it to the top\r\n      if (cacheIndex > 0) {\r\n        entries.splice(cacheIndex, 1)\r\n        entries.unshift(entry)\r\n      }\r\n\r\n      return entry.value\r\n    }\r\n\r\n    // No entry found in cache, return sentinel\r\n    return NOT_FOUND\r\n  }\r\n\r\n  function put(key: unknown, value: unknown) {\r\n    if (get(key) === NOT_FOUND) {\r\n      // TODO Is unshift slow?\r\n      entries.unshift({ key, value })\r\n      if (entries.length > maxSize) {\r\n        entries.pop()\r\n      }\r\n    }\r\n  }\r\n\r\n  function getEntries() {\r\n    return entries\r\n  }\r\n\r\n  function clear() {\r\n    entries = []\r\n  }\r\n\r\n  return { get, put, getEntries, clear }\r\n}\r\n\r\n/**\r\n * Runs a simple reference equality check.\r\n * What {@linkcode lruMemoize lruMemoize} uses by default.\r\n *\r\n * **Note**: This function was previously known as `defaultEqualityCheck`.\r\n *\r\n * @public\r\n */\r\nexport const referenceEqualityCheck: EqualityFn = (a, b) => a === b\r\n\r\nexport function createCacheKeyComparator(equalityCheck: EqualityFn) {\r\n  return function areArgumentsShallowlyEqual(\r\n    prev: unknown[] | IArguments | null,\r\n    next: unknown[] | IArguments | null\r\n  ): boolean {\r\n    if (prev === null || next === null || prev.length !== next.length) {\r\n      return false\r\n    }\r\n\r\n    // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\r\n    const { length } = prev\r\n    for (let i = 0; i < length; i++) {\r\n      if (!equalityCheck(prev[i], next[i])) {\r\n        return false\r\n      }\r\n    }\r\n\r\n    return true\r\n  }\r\n}\r\n\r\n/**\r\n * Options for configuring the behavior of a function memoized with\r\n * LRU (Least Recently Used) caching.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @public\r\n */\r\nexport interface LruMemoizeOptions<Result = any> {\r\n  /**\r\n   * Function used to compare the individual arguments of the\r\n   * provided calculation function.\r\n   *\r\n   * @default referenceEqualityCheck\r\n   */\r\n  equalityCheck?: EqualityFn\r\n\r\n  /**\r\n   * If provided, used to compare a newly generated output value against\r\n   * previous values in the cache. If a match is found,\r\n   * the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes\r\n   * a recalculation due to changed references, but the output is still\r\n   * effectively the same.\r\n   *\r\n   * @since 4.1.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n\r\n  /**\r\n   * The maximum size of the cache used by the selector.\r\n   * A size greater than 1 means the selector will use an\r\n   * LRU (Least Recently Used) cache, allowing for the caching of multiple\r\n   * results based on different sets of arguments.\r\n   *\r\n   * @default 1\r\n   */\r\n  maxSize?: number\r\n}\r\n\r\n/**\r\n * Creates a memoized version of a function with an optional\r\n * LRU (Least Recently Used) cache. The memoized function uses a cache to\r\n * store computed values. Depending on the `maxSize` option, it will use\r\n * either a singleton cache (for a single entry) or an\r\n * LRU cache (for multiple entries).\r\n *\r\n * **Note**: This function was previously known as `defaultMemoize`.\r\n *\r\n * @param func - The function to be memoized.\r\n * @param equalityCheckOrOptions - Either an equality check function or an options object.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/lruMemoize `lruMemoize`}\r\n *\r\n * @public\r\n */\r\nexport function lruMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  equalityCheckOrOptions?: EqualityFn | LruMemoizeOptions<ReturnType<Func>>\r\n) {\r\n  const providedOptions =\r\n    typeof equalityCheckOrOptions === 'object'\r\n      ? equalityCheckOrOptions\r\n      : { equalityCheck: equalityCheckOrOptions }\r\n\r\n  const {\r\n    equalityCheck = referenceEqualityCheck,\r\n    maxSize = 1,\r\n    resultEqualityCheck\r\n  } = providedOptions\r\n\r\n  const comparator = createCacheKeyComparator(equalityCheck)\r\n\r\n  let resultsCount = 0\r\n\r\n  const cache =\r\n    maxSize <= 1\r\n      ? createSingletonCache(comparator)\r\n      : createLruCache(maxSize, comparator)\r\n\r\n  function memoized() {\r\n    let value = cache.get(arguments) as ReturnType<Func>\r\n    if (value === NOT_FOUND) {\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      value = func.apply(null, arguments) as ReturnType<Func>\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const entries = cache.getEntries()\r\n        const matchingEntry = entries.find(entry =>\r\n          resultEqualityCheck(entry.value as ReturnType<Func>, value)\r\n        )\r\n\r\n        if (matchingEntry) {\r\n          value = matchingEntry.value as ReturnType<Func>\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n      }\r\n\r\n      cache.put(arguments, value)\r\n    }\r\n    return value\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    cache.clear()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","import { createNode, updateNode } from './proxy'\r\nimport type { Node } from './tracking'\r\n\r\nimport { createCacheKeyComparator, referenceEqualityCheck } from '../lruMemoize'\r\nimport type { AnyFunction, DefaultMemoizeFields, Simplify } from '../types'\r\nimport { createCache } from './autotracking'\r\n\r\n/**\r\n * Uses an \"auto-tracking\" approach inspired by the work of the Ember Glimmer team.\r\n * It uses a Proxy to wrap arguments and track accesses to nested fields\r\n * in your selector on first read. Later, when the selector is called with\r\n * new arguments, it identifies which accessed fields have changed and\r\n * only recalculates the result if one or more of those accessed fields have changed.\r\n * This allows it to be more precise than the shallow equality checks in `lruMemoize`.\r\n *\r\n * __Design Tradeoffs for `autotrackMemoize`:__\r\n * - Pros:\r\n *    - It is likely to avoid excess calculations and recalculate fewer times than `lruMemoize` will,\r\n *    which may also result in fewer component re-renders.\r\n * - Cons:\r\n *    - It only has a cache size of 1.\r\n *    - It is slower than `lruMemoize`, because it has to do more work. (How much slower is dependent on the number of accessed fields in a selector, number of calls, frequency of input changes, etc)\r\n *    - It can have some unexpected behavior. Because it tracks nested field accesses,\r\n *    cases where you don't access a field will not recalculate properly.\r\n *    For example, a badly-written selector like:\r\n *      ```ts\r\n *      createSelector([state => state.todos], todos => todos)\r\n *      ```\r\n *      that just immediately returns the extracted value will never update, because it doesn't see any field accesses to check.\r\n *\r\n * __Use Cases for `autotrackMemoize`:__\r\n * - It is likely best used for cases where you need to access specific nested fields\r\n * in data, and avoid recalculating if other fields in the same data objects are immutably updated.\r\n *\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelector } from 'reselect'\r\n *\r\n * const selectTodoIds = createSelector(\r\n *   [(state: RootState) => state.todos],\r\n *   (todos) => todos.map(todo => todo.id),\r\n *   { memoize: autotrackMemoize }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelectorCreator } from 'reselect'\r\n *\r\n * const createSelectorAutotrack = createSelectorCreator({ memoize: autotrackMemoize })\r\n *\r\n * const selectTodoIds = createSelectorAutotrack(\r\n *   [(state: RootState) => state.todos],\r\n *   (todos) => todos.map(todo => todo.id)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/unstable_autotrackMemoize autotrackMemoize}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function autotrackMemoize<Func extends AnyFunction>(func: Func) {\r\n  // we reference arguments instead of spreading them for performance reasons\r\n\r\n  const node: Node<Record<string, unknown>> = createNode(\r\n    [] as unknown as Record<string, unknown>\r\n  )\r\n\r\n  let lastArgs: IArguments | null = null\r\n\r\n  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck)\r\n\r\n  const cache = createCache(() => {\r\n    const res = func.apply(null, node.proxy as unknown as any[])\r\n    return res\r\n  })\r\n\r\n  function memoized() {\r\n    if (!shallowEqual(lastArgs, arguments)) {\r\n      updateNode(node, arguments as unknown as Record<string, unknown>)\r\n      lastArgs = arguments\r\n    }\r\n    return cache.value\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    return cache.clear()\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","// Original source:\r\n// - https://github.com/facebook/react/blob/0b974418c9a56f6c560298560265dcf4b65784bc/packages/react/src/ReactCache.js\r\n\r\nimport type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nclass StrongRef<T> {\r\n  constructor(private value: T) {}\r\n  deref() {\r\n    return this.value\r\n  }\r\n}\r\n\r\nconst Ref =\r\n  typeof WeakRef !== 'undefined'\r\n    ? WeakRef\r\n    : (StrongRef as unknown as typeof WeakRef)\r\n\r\nconst UNTERMINATED = 0\r\nconst TERMINATED = 1\r\n\r\ninterface UnterminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 0\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: void\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular Map where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ninterface TerminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 1\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: T\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular `Map` where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ntype CacheNode<T> = TerminatedCacheNode<T> | UnterminatedCacheNode<T>\r\n\r\nfunction createCacheNode<T>(): CacheNode<T> {\r\n  return {\r\n    s: UNTERMINATED,\r\n    v: undefined,\r\n    o: null,\r\n    p: null\r\n  }\r\n}\r\n\r\n/**\r\n * Configuration options for a memoization function utilizing `WeakMap` for\r\n * its caching mechanism.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport interface WeakMapMemoizeOptions<Result = any> {\r\n  /**\r\n   * If provided, used to compare a newly generated output value against previous values in the cache.\r\n   * If a match is found, the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes a recalculation\r\n   * due to changed references, but the output is still effectively the same.\r\n   *\r\n   * @since 5.0.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n}\r\n\r\n/**\r\n * Creates a tree of `WeakMap`-based cache nodes based on the identity of the\r\n * arguments it's been called with (in this case, the extracted values from your input selectors).\r\n * This allows `weakMapMemoize` to have an effectively infinite cache size.\r\n * Cache results will be kept in memory as long as references to the arguments still exist,\r\n * and then cleared out as the arguments are garbage-collected.\r\n *\r\n * __Design Tradeoffs for `weakMapMemoize`:__\r\n * - Pros:\r\n *   - It has an effectively infinite cache size, but you have no control over\r\n *   how long values are kept in cache as it's based on garbage collection and `WeakMap`s.\r\n * - Cons:\r\n *   - There's currently no way to alter the argument comparisons.\r\n *   They're based on strict reference equality.\r\n *   - It's roughly the same speed as `lruMemoize`, although likely a fraction slower.\r\n *\r\n * __Use Cases for `weakMapMemoize`:__\r\n * - This memoizer is likely best used for cases where you need to call the\r\n * same selector instance with many different arguments, such as a single\r\n * selector instance that is used in a list item component and called with\r\n * item IDs like:\r\n *   ```ts\r\n *   useSelector(state => selectSomeData(state, props.category))\r\n *   ```\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { createSelector, weakMapMemoize } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   items: { id: number; category: string; name: string }[]\r\n * }\r\n *\r\n * const selectItemsByCategory = createSelector(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category),\r\n *   {\r\n *     memoize: weakMapMemoize,\r\n *     argsMemoize: weakMapMemoize\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { createSelectorCreator, weakMapMemoize } from 'reselect'\r\n *\r\n * const createSelectorWeakMap = createSelectorCreator({ memoize: weakMapMemoize, argsMemoize: weakMapMemoize })\r\n *\r\n * const selectItemsByCategory = createSelectorWeakMap(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/weakMapMemoize `weakMapMemoize`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function weakMapMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  options: WeakMapMemoizeOptions<ReturnType<Func>> = {}\r\n) {\r\n  let fnNode = createCacheNode()\r\n  const { resultEqualityCheck } = options\r\n\r\n  let lastResult: WeakRef<object> | undefined\r\n\r\n  let resultsCount = 0\r\n\r\n  function memoized() {\r\n    let cacheNode = fnNode\r\n    const { length } = arguments\r\n    for (let i = 0, l = length; i < l; i++) {\r\n      const arg = arguments[i]\r\n      if (\r\n        typeof arg === 'function' ||\r\n        (typeof arg === 'object' && arg !== null)\r\n      ) {\r\n        // Objects go into a WeakMap\r\n        let objectCache = cacheNode.o\r\n        if (objectCache === null) {\r\n          cacheNode.o = objectCache = new WeakMap()\r\n        }\r\n        const objectNode = objectCache.get(arg)\r\n        if (objectNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          objectCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = objectNode\r\n        }\r\n      } else {\r\n        // Primitives go into a regular Map\r\n        let primitiveCache = cacheNode.p\r\n        if (primitiveCache === null) {\r\n          cacheNode.p = primitiveCache = new Map()\r\n        }\r\n        const primitiveNode = primitiveCache.get(arg)\r\n        if (primitiveNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          primitiveCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = primitiveNode\r\n        }\r\n      }\r\n    }\r\n\r\n    const terminatedNode = cacheNode as unknown as TerminatedCacheNode<any>\r\n\r\n    let result\r\n\r\n    if (cacheNode.s === TERMINATED) {\r\n      result = cacheNode.v\r\n    } else {\r\n      // Allow errors to propagate\r\n      result = func.apply(null, arguments as unknown as any[])\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const lastResultValue = lastResult?.deref?.() ?? lastResult\r\n\r\n        if (\r\n          lastResultValue != null &&\r\n          resultEqualityCheck(lastResultValue as ReturnType<Func>, result)\r\n        ) {\r\n          result = lastResultValue\r\n\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n\r\n        const needsWeakRef =\r\n          (typeof result === 'object' && result !== null) ||\r\n          typeof result === 'function'\r\n\r\n        lastResult = needsWeakRef ? new Ref(result) : result\r\n      }\r\n    }\r\n\r\n    terminatedNode.s = TERMINATED\r\n\r\n    terminatedNode.v = result\r\n    return result\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    fnNode = createCacheNode()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","import { weakMapMemoize } from './weakMapMemoize'\r\n\r\nimport type {\r\n  Combiner,\r\n  CreateSelectorOptions,\r\n  DropFirstParameter,\r\n  ExtractMemoizerFields,\r\n  GetParamsFromSelectors,\r\n  GetStateFromSelectors,\r\n  InterruptRecursion,\r\n  OutputSelector,\r\n  Selector,\r\n  SelectorArray,\r\n  SetRequired,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\n\r\nimport {\r\n  assertIsFunction,\r\n  collectInputSelectorResults,\r\n  ensureIsArray,\r\n  getDependencies,\r\n  getDevModeChecksExecutionInfo\r\n} from './utils'\r\n\r\n/**\r\n * An instance of `createSelector`, customized with a given memoize implementation.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template StateType - The type of state that the selectors created with this selector creator will operate on.\r\n *\r\n * @public\r\n */\r\nexport interface CreateSelectorFunction<\r\n  MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  StateType = any\r\n> {\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments and a `combiner` function.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <InputSelectors extends SelectorArray<StateType>, Result>(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments, a `combiner` function and an `options` object.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions: Simplify<\r\n        CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n      >\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param inputSelectors - An array of input selectors.\r\n   * @param combiner - A function that Combines the input selectors and returns an output selector. Otherwise known as the result function.\r\n   * @param createSelectorOptions - An optional options object that allows for further customization per selector.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    inputSelectors: [...InputSelectors],\r\n    combiner: Combiner<InputSelectors, Result>,\r\n    createSelectorOptions?: Simplify<\r\n      CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    >\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of {@linkcode createSelector createSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every {@linkcode createSelector createSelector} call.\r\n   *\r\n   * @returns A pre-typed `createSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createAppSelector = createSelector.withTypes<RootState>()\r\n   *\r\n   * const selectTodoIds = createAppSelector(\r\n   *   [\r\n   *     // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *     state => state.todos\r\n   *   ],\r\n   *   todos => todos.map(({ id }) => id)\r\n   * )\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all selectors created with this selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector#defining-a-pre-typed-createselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <OverrideStateType extends StateType>() => CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction,\r\n    OverrideStateType\r\n  >\r\n}\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param options - An options object containing the `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). It also provides additional options for customizing memoization. While the `memoize` property is mandatory, the rest are optional.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator({\r\n *   memoize: customMemoize, // Function to be used to memoize `resultFunc`\r\n *   memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards\r\n *   argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments\r\n *   argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2] // Options passed to `customArgsMemoize` as the second argument onwards\r\n * })\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n *\r\n * customSelector(\r\n *   ...selectorArgs // Will be memoized by `customArgsMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-options-since-500 `createSelectorCreator`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n>(\r\n  options: Simplify<\r\n    SetRequired<\r\n      CreateSelectorOptions<\r\n        typeof weakMapMemoize,\r\n        typeof weakMapMemoize,\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >,\r\n      'memoize'\r\n    >\r\n  >\r\n): CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param memoize - The `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator(customMemoize, // Function to be used to memoize `resultFunc`\r\n *   option1, // Will be passed as second argument to `customMemoize`\r\n *   option2, // Will be passed as third argument to `customMemoize`\r\n *   option3 // Will be passed as fourth argument to `customMemoize`\r\n * )\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-memoize-and-memoizeoptions `createSelectorCreator`}\r\n *\r\n * @public\r\n */\r\nexport function createSelectorCreator<MemoizeFunction extends UnknownMemoizer>(\r\n  memoize: MemoizeFunction,\r\n  ...memoizeOptionsFromArgs: DropFirstParameter<MemoizeFunction>\r\n): CreateSelectorFunction<MemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization\r\n * function and options for customizing memoization behavior.\r\n *\r\n * @param memoizeOrOptions - Either A `memoize` function or an `options` object containing the `memoize` function.\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template MemoizeOrOptions - The type of the first argument. It can either be a `memoize` function or an `options` object containing the `memoize` function.\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer,\r\n  MemoizeOrOptions extends\r\n    | MemoizeFunction\r\n    | SetRequired<\r\n        CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n        'memoize'\r\n      >\r\n>(\r\n  memoizeOrOptions: MemoizeOrOptions,\r\n  ...memoizeOptionsFromArgs: MemoizeOrOptions extends SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  >\r\n    ? never\r\n    : DropFirstParameter<MemoizeFunction>\r\n) {\r\n  /** options initially passed into `createSelectorCreator`. */\r\n  const createSelectorCreatorOptions: SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  > = typeof memoizeOrOptions === 'function'\r\n    ? {\r\n        memoize: memoizeOrOptions as MemoizeFunction,\r\n        memoizeOptions: memoizeOptionsFromArgs\r\n      }\r\n    : memoizeOrOptions\r\n\r\n  const createSelector = <\r\n    InputSelectors extends SelectorArray,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: [...InputSelectors],\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions?: CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    ]\r\n  ) => {\r\n    let recomputations = 0\r\n    let dependencyRecomputations = 0\r\n    let lastResult: Result\r\n\r\n    // Due to the intricacies of rest params, we can't do an optional arg after `...createSelectorArgs`.\r\n    // So, start by declaring the default value here.\r\n    // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\r\n    let directlyPassedOptions: CreateSelectorOptions<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    > = {}\r\n\r\n    // Normally, the result func or \"combiner\" is the last arg\r\n    let resultFunc = createSelectorArgs.pop() as\r\n      | Combiner<InputSelectors, Result>\r\n      | CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n\r\n    // If the result func is actually an _object_, assume it's our options object\r\n    if (typeof resultFunc === 'object') {\r\n      directlyPassedOptions = resultFunc\r\n      // and pop the real result func off\r\n      resultFunc = createSelectorArgs.pop() as Combiner<InputSelectors, Result>\r\n    }\r\n\r\n    assertIsFunction(\r\n      resultFunc,\r\n      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\r\n    )\r\n\r\n    // Determine which set of options we're using. Prefer options passed directly,\r\n    // but fall back to options given to `createSelectorCreator`.\r\n    const combinedOptions = {\r\n      ...createSelectorCreatorOptions,\r\n      ...directlyPassedOptions\r\n    }\r\n\r\n    const {\r\n      memoize,\r\n      memoizeOptions = [],\r\n      argsMemoize = weakMapMemoize,\r\n      argsMemoizeOptions = [],\r\n      devModeChecks = {}\r\n    } = combinedOptions\r\n\r\n    // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\r\n    // is an array. In most libs I've looked at, it's an equality function or options object.\r\n    // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\r\n    // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\r\n    // we wrap it in an array so we can apply it.\r\n    const finalMemoizeOptions = ensureIsArray(memoizeOptions)\r\n    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions)\r\n    const dependencies = getDependencies(createSelectorArgs) as InputSelectors\r\n\r\n    const memoizedResultFunc = memoize(function recomputationWrapper() {\r\n      recomputations++\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      return (resultFunc as Combiner<InputSelectors, Result>).apply(\r\n        null,\r\n        arguments as unknown as Parameters<Combiner<InputSelectors, Result>>\r\n      )\r\n    }, ...finalMemoizeOptions) as Combiner<InputSelectors, Result> &\r\n      ExtractMemoizerFields<OverrideMemoizeFunction>\r\n\r\n    let firstRun = true\r\n\r\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\r\n    const selector = argsMemoize(function dependenciesChecker() {\r\n      dependencyRecomputations++\r\n      /** Return values of input selectors which the `resultFunc` takes as arguments. */\r\n      const inputSelectorResults = collectInputSelectorResults(\r\n        dependencies,\r\n        arguments\r\n      )\r\n\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      lastResult = memoizedResultFunc.apply(null, inputSelectorResults)\r\n\r\n      if (process.env.NODE_ENV !== 'production') {\r\n        const { identityFunctionCheck, inputStabilityCheck } =\r\n          getDevModeChecksExecutionInfo(firstRun, devModeChecks)\r\n        if (identityFunctionCheck.shouldRun) {\r\n          identityFunctionCheck.run(\r\n            resultFunc as Combiner<InputSelectors, Result>,\r\n            inputSelectorResults,\r\n            lastResult\r\n          )\r\n        }\r\n\r\n        if (inputStabilityCheck.shouldRun) {\r\n          // make a second copy of the params, to check if we got the same results\r\n          const inputSelectorResultsCopy = collectInputSelectorResults(\r\n            dependencies,\r\n            arguments\r\n          )\r\n\r\n          inputStabilityCheck.run(\r\n            { inputSelectorResults, inputSelectorResultsCopy },\r\n            { memoize, memoizeOptions: finalMemoizeOptions },\r\n            arguments\r\n          )\r\n        }\r\n\r\n        if (firstRun) firstRun = false\r\n      }\r\n\r\n      return lastResult\r\n    }, ...finalArgsMemoizeOptions) as unknown as Selector<\r\n      GetStateFromSelectors<InputSelectors>,\r\n      Result,\r\n      GetParamsFromSelectors<InputSelectors>\r\n    > &\r\n      ExtractMemoizerFields<OverrideArgsMemoizeFunction>\r\n\r\n    return Object.assign(selector, {\r\n      resultFunc,\r\n      memoizedResultFunc,\r\n      dependencies,\r\n      dependencyRecomputations: () => dependencyRecomputations,\r\n      resetDependencyRecomputations: () => {\r\n        dependencyRecomputations = 0\r\n      },\r\n      lastResult: () => lastResult,\r\n      recomputations: () => recomputations,\r\n      resetRecomputations: () => {\r\n        recomputations = 0\r\n      },\r\n      memoize,\r\n      argsMemoize\r\n    }) as OutputSelector<\r\n      InputSelectors,\r\n      Result,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    >\r\n  }\r\n\r\n  Object.assign(createSelector, {\r\n    withTypes: () => createSelector\r\n  })\r\n\r\n  return createSelector as CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  >\r\n}\r\n\r\n/**\r\n * Accepts one or more \"input selectors\" (either as separate arguments or a single array),\r\n * a single \"result function\" / \"combiner\", and an optional options object, and\r\n * generates a memoized selector function.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelector `createSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createSelector =\r\n  /* #__PURE__ */ createSelectorCreator(weakMapMemoize)\r\n","import { createSelector } from './createSelectorCreator'\r\n\r\nimport type { CreateSelectorFunction } from './createSelectorCreator'\r\nimport type {\r\n  InterruptRecursion,\r\n  ObjectValuesToTuple,\r\n  OutputSelector,\r\n  Selector,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\nimport { assertIsObject } from './utils'\r\nimport type { weakMapMemoize } from './weakMapMemoize'\r\n\r\n/**\r\n * Represents a mapping of selectors to their return types.\r\n *\r\n * @template TObject - An object type where each property is a selector function.\r\n *\r\n * @public\r\n */\r\nexport type SelectorResultsMap<TObject extends SelectorsObject> = {\r\n  [Key in keyof TObject]: ReturnType<TObject[Key]>\r\n}\r\n\r\n/**\r\n * Represents a mapping of selectors for each key in a given root state.\r\n *\r\n * This type is a utility that takes a root state object type and\r\n * generates a corresponding set of selectors. Each selector is associated\r\n * with a key in the root state, allowing for the selection\r\n * of specific parts of the state.\r\n *\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type RootStateSelectors<RootState = any> = {\r\n  [Key in keyof RootState]: Selector<RootState, RootState[Key], []>\r\n}\r\n\r\n/**\r\n * @deprecated Please use {@linkcode StructuredSelectorCreator.withTypes createStructuredSelector.withTypes<RootState>()} instead. This type will be removed in the future.\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type TypedStructuredSelectorCreator<RootState = any> =\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends RootStateSelectors<RootState> = RootStateSelectors<RootState>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ) => OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n/**\r\n * Represents an object where each property is a selector function.\r\n *\r\n * @template StateType - The type of state that all the selectors operate on.\r\n *\r\n * @public\r\n */\r\nexport type SelectorsObject<StateType = any> = Record<\r\n  string,\r\n  Selector<StateType>\r\n>\r\n\r\n/**\r\n * It provides a way to create structured selectors.\r\n * The structured selector can take multiple input selectors\r\n * and map their output to an object with specific keys.\r\n *\r\n * @template StateType - The type of state that the structured selectors created with this structured selector creator will operate on.\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport interface StructuredSelectorCreator<StateType = any> {\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends SelectorsObject<StateType>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ): OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of\r\n   * {@linkcode createStructuredSelector createStructuredSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every\r\n   * {@linkcode createStructuredSelector createStructuredSelector} call.\r\n   *\r\n   * @returns A pre-typed `createStructuredSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createStructuredSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createStructuredAppSelector =\r\n   *   createStructuredSelector.withTypes<RootState>()\r\n   *\r\n   * const structuredAppSelector = createStructuredAppSelector({\r\n   *   // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *   todos: state => state.todos,\r\n   *   alerts: state => state.alerts,\r\n   *   todoById: (state, id: number) => state.todos[id]\r\n   * })\r\n   *\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all structured selectors created with this structured selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createstructuredselector#defining-a-pre-typed-createstructuredselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <\r\n    OverrideStateType extends StateType\r\n  >() => StructuredSelectorCreator<OverrideStateType>\r\n}\r\n\r\n/**\r\n * A convenience function that simplifies returning an object\r\n * made up of selector results.\r\n *\r\n * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n * @returns A memoized structured selector.\r\n *\r\n * @example\r\n * <caption>Modern Use Case</caption>\r\n * ```ts\r\n * import { createSelector, createStructuredSelector } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   todos: {\r\n *     id: number\r\n *     completed: boolean\r\n *     title: string\r\n *     description: string\r\n *   }[]\r\n *   alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * // This:\r\n * const structuredSelector = createStructuredSelector(\r\n *   {\r\n *     todos: (state: RootState) => state.todos,\r\n *     alerts: (state: RootState) => state.alerts,\r\n *     todoById: (state: RootState, id: number) => state.todos[id]\r\n *   },\r\n *   createSelector\r\n * )\r\n *\r\n * // Is essentially the same as this:\r\n * const selector = createSelector(\r\n *   [\r\n *     (state: RootState) => state.todos,\r\n *     (state: RootState) => state.alerts,\r\n *     (state: RootState, id: number) => state.todos[id]\r\n *   ],\r\n *   (todos, alerts, todoById) => {\r\n *     return {\r\n *       todos,\r\n *       alerts,\r\n *       todoById\r\n *     }\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createStructuredSelector: StructuredSelectorCreator =\r\n  Object.assign(\r\n    <\r\n      InputSelectorsObject extends SelectorsObject,\r\n      MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n      ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n    >(\r\n      inputSelectorsObject: InputSelectorsObject,\r\n      selectorCreator: CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      > = createSelector as CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >\r\n    ) => {\r\n      assertIsObject(\r\n        inputSelectorsObject,\r\n        'createStructuredSelector expects first argument to be an object ' +\r\n          `where each property is a selector, instead received a ${typeof inputSelectorsObject}`\r\n      )\r\n      const inputSelectorKeys = Object.keys(inputSelectorsObject)\r\n      const dependencies = inputSelectorKeys.map(\r\n        key => inputSelectorsObject[key]\r\n      )\r\n      const structuredSelector = selectorCreator(\r\n        dependencies,\r\n        (...inputSelectorResults: any[]) => {\r\n          return inputSelectorResults.reduce((composition, value, index) => {\r\n            composition[inputSelectorKeys[index]] = value\r\n            return composition\r\n          }, {})\r\n        }\r\n      )\r\n      return structuredSelector\r\n    },\r\n    { withTypes: () => createStructuredSelector }\r\n  ) as StructuredSelectorCreator\r\n"],"mappings":"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","names":["createSelector"]}
Index: node_modules/reselect/dist/reselect.mjs
===================================================================
--- node_modules/reselect/dist/reselect.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/dist/reselect.mjs	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,743 @@
+// src/devModeChecks/identityFunctionCheck.ts
+var runIdentityFunctionCheck = (resultFunc, inputSelectorsResults, outputSelectorResult) => {
+  if (inputSelectorsResults.length === 1 && inputSelectorsResults[0] === outputSelectorResult) {
+    let isInputSameAsOutput = false;
+    try {
+      const emptyObject = {};
+      if (resultFunc(emptyObject) === emptyObject)
+        isInputSameAsOutput = true;
+    } catch {
+    }
+    if (isInputSameAsOutput) {
+      let stack = void 0;
+      try {
+        throw new Error();
+      } catch (e) {
+        ;
+        ({ stack } = e);
+      }
+      console.warn(
+        "The result function returned its own inputs without modification. e.g\n`createSelector([state => state.todos], todos => todos)`\nThis could lead to inefficient memoization and unnecessary re-renders.\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.",
+        { stack }
+      );
+    }
+  }
+};
+
+// src/devModeChecks/inputStabilityCheck.ts
+var runInputStabilityCheck = (inputSelectorResultsObject, options, inputSelectorArgs) => {
+  const { memoize, memoizeOptions } = options;
+  const { inputSelectorResults, inputSelectorResultsCopy } = inputSelectorResultsObject;
+  const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions);
+  const areInputSelectorResultsEqual = createAnEmptyObject.apply(null, inputSelectorResults) === createAnEmptyObject.apply(null, inputSelectorResultsCopy);
+  if (!areInputSelectorResultsEqual) {
+    let stack = void 0;
+    try {
+      throw new Error();
+    } catch (e) {
+      ;
+      ({ stack } = e);
+    }
+    console.warn(
+      "An input selector returned a different result when passed same arguments.\nThis means your output selector will likely run more frequently than intended.\nAvoid returning a new reference inside your input selector, e.g.\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`",
+      {
+        arguments: inputSelectorArgs,
+        firstInputs: inputSelectorResults,
+        secondInputs: inputSelectorResultsCopy,
+        stack
+      }
+    );
+  }
+};
+
+// src/devModeChecks/setGlobalDevModeChecks.ts
+var globalDevModeChecks = {
+  inputStabilityCheck: "once",
+  identityFunctionCheck: "once"
+};
+var setGlobalDevModeChecks = (devModeChecks) => {
+  Object.assign(globalDevModeChecks, devModeChecks);
+};
+
+// src/utils.ts
+var NOT_FOUND = /* @__PURE__ */ Symbol("NOT_FOUND");
+function assertIsFunction(func, errorMessage = `expected a function, instead received ${typeof func}`) {
+  if (typeof func !== "function") {
+    throw new TypeError(errorMessage);
+  }
+}
+function assertIsObject(object, errorMessage = `expected an object, instead received ${typeof object}`) {
+  if (typeof object !== "object") {
+    throw new TypeError(errorMessage);
+  }
+}
+function assertIsArrayOfFunctions(array, errorMessage = `expected all items to be functions, instead received the following types: `) {
+  if (!array.every((item) => typeof item === "function")) {
+    const itemTypes = array.map(
+      (item) => typeof item === "function" ? `function ${item.name || "unnamed"}()` : typeof item
+    ).join(", ");
+    throw new TypeError(`${errorMessage}[${itemTypes}]`);
+  }
+}
+var ensureIsArray = (item) => {
+  return Array.isArray(item) ? item : [item];
+};
+function getDependencies(createSelectorArgs) {
+  const dependencies = Array.isArray(createSelectorArgs[0]) ? createSelectorArgs[0] : createSelectorArgs;
+  assertIsArrayOfFunctions(
+    dependencies,
+    `createSelector expects all input-selectors to be functions, but received the following types: `
+  );
+  return dependencies;
+}
+function collectInputSelectorResults(dependencies, inputSelectorArgs) {
+  const inputSelectorResults = [];
+  const { length } = dependencies;
+  for (let i = 0; i < length; i++) {
+    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs));
+  }
+  return inputSelectorResults;
+}
+var getDevModeChecksExecutionInfo = (firstRun, devModeChecks) => {
+  const { identityFunctionCheck, inputStabilityCheck } = {
+    ...globalDevModeChecks,
+    ...devModeChecks
+  };
+  return {
+    identityFunctionCheck: {
+      shouldRun: identityFunctionCheck === "always" || identityFunctionCheck === "once" && firstRun,
+      run: runIdentityFunctionCheck
+    },
+    inputStabilityCheck: {
+      shouldRun: inputStabilityCheck === "always" || inputStabilityCheck === "once" && firstRun,
+      run: runInputStabilityCheck
+    }
+  };
+};
+
+// src/autotrackMemoize/autotracking.ts
+var $REVISION = 0;
+var CURRENT_TRACKER = null;
+var Cell = class {
+  revision = $REVISION;
+  _value;
+  _lastValue;
+  _isEqual = tripleEq;
+  constructor(initialValue, isEqual = tripleEq) {
+    this._value = this._lastValue = initialValue;
+    this._isEqual = isEqual;
+  }
+  // Whenever a storage value is read, it'll add itself to the current tracker if
+  // one exists, entangling its state with that cache.
+  get value() {
+    CURRENT_TRACKER?.add(this);
+    return this._value;
+  }
+  // Whenever a storage value is updated, we bump the global revision clock,
+  // assign the revision for this storage to the new value, _and_ we schedule a
+  // rerender. This is important, and it's what makes autotracking  _pull_
+  // based. We don't actively tell the caches which depend on the storage that
+  // anything has happened. Instead, we recompute the caches when needed.
+  set value(newValue) {
+    if (this.value === newValue)
+      return;
+    this._value = newValue;
+    this.revision = ++$REVISION;
+  }
+};
+function tripleEq(a, b) {
+  return a === b;
+}
+var TrackingCache = class {
+  _cachedValue;
+  _cachedRevision = -1;
+  _deps = [];
+  hits = 0;
+  fn;
+  constructor(fn) {
+    this.fn = fn;
+  }
+  clear() {
+    this._cachedValue = void 0;
+    this._cachedRevision = -1;
+    this._deps = [];
+    this.hits = 0;
+  }
+  get value() {
+    if (this.revision > this._cachedRevision) {
+      const { fn } = this;
+      const currentTracker = /* @__PURE__ */ new Set();
+      const prevTracker = CURRENT_TRACKER;
+      CURRENT_TRACKER = currentTracker;
+      this._cachedValue = fn();
+      CURRENT_TRACKER = prevTracker;
+      this.hits++;
+      this._deps = Array.from(currentTracker);
+      this._cachedRevision = this.revision;
+    }
+    CURRENT_TRACKER?.add(this);
+    return this._cachedValue;
+  }
+  get revision() {
+    return Math.max(...this._deps.map((d) => d.revision), 0);
+  }
+};
+function getValue(cell) {
+  if (!(cell instanceof Cell)) {
+    console.warn("Not a valid cell! ", cell);
+  }
+  return cell.value;
+}
+function setValue(storage, value) {
+  if (!(storage instanceof Cell)) {
+    throw new TypeError(
+      "setValue must be passed a tracked store created with `createStorage`."
+    );
+  }
+  storage.value = storage._lastValue = value;
+}
+function createCell(initialValue, isEqual = tripleEq) {
+  return new Cell(initialValue, isEqual);
+}
+function createCache(fn) {
+  assertIsFunction(
+    fn,
+    "the first parameter to `createCache` must be a function"
+  );
+  return new TrackingCache(fn);
+}
+
+// src/autotrackMemoize/tracking.ts
+var neverEq = (a, b) => false;
+function createTag() {
+  return createCell(null, neverEq);
+}
+function dirtyTag(tag, value) {
+  setValue(tag, value);
+}
+var consumeCollection = (node) => {
+  let tag = node.collectionTag;
+  if (tag === null) {
+    tag = node.collectionTag = createTag();
+  }
+  getValue(tag);
+};
+var dirtyCollection = (node) => {
+  const tag = node.collectionTag;
+  if (tag !== null) {
+    dirtyTag(tag, null);
+  }
+};
+
+// src/autotrackMemoize/proxy.ts
+var REDUX_PROXY_LABEL = Symbol();
+var nextId = 0;
+var proto = Object.getPrototypeOf({});
+var ObjectTreeNode = class {
+  constructor(value) {
+    this.value = value;
+    this.value = value;
+    this.tag.value = value;
+  }
+  proxy = new Proxy(this, objectProxyHandler);
+  tag = createTag();
+  tags = {};
+  children = {};
+  collectionTag = null;
+  id = nextId++;
+};
+var objectProxyHandler = {
+  get(node, key) {
+    function calculateResult() {
+      const { value } = node;
+      const childValue = Reflect.get(value, key);
+      if (typeof key === "symbol") {
+        return childValue;
+      }
+      if (key in proto) {
+        return childValue;
+      }
+      if (typeof childValue === "object" && childValue !== null) {
+        let childNode = node.children[key];
+        if (childNode === void 0) {
+          childNode = node.children[key] = createNode(childValue);
+        }
+        if (childNode.tag) {
+          getValue(childNode.tag);
+        }
+        return childNode.proxy;
+      } else {
+        let tag = node.tags[key];
+        if (tag === void 0) {
+          tag = node.tags[key] = createTag();
+          tag.value = childValue;
+        }
+        getValue(tag);
+        return childValue;
+      }
+    }
+    const res = calculateResult();
+    return res;
+  },
+  ownKeys(node) {
+    consumeCollection(node);
+    return Reflect.ownKeys(node.value);
+  },
+  getOwnPropertyDescriptor(node, prop) {
+    return Reflect.getOwnPropertyDescriptor(node.value, prop);
+  },
+  has(node, prop) {
+    return Reflect.has(node.value, prop);
+  }
+};
+var ArrayTreeNode = class {
+  constructor(value) {
+    this.value = value;
+    this.value = value;
+    this.tag.value = value;
+  }
+  proxy = new Proxy([this], arrayProxyHandler);
+  tag = createTag();
+  tags = {};
+  children = {};
+  collectionTag = null;
+  id = nextId++;
+};
+var arrayProxyHandler = {
+  get([node], key) {
+    if (key === "length") {
+      consumeCollection(node);
+    }
+    return objectProxyHandler.get(node, key);
+  },
+  ownKeys([node]) {
+    return objectProxyHandler.ownKeys(node);
+  },
+  getOwnPropertyDescriptor([node], prop) {
+    return objectProxyHandler.getOwnPropertyDescriptor(node, prop);
+  },
+  has([node], prop) {
+    return objectProxyHandler.has(node, prop);
+  }
+};
+function createNode(value) {
+  if (Array.isArray(value)) {
+    return new ArrayTreeNode(value);
+  }
+  return new ObjectTreeNode(value);
+}
+function updateNode(node, newValue) {
+  const { value, tags, children } = node;
+  node.value = newValue;
+  if (Array.isArray(value) && Array.isArray(newValue) && value.length !== newValue.length) {
+    dirtyCollection(node);
+  } else {
+    if (value !== newValue) {
+      let oldKeysSize = 0;
+      let newKeysSize = 0;
+      let anyKeysAdded = false;
+      for (const _key in value) {
+        oldKeysSize++;
+      }
+      for (const key in newValue) {
+        newKeysSize++;
+        if (!(key in value)) {
+          anyKeysAdded = true;
+          break;
+        }
+      }
+      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize;
+      if (isDifferent) {
+        dirtyCollection(node);
+      }
+    }
+  }
+  for (const key in tags) {
+    const childValue = value[key];
+    const newChildValue = newValue[key];
+    if (childValue !== newChildValue) {
+      dirtyCollection(node);
+      dirtyTag(tags[key], newChildValue);
+    }
+    if (typeof newChildValue === "object" && newChildValue !== null) {
+      delete tags[key];
+    }
+  }
+  for (const key in children) {
+    const childNode = children[key];
+    const newChildValue = newValue[key];
+    const childValue = childNode.value;
+    if (childValue === newChildValue) {
+      continue;
+    } else if (typeof newChildValue === "object" && newChildValue !== null) {
+      updateNode(childNode, newChildValue);
+    } else {
+      deleteNode(childNode);
+      delete children[key];
+    }
+  }
+}
+function deleteNode(node) {
+  if (node.tag) {
+    dirtyTag(node.tag, null);
+  }
+  dirtyCollection(node);
+  for (const key in node.tags) {
+    dirtyTag(node.tags[key], null);
+  }
+  for (const key in node.children) {
+    deleteNode(node.children[key]);
+  }
+}
+
+// src/lruMemoize.ts
+function createSingletonCache(equals) {
+  let entry;
+  return {
+    get(key) {
+      if (entry && equals(entry.key, key)) {
+        return entry.value;
+      }
+      return NOT_FOUND;
+    },
+    put(key, value) {
+      entry = { key, value };
+    },
+    getEntries() {
+      return entry ? [entry] : [];
+    },
+    clear() {
+      entry = void 0;
+    }
+  };
+}
+function createLruCache(maxSize, equals) {
+  let entries = [];
+  function get(key) {
+    const cacheIndex = entries.findIndex((entry) => equals(key, entry.key));
+    if (cacheIndex > -1) {
+      const entry = entries[cacheIndex];
+      if (cacheIndex > 0) {
+        entries.splice(cacheIndex, 1);
+        entries.unshift(entry);
+      }
+      return entry.value;
+    }
+    return NOT_FOUND;
+  }
+  function put(key, value) {
+    if (get(key) === NOT_FOUND) {
+      entries.unshift({ key, value });
+      if (entries.length > maxSize) {
+        entries.pop();
+      }
+    }
+  }
+  function getEntries() {
+    return entries;
+  }
+  function clear() {
+    entries = [];
+  }
+  return { get, put, getEntries, clear };
+}
+var referenceEqualityCheck = (a, b) => a === b;
+function createCacheKeyComparator(equalityCheck) {
+  return function areArgumentsShallowlyEqual(prev, next) {
+    if (prev === null || next === null || prev.length !== next.length) {
+      return false;
+    }
+    const { length } = prev;
+    for (let i = 0; i < length; i++) {
+      if (!equalityCheck(prev[i], next[i])) {
+        return false;
+      }
+    }
+    return true;
+  };
+}
+function lruMemoize(func, equalityCheckOrOptions) {
+  const providedOptions = typeof equalityCheckOrOptions === "object" ? equalityCheckOrOptions : { equalityCheck: equalityCheckOrOptions };
+  const {
+    equalityCheck = referenceEqualityCheck,
+    maxSize = 1,
+    resultEqualityCheck
+  } = providedOptions;
+  const comparator = createCacheKeyComparator(equalityCheck);
+  let resultsCount = 0;
+  const cache = maxSize <= 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);
+  function memoized() {
+    let value = cache.get(arguments);
+    if (value === NOT_FOUND) {
+      value = func.apply(null, arguments);
+      resultsCount++;
+      if (resultEqualityCheck) {
+        const entries = cache.getEntries();
+        const matchingEntry = entries.find(
+          (entry) => resultEqualityCheck(entry.value, value)
+        );
+        if (matchingEntry) {
+          value = matchingEntry.value;
+          resultsCount !== 0 && resultsCount--;
+        }
+      }
+      cache.put(arguments, value);
+    }
+    return value;
+  }
+  memoized.clearCache = () => {
+    cache.clear();
+    memoized.resetResultsCount();
+  };
+  memoized.resultsCount = () => resultsCount;
+  memoized.resetResultsCount = () => {
+    resultsCount = 0;
+  };
+  return memoized;
+}
+
+// src/autotrackMemoize/autotrackMemoize.ts
+function autotrackMemoize(func) {
+  const node = createNode(
+    []
+  );
+  let lastArgs = null;
+  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck);
+  const cache = createCache(() => {
+    const res = func.apply(null, node.proxy);
+    return res;
+  });
+  function memoized() {
+    if (!shallowEqual(lastArgs, arguments)) {
+      updateNode(node, arguments);
+      lastArgs = arguments;
+    }
+    return cache.value;
+  }
+  memoized.clearCache = () => {
+    return cache.clear();
+  };
+  return memoized;
+}
+
+// src/weakMapMemoize.ts
+var StrongRef = class {
+  constructor(value) {
+    this.value = value;
+  }
+  deref() {
+    return this.value;
+  }
+};
+var Ref = typeof WeakRef !== "undefined" ? WeakRef : StrongRef;
+var UNTERMINATED = 0;
+var TERMINATED = 1;
+function createCacheNode() {
+  return {
+    s: UNTERMINATED,
+    v: void 0,
+    o: null,
+    p: null
+  };
+}
+function weakMapMemoize(func, options = {}) {
+  let fnNode = createCacheNode();
+  const { resultEqualityCheck } = options;
+  let lastResult;
+  let resultsCount = 0;
+  function memoized() {
+    let cacheNode = fnNode;
+    const { length } = arguments;
+    for (let i = 0, l = length; i < l; i++) {
+      const arg = arguments[i];
+      if (typeof arg === "function" || typeof arg === "object" && arg !== null) {
+        let objectCache = cacheNode.o;
+        if (objectCache === null) {
+          cacheNode.o = objectCache = /* @__PURE__ */ new WeakMap();
+        }
+        const objectNode = objectCache.get(arg);
+        if (objectNode === void 0) {
+          cacheNode = createCacheNode();
+          objectCache.set(arg, cacheNode);
+        } else {
+          cacheNode = objectNode;
+        }
+      } else {
+        let primitiveCache = cacheNode.p;
+        if (primitiveCache === null) {
+          cacheNode.p = primitiveCache = /* @__PURE__ */ new Map();
+        }
+        const primitiveNode = primitiveCache.get(arg);
+        if (primitiveNode === void 0) {
+          cacheNode = createCacheNode();
+          primitiveCache.set(arg, cacheNode);
+        } else {
+          cacheNode = primitiveNode;
+        }
+      }
+    }
+    const terminatedNode = cacheNode;
+    let result;
+    if (cacheNode.s === TERMINATED) {
+      result = cacheNode.v;
+    } else {
+      result = func.apply(null, arguments);
+      resultsCount++;
+      if (resultEqualityCheck) {
+        const lastResultValue = lastResult?.deref?.() ?? lastResult;
+        if (lastResultValue != null && resultEqualityCheck(lastResultValue, result)) {
+          result = lastResultValue;
+          resultsCount !== 0 && resultsCount--;
+        }
+        const needsWeakRef = typeof result === "object" && result !== null || typeof result === "function";
+        lastResult = needsWeakRef ? new Ref(result) : result;
+      }
+    }
+    terminatedNode.s = TERMINATED;
+    terminatedNode.v = result;
+    return result;
+  }
+  memoized.clearCache = () => {
+    fnNode = createCacheNode();
+    memoized.resetResultsCount();
+  };
+  memoized.resultsCount = () => resultsCount;
+  memoized.resetResultsCount = () => {
+    resultsCount = 0;
+  };
+  return memoized;
+}
+
+// src/createSelectorCreator.ts
+function createSelectorCreator(memoizeOrOptions, ...memoizeOptionsFromArgs) {
+  const createSelectorCreatorOptions = typeof memoizeOrOptions === "function" ? {
+    memoize: memoizeOrOptions,
+    memoizeOptions: memoizeOptionsFromArgs
+  } : memoizeOrOptions;
+  const createSelector2 = (...createSelectorArgs) => {
+    let recomputations = 0;
+    let dependencyRecomputations = 0;
+    let lastResult;
+    let directlyPassedOptions = {};
+    let resultFunc = createSelectorArgs.pop();
+    if (typeof resultFunc === "object") {
+      directlyPassedOptions = resultFunc;
+      resultFunc = createSelectorArgs.pop();
+    }
+    assertIsFunction(
+      resultFunc,
+      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`
+    );
+    const combinedOptions = {
+      ...createSelectorCreatorOptions,
+      ...directlyPassedOptions
+    };
+    const {
+      memoize,
+      memoizeOptions = [],
+      argsMemoize = weakMapMemoize,
+      argsMemoizeOptions = [],
+      devModeChecks = {}
+    } = combinedOptions;
+    const finalMemoizeOptions = ensureIsArray(memoizeOptions);
+    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions);
+    const dependencies = getDependencies(createSelectorArgs);
+    const memoizedResultFunc = memoize(function recomputationWrapper() {
+      recomputations++;
+      return resultFunc.apply(
+        null,
+        arguments
+      );
+    }, ...finalMemoizeOptions);
+    let firstRun = true;
+    const selector = argsMemoize(function dependenciesChecker() {
+      dependencyRecomputations++;
+      const inputSelectorResults = collectInputSelectorResults(
+        dependencies,
+        arguments
+      );
+      lastResult = memoizedResultFunc.apply(null, inputSelectorResults);
+      if (process.env.NODE_ENV !== "production") {
+        const { identityFunctionCheck, inputStabilityCheck } = getDevModeChecksExecutionInfo(firstRun, devModeChecks);
+        if (identityFunctionCheck.shouldRun) {
+          identityFunctionCheck.run(
+            resultFunc,
+            inputSelectorResults,
+            lastResult
+          );
+        }
+        if (inputStabilityCheck.shouldRun) {
+          const inputSelectorResultsCopy = collectInputSelectorResults(
+            dependencies,
+            arguments
+          );
+          inputStabilityCheck.run(
+            { inputSelectorResults, inputSelectorResultsCopy },
+            { memoize, memoizeOptions: finalMemoizeOptions },
+            arguments
+          );
+        }
+        if (firstRun)
+          firstRun = false;
+      }
+      return lastResult;
+    }, ...finalArgsMemoizeOptions);
+    return Object.assign(selector, {
+      resultFunc,
+      memoizedResultFunc,
+      dependencies,
+      dependencyRecomputations: () => dependencyRecomputations,
+      resetDependencyRecomputations: () => {
+        dependencyRecomputations = 0;
+      },
+      lastResult: () => lastResult,
+      recomputations: () => recomputations,
+      resetRecomputations: () => {
+        recomputations = 0;
+      },
+      memoize,
+      argsMemoize
+    });
+  };
+  Object.assign(createSelector2, {
+    withTypes: () => createSelector2
+  });
+  return createSelector2;
+}
+var createSelector = /* @__PURE__ */ createSelectorCreator(weakMapMemoize);
+
+// src/createStructuredSelector.ts
+var createStructuredSelector = Object.assign(
+  (inputSelectorsObject, selectorCreator = createSelector) => {
+    assertIsObject(
+      inputSelectorsObject,
+      `createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof inputSelectorsObject}`
+    );
+    const inputSelectorKeys = Object.keys(inputSelectorsObject);
+    const dependencies = inputSelectorKeys.map(
+      (key) => inputSelectorsObject[key]
+    );
+    const structuredSelector = selectorCreator(
+      dependencies,
+      (...inputSelectorResults) => {
+        return inputSelectorResults.reduce((composition, value, index) => {
+          composition[inputSelectorKeys[index]] = value;
+          return composition;
+        }, {});
+      }
+    );
+    return structuredSelector;
+  },
+  { withTypes: () => createStructuredSelector }
+);
+export {
+  createSelector,
+  createSelectorCreator,
+  createStructuredSelector,
+  lruMemoize,
+  referenceEqualityCheck,
+  setGlobalDevModeChecks,
+  autotrackMemoize as unstable_autotrackMemoize,
+  weakMapMemoize
+};
+//# sourceMappingURL=reselect.mjs.map
Index: node_modules/reselect/dist/reselect.mjs.map
===================================================================
--- node_modules/reselect/dist/reselect.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/dist/reselect.mjs.map	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../src/devModeChecks/identityFunctionCheck.ts","../src/devModeChecks/inputStabilityCheck.ts","../src/devModeChecks/setGlobalDevModeChecks.ts","../src/utils.ts","../src/autotrackMemoize/autotracking.ts","../src/autotrackMemoize/tracking.ts","../src/autotrackMemoize/proxy.ts","../src/lruMemoize.ts","../src/autotrackMemoize/autotrackMemoize.ts","../src/weakMapMemoize.ts","../src/createSelectorCreator.ts","../src/createStructuredSelector.ts"],"sourcesContent":["import type { AnyFunction } from '../types'\r\n\r\n/**\r\n * Runs a check to determine if the given result function behaves as an\r\n * identity function. An identity function is one that returns its\r\n * input unchanged, for example, `x => x`. This check helps ensure\r\n * efficient memoization and prevent unnecessary re-renders by encouraging\r\n * proper use of transformation logic in result functions and\r\n * extraction logic in input selectors.\r\n *\r\n * @param resultFunc - The result function to be checked.\r\n * @param inputSelectorsResults - The results of the input selectors.\r\n * @param outputSelectorResult - The result of the output selector.\r\n *\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#identityfunctioncheck `identityFunctionCheck`}\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const runIdentityFunctionCheck = (\r\n  resultFunc: AnyFunction,\r\n  inputSelectorsResults: unknown[],\r\n  outputSelectorResult: unknown\r\n) => {\r\n  if (\r\n    inputSelectorsResults.length === 1 &&\r\n    inputSelectorsResults[0] === outputSelectorResult\r\n  ) {\r\n    let isInputSameAsOutput = false\r\n    try {\r\n      const emptyObject = {}\r\n      if (resultFunc(emptyObject) === emptyObject) isInputSameAsOutput = true\r\n    } catch {\r\n      // Do nothing\r\n    }\r\n    if (isInputSameAsOutput) {\r\n      let stack: string | undefined = undefined\r\n      try {\r\n        throw new Error()\r\n      } catch (e) {\r\n        // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi\r\n        ;({ stack } = e as Error)\r\n      }\r\n      console.warn(\r\n        'The result function returned its own inputs without modification. e.g' +\r\n          '\\n`createSelector([state => state.todos], todos => todos)`' +\r\n          '\\nThis could lead to inefficient memoization and unnecessary re-renders.' +\r\n          '\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.',\r\n        { stack }\r\n      )\r\n    }\r\n  }\r\n}\r\n","import type { CreateSelectorOptions, UnknownMemoizer } from '../types'\r\n\r\n/**\r\n * Runs a stability check to ensure the input selector results remain stable\r\n * when provided with the same arguments. This function is designed to detect\r\n * changes in the output of input selectors, which can impact the performance of memoized selectors.\r\n *\r\n * @param inputSelectorResultsObject - An object containing two arrays: `inputSelectorResults` and `inputSelectorResultsCopy`, representing the results of input selectors.\r\n * @param options - Options object consisting of a `memoize` function and a `memoizeOptions` object.\r\n * @param inputSelectorArgs - List of arguments being passed to the input selectors.\r\n *\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks/#inputstabilitycheck `inputStabilityCheck`}\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const runInputStabilityCheck = (\r\n  inputSelectorResultsObject: {\r\n    inputSelectorResults: unknown[]\r\n    inputSelectorResultsCopy: unknown[]\r\n  },\r\n  options: Required<\r\n    Pick<\r\n      CreateSelectorOptions<UnknownMemoizer, UnknownMemoizer>,\r\n      'memoize' | 'memoizeOptions'\r\n    >\r\n  >,\r\n  inputSelectorArgs: unknown[] | IArguments\r\n) => {\r\n  const { memoize, memoizeOptions } = options\r\n  const { inputSelectorResults, inputSelectorResultsCopy } =\r\n    inputSelectorResultsObject\r\n  const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions)\r\n  // if the memoize method thinks the parameters are equal, these *should* be the same reference\r\n  const areInputSelectorResultsEqual =\r\n    createAnEmptyObject.apply(null, inputSelectorResults) ===\r\n    createAnEmptyObject.apply(null, inputSelectorResultsCopy)\r\n  if (!areInputSelectorResultsEqual) {\r\n    let stack: string | undefined = undefined\r\n    try {\r\n      throw new Error()\r\n    } catch (e) {\r\n      // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi\r\n      ;({ stack } = e as Error)\r\n    }\r\n    console.warn(\r\n      'An input selector returned a different result when passed same arguments.' +\r\n        '\\nThis means your output selector will likely run more frequently than intended.' +\r\n        '\\nAvoid returning a new reference inside your input selector, e.g.' +\r\n        '\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`',\r\n      {\r\n        arguments: inputSelectorArgs,\r\n        firstInputs: inputSelectorResults,\r\n        secondInputs: inputSelectorResultsCopy,\r\n        stack\r\n      }\r\n    )\r\n  }\r\n}\r\n","import type { DevModeChecks } from '../types'\r\n\r\n/**\r\n * Global configuration for development mode checks. This specifies the default\r\n * frequency at which each development mode check should be performed.\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const globalDevModeChecks: DevModeChecks = {\r\n  inputStabilityCheck: 'once',\r\n  identityFunctionCheck: 'once'\r\n}\r\n\r\n/**\r\n * Overrides the development mode checks settings for all selectors.\r\n *\r\n * Reselect performs additional checks in development mode to help identify and\r\n * warn about potential issues in selector behavior. This function allows you to\r\n * customize the behavior of these checks across all selectors in your application.\r\n *\r\n * **Note**: This setting can still be overridden per selector inside `createSelector`'s `options` object.\r\n * See {@link https://github.com/reduxjs/reselect#2-per-selector-by-passing-an-identityfunctioncheck-option-directly-to-createselector per-selector-configuration}\r\n * and {@linkcode CreateSelectorOptions.identityFunctionCheck identityFunctionCheck} for more details.\r\n *\r\n * _The development mode checks do not run in production builds._\r\n *\r\n * @param devModeChecks - An object specifying the desired settings for development mode checks. You can provide partial overrides. Unspecified settings will retain their current values.\r\n *\r\n * @example\r\n * ```ts\r\n * import { setGlobalDevModeChecks } from 'reselect'\r\n * import { DevModeChecks } from '../types'\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'always' })\r\n *\r\n * // Never run the input stability check.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'never' })\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'always' })\r\n *\r\n * // Never run the identity function check.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'never' })\r\n * ```\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#1-globally-through-setglobaldevmodechecks global-configuration}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport const setGlobalDevModeChecks = (\r\n  devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n  Object.assign(globalDevModeChecks, devModeChecks)\r\n}\r\n","import { runIdentityFunctionCheck } from './devModeChecks/identityFunctionCheck'\r\nimport { runInputStabilityCheck } from './devModeChecks/inputStabilityCheck'\r\nimport { globalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'\r\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\r\nimport type {\r\n  DevModeChecks,\r\n  Selector,\r\n  SelectorArray,\r\n  DevModeChecksExecutionInfo\r\n} from './types'\r\n\r\nexport const NOT_FOUND = /* @__PURE__ */ Symbol('NOT_FOUND')\r\nexport type NOT_FOUND_TYPE = typeof NOT_FOUND\r\n\r\n/**\r\n * Assert that the provided value is a function. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param func - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsFunction<FunctionType extends Function>(\r\n  func: unknown,\r\n  errorMessage = `expected a function, instead received ${typeof func}`\r\n): asserts func is FunctionType {\r\n  if (typeof func !== 'function') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided value is an object. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param object - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsObject<ObjectType extends Record<string, unknown>>(\r\n  object: unknown,\r\n  errorMessage = `expected an object, instead received ${typeof object}`\r\n): asserts object is ObjectType {\r\n  if (typeof object !== 'object') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided array is an array of functions. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param array - The array to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsArrayOfFunctions<FunctionType extends Function>(\r\n  array: unknown[],\r\n  errorMessage = `expected all items to be functions, instead received the following types: `\r\n): asserts array is FunctionType[] {\r\n  if (\r\n    !array.every((item): item is FunctionType => typeof item === 'function')\r\n  ) {\r\n    const itemTypes = array\r\n      .map(item =>\r\n        typeof item === 'function'\r\n          ? `function ${item.name || 'unnamed'}()`\r\n          : typeof item\r\n      )\r\n      .join(', ')\r\n    throw new TypeError(`${errorMessage}[${itemTypes}]`)\r\n  }\r\n}\r\n\r\n/**\r\n * Ensure that the input is an array. If it's already an array, it's returned as is.\r\n * If it's not an array, it will be wrapped in a new array.\r\n *\r\n * @param item - The item to be checked.\r\n * @returns An array containing the input item. If the input is already an array, it's returned without modification.\r\n */\r\nexport const ensureIsArray = (item: unknown) => {\r\n  return Array.isArray(item) ? item : [item]\r\n}\r\n\r\n/**\r\n * Extracts the \"dependencies\" / \"input selectors\" from the arguments of `createSelector`.\r\n *\r\n * @param createSelectorArgs - Arguments passed to `createSelector` as an array.\r\n * @returns An array of \"input selectors\" / \"dependencies\".\r\n * @throws A `TypeError` if any of the input selectors is not function.\r\n */\r\nexport function getDependencies(createSelectorArgs: unknown[]) {\r\n  const dependencies = Array.isArray(createSelectorArgs[0])\r\n    ? createSelectorArgs[0]\r\n    : createSelectorArgs\r\n\r\n  assertIsArrayOfFunctions<Selector>(\r\n    dependencies,\r\n    `createSelector expects all input-selectors to be functions, but received the following types: `\r\n  )\r\n\r\n  return dependencies as SelectorArray\r\n}\r\n\r\n/**\r\n * Runs each input selector and returns their collective results as an array.\r\n *\r\n * @param dependencies - An array of \"dependencies\" or \"input selectors\".\r\n * @param inputSelectorArgs - An array of arguments being passed to the input selectors.\r\n * @returns An array of input selector results.\r\n */\r\nexport function collectInputSelectorResults(\r\n  dependencies: SelectorArray,\r\n  inputSelectorArgs: unknown[] | IArguments\r\n) {\r\n  const inputSelectorResults = []\r\n  const { length } = dependencies\r\n  for (let i = 0; i < length; i++) {\r\n    // @ts-ignore\r\n    // apply arguments instead of spreading and mutate a local list of params for performance.\r\n    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs))\r\n  }\r\n  return inputSelectorResults\r\n}\r\n\r\n/**\r\n * Retrieves execution information for development mode checks.\r\n *\r\n * @param devModeChecks - Custom Settings for development mode checks. These settings will override the global defaults.\r\n * @param firstRun - Indicates whether it is the first time the selector has run.\r\n * @returns  An object containing the execution information for each development mode check.\r\n */\r\nexport const getDevModeChecksExecutionInfo = (\r\n  firstRun: boolean,\r\n  devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n  const { identityFunctionCheck, inputStabilityCheck } = {\r\n    ...globalDevModeChecks,\r\n    ...devModeChecks\r\n  }\r\n  return {\r\n    identityFunctionCheck: {\r\n      shouldRun:\r\n        identityFunctionCheck === 'always' ||\r\n        (identityFunctionCheck === 'once' && firstRun),\r\n      run: runIdentityFunctionCheck\r\n    },\r\n    inputStabilityCheck: {\r\n      shouldRun:\r\n        inputStabilityCheck === 'always' ||\r\n        (inputStabilityCheck === 'once' && firstRun),\r\n      run: runInputStabilityCheck\r\n    }\r\n  } satisfies DevModeChecksExecutionInfo\r\n}\r\n","// Original autotracking implementation source:\r\n// - https://gist.github.com/pzuraq/79bf862e0f8cd9521b79c4b6eccdc4f9\r\n// Additional references:\r\n// - https://www.pzuraq.com/blog/how-autotracking-works\r\n// - https://v5.chriskrycho.com/journal/autotracking-elegant-dx-via-cutting-edge-cs/\r\nimport type { EqualityFn } from '../types'\r\nimport { assertIsFunction } from '../utils'\r\n\r\n// The global revision clock. Every time state changes, the clock increments.\r\nexport let $REVISION = 0\r\n\r\n// The current dependency tracker. Whenever we compute a cache, we create a Set\r\n// to track any dependencies that are used while computing. If no cache is\r\n// computing, then the tracker is null.\r\nlet CURRENT_TRACKER: Set<Cell<any> | TrackingCache> | null = null\r\n\r\n// Storage represents a root value in the system - the actual state of our app.\r\nexport class Cell<T> {\r\n  revision = $REVISION\r\n\r\n  _value: T\r\n  _lastValue: T\r\n  _isEqual: EqualityFn = tripleEq\r\n\r\n  constructor(initialValue: T, isEqual: EqualityFn = tripleEq) {\r\n    this._value = this._lastValue = initialValue\r\n    this._isEqual = isEqual\r\n  }\r\n\r\n  // Whenever a storage value is read, it'll add itself to the current tracker if\r\n  // one exists, entangling its state with that cache.\r\n  get value() {\r\n    CURRENT_TRACKER?.add(this)\r\n\r\n    return this._value\r\n  }\r\n\r\n  // Whenever a storage value is updated, we bump the global revision clock,\r\n  // assign the revision for this storage to the new value, _and_ we schedule a\r\n  // rerender. This is important, and it's what makes autotracking  _pull_\r\n  // based. We don't actively tell the caches which depend on the storage that\r\n  // anything has happened. Instead, we recompute the caches when needed.\r\n  set value(newValue) {\r\n    if (this.value === newValue) return\r\n\r\n    this._value = newValue\r\n    this.revision = ++$REVISION\r\n  }\r\n}\r\n\r\nfunction tripleEq(a: unknown, b: unknown) {\r\n  return a === b\r\n}\r\n\r\n// Caches represent derived state in the system. They are ultimately functions\r\n// that are memoized based on what state they use to produce their output,\r\n// meaning they will only rerun IFF a storage value that could affect the output\r\n// has changed. Otherwise, they'll return the cached value.\r\nexport class TrackingCache {\r\n  _cachedValue: any\r\n  _cachedRevision = -1\r\n  _deps: any[] = []\r\n  hits = 0\r\n\r\n  fn: () => any\r\n\r\n  constructor(fn: () => any) {\r\n    this.fn = fn\r\n  }\r\n\r\n  clear() {\r\n    this._cachedValue = undefined\r\n    this._cachedRevision = -1\r\n    this._deps = []\r\n    this.hits = 0\r\n  }\r\n\r\n  get value() {\r\n    // When getting the value for a Cache, first we check all the dependencies of\r\n    // the cache to see what their current revision is. If the current revision is\r\n    // greater than the cached revision, then something has changed.\r\n    if (this.revision > this._cachedRevision) {\r\n      const { fn } = this\r\n\r\n      // We create a new dependency tracker for this cache. As the cache runs\r\n      // its function, any Storage or Cache instances which are used while\r\n      // computing will be added to this tracker. In the end, it will be the\r\n      // full list of dependencies that this Cache depends on.\r\n      const currentTracker = new Set<Cell<any>>()\r\n      const prevTracker = CURRENT_TRACKER\r\n\r\n      CURRENT_TRACKER = currentTracker\r\n\r\n      // try {\r\n      this._cachedValue = fn()\r\n      // } finally {\r\n      CURRENT_TRACKER = prevTracker\r\n      this.hits++\r\n      this._deps = Array.from(currentTracker)\r\n\r\n      // Set the cached revision. This is the current clock count of all the\r\n      // dependencies. If any dependency changes, this number will be less\r\n      // than the new revision.\r\n      this._cachedRevision = this.revision\r\n      // }\r\n    }\r\n\r\n    // If there is a current tracker, it means another Cache is computing and\r\n    // using this one, so we add this one to the tracker.\r\n    CURRENT_TRACKER?.add(this)\r\n\r\n    // Always return the cached value.\r\n    return this._cachedValue\r\n  }\r\n\r\n  get revision() {\r\n    // The current revision is the max of all the dependencies' revisions.\r\n    return Math.max(...this._deps.map(d => d.revision), 0)\r\n  }\r\n}\r\n\r\nexport function getValue<T>(cell: Cell<T>): T {\r\n  if (!(cell instanceof Cell)) {\r\n    console.warn('Not a valid cell! ', cell)\r\n  }\r\n\r\n  return cell.value\r\n}\r\n\r\ntype CellValue<T extends Cell<unknown>> = T extends Cell<infer U> ? U : never\r\n\r\nexport function setValue<T extends Cell<unknown>>(\r\n  storage: T,\r\n  value: CellValue<T>\r\n): void {\r\n  if (!(storage instanceof Cell)) {\r\n    throw new TypeError(\r\n      'setValue must be passed a tracked store created with `createStorage`.'\r\n    )\r\n  }\r\n\r\n  storage.value = storage._lastValue = value\r\n}\r\n\r\nexport function createCell<T = unknown>(\r\n  initialValue: T,\r\n  isEqual: EqualityFn = tripleEq\r\n): Cell<T> {\r\n  return new Cell(initialValue, isEqual)\r\n}\r\n\r\nexport function createCache<T = unknown>(fn: () => T): TrackingCache {\r\n  assertIsFunction(\r\n    fn,\r\n    'the first parameter to `createCache` must be a function'\r\n  )\r\n\r\n  return new TrackingCache(fn)\r\n}\r\n","import type { Cell } from './autotracking'\r\nimport {\r\n  getValue as consumeTag,\r\n  createCell as createStorage,\r\n  setValue\r\n} from './autotracking'\r\n\r\nexport type Tag = Cell<unknown>\r\n\r\nconst neverEq = (a: any, b: any): boolean => false\r\n\r\nexport function createTag(): Tag {\r\n  return createStorage(null, neverEq)\r\n}\r\nexport { consumeTag }\r\nexport function dirtyTag(tag: Tag, value: any): void {\r\n  setValue(tag, value)\r\n}\r\n\r\nexport interface Node<\r\n  T extends Array<unknown> | Record<string, unknown> =\r\n    | Array<unknown>\r\n    | Record<string, unknown>\r\n> {\r\n  collectionTag: Tag | null\r\n  tag: Tag | null\r\n  tags: Record<string, Tag>\r\n  children: Record<string, Node>\r\n  proxy: T\r\n  value: T\r\n  id: number\r\n}\r\n\r\nexport const consumeCollection = (node: Node): void => {\r\n  let tag = node.collectionTag\r\n\r\n  if (tag === null) {\r\n    tag = node.collectionTag = createTag()\r\n  }\r\n\r\n  consumeTag(tag)\r\n}\r\n\r\nexport const dirtyCollection = (node: Node): void => {\r\n  const tag = node.collectionTag\r\n\r\n  if (tag !== null) {\r\n    dirtyTag(tag, null)\r\n  }\r\n}\r\n","// Original source:\r\n// - https://github.com/simonihmig/tracked-redux/blob/master/packages/tracked-redux/src/-private/proxy.ts\r\n\r\nimport type { Node, Tag } from './tracking'\r\nimport {\r\n  consumeCollection,\r\n  consumeTag,\r\n  createTag,\r\n  dirtyCollection,\r\n  dirtyTag\r\n} from './tracking'\r\n\r\nexport const REDUX_PROXY_LABEL = Symbol()\r\n\r\nlet nextId = 0\r\n\r\nconst proto = Object.getPrototypeOf({})\r\n\r\nclass ObjectTreeNode<T extends Record<string, unknown>> implements Node<T> {\r\n  proxy: T = new Proxy(this, objectProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {} as Record<string, Tag>\r\n  children = {} as Record<string, Node>\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst objectProxyHandler = {\r\n  get(node: Node, key: string | symbol): unknown {\r\n    function calculateResult() {\r\n      const { value } = node\r\n\r\n      const childValue = Reflect.get(value, key)\r\n\r\n      if (typeof key === 'symbol') {\r\n        return childValue\r\n      }\r\n\r\n      if (key in proto) {\r\n        return childValue\r\n      }\r\n\r\n      if (typeof childValue === 'object' && childValue !== null) {\r\n        let childNode = node.children[key]\r\n\r\n        if (childNode === undefined) {\r\n          childNode = node.children[key] = createNode(childValue)\r\n        }\r\n\r\n        if (childNode.tag) {\r\n          consumeTag(childNode.tag)\r\n        }\r\n\r\n        return childNode.proxy\r\n      } else {\r\n        let tag = node.tags[key]\r\n\r\n        if (tag === undefined) {\r\n          tag = node.tags[key] = createTag()\r\n          tag.value = childValue\r\n        }\r\n\r\n        consumeTag(tag)\r\n\r\n        return childValue\r\n      }\r\n    }\r\n    const res = calculateResult()\r\n    return res\r\n  },\r\n\r\n  ownKeys(node: Node): ArrayLike<string | symbol> {\r\n    consumeCollection(node)\r\n    return Reflect.ownKeys(node.value)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    node: Node,\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return Reflect.getOwnPropertyDescriptor(node.value, prop)\r\n  },\r\n\r\n  has(node: Node, prop: string | symbol): boolean {\r\n    return Reflect.has(node.value, prop)\r\n  }\r\n}\r\n\r\nclass ArrayTreeNode<T extends Array<unknown>> implements Node<T> {\r\n  proxy: T = new Proxy([this], arrayProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {}\r\n  children = {}\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst arrayProxyHandler = {\r\n  get([node]: [Node], key: string | symbol): unknown {\r\n    if (key === 'length') {\r\n      consumeCollection(node)\r\n    }\r\n\r\n    return objectProxyHandler.get(node, key)\r\n  },\r\n\r\n  ownKeys([node]: [Node]): ArrayLike<string | symbol> {\r\n    return objectProxyHandler.ownKeys(node)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    [node]: [Node],\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return objectProxyHandler.getOwnPropertyDescriptor(node, prop)\r\n  },\r\n\r\n  has([node]: [Node], prop: string | symbol): boolean {\r\n    return objectProxyHandler.has(node, prop)\r\n  }\r\n}\r\n\r\nexport function createNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  value: T\r\n): Node<T> {\r\n  if (Array.isArray(value)) {\r\n    return new ArrayTreeNode(value)\r\n  }\r\n\r\n  return new ObjectTreeNode(value) as Node<T>\r\n}\r\n\r\nconst keysMap = new WeakMap<\r\n  Array<unknown> | Record<string, unknown>,\r\n  Set<string>\r\n>()\r\n\r\nexport function updateNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  node: Node<T>,\r\n  newValue: T\r\n): void {\r\n  const { value, tags, children } = node\r\n\r\n  node.value = newValue\r\n\r\n  if (\r\n    Array.isArray(value) &&\r\n    Array.isArray(newValue) &&\r\n    value.length !== newValue.length\r\n  ) {\r\n    dirtyCollection(node)\r\n  } else {\r\n    if (value !== newValue) {\r\n      let oldKeysSize = 0\r\n      let newKeysSize = 0\r\n      let anyKeysAdded = false\r\n\r\n      for (const _key in value) {\r\n        oldKeysSize++\r\n      }\r\n\r\n      for (const key in newValue) {\r\n        newKeysSize++\r\n        if (!(key in value)) {\r\n          anyKeysAdded = true\r\n          break\r\n        }\r\n      }\r\n\r\n      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize\r\n\r\n      if (isDifferent) {\r\n        dirtyCollection(node)\r\n      }\r\n    }\r\n  }\r\n\r\n  for (const key in tags) {\r\n    const childValue = (value as Record<string, unknown>)[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    if (childValue !== newChildValue) {\r\n      dirtyCollection(node)\r\n      dirtyTag(tags[key], newChildValue)\r\n    }\r\n\r\n    if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      delete tags[key]\r\n    }\r\n  }\r\n\r\n  for (const key in children) {\r\n    const childNode = children[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    const childValue = childNode.value\r\n\r\n    if (childValue === newChildValue) {\r\n      continue\r\n    } else if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      updateNode(childNode, newChildValue as Record<string, unknown>)\r\n    } else {\r\n      deleteNode(childNode)\r\n      delete children[key]\r\n    }\r\n  }\r\n}\r\n\r\nfunction deleteNode(node: Node): void {\r\n  if (node.tag) {\r\n    dirtyTag(node.tag, null)\r\n  }\r\n  dirtyCollection(node)\r\n  for (const key in node.tags) {\r\n    dirtyTag(node.tags[key], null)\r\n  }\r\n  for (const key in node.children) {\r\n    deleteNode(node.children[key])\r\n  }\r\n}\r\n","import type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nimport type { NOT_FOUND_TYPE } from './utils'\r\nimport { NOT_FOUND } from './utils'\r\n\r\n// Cache implementation based on Erik Rasmussen's `lru-memoize`:\r\n// https://github.com/erikras/lru-memoize\r\n\r\ninterface Entry {\r\n  key: unknown\r\n  value: unknown\r\n}\r\n\r\ninterface Cache {\r\n  get(key: unknown): unknown | NOT_FOUND_TYPE\r\n  put(key: unknown, value: unknown): void\r\n  getEntries(): Entry[]\r\n  clear(): void\r\n}\r\n\r\nfunction createSingletonCache(equals: EqualityFn): Cache {\r\n  let entry: Entry | undefined\r\n  return {\r\n    get(key: unknown) {\r\n      if (entry && equals(entry.key, key)) {\r\n        return entry.value\r\n      }\r\n\r\n      return NOT_FOUND\r\n    },\r\n\r\n    put(key: unknown, value: unknown) {\r\n      entry = { key, value }\r\n    },\r\n\r\n    getEntries() {\r\n      return entry ? [entry] : []\r\n    },\r\n\r\n    clear() {\r\n      entry = undefined\r\n    }\r\n  }\r\n}\r\n\r\nfunction createLruCache(maxSize: number, equals: EqualityFn): Cache {\r\n  let entries: Entry[] = []\r\n\r\n  function get(key: unknown) {\r\n    const cacheIndex = entries.findIndex(entry => equals(key, entry.key))\r\n\r\n    // We found a cached entry\r\n    if (cacheIndex > -1) {\r\n      const entry = entries[cacheIndex]\r\n\r\n      // Cached entry not at top of cache, move it to the top\r\n      if (cacheIndex > 0) {\r\n        entries.splice(cacheIndex, 1)\r\n        entries.unshift(entry)\r\n      }\r\n\r\n      return entry.value\r\n    }\r\n\r\n    // No entry found in cache, return sentinel\r\n    return NOT_FOUND\r\n  }\r\n\r\n  function put(key: unknown, value: unknown) {\r\n    if (get(key) === NOT_FOUND) {\r\n      // TODO Is unshift slow?\r\n      entries.unshift({ key, value })\r\n      if (entries.length > maxSize) {\r\n        entries.pop()\r\n      }\r\n    }\r\n  }\r\n\r\n  function getEntries() {\r\n    return entries\r\n  }\r\n\r\n  function clear() {\r\n    entries = []\r\n  }\r\n\r\n  return { get, put, getEntries, clear }\r\n}\r\n\r\n/**\r\n * Runs a simple reference equality check.\r\n * What {@linkcode lruMemoize lruMemoize} uses by default.\r\n *\r\n * **Note**: This function was previously known as `defaultEqualityCheck`.\r\n *\r\n * @public\r\n */\r\nexport const referenceEqualityCheck: EqualityFn = (a, b) => a === b\r\n\r\nexport function createCacheKeyComparator(equalityCheck: EqualityFn) {\r\n  return function areArgumentsShallowlyEqual(\r\n    prev: unknown[] | IArguments | null,\r\n    next: unknown[] | IArguments | null\r\n  ): boolean {\r\n    if (prev === null || next === null || prev.length !== next.length) {\r\n      return false\r\n    }\r\n\r\n    // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\r\n    const { length } = prev\r\n    for (let i = 0; i < length; i++) {\r\n      if (!equalityCheck(prev[i], next[i])) {\r\n        return false\r\n      }\r\n    }\r\n\r\n    return true\r\n  }\r\n}\r\n\r\n/**\r\n * Options for configuring the behavior of a function memoized with\r\n * LRU (Least Recently Used) caching.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @public\r\n */\r\nexport interface LruMemoizeOptions<Result = any> {\r\n  /**\r\n   * Function used to compare the individual arguments of the\r\n   * provided calculation function.\r\n   *\r\n   * @default referenceEqualityCheck\r\n   */\r\n  equalityCheck?: EqualityFn\r\n\r\n  /**\r\n   * If provided, used to compare a newly generated output value against\r\n   * previous values in the cache. If a match is found,\r\n   * the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes\r\n   * a recalculation due to changed references, but the output is still\r\n   * effectively the same.\r\n   *\r\n   * @since 4.1.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n\r\n  /**\r\n   * The maximum size of the cache used by the selector.\r\n   * A size greater than 1 means the selector will use an\r\n   * LRU (Least Recently Used) cache, allowing for the caching of multiple\r\n   * results based on different sets of arguments.\r\n   *\r\n   * @default 1\r\n   */\r\n  maxSize?: number\r\n}\r\n\r\n/**\r\n * Creates a memoized version of a function with an optional\r\n * LRU (Least Recently Used) cache. The memoized function uses a cache to\r\n * store computed values. Depending on the `maxSize` option, it will use\r\n * either a singleton cache (for a single entry) or an\r\n * LRU cache (for multiple entries).\r\n *\r\n * **Note**: This function was previously known as `defaultMemoize`.\r\n *\r\n * @param func - The function to be memoized.\r\n * @param equalityCheckOrOptions - Either an equality check function or an options object.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/lruMemoize `lruMemoize`}\r\n *\r\n * @public\r\n */\r\nexport function lruMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  equalityCheckOrOptions?: EqualityFn | LruMemoizeOptions<ReturnType<Func>>\r\n) {\r\n  const providedOptions =\r\n    typeof equalityCheckOrOptions === 'object'\r\n      ? equalityCheckOrOptions\r\n      : { equalityCheck: equalityCheckOrOptions }\r\n\r\n  const {\r\n    equalityCheck = referenceEqualityCheck,\r\n    maxSize = 1,\r\n    resultEqualityCheck\r\n  } = providedOptions\r\n\r\n  const comparator = createCacheKeyComparator(equalityCheck)\r\n\r\n  let resultsCount = 0\r\n\r\n  const cache =\r\n    maxSize <= 1\r\n      ? createSingletonCache(comparator)\r\n      : createLruCache(maxSize, comparator)\r\n\r\n  function memoized() {\r\n    let value = cache.get(arguments) as ReturnType<Func>\r\n    if (value === NOT_FOUND) {\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      value = func.apply(null, arguments) as ReturnType<Func>\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const entries = cache.getEntries()\r\n        const matchingEntry = entries.find(entry =>\r\n          resultEqualityCheck(entry.value as ReturnType<Func>, value)\r\n        )\r\n\r\n        if (matchingEntry) {\r\n          value = matchingEntry.value as ReturnType<Func>\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n      }\r\n\r\n      cache.put(arguments, value)\r\n    }\r\n    return value\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    cache.clear()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","import { createNode, updateNode } from './proxy'\r\nimport type { Node } from './tracking'\r\n\r\nimport { createCacheKeyComparator, referenceEqualityCheck } from '../lruMemoize'\r\nimport type { AnyFunction, DefaultMemoizeFields, Simplify } from '../types'\r\nimport { createCache } from './autotracking'\r\n\r\n/**\r\n * Uses an \"auto-tracking\" approach inspired by the work of the Ember Glimmer team.\r\n * It uses a Proxy to wrap arguments and track accesses to nested fields\r\n * in your selector on first read. Later, when the selector is called with\r\n * new arguments, it identifies which accessed fields have changed and\r\n * only recalculates the result if one or more of those accessed fields have changed.\r\n * This allows it to be more precise than the shallow equality checks in `lruMemoize`.\r\n *\r\n * __Design Tradeoffs for `autotrackMemoize`:__\r\n * - Pros:\r\n *    - It is likely to avoid excess calculations and recalculate fewer times than `lruMemoize` will,\r\n *    which may also result in fewer component re-renders.\r\n * - Cons:\r\n *    - It only has a cache size of 1.\r\n *    - It is slower than `lruMemoize`, because it has to do more work. (How much slower is dependent on the number of accessed fields in a selector, number of calls, frequency of input changes, etc)\r\n *    - It can have some unexpected behavior. Because it tracks nested field accesses,\r\n *    cases where you don't access a field will not recalculate properly.\r\n *    For example, a badly-written selector like:\r\n *      ```ts\r\n *      createSelector([state => state.todos], todos => todos)\r\n *      ```\r\n *      that just immediately returns the extracted value will never update, because it doesn't see any field accesses to check.\r\n *\r\n * __Use Cases for `autotrackMemoize`:__\r\n * - It is likely best used for cases where you need to access specific nested fields\r\n * in data, and avoid recalculating if other fields in the same data objects are immutably updated.\r\n *\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelector } from 'reselect'\r\n *\r\n * const selectTodoIds = createSelector(\r\n *   [(state: RootState) => state.todos],\r\n *   (todos) => todos.map(todo => todo.id),\r\n *   { memoize: autotrackMemoize }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelectorCreator } from 'reselect'\r\n *\r\n * const createSelectorAutotrack = createSelectorCreator({ memoize: autotrackMemoize })\r\n *\r\n * const selectTodoIds = createSelectorAutotrack(\r\n *   [(state: RootState) => state.todos],\r\n *   (todos) => todos.map(todo => todo.id)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/unstable_autotrackMemoize autotrackMemoize}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function autotrackMemoize<Func extends AnyFunction>(func: Func) {\r\n  // we reference arguments instead of spreading them for performance reasons\r\n\r\n  const node: Node<Record<string, unknown>> = createNode(\r\n    [] as unknown as Record<string, unknown>\r\n  )\r\n\r\n  let lastArgs: IArguments | null = null\r\n\r\n  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck)\r\n\r\n  const cache = createCache(() => {\r\n    const res = func.apply(null, node.proxy as unknown as any[])\r\n    return res\r\n  })\r\n\r\n  function memoized() {\r\n    if (!shallowEqual(lastArgs, arguments)) {\r\n      updateNode(node, arguments as unknown as Record<string, unknown>)\r\n      lastArgs = arguments\r\n    }\r\n    return cache.value\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    return cache.clear()\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","// Original source:\r\n// - https://github.com/facebook/react/blob/0b974418c9a56f6c560298560265dcf4b65784bc/packages/react/src/ReactCache.js\r\n\r\nimport type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nclass StrongRef<T> {\r\n  constructor(private value: T) {}\r\n  deref() {\r\n    return this.value\r\n  }\r\n}\r\n\r\nconst Ref =\r\n  typeof WeakRef !== 'undefined'\r\n    ? WeakRef\r\n    : (StrongRef as unknown as typeof WeakRef)\r\n\r\nconst UNTERMINATED = 0\r\nconst TERMINATED = 1\r\n\r\ninterface UnterminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 0\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: void\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular Map where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ninterface TerminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 1\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: T\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular `Map` where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ntype CacheNode<T> = TerminatedCacheNode<T> | UnterminatedCacheNode<T>\r\n\r\nfunction createCacheNode<T>(): CacheNode<T> {\r\n  return {\r\n    s: UNTERMINATED,\r\n    v: undefined,\r\n    o: null,\r\n    p: null\r\n  }\r\n}\r\n\r\n/**\r\n * Configuration options for a memoization function utilizing `WeakMap` for\r\n * its caching mechanism.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport interface WeakMapMemoizeOptions<Result = any> {\r\n  /**\r\n   * If provided, used to compare a newly generated output value against previous values in the cache.\r\n   * If a match is found, the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes a recalculation\r\n   * due to changed references, but the output is still effectively the same.\r\n   *\r\n   * @since 5.0.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n}\r\n\r\n/**\r\n * Creates a tree of `WeakMap`-based cache nodes based on the identity of the\r\n * arguments it's been called with (in this case, the extracted values from your input selectors).\r\n * This allows `weakMapMemoize` to have an effectively infinite cache size.\r\n * Cache results will be kept in memory as long as references to the arguments still exist,\r\n * and then cleared out as the arguments are garbage-collected.\r\n *\r\n * __Design Tradeoffs for `weakMapMemoize`:__\r\n * - Pros:\r\n *   - It has an effectively infinite cache size, but you have no control over\r\n *   how long values are kept in cache as it's based on garbage collection and `WeakMap`s.\r\n * - Cons:\r\n *   - There's currently no way to alter the argument comparisons.\r\n *   They're based on strict reference equality.\r\n *   - It's roughly the same speed as `lruMemoize`, although likely a fraction slower.\r\n *\r\n * __Use Cases for `weakMapMemoize`:__\r\n * - This memoizer is likely best used for cases where you need to call the\r\n * same selector instance with many different arguments, such as a single\r\n * selector instance that is used in a list item component and called with\r\n * item IDs like:\r\n *   ```ts\r\n *   useSelector(state => selectSomeData(state, props.category))\r\n *   ```\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { createSelector, weakMapMemoize } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   items: { id: number; category: string; name: string }[]\r\n * }\r\n *\r\n * const selectItemsByCategory = createSelector(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category),\r\n *   {\r\n *     memoize: weakMapMemoize,\r\n *     argsMemoize: weakMapMemoize\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { createSelectorCreator, weakMapMemoize } from 'reselect'\r\n *\r\n * const createSelectorWeakMap = createSelectorCreator({ memoize: weakMapMemoize, argsMemoize: weakMapMemoize })\r\n *\r\n * const selectItemsByCategory = createSelectorWeakMap(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/weakMapMemoize `weakMapMemoize`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function weakMapMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  options: WeakMapMemoizeOptions<ReturnType<Func>> = {}\r\n) {\r\n  let fnNode = createCacheNode()\r\n  const { resultEqualityCheck } = options\r\n\r\n  let lastResult: WeakRef<object> | undefined\r\n\r\n  let resultsCount = 0\r\n\r\n  function memoized() {\r\n    let cacheNode = fnNode\r\n    const { length } = arguments\r\n    for (let i = 0, l = length; i < l; i++) {\r\n      const arg = arguments[i]\r\n      if (\r\n        typeof arg === 'function' ||\r\n        (typeof arg === 'object' && arg !== null)\r\n      ) {\r\n        // Objects go into a WeakMap\r\n        let objectCache = cacheNode.o\r\n        if (objectCache === null) {\r\n          cacheNode.o = objectCache = new WeakMap()\r\n        }\r\n        const objectNode = objectCache.get(arg)\r\n        if (objectNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          objectCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = objectNode\r\n        }\r\n      } else {\r\n        // Primitives go into a regular Map\r\n        let primitiveCache = cacheNode.p\r\n        if (primitiveCache === null) {\r\n          cacheNode.p = primitiveCache = new Map()\r\n        }\r\n        const primitiveNode = primitiveCache.get(arg)\r\n        if (primitiveNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          primitiveCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = primitiveNode\r\n        }\r\n      }\r\n    }\r\n\r\n    const terminatedNode = cacheNode as unknown as TerminatedCacheNode<any>\r\n\r\n    let result\r\n\r\n    if (cacheNode.s === TERMINATED) {\r\n      result = cacheNode.v\r\n    } else {\r\n      // Allow errors to propagate\r\n      result = func.apply(null, arguments as unknown as any[])\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const lastResultValue = lastResult?.deref?.() ?? lastResult\r\n\r\n        if (\r\n          lastResultValue != null &&\r\n          resultEqualityCheck(lastResultValue as ReturnType<Func>, result)\r\n        ) {\r\n          result = lastResultValue\r\n\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n\r\n        const needsWeakRef =\r\n          (typeof result === 'object' && result !== null) ||\r\n          typeof result === 'function'\r\n\r\n        lastResult = needsWeakRef ? new Ref(result) : result\r\n      }\r\n    }\r\n\r\n    terminatedNode.s = TERMINATED\r\n\r\n    terminatedNode.v = result\r\n    return result\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    fnNode = createCacheNode()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","import { weakMapMemoize } from './weakMapMemoize'\r\n\r\nimport type {\r\n  Combiner,\r\n  CreateSelectorOptions,\r\n  DropFirstParameter,\r\n  ExtractMemoizerFields,\r\n  GetParamsFromSelectors,\r\n  GetStateFromSelectors,\r\n  InterruptRecursion,\r\n  OutputSelector,\r\n  Selector,\r\n  SelectorArray,\r\n  SetRequired,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\n\r\nimport {\r\n  assertIsFunction,\r\n  collectInputSelectorResults,\r\n  ensureIsArray,\r\n  getDependencies,\r\n  getDevModeChecksExecutionInfo\r\n} from './utils'\r\n\r\n/**\r\n * An instance of `createSelector`, customized with a given memoize implementation.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template StateType - The type of state that the selectors created with this selector creator will operate on.\r\n *\r\n * @public\r\n */\r\nexport interface CreateSelectorFunction<\r\n  MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  StateType = any\r\n> {\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments and a `combiner` function.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <InputSelectors extends SelectorArray<StateType>, Result>(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments, a `combiner` function and an `options` object.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions: Simplify<\r\n        CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n      >\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param inputSelectors - An array of input selectors.\r\n   * @param combiner - A function that Combines the input selectors and returns an output selector. Otherwise known as the result function.\r\n   * @param createSelectorOptions - An optional options object that allows for further customization per selector.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    inputSelectors: [...InputSelectors],\r\n    combiner: Combiner<InputSelectors, Result>,\r\n    createSelectorOptions?: Simplify<\r\n      CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    >\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of {@linkcode createSelector createSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every {@linkcode createSelector createSelector} call.\r\n   *\r\n   * @returns A pre-typed `createSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createAppSelector = createSelector.withTypes<RootState>()\r\n   *\r\n   * const selectTodoIds = createAppSelector(\r\n   *   [\r\n   *     // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *     state => state.todos\r\n   *   ],\r\n   *   todos => todos.map(({ id }) => id)\r\n   * )\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all selectors created with this selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector#defining-a-pre-typed-createselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <OverrideStateType extends StateType>() => CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction,\r\n    OverrideStateType\r\n  >\r\n}\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param options - An options object containing the `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). It also provides additional options for customizing memoization. While the `memoize` property is mandatory, the rest are optional.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator({\r\n *   memoize: customMemoize, // Function to be used to memoize `resultFunc`\r\n *   memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards\r\n *   argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments\r\n *   argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2] // Options passed to `customArgsMemoize` as the second argument onwards\r\n * })\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n *\r\n * customSelector(\r\n *   ...selectorArgs // Will be memoized by `customArgsMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-options-since-500 `createSelectorCreator`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n>(\r\n  options: Simplify<\r\n    SetRequired<\r\n      CreateSelectorOptions<\r\n        typeof weakMapMemoize,\r\n        typeof weakMapMemoize,\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >,\r\n      'memoize'\r\n    >\r\n  >\r\n): CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param memoize - The `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator(customMemoize, // Function to be used to memoize `resultFunc`\r\n *   option1, // Will be passed as second argument to `customMemoize`\r\n *   option2, // Will be passed as third argument to `customMemoize`\r\n *   option3 // Will be passed as fourth argument to `customMemoize`\r\n * )\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-memoize-and-memoizeoptions `createSelectorCreator`}\r\n *\r\n * @public\r\n */\r\nexport function createSelectorCreator<MemoizeFunction extends UnknownMemoizer>(\r\n  memoize: MemoizeFunction,\r\n  ...memoizeOptionsFromArgs: DropFirstParameter<MemoizeFunction>\r\n): CreateSelectorFunction<MemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization\r\n * function and options for customizing memoization behavior.\r\n *\r\n * @param memoizeOrOptions - Either A `memoize` function or an `options` object containing the `memoize` function.\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template MemoizeOrOptions - The type of the first argument. It can either be a `memoize` function or an `options` object containing the `memoize` function.\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer,\r\n  MemoizeOrOptions extends\r\n    | MemoizeFunction\r\n    | SetRequired<\r\n        CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n        'memoize'\r\n      >\r\n>(\r\n  memoizeOrOptions: MemoizeOrOptions,\r\n  ...memoizeOptionsFromArgs: MemoizeOrOptions extends SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  >\r\n    ? never\r\n    : DropFirstParameter<MemoizeFunction>\r\n) {\r\n  /** options initially passed into `createSelectorCreator`. */\r\n  const createSelectorCreatorOptions: SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  > = typeof memoizeOrOptions === 'function'\r\n    ? {\r\n        memoize: memoizeOrOptions as MemoizeFunction,\r\n        memoizeOptions: memoizeOptionsFromArgs\r\n      }\r\n    : memoizeOrOptions\r\n\r\n  const createSelector = <\r\n    InputSelectors extends SelectorArray,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: [...InputSelectors],\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions?: CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    ]\r\n  ) => {\r\n    let recomputations = 0\r\n    let dependencyRecomputations = 0\r\n    let lastResult: Result\r\n\r\n    // Due to the intricacies of rest params, we can't do an optional arg after `...createSelectorArgs`.\r\n    // So, start by declaring the default value here.\r\n    // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\r\n    let directlyPassedOptions: CreateSelectorOptions<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    > = {}\r\n\r\n    // Normally, the result func or \"combiner\" is the last arg\r\n    let resultFunc = createSelectorArgs.pop() as\r\n      | Combiner<InputSelectors, Result>\r\n      | CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n\r\n    // If the result func is actually an _object_, assume it's our options object\r\n    if (typeof resultFunc === 'object') {\r\n      directlyPassedOptions = resultFunc\r\n      // and pop the real result func off\r\n      resultFunc = createSelectorArgs.pop() as Combiner<InputSelectors, Result>\r\n    }\r\n\r\n    assertIsFunction(\r\n      resultFunc,\r\n      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\r\n    )\r\n\r\n    // Determine which set of options we're using. Prefer options passed directly,\r\n    // but fall back to options given to `createSelectorCreator`.\r\n    const combinedOptions = {\r\n      ...createSelectorCreatorOptions,\r\n      ...directlyPassedOptions\r\n    }\r\n\r\n    const {\r\n      memoize,\r\n      memoizeOptions = [],\r\n      argsMemoize = weakMapMemoize,\r\n      argsMemoizeOptions = [],\r\n      devModeChecks = {}\r\n    } = combinedOptions\r\n\r\n    // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\r\n    // is an array. In most libs I've looked at, it's an equality function or options object.\r\n    // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\r\n    // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\r\n    // we wrap it in an array so we can apply it.\r\n    const finalMemoizeOptions = ensureIsArray(memoizeOptions)\r\n    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions)\r\n    const dependencies = getDependencies(createSelectorArgs) as InputSelectors\r\n\r\n    const memoizedResultFunc = memoize(function recomputationWrapper() {\r\n      recomputations++\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      return (resultFunc as Combiner<InputSelectors, Result>).apply(\r\n        null,\r\n        arguments as unknown as Parameters<Combiner<InputSelectors, Result>>\r\n      )\r\n    }, ...finalMemoizeOptions) as Combiner<InputSelectors, Result> &\r\n      ExtractMemoizerFields<OverrideMemoizeFunction>\r\n\r\n    let firstRun = true\r\n\r\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\r\n    const selector = argsMemoize(function dependenciesChecker() {\r\n      dependencyRecomputations++\r\n      /** Return values of input selectors which the `resultFunc` takes as arguments. */\r\n      const inputSelectorResults = collectInputSelectorResults(\r\n        dependencies,\r\n        arguments\r\n      )\r\n\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      lastResult = memoizedResultFunc.apply(null, inputSelectorResults)\r\n\r\n      if (process.env.NODE_ENV !== 'production') {\r\n        const { identityFunctionCheck, inputStabilityCheck } =\r\n          getDevModeChecksExecutionInfo(firstRun, devModeChecks)\r\n        if (identityFunctionCheck.shouldRun) {\r\n          identityFunctionCheck.run(\r\n            resultFunc as Combiner<InputSelectors, Result>,\r\n            inputSelectorResults,\r\n            lastResult\r\n          )\r\n        }\r\n\r\n        if (inputStabilityCheck.shouldRun) {\r\n          // make a second copy of the params, to check if we got the same results\r\n          const inputSelectorResultsCopy = collectInputSelectorResults(\r\n            dependencies,\r\n            arguments\r\n          )\r\n\r\n          inputStabilityCheck.run(\r\n            { inputSelectorResults, inputSelectorResultsCopy },\r\n            { memoize, memoizeOptions: finalMemoizeOptions },\r\n            arguments\r\n          )\r\n        }\r\n\r\n        if (firstRun) firstRun = false\r\n      }\r\n\r\n      return lastResult\r\n    }, ...finalArgsMemoizeOptions) as unknown as Selector<\r\n      GetStateFromSelectors<InputSelectors>,\r\n      Result,\r\n      GetParamsFromSelectors<InputSelectors>\r\n    > &\r\n      ExtractMemoizerFields<OverrideArgsMemoizeFunction>\r\n\r\n    return Object.assign(selector, {\r\n      resultFunc,\r\n      memoizedResultFunc,\r\n      dependencies,\r\n      dependencyRecomputations: () => dependencyRecomputations,\r\n      resetDependencyRecomputations: () => {\r\n        dependencyRecomputations = 0\r\n      },\r\n      lastResult: () => lastResult,\r\n      recomputations: () => recomputations,\r\n      resetRecomputations: () => {\r\n        recomputations = 0\r\n      },\r\n      memoize,\r\n      argsMemoize\r\n    }) as OutputSelector<\r\n      InputSelectors,\r\n      Result,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    >\r\n  }\r\n\r\n  Object.assign(createSelector, {\r\n    withTypes: () => createSelector\r\n  })\r\n\r\n  return createSelector as CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  >\r\n}\r\n\r\n/**\r\n * Accepts one or more \"input selectors\" (either as separate arguments or a single array),\r\n * a single \"result function\" / \"combiner\", and an optional options object, and\r\n * generates a memoized selector function.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelector `createSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createSelector =\r\n  /* #__PURE__ */ createSelectorCreator(weakMapMemoize)\r\n","import { createSelector } from './createSelectorCreator'\r\n\r\nimport type { CreateSelectorFunction } from './createSelectorCreator'\r\nimport type {\r\n  InterruptRecursion,\r\n  ObjectValuesToTuple,\r\n  OutputSelector,\r\n  Selector,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\nimport { assertIsObject } from './utils'\r\nimport type { weakMapMemoize } from './weakMapMemoize'\r\n\r\n/**\r\n * Represents a mapping of selectors to their return types.\r\n *\r\n * @template TObject - An object type where each property is a selector function.\r\n *\r\n * @public\r\n */\r\nexport type SelectorResultsMap<TObject extends SelectorsObject> = {\r\n  [Key in keyof TObject]: ReturnType<TObject[Key]>\r\n}\r\n\r\n/**\r\n * Represents a mapping of selectors for each key in a given root state.\r\n *\r\n * This type is a utility that takes a root state object type and\r\n * generates a corresponding set of selectors. Each selector is associated\r\n * with a key in the root state, allowing for the selection\r\n * of specific parts of the state.\r\n *\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type RootStateSelectors<RootState = any> = {\r\n  [Key in keyof RootState]: Selector<RootState, RootState[Key], []>\r\n}\r\n\r\n/**\r\n * @deprecated Please use {@linkcode StructuredSelectorCreator.withTypes createStructuredSelector.withTypes<RootState>()} instead. This type will be removed in the future.\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type TypedStructuredSelectorCreator<RootState = any> =\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends RootStateSelectors<RootState> = RootStateSelectors<RootState>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ) => OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n/**\r\n * Represents an object where each property is a selector function.\r\n *\r\n * @template StateType - The type of state that all the selectors operate on.\r\n *\r\n * @public\r\n */\r\nexport type SelectorsObject<StateType = any> = Record<\r\n  string,\r\n  Selector<StateType>\r\n>\r\n\r\n/**\r\n * It provides a way to create structured selectors.\r\n * The structured selector can take multiple input selectors\r\n * and map their output to an object with specific keys.\r\n *\r\n * @template StateType - The type of state that the structured selectors created with this structured selector creator will operate on.\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport interface StructuredSelectorCreator<StateType = any> {\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends SelectorsObject<StateType>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ): OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of\r\n   * {@linkcode createStructuredSelector createStructuredSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every\r\n   * {@linkcode createStructuredSelector createStructuredSelector} call.\r\n   *\r\n   * @returns A pre-typed `createStructuredSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createStructuredSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createStructuredAppSelector =\r\n   *   createStructuredSelector.withTypes<RootState>()\r\n   *\r\n   * const structuredAppSelector = createStructuredAppSelector({\r\n   *   // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *   todos: state => state.todos,\r\n   *   alerts: state => state.alerts,\r\n   *   todoById: (state, id: number) => state.todos[id]\r\n   * })\r\n   *\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all structured selectors created with this structured selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createstructuredselector#defining-a-pre-typed-createstructuredselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <\r\n    OverrideStateType extends StateType\r\n  >() => StructuredSelectorCreator<OverrideStateType>\r\n}\r\n\r\n/**\r\n * A convenience function that simplifies returning an object\r\n * made up of selector results.\r\n *\r\n * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n * @returns A memoized structured selector.\r\n *\r\n * @example\r\n * <caption>Modern Use Case</caption>\r\n * ```ts\r\n * import { createSelector, createStructuredSelector } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   todos: {\r\n *     id: number\r\n *     completed: boolean\r\n *     title: string\r\n *     description: string\r\n *   }[]\r\n *   alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * // This:\r\n * const structuredSelector = createStructuredSelector(\r\n *   {\r\n *     todos: (state: RootState) => state.todos,\r\n *     alerts: (state: RootState) => state.alerts,\r\n *     todoById: (state: RootState, id: number) => state.todos[id]\r\n *   },\r\n *   createSelector\r\n * )\r\n *\r\n * // Is essentially the same as this:\r\n * const selector = createSelector(\r\n *   [\r\n *     (state: RootState) => state.todos,\r\n *     (state: RootState) => state.alerts,\r\n *     (state: RootState, id: number) => state.todos[id]\r\n *   ],\r\n *   (todos, alerts, todoById) => {\r\n *     return {\r\n *       todos,\r\n *       alerts,\r\n *       todoById\r\n *     }\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createStructuredSelector: StructuredSelectorCreator =\r\n  Object.assign(\r\n    <\r\n      InputSelectorsObject extends SelectorsObject,\r\n      MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n      ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n    >(\r\n      inputSelectorsObject: InputSelectorsObject,\r\n      selectorCreator: CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      > = createSelector as CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >\r\n    ) => {\r\n      assertIsObject(\r\n        inputSelectorsObject,\r\n        'createStructuredSelector expects first argument to be an object ' +\r\n          `where each property is a selector, instead received a ${typeof inputSelectorsObject}`\r\n      )\r\n      const inputSelectorKeys = Object.keys(inputSelectorsObject)\r\n      const dependencies = inputSelectorKeys.map(\r\n        key => inputSelectorsObject[key]\r\n      )\r\n      const structuredSelector = selectorCreator(\r\n        dependencies,\r\n        (...inputSelectorResults: any[]) => {\r\n          return inputSelectorResults.reduce((composition, value, index) => {\r\n            composition[inputSelectorKeys[index]] = value\r\n            return composition\r\n          }, {})\r\n        }\r\n      )\r\n      return structuredSelector\r\n    },\r\n    { withTypes: () => createStructuredSelector }\r\n  ) as StructuredSelectorCreator\r\n"],"mappings":"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","names":["createSelector"]}
Index: node_modules/reselect/package.json
===================================================================
--- node_modules/reselect/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,88 @@
+{
+  "name": "reselect",
+  "version": "5.1.1",
+  "description": "Selectors for Redux.",
+  "main": "./dist/cjs/reselect.cjs",
+  "module": "./dist/reselect.legacy-esm.js",
+  "types": "./dist/reselect.d.ts",
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "types": "./dist/reselect.d.ts",
+      "import": "./dist/reselect.mjs",
+      "default": "./dist/cjs/reselect.cjs"
+    }
+  },
+  "files": [
+    "src",
+    "dist"
+  ],
+  "sideEffects": false,
+  "bugs": {
+    "url": "https://github.com/reduxjs/reselect/issues"
+  },
+  "scripts": {
+    "build": "tsup",
+    "clean": "rimraf dist",
+    "format": "prettier --write \"{src,test}/**/*.{js,ts}\" \"docs/**/*.md\"",
+    "lint": "eslint src test",
+    "prepack": "yarn build",
+    "bench": "vitest --run bench --mode production",
+    "test": "node --expose-gc ./node_modules/vitest/dist/cli-wrapper.js --run && vitest --run --typecheck.only",
+    "test:watch": "node --expose-gc ./node_modules/vitest/dist/cli-wrapper.js --watch",
+    "test:cov": "vitest run --coverage",
+    "type-check": "vitest --run --typecheck.only",
+    "type-check:trace": "vitest --run --typecheck.only && tsc --noEmit -p typescript_test/tsconfig.json --generateTrace trace && npx @typescript/analyze-trace trace && rimraf trace",
+    "test:typescript": "tsc --noEmit -p typescript_test/tsconfig.json",
+    "docs:start": "yarn --cwd website start",
+    "docs:build": "yarn --cwd website build",
+    "docs:clear": "yarn --cwd website clear",
+    "docs:serve": "yarn --cwd website serve"
+  },
+  "keywords": [
+    "react",
+    "redux"
+  ],
+  "authors": [
+    "Lee Bannard",
+    "Robert Binna",
+    "Martijn Faassen",
+    "Philip Spitzlinger"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/reduxjs/reselect.git"
+  },
+  "license": "MIT",
+  "devDependencies": {
+    "@reduxjs/toolkit": "^2.0.1",
+    "@testing-library/react": "^14.1.2",
+    "@types/lodash": "^4.14.175",
+    "@types/react": "^18.2.38",
+    "@types/react-dom": "^18.2.17",
+    "@types/shelljs": "^0.8.11",
+    "@typescript-eslint/eslint-plugin": "^6",
+    "@typescript-eslint/eslint-plugin-tslint": "^6",
+    "@typescript-eslint/parser": "^6",
+    "@typescript/analyze-trace": "^0.10.1",
+    "eslint": "^8.0.1",
+    "eslint-plugin-react": "^7.26.1",
+    "eslint-plugin-typescript": "0.14.0",
+    "jsdom": "^23.0.0",
+    "lodash": "^4.17.21",
+    "lodash.memoize": "^4.1.2",
+    "memoize-one": "^6.0.0",
+    "micro-memoize": "^4.0.9",
+    "netlify-plugin-cache": "^1.0.3",
+    "prettier": "^2.7.1",
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0",
+    "react-redux": "^9.0.4",
+    "rimraf": "^3.0.2",
+    "shelljs": "^0.8.5",
+    "tsup": "^6.7.0",
+    "typescript": "^5.4.2",
+    "vitest": "^1.1.1"
+  },
+  "packageManager": "yarn@4.1.0"
+}
Index: node_modules/reselect/src/autotrackMemoize/autotrackMemoize.ts
===================================================================
--- node_modules/reselect/src/autotrackMemoize/autotrackMemoize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/autotrackMemoize/autotrackMemoize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,100 @@
+import { createNode, updateNode } from './proxy'
+import type { Node } from './tracking'
+
+import { createCacheKeyComparator, referenceEqualityCheck } from '../lruMemoize'
+import type { AnyFunction, DefaultMemoizeFields, Simplify } from '../types'
+import { createCache } from './autotracking'
+
+/**
+ * Uses an "auto-tracking" approach inspired by the work of the Ember Glimmer team.
+ * It uses a Proxy to wrap arguments and track accesses to nested fields
+ * in your selector on first read. Later, when the selector is called with
+ * new arguments, it identifies which accessed fields have changed and
+ * only recalculates the result if one or more of those accessed fields have changed.
+ * This allows it to be more precise than the shallow equality checks in `lruMemoize`.
+ *
+ * __Design Tradeoffs for `autotrackMemoize`:__
+ * - Pros:
+ *    - It is likely to avoid excess calculations and recalculate fewer times than `lruMemoize` will,
+ *    which may also result in fewer component re-renders.
+ * - Cons:
+ *    - It only has a cache size of 1.
+ *    - It is slower than `lruMemoize`, because it has to do more work. (How much slower is dependent on the number of accessed fields in a selector, number of calls, frequency of input changes, etc)
+ *    - It can have some unexpected behavior. Because it tracks nested field accesses,
+ *    cases where you don't access a field will not recalculate properly.
+ *    For example, a badly-written selector like:
+ *      ```ts
+ *      createSelector([state => state.todos], todos => todos)
+ *      ```
+ *      that just immediately returns the extracted value will never update, because it doesn't see any field accesses to check.
+ *
+ * __Use Cases for `autotrackMemoize`:__
+ * - It is likely best used for cases where you need to access specific nested fields
+ * in data, and avoid recalculating if other fields in the same data objects are immutably updated.
+ *
+ * @param func - The function to be memoized.
+ * @returns A memoized function with a `.clearCache()` method attached.
+ *
+ * @example
+ * <caption>Using `createSelector`</caption>
+ * ```ts
+ * import { unstable_autotrackMemoize as autotrackMemoize, createSelector } from 'reselect'
+ *
+ * const selectTodoIds = createSelector(
+ *   [(state: RootState) => state.todos],
+ *   (todos) => todos.map(todo => todo.id),
+ *   { memoize: autotrackMemoize }
+ * )
+ * ```
+ *
+ * @example
+ * <caption>Using `createSelectorCreator`</caption>
+ * ```ts
+ * import { unstable_autotrackMemoize as autotrackMemoize, createSelectorCreator } from 'reselect'
+ *
+ * const createSelectorAutotrack = createSelectorCreator({ memoize: autotrackMemoize })
+ *
+ * const selectTodoIds = createSelectorAutotrack(
+ *   [(state: RootState) => state.todos],
+ *   (todos) => todos.map(todo => todo.id)
+ * )
+ * ```
+ *
+ * @template Func - The type of the function that is memoized.
+ *
+ * @see {@link https://reselect.js.org/api/unstable_autotrackMemoize autotrackMemoize}
+ *
+ * @since 5.0.0
+ * @public
+ * @experimental
+ */
+export function autotrackMemoize<Func extends AnyFunction>(func: Func) {
+  // we reference arguments instead of spreading them for performance reasons
+
+  const node: Node<Record<string, unknown>> = createNode(
+    [] as unknown as Record<string, unknown>
+  )
+
+  let lastArgs: IArguments | null = null
+
+  const shallowEqual = createCacheKeyComparator(referenceEqualityCheck)
+
+  const cache = createCache(() => {
+    const res = func.apply(null, node.proxy as unknown as any[])
+    return res
+  })
+
+  function memoized() {
+    if (!shallowEqual(lastArgs, arguments)) {
+      updateNode(node, arguments as unknown as Record<string, unknown>)
+      lastArgs = arguments
+    }
+    return cache.value
+  }
+
+  memoized.clearCache = () => {
+    return cache.clear()
+  }
+
+  return memoized as Func & Simplify<DefaultMemoizeFields>
+}
Index: node_modules/reselect/src/autotrackMemoize/autotracking.ts
===================================================================
--- node_modules/reselect/src/autotrackMemoize/autotracking.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/autotrackMemoize/autotracking.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,159 @@
+// Original autotracking implementation source:
+// - https://gist.github.com/pzuraq/79bf862e0f8cd9521b79c4b6eccdc4f9
+// Additional references:
+// - https://www.pzuraq.com/blog/how-autotracking-works
+// - https://v5.chriskrycho.com/journal/autotracking-elegant-dx-via-cutting-edge-cs/
+import type { EqualityFn } from '../types'
+import { assertIsFunction } from '../utils'
+
+// The global revision clock. Every time state changes, the clock increments.
+export let $REVISION = 0
+
+// The current dependency tracker. Whenever we compute a cache, we create a Set
+// to track any dependencies that are used while computing. If no cache is
+// computing, then the tracker is null.
+let CURRENT_TRACKER: Set<Cell<any> | TrackingCache> | null = null
+
+// Storage represents a root value in the system - the actual state of our app.
+export class Cell<T> {
+  revision = $REVISION
+
+  _value: T
+  _lastValue: T
+  _isEqual: EqualityFn = tripleEq
+
+  constructor(initialValue: T, isEqual: EqualityFn = tripleEq) {
+    this._value = this._lastValue = initialValue
+    this._isEqual = isEqual
+  }
+
+  // Whenever a storage value is read, it'll add itself to the current tracker if
+  // one exists, entangling its state with that cache.
+  get value() {
+    CURRENT_TRACKER?.add(this)
+
+    return this._value
+  }
+
+  // Whenever a storage value is updated, we bump the global revision clock,
+  // assign the revision for this storage to the new value, _and_ we schedule a
+  // rerender. This is important, and it's what makes autotracking  _pull_
+  // based. We don't actively tell the caches which depend on the storage that
+  // anything has happened. Instead, we recompute the caches when needed.
+  set value(newValue) {
+    if (this.value === newValue) return
+
+    this._value = newValue
+    this.revision = ++$REVISION
+  }
+}
+
+function tripleEq(a: unknown, b: unknown) {
+  return a === b
+}
+
+// Caches represent derived state in the system. They are ultimately functions
+// that are memoized based on what state they use to produce their output,
+// meaning they will only rerun IFF a storage value that could affect the output
+// has changed. Otherwise, they'll return the cached value.
+export class TrackingCache {
+  _cachedValue: any
+  _cachedRevision = -1
+  _deps: any[] = []
+  hits = 0
+
+  fn: () => any
+
+  constructor(fn: () => any) {
+    this.fn = fn
+  }
+
+  clear() {
+    this._cachedValue = undefined
+    this._cachedRevision = -1
+    this._deps = []
+    this.hits = 0
+  }
+
+  get value() {
+    // When getting the value for a Cache, first we check all the dependencies of
+    // the cache to see what their current revision is. If the current revision is
+    // greater than the cached revision, then something has changed.
+    if (this.revision > this._cachedRevision) {
+      const { fn } = this
+
+      // We create a new dependency tracker for this cache. As the cache runs
+      // its function, any Storage or Cache instances which are used while
+      // computing will be added to this tracker. In the end, it will be the
+      // full list of dependencies that this Cache depends on.
+      const currentTracker = new Set<Cell<any>>()
+      const prevTracker = CURRENT_TRACKER
+
+      CURRENT_TRACKER = currentTracker
+
+      // try {
+      this._cachedValue = fn()
+      // } finally {
+      CURRENT_TRACKER = prevTracker
+      this.hits++
+      this._deps = Array.from(currentTracker)
+
+      // Set the cached revision. This is the current clock count of all the
+      // dependencies. If any dependency changes, this number will be less
+      // than the new revision.
+      this._cachedRevision = this.revision
+      // }
+    }
+
+    // If there is a current tracker, it means another Cache is computing and
+    // using this one, so we add this one to the tracker.
+    CURRENT_TRACKER?.add(this)
+
+    // Always return the cached value.
+    return this._cachedValue
+  }
+
+  get revision() {
+    // The current revision is the max of all the dependencies' revisions.
+    return Math.max(...this._deps.map(d => d.revision), 0)
+  }
+}
+
+export function getValue<T>(cell: Cell<T>): T {
+  if (!(cell instanceof Cell)) {
+    console.warn('Not a valid cell! ', cell)
+  }
+
+  return cell.value
+}
+
+type CellValue<T extends Cell<unknown>> = T extends Cell<infer U> ? U : never
+
+export function setValue<T extends Cell<unknown>>(
+  storage: T,
+  value: CellValue<T>
+): void {
+  if (!(storage instanceof Cell)) {
+    throw new TypeError(
+      'setValue must be passed a tracked store created with `createStorage`.'
+    )
+  }
+
+  storage.value = storage._lastValue = value
+}
+
+export function createCell<T = unknown>(
+  initialValue: T,
+  isEqual: EqualityFn = tripleEq
+): Cell<T> {
+  return new Cell(initialValue, isEqual)
+}
+
+export function createCache<T = unknown>(fn: () => T): TrackingCache {
+  assertIsFunction(
+    fn,
+    'the first parameter to `createCache` must be a function'
+  )
+
+  return new TrackingCache(fn)
+}
Index: node_modules/reselect/src/autotrackMemoize/proxy.ts
===================================================================
--- node_modules/reselect/src/autotrackMemoize/proxy.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/autotrackMemoize/proxy.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,230 @@
+// Original source:
+// - https://github.com/simonihmig/tracked-redux/blob/master/packages/tracked-redux/src/-private/proxy.ts
+
+import type { Node, Tag } from './tracking'
+import {
+  consumeCollection,
+  consumeTag,
+  createTag,
+  dirtyCollection,
+  dirtyTag
+} from './tracking'
+
+export const REDUX_PROXY_LABEL = Symbol()
+
+let nextId = 0
+
+const proto = Object.getPrototypeOf({})
+
+class ObjectTreeNode<T extends Record<string, unknown>> implements Node<T> {
+  proxy: T = new Proxy(this, objectProxyHandler) as unknown as T
+  tag = createTag()
+  tags = {} as Record<string, Tag>
+  children = {} as Record<string, Node>
+  collectionTag = null
+  id = nextId++
+
+  constructor(public value: T) {
+    this.value = value
+    this.tag.value = value
+  }
+}
+
+const objectProxyHandler = {
+  get(node: Node, key: string | symbol): unknown {
+    function calculateResult() {
+      const { value } = node
+
+      const childValue = Reflect.get(value, key)
+
+      if (typeof key === 'symbol') {
+        return childValue
+      }
+
+      if (key in proto) {
+        return childValue
+      }
+
+      if (typeof childValue === 'object' && childValue !== null) {
+        let childNode = node.children[key]
+
+        if (childNode === undefined) {
+          childNode = node.children[key] = createNode(childValue)
+        }
+
+        if (childNode.tag) {
+          consumeTag(childNode.tag)
+        }
+
+        return childNode.proxy
+      } else {
+        let tag = node.tags[key]
+
+        if (tag === undefined) {
+          tag = node.tags[key] = createTag()
+          tag.value = childValue
+        }
+
+        consumeTag(tag)
+
+        return childValue
+      }
+    }
+    const res = calculateResult()
+    return res
+  },
+
+  ownKeys(node: Node): ArrayLike<string | symbol> {
+    consumeCollection(node)
+    return Reflect.ownKeys(node.value)
+  },
+
+  getOwnPropertyDescriptor(
+    node: Node,
+    prop: string | symbol
+  ): PropertyDescriptor | undefined {
+    return Reflect.getOwnPropertyDescriptor(node.value, prop)
+  },
+
+  has(node: Node, prop: string | symbol): boolean {
+    return Reflect.has(node.value, prop)
+  }
+}
+
+class ArrayTreeNode<T extends Array<unknown>> implements Node<T> {
+  proxy: T = new Proxy([this], arrayProxyHandler) as unknown as T
+  tag = createTag()
+  tags = {}
+  children = {}
+  collectionTag = null
+  id = nextId++
+
+  constructor(public value: T) {
+    this.value = value
+    this.tag.value = value
+  }
+}
+
+const arrayProxyHandler = {
+  get([node]: [Node], key: string | symbol): unknown {
+    if (key === 'length') {
+      consumeCollection(node)
+    }
+
+    return objectProxyHandler.get(node, key)
+  },
+
+  ownKeys([node]: [Node]): ArrayLike<string | symbol> {
+    return objectProxyHandler.ownKeys(node)
+  },
+
+  getOwnPropertyDescriptor(
+    [node]: [Node],
+    prop: string | symbol
+  ): PropertyDescriptor | undefined {
+    return objectProxyHandler.getOwnPropertyDescriptor(node, prop)
+  },
+
+  has([node]: [Node], prop: string | symbol): boolean {
+    return objectProxyHandler.has(node, prop)
+  }
+}
+
+export function createNode<T extends Array<unknown> | Record<string, unknown>>(
+  value: T
+): Node<T> {
+  if (Array.isArray(value)) {
+    return new ArrayTreeNode(value)
+  }
+
+  return new ObjectTreeNode(value) as Node<T>
+}
+
+const keysMap = new WeakMap<
+  Array<unknown> | Record<string, unknown>,
+  Set<string>
+>()
+
+export function updateNode<T extends Array<unknown> | Record<string, unknown>>(
+  node: Node<T>,
+  newValue: T
+): void {
+  const { value, tags, children } = node
+
+  node.value = newValue
+
+  if (
+    Array.isArray(value) &&
+    Array.isArray(newValue) &&
+    value.length !== newValue.length
+  ) {
+    dirtyCollection(node)
+  } else {
+    if (value !== newValue) {
+      let oldKeysSize = 0
+      let newKeysSize = 0
+      let anyKeysAdded = false
+
+      for (const _key in value) {
+        oldKeysSize++
+      }
+
+      for (const key in newValue) {
+        newKeysSize++
+        if (!(key in value)) {
+          anyKeysAdded = true
+          break
+        }
+      }
+
+      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize
+
+      if (isDifferent) {
+        dirtyCollection(node)
+      }
+    }
+  }
+
+  for (const key in tags) {
+    const childValue = (value as Record<string, unknown>)[key]
+    const newChildValue = (newValue as Record<string, unknown>)[key]
+
+    if (childValue !== newChildValue) {
+      dirtyCollection(node)
+      dirtyTag(tags[key], newChildValue)
+    }
+
+    if (typeof newChildValue === 'object' && newChildValue !== null) {
+      delete tags[key]
+    }
+  }
+
+  for (const key in children) {
+    const childNode = children[key]
+    const newChildValue = (newValue as Record<string, unknown>)[key]
+
+    const childValue = childNode.value
+
+    if (childValue === newChildValue) {
+      continue
+    } else if (typeof newChildValue === 'object' && newChildValue !== null) {
+      updateNode(childNode, newChildValue as Record<string, unknown>)
+    } else {
+      deleteNode(childNode)
+      delete children[key]
+    }
+  }
+}
+
+function deleteNode(node: Node): void {
+  if (node.tag) {
+    dirtyTag(node.tag, null)
+  }
+  dirtyCollection(node)
+  for (const key in node.tags) {
+    dirtyTag(node.tags[key], null)
+  }
+  for (const key in node.children) {
+    deleteNode(node.children[key])
+  }
+}
Index: node_modules/reselect/src/autotrackMemoize/tracking.ts
===================================================================
--- node_modules/reselect/src/autotrackMemoize/tracking.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/autotrackMemoize/tracking.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+import type { Cell } from './autotracking'
+import {
+  getValue as consumeTag,
+  createCell as createStorage,
+  setValue
+} from './autotracking'
+
+export type Tag = Cell<unknown>
+
+const neverEq = (a: any, b: any): boolean => false
+
+export function createTag(): Tag {
+  return createStorage(null, neverEq)
+}
+export { consumeTag }
+export function dirtyTag(tag: Tag, value: any): void {
+  setValue(tag, value)
+}
+
+export interface Node<
+  T extends Array<unknown> | Record<string, unknown> =
+    | Array<unknown>
+    | Record<string, unknown>
+> {
+  collectionTag: Tag | null
+  tag: Tag | null
+  tags: Record<string, Tag>
+  children: Record<string, Node>
+  proxy: T
+  value: T
+  id: number
+}
+
+export const consumeCollection = (node: Node): void => {
+  let tag = node.collectionTag
+
+  if (tag === null) {
+    tag = node.collectionTag = createTag()
+  }
+
+  consumeTag(tag)
+}
+
+export const dirtyCollection = (node: Node): void => {
+  const tag = node.collectionTag
+
+  if (tag !== null) {
+    dirtyTag(tag, null)
+  }
+}
Index: node_modules/reselect/src/autotrackMemoize/utils.ts
===================================================================
--- node_modules/reselect/src/autotrackMemoize/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/autotrackMemoize/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+export function assert(
+  condition: any,
+  msg = 'Assertion failed!'
+): asserts condition {
+  if (!condition) {
+    console.error(msg)
+    throw new Error(msg)
+  }
+}
Index: node_modules/reselect/src/createSelectorCreator.ts
===================================================================
--- node_modules/reselect/src/createSelectorCreator.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/createSelectorCreator.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,493 @@
+import { weakMapMemoize } from './weakMapMemoize'
+
+import type {
+  Combiner,
+  CreateSelectorOptions,
+  DropFirstParameter,
+  ExtractMemoizerFields,
+  GetParamsFromSelectors,
+  GetStateFromSelectors,
+  InterruptRecursion,
+  OutputSelector,
+  Selector,
+  SelectorArray,
+  SetRequired,
+  Simplify,
+  UnknownMemoizer
+} from './types'
+
+import {
+  assertIsFunction,
+  collectInputSelectorResults,
+  ensureIsArray,
+  getDependencies,
+  getDevModeChecksExecutionInfo
+} from './utils'
+
+/**
+ * An instance of `createSelector`, customized with a given memoize implementation.
+ *
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ * @template StateType - The type of state that the selectors created with this selector creator will operate on.
+ *
+ * @public
+ */
+export interface CreateSelectorFunction<
+  MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,
+  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,
+  StateType = any
+> {
+  /**
+   * Creates a memoized selector function.
+   *
+   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments and a `combiner` function.
+   * @returns A memoized output selector.
+   *
+   * @template InputSelectors - The type of the input selectors as an array.
+   * @template Result - The return type of the `combiner` as well as the output selector.
+   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.
+   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.
+   *
+   * @see {@link https://reselect.js.org/api/createselector `createSelector`}
+   */
+  <InputSelectors extends SelectorArray<StateType>, Result>(
+    ...createSelectorArgs: [
+      ...inputSelectors: InputSelectors,
+      combiner: Combiner<InputSelectors, Result>
+    ]
+  ): OutputSelector<
+    InputSelectors,
+    Result,
+    MemoizeFunction,
+    ArgsMemoizeFunction
+  > &
+    InterruptRecursion
+
+  /**
+   * Creates a memoized selector function.
+   *
+   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments, a `combiner` function and an `options` object.
+   * @returns A memoized output selector.
+   *
+   * @template InputSelectors - The type of the input selectors as an array.
+   * @template Result - The return type of the `combiner` as well as the output selector.
+   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.
+   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.
+   *
+   * @see {@link https://reselect.js.org/api/createselector `createSelector`}
+   */
+  <
+    InputSelectors extends SelectorArray<StateType>,
+    Result,
+    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,
+    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction
+  >(
+    ...createSelectorArgs: [
+      ...inputSelectors: InputSelectors,
+      combiner: Combiner<InputSelectors, Result>,
+      createSelectorOptions: Simplify<
+        CreateSelectorOptions<
+          MemoizeFunction,
+          ArgsMemoizeFunction,
+          OverrideMemoizeFunction,
+          OverrideArgsMemoizeFunction
+        >
+      >
+    ]
+  ): OutputSelector<
+    InputSelectors,
+    Result,
+    OverrideMemoizeFunction,
+    OverrideArgsMemoizeFunction
+  > &
+    InterruptRecursion
+
+  /**
+   * Creates a memoized selector function.
+   *
+   * @param inputSelectors - An array of input selectors.
+   * @param combiner - A function that Combines the input selectors and returns an output selector. Otherwise known as the result function.
+   * @param createSelectorOptions - An optional options object that allows for further customization per selector.
+   * @returns A memoized output selector.
+   *
+   * @template InputSelectors - The type of the input selectors array.
+   * @template Result - The return type of the `combiner` as well as the output selector.
+   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.
+   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.
+   *
+   * @see {@link https://reselect.js.org/api/createselector `createSelector`}
+   */
+  <
+    InputSelectors extends SelectorArray<StateType>,
+    Result,
+    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,
+    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction
+  >(
+    inputSelectors: [...InputSelectors],
+    combiner: Combiner<InputSelectors, Result>,
+    createSelectorOptions?: Simplify<
+      CreateSelectorOptions<
+        MemoizeFunction,
+        ArgsMemoizeFunction,
+        OverrideMemoizeFunction,
+        OverrideArgsMemoizeFunction
+      >
+    >
+  ): OutputSelector<
+    InputSelectors,
+    Result,
+    OverrideMemoizeFunction,
+    OverrideArgsMemoizeFunction
+  > &
+    InterruptRecursion
+
+  /**
+   * Creates a "pre-typed" version of {@linkcode createSelector createSelector}
+   * where the `state` type is predefined.
+   *
+   * This allows you to set the `state` type once, eliminating the need to
+   * specify it with every {@linkcode createSelector createSelector} call.
+   *
+   * @returns A pre-typed `createSelector` with the state type already defined.
+   *
+   * @example
+   * ```ts
+   * import { createSelector } from 'reselect'
+   *
+   * export interface RootState {
+   *   todos: { id: number; completed: boolean }[]
+   *   alerts: { id: number; read: boolean }[]
+   * }
+   *
+   * export const createAppSelector = createSelector.withTypes<RootState>()
+   *
+   * const selectTodoIds = createAppSelector(
+   *   [
+   *     // Type of `state` is set to `RootState`, no need to manually set the type
+   *     state => state.todos
+   *   ],
+   *   todos => todos.map(({ id }) => id)
+   * )
+   * ```
+   * @template OverrideStateType - The specific type of state used by all selectors created with this selector creator.
+   *
+   * @see {@link https://reselect.js.org/api/createselector#defining-a-pre-typed-createselector `createSelector.withTypes`}
+   *
+   * @since 5.1.0
+   */
+  withTypes: <OverrideStateType extends StateType>() => CreateSelectorFunction<
+    MemoizeFunction,
+    ArgsMemoizeFunction,
+    OverrideStateType
+  >
+}
+
+/**
+ * Creates a selector creator function with the specified memoization function
+ * and options for customizing memoization behavior.
+ *
+ * @param options - An options object containing the `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). It also provides additional options for customizing memoization. While the `memoize` property is mandatory, the rest are optional.
+ * @returns A customized `createSelector` function.
+ *
+ * @example
+ * ```ts
+ * const customCreateSelector = createSelectorCreator({
+ *   memoize: customMemoize, // Function to be used to memoize `resultFunc`
+ *   memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards
+ *   argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments
+ *   argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2] // Options passed to `customArgsMemoize` as the second argument onwards
+ * })
+ *
+ * const customSelector = customCreateSelector(
+ *   [inputSelector1, inputSelector2],
+ *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`
+ * )
+ *
+ * customSelector(
+ *   ...selectorArgs // Will be memoized by `customArgsMemoize`
+ * )
+ * ```
+ *
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ *
+ * @see {@link https://reselect.js.org/api/createSelectorCreator#using-options-since-500 `createSelectorCreator`}
+ *
+ * @since 5.0.0
+ * @public
+ */
+export function createSelectorCreator<
+  MemoizeFunction extends UnknownMemoizer,
+  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize
+>(
+  options: Simplify<
+    SetRequired<
+      CreateSelectorOptions<
+        typeof weakMapMemoize,
+        typeof weakMapMemoize,
+        MemoizeFunction,
+        ArgsMemoizeFunction
+      >,
+      'memoize'
+    >
+  >
+): CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>
+
+/**
+ * Creates a selector creator function with the specified memoization function
+ * and options for customizing memoization behavior.
+ *
+ * @param memoize - The `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.
+ * @returns A customized `createSelector` function.
+ *
+ * @example
+ * ```ts
+ * const customCreateSelector = createSelectorCreator(customMemoize, // Function to be used to memoize `resultFunc`
+ *   option1, // Will be passed as second argument to `customMemoize`
+ *   option2, // Will be passed as third argument to `customMemoize`
+ *   option3 // Will be passed as fourth argument to `customMemoize`
+ * )
+ *
+ * const customSelector = customCreateSelector(
+ *   [inputSelector1, inputSelector2],
+ *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`
+ * )
+ * ```
+ *
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ *
+ * @see {@link https://reselect.js.org/api/createSelectorCreator#using-memoize-and-memoizeoptions `createSelectorCreator`}
+ *
+ * @public
+ */
+export function createSelectorCreator<MemoizeFunction extends UnknownMemoizer>(
+  memoize: MemoizeFunction,
+  ...memoizeOptionsFromArgs: DropFirstParameter<MemoizeFunction>
+): CreateSelectorFunction<MemoizeFunction>
+
+/**
+ * Creates a selector creator function with the specified memoization
+ * function and options for customizing memoization behavior.
+ *
+ * @param memoizeOrOptions - Either A `memoize` function or an `options` object containing the `memoize` function.
+ * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.
+ * @returns A customized `createSelector` function.
+ *
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ * @template MemoizeOrOptions - The type of the first argument. It can either be a `memoize` function or an `options` object containing the `memoize` function.
+ */
+export function createSelectorCreator<
+  MemoizeFunction extends UnknownMemoizer,
+  ArgsMemoizeFunction extends UnknownMemoizer,
+  MemoizeOrOptions extends
+    | MemoizeFunction
+    | SetRequired<
+        CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,
+        'memoize'
+      >
+>(
+  memoizeOrOptions: MemoizeOrOptions,
+  ...memoizeOptionsFromArgs: MemoizeOrOptions extends SetRequired<
+    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,
+    'memoize'
+  >
+    ? never
+    : DropFirstParameter<MemoizeFunction>
+) {
+  /** options initially passed into `createSelectorCreator`. */
+  const createSelectorCreatorOptions: SetRequired<
+    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,
+    'memoize'
+  > = typeof memoizeOrOptions === 'function'
+    ? {
+        memoize: memoizeOrOptions as MemoizeFunction,
+        memoizeOptions: memoizeOptionsFromArgs
+      }
+    : memoizeOrOptions
+
+  const createSelector = <
+    InputSelectors extends SelectorArray,
+    Result,
+    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,
+    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction
+  >(
+    ...createSelectorArgs: [
+      ...inputSelectors: [...InputSelectors],
+      combiner: Combiner<InputSelectors, Result>,
+      createSelectorOptions?: CreateSelectorOptions<
+        MemoizeFunction,
+        ArgsMemoizeFunction,
+        OverrideMemoizeFunction,
+        OverrideArgsMemoizeFunction
+      >
+    ]
+  ) => {
+    let recomputations = 0
+    let dependencyRecomputations = 0
+    let lastResult: Result
+
+    // Due to the intricacies of rest params, we can't do an optional arg after `...createSelectorArgs`.
+    // So, start by declaring the default value here.
+    // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)
+    let directlyPassedOptions: CreateSelectorOptions<
+      MemoizeFunction,
+      ArgsMemoizeFunction,
+      OverrideMemoizeFunction,
+      OverrideArgsMemoizeFunction
+    > = {}
+
+    // Normally, the result func or "combiner" is the last arg
+    let resultFunc = createSelectorArgs.pop() as
+      | Combiner<InputSelectors, Result>
+      | CreateSelectorOptions<
+          MemoizeFunction,
+          ArgsMemoizeFunction,
+          OverrideMemoizeFunction,
+          OverrideArgsMemoizeFunction
+        >
+
+    // If the result func is actually an _object_, assume it's our options object
+    if (typeof resultFunc === 'object') {
+      directlyPassedOptions = resultFunc
+      // and pop the real result func off
+      resultFunc = createSelectorArgs.pop() as Combiner<InputSelectors, Result>
+    }
+
+    assertIsFunction(
+      resultFunc,
+      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`
+    )
+
+    // Determine which set of options we're using. Prefer options passed directly,
+    // but fall back to options given to `createSelectorCreator`.
+    const combinedOptions = {
+      ...createSelectorCreatorOptions,
+      ...directlyPassedOptions
+    }
+
+    const {
+      memoize,
+      memoizeOptions = [],
+      argsMemoize = weakMapMemoize,
+      argsMemoizeOptions = [],
+      devModeChecks = {}
+    } = combinedOptions
+
+    // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer
+    // is an array. In most libs I've looked at, it's an equality function or options object.
+    // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full
+    // user-provided array of options. Otherwise, it must be just the _first_ arg, and so
+    // we wrap it in an array so we can apply it.
+    const finalMemoizeOptions = ensureIsArray(memoizeOptions)
+    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions)
+    const dependencies = getDependencies(createSelectorArgs) as InputSelectors
+
+    const memoizedResultFunc = memoize(function recomputationWrapper() {
+      recomputations++
+      // apply arguments instead of spreading for performance.
+      // @ts-ignore
+      return (resultFunc as Combiner<InputSelectors, Result>).apply(
+        null,
+        arguments as unknown as Parameters<Combiner<InputSelectors, Result>>
+      )
+    }, ...finalMemoizeOptions) as Combiner<InputSelectors, Result> &
+      ExtractMemoizerFields<OverrideMemoizeFunction>
+
+    let firstRun = true
+
+    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.
+    const selector = argsMemoize(function dependenciesChecker() {
+      dependencyRecomputations++
+      /** Return values of input selectors which the `resultFunc` takes as arguments. */
+      const inputSelectorResults = collectInputSelectorResults(
+        dependencies,
+        arguments
+      )
+
+      // apply arguments instead of spreading for performance.
+      // @ts-ignore
+      lastResult = memoizedResultFunc.apply(null, inputSelectorResults)
+
+      if (process.env.NODE_ENV !== 'production') {
+        const { identityFunctionCheck, inputStabilityCheck } =
+          getDevModeChecksExecutionInfo(firstRun, devModeChecks)
+        if (identityFunctionCheck.shouldRun) {
+          identityFunctionCheck.run(
+            resultFunc as Combiner<InputSelectors, Result>,
+            inputSelectorResults,
+            lastResult
+          )
+        }
+
+        if (inputStabilityCheck.shouldRun) {
+          // make a second copy of the params, to check if we got the same results
+          const inputSelectorResultsCopy = collectInputSelectorResults(
+            dependencies,
+            arguments
+          )
+
+          inputStabilityCheck.run(
+            { inputSelectorResults, inputSelectorResultsCopy },
+            { memoize, memoizeOptions: finalMemoizeOptions },
+            arguments
+          )
+        }
+
+        if (firstRun) firstRun = false
+      }
+
+      return lastResult
+    }, ...finalArgsMemoizeOptions) as unknown as Selector<
+      GetStateFromSelectors<InputSelectors>,
+      Result,
+      GetParamsFromSelectors<InputSelectors>
+    > &
+      ExtractMemoizerFields<OverrideArgsMemoizeFunction>
+
+    return Object.assign(selector, {
+      resultFunc,
+      memoizedResultFunc,
+      dependencies,
+      dependencyRecomputations: () => dependencyRecomputations,
+      resetDependencyRecomputations: () => {
+        dependencyRecomputations = 0
+      },
+      lastResult: () => lastResult,
+      recomputations: () => recomputations,
+      resetRecomputations: () => {
+        recomputations = 0
+      },
+      memoize,
+      argsMemoize
+    }) as OutputSelector<
+      InputSelectors,
+      Result,
+      OverrideMemoizeFunction,
+      OverrideArgsMemoizeFunction
+    >
+  }
+
+  Object.assign(createSelector, {
+    withTypes: () => createSelector
+  })
+
+  return createSelector as CreateSelectorFunction<
+    MemoizeFunction,
+    ArgsMemoizeFunction
+  >
+}
+
+/**
+ * Accepts one or more "input selectors" (either as separate arguments or a single array),
+ * a single "result function" / "combiner", and an optional options object, and
+ * generates a memoized selector function.
+ *
+ * @see {@link https://reselect.js.org/api/createSelector `createSelector`}
+ *
+ * @public
+ */
+export const createSelector =
+  /* #__PURE__ */ createSelectorCreator(weakMapMemoize)
Index: node_modules/reselect/src/createStructuredSelector.ts
===================================================================
--- node_modules/reselect/src/createStructuredSelector.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/createStructuredSelector.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,454 @@
+import { createSelector } from './createSelectorCreator'
+
+import type { CreateSelectorFunction } from './createSelectorCreator'
+import type {
+  InterruptRecursion,
+  ObjectValuesToTuple,
+  OutputSelector,
+  Selector,
+  Simplify,
+  UnknownMemoizer
+} from './types'
+import { assertIsObject } from './utils'
+import type { weakMapMemoize } from './weakMapMemoize'
+
+/**
+ * Represents a mapping of selectors to their return types.
+ *
+ * @template TObject - An object type where each property is a selector function.
+ *
+ * @public
+ */
+export type SelectorResultsMap<TObject extends SelectorsObject> = {
+  [Key in keyof TObject]: ReturnType<TObject[Key]>
+}
+
+/**
+ * Represents a mapping of selectors for each key in a given root state.
+ *
+ * This type is a utility that takes a root state object type and
+ * generates a corresponding set of selectors. Each selector is associated
+ * with a key in the root state, allowing for the selection
+ * of specific parts of the state.
+ *
+ * @template RootState - The type of the root state object.
+ *
+ * @since 5.0.0
+ * @public
+ */
+export type RootStateSelectors<RootState = any> = {
+  [Key in keyof RootState]: Selector<RootState, RootState[Key], []>
+}
+
+/**
+ * @deprecated Please use {@linkcode StructuredSelectorCreator.withTypes createStructuredSelector.withTypes<RootState>()} instead. This type will be removed in the future.
+ * @template RootState - The type of the root state object.
+ *
+ * @since 5.0.0
+ * @public
+ */
+export type TypedStructuredSelectorCreator<RootState = any> =
+  /**
+   * A convenience function that simplifies returning an object
+   * made up of selector results.
+   *
+   * @param inputSelectorsObject - A key value pair consisting of input selectors.
+   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.
+   * @returns A memoized structured selector.
+   *
+   * @example
+   * <caption>Modern Use Case</caption>
+   * ```ts
+   * import { createSelector, createStructuredSelector } from 'reselect'
+   *
+   * interface RootState {
+   *   todos: {
+   *     id: number
+   *     completed: boolean
+   *     title: string
+   *     description: string
+   *   }[]
+   *   alerts: { id: number; read: boolean }[]
+   * }
+   *
+   * // This:
+   * const structuredSelector = createStructuredSelector(
+   *   {
+   *     todos: (state: RootState) => state.todos,
+   *     alerts: (state: RootState) => state.alerts,
+   *     todoById: (state: RootState, id: number) => state.todos[id]
+   *   },
+   *   createSelector
+   * )
+   *
+   * // Is essentially the same as this:
+   * const selector = createSelector(
+   *   [
+   *     (state: RootState) => state.todos,
+   *     (state: RootState) => state.alerts,
+   *     (state: RootState, id: number) => state.todos[id]
+   *   ],
+   *   (todos, alerts, todoById) => {
+   *     return {
+   *       todos,
+   *       alerts,
+   *       todoById
+   *     }
+   *   }
+   * )
+   * ```
+   *
+   * @example
+   * <caption>In your component:</caption>
+   * ```tsx
+   * import type { RootState } from 'createStructuredSelector/modernUseCase'
+   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'
+   * import type { FC } from 'react'
+   * import { useSelector } from 'react-redux'
+   *
+   * interface Props {
+   *   id: number
+   * }
+   *
+   * const MyComponent: FC<Props> = ({ id }) => {
+   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>
+   *     structuredSelector(state, id)
+   *   )
+   *
+   *   return (
+   *     <div>
+   *       Next to do is:
+   *       <h2>{todoById.title}</h2>
+   *       <p>Description: {todoById.description}</p>
+   *       <ul>
+   *         <h3>All other to dos:</h3>
+   *         {todos.map(todo => (
+   *           <li key={todo.id}>{todo.title}</li>
+   *         ))}
+   *       </ul>
+   *     </div>
+   *   )
+   * }
+   * ```
+   *
+   * @example
+   * <caption>Simple Use Case</caption>
+   * ```ts
+   * const selectA = state => state.a
+   * const selectB = state => state.b
+   *
+   * // The result function in the following selector
+   * // is simply building an object from the input selectors
+   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({
+   *   a,
+   *   b
+   * }))
+   *
+   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }
+   * ```
+   *
+   * @template InputSelectorsObject - The shape of the input selectors object.
+   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.
+   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.
+   *
+   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}
+   */
+  <
+    InputSelectorsObject extends RootStateSelectors<RootState> = RootStateSelectors<RootState>,
+    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,
+    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize
+  >(
+    inputSelectorsObject: InputSelectorsObject,
+    selectorCreator?: CreateSelectorFunction<
+      MemoizeFunction,
+      ArgsMemoizeFunction
+    >
+  ) => OutputSelector<
+    ObjectValuesToTuple<InputSelectorsObject>,
+    Simplify<SelectorResultsMap<InputSelectorsObject>>,
+    MemoizeFunction,
+    ArgsMemoizeFunction
+  > &
+    InterruptRecursion
+
+/**
+ * Represents an object where each property is a selector function.
+ *
+ * @template StateType - The type of state that all the selectors operate on.
+ *
+ * @public
+ */
+export type SelectorsObject<StateType = any> = Record<
+  string,
+  Selector<StateType>
+>
+
+/**
+ * It provides a way to create structured selectors.
+ * The structured selector can take multiple input selectors
+ * and map their output to an object with specific keys.
+ *
+ * @template StateType - The type of state that the structured selectors created with this structured selector creator will operate on.
+ *
+ * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}
+ *
+ * @public
+ */
+export interface StructuredSelectorCreator<StateType = any> {
+  /**
+   * A convenience function that simplifies returning an object
+   * made up of selector results.
+   *
+   * @param inputSelectorsObject - A key value pair consisting of input selectors.
+   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.
+   * @returns A memoized structured selector.
+   *
+   * @example
+   * <caption>Modern Use Case</caption>
+   * ```ts
+   * import { createSelector, createStructuredSelector } from 'reselect'
+   *
+   * interface RootState {
+   *   todos: {
+   *     id: number
+   *     completed: boolean
+   *     title: string
+   *     description: string
+   *   }[]
+   *   alerts: { id: number; read: boolean }[]
+   * }
+   *
+   * // This:
+   * const structuredSelector = createStructuredSelector(
+   *   {
+   *     todos: (state: RootState) => state.todos,
+   *     alerts: (state: RootState) => state.alerts,
+   *     todoById: (state: RootState, id: number) => state.todos[id]
+   *   },
+   *   createSelector
+   * )
+   *
+   * // Is essentially the same as this:
+   * const selector = createSelector(
+   *   [
+   *     (state: RootState) => state.todos,
+   *     (state: RootState) => state.alerts,
+   *     (state: RootState, id: number) => state.todos[id]
+   *   ],
+   *   (todos, alerts, todoById) => {
+   *     return {
+   *       todos,
+   *       alerts,
+   *       todoById
+   *     }
+   *   }
+   * )
+   * ```
+   *
+   * @example
+   * <caption>In your component:</caption>
+   * ```tsx
+   * import type { RootState } from 'createStructuredSelector/modernUseCase'
+   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'
+   * import type { FC } from 'react'
+   * import { useSelector } from 'react-redux'
+   *
+   * interface Props {
+   *   id: number
+   * }
+   *
+   * const MyComponent: FC<Props> = ({ id }) => {
+   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>
+   *     structuredSelector(state, id)
+   *   )
+   *
+   *   return (
+   *     <div>
+   *       Next to do is:
+   *       <h2>{todoById.title}</h2>
+   *       <p>Description: {todoById.description}</p>
+   *       <ul>
+   *         <h3>All other to dos:</h3>
+   *         {todos.map(todo => (
+   *           <li key={todo.id}>{todo.title}</li>
+   *         ))}
+   *       </ul>
+   *     </div>
+   *   )
+   * }
+   * ```
+   *
+   * @example
+   * <caption>Simple Use Case</caption>
+   * ```ts
+   * const selectA = state => state.a
+   * const selectB = state => state.b
+   *
+   * // The result function in the following selector
+   * // is simply building an object from the input selectors
+   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({
+   *   a,
+   *   b
+   * }))
+   *
+   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }
+   * ```
+   *
+   * @template InputSelectorsObject - The shape of the input selectors object.
+   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.
+   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.
+   *
+   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}
+   */
+  <
+    InputSelectorsObject extends SelectorsObject<StateType>,
+    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,
+    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize
+  >(
+    inputSelectorsObject: InputSelectorsObject,
+    selectorCreator?: CreateSelectorFunction<
+      MemoizeFunction,
+      ArgsMemoizeFunction
+    >
+  ): OutputSelector<
+    ObjectValuesToTuple<InputSelectorsObject>,
+    Simplify<SelectorResultsMap<InputSelectorsObject>>,
+    MemoizeFunction,
+    ArgsMemoizeFunction
+  > &
+    InterruptRecursion
+
+  /**
+   * Creates a "pre-typed" version of
+   * {@linkcode createStructuredSelector createStructuredSelector}
+   * where the `state` type is predefined.
+   *
+   * This allows you to set the `state` type once, eliminating the need to
+   * specify it with every
+   * {@linkcode createStructuredSelector createStructuredSelector} call.
+   *
+   * @returns A pre-typed `createStructuredSelector` with the state type already defined.
+   *
+   * @example
+   * ```ts
+   * import { createStructuredSelector } from 'reselect'
+   *
+   * export interface RootState {
+   *   todos: { id: number; completed: boolean }[]
+   *   alerts: { id: number; read: boolean }[]
+   * }
+   *
+   * export const createStructuredAppSelector =
+   *   createStructuredSelector.withTypes<RootState>()
+   *
+   * const structuredAppSelector = createStructuredAppSelector({
+   *   // Type of `state` is set to `RootState`, no need to manually set the type
+   *   todos: state => state.todos,
+   *   alerts: state => state.alerts,
+   *   todoById: (state, id: number) => state.todos[id]
+   * })
+   *
+   * ```
+   * @template OverrideStateType - The specific type of state used by all structured selectors created with this structured selector creator.
+   *
+   * @see {@link https://reselect.js.org/api/createstructuredselector#defining-a-pre-typed-createstructuredselector `createSelector.withTypes`}
+   *
+   * @since 5.1.0
+   */
+  withTypes: <
+    OverrideStateType extends StateType
+  >() => StructuredSelectorCreator<OverrideStateType>
+}
+
+/**
+ * A convenience function that simplifies returning an object
+ * made up of selector results.
+ *
+ * @param inputSelectorsObject - A key value pair consisting of input selectors.
+ * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.
+ * @returns A memoized structured selector.
+ *
+ * @example
+ * <caption>Modern Use Case</caption>
+ * ```ts
+ * import { createSelector, createStructuredSelector } from 'reselect'
+ *
+ * interface RootState {
+ *   todos: {
+ *     id: number
+ *     completed: boolean
+ *     title: string
+ *     description: string
+ *   }[]
+ *   alerts: { id: number; read: boolean }[]
+ * }
+ *
+ * // This:
+ * const structuredSelector = createStructuredSelector(
+ *   {
+ *     todos: (state: RootState) => state.todos,
+ *     alerts: (state: RootState) => state.alerts,
+ *     todoById: (state: RootState, id: number) => state.todos[id]
+ *   },
+ *   createSelector
+ * )
+ *
+ * // Is essentially the same as this:
+ * const selector = createSelector(
+ *   [
+ *     (state: RootState) => state.todos,
+ *     (state: RootState) => state.alerts,
+ *     (state: RootState, id: number) => state.todos[id]
+ *   ],
+ *   (todos, alerts, todoById) => {
+ *     return {
+ *       todos,
+ *       alerts,
+ *       todoById
+ *     }
+ *   }
+ * )
+ * ```
+ *
+ * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}
+ *
+ * @public
+ */
+export const createStructuredSelector: StructuredSelectorCreator =
+  Object.assign(
+    <
+      InputSelectorsObject extends SelectorsObject,
+      MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,
+      ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize
+    >(
+      inputSelectorsObject: InputSelectorsObject,
+      selectorCreator: CreateSelectorFunction<
+        MemoizeFunction,
+        ArgsMemoizeFunction
+      > = createSelector as CreateSelectorFunction<
+        MemoizeFunction,
+        ArgsMemoizeFunction
+      >
+    ) => {
+      assertIsObject(
+        inputSelectorsObject,
+        'createStructuredSelector expects first argument to be an object ' +
+          `where each property is a selector, instead received a ${typeof inputSelectorsObject}`
+      )
+      const inputSelectorKeys = Object.keys(inputSelectorsObject)
+      const dependencies = inputSelectorKeys.map(
+        key => inputSelectorsObject[key]
+      )
+      const structuredSelector = selectorCreator(
+        dependencies,
+        (...inputSelectorResults: any[]) => {
+          return inputSelectorResults.reduce((composition, value, index) => {
+            composition[inputSelectorKeys[index]] = value
+            return composition
+          }, {})
+        }
+      )
+      return structuredSelector
+    },
+    { withTypes: () => createStructuredSelector }
+  ) as StructuredSelectorCreator
Index: node_modules/reselect/src/devModeChecks/identityFunctionCheck.ts
===================================================================
--- node_modules/reselect/src/devModeChecks/identityFunctionCheck.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/devModeChecks/identityFunctionCheck.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+import type { AnyFunction } from '../types'
+
+/**
+ * Runs a check to determine if the given result function behaves as an
+ * identity function. An identity function is one that returns its
+ * input unchanged, for example, `x => x`. This check helps ensure
+ * efficient memoization and prevent unnecessary re-renders by encouraging
+ * proper use of transformation logic in result functions and
+ * extraction logic in input selectors.
+ *
+ * @param resultFunc - The result function to be checked.
+ * @param inputSelectorsResults - The results of the input selectors.
+ * @param outputSelectorResult - The result of the output selector.
+ *
+ * @see {@link https://reselect.js.org/api/development-only-stability-checks#identityfunctioncheck `identityFunctionCheck`}
+ *
+ * @since 5.0.0
+ * @internal
+ */
+export const runIdentityFunctionCheck = (
+  resultFunc: AnyFunction,
+  inputSelectorsResults: unknown[],
+  outputSelectorResult: unknown
+) => {
+  if (
+    inputSelectorsResults.length === 1 &&
+    inputSelectorsResults[0] === outputSelectorResult
+  ) {
+    let isInputSameAsOutput = false
+    try {
+      const emptyObject = {}
+      if (resultFunc(emptyObject) === emptyObject) isInputSameAsOutput = true
+    } catch {
+      // Do nothing
+    }
+    if (isInputSameAsOutput) {
+      let stack: string | undefined = undefined
+      try {
+        throw new Error()
+      } catch (e) {
+        // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi
+        ;({ stack } = e as Error)
+      }
+      console.warn(
+        'The result function returned its own inputs without modification. e.g' +
+          '\n`createSelector([state => state.todos], todos => todos)`' +
+          '\nThis could lead to inefficient memoization and unnecessary re-renders.' +
+          '\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.',
+        { stack }
+      )
+    }
+  }
+}
Index: node_modules/reselect/src/devModeChecks/inputStabilityCheck.ts
===================================================================
--- node_modules/reselect/src/devModeChecks/inputStabilityCheck.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/devModeChecks/inputStabilityCheck.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+import type { CreateSelectorOptions, UnknownMemoizer } from '../types'
+
+/**
+ * Runs a stability check to ensure the input selector results remain stable
+ * when provided with the same arguments. This function is designed to detect
+ * changes in the output of input selectors, which can impact the performance of memoized selectors.
+ *
+ * @param inputSelectorResultsObject - An object containing two arrays: `inputSelectorResults` and `inputSelectorResultsCopy`, representing the results of input selectors.
+ * @param options - Options object consisting of a `memoize` function and a `memoizeOptions` object.
+ * @param inputSelectorArgs - List of arguments being passed to the input selectors.
+ *
+ * @see {@link https://reselect.js.org/api/development-only-stability-checks/#inputstabilitycheck `inputStabilityCheck`}
+ *
+ * @since 5.0.0
+ * @internal
+ */
+export const runInputStabilityCheck = (
+  inputSelectorResultsObject: {
+    inputSelectorResults: unknown[]
+    inputSelectorResultsCopy: unknown[]
+  },
+  options: Required<
+    Pick<
+      CreateSelectorOptions<UnknownMemoizer, UnknownMemoizer>,
+      'memoize' | 'memoizeOptions'
+    >
+  >,
+  inputSelectorArgs: unknown[] | IArguments
+) => {
+  const { memoize, memoizeOptions } = options
+  const { inputSelectorResults, inputSelectorResultsCopy } =
+    inputSelectorResultsObject
+  const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions)
+  // if the memoize method thinks the parameters are equal, these *should* be the same reference
+  const areInputSelectorResultsEqual =
+    createAnEmptyObject.apply(null, inputSelectorResults) ===
+    createAnEmptyObject.apply(null, inputSelectorResultsCopy)
+  if (!areInputSelectorResultsEqual) {
+    let stack: string | undefined = undefined
+    try {
+      throw new Error()
+    } catch (e) {
+      // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi
+      ;({ stack } = e as Error)
+    }
+    console.warn(
+      'An input selector returned a different result when passed same arguments.' +
+        '\nThis means your output selector will likely run more frequently than intended.' +
+        '\nAvoid returning a new reference inside your input selector, e.g.' +
+        '\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`',
+      {
+        arguments: inputSelectorArgs,
+        firstInputs: inputSelectorResults,
+        secondInputs: inputSelectorResultsCopy,
+        stack
+      }
+    )
+  }
+}
Index: node_modules/reselect/src/devModeChecks/setGlobalDevModeChecks.ts
===================================================================
--- node_modules/reselect/src/devModeChecks/setGlobalDevModeChecks.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/devModeChecks/setGlobalDevModeChecks.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+import type { DevModeChecks } from '../types'
+
+/**
+ * Global configuration for development mode checks. This specifies the default
+ * frequency at which each development mode check should be performed.
+ *
+ * @since 5.0.0
+ * @internal
+ */
+export const globalDevModeChecks: DevModeChecks = {
+  inputStabilityCheck: 'once',
+  identityFunctionCheck: 'once'
+}
+
+/**
+ * Overrides the development mode checks settings for all selectors.
+ *
+ * Reselect performs additional checks in development mode to help identify and
+ * warn about potential issues in selector behavior. This function allows you to
+ * customize the behavior of these checks across all selectors in your application.
+ *
+ * **Note**: This setting can still be overridden per selector inside `createSelector`'s `options` object.
+ * See {@link https://github.com/reduxjs/reselect#2-per-selector-by-passing-an-identityfunctioncheck-option-directly-to-createselector per-selector-configuration}
+ * and {@linkcode CreateSelectorOptions.identityFunctionCheck identityFunctionCheck} for more details.
+ *
+ * _The development mode checks do not run in production builds._
+ *
+ * @param devModeChecks - An object specifying the desired settings for development mode checks. You can provide partial overrides. Unspecified settings will retain their current values.
+ *
+ * @example
+ * ```ts
+ * import { setGlobalDevModeChecks } from 'reselect'
+ * import { DevModeChecks } from '../types'
+ *
+ * // Run only the first time the selector is called. (default)
+ * setGlobalDevModeChecks({ inputStabilityCheck: 'once' })
+ *
+ * // Run every time the selector is called.
+ * setGlobalDevModeChecks({ inputStabilityCheck: 'always' })
+ *
+ * // Never run the input stability check.
+ * setGlobalDevModeChecks({ inputStabilityCheck: 'never' })
+ *
+ * // Run only the first time the selector is called. (default)
+ * setGlobalDevModeChecks({ identityFunctionCheck: 'once' })
+ *
+ * // Run every time the selector is called.
+ * setGlobalDevModeChecks({ identityFunctionCheck: 'always' })
+ *
+ * // Never run the identity function check.
+ * setGlobalDevModeChecks({ identityFunctionCheck: 'never' })
+ * ```
+ * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}
+ * @see {@link https://reselect.js.org/api/development-only-stability-checks#1-globally-through-setglobaldevmodechecks global-configuration}
+ *
+ * @since 5.0.0
+ * @public
+ */
+export const setGlobalDevModeChecks = (
+  devModeChecks: Partial<DevModeChecks>
+) => {
+  Object.assign(globalDevModeChecks, devModeChecks)
+}
Index: node_modules/reselect/src/index.ts
===================================================================
--- node_modules/reselect/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,36 @@
+export { autotrackMemoize as unstable_autotrackMemoize } from './autotrackMemoize/autotrackMemoize'
+export { createSelector, createSelectorCreator } from './createSelectorCreator'
+export type { CreateSelectorFunction } from './createSelectorCreator'
+export { createStructuredSelector } from './createStructuredSelector'
+export type {
+  RootStateSelectors,
+  SelectorResultsMap,
+  SelectorsObject,
+  StructuredSelectorCreator,
+  TypedStructuredSelectorCreator
+} from './createStructuredSelector'
+export { setGlobalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'
+export { lruMemoize, referenceEqualityCheck } from './lruMemoize'
+export type { LruMemoizeOptions } from './lruMemoize'
+export type {
+  Combiner,
+  CreateSelectorOptions,
+  DefaultMemoizeFields,
+  DevModeCheckFrequency,
+  DevModeChecks,
+  DevModeChecksExecutionInfo,
+  EqualityFn,
+  ExtractMemoizerFields,
+  GetParamsFromSelectors,
+  GetStateFromSelectors,
+  MemoizeOptionsFromParameters,
+  OutputSelector,
+  OutputSelectorFields,
+  OverrideMemoizeOptions,
+  Selector,
+  SelectorArray,
+  SelectorResultArray,
+  UnknownMemoizer
+} from './types'
+export { weakMapMemoize } from './weakMapMemoize'
+export type { WeakMapMemoizeOptions } from './weakMapMemoize'
Index: node_modules/reselect/src/lruMemoize.ts
===================================================================
--- node_modules/reselect/src/lruMemoize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/lruMemoize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,249 @@
+import type {
+  AnyFunction,
+  DefaultMemoizeFields,
+  EqualityFn,
+  Simplify
+} from './types'
+
+import type { NOT_FOUND_TYPE } from './utils'
+import { NOT_FOUND } from './utils'
+
+// Cache implementation based on Erik Rasmussen's `lru-memoize`:
+// https://github.com/erikras/lru-memoize
+
+interface Entry {
+  key: unknown
+  value: unknown
+}
+
+interface Cache {
+  get(key: unknown): unknown | NOT_FOUND_TYPE
+  put(key: unknown, value: unknown): void
+  getEntries(): Entry[]
+  clear(): void
+}
+
+function createSingletonCache(equals: EqualityFn): Cache {
+  let entry: Entry | undefined
+  return {
+    get(key: unknown) {
+      if (entry && equals(entry.key, key)) {
+        return entry.value
+      }
+
+      return NOT_FOUND
+    },
+
+    put(key: unknown, value: unknown) {
+      entry = { key, value }
+    },
+
+    getEntries() {
+      return entry ? [entry] : []
+    },
+
+    clear() {
+      entry = undefined
+    }
+  }
+}
+
+function createLruCache(maxSize: number, equals: EqualityFn): Cache {
+  let entries: Entry[] = []
+
+  function get(key: unknown) {
+    const cacheIndex = entries.findIndex(entry => equals(key, entry.key))
+
+    // We found a cached entry
+    if (cacheIndex > -1) {
+      const entry = entries[cacheIndex]
+
+      // Cached entry not at top of cache, move it to the top
+      if (cacheIndex > 0) {
+        entries.splice(cacheIndex, 1)
+        entries.unshift(entry)
+      }
+
+      return entry.value
+    }
+
+    // No entry found in cache, return sentinel
+    return NOT_FOUND
+  }
+
+  function put(key: unknown, value: unknown) {
+    if (get(key) === NOT_FOUND) {
+      // TODO Is unshift slow?
+      entries.unshift({ key, value })
+      if (entries.length > maxSize) {
+        entries.pop()
+      }
+    }
+  }
+
+  function getEntries() {
+    return entries
+  }
+
+  function clear() {
+    entries = []
+  }
+
+  return { get, put, getEntries, clear }
+}
+
+/**
+ * Runs a simple reference equality check.
+ * What {@linkcode lruMemoize lruMemoize} uses by default.
+ *
+ * **Note**: This function was previously known as `defaultEqualityCheck`.
+ *
+ * @public
+ */
+export const referenceEqualityCheck: EqualityFn = (a, b) => a === b
+
+export function createCacheKeyComparator(equalityCheck: EqualityFn) {
+  return function areArgumentsShallowlyEqual(
+    prev: unknown[] | IArguments | null,
+    next: unknown[] | IArguments | null
+  ): boolean {
+    if (prev === null || next === null || prev.length !== next.length) {
+      return false
+    }
+
+    // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.
+    const { length } = prev
+    for (let i = 0; i < length; i++) {
+      if (!equalityCheck(prev[i], next[i])) {
+        return false
+      }
+    }
+
+    return true
+  }
+}
+
+/**
+ * Options for configuring the behavior of a function memoized with
+ * LRU (Least Recently Used) caching.
+ *
+ * @template Result - The type of the return value of the memoized function.
+ *
+ * @public
+ */
+export interface LruMemoizeOptions<Result = any> {
+  /**
+   * Function used to compare the individual arguments of the
+   * provided calculation function.
+   *
+   * @default referenceEqualityCheck
+   */
+  equalityCheck?: EqualityFn
+
+  /**
+   * If provided, used to compare a newly generated output value against
+   * previous values in the cache. If a match is found,
+   * the old value is returned. This addresses the common
+   * ```ts
+   * todos.map(todo => todo.id)
+   * ```
+   * use case, where an update to another field in the original data causes
+   * a recalculation due to changed references, but the output is still
+   * effectively the same.
+   *
+   * @since 4.1.0
+   */
+  resultEqualityCheck?: EqualityFn<Result>
+
+  /**
+   * The maximum size of the cache used by the selector.
+   * A size greater than 1 means the selector will use an
+   * LRU (Least Recently Used) cache, allowing for the caching of multiple
+   * results based on different sets of arguments.
+   *
+   * @default 1
+   */
+  maxSize?: number
+}
+
+/**
+ * Creates a memoized version of a function with an optional
+ * LRU (Least Recently Used) cache. The memoized function uses a cache to
+ * store computed values. Depending on the `maxSize` option, it will use
+ * either a singleton cache (for a single entry) or an
+ * LRU cache (for multiple entries).
+ *
+ * **Note**: This function was previously known as `defaultMemoize`.
+ *
+ * @param func - The function to be memoized.
+ * @param equalityCheckOrOptions - Either an equality check function or an options object.
+ * @returns A memoized function with a `.clearCache()` method attached.
+ *
+ * @template Func - The type of the function that is memoized.
+ *
+ * @see {@link https://reselect.js.org/api/lruMemoize `lruMemoize`}
+ *
+ * @public
+ */
+export function lruMemoize<Func extends AnyFunction>(
+  func: Func,
+  equalityCheckOrOptions?: EqualityFn | LruMemoizeOptions<ReturnType<Func>>
+) {
+  const providedOptions =
+    typeof equalityCheckOrOptions === 'object'
+      ? equalityCheckOrOptions
+      : { equalityCheck: equalityCheckOrOptions }
+
+  const {
+    equalityCheck = referenceEqualityCheck,
+    maxSize = 1,
+    resultEqualityCheck
+  } = providedOptions
+
+  const comparator = createCacheKeyComparator(equalityCheck)
+
+  let resultsCount = 0
+
+  const cache =
+    maxSize <= 1
+      ? createSingletonCache(comparator)
+      : createLruCache(maxSize, comparator)
+
+  function memoized() {
+    let value = cache.get(arguments) as ReturnType<Func>
+    if (value === NOT_FOUND) {
+      // apply arguments instead of spreading for performance.
+      // @ts-ignore
+      value = func.apply(null, arguments) as ReturnType<Func>
+      resultsCount++
+
+      if (resultEqualityCheck) {
+        const entries = cache.getEntries()
+        const matchingEntry = entries.find(entry =>
+          resultEqualityCheck(entry.value as ReturnType<Func>, value)
+        )
+
+        if (matchingEntry) {
+          value = matchingEntry.value as ReturnType<Func>
+          resultsCount !== 0 && resultsCount--
+        }
+      }
+
+      cache.put(arguments, value)
+    }
+    return value
+  }
+
+  memoized.clearCache = () => {
+    cache.clear()
+    memoized.resetResultsCount()
+  }
+
+  memoized.resultsCount = () => resultsCount
+
+  memoized.resetResultsCount = () => {
+    resultsCount = 0
+  }
+
+  return memoized as Func & Simplify<DefaultMemoizeFields>
+}
Index: node_modules/reselect/src/types.ts
===================================================================
--- node_modules/reselect/src/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/types.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,876 @@
+import type { MergeParameters } from './versionedTypes'
+import type { weakMapMemoize } from './weakMapMemoize'
+
+export type { MergeParameters } from './versionedTypes'
+
+/*
+ * -----------------------------------------------------------------------------
+ * -----------------------------------------------------------------------------
+ *
+ * Reselect Data Types
+ *
+ * -----------------------------------------------------------------------------
+ * -----------------------------------------------------------------------------
+ */
+
+/**
+ * A standard selector function.
+ * @template State - The first value, often a Redux root state object.
+ * @template Result - The final result returned by the selector.
+ * @template Params - All additional arguments passed into the selector.
+ *
+ * @public
+ */
+export type Selector<
+  State = any,
+  Result = unknown,
+  Params extends readonly any[] = any[]
+> = Distribute<
+  /**
+   * A function that takes a state and returns data that is based on that state.
+   *
+   * @param state - The first argument, often a Redux root state object.
+   * @param params - All additional arguments passed into the selector.
+   * @returns A derived value from the state.
+   */
+  (state: State, ...params: FallbackIfNever<Params, []>) => Result
+>
+
+/**
+ * An array of input selectors.
+ *
+ * @public
+ */
+export type SelectorArray<State = any> = readonly Selector<State>[]
+
+/**
+ * Extracts an array of all return types from all input selectors.
+ *
+ * @public
+ */
+export type SelectorResultArray<Selectors extends SelectorArray> =
+  ExtractReturnType<Selectors>
+
+/**
+ * The options object used inside `createSelector` and `createSelectorCreator`.
+ *
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object inside `createSelector` to override the original `memoize` function that was initially passed into `createSelectorCreator`.
+ * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object inside `createSelector` to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`. If none was initially provided, `weakMapMemoize` will be used.
+ *
+ * @public
+ */
+export interface CreateSelectorOptions<
+  MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,
+  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,
+  OverrideMemoizeFunction extends UnknownMemoizer = never,
+  OverrideArgsMemoizeFunction extends UnknownMemoizer = never
+> {
+  /**
+   * Reselect performs additional checks in development mode to help identify
+   * and warn about potential issues in selector behavior. This option
+   * allows you to customize the behavior of these checks per selector.
+   *
+   * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}
+   *
+   * @since 5.0.0
+   */
+  devModeChecks?: Partial<DevModeChecks>
+
+  /**
+   * The memoize function that is used to memoize the {@linkcode OutputSelectorFields.resultFunc resultFunc}
+   * inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+   *
+   * When passed directly into `createSelector`, it overrides the `memoize` function initially passed into `createSelectorCreator`.
+   *
+   * @example
+   * ```ts
+   * import { createSelector, weakMapMemoize } from 'reselect'
+   *
+   * const selectItemsByCategory = createSelector(
+   *   [
+   *     (state: RootState) => state.items,
+   *     (state: RootState, category: string) => category
+   *   ],
+   *   (items, category) => items.filter(item => item.category === category),
+   *   { memoize: weakMapMemoize }
+   * )
+   * ```
+   *
+   * @since 5.0.0
+   */
+  memoize?: FallbackIfNever<OverrideMemoizeFunction, MemoizeFunction>
+
+  /**
+   * The optional memoize function that is used to memoize the arguments
+   * passed into the output selector generated by `createSelector`
+   * (e.g., `lruMemoize` or `weakMapMemoize`).
+   *
+   * When passed directly into `createSelector`, it overrides the
+   * `argsMemoize` function initially passed into `createSelectorCreator`.
+   * If none was initially provided, `weakMapMemoize` will be used.
+   *
+   * @example
+   * ```ts
+   * import { createSelector, weakMapMemoize } from 'reselect'
+   *
+   * const selectItemsByCategory = createSelector(
+   *   [
+   *     (state: RootState) => state.items,
+   *     (state: RootState, category: string) => category
+   *   ],
+   *   (items, category) => items.filter(item => item.category === category),
+   *   { argsMemoize: weakMapMemoize }
+   * )
+   * ```
+   *
+   * @default weakMapMemoize
+   *
+   * @since 5.0.0
+   */
+  argsMemoize?: FallbackIfNever<
+    OverrideArgsMemoizeFunction,
+    ArgsMemoizeFunction
+  >
+
+  /**
+   * Optional configuration options for the {@linkcode CreateSelectorOptions.memoize memoize} function.
+   * These options are passed to the {@linkcode CreateSelectorOptions.memoize memoize} function as the second argument.
+   *
+   * @since 5.0.0
+   */
+  memoizeOptions?: OverrideMemoizeOptions<
+    MemoizeFunction,
+    OverrideMemoizeFunction
+  >
+
+  /**
+   * Optional configuration options for the {@linkcode CreateSelectorOptions.argsMemoize argsMemoize} function.
+   * These options are passed to the {@linkcode CreateSelectorOptions.argsMemoize argsMemoize} function as the second argument.
+   *
+   * @since 5.0.0
+   */
+  argsMemoizeOptions?: OverrideMemoizeOptions<
+    ArgsMemoizeFunction,
+    OverrideArgsMemoizeFunction
+  >
+}
+
+/**
+ * The additional fields attached to the output selector generated by `createSelector`.
+ *
+ * **Note**: Although {@linkcode CreateSelectorOptions.memoize memoize}
+ * and {@linkcode CreateSelectorOptions.argsMemoize argsMemoize} are included in the attached fields,
+ * the fields themselves are independent of the type of
+ * {@linkcode CreateSelectorOptions.memoize memoize} and {@linkcode CreateSelectorOptions.argsMemoize argsMemoize} functions.
+ * Meaning this type is not going to generate additional fields based on what functions we use to memoize our selectors.
+ *
+ * _This type is not to be confused with {@linkcode ExtractMemoizerFields ExtractMemoizerFields}._
+ *
+ * @template InputSelectors - The type of the input selectors.
+ * @template Result - The type of the result returned by the `resultFunc`.
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ *
+ * @public
+ */
+export type OutputSelectorFields<
+  InputSelectors extends SelectorArray = SelectorArray,
+  Result = unknown,
+  MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,
+  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize
+> = {
+  /**
+   * The final function passed to `createSelector`. Otherwise known as the `combiner`.
+   */
+  resultFunc: Combiner<InputSelectors, Result>
+
+  /**
+   * The memoized version of {@linkcode OutputSelectorFields.resultFunc resultFunc}.
+   */
+  memoizedResultFunc: Combiner<InputSelectors, Result> &
+    ExtractMemoizerFields<MemoizeFunction>
+
+  /**
+   * @Returns The last result calculated by {@linkcode OutputSelectorFields.memoizedResultFunc memoizedResultFunc}.
+   */
+  lastResult: () => Result
+
+  /**
+   * The array of the input selectors used by `createSelector` to compose the
+   * combiner ({@linkcode OutputSelectorFields.memoizedResultFunc memoizedResultFunc}).
+   */
+  dependencies: InputSelectors
+
+  /**
+   * Counts the number of times {@linkcode OutputSelectorFields.memoizedResultFunc memoizedResultFunc} has been recalculated.
+   */
+  recomputations: () => number
+
+  /**
+   * Resets the count of {@linkcode OutputSelectorFields.recomputations recomputations} count to 0.
+   */
+  resetRecomputations: () => void
+
+  /**
+   * Counts the number of times the input selectors ({@linkcode OutputSelectorFields.dependencies dependencies})
+   * have been recalculated. This is distinct from {@linkcode OutputSelectorFields.recomputations recomputations},
+   * which tracks the recalculations of the result function.
+   *
+   * @since 5.0.0
+   */
+  dependencyRecomputations: () => number
+
+  /**
+   * Resets the count {@linkcode OutputSelectorFields.dependencyRecomputations dependencyRecomputations}
+   * for the input selectors ({@linkcode OutputSelectorFields.dependencies dependencies})
+   * of a memoized selector.
+   *
+   * @since 5.0.0
+   */
+  resetDependencyRecomputations: () => void
+} & Simplify<
+  Required<
+    Pick<
+      CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,
+      'argsMemoize' | 'memoize'
+    >
+  >
+>
+
+/**
+ * Represents the actual selectors generated by `createSelector`.
+ *
+ * @template InputSelectors - The type of the input selectors.
+ * @template Result - The type of the result returned by the `resultFunc`.
+ * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).
+ * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.
+ *
+ * @public
+ */
+export type OutputSelector<
+  InputSelectors extends SelectorArray = SelectorArray,
+  Result = unknown,
+  MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,
+  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize
+> = Selector<
+  GetStateFromSelectors<InputSelectors>,
+  Result,
+  GetParamsFromSelectors<InputSelectors>
+> &
+  ExtractMemoizerFields<ArgsMemoizeFunction> &
+  OutputSelectorFields<
+    InputSelectors,
+    Result,
+    MemoizeFunction,
+    ArgsMemoizeFunction
+  >
+
+/**
+ * A function that takes input selectors' return values as arguments and returns a result. Otherwise known as `resultFunc`.
+ *
+ * @template InputSelectors - An array of input selectors.
+ * @template Result - Result returned by `resultFunc`.
+ *
+ * @public
+ */
+export type Combiner<InputSelectors extends SelectorArray, Result> = Distribute<
+  /**
+   * A function that takes input selectors' return values as arguments and returns a result. Otherwise known as `resultFunc`.
+   *
+   * @param resultFuncArgs - Return values of input selectors.
+   * @returns The return value of {@linkcode OutputSelectorFields.resultFunc resultFunc}.
+   */
+  (...resultFuncArgs: SelectorResultArray<InputSelectors>) => Result
+>
+
+/**
+ * A standard function returning true if two values are considered equal.
+ *
+ * @public
+ */
+export type EqualityFn<T = any> = (a: T, b: T) => boolean
+
+/**
+ * The frequency of development mode checks.
+ *
+ * @since 5.0.0
+ * @public
+ */
+export type DevModeCheckFrequency = 'always' | 'once' | 'never'
+
+/**
+ * Represents the configuration for development mode checks.
+ *
+ * @since 5.0.0
+ * @public
+ */
+export interface DevModeChecks {
+  /**
+   * Overrides the global input stability check for the selector.
+   * - `once` - Run only the first time the selector is called.
+   * - `always` - Run every time the selector is called.
+   * - `never` - Never run the input stability check.
+   *
+   * @default 'once'
+   *
+   * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}
+   * @see {@link https://reselect.js.org/api/development-only-stability-checks#inputstabilitycheck `inputStabilityCheck`}
+   * @see {@link https://reselect.js.org/api/development-only-stability-checks#2-per-selector-by-passing-an-inputstabilitycheck-option-directly-to- per-selector-configuration}
+   *
+   * @since 5.0.0
+   */
+  inputStabilityCheck: DevModeCheckFrequency
+
+  /**
+   * Overrides the global identity function check for the selector.
+   * - `once` - Run only the first time the selector is called.
+   * - `always` - Run every time the selector is called.
+   * - `never` - Never run the identity function check.
+   *
+   * @default 'once'
+   *
+   * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}
+   * @see {@link https://reselect.js.org/api/development-only-stability-checks#identityfunctioncheck `identityFunctionCheck`}
+   * @see {@link https://reselect.js.org/api/development-only-stability-checks#2-per-selector-by-passing-an-identityfunctioncheck-option-directly-to- per-selector-configuration}
+   *
+   * @since 5.0.0
+   */
+  identityFunctionCheck: DevModeCheckFrequency
+}
+
+/**
+ * Represents execution information for development mode checks.
+ *
+ * @public
+ * @since 5.0.0
+ */
+export type DevModeChecksExecutionInfo = {
+  [K in keyof DevModeChecks]: {
+    /**
+     * A boolean indicating whether the check should be executed.
+     */
+    shouldRun: boolean
+
+    /**
+     * The function to execute for the check.
+     */
+    run: AnyFunction
+  }
+}
+
+/**
+ * Determines the combined single "State" type (first arg) from all input selectors.
+ *
+ * @public
+ */
+export type GetStateFromSelectors<Selectors extends SelectorArray> =
+  MergeParameters<Selectors>[0]
+
+/**
+ * Determines the combined  "Params" type (all remaining args) from all input selectors.
+ *
+ * @public
+ */
+export type GetParamsFromSelectors<Selectors extends SelectorArray> = ArrayTail<
+  MergeParameters<Selectors>
+>
+
+/**
+ * Any Memoizer function. A memoizer is a function that accepts another function and returns it.
+ *
+ * @template FunctionType - The type of the function that is memoized.
+ *
+ * @public
+ */
+export type UnknownMemoizer<
+  FunctionType extends UnknownFunction = UnknownFunction
+> = (func: FunctionType, ...options: any[]) => FunctionType
+
+/**
+ * Extracts the options type for a memoization function based on its parameters.
+ * The first parameter of the function is expected to be the function to be memoized,
+ * followed by options for the memoization process.
+ *
+ * @template MemoizeFunction - The type of the memoize function to be checked.
+ *
+ * @public
+ */
+export type MemoizeOptionsFromParameters<
+  MemoizeFunction extends UnknownMemoizer
+> =
+  | (
+      | NonFunctionType<DropFirstParameter<MemoizeFunction>[0]>
+      | FunctionType<DropFirstParameter<MemoizeFunction>[0]>
+    )
+  | (
+      | NonFunctionType<DropFirstParameter<MemoizeFunction>[number]>
+      | FunctionType<DropFirstParameter<MemoizeFunction>[number]>
+    )[]
+
+/**
+ * Derive the type of memoize options object based on whether the memoize function itself was overridden.
+ *
+ * _This type can be used for both `memoizeOptions` and `argsMemoizeOptions`._
+ *
+ * @template MemoizeFunction - The type of the `memoize` or `argsMemoize` function initially passed into `createSelectorCreator`.
+ * @template OverrideMemoizeFunction - The type of the optional `memoize` or `argsMemoize` function passed directly into `createSelector` which then overrides the original `memoize` or `argsMemoize` function passed into `createSelectorCreator`.
+ *
+ * @public
+ */
+export type OverrideMemoizeOptions<
+  MemoizeFunction extends UnknownMemoizer,
+  OverrideMemoizeFunction extends UnknownMemoizer = never
+> = IfNever<
+  OverrideMemoizeFunction,
+  Simplify<MemoizeOptionsFromParameters<MemoizeFunction>>,
+  Simplify<MemoizeOptionsFromParameters<OverrideMemoizeFunction>>
+>
+
+/**
+ * Extracts the additional properties or methods that a memoize function attaches to
+ * the function it memoizes (e.g., `clearCache`).
+ *
+ * @template MemoizeFunction - The type of the memoize function to be checked.
+ *
+ * @public
+ */
+export type ExtractMemoizerFields<MemoizeFunction extends UnknownMemoizer> =
+  Simplify<OmitIndexSignature<ReturnType<MemoizeFunction>>>
+
+/**
+ * Represents the additional properties attached to a function memoized by `reselect`.
+ *
+ * `lruMemoize`, `weakMapMemoize` and `autotrackMemoize` all return these properties.
+ *
+ * @see {@linkcode ExtractMemoizerFields ExtractMemoizerFields}
+ *
+ * @public
+ */
+export type DefaultMemoizeFields = {
+  /**
+   * Clears the memoization cache associated with a memoized function.
+   * This method is typically used to reset the state of the cache, allowing
+   * for the garbage collection of previously memoized results and ensuring
+   * that future calls to the function recompute the results.
+   */
+  clearCache: () => void
+  resultsCount: () => number
+  resetResultsCount: () => void
+}
+
+/*
+ * -----------------------------------------------------------------------------
+ * -----------------------------------------------------------------------------
+ *
+ * Reselect Internal Utility Types
+ *
+ * -----------------------------------------------------------------------------
+ * -----------------------------------------------------------------------------
+ */
+
+/**
+ * Any function with any arguments.
+ *
+ * @internal
+ */
+export type AnyFunction = (...args: any[]) => any
+
+/**
+ * Any function with unknown arguments.
+ *
+ * @internal
+ */
+export type UnknownFunction = (...args: unknown[]) => unknown
+
+/**
+ * When a generic type parameter is using its default value of `never`, fallback to a different type.
+ *
+ * @template T - Type to be checked.
+ * @template FallbackTo - Type to fallback to if `T` resolves to `never`.
+ *
+ * @internal
+ */
+export type FallbackIfNever<T, FallbackTo> = IfNever<T, FallbackTo, T>
+
+/**
+ * Extracts the non-function part of a type.
+ *
+ * @template T - The input type to be refined by excluding function types and index signatures.
+ *
+ * @internal
+ */
+export type NonFunctionType<T> = Simplify<
+  OmitIndexSignature<Exclude<T, AnyFunction>>
+>
+
+/**
+ * Extracts the function part of a type.
+ *
+ * @template T - The input type to be refined by extracting function types.
+ *
+ * @internal
+ */
+export type FunctionType<T> = Extract<T, AnyFunction>
+
+/**
+ * Extracts the return type from all functions as a tuple.
+ *
+ * @internal
+ */
+export type ExtractReturnType<FunctionsArray extends readonly AnyFunction[]> = {
+  [Index in keyof FunctionsArray]: FunctionsArray[Index] extends FunctionsArray[number]
+    ? FallbackIfUnknown<ReturnType<FunctionsArray[Index]>, any>
+    : never
+}
+
+/**
+ * Utility type to infer the type of "all params of a function except the first",
+ * so we can determine what arguments a memoize function accepts.
+ *
+ * @internal
+ */
+export type DropFirstParameter<Func extends AnyFunction> = Func extends (
+  firstArg: any,
+  ...restArgs: infer Rest
+) => any
+  ? Rest
+  : never
+
+/**
+ * Distributes over a type. It is used mostly to expand a function type
+ * in hover previews while preserving their original JSDoc information.
+ *
+ * If preserving JSDoc information is not a concern, you can use {@linkcode ExpandFunction ExpandFunction}.
+ *
+ * @template T The type to be distributed.
+ *
+ * @internal
+ */
+export type Distribute<T> = T extends T ? T : never
+
+/**
+ * Extracts the type of the first element of an array or tuple.
+ *
+ * @internal
+ */
+export type FirstArrayElement<ArrayType> = ArrayType extends readonly [
+  unknown,
+  ...unknown[]
+]
+  ? ArrayType[0]
+  : never
+
+/**
+ * Extracts the type of an array or tuple minus the first element.
+ *
+ * @internal
+ */
+export type ArrayTail<ArrayType> = ArrayType extends readonly [
+  unknown,
+  ...infer Tail
+]
+  ? Tail
+  : []
+
+/**
+ * An alias for type `{}`. Represents any value that is not `null` or `undefined`.
+ * It is mostly used for semantic purposes to help distinguish between an
+ * empty object type and `{}` as they are not the same.
+ *
+ * @internal
+ */
+export type AnyNonNullishValue = NonNullable<unknown>
+
+/**
+ * Same as {@linkcode AnyNonNullishValue AnyNonNullishValue} but aliased
+ * for semantic purposes. It is intended to be used in scenarios where
+ * a recursive type definition needs to be interrupted to ensure type safety
+ * and to avoid excessively deep recursion that could lead to performance issues.
+ *
+ * @internal
+ */
+export type InterruptRecursion = AnyNonNullishValue
+
+/*
+ * -----------------------------------------------------------------------------
+ * -----------------------------------------------------------------------------
+ *
+ * External/Copied Utility Types
+ *
+ * -----------------------------------------------------------------------------
+ * -----------------------------------------------------------------------------
+ *
+ */
+
+/**
+ * An if-else-like type that resolves depending on whether the given type is `never`.
+ * This is mainly used to conditionally resolve the type of a `memoizeOptions` object based on whether `memoize` is provided or not.
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/if-never.d.ts Source}
+ *
+ * @internal
+ */
+export type IfNever<T, TypeIfNever, TypeIfNotNever> = [T] extends [never]
+  ? TypeIfNever
+  : TypeIfNotNever
+
+/**
+ * Omit any index signatures from the given object type, leaving only explicitly defined properties.
+ * This is mainly used to remove explicit `any`s from the return type of some memoizers (e.g, `microMemoize`).
+ *
+ * __Disclaimer:__ When used on an intersection of a function and an object,
+ * the function is erased.
+ *
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/omit-index-signature.d.ts Source}
+ *
+ * @internal
+ */
+export type OmitIndexSignature<ObjectType> = {
+  [KeyType in keyof ObjectType as {} extends Record<KeyType, unknown>
+    ? never
+    : KeyType]: ObjectType[KeyType]
+}
+
+/**
+ * The infamous "convert a union type to an intersection type" hack
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/union-to-intersection.d.ts Source}
+ * @see {@link https://github.com/microsoft/TypeScript/issues/29594 Reference}
+ *
+ * @internal
+ */
+export type UnionToIntersection<Union> =
+  // `extends unknown` is always going to be the case and is used to convert the
+  // `Union` into a [distributive conditional
+  // type](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).
+  (
+    Union extends unknown
+      ? // The union type is used as the only argument to a function since the union
+        // of function arguments is an intersection.
+        (distributedUnion: Union) => void
+      : // This won't happen.
+        never
+  ) extends // Infer the `Intersection` type since TypeScript represents the positional
+  // arguments of unions of functions as an intersection of the union.
+  (mergedIntersection: infer Intersection) => void
+    ? // The `& Union` is to allow indexing by the resulting type
+      Intersection & Union
+    : never
+
+/**
+ * Code to convert a union of values into a tuple.
+ * @see {@link https://stackoverflow.com/a/55128956/62937 Source}
+ *
+ * @internal
+ */
+type Push<T extends any[], V> = [...T, V]
+
+/**
+ * @see {@link https://stackoverflow.com/a/55128956/62937 Source}
+ *
+ * @internal
+ */
+type LastOf<T> = UnionToIntersection<
+  T extends any ? () => T : never
+> extends () => infer R
+  ? R
+  : never
+
+/**
+ * TS4.1+
+ * @see {@link https://stackoverflow.com/a/55128956/62937 Source}
+ *
+ * @internal
+ */
+export type TuplifyUnion<
+  T,
+  L = LastOf<T>,
+  N = [T] extends [never] ? true : false
+> = true extends N ? [] : Push<TuplifyUnion<Exclude<T, L>>, L>
+
+/**
+ * Converts "the values of an object" into a tuple, like a type-level `Object.values()`
+ * @see {@link https://stackoverflow.com/a/68695508/62937 Source}
+ *
+ * @internal
+ */
+export type ObjectValuesToTuple<
+  T,
+  KS extends any[] = TuplifyUnion<keyof T>,
+  R extends any[] = []
+> = KS extends [infer K, ...infer KT]
+  ? ObjectValuesToTuple<T, KT, [...R, T[K & keyof T]]>
+  : R
+
+/**
+ * Create a type that makes the given keys required.
+ * The remaining keys are kept as is.
+ *
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/set-required.d.ts Source}
+ *
+ * @internal
+ */
+export type SetRequired<BaseType, Keys extends keyof BaseType> = Omit<
+  BaseType,
+  Keys
+> &
+  Required<Pick<BaseType, Keys>>
+
+/**
+ * An if-else-like type that resolves depending on whether the given type is `unknown`.
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/if-unknown.d.ts Source}
+ *
+ * @internal
+ */
+export type IfUnknown<T, TypeIfUnknown, TypeIfNotUnknown> = unknown extends T // `T` can be `unknown` or `any`
+  ? [T] extends [null] // `any` can be `null`, but `unknown` can't be
+    ? TypeIfNotUnknown
+    : TypeIfUnknown
+  : TypeIfNotUnknown
+
+/**
+ * When a type is resolves to `unknown`, fallback to a different type.
+ *
+ * @template T - Type to be checked.
+ * @template FallbackTo - Type to fallback to if `T` resolves to `unknown`.
+ *
+ * @internal
+ */
+export type FallbackIfUnknown<T, FallbackTo> = IfUnknown<T, FallbackTo, T>
+
+/**
+ *
+ * -----------------------------------------------------------------------------
+ * -----------------------------------------------------------------------------
+ *
+ * Type Expansion Utilities
+ *
+ * -----------------------------------------------------------------------------
+ * -----------------------------------------------------------------------------
+ *
+ */
+
+/**
+ * Check whether `U` contains `U1`.
+ * @see {@link https://millsp.github.io/ts-toolbelt/modules/union_has.html Source}
+ *
+ * @internal
+ */
+export type Has<U, U1> = [U1] extends [U] ? 1 : 0
+
+/**
+ * @internal
+ */
+export type Boolean2 = 0 | 1
+
+/**
+ * @internal
+ */
+export type If2<B extends Boolean2, Then, Else = never> = B extends 1
+  ? Then
+  : Else
+
+/**
+ * @internal
+ */
+export type BuiltIn =
+  | Function
+  | Error
+  | Date
+  | { readonly [Symbol.toStringTag]: string }
+  | RegExp
+  | Generator
+
+/**
+ * Expand an item a single level.
+ * @see {@link https://stackoverflow.com/a/69288824/62937 Source}
+ *
+ * @internal
+ */
+export type Expand<T> = T extends (...args: infer A) => infer R
+  ? (...args: Expand<A>) => Expand<R>
+  : T extends infer O
+  ? { [K in keyof O]: O[K] }
+  : never
+
+/**
+ * Expand an item recursively.
+ * @see {@link https://stackoverflow.com/a/69288824/62937 Source}
+ *
+ * @internal
+ */
+export type ExpandRecursively<T> = T extends (...args: infer A) => infer R
+  ? (...args: ExpandRecursively<A>) => ExpandRecursively<R>
+  : T extends object
+  ? T extends infer O
+    ? { [K in keyof O]: ExpandRecursively<O[K]> }
+    : never
+  : T
+
+/**
+ * @internal
+ */
+export type Identity<T> = T
+
+/**
+ * Another form of type value expansion
+ * @see {@link https://github.com/microsoft/TypeScript/issues/35247 Source}
+ *
+ * @internal
+ */
+export type Mapped<T> = Identity<{ [k in keyof T]: T[k] }>
+
+/**
+ * This utility type is primarily used to expand a function type in order to
+ * improve its visual display in hover previews within IDEs.
+ *
+ * __Disclaimer:__ Functions expanded using this type will not display their
+ * original JSDoc information in hover previews.
+ *
+ * @template FunctionType - The type of the function to be expanded.
+ *
+ * @internal
+ */
+export type ExpandFunction<FunctionType extends AnyFunction> =
+  FunctionType extends FunctionType
+    ? (...args: Parameters<FunctionType>) => ReturnType<FunctionType>
+    : never
+
+/**
+ * Useful to flatten the type output to improve type hints shown in editors.
+ * And also to transform an interface into a type to aide with assignability.
+ * @see {@link https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts Source}
+ *
+ * @internal
+ */
+export type Simplify<T> = T extends AnyFunction
+  ? T
+  : {
+      [KeyType in keyof T]: T[KeyType]
+    } & AnyNonNullishValue
+
+/**
+ * Fully expand a type, deeply
+ * @see {@link https://github.com/millsp/ts-toolbelt Any.Compute}
+ *
+ * @internal
+ */
+export type ComputeDeep<A, Seen = never> = A extends BuiltIn
+  ? A
+  : If2<
+      Has<Seen, A>,
+      A,
+      A extends any[]
+        ? A extends Record<PropertyKey, any>[]
+          ? ({
+              [K in keyof A[number]]: ComputeDeep<A[number][K], A | Seen>
+            } & unknown)[]
+          : A
+        : A extends readonly any[]
+        ? A extends readonly Record<PropertyKey, any>[]
+          ? readonly ({
+              [K in keyof A[number]]: ComputeDeep<A[number][K], A | Seen>
+            } & unknown)[]
+          : A
+        : { [K in keyof A]: ComputeDeep<A[K], A | Seen> } & unknown
+    >
Index: node_modules/reselect/src/utils.ts
===================================================================
--- node_modules/reselect/src/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/utils.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,156 @@
+import { runIdentityFunctionCheck } from './devModeChecks/identityFunctionCheck'
+import { runInputStabilityCheck } from './devModeChecks/inputStabilityCheck'
+import { globalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'
+// eslint-disable-next-line @typescript-eslint/consistent-type-imports
+import type {
+  DevModeChecks,
+  Selector,
+  SelectorArray,
+  DevModeChecksExecutionInfo
+} from './types'
+
+export const NOT_FOUND = /* @__PURE__ */ Symbol('NOT_FOUND')
+export type NOT_FOUND_TYPE = typeof NOT_FOUND
+
+/**
+ * Assert that the provided value is a function. If the assertion fails,
+ * a `TypeError` is thrown with an optional custom error message.
+ *
+ * @param func - The value to be checked.
+ * @param  errorMessage - An optional custom error message to use if the assertion fails.
+ * @throws A `TypeError` if the assertion fails.
+ */
+export function assertIsFunction<FunctionType extends Function>(
+  func: unknown,
+  errorMessage = `expected a function, instead received ${typeof func}`
+): asserts func is FunctionType {
+  if (typeof func !== 'function') {
+    throw new TypeError(errorMessage)
+  }
+}
+
+/**
+ * Assert that the provided value is an object. If the assertion fails,
+ * a `TypeError` is thrown with an optional custom error message.
+ *
+ * @param object - The value to be checked.
+ * @param  errorMessage - An optional custom error message to use if the assertion fails.
+ * @throws A `TypeError` if the assertion fails.
+ */
+export function assertIsObject<ObjectType extends Record<string, unknown>>(
+  object: unknown,
+  errorMessage = `expected an object, instead received ${typeof object}`
+): asserts object is ObjectType {
+  if (typeof object !== 'object') {
+    throw new TypeError(errorMessage)
+  }
+}
+
+/**
+ * Assert that the provided array is an array of functions. If the assertion fails,
+ * a `TypeError` is thrown with an optional custom error message.
+ *
+ * @param array - The array to be checked.
+ * @param  errorMessage - An optional custom error message to use if the assertion fails.
+ * @throws A `TypeError` if the assertion fails.
+ */
+export function assertIsArrayOfFunctions<FunctionType extends Function>(
+  array: unknown[],
+  errorMessage = `expected all items to be functions, instead received the following types: `
+): asserts array is FunctionType[] {
+  if (
+    !array.every((item): item is FunctionType => typeof item === 'function')
+  ) {
+    const itemTypes = array
+      .map(item =>
+        typeof item === 'function'
+          ? `function ${item.name || 'unnamed'}()`
+          : typeof item
+      )
+      .join(', ')
+    throw new TypeError(`${errorMessage}[${itemTypes}]`)
+  }
+}
+
+/**
+ * Ensure that the input is an array. If it's already an array, it's returned as is.
+ * If it's not an array, it will be wrapped in a new array.
+ *
+ * @param item - The item to be checked.
+ * @returns An array containing the input item. If the input is already an array, it's returned without modification.
+ */
+export const ensureIsArray = (item: unknown) => {
+  return Array.isArray(item) ? item : [item]
+}
+
+/**
+ * Extracts the "dependencies" / "input selectors" from the arguments of `createSelector`.
+ *
+ * @param createSelectorArgs - Arguments passed to `createSelector` as an array.
+ * @returns An array of "input selectors" / "dependencies".
+ * @throws A `TypeError` if any of the input selectors is not function.
+ */
+export function getDependencies(createSelectorArgs: unknown[]) {
+  const dependencies = Array.isArray(createSelectorArgs[0])
+    ? createSelectorArgs[0]
+    : createSelectorArgs
+
+  assertIsArrayOfFunctions<Selector>(
+    dependencies,
+    `createSelector expects all input-selectors to be functions, but received the following types: `
+  )
+
+  return dependencies as SelectorArray
+}
+
+/**
+ * Runs each input selector and returns their collective results as an array.
+ *
+ * @param dependencies - An array of "dependencies" or "input selectors".
+ * @param inputSelectorArgs - An array of arguments being passed to the input selectors.
+ * @returns An array of input selector results.
+ */
+export function collectInputSelectorResults(
+  dependencies: SelectorArray,
+  inputSelectorArgs: unknown[] | IArguments
+) {
+  const inputSelectorResults = []
+  const { length } = dependencies
+  for (let i = 0; i < length; i++) {
+    // @ts-ignore
+    // apply arguments instead of spreading and mutate a local list of params for performance.
+    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs))
+  }
+  return inputSelectorResults
+}
+
+/**
+ * Retrieves execution information for development mode checks.
+ *
+ * @param devModeChecks - Custom Settings for development mode checks. These settings will override the global defaults.
+ * @param firstRun - Indicates whether it is the first time the selector has run.
+ * @returns  An object containing the execution information for each development mode check.
+ */
+export const getDevModeChecksExecutionInfo = (
+  firstRun: boolean,
+  devModeChecks: Partial<DevModeChecks>
+) => {
+  const { identityFunctionCheck, inputStabilityCheck } = {
+    ...globalDevModeChecks,
+    ...devModeChecks
+  }
+  return {
+    identityFunctionCheck: {
+      shouldRun:
+        identityFunctionCheck === 'always' ||
+        (identityFunctionCheck === 'once' && firstRun),
+      run: runIdentityFunctionCheck
+    },
+    inputStabilityCheck: {
+      shouldRun:
+        inputStabilityCheck === 'always' ||
+        (inputStabilityCheck === 'once' && firstRun),
+      run: runInputStabilityCheck
+    }
+  } satisfies DevModeChecksExecutionInfo
+}
Index: node_modules/reselect/src/versionedTypes/index.ts
===================================================================
--- node_modules/reselect/src/versionedTypes/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/versionedTypes/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+export type { MergeParameters } from './ts47-mergeParameters'
Index: node_modules/reselect/src/versionedTypes/ts47-mergeParameters.ts
===================================================================
--- node_modules/reselect/src/versionedTypes/ts47-mergeParameters.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/versionedTypes/ts47-mergeParameters.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+// This entire implementation courtesy of Anders Hjelsberg:
+// https://github.com/microsoft/TypeScript/pull/50831#issuecomment-1253830522
+
+import type { AnyFunction } from '../types'
+
+/**
+ * Represents the longest array within an array of arrays.
+ *
+ * @template ArrayOfTuples An array of arrays.
+ *
+ * @internal
+ */
+type LongestTuple<ArrayOfTuples extends readonly unknown[][]> =
+  ArrayOfTuples extends [infer FirstArray extends unknown[]]
+    ? FirstArray
+    : ArrayOfTuples extends [
+        infer FirstArray,
+        ...infer RestArrays extends unknown[][]
+      ]
+    ? LongerOfTwo<FirstArray, LongestTuple<RestArrays>>
+    : never
+
+/**
+ * Determines the longer of two array types.
+ *
+ * @template ArrayOne First array type.
+ * @template ArrayTwo Second array type.
+ *
+ * @internal
+ */
+type LongerOfTwo<ArrayOne, ArrayTwo> = keyof ArrayTwo extends keyof ArrayOne
+  ? ArrayOne
+  : ArrayTwo
+
+/**
+ * Extracts the element at a specific index in an array.
+ *
+ * @template ArrayType The array type.
+ * @template Index The index type.
+ *
+ * @internal
+ */
+type ElementAt<
+  ArrayType extends unknown[],
+  Index extends PropertyKey
+> = Index extends keyof ArrayType ? ArrayType[Index] : unknown
+
+/**
+ * Maps each array in an array of arrays to its element at a given index.
+ *
+ * @template ArrayOfTuples An array of arrays.
+ * @template Index The index to extract from each array.
+ *
+ * @internal
+ */
+type ElementsAtGivenIndex<
+  ArrayOfTuples extends readonly unknown[][],
+  Index extends PropertyKey
+> = {
+  [ArrayIndex in keyof ArrayOfTuples]: ElementAt<
+    ArrayOfTuples[ArrayIndex],
+    Index
+  >
+}
+
+/**
+ * Computes the intersection of all types in a tuple.
+ *
+ * @template Tuple A tuple of types.
+ *
+ * @internal
+ */
+type Intersect<Tuple extends readonly unknown[]> = Tuple extends []
+  ? unknown
+  : Tuple extends [infer Head, ...infer Tail]
+  ? Head & Intersect<Tail>
+  : Tuple[number]
+
+/**
+ * Merges a tuple of arrays into a single tuple, intersecting types at each index.
+ *
+ * @template ArrayOfTuples An array of tuples.
+ * @template LongestArray The longest array in ArrayOfTuples.
+ *
+ * @internal
+ */
+type MergeTuples<
+  ArrayOfTuples extends readonly unknown[][],
+  LongestArray extends unknown[] = LongestTuple<ArrayOfTuples>
+> = {
+  [Index in keyof LongestArray]: Intersect<
+    ElementsAtGivenIndex<ArrayOfTuples, Index>
+  >
+}
+
+/**
+ * Extracts the parameter types from a tuple of functions.
+ *
+ * @template FunctionsArray An array of function types.
+ *
+ * @internal
+ */
+type ExtractParameters<FunctionsArray extends readonly AnyFunction[]> = {
+  [Index in keyof FunctionsArray]: Parameters<FunctionsArray[Index]>
+}
+
+/**
+ * Merges the parameters of a tuple of functions into a single tuple.
+ *
+ * @template FunctionsArray An array of function types.
+ *
+ * @internal
+ */
+export type MergeParameters<FunctionsArray extends readonly AnyFunction[]> =
+  '0' extends keyof FunctionsArray
+    ? MergeTuples<ExtractParameters<FunctionsArray>>
+    : Parameters<FunctionsArray[number]>
Index: node_modules/reselect/src/weakMapMemoize.ts
===================================================================
--- node_modules/reselect/src/weakMapMemoize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/reselect/src/weakMapMemoize.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,269 @@
+// Original source:
+// - https://github.com/facebook/react/blob/0b974418c9a56f6c560298560265dcf4b65784bc/packages/react/src/ReactCache.js
+
+import type {
+  AnyFunction,
+  DefaultMemoizeFields,
+  EqualityFn,
+  Simplify
+} from './types'
+
+class StrongRef<T> {
+  constructor(private value: T) {}
+  deref() {
+    return this.value
+  }
+}
+
+const Ref =
+  typeof WeakRef !== 'undefined'
+    ? WeakRef
+    : (StrongRef as unknown as typeof WeakRef)
+
+const UNTERMINATED = 0
+const TERMINATED = 1
+
+interface UnterminatedCacheNode<T> {
+  /**
+   * Status, represents whether the cached computation returned a value or threw an error.
+   */
+  s: 0
+  /**
+   * Value, either the cached result or an error, depending on status.
+   */
+  v: void
+  /**
+   * Object cache, a `WeakMap` where non-primitive arguments are stored.
+   */
+  o: null | WeakMap<Function | Object, CacheNode<T>>
+  /**
+   * Primitive cache, a regular Map where primitive arguments are stored.
+   */
+  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>
+}
+
+interface TerminatedCacheNode<T> {
+  /**
+   * Status, represents whether the cached computation returned a value or threw an error.
+   */
+  s: 1
+  /**
+   * Value, either the cached result or an error, depending on status.
+   */
+  v: T
+  /**
+   * Object cache, a `WeakMap` where non-primitive arguments are stored.
+   */
+  o: null | WeakMap<Function | Object, CacheNode<T>>
+  /**
+   * Primitive cache, a regular `Map` where primitive arguments are stored.
+   */
+  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>
+}
+
+type CacheNode<T> = TerminatedCacheNode<T> | UnterminatedCacheNode<T>
+
+function createCacheNode<T>(): CacheNode<T> {
+  return {
+    s: UNTERMINATED,
+    v: undefined,
+    o: null,
+    p: null
+  }
+}
+
+/**
+ * Configuration options for a memoization function utilizing `WeakMap` for
+ * its caching mechanism.
+ *
+ * @template Result - The type of the return value of the memoized function.
+ *
+ * @since 5.0.0
+ * @public
+ */
+export interface WeakMapMemoizeOptions<Result = any> {
+  /**
+   * If provided, used to compare a newly generated output value against previous values in the cache.
+   * If a match is found, the old value is returned. This addresses the common
+   * ```ts
+   * todos.map(todo => todo.id)
+   * ```
+   * use case, where an update to another field in the original data causes a recalculation
+   * due to changed references, but the output is still effectively the same.
+   *
+   * @since 5.0.0
+   */
+  resultEqualityCheck?: EqualityFn<Result>
+}
+
+/**
+ * Creates a tree of `WeakMap`-based cache nodes based on the identity of the
+ * arguments it's been called with (in this case, the extracted values from your input selectors).
+ * This allows `weakMapMemoize` to have an effectively infinite cache size.
+ * Cache results will be kept in memory as long as references to the arguments still exist,
+ * and then cleared out as the arguments are garbage-collected.
+ *
+ * __Design Tradeoffs for `weakMapMemoize`:__
+ * - Pros:
+ *   - It has an effectively infinite cache size, but you have no control over
+ *   how long values are kept in cache as it's based on garbage collection and `WeakMap`s.
+ * - Cons:
+ *   - There's currently no way to alter the argument comparisons.
+ *   They're based on strict reference equality.
+ *   - It's roughly the same speed as `lruMemoize`, although likely a fraction slower.
+ *
+ * __Use Cases for `weakMapMemoize`:__
+ * - This memoizer is likely best used for cases where you need to call the
+ * same selector instance with many different arguments, such as a single
+ * selector instance that is used in a list item component and called with
+ * item IDs like:
+ *   ```ts
+ *   useSelector(state => selectSomeData(state, props.category))
+ *   ```
+ * @param func - The function to be memoized.
+ * @returns A memoized function with a `.clearCache()` method attached.
+ *
+ * @example
+ * <caption>Using `createSelector`</caption>
+ * ```ts
+ * import { createSelector, weakMapMemoize } from 'reselect'
+ *
+ * interface RootState {
+ *   items: { id: number; category: string; name: string }[]
+ * }
+ *
+ * const selectItemsByCategory = createSelector(
+ *   [
+ *     (state: RootState) => state.items,
+ *     (state: RootState, category: string) => category
+ *   ],
+ *   (items, category) => items.filter(item => item.category === category),
+ *   {
+ *     memoize: weakMapMemoize,
+ *     argsMemoize: weakMapMemoize
+ *   }
+ * )
+ * ```
+ *
+ * @example
+ * <caption>Using `createSelectorCreator`</caption>
+ * ```ts
+ * import { createSelectorCreator, weakMapMemoize } from 'reselect'
+ *
+ * const createSelectorWeakMap = createSelectorCreator({ memoize: weakMapMemoize, argsMemoize: weakMapMemoize })
+ *
+ * const selectItemsByCategory = createSelectorWeakMap(
+ *   [
+ *     (state: RootState) => state.items,
+ *     (state: RootState, category: string) => category
+ *   ],
+ *   (items, category) => items.filter(item => item.category === category)
+ * )
+ * ```
+ *
+ * @template Func - The type of the function that is memoized.
+ *
+ * @see {@link https://reselect.js.org/api/weakMapMemoize `weakMapMemoize`}
+ *
+ * @since 5.0.0
+ * @public
+ * @experimental
+ */
+export function weakMapMemoize<Func extends AnyFunction>(
+  func: Func,
+  options: WeakMapMemoizeOptions<ReturnType<Func>> = {}
+) {
+  let fnNode = createCacheNode()
+  const { resultEqualityCheck } = options
+
+  let lastResult: WeakRef<object> | undefined
+
+  let resultsCount = 0
+
+  function memoized() {
+    let cacheNode = fnNode
+    const { length } = arguments
+    for (let i = 0, l = length; i < l; i++) {
+      const arg = arguments[i]
+      if (
+        typeof arg === 'function' ||
+        (typeof arg === 'object' && arg !== null)
+      ) {
+        // Objects go into a WeakMap
+        let objectCache = cacheNode.o
+        if (objectCache === null) {
+          cacheNode.o = objectCache = new WeakMap()
+        }
+        const objectNode = objectCache.get(arg)
+        if (objectNode === undefined) {
+          cacheNode = createCacheNode()
+          objectCache.set(arg, cacheNode)
+        } else {
+          cacheNode = objectNode
+        }
+      } else {
+        // Primitives go into a regular Map
+        let primitiveCache = cacheNode.p
+        if (primitiveCache === null) {
+          cacheNode.p = primitiveCache = new Map()
+        }
+        const primitiveNode = primitiveCache.get(arg)
+        if (primitiveNode === undefined) {
+          cacheNode = createCacheNode()
+          primitiveCache.set(arg, cacheNode)
+        } else {
+          cacheNode = primitiveNode
+        }
+      }
+    }
+
+    const terminatedNode = cacheNode as unknown as TerminatedCacheNode<any>
+
+    let result
+
+    if (cacheNode.s === TERMINATED) {
+      result = cacheNode.v
+    } else {
+      // Allow errors to propagate
+      result = func.apply(null, arguments as unknown as any[])
+      resultsCount++
+
+      if (resultEqualityCheck) {
+        const lastResultValue = lastResult?.deref?.() ?? lastResult
+
+        if (
+          lastResultValue != null &&
+          resultEqualityCheck(lastResultValue as ReturnType<Func>, result)
+        ) {
+          result = lastResultValue
+
+          resultsCount !== 0 && resultsCount--
+        }
+
+        const needsWeakRef =
+          (typeof result === 'object' && result !== null) ||
+          typeof result === 'function'
+
+        lastResult = needsWeakRef ? new Ref(result) : result
+      }
+    }
+
+    terminatedNode.s = TERMINATED
+
+    terminatedNode.v = result
+    return result
+  }
+
+  memoized.clearCache = () => {
+    fnNode = createCacheNode()
+    memoized.resetResultsCount()
+  }
+
+  memoized.resultsCount = () => resultsCount
+
+  memoized.resetResultsCount = () => {
+    resultsCount = 0
+  }
+
+  return memoized as Func & Simplify<DefaultMemoizeFields>
+}
Index: node_modules/scheduler/LICENSE
===================================================================
--- node_modules/scheduler/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/scheduler/README.md
===================================================================
--- node_modules/scheduler/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+# `scheduler`
+
+This is a package for cooperative scheduling in a browser environment. It is currently used internally by React, but we plan to make it more generic.
+
+The public API for this package is not yet finalized.
+
+### Thanks
+
+The React team thanks [Anton Podviaznikov](https://podviaznikov.com/) for donating the `scheduler` package name.
Index: node_modules/scheduler/cjs/scheduler-unstable_mock.development.js
===================================================================
--- node_modules/scheduler/cjs/scheduler-unstable_mock.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/cjs/scheduler-unstable_mock.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,414 @@
+/**
+ * @license React
+ * scheduler-unstable_mock.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function push(heap, node) {
+      var index = heap.length;
+      heap.push(node);
+      a: for (; 0 < index; ) {
+        var parentIndex = (index - 1) >>> 1,
+          parent = heap[parentIndex];
+        if (0 < compare(parent, node))
+          (heap[parentIndex] = node),
+            (heap[index] = parent),
+            (index = parentIndex);
+        else break a;
+      }
+    }
+    function peek(heap) {
+      return 0 === heap.length ? null : heap[0];
+    }
+    function pop(heap) {
+      if (0 === heap.length) return null;
+      var first = heap[0],
+        last = heap.pop();
+      if (last !== first) {
+        heap[0] = last;
+        a: for (
+          var index = 0, length = heap.length, halfLength = length >>> 1;
+          index < halfLength;
+
+        ) {
+          var leftIndex = 2 * (index + 1) - 1,
+            left = heap[leftIndex],
+            rightIndex = leftIndex + 1,
+            right = heap[rightIndex];
+          if (0 > compare(left, last))
+            rightIndex < length && 0 > compare(right, left)
+              ? ((heap[index] = right),
+                (heap[rightIndex] = last),
+                (index = rightIndex))
+              : ((heap[index] = left),
+                (heap[leftIndex] = last),
+                (index = leftIndex));
+          else if (rightIndex < length && 0 > compare(right, last))
+            (heap[index] = right),
+              (heap[rightIndex] = last),
+              (index = rightIndex);
+          else break a;
+        }
+      }
+      return first;
+    }
+    function compare(a, b) {
+      var diff = a.sortIndex - b.sortIndex;
+      return 0 !== diff ? diff : a.id - b.id;
+    }
+    function advanceTimers(currentTime) {
+      for (var timer = peek(timerQueue); null !== timer; ) {
+        if (null === timer.callback) pop(timerQueue);
+        else if (timer.startTime <= currentTime)
+          pop(timerQueue),
+            (timer.sortIndex = timer.expirationTime),
+            push(taskQueue, timer);
+        else break;
+        timer = peek(timerQueue);
+      }
+    }
+    function handleTimeout(currentTime) {
+      isHostTimeoutScheduled = !1;
+      advanceTimers(currentTime);
+      if (!isHostCallbackScheduled)
+        if (null !== peek(taskQueue))
+          (isHostCallbackScheduled = !0), (scheduledCallback = flushWork);
+        else {
+          var firstTimer = peek(timerQueue);
+          null !== firstTimer &&
+            ((currentTime = firstTimer.startTime - currentTime),
+            (scheduledTimeout = handleTimeout),
+            (timeoutTime = currentMockTime + currentTime));
+        }
+    }
+    function flushWork(hasTimeRemaining, initialTime) {
+      isHostCallbackScheduled = !1;
+      isHostTimeoutScheduled &&
+        ((isHostTimeoutScheduled = !1),
+        (scheduledTimeout = null),
+        (timeoutTime = -1));
+      isPerformingWork = !0;
+      var previousPriorityLevel = currentPriorityLevel;
+      try {
+        a: {
+          advanceTimers(initialTime);
+          for (
+            currentTask = peek(taskQueue);
+            null !== currentTask &&
+            (!(currentTask.expirationTime > initialTime) ||
+              (hasTimeRemaining && !shouldYieldToHost()));
+
+          ) {
+            var callback = currentTask.callback;
+            if ("function" === typeof callback) {
+              currentTask.callback = null;
+              currentPriorityLevel = currentTask.priorityLevel;
+              var continuationCallback = callback(
+                currentTask.expirationTime <= initialTime
+              );
+              initialTime = currentMockTime;
+              if ("function" === typeof continuationCallback) {
+                if (
+                  ((currentTask.callback = continuationCallback),
+                  advanceTimers(initialTime),
+                  shouldYieldForPaint)
+                ) {
+                  var JSCompiler_inline_result = (needsPaint = !0);
+                  break a;
+                }
+              } else
+                currentTask === peek(taskQueue) && pop(taskQueue),
+                  advanceTimers(initialTime);
+            } else pop(taskQueue);
+            currentTask = peek(taskQueue);
+          }
+          if (null !== currentTask) JSCompiler_inline_result = !0;
+          else {
+            var firstTimer = peek(timerQueue);
+            if (null !== firstTimer) {
+              var ms = firstTimer.startTime - initialTime;
+              scheduledTimeout = handleTimeout;
+              timeoutTime = currentMockTime + ms;
+            }
+            JSCompiler_inline_result = !1;
+          }
+        }
+        return JSCompiler_inline_result;
+      } finally {
+        (currentTask = null),
+          (currentPriorityLevel = previousPriorityLevel),
+          (isPerformingWork = !1);
+      }
+    }
+    function shouldYieldToHost() {
+      return (0 === expectedNumberOfYields && null === yieldedValues) ||
+        (-1 !== expectedNumberOfYields &&
+          null !== yieldedValues &&
+          yieldedValues.length >= expectedNumberOfYields) ||
+        (shouldYieldForPaint && needsPaint)
+        ? (didStop = !0)
+        : !1;
+    }
+    function unstable_flushAllWithoutAsserting() {
+      if (isFlushing) throw Error("Already flushing work.");
+      if (null !== scheduledCallback) {
+        var cb = scheduledCallback;
+        isFlushing = !0;
+        try {
+          var hasMoreWork = !0;
+          do hasMoreWork = cb(!0, currentMockTime);
+          while (hasMoreWork);
+          hasMoreWork || (scheduledCallback = null);
+          return !0;
+        } finally {
+          isFlushing = !1;
+        }
+      } else return !1;
+    }
+    var taskQueue = [],
+      timerQueue = [],
+      taskIdCounter = 1,
+      currentTask = null,
+      currentPriorityLevel = 3,
+      isPerformingWork = !1,
+      isHostCallbackScheduled = !1,
+      isHostTimeoutScheduled = !1,
+      currentMockTime = 0,
+      scheduledCallback = null,
+      scheduledTimeout = null,
+      timeoutTime = -1,
+      yieldedValues = null,
+      expectedNumberOfYields = -1,
+      didStop = !1,
+      isFlushing = !1,
+      needsPaint = !1,
+      shouldYieldForPaint = !1,
+      disableYieldValue = !1;
+    exports.log = function (value) {
+      "disabledLog" === console.log.name ||
+        disableYieldValue ||
+        (null === yieldedValues
+          ? (yieldedValues = [value])
+          : yieldedValues.push(value));
+    };
+    exports.reset = function () {
+      if (isFlushing) throw Error("Cannot reset while already flushing work.");
+      currentMockTime = 0;
+      scheduledTimeout = scheduledCallback = null;
+      timeoutTime = -1;
+      yieldedValues = null;
+      expectedNumberOfYields = -1;
+      needsPaint = isFlushing = didStop = !1;
+    };
+    exports.unstable_IdlePriority = 5;
+    exports.unstable_ImmediatePriority = 1;
+    exports.unstable_LowPriority = 4;
+    exports.unstable_NormalPriority = 3;
+    exports.unstable_Profiling = null;
+    exports.unstable_UserBlockingPriority = 2;
+    exports.unstable_advanceTime = function (ms) {
+      "disabledLog" === console.log.name ||
+        disableYieldValue ||
+        ((currentMockTime += ms),
+        null !== scheduledTimeout &&
+          timeoutTime <= currentMockTime &&
+          (scheduledTimeout(currentMockTime),
+          (timeoutTime = -1),
+          (scheduledTimeout = null)));
+    };
+    exports.unstable_cancelCallback = function (task) {
+      task.callback = null;
+    };
+    exports.unstable_clearLog = function () {
+      if (null === yieldedValues) return [];
+      var values = yieldedValues;
+      yieldedValues = null;
+      return values;
+    };
+    exports.unstable_flushAll = function () {
+      if (null !== yieldedValues)
+        throw Error(
+          "Log is not empty. Assert on the log of yielded values before flushing additional work."
+        );
+      unstable_flushAllWithoutAsserting();
+      if (null !== yieldedValues)
+        throw Error(
+          "While flushing work, something yielded a value. Use an assertion helper to assert on the log of yielded values, e.g. expect(Scheduler).toFlushAndYield([...])"
+        );
+    };
+    exports.unstable_flushAllWithoutAsserting =
+      unstable_flushAllWithoutAsserting;
+    exports.unstable_flushExpired = function () {
+      if (isFlushing) throw Error("Already flushing work.");
+      if (null !== scheduledCallback) {
+        isFlushing = !0;
+        try {
+          scheduledCallback(!1, currentMockTime) || (scheduledCallback = null);
+        } finally {
+          isFlushing = !1;
+        }
+      }
+    };
+    exports.unstable_flushNumberOfYields = function (count) {
+      if (isFlushing) throw Error("Already flushing work.");
+      if (null !== scheduledCallback) {
+        var cb = scheduledCallback;
+        expectedNumberOfYields = count;
+        isFlushing = !0;
+        try {
+          count = !0;
+          do count = cb(!0, currentMockTime);
+          while (count && !didStop);
+          count || (scheduledCallback = null);
+        } finally {
+          (expectedNumberOfYields = -1), (isFlushing = didStop = !1);
+        }
+      }
+    };
+    exports.unstable_flushUntilNextPaint = function () {
+      if (isFlushing) throw Error("Already flushing work.");
+      if (null !== scheduledCallback) {
+        var cb = scheduledCallback;
+        shouldYieldForPaint = !0;
+        needsPaint = !1;
+        isFlushing = !0;
+        try {
+          var hasMoreWork = !0;
+          do hasMoreWork = cb(!0, currentMockTime);
+          while (hasMoreWork && !didStop);
+          hasMoreWork || (scheduledCallback = null);
+        } finally {
+          isFlushing = didStop = shouldYieldForPaint = !1;
+        }
+      }
+      return !1;
+    };
+    exports.unstable_forceFrameRate = function () {};
+    exports.unstable_getCurrentPriorityLevel = function () {
+      return currentPriorityLevel;
+    };
+    exports.unstable_hasPendingWork = function () {
+      return null !== scheduledCallback;
+    };
+    exports.unstable_next = function (eventHandler) {
+      switch (currentPriorityLevel) {
+        case 1:
+        case 2:
+        case 3:
+          var priorityLevel = 3;
+          break;
+        default:
+          priorityLevel = currentPriorityLevel;
+      }
+      var previousPriorityLevel = currentPriorityLevel;
+      currentPriorityLevel = priorityLevel;
+      try {
+        return eventHandler();
+      } finally {
+        currentPriorityLevel = previousPriorityLevel;
+      }
+    };
+    exports.unstable_now = function () {
+      return currentMockTime;
+    };
+    exports.unstable_requestPaint = function () {
+      needsPaint = !0;
+    };
+    exports.unstable_runWithPriority = function (priorityLevel, eventHandler) {
+      switch (priorityLevel) {
+        case 1:
+        case 2:
+        case 3:
+        case 4:
+        case 5:
+          break;
+        default:
+          priorityLevel = 3;
+      }
+      var previousPriorityLevel = currentPriorityLevel;
+      currentPriorityLevel = priorityLevel;
+      try {
+        return eventHandler();
+      } finally {
+        currentPriorityLevel = previousPriorityLevel;
+      }
+    };
+    exports.unstable_scheduleCallback = function (
+      priorityLevel,
+      callback,
+      options
+    ) {
+      var currentTime = currentMockTime;
+      "object" === typeof options && null !== options
+        ? ((options = options.delay),
+          (options =
+            "number" === typeof options && 0 < options
+              ? currentTime + options
+              : currentTime))
+        : (options = currentTime);
+      switch (priorityLevel) {
+        case 1:
+          var timeout = -1;
+          break;
+        case 2:
+          timeout = 250;
+          break;
+        case 5:
+          timeout = 1073741823;
+          break;
+        case 4:
+          timeout = 1e4;
+          break;
+        default:
+          timeout = 5e3;
+      }
+      timeout = options + timeout;
+      priorityLevel = {
+        id: taskIdCounter++,
+        callback: callback,
+        priorityLevel: priorityLevel,
+        startTime: options,
+        expirationTime: timeout,
+        sortIndex: -1
+      };
+      options > currentTime
+        ? ((priorityLevel.sortIndex = options),
+          push(timerQueue, priorityLevel),
+          null === peek(taskQueue) &&
+            priorityLevel === peek(timerQueue) &&
+            (isHostTimeoutScheduled
+              ? ((scheduledTimeout = null), (timeoutTime = -1))
+              : (isHostTimeoutScheduled = !0),
+            (scheduledTimeout = handleTimeout),
+            (timeoutTime = currentMockTime + (options - currentTime))))
+        : ((priorityLevel.sortIndex = timeout),
+          push(taskQueue, priorityLevel),
+          isHostCallbackScheduled ||
+            isPerformingWork ||
+            ((isHostCallbackScheduled = !0), (scheduledCallback = flushWork)));
+      return priorityLevel;
+    };
+    exports.unstable_setDisableYieldValue = function (newValue) {
+      disableYieldValue = newValue;
+    };
+    exports.unstable_shouldYield = shouldYieldToHost;
+    exports.unstable_wrapCallback = function (callback) {
+      var parentPriorityLevel = currentPriorityLevel;
+      return function () {
+        var previousPriorityLevel = currentPriorityLevel;
+        currentPriorityLevel = parentPriorityLevel;
+        try {
+          return callback.apply(this, arguments);
+        } finally {
+          currentPriorityLevel = previousPriorityLevel;
+        }
+      };
+    };
+  })();
Index: node_modules/scheduler/cjs/scheduler-unstable_mock.production.js
===================================================================
--- node_modules/scheduler/cjs/scheduler-unstable_mock.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/cjs/scheduler-unstable_mock.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,406 @@
+/**
+ * @license React
+ * scheduler-unstable_mock.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+function push(heap, node) {
+  var index = heap.length;
+  heap.push(node);
+  a: for (; 0 < index; ) {
+    var parentIndex = (index - 1) >>> 1,
+      parent = heap[parentIndex];
+    if (0 < compare(parent, node))
+      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);
+    else break a;
+  }
+}
+function peek(heap) {
+  return 0 === heap.length ? null : heap[0];
+}
+function pop(heap) {
+  if (0 === heap.length) return null;
+  var first = heap[0],
+    last = heap.pop();
+  if (last !== first) {
+    heap[0] = last;
+    a: for (
+      var index = 0, length = heap.length, halfLength = length >>> 1;
+      index < halfLength;
+
+    ) {
+      var leftIndex = 2 * (index + 1) - 1,
+        left = heap[leftIndex],
+        rightIndex = leftIndex + 1,
+        right = heap[rightIndex];
+      if (0 > compare(left, last))
+        rightIndex < length && 0 > compare(right, left)
+          ? ((heap[index] = right),
+            (heap[rightIndex] = last),
+            (index = rightIndex))
+          : ((heap[index] = left),
+            (heap[leftIndex] = last),
+            (index = leftIndex));
+      else if (rightIndex < length && 0 > compare(right, last))
+        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);
+      else break a;
+    }
+  }
+  return first;
+}
+function compare(a, b) {
+  var diff = a.sortIndex - b.sortIndex;
+  return 0 !== diff ? diff : a.id - b.id;
+}
+var taskQueue = [],
+  timerQueue = [],
+  taskIdCounter = 1,
+  currentTask = null,
+  currentPriorityLevel = 3,
+  isPerformingWork = !1,
+  isHostCallbackScheduled = !1,
+  isHostTimeoutScheduled = !1,
+  currentMockTime = 0,
+  scheduledCallback = null,
+  scheduledTimeout = null,
+  timeoutTime = -1,
+  yieldedValues = null,
+  expectedNumberOfYields = -1,
+  didStop = !1,
+  isFlushing = !1,
+  needsPaint = !1,
+  shouldYieldForPaint = !1,
+  disableYieldValue = !1;
+function advanceTimers(currentTime) {
+  for (var timer = peek(timerQueue); null !== timer; ) {
+    if (null === timer.callback) pop(timerQueue);
+    else if (timer.startTime <= currentTime)
+      pop(timerQueue),
+        (timer.sortIndex = timer.expirationTime),
+        push(taskQueue, timer);
+    else break;
+    timer = peek(timerQueue);
+  }
+}
+function handleTimeout(currentTime) {
+  isHostTimeoutScheduled = !1;
+  advanceTimers(currentTime);
+  if (!isHostCallbackScheduled)
+    if (null !== peek(taskQueue))
+      (isHostCallbackScheduled = !0), (scheduledCallback = flushWork);
+    else {
+      var firstTimer = peek(timerQueue);
+      null !== firstTimer &&
+        ((currentTime = firstTimer.startTime - currentTime),
+        (scheduledTimeout = handleTimeout),
+        (timeoutTime = currentMockTime + currentTime));
+    }
+}
+function flushWork(hasTimeRemaining, initialTime) {
+  isHostCallbackScheduled = !1;
+  isHostTimeoutScheduled &&
+    ((isHostTimeoutScheduled = !1),
+    (scheduledTimeout = null),
+    (timeoutTime = -1));
+  isPerformingWork = !0;
+  var previousPriorityLevel = currentPriorityLevel;
+  try {
+    a: {
+      advanceTimers(initialTime);
+      for (
+        currentTask = peek(taskQueue);
+        null !== currentTask &&
+        (!(currentTask.expirationTime > initialTime) ||
+          (hasTimeRemaining && !shouldYieldToHost()));
+
+      ) {
+        var callback = currentTask.callback;
+        if ("function" === typeof callback) {
+          currentTask.callback = null;
+          currentPriorityLevel = currentTask.priorityLevel;
+          var continuationCallback = callback(
+            currentTask.expirationTime <= initialTime
+          );
+          initialTime = currentMockTime;
+          if ("function" === typeof continuationCallback) {
+            if (
+              ((currentTask.callback = continuationCallback),
+              advanceTimers(initialTime),
+              shouldYieldForPaint)
+            ) {
+              var JSCompiler_inline_result = (needsPaint = !0);
+              break a;
+            }
+          } else
+            currentTask === peek(taskQueue) && pop(taskQueue),
+              advanceTimers(initialTime);
+        } else pop(taskQueue);
+        currentTask = peek(taskQueue);
+      }
+      if (null !== currentTask) JSCompiler_inline_result = !0;
+      else {
+        var firstTimer = peek(timerQueue);
+        if (null !== firstTimer) {
+          var ms = firstTimer.startTime - initialTime;
+          scheduledTimeout = handleTimeout;
+          timeoutTime = currentMockTime + ms;
+        }
+        JSCompiler_inline_result = !1;
+      }
+    }
+    return JSCompiler_inline_result;
+  } finally {
+    (currentTask = null),
+      (currentPriorityLevel = previousPriorityLevel),
+      (isPerformingWork = !1);
+  }
+}
+function shouldYieldToHost() {
+  return (0 === expectedNumberOfYields && null === yieldedValues) ||
+    (-1 !== expectedNumberOfYields &&
+      null !== yieldedValues &&
+      yieldedValues.length >= expectedNumberOfYields) ||
+    (shouldYieldForPaint && needsPaint)
+    ? (didStop = !0)
+    : !1;
+}
+function unstable_flushAllWithoutAsserting() {
+  if (isFlushing) throw Error("Already flushing work.");
+  if (null !== scheduledCallback) {
+    var cb = scheduledCallback;
+    isFlushing = !0;
+    try {
+      var hasMoreWork = !0;
+      do hasMoreWork = cb(!0, currentMockTime);
+      while (hasMoreWork);
+      hasMoreWork || (scheduledCallback = null);
+      return !0;
+    } finally {
+      isFlushing = !1;
+    }
+  } else return !1;
+}
+exports.log = function (value) {
+  "disabledLog" === console.log.name ||
+    disableYieldValue ||
+    (null === yieldedValues
+      ? (yieldedValues = [value])
+      : yieldedValues.push(value));
+};
+exports.reset = function () {
+  if (isFlushing) throw Error("Cannot reset while already flushing work.");
+  currentMockTime = 0;
+  scheduledTimeout = scheduledCallback = null;
+  timeoutTime = -1;
+  yieldedValues = null;
+  expectedNumberOfYields = -1;
+  needsPaint = isFlushing = didStop = !1;
+};
+exports.unstable_IdlePriority = 5;
+exports.unstable_ImmediatePriority = 1;
+exports.unstable_LowPriority = 4;
+exports.unstable_NormalPriority = 3;
+exports.unstable_Profiling = null;
+exports.unstable_UserBlockingPriority = 2;
+exports.unstable_advanceTime = function (ms) {
+  "disabledLog" === console.log.name ||
+    disableYieldValue ||
+    ((currentMockTime += ms),
+    null !== scheduledTimeout &&
+      timeoutTime <= currentMockTime &&
+      (scheduledTimeout(currentMockTime),
+      (timeoutTime = -1),
+      (scheduledTimeout = null)));
+};
+exports.unstable_cancelCallback = function (task) {
+  task.callback = null;
+};
+exports.unstable_clearLog = function () {
+  if (null === yieldedValues) return [];
+  var values = yieldedValues;
+  yieldedValues = null;
+  return values;
+};
+exports.unstable_flushAll = function () {
+  if (null !== yieldedValues)
+    throw Error(
+      "Log is not empty. Assert on the log of yielded values before flushing additional work."
+    );
+  unstable_flushAllWithoutAsserting();
+  if (null !== yieldedValues)
+    throw Error(
+      "While flushing work, something yielded a value. Use an assertion helper to assert on the log of yielded values, e.g. expect(Scheduler).toFlushAndYield([...])"
+    );
+};
+exports.unstable_flushAllWithoutAsserting = unstable_flushAllWithoutAsserting;
+exports.unstable_flushExpired = function () {
+  if (isFlushing) throw Error("Already flushing work.");
+  if (null !== scheduledCallback) {
+    isFlushing = !0;
+    try {
+      scheduledCallback(!1, currentMockTime) || (scheduledCallback = null);
+    } finally {
+      isFlushing = !1;
+    }
+  }
+};
+exports.unstable_flushNumberOfYields = function (count) {
+  if (isFlushing) throw Error("Already flushing work.");
+  if (null !== scheduledCallback) {
+    var cb = scheduledCallback;
+    expectedNumberOfYields = count;
+    isFlushing = !0;
+    try {
+      count = !0;
+      do count = cb(!0, currentMockTime);
+      while (count && !didStop);
+      count || (scheduledCallback = null);
+    } finally {
+      (expectedNumberOfYields = -1), (isFlushing = didStop = !1);
+    }
+  }
+};
+exports.unstable_flushUntilNextPaint = function () {
+  if (isFlushing) throw Error("Already flushing work.");
+  if (null !== scheduledCallback) {
+    var cb = scheduledCallback;
+    shouldYieldForPaint = !0;
+    needsPaint = !1;
+    isFlushing = !0;
+    try {
+      var hasMoreWork = !0;
+      do hasMoreWork = cb(!0, currentMockTime);
+      while (hasMoreWork && !didStop);
+      hasMoreWork || (scheduledCallback = null);
+    } finally {
+      isFlushing = didStop = shouldYieldForPaint = !1;
+    }
+  }
+  return !1;
+};
+exports.unstable_forceFrameRate = function () {};
+exports.unstable_getCurrentPriorityLevel = function () {
+  return currentPriorityLevel;
+};
+exports.unstable_hasPendingWork = function () {
+  return null !== scheduledCallback;
+};
+exports.unstable_next = function (eventHandler) {
+  switch (currentPriorityLevel) {
+    case 1:
+    case 2:
+    case 3:
+      var priorityLevel = 3;
+      break;
+    default:
+      priorityLevel = currentPriorityLevel;
+  }
+  var previousPriorityLevel = currentPriorityLevel;
+  currentPriorityLevel = priorityLevel;
+  try {
+    return eventHandler();
+  } finally {
+    currentPriorityLevel = previousPriorityLevel;
+  }
+};
+exports.unstable_now = function () {
+  return currentMockTime;
+};
+exports.unstable_requestPaint = function () {
+  needsPaint = !0;
+};
+exports.unstable_runWithPriority = function (priorityLevel, eventHandler) {
+  switch (priorityLevel) {
+    case 1:
+    case 2:
+    case 3:
+    case 4:
+    case 5:
+      break;
+    default:
+      priorityLevel = 3;
+  }
+  var previousPriorityLevel = currentPriorityLevel;
+  currentPriorityLevel = priorityLevel;
+  try {
+    return eventHandler();
+  } finally {
+    currentPriorityLevel = previousPriorityLevel;
+  }
+};
+exports.unstable_scheduleCallback = function (
+  priorityLevel,
+  callback,
+  options
+) {
+  var currentTime = currentMockTime;
+  "object" === typeof options && null !== options
+    ? ((options = options.delay),
+      (options =
+        "number" === typeof options && 0 < options
+          ? currentTime + options
+          : currentTime))
+    : (options = currentTime);
+  switch (priorityLevel) {
+    case 1:
+      var timeout = -1;
+      break;
+    case 2:
+      timeout = 250;
+      break;
+    case 5:
+      timeout = 1073741823;
+      break;
+    case 4:
+      timeout = 1e4;
+      break;
+    default:
+      timeout = 5e3;
+  }
+  timeout = options + timeout;
+  priorityLevel = {
+    id: taskIdCounter++,
+    callback: callback,
+    priorityLevel: priorityLevel,
+    startTime: options,
+    expirationTime: timeout,
+    sortIndex: -1
+  };
+  options > currentTime
+    ? ((priorityLevel.sortIndex = options),
+      push(timerQueue, priorityLevel),
+      null === peek(taskQueue) &&
+        priorityLevel === peek(timerQueue) &&
+        (isHostTimeoutScheduled
+          ? ((scheduledTimeout = null), (timeoutTime = -1))
+          : (isHostTimeoutScheduled = !0),
+        (scheduledTimeout = handleTimeout),
+        (timeoutTime = currentMockTime + (options - currentTime))))
+    : ((priorityLevel.sortIndex = timeout),
+      push(taskQueue, priorityLevel),
+      isHostCallbackScheduled ||
+        isPerformingWork ||
+        ((isHostCallbackScheduled = !0), (scheduledCallback = flushWork)));
+  return priorityLevel;
+};
+exports.unstable_setDisableYieldValue = function (newValue) {
+  disableYieldValue = newValue;
+};
+exports.unstable_shouldYield = shouldYieldToHost;
+exports.unstable_wrapCallback = function (callback) {
+  var parentPriorityLevel = currentPriorityLevel;
+  return function () {
+    var previousPriorityLevel = currentPriorityLevel;
+    currentPriorityLevel = parentPriorityLevel;
+    try {
+      return callback.apply(this, arguments);
+    } finally {
+      currentPriorityLevel = previousPriorityLevel;
+    }
+  };
+};
Index: node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js
===================================================================
--- node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,150 @@
+/**
+ * @license React
+ * scheduler-unstable_post_task.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function runTask(priorityLevel, postTaskPriority, node, callback) {
+      deadline = getCurrentTime() + 5;
+      try {
+        currentPriorityLevel_DEPRECATED = priorityLevel;
+        var result = callback(!1);
+        if ("function" === typeof result) {
+          var continuationOptions = { signal: node._controller.signal },
+            nextTask = runTask.bind(
+              null,
+              priorityLevel,
+              postTaskPriority,
+              node,
+              result
+            );
+          void 0 !== scheduler.yield
+            ? scheduler
+                .yield(continuationOptions)
+                .then(nextTask)
+                .catch(handleAbortError)
+            : scheduler
+                .postTask(nextTask, continuationOptions)
+                .catch(handleAbortError);
+        }
+      } catch (error) {
+        setTimeout(function () {
+          throw error;
+        });
+      } finally {
+        currentPriorityLevel_DEPRECATED = 3;
+      }
+    }
+    function handleAbortError() {}
+    var perf = window.performance,
+      setTimeout = window.setTimeout,
+      scheduler = global.scheduler,
+      getCurrentTime = perf.now.bind(perf),
+      deadline = 0,
+      currentPriorityLevel_DEPRECATED = 3;
+    exports.unstable_IdlePriority = 5;
+    exports.unstable_ImmediatePriority = 1;
+    exports.unstable_LowPriority = 4;
+    exports.unstable_NormalPriority = 3;
+    exports.unstable_Profiling = null;
+    exports.unstable_UserBlockingPriority = 2;
+    exports.unstable_cancelCallback = function (node) {
+      node._controller.abort();
+    };
+    exports.unstable_forceFrameRate = function () {};
+    exports.unstable_getCurrentPriorityLevel = function () {
+      return currentPriorityLevel_DEPRECATED;
+    };
+    exports.unstable_next = function (callback) {
+      switch (currentPriorityLevel_DEPRECATED) {
+        case 1:
+        case 2:
+        case 3:
+          var priorityLevel = 3;
+          break;
+        default:
+          priorityLevel = currentPriorityLevel_DEPRECATED;
+      }
+      var previousPriorityLevel = currentPriorityLevel_DEPRECATED;
+      currentPriorityLevel_DEPRECATED = priorityLevel;
+      try {
+        return callback();
+      } finally {
+        currentPriorityLevel_DEPRECATED = previousPriorityLevel;
+      }
+    };
+    exports.unstable_now = getCurrentTime;
+    exports.unstable_requestPaint = function () {};
+    exports.unstable_runWithPriority = function (priorityLevel, callback) {
+      var previousPriorityLevel = currentPriorityLevel_DEPRECATED;
+      currentPriorityLevel_DEPRECATED = priorityLevel;
+      try {
+        return callback();
+      } finally {
+        currentPriorityLevel_DEPRECATED = previousPriorityLevel;
+      }
+    };
+    exports.unstable_scheduleCallback = function (
+      priorityLevel,
+      callback,
+      options
+    ) {
+      switch (priorityLevel) {
+        case 1:
+        case 2:
+          var postTaskPriority = "user-blocking";
+          break;
+        case 4:
+        case 3:
+          postTaskPriority = "user-visible";
+          break;
+        case 5:
+          postTaskPriority = "background";
+          break;
+        default:
+          postTaskPriority = "user-visible";
+      }
+      var controller = new TaskController({ priority: postTaskPriority });
+      options = {
+        delay:
+          "object" === typeof options && null !== options ? options.delay : 0,
+        signal: controller.signal
+      };
+      controller = { _controller: controller };
+      scheduler
+        .postTask(
+          runTask.bind(
+            null,
+            priorityLevel,
+            postTaskPriority,
+            controller,
+            callback
+          ),
+          options
+        )
+        .catch(handleAbortError);
+      return controller;
+    };
+    exports.unstable_shouldYield = function () {
+      return getCurrentTime() >= deadline;
+    };
+    exports.unstable_wrapCallback = function (callback) {
+      var parentPriorityLevel = currentPriorityLevel_DEPRECATED;
+      return function () {
+        var previousPriorityLevel = currentPriorityLevel_DEPRECATED;
+        currentPriorityLevel_DEPRECATED = parentPriorityLevel;
+        try {
+          return callback();
+        } finally {
+          currentPriorityLevel_DEPRECATED = previousPriorityLevel;
+        }
+      };
+    };
+  })();
Index: node_modules/scheduler/cjs/scheduler-unstable_post_task.production.js
===================================================================
--- node_modules/scheduler/cjs/scheduler-unstable_post_task.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/cjs/scheduler-unstable_post_task.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,140 @@
+/**
+ * @license React
+ * scheduler-unstable_post_task.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var perf = window.performance,
+  setTimeout = window.setTimeout,
+  scheduler = global.scheduler,
+  getCurrentTime = perf.now.bind(perf),
+  deadline = 0,
+  currentPriorityLevel_DEPRECATED = 3;
+function runTask(priorityLevel, postTaskPriority, node, callback) {
+  deadline = getCurrentTime() + 5;
+  try {
+    currentPriorityLevel_DEPRECATED = priorityLevel;
+    var result = callback(!1);
+    if ("function" === typeof result) {
+      var continuationOptions = { signal: node._controller.signal },
+        nextTask = runTask.bind(
+          null,
+          priorityLevel,
+          postTaskPriority,
+          node,
+          result
+        );
+      void 0 !== scheduler.yield
+        ? scheduler
+            .yield(continuationOptions)
+            .then(nextTask)
+            .catch(handleAbortError)
+        : scheduler
+            .postTask(nextTask, continuationOptions)
+            .catch(handleAbortError);
+    }
+  } catch (error) {
+    setTimeout(function () {
+      throw error;
+    });
+  } finally {
+    currentPriorityLevel_DEPRECATED = 3;
+  }
+}
+function handleAbortError() {}
+exports.unstable_IdlePriority = 5;
+exports.unstable_ImmediatePriority = 1;
+exports.unstable_LowPriority = 4;
+exports.unstable_NormalPriority = 3;
+exports.unstable_Profiling = null;
+exports.unstable_UserBlockingPriority = 2;
+exports.unstable_cancelCallback = function (node) {
+  node._controller.abort();
+};
+exports.unstable_forceFrameRate = function () {};
+exports.unstable_getCurrentPriorityLevel = function () {
+  return currentPriorityLevel_DEPRECATED;
+};
+exports.unstable_next = function (callback) {
+  switch (currentPriorityLevel_DEPRECATED) {
+    case 1:
+    case 2:
+    case 3:
+      var priorityLevel = 3;
+      break;
+    default:
+      priorityLevel = currentPriorityLevel_DEPRECATED;
+  }
+  var previousPriorityLevel = currentPriorityLevel_DEPRECATED;
+  currentPriorityLevel_DEPRECATED = priorityLevel;
+  try {
+    return callback();
+  } finally {
+    currentPriorityLevel_DEPRECATED = previousPriorityLevel;
+  }
+};
+exports.unstable_now = getCurrentTime;
+exports.unstable_requestPaint = function () {};
+exports.unstable_runWithPriority = function (priorityLevel, callback) {
+  var previousPriorityLevel = currentPriorityLevel_DEPRECATED;
+  currentPriorityLevel_DEPRECATED = priorityLevel;
+  try {
+    return callback();
+  } finally {
+    currentPriorityLevel_DEPRECATED = previousPriorityLevel;
+  }
+};
+exports.unstable_scheduleCallback = function (
+  priorityLevel,
+  callback,
+  options
+) {
+  switch (priorityLevel) {
+    case 1:
+    case 2:
+      var postTaskPriority = "user-blocking";
+      break;
+    case 4:
+    case 3:
+      postTaskPriority = "user-visible";
+      break;
+    case 5:
+      postTaskPriority = "background";
+      break;
+    default:
+      postTaskPriority = "user-visible";
+  }
+  var controller = new TaskController({ priority: postTaskPriority });
+  options = {
+    delay: "object" === typeof options && null !== options ? options.delay : 0,
+    signal: controller.signal
+  };
+  controller = { _controller: controller };
+  scheduler
+    .postTask(
+      runTask.bind(null, priorityLevel, postTaskPriority, controller, callback),
+      options
+    )
+    .catch(handleAbortError);
+  return controller;
+};
+exports.unstable_shouldYield = function () {
+  return getCurrentTime() >= deadline;
+};
+exports.unstable_wrapCallback = function (callback) {
+  var parentPriorityLevel = currentPriorityLevel_DEPRECATED;
+  return function () {
+    var previousPriorityLevel = currentPriorityLevel_DEPRECATED;
+    currentPriorityLevel_DEPRECATED = parentPriorityLevel;
+    try {
+      return callback();
+    } finally {
+      currentPriorityLevel_DEPRECATED = previousPriorityLevel;
+    }
+  };
+};
Index: node_modules/scheduler/cjs/scheduler.development.js
===================================================================
--- node_modules/scheduler/cjs/scheduler.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/cjs/scheduler.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,364 @@
+/**
+ * @license React
+ * scheduler.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function performWorkUntilDeadline() {
+      needsPaint = !1;
+      if (isMessageLoopRunning) {
+        var currentTime = exports.unstable_now();
+        startTime = currentTime;
+        var hasMoreWork = !0;
+        try {
+          a: {
+            isHostCallbackScheduled = !1;
+            isHostTimeoutScheduled &&
+              ((isHostTimeoutScheduled = !1),
+              localClearTimeout(taskTimeoutID),
+              (taskTimeoutID = -1));
+            isPerformingWork = !0;
+            var previousPriorityLevel = currentPriorityLevel;
+            try {
+              b: {
+                advanceTimers(currentTime);
+                for (
+                  currentTask = peek(taskQueue);
+                  null !== currentTask &&
+                  !(
+                    currentTask.expirationTime > currentTime &&
+                    shouldYieldToHost()
+                  );
+
+                ) {
+                  var callback = currentTask.callback;
+                  if ("function" === typeof callback) {
+                    currentTask.callback = null;
+                    currentPriorityLevel = currentTask.priorityLevel;
+                    var continuationCallback = callback(
+                      currentTask.expirationTime <= currentTime
+                    );
+                    currentTime = exports.unstable_now();
+                    if ("function" === typeof continuationCallback) {
+                      currentTask.callback = continuationCallback;
+                      advanceTimers(currentTime);
+                      hasMoreWork = !0;
+                      break b;
+                    }
+                    currentTask === peek(taskQueue) && pop(taskQueue);
+                    advanceTimers(currentTime);
+                  } else pop(taskQueue);
+                  currentTask = peek(taskQueue);
+                }
+                if (null !== currentTask) hasMoreWork = !0;
+                else {
+                  var firstTimer = peek(timerQueue);
+                  null !== firstTimer &&
+                    requestHostTimeout(
+                      handleTimeout,
+                      firstTimer.startTime - currentTime
+                    );
+                  hasMoreWork = !1;
+                }
+              }
+              break a;
+            } finally {
+              (currentTask = null),
+                (currentPriorityLevel = previousPriorityLevel),
+                (isPerformingWork = !1);
+            }
+            hasMoreWork = void 0;
+          }
+        } finally {
+          hasMoreWork
+            ? schedulePerformWorkUntilDeadline()
+            : (isMessageLoopRunning = !1);
+        }
+      }
+    }
+    function push(heap, node) {
+      var index = heap.length;
+      heap.push(node);
+      a: for (; 0 < index; ) {
+        var parentIndex = (index - 1) >>> 1,
+          parent = heap[parentIndex];
+        if (0 < compare(parent, node))
+          (heap[parentIndex] = node),
+            (heap[index] = parent),
+            (index = parentIndex);
+        else break a;
+      }
+    }
+    function peek(heap) {
+      return 0 === heap.length ? null : heap[0];
+    }
+    function pop(heap) {
+      if (0 === heap.length) return null;
+      var first = heap[0],
+        last = heap.pop();
+      if (last !== first) {
+        heap[0] = last;
+        a: for (
+          var index = 0, length = heap.length, halfLength = length >>> 1;
+          index < halfLength;
+
+        ) {
+          var leftIndex = 2 * (index + 1) - 1,
+            left = heap[leftIndex],
+            rightIndex = leftIndex + 1,
+            right = heap[rightIndex];
+          if (0 > compare(left, last))
+            rightIndex < length && 0 > compare(right, left)
+              ? ((heap[index] = right),
+                (heap[rightIndex] = last),
+                (index = rightIndex))
+              : ((heap[index] = left),
+                (heap[leftIndex] = last),
+                (index = leftIndex));
+          else if (rightIndex < length && 0 > compare(right, last))
+            (heap[index] = right),
+              (heap[rightIndex] = last),
+              (index = rightIndex);
+          else break a;
+        }
+      }
+      return first;
+    }
+    function compare(a, b) {
+      var diff = a.sortIndex - b.sortIndex;
+      return 0 !== diff ? diff : a.id - b.id;
+    }
+    function advanceTimers(currentTime) {
+      for (var timer = peek(timerQueue); null !== timer; ) {
+        if (null === timer.callback) pop(timerQueue);
+        else if (timer.startTime <= currentTime)
+          pop(timerQueue),
+            (timer.sortIndex = timer.expirationTime),
+            push(taskQueue, timer);
+        else break;
+        timer = peek(timerQueue);
+      }
+    }
+    function handleTimeout(currentTime) {
+      isHostTimeoutScheduled = !1;
+      advanceTimers(currentTime);
+      if (!isHostCallbackScheduled)
+        if (null !== peek(taskQueue))
+          (isHostCallbackScheduled = !0),
+            isMessageLoopRunning ||
+              ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());
+        else {
+          var firstTimer = peek(timerQueue);
+          null !== firstTimer &&
+            requestHostTimeout(
+              handleTimeout,
+              firstTimer.startTime - currentTime
+            );
+        }
+    }
+    function shouldYieldToHost() {
+      return needsPaint
+        ? !0
+        : exports.unstable_now() - startTime < frameInterval
+          ? !1
+          : !0;
+    }
+    function requestHostTimeout(callback, ms) {
+      taskTimeoutID = localSetTimeout(function () {
+        callback(exports.unstable_now());
+      }, ms);
+    }
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+    exports.unstable_now = void 0;
+    if (
+      "object" === typeof performance &&
+      "function" === typeof performance.now
+    ) {
+      var localPerformance = performance;
+      exports.unstable_now = function () {
+        return localPerformance.now();
+      };
+    } else {
+      var localDate = Date,
+        initialTime = localDate.now();
+      exports.unstable_now = function () {
+        return localDate.now() - initialTime;
+      };
+    }
+    var taskQueue = [],
+      timerQueue = [],
+      taskIdCounter = 1,
+      currentTask = null,
+      currentPriorityLevel = 3,
+      isPerformingWork = !1,
+      isHostCallbackScheduled = !1,
+      isHostTimeoutScheduled = !1,
+      needsPaint = !1,
+      localSetTimeout = "function" === typeof setTimeout ? setTimeout : null,
+      localClearTimeout =
+        "function" === typeof clearTimeout ? clearTimeout : null,
+      localSetImmediate =
+        "undefined" !== typeof setImmediate ? setImmediate : null,
+      isMessageLoopRunning = !1,
+      taskTimeoutID = -1,
+      frameInterval = 5,
+      startTime = -1;
+    if ("function" === typeof localSetImmediate)
+      var schedulePerformWorkUntilDeadline = function () {
+        localSetImmediate(performWorkUntilDeadline);
+      };
+    else if ("undefined" !== typeof MessageChannel) {
+      var channel = new MessageChannel(),
+        port = channel.port2;
+      channel.port1.onmessage = performWorkUntilDeadline;
+      schedulePerformWorkUntilDeadline = function () {
+        port.postMessage(null);
+      };
+    } else
+      schedulePerformWorkUntilDeadline = function () {
+        localSetTimeout(performWorkUntilDeadline, 0);
+      };
+    exports.unstable_IdlePriority = 5;
+    exports.unstable_ImmediatePriority = 1;
+    exports.unstable_LowPriority = 4;
+    exports.unstable_NormalPriority = 3;
+    exports.unstable_Profiling = null;
+    exports.unstable_UserBlockingPriority = 2;
+    exports.unstable_cancelCallback = function (task) {
+      task.callback = null;
+    };
+    exports.unstable_forceFrameRate = function (fps) {
+      0 > fps || 125 < fps
+        ? console.error(
+            "forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"
+          )
+        : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);
+    };
+    exports.unstable_getCurrentPriorityLevel = function () {
+      return currentPriorityLevel;
+    };
+    exports.unstable_next = function (eventHandler) {
+      switch (currentPriorityLevel) {
+        case 1:
+        case 2:
+        case 3:
+          var priorityLevel = 3;
+          break;
+        default:
+          priorityLevel = currentPriorityLevel;
+      }
+      var previousPriorityLevel = currentPriorityLevel;
+      currentPriorityLevel = priorityLevel;
+      try {
+        return eventHandler();
+      } finally {
+        currentPriorityLevel = previousPriorityLevel;
+      }
+    };
+    exports.unstable_requestPaint = function () {
+      needsPaint = !0;
+    };
+    exports.unstable_runWithPriority = function (priorityLevel, eventHandler) {
+      switch (priorityLevel) {
+        case 1:
+        case 2:
+        case 3:
+        case 4:
+        case 5:
+          break;
+        default:
+          priorityLevel = 3;
+      }
+      var previousPriorityLevel = currentPriorityLevel;
+      currentPriorityLevel = priorityLevel;
+      try {
+        return eventHandler();
+      } finally {
+        currentPriorityLevel = previousPriorityLevel;
+      }
+    };
+    exports.unstable_scheduleCallback = function (
+      priorityLevel,
+      callback,
+      options
+    ) {
+      var currentTime = exports.unstable_now();
+      "object" === typeof options && null !== options
+        ? ((options = options.delay),
+          (options =
+            "number" === typeof options && 0 < options
+              ? currentTime + options
+              : currentTime))
+        : (options = currentTime);
+      switch (priorityLevel) {
+        case 1:
+          var timeout = -1;
+          break;
+        case 2:
+          timeout = 250;
+          break;
+        case 5:
+          timeout = 1073741823;
+          break;
+        case 4:
+          timeout = 1e4;
+          break;
+        default:
+          timeout = 5e3;
+      }
+      timeout = options + timeout;
+      priorityLevel = {
+        id: taskIdCounter++,
+        callback: callback,
+        priorityLevel: priorityLevel,
+        startTime: options,
+        expirationTime: timeout,
+        sortIndex: -1
+      };
+      options > currentTime
+        ? ((priorityLevel.sortIndex = options),
+          push(timerQueue, priorityLevel),
+          null === peek(taskQueue) &&
+            priorityLevel === peek(timerQueue) &&
+            (isHostTimeoutScheduled
+              ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))
+              : (isHostTimeoutScheduled = !0),
+            requestHostTimeout(handleTimeout, options - currentTime)))
+        : ((priorityLevel.sortIndex = timeout),
+          push(taskQueue, priorityLevel),
+          isHostCallbackScheduled ||
+            isPerformingWork ||
+            ((isHostCallbackScheduled = !0),
+            isMessageLoopRunning ||
+              ((isMessageLoopRunning = !0),
+              schedulePerformWorkUntilDeadline())));
+      return priorityLevel;
+    };
+    exports.unstable_shouldYield = shouldYieldToHost;
+    exports.unstable_wrapCallback = function (callback) {
+      var parentPriorityLevel = currentPriorityLevel;
+      return function () {
+        var previousPriorityLevel = currentPriorityLevel;
+        currentPriorityLevel = parentPriorityLevel;
+        try {
+          return callback.apply(this, arguments);
+        } finally {
+          currentPriorityLevel = previousPriorityLevel;
+        }
+      };
+    };
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+  })();
Index: node_modules/scheduler/cjs/scheduler.native.development.js
===================================================================
--- node_modules/scheduler/cjs/scheduler.native.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/cjs/scheduler.native.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,350 @@
+/**
+ * @license React
+ * scheduler.native.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function performWorkUntilDeadline() {
+      needsPaint = !1;
+      if (isMessageLoopRunning) {
+        var currentTime = getCurrentTime();
+        startTime = currentTime;
+        var hasMoreWork = !0;
+        try {
+          a: {
+            isHostCallbackScheduled = !1;
+            isHostTimeoutScheduled &&
+              ((isHostTimeoutScheduled = !1),
+              localClearTimeout(taskTimeoutID),
+              (taskTimeoutID = -1));
+            isPerformingWork = !0;
+            var previousPriorityLevel = currentPriorityLevel;
+            try {
+              b: {
+                advanceTimers(currentTime);
+                for (
+                  currentTask = peek(taskQueue);
+                  null !== currentTask &&
+                  !(
+                    currentTask.expirationTime > currentTime &&
+                    shouldYieldToHost()
+                  );
+
+                ) {
+                  var callback = currentTask.callback;
+                  if ("function" === typeof callback) {
+                    currentTask.callback = null;
+                    currentPriorityLevel = currentTask.priorityLevel;
+                    var continuationCallback = callback(
+                      currentTask.expirationTime <= currentTime
+                    );
+                    currentTime = getCurrentTime();
+                    if ("function" === typeof continuationCallback) {
+                      currentTask.callback = continuationCallback;
+                      advanceTimers(currentTime);
+                      hasMoreWork = !0;
+                      break b;
+                    }
+                    currentTask === peek(taskQueue) && pop(taskQueue);
+                    advanceTimers(currentTime);
+                  } else pop(taskQueue);
+                  currentTask = peek(taskQueue);
+                }
+                if (null !== currentTask) hasMoreWork = !0;
+                else {
+                  var firstTimer = peek(timerQueue);
+                  null !== firstTimer &&
+                    requestHostTimeout(
+                      handleTimeout,
+                      firstTimer.startTime - currentTime
+                    );
+                  hasMoreWork = !1;
+                }
+              }
+              break a;
+            } finally {
+              (currentTask = null),
+                (currentPriorityLevel = previousPriorityLevel),
+                (isPerformingWork = !1);
+            }
+            hasMoreWork = void 0;
+          }
+        } finally {
+          hasMoreWork
+            ? schedulePerformWorkUntilDeadline()
+            : (isMessageLoopRunning = !1);
+        }
+      }
+    }
+    function push(heap, node) {
+      var index = heap.length;
+      heap.push(node);
+      a: for (; 0 < index; ) {
+        var parentIndex = (index - 1) >>> 1,
+          parent = heap[parentIndex];
+        if (0 < compare(parent, node))
+          (heap[parentIndex] = node),
+            (heap[index] = parent),
+            (index = parentIndex);
+        else break a;
+      }
+    }
+    function peek(heap) {
+      return 0 === heap.length ? null : heap[0];
+    }
+    function pop(heap) {
+      if (0 === heap.length) return null;
+      var first = heap[0],
+        last = heap.pop();
+      if (last !== first) {
+        heap[0] = last;
+        a: for (
+          var index = 0, length = heap.length, halfLength = length >>> 1;
+          index < halfLength;
+
+        ) {
+          var leftIndex = 2 * (index + 1) - 1,
+            left = heap[leftIndex],
+            rightIndex = leftIndex + 1,
+            right = heap[rightIndex];
+          if (0 > compare(left, last))
+            rightIndex < length && 0 > compare(right, left)
+              ? ((heap[index] = right),
+                (heap[rightIndex] = last),
+                (index = rightIndex))
+              : ((heap[index] = left),
+                (heap[leftIndex] = last),
+                (index = leftIndex));
+          else if (rightIndex < length && 0 > compare(right, last))
+            (heap[index] = right),
+              (heap[rightIndex] = last),
+              (index = rightIndex);
+          else break a;
+        }
+      }
+      return first;
+    }
+    function compare(a, b) {
+      var diff = a.sortIndex - b.sortIndex;
+      return 0 !== diff ? diff : a.id - b.id;
+    }
+    function advanceTimers(currentTime) {
+      for (var timer = peek(timerQueue); null !== timer; ) {
+        if (null === timer.callback) pop(timerQueue);
+        else if (timer.startTime <= currentTime)
+          pop(timerQueue),
+            (timer.sortIndex = timer.expirationTime),
+            push(taskQueue, timer);
+        else break;
+        timer = peek(timerQueue);
+      }
+    }
+    function handleTimeout(currentTime) {
+      isHostTimeoutScheduled = !1;
+      advanceTimers(currentTime);
+      if (!isHostCallbackScheduled)
+        if (null !== peek(taskQueue))
+          (isHostCallbackScheduled = !0),
+            isMessageLoopRunning ||
+              ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());
+        else {
+          var firstTimer = peek(timerQueue);
+          null !== firstTimer &&
+            requestHostTimeout(
+              handleTimeout,
+              firstTimer.startTime - currentTime
+            );
+        }
+    }
+    function unstable_scheduleCallback$1(priorityLevel, callback, options) {
+      var currentTime = getCurrentTime();
+      "object" === typeof options && null !== options
+        ? ((options = options.delay),
+          (options =
+            "number" === typeof options && 0 < options
+              ? currentTime + options
+              : currentTime))
+        : (options = currentTime);
+      switch (priorityLevel) {
+        case 1:
+          var timeout = -1;
+          break;
+        case 2:
+          timeout = 250;
+          break;
+        case 5:
+          timeout = 1073741823;
+          break;
+        case 4:
+          timeout = 1e4;
+          break;
+        default:
+          timeout = 5e3;
+      }
+      timeout = options + timeout;
+      priorityLevel = {
+        id: taskIdCounter++,
+        callback: callback,
+        priorityLevel: priorityLevel,
+        startTime: options,
+        expirationTime: timeout,
+        sortIndex: -1
+      };
+      options > currentTime
+        ? ((priorityLevel.sortIndex = options),
+          push(timerQueue, priorityLevel),
+          null === peek(taskQueue) &&
+            priorityLevel === peek(timerQueue) &&
+            (isHostTimeoutScheduled
+              ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))
+              : (isHostTimeoutScheduled = !0),
+            requestHostTimeout(handleTimeout, options - currentTime)))
+        : ((priorityLevel.sortIndex = timeout),
+          push(taskQueue, priorityLevel),
+          isHostCallbackScheduled ||
+            isPerformingWork ||
+            ((isHostCallbackScheduled = !0),
+            isMessageLoopRunning ||
+              ((isMessageLoopRunning = !0),
+              schedulePerformWorkUntilDeadline())));
+      return priorityLevel;
+    }
+    function unstable_cancelCallback$1(task) {
+      task.callback = null;
+    }
+    function unstable_getCurrentPriorityLevel$1() {
+      return currentPriorityLevel;
+    }
+    function shouldYieldToHost() {
+      return needsPaint
+        ? !0
+        : getCurrentTime() - startTime < frameInterval
+          ? !1
+          : !0;
+    }
+    function requestPaint() {
+      needsPaint = !0;
+    }
+    function requestHostTimeout(callback, ms) {
+      taskTimeoutID = localSetTimeout(function () {
+        callback(getCurrentTime());
+      }, ms);
+    }
+    function throwNotImplemented() {
+      throw Error("Not implemented.");
+    }
+    if (
+      "object" === typeof performance &&
+      "function" === typeof performance.now
+    ) {
+      var localPerformance = performance;
+      var getCurrentTime = function () {
+        return localPerformance.now();
+      };
+    } else {
+      var localDate = Date,
+        initialTime = localDate.now();
+      getCurrentTime = function () {
+        return localDate.now() - initialTime;
+      };
+    }
+    var taskQueue = [],
+      timerQueue = [],
+      taskIdCounter = 1,
+      currentTask = null,
+      currentPriorityLevel = 3,
+      isPerformingWork = !1,
+      isHostCallbackScheduled = !1,
+      isHostTimeoutScheduled = !1,
+      needsPaint = !1,
+      localSetTimeout = "function" === typeof setTimeout ? setTimeout : null,
+      localClearTimeout =
+        "function" === typeof clearTimeout ? clearTimeout : null,
+      localSetImmediate =
+        "undefined" !== typeof setImmediate ? setImmediate : null,
+      isMessageLoopRunning = !1,
+      taskTimeoutID = -1,
+      frameInterval = 5,
+      startTime = -1;
+    if ("function" === typeof localSetImmediate)
+      var schedulePerformWorkUntilDeadline = function () {
+        localSetImmediate(performWorkUntilDeadline);
+      };
+    else if ("undefined" !== typeof MessageChannel) {
+      var channel = new MessageChannel(),
+        port = channel.port2;
+      channel.port1.onmessage = performWorkUntilDeadline;
+      schedulePerformWorkUntilDeadline = function () {
+        port.postMessage(null);
+      };
+    } else
+      schedulePerformWorkUntilDeadline = function () {
+        localSetTimeout(performWorkUntilDeadline, 0);
+      };
+    channel =
+      "undefined" !== typeof nativeRuntimeScheduler
+        ? nativeRuntimeScheduler.unstable_UserBlockingPriority
+        : 2;
+    var unstable_NormalPriority =
+        "undefined" !== typeof nativeRuntimeScheduler
+          ? nativeRuntimeScheduler.unstable_NormalPriority
+          : 3,
+      unstable_LowPriority =
+        "undefined" !== typeof nativeRuntimeScheduler
+          ? nativeRuntimeScheduler.unstable_LowPriority
+          : 4,
+      unstable_ImmediatePriority =
+        "undefined" !== typeof nativeRuntimeScheduler
+          ? nativeRuntimeScheduler.unstable_ImmediatePriority
+          : 1,
+      unstable_scheduleCallback =
+        "undefined" !== typeof nativeRuntimeScheduler
+          ? nativeRuntimeScheduler.unstable_scheduleCallback
+          : unstable_scheduleCallback$1,
+      unstable_cancelCallback =
+        "undefined" !== typeof nativeRuntimeScheduler
+          ? nativeRuntimeScheduler.unstable_cancelCallback
+          : unstable_cancelCallback$1,
+      unstable_getCurrentPriorityLevel =
+        "undefined" !== typeof nativeRuntimeScheduler
+          ? nativeRuntimeScheduler.unstable_getCurrentPriorityLevel
+          : unstable_getCurrentPriorityLevel$1,
+      unstable_shouldYield =
+        "undefined" !== typeof nativeRuntimeScheduler
+          ? nativeRuntimeScheduler.unstable_shouldYield
+          : shouldYieldToHost,
+      unstable_requestPaint =
+        "undefined" !== typeof nativeRuntimeScheduler
+          ? nativeRuntimeScheduler.unstable_requestPaint
+          : requestPaint,
+      unstable_now =
+        "undefined" !== typeof nativeRuntimeScheduler
+          ? nativeRuntimeScheduler.unstable_now
+          : getCurrentTime;
+    exports.unstable_IdlePriority =
+      "undefined" !== typeof nativeRuntimeScheduler
+        ? nativeRuntimeScheduler.unstable_IdlePriority
+        : 5;
+    exports.unstable_ImmediatePriority = unstable_ImmediatePriority;
+    exports.unstable_LowPriority = unstable_LowPriority;
+    exports.unstable_NormalPriority = unstable_NormalPriority;
+    exports.unstable_Profiling = null;
+    exports.unstable_UserBlockingPriority = channel;
+    exports.unstable_cancelCallback = unstable_cancelCallback;
+    exports.unstable_forceFrameRate = throwNotImplemented;
+    exports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;
+    exports.unstable_next = throwNotImplemented;
+    exports.unstable_now = unstable_now;
+    exports.unstable_requestPaint = unstable_requestPaint;
+    exports.unstable_runWithPriority = throwNotImplemented;
+    exports.unstable_scheduleCallback = unstable_scheduleCallback;
+    exports.unstable_shouldYield = unstable_shouldYield;
+    exports.unstable_wrapCallback = throwNotImplemented;
+  })();
Index: node_modules/scheduler/cjs/scheduler.native.production.js
===================================================================
--- node_modules/scheduler/cjs/scheduler.native.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/cjs/scheduler.native.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,330 @@
+/**
+ * @license React
+ * scheduler.native.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+function push(heap, node) {
+  var index = heap.length;
+  heap.push(node);
+  a: for (; 0 < index; ) {
+    var parentIndex = (index - 1) >>> 1,
+      parent = heap[parentIndex];
+    if (0 < compare(parent, node))
+      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);
+    else break a;
+  }
+}
+function peek(heap) {
+  return 0 === heap.length ? null : heap[0];
+}
+function pop(heap) {
+  if (0 === heap.length) return null;
+  var first = heap[0],
+    last = heap.pop();
+  if (last !== first) {
+    heap[0] = last;
+    a: for (
+      var index = 0, length = heap.length, halfLength = length >>> 1;
+      index < halfLength;
+
+    ) {
+      var leftIndex = 2 * (index + 1) - 1,
+        left = heap[leftIndex],
+        rightIndex = leftIndex + 1,
+        right = heap[rightIndex];
+      if (0 > compare(left, last))
+        rightIndex < length && 0 > compare(right, left)
+          ? ((heap[index] = right),
+            (heap[rightIndex] = last),
+            (index = rightIndex))
+          : ((heap[index] = left),
+            (heap[leftIndex] = last),
+            (index = leftIndex));
+      else if (rightIndex < length && 0 > compare(right, last))
+        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);
+      else break a;
+    }
+  }
+  return first;
+}
+function compare(a, b) {
+  var diff = a.sortIndex - b.sortIndex;
+  return 0 !== diff ? diff : a.id - b.id;
+}
+var getCurrentTime;
+if ("object" === typeof performance && "function" === typeof performance.now) {
+  var localPerformance = performance;
+  getCurrentTime = function () {
+    return localPerformance.now();
+  };
+} else {
+  var localDate = Date,
+    initialTime = localDate.now();
+  getCurrentTime = function () {
+    return localDate.now() - initialTime;
+  };
+}
+var taskQueue = [],
+  timerQueue = [],
+  taskIdCounter = 1,
+  currentTask = null,
+  currentPriorityLevel = 3,
+  isPerformingWork = !1,
+  isHostCallbackScheduled = !1,
+  isHostTimeoutScheduled = !1,
+  needsPaint = !1,
+  localSetTimeout = "function" === typeof setTimeout ? setTimeout : null,
+  localClearTimeout = "function" === typeof clearTimeout ? clearTimeout : null,
+  localSetImmediate = "undefined" !== typeof setImmediate ? setImmediate : null;
+function advanceTimers(currentTime) {
+  for (var timer = peek(timerQueue); null !== timer; ) {
+    if (null === timer.callback) pop(timerQueue);
+    else if (timer.startTime <= currentTime)
+      pop(timerQueue),
+        (timer.sortIndex = timer.expirationTime),
+        push(taskQueue, timer);
+    else break;
+    timer = peek(timerQueue);
+  }
+}
+function handleTimeout(currentTime) {
+  isHostTimeoutScheduled = !1;
+  advanceTimers(currentTime);
+  if (!isHostCallbackScheduled)
+    if (null !== peek(taskQueue))
+      (isHostCallbackScheduled = !0),
+        isMessageLoopRunning ||
+          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());
+    else {
+      var firstTimer = peek(timerQueue);
+      null !== firstTimer &&
+        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);
+    }
+}
+function unstable_scheduleCallback$1(priorityLevel, callback, options) {
+  var currentTime = getCurrentTime();
+  "object" === typeof options && null !== options
+    ? ((options = options.delay),
+      (options =
+        "number" === typeof options && 0 < options
+          ? currentTime + options
+          : currentTime))
+    : (options = currentTime);
+  switch (priorityLevel) {
+    case 1:
+      var timeout = -1;
+      break;
+    case 2:
+      timeout = 250;
+      break;
+    case 5:
+      timeout = 1073741823;
+      break;
+    case 4:
+      timeout = 1e4;
+      break;
+    default:
+      timeout = 5e3;
+  }
+  timeout = options + timeout;
+  priorityLevel = {
+    id: taskIdCounter++,
+    callback: callback,
+    priorityLevel: priorityLevel,
+    startTime: options,
+    expirationTime: timeout,
+    sortIndex: -1
+  };
+  options > currentTime
+    ? ((priorityLevel.sortIndex = options),
+      push(timerQueue, priorityLevel),
+      null === peek(taskQueue) &&
+        priorityLevel === peek(timerQueue) &&
+        (isHostTimeoutScheduled
+          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))
+          : (isHostTimeoutScheduled = !0),
+        requestHostTimeout(handleTimeout, options - currentTime)))
+    : ((priorityLevel.sortIndex = timeout),
+      push(taskQueue, priorityLevel),
+      isHostCallbackScheduled ||
+        isPerformingWork ||
+        ((isHostCallbackScheduled = !0),
+        isMessageLoopRunning ||
+          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));
+  return priorityLevel;
+}
+function unstable_cancelCallback$1(task) {
+  task.callback = null;
+}
+function unstable_getCurrentPriorityLevel$1() {
+  return currentPriorityLevel;
+}
+var isMessageLoopRunning = !1,
+  taskTimeoutID = -1,
+  startTime = -1;
+function shouldYieldToHost() {
+  return needsPaint ? !0 : 5 > getCurrentTime() - startTime ? !1 : !0;
+}
+function requestPaint() {
+  needsPaint = !0;
+}
+function performWorkUntilDeadline() {
+  needsPaint = !1;
+  if (isMessageLoopRunning) {
+    var currentTime = getCurrentTime();
+    startTime = currentTime;
+    var hasMoreWork = !0;
+    try {
+      a: {
+        isHostCallbackScheduled = !1;
+        isHostTimeoutScheduled &&
+          ((isHostTimeoutScheduled = !1),
+          localClearTimeout(taskTimeoutID),
+          (taskTimeoutID = -1));
+        isPerformingWork = !0;
+        var previousPriorityLevel = currentPriorityLevel;
+        try {
+          b: {
+            advanceTimers(currentTime);
+            for (
+              currentTask = peek(taskQueue);
+              null !== currentTask &&
+              !(
+                currentTask.expirationTime > currentTime && shouldYieldToHost()
+              );
+
+            ) {
+              var callback = currentTask.callback;
+              if ("function" === typeof callback) {
+                currentTask.callback = null;
+                currentPriorityLevel = currentTask.priorityLevel;
+                var continuationCallback = callback(
+                  currentTask.expirationTime <= currentTime
+                );
+                currentTime = getCurrentTime();
+                if ("function" === typeof continuationCallback) {
+                  currentTask.callback = continuationCallback;
+                  advanceTimers(currentTime);
+                  hasMoreWork = !0;
+                  break b;
+                }
+                currentTask === peek(taskQueue) && pop(taskQueue);
+                advanceTimers(currentTime);
+              } else pop(taskQueue);
+              currentTask = peek(taskQueue);
+            }
+            if (null !== currentTask) hasMoreWork = !0;
+            else {
+              var firstTimer = peek(timerQueue);
+              null !== firstTimer &&
+                requestHostTimeout(
+                  handleTimeout,
+                  firstTimer.startTime - currentTime
+                );
+              hasMoreWork = !1;
+            }
+          }
+          break a;
+        } finally {
+          (currentTask = null),
+            (currentPriorityLevel = previousPriorityLevel),
+            (isPerformingWork = !1);
+        }
+        hasMoreWork = void 0;
+      }
+    } finally {
+      hasMoreWork
+        ? schedulePerformWorkUntilDeadline()
+        : (isMessageLoopRunning = !1);
+    }
+  }
+}
+var schedulePerformWorkUntilDeadline;
+if ("function" === typeof localSetImmediate)
+  schedulePerformWorkUntilDeadline = function () {
+    localSetImmediate(performWorkUntilDeadline);
+  };
+else if ("undefined" !== typeof MessageChannel) {
+  var channel = new MessageChannel(),
+    port = channel.port2;
+  channel.port1.onmessage = performWorkUntilDeadline;
+  schedulePerformWorkUntilDeadline = function () {
+    port.postMessage(null);
+  };
+} else
+  schedulePerformWorkUntilDeadline = function () {
+    localSetTimeout(performWorkUntilDeadline, 0);
+  };
+function requestHostTimeout(callback, ms) {
+  taskTimeoutID = localSetTimeout(function () {
+    callback(getCurrentTime());
+  }, ms);
+}
+var unstable_UserBlockingPriority =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_UserBlockingPriority
+      : 2,
+  unstable_NormalPriority =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_NormalPriority
+      : 3,
+  unstable_LowPriority =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_LowPriority
+      : 4,
+  unstable_ImmediatePriority =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_ImmediatePriority
+      : 1,
+  unstable_scheduleCallback =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_scheduleCallback
+      : unstable_scheduleCallback$1,
+  unstable_cancelCallback =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_cancelCallback
+      : unstable_cancelCallback$1,
+  unstable_getCurrentPriorityLevel =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_getCurrentPriorityLevel
+      : unstable_getCurrentPriorityLevel$1,
+  unstable_shouldYield =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_shouldYield
+      : shouldYieldToHost,
+  unstable_requestPaint =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_requestPaint
+      : requestPaint,
+  unstable_now =
+    "undefined" !== typeof nativeRuntimeScheduler
+      ? nativeRuntimeScheduler.unstable_now
+      : getCurrentTime;
+function throwNotImplemented() {
+  throw Error("Not implemented.");
+}
+exports.unstable_IdlePriority =
+  "undefined" !== typeof nativeRuntimeScheduler
+    ? nativeRuntimeScheduler.unstable_IdlePriority
+    : 5;
+exports.unstable_ImmediatePriority = unstable_ImmediatePriority;
+exports.unstable_LowPriority = unstable_LowPriority;
+exports.unstable_NormalPriority = unstable_NormalPriority;
+exports.unstable_Profiling = null;
+exports.unstable_UserBlockingPriority = unstable_UserBlockingPriority;
+exports.unstable_cancelCallback = unstable_cancelCallback;
+exports.unstable_forceFrameRate = throwNotImplemented;
+exports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;
+exports.unstable_next = throwNotImplemented;
+exports.unstable_now = unstable_now;
+exports.unstable_requestPaint = unstable_requestPaint;
+exports.unstable_runWithPriority = throwNotImplemented;
+exports.unstable_scheduleCallback = unstable_scheduleCallback;
+exports.unstable_shouldYield = unstable_shouldYield;
+exports.unstable_wrapCallback = throwNotImplemented;
Index: node_modules/scheduler/cjs/scheduler.production.js
===================================================================
--- node_modules/scheduler/cjs/scheduler.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/cjs/scheduler.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,340 @@
+/**
+ * @license React
+ * scheduler.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+function push(heap, node) {
+  var index = heap.length;
+  heap.push(node);
+  a: for (; 0 < index; ) {
+    var parentIndex = (index - 1) >>> 1,
+      parent = heap[parentIndex];
+    if (0 < compare(parent, node))
+      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);
+    else break a;
+  }
+}
+function peek(heap) {
+  return 0 === heap.length ? null : heap[0];
+}
+function pop(heap) {
+  if (0 === heap.length) return null;
+  var first = heap[0],
+    last = heap.pop();
+  if (last !== first) {
+    heap[0] = last;
+    a: for (
+      var index = 0, length = heap.length, halfLength = length >>> 1;
+      index < halfLength;
+
+    ) {
+      var leftIndex = 2 * (index + 1) - 1,
+        left = heap[leftIndex],
+        rightIndex = leftIndex + 1,
+        right = heap[rightIndex];
+      if (0 > compare(left, last))
+        rightIndex < length && 0 > compare(right, left)
+          ? ((heap[index] = right),
+            (heap[rightIndex] = last),
+            (index = rightIndex))
+          : ((heap[index] = left),
+            (heap[leftIndex] = last),
+            (index = leftIndex));
+      else if (rightIndex < length && 0 > compare(right, last))
+        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);
+      else break a;
+    }
+  }
+  return first;
+}
+function compare(a, b) {
+  var diff = a.sortIndex - b.sortIndex;
+  return 0 !== diff ? diff : a.id - b.id;
+}
+exports.unstable_now = void 0;
+if ("object" === typeof performance && "function" === typeof performance.now) {
+  var localPerformance = performance;
+  exports.unstable_now = function () {
+    return localPerformance.now();
+  };
+} else {
+  var localDate = Date,
+    initialTime = localDate.now();
+  exports.unstable_now = function () {
+    return localDate.now() - initialTime;
+  };
+}
+var taskQueue = [],
+  timerQueue = [],
+  taskIdCounter = 1,
+  currentTask = null,
+  currentPriorityLevel = 3,
+  isPerformingWork = !1,
+  isHostCallbackScheduled = !1,
+  isHostTimeoutScheduled = !1,
+  needsPaint = !1,
+  localSetTimeout = "function" === typeof setTimeout ? setTimeout : null,
+  localClearTimeout = "function" === typeof clearTimeout ? clearTimeout : null,
+  localSetImmediate = "undefined" !== typeof setImmediate ? setImmediate : null;
+function advanceTimers(currentTime) {
+  for (var timer = peek(timerQueue); null !== timer; ) {
+    if (null === timer.callback) pop(timerQueue);
+    else if (timer.startTime <= currentTime)
+      pop(timerQueue),
+        (timer.sortIndex = timer.expirationTime),
+        push(taskQueue, timer);
+    else break;
+    timer = peek(timerQueue);
+  }
+}
+function handleTimeout(currentTime) {
+  isHostTimeoutScheduled = !1;
+  advanceTimers(currentTime);
+  if (!isHostCallbackScheduled)
+    if (null !== peek(taskQueue))
+      (isHostCallbackScheduled = !0),
+        isMessageLoopRunning ||
+          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());
+    else {
+      var firstTimer = peek(timerQueue);
+      null !== firstTimer &&
+        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);
+    }
+}
+var isMessageLoopRunning = !1,
+  taskTimeoutID = -1,
+  frameInterval = 5,
+  startTime = -1;
+function shouldYieldToHost() {
+  return needsPaint
+    ? !0
+    : exports.unstable_now() - startTime < frameInterval
+      ? !1
+      : !0;
+}
+function performWorkUntilDeadline() {
+  needsPaint = !1;
+  if (isMessageLoopRunning) {
+    var currentTime = exports.unstable_now();
+    startTime = currentTime;
+    var hasMoreWork = !0;
+    try {
+      a: {
+        isHostCallbackScheduled = !1;
+        isHostTimeoutScheduled &&
+          ((isHostTimeoutScheduled = !1),
+          localClearTimeout(taskTimeoutID),
+          (taskTimeoutID = -1));
+        isPerformingWork = !0;
+        var previousPriorityLevel = currentPriorityLevel;
+        try {
+          b: {
+            advanceTimers(currentTime);
+            for (
+              currentTask = peek(taskQueue);
+              null !== currentTask &&
+              !(
+                currentTask.expirationTime > currentTime && shouldYieldToHost()
+              );
+
+            ) {
+              var callback = currentTask.callback;
+              if ("function" === typeof callback) {
+                currentTask.callback = null;
+                currentPriorityLevel = currentTask.priorityLevel;
+                var continuationCallback = callback(
+                  currentTask.expirationTime <= currentTime
+                );
+                currentTime = exports.unstable_now();
+                if ("function" === typeof continuationCallback) {
+                  currentTask.callback = continuationCallback;
+                  advanceTimers(currentTime);
+                  hasMoreWork = !0;
+                  break b;
+                }
+                currentTask === peek(taskQueue) && pop(taskQueue);
+                advanceTimers(currentTime);
+              } else pop(taskQueue);
+              currentTask = peek(taskQueue);
+            }
+            if (null !== currentTask) hasMoreWork = !0;
+            else {
+              var firstTimer = peek(timerQueue);
+              null !== firstTimer &&
+                requestHostTimeout(
+                  handleTimeout,
+                  firstTimer.startTime - currentTime
+                );
+              hasMoreWork = !1;
+            }
+          }
+          break a;
+        } finally {
+          (currentTask = null),
+            (currentPriorityLevel = previousPriorityLevel),
+            (isPerformingWork = !1);
+        }
+        hasMoreWork = void 0;
+      }
+    } finally {
+      hasMoreWork
+        ? schedulePerformWorkUntilDeadline()
+        : (isMessageLoopRunning = !1);
+    }
+  }
+}
+var schedulePerformWorkUntilDeadline;
+if ("function" === typeof localSetImmediate)
+  schedulePerformWorkUntilDeadline = function () {
+    localSetImmediate(performWorkUntilDeadline);
+  };
+else if ("undefined" !== typeof MessageChannel) {
+  var channel = new MessageChannel(),
+    port = channel.port2;
+  channel.port1.onmessage = performWorkUntilDeadline;
+  schedulePerformWorkUntilDeadline = function () {
+    port.postMessage(null);
+  };
+} else
+  schedulePerformWorkUntilDeadline = function () {
+    localSetTimeout(performWorkUntilDeadline, 0);
+  };
+function requestHostTimeout(callback, ms) {
+  taskTimeoutID = localSetTimeout(function () {
+    callback(exports.unstable_now());
+  }, ms);
+}
+exports.unstable_IdlePriority = 5;
+exports.unstable_ImmediatePriority = 1;
+exports.unstable_LowPriority = 4;
+exports.unstable_NormalPriority = 3;
+exports.unstable_Profiling = null;
+exports.unstable_UserBlockingPriority = 2;
+exports.unstable_cancelCallback = function (task) {
+  task.callback = null;
+};
+exports.unstable_forceFrameRate = function (fps) {
+  0 > fps || 125 < fps
+    ? console.error(
+        "forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"
+      )
+    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);
+};
+exports.unstable_getCurrentPriorityLevel = function () {
+  return currentPriorityLevel;
+};
+exports.unstable_next = function (eventHandler) {
+  switch (currentPriorityLevel) {
+    case 1:
+    case 2:
+    case 3:
+      var priorityLevel = 3;
+      break;
+    default:
+      priorityLevel = currentPriorityLevel;
+  }
+  var previousPriorityLevel = currentPriorityLevel;
+  currentPriorityLevel = priorityLevel;
+  try {
+    return eventHandler();
+  } finally {
+    currentPriorityLevel = previousPriorityLevel;
+  }
+};
+exports.unstable_requestPaint = function () {
+  needsPaint = !0;
+};
+exports.unstable_runWithPriority = function (priorityLevel, eventHandler) {
+  switch (priorityLevel) {
+    case 1:
+    case 2:
+    case 3:
+    case 4:
+    case 5:
+      break;
+    default:
+      priorityLevel = 3;
+  }
+  var previousPriorityLevel = currentPriorityLevel;
+  currentPriorityLevel = priorityLevel;
+  try {
+    return eventHandler();
+  } finally {
+    currentPriorityLevel = previousPriorityLevel;
+  }
+};
+exports.unstable_scheduleCallback = function (
+  priorityLevel,
+  callback,
+  options
+) {
+  var currentTime = exports.unstable_now();
+  "object" === typeof options && null !== options
+    ? ((options = options.delay),
+      (options =
+        "number" === typeof options && 0 < options
+          ? currentTime + options
+          : currentTime))
+    : (options = currentTime);
+  switch (priorityLevel) {
+    case 1:
+      var timeout = -1;
+      break;
+    case 2:
+      timeout = 250;
+      break;
+    case 5:
+      timeout = 1073741823;
+      break;
+    case 4:
+      timeout = 1e4;
+      break;
+    default:
+      timeout = 5e3;
+  }
+  timeout = options + timeout;
+  priorityLevel = {
+    id: taskIdCounter++,
+    callback: callback,
+    priorityLevel: priorityLevel,
+    startTime: options,
+    expirationTime: timeout,
+    sortIndex: -1
+  };
+  options > currentTime
+    ? ((priorityLevel.sortIndex = options),
+      push(timerQueue, priorityLevel),
+      null === peek(taskQueue) &&
+        priorityLevel === peek(timerQueue) &&
+        (isHostTimeoutScheduled
+          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))
+          : (isHostTimeoutScheduled = !0),
+        requestHostTimeout(handleTimeout, options - currentTime)))
+    : ((priorityLevel.sortIndex = timeout),
+      push(taskQueue, priorityLevel),
+      isHostCallbackScheduled ||
+        isPerformingWork ||
+        ((isHostCallbackScheduled = !0),
+        isMessageLoopRunning ||
+          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));
+  return priorityLevel;
+};
+exports.unstable_shouldYield = shouldYieldToHost;
+exports.unstable_wrapCallback = function (callback) {
+  var parentPriorityLevel = currentPriorityLevel;
+  return function () {
+    var previousPriorityLevel = currentPriorityLevel;
+    currentPriorityLevel = parentPriorityLevel;
+    try {
+      return callback.apply(this, arguments);
+    } finally {
+      currentPriorityLevel = previousPriorityLevel;
+    }
+  };
+};
Index: node_modules/scheduler/index.js
===================================================================
--- node_modules/scheduler/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/scheduler.production.js');
+} else {
+  module.exports = require('./cjs/scheduler.development.js');
+}
Index: node_modules/scheduler/index.native.js
===================================================================
--- node_modules/scheduler/index.native.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/index.native.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/scheduler.native.production.js');
+} else {
+  module.exports = require('./cjs/scheduler.native.development.js');
+}
Index: node_modules/scheduler/package.json
===================================================================
--- node_modules/scheduler/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+{
+  "name": "scheduler",
+  "version": "0.26.0",
+  "description": "Cooperative scheduler for the browser environment.",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/facebook/react.git",
+    "directory": "packages/scheduler"
+  },
+  "license": "MIT",
+  "keywords": [
+    "react"
+  ],
+  "bugs": {
+    "url": "https://github.com/facebook/react/issues"
+  },
+  "homepage": "https://react.dev/",
+  "files": [
+    "LICENSE",
+    "README.md",
+    "index.js",
+    "index.native.js",
+    "unstable_mock.js",
+    "unstable_post_task.js",
+    "cjs/"
+  ]
+}
Index: node_modules/scheduler/unstable_mock.js
===================================================================
--- node_modules/scheduler/unstable_mock.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/unstable_mock.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/scheduler-unstable_mock.production.js');
+} else {
+  module.exports = require('./cjs/scheduler-unstable_mock.development.js');
+}
Index: node_modules/scheduler/unstable_post_task.js
===================================================================
--- node_modules/scheduler/unstable_post_task.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/scheduler/unstable_post_task.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/scheduler-unstable_post_task.production.js');
+} else {
+  module.exports = require('./cjs/scheduler-unstable_post_task.development.js');
+}
Index: node_modules/tiny-invariant/LICENSE
===================================================================
--- node_modules/tiny-invariant/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Alexander Reardon
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/tiny-invariant/README.md
===================================================================
--- node_modules/tiny-invariant/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,109 @@
+# tiny-invariant 🔬💥
+
+[![Build Status](https://travis-ci.org/alexreardon/tiny-invariant.svg?branch=master)](https://travis-ci.org/alexreardon/tiny-invariant)
+[![npm](https://img.shields.io/npm/v/tiny-invariant.svg)](https://www.npmjs.com/package/tiny-invariant) [![dependencies](https://david-dm.org/alexreardon/tiny-invariant.svg)](https://david-dm.org/alexreardon/tiny-invariant)
+![types](https://img.shields.io/badge/types-typescript%20%7C%20flow-blueviolet)
+[![minzip](https://img.shields.io/bundlephobia/minzip/tiny-invariant.svg)](https://www.npmjs.com/package/tiny-invariant)
+[![Downloads per month](https://img.shields.io/npm/dm/tiny-invariant.svg)](https://www.npmjs.com/package/tiny-invariant)
+
+A tiny [`invariant`](https://www.npmjs.com/package/invariant) alternative.
+
+## What is `invariant`?
+
+An `invariant` function takes a value, and if the value is [falsy](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy) then the `invariant` function will throw. If the value is [truthy](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy), then the function will not throw.
+
+```js
+import invariant from 'tiny-invariant';
+
+invariant(truthyValue, 'This should not throw!');
+
+invariant(falsyValue, 'This will throw!');
+// Error('Invariant violation: This will throw!');
+```
+
+You can also provide a function to generate your message, for when your message is expensive to create
+
+```js
+import invariant from 'tiny-invariant';
+
+invariant(value, () => getExpensiveMessage());
+```
+
+## Why `tiny-invariant`?
+
+The [`library: invariant`](https://www.npmjs.com/package/invariant) supports passing in arguments to the `invariant` function in a sprintf style `(condition, format, a, b, c, d, e, f)`. It has internal logic to execute the sprintf substitutions. The sprintf logic is not removed in production builds. `tiny-invariant` has dropped all of the sprintf logic. `tiny-invariant` allows you to pass a single string message. With [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) there is really no need for a custom message formatter to be built into the library. If you need a multi part message you can just do this:
+
+```js
+invariant(condition, `Hello, ${name} - how are you today?`);
+```
+
+## Type narrowing
+
+`tiny-invariant` is useful for correctly narrowing types for `flow` and `typescript`
+
+```ts
+const value: Person | null = { name: 'Alex' }; // type of value == 'Person | null'
+invariant(value, 'Expected value to be a person');
+// type of value has been narrowed to 'Person'
+```
+
+## API: `(condition: any, message?: string | (() => string)) => void`
+
+- `condition` is required and can be anything
+- `message` optional `string` or a function that returns a `string` (`() => string`)
+
+## Installation
+
+```bash
+# yarn
+yarn add tiny-invariant
+
+# npm
+npm install tiny-invariant --save
+```
+
+## Dropping your `message` for kb savings!
+
+Big idea: you will want your compiler to convert this code:
+
+```js
+invariant(condition, 'My cool message that takes up a lot of kbs');
+```
+
+Into this:
+
+```js
+if (!condition) {
+  if ('production' !== process.env.NODE_ENV) {
+    invariant(false, 'My cool message that takes up a lot of kbs');
+  } else {
+    invariant(false);
+  }
+}
+```
+
+- **Babel**: recommend [`babel-plugin-dev-expression`](https://www.npmjs.com/package/babel-plugin-dev-expression)
+- **TypeScript**: recommend [`tsdx`](https://github.com/jaredpalmer/tsdx#invariant) (or you can run `babel-plugin-dev-expression` after TypeScript compiling)
+
+Your bundler can then drop the code in the `"production" !== process.env.NODE_ENV` block for your production builds to end up with this:
+
+```js
+if (!condition) {
+  invariant(false);
+}
+```
+
+- rollup: use [rollup-plugin-replace](https://github.com/rollup/rollup-plugin-replace) and set `NODE_ENV` to `production` and then `rollup` will treeshake out the unused code
+- Webpack: [instructions](https://webpack.js.org/guides/production/#specify-the-mode)
+
+## Builds
+
+- We have a `es` (EcmaScript module) build
+- We have a `cjs` (CommonJS) build
+- We have a `umd` (Universal module definition) build in case you needed it
+
+We expect `process.env.NODE_ENV` to be available at module compilation. We cache this value
+
+## That's it!
+
+🤘
Index: node_modules/tiny-invariant/dist/esm/package.json
===================================================================
--- node_modules/tiny-invariant/dist/esm/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/dist/esm/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+{ "type": "module" }
Index: node_modules/tiny-invariant/dist/esm/tiny-invariant.d.ts
===================================================================
--- node_modules/tiny-invariant/dist/esm/tiny-invariant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/dist/esm/tiny-invariant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * `invariant` is used to [assert](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions) that the `condition` is [truthy](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy).
+ *
+ * 💥 `invariant` will `throw` an `Error` if the `condition` is [falsey](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy)
+ *
+ * 🤏 `message`s are not displayed in production environments to help keep bundles small
+ *
+ * @example
+ *
+ * ```ts
+ * const value: Person | null = { name: 'Alex' };
+ * invariant(value, 'Expected value to be a person');
+ * // type of `value`` has been narrowed to `Person`
+ * ```
+ */
+export default function invariant(condition: any, 
+/**
+ * Can provide a string, or a function that returns a string for cases where
+ * the message takes a fair amount of effort to compute
+ */
+message?: string | (() => string)): asserts condition;
Index: node_modules/tiny-invariant/dist/esm/tiny-invariant.js
===================================================================
--- node_modules/tiny-invariant/dist/esm/tiny-invariant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/dist/esm/tiny-invariant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+var isProduction = process.env.NODE_ENV === 'production';
+var prefix = 'Invariant failed';
+function invariant(condition, message) {
+    if (condition) {
+        return;
+    }
+    if (isProduction) {
+        throw new Error(prefix);
+    }
+    var provided = typeof message === 'function' ? message() : message;
+    var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
+    throw new Error(value);
+}
+
+export { invariant as default };
Index: node_modules/tiny-invariant/dist/tiny-invariant.cjs.js
===================================================================
--- node_modules/tiny-invariant/dist/tiny-invariant.cjs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/dist/tiny-invariant.cjs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+'use strict';
+
+var isProduction = process.env.NODE_ENV === 'production';
+var prefix = 'Invariant failed';
+function invariant(condition, message) {
+    if (condition) {
+        return;
+    }
+    if (isProduction) {
+        throw new Error(prefix);
+    }
+    var provided = typeof message === 'function' ? message() : message;
+    var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
+    throw new Error(value);
+}
+
+module.exports = invariant;
Index: node_modules/tiny-invariant/dist/tiny-invariant.d.ts
===================================================================
--- node_modules/tiny-invariant/dist/tiny-invariant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/dist/tiny-invariant.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+/**
+ * `invariant` is used to [assert](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions) that the `condition` is [truthy](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy).
+ *
+ * 💥 `invariant` will `throw` an `Error` if the `condition` is [falsey](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy)
+ *
+ * 🤏 `message`s are not displayed in production environments to help keep bundles small
+ *
+ * @example
+ *
+ * ```ts
+ * const value: Person | null = { name: 'Alex' };
+ * invariant(value, 'Expected value to be a person');
+ * // type of `value`` has been narrowed to `Person`
+ * ```
+ */
+export default function invariant(condition: any, 
+/**
+ * Can provide a string, or a function that returns a string for cases where
+ * the message takes a fair amount of effort to compute
+ */
+message?: string | (() => string)): asserts condition;
Index: node_modules/tiny-invariant/dist/tiny-invariant.esm.js
===================================================================
--- node_modules/tiny-invariant/dist/tiny-invariant.esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/dist/tiny-invariant.esm.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+var isProduction = process.env.NODE_ENV === 'production';
+var prefix = 'Invariant failed';
+function invariant(condition, message) {
+    if (condition) {
+        return;
+    }
+    if (isProduction) {
+        throw new Error(prefix);
+    }
+    var provided = typeof message === 'function' ? message() : message;
+    var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
+    throw new Error(value);
+}
+
+export { invariant as default };
Index: node_modules/tiny-invariant/dist/tiny-invariant.js
===================================================================
--- node_modules/tiny-invariant/dist/tiny-invariant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/dist/tiny-invariant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.invariant = factory());
+})(this, (function () { 'use strict';
+
+    var isProduction = process.env.NODE_ENV === 'production';
+    var prefix = 'Invariant failed';
+    function invariant(condition, message) {
+        if (condition) {
+            return;
+        }
+        if (isProduction) {
+            throw new Error(prefix);
+        }
+        var provided = typeof message === 'function' ? message() : message;
+        var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
+        throw new Error(value);
+    }
+
+    return invariant;
+
+}));
Index: node_modules/tiny-invariant/dist/tiny-invariant.min.js
===================================================================
--- node_modules/tiny-invariant/dist/tiny-invariant.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/dist/tiny-invariant.min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,1 @@
+!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).invariant=n()}(this,(function(){"use strict";return function(e,n){if(!e)throw new Error("Invariant failed")}}));
Index: node_modules/tiny-invariant/package.json
===================================================================
--- node_modules/tiny-invariant/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,89 @@
+{
+  "name": "tiny-invariant",
+  "version": "1.3.3",
+  "description": "A tiny invariant function",
+  "author": "Alex Reardon <alexreardon@gmail.com>",
+  "license": "MIT",
+  "keywords": [
+    "invariant",
+    "error",
+    "assert",
+    "asserts"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/alexreardon/tiny-invariant.git"
+  },
+  "bugs": {
+    "url": "https://github.com/alexreardon/tiny-invariant/issues"
+  },
+  "main": "dist/tiny-invariant.cjs.js",
+  "module": "dist/tiny-invariant.esm.js",
+  "types": "dist/tiny-invariant.d.ts",
+  "exports": {
+    ".": {
+      "import": "./dist/esm/tiny-invariant.js",
+      "default": {
+        "types": "./dist/tiny-invariant.d.ts",
+        "default": "./dist/tiny-invariant.cjs.js"
+      }
+    }
+  },
+  "sideEffects": false,
+  "files": [
+    "/dist",
+    "/src"
+  ],
+  "size-limit": [
+    {
+      "path": "dist/tiny-invariant.min.js",
+      "limit": "217B"
+    },
+    {
+      "path": "dist/tiny-invariant.js",
+      "limit": "267B"
+    },
+    {
+      "path": "dist/tiny-invariant.cjs.js",
+      "limit": "171B"
+    },
+    {
+      "path": "dist/tiny-invariant.esm.js",
+      "import": "foo",
+      "limit": "112B"
+    }
+  ],
+  "scripts": {
+    "test": "yarn jest",
+    "test:size": "yarn build && yarn size-limit",
+    "prettier:write": "yarn prettier --debug-check src/** test/**",
+    "prettier:check": "yarn prettier --write src/** test/**",
+    "typescript:check": "tsc --noEmit",
+    "validate": "yarn prettier:check && yarn typescript:check",
+    "build:clean": "rimraf dist",
+    "build:flow": "cp src/tiny-invariant.js.flow dist/tiny-invariant.cjs.js.flow",
+    "build:typescript": "tsc ./src/tiny-invariant.ts --emitDeclarationOnly --declaration --outDir ./dist",
+    "build:typescript:esm": "tsc ./src/tiny-invariant.ts --emitDeclarationOnly --declaration --outDir ./dist/esm",
+    "build:dist": "yarn rollup --config rollup.config.mjs",
+    "build": "yarn build:clean && yarn build:dist && yarn build:typescript && yarn build:typescript:esm",
+    "prepublishOnly": "yarn build"
+  },
+  "devDependencies": {
+    "@rollup/plugin-replace": "^5.0.5",
+    "@rollup/plugin-typescript": "^11.1.6",
+    "@size-limit/preset-small-lib": "^11.0.2",
+    "@types/jest": "^29.5.12",
+    "@types/node": "^20.11.20",
+    "@types/rollup": "^0.54.0",
+    "expect-type": "^0.17.3",
+    "jest": "^29.7.0",
+    "prettier": "^3.2.5",
+    "rimraf": "^5.0.5",
+    "rollup": "^4.12.0",
+    "rollup-plugin-terser": "^7.0.2",
+    "size-limit": "^11.0.2",
+    "ts-jest": "^29.1.2",
+    "tslib": "^2.6.2",
+    "typescript": "^5.3.3"
+  }
+}
Index: node_modules/tiny-invariant/src/tiny-invariant.flow.js
===================================================================
--- node_modules/tiny-invariant/src/tiny-invariant.flow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/src/tiny-invariant.flow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+// @flow
+// This file is not actually executed
+// It is just used by flow for typing
+
+const prefix: string = 'Invariant failed';
+
+export default function invariant(condition: mixed, message?: string | (() => string)) {
+  if (condition) {
+    return;
+  }
+  throw new Error(`${prefix}: ${message || ''}`);
+}
Index: node_modules/tiny-invariant/src/tiny-invariant.ts
===================================================================
--- node_modules/tiny-invariant/src/tiny-invariant.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/tiny-invariant/src/tiny-invariant.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+const isProduction: boolean = process.env.NODE_ENV === 'production';
+const prefix: string = 'Invariant failed';
+
+/**
+ * `invariant` is used to [assert](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions) that the `condition` is [truthy](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy).
+ *
+ * 💥 `invariant` will `throw` an `Error` if the `condition` is [falsey](https://github.com/getify/You-Dont-Know-JS/blob/bdbe570600d4e1107d0b131787903ca1c9ec8140/up%20%26%20going/ch2.md#truthy--falsy)
+ *
+ * 🤏 `message`s are not displayed in production environments to help keep bundles small
+ *
+ * @example
+ *
+ * ```ts
+ * const value: Person | null = { name: 'Alex' };
+ * invariant(value, 'Expected value to be a person');
+ * // type of `value`` has been narrowed to `Person`
+ * ```
+ */
+export default function invariant(
+  condition: any,
+  // Not providing an inline default argument for message as the result is smaller
+  /**
+   * Can provide a string, or a function that returns a string for cases where
+   * the message takes a fair amount of effort to compute
+   */
+  message?: string | (() => string),
+): asserts condition {
+  if (condition) {
+    return;
+  }
+  // Condition not passed
+
+  // In production we strip the message but still throw
+  if (isProduction) {
+    throw new Error(prefix);
+  }
+
+  // When not in production we allow the message to pass through
+  // *This block will be removed in production builds*
+
+  const provided: string | undefined = typeof message === 'function' ? message() : message;
+
+  // Options:
+  // 1. message provided: `${prefix}: ${provided}`
+  // 2. message not provided: prefix
+  const value: string = provided ? `${prefix}: ${provided}` : prefix;
+  throw new Error(value);
+}
Index: node_modules/update-input-width/LICENSE
===================================================================
--- node_modules/update-input-width/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017–2023 Wojciech Maj
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/update-input-width/README.md
===================================================================
--- node_modules/update-input-width/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,78 @@
+[![npm](https://img.shields.io/npm/v/update-input-width.svg)](https://www.npmjs.com/package/update-input-width) ![downloads](https://img.shields.io/npm/dt/update-input-width.svg) [![CI](https://github.com/wojtekmaj/update-input-width/workflows/CI/badge.svg)](https://github.com/wojtekmaj/update-input-width/actions)
+
+# Update-Input-Width
+
+A function that given an input element, updates its width to fit its content.
+
+## tl;dr
+
+- Install by executing `npm install update-input-width` or `yarn add update-input-width`.
+- Import by adding `import updateInputWidth from 'update-input-width'`.
+- Use it by calling it with input element as an argument.
+
+## User guide
+
+### `updateInputWidth(element: HTMLInputElement)`
+
+A function that given an input element, updates its width to fit its content by setting inline `width` CSS property.
+
+#### Sample usage
+
+```ts
+import updateInputWidth from 'update-input-width';
+
+updateInputWidth(myInput); // 42
+```
+
+or
+
+```ts
+import { updateInputWidth } from 'update-input-width';
+
+updateInputWidth(myInput); // 42
+```
+
+### `getFontShorthand(element: HTMLElement)`
+
+A function that given HTML element returns font CSS shorthand property. Equal to Chrome-only code:
+
+```ts
+window.getComputedStyle(element).font;
+```
+
+#### Sample usage
+
+```ts
+import { getFontShorthand } from 'update-input-width';
+
+getFontShorthand(myInput); // 'normal normal 600 normal 20px / 25px Arial, sans-serif'
+```
+
+### `measureText(text: string, font: string)`
+
+A function that given text and font CSS shorthand property returns text width in pixels.
+
+#### Sample usage
+
+```ts
+import { measureText } from 'update-input-width';
+
+measureText('hello', 'normal normal 600 normal 20px / 25px Arial, sans-serif'); // 42
+```
+
+## License
+
+The MIT License.
+
+## Author
+
+<table>
+  <tr>
+    <td >
+      <img src="https://avatars.githubusercontent.com/u/5426427?v=4&s=128" width="64" height="64" alt="Wojciech Maj">
+    </td>
+    <td>
+      <a href="https://github.com/wojtekmaj">Wojciech Maj</a>
+    </td>
+  </tr>
+</table>
Index: node_modules/update-input-width/dist/cjs/index.d.ts
===================================================================
--- node_modules/update-input-width/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/dist/cjs/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Gets font CSS shorthand property given element.
+ *
+ * @param {HTMLElement} element Element to get font CSS shorthand property from
+ */
+export declare function getFontShorthand(element: HTMLElement): string;
+/**
+ * Measures text width given text and font CSS shorthand.
+ *
+ * @param {string} text Text to measure
+ * @param {string} font Font to use when measuring the text
+ */
+export declare function measureText(text: string, font: string): number | null;
+/**
+ * Updates input element width to fit its content given input element
+ * @param {HTMLInputElement} element
+ */
+export declare function updateInputWidth(element: HTMLInputElement): number | null;
+export default updateInputWidth;
Index: node_modules/update-input-width/dist/cjs/index.js
===================================================================
--- node_modules/update-input-width/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/dist/cjs/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.updateInputWidth = exports.measureText = exports.getFontShorthand = void 0;
+var allowedVariants = ['normal', 'small-caps'];
+/**
+ * Gets font CSS shorthand property given element.
+ *
+ * @param {HTMLElement} element Element to get font CSS shorthand property from
+ */
+function getFontShorthand(element) {
+    if (!element) {
+        return '';
+    }
+    var style = window.getComputedStyle(element);
+    if (style.font) {
+        return style.font;
+    }
+    var isFontDefined = style.fontFamily !== '';
+    if (!isFontDefined) {
+        return '';
+    }
+    var fontVariant = allowedVariants.includes(style.fontVariant) ? style.fontVariant : 'normal';
+    return "".concat(style.fontStyle, " ").concat(fontVariant, " ").concat(style.fontWeight, " ").concat(style.fontSize, " / ").concat(style.lineHeight, " ").concat(style.fontFamily);
+}
+exports.getFontShorthand = getFontShorthand;
+var cachedCanvas;
+/**
+ * Measures text width given text and font CSS shorthand.
+ *
+ * @param {string} text Text to measure
+ * @param {string} font Font to use when measuring the text
+ */
+function measureText(text, font) {
+    var canvas = cachedCanvas || (cachedCanvas = document.createElement('canvas'));
+    var context = canvas.getContext('2d');
+    // Context type not supported
+    if (!context) {
+        return null;
+    }
+    context.font = font;
+    var width = context.measureText(text).width;
+    return Math.ceil(width);
+}
+exports.measureText = measureText;
+/**
+ * Updates input element width to fit its content given input element
+ * @param {HTMLInputElement} element
+ */
+function updateInputWidth(element) {
+    if (typeof document === 'undefined' || !element) {
+        return null;
+    }
+    var font = getFontShorthand(element);
+    var text = element.value || element.placeholder;
+    var width = measureText(text, font);
+    if (width === null) {
+        return null;
+    }
+    element.style.width = "".concat(width, "px");
+    return width;
+}
+exports.updateInputWidth = updateInputWidth;
+exports.default = updateInputWidth;
Index: node_modules/update-input-width/dist/cjs/package.json
===================================================================
--- node_modules/update-input-width/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/dist/cjs/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,3 @@
+{
+  "type": "commonjs"
+}
Index: node_modules/update-input-width/dist/esm/index.d.ts
===================================================================
--- node_modules/update-input-width/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/dist/esm/index.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+/**
+ * Gets font CSS shorthand property given element.
+ *
+ * @param {HTMLElement} element Element to get font CSS shorthand property from
+ */
+export declare function getFontShorthand(element: HTMLElement): string;
+/**
+ * Measures text width given text and font CSS shorthand.
+ *
+ * @param {string} text Text to measure
+ * @param {string} font Font to use when measuring the text
+ */
+export declare function measureText(text: string, font: string): number | null;
+/**
+ * Updates input element width to fit its content given input element
+ * @param {HTMLInputElement} element
+ */
+export declare function updateInputWidth(element: HTMLInputElement): number | null;
+export default updateInputWidth;
Index: node_modules/update-input-width/dist/esm/index.js
===================================================================
--- node_modules/update-input-width/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/dist/esm/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,57 @@
+var allowedVariants = ['normal', 'small-caps'];
+/**
+ * Gets font CSS shorthand property given element.
+ *
+ * @param {HTMLElement} element Element to get font CSS shorthand property from
+ */
+export function getFontShorthand(element) {
+    if (!element) {
+        return '';
+    }
+    var style = window.getComputedStyle(element);
+    if (style.font) {
+        return style.font;
+    }
+    var isFontDefined = style.fontFamily !== '';
+    if (!isFontDefined) {
+        return '';
+    }
+    var fontVariant = allowedVariants.includes(style.fontVariant) ? style.fontVariant : 'normal';
+    return "".concat(style.fontStyle, " ").concat(fontVariant, " ").concat(style.fontWeight, " ").concat(style.fontSize, " / ").concat(style.lineHeight, " ").concat(style.fontFamily);
+}
+var cachedCanvas;
+/**
+ * Measures text width given text and font CSS shorthand.
+ *
+ * @param {string} text Text to measure
+ * @param {string} font Font to use when measuring the text
+ */
+export function measureText(text, font) {
+    var canvas = cachedCanvas || (cachedCanvas = document.createElement('canvas'));
+    var context = canvas.getContext('2d');
+    // Context type not supported
+    if (!context) {
+        return null;
+    }
+    context.font = font;
+    var width = context.measureText(text).width;
+    return Math.ceil(width);
+}
+/**
+ * Updates input element width to fit its content given input element
+ * @param {HTMLInputElement} element
+ */
+export function updateInputWidth(element) {
+    if (typeof document === 'undefined' || !element) {
+        return null;
+    }
+    var font = getFontShorthand(element);
+    var text = element.value || element.placeholder;
+    var width = measureText(text, font);
+    if (width === null) {
+        return null;
+    }
+    element.style.width = "".concat(width, "px");
+    return width;
+}
+export default updateInputWidth;
Index: node_modules/update-input-width/package.json
===================================================================
--- node_modules/update-input-width/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+{
+  "name": "update-input-width",
+  "version": "1.4.2",
+  "description": "A function that given input element, updates its width to fit its content.",
+  "type": "module",
+  "sideEffects": false,
+  "main": "./dist/cjs/index.js",
+  "module": "./dist/esm/index.js",
+  "source": "./src/index.ts",
+  "types": "./dist/cjs/index.d.ts",
+  "exports": {
+    "import": "./dist/esm/index.js",
+    "require": "./dist/cjs/index.js"
+  },
+  "scripts": {
+    "build": "yarn build-esm && yarn build-cjs && yarn build-cjs-package",
+    "build-esm": "tsc --project tsconfig.build.json --outDir dist/esm",
+    "build-cjs": "tsc --project tsconfig.build.json --outDir dist/cjs --module commonjs --verbatimModuleSyntax false",
+    "build-cjs-package": "echo '{\n  \"type\": \"commonjs\"\n}' > dist/cjs/package.json",
+    "clean": "rimraf dist",
+    "lint": "eslint .",
+    "prepack": "yarn clean && yarn build",
+    "prettier": "prettier --check . --cache",
+    "test": "yarn lint && yarn tsc && yarn prettier && yarn unit",
+    "tsc": "tsc --noEmit",
+    "unit": "vitest"
+  },
+  "keywords": [
+    "input width"
+  ],
+  "author": {
+    "name": "Wojciech Maj",
+    "email": "kontakt@wojtekmaj.pl"
+  },
+  "license": "MIT",
+  "devDependencies": {
+    "eslint": "^8.26.0",
+    "eslint-config-wojtekmaj": "^0.9.0",
+    "happy-dom": "^12.6.0",
+    "husky": "^8.0.0",
+    "lint-staged": "^14.0.0",
+    "prettier": "^3.0.0",
+    "rimraf": "^3.0.0",
+    "typescript": "^5.0.0",
+    "vitest": "^0.34.0",
+    "vitest-canvas-mock": "^0.2.2"
+  },
+  "publishConfig": {
+    "access": "public",
+    "provenance": true
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/wojtekmaj/update-input-width.git"
+  },
+  "funding": "https://github.com/wojtekmaj/update-input-width?sponsor=1",
+  "packageManager": "yarn@3.1.0"
+}
Index: node_modules/update-input-width/src/index.spec.ts
===================================================================
--- node_modules/update-input-width/src/index.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/src/index.spec.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,213 @@
+import { describe, expect, it, vi } from 'vitest';
+
+import updateInputWidthDefault, {
+  updateInputWidth,
+  getFontShorthand,
+  measureText,
+} from './index.js';
+
+import type { SpyInstance } from 'vitest';
+
+it('exports updateInputWidth() by default', () => {
+  expect(updateInputWidthDefault).toBeDefined();
+  expect(updateInputWidthDefault).toBe(updateInputWidth);
+});
+
+describe('updateInputWidth()', () => {
+  it('does nothing and returns null when passed nothing', () => {
+    // @ts-expect-error-next-line
+    const result = updateInputWidth();
+
+    expect(result).toBe(null);
+  });
+
+  it('sets valid width given empty input with placeholder', () => {
+    const element = document.createElement('input');
+    element.style.fontFamily = 'Arial';
+    element.style.fontSize = '20px';
+
+    const result = updateInputWidth(element);
+
+    expect(result).toEqual(expect.any(Number));
+  });
+});
+
+describe('getFontShorthand()', () => {
+  it('returns empty string when passed nothing', () => {
+    // @ts-expect-error-next-line
+    const result = getFontShorthand();
+
+    expect(result).toBe('');
+  });
+
+  it('returns valid font shorthand for a given element', () => {
+    const element = document.createElement('input');
+    element.style.fontFamily = 'Arial';
+    element.style.fontSize = '20px';
+
+    const result = getFontShorthand(element);
+
+    expect(result).toEqual(expect.any(String));
+  });
+
+  it('returns valid font shorthand if given font', () => {
+    const mockGetComputedStyle = vi.spyOn(global.window, 'getComputedStyle');
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockImplementation(() => ({
+      font: 'normal normal 400 20px / 25px Arial',
+      fontFamily: 'Arial',
+      fontSize: '20px',
+      fontStyle: 'normal',
+      fontVariant: 'normal',
+      fontWeight: '400',
+      lineHeight: '25px',
+    }));
+
+    const element = document.createElement('input');
+    const result = getFontShorthand(element);
+
+    expect(result).toBe('normal normal 400 20px / 25px Arial');
+
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockClear();
+  });
+
+  it('returns valid font shorthand if not given font', () => {
+    const mockGetComputedStyle = vi.spyOn(global.window, 'getComputedStyle');
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockImplementation(() => ({
+      font: '',
+      fontFamily: 'Arial',
+      fontSize: '20px',
+      fontStyle: 'normal',
+      fontVariant: 'normal',
+      fontWeight: '400',
+      lineHeight: '25px',
+    }));
+
+    const element = document.createElement('input');
+    const result = getFontShorthand(element);
+
+    expect(result).toBe('normal normal 400 20px / 25px Arial');
+
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockClear();
+  });
+
+  it('returns valid font shorthand if given allowed font-variant', () => {
+    const mockGetComputedStyle = vi.spyOn(global.window, 'getComputedStyle');
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockImplementation(() => ({
+      font: '',
+      fontFamily: 'Arial',
+      fontSize: '20px',
+      fontStyle: 'normal',
+      fontVariant: 'small-caps',
+      fontWeight: '400',
+      lineHeight: '25px',
+    }));
+
+    const element = document.createElement('input');
+    const result = getFontShorthand(element);
+
+    expect(result).toBe('normal small-caps 400 20px / 25px Arial');
+
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockClear();
+  });
+
+  it('returns valid font shorthand if given allowed font-variant', () => {
+    const mockGetComputedStyle = vi.spyOn(global.window, 'getComputedStyle');
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockImplementation(() => ({
+      font: '',
+      fontFamily: 'Arial',
+      fontSize: '20px',
+      fontStyle: 'normal',
+      fontVariant: 'tabular-nums',
+      fontWeight: '400',
+      lineHeight: '25px',
+    }));
+
+    const element = document.createElement('input');
+    const result = getFontShorthand(element);
+
+    expect(result).toBe('normal normal 400 20px / 25px Arial');
+
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockClear();
+  });
+
+  it('returns empty string for an element without styles', () => {
+    const mockGetComputedStyle = vi.spyOn(global.window, 'getComputedStyle');
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockImplementation(() => ({
+      font: '',
+      fontFamily: '',
+      fontSize: '',
+      fontStyle: '',
+      fontVariant: '',
+      fontWeight: '',
+      lineHeight: '',
+    }));
+
+    const element = document.createElement('input');
+    const result = getFontShorthand(element);
+
+    expect(result).toBe('');
+
+    (
+      mockGetComputedStyle as SpyInstance<
+        [elt: Element, pseudoElt?: string | null | undefined],
+        Partial<CSSStyleDeclaration>
+      >
+    ).mockClear();
+  });
+});
+
+describe('measureText()', () => {
+  it('returns valid measurement given text and font CSS shorthand', () => {
+    const text = 'Hello world';
+    const font = 'normal normal 600 normal 20px / 25px Arial, sans-serif';
+
+    const result = measureText(text, font);
+
+    expect(result).toEqual(expect.any(Number));
+  });
+});
Index: node_modules/update-input-width/src/index.ts
===================================================================
--- node_modules/update-input-width/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/update-input-width/src/index.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,75 @@
+const allowedVariants = ['normal', 'small-caps'];
+
+/**
+ * Gets font CSS shorthand property given element.
+ *
+ * @param {HTMLElement} element Element to get font CSS shorthand property from
+ */
+export function getFontShorthand(element: HTMLElement): string {
+  if (!element) {
+    return '';
+  }
+
+  const style = window.getComputedStyle(element);
+
+  if (style.font) {
+    return style.font;
+  }
+
+  const isFontDefined = style.fontFamily !== '';
+
+  if (!isFontDefined) {
+    return '';
+  }
+
+  const fontVariant = allowedVariants.includes(style.fontVariant) ? style.fontVariant : 'normal';
+
+  return `${style.fontStyle} ${fontVariant} ${style.fontWeight} ${style.fontSize} / ${style.lineHeight} ${style.fontFamily}`;
+}
+
+let cachedCanvas: HTMLCanvasElement;
+
+/**
+ * Measures text width given text and font CSS shorthand.
+ *
+ * @param {string} text Text to measure
+ * @param {string} font Font to use when measuring the text
+ */
+export function measureText(text: string, font: string) {
+  const canvas: HTMLCanvasElement =
+    cachedCanvas || (cachedCanvas = document.createElement('canvas'));
+  const context = canvas.getContext('2d');
+
+  // Context type not supported
+  if (!context) {
+    return null;
+  }
+
+  context.font = font;
+  const { width } = context.measureText(text);
+
+  return Math.ceil(width);
+}
+
+/**
+ * Updates input element width to fit its content given input element
+ * @param {HTMLInputElement} element
+ */
+export function updateInputWidth(element: HTMLInputElement) {
+  if (typeof document === 'undefined' || !element) {
+    return null;
+  }
+
+  const font = getFontShorthand(element);
+  const text = element.value || element.placeholder;
+  const width = measureText(text, font);
+
+  if (width === null) {
+    return null;
+  }
+
+  element.style.width = `${width}px`;
+  return width;
+}
+
+export default updateInputWidth;
Index: node_modules/use-sync-external-store/LICENSE
===================================================================
--- node_modules/use-sync-external-store/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/use-sync-external-store/README.md
===================================================================
--- node_modules/use-sync-external-store/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+# use-sync-external-store
+
+Backwards-compatible shim for [`React.useSyncExternalStore`](https://reactjs.org/docs/hooks-reference.html#usesyncexternalstore). Works with any React that supports Hooks.
+
+See also https://github.com/reactwg/react-18/discussions/86.
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,95 @@
+/**
+ * @license React
+ * use-sync-external-store-shim.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    function useSyncExternalStore$2(subscribe, getSnapshot) {
+      didWarnOld18Alpha ||
+        void 0 === React.startTransition ||
+        ((didWarnOld18Alpha = !0),
+        console.error(
+          "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."
+        ));
+      var value = getSnapshot();
+      if (!didWarnUncachedGetSnapshot) {
+        var cachedValue = getSnapshot();
+        objectIs(value, cachedValue) ||
+          (console.error(
+            "The result of getSnapshot should be cached to avoid an infinite loop"
+          ),
+          (didWarnUncachedGetSnapshot = !0));
+      }
+      cachedValue = useState({
+        inst: { value: value, getSnapshot: getSnapshot }
+      });
+      var inst = cachedValue[0].inst,
+        forceUpdate = cachedValue[1];
+      useLayoutEffect(
+        function () {
+          inst.value = value;
+          inst.getSnapshot = getSnapshot;
+          checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+        },
+        [subscribe, value, getSnapshot]
+      );
+      useEffect(
+        function () {
+          checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+          return subscribe(function () {
+            checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+          });
+        },
+        [subscribe]
+      );
+      useDebugValue(value);
+      return value;
+    }
+    function checkIfSnapshotChanged(inst) {
+      var latestGetSnapshot = inst.getSnapshot;
+      inst = inst.value;
+      try {
+        var nextValue = latestGetSnapshot();
+        return !objectIs(inst, nextValue);
+      } catch (error) {
+        return !0;
+      }
+    }
+    function useSyncExternalStore$1(subscribe, getSnapshot) {
+      return getSnapshot();
+    }
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+    var React = require("react"),
+      objectIs = "function" === typeof Object.is ? Object.is : is,
+      useState = React.useState,
+      useEffect = React.useEffect,
+      useLayoutEffect = React.useLayoutEffect,
+      useDebugValue = React.useDebugValue,
+      didWarnOld18Alpha = !1,
+      didWarnUncachedGetSnapshot = !1,
+      shim =
+        "undefined" === typeof window ||
+        "undefined" === typeof window.document ||
+        "undefined" === typeof window.document.createElement
+          ? useSyncExternalStore$1
+          : useSyncExternalStore$2;
+    exports.useSyncExternalStore =
+      void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+  })();
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.development.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,88 @@
+/**
+ * @license React
+ * use-sync-external-store-shim.native.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    function useSyncExternalStore$1(subscribe, getSnapshot) {
+      didWarnOld18Alpha ||
+        void 0 === React.startTransition ||
+        ((didWarnOld18Alpha = !0),
+        console.error(
+          "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."
+        ));
+      var value = getSnapshot();
+      if (!didWarnUncachedGetSnapshot) {
+        var cachedValue = getSnapshot();
+        objectIs(value, cachedValue) ||
+          (console.error(
+            "The result of getSnapshot should be cached to avoid an infinite loop"
+          ),
+          (didWarnUncachedGetSnapshot = !0));
+      }
+      cachedValue = useState({
+        inst: { value: value, getSnapshot: getSnapshot }
+      });
+      var inst = cachedValue[0].inst,
+        forceUpdate = cachedValue[1];
+      useLayoutEffect(
+        function () {
+          inst.value = value;
+          inst.getSnapshot = getSnapshot;
+          checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+        },
+        [subscribe, value, getSnapshot]
+      );
+      useEffect(
+        function () {
+          checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+          return subscribe(function () {
+            checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+          });
+        },
+        [subscribe]
+      );
+      useDebugValue(value);
+      return value;
+    }
+    function checkIfSnapshotChanged(inst) {
+      var latestGetSnapshot = inst.getSnapshot;
+      inst = inst.value;
+      try {
+        var nextValue = latestGetSnapshot();
+        return !objectIs(inst, nextValue);
+      } catch (error) {
+        return !0;
+      }
+    }
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+    var React = require("react"),
+      objectIs = "function" === typeof Object.is ? Object.is : is,
+      useState = React.useState,
+      useEffect = React.useEffect,
+      useLayoutEffect = React.useLayoutEffect,
+      useDebugValue = React.useDebugValue,
+      didWarnOld18Alpha = !1,
+      didWarnUncachedGetSnapshot = !1;
+    exports.useSyncExternalStore =
+      void 0 !== React.useSyncExternalStore
+        ? React.useSyncExternalStore
+        : useSyncExternalStore$1;
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+  })();
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.production.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.native.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+/**
+ * @license React
+ * use-sync-external-store-shim.native.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react");
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  useState = React.useState,
+  useEffect = React.useEffect,
+  useLayoutEffect = React.useLayoutEffect,
+  useDebugValue = React.useDebugValue;
+function useSyncExternalStore$1(subscribe, getSnapshot) {
+  var value = getSnapshot(),
+    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),
+    inst = _useState[0].inst,
+    forceUpdate = _useState[1];
+  useLayoutEffect(
+    function () {
+      inst.value = value;
+      inst.getSnapshot = getSnapshot;
+      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+    },
+    [subscribe, value, getSnapshot]
+  );
+  useEffect(
+    function () {
+      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+      return subscribe(function () {
+        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+      });
+    },
+    [subscribe]
+  );
+  useDebugValue(value);
+  return value;
+}
+function checkIfSnapshotChanged(inst) {
+  var latestGetSnapshot = inst.getSnapshot;
+  inst = inst.value;
+  try {
+    var nextValue = latestGetSnapshot();
+    return !objectIs(inst, nextValue);
+  } catch (error) {
+    return !0;
+  }
+}
+exports.useSyncExternalStore =
+  void 0 !== React.useSyncExternalStore
+    ? React.useSyncExternalStore
+    : useSyncExternalStore$1;
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,66 @@
+/**
+ * @license React
+ * use-sync-external-store-shim.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react");
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  useState = React.useState,
+  useEffect = React.useEffect,
+  useLayoutEffect = React.useLayoutEffect,
+  useDebugValue = React.useDebugValue;
+function useSyncExternalStore$2(subscribe, getSnapshot) {
+  var value = getSnapshot(),
+    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),
+    inst = _useState[0].inst,
+    forceUpdate = _useState[1];
+  useLayoutEffect(
+    function () {
+      inst.value = value;
+      inst.getSnapshot = getSnapshot;
+      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+    },
+    [subscribe, value, getSnapshot]
+  );
+  useEffect(
+    function () {
+      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+      return subscribe(function () {
+        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
+      });
+    },
+    [subscribe]
+  );
+  useDebugValue(value);
+  return value;
+}
+function checkIfSnapshotChanged(inst) {
+  var latestGetSnapshot = inst.getSnapshot;
+  inst = inst.value;
+  try {
+    var nextValue = latestGetSnapshot();
+    return !objectIs(inst, nextValue);
+  } catch (error) {
+    return !0;
+  }
+}
+function useSyncExternalStore$1(subscribe, getSnapshot) {
+  return getSnapshot();
+}
+var shim =
+  "undefined" === typeof window ||
+  "undefined" === typeof window.document ||
+  "undefined" === typeof window.document.createElement
+    ? useSyncExternalStore$1
+    : useSyncExternalStore$2;
+exports.useSyncExternalStore =
+  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,97 @@
+/**
+ * @license React
+ * use-sync-external-store-shim/with-selector.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+    var React = require("react"),
+      shim = require("use-sync-external-store/shim"),
+      objectIs = "function" === typeof Object.is ? Object.is : is,
+      useSyncExternalStore = shim.useSyncExternalStore,
+      useRef = React.useRef,
+      useEffect = React.useEffect,
+      useMemo = React.useMemo,
+      useDebugValue = React.useDebugValue;
+    exports.useSyncExternalStoreWithSelector = function (
+      subscribe,
+      getSnapshot,
+      getServerSnapshot,
+      selector,
+      isEqual
+    ) {
+      var instRef = useRef(null);
+      if (null === instRef.current) {
+        var inst = { hasValue: !1, value: null };
+        instRef.current = inst;
+      } else inst = instRef.current;
+      instRef = useMemo(
+        function () {
+          function memoizedSelector(nextSnapshot) {
+            if (!hasMemo) {
+              hasMemo = !0;
+              memoizedSnapshot = nextSnapshot;
+              nextSnapshot = selector(nextSnapshot);
+              if (void 0 !== isEqual && inst.hasValue) {
+                var currentSelection = inst.value;
+                if (isEqual(currentSelection, nextSnapshot))
+                  return (memoizedSelection = currentSelection);
+              }
+              return (memoizedSelection = nextSnapshot);
+            }
+            currentSelection = memoizedSelection;
+            if (objectIs(memoizedSnapshot, nextSnapshot))
+              return currentSelection;
+            var nextSelection = selector(nextSnapshot);
+            if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
+              return (memoizedSnapshot = nextSnapshot), currentSelection;
+            memoizedSnapshot = nextSnapshot;
+            return (memoizedSelection = nextSelection);
+          }
+          var hasMemo = !1,
+            memoizedSnapshot,
+            memoizedSelection,
+            maybeGetServerSnapshot =
+              void 0 === getServerSnapshot ? null : getServerSnapshot;
+          return [
+            function () {
+              return memoizedSelector(getSnapshot());
+            },
+            null === maybeGetServerSnapshot
+              ? void 0
+              : function () {
+                  return memoizedSelector(maybeGetServerSnapshot());
+                }
+          ];
+        },
+        [getSnapshot, getServerSnapshot, selector, isEqual]
+      );
+      var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);
+      useEffect(
+        function () {
+          inst.hasValue = !0;
+          inst.value = value;
+        },
+        [value]
+      );
+      useDebugValue(value);
+      return value;
+    };
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+  })();
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,85 @@
+/**
+ * @license React
+ * use-sync-external-store-shim/with-selector.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react"),
+  shim = require("use-sync-external-store/shim");
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  useSyncExternalStore = shim.useSyncExternalStore,
+  useRef = React.useRef,
+  useEffect = React.useEffect,
+  useMemo = React.useMemo,
+  useDebugValue = React.useDebugValue;
+exports.useSyncExternalStoreWithSelector = function (
+  subscribe,
+  getSnapshot,
+  getServerSnapshot,
+  selector,
+  isEqual
+) {
+  var instRef = useRef(null);
+  if (null === instRef.current) {
+    var inst = { hasValue: !1, value: null };
+    instRef.current = inst;
+  } else inst = instRef.current;
+  instRef = useMemo(
+    function () {
+      function memoizedSelector(nextSnapshot) {
+        if (!hasMemo) {
+          hasMemo = !0;
+          memoizedSnapshot = nextSnapshot;
+          nextSnapshot = selector(nextSnapshot);
+          if (void 0 !== isEqual && inst.hasValue) {
+            var currentSelection = inst.value;
+            if (isEqual(currentSelection, nextSnapshot))
+              return (memoizedSelection = currentSelection);
+          }
+          return (memoizedSelection = nextSnapshot);
+        }
+        currentSelection = memoizedSelection;
+        if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;
+        var nextSelection = selector(nextSnapshot);
+        if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
+          return (memoizedSnapshot = nextSnapshot), currentSelection;
+        memoizedSnapshot = nextSnapshot;
+        return (memoizedSelection = nextSelection);
+      }
+      var hasMemo = !1,
+        memoizedSnapshot,
+        memoizedSelection,
+        maybeGetServerSnapshot =
+          void 0 === getServerSnapshot ? null : getServerSnapshot;
+      return [
+        function () {
+          return memoizedSelector(getSnapshot());
+        },
+        null === maybeGetServerSnapshot
+          ? void 0
+          : function () {
+              return memoizedSelector(maybeGetServerSnapshot());
+            }
+      ];
+    },
+    [getSnapshot, getServerSnapshot, selector, isEqual]
+  );
+  var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);
+  useEffect(
+    function () {
+      inst.hasValue = !0;
+      inst.value = value;
+    },
+    [value]
+  );
+  useDebugValue(value);
+  return value;
+};
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,96 @@
+/**
+ * @license React
+ * use-sync-external-store-with-selector.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+"production" !== process.env.NODE_ENV &&
+  (function () {
+    function is(x, y) {
+      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+    }
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+    var React = require("react"),
+      objectIs = "function" === typeof Object.is ? Object.is : is,
+      useSyncExternalStore = React.useSyncExternalStore,
+      useRef = React.useRef,
+      useEffect = React.useEffect,
+      useMemo = React.useMemo,
+      useDebugValue = React.useDebugValue;
+    exports.useSyncExternalStoreWithSelector = function (
+      subscribe,
+      getSnapshot,
+      getServerSnapshot,
+      selector,
+      isEqual
+    ) {
+      var instRef = useRef(null);
+      if (null === instRef.current) {
+        var inst = { hasValue: !1, value: null };
+        instRef.current = inst;
+      } else inst = instRef.current;
+      instRef = useMemo(
+        function () {
+          function memoizedSelector(nextSnapshot) {
+            if (!hasMemo) {
+              hasMemo = !0;
+              memoizedSnapshot = nextSnapshot;
+              nextSnapshot = selector(nextSnapshot);
+              if (void 0 !== isEqual && inst.hasValue) {
+                var currentSelection = inst.value;
+                if (isEqual(currentSelection, nextSnapshot))
+                  return (memoizedSelection = currentSelection);
+              }
+              return (memoizedSelection = nextSnapshot);
+            }
+            currentSelection = memoizedSelection;
+            if (objectIs(memoizedSnapshot, nextSnapshot))
+              return currentSelection;
+            var nextSelection = selector(nextSnapshot);
+            if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
+              return (memoizedSnapshot = nextSnapshot), currentSelection;
+            memoizedSnapshot = nextSnapshot;
+            return (memoizedSelection = nextSelection);
+          }
+          var hasMemo = !1,
+            memoizedSnapshot,
+            memoizedSelection,
+            maybeGetServerSnapshot =
+              void 0 === getServerSnapshot ? null : getServerSnapshot;
+          return [
+            function () {
+              return memoizedSelector(getSnapshot());
+            },
+            null === maybeGetServerSnapshot
+              ? void 0
+              : function () {
+                  return memoizedSelector(maybeGetServerSnapshot());
+                }
+          ];
+        },
+        [getSnapshot, getServerSnapshot, selector, isEqual]
+      );
+      var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);
+      useEffect(
+        function () {
+          inst.hasValue = !0;
+          inst.value = value;
+        },
+        [value]
+      );
+      useDebugValue(value);
+      return value;
+    };
+    "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+      "function" ===
+        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+  })();
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,84 @@
+/**
+ * @license React
+ * use-sync-external-store-with-selector.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var React = require("react");
+function is(x, y) {
+  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
+}
+var objectIs = "function" === typeof Object.is ? Object.is : is,
+  useSyncExternalStore = React.useSyncExternalStore,
+  useRef = React.useRef,
+  useEffect = React.useEffect,
+  useMemo = React.useMemo,
+  useDebugValue = React.useDebugValue;
+exports.useSyncExternalStoreWithSelector = function (
+  subscribe,
+  getSnapshot,
+  getServerSnapshot,
+  selector,
+  isEqual
+) {
+  var instRef = useRef(null);
+  if (null === instRef.current) {
+    var inst = { hasValue: !1, value: null };
+    instRef.current = inst;
+  } else inst = instRef.current;
+  instRef = useMemo(
+    function () {
+      function memoizedSelector(nextSnapshot) {
+        if (!hasMemo) {
+          hasMemo = !0;
+          memoizedSnapshot = nextSnapshot;
+          nextSnapshot = selector(nextSnapshot);
+          if (void 0 !== isEqual && inst.hasValue) {
+            var currentSelection = inst.value;
+            if (isEqual(currentSelection, nextSnapshot))
+              return (memoizedSelection = currentSelection);
+          }
+          return (memoizedSelection = nextSnapshot);
+        }
+        currentSelection = memoizedSelection;
+        if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;
+        var nextSelection = selector(nextSnapshot);
+        if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
+          return (memoizedSnapshot = nextSnapshot), currentSelection;
+        memoizedSnapshot = nextSnapshot;
+        return (memoizedSelection = nextSelection);
+      }
+      var hasMemo = !1,
+        memoizedSnapshot,
+        memoizedSelection,
+        maybeGetServerSnapshot =
+          void 0 === getServerSnapshot ? null : getServerSnapshot;
+      return [
+        function () {
+          return memoizedSelector(getSnapshot());
+        },
+        null === maybeGetServerSnapshot
+          ? void 0
+          : function () {
+              return memoizedSelector(maybeGetServerSnapshot());
+            }
+      ];
+    },
+    [getSnapshot, getServerSnapshot, selector, isEqual]
+  );
+  var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);
+  useEffect(
+    function () {
+      inst.hasValue = !0;
+      inst.value = value;
+    },
+    [value]
+  );
+  useDebugValue(value);
+  return value;
+};
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store.development.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store.development.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+/**
+ * @license React
+ * use-sync-external-store.development.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+if ("production" !== process.env.NODE_ENV) {
+  "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+    "function" ===
+      typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&
+    __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
+  var useSyncExternalStore$jscomp$inline_1 =
+    require("react").useSyncExternalStore;
+  console.error(
+    "The main 'use-sync-external-store' entry point is not supported; all it does is re-export useSyncExternalStore from the 'react' package, so it only works with React 18+.\n\nIf you wish to support React 16 and 17, import from 'use-sync-external-store/shim' instead. It will fall back to a shimmed implementation when the native one is not available.\n\nIf you only support React 18+, you can import directly from 'react'."
+  );
+  exports.useSyncExternalStore = useSyncExternalStore$jscomp$inline_1;
+  "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
+    "function" ===
+      typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
+    __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
+}
Index: node_modules/use-sync-external-store/cjs/use-sync-external-store.production.js
===================================================================
--- node_modules/use-sync-external-store/cjs/use-sync-external-store.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/cjs/use-sync-external-store.production.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+/**
+ * @license React
+ * use-sync-external-store.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+"use strict";
+var useSyncExternalStore = require("react").useSyncExternalStore;
+exports.useSyncExternalStore = useSyncExternalStore;
Index: node_modules/use-sync-external-store/index.js
===================================================================
--- node_modules/use-sync-external-store/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/use-sync-external-store.production.js');
+} else {
+  module.exports = require('./cjs/use-sync-external-store.development.js');
+}
Index: node_modules/use-sync-external-store/package.json
===================================================================
--- node_modules/use-sync-external-store/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+{
+  "name": "use-sync-external-store",
+  "description": "Backwards compatible shim for React's useSyncExternalStore. Works with any React that supports hooks.",
+  "version": "1.5.0",
+  "exports": {
+    ".": "./index.js",
+    "./with-selector": "./with-selector.js",
+    "./with-selector.js": "./with-selector.js",
+    "./shim": {
+      "react-native": "./shim/index.native.js",
+      "default": "./shim/index.js"
+    },
+    "./shim/index.js": "./shim/index.js",
+    "./shim/index.native": "./shim/index.native.js",
+    "./shim/index.native.js": "./shim/index.native.js",
+    "./shim/with-selector": "./shim/with-selector.js",
+    "./shim/with-selector.js": "./shim/with-selector.js",
+    "./package.json": "./package.json"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/facebook/react.git",
+    "directory": "packages/use-sync-external-store"
+  },
+  "files": [
+    "LICENSE",
+    "README.md",
+    "index.js",
+    "index.native.js",
+    "with-selector.js",
+    "with-selector.native.js",
+    "shim/",
+    "cjs/"
+  ],
+  "license": "MIT",
+  "peerDependencies": {
+    "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+  },
+  "devDependencies": {
+    "react-17": "npm:react@^17",
+    "react-dom-17": "npm:react-dom@^17"
+  }
+}
Index: node_modules/use-sync-external-store/shim/index.js
===================================================================
--- node_modules/use-sync-external-store/shim/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/shim/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('../cjs/use-sync-external-store-shim.production.js');
+} else {
+  module.exports = require('../cjs/use-sync-external-store-shim.development.js');
+}
Index: node_modules/use-sync-external-store/shim/index.native.js
===================================================================
--- node_modules/use-sync-external-store/shim/index.native.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/shim/index.native.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('../cjs/use-sync-external-store-shim.native.production.js');
+} else {
+  module.exports = require('../cjs/use-sync-external-store-shim.native.development.js');
+}
Index: node_modules/use-sync-external-store/shim/with-selector.js
===================================================================
--- node_modules/use-sync-external-store/shim/with-selector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/shim/with-selector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');
+} else {
+  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');
+}
Index: node_modules/use-sync-external-store/with-selector.js
===================================================================
--- node_modules/use-sync-external-store/with-selector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/use-sync-external-store/with-selector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/use-sync-external-store-with-selector.production.js');
+} else {
+  module.exports = require('./cjs/use-sync-external-store-with-selector.development.js');
+}
Index: node_modules/victory-vendor/CHANGELOG.md
===================================================================
--- node_modules/victory-vendor/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+# victory-vendor
+
+## 37.3.6
+
+## 37.3.5
+
+## 37.3.4
+
+## 37.3.3
+
+## 37.3.2
+
+## 37.3.1
+
+## 37.3.0
+
+## 37.2.0
+
+## 37.1.2
+
+### Patch Changes
+
+- Fix victory-native container styles ([`eae3fe5dd`](https://github.com/FormidableLabs/victory/commit/eae3fe5dde175e68e146576655cb2e8054ad6456))
+
+## 37.1.1
+
+## 37.1.0
+
+## 37.0.2
+
+## 37.0.1
+
+## 37.0.0
+
+### Major Changes
+
+- Upgrade babel dependencies and build target to modern browsers ([#2804](https://github.com/FormidableLabs/victory/pull/2804))
+
+## 36.9.2
+
+## 36.9.1
+
+## 36.9.0
+
+## 36.8.6
+
+## 36.8.5
+
+### Patch Changes
+
+- Replace instances of lodash.assign with Object.assign ([#2757](https://github.com/FormidableLabs/victory/pull/2757))
+
+## 36.8.4
+
+## 36.8.3
+
+## 36.8.2
+
+## 36.8.1
+
+## 36.8.0
+
+## 36.7.0
+
+## 36.6.12
+
+## 36.6.11
+
+## 36.6.10
+
+### Patch Changes
+
+- Setup NPM Provenance ([#2590](https://github.com/FormidableLabs/victory/pull/2590))
+
+## 36.6.9
+
+### Patch Changes
+
+- Setup NPM Provenance ([#2587](https://github.com/FormidableLabs/victory/pull/2587))
+
+## 36.6.8
+
+## 36.6.7
+
+## 36.6.6
+
+## 36.6.5
+
+### Patch Changes
+
+- Export types directly from d3-\* (fixes [#2439](https://github.com/FormidableLabs/victory/issues/2439)) ([#2440](https://github.com/FormidableLabs/victory/pull/2440))
+
+## 36.6.4
+
+### Patch Changes
+
+- Allow data accessors to accept any data types (fixes [#2360](https://github.com/FormidableLabs/victory/issues/2360)) ([#2436](https://github.com/FormidableLabs/victory/pull/2436))
+
+## 36.6.3
+
+### Patch Changes
+
+- Do not generate \*.js.map sourcemaps (fixes [#2346](https://github.com/FormidableLabs/victory/issues/2346)) ([#2432](https://github.com/FormidableLabs/victory/pull/2432))
+
+## 36.6.2
+
+## 36.6.1
+
+## 36.6.0
+
+### Patch Changes
+
+- Update source code with minor lint-based improvements (see [#2236](https://github.com/FormidableLabs/victory/issues/2236)). ([#2403](https://github.com/FormidableLabs/victory/pull/2403))
+
+## 36.5.3 and earlier
+
+Change history for version 36.5.3 and earlier can be found in our root [CHANGELOG.md](https://github.com/FormidableLabs/victory/blob/main/CHANGELOG.md).
Index: node_modules/victory-vendor/README.md
===================================================================
--- node_modules/victory-vendor/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+# VictoryVendor
+
+Vendored dependencies for Victory.
+
+## Background
+
+D3 has released most of its libraries as ESM-only. This means that consumers in Node.js applications can no longer just `require()` anything with a d3 transitive dependency, including much of Victory.
+
+To help provide an easy path to folks still using CommonJS in their Node.js applications that consume Victory, we now provide this package to vendor in various d3-related packages.
+
+## Packages
+
+We presently provide the following top-level libraries:
+<!-- cat packages/victory-vendor/package.json | egrep '"d3-' | egrep -o 'd3-[^"]*'| sor t-->
+
+- d3-ease
+- d3-interpolate
+- d3-scale
+- d3-shape
+- d3-timer
+
+This is the total list of top and transitive libraries we vendor:
+<!-- ls packages/victory-vendor/lib-vendor | sort -->
+
+- d3-array
+- d3-color
+- d3-ease
+- d3-format
+- d3-interpolate
+- d3-path
+- d3-scale
+- d3-shape
+- d3-time
+- d3-time-format
+- d3-timer
+- internmap
+
+Note that this does _not_ include the following D3 libraries that still support CommonJS:
+
+- d3-voronoi
+
+## How it works
+
+We provide two alternate paths and behaviors -- for ESM and CommonJS
+
+### ESM
+
+If you do a Node.js import like:
+
+```js
+import { interpolate } from "victory-vendor/d3-interpolate";
+```
+
+under the hood it's going to just re-export and pass you through to `node_modules/d3-interpolate`, the **real** ESM library from D3.
+
+### CommonJS
+
+If you do a Node.js import like:
+
+```js
+const { interpolate } = require("victory-vendor/d3-interpolate");
+```
+
+under the hood it's going to will go to an alternate path that contains the transpiled version of the underlying d3 library to be found at `victory-vendor/lib-vendor/d3-interpolate/**/*.js`. This futher has internally consistent import references to other `victory-vendor/lib-vendor/<pkg-name>` paths.
+
+Note that for some tooling (like Jest) that doesn't play well with `package.json:exports` routing to this CommonJS path, we **also** output a root file in the form of `victory-vendor/d3-interpolate.js`.
+
+## Licenses
+
+This project is released under the MIT license, but the vendor'ed in libraries include other licenses (e.g. ISC) that we enumerate in our `package.json:license` field.
Index: node_modules/victory-vendor/d3-array.d.ts
===================================================================
--- node_modules/victory-vendor/d3-array.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-array.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+
+// `victory-vendor/d3-array` (TypeScript)
+//
+// Export the type definitions for this package:
+export * from "d3-array";
Index: node_modules/victory-vendor/d3-array.js
===================================================================
--- node_modules/victory-vendor/d3-array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+
+// `victory-vendor/d3-array` (CommonJS)
+// See upstream license: https://github.com/d3/d3-array/blob/main/LICENSE
+//
+// This file only exists for tooling that doesn't work yet with package.json:exports
+// by proxying through the CommonJS version.
+module.exports = require("./lib/d3-array");
Index: node_modules/victory-vendor/d3-ease.d.ts
===================================================================
--- node_modules/victory-vendor/d3-ease.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-ease.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+
+// `victory-vendor/d3-ease` (TypeScript)
+//
+// Export the type definitions for this package:
+export * from "d3-ease";
Index: node_modules/victory-vendor/d3-ease.js
===================================================================
--- node_modules/victory-vendor/d3-ease.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-ease.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+
+// `victory-vendor/d3-ease` (CommonJS)
+// See upstream license: https://github.com/d3/d3-ease/blob/main/LICENSE
+//
+// This file only exists for tooling that doesn't work yet with package.json:exports
+// by proxying through the CommonJS version.
+module.exports = require("./lib/d3-ease");
Index: node_modules/victory-vendor/d3-interpolate.d.ts
===================================================================
--- node_modules/victory-vendor/d3-interpolate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-interpolate.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+
+// `victory-vendor/d3-interpolate` (TypeScript)
+//
+// Export the type definitions for this package:
+export * from "d3-interpolate";
Index: node_modules/victory-vendor/d3-interpolate.js
===================================================================
--- node_modules/victory-vendor/d3-interpolate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-interpolate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+
+// `victory-vendor/d3-interpolate` (CommonJS)
+// See upstream license: https://github.com/d3/d3-interpolate/blob/main/LICENSE
+//
+// This file only exists for tooling that doesn't work yet with package.json:exports
+// by proxying through the CommonJS version.
+module.exports = require("./lib/d3-interpolate");
Index: node_modules/victory-vendor/d3-scale.d.ts
===================================================================
--- node_modules/victory-vendor/d3-scale.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-scale.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+
+// `victory-vendor/d3-scale` (TypeScript)
+//
+// Export the type definitions for this package:
+export * from "d3-scale";
Index: node_modules/victory-vendor/d3-scale.js
===================================================================
--- node_modules/victory-vendor/d3-scale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-scale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+
+// `victory-vendor/d3-scale` (CommonJS)
+// See upstream license: https://github.com/d3/d3-scale/blob/main/LICENSE
+//
+// This file only exists for tooling that doesn't work yet with package.json:exports
+// by proxying through the CommonJS version.
+module.exports = require("./lib/d3-scale");
Index: node_modules/victory-vendor/d3-shape.d.ts
===================================================================
--- node_modules/victory-vendor/d3-shape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-shape.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+
+// `victory-vendor/d3-shape` (TypeScript)
+//
+// Export the type definitions for this package:
+export * from "d3-shape";
Index: node_modules/victory-vendor/d3-shape.js
===================================================================
--- node_modules/victory-vendor/d3-shape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-shape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+
+// `victory-vendor/d3-shape` (CommonJS)
+// See upstream license: https://github.com/d3/d3-shape/blob/main/LICENSE
+//
+// This file only exists for tooling that doesn't work yet with package.json:exports
+// by proxying through the CommonJS version.
+module.exports = require("./lib/d3-shape");
Index: node_modules/victory-vendor/d3-time.d.ts
===================================================================
--- node_modules/victory-vendor/d3-time.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-time.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+
+// `victory-vendor/d3-time` (TypeScript)
+//
+// Export the type definitions for this package:
+export * from "d3-time";
Index: node_modules/victory-vendor/d3-time.js
===================================================================
--- node_modules/victory-vendor/d3-time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+
+// `victory-vendor/d3-time` (CommonJS)
+// See upstream license: https://github.com/d3/d3-time/blob/main/LICENSE
+//
+// This file only exists for tooling that doesn't work yet with package.json:exports
+// by proxying through the CommonJS version.
+module.exports = require("./lib/d3-time");
Index: node_modules/victory-vendor/d3-timer.d.ts
===================================================================
--- node_modules/victory-vendor/d3-timer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-timer.d.ts	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,5 @@
+
+// `victory-vendor/d3-timer` (TypeScript)
+//
+// Export the type definitions for this package:
+export * from "d3-timer";
Index: node_modules/victory-vendor/d3-timer.js
===================================================================
--- node_modules/victory-vendor/d3-timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/d3-timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+
+// `victory-vendor/d3-timer` (CommonJS)
+// See upstream license: https://github.com/d3/d3-timer/blob/main/LICENSE
+//
+// This file only exists for tooling that doesn't work yet with package.json:exports
+// by proxying through the CommonJS version.
+module.exports = require("./lib/d3-timer");
Index: node_modules/victory-vendor/es/d3-array.js
===================================================================
--- node_modules/victory-vendor/es/d3-array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-array` (ESM)
+// See upstream license: https://github.com/d3/d3-array/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-array`
+export * from "d3-array";
Index: node_modules/victory-vendor/es/d3-color.js
===================================================================
--- node_modules/victory-vendor/es/d3-color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-color` (ESM)
+// See upstream license: https://github.com/d3/d3-color/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-color`
+export * from "d3-color";
Index: node_modules/victory-vendor/es/d3-ease.js
===================================================================
--- node_modules/victory-vendor/es/d3-ease.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-ease.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-ease` (ESM)
+// See upstream license: https://github.com/d3/d3-ease/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-ease`
+export * from "d3-ease";
Index: node_modules/victory-vendor/es/d3-format.js
===================================================================
--- node_modules/victory-vendor/es/d3-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-format` (ESM)
+// See upstream license: https://github.com/d3/d3-format/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-format`
+export * from "d3-format";
Index: node_modules/victory-vendor/es/d3-interpolate.js
===================================================================
--- node_modules/victory-vendor/es/d3-interpolate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-interpolate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-interpolate` (ESM)
+// See upstream license: https://github.com/d3/d3-interpolate/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-interpolate`
+export * from "d3-interpolate";
Index: node_modules/victory-vendor/es/d3-path.js
===================================================================
--- node_modules/victory-vendor/es/d3-path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-path` (ESM)
+// See upstream license: https://github.com/d3/d3-path/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-path`
+export * from "d3-path";
Index: node_modules/victory-vendor/es/d3-scale.js
===================================================================
--- node_modules/victory-vendor/es/d3-scale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-scale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-scale` (ESM)
+// See upstream license: https://github.com/d3/d3-scale/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-scale`
+export * from "d3-scale";
Index: node_modules/victory-vendor/es/d3-shape.js
===================================================================
--- node_modules/victory-vendor/es/d3-shape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-shape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-shape` (ESM)
+// See upstream license: https://github.com/d3/d3-shape/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-shape`
+export * from "d3-shape";
Index: node_modules/victory-vendor/es/d3-time-format.js
===================================================================
--- node_modules/victory-vendor/es/d3-time-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-time-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-time-format` (ESM)
+// See upstream license: https://github.com/d3/d3-time-format/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-time-format`
+export * from "d3-time-format";
Index: node_modules/victory-vendor/es/d3-time.js
===================================================================
--- node_modules/victory-vendor/es/d3-time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-time` (ESM)
+// See upstream license: https://github.com/d3/d3-time/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-time`
+export * from "d3-time";
Index: node_modules/victory-vendor/es/d3-timer.js
===================================================================
--- node_modules/victory-vendor/es/d3-timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-timer` (ESM)
+// See upstream license: https://github.com/d3/d3-timer/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-timer`
+export * from "d3-timer";
Index: node_modules/victory-vendor/es/d3-voronoi.js
===================================================================
--- node_modules/victory-vendor/es/d3-voronoi.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/d3-voronoi.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-voronoi` (ESM)
+// See upstream license: https://github.com/d3/d3-voronoi/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/d3-voronoi`
+export * from "d3-voronoi";
Index: node_modules/victory-vendor/es/internmap.js
===================================================================
--- node_modules/victory-vendor/es/internmap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/es/internmap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/internmap` (ESM)
+// See upstream license: https://github.com/mbostock/internmap/blob/main/LICENSE
+//
+// Our ESM package uses the underlying installed dependencies of `node_modules/internmap`
+export * from "internmap";
Index: node_modules/victory-vendor/lib-vendor/d3-array/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2022 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/array.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.slice = exports.map = void 0;
+var array = Array.prototype;
+var slice = exports.slice = array.slice;
+var map = exports.map = array.map;
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/ascending.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/ascending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/ascending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = ascending;
+function ascending(a, b) {
+  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/bin.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/bin.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/bin.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,122 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = bin;
+var _array = require("./array.js");
+var _bisect = _interopRequireDefault(require("./bisect.js"));
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _extent = _interopRequireDefault(require("./extent.js"));
+var _identity = _interopRequireDefault(require("./identity.js"));
+var _nice = _interopRequireDefault(require("./nice.js"));
+var _ticks = _interopRequireWildcard(require("./ticks.js"));
+var _sturges = _interopRequireDefault(require("./threshold/sturges.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function bin() {
+  var value = _identity.default,
+    domain = _extent.default,
+    threshold = _sturges.default;
+  function histogram(data) {
+    if (!Array.isArray(data)) data = Array.from(data);
+    var i,
+      n = data.length,
+      x,
+      step,
+      values = new Array(n);
+    for (i = 0; i < n; ++i) {
+      values[i] = value(data[i], i, data);
+    }
+    var xz = domain(values),
+      x0 = xz[0],
+      x1 = xz[1],
+      tz = threshold(values, x0, x1);
+
+    // Convert number of thresholds into uniform thresholds, and nice the
+    // default domain accordingly.
+    if (!Array.isArray(tz)) {
+      const max = x1,
+        tn = +tz;
+      if (domain === _extent.default) [x0, x1] = (0, _nice.default)(x0, x1, tn);
+      tz = (0, _ticks.default)(x0, x1, tn);
+
+      // If the domain is aligned with the first tick (which it will by
+      // default), then we can use quantization rather than bisection to bin
+      // values, which is substantially faster.
+      if (tz[0] <= x0) step = (0, _ticks.tickIncrement)(x0, x1, tn);
+
+      // If the last threshold is coincident with the domain’s upper bound, the
+      // last bin will be zero-width. If the default domain is used, and this
+      // last threshold is coincident with the maximum input value, we can
+      // extend the niced upper bound by one tick to ensure uniform bin widths;
+      // otherwise, we simply remove the last threshold. Note that we don’t
+      // coerce values or the domain to numbers, and thus must be careful to
+      // compare order (>=) rather than strict equality (===)!
+      if (tz[tz.length - 1] >= x1) {
+        if (max >= x1 && domain === _extent.default) {
+          const step = (0, _ticks.tickIncrement)(x0, x1, tn);
+          if (isFinite(step)) {
+            if (step > 0) {
+              x1 = (Math.floor(x1 / step) + 1) * step;
+            } else if (step < 0) {
+              x1 = (Math.ceil(x1 * -step) + 1) / -step;
+            }
+          }
+        } else {
+          tz.pop();
+        }
+      }
+    }
+
+    // Remove any thresholds outside the domain.
+    var m = tz.length;
+    while (tz[0] <= x0) tz.shift(), --m;
+    while (tz[m - 1] > x1) tz.pop(), --m;
+    var bins = new Array(m + 1),
+      bin;
+
+    // Initialize bins.
+    for (i = 0; i <= m; ++i) {
+      bin = bins[i] = [];
+      bin.x0 = i > 0 ? tz[i - 1] : x0;
+      bin.x1 = i < m ? tz[i] : x1;
+    }
+
+    // Assign data to bins by value, ignoring any outside the domain.
+    if (isFinite(step)) {
+      if (step > 0) {
+        for (i = 0; i < n; ++i) {
+          if ((x = values[i]) != null && x0 <= x && x <= x1) {
+            bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);
+          }
+        }
+      } else if (step < 0) {
+        for (i = 0; i < n; ++i) {
+          if ((x = values[i]) != null && x0 <= x && x <= x1) {
+            const j = Math.floor((x0 - x) * step);
+            bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding
+          }
+        }
+      }
+    } else {
+      for (i = 0; i < n; ++i) {
+        if ((x = values[i]) != null && x0 <= x && x <= x1) {
+          bins[(0, _bisect.default)(tz, x, 0, m)].push(data[i]);
+        }
+      }
+    }
+    return bins;
+  }
+  histogram.value = function (_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : (0, _constant.default)(_), histogram) : value;
+  };
+  histogram.domain = function (_) {
+    return arguments.length ? (domain = typeof _ === "function" ? _ : (0, _constant.default)([_[0], _[1]]), histogram) : domain;
+  };
+  histogram.thresholds = function (_) {
+    return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? (0, _constant.default)(_array.slice.call(_)) : (0, _constant.default)(_), histogram) : threshold;
+  };
+  return histogram;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/bisect.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/bisect.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/bisect.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.bisectRight = exports.bisectLeft = exports.bisectCenter = void 0;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+var _bisector = _interopRequireDefault(require("./bisector.js"));
+var _number = _interopRequireDefault(require("./number.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+const ascendingBisect = (0, _bisector.default)(_ascending.default);
+const bisectRight = exports.bisectRight = ascendingBisect.right;
+const bisectLeft = exports.bisectLeft = ascendingBisect.left;
+const bisectCenter = exports.bisectCenter = (0, _bisector.default)(_number.default).center;
+var _default = exports.default = bisectRight;
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/bisector.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/bisector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/bisector.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = bisector;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+var _descending = _interopRequireDefault(require("./descending.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function bisector(f) {
+  let compare1, compare2, delta;
+
+  // If an accessor is specified, promote it to a comparator. In this case we
+  // can test whether the search value is (self-) comparable. We can’t do this
+  // for a comparator (except for specific, known comparators) because we can’t
+  // tell if the comparator is symmetric, and an asymmetric comparator can’t be
+  // used to test whether a single value is comparable.
+  if (f.length !== 2) {
+    compare1 = _ascending.default;
+    compare2 = (d, x) => (0, _ascending.default)(f(d), x);
+    delta = (d, x) => f(d) - x;
+  } else {
+    compare1 = f === _ascending.default || f === _descending.default ? f : zero;
+    compare2 = f;
+    delta = f;
+  }
+  function left(a, x, lo = 0, hi = a.length) {
+    if (lo < hi) {
+      if (compare1(x, x) !== 0) return hi;
+      do {
+        const mid = lo + hi >>> 1;
+        if (compare2(a[mid], x) < 0) lo = mid + 1;else hi = mid;
+      } while (lo < hi);
+    }
+    return lo;
+  }
+  function right(a, x, lo = 0, hi = a.length) {
+    if (lo < hi) {
+      if (compare1(x, x) !== 0) return hi;
+      do {
+        const mid = lo + hi >>> 1;
+        if (compare2(a[mid], x) <= 0) lo = mid + 1;else hi = mid;
+      } while (lo < hi);
+    }
+    return lo;
+  }
+  function center(a, x, lo = 0, hi = a.length) {
+    const i = left(a, x, lo, hi - 1);
+    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
+  }
+  return {
+    left,
+    center,
+    right
+  };
+}
+function zero() {
+  return 0;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/constant.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = constant;
+function constant(x) {
+  return () => x;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/count.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/count.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/count.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = count;
+function count(values, valueof) {
+  let count = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        ++count;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        ++count;
+      }
+    }
+  }
+  return count;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/cross.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = cross;
+function length(array) {
+  return array.length | 0;
+}
+function empty(length) {
+  return !(length > 0);
+}
+function arrayify(values) {
+  return typeof values !== "object" || "length" in values ? values : Array.from(values);
+}
+function reducer(reduce) {
+  return values => reduce(...values);
+}
+function cross(...values) {
+  const reduce = typeof values[values.length - 1] === "function" && reducer(values.pop());
+  values = values.map(arrayify);
+  const lengths = values.map(length);
+  const j = values.length - 1;
+  const index = new Array(j + 1).fill(0);
+  const product = [];
+  if (j < 0 || lengths.some(empty)) return product;
+  while (true) {
+    product.push(index.map((j, i) => values[i][j]));
+    let i = j;
+    while (++index[i] === lengths[i]) {
+      if (i === 0) return reduce ? product.map(reduce) : product;
+      index[i--] = 0;
+    }
+  }
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/cumsum.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/cumsum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/cumsum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = cumsum;
+function cumsum(values, valueof) {
+  var sum = 0,
+    index = 0;
+  return Float64Array.from(values, valueof === undefined ? v => sum += +v || 0 : v => sum += +valueof(v, index++, values) || 0);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/descending.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = descending;
+function descending(a, b) {
+  return a == null || b == null ? NaN : b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/deviation.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/deviation.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/deviation.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = deviation;
+var _variance = _interopRequireDefault(require("./variance.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function deviation(values, valueof) {
+  const v = (0, _variance.default)(values, valueof);
+  return v ? Math.sqrt(v) : v;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/difference.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/difference.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = difference;
+var _index = require("../../../lib-vendor/internmap/src/index.js");
+function difference(values, ...others) {
+  values = new _index.InternSet(values);
+  for (const other of others) {
+    for (const value of other) {
+      values.delete(value);
+    }
+  }
+  return values;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/disjoint.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/disjoint.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/disjoint.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = disjoint;
+var _index = require("../../../lib-vendor/internmap/src/index.js");
+function disjoint(values, other) {
+  const iterator = other[Symbol.iterator](),
+    set = new _index.InternSet();
+  for (const v of values) {
+    if (set.has(v)) return false;
+    let value, done;
+    while (({
+      value,
+      done
+    } = iterator.next())) {
+      if (done) break;
+      if (Object.is(v, value)) return false;
+      set.add(value);
+    }
+  }
+  return true;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/every.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/every.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/every.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = every;
+function every(values, test) {
+  if (typeof test !== "function") throw new TypeError("test is not a function");
+  let index = -1;
+  for (const value of values) {
+    if (!test(value, ++index, values)) {
+      return false;
+    }
+  }
+  return true;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/extent.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/extent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/extent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = extent;
+function extent(values, valueof) {
+  let min;
+  let max;
+  if (valueof === undefined) {
+    for (const value of values) {
+      if (value != null) {
+        if (min === undefined) {
+          if (value >= value) min = max = value;
+        } else {
+          if (min > value) min = value;
+          if (max < value) max = value;
+        }
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null) {
+        if (min === undefined) {
+          if (value >= value) min = max = value;
+        } else {
+          if (min > value) min = value;
+          if (max < value) max = value;
+        }
+      }
+    }
+  }
+  return [min, max];
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/filter.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/filter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/filter.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = filter;
+function filter(values, test) {
+  if (typeof test !== "function") throw new TypeError("test is not a function");
+  const array = [];
+  let index = -1;
+  for (const value of values) {
+    if (test(value, ++index, values)) {
+      array.push(value);
+    }
+  }
+  return array;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/fsum.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/fsum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/fsum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,77 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Adder = void 0;
+exports.fcumsum = fcumsum;
+exports.fsum = fsum;
+// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423
+class Adder {
+  constructor() {
+    this._partials = new Float64Array(32);
+    this._n = 0;
+  }
+  add(x) {
+    const p = this._partials;
+    let i = 0;
+    for (let j = 0; j < this._n && j < 32; j++) {
+      const y = p[j],
+        hi = x + y,
+        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);
+      if (lo) p[i++] = lo;
+      x = hi;
+    }
+    p[i] = x;
+    this._n = i + 1;
+    return this;
+  }
+  valueOf() {
+    const p = this._partials;
+    let n = this._n,
+      x,
+      y,
+      lo,
+      hi = 0;
+    if (n > 0) {
+      hi = p[--n];
+      while (n > 0) {
+        x = hi;
+        y = p[--n];
+        hi = x + y;
+        lo = y - (hi - x);
+        if (lo) break;
+      }
+      if (n > 0 && (lo < 0 && p[n - 1] < 0 || lo > 0 && p[n - 1] > 0)) {
+        y = lo * 2;
+        x = hi + y;
+        if (y == x - hi) hi = x;
+      }
+    }
+    return hi;
+  }
+}
+exports.Adder = Adder;
+function fsum(values, valueof) {
+  const adder = new Adder();
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value = +value) {
+        adder.add(value);
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if (value = +valueof(value, ++index, values)) {
+        adder.add(value);
+      }
+    }
+  }
+  return +adder;
+}
+function fcumsum(values, valueof) {
+  const adder = new Adder();
+  let index = -1;
+  return Float64Array.from(values, valueof === undefined ? v => adder.add(+v || 0) : v => adder.add(+valueof(v, ++index, values) || 0));
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/greatest.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/greatest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/greatest.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = greatest;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function greatest(values, compare = _ascending.default) {
+  let max;
+  let defined = false;
+  if (compare.length === 1) {
+    let maxValue;
+    for (const element of values) {
+      const value = compare(element);
+      if (defined ? (0, _ascending.default)(value, maxValue) > 0 : (0, _ascending.default)(value, value) === 0) {
+        max = element;
+        maxValue = value;
+        defined = true;
+      }
+    }
+  } else {
+    for (const value of values) {
+      if (defined ? compare(value, max) > 0 : compare(value, value) === 0) {
+        max = value;
+        defined = true;
+      }
+    }
+  }
+  return max;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/greatestIndex.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/greatestIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/greatestIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = greatestIndex;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+var _maxIndex = _interopRequireDefault(require("./maxIndex.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function greatestIndex(values, compare = _ascending.default) {
+  if (compare.length === 1) return (0, _maxIndex.default)(values, compare);
+  let maxValue;
+  let max = -1;
+  let index = -1;
+  for (const value of values) {
+    ++index;
+    if (max < 0 ? compare(value, value) === 0 : compare(value, maxValue) > 0) {
+      maxValue = value;
+      max = index;
+    }
+  }
+  return max;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/group.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/group.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/group.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = group;
+exports.flatGroup = flatGroup;
+exports.flatRollup = flatRollup;
+exports.groups = groups;
+exports.index = index;
+exports.indexes = indexes;
+exports.rollup = rollup;
+exports.rollups = rollups;
+var _index = require("../../../lib-vendor/internmap/src/index.js");
+var _identity = _interopRequireDefault(require("./identity.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function group(values, ...keys) {
+  return nest(values, _identity.default, _identity.default, keys);
+}
+function groups(values, ...keys) {
+  return nest(values, Array.from, _identity.default, keys);
+}
+function flatten(groups, keys) {
+  for (let i = 1, n = keys.length; i < n; ++i) {
+    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));
+  }
+  return groups;
+}
+function flatGroup(values, ...keys) {
+  return flatten(groups(values, ...keys), keys);
+}
+function flatRollup(values, reduce, ...keys) {
+  return flatten(rollups(values, reduce, ...keys), keys);
+}
+function rollup(values, reduce, ...keys) {
+  return nest(values, _identity.default, reduce, keys);
+}
+function rollups(values, reduce, ...keys) {
+  return nest(values, Array.from, reduce, keys);
+}
+function index(values, ...keys) {
+  return nest(values, _identity.default, unique, keys);
+}
+function indexes(values, ...keys) {
+  return nest(values, Array.from, unique, keys);
+}
+function unique(values) {
+  if (values.length !== 1) throw new Error("duplicate key");
+  return values[0];
+}
+function nest(values, map, reduce, keys) {
+  return function regroup(values, i) {
+    if (i >= keys.length) return reduce(values);
+    const groups = new _index.InternMap();
+    const keyof = keys[i++];
+    let index = -1;
+    for (const value of values) {
+      const key = keyof(value, ++index, values);
+      const group = groups.get(key);
+      if (group) group.push(value);else groups.set(key, [value]);
+    }
+    for (const [key, values] of groups) {
+      groups.set(key, regroup(values, i));
+    }
+    return map(groups);
+  }(values, 0);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/groupSort.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/groupSort.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/groupSort.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = groupSort;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+var _group = _interopRequireWildcard(require("./group.js"));
+var _sort = _interopRequireDefault(require("./sort.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function groupSort(values, reduce, key) {
+  return (reduce.length !== 2 ? (0, _sort.default)((0, _group.rollup)(values, reduce, key), ([ak, av], [bk, bv]) => (0, _ascending.default)(av, bv) || (0, _ascending.default)(ak, bk)) : (0, _sort.default)((0, _group.default)(values, key), ([ak, av], [bk, bv]) => reduce(av, bv) || (0, _ascending.default)(ak, bk))).map(([key]) => key);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/identity.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = identity;
+function identity(x) {
+  return x;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,508 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "Adder", {
+  enumerable: true,
+  get: function () {
+    return _fsum.Adder;
+  }
+});
+Object.defineProperty(exports, "InternMap", {
+  enumerable: true,
+  get: function () {
+    return _index.InternMap;
+  }
+});
+Object.defineProperty(exports, "InternSet", {
+  enumerable: true,
+  get: function () {
+    return _index.InternSet;
+  }
+});
+Object.defineProperty(exports, "ascending", {
+  enumerable: true,
+  get: function () {
+    return _ascending.default;
+  }
+});
+Object.defineProperty(exports, "bin", {
+  enumerable: true,
+  get: function () {
+    return _bin.default;
+  }
+});
+Object.defineProperty(exports, "bisect", {
+  enumerable: true,
+  get: function () {
+    return _bisect.default;
+  }
+});
+Object.defineProperty(exports, "bisectCenter", {
+  enumerable: true,
+  get: function () {
+    return _bisect.bisectCenter;
+  }
+});
+Object.defineProperty(exports, "bisectLeft", {
+  enumerable: true,
+  get: function () {
+    return _bisect.bisectLeft;
+  }
+});
+Object.defineProperty(exports, "bisectRight", {
+  enumerable: true,
+  get: function () {
+    return _bisect.bisectRight;
+  }
+});
+Object.defineProperty(exports, "bisector", {
+  enumerable: true,
+  get: function () {
+    return _bisector.default;
+  }
+});
+Object.defineProperty(exports, "count", {
+  enumerable: true,
+  get: function () {
+    return _count.default;
+  }
+});
+Object.defineProperty(exports, "cross", {
+  enumerable: true,
+  get: function () {
+    return _cross.default;
+  }
+});
+Object.defineProperty(exports, "cumsum", {
+  enumerable: true,
+  get: function () {
+    return _cumsum.default;
+  }
+});
+Object.defineProperty(exports, "descending", {
+  enumerable: true,
+  get: function () {
+    return _descending.default;
+  }
+});
+Object.defineProperty(exports, "deviation", {
+  enumerable: true,
+  get: function () {
+    return _deviation.default;
+  }
+});
+Object.defineProperty(exports, "difference", {
+  enumerable: true,
+  get: function () {
+    return _difference.default;
+  }
+});
+Object.defineProperty(exports, "disjoint", {
+  enumerable: true,
+  get: function () {
+    return _disjoint.default;
+  }
+});
+Object.defineProperty(exports, "every", {
+  enumerable: true,
+  get: function () {
+    return _every.default;
+  }
+});
+Object.defineProperty(exports, "extent", {
+  enumerable: true,
+  get: function () {
+    return _extent.default;
+  }
+});
+Object.defineProperty(exports, "fcumsum", {
+  enumerable: true,
+  get: function () {
+    return _fsum.fcumsum;
+  }
+});
+Object.defineProperty(exports, "filter", {
+  enumerable: true,
+  get: function () {
+    return _filter.default;
+  }
+});
+Object.defineProperty(exports, "flatGroup", {
+  enumerable: true,
+  get: function () {
+    return _group.flatGroup;
+  }
+});
+Object.defineProperty(exports, "flatRollup", {
+  enumerable: true,
+  get: function () {
+    return _group.flatRollup;
+  }
+});
+Object.defineProperty(exports, "fsum", {
+  enumerable: true,
+  get: function () {
+    return _fsum.fsum;
+  }
+});
+Object.defineProperty(exports, "greatest", {
+  enumerable: true,
+  get: function () {
+    return _greatest.default;
+  }
+});
+Object.defineProperty(exports, "greatestIndex", {
+  enumerable: true,
+  get: function () {
+    return _greatestIndex.default;
+  }
+});
+Object.defineProperty(exports, "group", {
+  enumerable: true,
+  get: function () {
+    return _group.default;
+  }
+});
+Object.defineProperty(exports, "groupSort", {
+  enumerable: true,
+  get: function () {
+    return _groupSort.default;
+  }
+});
+Object.defineProperty(exports, "groups", {
+  enumerable: true,
+  get: function () {
+    return _group.groups;
+  }
+});
+Object.defineProperty(exports, "histogram", {
+  enumerable: true,
+  get: function () {
+    return _bin.default;
+  }
+});
+Object.defineProperty(exports, "index", {
+  enumerable: true,
+  get: function () {
+    return _group.index;
+  }
+});
+Object.defineProperty(exports, "indexes", {
+  enumerable: true,
+  get: function () {
+    return _group.indexes;
+  }
+});
+Object.defineProperty(exports, "intersection", {
+  enumerable: true,
+  get: function () {
+    return _intersection.default;
+  }
+});
+Object.defineProperty(exports, "least", {
+  enumerable: true,
+  get: function () {
+    return _least.default;
+  }
+});
+Object.defineProperty(exports, "leastIndex", {
+  enumerable: true,
+  get: function () {
+    return _leastIndex.default;
+  }
+});
+Object.defineProperty(exports, "map", {
+  enumerable: true,
+  get: function () {
+    return _map.default;
+  }
+});
+Object.defineProperty(exports, "max", {
+  enumerable: true,
+  get: function () {
+    return _max.default;
+  }
+});
+Object.defineProperty(exports, "maxIndex", {
+  enumerable: true,
+  get: function () {
+    return _maxIndex.default;
+  }
+});
+Object.defineProperty(exports, "mean", {
+  enumerable: true,
+  get: function () {
+    return _mean.default;
+  }
+});
+Object.defineProperty(exports, "median", {
+  enumerable: true,
+  get: function () {
+    return _median.default;
+  }
+});
+Object.defineProperty(exports, "merge", {
+  enumerable: true,
+  get: function () {
+    return _merge.default;
+  }
+});
+Object.defineProperty(exports, "min", {
+  enumerable: true,
+  get: function () {
+    return _min.default;
+  }
+});
+Object.defineProperty(exports, "minIndex", {
+  enumerable: true,
+  get: function () {
+    return _minIndex.default;
+  }
+});
+Object.defineProperty(exports, "mode", {
+  enumerable: true,
+  get: function () {
+    return _mode.default;
+  }
+});
+Object.defineProperty(exports, "nice", {
+  enumerable: true,
+  get: function () {
+    return _nice.default;
+  }
+});
+Object.defineProperty(exports, "pairs", {
+  enumerable: true,
+  get: function () {
+    return _pairs.default;
+  }
+});
+Object.defineProperty(exports, "permute", {
+  enumerable: true,
+  get: function () {
+    return _permute.default;
+  }
+});
+Object.defineProperty(exports, "quantile", {
+  enumerable: true,
+  get: function () {
+    return _quantile.default;
+  }
+});
+Object.defineProperty(exports, "quantileSorted", {
+  enumerable: true,
+  get: function () {
+    return _quantile.quantileSorted;
+  }
+});
+Object.defineProperty(exports, "quickselect", {
+  enumerable: true,
+  get: function () {
+    return _quickselect.default;
+  }
+});
+Object.defineProperty(exports, "range", {
+  enumerable: true,
+  get: function () {
+    return _range.default;
+  }
+});
+Object.defineProperty(exports, "rank", {
+  enumerable: true,
+  get: function () {
+    return _rank.default;
+  }
+});
+Object.defineProperty(exports, "reduce", {
+  enumerable: true,
+  get: function () {
+    return _reduce.default;
+  }
+});
+Object.defineProperty(exports, "reverse", {
+  enumerable: true,
+  get: function () {
+    return _reverse.default;
+  }
+});
+Object.defineProperty(exports, "rollup", {
+  enumerable: true,
+  get: function () {
+    return _group.rollup;
+  }
+});
+Object.defineProperty(exports, "rollups", {
+  enumerable: true,
+  get: function () {
+    return _group.rollups;
+  }
+});
+Object.defineProperty(exports, "scan", {
+  enumerable: true,
+  get: function () {
+    return _scan.default;
+  }
+});
+Object.defineProperty(exports, "shuffle", {
+  enumerable: true,
+  get: function () {
+    return _shuffle.default;
+  }
+});
+Object.defineProperty(exports, "shuffler", {
+  enumerable: true,
+  get: function () {
+    return _shuffle.shuffler;
+  }
+});
+Object.defineProperty(exports, "some", {
+  enumerable: true,
+  get: function () {
+    return _some.default;
+  }
+});
+Object.defineProperty(exports, "sort", {
+  enumerable: true,
+  get: function () {
+    return _sort.default;
+  }
+});
+Object.defineProperty(exports, "subset", {
+  enumerable: true,
+  get: function () {
+    return _subset.default;
+  }
+});
+Object.defineProperty(exports, "sum", {
+  enumerable: true,
+  get: function () {
+    return _sum.default;
+  }
+});
+Object.defineProperty(exports, "superset", {
+  enumerable: true,
+  get: function () {
+    return _superset.default;
+  }
+});
+Object.defineProperty(exports, "thresholdFreedmanDiaconis", {
+  enumerable: true,
+  get: function () {
+    return _freedmanDiaconis.default;
+  }
+});
+Object.defineProperty(exports, "thresholdScott", {
+  enumerable: true,
+  get: function () {
+    return _scott.default;
+  }
+});
+Object.defineProperty(exports, "thresholdSturges", {
+  enumerable: true,
+  get: function () {
+    return _sturges.default;
+  }
+});
+Object.defineProperty(exports, "tickIncrement", {
+  enumerable: true,
+  get: function () {
+    return _ticks.tickIncrement;
+  }
+});
+Object.defineProperty(exports, "tickStep", {
+  enumerable: true,
+  get: function () {
+    return _ticks.tickStep;
+  }
+});
+Object.defineProperty(exports, "ticks", {
+  enumerable: true,
+  get: function () {
+    return _ticks.default;
+  }
+});
+Object.defineProperty(exports, "transpose", {
+  enumerable: true,
+  get: function () {
+    return _transpose.default;
+  }
+});
+Object.defineProperty(exports, "union", {
+  enumerable: true,
+  get: function () {
+    return _union.default;
+  }
+});
+Object.defineProperty(exports, "variance", {
+  enumerable: true,
+  get: function () {
+    return _variance.default;
+  }
+});
+Object.defineProperty(exports, "zip", {
+  enumerable: true,
+  get: function () {
+    return _zip.default;
+  }
+});
+var _bisect = _interopRequireWildcard(require("./bisect.js"));
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+var _bisector = _interopRequireDefault(require("./bisector.js"));
+var _count = _interopRequireDefault(require("./count.js"));
+var _cross = _interopRequireDefault(require("./cross.js"));
+var _cumsum = _interopRequireDefault(require("./cumsum.js"));
+var _descending = _interopRequireDefault(require("./descending.js"));
+var _deviation = _interopRequireDefault(require("./deviation.js"));
+var _extent = _interopRequireDefault(require("./extent.js"));
+var _fsum = require("./fsum.js");
+var _group = _interopRequireWildcard(require("./group.js"));
+var _groupSort = _interopRequireDefault(require("./groupSort.js"));
+var _bin = _interopRequireDefault(require("./bin.js"));
+var _freedmanDiaconis = _interopRequireDefault(require("./threshold/freedmanDiaconis.js"));
+var _scott = _interopRequireDefault(require("./threshold/scott.js"));
+var _sturges = _interopRequireDefault(require("./threshold/sturges.js"));
+var _max = _interopRequireDefault(require("./max.js"));
+var _maxIndex = _interopRequireDefault(require("./maxIndex.js"));
+var _mean = _interopRequireDefault(require("./mean.js"));
+var _median = _interopRequireDefault(require("./median.js"));
+var _merge = _interopRequireDefault(require("./merge.js"));
+var _min = _interopRequireDefault(require("./min.js"));
+var _minIndex = _interopRequireDefault(require("./minIndex.js"));
+var _mode = _interopRequireDefault(require("./mode.js"));
+var _nice = _interopRequireDefault(require("./nice.js"));
+var _pairs = _interopRequireDefault(require("./pairs.js"));
+var _permute = _interopRequireDefault(require("./permute.js"));
+var _quantile = _interopRequireWildcard(require("./quantile.js"));
+var _quickselect = _interopRequireDefault(require("./quickselect.js"));
+var _range = _interopRequireDefault(require("./range.js"));
+var _rank = _interopRequireDefault(require("./rank.js"));
+var _least = _interopRequireDefault(require("./least.js"));
+var _leastIndex = _interopRequireDefault(require("./leastIndex.js"));
+var _greatest = _interopRequireDefault(require("./greatest.js"));
+var _greatestIndex = _interopRequireDefault(require("./greatestIndex.js"));
+var _scan = _interopRequireDefault(require("./scan.js"));
+var _shuffle = _interopRequireWildcard(require("./shuffle.js"));
+var _sum = _interopRequireDefault(require("./sum.js"));
+var _ticks = _interopRequireWildcard(require("./ticks.js"));
+var _transpose = _interopRequireDefault(require("./transpose.js"));
+var _variance = _interopRequireDefault(require("./variance.js"));
+var _zip = _interopRequireDefault(require("./zip.js"));
+var _every = _interopRequireDefault(require("./every.js"));
+var _some = _interopRequireDefault(require("./some.js"));
+var _filter = _interopRequireDefault(require("./filter.js"));
+var _map = _interopRequireDefault(require("./map.js"));
+var _reduce = _interopRequireDefault(require("./reduce.js"));
+var _reverse = _interopRequireDefault(require("./reverse.js"));
+var _sort = _interopRequireDefault(require("./sort.js"));
+var _difference = _interopRequireDefault(require("./difference.js"));
+var _disjoint = _interopRequireDefault(require("./disjoint.js"));
+var _intersection = _interopRequireDefault(require("./intersection.js"));
+var _subset = _interopRequireDefault(require("./subset.js"));
+var _superset = _interopRequireDefault(require("./superset.js"));
+var _union = _interopRequireDefault(require("./union.js"));
+var _index = require("../../../lib-vendor/internmap/src/index.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/intersection.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/intersection.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = intersection;
+var _index = require("../../../lib-vendor/internmap/src/index.js");
+function intersection(values, ...others) {
+  values = new _index.InternSet(values);
+  others = others.map(set);
+  out: for (const value of values) {
+    for (const other of others) {
+      if (!other.has(value)) {
+        values.delete(value);
+        continue out;
+      }
+    }
+  }
+  return values;
+}
+function set(values) {
+  return values instanceof _index.InternSet ? values : new _index.InternSet(values);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/least.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/least.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/least.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = least;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function least(values, compare = _ascending.default) {
+  let min;
+  let defined = false;
+  if (compare.length === 1) {
+    let minValue;
+    for (const element of values) {
+      const value = compare(element);
+      if (defined ? (0, _ascending.default)(value, minValue) < 0 : (0, _ascending.default)(value, value) === 0) {
+        min = element;
+        minValue = value;
+        defined = true;
+      }
+    }
+  } else {
+    for (const value of values) {
+      if (defined ? compare(value, min) < 0 : compare(value, value) === 0) {
+        min = value;
+        defined = true;
+      }
+    }
+  }
+  return min;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/leastIndex.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/leastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/leastIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = leastIndex;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+var _minIndex = _interopRequireDefault(require("./minIndex.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function leastIndex(values, compare = _ascending.default) {
+  if (compare.length === 1) return (0, _minIndex.default)(values, compare);
+  let minValue;
+  let min = -1;
+  let index = -1;
+  for (const value of values) {
+    ++index;
+    if (min < 0 ? compare(value, value) === 0 : compare(value, minValue) < 0) {
+      minValue = value;
+      min = index;
+    }
+  }
+  return min;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/map.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/map.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/map.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = map;
+function map(values, mapper) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  if (typeof mapper !== "function") throw new TypeError("mapper is not a function");
+  return Array.from(values, (value, index) => mapper(value, index, values));
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/max.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/max.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/max.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = max;
+function max(values, valueof) {
+  let max;
+  if (valueof === undefined) {
+    for (const value of values) {
+      if (value != null && (max < value || max === undefined && value >= value)) {
+        max = value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (max < value || max === undefined && value >= value)) {
+        max = value;
+      }
+    }
+  }
+  return max;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/maxIndex.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/maxIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/maxIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = maxIndex;
+function maxIndex(values, valueof) {
+  let max;
+  let maxIndex = -1;
+  let index = -1;
+  if (valueof === undefined) {
+    for (const value of values) {
+      ++index;
+      if (value != null && (max < value || max === undefined && value >= value)) {
+        max = value, maxIndex = index;
+      }
+    }
+  } else {
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (max < value || max === undefined && value >= value)) {
+        max = value, maxIndex = index;
+      }
+    }
+  }
+  return maxIndex;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/mean.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/mean.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = mean;
+function mean(values, valueof) {
+  let count = 0;
+  let sum = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        ++count, sum += value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        ++count, sum += value;
+      }
+    }
+  }
+  if (count) return sum / count;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/median.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/median.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/median.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = median;
+var _quantile = _interopRequireDefault(require("./quantile.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function median(values, valueof) {
+  return (0, _quantile.default)(values, 0.5, valueof);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/merge.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/merge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = merge;
+function* flatten(arrays) {
+  for (const array of arrays) {
+    yield* array;
+  }
+}
+function merge(arrays) {
+  return Array.from(flatten(arrays));
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/min.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/min.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = min;
+function min(values, valueof) {
+  let min;
+  if (valueof === undefined) {
+    for (const value of values) {
+      if (value != null && (min > value || min === undefined && value >= value)) {
+        min = value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (min > value || min === undefined && value >= value)) {
+        min = value;
+      }
+    }
+  }
+  return min;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/minIndex.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/minIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/minIndex.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = minIndex;
+function minIndex(values, valueof) {
+  let min;
+  let minIndex = -1;
+  let index = -1;
+  if (valueof === undefined) {
+    for (const value of values) {
+      ++index;
+      if (value != null && (min > value || min === undefined && value >= value)) {
+        min = value, minIndex = index;
+      }
+    }
+  } else {
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (min > value || min === undefined && value >= value)) {
+        min = value, minIndex = index;
+      }
+    }
+  }
+  return minIndex;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/mode.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/mode.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/mode.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = mode;
+var _index = require("../../../lib-vendor/internmap/src/index.js");
+function mode(values, valueof) {
+  const counts = new _index.InternMap();
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && value >= value) {
+        counts.set(value, (counts.get(value) || 0) + 1);
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && value >= value) {
+        counts.set(value, (counts.get(value) || 0) + 1);
+      }
+    }
+  }
+  let modeValue;
+  let modeCount = 0;
+  for (const [value, count] of counts) {
+    if (count > modeCount) {
+      modeCount = count;
+      modeValue = value;
+    }
+  }
+  return modeValue;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/nice.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/nice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/nice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = nice;
+var _ticks = require("./ticks.js");
+function nice(start, stop, count) {
+  let prestep;
+  while (true) {
+    const step = (0, _ticks.tickIncrement)(start, stop, count);
+    if (step === prestep || step === 0 || !isFinite(step)) {
+      return [start, stop];
+    } else if (step > 0) {
+      start = Math.floor(start / step) * step;
+      stop = Math.ceil(stop / step) * step;
+    } else if (step < 0) {
+      start = Math.ceil(start * step) / step;
+      stop = Math.floor(stop * step) / step;
+    }
+    prestep = step;
+  }
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/number.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = number;
+exports.numbers = numbers;
+function number(x) {
+  return x === null ? NaN : +x;
+}
+function* numbers(values, valueof) {
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        yield value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        yield value;
+      }
+    }
+  }
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/pairs.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/pairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/pairs.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = pairs;
+exports.pair = pair;
+function pairs(values, pairof = pair) {
+  const pairs = [];
+  let previous;
+  let first = false;
+  for (const value of values) {
+    if (first) pairs.push(pairof(previous, value));
+    previous = value;
+    first = true;
+  }
+  return pairs;
+}
+function pair(a, b) {
+  return [a, b];
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/permute.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/permute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/permute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = permute;
+function permute(source, keys) {
+  return Array.from(keys, key => source[key]);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/quantile.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/quantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/quantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = quantile;
+exports.quantileSorted = quantileSorted;
+var _max = _interopRequireDefault(require("./max.js"));
+var _min = _interopRequireDefault(require("./min.js"));
+var _quickselect = _interopRequireDefault(require("./quickselect.js"));
+var _number = _interopRequireWildcard(require("./number.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function quantile(values, p, valueof) {
+  values = Float64Array.from((0, _number.numbers)(values, valueof));
+  if (!(n = values.length)) return;
+  if ((p = +p) <= 0 || n < 2) return (0, _min.default)(values);
+  if (p >= 1) return (0, _max.default)(values);
+  var n,
+    i = (n - 1) * p,
+    i0 = Math.floor(i),
+    value0 = (0, _max.default)((0, _quickselect.default)(values, i0).subarray(0, i0 + 1)),
+    value1 = (0, _min.default)(values.subarray(i0 + 1));
+  return value0 + (value1 - value0) * (i - i0);
+}
+function quantileSorted(values, p, valueof = _number.default) {
+  if (!(n = values.length)) return;
+  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);
+  if (p >= 1) return +valueof(values[n - 1], n - 1, values);
+  var n,
+    i = (n - 1) * p,
+    i0 = Math.floor(i),
+    value0 = +valueof(values[i0], i0, values),
+    value1 = +valueof(values[i0 + 1], i0 + 1, values);
+  return value0 + (value1 - value0) * (i - i0);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/quickselect.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/quickselect.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/quickselect.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,43 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = quickselect;
+var _sort = require("./sort.js");
+// Based on https://github.com/mourner/quickselect
+// ISC license, Copyright 2018 Vladimir Agafonkin.
+function quickselect(array, k, left = 0, right = array.length - 1, compare) {
+  compare = compare === undefined ? _sort.ascendingDefined : (0, _sort.compareDefined)(compare);
+  while (right > left) {
+    if (right - left > 600) {
+      const n = right - left + 1;
+      const m = k - left + 1;
+      const z = Math.log(n);
+      const s = 0.5 * Math.exp(2 * z / 3);
+      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
+      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
+      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
+      quickselect(array, k, newLeft, newRight, compare);
+    }
+    const t = array[k];
+    let i = left;
+    let j = right;
+    swap(array, left, k);
+    if (compare(array[right], t) > 0) swap(array, left, right);
+    while (i < j) {
+      swap(array, i, j), ++i, --j;
+      while (compare(array[i], t) < 0) ++i;
+      while (compare(array[j], t) > 0) --j;
+    }
+    if (compare(array[left], t) === 0) swap(array, left, j);else ++j, swap(array, j, right);
+    if (j <= k) left = j + 1;
+    if (k <= j) right = j - 1;
+  }
+  return array;
+}
+function swap(array, i, j) {
+  const t = array[i];
+  array[i] = array[j];
+  array[j] = t;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/range.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/range.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = range;
+function range(start, stop, step) {
+  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
+  var i = -1,
+    n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
+    range = new Array(n);
+  while (++i < n) {
+    range[i] = start + i * step;
+  }
+  return range;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/rank.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/rank.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/rank.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = rank;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+var _sort = require("./sort.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function rank(values, valueof = _ascending.default) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  let V = Array.from(values);
+  const R = new Float64Array(V.length);
+  if (valueof.length !== 2) V = V.map(valueof), valueof = _ascending.default;
+  const compareIndex = (i, j) => valueof(V[i], V[j]);
+  let k, r;
+  Uint32Array.from(V, (_, i) => i).sort(valueof === _ascending.default ? (i, j) => (0, _sort.ascendingDefined)(V[i], V[j]) : (0, _sort.compareDefined)(compareIndex)).forEach((j, i) => {
+    const c = compareIndex(j, k === undefined ? j : k);
+    if (c >= 0) {
+      if (k === undefined || c > 0) k = j, r = i;
+      R[j] = r;
+    } else {
+      R[j] = NaN;
+    }
+  });
+  return R;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/reduce.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/reduce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/reduce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = reduce;
+function reduce(values, reducer, value) {
+  if (typeof reducer !== "function") throw new TypeError("reducer is not a function");
+  const iterator = values[Symbol.iterator]();
+  let done,
+    next,
+    index = -1;
+  if (arguments.length < 3) {
+    ({
+      done,
+      value
+    } = iterator.next());
+    if (done) return;
+    ++index;
+  }
+  while (({
+    done,
+    value: next
+  } = iterator.next()), !done) {
+    value = reducer(value, next, ++index, values);
+  }
+  return value;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/reverse.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = reverse;
+function reverse(values) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  return Array.from(values).reverse();
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/scan.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/scan.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/scan.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = scan;
+var _leastIndex = _interopRequireDefault(require("./leastIndex.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function scan(values, compare) {
+  const index = (0, _leastIndex.default)(values, compare);
+  return index < 0 ? undefined : index;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/shuffle.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/shuffle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+exports.shuffler = shuffler;
+var _default = exports.default = shuffler(Math.random);
+function shuffler(random) {
+  return function shuffle(array, i0 = 0, i1 = array.length) {
+    let m = i1 - (i0 = +i0);
+    while (m) {
+      const i = random() * m-- | 0,
+        t = array[m + i0];
+      array[m + i0] = array[i + i0];
+      array[i + i0] = t;
+    }
+    return array;
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/some.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/some.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/some.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = some;
+function some(values, test) {
+  if (typeof test !== "function") throw new TypeError("test is not a function");
+  let index = -1;
+  for (const value of values) {
+    if (test(value, ++index, values)) {
+      return true;
+    }
+  }
+  return false;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/sort.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/sort.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/sort.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,45 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ascendingDefined = ascendingDefined;
+exports.compareDefined = compareDefined;
+exports.default = sort;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+var _permute = _interopRequireDefault(require("./permute.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function sort(values, ...F) {
+  if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
+  values = Array.from(values);
+  let [f] = F;
+  if (f && f.length !== 2 || F.length > 1) {
+    const index = Uint32Array.from(values, (d, i) => i);
+    if (F.length > 1) {
+      F = F.map(f => values.map(f));
+      index.sort((i, j) => {
+        for (const f of F) {
+          const c = ascendingDefined(f[i], f[j]);
+          if (c) return c;
+        }
+      });
+    } else {
+      f = values.map(f);
+      index.sort((i, j) => ascendingDefined(f[i], f[j]));
+    }
+    return (0, _permute.default)(values, index);
+  }
+  return values.sort(compareDefined(f));
+}
+function compareDefined(compare = _ascending.default) {
+  if (compare === _ascending.default) return ascendingDefined;
+  if (typeof compare !== "function") throw new TypeError("compare is not a function");
+  return (a, b) => {
+    const x = compare(a, b);
+    if (x || x === 0) return x;
+    return (compare(b, b) === 0) - (compare(a, a) === 0);
+  };
+}
+function ascendingDefined(a, b) {
+  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/subset.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/subset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/subset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = subset;
+var _superset = _interopRequireDefault(require("./superset.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function subset(values, other) {
+  return (0, _superset.default)(other, values);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/sum.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/sum.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = sum;
+function sum(values, valueof) {
+  let sum = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value = +value) {
+        sum += value;
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if (value = +valueof(value, ++index, values)) {
+        sum += value;
+      }
+    }
+  }
+  return sum;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/superset.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/superset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/superset.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = superset;
+function superset(values, other) {
+  const iterator = values[Symbol.iterator](),
+    set = new Set();
+  for (const o of other) {
+    const io = intern(o);
+    if (set.has(io)) continue;
+    let value, done;
+    while (({
+      value,
+      done
+    } = iterator.next())) {
+      if (done) return false;
+      const ivalue = intern(value);
+      set.add(ivalue);
+      if (Object.is(io, ivalue)) break;
+    }
+  }
+  return true;
+}
+function intern(value) {
+  return value !== null && typeof value === "object" ? value.valueOf() : value;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/threshold/freedmanDiaconis.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/threshold/freedmanDiaconis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/threshold/freedmanDiaconis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = thresholdFreedmanDiaconis;
+var _count = _interopRequireDefault(require("../count.js"));
+var _quantile = _interopRequireDefault(require("../quantile.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function thresholdFreedmanDiaconis(values, min, max) {
+  return Math.ceil((max - min) / (2 * ((0, _quantile.default)(values, 0.75) - (0, _quantile.default)(values, 0.25)) * Math.pow((0, _count.default)(values), -1 / 3)));
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/threshold/scott.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/threshold/scott.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/threshold/scott.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = thresholdScott;
+var _count = _interopRequireDefault(require("../count.js"));
+var _deviation = _interopRequireDefault(require("../deviation.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function thresholdScott(values, min, max) {
+  return Math.ceil((max - min) * Math.cbrt((0, _count.default)(values)) / (3.49 * (0, _deviation.default)(values)));
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/threshold/sturges.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/threshold/sturges.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/threshold/sturges.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = thresholdSturges;
+var _count = _interopRequireDefault(require("../count.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function thresholdSturges(values) {
+  return Math.ceil(Math.log((0, _count.default)(values)) / Math.LN2) + 1;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/ticks.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/ticks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/ticks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = ticks;
+exports.tickIncrement = tickIncrement;
+exports.tickStep = tickStep;
+var e10 = Math.sqrt(50),
+  e5 = Math.sqrt(10),
+  e2 = Math.sqrt(2);
+function ticks(start, stop, count) {
+  var reverse,
+    i = -1,
+    n,
+    ticks,
+    step;
+  stop = +stop, start = +start, count = +count;
+  if (start === stop && count > 0) return [start];
+  if (reverse = stop < start) n = start, start = stop, stop = n;
+  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];
+  if (step > 0) {
+    let r0 = Math.round(start / step),
+      r1 = Math.round(stop / step);
+    if (r0 * step < start) ++r0;
+    if (r1 * step > stop) --r1;
+    ticks = new Array(n = r1 - r0 + 1);
+    while (++i < n) ticks[i] = (r0 + i) * step;
+  } else {
+    step = -step;
+    let r0 = Math.round(start * step),
+      r1 = Math.round(stop * step);
+    if (r0 / step < start) ++r0;
+    if (r1 / step > stop) --r1;
+    ticks = new Array(n = r1 - r0 + 1);
+    while (++i < n) ticks[i] = (r0 + i) / step;
+  }
+  if (reverse) ticks.reverse();
+  return ticks;
+}
+function tickIncrement(start, stop, count) {
+  var step = (stop - start) / Math.max(0, count),
+    power = Math.floor(Math.log(step) / Math.LN10),
+    error = step / Math.pow(10, power);
+  return power >= 0 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
+}
+function tickStep(start, stop, count) {
+  var step0 = Math.abs(stop - start) / Math.max(0, count),
+    step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
+    error = step0 / step1;
+  if (error >= e10) step1 *= 10;else if (error >= e5) step1 *= 5;else if (error >= e2) step1 *= 2;
+  return stop < start ? -step1 : step1;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/transpose.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/transpose.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/transpose.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = transpose;
+var _min = _interopRequireDefault(require("./min.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function transpose(matrix) {
+  if (!(n = matrix.length)) return [];
+  for (var i = -1, m = (0, _min.default)(matrix, length), transpose = new Array(m); ++i < m;) {
+    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
+      row[j] = matrix[j][i];
+    }
+  }
+  return transpose;
+}
+function length(d) {
+  return d.length;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/union.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/union.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = union;
+var _index = require("../../../lib-vendor/internmap/src/index.js");
+function union(...others) {
+  const set = new _index.InternSet();
+  for (const other of others) {
+    for (const o of other) {
+      set.add(o);
+    }
+  }
+  return set;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/variance.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/variance.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/variance.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = variance;
+function variance(values, valueof) {
+  let count = 0;
+  let delta;
+  let mean = 0;
+  let sum = 0;
+  if (valueof === undefined) {
+    for (let value of values) {
+      if (value != null && (value = +value) >= value) {
+        delta = value - mean;
+        mean += delta / ++count;
+        sum += delta * (value - mean);
+      }
+    }
+  } else {
+    let index = -1;
+    for (let value of values) {
+      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+        delta = value - mean;
+        mean += delta / ++count;
+        sum += delta * (value - mean);
+      }
+    }
+  }
+  if (count > 1) return sum / (count - 1);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-array/src/zip.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-array/src/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-array/src/zip.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = zip;
+var _transpose = _interopRequireDefault(require("./transpose.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function zip() {
+  return (0, _transpose.default)(arguments);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-color/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-color/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-color/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2022 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-color/src/color.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-color/src/color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-color/src/color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,366 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Color = Color;
+exports.Rgb = Rgb;
+exports.darker = exports.brighter = void 0;
+exports.default = color;
+exports.hsl = hsl;
+exports.hslConvert = hslConvert;
+exports.rgb = rgb;
+exports.rgbConvert = rgbConvert;
+var _define = _interopRequireWildcard(require("./define.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function Color() {}
+var darker = exports.darker = 0.7;
+var brighter = exports.brighter = 1 / darker;
+var reI = "\\s*([+-]?\\d+)\\s*",
+  reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",
+  reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
+  reHex = /^#([0-9a-f]{3,8})$/,
+  reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`),
+  reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`),
+  reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`),
+  reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`),
+  reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`),
+  reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);
+var named = {
+  aliceblue: 0xf0f8ff,
+  antiquewhite: 0xfaebd7,
+  aqua: 0x00ffff,
+  aquamarine: 0x7fffd4,
+  azure: 0xf0ffff,
+  beige: 0xf5f5dc,
+  bisque: 0xffe4c4,
+  black: 0x000000,
+  blanchedalmond: 0xffebcd,
+  blue: 0x0000ff,
+  blueviolet: 0x8a2be2,
+  brown: 0xa52a2a,
+  burlywood: 0xdeb887,
+  cadetblue: 0x5f9ea0,
+  chartreuse: 0x7fff00,
+  chocolate: 0xd2691e,
+  coral: 0xff7f50,
+  cornflowerblue: 0x6495ed,
+  cornsilk: 0xfff8dc,
+  crimson: 0xdc143c,
+  cyan: 0x00ffff,
+  darkblue: 0x00008b,
+  darkcyan: 0x008b8b,
+  darkgoldenrod: 0xb8860b,
+  darkgray: 0xa9a9a9,
+  darkgreen: 0x006400,
+  darkgrey: 0xa9a9a9,
+  darkkhaki: 0xbdb76b,
+  darkmagenta: 0x8b008b,
+  darkolivegreen: 0x556b2f,
+  darkorange: 0xff8c00,
+  darkorchid: 0x9932cc,
+  darkred: 0x8b0000,
+  darksalmon: 0xe9967a,
+  darkseagreen: 0x8fbc8f,
+  darkslateblue: 0x483d8b,
+  darkslategray: 0x2f4f4f,
+  darkslategrey: 0x2f4f4f,
+  darkturquoise: 0x00ced1,
+  darkviolet: 0x9400d3,
+  deeppink: 0xff1493,
+  deepskyblue: 0x00bfff,
+  dimgray: 0x696969,
+  dimgrey: 0x696969,
+  dodgerblue: 0x1e90ff,
+  firebrick: 0xb22222,
+  floralwhite: 0xfffaf0,
+  forestgreen: 0x228b22,
+  fuchsia: 0xff00ff,
+  gainsboro: 0xdcdcdc,
+  ghostwhite: 0xf8f8ff,
+  gold: 0xffd700,
+  goldenrod: 0xdaa520,
+  gray: 0x808080,
+  green: 0x008000,
+  greenyellow: 0xadff2f,
+  grey: 0x808080,
+  honeydew: 0xf0fff0,
+  hotpink: 0xff69b4,
+  indianred: 0xcd5c5c,
+  indigo: 0x4b0082,
+  ivory: 0xfffff0,
+  khaki: 0xf0e68c,
+  lavender: 0xe6e6fa,
+  lavenderblush: 0xfff0f5,
+  lawngreen: 0x7cfc00,
+  lemonchiffon: 0xfffacd,
+  lightblue: 0xadd8e6,
+  lightcoral: 0xf08080,
+  lightcyan: 0xe0ffff,
+  lightgoldenrodyellow: 0xfafad2,
+  lightgray: 0xd3d3d3,
+  lightgreen: 0x90ee90,
+  lightgrey: 0xd3d3d3,
+  lightpink: 0xffb6c1,
+  lightsalmon: 0xffa07a,
+  lightseagreen: 0x20b2aa,
+  lightskyblue: 0x87cefa,
+  lightslategray: 0x778899,
+  lightslategrey: 0x778899,
+  lightsteelblue: 0xb0c4de,
+  lightyellow: 0xffffe0,
+  lime: 0x00ff00,
+  limegreen: 0x32cd32,
+  linen: 0xfaf0e6,
+  magenta: 0xff00ff,
+  maroon: 0x800000,
+  mediumaquamarine: 0x66cdaa,
+  mediumblue: 0x0000cd,
+  mediumorchid: 0xba55d3,
+  mediumpurple: 0x9370db,
+  mediumseagreen: 0x3cb371,
+  mediumslateblue: 0x7b68ee,
+  mediumspringgreen: 0x00fa9a,
+  mediumturquoise: 0x48d1cc,
+  mediumvioletred: 0xc71585,
+  midnightblue: 0x191970,
+  mintcream: 0xf5fffa,
+  mistyrose: 0xffe4e1,
+  moccasin: 0xffe4b5,
+  navajowhite: 0xffdead,
+  navy: 0x000080,
+  oldlace: 0xfdf5e6,
+  olive: 0x808000,
+  olivedrab: 0x6b8e23,
+  orange: 0xffa500,
+  orangered: 0xff4500,
+  orchid: 0xda70d6,
+  palegoldenrod: 0xeee8aa,
+  palegreen: 0x98fb98,
+  paleturquoise: 0xafeeee,
+  palevioletred: 0xdb7093,
+  papayawhip: 0xffefd5,
+  peachpuff: 0xffdab9,
+  peru: 0xcd853f,
+  pink: 0xffc0cb,
+  plum: 0xdda0dd,
+  powderblue: 0xb0e0e6,
+  purple: 0x800080,
+  rebeccapurple: 0x663399,
+  red: 0xff0000,
+  rosybrown: 0xbc8f8f,
+  royalblue: 0x4169e1,
+  saddlebrown: 0x8b4513,
+  salmon: 0xfa8072,
+  sandybrown: 0xf4a460,
+  seagreen: 0x2e8b57,
+  seashell: 0xfff5ee,
+  sienna: 0xa0522d,
+  silver: 0xc0c0c0,
+  skyblue: 0x87ceeb,
+  slateblue: 0x6a5acd,
+  slategray: 0x708090,
+  slategrey: 0x708090,
+  snow: 0xfffafa,
+  springgreen: 0x00ff7f,
+  steelblue: 0x4682b4,
+  tan: 0xd2b48c,
+  teal: 0x008080,
+  thistle: 0xd8bfd8,
+  tomato: 0xff6347,
+  turquoise: 0x40e0d0,
+  violet: 0xee82ee,
+  wheat: 0xf5deb3,
+  white: 0xffffff,
+  whitesmoke: 0xf5f5f5,
+  yellow: 0xffff00,
+  yellowgreen: 0x9acd32
+};
+(0, _define.default)(Color, color, {
+  copy(channels) {
+    return Object.assign(new this.constructor(), this, channels);
+  },
+  displayable() {
+    return this.rgb().displayable();
+  },
+  hex: color_formatHex,
+  // Deprecated! Use color.formatHex.
+  formatHex: color_formatHex,
+  formatHex8: color_formatHex8,
+  formatHsl: color_formatHsl,
+  formatRgb: color_formatRgb,
+  toString: color_formatRgb
+});
+function color_formatHex() {
+  return this.rgb().formatHex();
+}
+function color_formatHex8() {
+  return this.rgb().formatHex8();
+}
+function color_formatHsl() {
+  return hslConvert(this).formatHsl();
+}
+function color_formatRgb() {
+  return this.rgb().formatRgb();
+}
+function color(format) {
+  var m, l;
+  format = (format + "").trim().toLowerCase();
+  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
+  : l === 3 ? new Rgb(m >> 8 & 0xf | m >> 4 & 0xf0, m >> 4 & 0xf | m & 0xf0, (m & 0xf) << 4 | m & 0xf, 1) // #f00
+  : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
+  : l === 4 ? rgba(m >> 12 & 0xf | m >> 8 & 0xf0, m >> 8 & 0xf | m >> 4 & 0xf0, m >> 4 & 0xf | m & 0xf0, ((m & 0xf) << 4 | m & 0xf) / 0xff) // #f000
+  : null // invalid hex
+  ) : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
+  : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
+  : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
+  : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
+  : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
+  : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
+  : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
+  : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null;
+}
+function rgbn(n) {
+  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
+}
+function rgba(r, g, b, a) {
+  if (a <= 0) r = g = b = NaN;
+  return new Rgb(r, g, b, a);
+}
+function rgbConvert(o) {
+  if (!(o instanceof Color)) o = color(o);
+  if (!o) return new Rgb();
+  o = o.rgb();
+  return new Rgb(o.r, o.g, o.b, o.opacity);
+}
+function rgb(r, g, b, opacity) {
+  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
+}
+function Rgb(r, g, b, opacity) {
+  this.r = +r;
+  this.g = +g;
+  this.b = +b;
+  this.opacity = +opacity;
+}
+(0, _define.default)(Rgb, rgb, (0, _define.extend)(Color, {
+  brighter(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+  },
+  darker(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+  },
+  rgb() {
+    return this;
+  },
+  clamp() {
+    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));
+  },
+  displayable() {
+    return -0.5 <= this.r && this.r < 255.5 && -0.5 <= this.g && this.g < 255.5 && -0.5 <= this.b && this.b < 255.5 && 0 <= this.opacity && this.opacity <= 1;
+  },
+  hex: rgb_formatHex,
+  // Deprecated! Use color.formatHex.
+  formatHex: rgb_formatHex,
+  formatHex8: rgb_formatHex8,
+  formatRgb: rgb_formatRgb,
+  toString: rgb_formatRgb
+}));
+function rgb_formatHex() {
+  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;
+}
+function rgb_formatHex8() {
+  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;
+}
+function rgb_formatRgb() {
+  const a = clampa(this.opacity);
+  return `${a === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ")" : `, ${a})`}`;
+}
+function clampa(opacity) {
+  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));
+}
+function clampi(value) {
+  return Math.max(0, Math.min(255, Math.round(value) || 0));
+}
+function hex(value) {
+  value = clampi(value);
+  return (value < 16 ? "0" : "") + value.toString(16);
+}
+function hsla(h, s, l, a) {
+  if (a <= 0) h = s = l = NaN;else if (l <= 0 || l >= 1) h = s = NaN;else if (s <= 0) h = NaN;
+  return new Hsl(h, s, l, a);
+}
+function hslConvert(o) {
+  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
+  if (!(o instanceof Color)) o = color(o);
+  if (!o) return new Hsl();
+  if (o instanceof Hsl) return o;
+  o = o.rgb();
+  var r = o.r / 255,
+    g = o.g / 255,
+    b = o.b / 255,
+    min = Math.min(r, g, b),
+    max = Math.max(r, g, b),
+    h = NaN,
+    s = max - min,
+    l = (max + min) / 2;
+  if (s) {
+    if (r === max) h = (g - b) / s + (g < b) * 6;else if (g === max) h = (b - r) / s + 2;else h = (r - g) / s + 4;
+    s /= l < 0.5 ? max + min : 2 - max - min;
+    h *= 60;
+  } else {
+    s = l > 0 && l < 1 ? 0 : h;
+  }
+  return new Hsl(h, s, l, o.opacity);
+}
+function hsl(h, s, l, opacity) {
+  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
+}
+function Hsl(h, s, l, opacity) {
+  this.h = +h;
+  this.s = +s;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+(0, _define.default)(Hsl, hsl, (0, _define.extend)(Color, {
+  brighter(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+  },
+  darker(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+  },
+  rgb() {
+    var h = this.h % 360 + (this.h < 0) * 360,
+      s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
+      l = this.l,
+      m2 = l + (l < 0.5 ? l : 1 - l) * s,
+      m1 = 2 * l - m2;
+    return new Rgb(hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity);
+  },
+  clamp() {
+    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));
+  },
+  displayable() {
+    return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1;
+  },
+  formatHsl() {
+    const a = clampa(this.opacity);
+    return `${a === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ")" : `, ${a})`}`;
+  }
+}));
+function clamph(value) {
+  value = (value || 0) % 360;
+  return value < 0 ? value + 360 : value;
+}
+function clampt(value) {
+  return Math.max(0, Math.min(1, value || 0));
+}
+
+/* From FvD 13.37, CSS Color Module Level 3 */
+function hsl2rgb(h, m1, m2) {
+  return (h < 60 ? m1 + (m2 - m1) * h / 60 : h < 180 ? m2 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 : m1) * 255;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-color/src/cubehelix.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-color/src/cubehelix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-color/src/cubehelix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,61 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Cubehelix = Cubehelix;
+exports.default = cubehelix;
+var _define = _interopRequireWildcard(require("./define.js"));
+var _color = require("./color.js");
+var _math = require("./math.js");
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+var A = -0.14861,
+  B = +1.78277,
+  C = -0.29227,
+  D = -0.90649,
+  E = +1.97294,
+  ED = E * D,
+  EB = E * B,
+  BC_DA = B * C - D * A;
+function cubehelixConvert(o) {
+  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
+  if (!(o instanceof _color.Rgb)) o = (0, _color.rgbConvert)(o);
+  var r = o.r / 255,
+    g = o.g / 255,
+    b = o.b / 255,
+    l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
+    bl = b - l,
+    k = (E * (g - l) - C * bl) / D,
+    s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)),
+    // NaN if l=0 or l=1
+    h = s ? Math.atan2(k, bl) * _math.degrees - 120 : NaN;
+  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
+}
+function cubehelix(h, s, l, opacity) {
+  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
+}
+function Cubehelix(h, s, l, opacity) {
+  this.h = +h;
+  this.s = +s;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+(0, _define.default)(Cubehelix, cubehelix, (0, _define.extend)(_color.Color, {
+  brighter(k) {
+    k = k == null ? _color.brighter : Math.pow(_color.brighter, k);
+    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+  },
+  darker(k) {
+    k = k == null ? _color.darker : Math.pow(_color.darker, k);
+    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+  },
+  rgb() {
+    var h = isNaN(this.h) ? 0 : (this.h + 120) * _math.radians,
+      l = +this.l,
+      a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
+      cosh = Math.cos(h),
+      sinh = Math.sin(h);
+    return new _color.Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);
+  }
+}));
Index: node_modules/victory-vendor/lib-vendor/d3-color/src/define.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-color/src/define.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-color/src/define.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.extend = extend;
+function _default(constructor, factory, prototype) {
+  constructor.prototype = factory.prototype = prototype;
+  prototype.constructor = constructor;
+}
+function extend(parent, definition) {
+  var prototype = Object.create(parent.prototype);
+  for (var key in definition) prototype[key] = definition[key];
+  return prototype;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-color/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-color/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-color/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "color", {
+  enumerable: true,
+  get: function () {
+    return _color.default;
+  }
+});
+Object.defineProperty(exports, "cubehelix", {
+  enumerable: true,
+  get: function () {
+    return _cubehelix.default;
+  }
+});
+Object.defineProperty(exports, "gray", {
+  enumerable: true,
+  get: function () {
+    return _lab.gray;
+  }
+});
+Object.defineProperty(exports, "hcl", {
+  enumerable: true,
+  get: function () {
+    return _lab.hcl;
+  }
+});
+Object.defineProperty(exports, "hsl", {
+  enumerable: true,
+  get: function () {
+    return _color.hsl;
+  }
+});
+Object.defineProperty(exports, "lab", {
+  enumerable: true,
+  get: function () {
+    return _lab.default;
+  }
+});
+Object.defineProperty(exports, "lch", {
+  enumerable: true,
+  get: function () {
+    return _lab.lch;
+  }
+});
+Object.defineProperty(exports, "rgb", {
+  enumerable: true,
+  get: function () {
+    return _color.rgb;
+  }
+});
+var _color = _interopRequireWildcard(require("./color.js"));
+var _lab = _interopRequireWildcard(require("./lab.js"));
+var _cubehelix = _interopRequireDefault(require("./cubehelix.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
Index: node_modules/victory-vendor/lib-vendor/d3-color/src/lab.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-color/src/lab.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-color/src/lab.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Hcl = Hcl;
+exports.Lab = Lab;
+exports.default = lab;
+exports.gray = gray;
+exports.hcl = hcl;
+exports.lch = lch;
+var _define = _interopRequireWildcard(require("./define.js"));
+var _color = require("./color.js");
+var _math = require("./math.js");
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+// https://observablehq.com/@mbostock/lab-and-rgb
+const K = 18,
+  Xn = 0.96422,
+  Yn = 1,
+  Zn = 0.82521,
+  t0 = 4 / 29,
+  t1 = 6 / 29,
+  t2 = 3 * t1 * t1,
+  t3 = t1 * t1 * t1;
+function labConvert(o) {
+  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
+  if (o instanceof Hcl) return hcl2lab(o);
+  if (!(o instanceof _color.Rgb)) o = (0, _color.rgbConvert)(o);
+  var r = rgb2lrgb(o.r),
+    g = rgb2lrgb(o.g),
+    b = rgb2lrgb(o.b),
+    y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn),
+    x,
+    z;
+  if (r === g && g === b) x = z = y;else {
+    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
+    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
+  }
+  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
+}
+function gray(l, opacity) {
+  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);
+}
+function lab(l, a, b, opacity) {
+  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
+}
+function Lab(l, a, b, opacity) {
+  this.l = +l;
+  this.a = +a;
+  this.b = +b;
+  this.opacity = +opacity;
+}
+(0, _define.default)(Lab, lab, (0, _define.extend)(_color.Color, {
+  brighter(k) {
+    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
+  },
+  darker(k) {
+    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
+  },
+  rgb() {
+    var y = (this.l + 16) / 116,
+      x = isNaN(this.a) ? y : y + this.a / 500,
+      z = isNaN(this.b) ? y : y - this.b / 200;
+    x = Xn * lab2xyz(x);
+    y = Yn * lab2xyz(y);
+    z = Zn * lab2xyz(z);
+    return new _color.Rgb(lrgb2rgb(3.1338561 * x - 1.6168667 * y - 0.4906146 * z), lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), lrgb2rgb(0.0719453 * x - 0.2289914 * y + 1.4052427 * z), this.opacity);
+  }
+}));
+function xyz2lab(t) {
+  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
+}
+function lab2xyz(t) {
+  return t > t1 ? t * t * t : t2 * (t - t0);
+}
+function lrgb2rgb(x) {
+  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
+}
+function rgb2lrgb(x) {
+  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
+}
+function hclConvert(o) {
+  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
+  if (!(o instanceof Lab)) o = labConvert(o);
+  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);
+  var h = Math.atan2(o.b, o.a) * _math.degrees;
+  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
+}
+function lch(l, c, h, opacity) {
+  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+}
+function hcl(h, c, l, opacity) {
+  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+}
+function Hcl(h, c, l, opacity) {
+  this.h = +h;
+  this.c = +c;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+function hcl2lab(o) {
+  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);
+  var h = o.h * _math.radians;
+  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
+}
+(0, _define.default)(Hcl, hcl, (0, _define.extend)(_color.Color, {
+  brighter(k) {
+    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
+  },
+  darker(k) {
+    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
+  },
+  rgb() {
+    return hcl2lab(this).rgb();
+  }
+}));
Index: node_modules/victory-vendor/lib-vendor/d3-color/src/math.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-color/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-color/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.radians = exports.degrees = void 0;
+const radians = exports.radians = Math.PI / 180;
+const degrees = exports.degrees = 180 / Math.PI;
Index: node_modules/victory-vendor/lib-vendor/d3-ease/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+Copyright 2010-2021 Mike Bostock
+Copyright 2001 Robert Penner
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the author nor the names of contributors may be used to
+  endorse or promote products derived from this software without specific prior
+  written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/back.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/back.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/back.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.backOut = exports.backInOut = exports.backIn = void 0;
+var overshoot = 1.70158;
+var backIn = exports.backIn = function custom(s) {
+  s = +s;
+  function backIn(t) {
+    return (t = +t) * t * (s * (t - 1) + t);
+  }
+  backIn.overshoot = custom;
+  return backIn;
+}(overshoot);
+var backOut = exports.backOut = function custom(s) {
+  s = +s;
+  function backOut(t) {
+    return --t * t * ((t + 1) * s + t) + 1;
+  }
+  backOut.overshoot = custom;
+  return backOut;
+}(overshoot);
+var backInOut = exports.backInOut = function custom(s) {
+  s = +s;
+  function backInOut(t) {
+    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
+  }
+  backInOut.overshoot = custom;
+  return backInOut;
+}(overshoot);
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/bounce.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/bounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/bounce.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.bounceIn = bounceIn;
+exports.bounceInOut = bounceInOut;
+exports.bounceOut = bounceOut;
+var b1 = 4 / 11,
+  b2 = 6 / 11,
+  b3 = 8 / 11,
+  b4 = 3 / 4,
+  b5 = 9 / 11,
+  b6 = 10 / 11,
+  b7 = 15 / 16,
+  b8 = 21 / 22,
+  b9 = 63 / 64,
+  b0 = 1 / b1 / b1;
+function bounceIn(t) {
+  return 1 - bounceOut(1 - t);
+}
+function bounceOut(t) {
+  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
+}
+function bounceInOut(t) {
+  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/circle.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.circleIn = circleIn;
+exports.circleInOut = circleInOut;
+exports.circleOut = circleOut;
+function circleIn(t) {
+  return 1 - Math.sqrt(1 - t * t);
+}
+function circleOut(t) {
+  return Math.sqrt(1 - --t * t);
+}
+function circleInOut(t) {
+  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/cubic.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/cubic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/cubic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.cubicIn = cubicIn;
+exports.cubicInOut = cubicInOut;
+exports.cubicOut = cubicOut;
+function cubicIn(t) {
+  return t * t * t;
+}
+function cubicOut(t) {
+  return --t * t * t + 1;
+}
+function cubicInOut(t) {
+  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/elastic.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/elastic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/elastic.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.elasticOut = exports.elasticInOut = exports.elasticIn = void 0;
+var _math = require("./math.js");
+var tau = 2 * Math.PI,
+  amplitude = 1,
+  period = 0.3;
+var elasticIn = exports.elasticIn = function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+  function elasticIn(t) {
+    return a * (0, _math.tpmt)(- --t) * Math.sin((s - t) / p);
+  }
+  elasticIn.amplitude = function (a) {
+    return custom(a, p * tau);
+  };
+  elasticIn.period = function (p) {
+    return custom(a, p);
+  };
+  return elasticIn;
+}(amplitude, period);
+var elasticOut = exports.elasticOut = function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+  function elasticOut(t) {
+    return 1 - a * (0, _math.tpmt)(t = +t) * Math.sin((t + s) / p);
+  }
+  elasticOut.amplitude = function (a) {
+    return custom(a, p * tau);
+  };
+  elasticOut.period = function (p) {
+    return custom(a, p);
+  };
+  return elasticOut;
+}(amplitude, period);
+var elasticInOut = exports.elasticInOut = function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+  function elasticInOut(t) {
+    return ((t = t * 2 - 1) < 0 ? a * (0, _math.tpmt)(-t) * Math.sin((s - t) / p) : 2 - a * (0, _math.tpmt)(t) * Math.sin((s + t) / p)) / 2;
+  }
+  elasticInOut.amplitude = function (a) {
+    return custom(a, p * tau);
+  };
+  elasticInOut.period = function (p) {
+    return custom(a, p);
+  };
+  return elasticInOut;
+}(amplitude, period);
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/exp.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/exp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/exp.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.expIn = expIn;
+exports.expInOut = expInOut;
+exports.expOut = expOut;
+var _math = require("./math.js");
+function expIn(t) {
+  return (0, _math.tpmt)(1 - +t);
+}
+function expOut(t) {
+  return 1 - (0, _math.tpmt)(t);
+}
+function expInOut(t) {
+  return ((t *= 2) <= 1 ? (0, _math.tpmt)(1 - t) : 2 - (0, _math.tpmt)(t - 1)) / 2;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,237 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "easeBack", {
+  enumerable: true,
+  get: function () {
+    return _back.backInOut;
+  }
+});
+Object.defineProperty(exports, "easeBackIn", {
+  enumerable: true,
+  get: function () {
+    return _back.backIn;
+  }
+});
+Object.defineProperty(exports, "easeBackInOut", {
+  enumerable: true,
+  get: function () {
+    return _back.backInOut;
+  }
+});
+Object.defineProperty(exports, "easeBackOut", {
+  enumerable: true,
+  get: function () {
+    return _back.backOut;
+  }
+});
+Object.defineProperty(exports, "easeBounce", {
+  enumerable: true,
+  get: function () {
+    return _bounce.bounceOut;
+  }
+});
+Object.defineProperty(exports, "easeBounceIn", {
+  enumerable: true,
+  get: function () {
+    return _bounce.bounceIn;
+  }
+});
+Object.defineProperty(exports, "easeBounceInOut", {
+  enumerable: true,
+  get: function () {
+    return _bounce.bounceInOut;
+  }
+});
+Object.defineProperty(exports, "easeBounceOut", {
+  enumerable: true,
+  get: function () {
+    return _bounce.bounceOut;
+  }
+});
+Object.defineProperty(exports, "easeCircle", {
+  enumerable: true,
+  get: function () {
+    return _circle.circleInOut;
+  }
+});
+Object.defineProperty(exports, "easeCircleIn", {
+  enumerable: true,
+  get: function () {
+    return _circle.circleIn;
+  }
+});
+Object.defineProperty(exports, "easeCircleInOut", {
+  enumerable: true,
+  get: function () {
+    return _circle.circleInOut;
+  }
+});
+Object.defineProperty(exports, "easeCircleOut", {
+  enumerable: true,
+  get: function () {
+    return _circle.circleOut;
+  }
+});
+Object.defineProperty(exports, "easeCubic", {
+  enumerable: true,
+  get: function () {
+    return _cubic.cubicInOut;
+  }
+});
+Object.defineProperty(exports, "easeCubicIn", {
+  enumerable: true,
+  get: function () {
+    return _cubic.cubicIn;
+  }
+});
+Object.defineProperty(exports, "easeCubicInOut", {
+  enumerable: true,
+  get: function () {
+    return _cubic.cubicInOut;
+  }
+});
+Object.defineProperty(exports, "easeCubicOut", {
+  enumerable: true,
+  get: function () {
+    return _cubic.cubicOut;
+  }
+});
+Object.defineProperty(exports, "easeElastic", {
+  enumerable: true,
+  get: function () {
+    return _elastic.elasticOut;
+  }
+});
+Object.defineProperty(exports, "easeElasticIn", {
+  enumerable: true,
+  get: function () {
+    return _elastic.elasticIn;
+  }
+});
+Object.defineProperty(exports, "easeElasticInOut", {
+  enumerable: true,
+  get: function () {
+    return _elastic.elasticInOut;
+  }
+});
+Object.defineProperty(exports, "easeElasticOut", {
+  enumerable: true,
+  get: function () {
+    return _elastic.elasticOut;
+  }
+});
+Object.defineProperty(exports, "easeExp", {
+  enumerable: true,
+  get: function () {
+    return _exp.expInOut;
+  }
+});
+Object.defineProperty(exports, "easeExpIn", {
+  enumerable: true,
+  get: function () {
+    return _exp.expIn;
+  }
+});
+Object.defineProperty(exports, "easeExpInOut", {
+  enumerable: true,
+  get: function () {
+    return _exp.expInOut;
+  }
+});
+Object.defineProperty(exports, "easeExpOut", {
+  enumerable: true,
+  get: function () {
+    return _exp.expOut;
+  }
+});
+Object.defineProperty(exports, "easeLinear", {
+  enumerable: true,
+  get: function () {
+    return _linear.linear;
+  }
+});
+Object.defineProperty(exports, "easePoly", {
+  enumerable: true,
+  get: function () {
+    return _poly.polyInOut;
+  }
+});
+Object.defineProperty(exports, "easePolyIn", {
+  enumerable: true,
+  get: function () {
+    return _poly.polyIn;
+  }
+});
+Object.defineProperty(exports, "easePolyInOut", {
+  enumerable: true,
+  get: function () {
+    return _poly.polyInOut;
+  }
+});
+Object.defineProperty(exports, "easePolyOut", {
+  enumerable: true,
+  get: function () {
+    return _poly.polyOut;
+  }
+});
+Object.defineProperty(exports, "easeQuad", {
+  enumerable: true,
+  get: function () {
+    return _quad.quadInOut;
+  }
+});
+Object.defineProperty(exports, "easeQuadIn", {
+  enumerable: true,
+  get: function () {
+    return _quad.quadIn;
+  }
+});
+Object.defineProperty(exports, "easeQuadInOut", {
+  enumerable: true,
+  get: function () {
+    return _quad.quadInOut;
+  }
+});
+Object.defineProperty(exports, "easeQuadOut", {
+  enumerable: true,
+  get: function () {
+    return _quad.quadOut;
+  }
+});
+Object.defineProperty(exports, "easeSin", {
+  enumerable: true,
+  get: function () {
+    return _sin.sinInOut;
+  }
+});
+Object.defineProperty(exports, "easeSinIn", {
+  enumerable: true,
+  get: function () {
+    return _sin.sinIn;
+  }
+});
+Object.defineProperty(exports, "easeSinInOut", {
+  enumerable: true,
+  get: function () {
+    return _sin.sinInOut;
+  }
+});
+Object.defineProperty(exports, "easeSinOut", {
+  enumerable: true,
+  get: function () {
+    return _sin.sinOut;
+  }
+});
+var _linear = require("./linear.js");
+var _quad = require("./quad.js");
+var _cubic = require("./cubic.js");
+var _poly = require("./poly.js");
+var _sin = require("./sin.js");
+var _exp = require("./exp.js");
+var _circle = require("./circle.js");
+var _bounce = require("./bounce.js");
+var _back = require("./back.js");
+var _elastic = require("./elastic.js");
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/linear.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.linear = void 0;
+const linear = t => +t;
+exports.linear = linear;
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/math.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.tpmt = tpmt;
+// tpmt is two power minus ten times t scaled to [0,1]
+function tpmt(x) {
+  return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/poly.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/poly.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/poly.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.polyOut = exports.polyInOut = exports.polyIn = void 0;
+var exponent = 3;
+var polyIn = exports.polyIn = function custom(e) {
+  e = +e;
+  function polyIn(t) {
+    return Math.pow(t, e);
+  }
+  polyIn.exponent = custom;
+  return polyIn;
+}(exponent);
+var polyOut = exports.polyOut = function custom(e) {
+  e = +e;
+  function polyOut(t) {
+    return 1 - Math.pow(1 - t, e);
+  }
+  polyOut.exponent = custom;
+  return polyOut;
+}(exponent);
+var polyInOut = exports.polyInOut = function custom(e) {
+  e = +e;
+  function polyInOut(t) {
+    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
+  }
+  polyInOut.exponent = custom;
+  return polyInOut;
+}(exponent);
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/quad.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/quad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/quad.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.quadIn = quadIn;
+exports.quadInOut = quadInOut;
+exports.quadOut = quadOut;
+function quadIn(t) {
+  return t * t;
+}
+function quadOut(t) {
+  return t * (2 - t);
+}
+function quadInOut(t) {
+  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-ease/src/sin.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-ease/src/sin.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-ease/src/sin.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.sinIn = sinIn;
+exports.sinInOut = sinInOut;
+exports.sinOut = sinOut;
+var pi = Math.PI,
+  halfPi = pi / 2;
+function sinIn(t) {
+  return +t === 1 ? 1 : 1 - Math.cos(t * halfPi);
+}
+function sinOut(t) {
+  return Math.sin(t * halfPi);
+}
+function sinInOut(t) {
+  return (1 - Math.cos(pi * t)) / 2;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/defaultLocale.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/defaultLocale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/defaultLocale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = defaultLocale;
+exports.formatPrefix = exports.format = void 0;
+var _locale = _interopRequireDefault(require("./locale.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var locale;
+var format;
+var formatPrefix;
+defaultLocale({
+  thousands: ",",
+  grouping: [3],
+  currency: ["$", ""]
+});
+function defaultLocale(definition) {
+  locale = (0, _locale.default)(definition);
+  exports.format = format = locale.format;
+  exports.formatPrefix = formatPrefix = locale.formatPrefix;
+  return locale;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/exponent.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/exponent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/exponent.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,10 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _formatDecimal = require("./formatDecimal.js");
+function _default(x) {
+  return x = (0, _formatDecimal.formatDecimalParts)(Math.abs(x)), x ? x[1] : NaN;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/formatDecimal.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/formatDecimal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/formatDecimal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.formatDecimalParts = formatDecimalParts;
+function _default(x) {
+  return Math.abs(x = Math.round(x)) >= 1e21 ? x.toLocaleString("en").replace(/,/g, "") : x.toString(10);
+}
+
+// Computes the decimal coefficient and exponent of the specified number x with
+// significant digits p, where x is positive and p is in [1, 21] or undefined.
+// For example, formatDecimalParts(1.23) returns ["123", 0].
+function formatDecimalParts(x, p) {
+  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
+  var i,
+    coefficient = x.slice(0, i);
+
+  // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
+  // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
+  return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +x.slice(i + 1)];
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/formatGroup.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/formatGroup.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/formatGroup.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(grouping, thousands) {
+  return function (value, width) {
+    var i = value.length,
+      t = [],
+      j = 0,
+      g = grouping[0],
+      length = 0;
+    while (i > 0 && g > 0) {
+      if (length + g + 1 > width) g = Math.max(1, width - length);
+      t.push(value.substring(i -= g, i + g));
+      if ((length += g + 1) > width) break;
+      g = grouping[j = (j + 1) % grouping.length];
+    }
+    return t.reverse().join(thousands);
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/formatNumerals.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/formatNumerals.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/formatNumerals.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(numerals) {
+  return function (value) {
+    return value.replace(/[0-9]/g, function (i) {
+      return numerals[+i];
+    });
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/formatPrefixAuto.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/formatPrefixAuto.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/formatPrefixAuto.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.prefixExponent = void 0;
+var _formatDecimal = require("./formatDecimal.js");
+var prefixExponent;
+function _default(x, p) {
+  var d = (0, _formatDecimal.formatDecimalParts)(x, p);
+  if (!d) return x + "";
+  var coefficient = d[0],
+    exponent = d[1],
+    i = exponent - (exports.prefixExponent = prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
+    n = coefficient.length;
+  return i === n ? coefficient : i > n ? coefficient + new Array(i - n + 1).join("0") : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) : "0." + new Array(1 - i).join("0") + (0, _formatDecimal.formatDecimalParts)(x, Math.max(0, p + i - 1))[0]; // less than 1y!
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/formatRounded.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/formatRounded.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/formatRounded.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _formatDecimal = require("./formatDecimal.js");
+function _default(x, p) {
+  var d = (0, _formatDecimal.formatDecimalParts)(x, p);
+  if (!d) return x + "";
+  var coefficient = d[0],
+    exponent = d[1];
+  return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) : coefficient + new Array(exponent - coefficient.length + 2).join("0");
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/formatSpecifier.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/formatSpecifier.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/formatSpecifier.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.FormatSpecifier = FormatSpecifier;
+exports.default = formatSpecifier;
+// [[fill]align][sign][symbol][0][width][,][.precision][~][type]
+var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
+function formatSpecifier(specifier) {
+  if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
+  var match;
+  return new FormatSpecifier({
+    fill: match[1],
+    align: match[2],
+    sign: match[3],
+    symbol: match[4],
+    zero: match[5],
+    width: match[6],
+    comma: match[7],
+    precision: match[8] && match[8].slice(1),
+    trim: match[9],
+    type: match[10]
+  });
+}
+formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
+
+function FormatSpecifier(specifier) {
+  this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
+  this.align = specifier.align === undefined ? ">" : specifier.align + "";
+  this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
+  this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
+  this.zero = !!specifier.zero;
+  this.width = specifier.width === undefined ? undefined : +specifier.width;
+  this.comma = !!specifier.comma;
+  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
+  this.trim = !!specifier.trim;
+  this.type = specifier.type === undefined ? "" : specifier.type + "";
+}
+FormatSpecifier.prototype.toString = function () {
+  return this.fill + this.align + this.sign + this.symbol + (this.zero ? "0" : "") + (this.width === undefined ? "" : Math.max(1, this.width | 0)) + (this.comma ? "," : "") + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) + (this.trim ? "~" : "") + this.type;
+};
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/formatTrim.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/formatTrim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/formatTrim.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
+function _default(s) {
+  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
+    switch (s[i]) {
+      case ".":
+        i0 = i1 = i;
+        break;
+      case "0":
+        if (i0 === 0) i0 = i;
+        i1 = i;
+        break;
+      default:
+        if (!+s[i]) break out;
+        if (i0 > 0) i0 = 0;
+        break;
+    }
+  }
+  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/formatTypes.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/formatTypes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/formatTypes.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _formatDecimal = _interopRequireDefault(require("./formatDecimal.js"));
+var _formatPrefixAuto = _interopRequireDefault(require("./formatPrefixAuto.js"));
+var _formatRounded = _interopRequireDefault(require("./formatRounded.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var _default = exports.default = {
+  "%": (x, p) => (x * 100).toFixed(p),
+  "b": x => Math.round(x).toString(2),
+  "c": x => x + "",
+  "d": _formatDecimal.default,
+  "e": (x, p) => x.toExponential(p),
+  "f": (x, p) => x.toFixed(p),
+  "g": (x, p) => x.toPrecision(p),
+  "o": x => Math.round(x).toString(8),
+  "p": (x, p) => (0, _formatRounded.default)(x * 100, p),
+  "r": _formatRounded.default,
+  "s": _formatPrefixAuto.default,
+  "X": x => Math.round(x).toString(16).toUpperCase(),
+  "x": x => Math.round(x).toString(16)
+};
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/identity.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(x) {
+  return x;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,68 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "FormatSpecifier", {
+  enumerable: true,
+  get: function () {
+    return _formatSpecifier.FormatSpecifier;
+  }
+});
+Object.defineProperty(exports, "format", {
+  enumerable: true,
+  get: function () {
+    return _defaultLocale.format;
+  }
+});
+Object.defineProperty(exports, "formatDefaultLocale", {
+  enumerable: true,
+  get: function () {
+    return _defaultLocale.default;
+  }
+});
+Object.defineProperty(exports, "formatLocale", {
+  enumerable: true,
+  get: function () {
+    return _locale.default;
+  }
+});
+Object.defineProperty(exports, "formatPrefix", {
+  enumerable: true,
+  get: function () {
+    return _defaultLocale.formatPrefix;
+  }
+});
+Object.defineProperty(exports, "formatSpecifier", {
+  enumerable: true,
+  get: function () {
+    return _formatSpecifier.default;
+  }
+});
+Object.defineProperty(exports, "precisionFixed", {
+  enumerable: true,
+  get: function () {
+    return _precisionFixed.default;
+  }
+});
+Object.defineProperty(exports, "precisionPrefix", {
+  enumerable: true,
+  get: function () {
+    return _precisionPrefix.default;
+  }
+});
+Object.defineProperty(exports, "precisionRound", {
+  enumerable: true,
+  get: function () {
+    return _precisionRound.default;
+  }
+});
+var _defaultLocale = _interopRequireWildcard(require("./defaultLocale.js"));
+var _locale = _interopRequireDefault(require("./locale.js"));
+var _formatSpecifier = _interopRequireWildcard(require("./formatSpecifier.js"));
+var _precisionFixed = _interopRequireDefault(require("./precisionFixed.js"));
+var _precisionPrefix = _interopRequireDefault(require("./precisionPrefix.js"));
+var _precisionRound = _interopRequireDefault(require("./precisionRound.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/locale.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/locale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/locale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,152 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _exponent = _interopRequireDefault(require("./exponent.js"));
+var _formatGroup = _interopRequireDefault(require("./formatGroup.js"));
+var _formatNumerals = _interopRequireDefault(require("./formatNumerals.js"));
+var _formatSpecifier = _interopRequireDefault(require("./formatSpecifier.js"));
+var _formatTrim = _interopRequireDefault(require("./formatTrim.js"));
+var _formatTypes = _interopRequireDefault(require("./formatTypes.js"));
+var _formatPrefixAuto = require("./formatPrefixAuto.js");
+var _identity = _interopRequireDefault(require("./identity.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var map = Array.prototype.map,
+  prefixes = ["y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
+function _default(locale) {
+  var group = locale.grouping === undefined || locale.thousands === undefined ? _identity.default : (0, _formatGroup.default)(map.call(locale.grouping, Number), locale.thousands + ""),
+    currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
+    currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
+    decimal = locale.decimal === undefined ? "." : locale.decimal + "",
+    numerals = locale.numerals === undefined ? _identity.default : (0, _formatNumerals.default)(map.call(locale.numerals, String)),
+    percent = locale.percent === undefined ? "%" : locale.percent + "",
+    minus = locale.minus === undefined ? "−" : locale.minus + "",
+    nan = locale.nan === undefined ? "NaN" : locale.nan + "";
+  function newFormat(specifier) {
+    specifier = (0, _formatSpecifier.default)(specifier);
+    var fill = specifier.fill,
+      align = specifier.align,
+      sign = specifier.sign,
+      symbol = specifier.symbol,
+      zero = specifier.zero,
+      width = specifier.width,
+      comma = specifier.comma,
+      precision = specifier.precision,
+      trim = specifier.trim,
+      type = specifier.type;
+
+    // The "n" type is an alias for ",g".
+    if (type === "n") comma = true, type = "g";
+
+    // The "" type, and any invalid type, is an alias for ".12~g".
+    else if (!_formatTypes.default[type]) precision === undefined && (precision = 12), trim = true, type = "g";
+
+    // If zero fill is specified, padding goes after sign and before digits.
+    if (zero || fill === "0" && align === "=") zero = true, fill = "0", align = "=";
+
+    // Compute the prefix and suffix.
+    // For SI-prefix, the suffix is lazily computed.
+    var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
+      suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
+
+    // What format function should we use?
+    // Is this an integer type?
+    // Can this type generate exponential notation?
+    var formatType = _formatTypes.default[type],
+      maybeSuffix = /[defgprs%]/.test(type);
+
+    // Set the default precision if not specified,
+    // or clamp the specified precision to the supported range.
+    // For significant precision, it must be in [1, 21].
+    // For fixed precision, it must be in [0, 20].
+    precision = precision === undefined ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));
+    function format(value) {
+      var valuePrefix = prefix,
+        valueSuffix = suffix,
+        i,
+        n,
+        c;
+      if (type === "c") {
+        valueSuffix = formatType(value) + valueSuffix;
+        value = "";
+      } else {
+        value = +value;
+
+        // Determine the sign. -0 is not less than 0, but 1 / -0 is!
+        var valueNegative = value < 0 || 1 / value < 0;
+
+        // Perform the initial formatting.
+        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
+
+        // Trim insignificant zeros.
+        if (trim) value = (0, _formatTrim.default)(value);
+
+        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.
+        if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
+
+        // Compute the prefix and suffix.
+        valuePrefix = (valueNegative ? sign === "(" ? sign : minus : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
+        valueSuffix = (type === "s" ? prefixes[8 + _formatPrefixAuto.prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
+
+        // Break the formatted value into the integer “value” part that can be
+        // grouped, and fractional or exponential “suffix” part that is not.
+        if (maybeSuffix) {
+          i = -1, n = value.length;
+          while (++i < n) {
+            if (c = value.charCodeAt(i), 48 > c || c > 57) {
+              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
+              value = value.slice(0, i);
+              break;
+            }
+          }
+        }
+      }
+
+      // If the fill character is not "0", grouping is applied before padding.
+      if (comma && !zero) value = group(value, Infinity);
+
+      // Compute the padding.
+      var length = valuePrefix.length + value.length + valueSuffix.length,
+        padding = length < width ? new Array(width - length + 1).join(fill) : "";
+
+      // If the fill character is "0", grouping is applied after padding.
+      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
+
+      // Reconstruct the final output based on the desired alignment.
+      switch (align) {
+        case "<":
+          value = valuePrefix + value + valueSuffix + padding;
+          break;
+        case "=":
+          value = valuePrefix + padding + value + valueSuffix;
+          break;
+        case "^":
+          value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);
+          break;
+        default:
+          value = padding + valuePrefix + value + valueSuffix;
+          break;
+      }
+      return numerals(value);
+    }
+    format.toString = function () {
+      return specifier + "";
+    };
+    return format;
+  }
+  function formatPrefix(specifier, value) {
+    var f = newFormat((specifier = (0, _formatSpecifier.default)(specifier), specifier.type = "f", specifier)),
+      e = Math.max(-8, Math.min(8, Math.floor((0, _exponent.default)(value) / 3))) * 3,
+      k = Math.pow(10, -e),
+      prefix = prefixes[8 + e / 3];
+    return function (value) {
+      return f(k * value) + prefix;
+    };
+  }
+  return {
+    format: newFormat,
+    formatPrefix: formatPrefix
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/precisionFixed.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/precisionFixed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/precisionFixed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _exponent = _interopRequireDefault(require("./exponent.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(step) {
+  return Math.max(0, -(0, _exponent.default)(Math.abs(step)));
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/precisionPrefix.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/precisionPrefix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/precisionPrefix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _exponent = _interopRequireDefault(require("./exponent.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(step, value) {
+  return Math.max(0, Math.max(-8, Math.min(8, Math.floor((0, _exponent.default)(value) / 3))) * 3 - (0, _exponent.default)(Math.abs(step)));
+}
Index: node_modules/victory-vendor/lib-vendor/d3-format/src/precisionRound.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-format/src/precisionRound.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-format/src/precisionRound.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _exponent = _interopRequireDefault(require("./exponent.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(step, max) {
+  step = Math.abs(step), max = Math.abs(max) - step;
+  return Math.max(0, (0, _exponent.default)(max) - (0, _exponent.default)(step)) + 1;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/array.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.genericArray = genericArray;
+var _value = _interopRequireDefault(require("./value.js"));
+var _numberArray = _interopRequireWildcard(require("./numberArray.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(a, b) {
+  return ((0, _numberArray.isNumberArray)(b) ? _numberArray.default : genericArray)(a, b);
+}
+function genericArray(a, b) {
+  var nb = b ? b.length : 0,
+    na = a ? Math.min(nb, a.length) : 0,
+    x = new Array(na),
+    c = new Array(nb),
+    i;
+  for (i = 0; i < na; ++i) x[i] = (0, _value.default)(a[i], b[i]);
+  for (; i < nb; ++i) c[i] = b[i];
+  return function (t) {
+    for (i = 0; i < na; ++i) c[i] = x[i](t);
+    return c;
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/basis.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/basis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/basis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.basis = basis;
+exports.default = _default;
+function basis(t1, v0, v1, v2, v3) {
+  var t2 = t1 * t1,
+    t3 = t2 * t1;
+  return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + (4 - 6 * t2 + 3 * t3) * v1 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + t3 * v3) / 6;
+}
+function _default(values) {
+  var n = values.length - 1;
+  return function (t) {
+    var i = t <= 0 ? t = 0 : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
+      v1 = values[i],
+      v2 = values[i + 1],
+      v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
+      v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
+    return basis((t - i / n) * n, v0, v1, v2, v3);
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/basisClosed.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/basisClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/basisClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,18 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _basis = require("./basis.js");
+function _default(values) {
+  var n = values.length;
+  return function (t) {
+    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
+      v0 = values[(i + n - 1) % n],
+      v1 = values[i % n],
+      v2 = values[(i + 1) % n],
+      v3 = values[(i + 2) % n];
+    return (0, _basis.basis)((t - i / n) * n, v0, v1, v2, v3);
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/color.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = nogamma;
+exports.gamma = gamma;
+exports.hue = hue;
+var _constant = _interopRequireDefault(require("./constant.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function linear(a, d) {
+  return function (t) {
+    return a + t * d;
+  };
+}
+function exponential(a, b, y) {
+  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function (t) {
+    return Math.pow(a + t * b, y);
+  };
+}
+function hue(a, b) {
+  var d = b - a;
+  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : (0, _constant.default)(isNaN(a) ? b : a);
+}
+function gamma(y) {
+  return (y = +y) === 1 ? nogamma : function (a, b) {
+    return b - a ? exponential(a, b, y) : (0, _constant.default)(isNaN(a) ? b : a);
+  };
+}
+function nogamma(a, b) {
+  var d = b - a;
+  return d ? linear(a, d) : (0, _constant.default)(isNaN(a) ? b : a);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/constant.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,8 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _default = x => () => x;
+exports.default = _default;
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/cubehelix.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/cubehelix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/cubehelix.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.cubehelixLong = void 0;
+var _index = require("../../../lib-vendor/d3-color/src/index.js");
+var _color = _interopRequireWildcard(require("./color.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function cubehelix(hue) {
+  return function cubehelixGamma(y) {
+    y = +y;
+    function cubehelix(start, end) {
+      var h = hue((start = (0, _index.cubehelix)(start)).h, (end = (0, _index.cubehelix)(end)).h),
+        s = (0, _color.default)(start.s, end.s),
+        l = (0, _color.default)(start.l, end.l),
+        opacity = (0, _color.default)(start.opacity, end.opacity);
+      return function (t) {
+        start.h = h(t);
+        start.s = s(t);
+        start.l = l(Math.pow(t, y));
+        start.opacity = opacity(t);
+        return start + "";
+      };
+    }
+    cubehelix.gamma = cubehelixGamma;
+    return cubehelix;
+  }(1);
+}
+var _default = exports.default = cubehelix(_color.hue);
+var cubehelixLong = exports.cubehelixLong = cubehelix(_color.default);
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/date.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/date.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/date.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(a, b) {
+  var d = new Date();
+  return a = +a, b = +b, function (t) {
+    return d.setTime(a * (1 - t) + b * t), d;
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/discrete.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/discrete.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/discrete.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(range) {
+  var n = range.length;
+  return function (t) {
+    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/hcl.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/hcl.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/hcl.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.hclLong = exports.default = void 0;
+var _index = require("../../../lib-vendor/d3-color/src/index.js");
+var _color = _interopRequireWildcard(require("./color.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function hcl(hue) {
+  return function (start, end) {
+    var h = hue((start = (0, _index.hcl)(start)).h, (end = (0, _index.hcl)(end)).h),
+      c = (0, _color.default)(start.c, end.c),
+      l = (0, _color.default)(start.l, end.l),
+      opacity = (0, _color.default)(start.opacity, end.opacity);
+    return function (t) {
+      start.h = h(t);
+      start.c = c(t);
+      start.l = l(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  };
+}
+var _default = exports.default = hcl(_color.hue);
+var hclLong = exports.hclLong = hcl(_color.default);
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/hsl.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/hsl.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/hsl.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.hslLong = exports.default = void 0;
+var _index = require("../../../lib-vendor/d3-color/src/index.js");
+var _color = _interopRequireWildcard(require("./color.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function hsl(hue) {
+  return function (start, end) {
+    var h = hue((start = (0, _index.hsl)(start)).h, (end = (0, _index.hsl)(end)).h),
+      s = (0, _color.default)(start.s, end.s),
+      l = (0, _color.default)(start.l, end.l),
+      opacity = (0, _color.default)(start.opacity, end.opacity);
+    return function (t) {
+      start.h = h(t);
+      start.s = s(t);
+      start.l = l(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  };
+}
+var _default = exports.default = hsl(_color.hue);
+var hslLong = exports.hslLong = hsl(_color.default);
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/hue.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/hue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/hue.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _color = require("./color.js");
+function _default(a, b) {
+  var i = (0, _color.hue)(+a, +b);
+  return function (t) {
+    var x = i(t);
+    return x - 360 * Math.floor(x / 360);
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,191 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "interpolate", {
+  enumerable: true,
+  get: function () {
+    return _value.default;
+  }
+});
+Object.defineProperty(exports, "interpolateArray", {
+  enumerable: true,
+  get: function () {
+    return _array.default;
+  }
+});
+Object.defineProperty(exports, "interpolateBasis", {
+  enumerable: true,
+  get: function () {
+    return _basis.default;
+  }
+});
+Object.defineProperty(exports, "interpolateBasisClosed", {
+  enumerable: true,
+  get: function () {
+    return _basisClosed.default;
+  }
+});
+Object.defineProperty(exports, "interpolateCubehelix", {
+  enumerable: true,
+  get: function () {
+    return _cubehelix.default;
+  }
+});
+Object.defineProperty(exports, "interpolateCubehelixLong", {
+  enumerable: true,
+  get: function () {
+    return _cubehelix.cubehelixLong;
+  }
+});
+Object.defineProperty(exports, "interpolateDate", {
+  enumerable: true,
+  get: function () {
+    return _date.default;
+  }
+});
+Object.defineProperty(exports, "interpolateDiscrete", {
+  enumerable: true,
+  get: function () {
+    return _discrete.default;
+  }
+});
+Object.defineProperty(exports, "interpolateHcl", {
+  enumerable: true,
+  get: function () {
+    return _hcl.default;
+  }
+});
+Object.defineProperty(exports, "interpolateHclLong", {
+  enumerable: true,
+  get: function () {
+    return _hcl.hclLong;
+  }
+});
+Object.defineProperty(exports, "interpolateHsl", {
+  enumerable: true,
+  get: function () {
+    return _hsl.default;
+  }
+});
+Object.defineProperty(exports, "interpolateHslLong", {
+  enumerable: true,
+  get: function () {
+    return _hsl.hslLong;
+  }
+});
+Object.defineProperty(exports, "interpolateHue", {
+  enumerable: true,
+  get: function () {
+    return _hue.default;
+  }
+});
+Object.defineProperty(exports, "interpolateLab", {
+  enumerable: true,
+  get: function () {
+    return _lab.default;
+  }
+});
+Object.defineProperty(exports, "interpolateNumber", {
+  enumerable: true,
+  get: function () {
+    return _number.default;
+  }
+});
+Object.defineProperty(exports, "interpolateNumberArray", {
+  enumerable: true,
+  get: function () {
+    return _numberArray.default;
+  }
+});
+Object.defineProperty(exports, "interpolateObject", {
+  enumerable: true,
+  get: function () {
+    return _object.default;
+  }
+});
+Object.defineProperty(exports, "interpolateRgb", {
+  enumerable: true,
+  get: function () {
+    return _rgb.default;
+  }
+});
+Object.defineProperty(exports, "interpolateRgbBasis", {
+  enumerable: true,
+  get: function () {
+    return _rgb.rgbBasis;
+  }
+});
+Object.defineProperty(exports, "interpolateRgbBasisClosed", {
+  enumerable: true,
+  get: function () {
+    return _rgb.rgbBasisClosed;
+  }
+});
+Object.defineProperty(exports, "interpolateRound", {
+  enumerable: true,
+  get: function () {
+    return _round.default;
+  }
+});
+Object.defineProperty(exports, "interpolateString", {
+  enumerable: true,
+  get: function () {
+    return _string.default;
+  }
+});
+Object.defineProperty(exports, "interpolateTransformCss", {
+  enumerable: true,
+  get: function () {
+    return _index.interpolateTransformCss;
+  }
+});
+Object.defineProperty(exports, "interpolateTransformSvg", {
+  enumerable: true,
+  get: function () {
+    return _index.interpolateTransformSvg;
+  }
+});
+Object.defineProperty(exports, "interpolateZoom", {
+  enumerable: true,
+  get: function () {
+    return _zoom.default;
+  }
+});
+Object.defineProperty(exports, "piecewise", {
+  enumerable: true,
+  get: function () {
+    return _piecewise.default;
+  }
+});
+Object.defineProperty(exports, "quantize", {
+  enumerable: true,
+  get: function () {
+    return _quantize.default;
+  }
+});
+var _value = _interopRequireDefault(require("./value.js"));
+var _array = _interopRequireDefault(require("./array.js"));
+var _basis = _interopRequireDefault(require("./basis.js"));
+var _basisClosed = _interopRequireDefault(require("./basisClosed.js"));
+var _date = _interopRequireDefault(require("./date.js"));
+var _discrete = _interopRequireDefault(require("./discrete.js"));
+var _hue = _interopRequireDefault(require("./hue.js"));
+var _number = _interopRequireDefault(require("./number.js"));
+var _numberArray = _interopRequireDefault(require("./numberArray.js"));
+var _object = _interopRequireDefault(require("./object.js"));
+var _round = _interopRequireDefault(require("./round.js"));
+var _string = _interopRequireDefault(require("./string.js"));
+var _index = require("./transform/index.js");
+var _zoom = _interopRequireDefault(require("./zoom.js"));
+var _rgb = _interopRequireWildcard(require("./rgb.js"));
+var _hsl = _interopRequireWildcard(require("./hsl.js"));
+var _lab = _interopRequireDefault(require("./lab.js"));
+var _hcl = _interopRequireWildcard(require("./hcl.js"));
+var _cubehelix = _interopRequireWildcard(require("./cubehelix.js"));
+var _piecewise = _interopRequireDefault(require("./piecewise.js"));
+var _quantize = _interopRequireDefault(require("./quantize.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/lab.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/lab.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/lab.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,22 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = lab;
+var _index = require("../../../lib-vendor/d3-color/src/index.js");
+var _color = _interopRequireDefault(require("./color.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function lab(start, end) {
+  var l = (0, _color.default)((start = (0, _index.lab)(start)).l, (end = (0, _index.lab)(end)).l),
+    a = (0, _color.default)(start.a, end.a),
+    b = (0, _color.default)(start.b, end.b),
+    opacity = (0, _color.default)(start.opacity, end.opacity);
+  return function (t) {
+    start.l = l(t);
+    start.a = a(t);
+    start.b = b(t);
+    start.opacity = opacity(t);
+    return start + "";
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/number.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(a, b) {
+  return a = +a, b = +b, function (t) {
+    return a * (1 - t) + b * t;
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/numberArray.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/numberArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/numberArray.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.isNumberArray = isNumberArray;
+function _default(a, b) {
+  if (!b) b = [];
+  var n = a ? Math.min(b.length, a.length) : 0,
+    c = b.slice(),
+    i;
+  return function (t) {
+    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;
+    return c;
+  };
+}
+function isNumberArray(x) {
+  return ArrayBuffer.isView(x) && !(x instanceof DataView);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/object.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/object.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/object.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _value = _interopRequireDefault(require("./value.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(a, b) {
+  var i = {},
+    c = {},
+    k;
+  if (a === null || typeof a !== "object") a = {};
+  if (b === null || typeof b !== "object") b = {};
+  for (k in b) {
+    if (k in a) {
+      i[k] = (0, _value.default)(a[k], b[k]);
+    } else {
+      c[k] = b[k];
+    }
+  }
+  return function (t) {
+    for (k in i) c[k] = i[k](t);
+    return c;
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/piecewise.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/piecewise.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/piecewise.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = piecewise;
+var _value = _interopRequireDefault(require("./value.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function piecewise(interpolate, values) {
+  if (values === undefined) values = interpolate, interpolate = _value.default;
+  var i = 0,
+    n = values.length - 1,
+    v = values[0],
+    I = new Array(n < 0 ? 0 : n);
+  while (i < n) I[i] = interpolate(v, v = values[++i]);
+  return function (t) {
+    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));
+    return I[i](t - i);
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/quantize.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/quantize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/quantize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(interpolator, n) {
+  var samples = new Array(n);
+  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
+  return samples;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/rgb.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/rgb.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/rgb.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,59 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.rgbBasisClosed = exports.rgbBasis = exports.default = void 0;
+var _index = require("../../../lib-vendor/d3-color/src/index.js");
+var _basis = _interopRequireDefault(require("./basis.js"));
+var _basisClosed = _interopRequireDefault(require("./basisClosed.js"));
+var _color = _interopRequireWildcard(require("./color.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var _default = exports.default = function rgbGamma(y) {
+  var color = (0, _color.gamma)(y);
+  function rgb(start, end) {
+    var r = color((start = (0, _index.rgb)(start)).r, (end = (0, _index.rgb)(end)).r),
+      g = color(start.g, end.g),
+      b = color(start.b, end.b),
+      opacity = (0, _color.default)(start.opacity, end.opacity);
+    return function (t) {
+      start.r = r(t);
+      start.g = g(t);
+      start.b = b(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+  rgb.gamma = rgbGamma;
+  return rgb;
+}(1);
+function rgbSpline(spline) {
+  return function (colors) {
+    var n = colors.length,
+      r = new Array(n),
+      g = new Array(n),
+      b = new Array(n),
+      i,
+      color;
+    for (i = 0; i < n; ++i) {
+      color = (0, _index.rgb)(colors[i]);
+      r[i] = color.r || 0;
+      g[i] = color.g || 0;
+      b[i] = color.b || 0;
+    }
+    r = spline(r);
+    g = spline(g);
+    b = spline(b);
+    color.opacity = 1;
+    return function (t) {
+      color.r = r(t);
+      color.g = g(t);
+      color.b = b(t);
+      return color + "";
+    };
+  };
+}
+var rgbBasis = exports.rgbBasis = rgbSpline(_basis.default);
+var rgbBasisClosed = exports.rgbBasisClosed = rgbSpline(_basisClosed.default);
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/round.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/round.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(a, b) {
+  return a = +a, b = +b, function (t) {
+    return Math.round(a * (1 - t) + b * t);
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/string.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/string.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/string.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,75 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _number = _interopRequireDefault(require("./number.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
+  reB = new RegExp(reA.source, "g");
+function zero(b) {
+  return function () {
+    return b;
+  };
+}
+function one(b) {
+  return function (t) {
+    return b(t) + "";
+  };
+}
+function _default(a, b) {
+  var bi = reA.lastIndex = reB.lastIndex = 0,
+    // scan index for next number in b
+    am,
+    // current match in a
+    bm,
+    // current match in b
+    bs,
+    // string preceding current number in b, if any
+    i = -1,
+    // index in s
+    s = [],
+    // string constants and placeholders
+    q = []; // number interpolators
+
+  // Coerce inputs to strings.
+  a = a + "", b = b + "";
+
+  // Interpolate pairs of numbers in a & b.
+  while ((am = reA.exec(a)) && (bm = reB.exec(b))) {
+    if ((bs = bm.index) > bi) {
+      // a string precedes the next number in b
+      bs = b.slice(bi, bs);
+      if (s[i]) s[i] += bs; // coalesce with previous string
+      else s[++i] = bs;
+    }
+    if ((am = am[0]) === (bm = bm[0])) {
+      // numbers in a & b match
+      if (s[i]) s[i] += bm; // coalesce with previous string
+      else s[++i] = bm;
+    } else {
+      // interpolate non-matching numbers
+      s[++i] = null;
+      q.push({
+        i: i,
+        x: (0, _number.default)(am, bm)
+      });
+    }
+    bi = reB.lastIndex;
+  }
+
+  // Add remains of b.
+  if (bi < b.length) {
+    bs = b.slice(bi);
+    if (s[i]) s[i] += bs; // coalesce with previous string
+    else s[++i] = bs;
+  }
+
+  // Special optimization for only a single match.
+  // Otherwise, interpolate each of the numbers and rejoin the string.
+  return s.length < 2 ? q[0] ? one(q[0].x) : zero(b) : (b = q.length, function (t) {
+    for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+    return s.join("");
+  });
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/transform/decompose.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/transform/decompose.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/transform/decompose.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.identity = void 0;
+var degrees = 180 / Math.PI;
+var identity = exports.identity = {
+  translateX: 0,
+  translateY: 0,
+  rotate: 0,
+  skewX: 0,
+  scaleX: 1,
+  scaleY: 1
+};
+function _default(a, b, c, d, e, f) {
+  var scaleX, scaleY, skewX;
+  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
+  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
+  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
+  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
+  return {
+    translateX: e,
+    translateY: f,
+    rotate: Math.atan2(b, a) * degrees,
+    skewX: Math.atan(skewX) * degrees,
+    scaleX: scaleX,
+    scaleY: scaleY
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/transform/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/transform/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/transform/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,83 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.interpolateTransformSvg = exports.interpolateTransformCss = void 0;
+var _number = _interopRequireDefault(require("../number.js"));
+var _parse = require("./parse.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function interpolateTransform(parse, pxComma, pxParen, degParen) {
+  function pop(s) {
+    return s.length ? s.pop() + " " : "";
+  }
+  function translate(xa, ya, xb, yb, s, q) {
+    if (xa !== xb || ya !== yb) {
+      var i = s.push("translate(", null, pxComma, null, pxParen);
+      q.push({
+        i: i - 4,
+        x: (0, _number.default)(xa, xb)
+      }, {
+        i: i - 2,
+        x: (0, _number.default)(ya, yb)
+      });
+    } else if (xb || yb) {
+      s.push("translate(" + xb + pxComma + yb + pxParen);
+    }
+  }
+  function rotate(a, b, s, q) {
+    if (a !== b) {
+      if (a - b > 180) b += 360;else if (b - a > 180) a += 360; // shortest path
+      q.push({
+        i: s.push(pop(s) + "rotate(", null, degParen) - 2,
+        x: (0, _number.default)(a, b)
+      });
+    } else if (b) {
+      s.push(pop(s) + "rotate(" + b + degParen);
+    }
+  }
+  function skewX(a, b, s, q) {
+    if (a !== b) {
+      q.push({
+        i: s.push(pop(s) + "skewX(", null, degParen) - 2,
+        x: (0, _number.default)(a, b)
+      });
+    } else if (b) {
+      s.push(pop(s) + "skewX(" + b + degParen);
+    }
+  }
+  function scale(xa, ya, xb, yb, s, q) {
+    if (xa !== xb || ya !== yb) {
+      var i = s.push(pop(s) + "scale(", null, ",", null, ")");
+      q.push({
+        i: i - 4,
+        x: (0, _number.default)(xa, xb)
+      }, {
+        i: i - 2,
+        x: (0, _number.default)(ya, yb)
+      });
+    } else if (xb !== 1 || yb !== 1) {
+      s.push(pop(s) + "scale(" + xb + "," + yb + ")");
+    }
+  }
+  return function (a, b) {
+    var s = [],
+      // string constants and placeholders
+      q = []; // number interpolators
+    a = parse(a), b = parse(b);
+    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
+    rotate(a.rotate, b.rotate, s, q);
+    skewX(a.skewX, b.skewX, s, q);
+    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
+    a = b = null; // gc
+    return function (t) {
+      var i = -1,
+        n = q.length,
+        o;
+      while (++i < n) s[(o = q[i]).i] = o.x(t);
+      return s.join("");
+    };
+  };
+}
+var interpolateTransformCss = exports.interpolateTransformCss = interpolateTransform(_parse.parseCss, "px, ", "px)", "deg)");
+var interpolateTransformSvg = exports.interpolateTransformSvg = interpolateTransform(_parse.parseSvg, ", ", ")", ")");
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/transform/parse.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/transform/parse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/transform/parse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.parseCss = parseCss;
+exports.parseSvg = parseSvg;
+var _decompose = _interopRequireWildcard(require("./decompose.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+var svgNode;
+
+/* eslint-disable no-undef */
+function parseCss(value) {
+  const m = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");
+  return m.isIdentity ? _decompose.identity : (0, _decompose.default)(m.a, m.b, m.c, m.d, m.e, m.f);
+}
+function parseSvg(value) {
+  if (value == null) return _decompose.identity;
+  if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
+  svgNode.setAttribute("transform", value);
+  if (!(value = svgNode.transform.baseVal.consolidate())) return _decompose.identity;
+  value = value.matrix;
+  return (0, _decompose.default)(value.a, value.b, value.c, value.d, value.e, value.f);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/value.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/value.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/value.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _index = require("../../../lib-vendor/d3-color/src/index.js");
+var _rgb = _interopRequireDefault(require("./rgb.js"));
+var _array = require("./array.js");
+var _date = _interopRequireDefault(require("./date.js"));
+var _number = _interopRequireDefault(require("./number.js"));
+var _object = _interopRequireDefault(require("./object.js"));
+var _string = _interopRequireDefault(require("./string.js"));
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _numberArray = _interopRequireWildcard(require("./numberArray.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(a, b) {
+  var t = typeof b,
+    c;
+  return b == null || t === "boolean" ? (0, _constant.default)(b) : (t === "number" ? _number.default : t === "string" ? (c = (0, _index.color)(b)) ? (b = c, _rgb.default) : _string.default : b instanceof _index.color ? _rgb.default : b instanceof Date ? _date.default : (0, _numberArray.isNumberArray)(b) ? _numberArray.default : Array.isArray(b) ? _array.genericArray : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? _object.default : _number.default)(a, b);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-interpolate/src/zoom.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-interpolate/src/zoom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-interpolate/src/zoom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,66 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var epsilon2 = 1e-12;
+function cosh(x) {
+  return ((x = Math.exp(x)) + 1 / x) / 2;
+}
+function sinh(x) {
+  return ((x = Math.exp(x)) - 1 / x) / 2;
+}
+function tanh(x) {
+  return ((x = Math.exp(2 * x)) - 1) / (x + 1);
+}
+var _default = exports.default = function zoomRho(rho, rho2, rho4) {
+  // p0 = [ux0, uy0, w0]
+  // p1 = [ux1, uy1, w1]
+  function zoom(p0, p1) {
+    var ux0 = p0[0],
+      uy0 = p0[1],
+      w0 = p0[2],
+      ux1 = p1[0],
+      uy1 = p1[1],
+      w1 = p1[2],
+      dx = ux1 - ux0,
+      dy = uy1 - uy0,
+      d2 = dx * dx + dy * dy,
+      i,
+      S;
+
+    // Special case for u0 ≅ u1.
+    if (d2 < epsilon2) {
+      S = Math.log(w1 / w0) / rho;
+      i = function (t) {
+        return [ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(rho * t * S)];
+      };
+    }
+
+    // General case.
+    else {
+      var d1 = Math.sqrt(d2),
+        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
+        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
+        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
+        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
+      S = (r1 - r0) / rho;
+      i = function (t) {
+        var s = t * S,
+          coshr0 = cosh(r0),
+          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
+        return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0)];
+      };
+    }
+    i.duration = S * 1000 * rho / Math.SQRT2;
+    return i;
+  }
+  zoom.rho = function (_) {
+    var _1 = Math.max(1e-3, +_),
+      _2 = _1 * _1,
+      _4 = _2 * _2;
+    return zoomRho(_1, _2, _4);
+  };
+  return zoom;
+}(Math.SQRT2, 2, 4);
Index: node_modules/victory-vendor/lib-vendor/d3-path/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-path/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-path/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2015-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-path/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-path/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-path/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "path", {
+  enumerable: true,
+  get: function () {
+    return _path.default;
+  }
+});
+var _path = _interopRequireDefault(require("./path.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
Index: node_modules/victory-vendor/lib-vendor/d3-path/src/path.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-path/src/path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-path/src/path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,132 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+const pi = Math.PI,
+  tau = 2 * pi,
+  epsilon = 1e-6,
+  tauEpsilon = tau - epsilon;
+function Path() {
+  this._x0 = this._y0 =
+  // start of current subpath
+  this._x1 = this._y1 = null; // end of current subpath
+  this._ = "";
+}
+function path() {
+  return new Path();
+}
+Path.prototype = path.prototype = {
+  constructor: Path,
+  moveTo: function (x, y) {
+    this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);
+  },
+  closePath: function () {
+    if (this._x1 !== null) {
+      this._x1 = this._x0, this._y1 = this._y0;
+      this._ += "Z";
+    }
+  },
+  lineTo: function (x, y) {
+    this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);
+  },
+  quadraticCurveTo: function (x1, y1, x, y) {
+    this._ += "Q" + +x1 + "," + +y1 + "," + (this._x1 = +x) + "," + (this._y1 = +y);
+  },
+  bezierCurveTo: function (x1, y1, x2, y2, x, y) {
+    this._ += "C" + +x1 + "," + +y1 + "," + +x2 + "," + +y2 + "," + (this._x1 = +x) + "," + (this._y1 = +y);
+  },
+  arcTo: function (x1, y1, x2, y2, r) {
+    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
+    var x0 = this._x1,
+      y0 = this._y1,
+      x21 = x2 - x1,
+      y21 = y2 - y1,
+      x01 = x0 - x1,
+      y01 = y0 - y1,
+      l01_2 = x01 * x01 + y01 * y01;
+
+    // Is the radius negative? Error.
+    if (r < 0) throw new Error("negative radius: " + r);
+
+    // Is this path empty? Move to (x1,y1).
+    if (this._x1 === null) {
+      this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
+    }
+
+    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
+    else if (!(l01_2 > epsilon)) ;
+
+    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
+    // Equivalently, is (x1,y1) coincident with (x2,y2)?
+    // Or, is the radius zero? Line to (x1,y1).
+    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {
+      this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
+    }
+
+    // Otherwise, draw an arc!
+    else {
+      var x20 = x2 - x0,
+        y20 = y2 - y0,
+        l21_2 = x21 * x21 + y21 * y21,
+        l20_2 = x20 * x20 + y20 * y20,
+        l21 = Math.sqrt(l21_2),
+        l01 = Math.sqrt(l01_2),
+        l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
+        t01 = l / l01,
+        t21 = l / l21;
+
+      // If the start tangent is not coincident with (x0,y0), line to.
+      if (Math.abs(t01 - 1) > epsilon) {
+        this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
+      }
+      this._ += "A" + r + "," + r + ",0,0," + +(y01 * x20 > x01 * y20) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);
+    }
+  },
+  arc: function (x, y, r, a0, a1, ccw) {
+    x = +x, y = +y, r = +r, ccw = !!ccw;
+    var dx = r * Math.cos(a0),
+      dy = r * Math.sin(a0),
+      x0 = x + dx,
+      y0 = y + dy,
+      cw = 1 ^ ccw,
+      da = ccw ? a0 - a1 : a1 - a0;
+
+    // Is the radius negative? Error.
+    if (r < 0) throw new Error("negative radius: " + r);
+
+    // Is this path empty? Move to (x0,y0).
+    if (this._x1 === null) {
+      this._ += "M" + x0 + "," + y0;
+    }
+
+    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
+    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {
+      this._ += "L" + x0 + "," + y0;
+    }
+
+    // Is this arc empty? We’re done.
+    if (!r) return;
+
+    // Does the angle go the wrong way? Flip the direction.
+    if (da < 0) da = da % tau + tau;
+
+    // Is this a complete circle? Draw two arcs to complete the circle.
+    if (da > tauEpsilon) {
+      this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
+    }
+
+    // Is this arc non-empty? Draw an arc!
+    else if (da > epsilon) {
+      this._ += "A" + r + "," + r + ",0," + +(da >= pi) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
+    }
+  },
+  rect: function (x, y, w, h) {
+    this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + +w + "v" + +h + "h" + -w + "Z";
+  },
+  toString: function () {
+    return this._;
+  }
+};
+var _default = exports.default = path;
Index: node_modules/victory-vendor/lib-vendor/d3-scale/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/band.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/band.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/band.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,87 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = band;
+exports.point = point;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _init = require("./init.js");
+var _ordinal = _interopRequireDefault(require("./ordinal.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function band() {
+  var scale = (0, _ordinal.default)().unknown(undefined),
+    domain = scale.domain,
+    ordinalRange = scale.range,
+    r0 = 0,
+    r1 = 1,
+    step,
+    bandwidth,
+    round = false,
+    paddingInner = 0,
+    paddingOuter = 0,
+    align = 0.5;
+  delete scale.unknown;
+  function rescale() {
+    var n = domain().length,
+      reverse = r1 < r0,
+      start = reverse ? r1 : r0,
+      stop = reverse ? r0 : r1;
+    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
+    if (round) step = Math.floor(step);
+    start += (stop - start - step * (n - paddingInner)) * align;
+    bandwidth = step * (1 - paddingInner);
+    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
+    var values = (0, _index.range)(n).map(function (i) {
+      return start + step * i;
+    });
+    return ordinalRange(reverse ? values.reverse() : values);
+  }
+  scale.domain = function (_) {
+    return arguments.length ? (domain(_), rescale()) : domain();
+  };
+  scale.range = function (_) {
+    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];
+  };
+  scale.rangeRound = function (_) {
+    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();
+  };
+  scale.bandwidth = function () {
+    return bandwidth;
+  };
+  scale.step = function () {
+    return step;
+  };
+  scale.round = function (_) {
+    return arguments.length ? (round = !!_, rescale()) : round;
+  };
+  scale.padding = function (_) {
+    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
+  };
+  scale.paddingInner = function (_) {
+    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
+  };
+  scale.paddingOuter = function (_) {
+    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
+  };
+  scale.align = function (_) {
+    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
+  };
+  scale.copy = function () {
+    return band(domain(), [r0, r1]).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);
+  };
+  return _init.initRange.apply(rescale(), arguments);
+}
+function pointish(scale) {
+  var copy = scale.copy;
+  scale.padding = scale.paddingOuter;
+  delete scale.paddingInner;
+  delete scale.paddingOuter;
+  scale.copy = function () {
+    return pointish(copy());
+  };
+  return scale;
+}
+function point() {
+  return pointish(band.apply(null, arguments).paddingInner(1));
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/colors.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/colors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/colors.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = colors;
+function colors(s) {
+  return s.match(/.{6}/g).map(function (x) {
+    return "#" + x;
+  });
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/constant.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = constants;
+function constants(x) {
+  return function () {
+    return x;
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/continuous.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/continuous.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/continuous.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,116 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.copy = copy;
+exports.default = continuous;
+exports.identity = identity;
+exports.transformer = transformer;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _index2 = require("../../../lib-vendor/d3-interpolate/src/index.js");
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _number = _interopRequireDefault(require("./number.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var unit = [0, 1];
+function identity(x) {
+  return x;
+}
+function normalize(a, b) {
+  return (b -= a = +a) ? function (x) {
+    return (x - a) / b;
+  } : (0, _constant.default)(isNaN(b) ? NaN : 0.5);
+}
+function clamper(a, b) {
+  var t;
+  if (a > b) t = a, a = b, b = t;
+  return function (x) {
+    return Math.max(a, Math.min(b, x));
+  };
+}
+
+// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
+// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
+function bimap(domain, range, interpolate) {
+  var d0 = domain[0],
+    d1 = domain[1],
+    r0 = range[0],
+    r1 = range[1];
+  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);
+  return function (x) {
+    return r0(d0(x));
+  };
+}
+function polymap(domain, range, interpolate) {
+  var j = Math.min(domain.length, range.length) - 1,
+    d = new Array(j),
+    r = new Array(j),
+    i = -1;
+
+  // Reverse descending domains.
+  if (domain[j] < domain[0]) {
+    domain = domain.slice().reverse();
+    range = range.slice().reverse();
+  }
+  while (++i < j) {
+    d[i] = normalize(domain[i], domain[i + 1]);
+    r[i] = interpolate(range[i], range[i + 1]);
+  }
+  return function (x) {
+    var i = (0, _index.bisect)(domain, x, 1, j) - 1;
+    return r[i](d[i](x));
+  };
+}
+function copy(source, target) {
+  return target.domain(source.domain()).range(source.range()).interpolate(source.interpolate()).clamp(source.clamp()).unknown(source.unknown());
+}
+function transformer() {
+  var domain = unit,
+    range = unit,
+    interpolate = _index2.interpolate,
+    transform,
+    untransform,
+    unknown,
+    clamp = identity,
+    piecewise,
+    output,
+    input;
+  function rescale() {
+    var n = Math.min(domain.length, range.length);
+    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);
+    piecewise = n > 2 ? polymap : bimap;
+    output = input = null;
+    return scale;
+  }
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));
+  }
+  scale.invert = function (y) {
+    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), _index2.interpolateNumber)))(y)));
+  };
+  scale.domain = function (_) {
+    return arguments.length ? (domain = Array.from(_, _number.default), rescale()) : domain.slice();
+  };
+  scale.range = function (_) {
+    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();
+  };
+  scale.rangeRound = function (_) {
+    return range = Array.from(_), interpolate = _index2.interpolateRound, rescale();
+  };
+  scale.clamp = function (_) {
+    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;
+  };
+  scale.interpolate = function (_) {
+    return arguments.length ? (interpolate = _, rescale()) : interpolate;
+  };
+  scale.unknown = function (_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+  return function (t, u) {
+    transform = t, untransform = u;
+    return rescale();
+  };
+}
+function continuous() {
+  return transformer()(identity, identity);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/diverging.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/diverging.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/diverging.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,91 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = diverging;
+exports.divergingLog = divergingLog;
+exports.divergingPow = divergingPow;
+exports.divergingSqrt = divergingSqrt;
+exports.divergingSymlog = divergingSymlog;
+var _index = require("../../../lib-vendor/d3-interpolate/src/index.js");
+var _continuous = require("./continuous.js");
+var _init = require("./init.js");
+var _linear = require("./linear.js");
+var _log = require("./log.js");
+var _sequential = require("./sequential.js");
+var _symlog = require("./symlog.js");
+var _pow = require("./pow.js");
+function transformer() {
+  var x0 = 0,
+    x1 = 0.5,
+    x2 = 1,
+    s = 1,
+    t0,
+    t1,
+    t2,
+    k10,
+    k21,
+    interpolator = _continuous.identity,
+    transform,
+    clamp = false,
+    unknown;
+  function scale(x) {
+    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));
+  }
+  scale.domain = function (_) {
+    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];
+  };
+  scale.clamp = function (_) {
+    return arguments.length ? (clamp = !!_, scale) : clamp;
+  };
+  scale.interpolator = function (_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+  function range(interpolate) {
+    return function (_) {
+      var r0, r1, r2;
+      return arguments.length ? ([r0, r1, r2] = _, interpolator = (0, _index.piecewise)(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];
+    };
+  }
+  scale.range = range(_index.interpolate);
+  scale.rangeRound = range(_index.interpolateRound);
+  scale.unknown = function (_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+  return function (t) {
+    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;
+    return scale;
+  };
+}
+function diverging() {
+  var scale = (0, _linear.linearish)(transformer()(_continuous.identity));
+  scale.copy = function () {
+    return (0, _sequential.copy)(scale, diverging());
+  };
+  return _init.initInterpolator.apply(scale, arguments);
+}
+function divergingLog() {
+  var scale = (0, _log.loggish)(transformer()).domain([0.1, 1, 10]);
+  scale.copy = function () {
+    return (0, _sequential.copy)(scale, divergingLog()).base(scale.base());
+  };
+  return _init.initInterpolator.apply(scale, arguments);
+}
+function divergingSymlog() {
+  var scale = (0, _symlog.symlogish)(transformer());
+  scale.copy = function () {
+    return (0, _sequential.copy)(scale, divergingSymlog()).constant(scale.constant());
+  };
+  return _init.initInterpolator.apply(scale, arguments);
+}
+function divergingPow() {
+  var scale = (0, _pow.powish)(transformer());
+  scale.copy = function () {
+    return (0, _sequential.copy)(scale, divergingPow()).exponent(scale.exponent());
+  };
+  return _init.initInterpolator.apply(scale, arguments);
+}
+function divergingSqrt() {
+  return divergingPow.apply(null, arguments).exponent(0.5);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/identity.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = identity;
+var _linear = require("./linear.js");
+var _number = _interopRequireDefault(require("./number.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function identity(domain) {
+  var unknown;
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : x;
+  }
+  scale.invert = scale;
+  scale.domain = scale.range = function (_) {
+    return arguments.length ? (domain = Array.from(_, _number.default), scale) : domain.slice();
+  };
+  scale.unknown = function (_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+  scale.copy = function () {
+    return identity(domain).unknown(unknown);
+  };
+  domain = arguments.length ? Array.from(domain, _number.default) : [0, 1];
+  return (0, _linear.linearish)(scale);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,193 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "scaleBand", {
+  enumerable: true,
+  get: function () {
+    return _band.default;
+  }
+});
+Object.defineProperty(exports, "scaleDiverging", {
+  enumerable: true,
+  get: function () {
+    return _diverging.default;
+  }
+});
+Object.defineProperty(exports, "scaleDivergingLog", {
+  enumerable: true,
+  get: function () {
+    return _diverging.divergingLog;
+  }
+});
+Object.defineProperty(exports, "scaleDivergingPow", {
+  enumerable: true,
+  get: function () {
+    return _diverging.divergingPow;
+  }
+});
+Object.defineProperty(exports, "scaleDivergingSqrt", {
+  enumerable: true,
+  get: function () {
+    return _diverging.divergingSqrt;
+  }
+});
+Object.defineProperty(exports, "scaleDivergingSymlog", {
+  enumerable: true,
+  get: function () {
+    return _diverging.divergingSymlog;
+  }
+});
+Object.defineProperty(exports, "scaleIdentity", {
+  enumerable: true,
+  get: function () {
+    return _identity.default;
+  }
+});
+Object.defineProperty(exports, "scaleImplicit", {
+  enumerable: true,
+  get: function () {
+    return _ordinal.implicit;
+  }
+});
+Object.defineProperty(exports, "scaleLinear", {
+  enumerable: true,
+  get: function () {
+    return _linear.default;
+  }
+});
+Object.defineProperty(exports, "scaleLog", {
+  enumerable: true,
+  get: function () {
+    return _log.default;
+  }
+});
+Object.defineProperty(exports, "scaleOrdinal", {
+  enumerable: true,
+  get: function () {
+    return _ordinal.default;
+  }
+});
+Object.defineProperty(exports, "scalePoint", {
+  enumerable: true,
+  get: function () {
+    return _band.point;
+  }
+});
+Object.defineProperty(exports, "scalePow", {
+  enumerable: true,
+  get: function () {
+    return _pow.default;
+  }
+});
+Object.defineProperty(exports, "scaleQuantile", {
+  enumerable: true,
+  get: function () {
+    return _quantile.default;
+  }
+});
+Object.defineProperty(exports, "scaleQuantize", {
+  enumerable: true,
+  get: function () {
+    return _quantize.default;
+  }
+});
+Object.defineProperty(exports, "scaleRadial", {
+  enumerable: true,
+  get: function () {
+    return _radial.default;
+  }
+});
+Object.defineProperty(exports, "scaleSequential", {
+  enumerable: true,
+  get: function () {
+    return _sequential.default;
+  }
+});
+Object.defineProperty(exports, "scaleSequentialLog", {
+  enumerable: true,
+  get: function () {
+    return _sequential.sequentialLog;
+  }
+});
+Object.defineProperty(exports, "scaleSequentialPow", {
+  enumerable: true,
+  get: function () {
+    return _sequential.sequentialPow;
+  }
+});
+Object.defineProperty(exports, "scaleSequentialQuantile", {
+  enumerable: true,
+  get: function () {
+    return _sequentialQuantile.default;
+  }
+});
+Object.defineProperty(exports, "scaleSequentialSqrt", {
+  enumerable: true,
+  get: function () {
+    return _sequential.sequentialSqrt;
+  }
+});
+Object.defineProperty(exports, "scaleSequentialSymlog", {
+  enumerable: true,
+  get: function () {
+    return _sequential.sequentialSymlog;
+  }
+});
+Object.defineProperty(exports, "scaleSqrt", {
+  enumerable: true,
+  get: function () {
+    return _pow.sqrt;
+  }
+});
+Object.defineProperty(exports, "scaleSymlog", {
+  enumerable: true,
+  get: function () {
+    return _symlog.default;
+  }
+});
+Object.defineProperty(exports, "scaleThreshold", {
+  enumerable: true,
+  get: function () {
+    return _threshold.default;
+  }
+});
+Object.defineProperty(exports, "scaleTime", {
+  enumerable: true,
+  get: function () {
+    return _time.default;
+  }
+});
+Object.defineProperty(exports, "scaleUtc", {
+  enumerable: true,
+  get: function () {
+    return _utcTime.default;
+  }
+});
+Object.defineProperty(exports, "tickFormat", {
+  enumerable: true,
+  get: function () {
+    return _tickFormat.default;
+  }
+});
+var _band = _interopRequireWildcard(require("./band.js"));
+var _identity = _interopRequireDefault(require("./identity.js"));
+var _linear = _interopRequireDefault(require("./linear.js"));
+var _log = _interopRequireDefault(require("./log.js"));
+var _symlog = _interopRequireDefault(require("./symlog.js"));
+var _ordinal = _interopRequireWildcard(require("./ordinal.js"));
+var _pow = _interopRequireWildcard(require("./pow.js"));
+var _radial = _interopRequireDefault(require("./radial.js"));
+var _quantile = _interopRequireDefault(require("./quantile.js"));
+var _quantize = _interopRequireDefault(require("./quantize.js"));
+var _threshold = _interopRequireDefault(require("./threshold.js"));
+var _time = _interopRequireDefault(require("./time.js"));
+var _utcTime = _interopRequireDefault(require("./utcTime.js"));
+var _sequential = _interopRequireWildcard(require("./sequential.js"));
+var _sequentialQuantile = _interopRequireDefault(require("./sequentialQuantile.js"));
+var _diverging = _interopRequireWildcard(require("./diverging.js"));
+var _tickFormat = _interopRequireDefault(require("./tickFormat.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/init.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/init.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/init.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.initInterpolator = initInterpolator;
+exports.initRange = initRange;
+function initRange(domain, range) {
+  switch (arguments.length) {
+    case 0:
+      break;
+    case 1:
+      this.range(domain);
+      break;
+    default:
+      this.range(range).domain(domain);
+      break;
+  }
+  return this;
+}
+function initInterpolator(domain, interpolator) {
+  switch (arguments.length) {
+    case 0:
+      break;
+    case 1:
+      {
+        if (typeof domain === "function") this.interpolator(domain);else this.range(domain);
+        break;
+      }
+    default:
+      {
+        this.domain(domain);
+        if (typeof interpolator === "function") this.interpolator(interpolator);else this.range(interpolator);
+        break;
+      }
+  }
+  return this;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/linear.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = linear;
+exports.linearish = linearish;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _continuous = _interopRequireWildcard(require("./continuous.js"));
+var _init = require("./init.js");
+var _tickFormat = _interopRequireDefault(require("./tickFormat.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function linearish(scale) {
+  var domain = scale.domain;
+  scale.ticks = function (count) {
+    var d = domain();
+    return (0, _index.ticks)(d[0], d[d.length - 1], count == null ? 10 : count);
+  };
+  scale.tickFormat = function (count, specifier) {
+    var d = domain();
+    return (0, _tickFormat.default)(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
+  };
+  scale.nice = function (count) {
+    if (count == null) count = 10;
+    var d = domain();
+    var i0 = 0;
+    var i1 = d.length - 1;
+    var start = d[i0];
+    var stop = d[i1];
+    var prestep;
+    var step;
+    var maxIter = 10;
+    if (stop < start) {
+      step = start, start = stop, stop = step;
+      step = i0, i0 = i1, i1 = step;
+    }
+    while (maxIter-- > 0) {
+      step = (0, _index.tickIncrement)(start, stop, count);
+      if (step === prestep) {
+        d[i0] = start;
+        d[i1] = stop;
+        return domain(d);
+      } else if (step > 0) {
+        start = Math.floor(start / step) * step;
+        stop = Math.ceil(stop / step) * step;
+      } else if (step < 0) {
+        start = Math.ceil(start * step) / step;
+        stop = Math.floor(stop * step) / step;
+      } else {
+        break;
+      }
+      prestep = step;
+    }
+    return scale;
+  };
+  return scale;
+}
+function linear() {
+  var scale = (0, _continuous.default)();
+  scale.copy = function () {
+    return (0, _continuous.copy)(scale, linear());
+  };
+  _init.initRange.apply(scale, arguments);
+  return linearish(scale);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/log.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/log.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/log.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,123 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = log;
+exports.loggish = loggish;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _index2 = require("../../../lib-vendor/d3-format/src/index.js");
+var _nice = _interopRequireDefault(require("./nice.js"));
+var _continuous = require("./continuous.js");
+var _init = require("./init.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function transformLog(x) {
+  return Math.log(x);
+}
+function transformExp(x) {
+  return Math.exp(x);
+}
+function transformLogn(x) {
+  return -Math.log(-x);
+}
+function transformExpn(x) {
+  return -Math.exp(-x);
+}
+function pow10(x) {
+  return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
+}
+function powp(base) {
+  return base === 10 ? pow10 : base === Math.E ? Math.exp : x => Math.pow(base, x);
+}
+function logp(base) {
+  return base === Math.E ? Math.log : base === 10 && Math.log10 || base === 2 && Math.log2 || (base = Math.log(base), x => Math.log(x) / base);
+}
+function reflect(f) {
+  return (x, k) => -f(-x, k);
+}
+function loggish(transform) {
+  const scale = transform(transformLog, transformExp);
+  const domain = scale.domain;
+  let base = 10;
+  let logs;
+  let pows;
+  function rescale() {
+    logs = logp(base), pows = powp(base);
+    if (domain()[0] < 0) {
+      logs = reflect(logs), pows = reflect(pows);
+      transform(transformLogn, transformExpn);
+    } else {
+      transform(transformLog, transformExp);
+    }
+    return scale;
+  }
+  scale.base = function (_) {
+    return arguments.length ? (base = +_, rescale()) : base;
+  };
+  scale.domain = function (_) {
+    return arguments.length ? (domain(_), rescale()) : domain();
+  };
+  scale.ticks = count => {
+    const d = domain();
+    let u = d[0];
+    let v = d[d.length - 1];
+    const r = v < u;
+    if (r) [u, v] = [v, u];
+    let i = logs(u);
+    let j = logs(v);
+    let k;
+    let t;
+    const n = count == null ? 10 : +count;
+    let z = [];
+    if (!(base % 1) && j - i < n) {
+      i = Math.floor(i), j = Math.ceil(j);
+      if (u > 0) for (; i <= j; ++i) {
+        for (k = 1; k < base; ++k) {
+          t = i < 0 ? k / pows(-i) : k * pows(i);
+          if (t < u) continue;
+          if (t > v) break;
+          z.push(t);
+        }
+      } else for (; i <= j; ++i) {
+        for (k = base - 1; k >= 1; --k) {
+          t = i > 0 ? k / pows(-i) : k * pows(i);
+          if (t < u) continue;
+          if (t > v) break;
+          z.push(t);
+        }
+      }
+      if (z.length * 2 < n) z = (0, _index.ticks)(u, v, n);
+    } else {
+      z = (0, _index.ticks)(i, j, Math.min(j - i, n)).map(pows);
+    }
+    return r ? z.reverse() : z;
+  };
+  scale.tickFormat = (count, specifier) => {
+    if (count == null) count = 10;
+    if (specifier == null) specifier = base === 10 ? "s" : ",";
+    if (typeof specifier !== "function") {
+      if (!(base % 1) && (specifier = (0, _index2.formatSpecifier)(specifier)).precision == null) specifier.trim = true;
+      specifier = (0, _index2.format)(specifier);
+    }
+    if (count === Infinity) return specifier;
+    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
+    return d => {
+      let i = d / pows(Math.round(logs(d)));
+      if (i * base < base - 0.5) i *= base;
+      return i <= k ? specifier(d) : "";
+    };
+  };
+  scale.nice = () => {
+    return domain((0, _nice.default)(domain(), {
+      floor: x => pows(Math.floor(logs(x))),
+      ceil: x => pows(Math.ceil(logs(x)))
+    }));
+  };
+  return scale;
+}
+function log() {
+  const scale = loggish((0, _continuous.transformer)()).domain([1, 10]);
+  scale.copy = () => (0, _continuous.copy)(scale, log()).base(scale.base());
+  _init.initRange.apply(scale, arguments);
+  return scale;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/nice.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/nice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/nice.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = nice;
+function nice(domain, interval) {
+  domain = domain.slice();
+  var i0 = 0,
+    i1 = domain.length - 1,
+    x0 = domain[i0],
+    x1 = domain[i1],
+    t;
+  if (x1 < x0) {
+    t = i0, i0 = i1, i1 = t;
+    t = x0, x0 = x1, x1 = t;
+  }
+  domain[i0] = interval.floor(x0);
+  domain[i1] = interval.ceil(x1);
+  return domain;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/number.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/number.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = number;
+function number(x) {
+  return +x;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/ordinal.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/ordinal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/ordinal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = ordinal;
+exports.implicit = void 0;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _init = require("./init.js");
+const implicit = exports.implicit = Symbol("implicit");
+function ordinal() {
+  var index = new _index.InternMap(),
+    domain = [],
+    range = [],
+    unknown = implicit;
+  function scale(d) {
+    let i = index.get(d);
+    if (i === undefined) {
+      if (unknown !== implicit) return unknown;
+      index.set(d, i = domain.push(d) - 1);
+    }
+    return range[i % range.length];
+  }
+  scale.domain = function (_) {
+    if (!arguments.length) return domain.slice();
+    domain = [], index = new _index.InternMap();
+    for (const value of _) {
+      if (index.has(value)) continue;
+      index.set(value, domain.push(value) - 1);
+    }
+    return scale;
+  };
+  scale.range = function (_) {
+    return arguments.length ? (range = Array.from(_), scale) : range.slice();
+  };
+  scale.unknown = function (_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+  scale.copy = function () {
+    return ordinal(domain, range).unknown(unknown);
+  };
+  _init.initRange.apply(scale, arguments);
+  return scale;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/pow.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/pow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/pow.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,44 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = pow;
+exports.powish = powish;
+exports.sqrt = sqrt;
+var _linear = require("./linear.js");
+var _continuous = require("./continuous.js");
+var _init = require("./init.js");
+function transformPow(exponent) {
+  return function (x) {
+    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
+  };
+}
+function transformSqrt(x) {
+  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);
+}
+function transformSquare(x) {
+  return x < 0 ? -x * x : x * x;
+}
+function powish(transform) {
+  var scale = transform(_continuous.identity, _continuous.identity),
+    exponent = 1;
+  function rescale() {
+    return exponent === 1 ? transform(_continuous.identity, _continuous.identity) : exponent === 0.5 ? transform(transformSqrt, transformSquare) : transform(transformPow(exponent), transformPow(1 / exponent));
+  }
+  scale.exponent = function (_) {
+    return arguments.length ? (exponent = +_, rescale()) : exponent;
+  };
+  return (0, _linear.linearish)(scale);
+}
+function pow() {
+  var scale = powish((0, _continuous.transformer)());
+  scale.copy = function () {
+    return (0, _continuous.copy)(scale, pow()).exponent(scale.exponent());
+  };
+  _init.initRange.apply(scale, arguments);
+  return scale;
+}
+function sqrt() {
+  return pow.apply(null, arguments).exponent(0.5);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/quantile.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/quantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/quantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = quantile;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _init = require("./init.js");
+function quantile() {
+  var domain = [],
+    range = [],
+    thresholds = [],
+    unknown;
+  function rescale() {
+    var i = 0,
+      n = Math.max(1, range.length);
+    thresholds = new Array(n - 1);
+    while (++i < n) thresholds[i - 1] = (0, _index.quantileSorted)(domain, i / n);
+    return scale;
+  }
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : range[(0, _index.bisect)(thresholds, x)];
+  }
+  scale.invertExtent = function (y) {
+    var i = range.indexOf(y);
+    return i < 0 ? [NaN, NaN] : [i > 0 ? thresholds[i - 1] : domain[0], i < thresholds.length ? thresholds[i] : domain[domain.length - 1]];
+  };
+  scale.domain = function (_) {
+    if (!arguments.length) return domain.slice();
+    domain = [];
+    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);
+    domain.sort(_index.ascending);
+    return rescale();
+  };
+  scale.range = function (_) {
+    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();
+  };
+  scale.unknown = function (_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+  scale.quantiles = function () {
+    return thresholds.slice();
+  };
+  scale.copy = function () {
+    return quantile().domain(domain).range(range).unknown(unknown);
+  };
+  return _init.initRange.apply(scale, arguments);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/quantize.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/quantize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/quantize.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,46 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = quantize;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _linear = require("./linear.js");
+var _init = require("./init.js");
+function quantize() {
+  var x0 = 0,
+    x1 = 1,
+    n = 1,
+    domain = [0.5],
+    range = [0, 1],
+    unknown;
+  function scale(x) {
+    return x != null && x <= x ? range[(0, _index.bisect)(domain, x, 0, n)] : unknown;
+  }
+  function rescale() {
+    var i = -1;
+    domain = new Array(n);
+    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
+    return scale;
+  }
+  scale.domain = function (_) {
+    return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];
+  };
+  scale.range = function (_) {
+    return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();
+  };
+  scale.invertExtent = function (y) {
+    var i = range.indexOf(y);
+    return i < 0 ? [NaN, NaN] : i < 1 ? [x0, domain[0]] : i >= n ? [domain[n - 1], x1] : [domain[i - 1], domain[i]];
+  };
+  scale.unknown = function (_) {
+    return arguments.length ? (unknown = _, scale) : scale;
+  };
+  scale.thresholds = function () {
+    return domain.slice();
+  };
+  scale.copy = function () {
+    return quantize().domain([x0, x1]).range(range).unknown(unknown);
+  };
+  return _init.initRange.apply((0, _linear.linearish)(scale), arguments);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/radial.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/radial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/radial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,53 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = radial;
+var _continuous = _interopRequireDefault(require("./continuous.js"));
+var _init = require("./init.js");
+var _linear = require("./linear.js");
+var _number = _interopRequireDefault(require("./number.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function square(x) {
+  return Math.sign(x) * x * x;
+}
+function unsquare(x) {
+  return Math.sign(x) * Math.sqrt(Math.abs(x));
+}
+function radial() {
+  var squared = (0, _continuous.default)(),
+    range = [0, 1],
+    round = false,
+    unknown;
+  function scale(x) {
+    var y = unsquare(squared(x));
+    return isNaN(y) ? unknown : round ? Math.round(y) : y;
+  }
+  scale.invert = function (y) {
+    return squared.invert(square(y));
+  };
+  scale.domain = function (_) {
+    return arguments.length ? (squared.domain(_), scale) : squared.domain();
+  };
+  scale.range = function (_) {
+    return arguments.length ? (squared.range((range = Array.from(_, _number.default)).map(square)), scale) : range.slice();
+  };
+  scale.rangeRound = function (_) {
+    return scale.range(_).round(true);
+  };
+  scale.round = function (_) {
+    return arguments.length ? (round = !!_, scale) : round;
+  };
+  scale.clamp = function (_) {
+    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();
+  };
+  scale.unknown = function (_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+  scale.copy = function () {
+    return radial(squared.domain(), range).round(round).clamp(squared.clamp()).unknown(unknown);
+  };
+  _init.initRange.apply(scale, arguments);
+  return (0, _linear.linearish)(scale);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/sequential.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/sequential.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/sequential.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,90 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.copy = copy;
+exports.default = sequential;
+exports.sequentialLog = sequentialLog;
+exports.sequentialPow = sequentialPow;
+exports.sequentialSqrt = sequentialSqrt;
+exports.sequentialSymlog = sequentialSymlog;
+var _index = require("../../../lib-vendor/d3-interpolate/src/index.js");
+var _continuous = require("./continuous.js");
+var _init = require("./init.js");
+var _linear = require("./linear.js");
+var _log = require("./log.js");
+var _symlog = require("./symlog.js");
+var _pow = require("./pow.js");
+function transformer() {
+  var x0 = 0,
+    x1 = 1,
+    t0,
+    t1,
+    k10,
+    transform,
+    interpolator = _continuous.identity,
+    clamp = false,
+    unknown;
+  function scale(x) {
+    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));
+  }
+  scale.domain = function (_) {
+    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];
+  };
+  scale.clamp = function (_) {
+    return arguments.length ? (clamp = !!_, scale) : clamp;
+  };
+  scale.interpolator = function (_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+  function range(interpolate) {
+    return function (_) {
+      var r0, r1;
+      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];
+    };
+  }
+  scale.range = range(_index.interpolate);
+  scale.rangeRound = range(_index.interpolateRound);
+  scale.unknown = function (_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+  return function (t) {
+    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);
+    return scale;
+  };
+}
+function copy(source, target) {
+  return target.domain(source.domain()).interpolator(source.interpolator()).clamp(source.clamp()).unknown(source.unknown());
+}
+function sequential() {
+  var scale = (0, _linear.linearish)(transformer()(_continuous.identity));
+  scale.copy = function () {
+    return copy(scale, sequential());
+  };
+  return _init.initInterpolator.apply(scale, arguments);
+}
+function sequentialLog() {
+  var scale = (0, _log.loggish)(transformer()).domain([1, 10]);
+  scale.copy = function () {
+    return copy(scale, sequentialLog()).base(scale.base());
+  };
+  return _init.initInterpolator.apply(scale, arguments);
+}
+function sequentialSymlog() {
+  var scale = (0, _symlog.symlogish)(transformer());
+  scale.copy = function () {
+    return copy(scale, sequentialSymlog()).constant(scale.constant());
+  };
+  return _init.initInterpolator.apply(scale, arguments);
+}
+function sequentialPow() {
+  var scale = (0, _pow.powish)(transformer());
+  scale.copy = function () {
+    return copy(scale, sequentialPow()).exponent(scale.exponent());
+  };
+  return _init.initInterpolator.apply(scale, arguments);
+}
+function sequentialSqrt() {
+  return sequentialPow.apply(null, arguments).exponent(0.5);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/sequentialQuantile.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/sequentialQuantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/sequentialQuantile.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,38 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = sequentialQuantile;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _continuous = require("./continuous.js");
+var _init = require("./init.js");
+function sequentialQuantile() {
+  var domain = [],
+    interpolator = _continuous.identity;
+  function scale(x) {
+    if (x != null && !isNaN(x = +x)) return interpolator(((0, _index.bisect)(domain, x, 1) - 1) / (domain.length - 1));
+  }
+  scale.domain = function (_) {
+    if (!arguments.length) return domain.slice();
+    domain = [];
+    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);
+    domain.sort(_index.ascending);
+    return scale;
+  };
+  scale.interpolator = function (_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+  scale.range = function () {
+    return domain.map((d, i) => interpolator(i / (domain.length - 1)));
+  };
+  scale.quantiles = function (n) {
+    return Array.from({
+      length: n + 1
+    }, (_, i) => (0, _index.quantile)(domain, i / n));
+  };
+  scale.copy = function () {
+    return sequentialQuantile(interpolator).domain(domain);
+  };
+  return _init.initInterpolator.apply(scale, arguments);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/symlog.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/symlog.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/symlog.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,35 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = symlog;
+exports.symlogish = symlogish;
+var _linear = require("./linear.js");
+var _continuous = require("./continuous.js");
+var _init = require("./init.js");
+function transformSymlog(c) {
+  return function (x) {
+    return Math.sign(x) * Math.log1p(Math.abs(x / c));
+  };
+}
+function transformSymexp(c) {
+  return function (x) {
+    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;
+  };
+}
+function symlogish(transform) {
+  var c = 1,
+    scale = transform(transformSymlog(c), transformSymexp(c));
+  scale.constant = function (_) {
+    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;
+  };
+  return (0, _linear.linearish)(scale);
+}
+function symlog() {
+  var scale = symlogish((0, _continuous.transformer)());
+  scale.copy = function () {
+    return (0, _continuous.copy)(scale, symlog()).constant(scale.constant());
+  };
+  return _init.initRange.apply(scale, arguments);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/threshold.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/threshold.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/threshold.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,34 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = threshold;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _init = require("./init.js");
+function threshold() {
+  var domain = [0.5],
+    range = [0, 1],
+    unknown,
+    n = 1;
+  function scale(x) {
+    return x != null && x <= x ? range[(0, _index.bisect)(domain, x, 0, n)] : unknown;
+  }
+  scale.domain = function (_) {
+    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
+  };
+  scale.range = function (_) {
+    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
+  };
+  scale.invertExtent = function (y) {
+    var i = range.indexOf(y);
+    return [domain[i - 1], domain[i]];
+  };
+  scale.unknown = function (_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+  scale.copy = function () {
+    return threshold().domain(domain).range(range).unknown(unknown);
+  };
+  return _init.initRange.apply(scale, arguments);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/tickFormat.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/tickFormat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/tickFormat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = tickFormat;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _index2 = require("../../../lib-vendor/d3-format/src/index.js");
+function tickFormat(start, stop, count, specifier) {
+  var step = (0, _index.tickStep)(start, stop, count),
+    precision;
+  specifier = (0, _index2.formatSpecifier)(specifier == null ? ",f" : specifier);
+  switch (specifier.type) {
+    case "s":
+      {
+        var value = Math.max(Math.abs(start), Math.abs(stop));
+        if (specifier.precision == null && !isNaN(precision = (0, _index2.precisionPrefix)(step, value))) specifier.precision = precision;
+        return (0, _index2.formatPrefix)(specifier, value);
+      }
+    case "":
+    case "e":
+    case "g":
+    case "p":
+    case "r":
+      {
+        if (specifier.precision == null && !isNaN(precision = (0, _index2.precisionRound)(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
+        break;
+      }
+    case "f":
+    case "%":
+      {
+        if (specifier.precision == null && !isNaN(precision = (0, _index2.precisionFixed)(step))) specifier.precision = precision - (specifier.type === "%") * 2;
+        break;
+      }
+  }
+  return (0, _index2.format)(specifier);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/time.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.calendar = calendar;
+exports.default = time;
+var _index = require("../../../lib-vendor/d3-time/src/index.js");
+var _index2 = require("../../../lib-vendor/d3-time-format/src/index.js");
+var _continuous = _interopRequireWildcard(require("./continuous.js"));
+var _init = require("./init.js");
+var _nice = _interopRequireDefault(require("./nice.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function date(t) {
+  return new Date(t);
+}
+function number(t) {
+  return t instanceof Date ? +t : +new Date(+t);
+}
+function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {
+  var scale = (0, _continuous.default)(),
+    invert = scale.invert,
+    domain = scale.domain;
+  var formatMillisecond = format(".%L"),
+    formatSecond = format(":%S"),
+    formatMinute = format("%I:%M"),
+    formatHour = format("%I %p"),
+    formatDay = format("%a %d"),
+    formatWeek = format("%b %d"),
+    formatMonth = format("%B"),
+    formatYear = format("%Y");
+  function tickFormat(date) {
+    return (second(date) < date ? formatMillisecond : minute(date) < date ? formatSecond : hour(date) < date ? formatMinute : day(date) < date ? formatHour : month(date) < date ? week(date) < date ? formatDay : formatWeek : year(date) < date ? formatMonth : formatYear)(date);
+  }
+  scale.invert = function (y) {
+    return new Date(invert(y));
+  };
+  scale.domain = function (_) {
+    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);
+  };
+  scale.ticks = function (interval) {
+    var d = domain();
+    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);
+  };
+  scale.tickFormat = function (count, specifier) {
+    return specifier == null ? tickFormat : format(specifier);
+  };
+  scale.nice = function (interval) {
+    var d = domain();
+    if (!interval || typeof interval.range !== "function") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);
+    return interval ? domain((0, _nice.default)(d, interval)) : scale;
+  };
+  scale.copy = function () {
+    return (0, _continuous.copy)(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));
+  };
+  return scale;
+}
+function time() {
+  return _init.initRange.apply(calendar(_index.timeTicks, _index.timeTickInterval, _index.timeYear, _index.timeMonth, _index.timeWeek, _index.timeDay, _index.timeHour, _index.timeMinute, _index.timeSecond, _index2.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-scale/src/utcTime.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-scale/src/utcTime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-scale/src/utcTime.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = utcTime;
+var _index = require("../../../lib-vendor/d3-time/src/index.js");
+var _index2 = require("../../../lib-vendor/d3-time-format/src/index.js");
+var _time = require("./time.js");
+var _init = require("./init.js");
+function utcTime() {
+  return _init.initRange.apply((0, _time.calendar)(_index.utcTicks, _index.utcTickInterval, _index.utcYear, _index.utcMonth, _index.utcWeek, _index.utcDay, _index.utcHour, _index.utcMinute, _index.utcSecond, _index2.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/arc.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/arc.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/arc.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,243 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _index = require("../../../lib-vendor/d3-path/src/index.js");
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _math = require("./math.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function arcInnerRadius(d) {
+  return d.innerRadius;
+}
+function arcOuterRadius(d) {
+  return d.outerRadius;
+}
+function arcStartAngle(d) {
+  return d.startAngle;
+}
+function arcEndAngle(d) {
+  return d.endAngle;
+}
+function arcPadAngle(d) {
+  return d && d.padAngle; // Note: optional!
+}
+function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
+  var x10 = x1 - x0,
+    y10 = y1 - y0,
+    x32 = x3 - x2,
+    y32 = y3 - y2,
+    t = y32 * x10 - x32 * y10;
+  if (t * t < _math.epsilon) return;
+  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
+  return [x0 + t * x10, y0 + t * y10];
+}
+
+// Compute perpendicular offset line of length rc.
+// http://mathworld.wolfram.com/Circle-LineIntersection.html
+function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
+  var x01 = x0 - x1,
+    y01 = y0 - y1,
+    lo = (cw ? rc : -rc) / (0, _math.sqrt)(x01 * x01 + y01 * y01),
+    ox = lo * y01,
+    oy = -lo * x01,
+    x11 = x0 + ox,
+    y11 = y0 + oy,
+    x10 = x1 + ox,
+    y10 = y1 + oy,
+    x00 = (x11 + x10) / 2,
+    y00 = (y11 + y10) / 2,
+    dx = x10 - x11,
+    dy = y10 - y11,
+    d2 = dx * dx + dy * dy,
+    r = r1 - rc,
+    D = x11 * y10 - x10 * y11,
+    d = (dy < 0 ? -1 : 1) * (0, _math.sqrt)((0, _math.max)(0, r * r * d2 - D * D)),
+    cx0 = (D * dy - dx * d) / d2,
+    cy0 = (-D * dx - dy * d) / d2,
+    cx1 = (D * dy + dx * d) / d2,
+    cy1 = (-D * dx + dy * d) / d2,
+    dx0 = cx0 - x00,
+    dy0 = cy0 - y00,
+    dx1 = cx1 - x00,
+    dy1 = cy1 - y00;
+
+  // Pick the closer of the two intersection points.
+  // TODO Is there a faster way to determine which intersection to use?
+  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
+  return {
+    cx: cx0,
+    cy: cy0,
+    x01: -ox,
+    y01: -oy,
+    x11: cx0 * (r1 / r - 1),
+    y11: cy0 * (r1 / r - 1)
+  };
+}
+function _default() {
+  var innerRadius = arcInnerRadius,
+    outerRadius = arcOuterRadius,
+    cornerRadius = (0, _constant.default)(0),
+    padRadius = null,
+    startAngle = arcStartAngle,
+    endAngle = arcEndAngle,
+    padAngle = arcPadAngle,
+    context = null;
+  function arc() {
+    var buffer,
+      r,
+      r0 = +innerRadius.apply(this, arguments),
+      r1 = +outerRadius.apply(this, arguments),
+      a0 = startAngle.apply(this, arguments) - _math.halfPi,
+      a1 = endAngle.apply(this, arguments) - _math.halfPi,
+      da = (0, _math.abs)(a1 - a0),
+      cw = a1 > a0;
+    if (!context) context = buffer = (0, _index.path)();
+
+    // Ensure that the outer radius is always larger than the inner radius.
+    if (r1 < r0) r = r1, r1 = r0, r0 = r;
+
+    // Is it a point?
+    if (!(r1 > _math.epsilon)) context.moveTo(0, 0);
+
+    // Or is it a circle or annulus?
+    else if (da > _math.tau - _math.epsilon) {
+      context.moveTo(r1 * (0, _math.cos)(a0), r1 * (0, _math.sin)(a0));
+      context.arc(0, 0, r1, a0, a1, !cw);
+      if (r0 > _math.epsilon) {
+        context.moveTo(r0 * (0, _math.cos)(a1), r0 * (0, _math.sin)(a1));
+        context.arc(0, 0, r0, a1, a0, cw);
+      }
+    }
+
+    // Or is it a circular or annular sector?
+    else {
+      var a01 = a0,
+        a11 = a1,
+        a00 = a0,
+        a10 = a1,
+        da0 = da,
+        da1 = da,
+        ap = padAngle.apply(this, arguments) / 2,
+        rp = ap > _math.epsilon && (padRadius ? +padRadius.apply(this, arguments) : (0, _math.sqrt)(r0 * r0 + r1 * r1)),
+        rc = (0, _math.min)((0, _math.abs)(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
+        rc0 = rc,
+        rc1 = rc,
+        t0,
+        t1;
+
+      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
+      if (rp > _math.epsilon) {
+        var p0 = (0, _math.asin)(rp / r0 * (0, _math.sin)(ap)),
+          p1 = (0, _math.asin)(rp / r1 * (0, _math.sin)(ap));
+        if ((da0 -= p0 * 2) > _math.epsilon) p0 *= cw ? 1 : -1, a00 += p0, a10 -= p0;else da0 = 0, a00 = a10 = (a0 + a1) / 2;
+        if ((da1 -= p1 * 2) > _math.epsilon) p1 *= cw ? 1 : -1, a01 += p1, a11 -= p1;else da1 = 0, a01 = a11 = (a0 + a1) / 2;
+      }
+      var x01 = r1 * (0, _math.cos)(a01),
+        y01 = r1 * (0, _math.sin)(a01),
+        x10 = r0 * (0, _math.cos)(a10),
+        y10 = r0 * (0, _math.sin)(a10);
+
+      // Apply rounded corners?
+      if (rc > _math.epsilon) {
+        var x11 = r1 * (0, _math.cos)(a11),
+          y11 = r1 * (0, _math.sin)(a11),
+          x00 = r0 * (0, _math.cos)(a00),
+          y00 = r0 * (0, _math.sin)(a00),
+          oc;
+
+        // Restrict the corner radius according to the sector angle.
+        if (da < _math.pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {
+          var ax = x01 - oc[0],
+            ay = y01 - oc[1],
+            bx = x11 - oc[0],
+            by = y11 - oc[1],
+            kc = 1 / (0, _math.sin)((0, _math.acos)((ax * bx + ay * by) / ((0, _math.sqrt)(ax * ax + ay * ay) * (0, _math.sqrt)(bx * bx + by * by))) / 2),
+            lc = (0, _math.sqrt)(oc[0] * oc[0] + oc[1] * oc[1]);
+          rc0 = (0, _math.min)(rc, (r0 - lc) / (kc - 1));
+          rc1 = (0, _math.min)(rc, (r1 - lc) / (kc + 1));
+        }
+      }
+
+      // Is the sector collapsed to a line?
+      if (!(da1 > _math.epsilon)) context.moveTo(x01, y01);
+
+      // Does the sector’s outer ring have rounded corners?
+      else if (rc1 > _math.epsilon) {
+        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
+        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
+        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+        // Have the corners merged?
+        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, (0, _math.atan2)(t0.y01, t0.x01), (0, _math.atan2)(t1.y01, t1.x01), !cw);
+
+        // Otherwise, draw the two corners and the ring.
+        else {
+          context.arc(t0.cx, t0.cy, rc1, (0, _math.atan2)(t0.y01, t0.x01), (0, _math.atan2)(t0.y11, t0.x11), !cw);
+          context.arc(0, 0, r1, (0, _math.atan2)(t0.cy + t0.y11, t0.cx + t0.x11), (0, _math.atan2)(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
+          context.arc(t1.cx, t1.cy, rc1, (0, _math.atan2)(t1.y11, t1.x11), (0, _math.atan2)(t1.y01, t1.x01), !cw);
+        }
+      }
+
+      // Or is the outer ring just a circular arc?
+      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
+
+      // Is there no inner ring, and it’s a circular sector?
+      // Or perhaps it’s an annular sector collapsed due to padding?
+      if (!(r0 > _math.epsilon) || !(da0 > _math.epsilon)) context.lineTo(x10, y10);
+
+      // Does the sector’s inner ring (or point) have rounded corners?
+      else if (rc0 > _math.epsilon) {
+        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
+        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
+        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+        // Have the corners merged?
+        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, (0, _math.atan2)(t0.y01, t0.x01), (0, _math.atan2)(t1.y01, t1.x01), !cw);
+
+        // Otherwise, draw the two corners and the ring.
+        else {
+          context.arc(t0.cx, t0.cy, rc0, (0, _math.atan2)(t0.y01, t0.x01), (0, _math.atan2)(t0.y11, t0.x11), !cw);
+          context.arc(0, 0, r0, (0, _math.atan2)(t0.cy + t0.y11, t0.cx + t0.x11), (0, _math.atan2)(t1.cy + t1.y11, t1.cx + t1.x11), cw);
+          context.arc(t1.cx, t1.cy, rc0, (0, _math.atan2)(t1.y11, t1.x11), (0, _math.atan2)(t1.y01, t1.x01), !cw);
+        }
+      }
+
+      // Or is the inner ring just a circular arc?
+      else context.arc(0, 0, r0, a10, a00, cw);
+    }
+    context.closePath();
+    if (buffer) return context = null, buffer + "" || null;
+  }
+  arc.centroid = function () {
+    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
+      a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - _math.pi / 2;
+    return [(0, _math.cos)(a) * r, (0, _math.sin)(a) * r];
+  };
+  arc.innerRadius = function (_) {
+    return arguments.length ? (innerRadius = typeof _ === "function" ? _ : (0, _constant.default)(+_), arc) : innerRadius;
+  };
+  arc.outerRadius = function (_) {
+    return arguments.length ? (outerRadius = typeof _ === "function" ? _ : (0, _constant.default)(+_), arc) : outerRadius;
+  };
+  arc.cornerRadius = function (_) {
+    return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : (0, _constant.default)(+_), arc) : cornerRadius;
+  };
+  arc.padRadius = function (_) {
+    return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : (0, _constant.default)(+_), arc) : padRadius;
+  };
+  arc.startAngle = function (_) {
+    return arguments.length ? (startAngle = typeof _ === "function" ? _ : (0, _constant.default)(+_), arc) : startAngle;
+  };
+  arc.endAngle = function (_) {
+    return arguments.length ? (endAngle = typeof _ === "function" ? _ : (0, _constant.default)(+_), arc) : endAngle;
+  };
+  arc.padAngle = function (_) {
+    return arguments.length ? (padAngle = typeof _ === "function" ? _ : (0, _constant.default)(+_), arc) : padAngle;
+  };
+  arc.context = function (_) {
+    return arguments.length ? (context = _ == null ? null : _, arc) : context;
+  };
+  return arc;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/area.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/area.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/area.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,97 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _index = require("../../../lib-vendor/d3-path/src/index.js");
+var _array = _interopRequireDefault(require("./array.js"));
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _linear = _interopRequireDefault(require("./curve/linear.js"));
+var _line = _interopRequireDefault(require("./line.js"));
+var _point = require("./point.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(x0, y0, y1) {
+  var x1 = null,
+    defined = (0, _constant.default)(true),
+    context = null,
+    curve = _linear.default,
+    output = null;
+  x0 = typeof x0 === "function" ? x0 : x0 === undefined ? _point.x : (0, _constant.default)(+x0);
+  y0 = typeof y0 === "function" ? y0 : y0 === undefined ? (0, _constant.default)(0) : (0, _constant.default)(+y0);
+  y1 = typeof y1 === "function" ? y1 : y1 === undefined ? _point.y : (0, _constant.default)(+y1);
+  function area(data) {
+    var i,
+      j,
+      k,
+      n = (data = (0, _array.default)(data)).length,
+      d,
+      defined0 = false,
+      buffer,
+      x0z = new Array(n),
+      y0z = new Array(n);
+    if (context == null) output = curve(buffer = (0, _index.path)());
+    for (i = 0; i <= n; ++i) {
+      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+        if (defined0 = !defined0) {
+          j = i;
+          output.areaStart();
+          output.lineStart();
+        } else {
+          output.lineEnd();
+          output.lineStart();
+          for (k = i - 1; k >= j; --k) {
+            output.point(x0z[k], y0z[k]);
+          }
+          output.lineEnd();
+          output.areaEnd();
+        }
+      }
+      if (defined0) {
+        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
+        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
+      }
+    }
+    if (buffer) return output = null, buffer + "" || null;
+  }
+  function arealine() {
+    return (0, _line.default)().defined(defined).curve(curve).context(context);
+  }
+  area.x = function (_) {
+    return arguments.length ? (x0 = typeof _ === "function" ? _ : (0, _constant.default)(+_), x1 = null, area) : x0;
+  };
+  area.x0 = function (_) {
+    return arguments.length ? (x0 = typeof _ === "function" ? _ : (0, _constant.default)(+_), area) : x0;
+  };
+  area.x1 = function (_) {
+    return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : (0, _constant.default)(+_), area) : x1;
+  };
+  area.y = function (_) {
+    return arguments.length ? (y0 = typeof _ === "function" ? _ : (0, _constant.default)(+_), y1 = null, area) : y0;
+  };
+  area.y0 = function (_) {
+    return arguments.length ? (y0 = typeof _ === "function" ? _ : (0, _constant.default)(+_), area) : y0;
+  };
+  area.y1 = function (_) {
+    return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : (0, _constant.default)(+_), area) : y1;
+  };
+  area.lineX0 = area.lineY0 = function () {
+    return arealine().x(x0).y(y0);
+  };
+  area.lineY1 = function () {
+    return arealine().x(x0).y(y1);
+  };
+  area.lineX1 = function () {
+    return arealine().x(x1).y(y0);
+  };
+  area.defined = function (_) {
+    return arguments.length ? (defined = typeof _ === "function" ? _ : (0, _constant.default)(!!_), area) : defined;
+  };
+  area.curve = function (_) {
+    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
+  };
+  area.context = function (_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
+  };
+  return area;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/areaRadial.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/areaRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/areaRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _radial = _interopRequireWildcard(require("./curve/radial.js"));
+var _area = _interopRequireDefault(require("./area.js"));
+var _lineRadial = require("./lineRadial.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _default() {
+  var a = (0, _area.default)().curve(_radial.curveRadialLinear),
+    c = a.curve,
+    x0 = a.lineX0,
+    x1 = a.lineX1,
+    y0 = a.lineY0,
+    y1 = a.lineY1;
+  a.angle = a.x, delete a.x;
+  a.startAngle = a.x0, delete a.x0;
+  a.endAngle = a.x1, delete a.x1;
+  a.radius = a.y, delete a.y;
+  a.innerRadius = a.y0, delete a.y0;
+  a.outerRadius = a.y1, delete a.y1;
+  a.lineStartAngle = function () {
+    return (0, _lineRadial.lineRadial)(x0());
+  }, delete a.lineX0;
+  a.lineEndAngle = function () {
+    return (0, _lineRadial.lineRadial)(x1());
+  }, delete a.lineX1;
+  a.lineInnerRadius = function () {
+    return (0, _lineRadial.lineRadial)(y0());
+  }, delete a.lineY0;
+  a.lineOuterRadius = function () {
+    return (0, _lineRadial.lineRadial)(y1());
+  }, delete a.lineY1;
+  a.curve = function (_) {
+    return arguments.length ? c((0, _radial.default)(_)) : c()._curve;
+  };
+  return a;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/array.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.slice = void 0;
+var slice = exports.slice = Array.prototype.slice;
+function _default(x) {
+  return typeof x === "object" && "length" in x ? x // Array, TypedArray, NodeList, array-like
+  : Array.from(x); // Map, Set, iterable, string, or anything else
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/constant.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(x) {
+  return function constant() {
+    return x;
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/basis.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/basis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/basis.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Basis = Basis;
+exports.default = _default;
+exports.point = point;
+function point(that, x, y) {
+  that._context.bezierCurveTo((2 * that._x0 + that._x1) / 3, (2 * that._y0 + that._y1) / 3, (that._x0 + 2 * that._x1) / 3, (that._y0 + 2 * that._y1) / 3, (that._x0 + 4 * that._x1 + x) / 6, (that._y0 + 4 * that._y1 + y) / 6);
+}
+function Basis(context) {
+  this._context = context;
+}
+Basis.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._x0 = this._x1 = this._y0 = this._y1 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function () {
+    switch (this._point) {
+      case 3:
+        point(this, this._x1, this._y1);
+      // falls through
+      case 2:
+        this._context.lineTo(this._x1, this._y1);
+        break;
+    }
+    if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);
+        break;
+      case 1:
+        this._point = 2;
+        break;
+      case 2:
+        this._point = 3;
+        this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6);
+      // falls through
+      default:
+        point(this, x, y);
+        break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+function _default(context) {
+  return new Basis(context);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/basisClosed.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/basisClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/basisClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,70 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _noop = _interopRequireDefault(require("../noop.js"));
+var _basis = require("./basis.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function BasisClosed(context) {
+  this._context = context;
+}
+BasisClosed.prototype = {
+  areaStart: _noop.default,
+  areaEnd: _noop.default,
+  lineStart: function () {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function () {
+    switch (this._point) {
+      case 1:
+        {
+          this._context.moveTo(this._x2, this._y2);
+          this._context.closePath();
+          break;
+        }
+      case 2:
+        {
+          this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
+          this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
+          this._context.closePath();
+          break;
+        }
+      case 3:
+        {
+          this.point(this._x2, this._y2);
+          this.point(this._x3, this._y3);
+          this.point(this._x4, this._y4);
+          break;
+        }
+    }
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        this._x2 = x, this._y2 = y;
+        break;
+      case 1:
+        this._point = 2;
+        this._x3 = x, this._y3 = y;
+        break;
+      case 2:
+        this._point = 3;
+        this._x4 = x, this._y4 = y;
+        this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6);
+        break;
+      default:
+        (0, _basis.point)(this, x, y);
+        break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+function _default(context) {
+  return new BasisClosed(context);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/basisOpen.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/basisOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/basisOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,54 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _basis = require("./basis.js");
+function BasisOpen(context) {
+  this._context = context;
+}
+BasisOpen.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._x0 = this._x1 = this._y0 = this._y1 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function () {
+    if (this._line || this._line !== 0 && this._point === 3) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        break;
+      case 1:
+        this._point = 2;
+        break;
+      case 2:
+        this._point = 3;
+        var x0 = (this._x0 + 4 * this._x1 + x) / 6,
+          y0 = (this._y0 + 4 * this._y1 + y) / 6;
+        this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0);
+        break;
+      case 3:
+        this._point = 4;
+      // falls through
+      default:
+        (0, _basis.point)(this, x, y);
+        break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+function _default(context) {
+  return new BasisOpen(context);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/bump.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/bump.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/bump.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,80 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.bumpRadial = bumpRadial;
+exports.bumpX = bumpX;
+exports.bumpY = bumpY;
+var _pointRadial = _interopRequireDefault(require("../pointRadial.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+class Bump {
+  constructor(context, x) {
+    this._context = context;
+    this._x = x;
+  }
+  areaStart() {
+    this._line = 0;
+  }
+  areaEnd() {
+    this._line = NaN;
+  }
+  lineStart() {
+    this._point = 0;
+  }
+  lineEnd() {
+    if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
+    this._line = 1 - this._line;
+  }
+  point(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0:
+        {
+          this._point = 1;
+          if (this._line) this._context.lineTo(x, y);else this._context.moveTo(x, y);
+          break;
+        }
+      case 1:
+        this._point = 2;
+      // falls through
+      default:
+        {
+          if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);
+          break;
+        }
+    }
+    this._x0 = x, this._y0 = y;
+  }
+}
+class BumpRadial {
+  constructor(context) {
+    this._context = context;
+  }
+  lineStart() {
+    this._point = 0;
+  }
+  lineEnd() {}
+  point(x, y) {
+    x = +x, y = +y;
+    if (this._point++ === 0) {
+      this._x0 = x, this._y0 = y;
+    } else {
+      const p0 = (0, _pointRadial.default)(this._x0, this._y0);
+      const p1 = (0, _pointRadial.default)(this._x0, this._y0 = (this._y0 + y) / 2);
+      const p2 = (0, _pointRadial.default)(x, this._y0);
+      const p3 = (0, _pointRadial.default)(x, y);
+      this._context.moveTo(...p0);
+      this._context.bezierCurveTo(...p1, ...p2, ...p3);
+    }
+  }
+}
+function bumpX(context) {
+  return new Bump(context, true);
+}
+function bumpY(context) {
+  return new Bump(context, false);
+}
+function bumpRadial(context) {
+  return new BumpRadial(context);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/bundle.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/bundle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/bundle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _basis = require("./basis.js");
+function Bundle(context, beta) {
+  this._basis = new _basis.Basis(context);
+  this._beta = beta;
+}
+Bundle.prototype = {
+  lineStart: function () {
+    this._x = [];
+    this._y = [];
+    this._basis.lineStart();
+  },
+  lineEnd: function () {
+    var x = this._x,
+      y = this._y,
+      j = x.length - 1;
+    if (j > 0) {
+      var x0 = x[0],
+        y0 = y[0],
+        dx = x[j] - x0,
+        dy = y[j] - y0,
+        i = -1,
+        t;
+      while (++i <= j) {
+        t = i / j;
+        this._basis.point(this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), this._beta * y[i] + (1 - this._beta) * (y0 + t * dy));
+      }
+    }
+    this._x = this._y = null;
+    this._basis.lineEnd();
+  },
+  point: function (x, y) {
+    this._x.push(+x);
+    this._y.push(+y);
+  }
+};
+var _default = exports.default = function custom(beta) {
+  function bundle(context) {
+    return beta === 1 ? new _basis.Basis(context) : new Bundle(context, beta);
+  }
+  bundle.beta = function (beta) {
+    return custom(+beta);
+  };
+  return bundle;
+}(0.85);
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/cardinal.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/cardinal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/cardinal.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Cardinal = Cardinal;
+exports.default = void 0;
+exports.point = point;
+function point(that, x, y) {
+  that._context.bezierCurveTo(that._x1 + that._k * (that._x2 - that._x0), that._y1 + that._k * (that._y2 - that._y0), that._x2 + that._k * (that._x1 - x), that._y2 + that._k * (that._y1 - y), that._x2, that._y2);
+}
+function Cardinal(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+Cardinal.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function () {
+    switch (this._point) {
+      case 2:
+        this._context.lineTo(this._x2, this._y2);
+        break;
+      case 3:
+        point(this, this._x1, this._y1);
+        break;
+    }
+    if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);
+        break;
+      case 1:
+        this._point = 2;
+        this._x1 = x, this._y1 = y;
+        break;
+      case 2:
+        this._point = 3;
+      // falls through
+      default:
+        point(this, x, y);
+        break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+var _default = exports.default = function custom(tension) {
+  function cardinal(context) {
+    return new Cardinal(context, tension);
+  }
+  cardinal.tension = function (tension) {
+    return custom(+tension);
+  };
+  return cardinal;
+}(0);
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/cardinalClosed.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/cardinalClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/cardinalClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,76 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CardinalClosed = CardinalClosed;
+exports.default = void 0;
+var _noop = _interopRequireDefault(require("../noop.js"));
+var _cardinal = require("./cardinal.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function CardinalClosed(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+CardinalClosed.prototype = {
+  areaStart: _noop.default,
+  areaEnd: _noop.default,
+  lineStart: function () {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function () {
+    switch (this._point) {
+      case 1:
+        {
+          this._context.moveTo(this._x3, this._y3);
+          this._context.closePath();
+          break;
+        }
+      case 2:
+        {
+          this._context.lineTo(this._x3, this._y3);
+          this._context.closePath();
+          break;
+        }
+      case 3:
+        {
+          this.point(this._x3, this._y3);
+          this.point(this._x4, this._y4);
+          this.point(this._x5, this._y5);
+          break;
+        }
+    }
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        this._x3 = x, this._y3 = y;
+        break;
+      case 1:
+        this._point = 2;
+        this._context.moveTo(this._x4 = x, this._y4 = y);
+        break;
+      case 2:
+        this._point = 3;
+        this._x5 = x, this._y5 = y;
+        break;
+      default:
+        (0, _cardinal.point)(this, x, y);
+        break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+var _default = exports.default = function custom(tension) {
+  function cardinal(context) {
+    return new CardinalClosed(context, tension);
+  }
+  cardinal.tension = function (tension) {
+    return custom(+tension);
+  };
+  return cardinal;
+}(0);
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/cardinalOpen.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/cardinalOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/cardinalOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CardinalOpen = CardinalOpen;
+exports.default = void 0;
+var _cardinal = require("./cardinal.js");
+function CardinalOpen(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+CardinalOpen.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function () {
+    if (this._line || this._line !== 0 && this._point === 3) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        break;
+      case 1:
+        this._point = 2;
+        break;
+      case 2:
+        this._point = 3;
+        this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2);
+        break;
+      case 3:
+        this._point = 4;
+      // falls through
+      default:
+        (0, _cardinal.point)(this, x, y);
+        break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+var _default = exports.default = function custom(tension) {
+  function cardinal(context) {
+    return new CardinalOpen(context, tension);
+  }
+  cardinal.tension = function (tension) {
+    return custom(+tension);
+  };
+  return cardinal;
+}(0);
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/catmullRom.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/catmullRom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/catmullRom.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,92 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+exports.point = point;
+var _math = require("../math.js");
+var _cardinal = require("./cardinal.js");
+function point(that, x, y) {
+  var x1 = that._x1,
+    y1 = that._y1,
+    x2 = that._x2,
+    y2 = that._y2;
+  if (that._l01_a > _math.epsilon) {
+    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
+      n = 3 * that._l01_a * (that._l01_a + that._l12_a);
+    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
+    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
+  }
+  if (that._l23_a > _math.epsilon) {
+    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
+      m = 3 * that._l23_a * (that._l23_a + that._l12_a);
+    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
+    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
+  }
+  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
+}
+function CatmullRom(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+CatmullRom.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;
+    this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;
+  },
+  lineEnd: function () {
+    switch (this._point) {
+      case 2:
+        this._context.lineTo(this._x2, this._y2);
+        break;
+      case 3:
+        this.point(this._x2, this._y2);
+        break;
+    }
+    if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    if (this._point) {
+      var x23 = this._x2 - x,
+        y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);
+        break;
+      case 1:
+        this._point = 2;
+        break;
+      case 2:
+        this._point = 3;
+      // falls through
+      default:
+        point(this, x, y);
+        break;
+    }
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+var _default = exports.default = function custom(alpha) {
+  function catmullRom(context) {
+    return alpha ? new CatmullRom(context, alpha) : new _cardinal.Cardinal(context, 0);
+  }
+  catmullRom.alpha = function (alpha) {
+    return custom(+alpha);
+  };
+  return catmullRom;
+}(0.5);
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/catmullRomClosed.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/catmullRomClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/catmullRomClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,83 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _cardinalClosed = require("./cardinalClosed.js");
+var _noop = _interopRequireDefault(require("../noop.js"));
+var _catmullRom = require("./catmullRom.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function CatmullRomClosed(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+CatmullRomClosed.prototype = {
+  areaStart: _noop.default,
+  areaEnd: _noop.default,
+  lineStart: function () {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+    this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;
+  },
+  lineEnd: function () {
+    switch (this._point) {
+      case 1:
+        {
+          this._context.moveTo(this._x3, this._y3);
+          this._context.closePath();
+          break;
+        }
+      case 2:
+        {
+          this._context.lineTo(this._x3, this._y3);
+          this._context.closePath();
+          break;
+        }
+      case 3:
+        {
+          this.point(this._x3, this._y3);
+          this.point(this._x4, this._y4);
+          this.point(this._x5, this._y5);
+          break;
+        }
+    }
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    if (this._point) {
+      var x23 = this._x2 - x,
+        y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        this._x3 = x, this._y3 = y;
+        break;
+      case 1:
+        this._point = 2;
+        this._context.moveTo(this._x4 = x, this._y4 = y);
+        break;
+      case 2:
+        this._point = 3;
+        this._x5 = x, this._y5 = y;
+        break;
+      default:
+        (0, _catmullRom.point)(this, x, y);
+        break;
+    }
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+var _default = exports.default = function custom(alpha) {
+  function catmullRom(context) {
+    return alpha ? new CatmullRomClosed(context, alpha) : new _cardinalClosed.CardinalClosed(context, 0);
+  }
+  catmullRom.alpha = function (alpha) {
+    return custom(+alpha);
+  };
+  return catmullRom;
+}(0.5);
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/catmullRomOpen.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/catmullRomOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/catmullRomOpen.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _cardinalOpen = require("./cardinalOpen.js");
+var _catmullRom = require("./catmullRom.js");
+function CatmullRomOpen(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+CatmullRomOpen.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN;
+    this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0;
+  },
+  lineEnd: function () {
+    if (this._line || this._line !== 0 && this._point === 3) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    if (this._point) {
+      var x23 = this._x2 - x,
+        y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        break;
+      case 1:
+        this._point = 2;
+        break;
+      case 2:
+        this._point = 3;
+        this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2);
+        break;
+      case 3:
+        this._point = 4;
+      // falls through
+      default:
+        (0, _catmullRom.point)(this, x, y);
+        break;
+    }
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+var _default = exports.default = function custom(alpha) {
+  function catmullRom(context) {
+    return alpha ? new CatmullRomOpen(context, alpha) : new _cardinalOpen.CardinalOpen(context, 0);
+  }
+  catmullRom.alpha = function (alpha) {
+    return custom(+alpha);
+  };
+  return catmullRom;
+}(0.5);
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/linear.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/linear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,42 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function Linear(context) {
+  this._context = context;
+}
+Linear.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._point = 0;
+  },
+  lineEnd: function () {
+    if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);
+        break;
+      case 1:
+        this._point = 2;
+      // falls through
+      default:
+        this._context.lineTo(x, y);
+        break;
+    }
+  }
+};
+function _default(context) {
+  return new Linear(context);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/linearClosed.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/linearClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/linearClosed.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _noop = _interopRequireDefault(require("../noop.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function LinearClosed(context) {
+  this._context = context;
+}
+LinearClosed.prototype = {
+  areaStart: _noop.default,
+  areaEnd: _noop.default,
+  lineStart: function () {
+    this._point = 0;
+  },
+  lineEnd: function () {
+    if (this._point) this._context.closePath();
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    if (this._point) this._context.lineTo(x, y);else this._point = 1, this._context.moveTo(x, y);
+  }
+};
+function _default(context) {
+  return new LinearClosed(context);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/monotone.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/monotone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/monotone.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,121 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.monotoneX = monotoneX;
+exports.monotoneY = monotoneY;
+function sign(x) {
+  return x < 0 ? -1 : 1;
+}
+
+// Calculate the slopes of the tangents (Hermite-type interpolation) based on
+// the following paper: Steffen, M. 1990. A Simple Method for Monotonic
+// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
+// NOV(II), P. 443, 1990.
+function slope3(that, x2, y2) {
+  var h0 = that._x1 - that._x0,
+    h1 = x2 - that._x1,
+    s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
+    s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
+    p = (s0 * h1 + s1 * h0) / (h0 + h1);
+  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
+}
+
+// Calculate a one-sided slope.
+function slope2(that, t) {
+  var h = that._x1 - that._x0;
+  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
+}
+
+// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
+// "you can express cubic Hermite interpolation in terms of cubic Bézier curves
+// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
+function point(that, t0, t1) {
+  var x0 = that._x0,
+    y0 = that._y0,
+    x1 = that._x1,
+    y1 = that._y1,
+    dx = (x1 - x0) / 3;
+  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
+}
+function MonotoneX(context) {
+  this._context = context;
+}
+MonotoneX.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._x0 = this._x1 = this._y0 = this._y1 = this._t0 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function () {
+    switch (this._point) {
+      case 2:
+        this._context.lineTo(this._x1, this._y1);
+        break;
+      case 3:
+        point(this, this._t0, slope2(this, this._t0));
+        break;
+    }
+    if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function (x, y) {
+    var t1 = NaN;
+    x = +x, y = +y;
+    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);
+        break;
+      case 1:
+        this._point = 2;
+        break;
+      case 2:
+        this._point = 3;
+        point(this, slope2(this, t1 = slope3(this, x, y)), t1);
+        break;
+      default:
+        point(this, this._t0, t1 = slope3(this, x, y));
+        break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+    this._t0 = t1;
+  }
+};
+function MonotoneY(context) {
+  this._context = new ReflectContext(context);
+}
+(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function (x, y) {
+  MonotoneX.prototype.point.call(this, y, x);
+};
+function ReflectContext(context) {
+  this._context = context;
+}
+ReflectContext.prototype = {
+  moveTo: function (x, y) {
+    this._context.moveTo(y, x);
+  },
+  closePath: function () {
+    this._context.closePath();
+  },
+  lineTo: function (x, y) {
+    this._context.lineTo(y, x);
+  },
+  bezierCurveTo: function (x1, y1, x2, y2, x, y) {
+    this._context.bezierCurveTo(y1, x1, y2, x2, y, x);
+  }
+};
+function monotoneX(context) {
+  return new MonotoneX(context);
+}
+function monotoneY(context) {
+  return new MonotoneY(context);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/natural.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/natural.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/natural.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,67 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function Natural(context) {
+  this._context = context;
+}
+Natural.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._x = [];
+    this._y = [];
+  },
+  lineEnd: function () {
+    var x = this._x,
+      y = this._y,
+      n = x.length;
+    if (n) {
+      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
+      if (n === 2) {
+        this._context.lineTo(x[1], y[1]);
+      } else {
+        var px = controlPoints(x),
+          py = controlPoints(y);
+        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
+          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
+        }
+      }
+    }
+    if (this._line || this._line !== 0 && n === 1) this._context.closePath();
+    this._line = 1 - this._line;
+    this._x = this._y = null;
+  },
+  point: function (x, y) {
+    this._x.push(+x);
+    this._y.push(+y);
+  }
+};
+
+// See https://www.particleincell.com/2012/bezier-splines/ for derivation.
+function controlPoints(x) {
+  var i,
+    n = x.length - 1,
+    m,
+    a = new Array(n),
+    b = new Array(n),
+    r = new Array(n);
+  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
+  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
+  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
+  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
+  a[n - 1] = r[n - 1] / b[n - 1];
+  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
+  b[n - 1] = (x[n] + a[n - 1]) / 2;
+  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
+  return [a, b];
+}
+function _default(context) {
+  return new Natural(context);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/radial.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/radial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/radial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,37 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.curveRadialLinear = void 0;
+exports.default = curveRadial;
+var _linear = _interopRequireDefault(require("./linear.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var curveRadialLinear = exports.curveRadialLinear = curveRadial(_linear.default);
+function Radial(curve) {
+  this._curve = curve;
+}
+Radial.prototype = {
+  areaStart: function () {
+    this._curve.areaStart();
+  },
+  areaEnd: function () {
+    this._curve.areaEnd();
+  },
+  lineStart: function () {
+    this._curve.lineStart();
+  },
+  lineEnd: function () {
+    this._curve.lineEnd();
+  },
+  point: function (a, r) {
+    this._curve.point(r * Math.sin(a), r * -Math.cos(a));
+  }
+};
+function curveRadial(curve) {
+  function radial(context) {
+    return new Radial(curve(context));
+  }
+  radial._curve = curve;
+  return radial;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/step.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/step.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/curve/step.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,63 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.stepAfter = stepAfter;
+exports.stepBefore = stepBefore;
+function Step(context, t) {
+  this._context = context;
+  this._t = t;
+}
+Step.prototype = {
+  areaStart: function () {
+    this._line = 0;
+  },
+  areaEnd: function () {
+    this._line = NaN;
+  },
+  lineStart: function () {
+    this._x = this._y = NaN;
+    this._point = 0;
+  },
+  lineEnd: function () {
+    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
+    if (this._line || this._line !== 0 && this._point === 1) this._context.closePath();
+    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
+  },
+  point: function (x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0:
+        this._point = 1;
+        this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);
+        break;
+      case 1:
+        this._point = 2;
+      // falls through
+      default:
+        {
+          if (this._t <= 0) {
+            this._context.lineTo(this._x, y);
+            this._context.lineTo(x, y);
+          } else {
+            var x1 = this._x * (1 - this._t) + x * this._t;
+            this._context.lineTo(x1, this._y);
+            this._context.lineTo(x1, y);
+          }
+          break;
+        }
+    }
+    this._x = x, this._y = y;
+  }
+};
+function _default(context) {
+  return new Step(context, 0.5);
+}
+function stepBefore(context) {
+  return new Step(context, 0);
+}
+function stepAfter(context) {
+  return new Step(context, 1);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/descending.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(a, b) {
+  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/identity.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/identity.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(d) {
+  return d;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,430 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "arc", {
+  enumerable: true,
+  get: function () {
+    return _arc.default;
+  }
+});
+Object.defineProperty(exports, "area", {
+  enumerable: true,
+  get: function () {
+    return _area.default;
+  }
+});
+Object.defineProperty(exports, "areaRadial", {
+  enumerable: true,
+  get: function () {
+    return _areaRadial.default;
+  }
+});
+Object.defineProperty(exports, "curveBasis", {
+  enumerable: true,
+  get: function () {
+    return _basis.default;
+  }
+});
+Object.defineProperty(exports, "curveBasisClosed", {
+  enumerable: true,
+  get: function () {
+    return _basisClosed.default;
+  }
+});
+Object.defineProperty(exports, "curveBasisOpen", {
+  enumerable: true,
+  get: function () {
+    return _basisOpen.default;
+  }
+});
+Object.defineProperty(exports, "curveBumpX", {
+  enumerable: true,
+  get: function () {
+    return _bump.bumpX;
+  }
+});
+Object.defineProperty(exports, "curveBumpY", {
+  enumerable: true,
+  get: function () {
+    return _bump.bumpY;
+  }
+});
+Object.defineProperty(exports, "curveBundle", {
+  enumerable: true,
+  get: function () {
+    return _bundle.default;
+  }
+});
+Object.defineProperty(exports, "curveCardinal", {
+  enumerable: true,
+  get: function () {
+    return _cardinal.default;
+  }
+});
+Object.defineProperty(exports, "curveCardinalClosed", {
+  enumerable: true,
+  get: function () {
+    return _cardinalClosed.default;
+  }
+});
+Object.defineProperty(exports, "curveCardinalOpen", {
+  enumerable: true,
+  get: function () {
+    return _cardinalOpen.default;
+  }
+});
+Object.defineProperty(exports, "curveCatmullRom", {
+  enumerable: true,
+  get: function () {
+    return _catmullRom.default;
+  }
+});
+Object.defineProperty(exports, "curveCatmullRomClosed", {
+  enumerable: true,
+  get: function () {
+    return _catmullRomClosed.default;
+  }
+});
+Object.defineProperty(exports, "curveCatmullRomOpen", {
+  enumerable: true,
+  get: function () {
+    return _catmullRomOpen.default;
+  }
+});
+Object.defineProperty(exports, "curveLinear", {
+  enumerable: true,
+  get: function () {
+    return _linear.default;
+  }
+});
+Object.defineProperty(exports, "curveLinearClosed", {
+  enumerable: true,
+  get: function () {
+    return _linearClosed.default;
+  }
+});
+Object.defineProperty(exports, "curveMonotoneX", {
+  enumerable: true,
+  get: function () {
+    return _monotone.monotoneX;
+  }
+});
+Object.defineProperty(exports, "curveMonotoneY", {
+  enumerable: true,
+  get: function () {
+    return _monotone.monotoneY;
+  }
+});
+Object.defineProperty(exports, "curveNatural", {
+  enumerable: true,
+  get: function () {
+    return _natural.default;
+  }
+});
+Object.defineProperty(exports, "curveStep", {
+  enumerable: true,
+  get: function () {
+    return _step.default;
+  }
+});
+Object.defineProperty(exports, "curveStepAfter", {
+  enumerable: true,
+  get: function () {
+    return _step.stepAfter;
+  }
+});
+Object.defineProperty(exports, "curveStepBefore", {
+  enumerable: true,
+  get: function () {
+    return _step.stepBefore;
+  }
+});
+Object.defineProperty(exports, "line", {
+  enumerable: true,
+  get: function () {
+    return _line.default;
+  }
+});
+Object.defineProperty(exports, "lineRadial", {
+  enumerable: true,
+  get: function () {
+    return _lineRadial.default;
+  }
+});
+Object.defineProperty(exports, "link", {
+  enumerable: true,
+  get: function () {
+    return _link.link;
+  }
+});
+Object.defineProperty(exports, "linkHorizontal", {
+  enumerable: true,
+  get: function () {
+    return _link.linkHorizontal;
+  }
+});
+Object.defineProperty(exports, "linkRadial", {
+  enumerable: true,
+  get: function () {
+    return _link.linkRadial;
+  }
+});
+Object.defineProperty(exports, "linkVertical", {
+  enumerable: true,
+  get: function () {
+    return _link.linkVertical;
+  }
+});
+Object.defineProperty(exports, "pie", {
+  enumerable: true,
+  get: function () {
+    return _pie.default;
+  }
+});
+Object.defineProperty(exports, "pointRadial", {
+  enumerable: true,
+  get: function () {
+    return _pointRadial.default;
+  }
+});
+Object.defineProperty(exports, "radialArea", {
+  enumerable: true,
+  get: function () {
+    return _areaRadial.default;
+  }
+});
+Object.defineProperty(exports, "radialLine", {
+  enumerable: true,
+  get: function () {
+    return _lineRadial.default;
+  }
+});
+Object.defineProperty(exports, "stack", {
+  enumerable: true,
+  get: function () {
+    return _stack.default;
+  }
+});
+Object.defineProperty(exports, "stackOffsetDiverging", {
+  enumerable: true,
+  get: function () {
+    return _diverging.default;
+  }
+});
+Object.defineProperty(exports, "stackOffsetExpand", {
+  enumerable: true,
+  get: function () {
+    return _expand.default;
+  }
+});
+Object.defineProperty(exports, "stackOffsetNone", {
+  enumerable: true,
+  get: function () {
+    return _none.default;
+  }
+});
+Object.defineProperty(exports, "stackOffsetSilhouette", {
+  enumerable: true,
+  get: function () {
+    return _silhouette.default;
+  }
+});
+Object.defineProperty(exports, "stackOffsetWiggle", {
+  enumerable: true,
+  get: function () {
+    return _wiggle.default;
+  }
+});
+Object.defineProperty(exports, "stackOrderAppearance", {
+  enumerable: true,
+  get: function () {
+    return _appearance.default;
+  }
+});
+Object.defineProperty(exports, "stackOrderAscending", {
+  enumerable: true,
+  get: function () {
+    return _ascending.default;
+  }
+});
+Object.defineProperty(exports, "stackOrderDescending", {
+  enumerable: true,
+  get: function () {
+    return _descending.default;
+  }
+});
+Object.defineProperty(exports, "stackOrderInsideOut", {
+  enumerable: true,
+  get: function () {
+    return _insideOut.default;
+  }
+});
+Object.defineProperty(exports, "stackOrderNone", {
+  enumerable: true,
+  get: function () {
+    return _none2.default;
+  }
+});
+Object.defineProperty(exports, "stackOrderReverse", {
+  enumerable: true,
+  get: function () {
+    return _reverse.default;
+  }
+});
+Object.defineProperty(exports, "symbol", {
+  enumerable: true,
+  get: function () {
+    return _symbol.default;
+  }
+});
+Object.defineProperty(exports, "symbolAsterisk", {
+  enumerable: true,
+  get: function () {
+    return _asterisk.default;
+  }
+});
+Object.defineProperty(exports, "symbolCircle", {
+  enumerable: true,
+  get: function () {
+    return _circle.default;
+  }
+});
+Object.defineProperty(exports, "symbolCross", {
+  enumerable: true,
+  get: function () {
+    return _cross.default;
+  }
+});
+Object.defineProperty(exports, "symbolDiamond", {
+  enumerable: true,
+  get: function () {
+    return _diamond.default;
+  }
+});
+Object.defineProperty(exports, "symbolDiamond2", {
+  enumerable: true,
+  get: function () {
+    return _diamond2.default;
+  }
+});
+Object.defineProperty(exports, "symbolPlus", {
+  enumerable: true,
+  get: function () {
+    return _plus.default;
+  }
+});
+Object.defineProperty(exports, "symbolSquare", {
+  enumerable: true,
+  get: function () {
+    return _square.default;
+  }
+});
+Object.defineProperty(exports, "symbolSquare2", {
+  enumerable: true,
+  get: function () {
+    return _square2.default;
+  }
+});
+Object.defineProperty(exports, "symbolStar", {
+  enumerable: true,
+  get: function () {
+    return _star.default;
+  }
+});
+Object.defineProperty(exports, "symbolTriangle", {
+  enumerable: true,
+  get: function () {
+    return _triangle.default;
+  }
+});
+Object.defineProperty(exports, "symbolTriangle2", {
+  enumerable: true,
+  get: function () {
+    return _triangle2.default;
+  }
+});
+Object.defineProperty(exports, "symbolWye", {
+  enumerable: true,
+  get: function () {
+    return _wye.default;
+  }
+});
+Object.defineProperty(exports, "symbolX", {
+  enumerable: true,
+  get: function () {
+    return _x.default;
+  }
+});
+Object.defineProperty(exports, "symbols", {
+  enumerable: true,
+  get: function () {
+    return _symbol.symbolsFill;
+  }
+});
+Object.defineProperty(exports, "symbolsFill", {
+  enumerable: true,
+  get: function () {
+    return _symbol.symbolsFill;
+  }
+});
+Object.defineProperty(exports, "symbolsStroke", {
+  enumerable: true,
+  get: function () {
+    return _symbol.symbolsStroke;
+  }
+});
+var _arc = _interopRequireDefault(require("./arc.js"));
+var _area = _interopRequireDefault(require("./area.js"));
+var _line = _interopRequireDefault(require("./line.js"));
+var _pie = _interopRequireDefault(require("./pie.js"));
+var _areaRadial = _interopRequireDefault(require("./areaRadial.js"));
+var _lineRadial = _interopRequireDefault(require("./lineRadial.js"));
+var _pointRadial = _interopRequireDefault(require("./pointRadial.js"));
+var _link = require("./link.js");
+var _symbol = _interopRequireWildcard(require("./symbol.js"));
+var _asterisk = _interopRequireDefault(require("./symbol/asterisk.js"));
+var _circle = _interopRequireDefault(require("./symbol/circle.js"));
+var _cross = _interopRequireDefault(require("./symbol/cross.js"));
+var _diamond = _interopRequireDefault(require("./symbol/diamond.js"));
+var _diamond2 = _interopRequireDefault(require("./symbol/diamond2.js"));
+var _plus = _interopRequireDefault(require("./symbol/plus.js"));
+var _square = _interopRequireDefault(require("./symbol/square.js"));
+var _square2 = _interopRequireDefault(require("./symbol/square2.js"));
+var _star = _interopRequireDefault(require("./symbol/star.js"));
+var _triangle = _interopRequireDefault(require("./symbol/triangle.js"));
+var _triangle2 = _interopRequireDefault(require("./symbol/triangle2.js"));
+var _wye = _interopRequireDefault(require("./symbol/wye.js"));
+var _x = _interopRequireDefault(require("./symbol/x.js"));
+var _basisClosed = _interopRequireDefault(require("./curve/basisClosed.js"));
+var _basisOpen = _interopRequireDefault(require("./curve/basisOpen.js"));
+var _basis = _interopRequireDefault(require("./curve/basis.js"));
+var _bump = require("./curve/bump.js");
+var _bundle = _interopRequireDefault(require("./curve/bundle.js"));
+var _cardinalClosed = _interopRequireDefault(require("./curve/cardinalClosed.js"));
+var _cardinalOpen = _interopRequireDefault(require("./curve/cardinalOpen.js"));
+var _cardinal = _interopRequireDefault(require("./curve/cardinal.js"));
+var _catmullRomClosed = _interopRequireDefault(require("./curve/catmullRomClosed.js"));
+var _catmullRomOpen = _interopRequireDefault(require("./curve/catmullRomOpen.js"));
+var _catmullRom = _interopRequireDefault(require("./curve/catmullRom.js"));
+var _linearClosed = _interopRequireDefault(require("./curve/linearClosed.js"));
+var _linear = _interopRequireDefault(require("./curve/linear.js"));
+var _monotone = require("./curve/monotone.js");
+var _natural = _interopRequireDefault(require("./curve/natural.js"));
+var _step = _interopRequireWildcard(require("./curve/step.js"));
+var _stack = _interopRequireDefault(require("./stack.js"));
+var _expand = _interopRequireDefault(require("./offset/expand.js"));
+var _diverging = _interopRequireDefault(require("./offset/diverging.js"));
+var _none = _interopRequireDefault(require("./offset/none.js"));
+var _silhouette = _interopRequireDefault(require("./offset/silhouette.js"));
+var _wiggle = _interopRequireDefault(require("./offset/wiggle.js"));
+var _appearance = _interopRequireDefault(require("./order/appearance.js"));
+var _ascending = _interopRequireDefault(require("./order/ascending.js"));
+var _descending = _interopRequireDefault(require("./order/descending.js"));
+var _insideOut = _interopRequireDefault(require("./order/insideOut.js"));
+var _none2 = _interopRequireDefault(require("./order/none.js"));
+var _reverse = _interopRequireDefault(require("./order/reverse.js"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/line.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/line.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/line.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,51 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _index = require("../../../lib-vendor/d3-path/src/index.js");
+var _array = _interopRequireDefault(require("./array.js"));
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _linear = _interopRequireDefault(require("./curve/linear.js"));
+var _point = require("./point.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(x, y) {
+  var defined = (0, _constant.default)(true),
+    context = null,
+    curve = _linear.default,
+    output = null;
+  x = typeof x === "function" ? x : x === undefined ? _point.x : (0, _constant.default)(x);
+  y = typeof y === "function" ? y : y === undefined ? _point.y : (0, _constant.default)(y);
+  function line(data) {
+    var i,
+      n = (data = (0, _array.default)(data)).length,
+      d,
+      defined0 = false,
+      buffer;
+    if (context == null) output = curve(buffer = (0, _index.path)());
+    for (i = 0; i <= n; ++i) {
+      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+        if (defined0 = !defined0) output.lineStart();else output.lineEnd();
+      }
+      if (defined0) output.point(+x(d, i, data), +y(d, i, data));
+    }
+    if (buffer) return output = null, buffer + "" || null;
+  }
+  line.x = function (_) {
+    return arguments.length ? (x = typeof _ === "function" ? _ : (0, _constant.default)(+_), line) : x;
+  };
+  line.y = function (_) {
+    return arguments.length ? (y = typeof _ === "function" ? _ : (0, _constant.default)(+_), line) : y;
+  };
+  line.defined = function (_) {
+    return arguments.length ? (defined = typeof _ === "function" ? _ : (0, _constant.default)(!!_), line) : defined;
+  };
+  line.curve = function (_) {
+    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
+  };
+  line.context = function (_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
+  };
+  return line;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/lineRadial.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/lineRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/lineRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,24 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.lineRadial = lineRadial;
+var _radial = _interopRequireWildcard(require("./curve/radial.js"));
+var _line = _interopRequireDefault(require("./line.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function lineRadial(l) {
+  var c = l.curve;
+  l.angle = l.x, delete l.x;
+  l.radius = l.y, delete l.y;
+  l.curve = function (_) {
+    return arguments.length ? c((0, _radial.default)(_)) : c()._curve;
+  };
+  return l;
+}
+function _default() {
+  return lineRadial((0, _line.default)().curve(_radial.curveRadialLinear));
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/link.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/link.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/link.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.link = link;
+exports.linkHorizontal = linkHorizontal;
+exports.linkRadial = linkRadial;
+exports.linkVertical = linkVertical;
+var _index = require("../../../lib-vendor/d3-path/src/index.js");
+var _array = require("./array.js");
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _bump = require("./curve/bump.js");
+var _point = require("./point.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function linkSource(d) {
+  return d.source;
+}
+function linkTarget(d) {
+  return d.target;
+}
+function link(curve) {
+  let source = linkSource;
+  let target = linkTarget;
+  let x = _point.x;
+  let y = _point.y;
+  let context = null;
+  let output = null;
+  function link() {
+    let buffer;
+    const argv = _array.slice.call(arguments);
+    const s = source.apply(this, argv);
+    const t = target.apply(this, argv);
+    if (context == null) output = curve(buffer = (0, _index.path)());
+    output.lineStart();
+    argv[0] = s, output.point(+x.apply(this, argv), +y.apply(this, argv));
+    argv[0] = t, output.point(+x.apply(this, argv), +y.apply(this, argv));
+    output.lineEnd();
+    if (buffer) return output = null, buffer + "" || null;
+  }
+  link.source = function (_) {
+    return arguments.length ? (source = _, link) : source;
+  };
+  link.target = function (_) {
+    return arguments.length ? (target = _, link) : target;
+  };
+  link.x = function (_) {
+    return arguments.length ? (x = typeof _ === "function" ? _ : (0, _constant.default)(+_), link) : x;
+  };
+  link.y = function (_) {
+    return arguments.length ? (y = typeof _ === "function" ? _ : (0, _constant.default)(+_), link) : y;
+  };
+  link.context = function (_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;
+  };
+  return link;
+}
+function linkHorizontal() {
+  return link(_bump.bumpX);
+}
+function linkVertical() {
+  return link(_bump.bumpY);
+}
+function linkRadial() {
+  const l = link(_bump.bumpRadial);
+  l.angle = l.x, delete l.x;
+  l.radius = l.y, delete l.y;
+  return l;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/math.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/math.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,26 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.abs = void 0;
+exports.acos = acos;
+exports.asin = asin;
+exports.tau = exports.sqrt = exports.sin = exports.pi = exports.min = exports.max = exports.halfPi = exports.epsilon = exports.cos = exports.atan2 = void 0;
+const abs = exports.abs = Math.abs;
+const atan2 = exports.atan2 = Math.atan2;
+const cos = exports.cos = Math.cos;
+const max = exports.max = Math.max;
+const min = exports.min = Math.min;
+const sin = exports.sin = Math.sin;
+const sqrt = exports.sqrt = Math.sqrt;
+const epsilon = exports.epsilon = 1e-12;
+const pi = exports.pi = Math.PI;
+const halfPi = exports.halfPi = pi / 2;
+const tau = exports.tau = 2 * pi;
+function acos(x) {
+  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);
+}
+function asin(x) {
+  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/noop.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/noop.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,7 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default() {}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/diverging.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/diverging.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/diverging.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
+    for (yp = yn = 0, i = 0; i < n; ++i) {
+      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {
+        d[0] = yp, d[1] = yp += dy;
+      } else if (dy < 0) {
+        d[1] = yn, d[0] = yn += dy;
+      } else {
+        d[0] = 0, d[1] = dy;
+      }
+    }
+  }
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/expand.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/expand.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/expand.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _none = _interopRequireDefault(require("./none.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
+    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
+    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
+  }
+  (0, _none.default)(series, order);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/none.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/none.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/none.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,15 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(series, order) {
+  if (!((n = series.length) > 1)) return;
+  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
+    s0 = s1, s1 = series[order[i]];
+    for (j = 0; j < m; ++j) {
+      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
+    }
+  }
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/silhouette.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/silhouette.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/silhouette.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _none = _interopRequireDefault(require("./none.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
+    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
+    s0[j][1] += s0[j][0] = -y / 2;
+  }
+  (0, _none.default)(series, order);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/wiggle.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/wiggle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/offset/wiggle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,30 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _none = _interopRequireDefault(require("./none.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(series, order) {
+  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
+  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
+    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
+      var si = series[order[i]],
+        sij0 = si[j][1] || 0,
+        sij1 = si[j - 1][1] || 0,
+        s3 = (sij0 - sij1) / 2;
+      for (var k = 0; k < i; ++k) {
+        var sk = series[order[k]],
+          skj0 = sk[j][1] || 0,
+          skj1 = sk[j - 1][1] || 0;
+        s3 += skj0 - skj1;
+      }
+      s1 += sij0, s2 += s3 * sij0;
+    }
+    s0[j - 1][1] += s0[j - 1][0] = y;
+    if (s1) y -= s2 / s1;
+  }
+  s0[j - 1][1] += s0[j - 1][0] = y;
+  (0, _none.default)(series, order);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/order/appearance.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/order/appearance.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/order/appearance.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _none = _interopRequireDefault(require("./none.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(series) {
+  var peaks = series.map(peak);
+  return (0, _none.default)(series).sort(function (a, b) {
+    return peaks[a] - peaks[b];
+  });
+}
+function peak(series) {
+  var i = -1,
+    j = 0,
+    n = series.length,
+    vi,
+    vj = -Infinity;
+  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;
+  return j;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/order/ascending.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/order/ascending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/order/ascending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+exports.sum = sum;
+var _none = _interopRequireDefault(require("./none.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(series) {
+  var sums = series.map(sum);
+  return (0, _none.default)(series).sort(function (a, b) {
+    return sums[a] - sums[b];
+  });
+}
+function sum(series) {
+  var s = 0,
+    i = -1,
+    n = series.length,
+    v;
+  while (++i < n) if (v = +series[i][1]) s += v;
+  return s;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/order/descending.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/order/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/order/descending.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _ascending = _interopRequireDefault(require("./ascending.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(series) {
+  return (0, _ascending.default)(series).reverse();
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/order/insideOut.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/order/insideOut.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/order/insideOut.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _appearance = _interopRequireDefault(require("./appearance.js"));
+var _ascending = require("./ascending.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(series) {
+  var n = series.length,
+    i,
+    j,
+    sums = series.map(_ascending.sum),
+    order = (0, _appearance.default)(series),
+    top = 0,
+    bottom = 0,
+    tops = [],
+    bottoms = [];
+  for (i = 0; i < n; ++i) {
+    j = order[i];
+    if (top < bottom) {
+      top += sums[j];
+      tops.push(j);
+    } else {
+      bottom += sums[j];
+      bottoms.push(j);
+    }
+  }
+  return bottoms.reverse().concat(tops);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/order/none.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/order/none.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/order/none.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(series) {
+  var n = series.length,
+    o = new Array(n);
+  while (--n >= 0) o[n] = n;
+  return o;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/order/reverse.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/order/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/order/reverse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _none = _interopRequireDefault(require("./none.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default(series) {
+  return (0, _none.default)(series).reverse();
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/pie.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/pie.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/pie.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,79 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _array = _interopRequireDefault(require("./array.js"));
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _descending = _interopRequireDefault(require("./descending.js"));
+var _identity = _interopRequireDefault(require("./identity.js"));
+var _math = require("./math.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default() {
+  var value = _identity.default,
+    sortValues = _descending.default,
+    sort = null,
+    startAngle = (0, _constant.default)(0),
+    endAngle = (0, _constant.default)(_math.tau),
+    padAngle = (0, _constant.default)(0);
+  function pie(data) {
+    var i,
+      n = (data = (0, _array.default)(data)).length,
+      j,
+      k,
+      sum = 0,
+      index = new Array(n),
+      arcs = new Array(n),
+      a0 = +startAngle.apply(this, arguments),
+      da = Math.min(_math.tau, Math.max(-_math.tau, endAngle.apply(this, arguments) - a0)),
+      a1,
+      p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
+      pa = p * (da < 0 ? -1 : 1),
+      v;
+    for (i = 0; i < n; ++i) {
+      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
+        sum += v;
+      }
+    }
+
+    // Optionally sort the arcs by previously-computed values or by data.
+    if (sortValues != null) index.sort(function (i, j) {
+      return sortValues(arcs[i], arcs[j]);
+    });else if (sort != null) index.sort(function (i, j) {
+      return sort(data[i], data[j]);
+    });
+
+    // Compute the arcs! They are stored in the original data's order.
+    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
+      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
+        data: data[j],
+        index: i,
+        value: v,
+        startAngle: a0,
+        endAngle: a1,
+        padAngle: p
+      };
+    }
+    return arcs;
+  }
+  pie.value = function (_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : (0, _constant.default)(+_), pie) : value;
+  };
+  pie.sortValues = function (_) {
+    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
+  };
+  pie.sort = function (_) {
+    return arguments.length ? (sort = _, sortValues = null, pie) : sort;
+  };
+  pie.startAngle = function (_) {
+    return arguments.length ? (startAngle = typeof _ === "function" ? _ : (0, _constant.default)(+_), pie) : startAngle;
+  };
+  pie.endAngle = function (_) {
+    return arguments.length ? (endAngle = typeof _ === "function" ? _ : (0, _constant.default)(+_), pie) : endAngle;
+  };
+  pie.padAngle = function (_) {
+    return arguments.length ? (padAngle = typeof _ === "function" ? _ : (0, _constant.default)(+_), pie) : padAngle;
+  };
+  return pie;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/point.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/point.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/point.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.x = x;
+exports.y = y;
+function x(p) {
+  return p[0];
+}
+function y(p) {
+  return p[1];
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/pointRadial.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/pointRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/pointRadial.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,9 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(x, y) {
+  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/stack.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/stack.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/stack.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _array = _interopRequireDefault(require("./array.js"));
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _none = _interopRequireDefault(require("./offset/none.js"));
+var _none2 = _interopRequireDefault(require("./order/none.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function stackValue(d, key) {
+  return d[key];
+}
+function stackSeries(key) {
+  const series = [];
+  series.key = key;
+  return series;
+}
+function _default() {
+  var keys = (0, _constant.default)([]),
+    order = _none2.default,
+    offset = _none.default,
+    value = stackValue;
+  function stack(data) {
+    var sz = Array.from(keys.apply(this, arguments), stackSeries),
+      i,
+      n = sz.length,
+      j = -1,
+      oz;
+    for (const d of data) {
+      for (i = 0, ++j; i < n; ++i) {
+        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;
+      }
+    }
+    for (i = 0, oz = (0, _array.default)(order(sz)); i < n; ++i) {
+      sz[oz[i]].index = i;
+    }
+    offset(sz, oz);
+    return sz;
+  }
+  stack.keys = function (_) {
+    return arguments.length ? (keys = typeof _ === "function" ? _ : (0, _constant.default)(Array.from(_)), stack) : keys;
+  };
+  stack.value = function (_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : (0, _constant.default)(+_), stack) : value;
+  };
+  stack.order = function (_) {
+    return arguments.length ? (order = _ == null ? _none2.default : typeof _ === "function" ? _ : (0, _constant.default)(Array.from(_)), stack) : order;
+  };
+  stack.offset = function (_) {
+    return arguments.length ? (offset = _ == null ? _none.default : _, stack) : offset;
+  };
+  return stack;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = Symbol;
+exports.symbolsStroke = exports.symbolsFill = void 0;
+var _index = require("../../../lib-vendor/d3-path/src/index.js");
+var _constant = _interopRequireDefault(require("./constant.js"));
+var _asterisk = _interopRequireDefault(require("./symbol/asterisk.js"));
+var _circle = _interopRequireDefault(require("./symbol/circle.js"));
+var _cross = _interopRequireDefault(require("./symbol/cross.js"));
+var _diamond = _interopRequireDefault(require("./symbol/diamond.js"));
+var _diamond2 = _interopRequireDefault(require("./symbol/diamond2.js"));
+var _plus = _interopRequireDefault(require("./symbol/plus.js"));
+var _square = _interopRequireDefault(require("./symbol/square.js"));
+var _square2 = _interopRequireDefault(require("./symbol/square2.js"));
+var _star = _interopRequireDefault(require("./symbol/star.js"));
+var _triangle = _interopRequireDefault(require("./symbol/triangle.js"));
+var _triangle2 = _interopRequireDefault(require("./symbol/triangle2.js"));
+var _wye = _interopRequireDefault(require("./symbol/wye.js"));
+var _x = _interopRequireDefault(require("./symbol/x.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+// These symbols are designed to be filled.
+const symbolsFill = exports.symbolsFill = [_circle.default, _cross.default, _diamond.default, _square.default, _star.default, _triangle.default, _wye.default];
+
+// These symbols are designed to be stroked (with a width of 1.5px and round caps).
+const symbolsStroke = exports.symbolsStroke = [_circle.default, _plus.default, _x.default, _triangle2.default, _asterisk.default, _square2.default, _diamond2.default];
+function Symbol(type, size) {
+  let context = null;
+  type = typeof type === "function" ? type : (0, _constant.default)(type || _circle.default);
+  size = typeof size === "function" ? size : (0, _constant.default)(size === undefined ? 64 : +size);
+  function symbol() {
+    let buffer;
+    if (!context) context = buffer = (0, _index.path)();
+    type.apply(this, arguments).draw(context, +size.apply(this, arguments));
+    if (buffer) return context = null, buffer + "" || null;
+  }
+  symbol.type = function (_) {
+    return arguments.length ? (type = typeof _ === "function" ? _ : (0, _constant.default)(_), symbol) : type;
+  };
+  symbol.size = function (_) {
+    return arguments.length ? (size = typeof _ === "function" ? _ : (0, _constant.default)(+_), symbol) : size;
+  };
+  symbol.context = function (_) {
+    return arguments.length ? (context = _ == null ? null : _, symbol) : context;
+  };
+  return symbol;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/asterisk.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/asterisk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/asterisk.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+const sqrt3 = (0, _math.sqrt)(3);
+var _default = exports.default = {
+  draw(context, size) {
+    const r = (0, _math.sqrt)(size + (0, _math.min)(size / 28, 0.75)) * 0.59436;
+    const t = r / 2;
+    const u = t * sqrt3;
+    context.moveTo(0, r);
+    context.lineTo(0, -r);
+    context.moveTo(-u, -t);
+    context.lineTo(u, t);
+    context.moveTo(-u, t);
+    context.lineTo(u, -t);
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/circle.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+var _default = exports.default = {
+  draw(context, size) {
+    const r = (0, _math.sqrt)(size / _math.pi);
+    context.moveTo(r, 0);
+    context.arc(0, 0, r, 0, _math.tau);
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/cross.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/cross.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,25 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+var _default = exports.default = {
+  draw(context, size) {
+    const r = (0, _math.sqrt)(size / 5) / 2;
+    context.moveTo(-3 * r, -r);
+    context.lineTo(-r, -r);
+    context.lineTo(-r, -3 * r);
+    context.lineTo(r, -3 * r);
+    context.lineTo(r, -r);
+    context.lineTo(3 * r, -r);
+    context.lineTo(3 * r, r);
+    context.lineTo(r, r);
+    context.lineTo(r, 3 * r);
+    context.lineTo(-r, 3 * r);
+    context.lineTo(-r, r);
+    context.lineTo(-3 * r, r);
+    context.closePath();
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/diamond.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/diamond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/diamond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+const tan30 = (0, _math.sqrt)(1 / 3);
+const tan30_2 = tan30 * 2;
+var _default = exports.default = {
+  draw(context, size) {
+    const y = (0, _math.sqrt)(size / tan30_2);
+    const x = y * tan30;
+    context.moveTo(0, -y);
+    context.lineTo(x, 0);
+    context.lineTo(0, y);
+    context.lineTo(-x, 0);
+    context.closePath();
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/diamond2.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/diamond2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/diamond2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+var _default = exports.default = {
+  draw(context, size) {
+    const r = (0, _math.sqrt)(size) * 0.62625;
+    context.moveTo(0, -r);
+    context.lineTo(r, 0);
+    context.lineTo(0, r);
+    context.lineTo(-r, 0);
+    context.closePath();
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/plus.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/plus.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/plus.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+var _default = exports.default = {
+  draw(context, size) {
+    const r = (0, _math.sqrt)(size - (0, _math.min)(size / 7, 2)) * 0.87559;
+    context.moveTo(-r, 0);
+    context.lineTo(r, 0);
+    context.moveTo(0, r);
+    context.lineTo(0, -r);
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/square.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/square.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/square.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+var _default = exports.default = {
+  draw(context, size) {
+    const w = (0, _math.sqrt)(size);
+    const x = -w / 2;
+    context.rect(x, x, w, w);
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/square2.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/square2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/square2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+var _default = exports.default = {
+  draw(context, size) {
+    const r = (0, _math.sqrt)(size) * 0.4431;
+    context.moveTo(r, r);
+    context.lineTo(r, -r);
+    context.lineTo(-r, -r);
+    context.lineTo(-r, r);
+    context.closePath();
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/star.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/star.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/star.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,28 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+const ka = 0.89081309152928522810;
+const kr = (0, _math.sin)(_math.pi / 10) / (0, _math.sin)(7 * _math.pi / 10);
+const kx = (0, _math.sin)(_math.tau / 10) * kr;
+const ky = -(0, _math.cos)(_math.tau / 10) * kr;
+var _default = exports.default = {
+  draw(context, size) {
+    const r = (0, _math.sqrt)(size * ka);
+    const x = kx * r;
+    const y = ky * r;
+    context.moveTo(0, -r);
+    context.lineTo(x, y);
+    for (let i = 1; i < 5; ++i) {
+      const a = _math.tau * i / 5;
+      const c = (0, _math.cos)(a);
+      const s = (0, _math.sin)(a);
+      context.lineTo(s * r, -c * r);
+      context.lineTo(c * x - s * y, s * x + c * y);
+    }
+    context.closePath();
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/triangle.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/triangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/triangle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+const sqrt3 = (0, _math.sqrt)(3);
+var _default = exports.default = {
+  draw(context, size) {
+    const y = -(0, _math.sqrt)(size / (sqrt3 * 3));
+    context.moveTo(0, y * 2);
+    context.lineTo(-sqrt3 * y, -y);
+    context.lineTo(sqrt3 * y, -y);
+    context.closePath();
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/triangle2.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/triangle2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/triangle2.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,19 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+const sqrt3 = (0, _math.sqrt)(3);
+var _default = exports.default = {
+  draw(context, size) {
+    const s = (0, _math.sqrt)(size) * 0.6824;
+    const t = s / 2;
+    const u = s * sqrt3 / 2; // cos(Math.PI / 6)
+    context.moveTo(0, -s);
+    context.lineTo(u, t);
+    context.lineTo(-u, t);
+    context.closePath();
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/wye.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/wye.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/wye.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+const c = -0.5;
+const s = (0, _math.sqrt)(3) / 2;
+const k = 1 / (0, _math.sqrt)(12);
+const a = (k / 2 + 1) * 3;
+var _default = exports.default = {
+  draw(context, size) {
+    const r = (0, _math.sqrt)(size / a);
+    const x0 = r / 2,
+      y0 = r * k;
+    const x1 = x0,
+      y1 = r * k + r;
+    const x2 = -x1,
+      y2 = y1;
+    context.moveTo(x0, y0);
+    context.lineTo(x1, y1);
+    context.lineTo(x2, y2);
+    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
+    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
+    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
+    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
+    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
+    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
+    context.closePath();
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/x.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/x.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-shape/src/symbol/x.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _math = require("../math.js");
+var _default = exports.default = {
+  draw(context, size) {
+    const r = (0, _math.sqrt)(size - (0, _math.min)(size / 6, 1.7)) * 0.6189;
+    context.moveTo(-r, -r);
+    context.lineTo(r, r);
+    context.moveTo(-r, r);
+    context.lineTo(r, -r);
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-time-format/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time-format/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time-format/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-time-format/src/defaultLocale.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time-format/src/defaultLocale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time-format/src/defaultLocale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,32 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = defaultLocale;
+exports.utcParse = exports.utcFormat = exports.timeParse = exports.timeFormat = void 0;
+var _locale = _interopRequireDefault(require("./locale.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var locale;
+var timeFormat;
+var timeParse;
+var utcFormat;
+var utcParse;
+defaultLocale({
+  dateTime: "%x, %X",
+  date: "%-m/%-d/%Y",
+  time: "%-I:%M:%S %p",
+  periods: ["AM", "PM"],
+  days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+  shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+  months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+  shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+});
+function defaultLocale(definition) {
+  locale = (0, _locale.default)(definition);
+  exports.timeFormat = timeFormat = locale.format;
+  exports.timeParse = timeParse = locale.parse;
+  exports.utcFormat = utcFormat = locale.utcFormat;
+  exports.utcParse = utcParse = locale.utcParse;
+  return locale;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-time-format/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time-format/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time-format/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,60 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "isoFormat", {
+  enumerable: true,
+  get: function () {
+    return _isoFormat.default;
+  }
+});
+Object.defineProperty(exports, "isoParse", {
+  enumerable: true,
+  get: function () {
+    return _isoParse.default;
+  }
+});
+Object.defineProperty(exports, "timeFormat", {
+  enumerable: true,
+  get: function () {
+    return _defaultLocale.timeFormat;
+  }
+});
+Object.defineProperty(exports, "timeFormatDefaultLocale", {
+  enumerable: true,
+  get: function () {
+    return _defaultLocale.default;
+  }
+});
+Object.defineProperty(exports, "timeFormatLocale", {
+  enumerable: true,
+  get: function () {
+    return _locale.default;
+  }
+});
+Object.defineProperty(exports, "timeParse", {
+  enumerable: true,
+  get: function () {
+    return _defaultLocale.timeParse;
+  }
+});
+Object.defineProperty(exports, "utcFormat", {
+  enumerable: true,
+  get: function () {
+    return _defaultLocale.utcFormat;
+  }
+});
+Object.defineProperty(exports, "utcParse", {
+  enumerable: true,
+  get: function () {
+    return _defaultLocale.utcParse;
+  }
+});
+var _defaultLocale = _interopRequireWildcard(require("./defaultLocale.js"));
+var _locale = _interopRequireDefault(require("./locale.js"));
+var _isoFormat = _interopRequireDefault(require("./isoFormat.js"));
+var _isoParse = _interopRequireDefault(require("./isoParse.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
Index: node_modules/victory-vendor/lib-vendor/d3-time-format/src/isoFormat.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time-format/src/isoFormat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time-format/src/isoFormat.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.isoSpecifier = exports.default = void 0;
+var _defaultLocale = require("./defaultLocale.js");
+var isoSpecifier = exports.isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
+function formatIsoNative(date) {
+  return date.toISOString();
+}
+var formatIso = Date.prototype.toISOString ? formatIsoNative : (0, _defaultLocale.utcFormat)(isoSpecifier);
+var _default = exports.default = formatIso;
Index: node_modules/victory-vendor/lib-vendor/d3-time-format/src/isoParse.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time-format/src/isoParse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time-format/src/isoParse.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,14 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = void 0;
+var _isoFormat = require("./isoFormat.js");
+var _defaultLocale = require("./defaultLocale.js");
+function parseIsoNative(string) {
+  var date = new Date(string);
+  return isNaN(date) ? null : date;
+}
+var parseIso = +new Date("2000-01-01T00:00:00.000Z") ? parseIsoNative : (0, _defaultLocale.utcParse)(_isoFormat.isoSpecifier);
+var _default = exports.default = parseIso;
Index: node_modules/victory-vendor/lib-vendor/d3-time-format/src/locale.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time-format/src/locale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time-format/src/locale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,606 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = formatLocale;
+var _index = require("../../../lib-vendor/d3-time/src/index.js");
+function localDate(d) {
+  if (0 <= d.y && d.y < 100) {
+    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
+    date.setFullYear(d.y);
+    return date;
+  }
+  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
+}
+function utcDate(d) {
+  if (0 <= d.y && d.y < 100) {
+    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
+    date.setUTCFullYear(d.y);
+    return date;
+  }
+  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
+}
+function newDate(y, m, d) {
+  return {
+    y: y,
+    m: m,
+    d: d,
+    H: 0,
+    M: 0,
+    S: 0,
+    L: 0
+  };
+}
+function formatLocale(locale) {
+  var locale_dateTime = locale.dateTime,
+    locale_date = locale.date,
+    locale_time = locale.time,
+    locale_periods = locale.periods,
+    locale_weekdays = locale.days,
+    locale_shortWeekdays = locale.shortDays,
+    locale_months = locale.months,
+    locale_shortMonths = locale.shortMonths;
+  var periodRe = formatRe(locale_periods),
+    periodLookup = formatLookup(locale_periods),
+    weekdayRe = formatRe(locale_weekdays),
+    weekdayLookup = formatLookup(locale_weekdays),
+    shortWeekdayRe = formatRe(locale_shortWeekdays),
+    shortWeekdayLookup = formatLookup(locale_shortWeekdays),
+    monthRe = formatRe(locale_months),
+    monthLookup = formatLookup(locale_months),
+    shortMonthRe = formatRe(locale_shortMonths),
+    shortMonthLookup = formatLookup(locale_shortMonths);
+  var formats = {
+    "a": formatShortWeekday,
+    "A": formatWeekday,
+    "b": formatShortMonth,
+    "B": formatMonth,
+    "c": null,
+    "d": formatDayOfMonth,
+    "e": formatDayOfMonth,
+    "f": formatMicroseconds,
+    "g": formatYearISO,
+    "G": formatFullYearISO,
+    "H": formatHour24,
+    "I": formatHour12,
+    "j": formatDayOfYear,
+    "L": formatMilliseconds,
+    "m": formatMonthNumber,
+    "M": formatMinutes,
+    "p": formatPeriod,
+    "q": formatQuarter,
+    "Q": formatUnixTimestamp,
+    "s": formatUnixTimestampSeconds,
+    "S": formatSeconds,
+    "u": formatWeekdayNumberMonday,
+    "U": formatWeekNumberSunday,
+    "V": formatWeekNumberISO,
+    "w": formatWeekdayNumberSunday,
+    "W": formatWeekNumberMonday,
+    "x": null,
+    "X": null,
+    "y": formatYear,
+    "Y": formatFullYear,
+    "Z": formatZone,
+    "%": formatLiteralPercent
+  };
+  var utcFormats = {
+    "a": formatUTCShortWeekday,
+    "A": formatUTCWeekday,
+    "b": formatUTCShortMonth,
+    "B": formatUTCMonth,
+    "c": null,
+    "d": formatUTCDayOfMonth,
+    "e": formatUTCDayOfMonth,
+    "f": formatUTCMicroseconds,
+    "g": formatUTCYearISO,
+    "G": formatUTCFullYearISO,
+    "H": formatUTCHour24,
+    "I": formatUTCHour12,
+    "j": formatUTCDayOfYear,
+    "L": formatUTCMilliseconds,
+    "m": formatUTCMonthNumber,
+    "M": formatUTCMinutes,
+    "p": formatUTCPeriod,
+    "q": formatUTCQuarter,
+    "Q": formatUnixTimestamp,
+    "s": formatUnixTimestampSeconds,
+    "S": formatUTCSeconds,
+    "u": formatUTCWeekdayNumberMonday,
+    "U": formatUTCWeekNumberSunday,
+    "V": formatUTCWeekNumberISO,
+    "w": formatUTCWeekdayNumberSunday,
+    "W": formatUTCWeekNumberMonday,
+    "x": null,
+    "X": null,
+    "y": formatUTCYear,
+    "Y": formatUTCFullYear,
+    "Z": formatUTCZone,
+    "%": formatLiteralPercent
+  };
+  var parses = {
+    "a": parseShortWeekday,
+    "A": parseWeekday,
+    "b": parseShortMonth,
+    "B": parseMonth,
+    "c": parseLocaleDateTime,
+    "d": parseDayOfMonth,
+    "e": parseDayOfMonth,
+    "f": parseMicroseconds,
+    "g": parseYear,
+    "G": parseFullYear,
+    "H": parseHour24,
+    "I": parseHour24,
+    "j": parseDayOfYear,
+    "L": parseMilliseconds,
+    "m": parseMonthNumber,
+    "M": parseMinutes,
+    "p": parsePeriod,
+    "q": parseQuarter,
+    "Q": parseUnixTimestamp,
+    "s": parseUnixTimestampSeconds,
+    "S": parseSeconds,
+    "u": parseWeekdayNumberMonday,
+    "U": parseWeekNumberSunday,
+    "V": parseWeekNumberISO,
+    "w": parseWeekdayNumberSunday,
+    "W": parseWeekNumberMonday,
+    "x": parseLocaleDate,
+    "X": parseLocaleTime,
+    "y": parseYear,
+    "Y": parseFullYear,
+    "Z": parseZone,
+    "%": parseLiteralPercent
+  };
+
+  // These recursive directive definitions must be deferred.
+  formats.x = newFormat(locale_date, formats);
+  formats.X = newFormat(locale_time, formats);
+  formats.c = newFormat(locale_dateTime, formats);
+  utcFormats.x = newFormat(locale_date, utcFormats);
+  utcFormats.X = newFormat(locale_time, utcFormats);
+  utcFormats.c = newFormat(locale_dateTime, utcFormats);
+  function newFormat(specifier, formats) {
+    return function (date) {
+      var string = [],
+        i = -1,
+        j = 0,
+        n = specifier.length,
+        c,
+        pad,
+        format;
+      if (!(date instanceof Date)) date = new Date(+date);
+      while (++i < n) {
+        if (specifier.charCodeAt(i) === 37) {
+          string.push(specifier.slice(j, i));
+          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);else pad = c === "e" ? " " : "0";
+          if (format = formats[c]) c = format(date, pad);
+          string.push(c);
+          j = i + 1;
+        }
+      }
+      string.push(specifier.slice(j, i));
+      return string.join("");
+    };
+  }
+  function newParse(specifier, Z) {
+    return function (string) {
+      var d = newDate(1900, undefined, 1),
+        i = parseSpecifier(d, specifier, string += "", 0),
+        week,
+        day;
+      if (i != string.length) return null;
+
+      // If a UNIX timestamp is specified, return it.
+      if ("Q" in d) return new Date(d.Q);
+      if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0));
+
+      // If this is utcParse, never use the local timezone.
+      if (Z && !("Z" in d)) d.Z = 0;
+
+      // The am-pm flag is 0 for AM, and 1 for PM.
+      if ("p" in d) d.H = d.H % 12 + d.p * 12;
+
+      // If the month was not specified, inherit from the quarter.
+      if (d.m === undefined) d.m = "q" in d ? d.q : 0;
+
+      // Convert day-of-week and week-of-year to day-of-year.
+      if ("V" in d) {
+        if (d.V < 1 || d.V > 53) return null;
+        if (!("w" in d)) d.w = 1;
+        if ("Z" in d) {
+          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();
+          week = day > 4 || day === 0 ? _index.utcMonday.ceil(week) : (0, _index.utcMonday)(week);
+          week = _index.utcDay.offset(week, (d.V - 1) * 7);
+          d.y = week.getUTCFullYear();
+          d.m = week.getUTCMonth();
+          d.d = week.getUTCDate() + (d.w + 6) % 7;
+        } else {
+          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();
+          week = day > 4 || day === 0 ? _index.timeMonday.ceil(week) : (0, _index.timeMonday)(week);
+          week = _index.timeDay.offset(week, (d.V - 1) * 7);
+          d.y = week.getFullYear();
+          d.m = week.getMonth();
+          d.d = week.getDate() + (d.w + 6) % 7;
+        }
+      } else if ("W" in d || "U" in d) {
+        if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
+        day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
+        d.m = 0;
+        d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;
+      }
+
+      // If a time zone is specified, all fields are interpreted as UTC and then
+      // offset according to the specified time zone.
+      if ("Z" in d) {
+        d.H += d.Z / 100 | 0;
+        d.M += d.Z % 100;
+        return utcDate(d);
+      }
+
+      // Otherwise, all fields are in local time.
+      return localDate(d);
+    };
+  }
+  function parseSpecifier(d, specifier, string, j) {
+    var i = 0,
+      n = specifier.length,
+      m = string.length,
+      c,
+      parse;
+    while (i < n) {
+      if (j >= m) return -1;
+      c = specifier.charCodeAt(i++);
+      if (c === 37) {
+        c = specifier.charAt(i++);
+        parse = parses[c in pads ? specifier.charAt(i++) : c];
+        if (!parse || (j = parse(d, string, j)) < 0) return -1;
+      } else if (c != string.charCodeAt(j++)) {
+        return -1;
+      }
+    }
+    return j;
+  }
+  function parsePeriod(d, string, i) {
+    var n = periodRe.exec(string.slice(i));
+    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+  function parseShortWeekday(d, string, i) {
+    var n = shortWeekdayRe.exec(string.slice(i));
+    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+  function parseWeekday(d, string, i) {
+    var n = weekdayRe.exec(string.slice(i));
+    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+  function parseShortMonth(d, string, i) {
+    var n = shortMonthRe.exec(string.slice(i));
+    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+  function parseMonth(d, string, i) {
+    var n = monthRe.exec(string.slice(i));
+    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+  }
+  function parseLocaleDateTime(d, string, i) {
+    return parseSpecifier(d, locale_dateTime, string, i);
+  }
+  function parseLocaleDate(d, string, i) {
+    return parseSpecifier(d, locale_date, string, i);
+  }
+  function parseLocaleTime(d, string, i) {
+    return parseSpecifier(d, locale_time, string, i);
+  }
+  function formatShortWeekday(d) {
+    return locale_shortWeekdays[d.getDay()];
+  }
+  function formatWeekday(d) {
+    return locale_weekdays[d.getDay()];
+  }
+  function formatShortMonth(d) {
+    return locale_shortMonths[d.getMonth()];
+  }
+  function formatMonth(d) {
+    return locale_months[d.getMonth()];
+  }
+  function formatPeriod(d) {
+    return locale_periods[+(d.getHours() >= 12)];
+  }
+  function formatQuarter(d) {
+    return 1 + ~~(d.getMonth() / 3);
+  }
+  function formatUTCShortWeekday(d) {
+    return locale_shortWeekdays[d.getUTCDay()];
+  }
+  function formatUTCWeekday(d) {
+    return locale_weekdays[d.getUTCDay()];
+  }
+  function formatUTCShortMonth(d) {
+    return locale_shortMonths[d.getUTCMonth()];
+  }
+  function formatUTCMonth(d) {
+    return locale_months[d.getUTCMonth()];
+  }
+  function formatUTCPeriod(d) {
+    return locale_periods[+(d.getUTCHours() >= 12)];
+  }
+  function formatUTCQuarter(d) {
+    return 1 + ~~(d.getUTCMonth() / 3);
+  }
+  return {
+    format: function (specifier) {
+      var f = newFormat(specifier += "", formats);
+      f.toString = function () {
+        return specifier;
+      };
+      return f;
+    },
+    parse: function (specifier) {
+      var p = newParse(specifier += "", false);
+      p.toString = function () {
+        return specifier;
+      };
+      return p;
+    },
+    utcFormat: function (specifier) {
+      var f = newFormat(specifier += "", utcFormats);
+      f.toString = function () {
+        return specifier;
+      };
+      return f;
+    },
+    utcParse: function (specifier) {
+      var p = newParse(specifier += "", true);
+      p.toString = function () {
+        return specifier;
+      };
+      return p;
+    }
+  };
+}
+var pads = {
+    "-": "",
+    "_": " ",
+    "0": "0"
+  },
+  numberRe = /^\s*\d+/,
+  // note: ignores next directive
+  percentRe = /^%/,
+  requoteRe = /[\\^$*+?|[\]().{}]/g;
+function pad(value, fill, width) {
+  var sign = value < 0 ? "-" : "",
+    string = (sign ? -value : value) + "",
+    length = string.length;
+  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
+}
+function requote(s) {
+  return s.replace(requoteRe, "\\$&");
+}
+function formatRe(names) {
+  return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
+}
+function formatLookup(names) {
+  return new Map(names.map((name, i) => [name.toLowerCase(), i]));
+}
+function parseWeekdayNumberSunday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.w = +n[0], i + n[0].length) : -1;
+}
+function parseWeekdayNumberMonday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.u = +n[0], i + n[0].length) : -1;
+}
+function parseWeekNumberSunday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.U = +n[0], i + n[0].length) : -1;
+}
+function parseWeekNumberISO(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.V = +n[0], i + n[0].length) : -1;
+}
+function parseWeekNumberMonday(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.W = +n[0], i + n[0].length) : -1;
+}
+function parseFullYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 4));
+  return n ? (d.y = +n[0], i + n[0].length) : -1;
+}
+function parseYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
+}
+function parseZone(d, string, i) {
+  var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
+  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
+}
+function parseQuarter(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;
+}
+function parseMonthNumber(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
+}
+function parseDayOfMonth(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.d = +n[0], i + n[0].length) : -1;
+}
+function parseDayOfYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 3));
+  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
+}
+function parseHour24(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.H = +n[0], i + n[0].length) : -1;
+}
+function parseMinutes(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.M = +n[0], i + n[0].length) : -1;
+}
+function parseSeconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.S = +n[0], i + n[0].length) : -1;
+}
+function parseMilliseconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 3));
+  return n ? (d.L = +n[0], i + n[0].length) : -1;
+}
+function parseMicroseconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 6));
+  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
+}
+function parseLiteralPercent(d, string, i) {
+  var n = percentRe.exec(string.slice(i, i + 1));
+  return n ? i + n[0].length : -1;
+}
+function parseUnixTimestamp(d, string, i) {
+  var n = numberRe.exec(string.slice(i));
+  return n ? (d.Q = +n[0], i + n[0].length) : -1;
+}
+function parseUnixTimestampSeconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i));
+  return n ? (d.s = +n[0], i + n[0].length) : -1;
+}
+function formatDayOfMonth(d, p) {
+  return pad(d.getDate(), p, 2);
+}
+function formatHour24(d, p) {
+  return pad(d.getHours(), p, 2);
+}
+function formatHour12(d, p) {
+  return pad(d.getHours() % 12 || 12, p, 2);
+}
+function formatDayOfYear(d, p) {
+  return pad(1 + _index.timeDay.count((0, _index.timeYear)(d), d), p, 3);
+}
+function formatMilliseconds(d, p) {
+  return pad(d.getMilliseconds(), p, 3);
+}
+function formatMicroseconds(d, p) {
+  return formatMilliseconds(d, p) + "000";
+}
+function formatMonthNumber(d, p) {
+  return pad(d.getMonth() + 1, p, 2);
+}
+function formatMinutes(d, p) {
+  return pad(d.getMinutes(), p, 2);
+}
+function formatSeconds(d, p) {
+  return pad(d.getSeconds(), p, 2);
+}
+function formatWeekdayNumberMonday(d) {
+  var day = d.getDay();
+  return day === 0 ? 7 : day;
+}
+function formatWeekNumberSunday(d, p) {
+  return pad(_index.timeSunday.count((0, _index.timeYear)(d) - 1, d), p, 2);
+}
+function dISO(d) {
+  var day = d.getDay();
+  return day >= 4 || day === 0 ? (0, _index.timeThursday)(d) : _index.timeThursday.ceil(d);
+}
+function formatWeekNumberISO(d, p) {
+  d = dISO(d);
+  return pad(_index.timeThursday.count((0, _index.timeYear)(d), d) + ((0, _index.timeYear)(d).getDay() === 4), p, 2);
+}
+function formatWeekdayNumberSunday(d) {
+  return d.getDay();
+}
+function formatWeekNumberMonday(d, p) {
+  return pad(_index.timeMonday.count((0, _index.timeYear)(d) - 1, d), p, 2);
+}
+function formatYear(d, p) {
+  return pad(d.getFullYear() % 100, p, 2);
+}
+function formatYearISO(d, p) {
+  d = dISO(d);
+  return pad(d.getFullYear() % 100, p, 2);
+}
+function formatFullYear(d, p) {
+  return pad(d.getFullYear() % 10000, p, 4);
+}
+function formatFullYearISO(d, p) {
+  var day = d.getDay();
+  d = day >= 4 || day === 0 ? (0, _index.timeThursday)(d) : _index.timeThursday.ceil(d);
+  return pad(d.getFullYear() % 10000, p, 4);
+}
+function formatZone(d) {
+  var z = d.getTimezoneOffset();
+  return (z > 0 ? "-" : (z *= -1, "+")) + pad(z / 60 | 0, "0", 2) + pad(z % 60, "0", 2);
+}
+function formatUTCDayOfMonth(d, p) {
+  return pad(d.getUTCDate(), p, 2);
+}
+function formatUTCHour24(d, p) {
+  return pad(d.getUTCHours(), p, 2);
+}
+function formatUTCHour12(d, p) {
+  return pad(d.getUTCHours() % 12 || 12, p, 2);
+}
+function formatUTCDayOfYear(d, p) {
+  return pad(1 + _index.utcDay.count((0, _index.utcYear)(d), d), p, 3);
+}
+function formatUTCMilliseconds(d, p) {
+  return pad(d.getUTCMilliseconds(), p, 3);
+}
+function formatUTCMicroseconds(d, p) {
+  return formatUTCMilliseconds(d, p) + "000";
+}
+function formatUTCMonthNumber(d, p) {
+  return pad(d.getUTCMonth() + 1, p, 2);
+}
+function formatUTCMinutes(d, p) {
+  return pad(d.getUTCMinutes(), p, 2);
+}
+function formatUTCSeconds(d, p) {
+  return pad(d.getUTCSeconds(), p, 2);
+}
+function formatUTCWeekdayNumberMonday(d) {
+  var dow = d.getUTCDay();
+  return dow === 0 ? 7 : dow;
+}
+function formatUTCWeekNumberSunday(d, p) {
+  return pad(_index.utcSunday.count((0, _index.utcYear)(d) - 1, d), p, 2);
+}
+function UTCdISO(d) {
+  var day = d.getUTCDay();
+  return day >= 4 || day === 0 ? (0, _index.utcThursday)(d) : _index.utcThursday.ceil(d);
+}
+function formatUTCWeekNumberISO(d, p) {
+  d = UTCdISO(d);
+  return pad(_index.utcThursday.count((0, _index.utcYear)(d), d) + ((0, _index.utcYear)(d).getUTCDay() === 4), p, 2);
+}
+function formatUTCWeekdayNumberSunday(d) {
+  return d.getUTCDay();
+}
+function formatUTCWeekNumberMonday(d, p) {
+  return pad(_index.utcMonday.count((0, _index.utcYear)(d) - 1, d), p, 2);
+}
+function formatUTCYear(d, p) {
+  return pad(d.getUTCFullYear() % 100, p, 2);
+}
+function formatUTCYearISO(d, p) {
+  d = UTCdISO(d);
+  return pad(d.getUTCFullYear() % 100, p, 2);
+}
+function formatUTCFullYear(d, p) {
+  return pad(d.getUTCFullYear() % 10000, p, 4);
+}
+function formatUTCFullYearISO(d, p) {
+  var day = d.getUTCDay();
+  d = day >= 4 || day === 0 ? (0, _index.utcThursday)(d) : _index.utcThursday.ceil(d);
+  return pad(d.getUTCFullYear() % 10000, p, 4);
+}
+function formatUTCZone() {
+  return "+0000";
+}
+function formatLiteralPercent() {
+  return "%";
+}
+function formatUnixTimestamp(d) {
+  return +d;
+}
+function formatUnixTimestampSeconds(d) {
+  return Math.floor(+d / 1000);
+}
Index: node_modules/victory-vendor/lib-vendor/d3-time/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/day.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/day.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/day.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,12 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = exports.days = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _duration = require("./duration.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var day = (0, _interval.default)(date => date.setHours(0, 0, 0, 0), (date, step) => date.setDate(date.getDate() + step), (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration.durationMinute) / _duration.durationDay, date => date.getDate() - 1);
+var _default = exports.default = day;
+var days = exports.days = day.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/duration.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/duration.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/duration.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.durationYear = exports.durationWeek = exports.durationSecond = exports.durationMonth = exports.durationMinute = exports.durationHour = exports.durationDay = void 0;
+const durationSecond = exports.durationSecond = 1000;
+const durationMinute = exports.durationMinute = durationSecond * 60;
+const durationHour = exports.durationHour = durationMinute * 60;
+const durationDay = exports.durationDay = durationHour * 24;
+const durationWeek = exports.durationWeek = durationDay * 7;
+const durationMonth = exports.durationMonth = durationDay * 30;
+const durationYear = exports.durationYear = durationDay * 365;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/hour.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/hour.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/hour.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.hours = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _duration = require("./duration.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var hour = (0, _interval.default)(function (date) {
+  date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration.durationSecond - date.getMinutes() * _duration.durationMinute);
+}, function (date, step) {
+  date.setTime(+date + step * _duration.durationHour);
+}, function (start, end) {
+  return (end - start) / _duration.durationHour;
+}, function (date) {
+  return date.getHours();
+});
+var _default = exports.default = hour;
+var hours = exports.hours = hour.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,414 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "timeDay", {
+  enumerable: true,
+  get: function () {
+    return _day.default;
+  }
+});
+Object.defineProperty(exports, "timeDays", {
+  enumerable: true,
+  get: function () {
+    return _day.days;
+  }
+});
+Object.defineProperty(exports, "timeFriday", {
+  enumerable: true,
+  get: function () {
+    return _week.friday;
+  }
+});
+Object.defineProperty(exports, "timeFridays", {
+  enumerable: true,
+  get: function () {
+    return _week.fridays;
+  }
+});
+Object.defineProperty(exports, "timeHour", {
+  enumerable: true,
+  get: function () {
+    return _hour.default;
+  }
+});
+Object.defineProperty(exports, "timeHours", {
+  enumerable: true,
+  get: function () {
+    return _hour.hours;
+  }
+});
+Object.defineProperty(exports, "timeInterval", {
+  enumerable: true,
+  get: function () {
+    return _interval.default;
+  }
+});
+Object.defineProperty(exports, "timeMillisecond", {
+  enumerable: true,
+  get: function () {
+    return _millisecond.default;
+  }
+});
+Object.defineProperty(exports, "timeMilliseconds", {
+  enumerable: true,
+  get: function () {
+    return _millisecond.milliseconds;
+  }
+});
+Object.defineProperty(exports, "timeMinute", {
+  enumerable: true,
+  get: function () {
+    return _minute.default;
+  }
+});
+Object.defineProperty(exports, "timeMinutes", {
+  enumerable: true,
+  get: function () {
+    return _minute.minutes;
+  }
+});
+Object.defineProperty(exports, "timeMonday", {
+  enumerable: true,
+  get: function () {
+    return _week.monday;
+  }
+});
+Object.defineProperty(exports, "timeMondays", {
+  enumerable: true,
+  get: function () {
+    return _week.mondays;
+  }
+});
+Object.defineProperty(exports, "timeMonth", {
+  enumerable: true,
+  get: function () {
+    return _month.default;
+  }
+});
+Object.defineProperty(exports, "timeMonths", {
+  enumerable: true,
+  get: function () {
+    return _month.months;
+  }
+});
+Object.defineProperty(exports, "timeSaturday", {
+  enumerable: true,
+  get: function () {
+    return _week.saturday;
+  }
+});
+Object.defineProperty(exports, "timeSaturdays", {
+  enumerable: true,
+  get: function () {
+    return _week.saturdays;
+  }
+});
+Object.defineProperty(exports, "timeSecond", {
+  enumerable: true,
+  get: function () {
+    return _second.default;
+  }
+});
+Object.defineProperty(exports, "timeSeconds", {
+  enumerable: true,
+  get: function () {
+    return _second.seconds;
+  }
+});
+Object.defineProperty(exports, "timeSunday", {
+  enumerable: true,
+  get: function () {
+    return _week.sunday;
+  }
+});
+Object.defineProperty(exports, "timeSundays", {
+  enumerable: true,
+  get: function () {
+    return _week.sundays;
+  }
+});
+Object.defineProperty(exports, "timeThursday", {
+  enumerable: true,
+  get: function () {
+    return _week.thursday;
+  }
+});
+Object.defineProperty(exports, "timeThursdays", {
+  enumerable: true,
+  get: function () {
+    return _week.thursdays;
+  }
+});
+Object.defineProperty(exports, "timeTickInterval", {
+  enumerable: true,
+  get: function () {
+    return _ticks.timeTickInterval;
+  }
+});
+Object.defineProperty(exports, "timeTicks", {
+  enumerable: true,
+  get: function () {
+    return _ticks.timeTicks;
+  }
+});
+Object.defineProperty(exports, "timeTuesday", {
+  enumerable: true,
+  get: function () {
+    return _week.tuesday;
+  }
+});
+Object.defineProperty(exports, "timeTuesdays", {
+  enumerable: true,
+  get: function () {
+    return _week.tuesdays;
+  }
+});
+Object.defineProperty(exports, "timeWednesday", {
+  enumerable: true,
+  get: function () {
+    return _week.wednesday;
+  }
+});
+Object.defineProperty(exports, "timeWednesdays", {
+  enumerable: true,
+  get: function () {
+    return _week.wednesdays;
+  }
+});
+Object.defineProperty(exports, "timeWeek", {
+  enumerable: true,
+  get: function () {
+    return _week.sunday;
+  }
+});
+Object.defineProperty(exports, "timeWeeks", {
+  enumerable: true,
+  get: function () {
+    return _week.sundays;
+  }
+});
+Object.defineProperty(exports, "timeYear", {
+  enumerable: true,
+  get: function () {
+    return _year.default;
+  }
+});
+Object.defineProperty(exports, "timeYears", {
+  enumerable: true,
+  get: function () {
+    return _year.years;
+  }
+});
+Object.defineProperty(exports, "utcDay", {
+  enumerable: true,
+  get: function () {
+    return _utcDay.default;
+  }
+});
+Object.defineProperty(exports, "utcDays", {
+  enumerable: true,
+  get: function () {
+    return _utcDay.utcDays;
+  }
+});
+Object.defineProperty(exports, "utcFriday", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcFriday;
+  }
+});
+Object.defineProperty(exports, "utcFridays", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcFridays;
+  }
+});
+Object.defineProperty(exports, "utcHour", {
+  enumerable: true,
+  get: function () {
+    return _utcHour.default;
+  }
+});
+Object.defineProperty(exports, "utcHours", {
+  enumerable: true,
+  get: function () {
+    return _utcHour.utcHours;
+  }
+});
+Object.defineProperty(exports, "utcMillisecond", {
+  enumerable: true,
+  get: function () {
+    return _millisecond.default;
+  }
+});
+Object.defineProperty(exports, "utcMilliseconds", {
+  enumerable: true,
+  get: function () {
+    return _millisecond.milliseconds;
+  }
+});
+Object.defineProperty(exports, "utcMinute", {
+  enumerable: true,
+  get: function () {
+    return _utcMinute.default;
+  }
+});
+Object.defineProperty(exports, "utcMinutes", {
+  enumerable: true,
+  get: function () {
+    return _utcMinute.utcMinutes;
+  }
+});
+Object.defineProperty(exports, "utcMonday", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcMonday;
+  }
+});
+Object.defineProperty(exports, "utcMondays", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcMondays;
+  }
+});
+Object.defineProperty(exports, "utcMonth", {
+  enumerable: true,
+  get: function () {
+    return _utcMonth.default;
+  }
+});
+Object.defineProperty(exports, "utcMonths", {
+  enumerable: true,
+  get: function () {
+    return _utcMonth.utcMonths;
+  }
+});
+Object.defineProperty(exports, "utcSaturday", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcSaturday;
+  }
+});
+Object.defineProperty(exports, "utcSaturdays", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcSaturdays;
+  }
+});
+Object.defineProperty(exports, "utcSecond", {
+  enumerable: true,
+  get: function () {
+    return _second.default;
+  }
+});
+Object.defineProperty(exports, "utcSeconds", {
+  enumerable: true,
+  get: function () {
+    return _second.seconds;
+  }
+});
+Object.defineProperty(exports, "utcSunday", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcSunday;
+  }
+});
+Object.defineProperty(exports, "utcSundays", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcSundays;
+  }
+});
+Object.defineProperty(exports, "utcThursday", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcThursday;
+  }
+});
+Object.defineProperty(exports, "utcThursdays", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcThursdays;
+  }
+});
+Object.defineProperty(exports, "utcTickInterval", {
+  enumerable: true,
+  get: function () {
+    return _ticks.utcTickInterval;
+  }
+});
+Object.defineProperty(exports, "utcTicks", {
+  enumerable: true,
+  get: function () {
+    return _ticks.utcTicks;
+  }
+});
+Object.defineProperty(exports, "utcTuesday", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcTuesday;
+  }
+});
+Object.defineProperty(exports, "utcTuesdays", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcTuesdays;
+  }
+});
+Object.defineProperty(exports, "utcWednesday", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcWednesday;
+  }
+});
+Object.defineProperty(exports, "utcWednesdays", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcWednesdays;
+  }
+});
+Object.defineProperty(exports, "utcWeek", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcSunday;
+  }
+});
+Object.defineProperty(exports, "utcWeeks", {
+  enumerable: true,
+  get: function () {
+    return _utcWeek.utcSundays;
+  }
+});
+Object.defineProperty(exports, "utcYear", {
+  enumerable: true,
+  get: function () {
+    return _utcYear.default;
+  }
+});
+Object.defineProperty(exports, "utcYears", {
+  enumerable: true,
+  get: function () {
+    return _utcYear.utcYears;
+  }
+});
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _millisecond = _interopRequireWildcard(require("./millisecond.js"));
+var _second = _interopRequireWildcard(require("./second.js"));
+var _minute = _interopRequireWildcard(require("./minute.js"));
+var _hour = _interopRequireWildcard(require("./hour.js"));
+var _day = _interopRequireWildcard(require("./day.js"));
+var _week = require("./week.js");
+var _month = _interopRequireWildcard(require("./month.js"));
+var _year = _interopRequireWildcard(require("./year.js"));
+var _utcMinute = _interopRequireWildcard(require("./utcMinute.js"));
+var _utcHour = _interopRequireWildcard(require("./utcHour.js"));
+var _utcDay = _interopRequireWildcard(require("./utcDay.js"));
+var _utcWeek = require("./utcWeek.js");
+var _utcMonth = _interopRequireWildcard(require("./utcMonth.js"));
+var _utcYear = _interopRequireWildcard(require("./utcYear.js"));
+var _ticks = require("./ticks.js");
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/interval.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/interval.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/interval.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,65 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = newInterval;
+var t0 = new Date(),
+  t1 = new Date();
+function newInterval(floori, offseti, count, field) {
+  function interval(date) {
+    return floori(date = arguments.length === 0 ? new Date() : new Date(+date)), date;
+  }
+  interval.floor = function (date) {
+    return floori(date = new Date(+date)), date;
+  };
+  interval.ceil = function (date) {
+    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
+  };
+  interval.round = function (date) {
+    var d0 = interval(date),
+      d1 = interval.ceil(date);
+    return date - d0 < d1 - date ? d0 : d1;
+  };
+  interval.offset = function (date, step) {
+    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
+  };
+  interval.range = function (start, stop, step) {
+    var range = [],
+      previous;
+    start = interval.ceil(start);
+    step = step == null ? 1 : Math.floor(step);
+    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
+    do range.push(previous = new Date(+start)), offseti(start, step), floori(start); while (previous < start && start < stop);
+    return range;
+  };
+  interval.filter = function (test) {
+    return newInterval(function (date) {
+      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
+    }, function (date, step) {
+      if (date >= date) {
+        if (step < 0) while (++step <= 0) {
+          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
+        } else while (--step >= 0) {
+          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
+        }
+      }
+    });
+  };
+  if (count) {
+    interval.count = function (start, end) {
+      t0.setTime(+start), t1.setTime(+end);
+      floori(t0), floori(t1);
+      return Math.floor(count(t0, t1));
+    };
+    interval.every = function (step) {
+      step = Math.floor(step);
+      return !isFinite(step) || !(step > 0) ? null : !(step > 1) ? interval : interval.filter(field ? function (d) {
+        return field(d) % step === 0;
+      } : function (d) {
+        return interval.count(0, d) % step === 0;
+      });
+    };
+  }
+  return interval;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/millisecond.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/millisecond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/millisecond.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.milliseconds = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var millisecond = (0, _interval.default)(function () {
+  // noop
+}, function (date, step) {
+  date.setTime(+date + step);
+}, function (start, end) {
+  return end - start;
+});
+
+// An optimized implementation for this simple case.
+millisecond.every = function (k) {
+  k = Math.floor(k);
+  if (!isFinite(k) || !(k > 0)) return null;
+  if (!(k > 1)) return millisecond;
+  return (0, _interval.default)(function (date) {
+    date.setTime(Math.floor(date / k) * k);
+  }, function (date, step) {
+    date.setTime(+date + step * k);
+  }, function (start, end) {
+    return (end - start) / k;
+  });
+};
+var _default = exports.default = millisecond;
+var milliseconds = exports.milliseconds = millisecond.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/minute.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/minute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/minute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.minutes = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _duration = require("./duration.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var minute = (0, _interval.default)(function (date) {
+  date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration.durationSecond);
+}, function (date, step) {
+  date.setTime(+date + step * _duration.durationMinute);
+}, function (start, end) {
+  return (end - start) / _duration.durationMinute;
+}, function (date) {
+  return date.getMinutes();
+});
+var _default = exports.default = minute;
+var minutes = exports.minutes = minute.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/month.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/month.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/month.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.months = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var month = (0, _interval.default)(function (date) {
+  date.setDate(1);
+  date.setHours(0, 0, 0, 0);
+}, function (date, step) {
+  date.setMonth(date.getMonth() + step);
+}, function (start, end) {
+  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
+}, function (date) {
+  return date.getMonth();
+});
+var _default = exports.default = month;
+var months = exports.months = month.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/second.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/second.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/second.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.seconds = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _duration = require("./duration.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var second = (0, _interval.default)(function (date) {
+  date.setTime(date - date.getMilliseconds());
+}, function (date, step) {
+  date.setTime(+date + step * _duration.durationSecond);
+}, function (start, end) {
+  return (end - start) / _duration.durationSecond;
+}, function (date) {
+  return date.getUTCSeconds();
+});
+var _default = exports.default = second;
+var seconds = exports.seconds = second.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/ticks.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/ticks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/ticks.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,48 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.utcTicks = exports.utcTickInterval = exports.timeTicks = exports.timeTickInterval = void 0;
+var _index = require("../../../lib-vendor/d3-array/src/index.js");
+var _duration = require("./duration.js");
+var _millisecond = _interopRequireDefault(require("./millisecond.js"));
+var _second = _interopRequireDefault(require("./second.js"));
+var _minute = _interopRequireDefault(require("./minute.js"));
+var _hour = _interopRequireDefault(require("./hour.js"));
+var _day = _interopRequireDefault(require("./day.js"));
+var _week = require("./week.js");
+var _month = _interopRequireDefault(require("./month.js"));
+var _year = _interopRequireDefault(require("./year.js"));
+var _utcMinute = _interopRequireDefault(require("./utcMinute.js"));
+var _utcHour = _interopRequireDefault(require("./utcHour.js"));
+var _utcDay = _interopRequireDefault(require("./utcDay.js"));
+var _utcWeek = require("./utcWeek.js");
+var _utcMonth = _interopRequireDefault(require("./utcMonth.js"));
+var _utcYear = _interopRequireDefault(require("./utcYear.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function ticker(year, month, week, day, hour, minute) {
+  const tickIntervals = [[_second.default, 1, _duration.durationSecond], [_second.default, 5, 5 * _duration.durationSecond], [_second.default, 15, 15 * _duration.durationSecond], [_second.default, 30, 30 * _duration.durationSecond], [minute, 1, _duration.durationMinute], [minute, 5, 5 * _duration.durationMinute], [minute, 15, 15 * _duration.durationMinute], [minute, 30, 30 * _duration.durationMinute], [hour, 1, _duration.durationHour], [hour, 3, 3 * _duration.durationHour], [hour, 6, 6 * _duration.durationHour], [hour, 12, 12 * _duration.durationHour], [day, 1, _duration.durationDay], [day, 2, 2 * _duration.durationDay], [week, 1, _duration.durationWeek], [month, 1, _duration.durationMonth], [month, 3, 3 * _duration.durationMonth], [year, 1, _duration.durationYear]];
+  function ticks(start, stop, count) {
+    const reverse = stop < start;
+    if (reverse) [start, stop] = [stop, start];
+    const interval = count && typeof count.range === "function" ? count : tickInterval(start, stop, count);
+    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop
+    return reverse ? ticks.reverse() : ticks;
+  }
+  function tickInterval(start, stop, count) {
+    const target = Math.abs(stop - start) / count;
+    const i = (0, _index.bisector)(([,, step]) => step).right(tickIntervals, target);
+    if (i === tickIntervals.length) return year.every((0, _index.tickStep)(start / _duration.durationYear, stop / _duration.durationYear, count));
+    if (i === 0) return _millisecond.default.every(Math.max((0, _index.tickStep)(start, stop, count), 1));
+    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
+    return t.every(step);
+  }
+  return [ticks, tickInterval];
+}
+const [utcTicks, utcTickInterval] = ticker(_utcYear.default, _utcMonth.default, _utcWeek.utcSunday, _utcDay.default, _utcHour.default, _utcMinute.default);
+exports.utcTickInterval = utcTickInterval;
+exports.utcTicks = utcTicks;
+const [timeTicks, timeTickInterval] = ticker(_year.default, _month.default, _week.sunday, _day.default, _hour.default, _minute.default);
+exports.timeTickInterval = timeTickInterval;
+exports.timeTicks = timeTicks;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/utcDay.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/utcDay.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/utcDay.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.utcDays = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _duration = require("./duration.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var utcDay = (0, _interval.default)(function (date) {
+  date.setUTCHours(0, 0, 0, 0);
+}, function (date, step) {
+  date.setUTCDate(date.getUTCDate() + step);
+}, function (start, end) {
+  return (end - start) / _duration.durationDay;
+}, function (date) {
+  return date.getUTCDate() - 1;
+});
+var _default = exports.default = utcDay;
+var utcDays = exports.utcDays = utcDay.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/utcHour.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/utcHour.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/utcHour.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.utcHours = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _duration = require("./duration.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var utcHour = (0, _interval.default)(function (date) {
+  date.setUTCMinutes(0, 0, 0);
+}, function (date, step) {
+  date.setTime(+date + step * _duration.durationHour);
+}, function (start, end) {
+  return (end - start) / _duration.durationHour;
+}, function (date) {
+  return date.getUTCHours();
+});
+var _default = exports.default = utcHour;
+var utcHours = exports.utcHours = utcHour.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/utcMinute.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/utcMinute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/utcMinute.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.utcMinutes = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _duration = require("./duration.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var utcMinute = (0, _interval.default)(function (date) {
+  date.setUTCSeconds(0, 0);
+}, function (date, step) {
+  date.setTime(+date + step * _duration.durationMinute);
+}, function (start, end) {
+  return (end - start) / _duration.durationMinute;
+}, function (date) {
+  return date.getUTCMinutes();
+});
+var _default = exports.default = utcMinute;
+var utcMinutes = exports.utcMinutes = utcMinute.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/utcMonth.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/utcMonth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/utcMonth.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.utcMonths = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var utcMonth = (0, _interval.default)(function (date) {
+  date.setUTCDate(1);
+  date.setUTCHours(0, 0, 0, 0);
+}, function (date, step) {
+  date.setUTCMonth(date.getUTCMonth() + step);
+}, function (start, end) {
+  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
+}, function (date) {
+  return date.getUTCMonth();
+});
+var _default = exports.default = utcMonth;
+var utcMonths = exports.utcMonths = utcMonth.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/utcWeek.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/utcWeek.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/utcWeek.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.utcWednesdays = exports.utcWednesday = exports.utcTuesdays = exports.utcTuesday = exports.utcThursdays = exports.utcThursday = exports.utcSundays = exports.utcSunday = exports.utcSaturdays = exports.utcSaturday = exports.utcMondays = exports.utcMonday = exports.utcFridays = exports.utcFriday = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _duration = require("./duration.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function utcWeekday(i) {
+  return (0, _interval.default)(function (date) {
+    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
+    date.setUTCHours(0, 0, 0, 0);
+  }, function (date, step) {
+    date.setUTCDate(date.getUTCDate() + step * 7);
+  }, function (start, end) {
+    return (end - start) / _duration.durationWeek;
+  });
+}
+var utcSunday = exports.utcSunday = utcWeekday(0);
+var utcMonday = exports.utcMonday = utcWeekday(1);
+var utcTuesday = exports.utcTuesday = utcWeekday(2);
+var utcWednesday = exports.utcWednesday = utcWeekday(3);
+var utcThursday = exports.utcThursday = utcWeekday(4);
+var utcFriday = exports.utcFriday = utcWeekday(5);
+var utcSaturday = exports.utcSaturday = utcWeekday(6);
+var utcSundays = exports.utcSundays = utcSunday.range;
+var utcMondays = exports.utcMondays = utcMonday.range;
+var utcTuesdays = exports.utcTuesdays = utcTuesday.range;
+var utcWednesdays = exports.utcWednesdays = utcWednesday.range;
+var utcThursdays = exports.utcThursdays = utcThursday.range;
+var utcFridays = exports.utcFridays = utcFriday.range;
+var utcSaturdays = exports.utcSaturdays = utcSaturday.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/utcYear.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/utcYear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/utcYear.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.utcYears = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var utcYear = (0, _interval.default)(function (date) {
+  date.setUTCMonth(0, 1);
+  date.setUTCHours(0, 0, 0, 0);
+}, function (date, step) {
+  date.setUTCFullYear(date.getUTCFullYear() + step);
+}, function (start, end) {
+  return end.getUTCFullYear() - start.getUTCFullYear();
+}, function (date) {
+  return date.getUTCFullYear();
+});
+
+// An optimized implementation for this simple case.
+utcYear.every = function (k) {
+  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : (0, _interval.default)(function (date) {
+    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
+    date.setUTCMonth(0, 1);
+    date.setUTCHours(0, 0, 0, 0);
+  }, function (date, step) {
+    date.setUTCFullYear(date.getUTCFullYear() + step * k);
+  });
+};
+var _default = exports.default = utcYear;
+var utcYears = exports.utcYears = utcYear.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/week.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/week.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/week.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.wednesdays = exports.wednesday = exports.tuesdays = exports.tuesday = exports.thursdays = exports.thursday = exports.sundays = exports.sunday = exports.saturdays = exports.saturday = exports.mondays = exports.monday = exports.fridays = exports.friday = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+var _duration = require("./duration.js");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function weekday(i) {
+  return (0, _interval.default)(function (date) {
+    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
+    date.setHours(0, 0, 0, 0);
+  }, function (date, step) {
+    date.setDate(date.getDate() + step * 7);
+  }, function (start, end) {
+    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration.durationMinute) / _duration.durationWeek;
+  });
+}
+var sunday = exports.sunday = weekday(0);
+var monday = exports.monday = weekday(1);
+var tuesday = exports.tuesday = weekday(2);
+var wednesday = exports.wednesday = weekday(3);
+var thursday = exports.thursday = weekday(4);
+var friday = exports.friday = weekday(5);
+var saturday = exports.saturday = weekday(6);
+var sundays = exports.sundays = sunday.range;
+var mondays = exports.mondays = monday.range;
+var tuesdays = exports.tuesdays = tuesday.range;
+var wednesdays = exports.wednesdays = wednesday.range;
+var thursdays = exports.thursdays = thursday.range;
+var fridays = exports.fridays = friday.range;
+var saturdays = exports.saturdays = saturday.range;
Index: node_modules/victory-vendor/lib-vendor/d3-time/src/year.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-time/src/year.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-time/src/year.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.years = exports.default = void 0;
+var _interval = _interopRequireDefault(require("./interval.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var year = (0, _interval.default)(function (date) {
+  date.setMonth(0, 1);
+  date.setHours(0, 0, 0, 0);
+}, function (date, step) {
+  date.setFullYear(date.getFullYear() + step);
+}, function (start, end) {
+  return end.getFullYear() - start.getFullYear();
+}, function (date) {
+  return date.getFullYear();
+});
+
+// An optimized implementation for this simple case.
+year.every = function (k) {
+  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : (0, _interval.default)(function (date) {
+    date.setFullYear(Math.floor(date.getFullYear() / k) * k);
+    date.setMonth(0, 1);
+    date.setHours(0, 0, 0, 0);
+  }, function (date, step) {
+    date.setFullYear(date.getFullYear() + step * k);
+  });
+};
+var _default = exports.default = year;
+var years = exports.years = year.range;
Index: node_modules/victory-vendor/lib-vendor/d3-timer/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-timer/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-timer/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-timer/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-timer/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-timer/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,39 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "interval", {
+  enumerable: true,
+  get: function () {
+    return _interval.default;
+  }
+});
+Object.defineProperty(exports, "now", {
+  enumerable: true,
+  get: function () {
+    return _timer.now;
+  }
+});
+Object.defineProperty(exports, "timeout", {
+  enumerable: true,
+  get: function () {
+    return _timeout.default;
+  }
+});
+Object.defineProperty(exports, "timer", {
+  enumerable: true,
+  get: function () {
+    return _timer.timer;
+  }
+});
+Object.defineProperty(exports, "timerFlush", {
+  enumerable: true,
+  get: function () {
+    return _timer.timerFlush;
+  }
+});
+var _timer = require("./timer.js");
+var _timeout = _interopRequireDefault(require("./timeout.js"));
+var _interval = _interopRequireDefault(require("./interval.js"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
Index: node_modules/victory-vendor/lib-vendor/d3-timer/src/interval.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-timer/src/interval.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-timer/src/interval.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,23 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _timer = require("./timer.js");
+function _default(callback, delay, time) {
+  var t = new _timer.Timer(),
+    total = delay;
+  if (delay == null) return t.restart(callback, delay, time), t;
+  t._restart = t.restart;
+  t.restart = function (callback, delay, time) {
+    delay = +delay, time = time == null ? (0, _timer.now)() : +time;
+    t._restart(function tick(elapsed) {
+      elapsed += total;
+      t._restart(tick, total += delay, time);
+      callback(elapsed);
+    }, delay, time);
+  };
+  t.restart(callback, delay, time);
+  return t;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-timer/src/timeout.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-timer/src/timeout.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-timer/src/timeout.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,16 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _timer = require("./timer.js");
+function _default(callback, delay, time) {
+  var t = new _timer.Timer();
+  delay = delay == null ? 0 : +delay;
+  t.restart(elapsed => {
+    t.stop();
+    callback(elapsed + delay);
+  }, delay, time);
+  return t;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-timer/src/timer.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-timer/src/timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-timer/src/timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,117 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Timer = Timer;
+exports.now = now;
+exports.timer = timer;
+exports.timerFlush = timerFlush;
+var frame = 0,
+  // is an animation frame pending?
+  timeout = 0,
+  // is a timeout pending?
+  interval = 0,
+  // are any timers active?
+  pokeDelay = 1000,
+  // how frequently we check for clock skew
+  taskHead,
+  taskTail,
+  clockLast = 0,
+  clockNow = 0,
+  clockSkew = 0,
+  clock = typeof performance === "object" && performance.now ? performance : Date,
+  setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function (f) {
+    setTimeout(f, 17);
+  };
+function now() {
+  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+}
+function clearNow() {
+  clockNow = 0;
+}
+function Timer() {
+  this._call = this._time = this._next = null;
+}
+Timer.prototype = timer.prototype = {
+  constructor: Timer,
+  restart: function (callback, delay, time) {
+    if (typeof callback !== "function") throw new TypeError("callback is not a function");
+    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+    if (!this._next && taskTail !== this) {
+      if (taskTail) taskTail._next = this;else taskHead = this;
+      taskTail = this;
+    }
+    this._call = callback;
+    this._time = time;
+    sleep();
+  },
+  stop: function () {
+    if (this._call) {
+      this._call = null;
+      this._time = Infinity;
+      sleep();
+    }
+  }
+};
+function timer(callback, delay, time) {
+  var t = new Timer();
+  t.restart(callback, delay, time);
+  return t;
+}
+function timerFlush() {
+  now(); // Get the current time, if not already set.
+  ++frame; // Pretend we’ve set an alarm, if we haven’t already.
+  var t = taskHead,
+    e;
+  while (t) {
+    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);
+    t = t._next;
+  }
+  --frame;
+}
+function wake() {
+  clockNow = (clockLast = clock.now()) + clockSkew;
+  frame = timeout = 0;
+  try {
+    timerFlush();
+  } finally {
+    frame = 0;
+    nap();
+    clockNow = 0;
+  }
+}
+function poke() {
+  var now = clock.now(),
+    delay = now - clockLast;
+  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
+}
+function nap() {
+  var t0,
+    t1 = taskHead,
+    t2,
+    time = Infinity;
+  while (t1) {
+    if (t1._call) {
+      if (time > t1._time) time = t1._time;
+      t0 = t1, t1 = t1._next;
+    } else {
+      t2 = t1._next, t1._next = null;
+      t1 = t0 ? t0._next = t2 : taskHead = t2;
+    }
+  }
+  taskTail = t0;
+  sleep(time);
+}
+function sleep(time) {
+  if (frame) return; // Soonest alarm already set, or will be.
+  if (timeout) timeout = clearTimeout(timeout);
+  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
+  if (delay > 24) {
+    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
+    if (interval) interval = clearInterval(interval);
+  } else {
+    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
+    frame = 1, setFrame(wake);
+  }
+}
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,50 @@
+Copyright 2010-2016 Mike Bostock
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the author nor the names of contributors may be used to
+  endorse or promote products derived from this software without specific prior
+  written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Copyright (C) 2010-2013 Raymond Hill
+https://github.com/gorhill/Javascript-Voronoi
+
+Licensed under The MIT License
+http://en.wikipedia.org/wiki/MIT_License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Beach.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Beach.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Beach.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,165 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.addBeach = addBeach;
+exports.removeBeach = removeBeach;
+var _RedBlackTree = require("./RedBlackTree");
+var _Cell = require("./Cell");
+var _Circle = require("./Circle");
+var _Edge = require("./Edge");
+var _Diagram = require("./Diagram");
+var beachPool = [];
+function Beach() {
+  (0, _RedBlackTree.RedBlackNode)(this);
+  this.edge = this.site = this.circle = null;
+}
+function createBeach(site) {
+  var beach = beachPool.pop() || new Beach();
+  beach.site = site;
+  return beach;
+}
+function detachBeach(beach) {
+  (0, _Circle.detachCircle)(beach);
+  _Diagram.beaches.remove(beach);
+  beachPool.push(beach);
+  (0, _RedBlackTree.RedBlackNode)(beach);
+}
+function removeBeach(beach) {
+  var circle = beach.circle,
+    x = circle.x,
+    y = circle.cy,
+    vertex = [x, y],
+    previous = beach.P,
+    next = beach.N,
+    disappearing = [beach];
+  detachBeach(beach);
+  var lArc = previous;
+  while (lArc.circle && Math.abs(x - lArc.circle.x) < _Diagram.epsilon && Math.abs(y - lArc.circle.cy) < _Diagram.epsilon) {
+    previous = lArc.P;
+    disappearing.unshift(lArc);
+    detachBeach(lArc);
+    lArc = previous;
+  }
+  disappearing.unshift(lArc);
+  (0, _Circle.detachCircle)(lArc);
+  var rArc = next;
+  while (rArc.circle && Math.abs(x - rArc.circle.x) < _Diagram.epsilon && Math.abs(y - rArc.circle.cy) < _Diagram.epsilon) {
+    next = rArc.N;
+    disappearing.push(rArc);
+    detachBeach(rArc);
+    rArc = next;
+  }
+  disappearing.push(rArc);
+  (0, _Circle.detachCircle)(rArc);
+  var nArcs = disappearing.length,
+    iArc;
+  for (iArc = 1; iArc < nArcs; ++iArc) {
+    rArc = disappearing[iArc];
+    lArc = disappearing[iArc - 1];
+    (0, _Edge.setEdgeEnd)(rArc.edge, lArc.site, rArc.site, vertex);
+  }
+  lArc = disappearing[0];
+  rArc = disappearing[nArcs - 1];
+  rArc.edge = (0, _Edge.createEdge)(lArc.site, rArc.site, null, vertex);
+  (0, _Circle.attachCircle)(lArc);
+  (0, _Circle.attachCircle)(rArc);
+}
+function addBeach(site) {
+  var x = site[0],
+    directrix = site[1],
+    lArc,
+    rArc,
+    dxl,
+    dxr,
+    node = _Diagram.beaches._;
+  while (node) {
+    dxl = leftBreakPoint(node, directrix) - x;
+    if (dxl > _Diagram.epsilon) node = node.L;else {
+      dxr = x - rightBreakPoint(node, directrix);
+      if (dxr > _Diagram.epsilon) {
+        if (!node.R) {
+          lArc = node;
+          break;
+        }
+        node = node.R;
+      } else {
+        if (dxl > -_Diagram.epsilon) {
+          lArc = node.P;
+          rArc = node;
+        } else if (dxr > -_Diagram.epsilon) {
+          lArc = node;
+          rArc = node.N;
+        } else {
+          lArc = rArc = node;
+        }
+        break;
+      }
+    }
+  }
+  (0, _Cell.createCell)(site);
+  var newArc = createBeach(site);
+  _Diagram.beaches.insert(lArc, newArc);
+  if (!lArc && !rArc) return;
+  if (lArc === rArc) {
+    (0, _Circle.detachCircle)(lArc);
+    rArc = createBeach(lArc.site);
+    _Diagram.beaches.insert(newArc, rArc);
+    newArc.edge = rArc.edge = (0, _Edge.createEdge)(lArc.site, newArc.site);
+    (0, _Circle.attachCircle)(lArc);
+    (0, _Circle.attachCircle)(rArc);
+    return;
+  }
+  if (!rArc) {
+    // && lArc
+    newArc.edge = (0, _Edge.createEdge)(lArc.site, newArc.site);
+    return;
+  }
+
+  // else lArc !== rArc
+  (0, _Circle.detachCircle)(lArc);
+  (0, _Circle.detachCircle)(rArc);
+  var lSite = lArc.site,
+    ax = lSite[0],
+    ay = lSite[1],
+    bx = site[0] - ax,
+    by = site[1] - ay,
+    rSite = rArc.site,
+    cx = rSite[0] - ax,
+    cy = rSite[1] - ay,
+    d = 2 * (bx * cy - by * cx),
+    hb = bx * bx + by * by,
+    hc = cx * cx + cy * cy,
+    vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
+  (0, _Edge.setEdgeEnd)(rArc.edge, lSite, rSite, vertex);
+  newArc.edge = (0, _Edge.createEdge)(lSite, site, null, vertex);
+  rArc.edge = (0, _Edge.createEdge)(site, rSite, null, vertex);
+  (0, _Circle.attachCircle)(lArc);
+  (0, _Circle.attachCircle)(rArc);
+}
+function leftBreakPoint(arc, directrix) {
+  var site = arc.site,
+    rfocx = site[0],
+    rfocy = site[1],
+    pby2 = rfocy - directrix;
+  if (!pby2) return rfocx;
+  var lArc = arc.P;
+  if (!lArc) return -Infinity;
+  site = lArc.site;
+  var lfocx = site[0],
+    lfocy = site[1],
+    plby2 = lfocy - directrix;
+  if (!plby2) return lfocx;
+  var hl = lfocx - rfocx,
+    aby2 = 1 / pby2 - 1 / plby2,
+    b = hl / plby2;
+  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
+  return (rfocx + lfocx) / 2;
+}
+function rightBreakPoint(arc, directrix) {
+  var rArc = arc.N;
+  if (rArc) return leftBreakPoint(rArc, directrix);
+  var site = arc.site;
+  return site[1] === directrix ? site[0] : Infinity;
+}
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Cell.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Cell.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Cell.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,123 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.cellHalfedgeEnd = cellHalfedgeEnd;
+exports.cellHalfedgeStart = cellHalfedgeStart;
+exports.clipCells = clipCells;
+exports.createCell = createCell;
+exports.sortCellHalfedges = sortCellHalfedges;
+var _Edge = require("./Edge");
+var _Diagram = require("./Diagram");
+function createCell(site) {
+  return _Diagram.cells[site.index] = {
+    site: site,
+    halfedges: []
+  };
+}
+function cellHalfedgeAngle(cell, edge) {
+  var site = cell.site,
+    va = edge.left,
+    vb = edge.right;
+  if (site === vb) vb = va, va = site;
+  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
+  if (site === va) va = edge[1], vb = edge[0];else va = edge[0], vb = edge[1];
+  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
+}
+function cellHalfedgeStart(cell, edge) {
+  return edge[+(edge.left !== cell.site)];
+}
+function cellHalfedgeEnd(cell, edge) {
+  return edge[+(edge.left === cell.site)];
+}
+function sortCellHalfedges() {
+  for (var i = 0, n = _Diagram.cells.length, cell, halfedges, j, m; i < n; ++i) {
+    if ((cell = _Diagram.cells[i]) && (m = (halfedges = cell.halfedges).length)) {
+      var index = new Array(m),
+        array = new Array(m);
+      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, _Diagram.edges[halfedges[j]]);
+      index.sort(function (i, j) {
+        return array[j] - array[i];
+      });
+      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
+      for (j = 0; j < m; ++j) halfedges[j] = array[j];
+    }
+  }
+}
+function clipCells(x0, y0, x1, y1) {
+  var nCells = _Diagram.cells.length,
+    iCell,
+    cell,
+    site,
+    iHalfedge,
+    halfedges,
+    nHalfedges,
+    start,
+    startX,
+    startY,
+    end,
+    endX,
+    endY,
+    cover = true;
+  for (iCell = 0; iCell < nCells; ++iCell) {
+    if (cell = _Diagram.cells[iCell]) {
+      site = cell.site;
+      halfedges = cell.halfedges;
+      iHalfedge = halfedges.length;
+
+      // Remove any dangling clipped edges.
+      while (iHalfedge--) {
+        if (!_Diagram.edges[halfedges[iHalfedge]]) {
+          halfedges.splice(iHalfedge, 1);
+        }
+      }
+
+      // Insert any border edges as necessary.
+      iHalfedge = 0, nHalfedges = halfedges.length;
+      while (iHalfedge < nHalfedges) {
+        end = cellHalfedgeEnd(cell, _Diagram.edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
+        start = cellHalfedgeStart(cell, _Diagram.edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
+        if (Math.abs(endX - startX) > _Diagram.epsilon || Math.abs(endY - startY) > _Diagram.epsilon) {
+          halfedges.splice(iHalfedge, 0, _Diagram.edges.push((0, _Edge.createBorderEdge)(site, end, Math.abs(endX - x0) < _Diagram.epsilon && y1 - endY > _Diagram.epsilon ? [x0, Math.abs(startX - x0) < _Diagram.epsilon ? startY : y1] : Math.abs(endY - y1) < _Diagram.epsilon && x1 - endX > _Diagram.epsilon ? [Math.abs(startY - y1) < _Diagram.epsilon ? startX : x1, y1] : Math.abs(endX - x1) < _Diagram.epsilon && endY - y0 > _Diagram.epsilon ? [x1, Math.abs(startX - x1) < _Diagram.epsilon ? startY : y0] : Math.abs(endY - y0) < _Diagram.epsilon && endX - x0 > _Diagram.epsilon ? [Math.abs(startY - y0) < _Diagram.epsilon ? startX : x0, y0] : null)) - 1);
+          ++nHalfedges;
+        }
+      }
+      if (nHalfedges) cover = false;
+    }
+  }
+
+  // If there weren’t any edges, have the closest site cover the extent.
+  // It doesn’t matter which corner of the extent we measure!
+  if (cover) {
+    var dx,
+      dy,
+      d2,
+      dc = Infinity;
+    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
+      if (cell = _Diagram.cells[iCell]) {
+        site = cell.site;
+        dx = site[0] - x0;
+        dy = site[1] - y0;
+        d2 = dx * dx + dy * dy;
+        if (d2 < dc) dc = d2, cover = cell;
+      }
+    }
+    if (cover) {
+      var v00 = [x0, y0],
+        v01 = [x0, y1],
+        v11 = [x1, y1],
+        v10 = [x1, y0];
+      cover.halfedges.push(_Diagram.edges.push((0, _Edge.createBorderEdge)(site = cover.site, v00, v01)) - 1, _Diagram.edges.push((0, _Edge.createBorderEdge)(site, v01, v11)) - 1, _Diagram.edges.push((0, _Edge.createBorderEdge)(site, v11, v10)) - 1, _Diagram.edges.push((0, _Edge.createBorderEdge)(site, v10, v00)) - 1);
+    }
+  }
+
+  // Lastly delete any cells with no edges; these were entirely clipped.
+  for (iCell = 0; iCell < nCells; ++iCell) {
+    if (cell = _Diagram.cells[iCell]) {
+      if (!cell.halfedges.length) {
+        delete _Diagram.cells[iCell];
+      }
+    }
+  }
+}
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Circle.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Circle.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,71 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.attachCircle = attachCircle;
+exports.detachCircle = detachCircle;
+exports.firstCircle = void 0;
+var _RedBlackTree = require("./RedBlackTree");
+var _Diagram = require("./Diagram");
+var circlePool = [];
+var firstCircle;
+function Circle() {
+  (0, _RedBlackTree.RedBlackNode)(this);
+  this.x = this.y = this.arc = this.site = this.cy = null;
+}
+function attachCircle(arc) {
+  var lArc = arc.P,
+    rArc = arc.N;
+  if (!lArc || !rArc) return;
+  var lSite = lArc.site,
+    cSite = arc.site,
+    rSite = rArc.site;
+  if (lSite === rSite) return;
+  var bx = cSite[0],
+    by = cSite[1],
+    ax = lSite[0] - bx,
+    ay = lSite[1] - by,
+    cx = rSite[0] - bx,
+    cy = rSite[1] - by;
+  var d = 2 * (ax * cy - ay * cx);
+  if (d >= -_Diagram.epsilon2) return;
+  var ha = ax * ax + ay * ay,
+    hc = cx * cx + cy * cy,
+    x = (cy * ha - ay * hc) / d,
+    y = (ax * hc - cx * ha) / d;
+  var circle = circlePool.pop() || new Circle();
+  circle.arc = arc;
+  circle.site = cSite;
+  circle.x = x + bx;
+  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
+
+  arc.circle = circle;
+  var before = null,
+    node = _Diagram.circles._;
+  while (node) {
+    if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {
+      if (node.L) node = node.L;else {
+        before = node.P;
+        break;
+      }
+    } else {
+      if (node.R) node = node.R;else {
+        before = node;
+        break;
+      }
+    }
+  }
+  _Diagram.circles.insert(before, circle);
+  if (!before) exports.firstCircle = firstCircle = circle;
+}
+function detachCircle(arc) {
+  var circle = arc.circle;
+  if (circle) {
+    if (!circle.P) exports.firstCircle = firstCircle = circle.N;
+    _Diagram.circles.remove(circle);
+    circlePool.push(circle);
+    (0, _RedBlackTree.RedBlackNode)(circle);
+    arc.circle = null;
+  }
+}
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Diagram.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Diagram.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Diagram.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,137 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.circles = exports.cells = exports.beaches = void 0;
+exports.default = Diagram;
+exports.epsilon2 = exports.epsilon = exports.edges = void 0;
+var _Beach = require("./Beach");
+var _Cell = require("./Cell");
+var _Circle = require("./Circle");
+var _Edge = require("./Edge");
+var _RedBlackTree = _interopRequireDefault(require("./RedBlackTree"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var epsilon = exports.epsilon = 1e-6;
+var epsilon2 = exports.epsilon2 = 1e-12;
+var beaches;
+var cells;
+var circles;
+var edges;
+function triangleArea(a, b, c) {
+  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
+}
+function lexicographic(a, b) {
+  return b[1] - a[1] || b[0] - a[0];
+}
+function Diagram(sites, extent) {
+  var site = sites.sort(lexicographic).pop(),
+    x,
+    y,
+    circle;
+  exports.edges = edges = [];
+  exports.cells = cells = new Array(sites.length);
+  exports.beaches = beaches = new _RedBlackTree.default();
+  exports.circles = circles = new _RedBlackTree.default();
+  while (true) {
+    circle = _Circle.firstCircle;
+    if (site && (!circle || site[1] < circle.y || site[1] === circle.y && site[0] < circle.x)) {
+      if (site[0] !== x || site[1] !== y) {
+        (0, _Beach.addBeach)(site);
+        x = site[0], y = site[1];
+      }
+      site = sites.pop();
+    } else if (circle) {
+      (0, _Beach.removeBeach)(circle.arc);
+    } else {
+      break;
+    }
+  }
+  (0, _Cell.sortCellHalfedges)();
+  if (extent) {
+    var x0 = +extent[0][0],
+      y0 = +extent[0][1],
+      x1 = +extent[1][0],
+      y1 = +extent[1][1];
+    (0, _Edge.clipEdges)(x0, y0, x1, y1);
+    (0, _Cell.clipCells)(x0, y0, x1, y1);
+  }
+  this.edges = edges;
+  this.cells = cells;
+  exports.beaches = beaches = exports.circles = circles = exports.edges = edges = exports.cells = cells = null;
+}
+Diagram.prototype = {
+  constructor: Diagram,
+  polygons: function () {
+    var edges = this.edges;
+    return this.cells.map(function (cell) {
+      var polygon = cell.halfedges.map(function (i) {
+        return (0, _Cell.cellHalfedgeStart)(cell, edges[i]);
+      });
+      polygon.data = cell.site.data;
+      return polygon;
+    });
+  },
+  triangles: function () {
+    var triangles = [],
+      edges = this.edges;
+    this.cells.forEach(function (cell, i) {
+      if (!(m = (halfedges = cell.halfedges).length)) return;
+      var site = cell.site,
+        halfedges,
+        j = -1,
+        m,
+        s0,
+        e1 = edges[halfedges[m - 1]],
+        s1 = e1.left === site ? e1.right : e1.left;
+      while (++j < m) {
+        s0 = s1;
+        e1 = edges[halfedges[j]];
+        s1 = e1.left === site ? e1.right : e1.left;
+        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
+          triangles.push([site.data, s0.data, s1.data]);
+        }
+      }
+    });
+    return triangles;
+  },
+  links: function () {
+    return this.edges.filter(function (edge) {
+      return edge.right;
+    }).map(function (edge) {
+      return {
+        source: edge.left.data,
+        target: edge.right.data
+      };
+    });
+  },
+  find: function (x, y, radius) {
+    var that = this,
+      i0,
+      i1 = that._found || 0,
+      n = that.cells.length,
+      cell;
+
+    // Use the previously-found cell, or start with an arbitrary one.
+    while (!(cell = that.cells[i1])) if (++i1 >= n) return null;
+    var dx = x - cell.site[0],
+      dy = y - cell.site[1],
+      d2 = dx * dx + dy * dy;
+
+    // Traverse the half-edges to find a closer cell, if any.
+    do {
+      cell = that.cells[i0 = i1], i1 = null;
+      cell.halfedges.forEach(function (e) {
+        var edge = that.edges[e],
+          v = edge.left;
+        if ((v === cell.site || !v) && !(v = edge.right)) return;
+        var vx = x - v[0],
+          vy = y - v[1],
+          v2 = vx * vx + vy * vy;
+        if (v2 < d2) d2 = v2, i1 = v.index;
+      });
+    } while (i1 !== null);
+    that._found = i0;
+    return radius == null || d2 <= radius * radius ? cell.site : null;
+  }
+};
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Edge.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Edge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/Edge.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,154 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.clipEdges = clipEdges;
+exports.createBorderEdge = createBorderEdge;
+exports.createEdge = createEdge;
+exports.setEdgeEnd = setEdgeEnd;
+var _Diagram = require("./Diagram");
+function createEdge(left, right, v0, v1) {
+  var edge = [null, null],
+    index = _Diagram.edges.push(edge) - 1;
+  edge.left = left;
+  edge.right = right;
+  if (v0) setEdgeEnd(edge, left, right, v0);
+  if (v1) setEdgeEnd(edge, right, left, v1);
+  _Diagram.cells[left.index].halfedges.push(index);
+  _Diagram.cells[right.index].halfedges.push(index);
+  return edge;
+}
+function createBorderEdge(left, v0, v1) {
+  var edge = [v0, v1];
+  edge.left = left;
+  return edge;
+}
+function setEdgeEnd(edge, left, right, vertex) {
+  if (!edge[0] && !edge[1]) {
+    edge[0] = vertex;
+    edge.left = left;
+    edge.right = right;
+  } else if (edge.left === right) {
+    edge[1] = vertex;
+  } else {
+    edge[0] = vertex;
+  }
+}
+
+// Liang–Barsky line clipping.
+function clipEdge(edge, x0, y0, x1, y1) {
+  var a = edge[0],
+    b = edge[1],
+    ax = a[0],
+    ay = a[1],
+    bx = b[0],
+    by = b[1],
+    t0 = 0,
+    t1 = 1,
+    dx = bx - ax,
+    dy = by - ay,
+    r;
+  r = x0 - ax;
+  if (!dx && r > 0) return;
+  r /= dx;
+  if (dx < 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  } else if (dx > 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  }
+  r = x1 - ax;
+  if (!dx && r < 0) return;
+  r /= dx;
+  if (dx < 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  } else if (dx > 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  }
+  r = y0 - ay;
+  if (!dy && r > 0) return;
+  r /= dy;
+  if (dy < 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  } else if (dy > 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  }
+  r = y1 - ay;
+  if (!dy && r < 0) return;
+  r /= dy;
+  if (dy < 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  } else if (dy > 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  }
+  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
+
+  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
+  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
+  return true;
+}
+function connectEdge(edge, x0, y0, x1, y1) {
+  var v1 = edge[1];
+  if (v1) return true;
+  var v0 = edge[0],
+    left = edge.left,
+    right = edge.right,
+    lx = left[0],
+    ly = left[1],
+    rx = right[0],
+    ry = right[1],
+    fx = (lx + rx) / 2,
+    fy = (ly + ry) / 2,
+    fm,
+    fb;
+  if (ry === ly) {
+    if (fx < x0 || fx >= x1) return;
+    if (lx > rx) {
+      if (!v0) v0 = [fx, y0];else if (v0[1] >= y1) return;
+      v1 = [fx, y1];
+    } else {
+      if (!v0) v0 = [fx, y1];else if (v0[1] < y0) return;
+      v1 = [fx, y0];
+    }
+  } else {
+    fm = (lx - rx) / (ry - ly);
+    fb = fy - fm * fx;
+    if (fm < -1 || fm > 1) {
+      if (lx > rx) {
+        if (!v0) v0 = [(y0 - fb) / fm, y0];else if (v0[1] >= y1) return;
+        v1 = [(y1 - fb) / fm, y1];
+      } else {
+        if (!v0) v0 = [(y1 - fb) / fm, y1];else if (v0[1] < y0) return;
+        v1 = [(y0 - fb) / fm, y0];
+      }
+    } else {
+      if (ly < ry) {
+        if (!v0) v0 = [x0, fm * x0 + fb];else if (v0[0] >= x1) return;
+        v1 = [x1, fm * x1 + fb];
+      } else {
+        if (!v0) v0 = [x1, fm * x1 + fb];else if (v0[0] < x0) return;
+        v1 = [x0, fm * x0 + fb];
+      }
+    }
+  }
+  edge[0] = v0;
+  edge[1] = v1;
+  return true;
+}
+function clipEdges(x0, y0, x1, y1) {
+  var i = _Diagram.edges.length,
+    edge;
+  while (i--) {
+    if (!connectEdge(edge = _Diagram.edges[i], x0, y0, x1, y1) || !clipEdge(edge, x0, y0, x1, y1) || !(Math.abs(edge[0][0] - edge[1][0]) > _Diagram.epsilon || Math.abs(edge[0][1] - edge[1][1]) > _Diagram.epsilon)) {
+      delete _Diagram.edges[i];
+    }
+  }
+}
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/RedBlackTree.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/RedBlackTree.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/RedBlackTree.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,224 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RedBlackNode = RedBlackNode;
+exports.default = void 0;
+function RedBlackTree() {
+  this._ = null; // root node
+}
+function RedBlackNode(node) {
+  node.U =
+  // parent node
+  node.C =
+  // color - true for red, false for black
+  node.L =
+  // left node
+  node.R =
+  // right node
+  node.P =
+  // previous node
+  node.N = null; // next node
+}
+RedBlackTree.prototype = {
+  constructor: RedBlackTree,
+  insert: function (after, node) {
+    var parent, grandpa, uncle;
+    if (after) {
+      node.P = after;
+      node.N = after.N;
+      if (after.N) after.N.P = node;
+      after.N = node;
+      if (after.R) {
+        after = after.R;
+        while (after.L) after = after.L;
+        after.L = node;
+      } else {
+        after.R = node;
+      }
+      parent = after;
+    } else if (this._) {
+      after = RedBlackFirst(this._);
+      node.P = null;
+      node.N = after;
+      after.P = after.L = node;
+      parent = after;
+    } else {
+      node.P = node.N = null;
+      this._ = node;
+      parent = null;
+    }
+    node.L = node.R = null;
+    node.U = parent;
+    node.C = true;
+    after = node;
+    while (parent && parent.C) {
+      grandpa = parent.U;
+      if (parent === grandpa.L) {
+        uncle = grandpa.R;
+        if (uncle && uncle.C) {
+          parent.C = uncle.C = false;
+          grandpa.C = true;
+          after = grandpa;
+        } else {
+          if (after === parent.R) {
+            RedBlackRotateLeft(this, parent);
+            after = parent;
+            parent = after.U;
+          }
+          parent.C = false;
+          grandpa.C = true;
+          RedBlackRotateRight(this, grandpa);
+        }
+      } else {
+        uncle = grandpa.L;
+        if (uncle && uncle.C) {
+          parent.C = uncle.C = false;
+          grandpa.C = true;
+          after = grandpa;
+        } else {
+          if (after === parent.L) {
+            RedBlackRotateRight(this, parent);
+            after = parent;
+            parent = after.U;
+          }
+          parent.C = false;
+          grandpa.C = true;
+          RedBlackRotateLeft(this, grandpa);
+        }
+      }
+      parent = after.U;
+    }
+    this._.C = false;
+  },
+  remove: function (node) {
+    if (node.N) node.N.P = node.P;
+    if (node.P) node.P.N = node.N;
+    node.N = node.P = null;
+    var parent = node.U,
+      sibling,
+      left = node.L,
+      right = node.R,
+      next,
+      red;
+    if (!left) next = right;else if (!right) next = left;else next = RedBlackFirst(right);
+    if (parent) {
+      if (parent.L === node) parent.L = next;else parent.R = next;
+    } else {
+      this._ = next;
+    }
+    if (left && right) {
+      red = next.C;
+      next.C = node.C;
+      next.L = left;
+      left.U = next;
+      if (next !== right) {
+        parent = next.U;
+        next.U = node.U;
+        node = next.R;
+        parent.L = node;
+        next.R = right;
+        right.U = next;
+      } else {
+        next.U = parent;
+        parent = next;
+        node = next.R;
+      }
+    } else {
+      red = node.C;
+      node = next;
+    }
+    if (node) node.U = parent;
+    if (red) return;
+    if (node && node.C) {
+      node.C = false;
+      return;
+    }
+    do {
+      if (node === this._) break;
+      if (node === parent.L) {
+        sibling = parent.R;
+        if (sibling.C) {
+          sibling.C = false;
+          parent.C = true;
+          RedBlackRotateLeft(this, parent);
+          sibling = parent.R;
+        }
+        if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
+          if (!sibling.R || !sibling.R.C) {
+            sibling.L.C = false;
+            sibling.C = true;
+            RedBlackRotateRight(this, sibling);
+            sibling = parent.R;
+          }
+          sibling.C = parent.C;
+          parent.C = sibling.R.C = false;
+          RedBlackRotateLeft(this, parent);
+          node = this._;
+          break;
+        }
+      } else {
+        sibling = parent.L;
+        if (sibling.C) {
+          sibling.C = false;
+          parent.C = true;
+          RedBlackRotateRight(this, parent);
+          sibling = parent.L;
+        }
+        if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
+          if (!sibling.L || !sibling.L.C) {
+            sibling.R.C = false;
+            sibling.C = true;
+            RedBlackRotateLeft(this, sibling);
+            sibling = parent.L;
+          }
+          sibling.C = parent.C;
+          parent.C = sibling.L.C = false;
+          RedBlackRotateRight(this, parent);
+          node = this._;
+          break;
+        }
+      }
+      sibling.C = true;
+      node = parent;
+      parent = parent.U;
+    } while (!node.C);
+    if (node) node.C = false;
+  }
+};
+function RedBlackRotateLeft(tree, node) {
+  var p = node,
+    q = node.R,
+    parent = p.U;
+  if (parent) {
+    if (parent.L === p) parent.L = q;else parent.R = q;
+  } else {
+    tree._ = q;
+  }
+  q.U = parent;
+  p.U = q;
+  p.R = q.L;
+  if (p.R) p.R.U = p;
+  q.L = p;
+}
+function RedBlackRotateRight(tree, node) {
+  var p = node,
+    q = node.L,
+    parent = p.U;
+  if (parent) {
+    if (parent.L === p) parent.L = q;else parent.R = q;
+  } else {
+    tree._ = q;
+  }
+  q.U = parent;
+  p.U = q;
+  p.L = q.R;
+  if (p.L) p.L.U = p;
+  q.R = p;
+}
+function RedBlackFirst(node) {
+  while (node.L) node = node.L;
+  return node;
+}
+var _default = exports.default = RedBlackTree;
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/constant.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/constant.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,11 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+function _default(x) {
+  return function () {
+    return x;
+  };
+}
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "voronoi", {
+  enumerable: true,
+  get: function () {
+    return _voronoi.default;
+  }
+});
+var _voronoi = _interopRequireDefault(require("./voronoi"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/point.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/point.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/point.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.x = x;
+exports.y = y;
+function x(d) {
+  return d[0];
+}
+function y(d) {
+  return d[1];
+}
Index: node_modules/victory-vendor/lib-vendor/d3-voronoi/src/voronoi.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/d3-voronoi/src/voronoi.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/d3-voronoi/src/voronoi.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,47 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = _default;
+var _constant = _interopRequireDefault(require("./constant"));
+var _point = require("./point");
+var _Diagram = _interopRequireWildcard(require("./Diagram"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function _default() {
+  var x = _point.x,
+    y = _point.y,
+    extent = null;
+  function voronoi(data) {
+    return new _Diagram.default(data.map(function (d, i) {
+      var s = [Math.round(x(d, i, data) / _Diagram.epsilon) * _Diagram.epsilon, Math.round(y(d, i, data) / _Diagram.epsilon) * _Diagram.epsilon];
+      s.index = i;
+      s.data = d;
+      return s;
+    }), extent);
+  }
+  voronoi.polygons = function (data) {
+    return voronoi(data).polygons();
+  };
+  voronoi.links = function (data) {
+    return voronoi(data).links();
+  };
+  voronoi.triangles = function (data) {
+    return voronoi(data).triangles();
+  };
+  voronoi.x = function (_) {
+    return arguments.length ? (x = typeof _ === "function" ? _ : (0, _constant.default)(+_), voronoi) : x;
+  };
+  voronoi.y = function (_) {
+    return arguments.length ? (y = typeof _ === "function" ? _ : (0, _constant.default)(+_), voronoi) : y;
+  };
+  voronoi.extent = function (_) {
+    return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
+  };
+  voronoi.size = function (_) {
+    return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
+  };
+  return voronoi;
+}
Index: node_modules/victory-vendor/lib-vendor/internmap/LICENSE
===================================================================
--- node_modules/victory-vendor/lib-vendor/internmap/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/internmap/LICENSE	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,13 @@
+Copyright 2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
Index: node_modules/victory-vendor/lib-vendor/internmap/src/index.js
===================================================================
--- node_modules/victory-vendor/lib-vendor/internmap/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib-vendor/internmap/src/index.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,87 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.InternSet = exports.InternMap = void 0;
+class InternMap extends Map {
+  constructor(entries, key = keyof) {
+    super();
+    Object.defineProperties(this, {
+      _intern: {
+        value: new Map()
+      },
+      _key: {
+        value: key
+      }
+    });
+    if (entries != null) for (const [key, value] of entries) this.set(key, value);
+  }
+  get(key) {
+    return super.get(intern_get(this, key));
+  }
+  has(key) {
+    return super.has(intern_get(this, key));
+  }
+  set(key, value) {
+    return super.set(intern_set(this, key), value);
+  }
+  delete(key) {
+    return super.delete(intern_delete(this, key));
+  }
+}
+exports.InternMap = InternMap;
+class InternSet extends Set {
+  constructor(values, key = keyof) {
+    super();
+    Object.defineProperties(this, {
+      _intern: {
+        value: new Map()
+      },
+      _key: {
+        value: key
+      }
+    });
+    if (values != null) for (const value of values) this.add(value);
+  }
+  has(value) {
+    return super.has(intern_get(this, value));
+  }
+  add(value) {
+    return super.add(intern_set(this, value));
+  }
+  delete(value) {
+    return super.delete(intern_delete(this, value));
+  }
+}
+exports.InternSet = InternSet;
+function intern_get({
+  _intern,
+  _key
+}, value) {
+  const key = _key(value);
+  return _intern.has(key) ? _intern.get(key) : value;
+}
+function intern_set({
+  _intern,
+  _key
+}, value) {
+  const key = _key(value);
+  if (_intern.has(key)) return _intern.get(key);
+  _intern.set(key, value);
+  return value;
+}
+function intern_delete({
+  _intern,
+  _key
+}, value) {
+  const key = _key(value);
+  if (_intern.has(key)) {
+    value = _intern.get(key);
+    _intern.delete(key);
+  }
+  return value;
+}
+function keyof(value) {
+  return value !== null && typeof value === "object" ? value.valueOf() : value;
+}
Index: node_modules/victory-vendor/lib/d3-array.js
===================================================================
--- node_modules/victory-vendor/lib/d3-array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-array.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-array` (CommonJS)
+// See upstream license: https://github.com/d3/d3-array/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-array`
+module.exports = require("../lib-vendor/d3-array/src/index.js");
Index: node_modules/victory-vendor/lib/d3-color.js
===================================================================
--- node_modules/victory-vendor/lib/d3-color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-color.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-color` (CommonJS)
+// See upstream license: https://github.com/d3/d3-color/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-color`
+module.exports = require("../lib-vendor/d3-color/src/index.js");
Index: node_modules/victory-vendor/lib/d3-ease.js
===================================================================
--- node_modules/victory-vendor/lib/d3-ease.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-ease.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-ease` (CommonJS)
+// See upstream license: https://github.com/d3/d3-ease/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-ease`
+module.exports = require("../lib-vendor/d3-ease/src/index.js");
Index: node_modules/victory-vendor/lib/d3-format.js
===================================================================
--- node_modules/victory-vendor/lib/d3-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-format` (CommonJS)
+// See upstream license: https://github.com/d3/d3-format/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-format`
+module.exports = require("../lib-vendor/d3-format/src/index.js");
Index: node_modules/victory-vendor/lib/d3-interpolate.js
===================================================================
--- node_modules/victory-vendor/lib/d3-interpolate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-interpolate.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-interpolate` (CommonJS)
+// See upstream license: https://github.com/d3/d3-interpolate/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-interpolate`
+module.exports = require("../lib-vendor/d3-interpolate/src/index.js");
Index: node_modules/victory-vendor/lib/d3-path.js
===================================================================
--- node_modules/victory-vendor/lib/d3-path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-path.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-path` (CommonJS)
+// See upstream license: https://github.com/d3/d3-path/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-path`
+module.exports = require("../lib-vendor/d3-path/src/index.js");
Index: node_modules/victory-vendor/lib/d3-scale.js
===================================================================
--- node_modules/victory-vendor/lib/d3-scale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-scale.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-scale` (CommonJS)
+// See upstream license: https://github.com/d3/d3-scale/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-scale`
+module.exports = require("../lib-vendor/d3-scale/src/index.js");
Index: node_modules/victory-vendor/lib/d3-shape.js
===================================================================
--- node_modules/victory-vendor/lib/d3-shape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-shape.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-shape` (CommonJS)
+// See upstream license: https://github.com/d3/d3-shape/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-shape`
+module.exports = require("../lib-vendor/d3-shape/src/index.js");
Index: node_modules/victory-vendor/lib/d3-time-format.js
===================================================================
--- node_modules/victory-vendor/lib/d3-time-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-time-format.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-time-format` (CommonJS)
+// See upstream license: https://github.com/d3/d3-time-format/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-time-format`
+module.exports = require("../lib-vendor/d3-time-format/src/index.js");
Index: node_modules/victory-vendor/lib/d3-time.js
===================================================================
--- node_modules/victory-vendor/lib/d3-time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-time.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-time` (CommonJS)
+// See upstream license: https://github.com/d3/d3-time/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-time`
+module.exports = require("../lib-vendor/d3-time/src/index.js");
Index: node_modules/victory-vendor/lib/d3-timer.js
===================================================================
--- node_modules/victory-vendor/lib/d3-timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-timer.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-timer` (CommonJS)
+// See upstream license: https://github.com/d3/d3-timer/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-timer`
+module.exports = require("../lib-vendor/d3-timer/src/index.js");
Index: node_modules/victory-vendor/lib/d3-voronoi.js
===================================================================
--- node_modules/victory-vendor/lib/d3-voronoi.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/d3-voronoi.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/d3-voronoi` (CommonJS)
+// See upstream license: https://github.com/d3/d3-voronoi/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/d3-voronoi`
+module.exports = require("../lib-vendor/d3-voronoi/src/index.js");
Index: node_modules/victory-vendor/lib/internmap.js
===================================================================
--- node_modules/victory-vendor/lib/internmap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/lib/internmap.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,6 @@
+
+// `victory-vendor/internmap` (CommonJS)
+// See upstream license: https://github.com/mbostock/internmap/blob/main/LICENSE
+//
+// Our CommonJS package relies on transpiled vendor files in `lib-vendor/internmap`
+module.exports = require("../lib-vendor/internmap/src/index.js");
Index: node_modules/victory-vendor/package.json
===================================================================
--- node_modules/victory-vendor/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/victory-vendor/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,157 @@
+{
+  "name": "victory-vendor",
+  "version": "37.3.6",
+  "description": "Vendored dependencies for Victory",
+  "keywords": [
+    "data visualization",
+    "React",
+    "d3",
+    "charting"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/FormidableLabs/victory"
+  },
+  "homepage": "https://commerce.nearform.com/open-source/victory",
+  "author": "Formidable",
+  "license": "MIT AND ISC",
+  "exports": {
+    "./package.json": "./package.json",
+    "./d3-*": {
+      "types": "./d3-*.d.ts",
+      "import": "./es/d3-*.js",
+      "default": "./lib/d3-*.js"
+    }
+  },
+  "dependencies": {
+    "@types/d3-array": "^3.0.3",
+    "@types/d3-ease": "^3.0.0",
+    "@types/d3-interpolate": "^3.0.1",
+    "@types/d3-scale": "^4.0.2",
+    "@types/d3-shape": "^3.1.0",
+    "@types/d3-time": "^3.0.0",
+    "@types/d3-timer": "^3.0.0",
+    "d3-array": "^3.1.6",
+    "d3-ease": "^3.0.1",
+    "d3-interpolate": "^3.0.1",
+    "d3-scale": "^4.0.2",
+    "d3-shape": "^3.1.0",
+    "d3-time": "^3.0.0",
+    "d3-timer": "^3.0.1"
+  },
+  "devDependencies": {
+    "d3-color": "^3.1.0",
+    "d3-format": "^3.1.0",
+    "d3-path": "^3.0.1",
+    "d3-time-format": "^4.1.0",
+    "d3-voronoi": "^1.1.4",
+    "internmap": "^2.0.3",
+    "execa": "^6.1.0",
+    "rimraf": "^3.0.2"
+  },
+  "publishConfig": {
+    "provenance": true
+  },
+  "wireit": {
+    "build": {
+      "command": "node ./scripts/build.js",
+      "files": [
+        ".babelrc.js",
+        "scripts/build.js",
+        "node_modules/**"
+      ],
+      "output": [
+        "es/**",
+        "lib/**",
+        "lib-vendor/**",
+        "d3-*"
+      ],
+      "packageLocks": [
+        "pnpm-lock.yaml"
+      ]
+    },
+    "build:lib:esm": {
+      "dependencies": [
+        "build"
+      ]
+    },
+    "build:lib:cjs": {
+      "dependencies": [
+        "build"
+      ]
+    },
+    "build:dist": {
+      "dependencies": [
+        "build"
+      ]
+    },
+    "build:dist:dev": {
+      "dependencies": [
+        "build"
+      ]
+    },
+    "build:dist:min": {
+      "dependencies": [
+        "build"
+      ]
+    },
+    "check": {
+      "dependencies": [
+        "types:check",
+        "jest",
+        "format",
+        "lint"
+      ]
+    },
+    "types:check": {
+      "command": "echo \"No types to check here\"",
+      "files": [],
+      "output": []
+    },
+    "types:create": {
+      "dependencies": [
+        "build"
+      ]
+    },
+    "lint": {
+      "command": "eslint scripts",
+      "files": [
+        "scripts/**"
+      ],
+      "output": [],
+      "packageLocks": [
+        "pnpm-lock.yaml"
+      ]
+    },
+    "lint:fix": {
+      "command": "eslint --fix scripts",
+      "files": [
+        "scripts/**"
+      ],
+      "output": [],
+      "packageLocks": [
+        "pnpm-lock.yaml"
+      ]
+    },
+    "jest": {
+      "command": "echo victory-vendor has no tests",
+      "files": [],
+      "output": []
+    }
+  },
+  "scripts": {
+    "build": "wireit",
+    "build:lib": "wireit",
+    "build:lib:esm": "wireit",
+    "build:lib:cjs": "wireit",
+    "build:dist": "wireit",
+    "build:dist:dev": "wireit",
+    "build:dist:min": "wireit",
+    "check": "wireit",
+    "types:check": "wireit",
+    "types:create": "wireit",
+    "lint": "wireit",
+    "lint:fix": "wireit",
+    "jest": "wireit"
+  }
+}
Index: node_modules/warning/CHANGELOG.md
===================================================================
--- node_modules/warning/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/warning/CHANGELOG.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,83 @@
+<a name="4.0.3"></a>
+## [4.0.3](https://github.com/BerkeleyTrue/warning/compare/v4.0.2...v4.0.3) (2019-02-09)
+
+
+### Bug Fixes
+
+* incorrect formatting of message with arguments ([b188176](https://github.com/BerkeleyTrue/warning/commit/b188176))
+
+
+
+<a name="4.0.2"></a>
+## [4.0.2](https://github.com/BerkeleyTrue/warning/compare/v4.0.1...v4.0.2) (2018-08-17)
+
+
+### Bug Fixes
+
+* **use jest instead of tap:** tap is a PITA to debug ([c4c026b](https://github.com/BerkeleyTrue/warning/commit/c4c026b))
+* remove [@provides](https://github.com/provides)Module annotation ([1d808f1](https://github.com/BerkeleyTrue/warning/commit/1d808f1))
+
+
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+<a name="4.0.1"></a>
+## [4.0.1](https://github.com/BerkeleyTrue/warning/compare/v4.0.0...v4.0.1) (2018-05-30)
+
+
+### Bug Fixes
+
+* add `var printWarning =` to comply with ES5 strict mode ([677dcfa](https://github.com/BerkeleyTrue/warning/commit/677dcfa)), closes [#25](https://github.com/BerkeleyTrue/warning/issues/25)
+
+<a name="4.0.0"></a>
+## [4.0.0](https://github.com/BerkeleyTrue/warning/compare/v3.0.0...v4.0.0) (2018-05-22)
+
+
+### Bug Fixes
+
+* Remove "browser" version ([521f5f5](https://github.com/BerkeleyTrue/warning/commit/521f5f5)), closes [#18](https://github.com/BerkeleyTrue/warning/issues/18) [/github.com/facebook/fbjs/pull/86#issuecomment-285204734](https://github.com//github.com/facebook/fbjs/pull/86/issues/issuecomment-285204734)
+* Update warning to use the latest version from facebook/fbjs ([0572ddd](https://github.com/BerkeleyTrue/warning/commit/0572ddd))
+
+
+### Chores
+
+* **LICENSE:** Change from BSD modified to MIT ([5a63a1b](https://github.com/BerkeleyTrue/warning/commit/5a63a1b))
+
+
+### BREAKING CHANGES
+
+* **LICENSE:** Change License to MIT from BSD+patents
+* This changes the internal workings. A major release is
+made to ensure minimal effect on downstream users.
+
+
+<a name="3.0.0"></a>
+## [3.0.0](https://github.com/BerkeleyTrue/warning/compare/v2.1.0...v3.0.0) (2015-10-04)
+
+### BREAKING CHANGE
+
+* **package.json** correct license field ([6bd7ad5](https://github.com/BerkeleyTrue/warning/commit/6bd7ad5))
+
+<a name="2.1.0"></a>
+## [2.1.0](https://github.com/BerkeleyTrue/warning/compare/v2.0.0...v2.1.0) (2015-10-04)
+
+### Features
+
+* switch to loose-envify ([dacc2da](https://github.com/BerkeleyTrue/warning/commit/dacc2da))
+
+<a name="2.0.0"></a>
+## [2.0.0](https://github.com/BerkeleyTrue/warning/compare/v1.0.2...v2.0.0) (2015-07-11)
+
+### BREAKING CHANGE
+
+* add browser(ify) friendly version ([1a33d40fa1](https://github.com/BerkeleyTrue/warning/commit/1a33d40fa1))
+
+<a name="1.0.2"></a>
+## [1.0.2](https://github.com/BerkeleyTrue/warning/compare/v1.0.1...v1.0.2) (2015-05-30)
+
+### Bug Fixes
+
+* return args in replace ([2ac6962](https://github.com/BerkeleyTrue/warning/commit/2ac6962263))
Index: node_modules/warning/LICENSE.md
===================================================================
--- node_modules/warning/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/warning/LICENSE.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013-present, Facebook, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: node_modules/warning/README.md
===================================================================
--- node_modules/warning/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/warning/README.md	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,69 @@
+# Warning [![npm version](https://badge.fury.io/js/warning.svg)](https://badge.fury.io/js/warning)
+
+[![Greenkeeper badge](https://badges.greenkeeper.io/BerkeleyTrue/warning.svg)](https://greenkeeper.io/)
+A mirror of Facebook's [Warning](https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/warning.js)
+
+
+## Usage
+```
+npm install warning
+```
+
+```
+// some script
+var warning = require('warning');
+
+var ShouldBeTrue = false;
+
+warning(
+  ShouldBeTrue,
+  'This thing should be true but you set to false. No soup for you!'
+);
+//  'This thing should be true but you set to false. No soup for you!'
+```
+
+Similar to Facebook's (FB) invariant but only logs a warning if the condition is not met.
+This can be used to log issues in development environments in critical
+paths. Removing the logging code for production environments will keep the
+same logic and follow the same code paths.
+
+## FAQ (READ before opening an issue)
+
+> Why do you use `console.error` instead of `console.warn` ?
+
+This is a mirror of Facebook's (FB) [warning](https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/warning.js) module used within React's source code (and other FB software).
+As such this module will mirror their code as much as possible. 
+
+The descision to use `error` over `warn` was made a long time ago by the FB team and isn't going to change anytime soon.
+
+The source can be found here: https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/warning.js
+The reasoning can be found here and elsewhere: https://github.com/facebook/fbjs/pull/94#issuecomment-168332326
+
+> Can I add X feature?
+
+This is a mirror of Facebook's (FB) [warning](https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/warning.js) and as such the source and signature will mirror that module.
+
+If you believe a feature is missing than please open a feature request [there](https://github.com/facebook/fbjs).
+If it is approved and merged in that this module will be updated to reflect that change, otherwise this module will not change.
+
+## Use in Production
+
+It is recommended to add [babel-plugin-dev-expression](https://github.com/4Catalyzer/babel-plugin-dev-expression) with this module to remove warning messages in production.
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<small>Don't Forget To Be Awesome</small>
Index: node_modules/warning/package.json
===================================================================
--- node_modules/warning/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/warning/package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,55 @@
+{
+  "name": "warning",
+  "version": "4.0.3",
+  "description": "A mirror of Facebook's Warning",
+  "main": "warning.js",
+  "scripts": {
+    "test": "npm run test:dev && npm run test:prod",
+    "test:dev": "NODE_ENV=development jest",
+    "test:prod": "NODE_ENV=production jest",
+    "commit": "git cz",
+    "commitmsg": "commitlint -e $GIT_PARAMS"
+  },
+  "dependencies": {
+    "loose-envify": "^1.0.0"
+  },
+  "devDependencies": {
+    "@commitlint/cli": "^6.2.0",
+    "@commitlint/config-conventional": "^6.1.3",
+    "browserify": "^16.2.2",
+    "commitizen": "^2.10.1",
+    "cz-conventional-changelog": "^2.1.0",
+    "husky": "^0.14.3",
+    "jest": "^23.1.0",
+    "uglify-js": "^3.3.25"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/BerkeleyTrue/warning.git"
+  },
+  "config": {
+    "commitizen": {
+      "path": "cz-conventional-changelog"
+    }
+  },
+  "browserify": {
+    "transform": [
+      "loose-envify"
+    ]
+  },
+  "files": [
+    "warning.js"
+  ],
+  "keywords": [
+    "warning",
+    "facebook",
+    "react",
+    "invariant"
+  ],
+  "author": "Berkeley Martinez <berkeley@berkeleytrue.com> (http://www.berkeleytrue.com)",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/BerkeleyTrue/warning/issues"
+  },
+  "homepage": "https://github.com/BerkeleyTrue/warning"
+}
Index: node_modules/warning/warning.js
===================================================================
--- node_modules/warning/warning.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
+++ node_modules/warning/warning.js	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+/**
+ * Similar to invariant but only logs a warning if the condition is not met.
+ * This can be used to log issues in development environments in critical
+ * paths. Removing the logging code for production environments will keep the
+ * same logic and follow the same code paths.
+ */
+
+var __DEV__ = process.env.NODE_ENV !== 'production';
+
+var warning = function() {};
+
+if (__DEV__) {
+  var printWarning = function printWarning(format, args) {
+    var len = arguments.length;
+    args = new Array(len > 1 ? len - 1 : 0);
+    for (var key = 1; key < len; key++) {
+      args[key - 1] = arguments[key];
+    }
+    var argIndex = 0;
+    var message = 'Warning: ' +
+      format.replace(/%s/g, function() {
+        return args[argIndex++];
+      });
+    if (typeof console !== 'undefined') {
+      console.error(message);
+    }
+    try {
+      // --- Welcome to debugging React ---
+      // This error was thrown as a convenience so that you can use this stack
+      // to find the callsite that caused this warning to fire.
+      throw new Error(message);
+    } catch (x) {}
+  }
+
+  warning = function(condition, format, args) {
+    var len = arguments.length;
+    args = new Array(len > 2 ? len - 2 : 0);
+    for (var key = 2; key < len; key++) {
+      args[key - 2] = arguments[key];
+    }
+    if (format === undefined) {
+      throw new Error(
+          '`warning(condition, format, ...args)` requires a warning ' +
+          'message argument'
+      );
+    }
+    if (!condition) {
+      printWarning.apply(null, [format].concat(args));
+    }
+  };
+}
+
+module.exports = warning;
Index: package-lock.json
===================================================================
--- package-lock.json	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ package-lock.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,4 +1,4 @@
 {
-  "name": "PACrust",
+  "name": "P-ACrust",
   "lockfileVersion": 3,
   "requires": true,
@@ -6,8 +6,137 @@
     "": {
       "dependencies": {
+        "chart.js": "^4.5.0",
         "cors": "^2.8.5",
         "dotenv": "^16.5.0",
+        "es-toolkit": "^1.39.10",
         "express": "^5.1.0",
-        "pg": "^8.16.2"
+        "pg": "^8.16.2",
+        "react": "^19.1.1",
+        "react-chartjs-2": "^5.3.0",
+        "react-dom": "^19.1.1",
+        "react-time-picker": "^7.0.0",
+        "recharts": "^3.1.2"
+      }
+    },
+    "node_modules/@kurkle/color": {
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz",
+      "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
+      "license": "MIT"
+    },
+    "node_modules/@reduxjs/toolkit": {
+      "version": "2.8.2",
+      "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.8.2.tgz",
+      "integrity": "sha512-MYlOhQ0sLdw4ud48FoC5w0dH9VfWQjtCjreKwYTT3l+r427qYC5Y8PihNutepr8XrNaBUDQo9khWUwQxZaqt5A==",
+      "license": "MIT",
+      "dependencies": {
+        "@standard-schema/spec": "^1.0.0",
+        "@standard-schema/utils": "^0.3.0",
+        "immer": "^10.0.3",
+        "redux": "^5.0.1",
+        "redux-thunk": "^3.1.0",
+        "reselect": "^5.1.0"
+      },
+      "peerDependencies": {
+        "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
+        "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "react": {
+          "optional": true
+        },
+        "react-redux": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@standard-schema/spec": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
+      "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+      "license": "MIT"
+    },
+    "node_modules/@standard-schema/utils": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
+      "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-array": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+      "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-color": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+      "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-ease": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+      "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-interpolate": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+      "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/d3-color": "*"
+      }
+    },
+    "node_modules/@types/d3-path": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+      "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-scale": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+      "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/d3-time": "*"
+      }
+    },
+    "node_modules/@types/d3-shape": {
+      "version": "3.1.7",
+      "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz",
+      "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/d3-path": "*"
+      }
+    },
+    "node_modules/@types/d3-time": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+      "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+      "license": "MIT"
+    },
+    "node_modules/@types/d3-timer": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+      "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+      "license": "MIT"
+    },
+    "node_modules/@types/use-sync-external-store": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
+      "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
+      "license": "MIT"
+    },
+    "node_modules/@wojtekmaj/date-utils": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/@wojtekmaj/date-utils/-/date-utils-1.5.1.tgz",
+      "integrity": "sha512-+i7+JmNiE/3c9FKxzWFi2IjRJ+KzZl1QPu6QNrsgaa2MuBgXvUy4gA1TVzf/JMdIIloB76xSKikTWuyYAIVLww==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/wojtekmaj/date-utils?sponsor=1"
       }
     },
@@ -83,4 +212,25 @@
       }
     },
+    "node_modules/chart.js": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz",
+      "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@kurkle/color": "^0.3.0"
+      },
+      "engines": {
+        "pnpm": ">=8"
+      }
+    },
+    "node_modules/clsx": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/content-disposition": {
       "version": "1.0.0",
@@ -135,4 +285,125 @@
       }
     },
+    "node_modules/d3-array": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+      "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+      "license": "ISC",
+      "dependencies": {
+        "internmap": "1 - 2"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-color": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-ease": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+      "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-format": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+      "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-interpolate": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+      "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-color": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-path": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+      "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-scale": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+      "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-array": "2.10.0 - 3",
+        "d3-format": "1 - 3",
+        "d3-interpolate": "1.2.0 - 3",
+        "d3-time": "2.1.1 - 3",
+        "d3-time-format": "2 - 4"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-shape": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+      "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-path": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-time": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+      "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-array": "2 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-time-format": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+      "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+      "license": "ISC",
+      "dependencies": {
+        "d3-time": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-timer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+      "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/debug": {
       "version": "4.4.1",
@@ -152,4 +423,10 @@
       }
     },
+    "node_modules/decimal.js-light": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+      "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
+      "license": "MIT"
+    },
     "node_modules/depd": {
       "version": "2.0.0",
@@ -161,8 +438,17 @@
       }
     },
+    "node_modules/detect-element-overflow": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/detect-element-overflow/-/detect-element-overflow-1.4.2.tgz",
+      "integrity": "sha512-4m6cVOtvm/GJLjo7WFkPfwXoEIIbM7GQwIh4WEa4g7IsNi1YzwUsGL5ApNLrrHL29bHeNeQ+/iZhw+YHqgE2Fw==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/wojtekmaj/detect-element-overflow?sponsor=1"
+      }
+    },
     "node_modules/dotenv": {
-      "version": "16.5.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
-      "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
+      "version": "16.6.1",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
+      "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
       "license": "BSD-2-Clause",
       "engines": {
@@ -232,4 +518,14 @@
       }
     },
+    "node_modules/es-toolkit": {
+      "version": "1.39.10",
+      "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.39.10.tgz",
+      "integrity": "sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==",
+      "license": "MIT",
+      "workspaces": [
+        "docs",
+        "benchmarks"
+      ]
+    },
     "node_modules/escape-html": {
       "version": "1.0.3",
@@ -246,4 +542,10 @@
         "node": ">= 0.6"
       }
+    },
+    "node_modules/eventemitter3": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+      "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+      "license": "MIT"
     },
     "node_modules/express": {
@@ -370,4 +672,16 @@
       }
     },
+    "node_modules/get-user-locale": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/get-user-locale/-/get-user-locale-2.3.2.tgz",
+      "integrity": "sha512-O2GWvQkhnbDoWFUJfaBlDIKUEdND8ATpBXD6KXcbhxlfktyD/d8w6mkzM/IlQEqGZAMz/PW6j6Hv53BiigKLUQ==",
+      "license": "MIT",
+      "dependencies": {
+        "mem": "^8.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/wojtekmaj/get-user-locale?sponsor=1"
+      }
+    },
     "node_modules/gopd": {
       "version": "1.2.0",
@@ -443,4 +757,14 @@
       }
     },
+    "node_modules/immer": {
+      "version": "10.1.1",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz",
+      "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/immer"
+      }
+    },
     "node_modules/inherits": {
       "version": "2.0.4",
@@ -449,4 +773,13 @@
       "license": "ISC"
     },
+    "node_modules/internmap": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+      "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/ipaddr.js": {
       "version": "1.9.1",
@@ -464,4 +797,43 @@
       "license": "MIT"
     },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "license": "MIT"
+    },
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "license": "MIT",
+      "dependencies": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      },
+      "bin": {
+        "loose-envify": "cli.js"
+      }
+    },
+    "node_modules/make-event-props": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz",
+      "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1"
+      }
+    },
+    "node_modules/map-age-cleaner": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+      "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+      "license": "MIT",
+      "dependencies": {
+        "p-defer": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/math-intrinsics": {
       "version": "1.1.0",
@@ -482,4 +854,20 @@
       }
     },
+    "node_modules/mem": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
+      "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==",
+      "license": "MIT",
+      "dependencies": {
+        "map-age-cleaner": "^0.1.3",
+        "mimic-fn": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/mem?sponsor=1"
+      }
+    },
     "node_modules/merge-descriptors": {
       "version": "2.0.0",
@@ -513,4 +901,13 @@
       "engines": {
         "node": ">= 0.6"
+      }
+    },
+    "node_modules/mimic-fn": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
+      "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
@@ -572,4 +969,13 @@
       }
     },
+    "node_modules/p-defer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+      "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/parseurl": {
       "version": "1.3.3",
@@ -591,12 +997,12 @@
     },
     "node_modules/pg": {
-      "version": "8.16.2",
-      "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.2.tgz",
-      "integrity": "sha512-OtLWF0mKLmpxelOt9BqVq83QV6bTfsS0XLegIeAKqKjurRnRKie1Dc1iL89MugmSLhftxw6NNCyZhm1yQFLMEQ==",
+      "version": "8.16.3",
+      "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz",
+      "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==",
       "license": "MIT",
       "dependencies": {
         "pg-connection-string": "^2.9.1",
         "pg-pool": "^3.10.1",
-        "pg-protocol": "^1.10.2",
+        "pg-protocol": "^1.10.3",
         "pg-types": "2.2.0",
         "pgpass": "1.0.5"
@@ -606,5 +1012,5 @@
       },
       "optionalDependencies": {
-        "pg-cloudflare": "^1.2.6"
+        "pg-cloudflare": "^1.2.7"
       },
       "peerDependencies": {
@@ -618,7 +1024,7 @@
     },
     "node_modules/pg-cloudflare": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.6.tgz",
-      "integrity": "sha512-uxmJAnmIgmYgnSFzgOf2cqGQBzwnRYcrEgXuFjJNEkpedEIPBSEzxY7ph4uA9k1mI+l/GR0HjPNS6FKNZe8SBQ==",
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz",
+      "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==",
       "license": "MIT",
       "optional": true
@@ -649,7 +1055,7 @@
     },
     "node_modules/pg-protocol": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.2.tgz",
-      "integrity": "sha512-Ci7jy8PbaWxfsck2dwZdERcDG2A0MG8JoQILs+uZNjABFuBuItAZCWUNz8sXRDMoui24rJw7WlXqgpMdBSN/vQ==",
+      "version": "1.10.3",
+      "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz",
+      "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==",
       "license": "MIT"
     },
@@ -769,4 +1175,191 @@
         "node": ">= 0.8"
       }
+    },
+    "node_modules/react": {
+      "version": "19.1.1",
+      "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz",
+      "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/react-chartjs-2": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.3.0.tgz",
+      "integrity": "sha512-UfZZFnDsERI3c3CZGxzvNJd02SHjaSJ8kgW1djn65H1KK8rehwTjyrRKOG3VTMG8wtHZ5rgAO5oTHtHi9GCCmw==",
+      "license": "MIT",
+      "peerDependencies": {
+        "chart.js": "^4.1.1",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
+    "node_modules/react-clock": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/react-clock/-/react-clock-5.1.0.tgz",
+      "integrity": "sha512-DKmr29VOK6M8wpbzGUZZa9PwGnG9uC6QXtDLwGwcc2r3vdS/HxNhf5xMMjudXLk7m096mNJQf7AgfjiDpzAYYw==",
+      "license": "MIT",
+      "dependencies": {
+        "@wojtekmaj/date-utils": "^1.5.0",
+        "clsx": "^2.0.0",
+        "get-user-locale": "^2.2.1"
+      },
+      "funding": {
+        "url": "https://github.com/wojtekmaj/react-clock?sponsor=1"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-dom": {
+      "version": "19.1.1",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz",
+      "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==",
+      "license": "MIT",
+      "dependencies": {
+        "scheduler": "^0.26.0"
+      },
+      "peerDependencies": {
+        "react": "^19.1.1"
+      }
+    },
+    "node_modules/react-fit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/react-fit/-/react-fit-2.0.1.tgz",
+      "integrity": "sha512-Eip6ALs/+6Jv82Si0I9UnfysdwVlAhkkZRycgmMdnj7jwUg69SVFp84ICxwB8zszkfvJJ2MGAAo9KAYM8ZUykQ==",
+      "license": "MIT",
+      "dependencies": {
+        "detect-element-overflow": "^1.4.0",
+        "warning": "^4.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/wojtekmaj/react-fit?sponsor=1"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-is": {
+      "version": "19.1.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz",
+      "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==",
+      "license": "MIT",
+      "peer": true
+    },
+    "node_modules/react-redux": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
+      "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/use-sync-external-store": "^0.0.6",
+        "use-sync-external-store": "^1.4.0"
+      },
+      "peerDependencies": {
+        "@types/react": "^18.2.25 || ^19",
+        "react": "^18.0 || ^19",
+        "redux": "^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "redux": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-time-picker": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/react-time-picker/-/react-time-picker-7.0.0.tgz",
+      "integrity": "sha512-k6mUjkI+OsY73mg0yjMxqkLXv/UXR1LN7AARNqfyGZOwqHqo1JrjL3lLHTHWQ86HmPTBL/dZACbIX/fV1NLmWg==",
+      "license": "MIT",
+      "dependencies": {
+        "@wojtekmaj/date-utils": "^1.1.3",
+        "clsx": "^2.0.0",
+        "get-user-locale": "^2.2.1",
+        "make-event-props": "^1.6.0",
+        "react-clock": "^5.0.0",
+        "react-fit": "^2.0.0",
+        "update-input-width": "^1.4.0"
+      },
+      "funding": {
+        "url": "https://github.com/wojtekmaj/react-time-picker?sponsor=1"
+      },
+      "peerDependencies": {
+        "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/recharts": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.1.2.tgz",
+      "integrity": "sha512-vhNbYwaxNbk/IATK0Ki29k3qvTkGqwvCgyQAQ9MavvvBwjvKnMTswdbklJpcOAoMPN/qxF3Lyqob0zO+ZXkZ4g==",
+      "license": "MIT",
+      "dependencies": {
+        "@reduxjs/toolkit": "1.x.x || 2.x.x",
+        "clsx": "^2.1.1",
+        "decimal.js-light": "^2.5.1",
+        "es-toolkit": "^1.39.3",
+        "eventemitter3": "^5.0.1",
+        "immer": "^10.1.1",
+        "react-redux": "8.x.x || 9.x.x",
+        "reselect": "5.1.1",
+        "tiny-invariant": "^1.3.3",
+        "use-sync-external-store": "^1.2.2",
+        "victory-vendor": "^37.0.2"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
+    "node_modules/redux": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+      "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
+      "license": "MIT"
+    },
+    "node_modules/redux-thunk": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
+      "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
+      "license": "MIT",
+      "peerDependencies": {
+        "redux": "^5.0.0"
+      }
+    },
+    "node_modules/reselect": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+      "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
+      "license": "MIT"
     },
     "node_modules/router": {
@@ -812,4 +1405,10 @@
       "license": "MIT"
     },
+    "node_modules/scheduler": {
+      "version": "0.26.0",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
+      "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
+      "license": "MIT"
+    },
     "node_modules/send": {
       "version": "1.2.0",
@@ -945,4 +1544,10 @@
       }
     },
+    "node_modules/tiny-invariant": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+      "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+      "license": "MIT"
+    },
     "node_modules/toidentifier": {
       "version": "1.0.1",
@@ -977,4 +1582,22 @@
       }
     },
+    "node_modules/update-input-width": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/update-input-width/-/update-input-width-1.4.2.tgz",
+      "integrity": "sha512-/p0XLhrQQQ4bMWD7bL9duYObwYCO1qGr8R19xcMmoMSmXuQ7/1//veUnCObQ7/iW6E2pGS6rFkS4TfH4ur7e/g==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/wojtekmaj/update-input-width?sponsor=1"
+      }
+    },
+    "node_modules/use-sync-external-store": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
+      "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
+      "license": "MIT",
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
     "node_modules/vary": {
       "version": "1.1.2",
@@ -984,4 +1607,35 @@
       "engines": {
         "node": ">= 0.8"
+      }
+    },
+    "node_modules/victory-vendor": {
+      "version": "37.3.6",
+      "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
+      "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==",
+      "license": "MIT AND ISC",
+      "dependencies": {
+        "@types/d3-array": "^3.0.3",
+        "@types/d3-ease": "^3.0.0",
+        "@types/d3-interpolate": "^3.0.1",
+        "@types/d3-scale": "^4.0.2",
+        "@types/d3-shape": "^3.1.0",
+        "@types/d3-time": "^3.0.0",
+        "@types/d3-timer": "^3.0.0",
+        "d3-array": "^3.1.6",
+        "d3-ease": "^3.0.1",
+        "d3-interpolate": "^3.0.1",
+        "d3-scale": "^4.0.2",
+        "d3-shape": "^3.1.0",
+        "d3-time": "^3.0.0",
+        "d3-timer": "^3.0.1"
+      }
+    },
+    "node_modules/warning": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.0.0"
       }
     },
Index: package.json
===================================================================
--- package.json	(revision 5dda9b1bedf14e8c524eb614b6b04ad95f333c5d)
+++ package.json	(revision 10d7271b3371d7aad584accfff5489f4a2233722)
@@ -1,8 +1,15 @@
 {
   "dependencies": {
+    "chart.js": "^4.5.0",
     "cors": "^2.8.5",
     "dotenv": "^16.5.0",
+    "es-toolkit": "^1.39.10",
     "express": "^5.1.0",
-    "pg": "^8.16.2"
+    "pg": "^8.16.2",
+    "react": "^19.1.1",
+    "react-chartjs-2": "^5.3.0",
+    "react-dom": "^19.1.1",
+    "react-time-picker": "^7.0.0",
+    "recharts": "^3.1.2"
   },
   "type": "module"
